ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL0tjb25maWcgYi9kcml2ZXJzL3VzYi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMzI5ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9LY29uZmlnCkBAIC0wLDAgKzEsMTI3IEBACisjCisjIFVTQiBkZXZpY2UgY29uZmlndXJhdGlvbgorIworCittZW51ICJVU0Igc3VwcG9ydCIKKworIyBIb3N0LXNpZGUgVVNCIGRlcGVuZHMgb24gaGF2aW5nIGEgaG9zdCBjb250cm9sbGVyCisjIE5PVEU6ICBkdW1teV9oY2QgaXMgYWx3YXlzIGFuIG9wdGlvbiwgYnV0IGl0J3MgaWdub3JlZCBoZXJlIC4uLgorIyBOT1RFOiAgU0wtODExIG9wdGlvbiBzaG91bGQgYmUgYm9hcmQtc3BlY2lmaWMgLi4uCitjb25maWcgVVNCX0FSQ0hfSEFTX0hDRAorCWJvb2xlYW4KKwlkZWZhdWx0IHkgaWYgVVNCX0FSQ0hfSEFTX09IQ0kKKwlkZWZhdWx0IHkgaWYgQVJNCQkJCSMgU0wtODExCisJZGVmYXVsdCBQQ0kKKworIyBtYW55IG5vbi1QQ0kgU09DIGNoaXBzIGVtYmVkIE9IQ0kKK2NvbmZpZyBVU0JfQVJDSF9IQVNfT0hDSQorCWJvb2xlYW4KKwkjIEFSTToKKwlkZWZhdWx0IHkgaWYgU0ExMTExCisJZGVmYXVsdCB5IGlmIEFSQ0hfT01BUAorCWRlZmF1bHQgeSBpZiBBUkNIX0xIN0E0MDQKKwlkZWZhdWx0IHkgaWYgUFhBMjd4CisJIyBQUEM6CisJZGVmYXVsdCB5IGlmIFNUQjAzeHh4CisJZGVmYXVsdCB5IGlmIFBQQ19NUEM1Mnh4CisJIyBNSVBTOgorCWRlZmF1bHQgeSBpZiBTT0NfQVUxWDAwCisJIyBtb3JlOgorCWRlZmF1bHQgUENJCisKKyMgQVJNIFNBMTExMSBjaGlwcyBoYXZlIGEgbm9uLVBDSSBiYXNlZCAiT0hDSS1jb21wYXRpYmxlIiBVU0IgaG9zdCBpbnRlcmZhY2UuCitjb25maWcgVVNCCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIEhvc3Qtc2lkZSBVU0IiCisJZGVwZW5kcyBvbiBVU0JfQVJDSF9IQVNfSENECisJLS0taGVscC0tLQorCSAgVW5pdmVyc2FsIFNlcmlhbCBCdXMgKFVTQikgaXMgYSBzcGVjaWZpY2F0aW9uIGZvciBhIHNlcmlhbCBidXMKKwkgIHN1YnN5c3RlbSB3aGljaCBvZmZlcnMgaGlnaGVyIHNwZWVkcyBhbmQgbW9yZSBmZWF0dXJlcyB0aGFuIHRoZQorCSAgdHJhZGl0aW9uYWwgUEMgc2VyaWFsIHBvcnQuICBUaGUgYnVzIHN1cHBsaWVzIHBvd2VyIHRvIHBlcmlwaGVyYWxzCisJICBhbmQgYWxsb3dzIGZvciBob3Qgc3dhcHBpbmcuICBVcCB0byAxMjcgVVNCIHBlcmlwaGVyYWxzIGNhbiBiZQorCSAgY29ubmVjdGVkIHRvIGEgc2luZ2xlIFVTQiBob3N0IGluIGEgdHJlZSBzdHJ1Y3R1cmUuCisJICAKKwkgIFRoZSBVU0IgaG9zdCBpcyB0aGUgcm9vdCBvZiB0aGUgdHJlZSwgdGhlIHBlcmlwaGVyYWxzIGFyZSB0aGUKKwkgIGxlYXZlcyBhbmQgdGhlIGlubmVyIG5vZGVzIGFyZSBzcGVjaWFsIFVTQiBkZXZpY2VzIGNhbGxlZCBodWJzLgorCSAgTW9zdCBQQ3Mgbm93IGhhdmUgVVNCIGhvc3QgcG9ydHMsIHVzZWQgdG8gY29ubmVjdCBwZXJpcGhlcmFscworCSAgc3VjaCBhcyBzY2FubmVycywga2V5Ym9hcmRzLCBtaWNlLCBtb2RlbXMsIGNhbWVyYXMsIGRpc2tzLAorCSAgZmxhc2ggbWVtb3J5LCBuZXR3b3JrIGxpbmtzLCBhbmQgcHJpbnRlcnMgdG8gdGhlIFBDLgorCisJICBTYXkgWSBoZXJlIGlmIHlvdXIgY29tcHV0ZXIgaGFzIGEgaG9zdC1zaWRlIFVTQiBwb3J0IGFuZCB5b3Ugd2FudAorCSAgdG8gdXNlIFVTQiBkZXZpY2VzLiAgWW91IHRoZW4gbmVlZCB0byBzYXkgWSB0byBhdCBsZWFzdCBvbmUgb2YgdGhlCisJICBIb3N0IENvbnRyb2xsZXIgRHJpdmVyIChIQ0QpIG9wdGlvbnMgYmVsb3cuICBDaG9vc2UgYSBVU0IgMS4xCisJICBjb250cm9sbGVyLCBzdWNoIGFzICJVSENJIEhDRCBzdXBwb3J0IiBvciAiT0hDSSBIQ0Qgc3VwcG9ydCIsCisJICBhbmQgIkVIQ0kgSENEIChVU0IgMi4wKSBzdXBwb3J0IiBleGNlcHQgZm9yIG9sZGVyIHN5c3RlbXMgdGhhdAorCSAgZG8gbm90IGhhdmUgVVNCIDIuMCBzdXBwb3J0LiAgSXQgZG9lc24ndCBub3JtYWxseSBodXJ0IHRvIHNlbGVjdAorCSAgdGhlbSBhbGwgaWYgeW91IGFyZSBub3QgY2VydGFpbi4KKworCSAgSWYgeW91ciBzeXN0ZW0gaGFzIGEgZGV2aWNlLXNpZGUgVVNCIHBvcnQsIHVzZWQgaW4gdGhlIHBlcmlwaGVyYWwKKwkgIHNpZGUgb2YgdGhlIFVTQiBwcm90b2NvbCwgc2VlIHRoZSAiVVNCIEdhZGdldCIgZnJhbWV3b3JrIGluc3RlYWQuCisKKwkgIEFmdGVyIGNob29zaW5nIHlvdXIgSENELCB0aGVuIHNlbGVjdCBkcml2ZXJzIGZvciB0aGUgVVNCIHBlcmlwaGVyYWxzCisJICB5b3UnbGwgYmUgdXNpbmcuICBZb3UgbWF5IHdhbnQgdG8gY2hlY2sgb3V0IHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZAorCSAgaW4gPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvPiBhbmQgZXNwZWNpYWxseSB0aGUgbGlua3MgZ2l2ZW4gaW4KKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL3VzYi1oZWxwLnR4dD4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYmNvcmUuCisKK3NvdXJjZSAiZHJpdmVycy91c2IvY29yZS9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3VzYi9pbnB1dC9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvdXNiL2ltYWdlL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy91c2IvbWVkaWEvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3VzYi9uZXQvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3VzYi9tb24vS2NvbmZpZyIKKworY29tbWVudCAiVVNCIHBvcnQgZHJpdmVycyIKKwlkZXBlbmRzIG9uIFVTQgorCitjb25maWcgVVNCX1VTUzcyMAorCXRyaXN0YXRlICJVU1M3MjAgcGFycG9ydCBkcml2ZXIiCisJZGVwZW5kcyBvbiBVU0IgJiYgUEFSUE9SVAorCXNlbGVjdCBQQVJQT1JUX05PVF9QQworCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIGlzIGZvciBVU0IgcGFyYWxsZWwgcG9ydCBhZGFwdGVycyB0aGF0IHVzZSB0aGUgTHVjZW50CisJICBUZWNobm9sb2dpZXMgVVNTLTcyMCBjaGlwLiBUaGVzZSBjYWJsZXMgYXJlIHBsdWdnZWQgaW50byB5b3VyIFVTQgorCSAgcG9ydCBhbmQgcHJvdmlkZSBVU0IgY29tcGF0aWJpbGl0eSB0byBwZXJpcGhlcmFscyBkZXNpZ25lZCB3aXRoCisJICBwYXJhbGxlbCBwb3J0IGludGVyZmFjZXMuCisKKwkgIFRoZSBjaGlwIGhhcyB0d28gbW9kZXM6IGF1dG9tYXRpYyBtb2RlIGFuZCBtYW51YWwgbW9kZS4gSW4gYXV0b21hdGljCisJICBtb2RlLCBpdCBsb29rcyB0byB0aGUgY29tcHV0ZXIgbGlrZSBhIHN0YW5kYXJkIFVTQiBwcmludGVyLiBPbmx5CisJICBwcmludGVycyBtYXkgYmUgY29ubmVjdGVkIHRvIHRoZSBVU1MtNzIwIGluIHRoaXMgbW9kZS4gVGhlIGdlbmVyaWMKKwkgIFVTQiBwcmludGVyIGRyaXZlciAoIlVTQiBQcmludGVyIHN1cHBvcnQiLCBhYm92ZSkgbWF5IGJlIHVzZWQgaW4KKwkgIHRoYXQgbW9kZSwgYW5kIHlvdSBjYW4gc2F5IE4gaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIGNoaXAgb25seQorCSAgaW4gdGhpcyBtb2RlLgorCisJICBNYW51YWwgbW9kZSBpcyBub3QgbGltaXRlZCB0byBwcmludGVycywgYW55IHBhcmFsbGVsIHBvcnQKKwkgIGRldmljZSBzaG91bGQgd29yay4gVGhpcyBkcml2ZXIgdXRpbGl6ZXMgbWFudWFsIG1vZGUuCisJICBOb3RlIGhvd2V2ZXIgdGhhdCBzb21lIG9wZXJhdGlvbnMgYXJlIHRocmVlIG9yZGVycyBvZiBtYWduaXR1ZGUKKwkgIHNsb3dlciB0aGFuIG9uIGEgUENJL0lTQSBQYXJhbGxlbCBQb3J0LCBzbyB0aW1pbmcgY3JpdGljYWwKKwkgIGFwcGxpY2F0aW9ucyBtaWdodCBub3Qgd29yay4KKworCSAgU2F5IFkgaGVyZSBpZiB5b3Ugb3duIGFuIFVTUy03MjAgVVNCLT5QYXJwb3J0IGNhYmxlIGFuZCBpbnRlbmQgdG8KKwkgIGNvbm5lY3QgYW55dGhpbmcgb3RoZXIgdGhhbiBhIHByaW50ZXIgdG8gaXQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzczcyMC4KKworc291cmNlICJkcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3VzYi9taXNjL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy91c2IvYXRtL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWciCisKK2VuZG1lbnUKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjFkNDQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvTWFrZWZpbGUKQEAgLTAsMCArMSw3NCBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGtlcm5lbCBVU0IgZGV2aWNlIGRyaXZlcnMuCisjCisKKyMgT2JqZWN0IGZpbGVzIGluIHN1YmRpcmVjdG9yaWVzCisKK29iai0kKENPTkZJR19VU0IpCQkrPSBjb3JlLworCitvYmotJChDT05GSUdfVVNCX01PTikJCSs9IG1vbi8KKworb2JqLSQoQ09ORklHX1VTQl9FSENJX0hDRCkJKz0gaG9zdC8KK29iai0kKENPTkZJR19VU0JfT0hDSV9IQ0QpCSs9IGhvc3QvCitvYmotJChDT05GSUdfVVNCX1VIQ0lfSENEKQkrPSBob3N0Lworb2JqLSQoQ09ORklHX1VTQl9TTDgxMV9IQ0QpCSs9IGhvc3QvCitvYmotJChDT05GSUdfRVRSQVhfVVNCX0hPU1QpCSs9IGhvc3QvCisKK29iai0kKENPTkZJR19VU0JfQUNNKQkJKz0gY2xhc3MvCitvYmotJChDT05GSUdfVVNCX0FVRElPKQkJKz0gY2xhc3MvCitvYmotJChDT05GSUdfVVNCX0JMVUVUT09USF9UVFkpCSs9IGNsYXNzLworb2JqLSQoQ09ORklHX1VTQl9NSURJKQkJKz0gY2xhc3MvCitvYmotJChDT05GSUdfVVNCX1BSSU5URVIpCSs9IGNsYXNzLworCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0UpCSs9IHN0b3JhZ2UvCisKK29iai0kKENPTkZJR19VU0JfQUlQVEVLKQkrPSBpbnB1dC8KK29iai0kKENPTkZJR19VU0JfQVRJX1JFTU9URSkJKz0gaW5wdXQvCitvYmotJChDT05GSUdfVVNCX0hJRCkJCSs9IGlucHV0Lworb2JqLSQoQ09ORklHX1VTQl9LQkQpCQkrPSBpbnB1dC8KK29iai0kKENPTkZJR19VU0JfS0JUQUIpCQkrPSBpbnB1dC8KK29iai0kKENPTkZJR19VU0JfTU9VU0UpCQkrPSBpbnB1dC8KK29iai0kKENPTkZJR19VU0JfTVRPVUNIKQkrPSBpbnB1dC8KK29iai0kKENPTkZJR19VU0JfUE9XRVJNQVRFKQkrPSBpbnB1dC8KK29iai0kKENPTkZJR19VU0JfV0FDT00pCQkrPSBpbnB1dC8KK29iai0kKENPTkZJR19VU0JfWFBBRCkJCSs9IGlucHV0LworCitvYmotJChDT05GSUdfVVNCX0RBQlVTQikJKz0gbWVkaWEvCitvYmotJChDT05GSUdfVVNCX0RTQlIpCQkrPSBtZWRpYS8KK29iai0kKENPTkZJR19VU0JfSUJNQ0FNKQkrPSBtZWRpYS8KK29iai0kKENPTkZJR19VU0JfS09OSUNBV0MpCSs9IG1lZGlhLworb2JqLSQoQ09ORklHX1VTQl9PVjUxMSkJCSs9IG1lZGlhLworb2JqLSQoQ09ORklHX1VTQl9QV0MpCQkrPSBtZWRpYS8KK29iai0kKENPTkZJR19VU0JfU0U0MDEpCQkrPSBtZWRpYS8KK29iai0kKENPTkZJR19VU0JfU045QzEwMikJKz0gbWVkaWEvCitvYmotJChDT05GSUdfVVNCX1NUVjY4MCkJKz0gbWVkaWEvCitvYmotJChDT05GSUdfVVNCX1ZJQ0FNKQkJKz0gbWVkaWEvCitvYmotJChDT05GSUdfVVNCX1c5OTY4Q0YpCSs9IG1lZGlhLworCitvYmotJChDT05GSUdfVVNCX0NBVEMpCQkrPSBuZXQvCitvYmotJChDT05GSUdfVVNCX0tBV0VUSCkJKz0gbmV0Lworb2JqLSQoQ09ORklHX1VTQl9QRUdBU1VTKQkrPSBuZXQvCitvYmotJChDT05GSUdfVVNCX1JUTDgxNTApCSs9IG5ldC8KK29iai0kKENPTkZJR19VU0JfVVNCTkVUKQkrPSBuZXQvCitvYmotJChDT05GSUdfVVNCX1pEMTIwMSkJKz0gbmV0LworCitvYmotJChDT05GSUdfVVNCX01EQzgwMCkJKz0gaW1hZ2UvCitvYmotJChDT05GSUdfVVNCX01JQ1JPVEVLKQkrPSBpbWFnZS8KKworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUwpCSs9IHNlcmlhbC8KKworb2JqLSQoQ09ORklHX1VTQl9BVUVSU1dBTEQpCSs9IG1pc2MvCitvYmotJChDT05GSUdfVVNCX0NZVEhFUk0pCSs9IG1pc2MvCitvYmotJChDT05GSUdfVVNCX0VNSTI2KQkJKz0gbWlzYy8KK29iai0kKENPTkZJR19VU0JfRU1JNjIpCQkrPSBtaXNjLworb2JqLSQoQ09ORklHX1VTQl9JRE1PVVNFKQkrPSBtaXNjLworb2JqLSQoQ09ORklHX1VTQl9MQ0QpCQkrPSBtaXNjLworb2JqLSQoQ09ORklHX1VTQl9MRUQpCQkrPSBtaXNjLworb2JqLSQoQ09ORklHX1VTQl9MRUdPVE9XRVIpCSs9IG1pc2MvCitvYmotJChDT05GSUdfVVNCX1JJTzUwMCkJKz0gbWlzYy8KK29iai0kKENPTkZJR19VU0JfVEVTVCkJCSs9IG1pc2MvCitvYmotJChDT05GSUdfVVNCX1VTUzcyMCkJKz0gbWlzYy8KK29iai0kKENPTkZJR19VU0JfUEhJREdFVFNFUlZPKQkrPSBtaXNjLworCitvYmotJChDT05GSUdfVVNCX0FUTSkJCSs9IGF0bS8KK29iai0kKENPTkZJR19VU0JfU1BFRURUT1VDSCkJKz0gYXRtLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvUkVBRE1FIGIvZHJpdmVycy91c2IvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjODQzNDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9SRUFETUUKQEAgLTAsMCArMSw1NCBAQAorVG8gdW5kZXJzdGFuZCBhbGwgdGhlIExpbnV4LVVTQiBmcmFtZXdvcmssIHlvdSdsbCB1c2UgdGhlc2UgcmVzb3VyY2VzOgorCisgICAgKiBUaGlzIHNvdXJjZSBjb2RlLiAgVGhpcyBpcyBuZWNlc3NhcmlseSBhbiBldm9sdmluZyB3b3JrLCBhbmQKKyAgICAgIGluY2x1ZGVzIGtlcm5lbGRvYyB0aGF0IHNob3VsZCBoZWxwIHlvdSBnZXQgYSBjdXJyZW50IG92ZXJ2aWV3LgorICAgICAgKCJtYWtlIHBkZmRvY3MiLCBhbmQgdGhlbiBsb29rIGF0ICJ1c2IucGRmIiBmb3IgaG9zdCBzaWRlIGFuZAorICAgICAgImdhZGdldC5wZGYiIGZvciBwZXJpcGhlcmFsIHNpZGUuKSAgQWxzbywgRG9jdW1lbnRhdGlvbi91c2IgaGFzCisgICAgICBtb3JlIGluZm9ybWF0aW9uLgorCisgICAgKiBUaGUgVVNCIDIuMCBzcGVjaWZpY2F0aW9uIChmcm9tIHd3dy51c2Iub3JnKSwgd2l0aCBzdXBwbGVtZW50cworICAgICAgc3VjaCBhcyB0aG9zZSBmb3IgVVNCIE9URyBhbmQgdGhlIHZhcmlvdXMgZGV2aWNlIGNsYXNzZXMuCisgICAgICBUaGUgVVNCIHNwZWNpZmljYXRpb24gaGFzIGEgZ29vZCBvdmVydmlldyBjaGFwdGVyLCBhbmQgVVNCCisgICAgICBwZXJpcGhlcmFscyBjb25mb3JtIHRvIHRoZSB3aWRlbHkga25vd24gIkNoYXB0ZXIgOSIuCisKKyAgICAqIENoaXAgc3BlY2lmaWNhdGlvbnMgZm9yIFVTQiBjb250cm9sbGVycy4gIEV4YW1wbGVzIGluY2x1ZGUKKyAgICAgIGhvc3QgY29udHJvbGxlcnMgKG9uIFBDcywgc2VydmVycywgYW5kIG1vcmUpOyBwZXJpcGhlcmFsCisgICAgICBjb250cm9sbGVycyAoaW4gZGV2aWNlcyB3aXRoIExpbnV4IGZpcm13YXJlLCBsaWtlIHByaW50ZXJzIG9yCisgICAgICBjZWxsIHBob25lcyk7IGFuZCBoYXJkLXdpcmVkIHBlcmlwaGVyYWxzIGxpa2UgRXRoZXJuZXQgYWRhcHRlcnMuCisKKyAgICAqIFNwZWNpZmljYXRpb25zIGZvciBvdGhlciBwcm90b2NvbHMgaW1wbGVtZW50ZWQgYnkgVVNCIHBlcmlwaGVyYWwKKyAgICAgIGZ1bmN0aW9ucy4gIFNvbWUgYXJlIHZlbmRvci1zcGVjaWZpYzsgb3RoZXJzIGFyZSB2ZW5kb3ItbmV1dHJhbAorICAgICAgYnV0IGp1c3Qgc3RhbmRhcmRpemVkIG91dHNpZGUgb2YgdGhlIHd3dy51c2Iub3JnIHRlYW0uCisKK0hlcmUgaXMgYSBsaXN0IG9mIHdoYXQgZWFjaCBzdWJkaXJlY3RvcnkgaGVyZSBpcywgYW5kIHdoYXQgaXMgY29udGFpbmVkIGluCit0aGVtLgorCitjb3JlLwkJLSBUaGlzIGlzIGZvciB0aGUgY29yZSBVU0IgaG9zdCBjb2RlLCBpbmNsdWRpbmcgdGhlCisJCSAgdXNiZnMgZmlsZXMgYW5kIHRoZSBodWIgY2xhc3MgZHJpdmVyICgia2h1YmQiKS4KKworaG9zdC8JCS0gVGhpcyBpcyBmb3IgVVNCIGhvc3QgY29udHJvbGxlciBkcml2ZXJzLiAgVGhpcworCQkgIGluY2x1ZGVzIFVIQ0ksIE9IQ0ksIEVIQ0ksIGFuZCBvdGhlcnMgdGhhdCBtaWdodAorCQkgIGJlIHVzZWQgd2l0aCBtb3JlIHNwZWNpYWxpemVkICJlbWJlZGRlZCIgc3lzdGVtcy4KKworZ2FkZ2V0LwkJLSBUaGlzIGlzIGZvciBVU0IgcGVyaXBoZXJhbCBjb250cm9sbGVyIGRyaXZlcnMgYW5kCisJCSAgdGhlIHZhcmlvdXMgZ2FkZ2V0IGRyaXZlcnMgd2hpY2ggdGFsayB0byB0aGVtLgorCisKK0luZGl2aWR1YWwgVVNCIGRyaXZlciBkaXJlY3Rvcmllcy4gIEEgbmV3IGRyaXZlciBzaG91bGQgYmUgYWRkZWQgdG8gdGhlCitmaXJzdCBzdWJkaXJlY3RvcnkgaW4gdGhlIGxpc3QgYmVsb3cgdGhhdCBpdCBmaXRzIGludG8uCisKK2ltYWdlLwkJLSBUaGlzIGlzIGZvciBzdGlsbCBpbWFnZSBkcml2ZXJzLCBsaWtlIHNjYW5uZXJzIG9yCisJCSAgZGlnaXRhbCBjYW1lcmFzLgoraW5wdXQvCQktIFRoaXMgaXMgZm9yIGFueSBkcml2ZXIgdGhhdCB1c2VzIHRoZSBpbnB1dCBzdWJzeXN0ZW0sCisJCSAgbGlrZSBrZXlib2FyZCwgbWljZSwgdG91Y2hzY3JlZW5zLCB0YWJsZXRzLCBldGMuCittZWRpYS8JCS0gVGhpcyBpcyBmb3IgbXVsdGltZWRpYSBkcml2ZXJzLCBsaWtlIHZpZGVvIGNhbWVyYXMsCisJCSAgcmFkaW9zLCBhbmQgYW55IG90aGVyIGRyaXZlcnMgdGhhdCB0YWxrIHRvIHRoZSB2NGwKKwkJICBzdWJzeXN0ZW0uCituZXQvCQktIFRoaXMgaXMgZm9yIG5ldHdvcmsgZHJpdmVycy4KK3NlcmlhbC8JCS0gVGhpcyBpcyBmb3IgVVNCIHRvIHNlcmlhbCBkcml2ZXJzLgorc3RvcmFnZS8JLSBUaGlzIGlzIGZvciBVU0IgbWFzcy1zdG9yYWdlIGRyaXZlcnMuCitjbGFzcy8JCS0gVGhpcyBpcyBmb3IgYWxsIFVTQiBkZXZpY2UgZHJpdmVycyB0aGF0IGRvIG5vdCBmaXQKKwkJICBpbnRvIGFueSBvZiB0aGUgYWJvdmUgY2F0ZWdvcmllcywgYW5kIHdvcmsgZm9yIGEgcmFuZ2UKKwkJICBvZiBVU0IgQ2xhc3Mgc3BlY2lmaWVkIGRldmljZXMuIAorbWlzYy8JCS0gVGhpcyBpcyBmb3IgYWxsIFVTQiBkZXZpY2UgZHJpdmVycyB0aGF0IGRvIG5vdCBmaXQKKwkJICBpbnRvIGFueSBvZiB0aGUgYWJvdmUgY2F0ZWdvcmllcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnIGIvZHJpdmVycy91c2IvYXRtL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ5ZjUzNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2F0bS9LY29uZmlnCkBAIC0wLDAgKzEsMzAgQEAKKyMKKyMgVVNCIEFUTSBkcml2ZXIgY29uZmlndXJhdGlvbgorIworY29tbWVudCAiVVNCIEFUTS9EU0wgZHJpdmVycyIKKwlkZXBlbmRzIG9uIFVTQgorCitjb25maWcgVVNCX0FUTQorCXRyaXN0YXRlICJHZW5lcmljIFVTQiBBVE0vRFNMIGNvcmUgSS9PIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgQVRNCisJc2VsZWN0IENSQzMyCisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBwcm92aWRlcyBhIGxpYnJhcnkgd2hpY2ggaXMgdXNlZCBmb3IgcGFja2V0IEkvTyBieSBVU0IgRFNMCisJICBtb2RlbXMsIHN1Y2ggYXMgdGhlIFNwZWVkVG91Y2ggZHJpdmVyIGJlbG93LiAKKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNiX2F0bS4KKworY29uZmlnIFVTQl9TUEVFRFRPVUNICisJdHJpc3RhdGUgIkFsY2F0ZWwgU3BlZWR0b3VjaCBVU0Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBBVE0KKwlzZWxlY3QgVVNCX0FUTQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gQWxjYXRlbCBTcGVlZFRvdWNoIFVTQiBvciBTcGVlZFRvdWNoIDMzMAorCSAgbW9kZW0uICBJbiBvcmRlciB0byB1c2UgeW91ciBtb2RlbSB5b3Ugd2lsbCBuZWVkIHRvIGluc3RhbGwgdGhlIAorCSAgdHdvIHBhcnRzIG9mIHRoZSBmaXJtd2FyZSwgZXh0cmFjdGVkIGJ5IHRoZSB1c2VyIHNwYWNlIHRvb2xzOyBzZWUKKwkgIDxodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmcvU3BlZWRUb3VjaC8+IGZvciBkZXRhaWxzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzcGVlZHRjaC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2F0bS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjEzYjhiOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2F0bS9NYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSByZXN0IG9mIHRoZSBVU0IgZHJpdmVycworIyAodGhlIG9uZXMgdGhhdCBkb24ndCBmaXQgaW50byBhbnkgb3RoZXIgY2F0ZWdvcmllcykKKyMKKworb2JqLSQoQ09ORklHX1VTQl9BVE0pCQkrPSB1c2JfYXRtLm8KK29iai0kKENPTkZJR19VU0JfU1BFRURUT1VDSCkJKz0gc3BlZWR0Y2gubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3NwZWVkdGNoLmMgYi9kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzNmOTIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvYXRtL3NwZWVkdGNoLmMKQEAgLTAsMCArMSw4NDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBzcGVlZHRjaC5jICAtICBBbGNhdGVsIFNwZWVkVG91Y2ggVVNCIHhEU0wgbW9kZW0gZHJpdmVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMSwgQWxjYXRlbAorICogIENvcHlyaWdodCAoQykgMjAwMywgRHVuY2FuIFNhbmRzCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCBEYXZpZCBXb29kaG91c2UKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisKKyNpbmNsdWRlICJ1c2JfYXRtLmgiCisKKyNpZiBkZWZpbmVkKENPTkZJR19GV19MT0FERVIpIHx8IGRlZmluZWQoQ09ORklHX0ZXX0xPQURFUl9NT0RVTEUpCisjCWRlZmluZSBVU0VfRldfTE9BREVSCisjZW5kaWYKKworI2RlZmluZSBEUklWRVJfQVVUSE9SCSJKb2hhbiBWZXJyZXB0LCBEdW5jYW4gU2FuZHMgPGR1bmNhbi5zYW5kc0BmcmVlLmZyPiIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjEuOCIKKyNkZWZpbmUgRFJJVkVSX0RFU0MJIkFsY2F0ZWwgU3BlZWRUb3VjaCBVU0IgZHJpdmVyIHZlcnNpb24gIiBEUklWRVJfVkVSU0lPTgorCitzdGF0aWMgY29uc3QgY2hhciBzcGVlZHRjaF9kcml2ZXJfbmFtZVtdID0gInNwZWVkdGNoIjsKKworI2RlZmluZSBTUEVFRFRPVUNIX1ZFTkRPUklECQkweDA2YjkKKyNkZWZpbmUgU1BFRURUT1VDSF9QUk9EVUNUSUQJCTB4NDA2MQorCisvKiBUaW1lb3V0IGluIGppZmZpZXMgKi8KKyNkZWZpbmUgQ1RSTF9USU1FT1VUIDIwMDAKKyNkZWZpbmUgREFUQV9USU1FT1VUIDIwMDAKKworI2RlZmluZSBPRkZTRVRfNyAgMAkJLyogc2l6ZSAxICovCisjZGVmaW5lIE9GRlNFVF9iICAxCQkvKiBzaXplIDggKi8KKyNkZWZpbmUgT0ZGU0VUX2QgIDkJCS8qIHNpemUgNCAqLworI2RlZmluZSBPRkZTRVRfZSAxMwkJLyogc2l6ZSAxICovCisjZGVmaW5lIE9GRlNFVF9mIDE0CQkvKiBzaXplIDEgKi8KKyNkZWZpbmUgVE9UQUwgICAgMTUKKworI2RlZmluZSBTSVpFXzcgMQorI2RlZmluZSBTSVpFX2IgOAorI2RlZmluZSBTSVpFX2QgNAorI2RlZmluZSBTSVpFX2UgMQorI2RlZmluZSBTSVpFX2YgMQorCitzdGF0aWMgaW50IGRsXzUxMl9maXJzdCA9IDA7CitzdGF0aWMgaW50IHN3X2J1ZmZlcmluZyA9IDA7CisKK21vZHVsZV9wYXJhbShkbF81MTJfZmlyc3QsIGJvb2wsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhkbF81MTJfZmlyc3QsICJSZWFkIDUxMiBieXRlcyBiZWZvcmUgc2VuZGluZyBmaXJtd2FyZSIpOworCittb2R1bGVfcGFyYW0oc3dfYnVmZmVyaW5nLCB1aW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc3dfYnVmZmVyaW5nLCAiRW5hYmxlIHNvZnR3YXJlIGJ1ZmZlcmluZyIpOworCisjZGVmaW5lIFVEU0xfSU9DVExfTElORV9VUAkJMQorI2RlZmluZSBVRFNMX0lPQ1RMX0xJTkVfRE9XTgkJMgorCisjZGVmaW5lIFNQRUVEVENIX0VORFBPSU5UX0lOVAkJMHg4MQorI2RlZmluZSBTUEVFRFRDSF9FTkRQT0lOVF9EQVRBCQkweDA3CisjZGVmaW5lIFNQRUVEVENIX0VORFBPSU5UX0ZJUk1XQVJFCTB4MDUKKworI2RlZmluZSBoZXgyaW50KGMpICggKGMgPj0gJzAnKSAmJiAoYyA8PSAnOScpID8gKGMgLSAnMCcpIDogKChjICYgMHhmKSArIDkpICkKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHNwZWVkdGNoX3VzYl9pZHNbXSA9IHsKKwl7VVNCX0RFVklDRShTUEVFRFRPVUNIX1ZFTkRPUklELCBTUEVFRFRPVUNIX1BST0RVQ1RJRCl9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgc3BlZWR0Y2hfdXNiX2lkcyk7CisKK3N0cnVjdCBzcGVlZHRjaF9pbnN0YW5jZV9kYXRhIHsKKwlzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhIHU7CisKKwkvKiBTdGF0dXMgKi8KKwlzdHJ1Y3QgdXJiICppbnRfdXJiOworCXVuc2lnbmVkIGNoYXIgaW50X2RhdGFbMTZdOworCXN0cnVjdCB3b3JrX3N0cnVjdCBwb2xsX3dvcms7CisJc3RydWN0IHRpbWVyX2xpc3QgcG9sbF90aW1lcjsKK307CisvKiBVU0IgKi8KKworc3RhdGljIGludCBzcGVlZHRjaF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgc3BlZWR0Y2hfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworc3RhdGljIGludCBzcGVlZHRjaF91c2JfaW9jdGwoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHVuc2lnbmVkIGludCBjb2RlLAorCQkJICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKK3N0YXRpYyB2b2lkIHNwZWVkdGNoX2hhbmRsZV9pbnQoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBzcGVlZHRjaF9wb2xsX3N0YXR1cyhzdHJ1Y3Qgc3BlZWR0Y2hfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc3BlZWR0Y2hfdXNiX2RyaXZlciA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gc3BlZWR0Y2hfZHJpdmVyX25hbWUsCisJLnByb2JlCQk9IHNwZWVkdGNoX3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IHNwZWVkdGNoX3VzYl9kaXNjb25uZWN0LAorCS5pb2N0bAkJPSBzcGVlZHRjaF91c2JfaW9jdGwsCisJLmlkX3RhYmxlCT0gc3BlZWR0Y2hfdXNiX2lkcywKK307CisKKy8qKioqKioqKioqKioqKioKKyoqICBmaXJtd2FyZSAgKioKKyoqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgc3BlZWR0Y2hfZ290X2Zpcm13YXJlKHN0cnVjdCBzcGVlZHRjaF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSwKKwkJCQkgIGludCBnb3RfaXQpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKworCWRvd24oJmluc3RhbmNlLT51LnNlcmlhbGl6ZSk7CS8qIHZzIHNlbGYsIHNwZWVkdGNoX2Zpcm13YXJlX3N0YXJ0ICovCisJaWYgKGluc3RhbmNlLT51LnN0YXR1cyA9PSBVRFNMX0xPQURFRF9GSVJNV0FSRSkKKwkJZ290byBvdXQ7CisJaWYgKCFnb3RfaXQpIHsKKwkJaW5zdGFuY2UtPnUuc3RhdHVzID0gVURTTF9OT19GSVJNV0FSRTsKKwkJZ290byBvdXQ7CisJfQorCWlmICgoZXJyID0gdXNiX3NldF9pbnRlcmZhY2UoaW5zdGFuY2UtPnUudXNiX2RldiwgMSwgMSkpIDwgMCkgeworCQlkYmcoInNwZWVkdGNoX2dvdF9maXJtd2FyZTogdXNiX3NldF9pbnRlcmZhY2UgcmV0dXJuZWQgJWQhIiwgZXJyKTsKKwkJaW5zdGFuY2UtPnUuc3RhdHVzID0gVURTTF9OT19GSVJNV0FSRTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogU2V0IHVwIGludGVycnVwdCBlbmRwb2ludCAqLworCWludGYgPSB1c2JfaWZudW1fdG9faWYoaW5zdGFuY2UtPnUudXNiX2RldiwgMCk7CisJaWYgKGludGYgJiYgIXVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZzcGVlZHRjaF91c2JfZHJpdmVyLCBpbnRmLCBOVUxMKSkgeworCisJCWluc3RhbmNlLT5pbnRfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGluc3RhbmNlLT5pbnRfdXJiKSB7CisKKwkJCXVzYl9maWxsX2ludF91cmIoaW5zdGFuY2UtPmludF91cmIsIGluc3RhbmNlLT51LnVzYl9kZXYsCisJCQkJCSB1c2JfcmN2aW50cGlwZShpbnN0YW5jZS0+dS51c2JfZGV2LCBTUEVFRFRDSF9FTkRQT0lOVF9JTlQpLAorCQkJCQkgaW5zdGFuY2UtPmludF9kYXRhLAorCQkJCQkgc2l6ZW9mKGluc3RhbmNlLT5pbnRfZGF0YSksCisJCQkJCSBzcGVlZHRjaF9oYW5kbGVfaW50LCBpbnN0YW5jZSwgNTApOworCQkJZXJyID0gdXNiX3N1Ym1pdF91cmIoaW5zdGFuY2UtPmludF91cmIsIEdGUF9LRVJORUwpOworCQkJaWYgKGVycikgeworCQkJCS8qIERvZXNuJ3QgbWF0dGVyOyB3ZSdsbCBwb2xsIGFueXdheSAqLworCQkJCWRiZygic3BlZWR0Y2hfZ290X2Zpcm13YXJlOiBTdWJtaXNzaW9uIG9mIGludGVycnVwdCBVUkIgZmFpbGVkICVkIiwgZXJyKTsKKwkJCQl1c2JfZnJlZV91cmIoaW5zdGFuY2UtPmludF91cmIpOworCQkJCWluc3RhbmNlLT5pbnRfdXJiID0gTlVMTDsKKwkJCQl1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlKCZzcGVlZHRjaF91c2JfZHJpdmVyLCBpbnRmKTsKKwkJCX0KKwkJfQorCX0KKwkvKiBTdGFydCBzdGF0dXMgcG9sbGluZyAqLworCW1vZF90aW1lcigmaW5zdGFuY2UtPnBvbGxfdGltZXIsIGppZmZpZXMgKyAoMSAqIEhaKSk7CisKKwlpbnN0YW5jZS0+dS5zdGF0dXMgPSBVRFNMX0xPQURFRF9GSVJNV0FSRTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZpbnN0YW5jZS0+dS5yZWNlaXZlX3Rhc2tsZXQpOworIG91dDoKKwl1cCgmaW5zdGFuY2UtPnUuc2VyaWFsaXplKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluc3RhbmNlLT51LmZpcm13YXJlX3dhaXRlcnMpOworfQorCitzdGF0aWMgaW50IHNwZWVkdGNoX3NldF9zd2J1ZmYoc3RydWN0IHNwZWVkdGNoX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlLAorCQkJICAgICAgIGludCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW5zdGFuY2UtPnUudXNiX2RldjsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkgICAgICAweDMyLCAweDQwLCBzdGF0ZSA/IDB4MDEgOiAweDAwLAorCQkJICAgICAgMHgwMCwgTlVMTCwgMCwgMTAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoIldhcm5pbmc6ICVzYWJsaW5nIFNXIGJ1ZmZlcmluZzogdXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLAorCQkgICAgIHN0YXRlID8gIkVuIiA6ICJEaXMiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRiZygic3BlZWR0Y2hfc2V0X3N3YnVmZjogJXNibGVkIFNXIGJ1ZmZlcmluZyIsIHN0YXRlID8gIkVuIiA6ICJEaXMiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3BlZWR0Y2hfdGVzdF9zZXF1ZW5jZShzdHJ1Y3Qgc3BlZWR0Y2hfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGluc3RhbmNlLT51LnVzYl9kZXY7CisJdW5zaWduZWQgY2hhciBidWZbMTBdOworCWludCByZXQ7CisKKwkvKiBVUkIgMTQ3ICovCisJYnVmWzBdID0gMHgxYzsKKwlidWZbMV0gPSAweDUwOworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJICAgICAgMHgwMSwgMHg0MCwgMHgwYiwgMHgwMCwgYnVmLCAyLCAxMDApOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBmYWlsZWQgb24gVVJCMTQ3OiAlZFxuIiwgX19mdW5jX18sIHJldCk7CisKKwkvKiBVUkIgMTQ4ICovCisJYnVmWzBdID0gMHgzMjsKKwlidWZbMV0gPSAweDAwOworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJICAgICAgMHgwMSwgMHg0MCwgMHgwMiwgMHgwMCwgYnVmLCAyLCAxMDApOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBmYWlsZWQgb24gVVJCMTQ4OiAlZFxuIiwgX19mdW5jX18sIHJldCk7CisKKwkvKiBVUkIgMTQ5ICovCisJYnVmWzBdID0gMHgwMTsKKwlidWZbMV0gPSAweDAwOworCWJ1ZlsyXSA9IDB4MDE7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkgICAgICAweDAxLCAweDQwLCAweDAzLCAweDAwLCBidWYsIDMsIDEwMCk7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzIGZhaWxlZCBvbiBVUkIxNDk6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKworCS8qIFVSQiAxNTAgKi8KKwlidWZbMF0gPSAweDAxOworCWJ1ZlsxXSA9IDB4MDA7CisJYnVmWzJdID0gMHgwMTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCSAgICAgIDB4MDEsIDB4NDAsIDB4MDQsIDB4MDAsIGJ1ZiwgMywgMTAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgZmFpbGVkIG9uIFVSQjE1MDogJWRcbiIsIF9fZnVuY19fLCByZXQpOworfQorCitzdGF0aWMgaW50IHNwZWVkdGNoX3N0YXJ0X3N5bmNocm8oc3RydWN0IHNwZWVkdGNoX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnN0YW5jZS0+dS51c2JfZGV2OworCXVuc2lnbmVkIGNoYXIgYnVmWzJdOworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwKKwkJCSAgICAgIDB4MTIsIDB4YzAsIDB4MDQsIDB4MDAsCisJCQkgICAgICBidWYsIHNpemVvZihidWYpLCBDVFJMX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNwZWVkVG91Y2g6IEZhaWxlZCB0byBzdGFydCBBRFNMIHN5bmNocm9uaXNhdGlvbjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZGJnKCJzcGVlZHRjaF9zdGFydF9zeW5jaHJvOiBtb2RlbSBwcm9kZGVkLiAlZCBCeXRlcyByZXR1cm5lZDogJTAyeCAlMDJ4IiwgcmV0LCBidWZbMF0sIGJ1ZlsxXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNwZWVkdGNoX2hhbmRsZV9pbnQoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgc3BlZWR0Y2hfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UgPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgaW50IGNvdW50ID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCWludCByZXQ7CisKKwkvKiBUaGUgbWFnaWMgaW50ZXJydXB0IGZvciAidXAgc3RhdGUiICovCisJY29uc3Qgc3RhdGljIHVuc2lnbmVkIGNoYXIgdXBfaW50WzZdICAgPSB7IDB4YTEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKwkvKiBUaGUgbWFnaWMgaW50ZXJydXB0IGZvciAiZG93biBzdGF0ZSIgKi8KKwljb25zdCBzdGF0aWMgdW5zaWduZWQgY2hhciBkb3duX2ludFs2XSA9IHsgMHhhMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQ7IGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGNvdW50IDwgNikgeworCQlkYmcoIiVzIC0gaW50IHBhY2tldCB0b28gc2hvcnQiLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoIW1lbWNtcCh1cF9pbnQsIGluc3RhbmNlLT5pbnRfZGF0YSwgNikpIHsKKwkJZGVsX3RpbWVyKCZpbnN0YW5jZS0+cG9sbF90aW1lcik7CisJCXByaW50ayhLRVJOX05PVElDRSAiRFNMIGxpbmUgZ29lcyB1cFxuIik7CisJfSBlbHNlIGlmICghbWVtY21wKGRvd25faW50LCBpbnN0YW5jZS0+aW50X2RhdGEsIDYpKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiRFNMIGxpbmUgZ29lcyBkb3duXG4iKTsKKwl9IGVsc2UgeworCQlpbnQgaTsKKworCQlwcmludGsoS0VSTl9ERUJVRyAiVW5rbm93biBpbnRlcnJ1cHQgcGFja2V0IG9mICVkIGJ5dGVzOiIsIGNvdW50KTsKKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJCQlwcmludGsoIiAlMDJ4IiwgaW5zdGFuY2UtPmludF9kYXRhW2ldKTsKKwkJcHJpbnRrKCJcbiIpOworCX0KKwlzY2hlZHVsZV93b3JrKCZpbnN0YW5jZS0+cG9sbF93b3JrKTsKKworIGV4aXQ6CisJcm1iKCk7CisJaWYgKCFpbnN0YW5jZS0+aW50X3VyYikKKwkJcmV0dXJuOworCisJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0KQorCQllcnIoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwgX19mdW5jX18sIHJldCk7Cit9CisKK3N0YXRpYyBpbnQgc3BlZWR0Y2hfZ2V0X3N0YXR1cyhzdHJ1Y3Qgc3BlZWR0Y2hfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UsCisJCQkgICAgICAgdW5zaWduZWQgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnN0YW5jZS0+dS51c2JfZGV2OworCWludCByZXQ7CisKKwltZW1zZXQoYnVmLCAwLCBUT1RBTCk7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwKKwkJCSAgICAgIDB4MTIsIDB4YzAsIDB4MDcsIDB4MDAsIGJ1ZiArIE9GRlNFVF83LCBTSVpFXzcsCisJCQkgICAgICBDVFJMX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKSB7CisJCWRiZygiTVNHIDcgZmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCisJCQkgICAgICAweDEyLCAweGMwLCAweDBiLCAweDAwLCBidWYgKyBPRkZTRVRfYiwgU0laRV9iLAorCQkJICAgICAgQ1RSTF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlkYmcoIk1TRyBCIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLAorCQkJICAgICAgMHgxMiwgMHhjMCwgMHgwZCwgMHgwMCwgYnVmICsgT0ZGU0VUX2QsIFNJWkVfZCwKKwkJCSAgICAgIENUUkxfVElNRU9VVCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGJnKCJNU0cgRCBmYWlsZWQiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwKKwkJCSAgICAgIDB4MDEsIDB4YzAsIDB4MGUsIDB4MDAsIGJ1ZiArIE9GRlNFVF9lLCBTSVpFX2UsCisJCQkgICAgICBDVFJMX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKSB7CisJCWRiZygiTVNHIEUgZmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCisJCQkgICAgICAweDAxLCAweGMwLCAweDBmLCAweDAwLCBidWYgKyBPRkZTRVRfZiwgU0laRV9mLAorCQkJICAgICAgQ1RSTF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlkYmcoIk1TRyBGIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzcGVlZHRjaF9wb2xsX3N0YXR1cyhzdHJ1Y3Qgc3BlZWR0Y2hfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UpCit7CisJdW5zaWduZWQgY2hhciBidWZbVE9UQUxdOworCWludCByZXQ7CisKKwlyZXQgPSBzcGVlZHRjaF9nZXRfc3RhdHVzKGluc3RhbmNlLCBidWYpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIlNwZWVkVG91Y2g6IEVycm9yICVkIGZldGNoaW5nIGRldmljZSBzdGF0dXNcbiIsIHJldCk7CisJCXJldHVybjsKKwl9CisKKwlkYmcoIkxpbmUgc3RhdGUgJTAyeCIsIGJ1ZltPRkZTRVRfN10pOworCisJc3dpdGNoIChidWZbT0ZGU0VUXzddKSB7CisJY2FzZSAwOgorCQlpZiAoaW5zdGFuY2UtPnUuYXRtX2Rldi0+c2lnbmFsICE9IEFUTV9QSFlfU0lHX0xPU1QpIHsKKwkJCWluc3RhbmNlLT51LmF0bV9kZXYtPnNpZ25hbCA9IEFUTV9QSFlfU0lHX0xPU1Q7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIkFEU0wgbGluZSBpcyBkb3duXG4iKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgMHgwODoKKwkJaWYgKGluc3RhbmNlLT51LmF0bV9kZXYtPnNpZ25hbCAhPSBBVE1fUEhZX1NJR19VTktOT1dOKSB7CisJCQlpbnN0YW5jZS0+dS5hdG1fZGV2LT5zaWduYWwgPSBBVE1fUEhZX1NJR19VTktOT1dOOworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJBRFNMIGxpbmUgaXMgYmxvY2tlZD9cbiIpOworCQl9CisJCWJyZWFrOworCisJY2FzZSAweDEwOgorCQlpZiAoaW5zdGFuY2UtPnUuYXRtX2Rldi0+c2lnbmFsICE9IEFUTV9QSFlfU0lHX0xPU1QpIHsKKwkJCWluc3RhbmNlLT51LmF0bV9kZXYtPnNpZ25hbCA9IEFUTV9QSFlfU0lHX0xPU1Q7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIkFEU0wgbGluZSBpcyBzeW5jaHJvbmlzaW5nXG4iKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgMHgyMDoKKwkJaWYgKGluc3RhbmNlLT51LmF0bV9kZXYtPnNpZ25hbCAhPSBBVE1fUEhZX1NJR19GT1VORCkgeworCQkJaW50IGRvd25fc3BlZWQgPSBidWZbT0ZGU0VUX2JdIHwgKGJ1ZltPRkZTRVRfYiArIDFdIDw8IDgpCisJCQkJfCAoYnVmW09GRlNFVF9iICsgMl0gPDwgMTYpIHwgKGJ1ZltPRkZTRVRfYiArIDNdIDw8IDI0KTsKKwkJCWludCB1cF9zcGVlZCA9IGJ1ZltPRkZTRVRfYiArIDRdIHwgKGJ1ZltPRkZTRVRfYiArIDVdIDw8IDgpCisJCQkJfCAoYnVmW09GRlNFVF9iICsgNl0gPDwgMTYpIHwgKGJ1ZltPRkZTRVRfYiArIDddIDw8IDI0KTsKKworCQkJaWYgKCEoZG93bl9zcGVlZCAmIDB4MDAwMGZmZmYpICYmCisJCQkgICAgISh1cF9zcGVlZCAmIDB4MDAwMGZmZmYpKSB7CisJCQkJZG93bl9zcGVlZCA+Pj0gMTY7CisJCQkJdXBfc3BlZWQgPj49IDE2OworCQkJfQorCQkJaW5zdGFuY2UtPnUuYXRtX2Rldi0+bGlua19yYXRlID0gZG93bl9zcGVlZCAqIDEwMDAgLyA0MjQ7CisJCQlpbnN0YW5jZS0+dS5hdG1fZGV2LT5zaWduYWwgPSBBVE1fUEhZX1NJR19GT1VORDsKKworCQkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkgICAgICAgIkFEU0wgbGluZSBpcyB1cCAoJWQgS2liL3MgZG93biB8ICVkIEtpYi9zIHVwKVxuIiwKKwkJCSAgICAgICBkb3duX3NwZWVkLCB1cF9zcGVlZCk7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlpZiAoaW5zdGFuY2UtPnUuYXRtX2Rldi0+c2lnbmFsICE9IEFUTV9QSFlfU0lHX1VOS05PV04pIHsKKwkJCWluc3RhbmNlLT51LmF0bV9kZXYtPnNpZ25hbCA9IEFUTV9QSFlfU0lHX1VOS05PV047CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIlVua25vd24gbGluZSBzdGF0ZSAlMDJ4XG4iLCBidWZbT0ZGU0VUXzddKTsKKwkJfQorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNwZWVkdGNoX3RpbWVyX3BvbGwodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBzcGVlZHRjaF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSA9ICh2b2lkICopZGF0YTsKKworCXNjaGVkdWxlX3dvcmsoJmluc3RhbmNlLT5wb2xsX3dvcmspOworCW1vZF90aW1lcigmaW5zdGFuY2UtPnBvbGxfdGltZXIsIGppZmZpZXMgKyAoNSAqIEhaKSk7Cit9CisKKyNpZmRlZiBVU0VfRldfTE9BREVSCitzdGF0aWMgdm9pZCBzcGVlZHRjaF91cGxvYWRfZmlybXdhcmUoc3RydWN0IHNwZWVkdGNoX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzEsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3MikKK3sKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnN0YW5jZS0+dS51c2JfZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCWludCBhY3R1YWxfbGVuZ3RoLCByZXQ7CisJaW50IG9mZnNldDsKKworCWRiZygic3BlZWR0Y2hfdXBsb2FkX2Zpcm13YXJlIik7CisKKwlpZiAoIShpbnRmID0gdXNiX2lmbnVtX3RvX2lmKHVzYl9kZXYsIDIpKSkgeworCQlkYmcoInNwZWVkdGNoX3VwbG9hZF9maXJtd2FyZTogaW50ZXJmYWNlIG5vdCBmb3VuZCEiKTsKKwkJZ290byBmYWlsOworCX0KKworCWlmICghKGJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpKSkgeworCQlkYmcoInNwZWVkdGNoX3VwbG9hZF9maXJtd2FyZTogbm8gbWVtb3J5IGZvciBidWZmZXIhIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBBIHVzZXItc3BhY2UgZmlybXdhcmUgbG9hZGVyIG1heSBhbHJlYWR5IGhhdmUgY2xhaW1lZCBpbnRlcmZhY2UgIzIgKi8KKwlpZiAoKHJldCA9CisJICAgICB1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmc3BlZWR0Y2hfdXNiX2RyaXZlciwgaW50ZiwgTlVMTCkpIDwgMCkgeworCQlkYmcoInNwZWVkdGNoX3VwbG9hZF9maXJtd2FyZTogaW50ZXJmYWNlIGluIHVzZSAoJWQpISIsIHJldCk7CisJCWdvdG8gZmFpbF9mcmVlOworCX0KKworCS8qIFVSQiA3ICovCisJaWYgKGRsXzUxMl9maXJzdCkgewkvKiBzb21lIG1vZGVtcyBuZWVkIGEgcmVhZCBiZWZvcmUgd3JpdGluZyB0aGUgZmlybXdhcmUgKi8KKwkJcmV0ID0gdXNiX2J1bGtfbXNnKHVzYl9kZXYsIHVzYl9yY3ZidWxrcGlwZSh1c2JfZGV2LCBTUEVFRFRDSF9FTkRQT0lOVF9GSVJNV0FSRSksCisJCQkJICAgYnVmZmVyLCAweDIwMCwgJmFjdHVhbF9sZW5ndGgsIDIwMDApOworCisJCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRVRJTUVET1VUKQorCQkJZGJnKCJzcGVlZHRjaF91cGxvYWRfZmlybXdhcmU6IHJlYWQgQkxPQ0swIGZyb20gbW9kZW0gZmFpbGVkICglZCkhIiwgcmV0KTsKKwkJZWxzZQorCQkJZGJnKCJzcGVlZHRjaF91cGxvYWRfZmlybXdhcmU6IEJMT0NLMCBkb3dubG9hZGVkICglZCBieXRlcykiLCByZXQpOworCX0KKworCS8qIFVSQiA4IDogYm90aCBsZWRzIGFyZSBzdGF0aWMgZ3JlZW4gKi8KKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IGZ3MS0+c2l6ZTsgb2Zmc2V0ICs9IFBBR0VfU0laRSkgeworCQlpbnQgdGhpc2xlbiA9IG1pbl90KGludCwgUEFHRV9TSVpFLCBmdzEtPnNpemUgLSBvZmZzZXQpOworCQltZW1jcHkoYnVmZmVyLCBmdzEtPmRhdGEgKyBvZmZzZXQsIHRoaXNsZW4pOworCisJCXJldCA9IHVzYl9idWxrX21zZyh1c2JfZGV2LCB1c2Jfc25kYnVsa3BpcGUodXNiX2RldiwgU1BFRURUQ0hfRU5EUE9JTlRfRklSTVdBUkUpLAorCQkJCSAgIGJ1ZmZlciwgdGhpc2xlbiwgJmFjdHVhbF9sZW5ndGgsIERBVEFfVElNRU9VVCk7CisKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRiZygic3BlZWR0Y2hfdXBsb2FkX2Zpcm13YXJlOiB3cml0ZSBCTE9DSzEgdG8gbW9kZW0gZmFpbGVkICglZCkhIiwgcmV0KTsKKwkJCWdvdG8gZmFpbF9yZWxlYXNlOworCQl9CisJCWRiZygic3BlZWR0Y2hfdXBsb2FkX2Zpcm13YXJlOiBCTE9DSzEgdXBsb2FkZWQgKCV6dSBieXRlcykiLCBmdzEtPnNpemUpOworCX0KKworCS8qIFVTQiBsZWQgYmxpbmtpbmcgZ3JlZW4sIEFEU0wgbGVkIG9mZiAqLworCisJLyogVVJCIDExICovCisJcmV0ID0gdXNiX2J1bGtfbXNnKHVzYl9kZXYsIHVzYl9yY3ZidWxrcGlwZSh1c2JfZGV2LCBTUEVFRFRDSF9FTkRQT0lOVF9GSVJNV0FSRSksCisJCQkgICBidWZmZXIsIDB4MjAwLCAmYWN0dWFsX2xlbmd0aCwgREFUQV9USU1FT1VUKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWRiZygic3BlZWR0Y2hfdXBsb2FkX2Zpcm13YXJlOiByZWFkIEJMT0NLMiBmcm9tIG1vZGVtIGZhaWxlZCAoJWQpISIsIHJldCk7CisJCWdvdG8gZmFpbF9yZWxlYXNlOworCX0KKwlkYmcoInNwZWVkdGNoX3VwbG9hZF9maXJtd2FyZTogQkxPQ0syIGRvd25sb2FkZWQgKCVkIGJ5dGVzKSIsIGFjdHVhbF9sZW5ndGgpOworCisJLyogVVJCcyAxMiB0byAxMzkgLSBVU0IgbGVkIGJsaW5raW5nIGdyZWVuLCBBRFNMIGxlZCBvZmYgKi8KKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IGZ3Mi0+c2l6ZTsgb2Zmc2V0ICs9IFBBR0VfU0laRSkgeworCQlpbnQgdGhpc2xlbiA9IG1pbl90KGludCwgUEFHRV9TSVpFLCBmdzItPnNpemUgLSBvZmZzZXQpOworCQltZW1jcHkoYnVmZmVyLCBmdzItPmRhdGEgKyBvZmZzZXQsIHRoaXNsZW4pOworCisJCXJldCA9IHVzYl9idWxrX21zZyh1c2JfZGV2LCB1c2Jfc25kYnVsa3BpcGUodXNiX2RldiwgU1BFRURUQ0hfRU5EUE9JTlRfRklSTVdBUkUpLAorCQkJCSAgIGJ1ZmZlciwgdGhpc2xlbiwgJmFjdHVhbF9sZW5ndGgsIERBVEFfVElNRU9VVCk7CisKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRiZygic3BlZWR0Y2hfdXBsb2FkX2Zpcm13YXJlOiB3cml0ZSBCTE9DSzMgdG8gbW9kZW0gZmFpbGVkICglZCkhIiwgcmV0KTsKKwkJCWdvdG8gZmFpbF9yZWxlYXNlOworCQl9CisJfQorCWRiZygic3BlZWR0Y2hfdXBsb2FkX2Zpcm13YXJlOiBCTE9DSzMgdXBsb2FkZWQgKCV6dSBieXRlcykiLCBmdzItPnNpemUpOworCisJLyogVVNCIGxlZCBzdGF0aWMgZ3JlZW4sIEFEU0wgbGVkIHN0YXRpYyByZWQgKi8KKworCS8qIFVSQiAxNDIgKi8KKwlyZXQgPSB1c2JfYnVsa19tc2codXNiX2RldiwgdXNiX3JjdmJ1bGtwaXBlKHVzYl9kZXYsIFNQRUVEVENIX0VORFBPSU5UX0ZJUk1XQVJFKSwKKwkJCSAgIGJ1ZmZlciwgMHgyMDAsICZhY3R1YWxfbGVuZ3RoLCBEQVRBX1RJTUVPVVQpOworCisJaWYgKHJldCA8IDApIHsKKwkJZGJnKCJzcGVlZHRjaF91cGxvYWRfZmlybXdhcmU6IHJlYWQgQkxPQ0s0IGZyb20gbW9kZW0gZmFpbGVkICglZCkhIiwgcmV0KTsKKwkJZ290byBmYWlsX3JlbGVhc2U7CisJfQorCisJLyogc3VjY2VzcyAqLworCWRiZygic3BlZWR0Y2hfdXBsb2FkX2Zpcm13YXJlOiBCTE9DSzQgZG93bmxvYWRlZCAoJWQgYnl0ZXMpIiwgYWN0dWFsX2xlbmd0aCk7CisKKwkvKiBEZWxheSB0byBhbGxvdyBmaXJtd2FyZSB0byBzdGFydCB1cC4gV2UgY2FuIGRvIHRoaXMgaGVyZQorCSAgIGJlY2F1c2Ugd2UncmUgaW4gb3VyIG93biBrZXJuZWwgdGhyZWFkIGFueXdheS4gKi8KKwltc2xlZXAoMTAwMCk7CisKKwkvKiBFbmFibGUgc29mdHdhcmUgYnVmZmVyaW5nLCBpZiByZXF1ZXN0ZWQgKi8KKwlpZiAoc3dfYnVmZmVyaW5nKQorCQlzcGVlZHRjaF9zZXRfc3didWZmKGluc3RhbmNlLCAxKTsKKworCS8qIE1hZ2ljIHNwZWxsOyBkb24ndCBhc2sgdXMgd2hhdCB0aGlzIGRvZXMgKi8KKwlzcGVlZHRjaF90ZXN0X3NlcXVlbmNlKGluc3RhbmNlKTsKKworCS8qIFN0YXJ0IG1vZGVtIHN5bmNocm9uaXNhdGlvbiAqLworCWlmIChzcGVlZHRjaF9zdGFydF9zeW5jaHJvKGluc3RhbmNlKSkKKwkJZGJnKCJzcGVlZHRjaF9zdGFydF9zeW5jaHJvOiBmYWlsZWQiKTsKKworCXNwZWVkdGNoX2dvdF9maXJtd2FyZShpbnN0YW5jZSwgMSk7CisKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVyKTsKKwlyZXR1cm47CisKKyBmYWlsX3JlbGVhc2U6CisJLyogT25seSByZWxlYXNlIGludGVyZmFjZSAjMiBpZiB1cGxvYWRpbmcgZmFpbGVkOyB3ZSBkb24ndCByZWxlYXNlIGl0CisJICAgd2Ugc3VjY2VlZGVkLiAgVGhpcyBwcmV2ZW50cyB0aGUgdXNlcnNwYWNlIHRvb2xzIGZyb20gdHJ5aW5nIHRvIGxvYWQKKwkgICB0aGUgZmlybXdhcmUgdGhlbXNlbHZlcyAqLworCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoJnNwZWVkdGNoX3VzYl9kcml2ZXIsIGludGYpOworIGZhaWxfZnJlZToKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVyKTsKKyBmYWlsOgorCXNwZWVkdGNoX2dvdF9maXJtd2FyZShpbnN0YW5jZSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgc3BlZWR0Y2hfZmluZF9maXJtd2FyZShzdHJ1Y3Qgc3BlZWR0Y2hfaW5zdGFuY2VfZGF0YQorCQkJCSAgKmluc3RhbmNlLCBpbnQgcGhhc2UsCisJCQkJICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmd19wKQoreworCWNoYXIgYnVmWzI0XTsKKwljb25zdCB1MTYgYmNkRGV2aWNlID0gbGUxNl90b19jcHUoaW5zdGFuY2UtPnUudXNiX2Rldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCWNvbnN0IHU4IG1ham9yX3JldmlzaW9uID0gYmNkRGV2aWNlID4+IDg7CisJY29uc3QgdTggbWlub3JfcmV2aXNpb24gPSBiY2REZXZpY2UgJiAweGZmOworCisJc3ByaW50ZihidWYsICJzcGVlZHRjaC0lZC5iaW4uJXguJTAyeCIsIHBoYXNlLCBtYWpvcl9yZXZpc2lvbiwgbWlub3JfcmV2aXNpb24pOworCWRiZygic3BlZWR0Y2hfZmluZF9maXJtd2FyZTogbG9va2luZyBmb3IgJXMiLCBidWYpOworCisJaWYgKHJlcXVlc3RfZmlybXdhcmUoZndfcCwgYnVmLCAmaW5zdGFuY2UtPnUudXNiX2Rldi0+ZGV2KSkgeworCQlzcHJpbnRmKGJ1ZiwgInNwZWVkdGNoLSVkLmJpbi4leCIsIHBoYXNlLCBtYWpvcl9yZXZpc2lvbik7CisJCWRiZygic3BlZWR0Y2hfZmluZF9maXJtd2FyZTogbG9va2luZyBmb3IgJXMiLCBidWYpOworCisJCWlmIChyZXF1ZXN0X2Zpcm13YXJlKGZ3X3AsIGJ1ZiwgJmluc3RhbmNlLT51LnVzYl9kZXYtPmRldikpIHsKKwkJCXNwcmludGYoYnVmLCAic3BlZWR0Y2gtJWQuYmluIiwgcGhhc2UpOworCQkJZGJnKCJzcGVlZHRjaF9maW5kX2Zpcm13YXJlOiBsb29raW5nIGZvciAlcyIsIGJ1Zik7CisKKwkJCWlmIChyZXF1ZXN0X2Zpcm13YXJlKGZ3X3AsIGJ1ZiwgJmluc3RhbmNlLT51LnVzYl9kZXYtPmRldikpIHsKKwkJCQlkZXZfd2FybigmaW5zdGFuY2UtPnUudXNiX2Rldi0+ZGV2LCAibm8gc3RhZ2UgJWQgZmlybXdhcmUgZm91bmQhIiwgcGhhc2UpOworCQkJCXJldHVybiAtRU5PRU5UOworCQkJfQorCQl9CisJfQorCisJZGV2X2luZm8oJmluc3RhbmNlLT51LnVzYl9kZXYtPmRldiwgImZvdW5kIHN0YWdlICVkIGZpcm13YXJlICVzXG4iLCBwaGFzZSwgYnVmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNwZWVkdGNoX2xvYWRfZmlybXdhcmUodm9pZCAqYXJnKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncxLCAqZncyOworCXN0cnVjdCBzcGVlZHRjaF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSA9IGFyZzsKKworCUJVR19PTighaW5zdGFuY2UpOworCisJZGFlbW9uaXplKCJmaXJtd2FyZS9zcGVlZHRjaCIpOworCisJaWYgKCFzcGVlZHRjaF9maW5kX2Zpcm13YXJlKGluc3RhbmNlLCAxLCAmZncxKSkgeworCQlpZiAoIXNwZWVkdGNoX2ZpbmRfZmlybXdhcmUoaW5zdGFuY2UsIDIsICZmdzIpKSB7CisJCQlzcGVlZHRjaF91cGxvYWRfZmlybXdhcmUoaW5zdGFuY2UsIGZ3MSwgZncyKTsKKwkJCXJlbGVhc2VfZmlybXdhcmUoZncyKTsKKwkJfQorCQlyZWxlYXNlX2Zpcm13YXJlKGZ3MSk7CisJfQorCisJLyogSW4gY2FzZSB3ZSBmYWlsZWQsIHNldCBzdGF0ZSBiYWNrIHRvIE5PX0ZJUk1XQVJFIHNvIHRoYXQKKwkgICBhbm90aGVyIGxhdGVyIGF0dGVtcHQgbWF5IHdvcmsuIE90aGVyd2lzZSwgd2UgbmV2ZXIgYWN0dWFsbHkKKwkgICBtYW5hZ2UgdG8gcmVjb3ZlciBpZiwgZm9yIGV4YW1wbGUsIHRoZSBmaXJtd2FyZSBpcyBvbiAvdXNyIGFuZAorCSAgIHdlIGxvb2sgZm9yIGl0IHRvbyBlYXJseS4gKi8KKwlzcGVlZHRjaF9nb3RfZmlybXdhcmUoaW5zdGFuY2UsIDApOworCisJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CisJdWRzbF9wdXRfaW5zdGFuY2UoJmluc3RhbmNlLT51KTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBVU0VfRldfTE9BREVSICovCisKK3N0YXRpYyB2b2lkIHNwZWVkdGNoX2Zpcm13YXJlX3N0YXJ0KHN0cnVjdCBzcGVlZHRjaF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSkKK3sKKyNpZmRlZiBVU0VfRldfTE9BREVSCisJaW50IHJldDsKKyNlbmRpZgorCisJZGJnKCJzcGVlZHRjaF9maXJtd2FyZV9zdGFydCIpOworCisJZG93bigmaW5zdGFuY2UtPnUuc2VyaWFsaXplKTsJLyogdnMgc2VsZiwgc3BlZWR0Y2hfZ290X2Zpcm13YXJlICovCisKKwlpZiAoaW5zdGFuY2UtPnUuc3RhdHVzID49IFVEU0xfTE9BRElOR19GSVJNV0FSRSkgeworCQl1cCgmaW5zdGFuY2UtPnUuc2VyaWFsaXplKTsKKwkJcmV0dXJuOworCX0KKworCWluc3RhbmNlLT51LnN0YXR1cyA9IFVEU0xfTE9BRElOR19GSVJNV0FSRTsKKwl1cCgmaW5zdGFuY2UtPnUuc2VyaWFsaXplKTsKKworI2lmZGVmIFVTRV9GV19MT0FERVIKKwl1ZHNsX2dldF9pbnN0YW5jZSgmaW5zdGFuY2UtPnUpOworCXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKKworCXJldCA9IGtlcm5lbF90aHJlYWQoc3BlZWR0Y2hfbG9hZF9maXJtd2FyZSwgaW5zdGFuY2UsCisJCQkgICAgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyk7CisKKwlpZiAocmV0ID49IDApCisJCXJldHVybjsJCS8qIE9LICovCisKKwlkYmcoInNwZWVkdGNoX2Zpcm13YXJlX3N0YXJ0OiBrZXJuZWxfdGhyZWFkIGZhaWxlZCAoJWQpISIsIHJldCk7CisKKwltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKKwl1ZHNsX3B1dF9pbnN0YW5jZSgmaW5zdGFuY2UtPnUpOworCS8qIEp1c3QgcHJldGVuZCBpdCBuZXZlciBoYXBwZW5lZC4uLiBob3BlIG1vZGVtX3J1biBoYXBwZW5zICovCisjZW5kaWYJCQkJLyogVVNFX0ZXX0xPQURFUiAqLworCisJc3BlZWR0Y2hfZ290X2Zpcm13YXJlKGluc3RhbmNlLCAwKTsKK30KKworc3RhdGljIGludCBzcGVlZHRjaF9maXJtd2FyZV93YWl0KHN0cnVjdCB1ZHNsX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlKQoreworCXNwZWVkdGNoX2Zpcm13YXJlX3N0YXJ0KCh2b2lkICopaW5zdGFuY2UpOworCisJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShpbnN0YW5jZS0+ZmlybXdhcmVfd2FpdGVycywgaW5zdGFuY2UtPnN0YXR1cyAhPSBVRFNMX0xPQURJTkdfRklSTVdBUkUpIDwgMCkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCXJldHVybiAoaW5zdGFuY2UtPnN0YXR1cyA9PSBVRFNMX0xPQURFRF9GSVJNV0FSRSkgPyAwIDogLUVBR0FJTjsKK30KKworLyoqKioqKioqKioKKyoqICBVU0IgICoqCisqKioqKioqKioqLworCitzdGF0aWMgaW50IHNwZWVkdGNoX3VzYl9pb2N0bChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgdW5zaWduZWQgaW50IGNvZGUsCisJCQkgICAgICB2b2lkICp1c2VyX2RhdGEpCit7CisJc3RydWN0IHNwZWVkdGNoX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWRiZygic3BlZWR0Y2hfdXNiX2lvY3RsIGVudGVyZWQiKTsKKworCWlmICghaW5zdGFuY2UpIHsKKwkJZGJnKCJzcGVlZHRjaF91c2JfaW9jdGw6IE5VTEwgaW5zdGFuY2UhIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXN3aXRjaCAoY29kZSkgeworCWNhc2UgVURTTF9JT0NUTF9MSU5FX1VQOgorCQlpbnN0YW5jZS0+dS5hdG1fZGV2LT5zaWduYWwgPSBBVE1fUEhZX1NJR19GT1VORDsKKwkJc3BlZWR0Y2hfZ290X2Zpcm13YXJlKGluc3RhbmNlLCAxKTsKKwkJcmV0dXJuIChpbnN0YW5jZS0+dS5zdGF0dXMgPT0gVURTTF9MT0FERURfRklSTVdBUkUpID8gMCA6IC1FSU87CisJY2FzZSBVRFNMX0lPQ1RMX0xJTkVfRE9XTjoKKwkJaW5zdGFuY2UtPnUuYXRtX2Rldi0+c2lnbmFsID0gQVRNX1BIWV9TSUdfTE9TVDsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorfQorCitzdGF0aWMgaW50IHNwZWVkdGNoX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlpbnQgaWZudW0gPSBpbnRmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisJc3RydWN0IHNwZWVkdGNoX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlOworCXVuc2lnbmVkIGNoYXIgbWFjX3N0clsxM107CisJaW50IHJldCwgaTsKKwljaGFyIGJ1ZjdbU0laRV83XTsKKworCWRiZygic3BlZWR0Y2hfdXNiX3Byb2JlOiB0cnlpbmcgZGV2aWNlIHdpdGggdmVuZG9yPTB4JXgsIHByb2R1Y3Q9MHgleCwgaWZudW0gJWQiLAorCSAgICBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCSAgICBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSwgaWZudW0pOworCisJaWYgKChkZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzICE9IFVTQl9DTEFTU19WRU5ET1JfU1BFQykgfHwgCisJICAgIChpZm51bSAhPSAxKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkYmcoInNwZWVkdGNoX3VzYl9wcm9iZTogZGV2aWNlIGFjY2VwdGVkIik7CisKKwkvKiBpbnN0YW5jZSBpbml0ICovCisJaW5zdGFuY2UgPSBrbWFsbG9jKHNpemVvZigqaW5zdGFuY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluc3RhbmNlKSB7CisJCWRiZygic3BlZWR0Y2hfdXNiX3Byb2JlOiBubyBtZW1vcnkgZm9yIGluc3RhbmNlIGRhdGEhIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbXNldChpbnN0YW5jZSwgMCwgc2l6ZW9mKHN0cnVjdCBzcGVlZHRjaF9pbnN0YW5jZV9kYXRhKSk7CisKKwlpZiAoKHJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKGRldiwgMCwgMCkpIDwgMCkKKwkJZ290byBmYWlsOworCisJaWYgKChyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShkZXYsIDIsIDApKSA8IDApCisJCWdvdG8gZmFpbDsKKworCWluc3RhbmNlLT51LmRhdGFfZW5kcG9pbnQgPSBTUEVFRFRDSF9FTkRQT0lOVF9EQVRBOworCWluc3RhbmNlLT51LmZpcm13YXJlX3dhaXQgPSBzcGVlZHRjaF9maXJtd2FyZV93YWl0OworCWluc3RhbmNlLT51LmRyaXZlcl9uYW1lID0gc3BlZWR0Y2hfZHJpdmVyX25hbWU7CisKKwlyZXQgPSB1ZHNsX2luc3RhbmNlX3NldHVwKGRldiwgJmluc3RhbmNlLT51KTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwlpbml0X3RpbWVyKCZpbnN0YW5jZS0+cG9sbF90aW1lcik7CisJaW5zdGFuY2UtPnBvbGxfdGltZXIuZnVuY3Rpb24gPSBzcGVlZHRjaF90aW1lcl9wb2xsOworCWluc3RhbmNlLT5wb2xsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylpbnN0YW5jZTsKKworCUlOSVRfV09SSygmaW5zdGFuY2UtPnBvbGxfd29yaywgKHZvaWQgKilzcGVlZHRjaF9wb2xsX3N0YXR1cywgaW5zdGFuY2UpOworCisJLyogc2V0IE1BQyBhZGRyZXNzLCBpdCBpcyBzdG9yZWQgaW4gdGhlIHNlcmlhbCBudW1iZXIgKi8KKwltZW1zZXQoaW5zdGFuY2UtPnUuYXRtX2Rldi0+ZXNpLCAwLCBzaXplb2YoaW5zdGFuY2UtPnUuYXRtX2Rldi0+ZXNpKSk7CisJaWYgKHVzYl9zdHJpbmcoZGV2LCBkZXYtPmRlc2NyaXB0b3IuaVNlcmlhbE51bWJlciwgbWFjX3N0ciwgc2l6ZW9mKG1hY19zdHIpKSA9PSAxMikgeworCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkJaW5zdGFuY2UtPnUuYXRtX2Rldi0+ZXNpW2ldID0KKwkJCQkoaGV4MmludChtYWNfc3RyW2kgKiAyXSkgKiAxNikgKyAoaGV4MmludChtYWNfc3RyW2kgKiAyICsgMV0pKTsKKwl9CisKKwkvKiBGaXJzdCBjaGVjayB3aGV0aGVyIHRoZSBtb2RlbSBhbHJlYWR5IHNlZW1zIHRvIGJlIGFsaXZlICovCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCisJCQkgICAgICAweDEyLCAweGMwLCAweDA3LCAweDAwLCBidWY3LCBTSVpFXzcsIDUwMCk7CisKKwlpZiAocmV0ID09IFNJWkVfNykgeworCQlkYmcoImZpcm13YXJlIGFwcGVhcnMgdG8gYmUgYWxyZWFkeSBsb2FkZWQiKTsKKwkJc3BlZWR0Y2hfZ290X2Zpcm13YXJlKGluc3RhbmNlLCAxKTsKKwkJc3BlZWR0Y2hfcG9sbF9zdGF0dXMoaW5zdGFuY2UpOworCX0gZWxzZSB7CisJCXNwZWVkdGNoX2Zpcm13YXJlX3N0YXJ0KGluc3RhbmNlKTsKKwl9CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGluc3RhbmNlKTsKKworCXJldHVybiAwOworCisgZmFpbDoKKwlrZnJlZShpbnN0YW5jZSk7CisKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgc3BlZWR0Y2hfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHNwZWVkdGNoX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWRiZygic3BlZWR0Y2hfdXNiX2Rpc2Nvbm5lY3QgZW50ZXJlZCIpOworCisJaWYgKCFpbnN0YW5jZSkgeworCQlkYmcoInNwZWVkdGNoX3VzYl9kaXNjb25uZWN0OiBOVUxMIGluc3RhbmNlISIpOworCQlyZXR1cm47CisJfQorCisvKlFRIG5lZWQgdG8gaGFuZGxlIGRpc2Nvbm5lY3RzIG9uIGludGVyZmFjZSAjMiB3aGlsZSB1cGxvYWRpbmcgZmlybXdhcmUgKi8KKy8qUVEgYW5kIHdoYXQgYWJvdXQgaW50ZXJmYWNlICMxPyAqLworCisJaWYgKGluc3RhbmNlLT5pbnRfdXJiKSB7CisJCXN0cnVjdCB1cmIgKmludF91cmIgPSBpbnN0YW5jZS0+aW50X3VyYjsKKwkJaW5zdGFuY2UtPmludF91cmIgPSBOVUxMOworCQl3bWIoKTsKKwkJdXNiX3VubGlua191cmIoaW50X3VyYik7CisJCXVzYl9mcmVlX3VyYihpbnRfdXJiKTsKKwl9CisKKwlpbnN0YW5jZS0+aW50X2RhdGFbMF0gPSAxOworCWRlbF90aW1lcl9zeW5jKCZpbnN0YW5jZS0+cG9sbF90aW1lcik7CisJd21iKCk7CisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCXVkc2xfaW5zdGFuY2VfZGlzY29ubmVjdCgmaW5zdGFuY2UtPnUpOworCisJLyogY2xlYW4gdXAgKi8KKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCXVkc2xfcHV0X2luc3RhbmNlKCZpbnN0YW5jZS0+dSk7Cit9CisKKy8qKioqKioqKioqKgorKiogIGluaXQgICoqCisqKioqKioqKioqKi8KKworc3RhdGljIGludCBfX2luaXQgc3BlZWR0Y2hfdXNiX2luaXQodm9pZCkKK3sKKwlkYmcoInNwZWVkdGNoX3VzYl9pbml0OiBkcml2ZXIgdmVyc2lvbiAiIERSSVZFUl9WRVJTSU9OKTsKKworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnNwZWVkdGNoX3VzYl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc3BlZWR0Y2hfdXNiX2NsZWFudXAodm9pZCkKK3sKKwlkYmcoInNwZWVkdGNoX3VzYl9jbGVhbnVwIGVudGVyZWQiKTsKKworCXVzYl9kZXJlZ2lzdGVyKCZzcGVlZHRjaF91c2JfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc3BlZWR0Y2hfdXNiX2luaXQpOworbW9kdWxlX2V4aXQoc3BlZWR0Y2hfdXNiX2NsZWFudXApOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS91c2JfYXRtLmMgYi9kcml2ZXJzL3VzYi9hdG0vdXNiX2F0bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0Y2Q0NDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9hdG0vdXNiX2F0bS5jCkBAIC0wLDAgKzEsMTE4OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIHVzYl9hdG0uYyAtIEdlbmVyaWMgVVNCIHhEU0wgZHJpdmVyIGNvcmUKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLCBBbGNhdGVsCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCBEdW5jYW4gU2FuZHMsIFNvbE5lZ3JvLCBKb3NlcCBDb21hcworICogIENvcHlyaWdodCAoQykgMjAwNCwgRGF2aWQgV29vZGhvdXNlCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiAgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqICBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogIFdyaXR0ZW4gYnkgSm9oYW4gVmVycmVwdCwgbWFpbnRhaW5lZCBieSBEdW5jYW4gU2FuZHMgKGR1bmNhbi5zYW5kc0BmcmVlLmZyKQorICoKKyAqICAxLjcrOgktIFNlZSB0aGUgY2hlY2staW4gbG9ncworICoKKyAqICAxLjY6CS0gTm8gbG9uZ2VyIG9wZW5zIGEgY29ubmVjdGlvbiBpZiB0aGUgZmlybXdhcmUgaXMgbm90IGxvYWRlZAorICogIAkJLSBBZGRlZCBzdXBwb3J0IGZvciB0aGUgc3BlZWR0b3VjaCAzMzAKKyAqICAJCS0gUmVtb3ZlZCB0aGUgbGltaXQgb24gdGhlIG51bWJlciBvZiBkZXZpY2VzCisgKiAgCQktIE1vZHVsZSBub3cgYXV0b2xvYWRzIG9uIGRldmljZSBwbHVnaW4KKyAqICAJCS0gTWVyZ2VkIHJlbGV2YW50IHBhcnRzIG9mIHNhcmxpYgorICogIAkJLSBSZXBsYWNlZCB0aGUga2VybmVsIHRocmVhZCB3aXRoIGEgdGFza2xldAorICogIAkJLSBOZXcgcGFja2V0IHRyYW5zbWlzc2lvbiBjb2RlCisgKiAgCQktIENoYW5nZWQgcHJvYyBmaWxlIGNvbnRlbnRzCisgKiAgCQktIEZpeGVkIGFsbCBrbm93biBTTVAgcmFjZXMKKyAqICAJCS0gTWFueSBmaXhlcyBhbmQgY2xlYW51cHMKKyAqICAJCS0gVmFyaW91cyBmaXhlcyBieSBPbGl2ZXIgTmV1a3VtIChvbGl2ZXJAbmV1a3VtLm5hbWUpCisgKgorICogIDEuNUE6CS0gVmVyc2lvbiBmb3IgaW5jbHVzaW9uIGluIDIuNSBzZXJpZXMga2VybmVsCisgKgkJLSBNb2RpZmljYXRpb25zIGJ5IFJpY2hhcmQgUHVyZGllIChycHVyZGllQHJwc3lzLm5ldCkKKyAqCQktIG1hZGUgY29tcGF0aWJsZSB3aXRoIGtlcm5lbCAyLjUuNiBvbndhcmRzIGJ5IGNoYW5naW5nCisgKgkJdWRzbF91c2Jfc2VuZF9kYXRhX2NvbnRleHQtPnVyYiB0byBhIHBvaW50ZXIgYW5kIGFkZGluZyBjb2RlCisgKgkJdG8gYWxsb2MgYW5kIGZyZWUgaXQKKyAqCQktIHJlbW92ZV93YWl0X3F1ZXVlKCkgYWRkZWQgdG8gdWRzbF9hdG1fcHJvY2Vzc3F1ZXVlX3RocmVhZCgpCisgKgorICogIDEuNToJLSBmaXhlZCBtZW1vcnkgbGVhayB3aGVuIGF0bXNhcl9kZWNvZGVfYWFsNSByZXR1cm5lZCBOVUxMLgorICoJCShyZXBvcnRlZCBieSBzdGVwaGVuLnJvYmluc29uQHplbi5jby51aykKKyAqCisgKiAgMS40OgktIGNoYW5nZWQgdGhlIHNwaW5fbG9jaygpIHVuZGVyIGludGVycnVwdCB0byBzcGluX2xvY2tfaXJxc2F2ZSgpCisgKgkJLSB1bmxpbmsgYWxsIGFjdGl2ZSBzZW5kIHVyYnMgb2YgYSB2Y2MgdGhhdCBpcyBiZWluZyBjbG9zZWQuCisgKgorICogIDEuMy4xOgktIGFkZGVkIHRoZSB2ZXJzaW9uIG51bWJlcgorICoKKyAqICAxLjM6CS0gQWRkZWQgbXVsdGlwbGUgc2VuZCB1cmIgc3VwcG9ydAorICoJCS0gZml4ZWQgbWVtb3J5IGxlYWsgYW5kIHZjYy0+dHhfaW51c2Ugc3RhcnZhdGlvbiBidWcKKyAqCQkgIHdoZW4gbm90IGVub3VnaCBtZW1vcnkgbGVmdCBpbiB2Y2MuCisgKgorICogIDEuMjoJLSBGaXhlZCByYWNlIGNvbmRpdGlvbiBpbiB1ZHNsX3VzYl9zZW5kX2RhdGEoKQorICogIDEuMToJLSBUdXJuZWQgb2ZmIHBhY2tldCBkZWJ1Z2dpbmcKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG0uaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorCisjaW5jbHVkZSAidXNiX2F0bS5oIgorCisjaWZkZWYgVkVSQk9TRV9ERUJVRworc3RhdGljIGludCB1ZHNsX3ByaW50X3BhY2tldChjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuKTsKKyNkZWZpbmUgUEFDS0VUREVCVUcoYXJnLi4uKQl1ZHNsX3ByaW50X3BhY2tldCAoYXJnKQorI2RlZmluZSB2ZGJnKGFyZy4uLikJCWRiZyAoYXJnKQorI2Vsc2UKKyNkZWZpbmUgUEFDS0VUREVCVUcoYXJnLi4uKQorI2RlZmluZSB2ZGJnKGFyZy4uLikKKyNlbmRpZgorCisjZGVmaW5lIERSSVZFUl9BVVRIT1IJIkpvaGFuIFZlcnJlcHQsIER1bmNhbiBTYW5kcyA8ZHVuY2FuLnNhbmRzQGZyZWUuZnI+IgorI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMS44IgorI2RlZmluZSBEUklWRVJfREVTQwkiR2VuZXJpYyBVU0IgQVRNL0RTTCBJL08sIHZlcnNpb24gIiBEUklWRVJfVkVSU0lPTgorCitzdGF0aWMgdW5zaWduZWQgaW50IG51bV9yY3ZfdXJicyA9IFVEU0xfREVGQVVMVF9SQ1ZfVVJCUzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnVtX3NuZF91cmJzID0gVURTTF9ERUZBVUxUX1NORF9VUkJTOworc3RhdGljIHVuc2lnbmVkIGludCBudW1fcmN2X2J1ZnMgPSBVRFNMX0RFRkFVTFRfUkNWX0JVRlM7CitzdGF0aWMgdW5zaWduZWQgaW50IG51bV9zbmRfYnVmcyA9IFVEU0xfREVGQVVMVF9TTkRfQlVGUzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmN2X2J1Zl9zaXplID0gVURTTF9ERUZBVUxUX1JDVl9CVUZfU0laRTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc25kX2J1Zl9zaXplID0gVURTTF9ERUZBVUxUX1NORF9CVUZfU0laRTsKKworbW9kdWxlX3BhcmFtKG51bV9yY3ZfdXJicywgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV9yY3ZfdXJicywKKwkJICJOdW1iZXIgb2YgdXJicyB1c2VkIGZvciByZWNlcHRpb24gKHJhbmdlOiAwLSIKKwkJIF9fTU9EVUxFX1NUUklORyhVRFNMX01BWF9SQ1ZfVVJCUykgIiwgZGVmYXVsdDogIgorCQkgX19NT0RVTEVfU1RSSU5HKFVEU0xfREVGQVVMVF9SQ1ZfVVJCUykgIikiKTsKKworbW9kdWxlX3BhcmFtKG51bV9zbmRfdXJicywgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV9zbmRfdXJicywKKwkJICJOdW1iZXIgb2YgdXJicyB1c2VkIGZvciB0cmFuc21pc3Npb24gKHJhbmdlOiAwLSIKKwkJIF9fTU9EVUxFX1NUUklORyhVRFNMX01BWF9TTkRfVVJCUykgIiwgZGVmYXVsdDogIgorCQkgX19NT0RVTEVfU1RSSU5HKFVEU0xfREVGQVVMVF9TTkRfVVJCUykgIikiKTsKKworbW9kdWxlX3BhcmFtKG51bV9yY3ZfYnVmcywgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV9yY3ZfYnVmcywKKwkJICJOdW1iZXIgb2YgYnVmZmVycyB1c2VkIGZvciByZWNlcHRpb24gKHJhbmdlOiAwLSIKKwkJIF9fTU9EVUxFX1NUUklORyhVRFNMX01BWF9SQ1ZfQlVGUykgIiwgZGVmYXVsdDogIgorCQkgX19NT0RVTEVfU1RSSU5HKFVEU0xfREVGQVVMVF9SQ1ZfQlVGUykgIikiKTsKKworbW9kdWxlX3BhcmFtKG51bV9zbmRfYnVmcywgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV9zbmRfYnVmcywKKwkJICJOdW1iZXIgb2YgYnVmZmVycyB1c2VkIGZvciB0cmFuc21pc3Npb24gKHJhbmdlOiAwLSIKKwkJIF9fTU9EVUxFX1NUUklORyhVRFNMX01BWF9TTkRfQlVGUykgIiwgZGVmYXVsdDogIgorCQkgX19NT0RVTEVfU1RSSU5HKFVEU0xfREVGQVVMVF9TTkRfQlVGUykgIikiKTsKKworbW9kdWxlX3BhcmFtKHJjdl9idWZfc2l6ZSwgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJjdl9idWZfc2l6ZSwKKwkJICJTaXplIG9mIHRoZSBidWZmZXJzIHVzZWQgZm9yIHJlY2VwdGlvbiAocmFuZ2U6IDAtIgorCQkgX19NT0RVTEVfU1RSSU5HKFVEU0xfTUFYX1JDVl9CVUZfU0laRSkgIiwgZGVmYXVsdDogIgorCQkgX19NT0RVTEVfU1RSSU5HKFVEU0xfREVGQVVMVF9SQ1ZfQlVGX1NJWkUpICIpIik7CisKK21vZHVsZV9wYXJhbShzbmRfYnVmX3NpemUsIHVpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhzbmRfYnVmX3NpemUsCisJCSAiU2l6ZSBvZiB0aGUgYnVmZmVycyB1c2VkIGZvciB0cmFuc21pc3Npb24gKHJhbmdlOiAwLSIKKwkJIF9fTU9EVUxFX1NUUklORyhVRFNMX01BWF9TTkRfQlVGX1NJWkUpICIsIGRlZmF1bHQ6ICIKKwkJIF9fTU9EVUxFX1NUUklORyhVRFNMX0RFRkFVTFRfU05EX0JVRl9TSVpFKSAiKSIpOworCisvKiBBVE0gKi8KKworc3RhdGljIHZvaWQgdWRzbF9hdG1fZGV2X2Nsb3NlKHN0cnVjdCBhdG1fZGV2ICpkZXYpOworc3RhdGljIGludCB1ZHNsX2F0bV9vcGVuKHN0cnVjdCBhdG1fdmNjICp2Y2MpOworc3RhdGljIHZvaWQgdWRzbF9hdG1fY2xvc2Uoc3RydWN0IGF0bV92Y2MgKnZjYyk7CitzdGF0aWMgaW50IHVkc2xfYXRtX2lvY3RsKHN0cnVjdCBhdG1fZGV2ICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICogYXJnKTsKK3N0YXRpYyBpbnQgdWRzbF9hdG1fc2VuZChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3N0YXRpYyBpbnQgdWRzbF9hdG1fcHJvY19yZWFkKHN0cnVjdCBhdG1fZGV2ICphdG1fZGV2LCBsb2ZmX3QgKiBwb3MsIGNoYXIgKnBhZ2UpOworCitzdGF0aWMgc3RydWN0IGF0bWRldl9vcHMgdWRzbF9hdG1fZGV2b3BzID0geworCS5kZXZfY2xvc2UJPSB1ZHNsX2F0bV9kZXZfY2xvc2UsCisJLm9wZW4JCT0gdWRzbF9hdG1fb3BlbiwKKwkuY2xvc2UJCT0gdWRzbF9hdG1fY2xvc2UsCisJLmlvY3RsCQk9IHVkc2xfYXRtX2lvY3RsLAorCS5zZW5kCQk9IHVkc2xfYXRtX3NlbmQsCisJLnByb2NfcmVhZAk9IHVkc2xfYXRtX3Byb2NfcmVhZCwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCit9OworCisvKioqKioqKioqKioKKyoqICBtaXNjICAqKgorKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1ZHNsX3BvcChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmICh2Y2MtPnBvcCkKKwkJdmNjLT5wb3AodmNjLCBza2IpOworCWVsc2UKKwkJZGV2X2tmcmVlX3NrYihza2IpOworfQorCisvKioqKioqKioqKioqKgorKiogIGRlY29kZSAgKioKKyoqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVkc2xfdmNjX2RhdGEgKnVkc2xfZmluZF92Y2Moc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UsCisJCQkJCQkgIHNob3J0IHZwaSwgaW50IHZjaSkKK3sKKwlzdHJ1Y3QgdWRzbF92Y2NfZGF0YSAqdmNjOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh2Y2MsICZpbnN0YW5jZS0+dmNjX2xpc3QsIGxpc3QpCisJCWlmICgodmNjLT52Y2kgPT0gdmNpKSAmJiAodmNjLT52cGkgPT0gdnBpKSkKKwkJCXJldHVybiB2Y2M7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHVkc2xfZXh0cmFjdF9jZWxscyhzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSwKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpzb3VyY2UsIHVuc2lnbmVkIGludCBob3dtYW55KQoreworCXN0cnVjdCB1ZHNsX3ZjY19kYXRhICpjYWNoZWRfdmNjID0gTlVMTDsKKwlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOworCXN0cnVjdCBza19idWZmICpzYXJiOworCXN0cnVjdCB1ZHNsX3ZjY19kYXRhICp2Y2NfZGF0YTsKKwlpbnQgY2FjaGVkX3ZjaSA9IDA7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHB0aTsKKwlpbnQgdmNpOworCXNob3J0IGNhY2hlZF92cGkgPSAwOworCXNob3J0IHZwaTsKKworCWZvciAoaSA9IDA7IGkgPCBob3dtYW55OworCSAgICAgaSsrLCBzb3VyY2UgKz0gQVRNX0NFTExfU0laRSArIGluc3RhbmNlLT5yY3ZfcGFkZGluZykgeworCQl2cGkgPSAoKHNvdXJjZVswXSAmIDB4MGYpIDw8IDQpIHwgKHNvdXJjZVsxXSA+PiA0KTsKKwkJdmNpID0gKChzb3VyY2VbMV0gJiAweDBmKSA8PCAxMikgfCAoc291cmNlWzJdIDw8IDQpIHwgKHNvdXJjZVszXSA+PiA0KTsKKwkJcHRpID0gKHNvdXJjZVszXSAmIDB4MikgIT0gMDsKKworCQl2ZGJnKCJ1ZHNsX2V4dHJhY3RfY2VsbHM6IHZwaSAlaGQsIHZjaSAlZCwgcHRpICVkIiwgdnBpLCB2Y2ksIHB0aSk7CisKKwkJaWYgKGNhY2hlZF92Y2MgJiYgKHZjaSA9PSBjYWNoZWRfdmNpKSAmJiAodnBpID09IGNhY2hlZF92cGkpKQorCQkJdmNjX2RhdGEgPSBjYWNoZWRfdmNjOworCQllbHNlIGlmICgodmNjX2RhdGEgPSB1ZHNsX2ZpbmRfdmNjKGluc3RhbmNlLCB2cGksIHZjaSkpKSB7CisJCQljYWNoZWRfdmNjID0gdmNjX2RhdGE7CisJCQljYWNoZWRfdnBpID0gdnBpOworCQkJY2FjaGVkX3ZjaSA9IHZjaTsKKwkJfSBlbHNlIHsKKwkJCWRiZygidWRzbF9leHRyYWN0X2NlbGxzOiB1bmtub3duIHZwaS92Y2kgKCVoZC8lZCkhIiwgdnBpLCB2Y2kpOworCQkJY29udGludWU7CisJCX0KKworCQl2Y2MgPSB2Y2NfZGF0YS0+dmNjOworCQlzYXJiID0gdmNjX2RhdGEtPnNhcmI7CisKKwkJaWYgKHNhcmItPnRhaWwgKyBBVE1fQ0VMTF9QQVlMT0FEID4gc2FyYi0+ZW5kKSB7CisJCQlkYmcoInVkc2xfZXh0cmFjdF9jZWxsczogYnVmZmVyIG92ZXJydW4gKHNhcmItPmxlbiAldSwgdmNjOiAweCVwKSEiLCBzYXJiLT5sZW4sIHZjYyk7CisJCQkvKiBkaXNjYXJkIGNlbGxzIGFscmVhZHkgcmVjZWl2ZWQgKi8KKwkJCXNrYl90cmltKHNhcmIsIDApOworCQl9CisKKwkJbWVtY3B5KHNhcmItPnRhaWwsIHNvdXJjZSArIEFUTV9DRUxMX0hFQURFUiwgQVRNX0NFTExfUEFZTE9BRCk7CisJCV9fc2tiX3B1dChzYXJiLCBBVE1fQ0VMTF9QQVlMT0FEKTsKKworCQlpZiAocHRpKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQkJdW5zaWduZWQgaW50IGxlbmd0aDsKKwkJCXVuc2lnbmVkIGludCBwZHVfbGVuZ3RoOworCisJCQlsZW5ndGggPSAoc291cmNlW0FUTV9DRUxMX1NJWkUgLSA2XSA8PCA4KSArIHNvdXJjZVtBVE1fQ0VMTF9TSVpFIC0gNV07CisKKwkJCS8qIGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3cgKi8KKwkJCWlmIChsZW5ndGggPiBBVE1fTUFYX0FBTDVfUERVKSB7CisJCQkJZGJnKCJ1ZHNsX2V4dHJhY3RfY2VsbHM6IGJvZ3VzIGxlbmd0aCAldSAodmNjOiAweCVwKSEiLCBsZW5ndGgsIHZjYyk7CisJCQkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cnhfZXJyKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJcGR1X2xlbmd0aCA9IFVEU0xfTlVNX0NFTExTKGxlbmd0aCkgKiBBVE1fQ0VMTF9QQVlMT0FEOworCisJCQlpZiAoc2FyYi0+bGVuIDwgcGR1X2xlbmd0aCkgeworCQkJCWRiZygidWRzbF9leHRyYWN0X2NlbGxzOiBib2d1cyBwZHVfbGVuZ3RoICV1IChzYXJiLT5sZW46ICV1LCB2Y2M6IDB4JXApISIsIHBkdV9sZW5ndGgsIHNhcmItPmxlbiwgdmNjKTsKKwkJCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT5yeF9lcnIpOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQlpZiAoY3JjMzJfYmUofjAsIHNhcmItPnRhaWwgLSBwZHVfbGVuZ3RoLCBwZHVfbGVuZ3RoKSAhPSAweGM3MDRkZDdiKSB7CisJCQkJZGJnKCJ1ZHNsX2V4dHJhY3RfY2VsbHM6IHBhY2tldCBmYWlsZWQgY3JjIGNoZWNrICh2Y2M6IDB4JXApISIsIHZjYyk7CisJCQkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cnhfZXJyKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJdmRiZygidWRzbF9leHRyYWN0X2NlbGxzOiBnb3QgcGFja2V0IChsZW5ndGg6ICV1LCBwZHVfbGVuZ3RoOiAldSwgdmNjOiAweCVwKSIsIGxlbmd0aCwgcGR1X2xlbmd0aCwgdmNjKTsKKworCQkJaWYgKCEoc2tiID0gZGV2X2FsbG9jX3NrYihsZW5ndGgpKSkgeworCQkJCWRiZygidWRzbF9leHRyYWN0X2NlbGxzOiBubyBtZW1vcnkgZm9yIHNrYiAobGVuZ3RoOiAldSkhIiwgbGVuZ3RoKTsKKwkJCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT5yeF9kcm9wKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJdmRiZygidWRzbF9leHRyYWN0X2NlbGxzOiBhbGxvY2F0ZWQgbmV3IHNrX2J1ZmYgKHNrYjogMHglcCwgc2tiLT50cnVlc2l6ZTogJXUpIiwgc2tiLCBza2ItPnRydWVzaXplKTsKKworCQkJaWYgKCFhdG1fY2hhcmdlKHZjYywgc2tiLT50cnVlc2l6ZSkpIHsKKwkJCQlkYmcoInVkc2xfZXh0cmFjdF9jZWxsczogZmFpbGVkIGF0bV9jaGFyZ2UgKHNrYi0+dHJ1ZXNpemU6ICV1KSEiLCBza2ItPnRydWVzaXplKTsKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQkJZ290byBvdXQ7CS8qIGF0bV9jaGFyZ2UgaW5jcmVtZW50cyByeF9kcm9wICovCisJCQl9CisKKwkJCW1lbWNweShza2ItPmRhdGEsIHNhcmItPnRhaWwgLSBwZHVfbGVuZ3RoLCBsZW5ndGgpOworCQkJX19za2JfcHV0KHNrYiwgbGVuZ3RoKTsKKworCQkJdmRiZygidWRzbF9leHRyYWN0X2NlbGxzOiBzZW5kaW5nIHNrYiAweCVwLCBza2ItPmxlbiAldSwgc2tiLT50cnVlc2l6ZSAldSIsIHNrYiwgc2tiLT5sZW4sIHNrYi0+dHJ1ZXNpemUpOworCisJCQlQQUNLRVRERUJVRyhza2ItPmRhdGEsIHNrYi0+bGVuKTsKKworCQkJdmNjLT5wdXNoKHZjYywgc2tiKTsKKworCQkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+cngpOworCQlvdXQ6CisJCQlza2JfdHJpbShzYXJiLCAwKTsKKwkJfQorCX0KK30KKworLyoqKioqKioqKioqKioKKyoqICBlbmNvZGUgICoqCisqKioqKioqKioqKioqLworCitzdGF0aWMgaW5saW5lIHZvaWQgdWRzbF9maWxsX2NlbGxfaGVhZGVyKHVuc2lnbmVkIGNoYXIgKnRhcmdldCwgc3RydWN0IGF0bV92Y2MgKnZjYykKK3sKKwl0YXJnZXRbMF0gPSB2Y2MtPnZwaSA+PiA0OworCXRhcmdldFsxXSA9ICh2Y2MtPnZwaSA8PCA0KSB8ICh2Y2MtPnZjaSA+PiAxMik7CisJdGFyZ2V0WzJdID0gdmNjLT52Y2kgPj4gNDsKKwl0YXJnZXRbM10gPSB2Y2MtPnZjaSA8PCA0OworCXRhcmdldFs0XSA9IDB4ZWM7Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHplcm9zW0FUTV9DRUxMX1BBWUxPQURdOworCitzdGF0aWMgdm9pZCB1ZHNsX2dyb29tX3NrYihzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB1ZHNsX2NvbnRyb2wgKmN0cmwgPSBVRFNMX1NLQihza2IpOworCXVuc2lnbmVkIGludCB6ZXJvX3BhZGRpbmc7CisJdTMyIGNyYzsKKworCWN0cmwtPmF0bV9kYXRhLnZjYyA9IHZjYzsKKworCWN0cmwtPm51bV9jZWxscyA9IFVEU0xfTlVNX0NFTExTKHNrYi0+bGVuKTsKKwljdHJsLT5udW1fZW50aXJlID0gc2tiLT5sZW4gLyBBVE1fQ0VMTF9QQVlMT0FEOworCisJemVyb19wYWRkaW5nID0gY3RybC0+bnVtX2NlbGxzICogQVRNX0NFTExfUEFZTE9BRCAtIHNrYi0+bGVuIC0gQVRNX0FBTDVfVFJBSUxFUjsKKworCWlmIChjdHJsLT5udW1fZW50aXJlICsgMSA8IGN0cmwtPm51bV9jZWxscykKKwkJY3RybC0+cGR1X3BhZGRpbmcgPSB6ZXJvX3BhZGRpbmcgLSAoQVRNX0NFTExfUEFZTE9BRCAtIEFUTV9BQUw1X1RSQUlMRVIpOworCWVsc2UKKwkJY3RybC0+cGR1X3BhZGRpbmcgPSB6ZXJvX3BhZGRpbmc7CisKKwljdHJsLT5hYWw1X3RyYWlsZXJbMF0gPSAwOwkvKiBVVSA9IDAgKi8KKwljdHJsLT5hYWw1X3RyYWlsZXJbMV0gPSAwOwkvKiBDUEkgPSAwICovCisJY3RybC0+YWFsNV90cmFpbGVyWzJdID0gc2tiLT5sZW4gPj4gODsKKwljdHJsLT5hYWw1X3RyYWlsZXJbM10gPSBza2ItPmxlbjsKKworCWNyYyA9IGNyYzMyX2JlKH4wLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwljcmMgPSBjcmMzMl9iZShjcmMsIHplcm9zLCB6ZXJvX3BhZGRpbmcpOworCWNyYyA9IGNyYzMyX2JlKGNyYywgY3RybC0+YWFsNV90cmFpbGVyLCA0KTsKKwljcmMgPSB+Y3JjOworCisJY3RybC0+YWFsNV90cmFpbGVyWzRdID0gY3JjID4+IDI0OworCWN0cmwtPmFhbDVfdHJhaWxlcls1XSA9IGNyYyA+PiAxNjsKKwljdHJsLT5hYWw1X3RyYWlsZXJbNl0gPSBjcmMgPj4gODsKKwljdHJsLT5hYWw1X3RyYWlsZXJbN10gPSBjcmM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdWRzbF93cml0ZV9jZWxscyhzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBob3dtYW55LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgdW5zaWduZWQgY2hhciAqKnRhcmdldF9wKQoreworCXN0cnVjdCB1ZHNsX2NvbnRyb2wgKmN0cmwgPSBVRFNMX1NLQihza2IpOworCXVuc2lnbmVkIGNoYXIgKnRhcmdldCA9ICp0YXJnZXRfcDsKKwl1bnNpZ25lZCBpbnQgbmMsIG5lLCBpOworCisJdmRiZygidWRzbF93cml0ZV9jZWxsczogaG93bWFueT0ldSwgc2tiLT5sZW49JWQsIG51bV9jZWxscz0ldSwgbnVtX2VudGlyZT0ldSwgcGR1X3BhZGRpbmc9JXUiLCBob3dtYW55LCBza2ItPmxlbiwgY3RybC0+bnVtX2NlbGxzLCBjdHJsLT5udW1fZW50aXJlLCBjdHJsLT5wZHVfcGFkZGluZyk7CisKKwluYyA9IGN0cmwtPm51bV9jZWxsczsKKwluZSA9IG1pbihob3dtYW55LCBjdHJsLT5udW1fZW50aXJlKTsKKworCWZvciAoaSA9IDA7IGkgPCBuZTsgaSsrKSB7CisJCXVkc2xfZmlsbF9jZWxsX2hlYWRlcih0YXJnZXQsIGN0cmwtPmF0bV9kYXRhLnZjYyk7CisJCXRhcmdldCArPSBBVE1fQ0VMTF9IRUFERVI7CisJCW1lbWNweSh0YXJnZXQsIHNrYi0+ZGF0YSwgQVRNX0NFTExfUEFZTE9BRCk7CisJCXRhcmdldCArPSBBVE1fQ0VMTF9QQVlMT0FEOworCQlpZiAoaW5zdGFuY2UtPnNuZF9wYWRkaW5nKSB7CisJCQltZW1zZXQodGFyZ2V0LCAwLCBpbnN0YW5jZS0+c25kX3BhZGRpbmcpOworCQkJdGFyZ2V0ICs9IGluc3RhbmNlLT5zbmRfcGFkZGluZzsKKwkJfQorCQlfX3NrYl9wdWxsKHNrYiwgQVRNX0NFTExfUEFZTE9BRCk7CisJfQorCisJY3RybC0+bnVtX2VudGlyZSAtPSBuZTsKKworCWlmICghKGN0cmwtPm51bV9jZWxscyAtPSBuZSkgfHwgIShob3dtYW55IC09IG5lKSkKKwkJZ290byBvdXQ7CisKKwl1ZHNsX2ZpbGxfY2VsbF9oZWFkZXIodGFyZ2V0LCBjdHJsLT5hdG1fZGF0YS52Y2MpOworCXRhcmdldCArPSBBVE1fQ0VMTF9IRUFERVI7CisJbWVtY3B5KHRhcmdldCwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJdGFyZ2V0ICs9IHNrYi0+bGVuOworCV9fc2tiX3B1bGwoc2tiLCBza2ItPmxlbik7CisJbWVtc2V0KHRhcmdldCwgMCwgY3RybC0+cGR1X3BhZGRpbmcpOworCXRhcmdldCArPSBjdHJsLT5wZHVfcGFkZGluZzsKKworCWlmICgtLWN0cmwtPm51bV9jZWxscykgeworCQlpZiAoIS0taG93bWFueSkgeworCQkJY3RybC0+cGR1X3BhZGRpbmcgPSBBVE1fQ0VMTF9QQVlMT0FEIC0gQVRNX0FBTDVfVFJBSUxFUjsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKGluc3RhbmNlLT5zbmRfcGFkZGluZykgeworCQkJbWVtc2V0KHRhcmdldCwgMCwgaW5zdGFuY2UtPnNuZF9wYWRkaW5nKTsKKwkJCXRhcmdldCArPSBpbnN0YW5jZS0+c25kX3BhZGRpbmc7CisJCX0KKwkJdWRzbF9maWxsX2NlbGxfaGVhZGVyKHRhcmdldCwgY3RybC0+YXRtX2RhdGEudmNjKTsKKwkJdGFyZ2V0ICs9IEFUTV9DRUxMX0hFQURFUjsKKwkJbWVtc2V0KHRhcmdldCwgMCwgQVRNX0NFTExfUEFZTE9BRCAtIEFUTV9BQUw1X1RSQUlMRVIpOworCQl0YXJnZXQgKz0gQVRNX0NFTExfUEFZTE9BRCAtIEFUTV9BQUw1X1RSQUlMRVI7CisKKwkJLS1jdHJsLT5udW1fY2VsbHM7CisJCVVEU0xfQVNTRVJUKCFjdHJsLT5udW1fY2VsbHMpOworCX0KKworCW1lbWNweSh0YXJnZXQsIGN0cmwtPmFhbDVfdHJhaWxlciwgQVRNX0FBTDVfVFJBSUxFUik7CisJdGFyZ2V0ICs9IEFUTV9BQUw1X1RSQUlMRVI7CisJLyogc2V0IHB0aSBiaXQgaW4gbGFzdCBjZWxsICovCisJKih0YXJnZXQgKyAzIC0gQVRNX0NFTExfU0laRSkgfD0gMHgyOworCWlmIChpbnN0YW5jZS0+c25kX3BhZGRpbmcpIHsKKwkJbWVtc2V0KHRhcmdldCwgMCwgaW5zdGFuY2UtPnNuZF9wYWRkaW5nKTsKKwkJdGFyZ2V0ICs9IGluc3RhbmNlLT5zbmRfcGFkZGluZzsKKwl9Cisgb3V0OgorCSp0YXJnZXRfcCA9IHRhcmdldDsKKwlyZXR1cm4gbmMgLSBjdHJsLT5udW1fY2VsbHM7Cit9CisKKy8qKioqKioqKioqKioqKgorKiogIHJlY2VpdmUgICoqCisqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgdWRzbF9jb21wbGV0ZV9yZWNlaXZlKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVkc2xfcmVjZWl2ZV9idWZmZXIgKmJ1ZjsKKwlzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZTsKKwlzdHJ1Y3QgdWRzbF9yZWNlaXZlciAqcmN2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXVyYiB8fCAhKHJjdiA9IHVyYi0+Y29udGV4dCkpIHsKKwkJZGJnKCJ1ZHNsX2NvbXBsZXRlX3JlY2VpdmU6IGJhZCB1cmIhIik7CisJCXJldHVybjsKKwl9CisKKwlpbnN0YW5jZSA9IHJjdi0+aW5zdGFuY2U7CisJYnVmID0gcmN2LT5idWZmZXI7CisKKwlidWYtPmZpbGxlZF9jZWxscyA9IHVyYi0+YWN0dWFsX2xlbmd0aCAvIChBVE1fQ0VMTF9TSVpFICsgaW5zdGFuY2UtPnJjdl9wYWRkaW5nKTsKKworCXZkYmcoInVkc2xfY29tcGxldGVfcmVjZWl2ZTogdXJiIDB4JXAsIHN0YXR1cyAlZCwgYWN0dWFsX2xlbmd0aCAlZCwgZmlsbGVkX2NlbGxzICV1LCByY3YgMHglcCwgYnVmIDB4JXAiLCB1cmIsIHVyYi0+c3RhdHVzLCB1cmItPmFjdHVhbF9sZW5ndGgsIGJ1Zi0+ZmlsbGVkX2NlbGxzLCByY3YsIGJ1Zik7CisKKwlVRFNMX0FTU0VSVChidWYtPmZpbGxlZF9jZWxscyA8PSByY3ZfYnVmX3NpemUpOworCisJLyogbWF5IG5vdCBiZSBpbl9pbnRlcnJ1cHQoKSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+cmVjZWl2ZV9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGQoJnJjdi0+bGlzdCwgJmluc3RhbmNlLT5zcGFyZV9yZWNlaXZlcnMpOworCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+bGlzdCwgJmluc3RhbmNlLT5maWxsZWRfcmVjZWl2ZV9idWZmZXJzKTsKKwlpZiAobGlrZWx5KCF1cmItPnN0YXR1cykpCisJCXRhc2tsZXRfc2NoZWR1bGUoJmluc3RhbmNlLT5yZWNlaXZlX3Rhc2tsZXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5yZWNlaXZlX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgdWRzbF9wcm9jZXNzX3JlY2VpdmUodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCB1ZHNsX3JlY2VpdmVfYnVmZmVyICpidWY7CisJc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UgPSAoc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqKWRhdGE7CisJc3RydWN0IHVkc2xfcmVjZWl2ZXIgKnJjdjsKKwlpbnQgZXJyOworCisgbWFkZV9wcm9ncmVzczoKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmluc3RhbmNlLT5zcGFyZV9yZWNlaXZlX2J1ZmZlcnMpKSB7CisJCXNwaW5fbG9ja19pcnEoJmluc3RhbmNlLT5yZWNlaXZlX2xvY2spOworCQlpZiAobGlzdF9lbXB0eSgmaW5zdGFuY2UtPnNwYXJlX3JlY2VpdmVycykpIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaW5zdGFuY2UtPnJlY2VpdmVfbG9jayk7CisJCQlicmVhazsKKwkJfQorCQlyY3YgPSBsaXN0X2VudHJ5KGluc3RhbmNlLT5zcGFyZV9yZWNlaXZlcnMubmV4dCwKKwkJCQkgc3RydWN0IHVkc2xfcmVjZWl2ZXIsIGxpc3QpOworCQlsaXN0X2RlbCgmcmN2LT5saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZpbnN0YW5jZS0+cmVjZWl2ZV9sb2NrKTsKKworCQlidWYgPSBsaXN0X2VudHJ5KGluc3RhbmNlLT5zcGFyZV9yZWNlaXZlX2J1ZmZlcnMubmV4dCwKKwkJCQkgc3RydWN0IHVkc2xfcmVjZWl2ZV9idWZmZXIsIGxpc3QpOworCQlsaXN0X2RlbCgmYnVmLT5saXN0KTsKKworCQlyY3YtPmJ1ZmZlciA9IGJ1ZjsKKworCQl1c2JfZmlsbF9idWxrX3VyYihyY3YtPnVyYiwgaW5zdGFuY2UtPnVzYl9kZXYsCisJCQkJICB1c2JfcmN2YnVsa3BpcGUoaW5zdGFuY2UtPnVzYl9kZXYsIGluc3RhbmNlLT5kYXRhX2VuZHBvaW50KSwKKwkJCQkgIGJ1Zi0+YmFzZSwKKwkJCQkgIHJjdl9idWZfc2l6ZSAqIChBVE1fQ0VMTF9TSVpFICsgaW5zdGFuY2UtPnJjdl9wYWRkaW5nKSwKKwkJCQkgIHVkc2xfY29tcGxldGVfcmVjZWl2ZSwgcmN2KTsKKworCQl2ZGJnKCJ1ZHNsX3Byb2Nlc3NfcmVjZWl2ZTogc2VuZGluZyB1cmIgMHglcCwgcmN2IDB4JXAsIGJ1ZiAweCVwIiwKKwkJICAgICByY3YtPnVyYiwgcmN2LCBidWYpOworCisJCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIocmN2LT51cmIsIEdGUF9BVE9NSUMpKSA8IDApIHsKKwkJCWRiZygidWRzbF9wcm9jZXNzX3JlY2VpdmU6IHVyYiBzdWJtaXNzaW9uIGZhaWxlZCAoJWQpISIsIGVycik7CisJCQlsaXN0X2FkZCgmYnVmLT5saXN0LCAmaW5zdGFuY2UtPnNwYXJlX3JlY2VpdmVfYnVmZmVycyk7CisJCQlzcGluX2xvY2tfaXJxKCZpbnN0YW5jZS0+cmVjZWl2ZV9sb2NrKTsKKwkJCWxpc3RfYWRkKCZyY3YtPmxpc3QsICZpbnN0YW5jZS0+c3BhcmVfcmVjZWl2ZXJzKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaW5zdGFuY2UtPnJlY2VpdmVfbG9jayk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNwaW5fbG9ja19pcnEoJmluc3RhbmNlLT5yZWNlaXZlX2xvY2spOworCWlmIChsaXN0X2VtcHR5KCZpbnN0YW5jZS0+ZmlsbGVkX3JlY2VpdmVfYnVmZmVycykpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZpbnN0YW5jZS0+cmVjZWl2ZV9sb2NrKTsKKwkJcmV0dXJuOwkJLyogZG9uZSAtIG5vIG1vcmUgYnVmZmVycyAqLworCX0KKwlidWYgPSBsaXN0X2VudHJ5KGluc3RhbmNlLT5maWxsZWRfcmVjZWl2ZV9idWZmZXJzLm5leHQsCisJCQkgc3RydWN0IHVkc2xfcmVjZWl2ZV9idWZmZXIsIGxpc3QpOworCWxpc3RfZGVsKCZidWYtPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmaW5zdGFuY2UtPnJlY2VpdmVfbG9jayk7CisKKwl2ZGJnKCJ1ZHNsX3Byb2Nlc3NfcmVjZWl2ZTogcHJvY2Vzc2luZyBidWYgMHglcCIsIGJ1Zik7CisJdWRzbF9leHRyYWN0X2NlbGxzKGluc3RhbmNlLCBidWYtPmJhc2UsIGJ1Zi0+ZmlsbGVkX2NlbGxzKTsKKwlsaXN0X2FkZCgmYnVmLT5saXN0LCAmaW5zdGFuY2UtPnNwYXJlX3JlY2VpdmVfYnVmZmVycyk7CisJZ290byBtYWRlX3Byb2dyZXNzOworfQorCisvKioqKioqKioqKioKKyoqICBzZW5kICAqKgorKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIHVkc2xfY29tcGxldGVfc2VuZChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1ZHNsX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlOworCXN0cnVjdCB1ZHNsX3NlbmRlciAqc25kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXVyYiB8fCAhKHNuZCA9IHVyYi0+Y29udGV4dCkgfHwgIShpbnN0YW5jZSA9IHNuZC0+aW5zdGFuY2UpKSB7CisJCWRiZygidWRzbF9jb21wbGV0ZV9zZW5kOiBiYWQgdXJiISIpOworCQlyZXR1cm47CisJfQorCisJdmRiZygidWRzbF9jb21wbGV0ZV9zZW5kOiB1cmIgMHglcCwgc3RhdHVzICVkLCBzbmQgMHglcCwgYnVmIDB4JXAiLCB1cmIsCisJICAgICB1cmItPnN0YXR1cywgc25kLCBzbmQtPmJ1ZmZlcik7CisKKwkvKiBtYXkgbm90IGJlIGluX2ludGVycnVwdCgpICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmluc3RhbmNlLT5zZW5kX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmc25kLT5saXN0LCAmaW5zdGFuY2UtPnNwYXJlX3NlbmRlcnMpOworCWxpc3RfYWRkKCZzbmQtPmJ1ZmZlci0+bGlzdCwgJmluc3RhbmNlLT5zcGFyZV9zZW5kX2J1ZmZlcnMpOworCXRhc2tsZXRfc2NoZWR1bGUoJmluc3RhbmNlLT5zZW5kX3Rhc2tsZXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5zZW5kX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgdWRzbF9wcm9jZXNzX3NlbmQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCB1ZHNsX3NlbmRfYnVmZmVyICpidWY7CisJc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UgPSAoc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqKWRhdGE7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgdWRzbF9zZW5kZXIgKnNuZDsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGludCBudW1fd3JpdHRlbjsKKworIG1hZGVfcHJvZ3Jlc3M6CisJc3Bpbl9sb2NrX2lycSgmaW5zdGFuY2UtPnNlbmRfbG9jayk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZpbnN0YW5jZS0+c3BhcmVfc2VuZGVycykpIHsKKwkJaWYgKCFsaXN0X2VtcHR5KCZpbnN0YW5jZS0+ZmlsbGVkX3NlbmRfYnVmZmVycykpIHsKKwkJCWJ1ZiA9IGxpc3RfZW50cnkoaW5zdGFuY2UtPmZpbGxlZF9zZW5kX2J1ZmZlcnMubmV4dCwKKwkJCQkJIHN0cnVjdCB1ZHNsX3NlbmRfYnVmZmVyLCBsaXN0KTsKKwkJCWxpc3RfZGVsKCZidWYtPmxpc3QpOworCQl9IGVsc2UgaWYgKChidWYgPSBpbnN0YW5jZS0+Y3VycmVudF9idWZmZXIpKSB7CisJCQlpbnN0YW5jZS0+Y3VycmVudF9idWZmZXIgPSBOVUxMOworCQl9IGVsc2UJCS8qIGFsbCBidWZmZXJzIGVtcHR5ICovCisJCQlicmVhazsKKworCQlzbmQgPSBsaXN0X2VudHJ5KGluc3RhbmNlLT5zcGFyZV9zZW5kZXJzLm5leHQsCisJCQkJIHN0cnVjdCB1ZHNsX3NlbmRlciwgbGlzdCk7CisJCWxpc3RfZGVsKCZzbmQtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnEoJmluc3RhbmNlLT5zZW5kX2xvY2spOworCisJCXNuZC0+YnVmZmVyID0gYnVmOworCQl1c2JfZmlsbF9idWxrX3VyYihzbmQtPnVyYiwgaW5zdGFuY2UtPnVzYl9kZXYsCisJCQkJICB1c2Jfc25kYnVsa3BpcGUoaW5zdGFuY2UtPnVzYl9kZXYsIGluc3RhbmNlLT5kYXRhX2VuZHBvaW50KSwKKwkJCQkgIGJ1Zi0+YmFzZSwKKwkJCQkgIChzbmRfYnVmX3NpemUgLSBidWYtPmZyZWVfY2VsbHMpICogKEFUTV9DRUxMX1NJWkUgKyBpbnN0YW5jZS0+c25kX3BhZGRpbmcpLAorCQkJCSAgdWRzbF9jb21wbGV0ZV9zZW5kLCBzbmQpOworCisJCXZkYmcoInVkc2xfcHJvY2Vzc19zZW5kOiBzdWJtaXR0aW5nIHVyYiAweCVwICglZCBjZWxscyksIHNuZCAweCVwLCBidWYgMHglcCIsCisJCSAgICAgc25kLT51cmIsIHNuZF9idWZfc2l6ZSAtIGJ1Zi0+ZnJlZV9jZWxscywgc25kLCBidWYpOworCisJCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIoc25kLT51cmIsIEdGUF9BVE9NSUMpKSA8IDApIHsKKwkJCWRiZygidWRzbF9wcm9jZXNzX3NlbmQ6IHVyYiBzdWJtaXNzaW9uIGZhaWxlZCAoJWQpISIsIGVycik7CisJCQlzcGluX2xvY2tfaXJxKCZpbnN0YW5jZS0+c2VuZF9sb2NrKTsKKwkJCWxpc3RfYWRkKCZzbmQtPmxpc3QsICZpbnN0YW5jZS0+c3BhcmVfc2VuZGVycyk7CisJCQlzcGluX3VubG9ja19pcnEoJmluc3RhbmNlLT5zZW5kX2xvY2spOworCQkJbGlzdF9hZGQoJmJ1Zi0+bGlzdCwgJmluc3RhbmNlLT5maWxsZWRfc2VuZF9idWZmZXJzKTsKKwkJCXJldHVybjsJLyogYmFpbCBvdXQgKi8KKwkJfQorCisJCXNwaW5fbG9ja19pcnEoJmluc3RhbmNlLT5zZW5kX2xvY2spOworCX0JCQkvKiB3aGlsZSAqLworCXNwaW5fdW5sb2NrX2lycSgmaW5zdGFuY2UtPnNlbmRfbG9jayk7CisKKwlpZiAoIWluc3RhbmNlLT5jdXJyZW50X3NrYikKKwkJaW5zdGFuY2UtPmN1cnJlbnRfc2tiID0gc2tiX2RlcXVldWUoJmluc3RhbmNlLT5zbmRxdWV1ZSk7CisJaWYgKCFpbnN0YW5jZS0+Y3VycmVudF9za2IpCisJCXJldHVybjsJCS8qIGRvbmUgLSBubyBtb3JlIHNrYnMgKi8KKworCXNrYiA9IGluc3RhbmNlLT5jdXJyZW50X3NrYjsKKworCWlmICghKGJ1ZiA9IGluc3RhbmNlLT5jdXJyZW50X2J1ZmZlcikpIHsKKwkJc3Bpbl9sb2NrX2lycSgmaW5zdGFuY2UtPnNlbmRfbG9jayk7CisJCWlmIChsaXN0X2VtcHR5KCZpbnN0YW5jZS0+c3BhcmVfc2VuZF9idWZmZXJzKSkgeworCQkJaW5zdGFuY2UtPmN1cnJlbnRfYnVmZmVyID0gTlVMTDsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaW5zdGFuY2UtPnNlbmRfbG9jayk7CisJCQlyZXR1cm47CS8qIGRvbmUgLSBubyBtb3JlIGJ1ZmZlcnMgKi8KKwkJfQorCQlidWYgPSBsaXN0X2VudHJ5KGluc3RhbmNlLT5zcGFyZV9zZW5kX2J1ZmZlcnMubmV4dCwKKwkJCSAgICAgICBzdHJ1Y3QgdWRzbF9zZW5kX2J1ZmZlciwgbGlzdCk7CisJCWxpc3RfZGVsKCZidWYtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnEoJmluc3RhbmNlLT5zZW5kX2xvY2spOworCisJCWJ1Zi0+ZnJlZV9zdGFydCA9IGJ1Zi0+YmFzZTsKKwkJYnVmLT5mcmVlX2NlbGxzID0gc25kX2J1Zl9zaXplOworCisJCWluc3RhbmNlLT5jdXJyZW50X2J1ZmZlciA9IGJ1ZjsKKwl9CisKKwludW1fd3JpdHRlbiA9IHVkc2xfd3JpdGVfY2VsbHMoaW5zdGFuY2UsIGJ1Zi0+ZnJlZV9jZWxscywgc2tiLCAmYnVmLT5mcmVlX3N0YXJ0KTsKKworCXZkYmcoInVkc2xfcHJvY2Vzc19zZW5kOiB3cm90ZSAldSBjZWxscyBmcm9tIHNrYiAweCVwIHRvIGJ1ZmZlciAweCVwIiwKKwkgICAgIG51bV93cml0dGVuLCBza2IsIGJ1Zik7CisKKwlpZiAoIShidWYtPmZyZWVfY2VsbHMgLT0gbnVtX3dyaXR0ZW4pKSB7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+bGlzdCwgJmluc3RhbmNlLT5maWxsZWRfc2VuZF9idWZmZXJzKTsKKwkJaW5zdGFuY2UtPmN1cnJlbnRfYnVmZmVyID0gTlVMTDsKKwl9CisKKwl2ZGJnKCJ1ZHNsX3Byb2Nlc3Nfc2VuZDogYnVmZmVyIGNvbnRhaW5zICVkIGNlbGxzLCAlZCBsZWZ0IiwKKwkgICAgIHNuZF9idWZfc2l6ZSAtIGJ1Zi0+ZnJlZV9jZWxscywgYnVmLT5mcmVlX2NlbGxzKTsKKworCWlmICghVURTTF9TS0Ioc2tiKS0+bnVtX2NlbGxzKSB7CisJCXN0cnVjdCBhdG1fdmNjICp2Y2MgPSBVRFNMX1NLQihza2IpLT5hdG1fZGF0YS52Y2M7CisKKwkJdWRzbF9wb3AodmNjLCBza2IpOworCQlpbnN0YW5jZS0+Y3VycmVudF9za2IgPSBOVUxMOworCisJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnR4KTsKKwl9CisKKwlnb3RvIG1hZGVfcHJvZ3Jlc3M7Cit9CisKK3N0YXRpYyB2b2lkIHVkc2xfY2FuY2VsX3NlbmQoc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UsCisJCQkgICAgIHN0cnVjdCBhdG1fdmNjICp2Y2MpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm47CisKKwlkYmcoInVkc2xfY2FuY2VsX3NlbmQgZW50ZXJlZCIpOworCXNwaW5fbG9ja19pcnEoJmluc3RhbmNlLT5zbmRxdWV1ZS5sb2NrKTsKKwlmb3IgKHNrYiA9IGluc3RhbmNlLT5zbmRxdWV1ZS5uZXh0LCBuID0gc2tiLT5uZXh0OworCSAgICAgc2tiICE9IChzdHJ1Y3Qgc2tfYnVmZiAqKSZpbnN0YW5jZS0+c25kcXVldWU7CisJICAgICBza2IgPSBuLCBuID0gc2tiLT5uZXh0KQorCQlpZiAoVURTTF9TS0Ioc2tiKS0+YXRtX2RhdGEudmNjID09IHZjYykgeworCQkJZGJnKCJ1ZHNsX2NhbmNlbF9zZW5kOiBwb3BwaW5nIHNrYiAweCVwIiwgc2tiKTsKKwkJCV9fc2tiX3VubGluayhza2IsICZpbnN0YW5jZS0+c25kcXVldWUpOworCQkJdWRzbF9wb3AodmNjLCBza2IpOworCQl9CisJc3Bpbl91bmxvY2tfaXJxKCZpbnN0YW5jZS0+c25kcXVldWUubG9jayk7CisKKwl0YXNrbGV0X2Rpc2FibGUoJmluc3RhbmNlLT5zZW5kX3Rhc2tsZXQpOworCWlmICgoc2tiID0gaW5zdGFuY2UtPmN1cnJlbnRfc2tiKSAmJiAoVURTTF9TS0Ioc2tiKS0+YXRtX2RhdGEudmNjID09IHZjYykpIHsKKwkJZGJnKCJ1ZHNsX2NhbmNlbF9zZW5kOiBwb3BwaW5nIGN1cnJlbnQgc2tiICgweCVwKSIsIHNrYik7CisJCWluc3RhbmNlLT5jdXJyZW50X3NrYiA9IE5VTEw7CisJCXVkc2xfcG9wKHZjYywgc2tiKTsKKwl9CisJdGFza2xldF9lbmFibGUoJmluc3RhbmNlLT5zZW5kX3Rhc2tsZXQpOworCWRiZygidWRzbF9jYW5jZWxfc2VuZCBkb25lIik7Cit9CisKK3N0YXRpYyBpbnQgdWRzbF9hdG1fc2VuZChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB1ZHNsX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlID0gdmNjLT5kZXYtPmRldl9kYXRhOworCWludCBlcnI7CisKKwl2ZGJnKCJ1ZHNsX2F0bV9zZW5kIGNhbGxlZCAoc2tiIDB4JXAsIGxlbiAldSkiLCBza2IsIHNrYi0+bGVuKTsKKworCWlmICghaW5zdGFuY2UpIHsKKwkJZGJnKCJ1ZHNsX2F0bV9zZW5kOiBOVUxMIGRhdGEhIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpZiAodmNjLT5xb3MuYWFsICE9IEFUTV9BQUw1KSB7CisJCWRiZygidWRzbF9hdG1fc2VuZDogdW5zdXBwb3J0ZWQgQVRNIHR5cGUgJWQhIiwgdmNjLT5xb3MuYWFsKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBmYWlsOworCX0KKworCWlmIChza2ItPmxlbiA+IEFUTV9NQVhfQUFMNV9QRFUpIHsKKwkJZGJnKCJ1ZHNsX2F0bV9zZW5kOiBwYWNrZXQgdG9vIGxvbmcgKCVkIHZzICVkKSEiLCBza2ItPmxlbiwKKwkJICAgIEFUTV9NQVhfQUFMNV9QRFUpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGZhaWw7CisJfQorCisJUEFDS0VUREVCVUcoc2tiLT5kYXRhLCBza2ItPmxlbik7CisKKwl1ZHNsX2dyb29tX3NrYih2Y2MsIHNrYik7CisJc2tiX3F1ZXVlX3RhaWwoJmluc3RhbmNlLT5zbmRxdWV1ZSwgc2tiKTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZpbnN0YW5jZS0+c2VuZF90YXNrbGV0KTsKKworCXJldHVybiAwOworCisgZmFpbDoKKwl1ZHNsX3BvcCh2Y2MsIHNrYik7CisJcmV0dXJuIGVycjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqCisqKiAgYmVhbiBjb3VudGluZyAgKioKKyoqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCB1ZHNsX2Rlc3Ryb3lfaW5zdGFuY2Uoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UgPQorCSAgICBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSwgcmVmY291bnQpOworCisJdGFza2xldF9raWxsKCZpbnN0YW5jZS0+cmVjZWl2ZV90YXNrbGV0KTsKKwl0YXNrbGV0X2tpbGwoJmluc3RhbmNlLT5zZW5kX3Rhc2tsZXQpOworCXVzYl9wdXRfZGV2KGluc3RhbmNlLT51c2JfZGV2KTsKKwlrZnJlZShpbnN0YW5jZSk7Cit9CisKK3ZvaWQgdWRzbF9nZXRfaW5zdGFuY2Uoc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UpCit7CisJa3JlZl9nZXQoJmluc3RhbmNlLT5yZWZjb3VudCk7Cit9CisKK3ZvaWQgdWRzbF9wdXRfaW5zdGFuY2Uoc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UpCit7CisJa3JlZl9wdXQoJmluc3RhbmNlLT5yZWZjb3VudCwgdWRzbF9kZXN0cm95X2luc3RhbmNlKTsKK30KKworLyoqKioqKioqKioKKyoqICBBVE0gICoqCisqKioqKioqKioqLworCitzdGF0aWMgdm9pZCB1ZHNsX2F0bV9kZXZfY2xvc2Uoc3RydWN0IGF0bV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSA9IGRldi0+ZGV2X2RhdGE7CisKKwlkZXYtPmRldl9kYXRhID0gTlVMTDsKKwl1ZHNsX3B1dF9pbnN0YW5jZShpbnN0YW5jZSk7Cit9CisKK3N0YXRpYyBpbnQgdWRzbF9hdG1fcHJvY19yZWFkKHN0cnVjdCBhdG1fZGV2ICphdG1fZGV2LCBsb2ZmX3QgKiBwb3MsIGNoYXIgKnBhZ2UpCit7CisJc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UgPSBhdG1fZGV2LT5kZXZfZGF0YTsKKwlpbnQgbGVmdCA9ICpwb3M7CisKKwlpZiAoIWluc3RhbmNlKSB7CisJCWRiZygidWRzbF9hdG1fcHJvY19yZWFkOiBOVUxMIGluc3RhbmNlISIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoIWxlZnQtLSkKKwkJcmV0dXJuIHNwcmludGYocGFnZSwgIiVzXG4iLCBpbnN0YW5jZS0+ZGVzY3JpcHRpb24pOworCisJaWYgKCFsZWZ0LS0pCisJCXJldHVybiBzcHJpbnRmKHBhZ2UsICJNQUM6ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJICAgICAgIGF0bV9kZXYtPmVzaVswXSwgYXRtX2Rldi0+ZXNpWzFdLAorCQkJICAgICAgIGF0bV9kZXYtPmVzaVsyXSwgYXRtX2Rldi0+ZXNpWzNdLAorCQkJICAgICAgIGF0bV9kZXYtPmVzaVs0XSwgYXRtX2Rldi0+ZXNpWzVdKTsKKworCWlmICghbGVmdC0tKQorCQlyZXR1cm4gc3ByaW50ZihwYWdlLAorCQkJICAgICAgICJBQUw1OiB0eCAlZCAoICVkIGVyciApLCByeCAlZCAoICVkIGVyciwgJWQgZHJvcCApXG4iLAorCQkJICAgICAgIGF0b21pY19yZWFkKCZhdG1fZGV2LT5zdGF0cy5hYWw1LnR4KSwKKwkJCSAgICAgICBhdG9taWNfcmVhZCgmYXRtX2Rldi0+c3RhdHMuYWFsNS50eF9lcnIpLAorCQkJICAgICAgIGF0b21pY19yZWFkKCZhdG1fZGV2LT5zdGF0cy5hYWw1LnJ4KSwKKwkJCSAgICAgICBhdG9taWNfcmVhZCgmYXRtX2Rldi0+c3RhdHMuYWFsNS5yeF9lcnIpLAorCQkJICAgICAgIGF0b21pY19yZWFkKCZhdG1fZGV2LT5zdGF0cy5hYWw1LnJ4X2Ryb3ApKTsKKworCWlmICghbGVmdC0tKSB7CisJCXN3aXRjaCAoYXRtX2Rldi0+c2lnbmFsKSB7CisJCWNhc2UgQVRNX1BIWV9TSUdfRk9VTkQ6CisJCQlzcHJpbnRmKHBhZ2UsICJMaW5lIHVwIik7CisJCQlicmVhazsKKwkJY2FzZSBBVE1fUEhZX1NJR19MT1NUOgorCQkJc3ByaW50ZihwYWdlLCAiTGluZSBkb3duIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNwcmludGYocGFnZSwgIkxpbmUgc3RhdGUgdW5rbm93biIpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaW5zdGFuY2UtPnVzYl9kZXYtPnN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCkKKwkJCXN0cmNhdChwYWdlLCAiLCBkaXNjb25uZWN0ZWRcbiIpOworCQllbHNlIHsKKwkJCWlmIChpbnN0YW5jZS0+c3RhdHVzID09IFVEU0xfTE9BREVEX0ZJUk1XQVJFKQorCQkJCXN0cmNhdChwYWdlLCAiLCBmaXJtd2FyZSBsb2FkZWRcbiIpOworCQkJZWxzZSBpZiAoaW5zdGFuY2UtPnN0YXR1cyA9PSBVRFNMX0xPQURJTkdfRklSTVdBUkUpCisJCQkJc3RyY2F0KHBhZ2UsICIsIGZpcm13YXJlIGxvYWRpbmdcbiIpOworCQkJZWxzZQorCQkJCXN0cmNhdChwYWdlLCAiLCBubyBmaXJtd2FyZVxuIik7CisJCX0KKworCQlyZXR1cm4gc3RybGVuKHBhZ2UpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVkc2xfYXRtX29wZW4oc3RydWN0IGF0bV92Y2MgKnZjYykKK3sKKwlzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZSA9IHZjYy0+ZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3QgdWRzbF92Y2NfZGF0YSAqbmV3OworCXVuc2lnbmVkIGludCBtYXhfcGR1OworCWludCB2Y2kgPSB2Y2MtPnZjaTsKKwlzaG9ydCB2cGkgPSB2Y2MtPnZwaTsKKwlpbnQgZXJyOworCisJZGJnKCJ1ZHNsX2F0bV9vcGVuOiB2cGkgJWhkLCB2Y2kgJWQiLCB2cGksIHZjaSk7CisKKwlpZiAoIWluc3RhbmNlKSB7CisJCWRiZygidWRzbF9hdG1fb3BlbjogTlVMTCBkYXRhISIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBvbmx5IHN1cHBvcnQgQUFMNSAqLworCWlmICgodmNjLT5xb3MuYWFsICE9IEFUTV9BQUw1KSB8fCAodmNjLT5xb3Mucnh0cC5tYXhfc2R1IDwgMCkKKwkgICAgfHwgKHZjYy0+cW9zLnJ4dHAubWF4X3NkdSA+IEFUTV9NQVhfQUFMNV9QRFUpKSB7CisJCWRiZygidWRzbF9hdG1fb3BlbjogdW5zdXBwb3J0ZWQgQVRNIHR5cGUgJWQhIiwgdmNjLT5xb3MuYWFsKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGluc3RhbmNlLT5maXJtd2FyZV93YWl0ICYmCisJICAgIChlcnIgPSBpbnN0YW5jZS0+ZmlybXdhcmVfd2FpdChpbnN0YW5jZSkpIDwgMCkgeworCQlkYmcoInVkc2xfYXRtX29wZW46IGZpcm13YXJlIG5vdCBsb2FkZWQgKCVkKSEiLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWRvd24oJmluc3RhbmNlLT5zZXJpYWxpemUpOwkvKiB2cyBzZWxmLCB1ZHNsX2F0bV9jbG9zZSAqLworCisJaWYgKHVkc2xfZmluZF92Y2MoaW5zdGFuY2UsIHZwaSwgdmNpKSkgeworCQlkYmcoInVkc2xfYXRtX29wZW46ICVoZC8lZCBhbHJlYWR5IGluIHVzZSEiLCB2cGksIHZjaSk7CisJCXVwKCZpbnN0YW5jZS0+c2VyaWFsaXplKTsKKwkJcmV0dXJuIC1FQUREUklOVVNFOworCX0KKworCWlmICghKG5ldyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1ZHNsX3ZjY19kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7CisJCWRiZygidWRzbF9hdG1fb3Blbjogbm8gbWVtb3J5IGZvciB2Y2NfZGF0YSEiKTsKKwkJdXAoJmluc3RhbmNlLT5zZXJpYWxpemUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQobmV3LCAwLCBzaXplb2Yoc3RydWN0IHVkc2xfdmNjX2RhdGEpKTsKKwluZXctPnZjYyA9IHZjYzsKKwluZXctPnZwaSA9IHZwaTsKKwluZXctPnZjaSA9IHZjaTsKKworCS8qIHVkc2xfZXh0cmFjdF9jZWxscyByZXF1aXJlcyBhdCBsZWFzdCBvbmUgY2VsbCAqLworCW1heF9wZHUgPSBtYXgoMSwgVURTTF9OVU1fQ0VMTFModmNjLT5xb3Mucnh0cC5tYXhfc2R1KSkgKiBBVE1fQ0VMTF9QQVlMT0FEOworCWlmICghKG5ldy0+c2FyYiA9IGFsbG9jX3NrYihtYXhfcGR1LCBHRlBfS0VSTkVMKSkpIHsKKwkJZGJnKCJ1ZHNsX2F0bV9vcGVuOiBubyBtZW1vcnkgZm9yIFNBUiBidWZmZXIhIik7CisJCWtmcmVlKG5ldyk7CisJCXVwKCZpbnN0YW5jZS0+c2VyaWFsaXplKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdmNjLT5kZXZfZGF0YSA9IG5ldzsKKworCXRhc2tsZXRfZGlzYWJsZSgmaW5zdGFuY2UtPnJlY2VpdmVfdGFza2xldCk7CisJbGlzdF9hZGQoJm5ldy0+bGlzdCwgJmluc3RhbmNlLT52Y2NfbGlzdCk7CisJdGFza2xldF9lbmFibGUoJmluc3RhbmNlLT5yZWNlaXZlX3Rhc2tsZXQpOworCisJc2V0X2JpdChBVE1fVkZfQUREUiwgJnZjYy0+ZmxhZ3MpOworCXNldF9iaXQoQVRNX1ZGX1BBUlRJQUwsICZ2Y2MtPmZsYWdzKTsKKwlzZXRfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpOworCisJdXAoJmluc3RhbmNlLT5zZXJpYWxpemUpOworCisJdGFza2xldF9zY2hlZHVsZSgmaW5zdGFuY2UtPnJlY2VpdmVfdGFza2xldCk7CisKKwlkYmcoInVkc2xfYXRtX29wZW46IGFsbG9jYXRlZCB2Y2MgZGF0YSAweCVwIChtYXhfcGR1OiAldSkiLCBuZXcsIG1heF9wZHUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVkc2xfYXRtX2Nsb3NlKHN0cnVjdCBhdG1fdmNjICp2Y2MpCit7CisJc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UgPSB2Y2MtPmRldi0+ZGV2X2RhdGE7CisJc3RydWN0IHVkc2xfdmNjX2RhdGEgKnZjY19kYXRhID0gdmNjLT5kZXZfZGF0YTsKKworCWRiZygidWRzbF9hdG1fY2xvc2UgY2FsbGVkIik7CisKKwlpZiAoIWluc3RhbmNlIHx8ICF2Y2NfZGF0YSkgeworCQlkYmcoInVkc2xfYXRtX2Nsb3NlOiBOVUxMIGRhdGEhIik7CisJCXJldHVybjsKKwl9CisKKwlkYmcoInVkc2xfYXRtX2Nsb3NlOiBkZWFsbG9jYXRpbmcgdmNjIDB4JXAgd2l0aCB2cGkgJWQgdmNpICVkIiwKKwkgICAgdmNjX2RhdGEsIHZjY19kYXRhLT52cGksIHZjY19kYXRhLT52Y2kpOworCisJdWRzbF9jYW5jZWxfc2VuZChpbnN0YW5jZSwgdmNjKTsKKworCWRvd24oJmluc3RhbmNlLT5zZXJpYWxpemUpOwkvKiB2cyBzZWxmLCB1ZHNsX2F0bV9vcGVuICovCisKKwl0YXNrbGV0X2Rpc2FibGUoJmluc3RhbmNlLT5yZWNlaXZlX3Rhc2tsZXQpOworCWxpc3RfZGVsKCZ2Y2NfZGF0YS0+bGlzdCk7CisJdGFza2xldF9lbmFibGUoJmluc3RhbmNlLT5yZWNlaXZlX3Rhc2tsZXQpOworCisJa2ZyZWVfc2tiKHZjY19kYXRhLT5zYXJiKTsKKwl2Y2NfZGF0YS0+c2FyYiA9IE5VTEw7CisKKwlrZnJlZSh2Y2NfZGF0YSk7CisJdmNjLT5kZXZfZGF0YSA9IE5VTEw7CisKKwl2Y2MtPnZwaSA9IEFUTV9WUElfVU5TUEVDOworCXZjYy0+dmNpID0gQVRNX1ZDSV9VTlNQRUM7CisJY2xlYXJfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpOworCWNsZWFyX2JpdChBVE1fVkZfUEFSVElBTCwgJnZjYy0+ZmxhZ3MpOworCWNsZWFyX2JpdChBVE1fVkZfQUREUiwgJnZjYy0+ZmxhZ3MpOworCisJdXAoJmluc3RhbmNlLT5zZXJpYWxpemUpOworCisJZGJnKCJ1ZHNsX2F0bV9jbG9zZSBzdWNjZXNzZnVsIik7Cit9CisKK3N0YXRpYyBpbnQgdWRzbF9hdG1faW9jdGwoc3RydWN0IGF0bV9kZXYgKmRldiwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgdm9pZCBfX3VzZXIgKiBhcmcpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEFUTV9RVUVSWUxPT1A6CisJCXJldHVybiBwdXRfdXNlcihBVE1fTE1fTk9ORSwgKGludCBfX3VzZXIgKilhcmcpID8gLUVGQVVMVCA6IDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9Cit9CisKKy8qKioqKioqKioqCisqKiAgVVNCICAqKgorKioqKioqKioqKi8KKworaW50IHVkc2xfaW5zdGFuY2Vfc2V0dXAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCB1ZHNsX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlKQoreworCWNoYXIgKmJ1ZjsKKwlpbnQgaSwgbGVuZ3RoOworCisJa3JlZl9pbml0KCZpbnN0YW5jZS0+cmVmY291bnQpOwkvKiBvbmUgZm9yIFVTQiAqLworCXVkc2xfZ2V0X2luc3RhbmNlKGluc3RhbmNlKTsJLyogb25lIGZvciBBVE0gKi8KKworCWluaXRfTVVURVgoJmluc3RhbmNlLT5zZXJpYWxpemUpOworCisJaW5zdGFuY2UtPnVzYl9kZXYgPSBkZXY7CisKKwlJTklUX0xJU1RfSEVBRCgmaW5zdGFuY2UtPnZjY19saXN0KTsKKworCWluc3RhbmNlLT5zdGF0dXMgPSBVRFNMX05PX0ZJUk1XQVJFOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluc3RhbmNlLT5maXJtd2FyZV93YWl0ZXJzKTsKKworCXNwaW5fbG9ja19pbml0KCZpbnN0YW5jZS0+cmVjZWl2ZV9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmaW5zdGFuY2UtPnNwYXJlX3JlY2VpdmVycyk7CisJSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5maWxsZWRfcmVjZWl2ZV9idWZmZXJzKTsKKworCXRhc2tsZXRfaW5pdCgmaW5zdGFuY2UtPnJlY2VpdmVfdGFza2xldCwgdWRzbF9wcm9jZXNzX3JlY2VpdmUsICh1bnNpZ25lZCBsb25nKWluc3RhbmNlKTsKKwlJTklUX0xJU1RfSEVBRCgmaW5zdGFuY2UtPnNwYXJlX3JlY2VpdmVfYnVmZmVycyk7CisKKwlza2JfcXVldWVfaGVhZF9pbml0KCZpbnN0YW5jZS0+c25kcXVldWUpOworCisJc3Bpbl9sb2NrX2luaXQoJmluc3RhbmNlLT5zZW5kX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZpbnN0YW5jZS0+c3BhcmVfc2VuZGVycyk7CisJSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5zcGFyZV9zZW5kX2J1ZmZlcnMpOworCisJdGFza2xldF9pbml0KCZpbnN0YW5jZS0+c2VuZF90YXNrbGV0LCB1ZHNsX3Byb2Nlc3Nfc2VuZCwKKwkJICAgICAodW5zaWduZWQgbG9uZylpbnN0YW5jZSk7CisJSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5maWxsZWRfc2VuZF9idWZmZXJzKTsKKworCS8qIHJlY2VpdmUgaW5pdCAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fcmN2X3VyYnM7IGkrKykgeworCQlzdHJ1Y3QgdWRzbF9yZWNlaXZlciAqcmN2ID0gJihpbnN0YW5jZS0+cmVjZWl2ZXJzW2ldKTsKKworCQlpZiAoIShyY3YtPnVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCkpKSB7CisJCQlkYmcoInVkc2xfdXNiX3Byb2JlOiBubyBtZW1vcnkgZm9yIHJlY2VpdmUgdXJiICVkISIsIGkpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJcmN2LT5pbnN0YW5jZSA9IGluc3RhbmNlOworCisJCWxpc3RfYWRkKCZyY3YtPmxpc3QsICZpbnN0YW5jZS0+c3BhcmVfcmVjZWl2ZXJzKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Jjdl9idWZzOyBpKyspIHsKKwkJc3RydWN0IHVkc2xfcmVjZWl2ZV9idWZmZXIgKmJ1ZiA9CisJCSAgICAmKGluc3RhbmNlLT5yZWNlaXZlX2J1ZmZlcnNbaV0pOworCisJCWJ1Zi0+YmFzZSA9IGttYWxsb2MocmN2X2J1Zl9zaXplICogKEFUTV9DRUxMX1NJWkUgKyBpbnN0YW5jZS0+cmN2X3BhZGRpbmcpLAorCQkJCSAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFidWYtPmJhc2UpIHsKKwkJCWRiZygidWRzbF91c2JfcHJvYmU6IG5vIG1lbW9yeSBmb3IgcmVjZWl2ZSBidWZmZXIgJWQhIiwgaSk7CisJCQlnb3RvIGZhaWw7CisJCX0KKworCQlsaXN0X2FkZCgmYnVmLT5saXN0LCAmaW5zdGFuY2UtPnNwYXJlX3JlY2VpdmVfYnVmZmVycyk7CisJfQorCisJLyogc2VuZCBpbml0ICovCisJZm9yIChpID0gMDsgaSA8IG51bV9zbmRfdXJiczsgaSsrKSB7CisJCXN0cnVjdCB1ZHNsX3NlbmRlciAqc25kID0gJihpbnN0YW5jZS0+c2VuZGVyc1tpXSk7CisKKwkJaWYgKCEoc25kLT51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpKSkgeworCQkJZGJnKCJ1ZHNsX3VzYl9wcm9iZTogbm8gbWVtb3J5IGZvciBzZW5kIHVyYiAlZCEiLCBpKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCXNuZC0+aW5zdGFuY2UgPSBpbnN0YW5jZTsKKworCQlsaXN0X2FkZCgmc25kLT5saXN0LCAmaW5zdGFuY2UtPnNwYXJlX3NlbmRlcnMpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1fc25kX2J1ZnM7IGkrKykgeworCQlzdHJ1Y3QgdWRzbF9zZW5kX2J1ZmZlciAqYnVmID0gJihpbnN0YW5jZS0+c2VuZF9idWZmZXJzW2ldKTsKKworCQlidWYtPmJhc2UgPSBrbWFsbG9jKHNuZF9idWZfc2l6ZSAqIChBVE1fQ0VMTF9TSVpFICsgaW5zdGFuY2UtPnNuZF9wYWRkaW5nKSwKKwkJCQkgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmLT5iYXNlKSB7CisJCQlkYmcoInVkc2xfdXNiX3Byb2JlOiBubyBtZW1vcnkgZm9yIHNlbmQgYnVmZmVyICVkISIsIGkpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJbGlzdF9hZGQoJmJ1Zi0+bGlzdCwgJmluc3RhbmNlLT5zcGFyZV9zZW5kX2J1ZmZlcnMpOworCX0KKworCS8qIEFUTSBpbml0ICovCisJaW5zdGFuY2UtPmF0bV9kZXYgPSBhdG1fZGV2X3JlZ2lzdGVyKGluc3RhbmNlLT5kcml2ZXJfbmFtZSwKKwkJCQkJICAgICAmdWRzbF9hdG1fZGV2b3BzLCAtMSwgTlVMTCk7CisJaWYgKCFpbnN0YW5jZS0+YXRtX2RldikgeworCQlkYmcoInVkc2xfdXNiX3Byb2JlOiBmYWlsZWQgdG8gcmVnaXN0ZXIgQVRNIGRldmljZSEiKTsKKwkJZ290byBmYWlsOworCX0KKworCWluc3RhbmNlLT5hdG1fZGV2LT5jaV9yYW5nZS52cGlfYml0cyA9IEFUTV9DSV9NQVg7CisJaW5zdGFuY2UtPmF0bV9kZXYtPmNpX3JhbmdlLnZjaV9iaXRzID0gQVRNX0NJX01BWDsKKwlpbnN0YW5jZS0+YXRtX2Rldi0+c2lnbmFsID0gQVRNX1BIWV9TSUdfVU5LTk9XTjsKKworCS8qIHRlbXAgaW5pdCBBVE0gZGV2aWNlLCBzZXQgdG8gMTI4a2JpdCAqLworCWluc3RhbmNlLT5hdG1fZGV2LT5saW5rX3JhdGUgPSAxMjggKiAxMDAwIC8gNDI0OworCisJLyogZGV2aWNlIGRlc2NyaXB0aW9uICovCisJYnVmID0gaW5zdGFuY2UtPmRlc2NyaXB0aW9uOworCWxlbmd0aCA9IHNpemVvZihpbnN0YW5jZS0+ZGVzY3JpcHRpb24pOworCisJaWYgKChpID0gdXNiX3N0cmluZyhkZXYsIGRldi0+ZGVzY3JpcHRvci5pUHJvZHVjdCwgYnVmLCBsZW5ndGgpKSA8IDApCisJCWdvdG8gZmluaXNoOworCisJYnVmICs9IGk7CisJbGVuZ3RoIC09IGk7CisKKwlpID0gc2NucHJpbnRmKGJ1ZiwgbGVuZ3RoLCAiICgiKTsKKwlidWYgKz0gaTsKKwlsZW5ndGggLT0gaTsKKworCWlmIChsZW5ndGggPD0gMCB8fCAoaSA9IHVzYl9tYWtlX3BhdGgoZGV2LCBidWYsIGxlbmd0aCkpIDwgMCkKKwkJZ290byBmaW5pc2g7CisKKwlidWYgKz0gaTsKKwlsZW5ndGggLT0gaTsKKworCXNucHJpbnRmKGJ1ZiwgbGVuZ3RoLCAiKSIpOworCisgZmluaXNoOgorCS8qIHJlYWR5IGZvciBBVE0gY2FsbGJhY2tzICovCisJd21iKCk7CisJaW5zdGFuY2UtPmF0bV9kZXYtPmRldl9kYXRhID0gaW5zdGFuY2U7CisKKwl1c2JfZ2V0X2RldihkZXYpOworCisJcmV0dXJuIDA7CisKKyBmYWlsOgorCWZvciAoaSA9IDA7IGkgPCBudW1fc25kX2J1ZnM7IGkrKykKKwkJa2ZyZWUoaW5zdGFuY2UtPnNlbmRfYnVmZmVyc1tpXS5iYXNlKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fc25kX3VyYnM7IGkrKykKKwkJdXNiX2ZyZWVfdXJiKGluc3RhbmNlLT5zZW5kZXJzW2ldLnVyYik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Jjdl9idWZzOyBpKyspCisJCWtmcmVlKGluc3RhbmNlLT5yZWNlaXZlX2J1ZmZlcnNbaV0uYmFzZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Jjdl91cmJzOyBpKyspCisJCXVzYl9mcmVlX3VyYihpbnN0YW5jZS0+cmVjZWl2ZXJzW2ldLnVyYik7CisKKwlyZXR1cm4gLUVOT01FTTsKK30KKwordm9pZCB1ZHNsX2luc3RhbmNlX2Rpc2Nvbm5lY3Qoc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UpCit7CisJaW50IGk7CisKKwlkYmcoInVkc2xfaW5zdGFuY2VfZGlzY29ubmVjdCBlbnRlcmVkIik7CisKKwlpZiAoIWluc3RhbmNlKSB7CisJCWRiZygidWRzbF9pbnN0YW5jZV9kaXNjb25uZWN0OiBOVUxMIGluc3RhbmNlISIpOworCQlyZXR1cm47CisJfQorCisJLyogcmVjZWl2ZSBmaW5hbGl6ZSAqLworCXRhc2tsZXRfZGlzYWJsZSgmaW5zdGFuY2UtPnJlY2VpdmVfdGFza2xldCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Jjdl91cmJzOyBpKyspCisJCXVzYl9raWxsX3VyYihpbnN0YW5jZS0+cmVjZWl2ZXJzW2ldLnVyYik7CisKKwkvKiBubyBuZWVkIHRvIHRha2UgdGhlIHNwaW5sb2NrICovCisJSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5maWxsZWRfcmVjZWl2ZV9idWZmZXJzKTsKKwlJTklUX0xJU1RfSEVBRCgmaW5zdGFuY2UtPnNwYXJlX3JlY2VpdmVfYnVmZmVycyk7CisKKwl0YXNrbGV0X2VuYWJsZSgmaW5zdGFuY2UtPnJlY2VpdmVfdGFza2xldCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Jjdl91cmJzOyBpKyspCisJCXVzYl9mcmVlX3VyYihpbnN0YW5jZS0+cmVjZWl2ZXJzW2ldLnVyYik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Jjdl9idWZzOyBpKyspCisJCWtmcmVlKGluc3RhbmNlLT5yZWNlaXZlX2J1ZmZlcnNbaV0uYmFzZSk7CisKKwkvKiBzZW5kIGZpbmFsaXplICovCisJdGFza2xldF9kaXNhYmxlKCZpbnN0YW5jZS0+c2VuZF90YXNrbGV0KTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fc25kX3VyYnM7IGkrKykKKwkJdXNiX2tpbGxfdXJiKGluc3RhbmNlLT5zZW5kZXJzW2ldLnVyYik7CisKKwkvKiBubyBuZWVkIHRvIHRha2UgdGhlIHNwaW5sb2NrICovCisJSU5JVF9MSVNUX0hFQUQoJmluc3RhbmNlLT5zcGFyZV9zZW5kZXJzKTsKKwlJTklUX0xJU1RfSEVBRCgmaW5zdGFuY2UtPnNwYXJlX3NlbmRfYnVmZmVycyk7CisJaW5zdGFuY2UtPmN1cnJlbnRfYnVmZmVyID0gTlVMTDsKKworCXRhc2tsZXRfZW5hYmxlKCZpbnN0YW5jZS0+c2VuZF90YXNrbGV0KTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fc25kX3VyYnM7IGkrKykKKwkJdXNiX2ZyZWVfdXJiKGluc3RhbmNlLT5zZW5kZXJzW2ldLnVyYik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3NuZF9idWZzOyBpKyspCisJCWtmcmVlKGluc3RhbmNlLT5zZW5kX2J1ZmZlcnNbaV0uYmFzZSk7CisKKwkvKiBBVE0gZmluYWxpemUgKi8KKwlzaHV0ZG93bl9hdG1fZGV2KGluc3RhbmNlLT5hdG1fZGV2KTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwodWRzbF9nZXRfaW5zdGFuY2UpOworRVhQT1JUX1NZTUJPTF9HUEwodWRzbF9wdXRfaW5zdGFuY2UpOworRVhQT1JUX1NZTUJPTF9HUEwodWRzbF9pbnN0YW5jZV9zZXR1cCk7CitFWFBPUlRfU1lNQk9MX0dQTCh1ZHNsX2luc3RhbmNlX2Rpc2Nvbm5lY3QpOworCisvKioqKioqKioqKioKKyoqICBpbml0ICAqKgorKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgX19pbml0IHVkc2xfdXNiX2luaXQodm9pZCkKK3sKKwlkYmcoInVkc2xfdXNiX2luaXQ6IGRyaXZlciB2ZXJzaW9uICIgRFJJVkVSX1ZFUlNJT04pOworCisJaWYgKHNpemVvZihzdHJ1Y3QgdWRzbF9jb250cm9sKSA+IHNpemVvZigoKHN0cnVjdCBza19idWZmICopIDApLT5jYikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIF9fRklMRV9fICI6IHVudXNhYmxlIHdpdGggdGhpcyBrZXJuZWwhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKChudW1fcmN2X3VyYnMgPiBVRFNMX01BWF9SQ1ZfVVJCUykKKwkgICAgfHwgKG51bV9zbmRfdXJicyA+IFVEU0xfTUFYX1NORF9VUkJTKQorCSAgICB8fCAobnVtX3Jjdl9idWZzID4gVURTTF9NQVhfUkNWX0JVRlMpCisJICAgIHx8IChudW1fc25kX2J1ZnMgPiBVRFNMX01BWF9TTkRfQlVGUykKKwkgICAgfHwgKHJjdl9idWZfc2l6ZSA+IFVEU0xfTUFYX1JDVl9CVUZfU0laRSkKKwkgICAgfHwgKHNuZF9idWZfc2l6ZSA+IFVEU0xfTUFYX1NORF9CVUZfU0laRSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1ZHNsX3VzYl9leGl0KHZvaWQpCit7Cit9CisKK21vZHVsZV9pbml0KHVkc2xfdXNiX2luaXQpOworbW9kdWxlX2V4aXQodWRzbF91c2JfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOworCisvKioqKioqKioqKioqCisqKiAgZGVidWcgICoqCisqKioqKioqKioqKiovCisKKyNpZmRlZiBWRVJCT1NFX0RFQlVHCitzdGF0aWMgaW50IHVkc2xfcHJpbnRfcGFja2V0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4pCit7CisJdW5zaWduZWQgY2hhciBidWZmZXJbMjU2XTsKKwlpbnQgaSA9IDAsIGogPSAwOworCisJZm9yIChpID0gMDsgaSA8IGxlbjspIHsKKwkJYnVmZmVyWzBdID0gJ1wwJzsKKwkJc3ByaW50ZihidWZmZXIsICIlLjNkIDoiLCBpKTsKKwkJZm9yIChqID0gMDsgKGogPCAxNikgJiYgKGkgPCBsZW4pOyBqKyssIGkrKykgeworCQkJc3ByaW50ZihidWZmZXIsICIlcyAlMi4yeCIsIGJ1ZmZlciwgZGF0YVtpXSk7CisJCX0KKwkJZGJnKCIlcyIsIGJ1ZmZlcik7CisJfQorCXJldHVybiBpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vdXNiX2F0bS5oIGIvZHJpdmVycy91c2IvYXRtL3VzYl9hdG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjhjNTMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvYXRtL3VzYl9hdG0uaApAQCAtMCwwICsxLDE3NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIHVzYl9hdG0uaCAtIEdlbmVyaWMgVVNCIHhEU0wgZHJpdmVyIGNvcmUKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLCBBbGNhdGVsCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCBEdW5jYW4gU2FuZHMsIFNvbE5lZ3JvLCBKb3NlcCBDb21hcworICogIENvcHlyaWdodCAoQykgMjAwNCwgRGF2aWQgV29vZGhvdXNlCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiAgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqICBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG0uaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1kZXYuaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisKKy8qCisjZGVmaW5lIERFQlVHCisjZGVmaW5lIFZFUkJPU0VfREVCVUcKKyovCisKKyNpZiAhZGVmaW5lZCAoREVCVUcpICYmIGRlZmluZWQgKENPTkZJR19VU0JfREVCVUcpCisjCWRlZmluZSBERUJVRworI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2lmZGVmIERFQlVHCisjZGVmaW5lIFVEU0xfQVNTRVJUKHgpCUJVR19PTighKHgpKQorI2Vsc2UKKyNkZWZpbmUgVURTTF9BU1NFUlQoeCkJZG8geyBpZiAoISh4KSkgd2FybigiZmFpbGVkIGFzc2VydGlvbiAnIiAjeCAiJyBhdCBsaW5lICVkIiwgX19MSU5FX18pOyB9IHdoaWxlKDApCisjZW5kaWYKKworI2RlZmluZSBVRFNMX01BWF9SQ1ZfVVJCUwkJNAorI2RlZmluZSBVRFNMX01BWF9TTkRfVVJCUwkJNAorI2RlZmluZSBVRFNMX01BWF9SQ1ZfQlVGUwkJOAorI2RlZmluZSBVRFNMX01BWF9TTkRfQlVGUwkJOAorI2RlZmluZSBVRFNMX01BWF9SQ1ZfQlVGX1NJWkUJCTEwMjQJLyogQVRNIGNlbGxzICovCisjZGVmaW5lIFVEU0xfTUFYX1NORF9CVUZfU0laRQkJMTAyNAkvKiBBVE0gY2VsbHMgKi8KKyNkZWZpbmUgVURTTF9ERUZBVUxUX1JDVl9VUkJTCQkyCisjZGVmaW5lIFVEU0xfREVGQVVMVF9TTkRfVVJCUwkJMgorI2RlZmluZSBVRFNMX0RFRkFVTFRfUkNWX0JVRlMJCTQKKyNkZWZpbmUgVURTTF9ERUZBVUxUX1NORF9CVUZTCQk0CisjZGVmaW5lIFVEU0xfREVGQVVMVF9SQ1ZfQlVGX1NJWkUJNjQJLyogQVRNIGNlbGxzICovCisjZGVmaW5lIFVEU0xfREVGQVVMVF9TTkRfQlVGX1NJWkUJNjQJLyogQVRNIGNlbGxzICovCisKKyNkZWZpbmUgQVRNX0NFTExfSEVBREVSCQkJKEFUTV9DRUxMX1NJWkUgLSBBVE1fQ0VMTF9QQVlMT0FEKQorI2RlZmluZSBVRFNMX05VTV9DRUxMUyh4KQkJKCgoeCkgKyBBVE1fQUFMNV9UUkFJTEVSICsgQVRNX0NFTExfUEFZTE9BRCAtIDEpIC8gQVRNX0NFTExfUEFZTE9BRCkKKworLyogcmVjZWl2ZSAqLworCitzdHJ1Y3QgdWRzbF9yZWNlaXZlX2J1ZmZlciB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXVuc2lnbmVkIGNoYXIgKmJhc2U7CisJdW5zaWduZWQgaW50IGZpbGxlZF9jZWxsczsKK307CisKK3N0cnVjdCB1ZHNsX3JlY2VpdmVyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHVkc2xfcmVjZWl2ZV9idWZmZXIgKmJ1ZmZlcjsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgdWRzbF92Y2NfZGF0YSB7CisJLyogdnBpL3ZjaSBsb29rdXAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc2hvcnQgdnBpOworCWludCB2Y2k7CisJc3RydWN0IGF0bV92Y2MgKnZjYzsKKworCS8qIHJhdyBjZWxsIHJlYXNzZW1ibHkgKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2FyYjsKK307CisKKy8qIHNlbmQgKi8KKworc3RydWN0IHVkc2xfc2VuZF9idWZmZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1bnNpZ25lZCBjaGFyICpiYXNlOworCXVuc2lnbmVkIGNoYXIgKmZyZWVfc3RhcnQ7CisJdW5zaWduZWQgaW50IGZyZWVfY2VsbHM7Cit9OworCitzdHJ1Y3QgdWRzbF9zZW5kZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgdWRzbF9zZW5kX2J1ZmZlciAqYnVmZmVyOworCXN0cnVjdCB1cmIgKnVyYjsKKwlzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhICppbnN0YW5jZTsKK307CisKK3N0cnVjdCB1ZHNsX2NvbnRyb2wgeworCXN0cnVjdCBhdG1fc2tiX2RhdGEgYXRtX2RhdGE7CisJdW5zaWduZWQgaW50IG51bV9jZWxsczsKKwl1bnNpZ25lZCBpbnQgbnVtX2VudGlyZTsKKwl1bnNpZ25lZCBpbnQgcGR1X3BhZGRpbmc7CisJdW5zaWduZWQgY2hhciBhYWw1X3RyYWlsZXJbQVRNX0FBTDVfVFJBSUxFUl07Cit9OworCisjZGVmaW5lIFVEU0xfU0tCKHgpCQkoKHN0cnVjdCB1ZHNsX2NvbnRyb2wgKikoeCktPmNiKQorCisvKiBtYWluIGRyaXZlciBkYXRhICovCisKK2VudW0gdWRzbF9zdGF0dXMgeworCVVEU0xfTk9fRklSTVdBUkUsCisJVURTTF9MT0FESU5HX0ZJUk1XQVJFLAorCVVEU0xfTE9BREVEX0ZJUk1XQVJFCit9OworCitzdHJ1Y3QgdWRzbF9pbnN0YW5jZV9kYXRhIHsKKwlzdHJ1Y3Qga3JlZiByZWZjb3VudDsKKwlzdHJ1Y3Qgc2VtYXBob3JlIHNlcmlhbGl6ZTsKKworCS8qIFVTQiBkZXZpY2UgcGFydCAqLworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OworCWNoYXIgZGVzY3JpcHRpb25bNjRdOworCWludCBkYXRhX2VuZHBvaW50OworCWludCBzbmRfcGFkZGluZzsKKwlpbnQgcmN2X3BhZGRpbmc7CisJY29uc3QgY2hhciAqZHJpdmVyX25hbWU7CisKKwkvKiBBVE0gZGV2aWNlIHBhcnQgKi8KKwlzdHJ1Y3QgYXRtX2RldiAqYXRtX2RldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHZjY19saXN0OworCisJLyogZmlybXdhcmUgKi8KKwlpbnQgKCpmaXJtd2FyZV93YWl0KSAoc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqKTsKKwllbnVtIHVkc2xfc3RhdHVzIHN0YXR1czsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBmaXJtd2FyZV93YWl0ZXJzOworCisJLyogcmVjZWl2ZSAqLworCXN0cnVjdCB1ZHNsX3JlY2VpdmVyIHJlY2VpdmVyc1tVRFNMX01BWF9SQ1ZfVVJCU107CisJc3RydWN0IHVkc2xfcmVjZWl2ZV9idWZmZXIgcmVjZWl2ZV9idWZmZXJzW1VEU0xfTUFYX1JDVl9CVUZTXTsKKworCXNwaW5sb2NrX3QgcmVjZWl2ZV9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgc3BhcmVfcmVjZWl2ZXJzOworCXN0cnVjdCBsaXN0X2hlYWQgZmlsbGVkX3JlY2VpdmVfYnVmZmVyczsKKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCByZWNlaXZlX3Rhc2tsZXQ7CisJc3RydWN0IGxpc3RfaGVhZCBzcGFyZV9yZWNlaXZlX2J1ZmZlcnM7CisKKwkvKiBzZW5kICovCisJc3RydWN0IHVkc2xfc2VuZGVyIHNlbmRlcnNbVURTTF9NQVhfU05EX1VSQlNdOworCXN0cnVjdCB1ZHNsX3NlbmRfYnVmZmVyIHNlbmRfYnVmZmVyc1tVRFNMX01BWF9TTkRfQlVGU107CisKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNuZHF1ZXVlOworCisJc3BpbmxvY2tfdCBzZW5kX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBzcGFyZV9zZW5kZXJzOworCXN0cnVjdCBsaXN0X2hlYWQgc3BhcmVfc2VuZF9idWZmZXJzOworCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHNlbmRfdGFza2xldDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqY3VycmVudF9za2I7CQkJLyogYmVpbmcgZW1wdGllZCAqLworCXN0cnVjdCB1ZHNsX3NlbmRfYnVmZmVyICpjdXJyZW50X2J1ZmZlcjsJLyogYmVpbmcgZmlsbGVkICovCisJc3RydWN0IGxpc3RfaGVhZCBmaWxsZWRfc2VuZF9idWZmZXJzOworfTsKKworZXh0ZXJuIGludCB1ZHNsX2luc3RhbmNlX3NldHVwKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IHVkc2xfaW5zdGFuY2VfZGF0YSAqaW5zdGFuY2UpOworZXh0ZXJuIHZvaWQgdWRzbF9pbnN0YW5jZV9kaXNjb25uZWN0KHN0cnVjdCB1ZHNsX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlKTsKK2V4dGVybiB2b2lkIHVkc2xfZ2V0X2luc3RhbmNlKHN0cnVjdCB1ZHNsX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlKTsKK2V4dGVybiB2b2lkIHVkc2xfcHV0X2luc3RhbmNlKHN0cnVjdCB1ZHNsX2luc3RhbmNlX2RhdGEgKmluc3RhbmNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL0tjb25maWcgYi9kcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NjFkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnCkBAIC0wLDAgKzEsODYgQEAKKyMKKyMgVVNCIENsYXNzIGRyaXZlciBjb25maWd1cmF0aW9uCisjCitjb21tZW50ICJVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMiCisJZGVwZW5kcyBvbiBVU0IKKworY29uZmlnIFVTQl9BVURJTworCXRyaXN0YXRlICJVU0IgQXVkaW8gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBTT1VORAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBVU0IgYXVkaW8gZXF1aXBtZW50IHN1Y2ggYXMKKwkgIHNwZWFrZXJzIHRvIHlvdXIgY29tcHV0ZXIncyBVU0IgcG9ydC4gWW91IG9ubHkgbmVlZCB0aGlzIGlmIHlvdSB1c2UKKwkgIHRoZSBPU1Mgc291bmQgZHJpdmVyOyBBTFNBIGhhcyBpdHMgb3duIG9wdGlvbiBmb3IgdXNiIGF1ZGlvIHN1cHBvcnQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGF1ZGlvLgorCitjb21tZW50ICJVU0IgQmx1ZXRvb3RoIFRUWSBjYW4gb25seSBiZSB1c2VkIHdpdGggZGlzYWJsZWQgQmx1ZXRvb3RoIHN1YnN5c3RlbSIKKwlkZXBlbmRzIG9uIFVTQiAmJiBCVAorCitjb25maWcgVVNCX0JMVUVUT09USF9UVFkKKwl0cmlzdGF0ZSAiVVNCIEJsdWV0b290aCBUVFkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBCVD1uCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBhIG5vbnN0YW5kYXJkIHR0eSBpbnRlcmZhY2UgdG8gYSBCbHVldG9vdGgKKwkgIGRldmljZSB0aGF0IGNhbiBiZSB1c2VkIG9ubHkgYnkgc3BlY2lhbGl6ZWQgQmx1ZXRvb3RoIEhDSSBzb2Z0d2FyZS4KKworCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgT3BlbkJUIEJsdWV0b290aCBzdGFjayAoYXZhaWxhYmxlCisJICBhdCA8aHR0cDovL2RldmVsb3Blci5heGlzLmNvbS9zb2Z0d2FyZT4pLCBvciBvdGhlciBUVFkgYmFzZWQKKwkgIEJsdWV0b290aCBzdGFja3MsIGFuZCB3YW50IHRvIGNvbm5lY3QgYSBVU0IgQmx1ZXRvb3RoIGRldmljZQorCSAgdG8geW91ciBjb21wdXRlcidzIFVTQiBwb3J0LgorCisJICBEbyAqbm90KiBlbmFibGUgdGhpcyBkcml2ZXIgaWYgeW91IHdhbnQgdG8gdXNlIGdlbmVyaWMgTGludXgKKwkgIEJsdWV0b290aCBzdXBwb3J0LgorCisJICBJZiBpbiBkb3VidCwgc2F5IE4gaGVyZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYmx1ZXR0eS4KKworY29uZmlnIFVTQl9NSURJCisJdHJpc3RhdGUgIlVTQiBNSURJIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgU09VTkQKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBVU0IgTUlESSBkZXZpY2UgdG8geW91cgorCSAgY29tcHV0ZXIncyBVU0IgcG9ydC4gVGhpcyBkcml2ZXIgaXMgZm9yIGRldmljZXMgdGhhdCBjb21wbHkgd2l0aAorCSAgJ1VuaXZlcnNhbCBTZXJpYWwgQnVzIERldmljZSBDbGFzcyBEZWZpbml0aW9uIGZvciBNSURJIERldmljZScuCisKKwkgIFRoZSBmb2xsb3dpbmcgZGV2aWNlcyBhcmUga25vd24gdG8gd29yazoKKwkgICogU3RlaW5iZXJnIFVTQjJNSURJCisJICAqIFJvbGFuZCBNUFU2NAorCSAgKiBSb2xhbmQgUEMtMzAwCisJICAqIFJvbGFuZCBTQzg4NTAKKwkgICogUm9sYW5kIFVNLTEKKwkgICogUm9sYW5kIFVNLTIKKwkgICogUm9sYW5kIFVBLTEwMAorCSAgKiBZYW1haGEgTVUxMDAwCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYi1taWRpLgorCitjb25maWcgVVNCX0FDTQorCXRyaXN0YXRlICJVU0IgTW9kZW0gKENEQyBBQ00pIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBVU0IgbW9kZW1zIGFuZCBJU0ROIGFkYXB0ZXJzIHdoaWNoIHN1cHBvcnQgdGhlCisJICBDb21tdW5pY2F0aW9uIERldmljZSBDbGFzcyBBYnN0cmFjdCBDb250cm9sIE1vZGVsIGludGVyZmFjZS4KKwkgIFBsZWFzZSByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL2FjbS50eHQ+IGZvciBkZXRhaWxzLgorCisJICBJZiB5b3VyIG1vZGVtIG9ubHkgcmVwb3J0cyAiQ2xzPWZmKHZlbmQuKSIgaW4gdGhlIGRlc2NyaXB0b3JzIGluCisJICAvcHJvYy9idXMvdXNiL2RldmljZXMsIHRoZW4geW91ciBtb2RlbSB3aWxsIG5vdCB3b3JrIHdpdGggdGhpcworCSAgZHJpdmVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjZGMtYWNtLgorCitjb25maWcgVVNCX1BSSU5URVIKKwl0cmlzdGF0ZSAiVVNCIFByaW50ZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIFVTQiBwcmludGVyIHRvIHlvdXIgY29tcHV0ZXIncworCSAgVVNCIHBvcnQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYmxwLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2NsYXNzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MWU1NDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9NYWtlZmlsZQpAQCAtMCwwICsxLDEwIEBACisjCisjIE1ha2VmaWxlIGZvciBVU0IgQ2xhc3MgZHJpdmVycworIyAob25lIHN0ZXAgdXAgZnJvbSB0aGUgbWlzYyBjYXRlZ29yeSkKKyMKKworb2JqLSQoQ09ORklHX1VTQl9BQ00pCQkrPSBjZGMtYWNtLm8KK29iai0kKENPTkZJR19VU0JfQVVESU8pCQkrPSBhdWRpby5vCitvYmotJChDT05GSUdfVVNCX0JMVUVUT09USF9UVFkpCSs9IGJsdWV0dHkubworb2JqLSQoQ09ORklHX1VTQl9NSURJKQkJKz0gdXNiLW1pZGkubworb2JqLSQoQ09ORklHX1VTQl9QUklOVEVSKQkrPSB1c2JscC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9hdWRpby5jIGIvZHJpdmVycy91c2IvY2xhc3MvYXVkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDMyYjdkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvYXVkaW8uYwpAQCAtMCwwICsxLDM4ODIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWF1ZGlvLmMgIC0tICBVU0IgQXVkaW8gQ2xhc3MgZHJpdmVyCisgKgorICoJQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0CisgKgkgICAgQWxhbiBDb3ggKGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51aykKKyAqCSAgICBUaG9tYXMgU2FpbGVyIChzYWlsZXJAaWZlLmVlLmV0aHouY2gpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBEZWJ1Z2dpbmc6CisgKiAJVXNlIHRoZSAnbHN1c2InIHV0aWxpdHkgdG8gZHVtcCB0aGUgZGVzY3JpcHRvcnMuCisgKgorICogMTk5OS0wOS0wNzogIEFsYW4gQ294CisgKgkJUGFyc2luZyBBdWRpbyBkZXNjcmlwdG9yIHBhdGNoCisgKiAxOTk5LTA5LTA4OiAgVGhvbWFzIFNhaWxlcgorICoJCUFkZGVkIE9TUyBjb21wYXRpYmxlIGRhdGEgaW8gZnVuY3Rpb25zOyBib3RoIHBhcnRzIG9mIHRoZQorICoJCWRyaXZlciByZW1haW4gdG8gYmUgZ2x1ZWQgdG9nZXRoZXIKKyAqIDE5OTktMDktMTA6ICBUaG9tYXMgU2FpbGVyCisgKgkJQmVhdXRpZmllZCB0aGUgZHJpdmVyLiBBZGRlZCBzYW1wbGUgZm9ybWF0IGNvbnZlcnNpb25zLgorICoJCVN0aWxsIG5vdCBwcm9wZXJseSBnbHVlZCB3aXRoIHRoZSBwYXJzaW5nIGNvZGUuCisgKgkJVGhlIHBhcnNpbmcgY29kZSBzZWVtcyB0byBoYXZlIGl0cyBwcm9ibGVtcyBidHcsCisgKgkJU2luY2UgaXQgcGFyc2VzIGFsbCBhdmFpbGFibGUgY29uZmlncyBidXQgZG9lc24ndAorICoJCXN0b3JlIHdoaWNoIGlmYWNlL2FsdHNldHRpbmcgYmVsb25ncyB0byB3aGljaCBjb25maWcuCisgKiAxOTk5LTA5LTIwOiAgVGhvbWFzIFNhaWxlcgorICoJCVRocmV3IG91dCBBbGFuJ3MgcGFyc2luZyBjb2RlIGFuZCBpbXBsZW1lbnRlZCBteSBvd24gb25lLgorICoJCVlvdSBjYW5ub3QgcmVhc29ubmFibHkgbGluZWFybHkgcGFyc2UgYXVkaW8gZGVzY3JpcHRvcnMsCisgKgkJZXNwZWNpYWxseSB0aGUgQXVkaW9DbGFzcyBkZXNjcmlwdG9ycyBoYXZlIHRvIGJlIGNvbnNpZGVyZWQKKyAqCQlwb2ludGVyIGxpc3RzLiBNaXhlciBwYXJzaW5nIHVudGVzdGVkLCBkdWUgdG8gbGFjayBvZiBkZXZpY2UuCisgKgkJRmlyc3Qgc3RhYiBhdCBzeW5jaCBwaXBlIGltcGxlbWVudGF0aW9uLCB0aGUgRGFsbGFzIFVTQiBEQUMKKyAqCQl3YW50cyB0byB1c2UgYW4gQXN5bmNoIG91dCBwaXBlLiB1c2JfYXVkaW9fc3RhdGUgbm93IGJhc2ljYWxseQorICoJCW9ubHkgY29udGFpbnMgbGlzdHMgb2YgbWl4ZXIgYW5kIHdhdmUgZGV2aWNlcy4gV2UgY2FuIHRoZXJlZm9yZQorICoJCW5vdyBoYXZlIG11bHRpcGxlIG1peGVyL3dhdmUgZGV2aWNlcyBwZXIgVVNCIGRldmljZS4KKyAqIDE5OTktMTAtMjg6ICBUaG9tYXMgU2FpbGVyCisgKgkJQ29udmVydGVkIHRvIFVSQiBBUEkuIEZpeGVkIGEgdGFza3N0YXRlL3dha2V1cCBzZW1hbnRpY3MgbWlzdGFrZQorICoJCXRoYXQgbWFkZSB0aGUgZHJpdmVyIGNvbnN1bWUgYWxsIGF2YWlsYWJsZSBDUFUgY3ljbGVzLgorICoJCU5vdyBydW5zIHN0YWJsZSBvbiBVSENJLUFjaGVyL0ZsaWVnbC9TYWlsZXIuCisgKiAxOTk5LTEwLTMxOiAgVGhvbWFzIFNhaWxlcgorICoJCUF1ZGlvIGNhbiBub3cgYmUgdW5sb2FkZWQgaWYgaXQgaXMgbm90IGluIHVzZSBieSBhbnkgbWl4ZXIKKyAqCQlvciBkc3AgY2xpZW50IChmb3JtZXJseSB5b3UgaGFkIHRvIGRpc2Nvbm5lY3QgdGhlIGF1ZGlvIGRldmljZXMKKyAqCQlmcm9tIHRoZSBVU0IgcG9ydCkKKyAqCQlGaW5hbGx5LCBhYm91dCB0aHJlZSBtb250aHMgYWZ0ZXIgb3JkZXJpbmcsIG15ICJNYXh4dHJvIFNQSzIyMiIKKyAqCQlzcGVha2VycyBhcnJpdmVkLCBpc24ndCBkaXNkYXRhIGEgZ3JlYXQgbWFpbCBvcmRlciBjb21wYW55IDgtKQorICoJCVBhcnNlIGNsYXNzIHNwZWNpZmljIGVuZHBvaW50IGRlc2NyaXB0b3Igb2YgdGhlIGF1ZGlvc3RyZWFtaW5nCisgKgkJaW50ZXJmYWNlcyBhbmQgdGFrZSB0aGUgZW5kcG9pbnQgYXR0cmlidXRlcyBmcm9tIHRoZXJlLgorICoJCVVuYmVsaWV2YWJseSwgdGhlIFBoaWxpcHMgVVNCIERBQyBoYXMgYSBzYW1wbGluZyByYXRlIHJhbmdlCisgKgkJb2Ygb3ZlciBhIGRlY2FkZSwgeWV0IGRvZXMgbm90IHN1cHBvcnQgdGhlIHNhbXBsaW5nIHJhdGUgY29udHJvbCEKKyAqCQlObyB3b25kZXIgaXQgc291bmRzIHNvIGJhZCwgaGFzIHZlcnkgYXVkaWJsZSBzYW1wbGluZyByYXRlCisgKgkJY29udmVyc2lvbiBkaXN0b3J0aW9uLiBEb24ndCB0cnkgdG8gbGlzdGVuIHRvIGl0IHVzaW5nCisgKgkJZGVjZW50IGhlYWRwaG9uZXMhCisgKgkJIkxldCdzIG1ha2UgdGhpbmdzIGJldHRlciIgLT4gYnV0IHBsZWFzZSBQaGlsaXBzIHN0YXJ0IHdpdGggeW91cgorICoJCW93biBzdHVmZiEhISEKKyAqIDE5OTktMTEtMDI6ICBUaG9tYXMgU2FpbGVyCisgKgkJSXQgdGFrZXMgdGhlIFBoaWxpcHMgYm94ZXMgc2V2ZXJhbCBzZWNvbmRzIHRvIGFjcXVpcmUgc3luY2hyb25pc2F0aW9uCisgKgkJdGhhdCBtZWFucyB0aGV5IHdvbid0IHBsYXkgc2hvcnQgc291bmRzLiBTaG91bGQgcHJvYmFibHkgbWFpbnRhaW4KKyAqCQl0aGUgSVNPIGRhdGFzdHJlYW0gZXZlbiBpZiB0aGVyZSdzIG5vdGhpbmcgdG8gcGxheS4KKyAqCQlGaXggY291bnRpbmcgdGhlIHRvdGFsX2J5dGVzIGNvdW50ZXIsIFJlYWxQbGF5ZXIgRzIgZGVwZW5kcyBvbiBpdC4KKyAqIDE5OTktMTItMjA6ICBUaG9tYXMgU2FpbGVyCisgKgkJRml4IGJhZCBidWcgaW4gY29udmVyc2lvbiB0byBwZXIgaW50ZXJmYWNlIHByb2JpbmcuCisgKgkJZGlzY29ubmVjdCB3YXMgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciB0aGUgYXVkaW8gZGV2aWNlLAorICoJCWxlYWRpbmcgdG8gYSBwcmVtYXR1cmUgZnJlZWluZyBvZiB0aGUgYXVkaW8gc3RydWN0dXJlcworICogMjAwMC0wNS0xMzogIFRob21hcyBTYWlsZXIKKyAqCQlJIGRvbid0IHJlbWVtYmVyIHdobyBjaGFuZ2VkIHRoZSBmaW5kX2Zvcm1hdCByb3V0aW5lLAorICogICAgICAgICAgICAgIGJ1dCB0aGUgY2hhbmdlIHdhcyBjb21wbGV0ZWx5IGJyb2tlbiBmb3IgdGhlIERhbGxhcworICogICAgICAgICAgICAgIGNoaXAuIEFueXdheSB0YWtpbmcgc2FtcGxpbmcgcmF0ZSBpbnRvIGFjY291bnQgaW4gZmluZF9mb3JtYXQKKyAqICAgICAgICAgICAgICBpcyBiYWQgYW5kIHNob3VsZCBub3QgYmUgZG9uZSB1bmxlc3MgdGhlcmUgYXJlIGRldmljZXMgd2l0aAorICogICAgICAgICAgICAgIGNvbXBsZXRlbHkgYnJva2VuIGF1ZGlvIGRlc2NyaXB0b3JzLiBVbmxlc3Mgc29tZW9uZSBzaG93cworICogICAgICAgICAgICAgIG1lIHN1Y2ggYSBkZXNjcmlwdG9yLCBJIHdpbGwgbm90IGFsbG93IGZpbmRfZm9ybWF0IHRvCisgKiAgICAgICAgICAgICAgdGFrZSB0aGUgc2FtcGxpbmcgcmF0ZSBpbnRvIGFjY291bnQuCisgKiAgICAgICAgICAgICAgQWxzbywgdGhlIGZvcm1lciBmaW5kX2Zvcm1hdCBtYWRlOgorICogICAgICAgICAgICAgIC0gbXBnMTIzIHBsYXkgbW9ubyBpbnN0ZWFkIG9mIHN0ZXJlbworICogICAgICAgICAgICAgIC0gc294IGNvbXBsZXRlbHkgZmFpbCBmb3Igd2F2J3Mgd2l0aCBzYW1wbGUgcmF0ZXMgPCA0NC4xa0h6CisgKiAgICAgICAgICAgICAgICAgIGZvciB0aGUgRGFsbGFzIGNoaXAuCisgKiAgICAgICAgICAgICAgQWxzbyBmaXggYSByYXRoZXIgbG9uZyBzdGFuZGluZyBwcm9ibGVtIHdpdGggYXBwbGljYXRpb25zIHRoYXQKKyAqICAgICAgICAgICAgICB1c2UgInNtYWxsIiB3cml0ZXMgcHJvZHVjaW5nIG5vIHNvdW5kIGF0IGFsbC4KKyAqIDIwMDAtMDUtMTU6ICBUaG9tYXMgU2FpbGVyCisgKgkJTXkgZmVhcnMgY2FtZSB0cnVlLCB0aGUgUGhpbGlwcyBjYW1lcmEgaW5kZWVkIGhhcyBwcmV0dHkgc3R1cGlkCisgKiAgICAgICAgICAgICAgYXVkaW8gZGVzY3JpcHRvcnMuCisgKiAyMDAwLTA1LTE3OiAgVGhvbWFzIFNhaWxlcgorICoJCU5lbXNvZnQgc3BvdHRlZCBteSBzdHVwaWQgbGFzdCBtaW51dGUgY2hhbmdlLCB0aGFua3MKKyAqIDIwMDAtMDUtMTk6ICBUaG9tYXMgU2FpbGVyCisgKgkJRml4ZWQgRkVBVFVSRV9VTklUIHRoaW5rb3MgZm91bmQgdGhhbmtzIHRvIHRoZSBLQyBUZWNobm9sb2d5CisgKiAgICAgICAgICAgICAgWHRlbmQgZGV2aWNlLiBCYXNpY2FsbHkgdGhlIGRyaXZlciB0cmVhdGVkIEZFQVRVUkVfVU5JVCdzIHNvdXJjZWQKKyAqICAgICAgICAgICAgICBieSBtb25vIHRlcm1pbmFscyBhcyBzdGVyZW8uCisgKiAyMDAwLTA1LTIwOiAgVGhvbWFzIFNhaWxlcgorICoJCVNFTEVDVE9SIHN1cHBvcnQgKGFuZCB0aHVzIHNlbGVjdGluZyByZWNvcmQgY2hhbm5lbHMgZnJvbSB0aGUgbWl4ZXIpLgorICogICAgICAgICAgICAgIFNvbWV3aGF0IHBlY3VsaWFyIGR1ZSB0byBPU1MgaW50ZXJmYWNlIGxpbWl0YXRpb25zLiBPbmx5IHdvcmtzCisgKiAgICAgICAgICAgICAgZm9yIGNoYW5uZWxzIHdoZXJlIGEgInNsaWRlciIgaXMgYWxyZWFkeSBpbiBmcm9udCBvZiBpdCAoaS5lLgorICogICAgICAgICAgICAgIGEgTUlYRVIgdW5pdCBvciBhIEZFQVRVUkUgdW5pdCB3aXRoIHZvbHVtZSBjYXBhYmlsaXR5KS4KKyAqIDIwMDAtMTEtMjY6ICBUaG9tYXMgU2FpbGVyCisgKiAgICAgICAgICAgICAgV29ya2Fyb3VuZCBmb3IgRGFsbGFzIERTNDIwMS4gVGhlIERTNDIwMSB1c2VzIFBDTTggYXMgZm9ybWF0IHRhZyBmb3IKKyAqICAgICAgICAgICAgICBpdHMgOCBiaXQgbW9kZXMsIGJ1dCBleHBlY3RzIHNpZ25lZCBkYXRhIChhbmQgc2hvdWxkIHRoZXJlZm9yZSBoYXZlIHVzZWQgUENNKS4KKyAqIDIwMDEtMDMtMTA6ICBUaG9tYXMgU2FpbGVyCisgKiAgICAgICAgICAgICAgcHJvdmlkZSBhYnMgZnVuY3Rpb24sIHByZXZlbnQgcGlja2luZyB1cCBhIGJvZ3VzIGtlcm5lbCBtYWNybworICogICAgICAgICAgICAgIGZvciBhYnMuIEJ1ZyByZXBvcnQgYnkgQW5kcmV3IE1vcnRvbiA8YW5kcmV3bUB1b3cuZWR1LmF1PgorICogMjAwMS0wNi0xNjogIEJyeWNlIE5lc2JpdHQgPGJyeWNlQG9idmlvdXNseS5jb20+CisgKiAgICAgICAgICAgICAgRml4IFNORENUTF9EU1BfU1RFUkVPIEFQSSB2aW9sYXRpb24KKyAqIDIwMDMtMDQtMDg6CU9saXZlciBOZXVrdW0gKG9saXZlckBuZXVrdW0ubmFtZSk6CisgKgkJU2V0dGluZyBhIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSBieSB1c2Jjb3JlIGFuZCBtdXN0IG5vdCBiZSBvdmVycmlkZGVuCisgKiAyMDA0LTAyLTI3OiAgV29ya2Fyb3VuZCBmb3IgYnJva2VuIHN5bmNoIGRlc2NyaXB0b3JzCisgKiAyMDA0LTAzLTA3OglBbGFuIFN0ZXJuIDxzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1PgorICoJCUFkZCB1c2JfaWZudW1fdG9faWYoKSBhbmQgdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKCkgc3VwcG9ydC4KKyAqCQlVc2UgdGhlIGluLW1lbW9yeSBkZXNjcmlwdG9ycyBpbnN0ZWFkIG9mIHJlYWRpbmcgdGhlbSBmcm9tIHRoZSBkZXZpY2UuCisgKiAKKyAqLworCisvKgorICogU3RyYXRlZ3k6CisgKgorICogQWxhbiBDb3ggYW5kIFRob21hcyBTYWlsZXIgYXJlIHN0YXJ0aW5nIHRvIGRpZyBhdCBvcHBvc2l0ZSBlbmRzIGFuZAorICogYXJlIGhvcGluZyB0byBtZWV0IGluIHRoZSBtaWRkbGUsIGp1c3QgbGlrZSB0dW5uZWwgZGlnZ2VycyA6KQorICogQWxhbiB0YWNrbGVzIHRoZSBkZXNjcmlwdG9yIHBhcnNpbmcsIFRob21hcyB0aGUgYWN0dWFsIGRhdGEgSU8gYW5kIHRoZQorICogT1NTIGNvbXBhdGlibGUgaW50ZXJmYWNlLgorICoKKyAqIERhdGEgSU8gaW1wbGVtZW50YXRpb24gaXNzdWVzCisgKgorICogQSBtbWFwJ2FibGUgcmluZyBidWZmZXIgcGVyIGRpcmVjdGlvbiBpcyBpbXBsZW1lbnRlZCwgYmVjYXVzZQorICogYWxtb3N0IGV2ZXJ5IE9TUyBhcHAgZXhwZWN0cyBpdC4gSXQgaXMgaG93ZXZlciBpbXByYWN0aWNhbCB0bworICogdHJhbnNtaXQvcmVjZWl2ZSBVU0IgZGF0YSBkaXJlY3RseSBpbnRvIGFuZCBvdXQgb2YgdGhlIHJpbmcgYnVmZmVyLAorICogZHVlIHRvIGFsaWdubWVudCBhbmQgc3luY2hyb25pc2F0aW9uIGlzc3Vlcy4gSW5zdGVhZCwgdGhlIHJpbmcgYnVmZmVyCisgKiBmZWVkcyBhIGNvbnN0YW50IHRpbWUgZGVsYXkgbGluZSB0aGF0IGhhbmRsZXMgdGhlIFVTQiBpc3N1ZXMuCisgKgorICogTm93IHdlIGZpcnN0IHRyeSB0byBmaW5kIGFuIGFsdGVybmF0ZSBzZXR0aW5nIHRoYXQgZXhhY3RseSBtYXRjaGVzCisgKiB0aGUgc2FtcGxlIGZvcm1hdCByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIuIElmIHdlIGZpbmQgb25lLCB3ZSBkbyBub3QKKyAqIG5lZWQgdG8gcGVyZm9ybSBhbnkgc2FtcGxlIHJhdGUgY29udmVyc2lvbnMuIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nCisgKiBhbHRzZXR0aW5nLCB3ZSBjaG9vc2UgdGhlIGNsb3Nlc3Qgb25lIGFuZCBwZXJmb3JtIHNhbXBsZSBmb3JtYXQKKyAqIGNvbnZlcnNpb25zLiBXZSBuZXZlciBkbyBzYW1wbGUgcmF0ZSBjb252ZXJzaW9uOyB0aGVzZSBhcmUgdG9vCisgKiBleHBlbnNpdmUgdG8gYmUgcGVyZm9ybWVkIGluIHRoZSBrZXJuZWwuCisgKgorICogQ3VycmVudCBzdGF0dXM6IG5vIGtub3duIEhDRC1zcGVjaWZpYyBpc3N1ZXMuCisgKgorICogR2VuZXJhbGx5OiBEdWUgdG8gdGhlIGJyb2tlbm5lc3Mgb2YgdGhlIEF1ZGlvIENsYXNzIHNwZWMKKyAqIGl0IHNlZW1zIGdlbmVyYWxseSBpbXBvc3NpYmxlIHRvIHdyaXRlIGEgZ2VuZXJpYyBBdWRpbyBDbGFzcyBkcml2ZXIsCisgKiBzbyBhIHJlYXNvbmFibGUgZHJpdmVyIHNob3VsZCBpbXBsZW1lbnQgdGhlIGZlYXR1cmVzIHRoYXQgYXJlIGFjdHVhbGx5CisgKiB1c2VkLgorICoKKyAqIFBhcnNpbmcgaW1wbGVtZW50YXRpb24gaXNzdWVzCisgKgorICogT25lIGNhbm5vdCByZWFzb25hYmx5IHBhcnNlIHRoZSBBdWRpb0NsYXNzIGRlc2NyaXB0b3JzIGxpbmVhcmx5LgorICogVGhlcmVmb3JlIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGZlYXR1cmVzIHJvdXRpbmVzIHRvIGxvb2sKKyAqIGZvciBhIHNwZWNpZmljIGRlc2NyaXB0b3IgaW4gdGhlIGRlc2NyaXB0b3IgbGlzdC4KKyAqCisgKiBIb3cgZG9lcyB0aGUgcGFyc2luZyB3b3JrPyBGaXJzdCwgYWxsIGludGVyZmFjZXMgYXJlIHNlYXJjaGVkCisgKiBmb3IgYW4gQXVkaW9Db250cm9sIGNsYXNzIGludGVyZmFjZS4gSWYgZm91bmQsIHRoZSBjb25maWcgZGVzY3JpcHRvcgorICogdGhhdCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaXMgc2VhcmNoZWQgYW5kCisgKiB0aGUgSEVBREVSIGRlc2NyaXB0b3IgaXMgZm91bmQuIEl0IGNvbnRhaW5zIGEgbGlzdCBvZgorICogYWxsIEF1ZGlvU3RyZWFtaW5nIGFuZCBNSURJU3RyZWFtaW5nIGRldmljZXMuIFRoaXMgbGlzdCBpcyB0aGVuIHdhbGtlZCwKKyAqIGFuZCBhbGwgQXVkaW9TdHJlYW1pbmcgaW50ZXJmYWNlcyBhcmUgY2xhc3NpZmllZCBpbnRvIGlucHV0IGFuZCBvdXRwdXQKKyAqIGludGVyZmFjZXMgKGFjY29yZGluZyB0byB0aGUgZW5kcG9pbnQwIGRpcmVjdGlvbiBpbiBhbHRzZXR0aW5nMSkgKE1JRElTdHJlYW1pbmcKKyAqIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkKS4gVGhlIGlucHV0ICYgb3V0cHV0IGxpc3QgaXMgdGhlbiB1c2VkCisgKiB0byBncm91cCBpbnB1dHMgYW5kIG91dHB1dHMgdG9nZXRoZXIgYW5kIGlzc3VlZCBwYWlyd2lzZSB0byB0aGUKKyAqIEF1ZGlvU3RyZWFtaW5nIGNsYXNzIHBhcnNlci4gRmluYWxseSwgYWxsIE9VVFBVVF9URVJNSU5BTCBkZXNjcmlwdG9ycworICogYXJlIHdhbGtlZCBhbmQgaXNzdWVkIHRvIHRoZSBtaXhlciBjb25zdHJ1Y3Rpb24gcm91dGluZS4KKyAqCisgKiBUaGUgQXVkaW9TdHJlYW1pbmcgcGFyc2VyIHNpbXBseSBlbnVtZXJhdGVzIGFsbCBhbHRzZXR0aW5ncyBiZWxvbmdpbmcKKyAqIHRvIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlLiBJdCBsb29rcyBmb3IgQVNfR0VORVJBTCBhbmQgRk9STUFUX1RZUEUKKyAqIGNsYXNzIHNwZWNpZmljIGRlc2NyaXB0b3JzIHRvIGV4dHJhY3QgdGhlIHNhbXBsZSBmb3JtYXQvc2FtcGxlIHJhdGUKKyAqIGRhdGEuIE9ubHkgc2FtcGxlIGZvcm1hdCB0eXBlcyBQQ00gYW5kIFBDTTggYXJlIHN1cHBvcnRlZCByaWdodCBub3csIGFuZAorICogb25seSBGT1JNQVRfVFlQRV9JIGlzIGhhbmRsZWQuIFRoZSBpc29jaHJvbm91cyBkYXRhIGVuZHBvaW50IG5lZWRzIHRvCisgKiBiZSB0aGUgZmlyc3QgZW5kcG9pbnQgb2YgdGhlIGludGVyZmFjZSwgYW5kIHRoZSBvcHRpb25hbCBzeW5jaHJvbmlzYXRpb24KKyAqIGlzb2Nocm9ub3VzIGVuZHBvaW50IHRoZSBzZWNvbmQgb25lLgorICoKKyAqIE1peGVyIGNvbnN0cnVjdGlvbiB3b3JrcyBhcyBmb2xsb3dzOiBUaGUgdmFyaW91cyBURVJNSU5BTCBhbmQgVU5JVAorICogZGVzY3JpcHRvcnMgc3BhbiBhIHRyZWUgZnJvbSB0aGUgcm9vdCAoT1VUUFVUX1RFUk1JTkFMKSB0aHJvdWdoIHRoZQorICogaW50ZXJtZWRpYXRlIG5vZGVzIChVTklUcykgdG8gdGhlIGxlYXZlcyAoSU5QVVRfVEVSTUlOQUwpLiBXZSB3YWxrCisgKiB0aGF0IHRyZWUgaW4gYSBkZXB0aCBmaXJzdCBtYW5uZXIuIEZFQVRVUkVfVU5JVHMgbWF5IGNvbnRyaWJ1dGUgdm9sdW1lLAorICogYmFzcyBhbmQgdHJlYmxlIHNsaWRlcnMgdG8gdGhlIG1peGVyLCBNSVhFUl9VTklUcyB2b2x1bWUgc2xpZGVycy4KKyAqIFRoZSB0ZXJtaW5hbCB0eXBlIGVuY29kZWQgaW4gdGhlIElOUFVUX1RFUk1JTkFMcyBmZWVkcyBhIGhldXJpc3RpYworICogdG8gZGV0ZXJtaW5lICJtZWFuaW5nZnVsIiBPU1Mgc2xpZGVyIG51bWJlcnMsIGhvd2V2ZXIgd2Ugd2lsbCBzZWUKKyAqIGhvdyB3ZWxsIHRoaXMgd29ya3MgaW4gcHJhY3RpY2UuIE90aGVyIGZlYXR1cmVzIGFyZSBub3QgdXNlZCBhdCB0aGUKKyAqIG1vbWVudCwgdGhleSBzZWVtIGxlc3Mgb2Z0ZW4gdXNlZC4gQWxzbywgaXQgc2VlbXMgZGlmZmljdWx0IGF0IGxlYXN0CisgKiB0byBjb25zdHJ1Y3QgcmVjb3JkaW5nIHNvdXJjZSBzd2l0Y2hlcyBmcm9tIFNFTEVDVE9SX1VOSVRzLCBidXQKKyAqIHNpbmNlIHRoZXJlIGFyZSBub3QgbWFueSBVU0IgQURDJ3MgYXZhaWxhYmxlLCB3ZSBsZWF2ZSB0aGF0IGZvciBsYXRlci4KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc291bmQuaD4KKyNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgImF1ZGlvLmgiCisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjAuMCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4sIFRob21hcyBTYWlsZXIgKHNhaWxlckBpZmUuZWUuZXRoei5jaCkiCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgQXVkaW8gQ2xhc3MgZHJpdmVyIgorCisjZGVmaW5lIEFVRElPX0RFQlVHIDEKKworI2RlZmluZSBTTkRfREVWX0RTUDE2ICAgNQorCisjZGVmaW5lIGRwcmludGsoeCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBMaW5rZWQgbGlzdCBvZiBhbGwgYXVkaW8gZGV2aWNlcy4uLgorICovCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBhdWRpb2RldnMgPSBMSVNUX0hFQURfSU5JVChhdWRpb2RldnMpOworc3RhdGljIERFQ0xBUkVfTVVURVgob3Blbl9zZW0pOworCisvKgorICogd2FpdCBxdWV1ZSBmb3IgcHJvY2Vzc2VzIHdhbnRpbmcgdG8gb3BlbiBhbiBVU0IgYXVkaW8gZGV2aWNlCisgKi8KK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChvcGVuX3dhaXQpOworCisKKyNkZWZpbmUgTUFYRk9STUFUUyAgICAgICAgTUFYX0FMVAorI2RlZmluZSBETUFCVUZTSElGVCAgICAgICAxNyAgLyogMTI4ayB3b3J0aCBvZiBETUEgYnVmZmVyICovCisjZGVmaW5lIE5SU0dCVUYgICAgICAgICAgICgxVTw8KERNQUJVRlNISUZULVBBR0VfU0hJRlQpKQorCisvKgorICogVGhpcyBpbmZsdWVuY2VzOgorICogLSBMYXRlbmN5CisgKiAtIEludGVycnVwdCByYXRlCisgKiAtIFN5bmNocm9uaXNhdGlvbiBiZWhhdmlvdXIKKyAqIERvbid0IHRvdWNoIHRoaXMgaWYgeW91IGRvbid0IHVuZGVyc3RhbmQgYWxsIG9mIHRoZSBhYm92ZS4KKyAqLworI2RlZmluZSBERVNDRlJBTUVTICA1CisjZGVmaW5lIFNZTkNGUkFNRVMgIERFU0NGUkFNRVMKKworI2RlZmluZSBNSVhGTEdfU1RFUkVPSU4gICAxCisjZGVmaW5lIE1JWEZMR19TVEVSRU9PVVQgIDIKKworc3RydWN0IG1peGVyY2hhbm5lbCB7CisJX191MTYgdmFsdWU7CisJX191MTYgb3NzY2hhbm5lbDsgIC8qIG51bWJlciBvZiB0aGUgT1NTIGNoYW5uZWwgKi8KKwlfX3MxNiBtaW52YWwsIG1heHZhbDsKKwlfX3UxNiBzbGN0dW5pdGlkOworCV9fdTggdW5pdGlkOworCV9fdTggc2VsZWN0b3I7CisJX191OCBjaG51bTsKKwlfX3U4IGZsYWdzOworfTsKKworc3RydWN0IGF1ZGlvZm9ybWF0IHsKKwl1bnNpZ25lZCBpbnQgZm9ybWF0OworCXVuc2lnbmVkIGludCBzcmF0ZWxvOworCXVuc2lnbmVkIGludCBzcmF0ZWhpOworCXVuc2lnbmVkIGNoYXIgYWx0c2V0dGluZzsKKwl1bnNpZ25lZCBjaGFyIGF0dHJpYnV0ZXM7Cit9OworCitzdHJ1Y3QgZG1hYnVmIHsKKwkvKiBidWZmZXIgZGF0YSBmb3JtYXQgKi8KKwl1bnNpZ25lZCBpbnQgZm9ybWF0OworCXVuc2lnbmVkIGludCBzcmF0ZTsKKwkvKiBwaHlzaWNhbCBidWZmZXIgKi8KKwl1bnNpZ25lZCBjaGFyICpzZ2J1ZltOUlNHQlVGXTsKKwl1bnNpZ25lZCBidWZzaXplOworCXVuc2lnbmVkIG51bWZyYWc7CisJdW5zaWduZWQgZnJhZ3NoaWZ0OworCXVuc2lnbmVkIHdycHRyLCByZHB0cjsKKwl1bnNpZ25lZCB0b3RhbF9ieXRlczsKKwlpbnQgY291bnQ7CisJdW5zaWduZWQgZXJyb3I7IC8qIG92ZXIvdW5kZXJydW4gKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCS8qIHJlZHVuZGFudCwgYnV0IG1ha2VzIGNhbGN1bGF0aW9ucyBlYXNpZXIgKi8KKwl1bnNpZ25lZCBmcmFnc2l6ZTsKKwl1bnNpZ25lZCBkbWFzaXplOworCS8qIE9TUyBzdHVmZiAqLworCXVuc2lnbmVkIG1hcHBlZDoxOworCXVuc2lnbmVkIHJlYWR5OjE7CisJdW5zaWduZWQgb3NzZnJhZ3NoaWZ0OworCWludCBvc3NtYXhmcmFnczsKKwl1bnNpZ25lZCBzdWJkaXZpc2lvbjsKK307CisKK3N0cnVjdCB1c2JfYXVkaW9fc3RhdGU7CisKKyNkZWZpbmUgRkxHX1VSQjBSVU5OSU5HICAgMQorI2RlZmluZSBGTEdfVVJCMVJVTk5JTkcgICAyCisjZGVmaW5lIEZMR19TWU5DMFJVTk5JTkcgIDQKKyNkZWZpbmUgRkxHX1NZTkMxUlVOTklORyAgOAorI2RlZmluZSBGTEdfUlVOTklORyAgICAgIDE2CisjZGVmaW5lIEZMR19DT05ORUNURUQgICAgMzIKKworc3RydWN0IG15X2RhdGFfdXJiIHsKKwlzdHJ1Y3QgdXJiICp1cmI7Cit9OworCitzdHJ1Y3QgbXlfc3luY191cmIgeworCXN0cnVjdCB1cmIgKnVyYjsKK307CisKKworc3RydWN0IHVzYl9hdWRpb2RldiB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnN0YXRlOworCQorCS8qIHNvdW5kY29yZSBzdHVmZiAqLworCWludCBkZXZfYXVkaW87CisKKwkvKiB3YXZlIHN0dWZmICovCisJbW9kZV90IG9wZW5fbW9kZTsKKwlzcGlubG9ja190IGxvY2s7ICAgICAgICAgLyogRE1BIGJ1ZmZlciBhY2Nlc3Mgc3BpbmxvY2sgKi8KKworCXN0cnVjdCB1c2JpbiB7CisJCWludCBpbnRlcmZhY2U7ICAgICAgICAgICAvKiBJbnRlcmZhY2UgbnVtYmVyLCAtMSBtZWFucyBub3QgdXNlZCAqLworCQl1bnNpZ25lZCBpbnQgZm9ybWF0OyAgICAgLyogVVNCIGRhdGEgZm9ybWF0ICovCisJCXVuc2lnbmVkIGludCBkYXRhcGlwZTsgICAvKiB0aGUgZGF0YSBpbnB1dCBwaXBlICovCisJCXVuc2lnbmVkIGludCBzeW5jcGlwZTsgICAvKiB0aGUgc3luY2hyb25pc2F0aW9uIHBpcGUgLSAwIGZvciBhbnl0aGluZyBidXQgYWRhcHRpdmUgSU4gbW9kZSAqLworCQl1bnNpZ25lZCBpbnQgc3luY2ludGVydmFsOyAgLyogUCBmb3IgYWRhcHRpdmUgSU4gbW9kZSwgMCBvdGhlcndpc2UgKi8KKwkJdW5zaWduZWQgaW50IGZyZXFuOyAgICAgIC8qIG5vbWluYWwgc2FtcGxpbmcgcmF0ZSBpbiBVU0IgZm9ybWF0LCBpLmUuIGZzLzEwMDAgaW4gUTEwLjE0ICovCisJCXVuc2lnbmVkIGludCBmcmVxbWF4OyAgICAvKiBtYXhpbXVtIHNhbXBsaW5nIHJhdGUsIHVzZWQgZm9yIGJ1ZmZlciBtYW5hZ2VtZW50ICovCisJCXVuc2lnbmVkIGludCBwaGFzZTsgICAgICAvKiBwaGFzZSBhY2N1bXVsYXRvciAqLworCQl1bnNpZ25lZCBpbnQgZmxhZ3M7ICAgICAgLyogc2VlIEZMR18gZGVmaW5lcyAqLworCQkKKwkJc3RydWN0IG15X2RhdGFfdXJiIGR1cmJbMl07ICAvKiBJU08gZGVzY3JpcHRvcnMgZm9yIHRoZSBkYXRhIGVuZHBvaW50ICovCisJCXN0cnVjdCBteV9zeW5jX3VyYiBzdXJiWzJdOyAgLyogSVNPIHN5bmMgcGlwZSBkZXNjcmlwdG9yIGlmIG5lZWRlZCAqLworCQkKKwkJc3RydWN0IGRtYWJ1ZiBkbWE7CisJfSB1c2JpbjsKKworCXN0cnVjdCB1c2JvdXQgeworCQlpbnQgaW50ZXJmYWNlOyAgICAgICAgICAgLyogSW50ZXJmYWNlIG51bWJlciwgLTEgbWVhbnMgbm90IHVzZWQgKi8KKwkJdW5zaWduZWQgaW50IGZvcm1hdDsgICAgIC8qIFVTQiBkYXRhIGZvcm1hdCAqLworCQl1bnNpZ25lZCBpbnQgZGF0YXBpcGU7ICAgLyogdGhlIGRhdGEgaW5wdXQgcGlwZSAqLworCQl1bnNpZ25lZCBpbnQgc3luY3BpcGU7ICAgLyogdGhlIHN5bmNocm9uaXNhdGlvbiBwaXBlIC0gMCBmb3IgYW55dGhpbmcgYnV0IGFzeW5jaHJvbm91cyBPVVQgbW9kZSAqLworCQl1bnNpZ25lZCBpbnQgc3luY2ludGVydmFsOyAgLyogUCBmb3IgYXN5bmNocm9ub3VzIE9VVCBtb2RlLCAwIG90aGVyd2lzZSAqLworCQl1bnNpZ25lZCBpbnQgZnJlcW47ICAgICAgLyogbm9taW5hbCBzYW1wbGluZyByYXRlIGluIFVTQiBmb3JtYXQsIGkuZS4gZnMvMTAwMCBpbiBRMTAuMTQgKi8KKwkJdW5zaWduZWQgaW50IGZyZXFtOyAgICAgIC8qIG1vbWVudGFyeSBzYW1wbGluZyByYXRlIGluIFVTQiBmb3JtYXQsIGkuZS4gZnMvMTAwMCBpbiBRMTAuMTQgKi8KKwkJdW5zaWduZWQgaW50IGZyZXFtYXg7ICAgIC8qIG1heGltdW0gc2FtcGxpbmcgcmF0ZSwgdXNlZCBmb3IgYnVmZmVyIG1hbmFnZW1lbnQgKi8KKwkJdW5zaWduZWQgaW50IHBoYXNlOyAgICAgIC8qIHBoYXNlIGFjY3VtdWxhdG9yICovCisJCXVuc2lnbmVkIGludCBmbGFnczsgICAgICAvKiBzZWUgRkxHXyBkZWZpbmVzICovCisKKwkJc3RydWN0IG15X2RhdGFfdXJiIGR1cmJbMl07ICAvKiBJU08gZGVzY3JpcHRvcnMgZm9yIHRoZSBkYXRhIGVuZHBvaW50ICovCisJCXN0cnVjdCBteV9zeW5jX3VyYiBzdXJiWzJdOyAgLyogSVNPIHN5bmMgcGlwZSBkZXNjcmlwdG9yIGlmIG5lZWRlZCAqLworCQkKKwkJc3RydWN0IGRtYWJ1ZiBkbWE7CisJfSB1c2JvdXQ7CisKKworCXVuc2lnbmVkIGludCBudW1mbXRpbiwgbnVtZm10b3V0OworCXN0cnVjdCBhdWRpb2Zvcm1hdCBmbXRpbltNQVhGT1JNQVRTXTsKKwlzdHJ1Y3QgYXVkaW9mb3JtYXQgZm10b3V0W01BWEZPUk1BVFNdOworfTsgIAorCitzdHJ1Y3QgdXNiX21peGVyZGV2IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqc3RhdGU7CisKKwkvKiBzb3VuZGNvcmUgc3R1ZmYgKi8KKwlpbnQgZGV2X21peGVyOworCisJdW5zaWduZWQgY2hhciBpZmFjZTsgIC8qIGludGVyZmFjZSBudW1iZXIgb2YgdGhlIEF1ZGlvQ29udHJvbCBpbnRlcmZhY2UgKi8KKworCS8qIFVTQiBmb3JtYXQgZGVzY3JpcHRpb25zICovCisJdW5zaWduZWQgaW50IG51bWNoLCBtb2RjbnQ7CisKKwkvKiBtaXhjaCBpcyBsYXN0IGFuZCBnZXRzIGFsbG9jYXRlZCBkeW5hbWljYWxseSAqLworCXN0cnVjdCBtaXhlcmNoYW5uZWwgY2hbMF07Cit9OworCitzdHJ1Y3QgdXNiX2F1ZGlvX3N0YXRlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGF1ZGlvZGV2OworCisJLyogVVNCIGRldmljZSAqLworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGF1ZGlvbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG1peGVybGlzdDsKKworCXVuc2lnbmVkIGNvdW50OyAgLyogdXNhZ2UgY291bnRlcjsgTk9URTogdGhlIHVzYiBzdGFjayBpcyBhbHNvIGNvbnNpZGVyZWQgYSB1c2VyICovCit9OworCisvKiBwcml2YXRlIGF1ZGlvIGZvcm1hdCBleHRlbnNpb25zICovCisjZGVmaW5lIEFGTVRfU1RFUkVPICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEFGTVRfSVNTVEVSRU8oeCkgICAoKHgpICYgQUZNVF9TVEVSRU8pCisjZGVmaW5lIEFGTVRfSVMxNkJJVCh4KSAgICAoKHgpICYgKEFGTVRfUzE2X0xFfEFGTVRfUzE2X0JFfEFGTVRfVTE2X0xFfEFGTVRfVTE2X0JFKSkKKyNkZWZpbmUgQUZNVF9JU1VOU0lHTkVEKHgpICgoeCkgJiAoQUZNVF9VOHxBRk1UX1UxNl9MRXxBRk1UX1UxNl9CRSkpCisjZGVmaW5lIEFGTVRfQllURVNTSElGVCh4KSAoKEFGTVRfSVNTVEVSRU8oeCkgPyAxIDogMCkgKyAoQUZNVF9JUzE2QklUKHgpID8gMSA6IDApKQorI2RlZmluZSBBRk1UX0JZVEVTKHgpICAgICAgKDE8PEFGTVRfQllURVNTSEZJVCh4KSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbGQyKHVuc2lnbmVkIGludCB4KQoreworCXVuc2lnbmVkIHIgPSAwOworCQorCWlmICh4ID49IDB4MTAwMDApIHsKKwkJeCA+Pj0gMTY7CisJCXIgKz0gMTY7CisJfQorCWlmICh4ID49IDB4MTAwKSB7CisJCXggPj49IDg7CisJCXIgKz0gODsKKwl9CisJaWYgKHggPj0gMHgxMCkgeworCQl4ID4+PSA0OworCQlyICs9IDQ7CisJfQorCWlmICh4ID49IDQpIHsKKwkJeCA+Pj0gMjsKKwkJciArPSAyOworCX0KKwlpZiAoeCA+PSAyKQorCQlyKys7CisJcmV0dXJuIHI7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogT1NTIGNvbXBhdGlibGUgcmluZyBidWZmZXIgbWFuYWdlbWVudC4gVGhlIHJpbmcgYnVmZmVyIG1heSBiZSBtbWFwJ2VkIGludG8KKyAqIGFuIGFwcGxpY2F0aW9uIGFkZHJlc3Mgc3BhY2UuCisgKgorICogSSBmaXJzdCB1c2VkIHRoZSBydm1hbGxvYyBzdHVmZiBjb3BpZWQgZnJvbSBidHR2LiBBbGFuIENveCBkaWQgbm90IGxpa2UgaXQsIHNvCisgKiB3ZSBub3cgdXNlIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIGEgc2luZ2xlIHBhZ2UgZWFjaC4gVGhpcyBzYXZlcyB1cyB0aGUKKyAqIGtlcm5lbCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMsIGJ1dCB3ZSBoYXZlIHRvIGRvIGEgcGFnZSB0YWJsZSBhbGlrZSBtZWNoYW5pc20KKyAqICh0aG91Z2ggb25seSBvbmUgaW5kaXJlY3Rpb24pIGluIHNvZnR3YXJlLgorICovCisKK3N0YXRpYyB2b2lkIGRtYWJ1Zl9yZWxlYXNlKHN0cnVjdCBkbWFidWYgKmRiKQoreworCXVuc2lnbmVkIGludCBucjsKKwl2b2lkICpwOworCisJZm9yKG5yID0gMDsgbnIgPCBOUlNHQlVGOyBucisrKSB7CisJCWlmICghKHAgPSBkYi0+c2didWZbbnJdKSkKKwkJCWNvbnRpbnVlOworCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UocCkpOworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcCk7CisJCWRiLT5zZ2J1Zltucl0gPSBOVUxMOworCX0KKwlkYi0+bWFwcGVkID0gZGItPnJlYWR5ID0gMDsKK30KKworc3RhdGljIGludCBkbWFidWZfaW5pdChzdHJ1Y3QgZG1hYnVmICpkYikKK3sKKwl1bnNpZ25lZCBpbnQgbnIsIGJ5dGVwZXJzZWMsIGJ1ZnM7CisJdm9pZCAqcDsKKworCS8qIGluaXRpYWxpemUgc29tZSBmaWVsZHMgKi8KKwlkYi0+cmRwdHIgPSBkYi0+d3JwdHIgPSBkYi0+dG90YWxfYnl0ZXMgPSBkYi0+Y291bnQgPSBkYi0+ZXJyb3IgPSAwOworCS8qIGNhbGN1bGF0ZSByZXF1aXJlZCBidWZmZXIgc2l6ZSAqLworCWJ5dGVwZXJzZWMgPSBkYi0+c3JhdGUgPDwgQUZNVF9CWVRFU1NISUZUKGRiLT5mb3JtYXQpOworCWJ1ZnMgPSAxVSA8PCBETUFCVUZTSElGVDsKKwlpZiAoZGItPm9zc2ZyYWdzaGlmdCkgeworCQlpZiAoKDEwMDAgPDwgZGItPm9zc2ZyYWdzaGlmdCkgPCBieXRlcGVyc2VjKQorCQkJZGItPmZyYWdzaGlmdCA9IGxkMihieXRlcGVyc2VjLzEwMDApOworCQllbHNlCisJCQlkYi0+ZnJhZ3NoaWZ0ID0gZGItPm9zc2ZyYWdzaGlmdDsKKwl9IGVsc2UgeworCQlkYi0+ZnJhZ3NoaWZ0ID0gbGQyKGJ5dGVwZXJzZWMvMTAwLyhkYi0+c3ViZGl2aXNpb24gPyBkYi0+c3ViZGl2aXNpb24gOiAxKSk7CisJCWlmIChkYi0+ZnJhZ3NoaWZ0IDwgMykKKwkJCWRiLT5mcmFnc2hpZnQgPSAzOworCX0KKwlkYi0+bnVtZnJhZyA9IGJ1ZnMgPj4gZGItPmZyYWdzaGlmdDsKKwl3aGlsZSAoZGItPm51bWZyYWcgPCA0ICYmIGRiLT5mcmFnc2hpZnQgPiAzKSB7CisJCWRiLT5mcmFnc2hpZnQtLTsKKwkJZGItPm51bWZyYWcgPSBidWZzID4+IGRiLT5mcmFnc2hpZnQ7CisJfQorCWRiLT5mcmFnc2l6ZSA9IDEgPDwgZGItPmZyYWdzaGlmdDsKKwlpZiAoZGItPm9zc21heGZyYWdzID49IDQgJiYgZGItPm9zc21heGZyYWdzIDwgZGItPm51bWZyYWcpCisJCWRiLT5udW1mcmFnID0gZGItPm9zc21heGZyYWdzOworCWRiLT5kbWFzaXplID0gZGItPm51bWZyYWcgPDwgZGItPmZyYWdzaGlmdDsKKwlmb3IobnIgPSAwOyBuciA8IE5SU0dCVUY7IG5yKyspIHsKKwkJaWYgKCFkYi0+c2didWZbbnJdKSB7CisJCQlwID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXApCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQlkYi0+c2didWZbbnJdID0gcDsKKwkJCVNldFBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UocCkpOworCQl9CisJCW1lbXNldChkYi0+c2didWZbbnJdLCBBRk1UX0lTVU5TSUdORUQoZGItPmZvcm1hdCkgPyAweDgwIDogMCwgUEFHRV9TSVpFKTsKKwkJaWYgKChuciA8PCBQQUdFX1NISUZUKSA+PSBkYi0+ZG1hc2l6ZSkKKwkJCWJyZWFrOworCX0KKwlkYi0+YnVmc2l6ZSA9IG5yIDw8IFBBR0VfU0hJRlQ7CisJZGItPnJlYWR5ID0gMTsKKwlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogZG1hYnVmX2luaXQgYnl0ZXBlcnNlYyAlZCBidWZzICVkIG9zc2ZyYWdzaGlmdCAlZCBvc3NtYXhmcmFncyAlZCAiCisJICAgICAgICAgImZyYWdzaGlmdCAlZCBmcmFnc2l6ZSAlZCBudW1mcmFnICVkIGRtYXNpemUgJWQgYnVmc2l6ZSAlZCBmbXQgMHgleCBzcmF0ZSAlZFxuIiwKKwkgICAgICAgICBieXRlcGVyc2VjLCBidWZzLCBkYi0+b3NzZnJhZ3NoaWZ0LCBkYi0+b3NzbWF4ZnJhZ3MsIGRiLT5mcmFnc2hpZnQsIGRiLT5mcmFnc2l6ZSwKKwkgICAgICAgICBkYi0+bnVtZnJhZywgZGItPmRtYXNpemUsIGRiLT5idWZzaXplLCBkYi0+Zm9ybWF0LCBkYi0+c3JhdGUpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbWFidWZfbW1hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGRtYWJ1ZiAqZGIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCkKK3sKKwl1bnNpZ25lZCBpbnQgbnI7CisKKwlpZiAoIWRiLT5yZWFkeSB8fCBkYi0+bWFwcGVkIHx8IChzdGFydCB8IHNpemUpICYgKFBBR0VfU0laRS0xKSB8fCBzaXplID4gZGItPmJ1ZnNpemUpCisJCXJldHVybiAtRUlOVkFMOworCXNpemUgPj49IFBBR0VfU0hJRlQ7CisJZm9yKG5yID0gMDsgbnIgPCBzaXplOyBucisrKQorCQlpZiAoIWRiLT5zZ2J1Zltucl0pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwlkYi0+bWFwcGVkID0gMTsKKwlmb3IobnIgPSAwOyBuciA8IHNpemU7IG5yKyspIHsKKwkJdW5zaWduZWQgbG9uZyBwZm47CisKKwkJcGZuID0gdmlydF90b19waHlzKGRiLT5zZ2J1Zltucl0pID4+IFBBR0VfU0hJRlQ7CisJCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGZuLCBQQUdFX1NJWkUsIHByb3QpKQorCQkJcmV0dXJuIC1FQUdBSU47CisJCXN0YXJ0ICs9IFBBR0VfU0laRTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRtYWJ1Zl9jb3B5aW4oc3RydWN0IGRtYWJ1ZiAqZGIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgaW50IHNpemUpCit7CisJdW5zaWduZWQgaW50IHBncmVtLCByZW07CisKKwlkYi0+dG90YWxfYnl0ZXMgKz0gc2l6ZTsKKwlmb3IgKDs7KSB7CisJCWlmIChzaXplIDw9IDApCisJCQlyZXR1cm47CisJCXBncmVtID0gKCh+ZGItPndycHRyKSAmIChQQUdFX1NJWkUtMSkpICsgMTsKKwkJaWYgKHBncmVtID4gc2l6ZSkKKwkJCXBncmVtID0gc2l6ZTsKKwkJcmVtID0gZGItPmRtYXNpemUgLSBkYi0+d3JwdHI7CisJCWlmIChwZ3JlbSA+IHJlbSkKKwkJCXBncmVtID0gcmVtOworCQltZW1jcHkoKGRiLT5zZ2J1ZltkYi0+d3JwdHIgPj4gUEFHRV9TSElGVF0pICsgKGRiLT53cnB0ciAmIChQQUdFX1NJWkUtMSkpLCBidWZmZXIsIHBncmVtKTsKKwkJc2l6ZSAtPSBwZ3JlbTsKKwkJYnVmZmVyICs9IHBncmVtOworCQlkYi0+d3JwdHIgKz0gcGdyZW07CisJCWlmIChkYi0+d3JwdHIgPj0gZGItPmRtYXNpemUpCisJCQlkYi0+d3JwdHIgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgZG1hYnVmX2NvcHlvdXQoc3RydWN0IGRtYWJ1ZiAqZGIsIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgaW50IHNpemUpCit7CisJdW5zaWduZWQgaW50IHBncmVtLCByZW07CisKKwlkYi0+dG90YWxfYnl0ZXMgKz0gc2l6ZTsKKwlmb3IgKDs7KSB7CisJCWlmIChzaXplIDw9IDApCisJCQlyZXR1cm47CisJCXBncmVtID0gKCh+ZGItPnJkcHRyKSAmIChQQUdFX1NJWkUtMSkpICsgMTsKKwkJaWYgKHBncmVtID4gc2l6ZSkKKwkJCXBncmVtID0gc2l6ZTsKKwkJcmVtID0gZGItPmRtYXNpemUgLSBkYi0+cmRwdHI7CisJCWlmIChwZ3JlbSA+IHJlbSkKKwkJCXBncmVtID0gcmVtOworCQltZW1jcHkoYnVmZmVyLCAoZGItPnNnYnVmW2RiLT5yZHB0ciA+PiBQQUdFX1NISUZUXSkgKyAoZGItPnJkcHRyICYgKFBBR0VfU0laRS0xKSksIHBncmVtKTsKKwkJc2l6ZSAtPSBwZ3JlbTsKKwkJYnVmZmVyICs9IHBncmVtOworCQlkYi0+cmRwdHIgKz0gcGdyZW07CisJCWlmIChkYi0+cmRwdHIgPj0gZGItPmRtYXNpemUpCisJCQlkYi0+cmRwdHIgPSAwOworCX0KK30KKworc3RhdGljIGludCBkbWFidWZfY29weWluX3VzZXIoc3RydWN0IGRtYWJ1ZiAqZGIsIHVuc2lnbmVkIGludCBwdHIsIGNvbnN0IHZvaWQgX191c2VyICpidWZmZXIsIHVuc2lnbmVkIGludCBzaXplKQoreworCXVuc2lnbmVkIGludCBwZ3JlbSwgcmVtOworCisJaWYgKCFkYi0+cmVhZHkgfHwgZGItPm1hcHBlZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZm9yICg7OykgeworCQlpZiAoc2l6ZSA8PSAwKQorCQkJcmV0dXJuIDA7CisJCXBncmVtID0gKCh+cHRyKSAmIChQQUdFX1NJWkUtMSkpICsgMTsKKwkJaWYgKHBncmVtID4gc2l6ZSkKKwkJCXBncmVtID0gc2l6ZTsKKwkJcmVtID0gZGItPmRtYXNpemUgLSBwdHI7CisJCWlmIChwZ3JlbSA+IHJlbSkKKwkJCXBncmVtID0gcmVtOworCQlpZiAoY29weV9mcm9tX3VzZXIoKGRiLT5zZ2J1ZltwdHIgPj4gUEFHRV9TSElGVF0pICsgKHB0ciAmIChQQUdFX1NJWkUtMSkpLCBidWZmZXIsIHBncmVtKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlzaXplIC09IHBncmVtOworCQlidWZmZXIgKz0gcGdyZW07CisJCXB0ciArPSBwZ3JlbTsKKwkJaWYgKHB0ciA+PSBkYi0+ZG1hc2l6ZSkKKwkJCXB0ciA9IDA7CisJfQorfQorCitzdGF0aWMgaW50IGRtYWJ1Zl9jb3B5b3V0X3VzZXIoc3RydWN0IGRtYWJ1ZiAqZGIsIHVuc2lnbmVkIGludCBwdHIsIHZvaWQgX191c2VyICpidWZmZXIsIHVuc2lnbmVkIGludCBzaXplKQoreworCXVuc2lnbmVkIGludCBwZ3JlbSwgcmVtOworCisJaWYgKCFkYi0+cmVhZHkgfHwgZGItPm1hcHBlZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZm9yICg7OykgeworCQlpZiAoc2l6ZSA8PSAwKQorCQkJcmV0dXJuIDA7CisJCXBncmVtID0gKCh+cHRyKSAmIChQQUdFX1NJWkUtMSkpICsgMTsKKwkJaWYgKHBncmVtID4gc2l6ZSkKKwkJCXBncmVtID0gc2l6ZTsKKwkJcmVtID0gZGItPmRtYXNpemUgLSBwdHI7CisJCWlmIChwZ3JlbSA+IHJlbSkKKwkJCXBncmVtID0gcmVtOworCQlpZiAoY29weV90b191c2VyKGJ1ZmZlciwgKGRiLT5zZ2J1ZltwdHIgPj4gUEFHRV9TSElGVF0pICsgKHB0ciAmIChQQUdFX1NJWkUtMSkpLCBwZ3JlbSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJc2l6ZSAtPSBwZ3JlbTsKKwkJYnVmZmVyICs9IHBncmVtOworCQlwdHIgKz0gcGdyZW07CisJCWlmIChwdHIgPj0gZGItPmRtYXNpemUpCisJCQlwdHIgPSAwOworCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICogVVNCIEkvTyBjb2RlLiBXZSBkbyBzYW1wbGUgZm9ybWF0IGNvbnZlcnNpb24gaWYgbmVjZXNzYXJ5CisgKi8KKworc3RhdGljIHZvaWQgdXNiaW5fc3RvcChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcykKK3sKKwlzdHJ1Y3QgdXNiaW4gKnUgPSAmYXMtPnVzYmluOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGksIG5vdGtpbGxlZCA9IDE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwl1LT5mbGFncyAmPSB+RkxHX1JVTk5JTkc7CisJaSA9IHUtPmZsYWdzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJd2hpbGUgKGkgJiAoRkxHX1VSQjBSVU5OSU5HfEZMR19VUkIxUlVOTklOR3xGTEdfU1lOQzBSVU5OSU5HfEZMR19TWU5DMVJVTk5JTkcpKSB7CisJCXNldF9jdXJyZW50X3N0YXRlKG5vdGtpbGxlZCA/IFRBU0tfSU5URVJSVVBUSUJMRSA6IFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVfdGltZW91dCgxKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWkgPSB1LT5mbGFnczsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKG5vdGtpbGxlZCAmJiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJaWYgKGkgJiBGTEdfVVJCMFJVTk5JTkcpCisJCQkJdXNiX2tpbGxfdXJiKHUtPmR1cmJbMF0udXJiKTsKKwkJCWlmIChpICYgRkxHX1VSQjFSVU5OSU5HKQorCQkJCXVzYl9raWxsX3VyYih1LT5kdXJiWzFdLnVyYik7CisJCQlpZiAoaSAmIEZMR19TWU5DMFJVTk5JTkcpCisJCQkJdXNiX2tpbGxfdXJiKHUtPnN1cmJbMF0udXJiKTsKKwkJCWlmIChpICYgRkxHX1NZTkMxUlVOTklORykKKwkJCQl1c2Jfa2lsbF91cmIodS0+c3VyYlsxXS51cmIpOworCQkJbm90a2lsbGVkID0gMDsKKwkJfQorCX0KKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCWlmICh1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKQorCQlrZnJlZSh1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwlpZiAodS0+ZHVyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcikKKwkJa2ZyZWUodS0+ZHVyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJaWYgKHUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIpCisJCWtmcmVlKHUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIpOworCWlmICh1LT5zdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKQorCQlrZnJlZSh1LT5zdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwl1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdS0+ZHVyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IAorCQl1LT5zdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jpbl9yZWxlYXNlKHN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzKQoreworCXVzYmluX3N0b3AoYXMpOworfQorCitzdGF0aWMgdm9pZCB1c2Jpbl9kaXNjKHN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzKQoreworCXN0cnVjdCB1c2JpbiAqdSA9ICZhcy0+dXNiaW47CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJdS0+ZmxhZ3MgJj0gfihGTEdfUlVOTklORyB8IEZMR19DT05ORUNURUQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJdXNiaW5fc3RvcChhcyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnNpb24oY29uc3Qgdm9pZCAqaWJ1ZiwgdW5zaWduZWQgaW50IGlmbXQsIHZvaWQgKm9idWYsIHVuc2lnbmVkIGludCBvZm10LCB2b2lkICp0bXAsIHVuc2lnbmVkIGludCBzY250KQoreworCXVuc2lnbmVkIGludCBjbnQsIGk7CisJX19zMTYgKnNwLCAqc3AyLCBzOworCXVuc2lnbmVkIGNoYXIgKmJwOworCisJY250ID0gc2NudDsKKwlpZiAoQUZNVF9JU1NURVJFTyhpZm10KSkKKwkJY250IDw8PSAxOworCXNwID0gKChfX3MxNiAqKXRtcCkgKyBjbnQ7CisJc3dpdGNoIChpZm10ICYgfkFGTVRfU1RFUkVPKSB7CisJY2FzZSBBRk1UX1U4OgorCQlmb3IgKGJwID0gKCh1bnNpZ25lZCBjaGFyICopaWJ1ZikrY250LCBpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCQlicC0tOworCQkJc3AtLTsKKwkJCSpzcCA9ICgqYnAgXiAweDgwKSA8PCA4OworCQl9CisJCWJyZWFrOworCQkJCisJY2FzZSBBRk1UX1M4OgorCQlmb3IgKGJwID0gKCh1bnNpZ25lZCBjaGFyICopaWJ1ZikrY250LCBpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCQlicC0tOworCQkJc3AtLTsKKwkJCSpzcCA9ICpicCA8PCA4OworCQl9CisJCWJyZWFrOworCQkKKwljYXNlIEFGTVRfVTE2X0xFOgorCQlmb3IgKGJwID0gKCh1bnNpZ25lZCBjaGFyICopaWJ1ZikrMipjbnQsIGkgPSAwOyBpIDwgY250OyBpKyspIHsKKwkJCWJwIC09IDI7CisJCQlzcC0tOworCQkJKnNwID0gKGJwWzBdIHwgKGJwWzFdIDw8IDgpKSBeIDB4ODAwMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQUZNVF9VMTZfQkU6CisJCWZvciAoYnAgPSAoKHVuc2lnbmVkIGNoYXIgKilpYnVmKSsyKmNudCwgaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQkJYnAgLT0gMjsKKwkJCXNwLS07CisJCQkqc3AgPSAoYnBbMV0gfCAoYnBbMF0gPDwgOCkpIF4gMHg4MDAwOworCQl9CisJCWJyZWFrOworCisJY2FzZSBBRk1UX1MxNl9MRToKKwkJZm9yIChicCA9ICgodW5zaWduZWQgY2hhciAqKWlidWYpKzIqY250LCBpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCQlicCAtPSAyOworCQkJc3AtLTsKKwkJCSpzcCA9IGJwWzBdIHwgKGJwWzFdIDw8IDgpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBBRk1UX1MxNl9CRToKKwkJZm9yIChicCA9ICgodW5zaWduZWQgY2hhciAqKWlidWYpKzIqY250LCBpID0gMDsgaSA8IGNudDsgaSsrKSB7CisJCQlicCAtPSAyOworCQkJc3AtLTsKKwkJCSpzcCA9IGJwWzFdIHwgKGJwWzBdIDw8IDgpOworCQl9CisJCWJyZWFrOworCX0KKwlpZiAoIUFGTVRfSVNTVEVSRU8oaWZtdCkgJiYgQUZNVF9JU1NURVJFTyhvZm10KSkgeworCQkvKiBleHBhbmQgZnJvbSBtb25vIHRvIHN0ZXJlbyAqLworCQlmb3IgKHNwID0gKChfX3MxNiAqKXRtcCkrc2NudCwgc3AyID0gKChfX3MxNiAqKXRtcCkrMipzY250LCBpID0gMDsgaSA8IHNjbnQ7IGkrKykgeworCQkJc3AtLTsKKwkJCXNwMiAtPSAyOworCQkJc3AyWzBdID0gc3AyWzFdID0gc3BbMF07CisJCX0KKwl9CisJaWYgKEFGTVRfSVNTVEVSRU8oaWZtdCkgJiYgIUFGTVRfSVNTVEVSRU8ob2ZtdCkpIHsKKwkJLyogY29udHJhY3QgZnJvbSBzdGVyZW8gdG8gbW9ubyAqLworCQlmb3IgKHNwID0gc3AyID0gKChfX3MxNiAqKXRtcCksIGkgPSAwOyBpIDwgc2NudDsgaSsrLCBzcCsrLCBzcDIgKz0gMikKKwkJCXNwWzBdID0gKHNwMlswXSArIHNwMlsxXSkgPj4gMTsKKwl9CisJY250ID0gc2NudDsKKwlpZiAoQUZNVF9JU1NURVJFTyhvZm10KSkKKwkJY250IDw8PSAxOworCXNwID0gKChfX3MxNiAqKXRtcCk7CisJYnAgPSAoKHVuc2lnbmVkIGNoYXIgKilvYnVmKTsKKwlzd2l0Y2ggKG9mbXQgJiB+QUZNVF9TVEVSRU8pIHsKKwljYXNlIEFGTVRfVTg6CisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgc3ArKywgYnArKykKKwkJCSpicCA9ICgqc3AgPj4gOCkgXiAweDgwOworCQlicmVhazsKKworCWNhc2UgQUZNVF9TODoKKwkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrLCBzcCsrLCBicCsrKQorCQkJKmJwID0gKnNwID4+IDg7CisJCWJyZWFrOworCisJY2FzZSBBRk1UX1UxNl9MRToKKwkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrLCBzcCsrLCBicCArPSAyKSB7CisJCQlzID0gKnNwOworCQkJYnBbMF0gPSBzOworCQkJYnBbMV0gPSAocyA+PiA4KSBeIDB4ODA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEFGTVRfVTE2X0JFOgorCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyssIHNwKyssIGJwICs9IDIpIHsKKwkJCXMgPSAqc3A7CisJCQlicFsxXSA9IHM7CisJCQlicFswXSA9IChzID4+IDgpIF4gMHg4MDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQUZNVF9TMTZfTEU6CisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgc3ArKywgYnAgKz0gMikgeworCQkJcyA9ICpzcDsKKwkJCWJwWzBdID0gczsKKwkJCWJwWzFdID0gcyA+PiA4OworCQl9CisJCWJyZWFrOworCisJY2FzZSBBRk1UX1MxNl9CRToKKwkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrLCBzcCsrLCBicCArPSAyKSB7CisJCQlzID0gKnNwOworCQkJYnBbMV0gPSBzOworCQkJYnBbMF0gPSBzID4+IDg7CisJCX0KKwkJYnJlYWs7CisJfQorCQorfQorCitzdGF0aWMgdm9pZCB1c2Jpbl9jb252ZXJ0KHN0cnVjdCB1c2JpbiAqdSwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgc2FtcGxlcykKK3sKKwl1bmlvbiB7CisJCV9fczE2IHNbNjRdOworCQl1bnNpZ25lZCBjaGFyIGJbMF07CisJfSB0bXA7CisJdW5zaWduZWQgaW50IHNjbnQsIG1heHMsIHVmbXRzaCwgZGZtdHNoOworCisJdWZtdHNoID0gQUZNVF9CWVRFU1NISUZUKHUtPmZvcm1hdCk7CisJZGZtdHNoID0gQUZNVF9CWVRFU1NISUZUKHUtPmRtYS5mb3JtYXQpOworCW1heHMgPSAoQUZNVF9JU1NURVJFTyh1LT5kbWEuZm9ybWF0IHwgdS0+Zm9ybWF0KSkgPyAzMiA6IDY0OworCXdoaWxlIChzYW1wbGVzID4gMCkgeworCQlzY250ID0gc2FtcGxlczsKKwkJaWYgKHNjbnQgPiBtYXhzKQorCQkJc2NudCA9IG1heHM7CisJCWNvbnZlcnNpb24oYnVmZmVyLCB1LT5mb3JtYXQsIHRtcC5iLCB1LT5kbWEuZm9ybWF0LCB0bXAuYiwgc2NudCk7CisJCWRtYWJ1Zl9jb3B5aW4oJnUtPmRtYSwgdG1wLmIsIHNjbnQgPDwgZGZtdHNoKTsKKwkJYnVmZmVyICs9IHNjbnQgPDwgdWZtdHNoOworCQlzYW1wbGVzIC09IHNjbnQ7CisJfQorfQkJCisKK3N0YXRpYyBpbnQgdXNiaW5fcHJlcGFyZV9kZXNjKHN0cnVjdCB1c2JpbiAqdSwgc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGludCBpLCBtYXhzaXplLCBvZmZzOworCisJbWF4c2l6ZSA9ICh1LT5mcmVxbWF4ICsgMHgzZmZmKSA+PiAoMTQgLSBBRk1UX0JZVEVTU0hJRlQodS0+Zm9ybWF0KSk7CisJLy9wcmludGsoS0VSTl9ERUJVRyAidXNiaW5fcHJlcGFyZV9kZXNjOiBtYXhzaXplICVkIGZyZXEgMHgleCBmb3JtYXQgMHgleFxuIiwgbWF4c2l6ZSwgdS0+ZnJlcW4sIHUtPmZvcm1hdCk7CisJZm9yIChpID0gb2ZmcyA9IDA7IGkgPCBERVNDRlJBTUVTOyBpKyssIG9mZnMgKz0gbWF4c2l6ZSkgeworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCA9IG1heHNpemU7CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0ID0gb2ZmczsKKwl9CisJdXJiLT5pbnRlcnZhbCA9IDE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZXR1cm4gdmFsdWU6IDAgaWYgZGVzY3JpcHRvciBzaG91bGQgYmUgcmVzdGFydGVkLCAtMSBvdGhlcndpc2UKKyAqIGNvbnZlcnQgc2FtcGxlIGZvcm1hdCBvbiB0aGUgZmx5IGlmIG5lY2Vzc2FyeQorICovCitzdGF0aWMgaW50IHVzYmluX3JldGlyZV9kZXNjKHN0cnVjdCB1c2JpbiAqdSwgc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGludCBpLCB1Zm10c2gsIGRmbXRzaCwgZXJyID0gMCwgY250LCBzY250LCBkbWFmcmVlOworCXVuc2lnbmVkIGNoYXIgKmNwOworCisJdWZtdHNoID0gQUZNVF9CWVRFU1NISUZUKHUtPmZvcm1hdCk7CisJZGZtdHNoID0gQUZNVF9CWVRFU1NISUZUKHUtPmRtYS5mb3JtYXQpOworCWZvciAoaSA9IDA7IGkgPCBERVNDRlJBTUVTOyBpKyspIHsKKwkJY3AgPSAoKHVuc2lnbmVkIGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcikgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKKwkJaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKSB7CisJCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2Jpbl9yZXRpcmVfZGVzYzogZnJhbWUgJXUgc3RhdHVzICVkXG4iLCBpLCB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cykpOworCQkJY29udGludWU7CisJCX0KKwkJc2NudCA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA+PiB1Zm10c2g7CisJCWlmICghc2NudCkKKwkJCWNvbnRpbnVlOworCQljbnQgPSBzY250IDw8IGRmbXRzaDsKKwkJaWYgKCF1LT5kbWEubWFwcGVkKSB7CisJCQlkbWFmcmVlID0gdS0+ZG1hLmRtYXNpemUgLSB1LT5kbWEuY291bnQ7CisJCQlpZiAoY250ID4gZG1hZnJlZSkgeworCQkJCXNjbnQgPSBkbWFmcmVlID4+IGRmbXRzaDsKKwkJCQljbnQgPSBzY250IDw8IGRmbXRzaDsKKwkJCQllcnIrKzsKKwkJCX0KKwkJfQorCQl1LT5kbWEuY291bnQgKz0gY250OworCQlpZiAodS0+Zm9ybWF0ID09IHUtPmRtYS5mb3JtYXQpIHsKKwkJCS8qIHdlIGRvIG5vdCBuZWVkIGZvcm1hdCBjb252ZXJzaW9uICovCisJCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogbm8gc2FtcGxlIGZvcm1hdCBjb252ZXJzaW9uXG4iKSk7CisJCQlkbWFidWZfY29weWluKCZ1LT5kbWEsIGNwLCBjbnQpOworCQl9IGVsc2UgeworCQkJLyogd2UgbmVlZCBzYW1wbGluZyBmb3JtYXQgY29udmVyc2lvbiAqLworCQkJZHByaW50aygoS0VSTl9ERUJVRyAidXNiYXVkaW86IHNhbXBsZSBmb3JtYXQgY29udmVyc2lvbiAleCAhPSAleFxuIiwgdS0+Zm9ybWF0LCB1LT5kbWEuZm9ybWF0KSk7CisJCQl1c2Jpbl9jb252ZXJ0KHUsIGNwLCBzY250KTsKKwkJfQorCX0KKwlpZiAoZXJyKQorCQl1LT5kbWEuZXJyb3IrKzsKKwlpZiAodS0+ZG1hLmNvdW50ID49IChzaWduZWQpdS0+ZG1hLmZyYWdzaXplKQorCQl3YWtlX3VwKCZ1LT5kbWEud2FpdCk7CisJcmV0dXJuIGVyciA/IC0xIDogMDsKK30KKworc3RhdGljIHZvaWQgdXNiaW5fY29tcGxldGVkKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9hdWRpb2RldiAqYXMgPSAoc3RydWN0IHVzYl9hdWRpb2RldiAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiaW4gKnUgPSAmYXMtPnVzYmluOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IG1hc2s7CisJaW50IHN1cmV0ID0gMDsKKworI2lmIDAKKwlwcmludGsoS0VSTl9ERUJVRyAidXNiaW5fY29tcGxldGVkOiBzdGF0dXMgJWQgZXJyY250ICVkIGZsYWdzIDB4JXhcbiIsIHVyYi0+c3RhdHVzLCB1cmItPmVycm9yX2NvdW50LCB1LT5mbGFncyk7CisjZW5kaWYKKwlpZiAodXJiID09IHUtPmR1cmJbMF0udXJiKQorCQltYXNrID0gRkxHX1VSQjBSVU5OSU5HOworCWVsc2UgaWYgKHVyYiA9PSB1LT5kdXJiWzFdLnVyYikKKwkJbWFzayA9IEZMR19VUkIxUlVOTklORzsKKwllbHNlIHsKKwkJbWFzayA9IDA7CisJCXByaW50ayhLRVJOX0VSUiAidXNiaW5fY29tcGxldGVkOiBwYW5pYzogdW5rbm93biBVUkJcbiIpOworCX0KKwl1cmItPmRldiA9IGFzLT5zdGF0ZS0+dXNiZGV2OworCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCWlmICghdXNiaW5fcmV0aXJlX2Rlc2ModSwgdXJiKSAmJgorCSAgICB1LT5mbGFncyAmIEZMR19SVU5OSU5HICYmCisJICAgICF1c2Jpbl9wcmVwYXJlX2Rlc2ModSwgdXJiKSAmJiAKKwkgICAgKHN1cmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgPT0gMCkgeworCQl1LT5mbGFncyB8PSBtYXNrOworCX0gZWxzZSB7CisJCXUtPmZsYWdzICY9IH4obWFzayB8IEZMR19SVU5OSU5HKTsKKwkJd2FrZV91cCgmdS0+ZG1hLndhaXQpOworCQlwcmludGsoS0VSTl9ERUJVRyAidXNiaW5fY29tcGxldGVkOiBkZXNjcmlwdG9yIG5vdCByZXN0YXJ0ZWQgKHVzYl9zdWJtaXRfdXJiOiAlZClcbiIsIHN1cmV0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIHdlIG91dHB1dCBzeW5jIGRhdGEKKyAqLworc3RhdGljIGludCB1c2Jpbl9zeW5jX3ByZXBhcmVfZGVzYyhzdHJ1Y3QgdXNiaW4gKnUsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwl1bnNpZ25lZCBjaGFyICpjcCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXVuc2lnbmVkIGludCBpLCBvZmZzOworCQorCWZvciAoaSA9IG9mZnMgPSAwOyBpIDwgU1lOQ0ZSQU1FUzsgaSsrLCBvZmZzICs9IDMsIGNwICs9IDMpIHsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGggPSAzOworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCA9IG9mZnM7CisJCWNwWzBdID0gdS0+ZnJlcW47CisJCWNwWzFdID0gdS0+ZnJlcW4gPj4gODsKKwkJY3BbMl0gPSB1LT5mcmVxbiA+PiAxNjsKKwl9CisJdXJiLT5pbnRlcnZhbCA9IDE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZXR1cm4gdmFsdWU6IDAgaWYgZGVzY3JpcHRvciBzaG91bGQgYmUgcmVzdGFydGVkLCAtMSBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCB1c2Jpbl9zeW5jX3JldGlyZV9kZXNjKHN0cnVjdCB1c2JpbiAqdSwgc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGludCBpOworCQorCWZvciAoaSA9IDA7IGkgPCBTWU5DRlJBTUVTOyBpKyspCisJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjWzBdLnN0YXR1cykKKwkJCWRwcmludGsoKEtFUk5fREVCVUcgInVzYmluX3N5bmNfcmV0aXJlX2Rlc2M6IGZyYW1lICV1IHN0YXR1cyAlZFxuIiwgaSwgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXNiaW5fc3luY19jb21wbGV0ZWQoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcyA9IChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB1c2JpbiAqdSA9ICZhcy0+dXNiaW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgbWFzazsKKwlpbnQgc3VyZXQgPSAwOworCisjaWYgMAorCXByaW50ayhLRVJOX0RFQlVHICJ1c2Jpbl9zeW5jX2NvbXBsZXRlZDogc3RhdHVzICVkIGVycmNudCAlZCBmbGFncyAweCV4XG4iLCB1cmItPnN0YXR1cywgdXJiLT5lcnJvcl9jb3VudCwgdS0+ZmxhZ3MpOworI2VuZGlmCisJaWYgKHVyYiA9PSB1LT5zdXJiWzBdLnVyYikKKwkJbWFzayA9IEZMR19TWU5DMFJVTk5JTkc7CisJZWxzZSBpZiAodXJiID09IHUtPnN1cmJbMV0udXJiKQorCQltYXNrID0gRkxHX1NZTkMxUlVOTklORzsKKwllbHNlIHsKKwkJbWFzayA9IDA7CisJCXByaW50ayhLRVJOX0VSUiAidXNiaW5fc3luY19jb21wbGV0ZWQ6IHBhbmljOiB1bmtub3duIFVSQlxuIik7CisJfQorCXVyYi0+ZGV2ID0gYXMtPnN0YXRlLT51c2JkZXY7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJaWYgKCF1c2Jpbl9zeW5jX3JldGlyZV9kZXNjKHUsIHVyYikgJiYKKwkgICAgdS0+ZmxhZ3MgJiBGTEdfUlVOTklORyAmJgorCSAgICAhdXNiaW5fc3luY19wcmVwYXJlX2Rlc2ModSwgdXJiKSAmJiAKKwkgICAgKHN1cmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgPT0gMCkgeworCQl1LT5mbGFncyB8PSBtYXNrOworCX0gZWxzZSB7CisJCXUtPmZsYWdzICY9IH4obWFzayB8IEZMR19SVU5OSU5HKTsKKwkJd2FrZV91cCgmdS0+ZG1hLndhaXQpOworCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2Jpbl9zeW5jX2NvbXBsZXRlZDogZGVzY3JpcHRvciBub3QgcmVzdGFydGVkICh1c2Jfc3VibWl0X3VyYjogJWQpXG4iLCBzdXJldCkpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHVzYmluX3N0YXJ0KHN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBhcy0+c3RhdGUtPnVzYmRldjsKKwlzdHJ1Y3QgdXNiaW4gKnUgPSAmYXMtPnVzYmluOworCXN0cnVjdCB1cmIgKnVyYjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBtYXhzemUsIGJ1ZnN6OworCisjaWYgMAorCXByaW50ayhLRVJOX0RFQlVHICJ1c2Jpbl9zdGFydDogZGV2aWNlICVkIHVmbXQgMHglMDh4IGRmbXQgMHglMDh4IHNyYXRlICVkXG4iLAorCSAgICAgICBkZXYtPmRldm51bSwgdS0+Zm9ybWF0LCB1LT5kbWEuZm9ybWF0LCB1LT5kbWEuc3JhdGUpOworI2VuZGlmCisJLyogYWxsb2NhdGUgVVNCIHN0b3JhZ2UgaWYgbm90IGFscmVhZHkgZG9uZSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCWlmICghKHUtPmZsYWdzICYgRkxHX0NPTk5FQ1RFRCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmICghKHUtPmZsYWdzICYgRkxHX1JVTk5JTkcpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCXUtPmZyZXFuID0gKCh1LT5kbWEuc3JhdGUgPDwgMTEpICsgNjIpIC8gMTI1OyAvKiB0aGlzIHdpbGwgb3ZlcmZsb3cgYXQgYXBwcm94IDJNU1BTICovCisJCXUtPmZyZXFtYXggPSB1LT5mcmVxbiArICh1LT5mcmVxbiA+PiAyKTsKKwkJdS0+cGhhc2UgPSAwOworCQltYXhzemUgPSAodS0+ZnJlcW1heCArIDB4M2ZmZikgPj4gKDE0IC0gQUZNVF9CWVRFU1NISUZUKHUtPmZvcm1hdCkpOworCQlidWZzeiA9IERFU0NGUkFNRVMgKiBtYXhzemU7CisJCWlmICh1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKQorCQkJa2ZyZWUodS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCXUtPmR1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwkJdS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBidWZzejsKKwkJaWYgKHUtPmR1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpCisJCQlrZnJlZSh1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJdS0+ZHVyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOworCQl1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJ1ZnN6OworCQlpZiAodS0+c3luY3BpcGUpIHsKKwkJCWlmICh1LT5zdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKQorCQkJCWtmcmVlKHUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQkJdS0+c3VyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoMypTWU5DRlJBTUVTLCBHRlBfS0VSTkVMKTsKKwkJCXUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMypTWU5DRlJBTUVTOworCQkJaWYgKHUtPnN1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpCisJCQkJa2ZyZWUodS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCQl1LT5zdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYygzKlNZTkNGUkFNRVMsIEdGUF9LRVJORUwpOworCQkJdS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAzKlNZTkNGUkFNRVM7CisJCX0KKwkJaWYgKCF1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyIHx8ICF1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyIHx8IAorCQkgICAgKHUtPnN5bmNwaXBlICYmICghdS0+c3VyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciB8fCAhdS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcikpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBjYW5ub3Qgc3RhcnQgcGxheWJhY2sgZGV2aWNlICVkXG4iLCBkZXYtPmRldm51bSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwl9CisJaWYgKHUtPmRtYS5jb3VudCA+PSB1LT5kbWEuZG1hc2l6ZSAmJiAhdS0+ZG1hLm1hcHBlZCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJdS0+ZmxhZ3MgfD0gRkxHX1JVTk5JTkc7CisJaWYgKCEodS0+ZmxhZ3MgJiBGTEdfVVJCMFJVTk5JTkcpKSB7CisJCXVyYiA9IHUtPmR1cmJbMF0udXJiOworCQl1cmItPmRldiA9IGRldjsKKwkJdXJiLT5waXBlID0gdS0+ZGF0YXBpcGU7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBERVNDRlJBTUVTOworCQl1cmItPmNvbnRleHQgPSBhczsKKwkJdXJiLT5jb21wbGV0ZSA9IHVzYmluX2NvbXBsZXRlZDsKKwkJaWYgKCF1c2Jpbl9wcmVwYXJlX2Rlc2ModSwgdXJiKSAmJiAhdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKSkKKwkJCXUtPmZsYWdzIHw9IEZMR19VUkIwUlVOTklORzsKKwkJZWxzZQorCQkJdS0+ZmxhZ3MgJj0gfkZMR19SVU5OSU5HOworCX0KKwlpZiAodS0+ZmxhZ3MgJiBGTEdfUlVOTklORyAmJiAhKHUtPmZsYWdzICYgRkxHX1VSQjFSVU5OSU5HKSkgeworCQl1cmIgPSB1LT5kdXJiWzFdLnVyYjsKKwkJdXJiLT5kZXYgPSBkZXY7CisJCXVyYi0+cGlwZSA9IHUtPmRhdGFwaXBlOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gREVTQ0ZSQU1FUzsKKwkJdXJiLT5jb250ZXh0ID0gYXM7CisJCXVyYi0+Y29tcGxldGUgPSB1c2Jpbl9jb21wbGV0ZWQ7CisJCWlmICghdXNiaW5fcHJlcGFyZV9kZXNjKHUsIHVyYikgJiYgIXVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCkpCisJCQl1LT5mbGFncyB8PSBGTEdfVVJCMVJVTk5JTkc7CisJCWVsc2UKKwkJCXUtPmZsYWdzICY9IH5GTEdfUlVOTklORzsKKwl9CisJaWYgKHUtPnN5bmNwaXBlKSB7CisJCWlmICh1LT5mbGFncyAmIEZMR19SVU5OSU5HICYmICEodS0+ZmxhZ3MgJiBGTEdfU1lOQzBSVU5OSU5HKSkgeworCQkJdXJiID0gdS0+c3VyYlswXS51cmI7CisJCQl1cmItPmRldiA9IGRldjsKKwkJCXVyYi0+cGlwZSA9IHUtPnN5bmNwaXBlOworCQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBTWU5DRlJBTUVTOworCQkJdXJiLT5jb250ZXh0ID0gYXM7CisJCQl1cmItPmNvbXBsZXRlID0gdXNiaW5fc3luY19jb21wbGV0ZWQ7CisJCQkvKiBzdHJpZGU6IHUtPnN5bmNpbnRlcnZhbCAqLworCQkJaWYgKCF1c2Jpbl9zeW5jX3ByZXBhcmVfZGVzYyh1LCB1cmIpICYmICF1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpKQorCQkJCXUtPmZsYWdzIHw9IEZMR19TWU5DMFJVTk5JTkc7CisJCQllbHNlCisJCQkJdS0+ZmxhZ3MgJj0gfkZMR19SVU5OSU5HOworCQl9CisJCWlmICh1LT5mbGFncyAmIEZMR19SVU5OSU5HICYmICEodS0+ZmxhZ3MgJiBGTEdfU1lOQzFSVU5OSU5HKSkgeworCQkJdXJiID0gdS0+c3VyYlsxXS51cmI7CisJCQl1cmItPmRldiA9IGRldjsKKwkJCXVyYi0+cGlwZSA9IHUtPnN5bmNwaXBlOworCQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBTWU5DRlJBTUVTOworCQkJdXJiLT5jb250ZXh0ID0gYXM7CisJCQl1cmItPmNvbXBsZXRlID0gdXNiaW5fc3luY19jb21wbGV0ZWQ7CisJCQkvKiBzdHJpZGU6IHUtPnN5bmNpbnRlcnZhbCAqLworCQkJaWYgKCF1c2Jpbl9zeW5jX3ByZXBhcmVfZGVzYyh1LCB1cmIpICYmICF1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpKQorCQkJCXUtPmZsYWdzIHw9IEZMR19TWU5DMVJVTk5JTkc7CisJCQllbHNlCisJCQkJdS0+ZmxhZ3MgJj0gfkZMR19SVU5OSU5HOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYm91dF9zdG9wKHN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzKQoreworCXN0cnVjdCB1c2JvdXQgKnUgPSAmYXMtPnVzYm91dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBpLCBub3RraWxsZWQgPSAxOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJdS0+ZmxhZ3MgJj0gfkZMR19SVU5OSU5HOworCWkgPSB1LT5mbGFnczsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCXdoaWxlIChpICYgKEZMR19VUkIwUlVOTklOR3xGTEdfVVJCMVJVTk5JTkd8RkxHX1NZTkMwUlVOTklOR3xGTEdfU1lOQzFSVU5OSU5HKSkgeworCQlzZXRfY3VycmVudF9zdGF0ZShub3RraWxsZWQgPyBUQVNLX0lOVEVSUlVQVElCTEUgOiBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlX3RpbWVvdXQoMSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlpID0gdS0+ZmxhZ3M7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWlmIChub3RraWxsZWQgJiYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCWlmIChpICYgRkxHX1VSQjBSVU5OSU5HKQorCQkJCXVzYl9raWxsX3VyYih1LT5kdXJiWzBdLnVyYik7CisJCQlpZiAoaSAmIEZMR19VUkIxUlVOTklORykKKwkJCQl1c2Jfa2lsbF91cmIodS0+ZHVyYlsxXS51cmIpOworCQkJaWYgKGkgJiBGTEdfU1lOQzBSVU5OSU5HKQorCQkJCXVzYl9raWxsX3VyYih1LT5zdXJiWzBdLnVyYik7CisJCQlpZiAoaSAmIEZMR19TWU5DMVJVTk5JTkcpCisJCQkJdXNiX2tpbGxfdXJiKHUtPnN1cmJbMV0udXJiKTsKKwkJCW5vdGtpbGxlZCA9IDA7CisJCX0KKwl9CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlpZiAodS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcikKKwkJa2ZyZWUodS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJaWYgKHUtPmR1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpCisJCWtmcmVlKHUtPmR1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpOworCWlmICh1LT5zdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKQorCQlrZnJlZSh1LT5zdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwlpZiAodS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcikKKwkJa2ZyZWUodS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJdS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IHUtPmR1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIgPSAKKwkJdS0+c3VyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IHUtPnN1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIgPSBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXNib3V0X3JlbGVhc2Uoc3RydWN0IHVzYl9hdWRpb2RldiAqYXMpCit7CisJdXNib3V0X3N0b3AoYXMpOworfQorCitzdGF0aWMgdm9pZCB1c2JvdXRfZGlzYyhzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcykKK3sKKwlzdHJ1Y3QgdXNib3V0ICp1ID0gJmFzLT51c2JvdXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCXUtPmZsYWdzICY9IH4oRkxHX1JVTk5JTkcgfCBGTEdfQ09OTkVDVEVEKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCXVzYm91dF9zdG9wKGFzKTsKK30KKworc3RhdGljIHZvaWQgdXNib3V0X2NvbnZlcnQoc3RydWN0IHVzYm91dCAqdSwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgc2FtcGxlcykKK3sKKwl1bmlvbiB7CisJCV9fczE2IHNbNjRdOworCQl1bnNpZ25lZCBjaGFyIGJbMF07CisJfSB0bXA7CisJdW5zaWduZWQgaW50IHNjbnQsIG1heHMsIHVmbXRzaCwgZGZtdHNoOworCisJdWZtdHNoID0gQUZNVF9CWVRFU1NISUZUKHUtPmZvcm1hdCk7CisJZGZtdHNoID0gQUZNVF9CWVRFU1NISUZUKHUtPmRtYS5mb3JtYXQpOworCW1heHMgPSAoQUZNVF9JU1NURVJFTyh1LT5kbWEuZm9ybWF0IHwgdS0+Zm9ybWF0KSkgPyAzMiA6IDY0OworCXdoaWxlIChzYW1wbGVzID4gMCkgeworCQlzY250ID0gc2FtcGxlczsKKwkJaWYgKHNjbnQgPiBtYXhzKQorCQkJc2NudCA9IG1heHM7CisJCWRtYWJ1Zl9jb3B5b3V0KCZ1LT5kbWEsIHRtcC5iLCBzY250IDw8IGRmbXRzaCk7CisJCWNvbnZlcnNpb24odG1wLmIsIHUtPmRtYS5mb3JtYXQsIGJ1ZmZlciwgdS0+Zm9ybWF0LCB0bXAuYiwgc2NudCk7CisJCWJ1ZmZlciArPSBzY250IDw8IHVmbXRzaDsKKwkJc2FtcGxlcyAtPSBzY250OworCX0KK30JCQorCitzdGF0aWMgaW50IHVzYm91dF9wcmVwYXJlX2Rlc2Moc3RydWN0IHVzYm91dCAqdSwgc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGludCBpLCB1Zm10c2gsIGRmbXRzaCwgZXJyID0gMCwgY250LCBzY250LCBvZmZzOworCXVuc2lnbmVkIGNoYXIgKmNwID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwl1Zm10c2ggPSBBRk1UX0JZVEVTU0hJRlQodS0+Zm9ybWF0KTsKKwlkZm10c2ggPSBBRk1UX0JZVEVTU0hJRlQodS0+ZG1hLmZvcm1hdCk7CisJZm9yIChpID0gb2ZmcyA9IDA7IGkgPCBERVNDRlJBTUVTOyBpKyspIHsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgPSBvZmZzOworCQl1LT5waGFzZSA9ICh1LT5waGFzZSAmIDB4M2ZmZikgKyB1LT5mcmVxbTsKKwkJc2NudCA9IHUtPnBoYXNlID4+IDE0OworCQlpZiAoIXNjbnQpIHsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWNudCA9IHNjbnQgPDwgZGZtdHNoOworCQlpZiAoIXUtPmRtYS5tYXBwZWQpIHsKKwkJCWlmIChjbnQgPiB1LT5kbWEuY291bnQpIHsKKwkJCQlzY250ID0gdS0+ZG1hLmNvdW50ID4+IGRmbXRzaDsKKwkJCQljbnQgPSBzY250IDw8IGRmbXRzaDsKKwkJCQllcnIrKzsKKwkJCX0KKwkJCXUtPmRtYS5jb3VudCAtPSBjbnQ7CisJCX0gZWxzZQorCQkJdS0+ZG1hLmNvdW50ICs9IGNudDsKKwkJaWYgKHUtPmZvcm1hdCA9PSB1LT5kbWEuZm9ybWF0KSB7CisJCQkvKiB3ZSBkbyBub3QgbmVlZCBmb3JtYXQgY29udmVyc2lvbiAqLworCQkJZG1hYnVmX2NvcHlvdXQoJnUtPmRtYSwgY3AsIGNudCk7CisJCX0gZWxzZSB7CisJCQkvKiB3ZSBuZWVkIHNhbXBsaW5nIGZvcm1hdCBjb252ZXJzaW9uICovCisJCQl1c2JvdXRfY29udmVydCh1LCBjcCwgc2NudCk7CisJCX0KKwkJY250ID0gc2NudCA8PCB1Zm10c2g7CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0gY250OworCQlvZmZzICs9IGNudDsKKwkJY3AgKz0gY250OworCX0KKwl1cmItPmludGVydmFsID0gMTsKKwlpZiAoZXJyKQorCQl1LT5kbWEuZXJyb3IrKzsKKwlpZiAodS0+ZG1hLm1hcHBlZCkgeworCQlpZiAodS0+ZG1hLmNvdW50ID49IChzaWduZWQpdS0+ZG1hLmZyYWdzaXplKQorCQkJd2FrZV91cCgmdS0+ZG1hLndhaXQpOworCX0gZWxzZSB7CisJCWlmICgoc2lnbmVkKXUtPmRtYS5kbWFzaXplID49IHUtPmRtYS5jb3VudCArIChzaWduZWQpdS0+ZG1hLmZyYWdzaXplKQorCQkJd2FrZV91cCgmdS0+ZG1hLndhaXQpOworCX0KKwlyZXR1cm4gZXJyID8gLTEgOiAwOworfQorCisvKgorICogcmV0dXJuIHZhbHVlOiAwIGlmIGRlc2NyaXB0b3Igc2hvdWxkIGJlIHJlc3RhcnRlZCwgLTEgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgdXNib3V0X3JldGlyZV9kZXNjKHN0cnVjdCB1c2JvdXQgKnUsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBERVNDRlJBTUVTOyBpKyspIHsKKwkJaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKSB7CisJCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JvdXRfcmV0aXJlX2Rlc2M6IGZyYW1lICV1IHN0YXR1cyAlZFxuIiwgaSwgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2JvdXRfY29tcGxldGVkKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9hdWRpb2RldiAqYXMgPSAoc3RydWN0IHVzYl9hdWRpb2RldiAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNib3V0ICp1ID0gJmFzLT51c2JvdXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgbWFzazsKKwlpbnQgc3VyZXQgPSAwOworCisjaWYgMAorCXByaW50ayhLRVJOX0RFQlVHICJ1c2JvdXRfY29tcGxldGVkOiBzdGF0dXMgJWQgZXJyY250ICVkIGZsYWdzIDB4JXhcbiIsIHVyYi0+c3RhdHVzLCB1cmItPmVycm9yX2NvdW50LCB1LT5mbGFncyk7CisjZW5kaWYKKwlpZiAodXJiID09IHUtPmR1cmJbMF0udXJiKQorCQltYXNrID0gRkxHX1VSQjBSVU5OSU5HOworCWVsc2UgaWYgKHVyYiA9PSB1LT5kdXJiWzFdLnVyYikKKwkJbWFzayA9IEZMR19VUkIxUlVOTklORzsKKwllbHNlIHsKKwkJbWFzayA9IDA7CisJCXByaW50ayhLRVJOX0VSUiAidXNib3V0X2NvbXBsZXRlZDogcGFuaWM6IHVua25vd24gVVJCXG4iKTsKKwl9CisJdXJiLT5kZXYgPSBhcy0+c3RhdGUtPnVzYmRldjsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwlpZiAoIXVzYm91dF9yZXRpcmVfZGVzYyh1LCB1cmIpICYmCisJICAgIHUtPmZsYWdzICYgRkxHX1JVTk5JTkcgJiYKKwkgICAgIXVzYm91dF9wcmVwYXJlX2Rlc2ModSwgdXJiKSAmJiAKKwkgICAgKHN1cmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgPT0gMCkgeworCQl1LT5mbGFncyB8PSBtYXNrOworCX0gZWxzZSB7CisJCXUtPmZsYWdzICY9IH4obWFzayB8IEZMR19SVU5OSU5HKTsKKwkJd2FrZV91cCgmdS0+ZG1hLndhaXQpOworCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JvdXRfY29tcGxldGVkOiBkZXNjcmlwdG9yIG5vdCByZXN0YXJ0ZWQgKHVzYl9zdWJtaXRfdXJiOiAlZClcbiIsIHN1cmV0KSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgdXNib3V0X3N5bmNfcHJlcGFyZV9kZXNjKHN0cnVjdCB1c2JvdXQgKnUsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwl1bnNpZ25lZCBpbnQgaSwgb2ZmczsKKworCWZvciAoaSA9IG9mZnMgPSAwOyBpIDwgU1lOQ0ZSQU1FUzsgaSsrLCBvZmZzICs9IDMpIHsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGggPSAzOworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCA9IG9mZnM7CisJfQorCXVyYi0+aW50ZXJ2YWwgPSAxOworCXJldHVybiAwOworfQorCisvKgorICogcmV0dXJuIHZhbHVlOiAwIGlmIGRlc2NyaXB0b3Igc2hvdWxkIGJlIHJlc3RhcnRlZCwgLTEgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgdXNib3V0X3N5bmNfcmV0aXJlX2Rlc2Moc3RydWN0IHVzYm91dCAqdSwgc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGNoYXIgKmNwID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgaW50IGYsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgU1lOQ0ZSQU1FUzsgaSsrLCBjcCArPSAzKSB7CisJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cykgeworCQkJZHByaW50aygoS0VSTl9ERUJVRyAidXNib3V0X3N5bmNfcmV0aXJlX2Rlc2M6IGZyYW1lICV1IHN0YXR1cyAlZFxuIiwgaSwgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggPCAzKSB7CisJCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JvdXRfc3luY19yZXRpcmVfZGVzYzogZnJhbWUgJXUgbGVuZ3RoICVkXG4iLCBpLCB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGgpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWYgPSBjcFswXSB8IChjcFsxXSA8PCA4KSB8IChjcFsyXSA8PCAxNik7CisJCWlmIChhYnMoZiAtIHUtPmZyZXFuKSA+ICh1LT5mcmVxbiA+PiAzKSB8fCBmID4gdS0+ZnJlcW1heCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNib3V0X3N5bmNfcmV0aXJlX2Rlc2M6IHJlcXVlc3RlZCBmcmVxdWVuY3kgJXUgKG5vbWluYWwgJXUpIG91dCBvZiByYW5nZSFcbiIsIGYsIHUtPmZyZXFuKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXUtPmZyZXFtID0gZjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYm91dF9zeW5jX2NvbXBsZXRlZChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzID0gKHN0cnVjdCB1c2JfYXVkaW9kZXYgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHVzYm91dCAqdSA9ICZhcy0+dXNib3V0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IG1hc2s7CisJaW50IHN1cmV0ID0gMDsKKworI2lmIDAKKwlwcmludGsoS0VSTl9ERUJVRyAidXNib3V0X3N5bmNfY29tcGxldGVkOiBzdGF0dXMgJWQgZXJyY250ICVkIGZsYWdzIDB4JXhcbiIsIHVyYi0+c3RhdHVzLCB1cmItPmVycm9yX2NvdW50LCB1LT5mbGFncyk7CisjZW5kaWYKKwlpZiAodXJiID09IHUtPnN1cmJbMF0udXJiKQorCQltYXNrID0gRkxHX1NZTkMwUlVOTklORzsKKwllbHNlIGlmICh1cmIgPT0gdS0+c3VyYlsxXS51cmIpCisJCW1hc2sgPSBGTEdfU1lOQzFSVU5OSU5HOworCWVsc2UgeworCQltYXNrID0gMDsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JvdXRfc3luY19jb21wbGV0ZWQ6IHBhbmljOiB1bmtub3duIFVSQlxuIik7CisJfQorCXVyYi0+ZGV2ID0gYXMtPnN0YXRlLT51c2JkZXY7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJaWYgKCF1c2JvdXRfc3luY19yZXRpcmVfZGVzYyh1LCB1cmIpICYmCisJICAgIHUtPmZsYWdzICYgRkxHX1JVTk5JTkcgJiYKKwkgICAgIXVzYm91dF9zeW5jX3ByZXBhcmVfZGVzYyh1LCB1cmIpICYmIAorCSAgICAoc3VyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSA9PSAwKSB7CisJCXUtPmZsYWdzIHw9IG1hc2s7CisJfSBlbHNlIHsKKwkJdS0+ZmxhZ3MgJj0gfihtYXNrIHwgRkxHX1JVTk5JTkcpOworCQl3YWtlX3VwKCZ1LT5kbWEud2FpdCk7CisJCWRwcmludGsoKEtFUk5fREVCVUcgInVzYm91dF9zeW5jX2NvbXBsZXRlZDogZGVzY3JpcHRvciBub3QgcmVzdGFydGVkICh1c2Jfc3VibWl0X3VyYjogJWQpXG4iLCBzdXJldCkpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHVzYm91dF9zdGFydChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcykKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gYXMtPnN0YXRlLT51c2JkZXY7CisJc3RydWN0IHVzYm91dCAqdSA9ICZhcy0+dXNib3V0OworCXN0cnVjdCB1cmIgKnVyYjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBtYXhzemUsIGJ1ZnN6OworCisjaWYgMAorCXByaW50ayhLRVJOX0RFQlVHICJ1c2JvdXRfc3RhcnQ6IGRldmljZSAlZCB1Zm10IDB4JTA4eCBkZm10IDB4JTA4eCBzcmF0ZSAlZFxuIiwKKwkgICAgICAgZGV2LT5kZXZudW0sIHUtPmZvcm1hdCwgdS0+ZG1hLmZvcm1hdCwgdS0+ZG1hLnNyYXRlKTsKKyNlbmRpZgorCS8qIGFsbG9jYXRlIFVTQiBzdG9yYWdlIGlmIG5vdCBhbHJlYWR5IGRvbmUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwlpZiAoISh1LT5mbGFncyAmIEZMR19DT05ORUNURUQpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoISh1LT5mbGFncyAmIEZMR19SVU5OSU5HKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCQl1LT5mcmVxbiA9IHUtPmZyZXFtID0gKCh1LT5kbWEuc3JhdGUgPDwgMTEpICsgNjIpIC8gMTI1OyAvKiB0aGlzIHdpbGwgb3ZlcmZsb3cgYXQgYXBwcm94IDJNU1BTICovCisJCXUtPmZyZXFtYXggPSB1LT5mcmVxbiArICh1LT5mcmVxbiA+PiAyKTsKKwkJdS0+cGhhc2UgPSAwOworCQltYXhzemUgPSAodS0+ZnJlcW1heCArIDB4M2ZmZikgPj4gKDE0IC0gQUZNVF9CWVRFU1NISUZUKHUtPmZvcm1hdCkpOworCQlidWZzeiA9IERFU0NGUkFNRVMgKiBtYXhzemU7CisJCWlmICh1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKQorCQkJa2ZyZWUodS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCXUtPmR1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwkJdS0+ZHVyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBidWZzejsKKwkJaWYgKHUtPmR1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpCisJCQlrZnJlZSh1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJdS0+ZHVyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOworCQl1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJ1ZnN6OworCQlpZiAodS0+c3luY3BpcGUpIHsKKwkJCWlmICh1LT5zdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyKQorCQkJCWtmcmVlKHUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQkJdS0+c3VyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoMypTWU5DRlJBTUVTLCBHRlBfS0VSTkVMKTsKKwkJCXUtPnN1cmJbMF0udXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMypTWU5DRlJBTUVTOworCQkJaWYgKHUtPnN1cmJbMV0udXJiLT50cmFuc2Zlcl9idWZmZXIpCisJCQkJa2ZyZWUodS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCQl1LT5zdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYygzKlNZTkNGUkFNRVMsIEdGUF9LRVJORUwpOworCQkJdS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAzKlNZTkNGUkFNRVM7CisJCX0KKwkJaWYgKCF1LT5kdXJiWzBdLnVyYi0+dHJhbnNmZXJfYnVmZmVyIHx8ICF1LT5kdXJiWzFdLnVyYi0+dHJhbnNmZXJfYnVmZmVyIHx8IAorCQkgICAgKHUtPnN5bmNwaXBlICYmICghdS0+c3VyYlswXS51cmItPnRyYW5zZmVyX2J1ZmZlciB8fCAhdS0+c3VyYlsxXS51cmItPnRyYW5zZmVyX2J1ZmZlcikpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBjYW5ub3Qgc3RhcnQgcGxheWJhY2sgZGV2aWNlICVkXG4iLCBkZXYtPmRldm51bSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwl9CisJaWYgKHUtPmRtYS5jb3VudCA8PSAwICYmICF1LT5kbWEubWFwcGVkKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKyAgICAgICAJdS0+ZmxhZ3MgfD0gRkxHX1JVTk5JTkc7CisJaWYgKCEodS0+ZmxhZ3MgJiBGTEdfVVJCMFJVTk5JTkcpKSB7CisJCXVyYiA9IHUtPmR1cmJbMF0udXJiOworCQl1cmItPmRldiA9IGRldjsKKwkJdXJiLT5waXBlID0gdS0+ZGF0YXBpcGU7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBERVNDRlJBTUVTOworCQl1cmItPmNvbnRleHQgPSBhczsKKwkJdXJiLT5jb21wbGV0ZSA9IHVzYm91dF9jb21wbGV0ZWQ7CisJCWlmICghdXNib3V0X3ByZXBhcmVfZGVzYyh1LCB1cmIpICYmICF1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKQorCQkJdS0+ZmxhZ3MgfD0gRkxHX1VSQjBSVU5OSU5HOworCQllbHNlCisJCQl1LT5mbGFncyAmPSB+RkxHX1JVTk5JTkc7CisJfQorCWlmICh1LT5mbGFncyAmIEZMR19SVU5OSU5HICYmICEodS0+ZmxhZ3MgJiBGTEdfVVJCMVJVTk5JTkcpKSB7CisJCXVyYiA9IHUtPmR1cmJbMV0udXJiOworCQl1cmItPmRldiA9IGRldjsKKwkJdXJiLT5waXBlID0gdS0+ZGF0YXBpcGU7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBERVNDRlJBTUVTOworCQl1cmItPmNvbnRleHQgPSBhczsKKwkJdXJiLT5jb21wbGV0ZSA9IHVzYm91dF9jb21wbGV0ZWQ7CisJCWlmICghdXNib3V0X3ByZXBhcmVfZGVzYyh1LCB1cmIpICYmICF1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKQorCQkJdS0+ZmxhZ3MgfD0gRkxHX1VSQjFSVU5OSU5HOworCQllbHNlCisJCQl1LT5mbGFncyAmPSB+RkxHX1JVTk5JTkc7CisJfQorCWlmICh1LT5zeW5jcGlwZSkgeworCQlpZiAodS0+ZmxhZ3MgJiBGTEdfUlVOTklORyAmJiAhKHUtPmZsYWdzICYgRkxHX1NZTkMwUlVOTklORykpIHsKKwkJCXVyYiA9IHUtPnN1cmJbMF0udXJiOworCQkJdXJiLT5kZXYgPSBkZXY7CisJCQl1cmItPnBpcGUgPSB1LT5zeW5jcGlwZTsKKwkJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gU1lOQ0ZSQU1FUzsKKwkJCXVyYi0+Y29udGV4dCA9IGFzOworCQkJdXJiLT5jb21wbGV0ZSA9IHVzYm91dF9zeW5jX2NvbXBsZXRlZDsKKwkJCS8qIHN0cmlkZTogdS0+c3luY2ludGVydmFsICovCisJCQlpZiAoIXVzYm91dF9zeW5jX3ByZXBhcmVfZGVzYyh1LCB1cmIpICYmICF1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKQorCQkJCXUtPmZsYWdzIHw9IEZMR19TWU5DMFJVTk5JTkc7CisJCQllbHNlCisJCQkJdS0+ZmxhZ3MgJj0gfkZMR19SVU5OSU5HOworCQl9CisJCWlmICh1LT5mbGFncyAmIEZMR19SVU5OSU5HICYmICEodS0+ZmxhZ3MgJiBGTEdfU1lOQzFSVU5OSU5HKSkgeworCQkJdXJiID0gdS0+c3VyYlsxXS51cmI7CisJCQl1cmItPmRldiA9IGRldjsKKwkJCXVyYi0+cGlwZSA9IHUtPnN5bmNwaXBlOworCQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBTWU5DRlJBTUVTOworCQkJdXJiLT5jb250ZXh0ID0gYXM7CisJCQl1cmItPmNvbXBsZXRlID0gdXNib3V0X3N5bmNfY29tcGxldGVkOworCQkJLyogc3RyaWRlOiB1LT5zeW5jaW50ZXJ2YWwgKi8KKwkJCWlmICghdXNib3V0X3N5bmNfcHJlcGFyZV9kZXNjKHUsIHVyYikgJiYgIXVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpCisJCQkJdS0+ZmxhZ3MgfD0gRkxHX1NZTkMxUlVOTklORzsKKwkJCWVsc2UKKwkJCQl1LT5mbGFncyAmPSB+RkxHX1JVTk5JTkc7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZm9ybWF0X2dvb2RuZXNzKHN0cnVjdCBhdWRpb2Zvcm1hdCAqYWZwLCB1bnNpZ25lZCBpbnQgZm10LCB1bnNpZ25lZCBpbnQgc3JhdGUpCit7CisJdW5zaWduZWQgaW50IGcgPSAwOworCisJaWYgKHNyYXRlIDwgYWZwLT5zcmF0ZWxvKQorCQlnICs9IGFmcC0+c3JhdGVsbyAtIHNyYXRlOworCWlmIChzcmF0ZSA+IGFmcC0+c3JhdGVoaSkKKwkJZyArPSBzcmF0ZSAtIGFmcC0+c3JhdGVoaTsKKwlpZiAoQUZNVF9JU1NURVJFTyhhZnAtPmZvcm1hdCkgJiYgIUFGTVRfSVNTVEVSRU8oZm10KSkKKwkJZyArPSAweDEwMDAwMDsKKwlpZiAoIUFGTVRfSVNTVEVSRU8oYWZwLT5mb3JtYXQpICYmIEFGTVRfSVNTVEVSRU8oZm10KSkKKwkJZyArPSAweDQwMDAwMDsKKwlpZiAoQUZNVF9JUzE2QklUKGFmcC0+Zm9ybWF0KSAmJiAhQUZNVF9JUzE2QklUKGZtdCkpCisJCWcgKz0gMHgxMDAwMDA7CisJaWYgKCFBRk1UX0lTMTZCSVQoYWZwLT5mb3JtYXQpICYmIEFGTVRfSVMxNkJJVChmbXQpKQorCQlnICs9IDB4NDAwMDAwOworCXJldHVybiBnOworfQorCitzdGF0aWMgaW50IGZpbmRfZm9ybWF0KHN0cnVjdCBhdWRpb2Zvcm1hdCAqYWZwLCB1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGludCBmbXQsIHVuc2lnbmVkIGludCBzcmF0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgZywgZ2IgPSB+MDsKKwlpbnQgaiA9IC0xOyAvKiBkZWZhdWx0IHRvIGZhaWx1cmUgKi8KKworCS8qIGZpbmQgImJlc3QiIGZvcm1hdCAoYWNjb3JkaW5nIHRvIGZvcm1hdF9nb29kbmVzcykgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQlnID0gZm9ybWF0X2dvb2RuZXNzKCZhZnBbaV0sIGZtdCwgc3JhdGUpOworCQlpZiAoZyA+PSBnYikgCisJCQljb250aW51ZTsKKwkJaiA9IGk7CisJCWdiID0gZzsKKwl9CisgICAgICAgCXJldHVybiBqOworfQorCitzdGF0aWMgaW50IHNldF9mb3JtYXRfaW4oc3RydWN0IHVzYl9hdWRpb2RldiAqYXMpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGFzLT5zdGF0ZS0+dXNiZGV2OworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdHM7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlOworCXN0cnVjdCB1c2JpbiAqdSA9ICZhcy0+dXNiaW47CisJc3RydWN0IGRtYWJ1ZiAqZCA9ICZ1LT5kbWE7CisJc3RydWN0IGF1ZGlvZm9ybWF0ICpmbXQ7CisJdW5zaWduZWQgaW50IGVwOworCXVuc2lnbmVkIGNoYXIgZGF0YVszXTsKKwlpbnQgZm10bnIsIHJldDsKKworCWlmYWNlID0gdXNiX2lmbnVtX3RvX2lmKGRldiwgdS0+aW50ZXJmYWNlKTsKKwlpZiAoIWlmYWNlKQorCQlyZXR1cm4gMDsKKworCWZtdG5yID0gZmluZF9mb3JtYXQoYXMtPmZtdGluLCBhcy0+bnVtZm10aW4sIGQtPmZvcm1hdCwgZC0+c3JhdGUpOworCWlmIChmbXRuciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogc2V0X2Zvcm1hdF9pbigpOiBmYWlsZWQgdG8gZmluZCBkZXNpcmVkIGZvcm1hdC9zcGVlZCBjb21iaW5hdGlvbi5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZm10ID0gYXMtPmZtdGluICsgZm10bnI7CisJYWx0cyA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpZmFjZSwgZm10LT5hbHRzZXR0aW5nKTsKKwl1LT5mb3JtYXQgPSBmbXQtPmZvcm1hdDsKKwl1LT5kYXRhcGlwZSA9IHVzYl9yY3Zpc29jcGlwZShkZXYsIGFsdHMtPmVuZHBvaW50WzBdLmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIDB4Zik7CisJdS0+c3luY3BpcGUgPSB1LT5zeW5jaW50ZXJ2YWwgPSAwOworCWlmICgoYWx0cy0+ZW5kcG9pbnRbMF0uZGVzYy5ibUF0dHJpYnV0ZXMgJiAweDBjKSA9PSAweDA4KSB7CisJCWlmIChhbHRzLT5kZXNjLmJOdW1FbmRwb2ludHMgPCAyIHx8CisJCSAgICBhbHRzLT5lbmRwb2ludFsxXS5kZXNjLmJtQXR0cmlidXRlcyAhPSAweDAxIHx8CisJCSAgICBhbHRzLT5lbmRwb2ludFsxXS5kZXNjLmJTeW5jaEFkZHJlc3MgIT0gMCB8fAorCQkgICAgYWx0cy0+ZW5kcG9pbnRbMV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzICE9IChhbHRzLT5lbmRwb2ludFswXS5kZXNjLmJTeW5jaEFkZHJlc3MgJiAweDdmKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IGRldmljZSAlZCBpbnRlcmZhY2UgJWQgYWx0c2V0dGluZyAlZCBjbGFpbXMgYWRhcHRpdmUgaW4gIgorCQkJICAgICAgICJidXQgaGFzIGludmFsaWQgc3luY2ggcGlwZTsgdHJlYXRpbmcgYXMgYXN5bmNocm9ub3VzIGluXG4iLAorCQkJICAgICAgIGRldi0+ZGV2bnVtLCB1LT5pbnRlcmZhY2UsIGZtdC0+YWx0c2V0dGluZyk7CisJCX0gZWxzZSB7CisJCQl1LT5zeW5jcGlwZSA9IHVzYl9zbmRpc29jcGlwZShkZXYsIGFsdHMtPmVuZHBvaW50WzFdLmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIDB4Zik7CisJCQl1LT5zeW5jaW50ZXJ2YWwgPSBhbHRzLT5lbmRwb2ludFsxXS5kZXNjLmJSZWZyZXNoOworCQl9CisJfQorCWlmIChkLT5zcmF0ZSA8IGZtdC0+c3JhdGVsbykKKwkJZC0+c3JhdGUgPSBmbXQtPnNyYXRlbG87CisJaWYgKGQtPnNyYXRlID4gZm10LT5zcmF0ZWhpKQorCQlkLT5zcmF0ZSA9IGZtdC0+c3JhdGVoaTsKKwlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogc2V0X2Zvcm1hdF9pbjogdXNiX3NldF9pbnRlcmZhY2UgJXUgJXVcbiIsCisJCQl1LT5pbnRlcmZhY2UsIGZtdC0+YWx0c2V0dGluZykpOworCWlmICh1c2Jfc2V0X2ludGVyZmFjZShkZXYsIGFsdHMtPmRlc2MuYkludGVyZmFjZU51bWJlciwgZm10LT5hbHRzZXR0aW5nKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IHVzYl9zZXRfaW50ZXJmYWNlIGZhaWxlZCwgZGV2aWNlICVkIGludGVyZmFjZSAlZCBhbHRzZXR0aW5nICVkXG4iLAorCQkgICAgICAgZGV2LT5kZXZudW0sIHUtPmludGVyZmFjZSwgZm10LT5hbHRzZXR0aW5nKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoZm10LT5zcmF0ZWxvID09IGZtdC0+c3JhdGVoaSkKKwkJcmV0dXJuIDA7CisJZXAgPSB1c2JfcGlwZWVuZHBvaW50KHUtPmRhdGFwaXBlKSB8ICh1LT5kYXRhcGlwZSAmIFVTQl9ESVJfSU4pOworCS8qIGlmIGVuZHBvaW50IGhhcyBwaXRjaCBjb250cm9sLCBlbmFibGUgaXQgKi8KKwlpZiAoZm10LT5hdHRyaWJ1dGVzICYgMHgwMikgeworCQlkYXRhWzBdID0gMTsKKwkJaWYgKChyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0VORFBPSU5UfFVTQl9ESVJfT1VULCAKKwkJCQkJICAgUElUQ0hfQ09OVFJPTCA8PCA4LCBlcCwgZGF0YSwgMSwgMTAwMCkpIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZmFpbHVyZSAoZXJyb3IgJWQpIHRvIHNldCBvdXRwdXQgcGl0Y2ggY29udHJvbCBkZXZpY2UgJWQgaW50ZXJmYWNlICV1IGVuZHBvaW50IDB4JXggdG8gJXVcbiIsCisJCQkgICAgICAgcmV0LCBkZXYtPmRldm51bSwgdS0+aW50ZXJmYWNlLCBlcCwgZC0+c3JhdGUpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCS8qIGlmIGVuZHBvaW50IGhhcyBzYW1wbGluZyByYXRlIGNvbnRyb2wsIHNldCBpdCAqLworCWlmIChmbXQtPmF0dHJpYnV0ZXMgJiAweDAxKSB7CisJCWRhdGFbMF0gPSBkLT5zcmF0ZTsKKwkJZGF0YVsxXSA9IGQtPnNyYXRlID4+IDg7CisJCWRhdGFbMl0gPSBkLT5zcmF0ZSA+PiAxNjsKKwkJaWYgKChyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0VORFBPSU5UfFVTQl9ESVJfT1VULCAKKwkJCQkJICAgU0FNUExJTkdfRlJFUV9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKSkgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBmYWlsdXJlIChlcnJvciAlZCkgdG8gc2V0IGlucHV0IHNhbXBsaW5nIGZyZXF1ZW5jeSBkZXZpY2UgJWQgaW50ZXJmYWNlICV1IGVuZHBvaW50IDB4JXggdG8gJXVcbiIsCisJCQkgICAgICAgcmV0LCBkZXYtPmRldm51bSwgdS0+aW50ZXJmYWNlLCBlcCwgZC0+c3JhdGUpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWlmICgocmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9DVVIsIFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9FTkRQT0lOVHxVU0JfRElSX0lOLAorCQkJCQkgICBTQU1QTElOR19GUkVRX0NPTlRST0wgPDwgOCwgZXAsIGRhdGEsIDMsIDEwMDApKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGZhaWx1cmUgKGVycm9yICVkKSB0byBnZXQgaW5wdXQgc2FtcGxpbmcgZnJlcXVlbmN5IGRldmljZSAlZCBpbnRlcmZhY2UgJXUgZW5kcG9pbnQgMHgleFxuIiwKKwkJCSAgICAgICByZXQsIGRldi0+ZGV2bnVtLCB1LT5pbnRlcmZhY2UsIGVwKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogc2V0X2Zvcm1hdF9pbjogZGV2aWNlICVkIGludGVyZmFjZSAlZCBhbHRzZXR0aW5nICVkIHNyYXRlIHJlcTogJXUgcmVhbCAldVxuIiwKKwkJICAgICAgICBkZXYtPmRldm51bSwgdS0+aW50ZXJmYWNlLCBmbXQtPmFsdHNldHRpbmcsIGQtPnNyYXRlLCBkYXRhWzBdIHwgKGRhdGFbMV0gPDwgOCkgfCAoZGF0YVsyXSA8PCAxNikpKTsKKwkJZC0+c3JhdGUgPSBkYXRhWzBdIHwgKGRhdGFbMV0gPDwgOCkgfCAoZGF0YVsyXSA8PCAxNik7CisJfQorCWRwcmludGsoKEtFUk5fREVCVUcgInVzYmF1ZGlvOiBzZXRfZm9ybWF0X2luOiBVU0IgZm9ybWF0IDB4JXgsIERNQSBmb3JtYXQgMHgleCBzcmF0ZSAldVxuIiwgdS0+Zm9ybWF0LCBkLT5mb3JtYXQsIGQtPnNyYXRlKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2Zvcm1hdF9vdXQoc3RydWN0IHVzYl9hdWRpb2RldiAqYXMpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGFzLT5zdGF0ZS0+dXNiZGV2OworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdHM7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlOwkKKwlzdHJ1Y3QgdXNib3V0ICp1ID0gJmFzLT51c2JvdXQ7CisJc3RydWN0IGRtYWJ1ZiAqZCA9ICZ1LT5kbWE7CisJc3RydWN0IGF1ZGlvZm9ybWF0ICpmbXQ7CisJdW5zaWduZWQgaW50IGVwOworCXVuc2lnbmVkIGNoYXIgZGF0YVszXTsKKwlpbnQgZm10bnIsIHJldDsKKworCWlmYWNlID0gdXNiX2lmbnVtX3RvX2lmKGRldiwgdS0+aW50ZXJmYWNlKTsKKwlpZiAoIWlmYWNlKQorCQlyZXR1cm4gMDsKKworCWZtdG5yID0gZmluZF9mb3JtYXQoYXMtPmZtdG91dCwgYXMtPm51bWZtdG91dCwgZC0+Zm9ybWF0LCBkLT5zcmF0ZSk7CisJaWYgKGZtdG5yIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBzZXRfZm9ybWF0X291dCgpOiBmYWlsZWQgdG8gZmluZCBkZXNpcmVkIGZvcm1hdC9zcGVlZCBjb21iaW5hdGlvbi5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZm10ID0gYXMtPmZtdG91dCArIGZtdG5yOworCXUtPmZvcm1hdCA9IGZtdC0+Zm9ybWF0OworCWFsdHMgPSB1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcoaWZhY2UsIGZtdC0+YWx0c2V0dGluZyk7CisJdS0+ZGF0YXBpcGUgPSB1c2Jfc25kaXNvY3BpcGUoZGV2LCBhbHRzLT5lbmRwb2ludFswXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiAweGYpOworCXUtPnN5bmNwaXBlID0gdS0+c3luY2ludGVydmFsID0gMDsKKwlpZiAoKGFsdHMtPmVuZHBvaW50WzBdLmRlc2MuYm1BdHRyaWJ1dGVzICYgMHgwYykgPT0gMHgwNCkgeworI2lmIDAKKwkJcHJpbnRrKEtFUk5fREVCVUcgImJOdW1FbmRwb2ludHMgMHglMDJ4IGVuZHBvaW50WzFdLmJtQXR0cmlidXRlcyAweCUwMnhcbiIKKwkJICAgICAgIEtFUk5fREVCVUcgImVuZHBvaW50WzFdLmJTeW5jaEFkZHJlc3MgMHglMDJ4IGVuZHBvaW50WzFdLmJFbmRwb2ludEFkZHJlc3MgMHglMDJ4XG4iCisJCSAgICAgICBLRVJOX0RFQlVHICJlbmRwb2ludFswXS5iU3luY2hBZGRyZXNzIDB4JTAyeFxuIiwgYWx0cy0+Yk51bUVuZHBvaW50cywKKwkJICAgICAgIGFsdHMtPmVuZHBvaW50WzFdLmJtQXR0cmlidXRlcywgYWx0cy0+ZW5kcG9pbnRbMV0uYlN5bmNoQWRkcmVzcywKKwkJICAgICAgIGFsdHMtPmVuZHBvaW50WzFdLmJFbmRwb2ludEFkZHJlc3MsIGFsdHMtPmVuZHBvaW50WzBdLmJTeW5jaEFkZHJlc3MpOworI2VuZGlmCisJCWlmIChhbHRzLT5kZXNjLmJOdW1FbmRwb2ludHMgPCAyIHx8CisJCSAgICBhbHRzLT5lbmRwb2ludFsxXS5kZXNjLmJtQXR0cmlidXRlcyAhPSAweDAxIHx8CisJCSAgICBhbHRzLT5lbmRwb2ludFsxXS5kZXNjLmJTeW5jaEFkZHJlc3MgIT0gMCB8fAorCQkgICAgYWx0cy0+ZW5kcG9pbnRbMV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzICE9IChhbHRzLT5lbmRwb2ludFswXS5kZXNjLmJTeW5jaEFkZHJlc3MgfCAweDgwKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IGRldmljZSAlZCBpbnRlcmZhY2UgJWQgYWx0c2V0dGluZyAlZCBjbGFpbXMgYXN5bmNoIG91dCAiCisJCQkgICAgICAgImJ1dCBoYXMgaW52YWxpZCBzeW5jaCBwaXBlOyB0cmVhdGluZyBhcyBhZGFwdGl2ZSBvdXRcbiIsCisJCQkgICAgICAgZGV2LT5kZXZudW0sIHUtPmludGVyZmFjZSwgZm10LT5hbHRzZXR0aW5nKTsKKwkJfSBlbHNlIHsKKwkJCXUtPnN5bmNwaXBlID0gdXNiX3Jjdmlzb2NwaXBlKGRldiwgYWx0cy0+ZW5kcG9pbnRbMV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgMHhmKTsKKwkJCXUtPnN5bmNpbnRlcnZhbCA9IGFsdHMtPmVuZHBvaW50WzFdLmRlc2MuYlJlZnJlc2g7CisJCX0KKwl9CisJaWYgKGQtPnNyYXRlIDwgZm10LT5zcmF0ZWxvKQorCQlkLT5zcmF0ZSA9IGZtdC0+c3JhdGVsbzsKKwlpZiAoZC0+c3JhdGUgPiBmbXQtPnNyYXRlaGkpCisJCWQtPnNyYXRlID0gZm10LT5zcmF0ZWhpOworCWRwcmludGsoKEtFUk5fREVCVUcgInVzYmF1ZGlvOiBzZXRfZm9ybWF0X291dDogdXNiX3NldF9pbnRlcmZhY2UgJXUgJXVcbiIsCisJCQl1LT5pbnRlcmZhY2UsIGZtdC0+YWx0c2V0dGluZykpOworCWlmICh1c2Jfc2V0X2ludGVyZmFjZShkZXYsIHUtPmludGVyZmFjZSwgZm10LT5hbHRzZXR0aW5nKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IHVzYl9zZXRfaW50ZXJmYWNlIGZhaWxlZCwgZGV2aWNlICVkIGludGVyZmFjZSAlZCBhbHRzZXR0aW5nICVkXG4iLAorCQkgICAgICAgZGV2LT5kZXZudW0sIHUtPmludGVyZmFjZSwgZm10LT5hbHRzZXR0aW5nKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoZm10LT5zcmF0ZWxvID09IGZtdC0+c3JhdGVoaSkKKwkJcmV0dXJuIDA7CisJZXAgPSB1c2JfcGlwZWVuZHBvaW50KHUtPmRhdGFwaXBlKSB8ICh1LT5kYXRhcGlwZSAmIFVTQl9ESVJfSU4pOworCS8qIGlmIGVuZHBvaW50IGhhcyBwaXRjaCBjb250cm9sLCBlbmFibGUgaXQgKi8KKwlpZiAoZm10LT5hdHRyaWJ1dGVzICYgMHgwMikgeworCQlkYXRhWzBdID0gMTsKKwkJaWYgKChyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0VORFBPSU5UfFVTQl9ESVJfT1VULCAKKwkJCQkJICAgUElUQ0hfQ09OVFJPTCA8PCA4LCBlcCwgZGF0YSwgMSwgMTAwMCkpIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZmFpbHVyZSAoZXJyb3IgJWQpIHRvIHNldCBvdXRwdXQgcGl0Y2ggY29udHJvbCBkZXZpY2UgJWQgaW50ZXJmYWNlICV1IGVuZHBvaW50IDB4JXggdG8gJXVcbiIsCisJCQkgICAgICAgcmV0LCBkZXYtPmRldm51bSwgdS0+aW50ZXJmYWNlLCBlcCwgZC0+c3JhdGUpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCS8qIGlmIGVuZHBvaW50IGhhcyBzYW1wbGluZyByYXRlIGNvbnRyb2wsIHNldCBpdCAqLworCWlmIChmbXQtPmF0dHJpYnV0ZXMgJiAweDAxKSB7CisJCWRhdGFbMF0gPSBkLT5zcmF0ZTsKKwkJZGF0YVsxXSA9IGQtPnNyYXRlID4+IDg7CisJCWRhdGFbMl0gPSBkLT5zcmF0ZSA+PiAxNjsKKwkJaWYgKChyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0VORFBPSU5UfFVTQl9ESVJfT1VULCAKKwkJCQkJICAgU0FNUExJTkdfRlJFUV9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKSkgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBmYWlsdXJlIChlcnJvciAlZCkgdG8gc2V0IG91dHB1dCBzYW1wbGluZyBmcmVxdWVuY3kgZGV2aWNlICVkIGludGVyZmFjZSAldSBlbmRwb2ludCAweCV4IHRvICV1XG4iLAorCQkJICAgICAgIHJldCwgZGV2LT5kZXZudW0sIHUtPmludGVyZmFjZSwgZXAsIGQtPnNyYXRlKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAoKHJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBHRVRfQ1VSLCBVU0JfVFlQRV9DTEFTU3xVU0JfUkVDSVBfRU5EUE9JTlR8VVNCX0RJUl9JTiwKKwkJCQkJICAgU0FNUExJTkdfRlJFUV9DT05UUk9MIDw8IDgsIGVwLCBkYXRhLCAzLCAxMDAwKSkgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBmYWlsdXJlIChlcnJvciAlZCkgdG8gZ2V0IG91dHB1dCBzYW1wbGluZyBmcmVxdWVuY3kgZGV2aWNlICVkIGludGVyZmFjZSAldSBlbmRwb2ludCAweCV4XG4iLAorCQkJICAgICAgIHJldCwgZGV2LT5kZXZudW0sIHUtPmludGVyZmFjZSwgZXApOworCQkJcmV0dXJuIC0xOworCQl9CisJCWRwcmludGsoKEtFUk5fREVCVUcgInVzYmF1ZGlvOiBzZXRfZm9ybWF0X291dDogZGV2aWNlICVkIGludGVyZmFjZSAlZCBhbHRzZXR0aW5nICVkIHNyYXRlIHJlcTogJXUgcmVhbCAldVxuIiwKKwkJICAgICAgICBkZXYtPmRldm51bSwgdS0+aW50ZXJmYWNlLCBmbXQtPmFsdHNldHRpbmcsIGQtPnNyYXRlLCBkYXRhWzBdIHwgKGRhdGFbMV0gPDwgOCkgfCAoZGF0YVsyXSA8PCAxNikpKTsKKwkJZC0+c3JhdGUgPSBkYXRhWzBdIHwgKGRhdGFbMV0gPDwgOCkgfCAoZGF0YVsyXSA8PCAxNik7CisJfQorCWRwcmludGsoKEtFUk5fREVCVUcgInVzYmF1ZGlvOiBzZXRfZm9ybWF0X291dDogVVNCIGZvcm1hdCAweCV4LCBETUEgZm9ybWF0IDB4JXggc3JhdGUgJXVcbiIsIHUtPmZvcm1hdCwgZC0+Zm9ybWF0LCBkLT5zcmF0ZSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF9mb3JtYXQoc3RydWN0IHVzYl9hdWRpb2RldiAqcywgdW5zaWduZWQgaW50IGZtb2RlLCB1bnNpZ25lZCBpbnQgZm10LCB1bnNpZ25lZCBpbnQgc3JhdGUpCit7CisJaW50IHJldDEgPSAwLCByZXQyID0gMDsKKworCWlmICghKGZtb2RlICYgKEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGZtb2RlICYgRk1PREVfUkVBRCkgeworCQl1c2Jpbl9zdG9wKHMpOworCQlzLT51c2Jpbi5kbWEucmVhZHkgPSAwOworCQlpZiAoZm10ID09IEFGTVRfUVVFUlkpCisJCQlmbXQgPSBzLT51c2Jpbi5kbWEuZm9ybWF0OworCQllbHNlCisJCQlzLT51c2Jpbi5kbWEuZm9ybWF0ID0gZm10OworCQlpZiAoIXNyYXRlKQorCQkJc3JhdGUgPSBzLT51c2Jpbi5kbWEuc3JhdGU7CisJCWVsc2UKKwkJCXMtPnVzYmluLmRtYS5zcmF0ZSA9IHNyYXRlOworCX0KKwlpZiAoZm1vZGUgJiBGTU9ERV9XUklURSkgeworCQl1c2JvdXRfc3RvcChzKTsKKwkJcy0+dXNib3V0LmRtYS5yZWFkeSA9IDA7CisJCWlmIChmbXQgPT0gQUZNVF9RVUVSWSkKKwkJCWZtdCA9IHMtPnVzYm91dC5kbWEuZm9ybWF0OworCQllbHNlCisJCQlzLT51c2JvdXQuZG1hLmZvcm1hdCA9IGZtdDsKKwkJaWYgKCFzcmF0ZSkKKwkJCXNyYXRlID0gcy0+dXNib3V0LmRtYS5zcmF0ZTsKKwkJZWxzZQorCQkJcy0+dXNib3V0LmRtYS5zcmF0ZSA9IHNyYXRlOworCX0KKwlpZiAoZm1vZGUgJiBGTU9ERV9SRUFEKQorCQlyZXQxID0gc2V0X2Zvcm1hdF9pbihzKTsKKwlpZiAoZm1vZGUgJiBGTU9ERV9XUklURSkKKwkJcmV0MiA9IHNldF9mb3JtYXRfb3V0KHMpOworCXJldHVybiByZXQxID8gcmV0MSA6IHJldDI7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IHdybWl4ZXIoc3RydWN0IHVzYl9taXhlcmRldiAqbXMsIHVuc2lnbmVkIG1peGNoLCB1bnNpZ25lZCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gbXMtPnN0YXRlLT51c2JkZXY7CisJdW5zaWduZWQgY2hhciBkYXRhWzJdOworCXN0cnVjdCBtaXhlcmNoYW5uZWwgKmNoOworCWludCB2MSwgdjIsIHYzOworCisJaWYgKG1peGNoID49IG1zLT5udW1jaCkKKwkJcmV0dXJuIC0xOworCWNoID0gJm1zLT5jaFttaXhjaF07CisJdjMgPSBjaC0+bWF4dmFsIC0gY2gtPm1pbnZhbDsKKwl2MSA9IHZhbHVlICYgMHhmZjsKKwl2MiA9ICh2YWx1ZSA+PiA4KSAmIDB4ZmY7CisJaWYgKHYxID4gMTAwKQorCQl2MSA9IDEwMDsKKwlpZiAodjIgPiAxMDApCisJCXYyID0gMTAwOworCWlmICghKGNoLT5mbGFncyAmIChNSVhGTEdfU1RFUkVPSU4gfCBNSVhGTEdfU1RFUkVPT1VUKSkpCisJCXYyID0gdjE7CisJY2gtPnZhbHVlID0gdjEgfCAodjIgPDwgOCk7CisJdjEgPSAodjEgKiB2MykgLyAxMDAgKyBjaC0+bWludmFsOworCXYyID0gKHYyICogdjMpIC8gMTAwICsgY2gtPm1pbnZhbDsKKwlzd2l0Y2ggKGNoLT5zZWxlY3RvcikgeworCWNhc2UgMDogIC8qIG1peGVyIHVuaXQgcmVxdWVzdCAqLworCQlkYXRhWzBdID0gdjE7CisJCWRhdGFbMV0gPSB2MSA+PiA4OworCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VULAorCQkJCSAgICAoY2gtPmNobnVtIDw8IDgpIHwgMSwgbXMtPmlmYWNlIHwgKGNoLT51bml0aWQgPDwgOCksIGRhdGEsIDIsIDEwMDApIDwgMCkKKwkJCWdvdG8gZXJyOworCQlpZiAoIShjaC0+ZmxhZ3MgJiAoTUlYRkxHX1NURVJFT0lOIHwgTUlYRkxHX1NURVJFT09VVCkpKQorCQkJcmV0dXJuIDA7CisJCWRhdGFbMF0gPSB2MjsKKwkJZGF0YVsxXSA9IHYyID4+IDg7CisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQsCisJCQkJICAgICgoY2gtPmNobnVtICsgISEoY2gtPmZsYWdzICYgTUlYRkxHX1NURVJFT0lOKSkgPDwgOCkgfCAoMSArICEhKGNoLT5mbGFncyAmIE1JWEZMR19TVEVSRU9PVVQpKSwKKwkJCQkgICAgbXMtPmlmYWNlIHwgKGNoLT51bml0aWQgPDwgOCksIGRhdGEsIDIsIDEwMDApIDwgMCkKKwkJCWdvdG8gZXJyOworCQlyZXR1cm4gMDsKKworCQkvKiB2YXJpb3VzIGZlYXR1cmUgdW5pdCBjb250cm9scyAqLworCWNhc2UgVk9MVU1FX0NPTlRST0w6CisJCWRhdGFbMF0gPSB2MTsKKwkJZGF0YVsxXSA9IHYxID4+IDg7CisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQsCisJCQkJICAgIChjaC0+c2VsZWN0b3IgPDwgOCkgfCBjaC0+Y2hudW0sIG1zLT5pZmFjZSB8IChjaC0+dW5pdGlkIDw8IDgpLCBkYXRhLCAyLCAxMDAwKSA8IDApCisJCQlnb3RvIGVycjsKKwkJaWYgKCEoY2gtPmZsYWdzICYgKE1JWEZMR19TVEVSRU9JTiB8IE1JWEZMR19TVEVSRU9PVVQpKSkKKwkJCXJldHVybiAwOworCQlkYXRhWzBdID0gdjI7CisJCWRhdGFbMV0gPSB2MiA+PiA4OworCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VULAorCQkJCSAgICAoY2gtPnNlbGVjdG9yIDw8IDgpIHwgKGNoLT5jaG51bSArIDEpLCBtcy0+aWZhY2UgfCAoY2gtPnVuaXRpZCA8PCA4KSwgZGF0YSwgMiwgMTAwMCkgPCAwKQorCQkJZ290byBlcnI7CisJCXJldHVybiAwOworICAgICAgICAgICAgICAgIAorCWNhc2UgQkFTU19DT05UUk9MOgorCWNhc2UgTUlEX0NPTlRST0w6CisJY2FzZSBUUkVCTEVfQ09OVFJPTDoKKwkJZGF0YVswXSA9IHYxID4+IDg7CisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQsCisJCQkJICAgIChjaC0+c2VsZWN0b3IgPDwgOCkgfCBjaC0+Y2hudW0sIG1zLT5pZmFjZSB8IChjaC0+dW5pdGlkIDw8IDgpLCBkYXRhLCAxLCAxMDAwKSA8IDApCisJCQlnb3RvIGVycjsKKwkJaWYgKCEoY2gtPmZsYWdzICYgKE1JWEZMR19TVEVSRU9JTiB8IE1JWEZMR19TVEVSRU9PVVQpKSkKKwkJCXJldHVybiAwOworCQlkYXRhWzBdID0gdjIgPj4gODsKKwkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBTRVRfQ1VSLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCwKKwkJCQkgICAgKGNoLT5zZWxlY3RvciA8PCA4KSB8IChjaC0+Y2hudW0gKyAxKSwgbXMtPmlmYWNlIHwgKGNoLT51bml0aWQgPDwgOCksIGRhdGEsIDEsIDEwMDApIDwgMCkKKwkJCWdvdG8gZXJyOworCQlyZXR1cm4gMDsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7CisKKyBlcnI6CisJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogbWl4ZXIgcmVxdWVzdCBkZXZpY2UgJXUgaWYgJXUgdW5pdCAldSBjaCAldSBzZWxlY3RvciAldSBmYWlsZWRcbiIsIAorCQlkZXYtPmRldm51bSwgbXMtPmlmYWNlLCBjaC0+dW5pdGlkLCBjaC0+Y2hudW0sIGNoLT5zZWxlY3Rvcik7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGdldF9yZWNfc3JjKHN0cnVjdCB1c2JfbWl4ZXJkZXYgKm1zKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBtcy0+c3RhdGUtPnVzYmRldjsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDAsIHJldG1hc2sgPSAwOworCXVuc2lnbmVkIGludCBpLCBqOworCXVuc2lnbmVkIGNoYXIgYnVmOworCWludCBlcnIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG1zLT5udW1jaDsgaSsrKSB7CisJCWlmICghbXMtPmNoW2ldLnNsY3R1bml0aWQgfHwgKG1hc2sgJiAoMSA8PCBpKSkpCisJCQljb250aW51ZTsKKwkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBHRVRfQ1VSLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOLAorCQkJCSAgICAwLCBtcy0+aWZhY2UgfCAobXMtPmNoW2ldLnNsY3R1bml0aWQgPDwgOCksICZidWYsIDEsIDEwMDApIDwgMCkgeworCQkJZXJyID0gLUVJTzsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHNlbGVjdG9yIHJlYWQgcmVxdWVzdCBkZXZpY2UgJXUgaWYgJXUgdW5pdCAldSBmYWlsZWRcbiIsIAorCQkJICAgICAgIGRldi0+ZGV2bnVtLCBtcy0+aWZhY2UsIG1zLT5jaFtpXS5zbGN0dW5pdGlkICYgMHhmZik7CisJCQljb250aW51ZTsKKwkJfQorCQlmb3IgKGogPSBpOyBqIDwgbXMtPm51bWNoOyBqKyspIHsKKwkJCWlmICgobXMtPmNoW2ldLnNsY3R1bml0aWQgXiBtcy0+Y2hbal0uc2xjdHVuaXRpZCkgJiAweGZmKQorCQkJCWNvbnRpbnVlOworCQkJbWFzayB8PSAxIDw8IGo7CisJCQlpZiAoYnVmID09IChtcy0+Y2hbal0uc2xjdHVuaXRpZCA+PiA4KSkKKwkJCQlyZXRtYXNrIHw9IDEgPDwgbXMtPmNoW2pdLm9zc2NoYW5uZWw7CisJCX0KKwl9CisJaWYgKGVycikKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIHJldG1hc2s7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3JlY19zcmMoc3RydWN0IHVzYl9taXhlcmRldiAqbXMsIGludCBzcmNtYXNrKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBtcy0+c3RhdGUtPnVzYmRldjsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDAsIHNtYXNrLCBibWFzazsKKwl1bnNpZ25lZCBpbnQgaSwgajsKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwlpbnQgZXJyID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBtcy0+bnVtY2g7IGkrKykgeworCQlpZiAoIW1zLT5jaFtpXS5zbGN0dW5pdGlkIHx8IChtYXNrICYgKDEgPDwgaSkpKQorCQkJY29udGludWU7CisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKKwkJCQkgICAgMCwgbXMtPmlmYWNlIHwgKG1zLT5jaFtpXS5zbGN0dW5pdGlkIDw8IDgpLCAmYnVmLCAxLCAxMDAwKSA8IDApIHsKKwkJCWVyciA9IC1FSU87CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBzZWxlY3RvciByZWFkIHJlcXVlc3QgZGV2aWNlICV1IGlmICV1IHVuaXQgJXUgZmFpbGVkXG4iLCAKKwkJCSAgICAgICBkZXYtPmRldm51bSwgbXMtPmlmYWNlLCBtcy0+Y2hbaV0uc2xjdHVuaXRpZCAmIDB4ZmYpOworCQkJY29udGludWU7CisJCX0KKwkJLyogZmlyc3QgZ2VuZXJhdGUgc21hc2sgKi8KKwkJc21hc2sgPSBibWFzayA9IDA7CisJCWZvciAoaiA9IGk7IGogPCBtcy0+bnVtY2g7IGorKykgeworCQkJaWYgKChtcy0+Y2hbaV0uc2xjdHVuaXRpZCBeIG1zLT5jaFtqXS5zbGN0dW5pdGlkKSAmIDB4ZmYpCisJCQkJY29udGludWU7CisJCQlzbWFzayB8PSAxIDw8IG1zLT5jaFtqXS5vc3NjaGFubmVsOworCQkJaWYgKGJ1ZiA9PSAobXMtPmNoW2pdLnNsY3R1bml0aWQgPj4gOCkpCisJCQkJYm1hc2sgfD0gMSA8PCBtcy0+Y2hbal0ub3NzY2hhbm5lbDsKKwkJCW1hc2sgfD0gMSA8PCBqOworCQl9CisJCS8qIGNoZWNrIGZvciBtdWx0aXBsZSBzZXQgc291cmNlcyAqLworCQlqID0gaHdlaWdodDMyKHNyY21hc2sgJiBzbWFzayk7CisJCWlmIChqID09IDApCisJCQljb250aW51ZTsKKwkJaWYgKGogPiAxKQorCQkJc3JjbWFzayAmPSB+Ym1hc2s7CisJCWZvciAoaiA9IGk7IGogPCBtcy0+bnVtY2g7IGorKykgeworCQkJaWYgKChtcy0+Y2hbaV0uc2xjdHVuaXRpZCBeIG1zLT5jaFtqXS5zbGN0dW5pdGlkKSAmIDB4ZmYpCisJCQkJY29udGludWU7CisJCQlpZiAoIShzcmNtYXNrICYgKDEgPDwgbXMtPmNoW2pdLm9zc2NoYW5uZWwpKSkKKwkJCQljb250aW51ZTsKKwkJCWJ1ZiA9IG1zLT5jaFtqXS5zbGN0dW5pdGlkID4+IDg7CisJCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIFNFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VULAorCQkJCSAgICAwLCBtcy0+aWZhY2UgfCAobXMtPmNoW2pdLnNsY3R1bml0aWQgPDwgOCksICZidWYsIDEsIDEwMDApIDwgMCkgeworCQkJCWVyciA9IC1FSU87CisJCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogc2VsZWN0b3Igd3JpdGUgcmVxdWVzdCBkZXZpY2UgJXUgaWYgJXUgdW5pdCAldSBmYWlsZWRcbiIsIAorCQkJCSAgICAgICBkZXYtPmRldm51bSwgbXMtPmlmYWNlLCBtcy0+Y2hbal0uc2xjdHVuaXRpZCAmIDB4ZmYpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJfQorCXJldHVybiBlcnIgPyAtRUlPIDogMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBzaG91bGQgYmUgY2FsbGVkIHdpdGggb3Blbl9zZW0gaG9sZCwgc28gdGhhdCBubyBuZXcgcHJvY2Vzc2VzCisgKiBsb29rIGF0IHRoZSBhdWRpbyBkZXZpY2UgdG8gYmUgZGVzdHJveWVkCisgKi8KKworc3RhdGljIHZvaWQgcmVsZWFzZShzdHJ1Y3QgdXNiX2F1ZGlvX3N0YXRlICpzKQoreworCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzOworCXN0cnVjdCB1c2JfbWl4ZXJkZXYgKm1zOworCisJcy0+Y291bnQtLTsKKwlpZiAocy0+Y291bnQpIHsKKwkJdXAoJm9wZW5fc2VtKTsKKwkJcmV0dXJuOworCX0KKwl1cCgmb3Blbl9zZW0pOworCXdha2VfdXAoJm9wZW5fd2FpdCk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZzLT5hdWRpb2xpc3QpKSB7CisJCWFzID0gbGlzdF9lbnRyeShzLT5hdWRpb2xpc3QubmV4dCwgc3RydWN0IHVzYl9hdWRpb2RldiwgbGlzdCk7CisJCWxpc3RfZGVsKCZhcy0+bGlzdCk7CisJCXVzYmluX3JlbGVhc2UoYXMpOworCQl1c2JvdXRfcmVsZWFzZShhcyk7CisJCWRtYWJ1Zl9yZWxlYXNlKCZhcy0+dXNiaW4uZG1hKTsKKwkJZG1hYnVmX3JlbGVhc2UoJmFzLT51c2JvdXQuZG1hKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2Jpbi5kdXJiWzBdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uZHVyYlsxXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYmluLnN1cmJbMF0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2Jpbi5zdXJiWzFdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNib3V0LmR1cmJbMF0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2JvdXQuZHVyYlsxXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5zdXJiWzBdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNib3V0LnN1cmJbMV0udXJiKTsKKwkJa2ZyZWUoYXMpOworCX0KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnMtPm1peGVybGlzdCkpIHsKKwkJbXMgPSBsaXN0X2VudHJ5KHMtPm1peGVybGlzdC5uZXh0LCBzdHJ1Y3QgdXNiX21peGVyZGV2LCBsaXN0KTsKKwkJbGlzdF9kZWwoJm1zLT5saXN0KTsKKwkJa2ZyZWUobXMpOworCX0KKwlrZnJlZShzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHJvZ19kbWFidWZfaW4oc3RydWN0IHVzYl9hdWRpb2RldiAqYXMpCit7CisJdXNiaW5fc3RvcChhcyk7CisJcmV0dXJuIGRtYWJ1Zl9pbml0KCZhcy0+dXNiaW4uZG1hKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHJvZ19kbWFidWZfb3V0KHN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzKQoreworCXVzYm91dF9zdG9wKGFzKTsKKwlyZXR1cm4gZG1hYnVmX2luaXQoJmFzLT51c2JvdXQuZG1hKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgdXNiX2F1ZGlvX29wZW5fbWl4ZGV2KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CisJc3RydWN0IHVzYl9taXhlcmRldiAqbXM7CisJc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqczsKKworCWRvd24oJm9wZW5fc2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHMsICZhdWRpb2RldnMsIGF1ZGlvZGV2KSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkobXMsICZzLT5taXhlcmxpc3QsIGxpc3QpIHsKKwkJCWlmIChtcy0+ZGV2X21peGVyID09IG1pbm9yKQorCQkJCWdvdG8gbWl4ZXJfZm91bmQ7CisJCX0KKwl9CisJdXAoJm9wZW5fc2VtKTsKKwlyZXR1cm4gLUVOT0RFVjsKKworIG1peGVyX2ZvdW5kOgorCWlmICghcy0+dXNiZGV2KSB7CisJCXVwKCZvcGVuX3NlbSk7CisJCXJldHVybiAtRUlPOworCX0KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBtczsKKwlzLT5jb3VudCsrOworCisJdXAoJm9wZW5fc2VtKTsKKwlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQgdXNiX2F1ZGlvX3JlbGVhc2VfbWl4ZGV2KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2JfbWl4ZXJkZXYgKm1zID0gKHN0cnVjdCB1c2JfbWl4ZXJkZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqczsKKworCWxvY2tfa2VybmVsKCk7CisJcyA9IG1zLT5zdGF0ZTsKKwlkb3duKCZvcGVuX3NlbSk7CisJcmVsZWFzZShzKTsKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNiX2F1ZGlvX2lvY3RsX21peGRldihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHVzYl9taXhlcmRldiAqbXMgPSAoc3RydWN0IHVzYl9taXhlcmRldiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgaSwgaiwgdmFsOworCWludCBfX3VzZXIgKnVzZXJfYXJnID0gKGludCBfX3VzZXIgKilhcmc7CisKKwlpZiAoIW1zLT5zdGF0ZS0+dXNiZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKyAgCisJaWYgKGNtZCA9PSBTT1VORF9NSVhFUl9JTkZPKSB7CisJCW1peGVyX2luZm8gaW5mbzsKKworCQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisJCXN0cm5jcHkoaW5mby5pZCwgIlVTQl9BVURJTyIsIHNpemVvZihpbmZvLmlkKSk7CisJCXN0cm5jcHkoaW5mby5uYW1lLCAiVVNCIEF1ZGlvIENsYXNzIERyaXZlciIsIHNpemVvZihpbmZvLm5hbWUpKTsKKwkJaW5mby5tb2RpZnlfY291bnRlciA9IG1zLT5tb2RjbnQ7CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGNtZCA9PSBTT1VORF9PTERfTUlYRVJfSU5GTykgeworCQlfb2xkX21peGVyX2luZm8gaW5mbzsKKworCQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisJCXN0cm5jcHkoaW5mby5pZCwgIlVTQl9BVURJTyIsIHNpemVvZihpbmZvLmlkKSk7CisJCXN0cm5jcHkoaW5mby5uYW1lLCAiVVNCIEF1ZGlvIENsYXNzIERyaXZlciIsIHNpemVvZihpbmZvLm5hbWUpKTsKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZpbmZvLCBzaXplb2YoaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCX0KKwlpZiAoY21kID09IE9TU19HRVRWRVJTSU9OKQorCQlyZXR1cm4gcHV0X3VzZXIoU09VTkRfVkVSU0lPTiwgdXNlcl9hcmcpOworCWlmIChfSU9DX1RZUEUoY21kKSAhPSAnTScgfHwgX0lPQ19TSVpFKGNtZCkgIT0gc2l6ZW9mKGludCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChfSU9DX0RJUihjbWQpID09IF9JT0NfUkVBRCkgeworCQlzd2l0Y2ggKF9JT0NfTlIoY21kKSkgeworCQljYXNlIFNPVU5EX01JWEVSX1JFQ1NSQzogLyogQXJnIGNvbnRhaW5zIGEgYml0IGZvciBlYWNoIHJlY29yZGluZyBzb3VyY2UgKi8KKwkJCXZhbCA9IGdldF9yZWNfc3JjKG1zKTsKKwkJCWlmICh2YWwgPCAwKQorCQkJCXJldHVybiB2YWw7CisJCQlyZXR1cm4gcHV0X3VzZXIodmFsLCB1c2VyX2FyZyk7CisKKwkJY2FzZSBTT1VORF9NSVhFUl9ERVZNQVNLOiAvKiBBcmcgY29udGFpbnMgYSBiaXQgZm9yIGVhY2ggc3VwcG9ydGVkIGRldmljZSAqLworCQkJZm9yICh2YWwgPSBpID0gMDsgaSA8IG1zLT5udW1jaDsgaSsrKQorCQkJCXZhbCB8PSAxIDw8IG1zLT5jaFtpXS5vc3NjaGFubmVsOworCQkJcmV0dXJuIHB1dF91c2VyKHZhbCwgdXNlcl9hcmcpOworCisJCWNhc2UgU09VTkRfTUlYRVJfUkVDTUFTSzogLyogQXJnIGNvbnRhaW5zIGEgYml0IGZvciBlYWNoIHN1cHBvcnRlZCByZWNvcmRpbmcgc291cmNlICovCisJCQlmb3IgKHZhbCA9IGkgPSAwOyBpIDwgbXMtPm51bWNoOyBpKyspCisJCQkJaWYgKG1zLT5jaFtpXS5zbGN0dW5pdGlkKQorCQkJCQl2YWwgfD0gMSA8PCBtcy0+Y2hbaV0ub3NzY2hhbm5lbDsKKwkJCXJldHVybiBwdXRfdXNlcih2YWwsIHVzZXJfYXJnKTsKKworCQljYXNlIFNPVU5EX01JWEVSX1NURVJFT0RFVlM6IC8qIE1peGVyIGNoYW5uZWxzIHN1cHBvcnRpbmcgc3RlcmVvICovCisJCQlmb3IgKHZhbCA9IGkgPSAwOyBpIDwgbXMtPm51bWNoOyBpKyspCisJCQkJaWYgKG1zLT5jaFtpXS5mbGFncyAmIChNSVhGTEdfU1RFUkVPSU4gfCBNSVhGTEdfU1RFUkVPT1VUKSkKKwkJCQkJdmFsIHw9IDEgPDwgbXMtPmNoW2ldLm9zc2NoYW5uZWw7CisJCQlyZXR1cm4gcHV0X3VzZXIodmFsLCB1c2VyX2FyZyk7CisJCQkKKwkJY2FzZSBTT1VORF9NSVhFUl9DQVBTOgorCQkJcmV0dXJuIHB1dF91c2VyKFNPVU5EX0NBUF9FWENMX0lOUFVULCB1c2VyX2FyZyk7CisKKwkJZGVmYXVsdDoKKwkJCWkgPSBfSU9DX05SKGNtZCk7CisJCQlpZiAoaSA+PSBTT1VORF9NSVhFUl9OUkRFVklDRVMpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlmb3IgKGogPSAwOyBqIDwgbXMtPm51bWNoOyBqKyspIHsKKwkJCQlpZiAobXMtPmNoW2pdLm9zc2NoYW5uZWwgPT0gaSkgeworCQkJCQlyZXR1cm4gcHV0X3VzZXIobXMtPmNoW2pdLnZhbHVlLCB1c2VyX2FyZyk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJaWYgKF9JT0NfRElSKGNtZCkgIT0gKF9JT0NfUkVBRHxfSU9DX1dSSVRFKSkgCisJCXJldHVybiAtRUlOVkFMOworCW1zLT5tb2RjbnQrKzsKKwlzd2l0Y2ggKF9JT0NfTlIoY21kKSkgeworCWNhc2UgU09VTkRfTUlYRVJfUkVDU1JDOiAvKiBBcmcgY29udGFpbnMgYSBiaXQgZm9yIGVhY2ggcmVjb3JkaW5nIHNvdXJjZSAqLworCQlpZiAoZ2V0X3VzZXIodmFsLCB1c2VyX2FyZykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIHNldF9yZWNfc3JjKG1zLCB2YWwpOworCisJZGVmYXVsdDoKKwkJaSA9IF9JT0NfTlIoY21kKTsKKwkJaWYgKGkgPj0gU09VTkRfTUlYRVJfTlJERVZJQ0VTKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWZvciAoaiA9IDA7IGogPCBtcy0+bnVtY2ggJiYgbXMtPmNoW2pdLm9zc2NoYW5uZWwgIT0gaTsgaisrKTsKKwkJaWYgKGogPj0gbXMtPm51bWNoKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChnZXRfdXNlcih2YWwsIHVzZXJfYXJnKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAod3JtaXhlcihtcywgaiwgdmFsKSkKKwkJCXJldHVybiAtRUlPOworCQlyZXR1cm4gcHV0X3VzZXIobXMtPmNoW2pdLnZhbHVlLCB1c2VyX2FyZyk7CisJfQorfQorCitzdGF0aWMgLypjb25zdCovIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiX21peGVyX2ZvcHMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLmxsc2VlayA9CW5vX2xsc2VlaywKKwkuaW9jdGwgPQl1c2JfYXVkaW9faW9jdGxfbWl4ZGV2LAorCS5vcGVuID0JCXVzYl9hdWRpb19vcGVuX21peGRldiwKKwkucmVsZWFzZSA9CXVzYl9hdWRpb19yZWxlYXNlX21peGRldiwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGRyYWluX291dChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcywgaW50IG5vbmJsb2NrKQoreworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNvdW50LCB0bW87CisJCisJaWYgKGFzLT51c2JvdXQuZG1hLm1hcHBlZCB8fCAhYXMtPnVzYm91dC5kbWEucmVhZHkpCisJCXJldHVybiAwOworCXVzYm91dF9zdGFydChhcyk7CisJYWRkX3dhaXRfcXVldWUoJmFzLT51c2JvdXQuZG1hLndhaXQsICZ3YWl0KTsKKwlmb3IgKDs7KSB7CisJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWNvdW50ID0gYXMtPnVzYm91dC5kbWEuY291bnQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWlmIChjb3VudCA8PSAwKQorCQkJYnJlYWs7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCWJyZWFrOworCQlpZiAobm9uYmxvY2spIHsKKwkJCXJlbW92ZV93YWl0X3F1ZXVlKCZhcy0+dXNib3V0LmRtYS53YWl0LCAmd2FpdCk7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQl0bW8gPSAzICogSFogKiBjb3VudCAvIGFzLT51c2JvdXQuZG1hLnNyYXRlOworCQl0bW8gPj49IEFGTVRfQllURVNTSElGVChhcy0+dXNib3V0LmRtYS5mb3JtYXQpOworCQlpZiAoIXNjaGVkdWxlX3RpbWVvdXQodG1vICsgMSkpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ1c2JhdWRpbzogZG1hIHRpbWVkIG91dD8/XG4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJlbW92ZV93YWl0X3F1ZXVlKCZhcy0+dXNib3V0LmRtYS53YWl0LCAmd2FpdCk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3NpemVfdCB1c2JfYXVkaW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHVzYl9hdWRpb2RldiAqYXMgPSAoc3RydWN0IHVzYl9hdWRpb2RldiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwlzc2l6ZV90IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgcHRyOworCWludCBjbnQsIGVycjsKKworCWlmIChhcy0+dXNiaW4uZG1hLm1hcHBlZCkKKwkJcmV0dXJuIC1FTlhJTzsKKwlpZiAoIWFzLT51c2Jpbi5kbWEucmVhZHkgJiYgKHJldCA9IHByb2dfZG1hYnVmX2luKGFzKSkpCisJCXJldHVybiByZXQ7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBidWZmZXIsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYWRkX3dhaXRfcXVldWUoJmFzLT51c2Jpbi5kbWEud2FpdCwgJndhaXQpOworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCXB0ciA9IGFzLT51c2Jpbi5kbWEucmRwdHI7CisJCWNudCA9IGFzLT51c2Jpbi5kbWEuY291bnQ7CisJCS8qIHNldCB0YXNrIHN0YXRlIGVhcmx5IHRvIGF2b2lkIHdha2V1cCByYWNlcyAqLworCQlpZiAoY250IDw9IDApCisJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWlmIChjbnQgPiBjb3VudCkKKwkJCWNudCA9IGNvdW50OworCQlpZiAoY250IDw9IDApIHsKKwkJCWlmICh1c2Jpbl9zdGFydChhcykpIHsKKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0ID0gLUVOT0RFVjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJCWlmICghcmV0KQorCQkJCQlyZXQgPSAtRUFHQUlOOworCQkJCWJyZWFrOworCQkJfQorCQkJc2NoZWR1bGUoKTsKKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCWlmICghcmV0KQorCQkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQkJYnJlYWs7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoKGVyciA9IGRtYWJ1Zl9jb3B5b3V0X3VzZXIoJmFzLT51c2Jpbi5kbWEsIHB0ciwgYnVmZmVyLCBjbnQpKSkgeworCQkJaWYgKCFyZXQpCisJCQkJcmV0ID0gZXJyOworCQkJYnJlYWs7CisJCX0KKwkJcHRyICs9IGNudDsKKwkJaWYgKHB0ciA+PSBhcy0+dXNiaW4uZG1hLmRtYXNpemUpCisJCQlwdHIgLT0gYXMtPnVzYmluLmRtYS5kbWFzaXplOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJYXMtPnVzYmluLmRtYS5yZHB0ciA9IHB0cjsKKwkJYXMtPnVzYmluLmRtYS5jb3VudCAtPSBjbnQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWNvdW50IC09IGNudDsKKwkJYnVmZmVyICs9IGNudDsKKwkJcmV0ICs9IGNudDsKKwl9CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZhcy0+dXNiaW4uZG1hLndhaXQsICZ3YWl0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCB1c2JfYXVkaW9fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzID0gKHN0cnVjdCB1c2JfYXVkaW9kZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJc3NpemVfdCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHB0cjsKKwl1bnNpZ25lZCBpbnQgc3RhcnRfdGhyOworCWludCBjbnQsIGVycjsKKworCWlmIChhcy0+dXNib3V0LmRtYS5tYXBwZWQpCisJCXJldHVybiAtRU5YSU87CisJaWYgKCFhcy0+dXNib3V0LmRtYS5yZWFkeSAmJiAocmV0ID0gcHJvZ19kbWFidWZfb3V0KGFzKSkpCisJCXJldHVybiByZXQ7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGJ1ZmZlciwgY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlzdGFydF90aHIgPSAoYXMtPnVzYm91dC5kbWEuc3JhdGUgPDwgQUZNVF9CWVRFU1NISUZUKGFzLT51c2JvdXQuZG1hLmZvcm1hdCkpIC8gKDEwMDAgLyAoMyAqIERFU0NGUkFNRVMpKTsKKwlhZGRfd2FpdF9xdWV1ZSgmYXMtPnVzYm91dC5kbWEud2FpdCwgJndhaXQpOworCXdoaWxlIChjb3VudCA+IDApIHsKKyNpZiAwCisJCXByaW50ayhLRVJOX0RFQlVHICJ1c2JfYXVkaW9fd3JpdGU6IGNvdW50ICV1IGRtYTogY291bnQgJXUgcmRwdHIgJXUgd3JwdHIgJXUgZG1hc2l6ZSAldSBmcmFnc2l6ZSAldSBmbGFncyAweCUwMnggdGFza3N0IDB4JWx4XG4iLAorCQkgICAgICAgY291bnQsIGFzLT51c2JvdXQuZG1hLmNvdW50LCBhcy0+dXNib3V0LmRtYS5yZHB0ciwgYXMtPnVzYm91dC5kbWEud3JwdHIsIGFzLT51c2JvdXQuZG1hLmRtYXNpemUsIGFzLT51c2JvdXQuZG1hLmZyYWdzaXplLAorCQkgICAgICAgYXMtPnVzYm91dC5mbGFncywgY3VycmVudC0+c3RhdGUpOworI2VuZGlmCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlpZiAoYXMtPnVzYm91dC5kbWEuY291bnQgPCAwKSB7CisJCQlhcy0+dXNib3V0LmRtYS5jb3VudCA9IDA7CisJCQlhcy0+dXNib3V0LmRtYS5yZHB0ciA9IGFzLT51c2JvdXQuZG1hLndycHRyOworCQl9CisJCXB0ciA9IGFzLT51c2JvdXQuZG1hLndycHRyOworCQljbnQgPSBhcy0+dXNib3V0LmRtYS5kbWFzaXplIC0gYXMtPnVzYm91dC5kbWEuY291bnQ7CisJCS8qIHNldCB0YXNrIHN0YXRlIGVhcmx5IHRvIGF2b2lkIHdha2V1cCByYWNlcyAqLworCQlpZiAoY250IDw9IDApCisJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWlmIChjbnQgPiBjb3VudCkKKwkJCWNudCA9IGNvdW50OworCQlpZiAoY250IDw9IDApIHsKKwkJCWlmICh1c2JvdXRfc3RhcnQoYXMpKSB7CisJCQkJaWYgKCFyZXQpCisJCQkJCXJldCA9IC1FTk9ERVY7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0ID0gLUVBR0FJTjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXNjaGVkdWxlKCk7CisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0ID0gLUVSRVNUQVJUU1lTOworCQkJCWJyZWFrOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJaWYgKChlcnIgPSBkbWFidWZfY29weWluX3VzZXIoJmFzLT51c2JvdXQuZG1hLCBwdHIsIGJ1ZmZlciwgY250KSkpIHsKKwkJCWlmICghcmV0KQorCQkJCXJldCA9IGVycjsKKwkJCWJyZWFrOworCQl9CisJCXB0ciArPSBjbnQ7CisJCWlmIChwdHIgPj0gYXMtPnVzYm91dC5kbWEuZG1hc2l6ZSkKKwkJCXB0ciAtPSBhcy0+dXNib3V0LmRtYS5kbWFzaXplOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJYXMtPnVzYm91dC5kbWEud3JwdHIgPSBwdHI7CisJCWFzLT51c2JvdXQuZG1hLmNvdW50ICs9IGNudDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJY291bnQgLT0gY250OworCQlidWZmZXIgKz0gY250OworCQlyZXQgKz0gY250OworCQlpZiAoYXMtPnVzYm91dC5kbWEuY291bnQgPj0gc3RhcnRfdGhyICYmIHVzYm91dF9zdGFydChhcykpIHsKKwkJCWlmICghcmV0KQorCQkJCXJldCA9IC1FTk9ERVY7CisJCQlicmVhazsKKwkJfQorCX0KKwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJmFzLT51c2JvdXQuZG1hLndhaXQsICZ3YWl0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBDYWxsZWQgd2l0aG91dCB0aGUga2VybmVsIGxvY2sgLSBmaW5lICovCitzdGF0aWMgdW5zaWduZWQgaW50IHVzYl9hdWRpb19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCit7CisJc3RydWN0IHVzYl9hdWRpb2RldiAqYXMgPSAoc3RydWN0IHVzYl9hdWRpb2RldiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKKworCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgeworCQlpZiAoIWFzLT51c2JvdXQuZG1hLnJlYWR5KQorCQkJcHJvZ19kbWFidWZfb3V0KGFzKTsKKwkJcG9sbF93YWl0KGZpbGUsICZhcy0+dXNib3V0LmRtYS53YWl0LCB3YWl0KTsKKwl9CisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKKwkJaWYgKCFhcy0+dXNiaW4uZG1hLnJlYWR5KQorCQkJcHJvZ19kbWFidWZfaW4oYXMpOworCQlwb2xsX3dhaXQoZmlsZSwgJmFzLT51c2Jpbi5kbWEud2FpdCwgd2FpdCk7CisJfQorCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7CisJCWlmIChhcy0+dXNiaW4uZG1hLmNvdW50ID49IChzaWduZWQpYXMtPnVzYmluLmRtYS5mcmFnc2l6ZSkKKwkJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKKwl9CisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7CisJCWlmIChhcy0+dXNib3V0LmRtYS5tYXBwZWQpIHsKKwkJCWlmIChhcy0+dXNib3V0LmRtYS5jb3VudCA+PSAoc2lnbmVkKWFzLT51c2JvdXQuZG1hLmZyYWdzaXplKSAKKwkJCQltYXNrIHw9IFBPTExPVVQgfCBQT0xMV1JOT1JNOworCQl9IGVsc2UgeworCQkJaWYgKChzaWduZWQpYXMtPnVzYm91dC5kbWEuZG1hc2l6ZSA+PSBhcy0+dXNib3V0LmRtYS5jb3VudCArIChzaWduZWQpYXMtPnVzYm91dC5kbWEuZnJhZ3NpemUpCisJCQkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCXJldHVybiBtYXNrOworfQorCitzdGF0aWMgaW50IHVzYl9hdWRpb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphcyA9IChzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkbWFidWYgKmRiOworCWludCByZXQgPSAtRUlOVkFMOworCisJbG9ja19rZXJuZWwoKTsKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSB7CisJCWlmICgocmV0ID0gcHJvZ19kbWFidWZfb3V0KGFzKSkgIT0gMCkKKwkJCWdvdG8gb3V0OworCQlkYiA9ICZhcy0+dXNib3V0LmRtYTsKKwl9IGVsc2UgaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9SRUFEKSB7CisJCWlmICgocmV0ID0gcHJvZ19kbWFidWZfaW4oYXMpKSAhPSAwKQorCQkJZ290byBvdXQ7CisJCWRiID0gJmFzLT51c2Jpbi5kbWE7CisJfSBlbHNlCisJCWdvdG8gb3V0OworCisJcmV0ID0gLUVJTlZBTDsKKwlpZiAodm1hLT52bV9wZ29mZiAhPSAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IGRtYWJ1Zl9tbWFwKHZtYSwgZGIsICB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fcGFnZV9wcm90KTsKK291dDoKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB1c2JfYXVkaW9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzID0gKHN0cnVjdCB1c2JfYXVkaW9kZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqcyA9IGFzLT5zdGF0ZTsKKwlpbnQgX191c2VyICp1c2VyX2FyZyA9IChpbnQgX191c2VyICopYXJnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYXVkaW9fYnVmX2luZm8gYWJpbmZvOworCWNvdW50X2luZm8gY2luZm87CisJaW50IHZhbCA9IDA7CisJaW50IHZhbDIsIG1hcHBlZCwgcmV0OworCisJaWYgKCFzLT51c2JkZXYpCisJCXJldHVybiAtRUlPOworCW1hcHBlZCA9ICgoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpICYmIGFzLT51c2JvdXQuZG1hLm1hcHBlZCkgfHwKKwkJKChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSAmJiBhcy0+dXNiaW4uZG1hLm1hcHBlZCk7CisjaWYgMAorCWlmIChhcmcpCisJCWdldF91c2VyKHZhbCwgKGludCAqKWFyZyk7CisJcHJpbnRrKEtFUk5fREVCVUcgInVzYmF1ZGlvOiB1c2JfYXVkaW9faW9jdGwgY21kPSV4IGFyZz0lbHggKmFyZz0lZFxuIiwgY21kLCBhcmcsIHZhbCkKKyNlbmRpZgorCXN3aXRjaCAoY21kKSB7CisJY2FzZSBPU1NfR0VUVkVSU0lPTjoKKwkJcmV0dXJuIHB1dF91c2VyKFNPVU5EX1ZFUlNJT04sIHVzZXJfYXJnKTsKKworCWNhc2UgU05EQ1RMX0RTUF9TWU5DOgorCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCisJCQlyZXR1cm4gZHJhaW5fb3V0KGFzLCAwLypmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyovKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFNORENUTF9EU1BfU0VURFVQTEVYOgorCQlyZXR1cm4gMDsKKworCWNhc2UgU05EQ1RMX0RTUF9HRVRDQVBTOgorCQlyZXR1cm4gcHV0X3VzZXIoRFNQX0NBUF9EVVBMRVggfCBEU1BfQ0FQX1JFQUxUSU1FIHwgRFNQX0NBUF9UUklHR0VSIHwgCisJCQkJRFNQX0NBUF9NTUFQIHwgRFNQX0NBUF9CQVRDSCwgdXNlcl9hcmcpOworCisJY2FzZSBTTkRDVExfRFNQX1JFU0VUOgorCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKKwkJCXVzYm91dF9zdG9wKGFzKTsKKwkJCWFzLT51c2JvdXQuZG1hLnJkcHRyID0gYXMtPnVzYm91dC5kbWEud3JwdHIgPSBhcy0+dXNib3V0LmRtYS5jb3VudCA9IGFzLT51c2JvdXQuZG1hLnRvdGFsX2J5dGVzID0gMDsKKwkJfQorCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgeworCQkJdXNiaW5fc3RvcChhcyk7CisJCQlhcy0+dXNiaW4uZG1hLnJkcHRyID0gYXMtPnVzYmluLmRtYS53cnB0ciA9IGFzLT51c2Jpbi5kbWEuY291bnQgPSBhcy0+dXNiaW4uZG1hLnRvdGFsX2J5dGVzID0gMDsKKwkJfQorCQlyZXR1cm4gMDsKKworCWNhc2UgU05EQ1RMX0RTUF9TUEVFRDoKKwkJaWYgKGdldF91c2VyKHZhbCwgdXNlcl9hcmcpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmICh2YWwgPj0gMCkgeworCQkJaWYgKHZhbCA8IDQwMDApCisJCQkJdmFsID0gNDAwMDsKKwkJCWlmICh2YWwgPiAxMDAwMDApCisJCQkJdmFsID0gMTAwMDAwOworCQkJaWYgKHNldF9mb3JtYXQoYXMsIGZpbGUtPmZfbW9kZSwgQUZNVF9RVUVSWSwgdmFsKSkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlyZXR1cm4gcHV0X3VzZXIoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpID8gCisJCQkJYXMtPnVzYmluLmRtYS5zcmF0ZSA6IGFzLT51c2JvdXQuZG1hLnNyYXRlLAorCQkJCXVzZXJfYXJnKTsKKworCWNhc2UgU05EQ1RMX0RTUF9TVEVSRU86CisJCWlmIChnZXRfdXNlcih2YWwsIHVzZXJfYXJnKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQl2YWwyID0gKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpID8gYXMtPnVzYmluLmRtYS5mb3JtYXQgOiBhcy0+dXNib3V0LmRtYS5mb3JtYXQ7CisJCWlmICh2YWwpCisJCQl2YWwyIHw9IEFGTVRfU1RFUkVPOworCQllbHNlCisJCQl2YWwyICY9IH5BRk1UX1NURVJFTzsKKwkJaWYgKHNldF9mb3JtYXQoYXMsIGZpbGUtPmZfbW9kZSwgdmFsMiwgMCkpCisJCQlyZXR1cm4gLUVJTzsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFNORENUTF9EU1BfQ0hBTk5FTFM6CisJCWlmIChnZXRfdXNlcih2YWwsIHVzZXJfYXJnKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAodmFsICE9IDApIHsKKwkJCXZhbDIgPSAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgPyBhcy0+dXNiaW4uZG1hLmZvcm1hdCA6IGFzLT51c2JvdXQuZG1hLmZvcm1hdDsKKwkJCWlmICh2YWwgPT0gMSkKKwkJCQl2YWwyICY9IH5BRk1UX1NURVJFTzsKKwkJCWVsc2UKKwkJCQl2YWwyIHw9IEFGTVRfU1RFUkVPOworCQkJaWYgKHNldF9mb3JtYXQoYXMsIGZpbGUtPmZfbW9kZSwgdmFsMiwgMCkpCisJCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJdmFsMiA9IChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSA/IGFzLT51c2Jpbi5kbWEuZm9ybWF0IDogYXMtPnVzYm91dC5kbWEuZm9ybWF0OworCQlyZXR1cm4gcHV0X3VzZXIoQUZNVF9JU1NURVJFTyh2YWwyKSA/IDIgOiAxLCB1c2VyX2FyZyk7CisKKwljYXNlIFNORENUTF9EU1BfR0VURk1UUzogLyogUmV0dXJucyBhIG1hc2sgKi8KKwkJcmV0dXJuIHB1dF91c2VyKEFGTVRfVTggfCBBRk1UX1UxNl9MRSB8IEFGTVRfVTE2X0JFIHwKKwkJCQlBRk1UX1M4IHwgQUZNVF9TMTZfTEUgfCBBRk1UX1MxNl9CRSwgdXNlcl9hcmcpOworCisJY2FzZSBTTkRDVExfRFNQX1NFVEZNVDogLyogU2VsZWN0cyBPTkUgZm10Ki8KKwkJaWYgKGdldF91c2VyKHZhbCwgdXNlcl9hcmcpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmICh2YWwgIT0gQUZNVF9RVUVSWSkgeworCQkJaWYgKGh3ZWlnaHQzMih2YWwpICE9IDEpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAoISh2YWwgJiAoQUZNVF9VOCB8IEFGTVRfVTE2X0xFIHwgQUZNVF9VMTZfQkUgfAorCQkJCSAgICAgQUZNVF9TOCB8IEFGTVRfUzE2X0xFIHwgQUZNVF9TMTZfQkUpKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXZhbDIgPSAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgPyBhcy0+dXNiaW4uZG1hLmZvcm1hdCA6IGFzLT51c2JvdXQuZG1hLmZvcm1hdDsKKwkJCXZhbCB8PSB2YWwyICYgQUZNVF9TVEVSRU87CisJCQlpZiAoc2V0X2Zvcm1hdChhcywgZmlsZS0+Zl9tb2RlLCB2YWwsIDApKQorCQkJCXJldHVybiAtRUlPOworCQl9CisJCXZhbDIgPSAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgPyBhcy0+dXNiaW4uZG1hLmZvcm1hdCA6IGFzLT51c2JvdXQuZG1hLmZvcm1hdDsKKwkJcmV0dXJuIHB1dF91c2VyKHZhbDIgJiB+QUZNVF9TVEVSRU8sIHVzZXJfYXJnKTsKKworCWNhc2UgU05EQ1RMX0RTUF9QT1NUOgorCQlyZXR1cm4gMDsKKworCWNhc2UgU05EQ1RMX0RTUF9HRVRUUklHR0VSOgorCQl2YWwgPSAwOworCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCAmJiBhcy0+dXNiaW4uZmxhZ3MgJiBGTEdfUlVOTklORykgCisJCQl2YWwgfD0gUENNX0VOQUJMRV9JTlBVVDsKKwkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFICYmIGFzLT51c2JvdXQuZmxhZ3MgJiBGTEdfUlVOTklORykgCisJCQl2YWwgfD0gUENNX0VOQUJMRV9PVVRQVVQ7CisJCXJldHVybiBwdXRfdXNlcih2YWwsIHVzZXJfYXJnKTsKKworCWNhc2UgU05EQ1RMX0RTUF9TRVRUUklHR0VSOgorCQlpZiAoZ2V0X3VzZXIodmFsLCB1c2VyX2FyZykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKKwkJCWlmICh2YWwgJiBQQ01fRU5BQkxFX0lOUFVUKSB7CisJCQkJaWYgKCFhcy0+dXNiaW4uZG1hLnJlYWR5ICYmIChyZXQgPSBwcm9nX2RtYWJ1Zl9pbihhcykpKQorCQkJCQlyZXR1cm4gcmV0OworCQkJCWlmICh1c2Jpbl9zdGFydChhcykpCisJCQkJCXJldHVybiAtRU5PREVWOworCQkJfSBlbHNlCisJCQkJdXNiaW5fc3RvcChhcyk7CisJCX0KKwkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7CisJCQlpZiAodmFsICYgUENNX0VOQUJMRV9PVVRQVVQpIHsKKwkJCQlpZiAoIWFzLT51c2JvdXQuZG1hLnJlYWR5ICYmIChyZXQgPSBwcm9nX2RtYWJ1Zl9vdXQoYXMpKSkKKwkJCQkJcmV0dXJuIHJldDsKKwkJCQlpZiAodXNib3V0X3N0YXJ0KGFzKSkKKwkJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9IGVsc2UKKwkJCQl1c2JvdXRfc3RvcChhcyk7CisJCX0KKwkJcmV0dXJuIDA7CisKKwljYXNlIFNORENUTF9EU1BfR0VUT1NQQUNFOgorCQlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCEoYXMtPnVzYm91dC5mbGFncyAmIEZMR19SVU5OSU5HKSAmJiAodmFsID0gcHJvZ19kbWFidWZfb3V0KGFzKSkgIT0gMCkKKwkJCXJldHVybiB2YWw7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlhYmluZm8uZnJhZ3NpemUgPSBhcy0+dXNib3V0LmRtYS5mcmFnc2l6ZTsKKwkJYWJpbmZvLmJ5dGVzID0gYXMtPnVzYm91dC5kbWEuZG1hc2l6ZSAtIGFzLT51c2JvdXQuZG1hLmNvdW50OworCQlhYmluZm8uZnJhZ3N0b3RhbCA9IGFzLT51c2JvdXQuZG1hLm51bWZyYWc7CisJCWFiaW5mby5mcmFnbWVudHMgPSBhYmluZm8uYnl0ZXMgPj4gYXMtPnVzYm91dC5kbWEuZnJhZ3NoaWZ0OyAgICAgIAorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmFiaW5mbywgc2l6ZW9mKGFiaW5mbykpID8gLUVGQVVMVCA6IDA7CisKKwljYXNlIFNORENUTF9EU1BfR0VUSVNQQUNFOgorCQlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoIShhcy0+dXNiaW4uZmxhZ3MgJiBGTEdfUlVOTklORykgJiYgKHZhbCA9IHByb2dfZG1hYnVmX2luKGFzKSkgIT0gMCkKKwkJCXJldHVybiB2YWw7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlhYmluZm8uZnJhZ3NpemUgPSBhcy0+dXNiaW4uZG1hLmZyYWdzaXplOworCQlhYmluZm8uYnl0ZXMgPSBhcy0+dXNiaW4uZG1hLmNvdW50OworCQlhYmluZm8uZnJhZ3N0b3RhbCA9IGFzLT51c2Jpbi5kbWEubnVtZnJhZzsKKwkJYWJpbmZvLmZyYWdtZW50cyA9IGFiaW5mby5ieXRlcyA+PiBhcy0+dXNiaW4uZG1hLmZyYWdzaGlmdDsgICAgICAKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZhYmluZm8sIHNpemVvZihhYmluZm8pKSA/IC1FRkFVTFQgOiAwOworCQkKKwljYXNlIFNORENUTF9EU1BfTk9OQkxPQ0s6CisJCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFNORENUTF9EU1BfR0VUT0RFTEFZOgorCQlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCXZhbCA9IGFzLT51c2JvdXQuZG1hLmNvdW50OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcHV0X3VzZXIodmFsLCB1c2VyX2FyZyk7CisKKwljYXNlIFNORENUTF9EU1BfR0VUSVBUUjoKKwkJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWNpbmZvLmJ5dGVzID0gYXMtPnVzYmluLmRtYS50b3RhbF9ieXRlczsKKwkJY2luZm8uYmxvY2tzID0gYXMtPnVzYmluLmRtYS5jb3VudCA+PiBhcy0+dXNiaW4uZG1hLmZyYWdzaGlmdDsKKwkJY2luZm8ucHRyID0gYXMtPnVzYmluLmRtYS53cnB0cjsKKwkJaWYgKGFzLT51c2Jpbi5kbWEubWFwcGVkKQorCQkJYXMtPnVzYmluLmRtYS5jb3VudCAmPSBhcy0+dXNiaW4uZG1hLmZyYWdzaXplLTE7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmY2luZm8sIHNpemVvZihjaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCisJY2FzZSBTTkRDVExfRFNQX0dFVE9QVFI6CisJCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXMtPmxvY2ssIGZsYWdzKTsKKwkJY2luZm8uYnl0ZXMgPSBhcy0+dXNib3V0LmRtYS50b3RhbF9ieXRlczsKKwkJY2luZm8uYmxvY2tzID0gYXMtPnVzYm91dC5kbWEuY291bnQgPj4gYXMtPnVzYm91dC5kbWEuZnJhZ3NoaWZ0OworCQljaW5mby5wdHIgPSBhcy0+dXNib3V0LmRtYS5yZHB0cjsKKwkJaWYgKGFzLT51c2JvdXQuZG1hLm1hcHBlZCkKKwkJCWFzLT51c2JvdXQuZG1hLmNvdW50ICY9IGFzLT51c2JvdXQuZG1hLmZyYWdzaXplLTE7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzLT5sb2NrLCBmbGFncyk7CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmY2luZm8sIHNpemVvZihjaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCisgICAgICAgY2FzZSBTTkRDVExfRFNQX0dFVEJMS1NJWkU6CisJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgeworCQkJaWYgKCh2YWwgPSBwcm9nX2RtYWJ1Zl9vdXQoYXMpKSkKKwkJCQlyZXR1cm4gdmFsOworCQkJcmV0dXJuIHB1dF91c2VyKGFzLT51c2JvdXQuZG1hLmZyYWdzaXplLCB1c2VyX2FyZyk7CisJCX0KKwkJaWYgKCh2YWwgPSBwcm9nX2RtYWJ1Zl9pbihhcykpKQorCQkJcmV0dXJuIHZhbDsKKwkJcmV0dXJuIHB1dF91c2VyKGFzLT51c2Jpbi5kbWEuZnJhZ3NpemUsIHVzZXJfYXJnKTsKKworCWNhc2UgU05EQ1RMX0RTUF9TRVRGUkFHTUVOVDoKKwkJaWYgKGdldF91c2VyKHZhbCwgdXNlcl9hcmcpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7CisJCQlhcy0+dXNiaW4uZG1hLm9zc2ZyYWdzaGlmdCA9IHZhbCAmIDB4ZmZmZjsKKwkJCWFzLT51c2Jpbi5kbWEub3NzbWF4ZnJhZ3MgPSAodmFsID4+IDE2KSAmIDB4ZmZmZjsKKwkJCWlmIChhcy0+dXNiaW4uZG1hLm9zc2ZyYWdzaGlmdCA8IDQpCisJCQkJYXMtPnVzYmluLmRtYS5vc3NmcmFnc2hpZnQgPSA0OworCQkJaWYgKGFzLT51c2Jpbi5kbWEub3NzZnJhZ3NoaWZ0ID4gMTUpCisJCQkJYXMtPnVzYmluLmRtYS5vc3NmcmFnc2hpZnQgPSAxNTsKKwkJCWlmIChhcy0+dXNiaW4uZG1hLm9zc21heGZyYWdzIDwgNCkKKwkJCQlhcy0+dXNiaW4uZG1hLm9zc21heGZyYWdzID0gNDsKKwkJfQorCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKKwkJCWFzLT51c2JvdXQuZG1hLm9zc2ZyYWdzaGlmdCA9IHZhbCAmIDB4ZmZmZjsKKwkJCWFzLT51c2JvdXQuZG1hLm9zc21heGZyYWdzID0gKHZhbCA+PiAxNikgJiAweGZmZmY7CisJCQlpZiAoYXMtPnVzYm91dC5kbWEub3NzZnJhZ3NoaWZ0IDwgNCkKKwkJCQlhcy0+dXNib3V0LmRtYS5vc3NmcmFnc2hpZnQgPSA0OworCQkJaWYgKGFzLT51c2JvdXQuZG1hLm9zc2ZyYWdzaGlmdCA+IDE1KQorCQkJCWFzLT51c2JvdXQuZG1hLm9zc2ZyYWdzaGlmdCA9IDE1OworCQkJaWYgKGFzLT51c2JvdXQuZG1hLm9zc21heGZyYWdzIDwgNCkKKwkJCQlhcy0+dXNib3V0LmRtYS5vc3NtYXhmcmFncyA9IDQ7CisJCX0KKwkJcmV0dXJuIDA7CisKKwljYXNlIFNORENUTF9EU1BfU1VCRElWSURFOgorCQlpZiAoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQgJiYgYXMtPnVzYmluLmRtYS5zdWJkaXZpc2lvbikgfHwKKwkJICAgIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSAmJiBhcy0+dXNib3V0LmRtYS5zdWJkaXZpc2lvbikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGdldF91c2VyKHZhbCwgdXNlcl9hcmcpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmICh2YWwgIT0gMSAmJiB2YWwgIT0gMiAmJiB2YWwgIT0gNCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkKKwkJCWFzLT51c2Jpbi5kbWEuc3ViZGl2aXNpb24gPSB2YWw7CisJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkKKwkJCWFzLT51c2JvdXQuZG1hLnN1YmRpdmlzaW9uID0gdmFsOworCQlyZXR1cm4gMDsKKworCWNhc2UgU09VTkRfUENNX1JFQURfUkFURToKKwkJcmV0dXJuIHB1dF91c2VyKChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSA/IAorCQkJCWFzLT51c2Jpbi5kbWEuc3JhdGUgOiBhcy0+dXNib3V0LmRtYS5zcmF0ZSwKKwkJCQl1c2VyX2FyZyk7CisKKwljYXNlIFNPVU5EX1BDTV9SRUFEX0NIQU5ORUxTOgorCQl2YWwyID0gKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpID8gYXMtPnVzYmluLmRtYS5mb3JtYXQgOiBhcy0+dXNib3V0LmRtYS5mb3JtYXQ7CisJCXJldHVybiBwdXRfdXNlcihBRk1UX0lTU1RFUkVPKHZhbDIpID8gMiA6IDEsIHVzZXJfYXJnKTsKKworCWNhc2UgU09VTkRfUENNX1JFQURfQklUUzoKKwkJdmFsMiA9IChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSA/IGFzLT51c2Jpbi5kbWEuZm9ybWF0IDogYXMtPnVzYm91dC5kbWEuZm9ybWF0OworCQlyZXR1cm4gcHV0X3VzZXIoQUZNVF9JUzE2QklUKHZhbDIpID8gMTYgOiA4LCB1c2VyX2FyZyk7CisKKwljYXNlIFNPVU5EX1BDTV9XUklURV9GSUxURVI6CisJY2FzZSBTTkRDVExfRFNQX1NFVFNZTkNSTzoKKwljYXNlIFNPVU5EX1BDTV9SRUFEX0ZJTFRFUjoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRwcmludGsoKEtFUk5fREVCVUcgInVzYmF1ZGlvOiB1c2JfYXVkaW9faW9jdGwgLSBubyBjb21tYW5kIGZvdW5kXG4iKSk7CisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworc3RhdGljIGludCB1c2JfYXVkaW9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzOworCXN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnM7CisKKwlmb3IgKDs7KSB7CisJCWRvd24oJm9wZW5fc2VtKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShzLCAmYXVkaW9kZXZzLCBhdWRpb2RldikgeworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShhcywgJnMtPmF1ZGlvbGlzdCwgbGlzdCkgeworCQkJCWlmICghKChhcy0+ZGV2X2F1ZGlvIF4gbWlub3IpICYgfjB4ZikpCisJCQkJCWdvdG8gZGV2aWNlX2ZvdW5kOworCQkJfQorCQl9CisJCXVwKCZvcGVuX3NlbSk7CisJCXJldHVybiAtRU5PREVWOworCisJZGV2aWNlX2ZvdW5kOgorCQlpZiAoIXMtPnVzYmRldikgeworCQkJdXAoJm9wZW5fc2VtKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCS8qIHdhaXQgZm9yIGRldmljZSB0byBiZWNvbWUgZnJlZSAqLworCQlpZiAoIShhcy0+b3Blbl9tb2RlICYgZmlsZS0+Zl9tb2RlKSkKKwkJCWJyZWFrOworCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCXVwKCZvcGVuX3NlbSk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJYWRkX3dhaXRfcXVldWUoJm9wZW5fd2FpdCwgJndhaXQpOworCQl1cCgmb3Blbl9zZW0pOworCQlzY2hlZHVsZSgpOworCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCXJlbW92ZV93YWl0X3F1ZXVlKCZvcGVuX3dhaXQsICZ3YWl0KTsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCisJCWFzLT51c2Jpbi5kbWEub3NzZnJhZ3NoaWZ0ID0gYXMtPnVzYmluLmRtYS5vc3NtYXhmcmFncyA9IGFzLT51c2Jpbi5kbWEuc3ViZGl2aXNpb24gPSAwOworCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkKKwkJYXMtPnVzYm91dC5kbWEub3NzZnJhZ3NoaWZ0ID0gYXMtPnVzYm91dC5kbWEub3NzbWF4ZnJhZ3MgPSBhcy0+dXNib3V0LmRtYS5zdWJkaXZpc2lvbiA9IDA7CisJaWYgKHNldF9mb3JtYXQoYXMsIGZpbGUtPmZfbW9kZSwgKChtaW5vciAmIDB4ZikgPT0gU05EX0RFVl9EU1AxNikgPyBBRk1UX1MxNl9MRSA6IEFGTVRfVTggLyogQUZNVF9VTEFXICovLCA4MDAwKSkgeworCQl1cCgmb3Blbl9zZW0pOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gYXM7CisJYXMtPm9wZW5fbW9kZSB8PSBmaWxlLT5mX21vZGUgJiAoRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFKTsKKwlzLT5jb3VudCsrOworCXVwKCZvcGVuX3NlbSk7CisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworfQorCitzdGF0aWMgaW50IHVzYl9hdWRpb19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzID0gKHN0cnVjdCB1c2JfYXVkaW9kZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqczsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCisJbG9ja19rZXJuZWwoKTsKKwlzID0gYXMtPnN0YXRlOworCWRldiA9IHMtPnVzYmRldjsKKwlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCisJCWRyYWluX291dChhcywgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCWRvd24oJm9wZW5fc2VtKTsKKwlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKKwkJdXNib3V0X3N0b3AoYXMpOworCQlpZiAoZGV2ICYmIGFzLT51c2JvdXQuaW50ZXJmYWNlID49IDApCisJCQl1c2Jfc2V0X2ludGVyZmFjZShkZXYsIGFzLT51c2JvdXQuaW50ZXJmYWNlLCAwKTsKKwkJZG1hYnVmX3JlbGVhc2UoJmFzLT51c2JvdXQuZG1hKTsKKwkJdXNib3V0X3JlbGVhc2UoYXMpOworCX0KKwlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgeworCQl1c2Jpbl9zdG9wKGFzKTsKKwkJaWYgKGRldiAmJiBhcy0+dXNiaW4uaW50ZXJmYWNlID49IDApCisJCQl1c2Jfc2V0X2ludGVyZmFjZShkZXYsIGFzLT51c2Jpbi5pbnRlcmZhY2UsIDApOworCQlkbWFidWZfcmVsZWFzZSgmYXMtPnVzYmluLmRtYSk7CisJCXVzYmluX3JlbGVhc2UoYXMpOworCX0KKwlhcy0+b3Blbl9tb2RlICY9ICh+ZmlsZS0+Zl9tb2RlKSAmIChGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTsKKwlyZWxlYXNlKHMpOworCXdha2VfdXAoJm9wZW5fd2FpdCk7CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgLypjb25zdCovIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiX2F1ZGlvX2ZvcHMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLmxsc2VlayA9CW5vX2xsc2VlaywKKwkucmVhZCA9CQl1c2JfYXVkaW9fcmVhZCwKKwkud3JpdGUgPQl1c2JfYXVkaW9fd3JpdGUsCisJLnBvbGwgPQkJdXNiX2F1ZGlvX3BvbGwsCisJLmlvY3RsID0JdXNiX2F1ZGlvX2lvY3RsLAorCS5tbWFwID0JCXVzYl9hdWRpb19tbWFwLAorCS5vcGVuID0JCXVzYl9hdWRpb19vcGVuLAorCS5yZWxlYXNlID0JdXNiX2F1ZGlvX3JlbGVhc2UsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCB1c2JfYXVkaW9fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlLAorCQkJICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIHVzYl9hdWRpb19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfYXVkaW9faWRzIFtdID0geworICAgIHsgLm1hdGNoX2ZsYWdzID0gKFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MpLAorICAgICAgLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywgLmJJbnRlcmZhY2VTdWJDbGFzcyA9IDF9LAorICAgIHsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHVzYl9hdWRpb19pZHMpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX2F1ZGlvX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiYXVkaW8iLAorCS5wcm9iZSA9CXVzYl9hdWRpb19wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9hdWRpb19kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CXVzYl9hdWRpb19pZHMsCit9OworCitzdGF0aWMgdm9pZCAqZmluZF9kZXNjcmlwdG9yKHZvaWQgKmRlc2NzdGFydCwgdW5zaWduZWQgaW50IGRlc2NsZW4sIHZvaWQgKmFmdGVyLCAKKwkJCSAgICAgdTggZHR5cGUsIGludCBpZmFjZSwgaW50IGFsdHNldHRpbmcpCit7CisJdTggKnAsICplbmQsICpuZXh0OworCWludCBpZmMgPSAtMSwgYXMgPSAtMTsKKworCXAgPSBkZXNjc3RhcnQ7CisJZW5kID0gcCArIGRlc2NsZW47CisJZm9yICg7IHAgPCBlbmQ7KSB7CisJCWlmIChwWzBdIDwgMikKKwkJCXJldHVybiBOVUxMOworCQluZXh0ID0gcCArIHBbMF07CisJCWlmIChuZXh0ID4gZW5kKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmIChwWzFdID09IFVTQl9EVF9JTlRFUkZBQ0UpIHsKKwkJCS8qIG1pbmltdW0gbGVuZ3RoIG9mIGludGVyZmFjZSBkZXNjcmlwdG9yICovCisJCQlpZiAocFswXSA8IDkpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlpZmMgPSBwWzJdOworCQkJYXMgPSBwWzNdOworCQl9CisJCWlmIChwWzFdID09IGR0eXBlICYmICghYWZ0ZXIgfHwgKHZvaWQgKilwID4gYWZ0ZXIpICYmCisJCSAgICAoaWZhY2UgPT0gLTEgfHwgaWZhY2UgPT0gaWZjKSAmJiAoYWx0c2V0dGluZyA9PSAtMSB8fCBhbHRzZXR0aW5nID09IGFzKSkgeworCQkJcmV0dXJuIHA7CisJCX0KKwkJcCA9IG5leHQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqZmluZF9jc2ludGVyZmFjZV9kZXNjcmlwdG9yKHZvaWQgKmRlc2NzdGFydCwgdW5zaWduZWQgaW50IGRlc2NsZW4sIHZvaWQgKmFmdGVyLCB1OCBkc3VidHlwZSwgaW50IGlmYWNlLCBpbnQgYWx0c2V0dGluZykKK3sKKwl1bnNpZ25lZCBjaGFyICpwOworCisJcCA9IGZpbmRfZGVzY3JpcHRvcihkZXNjc3RhcnQsIGRlc2NsZW4sIGFmdGVyLCBVU0JfRFRfQ1NfSU5URVJGQUNFLCBpZmFjZSwgYWx0c2V0dGluZyk7CisJd2hpbGUgKHApIHsKKwkJaWYgKHBbMF0gPj0gMyAmJiBwWzJdID09IGRzdWJ0eXBlKQorCQkJcmV0dXJuIHA7CisJCXAgPSBmaW5kX2Rlc2NyaXB0b3IoZGVzY3N0YXJ0LCBkZXNjbGVuLCBwLCBVU0JfRFRfQ1NfSU5URVJGQUNFLCBpZmFjZSwgYWx0c2V0dGluZyk7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqZmluZF9hdWRpb2NvbnRyb2xfdW5pdCh2b2lkICpkZXNjc3RhcnQsIHVuc2lnbmVkIGludCBkZXNjbGVuLCB2b2lkICphZnRlciwgdTggdW5pdCwgaW50IGlmYWNlKQoreworCXVuc2lnbmVkIGNoYXIgKnA7CisKKwlwID0gZmluZF9kZXNjcmlwdG9yKGRlc2NzdGFydCwgZGVzY2xlbiwgYWZ0ZXIsIFVTQl9EVF9DU19JTlRFUkZBQ0UsIGlmYWNlLCAtMSk7CisJd2hpbGUgKHApIHsKKwkJaWYgKHBbMF0gPj0gNCAmJiBwWzJdID49IElOUFVUX1RFUk1JTkFMICYmIHBbMl0gPD0gRVhURU5TSU9OX1VOSVQgJiYgcFszXSA9PSB1bml0KQorCQkJcmV0dXJuIHA7CisJCXAgPSBmaW5kX2Rlc2NyaXB0b3IoZGVzY3N0YXJ0LCBkZXNjbGVuLCBwLCBVU0JfRFRfQ1NfSU5URVJGQUNFLCBpZmFjZSwgLTEpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgdXNiX2F1ZGlvX3BhcnNlc3RyZWFtaW5nKHN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnMsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGJ1ZmxlbiwgaW50IGFzaWZpbiwgaW50IGFzaWZvdXQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHMtPnVzYmRldjsKKwlzdHJ1Y3QgdXNiX2F1ZGlvZGV2ICphczsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZTsKKwlzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZwOworCXVuc2lnbmVkIGNoYXIgKmZtdCwgKmNzZXA7CisJdW5zaWduZWQgaW50IGksIGosIGssIGZvcm1hdCwgaWR4OworCisJaWYgKCEoYXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX2F1ZGlvZGV2KSwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm47CisJbWVtc2V0KGFzLCAwLCBzaXplb2Yoc3RydWN0IHVzYl9hdWRpb2RldikpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFzLT51c2Jpbi5kbWEud2FpdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmYXMtPnVzYm91dC5kbWEud2FpdCk7CisJc3Bpbl9sb2NrX2luaXQoJmFzLT5sb2NrKTsKKwlhcy0+dXNiaW4uZHVyYlswXS51cmIgPSB1c2JfYWxsb2NfdXJiIChERVNDRlJBTUVTLCBHRlBfS0VSTkVMKTsKKwlhcy0+dXNiaW4uZHVyYlsxXS51cmIgPSB1c2JfYWxsb2NfdXJiIChERVNDRlJBTUVTLCBHRlBfS0VSTkVMKTsKKwlhcy0+dXNiaW4uc3VyYlswXS51cmIgPSB1c2JfYWxsb2NfdXJiIChTWU5DRlJBTUVTLCBHRlBfS0VSTkVMKTsKKwlhcy0+dXNiaW4uc3VyYlsxXS51cmIgPSB1c2JfYWxsb2NfdXJiIChTWU5DRlJBTUVTLCBHRlBfS0VSTkVMKTsKKwlhcy0+dXNib3V0LmR1cmJbMF0udXJiID0gdXNiX2FsbG9jX3VyYiAoREVTQ0ZSQU1FUywgR0ZQX0tFUk5FTCk7CisJYXMtPnVzYm91dC5kdXJiWzFdLnVyYiA9IHVzYl9hbGxvY191cmIgKERFU0NGUkFNRVMsIEdGUF9LRVJORUwpOworCWFzLT51c2JvdXQuc3VyYlswXS51cmIgPSB1c2JfYWxsb2NfdXJiIChTWU5DRlJBTUVTLCBHRlBfS0VSTkVMKTsKKwlhcy0+dXNib3V0LnN1cmJbMV0udXJiID0gdXNiX2FsbG9jX3VyYiAoU1lOQ0ZSQU1FUywgR0ZQX0tFUk5FTCk7CisJaWYgKCghYXMtPnVzYmluLmR1cmJbMF0udXJiKSB8fAorCSAgICAoIWFzLT51c2Jpbi5kdXJiWzFdLnVyYikgfHwKKwkgICAgKCFhcy0+dXNiaW4uc3VyYlswXS51cmIpIHx8CisJICAgICghYXMtPnVzYmluLnN1cmJbMV0udXJiKSB8fAorCSAgICAoIWFzLT51c2JvdXQuZHVyYlswXS51cmIpIHx8CisJICAgICghYXMtPnVzYm91dC5kdXJiWzFdLnVyYikgfHwKKwkgICAgKCFhcy0+dXNib3V0LnN1cmJbMF0udXJiKSB8fAorCSAgICAoIWFzLT51c2JvdXQuc3VyYlsxXS51cmIpKSB7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uZHVyYlswXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYmluLmR1cmJbMV0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2Jpbi5zdXJiWzBdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uc3VyYlsxXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5kdXJiWzBdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNib3V0LmR1cmJbMV0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2JvdXQuc3VyYlswXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5zdXJiWzFdLnVyYik7CisJCWtmcmVlKGFzKTsKKwkJcmV0dXJuOworCX0KKwlhcy0+c3RhdGUgPSBzOworCWFzLT51c2Jpbi5pbnRlcmZhY2UgPSBhc2lmaW47CisJYXMtPnVzYm91dC5pbnRlcmZhY2UgPSBhc2lmb3V0OworCS8qIHNlYXJjaCBmb3IgaW5wdXQgZm9ybWF0cyAqLworCWlmIChhc2lmaW4gPj0gMCkgeworCQlhcy0+dXNiaW4uZmxhZ3MgPSBGTEdfQ09OTkVDVEVEOworCQlpZmFjZSA9IHVzYl9pZm51bV90b19pZihkZXYsIGFzaWZpbik7CisJCWZvciAoaWR4ID0gMDsgaWR4IDwgaWZhY2UtPm51bV9hbHRzZXR0aW5nOyBpZHgrKykgeworCQkJYWx0cyA9ICZpZmFjZS0+YWx0c2V0dGluZ1tpZHhdOworCQkJaSA9IGFsdHMtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmc7CisJCQlpZiAoYWx0cy0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX0FVRElPIHx8IGFsdHMtPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzICE9IDIpCisJCQkJY29udGludWU7CisJCQlpZiAoYWx0cy0+ZGVzYy5iTnVtRW5kcG9pbnRzIDwgMSkgeworCQkJCWlmIChpICE9IDApIHsgIC8qIGFsdHNldHRpbmcgMCBoYXMgbm8gZW5kcG9pbnRzIChTZWN0aW9uIEIuMy40LjEpICovCisJCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSBkb2VzIG5vdCBoYXZlIGFuIGVuZHBvaW50XG4iLCAKKwkJCQkJICAgICAgIGRldi0+ZGV2bnVtLCBhc2lmaW4sIGkpOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICgoYWx0cy0+ZW5kcG9pbnRbMF0uZGVzYy5ibUF0dHJpYnV0ZXMgJiAweDAzKSAhPSAweDAxIHx8CisJCQkgICAgIShhbHRzLT5lbmRwb2ludFswXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSBmaXJzdCBlbmRwb2ludCBub3QgaXNvY2hyb25vdXMgaW5cbiIsIAorCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZmluLCBpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWZtdCA9IGZpbmRfY3NpbnRlcmZhY2VfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZmxlbiwgTlVMTCwgQVNfR0VORVJBTCwgYXNpZmluLCBpKTsKKwkJCWlmICghZm10KSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICV1IGludGVyZmFjZSAldSBhbHRzZXR0aW5nICV1IEZPUk1BVF9UWVBFIGRlc2NyaXB0b3Igbm90IGZvdW5kXG4iLCAKKwkJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZpbiwgaSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoZm10WzBdIDwgNyB8fCBmbXRbNl0gIT0gMCB8fCAoZm10WzVdICE9IDEgJiYgZm10WzVdICE9IDIpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICV1IGludGVyZmFjZSAldSBhbHRzZXR0aW5nICV1IGZvcm1hdCBub3Qgc3VwcG9ydGVkXG4iLCAKKwkJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZpbiwgaSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlmb3JtYXQgPSAoZm10WzVdID09IDIpID8gKEFGTVRfVTE2X0xFIHwgQUZNVF9VOCkgOiAoQUZNVF9TMTZfTEUgfCBBRk1UX1M4KTsKKwkJCWZtdCA9IGZpbmRfY3NpbnRlcmZhY2VfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZmxlbiwgTlVMTCwgRk9STUFUX1RZUEUsIGFzaWZpbiwgaSk7CisJCQlpZiAoIWZtdCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSBGT1JNQVRfVFlQRSBkZXNjcmlwdG9yIG5vdCBmb3VuZFxuIiwgCisJCQkJICAgICAgIGRldi0+ZGV2bnVtLCBhc2lmaW4sIGkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGZtdFswXSA8IDgrMyooZm10WzddID8gZm10WzddIDogMikgfHwgZm10WzNdICE9IDEpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgRk9STUFUX1RZUEUgZGVzY3JpcHRvciBub3Qgc3VwcG9ydGVkXG4iLCAKKwkJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZpbiwgaSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoZm10WzRdIDwgMSB8fCBmbXRbNF0gPiAyIHx8IGZtdFs1XSA8IDEgfHwgZm10WzVdID4gMikgeworCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSB1bnN1cHBvcnRlZCBjaGFubmVscyAldSBmcmFtZXNpemUgJXVcbiIsIAorCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZmluLCBpLCBmbXRbNF0sIGZtdFs1XSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQljc2VwID0gZmluZF9kZXNjcmlwdG9yKGJ1ZmZlciwgYnVmbGVuLCBOVUxMLCBVU0JfRFRfQ1NfRU5EUE9JTlQsIGFzaWZpbiwgaSk7CisJCQlpZiAoIWNzZXAgfHwgY3NlcFswXSA8IDcgfHwgY3NlcFsyXSAhPSBFUF9HRU5FUkFMKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICV1IGludGVyZmFjZSAldSBhbHRzZXR0aW5nICV1IG5vIG9yIGludmFsaWQgY2xhc3Mgc3BlY2lmaWMgZW5kcG9pbnQgZGVzY3JpcHRvclxuIiwgCisJCQkJICAgICAgIGRldi0+ZGV2bnVtLCBhc2lmaW4sIGkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGFzLT5udW1mbXRpbiA+PSBNQVhGT1JNQVRTKQorCQkJCWNvbnRpbnVlOworCQkJZnAgPSAmYXMtPmZtdGluW2FzLT5udW1mbXRpbisrXTsKKwkJCWlmIChmbXRbNV0gPT0gMikKKwkJCQlmb3JtYXQgJj0gKEFGTVRfVTE2X0xFIHwgQUZNVF9TMTZfTEUpOworCQkJZWxzZQorCQkJCWZvcm1hdCAmPSAoQUZNVF9VOCB8IEFGTVRfUzgpOworCQkJaWYgKGZtdFs0XSA9PSAyKQorCQkJCWZvcm1hdCB8PSBBRk1UX1NURVJFTzsKKwkJCWZwLT5mb3JtYXQgPSBmb3JtYXQ7CisJCQlmcC0+YWx0c2V0dGluZyA9IGk7CisJCQlmcC0+c3JhdGVsbyA9IGZwLT5zcmF0ZWhpID0gZm10WzhdIHwgKGZtdFs5XSA8PCA4KSB8IChmbXRbMTBdIDw8IDE2KTsKKwkJCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiB2YWxpZCBpbnB1dCBzYW1wbGUgcmF0ZSAldVxuIiwgZnAtPnNyYXRlbG8pOworCQkJZm9yIChqID0gZm10WzddID8gKGZtdFs3XS0xKSA6IDE7IGogPiAwOyBqLS0pIHsKKwkJCQlrID0gZm10WzgrMypqXSB8IChmbXRbOSszKmpdIDw8IDgpIHwgKGZtdFsxMCszKmpdIDw8IDE2KTsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogdmFsaWQgaW5wdXQgc2FtcGxlIHJhdGUgJXVcbiIsIGspOworCQkJCWlmIChrID4gZnAtPnNyYXRlaGkpCisJCQkJCWZwLT5zcmF0ZWhpID0gazsKKwkJCQlpZiAoayA8IGZwLT5zcmF0ZWxvKQorCQkJCQlmcC0+c3JhdGVsbyA9IGs7CisJCQl9CisJCQlmcC0+YXR0cmlidXRlcyA9IGNzZXBbM107CisJCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogZGV2aWNlICV1IGludGVyZmFjZSAldSBhbHRzZXR0aW5nICV1OiBmb3JtYXQgMHglMDh4IHNyYXRlbG8gJXUgc3JhdGVoaSAldSBhdHRyaWJ1dGVzIDB4JTAyeFxuIiwgCisJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZpbiwgaSwgZnAtPmZvcm1hdCwgZnAtPnNyYXRlbG8sIGZwLT5zcmF0ZWhpLCBmcC0+YXR0cmlidXRlcyk7CisJCX0KKwl9CisJLyogc2VhcmNoIGZvciBvdXRwdXQgZm9ybWF0cyAqLworCWlmIChhc2lmb3V0ID49IDApIHsKKwkJYXMtPnVzYm91dC5mbGFncyA9IEZMR19DT05ORUNURUQ7CisJCWlmYWNlID0gdXNiX2lmbnVtX3RvX2lmKGRldiwgYXNpZm91dCk7CisJCWZvciAoaWR4ID0gMDsgaWR4IDwgaWZhY2UtPm51bV9hbHRzZXR0aW5nOyBpZHgrKykgeworCQkJYWx0cyA9ICZpZmFjZS0+YWx0c2V0dGluZ1tpZHhdOworCQkJaSA9IGFsdHMtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmc7CisJCQlpZiAoYWx0cy0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX0FVRElPIHx8IGFsdHMtPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzICE9IDIpCisJCQkJY29udGludWU7CisJCQlpZiAoYWx0cy0+ZGVzYy5iTnVtRW5kcG9pbnRzIDwgMSkgeworCQkJCS8qIGFsdHNldHRpbmcgMCBzaG91bGQgbmV2ZXIgaGF2ZSBpc28gRVBzICovCisJCQkJaWYgKGkgIT0gMCkKKwkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgZG9lcyBub3QgaGF2ZSBhbiBlbmRwb2ludFxuIiwgCisJCQkJICAgICAgIGRldi0+ZGV2bnVtLCBhc2lmb3V0LCBpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICgoYWx0cy0+ZW5kcG9pbnRbMF0uZGVzYy5ibUF0dHJpYnV0ZXMgJiAweDAzKSAhPSAweDAxIHx8CisJCQkgICAgKGFsdHMtPmVuZHBvaW50WzBdLmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIDB4ODApKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZGV2aWNlICV1IGludGVyZmFjZSAldSBhbHRzZXR0aW5nICV1IGZpcnN0IGVuZHBvaW50IG5vdCBpc29jaHJvbm91cyBvdXRcbiIsIAorCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZm91dCwgaSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKiBTZWUgVVNCIGF1ZGlvIGZvcm1hdHMgbWFudWFsLCBzZWN0aW9uIDIgKi8KKwkJCWZtdCA9IGZpbmRfY3NpbnRlcmZhY2VfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZmxlbiwgTlVMTCwgQVNfR0VORVJBTCwgYXNpZm91dCwgaSk7CisJCQlpZiAoIWZtdCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSBGT1JNQVRfVFlQRSBkZXNjcmlwdG9yIG5vdCBmb3VuZFxuIiwgCisJCQkJICAgICAgIGRldi0+ZGV2bnVtLCBhc2lmb3V0LCBpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChmbXRbMF0gPCA3IHx8IGZtdFs2XSAhPSAwIHx8IChmbXRbNV0gIT0gMSAmJiBmbXRbNV0gIT0gMikpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgZm9ybWF0IG5vdCBzdXBwb3J0ZWRcbiIsIAorCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZm91dCwgaSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlmb3JtYXQgPSAoZm10WzVdID09IDIpID8gKEFGTVRfVTE2X0xFIHwgQUZNVF9VOCkgOiAoQUZNVF9TMTZfTEUgfCBBRk1UX1M4KTsKKwkJCS8qIERhbGxhcyBEUzQyMDEgd29ya2Fyb3VuZCAqLworCQkJaWYgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gMHgwNGZhICYmIAorCQkJICAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4NDIwMSkKKwkJCQlmb3JtYXQgPSAoQUZNVF9TMTZfTEUgfCBBRk1UX1M4KTsKKwkJCWZtdCA9IGZpbmRfY3NpbnRlcmZhY2VfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZmxlbiwgTlVMTCwgRk9STUFUX1RZUEUsIGFzaWZvdXQsIGkpOworCQkJaWYgKCFmbXQpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgRk9STUFUX1RZUEUgZGVzY3JpcHRvciBub3QgZm91bmRcbiIsIAorCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZm91dCwgaSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoZm10WzBdIDwgOCszKihmbXRbN10gPyBmbXRbN10gOiAyKSB8fCBmbXRbM10gIT0gMSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSBGT1JNQVRfVFlQRSBkZXNjcmlwdG9yIG5vdCBzdXBwb3J0ZWRcbiIsIAorCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZm91dCwgaSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoZm10WzRdIDwgMSB8fCBmbXRbNF0gPiAyIHx8IGZtdFs1XSA8IDEgfHwgZm10WzVdID4gMikgeworCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAldSBpbnRlcmZhY2UgJXUgYWx0c2V0dGluZyAldSB1bnN1cHBvcnRlZCBjaGFubmVscyAldSBmcmFtZXNpemUgJXVcbiIsIAorCQkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZm91dCwgaSwgZm10WzRdLCBmbXRbNV0pOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY3NlcCA9IGZpbmRfZGVzY3JpcHRvcihidWZmZXIsIGJ1ZmxlbiwgTlVMTCwgVVNCX0RUX0NTX0VORFBPSU5ULCBhc2lmb3V0LCBpKTsKKwkJCWlmICghY3NlcCB8fCBjc2VwWzBdIDwgNyB8fCBjc2VwWzJdICE9IEVQX0dFTkVSQUwpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXUgbm8gb3IgaW52YWxpZCBjbGFzcyBzcGVjaWZpYyBlbmRwb2ludCBkZXNjcmlwdG9yXG4iLCAKKwkJCQkgICAgICAgZGV2LT5kZXZudW0sIGFzaWZvdXQsIGkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGFzLT5udW1mbXRvdXQgPj0gTUFYRk9STUFUUykKKwkJCQljb250aW51ZTsKKwkJCWZwID0gJmFzLT5mbXRvdXRbYXMtPm51bWZtdG91dCsrXTsKKwkJCWlmIChmbXRbNV0gPT0gMikKKwkJCQlmb3JtYXQgJj0gKEFGTVRfVTE2X0xFIHwgQUZNVF9TMTZfTEUpOworCQkJZWxzZQorCQkJCWZvcm1hdCAmPSAoQUZNVF9VOCB8IEFGTVRfUzgpOworCQkJaWYgKGZtdFs0XSA9PSAyKQorCQkJCWZvcm1hdCB8PSBBRk1UX1NURVJFTzsKKwkJCWZwLT5mb3JtYXQgPSBmb3JtYXQ7CisJCQlmcC0+YWx0c2V0dGluZyA9IGk7CisJCQlmcC0+c3JhdGVsbyA9IGZwLT5zcmF0ZWhpID0gZm10WzhdIHwgKGZtdFs5XSA8PCA4KSB8IChmbXRbMTBdIDw8IDE2KTsKKwkJCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiB2YWxpZCBvdXRwdXQgc2FtcGxlIHJhdGUgJXVcbiIsIGZwLT5zcmF0ZWxvKTsKKwkJCWZvciAoaiA9IGZtdFs3XSA/IChmbXRbN10tMSkgOiAxOyBqID4gMDsgai0tKSB7CisJCQkJayA9IGZtdFs4KzMqal0gfCAoZm10WzkrMypqXSA8PCA4KSB8IChmbXRbMTArMypqXSA8PCAxNik7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiYXVkaW86IHZhbGlkIG91dHB1dCBzYW1wbGUgcmF0ZSAldVxuIiwgayk7CisJCQkJaWYgKGsgPiBmcC0+c3JhdGVoaSkKKwkJCQkJZnAtPnNyYXRlaGkgPSBrOworCQkJCWlmIChrIDwgZnAtPnNyYXRlbG8pCisJCQkJCWZwLT5zcmF0ZWxvID0gazsKKwkJCX0KKwkJCWZwLT5hdHRyaWJ1dGVzID0gY3NlcFszXTsKKwkJCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiBkZXZpY2UgJXUgaW50ZXJmYWNlICV1IGFsdHNldHRpbmcgJXU6IGZvcm1hdCAweCUwOHggc3JhdGVsbyAldSBzcmF0ZWhpICV1IGF0dHJpYnV0ZXMgMHglMDJ4XG4iLCAKKwkJCSAgICAgICBkZXYtPmRldm51bSwgYXNpZm91dCwgaSwgZnAtPmZvcm1hdCwgZnAtPnNyYXRlbG8sIGZwLT5zcmF0ZWhpLCBmcC0+YXR0cmlidXRlcyk7CisJCX0KKwl9CisJaWYgKGFzLT5udW1mbXRpbiA9PSAwICYmIGFzLT5udW1mbXRvdXQgPT0gMCkgeworCQl1c2JfZnJlZV91cmIoYXMtPnVzYmluLmR1cmJbMF0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2Jpbi5kdXJiWzFdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uc3VyYlswXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYmluLnN1cmJbMV0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2JvdXQuZHVyYlswXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5kdXJiWzFdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNib3V0LnN1cmJbMF0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2JvdXQuc3VyYlsxXS51cmIpOworCQlrZnJlZShhcyk7CisJCXJldHVybjsKKwl9CisJaWYgKChhcy0+ZGV2X2F1ZGlvID0gcmVnaXN0ZXJfc291bmRfZHNwKCZ1c2JfYXVkaW9fZm9wcywgLTEpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogY2Fubm90IHJlZ2lzdGVyIGRzcFxuIik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uZHVyYlswXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYmluLmR1cmJbMV0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2Jpbi5zdXJiWzBdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNiaW4uc3VyYlsxXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5kdXJiWzBdLnVyYik7CisJCXVzYl9mcmVlX3VyYihhcy0+dXNib3V0LmR1cmJbMV0udXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFzLT51c2JvdXQuc3VyYlswXS51cmIpOworCQl1c2JfZnJlZV91cmIoYXMtPnVzYm91dC5zdXJiWzFdLnVyYik7CisJCWtmcmVlKGFzKTsKKwkJcmV0dXJuOworCX0KKwlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogcmVnaXN0ZXJlZCBkc3AgMTQsJWRcbiIsIGFzLT5kZXZfYXVkaW8pOworCS8qIGV2ZXJ5dGhpbmcgc3VjY2Vzc2Z1bCAqLworCWxpc3RfYWRkX3RhaWwoJmFzLT5saXN0LCAmcy0+YXVkaW9saXN0KTsKK30KKworc3RydWN0IGNvbnNtaXhzdGF0ZSB7CisJc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqczsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdW5zaWduZWQgaW50IGJ1ZmxlbjsKKwl1bnNpZ25lZCBpbnQgY3RybGlmOworCXN0cnVjdCBtaXhlcmNoYW5uZWwgbWl4Y2hbU09VTkRfTUlYRVJfTlJERVZJQ0VTXTsKKwl1bnNpZ25lZCBpbnQgbnJtaXhjaDsKKwl1bnNpZ25lZCBpbnQgbWl4Y2htYXNrOworCXVuc2lnbmVkIGxvbmcgdW5pdGJpdG1hcFszMi9zaXplb2YodW5zaWduZWQgbG9uZyldOworCS8qIHJldHVybiB2YWx1ZXMgKi8KKwl1bnNpZ25lZCBpbnQgbnJjaGFubmVsczsKKwl1bnNpZ25lZCBpbnQgdGVybXR5cGU7CisJdW5zaWduZWQgaW50IGNoY29uZmlnOworfTsKKworc3RhdGljIHN0cnVjdCBtaXhlcmNoYW5uZWwgKmdldG1peGNoYW5uZWwoc3RydWN0IGNvbnNtaXhzdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGludCBucikKK3sKKwlzdHJ1Y3QgbWl4ZXJjaGFubmVsICpjOworCisJaWYgKG5yID49IFNPVU5EX01JWEVSX05SREVWSUNFUykgeworCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBpbnZhbGlkIE9TUyBtaXhlciBjaGFubmVsICV1XG4iLCBucik7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoIShzdGF0ZS0+bWl4Y2htYXNrICYgKDEgPDwgbnIpKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1c2JhdWRpbzogT1NTIG1peGVyIGNoYW5uZWwgJXUgYWxyZWFkeSBpbiB1c2VcbiIsIG5yKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWMgPSAmc3RhdGUtPm1peGNoW3N0YXRlLT5ucm1peGNoKytdOworCWMtPm9zc2NoYW5uZWwgPSBucjsKKwlzdGF0ZS0+bWl4Y2htYXNrICY9IH4oMSA8PCBucik7CisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0dm9sY2hhbm5lbChzdHJ1Y3QgY29uc21peHN0YXRlICpzdGF0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgdTsKKworCWlmICgoc3RhdGUtPnRlcm10eXBlICYgMHhmZjAwKSA9PSAweDAwMDAgJiYgKHN0YXRlLT5taXhjaG1hc2sgJiBTT1VORF9NQVNLX1ZPTFVNRSkpCisJCXJldHVybiBTT1VORF9NSVhFUl9WT0xVTUU7CisJaWYgKChzdGF0ZS0+dGVybXR5cGUgJiAweGZmMDApID09IDB4MDEwMCkgeworCQlpZiAoc3RhdGUtPm1peGNobWFzayAmIFNPVU5EX01BU0tfUENNKQorCQkJcmV0dXJuIFNPVU5EX01JWEVSX1BDTTsKKwkJaWYgKHN0YXRlLT5taXhjaG1hc2sgJiBTT1VORF9NQVNLX0FMVFBDTSkKKwkJCXJldHVybiBTT1VORF9NSVhFUl9BTFRQQ007CisJfQorCWlmICgoc3RhdGUtPnRlcm10eXBlICYgMHhmZjAwKSA9PSAweDAyMDAgJiYgKHN0YXRlLT5taXhjaG1hc2sgJiBTT1VORF9NQVNLX01JQykpCisJCXJldHVybiBTT1VORF9NSVhFUl9NSUM7CisJaWYgKChzdGF0ZS0+dGVybXR5cGUgJiAweGZmMDApID09IDB4MDMwMCAmJiAoc3RhdGUtPm1peGNobWFzayAmIFNPVU5EX01BU0tfU1BFQUtFUikpCisJCXJldHVybiBTT1VORF9NSVhFUl9TUEVBS0VSOworCWlmICgoc3RhdGUtPnRlcm10eXBlICYgMHhmZjAwKSA9PSAweDA1MDApIHsKKwkJaWYgKHN0YXRlLT5taXhjaG1hc2sgJiBTT1VORF9NQVNLX1BIT05FSU4pCisJCQlyZXR1cm4gU09VTkRfTUlYRVJfUEhPTkVJTjsKKwkJaWYgKHN0YXRlLT5taXhjaG1hc2sgJiBTT1VORF9NQVNLX1BIT05FT1VUKQorCQkJcmV0dXJuIFNPVU5EX01JWEVSX1BIT05FT1VUOworCX0KKwlpZiAoc3RhdGUtPnRlcm10eXBlID49IDB4NzEwICYmIHN0YXRlLT50ZXJtdHlwZSA8PSAweDcxMSAmJiAoc3RhdGUtPm1peGNobWFzayAmIFNPVU5EX01BU0tfUkFESU8pKQorCQlyZXR1cm4gU09VTkRfTUlYRVJfUkFESU87CisJaWYgKHN0YXRlLT50ZXJtdHlwZSA+PSAweDcwOSAmJiBzdGF0ZS0+dGVybXR5cGUgPD0gMHg3MGYgJiYgKHN0YXRlLT5taXhjaG1hc2sgJiBTT1VORF9NQVNLX1ZJREVPKSkKKwkJcmV0dXJuIFNPVU5EX01JWEVSX1ZJREVPOworCXUgPSBmZnMoc3RhdGUtPm1peGNobWFzayAmIChTT1VORF9NQVNLX0xJTkUgfCBTT1VORF9NQVNLX0NEIHwgU09VTkRfTUFTS19MSU5FMSB8IFNPVU5EX01BU0tfTElORTIgfCBTT1VORF9NQVNLX0xJTkUzIHwKKwkJCQkgICAgU09VTkRfTUFTS19ESUdJVEFMMSB8IFNPVU5EX01BU0tfRElHSVRBTDIgfCBTT1VORF9NQVNLX0RJR0lUQUwzKSk7CisJcmV0dXJuIHUtMTsKK30KKworc3RhdGljIHZvaWQgcHJlcG1peGNoKHN0cnVjdCBjb25zbWl4c3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBzdGF0ZS0+cy0+dXNiZGV2OworCXN0cnVjdCBtaXhlcmNoYW5uZWwgKmNoOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwlfX3MxNiB2MTsKKwl1bnNpZ25lZCBpbnQgdjIsIHYzOworCisJaWYgKCFzdGF0ZS0+bnJtaXhjaCB8fCBzdGF0ZS0+bnJtaXhjaCA+IFNPVU5EX01JWEVSX05SREVWSUNFUykKKwkJcmV0dXJuOworCWJ1ZiA9IGttYWxsb2Moc2l6ZW9mKCpidWYpICogMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwcmVwbWl4Y2g6IG91dCBvZiBtZW1vcnlcbiIpIDsKKwkJcmV0dXJuOworCX0KKworCWNoID0gJnN0YXRlLT5taXhjaFtzdGF0ZS0+bnJtaXhjaC0xXTsKKwlzd2l0Y2ggKGNoLT5zZWxlY3RvcikgeworCWNhc2UgMDogIC8qIG1peGVyIHVuaXQgcmVxdWVzdCAqLworCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9NSU4sIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCisJCQkJICAgIChjaC0+Y2hudW0gPDwgOCkgfCAxLCBzdGF0ZS0+Y3RybGlmIHwgKGNoLT51bml0aWQgPDwgOCksIGJ1ZiwgMiwgMTAwMCkgPCAwKQorCQkJZ290byBlcnI7CisJCWNoLT5taW52YWwgPSBidWZbMF0gfCAoYnVmWzFdIDw8IDgpOworCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9NQVgsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCisJCQkJICAgIChjaC0+Y2hudW0gPDwgOCkgfCAxLCBzdGF0ZS0+Y3RybGlmIHwgKGNoLT51bml0aWQgPDwgOCksIGJ1ZiwgMiwgMTAwMCkgPCAwKQorCQkJZ290byBlcnI7CisJCWNoLT5tYXh2YWwgPSBidWZbMF0gfCAoYnVmWzFdIDw8IDgpOworCQl2MiA9IGNoLT5tYXh2YWwgLSBjaC0+bWludmFsOworCQlpZiAoIXYyKQorCQkJdjIgPSAxOworCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCisJCQkJICAgIChjaC0+Y2hudW0gPDwgOCkgfCAxLCBzdGF0ZS0+Y3RybGlmIHwgKGNoLT51bml0aWQgPDwgOCksIGJ1ZiwgMiwgMTAwMCkgPCAwKQorCQkJZ290byBlcnI7CisJCXYxID0gYnVmWzBdIHwgKGJ1ZlsxXSA8PCA4KTsKKwkJdjMgPSB2MSAtIGNoLT5taW52YWw7CisJCXYzID0gMTAwICogdjMgLyB2MjsKKwkJaWYgKHYzID4gMTAwKQorCQkJdjMgPSAxMDA7CisJCWNoLT52YWx1ZSA9IHYzOworCQlpZiAoY2gtPmZsYWdzICYgKE1JWEZMR19TVEVSRU9JTiB8IE1JWEZMR19TVEVSRU9PVVQpKSB7CisJCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCisJCQkJCSAgICAoKGNoLT5jaG51bSArICEhKGNoLT5mbGFncyAmIE1JWEZMR19TVEVSRU9JTikpIDw8IDgpIHwgKDEgKyAhIShjaC0+ZmxhZ3MgJiBNSVhGTEdfU1RFUkVPT1VUKSksCisJCQkJCSAgICBzdGF0ZS0+Y3RybGlmIHwgKGNoLT51bml0aWQgPDwgOCksIGJ1ZiwgMiwgMTAwMCkgPCAwKQorCQkJZ290byBlcnI7CisJCQl2MSA9IGJ1ZlswXSB8IChidWZbMV0gPDwgOCk7CisJCQl2MyA9IHYxIC0gY2gtPm1pbnZhbDsKKwkJCXYzID0gMTAwICogdjMgLyB2MjsKKwkJCWlmICh2MyA+IDEwMCkKKwkJCQl2MyA9IDEwMDsKKwkJfQorCQljaC0+dmFsdWUgfD0gdjMgPDwgODsKKwkJYnJlYWs7CisKKwkJLyogdmFyaW91cyBmZWF0dXJlIHVuaXQgY29udHJvbHMgKi8KKwljYXNlIFZPTFVNRV9DT05UUk9MOgorCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9NSU4sIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCisJCQkJICAgIChjaC0+c2VsZWN0b3IgPDwgOCkgfCBjaC0+Y2hudW0sIHN0YXRlLT5jdHJsaWYgfCAoY2gtPnVuaXRpZCA8PCA4KSwgYnVmLCAyLCAxMDAwKSA8IDApCisJCQlnb3RvIGVycjsKKwkJY2gtPm1pbnZhbCA9IGJ1ZlswXSB8IChidWZbMV0gPDwgOCk7CisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX01BWCwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKKwkJCQkgICAgKGNoLT5zZWxlY3RvciA8PCA4KSB8IGNoLT5jaG51bSwgc3RhdGUtPmN0cmxpZiB8IChjaC0+dW5pdGlkIDw8IDgpLCBidWYsIDIsIDEwMDApIDwgMCkKKwkJCWdvdG8gZXJyOworCQljaC0+bWF4dmFsID0gYnVmWzBdIHwgKGJ1ZlsxXSA8PCA4KTsKKwkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBHRVRfQ1VSLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOLAorCQkJCSAgICAoY2gtPnNlbGVjdG9yIDw8IDgpIHwgY2gtPmNobnVtLCBzdGF0ZS0+Y3RybGlmIHwgKGNoLT51bml0aWQgPDwgOCksIGJ1ZiwgMiwgMTAwMCkgPCAwKQorCQkJZ290byBlcnI7CisJCXYxID0gYnVmWzBdIHwgKGJ1ZlsxXSA8PCA4KTsKKwkJdjIgPSBjaC0+bWF4dmFsIC0gY2gtPm1pbnZhbDsKKwkJdjMgPSB2MSAtIGNoLT5taW52YWw7CisJCWlmICghdjIpCisJCQl2MiA9IDE7CisJCXYzID0gMTAwICogdjMgLyB2MjsKKwkJaWYgKHYzID4gMTAwKQorCQkJdjMgPSAxMDA7CisJCWNoLT52YWx1ZSA9IHYzOworCQlpZiAoY2gtPmZsYWdzICYgKE1JWEZMR19TVEVSRU9JTiB8IE1JWEZMR19TVEVSRU9PVVQpKSB7CisJCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9DVVIsIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4sCisJCQkJCSAgICAoY2gtPnNlbGVjdG9yIDw8IDgpIHwgKGNoLT5jaG51bSArIDEpLCBzdGF0ZS0+Y3RybGlmIHwgKGNoLT51bml0aWQgPDwgOCksIGJ1ZiwgMiwgMTAwMCkgPCAwKQorCQkJCWdvdG8gZXJyOworCQkJdjEgPSBidWZbMF0gfCAoYnVmWzFdIDw8IDgpOworCQkJdjMgPSB2MSAtIGNoLT5taW52YWw7CisJCQl2MyA9IDEwMCAqIHYzIC8gdjI7CisJCQlpZiAodjMgPiAxMDApCisJCQkJdjMgPSAxMDA7CisJCX0KKwkJY2gtPnZhbHVlIHw9IHYzIDw8IDg7CisJCWJyZWFrOworCQkKKwljYXNlIEJBU1NfQ09OVFJPTDoKKwljYXNlIE1JRF9DT05UUk9MOgorCWNhc2UgVFJFQkxFX0NPTlRST0w6CisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX01JTiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKKwkJCQkgICAgKGNoLT5zZWxlY3RvciA8PCA4KSB8IGNoLT5jaG51bSwgc3RhdGUtPmN0cmxpZiB8IChjaC0+dW5pdGlkIDw8IDgpLCBidWYsIDEsIDEwMDApIDwgMCkKKwkJCWdvdG8gZXJyOworCQljaC0+bWludmFsID0gYnVmWzBdIDw8IDg7CisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX01BWCwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKKwkJCQkgICAgKGNoLT5zZWxlY3RvciA8PCA4KSB8IGNoLT5jaG51bSwgc3RhdGUtPmN0cmxpZiB8IChjaC0+dW5pdGlkIDw8IDgpLCBidWYsIDEsIDEwMDApIDwgMCkKKwkJCWdvdG8gZXJyOworCQljaC0+bWF4dmFsID0gYnVmWzBdIDw8IDg7CisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKKwkJCQkgICAgKGNoLT5zZWxlY3RvciA8PCA4KSB8IGNoLT5jaG51bSwgc3RhdGUtPmN0cmxpZiB8IChjaC0+dW5pdGlkIDw8IDgpLCBidWYsIDEsIDEwMDApIDwgMCkKKwkJCWdvdG8gZXJyOworCQl2MSA9IGJ1ZlswXSA8PCA4OworCQl2MiA9IGNoLT5tYXh2YWwgLSBjaC0+bWludmFsOworCQl2MyA9IHYxIC0gY2gtPm1pbnZhbDsKKwkJaWYgKCF2MikKKwkJCXYyID0gMTsKKwkJdjMgPSAxMDAgKiB2MyAvIHYyOworCQlpZiAodjMgPiAxMDApCisJCQl2MyA9IDEwMDsKKwkJY2gtPnZhbHVlID0gdjM7CisJCWlmIChjaC0+ZmxhZ3MgJiAoTUlYRkxHX1NURVJFT0lOIHwgTUlYRkxHX1NURVJFT09VVCkpIHsKKwkJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgR0VUX0NVUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKKwkJCQkJICAgIChjaC0+c2VsZWN0b3IgPDwgOCkgfCAoY2gtPmNobnVtICsgMSksIHN0YXRlLT5jdHJsaWYgfCAoY2gtPnVuaXRpZCA8PCA4KSwgYnVmLCAxLCAxMDAwKSA8IDApCisJCQkJZ290byBlcnI7CisJCQl2MSA9IGJ1ZlswXSA8PCA4OworCQkJdjMgPSB2MSAtIGNoLT5taW52YWw7CisJCQl2MyA9IDEwMCAqIHYzIC8gdjI7CisJCQlpZiAodjMgPiAxMDApCisJCQkJdjMgPSAxMDA7CisJCX0KKwkJY2gtPnZhbHVlIHw9IHYzIDw8IDg7CisJCWJyZWFrOworCQkKKwlkZWZhdWx0OgorCQlnb3RvIGVycjsKKwl9CisKKyBmcmVlYnVmOgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuOworIGVycjoKKwlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBtaXhlciByZXF1ZXN0IGRldmljZSAldSBpZiAldSB1bml0ICV1IGNoICV1IHNlbGVjdG9yICV1IGZhaWxlZFxuIiwgCisJICAgICAgIGRldi0+ZGV2bnVtLCBzdGF0ZS0+Y3RybGlmLCBjaC0+dW5pdGlkLCBjaC0+Y2hudW0sIGNoLT5zZWxlY3Rvcik7CisJaWYgKHN0YXRlLT5ucm1peGNoKQorCQlzdGF0ZS0+bnJtaXhjaC0tOworCWdvdG8gZnJlZWJ1ZjsKK30KKworCitzdGF0aWMgdm9pZCB1c2JfYXVkaW9fcmVjdXJzZXVuaXQoc3RydWN0IGNvbnNtaXhzdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgdW5pdGlkKTsKKworc3RhdGljIGlubGluZSBpbnQgY2hlY2ttaXhibWFwKHVuc2lnbmVkIGNoYXIgKmJtYXAsIHVuc2lnbmVkIGNoYXIgZmxnLCB1bnNpZ25lZCBpbnQgaW5pZHgsIHVuc2lnbmVkIGludCBudW1vY2gpCit7CisJdW5zaWduZWQgaW50IGlkeDsKKworCWlkeCA9IGluaWR4Km51bW9jaDsKKwlpZiAoIShibWFwWy0oaWR4ID4+IDMpXSAmICgweDgwID4+IChpZHggJiA3KSkpKQorCQlyZXR1cm4gMDsKKwlpZiAoIShmbGcgJiAoTUlYRkxHX1NURVJFT0lOIHwgTUlYRkxHX1NURVJFT09VVCkpKQorCQlyZXR1cm4gMTsKKwlpZHggPSAoaW5pZHgrISEoZmxnICYgTUlYRkxHX1NURVJFT0lOKSkqbnVtb2NoKyEhKGZsZyAmIE1JWEZMR19TVEVSRU9PVVQpOworCWlmICghKGJtYXBbLShpZHggPj4gMyldICYgKDB4ODAgPj4gKGlkeCAmIDcpKSkpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCB1c2JfYXVkaW9fbWl4ZXJ1bml0KHN0cnVjdCBjb25zbWl4c3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICptaXhlcikKK3sKKwl1bnNpZ25lZCBpbnQgbnJvdXRjaCA9IG1peGVyWzUrbWl4ZXJbNF1dOworCXVuc2lnbmVkIGludCBjaGlkeFtTT1VORF9NSVhFUl9OUkRFVklDRVMrMV07CisJdW5zaWduZWQgaW50IHRlcm10W1NPVU5EX01JWEVSX05SREVWSUNFU107CisJdW5zaWduZWQgY2hhciBmbGcgPSAobnJvdXRjaCA+PSAyKSA/IE1JWEZMR19TVEVSRU9PVVQgOiAwOworCXVuc2lnbmVkIGNoYXIgKmJtYXAgPSAmbWl4ZXJbOSttaXhlcls0XV07CisJdW5zaWduZWQgaW50IGJtYXBzaXplOworCXN0cnVjdCBtaXhlcmNoYW5uZWwgKmNoOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKCFtaXhlcls0XSkgeworCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiB1bml0ICV1IGludmFsaWQgTUlYRVJfVU5JVCBkZXNjcmlwdG9yXG4iLCBtaXhlclszXSk7CisJCXJldHVybjsKKwl9CisJaWYgKG1peGVyWzRdID4gU09VTkRfTUlYRVJfTlJERVZJQ0VTKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IG1peGVyIHVuaXQgJXU6IHRvbyBtYW55IGlucHV0IHBpbnNcbiIsIG1peGVyWzNdKTsKKwkJcmV0dXJuOworCX0KKwljaGlkeFswXSA9IDA7CisJZm9yIChpID0gMDsgaSA8IG1peGVyWzRdOyBpKyspIHsKKwkJdXNiX2F1ZGlvX3JlY3Vyc2V1bml0KHN0YXRlLCBtaXhlcls1K2ldKTsKKwkJY2hpZHhbaSsxXSA9IGNoaWR4W2ldICsgc3RhdGUtPm5yY2hhbm5lbHM7CisJCXRlcm10W2ldID0gc3RhdGUtPnRlcm10eXBlOworCX0KKwlzdGF0ZS0+dGVybXR5cGUgPSAwOworCXN0YXRlLT5jaGNvbmZpZyA9IG1peGVyWzYrbWl4ZXJbNF1dIHwgKG1peGVyWzcrbWl4ZXJbNF1dIDw8IDgpOworCWJtYXBzaXplID0gKG5yb3V0Y2ggKiBjaGlkeFttaXhlcls0XV0gKyA3KSA+PiAzOworCWJtYXAgKz0gYm1hcHNpemUgLSAxOworCWlmIChtaXhlclswXSA8IDEwK21peGVyWzRdK2JtYXBzaXplKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXUgaW52YWxpZCBNSVhFUl9VTklUIGRlc2NyaXB0b3IgKGJpdG1hcCB0b28gc21hbGwpXG4iLCBtaXhlclszXSk7CisJCXJldHVybjsKKwl9CisJZm9yIChpID0gMDsgaSA8IG1peGVyWzRdOyBpKyspIHsKKwkJc3RhdGUtPnRlcm10eXBlID0gdGVybXRbaV07CisJCWlmIChjaGlkeFtpKzFdLWNoaWR4W2ldID49IDIpIHsKKwkJCWZsZyB8PSBNSVhGTEdfU1RFUkVPSU47CisJCQlpZiAoY2hlY2ttaXhibWFwKGJtYXAsIGZsZywgY2hpZHhbaV0sIG5yb3V0Y2gpKSB7CisJCQkJY2ggPSBnZXRtaXhjaGFubmVsKHN0YXRlLCBnZXR2b2xjaGFubmVsKHN0YXRlKSk7CisJCQkJaWYgKGNoKSB7CisJCQkJCWNoLT51bml0aWQgPSBtaXhlclszXTsKKwkJCQkJY2gtPnNlbGVjdG9yID0gMDsKKwkJCQkJY2gtPmNobnVtID0gY2hpZHhbaV0rMTsKKwkJCQkJY2gtPmZsYWdzID0gZmxnOworCQkJCQlwcmVwbWl4Y2goc3RhdGUpOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlmbGcgJj0gfk1JWEZMR19TVEVSRU9JTjsKKwkJaWYgKGNoZWNrbWl4Ym1hcChibWFwLCBmbGcsIGNoaWR4W2ldLCBucm91dGNoKSkgeworCQkJY2ggPSBnZXRtaXhjaGFubmVsKHN0YXRlLCBnZXR2b2xjaGFubmVsKHN0YXRlKSk7CisJCQlpZiAoY2gpIHsKKwkJCQljaC0+dW5pdGlkID0gbWl4ZXJbM107CisJCQkJY2gtPnNlbGVjdG9yID0gMDsKKwkJCQljaC0+Y2hudW0gPSBjaGlkeFtpXSsxOworCQkJCWNoLT5mbGFncyA9IGZsZzsKKwkJCQlwcmVwbWl4Y2goc3RhdGUpOworCQkJfQorCQl9CisJfQkKKwlzdGF0ZS0+dGVybXR5cGUgPSAwOworfQorCitzdGF0aWMgc3RydWN0IG1peGVyY2hhbm5lbCAqc2xjdHNyY19maW5kdW5pdChzdHJ1Y3QgY29uc21peHN0YXRlICpzdGF0ZSwgX191OCB1bml0aWQpCit7CisJdW5zaWduZWQgaW50IGk7CisJCisJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5ucm1peGNoOyBpKyspCisJCWlmIChzdGF0ZS0+bWl4Y2hbaV0udW5pdGlkID09IHVuaXRpZCkKKwkJCXJldHVybiAmc3RhdGUtPm1peGNoW2ldOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCB1c2JfYXVkaW9fc2VsZWN0b3J1bml0KHN0cnVjdCBjb25zbWl4c3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICpzZWxlY3RvcikKK3sKKwl1bnNpZ25lZCBpbnQgY2hudW0sIGksIG1peGNoOworCXN0cnVjdCBtaXhlcmNoYW5uZWwgKm1jaDsKKworCWlmICghc2VsZWN0b3JbNF0pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogdW5pdCAldSBpbnZhbGlkIFNFTEVDVE9SX1VOSVQgZGVzY3JpcHRvclxuIiwgc2VsZWN0b3JbM10pOworCQlyZXR1cm47CisJfQorCW1peGNoID0gc3RhdGUtPm5ybWl4Y2g7CisJdXNiX2F1ZGlvX3JlY3Vyc2V1bml0KHN0YXRlLCBzZWxlY3Rvcls1XSk7CisJaWYgKHN0YXRlLT5ucm1peGNoICE9IG1peGNoKSB7CisJCW1jaCA9ICZzdGF0ZS0+bWl4Y2hbc3RhdGUtPm5ybWl4Y2gtMV07CisJCW1jaC0+c2xjdHVuaXRpZCA9IHNlbGVjdG9yWzNdIHwgKDEgPDwgOCk7CisJfSBlbHNlIGlmICgobWNoID0gc2xjdHNyY19maW5kdW5pdChzdGF0ZSwgc2VsZWN0b3JbNV0pKSkgeworCQltY2gtPnNsY3R1bml0aWQgPSBzZWxlY3RvclszXSB8ICgxIDw8IDgpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiBzZWxlY3RvciB1bml0ICV1OiBpZ25vcmluZyBjaGFubmVsIDFcbiIsIHNlbGVjdG9yWzNdKTsKKwl9CisJY2hudW0gPSBzdGF0ZS0+bnJjaGFubmVsczsKKwlmb3IgKGkgPSAxOyBpIDwgc2VsZWN0b3JbNF07IGkrKykgeworCQltaXhjaCA9IHN0YXRlLT5ucm1peGNoOworCQl1c2JfYXVkaW9fcmVjdXJzZXVuaXQoc3RhdGUsIHNlbGVjdG9yWzUraV0pOworCQlpZiAoY2hudW0gIT0gc3RhdGUtPm5yY2hhbm5lbHMpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHNlbGVjdG9yIHVuaXQgJXU6IGlucHV0IHBpbnMgd2l0aCB2YXJ5aW5nIGNoYW5uZWwgbnVtYmVyc1xuIiwgc2VsZWN0b3JbM10pOworCQkJc3RhdGUtPnRlcm10eXBlID0gMDsKKwkJCXN0YXRlLT5jaGNvbmZpZyA9IDA7CisJCQlzdGF0ZS0+bnJjaGFubmVscyA9IDA7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHN0YXRlLT5ucm1peGNoICE9IG1peGNoKSB7CisJCQltY2ggPSAmc3RhdGUtPm1peGNoW3N0YXRlLT5ucm1peGNoLTFdOworCQkJbWNoLT5zbGN0dW5pdGlkID0gc2VsZWN0b3JbM10gfCAoKGkgKyAxKSA8PCA4KTsKKwkJfSBlbHNlIGlmICgobWNoID0gc2xjdHNyY19maW5kdW5pdChzdGF0ZSwgc2VsZWN0b3JbNStpXSkpKSB7CisJCQltY2gtPnNsY3R1bml0aWQgPSBzZWxlY3RvclszXSB8ICgoaSArIDEpIDw8IDgpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiYXVkaW86IHNlbGVjdG9yIHVuaXQgJXU6IGlnbm9yaW5nIGNoYW5uZWwgJXVcbiIsIHNlbGVjdG9yWzNdLCBpKzEpOworCQl9CisJfQorCXN0YXRlLT50ZXJtdHlwZSA9IDA7CisJc3RhdGUtPmNoY29uZmlnID0gMDsKK30KKworLyogaW4gdGhlIGZ1dHVyZSB3ZSBtaWdodCB0cnkgdG8gaGFuZGxlIDNEIGV0Yy4gZWZmZWN0IHVuaXRzICovCisKK3N0YXRpYyB2b2lkIHVzYl9hdWRpb19wcm9jZXNzaW5ndW5pdChzdHJ1Y3QgY29uc21peHN0YXRlICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqcHJvYykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwcm9jWzZdOyBpKyspCisJCXVzYl9hdWRpb19yZWN1cnNldW5pdChzdGF0ZSwgcHJvY1s3K2ldKTsKKwlzdGF0ZS0+bnJjaGFubmVscyA9IHByb2NbNytwcm9jWzZdXTsKKwlzdGF0ZS0+dGVybXR5cGUgPSAwOworCXN0YXRlLT5jaGNvbmZpZyA9IHByb2NbOCtwcm9jWzZdXSB8IChwcm9jWzkrcHJvY1s2XV0gPDwgOCk7Cit9CisKKworLyogU2VlIEF1ZGlvIENsYXNzIFNwZWMsIHNlY3Rpb24gNC4zLjIuNSAqLworc3RhdGljIHZvaWQgdXNiX2F1ZGlvX2ZlYXR1cmV1bml0KHN0cnVjdCBjb25zbWl4c3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICpmdHIpCit7CisJc3RydWN0IG1peGVyY2hhbm5lbCAqY2g7CisJdW5zaWduZWQgc2hvcnQgY2hmdHIsIG1jaGZ0cjsKKyNpZiAwCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHN0YXRlLT5zLT51c2JkZXY7CisJdW5zaWduZWQgY2hhciBkYXRhWzFdOworI2VuZGlmCisJdW5zaWduZWQgY2hhciBucl9sb2dpY2FsX2NoYW5uZWxzLCBpOworCisJdXNiX2F1ZGlvX3JlY3Vyc2V1bml0KHN0YXRlLCBmdHJbNF0pOworCisJaWYgKGZ0cls1XSA9PSAwICkgeworCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiB3cm9uZyBjb250cm9scyBzaXplIGluIGZlYXR1cmUgdW5pdCAldVxuIixmdHJbM10pOworCQlyZXR1cm47CisJfQorCisJaWYgKHN0YXRlLT5ucmNoYW5uZWxzID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogZmVhdHVyZSB1bml0ICV1IHNvdXJjZSBoYXMgbm8gY2hhbm5lbHNcbiIsIGZ0clszXSk7CisJCXJldHVybjsKKwl9CisJaWYgKHN0YXRlLT5ucmNoYW5uZWxzID4gMikKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IGZlYXR1cmUgdW5pdCAldTogT1NTIG1peGVyIGludGVyZmFjZSBkb2VzIG5vdCBzdXBwb3J0IG1vcmUgdGhhbiAyIGNoYW5uZWxzXG4iLCBmdHJbM10pOworCisJbnJfbG9naWNhbF9jaGFubmVscz0oZnRyWzBdLTcpL2Z0cls1XS0xOworCisJaWYgKG5yX2xvZ2ljYWxfY2hhbm5lbHMgIT0gc3RhdGUtPm5yY2hhbm5lbHMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IHdhcm5pbmc6IGZvdW5kICVkIG9mICVkIGxvZ2ljYWwgY2hhbm5lbHMuXG4iLCBzdGF0ZS0+bnJjaGFubmVscyxucl9sb2dpY2FsX2NoYW5uZWxzKTsKKworCQlpZiAoc3RhdGUtPm5yY2hhbm5lbHMgPT0gMSAmJiBucl9sb2dpY2FsX2NoYW5uZWxzPT0wKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogYXNzdW1pbmcgdGhlIGNoYW5uZWwgZm91bmQgaXMgdGhlIG1hc3RlciBjaGFubmVsIChnb3QgYSBQaGlsaXBzIGNhbWVyYT8pLiBTaG91bGQgYmUgZmluZS5cbiIpOworCQl9IGVsc2UgaWYgKHN0YXRlLT5ucmNoYW5uZWxzID09IDEgJiYgbnJfbG9naWNhbF9jaGFubmVscz09MikgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiYXVkaW86IGFzc3VtaW5nIHRoYXQgYSBzdGVyZW8gY2hhbm5lbCBjb25uZWN0ZWQgZGlyZWN0bHkgdG8gYSBtaXhlciBpcyBtaXNzaW5nIGluIHNlYXJjaCAoZ290IExhYnRlYyBoZWFkc2V0PykuIFNob3VsZCBiZSBmaW5lLlxuIik7CisJCQlzdGF0ZS0+bnJjaGFubmVscz1ucl9sb2dpY2FsX2NoYW5uZWxzOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAidXNiYXVkaW86IG5vIGlkZWEgd2hhdCdzIGdvaW5nIG9uLi4uLCBjb250YWN0IGxpbnV4LXVzYi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXRcbiIpOworCQl9CisJfQorCisJLyogVGhlcmUgaXMgYWx3YXlzIGEgbWFzdGVyIGNoYW5uZWwgKi8KKwltY2hmdHIgPSBmdHJbNl07CisJLyogQmluYXJ5IEFORCBvdmVyIGxvZ2ljYWwgY2hhbm5lbHMgaWYgdGhleSBleGlzdCAqLworCWlmIChucl9sb2dpY2FsX2NoYW5uZWxzKSB7CisJCWNoZnRyID0gZnRyWzYrZnRyWzVdXTsKKwkJZm9yIChpID0gMjsgaSA8PSBucl9sb2dpY2FsX2NoYW5uZWxzOyBpKyspCisJCQljaGZ0ciAmPSBmdHJbNitpKmZ0cls1XV07CisJfSBlbHNlIHsKKwkJY2hmdHIgPSAwOworCX0KKworCS8qIHZvbHVtZSBjb250cm9sICovCisJaWYgKGNoZnRyICYgMikgeworCQljaCA9IGdldG1peGNoYW5uZWwoc3RhdGUsIGdldHZvbGNoYW5uZWwoc3RhdGUpKTsKKwkJaWYgKGNoKSB7CisJCQljaC0+dW5pdGlkID0gZnRyWzNdOworCQkJY2gtPnNlbGVjdG9yID0gVk9MVU1FX0NPTlRST0w7CisJCQljaC0+Y2hudW0gPSAxOworCQkJY2gtPmZsYWdzID0gKHN0YXRlLT5ucmNoYW5uZWxzID4gMSkgPyAoTUlYRkxHX1NURVJFT0lOIHwgTUlYRkxHX1NURVJFT09VVCkgOiAwOworCQkJcHJlcG1peGNoKHN0YXRlKTsKKwkJfQorCX0gZWxzZSBpZiAobWNoZnRyICYgMikgeworCQljaCA9IGdldG1peGNoYW5uZWwoc3RhdGUsIGdldHZvbGNoYW5uZWwoc3RhdGUpKTsKKwkJaWYgKGNoKSB7CisJCQljaC0+dW5pdGlkID0gZnRyWzNdOworCQkJY2gtPnNlbGVjdG9yID0gVk9MVU1FX0NPTlRST0w7CisJCQljaC0+Y2hudW0gPSAwOworCQkJY2gtPmZsYWdzID0gMDsKKwkJCXByZXBtaXhjaChzdGF0ZSk7CisJCX0KKwl9CisJLyogYmFzcyBjb250cm9sICovCisJaWYgKGNoZnRyICYgNCkgeworCQljaCA9IGdldG1peGNoYW5uZWwoc3RhdGUsIFNPVU5EX01JWEVSX0JBU1MpOworCQlpZiAoY2gpIHsKKwkJCWNoLT51bml0aWQgPSBmdHJbM107CisJCQljaC0+c2VsZWN0b3IgPSBCQVNTX0NPTlRST0w7CisJCQljaC0+Y2hudW0gPSAxOworCQkJY2gtPmZsYWdzID0gKHN0YXRlLT5ucmNoYW5uZWxzID4gMSkgPyAoTUlYRkxHX1NURVJFT0lOIHwgTUlYRkxHX1NURVJFT09VVCkgOiAwOworCQkJcHJlcG1peGNoKHN0YXRlKTsKKwkJfQorCX0gZWxzZSBpZiAobWNoZnRyICYgNCkgeworCQljaCA9IGdldG1peGNoYW5uZWwoc3RhdGUsIFNPVU5EX01JWEVSX0JBU1MpOworCQlpZiAoY2gpIHsKKwkJCWNoLT51bml0aWQgPSBmdHJbM107CisJCQljaC0+c2VsZWN0b3IgPSBCQVNTX0NPTlRST0w7CisJCQljaC0+Y2hudW0gPSAwOworCQkJY2gtPmZsYWdzID0gMDsKKwkJCXByZXBtaXhjaChzdGF0ZSk7CisJCX0KKwl9CisJLyogdHJlYmxlIGNvbnRyb2wgKi8KKwlpZiAoY2hmdHIgJiAxNikgeworCQljaCA9IGdldG1peGNoYW5uZWwoc3RhdGUsIFNPVU5EX01JWEVSX1RSRUJMRSk7CisJCWlmIChjaCkgeworCQkJY2gtPnVuaXRpZCA9IGZ0clszXTsKKwkJCWNoLT5zZWxlY3RvciA9IFRSRUJMRV9DT05UUk9MOworCQkJY2gtPmNobnVtID0gMTsKKwkJCWNoLT5mbGFncyA9IChzdGF0ZS0+bnJjaGFubmVscyA+IDEpID8gKE1JWEZMR19TVEVSRU9JTiB8IE1JWEZMR19TVEVSRU9PVVQpIDogMDsKKwkJCXByZXBtaXhjaChzdGF0ZSk7CisJCX0KKwl9IGVsc2UgaWYgKG1jaGZ0ciAmIDE2KSB7CisJCWNoID0gZ2V0bWl4Y2hhbm5lbChzdGF0ZSwgU09VTkRfTUlYRVJfVFJFQkxFKTsKKwkJaWYgKGNoKSB7CisJCQljaC0+dW5pdGlkID0gZnRyWzNdOworCQkJY2gtPnNlbGVjdG9yID0gVFJFQkxFX0NPTlRST0w7CisJCQljaC0+Y2hudW0gPSAwOworCQkJY2gtPmZsYWdzID0gMDsKKwkJCXByZXBtaXhjaChzdGF0ZSk7CisJCX0KKwl9CisjaWYgMAorCS8qIGlmIHRoZXJlIGFyZSBtdXRlIGNvbnRyb2xzLCB1bm11dGUgdGhlbSAqLworCS8qIGRvZXMgbm90IHNlZW0gdG8gYmUgbmVjZXNzYXJ5LCBhbmQgdGhlIERhbGxhcyBjaGlwIGRvZXMgbm90IHNlZW0gdG8gc3VwcG9ydCB0aGUgImFsbCIgY2hhbm5lbCAoMjU1KSAqLworCWlmICgoY2hmdHIgJiAxKSB8fCAobWNoZnRyICYgMSkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInVzYmF1ZGlvOiB1bm11dGluZyBmZWF0dXJlIHVuaXQgJXUgaW50ZXJmYWNlICV1XG4iLCBmdHJbM10sIHN0YXRlLT5jdHJsaWYpOworCQlkYXRhWzBdID0gMDsKKwkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBTRVRfQ1VSLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCwKKwkJCQkgICAgKE1VVEVfQ09OVFJPTCA8PCA4KSB8IDB4ZmYsIHN0YXRlLT5jdHJsaWYgfCAoZnRyWzNdIDw8IDgpLCBkYXRhLCAxLCAxMDAwKSA8IDApCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1c2JhdWRpbzogZmFpbHVyZSB0byB1bm11dGUgZmVhdHVyZSB1bml0ICV1IGludGVyZmFjZSAldVxuIiwgZnRyWzNdLCBzdGF0ZS0+Y3RybGlmKTsKKyAJfQorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHVzYl9hdWRpb19yZWN1cnNldW5pdChzdHJ1Y3QgY29uc21peHN0YXRlICpzdGF0ZSwgdW5zaWduZWQgY2hhciB1bml0aWQpCit7CisJdW5zaWduZWQgY2hhciAqcDE7CisJdW5zaWduZWQgaW50IGksIGo7CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdCh1bml0aWQsIHN0YXRlLT51bml0Yml0bWFwKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogbWl4ZXIgcGF0aCByZXZpc2l0cyB1bml0ICVkXG4iLCB1bml0aWQpOworCQlyZXR1cm47CisJfQorCXAxID0gZmluZF9hdWRpb2NvbnRyb2xfdW5pdChzdGF0ZS0+YnVmZmVyLCBzdGF0ZS0+YnVmbGVuLCBOVUxMLCB1bml0aWQsIHN0YXRlLT5jdHJsaWYpOworCWlmICghcDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogdW5pdCAlZCBub3QgZm91bmQhXG4iLCB1bml0aWQpOworCQlyZXR1cm47CisJfQorCXN0YXRlLT5ucmNoYW5uZWxzID0gMDsKKwlzdGF0ZS0+dGVybXR5cGUgPSAwOworCXN0YXRlLT5jaGNvbmZpZyA9IDA7CisJc3dpdGNoIChwMVsyXSkgeworCWNhc2UgSU5QVVRfVEVSTUlOQUw6CisJCWlmIChwMVswXSA8IDEyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiB1bml0ICV1OiBpbnZhbGlkIElOUFVUX1RFUk1JTkFMIGRlc2NyaXB0b3JcbiIsIHVuaXRpZCk7CisJCQlyZXR1cm47CisJCX0KKwkJc3RhdGUtPm5yY2hhbm5lbHMgPSBwMVs3XTsKKwkJc3RhdGUtPnRlcm10eXBlID0gcDFbNF0gfCAocDFbNV0gPDwgOCk7CisJCXN0YXRlLT5jaGNvbmZpZyA9IHAxWzhdIHwgKHAxWzldIDw8IDgpOworCQlyZXR1cm47CisKKwljYXNlIE1JWEVSX1VOSVQ6CisJCWlmIChwMVswXSA8IDEwIHx8IHAxWzBdIDwgMTArcDFbNF0pIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXU6IGludmFsaWQgTUlYRVJfVU5JVCBkZXNjcmlwdG9yXG4iLCB1bml0aWQpOworCQkJcmV0dXJuOworCQl9CisJCXVzYl9hdWRpb19taXhlcnVuaXQoc3RhdGUsIHAxKTsKKwkJcmV0dXJuOworCisJY2FzZSBTRUxFQ1RPUl9VTklUOgorCQlpZiAocDFbMF0gPCA2IHx8IHAxWzBdIDwgNitwMVs0XSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogdW5pdCAldTogaW52YWxpZCBTRUxFQ1RPUl9VTklUIGRlc2NyaXB0b3JcbiIsIHVuaXRpZCk7CisJCQlyZXR1cm47CisJCX0KKwkJdXNiX2F1ZGlvX3NlbGVjdG9ydW5pdChzdGF0ZSwgcDEpOworCQlyZXR1cm47CisKKwljYXNlIEZFQVRVUkVfVU5JVDogLyogU2VlIFVTQiBBdWRpbyBDbGFzcyBTcGVjIDQuMy4yLjUgKi8KKwkJaWYgKHAxWzBdIDwgNyB8fCBwMVswXSA8IDcrcDFbNV0pIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXU6IGludmFsaWQgRkVBVFVSRV9VTklUIGRlc2NyaXB0b3JcbiIsIHVuaXRpZCk7CisJCQlyZXR1cm47CisJCX0KKwkJdXNiX2F1ZGlvX2ZlYXR1cmV1bml0KHN0YXRlLCBwMSk7CisJCXJldHVybjsJCQorCisJY2FzZSBQUk9DRVNTSU5HX1VOSVQ6CisJCWlmIChwMVswXSA8IDEzIHx8IHAxWzBdIDwgMTMrcDFbNl0gfHwgcDFbMF0gPCAxMytwMVs2XStwMVsxMStwMVs2XV0pIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXU6IGludmFsaWQgUFJPQ0VTU0lOR19VTklUIGRlc2NyaXB0b3JcbiIsIHVuaXRpZCk7CisJCQlyZXR1cm47CisJCX0KKwkJdXNiX2F1ZGlvX3Byb2Nlc3Npbmd1bml0KHN0YXRlLCBwMSk7CisJCXJldHVybjsJCQorCisJY2FzZSBFWFRFTlNJT05fVU5JVDoKKwkJaWYgKHAxWzBdIDwgMTMgfHwgcDFbMF0gPCAxMytwMVs2XSB8fCBwMVswXSA8IDEzK3AxWzZdK3AxWzExK3AxWzZdXSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogdW5pdCAldTogaW52YWxpZCBFWFRFTlNJT05fVU5JVCBkZXNjcmlwdG9yXG4iLCB1bml0aWQpOworCQkJcmV0dXJuOworCQl9CisJCWZvciAoaiA9IGkgPSAwOyBpIDwgcDFbNl07IGkrKykgeworCQkJdXNiX2F1ZGlvX3JlY3Vyc2V1bml0KHN0YXRlLCBwMVs3K2ldKTsKKwkJCWlmICghaSkKKwkJCQlqID0gc3RhdGUtPnRlcm10eXBlOworCQkJZWxzZSBpZiAoaiAhPSBzdGF0ZS0+dGVybXR5cGUpCisJCQkJaiA9IDA7CisJCX0KKwkJc3RhdGUtPm5yY2hhbm5lbHMgPSBwMVs3K3AxWzZdXTsKKwkJc3RhdGUtPmNoY29uZmlnID0gcDFbOCtwMVs2XV0gfCAocDFbOStwMVs2XV0gPDwgOCk7CisJCXN0YXRlLT50ZXJtdHlwZSA9IGo7CisJCXJldHVybjsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IHVuaXQgJXU6IHVuZXhwZWN0ZWQgdHlwZSAweCUwMnhcbiIsIHVuaXRpZCwgcDFbMl0pOworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgdm9pZCB1c2JfYXVkaW9fY29uc3RydWN0bWl4ZXIoc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqcywgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgYnVmbGVuLCB1bnNpZ25lZCBpbnQgY3RybGlmLCB1bnNpZ25lZCBjaGFyICpvdGVybSkKK3sKKwlzdHJ1Y3QgdXNiX21peGVyZGV2ICptczsKKwlzdHJ1Y3QgY29uc21peHN0YXRlIHN0YXRlOworCisJbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKHN0YXRlKSk7CisJc3RhdGUucyA9IHM7CisJc3RhdGUubnJtaXhjaCA9IDA7CisJc3RhdGUubWl4Y2htYXNrID0gfjA7CisJc3RhdGUuYnVmZmVyID0gYnVmZmVyOworCXN0YXRlLmJ1ZmxlbiA9IGJ1ZmxlbjsKKwlzdGF0ZS5jdHJsaWYgPSBjdHJsaWY7CisJc2V0X2JpdChvdGVybVszXSwgc3RhdGUudW5pdGJpdG1hcCk7ICAvKiBtYXJrIHRlcm1pbmFsIElEIGFzIHZpc2l0ZWQgKi8KKwlwcmludGsoS0VSTl9ERUJVRyAidXNiYXVkaW86IGNvbnN0cnVjdGluZyBtaXhlciBmb3IgVGVybWluYWwgJXUgdHlwZSAweCUwNHhcbiIsCisJICAgICAgIG90ZXJtWzNdLCBvdGVybVs0XSB8IChvdGVybVs1XSA8PCA4KSk7CisJdXNiX2F1ZGlvX3JlY3Vyc2V1bml0KCZzdGF0ZSwgb3Rlcm1bN10pOworCWlmICghc3RhdGUubnJtaXhjaCkgeworCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogbm8gbWl4ZXIgY29udHJvbHMgZm91bmQgZm9yIFRlcm1pbmFsICV1XG4iLCBvdGVybVszXSk7CisJCXJldHVybjsKKwl9CisJaWYgKCEobXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX21peGVyZGV2KStzdGF0ZS5ucm1peGNoKnNpemVvZihzdHJ1Y3QgbWl4ZXJjaGFubmVsKSwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm47CisJbWVtc2V0KG1zLCAwLCBzaXplb2Yoc3RydWN0IHVzYl9taXhlcmRldikpOworCW1lbWNweSgmbXMtPmNoLCAmc3RhdGUubWl4Y2gsIHN0YXRlLm5ybWl4Y2gqc2l6ZW9mKHN0cnVjdCBtaXhlcmNoYW5uZWwpKTsKKwltcy0+c3RhdGUgPSBzOworCW1zLT5pZmFjZSA9IGN0cmxpZjsKKwltcy0+bnVtY2ggPSBzdGF0ZS5ucm1peGNoOworCWlmICgobXMtPmRldl9taXhlciA9IHJlZ2lzdGVyX3NvdW5kX21peGVyKCZ1c2JfbWl4ZXJfZm9wcywgLTEpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JhdWRpbzogY2Fubm90IHJlZ2lzdGVyIG1peGVyXG4iKTsKKwkJa2ZyZWUobXMpOworCQlyZXR1cm47CisJfQorCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiByZWdpc3RlcmVkIG1peGVyIDE0LCVkXG4iLCBtcy0+ZGV2X21peGVyKTsKKwlsaXN0X2FkZF90YWlsKCZtcy0+bGlzdCwgJnMtPm1peGVybGlzdCk7Cit9CisKKy8qIGFyYml0cmFyeSBsaW1pdCwgd2Ugd29uJ3QgY2hlY2sgbW9yZSBpbnRlcmZhY2VzIHRoYW4gdGhpcyAqLworI2RlZmluZSBVU0JfTUFYSU5URVJGQUNFUwkzMgorCitzdGF0aWMgc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqdXNiX2F1ZGlvX3BhcnNlY29udHJvbChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGludCBidWZsZW4sIHVuc2lnbmVkIGludCBjdHJsaWYpCit7CisJc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqczsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2U7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0OworCXVuc2lnbmVkIGNoYXIgaWZpbltVU0JfTUFYSU5URVJGQUNFU10sIGlmb3V0W1VTQl9NQVhJTlRFUkZBQ0VTXTsKKwl1bnNpZ25lZCBjaGFyICpwMTsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgaywgbnVtaWZpbiA9IDAsIG51bWlmb3V0ID0gMDsKKwkKKwlpZiAoIShzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9hdWRpb19zdGF0ZSksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIE5VTEw7CisJbWVtc2V0KHMsIDAsIHNpemVvZihzdHJ1Y3QgdXNiX2F1ZGlvX3N0YXRlKSk7CisJSU5JVF9MSVNUX0hFQUQoJnMtPmF1ZGlvbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnMtPm1peGVybGlzdCk7CisJcy0+dXNiZGV2ID0gZGV2OworCXMtPmNvdW50ID0gMTsKKworCS8qIGZpbmQgYXVkaW9jb250cm9sIGludGVyZmFjZSAqLworCWlmICghKHAxID0gZmluZF9jc2ludGVyZmFjZV9kZXNjcmlwdG9yKGJ1ZmZlciwgYnVmbGVuLCBOVUxMLCBIRUFERVIsIGN0cmxpZiwgLTEpKSkgeworCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBubyBIRUFERVIgZm91bmRcbiIsCisJCSAgICAgICBkZXYtPmRldm51bSwgY3RybGlmKTsKKwkJZ290byByZXQ7CisJfQorCWlmIChwMVswXSA8IDggKyBwMVs3XSkgeworCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBIRUFERVIgZXJyb3JcbiIsCisJCSAgICAgICBkZXYtPmRldm51bSwgY3RybGlmKTsKKwkJZ290byByZXQ7CisJfQorCWlmICghcDFbN10pCisJCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBoYXMgbm8gQXVkaW9TdHJlYW1pbmcgYW5kIE1pZGlTdHJlYW1pbmcgaW50ZXJmYWNlc1xuIiwKKwkJICAgICAgIGRldi0+ZGV2bnVtLCBjdHJsaWYpOworCWZvciAoaSA9IDA7IGkgPCBwMVs3XTsgaSsrKSB7CisJCWogPSBwMVs4K2ldOworCQlpZmFjZSA9IHVzYl9pZm51bV90b19pZihkZXYsIGopOworCQlpZiAoIWlmYWNlKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBpbnRlcmZhY2UgJXUgZG9lcyBub3QgZXhpc3RcbiIsCisJCQkgICAgICAgZGV2LT5kZXZudW0sIGN0cmxpZiwgaik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoaWZhY2UtPm51bV9hbHRzZXR0aW5nID09IDEpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAlZCBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlICV1IGhhcyBvbmx5IDEgYWx0c2V0dGluZy5cbiIsIGRldi0+ZGV2bnVtLCBjdHJsaWYpOworCQkJY29udGludWU7CisJCX0KKwkJYWx0ID0gdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKGlmYWNlLCAwKTsKKwkJaWYgKCFhbHQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAlZCBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlICV1IGludGVyZmFjZSAldSBoYXMgbm8gYWx0c2V0dGluZyAwXG4iLAorCQkJICAgICAgIGRldi0+ZGV2bnVtLCBjdHJsaWYsIGopOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGFsdC0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX0FVRElPKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBpbnRlcmZhY2UgJXUgaXMgbm90IGFuIEF1ZGlvQ2xhc3MgaW50ZXJmYWNlXG4iLAorCQkJICAgICAgIGRldi0+ZGV2bnVtLCBjdHJsaWYsIGopOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGFsdC0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0gMykgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiYXVkaW86IGRldmljZSAlZCBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlICV1IGludGVyZmFjZSAldSBNSURJU3RyZWFtaW5nIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkgICAgICAgZGV2LT5kZXZudW0sIGN0cmxpZiwgaik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYWx0LT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyAhPSAyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBpbnRlcmZhY2UgJXUgaW52YWxpZCBBdWRpb0NsYXNzIHN1YnR5cGVcbiIsCisJCQkgICAgICAgZGV2LT5kZXZudW0sIGN0cmxpZiwgaik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYWx0LT5kZXNjLmJOdW1FbmRwb2ludHMgPiAwKSB7CisJCQkvKiBDaGVjayBhbGwgZW5kcG9pbnRzOyBzaG91bGQgdGhleSBhbGwgaGF2ZSBhIGJhbmR3aWR0aCBvZiAwID8gKi8KKwkJCWZvciAoayA9IDA7IGsgPCBhbHQtPmRlc2MuYk51bUVuZHBvaW50czsgaysrKSB7CisJCQkJaWYgKGxlMTZfdG9fY3B1KGFsdC0+ZW5kcG9pbnRba10uZGVzYy53TWF4UGFja2V0U2l6ZSkgPiAwKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAlZCBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlICV1IGVuZHBvaW50ICVkIGRvZXMgbm90IGhhdmUgMCBiYW5kd2lkdGggYXQgYWx0WzBdXG4iLCBkZXYtPmRldm51bSwgY3RybGlmLCBrKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKGsgPCBhbHQtPmRlc2MuYk51bUVuZHBvaW50cykKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWFsdCA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpZmFjZSwgMSk7CisJCWlmICghYWx0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmF1ZGlvOiBkZXZpY2UgJWQgYXVkaW9jb250cm9sIGludGVyZmFjZSAldSBpbnRlcmZhY2UgJXUgaGFzIG5vIGFsdHNldHRpbmcgMVxuIiwKKwkJCSAgICAgICBkZXYtPmRldm51bSwgY3RybGlmLCBqKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChhbHQtPmRlc2MuYk51bUVuZHBvaW50cyA8IDEpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiYXVkaW86IGRldmljZSAlZCBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlICV1IGludGVyZmFjZSAldSBoYXMgbm8gZW5kcG9pbnRcbiIsCisJCQkgICAgICAgZGV2LT5kZXZudW0sIGN0cmxpZiwgaik7CisJCQljb250aW51ZTsKKwkJfQorCQkvKiBub3RlOiB0aGlzIHJlcXVpcmVzIHRoZSBkYXRhIGVuZHBvaW50IHRvIGJlIGVwMCBhbmQgdGhlIG9wdGlvbmFsIHN5bmMKKwkJICAgZXAgdG8gYmUgZXAxLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgY2FzZSAqLworCQlpZiAoYWx0LT5lbmRwb2ludFswXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSB7CisJCQlpZiAobnVtaWZpbiA8IFVTQl9NQVhJTlRFUkZBQ0VTKSB7CisJCQkJaWZpbltudW1pZmluKytdID0gajsKKwkJCQl1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmdXNiX2F1ZGlvX2RyaXZlciwgaWZhY2UsICh2b2lkICopLTEpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKG51bWlmb3V0IDwgVVNCX01BWElOVEVSRkFDRVMpIHsKKwkJCQlpZm91dFtudW1pZm91dCsrXSA9IGo7CisJCQkJdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UoJnVzYl9hdWRpb19kcml2ZXIsIGlmYWNlLCAodm9pZCAqKS0xKTsKKwkJCX0KKwkJfQorCX0KKwlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogZGV2aWNlICVkIGF1ZGlvY29udHJvbCBpbnRlcmZhY2UgJXUgaGFzICV1IGlucHV0IGFuZCAldSBvdXRwdXQgQXVkaW9TdHJlYW1pbmcgaW50ZXJmYWNlc1xuIiwKKwkgICAgICAgZGV2LT5kZXZudW0sIGN0cmxpZiwgbnVtaWZpbiwgbnVtaWZvdXQpOworCWZvciAoaSA9IDA7IGkgPCBudW1pZmluICYmIGkgPCBudW1pZm91dDsgaSsrKQorCQl1c2JfYXVkaW9fcGFyc2VzdHJlYW1pbmcocywgYnVmZmVyLCBidWZsZW4sIGlmaW5baV0sIGlmb3V0W2ldKTsKKwlmb3IgKGogPSBpOyBqIDwgbnVtaWZpbjsgaisrKQorCQl1c2JfYXVkaW9fcGFyc2VzdHJlYW1pbmcocywgYnVmZmVyLCBidWZsZW4sIGlmaW5baV0sIC0xKTsKKwlmb3IgKGogPSBpOyBqIDwgbnVtaWZvdXQ7IGorKykKKwkJdXNiX2F1ZGlvX3BhcnNlc3RyZWFtaW5nKHMsIGJ1ZmZlciwgYnVmbGVuLCAtMSwgaWZvdXRbaV0pOworCS8qIG5vdyB3YWxrIHRocm91Z2ggYWxsIE9VVFBVVF9URVJNSU5BTCBkZXNjcmlwdG9ycyB0byBzZWFyY2ggZm9yIG1peGVycyAqLworCXAxID0gZmluZF9jc2ludGVyZmFjZV9kZXNjcmlwdG9yKGJ1ZmZlciwgYnVmbGVuLCBOVUxMLCBPVVRQVVRfVEVSTUlOQUwsIGN0cmxpZiwgLTEpOworCXdoaWxlIChwMSkgeworCQlpZiAocDFbMF0gPj0gOSkKKwkJCXVzYl9hdWRpb19jb25zdHJ1Y3RtaXhlcihzLCBidWZmZXIsIGJ1ZmxlbiwgY3RybGlmLCBwMSk7CisJCXAxID0gZmluZF9jc2ludGVyZmFjZV9kZXNjcmlwdG9yKGJ1ZmZlciwgYnVmbGVuLCBwMSwgT1VUUFVUX1RFUk1JTkFMLCBjdHJsaWYsIC0xKTsKKwl9CisKK3JldDoKKwlpZiAobGlzdF9lbXB0eSgmcy0+YXVkaW9saXN0KSAmJiBsaXN0X2VtcHR5KCZzLT5taXhlcmxpc3QpKSB7CisJCWtmcmVlKHMpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJLyogZXZlcnl0aGluZyBzdWNjZXNzZnVsICovCisJZG93bigmb3Blbl9zZW0pOworCWxpc3RfYWRkX3RhaWwoJnMtPmF1ZGlvZGV2LCAmYXVkaW9kZXZzKTsKKwl1cCgmb3Blbl9zZW0pOworCXByaW50ayhLRVJOX0RFQlVHICJ1c2JfYXVkaW9fcGFyc2Vjb250cm9sOiB1c2JfYXVkaW9fc3RhdGUgYXQgJXBcbiIsIHMpOworCXJldHVybiBzOworfQorCisvKiB3ZSBvbmx5IGNhcmUgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIGNvbmZpZ3VyYXRpb24gKi8KKworc3RhdGljIGludCB1c2JfYXVkaW9fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCXN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKnM7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGludCBidWZsZW47CisKKyNpZiAwCisJcHJpbnRrKEtFUk5fREVCVUcgInVzYmF1ZGlvOiBQcm9iaW5nIGlmICVpOiBJQyAleCwgSVNDICV4XG4iLCBpZm51bSwKKwkgICAgICAgY29uZmlnLT5pbnRlcmZhY2VbaWZudW1dLmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlQ2xhc3MsCisJICAgICAgIGNvbmZpZy0+aW50ZXJmYWNlW2lmbnVtXS5hbHRzZXR0aW5nWzBdLmRlc2MuYkludGVyZmFjZVN1YkNsYXNzKTsKKyNlbmRpZgorCisJLyoKKwkgKiBhdWRpb2NvbnRyb2wgaW50ZXJmYWNlIGZvdW5kCisJICogZmluZCB3aGljaCBjb25maWd1cmF0aW9uIG51bWJlciBpcyBhY3RpdmUKKwkgKi8KKwlidWZmZXIgPSBkZXYtPnJhd2Rlc2NyaXB0b3JzW2Rldi0+YWN0Y29uZmlnIC0gZGV2LT5jb25maWddOworCWJ1ZmxlbiA9IGxlMTZfdG9fY3B1KGRldi0+YWN0Y29uZmlnLT5kZXNjLndUb3RhbExlbmd0aCk7CisJcyA9IHVzYl9hdWRpb19wYXJzZWNvbnRyb2woZGV2LCBidWZmZXIsIGJ1ZmxlbiwgaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKwlpZiAocykgeworCQl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBzKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRU5PREVWOworfQorCisKKy8qIGEgcmV2b2tlIGZhY2lsaXR5IHdvdWxkIG1ha2UgdGhpbmdzIHNpbXBsZXIgKi8KKworc3RhdGljIHZvaWQgdXNiX2F1ZGlvX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9hdWRpb19zdGF0ZSAqcyA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCXN0cnVjdCB1c2JfYXVkaW9kZXYgKmFzOworCXN0cnVjdCB1c2JfbWl4ZXJkZXYgKm1zOworCisJaWYgKCFzKQorCQlyZXR1cm47CisKKwkvKiB3ZSBnZXQgY2FsbGVkIHdpdGggLTEgZm9yIGV2ZXJ5IGF1ZGlvc3RyZWFtaW5nIGludGVyZmFjZSByZWdpc3RlcmVkICovCisJaWYgKHMgPT0gKHN0cnVjdCB1c2JfYXVkaW9fc3RhdGUgKiktMSkgeworCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogbm90ZSwgdXNiX2F1ZGlvX2Rpc2Nvbm5lY3QgY2FsbGVkIHdpdGggLTFcbiIpKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoIXMtPnVzYmRldikgeworCQlkcHJpbnRrKChLRVJOX0RFQlVHICJ1c2JhdWRpbzogZXJyb3IsICB1c2JfYXVkaW9fZGlzY29ubmVjdCBhbHJlYWR5IGNhbGxlZCBmb3IgJXAhXG4iLCBzKSk7CisJCXJldHVybjsKKwl9CisJZG93bigmb3Blbl9zZW0pOworCWxpc3RfZGVsX2luaXQoJnMtPmF1ZGlvZGV2KTsKKwlzLT51c2JkZXYgPSBOVUxMOworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCisJLyogZGVyZWdpc3RlciBhbGwgYXVkaW8gYW5kIG1peGVyIGRldmljZXMsIHNvIG5vIG5ldyBwcm9jZXNzZXMgY2FuIG9wZW4gdGhpcyBkZXZpY2UgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzLCAmcy0+YXVkaW9saXN0LCBsaXN0KSB7CisJCXVzYmluX2Rpc2MoYXMpOworCQl1c2JvdXRfZGlzYyhhcyk7CisJCXdha2VfdXAoJmFzLT51c2Jpbi5kbWEud2FpdCk7CisJCXdha2VfdXAoJmFzLT51c2JvdXQuZG1hLndhaXQpOworCQlpZiAoYXMtPmRldl9hdWRpbyA+PSAwKSB7CisJCQl1bnJlZ2lzdGVyX3NvdW5kX2RzcChhcy0+ZGV2X2F1ZGlvKTsKKwkJCXByaW50ayhLRVJOX0lORk8gInVzYmF1ZGlvOiB1bnJlZ2lzdGVyIGRzcCAxNCwlZFxuIiwgYXMtPmRldl9hdWRpbyk7CisJCX0KKwkJYXMtPmRldl9hdWRpbyA9IC0xOworCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1zLCAmcy0+bWl4ZXJsaXN0LCBsaXN0KSB7CisJCWlmIChtcy0+ZGV2X21peGVyID49IDApIHsKKwkJCXVucmVnaXN0ZXJfc291bmRfbWl4ZXIobXMtPmRldl9taXhlcik7CisJCQlwcmludGsoS0VSTl9JTkZPICJ1c2JhdWRpbzogdW5yZWdpc3RlciBtaXhlciAxNCwlZFxuIiwgbXMtPmRldl9taXhlcik7CisJCX0KKwkJbXMtPmRldl9taXhlciA9IC0xOworCX0KKwlyZWxlYXNlKHMpOworCXdha2VfdXAoJm9wZW5fd2FpdCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9hdWRpb19pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdCA9IHVzYl9yZWdpc3RlcigmdXNiX2F1ZGlvX2RyaXZlcik7CisJaWYgKHJlc3VsdCA9PSAwKSAKKwkJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IHVzYl9hdWRpb19jbGVhbnVwKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnVzYl9hdWRpb19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1c2JfYXVkaW9faW5pdCk7Cittb2R1bGVfZXhpdCh1c2JfYXVkaW9fY2xlYW51cCk7CisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvYXVkaW8uaCBiL2RyaXZlcnMvdXNiL2NsYXNzL2F1ZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU5MTZlYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2F1ZGlvLmgKQEAgLTAsMCArMSwxMTAgQEAKKyNkZWZpbmUgQ1NfQVVESU9fVU5ERUZJTkVECQkweDIwCisjZGVmaW5lIENTX0FVRElPX0RFVklDRQkJCTB4MjEKKyNkZWZpbmUgQ1NfQVVESU9fQ09ORklHVVJBVElPTgkJMHgyMgorI2RlZmluZSBDU19BVURJT19TVFJJTkcJCQkweDIzCisjZGVmaW5lIENTX0FVRElPX0lOVEVSRkFDRQkJMHgyNAorI2RlZmluZSBDU19BVURJT19FTkRQT0lOVAkJMHgyNQorCisjZGVmaW5lIEhFQURFUgkJCQkweDAxCisjZGVmaW5lIElOUFVUX1RFUk1JTkFMCQkJMHgwMgorI2RlZmluZSBPVVRQVVRfVEVSTUlOQUwJCQkweDAzCisjZGVmaW5lIE1JWEVSX1VOSVQJCQkweDA0CisjZGVmaW5lIFNFTEVDVE9SX1VOSVQJCQkweDA1CisjZGVmaW5lIEZFQVRVUkVfVU5JVAkJCTB4MDYKKyNkZWZpbmUgUFJPQ0VTU0lOR19VTklUCQkJMHgwNworI2RlZmluZSBFWFRFTlNJT05fVU5JVAkJCTB4MDgKKworI2RlZmluZSBBU19HRU5FUkFMCQkJMHgwMQorI2RlZmluZSBGT1JNQVRfVFlQRQkJCTB4MDIKKyNkZWZpbmUgRk9STUFUX1NQRUNJRklDCQkJMHgwMworCisjZGVmaW5lIEVQX0dFTkVSQUwJCQkweDAxCisKKyNkZWZpbmUgTUFYX0NIQU4JCQk5CisjZGVmaW5lIE1BWF9GUkVRCQkJMTYKKyNkZWZpbmUgTUFYX0lGQUNFCQkJOAorI2RlZmluZSBNQVhfRk9STUFUCQkJOAorI2RlZmluZSBNQVhfQUxUCQkJCTMyIAkvKiBTb3JyeSwgd2UgbmVlZCBxdWl0ZSBhIGZldyBmb3IgdGhlIFBoaWxpcHMgd2ViY2FtcyAqLworCitzdHJ1Y3QgdXNiX2F1ZGlvX3Rlcm1pbmFsCit7CQorCXU4CWZsYWdzOworCXU4CWFzc29jOworCXUxNgl0eXBlOwkJCS8qIE1pYyBldGMgKi8KKwl1OAljaGFubmVsczsKKwl1OAlzb3VyY2U7CisJdTE2CWNoYW5jZmc7Cit9OworCitzdHJ1Y3QgdXNiX2F1ZGlvX2Zvcm1hdAoreworCXU4CXR5cGU7CisJdTgJY2hhbm5lbHM7CisJdTgJbnVtX2ZyZXE7CisJdTgJc2Z6OworCXU4CWJpdHM7CisJdTE2CWZyZXFbTUFYX0ZSRVFdOworfTsKKworc3RydWN0IHVzYl9hdWRpb19pbnRlcmZhY2UKK3sKKwl1OAl0ZXJtaW5hbDsKKwl1OAlkZWxheTsKKwl1MTYJbnVtX2Zvcm1hdHM7CisJdTE2CWZvcm1hdF90eXBlOworCXU4CWZsYWdzOworCXU4CWlkbGVjb25mOwkvKiBJZGxlIGNvbmZpZyAqLworI2RlZmluZSBBVV9JRkFDRV9GT1VORAkxCisJc3RydWN0ICB1c2JfYXVkaW9fZm9ybWF0IGZvcm1hdFtNQVhfRk9STUFUXTsKK307CisKK3N0cnVjdCB1c2JfYXVkaW9fZGV2aWNlCit7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXU4CW1peGVyOworCXU4CXNlbGVjdG9yOworCXZvaWQJKmlycV9oYW5kbGU7CisJdTgJbnVtX2NoYW5uZWxzOworCXU4CW51bV9kc3BfaWZhY2U7CisJdTgJY2hhbm5lbF9tYXBbTUFYX0NIQU5dOworCXN0cnVjdCB1c2JfYXVkaW9fdGVybWluYWwgdGVybWluYWxbTUFYX0NIQU5dOworCXN0cnVjdCB1c2JfYXVkaW9faW50ZXJmYWNlIGludGVyZmFjZVtNQVhfSUZBQ0VdW01BWF9BTFRdOworfTsKKworCisKKy8qIEF1ZGlvIENsYXNzIHNwZWNpZmljIFJlcXVlc3QgQ29kZXMgKi8KKworI2RlZmluZSBTRVRfQ1VSICAgIDB4MDEKKyNkZWZpbmUgR0VUX0NVUiAgICAweDgxCisjZGVmaW5lIFNFVF9NSU4gICAgMHgwMgorI2RlZmluZSBHRVRfTUlOICAgIDB4ODIKKyNkZWZpbmUgU0VUX01BWCAgICAweDAzCisjZGVmaW5lIEdFVF9NQVggICAgMHg4MworI2RlZmluZSBTRVRfUkVTICAgIDB4MDQKKyNkZWZpbmUgR0VUX1JFUyAgICAweDg0CisjZGVmaW5lIFNFVF9NRU0gICAgMHgwNQorI2RlZmluZSBHRVRfTUVNICAgIDB4ODUKKyNkZWZpbmUgR0VUX1NUQVQgICAweGZmCisKKy8qIFRlcm1pbmFsIENvbnRyb2wgU2VsZWN0b3JzICovCisKKyNkZWZpbmUgQ09QWV9QUk9URUNUX0NPTlRST0wgICAgICAgMHgwMQorCisvKiBGZWF0dXJlIFVuaXQgQ29udHJvbCBTZWxlY3RvcnMgKi8KKworI2RlZmluZSBNVVRFX0NPTlRST0wgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFZPTFVNRV9DT05UUk9MICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQkFTU19DT05UUk9MICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBNSURfQ09OVFJPTCAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIFRSRUJMRV9DT05UUk9MICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgR1JBUEhJQ19FUVVBTElaRVJfQ09OVFJPTCAgMHgwNgorI2RlZmluZSBBVVRPTUFUSUNfR0FJTl9DT05UUk9MICAgICAweDA3CisjZGVmaW5lIERFTEFZX0NPTlRST0wgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgQkFTU19CT09TVF9DT05UUk9MICAgICAgICAgMHgwOQorI2RlZmluZSBMT1VETkVTU19DT05UUk9MICAgICAgICAgICAweDBhCisKKy8qIEVuZHBvaW50IENvbnRyb2wgU2VsZWN0b3JzICovCisKKyNkZWZpbmUgU0FNUExJTkdfRlJFUV9DT05UUk9MICAgICAgMHgwMQorI2RlZmluZSBQSVRDSF9DT05UUk9MICAgICAgICAgICAgICAweDAyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9ibHVldHR5LmMgYi9kcml2ZXJzL3VzYi9jbGFzcy9ibHVldHR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJhYzY1ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2JsdWV0dHkuYwpAQCAtMCwwICsxLDEyNzkgQEAKKy8qCisgKiBibHVldHR5LmMgICBWZXJzaW9uIDAuMTMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEgR3JlZyBLcm9haC1IYXJ0bWFuCTxncmVnQGtyb2FoLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwMCBNYXJrIERvdWdsYXMgQ29ybmVyCTxtY29ybmVyQHVtaWNoLmVkdT4KKyAqCisgKiBVU0IgQmx1ZXRvb3RoIFRUWSBkcml2ZXIsIGJhc2VkIG9uIHRoZSBCbHVldG9vdGggU3BlYyB2ZXJzaW9uIDEuMEIKKyAqIAorICogKDIwMDEvMTEvMzApIFZlcnNpb24gMC4xMyBna2gKKyAqCS0gYWRkZWQgbG9ja2luZyBwYXRjaCBmcm9tIE1hc29vZHVyIFJhaG1hbiA8cm1hc29vZHVAaW4uaWJtLmNvbT4KKyAqCS0gcmVtb3ZlZCBhY3RpdmUgdmFyaWFibGUsIGFzIG9wZW5fY291bnQgd2lsbCBkby4KKyAqCisgKiAoMjAwMS8wNy8wOSkgVmVyc2lvbiAwLjEyIGdraAorICoJLSByZW1vdmVkIGluX2ludGVycnVwdCgpIGNhbGwsIGFzIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBkbyAKKyAqCSAgdGhhdCBhbnltb3JlLgorICoKKyAqICgyMDAxLzA2LzA1KSBWZXJzaW9uIDAuMTEgZ2toCisgKgktIEZpeGVkIHByb2JsZW0gd2l0aCByZWFkIHVyYiBzdGF0dXMgc2F5aW5nIHRoYXQgd2UgaGF2ZSBzaHV0ZG93biwKKyAqCSAgYW5kIHRoYXQgd2Ugc2hvdWxkbid0IHJlc3VibWl0IHRoZSB1cmIuICBQYXRjaCBmcm9tIHVua25vd24uCisgKgorICogKDIwMDEvMDUvMjgpIFZlcnNpb24gMC4xMCBna2gKKyAqCS0gRml4ZWQgcHJvYmxlbSB3aXRoIHVzaW5nIGRhdGEgZnJvbSB1c2Vyc3BhY2UgaW4gdGhlIGJsdWV0b290aF93cml0ZQorICoJICBmdW5jdGlvbiBhcyBmb3VuZCBieSB0aGUgQ0hFQ0tFUiBwcm9qZWN0LgorICoJLSBBZGRlZCBhIGJ1ZmZlciB0byB0aGUgd3JpdGVfdXJiX3Bvb2wgd2hpY2ggcmVkdWNlcyB0aGUgbnVtYmVyIG9mCisgKgkgIGJ1ZmZlcnMgYmVpbmcgY3JlYXRlZCBhbmQgZGVzdHJveWVkIGZvciBldmVyIHdyaXRlLiAgQWxzbyBjbGVhbnMKKyAqCSAgdXAgdGhlIGxvZ2ljIGEgYml0LgorICoJLSBBZGRlZCBhIGJ1ZmZlciB0byB0aGUgY29udHJvbF91cmJfcG9vbCB3aGljaCBmaXhlcyBhIG1lbW9yeSBsZWFrCisgKgkgIHdoZW4gdGhlIGRldmljZSBpcyByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4KKyAqCisgKiAoMjAwMS8wNS8yOCkgVmVyc2lvbiAwLjkgZ2toCisgKglGaXhlZCBwcm9ibGVtIHdpdGggYmx1ZXRvb3RoPT1OVUxMIGZvciBibHVldG9vdGhfcmVhZF9idWxrX2NhbGxiYWNrCisgKgl3aGljaCB3YXMgZm91bmQgYnkgYm90aCB0aGUgQ0hFQ0tFUiBwcm9qZWN0IGFuZCBNaWtrbyBSYWhrb25lbi4KKyAqCisgKiAoMDgvMDQvMjAwMSkgZ2IKKyAqCUlkZW50aWZ5IHZlcnNpb24gb24gbW9kdWxlIGxvYWQuCisgKgorICogKDIwMDEvMDMvMTApIFZlcnNpb24gMC44IGdraAorICoJRml4ZWQgcHJvYmxlbSB3aXRoIG5vdCB1bmxpbmtpbmcgaW50ZXJydXB0IHVyYiBvbiBkZXZpY2UgY2xvc2UKKyAqCWFuZCByZXN1Ym1pdHRpbmcgdGhlIHJlYWQgdXJiIG9uIGVycm9yIHdpdGggYmx1ZXRvb3RoIHN0cnVjdC4KKyAqCVRoYW5rcyB0byBOYXJheWFuIE1vaGFucmFtIDxuYXJheWFuQFJvdmluZ05ldHdvcmtzLmNvbT4gZm9yIHRoZQorICoJZml4ZXMuCisgKgorICogKDExLzI5LzIwMDApIFZlcnNpb24gMC43IGdraAorICoJRml4ZWQgcHJvYmxlbSB3aXRoIG92ZXJydW5uaW5nIHRoZSB0dHkgZmxpcCBidWZmZXIuCisgKglSZW1vdmVkIHVubmVlZGVkIE5VTEwgcG9pbnRlciBpbml0aWFsaXphdGlvbi4KKyAqCisgKiAoMTAvMDUvMjAwMCkgVmVyc2lvbiAwLjYgZ2toCisgKglGaXhlZCBidWcgd2l0aCB1cmItPmRldiBub3QgYmVpbmcgc2V0IHByb3Blcmx5LCBub3cgdGhhdCB0aGUgdXNiCisgKgljb3JlIG5lZWRzIGl0LgorICoJR290IGEgcmVhbCBtYWpvciBpZCBudW1iZXIgYW5kIG5hbWUuCisgKgorICogKDA4LzA2LzIwMDApIFZlcnNpb24gMC41IGdraAorICoJRml4ZWQgcHJvYmxlbSBvZiBub3QgcmVzdWJtaXR0aW5nIHRoZSBidWxrIHJlYWQgdXJiIGlmIHRoZXJlIGlzCisgKglhbiBlcnJvciBpbiB0aGUgY2FsbGJhY2suICBFcmljc3NvbiBkZXZpY2VzIHNlZW0gdG8gbmVlZCB0aGlzLgorICoKKyAqICgwNy8xMS8yMDAwKSBWZXJzaW9uIDAuNCBna2gKKyAqCUZpeGVkIGJ1ZyBpbiBkaXNjb25uZWN0IGZvciB3aGVuIHdlIGNhbGwgdHR5X2hhbmd1cAorICoJRml4ZWQgYnVnIGluIGJsdWV0b290aF9jdHJsX21zZyB3aGVyZSB0aGUgYmx1ZXRvb3RoIHN0cnVjdCB3YXMgbm90CisgKglnZXR0aW5nIGF0dGFjaGVkIHRvIHRoZSBjb250cm9sIHVyYiBwcm9wZXJseS4KKyAqCUZpeGVkIGJ1ZyBpbiBibHVldG9vdGhfd3JpdGUgd2hlcmUgd2UgcGF5IGF0dGVudGlvbiB0byB0aGUgcmVzdWx0CisgKglvZiBibHVldG9vdGhfY3RybF9tc2cuCisgKgorICogKDA4LzAzLzIwMDApIFZlcnNpb24gMC4zIGdraCBtZGMKKyAqCU1lcmdlZCBpbiBNYXJrJ3MgY2hhbmdlcyB0byBtYWtlIHRoZSBkcml2ZXIgcGxheSBuaWNlIHdpdGggdGhlIEF4aXMKKyAqCXN0YWNrLgorICoJTWFkZSB0aGUgd3JpdGUgYnVsayB1c2UgYW4gdXJiIHBvb2wgdG8gZW5hYmxlIGxhcmdlciB0cmFuc2ZlcnMgd2l0aAorICoJZmV3ZXIgY2FsbHMgdG8gdGhlIGRyaXZlci4KKyAqCUZpeGVkIG9mZiBieSBvbmUgYnVnIGluIGFjbCBwa3QgcmVjZWl2ZQorICoJTWFkZSBwYWNrZXQgY291bnRlcnMgc3BlY2lmaWMgdG8gZWFjaCBibHVldG9vdGggZGV2aWNlIAorICoJQWRkZWQgY2hlY2tzIGZvciB6ZXJvIGxlbmd0aCBjYWxsYmFja3MKKyAqCUFkZGVkIGJ1ZmZlcnMgZm9yIGludCBhbmQgYnVsayBwYWNrZXRzLiAgSGFkIHRvIGRvIHRoaXMgb3RoZXJ3aXNlIAorICoJcGFja2V0IHR5cGVzIGNvdWxkIGludGVybWluZ2xlLgorICoJTWFkZSBhIGNvbnRyb2wgdXJiIHBvb2wgZm9yIHRoZSBjb250cm9sIG1lc3NhZ2VzLgorICoKKyAqICgwNy8xMS8yMDAwKSBWZXJzaW9uIDAuMiBna2gKKyAqCUZpeGVkIGEgc21hbGwgYnVnIGZvdW5kIGJ5IE5pbHMgRmFlcmJlciBpbiB0aGUgdXNiX2JsdWV0b290aF9wcm9iZSAKKyAqCWZ1bmN0aW9uLgorICoKKyAqICgwNy8wOS8yMDAwKSBWZXJzaW9uIDAuMSBna2gKKyAqCUluaXRpYWwgcmVsZWFzZS4gSGFzIHN1cHBvcnQgZm9yIHNlbmRpbmcgQUNMIGRhdGEgKHdoaWNoIGlzIHJlYWxseSBqdXN0CisgKglhIEhDSSBmcmFtZS4pIFJhdyBIQ0kgY29tbWFuZHMgYW5kIEhDSSBldmVudHMgYXJlIG5vdCBzdXBwb3J0ZWQuCisgKglBIGlvY3RsIHdpbGwgcHJvYmFibHkgYmUgbmVlZGVkIGZvciB0aGUgSENJIGNvbW1hbmRzIGFuZCBldmVudHMgaW4gdGhlCisgKglmdXR1cmUuIEFsbCBpc29jaCBlbmRwb2ludHMgYXJlIGlnbm9yZWQgYXQgdGhpcyB0aW1lIGFsc28uCisgKglUaGlzIGRyaXZlciBzaG91bGQgd29yayBmb3IgYWxsIGN1cnJlbnRseSBzaGlwcGluZyBVU0IgQmx1ZXRvb3RoIAorICoJZGV2aWNlcyBhdCB0aGlzIHRpbWUgOikKKyAqIAorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjZGVmaW5lIERFQlVHCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjEzIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJHcmVnIEtyb2FoLUhhcnRtYW4sIE1hcmsgRG91Z2xhcyBDb3JuZXIiCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgQmx1ZXRvb3RoIHR0eSBkcml2ZXIiCisKKy8qIGRlZmluZSB0aGlzIGlmIHlvdSBoYXZlIGhhcmR3YXJlIHRoYXQgaXMgbm90IGdvb2QgKi8KKy8qI2RlZmluZQlCVEJVR0dZSEFSRFdBUkUgKi8KKworLyogQ2xhc3MsIFN1YkNsYXNzLCBhbmQgUHJvdG9jb2wgY29kZXMgdGhhdCBkZXNjcmliZSBhIEJsdWV0b290aCBkZXZpY2UgKi8KKyNkZWZpbmUgV0lSRUxFU1NfQ0xBU1NfQ09ERQkJCTB4ZTAKKyNkZWZpbmUgUkZfU1VCQ0xBU1NfQ09ERQkJCTB4MDEKKyNkZWZpbmUgQkxVRVRPT1RIX1BST0dSQU1NSU5HX1BST1RPQ09MX0NPREUJMHgwMQorCisKKyNkZWZpbmUgQkxVRVRPT1RIX1RUWV9NQUpPUgkyMTYJLyogcmVhbCBkZXZpY2Ugbm9kZSBtYWpvciBpZCAqLworI2RlZmluZSBCTFVFVE9PVEhfVFRZX01JTk9SUwkyNTYJLyogd2hvbGUgbG90dGEgYmx1ZXRvb3RoIGRldmljZXMgKi8KKworI2RlZmluZSBVU0JfQkxVRVRPT1RIX01BR0lDCTB4NmQwMgkvKiBtYWdpYyBudW1iZXIgZm9yIGJsdWV0b290aCBzdHJ1Y3QgKi8KKworI2RlZmluZSBCTFVFVE9PVEhfQ09OVFJPTF9SRVFVRVNUX1RZUEUJMHgyMAorCisvKiBCbHVldG9vdGggcGFja2V0IHR5cGVzICovCisjZGVmaW5lIENNRF9QS1QJCQkweDAxCisjZGVmaW5lIEFDTF9QS1QJCQkweDAyCisjZGVmaW5lIFNDT19QS1QJCQkweDAzCisjZGVmaW5lIEVWRU5UX1BLVAkJMHgwNAorI2RlZmluZSBFUlJPUl9QS1QJCTB4MDUKKyNkZWZpbmUgTkVHX1BLVAkJCTB4MDYKKworLyogTWVzc2FnZSBzaXplcyAqLworI2RlZmluZSBNQVhfRVZFTlRfU0laRQkJMHhGRgorI2RlZmluZSBFVkVOVF9IRFJfU0laRQkJMwkvKiAyIGZvciB0aGUgaGVhZGVyICsgMSBmb3IgdGhlIHR5cGUgaW5kaWNhdG9yICovCisjZGVmaW5lIEVWRU5UX0JVRkZFUl9TSVpFCShNQVhfRVZFTlRfU0laRSArIEVWRU5UX0hEUl9TSVpFKQorCisjZGVmaW5lIE1BWF9BQ0xfU0laRQkJMHhGRkZGCisjZGVmaW5lIEFDTF9IRFJfU0laRQkJNQkvKiA0IGZvciB0aGUgaGVhZGVyICsgMSBmb3IgdGhlIHR5cGUgaW5kaWNhdG9yICovCisjZGVmaW5lIEFDTF9CVUZGRVJfU0laRQkJKE1BWF9BQ0xfU0laRSArIEFDTF9IRFJfU0laRSkKKworLyogcGFyaXR5IGNoZWNrIGZsYWcgKi8KKyNkZWZpbmUgUkVMRVZBTlRfSUZMQUcoaWZsYWcpCShpZmxhZyAmIChJR05CUkt8QlJLSU5UfElHTlBBUnxQQVJNUkt8SU5QQ0spKQorCisjZGVmaW5lIENIQVIySU5UMTYoYzEsYzApCSgoKHUzMikoKGMxKSAmIDB4ZmYpIDw8IDgpICsgKHUzMikoKGMwKSAmIDB4ZmYpKQorCisjZGVmaW5lIE5VTV9CVUxLX1VSQlMJCTI0CisjZGVmaW5lIE5VTV9DT05UUk9MX1VSQlMJMTYKKworc3RydWN0IHVzYl9ibHVldG9vdGggeworCWludAkJCW1hZ2ljOworCXN0cnVjdCB1c2JfZGV2aWNlICoJZGV2OworCXN0cnVjdCB0dHlfZHJpdmVyICoJdHR5X2RyaXZlcjsJLyogdGhlIHR0eV9kcml2ZXIgZm9yIHRoaXMgZGV2aWNlICovCisJc3RydWN0IHR0eV9zdHJ1Y3QgKgl0dHk7CQkvKiB0aGUgY29ycmVzcG9uZGluZyB0dHkgZm9yIHRoaXMgcG9ydCAqLworCisJdW5zaWduZWQgY2hhcgkJbWlub3I7CQkvKiB0aGUgc3RhcnRpbmcgbWlub3IgbnVtYmVyIGZvciB0aGlzIGRldmljZSAqLworCWludAkJCXRocm90dGxlOwkvKiB0aHJvdHRsZWQgYnkgdHR5IGxheWVyICovCisJaW50CQkJb3Blbl9jb3VudDsKKwkKKwlfX3U4CQkJY29udHJvbF9vdXRfYkludGVyZmFjZU51bTsKKwlzdHJ1Y3QgdXJiICoJCWNvbnRyb2xfdXJiX3Bvb2xbTlVNX0NPTlRST0xfVVJCU107CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdAlkcltOVU1fQ09OVFJPTF9VUkJTXTsKKworCXVuc2lnbmVkIGNoYXIgKgkJaW50ZXJydXB0X2luX2J1ZmZlcjsKKwlzdHJ1Y3QgdXJiICoJCWludGVycnVwdF9pbl91cmI7CisJX191OAkJCWludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3M7CisJX191OAkJCWludGVycnVwdF9pbl9pbnRlcnZhbDsKKwlpbnQJCQlpbnRlcnJ1cHRfaW5fYnVmZmVyX3NpemU7CisKKwl1bnNpZ25lZCBjaGFyICoJCWJ1bGtfaW5fYnVmZmVyOworCXN0cnVjdCB1cmIgKgkJcmVhZF91cmI7CisJX191OAkJCWJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzOworCWludAkJCWJ1bGtfaW5fYnVmZmVyX3NpemU7CisKKwlpbnQJCQlidWxrX291dF9idWZmZXJfc2l6ZTsKKwlfX3U4CQkJYnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzOworCisJd2FpdF9xdWV1ZV9oZWFkX3QJd3JpdGVfd2FpdDsKKworCXN0cnVjdCB3b3JrX3N0cnVjdAkJCXdvcms7CS8qIHdvcmsgcXVldWUgZW50cnkgZm9yIGxpbmUgZGlzY2lwbGluZSB3YWtpbmcgdXAgKi8KKwkKKwl1bnNpZ25lZCBpbnQJCWludF9wYWNrZXRfcG9zOworCXVuc2lnbmVkIGNoYXIJCWludF9idWZmZXJbRVZFTlRfQlVGRkVSX1NJWkVdOworCXVuc2lnbmVkIGludAkJYnVsa19wYWNrZXRfcG9zOworCXVuc2lnbmVkIGNoYXIJCWJ1bGtfYnVmZmVyW0FDTF9CVUZGRVJfU0laRV07CS8qIDY0ayBwcmVhbGxvY2F0ZWQsIGZpeD8gKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlCWxvY2s7Cit9OworCisKKy8qIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgIGJsdWV0b290aF9vcGVuCQkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQgYmx1ZXRvb3RoX2Nsb3NlCQkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCAgYmx1ZXRvb3RoX3dyaXRlCQkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOworc3RhdGljIGludCAgYmx1ZXRvb3RoX3dyaXRlX3Jvb20JKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworc3RhdGljIGludCAgYmx1ZXRvb3RoX2NoYXJzX2luX2J1ZmZlcgkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CitzdGF0aWMgdm9pZCBibHVldG9vdGhfdGhyb3R0bGUJCShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyB2b2lkIGJsdWV0b290aF91bnRocm90dGxlCShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyBpbnQgIGJsdWV0b290aF9pb2N0bAkJKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgdm9pZCBibHVldG9vdGhfc2V0X3Rlcm1pb3MJKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICpvbGQpOworCitzdGF0aWMgdm9pZCBibHVldG9vdGhfaW50X2NhbGxiYWNrCQkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBibHVldG9vdGhfY3RybF9jYWxsYmFjawkJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgYmx1ZXRvb3RoX3JlYWRfYnVsa19jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBibHVldG9vdGhfd3JpdGVfYnVsa19jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK3N0YXRpYyBpbnQgdXNiX2JsdWV0b290aF9wcm9iZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgdm9pZCB1c2JfYmx1ZXRvb3RoX2Rpc2Nvbm5lY3QJKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKKworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX2JsdWV0b290aF9pZHMgW10gPSB7CisJeyBVU0JfREVWSUNFX0lORk8oV0lSRUxFU1NfQ0xBU1NfQ09ERSwgUkZfU1VCQ0xBU1NfQ09ERSwgQkxVRVRPT1RIX1BST0dSQU1NSU5HX1BST1RPQ09MX0NPREUpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgdXNiX2JsdWV0b290aF9pZHMpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX2JsdWV0b290aF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImJsdWV0dHkiLAorCS5wcm9iZSA9CXVzYl9ibHVldG9vdGhfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2JfYmx1ZXRvb3RoX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JdXNiX2JsdWV0b290aF9pZHMsCit9OworCitzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIJKmJsdWV0b290aF90dHlfZHJpdmVyOworc3RhdGljIHN0cnVjdCB1c2JfYmx1ZXRvb3RoCSpibHVldG9vdGhfdGFibGVbQkxVRVRPT1RIX1RUWV9NSU5PUlNdOworCisKK3N0YXRpYyBpbmxpbmUgaW50IGJsdWV0b290aF9wYXJhbm9pYV9jaGVjayAoc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCwgY29uc3QgY2hhciAqZnVuY3Rpb24pCit7CisJaWYgKCFibHVldG9vdGgpIHsKKwkJZGJnKCIlcyAtIGJsdWV0b290aCA9PSBOVUxMIiwgZnVuY3Rpb24pOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChibHVldG9vdGgtPm1hZ2ljICE9IFVTQl9CTFVFVE9PVEhfTUFHSUMpIHsKKwkJZGJnKCIlcyAtIGJhZCBtYWdpYyBudW1iZXIgZm9yIGJsdWV0b290aCIsIGZ1bmN0aW9uKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9ibHVldG9vdGgqIGdldF91c2JfYmx1ZXRvb3RoIChzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoLCBjb25zdCBjaGFyICpmdW5jdGlvbikKK3sKKwlpZiAoIWJsdWV0b290aCB8fCAKKwkgICAgYmx1ZXRvb3RoX3BhcmFub2lhX2NoZWNrIChibHVldG9vdGgsIGZ1bmN0aW9uKSkgeyAKKwkJLyogdGhlbiBzYXkgdGhhdCB3ZSBkb24ndCBoYXZlIGEgdmFsaWQgdXNiX2JsdWV0b290aCB0aGluZywgd2hpY2ggd2lsbAorCQkgKiBlbmQgdXAgZ2VuZXJhdGluZyAtRU5PREVWIHJldHVybiB2YWx1ZXMgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGJsdWV0b290aDsKK30KKworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2JfYmx1ZXRvb3RoICpnZXRfYmx1ZXRvb3RoX2J5X2luZGV4IChpbnQgaW5kZXgpCit7CisJcmV0dXJuIGJsdWV0b290aF90YWJsZVtpbmRleF07Cit9CisKKworc3RhdGljIGludCBibHVldG9vdGhfY3RybF9tc2cgKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGgsIGludCByZXF1ZXN0LCBpbnQgdmFsdWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgdXJiICp1cmIgPSBOVUxMOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmRyID0gTlVMTDsKKwlpbnQgaTsKKwlpbnQgc3RhdHVzOworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJLyogdHJ5IHRvIGZpbmQgYSBmcmVlIHVyYiBpbiBvdXIgbGlzdCAqLworCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09OVFJPTF9VUkJTOyArK2kpIHsKKwkJaWYgKGJsdWV0b290aC0+Y29udHJvbF91cmJfcG9vbFtpXS0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQkJdXJiID0gYmx1ZXRvb3RoLT5jb250cm9sX3VyYl9wb29sW2ldOworCQkJZHIgPSAmYmx1ZXRvb3RoLT5kcltpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICh1cmIgPT0gTlVMTCkgeworCQlkYmcgKCIlcyAtIG5vIGZyZWUgdXJicyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIGtlZXAgaW5jcmVhc2luZyB0aGUgdXJiIHRyYW5zZmVyIGJ1ZmZlciB0byBmaXQgdGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UgKi8KKwlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgeworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MgKGxlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7CisJCQllcnIgKCIlcyAtIG91dCBvZiBtZW1vcnkiLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA8IGxlbikgeworCQlrZnJlZSAodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MgKGxlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7CisJCQllcnIgKCIlcyAtIG91dCBvZiBtZW1vcnkiLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisJbWVtY3B5ICh1cmItPnRyYW5zZmVyX2J1ZmZlciwgYnVmLCBsZW4pOworCisJZHItPmJSZXF1ZXN0VHlwZT0gQkxVRVRPT1RIX0NPTlRST0xfUkVRVUVTVF9UWVBFOworCWRyLT5iUmVxdWVzdCA9IHJlcXVlc3Q7CisJZHItPndWYWx1ZSA9IGNwdV90b19sZTE2KCh1MTYpIHZhbHVlKTsKKwlkci0+d0luZGV4ID0gY3B1X3RvX2xlMTYoKHUxNikgYmx1ZXRvb3RoLT5jb250cm9sX291dF9iSW50ZXJmYWNlTnVtKTsKKwlkci0+d0xlbmd0aCA9IGNwdV90b19sZTE2KCh1MTYpIGxlbik7CisJCisJdXNiX2ZpbGxfY29udHJvbF91cmIgKHVyYiwgYmx1ZXRvb3RoLT5kZXYsIHVzYl9zbmRjdHJscGlwZShibHVldG9vdGgtPmRldiwgMCksCisJCQkgICh1bnNpZ25lZCBjaGFyKilkciwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIGxlbiwgYmx1ZXRvb3RoX2N0cmxfY2FsbGJhY2ssIGJsdWV0b290aCk7CisKKwkvKiBzZW5kIGl0IGRvd24gdGhlIHBpcGUgKi8KKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCWlmIChzdGF0dXMpCisJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihjb250cm9sKSBmYWlsZWQgd2l0aCBzdGF0dXMgPSAlZCIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkKKwlyZXR1cm4gc3RhdHVzOworfQorCisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRHJpdmVyIHR0eSBpbnRlcmZhY2UgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGJsdWV0b290aF9vcGVuIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aDsKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBpbml0aWFsaXplIHRoZSBwb2ludGVyIGluY2FzZSBzb21ldGhpbmcgZmFpbHMgKi8KKwl0dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKKworCS8qIGdldCB0aGUgYmx1ZXRvb3RoIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyB0dHkgcG9pbnRlciAqLworCWJsdWV0b290aCA9IGdldF9ibHVldG9vdGhfYnlfaW5kZXggKHR0eS0+aW5kZXgpOworCisJaWYgKGJsdWV0b290aF9wYXJhbm9pYV9jaGVjayAoYmx1ZXRvb3RoLCBfX0ZVTkNUSU9OX18pKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRvd24gKCZibHVldG9vdGgtPmxvY2spOworIAorCSsrYmx1ZXRvb3RoLT5vcGVuX2NvdW50OworCWlmIChibHVldG9vdGgtPm9wZW5fY291bnQgPT0gMSkgeworCQkvKiBzZXQgdXAgb3VyIHN0cnVjdHVyZSBtYWtpbmcgdGhlIHR0eSBkcml2ZXIgcmVtZW1iZXIgb3VyIG9iamVjdCwgYW5kIHVzIGl0ICovCisJCXR0eS0+ZHJpdmVyX2RhdGEgPSBibHVldG9vdGg7CisJCWJsdWV0b290aC0+dHR5ID0gdHR5OworCisJCS8qIGZvcmNlIGxvd19sYXRlbmN5IG9uIHNvIHRoYXQgb3VyIHR0eV9wdXNoIGFjdHVhbGx5IGZvcmNlcyB0aGUgZGF0YSB0aHJvdWdoLCAKKwkgCSogb3RoZXJ3aXNlIGl0IGlzIHNjaGVkdWxlZCwgYW5kIHdpdGggaGlnaCBkYXRhIHJhdGVzIChsaWtlIHdpdGggT0hDSSkgZGF0YQorCSAJKiBjYW4gZ2V0IGxvc3QuICovCisJCWJsdWV0b290aC0+dHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisJCisJCS8qIFJlc2V0IHRoZSBwYWNrZXQgcG9zaXRpb24gY291bnRlcnMgKi8KKwkJYmx1ZXRvb3RoLT5pbnRfcGFja2V0X3BvcyA9IDA7CisJCWJsdWV0b290aC0+YnVsa19wYWNrZXRfcG9zID0gMDsKKworI2lmbmRlZiBCVEJVR0dZSEFSRFdBUkUKKwkJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKwkJdXNiX2ZpbGxfYnVsa191cmIgKGJsdWV0b290aC0+cmVhZF91cmIsIGJsdWV0b290aC0+ZGV2LCAKKwkJCSAgICAgICB1c2JfcmN2YnVsa3BpcGUoYmx1ZXRvb3RoLT5kZXYsIGJsdWV0b290aC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJICAgICAgIGJsdWV0b290aC0+YnVsa19pbl9idWZmZXIsCisJCQkgICAgICAgYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlcl9zaXplLAorCQkJICAgICAgIGJsdWV0b290aF9yZWFkX2J1bGtfY2FsbGJhY2ssIGJsdWV0b290aCk7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKGJsdWV0b290aC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmVzdWx0KQorCQkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHJlYWQgYnVsaykgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworI2VuZGlmCisJCXVzYl9maWxsX2ludF91cmIgKGJsdWV0b290aC0+aW50ZXJydXB0X2luX3VyYiwgYmx1ZXRvb3RoLT5kZXYsCisJCQkgICAgICB1c2JfcmN2aW50cGlwZShibHVldG9vdGgtPmRldiwgYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgICAgIGJsdWV0b290aC0+aW50ZXJydXB0X2luX2J1ZmZlciwKKwkJCSAgICAgIGJsdWV0b290aC0+aW50ZXJydXB0X2luX2J1ZmZlcl9zaXplLAorCQkJICAgICAgYmx1ZXRvb3RoX2ludF9jYWxsYmFjaywgYmx1ZXRvb3RoLAorCQkJICAgICAgYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5faW50ZXJ2YWwpOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihibHVldG9vdGgtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmVzdWx0KQorCQkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKGludGVycnVwdCBpbikgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCX0KKwkKKwl1cCgmYmx1ZXRvb3RoLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIGJsdWV0b290aF9jbG9zZSAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCXN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGggPSBnZXRfdXNiX2JsdWV0b290aCAoKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICopdHR5LT5kcml2ZXJfZGF0YSwgX19GVU5DVElPTl9fKTsKKworCWlmICghYmx1ZXRvb3RoKSB7CisJCXJldHVybjsKKwl9CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmICghYmx1ZXRvb3RoLT5vcGVuX2NvdW50KSB7CisJCWRiZyAoIiVzIC0gZGV2aWNlIG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJZG93biAoJmJsdWV0b290aC0+bG9jayk7CisgCisJLS1ibHVldG9vdGgtPm9wZW5fY291bnQ7CisJaWYgKGJsdWV0b290aC0+b3Blbl9jb3VudCA8PSAwKSB7CisJCWJsdWV0b290aC0+b3Blbl9jb3VudCA9IDA7CisKKwkJLyogc2h1dGRvd24gYW55IGluLWZsaWdodCB1cmJzIHRoYXQgd2Uga25vdyBhYm91dCAqLworCQl1c2Jfa2lsbF91cmIgKGJsdWV0b290aC0+cmVhZF91cmIpOworCQl1c2Jfa2lsbF91cmIgKGJsdWV0b290aC0+aW50ZXJydXB0X2luX3VyYik7CisJfQorCXVwKCZibHVldG9vdGgtPmxvY2spOworfQorCisKK3N0YXRpYyBpbnQgYmx1ZXRvb3RoX3dyaXRlIChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCA9IGdldF91c2JfYmx1ZXRvb3RoICgoc3RydWN0IHVzYl9ibHVldG9vdGggKil0dHktPmRyaXZlcl9kYXRhLCBfX0ZVTkNUSU9OX18pOworCXN0cnVjdCB1cmIgKnVyYiA9IE5VTEw7CisJdW5zaWduZWQgY2hhciAqdGVtcF9idWZmZXIgPSBOVUxMOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmN1cnJlbnRfYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgKnVyYl9idWZmZXI7CisJaW50IGk7CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAoIWJsdWV0b290aCkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkYmcoIiVzIC0gJWQgYnl0ZShzKSIsIF9fRlVOQ1RJT05fXywgY291bnQpOworCisJaWYgKCFibHVldG9vdGgtPm9wZW5fY291bnQpIHsKKwkJZGJnICgiJXMgLSBkZXZpY2Ugbm90IG9wZW5lZCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjb3VudCA9PSAwKSB7CisJCWRiZygiJXMgLSB3cml0ZSByZXF1ZXN0IG9mIDAgYnl0ZXMiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGNvdW50ID09IDEpIHsKKwkJZGJnKCIlcyAtIHdyaXRlIHJlcXVlc3Qgb25seSBpbmNsdWRlZCB0eXBlICVkIiwgX19GVU5DVElPTl9fLCBidWZbMF0pOworCQlyZXR1cm4gMTsKKwl9CisKKyNpZmRlZiBERUJVRworCXByaW50ayAoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiAlcyAtIGxlbmd0aCA9ICVkLCBkYXRhID0gIiwgX19GVU5DVElPTl9fLCBjb3VudCk7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKwkJcHJpbnRrICgiJS4yeCAiLCBidWZbaV0pOworCX0KKwlwcmludGsgKCJcbiIpOworI2VuZGlmCisKKwljdXJyZW50X2J1ZmZlciA9IGJ1ZjsKKworCXN3aXRjaCAoKmN1cnJlbnRfYnVmZmVyKSB7CisJCS8qIEZpcnN0IGJ5dGUgaW5kaWNhdGVzIHRoZSB0eXBlIG9mIHBhY2tldCAqLworCQljYXNlIENNRF9QS1Q6CisJCQkvKiBkYmcoIiVzLSBTZW5kIGNtZF9wa3QgbGVuOiVkIiwgX19GVU5DVElPTl9fLCBjb3VudCk7Ki8KKworCQkJcmV0dmFsID0gYmx1ZXRvb3RoX2N0cmxfbXNnIChibHVldG9vdGgsIDB4MDAsIDB4MDAsICZjdXJyZW50X2J1ZmZlclsxXSwgY291bnQtMSk7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJZ290byBleGl0OworCQkJfQorCQkJcmV0dmFsID0gY291bnQ7CisJCQlicmVhazsKKworCQljYXNlIEFDTF9QS1Q6CisJCQkrK2N1cnJlbnRfYnVmZmVyOworCQkJLS1jb3VudDsKKworCQkJdXJiX2J1ZmZlciA9IGttYWxsb2MgKGNvdW50LCBHRlBfQVRPTUlDKTsKKwkJCWlmICghdXJiX2J1ZmZlcikgeworCQkJCWRldl9lcnIoJmJsdWV0b290aC0+ZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKworCQkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKKwkJCWlmICghdXJiKSB7CisJCQkJZGV2X2VycigmYmx1ZXRvb3RoLT5kZXYtPmRldiwgIm5vIG1vcmUgZnJlZSB1cmJzXG4iKTsKKwkJCQlrZnJlZSh1cmJfYnVmZmVyKTsKKwkJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJCW1lbWNweSAodXJiX2J1ZmZlciwgY3VycmVudF9idWZmZXIsIGNvdW50KTsKKworCQkJLyogYnVpbGQgdXAgb3VyIHVyYiAqLworCQkJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBibHVldG9vdGgtPmRldiwgCisJCQkJCSAgdXNiX3NuZGJ1bGtwaXBlKGJsdWV0b290aC0+ZGV2LAorCQkJCQkJICAJICBibHVldG9vdGgtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkJCSAgdXJiX2J1ZmZlciwKKwkJCQkJICBjb3VudCwKKwkJCQkJICBibHVldG9vdGhfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkJCQkJICBibHVldG9vdGgpOworCisKKwkJCS8qIHNlbmQgaXQgZG93biB0aGUgcGlwZSAqLworCQkJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKwkJCWlmIChyZXR2YWwpIHsKKwkJCQlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkIHdpdGggZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisKKwkJCS8qIHdlIGFyZSBkb25lIHdpdGggdGhpcyB1cmIsIHNvIGxldCB0aGUgaG9zdCBkcml2ZXIKKwkJCSAqIHJlYWxseSBmcmVlIGl0IHdoZW4gaXQgaXMgZmluaXNoZWQgd2l0aCBpdCAqLworCQkJdXNiX2ZyZWVfdXJiICh1cmIpOworCQkJcmV0dmFsID0gY291bnQgKyAxOworCQkJYnJlYWs7CisJCQorCQlkZWZhdWx0IDoKKwkJCWRiZygiJXMgLSB1bnN1cHBvcnRlZCAoYXQgdGhpcyB0aW1lKSB3cml0ZSB0eXBlIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwl9CisKK2V4aXQ6CisJa2ZyZWUgKHRlbXBfYnVmZmVyKTsKKworCXJldHVybiByZXR2YWw7Cit9IAorCisKK3N0YXRpYyBpbnQgYmx1ZXRvb3RoX3dyaXRlX3Jvb20gKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpIAoreworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJLyoKKwkgKiBXZSByZWFsbHkgY2FuIHRha2UgYW55dGhpbmcgdGhlIHVzZXIgdGhyb3dzIGF0IHVzCisJICogYnV0IGxldCdzIHBpY2sgYSBuaWNlIGJpZyBudW1iZXIgdG8gdGVsbCB0aGUgdHR5CisJICogbGF5ZXIgdGhhdCB3ZSBoYXZlIGxvdHMgb2YgZnJlZSBzcGFjZQorCSAqLworCXJldHVybiAyMDQ4OworfQorCisKK3N0YXRpYyBpbnQgYmx1ZXRvb3RoX2NoYXJzX2luX2J1ZmZlciAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkgCit7CisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiAKKwkgKiBXZSBjYW4ndCByZWFsbHkgYWNjb3VudCBmb3IgaG93IG11Y2ggZGF0YSB3ZQorCSAqIGhhdmUgc2VudCBvdXQsIGJ1dCBoYXNuJ3QgbWFkZSBpdCB0aHJvdWdoIHRvIHRoZQorCSAqIGRldmljZSwgc28ganVzdCB0ZWxsIHRoZSB0dHkgbGF5ZXIgdGhhdCBldmVyeXRoaW5nCisJICogaXMgZmx1c2hlZC4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBibHVldG9vdGhfdGhyb3R0bGUgKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KQoreworCXN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGggPSBnZXRfdXNiX2JsdWV0b290aCAoKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICopdHR5LT5kcml2ZXJfZGF0YSwgX19GVU5DVElPTl9fKTsKKworCWlmICghYmx1ZXRvb3RoKSB7CisJCXJldHVybjsKKwl9CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmICghYmx1ZXRvb3RoLT5vcGVuX2NvdW50KSB7CisJCWRiZyAoIiVzIC0gZGV2aWNlIG5vdCBvcGVuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKwkKKwlkYmcoIiVzIHVuc3VwcG9ydGVkIChhdCB0aGlzIHRpbWUpIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybjsKK30KKworCitzdGF0aWMgdm9pZCBibHVldG9vdGhfdW50aHJvdHRsZSAoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpCit7CisJc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCA9IGdldF91c2JfYmx1ZXRvb3RoICgoc3RydWN0IHVzYl9ibHVldG9vdGggKil0dHktPmRyaXZlcl9kYXRhLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKCFibHVldG9vdGgpIHsKKwkJcmV0dXJuOworCX0KKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKCFibHVldG9vdGgtPm9wZW5fY291bnQpIHsKKwkJZGJnICgiJXMgLSBkZXZpY2Ugbm90IG9wZW4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJZGJnKCIlcyB1bnN1cHBvcnRlZCAoYXQgdGhpcyB0aW1lKSIsIF9fRlVOQ1RJT05fXyk7Cit9CisKKworc3RhdGljIGludCBibHVldG9vdGhfaW9jdGwgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCA9IGdldF91c2JfYmx1ZXRvb3RoICgoc3RydWN0IHVzYl9ibHVldG9vdGggKil0dHktPmRyaXZlcl9kYXRhLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKCFibHVldG9vdGgpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGJnKCIlcyAtIGNtZCAweCUuNHgiLCBfX0ZVTkNUSU9OX18sIGNtZCk7CisKKwlpZiAoIWJsdWV0b290aC0+b3Blbl9jb3VudCkgeworCQlkYmcgKCIlcyAtIGRldmljZSBub3Qgb3BlbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIEZJWE1FISEhICovCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworCitzdGF0aWMgdm9pZCBibHVldG9vdGhfc2V0X3Rlcm1pb3MgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICogb2xkKQoreworCXN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGggPSBnZXRfdXNiX2JsdWV0b290aCAoKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICopdHR5LT5kcml2ZXJfZGF0YSwgX19GVU5DVElPTl9fKTsKKworCWlmICghYmx1ZXRvb3RoKSB7CisJCXJldHVybjsKKwl9CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmICghYmx1ZXRvb3RoLT5vcGVuX2NvdW50KSB7CisJCWRiZyAoIiVzIC0gZGV2aWNlIG5vdCBvcGVuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEZJWE1FISEhICovCisKKwlyZXR1cm47Cit9CisKKworI2lmZGVmIEJUQlVHR1lIQVJEV0FSRQordm9pZCBidHVzYl9lbmFibGVfYnVsa19yZWFkKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpeworCXN0cnVjdCB1c2JfYmx1ZXRvb3RoICpibHVldG9vdGggPSBnZXRfdXNiX2JsdWV0b290aCAoKHN0cnVjdCB1c2JfYmx1ZXRvb3RoICopdHR5LT5kcml2ZXJfZGF0YSwgX19GVU5DVElPTl9fKTsKKwlpbnQgcmVzdWx0OworCisJaWYgKCFibHVldG9vdGgpIHsKKwkJcmV0dXJuOworCX0KKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKCFibHVldG9vdGgtPm9wZW5fY291bnQpIHsKKwkJZGJnICgiJXMgLSBkZXZpY2Ugbm90IG9wZW4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKGJsdWV0b290aC0+cmVhZF91cmIpIHsKKwkJdXNiX2ZpbGxfYnVsa191cmIoYmx1ZXRvb3RoLT5yZWFkX3VyYiwgYmx1ZXRvb3RoLT5kZXYsIAorCQkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKGJsdWV0b290aC0+ZGV2LCBibHVldG9vdGgtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgICAgIGJsdWV0b290aC0+YnVsa19pbl9idWZmZXIsIGJsdWV0b290aC0+YnVsa19pbl9idWZmZXJfc2l6ZSwgCisJCQkgICAgICBibHVldG9vdGhfcmVhZF9idWxrX2NhbGxiYWNrLCBibHVldG9vdGgpOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihibHVldG9vdGgtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWVyciAoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCX0KK30KKwordm9pZCBidHVzYl9kaXNhYmxlX2J1bGtfcmVhZChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KXsKKwlzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoID0gZ2V0X3VzYl9ibHVldG9vdGggKChzdHJ1Y3QgdXNiX2JsdWV0b290aCAqKXR0eS0+ZHJpdmVyX2RhdGEsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIWJsdWV0b290aCkgeworCQlyZXR1cm47CisJfQorCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIWJsdWV0b290aC0+b3Blbl9jb3VudCkgeworCQlkYmcgKCIlcyAtIGRldmljZSBub3Qgb3BlbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKGJsdWV0b290aC0+cmVhZF91cmIpICYmIChibHVldG9vdGgtPnJlYWRfdXJiLT5hY3R1YWxfbGVuZ3RoKSkKKwkJdXNiX2tpbGxfdXJiKGJsdWV0b290aC0+cmVhZF91cmIpOworfQorI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiB1cmIgY2FsbGJhY2sgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworc3RhdGljIHZvaWQgYmx1ZXRvb3RoX2ludF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoID0gZ2V0X3VzYl9ibHVldG9vdGggKChzdHJ1Y3QgdXNiX2JsdWV0b290aCAqKXVyYi0+Y29udGV4dCwgX19GVU5DVElPTl9fKTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IGNvdW50ID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCXVuc2lnbmVkIGludCBwYWNrZXRfc2l6ZTsKKwlpbnQgc3RhdHVzOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIWJsdWV0b290aCkgeworCQlkYmcoIiVzIC0gYmFkIGJsdWV0b290aCBwb2ludGVyLCBleGl0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKCFjb3VudCkgeworCQlkYmcoIiVzIC0gemVybyBsZW5ndGggaW50IiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0OworCX0KKworCisjaWZkZWYgREVCVUcKKwlpZiAoY291bnQpIHsKKwkJcHJpbnRrIChLRVJOX0RFQlVHIF9fRklMRV9fICI6ICVzLSBsZW5ndGggPSAlZCwgZGF0YSA9ICIsIF9fRlVOQ1RJT05fXywgY291bnQpOworCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworCQkJcHJpbnRrICgiJS4yeCAiLCBkYXRhW2ldKTsKKwkJfQorCQlwcmludGsgKCJcbiIpOworCX0KKyNlbmRpZgorCisjaWZkZWYgQlRCVUdHWUhBUkRXQVJFCisJaWYgKChjb3VudCA+PSAyKSAmJiAoZGF0YVswXSA9PSAweEZGKSAmJiAoZGF0YVsxXSA9PSAweDAwKSkgeworCQlkYXRhICs9IDI7CisJCWNvdW50IC09IDI7CisJfQorCWlmIChjb3VudCA9PSAwKSB7CisJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJCWdvdG8gZXhpdDsKKwl9CisjZW5kaWYKKwkvKiBXZSBhZGQgIGEgcGFja2V0IHR5cGUgaWRlbnRpZmllciB0byB0aGUgYmVnaW5uaW5nIG9mIGVhY2gKKwkgICBIQ0kgZnJhbWUuICBUaGlzIG1ha2VzIHRoZSBkYXRhIGluIHRoZSB0dHkgbG9vayBsaWtlIGEKKwkgICBzZXJpYWwgVVNCIGRldmljZXMuICBFYWNoIEhDSSBmcmFtZSBjYW4gYmUgYnJva2VuIGFjcm9zcworCSAgIG11bHRpcGxlIFVSQnMgc28gd2UgYnVmZmVyIHRoZW0gdW50aWwgd2UgaGF2ZSBhIGZ1bGwgaGNpCisJICAgcGFja2V0ICovCisKKwlpZiAoIWJsdWV0b290aC0+aW50X3BhY2tldF9wb3MpIHsKKwkJYmx1ZXRvb3RoLT5pbnRfYnVmZmVyWzBdID0gRVZFTlRfUEtUOworCQlibHVldG9vdGgtPmludF9wYWNrZXRfcG9zKys7CisJfQorCQorCWlmIChibHVldG9vdGgtPmludF9wYWNrZXRfcG9zICsgY291bnQgPiBFVkVOVF9CVUZGRVJfU0laRSkgeworCQllcnIoIiVzIC0gZXhjZWVkZWQgRVZFTlRfQlVGRkVSX1NJWkUiLCBfX0ZVTkNUSU9OX18pOworCQlibHVldG9vdGgtPmludF9wYWNrZXRfcG9zID0gMDsKKwkJZ290byBleGl0OworCX0KKworCW1lbWNweSAoJmJsdWV0b290aC0+aW50X2J1ZmZlcltibHVldG9vdGgtPmludF9wYWNrZXRfcG9zXSwKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIsIGNvdW50KTsKKwlibHVldG9vdGgtPmludF9wYWNrZXRfcG9zICs9IGNvdW50OworCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisKKwlpZiAoYmx1ZXRvb3RoLT5pbnRfcGFja2V0X3BvcyA+PSBFVkVOVF9IRFJfU0laRSkKKwkJcGFja2V0X3NpemUgPSBibHVldG9vdGgtPmludF9idWZmZXJbMl07CisJZWxzZQorCQlnb3RvIGV4aXQ7CisKKwlpZiAocGFja2V0X3NpemUgKyBFVkVOVF9IRFJfU0laRSA8IGJsdWV0b290aC0+aW50X3BhY2tldF9wb3MpIHsKKwkJZXJyKCIlcyAtIHBhY2tldCB3YXMgdG9vIGxvbmciLCBfX0ZVTkNUSU9OX18pOworCQlibHVldG9vdGgtPmludF9wYWNrZXRfcG9zID0gMDsKKwkJZ290byBleGl0OworCX0KKworCWlmIChwYWNrZXRfc2l6ZSArIEVWRU5UX0hEUl9TSVpFID09IGJsdWV0b290aC0+aW50X3BhY2tldF9wb3MpIHsKKwkJZm9yIChpID0gMDsgaSA8IGJsdWV0b290aC0+aW50X3BhY2tldF9wb3M7ICsraSkgeworCQkJLyogaWYgd2UgaW5zZXJ0IG1vcmUgdGhhbiBUVFlfRkxJUEJVRl9TSVpFIGNoYXJhY3RlcnMsIHdlIGRyb3AgdGhlbSAqLworCQkJaWYgKGJsdWV0b290aC0+dHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpIHsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaChibHVldG9vdGgtPnR0eSk7CisJCQl9CisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcihibHVldG9vdGgtPnR0eSwgYmx1ZXRvb3RoLT5pbnRfYnVmZmVyW2ldLCAwKTsKKwkJfQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaChibHVldG9vdGgtPnR0eSk7CisKKwkJYmx1ZXRvb3RoLT5pbnRfcGFja2V0X3BvcyA9IDA7CisJfQorCitleGl0OgorCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMpCisJCWVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7Cit9CisKKworc3RhdGljIHZvaWQgYmx1ZXRvb3RoX2N0cmxfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCA9IGdldF91c2JfYmx1ZXRvb3RoICgoc3RydWN0IHVzYl9ibHVldG9vdGggKil1cmItPmNvbnRleHQsIF9fRlVOQ1RJT05fXyk7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmICghYmx1ZXRvb3RoKSB7CisJCWRiZygiJXMgLSBiYWQgYmx1ZXRvb3RoIHBvaW50ZXIsIGV4aXRpbmciLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgYmx1ZXRvb3RoX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoID0gZ2V0X3VzYl9ibHVldG9vdGggKChzdHJ1Y3QgdXNiX2JsdWV0b290aCAqKXVyYi0+Y29udGV4dCwgX19GVU5DVElPTl9fKTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgaW50IGNvdW50ID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBwYWNrZXRfc2l6ZTsKKwlpbnQgcmVzdWx0OworCisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmICghYmx1ZXRvb3RoKSB7CisJCWRiZygiJXMgLSBiYWQgYmx1ZXRvb3RoIHBvaW50ZXIsIGV4aXRpbmciLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWlmICh1cmItPnN0YXR1cyA9PSAtRU5PRU5UKSB7ICAgICAgICAgICAgICAgICAgIAorCQkJZGJnKCIlcyAtIFVSQiBjYW5jZWxlZCwgd29uJ3QgcmVzY2hlZHVsZSIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm47CisJCX0KKwkJZ290byBleGl0OworCX0KKworCWlmICghY291bnQpIHsKKwkJZGJnKCIlcyAtIHplcm8gbGVuZ3RoIHJlYWQgYnVsayIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKyNpZmRlZiBERUJVRworCWlmIChjb3VudCkgeworCQlwcmludGsgKEtFUk5fREVCVUcgX19GSUxFX18gIjogJXMtIGxlbmd0aCA9ICVkLCBkYXRhID0gIiwgX19GVU5DVElPTl9fLCBjb3VudCk7CisJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisJCQlwcmludGsgKCIlLjJ4ICIsIGRhdGFbaV0pOworCQl9CisJCXByaW50ayAoIlxuIik7CisJfQorI2VuZGlmCisjaWZkZWYgQlRCVUdHWUhBUkRXQVJFCisJaWYgKChjb3VudCA9PSA0KSAmJiAoZGF0YVswXSA9PSAweDAwKSAmJiAoZGF0YVsxXSA9PSAweDAwKQorCSAgICAmJiAoZGF0YVsyXSA9PSAweDAwKSAmJiAoZGF0YVszXSA9PSAweDAwKSkgeworCQl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCQl1c2JfZmlsbF9idWxrX3VyYihibHVldG9vdGgtPnJlYWRfdXJiLCBibHVldG9vdGgtPmRldiwgCisJCQkgICAgICB1c2JfcmN2YnVsa3BpcGUoYmx1ZXRvb3RoLT5kZXYsIGJsdWV0b290aC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJICAgICAgYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlciwgYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlcl9zaXplLCAKKwkJCSAgICAgIGJsdWV0b290aF9yZWFkX2J1bGtfY2FsbGJhY2ssIGJsdWV0b290aCk7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKGJsdWV0b290aC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmVzdWx0KQorCQkJZXJyICgiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKworCQlyZXR1cm47CisJfQorI2VuZGlmCisJLyogV2UgYWRkICBhIHBhY2tldCB0eXBlIGlkZW50aWZpZXIgdG8gdGhlIGJlZ2lubmluZyBvZiBlYWNoCisJICAgSENJIGZyYW1lLiAgVGhpcyBtYWtlcyB0aGUgZGF0YSBpbiB0aGUgdHR5IGxvb2sgbGlrZSBhCisJICAgc2VyaWFsIFVTQiBkZXZpY2VzLiAgRWFjaCBIQ0kgZnJhbWUgY2FuIGJlIGJyb2tlbiBhY3Jvc3MKKwkgICBtdWx0aXBsZSBVUkJzIHNvIHdlIGJ1ZmZlciB0aGVtIHVudGlsIHdlIGhhdmUgYSBmdWxsIGhjaQorCSAgIHBhY2tldCAqLworCQorCWlmICghYmx1ZXRvb3RoLT5idWxrX3BhY2tldF9wb3MpIHsKKwkJYmx1ZXRvb3RoLT5idWxrX2J1ZmZlclswXSA9IEFDTF9QS1Q7CisJCWJsdWV0b290aC0+YnVsa19wYWNrZXRfcG9zKys7CisJfQorCisJaWYgKGJsdWV0b290aC0+YnVsa19wYWNrZXRfcG9zICsgY291bnQgPiBBQ0xfQlVGRkVSX1NJWkUpIHsKKwkJZXJyKCIlcyAtIGV4Y2VlZGVkIEFDTF9CVUZGRVJfU0laRSIsIF9fRlVOQ1RJT05fXyk7CisJCWJsdWV0b290aC0+YnVsa19wYWNrZXRfcG9zID0gMDsKKwkJZ290byBleGl0OworCX0KKworCW1lbWNweSAoJmJsdWV0b290aC0+YnVsa19idWZmZXJbYmx1ZXRvb3RoLT5idWxrX3BhY2tldF9wb3NdLAorCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwgY291bnQpOworCWJsdWV0b290aC0+YnVsa19wYWNrZXRfcG9zICs9IGNvdW50OworCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisKKwlpZiAoYmx1ZXRvb3RoLT5idWxrX3BhY2tldF9wb3MgPj0gQUNMX0hEUl9TSVpFKSB7CisJCXBhY2tldF9zaXplID0gQ0hBUjJJTlQxNihibHVldG9vdGgtPmJ1bGtfYnVmZmVyWzRdLGJsdWV0b290aC0+YnVsa19idWZmZXJbM10pOworCX0gZWxzZSB7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAocGFja2V0X3NpemUgKyBBQ0xfSERSX1NJWkUgPCBibHVldG9vdGgtPmJ1bGtfcGFja2V0X3BvcykgeworCQllcnIoIiVzIC0gcGFja2V0IHdhcyB0b28gbG9uZyIsIF9fRlVOQ1RJT05fXyk7CisJCWJsdWV0b290aC0+YnVsa19wYWNrZXRfcG9zID0gMDsKKwkJZ290byBleGl0OworCX0KKworCWlmIChwYWNrZXRfc2l6ZSArIEFDTF9IRFJfU0laRSA9PSBibHVldG9vdGgtPmJ1bGtfcGFja2V0X3BvcykgeworCQlmb3IgKGkgPSAwOyBpIDwgYmx1ZXRvb3RoLT5idWxrX3BhY2tldF9wb3M7ICsraSkgeworCQkJLyogaWYgd2UgaW5zZXJ0IG1vcmUgdGhhbiBUVFlfRkxJUEJVRl9TSVpFIGNoYXJhY3RlcnMsIHdlIGRyb3AgdGhlbS4gKi8KKwkJCWlmIChibHVldG9vdGgtPnR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2goYmx1ZXRvb3RoLT50dHkpOworCQkJfQorCQkJdHR5X2luc2VydF9mbGlwX2NoYXIoYmx1ZXRvb3RoLT50dHksIGJsdWV0b290aC0+YnVsa19idWZmZXJbaV0sIDApOworCQl9CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKGJsdWV0b290aC0+dHR5KTsKKwkJYmx1ZXRvb3RoLT5idWxrX3BhY2tldF9wb3MgPSAwOworCX0JCisKK2V4aXQ6CisJaWYgKCFibHVldG9vdGggfHwgIWJsdWV0b290aC0+b3Blbl9jb3VudCkKKwkJcmV0dXJuOworCisJdXNiX2ZpbGxfYnVsa191cmIoYmx1ZXRvb3RoLT5yZWFkX3VyYiwgYmx1ZXRvb3RoLT5kZXYsIAorCQkgICAgICB1c2JfcmN2YnVsa3BpcGUoYmx1ZXRvb3RoLT5kZXYsIGJsdWV0b290aC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkgICAgICBibHVldG9vdGgtPmJ1bGtfaW5fYnVmZmVyLCBibHVldG9vdGgtPmJ1bGtfaW5fYnVmZmVyX3NpemUsIAorCQkgICAgICBibHVldG9vdGhfcmVhZF9idWxrX2NhbGxiYWNrLCBibHVldG9vdGgpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKGJsdWV0b290aC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXN1bHQpCisJCWVyciAoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisKKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgYmx1ZXRvb3RoX3dyaXRlX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCA9IGdldF91c2JfYmx1ZXRvb3RoICgoc3RydWN0IHVzYl9ibHVldG9vdGggKil1cmItPmNvbnRleHQsIF9fRlVOQ1RJT05fXyk7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCS8qIGZyZWUgdXAgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgYXMgdXNiX2ZyZWVfdXJiKCkgZG9lcyBub3QgZG8gdGhpcyAqLworCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCWlmICghYmx1ZXRvb3RoKSB7CisJCWRiZygiJXMgLSBiYWQgYmx1ZXRvb3RoIHBvaW50ZXIsIGV4aXRpbmciLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJLyogd2FrZSB1cCBvdXIgbGl0dGxlIGZ1bmN0aW9uIHRvIGxldCB0aGUgdHR5IGxheWVyIGtub3cgdGhhdCBzb21ldGhpbmcgaGFwcGVuZWQgKi8KKwlzY2hlZHVsZV93b3JrKCZibHVldG9vdGgtPndvcmspOworfQorCisKK3N0YXRpYyB2b2lkIGJsdWV0b290aF9zb2Z0aW50KHZvaWQgKnByaXZhdGUpCit7CisJc3RydWN0IHVzYl9ibHVldG9vdGggKmJsdWV0b290aCA9IGdldF91c2JfYmx1ZXRvb3RoICgoc3RydWN0IHVzYl9ibHVldG9vdGggKilwcml2YXRlLCBfX0ZVTkNUSU9OX18pOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIWJsdWV0b290aCkKKwkJcmV0dXJuOworCisJdHR5X3dha2V1cChibHVldG9vdGgtPnR0eSk7Cit9CisKKworc3RhdGljIGludCB1c2JfYmx1ZXRvb3RoX3Byb2JlIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgCisJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTsKKwlzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmludGVycnVwdF9pbl9lbmRwb2ludFs4XTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmJ1bGtfaW5fZW5kcG9pbnRbOF07CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpidWxrX291dF9lbmRwb2ludFs4XTsKKwlpbnQgY29udHJvbF9vdXRfZW5kcG9pbnQ7CisKKwlpbnQgbWlub3I7CisJaW50IGJ1ZmZlcl9zaXplOworCWludCBpOworCWludCBudW1faW50ZXJydXB0X2luID0gMDsKKwlpbnQgbnVtX2J1bGtfaW4gPSAwOworCWludCBudW1fYnVsa19vdXQgPSAwOworCisJaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJY29udHJvbF9vdXRfZW5kcG9pbnQgPSBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKworCS8qIGZpbmQgdGhlIGVuZHBvaW50cyB0aGF0IHdlIG5lZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHM7ICsraSkgeworCQllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50W2ldLmRlc2M7CisKKwkJaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApICYmCisJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAyKSkgeworCQkJLyogd2UgZm91bmQgYSBidWxrIGluIGVuZHBvaW50ICovCisJCQlkYmcoImZvdW5kIGJ1bGsgaW4iKTsKKwkJCWJ1bGtfaW5fZW5kcG9pbnRbbnVtX2J1bGtfaW5dID0gZW5kcG9pbnQ7CisJCQkrK251bV9idWxrX2luOworCQl9CisKKwkJaWYgKCgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSA9PSAweDAwKSAmJgorCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMikpIHsKKwkJCS8qIHdlIGZvdW5kIGEgYnVsayBvdXQgZW5kcG9pbnQgKi8KKwkJCWRiZygiZm91bmQgYnVsayBvdXQiKTsKKwkJCWJ1bGtfb3V0X2VuZHBvaW50W251bV9idWxrX291dF0gPSBlbmRwb2ludDsKKwkJCSsrbnVtX2J1bGtfb3V0OworCQl9CisKKwkJaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApICYmCisJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAzKSkgeworCQkJLyogd2UgZm91bmQgYSBpbnRlcnJ1cHQgaW4gZW5kcG9pbnQgKi8KKwkJCWRiZygiZm91bmQgaW50ZXJydXB0IGluIik7CisJCQlpbnRlcnJ1cHRfaW5fZW5kcG9pbnRbbnVtX2ludGVycnVwdF9pbl0gPSBlbmRwb2ludDsKKwkJCSsrbnVtX2ludGVycnVwdF9pbjsKKwkJfQorCX0KKworCS8qIGFjY29yZGluZyB0byB0aGUgc3BlYywgd2UgY2FuIG9ubHkgaGF2ZSAxIGJ1bGtfaW4sIDEgYnVsa19vdXQsIGFuZCAxIGludGVycnVwdF9pbiBlbmRwb2ludHMgKi8KKwlpZiAoKG51bV9idWxrX2luICE9IDEpIHx8CisJICAgIChudW1fYnVsa19vdXQgIT0gMSkgfHwKKwkgICAgKG51bV9pbnRlcnJ1cHRfaW4gIT0gMSkpIHsKKwkJZGJnICgiJXMgLSBpbXByb3BlciBudW1iZXIgb2YgZW5kcG9pbnRzLiBCbHVldG9vdGggZHJpdmVyIG5vdCBib3VuZC4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpbmZvKCJVU0IgQmx1ZXRvb3RoIGNvbnZlcnRlciBkZXRlY3RlZCIpOworCisJZm9yIChtaW5vciA9IDA7IG1pbm9yIDwgQkxVRVRPT1RIX1RUWV9NSU5PUlMgJiYgYmx1ZXRvb3RoX3RhYmxlW21pbm9yXTsgKyttaW5vcikKKwkJOworCWlmIChibHVldG9vdGhfdGFibGVbbWlub3JdKSB7CisJCWVycigiTm8gbW9yZSBmcmVlIEJsdWV0b290aCBkZXZpY2VzIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICghKGJsdWV0b290aCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfYmx1ZXRvb3RoKSwgR0ZQX0tFUk5FTCkpKSB7CisJCWVycigiT3V0IG9mIG1lbW9yeSIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQoYmx1ZXRvb3RoLCAwLCBzaXplb2Yoc3RydWN0IHVzYl9ibHVldG9vdGgpKTsKKworCWJsdWV0b290aC0+bWFnaWMgPSBVU0JfQkxVRVRPT1RIX01BR0lDOworCWJsdWV0b290aC0+ZGV2ID0gZGV2OworCWJsdWV0b290aC0+bWlub3IgPSBtaW5vcjsKKwlJTklUX1dPUksoJmJsdWV0b290aC0+d29yaywgYmx1ZXRvb3RoX3NvZnRpbnQsIGJsdWV0b290aCk7CisJaW5pdF9NVVRFWCgmYmx1ZXRvb3RoLT5sb2NrKTsKKworCS8qIHJlY29yZCB0aGUgaW50ZXJmYWNlIG51bWJlciBmb3IgdGhlIGNvbnRyb2wgb3V0ICovCisJYmx1ZXRvb3RoLT5jb250cm9sX291dF9iSW50ZXJmYWNlTnVtID0gY29udHJvbF9vdXRfZW5kcG9pbnQ7CisJCisJLyogY3JlYXRlIG91ciBjb250cm9sIG91dCB1cmIgcG9vbCAqLyAKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPTlRST0xfVVJCUzsgKytpKSB7CisJCXN0cnVjdCB1cmIgICp1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQlpZiAodXJiID09IE5VTEwpIHsKKwkJCWVycigiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZSIpOworCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJfQorCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IE5VTEw7CisJCWJsdWV0b290aC0+Y29udHJvbF91cmJfcG9vbFtpXSA9IHVyYjsKKwl9CisKKwkvKiBzZXQgdXAgdGhlIGVuZHBvaW50IGluZm9ybWF0aW9uICovCisJZW5kcG9pbnQgPSBidWxrX2luX2VuZHBvaW50WzBdOworCWJsdWV0b290aC0+cmVhZF91cmIgPSB1c2JfYWxsb2NfdXJiICgwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJsdWV0b290aC0+cmVhZF91cmIpIHsKKwkJZXJyKCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlIik7CisJCWdvdG8gcHJvYmVfZXJyb3I7CisJfQorCWJsdWV0b290aC0+YnVsa19pbl9idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKwlibHVldG9vdGgtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlciA9IGttYWxsb2MgKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJsdWV0b290aC0+YnVsa19pbl9idWZmZXIpIHsKKwkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSBidWxrX2luX2J1ZmZlciIpOworCQlnb3RvIHByb2JlX2Vycm9yOworCX0KKwl1c2JfZmlsbF9idWxrX3VyYihibHVldG9vdGgtPnJlYWRfdXJiLCBkZXYsIHVzYl9yY3ZidWxrcGlwZShkZXYsIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJICAgICAgYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlciwgYnVmZmVyX3NpemUsIGJsdWV0b290aF9yZWFkX2J1bGtfY2FsbGJhY2ssIGJsdWV0b290aCk7CisKKwllbmRwb2ludCA9IGJ1bGtfb3V0X2VuZHBvaW50WzBdOworCWJsdWV0b290aC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJYmx1ZXRvb3RoLT5idWxrX291dF9idWZmZXJfc2l6ZSA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkgKiAyOworCisJZW5kcG9pbnQgPSBpbnRlcnJ1cHRfaW5fZW5kcG9pbnRbMF07CisJYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJsdWV0b290aC0+aW50ZXJydXB0X2luX3VyYikgeworCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKKwkJZ290byBwcm9iZV9lcnJvcjsKKwl9CisJYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZSA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7CisJYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5faW50ZXJ2YWwgPSBlbmRwb2ludC0+YkludGVydmFsOworCWJsdWV0b290aC0+aW50ZXJydXB0X2luX2J1ZmZlciA9IGttYWxsb2MgKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJsdWV0b290aC0+aW50ZXJydXB0X2luX2J1ZmZlcikgeworCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIGludGVycnVwdF9pbl9idWZmZXIiKTsKKwkJZ290byBwcm9iZV9lcnJvcjsKKwl9CisJdXNiX2ZpbGxfaW50X3VyYihibHVldG9vdGgtPmludGVycnVwdF9pbl91cmIsIGRldiwgdXNiX3JjdmludHBpcGUoZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCSAgICAgYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fYnVmZmVyLCBidWZmZXJfc2l6ZSwgYmx1ZXRvb3RoX2ludF9jYWxsYmFjaywKKwkJICAgICBibHVldG9vdGgsIGVuZHBvaW50LT5iSW50ZXJ2YWwpOworCisJLyogaW5pdGlhbGl6ZSB0aGUgZGV2ZnMgbm9kZXMgZm9yIHRoaXMgZGV2aWNlIGFuZCBsZXQgdGhlIHVzZXIga25vdyB3aGF0IGJsdWV0b290aHMgd2UgYXJlIGJvdW5kIHRvICovCisJdHR5X3JlZ2lzdGVyX2RldmljZSAoYmx1ZXRvb3RoX3R0eV9kcml2ZXIsIG1pbm9yLCAmaW50Zi0+ZGV2KTsKKwlpbmZvKCJCbHVldG9vdGggY29udmVydGVyIG5vdyBhdHRhY2hlZCB0byB0dHlVQiVkIChvciB1c2IvdHR1Yi8lZCBmb3IgZGV2ZnMpIiwgbWlub3IsIG1pbm9yKTsKKworCWJsdWV0b290aF90YWJsZVttaW5vcl0gPSBibHVldG9vdGg7CisKKwkvKiBzdWNjZXNzICovCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgYmx1ZXRvb3RoKTsKKwlyZXR1cm4gMDsKKworcHJvYmVfZXJyb3I6CisJaWYgKGJsdWV0b290aC0+cmVhZF91cmIpCisJCXVzYl9mcmVlX3VyYiAoYmx1ZXRvb3RoLT5yZWFkX3VyYik7CisJaWYgKGJsdWV0b290aC0+YnVsa19pbl9idWZmZXIpCisJCWtmcmVlIChibHVldG9vdGgtPmJ1bGtfaW5fYnVmZmVyKTsKKwlpZiAoYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fdXJiKQorCQl1c2JfZnJlZV91cmIgKGJsdWV0b290aC0+aW50ZXJydXB0X2luX3VyYik7CisJaWYgKGJsdWV0b290aC0+aW50ZXJydXB0X2luX2J1ZmZlcikKKwkJa2ZyZWUgKGJsdWV0b290aC0+aW50ZXJydXB0X2luX2J1ZmZlcik7CisJZm9yIChpID0gMDsgaSA8IE5VTV9DT05UUk9MX1VSQlM7ICsraSkgCisJCWlmIChibHVldG9vdGgtPmNvbnRyb2xfdXJiX3Bvb2xbaV0pIHsKKwkJCWlmIChibHVldG9vdGgtPmNvbnRyb2xfdXJiX3Bvb2xbaV0tPnRyYW5zZmVyX2J1ZmZlcikKKwkJCQlrZnJlZSAoYmx1ZXRvb3RoLT5jb250cm9sX3VyYl9wb29sW2ldLT50cmFuc2Zlcl9idWZmZXIpOworCQkJdXNiX2ZyZWVfdXJiIChibHVldG9vdGgtPmNvbnRyb2xfdXJiX3Bvb2xbaV0pOworCQl9CisKKwlibHVldG9vdGhfdGFibGVbbWlub3JdID0gTlVMTDsKKworCS8qIGZyZWUgdXAgYW55IG1lbW9yeSB0aGF0IHdlIGFsbG9jYXRlZCAqLworCWtmcmVlIChibHVldG9vdGgpOworCXJldHVybiAtRUlPOworfQorCisKK3N0YXRpYyB2b2lkIHVzYl9ibHVldG9vdGhfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX2JsdWV0b290aCAqYmx1ZXRvb3RoID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJaW50IGk7CisKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKKwlpZiAoYmx1ZXRvb3RoKSB7CisJCWlmICgoYmx1ZXRvb3RoLT5vcGVuX2NvdW50KSAmJiAoYmx1ZXRvb3RoLT50dHkpKQorCQkJdHR5X2hhbmd1cChibHVldG9vdGgtPnR0eSk7CisKKwkJYmx1ZXRvb3RoLT5vcGVuX2NvdW50ID0gMDsKKworCQlpZiAoYmx1ZXRvb3RoLT5yZWFkX3VyYikgeworCQkJdXNiX2tpbGxfdXJiIChibHVldG9vdGgtPnJlYWRfdXJiKTsKKwkJCXVzYl9mcmVlX3VyYiAoYmx1ZXRvb3RoLT5yZWFkX3VyYik7CisJCX0KKwkJaWYgKGJsdWV0b290aC0+YnVsa19pbl9idWZmZXIpCisJCQlrZnJlZSAoYmx1ZXRvb3RoLT5idWxrX2luX2J1ZmZlcik7CisKKwkJaWYgKGJsdWV0b290aC0+aW50ZXJydXB0X2luX3VyYikgeworCQkJdXNiX2tpbGxfdXJiIChibHVldG9vdGgtPmludGVycnVwdF9pbl91cmIpOworCQkJdXNiX2ZyZWVfdXJiIChibHVldG9vdGgtPmludGVycnVwdF9pbl91cmIpOworCQl9CisJCWlmIChibHVldG9vdGgtPmludGVycnVwdF9pbl9idWZmZXIpCisJCQlrZnJlZSAoYmx1ZXRvb3RoLT5pbnRlcnJ1cHRfaW5fYnVmZmVyKTsKKworCQl0dHlfdW5yZWdpc3Rlcl9kZXZpY2UgKGJsdWV0b290aF90dHlfZHJpdmVyLCBibHVldG9vdGgtPm1pbm9yKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NPTlRST0xfVVJCUzsgKytpKSB7CisJCQlpZiAoYmx1ZXRvb3RoLT5jb250cm9sX3VyYl9wb29sW2ldKSB7CisJCQkJdXNiX2tpbGxfdXJiIChibHVldG9vdGgtPmNvbnRyb2xfdXJiX3Bvb2xbaV0pOworCQkJCWlmIChibHVldG9vdGgtPmNvbnRyb2xfdXJiX3Bvb2xbaV0tPnRyYW5zZmVyX2J1ZmZlcikKKwkJCQkJa2ZyZWUgKGJsdWV0b290aC0+Y29udHJvbF91cmJfcG9vbFtpXS0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJCQl1c2JfZnJlZV91cmIgKGJsdWV0b290aC0+Y29udHJvbF91cmJfcG9vbFtpXSk7CisJCQl9CisJCX0KKwkJCisJCWluZm8oIkJsdWV0b290aCBjb252ZXJ0ZXIgbm93IGRpc2Nvbm5lY3RlZCBmcm9tIHR0eVVCJWQiLCBibHVldG9vdGgtPm1pbm9yKTsKKworCQlibHVldG9vdGhfdGFibGVbYmx1ZXRvb3RoLT5taW5vcl0gPSBOVUxMOworCisJCS8qIGZyZWUgdXAgYW55IG1lbW9yeSB0aGF0IHdlIGFsbG9jYXRlZCAqLworCQlrZnJlZSAoYmx1ZXRvb3RoKTsKKwl9IGVsc2UgeworCQlpbmZvKCJkZXZpY2UgZGlzY29ubmVjdGVkIik7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHR0eV9vcGVyYXRpb25zIGJsdWV0b290aF9vcHMgPSB7CisJLm9wZW4gPQkJCWJsdWV0b290aF9vcGVuLAorCS5jbG9zZSA9CQlibHVldG9vdGhfY2xvc2UsCisJLndyaXRlID0JCWJsdWV0b290aF93cml0ZSwKKwkud3JpdGVfcm9vbSA9CQlibHVldG9vdGhfd3JpdGVfcm9vbSwKKwkuaW9jdGwgPQkJYmx1ZXRvb3RoX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQlibHVldG9vdGhfc2V0X3Rlcm1pb3MsCisJLnRocm90dGxlID0JCWJsdWV0b290aF90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQlibHVldG9vdGhfdW50aHJvdHRsZSwKKwkuY2hhcnNfaW5fYnVmZmVyID0JYmx1ZXRvb3RoX2NoYXJzX2luX2J1ZmZlciwKK307CisKK3N0YXRpYyBpbnQgdXNiX2JsdWV0b290aF9pbml0KHZvaWQpCit7CisJaW50IGk7CisJaW50IHJlc3VsdDsKKworCS8qIEluaXRpYWxpemUgb3VyIGdsb2JhbCBkYXRhICovCisJZm9yIChpID0gMDsgaSA8IEJMVUVUT09USF9UVFlfTUlOT1JTOyArK2kpIHsKKwkJYmx1ZXRvb3RoX3RhYmxlW2ldID0gTlVMTDsKKwl9CisKKwlpbmZvICgiVVNCIEJsdWV0b290aCBzdXBwb3J0IHJlZ2lzdGVyZWQiKTsKKworCWJsdWV0b290aF90dHlfZHJpdmVyID0gYWxsb2NfdHR5X2RyaXZlcihCTFVFVE9PVEhfVFRZX01JTk9SUyk7CisJaWYgKCFibHVldG9vdGhfdHR5X2RyaXZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlibHVldG9vdGhfdHR5X2RyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlibHVldG9vdGhfdHR5X2RyaXZlci0+ZHJpdmVyX25hbWUgPSAidXNiLWJsdWV0b290aCI7CisJYmx1ZXRvb3RoX3R0eV9kcml2ZXItPm5hbWUgPSAidHR5VUIiOworCWJsdWV0b290aF90dHlfZHJpdmVyLT5kZXZmc19uYW1lID0gInVzYi90dHViLyI7CisJYmx1ZXRvb3RoX3R0eV9kcml2ZXItPm1ham9yID0gQkxVRVRPT1RIX1RUWV9NQUpPUjsKKwlibHVldG9vdGhfdHR5X2RyaXZlci0+bWlub3Jfc3RhcnQgPSAwOworCWJsdWV0b290aF90dHlfZHJpdmVyLT50eXBlID0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTDsKKwlibHVldG9vdGhfdHR5X2RyaXZlci0+c3VidHlwZSA9IFNFUklBTF9UWVBFX05PUk1BTDsKKwlibHVldG9vdGhfdHR5X2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9OT19ERVZGUzsKKwlibHVldG9vdGhfdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOworCWJsdWV0b290aF90dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19jZmxhZyA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwl0dHlfc2V0X29wZXJhdGlvbnMoYmx1ZXRvb3RoX3R0eV9kcml2ZXIsICZibHVldG9vdGhfb3BzKTsKKwlpZiAodHR5X3JlZ2lzdGVyX2RyaXZlciAoYmx1ZXRvb3RoX3R0eV9kcml2ZXIpKSB7CisJCWVycigiJXMgLSBmYWlsZWQgdG8gcmVnaXN0ZXIgdHR5IGRyaXZlciIsIF9fRlVOQ1RJT05fXyk7CisJCXB1dF90dHlfZHJpdmVyKGJsdWV0b290aF90dHlfZHJpdmVyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIHJlZ2lzdGVyIHRoZSBVU0IgZHJpdmVyICovCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZ1c2JfYmx1ZXRvb3RoX2RyaXZlcik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJdHR5X3VucmVnaXN0ZXJfZHJpdmVyKGJsdWV0b290aF90dHlfZHJpdmVyKTsKKwkJcHV0X3R0eV9kcml2ZXIoYmx1ZXRvb3RoX3R0eV9kcml2ZXIpOworCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQgZm9yIHRoZSBVU0IgYmx1ZXRvb3RoIGRyaXZlci4gRXJyb3IgbnVtYmVyICVkIiwgcmVzdWx0KTsKKwkJcmV0dXJuIC0xOworCX0KKworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHVzYl9ibHVldG9vdGhfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ1c2JfYmx1ZXRvb3RoX2RyaXZlcik7CisJdHR5X3VucmVnaXN0ZXJfZHJpdmVyKGJsdWV0b290aF90dHlfZHJpdmVyKTsKKwlwdXRfdHR5X2RyaXZlcihibHVldG9vdGhfdHR5X2RyaXZlcik7Cit9CisKKworbW9kdWxlX2luaXQodXNiX2JsdWV0b290aF9pbml0KTsKK21vZHVsZV9leGl0KHVzYl9ibHVldG9vdGhfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQxZjliNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwpAQCAtMCwwICsxLDk0MiBAQAorLyoKKyAqIGNkYy1hY20uYworICoKKyAqIENvcHlyaWdodCAoYykgMTk5OSBBcm1pbiBGdWVyc3QJPGZ1ZXJzdEBpbi50dW0uZGU+CisgKiBDb3B5cmlnaHQgKGMpIDE5OTkgUGF2ZWwgTWFjaGVrCTxwYXZlbEBzdXNlLmN6PgorICogQ29weXJpZ2h0IChjKSAxOTk5IEpvaGFubmVzIEVyZGZlbHQJPGpvaGFubmVzQGVyZGZlbHQuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDAwIFZvanRlY2ggUGF2bGlrCTx2b2p0ZWNoQHN1c2UuY3o+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgT2xpdmVyIE5ldWt1bQk8b2xpdmVyQG5ldWt1bS5uYW1lPgorICoKKyAqIFVTQiBBYnN0cmFjdCBDb250cm9sIE1vZGVsIGRyaXZlciBmb3IgVVNCIG1vZGVtcyBhbmQgSVNETiBhZGFwdGVycworICoKKyAqIFNwb25zb3JlZCBieSBTdVNFCisgKgorICogQ2hhbmdlTG9nOgorICoJdjAuOSAgLSB0aG9yb3VnaCBjbGVhbmluZywgVVJCaWZpY2F0aW9uLCBhbG1vc3QgYSByZXdyaXRlCisgKgl2MC4xMCAtIHNvbWUgbW9yZSBjbGVhbnVwcworICoJdjAuMTEgLSBmaXhlZCBmbG93IGNvbnRyb2wsIHJlYWQgZXJyb3IgZG9lc24ndCBzdG9wIHJlYWRzCisgKgl2MC4xMiAtIGFkZGVkIFRJT0NNIGlvY3RscywgYWRkZWQgYnJlYWsgaGFuZGxpbmcsIG1hZGUgc3RydWN0IGFjbSBrbWFsbG9jZWQKKyAqCXYwLjEzIC0gYWRkZWQgdGVybWlvcywgYWRkZWQgaGFuZ3VwCisgKgl2MC4xNCAtIHNpemVkIGRvd24gc3RydWN0IGFjbQorICoJdjAuMTUgLSBmaXhlZCBmbG93IGNvbnRyb2wgYWdhaW4gLSBjaGFyYWN0ZXJzIGNvdWxkIGJlIGxvc3QKKyAqCXYwLjE2IC0gYWRkZWQgY29kZSBmb3IgbW9kZW1zIHdpdGggc3dhcHBlZCBkYXRhIGFuZCBjb250cm9sIGludGVyZmFjZXMKKyAqCXYwLjE3IC0gYWRkZWQgbmV3IHN0eWxlIHByb2JpbmcKKyAqCXYwLjE4IC0gZml4ZWQgbmV3IHN0eWxlIHByb2JpbmcgZm9yIGRldmljZXMgd2l0aCBtb3JlIGNvbmZpZ3VyYXRpb25zCisgKgl2MC4xOSAtIGZpeGVkIENMT0NBTCBoYW5kbGluZyAodGhhbmtzIHRvIFJpY2hhcmQgU2hpaC1QaW5nIENoYW4pCisgKgl2MC4yMCAtIHN3aXRjaGVkIHRvIHByb2Jpbmcgb24gaW50ZXJmYWNlIChyYXRoZXIgdGhhbiBkZXZpY2UpIGNsYXNzCisgKgl2MC4yMSAtIHJldmVydCB0byBwcm9iaW5nIG9uIGRldmljZSBmb3IgZGV2aWNlcyB3aXRoIG11bHRpcGxlIGNvbmZpZ3MKKyAqCXYwLjIyIC0gcHJvYmUgb25seSB0aGUgY29udHJvbCBpbnRlcmZhY2UuIGlmIHVzYmNvcmUgZG9lc24ndCBjaG9vc2UgdGhlCisgKgkJY29uZmlnIHdlIHdhbnQsIHN5c2FkbWluIGNoYW5nZXMgYkNvbmZpZ3VyYXRpb25WYWx1ZSBpbiBzeXNmcy4KKyAqCXYwLjIzIC0gdXNlIHNvZnRpcnEgZm9yIHJ4IHByb2Nlc3NpbmcsIGFzIG5lZWRlZCBieSB0dHkgbGF5ZXIKKyAqCXYwLjI0IC0gY2hhbmdlIHByb2JlIG1ldGhvZCB0byBldmFsdWF0ZSBDREMgdW5pb24gZGVzY3JpcHRvcgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyN1bmRlZiBERUJVRworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfY2RjLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgImNkYy1hY20uaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMjMiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkFybWluIEZ1ZXJzdCwgUGF2ZWwgTWFjaGVrLCBKb2hhbm5lcyBFcmRmZWx0LCBWb2p0ZWNoIFBhdmxpayIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBBYnN0cmFjdCBDb250cm9sIE1vZGVsIGRyaXZlciBmb3IgVVNCIG1vZGVtcyBhbmQgSVNETiBhZGFwdGVycyIKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFjbV9kcml2ZXI7CitzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKmFjbV90dHlfZHJpdmVyOworc3RhdGljIHN0cnVjdCBhY20gKmFjbV90YWJsZVtBQ01fVFRZX01JTk9SU107CisKK3N0YXRpYyBERUNMQVJFX01VVEVYKG9wZW5fc2VtKTsKKworI2RlZmluZSBBQ01fUkVBRFkoYWNtKQkoYWNtICYmIGFjbS0+ZGV2ICYmIGFjbS0+dXNlZCkKKworLyoKKyAqIEZ1bmN0aW9ucyBmb3IgQUNNIGNvbnRyb2wgbWVzc2FnZXMuCisgKi8KKworc3RhdGljIGludCBhY21fY3RybF9tc2coc3RydWN0IGFjbSAqYWNtLCBpbnQgcmVxdWVzdCwgaW50IHZhbHVlLCB2b2lkICpidWYsIGludCBsZW4pCit7CisJaW50IHJldHZhbCA9IHVzYl9jb250cm9sX21zZyhhY20tPmRldiwgdXNiX3NuZGN0cmxwaXBlKGFjbS0+ZGV2LCAwKSwKKwkJcmVxdWVzdCwgVVNCX1JUX0FDTSwgdmFsdWUsCisJCWFjbS0+Y29udHJvbC0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCisJCWJ1ZiwgbGVuLCA1MDAwKTsKKwlkYmcoImFjbV9jb250cm9sX21zZzogcnE6IDB4JTAyeCB2YWw6ICUjeCBsZW46ICUjeCByZXN1bHQ6ICVkIiwgcmVxdWVzdCwgdmFsdWUsIGxlbiwgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IDA7Cit9CisKKy8qIGRldmljZXMgYXJlbid0IHJlcXVpcmVkIHRvIHN1cHBvcnQgdGhlc2UgcmVxdWVzdHMuCisgKiB0aGUgY2RjIGFjbSBkZXNjcmlwdG9yIHRlbGxzIHdoZXRoZXIgdGhleSBkby4uLgorICovCisjZGVmaW5lIGFjbV9zZXRfY29udHJvbChhY20sIGNvbnRyb2wpIFwKKwlhY21fY3RybF9tc2coYWNtLCBVU0JfQ0RDX1JFUV9TRVRfQ09OVFJPTF9MSU5FX1NUQVRFLCBjb250cm9sLCBOVUxMLCAwKQorI2RlZmluZSBhY21fc2V0X2xpbmUoYWNtLCBsaW5lKSBcCisJYWNtX2N0cmxfbXNnKGFjbSwgVVNCX0NEQ19SRVFfU0VUX0xJTkVfQ09ESU5HLCAwLCBsaW5lLCBzaXplb2YgKihsaW5lKSkKKyNkZWZpbmUgYWNtX3NlbmRfYnJlYWsoYWNtLCBtcykgXAorCWFjbV9jdHJsX21zZyhhY20sIFVTQl9DRENfUkVRX1NFTkRfQlJFQUssIG1zLCBOVUxMLCAwKQorCisvKgorICogSW50ZXJydXB0IGhhbmRsZXJzIGZvciB2YXJpb3VzIEFDTSBkZXZpY2UgcmVzcG9uc2VzCisgKi8KKworLyogY29udHJvbCBpbnRlcmZhY2UgcmVwb3J0cyBzdGF0dXMgY2hhbmdlcyB3aXRoICJpbnRlcnJ1cHQiIHRyYW5zZmVycyAqLworc3RhdGljIHZvaWQgYWNtX2N0cmxfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGFjbSAqYWNtID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCB1c2JfY2RjX25vdGlmaWNhdGlvbiAqZHIgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCWludCBuZXdjdHJsOworCWludCBzdGF0dXM7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCWlmICghQUNNX1JFQURZKGFjbSkpCisJCWdvdG8gZXhpdDsKKworCWRhdGEgPSAodW5zaWduZWQgY2hhciAqKShkciArIDEpOworCXN3aXRjaCAoZHItPmJOb3RpZmljYXRpb25UeXBlKSB7CisKKwkJY2FzZSBVU0JfQ0RDX05PVElGWV9ORVRXT1JLX0NPTk5FQ1RJT046CisKKwkJCWRiZygiJXMgbmV0d29yayIsIGRyLT53VmFsdWUgPyAiY29ubmVjdGVkIHRvIiA6ICJkaXNjb25uZWN0ZWQgZnJvbSIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBVU0JfQ0RDX05PVElGWV9TRVJJQUxfU1RBVEU6CisKKwkJCW5ld2N0cmwgPSBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYgKikgZGF0YSkpOworCisJCQlpZiAoYWNtLT50dHkgJiYgIWFjbS0+Y2xvY2FsICYmIChhY20tPmN0cmxpbiAmIH5uZXdjdHJsICYgQUNNX0NUUkxfRENEKSkgeworCQkJCWRiZygiY2FsbGluZyBoYW5ndXAiKTsKKwkJCQl0dHlfaGFuZ3VwKGFjbS0+dHR5KTsKKwkJCX0KKworCQkJYWNtLT5jdHJsaW4gPSBuZXdjdHJsOworCisJCQlkYmcoImlucHV0IGNvbnRyb2wgbGluZXM6IGRjZCVjIGRzciVjIGJyZWFrJWMgcmluZyVjIGZyYW1pbmclYyBwYXJpdHklYyBvdmVycnVuJWMiLAorCQkJCWFjbS0+Y3RybGluICYgQUNNX0NUUkxfRENEID8gJysnIDogJy0nLAlhY20tPmN0cmxpbiAmIEFDTV9DVFJMX0RTUiA/ICcrJyA6ICctJywKKwkJCQlhY20tPmN0cmxpbiAmIEFDTV9DVFJMX0JSSyA/ICcrJyA6ICctJywJYWNtLT5jdHJsaW4gJiBBQ01fQ1RSTF9SSSAgPyAnKycgOiAnLScsCisJCQkJYWNtLT5jdHJsaW4gJiBBQ01fQ1RSTF9GUkFNSU5HID8gJysnIDogJy0nLAlhY20tPmN0cmxpbiAmIEFDTV9DVFJMX1BBUklUWSA/ICcrJyA6ICctJywKKwkJCQlhY20tPmN0cmxpbiAmIEFDTV9DVFJMX09WRVJSVU4gPyAnKycgOiAnLScpOworCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZGJnKCJ1bmtub3duIG5vdGlmaWNhdGlvbiAlZCByZWNlaXZlZDogaW5kZXggJWQgbGVuICVkIGRhdGEwICVkIGRhdGExICVkIiwKKwkJCQlkci0+Yk5vdGlmaWNhdGlvblR5cGUsIGRyLT53SW5kZXgsCisJCQkJZHItPndMZW5ndGgsIGRhdGFbMF0sIGRhdGFbMV0pOworCQkJYnJlYWs7CisJfQorZXhpdDoKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKQorCQllcnIgKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCSAgICAgX19GVU5DVElPTl9fLCBzdGF0dXMpOworfQorCisvKiBkYXRhIGludGVyZmFjZSByZXR1cm5zIGluY29taW5nIGJ5dGVzLCBvciB3ZSBnb3QgdW50aHJvdHRsZWQgKi8KK3N0YXRpYyB2b2lkIGFjbV9yZWFkX2J1bGsoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgYWNtICphY20gPSB1cmItPmNvbnRleHQ7CisJZGJnKCJFbnRlcmluZyBhY21fcmVhZF9idWxrIHdpdGggc3RhdHVzICVkXG4iLCB1cmItPnN0YXR1cyk7CisKKwlpZiAoIUFDTV9SRUFEWShhY20pKQorCQlyZXR1cm47CisKKwlpZiAodXJiLT5zdGF0dXMpCisJCWRldl9kYmcoJmFjbS0+ZGF0YS0+ZGV2LCAiYnVsayByeCBzdGF0dXMgJWRcbiIsIHVyYi0+c3RhdHVzKTsKKworCS8qIGNhbGxpbmcgdHR5X2ZsaXBfYnVmZmVyX3B1c2goKSBpbl9pcnEoKSBpc24ndCBhbGxvd2VkICovCisJdGFza2xldF9zY2hlZHVsZSgmYWNtLT5iaCk7Cit9CisKK3N0YXRpYyB2b2lkIGFjbV9yeF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgX2FjbSkKK3sKKwlzdHJ1Y3QgYWNtICphY20gPSAodm9pZCAqKV9hY207CisJc3RydWN0IHVyYiAqdXJiID0gYWNtLT5yZWFkdXJiOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBhY20tPnR0eTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IGkgPSAwOworCWRiZygiRW50ZXJpbmcgYWNtX3J4X3Rhc2tsZXQiKTsKKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAwICYmICFhY20tPnRocm90dGxlKSAgeworCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoICYmICFhY20tPnRocm90dGxlOyBpKyspIHsKKwkJCS8qIGlmIHdlIGluc2VydCBtb3JlIHRoYW4gVFRZX0ZMSVBCVUZfU0laRSBjaGFyYWN0ZXJzLAorCQkJICogd2UgZHJvcCB0aGVtLiAqLworCQkJaWYgKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCX0KKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgMCk7CisJCX0KKwkJZGJnKCJIYW5kZWQgJWQgYnl0ZXMgdG8gdHR5IGxheWVyIiwgaSsxKTsKKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwl9CisKKwlzcGluX2xvY2soJmFjbS0+dGhyb3R0bGVfbG9jayk7CisJaWYgKGFjbS0+dGhyb3R0bGUpIHsKKwkJZGJnKCJUaHJvdHRlbGluZyBub3RpY2VkIik7CisJCW1lbW1vdmUoZGF0YSwgZGF0YSArIGksIHVyYi0+YWN0dWFsX2xlbmd0aCAtIGkpOworCQl1cmItPmFjdHVhbF9sZW5ndGggLT0gaTsKKwkJYWNtLT5yZXN1Ym1pdF90b191bnRocm90dGxlID0gMTsKKwkJc3Bpbl91bmxvY2soJmFjbS0+dGhyb3R0bGVfbG9jayk7CisJCXJldHVybjsKKwl9CisJc3Bpbl91bmxvY2soJmFjbS0+dGhyb3R0bGVfbG9jayk7CisKKwl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCXVyYi0+ZGV2ID0gYWNtLT5kZXY7CisKKwlpID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoaSkKKwkJZGV2X2RiZygmYWNtLT5kYXRhLT5kZXYsICJidWxrIHJ4IHJlc3VibWl0ICVkXG4iLCBpKTsKK30KKworLyogZGF0YSBpbnRlcmZhY2Ugd3JvdGUgdGhvc2Ugb3V0Z29pbmcgYnl0ZXMgKi8KK3N0YXRpYyB2b2lkIGFjbV93cml0ZV9idWxrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGFjbSAqYWNtID0gKHN0cnVjdCBhY20gKil1cmItPmNvbnRleHQ7CisJZGJnKCJFbnRlcmluZyBhY21fd3JpdGVfYnVsayB3aXRoIHN0YXR1cyAlZFxuIiwgdXJiLT5zdGF0dXMpOworCisJaWYgKCFBQ01fUkVBRFkoYWNtKSkKKwkJZ290byBvdXQ7CisKKwlpZiAodXJiLT5zdGF0dXMpCisJCWRiZygibm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCB1cmItPnN0YXR1cyk7CisKKwlzY2hlZHVsZV93b3JrKCZhY20tPndvcmspOworb3V0OgorCWFjbS0+cmVhZHlfZm9yX3dyaXRlID0gMTsKK30KKworc3RhdGljIHZvaWQgYWNtX3NvZnRpbnQodm9pZCAqcHJpdmF0ZSkKK3sKKwlzdHJ1Y3QgYWNtICphY20gPSBwcml2YXRlOworCWRiZygiRW50ZXJpbmcgYWNtX3NvZnRpbnQuXG4iKTsKKwkKKwlpZiAoIUFDTV9SRUFEWShhY20pKQorCQlyZXR1cm47CisJdHR5X3dha2V1cChhY20tPnR0eSk7Cit9CisKKy8qCisgKiBUVFkgaGFuZGxlcnMKKyAqLworCitzdGF0aWMgaW50IGFjbV90dHlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgYWNtICphY207CisJaW50IHJ2ID0gLUVJTlZBTDsKKwlkYmcoIkVudGVyaW5nIGFjbV90dHlfb3Blbi5cbiIpOworCQorCWRvd24oJm9wZW5fc2VtKTsKKworCWFjbSA9IGFjbV90YWJsZVt0dHktPmluZGV4XTsKKwlpZiAoIWFjbSB8fCAhYWNtLT5kZXYpCisJCWdvdG8gZXJyX291dDsKKwllbHNlCisJCXJ2ID0gMDsKKworCXR0eS0+ZHJpdmVyX2RhdGEgPSBhY207CisJYWNtLT50dHkgPSB0dHk7CisKKworCisJaWYgKGFjbS0+dXNlZCsrKSB7CisJCWdvdG8gZG9uZTsKKyAgICAgICAgfQorCisJYWNtLT5jdHJsdXJiLT5kZXYgPSBhY20tPmRldjsKKwlpZiAodXNiX3N1Ym1pdF91cmIoYWNtLT5jdHJsdXJiLCBHRlBfS0VSTkVMKSkgeworCQlkYmcoInVzYl9zdWJtaXRfdXJiKGN0cmwgaXJxKSBmYWlsZWQiKTsKKwkJZ290byBiYWlsX291dDsKKwl9CisKKwlhY20tPnJlYWR1cmItPmRldiA9IGFjbS0+ZGV2OworCWlmICh1c2Jfc3VibWl0X3VyYihhY20tPnJlYWR1cmIsIEdGUF9LRVJORUwpKSB7CisJCWRiZygidXNiX3N1Ym1pdF91cmIocmVhZCBidWxrKSBmYWlsZWQiKTsKKwkJZ290byBiYWlsX291dF9hbmRfdW5saW5rOworCX0KKworCWlmICgwID4gYWNtX3NldF9jb250cm9sKGFjbSwgYWNtLT5jdHJsb3V0ID0gQUNNX0NUUkxfRFRSIHwgQUNNX0NUUkxfUlRTKSkKKwkJZ290byBmdWxsX2JhaWxvdXQ7CisKKwkvKiBmb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMgdGhlIGRhdGEgdGhyb3VnaCwgCisJICAgb3RoZXJ3aXNlIGl0IGlzIHNjaGVkdWxlZCwgYW5kIHdpdGggaGlnaCBkYXRhIHJhdGVzIGRhdGEgY2FuIGdldCBsb3N0LiAqLworCXR0eS0+bG93X2xhdGVuY3kgPSAxOworCitkb25lOgorZXJyX291dDoKKwl1cCgmb3Blbl9zZW0pOworCXJldHVybiBydjsKKworZnVsbF9iYWlsb3V0OgorCXVzYl9raWxsX3VyYihhY20tPnJlYWR1cmIpOworYmFpbF9vdXRfYW5kX3VubGluazoKKwl1c2Jfa2lsbF91cmIoYWNtLT5jdHJsdXJiKTsKK2JhaWxfb3V0OgorCWFjbS0+dXNlZC0tOworCXVwKCZvcGVuX3NlbSk7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyB2b2lkIGFjbV90dHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGFjbSAqYWNtID0gdHR5LT5kcml2ZXJfZGF0YTsKKworCWlmICghYWNtIHx8ICFhY20tPnVzZWQpCisJCXJldHVybjsKKworCWRvd24oJm9wZW5fc2VtKTsKKwlpZiAoIS0tYWNtLT51c2VkKSB7CisJCWlmIChhY20tPmRldikgeworCQkJYWNtX3NldF9jb250cm9sKGFjbSwgYWNtLT5jdHJsb3V0ID0gMCk7CisJCQl1c2Jfa2lsbF91cmIoYWNtLT5jdHJsdXJiKTsKKwkJCXVzYl9raWxsX3VyYihhY20tPndyaXRldXJiKTsKKwkJCXVzYl9raWxsX3VyYihhY20tPnJlYWR1cmIpOworCQl9IGVsc2UgeworCQkJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKGFjbV90dHlfZHJpdmVyLCBhY20tPm1pbm9yKTsKKwkJCWFjbV90YWJsZVthY20tPm1pbm9yXSA9IE5VTEw7CisJCQl1c2JfZnJlZV91cmIoYWNtLT5jdHJsdXJiKTsKKwkJCXVzYl9mcmVlX3VyYihhY20tPnJlYWR1cmIpOworCQkJdXNiX2ZyZWVfdXJiKGFjbS0+d3JpdGV1cmIpOworCQkJa2ZyZWUoYWNtKTsKKwkJfQorCX0KKwl1cCgmb3Blbl9zZW0pOworfQorCitzdGF0aWMgaW50IGFjbV90dHlfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IGFjbSAqYWNtID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlpbnQgc3RhdDsKKwlkYmcoIkVudGVyaW5nIGFjbV90dHlfd3JpdGUgdG8gd3JpdGUgJWQgYnl0ZXMsXG4iLCBjb3VudCk7CisKKwlpZiAoIUFDTV9SRUFEWShhY20pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWFjbS0+cmVhZHlfZm9yX3dyaXRlKQorCQlyZXR1cm4gMDsKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gMDsKKworCWNvdW50ID0gKGNvdW50ID4gYWNtLT53cml0ZXNpemUpID8gYWNtLT53cml0ZXNpemUgOiBjb3VudDsKKworCWRiZygiR2V0ICVkIGJ5dGVzLi4uIiwgY291bnQpOworCW1lbWNweShhY20tPndyaXRlX2J1ZmZlciwgYnVmLCBjb3VudCk7CisJZGJnKCIgIFN1Y2Nlc3NmdWxseSBjb3BpZWQuXG4iKTsKKworCWFjbS0+d3JpdGV1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBjb3VudDsKKwlhY20tPndyaXRldXJiLT5kZXYgPSBhY20tPmRldjsKKworCWFjbS0+cmVhZHlfZm9yX3dyaXRlID0gMDsKKwlzdGF0ID0gdXNiX3N1Ym1pdF91cmIoYWNtLT53cml0ZXVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXQgPCAwKSB7CisJCWRiZygidXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkIik7CisJCWFjbS0+cmVhZHlfZm9yX3dyaXRlID0gMTsKKwkJcmV0dXJuIHN0YXQ7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IGFjbV90dHlfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCBhY20gKmFjbSA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaWYgKCFBQ01fUkVBRFkoYWNtKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuICFhY20tPnJlYWR5X2Zvcl93cml0ZSA/IDAgOiBhY20tPndyaXRlc2l6ZTsKK30KKworc3RhdGljIGludCBhY21fdHR5X2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCBhY20gKmFjbSA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaWYgKCFBQ01fUkVBRFkoYWNtKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuICFhY20tPnJlYWR5X2Zvcl93cml0ZSA/IGFjbS0+d3JpdGV1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggOiAwOworfQorCitzdGF0aWMgdm9pZCBhY21fdHR5X3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IGFjbSAqYWNtID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlpZiAoIUFDTV9SRUFEWShhY20pKQorCQlyZXR1cm47CisJc3Bpbl9sb2NrX2JoKCZhY20tPnRocm90dGxlX2xvY2spOworCWFjbS0+dGhyb3R0bGUgPSAxOworCXNwaW5fdW5sb2NrX2JoKCZhY20tPnRocm90dGxlX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBhY21fdHR5X3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgYWNtICphY20gPSB0dHktPmRyaXZlcl9kYXRhOworCWlmICghQUNNX1JFQURZKGFjbSkpCisJCXJldHVybjsKKwlzcGluX2xvY2tfYmgoJmFjbS0+dGhyb3R0bGVfbG9jayk7CisJYWNtLT50aHJvdHRsZSA9IDA7CisJc3Bpbl91bmxvY2tfYmgoJmFjbS0+dGhyb3R0bGVfbG9jayk7CisJaWYgKGFjbS0+cmVzdWJtaXRfdG9fdW50aHJvdHRsZSkgeworCQlhY20tPnJlc3VibWl0X3RvX3VudGhyb3R0bGUgPSAwOworCQlhY21fcmVhZF9idWxrKGFjbS0+cmVhZHVyYiwgTlVMTCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhY21fdHR5X2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgc3RhdGUpCit7CisJc3RydWN0IGFjbSAqYWNtID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlpZiAoIUFDTV9SRUFEWShhY20pKQorCQlyZXR1cm47CisJaWYgKGFjbV9zZW5kX2JyZWFrKGFjbSwgc3RhdGUgPyAweGZmZmYgOiAwKSkKKwkJZGJnKCJzZW5kIGJyZWFrIGZhaWxlZCIpOworfQorCitzdGF0aWMgaW50IGFjbV90dHlfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGFjbSAqYWNtID0gdHR5LT5kcml2ZXJfZGF0YTsKKworCWlmICghQUNNX1JFQURZKGFjbSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIChhY20tPmN0cmxvdXQgJiBBQ01fQ1RSTF9EVFIgPyBUSU9DTV9EVFIgOiAwKSB8CisJICAgICAgIChhY20tPmN0cmxvdXQgJiBBQ01fQ1RSTF9SVFMgPyBUSU9DTV9SVFMgOiAwKSB8CisJICAgICAgIChhY20tPmN0cmxpbiAgJiBBQ01fQ1RSTF9EU1IgPyBUSU9DTV9EU1IgOiAwKSB8CisJICAgICAgIChhY20tPmN0cmxpbiAgJiBBQ01fQ1RSTF9SSSAgPyBUSU9DTV9SSSAgOiAwKSB8CisJICAgICAgIChhY20tPmN0cmxpbiAgJiBBQ01fQ1RSTF9EQ0QgPyBUSU9DTV9DRCAgOiAwKSB8CisJICAgICAgIFRJT0NNX0NUUzsKK30KKworc3RhdGljIGludCBhY21fdHR5X3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlzdHJ1Y3QgYWNtICphY20gPSB0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGludCBuZXdjdHJsOworCisJaWYgKCFBQ01fUkVBRFkoYWNtKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluZXdjdHJsID0gYWNtLT5jdHJsb3V0OworCXNldCA9IChzZXQgJiBUSU9DTV9EVFIgPyBBQ01fQ1RSTF9EVFIgOiAwKSB8IChzZXQgJiBUSU9DTV9SVFMgPyBBQ01fQ1RSTF9SVFMgOiAwKTsKKwljbGVhciA9IChjbGVhciAmIFRJT0NNX0RUUiA/IEFDTV9DVFJMX0RUUiA6IDApIHwgKGNsZWFyICYgVElPQ01fUlRTID8gQUNNX0NUUkxfUlRTIDogMCk7CisKKwluZXdjdHJsID0gKG5ld2N0cmwgJiB+Y2xlYXIpIHwgc2V0OworCisJaWYgKGFjbS0+Y3RybG91dCA9PSBuZXdjdHJsKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gYWNtX3NldF9jb250cm9sKGFjbSwgYWNtLT5jdHJsb3V0ID0gbmV3Y3RybCk7Cit9CisKK3N0YXRpYyBpbnQgYWNtX3R0eV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGFjbSAqYWNtID0gdHR5LT5kcml2ZXJfZGF0YTsKKworCWlmICghQUNNX1JFQURZKGFjbSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworc3RhdGljIF9fdTMyIGFjbV90dHlfc3BlZWRbXSA9IHsKKwkwLCA1MCwgNzUsIDExMCwgMTM0LCAxNTAsIDIwMCwgMzAwLCA2MDAsCisJMTIwMCwgMTgwMCwgMjQwMCwgNDgwMCwgOTYwMCwgMTkyMDAsIDM4NDAwLAorCTU3NjAwLCAxMTUyMDAsIDIzMDQwMCwgNDYwODAwLCA1MDAwMDAsIDU3NjAwMCwKKwk5MjE2MDAsIDEwMDAwMDAsIDExNTIwMDAsIDE1MDAwMDAsIDIwMDAwMDAsCisJMjUwMDAwMCwgMzAwMDAwMCwgMzUwMDAwMCwgNDAwMDAwMAorfTsKKworc3RhdGljIF9fdTggYWNtX3R0eV9zaXplW10gPSB7CisJNSwgNiwgNywgOAorfTsKKworc3RhdGljIHZvaWQgYWNtX3R0eV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqdGVybWlvc19vbGQpCit7CisJc3RydWN0IGFjbSAqYWNtID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcyA9IHR0eS0+dGVybWlvczsKKwlzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZyBuZXdsaW5lOworCWludCBuZXdjdHJsID0gYWNtLT5jdHJsb3V0OworCisJaWYgKCFBQ01fUkVBRFkoYWNtKSkKKwkJcmV0dXJuOworCisJbmV3bGluZS5kd0RURVJhdGUgPSBjcHVfdG9fbGUzMnAoYWNtX3R0eV9zcGVlZCArCisJCSh0ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQgJiB+Q0JBVURFWCkgKyAodGVybWlvcy0+Y19jZmxhZyAmIENCQVVERVggPyAxNSA6IDApKTsKKwluZXdsaW5lLmJDaGFyRm9ybWF0ID0gdGVybWlvcy0+Y19jZmxhZyAmIENTVE9QQiA/IDIgOiAwOworCW5ld2xpbmUuYlBhcml0eVR5cGUgPSB0ZXJtaW9zLT5jX2NmbGFnICYgUEFSRU5CID8KKwkJKHRlcm1pb3MtPmNfY2ZsYWcgJiBQQVJPREQgPyAxIDogMikgKyAodGVybWlvcy0+Y19jZmxhZyAmIENNU1BBUiA/IDIgOiAwKSA6IDA7CisJbmV3bGluZS5iRGF0YUJpdHMgPSBhY21fdHR5X3NpemVbKHRlcm1pb3MtPmNfY2ZsYWcgJiBDU0laRSkgPj4gNF07CisKKwlhY20tPmNsb2NhbCA9ICgodGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkgIT0gMCk7CisKKwlpZiAoIW5ld2xpbmUuZHdEVEVSYXRlKSB7CisJCW5ld2xpbmUuZHdEVEVSYXRlID0gYWNtLT5saW5lLmR3RFRFUmF0ZTsKKwkJbmV3Y3RybCAmPSB+QUNNX0NUUkxfRFRSOworCX0gZWxzZSAgbmV3Y3RybCB8PSAgQUNNX0NUUkxfRFRSOworCisJaWYgKG5ld2N0cmwgIT0gYWNtLT5jdHJsb3V0KQorCQlhY21fc2V0X2NvbnRyb2woYWNtLCBhY20tPmN0cmxvdXQgPSBuZXdjdHJsKTsKKworCWlmIChtZW1jbXAoJmFjbS0+bGluZSwgJm5ld2xpbmUsIHNpemVvZiBuZXdsaW5lKSkgeworCQltZW1jcHkoJmFjbS0+bGluZSwgJm5ld2xpbmUsIHNpemVvZiBuZXdsaW5lKTsKKwkJZGJnKCJzZXQgbGluZTogJWQgJWQgJWQgJWQiLCBsZTMyX3RvX2NwdShuZXdsaW5lLmR3RFRFUmF0ZSksCisJCQluZXdsaW5lLmJDaGFyRm9ybWF0LCBuZXdsaW5lLmJQYXJpdHlUeXBlLAorCQkJbmV3bGluZS5iRGF0YUJpdHMpOworCQlhY21fc2V0X2xpbmUoYWNtLCAmYWNtLT5saW5lKTsKKwl9Cit9CisKKy8qCisgKiBVU0IgcHJvYmUgYW5kIGRpc2Nvbm5lY3Qgcm91dGluZXMuCisgKi8KKworc3RhdGljIGludCBhY21fcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYyAqdW5pb25faGVhZGVyID0gTlVMTDsKKwljaGFyICpidWZmZXIgPSBpbnRmLT5hbHRzZXR0aW5nLT5leHRyYTsKKwlpbnQgYnVmbGVuID0gaW50Zi0+YWx0c2V0dGluZy0+ZXh0cmFsZW47CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmNvbnRyb2xfaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICpkYXRhX2ludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwY3RybDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwcmVhZDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwd3JpdGU7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCBhY20gKmFjbTsKKwlpbnQgbWlub3I7CisJaW50IGN0cmxzaXplLHJlYWRzaXplOworCXU4ICpidWY7CisJdTggYWNfbWFuYWdlbWVudF9mdW5jdGlvbiA9IDA7CisJdTggY2FsbF9tYW5hZ2VtZW50X2Z1bmN0aW9uID0gMDsKKwlpbnQgY2FsbF9pbnRlcmZhY2VfbnVtID0gLTE7CisJaW50IGRhdGFfaW50ZXJmYWNlX251bTsKKwl1bnNpZ25lZCBsb25nIHF1aXJrczsKKworCS8qIGhhbmRsZSBxdWlya3MgZGVhZGx5IHRvIG5vcm1hbCBwcm9iaW5nKi8KKwlxdWlya3MgPSAodW5zaWduZWQgbG9uZylpZC0+ZHJpdmVyX2luZm87CisJaWYgKHF1aXJrcyA9PSBOT19VTklPTl9OT1JNQUwpIHsKKwkJZGF0YV9pbnRlcmZhY2UgPSB1c2JfaWZudW1fdG9faWYodXNiX2RldiwgMSk7CisJCWNvbnRyb2xfaW50ZXJmYWNlID0gdXNiX2lmbnVtX3RvX2lmKHVzYl9kZXYsIDApOworCQlnb3RvIHNraXBfbm9ybWFsX3Byb2JlOworCX0KKwkKKwkvKiBub3JtYWwgcHJvYmluZyovCisJaWYgKCFidWZmZXIpIHsKKwkJZXJyKCJXaWVyZCBkZXNjcmlwdG9yIHJlZmVyZW5jZXNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWJ1ZmxlbikgeworCQlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50LT5leHRyYWxlbiAmJiBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnQtPmV4dHJhKSB7CisJCQlkZXZfZGJnKCZpbnRmLT5kZXYsIlNlZWtpbmcgZXh0cmEgZGVzY3JpcHRvcnMgb24gZW5kcG9pbnRcbiIpOworCQkJYnVmbGVuID0gaW50Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50LT5leHRyYWxlbjsKKwkJCWJ1ZmZlciA9IGludGYtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludC0+ZXh0cmE7CisJCX0gZWxzZSB7CisJCQllcnIoIlplcm8gbGVuZ3RoIGRlc2NyaXB0b3IgcmVmZXJlbmNlc1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXdoaWxlIChidWZsZW4gPiAwKSB7CisJCWlmIChidWZmZXIgWzFdICE9IFVTQl9EVF9DU19JTlRFUkZBQ0UpIHsKKwkJCWVycigic2tpcHBpbmcgZ2FyYmFnZVxuIik7CisJCQlnb3RvIG5leHRfZGVzYzsKKwkJfQorCisJCXN3aXRjaCAoYnVmZmVyIFsyXSkgeworCQkJY2FzZSBVU0JfQ0RDX1VOSU9OX1RZUEU6IC8qIHdlJ3ZlIGZvdW5kIGl0ICovCisJCQkJaWYgKHVuaW9uX2hlYWRlcikgeworCQkJCQllcnIoIk1vcmUgdGhhbiBvbmUgdW5pb24gZGVzY3JpcHRvciwgc2tpcHBpbmcgLi4uIik7CisJCQkJCWdvdG8gbmV4dF9kZXNjOworCQkJCX0KKwkJCQl1bmlvbl9oZWFkZXIgPSAoc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYyAqKQorCQkJCQkJCWJ1ZmZlcjsKKwkJCQlicmVhazsKKwkJCWNhc2UgVVNCX0NEQ19DT1VOVFJZX1RZUEU6IC8qIG1heWJlIHNvbWVob3cgZXhwb3J0ICovCisJCQkJYnJlYWs7IC8qIGZvciBub3cgd2UgaWdub3JlIGl0ICovCisJCQljYXNlIFVTQl9DRENfSEVBREVSX1RZUEU6IC8qIG1heWJlIGNoZWNrIHZlcnNpb24gKi8gCisJCQkJYnJlYWs7IC8qIGZvciBub3cgd2UgaWdub3JlIGl0ICovIAorCQkJY2FzZSBVU0JfQ0RDX0FDTV9UWVBFOgorCQkJCWFjX21hbmFnZW1lbnRfZnVuY3Rpb24gPSBidWZmZXJbM107CisJCQkJYnJlYWs7CisJCQljYXNlIFVTQl9DRENfQ0FMTF9NQU5BR0VNRU5UX1RZUEU6CisJCQkJY2FsbF9tYW5hZ2VtZW50X2Z1bmN0aW9uID0gYnVmZmVyWzNdOworCQkJCWNhbGxfaW50ZXJmYWNlX251bSA9IGJ1ZmZlcls0XTsKKwkJCQlpZiAoKGNhbGxfbWFuYWdlbWVudF9mdW5jdGlvbiAmIDMpICE9IDMpCisJCQkJCWVycigiVGhpcyBkZXZpY2UgY2Fubm90IGRvIGNhbGxzIG9uIGl0cyBvd24uIEl0IGlzIG5vIG1vZGVtLiIpOworCQkJCWJyZWFrOworCQkJCQorCQkJZGVmYXVsdDoKKwkJCQllcnIoIklnbm9yaW5nIGV4dHJhIGhlYWRlciwgdHlwZSAlZCwgbGVuZ3RoICVkIiwgYnVmZmVyWzJdLCBidWZmZXJbMF0pOworCQkJCWJyZWFrOworCQkJfQorbmV4dF9kZXNjOgorCQlidWZsZW4gLT0gYnVmZmVyWzBdOworCQlidWZmZXIgKz0gYnVmZmVyWzBdOworCX0KKworCWlmICghdW5pb25faGVhZGVyKSB7CisJCWlmIChjYWxsX2ludGVyZmFjZV9udW0gPiAwKSB7CisJCQlkZXZfZGJnKCZpbnRmLT5kZXYsIk5vIHVuaW9uIGRlc2NyaXB0b3IsIHVzaW5nIGNhbGwgbWFuYWdlbWVudCBkZXNjcmlwdG9yXG4iKTsKKwkJCWRhdGFfaW50ZXJmYWNlID0gdXNiX2lmbnVtX3RvX2lmKHVzYl9kZXYsIChkYXRhX2ludGVyZmFjZV9udW0gPSBjYWxsX2ludGVyZmFjZV9udW0pKTsKKwkJCWNvbnRyb2xfaW50ZXJmYWNlID0gaW50ZjsKKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcoJmludGYtPmRldiwiTm8gdW5pb24gZGVzY3JpcHRvciwgZ2l2aW5nIHVwXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfSBlbHNlIHsKKwkJY29udHJvbF9pbnRlcmZhY2UgPSB1c2JfaWZudW1fdG9faWYodXNiX2RldiwgdW5pb25faGVhZGVyLT5iTWFzdGVySW50ZXJmYWNlMCk7CisJCWRhdGFfaW50ZXJmYWNlID0gdXNiX2lmbnVtX3RvX2lmKHVzYl9kZXYsIChkYXRhX2ludGVyZmFjZV9udW0gPSB1bmlvbl9oZWFkZXItPmJTbGF2ZUludGVyZmFjZTApKTsKKwkJaWYgKCFjb250cm9sX2ludGVyZmFjZSB8fCAhZGF0YV9pbnRlcmZhY2UpIHsKKwkJCWRldl9kYmcoJmludGYtPmRldiwibm8gaW50ZXJmYWNlc1xuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0KKwkKKwlpZiAoZGF0YV9pbnRlcmZhY2VfbnVtICE9IGNhbGxfaW50ZXJmYWNlX251bSkKKwkJZGV2X2RiZygmaW50Zi0+ZGV2LCJTZXBlcmF0ZSBjYWxsIGNvbnRyb2wgaW50ZXJmYWNlLiBUaGF0IGlzIG5vdCBmdWxseSBzdXBwb3J0ZWQuXG4iKTsKKworc2tpcF9ub3JtYWxfcHJvYmU6CisKKwkvKndvcmthcm91bmQgZm9yIHN3aXRjaGVkIGludGVyZmFjZXMgKi8KKwlpZiAoZGF0YV9pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyAhPSBDRENfREFUQV9JTlRFUkZBQ0VfVFlQRSkgeworCQlpZiAoY29udHJvbF9pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyA9PSBDRENfREFUQV9JTlRFUkZBQ0VfVFlQRSkgeworCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKnQ7CisJCQlkZXZfZGJnKCZpbnRmLT5kZXYsIllvdXIgZGV2aWNlIGhhcyBzd2l0Y2hlZCBpbnRlcmZhY2VzLlxuIik7CisKKwkJCXQgPSBjb250cm9sX2ludGVyZmFjZTsKKwkJCWNvbnRyb2xfaW50ZXJmYWNlID0gZGF0YV9pbnRlcmZhY2U7CisJCQlkYXRhX2ludGVyZmFjZSA9IHQ7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwkKKwlpZiAodXNiX2ludGVyZmFjZV9jbGFpbWVkKGRhdGFfaW50ZXJmYWNlKSkgeyAvKiB2YWxpZCBpbiB0aGlzIGNvbnRleHQgKi8KKwkJZGV2X2RiZygmaW50Zi0+ZGV2LCJUaGUgZGF0YSBpbnRlcmZhY2UgaXNuJ3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKworCWlmIChkYXRhX2ludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50cyA8IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZXBjdHJsID0gJmNvbnRyb2xfaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnRbMF0uZGVzYzsKKwllcHJlYWQgPSAmZGF0YV9pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFswXS5kZXNjOworCWVwd3JpdGUgPSAmZGF0YV9pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFsxXS5kZXNjOworCisKKwkvKiB3b3JrYXJvdW5kIGZvciBzd2l0Y2hlZCBlbmRwb2ludHMgKi8KKwlpZiAoKGVwcmVhZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pICE9IFVTQl9ESVJfSU4pIHsKKwkJLyogZGVzY3JpcHRvcnMgYXJlIHN3YXBwZWQgKi8KKwkJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICp0OworCQlkZXZfZGJnKCZpbnRmLT5kZXYsIlRoZSBkYXRhIGludGVyZmFjZSBoYXMgc3dpdGNoZWQgZW5kcG9pbnRzXG4iKTsKKwkJCisJCXQgPSBlcHJlYWQ7CisJCWVwcmVhZCA9IGVwd3JpdGU7CisJCWVwd3JpdGUgPSB0OworCX0KKwlkYmcoImludGVyZmFjZXMgYXJlIHZhbGlkIik7CisJZm9yIChtaW5vciA9IDA7IG1pbm9yIDwgQUNNX1RUWV9NSU5PUlMgJiYgYWNtX3RhYmxlW21pbm9yXTsgbWlub3IrKyk7CisKKwlpZiAobWlub3IgPT0gQUNNX1RUWV9NSU5PUlMpIHsKKwkJZXJyKCJubyBtb3JlIGZyZWUgYWNtIGRldmljZXMiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCEoYWNtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjbSksIEdGUF9LRVJORUwpKSkgeworCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IChhY20ga21hbGxvYylcbiIpOworCQlnb3RvIGFsbG9jX2ZhaWw7CisJfQorCW1lbXNldChhY20sIDAsIHNpemVvZihzdHJ1Y3QgYWNtKSk7CisKKwljdHJsc2l6ZSA9IGxlMTZfdG9fY3B1KGVwY3RybC0+d01heFBhY2tldFNpemUpOworCXJlYWRzaXplID0gbGUxNl90b19jcHUoZXByZWFkLT53TWF4UGFja2V0U2l6ZSk7CisJYWNtLT53cml0ZXNpemUgPSBsZTE2X3RvX2NwdShlcHdyaXRlLT53TWF4UGFja2V0U2l6ZSk7CisJYWNtLT5jb250cm9sID0gY29udHJvbF9pbnRlcmZhY2U7CisJYWNtLT5kYXRhID0gZGF0YV9pbnRlcmZhY2U7CisJYWNtLT5taW5vciA9IG1pbm9yOworCWFjbS0+ZGV2ID0gdXNiX2RldjsKKwlhY20tPmN0cmxfY2FwcyA9IGFjX21hbmFnZW1lbnRfZnVuY3Rpb247CisJYWNtLT5jdHJsc2l6ZSA9IGN0cmxzaXplOworCWFjbS0+cmVhZHNpemUgPSByZWFkc2l6ZTsKKwlhY20tPmJoLmZ1bmMgPSBhY21fcnhfdGFza2xldDsKKwlhY20tPmJoLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWNtOworCUlOSVRfV09SSygmYWNtLT53b3JrLCBhY21fc29mdGludCwgYWNtKTsKKwlzcGluX2xvY2tfaW5pdCgmYWNtLT50aHJvdHRsZV9sb2NrKTsKKwlhY20tPnJlYWR5X2Zvcl93cml0ZSA9IDE7CisKKwlidWYgPSB1c2JfYnVmZmVyX2FsbG9jKHVzYl9kZXYsIGN0cmxzaXplLCBHRlBfS0VSTkVMLCAmYWNtLT5jdHJsX2RtYSk7CisJaWYgKCFidWYpIHsKKwkJZGV2X2RiZygmaW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSAoY3RybCBidWZmZXIgYWxsb2MpXG4iKTsKKwkJZ290byBhbGxvY19mYWlsMjsKKwl9CisJYWNtLT5jdHJsX2J1ZmZlciA9IGJ1ZjsKKworCWJ1ZiA9IHVzYl9idWZmZXJfYWxsb2ModXNiX2RldiwgcmVhZHNpemUsIEdGUF9LRVJORUwsICZhY20tPnJlYWRfZG1hKTsKKwlpZiAoIWJ1ZikgeworCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IChyZWFkIGJ1ZmZlciBhbGxvYylcbiIpOworCQlnb3RvIGFsbG9jX2ZhaWwzOworCX0KKwlhY20tPnJlYWRfYnVmZmVyID0gYnVmOworCisJYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyh1c2JfZGV2LCBhY20tPndyaXRlc2l6ZSwgR0ZQX0tFUk5FTCwgJmFjbS0+d3JpdGVfZG1hKTsKKwlpZiAoIWJ1ZikgeworCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5ICh3cml0ZSBidWZmZXIgYWxsb2MpXG4iKTsKKwkJZ290byBhbGxvY19mYWlsNDsKKwl9CisJYWNtLT53cml0ZV9idWZmZXIgPSBidWY7CQorCisJYWNtLT5jdHJsdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjbS0+Y3RybHVyYikgeworCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IChjdHJsdXJiIGttYWxsb2MpXG4iKTsKKwkJZ290byBhbGxvY19mYWlsNTsKKwl9CisJYWNtLT5yZWFkdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjbS0+cmVhZHVyYikgeworCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IChyZWFkdXJiIGttYWxsb2MpXG4iKTsKKwkJZ290byBhbGxvY19mYWlsNjsKKwl9CisJYWNtLT53cml0ZXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY20tPndyaXRldXJiKSB7CisJCWRldl9kYmcoJmludGYtPmRldiwgIm91dCBvZiBtZW1vcnkgKHdyaXRldXJiIGttYWxsb2MpXG4iKTsKKwkJZ290byBhbGxvY19mYWlsNzsKKwl9CisKKwl1c2JfZmlsbF9pbnRfdXJiKGFjbS0+Y3RybHVyYiwgdXNiX2RldiwgdXNiX3JjdmludHBpcGUodXNiX2RldiwgZXBjdHJsLT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCSBhY20tPmN0cmxfYnVmZmVyLCBjdHJsc2l6ZSwgYWNtX2N0cmxfaXJxLCBhY20sIGVwY3RybC0+YkludGVydmFsKTsKKwlhY20tPmN0cmx1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCWFjbS0+Y3RybHVyYi0+dHJhbnNmZXJfZG1hID0gYWNtLT5jdHJsX2RtYTsKKworCXVzYl9maWxsX2J1bGtfdXJiKGFjbS0+cmVhZHVyYiwgdXNiX2RldiwgdXNiX3JjdmJ1bGtwaXBlKHVzYl9kZXYsIGVwcmVhZC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkgIGFjbS0+cmVhZF9idWZmZXIsIHJlYWRzaXplLCBhY21fcmVhZF9idWxrLCBhY20pOworCWFjbS0+cmVhZHVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX0ZTQlIgfCBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwlhY20tPnJlYWR1cmItPnRyYW5zZmVyX2RtYSA9IGFjbS0+cmVhZF9kbWE7CisKKwl1c2JfZmlsbF9idWxrX3VyYihhY20tPndyaXRldXJiLCB1c2JfZGV2LCB1c2Jfc25kYnVsa3BpcGUodXNiX2RldiwgZXB3cml0ZS0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkgIGFjbS0+d3JpdGVfYnVmZmVyLCBhY20tPndyaXRlc2l6ZSwgYWNtX3dyaXRlX2J1bGssIGFjbSk7CisJYWNtLT53cml0ZXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX0ZTQlIgfCBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwlhY20tPndyaXRldXJiLT50cmFuc2Zlcl9kbWEgPSBhY20tPndyaXRlX2RtYTsKKworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJ0dHlBQ00lZDogVVNCIEFDTSBkZXZpY2VcbiIsIG1pbm9yKTsKKworCWFjbV9zZXRfY29udHJvbChhY20sIGFjbS0+Y3RybG91dCk7CisKKwlhY20tPmxpbmUuZHdEVEVSYXRlID0gY3B1X3RvX2xlMzIoOTYwMCk7CisJYWNtLT5saW5lLmJEYXRhQml0cyA9IDg7CisJYWNtX3NldF9saW5lKGFjbSwgJmFjbS0+bGluZSk7CisKKwl1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmYWNtX2RyaXZlciwgZGF0YV9pbnRlcmZhY2UsIGFjbSk7CisKKwl0dHlfcmVnaXN0ZXJfZGV2aWNlKGFjbV90dHlfZHJpdmVyLCBtaW5vciwgJmludGYtPmRldik7CisKKwlhY21fdGFibGVbbWlub3JdID0gYWNtOworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIGFjbSk7CisJcmV0dXJuIDA7CisKK2FsbG9jX2ZhaWw3OgorCXVzYl9mcmVlX3VyYihhY20tPnJlYWR1cmIpOworYWxsb2NfZmFpbDY6CisJdXNiX2ZyZWVfdXJiKGFjbS0+Y3RybHVyYik7CithbGxvY19mYWlsNToKKwl1c2JfYnVmZmVyX2ZyZWUodXNiX2RldiwgYWNtLT53cml0ZXNpemUsIGFjbS0+d3JpdGVfYnVmZmVyLCBhY20tPndyaXRlX2RtYSk7CithbGxvY19mYWlsNDoKKwl1c2JfYnVmZmVyX2ZyZWUodXNiX2RldiwgcmVhZHNpemUsIGFjbS0+cmVhZF9idWZmZXIsIGFjbS0+cmVhZF9kbWEpOworYWxsb2NfZmFpbDM6CisJdXNiX2J1ZmZlcl9mcmVlKHVzYl9kZXYsIGN0cmxzaXplLCBhY20tPmN0cmxfYnVmZmVyLCBhY20tPmN0cmxfZG1hKTsKK2FsbG9jX2ZhaWwyOgorCWtmcmVlKGFjbSk7CithbGxvY19mYWlsOgorCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBhY21fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgYWNtICphY20gPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisKKwlpZiAoIWFjbSB8fCAhYWNtLT5kZXYpIHsKKwkJZGJnKCJkaXNjb25uZWN0IG9uIG5vbmV4aXN0aW5nIGludGVyZmFjZSIpOworCQlyZXR1cm47CisJfQorCisJZG93bigmb3Blbl9zZW0pOworCWFjbS0+ZGV2ID0gTlVMTDsKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKKworCXVzYl9raWxsX3VyYihhY20tPmN0cmx1cmIpOworCXVzYl9raWxsX3VyYihhY20tPnJlYWR1cmIpOworCXVzYl9raWxsX3VyYihhY20tPndyaXRldXJiKTsKKworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7IC8qIHdhaXQgZm9yIGFjbV9zb2Z0aW50ICovCisKKwl1c2JfYnVmZmVyX2ZyZWUodXNiX2RldiwgYWNtLT53cml0ZXNpemUsIGFjbS0+d3JpdGVfYnVmZmVyLCBhY20tPndyaXRlX2RtYSk7CisJdXNiX2J1ZmZlcl9mcmVlKHVzYl9kZXYsIGFjbS0+cmVhZHNpemUsIGFjbS0+cmVhZF9idWZmZXIsIGFjbS0+cmVhZF9kbWEpOworCXVzYl9idWZmZXJfZnJlZSh1c2JfZGV2LCBhY20tPmN0cmxzaXplLCBhY20tPmN0cmxfYnVmZmVyLCBhY20tPmN0cmxfZG1hKTsKKworCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoJmFjbV9kcml2ZXIsIGFjbS0+ZGF0YSk7CisKKwlpZiAoIWFjbS0+dXNlZCkgeworCQl0dHlfdW5yZWdpc3Rlcl9kZXZpY2UoYWNtX3R0eV9kcml2ZXIsIGFjbS0+bWlub3IpOworCQlhY21fdGFibGVbYWNtLT5taW5vcl0gPSBOVUxMOworCQl1c2JfZnJlZV91cmIoYWNtLT5jdHJsdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGFjbS0+cmVhZHVyYik7CisJCXVzYl9mcmVlX3VyYihhY20tPndyaXRldXJiKTsKKwkJa2ZyZWUoYWNtKTsKKwkJdXAoJm9wZW5fc2VtKTsKKwkJcmV0dXJuOworCX0KKworCXVwKCZvcGVuX3NlbSk7CisKKwlpZiAoYWNtLT50dHkpCisJCXR0eV9oYW5ndXAoYWNtLT50dHkpOworfQorCisvKgorICogVVNCIGRyaXZlciBzdHJ1Y3R1cmUuCisgKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFjbV9pZHNbXSA9IHsKKwkvKiBxdWlya3kgYW5kIGJyb2tlbiBkZXZpY2VzICovCisJeyBVU0JfREVWSUNFKDB4MDg3MCwgMHgwMDAxKSwgLyogTWV0cmljb20gR1MgTW9kZW0gKi8KKwkuZHJpdmVyX2luZm8gPSBOT19VTklPTl9OT1JNQUwsIC8qIGhhcyBubyB1bmlvbiBkZXNjcmlwdG9yICovCisJfSwKKwkvKiBjb250cm9sIGludGVyZmFjZXMgd2l0aCB2YXJpb3VzIEFULWNvbW1hbmQgc2V0cyAqLworCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19DT01NLCBVU0JfQ0RDX1NVQkNMQVNTX0FDTSwKKwkJVVNCX0NEQ19BQ01fUFJPVE9fQVRfVjI1VEVSKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19DT01NLCBVU0JfQ0RDX1NVQkNMQVNTX0FDTSwKKwkJVVNCX0NEQ19BQ01fUFJPVE9fQVRfUENDQTEwMSkgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfQ09NTSwgVVNCX0NEQ19TVUJDTEFTU19BQ00sCisJCVVTQl9DRENfQUNNX1BST1RPX0FUX1BDQ0ExMDFfV0FLRSkgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfQ09NTSwgVVNCX0NEQ19TVUJDTEFTU19BQ00sCisJCVVTQl9DRENfQUNNX1BST1RPX0FUX0dTTSkgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfQ09NTSwgVVNCX0NEQ19TVUJDTEFTU19BQ00sCisJCVVTQl9DRENfQUNNX1BST1RPX0FUXzNHCSkgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfQ09NTSwgVVNCX0NEQ19TVUJDTEFTU19BQ00sCisJCVVTQl9DRENfQUNNX1BST1RPX0FUX0NETUEpIH0sCisKKwkvKiBOT1RFOiAgQ09NTS9BQ00vMHhmZiBpcyBsaWtlbHkgTVNGVCBSTkRJUyAuLi4gTk9UIGEgbW9kZW0hISAqLworCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBhY21faWRzKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFjbV9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImNkY19hY20iLAorCS5wcm9iZSA9CWFjbV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CWFjbV9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWFjbV9pZHMsCit9OworCisvKgorICogVFRZIGRyaXZlciBzdHJ1Y3R1cmVzLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgYWNtX29wcyA9IHsKKwkub3BlbiA9CQkJYWNtX3R0eV9vcGVuLAorCS5jbG9zZSA9CQlhY21fdHR5X2Nsb3NlLAorCS53cml0ZSA9CQlhY21fdHR5X3dyaXRlLAorCS53cml0ZV9yb29tID0JCWFjbV90dHlfd3JpdGVfcm9vbSwKKwkuaW9jdGwgPQkJYWNtX3R0eV9pb2N0bCwKKwkudGhyb3R0bGUgPQkJYWNtX3R0eV90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQlhY21fdHR5X3VudGhyb3R0bGUsCisJLmNoYXJzX2luX2J1ZmZlciA9CWFjbV90dHlfY2hhcnNfaW5fYnVmZmVyLAorCS5icmVha19jdGwgPQkJYWNtX3R0eV9icmVha19jdGwsCisJLnNldF90ZXJtaW9zID0JCWFjbV90dHlfc2V0X3Rlcm1pb3MsCisJLnRpb2NtZ2V0ID0JCWFjbV90dHlfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0JCWFjbV90dHlfdGlvY21zZXQsCit9OworCisvKgorICogSW5pdCAvIGV4aXQuCisgKi8KKworc3RhdGljIGludCBfX2luaXQgYWNtX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCWFjbV90dHlfZHJpdmVyID0gYWxsb2NfdHR5X2RyaXZlcihBQ01fVFRZX01JTk9SUyk7CisJaWYgKCFhY21fdHR5X2RyaXZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisJYWNtX3R0eV9kcml2ZXItPm93bmVyID0gVEhJU19NT0RVTEUsCisJYWNtX3R0eV9kcml2ZXItPmRyaXZlcl9uYW1lID0gImFjbSIsCisJYWNtX3R0eV9kcml2ZXItPm5hbWUgPSAidHR5QUNNIiwKKwlhY21fdHR5X2RyaXZlci0+ZGV2ZnNfbmFtZSA9ICJ1c2IvYWNtLyIsCisJYWNtX3R0eV9kcml2ZXItPm1ham9yID0gQUNNX1RUWV9NQUpPUiwKKwlhY21fdHR5X2RyaXZlci0+bWlub3Jfc3RhcnQgPSAwLAorCWFjbV90dHlfZHJpdmVyLT50eXBlID0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTCwKKwlhY21fdHR5X2RyaXZlci0+c3VidHlwZSA9IFNFUklBTF9UWVBFX05PUk1BTCwKKwlhY21fdHR5X2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9OT19ERVZGUywKKwlhY21fdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOworCWFjbV90dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19jZmxhZyA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwl0dHlfc2V0X29wZXJhdGlvbnMoYWNtX3R0eV9kcml2ZXIsICZhY21fb3BzKTsKKworCXJldHZhbCA9IHR0eV9yZWdpc3Rlcl9kcml2ZXIoYWNtX3R0eV9kcml2ZXIpOworCWlmIChyZXR2YWwpIHsKKwkJcHV0X3R0eV9kcml2ZXIoYWNtX3R0eV9kcml2ZXIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmYWNtX2RyaXZlcik7CisJaWYgKHJldHZhbCkgeworCQl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoYWNtX3R0eV9kcml2ZXIpOworCQlwdXRfdHR5X2RyaXZlcihhY21fdHR5X2RyaXZlcik7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhY21fZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZhY21fZHJpdmVyKTsKKwl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoYWNtX3R0eV9kcml2ZXIpOworCXB1dF90dHlfZHJpdmVyKGFjbV90dHlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWNtX2luaXQpOworbW9kdWxlX2V4aXQoYWNtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uaCBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDA5MTE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKgorICogSW5jbHVkZXMgZm9yIGNkYy1hY20uYworICoKKyAqIE1haW5seSB0YWtlIGZyb20gdXNibmV0J3MgY2RjLWV0aGVyIHBhcnQKKyAqCisgKi8KKworLyoKKyAqIENNU1BBUiwgc29tZSBhcmNoaXRlY3R1cmVzIGNhbid0IGhhdmUgc3BhY2UgYW5kIG1hcmsgcGFyaXR5LgorICovCisKKyNpZm5kZWYgQ01TUEFSCisjZGVmaW5lIENNU1BBUgkJCTAKKyNlbmRpZgorCisvKgorICogTWFqb3IgYW5kIG1pbm9yIG51bWJlcnMuCisgKi8KKworI2RlZmluZSBBQ01fVFRZX01BSk9SCQkxNjYKKyNkZWZpbmUgQUNNX1RUWV9NSU5PUlMJCTMyCisKKy8qCisgKiBSZXF1ZXN0cy4KKyAqLworCisjZGVmaW5lIFVTQl9SVF9BQ00JCShVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UpCisKKy8qCisgKiBPdXRwdXQgY29udHJvbCBsaW5lcy4KKyAqLworCisjZGVmaW5lIEFDTV9DVFJMX0RUUgkJMHgwMQorI2RlZmluZSBBQ01fQ1RSTF9SVFMJCTB4MDIKKworLyoKKyAqIElucHV0IGNvbnRyb2wgbGluZXMgYW5kIGxpbmUgZXJyb3JzLgorICovCisKKyNkZWZpbmUgQUNNX0NUUkxfRENECQkweDAxCisjZGVmaW5lIEFDTV9DVFJMX0RTUgkJMHgwMgorI2RlZmluZSBBQ01fQ1RSTF9CUksJCTB4MDQKKyNkZWZpbmUgQUNNX0NUUkxfUkkJCTB4MDgKKworI2RlZmluZSBBQ01fQ1RSTF9GUkFNSU5HCTB4MTAKKyNkZWZpbmUgQUNNX0NUUkxfUEFSSVRZCQkweDIwCisjZGVmaW5lIEFDTV9DVFJMX09WRVJSVU4JMHg0MAorCisvKgorICogSW50ZXJuYWwgZHJpdmVyIHN0cnVjdHVyZXMuCisgKi8KKworc3RydWN0IGFjbSB7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsJCQkJLyogdGhlIGNvcnJlc3BvbmRpbmcgdXNiIGRldmljZSAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICpjb250cm9sOwkJCS8qIGNvbnRyb2wgaW50ZXJmYWNlICovCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmRhdGE7CQkJLyogZGF0YSBpbnRlcmZhY2UgKi8KKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwkJCQkvKiB0aGUgY29ycmVzcG9uZGluZyB0dHkgKi8KKwlzdHJ1Y3QgdXJiICpjdHJsdXJiLCAqcmVhZHVyYiwgKndyaXRldXJiOwkvKiB1cmJzICovCisJdTggKmN0cmxfYnVmZmVyLCAqcmVhZF9idWZmZXIsICp3cml0ZV9idWZmZXI7CS8qIGJ1ZmZlcnMgb2YgdXJicyAqLworCWRtYV9hZGRyX3QgY3RybF9kbWEsIHJlYWRfZG1hLCB3cml0ZV9kbWE7CS8qIGRtYSBoYW5kbGVzIG9mIGJ1ZmZlcnMgKi8KKwlzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZyBsaW5lOwkJLyogYml0cywgc3RvcCwgcGFyaXR5ICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CQkJLyogd29yayBxdWV1ZSBlbnRyeSBmb3IgbGluZSBkaXNjaXBsaW5lIHdha2luZyB1cCAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBiaDsJCQkvKiByeCBwcm9jZXNzaW5nICovCisJc3BpbmxvY2tfdCB0aHJvdHRsZV9sb2NrOwkJCS8qIHN5bmNocm9uaXplIHRocm90dGVsaW5nIGFuZCByZWFkIGNhbGxiYWNrICovCisJdW5zaWduZWQgaW50IGN0cmxpbjsJCQkJLyogaW5wdXQgY29udHJvbCBsaW5lcyAoRENELCBEU1IsIFJJLCBicmVhaywgb3ZlcnJ1bnMpICovCisJdW5zaWduZWQgaW50IGN0cmxvdXQ7CQkJCS8qIG91dHB1dCBjb250cm9sIGxpbmVzIChEVFIsIFJUUykgKi8KKwl1bnNpZ25lZCBpbnQgd3JpdGVzaXplOwkJCQkvKiBtYXggcGFja2V0IHNpemUgZm9yIHRoZSBvdXRwdXQgYnVsayBlbmRwb2ludCAqLworCXVuc2lnbmVkIGludCByZWFkc2l6ZSxjdHJsc2l6ZTsJCQkvKiBidWZmZXIgc2l6ZXMgZm9yIGZyZWVpbmcgKi8KKwl1bnNpZ25lZCBpbnQgdXNlZDsJCQkJLyogc29tZW9uZSBoYXMgdGhpcyBhY20ncyBkZXZpY2Ugb3BlbiAqLworCXVuc2lnbmVkIGludCBtaW5vcjsJCQkJLyogYWNtIG1pbm9yIG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgdGhyb3R0bGU7CQkJCS8qIHRocm90dGxlZCBieSB0dHkgbGF5ZXIgKi8KKwl1bnNpZ25lZCBjaGFyIGNsb2NhbDsJCQkJLyogdGVybWlvcyBDTE9DQUwgKi8KKwl1bnNpZ25lZCBjaGFyIHJlYWR5X2Zvcl93cml0ZTsJCQkvKiB3cml0ZSB1cmIgY2FuIGJlIHVzZWQgKi8KKwl1bnNpZ25lZCBjaGFyIHJlc3VibWl0X3RvX3VudGhyb3R0bGU7CQkvKiB0aHJvdHRlbGluZyBoYXMgZGlzYWJsZWQgdGhlIHJlYWQgdXJiICovCisJdW5zaWduZWQgaW50IGN0cmxfY2FwczsJCQkJLyogY29udHJvbCBjYXBhYmlsaXRpZXMgZnJvbSB0aGUgY2xhc3Mgc3BlY2lmaWMgaGVhZGVyICovCit9OworCisjZGVmaW5lIENEQ19EQVRBX0lOVEVSRkFDRV9UWVBFCTB4MGEKKworLyogY29uc3RhbnRzIGRlc2NyaWJpbmcgdmFyaW91cyBxdWlya3MgYW5kIGVycm9ycyAqLworI2RlZmluZSBOT19VTklPTl9OT1JNQUwJCQkxCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy91c2ItbWlkaS5jIGIvZHJpdmVycy91c2IvY2xhc3MvdXNiLW1pZGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjhhZjM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvdXNiLW1pZGkuYwpAQCAtMCwwICsxLDIxNTQgQEAKKy8qCisgIHVzYi1taWRpLmMgIC0tICBVU0ItTUlESSBkcml2ZXIKKworICBDb3B5cmlnaHQgKEMpIDIwMDEgCisgICAgICBOQUdBTk8gRGFpc3VrZSA8YnJlZXplLm5hZ2Fub0BuaWZ0eS5uZS5qcD4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyAgVGhpcyBkcml2ZXIgaXMgYmFzZWQgb246CisgICAgLSAnVW5pdmVyc2FsIFNlcmlhbCBCdXMgRGV2aWNlIENsYXNzIERlZmluaXRpb24gZm9yIE1JREkgRGV2aWNlJworICAgIC0gbGludXgvZHJpdmVycy9zb3VuZC9lczEzNzEuYywgbGludXgvZHJpdmVycy91c2IvYXVkaW8uYworICAgIC0gYWxzYS9sb3dsZXZlbC9wY2kvY3M2NHh4LmMKKyAgICAtIHVtaWRpLmMgZm9yIE5ldEJTRAorICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zb3VuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisKKyNpbmNsdWRlICJ1c2ItbWlkaS5oIgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIE1vcmUgdmVyYm9zZSBvbiBzeXNsb2cgKi8KKyN1bmRlZiBNSURJX0RFQlVHCisKKyNkZWZpbmUgTUlESV9JTl9CVUZTSVogMTAyNAorCisjZGVmaW5lIEhBVkVfU1VQUE9SVF9VU0JfTUlESV9DTEFTUworCisjdW5kZWYgSEFWRV9TVVBQT1JUX0FMU0EKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IHNpbmdsZWJ5dGUgPSAwOworbW9kdWxlX3BhcmFtKHNpbmdsZWJ5dGUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNpbmdsZWJ5dGUsIkVuYWJsZSBzZW5kaW5nIE1JREkgbWVzc2FnZXMgd2l0aCBzaW5nbGUgbWVzc2FnZSBwYWNrZXQiKTsKKworc3RhdGljIGludCBtYXhkZXZpY2VzID0gNDsKK21vZHVsZV9wYXJhbShtYXhkZXZpY2VzLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtYXhkZXZpY2VzLCJNYXggbnVtYmVyIG9mIGFsbG9jYXRhYmxlIE1JREkgZGV2aWNlIik7CisKK3N0YXRpYyBpbnQgdXZlbmRvciAgICAgPSAtMTsKK21vZHVsZV9wYXJhbSh1dmVuZG9yLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh1dmVuZG9yLCAiVGhlIFVTQiBWZW5kb3IgSUQgb2YgYSBzZW1pLWNvbXBsaWFudCBpbnRlcmZhY2UiKTsKKworc3RhdGljIGludCB1cHJvZHVjdCAgICA9IC0xOworbW9kdWxlX3BhcmFtKHVwcm9kdWN0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh1cHJvZHVjdCwgIlRoZSBVU0IgUHJvZHVjdCBJRCBvZiBhIHNlbWktY29tcGxpYW50IGludGVyZmFjZSIpOworCitzdGF0aWMgaW50IHVpbnRlcmZhY2UgID0gLTE7Cittb2R1bGVfcGFyYW0odWludGVyZmFjZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModWludGVyZmFjZSwgIlRoZSBJbnRlcmZhY2UgbnVtYmVyIG9mIGEgc2VtaS1jb21wbGlhbnQgaW50ZXJmYWNlIik7CisKK3N0YXRpYyBpbnQgdWFsdCAgICAgICAgPSAtMTsKK21vZHVsZV9wYXJhbSh1YWx0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh1YWx0LCAiVGhlIG9wdGlvbmFsIGFsdGVybmF0aXZlIHNldHRpbmcgb2YgYSBzZW1pLWNvbXBsaWFudCBpbnRlcmZhY2UiKTsKKworc3RhdGljIGludCB1bWluICAgICAgICA9IC0xOworbW9kdWxlX3BhcmFtKHVtaW4sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHVtaW4sICJUaGUgaW5wdXQgZW5kcG9pbnQgb2YgYSBzZW1pLWNvbXBsaWFudCBpbnRlcmZhY2UiKTsKKworc3RhdGljIGludCB1bW91dCAgICAgICA9IC0xOworbW9kdWxlX3BhcmFtKHVtb3V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh1bW91dCwgIlRoZSBvdXRwdXQgZW5kcG9pbnQgb2YgYSBzZW1pLWNvbXBsaWFudCBpbnRlcmZhY2UiKTsKKworc3RhdGljIGludCB1Y2FibGUgICAgICA9IC0xOworbW9kdWxlX3BhcmFtKHVjYWJsZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModWNhYmxlLCAiVGhlIGNhYmxlIG51bWJlciB1c2VkIGZvciBhIHNlbWktY29tcGxpYW50IGludGVyZmFjZSIpOworCisvKiogTm90ZSAtLSB0aGUgdXNiX3N0cmluZygpIHJldHVybnMgb25seSBMYXRpbi0xIGNoYXJhY3RlcnMuCisgKiAodW5pY29kZSBjaGFycyA8PSAyNTUpLiBUbyBzdXBwb3J0IEphcGFuZXNlLCBhIHVuaWNvZGUxNkxFLXRvLUVVQyBvcgorICogdW5pY29kZTE2TEUtdG8tSklTIHJvdXRpbmUgaXMgbmVlZGVkIHRvIHdyYXAgYXJvdW5kIHVzYl9nZXRfc3RyaW5nKCkuCisgKiovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgdWxhbmdpZCAgICAgID0gMHgwNDA5OyAvKiogMHgwNDExIGZvciBKYXBhbmVzZSAqKi8KK21vZHVsZV9wYXJhbSh1bGFuZ2lkLCB1c2hvcnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh1bGFuZ2lkLCAiVGhlIG9wdGlvbmFsIHByZWZlcnJlZCBVU0IgTGFuZ3VhZ2UgSUQgZm9yIGFsbCBkZXZpY2VzIik7CisKK01PRFVMRV9BVVRIT1IoIk5BR0FOTyBEYWlzdWtlIDxicmVlemUubmFnYW5vQG5pZnR5Lm5lLmpwPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJVU0ItTUlESSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiogTUlESVN0cmVhbWluZyBDbGFzcy1TcGVjaWZpYyBJbnRlcmZhY2UgRGVzY3JpcHRvciBTdWJ0eXBlcyAqKi8KKworI2RlZmluZSBNU19ERVNDUklQVE9SX1VOREVGSU5FRAkwCisjZGVmaW5lIE1TX0hFQURFUgkJMQorI2RlZmluZSBNSURJX0lOX0pBQ0sJCTIKKyNkZWZpbmUgTUlESV9PVVRfSkFDSwkJMworLyogU3BlYyByZWFkczogRUxFTUVOVCAqLworI2RlZmluZSBFTEVNRU5UX0RFU0NSSVBUT1IgICAJNAorCisjZGVmaW5lIE1TX0hFQURFUl9MRU5HVEgJNworCisvKiogTUlESVN0cmVhbWluZyBDbGFzcy1TcGVjaWZpYyBFbmRwb2ludCBEZXNjcmlwdG9yIFN1YnR5cGVzICoqLworCisjZGVmaW5lIERFU0NSSVBUT1JfVU5ERUZJTkVECTAKKy8qIFNwZWMgcmVhZHM6IE1TX0dFTkVSQUwgKi8KKyNkZWZpbmUgTVNfR0VORVJBTF9FTkRQT0lOVAkxCisKKy8qKiBNSURJU3RyZWFtaW5nIE1JREkgSU4gYW5kIE9VVCBKYWNrIFR5cGVzICoqLworCisjZGVmaW5lIEpBQ0tfVFlQRV9VTkRFRklORUQJMAorLyogU3BlYyByZWFkczogRU1CRURERUQgKi8KKyNkZWZpbmUgRU1CRURERURfSkFDSwkJMQorLyogU3BlYyByZWFkczogRVhURVJOQUwgKi8KKyNkZWZpbmUgRVhURVJOQUxfSkFDSwkJMgorCisKKy8qIHN0cnVjdHVyZSBzdW1tYXJ5CisgIAorICAgICAgdXNiX21pZGlfc3RhdGUgICAgIHVzYl9kZXZpY2UKKyAgICAgICB8ICAgICAgICAgfAorICAgICAgKnwgICAgICAgICp8ICAgICAgIHBlciBlcAorICAgICBpbl9lcCAgICAgb3V0X2VwCisgICAgICAgfCAgICAgICAgIHwKKyAgICAgICp8ICAgICAgICAqfCAgICAgICBwZXIgY2FibGUKKyAgICAgIG1pbiAgICAgICBtb3V0CisgICAgICAgfCAgICAgICAgIHwgICAgICAgKGNhYmxlIHRvIGRldmljZSBwYWlyaW5nIG1hZ2ljKQorICAgICAgIHwgICAgICAgICB8CisgICAgICAgdXNiX21pZGlfZGV2ICAgICAgZGV2X2lkIChtYWpvcixtaW5vcikgPT0gZmlsZS0+cHJpdmF0ZV9kYXRhCisKKyovCisKKy8qIHVzYl9taWRpX3N0YXRlOiBjb3JyZXNwb25kcyB0byBhIFVTQi1NSURJIG1vZHVsZSAqLworc3RydWN0IHVzYl9taWRpX3N0YXRlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgbWlkaWRldjsKKwkKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCQorCXN0cnVjdCBsaXN0X2hlYWQgICBtaWRpRGV2TGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgaW5FbmRwb2ludExpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCAgIG91dEVuZHBvaW50TGlzdDsKKwkKKwlzcGlubG9ja190ICAgICAgICAgbG9jazsKKwkKKwl1bnNpZ25lZCBpbnQgICAgICAgY291bnQ7IC8qIHVzYWdlIGNvdW50ZXIgKi8KK307CisKKy8qIG1pZGlfb3V0X2VuZHBvaW50OiBjb3JyZXNwb25kcyB0byBhbiBvdXRwdXQgZW5kcG9pbnQgKi8KK3N0cnVjdCBtaWRpX291dF9lbmRwb2ludCB7CisJc3RydWN0IGxpc3RfaGVhZCAgbGlzdDsKKwkKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCWludCAgICAgICAgICAgICAgICBlbmRwb2ludDsKKwlzcGlubG9ja190ICAgICAgICAgbG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAgd2FpdDsKKwkKKwl1bnNpZ25lZCBjaGFyICAgICAqYnVmOworCWludCAgICAgICAgICAgICAgICBidWZXclB0cjsKKwlpbnQgICAgICAgICAgICAgICAgYnVmU2l6ZTsKKwkKKwlzdHJ1Y3QgdXJiICAgICAgICp1cmI7Cit9OworCisvKiBtaWRpX2luX2VuZHBvaW50OiBjb3JyZXNwb25kcyB0byBhbiBpbnB1dCBlbmRwb2ludCAqLworc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQgeworCXN0cnVjdCBsaXN0X2hlYWQgICBsaXN0OworCisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKKwlpbnQgICAgICAgICAgICAgICAgZW5kcG9pbnQ7CisJc3BpbmxvY2tfdCAgICAgICAgIGxvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3QgIHdhaXQ7CisKKwlzdHJ1Y3QgdXNiX21pZGlkZXYgKmNhYmxlc1sxNl07CS8vIGNhYmxlcyBvcGVuIGZvciByZWFkCisJaW50ICAgICAgICAgICAgICAgICByZWFkZXJzOwkvLyBudW1iZXIgb2YgY2FibGVzIG9wZW4gZm9yIHJlYWQKKworCXN0cnVjdCB1cmIgICAgICAgICp1cmI7CisJdW5zaWduZWQgY2hhciAgICAgKnJlY3ZCdWY7CisJaW50ICAgICAgICAgICAgICAgIHJlY3ZCdWZTaXplOworCWludCAgICAgICAgICAgICAgICB1cmJTdWJtaXR0ZWQ7CS8vRklYTUU6ID09IHJlYWRlcnMgPiAwCit9OworCisvKiB1c2JfbWlkaWRldjogY29ycmVzcG9uZHMgdG8gYSBsb2dpY2FsIGRldmljZSAqLworc3RydWN0IHVzYl9taWRpZGV2IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgIGxpc3Q7CisKKwlzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKm1pZGk7CisJaW50ICAgICAgICAgICAgICAgICAgICBkZXZfbWlkaTsKKwltb2RlX3QgICAgICAgICAgICAgICAgIG9wZW5fbW9kZTsKKworCXN0cnVjdCB7CisJCXN0cnVjdCBtaWRpX2luX2VuZHBvaW50ICplcDsKKwkJaW50ICAgICAgICAgICAgICBjYWJsZUlkOworCQkKKy8vIGFzIHdlIGFyZSBwdXNoaW5nIGRhdGEgZnJvbSB1c2JfYnVsa19yZWFkIHRvIHVzYl9taWRpX3JlYWQsCisvLyB3ZSBuZWVkIGEgbGFyZ2VyLCBjeWNsaWMgYnVmZmVyIGhlcmUuCisJCXVuc2lnbmVkIGNoYXIgICAgYnVmW01JRElfSU5fQlVGU0laXTsKKwkJaW50ICAgICAgICAgICAgICBidWZSZFB0cjsKKwkJaW50ICAgICAgICAgICAgICBidWZXclB0cjsKKwkJaW50ICAgICAgICAgICAgICBidWZSZW1haW5zOworCX0gbWluOworCisJc3RydWN0IHsKKwkJc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICplcDsKKwkJaW50ICAgICAgICAgICAgICBjYWJsZUlkOworCQkKKwkJdW5zaWduZWQgY2hhciAgICBidWZbM107CisJCWludCAgICAgICAgICAgICAgYnVmUHRyOworCQlpbnQgICAgICAgICAgICAgIGJ1ZlJlbWFpbnM7CisJCQorCQlpbnQgICAgICAgICAgICAgIGlzSW5FeGNsdXNpdmU7CisJCXVuc2lnbmVkIGNoYXIgICAgbGFzdEV2ZW50OworCX0gbW91dDsKKworCWludCBzaW5nbGVieXRlOworfTsKKworLyoqIE1hcCB0aGUgaGlnaCBueWJibGUgb2YgTUlESSB2b2ljZSBtZXNzYWdlcyB0byBudW1iZXIgb2YgTWVzc2FnZSBieXRlcy4KKyAqIEhpZ2ggbnlibGUgcmFuZ2VzIGZyb20gMHg4IHRvIDB4ZQorICovCisKK3N0YXRpYyBpbnQgcmVtYWluc184MGUwW10gPSB7CisJMywJLyoqIDB4OFggTm90ZSBPZmYgKiovCisJMywJLyoqIDB4OVggTm90ZSBPbiAqKi8KKwkzLAkvKiogMHhBWCBQb2x5LWtleSBwcmVzc3VyZSAqKi8KKwkzLAkvKiogMHhCWCBDb250cm9sIENoYW5nZSAqKi8KKwkyLAkvKiogMHhDWCBQcm9ncmFtIENoYW5nZSAqKi8KKwkyLAkvKiogMHhEWCBDaGFubmVsIHByZXNzdXJlICoqLworCTMgCS8qKiAweEVYIFBpdGNoQmVuZCBDaGFuZ2UgKiovCit9OworCisvKiogTWFwIHRoZSBtZXNzYWdlcyB0byBhIG51bWJlciBvZiBNZXNzYWdlIGJ5dGVzLgorICoKKyAqKi8KK3N0YXRpYyBpbnQgcmVtYWluc19mMGY2W10gPSB7CisJMCwJLyoqIDB4RjAgKiovCisJMiwJLyoqIDBYRjEgKiovCisJMywJLyoqIDBYRjIgKiovCisJMiwJLyoqIDBYRjMgKiovCisJMiwJLyoqIDBYRjQgKFVuZGVmaW5lZCBieSBNSURJIFNwZWMsIGFuZCBzdWJqZWN0IHRvIGNoYW5nZSkgKiovCisJMiwJLyoqIDBYRjUgKFVuZGVmaW5lZCBieSBNSURJIFNwZWMsIGFuZCBzdWJqZWN0IHRvIGNoYW5nZSkgKiovCisJMQkvKiogMFhGNiAqKi8KK307CisKKy8qKiBNYXAgdGhlIG1lc3NhZ2VzIHRvIGEgQ0lOIChDb2RlIEluZGV4IE51bWJlcikuCisgKgorICoqLworc3RhdGljIGludCBjaW5fZjBmZltdID0geworCTQsCS8qKiAweEYwIFN5c3RlbSBFeGNsdXNpdmUgTWVzc2FnZSBTdGFydCAoc3BlY2lhbCBjYXNlcyBtYXkgYmUgNiBvciA3KSAqLworCTIsCS8qKiAweEYxICoqLworCTMsCS8qKiAweEYyICoqLworCTIsCS8qKiAweEYzICoqLworCTIsCS8qKiAweEY0ICoqLworCTIsCS8qKiAweEY1ICoqLworCTUsCS8qKiAweEY2ICoqLworCTUsCS8qKiAweEY3IEVuZCBvZiBTeXN0ZW0gRXhjbHVzaXZlIE1lc3NhZ2UgKE1heSBiZSA2IG9yIDcpICoqLworCTUsCS8qKiAweEY4ICoqLworCTUsCS8qKiAweEY5ICoqLworCTUsCS8qKiAweEZBICoqLworCTUsCS8qKiAweEZCICoqLworCTUsCS8qKiAweEZDICoqLworCTUsCS8qKiAweEZEICoqLworCTUsCS8qKiAweEZFICoqLworCTUJLyoqIDB4RkYgKiovCit9OworCisvKiogTWFwIE1JRElTdHJlYW1pbmcgRXZlbnQgcGFja2V0IENvZGUgSW5kZXggTnVtYmVyIChsb3cgbnliYmxlIG9mIGJ5dGUgMCkKKyAqIHRvIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgdmFsaWQgTUlESSBkYXRhLgorICoKKyAqIENJTiBvZiAwIGFuZCAxIGFyZSBOT1QgVVNFRCBpbiBNSURJU3RyZWFtaW5nIDEuMC4KKyAqCisgKiovCitzdGF0aWMgaW50IGNpbl90b19sZW5bXSA9IHsKKwkwLCAwLCAyLCAzLAorCTMsIDEsIDIsIDMsCisJMywgMywgMywgMywKKwkyLCAyLCAzLCAxCit9OworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgbWlkaWRldnMgPSBMSVNUX0hFQURfSU5JVChtaWRpZGV2cyk7CisKK3N0YXRpYyBERUNMQVJFX01VVEVYKG9wZW5fc2VtKTsKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChvcGVuX3dhaXQpOworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQgdXNiX3dyaXRlX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICplcCA9IChzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQgKil1cmItPmNvbnRleHQ7CisKKwlpZiAoIHdhaXRxdWV1ZV9hY3RpdmUoICZlcC0+d2FpdCApICkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCAmZXAtPndhaXQgKTsKK30KKworCitzdGF0aWMgaW50IHVzYl93cml0ZSggc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICplcCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuICkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZDsKKwlpbnQgcGlwZTsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgc3RhdHVzOworCWludCBtYXhyZXRyeSA9IDUwOworCQorCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsY3VycmVudCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZXAtPndhaXQpOworCisJZCA9IGVwLT51c2JkZXY7CisJcGlwZSA9IHVzYl9zbmRidWxrcGlwZShkLCBlcC0+ZW5kcG9pbnQpOworCXVzYl9maWxsX2J1bGtfdXJiKCBlcC0+dXJiLCBkLCBwaXBlLCAodW5zaWduZWQgY2hhciopYnVmLCBsZW4sCisJCSAgICAgICB1c2Jfd3JpdGVfY2FsbGJhY2ssIGVwICk7CisKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihlcC0+dXJiLCBHRlBfS0VSTkVMKTsKKyAgICAKKwlpZiAoc3RhdHVzKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNibWlkaTogQ2Fubm90IHN1Ym1pdCB1cmIgKCVkKVxuIixzdGF0dXMpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVycm9yOworCX0KKworCWFkZF93YWl0X3F1ZXVlKCAmZXAtPndhaXQsICZ3YWl0ICk7CisJc2V0X2N1cnJlbnRfc3RhdGUoIFRBU0tfSU5URVJSVVBUSUJMRSApOworCisJd2hpbGUoIGVwLT51cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MgKSB7CisJCWlmICggbWF4cmV0cnktLSA8IDAgKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYm1pZGk6IHVzYl9idWxrX21zZyB0aW1lZCBvdXRcbiIpOworCQkJcmV0ID0gLUVUSU1FOworCQkJYnJlYWs7CisJCX0KKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCAmZXAtPndhaXQsIDEwICk7CisJfQorCXNldF9jdXJyZW50X3N0YXRlKCBUQVNLX1JVTk5JTkcgKTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSggJmVwLT53YWl0LCAmd2FpdCApOworCitlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKiBDb3B5IGRhdGEgZnJvbSBVUkIgdG8gSW4gZW5kcG9pbnQgYnVmLgorICogRGlzY2FyZCBpZiBDSU4gPT0gMCBvciBDSU4gPSAxLgorICoKKyAqCisgKiovCisKK3N0YXRpYyB2b2lkIHVzYl9idWxrX3JlYWQoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgbWlkaV9pbl9lbmRwb2ludCAqZXAgPSAoc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQgKikodXJiLT5jb250ZXh0KTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IGksIGosIHdha2U7CisKKwlpZiAoICFlcC0+dXJiU3VibWl0dGVkICkgeworCQlyZXR1cm47CisJfQorCisJaWYgKCAodXJiLT5zdGF0dXMgPT0gMCkgJiYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IDApICkgeworCQl3YWtlID0gMDsKKwkJc3Bpbl9sb2NrKCAmZXAtPmxvY2sgKTsKKworCQlmb3IoaiA9IDA7IGogPCB1cmItPmFjdHVhbF9sZW5ndGg7IGogKz0gNCkgeworCQkJaW50IGNpbiA9IChkYXRhW2pdPj4wKSYweGY7CisJCQlpbnQgY2FiID0gKGRhdGFbal0+PjQpJjB4ZjsKKwkJCXN0cnVjdCB1c2JfbWlkaWRldiAqY2FibGUgPSBlcC0+Y2FibGVzW2NhYl07CisJCQlpZiAoIGNhYmxlICkgeworCQkJCWludCBsZW4gPSBjaW5fdG9fbGVuW2Npbl07IC8qKiBsZW5ndGggb2YgTUlESSBkYXRhICoqLworCQkJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQkJCQljYWJsZS0+bWluLmJ1ZltjYWJsZS0+bWluLmJ1ZldyUHRyXSA9IGRhdGFbMStpK2pdOworCQkJCQljYWJsZS0+bWluLmJ1ZldyUHRyID0gKGNhYmxlLT5taW4uYnVmV3JQdHIrMSklTUlESV9JTl9CVUZTSVo7CisJCQkJCWlmIChjYWJsZS0+bWluLmJ1ZlJlbWFpbnMgPCBNSURJX0lOX0JVRlNJWikKKwkJCQkJCWNhYmxlLT5taW4uYnVmUmVtYWlucyArPSAxOworCQkJCQllbHNlIC8qKiBuZWVkIHRvIGRyb3AgZGF0YSAqKi8KKwkJCQkJCWNhYmxlLT5taW4uYnVmUmRQdHIgKz0gKGNhYmxlLT5taW4uYnVmUmRQdHIrMSklTUlESV9JTl9CVUZTSVo7CisJCQkJCXdha2UgPSAxOworCQkJCX0KKwkJCX0KKwkJfQorCisJCXNwaW5fdW5sb2NrICggJmVwLT5sb2NrICk7CisJCWlmICggd2FrZSApIHsKKwkJCXdha2VfdXAoICZlcC0+d2FpdCApOworCQl9CisJfQorCisJLyogdXJiLT5kZXYgbXVzdCBiZSByZWluaXRpYWxpemVkIG9uIDIuNC54IGtlcm5lbHMgKi8KKwl1cmItPmRldiA9IGVwLT51c2JkZXY7CisKKwl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCXVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Cit9CisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFRoaXMgcm91dGluZSBtdXN0IGJlIGNhbGxlZCB3aXRoIHNwaW5fbG9jayAqLworCisvKiogV3JhcHBlciBhcm91bmQgdXNiX3dyaXRlKCkuCisgKiAgVGhpcyByb3V0aW5lIG11c3QgYmUgY2FsbGVkIHdpdGggc3Bpbl9sb2NrIGhlbGQgb24gZXAuCisgKiAgQ2FsbGVkIGJ5IG1pZGlXcml0ZSgpLCBwdXRPbmVNaWRpRXZlbnQoKSwgYW5kICB1c2JfbWlkaV93cml0ZSgpOworICoqLworc3RhdGljIGludCBmbHVzaF9taWRpX2J1ZmZlciggc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICplcCApCit7CisJaW50IHJldD0wOworCisJaWYgKCBlcC0+YnVmV3JQdHIgPiAwICkgeworCQlyZXQgPSB1c2Jfd3JpdGUoIGVwLCBlcC0+YnVmLCBlcC0+YnVmV3JQdHIgKTsKKwkJZXAtPmJ1ZldyUHRyID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisvKiogR2l2ZW4gYSBNSURJIEV2ZW50LCBkZXRlcm1pbmUgc2l6ZSBvZiBkYXRhIHRvIGJlIGF0dGFjaGVkIHRvIAorICogVVNCLU1JREkgcGFja2V0LgorICogUmV0dXJucyAxLCAyIG9yIDMuCisgKiBDYWxsZWQgYnkgbWlkaVdyaXRlKCk7CisgKiBVc2VzIHJlbWFpbnNfODBlMCBhbmQgcmVtYWluc19mMGY2OworICoqLworc3RhdGljIGludCBnZXRfcmVtYWlucyhpbnQgZXZlbnQpCit7CisJaW50IHJldDsKKworCWlmICggZXZlbnQgIDwgMHg4MCApIHsKKwkJcmV0ID0gMTsKKwl9IGVsc2UgaWYgKCBldmVudCA8IDB4ZjAgKSB7CisJCXJldCA9IHJlbWFpbnNfODBlMFsoKGV2ZW50LTB4ODApPj40KSYweDBmXTsKKwl9IGVsc2UgaWYgKCBldmVudCA8IDB4ZjcgKSB7CisJCXJldCA9IHJlbWFpbnNfZjBmNltldmVudC0weGYwXTsKKwl9IGVsc2UgeworCQlyZXQgPSAxOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qKiBHaXZlbiB0aGUgb3V0cHV0IE1JREkgZGF0YSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciwgY29tcHV0ZXMgYSByZWFzb25hYmxlIAorICogQ0lOLgorICogQ2FsbGVkIGJ5IHB1dE9uZU1pZGlFdmVudCgpLgorICoqLworc3RhdGljIGludCBnZXRfQ0lOKCBzdHJ1Y3QgdXNiX21pZGlkZXYgKm0gKQoreworCWludCBjaW47CisKKwlpZiAoIG0tPm1vdXQuYnVmWzBdID09IDB4ZjcgKSB7CisJCWNpbiA9IDU7CisJfQorCWVsc2UgaWYgKCBtLT5tb3V0LmJ1ZlsxXSA9PSAweGY3ICkgeworCQljaW4gPSA2OworCX0KKwllbHNlIGlmICggbS0+bW91dC5idWZbMl0gPT0gMHhmNyApIHsKKwkJY2luID0gNzsKKwl9CisJZWxzZSB7CisJCWlmICggbS0+bW91dC5pc0luRXhjbHVzaXZlID09IDEgKSB7CisJCQljaW4gPSA0OworCQl9IGVsc2UgaWYgKCBtLT5tb3V0LmJ1ZlswXSA8IDB4ODAgKSB7CisJCQkvKiogT25lIGJ5dGUgdGhhdCB3ZSBrbm93IG5vdGhpbmcgYWJvdXQuICoqLworCQkJY2luID0gMHhGOyAKKwkJfSBlbHNlIGlmICggbS0+bW91dC5idWZbMF0gPCAweGYwICkgeworCQkJLyoqIE1JREkgVm9pY2UgbWVzc2FnZXMgMHg4WCB0byAweEVYIG1hcCB0byBjaW4gMHg4IHRvIDB4RS4gKiovCisJCQljaW4gPSAobS0+bW91dC5idWZbMF0+PjQpJjB4MGY7IAorCQl9CisJCWVsc2UgeworCQkJLyoqIFNwZWNpYWwgbG9va3VwIHRhYmxlIGV4aXN0cyBmb3IgcmVhbC10aW1lIGV2ZW50cy4gKiovCisJCQljaW4gPSBjaW5fZjBmZlttLT5tb3V0LmJ1ZlswXS0weGYwXTsKKwkJfQorCX0KKworCXJldHVybiBjaW47Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKKworLyoqIE1vdmUgZGF0YSB0byBVU0IgZW5kcG9pbnQgYnVmZmVyLgorICoKKyAqKi8KK3N0YXRpYyBpbnQgcHV0X29uZV9taWRpX2V2ZW50KHN0cnVjdCB1c2JfbWlkaWRldiAqbSkKK3sKKwlpbnQgY2luOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICplcCA9IG0tPm1vdXQuZXA7CisJaW50IHJldD0wOworCisJY2luID0gZ2V0X0NJTiggbSApOworCWlmICggY2luID4gMHgwZiB8fCBjaW4gPCAwICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSggJmVwLT5sb2NrLCBmbGFncyApOworCWVwLT5idWZbZXAtPmJ1ZldyUHRyKytdID0gKG0tPm1vdXQuY2FibGVJZDw8NCkgfCBjaW47CisJZXAtPmJ1ZltlcC0+YnVmV3JQdHIrK10gPSBtLT5tb3V0LmJ1ZlswXTsKKwllcC0+YnVmW2VwLT5idWZXclB0cisrXSA9IG0tPm1vdXQuYnVmWzFdOworCWVwLT5idWZbZXAtPmJ1ZldyUHRyKytdID0gbS0+bW91dC5idWZbMl07CisJaWYgKCBlcC0+YnVmV3JQdHIgPj0gZXAtPmJ1ZlNpemUgKSB7CisJCXJldCA9IGZsdXNoX21pZGlfYnVmZmVyKCBlcCApOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmZXAtPmxvY2ssIGZsYWdzKTsKKworCW0tPm1vdXQuYnVmWzBdID0gbS0+bW91dC5idWZbMV0gPSBtLT5tb3V0LmJ1ZlsyXSA9IDA7CisJbS0+bW91dC5idWZQdHIgPSAwOworCisJcmV0dXJuIHJldDsKK30KKworLyoqIFdyaXRlIHRoZSBNSURJIG1lc3NhZ2UgdiBvbiB0aGUgbWlkaSBkZXZpY2UuCisgKiAgQ2FsbGVkIGJ5IHVzYl9taWRpX3dyaXRlKCk7CisgKiAgUmVzcG9uc2libGUgZm9yIHBhY2thZ2luZyBhIE1JREkgZGF0YSBzdHJlYW0gaW50byBVU0ItTUlESSBwYWNrZXRzLgorICoqLworCitzdGF0aWMgaW50IG1pZGlfd3JpdGUoIHN0cnVjdCB1c2JfbWlkaWRldiAqbSwgaW50IHYgKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICplcCA9IG0tPm1vdXQuZXA7CisJaW50IHJldD0wOworCXVuc2lnbmVkIGNoYXIgYyA9ICh1bnNpZ25lZCBjaGFyKXY7CisJdW5zaWduZWQgY2hhciBzeXNydF9idWZbNF07CisKKwlpZiAoIG0tPnNpbmdsZWJ5dGUgIT0gMCApIHsKKwkJLyoqIFNpbXBsZSBjb2RlIHRvIGhhbmRsZSB0aGUgc2luZ2xlLWJ5dGUgVVNCLU1JREkgcHJvdG9jb2wuICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCAmZXAtPmxvY2ssIGZsYWdzICk7CisJCWlmICggZXAtPmJ1ZldyUHRyKzQgPiBlcC0+YnVmU2l6ZSApIHsKKwkJCXJldCA9IGZsdXNoX21pZGlfYnVmZmVyKCBlcCApOworCQkJaWYgKCAhcmV0ICkgeworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZlcC0+bG9jaywgZmxhZ3MgKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CisJCWVwLT5idWZbZXAtPmJ1ZldyUHRyKytdID0gKG0tPm1vdXQuY2FibGVJZDw8NCkgfCAgMHgwZjsgLyogc2luZ2xlIGJ5dGUgKi8KKwkJZXAtPmJ1ZltlcC0+YnVmV3JQdHIrK10gPSBjOworCQllcC0+YnVmW2VwLT5idWZXclB0cisrXSA9IDA7CisJCWVwLT5idWZbZXAtPmJ1ZldyUHRyKytdID0gMDsKKwkJaWYgKCBlcC0+YnVmV3JQdHIgPj0gZXAtPmJ1ZlNpemUgKSB7CisJCQlyZXQgPSBmbHVzaF9taWRpX2J1ZmZlciggZXAgKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmZXAtPmxvY2ssIGZsYWdzICk7CisKKwkJcmV0dXJuIHJldDsKKwl9CisJLyoqIE5vcm1hbCBVU0ItTUlESSBwcm90b2NvbCBiZWdpbnMgaGVyZS4gKi8KKworCWlmICggYyA+IDB4ZjcgKSB7CS8qIHN5c3RlbTogUmVhbHRpbWUgbWVzc2FnZXMgKi8KKwkJLyoqIFJlYWx0aW1lIG1lc3NhZ2VzIGFyZSB3cml0dGVuIElNTUVESUFURUxZLiAqLworCQlzeXNydF9idWZbMF0gPSAobS0+bW91dC5jYWJsZUlkPDw0KSB8IDB4MGY7CisJCXN5c3J0X2J1ZlsxXSA9IGM7CisJCXN5c3J0X2J1ZlsyXSA9IDA7CisJCXN5c3J0X2J1ZlszXSA9IDA7CisJCXNwaW5fbG9ja19pcnFzYXZlKCAmZXAtPmxvY2ssIGZsYWdzICk7CisJCXJldCA9IHVzYl93cml0ZSggZXAsIHN5c3J0X2J1ZiwgNCApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmZXAtPmxvY2ssIGZsYWdzICk7CisJCS8qIG0tPm1vdXQubGFzdEV2ZW50ID0gMDsgKi8KKworCQlyZXR1cm4gcmV0OworCX0KKworCWlmICggYyA+PSAweDgwICkgeworCQlpZiAoIGMgPCAweGYwICkgeworCQkJbS0+bW91dC5sYXN0RXZlbnQgPSBjOworCQkJbS0+bW91dC5pc0luRXhjbHVzaXZlID0gMDsKKwkJCW0tPm1vdXQuYnVmUmVtYWlucyA9IGdldF9yZW1haW5zKGMpOworCQl9IGVsc2UgaWYgKCBjID09IDB4ZjAgKSB7CisJCQkvKiBtLT5tb3V0Lmxhc3RFdmVudCA9IDA7ICovCisJCQltLT5tb3V0LmlzSW5FeGNsdXNpdmUgPSAxOworCQkJbS0+bW91dC5idWZSZW1haW5zID0gZ2V0X3JlbWFpbnMoYyk7CisJCX0gZWxzZSBpZiAoIGMgPT0gMHhmNyAmJiBtLT5tb3V0LmlzSW5FeGNsdXNpdmUgPT0gMSApIHsKKwkJCS8qIG0tPm1vdXQubGFzdEV2ZW50ID0gMDsgKi8KKwkJCW0tPm1vdXQuaXNJbkV4Y2x1c2l2ZSA9IDA7CisJCQltLT5tb3V0LmJ1ZlJlbWFpbnMgPSAxOworCQl9IGVsc2UgaWYgKCBjID4gMHhmMCApIHsKKwkJCS8qIG0tPm1vdXQubGFzdEV2ZW50ID0gMDsgKi8KKwkJCW0tPm1vdXQuaXNJbkV4Y2x1c2l2ZSA9IDA7CisJCQltLT5tb3V0LmJ1ZlJlbWFpbnMgPSBnZXRfcmVtYWlucyhjKTsKKwkJfQorICAgIAorCX0gZWxzZSBpZiAoIG0tPm1vdXQuYnVmUmVtYWlucyA9PSAwICYmIG0tPm1vdXQuaXNJbkV4Y2x1c2l2ZSA9PSAwICkgeworCQlpZiAoIG0tPm1vdXQubGFzdEV2ZW50ID09IDAgKSB7CisJCQlyZXR1cm4gMDsgLyogZGlzY2FyZCwgd2FpdGluZyBmb3IgdGhlIGZpcnN0IGV2ZW50ICovCisJCX0KKwkJLyoqIHRyYWNrIHN0YXR1cyAqKi8KKwkJbS0+bW91dC5idWZbMF0gPSBtLT5tb3V0Lmxhc3RFdmVudDsKKwkJbS0+bW91dC5idWZQdHIgPSAxOworCQltLT5tb3V0LmJ1ZlJlbWFpbnMgPSBnZXRfcmVtYWlucyhtLT5tb3V0Lmxhc3RFdmVudCktMTsKKwl9CisgIAorCW0tPm1vdXQuYnVmW20tPm1vdXQuYnVmUHRyKytdID0gYzsKKwltLT5tb3V0LmJ1ZlJlbWFpbnMtLTsKKwlpZiAoIG0tPm1vdXQuYnVmUmVtYWlucyA9PSAwIHx8IG0tPm1vdXQuYnVmUHRyID49IDMpIHsKKwkJcmV0ID0gcHV0X29uZV9taWRpX2V2ZW50KG0pOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiogQmFzaWMgb3BlcmF0aW9uIG9uIC9kZXYvbWlkaVhYIGFzIHJlZ2lzdGVyZWQgdGhyb3VnaCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zLgorICoKKyAqICBCYXNpYyBjb250cmFjdDogVXNlZCB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgcmVhZC93cml0ZSBwb3NpdGlvbiBpbiBhIGZpbGUuCisgKiAgT24gc3VjY2VzcywgdGhlIG5vbi1uZWdhdGl2ZSBwb3NpdGlvbiBpcyByZXBvcnRlZC4KKyAqICBPbiBmYWlsdXJlLCB0aGUgbmVnYXRpdmUgb2YgYW4gZXJyb3IgY29kZSBpcyByZXBvcnRlZC4KKyAqCisgKiAgQmVjYXVzZSBhIE1JRElTdHJlYW0gaXMgbm90IGEgZmlsZSwgYWxsIHNlZWsgb3BlcmF0aW9ucyBhcmUgZG9vbWVkIHRvIGZhaWwuCisgKgorICoqLworc3RhdGljIGxvZmZfdCB1c2JfbWlkaV9sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pCit7CisJLyoqIFRlbGwgdXNlciB5b3UgY2Fubm90IHNlZWsgb24gYSBQSVBFLWxpa2UgZGV2aWNlLiAqKi8KKwlyZXR1cm4gLUVTUElQRTsKK30KKworCisvKiogQmFzaWMgb3BlcmF0aW9uIG9uIC9kZXYvbWlkaVhYIGFzIHJlZ2lzdGVyZWQgdGhyb3VnaCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zLgorICoKKyAqIEJhc2ljIGNvbnRyYWN0OiBCbG9jayB1bnRpbCBjb3VudCBieXRlcyBoYXZlIGJlZW4gcmVhZCBvciBhbiBlcnJvciBvY2N1cnMuCisgKgorICoqLworCitzdGF0aWMgc3NpemVfdCB1c2JfbWlkaV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdXNiX21pZGlkZXYgKm0gPSAoc3RydWN0IHVzYl9taWRpZGV2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtaWRpX2luX2VuZHBvaW50ICplcCA9IG0tPm1pbi5lcDsKKwlzc2l6ZV90IHJldDsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworCWlmICggIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgYnVmZmVyLCBjb3VudCkgKSB7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoIGNvdW50ID09IDAgKSB7CisJCXJldHVybiAwOworCX0KKworCWFkZF93YWl0X3F1ZXVlKCAmZXAtPndhaXQsICZ3YWl0ICk7CisJcmV0ID0gMDsKKwl3aGlsZSggY291bnQgPiAwICkgeworCQlpbnQgY250OworCQlpbnQgZCA9IChpbnQpY291bnQ7CisKKwkJY250ID0gbS0+bWluLmJ1ZlJlbWFpbnM7CisJCWlmICggY250ID4gZCApIHsKKwkJCWNudCA9IGQ7CisJCX0KKworCQlpZiAoIGNudCA8PSAwICkgeworCQkJaWYgKCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyApIHsKKwkJCQlpZiAoIXJldCkgCisJCQkJCXJldCA9IC1FQUdBSU47CisJCQkJYnJlYWs7CisJCQl9CisJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQlzY2hlZHVsZSgpOworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJaWYoIXJldCkKKwkJCQkJcmV0PS1FUkVTVEFSVFNZUzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJeworCQkJaW50IGk7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOyAvKiB1c2VkIHRvIHN5bmNocm9uaXplIGFjY2VzcyB0byB0aGUgZW5kcG9pbnQgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCAmZXAtPmxvY2ssIGZsYWdzICk7CisJCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKKwkJCQlpZiAoIGNvcHlfdG9fdXNlciggYnVmZmVyK2ksIG0tPm1pbi5idWYrbS0+bWluLmJ1ZlJkUHRyLCAxICkgKSB7CisJCQkJCWlmICggIXJldCApCisJCQkJCQlyZXQgPSAtRUZBVUxUOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJbS0+bWluLmJ1ZlJkUHRyID0gKG0tPm1pbi5idWZSZFB0cisxKSVNSURJX0lOX0JVRlNJWjsKKwkJCQltLT5taW4uYnVmUmVtYWlucyAtPSAxOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJmVwLT5sb2NrLCBmbGFncyApOworCQl9CisKKwkJY291bnQtPWNudDsKKwkJYnVmZmVyKz1jbnQ7CisJCXJldCs9Y250OworCisJCWJyZWFrOworCX0KKworCXJlbW92ZV93YWl0X3F1ZXVlKCAmZXAtPndhaXQsICZ3YWl0ICk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKworCXJldHVybiByZXQ7Cit9CisKKworLyoqIEJhc2ljIG9wZXJhdGlvbiBvbiAvZGV2L21pZGlYWCBhcyByZWdpc3RlcmVkIHRocm91Z2ggc3RydWN0IGZpbGVfb3BlcmF0aW9ucy4KKyAqCisgKiAgQmFzaWMgQ29udHJhY3Q6IFRha2UgTUlESSBkYXRhIGJ5dGUtYnktYnl0ZSBhbmQgcGFzcyBpdCB0bworICogIHdyaXRlTWlkaSgpIHdoaWNoIHBhY2thZ2VzIE1JREkgZGF0YSBpbnRvIFVTQi1NSURJIHN0cmVhbS4KKyAqICBUaGVuIGZsdXNoTWlkaURhdGEoKSBpcyBjYWxsZWQgdG8gZW5zdXJlIGFsbCBieXRlcyBoYXZlIGJlZW4gd3JpdHRlbgorICogIGluIGEgdGltZWx5IGZhc2hpb24uCisgKgorICoqLworCitzdGF0aWMgc3NpemVfdCB1c2JfbWlkaV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHVzYl9taWRpZGV2ICptID0gKHN0cnVjdCB1c2JfbWlkaWRldiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzc2l6ZV90IHJldDsKKwl1bnNpZ25lZCBsb25nIGludCBmbGFnczsKKworCWlmICggIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgYnVmZmVyLCBjb3VudCkgKSB7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoIGNvdW50ID09IDAgKSB7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IDA7CisJd2hpbGUoIGNvdW50ID4gMCApIHsKKwkJdW5zaWduZWQgY2hhciBjOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigodW5zaWduZWQgY2hhciAqKSZjLCBidWZmZXIsIDEpKSB7CisJCQlpZiAoIHJldCA9PSAwICkKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJaWYoIG1pZGlfd3JpdGUobSwgKGludCljKSApIHsKKwkJCWlmICggcmV0ID09IDAgKQorCQkJCXJldCA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCQljb3VudC0tOworCQlidWZmZXIrKzsKKwkJcmV0Kys7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoICZtLT5tb3V0LmVwLT5sb2NrLCBmbGFncyApOworCWlmICggZmx1c2hfbWlkaV9idWZmZXIobS0+bW91dC5lcCkgPCAwICkgeworCQlyZXQgPSAtRUZBVUxUOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmbS0+bW91dC5lcC0+bG9jaywgZmxhZ3MgKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKiBCYXNpYyBvcGVyYXRpb24gb24gL2Rldi9taWRpWFggYXMgcmVnaXN0ZXJlZCB0aHJvdWdoIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMuCisgKgorICogQmFzaWMgY29udHJhY3Q6ICBXYWl0IChzcGluKSB1bnRpbCByZWFkeSB0byByZWFkIG9yIHdyaXRlIG9uIHRoZSBmaWxlLgorICoKKyAqKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXNiX21pZGlfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCB1c2JfbWlkaWRldiAqbSA9IChzdHJ1Y3QgdXNiX21pZGlkZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQgKmllcCA9IG0tPm1pbi5lcDsKKwlzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQgKm9lcCA9IG0tPm1vdXQuZXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CisgIAorCWlmICggZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCApIHsKKwkJcG9sbF93YWl0KCBmaWxlLCAmaWVwLT53YWl0LCB3YWl0ICk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCAmaWVwLT5sb2NrLCBmbGFncyApOworCQlpZiAoIG0tPm1pbi5idWZSZW1haW5zID4gMCApCisJCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZpZXAtPmxvY2ssIGZsYWdzICk7CisJfQorCisJaWYgKCBmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSApIHsKKwkJcG9sbF93YWl0KCBmaWxlLCAmb2VwLT53YWl0LCB3YWl0ICk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCAmb2VwLT5sb2NrLCBmbGFncyApOworCQlpZiAoIG9lcC0+YnVmV3JQdHIgPCBvZXAtPmJ1ZlNpemUgKQorCQkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJm9lcC0+bG9jaywgZmxhZ3MgKTsKKwl9CisKKwlyZXR1cm4gbWFzazsKK30KKworCisvKiogQmFzaWMgb3BlcmF0aW9uIG9uIC9kZXYvbWlkaVhYIGFzIHJlZ2lzdGVyZWQgdGhyb3VnaCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zLgorICoKKyAqIEJhc2ljIGNvbnRyYWN0OiBUaGlzIGlzIGFsd2F5cyB0aGUgZmlyc3Qgb3BlcmF0aW9uIHBlcmZvcm1lZCBvbiB0aGUKKyAqIGRldmljZSBub2RlLiBJZiBubyBtZXRob2QgaXMgZGVmaW5lZCwgdGhlIG9wZW4gc3VjY2VlZHMgd2l0aG91dCBhbnkKKyAqIG5vdGlmaWNhdGlvbiBnaXZlbiB0byB0aGUgbW9kdWxlLgorICoKKyAqKi8KKworc3RhdGljIGludCB1c2JfbWlkaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJc3RydWN0IHVzYl9taWRpX3N0YXRlICpzOworCXN0cnVjdCB1c2JfbWlkaWRldiAgICAqbTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzdWNjZWVkID0gMDsKKworI2lmIDAKKwlwcmludGsoS0VSTl9JTkZPICJ1c2ItbWlkaTogT3BlbiBtaW5vcj0gJWQuXG4iLCBtaW5vcik7CisjZW5kaWYKKworCWZvcig7OykgeworCQlkb3duKCZvcGVuX3NlbSk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocywgJm1pZGlkZXZzLCBtaWRpZGV2KSB7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sICZzLT5taWRpRGV2TGlzdCwgbGlzdCkgeworCQkJCWlmICggISgobS0+ZGV2X21pZGkgXiBtaW5vcikgJiB+MHhmKSApCisJCQkJCWdvdG8gZGV2aWNlX2ZvdW5kOworCQkJfQorCQl9CisJCXVwKCZvcGVuX3NlbSk7CisJCXJldHVybiAtRU5PREVWOworCisJZGV2aWNlX2ZvdW5kOgorCQlpZiAoICFzLT51c2JkZXYgKSB7CisJCQl1cCgmb3Blbl9zZW0pOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJaWYgKCAhKG0tPm9wZW5fbW9kZSAmIGZpbGUtPmZfbW9kZSkgKSB7CisJCQlicmVhazsKKwkJfQorCQlpZiAoIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLICkgeworCQkJdXAoJm9wZW5fc2VtKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlhZGRfd2FpdF9xdWV1ZSggJm9wZW5fd2FpdCwgJndhaXQgKTsKKwkJdXAoJm9wZW5fc2VtKTsKKwkJc2NoZWR1bGUoKTsKKwkJcmVtb3ZlX3dhaXRfcXVldWUoICZvcGVuX3dhaXQsICZ3YWl0ICk7CisJCWlmICggc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgKSB7CisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQl9CisJfQorCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gbTsKKwlzcGluX2xvY2tfaXJxc2F2ZSggJnMtPmxvY2ssIGZsYWdzICk7CisKKwlpZiAoICEobS0+b3Blbl9tb2RlICYgKEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSkpICkgeworCQkvL0ZJWE1FOiBpbnRlbnRlZCBzZW1hbnRpY3MgdW5jbGVhciBoZXJlCisJCW0tPm1pbi5idWZSZFB0ciAgICAgICA9IDA7CisJCW0tPm1pbi5idWZXclB0ciAgICAgICA9IDA7CisJCW0tPm1pbi5idWZSZW1haW5zICAgICA9IDA7CisJCXNwaW5fbG9ja19pbml0KCZtLT5taW4uZXAtPmxvY2spOworCisJCW0tPm1vdXQuYnVmUHRyICAgICAgICA9IDA7CisJCW0tPm1vdXQuYnVmUmVtYWlucyAgICA9IDA7CisJCW0tPm1vdXQuaXNJbkV4Y2x1c2l2ZSA9IDA7CisJCW0tPm1vdXQubGFzdEV2ZW50ICAgICA9IDA7CisJCXNwaW5fbG9ja19pbml0KCZtLT5tb3V0LmVwLT5sb2NrKTsKKwl9CisKKwlpZiAoIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSAmJiBtLT5taW4uZXAgIT0gTlVMTCApIHsKKwkJdW5zaWduZWQgbG9uZyBpbnQgZmxhZ3NlcDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoICZtLT5taW4uZXAtPmxvY2ssIGZsYWdzZXAgKTsKKwkJbS0+bWluLmVwLT5jYWJsZXNbbS0+bWluLmNhYmxlSWRdID0gbTsKKwkJbS0+bWluLmVwLT5yZWFkZXJzICs9IDE7CisJCW0tPm1pbi5idWZSZFB0ciAgICAgICA9IDA7CisJCW0tPm1pbi5idWZXclB0ciAgICAgICA9IDA7CisJCW0tPm1pbi5idWZSZW1haW5zICAgICA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZtLT5taW4uZXAtPmxvY2ssIGZsYWdzZXAgKTsKKworCQlpZiAoICEobS0+bWluLmVwLT51cmJTdWJtaXR0ZWQpKSB7CisKKwkJCS8qIHVyYi0+ZGV2IG11c3QgYmUgcmVpbml0aWFsaXplZCBvbiAyLjQueCBrZXJuZWxzICovCisJCQltLT5taW4uZXAtPnVyYi0+ZGV2ID0gbS0+bWluLmVwLT51c2JkZXY7CisKKwkJCWlmICggdXNiX3N1Ym1pdF91cmIobS0+bWluLmVwLT51cmIsIEdGUF9BVE9NSUMpICkgeworCQkJCXByaW50ayhLRVJOX0VSUiAidXNibWlkaTogQ2Fubm90IHN1Ym1pdCB1cmIgZm9yIE1JREktSU5cbiIpOworCQkJfQorCQkJbS0+bWluLmVwLT51cmJTdWJtaXR0ZWQgPSAxOworCQl9CisJCW0tPm9wZW5fbW9kZSB8PSBGTU9ERV9SRUFEOworCQlzdWNjZWVkID0gMTsKKwl9CisKKwlpZiAoIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgJiYgbS0+bW91dC5lcCAhPSBOVUxMICkgeworCQltLT5tb3V0LmJ1ZlB0ciAgICAgICAgPSAwOworCQltLT5tb3V0LmJ1ZlJlbWFpbnMgICAgPSAwOworCQltLT5tb3V0LmlzSW5FeGNsdXNpdmUgPSAwOworCQltLT5tb3V0Lmxhc3RFdmVudCAgICAgPSAwOworCQltLT5vcGVuX21vZGUgfD0gRk1PREVfV1JJVEU7CisJCXN1Y2NlZWQgPSAxOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZzLT5sb2NrLCBmbGFncyApOworCisJcy0+Y291bnQrKzsKKwl1cCgmb3Blbl9zZW0pOworCisJLyoqIENoYW5nZWQgdG8gcHJldmVudCBleHRyYSBpbmNyZW1lbnRzIHRvIFVTRV9DT1VOVC4gKiovCisJaWYgKCFzdWNjZWVkKSB7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisjaWYgMAorCXByaW50ayhLRVJOX0lORk8gInVzYi1taWRpOiBPcGVuIFN1Y2NlZWRlZC4gbWlub3I9ICVkLlxuIiwgbWlub3IpOworI2VuZGlmCisKKwlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7IC8qKiBTdWNjZXNzLiAqKi8KK30KKworCisvKiogQmFzaWMgb3BlcmF0aW9uIG9uIC9kZXYvbWlkaVhYIGFzIHJlZ2lzdGVyZWQgdGhyb3VnaCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zLgorICoKKyAqICBCYXNpYyBjb250cmFjdDogQ2xvc2UgYW4gb3BlbmVkIGZpbGUgYW5kIGRlYWxsb2NhdGUgYW55dGhpbmcgd2UgYWxsb2NhdGVkLgorICogIExpa2Ugb3BlbigpLCB0aGlzIGNhbiBiZSBtaXNzaW5nLiBJZiBvcGVuIHNldCBmaWxlLT5wcml2YXRlX2RhdGEsCisgKiAgcmVsZWFzZSgpIG11c3QgY2xlYXIgaXQuCisgKgorICoqLworCitzdGF0aWMgaW50IHVzYl9taWRpX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzYl9taWRpZGV2ICptID0gKHN0cnVjdCB1c2JfbWlkaWRldiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKnMgPSAoc3RydWN0IHVzYl9taWRpX3N0YXRlICopbS0+bWlkaTsKKworI2lmIDAKKwlwcmludGsoS0VSTl9JTkZPICJ1c2ItbWlkaTogQ2xvc2UuXG4iKTsKKyNlbmRpZgorCisJZG93bigmb3Blbl9zZW0pOworCisJaWYgKCBtLT5vcGVuX21vZGUgJiBGTU9ERV9XUklURSApIHsKKwkJbS0+b3Blbl9tb2RlICY9IH5GTU9ERV9XUklURTsKKwkJdXNiX2tpbGxfdXJiKCBtLT5tb3V0LmVwLT51cmIgKTsKKwl9CisKKwlpZiAoIG0tPm9wZW5fbW9kZSAmIEZNT0RFX1JFQUQgKSB7CisJICAgICAgICB1bnNpZ25lZCBsb25nIGludCBmbGFnc2VwOworCSAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoICZtLT5taW4uZXAtPmxvY2ssIGZsYWdzZXAgKTsKKyAgICAgICAgICAgICAgICBtLT5taW4uZXAtPmNhYmxlc1ttLT5taW4uY2FibGVJZF0gPSBOVUxMOyAvLyBkaXNjYXJkIGNhYmxlCisgICAgICAgICAgICAgICAgbS0+bWluLmVwLT5yZWFkZXJzIC09IDE7CisJCW0tPm9wZW5fbW9kZSAmPSB+Rk1PREVfUkVBRDsKKwkJaWYgKCBtLT5taW4uZXAtPnJlYWRlcnMgPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgbS0+bWluLmVwLT51cmJTdWJtaXR0ZWQgKSB7CisJCQltLT5taW4uZXAtPnVyYlN1Ym1pdHRlZCA9IDA7CisJCQl1c2Jfa2lsbF91cmIobS0+bWluLmVwLT51cmIpOworCQl9CisJICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmbS0+bWluLmVwLT5sb2NrLCBmbGFnc2VwICk7CisJfQorCisJcy0+Y291bnQtLTsKKworCXVwKCZvcGVuX3NlbSk7CisJd2FrZV91cCgmb3Blbl93YWl0KTsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYl9taWRpX2ZvcHMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLmxsc2VlayA9CXVzYl9taWRpX2xsc2VlaywKKwkucmVhZCA9CQl1c2JfbWlkaV9yZWFkLAorCS53cml0ZSA9CXVzYl9taWRpX3dyaXRlLAorCS5wb2xsID0JCXVzYl9taWRpX3BvbGwsCisJLm9wZW4gPQkJdXNiX21pZGlfb3BlbiwKKwkucmVsZWFzZSA9CXVzYl9taWRpX3JlbGVhc2UsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKiBSZXR1cm5zIGZpbGxlZCBtaWRpX2luX2VuZHBvaW50IHN0cnVjdHVyZSBvciBudWxsIG9uIGZhaWx1cmUuCisgKgorICogUGFyYW1ldGVyczoKKyAqCWQgICAgICAgIC0gYSB1c2JfZGV2aWNlCisgKgllbmRQb2ludCAtIEFuIHVzYiBlbmRwb2ludCBpbiB0aGUgcmFuZ2UgMCB0byAxNS4KKyAqIENhbGxlZCBieSBhbGxvY1VzYk1pZGlEZXYoKTsKKyAqCisgKiovCisKK3N0YXRpYyBzdHJ1Y3QgbWlkaV9pbl9lbmRwb2ludCAqYWxsb2NfbWlkaV9pbl9lbmRwb2ludCggc3RydWN0IHVzYl9kZXZpY2UgKmQsIGludCBlbmRQb2ludCApCit7CisJc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQgKmVwOworCWludCBidWZTaXplOworCWludCBwaXBlOworCisJZW5kUG9pbnQgJj0gMHgwZjsgLyogU2lsZW50bHkgZm9yY2UgZW5kUG9pbnQgdG8gbGllIGluIHJhbmdlIDAgdG8gMTUuICovCisKKwlwaXBlID0gIHVzYl9yY3ZidWxrcGlwZSggZCwgZW5kUG9pbnQgKTsKKwlidWZTaXplID0gdXNiX21heHBhY2tldCggZCwgcGlwZSwgMCApOworCS8qIHVzYl9waXBlaW4oKSA9ICEgdXNiX3BpcGVvdXQoKSA9IHRydWUgZm9yIGFuIGluIEVuZHBvaW50ICovCisKKwllcCA9IChzdHJ1Y3QgbWlkaV9pbl9lbmRwb2ludCAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWRpX2luX2VuZHBvaW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCAhZXAgKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNibWlkaTogbm8gbWVtb3J5IGZvciBtaWRpIGluLWVuZHBvaW50XG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCW1lbXNldCggZXAsIDAsIHNpemVvZihzdHJ1Y3QgbWlkaV9pbl9lbmRwb2ludCkgKTsKKy8vICAgICAgdGhpcyBzZXRzIGNhYmxlc1tdIGFuZCByZWFkZXJzIHRvIDAsIHRvby4KKy8vICAgICAgZm9yIChpPTA7IGk8MTY7IGkrKykgZXAtPmNhYmxlc1tpXSA9IDA7IC8vIGRpc2NhcmQgY2FibGUKKy8vICAgICAgZXAtPnJlYWRlcnMgPSAwOworCisJZXAtPmVuZHBvaW50ID0gZW5kUG9pbnQ7CisKKwllcC0+cmVjdkJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopa21hbGxvYyhzaXplb2YodW5zaWduZWQgY2hhcikqKGJ1ZlNpemUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoICFlcC0+cmVjdkJ1ZiApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JtaWRpOiBubyBtZW1vcnkgZm9yIG1pZGkgaW4tZW5kcG9pbnQgYnVmZmVyXG4iKTsKKwkJa2ZyZWUoZXApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwllcC0+dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsgLyogbm8gSVNPICovCisJaWYgKCAhZXAtPnVyYiApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JtaWRpOiBubyBtZW1vcnkgZm9yIG1pZGkgaW4tZW5kcG9pbnQgdXJiXG4iKTsKKwkJa2ZyZWUoZXAtPnJlY3ZCdWYpOworCQlrZnJlZShlcCk7CisJCXJldHVybiBOVUxMOworCX0KKwl1c2JfZmlsbF9idWxrX3VyYiggZXAtPnVyYiwgZCwgCisJCSAgICAgICB1c2JfcmN2YnVsa3BpcGUoZCwgZW5kUG9pbnQpLAorCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKillcC0+cmVjdkJ1ZiwgYnVmU2l6ZSwKKwkJICAgICAgIHVzYl9idWxrX3JlYWQsIGVwICk7CisKKwkvKiBlcC0+YnVmUmRQdHIgICAgID0gMDsgKi8KKwkvKiBlcC0+YnVmV3JQdHIgICAgID0gMDsgKi8KKwkvKiBlcC0+YnVmUmVtYWlucyAgID0gMDsgKi8KKwkvKiBlcC0+dXJiU3VibWl0dGVkID0gMDsgKi8KKwllcC0+cmVjdkJ1ZlNpemUgID0gYnVmU2l6ZTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmVwLT53YWl0KTsKKworCXJldHVybiBlcDsKK30KKworc3RhdGljIGludCByZW1vdmVfbWlkaV9pbl9lbmRwb2ludCggc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQgKm1pbiApCit7CisJdXNiX2tpbGxfdXJiKCBtaW4tPnVyYiApOworCXVzYl9mcmVlX3VyYiggbWluLT51cmIgKTsKKwlrZnJlZSggbWluLT5yZWN2QnVmICk7CisJa2ZyZWUoIG1pbiApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKiBSZXR1cm5zIGZpbGxlZCBtaWRpX291dF9lbmRwb2ludCBzdHJ1Y3R1cmUgb3IgbnVsbCBvbiBmYWlsdXJlLgorICoKKyAqIFBhcmFtZXRlcnM6CisgKglkICAgICAgICAtIGEgdXNiX2RldmljZQorICoJZW5kUG9pbnQgLSBBbiB1c2IgZW5kcG9pbnQgaW4gdGhlIHJhbmdlIDAgdG8gMTUuCisgKiBDYWxsZWQgYnkgYWxsb2NVc2JNaWRpRGV2KCk7CisgKgorICoqLworc3RhdGljIHN0cnVjdCBtaWRpX291dF9lbmRwb2ludCAqYWxsb2NfbWlkaV9vdXRfZW5kcG9pbnQoIHN0cnVjdCB1c2JfZGV2aWNlICpkLCBpbnQgZW5kUG9pbnQgKQoreworCXN0cnVjdCBtaWRpX291dF9lbmRwb2ludCAqZXAgPSBOVUxMOworCWludCBwaXBlOworCWludCBidWZTaXplOworCisJZW5kUG9pbnQgJj0gMHgwZjsKKwlwaXBlID0gIHVzYl9zbmRidWxrcGlwZSggZCwgZW5kUG9pbnQgKTsKKwlidWZTaXplID0gdXNiX21heHBhY2tldCggZCwgcGlwZSwgMSApOworCisJZXAgPSAoc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50ICopa21hbGxvYyhzaXplb2Yoc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCAhZXAgKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNibWlkaTogbm8gbWVtb3J5IGZvciBtaWRpIG91dC1lbmRwb2ludFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKwltZW1zZXQoIGVwLCAwLCBzaXplb2Yoc3RydWN0IG1pZGlfb3V0X2VuZHBvaW50KSApOworCisJZXAtPmVuZHBvaW50ID0gZW5kUG9pbnQ7CisJZXAtPmJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopa21hbGxvYyhzaXplb2YodW5zaWduZWQgY2hhcikqYnVmU2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCAhZXAtPmJ1ZiApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JtaWRpOiBubyBtZW1vcnkgZm9yIG1pZGkgb3V0LWVuZHBvaW50IGJ1ZmZlclxuIik7CisJCWtmcmVlKGVwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZXAtPnVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7IC8qIG5vIElTTyAqLworCWlmICggIWVwLT51cmIgKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXNibWlkaTogbm8gbWVtb3J5IGZvciBtaWRpIG91dC1lbmRwb2ludCB1cmJcbiIpOworCQlrZnJlZShlcC0+YnVmKTsKKwkJa2ZyZWUoZXApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwllcC0+YnVmU2l6ZSAgICAgICA9IGJ1ZlNpemU7CisJLyogZXAtPmJ1ZldyUHRyICAgICAgPSAwOyAqLworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmZXAtPndhaXQpOworCisJcmV0dXJuIGVwOworfQorCisKK3N0YXRpYyBpbnQgcmVtb3ZlX21pZGlfb3V0X2VuZHBvaW50KCBzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQgKm1vdXQgKQoreworCXVzYl9raWxsX3VyYiggbW91dC0+dXJiICk7CisJdXNiX2ZyZWVfdXJiKCBtb3V0LT51cmIgKTsKKwlrZnJlZSggbW91dC0+YnVmICk7CisJa2ZyZWUoIG1vdXQgKTsKKworCXJldHVybiAwOworfQorCisKKy8qKiBSZXR1cm5zIGEgZmlsbGVkIHVzYl9taWRpZGV2IHN0cnVjdHVyZSwgcmVnaXN0ZXJlZCBhcyBhIExpbnV4IE1JREkgZGV2aWNlLgorICoKKyAqIFJldHVybnMgbnVsbCBpZiBtZW1vcnkgaXMgbm90IGF2YWlsYWJsZSBvciB0aGUgZGV2aWNlIGNhbm5vdCBiZSByZWdpc3RlcmVkLgorICogQ2FsbGVkIGJ5IGFsbG9jVXNiTWlkaURldigpOworICoKKyAqKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX21pZGlkZXYgKmFsbG9jTWlkaURldigKKwlzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKnMsCisJc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQgKm1pbiwKKwlzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQgKm1vdXQsCisJaW50IGluQ2FibGVJZCwKKwlpbnQgb3V0Q2FibGVJZCApCit7CisJc3RydWN0IHVzYl9taWRpZGV2ICptOworCisJbSA9IChzdHJ1Y3QgdXNiX21pZGlkZXYgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX21pZGlkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW0pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JtaWRpOiBubyBtZW1vcnkgZm9yIG1pZGkgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbWVtc2V0KG0sIDAsIHNpemVvZihzdHJ1Y3QgdXNiX21pZGlkZXYpKTsKKworCWlmICgobS0+ZGV2X21pZGkgPSByZWdpc3Rlcl9zb3VuZF9taWRpKCZ1c2JfbWlkaV9mb3BzLCAtMSkpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgInVzYm1pZGk6IGNhbm5vdCByZWdpc3RlciBtaWRpIGRldmljZVxuIik7CisJCWtmcmVlKG0pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwltLT5taWRpICAgICAgICAgICAgICAgPSBzOworCS8qIG0tPm9wZW5fbW9kZSAgICAgICAgICA9IDA7ICovCisKKwlpZiAoIG1pbiApIHsKKwkJbS0+bWluLmVwICAgICAgICAgICAgID0gbWluOworCQltLT5taW4uZXAtPnVzYmRldiAgICAgPSBzLT51c2JkZXY7CisJCW0tPm1pbi5jYWJsZUlkICAgICAgICA9IGluQ2FibGVJZDsKKwl9CisJLyogbS0+bWluLmJ1ZlB0ciAgICAgICAgID0gMDsgKi8KKwkvKiBtLT5taW4uYnVmUmVtYWlucyAgICAgPSAwOyAqLworCisJaWYgKCBtb3V0ICkgeworCQltLT5tb3V0LmVwICAgICAgICAgICAgPSBtb3V0OworCQltLT5tb3V0LmVwLT51c2JkZXYgICAgPSBzLT51c2JkZXY7CisJCW0tPm1vdXQuY2FibGVJZCAgICAgICA9IG91dENhYmxlSWQ7CisJfQorCS8qIG0tPm1vdXQuYnVmUHRyICAgICAgICA9IDA7ICovCisJLyogbS0+bW91dC5idWZSZW1haW5zICAgID0gMDsgKi8KKwkvKiBtLT5tb3V0LmlzSW5FeGNsdXNpdmUgPSAwOyAqLworCS8qIG0tPm1vdXQubGFzdEV2ZW50ICAgICA9IDA7ICovCisKKwltLT5zaW5nbGVieXRlICAgICAgICAgPSBzaW5nbGVieXRlOworCisJcmV0dXJuIG07Cit9CisKKworc3RhdGljIHZvaWQgcmVsZWFzZV9taWRpX2RldmljZSggc3RydWN0IHVzYl9taWRpX3N0YXRlICpzICkKK3sKKwlzdHJ1Y3QgdXNiX21pZGlkZXYgKm07CisJc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQgKm1pbjsKKwlzdHJ1Y3QgbWlkaV9vdXRfZW5kcG9pbnQgKm1vdXQ7CisKKwlpZiAoIHMtPmNvdW50ID4gMCApIHsKKwkJdXAoJm9wZW5fc2VtKTsKKwkJcmV0dXJuOworCX0KKwl1cCggJm9wZW5fc2VtICk7CisJd2FrZV91cCggJm9wZW5fd2FpdCApOworCisJd2hpbGUoIWxpc3RfZW1wdHkoJnMtPmluRW5kcG9pbnRMaXN0KSkgeworCQltaW4gPSBsaXN0X2VudHJ5KHMtPmluRW5kcG9pbnRMaXN0Lm5leHQsIHN0cnVjdCBtaWRpX2luX2VuZHBvaW50LCBsaXN0KTsKKwkJbGlzdF9kZWwoJm1pbi0+bGlzdCk7CisJCXJlbW92ZV9taWRpX2luX2VuZHBvaW50KG1pbik7CisJfQorCisJd2hpbGUoIWxpc3RfZW1wdHkoJnMtPm91dEVuZHBvaW50TGlzdCkpIHsKKwkJbW91dCA9IGxpc3RfZW50cnkocy0+b3V0RW5kcG9pbnRMaXN0Lm5leHQsIHN0cnVjdCBtaWRpX291dF9lbmRwb2ludCwgbGlzdCk7CisJCWxpc3RfZGVsKCZtb3V0LT5saXN0KTsKKwkJcmVtb3ZlX21pZGlfb3V0X2VuZHBvaW50KG1vdXQpOworCX0KKworCXdoaWxlKCFsaXN0X2VtcHR5KCZzLT5taWRpRGV2TGlzdCkpIHsKKwkJbSA9IGxpc3RfZW50cnkocy0+bWlkaURldkxpc3QubmV4dCwgc3RydWN0IHVzYl9taWRpZGV2LCBsaXN0KTsKKwkJbGlzdF9kZWwoJm0tPmxpc3QpOworCQlrZnJlZShtKTsKKwl9CisKKwlrZnJlZShzKTsKKworCXJldHVybjsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKiBVdGlsaXR5IHJvdXRpbmUgdG8gZmluZCBhIGRlc2NyaXB0b3IgaW4gYSBkdW1wIG9mIG1hbnkgZGVzY3JpcHRvcnMuCisgKiBSZXR1cm5zIHN0YXJ0IG9mIGRlc2NyaXB0b3Igb3IgTlVMTCBpZiBub3QgZm91bmQuIAorICogZGVzY1N0YXJ0IHBvaW50ZXIgdG8gbGlzdCBvZiBpbnRlcmZhY2VzLgorICogZGVzY0xlbmd0aCBsZW5ndGggKGluIGJ5dGVzKSBvZiBkdW1wCisgKiBhZnRlciAoaWdub3JlZCBpZiBOVUxMKSB0aGlzIHJvdXRpbmUgcmV0dXJucyBvbmx5IGRlc2NyaXB0b3JzIGFmdGVyICJhZnRlciIKKyAqIGR0eXBlIChtYW5kYXRvcnkpIFRoZSBkZXNjcmlwdG9yIHR5cGUuCisgKiBpZmFjZSAoaWdub3JlZCBpZiAtMSkgcmV0dXJucyBkZXNjcmlwdG9yIGF0L2ZvbGxvd2luZyBnaXZlbiBpbnRlcmZhY2UKKyAqIGFsdFNldHRpbmcgKGlnbm9yZWQgaWYgLTEpIHJldHVybnMgZGVzY3JpcHRvciBhdC9mb2xsb3dpbmcgZ2l2ZW4gYWx0U2V0dGluZworICoKKyAqCisgKiAgQ2FsbGVkIGJ5IHBhcnNlRGVzY3JpcHRvcigpLCBmaW5kX2NzaW50ZXJmYWNlX2Rlc2NyaXB0b3IoKTsKKyAqCisgKi8KK3N0YXRpYyB2b2lkICpmaW5kX2Rlc2NyaXB0b3IoIHZvaWQgKmRlc2NTdGFydCwgdW5zaWduZWQgaW50IGRlc2NMZW5ndGgsIHZvaWQgKmFmdGVyLCB1bnNpZ25lZCBjaGFyIGR0eXBlLCBpbnQgaWZhY2UsIGludCBhbHRTZXR0aW5nICkKK3sKKwl1bnNpZ25lZCBjaGFyICpwLCAqZW5kLCAqbmV4dDsKKwlpbnQgaW50ZXJmYWNlTnVtYmVyID0gLTEsIGFsdFNldCA9IC0xOworCisJcCA9IGRlc2NTdGFydDsKKwllbmQgPSBwICsgZGVzY0xlbmd0aDsKKwlmb3IoIDsgcCA8IGVuZDsgKSB7CisJCWlmICggcFswXSA8IDIgKQorCQkJcmV0dXJuIE5VTEw7CisJCW5leHQgPSBwICsgcFswXTsKKwkJaWYgKCBuZXh0ID4gZW5kICkKKwkJCXJldHVybiBOVUxMOworCQlpZiAoIHBbMV0gPT0gVVNCX0RUX0lOVEVSRkFDRSApIHsKKwkJCWlmICggcFswXSA8IFVTQl9EVF9JTlRFUkZBQ0VfU0laRSApCisJCQkJcmV0dXJuIE5VTEw7CisJCQlpbnRlcmZhY2VOdW1iZXIgPSBwWzJdOworCQkJYWx0U2V0ID0gcFszXTsKKwkJfQorCQlpZiAoIHBbMV0gPT0gZHR5cGUgJiYKKwkJICAgICAoICFhZnRlciB8fCAoIHAgPiAodW5zaWduZWQgY2hhciAqKWFmdGVyKSApICYmCisJCSAgICAgKCAoIGlmYWNlID09IC0xKSB8fCAoaWZhY2UgPT0gaW50ZXJmYWNlTnVtYmVyKSApICYmCisJCSAgICAgKCAoYWx0U2V0dGluZyA9PSAtMSkgfHwgKGFsdFNldHRpbmcgPT0gYWx0U2V0KSApKSB7CisJCQlyZXR1cm4gcDsKKwkJfQorCQlwID0gbmV4dDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKiBVdGlsaXR5IHRvIGZpbmQgYSBjbGFzcy1zcGVjaWZpYyBpbnRlcmZhY2UgZGVzY3JpcHRvci4KKyAqICBkc3VidHlwZSBpcyBhIGRlc2NyaXB0b3Igc3VidHlwZQorICogIENhbGxlZCBieSBwYXJzZURlc2NyaXB0b3IoKTsKKyAqKi8KK3N0YXRpYyB2b2lkICpmaW5kX2NzaW50ZXJmYWNlX2Rlc2NyaXB0b3Iodm9pZCAqZGVzY1N0YXJ0LCB1bnNpZ25lZCBpbnQgZGVzY0xlbmd0aCwgdm9pZCAqYWZ0ZXIsIHU4IGRzdWJ0eXBlLCBpbnQgaWZhY2UsIGludCBhbHRTZXR0aW5nKQoreworCXVuc2lnbmVkIGNoYXIgKnA7CisgIAorCXAgPSBmaW5kX2Rlc2NyaXB0b3IoIGRlc2NTdGFydCwgZGVzY0xlbmd0aCwgYWZ0ZXIsIFVTQl9EVF9DU19JTlRFUkZBQ0UsIGlmYWNlLCBhbHRTZXR0aW5nICk7CisJd2hpbGUgKCBwICkgeworCQlpZiAoIHBbMF0gPj0gMyAmJiBwWzJdID09IGRzdWJ0eXBlICkKKwkJCXJldHVybiBwOworCQlwID0gZmluZF9kZXNjcmlwdG9yKCBkZXNjU3RhcnQsIGRlc2NMZW5ndGgsIHAsIFVTQl9EVF9DU19JTlRFUkZBQ0UsIAorCQkJCSAgICAgaWZhY2UsIGFsdFNldHRpbmcgKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKworLyoqIFRoZSBtYWdpYyBvZiBtYWtpbmcgYSBuZXcgdXNiX21pZGlfZGV2aWNlIGZyb20gY29uZmlnIGhhcHBlbnMgaGVyZS4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlLWluZyB0aGlzIHJldHVybiB2YWx1ZSAoaWYgbm90IE5VTEwpLgorICoKKyAqKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX21pZGlfZGV2aWNlICpwYXJzZV9kZXNjcmlwdG9yKCBzdHJ1Y3QgdXNiX2RldmljZSAqZCwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgYnVmU2l6ZSwgdW5zaWduZWQgaW50IGlmbnVtICwgdW5zaWduZWQgaW50IGFsdFNldHRpbmcsIGludCBxdWlya3MpCit7CisJc3RydWN0IHVzYl9taWRpX2RldmljZSAqdTsKKwl1bnNpZ25lZCBjaGFyICpwMTsKKwl1bnNpZ25lZCBjaGFyICpwMjsKKwl1bnNpZ25lZCBjaGFyICpuZXh0OworCWludCBpZXAsIG9lcDsKKwlpbnQgbGVuZ3RoOworCXVuc2lnbmVkIGxvbmcgbG9uZ0JpdHM7CisJaW50IHBpbnMsIG5ieXRlcywgb2Zmc2V0LCBzaGlmdCwgamFjazsKKyNpZmRlZiBIQVZFX0pBQ0tfU1RSSU5HUworCS8qKiBKYWNrcyBjYW4gaGF2ZSBhc3NvY2lhdGVkIG5hbWVzLiAgKiovCisJdW5zaWduZWQgY2hhciBqYWNrMnN0cmluZ1syNTZdOworI2VuZGlmCisKKwl1ID0gTlVMTDsKKwkvKiBmaW5kIGF1ZGlvY29udHJvbCBpbnRlcmZhY2UgKi8KKwlwMSA9IGZpbmRfY3NpbnRlcmZhY2VfZGVzY3JpcHRvciggYnVmZmVyLCBidWZTaXplLCBOVUxMLAorCQkJCQkgIE1TX0hFQURFUiwgaWZudW0sIGFsdFNldHRpbmcpOworCisJaWYgKCAhcDEgKSB7CisJCWdvdG8gZXJyb3JfZW5kOworCX0KKworCWlmICggcDFbMF0gPCBNU19IRUFERVJfTEVOR1RIICkgeworCQlnb3RvIGVycm9yX2VuZDsKKwl9CisKKwkvKiBBc3N1bWUgc3VjY2Vzcy4gU2luY2UgdGhlIGRldmljZSBjb3JyZXNwb25kcyB0byBVU0ItTUlESSBzcGVjLCB3ZSBhc3N1bWUKKwkgICB0aGF0IHRoZSByZXN0IG9mIHRoZSBVU0IgMi4wIHNwZWMgaXMgb2JleWVkLiAqLworCisJdSA9IChzdHJ1Y3QgdXNiX21pZGlfZGV2aWNlICopa21hbGxvYyggc2l6ZW9mKHN0cnVjdCB1c2JfbWlkaV9kZXZpY2UpLCBHRlBfS0VSTkVMICk7CisJaWYgKCAhdSApIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXUtPmRldmljZU5hbWUgPSBOVUxMOworCXUtPmlkVmVuZG9yID0gbGUxNl90b19jcHUoZC0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJdS0+aWRQcm9kdWN0ID0gbGUxNl90b19jcHUoZC0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCXUtPmludGVyZmFjZSA9IGlmbnVtOworCXUtPmFsdFNldHRpbmcgPSBhbHRTZXR0aW5nOworCXUtPmluWzBdLmVuZHBvaW50ID0gLTE7CisJdS0+aW5bMF0uY2FibGVJZCA9IC0xOworCXUtPm91dFswXS5lbmRwb2ludCA9IC0xOworCXUtPm91dFswXS5jYWJsZUlkID0gLTE7CisKKworCXByaW50ayhLRVJOX0lORk8gInVzYi1taWRpOiBGb3VuZCBNSURJU3RyZWFtaW5nIGRldmljZSBjb3JyZXNwb25kaW5nIHRvIFJlbGVhc2UgJWQuJTAyZCBvZiBzcGVjLlxuIiwKKwkgICAgICAgKHAxWzRdID4+IDQpICogMTAgKyAocDFbNF0gJiAweDBmICksCisJICAgICAgIChwMVszXSA+PiA0KSAqIDEwICsgKHAxWzNdICYgMHgwZiApCisJCSk7CisKKwlsZW5ndGggPSBwMVs1XSB8IChwMVs2XSA8PCA4KTsKKworI2lmZGVmIEhBVkVfSkFDS19TVFJJTkdTCisJbWVtc2V0KGphY2syc3RyaW5nLCAwLCBzaXplb2YodW5zaWduZWQgY2hhcikgKiAyNTYpOworI2VuZGlmCisKKwlsZW5ndGggLT0gcDFbMF07CisJZm9yIChwMiA9IHAxICsgcDFbMF07IGxlbmd0aCA+IDA7IHAyID0gbmV4dCkgeworCQluZXh0ID0gcDIgKyBwMlswXTsKKwkJbGVuZ3RoIC09IHAyWzBdOworCisJCWlmIChwMlswXSA8IDIgKQorCQkJYnJlYWs7CisJCWlmIChwMlsxXSAhPSBVU0JfRFRfQ1NfSU5URVJGQUNFKQorCQkJYnJlYWs7CisJCWlmIChwMlsyXSA9PSBNSURJX0lOX0pBQ0sgJiYgcDJbMF0gPj0gNiApIHsKKwkJCWphY2sgPSBwMls0XTsKKyNpZmRlZiBIQVZFX0pBQ0tfU1RSSU5HUworCQkJamFjazJzdHJpbmdbamFja10gPSBwMls1XTsKKyNlbmRpZgorCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiLW1pZGk6IEZvdW5kIElOIEphY2sgMHglMDJ4ICVzXG4iLAorCQkJICAgICAgIGphY2ssIChwMlszXSA9PSBFTUJFRERFRF9KQUNLKT8iRU1CRURERUQiOiJFWFRFUk5BTCIgKTsKKwkJfSBlbHNlIGlmICggcDJbMl0gPT0gTUlESV9PVVRfSkFDSyAmJiBwMlswXSA+PSA2KSB7CisJCQlwaW5zID0gcDJbNV07CisJCQlpZiAoIHAyWzBdIDwgKDYgKyAyICogcGlucykgKQorCQkJCWNvbnRpbnVlOworCQkJamFjayA9IHAyWzRdOworI2lmZGVmIEhBVkVfSkFDS19TVFJJTkdTCisJCQlqYWNrMnN0cmluZ1tqYWNrXSA9IHAyWzUgKyAyICogcGluc107CisjZW5kaWYKKwkJCXByaW50ayhLRVJOX0lORk8gInVzYi1taWRpOiBGb3VuZCBPVVQgSmFjayAweCUwMnggJXMsICVkIHBpbnNcbiIsCisJCQkgICAgICAgamFjaywgKHAyWzNdID09IEVNQkVEREVEX0pBQ0spPyJFTUJFRERFRCI6IkVYVEVSTkFMIiwgcGlucyApOworCQl9IGVsc2UgaWYgKCBwMlsyXSA9PSBFTEVNRU5UX0RFU0NSSVBUT1IgICYmIHAyWzBdICA+PSAxMCkgeworCQkJcGlucyA9IHAyWzRdOworCQkJaWYgKCBwMlswXSA8ICg5ICsgMiAqIHBpbnMgKSApCisJCQkJY29udGludWU7CisJCQluYnl0ZXMgPSBwMls4ICsgMiAqIHBpbnMgXTsKKwkJCWlmICggcDJbMF0gPCAoMTAgKyAyICogcGlucyArIG5ieXRlcykgKQorCQkJCWNvbnRpbnVlOworCQkJbG9uZ0JpdHMgPSAwTDsKKwkJCWZvciAoIG9mZnNldCA9IDAsIHNoaWZ0ID0gMDsgb2Zmc2V0IDwgbmJ5dGVzICYmIG9mZnNldCA8IDg7IG9mZnNldCArKywgc2hpZnQgKz0gOCkgeworCQkJCWxvbmdCaXRzIHw9ICgobG9uZykocDJbOSArIDIgKiBwaW5zICsgb2Zmc2V0XSkpIDw8IHNoaWZ0OworCQkJfQorCQkJamFjayA9IHAyWzNdOworI2lmZGVmIEhBVkVfSkFDS19TVFJJTkdTCisJCQlqYWNrMnN0cmluZ1tqYWNrXSA9IHAyWzkgKyAyICogcGlucyArIG5ieXRlc107CisjZW5kaWYKKwkJCXByaW50ayhLRVJOX0lORk8gInVzYi1taWRpOiBGb3VuZCBFTEVNRU5UIDB4JTAyeCwgJWQvJWQgcGlucyBpbi9vdXQsIGJpdHM6IDB4JTAxNmx4XG4iLAorCQkJICAgICAgIGphY2ssIHBpbnMsIChpbnQpKHAyWzUgKyAyICogcGluc10pLCAobG9uZylsb25nQml0cyApOworCQl9IGVsc2UgeworCQl9CisJfQorCisJaWVwPTA7CisJb2VwPTA7CisKKwlpZiAocXVpcmtzPT0wKSB7CisJCS8qIE1JRElTVFJFQU0gKi8KKwkJcDIgPSBOVUxMOworCQlmb3IgKHAxID0gZmluZF9kZXNjcmlwdG9yKGJ1ZmZlciwgYnVmU2l6ZSwgTlVMTCwgVVNCX0RUX0VORFBPSU5ULAorCQkJCQkgIGlmbnVtLCBhbHRTZXR0aW5nICk7IHAxOyBwMSA9IG5leHQgKSB7CisJCQluZXh0ID0gZmluZF9kZXNjcmlwdG9yKGJ1ZmZlciwgYnVmU2l6ZSwgcDEsIFVTQl9EVF9FTkRQT0lOVCwKKwkJCQkJICAgICAgIGlmbnVtLCBhbHRTZXR0aW5nICk7IAorCQkJcDIgPSBmaW5kX2Rlc2NyaXB0b3IoYnVmZmVyLCBidWZTaXplLCBwMSwgVVNCX0RUX0NTX0VORFBPSU5ULAorCQkJCQkgICAgIGlmbnVtLCBhbHRTZXR0aW5nICk7IAorCisJCQlpZiAoIHAyICYmIG5leHQgJiYgKCBwMiA+IG5leHQgKSApCisJCQkJcDIgPSBOVUxMOworCisJCQlpZiAoIHAxWzBdIDwgOSB8fCAhcDIgfHwgcDJbMF0gPCA0ICkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKCAocDFbMl0gJiAweDgwKSA9PSAweDgwICkgeworCQkJCWlmICggaWVwIDwgMTUgKSB7CisJCQkJCXBpbnMgPSBwMlszXTsgLyogbm90IHBpbnMgLS0gYWN0dWFsbHkgImNhYmxlcyIgKi8KKwkJCQkJaWYgKCBwaW5zID4gMTYgKQorCQkJCQkJcGlucyA9IDE2OworCQkJCQl1LT5pbltpZXBdLmVuZHBvaW50ID0gcDFbMl07CisJCQkJCXUtPmluW2llcF0uY2FibGVJZCA9ICggMSA8PCBwaW5zICkgLSAxOworCQkJCQlpZiAoIHUtPmluW2llcF0uY2FibGVJZCApCisJCQkJCQlpZXAgKys7CisJCQkJCWlmICggaWVwIDwgMTUgKSB7CisJCQkJCQl1LT5pbltpZXBdLmVuZHBvaW50ID0gLTE7CisJCQkJCQl1LT5pbltpZXBdLmNhYmxlSWQgPSAtMTsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKCBvZXAgPCAxNSApIHsKKwkJCQkJcGlucyA9IHAyWzNdOyAvKiBub3QgcGlucyAtLSBhY3R1YWxseSAiY2FibGVzIiAqLworCQkJCQlpZiAoIHBpbnMgPiAxNiApCisJCQkJCQlwaW5zID0gMTY7CisJCQkJCXUtPm91dFtvZXBdLmVuZHBvaW50ID0gcDFbMl07CisJCQkJCXUtPm91dFtvZXBdLmNhYmxlSWQgPSAoIDEgPDwgcGlucyApIC0gMTsKKwkJCQkJaWYgKCB1LT5vdXRbb2VwXS5jYWJsZUlkICkKKwkJCQkJCW9lcCArKzsKKwkJCQkJaWYgKCBvZXAgPCAxNSApIHsKKwkJCQkJCXUtPm91dFtvZXBdLmVuZHBvaW50ID0gLTE7CisJCQkJCQl1LT5vdXRbb2VwXS5jYWJsZUlkID0gLTE7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCisJCX0KKwl9IGVsc2UgaWYgKHF1aXJrcz09MSkgeworCQkvKiBZQU1BSEEgcXVpcmtzICovCisJCWZvciAocDEgPSBmaW5kX2Rlc2NyaXB0b3IoYnVmZmVyLCBidWZTaXplLCBOVUxMLCBVU0JfRFRfRU5EUE9JTlQsCisJCQkJCSAgaWZudW0sIGFsdFNldHRpbmcgKTsgcDE7IHAxID0gbmV4dCApIHsKKwkJCW5leHQgPSBmaW5kX2Rlc2NyaXB0b3IoYnVmZmVyLCBidWZTaXplLCBwMSwgVVNCX0RUX0VORFBPSU5ULAorCQkJCQkgICAgICAgaWZudW0sIGFsdFNldHRpbmcgKTsgCisJCisJCQlpZiAoIHAxWzBdIDwgNyApCisJCQkJY29udGludWU7CisKKwkJCWlmICggKHAxWzJdICYgMHg4MCkgPT0gMHg4MCApIHsKKwkJCQlpZiAoIGllcCA8IDE1ICkgeworCQkJCQlwaW5zID0gaWVwKzE7CisJCQkJCWlmICggcGlucyA+IDE2ICkKKwkJCQkJCXBpbnMgPSAxNjsKKwkJCQkJdS0+aW5baWVwXS5lbmRwb2ludCA9IHAxWzJdOworCQkJCQl1LT5pbltpZXBdLmNhYmxlSWQgPSAoIDEgPDwgcGlucyApIC0gMTsKKwkJCQkJaWYgKCB1LT5pbltpZXBdLmNhYmxlSWQgKQorCQkJCQkJaWVwICsrOworCQkJCQlpZiAoIGllcCA8IDE1ICkgeworCQkJCQkJdS0+aW5baWVwXS5lbmRwb2ludCA9IC0xOworCQkJCQkJdS0+aW5baWVwXS5jYWJsZUlkID0gLTE7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmICggb2VwIDwgMTUgKSB7CisJCQkJCXBpbnMgPSBvZXArMTsKKwkJCQkJdS0+b3V0W29lcF0uZW5kcG9pbnQgPSBwMVsyXTsKKwkJCQkJdS0+b3V0W29lcF0uY2FibGVJZCA9ICggMSA8PCBwaW5zICkgLSAxOworCQkJCQlpZiAoIHUtPm91dFtvZXBdLmNhYmxlSWQgKQorCQkJCQkJb2VwICsrOworCQkJCQlpZiAoIG9lcCA8IDE1ICkgeworCQkJCQkJdS0+b3V0W29lcF0uZW5kcG9pbnQgPSAtMTsKKwkJCQkJCXUtPm91dFtvZXBdLmNhYmxlSWQgPSAtMTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkKKwkJfQorCX0KKworCWlmICggIWllcCAmJiAhIG9lcCApIHsKKwkJZ290byBlcnJvcl9lbmQ7CisJfQorCisJcmV0dXJuIHU7CisKK2Vycm9yX2VuZDoKKwlrZnJlZSh1KTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiogUmV0dXJucyBudW1iZXIgYmV0d2VlbiAwIGFuZCAxNi4KKyAqCisgKiovCitzdGF0aWMgaW50IG9uX2JpdHMoIHVuc2lnbmVkIHNob3J0IHYgKQoreworCWludCBpOworCWludCByZXQ9MDsKKworCWZvciAoIGk9MCA7IGk8MTYgOyBpKysgKSB7CisJCWlmICggdiAmICgxPDxpKSApCisJCQlyZXQrKzsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKiBVU0ItZGV2aWNlIHdpbGwgYmUgaW50ZXJyb2dhdGVkIGZvciBhbHRTZXR0aW5nLgorICoKKyAqIFJldHVybnMgbmVnYXRpdmUgb24gZXJyb3IuCisgKiBDYWxsZWQgYnkgYWxsb2NVc2JNaWRpRGV2KCk7CisgKgorICoqLworCitzdGF0aWMgaW50IGdldF9hbHRfc2V0dGluZyggc3RydWN0IHVzYl9kZXZpY2UgKmQsIGludCBpZm51bSApCit7CisJaW50IGFsdHMsIGFsdD0wOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcDsKKwlpbnQgZXBpbiwgZXBvdXQ7CisJaW50IGk7CisKKwlpZmFjZSA9IHVzYl9pZm51bV90b19pZiggZCwgaWZudW0gKTsKKwlhbHRzID0gaWZhY2UtPm51bV9hbHRzZXR0aW5nOworCisJZm9yICggYWx0PTAgOyBhbHQ8YWx0cyA7IGFsdCsrICkgeworCQlpbnRlcmZhY2UgPSAmaWZhY2UtPmFsdHNldHRpbmdbYWx0XTsKKwkJZXBpbiA9IC0xOworCQllcG91dCA9IC0xOworCisJCWZvciAoIGk9MCA7IGk8aW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHMgOyBpKysgKSB7CisJCQllcCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50W2ldLmRlc2M7CisJCQlpZiAoIChlcC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spICE9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEsgKSB7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pICYmIGVwaW4gPCAwICkgeworCQkJCWVwaW4gPSBpOworCQkJfSBlbHNlIGlmICggZXBvdXQgPCAwICkgeworCQkJCWVwb3V0ID0gaTsKKwkJCX0KKwkJCWlmICggZXBpbiA+PSAwICYmIGVwb3V0ID49IDAgKSB7CisJCQkJcmV0dXJuIGludGVyZmFjZS0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZzsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAtRU5PREVWOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisvKiogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwgaW4gYWxsb2NhdGluZyBhbmQgcmVnaXN0ZXJpbmcgaW50ZXJuYWwgc3RydWN0dXJlcy4KKyAqIFJldHVybnMgbmVnYXRpdmUgb24gZmFpbHVyZS4KKyAqIENhbGxzIGFsbG9jTWlkaURldiB3aGljaCBhZGRpdGlvbmFsbHkgcmVnaXN0ZXJzIC9kZXYvbWlkaVhYIGRldmljZXMuCisgKiBXcml0ZXMgbWVzc2FnZXMgb24gc3VjY2VzcyB0byBpbmRpY2F0ZSB3aGljaCAvZGV2L21pZGlYWCBpcyB3aGljaCBwaHlzaWNhbAorICogZW5kcG9pbnQuCisgKgorICoqLworc3RhdGljIGludCBhbGxvY191c2JfbWlkaV9kZXZpY2UoIHN0cnVjdCB1c2JfZGV2aWNlICpkLCBzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKnMsIHN0cnVjdCB1c2JfbWlkaV9kZXZpY2UgKnUgKQoreworCXN0cnVjdCB1c2JfbWlkaWRldiAqKm1kZXZzPU5VTEw7CisJc3RydWN0IG1pZGlfaW5fZW5kcG9pbnQgKm1pbnNbMTVdLCAqbWluOworCXN0cnVjdCBtaWRpX291dF9lbmRwb2ludCAqbW91dHNbMTVdLCAqbW91dDsKKwlpbnQgaW5EZXZzPTAsIG91dERldnM9MDsKKwlpbnQgaW5FbmRwb2ludHM9MCwgb3V0RW5kcG9pbnRzPTA7CisJaW50IGluRW5kcG9pbnQsIG91dEVuZHBvaW50OworCWludCBpbkNhYmxlSWQsIG91dENhYmxlSWQ7CisJaW50IGk7CisJaW50IGRldmljZXMgPSAwOworCWludCBhbHQgPSAwOworCisJLyogT2J0YWluIGFsdFNldHRpbmcgb3IgZGllLi4gKi8KKwlhbHQgPSB1LT5hbHRTZXR0aW5nOworCWlmICggYWx0IDwgMCApIHsKKwkJYWx0ID0gZ2V0X2FsdF9zZXR0aW5nKCBkLCB1LT5pbnRlcmZhY2UgKTsKKwl9CisJaWYgKCBhbHQgPCAwICkKKwkJcmV0dXJuIC1FTlhJTzsKKworCS8qIENvbmZpZ3VyZSBpbnRlcmZhY2UgKi8KKwlpZiAoIHVzYl9zZXRfaW50ZXJmYWNlKCBkLCB1LT5pbnRlcmZhY2UsIGFsdCApIDwgMCApIHsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlmb3IgKCBpID0gMCA7IGkgPCAxNSA7IGkrKyApIHsKKwkJbWluc1tpXSA9IE5VTEw7CisJCW1vdXRzW2ldID0gTlVMTDsKKwl9CisKKwkvKiBCZWdpbiBBbGxvY2F0aW9uICovCisJd2hpbGUoIGluRW5kcG9pbnRzIDwgMTUKKwkgICAgICAgJiYgaW5EZXZzIDwgbWF4ZGV2aWNlcworCSAgICAgICAmJiB1LT5pbltpbkVuZHBvaW50c10uY2FibGVJZCA+PSAwICkgeworCQlpbkRldnMgKz0gb25fYml0cygodW5zaWduZWQgc2hvcnQpdS0+aW5baW5FbmRwb2ludHNdLmNhYmxlSWQpOworCQltaW5zW2luRW5kcG9pbnRzXSA9IGFsbG9jX21pZGlfaW5fZW5kcG9pbnQoIGQsIHUtPmluW2luRW5kcG9pbnRzXS5lbmRwb2ludCApOworCQlpZiAoIG1pbnNbaW5FbmRwb2ludHNdID09IE5VTEwgKQorCQkJZ290byBlcnJvcl9lbmQ7CisJCWluRW5kcG9pbnRzKys7CisJfQorCisJd2hpbGUoIG91dEVuZHBvaW50cyA8IDE1CisJICAgICAgICYmIG91dERldnMgPCBtYXhkZXZpY2VzCisJICAgICAgICYmIHUtPm91dFtvdXRFbmRwb2ludHNdLmNhYmxlSWQgPj0gMCApIHsKKwkJb3V0RGV2cyArPSBvbl9iaXRzKCh1bnNpZ25lZCBzaG9ydCl1LT5vdXRbb3V0RW5kcG9pbnRzXS5jYWJsZUlkKTsKKwkJbW91dHNbb3V0RW5kcG9pbnRzXSA9IGFsbG9jX21pZGlfb3V0X2VuZHBvaW50KCBkLCB1LT5vdXRbb3V0RW5kcG9pbnRzXS5lbmRwb2ludCApOworCQlpZiAoIG1vdXRzW291dEVuZHBvaW50c10gPT0gTlVMTCApCisJCQlnb3RvIGVycm9yX2VuZDsKKwkJb3V0RW5kcG9pbnRzKys7CisJfQorCisJZGV2aWNlcyA9IGluRGV2cyA+IG91dERldnMgPyBpbkRldnMgOiBvdXREZXZzOworCWRldmljZXMgPSBtYXhkZXZpY2VzID4gZGV2aWNlcyA/IGRldmljZXMgOiBtYXhkZXZpY2VzOworCisJLyogb2J0YWluIHNwYWNlIGZvciBkZXZpY2UgbmFtZSAoaVByb2R1Y3QpIGlmIG5vdCBrbm93bi4gKi8KKwlpZiAoICEgdS0+ZGV2aWNlTmFtZSApIHsKKwkJbWRldnMgPSAoc3RydWN0IHVzYl9taWRpZGV2ICoqKQorCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9taWRpZGV2cyAqKSpkZXZpY2VzCisJCQkJKyBzaXplb2YoY2hhcikgKiAyNTYsIEdGUF9LRVJORUwpOworCX0gZWxzZSB7CisJCW1kZXZzID0gKHN0cnVjdCB1c2JfbWlkaWRldiAqKikKKwkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfbWlkaWRldnMgKikqZGV2aWNlcywgR0ZQX0tFUk5FTCk7CisJfQorCisJaWYgKCAhbWRldnMgKSB7CisJCS8qIGRldmljZXMgPSAwOyAqLworCQkvKiBtZGV2cyA9IE5VTEw7ICovCisJCWdvdG8gZXJyb3JfZW5kOworCX0KKwlmb3IgKCBpPTAgOyBpPGRldmljZXMgOyBpKysgKSB7CisJCW1kZXZzW2ldID0gTlVMTDsKKwl9CisKKwkvKiBvYnRhaW4gZGV2aWNlIG5hbWUgKGlQcm9kdWN0KSBpZiBub3Qga25vd24uICovCisJaWYgKCAhIHUtPmRldmljZU5hbWUgKSB7CisJCXUtPmRldmljZU5hbWUgPSAoY2hhciAqKSAobWRldnMgKyBkZXZpY2VzKTsKKwkJaWYgKCAhIGQtPmhhdmVfbGFuZ2lkICYmIGQtPmRlc2NyaXB0b3IuaVByb2R1Y3QpIHsKKwkJCWFsdCA9IHVzYl9nZXRfc3RyaW5nKGQsIDAsIDAsIHUtPmRldmljZU5hbWUsIDI1MCk7CisJCQlpZiAoYWx0IDwgMCkgeworCQkJCXByaW50ayhLRVJOX0lORk8gImVycm9yIGdldHRpbmcgc3RyaW5nIGRlc2NyaXB0b3IgMCAoZXJyb3I9JWQpXG4iLCBhbHQpOworCQkJfSBlbHNlIGlmICh1LT5kZXZpY2VOYW1lWzBdIDwgNCkgeworCQkJCXByaW50ayhLRVJOX0lORk8gInN0cmluZyBkZXNjcmlwdG9yIDAgdG9vIHNob3J0IChsZW5ndGggPSAlZClcbiIsIGFsdCk7CisJCQl9IGVsc2UgeworCQkJCXByaW50ayhLRVJOX0lORk8gInN0cmluZyBkZXNjcmlwdG9yIDAgZm91bmQgKGxlbmd0aCA9ICVkKVxuIiwgYWx0KTsKKwkJCQlmb3IoOyBhbHQgPj0gNDsgYWx0IC09IDIpIHsKKwkJCQkJaSA9IHUtPmRldmljZU5hbWVbYWx0LTJdIHwgKHUtPmRldmljZU5hbWVbYWx0LTFdPDwgOCk7CisJCQkJCXByaW50ayhLRVJOX0lORk8gInVzYi1taWRpOiBsYW5naWQoJWQpIDB4JTA0eFxuIiwKKwkJCQkJICAgICAgIChhbHQtNCkgPj4gMSwgaSk7CisJCQkJCWlmICggKCAoIGkgXiB1bGFuZ2lkICkgJiAweGZmICkgPT0gMCApIHsKKwkJCQkJCWQtPmhhdmVfbGFuZ2lkID0gMTsKKwkJCQkJCWQtPnN0cmluZ19sYW5naWQgPSBpOworCQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAidXNiLW1pZGk6IGxhbmdpZChtYXRjaCkgMHglMDR4XG4iLCBpKTsKKwkJCQkJCWlmICggaSA9PSB1bGFuZ2lkICkKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQl1LT5kZXZpY2VOYW1lWzBdID0gKGNoYXIpIDA7CisJCWlmIChkLT5kZXNjcmlwdG9yLmlQcm9kdWN0KSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJ1c2ItbWlkaTogZmV0Y2hTdHJpbmcoJWQpXG4iLCBkLT5kZXNjcmlwdG9yLmlQcm9kdWN0KTsKKwkJCWFsdCA9IHVzYl9zdHJpbmcoZCwgZC0+ZGVzY3JpcHRvci5pUHJvZHVjdCwgdS0+ZGV2aWNlTmFtZSwgMjU1KTsKKwkJCWlmKCBhbHQgPCAwICkgeworCQkJCXUtPmRldmljZU5hbWVbMF0gPSAoY2hhcikgMDsKKwkJCX0KKwkJCXByaW50ayhLRVJOX0lORk8gInVzYi1taWRpOiBmZXRjaFN0cmluZyA9ICVkXG4iLCBhbHQpOworCQl9IAorCQkvKiBGYWlsc2FmZSAqLworCQlpZiAoICF1LT5kZXZpY2VOYW1lWzBdICkgeworCQkJaWYgKGxlMTZfdG9fY3B1KGQtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFVTQl9WRU5ET1JfSURfUk9MQU5EICkgeworCQkJCXN0cmNweSh1LT5kZXZpY2VOYW1lLCAiVW5rbm93biBSb2xhbmQiKTsKKwkJCX0gZWxzZSBpZiAobGUxNl90b19jcHUoZC0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVVNCX1ZFTkRPUl9JRF9TVEVJTkJFUkcgICkgeworCQkJCXN0cmNweSh1LT5kZXZpY2VOYW1lLCAiVW5rbm93biBTdGVpbmJlcmciKTsKKwkJCX0gZWxzZSBpZiAobGUxNl90b19jcHUoZC0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVVNCX1ZFTkRPUl9JRF9ZQU1BSEEgKSB7CisJCQkJc3RyY3B5KHUtPmRldmljZU5hbWUsICJVbmtub3duIFlhbWFoYSIpOworCQkJfSBlbHNlIHsKKwkJCQlzdHJjcHkodS0+ZGV2aWNlTmFtZSwgIlVua25vd24iKTsKKwkJCX0KKwkJfQorCX0KKworCWluRW5kcG9pbnQgID0gMDsgaW5DYWJsZUlkICA9IC0xOworCW91dEVuZHBvaW50ID0gMDsgb3V0Q2FibGVJZCA9IC0xOworCisJZm9yICggaT0wIDsgaTxkZXZpY2VzIDsgaSsrICkgeworCQlmb3IgKCBpbkNhYmxlSWQgKysgOworCQkgICAgICBpbkVuZHBvaW50IDwxNQorCQkJICAgICAgJiYgbWluc1tpbkVuZHBvaW50XSAKKwkJCSAgICAgICYmICEodS0+aW5baW5FbmRwb2ludF0uY2FibGVJZCAmICgxPDxpbkNhYmxlSWQpKSA7CisJCSAgICAgIGluQ2FibGVJZCsrICkgeworCQkJaWYgKCBpbkNhYmxlSWQgPj0gMTYgKSB7CisJCQkJaW5FbmRwb2ludCAgKys7CisJCQkJaW5DYWJsZUlkICA9IDA7CisJCQl9CisJCX0KKwkJbWluICA9IG1pbnNbaW5FbmRwb2ludF07CisJCWZvciAoIG91dENhYmxlSWQgKysgOworCQkgICAgICBvdXRFbmRwb2ludCA8MTUKKwkJCSAgICAgICYmIG1vdXRzW291dEVuZHBvaW50XSAKKwkJCSAgICAgICYmICEodS0+b3V0W291dEVuZHBvaW50XS5jYWJsZUlkICYgKDE8PG91dENhYmxlSWQpKSA7CisJCSAgICAgIG91dENhYmxlSWQrKyApIHsKKwkJCWlmICggb3V0Q2FibGVJZCA+PSAxNiApIHsKKwkJCQlvdXRFbmRwb2ludCAgKys7CisJCQkJb3V0Q2FibGVJZCAgPSAwOworCQkJfQorCQl9CisJCW1vdXQgPSBtb3V0c1tvdXRFbmRwb2ludF07CisKKwkJbWRldnNbaV0gPSBhbGxvY01pZGlEZXYoIHMsIG1pbiwgbW91dCwgaW5DYWJsZUlkLCBvdXRDYWJsZUlkICk7CisJCWlmICggbWRldnNbaV0gPT0gTlVMTCApCisJCQlnb3RvIGVycm9yX2VuZDsKKworCX0KKworCS8qIFN1Y2Nlc3MhICovCisJZm9yICggaT0wIDsgaTxkZXZpY2VzIDsgaSsrICkgeworCQlsaXN0X2FkZF90YWlsKCAmbWRldnNbaV0tPmxpc3QsICZzLT5taWRpRGV2TGlzdCApOworCX0KKwlmb3IgKCBpPTAgOyBpPGluRW5kcG9pbnRzIDsgaSsrICkgeworCQlsaXN0X2FkZF90YWlsKCAmbWluc1tpXS0+bGlzdCwgJnMtPmluRW5kcG9pbnRMaXN0ICk7CisJfQorCWZvciAoIGk9MCA7IGk8b3V0RW5kcG9pbnRzIDsgaSsrICkgeworCQlsaXN0X2FkZF90YWlsKCAmbW91dHNbaV0tPmxpc3QsICZzLT5vdXRFbmRwb2ludExpc3QgKTsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJ1c2JtaWRpOiBmb3VuZCBbICVzIF0gKDB4JTA0eDoweCUwNHgpLCBhdHRhY2hlZDpcbiIsIHUtPmRldmljZU5hbWUsIHUtPmlkVmVuZG9yLCB1LT5pZFByb2R1Y3QgKTsKKwlmb3IgKCBpPTAgOyBpPGRldmljZXMgOyBpKysgKSB7CisJCWludCBkbSA9IChtZGV2c1tpXS0+ZGV2X21pZGktMik+PjQ7CisJCWlmICggbWRldnNbaV0tPm1vdXQuZXAgIT0gTlVMTCAmJiBtZGV2c1tpXS0+bWluLmVwICE9IE5VTEwgKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJ1c2JtaWRpOiAvZGV2L21pZGklMDJkOiBpbiAoZXA6JTAyeCBjaWQ6JTJkIGJ1ZnNpejolMmQpIG91dCAoZXA6JTAyeCBjaWQ6JTJkIGJ1ZnNpejolMmQpXG4iLCAKKwkJCSAgICAgICBkbSwKKwkJCSAgICAgICBtZGV2c1tpXS0+bWluLmVwLT5lbmRwb2ludHxVU0JfRElSX0lOLCBtZGV2c1tpXS0+bWluLmNhYmxlSWQsIG1kZXZzW2ldLT5taW4uZXAtPnJlY3ZCdWZTaXplLAorCQkJICAgICAgIG1kZXZzW2ldLT5tb3V0LmVwLT5lbmRwb2ludCwgbWRldnNbaV0tPm1vdXQuY2FibGVJZCwgbWRldnNbaV0tPm1vdXQuZXAtPmJ1ZlNpemUpOworCQl9IGVsc2UgaWYgKCBtZGV2c1tpXS0+bWluLmVwICE9IE5VTEwgKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJ1c2JtaWRpOiAvZGV2L21pZGklMDJkOiBpbiAoZXA6JTAyeCBjaWQ6JTJkIGJ1ZnNpejolMDJkKVxuIiwgCisJCQkgICAgICAgZG0sCisJCQkgICAgICAgbWRldnNbaV0tPm1pbi5lcC0+ZW5kcG9pbnR8VVNCX0RJUl9JTiwgbWRldnNbaV0tPm1pbi5jYWJsZUlkLCBtZGV2c1tpXS0+bWluLmVwLT5yZWN2QnVmU2l6ZSk7CisJCX0gZWxzZSBpZiAoIG1kZXZzW2ldLT5tb3V0LmVwICE9IE5VTEwgKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJ1c2JtaWRpOiAvZGV2L21pZGklMDJkOiBvdXQgKGVwOiUwMnggY2lkOiUyZCBidWZzaXo6JTAyZClcbiIsIAorCQkJICAgICAgIGRtLAorCQkJICAgICAgIG1kZXZzW2ldLT5tb3V0LmVwLT5lbmRwb2ludCwgbWRldnNbaV0tPm1vdXQuY2FibGVJZCwgbWRldnNbaV0tPm1vdXQuZXAtPmJ1ZlNpemUpOworCQl9CisJfQorCisJa2ZyZWUobWRldnMpOworCXJldHVybiAwOworCisgZXJyb3JfZW5kOgorCWlmICggbWRldnMgIT0gTlVMTCApIHsKKwkJZm9yICggaT0wIDsgaTxkZXZpY2VzIDsgaSsrICkgeworCQkJaWYgKCBtZGV2c1tpXSAhPSBOVUxMICkgeworCQkJCXVucmVnaXN0ZXJfc291bmRfbWlkaSggbWRldnNbaV0tPmRldl9taWRpICk7CisJCQkJa2ZyZWUobWRldnNbaV0pOworCQkJfQorCQl9CisJCWtmcmVlKG1kZXZzKTsKKwl9CisKKwlmb3IgKCBpPTAgOyBpPDE1IDsgaSsrICkgeworCQlpZiAoIG1pbnNbaV0gIT0gTlVMTCApIHsKKwkJCXJlbW92ZV9taWRpX2luX2VuZHBvaW50KCBtaW5zW2ldICk7CisJCX0KKwkJaWYgKCBtb3V0c1tpXSAhPSBOVUxMICkgeworCQkJcmVtb3ZlX21pZGlfb3V0X2VuZHBvaW50KCBtb3V0c1tpXSApOworCQl9CisJfQorCisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqIEF0dGVtcHQgdG8gc2NhbiBZQU1BSEEncyBkZXZpY2UgZGVzY3JpcHRvciBhbmQgZGV0ZWN0IGNvcnJlY3QgdmFsdWVzIG9mCisgKiAgdGhlbS4KKyAqICBSZXR1cm4gMCBvbiBzdWNjZXMsIG5lZ2F0aXZlIG9uIGZhaWx1cmUuCisgKiAgQ2FsbGVkIGJ5IHVzYl9taWRpX3Byb2JlKCk7CisgKiovCisKK3N0YXRpYyBpbnQgZGV0ZWN0X3lhbWFoYV9kZXZpY2UoIHN0cnVjdCB1c2JfZGV2aWNlICpkLAorCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIHVuc2lnbmVkIGludCBpZm51bSwKKwkJc3RydWN0IHVzYl9taWRpX3N0YXRlICpzKQoreworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX21pZGlfZGV2aWNlICp1OworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwlpbnQgYnVmU2l6ZTsKKwlpbnQgaTsKKwlpbnQgYWx0cz0tMTsKKwlpbnQgcmV0OworCisJaWYgKGxlMTZfdG9fY3B1KGQtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICE9IFVTQl9WRU5ET1JfSURfWUFNQUhBKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvciAoIGk9MCA7IGkgPCBpZmFjZS0+bnVtX2FsdHNldHRpbmc7IGkrKyApIHsKKwkJaW50ZXJmYWNlID0gaWZhY2UtPmFsdHNldHRpbmcgKyBpOworCisJCWlmICggaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyAhPSAyNTUgfHwKKwkJICAgICBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzICE9IDAgKQorCQkJY29udGludWU7CisJCWFsdHMgPSBpbnRlcmZhY2UtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmc7CisJfQorCWlmICggYWx0cyA9PSAtMSApIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAidXNiLW1pZGk6IEZvdW5kIFlBTUFIQSBVU0ItTUlESSBkZXZpY2Ugb24gZGV2ICUwNHg6JTA0eCwgaWZhY2UgJWRcbiIsCisJICAgICAgIGxlMTZfdG9fY3B1KGQtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCSAgICAgICBsZTE2X3RvX2NwdShkLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksIGlmbnVtKTsKKworCWkgPSBkLT5hY3Rjb25maWcgLSBkLT5jb25maWc7CisJYnVmZmVyID0gZC0+cmF3ZGVzY3JpcHRvcnNbaV07CisJYnVmU2l6ZSA9IGxlMTZfdG9fY3B1KGQtPmFjdGNvbmZpZy0+ZGVzYy53VG90YWxMZW5ndGgpOworCisJdSA9IHBhcnNlX2Rlc2NyaXB0b3IoIGQsIGJ1ZmZlciwgYnVmU2l6ZSwgaWZudW0sIGFsdHMsIDEpOworCWlmICggdSA9PSBOVUxMICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBhbGxvY191c2JfbWlkaV9kZXZpY2UoIGQsIHMsIHUgKTsKKworCWtmcmVlKHUpOworCisJcmV0dXJuIHJldDsKK30KKworCisvKiogU2NhbiB0YWJsZSBvZiBrbm93biBkZXZpY2VzIHdoaWNoIGFyZSBvbmx5IHBhcnRpYWxseSBjb21wbGlhbnQgd2l0aCAKKyAqIHRoZSBNSURJU3RyZWFtaW5nIHNwZWNpZmljYXRpb24uCisgKiBDYWxsZWQgYnkgdXNiX21pZGlfcHJvYmUoKTsKKyAqCisgKiovCisKK3N0YXRpYyBpbnQgZGV0ZWN0X3ZlbmRvcl9zcGVjaWZpY19kZXZpY2UoIHN0cnVjdCB1c2JfZGV2aWNlICpkLCB1bnNpZ25lZCBpbnQgaWZudW0sIHN0cnVjdCB1c2JfbWlkaV9zdGF0ZSAqcyApCit7CisJc3RydWN0IHVzYl9taWRpX2RldmljZSAqdTsKKwlpbnQgaTsKKwlpbnQgcmV0ID0gLUVOWElPOworCisJZm9yICggaT0wOyBpPFZFTkRPUl9TUEVDSUZJQ19VU0JfTUlESV9ERVZJQ0VTIDsgaSsrICkgeworCQl1PSYodXNiX21pZGlfZGV2aWNlc1tpXSk7CisgICAgCisJCWlmICggbGUxNl90b19jcHUoZC0+ZGVzY3JpcHRvci5pZFZlbmRvcikgIT0gdS0+aWRWZW5kb3IgfHwKKwkJICAgICBsZTE2X3RvX2NwdShkLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gdS0+aWRQcm9kdWN0IHx8CisJCSAgICAgaWZudW0gIT0gdS0+aW50ZXJmYWNlICkKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IGFsbG9jX3VzYl9taWRpX2RldmljZSggZCwgcywgdSApOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKiBBdHRlbXB0IHRvIG1hdGNoIGFueSBjb25maWcgb2YgYW4gaW50ZXJmYWNlIHRvIGEgTUlESVNUUkVBTUlORyBpbnRlcmZhY2UuCisgKiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUuCisgKiBDYWxsZWQgYnkgdXNiX21pZGlfcHJvYmUoKTsKKyAqKi8KK3N0YXRpYyBpbnQgZGV0ZWN0X21pZGlfc3ViY2xhc3Moc3RydWN0IHVzYl9kZXZpY2UgKmQsCisJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgdW5zaWduZWQgaW50IGlmbnVtLAorCQlzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKnMpCit7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfbWlkaV9kZXZpY2UgKnU7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCWludCBidWZTaXplOworCWludCBpOworCWludCBhbHRzPS0xOworCWludCByZXQ7CisKKwlmb3IgKCBpPTAgOyBpIDwgaWZhY2UtPm51bV9hbHRzZXR0aW5nOyBpKysgKSB7CisJCWludGVyZmFjZSA9IGlmYWNlLT5hbHRzZXR0aW5nICsgaTsKKworCQlpZiAoIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX0FVRElPIHx8CisJCSAgICAgaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcyAhPSBVU0JfU1VCQ0xBU1NfTUlESVNUUkVBTUlORyApCisJCQljb250aW51ZTsKKwkJYWx0cyA9IGludGVyZmFjZS0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZzsKKwl9CisJaWYgKCBhbHRzID09IC0xICkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJ1c2ItbWlkaTogRm91bmQgTUlESVNUUkVBTUlORyBvbiBkZXYgJTA0eDolMDR4LCBpZmFjZSAlZFxuIiwKKwkgICAgICAgbGUxNl90b19jcHUoZC0+ZGVzY3JpcHRvci5pZFZlbmRvciksIAorCSAgICAgICBsZTE2X3RvX2NwdShkLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksIGlmbnVtKTsKKworCisJLyogRnJvbSBVU0IgU3BlYyB2Mi4wLCBTZWN0aW9uIDkuNS4KKwkgICBJZiB0aGUgY2xhc3Mgb3IgdmVuZG9yIHNwZWNpZmljIGRlc2NyaXB0b3JzIHVzZSB0aGUgc2FtZSBmb3JtYXQKKwkgICBhcyBzdGFuZGFyZCBkZXNjcmlwdG9ycyAoZS5nLiwgc3RhcnQgd2l0aCBhIGxlbmd0aCBieXRlIGFuZAorCSAgIGZvbGxvd2VkIGJ5IGEgdHlwZSBieXRlKSwgdGhleSBtdXN0IGJlIHJldHVybmVkIGludGVybGVhdmVkIHdpdGgKKwkgICBzdGFuZGFyZCBkZXNjcmlwdG9ycyBpbiB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiByZXR1cm5lZCBieQorCSAgIGEgR2V0RGVzY3JpcHRvcihDb25maWd1cmF0aW9uKSByZXF1ZXN0LiBJbiB0aGlzIGNhc2UsIHRoZSBjbGFzcworCSAgIG9yIHZlbmRvci1zcGVjaWZpYyBkZXNjcmlwdG9ycyBtdXN0IGZvbGxvdyBhIHJlbGF0ZWQgc3RhbmRhcmQKKwkgICBkZXNjcmlwdG9yIHRoZXkgbW9kaWZ5IG9yIGV4dGVuZC4KKwkqLworCisJaSA9IGQtPmFjdGNvbmZpZyAtIGQtPmNvbmZpZzsKKwlidWZmZXIgPSBkLT5yYXdkZXNjcmlwdG9yc1tpXTsKKwlidWZTaXplID0gbGUxNl90b19jcHUoZC0+YWN0Y29uZmlnLT5kZXNjLndUb3RhbExlbmd0aCk7CisKKwl1ID0gcGFyc2VfZGVzY3JpcHRvciggZCwgYnVmZmVyLCBidWZTaXplLCBpZm51bSwgYWx0cywgMCk7CisJaWYgKCB1ID09IE5VTEwgKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGFsbG9jX3VzYl9taWRpX2RldmljZSggZCwgcywgdSApOworCisJa2ZyZWUodSk7CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKiBXaGVuIHVzZXIgaGFzIHJlcXVlc3RlZCBhIHNwZWNpZmljIGRldmljZSwgbWF0Y2ggaXQgZXhhY3RseS4KKyAqCisgKiBVc2VzIHV2ZW5kb3IsIHVwcm9kdWN0LCB1aW50ZXJmYWNlLCB1YWx0LCB1bWluLCB1bW91dCBhbmQgdWNhYmxlLgorICogQ2FsbGVkIGJ5IHVzYl9taWRpX3Byb2JlKCk7CisgKgorICoqLworc3RhdGljIGludCBkZXRlY3RfYnlfaGFuZChzdHJ1Y3QgdXNiX2RldmljZSAqZCwgdW5zaWduZWQgaW50IGlmbnVtLCBzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKnMpCit7CisJc3RydWN0IHVzYl9taWRpX2RldmljZSB1OworCisJaWYgKCBsZTE2X3RvX2NwdShkLT5kZXNjcmlwdG9yLmlkVmVuZG9yKSAhPSB1dmVuZG9yIHx8CisJICAgICBsZTE2X3RvX2NwdShkLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gdXByb2R1Y3QgfHwKKwkgICAgIGlmbnVtICE9IHVpbnRlcmZhY2UgKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICggdWFsdCA8IDAgKQorCQl1YWx0ID0gLTE7CisKKwlpZiAoIHVtaW4gICA8IDAgfHwgdW1pbiAgID4gMTUgKQorCQl1bWluICAgPSAweDAxIHwgVVNCX0RJUl9JTjsKKwlpZiAoIHVtb3V0ICA8IDAgfHwgdW1vdXQgID4gMTUgKQorCQl1bW91dCAgPSAweDAxOworCWlmICggdWNhYmxlIDwgMCB8fCB1Y2FibGUgPiAxNSApCisJCXVjYWJsZSA9IDA7CisKKwl1LmRldmljZU5hbWUgPSBOVUxMOyAvKiBBIGZsYWcgZm9yIGFsbG9jX3VzYl9taWRpX2RldmljZSB0byBnZXQgZGV2aWNlCisJCQkJbmFtZSBmcm9tIGRldmljZS4gKi8KKwl1LmlkVmVuZG9yICAgPSB1dmVuZG9yOworCXUuaWRQcm9kdWN0ICA9IHVwcm9kdWN0OworCXUuaW50ZXJmYWNlICA9IHVpbnRlcmZhY2U7CisJdS5hbHRTZXR0aW5nID0gdWFsdDsKKworCXUuaW5bMF0uZW5kcG9pbnQgICAgPSB1bWluOworCXUuaW5bMF0uY2FibGVJZCAgICAgPSAoMTw8dWNhYmxlKTsKKworCXUub3V0WzBdLmVuZHBvaW50ICAgPSB1bW91dDsKKwl1Lm91dFswXS5jYWJsZUlkICAgID0gKDE8PHVjYWJsZSk7CisKKwlyZXR1cm4gYWxsb2NfdXNiX21pZGlfZGV2aWNlKCBkLCBzLCAmdSApOworfQorCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IHVzYl9taWRpX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCAKKwkJCSAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfbWlkaV9zdGF0ZSAqczsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlpbnQgaWZudW0gPSBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCisJcyA9IChzdHJ1Y3QgdXNiX21pZGlfc3RhdGUgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX21pZGlfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoICFzICkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoIHMsIDAsIHNpemVvZihzdHJ1Y3QgdXNiX21pZGlfc3RhdGUpICk7CisJSU5JVF9MSVNUX0hFQUQoJnMtPm1pZGlEZXZMaXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcy0+aW5FbmRwb2ludExpc3QpOworCUlOSVRfTElTVF9IRUFEKCZzLT5vdXRFbmRwb2ludExpc3QpOworCXMtPnVzYmRldiA9IGRldjsKKwlzLT5jb3VudCAgPSAwOworCXNwaW5fbG9ja19pbml0KCZzLT5sb2NrKTsKKworCWlmICgKKwkJZGV0ZWN0X2J5X2hhbmQoIGRldiwgaWZudW0sIHMgKSAmJgorCQlkZXRlY3RfbWlkaV9zdWJjbGFzcyggZGV2LCBpbnRmLCBpZm51bSwgcyApICYmCisJCWRldGVjdF92ZW5kb3Jfc3BlY2lmaWNfZGV2aWNlKCBkZXYsIGlmbnVtLCBzICkgJiYKKwkJZGV0ZWN0X3lhbWFoYV9kZXZpY2UoIGRldiwgaW50ZiwgaWZudW0sIHMpICkgeworCQlrZnJlZShzKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZG93bigmb3Blbl9zZW0pOworCWxpc3RfYWRkX3RhaWwoJnMtPm1pZGlkZXYsICZtaWRpZGV2cyk7CisJdXAoJm9wZW5fc2VtKTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIHMpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHVzYl9taWRpX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9taWRpX3N0YXRlICpzID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJc3RydWN0IHVzYl9taWRpZGV2ICAgICptOworCisJaWYgKCAhcyApCisJCXJldHVybjsKKworCWlmICggcyA9PSAoc3RydWN0IHVzYl9taWRpX3N0YXRlICopLTEgKSB7CisJCXJldHVybjsKKwl9CisJaWYgKCAhcy0+dXNiZGV2ICkgeworCQlyZXR1cm47CisJfQorCWRvd24oJm9wZW5fc2VtKTsKKwlsaXN0X2RlbCgmcy0+bWlkaWRldik7CisJSU5JVF9MSVNUX0hFQUQoJnMtPm1pZGlkZXYpOworCXMtPnVzYmRldiA9IE5VTEw7CisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG0sICZzLT5taWRpRGV2TGlzdCwgbGlzdCkgeworCQl3YWtlX3VwKCYobS0+bWluLmVwLT53YWl0KSk7CisJCXdha2VfdXAoJihtLT5tb3V0LmVwLT53YWl0KSk7CisJCWlmICggbS0+ZGV2X21pZGkgPj0gMCApIHsKKwkJCXVucmVnaXN0ZXJfc291bmRfbWlkaShtLT5kZXZfbWlkaSk7CisJCX0KKwkJbS0+ZGV2X21pZGkgPSAtMTsKKwl9CisJcmVsZWFzZV9taWRpX2RldmljZShzKTsKKwl3YWtlX3VwKCZvcGVuX3dhaXQpOworfQorCisvKiB3ZSB3YW50IHRvIGxvb2sgYXQgYWxsIGRldmljZXMgYnkgaGFuZCAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJey5kcml2ZXJfaW5mbyA9IDQyfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9taWRpX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkibWlkaSIsCisJLnByb2JlID0JdXNiX21pZGlfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2JfbWlkaV9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IF9faW5pdCB1c2JfbWlkaV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmdXNiX21pZGlfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYl9taWRpX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdXNiX21pZGlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNiX21pZGlfaW5pdCkgOworbW9kdWxlX2V4aXQodXNiX21pZGlfZXhpdCkgOworCisjaWZkZWYgSEFWRV9BTFNBX1NVUFBPUlQKKyNkZWZpbmUgU05EUlZfTUFJTl9PQkpFQ1RfRklMRQorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZHJpdmVyLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9jb250cm9sLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9pbmZvLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9jczQ2eHguaCIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IHNuZF91c2JtaWRpX2lucHV0X2Nsb3NlKHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF91c2JtaWRpX2lucHV0X29wZW4oc25kX3Jhd21pZGlfc3Vic3RyZWFtX3QgKiBzdWJzdHJlYW0gKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbmRfdXNibWlkaV9pbnB1dF90cmlnZ2VyKHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtLCBpbnQgdXApCit7CisJcmV0dXJuIDA7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IHNuZF91c2JtaWRpX291dHB1dF9jbG9zZShzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfdXNibWlkaV9vdXRwdXRfb3BlbihzbmRfcmF3bWlkaV9zdWJzdHJlYW1fdCAqIHN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc25kX3VzYl9taWRpX291dHB1dF90cmlnZ2VyKHNuZF9yYXdtaWRpX3N1YnN0cmVhbV90ICogc3Vic3RyZWFtLAorCQkJCQlpbnQgdXApCit7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHNuZF9yYXdtaWRpX29wc190IHNuZF91c2JtaWRpX291dHB1dCA9Cit7CisgICAgICAgIC5vcGVuID0gICAgICAgICBzbmRfdXNibWlkaV9vdXRwdXRfb3BlbiwKKyAgICAgICAgLmNsb3NlID0gICAgICAgIHNuZF91c2JtaWRpX291dHB1dF9jbG9zZSwKKyAgICAgICAgLnRyaWdnZXIgPSAgICAgIHNuZF91c2JtaWRpX291dHB1dF90cmlnZ2VyLAorfTsKK3N0YXRpYyBzbmRfcmF3bWlkaV9vcHNfdCBzbmRfdXNibWlkaV9pbnB1dCA9Cit7CisgICAgICAgIC5vcGVuID0gICAgICAgICBzbmRfdXNibWlkaV9pbnB1dF9vcGVuLAorICAgICAgICAuY2xvc2UgPSAgICAgICAgc25kX3VzYm1pZGlfaW5wdXRfY2xvc2UsCisgICAgICAgIC50cmlnZ2VyID0gICAgICBzbmRfdXNibWlkaV9pbnB1dF90cmlnZ2VyLAorfTsKKworaW50IHNuZF91c2JtaWRpX21pZGkoY3M0Nnh4X3QgKmNoaXAsIGludCBkZXZpY2UsIHNuZF9yYXdtaWRpX3QgKipycmF3bWlkaSkKK3sKKwlzbmRfcmF3bWlkaV90ICpybWlkaTsKKwlpbnQgZXJyOworCisJaWYgKHJyYXdtaWRpKQorCQkqcnJhd21pZGkgPSBOVUxMOworCWlmICgoZXJyID0gc25kX3Jhd21pZGlfbmV3KGNoaXAtPmNhcmQsICJVU0ItTUlESSIsIGRldmljZSwgMSwgMSwgJnJtaWRpKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCXN0cmNweShybWlkaS0+bmFtZSwgIlVTQi1NSURJIik7CisKKwlzbmRfcmF3bWlkaV9zZXRfb3BzKCBybWlkaSwgU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVULCAmc25kX3VzYm1pZGlfb3V0cHV0ICk7CisJc25kX3Jhd21pZGlfc2V0X29wcyggcm1pZGksIFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVULCAmc25kX3VzYm1pZGlfaW5wdXQgKTsKKworCXJtaWRpLT5pbmZvX2ZsYWdzIHw9IFNORFJWX1JBV01JRElfSU5GT19PVVRQVVQgfCBTTkRSVl9SQVdNSURJX0lORk9fSU5QVVQgfCBTTkRSVl9SQVdNSURJX0lORk9fRFVQTEVYOworCisJcm1pZGktPnByaXZhdGVfZGF0YSA9IGNoaXA7CisJY2hpcC0+cm1pZGkgPSBybWlkaTsKKwlpZiAocnJhd21pZGkpCisJCSpycmF3bWlkaSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHNuZF91c2JtaWRpX2NyZWF0ZSggc25kX2NhcmRfdCAqIGNhcmQsCisJCQlzdHJ1Y3QgcGNpX2RldiAqIHBjaSwKKwkJCXVzYm1pZGlfdCAqKiByY2hpcCApCit7CisJdXNibWlkaV90ICpjaGlwOworCWludCBlcnIsIGlkeDsKKwlzbmRfcmVnaW9uX3QgKnJlZ2lvbjsKKwlzdGF0aWMgc25kX2RldmljZV9vcHRfdCBvcHMgPSB7CisJCS5kZXZfZnJlZSA9IHNuZF91c2JtaWRpX2Rldl9mcmVlLAorCX07CisKKwkqcmNoaXAgPSBOVUxMOworCWNoaXAgPSBzbmRfbWFnaWNfa2NhbGxvYyggdXNibWlkaV90LCAwLCBHRlBfS0VSTkVMICk7CisJaWYgKCBjaGlwID09IE5VTEwgKQorCQlyZXR1cm4gLUVOT01FTTsKK30KKworRVhQT1JUX1NZTUJPTChzbmRfdXNibWlkaV9jcmVhdGUpOworRVhQT1JUX1NZTUJPTChzbmRfdXNibWlkaV9taWRpKTsKKyNlbmRpZiAvKiBIQVZFX0FMU0FfU1VQUE9SVCAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy91c2ItbWlkaS5oIGIvZHJpdmVycy91c2IvY2xhc3MvdXNiLW1pZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNThjZGVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvdXNiLW1pZGkuaApAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAgdXNiLW1pZGkuaCAgLS0gIFVTQi1NSURJIGRyaXZlcgorCisgIENvcHlyaWdodCAoQykgMjAwMQorICAgICAgTkFHQU5PIERhaXN1a2UgPGJyZWV6ZS5uYWdhbm9AbmlmdHkubmUuanA+CisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmbmRlZiBfVVNCX01JRElfSF8KKyNkZWZpbmUgX1VTQl9NSURJX0hfCisKKyNpZm5kZWYgVVNCX1NVQkNMQVNTX01JRElTVFJFQU1JTkcKKyNkZWZpbmUgVVNCX1NVQkNMQVNTX01JRElTVFJFQU1JTkcJMworI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFJvbGFuZCBNSURJIERldmljZXMgKi8KKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1JPTEFORAkJMHgwNTgyCisjZGVmaW5lIFVTQk1JRElfUk9MQU5EX1VBMTAwRwkJMHgwMDAwCisjZGVmaW5lIFVTQk1JRElfUk9MQU5EX01QVTY0CQkweDAwMDIKKyNkZWZpbmUgVVNCTUlESV9ST0xBTkRfU0M4ODUwCQkweDAwMDMKKyNkZWZpbmUgVVNCTUlESV9ST0xBTkRfU0M4ODIwCQkweDAwMDcKKyNkZWZpbmUgVVNCTUlESV9ST0xBTkRfVU0yCQkweDAwMDUKKyNkZWZpbmUgVVNCTUlESV9ST0xBTkRfVU0xCQkweDAwMDkKKyNkZWZpbmUgVVNCTUlESV9ST0xBTkRfUEMzMDAJCTB4MDAwOAorCisvKiBZQU1BSEEgTUlESSBEZXZpY2VzICovCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfWUFNQUhBCQkweDA0OTkKKyNkZWZpbmUgVVNCTUlESV9ZQU1BSEFfTVUxMDAwCQkweDEwMDEKKworLyogU3RlaW5iZXJnIE1JREkgRGV2aWNlcyAqLworI2RlZmluZSBVU0JfVkVORE9SX0lEX1NURUlOQkVSRwkJMHgwNzYzCisjZGVmaW5lIFVTQk1JRElfU1RFSU5CRVJHX1VTQjJNSURJCTB4MTAwMQorCisvKiBNYXJrIG9mIHRoZSBVbmljb3JuIE1JREkgRGV2aWNlcyAqLworI2RlZmluZSBVU0JfVkVORE9SX0lEX01PVFUJCTB4MDdmZAorI2RlZmluZSBVU0JNSURJX01PVFVfRkFTVExBTkUJCTB4MDAwMQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBTdXBwb3J0ZWQgZGV2aWNlcyAqLworCitzdHJ1Y3QgdXNiX21pZGlfZW5kcG9pbnQgeworCWludCAgZW5kcG9pbnQ7CisJaW50ICBjYWJsZUlkOyAvKiBpZiBiaXQtbiA9PSAxIHRoZW4gY2FibGVJZC1uIGlzIGVuYWJsZWQgKG46IDAgLSAxNSkgKi8KK307CisKK3N0cnVjdCB1c2JfbWlkaV9kZXZpY2UgeworCWNoYXIgICpkZXZpY2VOYW1lOworCisJdTE2ICAgIGlkVmVuZG9yOworCXUxNiAgICBpZFByb2R1Y3Q7CisJaW50ICAgIGludGVyZmFjZTsKKwlpbnQgICAgYWx0U2V0dGluZzsgLyogLTE6IGF1dG8gZGV0ZWN0ICovCisKKwlzdHJ1Y3QgdXNiX21pZGlfZW5kcG9pbnQgaW5bMTVdOworCXN0cnVjdCB1c2JfbWlkaV9lbmRwb2ludCBvdXRbMTVdOworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfbWlkaV9kZXZpY2UgdXNiX21pZGlfZGV2aWNlc1tdID0geworICB7IC8qIFJvbGFuZCBVTS0xICovCisgICAgIlJvbGFuZCBVTS0xIiwKKyAgICBVU0JfVkVORE9SX0lEX1JPTEFORCwgVVNCTUlESV9ST0xBTkRfVU0xLCAyLCAtMSwKKyAgICB7IHsgMHg4MSwgMSB9LCB7LTEsIC0xfSB9LAorICAgIHsgeyAweDAxLCAxLH0sIHstMSwgLTF9IH0sCisgIH0sCisKKyAgeyAvKiBSb2xhbmQgVU0tMiAqLworICAgICJSb2xhbmQgVU0tMiIgLAorICAgIFVTQl9WRU5ET1JfSURfUk9MQU5ELCBVU0JNSURJX1JPTEFORF9VTTIsIDIsIC0xLAorICAgIHsgeyAweDgxLCAzIH0sIHstMSwgLTF9IH0sCisgICAgeyB7IDB4MDEsIDMsfSwgey0xLCAtMX0gfSwKKyAgfSwKKworLyoqIE5leHQgZW50cnkgY291cnRlc3kgcmVzZWFyY2ggYnkgTWljaGFlbCBNaW5uIDxtaWNoYWVsQG1pY2hhZWxtaW5uLmNvbT4gKiovCisgIHsgLyogUm9sYW5kIFVBLTEwMCAqLworICAgICJSb2xhbmQgVUEtMTAwIiwKKyAgICBVU0JfVkVORE9SX0lEX1JPTEFORCwgVVNCTUlESV9ST0xBTkRfVUExMDBHLCAyLCAtMSwKKyAgICB7IHsgMHg4MiwgNyB9LCB7LTEsIC0xfSB9LCAvKiogY2FibGVzIDAsMSBhbmQgMiBmb3IgU1lTRVggKiovCisgICAgeyB7IDB4MDIsIDcgfSwgey0xLCAtMX0gfSwKKyAgfSwKKworLyoqIE5leHQgZW50cnkgY291cnRlc3kgcmVzZWFyY2ggYnkgTWljaGFlbCBNaW5uIDxtaWNoYWVsQG1pY2hhZWxtaW5uLmNvbT4gKiovCisgIHsgLyogUm9sYW5kIFNDODg1MCAqLworICAgICJSb2xhbmQgU0M4ODUwIiwKKyAgICBVU0JfVkVORE9SX0lEX1JPTEFORCwgVVNCTUlESV9ST0xBTkRfU0M4ODUwLCAyLCAtMSwKKyAgICB7IHsgMHg4MSwgMHgzZiB9LCB7LTEsIC0xfSB9LAorICAgIHsgeyAweDAxLCAweDNmIH0sIHstMSwgLTF9IH0sCisgIH0sCisKKyAgeyAvKiBSb2xhbmQgU0M4ODIwICovCisgICAgIlJvbGFuZCBTQzg4MjAiLAorICAgIFVTQl9WRU5ET1JfSURfUk9MQU5ELCBVU0JNSURJX1JPTEFORF9TQzg4MjAsIDIsIC0xLAorICAgIHsgeyAweDgxLCAweDEzIH0sIHstMSwgLTF9IH0sCisgICAgeyB7IDB4MDEsIDB4MTMgfSwgey0xLCAtMX0gfSwKKyAgfSwKKworICB7IC8qIFJvbGFuZCBTQzg4MjAgKi8KKyAgICAiUm9sYW5kIFNDODgyMCIsCisgICAgVVNCX1ZFTkRPUl9JRF9ST0xBTkQsIFVTQk1JRElfUk9MQU5EX1NDODgyMCwgMiwgLTEsCisgICAgeyB7IDB4ODEsIDE3IH0sIHstMSwgLTF9IH0sCisgICAgeyB7IDB4MDEsIDE3IH0sIHstMSwgLTF9IH0sCisgIH0sCisKKyAgeyAvKiBZQU1BSEEgTVUxMDAwICovCisgICAgIllBTUFIQSBNVTEwMDAiLAorICAgIFVTQl9WRU5ET1JfSURfWUFNQUhBLCBVU0JNSURJX1lBTUFIQV9NVTEwMDAsIDAsIC0xLCAKKyAgICB7IHsgMHg4MSwgMSB9LCB7LTEsIC0xfSB9LAorICAgIHsgeyAweDAxLCAxNSB9LCB7LTEsIC0xfSB9LAorICB9LAorICB7IC8qIFJvbGFuZCBQQy0zMDAgKi8KKyAgICAiUm9sYW5kIFBDLTMwMCIsCisgICAgVVNCX1ZFTkRPUl9JRF9ST0xBTkQsIFVTQk1JRElfUk9MQU5EX1BDMzAwLCAyLCAtMSwgCisgICAgeyB7IDB4ODEsIDEgfSwgey0xLCAtMX0gfSwKKyAgICB7IHsgMHgwMSwgMSB9LCB7LTEsIC0xfSB9LAorICB9LAorICB7IC8qIE1PVFUgRmFzdGxhbmUgVVNCICovCisgICAgIk1PVFUgRmFzdGxhbmUgVVNCIiwKKyAgICBVU0JfVkVORE9SX0lEX01PVFUsIFVTQk1JRElfTU9UVV9GQVNUTEFORSwgMSwgMCwKKyAgICB7IHsgMHg4MiwgMyB9LCB7LTEsIC0xfSB9LAorICAgIHsgeyAweDAyLCAzIH0sIHstMSwgLTF9IH0sCisgIH0KK307CisKKyNkZWZpbmUgVkVORE9SX1NQRUNJRklDX1VTQl9NSURJX0RFVklDRVMgKHNpemVvZih1c2JfbWlkaV9kZXZpY2VzKS9zaXplb2Yoc3RydWN0IHVzYl9taWRpX2RldmljZSkpCisKKy8qIGZvciBIb3QtUGx1Z2dpbmcgKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl9taWRpX2lkcyBbXSA9IHsKKwl7IC5tYXRjaF9mbGFncyA9IChVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTKSwKKwkgIC5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sIC5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfTUlESVNUUkVBTUlOR30sCisJeyBVU0JfREVWSUNFKCBVU0JfVkVORE9SX0lEX1JPTEFORCwgVVNCTUlESV9ST0xBTkRfVU0xICAgICkgfSwKKwl7IFVTQl9ERVZJQ0UoIFVTQl9WRU5ET1JfSURfUk9MQU5ELCBVU0JNSURJX1JPTEFORF9VTTIgICAgKSB9LAorCXsgVVNCX0RFVklDRSggVVNCX1ZFTkRPUl9JRF9ST0xBTkQsIFVTQk1JRElfUk9MQU5EX1VBMTAwRyApIH0sCisJeyBVU0JfREVWSUNFKCBVU0JfVkVORE9SX0lEX1JPTEFORCwgVVNCTUlESV9ST0xBTkRfUEMzMDAgKSB9LAorCXsgVVNCX0RFVklDRSggVVNCX1ZFTkRPUl9JRF9ST0xBTkQsIFVTQk1JRElfUk9MQU5EX1NDODg1MCApIH0sCisJeyBVU0JfREVWSUNFKCBVU0JfVkVORE9SX0lEX1JPTEFORCwgVVNCTUlESV9ST0xBTkRfU0M4ODIwICkgfSwKKwl7IFVTQl9ERVZJQ0UoIFVTQl9WRU5ET1JfSURfWUFNQUhBLCBVU0JNSURJX1lBTUFIQV9NVTEwMDAgKSB9LAorCXsgVVNCX0RFVklDRSggVVNCX1ZFTkRPUl9JRF9NT1RVLCAgIFVTQk1JRElfTU9UVV9GQVNUTEFORSApIH0sCisvKgl7IFVTQl9ERVZJQ0UoIFVTQl9WRU5ET1JfSURfU1RFSU5CRVJHLCBVU0JNSURJX1NURUlOQkVSR19VU0IyTUlESSApIH0sKi8KKwl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgdXNiX21pZGlfaWRzKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2VuZGlmIC8qIF9VU0JfTUlESV9IXyAqLworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYTIyZTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCkBAIC0wLDAgKzEsMTIxNCBAQAorLyoKKyAqIHVzYmxwLmMgIFZlcnNpb24gMC4xMworICoKKyAqIENvcHlyaWdodCAoYykgMTk5OSBNaWNoYWVsIEdlZQk8bWljaGFlbEBsaW51eHNwZWNpZmljLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMTk5OSBQYXZlbCBNYWNoZWsJPHBhdmVsQHN1c2UuY3o+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDAgUmFuZHkgRHVubGFwCTxyZGR1bmxhcEBvc2RsLm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwMCBWb2p0ZWNoIFBhdmxpawk8dm9qdGVjaEBzdXNlLmN6PgorICMgQ29weXJpZ2h0IChjKSAyMDAxIFBldGUgWmFpdGNldgk8emFpdGNldkByZWRoYXQuY29tPgorICMgQ29weXJpZ2h0IChjKSAyMDAxIERhdmlkIFBhc2NoYWwJPHBhc2NoYWxAcmNzaXMuY29tPgorICoKKyAqIFVTQiBQcmludGVyIERldmljZSBDbGFzcyBkcml2ZXIgZm9yIFVTQiBwcmludGVycyBhbmQgcHJpbnRlciBjYWJsZXMKKyAqCisgKiBTcG9uc29yZWQgYnkgU3VTRQorICoKKyAqIENoYW5nZUxvZzoKKyAqCXYwLjEgLSB0aG9yb3VnaCBjbGVhbmluZywgVVJCaWZpY2F0aW9uLCBhbG1vc3QgYSByZXdyaXRlCisgKgl2MC4yIC0gc29tZSBtb3JlIGNsZWFudXBzCisgKgl2MC4zIC0gY2xlYW5lciBhZ2Fpbiwgd2FpdHF1ZXVlIGZpeGVzCisgKgl2MC40IC0gZml4ZXMgaW4gdW5pZGlyZWN0aW9uYWwgbW9kZQorICoJdjAuNSAtIGFkZCBERVZJQ0VfSUQgc3RyaW5nIHN1cHBvcnQKKyAqCXYwLjYgLSBuZXZlciB0aW1lIG91dAorICoJdjAuNyAtIGZpeGVkIGJ1bGstSU4gcmVhZCBhbmQgcG9sbCAoRGF2aWQgUGFzY2hhbCkKKyAqCXYwLjggLSBhZGQgZGV2ZnMgc3VwcG9ydAorICoJdjAuOSAtIGZpeCB1bnBsdWctd2hpbGUtb3BlbiBwYXRocworICoJdjAuMTAtIHJlbW92ZSBzbGVlcF9vbiwgZml4IGVycm9yIG9uIG9vbSAob2xpdmVyQG5ldWt1bS5vcmcpCisgKgl2MC4xMSAtIGFkZCBwcm90b19iaWFzIG9wdGlvbiAoUGV0ZSBaYWl0Y2V2KQorICoJdjAuMTIgLSBhZGQgaHBvai5zb3VyY2Vmb3JnZS5uZXQgaW9jdGxzIChEYXZpZCBQYXNjaGFsKQorICoJdjAuMTMgLSBhbGxvYyBzcGFjZSBmb3Igc3RhdHVzYnVmICg8c3RhdHVzPiBub3Qgb24gc3RhY2spOworICoJCXVzZSB1c2JfYnVmZmVyX2FsbG9jKCkgZm9yIHJlYWQgYnVmICYgd3JpdGUgYnVmOworICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbHAuaD4KKyN1bmRlZiBERUJVRworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC4xMyIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTWljaGFlbCBHZWUsIFBhdmVsIE1hY2hlaywgVm9qdGVjaCBQYXZsaWssIFJhbmR5IER1bmxhcCwgUGV0ZSBaYWl0Y2V2LCBEYXZpZCBQYXNjaGFsIgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIFByaW50ZXIgRGV2aWNlIENsYXNzIGRyaXZlciIKKworI2RlZmluZSBVU0JMUF9CVUZfU0laRQkJODE5MgorI2RlZmluZSBVU0JMUF9ERVZJQ0VfSURfU0laRQkxMDI0CisKKy8qIGlvY3RsczogKi8KKyNkZWZpbmUgTFBHRVRTVEFUVVMJCTB4MDYwYgkJLyogc2FtZSBhcyBpbiBkcml2ZXJzL2NoYXIvbHAuYyAqLworI2RlZmluZSBJT0NOUl9HRVRfREVWSUNFX0lECQkxCisjZGVmaW5lIElPQ05SX0dFVF9QUk9UT0NPTFMJCTIKKyNkZWZpbmUgSU9DTlJfU0VUX1BST1RPQ09MCQkzCisjZGVmaW5lIElPQ05SX0hQX1NFVF9DSEFOTkVMCQk0CisjZGVmaW5lIElPQ05SX0dFVF9CVVNfQUREUkVTUwkJNQorI2RlZmluZSBJT0NOUl9HRVRfVklEX1BJRAkJNgorI2RlZmluZSBJT0NOUl9TT0ZUX1JFU0VUCQk3CisvKiBHZXQgZGV2aWNlX2lkIHN0cmluZzogKi8KKyNkZWZpbmUgTFBJT0NfR0VUX0RFVklDRV9JRChsZW4pIF9JT0MoX0lPQ19SRUFELCAnUCcsIElPQ05SX0dFVF9ERVZJQ0VfSUQsIGxlbikKKy8qIFRoZSBmb2xsb3dpbmcgaW9jdGxzIHdlcmUgYWRkZWQgZm9yIGh0dHA6Ly9ocG9qLnNvdXJjZWZvcmdlLm5ldDogKi8KKy8qIEdldCB0d28taW50IGFycmF5OgorICogWzBdPWN1cnJlbnQgcHJvdG9jb2wgKDE9Ny8xLzEsIDI9Ny8xLzIsIDM9Ny8xLzMpLAorICogWzFdPXN1cHBvcnRlZCBwcm90b2NvbCBtYXNrIChtYXNrJigxPDxuKSE9MCBtZWFucyA3LzEvbiBzdXBwb3J0ZWQpOiAqLworI2RlZmluZSBMUElPQ19HRVRfUFJPVE9DT0xTKGxlbikgX0lPQyhfSU9DX1JFQUQsICdQJywgSU9DTlJfR0VUX1BST1RPQ09MUywgbGVuKQorLyogU2V0IHByb3RvY29sIChhcmc6IDE9Ny8xLzEsIDI9Ny8xLzIsIDM9Ny8xLzMpOiAqLworI2RlZmluZSBMUElPQ19TRVRfUFJPVE9DT0wgX0lPQyhfSU9DX1dSSVRFLCAnUCcsIElPQ05SX1NFVF9QUk9UT0NPTCwgMCkKKy8qIFNldCBjaGFubmVsIG51bWJlciAoSFAgVmVuZG9yLXNwZWNpZmljIGNvbW1hbmQpOiAqLworI2RlZmluZSBMUElPQ19IUF9TRVRfQ0hBTk5FTCBfSU9DKF9JT0NfV1JJVEUsICdQJywgSU9DTlJfSFBfU0VUX0NIQU5ORUwsIDApCisvKiBHZXQgdHdvLWludCBhcnJheTogWzBdPWJ1cyBudW1iZXIsIFsxXT1kZXZpY2UgYWRkcmVzczogKi8KKyNkZWZpbmUgTFBJT0NfR0VUX0JVU19BRERSRVNTKGxlbikgX0lPQyhfSU9DX1JFQUQsICdQJywgSU9DTlJfR0VUX0JVU19BRERSRVNTLCBsZW4pCisvKiBHZXQgdHdvLWludCBhcnJheTogWzBdPXZlbmRvciBJRCwgWzFdPXByb2R1Y3QgSUQ6ICovCisjZGVmaW5lIExQSU9DX0dFVF9WSURfUElEKGxlbikgX0lPQyhfSU9DX1JFQUQsICdQJywgSU9DTlJfR0VUX1ZJRF9QSUQsIGxlbikKKy8qIFBlcmZvcm0gY2xhc3Mgc3BlY2lmaWMgc29mdCByZXNldCAqLworI2RlZmluZSBMUElPQ19TT0ZUX1JFU0VUIF9JT0MoX0lPQ19OT05FLCAnUCcsIElPQ05SX1NPRlRfUkVTRVQsIDApOworCisvKgorICogQSBERVZJQ0VfSUQgc3RyaW5nIG1heSBpbmNsdWRlIHRoZSBwcmludGVyJ3Mgc2VyaWFsIG51bWJlci4KKyAqIEl0IHNob3VsZCBlbmQgd2l0aCBhIHNlbWktY29sb24gKCc7JykuCisgKiBBbiBleGFtcGxlIGZyb20gYW4gSFAgOTcwQyBEZXNrSmV0IHByaW50ZXIgaXMgKHRoaXMgaXMgb25lIGxvbmcgc3RyaW5nLAorICogd2l0aCB0aGUgc2VyaWFsIG51bWJlciBjaGFuZ2VkKToKK01GRzpIRVdMRVRULVBBQ0tBUkQ7TURMOkRFU0tKRVQgOTcwQztDTUQ6TUxDLFBDTCxQTUw7Q0xBU1M6UFJJTlRFUjtERVNDUklQVElPTjpIZXdsZXR0LVBhY2thcmQgRGVza0pldCA5NzBDO1NFUk46VVM5NzBDU0VQUk9GO1ZTVEFUVVM6JEhCMCROQzAsZmYsRE4sSURMRSxDVVQsSzEsQzAsRFAsTlIsS1AwMDAsQ1AwMjc7VlA6MDgwMCxGTCxCMDtWSjogICAgICAgICAgICAgICAgICAgIDsKKyAqLworCisvKgorICogVVNCIFByaW50ZXIgUmVxdWVzdHMKKyAqLworCisjZGVmaW5lIFVTQkxQX1JFUV9HRVRfSUQJCQkweDAwCisjZGVmaW5lIFVTQkxQX1JFUV9HRVRfU1RBVFVTCQkJMHgwMQorI2RlZmluZSBVU0JMUF9SRVFfUkVTRVQJCQkJMHgwMgorI2RlZmluZSBVU0JMUF9SRVFfSFBfQ0hBTk5FTF9DSEFOR0VfUkVRVUVTVAkweDAwCS8qIEhQIFZlbmRvci1zcGVjaWZpYyAqLworCisjZGVmaW5lIFVTQkxQX01JTk9SUwkJMTYKKyNkZWZpbmUgVVNCTFBfTUlOT1JfQkFTRQkwCisKKyNkZWZpbmUgVVNCTFBfV1JJVEVfVElNRU9VVAkoNTAwMCkJCQkvKiA1IHNlY29uZHMgKi8KKworI2RlZmluZSBVU0JMUF9GSVJTVF9QUk9UT0NPTAkxCisjZGVmaW5lIFVTQkxQX0xBU1RfUFJPVE9DT0wJMworI2RlZmluZSBVU0JMUF9NQVhfUFJPVE9DT0xTCShVU0JMUF9MQVNUX1BST1RPQ09MKzEpCisKKy8qCisgKiBzb21lIGFyYml0cmFyeSBzdGF0dXMgYnVmZmVyIHNpemU7CisgKiBuZWVkIGEgc3RhdHVzIGJ1ZmZlciB0aGF0IGlzIGFsbG9jYXRlZCB2aWEga21hbGxvYygpLCBub3Qgb24gc3RhY2sKKyAqLworI2RlZmluZSBTVEFUVVNfQlVGX1NJWkUJCTgKKworc3RydWN0IHVzYmxwIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAJKmRldjsJCQkvKiBVU0IgZGV2aWNlICovCisJc3RydWN0IHNlbWFwaG9yZQlzZW07CQkJLyogbG9ja3MgdGhpcyBzdHJ1Y3QsIGVzcGVjaWFsbHkgImRldiIgKi8KKwljaGFyCQkJKndyaXRlYnVmOwkJLyogd3JpdGUgdHJhbnNmZXJfYnVmZmVyICovCisJY2hhcgkJCSpyZWFkYnVmOwkJLyogcmVhZCB0cmFuc2Zlcl9idWZmZXIgKi8KKwljaGFyCQkJKnN0YXR1c2J1ZjsJCS8qIHN0YXR1cyB0cmFuc2Zlcl9idWZmZXIgKi8KKwlzdHJ1Y3QgdXJiCQkqcmVhZHVyYiwgKndyaXRldXJiOwkvKiBUaGUgdXJicyAqLworCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7CQkJLyogWnp6enogLi4uICovCisJaW50CQkJcmVhZGNvdW50OwkJLyogQ291bnRlciBmb3IgcmVhZHMgKi8KKwlpbnQJCQlpZm51bTsJCQkvKiBJbnRlcmZhY2UgbnVtYmVyICovCisJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGY7CQkJLyogVGhlIGludGVyZmFjZSAqLworCS8qIEFsdGVybmF0ZS1zZXR0aW5nIG51bWJlcnMgYW5kIGVuZHBvaW50cyBmb3IgZWFjaCBwcm90b2NvbAorCSAqICg3LzEve2luZGV4PTEsMiwzfSkgdGhhdCB0aGUgZGV2aWNlIHN1cHBvcnRzOiAqLworCXN0cnVjdCB7CisJCWludAkJCQlhbHRfc2V0dGluZzsKKwkJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSplcHdyaXRlOworCQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmVwcmVhZDsKKwl9CQkJcHJvdG9jb2xbVVNCTFBfTUFYX1BST1RPQ09MU107CisJaW50CQkJY3VycmVudF9wcm90b2NvbDsKKwlpbnQJCQltaW5vcjsJCQkvKiBtaW5vciBudW1iZXIgb2YgZGV2aWNlICovCisJaW50CQkJd2NvbXBsZXRlOwkJLyogd3JpdGluZyBpcyBjb21wbGV0ZWQgKi8KKwlpbnQJCQlyY29tcGxldGU7CQkvKiByZWFkaW5nIGlzIGNvbXBsZXRlZCAqLworCXVuc2lnbmVkIGludAkJcXVpcmtzOwkJCS8qIHF1aXJrcyBmbGFncyAqLworCXVuc2lnbmVkIGNoYXIJCXVzZWQ7CQkJLyogVHJ1ZSBpZiBvcGVuICovCisJdW5zaWduZWQgY2hhcgkJcHJlc2VudDsJCS8qIFRydWUgaWYgbm90IGRpc2Nvbm5lY3RlZCAqLworCXVuc2lnbmVkIGNoYXIJCWJpZGlyOwkJCS8qIGludGVyZmFjZSBpcyBiaWRpcmVjdGlvbmFsICovCisJdW5zaWduZWQgY2hhcgkJKmRldmljZV9pZF9zdHJpbmc7CS8qIElFRUUgMTI4NCBERVZJQ0UgSUQgc3RyaW5nIChwdHIpICovCisJCQkJCQkJLyogZmlyc3QgMiBieXRlcyBhcmUgKGJpZy1lbmRpYW4pIGxlbmd0aCAqLworfTsKKworI2lmZGVmIERFQlVHCitzdGF0aWMgdm9pZCB1c2JscF9kdW1wKHN0cnVjdCB1c2JscCAqdXNibHApIHsKKwlpbnQgcDsKKworCWRiZygidXNibHA9MHglcCIsIHVzYmxwKTsKKwlkYmcoImRldj0weCVwIiwgdXNibHAtPmRldik7CisJZGJnKCJwcmVzZW50PSVkIiwgdXNibHAtPnByZXNlbnQpOworCWRiZygicmVhZGJ1Zj0weCVwIiwgdXNibHAtPnJlYWRidWYpOworCWRiZygid3JpdGVidWY9MHglcCIsIHVzYmxwLT53cml0ZWJ1Zik7CisJZGJnKCJyZWFkdXJiPTB4JXAiLCB1c2JscC0+cmVhZHVyYik7CisJZGJnKCJ3cml0ZXVyYj0weCVwIiwgdXNibHAtPndyaXRldXJiKTsKKwlkYmcoInJlYWRjb3VudD0lZCIsIHVzYmxwLT5yZWFkY291bnQpOworCWRiZygiaWZudW09JWQiLCB1c2JscC0+aWZudW0pOworICAgIGZvciAocCA9IFVTQkxQX0ZJUlNUX1BST1RPQ09MOyBwIDw9IFVTQkxQX0xBU1RfUFJPVE9DT0w7IHArKykgeworCWRiZygicHJvdG9jb2xbJWRdLmFsdF9zZXR0aW5nPSVkIiwgcCwgdXNibHAtPnByb3RvY29sW3BdLmFsdF9zZXR0aW5nKTsKKwlkYmcoInByb3RvY29sWyVkXS5lcHdyaXRlPSVwIiwgcCwgdXNibHAtPnByb3RvY29sW3BdLmVwd3JpdGUpOworCWRiZygicHJvdG9jb2xbJWRdLmVwcmVhZD0lcCIsIHAsIHVzYmxwLT5wcm90b2NvbFtwXS5lcHJlYWQpOworICAgIH0KKwlkYmcoImN1cnJlbnRfcHJvdG9jb2w9JWQiLCB1c2JscC0+Y3VycmVudF9wcm90b2NvbCk7CisJZGJnKCJtaW5vcj0lZCIsIHVzYmxwLT5taW5vcik7CisJZGJnKCJ3Y29tcGxldGU9JWQiLCB1c2JscC0+d2NvbXBsZXRlKTsKKwlkYmcoInJjb21wbGV0ZT0lZCIsIHVzYmxwLT5yY29tcGxldGUpOworCWRiZygicXVpcmtzPSVkIiwgdXNibHAtPnF1aXJrcyk7CisJZGJnKCJ1c2VkPSVkIiwgdXNibHAtPnVzZWQpOworCWRiZygiYmlkaXI9JWQiLCB1c2JscC0+YmlkaXIpOworCWRiZygiZGV2aWNlX2lkX3N0cmluZz1cIiVzXCIiLAorCQl1c2JscC0+ZGV2aWNlX2lkX3N0cmluZyA/CisJCQl1c2JscC0+ZGV2aWNlX2lkX3N0cmluZyArIDIgOgorCQkJKHVuc2lnbmVkIGNoYXIgKikiKG51bGwpIik7Cit9CisjZW5kaWYKKworLyogUXVpcmtzOiB2YXJpb3VzIHByaW50ZXIgcXVpcmtzIGFyZSBoYW5kbGVkIGJ5IHRoaXMgdGFibGUgJiBpdHMgZmxhZ3MuICovCisKK3N0cnVjdCBxdWlya19wcmludGVyX3N0cnVjdCB7CisJX191MTYgdmVuZG9ySWQ7CisJX191MTYgcHJvZHVjdElkOworCXVuc2lnbmVkIGludCBxdWlya3M7Cit9OworCisjZGVmaW5lIFVTQkxQX1FVSVJLX0JJRElSCTB4MQkvKiByZXBvcnRzIGJpZGlyIGJ1dCByZXF1aXJlcyB1bmlkaXJlY3Rpb25hbCBtb2RlIChubyBJTnMvcmVhZHMpICovCisjZGVmaW5lIFVTQkxQX1FVSVJLX1VTQl9JTklUCTB4MgkvKiBuZWVkcyB2ZW5kb3IgVVNCIGluaXQgc3RyaW5nICovCisKK3N0YXRpYyBzdHJ1Y3QgcXVpcmtfcHJpbnRlcl9zdHJ1Y3QgcXVpcmtfcHJpbnRlcnNbXSA9IHsKKwl7IDB4MDNmMCwgMHgwMDA0LCBVU0JMUF9RVUlSS19CSURJUiB9LCAvKiBIUCBEZXNrSmV0IDg5NUMgKi8KKwl7IDB4MDNmMCwgMHgwMTA0LCBVU0JMUF9RVUlSS19CSURJUiB9LCAvKiBIUCBEZXNrSmV0IDg4MEMgKi8KKwl7IDB4MDNmMCwgMHgwMjA0LCBVU0JMUF9RVUlSS19CSURJUiB9LCAvKiBIUCBEZXNrSmV0IDgxNUMgKi8KKwl7IDB4MDNmMCwgMHgwMzA0LCBVU0JMUF9RVUlSS19CSURJUiB9LCAvKiBIUCBEZXNrSmV0IDgxMEMvODEyQyAqLworCXsgMHgwM2YwLCAweDA0MDQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIEhQIERlc2tKZXQgODMwQyAqLworCXsgMHgwM2YwLCAweDA1MDQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIEhQIERlc2tKZXQgODg1QyAqLworCXsgMHgwM2YwLCAweDA2MDQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIEhQIERlc2tKZXQgODQwQyAqLyAgIAorCXsgMHgwM2YwLCAweDA4MDQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIEhQIERlc2tKZXQgODE2QyAqLyAgIAorCXsgMHgwM2YwLCAweDExMDQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIEhQIERlc2tqZXQgOTU5QyAqLworCXsgMHgwNDA5LCAweGVmYmUsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIE5FQyBQaWN0eTkwMCAoSFAgT0VNKSAqLworCXsgMHgwNDA5LCAweGJlZjQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIE5FQyBQaWN0eTc2MCAoSFAgT0VNKSAqLworCXsgMHgwNDA5LCAweGYwYmUsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIE5FQyBQaWN0eTkyMCAoSFAgT0VNKSAqLworCXsgMHgwNDA5LCAweGYxYmUsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIE5FQyBQaWN0eTgwMCAoSFAgT0VNKSAqLworCXsgMCwgMCB9Cit9OworCitzdGF0aWMgaW50IHVzYmxwX3NlbGVjdF9hbHRzKHN0cnVjdCB1c2JscCAqdXNibHApOworc3RhdGljIGludCB1c2JscF9zZXRfcHJvdG9jb2woc3RydWN0IHVzYmxwICp1c2JscCwgaW50IHByb3RvY29sKTsKK3N0YXRpYyBpbnQgdXNibHBfY2FjaGVfZGV2aWNlX2lkX3N0cmluZyhzdHJ1Y3QgdXNibHAgKnVzYmxwKTsKKworLyogZm9yd2FyZCByZWZlcmVuY2UgdG8gbWFrZSBvdXIgbGl2ZXMgZWFzaWVyICovCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNibHBfZHJpdmVyOworc3RhdGljIERFQ0xBUkVfTVVURVgodXNibHBfc2VtKTsJLyogbG9ja3MgdGhlIGV4aXN0ZW5jZSBvZiB1c2JscCdzICovCisKKy8qCisgKiBGdW5jdGlvbnMgZm9yIHVzYmxwIGNvbnRyb2wgbWVzc2FnZXMuCisgKi8KKworc3RhdGljIGludCB1c2JscF9jdHJsX21zZyhzdHJ1Y3QgdXNibHAgKnVzYmxwLCBpbnQgcmVxdWVzdCwgaW50IHR5cGUsIGludCBkaXIsIGludCByZWNpcCwgaW50IHZhbHVlLCB2b2lkICpidWYsIGludCBsZW4pCit7CisJaW50IHJldHZhbDsKKwlpbnQgaW5kZXggPSB1c2JscC0+aWZudW07CisKKwkvKiBIaWdoIGJ5dGUgaGFzIHRoZSBpbnRlcmZhY2UgaW5kZXguCisJICAgTG93IGJ5dGUgaGFzIHRoZSBhbHRlcm5hdGUgc2V0dGluZy4KKwkgKi8KKwlpZiAoKHJlcXVlc3QgPT0gVVNCTFBfUkVRX0dFVF9JRCkgJiYgKHR5cGUgPT0gVVNCX1RZUEVfQ0xBU1MpKSB7CisJICBpbmRleCA9ICh1c2JscC0+aWZudW08PDgpfHVzYmxwLT5wcm90b2NvbFt1c2JscC0+Y3VycmVudF9wcm90b2NvbF0uYWx0X3NldHRpbmc7CisJfQorCisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHVzYmxwLT5kZXYsCisJCWRpciA/IHVzYl9yY3ZjdHJscGlwZSh1c2JscC0+ZGV2LCAwKSA6IHVzYl9zbmRjdHJscGlwZSh1c2JscC0+ZGV2LCAwKSwKKwkJcmVxdWVzdCwgdHlwZSB8IGRpciB8IHJlY2lwLCB2YWx1ZSwgaW5kZXgsIGJ1ZiwgbGVuLCBVU0JMUF9XUklURV9USU1FT1VUKTsKKwlkYmcoInVzYmxwX2NvbnRyb2xfbXNnOiBycTogMHglMDJ4IGRpcjogJWQgcmVjaXA6ICVkIHZhbHVlOiAlZCBpZHg6ICVkIGxlbjogJSN4IHJlc3VsdDogJWQiLAorCQlyZXF1ZXN0LCAhIWRpciwgcmVjaXAsIHZhbHVlLCBpbmRleCwgbGVuLCByZXR2YWwpOworCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKK30KKworI2RlZmluZSB1c2JscF9yZWFkX3N0YXR1cyh1c2JscCwgc3RhdHVzKVwKKwl1c2JscF9jdHJsX21zZyh1c2JscCwgVVNCTFBfUkVRX0dFVF9TVEFUVVMsIFVTQl9UWVBFX0NMQVNTLCBVU0JfRElSX0lOLCBVU0JfUkVDSVBfSU5URVJGQUNFLCAwLCBzdGF0dXMsIDEpCisjZGVmaW5lIHVzYmxwX2dldF9pZCh1c2JscCwgY29uZmlnLCBpZCwgbWF4bGVuKVwKKwl1c2JscF9jdHJsX21zZyh1c2JscCwgVVNCTFBfUkVRX0dFVF9JRCwgVVNCX1RZUEVfQ0xBU1MsIFVTQl9ESVJfSU4sIFVTQl9SRUNJUF9JTlRFUkZBQ0UsIGNvbmZpZywgaWQsIG1heGxlbikKKyNkZWZpbmUgdXNibHBfcmVzZXQodXNibHApXAorCXVzYmxwX2N0cmxfbXNnKHVzYmxwLCBVU0JMUF9SRVFfUkVTRVQsIFVTQl9UWVBFX0NMQVNTLCBVU0JfRElSX09VVCwgVVNCX1JFQ0lQX09USEVSLCAwLCBOVUxMLCAwKQorCisjZGVmaW5lIHVzYmxwX2hwX2NoYW5uZWxfY2hhbmdlX3JlcXVlc3QodXNibHAsIGNoYW5uZWwsIGJ1ZmZlcikgXAorCXVzYmxwX2N0cmxfbXNnKHVzYmxwLCBVU0JMUF9SRVFfSFBfQ0hBTk5FTF9DSEFOR0VfUkVRVUVTVCwgVVNCX1RZUEVfVkVORE9SLCBVU0JfRElSX0lOLCBVU0JfUkVDSVBfSU5URVJGQUNFLCBjaGFubmVsLCBidWZmZXIsIDEpCisKKy8qCisgKiBTZWUgdGhlIGRlc2NyaXB0aW9uIGZvciB1c2JscF9zZWxlY3RfYWx0cygpIGJlbG93IGZvciB0aGUgdXNhZ2UKKyAqIGV4cGxhbmF0aW9uLiAgTG9vayBpbnRvIHlvdXIgL3Byb2MvYnVzL3VzYi9kZXZpY2VzIGFuZCBkbWVzZyBpbgorICogY2FzZSBvZiBhbnkgdHJvdWJsZS4KKyAqLworc3RhdGljIGludCBwcm90b19iaWFzID0gLTE7CisKKy8qCisgKiBVUkIgY2FsbGJhY2suCisgKi8KKworc3RhdGljIHZvaWQgdXNibHBfYnVsa19yZWFkKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYmxwICp1c2JscCA9IHVyYi0+Y29udGV4dDsKKworCWlmICghdXNibHAgfHwgIXVzYmxwLT5kZXYgfHwgIXVzYmxwLT51c2VkIHx8ICF1c2JscC0+cHJlc2VudCkKKwkJcmV0dXJuOworCisJaWYgKHVubGlrZWx5KHVyYi0+c3RhdHVzKSkKKwkJd2FybigidXNibHAlZDogbm9uemVybyByZWFkL3dyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCQl1c2JscC0+bWlub3IsIHVyYi0+c3RhdHVzKTsKKwl1c2JscC0+cmNvbXBsZXRlID0gMTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVzYmxwLT53YWl0KTsKK30KKworc3RhdGljIHZvaWQgdXNibHBfYnVsa193cml0ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2JscCAqdXNibHAgPSB1cmItPmNvbnRleHQ7CisKKwlpZiAoIXVzYmxwIHx8ICF1c2JscC0+ZGV2IHx8ICF1c2JscC0+dXNlZCB8fCAhdXNibHAtPnByZXNlbnQpCisJCXJldHVybjsKKworCWlmICh1bmxpa2VseSh1cmItPnN0YXR1cykpCisJCXdhcm4oInVzYmxwJWQ6IG5vbnplcm8gcmVhZC93cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkJdXNibHAtPm1pbm9yLCB1cmItPnN0YXR1cyk7CisJdXNibHAtPndjb21wbGV0ZSA9IDE7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ1c2JscC0+d2FpdCk7Cit9CisKKy8qCisgKiBHZXQgYW5kIHByaW50IHByaW50ZXIgZXJyb3JzLgorICovCisKK3N0YXRpYyBjaGFyICp1c2JscF9tZXNzYWdlc1tdID0geyAib2siLCAib3V0IG9mIHBhcGVyIiwgIm9mZi1saW5lIiwgIm9uIGZpcmUiIH07CisKK3N0YXRpYyBpbnQgdXNibHBfY2hlY2tfc3RhdHVzKHN0cnVjdCB1c2JscCAqdXNibHAsIGludCBlcnIpCit7CisJdW5zaWduZWQgY2hhciBzdGF0dXMsIG5ld2VyciA9IDA7CisJaW50IGVycm9yOworCisJZXJyb3IgPSB1c2JscF9yZWFkX3N0YXR1cyAodXNibHAsIHVzYmxwLT5zdGF0dXNidWYpOworCWlmIChlcnJvciA8IDApIHsKKwkJZXJyKCJ1c2JscCVkOiBlcnJvciAlZCByZWFkaW5nIHByaW50ZXIgc3RhdHVzIiwKKwkJCXVzYmxwLT5taW5vciwgZXJyb3IpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzdGF0dXMgPSAqdXNibHAtPnN0YXR1c2J1ZjsKKworCWlmICh+c3RhdHVzICYgTFBfUEVSUk9SUCkKKwkJbmV3ZXJyID0gMzsKKwlpZiAoc3RhdHVzICYgTFBfUE9VVFBBKQorCQluZXdlcnIgPSAxOworCWlmICh+c3RhdHVzICYgTFBfUFNFTEVDRCkKKwkJbmV3ZXJyID0gMjsKKworCWlmIChuZXdlcnIgIT0gZXJyKQorCQlpbmZvKCJ1c2JscCVkOiAlcyIsIHVzYmxwLT5taW5vciwgdXNibHBfbWVzc2FnZXNbbmV3ZXJyXSk7CisKKwlyZXR1cm4gbmV3ZXJyOworfQorCisvKgorICogRmlsZSBvcCBmdW5jdGlvbnMuCisgKi8KKworc3RhdGljIGludCB1c2JscF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CisJc3RydWN0IHVzYmxwICp1c2JscDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlpbnQgcmV0dmFsOworCisJaWYgKG1pbm9yIDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkb3duICgmdXNibHBfc2VtKTsKKworCXJldHZhbCA9IC1FTk9ERVY7CisJaW50ZiA9IHVzYl9maW5kX2ludGVyZmFjZSgmdXNibHBfZHJpdmVyLCBtaW5vcik7CisJaWYgKCFpbnRmKSB7CisJCWdvdG8gb3V0OworCX0KKwl1c2JscCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCWlmICghdXNibHAgfHwgIXVzYmxwLT5kZXYgfHwgIXVzYmxwLT5wcmVzZW50KQorCQlnb3RvIG91dDsKKworCXJldHZhbCA9IC1FQlVTWTsKKwlpZiAodXNibHAtPnVzZWQpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBUT0RPOiBuZWVkIHRvIGltcGxlbWVudCBMUF9BQk9SVE9QRU4gKyBPX05PTkJMT0NLIGFzIGluIGRyaXZlcnMvY2hhci9scC5jID8/PworCSAqIFRoaXMgaXMgI2lmIDAtZWQgYmVjYXVzZSB3ZSAqZG9uJ3QqIHdhbnQgdG8gZmFpbCBhbiBvcGVuCisJICoganVzdCBiZWNhdXNlIHRoZSBwcmludGVyIGlzIG9mZi1saW5lLgorCSAqLworI2lmIDAKKwlpZiAoKHJldHZhbCA9IHVzYmxwX2NoZWNrX3N0YXR1cyh1c2JscCwgMCkpKSB7CisJCXJldHZhbCA9IHJldHZhbCA+IDEgPyAtRUlPIDogLUVOT1NQQzsKKwkJZ290byBvdXQ7CisJfQorI2Vsc2UKKwlyZXR2YWwgPSAwOworI2VuZGlmCisKKwl1c2JscC0+dXNlZCA9IDE7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gdXNibHA7CisKKwl1c2JscC0+d3JpdGV1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAwOworCXVzYmxwLT53Y29tcGxldGUgPSAxOyAvKiB3ZSBiZWdpbiB3cml0ZWFibGUgKi8KKwl1c2JscC0+cmNvbXBsZXRlID0gMDsKKworCWlmICh1c2JscC0+YmlkaXIpIHsKKwkJdXNibHAtPnJlYWRjb3VudCA9IDA7CisJCXVzYmxwLT5yZWFkdXJiLT5kZXYgPSB1c2JscC0+ZGV2OworCQlpZiAodXNiX3N1Ym1pdF91cmIodXNibHAtPnJlYWR1cmIsIEdGUF9LRVJORUwpIDwgMCkgeworCQkJcmV0dmFsID0gLUVJTzsKKwkJCXVzYmxwLT51c2VkID0gMDsKKwkJCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJCX0KKwl9CitvdXQ6CisJdXAgKCZ1c2JscF9zZW0pOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHVzYmxwX2NsZWFudXAgKHN0cnVjdCB1c2JscCAqdXNibHApCit7CisJaW5mbygidXNibHAlZDogcmVtb3ZlZCIsIHVzYmxwLT5taW5vcik7CisKKwlrZnJlZSAodXNibHAtPmRldmljZV9pZF9zdHJpbmcpOworCWtmcmVlICh1c2JscC0+c3RhdHVzYnVmKTsKKwl1c2JfZnJlZV91cmIodXNibHAtPndyaXRldXJiKTsKKwl1c2JfZnJlZV91cmIodXNibHAtPnJlYWR1cmIpOworCWtmcmVlICh1c2JscCk7Cit9CisKK3N0YXRpYyB2b2lkIHVzYmxwX3VubGlua191cmJzKHN0cnVjdCB1c2JscCAqdXNibHApCit7CisJdXNiX2tpbGxfdXJiKHVzYmxwLT53cml0ZXVyYik7CisJaWYgKHVzYmxwLT5iaWRpcikKKwkJdXNiX2tpbGxfdXJiKHVzYmxwLT5yZWFkdXJiKTsKK30KKworc3RhdGljIGludCB1c2JscF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2JscCAqdXNibHAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlkb3duICgmdXNibHBfc2VtKTsKKwl1c2JscC0+dXNlZCA9IDA7CisJaWYgKHVzYmxwLT5wcmVzZW50KSB7CisJCXVzYmxwX3VubGlua191cmJzKHVzYmxwKTsKKwl9IGVsc2UgCQkvKiBmaW5pc2ggY2xlYW51cCBmcm9tIGRpc2Nvbm5lY3QgKi8KKwkJdXNibHBfY2xlYW51cCAodXNibHApOworCXVwICgmdXNibHBfc2VtKTsKKwlyZXR1cm4gMDsKK30KKworLyogTm8ga2VybmVsIGxvY2sgLSBmaW5lICovCitzdGF0aWMgdW5zaWduZWQgaW50IHVzYmxwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKK3sKKwlzdHJ1Y3QgdXNibHAgKnVzYmxwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXBvbGxfd2FpdChmaWxlLCAmdXNibHAtPndhaXQsIHdhaXQpOworIAlyZXR1cm4gKCghdXNibHAtPmJpZGlyIHx8ICF1c2JscC0+cmNvbXBsZXRlKSA/IDAgOiBQT0xMSU4gIHwgUE9MTFJETk9STSkKKyAJCQkgICAgICAgfCAoIXVzYmxwLT53Y29tcGxldGUgPyAwIDogUE9MTE9VVCB8IFBPTExXUk5PUk0pOworfQorCitzdGF0aWMgaW50IHVzYmxwX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdXNibHAgKnVzYmxwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCBsZW5ndGgsIGVyciwgaTsKKwl1bnNpZ25lZCBjaGFyIG5ld0NoYW5uZWw7CisJaW50IHN0YXR1czsKKwlpbnQgdHdvaW50c1syXTsKKwlpbnQgcmV0dmFsID0gMDsKKworCWRvd24gKCZ1c2JscC0+c2VtKTsKKwlpZiAoIXVzYmxwLT5wcmVzZW50KSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlkYmcoInVzYmxwX2lvY3RsOiBjbWQ9MHgleCAoJWMgbnI9JWQgbGVuPSVkIGRpcj0lZCkiLCBjbWQsIF9JT0NfVFlQRShjbWQpLAorCQlfSU9DX05SKGNtZCksIF9JT0NfU0laRShjbWQpLCBfSU9DX0RJUihjbWQpICk7CisKKwlpZiAoX0lPQ19UWVBFKGNtZCkgPT0gJ1AnKQkvKiBuZXctc3R5bGUgaW9jdGwgbnVtYmVyICovCisKKwkJc3dpdGNoIChfSU9DX05SKGNtZCkpIHsKKworCQkJY2FzZSBJT0NOUl9HRVRfREVWSUNFX0lEOiAvKiBnZXQgdGhlIERFVklDRV9JRCBzdHJpbmcgKi8KKwkJCQlpZiAoX0lPQ19ESVIoY21kKSAhPSBfSU9DX1JFQUQpIHsKKwkJCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCQkJZ290byBkb25lOworCQkJCX0KKworCQkJCWxlbmd0aCA9IHVzYmxwX2NhY2hlX2RldmljZV9pZF9zdHJpbmcodXNibHApOworCQkJCWlmIChsZW5ndGggPCAwKSB7CisJCQkJCXJldHZhbCA9IGxlbmd0aDsKKwkJCQkJZ290byBkb25lOworCQkJCX0KKwkJCQlpZiAobGVuZ3RoID4gX0lPQ19TSVpFKGNtZCkpCisJCQkJCWxlbmd0aCA9IF9JT0NfU0laRShjbWQpOyAvKiB0cnVuY2F0ZSAqLworCisJCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgYXJnLAorCQkJCQkJdXNibHAtPmRldmljZV9pZF9zdHJpbmcsCisJCQkJCQkodW5zaWduZWQgbG9uZykgbGVuZ3RoKSkgeworCQkJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSU9DTlJfR0VUX1BST1RPQ09MUzoKKwkJCQlpZiAoX0lPQ19ESVIoY21kKSAhPSBfSU9DX1JFQUQgfHwKKwkJCQkgICAgX0lPQ19TSVpFKGNtZCkgPCBzaXplb2YodHdvaW50cykpIHsKKwkJCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCQkJZ290byBkb25lOworCQkJCX0KKworCQkJCXR3b2ludHNbMF0gPSB1c2JscC0+Y3VycmVudF9wcm90b2NvbDsKKwkJCQl0d29pbnRzWzFdID0gMDsKKwkJCQlmb3IgKGkgPSBVU0JMUF9GSVJTVF9QUk9UT0NPTDsKKwkJCQkgICAgIGkgPD0gVVNCTFBfTEFTVF9QUk9UT0NPTDsgaSsrKSB7CisJCQkJCWlmICh1c2JscC0+cHJvdG9jb2xbaV0uYWx0X3NldHRpbmcgPj0gMCkKKwkJCQkJCXR3b2ludHNbMV0gfD0gKDE8PGkpOworCQkJCX0KKworCQkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLAorCQkJCQkJKHVuc2lnbmVkIGNoYXIgKil0d29pbnRzLAorCQkJCQkJc2l6ZW9mKHR3b2ludHMpKSkgeworCQkJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSU9DTlJfU0VUX1BST1RPQ09MOgorCQkJCWlmIChfSU9DX0RJUihjbWQpICE9IF9JT0NfV1JJVEUpIHsKKwkJCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCQkJZ290byBkb25lOworCQkJCX0KKworI2lmZGVmIERFQlVHCisJCQkJaWYgKGFyZyA9PSAtMTApIHsKKwkJCQkJdXNibHBfZHVtcCh1c2JscCk7CisJCQkJCWJyZWFrOworCQkJCX0KKyNlbmRpZgorCisJCQkJdXNibHBfdW5saW5rX3VyYnModXNibHApOworCQkJCXJldHZhbCA9IHVzYmxwX3NldF9wcm90b2NvbCh1c2JscCwgYXJnKTsKKwkJCQlpZiAocmV0dmFsIDwgMCkgeworCQkJCQl1c2JscF9zZXRfcHJvdG9jb2wodXNibHAsCisJCQkJCQl1c2JscC0+Y3VycmVudF9wcm90b2NvbCk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIElPQ05SX0hQX1NFVF9DSEFOTkVMOgorCQkJCWlmIChfSU9DX0RJUihjbWQpICE9IF9JT0NfV1JJVEUgfHwKKwkJCQkgICAgbGUxNl90b19jcHUodXNibHAtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgIT0gMHgwM0YwIHx8CisJCQkJICAgIHVzYmxwLT5xdWlya3MgJiBVU0JMUF9RVUlSS19CSURJUikgeworCQkJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCisJCQkJZXJyID0gdXNibHBfaHBfY2hhbm5lbF9jaGFuZ2VfcmVxdWVzdCh1c2JscCwKKwkJCQkJYXJnLCAmbmV3Q2hhbm5lbCk7CisJCQkJaWYgKGVyciA8IDApIHsKKwkJCQkJZXJyKCJ1c2JscCVkOiBlcnJvciA9ICVkIHNldHRpbmcgIgorCQkJCQkJIkhQIGNoYW5uZWwiLAorCQkJCQkJdXNibHAtPm1pbm9yLCBlcnIpOworCQkJCQlyZXR2YWwgPSAtRUlPOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCisJCQkJZGJnKCJ1c2JscCVkIHJlcXVlc3RlZC9nb3QgSFAgY2hhbm5lbCAlbGQvJWQiLAorCQkJCQl1c2JscC0+bWlub3IsIGFyZywgbmV3Q2hhbm5lbCk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSU9DTlJfR0VUX0JVU19BRERSRVNTOgorCQkJCWlmIChfSU9DX0RJUihjbWQpICE9IF9JT0NfUkVBRCB8fAorCQkJCSAgICBfSU9DX1NJWkUoY21kKSA8IHNpemVvZih0d29pbnRzKSkgeworCQkJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCisJCQkJdHdvaW50c1swXSA9IHVzYmxwLT5kZXYtPmJ1cy0+YnVzbnVtOworCQkJCXR3b2ludHNbMV0gPSB1c2JscC0+ZGV2LT5kZXZudW07CisJCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsCisJCQkJCQkodW5zaWduZWQgY2hhciAqKXR3b2ludHMsCisJCQkJCQlzaXplb2YodHdvaW50cykpKSB7CisJCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJCWdvdG8gZG9uZTsKKwkJCQl9CisKKwkJCQlkYmcoInVzYmxwJWQgaXMgYnVzPSVkLCBkZXZpY2U9JWQiLAorCQkJCQl1c2JscC0+bWlub3IsIHR3b2ludHNbMF0sIHR3b2ludHNbMV0pOworCQkJCWJyZWFrOworCisJCQljYXNlIElPQ05SX0dFVF9WSURfUElEOgorCQkJCWlmIChfSU9DX0RJUihjbWQpICE9IF9JT0NfUkVBRCB8fAorCQkJCSAgICBfSU9DX1NJWkUoY21kKSA8IHNpemVvZih0d29pbnRzKSkgeworCQkJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCisJCQkJdHdvaW50c1swXSA9IGxlMTZfdG9fY3B1KHVzYmxwLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCQkJCXR3b2ludHNbMV0gPSBsZTE2X3RvX2NwdSh1c2JscC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsCisJCQkJCQkodW5zaWduZWQgY2hhciAqKXR3b2ludHMsCisJCQkJCQlzaXplb2YodHdvaW50cykpKSB7CisJCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJCWdvdG8gZG9uZTsKKwkJCQl9CisKKwkJCQlkYmcoInVzYmxwJWQgaXMgVklEPTB4JTQuNFgsIFBJRD0weCU0LjRYIiwKKwkJCQkJdXNibHAtPm1pbm9yLCB0d29pbnRzWzBdLCB0d29pbnRzWzFdKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBJT0NOUl9TT0ZUX1JFU0VUOgorCQkJCWlmIChfSU9DX0RJUihjbWQpICE9IF9JT0NfTk9ORSkgeworCQkJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQorCQkJCXJldHZhbCA9IHVzYmxwX3Jlc2V0KHVzYmxwKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dmFsID0gLUVOT1RUWTsKKwkJfQorCWVsc2UJLyogb2xkLXN0eWxlIGlvY3RsIHZhbHVlICovCisJCXN3aXRjaCAoY21kKSB7CisKKwkJCWNhc2UgTFBHRVRTVEFUVVM6CisJCQkJaWYgKHVzYmxwX3JlYWRfc3RhdHVzKHVzYmxwLCB1c2JscC0+c3RhdHVzYnVmKSkgeworCQkJCQllcnIoInVzYmxwJWQ6IGZhaWxlZCByZWFkaW5nIHByaW50ZXIgc3RhdHVzIiwgdXNibHAtPm1pbm9yKTsKKwkJCQkJcmV0dmFsID0gLUVJTzsKKwkJCQkJZ290byBkb25lOworCQkJCX0KKwkJCQlzdGF0dXMgPSAqdXNibHAtPnN0YXR1c2J1ZjsKKwkJCQlpZiAoY29weV90b191c2VyICgodm9pZCBfX3VzZXIgKilhcmcsICZzdGF0dXMsIHNpemVvZihpbnQpKSkKKwkJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlyZXR2YWwgPSAtRU5PVFRZOworCQl9CisKK2RvbmU6CisJdXAgKCZ1c2JscC0+c2VtKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3NpemVfdCB1c2JscF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJc3RydWN0IHVzYmxwICp1c2JscCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgdGltZW91dCwgZXJyID0gMCwgdHJhbnNmZXJfbGVuZ3RoID0gMDsKKwlzaXplX3Qgd3JpdGVjb3VudCA9IDA7CisKKwl3aGlsZSAod3JpdGVjb3VudCA8IGNvdW50KSB7CisJCWlmICghdXNibHAtPndjb21wbGV0ZSkgeworCQkJYmFycmllcigpOworCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQkJd3JpdGVjb3VudCArPSB0cmFuc2Zlcl9sZW5ndGg7CisJCQkJcmV0dXJuIHdyaXRlY291bnQgPyB3cml0ZWNvdW50IDogLUVBR0FJTjsKKwkJCX0KKworCQkJdGltZW91dCA9IFVTQkxQX1dSSVRFX1RJTUVPVVQ7CisJCQlhZGRfd2FpdF9xdWV1ZSgmdXNibHAtPndhaXQsICZ3YWl0KTsKKwkJCXdoaWxlICggMT09MSApIHsKKworCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmdXNibHAtPndhaXQsICZ3YWl0KTsKKwkJCQkJcmV0dXJuIHdyaXRlY291bnQgPyB3cml0ZWNvdW50IDogLUVJTlRSOworCQkJCX0KKwkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJCWlmICh0aW1lb3V0ICYmICF1c2JscC0+d2NvbXBsZXRlKSB7CisJCQkJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOworCQkJCX0gZWxzZSB7CisJCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCXJlbW92ZV93YWl0X3F1ZXVlKCZ1c2JscC0+d2FpdCwgJndhaXQpOworCQl9CisKKwkJZG93biAoJnVzYmxwLT5zZW0pOworCQlpZiAoIXVzYmxwLT5wcmVzZW50KSB7CisJCQl1cCAoJnVzYmxwLT5zZW0pOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQlpZiAodXNibHAtPndyaXRldXJiLT5zdGF0dXMgIT0gMCkgeworCQkJaWYgKHVzYmxwLT5xdWlya3MgJiBVU0JMUF9RVUlSS19CSURJUikgeworCQkJCWlmICghdXNibHAtPndjb21wbGV0ZSkKKwkJCQkJZXJyKCJ1c2JscCVkOiBlcnJvciAlZCB3cml0aW5nIHRvIHByaW50ZXIiLAorCQkJCQkJdXNibHAtPm1pbm9yLCB1c2JscC0+d3JpdGV1cmItPnN0YXR1cyk7CisJCQkJZXJyID0gdXNibHAtPndyaXRldXJiLT5zdGF0dXM7CisJCQl9IGVsc2UKKwkJCQllcnIgPSB1c2JscF9jaGVja19zdGF0dXModXNibHAsIGVycik7CisJCQl1cCAoJnVzYmxwLT5zZW0pOworCisJCQkvKiBpZiB0aGUgZmF1bHQgd2FzIGR1ZSB0byBkaXNjb25uZWN0LCBsZXQga2h1YmQncworCQkJICogY2FsbCB0byB1c2JscF9kaXNjb25uZWN0KCkgZ3JhYiB1c2JscC0+c2VtIC4uLgorCQkJICovCisJCQlzY2hlZHVsZSAoKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogV2UgbXVzdCBpbmNyZW1lbnQgd3JpdGVjb3VudCBoZXJlLCBhbmQgbm90IGF0IHRoZQorCQkgKiBlbmQgb2YgdGhlIGxvb3AuIE90aGVyd2lzZSwgdGhlIGZpbmFsIGxvb3AgaXRlcmF0aW9uIG1heQorCQkgKiBiZSBza2lwcGVkLCBsZWFkaW5nIHRvIGluY29tcGxldGUgcHJpbnRlciBvdXRwdXQuCisJCSAqLworCQl3cml0ZWNvdW50ICs9IHRyYW5zZmVyX2xlbmd0aDsKKwkJaWYgKHdyaXRlY291bnQgPT0gY291bnQpIHsKKwkJCXVwKCZ1c2JscC0+c2VtKTsKKwkJCWJyZWFrOworCQl9CisKKwkJdHJhbnNmZXJfbGVuZ3RoPShjb3VudCAtIHdyaXRlY291bnQpOworCQlpZiAodHJhbnNmZXJfbGVuZ3RoID4gVVNCTFBfQlVGX1NJWkUpCisJCQl0cmFuc2Zlcl9sZW5ndGggPSBVU0JMUF9CVUZfU0laRTsKKworCQl1c2JscC0+d3JpdGV1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSB0cmFuc2Zlcl9sZW5ndGg7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKHVzYmxwLT53cml0ZXVyYi0+dHJhbnNmZXJfYnVmZmVyLCAKKwkJCQkgICBidWZmZXIgKyB3cml0ZWNvdW50LCB0cmFuc2Zlcl9sZW5ndGgpKSB7CisJCQl1cCgmdXNibHAtPnNlbSk7CisJCQlyZXR1cm4gd3JpdGVjb3VudCA/IHdyaXRlY291bnQgOiAtRUZBVUxUOworCQl9CisKKwkJdXNibHAtPndyaXRldXJiLT5kZXYgPSB1c2JscC0+ZGV2OworCQl1c2JscC0+d2NvbXBsZXRlID0gMDsKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXNibHAtPndyaXRldXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVycikgeworCQkJaWYgKGVyciAhPSAtRU5PTUVNKQorCQkJCWNvdW50ID0gLUVJTzsKKwkJCWVsc2UKKwkJCQljb3VudCA9IHdyaXRlY291bnQgPyB3cml0ZWNvdW50IDogLUVOT01FTTsKKwkJCXVwICgmdXNibHAtPnNlbSk7CisJCQlicmVhazsKKwkJfQorCQl1cCAoJnVzYmxwLT5zZW0pOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgdXNibHBfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHVzYmxwICp1c2JscCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworCWlmICghdXNibHAtPmJpZGlyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRvd24gKCZ1c2JscC0+c2VtKTsKKwlpZiAoIXVzYmxwLT5wcmVzZW50KSB7CisJCWNvdW50ID0gLUVOT0RFVjsKKwkJZ290byBkb25lOworCX0KKworCWlmICghdXNibHAtPnJjb21wbGV0ZSkgeworCQliYXJyaWVyKCk7CisKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQljb3VudCA9IC1FQUdBSU47CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlhZGRfd2FpdF9xdWV1ZSgmdXNibHAtPndhaXQsICZ3YWl0KTsKKwkJd2hpbGUgKDE9PTEpIHsKKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCWNvdW50ID0gLUVJTlRSOworCQkJCXJlbW92ZV93YWl0X3F1ZXVlKCZ1c2JscC0+d2FpdCwgJndhaXQpOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCXVwICgmdXNibHAtPnNlbSk7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJaWYgKCF1c2JscC0+cmNvbXBsZXRlKSB7CisJCQkJc2NoZWR1bGUoKTsKKwkJCX0gZWxzZSB7CisJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWRvd24gKCZ1c2JscC0+c2VtKTsKKwkJfQorCQlyZW1vdmVfd2FpdF9xdWV1ZSgmdXNibHAtPndhaXQsICZ3YWl0KTsKKwl9CisKKwlpZiAoIXVzYmxwLT5wcmVzZW50KSB7CisJCWNvdW50ID0gLUVOT0RFVjsKKwkJZ290byBkb25lOworCX0KKworCWlmICh1c2JscC0+cmVhZHVyYi0+c3RhdHVzKSB7CisJCWVycigidXNibHAlZDogZXJyb3IgJWQgcmVhZGluZyBmcm9tIHByaW50ZXIiLAorCQkJdXNibHAtPm1pbm9yLCB1c2JscC0+cmVhZHVyYi0+c3RhdHVzKTsKKwkJdXNibHAtPnJlYWR1cmItPmRldiA9IHVzYmxwLT5kZXY7CisgCQl1c2JscC0+cmVhZGNvdW50ID0gMDsKKwkJdXNibHAtPnJjb21wbGV0ZSA9IDA7CisJCWlmICh1c2Jfc3VibWl0X3VyYih1c2JscC0+cmVhZHVyYiwgR0ZQX0tFUk5FTCkgPCAwKQorCQkJZGJnKCJlcnJvciBzdWJtaXR0aW5nIHVyYiIpOworCQljb3VudCA9IC1FSU87CisJCWdvdG8gZG9uZTsKKwl9CisKKwljb3VudCA9IGNvdW50IDwgdXNibHAtPnJlYWR1cmItPmFjdHVhbF9sZW5ndGggLSB1c2JscC0+cmVhZGNvdW50ID8KKwkJY291bnQgOgl1c2JscC0+cmVhZHVyYi0+YWN0dWFsX2xlbmd0aCAtIHVzYmxwLT5yZWFkY291bnQ7CisKKwlpZiAoY29weV90b191c2VyKGJ1ZmZlciwgdXNibHAtPnJlYWR1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVzYmxwLT5yZWFkY291bnQsIGNvdW50KSkgeworCQljb3VudCA9IC1FRkFVTFQ7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoKHVzYmxwLT5yZWFkY291bnQgKz0gY291bnQpID09IHVzYmxwLT5yZWFkdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCXVzYmxwLT5yZWFkY291bnQgPSAwOworCQl1c2JscC0+cmVhZHVyYi0+ZGV2ID0gdXNibHAtPmRldjsKKwkJdXNibHAtPnJjb21wbGV0ZSA9IDA7CisJCWlmICh1c2Jfc3VibWl0X3VyYih1c2JscC0+cmVhZHVyYiwgR0ZQX0tFUk5FTCkpIHsKKwkJCWNvdW50ID0gLUVJTzsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworZG9uZToKKwl1cCAoJnVzYmxwLT5zZW0pOworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIENoZWNrcyBmb3IgcHJpbnRlcnMgdGhhdCBoYXZlIHF1aXJrcywgc3VjaCBhcyByZXF1aXJpbmcgdW5pZGlyZWN0aW9uYWwKKyAqIGNvbW11bmljYXRpb24gYnV0IHJlcG9ydGluZyBiaWRpcmVjdGlvbmFsOyBjdXJyZW50bHkgc29tZSBIUCBwcmludGVycworICogaGF2ZSB0aGlzIGZsYXcgKEhQIDgxMCwgODgwLCA4OTUsIGV0Yy4pLCBvciBuZWVkaW5nIGFuIGluaXQgc3RyaW5nCisgKiBzZW50IGF0IGVhY2ggb3BlbiAobGlrZSBzb21lIEVwc29ucykuCisgKiBSZXR1cm5zIDEgaWYgZm91bmQsIDAgaWYgbm90IGZvdW5kLgorICoKKyAqIEhQIHJlY29tbWVuZGVkIHRoYXQgd2UgdXNlIHRoZSBiaWRpcmVjdGlvbmFsIGludGVyZmFjZSBidXQKKyAqIGRvbid0IGF0dGVtcHQgYW55IGJ1bGsgSU4gdHJhbnNmZXJzIGZyb20gdGhlIElOIGVuZHBvaW50LgorICogSGVyZSdzIHNvbWUgbW9yZSBkZXRhaWwgb24gdGhlIHByb2JsZW06CisgKiBUaGUgcHJvYmxlbSBpcyBub3QgdGhhdCBpdCBpc24ndCBiaWRpcmVjdGlvbmFsIHRob3VnaC4gVGhlIHByb2JsZW0KKyAqIGlzIHRoYXQgaWYgeW91IHJlcXVlc3QgYSBkZXZpY2UgSUQsIG9yIHN0YXR1cyBpbmZvcm1hdGlvbiwgd2hpbGUKKyAqIHRoZSBidWZmZXJzIGFyZSBmdWxsLCB0aGUgcmV0dXJuIGRhdGEgd2lsbCBlbmQgdXAgaW4gdGhlIHByaW50IGRhdGEKKyAqIGJ1ZmZlci4gRm9yIGV4YW1wbGUgaWYgeW91IG1ha2Ugc3VyZSB5b3UgbmV2ZXIgcmVxdWVzdCB0aGUgZGV2aWNlIElECisgKiB3aGlsZSB5b3UgYXJlIHNlbmRpbmcgcHJpbnQgZGF0YSwgYW5kIHlvdSBkb24ndCB0cnkgdG8gcXVlcnkgdGhlCisgKiBwcmludGVyIHN0YXR1cyBldmVyeSBjb3VwbGUgb2YgbWlsbGlzZWNvbmRzLCB5b3Ugd2lsbCBwcm9iYWJseSBiZSBPSy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCB1c2JscF9xdWlya3MgKF9fdTE2IHZlbmRvciwgX191MTYgcHJvZHVjdCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IHF1aXJrX3ByaW50ZXJzW2ldLnZlbmRvcklkOyBpKyspIHsKKwkJaWYgKHZlbmRvciA9PSBxdWlya19wcmludGVyc1tpXS52ZW5kb3JJZCAmJgorCQkgICAgcHJvZHVjdCA9PSBxdWlya19wcmludGVyc1tpXS5wcm9kdWN0SWQpCisJCQlyZXR1cm4gcXVpcmtfcHJpbnRlcnNbaV0ucXVpcmtzOworIAl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYmxwX2ZvcHMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLnJlYWQgPQkJdXNibHBfcmVhZCwKKwkud3JpdGUgPQl1c2JscF93cml0ZSwKKwkucG9sbCA9CQl1c2JscF9wb2xsLAorCS5pb2N0bCA9CXVzYmxwX2lvY3RsLAorCS5vcGVuID0JCXVzYmxwX29wZW4sCisJLnJlbGVhc2UgPQl1c2JscF9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIHVzYmxwX2NsYXNzID0geworCS5uYW1lID0JCSJ1c2IvbHAlZCIsCisJLmZvcHMgPQkJJnVzYmxwX2ZvcHMsCisJLm1vZGUgPQkJU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdSUCB8IFNfSVdHUlAsCisJLm1pbm9yX2Jhc2UgPQlVU0JMUF9NSU5PUl9CQVNFLAorfTsKKworc3RhdGljIGludCB1c2JscF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAoaW50Zik7CisJc3RydWN0IHVzYmxwICp1c2JscCA9IE5VTEw7CisJaW50IHByb3RvY29sOworCWludCByZXR2YWw7CisKKwkvKiBNYWxsb2MgYW5kIHN0YXJ0IGluaXRpYWxpemluZyB1c2JscCBzdHJ1Y3R1cmUgc28gd2UgY2FuIHVzZSBpdAorCSAqIGRpcmVjdGx5LiAqLworCWlmICghKHVzYmxwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYmxwKSwgR0ZQX0tFUk5FTCkpKSB7CisJCWVycigib3V0IG9mIG1lbW9yeSBmb3IgdXNibHAiKTsKKwkJZ290byBhYm9ydDsKKwl9CisJbWVtc2V0KHVzYmxwLCAwLCBzaXplb2Yoc3RydWN0IHVzYmxwKSk7CisJdXNibHAtPmRldiA9IGRldjsKKwlpbml0X01VVEVYICgmdXNibHAtPnNlbSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmdXNibHAtPndhaXQpOworCXVzYmxwLT5pZm51bSA9IGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisJdXNibHAtPmludGYgPSBpbnRmOworCisJdXNibHAtPndyaXRldXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVzYmxwLT53cml0ZXVyYikgeworCQllcnIoIm91dCBvZiBtZW1vcnkiKTsKKwkJZ290byBhYm9ydDsKKwl9CisJdXNibHAtPnJlYWR1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghdXNibHAtPnJlYWR1cmIpIHsKKwkJZXJyKCJvdXQgb2YgbWVtb3J5Iik7CisJCWdvdG8gYWJvcnQ7CisJfQorCisJLyogTWFsbG9jIGRldmljZSBJRCBzdHJpbmcgYnVmZmVyIHRvIHRoZSBsYXJnZXN0IGV4cGVjdGVkIGxlbmd0aCwKKwkgKiBzaW5jZSB3ZSBjYW4gcmUtcXVlcnkgaXQgb24gYW4gaW9jdGwgYW5kIGEgZHluYW1pYyBzdHJpbmcKKwkgKiBjb3VsZCBjaGFuZ2UgaW4gbGVuZ3RoLiAqLworCWlmICghKHVzYmxwLT5kZXZpY2VfaWRfc3RyaW5nID0ga21hbGxvYyhVU0JMUF9ERVZJQ0VfSURfU0laRSwgR0ZQX0tFUk5FTCkpKSB7CisJCWVycigib3V0IG9mIG1lbW9yeSBmb3IgZGV2aWNlX2lkX3N0cmluZyIpOworCQlnb3RvIGFib3J0OworCX0KKworCXVzYmxwLT53cml0ZWJ1ZiA9IHVzYmxwLT5yZWFkYnVmID0gTlVMTDsKKwl1c2JscC0+d3JpdGV1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJdXNibHAtPnJlYWR1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJLyogTWFsbG9jIHdyaXRlICYgcmVhZCBidWZmZXJzLiAgV2Ugc29tZXdoYXQgd2FzdGVmdWxseQorCSAqIG1hbGxvYyBib3RoIHJlZ2FyZGxlc3Mgb2YgYmlkaXJlY3Rpb25hbGl0eSwgYmVjYXVzZSB0aGUKKwkgKiBhbHRlcm5hdGUgc2V0dGluZyBjYW4gYmUgY2hhbmdlZCBsYXRlciB2aWEgYW4gaW9jdGwuICovCisJaWYgKCEodXNibHAtPndyaXRlYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIFVTQkxQX0JVRl9TSVpFLAorCQkJCUdGUF9LRVJORUwsICZ1c2JscC0+d3JpdGV1cmItPnRyYW5zZmVyX2RtYSkpKSB7CisJCWVycigib3V0IG9mIG1lbW9yeSBmb3Igd3JpdGUgYnVmIik7CisJCWdvdG8gYWJvcnQ7CisJfQorCWlmICghKHVzYmxwLT5yZWFkYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIFVTQkxQX0JVRl9TSVpFLAorCQkJCUdGUF9LRVJORUwsICZ1c2JscC0+cmVhZHVyYi0+dHJhbnNmZXJfZG1hKSkpIHsKKwkJZXJyKCJvdXQgb2YgbWVtb3J5IGZvciByZWFkIGJ1ZiIpOworCQlnb3RvIGFib3J0OworCX0KKworCS8qIEFsbG9jYXRlIGJ1ZmZlciBmb3IgcHJpbnRlciBzdGF0dXMgKi8KKwl1c2JscC0+c3RhdHVzYnVmID0ga21hbGxvYyhTVEFUVVNfQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghdXNibHAtPnN0YXR1c2J1ZikgeworCQllcnIoIm91dCBvZiBtZW1vcnkgZm9yIHN0YXR1c2J1ZiIpOworCQlnb3RvIGFib3J0OworCX0KKworCS8qIExvb2t1cCBxdWlya3MgZm9yIHRoaXMgcHJpbnRlci4gKi8KKwl1c2JscC0+cXVpcmtzID0gdXNibHBfcXVpcmtzKAorCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisKKwkvKiBBbmFseXplIGFuZCBwaWNrIGluaXRpYWwgYWx0ZXJuYXRlIHNldHRpbmdzIGFuZCBlbmRwb2ludHMuICovCisJcHJvdG9jb2wgPSB1c2JscF9zZWxlY3RfYWx0cyh1c2JscCk7CisJaWYgKHByb3RvY29sIDwgMCkgeworCQlkYmcoImluY29tcGF0aWJsZSBwcmludGVyLWNsYXNzIGRldmljZSAweCU0LjRYLzB4JTQuNFgiLAorCQkJbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJCWxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKKwkJZ290byBhYm9ydDsKKwl9CisKKwkvKiBTZXR1cCB0aGUgc2VsZWN0ZWQgYWx0ZXJuYXRlIHNldHRpbmcgYW5kIGVuZHBvaW50cy4gKi8KKwlpZiAodXNibHBfc2V0X3Byb3RvY29sKHVzYmxwLCBwcm90b2NvbCkgPCAwKQorCQlnb3RvIGFib3J0OworCisJLyogUmV0cmlldmUgYW5kIHN0b3JlIHRoZSBkZXZpY2UgSUQgc3RyaW5nLiAqLworCXVzYmxwX2NhY2hlX2RldmljZV9pZF9zdHJpbmcodXNibHApOworCisjaWZkZWYgREVCVUcKKwl1c2JscF9jaGVja19zdGF0dXModXNibHAsIDApOworI2VuZGlmCisKKwlpbmZvKCJ1c2JscCVkOiBVU0IgJXNkaXJlY3Rpb25hbCBwcmludGVyIGRldiAlZCAiCisJCSJpZiAlZCBhbHQgJWQgcHJvdG8gJWQgdmlkIDB4JTQuNFggcGlkIDB4JTQuNFgiLAorCQl1c2JscC0+bWlub3IsIHVzYmxwLT5iaWRpciA/ICJCaSIgOiAiVW5pIiwgZGV2LT5kZXZudW0sCisJCXVzYmxwLT5pZm51bSwKKwkJdXNibHAtPnByb3RvY29sW3VzYmxwLT5jdXJyZW50X3Byb3RvY29sXS5hbHRfc2V0dGluZywKKwkJdXNibHAtPmN1cnJlbnRfcHJvdG9jb2wsCisJCWxlMTZfdG9fY3B1KHVzYmxwLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQlsZTE2X3RvX2NwdSh1c2JscC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgdXNibHApOworCisJdXNibHAtPnByZXNlbnQgPSAxOworCisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCAmdXNibHBfY2xhc3MpOworCWlmIChyZXR2YWwpIHsKKwkJZXJyKCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuIik7CisJCWdvdG8gYWJvcnRfaW50ZmRhdGE7CisJfQorCXVzYmxwLT5taW5vciA9IGludGYtPm1pbm9yOworCisJcmV0dXJuIDA7CisKK2Fib3J0X2ludGZkYXRhOgorCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworYWJvcnQ6CisJaWYgKHVzYmxwKSB7CisJCWlmICh1c2JscC0+d3JpdGVidWYpCisJCQl1c2JfYnVmZmVyX2ZyZWUgKHVzYmxwLT5kZXYsIFVTQkxQX0JVRl9TSVpFLAorCQkJCXVzYmxwLT53cml0ZWJ1ZiwgdXNibHAtPndyaXRldXJiLT50cmFuc2Zlcl9kbWEpOworCQlpZiAodXNibHAtPnJlYWRidWYpCisJCQl1c2JfYnVmZmVyX2ZyZWUgKHVzYmxwLT5kZXYsIFVTQkxQX0JVRl9TSVpFLAorCQkJCXVzYmxwLT5yZWFkYnVmLCB1c2JscC0+d3JpdGV1cmItPnRyYW5zZmVyX2RtYSk7CisJCWtmcmVlKHVzYmxwLT5zdGF0dXNidWYpOworCQlrZnJlZSh1c2JscC0+ZGV2aWNlX2lkX3N0cmluZyk7CisJCXVzYl9mcmVlX3VyYih1c2JscC0+d3JpdGV1cmIpOworCQl1c2JfZnJlZV91cmIodXNibHAtPnJlYWR1cmIpOworCQlrZnJlZSh1c2JscCk7CisJfQorCXJldHVybiAtRUlPOworfQorCisvKgorICogV2UgYXJlIGEgIm5ldyIgc3R5bGUgZHJpdmVyIHdpdGggdXNiX2RldmljZV9pZCB0YWJsZSwKKyAqIGJ1dCBvdXIgcmVxdWlyZW1lbnRzIGFyZSB0b28gaW50cmljYXRlIGZvciBzaW1wbGUgbWF0Y2ggdG8gaGFuZGxlLgorICoKKyAqIFRoZSAicHJvdG9fYmlhcyIgb3B0aW9uIG1heSBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHByZWZlcnJlZCBwcm90b2NvbAorICogZm9yIGFsbCBVU0IgcHJpbnRlcnMgKDE9Ny8xLzEsIDI9Ny8xLzIsIDM9Ny8xLzMpLiAgSWYgdGhlIGRldmljZQorICogc3VwcG9ydHMgdGhlIHByZWZlcnJlZCBwcm90b2NvbCwgdGhlbiB3ZSBiaW5kIHRvIGl0LgorICoKKyAqIFRoZSBiZXN0IGludGVyZmFjZSBmb3IgdXMgaXMgNy8xLzIsIGJlY2F1c2UgaXQgaXMgY29tcGF0aWJsZQorICogd2l0aCBhIHN0cmVhbSBvZiBjaGFyYWN0ZXJzLiBJZiB3ZSBmaW5kIGl0LCB3ZSBiaW5kIHRvIGl0LgorICoKKyAqIE5vdGUgdGhhdCB0aGUgcGVvcGxlIGZyb20gaHBvai5zb3VyY2Vmb3JnZS5uZXQgbmVlZCB0byBiZSBhYmxlIHRvCisgKiBiaW5kIHRvIDcvMS8zIChNTEMvMTI4NC40KSwgc28gd2UgcHJvdmlkZSB0aGVtIGlvY3RscyBmb3IgdGhpcyBwdXJwb3NlLgorICoKKyAqIEZhaWxpbmcgNy8xLzIsIHdlIGxvb2sgZm9yIDcvMS8zLCBldmVuIHRob3VnaCBpdCdzIHByb2JhYmx5IG5vdAorICogc3RyZWFtLWNvbXBhdGlibGUsIGJlY2F1c2UgdGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIG9sZCBjb2RlLgorICoKKyAqIElmIG5vdGhpbmcgZWxzZSwgd2UgYmluZCB0byA3LzEvMSAtIHRoZSB1bmlkaXJlY3Rpb25hbCBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyBpbnQgdXNibHBfc2VsZWN0X2FsdHMoc3RydWN0IHVzYmxwICp1c2JscCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZfYWx0OworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmZDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCwgKmVwd3JpdGUsICplcHJlYWQ7CisJaW50IHAsIGksIGU7CisKKwlpZl9hbHQgPSB1c2JscC0+aW50ZjsKKworCWZvciAocCA9IDA7IHAgPCBVU0JMUF9NQVhfUFJPVE9DT0xTOyBwKyspCisJCXVzYmxwLT5wcm90b2NvbFtwXS5hbHRfc2V0dGluZyA9IC0xOworCisJLyogRmluZCBvdXQgd2hhdCB3ZSBoYXZlLiAqLworCWZvciAoaSA9IDA7IGkgPCBpZl9hbHQtPm51bV9hbHRzZXR0aW5nOyBpKyspIHsKKwkJaWZkID0gJmlmX2FsdC0+YWx0c2V0dGluZ1tpXTsKKworCQlpZiAoaWZkLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyAhPSA3IHx8IGlmZC0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gMSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpZmQtPmRlc2MuYkludGVyZmFjZVByb3RvY29sIDwgVVNCTFBfRklSU1RfUFJPVE9DT0wgfHwKKwkJICAgIGlmZC0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wgPiBVU0JMUF9MQVNUX1BST1RPQ09MKQorCQkJY29udGludWU7CisKKwkJLyogTG9vayBmb3IgYnVsayBPVVQgYW5kIElOIGVuZHBvaW50cy4gKi8KKwkJZXB3cml0ZSA9IGVwcmVhZCA9IE5VTEw7CisJCWZvciAoZSA9IDA7IGUgPCBpZmQtPmRlc2MuYk51bUVuZHBvaW50czsgZSsrKSB7CisJCQllcGQgPSAmaWZkLT5lbmRwb2ludFtlXS5kZXNjOworCisJCQlpZiAoKGVwZC0+Ym1BdHRyaWJ1dGVzJlVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSE9CisJCQkgICAgVVNCX0VORFBPSU5UX1hGRVJfQlVMSykKKwkJCQljb250aW51ZTsKKworCQkJaWYgKCEoZXBkLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKSkgeworCQkJCWlmICghZXB3cml0ZSkKKwkJCQkJZXB3cml0ZSA9IGVwZDsKKworCQkJfSBlbHNlIHsKKwkJCQlpZiAoIWVwcmVhZCkKKwkJCQkJZXByZWFkID0gZXBkOworCQkJfQorCQl9CisKKwkJLyogSWdub3JlIGJ1Z2d5IGhhcmR3YXJlIHdpdGhvdXQgdGhlIHJpZ2h0IGVuZHBvaW50cy4gKi8KKwkJaWYgKCFlcHdyaXRlIHx8IChpZmQtPmRlc2MuYkludGVyZmFjZVByb3RvY29sID4gMSAmJiAhZXByZWFkKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFR1cm4gb2ZmIHJlYWRzIGZvciA3LzEvMSAodW5pZGlyZWN0aW9uYWwpIGludGVyZmFjZXMKKwkJICogYW5kIGJ1Z2d5IGJpZGlyZWN0aW9uYWwgcHJpbnRlcnMuICovCisJCWlmIChpZmQtPmRlc2MuYkludGVyZmFjZVByb3RvY29sID09IDEpIHsKKwkJCWVwcmVhZCA9IE5VTEw7CisJCX0gZWxzZSBpZiAodXNibHAtPnF1aXJrcyAmIFVTQkxQX1FVSVJLX0JJRElSKSB7CisJCQlpbmZvKCJEaXNhYmxpbmcgcmVhZHMgZnJvbSBwcm9ibGVtIGJpZGlyZWN0aW9uYWwgIgorCQkJCSJwcmludGVyIG9uIHVzYmxwJWQiLCB1c2JscC0+bWlub3IpOworCQkJZXByZWFkID0gTlVMTDsKKwkJfQorCisJCXVzYmxwLT5wcm90b2NvbFtpZmQtPmRlc2MuYkludGVyZmFjZVByb3RvY29sXS5hbHRfc2V0dGluZyA9CisJCQkJaWZkLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nOworCQl1c2JscC0+cHJvdG9jb2xbaWZkLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbF0uZXB3cml0ZSA9IGVwd3JpdGU7CisJCXVzYmxwLT5wcm90b2NvbFtpZmQtPmRlc2MuYkludGVyZmFjZVByb3RvY29sXS5lcHJlYWQgPSBlcHJlYWQ7CisJfQorCisJLyogSWYgb3VyIHJlcXVlc3RlZCBwcm90b2NvbCBpcyBzdXBwb3J0ZWQsIHRoZW4gdXNlIGl0LiAqLworCWlmIChwcm90b19iaWFzID49IFVTQkxQX0ZJUlNUX1BST1RPQ09MICYmCisJICAgIHByb3RvX2JpYXMgPD0gVVNCTFBfTEFTVF9QUk9UT0NPTCAmJgorCSAgICB1c2JscC0+cHJvdG9jb2xbcHJvdG9fYmlhc10uYWx0X3NldHRpbmcgIT0gLTEpCisJCXJldHVybiBwcm90b19iaWFzOworCisJLyogT3JkZXJpbmcgaXMgaW1wb3J0YW50IGhlcmUuICovCisJaWYgKHVzYmxwLT5wcm90b2NvbFsyXS5hbHRfc2V0dGluZyAhPSAtMSkKKwkJcmV0dXJuIDI7CisJaWYgKHVzYmxwLT5wcm90b2NvbFsxXS5hbHRfc2V0dGluZyAhPSAtMSkKKwkJcmV0dXJuIDE7CisJaWYgKHVzYmxwLT5wcm90b2NvbFszXS5hbHRfc2V0dGluZyAhPSAtMSkKKwkJcmV0dXJuIDM7CisKKwkvKiBJZiBub3RoaW5nIGlzIGF2YWlsYWJsZSwgdGhlbiBkb24ndCBiaW5kIHRvIHRoaXMgZGV2aWNlLiAqLworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCB1c2JscF9zZXRfcHJvdG9jb2woc3RydWN0IHVzYmxwICp1c2JscCwgaW50IHByb3RvY29sKQoreworCWludCByLCBhbHRzOworCisJaWYgKHByb3RvY29sIDwgVVNCTFBfRklSU1RfUFJPVE9DT0wgfHwgcHJvdG9jb2wgPiBVU0JMUF9MQVNUX1BST1RPQ09MKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFsdHMgPSB1c2JscC0+cHJvdG9jb2xbcHJvdG9jb2xdLmFsdF9zZXR0aW5nOworCWlmIChhbHRzIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJciA9IHVzYl9zZXRfaW50ZXJmYWNlKHVzYmxwLT5kZXYsIHVzYmxwLT5pZm51bSwgYWx0cyk7CisJaWYgKHIgPCAwKSB7CisJCWVycigiY2FuJ3Qgc2V0IGRlc2lyZWQgYWx0c2V0dGluZyAlZCBvbiBpbnRlcmZhY2UgJWQiLAorCQkJYWx0cywgdXNibHAtPmlmbnVtKTsKKwkJcmV0dXJuIHI7CisJfQorCisJdXNiX2ZpbGxfYnVsa191cmIodXNibHAtPndyaXRldXJiLCB1c2JscC0+ZGV2LAorCQl1c2Jfc25kYnVsa3BpcGUodXNibHAtPmRldiwKKwkJICB1c2JscC0+cHJvdG9jb2xbcHJvdG9jb2xdLmVwd3JpdGUtPmJFbmRwb2ludEFkZHJlc3MpLAorCQl1c2JscC0+d3JpdGVidWYsIDAsCisJCXVzYmxwX2J1bGtfd3JpdGUsIHVzYmxwKTsKKworCXVzYmxwLT5iaWRpciA9ICh1c2JscC0+cHJvdG9jb2xbcHJvdG9jb2xdLmVwcmVhZCAhPSBOVUxMKTsKKwlpZiAodXNibHAtPmJpZGlyKQorCQl1c2JfZmlsbF9idWxrX3VyYih1c2JscC0+cmVhZHVyYiwgdXNibHAtPmRldiwKKwkJCXVzYl9yY3ZidWxrcGlwZSh1c2JscC0+ZGV2LAorCQkJICB1c2JscC0+cHJvdG9jb2xbcHJvdG9jb2xdLmVwcmVhZC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQl1c2JscC0+cmVhZGJ1ZiwgVVNCTFBfQlVGX1NJWkUsCisJCQl1c2JscF9idWxrX3JlYWQsIHVzYmxwKTsKKworCXVzYmxwLT5jdXJyZW50X3Byb3RvY29sID0gcHJvdG9jb2w7CisJZGJnKCJ1c2JscCVkIHNldCBwcm90b2NvbCAlZCIsIHVzYmxwLT5taW5vciwgcHJvdG9jb2wpOworCXJldHVybiAwOworfQorCisvKiBSZXRyaWV2ZXMgYW5kIGNhY2hlcyBkZXZpY2UgSUQgc3RyaW5nLgorICogUmV0dXJucyBsZW5ndGgsIGluY2x1ZGluZyBsZW5ndGggYnl0ZXMgYnV0IG5vdCBudWxsIHRlcm1pbmF0b3IuCisgKiBPbiBlcnJvciwgcmV0dXJucyBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlLiAqLworc3RhdGljIGludCB1c2JscF9jYWNoZV9kZXZpY2VfaWRfc3RyaW5nKHN0cnVjdCB1c2JscCAqdXNibHApCit7CisJaW50IGVyciwgbGVuZ3RoOworCisJZXJyID0gdXNibHBfZ2V0X2lkKHVzYmxwLCAwLCB1c2JscC0+ZGV2aWNlX2lkX3N0cmluZywgVVNCTFBfREVWSUNFX0lEX1NJWkUgLSAxKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkYmcoInVzYmxwJWQ6IGVycm9yID0gJWQgcmVhZGluZyBJRUVFLTEyODQgRGV2aWNlIElEIHN0cmluZyIsCisJCQl1c2JscC0+bWlub3IsIGVycik7CisJCXVzYmxwLT5kZXZpY2VfaWRfc3RyaW5nWzBdID0gdXNibHAtPmRldmljZV9pZF9zdHJpbmdbMV0gPSAnXDAnOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBGaXJzdCB0d28gYnl0ZXMgYXJlIGxlbmd0aCBpbiBiaWctZW5kaWFuLgorCSAqIFRoZXkgY291bnQgdGhlbXNlbHZlcywgYW5kIHdlIGNvcHkgdGhlbSBpbnRvCisJICogdGhlIHVzZXIncyBidWZmZXIuICovCisJbGVuZ3RoID0gYmUxNl90b19jcHUoKigoX19iZTE2ICopdXNibHAtPmRldmljZV9pZF9zdHJpbmcpKTsKKwlpZiAobGVuZ3RoIDwgMikKKwkJbGVuZ3RoID0gMjsKKwllbHNlIGlmIChsZW5ndGggPj0gVVNCTFBfREVWSUNFX0lEX1NJWkUpCisJCWxlbmd0aCA9IFVTQkxQX0RFVklDRV9JRF9TSVpFIC0gMTsKKwl1c2JscC0+ZGV2aWNlX2lkX3N0cmluZ1tsZW5ndGhdID0gJ1wwJzsKKworCWRiZygidXNibHAlZCBEZXZpY2UgSUQgc3RyaW5nIFtsZW49JWRdPVwiJXNcIiIsCisJCXVzYmxwLT5taW5vciwgbGVuZ3RoLCAmdXNibHAtPmRldmljZV9pZF9zdHJpbmdbMl0pOworCisJcmV0dXJuIGxlbmd0aDsKK30KKworc3RhdGljIHZvaWQgdXNibHBfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNibHAgKnVzYmxwID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisKKwl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZiwgJnVzYmxwX2NsYXNzKTsKKworCWlmICghdXNibHAgfHwgIXVzYmxwLT5kZXYpIHsKKwkJZXJyKCJib2d1cyBkaXNjb25uZWN0Iik7CisJCUJVRyAoKTsKKwl9CisKKwlkb3duICgmdXNibHBfc2VtKTsKKwlkb3duICgmdXNibHAtPnNlbSk7CisJdXNibHAtPnByZXNlbnQgPSAwOworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCisJdXNibHBfdW5saW5rX3VyYnModXNibHApOworCXVzYl9idWZmZXJfZnJlZSAodXNibHAtPmRldiwgVVNCTFBfQlVGX1NJWkUsCisJCQl1c2JscC0+d3JpdGVidWYsIHVzYmxwLT53cml0ZXVyYi0+dHJhbnNmZXJfZG1hKTsKKwl1c2JfYnVmZmVyX2ZyZWUgKHVzYmxwLT5kZXYsIFVTQkxQX0JVRl9TSVpFLAorCQkJdXNibHAtPnJlYWRidWYsIHVzYmxwLT5yZWFkdXJiLT50cmFuc2Zlcl9kbWEpOworCXVwICgmdXNibHAtPnNlbSk7CisKKwlpZiAoIXVzYmxwLT51c2VkKQorCQl1c2JscF9jbGVhbnVwICh1c2JscCk7CisJdXAgKCZ1c2JscF9zZW0pOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNibHBfaWRzIFtdID0geworCXsgVVNCX0RFVklDRV9JTkZPKDcsIDEsIDEpIH0sCisJeyBVU0JfREVWSUNFX0lORk8oNywgMSwgMikgfSwKKwl7IFVTQl9ERVZJQ0VfSU5GTyg3LCAxLCAzKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKDcsIDEsIDEpIH0sCisJeyBVU0JfSU5URVJGQUNFX0lORk8oNywgMSwgMikgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyg3LCAxLCAzKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHVzYmxwX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2JscF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJInVzYmxwIiwKKwkucHJvYmUgPQl1c2JscF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYmxwX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JdXNibHBfaWRzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdXNibHBfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ1c2JscF9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gb3V0OworCWluZm8oRFJJVkVSX1ZFUlNJT04gIjogIiBEUklWRVJfREVTQyk7CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYmxwX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdXNibHBfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNibHBfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2JscF9leGl0KTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworbW9kdWxlX3BhcmFtKHByb3RvX2JpYXMsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhwcm90b19iaWFzLCAiRmF2b3VyaXRlIHByb3RvY29sIG51bWJlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9LY29uZmlnIGIvZHJpdmVycy91c2IvY29yZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhOWZmNjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcKQEAgLTAsMCArMSw5OSBAQAorIworIyBVU0IgQ29yZSBjb25maWd1cmF0aW9uCisjCitjb25maWcgVVNCX0RFQlVHCisJYm9vbCAiVVNCIHZlcmJvc2UgZGVidWcgbWVzc2FnZXMiCisJZGVwZW5kcyBvbiBVU0IKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRoZSBVU0IgY29yZSAmIGh1YiBkcml2ZXJzIHRvIHByb2R1Y2UgYSBidW5jaAorCSAgb2YgZGVidWcgbWVzc2FnZXMgdG8gdGhlIHN5c3RlbSBsb2cuIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgaGF2aW5nIGEKKwkgIHByb2JsZW0gd2l0aCBVU0Igc3VwcG9ydCBhbmQgd2FudCB0byBzZWUgbW9yZSBvZiB3aGF0IGlzIGdvaW5nIG9uLgorCitjb21tZW50ICJNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zIgorCWRlcGVuZHMgb24gVVNCCisKK2NvbmZpZyBVU0JfREVWSUNFRlMKKwlib29sICJVU0IgZGV2aWNlIGZpbGVzeXN0ZW0iCisJZGVwZW5kcyBvbiBVU0IKKwktLS1oZWxwLS0tCisJICBJZiB5b3Ugc2F5IFkgaGVyZSAoYW5kIHRvICIvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0IiBpbiB0aGUgIkZpbGUKKwkgIHN5c3RlbXMiIHNlY3Rpb24sIGFib3ZlKSwgeW91IHdpbGwgZ2V0IGEgZmlsZSAvcHJvYy9idXMvdXNiL2RldmljZXMKKwkgIHdoaWNoIGxpc3RzIHRoZSBkZXZpY2VzIGN1cnJlbnRseSBjb25uZWN0ZWQgdG8geW91ciBVU0IgYnVzIG9yCisJICBidXNzZXMsIGFuZCBmb3IgZXZlcnkgY29ubmVjdGVkIGRldmljZSBhIGZpbGUgbmFtZWQKKwkgICIvcHJvYy9idXMvdXNiL3h4eC95eXkiLCB3aGVyZSB4eHggaXMgdGhlIGJ1cyBudW1iZXIgYW5kIHl5eSB0aGUKKwkgIGRldmljZSBudW1iZXI7IHRoZSBsYXR0ZXIgZmlsZXMgY2FuIGJlIHVzZWQgYnkgdXNlciBzcGFjZSBwcm9ncmFtcworCSAgdG8gdGFsayBkaXJlY3RseSB0byB0aGUgZGV2aWNlLiBUaGVzZSBmaWxlcyBhcmUgInZpcnR1YWwiLCBtZWFuaW5nCisJICB0aGV5IGFyZSBnZW5lcmF0ZWQgb24gdGhlIGZseSBhbmQgbm90IHN0b3JlZCBvbiB0aGUgaGFyZCBkcml2ZS4KKworCSAgWW91IG1heSBuZWVkIHRvIG1vdW50IHRoZSB1c2JmcyBmaWxlIHN5c3RlbSB0byBzZWUgdGhlIGZpbGVzLCB1c2UKKwkgIG1vdW50IC10IHVzYmZzIG5vbmUgL3Byb2MvYnVzL3VzYgorCisJICBGb3IgdGhlIGZvcm1hdCBvZiB0aGUgdmFyaW91cyAvcHJvYy9idXMvdXNiLyBmaWxlcywgcGxlYXNlIHJlYWQKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL3Byb2NfdXNiX2luZm8udHh0Pi4KKworCSAgUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGNvZGUgaXMgY29tcGxldGVseSB1bnJlbGF0ZWQgdG8gZGV2ZnMsIHRoZQorCSAgIi9kZXYgZmlsZSBzeXN0ZW0gc3VwcG9ydCIuCisKKwkgIE1vc3QgdXNlcnMgd2FudCB0byBzYXkgWSBoZXJlLgorCitjb25maWcgVVNCX0JBTkRXSURUSAorCWJvb2wgIkVuZm9yY2UgVVNCIGJhbmR3aWR0aCBhbGxvY2F0aW9uIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUgVVNCIHN1YnN5c3RlbSBlbmZvcmNlcyBVU0IgYmFuZHdpZHRoCisJICBhbGxvY2F0aW9uIGFuZCB3aWxsIHByZXZlbnQgc29tZSBkZXZpY2Ugb3BlbnMgZnJvbSBzdWNjZWVkaW5nCisJICBpZiB0aGV5IHdvdWxkIGNhdXNlIFVTQiBiYW5kd2lkdGggdXNhZ2UgdG8gZ28gYWJvdmUgOTAlIG9mCisJICB0aGUgYnVzIGJhbmR3aWR0aC4KKworCSAgSWYgeW91IHNheSBOIGhlcmUsIHRoZXNlIGNvbmRpdGlvbnMgd2lsbCBjYXVzZSB3YXJuaW5nIG1lc3NhZ2VzCisJICBhYm91dCBVU0IgYmFuZHdpZHRoIHVzYWdlIHRvIGJlIGxvZ2dlZCBhbmQgc29tZSBkZXZpY2VzIG9yCisJICBkcml2ZXJzIG1heSBub3Qgd29yayBjb3JyZWN0bHkuCisKK2NvbmZpZyBVU0JfRFlOQU1JQ19NSU5PUlMKKwlib29sICJEeW5hbWljIFVTQiBtaW5vciBhbGxvY2F0aW9uIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUgVVNCIHN1YnN5c3RlbSB3aWxsIHVzZSBkeW5hbWljIG1pbm9yCisJICBhbGxvY2F0aW9uIGZvciBhbnkgZGV2aWNlIHRoYXQgdXNlcyB0aGUgVVNCIG1ham9yIG51bWJlci4KKwkgIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIGhhdmUgbW9yZSB0aGFuIDE2IG9mIGEgc2luZ2xlIHR5cGUKKwkgIG9mIGRldmljZSAobGlrZSBVU0IgcHJpbnRlcnMpLgorCisJICBJZiB5b3UgYXJlIHVuc3VyZSBhYm91dCB0aGlzLCBzYXkgTiBoZXJlLgorCitjb25maWcgVVNCX1NVU1BFTkQKKwlib29sICJVU0Igc3VzcGVuZC9yZXN1bWUgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0IgJiYgUE0gJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSBjYW4gdXNlIGRyaXZlciBjYWxscyBvciB0aGUgc3lzZnMKKwkgICJwb3dlci9zdGF0ZSIgZmlsZSB0byBzdXNwZW5kIG9yIHJlc3VtZSBpbmRpdmlkdWFsIFVTQgorCSAgcGVyaXBoZXJhbHMuICBUaGVyZSBhcmUgbWFueSByZWxhdGVkIGZlYXR1cmVzLCBzdWNoIGFzCisJICByZW1vdGUgd2FrZXVwIGFuZCBkcml2ZXItc3BlY2lmaWMgc3VzcGVuZCBwcm9jZXNzaW5nLCB0aGF0CisJICBtYXkgbm90IHlldCB3b3JrIGFzIGV4cGVjdGVkLgorCisJICBJZiB5b3UgYXJlIHVuc3VyZSBhYm91dCB0aGlzLCBzYXkgTiBoZXJlLgorCisKK2NvbmZpZyBVU0JfT1RHCisJYm9vbAorCWRlcGVuZHMgb24gVVNCICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBVU0JfU1VTUEVORAorCWRlZmF1bHQgbgorCisKK2NvbmZpZyBVU0JfT1RHX1dISVRFTElTVAorCWJvb2wgIlJlbHkgb24gT1RHIFRhcmdldGVkIFBlcmlwaGVyYWxzIExpc3QiCisJZGVwZW5kcyBvbiBVU0JfT1RHCisJZGVmYXVsdCB5CisJaGVscAorCSAgSWYgeW91IHNheSBZIGhlcmUsIHRoZSAib3RnX3doaXRlbGlzdC5oIiBmaWxlIHdpbGwgYmUgdXNlZCBhcyBhCisJICBwcm9kdWN0IHdoaXRlbGlzdCwgc28gVVNCIHBlcmlwaGVyYWxzIG5vdCBsaXN0ZWQgdGhlcmUgd2lsbCBiZQorCSAgcmVqZWN0ZWQgZHVyaW5nIGVudW1lcmF0aW9uLiAgVGhpcyBiZWhhdmlvciBpcyByZXF1aXJlZCBieSB0aGUKKwkgIFVTQiBPVEcgc3BlY2lmaWNhdGlvbiBmb3IgYWxsIGRldmljZXMgbm90IG9uIHlvdXIgcHJvZHVjdCdzCisJICAiVGFyZ2V0ZWQgUGVyaXBoZXJhbHMgTGlzdCIuCisKKwkgIE90aGVyd2lzZSwgcGVyaXBoZXJhbHMgbm90IGxpc3RlZCB0aGVyZSB3aWxsIG9ubHkgZ2VuZXJhdGUgYQorCSAgd2FybmluZyBhbmQgZW51bWVyYXRpb24gd2lsbCBjb250aW51ZS4gIFRoYXQncyBtb3JlIGxpa2Ugd2hhdAorCSAgbm9ybWFsIExpbnV4LVVTQiBob3N0cyBkbyAob3RoZXIgdGhhbiB0aGUgd2FybmluZyksIGFuZCBpcworCSAgY29udmVuaWVudCBmb3IgbWFueSBzdGFnZXMgb2YgcHJvZHVjdCBkZXZlbG9wbWVudC4KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlIGIvZHJpdmVycy91c2IvY29yZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZThjMzc3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS9NYWtlZmlsZQpAQCAtMCwwICsxLDE2IEBACisjCisjIE1ha2VmaWxlIGZvciBVU0IgQ29yZSBmaWxlcyBhbmQgZmlsZXN5c3RlbQorIworCit1c2Jjb3JlLW9ianMJOj0gdXNiLm8gaHViLm8gaGNkLm8gdXJiLm8gbWVzc2FnZS5vIFwKKwkJCWNvbmZpZy5vIGZpbGUubyBidWZmZXIubyBzeXNmcy5vCisKK2lmZXEgKCQoQ09ORklHX1BDSSkseSkKKwl1c2Jjb3JlLW9ianMJKz0gaGNkLXBjaS5vCitlbmRpZgorCitpZmVxICgkKENPTkZJR19VU0JfREVWSUNFRlMpLHkpCisJdXNiY29yZS1vYmpzCSs9IGRldmlvLm8gaW5vZGUubyBkZXZpY2VzLm8KK2VuZGlmCisKK29iai0kKENPTkZJR19VU0IpCSs9IHVzYmNvcmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9idWZmZXIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvYnVmZmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc4MjdkZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvYnVmZmVyLmMKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBETUEgbWVtb3J5IG1hbmFnZW1lbnQgZm9yIGZyYW1ld29yayBsZXZlbCBIQ0QgY29kZSAoaGNfZHJpdmVyKQorICoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gcGx1Z3MgaW4gdGhyb3VnaCBnZW5lcmljICJ1c2JfYnVzIiBsZXZlbCBtZXRob2RzLAorICogYW5kIHNob3VsZCB3b3JrIHdpdGggYWxsIFVTQiBjb250cm9sbGVycywgcmVnYXJkbGVzIG9mIGJ1cyB0eXBlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KKworCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworCSNkZWZpbmUgREVCVUcKKyNlbHNlCisJI3VuZGVmIERFQlVHCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgImhjZC5oIgorCisKKy8qCisgKiBETUEtQ29oZXJlbnQgQnVmZmVycworICovCisKKy8qIEZJWE1FIHR1bmUgdGhlc2UgYmFzZWQgb24gcG9vbCBzdGF0aXN0aWNzIC4uLiAqLworc3RhdGljIGNvbnN0IHNpemVfdAlwb29sX21heCBbSENEX0JVRkZFUl9QT09MU10gPSB7CisJLyogcGxhdGZvcm1zIHdpdGhvdXQgZG1hLWZyaWVuZGx5IGNhY2hlcyBtaWdodCBuZWVkIHRvCisJICogcHJldmVudCBjYWNoZWxpbmUgc2hhcmluZy4uLgorCSAqLworCTMyLAorCTEyOCwKKwk1MTIsCisJUEFHRV9TSVpFIC8gMgorCS8qIGJpZ2dlciAtLT4gYWxsb2NhdGUgcGFnZXMgKi8KK307CisKKworLyogU0VUVVAgcHJpbWl0aXZlcyAqLworCisvKioKKyAqIGhjZF9idWZmZXJfY3JlYXRlIC0gaW5pdGlhbGl6ZSBidWZmZXIgcG9vbHMKKyAqIEBoY2Q6IHRoZSBidXMgd2hvc2UgYnVmZmVyIHBvb2xzIGFyZSB0byBiZSBpbml0aWFsaXplZAorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogQ2FsbCB0aGlzIGFzIHBhcnQgb2YgaW5pdGlhbGl6aW5nIGEgaG9zdCBjb250cm9sbGVyIHRoYXQgdXNlcyB0aGUgZG1hCisgKiBtZW1vcnkgYWxsb2NhdG9ycy4gIEl0IGluaXRpYWxpemVzIHNvbWUgcG9vbHMgb2YgZG1hLWNvaGVyZW50IG1lbW9yeSB0aGF0CisgKiB3aWxsIGJlIHNoYXJlZCBieSBhbGwgZHJpdmVycyB1c2luZyB0aGF0IGNvbnRyb2xsZXIsIG9yIHJldHVybnMgYSBuZWdhdGl2ZQorICogZXJybm8gdmFsdWUgb24gZXJyb3IuCisgKgorICogQ2FsbCBoY2RfYnVmZmVyX2Rlc3Ryb3koKSB0byBjbGVhbiB1cCBhZnRlciB1c2luZyB0aG9zZSBwb29scy4KKyAqLworaW50IGhjZF9idWZmZXJfY3JlYXRlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCWNoYXIJCW5hbWUgWzE2XTsKKwlpbnQgCQlpLCBzaXplOworCisJZm9yIChpID0gMDsgaSA8IEhDRF9CVUZGRVJfUE9PTFM7IGkrKykgeyAKKwkJaWYgKCEoc2l6ZSA9IHBvb2xfbWF4IFtpXSkpCisJCQljb250aW51ZTsKKwkJc25wcmludGYgKG5hbWUsIHNpemVvZiBuYW1lLCAiYnVmZmVyLSVkIiwgc2l6ZSk7CisJCWhjZC0+cG9vbCBbaV0gPSBkbWFfcG9vbF9jcmVhdGUgKG5hbWUsIGhjZC0+c2VsZi5jb250cm9sbGVyLAorCQkJCXNpemUsIHNpemUsIDApOworCQlpZiAoIWhjZC0+cG9vbCBbaV0pIHsKKwkJCWhjZF9idWZmZXJfZGVzdHJveSAoaGNkKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCXJldHVybiAwOworfQorCisKKy8qKgorICogaGNkX2J1ZmZlcl9kZXN0cm95IC0gZGVhbGxvY2F0ZSBidWZmZXIgcG9vbHMKKyAqIEBoY2Q6IHRoZSBidXMgd2hvc2UgYnVmZmVyIHBvb2xzIGFyZSB0byBiZSBkZXN0cm95ZWQKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIFRoaXMgZnJlZXMgdGhlIGJ1ZmZlciBwb29scyBjcmVhdGVkIGJ5IGhjZF9idWZmZXJfY3JlYXRlKCkuCisgKi8KK3ZvaWQgaGNkX2J1ZmZlcl9kZXN0cm95IChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCWludAkJaTsKKworCWZvciAoaSA9IDA7IGkgPCBIQ0RfQlVGRkVSX1BPT0xTOyBpKyspIHsgCisJCXN0cnVjdCBkbWFfcG9vbAkJKnBvb2wgPSBoY2QtPnBvb2wgW2ldOworCQlpZiAocG9vbCkgeworCQkJZG1hX3Bvb2xfZGVzdHJveSAocG9vbCk7CisJCQloY2QtPnBvb2xbaV0gPSBOVUxMOworCQl9CisJfQorfQorCisKKy8qIHNvbWV0aW1lcyBhbGxvYy9mcmVlIGNvdWxkIHVzZSBrbWFsbG9jIHdpdGggU0xBQl9ETUEsIGZvcgorICogYmV0dGVyIHNoYXJpbmcgYW5kIHRvIGxldmVyYWdlIG1tL3NsYWIuYyBpbnRlbGxpZ2VuY2UuCisgKi8KKwordm9pZCAqaGNkX2J1ZmZlcl9hbGxvYyAoCisJc3RydWN0IHVzYl9idXMgCQkqYnVzLAorCXNpemVfdAkJCXNpemUsCisJaW50CQkJbWVtX2ZsYWdzLAorCWRtYV9hZGRyX3QJCSpkbWEKKykKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IGJ1cy0+aGNwcml2OworCWludCAJCQlpOworCisJLyogc29tZSBVU0IgaG9zdHMganVzdCB1c2UgUElPICovCisJaWYgKCFidXMtPmNvbnRyb2xsZXItPmRtYV9tYXNrKSB7CisJCSpkbWEgPSB+KGRtYV9hZGRyX3QpIDA7CisJCXJldHVybiBrbWFsbG9jIChzaXplLCBtZW1fZmxhZ3MpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBIQ0RfQlVGRkVSX1BPT0xTOyBpKyspIHsKKwkJaWYgKHNpemUgPD0gcG9vbF9tYXggW2ldKQorCQkJcmV0dXJuIGRtYV9wb29sX2FsbG9jIChoY2QtPnBvb2wgW2ldLCBtZW1fZmxhZ3MsIGRtYSk7CisJfQorCXJldHVybiBkbWFfYWxsb2NfY29oZXJlbnQgKGhjZC0+c2VsZi5jb250cm9sbGVyLCBzaXplLCBkbWEsIDApOworfQorCit2b2lkIGhjZF9idWZmZXJfZnJlZSAoCisJc3RydWN0IHVzYl9idXMgCQkqYnVzLAorCXNpemVfdAkJCXNpemUsCisJdm9pZCAJCQkqYWRkciwKKwlkbWFfYWRkcl90CQlkbWEKKykKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IGJ1cy0+aGNwcml2OworCWludCAJCQlpOworCisJaWYgKCFhZGRyKQorCQlyZXR1cm47CisKKwlpZiAoIWJ1cy0+Y29udHJvbGxlci0+ZG1hX21hc2spIHsKKwkJa2ZyZWUgKGFkZHIpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8IEhDRF9CVUZGRVJfUE9PTFM7IGkrKykgeworCQlpZiAoc2l6ZSA8PSBwb29sX21heCBbaV0pIHsKKwkJCWRtYV9wb29sX2ZyZWUgKGhjZC0+cG9vbCBbaV0sIGFkZHIsIGRtYSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJZG1hX2ZyZWVfY29oZXJlbnQgKGhjZC0+c2VsZi5jb250cm9sbGVyLCBzaXplLCBhZGRyLCBkbWEpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9jb25maWcuYyBiL2RyaXZlcnMvdXNiL2NvcmUvY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIwOTJiZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvY29uZmlnLmMKQEAgLTAsMCArMSw1MzQgQEAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKyNkZWZpbmUgREVCVUcKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKworI2RlZmluZSBVU0JfTUFYQUxUU0VUVElORwkJMTI4CS8qIEhhcmQgbGltaXQgKi8KKyNkZWZpbmUgVVNCX01BWEVORFBPSU5UUwkJMzAJLyogSGFyZCBsaW1pdCAqLworCisjZGVmaW5lIFVTQl9NQVhDT05GSUcJCQk4CS8qIEFyYml0cmFyeSBsaW1pdCAqLworCisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqcGx1cmFsKGludCBuKQoreworCXJldHVybiAobiA9PSAxID8gIiIgOiAicyIpOworfQorCitzdGF0aWMgaW50IGZpbmRfbmV4dF9kZXNjcmlwdG9yKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IHNpemUsCisgICAgaW50IGR0MSwgaW50IGR0MiwgaW50ICpudW1fc2tpcHBlZCkKK3sKKwlzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoOworCWludCBuID0gMDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXIwID0gYnVmZmVyOworCisJLyogRmluZCB0aGUgbmV4dCBkZXNjcmlwdG9yIG9mIHR5cGUgZHQxIG9yIGR0MiAqLworCXdoaWxlIChzaXplID4gMCkgeworCQloID0gKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgYnVmZmVyOworCQlpZiAoaC0+YkRlc2NyaXB0b3JUeXBlID09IGR0MSB8fCBoLT5iRGVzY3JpcHRvclR5cGUgPT0gZHQyKQorCQkJYnJlYWs7CisJCWJ1ZmZlciArPSBoLT5iTGVuZ3RoOworCQlzaXplIC09IGgtPmJMZW5ndGg7CisJCSsrbjsKKwl9CisKKwkvKiBTdG9yZSB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIHNraXBwZWQgYW5kIHJldHVybiB0aGUKKwkgKiBudW1iZXIgb2YgYnl0ZXMgc2tpcHBlZCAqLworCWlmIChudW1fc2tpcHBlZCkKKwkJKm51bV9za2lwcGVkID0gbjsKKwlyZXR1cm4gYnVmZmVyIC0gYnVmZmVyMDsKK30KKworc3RhdGljIGludCB1c2JfcGFyc2VfZW5kcG9pbnQoc3RydWN0IGRldmljZSAqZGRldiwgaW50IGNmZ25vLCBpbnQgaW51bSwKKyAgICBpbnQgYXNudW0sIHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmcCwgaW50IG51bV9lcCwKKyAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBzaXplKQoreworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjAgPSBidWZmZXI7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkOworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZW5kcG9pbnQ7CisJaW50IG4sIGk7CisKKwlkID0gKHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqKSBidWZmZXI7CisJYnVmZmVyICs9IGQtPmJMZW5ndGg7CisJc2l6ZSAtPSBkLT5iTGVuZ3RoOworCisJaWYgKGQtPmJMZW5ndGggPj0gVVNCX0RUX0VORFBPSU5UX0FVRElPX1NJWkUpCisJCW4gPSBVU0JfRFRfRU5EUE9JTlRfQVVESU9fU0laRTsKKwllbHNlIGlmIChkLT5iTGVuZ3RoID49IFVTQl9EVF9FTkRQT0lOVF9TSVpFKQorCQluID0gVVNCX0RUX0VORFBPSU5UX1NJWkU7CisJZWxzZSB7CisJCWRldl93YXJuKGRkZXYsICJjb25maWcgJWQgaW50ZXJmYWNlICVkIGFsdHNldHRpbmcgJWQgaGFzIGFuICIKKwkJICAgICJpbnZhbGlkIGVuZHBvaW50IGRlc2NyaXB0b3Igb2YgbGVuZ3RoICVkLCBza2lwcGluZ1xuIiwKKwkJICAgIGNmZ25vLCBpbnVtLCBhc251bSwgZC0+Ykxlbmd0aCk7CisJCWdvdG8gc2tpcF90b19uZXh0X2VuZHBvaW50X29yX2ludGVyZmFjZV9kZXNjcmlwdG9yOworCX0KKworCWkgPSBkLT5iRW5kcG9pbnRBZGRyZXNzICYgflVTQl9FTkRQT0lOVF9ESVJfTUFTSzsKKwlpZiAoaSA+PSAxNiB8fCBpID09IDApIHsKKwkJZGV2X3dhcm4oZGRldiwgImNvbmZpZyAlZCBpbnRlcmZhY2UgJWQgYWx0c2V0dGluZyAlZCBoYXMgYW4gIgorCQkgICAgImludmFsaWQgZW5kcG9pbnQgd2l0aCBhZGRyZXNzIDB4JVgsIHNraXBwaW5nXG4iLAorCQkgICAgY2Znbm8sIGludW0sIGFzbnVtLCBkLT5iRW5kcG9pbnRBZGRyZXNzKTsKKwkJZ290byBza2lwX3RvX25leHRfZW5kcG9pbnRfb3JfaW50ZXJmYWNlX2Rlc2NyaXB0b3I7CisJfQorCisJLyogT25seSBzdG9yZSBhcyBtYW55IGVuZHBvaW50cyBhcyB3ZSBoYXZlIHJvb20gZm9yICovCisJaWYgKGlmcC0+ZGVzYy5iTnVtRW5kcG9pbnRzID49IG51bV9lcCkKKwkJZ290byBza2lwX3RvX25leHRfZW5kcG9pbnRfb3JfaW50ZXJmYWNlX2Rlc2NyaXB0b3I7CisKKwllbmRwb2ludCA9ICZpZnAtPmVuZHBvaW50W2lmcC0+ZGVzYy5iTnVtRW5kcG9pbnRzXTsKKwkrK2lmcC0+ZGVzYy5iTnVtRW5kcG9pbnRzOworCisJbWVtY3B5KCZlbmRwb2ludC0+ZGVzYywgZCwgbik7CisJSU5JVF9MSVNUX0hFQUQoJmVuZHBvaW50LT51cmJfbGlzdCk7CisKKwkvKiBTa2lwIG92ZXIgYW55IENsYXNzIFNwZWNpZmljIG9yIFZlbmRvciBTcGVjaWZpYyBkZXNjcmlwdG9yczsKKwkgKiBmaW5kIHRoZSBuZXh0IGVuZHBvaW50IG9yIGludGVyZmFjZSBkZXNjcmlwdG9yICovCisJZW5kcG9pbnQtPmV4dHJhID0gYnVmZmVyOworCWkgPSBmaW5kX25leHRfZGVzY3JpcHRvcihidWZmZXIsIHNpemUsIFVTQl9EVF9FTkRQT0lOVCwKKwkgICAgVVNCX0RUX0lOVEVSRkFDRSwgJm4pOworCWVuZHBvaW50LT5leHRyYWxlbiA9IGk7CisJaWYgKG4gPiAwKQorCQlkZXZfZGJnKGRkZXYsICJza2lwcGVkICVkIGRlc2NyaXB0b3IlcyBhZnRlciAlc1xuIiwKKwkJICAgIG4sIHBsdXJhbChuKSwgImVuZHBvaW50Iik7CisJcmV0dXJuIGJ1ZmZlciAtIGJ1ZmZlcjAgKyBpOworCitza2lwX3RvX25leHRfZW5kcG9pbnRfb3JfaW50ZXJmYWNlX2Rlc2NyaXB0b3I6CisJaSA9IGZpbmRfbmV4dF9kZXNjcmlwdG9yKGJ1ZmZlciwgc2l6ZSwgVVNCX0RUX0VORFBPSU5ULAorCSAgICBVU0JfRFRfSU5URVJGQUNFLCBOVUxMKTsKKwlyZXR1cm4gYnVmZmVyIC0gYnVmZmVyMCArIGk7Cit9CisKK3ZvaWQgdXNiX3JlbGVhc2VfaW50ZXJmYWNlX2NhY2hlKHN0cnVjdCBrcmVmICpyZWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2VfY2FjaGUgKmludGZjID0gcmVmX3RvX3VzYl9pbnRlcmZhY2VfY2FjaGUocmVmKTsKKwlpbnQgajsKKworCWZvciAoaiA9IDA7IGogPCBpbnRmYy0+bnVtX2FsdHNldHRpbmc7IGorKykKKwkJa2ZyZWUoaW50ZmMtPmFsdHNldHRpbmdbal0uZW5kcG9pbnQpOworCWtmcmVlKGludGZjKTsKK30KKworc3RhdGljIGludCB1c2JfcGFyc2VfaW50ZXJmYWNlKHN0cnVjdCBkZXZpY2UgKmRkZXYsIGludCBjZmdubywKKyAgICBzdHJ1Y3QgdXNiX2hvc3RfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IHNpemUsCisgICAgdTggaW51bXNbXSwgdTggbmFsdHNbXSkKK3sKKwl1bnNpZ25lZCBjaGFyICpidWZmZXIwID0gYnVmZmVyOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IJKmQ7CisJaW50IGludW0sIGFzbnVtOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2NhY2hlICppbnRmYzsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQ7CisJaW50IGksIG47CisJaW50IGxlbiwgcmV0dmFsOworCWludCBudW1fZXAsIG51bV9lcF9vcmlnOworCisJZCA9IChzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICopIGJ1ZmZlcjsKKwlidWZmZXIgKz0gZC0+Ykxlbmd0aDsKKwlzaXplIC09IGQtPmJMZW5ndGg7CisKKwlpZiAoZC0+Ykxlbmd0aCA8IFVTQl9EVF9JTlRFUkZBQ0VfU0laRSkKKwkJZ290byBza2lwX3RvX25leHRfaW50ZXJmYWNlX2Rlc2NyaXB0b3I7CisKKwkvKiBXaGljaCBpbnRlcmZhY2UgZW50cnkgaXMgdGhpcz8gKi8KKwlpbnRmYyA9IE5VTEw7CisJaW51bSA9IGQtPmJJbnRlcmZhY2VOdW1iZXI7CisJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgKytpKSB7CisJCWlmIChpbnVtc1tpXSA9PSBpbnVtKSB7CisJCQlpbnRmYyA9IGNvbmZpZy0+aW50Zl9jYWNoZVtpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghaW50ZmMgfHwgaW50ZmMtPm51bV9hbHRzZXR0aW5nID49IG5hbHRzW2ldKQorCQlnb3RvIHNraXBfdG9fbmV4dF9pbnRlcmZhY2VfZGVzY3JpcHRvcjsKKworCS8qIENoZWNrIGZvciBkdXBsaWNhdGUgYWx0c2V0dGluZyBlbnRyaWVzICovCisJYXNudW0gPSBkLT5iQWx0ZXJuYXRlU2V0dGluZzsKKwlmb3IgKChpID0gMCwgYWx0ID0gJmludGZjLT5hbHRzZXR0aW5nWzBdKTsKKwkgICAgICBpIDwgaW50ZmMtPm51bV9hbHRzZXR0aW5nOworCSAgICAgKCsraSwgKythbHQpKSB7CisJCWlmIChhbHQtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmcgPT0gYXNudW0pIHsKKwkJCWRldl93YXJuKGRkZXYsICJEdXBsaWNhdGUgZGVzY3JpcHRvciBmb3IgY29uZmlnICVkICIKKwkJCSAgICAiaW50ZXJmYWNlICVkIGFsdHNldHRpbmcgJWQsIHNraXBwaW5nXG4iLAorCQkJICAgIGNmZ25vLCBpbnVtLCBhc251bSk7CisJCQlnb3RvIHNraXBfdG9fbmV4dF9pbnRlcmZhY2VfZGVzY3JpcHRvcjsKKwkJfQorCX0KKworCSsraW50ZmMtPm51bV9hbHRzZXR0aW5nOworCW1lbWNweSgmYWx0LT5kZXNjLCBkLCBVU0JfRFRfSU5URVJGQUNFX1NJWkUpOworCisJLyogU2tpcCBvdmVyIGFueSBDbGFzcyBTcGVjaWZpYyBvciBWZW5kb3IgU3BlY2lmaWMgZGVzY3JpcHRvcnM7CisJICogZmluZCB0aGUgZmlyc3QgZW5kcG9pbnQgb3IgaW50ZXJmYWNlIGRlc2NyaXB0b3IgKi8KKwlhbHQtPmV4dHJhID0gYnVmZmVyOworCWkgPSBmaW5kX25leHRfZGVzY3JpcHRvcihidWZmZXIsIHNpemUsIFVTQl9EVF9FTkRQT0lOVCwKKwkgICAgVVNCX0RUX0lOVEVSRkFDRSwgJm4pOworCWFsdC0+ZXh0cmFsZW4gPSBpOworCWlmIChuID4gMCkKKwkJZGV2X2RiZyhkZGV2LCAic2tpcHBlZCAlZCBkZXNjcmlwdG9yJXMgYWZ0ZXIgJXNcbiIsCisJCSAgICBuLCBwbHVyYWwobiksICJpbnRlcmZhY2UiKTsKKwlidWZmZXIgKz0gaTsKKwlzaXplIC09IGk7CisKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHJpZ2h0KD8pIG51bWJlciBvZiBlbmRwb2ludHMgKi8KKwludW1fZXAgPSBudW1fZXBfb3JpZyA9IGFsdC0+ZGVzYy5iTnVtRW5kcG9pbnRzOworCWFsdC0+ZGVzYy5iTnVtRW5kcG9pbnRzID0gMDsJCS8vIFVzZSBhcyBhIGNvdW50ZXIKKwlpZiAobnVtX2VwID4gVVNCX01BWEVORFBPSU5UUykgeworCQlkZXZfd2FybihkZGV2LCAidG9vIG1hbnkgZW5kcG9pbnRzIGZvciBjb25maWcgJWQgaW50ZXJmYWNlICVkICIKKwkJICAgICJhbHRzZXR0aW5nICVkOiAlZCwgdXNpbmcgbWF4aW11bSBhbGxvd2VkOiAlZFxuIiwKKwkJICAgIGNmZ25vLCBpbnVtLCBhc251bSwgbnVtX2VwLCBVU0JfTUFYRU5EUE9JTlRTKTsKKwkJbnVtX2VwID0gVVNCX01BWEVORFBPSU5UUzsKKwl9CisKKwlsZW4gPSBzaXplb2Yoc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50KSAqIG51bV9lcDsKKwlhbHQtPmVuZHBvaW50ID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmICghYWx0LT5lbmRwb2ludCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KGFsdC0+ZW5kcG9pbnQsIDAsIGxlbik7CisKKwkvKiBQYXJzZSBhbGwgdGhlIGVuZHBvaW50IGRlc2NyaXB0b3JzICovCisJbiA9IDA7CisJd2hpbGUgKHNpemUgPiAwKSB7CisJCWlmICgoKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgYnVmZmVyKS0+YkRlc2NyaXB0b3JUeXBlCisJCSAgICAgPT0gVVNCX0RUX0lOVEVSRkFDRSkKKwkJCWJyZWFrOworCQlyZXR2YWwgPSB1c2JfcGFyc2VfZW5kcG9pbnQoZGRldiwgY2Znbm8sIGludW0sIGFzbnVtLCBhbHQsCisJCSAgICBudW1fZXAsIGJ1ZmZlciwgc2l6ZSk7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJKytuOworCisJCWJ1ZmZlciArPSByZXR2YWw7CisJCXNpemUgLT0gcmV0dmFsOworCX0KKworCWlmIChuICE9IG51bV9lcF9vcmlnKQorCQlkZXZfd2FybihkZGV2LCAiY29uZmlnICVkIGludGVyZmFjZSAlZCBhbHRzZXR0aW5nICVkIGhhcyAlZCAiCisJCSAgICAiZW5kcG9pbnQgZGVzY3JpcHRvciVzLCBkaWZmZXJlbnQgZnJvbSB0aGUgaW50ZXJmYWNlICIKKwkJICAgICJkZXNjcmlwdG9yJ3MgdmFsdWU6ICVkXG4iLAorCQkgICAgY2Znbm8sIGludW0sIGFzbnVtLCBuLCBwbHVyYWwobiksIG51bV9lcF9vcmlnKTsKKwlyZXR1cm4gYnVmZmVyIC0gYnVmZmVyMDsKKworc2tpcF90b19uZXh0X2ludGVyZmFjZV9kZXNjcmlwdG9yOgorCWkgPSBmaW5kX25leHRfZGVzY3JpcHRvcihidWZmZXIsIHNpemUsIFVTQl9EVF9JTlRFUkZBQ0UsCisJICAgIFVTQl9EVF9JTlRFUkZBQ0UsIE5VTEwpOworCXJldHVybiBidWZmZXIgLSBidWZmZXIwICsgaTsKK30KKworc3RhdGljIGludCB1c2JfcGFyc2VfY29uZmlndXJhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZGV2LCBpbnQgY2ZnaWR4LAorICAgIHN0cnVjdCB1c2JfaG9zdF9jb25maWcgKmNvbmZpZywgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBjaGFyICpidWZmZXIwID0gYnVmZmVyOworCWludCBjZmdubzsKKwlpbnQgbmludGYsIG5pbnRmX29yaWc7CisJaW50IGksIGosIG47CisJc3RydWN0IHVzYl9pbnRlcmZhY2VfY2FjaGUgKmludGZjOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjI7CisJaW50IHNpemUyOworCXN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmhlYWRlcjsKKwlpbnQgbGVuLCByZXR2YWw7CisJdTggaW51bXNbVVNCX01BWElOVEVSRkFDRVNdLCBuYWx0c1tVU0JfTUFYSU5URVJGQUNFU107CisKKwltZW1jcHkoJmNvbmZpZy0+ZGVzYywgYnVmZmVyLCBVU0JfRFRfQ09ORklHX1NJWkUpOworCWlmIChjb25maWctPmRlc2MuYkRlc2NyaXB0b3JUeXBlICE9IFVTQl9EVF9DT05GSUcgfHwKKwkgICAgY29uZmlnLT5kZXNjLmJMZW5ndGggPCBVU0JfRFRfQ09ORklHX1NJWkUpIHsKKwkJZGV2X2VycihkZGV2LCAiaW52YWxpZCBkZXNjcmlwdG9yIGZvciBjb25maWcgaW5kZXggJWQ6ICIKKwkJICAgICJ0eXBlID0gMHglWCwgbGVuZ3RoID0gJWRcbiIsIGNmZ2lkeCwKKwkJICAgIGNvbmZpZy0+ZGVzYy5iRGVzY3JpcHRvclR5cGUsIGNvbmZpZy0+ZGVzYy5iTGVuZ3RoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWNmZ25vID0gY29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWU7CisKKwlidWZmZXIgKz0gY29uZmlnLT5kZXNjLmJMZW5ndGg7CisJc2l6ZSAtPSBjb25maWctPmRlc2MuYkxlbmd0aDsKKworCW5pbnRmID0gbmludGZfb3JpZyA9IGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsKKwlpZiAobmludGYgPiBVU0JfTUFYSU5URVJGQUNFUykgeworCQlkZXZfd2FybihkZGV2LCAiY29uZmlnICVkIGhhcyB0b28gbWFueSBpbnRlcmZhY2VzOiAlZCwgIgorCQkgICAgInVzaW5nIG1heGltdW0gYWxsb3dlZDogJWRcbiIsCisJCSAgICBjZmdubywgbmludGYsIFVTQl9NQVhJTlRFUkZBQ0VTKTsKKwkJbmludGYgPSBVU0JfTUFYSU5URVJGQUNFUzsKKwl9CisKKwkvKiBHbyB0aHJvdWdoIHRoZSBkZXNjcmlwdG9ycywgY2hlY2tpbmcgdGhlaXIgbGVuZ3RoIGFuZCBjb3VudGluZyB0aGUKKwkgKiBudW1iZXIgb2YgYWx0c2V0dGluZ3MgZm9yIGVhY2ggaW50ZXJmYWNlICovCisJbiA9IDA7CisJZm9yICgoYnVmZmVyMiA9IGJ1ZmZlciwgc2l6ZTIgPSBzaXplKTsKKwkgICAgICBzaXplMiA+IDA7CisJICAgICAoYnVmZmVyMiArPSBoZWFkZXItPmJMZW5ndGgsIHNpemUyIC09IGhlYWRlci0+Ykxlbmd0aCkpIHsKKworCQlpZiAoc2l6ZTIgPCBzaXplb2Yoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlcikpIHsKKwkJCWRldl93YXJuKGRkZXYsICJjb25maWcgJWQgZGVzY3JpcHRvciBoYXMgJWQgZXhjZXNzICIKKwkJCSAgICAiYnl0ZSVzLCBpZ25vcmluZ1xuIiwKKwkJCSAgICBjZmdubywgc2l6ZTIsIHBsdXJhbChzaXplMikpOworCQkJYnJlYWs7CisJCX0KKworCQloZWFkZXIgPSAoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSBidWZmZXIyOworCQlpZiAoKGhlYWRlci0+Ykxlbmd0aCA+IHNpemUyKSB8fCAoaGVhZGVyLT5iTGVuZ3RoIDwgMikpIHsKKwkJCWRldl93YXJuKGRkZXYsICJjb25maWcgJWQgaGFzIGFuIGludmFsaWQgZGVzY3JpcHRvciAiCisJCQkgICAgIm9mIGxlbmd0aCAlZCwgc2tpcHBpbmcgcmVtYWluZGVyIG9mIHRoZSBjb25maWdcbiIsCisJCQkgICAgY2Znbm8sIGhlYWRlci0+Ykxlbmd0aCk7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChoZWFkZXItPmJEZXNjcmlwdG9yVHlwZSA9PSBVU0JfRFRfSU5URVJGQUNFKSB7CisJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICpkOworCQkJaW50IGludW07CisKKwkJCWQgPSAoc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqKSBoZWFkZXI7CisJCQlpZiAoZC0+Ykxlbmd0aCA8IFVTQl9EVF9JTlRFUkZBQ0VfU0laRSkgeworCQkJCWRldl93YXJuKGRkZXYsICJjb25maWcgJWQgaGFzIGFuIGludmFsaWQgIgorCQkJCSAgICAiaW50ZXJmYWNlIGRlc2NyaXB0b3Igb2YgbGVuZ3RoICVkLCAiCisJCQkJICAgICJza2lwcGluZ1xuIiwgY2Znbm8sIGQtPmJMZW5ndGgpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpbnVtID0gZC0+YkludGVyZmFjZU51bWJlcjsKKwkJCWlmIChpbnVtID49IG5pbnRmX29yaWcpCisJCQkJZGV2X3dhcm4oZGRldiwgImNvbmZpZyAlZCBoYXMgYW4gaW52YWxpZCAiCisJCQkJICAgICJpbnRlcmZhY2UgbnVtYmVyOiAlZCBidXQgbWF4IGlzICVkXG4iLAorCQkJCSAgICBjZmdubywgaW51bSwgbmludGZfb3JpZyAtIDEpOworCisJCQkvKiBIYXZlIHdlIGFscmVhZHkgZW5jb3VudGVyZWQgdGhpcyBpbnRlcmZhY2U/CisJCQkgKiBDb3VudCBpdHMgYWx0c2V0dGluZ3MgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHsKKwkJCQlpZiAoaW51bXNbaV0gPT0gaW51bSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaSA8IG4pIHsKKwkJCQlpZiAobmFsdHNbaV0gPCAyNTUpCisJCQkJCSsrbmFsdHNbaV07CisJCQl9IGVsc2UgaWYgKG4gPCBVU0JfTUFYSU5URVJGQUNFUykgeworCQkJCWludW1zW25dID0gaW51bTsKKwkJCQluYWx0c1tuXSA9IDE7CisJCQkJKytuOworCQkJfQorCisJCX0gZWxzZSBpZiAoaGVhZGVyLT5iRGVzY3JpcHRvclR5cGUgPT0gVVNCX0RUX0RFVklDRSB8fAorCQkJICAgIGhlYWRlci0+YkRlc2NyaXB0b3JUeXBlID09IFVTQl9EVF9DT05GSUcpCisJCQlkZXZfd2FybihkZGV2LCAiY29uZmlnICVkIGNvbnRhaW5zIGFuIHVuZXhwZWN0ZWQgIgorCQkJICAgICJkZXNjcmlwdG9yIG9mIHR5cGUgMHglWCwgc2tpcHBpbmdcbiIsCisJCQkgICAgY2Znbm8sIGhlYWRlci0+YkRlc2NyaXB0b3JUeXBlKTsKKworCX0JLyogZm9yICgoYnVmZmVyMiA9IGJ1ZmZlciwgc2l6ZTIgPSBzaXplKTsgLi4uKSAqLworCXNpemUgPSBidWZmZXIyIC0gYnVmZmVyOworCWNvbmZpZy0+ZGVzYy53VG90YWxMZW5ndGggPSBjcHVfdG9fbGUxNihidWZmZXIyIC0gYnVmZmVyMCk7CisKKwlpZiAobiAhPSBuaW50ZikKKwkJZGV2X3dhcm4oZGRldiwgImNvbmZpZyAlZCBoYXMgJWQgaW50ZXJmYWNlJXMsIGRpZmZlcmVudCBmcm9tICIKKwkJICAgICJ0aGUgZGVzY3JpcHRvcidzIHZhbHVlOiAlZFxuIiwKKwkJICAgIGNmZ25vLCBuLCBwbHVyYWwobiksIG5pbnRmX29yaWcpOworCWVsc2UgaWYgKG4gPT0gMCkKKwkJZGV2X3dhcm4oZGRldiwgImNvbmZpZyAlZCBoYXMgbm8gaW50ZXJmYWNlcz9cbiIsIGNmZ25vKTsKKwljb25maWctPmRlc2MuYk51bUludGVyZmFjZXMgPSBuaW50ZiA9IG47CisKKwkvKiBDaGVjayBmb3IgbWlzc2luZyBpbnRlcmZhY2UgbnVtYmVycyAqLworCWZvciAoaSA9IDA7IGkgPCBuaW50ZjsgKytpKSB7CisJCWZvciAoaiA9IDA7IGogPCBuaW50ZjsgKytqKSB7CisJCQlpZiAoaW51bXNbal0gPT0gaSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaiA+PSBuaW50ZikKKwkJCWRldl93YXJuKGRkZXYsICJjb25maWcgJWQgaGFzIG5vIGludGVyZmFjZSBudW1iZXIgIgorCQkJICAgICIlZFxuIiwgY2Znbm8sIGkpOworCX0KKworCS8qIEFsbG9jYXRlIHRoZSB1c2JfaW50ZXJmYWNlX2NhY2hlcyBhbmQgYWx0c2V0dGluZyBhcnJheXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmludGY7ICsraSkgeworCQlqID0gbmFsdHNbaV07CisJCWlmIChqID4gVVNCX01BWEFMVFNFVFRJTkcpIHsKKwkJCWRldl93YXJuKGRkZXYsICJ0b28gbWFueSBhbHRlcm5hdGUgc2V0dGluZ3MgZm9yICIKKwkJCSAgICAiY29uZmlnICVkIGludGVyZmFjZSAlZDogJWQsICIKKwkJCSAgICAidXNpbmcgbWF4aW11bSBhbGxvd2VkOiAlZFxuIiwKKwkJCSAgICBjZmdubywgaW51bXNbaV0sIGosIFVTQl9NQVhBTFRTRVRUSU5HKTsKKwkJCW5hbHRzW2ldID0gaiA9IFVTQl9NQVhBTFRTRVRUSU5HOworCQl9CisKKwkJbGVuID0gc2l6ZW9mKCppbnRmYykgKyBzaXplb2Yoc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSkgKiBqOworCQljb25maWctPmludGZfY2FjaGVbaV0gPSBpbnRmYyA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFpbnRmYykKKwkJCXJldHVybiAtRU5PTUVNOworCQltZW1zZXQoaW50ZmMsIDAsIGxlbik7CisJCWtyZWZfaW5pdCgmaW50ZmMtPnJlZik7CisJfQorCisJLyogU2tpcCBvdmVyIGFueSBDbGFzcyBTcGVjaWZpYyBvciBWZW5kb3IgU3BlY2lmaWMgZGVzY3JpcHRvcnM7CisJICogZmluZCB0aGUgZmlyc3QgaW50ZXJmYWNlIGRlc2NyaXB0b3IgKi8KKwljb25maWctPmV4dHJhID0gYnVmZmVyOworCWkgPSBmaW5kX25leHRfZGVzY3JpcHRvcihidWZmZXIsIHNpemUsIFVTQl9EVF9JTlRFUkZBQ0UsCisJICAgIFVTQl9EVF9JTlRFUkZBQ0UsICZuKTsKKwljb25maWctPmV4dHJhbGVuID0gaTsKKwlpZiAobiA+IDApCisJCWRldl9kYmcoZGRldiwgInNraXBwZWQgJWQgZGVzY3JpcHRvciVzIGFmdGVyICVzXG4iLAorCQkgICAgbiwgcGx1cmFsKG4pLCAiY29uZmlndXJhdGlvbiIpOworCWJ1ZmZlciArPSBpOworCXNpemUgLT0gaTsKKworCS8qIFBhcnNlIGFsbCB0aGUgaW50ZXJmYWNlL2FsdHNldHRpbmcgZGVzY3JpcHRvcnMgKi8KKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJcmV0dmFsID0gdXNiX3BhcnNlX2ludGVyZmFjZShkZGV2LCBjZmdubywgY29uZmlnLAorCQkgICAgYnVmZmVyLCBzaXplLCBpbnVtcywgbmFsdHMpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiByZXR2YWw7CisKKwkJYnVmZmVyICs9IHJldHZhbDsKKwkJc2l6ZSAtPSByZXR2YWw7CisJfQorCisJLyogQ2hlY2sgZm9yIG1pc3NpbmcgYWx0c2V0dGluZ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmludGY7ICsraSkgeworCQlpbnRmYyA9IGNvbmZpZy0+aW50Zl9jYWNoZVtpXTsKKwkJZm9yIChqID0gMDsgaiA8IGludGZjLT5udW1fYWx0c2V0dGluZzsgKytqKSB7CisJCQlmb3IgKG4gPSAwOyBuIDwgaW50ZmMtPm51bV9hbHRzZXR0aW5nOyArK24pIHsKKwkJCQlpZiAoaW50ZmMtPmFsdHNldHRpbmdbbl0uZGVzYy4KKwkJCQkgICAgYkFsdGVybmF0ZVNldHRpbmcgPT0gaikKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAobiA+PSBpbnRmYy0+bnVtX2FsdHNldHRpbmcpCisJCQkJZGV2X3dhcm4oZGRldiwgImNvbmZpZyAlZCBpbnRlcmZhY2UgJWQgaGFzIG5vICIKKwkJCQkgICAgImFsdHNldHRpbmcgJWRcbiIsIGNmZ25vLCBpbnVtc1tpXSwgaik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLy8gaHViLW9ubHkhISAuLi4gYW5kIG9ubHkgZXhwb3J0ZWQgZm9yIHJlc2V0L3JlaW5pdCBwYXRoLgorLy8gb3RoZXJ3aXNlIHVzZWQgaW50ZXJuYWxseSBvbiBkaXNjb25uZWN0L2Rlc3Ryb3kgcGF0aAordm9pZCB1c2JfZGVzdHJveV9jb25maWd1cmF0aW9uKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJaW50IGMsIGk7CisKKwlpZiAoIWRldi0+Y29uZmlnKQorCQlyZXR1cm47CisKKwlpZiAoZGV2LT5yYXdkZXNjcmlwdG9ycykgeworCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9uczsgaSsrKQorCQkJa2ZyZWUoZGV2LT5yYXdkZXNjcmlwdG9yc1tpXSk7CisKKwkJa2ZyZWUoZGV2LT5yYXdkZXNjcmlwdG9ycyk7CisJCWRldi0+cmF3ZGVzY3JpcHRvcnMgPSBOVUxMOworCX0KKworCWZvciAoYyA9IDA7IGMgPCBkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOyBjKyspIHsKKwkJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqY2YgPSAmZGV2LT5jb25maWdbY107CisKKwkJa2ZyZWUoY2YtPnN0cmluZyk7CisJCWNmLT5zdHJpbmcgPSBOVUxMOworCisJCWZvciAoaSA9IDA7IGkgPCBjZi0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKSB7CisJCQlpZiAoY2YtPmludGZfY2FjaGVbaV0pCisJCQkJa3JlZl9wdXQoJmNmLT5pbnRmX2NhY2hlW2ldLT5yZWYsIAorCQkJCQkgIHVzYl9yZWxlYXNlX2ludGVyZmFjZV9jYWNoZSk7CisJCX0KKwl9CisJa2ZyZWUoZGV2LT5jb25maWcpOworCWRldi0+Y29uZmlnID0gTlVMTDsKK30KKworCisvLyBodWItb25seSEhIC4uLiBhbmQgb25seSBpbiByZXNldCBwYXRoLCBvciB1c2JfbmV3X2RldmljZSgpCisvLyAodXNlZCBieSByZWFsIGh1YnMgYW5kIHZpcnR1YWwgcm9vdCBodWJzKQoraW50IHVzYl9nZXRfY29uZmlndXJhdGlvbihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRkZXYgPSAmZGV2LT5kZXY7CisJaW50IG5jZmcgPSBkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOworCWludCByZXN1bHQgPSAtRU5PTUVNOworCXVuc2lnbmVkIGludCBjZmdubywgbGVuZ3RoOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyICpiaWdidWZmZXI7CisgCXN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgKmRlc2M7CisKKwlpZiAobmNmZyA+IFVTQl9NQVhDT05GSUcpIHsKKwkJZGV2X3dhcm4oZGRldiwgInRvbyBtYW55IGNvbmZpZ3VyYXRpb25zOiAlZCwgIgorCQkgICAgInVzaW5nIG1heGltdW0gYWxsb3dlZDogJWRcbiIsIG5jZmcsIFVTQl9NQVhDT05GSUcpOworCQlkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zID0gbmNmZyA9IFVTQl9NQVhDT05GSUc7CisJfQorCisJaWYgKG5jZmcgPCAxKSB7CisJCWRldl9lcnIoZGRldiwgIm5vIGNvbmZpZ3VyYXRpb25zXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbGVuZ3RoID0gbmNmZyAqIHNpemVvZihzdHJ1Y3QgdXNiX2hvc3RfY29uZmlnKTsKKwlkZXYtPmNvbmZpZyA9IGttYWxsb2MobGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+Y29uZmlnKQorCQlnb3RvIGVycjI7CisJbWVtc2V0KGRldi0+Y29uZmlnLCAwLCBsZW5ndGgpOworCisJbGVuZ3RoID0gbmNmZyAqIHNpemVvZihjaGFyICopOworCWRldi0+cmF3ZGVzY3JpcHRvcnMgPSBrbWFsbG9jKGxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPnJhd2Rlc2NyaXB0b3JzKQorCQlnb3RvIGVycjI7CisJbWVtc2V0KGRldi0+cmF3ZGVzY3JpcHRvcnMsIDAsIGxlbmd0aCk7CisKKwlidWZmZXIgPSBrbWFsbG9jKFVTQl9EVF9DT05GSUdfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCWdvdG8gZXJyMjsKKwlkZXNjID0gKHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgKilidWZmZXI7CisKKwlmb3IgKGNmZ25vID0gMDsgY2Znbm8gPCBuY2ZnOyBjZmdubysrKSB7CisJCS8qIFdlIGdyYWIganVzdCB0aGUgZmlyc3QgZGVzY3JpcHRvciBzbyB3ZSBrbm93IGhvdyBsb25nCisJCSAqIHRoZSB3aG9sZSBjb25maWd1cmF0aW9uIGlzICovCisJCXJlc3VsdCA9IHVzYl9nZXRfZGVzY3JpcHRvcihkZXYsIFVTQl9EVF9DT05GSUcsIGNmZ25vLAorCQkgICAgYnVmZmVyLCBVU0JfRFRfQ09ORklHX1NJWkUpOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJZGV2X2VycihkZGV2LCAidW5hYmxlIHRvIHJlYWQgY29uZmlnIGluZGV4ICVkICIKKwkJCSAgICAiZGVzY3JpcHRvci8lc1xuIiwgY2Znbm8sICJzdGFydCIpOworCQkJZ290byBlcnI7CisJCX0gZWxzZSBpZiAocmVzdWx0IDwgNCkgeworCQkJZGV2X2VycihkZGV2LCAiY29uZmlnIGluZGV4ICVkIGRlc2NyaXB0b3IgdG9vIHNob3J0ICIKKwkJCSAgICAiKGV4cGVjdGVkICVpLCBnb3QgJWkpXG4iLCBjZmdubywKKwkJCSAgICBVU0JfRFRfQ09ORklHX1NJWkUsIHJlc3VsdCk7CisJCQlyZXN1bHQgPSAtRUlOVkFMOworCQkJZ290byBlcnI7CisJCX0KKwkJbGVuZ3RoID0gbWF4KChpbnQpIGxlMTZfdG9fY3B1KGRlc2MtPndUb3RhbExlbmd0aCksCisJCSAgICBVU0JfRFRfQ09ORklHX1NJWkUpOworCisJCS8qIE5vdyB0aGF0IHdlIGtub3cgdGhlIGxlbmd0aCwgZ2V0IHRoZSB3aG9sZSB0aGluZyAqLworCQliaWdidWZmZXIgPSBrbWFsbG9jKGxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJCWlmICghYmlnYnVmZmVyKSB7CisJCQlyZXN1bHQgPSAtRU5PTUVNOworCQkJZ290byBlcnI7CisJCX0KKwkJcmVzdWx0ID0gdXNiX2dldF9kZXNjcmlwdG9yKGRldiwgVVNCX0RUX0NPTkZJRywgY2Znbm8sCisJCSAgICBiaWdidWZmZXIsIGxlbmd0aCk7CisJCWlmIChyZXN1bHQgPCAwKSB7CisJCQlkZXZfZXJyKGRkZXYsICJ1bmFibGUgdG8gcmVhZCBjb25maWcgaW5kZXggJWQgIgorCQkJICAgICJkZXNjcmlwdG9yLyVzXG4iLCBjZmdubywgImFsbCIpOworCQkJa2ZyZWUoYmlnYnVmZmVyKTsKKwkJCWdvdG8gZXJyOworCQl9CisJCWlmIChyZXN1bHQgPCBsZW5ndGgpIHsKKwkJCWRldl93YXJuKGRkZXYsICJjb25maWcgaW5kZXggJWQgZGVzY3JpcHRvciB0b28gc2hvcnQgIgorCQkJICAgICIoZXhwZWN0ZWQgJWksIGdvdCAlaSlcbiIsIGNmZ25vLCBsZW5ndGgsIHJlc3VsdCk7CisJCQlsZW5ndGggPSByZXN1bHQ7CisJCX0KKworCQlkZXYtPnJhd2Rlc2NyaXB0b3JzW2NmZ25vXSA9IGJpZ2J1ZmZlcjsKKworCQlyZXN1bHQgPSB1c2JfcGFyc2VfY29uZmlndXJhdGlvbigmZGV2LT5kZXYsIGNmZ25vLAorCQkgICAgJmRldi0+Y29uZmlnW2NmZ25vXSwgYmlnYnVmZmVyLCBsZW5ndGgpOworCQlpZiAocmVzdWx0IDwgMCkgeworCQkJKytjZmdubzsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCXJlc3VsdCA9IDA7CisKK2VycjoKKwlrZnJlZShidWZmZXIpOworCWRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgPSBjZmdubzsKK2VycjI6CisJaWYgKHJlc3VsdCA9PSAtRU5PTUVNKQorCQlkZXZfZXJyKGRkZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjYxYmNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMKQEAgLTAsMCArMSw2NzcgQEAKKy8qCisgKiBkZXZpY2VzLmMKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSYW5keSBEdW5sYXAuCisgKiAoQykgQ29weXJpZ2h0IDE5OTksMjAwMCBUaG9tYXMgU2FpbGVyIDxzYWlsZXJAaWZlLmVlLmV0aHouY2g+LiAocHJvYyBmaWxlIHBlciBkZXZpY2UpCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgRGV0aSBGbGllZ2wgKG5ldyBVU0IgYXJjaGl0ZWN0dXJlKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIDxtb3VudHBvaW50Pi9kZXZpY2VzIGNvbnRhaW5zIFVTQiB0b3BvbG9neSwgZGV2aWNlLCBjb25maWcsIGNsYXNzLAorICogaW50ZXJmYWNlLCAmIGVuZHBvaW50IGRhdGEuCisgKgorICogSSBjb25zaWRlcmVkIHVzaW5nIC9wcm9jL2J1cy91c2IvZGV2aWNlcy9kZXZpY2UjIGZvciBlYWNoIGRldmljZQorICogYXMgaXQgaXMgYXR0YWNoZWQgb3IgZGV0YWNoZWQsIGJ1dCBJIGRpZG4ndCBsaWtlIHRoaXMgZm9yIHNvbWUKKyAqIHJlYXNvbiAtLSBtYXliZSBpdCdzIGp1c3QgdG9vIGRlZXAgb2YgYSBkaXJlY3Rvcnkgc3RydWN0dXJlLgorICogSSBhbHNvIGRvbid0IGxpa2UgbG9va2luZyBpbiBtdWx0aXBsZSBwbGFjZXMgdG8gZ2F0aGVyIGFuZCB2aWV3CisgKiB0aGUgZGF0YS4gIEhhdmluZyBvbmx5IG9uZSBmaWxlIGZvciAuL2RldmljZXMgYWxzbyBwcmV2ZW50cyByYWNlCisgKiBjb25kaXRpb25zIHRoYXQgY291bGQgYXJpc2UgaWYgYSBwcm9ncmFtIHdhcyByZWFkaW5nIGRldmljZSBpbmZvCisgKiBmb3IgZGV2aWNlcyB0aGF0IGFyZSBiZWluZyByZW1vdmVkICh1bnBsdWdnZWQpLiAgKFRoYXQgaXMsIHRoZQorICogcHJvZ3JhbSBtYXkgZmluZCBhIGRpcmVjdG9yeSBmb3IgZGV2bnVtXzEyIHRoZW4gdHJ5IHRvIG9wZW4gaXQsCisgKiBidXQgaXQgd2FzIGp1c3QgdW5wbHVnZ2VkLCBzbyB0aGUgZGlyZWN0b3J5IGlzIG5vdyBkZWxldGVkLgorICogQnV0IHByb2dyYW1zIHdvdWxkIGp1c3QgaGF2ZSB0byBiZSBwcmVwYXJlZCBmb3Igc2l0dWF0aW9ucyBsaWtlCisgKiB0aGlzIGluIGFueSBwbHVnLWFuZC1wbGF5IGVudmlyb25tZW50LikKKyAqCisgKiAxOTk5LTEyLTE2OiBUaG9tYXMgU2FpbGVyIDxzYWlsZXJAaWZlLmVlLmV0aHouY2g+CisgKiAgIENvbnZlcnRlZCB0aGUgd2hvbGUgcHJvYyBzdHVmZiB0byByZWFsCisgKiAgIHJlYWQgbWV0aG9kcy4gTm93IG5vdCB0aGUgd2hvbGUgZGV2aWNlIGxpc3QgbmVlZHMgdG8gZml0CisgKiAgIGludG8gb25lIHBhZ2UsIG9ubHkgdGhlIGRldmljZSBsaXN0IGZvciBvbmUgYnVzLgorICogICBBZGRlZCBhIHBvbGwgbWV0aG9kIHRvIC9wcm9jL2J1cy91c2IvZGV2aWNlcywgdG8gd2FrZQorICogICB1cCBhbiBldmVudHVhbCB1c2JkCisgKiAyMDAwLTAxLTA0OiBUaG9tYXMgU2FpbGVyIDxzYWlsZXJAaWZlLmVlLmV0aHouY2g+CisgKiAgIFR1cm5lZCBpbnRvIGl0cyBvd24gZmlsZXN5c3RlbQorICogMjAwMC0wNy0wNTogQXNobGV5IE1vbnRhbmFybyA8YXNobGV5QGNvbXBzb2MubWFuLmFjLnVrPgorICogICBDb252ZXJ0ZWQgZmlsZSByZWFkaW5nIHJvdXRpbmUgdG8gZHVtcCB0byBidWZmZXIgb25jZQorICogICBwZXIgZGV2aWNlLCBub3QgcGVyIGJ1cworICoKKyAqICRJZDogZGV2aWNlcy5jLHYgMS41IDIwMDAvMDEvMTEgMTM6NTg6MjEgdG9tIEV4cCAkCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdXNiZGV2aWNlX2ZzLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgImhjZC5oIgorCisjZGVmaW5lIE1BWF9UT1BPX0xFVkVMCQk2CisKKy8qIERlZmluZSBBTExPV19TRVJJQUxfTlVNQkVSIGlmIHlvdSB3YW50IHRvIHNlZSB0aGUgc2VyaWFsIG51bWJlciBvZiBkZXZpY2VzICovCisjZGVmaW5lIEFMTE9XX1NFUklBTF9OVU1CRVIKKworc3RhdGljIGNoYXIgKmZvcm1hdF90b3BvID0KKy8qIFQ6ICBCdXM9ZGQgTGV2PWRkIFBybnQ9ZGQgUG9ydD1kZCBDbnQ9ZGQgRGV2Iz1kZGQgU3BkPWRkZCBNeENoPWRkICovCisiXG5UOiAgQnVzPSUyLjJkIExldj0lMi4yZCBQcm50PSUyLjJkIFBvcnQ9JTIuMmQgQ250PSUyLjJkIERldiM9JTNkIFNwZD0lM3MgTXhDaD0lMmRcbiI7CisKK3N0YXRpYyBjaGFyICpmb3JtYXRfc3RyaW5nX21hbnVmYWN0dXJlciA9CisvKiBTOiAgTWFudWZhY3R1cmVyPXh4eHggKi8KKyAgIlM6ICBNYW51ZmFjdHVyZXI9JS4xMDBzXG4iOworCitzdGF0aWMgY2hhciAqZm9ybWF0X3N0cmluZ19wcm9kdWN0ID0KKy8qIFM6ICBQcm9kdWN0PXh4eHggKi8KKyAgIlM6ICBQcm9kdWN0PSUuMTAwc1xuIjsKKworI2lmZGVmIEFMTE9XX1NFUklBTF9OVU1CRVIKK3N0YXRpYyBjaGFyICpmb3JtYXRfc3RyaW5nX3NlcmlhbG51bWJlciA9CisvKiBTOiAgU2VyaWFsTnVtYmVyPXh4eHggKi8KKyAgIlM6ICBTZXJpYWxOdW1iZXI9JS4xMDBzXG4iOworI2VuZGlmCisKK3N0YXRpYyBjaGFyICpmb3JtYXRfYmFuZHdpZHRoID0KKy8qIEI6ICBBbGxvYz1kZGQvZGRkIHVzICh4eCUpLCAjSW50PWRkZCwgI0lzbz1kZGQgKi8KKyAgIkI6ICBBbGxvYz0lM2QvJTNkIHVzICglMmQlJSksICNJbnQ9JTNkLCAjSXNvPSUzZFxuIjsKKyAgCitzdGF0aWMgY2hhciAqZm9ybWF0X2RldmljZTEgPQorLyogRDogIFZlcj14eC54eCBDbHM9eHgoc3Nzc3MpIFN1Yj14eCBQcm90PXh4IE14UFM9ZGQgI0NmZ3M9ZGQgKi8KKyAgIkQ6ICBWZXI9JTJ4LiUwMnggQ2xzPSUwMngoJS01cykgU3ViPSUwMnggUHJvdD0lMDJ4IE14UFM9JTJkICNDZmdzPSUzZFxuIjsKKworc3RhdGljIGNoYXIgKmZvcm1hdF9kZXZpY2UyID0KKy8qIFA6ICBWZW5kb3I9eHh4eCBQcm9kSUQ9eHh4eCBSZXY9eHgueHggKi8KKyAgIlA6ICBWZW5kb3I9JTA0eCBQcm9kSUQ9JTA0eCBSZXY9JTJ4LiUwMnhcbiI7CisKK3N0YXRpYyBjaGFyICpmb3JtYXRfY29uZmlnID0KKy8qIEM6ICAjSWZzPWRkIENmZyM9ZGQgQXRyPXh4IE1Qd3I9ZGRkbUEgKi8KKyAgIkM6JWMgI0lmcz0lMmQgQ2ZnIz0lMmQgQXRyPSUwMnggTXhQd3I9JTNkbUFcbiI7CisgIAorc3RhdGljIGNoYXIgKmZvcm1hdF9pZmFjZSA9CisvKiBJOiAgSWYjPWRkIEFsdD1kZCAjRVBzPWRkIENscz14eChzc3NzcykgU3ViPXh4IFByb3Q9eHggRHJpdmVyPXh4eHgqLworICAiSTogIElmIz0lMmQgQWx0PSUyZCAjRVBzPSUyZCBDbHM9JTAyeCglLTVzKSBTdWI9JTAyeCBQcm90PSUwMnggRHJpdmVyPSVzXG4iOworCitzdGF0aWMgY2hhciAqZm9ybWF0X2VuZHB0ID0KKy8qIEU6ICBBZD14eChzKSBBdHI9eHgoc3NzcykgTXhQUz1kZGRkIEl2bD1EP3MgKi8KKyAgIkU6ICBBZD0lMDJ4KCVjKSBBdHI9JTAyeCglLTRzKSBNeFBTPSU0ZCBJdmw9JWQlY3NcbiI7CisKKworLyoKKyAqIE5lZWQgYWNjZXNzIHRvIHRoZSBkcml2ZXIgYW5kIFVTQiBidXMgbGlzdHMuCisgKiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCB1c2JfYnVzX2xpc3Q7CisgKiBIb3dldmVyLCB0aGVzZSB3aWxsIGNvbWUgZnJvbSBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcHRycyB0byBlYWNoIG9mIHRoZW0uCisgKi8KKworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGRldmljZWNvbm5kaXNjd3EpOworc3RhdGljIHVuc2lnbmVkIGludCBjb25uZGlzY2V2Y250ID0gMDsKKworLyogdGhpcyBzdHJ1Y3Qgc3RvcmVzIHRoZSBwb2xsIHN0YXRlIGZvciA8bW91bnRwb2ludD4vZGV2aWNlcyBwb2xsZXJzICovCitzdHJ1Y3QgdXNiX2RldmljZV9zdGF0dXMgeworCXVuc2lnbmVkIGludCBsYXN0ZXY7Cit9OworCitzdHJ1Y3QgY2xhc3NfaW5mbyB7CisJaW50IGNsYXNzOworCWNoYXIgKmNsYXNzX25hbWU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzX2luZm8gY2xhc19pbmZvW10gPQorewkJCQkJLyogbWF4LiA1IGNoYXJzLiBwZXIgbmFtZSBzdHJpbmcgKi8KKwl7VVNCX0NMQVNTX1BFUl9JTlRFUkZBQ0UsCSI+aWZjIn0sCisJe1VTQl9DTEFTU19BVURJTywJCSJhdWRpbyJ9LAorCXtVU0JfQ0xBU1NfQ09NTSwJCSJjb21tLiJ9LAorCXtVU0JfQ0xBU1NfSElELAkJCSJISUQifSwKKwl7VVNCX0NMQVNTX0hVQiwJCQkiaHViIn0sCisJe1VTQl9DTEFTU19QSFlTSUNBTCwJCSJQSUQifSwKKwl7VVNCX0NMQVNTX1BSSU5URVIsCQkicHJpbnQifSwKKwl7VVNCX0NMQVNTX01BU1NfU1RPUkFHRSwJInN0b3IuIn0sCisJe1VTQl9DTEFTU19DRENfREFUQSwJCSJkYXRhIn0sCisJe1VTQl9DTEFTU19BUFBfU1BFQywJCSJhcHAuIn0sCisJe1VTQl9DTEFTU19WRU5ET1JfU1BFQywJCSJ2ZW5kLiJ9LAorCXtVU0JfQ0xBU1NfU1RJTExfSU1BR0UsCQkic3RpbGwifSwKKwl7VVNCX0NMQVNTX0NTQ0lELAkJInNjYXJkIn0sCisJe1VTQl9DTEFTU19DT05URU5UX1NFQywJCSJjLXNlYyJ9LAorCXstMSwJCQkJInVuay4ifQkJLyogbGVhdmUgYXMgbGFzdCAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIHVzYmZzX2Nvbm5fZGlzY19ldmVudCh2b2lkKQoreworCWNvbm5kaXNjZXZjbnQrKzsKKwl3YWtlX3VwKCZkZXZpY2Vjb25uZGlzY3dxKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNsYXNzX2RlY29kZShjb25zdCBpbnQgY2xhc3MpCit7CisJaW50IGl4OworCisJZm9yIChpeCA9IDA7IGNsYXNfaW5mb1tpeF0uY2xhc3MgIT0gLTE7IGl4KyspCisJCWlmIChjbGFzX2luZm9baXhdLmNsYXNzID09IGNsYXNzKQorCQkJYnJlYWs7CisJcmV0dXJuIChjbGFzX2luZm9baXhdLmNsYXNzX25hbWUpOworfQorCitzdGF0aWMgY2hhciAqdXNiX2R1bXBfZW5kcG9pbnRfZGVzY3JpcHRvciAoCisJaW50IHNwZWVkLAorCWNoYXIgKnN0YXJ0LAorCWNoYXIgKmVuZCwKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MKKykKK3sKKwljaGFyIGRpciwgdW5pdCwgKnR5cGU7CisJdW5zaWduZWQgaW50ZXJ2YWwsIGluLCBiYW5kd2lkdGggPSAxOworCisJaWYgKHN0YXJ0ID4gZW5kKQorCQlyZXR1cm4gc3RhcnQ7CisJaW4gPSAoZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pOworCWRpciA9IGluID8gJ0knIDogJ08nOworCWlmIChzcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgeworCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KGRlc2MtPndNYXhQYWNrZXRTaXplKSAmICgweDAzIDw8IDExKSkgeworCQljYXNlIDEgPDwgMTE6CWJhbmR3aWR0aCA9IDI7IGJyZWFrOworCQljYXNlIDIgPDwgMTE6CWJhbmR3aWR0aCA9IDM7IGJyZWFrOworCQl9CisJfQorCisJLyogdGhpcyBpc24ndCBjaGVja2luZyBmb3IgaWxsZWdhbCB2YWx1ZXMgKi8KKwlzd2l0Y2ggKGRlc2MtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSB7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgorCQl0eXBlID0gIkN0cmwiOworCQlpZiAoc3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIAkvKiB1ZnJhbWVzIHBlciBOQUsgKi8KKwkJCWludGVydmFsID0gZGVzYy0+YkludGVydmFsOworCQllbHNlCisJCQlpbnRlcnZhbCA9IDA7CisJCWRpciA9ICdCJzsJCQkvKiBjdHJsIGlzIGJpZGlyZWN0aW9uYWwgKi8KKwkJYnJlYWs7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DOgorCQl0eXBlID0gIklzb2MiOworCQlpbnRlcnZhbCA9IDEgPDwgKGRlc2MtPmJJbnRlcnZhbCAtIDEpOworCQlicmVhazsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6CisJCXR5cGUgPSAiQnVsayI7CisJCWlmIChzcGVlZCA9PSBVU0JfU1BFRURfSElHSCAmJiAhaW4pCS8qIHVmcmFtZXMgcGVyIE5BSyAqLworCQkJaW50ZXJ2YWwgPSBkZXNjLT5iSW50ZXJ2YWw7CisJCWVsc2UKKwkJCWludGVydmFsID0gMDsKKwkJYnJlYWs7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6CisJCXR5cGUgPSAiSW50LiI7CisJCWlmIChzcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgeworCQkJaW50ZXJ2YWwgPSAxIDw8IChkZXNjLT5iSW50ZXJ2YWwgLSAxKTsKKwkJfSBlbHNlCisJCQlpbnRlcnZhbCA9IGRlc2MtPmJJbnRlcnZhbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoJLyogImNhbid0IGhhcHBlbiIgKi8KKwkJcmV0dXJuIHN0YXJ0OworCX0KKwlpbnRlcnZhbCAqPSAoc3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpID8gMTI1IDogMTAwMDsKKwlpZiAoaW50ZXJ2YWwgJSAxMDAwKQorCQl1bml0ID0gJ3UnOworCWVsc2UgeworCQl1bml0ID0gJ20nOworCQlpbnRlcnZhbCAvPSAxMDAwOworCX0KKworCXN0YXJ0ICs9IHNwcmludGYoc3RhcnQsIGZvcm1hdF9lbmRwdCwgZGVzYy0+YkVuZHBvaW50QWRkcmVzcywgZGlyLAorCQkJIGRlc2MtPmJtQXR0cmlidXRlcywgdHlwZSwKKwkJCSAobGUxNl90b19jcHUoZGVzYy0+d01heFBhY2tldFNpemUpICYgMHgwN2ZmKSAqIGJhbmR3aWR0aCwKKwkJCSBpbnRlcnZhbCwgdW5pdCk7CisJcmV0dXJuIHN0YXJ0OworfQorCitzdGF0aWMgY2hhciAqdXNiX2R1bXBfaW50ZXJmYWNlX2Rlc2NyaXB0b3IoY2hhciAqc3RhcnQsIGNoYXIgKmVuZCwKKwljb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9jYWNoZSAqaW50ZmMsCisJY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlLAorCWludCBzZXRubykKK3sKKwljb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICpkZXNjID0gJmludGZjLT5hbHRzZXR0aW5nW3NldG5vXS5kZXNjOworCWNoYXIgKmRyaXZlcl9uYW1lID0gIiI7CisKKwlpZiAoc3RhcnQgPiBlbmQpCisJCXJldHVybiBzdGFydDsKKwlkb3duX3JlYWQoJnVzYl9idXNfdHlwZS5zdWJzeXMucndzZW0pOworCWlmIChpZmFjZSkKKwkJZHJpdmVyX25hbWUgPSAoaWZhY2UtPmRldi5kcml2ZXIKKwkJCQk/IGlmYWNlLT5kZXYuZHJpdmVyLT5uYW1lCisJCQkJOiAiKG5vbmUpIik7CisJc3RhcnQgKz0gc3ByaW50ZihzdGFydCwgZm9ybWF0X2lmYWNlLAorCQkJIGRlc2MtPmJJbnRlcmZhY2VOdW1iZXIsCisJCQkgZGVzYy0+YkFsdGVybmF0ZVNldHRpbmcsCisJCQkgZGVzYy0+Yk51bUVuZHBvaW50cywKKwkJCSBkZXNjLT5iSW50ZXJmYWNlQ2xhc3MsCisJCQkgY2xhc3NfZGVjb2RlKGRlc2MtPmJJbnRlcmZhY2VDbGFzcyksCisJCQkgZGVzYy0+YkludGVyZmFjZVN1YkNsYXNzLAorCQkJIGRlc2MtPmJJbnRlcmZhY2VQcm90b2NvbCwKKwkJCSBkcml2ZXJfbmFtZSk7CisJdXBfcmVhZCgmdXNiX2J1c190eXBlLnN1YnN5cy5yd3NlbSk7CisJcmV0dXJuIHN0YXJ0OworfQorCitzdGF0aWMgY2hhciAqdXNiX2R1bXBfaW50ZXJmYWNlKAorCWludCBzcGVlZCwKKwljaGFyICpzdGFydCwKKwljaGFyICplbmQsCisJY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2VfY2FjaGUgKmludGZjLAorCWNvbnN0IHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwKKwlpbnQgc2V0bm8KKykgeworCWNvbnN0IHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmRlc2MgPSAmaW50ZmMtPmFsdHNldHRpbmdbc2V0bm9dOworCWludCBpOworCisJc3RhcnQgPSB1c2JfZHVtcF9pbnRlcmZhY2VfZGVzY3JpcHRvcihzdGFydCwgZW5kLCBpbnRmYywgaWZhY2UsIHNldG5vKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBpKyspIHsKKwkJaWYgKHN0YXJ0ID4gZW5kKQorCQkJcmV0dXJuIHN0YXJ0OworCQlzdGFydCA9IHVzYl9kdW1wX2VuZHBvaW50X2Rlc2NyaXB0b3Ioc3BlZWQsCisJCQkJc3RhcnQsIGVuZCwgJmRlc2MtPmVuZHBvaW50W2ldLmRlc2MpOworCX0KKwlyZXR1cm4gc3RhcnQ7Cit9CisKKy8qIFRCRDoKKyAqIDAuIFRCRHMKKyAqIDEuIG1hcmtpbmcgYWN0aXZlIGludGVyZmFjZSBhbHRzZXR0aW5ncyAoY29kZSBsaXN0cyBhbGwsIGJ1dCBzaG91bGQgbWFyaworICogICAgd2hpY2ggb25lcyBhcmUgYWN0aXZlLCBpZiBhbnkpCisgKi8KKworc3RhdGljIGNoYXIgKnVzYl9kdW1wX2NvbmZpZ19kZXNjcmlwdG9yKGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsIGNvbnN0IHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgKmRlc2MsIGludCBhY3RpdmUpCit7CisJaWYgKHN0YXJ0ID4gZW5kKQorCQlyZXR1cm4gc3RhcnQ7CisJc3RhcnQgKz0gc3ByaW50ZihzdGFydCwgZm9ybWF0X2NvbmZpZywKKwkJCSBhY3RpdmUgPyAnKicgOiAnICcsCS8qIG1hcmsgYWN0aXZlL2FjdHVhbC9jdXJyZW50IGNmZy4gKi8KKwkJCSBkZXNjLT5iTnVtSW50ZXJmYWNlcywKKwkJCSBkZXNjLT5iQ29uZmlndXJhdGlvblZhbHVlLAorCQkJIGRlc2MtPmJtQXR0cmlidXRlcywKKwkJCSBkZXNjLT5iTWF4UG93ZXIgKiAyKTsKKwlyZXR1cm4gc3RhcnQ7Cit9CisKK3N0YXRpYyBjaGFyICp1c2JfZHVtcF9jb25maWcgKAorCWludCBzcGVlZCwKKwljaGFyICpzdGFydCwKKwljaGFyICplbmQsCisJY29uc3Qgc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqY29uZmlnLAorCWludCBhY3RpdmUKKykKK3sKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9jYWNoZSAqaW50ZmM7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKKworCWlmIChzdGFydCA+IGVuZCkKKwkJcmV0dXJuIHN0YXJ0OworCWlmICghY29uZmlnKQkJLyogZ2V0dGluZyB0aGVzZSBzb21lIGluIDIuMy43OyBub25lIGluIDIuMy42ICovCisJCXJldHVybiBzdGFydCArIHNwcmludGYoc3RhcnQsICIobnVsbCBDZmcuIGRlc2MuKVxuIik7CisJc3RhcnQgPSB1c2JfZHVtcF9jb25maWdfZGVzY3JpcHRvcihzdGFydCwgZW5kLCAmY29uZmlnLT5kZXNjLCBhY3RpdmUpOworCWZvciAoaSA9IDA7IGkgPCBjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgeworCQlpbnRmYyA9IGNvbmZpZy0+aW50Zl9jYWNoZVtpXTsKKwkJaW50ZXJmYWNlID0gY29uZmlnLT5pbnRlcmZhY2VbaV07CisJCWZvciAoaiA9IDA7IGogPCBpbnRmYy0+bnVtX2FsdHNldHRpbmc7IGorKykgeworCQkJaWYgKHN0YXJ0ID4gZW5kKQorCQkJCXJldHVybiBzdGFydDsKKwkJCXN0YXJ0ID0gdXNiX2R1bXBfaW50ZXJmYWNlKHNwZWVkLAorCQkJCXN0YXJ0LCBlbmQsIGludGZjLCBpbnRlcmZhY2UsIGopOworCQl9CisJfQorCXJldHVybiBzdGFydDsKK30KKworLyoKKyAqIER1bXAgdGhlIGRpZmZlcmVudCBVU0IgZGVzY3JpcHRvcnMuCisgKi8KK3N0YXRpYyBjaGFyICp1c2JfZHVtcF9kZXZpY2VfZGVzY3JpcHRvcihjaGFyICpzdGFydCwgY2hhciAqZW5kLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yICpkZXNjKQoreworCXUxNiBiY2RVU0IgPSBsZTE2X3RvX2NwdShkZXNjLT5iY2RVU0IpOworCXUxNiBiY2REZXZpY2UgPSBsZTE2X3RvX2NwdShkZXNjLT5iY2REZXZpY2UpOworCisJaWYgKHN0YXJ0ID4gZW5kKQorCQlyZXR1cm4gc3RhcnQ7CisJc3RhcnQgKz0gc3ByaW50ZiAoc3RhcnQsIGZvcm1hdF9kZXZpY2UxLAorCQkJICBiY2RVU0IgPj4gOCwgYmNkVVNCICYgMHhmZiwKKwkJCSAgZGVzYy0+YkRldmljZUNsYXNzLAorCQkJICBjbGFzc19kZWNvZGUgKGRlc2MtPmJEZXZpY2VDbGFzcyksCisJCQkgIGRlc2MtPmJEZXZpY2VTdWJDbGFzcywKKwkJCSAgZGVzYy0+YkRldmljZVByb3RvY29sLAorCQkJICBkZXNjLT5iTWF4UGFja2V0U2l6ZTAsCisJCQkgIGRlc2MtPmJOdW1Db25maWd1cmF0aW9ucyk7CisJaWYgKHN0YXJ0ID4gZW5kKQorCQlyZXR1cm4gc3RhcnQ7CisJc3RhcnQgKz0gc3ByaW50ZihzdGFydCwgZm9ybWF0X2RldmljZTIsCisJCQkgbGUxNl90b19jcHUoZGVzYy0+aWRWZW5kb3IpLAorCQkJIGxlMTZfdG9fY3B1KGRlc2MtPmlkUHJvZHVjdCksCisJCQkgYmNkRGV2aWNlID4+IDgsIGJjZERldmljZSAmIDB4ZmYpOworCXJldHVybiBzdGFydDsKK30KKworLyoKKyAqIER1bXAgdGhlIGRpZmZlcmVudCBzdHJpbmdzIHRoYXQgdGhpcyBkZXZpY2UgaG9sZHMuCisgKi8KK3N0YXRpYyBjaGFyICp1c2JfZHVtcF9kZXZpY2Vfc3RyaW5ncyAoY2hhciAqc3RhcnQsIGNoYXIgKmVuZCwgc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3sKKwlpZiAoc3RhcnQgPiBlbmQpCisJCXJldHVybiBzdGFydDsKKwlpZiAoZGV2LT5tYW51ZmFjdHVyZXIpCisJCXN0YXJ0ICs9IHNwcmludGYoc3RhcnQsIGZvcm1hdF9zdHJpbmdfbWFudWZhY3R1cmVyLCBkZXYtPm1hbnVmYWN0dXJlcik7CisJaWYgKHN0YXJ0ID4gZW5kKQorCQlnb3RvIG91dDsKKwlpZiAoZGV2LT5wcm9kdWN0KQorCQlzdGFydCArPSBzcHJpbnRmKHN0YXJ0LCBmb3JtYXRfc3RyaW5nX3Byb2R1Y3QsIGRldi0+cHJvZHVjdCk7CisJaWYgKHN0YXJ0ID4gZW5kKQorCQlnb3RvIG91dDsKKyNpZmRlZiBBTExPV19TRVJJQUxfTlVNQkVSCisJaWYgKGRldi0+c2VyaWFsKQorCQlzdGFydCArPSBzcHJpbnRmKHN0YXJ0LCBmb3JtYXRfc3RyaW5nX3NlcmlhbG51bWJlciwgZGV2LT5zZXJpYWwpOworI2VuZGlmCisgb3V0OgorCXJldHVybiBzdGFydDsKK30KKworc3RhdGljIGNoYXIgKnVzYl9kdW1wX2Rlc2MoY2hhciAqc3RhcnQsIGNoYXIgKmVuZCwgc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3sKKwlpbnQgaTsKKworCWlmIChzdGFydCA+IGVuZCkKKwkJcmV0dXJuIHN0YXJ0OworCQkKKwlzdGFydCA9IHVzYl9kdW1wX2RldmljZV9kZXNjcmlwdG9yKHN0YXJ0LCBlbmQsICZkZXYtPmRlc2NyaXB0b3IpOworCisJaWYgKHN0YXJ0ID4gZW5kKQorCQlyZXR1cm4gc3RhcnQ7CisJCisJc3RhcnQgPSB1c2JfZHVtcF9kZXZpY2Vfc3RyaW5ncyAoc3RhcnQsIGVuZCwgZGV2KTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOyBpKyspIHsKKwkJaWYgKHN0YXJ0ID4gZW5kKQorCQkJcmV0dXJuIHN0YXJ0OworCQlzdGFydCA9IHVzYl9kdW1wX2NvbmZpZyhkZXYtPnNwZWVkLAorCQkJCXN0YXJ0LCBlbmQsIGRldi0+Y29uZmlnICsgaSwKKwkJCQkvKiBhY3RpdmUgPyAqLworCQkJCShkZXYtPmNvbmZpZyArIGkpID09IGRldi0+YWN0Y29uZmlnKTsKKwl9CisJcmV0dXJuIHN0YXJ0OworfQorCisKKyNpZmRlZiBQUk9DX0VYVFJBIC8qIFRCRDogbWF5IHdhbnQgdG8gYWRkIHRoaXMgY29kZSBsYXRlciAqLworCitzdGF0aWMgY2hhciAqdXNiX2R1bXBfaHViX2Rlc2NyaXB0b3IoY2hhciAqc3RhcnQsIGNoYXIgKmVuZCwgY29uc3Qgc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqIGRlc2MpCit7CisJaW50IGxlbmcgPSBVU0JfRFRfSFVCX05PTlZBUl9TSVpFOworCXVuc2lnbmVkIGNoYXIgKnB0ciA9ICh1bnNpZ25lZCBjaGFyICopZGVzYzsKKworCWlmIChzdGFydCA+IGVuZCkKKwkJcmV0dXJuIHN0YXJ0OworCXN0YXJ0ICs9IHNwcmludGYoc3RhcnQsICJJbnRlcmZhY2U6Iik7CisJd2hpbGUgKGxlbmcgJiYgc3RhcnQgPD0gZW5kKSB7CisJCXN0YXJ0ICs9IHNwcmludGYoc3RhcnQsICIgJTAyeCIsICpwdHIpOworCQlwdHIrKzsgbGVuZy0tOworCX0KKwkqc3RhcnQrKyA9ICdcbic7CisJcmV0dXJuIHN0YXJ0OworfQorCitzdGF0aWMgY2hhciAqdXNiX2R1bXBfc3RyaW5nKGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGNoYXIgKmlkLCBpbnQgaW5kZXgpCit7CisJaWYgKHN0YXJ0ID4gZW5kKQorCQlyZXR1cm4gc3RhcnQ7CisJc3RhcnQgKz0gc3ByaW50ZihzdGFydCwgIkludGVyZmFjZToiKTsKKwlpZiAoaW5kZXggPD0gZGV2LT5tYXhzdHJpbmcgJiYgZGV2LT5zdHJpbmdpbmRleCAmJiBkZXYtPnN0cmluZ2luZGV4W2luZGV4XSkKKwkJc3RhcnQgKz0gc3ByaW50ZihzdGFydCwgIiVzOiAlLjEwMHMgIiwgaWQsIGRldi0+c3RyaW5naW5kZXhbaW5kZXhdKTsKKwlyZXR1cm4gc3RhcnQ7Cit9CisKKyNlbmRpZiAvKiBQUk9DX0VYVFJBICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBpcyBhIHJlY3Vyc2l2ZSBmdW5jdGlvbi4gUGFyYW1ldGVyczoKKyAqIGJ1ZmZlciAtIHRoZSB1c2VyLXNwYWNlIGJ1ZmZlciB0byB3cml0ZSBkYXRhIGludG8KKyAqIG5ieXRlcyAtIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byB3cml0ZQorICogc2tpcF9ieXRlcyAtIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2tpcCBiZWZvcmUgd3JpdGluZyBhbnl0aGluZworICogZmlsZV9vZmZzZXQgLSB0aGUgb2Zmc2V0IGludG8gdGhlIGRldmljZXMgZmlsZSBvbiBjb21wbGV0aW9uCisgKiBUaGUgY2FsbGVyIG11c3Qgb3duIHRoZSBkZXZpY2UgbG9jay4KKyAqLworc3RhdGljIHNzaXplX3QgdXNiX2RldmljZV9kdW1wKGNoYXIgX191c2VyICoqYnVmZmVyLCBzaXplX3QgKm5ieXRlcywgbG9mZl90ICpza2lwX2J5dGVzLCBsb2ZmX3QgKmZpbGVfb2Zmc2V0LAorCQkJCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYsIHN0cnVjdCB1c2JfYnVzICpidXMsIGludCBsZXZlbCwgaW50IGluZGV4LCBpbnQgY291bnQpCit7CisJaW50IGNoaXg7CisJaW50IHJldCwgY250ID0gMDsKKwlpbnQgcGFyZW50X2Rldm51bSA9IDA7CisJY2hhciAqcGFnZXNfc3RhcnQsICpkYXRhX2VuZCwgKnNwZWVkOworCXVuc2lnbmVkIGludCBsZW5ndGg7CisJc3NpemVfdCB0b3RhbF93cml0dGVuID0gMDsKKwkKKwkvKiBkb24ndCBib3RoZXIgd2l0aCBhbnl0aGluZyBlbHNlIGlmIHdlJ3JlIG5vdCB3cml0aW5nIGFueSBkYXRhICovCisJaWYgKCpuYnl0ZXMgPD0gMCkKKwkJcmV0dXJuIDA7CisJCisJaWYgKGxldmVsID4gTUFYX1RPUE9fTEVWRUwpCisJCXJldHVybiAwOworCS8qIGFsbG9jYXRlIDJeMSBwYWdlcyA9IDhLIChvbiBpMzg2KTsgc2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2ggZm9yIG9uZSBkZXZpY2UgKi8KKyAgICAgICAgaWYgKCEocGFnZXNfc3RhcnQgPSAoY2hhciopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwxKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisJCQorCWlmICh1c2JkZXYtPnBhcmVudCAmJiB1c2JkZXYtPnBhcmVudC0+ZGV2bnVtICE9IC0xKQorCQlwYXJlbnRfZGV2bnVtID0gdXNiZGV2LT5wYXJlbnQtPmRldm51bTsKKwkvKgorCSAqIFNvIHRoZSByb290IGh1YidzIHBhcmVudCBpcyAwIGFuZCBhbnkgZGV2aWNlIHRoYXQgaXMKKwkgKiBwbHVnZ2VkIGludG8gdGhlIHJvb3QgaHViIGhhcyBhIHBhcmVudCBvZiAwLgorCSAqLworCXN3aXRjaCAodXNiZGV2LT5zcGVlZCkgeworCWNhc2UgVVNCX1NQRUVEX0xPVzoKKwkJc3BlZWQgPSAiMS41IjsgYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfVU5LTk9XTjoJCS8qIHVzYiAxLjEgcm9vdCBodWIgY29kZSAqLworCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCXNwZWVkID0gIjEyICI7IGJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCXNwZWVkID0gIjQ4MCI7IGJyZWFrOworCWRlZmF1bHQ6CisJCXNwZWVkID0gIj8/ICI7CisJfQorCWRhdGFfZW5kID0gcGFnZXNfc3RhcnQgKyBzcHJpbnRmKHBhZ2VzX3N0YXJ0LCBmb3JtYXRfdG9wbywKKwkJCWJ1cy0+YnVzbnVtLCBsZXZlbCwgcGFyZW50X2Rldm51bSwKKwkJCWluZGV4LCBjb3VudCwgdXNiZGV2LT5kZXZudW0sCisJCQlzcGVlZCwgdXNiZGV2LT5tYXhjaGlsZCk7CisJLyoKKwkgKiBsZXZlbCA9IHRvcG9sb2d5LXRpZXIgbGV2ZWw7CisJICogcGFyZW50X2Rldm51bSA9IHBhcmVudCBkZXZpY2UgbnVtYmVyOworCSAqIGluZGV4ID0gcGFyZW50J3MgY29ubmVjdG9yIG51bWJlcjsKKwkgKiBjb3VudCA9IGRldmljZSBjb3VudCBhdCB0aGlzIGxldmVsCisJICovCisJLyogSWYgdGhpcyBpcyB0aGUgcm9vdCBodWIsIGRpc3BsYXkgdGhlIGJhbmR3aWR0aCBpbmZvcm1hdGlvbiAqLworCWlmIChsZXZlbCA9PSAwKSB7CisJCWludAltYXg7CisKKwkJLyogaGlnaCBzcGVlZCByZXNlcnZlcyA4MCUsIGZ1bGwvbG93IHJlc2VydmVzIDkwJSAqLworCQlpZiAodXNiZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJCW1heCA9IDgwMDsKKwkJZWxzZQorCQkJbWF4ID0gRlJBTUVfVElNRV9NQVhfVVNFQ1NfQUxMT0M7CisKKwkJLyogcmVwb3J0ICJhdmVyYWdlIiBwZXJpb2RpYyBhbGxvY2F0aW9uIG92ZXIgYSBtaWNyb3NlY29uZC4KKwkJICogdGhlIHNjaGVkdWxlcyBhcmUgYWN0dWFsbHkgYnVyc3R5LCBIQ0RzIG5lZWQgdG8gZGVhbCB3aXRoCisJCSAqIHRoYXQgYW5kIGp1c3QgY29tcHV0ZS9yZXBvcnQgdGhpcyBhdmVyYWdlLgorCQkgKi8KKwkJZGF0YV9lbmQgKz0gc3ByaW50ZihkYXRhX2VuZCwgZm9ybWF0X2JhbmR3aWR0aCwKKwkJCQlidXMtPmJhbmR3aWR0aF9hbGxvY2F0ZWQsIG1heCwKKwkJCQkoMTAwICogYnVzLT5iYW5kd2lkdGhfYWxsb2NhdGVkICsgbWF4IC8gMikKKwkJCQkJLyBtYXgsCisJCQkgICAgICAgICBidXMtPmJhbmR3aWR0aF9pbnRfcmVxcywKKwkJCQkgYnVzLT5iYW5kd2lkdGhfaXNvY19yZXFzKTsKKwkKKwl9CisJZGF0YV9lbmQgPSB1c2JfZHVtcF9kZXNjKGRhdGFfZW5kLCBwYWdlc19zdGFydCArICgyICogUEFHRV9TSVpFKSAtIDI1NiwgdXNiZGV2KTsKKwkKKwlpZiAoZGF0YV9lbmQgPiAocGFnZXNfc3RhcnQgKyAoMiAqIFBBR0VfU0laRSkgLSAyNTYpKQorCQlkYXRhX2VuZCArPSBzcHJpbnRmKGRhdGFfZW5kLCAiKHRydW5jYXRlZClcbiIpOworCQorCWxlbmd0aCA9IGRhdGFfZW5kIC0gcGFnZXNfc3RhcnQ7CisJLyogaWYgd2UgY2FuIHN0YXJ0IGNvcHlpbmcgc29tZSBkYXRhIHRvIHRoZSB1c2VyICovCisJaWYgKGxlbmd0aCA+ICpza2lwX2J5dGVzKSB7CisJCWxlbmd0aCAtPSAqc2tpcF9ieXRlczsKKwkJaWYgKGxlbmd0aCA+ICpuYnl0ZXMpCisJCQlsZW5ndGggPSAqbmJ5dGVzOworCQlpZiAoY29weV90b191c2VyKCpidWZmZXIsIHBhZ2VzX3N0YXJ0ICsgKnNraXBfYnl0ZXMsIGxlbmd0aCkpIHsKKwkJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcGFnZXNfc3RhcnQsIDEpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJKm5ieXRlcyAtPSBsZW5ndGg7CisJCSpmaWxlX29mZnNldCArPSBsZW5ndGg7CisJCXRvdGFsX3dyaXR0ZW4gKz0gbGVuZ3RoOworCQkqYnVmZmVyICs9IGxlbmd0aDsKKwkJKnNraXBfYnl0ZXMgPSAwOworCX0gZWxzZQorCQkqc2tpcF9ieXRlcyAtPSBsZW5ndGg7CisJCisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwYWdlc19zdGFydCwgMSk7CisJCisJLyogTm93IGxvb2sgYXQgYWxsIG9mIHRoaXMgZGV2aWNlJ3MgY2hpbGRyZW4uICovCisJZm9yIChjaGl4ID0gMDsgY2hpeCA8IHVzYmRldi0+bWF4Y2hpbGQ7IGNoaXgrKykgeworCQlzdHJ1Y3QgdXNiX2RldmljZSAqY2hpbGRkZXYgPSB1c2JkZXYtPmNoaWxkcmVuW2NoaXhdOworCisJCWlmIChjaGlsZGRldikgeworCQkJZG93bigmY2hpbGRkZXYtPnNlcmlhbGl6ZSk7CisJCQlyZXQgPSB1c2JfZGV2aWNlX2R1bXAoYnVmZmVyLCBuYnl0ZXMsIHNraXBfYnl0ZXMsIGZpbGVfb2Zmc2V0LCBjaGlsZGRldiwKKwkJCQkJYnVzLCBsZXZlbCArIDEsIGNoaXgsICsrY250KTsKKwkJCXVwKCZjaGlsZGRldi0+c2VyaWFsaXplKTsKKwkJCWlmIChyZXQgPT0gLUVGQVVMVCkKKwkJCQlyZXR1cm4gdG90YWxfd3JpdHRlbjsKKwkJCXRvdGFsX3dyaXR0ZW4gKz0gcmV0OworCQl9CisJfQorCXJldHVybiB0b3RhbF93cml0dGVuOworfQorCitzdGF0aWMgc3NpemVfdCB1c2JfZGV2aWNlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdXNiX2J1cyAqYnVzOworCXNzaXplX3QgcmV0LCB0b3RhbF93cml0dGVuID0gMDsKKwlsb2ZmX3Qgc2tpcF9ieXRlcyA9ICpwcG9zOworCisJaWYgKCpwcG9zIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG5ieXRlcyA8PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1ZiwgbmJ5dGVzKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlkb3duICgmdXNiX2J1c19saXN0X2xvY2spOworCS8qIHByaW50IGRldmljZXMgZm9yIGFsbCBidXNzZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1cywgJnVzYl9idXNfbGlzdCwgYnVzX2xpc3QpIHsKKwkJLyogcmVjdXJzZSB0aHJvdWdoIGFsbCBjaGlsZHJlbiBvZiB0aGUgcm9vdCBodWIgKi8KKwkJaWYgKCFidXMtPnJvb3RfaHViKQorCQkJY29udGludWU7CisJCXVzYl9sb2NrX2RldmljZShidXMtPnJvb3RfaHViKTsKKwkJcmV0ID0gdXNiX2RldmljZV9kdW1wKCZidWYsICZuYnl0ZXMsICZza2lwX2J5dGVzLCBwcG9zLCBidXMtPnJvb3RfaHViLCBidXMsIDAsIDAsIDApOworCQl1c2JfdW5sb2NrX2RldmljZShidXMtPnJvb3RfaHViKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXVwKCZ1c2JfYnVzX2xpc3RfbG9jayk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCXRvdGFsX3dyaXR0ZW4gKz0gcmV0OworCX0KKwl1cCAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwlyZXR1cm4gdG90YWxfd3JpdHRlbjsKK30KKworLyogS2VybmVsIGxvY2sgZm9yICJsYXN0ZXYiIHByb3RlY3Rpb24gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXNiX2RldmljZV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCit7CisJc3RydWN0IHVzYl9kZXZpY2Vfc3RhdHVzICpzdCA9IChzdHJ1Y3QgdXNiX2RldmljZV9zdGF0dXMgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwOworCisJbG9ja19rZXJuZWwoKTsKKwlpZiAoIXN0KSB7CisJCXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9kZXZpY2Vfc3RhdHVzKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghc3QpIHsKKwkJCXVubG9ja19rZXJuZWwoKTsKKwkJCXJldHVybiBQT0xMSU47CisJCX0KKwkJCisJCS8qIHdlIG1heSBoYXZlIGRyb3BwZWQgQktMIC0gbmVlZCB0byBjaGVjayBmb3IgaGF2aW5nIGxvc3QgdGhlIHJhY2UgKi8KKwkJaWYgKGZpbGUtPnByaXZhdGVfZGF0YSkgeworCQkJa2ZyZWUoc3QpOworCQkJc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJCQlnb3RvIGxvc3RfcmFjZTsKKwkJfQorCisJCS8qCisJCSAqIG5lZWQgdG8gcHJldmVudCB0aGUgbW9kdWxlIGZyb20gYmVpbmcgdW5sb2FkZWQsIHNpbmNlCisJCSAqIHByb2NfdW5yZWdpc3RlciBkb2VzIG5vdCBjYWxsIHRoZSByZWxlYXNlIG1ldGhvZCBhbmQKKwkJICogd2Ugd291bGQgaGF2ZSBhIG1lbW9yeSBsZWFrCisJCSAqLworCQlzdC0+bGFzdGV2ID0gY29ubmRpc2NldmNudDsKKwkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gc3Q7CisJCW1hc2sgPSBQT0xMSU47CisJfQorbG9zdF9yYWNlOgorCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKQorICAgICAgICAgICAgICAgIHBvbGxfd2FpdChmaWxlLCAmZGV2aWNlY29ubmRpc2N3cSwgd2FpdCk7CisJaWYgKHN0LT5sYXN0ZXYgIT0gY29ubmRpc2NldmNudCkKKwkJbWFzayB8PSBQT0xMSU47CisJc3QtPmxhc3RldiA9IGNvbm5kaXNjZXZjbnQ7CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiBtYXNrOworfQorCitzdGF0aWMgaW50IHVzYl9kZXZpY2Vfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKyAgICAgICAgZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNiX2RldmljZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmIChmaWxlLT5wcml2YXRlX2RhdGEpIHsKKwkJa2ZyZWUoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKKwkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwl9CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb2ZmX3QgdXNiX2RldmljZV9sc2VlayhzdHJ1Y3QgZmlsZSAqIGZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnKQoreworCWxvZmZfdCByZXQ7CisKKwlsb2NrX2tlcm5lbCgpOworCisJc3dpdGNoIChvcmlnKSB7CisJY2FzZSAwOgorCQlmaWxlLT5mX3BvcyA9IG9mZnNldDsKKwkJcmV0ID0gZmlsZS0+Zl9wb3M7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZmlsZS0+Zl9wb3MgKz0gb2Zmc2V0OworCQlyZXQgPSBmaWxlLT5mX3BvczsKKwkJYnJlYWs7CisJY2FzZSAyOgorCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiZnNfZGV2aWNlc19mb3BzID0geworCS5sbHNlZWsgPQl1c2JfZGV2aWNlX2xzZWVrLAorCS5yZWFkID0JCXVzYl9kZXZpY2VfcmVhZCwKKwkucG9sbCA9CQl1c2JfZGV2aWNlX3BvbGwsCisJLm9wZW4gPQkJdXNiX2RldmljZV9vcGVuLAorCS5yZWxlYXNlID0JdXNiX2RldmljZV9yZWxlYXNlLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDQ3YmMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCkBAIC0wLDAgKzEsMTQ4MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogICAgICBkZXZpby5jICAtLSAgVXNlciBzcGFjZSBjb21tdW5pY2F0aW9uIHdpdGggVVNCIGRldmljZXMuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCAgVGhvbWFzIFNhaWxlciAoc2FpbGVyQGlmZS5lZS5ldGh6LmNoKQorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiAgJElkOiBkZXZpby5jLHYgMS43IDIwMDAvMDIvMDEgMTc6Mjg6NDggZmxpZWdsIEV4cCAkCisgKgorICogIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSB1c2Jmcy94L3kgZmlsZXMsIHdoZXJlCisgKiAgeCBpcyB0aGUgYnVzIG51bWJlciBhbmQgeSB0aGUgZGV2aWNlIG51bWJlci4KKyAqCisgKiAgSXQgYWxsb3dzIHVzZXIgc3BhY2UgcHJvZ3JhbXMvImRyaXZlcnMiIHRvIGNvbW11bmljYXRlIGRpcmVjdGx5CisgKiAgd2l0aCBVU0IgZGV2aWNlcyB3aXRob3V0IGludGVydmVuaW5nIGtlcm5lbCBkcml2ZXIuCisgKgorICogIFJldmlzaW9uIGhpc3RvcnkKKyAqICAgIDIyLjEyLjE5OTkgICAwLjEgICBJbml0aWFsIHJlbGVhc2UgKHNwbGl0IGZyb20gcHJvY191c2IuYykKKyAqICAgIDA0LjAxLjIwMDAgICAwLjIgICBUdXJuZWQgaW50byBpdHMgb3duIGZpbGVzeXN0ZW0KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYmRldmljZV9mcy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisKKyNpbmNsdWRlICJoY2QuaCIJLyogZm9yIHVzYmNvcmUgaW50ZXJuYWxzICovCisjaW5jbHVkZSAidXNiLmgiCisKK3N0cnVjdCBhc3luYyB7CisJc3RydWN0IGxpc3RfaGVhZCBhc3luY2xpc3Q7CisJc3RydWN0IGRldl9zdGF0ZSAqcHM7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCXVuc2lnbmVkIGludCBzaWducjsKKwl1bnNpZ25lZCBpbnQgaWZudW07CisJdm9pZCBfX3VzZXIgKnVzZXJidWZmZXI7CisJdm9pZCBfX3VzZXIgKnVzZXJ1cmI7CisJc3RydWN0IHVyYiAqdXJiOworfTsKKworc3RhdGljIGludCB1c2Jmc19zbm9vcCA9IDA7Cittb2R1bGVfcGFyYW0gKHVzYmZzX3Nub29wLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDICh1c2Jmc19zbm9vcCwgInRydWUgdG8gbG9nIGFsbCB1c2JmcyB0cmFmZmljIik7CisKKyNkZWZpbmUgc25vb3AoZGV2LCBmb3JtYXQsIGFyZy4uLikJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAodXNiZnNfc25vb3ApCQkJCVwKKwkJCWRldl9pbmZvKCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpOwlcCisJfSB3aGlsZSAoMCkKKworCisjZGVmaW5lCU1BWF9VU0JGU19CVUZGRVJfU0laRQkxNjM4NAorCitzdGF0aWMgaW5saW5lIGludCBjb25uZWN0ZWQgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEOworfQorCitzdGF0aWMgbG9mZl90IHVzYmRldl9sc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWcpCit7CisJbG9mZl90IHJldDsKKworCWxvY2tfa2VybmVsKCk7CisKKwlzd2l0Y2ggKG9yaWcpIHsKKwljYXNlIDA6CisJCWZpbGUtPmZfcG9zID0gb2Zmc2V0OworCQlyZXQgPSBmaWxlLT5mX3BvczsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlmaWxlLT5mX3BvcyArPSBvZmZzZXQ7CisJCXJldCA9IGZpbGUtPmZfcG9zOworCQlicmVhazsKKwljYXNlIDI6CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgdXNiZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZGV2X3N0YXRlICpwcyA9IChzdHJ1Y3QgZGV2X3N0YXRlICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwcy0+ZGV2OworCXNzaXplX3QgcmV0ID0gMDsKKwl1bnNpZ25lZCBsZW47CisJbG9mZl90IHBvczsKKwlpbnQgaTsKKworCXBvcyA9ICpwcG9zOworCXVzYl9sb2NrX2RldmljZShkZXYpOworCWlmICghY29ubmVjdGVkKGRldikpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnI7CisJfSBlbHNlIGlmIChwb3MgPCAwKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKworCWlmIChwb3MgPCBzaXplb2Yoc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvcikpIHsKKwkJc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvciAqZGVzYyA9IGttYWxsb2Moc2l6ZW9mKCpkZXNjKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZGVzYykgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyOworCQl9CisJCW1lbWNweShkZXNjLCAmZGV2LT5kZXNjcmlwdG9yLCBzaXplb2YoZGV2LT5kZXNjcmlwdG9yKSk7CisJCWxlMTZfdG9fY3B1cygmZGVzYy0+YmNkVVNCKTsKKwkJbGUxNl90b19jcHVzKCZkZXNjLT5pZFZlbmRvcik7CisJCWxlMTZfdG9fY3B1cygmZGVzYy0+aWRQcm9kdWN0KTsKKwkJbGUxNl90b19jcHVzKCZkZXNjLT5iY2REZXZpY2UpOworCisJCWxlbiA9IHNpemVvZihzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yKSAtIHBvczsKKwkJaWYgKGxlbiA+IG5ieXRlcykKKwkJCWxlbiA9IG5ieXRlczsKKwkJaWYgKGNvcHlfdG9fdXNlcihidWYsICgoY2hhciAqKWRlc2MpICsgcG9zLCBsZW4pKSB7CisJCQlrZnJlZShkZXNjKTsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIGVycjsKKwkJfQorCQlrZnJlZShkZXNjKTsKKworCQkqcHBvcyArPSBsZW47CisJCWJ1ZiArPSBsZW47CisJCW5ieXRlcyAtPSBsZW47CisJCXJldCArPSBsZW47CisJfQorCisJcG9zID0gc2l6ZW9mKHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IpOworCWZvciAoaSA9IDA7IG5ieXRlcyAmJiBpIDwgZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9uczsgaSsrKSB7CisJCXN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgKmNvbmZpZyA9CisJCQkoc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvciAqKWRldi0+cmF3ZGVzY3JpcHRvcnNbaV07CisJCXVuc2lnbmVkIGludCBsZW5ndGggPSBsZTE2X3RvX2NwdShjb25maWctPndUb3RhbExlbmd0aCk7CisKKwkJaWYgKCpwcG9zIDwgcG9zICsgbGVuZ3RoKSB7CisKKwkJCS8qIFRoZSBkZXNjcmlwdG9yIG1heSBjbGFpbSB0byBiZSBsb25nZXIgdGhhbiBpdAorCQkJICogcmVhbGx5IGlzLiAgSGVyZSBpcyB0aGUgYWN0dWFsIGFsbG9jYXRlZCBsZW5ndGguICovCisJCQl1bnNpZ25lZCBhbGxvY2xlbiA9CisJCQkJbGUxNl90b19jcHUoZGV2LT5jb25maWdbaV0uZGVzYy53VG90YWxMZW5ndGgpOworCisJCQlsZW4gPSBsZW5ndGggLSAoKnBwb3MgLSBwb3MpOworCQkJaWYgKGxlbiA+IG5ieXRlcykKKwkJCQlsZW4gPSBuYnl0ZXM7CisKKwkJCS8qIFNpbXBseSBkb24ndCB3cml0ZSAoc2tpcCBvdmVyKSB1bmFsbG9jYXRlZCBwYXJ0cyAqLworCQkJaWYgKGFsbG9jbGVuID4gKCpwcG9zIC0gcG9zKSkgeworCQkJCWFsbG9jbGVuIC09ICgqcHBvcyAtIHBvcyk7CisJCQkJaWYgKGNvcHlfdG9fdXNlcihidWYsCisJCQkJICAgIGRldi0+cmF3ZGVzY3JpcHRvcnNbaV0gKyAoKnBwb3MgLSBwb3MpLAorCQkJCSAgICBtaW4obGVuLCBhbGxvY2xlbikpKSB7CisJCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJCWdvdG8gZXJyOworCQkJCX0KKwkJCX0KKworCQkJKnBwb3MgKz0gbGVuOworCQkJYnVmICs9IGxlbjsKKwkJCW5ieXRlcyAtPSBsZW47CisJCQlyZXQgKz0gbGVuOworCQl9CisKKwkJcG9zICs9IGxlbmd0aDsKKwl9CisKK2VycjoKKwl1c2JfdW5sb2NrX2RldmljZShkZXYpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBhc3luYyBsaXN0IGhhbmRsaW5nCisgKi8KKworc3RhdGljIHN0cnVjdCBhc3luYyAqYWxsb2NfYXN5bmModW5zaWduZWQgaW50IG51bWlzb2ZyYW1lcykKK3sKKyAgICAgICAgdW5zaWduZWQgaW50IGFzc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXN5bmMpICsgbnVtaXNvZnJhbWVzICogc2l6ZW9mKHN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yKTsKKyAgICAgICAgc3RydWN0IGFzeW5jICphcyA9IGttYWxsb2MoYXNzaXplLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgaWYgKCFhcykKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgbWVtc2V0KGFzLCAwLCBhc3NpemUpOworCWFzLT51cmIgPSB1c2JfYWxsb2NfdXJiKG51bWlzb2ZyYW1lcywgR0ZQX0tFUk5FTCk7CisJaWYgKCFhcy0+dXJiKSB7CisJCWtmcmVlKGFzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorICAgICAgICByZXR1cm4gYXM7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfYXN5bmMoc3RydWN0IGFzeW5jICphcykKK3sKKyAgICAgICAgaWYgKGFzLT51cmItPnRyYW5zZmVyX2J1ZmZlcikKKyAgICAgICAgICAgICAgICBrZnJlZShhcy0+dXJiLT50cmFuc2Zlcl9idWZmZXIpOworICAgICAgICBpZiAoYXMtPnVyYi0+c2V0dXBfcGFja2V0KQorICAgICAgICAgICAgICAgIGtmcmVlKGFzLT51cmItPnNldHVwX3BhY2tldCk7CisJdXNiX2ZyZWVfdXJiKGFzLT51cmIpOworICAgICAgICBrZnJlZShhcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhc3luY19uZXdwZW5kaW5nKHN0cnVjdCBhc3luYyAqYXMpCit7CisgICAgICAgIHN0cnVjdCBkZXZfc3RhdGUgKnBzID0gYXMtPnBzOworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAgICAgICAKKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnBzLT5sb2NrLCBmbGFncyk7CisgICAgICAgIGxpc3RfYWRkX3RhaWwoJmFzLT5hc3luY2xpc3QsICZwcy0+YXN5bmNfcGVuZGluZyk7CisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBzLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhc3luY19yZW1vdmVwZW5kaW5nKHN0cnVjdCBhc3luYyAqYXMpCit7CisgICAgICAgIHN0cnVjdCBkZXZfc3RhdGUgKnBzID0gYXMtPnBzOworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAgICAgICAKKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnBzLT5sb2NrLCBmbGFncyk7CisgICAgICAgIGxpc3RfZGVsX2luaXQoJmFzLT5hc3luY2xpc3QpOworICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcy0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhc3luYyAqYXN5bmNfZ2V0Y29tcGxldGVkKHN0cnVjdCBkZXZfc3RhdGUgKnBzKQoreworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAgICAgICBzdHJ1Y3QgYXN5bmMgKmFzID0gTlVMTDsKKworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmcHMtPmxvY2ssIGZsYWdzKTsKKyAgICAgICAgaWYgKCFsaXN0X2VtcHR5KCZwcy0+YXN5bmNfY29tcGxldGVkKSkgeworICAgICAgICAgICAgICAgIGFzID0gbGlzdF9lbnRyeShwcy0+YXN5bmNfY29tcGxldGVkLm5leHQsIHN0cnVjdCBhc3luYywgYXN5bmNsaXN0KTsKKyAgICAgICAgICAgICAgICBsaXN0X2RlbF9pbml0KCZhcy0+YXN5bmNsaXN0KTsKKyAgICAgICAgfQorICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcy0+bG9jaywgZmxhZ3MpOworICAgICAgICByZXR1cm4gYXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFzeW5jICphc3luY19nZXRwZW5kaW5nKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqdXNlcnVyYikKK3sKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICAgICAgc3RydWN0IGFzeW5jICphczsKKworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmcHMtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzLCAmcHMtPmFzeW5jX3BlbmRpbmcsIGFzeW5jbGlzdCkKKwkJaWYgKGFzLT51c2VydXJiID09IHVzZXJ1cmIpIHsKKwkJCWxpc3RfZGVsX2luaXQoJmFzLT5hc3luY2xpc3QpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHMtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiBhczsKKwkJfQorICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcy0+bG9jaywgZmxhZ3MpOworICAgICAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgYXN5bmNfY29tcGxldGVkKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisgICAgICAgIHN0cnVjdCBhc3luYyAqYXMgPSAoc3RydWN0IGFzeW5jICopdXJiLT5jb250ZXh0OworICAgICAgICBzdHJ1Y3QgZGV2X3N0YXRlICpwcyA9IGFzLT5wczsKKwlzdHJ1Y3Qgc2lnaW5mbyBzaW5mbzsKKworICAgICAgICBzcGluX2xvY2soJnBzLT5sb2NrKTsKKyAgICAgICAgbGlzdF9tb3ZlX3RhaWwoJmFzLT5hc3luY2xpc3QsICZwcy0+YXN5bmNfY29tcGxldGVkKTsKKyAgICAgICAgc3Bpbl91bmxvY2soJnBzLT5sb2NrKTsKKwlpZiAoYXMtPnNpZ25yKSB7CisJCXNpbmZvLnNpX3NpZ25vID0gYXMtPnNpZ25yOworCQlzaW5mby5zaV9lcnJubyA9IGFzLT51cmItPnN0YXR1czsKKwkJc2luZm8uc2lfY29kZSA9IFNJX0FTWU5DSU87CisJCXNpbmZvLnNpX2FkZHIgPSBhcy0+dXNlcnVyYjsKKwkJc2VuZF9zaWdfaW5mbyhhcy0+c2lnbnIsICZzaW5mbywgYXMtPnRhc2spOworCX0KKyAgICAgICAgd2FrZV91cCgmcHMtPndhaXQpOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95X2FzeW5jIChzdHJ1Y3QgZGV2X3N0YXRlICpwcywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3sKKwlzdHJ1Y3QgYXN5bmMgKmFzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHMtPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkobGlzdCkpIHsKKwkJYXMgPSBsaXN0X2VudHJ5KGxpc3QtPm5leHQsIHN0cnVjdCBhc3luYywgYXN5bmNsaXN0KTsKKwkJbGlzdF9kZWxfaW5pdCgmYXMtPmFzeW5jbGlzdCk7CisKKwkJLyogZHJvcCB0aGUgc3BpbmxvY2sgc28gdGhlIGNvbXBsZXRpb24gaGFuZGxlciBjYW4gcnVuICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBzLT5sb2NrLCBmbGFncyk7CisJCXVzYl9raWxsX3VyYihhcy0+dXJiKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBzLT5sb2NrLCBmbGFncyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBzLT5sb2NrLCBmbGFncyk7CisJYXMgPSBhc3luY19nZXRjb21wbGV0ZWQocHMpOworCXdoaWxlIChhcykgeworCQlmcmVlX2FzeW5jKGFzKTsKKwkJYXMgPSBhc3luY19nZXRjb21wbGV0ZWQocHMpOworCX0KK30KKworc3RhdGljIHZvaWQgZGVzdHJveV9hc3luY19vbl9pbnRlcmZhY2UgKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB1bnNpZ25lZCBpbnQgaWZudW0pCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcCwgKnEsIGhpdGxpc3Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUlOSVRfTElTVF9IRUFEKCZoaXRsaXN0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHMtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgcSwgJnBzLT5hc3luY19wZW5kaW5nKQorCQlpZiAoaWZudW0gPT0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgYXN5bmMsIGFzeW5jbGlzdCktPmlmbnVtKQorCQkJbGlzdF9tb3ZlX3RhaWwocCwgJmhpdGxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBzLT5sb2NrLCBmbGFncyk7CisJZGVzdHJveV9hc3luYyhwcywgJmhpdGxpc3QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVzdHJveV9hbGxfYXN5bmMoc3RydWN0IGRldl9zdGF0ZSAqcHMpCit7CisJICAgICAgICBkZXN0cm95X2FzeW5jKHBzLCAmcHMtPmFzeW5jX3BlbmRpbmcpOworfQorCisvKgorICogaW50ZXJmYWNlIGNsYWltcyBhcmUgbWFkZSBvbmx5IGF0IHRoZSByZXF1ZXN0IG9mIHVzZXIgbGV2ZWwgY29kZSwKKyAqIHdoaWNoIGNhbiBhbHNvIHJlbGVhc2UgdGhlbSAoZXhwbGljaXRseSBvciBieSBjbG9zaW5nIGZpbGVzKS4KKyAqIHRoZXkncmUgYWxzbyB1bmRvbmUgd2hlbiBkZXZpY2VzIGRpc2Nvbm5lY3QuCisgKi8KKworc3RhdGljIGludCBkcml2ZXJfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIHZvaWQgZHJpdmVyX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGRldl9zdGF0ZSAqcHMgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwl1bnNpZ25lZCBpbnQgaWZudW0gPSBpbnRmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisKKwlpZiAoIXBzKQorCQlyZXR1cm47CisKKwkvKiBOT1RFOiAgdGhpcyByZWxpZXMgb24gdXNiY29yZSBoYXZpbmcgY2FuY2VsZWQgYW5kIGNvbXBsZXRlZAorCSAqIGFsbCBwZW5kaW5nIEkvTyByZXF1ZXN0czsgMi42IGRvZXMgdGhhdC4KKwkgKi8KKworCWlmIChsaWtlbHkoaWZudW0gPCA4KnNpemVvZihwcy0+aWZjbGFpbWVkKSkpCisJCWNsZWFyX2JpdChpZm51bSwgJnBzLT5pZmNsYWltZWQpOworCWVsc2UKKwkJd2FybigiaW50ZXJmYWNlIG51bWJlciAldSBvdXQgb2YgcmFuZ2UiLCBpZm51bSk7CisKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKKworCS8qIGZvcmNlIGFzeW5jIHJlcXVlc3RzIHRvIGNvbXBsZXRlICovCisJZGVzdHJveV9hc3luY19vbl9pbnRlcmZhY2UocHMsIGlmbnVtKTsKK30KKworc3RydWN0IHVzYl9kcml2ZXIgdXNiZnNfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJ1c2JmcyIsCisJLnByb2JlID0JZHJpdmVyX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JZHJpdmVyX2Rpc2Nvbm5lY3QsCit9OworCitzdGF0aWMgaW50IGNsYWltaW50ZihzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdW5zaWduZWQgaW50IGlmbnVtKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwcy0+ZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCWludCBlcnI7CisKKwlpZiAoaWZudW0gPj0gOCpzaXplb2YocHMtPmlmY2xhaW1lZCkpCisJCXJldHVybiAtRUlOVkFMOworCS8qIGFscmVhZHkgY2xhaW1lZCAqLworCWlmICh0ZXN0X2JpdChpZm51bSwgJnBzLT5pZmNsYWltZWQpKQorCQlyZXR1cm4gMDsKKworCS8qIGxvY2sgYWdhaW5zdCBvdGhlciBjaGFuZ2VzIHRvIGRyaXZlciBiaW5kaW5ncyAqLworCWRvd25fd3JpdGUoJnVzYl9idXNfdHlwZS5zdWJzeXMucndzZW0pOworCWludGYgPSB1c2JfaWZudW1fdG9faWYoZGV2LCBpZm51bSk7CisJaWYgKCFpbnRmKQorCQllcnIgPSAtRU5PRU5UOworCWVsc2UKKwkJZXJyID0gdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2UoJnVzYmZzX2RyaXZlciwgaW50ZiwgcHMpOworCXVwX3dyaXRlKCZ1c2JfYnVzX3R5cGUuc3Vic3lzLnJ3c2VtKTsKKwlpZiAoZXJyID09IDApCisJCXNldF9iaXQoaWZudW0sICZwcy0+aWZjbGFpbWVkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHJlbGVhc2VpbnRmKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB1bnNpZ25lZCBpbnQgaWZudW0pCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlpbnQgZXJyOworCisJZXJyID0gLUVJTlZBTDsKKwlpZiAoaWZudW0gPj0gOCpzaXplb2YocHMtPmlmY2xhaW1lZCkpCisJCXJldHVybiBlcnI7CisJZGV2ID0gcHMtPmRldjsKKwkvKiBsb2NrIGFnYWluc3Qgb3RoZXIgY2hhbmdlcyB0byBkcml2ZXIgYmluZGluZ3MgKi8KKwlkb3duX3dyaXRlKCZ1c2JfYnVzX3R5cGUuc3Vic3lzLnJ3c2VtKTsKKwlpbnRmID0gdXNiX2lmbnVtX3RvX2lmKGRldiwgaWZudW0pOworCWlmICghaW50ZikKKwkJZXJyID0gLUVOT0VOVDsKKwllbHNlIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoaWZudW0sICZwcy0+aWZjbGFpbWVkKSkgeworCQl1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlKCZ1c2Jmc19kcml2ZXIsIGludGYpOworCQllcnIgPSAwOworCX0KKwl1cF93cml0ZSgmdXNiX2J1c190eXBlLnN1YnN5cy5yd3NlbSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjaGVja2ludGYoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHVuc2lnbmVkIGludCBpZm51bSkKK3sKKwlpZiAocHMtPmRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX0NPTkZJR1VSRUQpCisJCXJldHVybiAtRUhPU1RVTlJFQUNIOworCWlmIChpZm51bSA+PSA4KnNpemVvZihwcy0+aWZjbGFpbWVkKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHRlc3RfYml0KGlmbnVtLCAmcHMtPmlmY2xhaW1lZCkpCisJCXJldHVybiAwOworCS8qIGlmIG5vdCB5ZXQgY2xhaW1lZCwgY2xhaW0gaXQgZm9yIHRoZSBkcml2ZXIgKi8KKwlkZXZfd2FybigmcHMtPmRldi0+ZGV2LCAidXNiZnM6IHByb2Nlc3MgJWQgKCVzKSBkaWQgbm90IGNsYWltIGludGVyZmFjZSAldSBiZWZvcmUgdXNlXG4iLAorCSAgICAgICBjdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0sIGlmbnVtKTsKKwlyZXR1cm4gY2xhaW1pbnRmKHBzLCBpZm51bSk7Cit9CisKK3N0YXRpYyBpbnQgZmluZGludGZlcChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZXApCit7CisJdW5zaWduZWQgaW50IGksIGosIGU7CisgICAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdHM7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwdDsKKworCWlmIChlcCAmIH4oVVNCX0RJUl9JTnwweGYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWRldi0+YWN0Y29uZmlnKQorCQlyZXR1cm4gLUVTUkNIOworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKSB7CisJCWludGYgPSBkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldOworCQlmb3IgKGogPSAwOyBqIDwgaW50Zi0+bnVtX2FsdHNldHRpbmc7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgYWx0cyA9ICZpbnRmLT5hbHRzZXR0aW5nW2pdOworCQkJZm9yIChlID0gMDsgZSA8IGFsdHMtPmRlc2MuYk51bUVuZHBvaW50czsgZSsrKSB7CisJCQkJZW5kcHQgPSAmYWx0cy0+ZW5kcG9pbnRbZV0uZGVzYzsKKwkJCQlpZiAoZW5kcHQtPmJFbmRwb2ludEFkZHJlc3MgPT0gZXApCisJCQkJCXJldHVybiBhbHRzLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIC1FTk9FTlQ7IAorfQorCitzdGF0aWMgaW50IGNoZWNrX2N0cmxyZWNpcChzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdW5zaWduZWQgaW50IHJlcXVlc3R0eXBlLCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAocHMtPmRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX0NPTkZJR1VSRUQpCisJCXJldHVybiAtRUhPU1RVTlJFQUNIOworCWlmIChVU0JfVFlQRV9WRU5ET1IgPT0gKFVTQl9UWVBFX01BU0sgJiByZXF1ZXN0dHlwZSkpCisJCXJldHVybiAwOworCisJaW5kZXggJj0gMHhmZjsKKwlzd2l0Y2ggKHJlcXVlc3R0eXBlICYgVVNCX1JFQ0lQX01BU0spIHsKKwljYXNlIFVTQl9SRUNJUF9FTkRQT0lOVDoKKwkJaWYgKChyZXQgPSBmaW5kaW50ZmVwKHBzLT5kZXYsIGluZGV4KSkgPj0gMCkKKwkJCXJldCA9IGNoZWNraW50ZihwcywgcmV0KTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQl9SRUNJUF9JTlRFUkZBQ0U6CisJCXJldCA9IGNoZWNraW50ZihwcywgaW5kZXgpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGZpbGUgb3BlcmF0aW9ucworICovCitzdGF0aWMgaW50IHVzYmRldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJc3RydWN0IGRldl9zdGF0ZSAqcHM7CisJaW50IHJldDsKKworCS8qIAorCSAqIG5vIGxvY2tpbmcgbmVjZXNzYXJ5IGhlcmUsIGFzIGNocmRldl9vcGVuIGhhcyB0aGUga2VybmVsIGxvY2sKKwkgKiAoc3RpbGwgYWNxdWlyZSB0aGUga2VybmVsIGxvY2sgZm9yIHNhZmV0eSkKKwkgKi8KKwlyZXQgPSAtRU5PTUVNOworCWlmICghKHBzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRldl9zdGF0ZSksIEdGUF9LRVJORUwpKSkKKwkJZ290byBvdXRfbm9sb2NrOworCisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSAtRU5PRU5UOworCWRldiA9IHVzYl9nZXRfZGV2KGlub2RlLT51LmdlbmVyaWNfaXApOworCWlmICghZGV2KSB7CisJCWtmcmVlKHBzKTsKKwkJZ290byBvdXQ7CisJfQorCXJldCA9IDA7CisJcHMtPmRldiA9IGRldjsKKwlwcy0+ZmlsZSA9IGZpbGU7CisJc3Bpbl9sb2NrX2luaXQoJnBzLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmcHMtPmFzeW5jX3BlbmRpbmcpOworCUlOSVRfTElTVF9IRUFEKCZwcy0+YXN5bmNfY29tcGxldGVkKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcy0+d2FpdCk7CisJcHMtPmRpc2NzaWduciA9IDA7CisJcHMtPmRpc2N0YXNrID0gY3VycmVudDsKKwlwcy0+ZGlzY2NvbnRleHQgPSBOVUxMOworCXBzLT5pZmNsYWltZWQgPSAwOworCXdtYigpOworCWxpc3RfYWRkX3RhaWwoJnBzLT5saXN0LCAmZGV2LT5maWxlbGlzdCk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcHM7Cisgb3V0OgorCXVubG9ja19rZXJuZWwoKTsKKyBvdXRfbm9sb2NrOgorICAgICAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHVzYmRldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBkZXZfc3RhdGUgKnBzID0gKHN0cnVjdCBkZXZfc3RhdGUgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBzLT5kZXY7CisJdW5zaWduZWQgaW50IGlmbnVtOworCisJdXNiX2xvY2tfZGV2aWNlKGRldik7CisJbGlzdF9kZWxfaW5pdCgmcHMtPmxpc3QpOworCWZvciAoaWZudW0gPSAwOyBwcy0+aWZjbGFpbWVkICYmIGlmbnVtIDwgOCpzaXplb2YocHMtPmlmY2xhaW1lZCk7CisJCQlpZm51bSsrKSB7CisJCWlmICh0ZXN0X2JpdChpZm51bSwgJnBzLT5pZmNsYWltZWQpKQorCQkJcmVsZWFzZWludGYocHMsIGlmbnVtKTsKKwl9CisJZGVzdHJveV9hbGxfYXN5bmMocHMpOworCXVzYl91bmxvY2tfZGV2aWNlKGRldik7CisJdXNiX3B1dF9kZXYoZGV2KTsKKwlwcy0+ZGV2ID0gTlVMTDsKKwlrZnJlZShwcyk7CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2NfY29udHJvbChzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcHMtPmRldjsKKwlzdHJ1Y3QgdXNiZGV2ZnNfY3RybHRyYW5zZmVyIGN0cmw7CisJdW5zaWduZWQgaW50IHRtbzsKKwl1bnNpZ25lZCBjaGFyICp0YnVmOworCWludCBpLCBqLCByZXQ7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmN0cmwsIGFyZywgc2l6ZW9mKGN0cmwpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKChyZXQgPSBjaGVja19jdHJscmVjaXAocHMsIGN0cmwuYlJlcXVlc3RUeXBlLCBjdHJsLndJbmRleCkpKQorCQlyZXR1cm4gcmV0OworCWlmIChjdHJsLndMZW5ndGggPiBQQUdFX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghKHRidWYgPSAodW5zaWduZWQgY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOworCXRtbyA9IGN0cmwudGltZW91dDsKKwlpZiAoY3RybC5iUmVxdWVzdFR5cGUgJiAweDgwKSB7CisJCWlmIChjdHJsLndMZW5ndGggJiYgIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGN0cmwuZGF0YSwgY3RybC53TGVuZ3RoKSkgeworCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXRidWYpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJc25vb3AoJmRldi0+ZGV2LCAiY29udHJvbCByZWFkOiBiUmVxdWVzdD0lMDJ4IGJScmVxdWVzdFR5cGU9JTAyeCB3VmFsdWU9JTA0eCB3SW5kZXg9JTA0eFxuIiwgCisJCQljdHJsLmJSZXF1ZXN0LCBjdHJsLmJSZXF1ZXN0VHlwZSwgY3RybC53VmFsdWUsIGN0cmwud0luZGV4KTsKKworCQl1c2JfdW5sb2NrX2RldmljZShkZXYpOworCQlpID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIGN0cmwuYlJlcXVlc3QsIGN0cmwuYlJlcXVlc3RUeXBlLAorCQkJCSAgICAgICBjdHJsLndWYWx1ZSwgY3RybC53SW5kZXgsIHRidWYsIGN0cmwud0xlbmd0aCwgdG1vKTsKKwkJdXNiX2xvY2tfZGV2aWNlKGRldik7CisJCWlmICgoaSA+IDApICYmIGN0cmwud0xlbmd0aCkgeworCQkJaWYgKHVzYmZzX3Nub29wKSB7CisJCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiY29udHJvbCByZWFkOiBkYXRhICIpOworCQkJCWZvciAoaiA9IDA7IGogPCBjdHJsLndMZW5ndGg7ICsraikKKwkJCQkJcHJpbnRrICgiJTAyeCAiLCAodW5zaWduZWQgY2hhcikodGJ1Zilbal0pOworCQkJCXByaW50aygiXG4iKTsKKwkJCX0KKwkJCWlmIChjb3B5X3RvX3VzZXIoY3RybC5kYXRhLCB0YnVmLCBjdHJsLndMZW5ndGgpKSB7CisJCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXRidWYpOworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaWYgKGN0cmwud0xlbmd0aCkgeworCQkJaWYgKGNvcHlfZnJvbV91c2VyKHRidWYsIGN0cmwuZGF0YSwgY3RybC53TGVuZ3RoKSkgeworCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl0YnVmKTsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJfQorCQlzbm9vcCgmZGV2LT5kZXYsICJjb250cm9sIHdyaXRlOiBiUmVxdWVzdD0lMDJ4IGJScmVxdWVzdFR5cGU9JTAyeCB3VmFsdWU9JTA0eCB3SW5kZXg9JTA0eFxuIiwgCisJCQljdHJsLmJSZXF1ZXN0LCBjdHJsLmJSZXF1ZXN0VHlwZSwgY3RybC53VmFsdWUsIGN0cmwud0luZGV4KTsKKwkJaWYgKHVzYmZzX3Nub29wKSB7CisJCQlkZXZfaW5mbygmZGV2LT5kZXYsICJjb250cm9sIHdyaXRlOiBkYXRhOiAiKTsKKwkJCWZvciAoaiA9IDA7IGogPCBjdHJsLndMZW5ndGg7ICsraikKKwkJCQlwcmludGsgKCIlMDJ4ICIsICh1bnNpZ25lZCBjaGFyKSh0YnVmKVtqXSk7CisJCQlwcmludGsoIlxuIik7CisJCX0KKwkJdXNiX3VubG9ja19kZXZpY2UoZGV2KTsKKwkJaSA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBjdHJsLmJSZXF1ZXN0LCBjdHJsLmJSZXF1ZXN0VHlwZSwKKwkJCQkgICAgICAgY3RybC53VmFsdWUsIGN0cmwud0luZGV4LCB0YnVmLCBjdHJsLndMZW5ndGgsIHRtbyk7CisJCXVzYl9sb2NrX2RldmljZShkZXYpOworCX0KKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdGJ1Zik7CisJaWYgKGk8MCAmJiBpICE9IC1FUElQRSkgeworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwgInVzYmZzOiBVU0JERVZGU19DT05UUk9MICIKKwkJCSAgICJmYWlsZWQgY21kICVzIHJxdCAldSBycSAldSBsZW4gJXUgcmV0ICVkXG4iLAorCQkJICAgY3VycmVudC0+Y29tbSwgY3RybC5iUmVxdWVzdFR5cGUsIGN0cmwuYlJlcXVlc3QsCisJCQkgICBjdHJsLndMZW5ndGgsIGkpOworCX0KKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBwcm9jX2J1bGsoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBzLT5kZXY7CisJc3RydWN0IHVzYmRldmZzX2J1bGt0cmFuc2ZlciBidWxrOworCXVuc2lnbmVkIGludCB0bW8sIGxlbjEsIHBpcGU7CisJaW50IGxlbjI7CisJdW5zaWduZWQgY2hhciAqdGJ1ZjsKKwlpbnQgaSwgcmV0OworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWxrLCBhcmcsIHNpemVvZihidWxrKSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmICgocmV0ID0gZmluZGludGZlcChwcy0+ZGV2LCBidWxrLmVwKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmICgocmV0ID0gY2hlY2tpbnRmKHBzLCByZXQpKSkKKwkJcmV0dXJuIHJldDsKKwlpZiAoYnVsay5lcCAmIFVTQl9ESVJfSU4pCisJCXBpcGUgPSB1c2JfcmN2YnVsa3BpcGUoZGV2LCBidWxrLmVwICYgMHg3Zik7CisJZWxzZQorCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKGRldiwgYnVsay5lcCAmIDB4N2YpOworCWlmICghdXNiX21heHBhY2tldChkZXYsIHBpcGUsICEoYnVsay5lcCAmIFVTQl9ESVJfSU4pKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbGVuMSA9IGJ1bGsubGVuOworCWlmIChsZW4xID4gTUFYX1VTQkZTX0JVRkZFUl9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoISh0YnVmID0ga21hbGxvYyhsZW4xLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOworCXRtbyA9IGJ1bGsudGltZW91dDsKKwlpZiAoYnVsay5lcCAmIDB4ODApIHsKKwkJaWYgKGxlbjEgJiYgIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1bGsuZGF0YSwgbGVuMSkpIHsKKwkJCWtmcmVlKHRidWYpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJdXNiX3VubG9ja19kZXZpY2UoZGV2KTsKKwkJaSA9IHVzYl9idWxrX21zZyhkZXYsIHBpcGUsIHRidWYsIGxlbjEsICZsZW4yLCB0bW8pOworCQl1c2JfbG9ja19kZXZpY2UoZGV2KTsKKwkJaWYgKCFpICYmIGxlbjIpIHsKKwkJCWlmIChjb3B5X3RvX3VzZXIoYnVsay5kYXRhLCB0YnVmLCBsZW4yKSkgeworCQkJCWtmcmVlKHRidWYpOworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaWYgKGxlbjEpIHsKKwkJCWlmIChjb3B5X2Zyb21fdXNlcih0YnVmLCBidWxrLmRhdGEsIGxlbjEpKSB7CisJCQkJa2ZyZWUodGJ1Zik7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCX0KKwkJdXNiX3VubG9ja19kZXZpY2UoZGV2KTsKKwkJaSA9IHVzYl9idWxrX21zZyhkZXYsIHBpcGUsIHRidWYsIGxlbjEsICZsZW4yLCB0bW8pOworCQl1c2JfbG9ja19kZXZpY2UoZGV2KTsKKwl9CisJa2ZyZWUodGJ1Zik7CisJaWYgKGkgPCAwKQorCQlyZXR1cm4gaTsKKwlyZXR1cm4gbGVuMjsKK30KKworc3RhdGljIGludCBwcm9jX3Jlc2V0ZXAoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJdW5zaWduZWQgaW50IGVwOworCWludCByZXQ7CisKKwlpZiAoZ2V0X3VzZXIoZXAsICh1bnNpZ25lZCBpbnQgX191c2VyICopYXJnKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKChyZXQgPSBmaW5kaW50ZmVwKHBzLT5kZXYsIGVwKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmICgocmV0ID0gY2hlY2tpbnRmKHBzLCByZXQpKSkKKwkJcmV0dXJuIHJldDsKKwl1c2Jfc2V0dG9nZ2xlKHBzLT5kZXYsIGVwICYgMHhmLCAhKGVwICYgVVNCX0RJUl9JTiksIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2NfY2xlYXJoYWx0KHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXVuc2lnbmVkIGludCBlcDsKKwlpbnQgcGlwZTsKKwlpbnQgcmV0OworCisJaWYgKGdldF91c2VyKGVwLCAodW5zaWduZWQgaW50IF9fdXNlciAqKWFyZykpCisJCXJldHVybiAtRUZBVUxUOworCWlmICgocmV0ID0gZmluZGludGZlcChwcy0+ZGV2LCBlcCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAoKHJldCA9IGNoZWNraW50ZihwcywgcmV0KSkpCisJCXJldHVybiByZXQ7CisJaWYgKGVwICYgVVNCX0RJUl9JTikKKyAgICAgICAgICAgICAgICBwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKHBzLT5kZXYsIGVwICYgMHg3Zik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKHBzLT5kZXYsIGVwICYgMHg3Zik7CisKKwlyZXR1cm4gdXNiX2NsZWFyX2hhbHQocHMtPmRldiwgcGlwZSk7Cit9CisJCQorCitzdGF0aWMgaW50IHByb2NfZ2V0ZHJpdmVyKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCB1c2JkZXZmc19nZXRkcml2ZXIgZ2Q7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisJaW50IHJldDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmZ2QsIGFyZywgc2l6ZW9mKGdkKSkpCisJCXJldHVybiAtRUZBVUxUOworCWRvd25fcmVhZCgmdXNiX2J1c190eXBlLnN1YnN5cy5yd3NlbSk7CisJaW50ZiA9IHVzYl9pZm51bV90b19pZihwcy0+ZGV2LCBnZC5pbnRlcmZhY2UpOworCWlmICghaW50ZiB8fCAhaW50Zi0+ZGV2LmRyaXZlcikKKwkJcmV0ID0gLUVOT0RBVEE7CisJZWxzZSB7CisJCXN0cm5jcHkoZ2QuZHJpdmVyLCBpbnRmLT5kZXYuZHJpdmVyLT5uYW1lLAorCQkJCXNpemVvZihnZC5kcml2ZXIpKTsKKwkJcmV0ID0gKGNvcHlfdG9fdXNlcihhcmcsICZnZCwgc2l6ZW9mKGdkKSkgPyAtRUZBVUxUIDogMCk7CisJfQorCXVwX3JlYWQoJnVzYl9idXNfdHlwZS5zdWJzeXMucndzZW0pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19jb25uZWN0aW5mbyhzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgdXNiZGV2ZnNfY29ubmVjdGluZm8gY2k7CisKKwljaS5kZXZudW0gPSBwcy0+ZGV2LT5kZXZudW07CisJY2kuc2xvdyA9IHBzLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9MT1c7CisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZjaSwgc2l6ZW9mKGNpKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2NfcmVzZXRkZXZpY2Uoc3RydWN0IGRldl9zdGF0ZSAqcHMpCit7CisJcmV0dXJuIHVzYl9yZXNldF9kZXZpY2UocHMtPmRldik7CisKK30KKworc3RhdGljIGludCBwcm9jX3NldGludGYoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IHVzYmRldmZzX3NldGludGVyZmFjZSBzZXRpbnRmOworCWludCByZXQ7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnNldGludGYsIGFyZywgc2l6ZW9mKHNldGludGYpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKChyZXQgPSBjaGVja2ludGYocHMsIHNldGludGYuaW50ZXJmYWNlKSkpCisJCXJldHVybiByZXQ7CisJcmV0dXJuIHVzYl9zZXRfaW50ZXJmYWNlKHBzLT5kZXYsIHNldGludGYuaW50ZXJmYWNlLAorCQkJc2V0aW50Zi5hbHRzZXR0aW5nKTsKK30KKworc3RhdGljIGludCBwcm9jX3NldGNvbmZpZyhzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwl1bnNpZ25lZCBpbnQgdTsKKwlpbnQgc3RhdHVzID0gMDsKKyAJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqYWN0Y29uZmlnOworCisJaWYgKGdldF91c2VyKHUsICh1bnNpZ25lZCBpbnQgX191c2VyICopYXJnKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKyAJYWN0Y29uZmlnID0gcHMtPmRldi0+YWN0Y29uZmlnOworIAorIAkvKiBEb24ndCB0b3VjaCB0aGUgZGV2aWNlIGlmIGFueSBpbnRlcmZhY2VzIGFyZSBjbGFpbWVkLgorIAkgKiBJdCBjb3VsZCBpbnRlcmZlcmUgd2l0aCBvdGhlciBkcml2ZXJzJyBvcGVyYXRpb25zLCBhbmQgaWYKKwkgKiBhbiBpbnRlcmZhY2UgaXMgY2xhaW1lZCBieSB1c2JmcyBpdCBjb3VsZCBlYXNpbHkgZGVhZGxvY2suCisJICovCisgCWlmIChhY3Rjb25maWcpIHsKKyAJCWludCBpOworIAorIAkJZm9yIChpID0gMDsgaSA8IGFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgKytpKSB7CisgCQkJaWYgKHVzYl9pbnRlcmZhY2VfY2xhaW1lZChhY3Rjb25maWctPmludGVyZmFjZVtpXSkpIHsKKwkJCQlkZXZfd2FybiAoJnBzLT5kZXYtPmRldiwKKwkJCQkJInVzYmZzOiBpbnRlcmZhY2UgJWQgY2xhaW1lZCAiCisJCQkJCSJ3aGlsZSAnJXMnIHNldHMgY29uZmlnICMlZFxuIiwKKwkJCQkJYWN0Y29uZmlnLT5pbnRlcmZhY2VbaV0KKwkJCQkJCS0+Y3VyX2FsdHNldHRpbmcKKwkJCQkJCS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQkJCQljdXJyZW50LT5jb21tLCB1KTsKKyNpZiAwCS8qIEZJWE1FOiAgZW5hYmxlIGluIDIuNi4xMCBvciBzbyAqLworIAkJCQlzdGF0dXMgPSAtRUJVU1k7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCX0KKyAJCX0KKyAJfQorCisJLyogU0VUX0NPTkZJR1VSQVRJT04gaXMgb2Z0ZW4gYWJ1c2VkIGFzIGEgImNoZWFwIiBkcml2ZXIgcmVzZXQsCisJICogc28gYXZvaWQgdXNiX3NldF9jb25maWd1cmF0aW9uKCkncyBraWNrIHRvIHN5c2ZzCisJICovCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCWlmIChhY3Rjb25maWcgJiYgYWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgPT0gdSkKKwkJCXN0YXR1cyA9IHVzYl9yZXNldF9jb25maWd1cmF0aW9uKHBzLT5kZXYpOworCQllbHNlCisJCQlzdGF0dXMgPSB1c2Jfc2V0X2NvbmZpZ3VyYXRpb24ocHMtPmRldiwgdSk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworCitzdGF0aWMgaW50IHByb2NfZG9fc3VibWl0dXJiKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCBzdHJ1Y3QgdXNiZGV2ZnNfdXJiICp1dXJiLAorCQkJICAgICBzdHJ1Y3QgdXNiZGV2ZnNfaXNvX3BhY2tldF9kZXNjIF9fdXNlciAqaXNvX2ZyYW1lX2Rlc2MsCisJCQkgICAgIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IHVzYmRldmZzX2lzb19wYWNrZXRfZGVzYyAqaXNvcGt0ID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOworCXN0cnVjdCBhc3luYyAqYXM7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqZHIgPSBOVUxMOworCXVuc2lnbmVkIGludCB1LCB0b3RsZW4sIGlzb2ZybWxlbjsKKwlpbnQgcmV0LCBpbnRlcnZhbCA9IDAsIGlmbnVtID0gLTE7CisKKwlpZiAodXVyYi0+ZmxhZ3MgJiB+KFVTQkRFVkZTX1VSQl9JU09fQVNBUHxVU0JERVZGU19VUkJfU0hPUlRfTk9UX09LfAorCQkJICAgVVJCX05PX0ZTQlJ8VVJCX1pFUk9fUEFDS0VUKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCF1dXJiLT5idWZmZXIpCisJCXJldHVybiAtRUlOVkFMOworCWlmICh1dXJiLT5zaWduciAhPSAwICYmICh1dXJiLT5zaWduciA8IFNJR1JUTUlOIHx8IHV1cmItPnNpZ25yID4gU0lHUlRNQVgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoISh1dXJiLT50eXBlID09IFVTQkRFVkZTX1VSQl9UWVBFX0NPTlRST0wgJiYgKHV1cmItPmVuZHBvaW50ICYgflVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gMCkpIHsKKwkJaWYgKChpZm51bSA9IGZpbmRpbnRmZXAocHMtPmRldiwgdXVyYi0+ZW5kcG9pbnQpKSA8IDApCisJCQlyZXR1cm4gaWZudW07CisJCWlmICgocmV0ID0gY2hlY2tpbnRmKHBzLCBpZm51bSkpKQorCQkJcmV0dXJuIHJldDsKKwl9CisJaWYgKCh1dXJiLT5lbmRwb2ludCAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgIT0gMCkKKwkJZXAgPSBwcy0+ZGV2LT5lcF9pbiBbdXVyYi0+ZW5kcG9pbnQgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0tdOworCWVsc2UKKwkJZXAgPSBwcy0+ZGV2LT5lcF9vdXQgW3V1cmItPmVuZHBvaW50ICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLXTsKKwlpZiAoIWVwKQorCQlyZXR1cm4gLUVOT0VOVDsKKwlzd2l0Y2godXVyYi0+dHlwZSkgeworCWNhc2UgVVNCREVWRlNfVVJCX1RZUEVfQ09OVFJPTDoKKwkJaWYgKChlcC0+ZGVzYy5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKKwkJCQkhPSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCS8qIG1pbiA4IGJ5dGUgc2V0dXAgcGFja2V0LCBtYXggYXJiaXRyYXJ5ICovCisJCWlmICh1dXJiLT5idWZmZXJfbGVuZ3RoIDwgOCB8fCB1dXJiLT5idWZmZXJfbGVuZ3RoID4gUEFHRV9TSVpFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghKGRyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksIEdGUF9LRVJORUwpKSkKKwkJCXJldHVybiAtRU5PTUVNOworCQlpZiAoY29weV9mcm9tX3VzZXIoZHIsIHV1cmItPmJ1ZmZlciwgOCkpIHsKKwkJCWtmcmVlKGRyKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJCWlmICh1dXJiLT5idWZmZXJfbGVuZ3RoIDwgKGxlMTZfdG9fY3B1cCgmZHItPndMZW5ndGgpICsgOCkpIHsKKwkJCWtmcmVlKGRyKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmICgocmV0ID0gY2hlY2tfY3RybHJlY2lwKHBzLCBkci0+YlJlcXVlc3RUeXBlLCBsZTE2X3RvX2NwdXAoJmRyLT53SW5kZXgpKSkpIHsKKwkJCWtmcmVlKGRyKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJdXVyYi0+ZW5kcG9pbnQgPSAodXVyYi0+ZW5kcG9pbnQgJiB+VVNCX0VORFBPSU5UX0RJUl9NQVNLKSB8IChkci0+YlJlcXVlc3RUeXBlICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKTsKKwkJdXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSAwOworCQl1dXJiLT5idWZmZXJfbGVuZ3RoID0gbGUxNl90b19jcHVwKCZkci0+d0xlbmd0aCk7CisJCXV1cmItPmJ1ZmZlciArPSA4OworCQlpZiAoIWFjY2Vzc19vaygodXVyYi0+ZW5kcG9pbnQgJiBVU0JfRElSX0lOKSA/ICBWRVJJRllfV1JJVEUgOiBWRVJJRllfUkVBRCwgdXVyYi0+YnVmZmVyLCB1dXJiLT5idWZmZXJfbGVuZ3RoKSkgeworCQkJa2ZyZWUoZHIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFVTQkRFVkZTX1VSQl9UWVBFX0JVTEs6CisJCXN3aXRjaCAoZXAtPmRlc2MuYm1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spIHsKKwkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgorCQljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0M6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJLyogYWxsb3cgc2luZ2xlLXNob3QgaW50ZXJydXB0IHRyYW5zZmVycywgYXQgYm9ndXMgcmF0ZXMgKi8KKwkJfQorCQl1dXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IDA7CisJCWlmICh1dXJiLT5idWZmZXJfbGVuZ3RoID4gTUFYX1VTQkZTX0JVRkZFUl9TSVpFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghYWNjZXNzX29rKCh1dXJiLT5lbmRwb2ludCAmIFVTQl9ESVJfSU4pID8gVkVSSUZZX1dSSVRFIDogVkVSSUZZX1JFQUQsIHV1cmItPmJ1ZmZlciwgdXVyYi0+YnVmZmVyX2xlbmd0aCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwljYXNlIFVTQkRFVkZTX1VSQl9UWVBFX0lTTzoKKwkJLyogYXJiaXRyYXJ5IGxpbWl0ICovCisJCWlmICh1dXJiLT5udW1iZXJfb2ZfcGFja2V0cyA8IDEgfHwgdXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPiAxMjgpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKChlcC0+ZGVzYy5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKKwkJCQkhPSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWludGVydmFsID0gMSA8PCBtaW4gKDE1LCBlcC0+ZGVzYy5iSW50ZXJ2YWwgLSAxKTsKKwkJaXNvZnJtbGVuID0gc2l6ZW9mKHN0cnVjdCB1c2JkZXZmc19pc29fcGFja2V0X2Rlc2MpICogdXVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisJCWlmICghKGlzb3BrdCA9IGttYWxsb2MoaXNvZnJtbGVuLCBHRlBfS0VSTkVMKSkpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGlzb3BrdCwgaXNvX2ZyYW1lX2Rlc2MsIGlzb2ZybWxlbikpIHsKKwkJCWtmcmVlKGlzb3BrdCk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlmb3IgKHRvdGxlbiA9IHUgPSAwOyB1IDwgdXVyYi0+bnVtYmVyX29mX3BhY2tldHM7IHUrKykgeworCQkJaWYgKGlzb3BrdFt1XS5sZW5ndGggPiAxMDIzKSB7CisJCQkJa2ZyZWUoaXNvcGt0KTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCXRvdGxlbiArPSBpc29wa3RbdV0ubGVuZ3RoOworCQl9CisJCWlmICh0b3RsZW4gPiAzMjc2OCkgeworCQkJa2ZyZWUoaXNvcGt0KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXV1cmItPmJ1ZmZlcl9sZW5ndGggPSB0b3RsZW47CisJCWJyZWFrOworCisJY2FzZSBVU0JERVZGU19VUkJfVFlQRV9JTlRFUlJVUFQ6CisJCXV1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gMDsKKwkJaWYgKChlcC0+ZGVzYy5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKKwkJCQkhPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHBzLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorCQkJaW50ZXJ2YWwgPSAxIDw8IG1pbiAoMTUsIGVwLT5kZXNjLmJJbnRlcnZhbCAtIDEpOworCQllbHNlCisJCQlpbnRlcnZhbCA9IGVwLT5kZXNjLmJJbnRlcnZhbDsKKwkJaWYgKHV1cmItPmJ1ZmZlcl9sZW5ndGggPiBNQVhfVVNCRlNfQlVGRkVSX1NJWkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCFhY2Nlc3Nfb2soKHV1cmItPmVuZHBvaW50ICYgVVNCX0RJUl9JTikgPyBWRVJJRllfV1JJVEUgOiBWRVJJRllfUkVBRCwgdXVyYi0+YnVmZmVyLCB1dXJiLT5idWZmZXJfbGVuZ3RoKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoIShhcyA9IGFsbG9jX2FzeW5jKHV1cmItPm51bWJlcl9vZl9wYWNrZXRzKSkpIHsKKwkJaWYgKGlzb3BrdCkKKwkJCWtmcmVlKGlzb3BrdCk7CisJCWlmIChkcikKKwkJCWtmcmVlKGRyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWlmICghKGFzLT51cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2ModXVyYi0+YnVmZmVyX2xlbmd0aCwgR0ZQX0tFUk5FTCkpKSB7CisJCWlmIChpc29wa3QpCisJCQlrZnJlZShpc29wa3QpOworCQlpZiAoZHIpCisJCQlrZnJlZShkcik7CisJCWZyZWVfYXN5bmMoYXMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisgICAgICAgIGFzLT51cmItPmRldiA9IHBzLT5kZXY7CisgICAgICAgIGFzLT51cmItPnBpcGUgPSAodXVyYi0+dHlwZSA8PCAzMCkgfCBfX2NyZWF0ZV9waXBlKHBzLT5kZXYsIHV1cmItPmVuZHBvaW50ICYgMHhmKSB8ICh1dXJiLT5lbmRwb2ludCAmIFVTQl9ESVJfSU4pOworICAgICAgICBhcy0+dXJiLT50cmFuc2Zlcl9mbGFncyA9IHV1cmItPmZsYWdzOworCWFzLT51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSB1dXJiLT5idWZmZXJfbGVuZ3RoOworCWFzLT51cmItPnNldHVwX3BhY2tldCA9ICh1bnNpZ25lZCBjaGFyKilkcjsKKwlhcy0+dXJiLT5zdGFydF9mcmFtZSA9IHV1cmItPnN0YXJ0X2ZyYW1lOworCWFzLT51cmItPm51bWJlcl9vZl9wYWNrZXRzID0gdXVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisJYXMtPnVyYi0+aW50ZXJ2YWwgPSBpbnRlcnZhbDsKKyAgICAgICAgYXMtPnVyYi0+Y29udGV4dCA9IGFzOworICAgICAgICBhcy0+dXJiLT5jb21wbGV0ZSA9IGFzeW5jX2NvbXBsZXRlZDsKKwlmb3IgKHRvdGxlbiA9IHUgPSAwOyB1IDwgdXVyYi0+bnVtYmVyX29mX3BhY2tldHM7IHUrKykgeworCQlhcy0+dXJiLT5pc29fZnJhbWVfZGVzY1t1XS5vZmZzZXQgPSB0b3RsZW47CisJCWFzLT51cmItPmlzb19mcmFtZV9kZXNjW3VdLmxlbmd0aCA9IGlzb3BrdFt1XS5sZW5ndGg7CisJCXRvdGxlbiArPSBpc29wa3RbdV0ubGVuZ3RoOworCX0KKwlpZiAoaXNvcGt0KQorCQlrZnJlZShpc29wa3QpOworCWFzLT5wcyA9IHBzOworICAgICAgICBhcy0+dXNlcnVyYiA9IGFyZzsKKwlpZiAodXVyYi0+ZW5kcG9pbnQgJiBVU0JfRElSX0lOKQorCQlhcy0+dXNlcmJ1ZmZlciA9IHV1cmItPmJ1ZmZlcjsKKwllbHNlCisJCWFzLT51c2VyYnVmZmVyID0gTlVMTDsKKwlhcy0+c2lnbnIgPSB1dXJiLT5zaWducjsKKwlhcy0+aWZudW0gPSBpZm51bTsKKwlhcy0+dGFzayA9IGN1cnJlbnQ7CisJaWYgKCEodXVyYi0+ZW5kcG9pbnQgJiBVU0JfRElSX0lOKSkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoYXMtPnVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1dXJiLT5idWZmZXIsIGFzLT51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpKSB7CisJCQlmcmVlX2FzeW5jKGFzKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJfQorICAgICAgICBhc3luY19uZXdwZW5kaW5nKGFzKTsKKyAgICAgICAgaWYgKChyZXQgPSB1c2Jfc3VibWl0X3VyYihhcy0+dXJiLCBHRlBfS0VSTkVMKSkpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcHMtPmRldi0+ZGV2LCAidXNiZnM6IHVzYl9zdWJtaXRfdXJiIHJldHVybmVkICVkXG4iLCByZXQpOworICAgICAgICAgICAgICAgIGFzeW5jX3JlbW92ZXBlbmRpbmcoYXMpOworICAgICAgICAgICAgICAgIGZyZWVfYXN5bmMoYXMpOworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19zdWJtaXR1cmIoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IHVzYmRldmZzX3VyYiB1dXJiOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZ1dXJiLCBhcmcsIHNpemVvZih1dXJiKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIHByb2NfZG9fc3VibWl0dXJiKHBzLCAmdXVyYiwgKCgoc3RydWN0IHVzYmRldmZzX3VyYiBfX3VzZXIgKilhcmcpLT5pc29fZnJhbWVfZGVzYyksIGFyZyk7Cit9CisKK3N0YXRpYyBpbnQgcHJvY191bmxpbmt1cmIoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IGFzeW5jICphczsKKworCWFzID0gYXN5bmNfZ2V0cGVuZGluZyhwcywgYXJnKTsKKwlpZiAoIWFzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwl1c2Jfa2lsbF91cmIoYXMtPnVyYik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc2NvbXBsKHN0cnVjdCBhc3luYyAqYXMsIHZvaWQgX191c2VyICogX191c2VyICphcmcpCit7CisJc3RydWN0IHVyYiAqdXJiID0gYXMtPnVyYjsKKwlzdHJ1Y3QgdXNiZGV2ZnNfdXJiIF9fdXNlciAqdXNlcnVyYiA9IGFzLT51c2VydXJiOworCXZvaWQgX191c2VyICphZGRyID0gYXMtPnVzZXJ1cmI7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoYXMtPnVzZXJidWZmZXIpCisJCWlmIChjb3B5X3RvX3VzZXIoYXMtPnVzZXJidWZmZXIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHB1dF91c2VyKHVyYi0+c3RhdHVzLCAmdXNlcnVyYi0+c3RhdHVzKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHB1dF91c2VyKHVyYi0+YWN0dWFsX2xlbmd0aCwgJnVzZXJ1cmItPmFjdHVhbF9sZW5ndGgpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAocHV0X3VzZXIodXJiLT5lcnJvcl9jb3VudCwgJnVzZXJ1cmItPmVycm9yX2NvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoISh1c2JfcGlwZWlzb2ModXJiLT5waXBlKSkpCisJCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJaWYgKHB1dF91c2VyKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCwKKwkJCSAgICAgJnVzZXJ1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGgpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChwdXRfdXNlcih1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cywKKwkJCSAgICAgJnVzZXJ1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlmcmVlX2FzeW5jKGFzKTsKKworCWlmIChwdXRfdXNlcihhZGRyLCAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKilhcmcpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBhc3luYyogcmVhcF9hcyhzdHJ1Y3QgZGV2X3N0YXRlICpwcykKK3sKKyAgICAgICAgREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJc3RydWN0IGFzeW5jICphcyA9IE5VTEw7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBzLT5kZXY7CisKKwlhZGRfd2FpdF9xdWV1ZSgmcHMtPndhaXQsICZ3YWl0KTsKKwlmb3IgKDs7KSB7CisJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJaWYgKChhcyA9IGFzeW5jX2dldGNvbXBsZXRlZChwcykpKQorCQkJYnJlYWs7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCWJyZWFrOworCQl1c2JfdW5sb2NrX2RldmljZShkZXYpOworCQlzY2hlZHVsZSgpOworCQl1c2JfbG9ja19kZXZpY2UoZGV2KTsKKwl9CisJcmVtb3ZlX3dhaXRfcXVldWUoJnBzLT53YWl0LCAmd2FpdCk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlyZXR1cm4gYXM7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19yZWFwdXJiKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBhc3luYyAqYXMgPSByZWFwX2FzKHBzKTsKKwlpZiAoYXMpCisJCXJldHVybiBwcm9jZXNzY29tcGwoYXMsICh2b2lkIF9fdXNlciAqIF9fdXNlciAqKWFyZyk7CisJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQlyZXR1cm4gLUVJTlRSOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IHByb2NfcmVhcHVyYm5vbmJsb2NrKHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBhc3luYyAqYXM7CisKKwlpZiAoIShhcyA9IGFzeW5jX2dldGNvbXBsZXRlZChwcykpKQorCQlyZXR1cm4gLUVBR0FJTjsKKwlyZXR1cm4gcHJvY2Vzc2NvbXBsKGFzLCAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKilhcmcpOworfQorCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCitzdGF0aWMgaW50IGdldF91cmIzMihzdHJ1Y3QgdXNiZGV2ZnNfdXJiICprdXJiLAorCQkgICAgIHN0cnVjdCB1c2JkZXZmc191cmIzMiBfX3VzZXIgKnV1cmIpCit7CisJX191MzIgIHVwdHI7CisJaWYgKGdldF91c2VyKGt1cmItPnR5cGUsICZ1dXJiLT50eXBlKSB8fAorCSAgICBfX2dldF91c2VyKGt1cmItPmVuZHBvaW50LCAmdXVyYi0+ZW5kcG9pbnQpIHx8CisJICAgIF9fZ2V0X3VzZXIoa3VyYi0+c3RhdHVzLCAmdXVyYi0+c3RhdHVzKSB8fAorCSAgICBfX2dldF91c2VyKGt1cmItPmZsYWdzLCAmdXVyYi0+ZmxhZ3MpIHx8CisJICAgIF9fZ2V0X3VzZXIoa3VyYi0+YnVmZmVyX2xlbmd0aCwgJnV1cmItPmJ1ZmZlcl9sZW5ndGgpIHx8CisJICAgIF9fZ2V0X3VzZXIoa3VyYi0+YWN0dWFsX2xlbmd0aCwgJnV1cmItPmFjdHVhbF9sZW5ndGgpIHx8CisJICAgIF9fZ2V0X3VzZXIoa3VyYi0+c3RhcnRfZnJhbWUsICZ1dXJiLT5zdGFydF9mcmFtZSkgfHwKKwkgICAgX19nZXRfdXNlcihrdXJiLT5udW1iZXJfb2ZfcGFja2V0cywgJnV1cmItPm51bWJlcl9vZl9wYWNrZXRzKSB8fAorCSAgICBfX2dldF91c2VyKGt1cmItPmVycm9yX2NvdW50LCAmdXVyYi0+ZXJyb3JfY291bnQpIHx8CisJICAgIF9fZ2V0X3VzZXIoa3VyYi0+c2lnbnIsICZ1dXJiLT5zaWducikpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKF9fZ2V0X3VzZXIodXB0ciwgJnV1cmItPmJ1ZmZlcikpCisJCXJldHVybiAtRUZBVUxUOworCWt1cmItPmJ1ZmZlciA9IGNvbXBhdF9wdHIodXB0cik7CisJaWYgKF9fZ2V0X3VzZXIodXB0ciwgJnV1cmItPmJ1ZmZlcikpCisJCXJldHVybiAtRUZBVUxUOworCWt1cmItPnVzZXJjb250ZXh0ID0gY29tcGF0X3B0cih1cHRyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2Nfc3VibWl0dXJiX2NvbXBhdChzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgdXNiZGV2ZnNfdXJiIHV1cmI7CisKKwlpZiAoZ2V0X3VyYjMyKCZ1dXJiLChzdHJ1Y3QgdXNiZGV2ZnNfdXJiMzIgKilhcmcpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBwcm9jX2RvX3N1Ym1pdHVyYihwcywgJnV1cmIsICgoc3RydWN0IHVzYmRldmZzX3VyYiBfX3VzZXIgKilhcmcpLT5pc29fZnJhbWVfZGVzYywgYXJnKTsKK30KKworc3RhdGljIGludCBwcm9jZXNzY29tcGxfY29tcGF0KHN0cnVjdCBhc3luYyAqYXMsIHZvaWQgX191c2VyICogX191c2VyICphcmcpCit7CisJc3RydWN0IHVyYiAqdXJiID0gYXMtPnVyYjsKKwlzdHJ1Y3QgdXNiZGV2ZnNfdXJiMzIgX191c2VyICp1c2VydXJiID0gYXMtPnVzZXJ1cmI7CisJdm9pZCBfX3VzZXIgKmFkZHIgPSBhcy0+dXNlcnVyYjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChhcy0+dXNlcmJ1ZmZlcikKKwkJaWYgKGNvcHlfdG9fdXNlcihhcy0+dXNlcmJ1ZmZlciwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAocHV0X3VzZXIodXJiLT5zdGF0dXMsICZ1c2VydXJiLT5zdGF0dXMpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAocHV0X3VzZXIodXJiLT5hY3R1YWxfbGVuZ3RoLCAmdXNlcnVyYi0+YWN0dWFsX2xlbmd0aCkpCisJCXJldHVybiAtRUZBVUxUOworCWlmIChwdXRfdXNlcih1cmItPmVycm9yX2NvdW50LCAmdXNlcnVyYi0+ZXJyb3JfY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICghKHVzYl9waXBlaXNvYyh1cmItPnBpcGUpKSkKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQlpZiAocHV0X3VzZXIodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoLAorCQkJICAgICAmdXNlcnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKHB1dF91c2VyKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzLAorCQkJICAgICAmdXNlcnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKworCWZyZWVfYXN5bmMoYXMpOworCWlmIChwdXRfdXNlcigodTMyKSh1NjQpYWRkciwgKHUzMiBfX3VzZXIgKilhcmcpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jX3JlYXB1cmJfY29tcGF0KHN0cnVjdCBkZXZfc3RhdGUgKnBzLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBhc3luYyAqYXMgPSByZWFwX2FzKHBzKTsKKwlpZiAoYXMpCisJCXJldHVybiBwcm9jZXNzY29tcGxfY29tcGF0KGFzLCAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKilhcmcpOworCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJcmV0dXJuIC1FSU5UUjsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBwcm9jX3JlYXB1cmJub25ibG9ja19jb21wYXQoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IGFzeW5jICphczsKKworCXByaW50aygicmVhcHVyYm5ibG9ja1xuIik7CisJaWYgKCEoYXMgPSBhc3luY19nZXRjb21wbGV0ZWQocHMpKSkKKwkJcmV0dXJuIC1FQUdBSU47CisJcHJpbnRrKCJyZWFwIGdvdCBhcyAlcFxuIiwgYXMpOworCXJldHVybiBwcm9jZXNzY29tcGxfY29tcGF0KGFzLCAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKilhcmcpOworfQorCisjZW5kaWYKKworc3RhdGljIGludCBwcm9jX2Rpc2Nvbm5lY3RzaWduYWwoc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IHVzYmRldmZzX2Rpc2Nvbm5lY3RzaWduYWwgZHM7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmRzLCBhcmcsIHNpemVvZihkcykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoZHMuc2lnbnIgIT0gMCAmJiAoZHMuc2lnbnIgPCBTSUdSVE1JTiB8fCBkcy5zaWduciA+IFNJR1JUTUFYKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcHMtPmRpc2NzaWduciA9IGRzLnNpZ25yOworCXBzLT5kaXNjY29udGV4dCA9IGRzLmNvbnRleHQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19jbGFpbWludGVyZmFjZShzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwl1bnNpZ25lZCBpbnQgaWZudW07CisKKwlpZiAoZ2V0X3VzZXIoaWZudW0sICh1bnNpZ25lZCBpbnQgX191c2VyICopYXJnKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIGNsYWltaW50ZihwcywgaWZudW0pOworfQorCitzdGF0aWMgaW50IHByb2NfcmVsZWFzZWludGVyZmFjZShzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwl1bnNpZ25lZCBpbnQgaWZudW07CisJaW50IHJldDsKKworCWlmIChnZXRfdXNlcihpZm51bSwgKHVuc2lnbmVkIGludCBfX3VzZXIgKilhcmcpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoKHJldCA9IHJlbGVhc2VpbnRmKHBzLCBpZm51bSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlkZXN0cm95X2FzeW5jX29uX2ludGVyZmFjZSAocHMsIGlmbnVtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jX2lvY3RsIChzdHJ1Y3QgZGV2X3N0YXRlICpwcywgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgdXNiZGV2ZnNfaW9jdGwJY3RybDsKKwlpbnQJCQlzaXplOworCXZvaWQJCQkqYnVmID0gTlVMTDsKKwlpbnQJCQlyZXR2YWwgPSAwOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICAgICppbnRmID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2RyaXZlciAgICAgICAqZHJpdmVyID0gTlVMTDsKKwlpbnQJCQlpOworCisJLyogZ2V0IGlucHV0IHBhcmFtZXRlcnMgYW5kIGFsbG9jIGJ1ZmZlciAqLworCWlmIChjb3B5X2Zyb21fdXNlcigmY3RybCwgYXJnLCBzaXplb2YgKGN0cmwpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKChzaXplID0gX0lPQ19TSVpFIChjdHJsLmlvY3RsX2NvZGUpKSA+IDApIHsKKwkJaWYgKChidWYgPSBrbWFsbG9jIChzaXplLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlpZiAoKF9JT0NfRElSKGN0cmwuaW9jdGxfY29kZSkgJiBfSU9DX1dSSVRFKSkgeworCQkJaWYgKGNvcHlfZnJvbV91c2VyIChidWYsIGN0cmwuZGF0YSwgc2l6ZSkpIHsKKwkJCQlrZnJlZSAoYnVmKTsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCW1lbXNldCAoYnVmLCAwLCBzaXplKTsKKwkJfQorCX0KKworCWlmICghY29ubmVjdGVkKHBzLT5kZXYpKSB7CisJCWlmIChidWYpCisJCQlrZnJlZShidWYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAocHMtPmRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX0NPTkZJR1VSRUQpCisJCXJldHZhbCA9IC1FSE9TVFVOUkVBQ0g7CisJZWxzZSBpZiAoIShpbnRmID0gdXNiX2lmbnVtX3RvX2lmIChwcy0+ZGV2LCBjdHJsLmlmbm8pKSkKKyAgICAgICAgICAgICAgIHJldHZhbCA9IC1FSU5WQUw7CisJZWxzZSBzd2l0Y2ggKGN0cmwuaW9jdGxfY29kZSkgeworCisJLyogZGlzY29ubmVjdCBrZXJuZWwgZHJpdmVyIGZyb20gaW50ZXJmYWNlICovCisJY2FzZSBVU0JERVZGU19ESVNDT05ORUNUOgorCisJCS8qIGRvbid0IGFsbG93IHRoZSB1c2VyIHRvIHVuYmluZCB0aGUgaHViIGRyaXZlciBmcm9tCisJCSAqIGEgaHViIHdpdGggY2hpbGRyZW4gdG8gbWFuYWdlICovCisJCWZvciAoaSA9IDA7IGkgPCBwcy0+ZGV2LT5tYXhjaGlsZDsgKytpKSB7CisJCQlpZiAocHMtPmRldi0+Y2hpbGRyZW5baV0pCisJCQkJcmV0dmFsID0gLUVCVVNZOworCQl9CisJCWlmIChyZXR2YWwpCisJCQlicmVhazsKKworCQlkb3duX3dyaXRlKCZ1c2JfYnVzX3R5cGUuc3Vic3lzLnJ3c2VtKTsKKwkJaWYgKGludGYtPmRldi5kcml2ZXIpIHsKKwkJCWRyaXZlciA9IHRvX3VzYl9kcml2ZXIoaW50Zi0+ZGV2LmRyaXZlcik7CisJCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAiZGlzY29ubmVjdCBieSB1c2Jmc1xuIik7CisJCQl1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlKGRyaXZlciwgaW50Zik7CisJCX0gZWxzZQorCQkJcmV0dmFsID0gLUVOT0RBVEE7CisJCXVwX3dyaXRlKCZ1c2JfYnVzX3R5cGUuc3Vic3lzLnJ3c2VtKTsKKwkJYnJlYWs7CisKKwkvKiBsZXQga2VybmVsIGRyaXZlcnMgdHJ5IHRvIChyZSliaW5kIHRvIHRoZSBpbnRlcmZhY2UgKi8KKwljYXNlIFVTQkRFVkZTX0NPTk5FQ1Q6CisJCXVzYl91bmxvY2tfZGV2aWNlKHBzLT5kZXYpOworCQl1c2JfbG9ja19hbGxfZGV2aWNlcygpOworCQlidXNfcmVzY2FuX2RldmljZXMoaW50Zi0+ZGV2LmJ1cyk7CisJCXVzYl91bmxvY2tfYWxsX2RldmljZXMoKTsKKwkJdXNiX2xvY2tfZGV2aWNlKHBzLT5kZXYpOworCQlicmVhazsKKworCS8qIHRhbGsgZGlyZWN0bHkgdG8gdGhlIGludGVyZmFjZSdzIGRyaXZlciAqLworCWRlZmF1bHQ6CisJCWRvd25fcmVhZCgmdXNiX2J1c190eXBlLnN1YnN5cy5yd3NlbSk7CisJCWlmIChpbnRmLT5kZXYuZHJpdmVyKQorCQkJZHJpdmVyID0gdG9fdXNiX2RyaXZlcihpbnRmLT5kZXYuZHJpdmVyKTsKKwkJaWYgKGRyaXZlciA9PSBOVUxMIHx8IGRyaXZlci0+aW9jdGwgPT0gTlVMTCkgeworCQkJcmV0dmFsID0gLUVOT1RUWTsKKwkJfSBlbHNlIHsKKwkJCXJldHZhbCA9IGRyaXZlci0+aW9jdGwgKGludGYsIGN0cmwuaW9jdGxfY29kZSwgYnVmKTsKKwkJCWlmIChyZXR2YWwgPT0gLUVOT0lPQ1RMQ01EKQorCQkJCXJldHZhbCA9IC1FTk9UVFk7CisJCX0KKwkJdXBfcmVhZCgmdXNiX2J1c190eXBlLnN1YnN5cy5yd3NlbSk7CisJfQorCisJLyogY2xlYW51cCBhbmQgcmV0dXJuICovCisJaWYgKHJldHZhbCA+PSAwCisJCQkmJiAoX0lPQ19ESVIgKGN0cmwuaW9jdGxfY29kZSkgJiBfSU9DX1JFQUQpICE9IDAKKwkJCSYmIHNpemUgPiAwCisJCQkmJiBjb3B5X3RvX3VzZXIgKGN0cmwuZGF0YSwgYnVmLCBzaXplKSAhPSAwKQorCQlyZXR2YWwgPSAtRUZBVUxUOworCWlmIChidWYgIT0gTlVMTCkKKwkJa2ZyZWUgKGJ1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIE5PVEU6ICBBbGwgcmVxdWVzdHMgaGVyZSB0aGF0IGhhdmUgaW50ZXJmYWNlIG51bWJlcnMgYXMgcGFyYW1ldGVycworICogYXJlIGFzc3VtaW5nIHRoYXQgc29tZWhvdyB0aGUgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBwcmV2ZW50ZWQgZnJvbQorICogY2hhbmdpbmcuICBCdXQgdGhlcmUncyBubyBtZWNoYW5pc20gdG8gZW5zdXJlIHRoYXQuLi4KKyAqLworc3RhdGljIGludCB1c2JkZXZfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBkZXZfc3RhdGUgKnBzID0gKHN0cnVjdCBkZXZfc3RhdGUgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBzLT5kZXY7CisJdm9pZCBfX3VzZXIgKnAgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJaW50IHJldCA9IC1FTk9UVFk7CisKKwlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCisJCXJldHVybiAtRVBFUk07CisJdXNiX2xvY2tfZGV2aWNlKGRldik7CisJaWYgKCFjb25uZWN0ZWQoZGV2KSkgeworCQl1c2JfdW5sb2NrX2RldmljZShkZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVVNCREVWRlNfQ09OVFJPTDoKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IENPTlRST0xcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2NfY29udHJvbChwcywgcCk7CisJCWlmIChyZXQgPj0gMCkKKwkJCWlub2RlLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfQlVMSzoKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IEJVTEtcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2NfYnVsayhwcywgcCk7CisJCWlmIChyZXQgPj0gMCkKKwkJCWlub2RlLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfUkVTRVRFUDoKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IFJFU0VURVBcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2NfcmVzZXRlcChwcywgcCk7CisJCWlmIChyZXQgPj0gMCkKKwkJCWlub2RlLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfUkVTRVQ6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBSRVNFVFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gcHJvY19yZXNldGRldmljZShwcyk7CisJCWJyZWFrOworCisJY2FzZSBVU0JERVZGU19DTEVBUl9IQUxUOgorCQlzbm9vcCgmZGV2LT5kZXYsICIlczogQ0xFQVJfSEFMVFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gcHJvY19jbGVhcmhhbHQocHMsIHApOworCQlpZiAocmV0ID49IDApCisJCQlpbm9kZS0+aV9tdGltZSA9IENVUlJFTlRfVElNRTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQkRFVkZTX0dFVERSSVZFUjoKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IEdFVERSSVZFUlxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gcHJvY19nZXRkcml2ZXIocHMsIHApOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfQ09OTkVDVElORk86CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBDT05ORUNUSU5GT1xuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gcHJvY19jb25uZWN0aW5mbyhwcywgcCk7CisJCWJyZWFrOworCisJY2FzZSBVU0JERVZGU19TRVRJTlRFUkZBQ0U6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBTRVRJTlRFUkZBQ0VcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2Nfc2V0aW50ZihwcywgcCk7CisJCWJyZWFrOworCisJY2FzZSBVU0JERVZGU19TRVRDT05GSUdVUkFUSU9OOgorCQlzbm9vcCgmZGV2LT5kZXYsICIlczogU0VUQ09ORklHVVJBVElPTlxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gcHJvY19zZXRjb25maWcocHMsIHApOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfU1VCTUlUVVJCOgorCQlzbm9vcCgmZGV2LT5kZXYsICIlczogU1VCTUlUVVJCXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXQgPSBwcm9jX3N1Ym1pdHVyYihwcywgcCk7CisJCWlmIChyZXQgPj0gMCkKKwkJCWlub2RlLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOworCQlicmVhazsKKworI2lmZGVmIENPTkZJR19DT01QQVQKKworCWNhc2UgVVNCREVWRlNfU1VCTUlUVVJCMzI6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBTVUJNSVRVUkIzMlxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gcHJvY19zdWJtaXR1cmJfY29tcGF0KHBzLCBwKTsKKwkJaWYgKHJldCA+PSAwKQorCQkJaW5vZGUtPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUU7CisJCWJyZWFrOworCisJY2FzZSBVU0JERVZGU19SRUFQVVJCMzI6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBSRUFQVVJCMzJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2NfcmVhcHVyYl9jb21wYXQocHMsIHApOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfUkVBUFVSQk5ERUxBWTMyOgorCQlzbm9vcCgmZGV2LT5kZXYsICIlczogUkVBUFVSQkRFTEFZMzJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2NfcmVhcHVyYm5vbmJsb2NrX2NvbXBhdChwcywgcCk7CisJCWJyZWFrOworCisjZW5kaWYKKworCWNhc2UgVVNCREVWRlNfRElTQ0FSRFVSQjoKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IERJU0NBUkRVUkJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2NfdW5saW5rdXJiKHBzLCBwKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQkRFVkZTX1JFQVBVUkI6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBSRUFQVVJCXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXQgPSBwcm9jX3JlYXB1cmIocHMsIHApOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfUkVBUFVSQk5ERUxBWToKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IFJFQVBVUkJERUxBWVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gcHJvY19yZWFwdXJibm9uYmxvY2socHMsIHApOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfRElTQ1NJR05BTDoKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IERJU0NTSUdOQUxcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IHByb2NfZGlzY29ubmVjdHNpZ25hbChwcywgcCk7CisJCWJyZWFrOworCisJY2FzZSBVU0JERVZGU19DTEFJTUlOVEVSRkFDRToKKwkJc25vb3AoJmRldi0+ZGV2LCAiJXM6IENMQUlNSU5URVJGQUNFXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXQgPSBwcm9jX2NsYWltaW50ZXJmYWNlKHBzLCBwKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQkRFVkZTX1JFTEVBU0VJTlRFUkZBQ0U6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBSRUxFQVNFSU5URVJGQUNFXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXQgPSBwcm9jX3JlbGVhc2VpbnRlcmZhY2UocHMsIHApOworCQlicmVhazsKKworCWNhc2UgVVNCREVWRlNfSU9DVEw6CisJCXNub29wKCZkZXYtPmRldiwgIiVzOiBJT0NUTFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gcHJvY19pb2N0bChwcywgcCk7CisJCWJyZWFrOworCX0KKwl1c2JfdW5sb2NrX2RldmljZShkZXYpOworCWlmIChyZXQgPj0gMCkKKwkJaW5vZGUtPmlfYXRpbWUgPSBDVVJSRU5UX1RJTUU7CisJcmV0dXJuIHJldDsKK30KKworLyogTm8ga2VybmVsIGxvY2sgLSBmaW5lICovCitzdGF0aWMgdW5zaWduZWQgaW50IHVzYmRldl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCit7CisJc3RydWN0IGRldl9zdGF0ZSAqcHMgPSAoc3RydWN0IGRldl9zdGF0ZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKyAgICAgICAgdW5zaWduZWQgaW50IG1hc2sgPSAwOworCisJcG9sbF93YWl0KGZpbGUsICZwcy0+d2FpdCwgd2FpdCk7CisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFICYmICFsaXN0X2VtcHR5KCZwcy0+YXN5bmNfY29tcGxldGVkKSkKKwkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKKwlpZiAoIWNvbm5lY3RlZChwcy0+ZGV2KSkKKwkJbWFzayB8PSBQT0xMRVJSIHwgUE9MTEhVUDsKKwlyZXR1cm4gbWFzazsKK30KKworc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2Jmc19kZXZpY2VfZmlsZV9vcGVyYXRpb25zID0geworCS5sbHNlZWsgPQl1c2JkZXZfbHNlZWssCisJLnJlYWQgPQkJdXNiZGV2X3JlYWQsCisJLnBvbGwgPQkJdXNiZGV2X3BvbGwsCisJLmlvY3RsID0JdXNiZGV2X2lvY3RsLAorCS5vcGVuID0JCXVzYmRldl9vcGVuLAorCS5yZWxlYXNlID0JdXNiZGV2X3JlbGVhc2UsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9maWxlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2ZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGNlOTY0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS9maWxlLmMKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiBkcml2ZXJzL3VzYi9maWxlLmMKKyAqCisgKiAoQykgQ29weXJpZ2h0IExpbnVzIFRvcnZhbGRzIDE5OTkKKyAqIChDKSBDb3B5cmlnaHQgSm9oYW5uZXMgRXJkZmVsdCAxOTk5LTIwMDEKKyAqIChDKSBDb3B5cmlnaHQgQW5kcmVhcyBHYWwgMTk5OQorICogKEMpIENvcHlyaWdodCBHcmVnb3J5IFAuIFNtaXRoIDE5OTkKKyAqIChDKSBDb3B5cmlnaHQgRGV0aSBGbGllZ2wgMTk5OSAobmV3IFVTQiBhcmNoaXRlY3R1cmUpCisgKiAoQykgQ29weXJpZ2h0IFJhbmR5IER1bmxhcCAyMDAwCisgKiAoQykgQ29weXJpZ2h0IERhdmlkIEJyb3duZWxsIDIwMDAtMjAwMSAoa2VybmVsIGhvdHBsdWcsIHVzYl9kZXZpY2VfaWQsCisgCW1vcmUgZG9jcywgZXRjKQorICogKEMpIENvcHlyaWdodCBZZ2dkcmFzaWwgQ29tcHV0aW5nLCBJbmMuIDIwMDAKKyAqICAgICAodXNiX2RldmljZV9pZCBtYXRjaGluZyBjaGFuZ2VzIGJ5IEFkYW0gSi4gUmljaHRlcikKKyAqIChDKSBDb3B5cmlnaHQgR3JlZyBLcm9haC1IYXJ0bWFuIDIwMDItMjAwMworICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworCSNkZWZpbmUgREVCVUcKKyNlbHNlCisJI3VuZGVmIERFQlVHCisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2RlZmluZSBNQVhfVVNCX01JTk9SUwkyNTYKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICp1c2JfbWlub3JzW01BWF9VU0JfTUlOT1JTXTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWlub3JfbG9jayk7CisKK3N0YXRpYyBpbnQgdXNiX29wZW4oc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZSkKK3sKKwlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOworCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmM7CisJaW50IGVyciA9IC1FTk9ERVY7CisJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqb2xkX2ZvcHMsICpuZXdfZm9wcyA9IE5VTEw7CisKKwlzcGluX2xvY2sgKCZtaW5vcl9sb2NrKTsKKwljID0gdXNiX21pbm9yc1ttaW5vcl07CisKKwlpZiAoIWMgfHwgIShuZXdfZm9wcyA9IGZvcHNfZ2V0KGMpKSkgeworCQlzcGluX3VubG9jaygmbWlub3JfbG9jayk7CisJCXJldHVybiBlcnI7CisJfQorCXNwaW5fdW5sb2NrKCZtaW5vcl9sb2NrKTsKKworCW9sZF9mb3BzID0gZmlsZS0+Zl9vcDsKKwlmaWxlLT5mX29wID0gbmV3X2ZvcHM7CisJLyogQ3VyaW91c2VyIGFuZCBjdXJpb3VzZXIuLi4gTlVMTCAtPm9wZW4oKSBhcyAibm8gZGV2aWNlIiA/ICovCisJaWYgKGZpbGUtPmZfb3AtPm9wZW4pCisJCWVyciA9IGZpbGUtPmZfb3AtPm9wZW4oaW5vZGUsZmlsZSk7CisJaWYgKGVycikgeworCQlmb3BzX3B1dChmaWxlLT5mX29wKTsKKwkJZmlsZS0+Zl9vcCA9IGZvcHNfZ2V0KG9sZF9mb3BzKTsKKwl9CisJZm9wc19wdXQob2xkX2ZvcHMpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYl9mb3BzID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5vcGVuID0JCXVzYl9vcGVuLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGFzc19zaW1wbGUgKnVzYl9jbGFzczsKKworaW50IHVzYl9tYWpvcl9pbml0KHZvaWQpCit7CisJaW50IGVycm9yOworCisJZXJyb3IgPSByZWdpc3Rlcl9jaHJkZXYoVVNCX01BSk9SLCAidXNiIiwgJnVzYl9mb3BzKTsKKwlpZiAoZXJyb3IpIHsKKwkJZXJyKCJ1bmFibGUgdG8gZ2V0IG1ham9yICVkIGZvciB1c2IgZGV2aWNlcyIsIFVTQl9NQUpPUik7CisJCWdvdG8gb3V0OworCX0KKworCXVzYl9jbGFzcyA9IGNsYXNzX3NpbXBsZV9jcmVhdGUoVEhJU19NT0RVTEUsICJ1c2IiKTsKKwlpZiAoSVNfRVJSKHVzYl9jbGFzcykpIHsKKwkJZXJyKCJjbGFzc19zaW1wbGVfY3JlYXRlIGZhaWxlZCBmb3IgdXNiIGRldmljZXMiKTsKKwkJdW5yZWdpc3Rlcl9jaHJkZXYoVVNCX01BSk9SLCAidXNiIik7CisJCWdvdG8gb3V0OworCX0KKworCWRldmZzX21rX2RpcigidXNiIik7CisKK291dDoKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgdXNiX21ham9yX2NsZWFudXAodm9pZCkKK3sKKwljbGFzc19zaW1wbGVfZGVzdHJveSh1c2JfY2xhc3MpOworCWRldmZzX3JlbW92ZSgidXNiIik7CisJdW5yZWdpc3Rlcl9jaHJkZXYoVVNCX01BSk9SLCAidXNiIik7Cit9CisKKy8qKgorICogdXNiX3JlZ2lzdGVyX2RldiAtIHJlZ2lzdGVyIGEgVVNCIGRldmljZSwgYW5kIGFzayBmb3IgYSBtaW5vciBudW1iZXIKKyAqIEBpbnRmOiBwb2ludGVyIHRvIHRoZSB1c2JfaW50ZXJmYWNlIHRoYXQgaXMgYmVpbmcgcmVnaXN0ZXJlZAorICogQGNsYXNzX2RyaXZlcjogcG9pbnRlciB0byB0aGUgdXNiX2NsYXNzX2RyaXZlciBmb3IgdGhpcyBkZXZpY2UKKyAqCisgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYnkgYWxsIFVTQiBkcml2ZXJzIHRoYXQgdXNlIHRoZSBVU0IgbWFqb3IgbnVtYmVyLgorICogSWYgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBlbmFibGVkLCB0aGUgbWlub3IgbnVtYmVyIHdpbGwgYmUKKyAqIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBvdXQgb2YgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIG9uZXMuICBJZiBpdCBpcyBub3QKKyAqIGVuYWJsZWQsIHRoZSBtaW5vciBudW1iZXIgd2lsbCBiZSBiYXNlZCBvbiB0aGUgbmV4dCBhdmFpbGFibGUgZnJlZSBtaW5vciwKKyAqIHN0YXJ0aW5nIGF0IHRoZSBjbGFzc19kcml2ZXItPm1pbm9yX2Jhc2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBhbHNvIGNyZWF0ZXMgdGhlIGRldmZzIGZpbGUgZm9yIHRoZSB1c2IgZGV2aWNlLCBpZiBkZXZmcworICogaXMgZW5hYmxlZCwgYW5kIGNyZWF0ZXMgYSB1c2IgY2xhc3MgZGV2aWNlIGluIHRoZSBzeXNmcyB0cmVlLgorICoKKyAqIHVzYl9kZXJlZ2lzdGVyX2RldigpIG11c3QgYmUgY2FsbGVkIHdoZW4gdGhlIGRyaXZlciBpcyBkb25lIHdpdGgKKyAqIHRoZSBtaW5vciBudW1iZXJzIGdpdmVuIG91dCBieSB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnMgLUVJTlZBTCBpZiBzb21ldGhpbmcgYmFkIGhhcHBlbnMgd2l0aCB0cnlpbmcgdG8gcmVnaXN0ZXIgYQorICogZGV2aWNlLCBhbmQgMCBvbiBzdWNjZXNzLgorICovCitpbnQgdXNiX3JlZ2lzdGVyX2RldihzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJICAgICBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciAqY2xhc3NfZHJpdmVyKQoreworCWludCByZXR2YWwgPSAtRUlOVkFMOworCWludCBtaW5vcl9iYXNlID0gY2xhc3NfZHJpdmVyLT5taW5vcl9iYXNlOworCWludCBtaW5vciA9IDA7CisJY2hhciBuYW1lW0JVU19JRF9TSVpFXTsKKwljaGFyICp0ZW1wOworCisjaWZkZWYgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUworCS8qIAorCSAqIFdlIGRvbid0IGNhcmUgd2hhdCB0aGUgZGV2aWNlIHRyaWVzIHRvIHN0YXJ0IGF0LCB3ZSB3YW50IHRvIHN0YXJ0CisJICogYXQgemVybyB0byBwYWNrIHRoZSBkZXZpY2VzIGludG8gdGhlIHNtYWxsZXN0IGF2YWlsYWJsZSBzcGFjZSB3aXRoCisJICogbm8gaG9sZXMgaW4gdGhlIG1pbm9yIHJhbmdlLgorCSAqLworCW1pbm9yX2Jhc2UgPSAwOworI2VuZGlmCisJaW50Zi0+bWlub3IgPSAtMTsKKworCWRiZyAoImxvb2tpbmcgZm9yIGEgbWlub3IsIHN0YXJ0aW5nIGF0ICVkIiwgbWlub3JfYmFzZSk7CisKKwlpZiAoY2xhc3NfZHJpdmVyLT5mb3BzID09IE5VTEwpCisJCWdvdG8gZXhpdDsKKworCXNwaW5fbG9jayAoJm1pbm9yX2xvY2spOworCWZvciAobWlub3IgPSBtaW5vcl9iYXNlOyBtaW5vciA8IE1BWF9VU0JfTUlOT1JTOyArK21pbm9yKSB7CisJCWlmICh1c2JfbWlub3JzW21pbm9yXSkKKwkJCWNvbnRpbnVlOworCisJCXVzYl9taW5vcnNbbWlub3JdID0gY2xhc3NfZHJpdmVyLT5mb3BzOworCisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCX0KKwlzcGluX3VubG9jayAoJm1pbm9yX2xvY2spOworCisJaWYgKHJldHZhbCkKKwkJZ290byBleGl0OworCisJaW50Zi0+bWlub3IgPSBtaW5vcjsKKworCS8qIGhhbmRsZSB0aGUgZGV2ZnMgcmVnaXN0cmF0aW9uICovCisJc25wcmludGYobmFtZSwgQlVTX0lEX1NJWkUsIGNsYXNzX2RyaXZlci0+bmFtZSwgbWlub3IgLSBtaW5vcl9iYXNlKTsKKwlkZXZmc19ta19jZGV2KE1LREVWKFVTQl9NQUpPUiwgbWlub3IpLCBjbGFzc19kcml2ZXItPm1vZGUsIG5hbWUpOworCisJLyogY3JlYXRlIGEgdXNiIGNsYXNzIGRldmljZSBmb3IgdGhpcyB1c2IgaW50ZXJmYWNlICovCisJdGVtcCA9IHN0cnJjaHIobmFtZSwgJy8nKTsKKwlpZiAodGVtcCAmJiAodGVtcFsxXSAhPSAweDAwKSkKKwkJKyt0ZW1wOworCWVsc2UKKwkJdGVtcCA9IG5hbWU7CisJaW50Zi0+Y2xhc3NfZGV2ID0gY2xhc3Nfc2ltcGxlX2RldmljZV9hZGQodXNiX2NsYXNzLCBNS0RFVihVU0JfTUFKT1IsIG1pbm9yKSwgJmludGYtPmRldiwgIiVzIiwgdGVtcCk7CisJaWYgKElTX0VSUihpbnRmLT5jbGFzc19kZXYpKSB7CisJCXNwaW5fbG9jayAoJm1pbm9yX2xvY2spOworCQl1c2JfbWlub3JzW2ludGYtPm1pbm9yXSA9IE5VTEw7CisJCXNwaW5fdW5sb2NrICgmbWlub3JfbG9jayk7CisJCWRldmZzX3JlbW92ZSAobmFtZSk7CisJCXJldHZhbCA9IFBUUl9FUlIoaW50Zi0+Y2xhc3NfZGV2KTsKKwl9CitleGl0OgorCXJldHVybiByZXR2YWw7Cit9CitFWFBPUlRfU1lNQk9MKHVzYl9yZWdpc3Rlcl9kZXYpOworCisvKioKKyAqIHVzYl9kZXJlZ2lzdGVyX2RldiAtIGRlcmVnaXN0ZXIgYSBVU0IgZGV2aWNlJ3MgZHluYW1pYyBtaW5vci4KKyAqIEBpbnRmOiBwb2ludGVyIHRvIHRoZSB1c2JfaW50ZXJmYWNlIHRoYXQgaXMgYmVpbmcgZGVyZWdpc3RlcmVkCisgKiBAY2xhc3NfZHJpdmVyOiBwb2ludGVyIHRvIHRoZSB1c2JfY2xhc3NfZHJpdmVyIGZvciB0aGlzIGRldmljZQorICoKKyAqIFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB1c2JfcmVnaXN0ZXJfZGV2KCkuICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZAorICogd2hlbiB0aGUgVVNCIGRyaXZlciBpcyBmaW5pc2hlZCB3aXRoIHRoZSBtaW5vciBudW1iZXJzIGdvdHRlbiBmcm9tIGEKKyAqIGNhbGwgdG8gdXNiX3JlZ2lzdGVyX2RldigpICh1c3VhbGx5IHdoZW4gdGhlIGRldmljZSBpcyBkaXNjb25uZWN0ZWQKKyAqIGZyb20gdGhlIHN5c3RlbS4pCisgKgorICogVGhpcyBmdW5jdGlvbiBhbHNvIGNsZWFucyB1cCB0aGUgZGV2ZnMgZmlsZSBmb3IgdGhlIHVzYiBkZXZpY2UsIGlmIGRldmZzCisgKiBpcyBlbmFibGVkLCBhbmQgcmVtb3ZlcyB0aGUgdXNiIGNsYXNzIGRldmljZSBmcm9tIHRoZSBzeXNmcyB0cmVlLgorICogCisgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYnkgYWxsIGRyaXZlcnMgdGhhdCB1c2UgdGhlIFVTQiBtYWpvciBudW1iZXIuCisgKi8KK3ZvaWQgdXNiX2RlcmVnaXN0ZXJfZGV2KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgKmNsYXNzX2RyaXZlcikKK3sKKwlpbnQgbWlub3JfYmFzZSA9IGNsYXNzX2RyaXZlci0+bWlub3JfYmFzZTsKKwljaGFyIG5hbWVbQlVTX0lEX1NJWkVdOworCisjaWZkZWYgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUworCW1pbm9yX2Jhc2UgPSAwOworI2VuZGlmCisKKwlpZiAoaW50Zi0+bWlub3IgPT0gLTEpCisJCXJldHVybjsKKworCWRiZyAoInJlbW92aW5nICVkIG1pbm9yIiwgaW50Zi0+bWlub3IpOworCisJc3Bpbl9sb2NrICgmbWlub3JfbG9jayk7CisJdXNiX21pbm9yc1tpbnRmLT5taW5vcl0gPSBOVUxMOworCXNwaW5fdW5sb2NrICgmbWlub3JfbG9jayk7CisKKwlzbnByaW50ZihuYW1lLCBCVVNfSURfU0laRSwgY2xhc3NfZHJpdmVyLT5uYW1lLCBpbnRmLT5taW5vciAtIG1pbm9yX2Jhc2UpOworCWRldmZzX3JlbW92ZSAobmFtZSk7CisJY2xhc3Nfc2ltcGxlX2RldmljZV9yZW1vdmUoTUtERVYoVVNCX01BSk9SLCBpbnRmLT5taW5vcikpOworCWludGYtPmNsYXNzX2RldiA9IE5VTEw7CisJaW50Zi0+bWlub3IgPSAtMTsKK30KK0VYUE9SVF9TWU1CT0wodXNiX2RlcmVnaXN0ZXJfZGV2KTsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YTNkYWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYwpAQCAtMCwwICsxLDM1OCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgRGF2aWQgQnJvd25lbGwgMjAwMC0yMDAyCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKwkjZGVmaW5lIERFQlVHCisjZWxzZQorCSN1bmRlZiBERUJVRworI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAiaGNkLmgiCisKKworLyogUENJLWJhc2VkIEhDcyBhcmUgbm9ybWFsLCBidXQgY3VzdG9tIGJ1cyBnbHVlIHNob3VsZCBiZSBvayAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGNvbmZpZ3VyZSBzbyBhbiBIQyBkZXZpY2UgYW5kIGlkIGFyZSBhbHdheXMgcHJvdmlkZWQgKi8KKy8qIGFsd2F5cyBjYWxsZWQgd2l0aCBwcm9jZXNzIGNvbnRleHQ7IHNsZWVwaW5nIGlzIE9LICovCisKKy8qKgorICogdXNiX2hjZF9wY2lfcHJvYmUgLSBpbml0aWFsaXplIFBDSS1iYXNlZCBIQ0RzCisgKiBAZGV2OiBVU0IgSG9zdCBDb250cm9sbGVyIGJlaW5nIHByb2JlZAorICogQGlkOiBwY2kgaG90cGx1ZyBpZCBjb25uZWN0aW5nIGNvbnRyb2xsZXIgdG8gSENEIGZyYW1ld29yaworICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogQWxsb2NhdGVzIGJhc2ljIFBDSSByZXNvdXJjZXMgZm9yIHRoaXMgVVNCIGhvc3QgY29udHJvbGxlciwgYW5kCisgKiB0aGVuIGludm9rZXMgdGhlIHN0YXJ0KCkgbWV0aG9kIGZvciB0aGUgSENEIGFzc29jaWF0ZWQgd2l0aCBpdAorICogdGhyb3VnaCB0aGUgaG90cGx1ZyBlbnRyeSdzIGRyaXZlcl9kYXRhLgorICoKKyAqIFN0b3JlIHRoaXMgZnVuY3Rpb24gaW4gdGhlIEhDRCdzIHN0cnVjdCBwY2lfZHJpdmVyIGFzIHByb2JlKCkuCisgKi8KK2ludCB1c2JfaGNkX3BjaV9wcm9iZSAoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBoY19kcml2ZXIJKmRyaXZlcjsKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKwlpbnQJCQlyZXR2YWw7CisKKwlpZiAodXNiX2Rpc2FibGVkKCkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFpZCB8fCAhKGRyaXZlciA9IChzdHJ1Y3QgaGNfZHJpdmVyICopIGlkLT5kcml2ZXJfZGF0YSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlIChkZXYpIDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJZGV2LT5jdXJyZW50X3N0YXRlID0gMDsKKwlkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IDA7CisJCisgICAgICAgIGlmICghZGV2LT5pcnEpIHsKKyAgICAgICAgCWRldl9lcnIgKCZkZXYtPmRldiwKKwkJCSJGb3VuZCBIQyB3aXRoIG5vIElSUS4gIENoZWNrIEJJT1MvUENJICVzIHNldHVwIVxuIiwKKwkJCXBjaV9uYW1lKGRldikpOworICAgCSAgICAgICAgcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnIxOworICAgICAgICB9CisKKwloY2QgPSB1c2JfY3JlYXRlX2hjZCAoZHJpdmVyLCAmZGV2LT5kZXYsIHBjaV9uYW1lKGRldikpOworCWlmICghaGNkKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMTsKKwl9CisKKwlpZiAoZHJpdmVyLT5mbGFncyAmIEhDRF9NRU1PUlkpIHsJLy8gRUhDSSwgT0hDSQorCQloY2QtPnJzcmNfc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQgKGRldiwgMCk7CisJCWhjZC0+cnNyY19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuIChkZXYsIDApOworCQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbiAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLAorCQkJCWRyaXZlci0+ZGVzY3JpcHRpb24pKSB7CisJCQlkZXZfZGJnICgmZGV2LT5kZXYsICJjb250cm9sbGVyIGFscmVhZHkgaW4gdXNlXG4iKTsKKwkJCXJldHZhbCA9IC1FQlVTWTsKKwkJCWdvdG8gZXJyMjsKKwkJfQorCQloY2QtPnJlZ3MgPSBpb3JlbWFwX25vY2FjaGUgKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJCWlmIChoY2QtPnJlZ3MgPT0gTlVMTCkgeworCQkJZGV2X2RiZyAoJmRldi0+ZGV2LCAiZXJyb3IgbWFwcGluZyBtZW1vcnlcbiIpOworCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCWdvdG8gZXJyMzsKKwkJfQorCisJfSBlbHNlIHsgCQkJCS8vIFVIQ0kKKwkJaW50CXJlZ2lvbjsKKworCQlmb3IgKHJlZ2lvbiA9IDA7IHJlZ2lvbiA8IFBDSV9ST01fUkVTT1VSQ0U7IHJlZ2lvbisrKSB7CisJCQlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MgKGRldiwgcmVnaW9uKSAmCisJCQkJCUlPUkVTT1VSQ0VfSU8pKQorCQkJCWNvbnRpbnVlOworCisJCQloY2QtPnJzcmNfc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQgKGRldiwgcmVnaW9uKTsKKwkJCWhjZC0+cnNyY19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuIChkZXYsIHJlZ2lvbik7CisJCQlpZiAocmVxdWVzdF9yZWdpb24gKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwKKwkJCQkJZHJpdmVyLT5kZXNjcmlwdGlvbikpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKHJlZ2lvbiA9PSBQQ0lfUk9NX1JFU09VUkNFKSB7CisJCQlkZXZfZGJnICgmZGV2LT5kZXYsICJubyBpL28gcmVnaW9ucyBhdmFpbGFibGVcbiIpOworCQkJcmV0dmFsID0gLUVCVVNZOworCQkJZ290byBlcnIxOworCQl9CisJfQorCisjaWZkZWYgQ09ORklHX1BDSV9OQU1FUworCWhjZC0+cHJvZHVjdF9kZXNjID0gZGV2LT5wcmV0dHlfbmFtZTsKKyNlbmRpZgorCisJcGNpX3NldF9tYXN0ZXIgKGRldik7CisKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZCAoaGNkLCBkZXYtPmlycSwgU0FfU0hJUlEpOworCWlmIChyZXR2YWwgIT0gMCkKKwkJZ290byBlcnI0OworCXJldHVybiByZXR2YWw7CisKKyBlcnI0OgorCWlmIChkcml2ZXItPmZsYWdzICYgSENEX01FTU9SWSkgeworCQlpb3VubWFwIChoY2QtPnJlZ3MpOworIGVycjM6CisJCXJlbGVhc2VfbWVtX3JlZ2lvbiAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwl9IGVsc2UKKwkJcmVsZWFzZV9yZWdpb24gKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisgZXJyMjoKKwl1c2JfcHV0X2hjZCAoaGNkKTsKKyBlcnIxOgorCXBjaV9kaXNhYmxlX2RldmljZSAoZGV2KTsKKwlkZXZfZXJyICgmZGV2LT5kZXYsICJpbml0ICVzIGZhaWwsICVkXG4iLCBwY2lfbmFtZShkZXYpLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9IAorRVhQT1JUX1NZTUJPTCAodXNiX2hjZF9wY2lfcHJvYmUpOworCisKKy8qIG1heSBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sbGVyIGVsZWN0cmljYWxseSBwcmVzZW50ICovCisvKiBtYXkgYmUgY2FsbGVkIHdpdGggY29udHJvbGxlciwgYnVzLCBhbmQgZGV2aWNlcyBhY3RpdmUgKi8KKworLyoqCisgKiB1c2JfaGNkX3BjaV9yZW1vdmUgLSBzaHV0ZG93biBwcm9jZXNzaW5nIGZvciBQQ0ktYmFzZWQgSENEcworICogQGRldjogVVNCIEhvc3QgQ29udHJvbGxlciBiZWluZyByZW1vdmVkCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBSZXZlcnNlcyB0aGUgZWZmZWN0IG9mIHVzYl9oY2RfcGNpX3Byb2JlKCksIGZpcnN0IGludm9raW5nCisgKiB0aGUgSENEJ3Mgc3RvcCgpIG1ldGhvZC4gIEl0IGlzIGFsd2F5cyBjYWxsZWQgZnJvbSBhIHRocmVhZAorICogY29udGV4dCwgbm9ybWFsbHkgInJtbW9kIiwgImFwbWQiLCBvciBzb21ldGhpbmcgc2ltaWxhci4KKyAqCisgKiBTdG9yZSB0aGlzIGZ1bmN0aW9uIGluIHRoZSBIQ0QncyBzdHJ1Y3QgcGNpX2RyaXZlciBhcyByZW1vdmUoKS4KKyAqLwordm9pZCB1c2JfaGNkX3BjaV9yZW1vdmUgKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CisKKwloY2QgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwlpZiAoIWhjZCkKKwkJcmV0dXJuOworCisJdXNiX3JlbW92ZV9oY2QgKGhjZCk7CisJaWYgKGhjZC0+ZHJpdmVyLT5mbGFncyAmIEhDRF9NRU1PUlkpIHsKKwkJaW91bm1hcCAoaGNkLT5yZWdzKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uIChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCX0gZWxzZSB7CisJCXJlbGVhc2VfcmVnaW9uIChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCX0KKwl1c2JfcHV0X2hjZCAoaGNkKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKK30KK0VYUE9SVF9TWU1CT0wgKHVzYl9oY2RfcGNpX3JlbW92ZSk7CisKKworI2lmZGVmCUNPTkZJR19QTQorCitzdGF0aWMgY2hhciBfX2F0dHJpYnV0ZV91c2VkX18gKnBjaV9zdGF0ZSh1MzIgc3RhdGUpCit7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgMDoJCXJldHVybiAiRDAiOworCWNhc2UgMToJCXJldHVybiAiRDEiOworCWNhc2UgMjoJCXJldHVybiAiRDIiOworCWNhc2UgMzoJCXJldHVybiAiRDNob3QiOworCWNhc2UgNDoJCXJldHVybiAiRDNjb2xkIjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogdXNiX2hjZF9wY2lfc3VzcGVuZCAtIHBvd2VyIG1hbmFnZW1lbnQgc3VzcGVuZCBvZiBhIFBDSS1iYXNlZCBIQ0QKKyAqIEBkZXY6IFVTQiBIb3N0IENvbnRyb2xsZXIgYmVpbmcgc3VzcGVuZGVkCisgKiBAc3RhdGU6IHN0YXRlIHRoYXQgdGhlIGNvbnRyb2xsZXIgaXMgZ29pbmcgaW50bworICoKKyAqIFN0b3JlIHRoaXMgZnVuY3Rpb24gaW4gdGhlIEhDRCdzIHN0cnVjdCBwY2lfZHJpdmVyIGFzIHN1c3BlbmQoKS4KKyAqLworaW50IHVzYl9oY2RfcGNpX3N1c3BlbmQgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiBzdGF0ZSkKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKwlpbnQJCQlyZXR2YWwgPSAwOworCWludAkJCWhhc19wY2lfcG07CisKKwloY2QgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKworCS8qIGV2ZW4gd2hlbiB0aGUgUENJIGxheWVyIHJlamVjdHMgc29tZSBvZiB0aGUgUENJIGNhbGxzCisJICogYmVsb3csIEhDcyBjYW4gdHJ5IGdsb2JhbCBzdXNwZW5kIGFuZCByZWR1Y2UgRE1BIHRyYWZmaWMuCisJICogUE0tc2Vuc2l0aXZlIEhDRHMgbWF5IGFscmVhZHkgaGF2ZSBkb25lIHRoaXMuCisJICovCisJaGFzX3BjaV9wbSA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX1BNKTsKKwlpZiAoc3RhdGUgPiA0KQorCQlzdGF0ZSA9IDQ7CisKKwlzd2l0Y2ggKGhjZC0+c3RhdGUpIHsKKworCS8qIGVudHJ5IGlmIHJvb3QgaHViIHdhc24ndCB5ZXQgc3VzcGVuZGVkIC4uLiBmcm9tIHN5c2ZzLAorCSAqIHdpdGhvdXQgYXV0b3N1c3BlbmQsIG9yIGlmIFVTQl9TVVNQRU5EIGlzbid0IGNvbmZpZ3VyZWQuCisJICovCisJY2FzZSBIQ19TVEFURV9SVU5OSU5HOgorCQloY2QtPnN0YXRlID0gSENfU1RBVEVfUVVJRVNDSU5HOworCQlyZXR2YWwgPSBoY2QtPmRyaXZlci0+c3VzcGVuZCAoaGNkLCBzdGF0ZSk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWRldl9kYmcgKGhjZC0+c2VsZi5jb250cm9sbGVyLCAKKwkJCQkJInN1c3BlbmQgZmFpbCwgcmV0dmFsICVkXG4iLAorCQkJCQlyZXR2YWwpOworCQkJYnJlYWs7CisJCX0KKwkJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1NVU1BFTkRFRDsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKworCS8qIGVudHJ5IHdpdGggQ09ORklHX1VTQl9TVVNQRU5ELCBvciBoY2RzIHRoYXQgYXV0b3N1c3BlbmQ6IHRoZQorCSAqIGNvbnRyb2xsZXIgYW5kL29yIHJvb3QgaHViIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gc3VzcGVuZGVkLAorCSAqIGJ1dCBpdCB3b24ndCBiZSByZWFkeSBmb3IgYSBQQ0kgcmVzdW1lIGNhbGwuCisJICoKKwkgKiBGSVhNRSBvbmx5IENPTkZJR19VU0JfU1VTUEVORCBndWFyYW50ZWVzIGh1Yl9zdXNwZW5kKCkgd2lsbAorCSAqIGhhdmUgYmVlbiBjYWxsZWQsIG90aGVyd2lzZSByb290IGh1YiB0aW1lcnMgc3RpbGwgcnVuIC4uLgorCSAqLworCWNhc2UgSENfU1RBVEVfU1VTUEVOREVEOgorCQlpZiAoc3RhdGUgPD0gZGV2LT5jdXJyZW50X3N0YXRlKQorCQkJYnJlYWs7CisKKwkJLyogbm8gRE1BIG9yIElSUXMgZXhjZXB0IGluIEQwICovCisJCWlmICghZGV2LT5jdXJyZW50X3N0YXRlKSB7CisJCQlwY2lfc2F2ZV9zdGF0ZSAoZGV2KTsKKwkJCXBjaV9kaXNhYmxlX2RldmljZSAoZGV2KTsKKwkJCWZyZWVfaXJxIChoY2QtPmlycSwgaGNkKTsKKwkJfQorCisJCWlmICghaGFzX3BjaV9wbSkgeworCQkJZGV2X2RiZyAoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICItLT4gUENJIEQwL2xlZ2FjeVxuIik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFBPTElDWTogaWdub3JlIEQxL0QyL0QzaG90IGRpZmZlcmVuY2VzOworCQkgKiB3ZSBrbm93IEQzaG90IHdpbGwgYWx3YXlzIHdvcmsuCisJCSAqLworCQlyZXR2YWwgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlIChkZXYsIHN0YXRlKTsKKwkJaWYgKHJldHZhbCA8IDAgJiYgc3RhdGUgPCAzKSB7CisJCQlyZXR2YWwgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlIChkZXYsIDMpOworCQkJaWYgKHJldHZhbCA9PSAwKQorCQkJCXN0YXRlID0gMzsKKwkJfQorCQlpZiAocmV0dmFsID09IDApIHsKKwkJCWRldl9kYmcgKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiLS0+IFBDSSAlc1xuIiwKKwkJCQkJcGNpX3N0YXRlKGRldi0+Y3VycmVudF9zdGF0ZSkpOworI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAorCQkJcGNpX2VuYWJsZV93YWtlIChkZXYsIHN0YXRlLCBoY2QtPnJlbW90ZV93YWtldXApOworCQkJcGNpX2VuYWJsZV93YWtlIChkZXYsIDQsIGhjZC0+cmVtb3RlX3dha2V1cCk7CisjZW5kaWYKKwkJfSBlbHNlIGlmIChyZXR2YWwgPCAwKSB7CisJCQlkZXZfZGJnICgmZGV2LT5kZXYsICJQQ0kgJXMgc3VzcGVuZCBmYWlsLCAlZFxuIiwKKwkJCQkJcGNpX3N0YXRlKHN0YXRlKSwgcmV0dmFsKTsKKwkJCSh2b2lkKSB1c2JfaGNkX3BjaV9yZXN1bWUgKGRldik7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZGJnIChoY2QtPnNlbGYuY29udHJvbGxlciwgImhjZCBzdGF0ZSAlZDsgbm90IHN1c3BlbmRlZFxuIiwKKwkJCWhjZC0+c3RhdGUpOworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwkvKiB1cGRhdGUgcG93ZXJfc3RhdGUgKipPTkxZKiogdG8gbWFrZSBzeXNmcyBoYXBwaWVyICovCisJaWYgKHJldHZhbCA9PSAwKQorCQlkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOworCXJldHVybiByZXR2YWw7Cit9CitFWFBPUlRfU1lNQk9MICh1c2JfaGNkX3BjaV9zdXNwZW5kKTsKKworLyoqCisgKiB1c2JfaGNkX3BjaV9yZXN1bWUgLSBwb3dlciBtYW5hZ2VtZW50IHJlc3VtZSBvZiBhIFBDSS1iYXNlZCBIQ0QKKyAqIEBkZXY6IFVTQiBIb3N0IENvbnRyb2xsZXIgYmVpbmcgcmVzdW1lZAorICoKKyAqIFN0b3JlIHRoaXMgZnVuY3Rpb24gaW4gdGhlIEhDRCdzIHN0cnVjdCBwY2lfZHJpdmVyIGFzIHJlc3VtZSgpLgorICovCitpbnQgdXNiX2hjZF9wY2lfcmVzdW1lIChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCWludAkJCXJldHZhbDsKKwlpbnQJCQloYXNfcGNpX3BtOworCisJaGNkID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJaWYgKGhjZC0+c3RhdGUgIT0gSENfU1RBVEVfU1VTUEVOREVEKSB7CisJCWRldl9kYmcgKGhjZC0+c2VsZi5jb250cm9sbGVyLCAKKwkJCQkiY2FuJ3QgcmVzdW1lLCBub3Qgc3VzcGVuZGVkIVxuIik7CisJCXJldHVybiAwOworCX0KKwloYXNfcGNpX3BtID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfUE0pOworCisJLyogRDNjb2xkIHJlc3VtZSBpc24ndCB1c3VhbGx5IHJlcG9ydGVkIHRoaXMgd2F5Li4uICovCisJZGV2X2RiZyhoY2QtPnNlbGYuY29udHJvbGxlciwgInJlc3VtZSBmcm9tIFBDSSAlcyVzXG4iLAorCQkJcGNpX3N0YXRlKGRldi0+Y3VycmVudF9zdGF0ZSksCisJCQloYXNfcGNpX3BtID8gIiIgOiAiIChsZWdhY3kpIik7CisKKwloY2QtPnN0YXRlID0gSENfU1RBVEVfUkVTVU1JTkc7CisKKwlpZiAoaGFzX3BjaV9wbSkKKwkJcGNpX3NldF9wb3dlcl9zdGF0ZSAoZGV2LCAwKTsKKwlkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IDA7CisJcmV0dmFsID0gcmVxdWVzdF9pcnEgKGRldi0+aXJxLCB1c2JfaGNkX2lycSwgU0FfU0hJUlEsCisJCQkJaGNkLT5kcml2ZXItPmRlc2NyaXB0aW9uLCBoY2QpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRldl9lcnIgKGhjZC0+c2VsZi5jb250cm9sbGVyLAorCQkJImNhbid0IHJlc3RvcmUgSVJRIGFmdGVyIHJlc3VtZSFcbiIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwloY2QtPnNhd19pcnEgPSAwOworCXBjaV9yZXN0b3JlX3N0YXRlIChkZXYpOworI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAorCXBjaV9lbmFibGVfd2FrZSAoZGV2LCBkZXYtPmN1cnJlbnRfc3RhdGUsIDApOworCXBjaV9lbmFibGVfd2FrZSAoZGV2LCA0LCAwKTsKKyNlbmRpZgorCisJcmV0dmFsID0gaGNkLT5kcml2ZXItPnJlc3VtZSAoaGNkKTsKKwlpZiAoIUhDX0lTX1JVTk5JTkcgKGhjZC0+c3RhdGUpKSB7CisJCWRldl9kYmcgKGhjZC0+c2VsZi5jb250cm9sbGVyLCAKKwkJCQkicmVzdW1lIGZhaWwsIHJldHZhbCAlZFxuIiwgcmV0dmFsKTsKKwkJdXNiX2hjX2RpZWQgKGhjZCk7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KK0VYUE9SVF9TWU1CT0wgKHVzYl9oY2RfcGNpX3Jlc3VtZSk7CisKKyNlbmRpZgkvKiBDT05GSUdfUE0gKi8KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjZlOWUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwpAQCAtMCwwICsxLDE4NDAgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IExpbnVzIFRvcnZhbGRzIDE5OTkKKyAqIChDKSBDb3B5cmlnaHQgSm9oYW5uZXMgRXJkZmVsdCAxOTk5LTIwMDEKKyAqIChDKSBDb3B5cmlnaHQgQW5kcmVhcyBHYWwgMTk5OQorICogKEMpIENvcHlyaWdodCBHcmVnb3J5IFAuIFNtaXRoIDE5OTkKKyAqIChDKSBDb3B5cmlnaHQgRGV0aSBGbGllZ2wgMTk5OQorICogKEMpIENvcHlyaWdodCBSYW5keSBEdW5sYXAgMjAwMAorICogKEMpIENvcHlyaWdodCBEYXZpZCBCcm93bmVsbCAyMDAwLTIwMDIKKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworI2RlZmluZSBERUJVRworI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgImhjZC5oIgorI2luY2x1ZGUgImh1Yi5oIgorCisKKy8vICNkZWZpbmUgVVNCX0JBTkRXSURUSF9NRVNTQUdFUworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXIgZnJhbWV3b3JrCisgKgorICogUGx1Z3MgaW50byB1c2Jjb3JlICh1c2JfYnVzKSBhbmQgbGV0cyBIQ0RzIHNoYXJlIGNvZGUsIG1pbmltaXppbmcKKyAqIEhDRC1zcGVjaWZpYyBiZWhhdmlvcnMvYnVncy4KKyAqCisgKiBUaGlzIGRvZXMgZXJyb3IgY2hlY2tzLCB0cmFja3MgZGV2aWNlcyBhbmQgdXJicywgYW5kIGRlbGVnYXRlcyB0byBhCisgKiAiaGNfZHJpdmVyIiBvbmx5IGZvciBjb2RlIChhbmQgZGF0YSkgdGhhdCByZWFsbHkgbmVlZHMgdG8ga25vdyBhYm91dAorICogaGFyZHdhcmUgZGlmZmVyZW5jZXMuICBUaGF0IGluY2x1ZGVzIHJvb3QgaHViIHJlZ2lzdGVycywgaS9vIHF1ZXVlcywKKyAqIGFuZCBzbyBvbiAuLi4gYnV0IGFzIGxpdHRsZSBlbHNlIGFzIHBvc3NpYmxlLgorICoKKyAqIFNoYXJlZCBjb2RlIGluY2x1ZGVzIG1vc3Qgb2YgdGhlICJyb290IGh1YiIgY29kZSAodGhlc2UgYXJlIGVtdWxhdGVkLAorICogdGhvdWdoIGVhY2ggSEMncyBoYXJkd2FyZSB3b3JrcyBkaWZmZXJlbnRseSkgYW5kIFBDSSBnbHVlLCBwbHVzIHJlcXVlc3QKKyAqIHRyYWNraW5nIG92ZXJoZWFkLiAgVGhlIEhDRCBjb2RlIHNob3VsZCBvbmx5IGJsb2NrIG9uIHNwaW5sb2NrcyBvciBvbgorICogaGFyZHdhcmUgaGFuZHNoYWtpbmc7IGJsb2NraW5nIG9uIHNvZnR3YXJlIGV2ZW50cyAoc3VjaCBhcyBvdGhlciBrZXJuZWwKKyAqIHRocmVhZHMgcmVsZWFzaW5nIHJlc291cmNlcywgb3IgY29tcGxldGluZyBhY3Rpb25zKSBpcyBhbGwgZ2VuZXJpYy4KKyAqCisgKiBIYXBwZW5zIHRoZSBVU0IgMi4wIHNwZWMgc2F5cyB0aGlzIHdvdWxkIGJlIGludmlzaWJsZSBpbnNpZGUgdGhlICJVU0JEIiwKKyAqIGFuZCBpbmNsdWRlcyBtb3N0bHkgYSAiSENESSIgKEhDRCBJbnRlcmZhY2UpIGFsb25nIHdpdGggc29tZSBBUElzIHVzZWQKKyAqIG9ubHkgYnkgdGhlIGh1YiBkcml2ZXIgLi4uIGFuZCB0aGF0IG5laXRoZXIgc2hvdWxkIGJlIHNlZW4gb3IgdXNlZCBieQorICogdXNiIGNsaWVudCBkZXZpY2UgZHJpdmVycy4KKyAqCisgKiBDb250cmlidXRvcnMgb2YgaWRlYXMgb3IgdW5hdHRyaWJ1dGVkIHBhdGNoZXMgaW5jbHVkZTogRGF2aWQgQnJvd25lbGwsCisgKiBSb21hbiBXZWlzc2dhZXJiZXIsIFJvcnkgQm9sdCwgR3JlZyBLcm9haC1IYXJ0bWFuLCAuLi4KKyAqCisgKiBISVNUT1JZOgorICogMjAwMi0wMi0yMQlQdWxsIGluIG1vc3Qgb2YgdGhlIHVzYl9idXMgc3VwcG9ydCBmcm9tIHVzYi5jOyBzb21lCisgKgkJYXNzb2NpYXRlZCBjbGVhbnVwLiAgInVzYl9oY2QiIHN0aWxsICE9ICJ1c2JfYnVzIi4KKyAqIDIwMDEtMTItMTIJSW5pdGlhbCBwYXRjaCB2ZXJzaW9uIGZvciBMaW51eCAyLjUuMSBrZXJuZWwuCisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogaG9zdCBjb250cm9sbGVycyB3ZSBtYW5hZ2UgKi8KK0xJU1RfSEVBRCAodXNiX2J1c19saXN0KTsKK0VYUE9SVF9TWU1CT0xfR1BMICh1c2JfYnVzX2xpc3QpOworCisvKiB1c2VkIHdoZW4gYWxsb2NhdGluZyBidXMgbnVtYmVycyAqLworI2RlZmluZSBVU0JfTUFYQlVTCQk2NAorc3RydWN0IHVzYl9idXNtYXAgeworCXVuc2lnbmVkIGxvbmcgYnVzbWFwIFtVU0JfTUFYQlVTIC8gKDgqc2l6ZW9mICh1bnNpZ25lZCBsb25nKSldOworfTsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2J1c21hcCBidXNtYXA7CisKKy8qIHVzZWQgd2hlbiB1cGRhdGluZyBsaXN0IG9mIGhjZHMgKi8KK0RFQ0xBUkVfTVVURVggKHVzYl9idXNfbGlzdF9sb2NrKTsJLyogZXhwb3J0ZWQgb25seSBmb3IgdXNiZnMgKi8KK0VYUE9SVF9TWU1CT0xfR1BMICh1c2JfYnVzX2xpc3RfbG9jayk7CisKKy8qIHVzZWQgZm9yIGNvbnRyb2xsaW5nIGFjY2VzcyB0byB2aXJ0dWFsIHJvb3QgaHVicyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhoY2Rfcm9vdF9odWJfbG9jayk7CisKKy8qIHVzZWQgd2hlbiB1cGRhdGluZyBoY2QgZGF0YSAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhoY2RfZGF0YV9sb2NrKTsKKworLyogd2FpdCBxdWV1ZSBmb3Igc3luY2hyb25vdXMgdW5saW5rcyAqLworREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQodXNiX2tpbGxfdXJiX3F1ZXVlKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFNoYXJhYmxlIGNodW5rcyBvZiByb290IGh1YiBjb2RlLgorICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgS0VSTkVMX1JFTAkoKExJTlVYX1ZFUlNJT05fQ09ERSA+PiAxNikgJiAweDBmZikKKyNkZWZpbmUgS0VSTkVMX1ZFUgkoKExJTlVYX1ZFUlNJT05fQ09ERSA+PiA4KSAmIDB4MGZmKQorCisvKiB1c2IgMi4wIHJvb3QgaHViIGRldmljZSBkZXNjcmlwdG9yICovCitzdGF0aWMgY29uc3QgdTggdXNiMl9yaF9kZXZfZGVzY3JpcHRvciBbMThdID0geworCTB4MTIsICAgICAgIC8qICBfX3U4ICBiTGVuZ3RoOyAqLworCTB4MDEsICAgICAgIC8qICBfX3U4ICBiRGVzY3JpcHRvclR5cGU7IERldmljZSAqLworCTB4MDAsIDB4MDIsIC8qICBfX2xlMTYgYmNkVVNCOyB2Mi4wICovCisKKwkweDA5LAkgICAgLyogIF9fdTggIGJEZXZpY2VDbGFzczsgSFVCX0NMQVNTQ09ERSAqLworCTB4MDAsCSAgICAvKiAgX191OCAgYkRldmljZVN1YkNsYXNzOyAqLworCTB4MDEsICAgICAgIC8qICBfX3U4ICBiRGV2aWNlUHJvdG9jb2w7IFsgdXNiIDIuMCBzaW5nbGUgVFQgXSovCisJMHgwOCwgICAgICAgLyogIF9fdTggIGJNYXhQYWNrZXRTaXplMDsgOCBCeXRlcyAqLworCisJMHgwMCwgMHgwMCwgLyogIF9fbGUxNiBpZFZlbmRvcjsgKi8KKyAJMHgwMCwgMHgwMCwgLyogIF9fbGUxNiBpZFByb2R1Y3Q7ICovCisJS0VSTkVMX1ZFUiwgS0VSTkVMX1JFTCwgLyogIF9fbGUxNiBiY2REZXZpY2UgKi8KKworCTB4MDMsICAgICAgIC8qICBfX3U4ICBpTWFudWZhY3R1cmVyOyAqLworCTB4MDIsICAgICAgIC8qICBfX3U4ICBpUHJvZHVjdDsgKi8KKwkweDAxLCAgICAgICAvKiAgX191OCAgaVNlcmlhbE51bWJlcjsgKi8KKwkweDAxICAgICAgICAvKiAgX191OCAgYk51bUNvbmZpZ3VyYXRpb25zOyAqLworfTsKKworLyogbm8gdXNiIDIuMCByb290IGh1YiAiZGV2aWNlIHF1YWxpZmllciIgZGVzY3JpcHRvcjogb25lIHNwZWVkIG9ubHkgKi8KKworLyogdXNiIDEuMSByb290IGh1YiBkZXZpY2UgZGVzY3JpcHRvciAqLworc3RhdGljIGNvbnN0IHU4IHVzYjExX3JoX2Rldl9kZXNjcmlwdG9yIFsxOF0gPSB7CisJMHgxMiwgICAgICAgLyogIF9fdTggIGJMZW5ndGg7ICovCisJMHgwMSwgICAgICAgLyogIF9fdTggIGJEZXNjcmlwdG9yVHlwZTsgRGV2aWNlICovCisJMHgxMCwgMHgwMSwgLyogIF9fbGUxNiBiY2RVU0I7IHYxLjEgKi8KKworCTB4MDksCSAgICAvKiAgX191OCAgYkRldmljZUNsYXNzOyBIVUJfQ0xBU1NDT0RFICovCisJMHgwMCwJICAgIC8qICBfX3U4ICBiRGV2aWNlU3ViQ2xhc3M7ICovCisJMHgwMCwgICAgICAgLyogIF9fdTggIGJEZXZpY2VQcm90b2NvbDsgWyBsb3cvZnVsbCBzcGVlZHMgb25seSBdICovCisJMHgwOCwgICAgICAgLyogIF9fdTggIGJNYXhQYWNrZXRTaXplMDsgOCBCeXRlcyAqLworCisJMHgwMCwgMHgwMCwgLyogIF9fbGUxNiBpZFZlbmRvcjsgKi8KKyAJMHgwMCwgMHgwMCwgLyogIF9fbGUxNiBpZFByb2R1Y3Q7ICovCisJS0VSTkVMX1ZFUiwgS0VSTkVMX1JFTCwgLyogIF9fbGUxNiBiY2REZXZpY2UgKi8KKworCTB4MDMsICAgICAgIC8qICBfX3U4ICBpTWFudWZhY3R1cmVyOyAqLworCTB4MDIsICAgICAgIC8qICBfX3U4ICBpUHJvZHVjdDsgKi8KKwkweDAxLCAgICAgICAvKiAgX191OCAgaVNlcmlhbE51bWJlcjsgKi8KKwkweDAxICAgICAgICAvKiAgX191OCAgYk51bUNvbmZpZ3VyYXRpb25zOyAqLworfTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBDb25maWd1cmF0aW9uIGRlc2NyaXB0b3JzIGZvciBvdXIgcm9vdCBodWJzICovCisKK3N0YXRpYyBjb25zdCB1OCBmc19yaF9jb25maWdfZGVzY3JpcHRvciBbXSA9IHsKKworCS8qIG9uZSBjb25maWd1cmF0aW9uICovCisJMHgwOSwgICAgICAgLyogIF9fdTggIGJMZW5ndGg7ICovCisJMHgwMiwgICAgICAgLyogIF9fdTggIGJEZXNjcmlwdG9yVHlwZTsgQ29uZmlndXJhdGlvbiAqLworCTB4MTksIDB4MDAsIC8qICBfX2xlMTYgd1RvdGFsTGVuZ3RoOyAqLworCTB4MDEsICAgICAgIC8qICBfX3U4ICBiTnVtSW50ZXJmYWNlczsgKDEpICovCisJMHgwMSwgICAgICAgLyogIF9fdTggIGJDb25maWd1cmF0aW9uVmFsdWU7ICovCisJMHgwMCwgICAgICAgLyogIF9fdTggIGlDb25maWd1cmF0aW9uOyAqLworCTB4YzAsICAgICAgIC8qICBfX3U4ICBibUF0dHJpYnV0ZXM7IAorCQkJCSBCaXQgNzogbXVzdCBiZSBzZXQsCisJCQkJICAgICA2OiBTZWxmLXBvd2VyZWQsCisJCQkJICAgICA1OiBSZW1vdGUgd2FrZXVwLAorCQkJCSAgICAgNC4uMDogcmVzdmQgKi8KKwkweDAwLCAgICAgICAvKiAgX191OCAgTWF4UG93ZXI7ICovCisgICAgICAKKwkvKiBVU0IgMS4xOgorCSAqIFVTQiAyLjAsIHNpbmdsZSBUVCBvcmdhbml6YXRpb24gKG1hbmRhdG9yeSk6CisJICoJb25lIGludGVyZmFjZSwgcHJvdG9jb2wgMAorCSAqCisJICogVVNCIDIuMCwgbXVsdGlwbGUgVFQgb3JnYW5pemF0aW9uIChvcHRpb25hbCk6CisJICoJdHdvIGludGVyZmFjZXMsIHByb3RvY29scyAxIChsaWtlIHNpbmdsZSBUVCkKKwkgKglhbmQgMiAobXVsdGlwbGUgVFQgbW9kZSkgLi4uIGNvbmZpZyBpcworCSAqCXNvbWV0aW1lcyBzZXR0YWJsZQorCSAqCU5PVCBJTVBMRU1FTlRFRAorCSAqLworCisJLyogb25lIGludGVyZmFjZSAqLworCTB4MDksICAgICAgIC8qICBfX3U4ICBpZl9iTGVuZ3RoOyAqLworCTB4MDQsICAgICAgIC8qICBfX3U4ICBpZl9iRGVzY3JpcHRvclR5cGU7IEludGVyZmFjZSAqLworCTB4MDAsICAgICAgIC8qICBfX3U4ICBpZl9iSW50ZXJmYWNlTnVtYmVyOyAqLworCTB4MDAsICAgICAgIC8qICBfX3U4ICBpZl9iQWx0ZXJuYXRlU2V0dGluZzsgKi8KKwkweDAxLCAgICAgICAvKiAgX191OCAgaWZfYk51bUVuZHBvaW50czsgKi8KKwkweDA5LCAgICAgICAvKiAgX191OCAgaWZfYkludGVyZmFjZUNsYXNzOyBIVUJfQ0xBU1NDT0RFICovCisJMHgwMCwgICAgICAgLyogIF9fdTggIGlmX2JJbnRlcmZhY2VTdWJDbGFzczsgKi8KKwkweDAwLCAgICAgICAvKiAgX191OCAgaWZfYkludGVyZmFjZVByb3RvY29sOyBbdXNiMS4xIG9yIHNpbmdsZSB0dF0gKi8KKwkweDAwLCAgICAgICAvKiAgX191OCAgaWZfaUludGVyZmFjZTsgKi8KKyAgICAgCisJLyogb25lIGVuZHBvaW50IChzdGF0dXMgY2hhbmdlIGVuZHBvaW50KSAqLworCTB4MDcsICAgICAgIC8qICBfX3U4ICBlcF9iTGVuZ3RoOyAqLworCTB4MDUsICAgICAgIC8qICBfX3U4ICBlcF9iRGVzY3JpcHRvclR5cGU7IEVuZHBvaW50ICovCisJMHg4MSwgICAgICAgLyogIF9fdTggIGVwX2JFbmRwb2ludEFkZHJlc3M7IElOIEVuZHBvaW50IDEgKi8KKyAJMHgwMywgICAgICAgLyogIF9fdTggIGVwX2JtQXR0cmlidXRlczsgSW50ZXJydXB0ICovCisgCTB4MDIsIDB4MDAsIC8qICBfX2xlMTYgZXBfd01heFBhY2tldFNpemU7IDEgKyAoTUFYX1JPT1RfUE9SVFMgLyA4KSAqLworCTB4ZmYgICAgICAgIC8qICBfX3U4ICBlcF9iSW50ZXJ2YWw7ICgyNTVtcyAtLSB1c2IgMi4wIHNwZWMpICovCit9OworCitzdGF0aWMgY29uc3QgdTggaHNfcmhfY29uZmlnX2Rlc2NyaXB0b3IgW10gPSB7CisKKwkvKiBvbmUgY29uZmlndXJhdGlvbiAqLworCTB4MDksICAgICAgIC8qICBfX3U4ICBiTGVuZ3RoOyAqLworCTB4MDIsICAgICAgIC8qICBfX3U4ICBiRGVzY3JpcHRvclR5cGU7IENvbmZpZ3VyYXRpb24gKi8KKwkweDE5LCAweDAwLCAvKiAgX19sZTE2IHdUb3RhbExlbmd0aDsgKi8KKwkweDAxLCAgICAgICAvKiAgX191OCAgYk51bUludGVyZmFjZXM7ICgxKSAqLworCTB4MDEsICAgICAgIC8qICBfX3U4ICBiQ29uZmlndXJhdGlvblZhbHVlOyAqLworCTB4MDAsICAgICAgIC8qICBfX3U4ICBpQ29uZmlndXJhdGlvbjsgKi8KKwkweGMwLCAgICAgICAvKiAgX191OCAgYm1BdHRyaWJ1dGVzOyAKKwkJCQkgQml0IDc6IG11c3QgYmUgc2V0LAorCQkJCSAgICAgNjogU2VsZi1wb3dlcmVkLAorCQkJCSAgICAgNTogUmVtb3RlIHdha2V1cCwKKwkJCQkgICAgIDQuLjA6IHJlc3ZkICovCisJMHgwMCwgICAgICAgLyogIF9fdTggIE1heFBvd2VyOyAqLworICAgICAgCisJLyogVVNCIDEuMToKKwkgKiBVU0IgMi4wLCBzaW5nbGUgVFQgb3JnYW5pemF0aW9uIChtYW5kYXRvcnkpOgorCSAqCW9uZSBpbnRlcmZhY2UsIHByb3RvY29sIDAKKwkgKgorCSAqIFVTQiAyLjAsIG11bHRpcGxlIFRUIG9yZ2FuaXphdGlvbiAob3B0aW9uYWwpOgorCSAqCXR3byBpbnRlcmZhY2VzLCBwcm90b2NvbHMgMSAobGlrZSBzaW5nbGUgVFQpCisJICoJYW5kIDIgKG11bHRpcGxlIFRUIG1vZGUpIC4uLiBjb25maWcgaXMKKwkgKglzb21ldGltZXMgc2V0dGFibGUKKwkgKglOT1QgSU1QTEVNRU5URUQKKwkgKi8KKworCS8qIG9uZSBpbnRlcmZhY2UgKi8KKwkweDA5LCAgICAgICAvKiAgX191OCAgaWZfYkxlbmd0aDsgKi8KKwkweDA0LCAgICAgICAvKiAgX191OCAgaWZfYkRlc2NyaXB0b3JUeXBlOyBJbnRlcmZhY2UgKi8KKwkweDAwLCAgICAgICAvKiAgX191OCAgaWZfYkludGVyZmFjZU51bWJlcjsgKi8KKwkweDAwLCAgICAgICAvKiAgX191OCAgaWZfYkFsdGVybmF0ZVNldHRpbmc7ICovCisJMHgwMSwgICAgICAgLyogIF9fdTggIGlmX2JOdW1FbmRwb2ludHM7ICovCisJMHgwOSwgICAgICAgLyogIF9fdTggIGlmX2JJbnRlcmZhY2VDbGFzczsgSFVCX0NMQVNTQ09ERSAqLworCTB4MDAsICAgICAgIC8qICBfX3U4ICBpZl9iSW50ZXJmYWNlU3ViQ2xhc3M7ICovCisJMHgwMCwgICAgICAgLyogIF9fdTggIGlmX2JJbnRlcmZhY2VQcm90b2NvbDsgW3VzYjEuMSBvciBzaW5nbGUgdHRdICovCisJMHgwMCwgICAgICAgLyogIF9fdTggIGlmX2lJbnRlcmZhY2U7ICovCisgICAgIAorCS8qIG9uZSBlbmRwb2ludCAoc3RhdHVzIGNoYW5nZSBlbmRwb2ludCkgKi8KKwkweDA3LCAgICAgICAvKiAgX191OCAgZXBfYkxlbmd0aDsgKi8KKwkweDA1LCAgICAgICAvKiAgX191OCAgZXBfYkRlc2NyaXB0b3JUeXBlOyBFbmRwb2ludCAqLworCTB4ODEsICAgICAgIC8qICBfX3U4ICBlcF9iRW5kcG9pbnRBZGRyZXNzOyBJTiBFbmRwb2ludCAxICovCisgCTB4MDMsICAgICAgIC8qICBfX3U4ICBlcF9ibUF0dHJpYnV0ZXM7IEludGVycnVwdCAqLworIAkweDAyLCAweDAwLCAvKiAgX19sZTE2IGVwX3dNYXhQYWNrZXRTaXplOyAxICsgKE1BWF9ST09UX1BPUlRTIC8gOCkgKi8KKwkweDBjICAgICAgICAvKiAgX191OCAgZXBfYkludGVydmFsOyAoMjU2bXMgLS0gdXNiIDIuMCBzcGVjKSAqLworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIGhlbHBlciByb3V0aW5lIGZvciByZXR1cm5pbmcgc3RyaW5nIGRlc2NyaXB0b3JzIGluIFVURi0xNkxFCisgKiBpbnB1dCBjYW4gYWN0dWFsbHkgYmUgSVNPLTg4NTktMTsgQVNDSUkgaXMgaXRzIDctYml0IHN1YnNldAorICovCitzdGF0aWMgaW50IGFzY2lpMnV0ZiAoY2hhciAqcywgdTggKnV0ZiwgaW50IHV0Zm1heCkKK3sKKwlpbnQgcmV0dmFsOworCisJZm9yIChyZXR2YWwgPSAwOyAqcyAmJiB1dGZtYXggPiAxOyB1dGZtYXggLT0gMiwgcmV0dmFsICs9IDIpIHsKKwkJKnV0ZisrID0gKnMrKzsKKwkJKnV0ZisrID0gMDsKKwl9CisJaWYgKHV0Zm1heCA+IDApIHsKKwkJKnV0ZiA9ICpzOworCQkrK3JldHZhbDsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIHJoX3N0cmluZyAtIHByb3ZpZGVzIG1hbnVmYWN0dXJlciwgcHJvZHVjdCBhbmQgc2VyaWFsIHN0cmluZ3MgZm9yIHJvb3QgaHViCisgKiBAaWQ6IHRoZSBzdHJpbmcgSUQgbnVtYmVyICgxOiBzZXJpYWwgbnVtYmVyLCAyOiBwcm9kdWN0LCAzOiB2ZW5kb3IpCisgKiBAaGNkOiB0aGUgaG9zdCBjb250cm9sbGVyIGZvciB0aGlzIHJvb3QgaHViCisgKiBAdHlwZTogc3RyaW5nIGRlc2NyaWJpbmcgb3VyIGRyaXZlciAKKyAqIEBkYXRhOiByZXR1cm4gcGFja2V0IGluIFVURi0xNiBMRQorICogQGxlbjogbGVuZ3RoIG9mIHRoZSByZXR1cm4gcGFja2V0CisgKgorICogUHJvZHVjZXMgZWl0aGVyIGEgbWFudWZhY3R1cmVyLCBwcm9kdWN0IG9yIHNlcmlhbCBudW1iZXIgc3RyaW5nIGZvciB0aGUKKyAqIHZpcnR1YWwgcm9vdCBodWIgZGV2aWNlLgorICovCitzdGF0aWMgaW50IHJoX3N0cmluZyAoCisJaW50CQlpZCwKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkLAorCXU4CQkqZGF0YSwKKwlpbnQJCWxlbgorKSB7CisJY2hhciBidWYgWzEwMF07CisKKwkvLyBsYW5ndWFnZSBpZHMKKwlpZiAoaWQgPT0gMCkgeworCQlidWZbMF0gPSA0OyAgICBidWZbMV0gPSAzOwkvKiA0IGJ5dGVzIHN0cmluZyBkYXRhICovCisJCWJ1ZlsyXSA9IDB4MDk7IGJ1ZlszXSA9IDB4MDQ7CS8qIE1TRlQtc3BlYWsgZm9yICJlbi11cyIgKi8KKwkJbGVuID0gbWluIChsZW4sIDQpOworCQltZW1jcHkgKGRhdGEsIGJ1ZiwgbGVuKTsKKwkJcmV0dXJuIGxlbjsKKworCS8vIHNlcmlhbCBudW1iZXIKKwl9IGVsc2UgaWYgKGlkID09IDEpIHsKKwkJc3RybGNweSAoYnVmLCBoY2QtPnNlbGYuYnVzX25hbWUsIHNpemVvZiBidWYpOworCisJLy8gcHJvZHVjdCBkZXNjcmlwdGlvbgorCX0gZWxzZSBpZiAoaWQgPT0gMikgeworCQlzdHJsY3B5IChidWYsIGhjZC0+cHJvZHVjdF9kZXNjLCBzaXplb2YgYnVmKTsKKworIAkvLyBpZCAzID09IHZlbmRvciBkZXNjcmlwdGlvbgorCX0gZWxzZSBpZiAoaWQgPT0gMykgeworCQlzbnByaW50ZiAoYnVmLCBzaXplb2YgYnVmLCAiJXMgJXMgJXMiLCBzeXN0ZW1fdXRzbmFtZS5zeXNuYW1lLAorCQkJc3lzdGVtX3V0c25hbWUucmVsZWFzZSwgaGNkLT5kcml2ZXItPmRlc2NyaXB0aW9uKTsKKworCS8vIHVuc3VwcG9ydGVkIElEcyAtLT4gInByb3RvY29sIHN0YWxsIgorCX0gZWxzZQorCQlyZXR1cm4gLUVQSVBFOworCisJc3dpdGNoIChsZW4pIHsJCS8qIEFsbCBjYXNlcyBmYWxsIHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQlsZW4gPSAyICsgYXNjaWkydXRmIChidWYsIGRhdGEgKyAyLCBsZW4gLSAyKTsKKwljYXNlIDI6CisJCWRhdGEgWzFdID0gMzsJLyogdHlwZSA9PSBzdHJpbmcgKi8KKwljYXNlIDE6CisJCWRhdGEgWzBdID0gMiAqIChzdHJsZW4gKGJ1ZikgKyAxKTsKKwljYXNlIDA6CisJCTsJCS8qIENvbXBpbGVyIHdhbnRzIGEgc3RhdGVtZW50IGhlcmUgKi8KKwl9CisJcmV0dXJuIGxlbjsKK30KKworCisvKiBSb290IGh1YiBjb250cm9sIHRyYW5zZmVycyBleGVjdXRlIHN5bmNocm9ub3VzbHkgKi8KK3N0YXRpYyBpbnQgcmhfY2FsbF9jb250cm9sIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY21kOworIAl1MTYJCXR5cGVSZXEsIHdWYWx1ZSwgd0luZGV4LCB3TGVuZ3RoOworCXU4CQkqdWJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXU4CQl0YnVmIFtzaXplb2YgKHN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IpXTsKKwljb25zdCB1OAkqYnVmcCA9IHRidWY7CisJaW50CQlsZW4gPSAwOworCWludAkJcGF0Y2hfd2FrZXVwID0gMDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCWludAkJc3RhdHVzID0gMDsKKwlpbnQJCW47CisKKwljbWQgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKKwl0eXBlUmVxICA9IChjbWQtPmJSZXF1ZXN0VHlwZSA8PCA4KSB8IGNtZC0+YlJlcXVlc3Q7CisJd1ZhbHVlICAgPSBsZTE2X3RvX2NwdSAoY21kLT53VmFsdWUpOworCXdJbmRleCAgID0gbGUxNl90b19jcHUgKGNtZC0+d0luZGV4KTsKKwl3TGVuZ3RoICA9IGxlMTZfdG9fY3B1IChjbWQtPndMZW5ndGgpOworCisJaWYgKHdMZW5ndGggPiB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpCisJCWdvdG8gZXJyb3I7CisKKwl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCXN3aXRjaCAodHlwZVJlcSkgeworCisJLyogREVWSUNFIFJFUVVFU1RTICovCisKKwljYXNlIERldmljZVJlcXVlc3QgfCBVU0JfUkVRX0dFVF9TVEFUVVM6CisJCXRidWYgWzBdID0gKGhjZC0+cmVtb3RlX3dha2V1cCA8PCBVU0JfREVWSUNFX1JFTU9URV9XQUtFVVApCisJCQkJfCAoMSA8PCBVU0JfREVWSUNFX1NFTEZfUE9XRVJFRCk7CisJCXRidWYgWzFdID0gMDsKKwkJbGVuID0gMjsKKwkJYnJlYWs7CisJY2FzZSBEZXZpY2VPdXRSZXF1ZXN0IHwgVVNCX1JFUV9DTEVBUl9GRUFUVVJFOgorCQlpZiAod1ZhbHVlID09IFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCkKKwkJCWhjZC0+cmVtb3RlX3dha2V1cCA9IDA7CisJCWVsc2UKKwkJCWdvdG8gZXJyb3I7CisJCWJyZWFrOworCWNhc2UgRGV2aWNlT3V0UmVxdWVzdCB8IFVTQl9SRVFfU0VUX0ZFQVRVUkU6CisJCWlmIChoY2QtPmNhbl93YWtldXAgJiYgd1ZhbHVlID09IFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCkKKwkJCWhjZC0+cmVtb3RlX3dha2V1cCA9IDE7CisJCWVsc2UKKwkJCWdvdG8gZXJyb3I7CisJCWJyZWFrOworCWNhc2UgRGV2aWNlUmVxdWVzdCB8IFVTQl9SRVFfR0VUX0NPTkZJR1VSQVRJT046CisJCXRidWYgWzBdID0gMTsKKwkJbGVuID0gMTsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBEZXZpY2VPdXRSZXF1ZXN0IHwgVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTjoKKwkJYnJlYWs7CisJY2FzZSBEZXZpY2VSZXF1ZXN0IHwgVVNCX1JFUV9HRVRfREVTQ1JJUFRPUjoKKwkJc3dpdGNoICh3VmFsdWUgJiAweGZmMDApIHsKKwkJY2FzZSBVU0JfRFRfREVWSUNFIDw8IDg6CisJCQlpZiAoaGNkLT5kcml2ZXItPmZsYWdzICYgSENEX1VTQjIpCisJCQkJYnVmcCA9IHVzYjJfcmhfZGV2X2Rlc2NyaXB0b3I7CisJCQllbHNlIGlmIChoY2QtPmRyaXZlci0+ZmxhZ3MgJiBIQ0RfVVNCMTEpCisJCQkJYnVmcCA9IHVzYjExX3JoX2Rldl9kZXNjcmlwdG9yOworCQkJZWxzZQorCQkJCWdvdG8gZXJyb3I7CisJCQlsZW4gPSAxODsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9EVF9DT05GSUcgPDwgODoKKwkJCWlmIChoY2QtPmRyaXZlci0+ZmxhZ3MgJiBIQ0RfVVNCMikgeworCQkJCWJ1ZnAgPSBoc19yaF9jb25maWdfZGVzY3JpcHRvcjsKKwkJCQlsZW4gPSBzaXplb2YgaHNfcmhfY29uZmlnX2Rlc2NyaXB0b3I7CisJCQl9IGVsc2UgeworCQkJCWJ1ZnAgPSBmc19yaF9jb25maWdfZGVzY3JpcHRvcjsKKwkJCQlsZW4gPSBzaXplb2YgZnNfcmhfY29uZmlnX2Rlc2NyaXB0b3I7CisJCQl9CisJCQlpZiAoaGNkLT5jYW5fd2FrZXVwKQorCQkJCXBhdGNoX3dha2V1cCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfRFRfU1RSSU5HIDw8IDg6CisJCQluID0gcmhfc3RyaW5nICh3VmFsdWUgJiAweGZmLCBoY2QsIHVidWYsIHdMZW5ndGgpOworCQkJaWYgKG4gPCAwKQorCQkJCWdvdG8gZXJyb3I7CisJCQl1cmItPmFjdHVhbF9sZW5ndGggPSBuOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQl9CisJCWJyZWFrOworCWNhc2UgRGV2aWNlUmVxdWVzdCB8IFVTQl9SRVFfR0VUX0lOVEVSRkFDRToKKwkJdGJ1ZiBbMF0gPSAwOworCQlsZW4gPSAxOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIERldmljZU91dFJlcXVlc3QgfCBVU0JfUkVRX1NFVF9JTlRFUkZBQ0U6CisJCWJyZWFrOworCWNhc2UgRGV2aWNlT3V0UmVxdWVzdCB8IFVTQl9SRVFfU0VUX0FERFJFU1M6CisJCS8vIHdWYWx1ZSA9PSB1cmItPmRldi0+ZGV2YWRkcgorCQlkZXZfZGJnIChoY2QtPnNlbGYuY29udHJvbGxlciwgInJvb3QgaHViIGRldmljZSBhZGRyZXNzICVkXG4iLAorCQkJd1ZhbHVlKTsKKwkJYnJlYWs7CisKKwkvKiBJTlRFUkZBQ0UgUkVRVUVTVFMgKG5vIGRlZmluZWQgZmVhdHVyZS9zdGF0dXMgZmxhZ3MpICovCisKKwkvKiBFTkRQT0lOVCBSRVFVRVNUUyAqLworCisJY2FzZSBFbmRwb2ludFJlcXVlc3QgfCBVU0JfUkVRX0dFVF9TVEFUVVM6CisJCS8vIEVORFBPSU5UX0hBTFQgZmxhZworCQl0YnVmIFswXSA9IDA7CisJCXRidWYgWzFdID0gMDsKKwkJbGVuID0gMjsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBFbmRwb2ludE91dFJlcXVlc3QgfCBVU0JfUkVRX0NMRUFSX0ZFQVRVUkU6CisJY2FzZSBFbmRwb2ludE91dFJlcXVlc3QgfCBVU0JfUkVRX1NFVF9GRUFUVVJFOgorCQlkZXZfZGJnIChoY2QtPnNlbGYuY29udHJvbGxlciwgIm5vIGVuZHBvaW50IGZlYXR1cmVzIHlldFxuIik7CisJCWJyZWFrOworCisJLyogQ0xBU1MgUkVRVUVTVFMgKGFuZCBlcnJvcnMpICovCisKKwlkZWZhdWx0OgorCQkvKiBub24tZ2VuZXJpYyByZXF1ZXN0ICovCisJCWlmIChIQ19JU19TVVNQRU5ERUQgKGhjZC0+c3RhdGUpKQorCQkJc3RhdHVzID0gLUVBR0FJTjsKKwkJZWxzZSB7CisJCQlzd2l0Y2ggKHR5cGVSZXEpIHsKKwkJCWNhc2UgR2V0SHViU3RhdHVzOgorCQkJY2FzZSBHZXRQb3J0U3RhdHVzOgorCQkJCWxlbiA9IDQ7CisJCQkJYnJlYWs7CisJCQljYXNlIEdldEh1YkRlc2NyaXB0b3I6CisJCQkJbGVuID0gc2l6ZW9mIChzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXN0YXR1cyA9IGhjZC0+ZHJpdmVyLT5odWJfY29udHJvbCAoaGNkLAorCQkJCXR5cGVSZXEsIHdWYWx1ZSwgd0luZGV4LAorCQkJCXRidWYsIHdMZW5ndGgpOworCQl9CisJCWJyZWFrOworZXJyb3I6CisJCS8qICJwcm90b2NvbCBzdGFsbCIgb24gZXJyb3IgKi8KKwkJc3RhdHVzID0gLUVQSVBFOworCX0KKworCWlmIChzdGF0dXMpIHsKKwkJbGVuID0gMDsKKwkJaWYgKHN0YXR1cyAhPSAtRVBJUEUpIHsKKwkJCWRldl9kYmcgKGhjZC0+c2VsZi5jb250cm9sbGVyLAorCQkJCSJDVFJMOiBUeXBlUmVxPTB4JXggdmFsPTB4JXggIgorCQkJCSJpZHg9MHgleCBsZW49JWQgPT0+ICVkXG4iLAorCQkJCXR5cGVSZXEsIHdWYWx1ZSwgd0luZGV4LAorCQkJCXdMZW5ndGgsIHVyYi0+c3RhdHVzKTsKKwkJfQorCX0KKwlpZiAobGVuKSB7CisJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPCBsZW4pCisJCQlsZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IGxlbjsKKwkJLy8gYWx3YXlzIFVTQl9ESVJfSU4sIHRvd2FyZCBob3N0CisJCW1lbWNweSAodWJ1ZiwgYnVmcCwgbGVuKTsKKworCQkvKiByZXBvcnQgd2hldGhlciBSSCBoYXJkd2FyZSBzdXBwb3J0cyByZW1vdGUgd2FrZXVwICovCisJCWlmIChwYXRjaF93YWtldXAgJiYKKwkJCQlsZW4gPiBvZmZzZXRvZiAoc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvciwKKwkJCQkJCWJtQXR0cmlidXRlcykpCisJCQkoKHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgKil1YnVmKS0+Ym1BdHRyaWJ1dGVzCisJCQkJfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOworCX0KKworCS8qIGFueSBlcnJvcnMgZ2V0IHJldHVybmVkIHRocm91Z2ggdGhlIHVyYiBjb21wbGV0aW9uICovCisJbG9jYWxfaXJxX3NhdmUgKGZsYWdzKTsKKwlzcGluX2xvY2sgKCZ1cmItPmxvY2spOworCWlmICh1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCisJCXVyYi0+c3RhdHVzID0gc3RhdHVzOworCXNwaW5fdW5sb2NrICgmdXJiLT5sb2NrKTsKKwl1c2JfaGNkX2dpdmViYWNrX3VyYiAoaGNkLCB1cmIsIE5VTEwpOworCWxvY2FsX2lycV9yZXN0b3JlIChmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBSb290IEh1YiBpbnRlcnJ1cHQgdHJhbnNmZXJzIGFyZSBzeW50aGVzaXplZCB3aXRoIGEgdGltZXIuCisgKiBDb21wbGV0aW9ucyBhcmUgY2FsbGVkIGluX2ludGVycnVwdCgpIGJ1dCBub3QgaW5faXJxKCkuCisgKgorICogTm90ZTogc29tZSByb290IGh1YnMgKGluY2x1ZGluZyBjb21tb24gVUhDSSBiYXNlZCBkZXNpZ25zKSBjYW4ndAorICogY29ycmVjdGx5IGlzc3VlIHBvcnQgY2hhbmdlIElSUXMuICBUaGV5J3JlIHRoZSBvbmVzIHRoYXQgX25lZWRfIGEKKyAqIHRpbWVyOyBtb3N0IG90aGVyIHJvb3QgaHVicyBkb24ndC4gIFNvbWUgc3lzdGVtcyBjb3VsZCBzYXZlIGEKKyAqIGxvdCBvZiBiYXR0ZXJ5IHBvd2VyIGJ5IGVsaW1pbmF0aW5nIHRoZXNlIHJvb3QgaHViIHRpbWVyIElSUXMuCisgKi8KKworc3RhdGljIHZvaWQgcmhfcmVwb3J0X3N0YXR1cyAodW5zaWduZWQgbG9uZyBwdHIpOworCitzdGF0aWMgaW50IHJoX3N0YXR1c191cmIgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYikgCit7CisJaW50CWxlbiA9IDEgKyAodXJiLT5kZXYtPm1heGNoaWxkIC8gOCk7CisKKwkvKiByaF90aW1lciBwcm90ZWN0ZWQgYnkgaGNkX2RhdGFfbG9jayAqLworCWlmIChoY2QtPnJoX3RpbWVyLmRhdGEgfHwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIDwgbGVuKSB7CisJCWRldl9kYmcgKGhjZC0+c2VsZi5jb250cm9sbGVyLAorCQkJCSJub3QgcXVldWluZyByaCBzdGF0dXMgdXJiLCBzdGF0ICVkXG4iLAorCQkJCXVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaW5pdF90aW1lciAoJmhjZC0+cmhfdGltZXIpOworCWhjZC0+cmhfdGltZXIuZnVuY3Rpb24gPSByaF9yZXBvcnRfc3RhdHVzOworCWhjZC0+cmhfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSB1cmI7CisJLyogVVNCIDIuMCBzcGVjIHNheXMgMjU2bXNlYzsgdGhpcyBpcyBjbG9zZSBlbm91Z2ggKi8KKwloY2QtPnJoX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFovNDsKKwlhZGRfdGltZXIgKCZoY2QtPnJoX3RpbWVyKTsKKwl1cmItPmhjcHJpdiA9IGhjZDsJLyogbm9uemVybyB0byBpbmRpY2F0ZSBpdCdzIHF1ZXVlZCAqLworCXJldHVybiAwOworfQorCisvKiB0aW1lciBjYWxsYmFjayAqLworCitzdGF0aWMgdm9pZCByaF9yZXBvcnRfc3RhdHVzICh1bnNpZ25lZCBsb25nIHB0cikKK3sKKwlzdHJ1Y3QgdXJiCSp1cmI7CisJc3RydWN0IHVzYl9oY2QJKmhjZDsKKwlpbnQJCWxlbmd0aCA9IDA7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXVyYiA9IChzdHJ1Y3QgdXJiICopIHB0cjsKKwlsb2NhbF9pcnFfc2F2ZSAoZmxhZ3MpOworCXNwaW5fbG9jayAoJnVyYi0+bG9jayk7CisKKwkvKiBkbyBub3RoaW5nIGlmIHRoZSB1cmIncyBiZWVuIHVubGlua2VkICovCisJaWYgKCF1cmItPmRldgorCQkJfHwgdXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTCisJCQl8fCAoaGNkID0gdXJiLT5kZXYtPmJ1cy0+aGNwcml2KSA9PSBOVUxMKSB7CisJCXNwaW5fdW5sb2NrICgmdXJiLT5sb2NrKTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUgKGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGNvbXBsZXRlIHRoZSBzdGF0dXMgdXJiLCBvciByZXRyaWdnZXIgdGhlIHRpbWVyICovCisJc3Bpbl9sb2NrICgmaGNkX2RhdGFfbG9jayk7CisJaWYgKHVyYi0+ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfQ09ORklHVVJFRCkgeworCQlsZW5ndGggPSBoY2QtPmRyaXZlci0+aHViX3N0YXR1c19kYXRhICgKKwkJCQkJaGNkLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCWlmIChsZW5ndGggPiAwKSB7CisJCQloY2QtPnJoX3RpbWVyLmRhdGEgPSAwOworCQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gbGVuZ3RoOworCQkJdXJiLT5zdGF0dXMgPSAwOworCQkJdXJiLT5oY3ByaXYgPSBOVUxMOworCQl9IGVsc2UKKwkJCW1vZF90aW1lciAoJmhjZC0+cmhfdGltZXIsIGppZmZpZXMgKyBIWi80KTsKKwl9CisJc3Bpbl91bmxvY2sgKCZoY2RfZGF0YV9sb2NrKTsKKwlzcGluX3VubG9jayAoJnVyYi0+bG9jayk7CisKKwkvKiBsb2NhbCBpcnFzIGFyZSBhbHdheXMgYmxvY2tlZCBpbiBjb21wbGV0aW9ucyAqLworCWlmIChsZW5ndGggPiAwKQorCQl1c2JfaGNkX2dpdmViYWNrX3VyYiAoaGNkLCB1cmIsIE5VTEwpOworCWxvY2FsX2lycV9yZXN0b3JlIChmbGFncyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcmhfdXJiX2VucXVldWUgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpZiAodXNiX3BpcGVpbnQgKHVyYi0+cGlwZSkpIHsKKwkJaW50CQlyZXR2YWw7CisJCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUgKCZoY2RfZGF0YV9sb2NrLCBmbGFncyk7CisJCXJldHZhbCA9IHJoX3N0YXR1c191cmIgKGhjZCwgdXJiKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmhjZF9kYXRhX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJaWYgKHVzYl9waXBlY29udHJvbCAodXJiLT5waXBlKSkKKwkJcmV0dXJuIHJoX2NhbGxfY29udHJvbCAoaGNkLCB1cmIpOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgdXNiX3JoX3VyYl9kZXF1ZXVlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCS8qIG5vdGU6ICBhbHdheXMgYSBzeW5jaHJvbm91cyB1bmxpbmsgKi8KKwlpZiAoKHVuc2lnbmVkIGxvbmcpIHVyYiA9PSBoY2QtPnJoX3RpbWVyLmRhdGEpIHsKKwkJZGVsX3RpbWVyX3N5bmMgKCZoY2QtPnJoX3RpbWVyKTsKKwkJaGNkLT5yaF90aW1lci5kYXRhID0gMDsKKworCQlsb2NhbF9pcnFfc2F2ZSAoZmxhZ3MpOworCQl1cmItPmhjcHJpdiA9IE5VTEw7CisJCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiIChoY2QsIHVyYiwgTlVMTCk7CisJCWxvY2FsX2lycV9yZXN0b3JlIChmbGFncyk7CisKKwl9IGVsc2UgaWYgKHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSA9PSAwKSB7CisJCXNwaW5fbG9ja19pcnEoJnVyYi0+bG9jayk7CS8qIGZyb20gdXNiX2tpbGxfdXJiICovCisJCSsrdXJiLT5yZWplY3Q7CisJCXNwaW5fdW5sb2NrX2lycSgmdXJiLT5sb2NrKTsKKworCQl3YWl0X2V2ZW50KHVzYl9raWxsX3VyYl9xdWV1ZSwKKwkJCQlhdG9taWNfcmVhZCgmdXJiLT51c2VfY291bnQpID09IDApOworCisJCXNwaW5fbG9ja19pcnEoJnVyYi0+bG9jayk7CisJCS0tdXJiLT5yZWplY3Q7CisJCXNwaW5fdW5sb2NrX2lycSgmdXJiLT5sb2NrKTsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogZXhwb3J0ZWQgb25seSB3aXRoaW4gdXNiY29yZSAqLworc3RydWN0IHVzYl9idXMgKnVzYl9idXNfZ2V0IChzdHJ1Y3QgdXNiX2J1cyAqYnVzKQoreworCXN0cnVjdCBjbGFzc19kZXZpY2UgKnRtcDsKKworCWlmICghYnVzKQorCQlyZXR1cm4gTlVMTDsKKworCXRtcCA9IGNsYXNzX2RldmljZV9nZXQoJmJ1cy0+Y2xhc3NfZGV2KTsKKwlpZiAodG1wKSAgICAgICAgCisJCXJldHVybiB0b191c2JfYnVzKHRtcCk7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworLyogZXhwb3J0ZWQgb25seSB3aXRoaW4gdXNiY29yZSAqLwordm9pZCB1c2JfYnVzX3B1dCAoc3RydWN0IHVzYl9idXMgKmJ1cykKK3sKKwlpZiAoYnVzKQorCQljbGFzc19kZXZpY2VfcHV0KCZidXMtPmNsYXNzX2Rldik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHVzYl9ob3N0X3JlbGVhc2Uoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2KQoreworCXN0cnVjdCB1c2JfYnVzICpidXMgPSB0b191c2JfYnVzKGNsYXNzX2Rldik7CisKKwlpZiAoYnVzLT5yZWxlYXNlKQorCQlidXMtPnJlbGVhc2UoYnVzKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGFzcyB1c2JfaG9zdF9jbGFzcyA9IHsKKwkubmFtZQkJPSAidXNiX2hvc3QiLAorCS5yZWxlYXNlCT0gJnVzYl9ob3N0X3JlbGVhc2UsCit9OworCitpbnQgdXNiX2hvc3RfaW5pdCh2b2lkKQoreworCXJldHVybiBjbGFzc19yZWdpc3RlcigmdXNiX2hvc3RfY2xhc3MpOworfQorCit2b2lkIHVzYl9ob3N0X2NsZWFudXAodm9pZCkKK3sKKwljbGFzc191bnJlZ2lzdGVyKCZ1c2JfaG9zdF9jbGFzcyk7Cit9CisKKy8qKgorICogdXNiX2J1c19pbml0IC0gc2hhcmVkIGluaXRpYWxpemF0aW9uIGNvZGUKKyAqIEBidXM6IHRoZSBidXMgc3RydWN0dXJlIGJlaW5nIGluaXRpYWxpemVkCisgKgorICogVGhpcyBjb2RlIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIHVzYl9idXMgc3RydWN0dXJlLCBtZW1vcnkgZm9yIHdoaWNoIGlzCisgKiBzZXBhcmF0ZWx5IG1hbmFnZWQuCisgKi8KK3N0YXRpYyB2b2lkIHVzYl9idXNfaW5pdCAoc3RydWN0IHVzYl9idXMgKmJ1cykKK3sKKwltZW1zZXQgKCZidXMtPmRldm1hcCwgMCwgc2l6ZW9mKHN0cnVjdCB1c2JfZGV2bWFwKSk7CisKKwlidXMtPmRldm51bV9uZXh0ID0gMTsKKworCWJ1cy0+cm9vdF9odWIgPSBOVUxMOworCWJ1cy0+aGNwcml2ID0gTlVMTDsKKwlidXMtPmJ1c251bSA9IC0xOworCWJ1cy0+YmFuZHdpZHRoX2FsbG9jYXRlZCA9IDA7CisJYnVzLT5iYW5kd2lkdGhfaW50X3JlcXMgID0gMDsKKwlidXMtPmJhbmR3aWR0aF9pc29jX3JlcXMgPSAwOworCisJSU5JVF9MSVNUX0hFQUQgKCZidXMtPmJ1c19saXN0KTsKKworCWNsYXNzX2RldmljZV9pbml0aWFsaXplKCZidXMtPmNsYXNzX2Rldik7CisJYnVzLT5jbGFzc19kZXYuY2xhc3MgPSAmdXNiX2hvc3RfY2xhc3M7Cit9CisKKy8qKgorICogdXNiX2FsbG9jX2J1cyAtIGNyZWF0ZXMgYSBuZXcgVVNCIGhvc3QgY29udHJvbGxlciBzdHJ1Y3R1cmUKKyAqIEBvcDogcG9pbnRlciB0byBhIHN0cnVjdCB1c2Jfb3BlcmF0aW9ucyB0aGF0IHRoaXMgYnVzIHN0cnVjdHVyZSBzaG91bGQgdXNlCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBDcmVhdGVzIGEgVVNCIGhvc3QgY29udHJvbGxlciBidXMgc3RydWN0dXJlIHdpdGggdGhlIHNwZWNpZmllZCAKKyAqIHVzYl9vcGVyYXRpb25zIGFuZCBpbml0aWFsaXplcyBhbGwgdGhlIG5lY2Vzc2FyeSBpbnRlcm5hbCBvYmplY3RzLgorICoKKyAqIElmIG5vIG1lbW9yeSBpcyBhdmFpbGFibGUsIE5VTEwgaXMgcmV0dXJuZWQuCisgKgorICogVGhlIGNhbGxlciBzaG91bGQgY2FsbCB1c2JfcHV0X2J1cygpIHdoZW4gaXQgaXMgZmluaXNoZWQgd2l0aCB0aGUgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgdXNiX2J1cyAqdXNiX2FsbG9jX2J1cyAoc3RydWN0IHVzYl9vcGVyYXRpb25zICpvcCkKK3sKKwlzdHJ1Y3QgdXNiX2J1cyAqYnVzOworCisJYnVzID0ga21hbGxvYyAoc2l6ZW9mICpidXMsIEdGUF9LRVJORUwpOworCWlmICghYnVzKQorCQlyZXR1cm4gTlVMTDsKKwltZW1zZXQoYnVzLCAwLCBzaXplb2Yoc3RydWN0IHVzYl9idXMpKTsKKwl1c2JfYnVzX2luaXQgKGJ1cyk7CisJYnVzLT5vcCA9IG9wOworCXJldHVybiBidXM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogdXNiX3JlZ2lzdGVyX2J1cyAtIHJlZ2lzdGVycyB0aGUgVVNCIGhvc3QgY29udHJvbGxlciB3aXRoIHRoZSB1c2IgY29yZQorICogQGJ1czogcG9pbnRlciB0byB0aGUgYnVzIHRvIHJlZ2lzdGVyCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBBc3NpZ25zIGEgYnVzIG51bWJlciwgYW5kIGxpbmtzIHRoZSBjb250cm9sbGVyIGludG8gdXNiY29yZSBkYXRhCisgKiBzdHJ1Y3R1cmVzIHNvIHRoYXQgaXQgY2FuIGJlIHNlZW4gYnkgc2Nhbm5pbmcgdGhlIGJ1cyBsaXN0LgorICovCitzdGF0aWMgaW50IHVzYl9yZWdpc3Rlcl9idXMoc3RydWN0IHVzYl9idXMgKmJ1cykKK3sKKwlpbnQgYnVzbnVtOworCWludCByZXR2YWw7CisKKwlkb3duICgmdXNiX2J1c19saXN0X2xvY2spOworCWJ1c251bSA9IGZpbmRfbmV4dF96ZXJvX2JpdCAoYnVzbWFwLmJ1c21hcCwgVVNCX01BWEJVUywgMSk7CisJaWYgKGJ1c251bSA8IFVTQl9NQVhCVVMpIHsKKwkJc2V0X2JpdCAoYnVzbnVtLCBidXNtYXAuYnVzbWFwKTsKKwkJYnVzLT5idXNudW0gPSBidXNudW07CisJfSBlbHNlIHsKKwkJcHJpbnRrIChLRVJOX0VSUiAiJXM6IHRvbyBtYW55IGJ1c2VzXG4iLCB1c2Jjb3JlX25hbWUpOworCQl1cCgmdXNiX2J1c19saXN0X2xvY2spOworCQlyZXR1cm4gLUUyQklHOworCX0KKworCXNucHJpbnRmKGJ1cy0+Y2xhc3NfZGV2LmNsYXNzX2lkLCBCVVNfSURfU0laRSwgInVzYiVkIiwgYnVzbnVtKTsKKwlidXMtPmNsYXNzX2Rldi5kZXYgPSBidXMtPmNvbnRyb2xsZXI7CisJcmV0dmFsID0gY2xhc3NfZGV2aWNlX2FkZCgmYnVzLT5jbGFzc19kZXYpOworCWlmIChyZXR2YWwpIHsKKwkJY2xlYXJfYml0KGJ1c251bSwgYnVzbWFwLmJ1c21hcCk7CisJCXVwKCZ1c2JfYnVzX2xpc3RfbG9jayk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJLyogQWRkIGl0IHRvIHRoZSBsb2NhbCBsaXN0IG9mIGJ1c2VzICovCisJbGlzdF9hZGQgKCZidXMtPmJ1c19saXN0LCAmdXNiX2J1c19saXN0KTsKKwl1cCAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKworCXVzYmZzX2FkZF9idXMgKGJ1cyk7CisJdXNibW9uX25vdGlmeV9idXNfYWRkIChidXMpOworCisJZGV2X2luZm8gKGJ1cy0+Y29udHJvbGxlciwgIm5ldyBVU0IgYnVzIHJlZ2lzdGVyZWQsIGFzc2lnbmVkIGJ1cyBudW1iZXIgJWRcbiIsIGJ1cy0+YnVzbnVtKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB1c2JfZGVyZWdpc3Rlcl9idXMgLSBkZXJlZ2lzdGVycyB0aGUgVVNCIGhvc3QgY29udHJvbGxlcgorICogQGJ1czogcG9pbnRlciB0byB0aGUgYnVzIHRvIGRlcmVnaXN0ZXIKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIFJlY3ljbGVzIHRoZSBidXMgbnVtYmVyLCBhbmQgdW5saW5rcyB0aGUgY29udHJvbGxlciBmcm9tIHVzYmNvcmUgZGF0YQorICogc3RydWN0dXJlcyBzbyB0aGF0IGl0IHdvbid0IGJlIHNlZW4gYnkgc2Nhbm5pbmcgdGhlIGJ1cyBsaXN0LgorICovCitzdGF0aWMgdm9pZCB1c2JfZGVyZWdpc3Rlcl9idXMgKHN0cnVjdCB1c2JfYnVzICpidXMpCit7CisJZGV2X2luZm8gKGJ1cy0+Y29udHJvbGxlciwgIlVTQiBidXMgJWQgZGVyZWdpc3RlcmVkXG4iLCBidXMtPmJ1c251bSk7CisKKwkvKgorCSAqIE5PVEU6IG1ha2Ugc3VyZSB0aGF0IGFsbCB0aGUgZGV2aWNlcyBhcmUgcmVtb3ZlZCBieSB0aGUKKwkgKiBjb250cm9sbGVyIGNvZGUsIGFzIHdlbGwgYXMgaGF2aW5nIGl0IGNhbGwgdGhpcyB3aGVuIGNsZWFuaW5nCisJICogaXRzZWxmIHVwCisJICovCisJZG93biAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwlsaXN0X2RlbCAoJmJ1cy0+YnVzX2xpc3QpOworCXVwICgmdXNiX2J1c19saXN0X2xvY2spOworCisJdXNibW9uX25vdGlmeV9idXNfcmVtb3ZlIChidXMpOworCXVzYmZzX3JlbW92ZV9idXMgKGJ1cyk7CisKKwljbGVhcl9iaXQgKGJ1cy0+YnVzbnVtLCBidXNtYXAuYnVzbWFwKTsKKworCWNsYXNzX2RldmljZV9kZWwoJmJ1cy0+Y2xhc3NfZGV2KTsKK30KKworLyoqCisgKiB1c2JfaGNkX3JlZ2lzdGVyX3Jvb3RfaHViIC0gY2FsbGVkIGJ5IEhDRCB0byByZWdpc3RlciBpdHMgcm9vdCBodWIgCisgKiBAdXNiX2RldjogdGhlIHVzYiByb290IGh1YiBkZXZpY2UgdG8gYmUgcmVnaXN0ZXJlZC4KKyAqIEBoY2Q6IGhvc3QgY29udHJvbGxlciBmb3IgdGhpcyByb290IGh1YgorICoKKyAqIFRoZSBVU0IgaG9zdCBjb250cm9sbGVyIGNhbGxzIHRoaXMgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgdGhlIHJvb3QgaHViCisgKiBwcm9wZXJseSB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtLiAgSXQgc2V0cyB1cCB0aGUgZGV2aWNlIHByb3Blcmx5IGluCisgKiB0aGUgZGV2aWNlIHRyZWUgYW5kIHN0b3JlcyB0aGUgcm9vdF9odWIgcG9pbnRlciBpbiB0aGUgYnVzIHN0cnVjdHVyZSwKKyAqIHRoZW4gY2FsbHMgdXNiX25ld19kZXZpY2UoKSB0byByZWdpc3RlciB0aGUgdXNiIGRldmljZS4gIEl0IGFsc28KKyAqIGFzc2lnbnMgdGhlIHJvb3QgaHViJ3MgVVNCIGFkZHJlc3MgKGFsd2F5cyAxKS4KKyAqLworaW50IHVzYl9oY2RfcmVnaXN0ZXJfcm9vdF9odWIgKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCBzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBkZXZpY2UgKnBhcmVudF9kZXYgPSBoY2QtPnNlbGYuY29udHJvbGxlcjsKKwljb25zdCBpbnQgZGV2bnVtID0gMTsKKwlpbnQgcmV0dmFsOworCisJLyogaGNkLT5kcml2ZXItPnN0YXJ0KCkgcmVwb3J0ZWQgY2FuX3dha2V1cCwgcHJvYmFibHkgd2l0aAorCSAqIGFzc2lzdGFuY2UgZnJvbSBib2FyZCdzIGJvb3QgZmlybXdhcmUuCisJICogTk9URTogIG5vcm1hbCBkZXZpY2VzIHdvbid0IGVuYWJsZSB3YWtldXAgYnkgZGVmYXVsdC4KKwkgKi8KKwlpZiAoaGNkLT5jYW5fd2FrZXVwKQorCQlkZXZfZGJnIChwYXJlbnRfZGV2LCAic3VwcG9ydHMgVVNCIHJlbW90ZSB3YWtldXBcbiIpOworCWhjZC0+cmVtb3RlX3dha2V1cCA9IGhjZC0+Y2FuX3dha2V1cDsKKworCXVzYl9kZXYtPmRldm51bSA9IGRldm51bTsKKwl1c2JfZGV2LT5idXMtPmRldm51bV9uZXh0ID0gZGV2bnVtICsgMTsKKwltZW1zZXQgKCZ1c2JfZGV2LT5idXMtPmRldm1hcC5kZXZpY2VtYXAsIDAsCisJCQlzaXplb2YgdXNiX2Rldi0+YnVzLT5kZXZtYXAuZGV2aWNlbWFwKTsKKwlzZXRfYml0IChkZXZudW0sIHVzYl9kZXYtPmJ1cy0+ZGV2bWFwLmRldmljZW1hcCk7CisJdXNiX3NldF9kZXZpY2Vfc3RhdGUodXNiX2RldiwgVVNCX1NUQVRFX0FERFJFU1MpOworCisJZG93biAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwl1c2JfZGV2LT5idXMtPnJvb3RfaHViID0gdXNiX2RldjsKKworCXVzYl9kZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCk7CisJcmV0dmFsID0gdXNiX2dldF9kZXZpY2VfZGVzY3JpcHRvcih1c2JfZGV2LCBVU0JfRFRfREVWSUNFX1NJWkUpOworCWlmIChyZXR2YWwgIT0gc2l6ZW9mIHVzYl9kZXYtPmRlc2NyaXB0b3IpIHsKKwkJdXNiX2Rldi0+YnVzLT5yb290X2h1YiA9IE5VTEw7CisJCXVwICgmdXNiX2J1c19saXN0X2xvY2spOworCQlkZXZfZGJnIChwYXJlbnRfZGV2LCAiY2FuJ3QgcmVhZCAlcyBkZXZpY2UgZGVzY3JpcHRvciAlZFxuIiwKKwkJCQl1c2JfZGV2LT5kZXYuYnVzX2lkLCByZXR2YWwpOworCQlyZXR1cm4gKHJldHZhbCA8IDApID8gcmV0dmFsIDogLUVNU0dTSVpFOworCX0KKworCXVzYl9sb2NrX2RldmljZSAodXNiX2Rldik7CisJcmV0dmFsID0gdXNiX25ld19kZXZpY2UgKHVzYl9kZXYpOworCXVzYl91bmxvY2tfZGV2aWNlICh1c2JfZGV2KTsKKwlpZiAocmV0dmFsKSB7CisJCXVzYl9kZXYtPmJ1cy0+cm9vdF9odWIgPSBOVUxMOworCQlkZXZfZXJyIChwYXJlbnRfZGV2LCAiY2FuJ3QgcmVnaXN0ZXIgcm9vdCBodWIgZm9yICVzLCAlZFxuIiwKKwkJCQl1c2JfZGV2LT5kZXYuYnVzX2lkLCByZXR2YWwpOworCX0KKwl1cCAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKworCWlmIChyZXR2YWwgPT0gMCkgeworCQlzcGluX2xvY2tfaXJxICgmaGNkX3Jvb3RfaHViX2xvY2spOworCQloY2QtPnJoX3JlZ2lzdGVyZWQgPSAxOworCQlzcGluX3VubG9ja19pcnEgKCZoY2Rfcm9vdF9odWJfbG9jayk7CisKKwkJLyogRGlkIHRoZSBIQyBkaWUgYmVmb3JlIHRoZSByb290IGh1YiB3YXMgcmVnaXN0ZXJlZD8gKi8KKwkJaWYgKGhjZC0+c3RhdGUgPT0gSENfU1RBVEVfSEFMVCkKKwkJCXVzYl9oY19kaWVkIChoY2QpOwkvKiBUaGlzIHRpbWUgY2xlYW4gdXAgKi8KKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX2hjZF9yZWdpc3Rlcl9yb290X2h1Yik7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiB1c2JfY2FsY19idXNfdGltZSAtIGFwcHJveGltYXRlIHBlcmlvZGljIHRyYW5zYWN0aW9uIHRpbWUgaW4gbmFub3NlY29uZHMKKyAqIEBzcGVlZDogZnJvbSBkZXYtPnNwZWVkOyBVU0JfU1BFRURfe0xPVyxGVUxMLEhJR0h9CisgKiBAaXNfaW5wdXQ6IHRydWUgaWZmIHRoZSB0cmFuc2FjdGlvbiBzZW5kcyBkYXRhIHRvIHRoZSBob3N0CisgKiBAaXNvYzogdHJ1ZSBmb3IgaXNvY2hyb25vdXMgdHJhbnNhY3Rpb25zLCBmYWxzZSBmb3IgaW50ZXJydXB0IG9uZXMKKyAqIEBieXRlY291bnQ6IGhvdyBtYW55IGJ5dGVzIGluIHRoZSB0cmFuc2FjdGlvbi4KKyAqCisgKiBSZXR1cm5zIGFwcHJveGltYXRlIGJ1cyB0aW1lIGluIG5hbm9zZWNvbmRzIGZvciBhIHBlcmlvZGljIHRyYW5zYWN0aW9uLgorICogU2VlIFVTQiAyLjAgc3BlYyBzZWN0aW9uIDUuMTEuMzsgb25seSBwZXJpb2RpYyB0cmFuc2ZlcnMgbmVlZCB0byBiZQorICogc2NoZWR1bGVkIGluIHNvZnR3YXJlLCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBmb3Igc3VjaCBzY2hlZHVsaW5nLgorICovCitsb25nIHVzYl9jYWxjX2J1c190aW1lIChpbnQgc3BlZWQsIGludCBpc19pbnB1dCwgaW50IGlzb2MsIGludCBieXRlY291bnQpCit7CisJdW5zaWduZWQgbG9uZwl0bXA7CisKKwlzd2l0Y2ggKHNwZWVkKSB7CisJY2FzZSBVU0JfU1BFRURfTE9XOiAJLyogSU5UUiBvbmx5ICovCisJCWlmIChpc19pbnB1dCkgeworCQkJdG1wID0gKDY3NjY3TCAqICgzMUwgKyAxMEwgKiBCaXRUaW1lIChieXRlY291bnQpKSkgLyAxMDAwTDsKKwkJCXJldHVybiAoNjQwNjBMICsgKDIgKiBCV19IVUJfTFNfU0VUVVApICsgQldfSE9TVF9ERUxBWSArIHRtcCk7CisJCX0gZWxzZSB7CisJCQl0bXAgPSAoNjY3MDBMICogKDMxTCArIDEwTCAqIEJpdFRpbWUgKGJ5dGVjb3VudCkpKSAvIDEwMDBMOworCQkJcmV0dXJuICg2NDEwN0wgKyAoMiAqIEJXX0hVQl9MU19TRVRVUCkgKyBCV19IT1NUX0RFTEFZICsgdG1wKTsKKwkJfQorCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CS8qIElTT0Mgb3IgSU5UUiAqLworCQlpZiAoaXNvYykgeworCQkJdG1wID0gKDgzNTRMICogKDMxTCArIDEwTCAqIEJpdFRpbWUgKGJ5dGVjb3VudCkpKSAvIDEwMDBMOworCQkJcmV0dXJuICgoKGlzX2lucHV0KSA/IDcyNjhMIDogNjI2NUwpICsgQldfSE9TVF9ERUxBWSArIHRtcCk7CisJCX0gZWxzZSB7CisJCQl0bXAgPSAoODM1NEwgKiAoMzFMICsgMTBMICogQml0VGltZSAoYnl0ZWNvdW50KSkpIC8gMTAwMEw7CisJCQlyZXR1cm4gKDkxMDdMICsgQldfSE9TVF9ERUxBWSArIHRtcCk7CisJCX0KKwljYXNlIFVTQl9TUEVFRF9ISUdIOgkvKiBJU09DIG9yIElOVFIgKi8KKwkJLy8gRklYTUUgYWRqdXN0IGZvciBpbnB1dCB2cyBvdXRwdXQKKwkJaWYgKGlzb2MpCisJCQl0bXAgPSBIU19VU0VDUyAoYnl0ZWNvdW50KTsKKwkJZWxzZQorCQkJdG1wID0gSFNfVVNFQ1NfSVNPIChieXRlY291bnQpOworCQlyZXR1cm4gdG1wOworCWRlZmF1bHQ6CisJCXByX2RlYnVnICgiJXM6IGJvZ3VzIGRldmljZSBzcGVlZCFcbiIsIHVzYmNvcmVfbmFtZSk7CisJCXJldHVybiAtMTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MICh1c2JfY2FsY19idXNfdGltZSk7CisKKy8qCisgKiB1c2JfY2hlY2tfYmFuZHdpZHRoKCk6CisgKgorICogb2xkX2FsbG9jIGlzIGZyb20gaG9zdF9jb250cm9sbGVyLT5iYW5kd2lkdGhfYWxsb2NhdGVkIGluIG1pY3Jvc2Vjb25kczsKKyAqIGJ1c3RpbWUgaXMgZnJvbSBjYWxjX2J1c190aW1lKCksIGJ1dCBjb252ZXJ0ZWQgdG8gbWljcm9zZWNvbmRzLgorICoKKyAqIHJldHVybnMgPGJ1c3RpbWUgaW4gdXM+IGlmIHN1Y2Nlc3NmdWwsCisgKiBvciAtRU5PU1BDIGlmIGJhbmR3aWR0aCByZXF1ZXN0IGZhaWxzLgorICoKKyAqIEZJWE1FOgorICogVGhpcyBpbml0aWFsIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHVzZSBFbmRwb2ludC5iSW50ZXJ2YWwKKyAqIGluIG1hbmFnaW5nIGJhbmR3aWR0aCBhbGxvY2F0aW9uLgorICogSXQgcHJvYmFibHkgbmVlZHMgdG8gYmUgZXhwYW5kZWQgdG8gdXNlIEVuZHBvaW50LmJJbnRlcnZhbC4KKyAqIFRoaXMgY2FuIGJlIGRvbmUgYXMgYSBsYXRlciBlbmhhbmNlbWVudCAoY29ycmVjdGlvbikuCisgKgorICogVGhpcyB3aWxsIGFsc28gcHJvYmFibHkgcmVxdWlyZSBzb21lIGtpbmQgb2YKKyAqIGZyYW1lIGFsbG9jYXRpb24gdHJhY2tpbmcuLi5tZWFuaW5nLCBmb3IgZXhhbXBsZSwKKyAqIHRoYXQgaWYgbXVsdGlwbGUgZHJpdmVycyByZXF1ZXN0IGludGVycnVwdHMgZXZlcnkgMTAgVVNCIGZyYW1lcywKKyAqIHRoZXkgZG9uJ3QgYWxsIGhhdmUgdG8gYmUgYWxsb2NhdGVkIGF0CisgKiBmcmFtZSBudW1iZXJzIE4sIE4rMTAsIE4rMjAsIGV0Yy4gIFNvbWUgb2YgdGhlbSBjb3VsZCBiZSBhdAorICogTisxMSwgTisyMSwgTiszMSwgZXRjLiwgYW5kIG90aGVycyBhdAorICogTisxMiwgTisyMiwgTiszMiwgZXRjLgorICoKKyAqIFNpbWlsYXJseSBmb3IgaXNvY2hyb25vdXMgdHJhbnNmZXJzLi4uCisgKgorICogSW5kaXZpZHVhbCBIQ0RzIGNhbiBzY2hlZHVsZSBtb3JlIGRpcmVjdGx5IC4uLiB0aGlzIGxvZ2ljCisgKiBpcyBub3QgY29ycmVjdCBmb3IgaGlnaCBzcGVlZCB0cmFuc2ZlcnMuCisgKi8KK2ludCB1c2JfY2hlY2tfYmFuZHdpZHRoIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJdW5zaWduZWQgaW50CXBpcGUgPSB1cmItPnBpcGU7CisJbG9uZwkJYnVzdGltZTsKKwlpbnQJCWlzX2luID0gdXNiX3BpcGVpbiAocGlwZSk7CisJaW50CQlpc19pc28gPSB1c2JfcGlwZWlzb2MgKHBpcGUpOworCWludAkJb2xkX2FsbG9jID0gZGV2LT5idXMtPmJhbmR3aWR0aF9hbGxvY2F0ZWQ7CisJaW50CQluZXdfYWxsb2M7CisKKworCWJ1c3RpbWUgPSBOU19UT19VUyAodXNiX2NhbGNfYnVzX3RpbWUgKGRldi0+c3BlZWQsIGlzX2luLCBpc19pc28sCisJCQl1c2JfbWF4cGFja2V0IChkZXYsIHBpcGUsICFpc19pbikpKTsKKwlpZiAoaXNfaXNvKQorCQlidXN0aW1lIC89IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisKKwluZXdfYWxsb2MgPSBvbGRfYWxsb2MgKyAoaW50KSBidXN0aW1lOworCWlmIChuZXdfYWxsb2MgPiBGUkFNRV9USU1FX01BWF9VU0VDU19BTExPQykgeworI2lmZGVmCURFQlVHCisJCWNoYXIJKm1vZGUgPSAKKyNpZmRlZiBDT05GSUdfVVNCX0JBTkRXSURUSAorCQkJIiI7CisjZWxzZQorCQkJIndvdWxkIGhhdmUgIjsKKyNlbmRpZgorCQlkZXZfZGJnICgmZGV2LT5kZXYsICJ1c2JfY2hlY2tfYmFuZHdpZHRoICVzRkFJTEVEOiAlZCArICVsZCA9ICVkIHVzZWNcbiIsCisJCQltb2RlLCBvbGRfYWxsb2MsIGJ1c3RpbWUsIG5ld19hbGxvYyk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX0JBTkRXSURUSAorCQlidXN0aW1lID0gLUVOT1NQQzsJLyogcmVwb3J0IGVycm9yICovCisjZW5kaWYKKwl9CisKKwlyZXR1cm4gYnVzdGltZTsKK30KK0VYUE9SVF9TWU1CT0wgKHVzYl9jaGVja19iYW5kd2lkdGgpOworCisKKy8qKgorICogdXNiX2NsYWltX2JhbmR3aWR0aCAtIHJlY29yZHMgYmFuZHdpZHRoIGZvciBhIHBlcmlvZGljIHRyYW5zZmVyCisgKiBAZGV2OiBzb3VyY2UvdGFyZ2V0IG9mIHJlcXVlc3QKKyAqIEB1cmI6IHJlcXVlc3QgKHVyYi0+ZGV2ID09IGRldikKKyAqIEBidXN0aW1lOiBiYW5kd2lkdGggY29uc3VtZWQsIGluIChhdmVyYWdlKSBtaWNyb3NlY29uZHMgcGVyIGZyYW1lCisgKiBAaXNvYzogdHJ1ZSBpZmYgdGhlIHJlcXVlc3QgaXMgaXNvY2hyb25vdXMKKyAqCisgKiBCdXMgYmFuZHdpZHRoIHJlc2VydmF0aW9ucyBhcmUgcmVjb3JkZWQgcHVyZWx5IGZvciBkaWFnbm9zdGljIHB1cnBvc2VzLgorICogSENEcyBhcmUgZXhwZWN0ZWQgbm90IHRvIG92ZXJjb21taXQgcGVyaW9kaWMgYmFuZHdpZHRoLCBhbmQgdG8gcmVjb3JkIHN1Y2gKKyAqIHJlc2VydmF0aW9ucyB3aGVuZXZlciBlbmRwb2ludHMgYXJlIGFkZGVkIHRvIHRoZSBwZXJpb2RpYyBzY2hlZHVsZS4KKyAqCisgKiBGSVhNRSBhdmVyYWdpbmcgcGVyLWZyYW1lIGlzIHN1Ym9wdGltYWwuICBCZXR0ZXIgdG8gc3VtIG92ZXIgdGhlIEhDRCdzCisgKiBlbnRpcmUgcGVyaW9kaWMgc2NoZWR1bGUgLi4uIDMyIGZyYW1lcyBmb3IgT0hDSSwgMTAyNCBmb3IgVUhDSSwgc2V0dGFibGUKKyAqIGZvciBFSENJICgyNTYvNTEyLzEwMjQgZnJhbWVzLCBkZWZhdWx0IDEwMjQpIGFuZCBoYXZlIHRoZSBidXMgZXhwb3NlIGhvdworICogbGFyZ2UgaXRzIHBlcmlvZGljIHNjaGVkdWxlIGlzLgorICovCit2b2lkIHVzYl9jbGFpbV9iYW5kd2lkdGggKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHN0cnVjdCB1cmIgKnVyYiwgaW50IGJ1c3RpbWUsIGludCBpc29jKQoreworCWRldi0+YnVzLT5iYW5kd2lkdGhfYWxsb2NhdGVkICs9IGJ1c3RpbWU7CisJaWYgKGlzb2MpCisJCWRldi0+YnVzLT5iYW5kd2lkdGhfaXNvY19yZXFzKys7CisJZWxzZQorCQlkZXYtPmJ1cy0+YmFuZHdpZHRoX2ludF9yZXFzKys7CisJdXJiLT5iYW5kd2lkdGggPSBidXN0aW1lOworCisjaWZkZWYgVVNCX0JBTkRXSURUSF9NRVNTQUdFUworCWRldl9kYmcgKCZkZXYtPmRldiwgImJhbmR3aWR0aCBhbGxvYyBpbmNyZWFzZWQgYnkgJWQgKCVzKSB0byAlZCBmb3IgJWQgcmVxdWVzdGVyc1xuIiwKKwkJYnVzdGltZSwKKwkJaXNvYyA/ICJJU09DIiA6ICJJTlRSIiwKKwkJZGV2LT5idXMtPmJhbmR3aWR0aF9hbGxvY2F0ZWQsCisJCWRldi0+YnVzLT5iYW5kd2lkdGhfaW50X3JlcXMgKyBkZXYtPmJ1cy0+YmFuZHdpZHRoX2lzb2NfcmVxcyk7CisjZW5kaWYKK30KK0VYUE9SVF9TWU1CT0wgKHVzYl9jbGFpbV9iYW5kd2lkdGgpOworCisKKy8qKgorICogdXNiX3JlbGVhc2VfYmFuZHdpZHRoIC0gcmV2ZXJzZXMgZWZmZWN0IG9mIHVzYl9jbGFpbV9iYW5kd2lkdGgoKQorICogQGRldjogc291cmNlL3RhcmdldCBvZiByZXF1ZXN0CisgKiBAdXJiOiByZXF1ZXN0ICh1cmItPmRldiA9PSBkZXYpCisgKiBAaXNvYzogdHJ1ZSBpZmYgdGhlIHJlcXVlc3QgaXMgaXNvY2hyb25vdXMKKyAqCisgKiBUaGlzIHJlY29yZHMgdGhhdCBwcmV2aW91c2x5IGFsbG9jYXRlZCBiYW5kd2lkdGggaGFzIGJlZW4gcmVsZWFzZWQuCisgKiBCYW5kd2lkdGggaXMgcmVsZWFzZWQgd2hlbiBlbmRwb2ludHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgaG9zdCBjb250cm9sbGVyJ3MKKyAqIHBlcmlvZGljIHNjaGVkdWxlLgorICovCit2b2lkIHVzYl9yZWxlYXNlX2JhbmR3aWR0aCAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IHVyYiAqdXJiLCBpbnQgaXNvYykKK3sKKwlkZXYtPmJ1cy0+YmFuZHdpZHRoX2FsbG9jYXRlZCAtPSB1cmItPmJhbmR3aWR0aDsKKwlpZiAoaXNvYykKKwkJZGV2LT5idXMtPmJhbmR3aWR0aF9pc29jX3JlcXMtLTsKKwllbHNlCisJCWRldi0+YnVzLT5iYW5kd2lkdGhfaW50X3JlcXMtLTsKKworI2lmZGVmIFVTQl9CQU5EV0lEVEhfTUVTU0FHRVMKKwlkZXZfZGJnICgmZGV2LT5kZXYsICJiYW5kd2lkdGggYWxsb2MgcmVkdWNlZCBieSAlZCAoJXMpIHRvICVkIGZvciAlZCByZXF1ZXN0ZXJzXG4iLAorCQl1cmItPmJhbmR3aWR0aCwKKwkJaXNvYyA/ICJJU09DIiA6ICJJTlRSIiwKKwkJZGV2LT5idXMtPmJhbmR3aWR0aF9hbGxvY2F0ZWQsCisJCWRldi0+YnVzLT5iYW5kd2lkdGhfaW50X3JlcXMgKyBkZXYtPmJ1cy0+YmFuZHdpZHRoX2lzb2NfcmVxcyk7CisjZW5kaWYKKwl1cmItPmJhbmR3aWR0aCA9IDA7Cit9CitFWFBPUlRfU1lNQk9MICh1c2JfcmVsZWFzZV9iYW5kd2lkdGgpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBHZW5lcmljIEhDIG9wZXJhdGlvbnMuCisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgdXJiX3VubGluayAoc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJLyogUmVsZWFzZSBhbnkgcGVyaW9kaWMgdHJhbnNmZXIgYmFuZHdpZHRoICovCisJaWYgKHVyYi0+YmFuZHdpZHRoKQorCQl1c2JfcmVsZWFzZV9iYW5kd2lkdGggKHVyYi0+ZGV2LCB1cmIsCisJCQl1c2JfcGlwZWlzb2MgKHVyYi0+cGlwZSkpOworCisJLyogY2xlYXIgYWxsIHN0YXRlIGxpbmtpbmcgdXJiIHRvIHRoaXMgZGV2IChhbmQgaGNkKSAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZoY2RfZGF0YV9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWxfaW5pdCAoJnVyYi0+dXJiX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZoY2RfZGF0YV9sb2NrLCBmbGFncyk7CisJdXNiX3B1dF9kZXYgKHVyYi0+ZGV2KTsKK30KKworCisvKiBtYXkgYmUgY2FsbGVkIGluIGFueSBjb250ZXh0IHdpdGggYSB2YWxpZCB1cmItPmRldiB1c2Vjb3VudAorICogY2FsbGVyIHN1cnJlbmRlcnMgIm93bmVyc2hpcCIgb2YgdXJiCisgKiBleHBlY3RzIHVzYl9zdWJtaXRfdXJiKCkgdG8gaGF2ZSBzYW5pdHkgY2hlY2tlZCBhbmQgY29uZGl0aW9uZWQgYWxsCisgKiBpbnB1dHMgaW4gdGhlIHVyYgorICovCitzdGF0aWMgaW50IGhjZF9zdWJtaXRfdXJiIChzdHJ1Y3QgdXJiICp1cmIsIGludCBtZW1fZmxhZ3MpCit7CisJaW50CQkJc3RhdHVzOworCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0gdXJiLT5kZXYtPmJ1cy0+aGNwcml2OworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlpZiAoIWhjZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl1c2Jtb25fdXJiX3N1Ym1pdCgmaGNkLT5zZWxmLCB1cmIpOworCisJLyoKKwkgKiBBdG9taWNhbGx5IHF1ZXVlIHRoZSB1cmIsICBmaXJzdCB0byBvdXIgcmVjb3JkcywgdGhlbiB0byB0aGUgSENELgorCSAqIEFjY2VzcyB0byB1cmItPnN0YXR1cyBpcyBjb250cm9sbGVkIGJ5IHVyYi0+bG9jayAuLi4gY2hhbmdlcyBvbgorCSAqIGkvbyBjb21wbGV0aW9uIChub3JtYWwgb3IgZmF1bHQpIG9yIHVubGlua2luZy4KKwkgKi8KKworCS8vIEZJWE1FOiAgdmVyaWZ5IHRoYXQgcXVpZXNjaW5nIGhjIHdvcmtzIHJpZ2h0IChSSCBjbGVhbnMgdXApCisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmhjZF9kYXRhX2xvY2ssIGZsYWdzKTsKKwllcCA9ICh1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyB1cmItPmRldi0+ZXBfaW4gOiB1cmItPmRldi0+ZXBfb3V0KQorCQkJW3VzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKV07CisJaWYgKHVubGlrZWx5ICghZXApKQorCQlzdGF0dXMgPSAtRU5PRU5UOworCWVsc2UgaWYgKHVubGlrZWx5ICh1cmItPnJlamVjdCkpCisJCXN0YXR1cyA9IC1FUEVSTTsKKwllbHNlIHN3aXRjaCAoaGNkLT5zdGF0ZSkgeworCWNhc2UgSENfU1RBVEVfUlVOTklORzoKKwljYXNlIEhDX1NUQVRFX1JFU1VNSU5HOgorCQl1c2JfZ2V0X2RldiAodXJiLT5kZXYpOworCQlsaXN0X2FkZF90YWlsICgmdXJiLT51cmJfbGlzdCwgJmVwLT51cmJfbGlzdCk7CisJCXN0YXR1cyA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN0YXR1cyA9IC1FU0hVVERPV047CisJCWJyZWFrOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmaGNkX2RhdGFfbG9jaywgZmxhZ3MpOworCWlmIChzdGF0dXMpIHsKKwkJSU5JVF9MSVNUX0hFQUQgKCZ1cmItPnVyYl9saXN0KTsKKwkJdXNibW9uX3VyYl9zdWJtaXRfZXJyb3IoJmhjZC0+c2VsZiwgdXJiLCBzdGF0dXMpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCS8qIGluY3JlbWVudCB1cmIncyByZWZlcmVuY2UgY291bnQgYXMgcGFydCBvZiBnaXZpbmcgaXQgdG8gdGhlIEhDRAorCSAqICh3aGljaCBub3cgY29udHJvbHMgaXQpLiAgSENEIGd1YXJhbnRlZXMgdGhhdCBpdCBlaXRoZXIgcmV0dXJucworCSAqIGFuIGVycm9yIG9yIGNhbGxzIGdpdmViYWNrKCksIGJ1dCBub3QgYm90aC4KKwkgKi8KKwl1cmIgPSB1c2JfZ2V0X3VyYiAodXJiKTsKKwlhdG9taWNfaW5jICgmdXJiLT51c2VfY291bnQpOworCisJaWYgKHVyYi0+ZGV2ID09IGhjZC0+c2VsZi5yb290X2h1YikgeworCQkvKiBOT1RFOiAgcmVxdWlyZW1lbnQgb24gaHViIGNhbGxlcnMgKHVzYmZzIGFuZCB0aGUgaHViCisJCSAqIGRyaXZlciwgZm9yIG5vdykgdGhhdCBVUkJzJyB1cmItPnRyYW5zZmVyX2J1ZmZlciBiZQorCQkgKiB2YWxpZCBhbmQgdXNiX2J1ZmZlcl97c3luYyx1bm1hcH0oKSBub3QgYmUgbmVlZGVkLCBzaW5jZQorCQkgKiB0aGV5IGNvdWxkIGNsb2JiZXIgcm9vdCBodWIgcmVzcG9uc2UgZGF0YS4KKwkJICovCisJCXN0YXR1cyA9IHJoX3VyYl9lbnF1ZXVlIChoY2QsIHVyYik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBsb3dlciBsZXZlbCBoY2QgY29kZSBzaG91bGQgdXNlICpfZG1hIGV4Y2x1c2l2ZWx5LAorCSAqIHVubGVzcyBpdCB1c2VzIHBpbyBvciB0YWxrcyB0byBhbm90aGVyIHRyYW5zcG9ydC4KKwkgKi8KKwlpZiAoaGNkLT5zZWxmLmNvbnRyb2xsZXItPmRtYV9tYXNrKSB7CisJCWlmICh1c2JfcGlwZWNvbnRyb2wgKHVyYi0+cGlwZSkKKwkJCSYmICEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9OT19TRVRVUF9ETUFfTUFQKSkKKwkJCXVyYi0+c2V0dXBfZG1hID0gZG1hX21hcF9zaW5nbGUgKAorCQkJCQloY2QtPnNlbGYuY29udHJvbGxlciwKKwkJCQkJdXJiLT5zZXR1cF9wYWNrZXQsCisJCQkJCXNpemVvZiAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksCisJCQkJCURNQV9UT19ERVZJQ0UpOworCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoICE9IDAKKwkJCSYmICEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQKSkKKwkJCXVyYi0+dHJhbnNmZXJfZG1hID0gZG1hX21hcF9zaW5nbGUgKAorCQkJCQloY2QtPnNlbGYuY29udHJvbGxlciwKKwkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQkJdXNiX3BpcGVpbiAodXJiLT5waXBlKQorCQkJCQkgICAgPyBETUFfRlJPTV9ERVZJQ0UKKwkJCQkJICAgIDogRE1BX1RPX0RFVklDRSk7CisJfQorCisJc3RhdHVzID0gaGNkLT5kcml2ZXItPnVyYl9lbnF1ZXVlIChoY2QsIGVwLCB1cmIsIG1lbV9mbGFncyk7Citkb25lOgorCWlmICh1bmxpa2VseSAoc3RhdHVzKSkgeworCQl1cmJfdW5saW5rICh1cmIpOworCQlhdG9taWNfZGVjICgmdXJiLT51c2VfY291bnQpOworCQlpZiAodXJiLT5yZWplY3QpCisJCQl3YWtlX3VwICgmdXNiX2tpbGxfdXJiX3F1ZXVlKTsKKwkJdXNiX3B1dF91cmIgKHVyYik7CisJCXVzYm1vbl91cmJfc3VibWl0X2Vycm9yKCZoY2QtPnNlbGYsIHVyYiwgc3RhdHVzKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogY2FsbGVkIGluIGFueSBjb250ZXh0ICovCitzdGF0aWMgaW50IGhjZF9nZXRfZnJhbWVfbnVtYmVyIChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkID0gKHN0cnVjdCB1c2JfaGNkICopdWRldi0+YnVzLT5oY3ByaXY7CisJaWYgKCFIQ19JU19SVU5OSU5HIChoY2QtPnN0YXRlKSkKKwkJcmV0dXJuIC1FU0hVVERPV047CisJcmV0dXJuIGhjZC0+ZHJpdmVyLT5nZXRfZnJhbWVfbnVtYmVyIChoY2QpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiB0aGlzIG1ha2VzIHRoZSBoY2QgZ2l2ZWJhY2soKSB0aGUgdXJiIG1vcmUgcXVpY2tseSwgYnkga2lja2luZyBpdAorICogb2ZmIGhhcmR3YXJlIHF1ZXVlcyAod2hpY2ggbWF5IHRha2UgYSB3aGlsZSkgYW5kIHJldHVybmluZyBpdCBhcworICogc29vbiBhcyBwcmFjdGljYWwuICB3ZSd2ZSBhbHJlYWR5IHNldCB1cCB0aGUgdXJiJ3MgcmV0dXJuIHN0YXR1cywKKyAqIGJ1dCB3ZSBjYW4ndCBrbm93IGlmIHRoZSBjYWxsYmFjayBjb21wbGV0ZWQgYWxyZWFkeS4KKyAqLworc3RhdGljIGludAordW5saW5rMSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiKQoreworCWludAkJdmFsdWU7CisKKwlpZiAodXJiLT5kZXYgPT0gaGNkLT5zZWxmLnJvb3RfaHViKQorCQl2YWx1ZSA9IHVzYl9yaF91cmJfZGVxdWV1ZSAoaGNkLCB1cmIpOworCWVsc2UgeworCisJCS8qIFRoZSBvbmx5IHJlYXNvbiBhbiBIQ0QgbWlnaHQgZmFpbCB0aGlzIGNhbGwgaXMgaWYKKwkJICogaXQgaGFzIG5vdCB5ZXQgZnVsbHkgcXVldWVkIHRoZSB1cmIgdG8gYmVnaW4gd2l0aC4KKwkJICogU3VjaCBmYWlsdXJlcyBzaG91bGQgYmUgaGFybWxlc3MuICovCisJCXZhbHVlID0gaGNkLT5kcml2ZXItPnVyYl9kZXF1ZXVlIChoY2QsIHVyYik7CisJfQorCisJaWYgKHZhbHVlICE9IDApCisJCWRldl9kYmcgKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiZGVxdWV1ZSAlcCAtLT4gJWRcbiIsCisJCQkJdXJiLCB2YWx1ZSk7CisJcmV0dXJuIHZhbHVlOworfQorCisvKgorICogY2FsbGVkIGluIGFueSBjb250ZXh0CisgKgorICogY2FsbGVyIGd1YXJhbnRlZXMgdXJiIHdvbid0IGJlIHJlY3ljbGVkIHRpbGwgYm90aCB1bmxpbmsoKQorICogYW5kIHRoZSB1cmIncyBjb21wbGV0aW9uIGZ1bmN0aW9uIHJldHVybgorICovCitzdGF0aWMgaW50IGhjZF91bmxpbmtfdXJiIChzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpCit7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50CSplcDsKKwlzdHJ1Y3QgdXNiX2hjZAkJCSpoY2QgPSBOVUxMOworCXN0cnVjdCBkZXZpY2UJCQkqc3lzID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nCQkJZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZAkJKnRtcDsKKwlpbnQJCQkJcmV0dmFsOworCisJaWYgKCF1cmIpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghdXJiLT5kZXYgfHwgIXVyYi0+ZGV2LT5idXMpCisJCXJldHVybiAtRU5PREVWOworCWVwID0gKHVzYl9waXBlaW4odXJiLT5waXBlKSA/IHVyYi0+ZGV2LT5lcF9pbiA6IHVyYi0+ZGV2LT5lcF9vdXQpCisJCQlbdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpXTsKKwlpZiAoIWVwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qCisJICogd2UgY29udGVuZCBmb3IgdXJiLT5zdGF0dXMgd2l0aCB0aGUgaGNkIGNvcmUsCisJICogd2hpY2ggY2hhbmdlcyBpdCB3aGlsZSByZXR1cm5pbmcgdGhlIHVyYi4KKwkgKgorCSAqIENhbGxlciBndWFyYW50ZWVkIHRoYXQgdGhlIHVyYiBwb2ludGVyIGhhc24ndCBiZWVuIGZyZWVkLCBhbmQKKwkgKiB0aGF0IGl0IHdhcyBzdWJtaXR0ZWQuICBCdXQgYXMgYSBydWxlIGl0IGNhbid0IGtub3cgd2hldGhlciBvcgorCSAqIG5vdCBpdCdzIGFscmVhZHkgYmVlbiB1bmxpbmtlZCAuLi4gc28gd2UgcmVzcGVjdCB0aGUgcmV2ZXJzZWQKKwkgKiBsb2NrIHNlcXVlbmNlIG5lZWRlZCBmb3IgdGhlIHVzYl9oY2RfZ2l2ZWJhY2tfdXJiKCkgY29kZSBwYXRocworCSAqICh1cmIgbG9jaywgdGhlbiBoY2RfZGF0YV9sb2NrKSBpbiBjYXNlIHNvbWUgb3RoZXIgQ1BVIGlzIG5vdworCSAqIHVubGlua2luZyBpdC4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSAoJnVyYi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9jayAoJmhjZF9kYXRhX2xvY2spOworCisJc3lzID0gJnVyYi0+ZGV2LT5kZXY7CisJaGNkID0gdXJiLT5kZXYtPmJ1cy0+aGNwcml2OworCWlmIChoY2QgPT0gTlVMTCkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogcnVubmluZyB+PSBoYyB1bmxpbmsgaGFuZHNoYWtlIHdvcmtzIChpcnEsIHRpbWVyLCBldGMpCisJICogaGFsdGVkIH49IG5vIHVubGluayBoYW5kc2hha2UgaXMgbmVlZGVkCisJICogc3VzcGVuZGVkLCByZXN1bWluZyA9PSBzaG91bGQgbmV2ZXIgaGFwcGVuCisJICovCisJV0FSTl9PTiAoIUhDX0lTX1JVTk5JTkcgKGhjZC0+c3RhdGUpICYmIGhjZC0+c3RhdGUgIT0gSENfU1RBVEVfSEFMVCk7CisKKwkvKiBpbnNpc3QgdGhlIHVyYiBpcyBzdGlsbCBxdWV1ZWQgKi8KKwlsaXN0X2Zvcl9lYWNoKHRtcCwgJmVwLT51cmJfbGlzdCkgeworCQlpZiAodG1wID09ICZ1cmItPnVyYl9saXN0KQorCQkJYnJlYWs7CisJfQorCWlmICh0bXAgIT0gJnVyYi0+dXJiX2xpc3QpIHsKKwkJcmV0dmFsID0gLUVJRFJNOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogQW55IHN0YXR1cyBleGNlcHQgLUVJTlBST0dSRVNTIG1lYW5zIHNvbWV0aGluZyBhbHJlYWR5IHN0YXJ0ZWQgdG8KKwkgKiB1bmxpbmsgdGhpcyBVUkIgZnJvbSB0aGUgaGFyZHdhcmUuICBTbyB0aGVyZSdzIG5vIG1vcmUgd29yayB0byBkby4KKwkgKi8KKwlpZiAodXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSB7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBkb25lOworCX0KKworCS8qIElSUSBzZXR1cCBjYW4gZWFzaWx5IGJlIGJyb2tlbiBzbyB0aGF0IFVTQiBjb250cm9sbGVycworCSAqIG5ldmVyIGdldCBjb21wbGV0aW9uIElSUXMgLi4uIG1heWJlIGV2ZW4gdGhlIG9uZXMgd2UgbmVlZCB0bworCSAqIGZpbmlzaCB1bmxpbmtpbmcgdGhlIGluaXRpYWwgZmFpbGVkIHVzYl9zZXRfYWRkcmVzcygpCisJICogb3IgZGV2aWNlIGRlc2NyaXB0b3IgZmV0Y2guCisJICovCisJaWYgKCFoY2QtPnNhd19pcnEgJiYgaGNkLT5zZWxmLnJvb3RfaHViICE9IHVyYi0+ZGV2KSB7CisJCWRldl93YXJuIChoY2QtPnNlbGYuY29udHJvbGxlciwgIlVubGluayBhZnRlciBuby1JUlE/ICAiCisJCQkiQ29udHJvbGxlciBpcyBwcm9iYWJseSB1c2luZyB0aGUgd3JvbmcgSVJRLiIKKwkJCSJcbiIpOworCQloY2QtPnNhd19pcnEgPSAxOworCX0KKworCXVyYi0+c3RhdHVzID0gc3RhdHVzOworCisJc3Bpbl91bmxvY2sgKCZoY2RfZGF0YV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmdXJiLT5sb2NrLCBmbGFncyk7CisKKwlyZXR2YWwgPSB1bmxpbmsxIChoY2QsIHVyYik7CisJaWYgKHJldHZhbCA9PSAwKQorCQlyZXR2YWwgPSAtRUlOUFJPR1JFU1M7CisJcmV0dXJuIHJldHZhbDsKKworZG9uZToKKwlzcGluX3VubG9jayAoJmhjZF9kYXRhX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZ1cmItPmxvY2ssIGZsYWdzKTsKKwlpZiAocmV0dmFsICE9IC1FSURSTSAmJiBzeXMgJiYgc3lzLT5kcml2ZXIpCisJCWRldl9kYmcgKHN5cywgImhjZF91bmxpbmtfdXJiICVwIGZhaWwgJWRcbiIsIHVyYiwgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBkaXNhYmxlcyB0aGUgZW5kcG9pbnQ6IGNhbmNlbHMgYW55IHBlbmRpbmcgdXJicywgdGhlbiBzeW5jaHJvbml6ZXMgd2l0aAorICogdGhlIGhjZCB0byBtYWtlIHN1cmUgYWxsIGVuZHBvaW50IHN0YXRlIGlzIGdvbmUgZnJvbSBoYXJkd2FyZS4gdXNlIGZvcgorICogc2V0X2NvbmZpZ3VyYXRpb24sIHNldF9pbnRlcmZhY2UsIGRyaXZlciByZW1vdmFsLCBwaHlzaWNhbCBkaXNjb25uZWN0LgorICoKKyAqIGV4YW1wbGU6ICBhIHFoIHN0b3JlZCBpbiBlcC0+aGNwcml2LCBob2xkaW5nIHN0YXRlIHJlbGF0ZWQgdG8gZW5kcG9pbnQKKyAqIHR5cGUsIG1heHBhY2tldCBzaXplLCB0b2dnbGUsIGhhbHQgc3RhdHVzLCBhbmQgc2NoZWR1bGluZy4KKyAqLworc3RhdGljIHZvaWQKK2hjZF9lbmRwb2ludF9kaXNhYmxlIChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCkKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKwlzdHJ1Y3QgdXJiCQkqdXJiOworCisJaGNkID0gdWRldi0+YnVzLT5oY3ByaXY7CisKKwlXQVJOX09OICghSENfSVNfUlVOTklORyAoaGNkLT5zdGF0ZSkgJiYgaGNkLT5zdGF0ZSAhPSBIQ19TVEFURV9IQUxUKTsKKworCWxvY2FsX2lycV9kaXNhYmxlICgpOworCisJLyogRklYTUUgbW92ZSBtb3N0IG9mIHRoaXMgaW50byBtZXNzYWdlLmMgYXMgcGFydCBvZiBpdHMKKwkgKiBlbmRwb2ludCBkaXNhYmxlIGxvZ2ljCisJICovCisKKwkvKiBlcCBpcyBhbHJlYWR5IGdvbmUgZnJvbSB1ZGV2LT5lcF97aW4sb3V0fVtdOyBubyBtb3JlIHN1Ym1pdHMgKi8KK3Jlc2NhbjoKKwlzcGluX2xvY2sgKCZoY2RfZGF0YV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5ICh1cmIsICZlcC0+dXJiX2xpc3QsIHVyYl9saXN0KSB7CisJCWludAl0bXA7CisKKwkJLyogYW5vdGhlciBjcHUgbWF5IGJlIGluIGhjZCwgc3Bpbm5pbmcgb24gaGNkX2RhdGFfbG9jaworCQkgKiB0byBnaXZlYmFjaygpIHRoaXMgdXJiLiAgdGhlIHJhY2VzIGhlcmUgc2hvdWxkIGJlCisJCSAqIHNtYWxsLCBidXQgYSBmdWxsIGZpeCBuZWVkcyBhIG5ldyAiY2FuJ3Qgc3VibWl0IgorCQkgKiB1cmIgc3RhdGUuCisJCSAqIEZJWE1FIHVyYi0+cmVqZWN0IHNob3VsZCBhbGxvdyB0aGF0Li4uCisJCSAqLworCQlpZiAodXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKQorCQkJY29udGludWU7CisJCXVzYl9nZXRfdXJiICh1cmIpOworCQlzcGluX3VubG9jayAoJmhjZF9kYXRhX2xvY2spOworCisJCXNwaW5fbG9jayAoJnVyYi0+bG9jayk7CisJCXRtcCA9IHVyYi0+c3RhdHVzOworCQlpZiAodG1wID09IC1FSU5QUk9HUkVTUykKKwkJCXVyYi0+c3RhdHVzID0gLUVTSFVURE9XTjsKKwkJc3Bpbl91bmxvY2sgKCZ1cmItPmxvY2spOworCisJCS8qIGtpY2sgaGNkIHVubGVzcyBpdCdzIGFscmVhZHkgcmV0dXJuaW5nIHRoaXMgKi8KKwkJaWYgKHRtcCA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJCXRtcCA9IHVyYi0+cGlwZTsKKwkJCXVubGluazEgKGhjZCwgdXJiKTsKKwkJCWRldl9kYmcgKGhjZC0+c2VsZi5jb250cm9sbGVyLAorCQkJCSJzaHV0ZG93biB1cmIgJXAgcGlwZSAlMDh4IGVwJWQlcyVzXG4iLAorCQkJCXVyYiwgdG1wLCB1c2JfcGlwZWVuZHBvaW50ICh0bXApLAorCQkJCSh0bXAgJiBVU0JfRElSX0lOKSA/ICJpbiIgOiAib3V0IiwKKwkJCQkoeyBjaGFyICpzOyBcCisJCQkJIHN3aXRjaCAodXNiX3BpcGV0eXBlICh0bXApKSB7IFwKKwkJCQkgY2FzZSBQSVBFX0NPTlRST0w6CXMgPSAiIjsgYnJlYWs7IFwKKwkJCQkgY2FzZSBQSVBFX0JVTEs6CXMgPSAiLWJ1bGsiOyBicmVhazsgXAorCQkJCSBjYXNlIFBJUEVfSU5URVJSVVBUOglzID0gIi1pbnRyIjsgYnJlYWs7IFwKKwkJCQkgZGVmYXVsdDogCQlzID0gIi1pc28iOyBicmVhazsgXAorCQkJCX07IHM7fSkpOworCQl9CisJCXVzYl9wdXRfdXJiICh1cmIpOworCisJCS8qIGxpc3QgY29udGVudHMgbWF5IGhhdmUgY2hhbmdlZCAqLworCQlnb3RvIHJlc2NhbjsKKwl9CisJc3Bpbl91bmxvY2sgKCZoY2RfZGF0YV9sb2NrKTsKKwlsb2NhbF9pcnFfZW5hYmxlICgpOworCisJLyogc3luY2hyb25pemUgd2l0aCB0aGUgaGFyZHdhcmUsIHNvIG9sZCBjb25maWd1cmF0aW9uIHN0YXRlCisJICogY2xlYXJzIG91dCBpbW1lZGlhdGVseSAoYW5kIHdpbGwgYmUgZnJlZWQpLgorCSAqLworCW1pZ2h0X3NsZWVwICgpOworCWlmIChoY2QtPmRyaXZlci0+ZW5kcG9pbnRfZGlzYWJsZSkKKwkJaGNkLT5kcml2ZXItPmVuZHBvaW50X2Rpc2FibGUgKGhjZCwgZXApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECisKK3N0YXRpYyBpbnQgaGNkX2h1Yl9zdXNwZW5kIChzdHJ1Y3QgdXNiX2J1cyAqYnVzKQoreworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCisJaGNkID0gY29udGFpbmVyX29mIChidXMsIHN0cnVjdCB1c2JfaGNkLCBzZWxmKTsKKwlpZiAoaGNkLT5kcml2ZXItPmh1Yl9zdXNwZW5kKQorCQlyZXR1cm4gaGNkLT5kcml2ZXItPmh1Yl9zdXNwZW5kIChoY2QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhjZF9odWJfcmVzdW1lIChzdHJ1Y3QgdXNiX2J1cyAqYnVzKQoreworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCisJaGNkID0gY29udGFpbmVyX29mIChidXMsIHN0cnVjdCB1c2JfaGNkLCBzZWxmKTsKKwlpZiAoaGNkLT5kcml2ZXItPmh1Yl9yZXN1bWUpCisJCXJldHVybiBoY2QtPmRyaXZlci0+aHViX3Jlc3VtZSAoaGNkKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB1c2JfaGNkX3Jlc3VtZV9yb290X2h1YiAtIGNhbGxlZCBieSBIQ0QgdG8gcmVzdW1lIGl0cyByb290IGh1YiAKKyAqIEBoY2Q6IGhvc3QgY29udHJvbGxlciBmb3IgdGhpcyByb290IGh1YgorICoKKyAqIFRoZSBVU0IgaG9zdCBjb250cm9sbGVyIGNhbGxzIHRoaXMgZnVuY3Rpb24gd2hlbiBpdHMgcm9vdCBodWIgaXMKKyAqIHN1c3BlbmRlZCAod2l0aCB0aGUgcmVtb3RlIHdha2V1cCBmZWF0dXJlIGVuYWJsZWQpIGFuZCBhIHJlbW90ZQorICogd2FrZXVwIHJlcXVlc3QgaXMgcmVjZWl2ZWQuICBJdCBxdWV1ZXMgYSByZXF1ZXN0IGZvciBraHViZCB0bworICogcmVzdW1lIHRoZSByb290IGh1Yi4KKyAqLwordm9pZCB1c2JfaGNkX3Jlc3VtZV9yb290X2h1YiAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZoY2Rfcm9vdF9odWJfbG9jaywgZmxhZ3MpOworCWlmIChoY2QtPnJoX3JlZ2lzdGVyZWQpCisJCXVzYl9yZXN1bWVfcm9vdF9odWIgKGhjZC0+c2VsZi5yb290X2h1Yik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmhjZF9yb290X2h1Yl9sb2NrLCBmbGFncyk7Cit9CisKKyNlbHNlCit2b2lkIHVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworfQorI2VuZGlmCitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfaGNkX3Jlc3VtZV9yb290X2h1Yik7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZglDT05GSUdfVVNCX09URworCisvKioKKyAqIHVzYl9idXNfc3RhcnRfZW51bSAtIHN0YXJ0IGltbWVkaWF0ZSBlbnVtZXJhdGlvbiAoZm9yIE9URykKKyAqIEBidXM6IHRoZSBidXMgKG11c3QgdXNlIGhjZCBmcmFtZXdvcmspCisgKiBAcG9ydF9udW06IDEtYmFzZWQgbnVtYmVyIG9mIHBvcnQ7IHVzdWFsbHkgYnVzLT5vdGdfcG9ydAorICogQ29udGV4dDogaW5faW50ZXJydXB0KCkKKyAqCisgKiBTdGFydHMgZW51bWVyYXRpb24sIHdpdGggYW4gaW1tZWRpYXRlIHJlc2V0IGZvbGxvd2VkIGxhdGVyIGJ5CisgKiBraHViZCBpZGVudGlmeWluZyBhbmQgcG9zc2libHkgY29uZmlndXJpbmcgdGhlIGRldmljZS4KKyAqIFRoaXMgaXMgbmVlZGVkIGJ5IE9URyBjb250cm9sbGVyIGRyaXZlcnMsIHdoZXJlIGl0IGhlbHBzIG1lZXQKKyAqIEhOUCBwcm90b2NvbCB0aW1pbmcgcmVxdWlyZW1lbnRzIGZvciBzdGFydGluZyBhIHBvcnQgcmVzZXQuCisgKi8KK2ludCB1c2JfYnVzX3N0YXJ0X2VudW0oc3RydWN0IHVzYl9idXMgKmJ1cywgdW5zaWduZWQgcG9ydF9udW0pCit7CisJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CisJaW50CQkJc3RhdHVzID0gLUVPUE5PVFNVUFA7CisKKwkvKiBOT1RFOiBzaW5jZSBITlAgY2FuJ3Qgc3RhcnQgYnkgZ3JhYmJpbmcgdGhlIGJ1cydzIGFkZHJlc3MwX3NlbSwKKwkgKiBib2FyZHMgd2l0aCByb290IGh1YnMgaG9va2VkIHVwIHRvIGludGVybmFsIGRldmljZXMgKGluc3RlYWQgb2YKKwkgKiBqdXN0IHRoZSBPVEcgcG9ydCkgbWF5IG5lZWQgbW9yZSBhdHRlbnRpb24gdG8gcmVzZXR0aW5nLi4uCisJICovCisJaGNkID0gY29udGFpbmVyX29mIChidXMsIHN0cnVjdCB1c2JfaGNkLCBzZWxmKTsKKwlpZiAocG9ydF9udW0gJiYgaGNkLT5kcml2ZXItPnN0YXJ0X3BvcnRfcmVzZXQpCisJCXN0YXR1cyA9IGhjZC0+ZHJpdmVyLT5zdGFydF9wb3J0X3Jlc2V0KGhjZCwgcG9ydF9udW0pOworCisJLyogcnVuIGtodWJkIHNob3J0bHkgYWZ0ZXIgKGZpcnN0KSByb290IHBvcnQgcmVzZXQgZmluaXNoZXM7CisJICogaXQgbWF5IGlzc3VlIG90aGVycywgdW50aWwgYXQgbGVhc3QgNTAgbXNlY3MgaGF2ZSBwYXNzZWQuCisJICovCisJaWYgKHN0YXR1cyA9PSAwKQorCQltb2RfdGltZXIoJmhjZC0+cmhfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwKSk7CisJcmV0dXJuIHN0YXR1czsKK30KK0VYUE9SVF9TWU1CT0wgKHVzYl9idXNfc3RhcnRfZW51bSk7CisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogdXNiX2hjZF9vcGVyYXRpb25zIC0gYWRhcHRzIHVzYl9idXMgZnJhbWV3b3JrIHRvIEhDRCBmcmFtZXdvcmsgKGJ1cyBnbHVlKQorICovCitzdGF0aWMgc3RydWN0IHVzYl9vcGVyYXRpb25zIHVzYl9oY2Rfb3BlcmF0aW9ucyA9IHsKKwkuZ2V0X2ZyYW1lX251bWJlciA9CWhjZF9nZXRfZnJhbWVfbnVtYmVyLAorCS5zdWJtaXRfdXJiID0JCWhjZF9zdWJtaXRfdXJiLAorCS51bmxpbmtfdXJiID0JCWhjZF91bmxpbmtfdXJiLAorCS5idWZmZXJfYWxsb2MgPQkJaGNkX2J1ZmZlcl9hbGxvYywKKwkuYnVmZmVyX2ZyZWUgPQkJaGNkX2J1ZmZlcl9mcmVlLAorCS5kaXNhYmxlID0JCWhjZF9lbmRwb2ludF9kaXNhYmxlLAorI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAorCS5odWJfc3VzcGVuZCA9CQloY2RfaHViX3N1c3BlbmQsCisJLmh1Yl9yZXN1bWUgPQkJaGNkX2h1Yl9yZXN1bWUsCisjZW5kaWYKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogdXNiX2hjZF9naXZlYmFja191cmIgLSByZXR1cm4gVVJCIGZyb20gSENEIHRvIGRldmljZSBkcml2ZXIKKyAqIEBoY2Q6IGhvc3QgY29udHJvbGxlciByZXR1cm5pbmcgdGhlIFVSQgorICogQHVyYjogdXJiIGJlaW5nIHJldHVybmVkIHRvIHRoZSBVU0IgZGV2aWNlIGRyaXZlci4KKyAqIEByZWdzOiBwdF9yZWdzLCBwYXNzZWQgZG93biB0byB0aGUgVVJCIGNvbXBsZXRpb24gaGFuZGxlcgorICogQ29udGV4dDogaW5faW50ZXJydXB0KCkKKyAqCisgKiBUaGlzIGhhbmRzIHRoZSBVUkIgZnJvbSBIQ0QgdG8gaXRzIFVTQiBkZXZpY2UgZHJpdmVyLCB1c2luZyBpdHMKKyAqIGNvbXBsZXRpb24gZnVuY3Rpb24uICBUaGUgSENEIGhhcyBmcmVlZCBhbGwgcGVyLXVyYiByZXNvdXJjZXMKKyAqIChhbmQgaXMgZG9uZSB1c2luZyB1cmItPmhjcHJpdikuICBJdCBhbHNvIHJlbGVhc2VkIGFsbCBIQ0QgbG9ja3M7CisgKiB0aGUgZGV2aWNlIGRyaXZlciB3b24ndCBjYXVzZSBwcm9ibGVtcyBpZiBpdCBmcmVlcywgbW9kaWZpZXMsCisgKiBvciByZXN1Ym1pdHMgdGhpcyBVUkIuCisgKi8KK3ZvaWQgdXNiX2hjZF9naXZlYmFja191cmIgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGF0X3Jvb3RfaHViOworCisJYXRfcm9vdF9odWIgPSAodXJiLT5kZXYgPT0gaGNkLT5zZWxmLnJvb3RfaHViKTsKKwl1cmJfdW5saW5rICh1cmIpOworCisJLyogbG93ZXIgbGV2ZWwgaGNkIGNvZGUgc2hvdWxkIHVzZSAqX2RtYSBleGNsdXNpdmVseSAqLworCWlmIChoY2QtPnNlbGYuY29udHJvbGxlci0+ZG1hX21hc2sgJiYgIWF0X3Jvb3RfaHViKSB7CisJCWlmICh1c2JfcGlwZWNvbnRyb2wgKHVyYi0+cGlwZSkKKwkJCSYmICEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9OT19TRVRVUF9ETUFfTUFQKSkKKwkJCWRtYV91bm1hcF9zaW5nbGUgKGhjZC0+c2VsZi5jb250cm9sbGVyLCB1cmItPnNldHVwX2RtYSwKKwkJCQkJc2l6ZW9mIChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSwKKwkJCQkJRE1BX1RPX0RFVklDRSk7CisJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggIT0gMAorCQkJJiYgISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVApKQorCQkJZG1hX3VubWFwX3NpbmdsZSAoaGNkLT5zZWxmLmNvbnRyb2xsZXIsIAorCQkJCQl1cmItPnRyYW5zZmVyX2RtYSwKKwkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCQl1c2JfcGlwZWluICh1cmItPnBpcGUpCisJCQkJCSAgICA/IERNQV9GUk9NX0RFVklDRQorCQkJCQkgICAgOiBETUFfVE9fREVWSUNFKTsKKwl9CisKKwl1c2Jtb25fdXJiX2NvbXBsZXRlICgmaGNkLT5zZWxmLCB1cmIpOworCS8qIHBhc3Mgb3duZXJzaGlwIHRvIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgKi8KKwl1cmItPmNvbXBsZXRlICh1cmIsIHJlZ3MpOworCWF0b21pY19kZWMgKCZ1cmItPnVzZV9jb3VudCk7CisJaWYgKHVubGlrZWx5ICh1cmItPnJlamVjdCkpCisJCXdha2VfdXAgKCZ1c2Jfa2lsbF91cmJfcXVldWUpOworCXVzYl9wdXRfdXJiICh1cmIpOworfQorRVhQT1JUX1NZTUJPTCAodXNiX2hjZF9naXZlYmFja191cmIpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIHVzYl9oY2RfaXJxIC0gaG9vayBJUlFzIHRvIEhDRCBmcmFtZXdvcmsgKGJ1cyBnbHVlKQorICogQGlycTogdGhlIElSUSBiZWluZyByYWlzZWQKKyAqIEBfX2hjZDogcG9pbnRlciB0byB0aGUgSENEIHdob3NlIElSUSBpcyBiZWluZyBzaWduYWxlZAorICogQHI6IHNhdmVkIGhhcmR3YXJlIHJlZ2lzdGVycworICoKKyAqIElmIHRoZSBjb250cm9sbGVyIGlzbid0IEhBTFRlZCwgY2FsbHMgdGhlIGRyaXZlcidzIGlycSBoYW5kbGVyLgorICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbnRyb2xsZXIgaXMgbm93IGRlYWQuCisgKi8KK2lycXJldHVybl90IHVzYl9oY2RfaXJxIChpbnQgaXJxLCB2b2lkICpfX2hjZCwgc3RydWN0IHB0X3JlZ3MgKiByKQoreworCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0gX19oY2Q7CisJaW50CQkJc3RhcnQgPSBoY2QtPnN0YXRlOworCisJaWYgKHN0YXJ0ID09IEhDX1NUQVRFX0hBTFQpCisJCXJldHVybiBJUlFfTk9ORTsKKwlpZiAoaGNkLT5kcml2ZXItPmlycSAoaGNkLCByKSA9PSBJUlFfTk9ORSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJaGNkLT5zYXdfaXJxID0gMTsKKwlpZiAoaGNkLT5zdGF0ZSAhPSBzdGFydCAmJiBoY2QtPnN0YXRlID09IEhDX1NUQVRFX0hBTFQpCisJCXVzYl9oY19kaWVkIChoY2QpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiB1c2JfaGNfZGllZCAtIHJlcG9ydCBhYm5vcm1hbCBzaHV0ZG93biBvZiBhIGhvc3QgY29udHJvbGxlciAoYnVzIGdsdWUpCisgKiBAaGNkOiBwb2ludGVyIHRvIHRoZSBIQ0QgcmVwcmVzZW50aW5nIHRoZSBjb250cm9sbGVyCisgKgorICogVGhpcyBpcyBjYWxsZWQgYnkgYnVzIGdsdWUgdG8gcmVwb3J0IGEgVVNCIGhvc3QgY29udHJvbGxlciB0aGF0IGRpZWQKKyAqIHdoaWxlIG9wZXJhdGlvbnMgbWF5IHN0aWxsIGhhdmUgYmVlbiBwZW5kaW5nLiAgSXQncyBjYWxsZWQgYXV0b21hdGljYWxseQorICogYnkgdGhlIFBDSSBnbHVlLCBzbyBvbmx5IGdsdWUgZm9yIG5vbi1QQ0kgYnVzc2VzIHNob3VsZCBuZWVkIHRvIGNhbGwgaXQuIAorICovCit2b2lkIHVzYl9oY19kaWVkIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkZXZfZXJyIChoY2QtPnNlbGYuY29udHJvbGxlciwgIkhDIGRpZWQ7IGNsZWFuaW5nIHVwXG4iKTsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmaGNkX3Jvb3RfaHViX2xvY2ssIGZsYWdzKTsKKwlpZiAoaGNkLT5yaF9yZWdpc3RlcmVkKSB7CisKKwkJLyogbWFrZSBraHViZCBjbGVhbiB1cCBvbGQgdXJicyBhbmQgZGV2aWNlcyAqLworCQl1c2Jfc2V0X2RldmljZV9zdGF0ZSAoaGNkLT5zZWxmLnJvb3RfaHViLAorCQkJCVVTQl9TVEFURV9OT1RBVFRBQ0hFRCk7CisJCXVzYl9raWNrX2todWJkIChoY2QtPnNlbGYucm9vdF9odWIpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmaGNkX3Jvb3RfaHViX2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMICh1c2JfaGNfZGllZCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIGhjZF9yZWxlYXNlIChzdHJ1Y3QgdXNiX2J1cyAqYnVzKQoreworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisKKwloY2QgPSBjb250YWluZXJfb2YoYnVzLCBzdHJ1Y3QgdXNiX2hjZCwgc2VsZik7CisJa2ZyZWUoaGNkKTsKK30KKworLyoqCisgKiB1c2JfY3JlYXRlX2hjZCAtIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBIQ0Qgc3RydWN0dXJlCisgKiBAZHJpdmVyOiBIQyBkcml2ZXIgdGhhdCB3aWxsIHVzZSB0aGlzIGhjZAorICogQGRldjogZGV2aWNlIGZvciB0aGlzIEhDLCBzdG9yZWQgaW4gaGNkLT5zZWxmLmNvbnRyb2xsZXIKKyAqIEBidXNfbmFtZTogdmFsdWUgdG8gc3RvcmUgaW4gaGNkLT5zZWxmLmJ1c19uYW1lCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBBbGxvY2F0ZSBhIHN0cnVjdCB1c2JfaGNkLCB3aXRoIGV4dHJhIHNwYWNlIGF0IHRoZSBlbmQgZm9yIHRoZQorICogSEMgZHJpdmVyJ3MgcHJpdmF0ZSBkYXRhLiAgSW5pdGlhbGl6ZSB0aGUgZ2VuZXJpYyBtZW1iZXJzIG9mIHRoZQorICogaGNkIHN0cnVjdHVyZS4KKyAqCisgKiBJZiBtZW1vcnkgaXMgdW5hdmFpbGFibGUsIHJldHVybnMgTlVMTC4KKyAqLworc3RydWN0IHVzYl9oY2QgKnVzYl9jcmVhdGVfaGNkIChjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIsCisJCXN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVzX25hbWUpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKKworCWhjZCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpoY2QpICsgZHJpdmVyLT5oY2RfcHJpdl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhjZCkgeworCQlkZXZfZGJnIChkZXYsICJoY2QgYWxsb2MgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGhjZCk7CisKKwl1c2JfYnVzX2luaXQoJmhjZC0+c2VsZik7CisJaGNkLT5zZWxmLm9wID0gJnVzYl9oY2Rfb3BlcmF0aW9uczsKKwloY2QtPnNlbGYuaGNwcml2ID0gaGNkOworCWhjZC0+c2VsZi5yZWxlYXNlID0gJmhjZF9yZWxlYXNlOworCWhjZC0+c2VsZi5jb250cm9sbGVyID0gZGV2OworCWhjZC0+c2VsZi5idXNfbmFtZSA9IGJ1c19uYW1lOworCisJaW5pdF90aW1lcigmaGNkLT5yaF90aW1lcik7CisKKwloY2QtPmRyaXZlciA9IGRyaXZlcjsKKwloY2QtPnByb2R1Y3RfZGVzYyA9IChkcml2ZXItPnByb2R1Y3RfZGVzYykgPyBkcml2ZXItPnByb2R1Y3RfZGVzYyA6CisJCQkiVVNCIEhvc3QgQ29udHJvbGxlciI7CisKKwlyZXR1cm4gaGNkOworfQorRVhQT1JUX1NZTUJPTCAodXNiX2NyZWF0ZV9oY2QpOworCit2b2lkIHVzYl9wdXRfaGNkIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCWRldl9zZXRfZHJ2ZGF0YShoY2QtPnNlbGYuY29udHJvbGxlciwgTlVMTCk7CisJdXNiX2J1c19wdXQoJmhjZC0+c2VsZik7Cit9CitFWFBPUlRfU1lNQk9MICh1c2JfcHV0X2hjZCk7CisKKy8qKgorICogdXNiX2FkZF9oY2QgLSBmaW5pc2ggZ2VuZXJpYyBIQ0Qgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIGFuZCByZWdpc3RlcgorICogQGhjZDogdGhlIHVzYl9oY2Qgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqIEBpcnFudW06IEludGVycnVwdCBsaW5lIHRvIGFsbG9jYXRlCisgKiBAaXJxZmxhZ3M6IEludGVycnVwdCB0eXBlIGZsYWdzCisgKgorICogRmluaXNoIHRoZSByZW1haW5pbmcgcGFydHMgb2YgZ2VuZXJpYyBIQ0QgaW5pdGlhbGl6YXRpb246IGFsbG9jYXRlIHRoZQorICogYnVmZmVycyBvZiBjb25zaXN0ZW50IG1lbW9yeSwgcmVnaXN0ZXIgdGhlIGJ1cywgcmVxdWVzdCB0aGUgSVJRIGxpbmUsCisgKiBhbmQgY2FsbCB0aGUgZHJpdmVyJ3MgcmVzZXQoKSBhbmQgc3RhcnQoKSByb3V0aW5lcy4KKyAqLworaW50IHVzYl9hZGRfaGNkKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJCXVuc2lnbmVkIGludCBpcnFudW0sIHVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MpCit7CisJaW50CXJldHZhbDsKKworCWRldl9pbmZvKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiJXNcbiIsIGhjZC0+cHJvZHVjdF9kZXNjKTsKKworCS8qIHRpbGwgbm93IEhDIGhhcyBiZWVuIGluIGFuIGluZGV0ZXJtaW5hdGUgc3RhdGUgLi4uICovCisJaWYgKGhjZC0+ZHJpdmVyLT5yZXNldCAmJiAocmV0dmFsID0gaGNkLT5kcml2ZXItPnJlc2V0KGhjZCkpIDwgMCkgeworCQlkZXZfZXJyKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiY2FuJ3QgcmVzZXRcbiIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmICgocmV0dmFsID0gaGNkX2J1ZmZlcl9jcmVhdGUoaGNkKSkgIT0gMCkgeworCQlkZXZfZGJnKGhjZC0+c2VsZi5jb250cm9sbGVyLCAicG9vbCBhbGxvYyBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmICgocmV0dmFsID0gdXNiX3JlZ2lzdGVyX2J1cygmaGNkLT5zZWxmKSkgPCAwKQorCQlnb3RvIGVycjE7CisKKwlpZiAoaGNkLT5kcml2ZXItPmlycSkgeworCQljaGFyCWJ1Zls4XSwgKmJ1ZnAgPSBidWY7CisKKyNpZmRlZiBfX3NwYXJjX18KKwkJYnVmcCA9IF9faXJxX2l0b2EoaXJxbnVtKTsKKyNlbHNlCisJCXNwcmludGYoYnVmLCAiJWQiLCBpcnFudW0pOworI2VuZGlmCisKKwkJc25wcmludGYoaGNkLT5pcnFfZGVzY3IsIHNpemVvZihoY2QtPmlycV9kZXNjciksICIlczp1c2IlZCIsCisJCQkJaGNkLT5kcml2ZXItPmRlc2NyaXB0aW9uLCBoY2QtPnNlbGYuYnVzbnVtKTsKKwkJaWYgKChyZXR2YWwgPSByZXF1ZXN0X2lycShpcnFudW0sICZ1c2JfaGNkX2lycSwgaXJxZmxhZ3MsCisJCQkJaGNkLT5pcnFfZGVzY3IsIGhjZCkpICE9IDApIHsKKwkJCWRldl9lcnIoaGNkLT5zZWxmLmNvbnRyb2xsZXIsCisJCQkJCSJyZXF1ZXN0IGludGVycnVwdCAlcyBmYWlsZWRcbiIsIGJ1ZnApOworCQkJZ290byBlcnIyOworCQl9CisJCWhjZC0+aXJxID0gaXJxbnVtOworCQlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgImlycSAlcywgJXMgMHglMDhsbHhcbiIsIGJ1ZnAsCisJCQkJKGhjZC0+ZHJpdmVyLT5mbGFncyAmIEhDRF9NRU1PUlkpID8KKwkJCQkJImlvIG1lbSIgOiAiaW8gYmFzZSIsCisJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpaGNkLT5yc3JjX3N0YXJ0KTsKKwl9IGVsc2UgeworCQloY2QtPmlycSA9IC0xOworCQlpZiAoaGNkLT5yc3JjX3N0YXJ0KQorCQkJZGV2X2luZm8oaGNkLT5zZWxmLmNvbnRyb2xsZXIsICIlcyAweCUwOGxseFxuIiwKKwkJCQkJKGhjZC0+ZHJpdmVyLT5mbGFncyAmIEhDRF9NRU1PUlkpID8KKwkJCQkJImlvIG1lbSIgOiAiaW8gYmFzZSIsCisJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpaGNkLT5yc3JjX3N0YXJ0KTsKKwl9CisKKwlpZiAoKHJldHZhbCA9IGhjZC0+ZHJpdmVyLT5zdGFydChoY2QpKSA8IDApIHsKKwkJZGV2X2VycihoY2QtPnNlbGYuY29udHJvbGxlciwgInN0YXJ0dXAgZXJyb3IgJWRcbiIsIHJldHZhbCk7CisJCWdvdG8gZXJyMzsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworCisgZXJyMzoKKwlpZiAoaGNkLT5pcnEgPj0gMCkKKwkJZnJlZV9pcnEoaXJxbnVtLCBoY2QpOworIGVycjI6CisJdXNiX2RlcmVnaXN0ZXJfYnVzKCZoY2QtPnNlbGYpOworIGVycjE6CisJaGNkX2J1ZmZlcl9kZXN0cm95KGhjZCk7CisJcmV0dXJuIHJldHZhbDsKK30gCitFWFBPUlRfU1lNQk9MICh1c2JfYWRkX2hjZCk7CisKKy8qKgorICogdXNiX3JlbW92ZV9oY2QgLSBzaHV0ZG93biBwcm9jZXNzaW5nIGZvciBnZW5lcmljIEhDRHMKKyAqIEBoY2Q6IHRoZSB1c2JfaGNkIHN0cnVjdHVyZSB0byByZW1vdmUKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIERpc2Nvbm5lY3RzIHRoZSByb290IGh1YiwgdGhlbiByZXZlcnNlcyB0aGUgZWZmZWN0cyBvZiB1c2JfYWRkX2hjZCgpLAorICogaW52b2tpbmcgdGhlIEhDRCdzIHN0b3AoKSBtZXRob2QuCisgKi8KK3ZvaWQgdXNiX3JlbW92ZV9oY2Qoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgInJlbW92ZSwgc3RhdGUgJXhcbiIsIGhjZC0+c3RhdGUpOworCisJaWYgKEhDX0lTX1JVTk5JTkcgKGhjZC0+c3RhdGUpKQorCQloY2QtPnN0YXRlID0gSENfU1RBVEVfUVVJRVNDSU5HOworCisJZGV2X2RiZyhoY2QtPnNlbGYuY29udHJvbGxlciwgInJvb3RodWIgZ3JhY2VmdWwgZGlzY29ubmVjdFxuIik7CisJc3Bpbl9sb2NrX2lycSAoJmhjZF9yb290X2h1Yl9sb2NrKTsKKwloY2QtPnJoX3JlZ2lzdGVyZWQgPSAwOworCXNwaW5fdW5sb2NrX2lycSAoJmhjZF9yb290X2h1Yl9sb2NrKTsKKwl1c2JfZGlzY29ubmVjdCgmaGNkLT5zZWxmLnJvb3RfaHViKTsKKworCWhjZC0+ZHJpdmVyLT5zdG9wKGhjZCk7CisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX0hBTFQ7CisKKwlpZiAoaGNkLT5pcnEgPj0gMCkKKwkJZnJlZV9pcnEoaGNkLT5pcnEsIGhjZCk7CisJdXNiX2RlcmVnaXN0ZXJfYnVzKCZoY2QtPnNlbGYpOworCWhjZF9idWZmZXJfZGVzdHJveShoY2QpOworfQorRVhQT1JUX1NZTUJPTCAodXNiX3JlbW92ZV9oY2QpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX01PTikgfHwgZGVmaW5lZChDT05GSUdfVVNCX01PTl9NT0RVTEUpCisKK3N0cnVjdCB1c2JfbW9uX29wZXJhdGlvbnMgKm1vbl9vcHM7CisKKy8qCisgKiBUaGUgcmVnaXN0cmF0aW9uIGlzIHVubG9ja2VkLgorICogV2UgZG8gaXQgdGhpcyB3YXkgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0byBsb2NrIGluIGhvdCBwYXRocy4KKyAqCisgKiBOb3RpY2UgdGhhdCB0aGUgY29kZSBpcyBtaW5pbWFsbHkgZXJyb3ItcHJvb2YuIEJlY2F1c2UgdXNibW9uIG5lZWRzCisgKiBzeW1ib2xzIGZyb20gdXNiY29yZSwgdXNiY29yZSBnZXRzIHJlZmVyZW5jZWQgYW5kIGNhbm5vdCBiZSB1bmxvYWRlZCBmaXJzdC4KKyAqLworIAoraW50IHVzYl9tb25fcmVnaXN0ZXIgKHN0cnVjdCB1c2JfbW9uX29wZXJhdGlvbnMgKm9wcykKK3sKKworCWlmIChtb25fb3BzKQorCQlyZXR1cm4gLUVCVVNZOworCisJbW9uX29wcyA9IG9wczsKKwltYigpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwgKHVzYl9tb25fcmVnaXN0ZXIpOworCit2b2lkIHVzYl9tb25fZGVyZWdpc3RlciAodm9pZCkKK3sKKworCWlmIChtb25fb3BzID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVU0I6IG1vbml0b3Igd2FzIG5vdCByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuOworCX0KKwltb25fb3BzID0gTlVMTDsKKwltYigpOworfQorRVhQT1JUX1NZTUJPTF9HUEwgKHVzYl9tb25fZGVyZWdpc3Rlcik7CisKKyNlbmRpZiAvKiBDT05GSUdfVVNCX01PTiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuaCBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM2MjViMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmgKQEAgLTAsMCArMSw0NzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiBieSBEYXZpZCBCcm93bmVsbAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKworI2lmZGVmIF9fS0VSTkVMX18KKworLyogVGhpcyBmaWxlIGNvbnRhaW5zIGRlY2xhcmF0aW9ucyBvZiB1c2Jjb3JlIGludGVybmFscyB0aGF0IGFyZSBtb3N0bHkKKyAqIHVzZWQgb3IgZXhwb3NlZCBieSBIb3N0IENvbnRyb2xsZXIgRHJpdmVycy4KKyAqLworCisvKgorICogVVNCIFBhY2tldCBJRHMgKFBJRHMpCisgKi8KKyNkZWZpbmUgVVNCX1BJRF9VTkRFRl8wCQkJMHhmMAorI2RlZmluZSBVU0JfUElEX09VVAkJCTB4ZTEKKyNkZWZpbmUgVVNCX1BJRF9BQ0sJCQkweGQyCisjZGVmaW5lIFVTQl9QSURfREFUQTAJCQkweGMzCisjZGVmaW5lIFVTQl9QSURfUElORwkJCTB4YjQJLyogVVNCIDIuMCAqLworI2RlZmluZSBVU0JfUElEX1NPRgkJCTB4YTUKKyNkZWZpbmUgVVNCX1BJRF9OWUVUCQkJMHg5NgkvKiBVU0IgMi4wICovCisjZGVmaW5lIFVTQl9QSURfREFUQTIJCQkweDg3CS8qIFVTQiAyLjAgKi8KKyNkZWZpbmUgVVNCX1BJRF9TUExJVAkJCTB4NzgJLyogVVNCIDIuMCAqLworI2RlZmluZSBVU0JfUElEX0lOCQkJMHg2OQorI2RlZmluZSBVU0JfUElEX05BSwkJCTB4NWEKKyNkZWZpbmUgVVNCX1BJRF9EQVRBMQkJCTB4NGIKKyNkZWZpbmUgVVNCX1BJRF9QUkVBTUJMRQkJMHgzYwkvKiBUb2tlbiBtb2RlICovCisjZGVmaW5lIFVTQl9QSURfRVJSCQkJMHgzYwkvKiBVU0IgMi4wOiBoYW5kc2hha2UgbW9kZSAqLworI2RlZmluZSBVU0JfUElEX1NFVFVQCQkJMHgyZAorI2RlZmluZSBVU0JfUElEX1NUQUxMCQkJMHgxZQorI2RlZmluZSBVU0JfUElEX01EQVRBCQkJMHgwZgkvKiBVU0IgMi4wICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlciAodXNiX2hjZCkgZnJhbWV3b3JrCisgKgorICogU2luY2UgInN0cnVjdCB1c2JfYnVzIiBpcyBzbyB0aGluLCB5b3UgY2FuJ3Qgc2hhcmUgbXVjaCBjb2RlIGluIGl0LgorICogVGhpcyBmcmFtZXdvcmsgaXMgYSBsYXllciBvdmVyIHRoYXQsIGFuZCBzaG91bGQgYmUgbW9yZSBzaGFyYWJsZS4KKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdHJ1Y3QgdXNiX2hjZCB7CS8qIHVzYl9idXMuaGNwcml2IHBvaW50cyB0byB0aGlzICovCisKKwkvKgorCSAqIGhvdXNla2VlcGluZworCSAqLworCXN0cnVjdCB1c2JfYnVzCQlzZWxmOwkJLyogaGNkIGlzLWEgYnVzICovCisKKwljb25zdCBjaGFyCQkqcHJvZHVjdF9kZXNjOwkvKiBwcm9kdWN0L3ZlbmRvciBzdHJpbmcgKi8KKwljaGFyCQkJaXJxX2Rlc2NyWzI0XTsJLyogZHJpdmVyICsgYnVzICMgKi8KKworCXN0cnVjdCB0aW1lcl9saXN0CXJoX3RpbWVyOwkvKiBkcml2ZXMgcm9vdCBodWIgKi8KKworCS8qCisJICogaGFyZHdhcmUgaW5mby9zdGF0ZQorCSAqLworCWNvbnN0IHN0cnVjdCBoY19kcml2ZXIJKmRyaXZlcjsJLyogaHctc3BlY2lmaWMgaG9va3MgKi8KKwl1bnNpZ25lZAkJc2F3X2lycSA6IDE7CisJdW5zaWduZWQJCWNhbl93YWtldXA6MTsJLyogaHcgc3VwcG9ydHMgd2FrZXVwPyAqLworCXVuc2lnbmVkCQlyZW1vdGVfd2FrZXVwOjE7Lyogc3cgc2hvdWxkIHVzZSB3YWtldXA/ICovCisJdW5zaWduZWQJCXJoX3JlZ2lzdGVyZWQ6MTsvKiBpcyByb290IGh1YiByZWdpc3RlcmVkPyAqLworCisJaW50CQkJaXJxOwkJLyogaXJxIGFsbG9jYXRlZCAqLworCXZvaWQgX19pb21lbQkJKnJlZ3M7CQkvKiBkZXZpY2UgbWVtb3J5L2lvICovCisJdTY0CQkJcnNyY19zdGFydDsJLyogbWVtb3J5L2lvIHJlc291cmNlIHN0YXJ0ICovCisJdTY0CQkJcnNyY19sZW47CS8qIG1lbW9yeS9pbyByZXNvdXJjZSBsZW5ndGggKi8KKworI2RlZmluZSBIQ0RfQlVGRkVSX1BPT0xTCTQKKwlzdHJ1Y3QgZG1hX3Bvb2wJCSpwb29sIFtIQ0RfQlVGRkVSX1BPT0xTXTsKKworCWludAkJCXN0YXRlOworIwlkZWZpbmUJX19BQ1RJVkUJCTB4MDEKKyMJZGVmaW5lCV9fU1VTUEVORAkJMHgwNAorIwlkZWZpbmUJX19UUkFOU0lFTlQJCTB4ODAKKworIwlkZWZpbmUJSENfU1RBVEVfSEFMVAkJMAorIwlkZWZpbmUJSENfU1RBVEVfUlVOTklORwkoX19BQ1RJVkUpCisjCWRlZmluZQlIQ19TVEFURV9RVUlFU0NJTkcJKF9fU1VTUEVORHxfX1RSQU5TSUVOVHxfX0FDVElWRSkKKyMJZGVmaW5lCUhDX1NUQVRFX1JFU1VNSU5HCShfX1NVU1BFTkR8X19UUkFOU0lFTlQpCisjCWRlZmluZQlIQ19TVEFURV9TVVNQRU5ERUQJKF9fU1VTUEVORCkKKworI2RlZmluZQlIQ19JU19SVU5OSU5HKHN0YXRlKSAoKHN0YXRlKSAmIF9fQUNUSVZFKQorI2RlZmluZQlIQ19JU19TVVNQRU5ERUQoc3RhdGUpICgoc3RhdGUpICYgX19TVVNQRU5EKQorCisJLyogbW9yZSBzaGFyZWQgcXVldWluZyBjb2RlIHdvdWxkIGJlIGdvb2Q7IGl0IHNob3VsZCBzdXBwb3J0CisJICogc21hcnRlciBzY2hlZHVsaW5nLCBoYW5kbGUgdHJhbnNhY3Rpb24gdHJhbnNsYXRvcnMsIGV0YzsKKwkgKiBpbnB1dCBzaXplIG9mIHBlcmlvZGljIHRhYmxlIHRvIGFuIGludGVycnVwdCBzY2hlZHVsZXIuIAorCSAqIChvaGNpIDMyLCB1aGNpIDEwMjQsIGVoY2kgMjU2LzUxMi8xMDI0KS4KKwkgKi8KKworCS8qIFRoZSBIQyBkcml2ZXIncyBwcml2YXRlIGRhdGEgaXMgc3RvcmVkIGF0IHRoZSBlbmQgb2YKKwkgKiB0aGlzIHN0cnVjdHVyZS4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIGhjZF9wcml2WzBdCisJCQlfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkpOworfTsKKworLyogMi40IGRvZXMgdGhpcyBhIGJpdCBkaWZmZXJlbnRseSAuLi4gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9idXMgKmhjZF90b19idXMgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJcmV0dXJuICZoY2QtPnNlbGY7Cit9CisKKworLy8gdXJiLmhjcHJpdiBpcyByZWFsbHkgaGFyZHdhcmUtc3BlY2lmaWMKKworc3RydWN0IGhjZF90aW1lb3V0IHsJLyogdGltZW91dHMgd2UgYWxsb2NhdGUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXRpbWVvdXRfbGlzdDsKKwlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBGSVhNRSB1c2Jfb3BlcmF0aW9ucyBzaG91bGQgdmFuaXNoIG9yIGJlY29tZSBoY19kcml2ZXIsCisgKiB3aGVuIHVzYl9idXMgYW5kIHVzYl9oY2QgYmVjb21lIHRoZSBzYW1lIHRoaW5nLgorICovCisKK3N0cnVjdCB1c2Jfb3BlcmF0aW9ucyB7CisJaW50ICgqZ2V0X2ZyYW1lX251bWJlcikgKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2KTsKKwlpbnQgKCpzdWJtaXRfdXJiKSAoc3RydWN0IHVyYiAqdXJiLCBpbnQgbWVtX2ZsYWdzKTsKKwlpbnQgKCp1bmxpbmtfdXJiKSAoc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKTsKKworCS8qIGFsbG9jYXRlIGRtYS1jb25zaXN0ZW50IGJ1ZmZlciBmb3IgVVJCX0RNQV9OT01BUFBJTkcgKi8KKwl2b2lkICooKmJ1ZmZlcl9hbGxvYykoc3RydWN0IHVzYl9idXMgKmJ1cywgc2l6ZV90IHNpemUsCisJCQlpbnQgbWVtX2ZsYWdzLAorCQkJZG1hX2FkZHJfdCAqZG1hKTsKKwl2b2lkICgqYnVmZmVyX2ZyZWUpKHN0cnVjdCB1c2JfYnVzICpidXMsIHNpemVfdCBzaXplLAorCQkJdm9pZCAqYWRkciwgZG1hX2FkZHJfdCBkbWEpOworCisJdm9pZCAoKmRpc2FibGUpKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCk7CisKKwkvKiBnbG9iYWwgc3VzcGVuZC9yZXN1bWUgb2YgYnVzICovCisJaW50ICgqaHViX3N1c3BlbmQpKHN0cnVjdCB1c2JfYnVzICopOworCWludCAoKmh1Yl9yZXN1bWUpKHN0cnVjdCB1c2JfYnVzICopOworfTsKKworLyogZWFjaCBkcml2ZXIgcHJvdmlkZXMgb25lIG9mIHRoZXNlLCBhbmQgaGFyZHdhcmUgaW5pdCBzdXBwb3J0ICovCisKK3N0cnVjdCBwdF9yZWdzOworCitzdHJ1Y3QgaGNfZHJpdmVyIHsKKwljb25zdCBjaGFyCSpkZXNjcmlwdGlvbjsJLyogImVoY2ktaGNkIiBldGMgKi8KKwljb25zdCBjaGFyCSpwcm9kdWN0X2Rlc2M7CS8qIHByb2R1Y3QvdmVuZG9yIHN0cmluZyAqLworCXNpemVfdAkJaGNkX3ByaXZfc2l6ZTsJLyogc2l6ZSBvZiBwcml2YXRlIGRhdGEgKi8KKworCS8qIGlycSBoYW5kbGVyICovCisJaXJxcmV0dXJuX3QJKCppcnEpIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKwlpbnQJZmxhZ3M7CisjZGVmaW5lCUhDRF9NRU1PUlkJMHgwMDAxCQkvKiBIQyByZWdzIHVzZSBtZW1vcnkgKGVsc2UgSS9PKSAqLworI2RlZmluZQlIQ0RfVVNCMTEJMHgwMDEwCQkvKiBVU0IgMS4xICovCisjZGVmaW5lCUhDRF9VU0IyCTB4MDAyMAkJLyogVVNCIDIuMCAqLworCisJLyogY2FsbGVkIHRvIGluaXQgSENEIGFuZCByb290IGh1YiAqLworCWludAkoKnJlc2V0KSAoc3RydWN0IHVzYl9oY2QgKmhjZCk7CisJaW50CSgqc3RhcnQpIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKworCS8qIE5PVEU6ICB0aGVzZSBzdXNwZW5kL3Jlc3VtZSBjYWxscyByZWxhdGUgdG8gdGhlIEhDIGFzCisJICogYSB3aG9sZSwgbm90IGp1c3QgdGhlIHJvb3QgaHViOyB0aGV5J3JlIGZvciBidXMgZ2x1ZS4KKwkgKi8KKwkvKiBjYWxsZWQgYWZ0ZXIgYWxsIGRldmljZXMgd2VyZSBzdXNwZW5kZWQgKi8KKwlpbnQJKCpzdXNwZW5kKSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgdTMyIHN0YXRlKTsKKworCS8qIGNhbGxlZCBiZWZvcmUgYW55IGRldmljZXMgZ2V0IHJlc3VtZWQgKi8KKwlpbnQJKCpyZXN1bWUpIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKworCS8qIGNsZWFubHkgbWFrZSBIQ0Qgc3RvcCB3cml0aW5nIG1lbW9yeSBhbmQgZG9pbmcgSS9PICovCisJdm9pZAkoKnN0b3ApIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKworCS8qIHJldHVybiBjdXJyZW50IGZyYW1lIG51bWJlciAqLworCWludAkoKmdldF9mcmFtZV9udW1iZXIpIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKworCS8qIG1hbmFnZSBpL28gcmVxdWVzdHMsIGRldmljZSBzdGF0ZSAqLworCWludAkoKnVyYl9lbnF1ZXVlKSAoc3RydWN0IHVzYl9oY2QgKmhjZCwKKwkJCQkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwKKwkJCQkJc3RydWN0IHVyYiAqdXJiLAorCQkJCQlpbnQgbWVtX2ZsYWdzKTsKKwlpbnQJKCp1cmJfZGVxdWV1ZSkgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYik7CisKKwkvKiBodyBzeW5jaCwgZnJlZWluZyBlbmRwb2ludCByZXNvdXJjZXMgdGhhdCB1cmJfZGVxdWV1ZSBjYW4ndCAqLworCXZvaWQgCSgqZW5kcG9pbnRfZGlzYWJsZSkoc3RydWN0IHVzYl9oY2QgKmhjZCwKKwkJCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApOworCisJLyogcm9vdCBodWIgc3VwcG9ydCAqLworCWludAkJKCpodWJfc3RhdHVzX2RhdGEpIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBjaGFyICpidWYpOworCWludAkJKCpodWJfY29udHJvbCkgKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJCQkJdTE2IHR5cGVSZXEsIHUxNiB3VmFsdWUsIHUxNiB3SW5kZXgsCisJCQkJY2hhciAqYnVmLCB1MTYgd0xlbmd0aCk7CisJaW50CQkoKmh1Yl9zdXNwZW5kKShzdHJ1Y3QgdXNiX2hjZCAqKTsKKwlpbnQJCSgqaHViX3Jlc3VtZSkoc3RydWN0IHVzYl9oY2QgKik7CisJaW50CQkoKnN0YXJ0X3BvcnRfcmVzZXQpKHN0cnVjdCB1c2JfaGNkICosIHVuc2lnbmVkIHBvcnRfbnVtKTsKK307CisKK2V4dGVybiB2b2lkIHVzYl9oY2RfZ2l2ZWJhY2tfdXJiIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworZXh0ZXJuIHN0cnVjdCB1c2JfaGNkICp1c2JfY3JlYXRlX2hjZCAoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAorCQlzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1c19uYW1lKTsKK2V4dGVybiB2b2lkIHVzYl9wdXRfaGNkIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKK2V4dGVybiBpbnQgdXNiX2FkZF9oY2Qoc3RydWN0IHVzYl9oY2QgKmhjZCwKKwkJdW5zaWduZWQgaW50IGlycW51bSwgdW5zaWduZWQgbG9uZyBpcnFmbGFncyk7CitleHRlcm4gdm9pZCB1c2JfcmVtb3ZlX2hjZChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKworI2lmZGVmIENPTkZJR19QQ0kKK3N0cnVjdCBwY2lfZGV2Oworc3RydWN0IHBjaV9kZXZpY2VfaWQ7CitleHRlcm4gaW50IHVzYl9oY2RfcGNpX3Byb2JlIChzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCk7CitleHRlcm4gdm9pZCB1c2JfaGNkX3BjaV9yZW1vdmUgKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworCisjaWZkZWYgQ09ORklHX1BNCitleHRlcm4gaW50IHVzYl9oY2RfcGNpX3N1c3BlbmQgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiBzdGF0ZSk7CitleHRlcm4gaW50IHVzYl9oY2RfcGNpX3Jlc3VtZSAoc3RydWN0IHBjaV9kZXYgKmRldik7CisjZW5kaWYgLyogQ09ORklHX1BNICovCisKKyNlbmRpZiAvKiBDT05GSUdfUENJICovCisKKy8qIHBjaS1pc2ggKHBkZXYgbnVsbCBpcyBvaykgYnVmZmVyIGFsbG9jL21hcHBpbmcgc3VwcG9ydCAqLworaW50IGhjZF9idWZmZXJfY3JlYXRlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKK3ZvaWQgaGNkX2J1ZmZlcl9kZXN0cm95IChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKwordm9pZCAqaGNkX2J1ZmZlcl9hbGxvYyAoc3RydWN0IHVzYl9idXMgKmJ1cywgc2l6ZV90IHNpemUsCisJaW50IG1lbV9mbGFncywgZG1hX2FkZHJfdCAqZG1hKTsKK3ZvaWQgaGNkX2J1ZmZlcl9mcmVlIChzdHJ1Y3QgdXNiX2J1cyAqYnVzLCBzaXplX3Qgc2l6ZSwKKwl2b2lkICphZGRyLCBkbWFfYWRkcl90IGRtYSk7CisKKy8qIGdlbmVyaWMgYnVzIGdsdWUsIG5lZWRlZCBmb3IgaG9zdCBjb250cm9sbGVycyB0aGF0IGRvbid0IHVzZSBQQ0kgKi8KK2V4dGVybiBpcnFyZXR1cm5fdCB1c2JfaGNkX2lycSAoaW50IGlycSwgdm9pZCAqX19oY2QsIHN0cnVjdCBwdF9yZWdzICpyKTsKK2V4dGVybiB2b2lkIHVzYl9oY19kaWVkIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogRW51bWVyYXRpb24gaXMgb25seSBmb3IgdGhlIGh1YiBkcml2ZXIsIG9yIEhDRCB2aXJ0dWFsIHJvb3QgaHVicyAqLworZXh0ZXJuIHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfYWxsb2NfZGV2KHN0cnVjdCB1c2JfZGV2aWNlICpwYXJlbnQsCisJCQkJCXN0cnVjdCB1c2JfYnVzICosIHVuc2lnbmVkIHBvcnQpOworZXh0ZXJuIGludCB1c2JfbmV3X2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHVzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfZGV2aWNlICoqKTsKKworZXh0ZXJuIGludCB1c2JfZ2V0X2NvbmZpZ3VyYXRpb24oc3RydWN0IHVzYl9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCB1c2JfZGVzdHJveV9jb25maWd1cmF0aW9uKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogSENEIFJvb3QgSHViIHN1cHBvcnQKKyAqLworCisjaW5jbHVkZSAiaHViLmgiCisKKy8qIChzaGlmdGVkKSBkaXJlY3Rpb24vdHlwZS9yZWNpcGllbnQgZnJvbSB0aGUgVVNCIDIuMCBzcGVjLCB0YWJsZSA5LjIgKi8KKyNkZWZpbmUgRGV2aWNlUmVxdWVzdCBcCisJKChVU0JfRElSX0lOfFVTQl9UWVBFX1NUQU5EQVJEfFVTQl9SRUNJUF9ERVZJQ0UpPDw4KQorI2RlZmluZSBEZXZpY2VPdXRSZXF1ZXN0IFwKKwkoKFVTQl9ESVJfT1VUfFVTQl9UWVBFX1NUQU5EQVJEfFVTQl9SRUNJUF9ERVZJQ0UpPDw4KQorCisjZGVmaW5lIEludGVyZmFjZVJlcXVlc3QgXAorCSgoVVNCX0RJUl9JTnxVU0JfVFlQRV9TVEFOREFSRHxVU0JfUkVDSVBfSU5URVJGQUNFKTw8OCkKKworI2RlZmluZSBFbmRwb2ludFJlcXVlc3QgXAorCSgoVVNCX0RJUl9JTnxVU0JfVFlQRV9TVEFOREFSRHxVU0JfUkVDSVBfSU5URVJGQUNFKTw8OCkKKyNkZWZpbmUgRW5kcG9pbnRPdXRSZXF1ZXN0IFwKKwkoKFVTQl9ESVJfT1VUfFVTQl9UWVBFX1NUQU5EQVJEfFVTQl9SRUNJUF9JTlRFUkZBQ0UpPDw4KQorCisvKiBjbGFzcyByZXF1ZXN0cyBmcm9tIHRoZSBVU0IgMi4wIGh1YiBzcGVjLCB0YWJsZSAxMS0xNSAqLworLyogR2V0QnVzU3RhdGUgYW5kIFNldEh1YkRlc2NyaXB0b3IgYXJlIG9wdGlvbmFsLCBvbWl0dGVkICovCisjZGVmaW5lIENsZWFySHViRmVhdHVyZQkJKDB4MjAwMCB8IFVTQl9SRVFfQ0xFQVJfRkVBVFVSRSkKKyNkZWZpbmUgQ2xlYXJQb3J0RmVhdHVyZQkoMHgyMzAwIHwgVVNCX1JFUV9DTEVBUl9GRUFUVVJFKQorI2RlZmluZSBHZXRIdWJEZXNjcmlwdG9yCSgweGEwMDAgfCBVU0JfUkVRX0dFVF9ERVNDUklQVE9SKQorI2RlZmluZSBHZXRIdWJTdGF0dXMJCSgweGEwMDAgfCBVU0JfUkVRX0dFVF9TVEFUVVMpCisjZGVmaW5lIEdldFBvcnRTdGF0dXMJCSgweGEzMDAgfCBVU0JfUkVRX0dFVF9TVEFUVVMpCisjZGVmaW5lIFNldEh1YkZlYXR1cmUJCSgweDIwMDAgfCBVU0JfUkVRX1NFVF9GRUFUVVJFKQorI2RlZmluZSBTZXRQb3J0RmVhdHVyZQkJKDB4MjMwMCB8IFVTQl9SRVFfU0VUX0ZFQVRVUkUpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEdlbmVyaWMgYmFuZHdpZHRoIGFsbG9jYXRpb24gY29uc3RhbnRzL3N1cHBvcnQKKyAqLworI2RlZmluZSBGUkFNRV9USU1FX1VTRUNTCTEwMDBMCisjZGVmaW5lIEJpdFRpbWUoYnl0ZWNvdW50KSAgKDcgKiA4ICogYnl0ZWNvdW50IC8gNikgIC8qIHdpdGggaW50ZWdlciB0cnVuY2F0aW9uICovCisJCS8qIFRyeWluZyBub3QgdG8gdXNlIHdvcnN0LWNhc2UgYml0LXN0dWZmaW5nCisgICAgICAgICAgICAgICAgICAgb2YgKDcvNiAqIDggKiBieXRlY291bnQpID0gOS4zMyAqIGJ5dGVjb3VudCAqLworCQkvKiBieXRlY291bnQgPSBkYXRhIHBheWxvYWQgYnl0ZSBjb3VudCAqLworCisjZGVmaW5lIE5TX1RPX1VTKG5zKQkoKG5zICsgNTAwTCkgLyAxMDAwTCkKKwkJCS8qIGNvbnZlcnQgJiByb3VuZCBuYW5vc2Vjb25kcyB0byBtaWNyb3NlY29uZHMgKi8KKworZXh0ZXJuIHZvaWQgdXNiX2NsYWltX2JhbmR3aWR0aCAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IHVyYiAqdXJiLAorCQlpbnQgYnVzdGltZSwgaW50IGlzb2MpOworZXh0ZXJuIHZvaWQgdXNiX3JlbGVhc2VfYmFuZHdpZHRoIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIsCisJCWludCBpc29jKTsKKworLyoKKyAqIEZ1bGwvbG93IHNwZWVkIGJhbmR3aWR0aCBhbGxvY2F0aW9uIGNvbnN0YW50cy9zdXBwb3J0LgorICovCisjZGVmaW5lIEJXX0hPU1RfREVMQVkJMTAwMEwJCS8qIG5hbm9zZWNvbmRzICovCisjZGVmaW5lIEJXX0hVQl9MU19TRVRVUAkzMzNMCQkvKiBuYW5vc2Vjb25kcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgLyogNCBmdWxsLXNwZWVkIGJpdCB0aW1lcyAoZXN0LikgKi8KKworI2RlZmluZSBGUkFNRV9USU1FX0JJVFMgICAgICAgICAxMjAwMEwJCS8qIGZyYW1lID0gMSBtaWxsaXNlY29uZCAqLworI2RlZmluZSBGUkFNRV9USU1FX01BWF9CSVRTX0FMTE9DCSg5MEwgKiBGUkFNRV9USU1FX0JJVFMgLyAxMDBMKQorI2RlZmluZSBGUkFNRV9USU1FX01BWF9VU0VDU19BTExPQwkoOTBMICogRlJBTUVfVElNRV9VU0VDUyAvIDEwMEwpCisKK2V4dGVybiBpbnQgdXNiX2NoZWNrX2JhbmR3aWR0aCAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IHVyYiAqdXJiKTsKKworLyoKKyAqIENlaWxpbmcgbWljcm9zZWNvbmRzICh0eXBpY2FsKSBmb3IgdGhhdCBtYW55IGJ5dGVzIGF0IGhpZ2ggc3BlZWQKKyAqIElTTyBpcyBhIGJpdCBsZXNzLCBubyBBQ0sgLi4uIGZyb20gVVNCIDIuMCBzcGVjLCA1LjExLjMgKGFuZCBuZWVkZWQKKyAqIHRvIHByZWFsbG9jYXRlIGJhbmR3aWR0aCkKKyAqLworI2RlZmluZSBVU0IyX0hPU1RfREVMQVkJNQkvKiBuc2VjLCBndWVzcyAqLworI2RlZmluZSBIU19VU0VDUyhieXRlcykgTlNfVE9fVVMgKCAoKDU1ICogOCAqIDIwODMpLzEwMDApIFwKKwkrICgoMjA4M1VMICogKDMxNjcgKyBCaXRUaW1lIChieXRlcykpKS8xMDAwKSBcCisJKyBVU0IyX0hPU1RfREVMQVkpCisjZGVmaW5lIEhTX1VTRUNTX0lTTyhieXRlcykgTlNfVE9fVVMgKCAoKDM4ICogOCAqIDIwODMpLzEwMDApIFwKKwkrICgoMjA4M1VMICogKDMxNjcgKyBCaXRUaW1lIChieXRlcykpKS8xMDAwKSBcCisJKyBVU0IyX0hPU1RfREVMQVkpCisKK2V4dGVybiBsb25nIHVzYl9jYWxjX2J1c190aW1lIChpbnQgc3BlZWQsIGludCBpc19pbnB1dCwKKwkJCWludCBpc29jLCBpbnQgYnl0ZWNvdW50KTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworZXh0ZXJuIHN0cnVjdCB1c2JfYnVzICp1c2JfYWxsb2NfYnVzIChzdHJ1Y3QgdXNiX29wZXJhdGlvbnMgKik7CisKK2V4dGVybiBpbnQgdXNiX2hjZF9yZWdpc3Rlcl9yb290X2h1YiAoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCisJCXN0cnVjdCB1c2JfaGNkICpoY2QpOworCitleHRlcm4gdm9pZCB1c2JfaGNkX3Jlc3VtZV9yb290X2h1YiAoc3RydWN0IHVzYl9oY2QgKmhjZCk7CisKK2V4dGVybiB2b2lkIHVzYl9zZXRfZGV2aWNlX3N0YXRlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQllbnVtIHVzYl9kZXZpY2Vfc3RhdGUgbmV3X3N0YXRlKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogZXhwb3J0ZWQgb25seSB3aXRoaW4gdXNiY29yZSAqLworCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCB1c2JfYnVzX2xpc3Q7CitleHRlcm4gc3RydWN0IHNlbWFwaG9yZSB1c2JfYnVzX2xpc3RfbG9jazsKK2V4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCB1c2Jfa2lsbF91cmJfcXVldWU7CisKK2V4dGVybiBzdHJ1Y3QgdXNiX2J1cyAqdXNiX2J1c19nZXQgKHN0cnVjdCB1c2JfYnVzICpidXMpOworZXh0ZXJuIHZvaWQgdXNiX2J1c19wdXQgKHN0cnVjdCB1c2JfYnVzICpidXMpOworCitleHRlcm4gaW50IHVzYl9maW5kX2ludGVyZmFjZV9kcml2ZXIgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CisKKyNkZWZpbmUgdXNiX2VuZHBvaW50X291dChlcF9kaXIpCSghKChlcF9kaXIpICYgVVNCX0RJUl9JTikpCisKKy8qCisgKiBVU0IgZGV2aWNlIGZzIHN0dWZmCisgKi8KKworI2lmZGVmIENPTkZJR19VU0JfREVWSUNFRlMKKworLyoKKyAqIHRoZXNlIGFyZSBleHBlY3RlZCB0byBiZSBjYWxsZWQgZnJvbSB0aGUgVVNCIGNvcmUvaHViIHRocmVhZAorICogd2l0aCB0aGUga2VybmVsIGxvY2sgaGVsZAorICovCitleHRlcm4gdm9pZCB1c2Jmc19hZGRfYnVzKHN0cnVjdCB1c2JfYnVzICpidXMpOworZXh0ZXJuIHZvaWQgdXNiZnNfcmVtb3ZlX2J1cyhzdHJ1Y3QgdXNiX2J1cyAqYnVzKTsKK2V4dGVybiB2b2lkIHVzYmZzX2FkZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCB1c2Jmc19yZW1vdmVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgdXNiZnNfdXBkYXRlX3NwZWNpYWwgKHZvaWQpOworCitleHRlcm4gaW50IHVzYmZzX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCB1c2Jmc19jbGVhbnVwKHZvaWQpOworCisjZWxzZSAvKiBDT05GSUdfVVNCX0RFVklDRUZTICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jmc19hZGRfYnVzKHN0cnVjdCB1c2JfYnVzICpidXMpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgdXNiZnNfcmVtb3ZlX2J1cyhzdHJ1Y3QgdXNiX2J1cyAqYnVzKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHVzYmZzX2FkZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jmc19yZW1vdmVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgdXNiZnNfdXBkYXRlX3NwZWNpYWwgKHZvaWQpIHt9CisKK3N0YXRpYyBpbmxpbmUgaW50IHVzYmZzX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIHVzYmZzX2NsZWFudXAodm9pZCkgeyB9CisKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0RFVklDRUZTICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfTU9OKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfTU9OX01PRFVMRSkKKworc3RydWN0IHVzYl9tb25fb3BlcmF0aW9ucyB7CisJdm9pZCAoKnVyYl9zdWJtaXQpKHN0cnVjdCB1c2JfYnVzICpidXMsIHN0cnVjdCB1cmIgKnVyYik7CisJdm9pZCAoKnVyYl9zdWJtaXRfZXJyb3IpKHN0cnVjdCB1c2JfYnVzICpidXMsIHN0cnVjdCB1cmIgKnVyYiwgaW50IGVycik7CisJdm9pZCAoKnVyYl9jb21wbGV0ZSkoc3RydWN0IHVzYl9idXMgKmJ1cywgc3RydWN0IHVyYiAqdXJiKTsKKwkvKiB2b2lkICgqdXJiX3VubGluaykoc3RydWN0IHVzYl9idXMgKmJ1cywgc3RydWN0IHVyYiAqdXJiKTsgKi8KKwl2b2lkICgqYnVzX2FkZCkoc3RydWN0IHVzYl9idXMgKmJ1cyk7CisJdm9pZCAoKmJ1c19yZW1vdmUpKHN0cnVjdCB1c2JfYnVzICpidXMpOworfTsKKworZXh0ZXJuIHN0cnVjdCB1c2JfbW9uX29wZXJhdGlvbnMgKm1vbl9vcHM7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jtb25fdXJiX3N1Ym1pdChzdHJ1Y3QgdXNiX2J1cyAqYnVzLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJaWYgKGJ1cy0+bW9uaXRvcmVkKQorCQkoKm1vbl9vcHMtPnVyYl9zdWJtaXQpKGJ1cywgdXJiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVzYm1vbl91cmJfc3VibWl0X2Vycm9yKHN0cnVjdCB1c2JfYnVzICpidXMsIHN0cnVjdCB1cmIgKnVyYiwKKyAgICBpbnQgZXJyb3IpCit7CisJaWYgKGJ1cy0+bW9uaXRvcmVkKQorCQkoKm1vbl9vcHMtPnVyYl9zdWJtaXRfZXJyb3IpKGJ1cywgdXJiLCBlcnJvcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jtb25fdXJiX2NvbXBsZXRlKHN0cnVjdCB1c2JfYnVzICpidXMsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpZiAoYnVzLT5tb25pdG9yZWQpCisJCSgqbW9uX29wcy0+dXJiX2NvbXBsZXRlKShidXMsIHVyYik7Cit9CisgCitzdGF0aWMgaW5saW5lIHZvaWQgdXNibW9uX25vdGlmeV9idXNfYWRkKHN0cnVjdCB1c2JfYnVzICpidXMpCit7CisJaWYgKG1vbl9vcHMpCisJCSgqbW9uX29wcy0+YnVzX2FkZCkoYnVzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVzYm1vbl9ub3RpZnlfYnVzX3JlbW92ZShzdHJ1Y3QgdXNiX2J1cyAqYnVzKQoreworCWlmIChtb25fb3BzKQorCQkoKm1vbl9vcHMtPmJ1c19yZW1vdmUpKGJ1cyk7Cit9CisKK2ludCB1c2JfbW9uX3JlZ2lzdGVyKHN0cnVjdCB1c2JfbW9uX29wZXJhdGlvbnMgKm9wcyk7Cit2b2lkIHVzYl9tb25fZGVyZWdpc3Rlcih2b2lkKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIHVzYm1vbl91cmJfc3VibWl0KHN0cnVjdCB1c2JfYnVzICpidXMsIHN0cnVjdCB1cmIgKnVyYikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jtb25fdXJiX3N1Ym1pdF9lcnJvcihzdHJ1Y3QgdXNiX2J1cyAqYnVzLCBzdHJ1Y3QgdXJiICp1cmIsCisgICAgaW50IGVycm9yKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHVzYm1vbl91cmJfY29tcGxldGUoc3RydWN0IHVzYl9idXMgKmJ1cywgc3RydWN0IHVyYiAqdXJiKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHVzYm1vbl9ub3RpZnlfYnVzX2FkZChzdHJ1Y3QgdXNiX2J1cyAqYnVzKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHVzYm1vbl9ub3RpZnlfYnVzX3JlbW92ZShzdHJ1Y3QgdXNiX2J1cyAqYnVzKSB7fQorCisjZW5kaWYgLyogQ09ORklHX1VTQl9NT04gKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogaHViLmggLi4uIERldmljZVJlbW92YWJsZSBpbiAyLjQuMi1hYzExLCBnb25lIGluIDIuNC4xMCAqLworLy8gYmxlZWNoIC0tIHJlc3VyZmFjZWQgaW4gMi40LjExIG9yIDIuNC4xMgorI2RlZmluZSBiaXRtYXAgCURldmljZVJlbW92YWJsZQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHJhbmRvbSBzdHVmZiAqLworCisjZGVmaW5lCVJVTl9DT05URVhUIChpbl9pcnEgKCkgPyAiaW5faXJxIiBcCisJCTogKGluX2ludGVycnVwdCAoKSA/ICJpbl9pbnRlcnJ1cHQiIDogImNhbiBzbGVlcCIpKQorCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMGRjNGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCkBAIC0wLDAgKzEsMzA1NyBAQAorLyoKKyAqIFVTQiBodWIgZHJpdmVyLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBMaW51cyBUb3J2YWxkcworICogKEMpIENvcHlyaWdodCAxOTk5IEpvaGFubmVzIEVyZGZlbHQKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBHcmVnb3J5IFAuIFNtaXRoCisgKiAoQykgQ29weXJpZ2h0IDIwMDEgQnJhZCBIYXJkcyAoYmhhcmRzQGJpZ3BvbmQubmV0LmF1KQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworCSNkZWZpbmUgREVCVUcKKyNlbHNlCisJI3VuZGVmIERFQlVHCisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiZGV2aWNlX2ZzLmg+CisKKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNpbmNsdWRlICJ1c2IuaCIKKyNpbmNsdWRlICJoY2QuaCIKKyNpbmNsdWRlICJodWIuaCIKKworLyogUHJvdGVjdCBzdHJ1Y3QgdXNiX2RldmljZS0+c3RhdGUgYW5kIC0+Y2hpbGRyZW4gbWVtYmVycworICogTm90ZTogQm90aCBhcmUgYWxzbyBwcm90ZWN0ZWQgYnkgLT5zZXJpYWxpemUsIGV4Y2VwdCB0aGF0IC0+c3RhdGUgY2FuCisgKiBjaGFuZ2UgdG8gVVNCX1NUQVRFX05PVEFUVEFDSEVEIGV2ZW4gd2hlbiB0aGUgc2VtYXBob3JlIGlzbid0IGhlbGQuICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRldmljZV9zdGF0ZV9sb2NrKTsKKworLyoga2h1YmQncyB3b3JrbGlzdCBhbmQgaXRzIGxvY2sgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soaHViX2V2ZW50X2xvY2spOworc3RhdGljIExJU1RfSEVBRChodWJfZXZlbnRfbGlzdCk7CS8qIExpc3Qgb2YgaHVicyBuZWVkaW5nIHNlcnZpY2luZyAqLworCisvKiBXYWtlcyB1cCBraHViZCAqLworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGtodWJkX3dhaXQpOworCitzdGF0aWMgcGlkX3Qga2h1YmRfcGlkID0gMDsJCQkvKiBQSUQgb2Yga2h1YmQgKi8KK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oa2h1YmRfZXhpdGVkKTsKKworLyogY3ljbGUgbGVkcyBvbiBodWJzIHRoYXQgYXJlbid0IGJsaW5raW5nIGZvciBhdHRlbnRpb24gKi8KK3N0YXRpYyBpbnQgYmxpbmtlbmxpZ2h0cyA9IDA7Cittb2R1bGVfcGFyYW0gKGJsaW5rZW5saWdodHMsIGJvb2wsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyAoYmxpbmtlbmxpZ2h0cywgInRydWUgdG8gY3ljbGUgbGVkcyBvbiBodWJzIik7CisKKy8qCisgKiBBcyBvZiAyLjYuMTAgd2UgaW50cm9kdWNlIGEgbmV3IFVTQiBkZXZpY2UgaW5pdGlhbGl6YXRpb24gc2NoZW1lIHdoaWNoCisgKiBjbG9zZWx5IHJlc2VtYmxlcyB0aGUgd2F5IFdpbmRvd3Mgd29ya3MuICBIb3BlZnVsbHkgaXQgd2lsbCBiZSBjb21wYXRpYmxlCisgKiB3aXRoIGEgd2lkZXIgcmFuZ2Ugb2YgZGV2aWNlcyB0aGFuIHRoZSBvbGQgc2NoZW1lLiAgSG93ZXZlciBzb21lIHByZXZpb3VzbHkKKyAqIHdvcmtpbmcgZGV2aWNlcyBtYXkgc3RhcnQgZ2l2aW5nIHJpc2UgdG8gImRldmljZSBub3QgYWNjZXB0aW5nIGFkZHJlc3MiCisgKiBlcnJvcnM7IGlmIHRoYXQgaGFwcGVucyB0aGUgdXNlciBjYW4gdHJ5IHRoZSBvbGQgc2NoZW1lIGJ5IGFkanVzdGluZyB0aGUKKyAqIGZvbGxvd2luZyBtb2R1bGUgcGFyYW1ldGVycy4KKyAqCisgKiBGb3IgbWF4aW11bSBmbGV4aWJpbGl0eSB0aGVyZSBhcmUgdHdvIGJvb2xlYW4gcGFyYW1ldGVycyB0byBjb250cm9sIHRoZQorICogaHViIGRyaXZlcidzIGJlaGF2aW9yLiAgT24gdGhlIGZpcnN0IGluaXRpYWxpemF0aW9uIGF0dGVtcHQsIGlmIHRoZQorICogIm9sZF9zY2hlbWVfZmlyc3QiIHBhcmFtZXRlciBpcyBzZXQgdGhlbiB0aGUgb2xkIHNjaGVtZSB3aWxsIGJlIHVzZWQsCisgKiBvdGhlcndpc2UgdGhlIG5ldyBzY2hlbWUgaXMgdXNlZC4gIElmIHRoYXQgZmFpbHMgYW5kICJ1c2VfYm90aF9zY2hlbWVzIgorICogaXMgc2V0LCB0aGVuIHRoZSBkcml2ZXIgd2lsbCBtYWtlIGFub3RoZXIgYXR0ZW1wdCwgdXNpbmcgdGhlIG90aGVyIHNjaGVtZS4KKyAqLworc3RhdGljIGludCBvbGRfc2NoZW1lX2ZpcnN0ID0gMDsKK21vZHVsZV9wYXJhbShvbGRfc2NoZW1lX2ZpcnN0LCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKG9sZF9zY2hlbWVfZmlyc3QsCisJCSAic3RhcnQgd2l0aCB0aGUgb2xkIGRldmljZSBpbml0aWFsaXphdGlvbiBzY2hlbWUiKTsKKworc3RhdGljIGludCB1c2VfYm90aF9zY2hlbWVzID0gMTsKK21vZHVsZV9wYXJhbSh1c2VfYm90aF9zY2hlbWVzLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHVzZV9ib3RoX3NjaGVtZXMsCisJCSJ0cnkgdGhlIG90aGVyIGRldmljZSBpbml0aWFsaXphdGlvbiBzY2hlbWUgaWYgdGhlICIKKwkJImZpcnN0IG9uZSBmYWlscyIpOworCisKKyNpZmRlZglERUJVRworc3RhdGljIGlubGluZSBjaGFyICpwb3J0c3BlZWQgKGludCBwb3J0c3RhdHVzKQoreworCWlmIChwb3J0c3RhdHVzICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9ISUdIU1BFRUQpKQorICAgIAkJcmV0dXJuICI0ODAgTWIvcyI7CisJZWxzZSBpZiAocG9ydHN0YXR1cyAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfTE9XU1BFRUQpKQorCQlyZXR1cm4gIjEuNSBNYi9zIjsKKwllbHNlCisJCXJldHVybiAiMTIgTWIvcyI7Cit9CisjZW5kaWYKKworLyogTm90ZSB0aGF0IGhkZXYgb3Igb25lIG9mIGl0cyBjaGlsZHJlbiBtdXN0IGJlIGxvY2tlZCEgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9odWIgKmhkZXZfdG9faHViKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2KQoreworCXJldHVybiB1c2JfZ2V0X2ludGZkYXRhKGhkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlWzBdKTsKK30KKworLyogVVNCIDIuMCBzcGVjIFNlY3Rpb24gMTEuMjQuNC41ICovCitzdGF0aWMgaW50IGdldF9odWJfZGVzY3JpcHRvcihzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiwgdm9pZCAqZGF0YSwgaW50IHNpemUpCit7CisJaW50IGksIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGhkZXYsIHVzYl9yY3ZjdHJscGlwZShoZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX0RFU0NSSVBUT1IsIFVTQl9ESVJfSU4gfCBVU0JfUlRfSFVCLAorCQkJVVNCX0RUX0hVQiA8PCA4LCAwLCBkYXRhLCBzaXplLAorCQkJVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCQlpZiAocmV0ID49IChVU0JfRFRfSFVCX05PTlZBUl9TSVpFICsgMikpCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIFVTQiAyLjAgc3BlYyBTZWN0aW9uIDExLjI0LjIuMQorICovCitzdGF0aWMgaW50IGNsZWFyX2h1Yl9mZWF0dXJlKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2LCBpbnQgZmVhdHVyZSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKGhkZXYsIHVzYl9zbmRjdHJscGlwZShoZGV2LCAwKSwKKwkJVVNCX1JFUV9DTEVBUl9GRUFUVVJFLCBVU0JfUlRfSFVCLCBmZWF0dXJlLCAwLCBOVUxMLCAwLCAxMDAwKTsKK30KKworLyoKKyAqIFVTQiAyLjAgc3BlYyBTZWN0aW9uIDExLjI0LjIuMgorICovCitzdGF0aWMgaW50IGNsZWFyX3BvcnRfZmVhdHVyZShzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiwgaW50IHBvcnQxLCBpbnQgZmVhdHVyZSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKGhkZXYsIHVzYl9zbmRjdHJscGlwZShoZGV2LCAwKSwKKwkJVVNCX1JFUV9DTEVBUl9GRUFUVVJFLCBVU0JfUlRfUE9SVCwgZmVhdHVyZSwgcG9ydDEsCisJCU5VTEwsIDAsIDEwMDApOworfQorCisvKgorICogVVNCIDIuMCBzcGVjIFNlY3Rpb24gMTEuMjQuMi4xMworICovCitzdGF0aWMgaW50IHNldF9wb3J0X2ZlYXR1cmUoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsIGludCBwb3J0MSwgaW50IGZlYXR1cmUpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhoZGV2LCB1c2Jfc25kY3RybHBpcGUoaGRldiwgMCksCisJCVVTQl9SRVFfU0VUX0ZFQVRVUkUsIFVTQl9SVF9QT1JULCBmZWF0dXJlLCBwb3J0MSwKKwkJTlVMTCwgMCwgMTAwMCk7Cit9CisKKy8qCisgKiBVU0IgMi4wIHNwZWMgU2VjdGlvbiAxMS4yNC4yLjcuMS4xMCBhbmQgdGFibGUgMTEtNworICogZm9yIGluZm8gYWJvdXQgdXNpbmcgcG9ydCBpbmRpY2F0b3JzCisgKi8KK3N0YXRpYyB2b2lkIHNldF9wb3J0X2xlZCgKKwlzdHJ1Y3QgdXNiX2h1YiAqaHViLAorCWludCBwb3J0MSwKKwlpbnQgc2VsZWN0b3IKKykKK3sKKwlpbnQgc3RhdHVzID0gc2V0X3BvcnRfZmVhdHVyZShodWItPmhkZXYsIChzZWxlY3RvciA8PCA4KSB8IHBvcnQxLAorCQkJVVNCX1BPUlRfRkVBVF9JTkRJQ0FUT1IpOworCWlmIChzdGF0dXMgPCAwKQorCQlkZXZfZGJnIChodWItPmludGZkZXYsCisJCQkicG9ydCAlZCBpbmRpY2F0b3IgJXMgc3RhdHVzICVkXG4iLAorCQkJcG9ydDEsCisJCQkoeyBjaGFyICpzOyBzd2l0Y2ggKHNlbGVjdG9yKSB7CisJCQljYXNlIEhVQl9MRURfQU1CRVI6IHMgPSAiYW1iZXIiOyBicmVhazsKKwkJCWNhc2UgSFVCX0xFRF9HUkVFTjogcyA9ICJncmVlbiI7IGJyZWFrOworCQkJY2FzZSBIVUJfTEVEX09GRjogcyA9ICJvZmYiOyBicmVhazsKKwkJCWNhc2UgSFVCX0xFRF9BVVRPOiBzID0gImF1dG8iOyBicmVhazsKKwkJCWRlZmF1bHQ6IHMgPSAiPz8iOyBicmVhazsKKwkJCX07IHM7IH0pLAorCQkJc3RhdHVzKTsKK30KKworI2RlZmluZQlMRURfQ1lDTEVfUEVSSU9ECSgoMipIWikvMykKKworc3RhdGljIHZvaWQgbGVkX3dvcmsgKHZvaWQgKl9faHViKQoreworCXN0cnVjdCB1c2JfaHViCQkqaHViID0gX19odWI7CisJc3RydWN0IHVzYl9kZXZpY2UJKmhkZXYgPSBodWItPmhkZXY7CisJdW5zaWduZWQJCWk7CisJdW5zaWduZWQJCWNoYW5nZWQgPSAwOworCWludAkJCWN1cnNvciA9IC0xOworCisJaWYgKGhkZXYtPnN0YXRlICE9IFVTQl9TVEFURV9DT05GSUdVUkVEIHx8IGh1Yi0+cXVpZXNjaW5nKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgaHViLT5kZXNjcmlwdG9yLT5iTmJyUG9ydHM7IGkrKykgeworCQl1bnNpZ25lZAlzZWxlY3RvciwgbW9kZTsKKworCQkvKiAzMCUtNTAlIGR1dHkgY3ljbGUgKi8KKworCQlzd2l0Y2ggKGh1Yi0+aW5kaWNhdG9yW2ldKSB7CisJCS8qIGN5Y2xlIG1hcmtlciAqLworCQljYXNlIElORElDQVRPUl9DWUNMRToKKwkJCWN1cnNvciA9IGk7CisJCQlzZWxlY3RvciA9IEhVQl9MRURfQVVUTzsKKwkJCW1vZGUgPSBJTkRJQ0FUT1JfQVVUTzsKKwkJCWJyZWFrOworCQkvKiBibGlua2luZyBncmVlbiA9IHN3IGF0dGVudGlvbiAqLworCQljYXNlIElORElDQVRPUl9HUkVFTl9CTElOSzoKKwkJCXNlbGVjdG9yID0gSFVCX0xFRF9HUkVFTjsKKwkJCW1vZGUgPSBJTkRJQ0FUT1JfR1JFRU5fQkxJTktfT0ZGOworCQkJYnJlYWs7CisJCWNhc2UgSU5ESUNBVE9SX0dSRUVOX0JMSU5LX09GRjoKKwkJCXNlbGVjdG9yID0gSFVCX0xFRF9PRkY7CisJCQltb2RlID0gSU5ESUNBVE9SX0dSRUVOX0JMSU5LOworCQkJYnJlYWs7CisJCS8qIGJsaW5raW5nIGFtYmVyID0gaHcgYXR0ZW50aW9uICovCisJCWNhc2UgSU5ESUNBVE9SX0FNQkVSX0JMSU5LOgorCQkJc2VsZWN0b3IgPSBIVUJfTEVEX0FNQkVSOworCQkJbW9kZSA9IElORElDQVRPUl9BTUJFUl9CTElOS19PRkY7CisJCQlicmVhazsKKwkJY2FzZSBJTkRJQ0FUT1JfQU1CRVJfQkxJTktfT0ZGOgorCQkJc2VsZWN0b3IgPSBIVUJfTEVEX09GRjsKKwkJCW1vZGUgPSBJTkRJQ0FUT1JfQU1CRVJfQkxJTks7CisJCQlicmVhazsKKwkJLyogYmxpbmsgZ3JlZW4vYW1iZXIgPSByZXNlcnZlZCAqLworCQljYXNlIElORElDQVRPUl9BTFRfQkxJTks6CisJCQlzZWxlY3RvciA9IEhVQl9MRURfR1JFRU47CisJCQltb2RlID0gSU5ESUNBVE9SX0FMVF9CTElOS19PRkY7CisJCQlicmVhazsKKwkJY2FzZSBJTkRJQ0FUT1JfQUxUX0JMSU5LX09GRjoKKwkJCXNlbGVjdG9yID0gSFVCX0xFRF9BTUJFUjsKKwkJCW1vZGUgPSBJTkRJQ0FUT1JfQUxUX0JMSU5LOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2VsZWN0b3IgIT0gSFVCX0xFRF9BVVRPKQorCQkJY2hhbmdlZCA9IDE7CisJCXNldF9wb3J0X2xlZChodWIsIGkgKyAxLCBzZWxlY3Rvcik7CisJCWh1Yi0+aW5kaWNhdG9yW2ldID0gbW9kZTsKKwl9CisJaWYgKCFjaGFuZ2VkICYmIGJsaW5rZW5saWdodHMpIHsKKwkJY3Vyc29yKys7CisJCWN1cnNvciAlPSBodWItPmRlc2NyaXB0b3ItPmJOYnJQb3J0czsKKwkJc2V0X3BvcnRfbGVkKGh1YiwgY3Vyc29yICsgMSwgSFVCX0xFRF9HUkVFTik7CisJCWh1Yi0+aW5kaWNhdG9yW2N1cnNvcl0gPSBJTkRJQ0FUT1JfQ1lDTEU7CisJCWNoYW5nZWQrKzsKKwl9CisJaWYgKGNoYW5nZWQpCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaHViLT5sZWRzLCBMRURfQ1lDTEVfUEVSSU9EKTsKK30KKworLyogdXNlIGEgc2hvcnQgdGltZW91dCBmb3IgaHViL3BvcnQgc3RhdHVzIGZldGNoZXMgKi8KKyNkZWZpbmUJVVNCX1NUU19USU1FT1VUCQkxMDAwCisjZGVmaW5lCVVTQl9TVFNfUkVUUklFUwkJNQorCisvKgorICogVVNCIDIuMCBzcGVjIFNlY3Rpb24gMTEuMjQuMi42CisgKi8KK3N0YXRpYyBpbnQgZ2V0X2h1Yl9zdGF0dXMoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsCisJCXN0cnVjdCB1c2JfaHViX3N0YXR1cyAqZGF0YSkKK3sKKwlpbnQgaSwgc3RhdHVzID0gLUVUSU1FRE9VVDsKKworCWZvciAoaSA9IDA7IGkgPCBVU0JfU1RTX1JFVFJJRVMgJiYgc3RhdHVzID09IC1FVElNRURPVVQ7IGkrKykgeworCQlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2coaGRldiwgdXNiX3JjdmN0cmxwaXBlKGhkZXYsIDApLAorCQkJVVNCX1JFUV9HRVRfU1RBVFVTLCBVU0JfRElSX0lOIHwgVVNCX1JUX0hVQiwgMCwgMCwKKwkJCWRhdGEsIHNpemVvZigqZGF0YSksIFVTQl9TVFNfVElNRU9VVCk7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBVU0IgMi4wIHNwZWMgU2VjdGlvbiAxMS4yNC4yLjcKKyAqLworc3RhdGljIGludCBnZXRfcG9ydF9zdGF0dXMoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsIGludCBwb3J0MSwKKwkJc3RydWN0IHVzYl9wb3J0X3N0YXR1cyAqZGF0YSkKK3sKKwlpbnQgaSwgc3RhdHVzID0gLUVUSU1FRE9VVDsKKworCWZvciAoaSA9IDA7IGkgPCBVU0JfU1RTX1JFVFJJRVMgJiYgc3RhdHVzID09IC1FVElNRURPVVQ7IGkrKykgeworCQlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2coaGRldiwgdXNiX3JjdmN0cmxwaXBlKGhkZXYsIDApLAorCQkJVVNCX1JFUV9HRVRfU1RBVFVTLCBVU0JfRElSX0lOIHwgVVNCX1JUX1BPUlQsIDAsIHBvcnQxLAorCQkJZGF0YSwgc2l6ZW9mKCpkYXRhKSwgVVNCX1NUU19USU1FT1VUKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQga2lja19raHViZChzdHJ1Y3QgdXNiX2h1YiAqaHViKQoreworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHViX2V2ZW50X2xvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgmaHViLT5ldmVudF9saXN0KSkgeworCQlsaXN0X2FkZF90YWlsKCZodWItPmV2ZW50X2xpc3QsICZodWJfZXZlbnRfbGlzdCk7CisJCXdha2VfdXAoJmtodWJkX3dhaXQpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZodWJfZXZlbnRfbG9jaywgZmxhZ3MpOworfQorCit2b2lkIHVzYl9raWNrX2todWJkKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2KQoreworCWtpY2tfa2h1YmQoaGRldl90b19odWIoaGRldikpOworfQorCisKKy8qIGNvbXBsZXRpb24gZnVuY3Rpb24sIGZpcmVzIG9uIHBvcnQgc3RhdHVzIGNoYW5nZXMgYW5kIHZhcmlvdXMgZmF1bHRzICovCitzdGF0aWMgdm9pZCBodWJfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9odWIgKmh1YiA9IChzdHJ1Y3QgdXNiX2h1YiAqKXVyYi0+Y29udGV4dDsKKwlpbnQgc3RhdHVzOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgYml0czsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIC1FTk9FTlQ6CQkvKiBzeW5jaHJvbm91cyB1bmxpbmsgKi8KKwljYXNlIC1FQ09OTlJFU0VUOgkvKiBhc3luYyB1bmxpbmsgKi8KKwljYXNlIC1FU0hVVERPV046CS8qIGhhcmR3YXJlIGdvaW5nIGF3YXkgKi8KKwkJcmV0dXJuOworCisJZGVmYXVsdDoJCS8qIHByZXN1bWFibHkgYW4gZXJyb3IgKi8KKwkJLyogQ2F1c2UgYSBodWIgcmVzZXQgYWZ0ZXIgMTAgY29uc2VjdXRpdmUgZXJyb3JzICovCisJCWRldl9kYmcgKGh1Yi0+aW50ZmRldiwgInRyYW5zZmVyIC0tPiAlZFxuIiwgdXJiLT5zdGF0dXMpOworCQlpZiAoKCsraHViLT5uZXJyb3JzIDwgMTApIHx8IGh1Yi0+ZXJyb3IpCisJCQlnb3RvIHJlc3VibWl0OworCQlodWItPmVycm9yID0gdXJiLT5zdGF0dXM7CisJCS8qIEZBTEwgVEhST1VHSCAqLworCQorCS8qIGxldCBraHViZCBoYW5kbGUgdGhpbmdzICovCisJY2FzZSAwOgkJCS8qIHdlIGdvdCBkYXRhOiAgcG9ydCBzdGF0dXMgY2hhbmdlZCAqLworCQliaXRzID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aDsgKytpKQorCQkJYml0cyB8PSAoKHVuc2lnbmVkIGxvbmcpICgoKmh1Yi0+YnVmZmVyKVtpXSkpCisJCQkJCTw8IChpKjgpOworCQlodWItPmV2ZW50X2JpdHNbMF0gPSBiaXRzOworCQlicmVhazsKKwl9CisKKwlodWItPm5lcnJvcnMgPSAwOworCisJLyogU29tZXRoaW5nIGhhcHBlbmVkLCBsZXQga2h1YmQgZmlndXJlIGl0IG91dCAqLworCWtpY2tfa2h1YmQoaHViKTsKKworcmVzdWJtaXQ6CisJaWYgKGh1Yi0+cXVpZXNjaW5nKQorCQlyZXR1cm47CisKKwlpZiAoKHN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiIChodWItPnVyYiwgR0ZQX0FUT01JQykpICE9IDAKKwkJCSYmIHN0YXR1cyAhPSAtRU5PREVWICYmIHN0YXR1cyAhPSAtRVBFUk0pCisJCWRldl9lcnIgKGh1Yi0+aW50ZmRldiwgInJlc3VibWl0IC0tPiAlZFxuIiwgc3RhdHVzKTsKK30KKworLyogVVNCIDIuMCBzcGVjIFNlY3Rpb24gMTEuMjQuMi4zICovCitzdGF0aWMgaW5saW5lIGludAoraHViX2NsZWFyX3R0X2J1ZmZlciAoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsIHUxNiBkZXZpbmZvLCB1MTYgdHQpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhoZGV2LCB1c2JfcmN2Y3RybHBpcGUoaGRldiwgMCksCisJCQkgICAgICAgSFVCX0NMRUFSX1RUX0JVRkZFUiwgVVNCX1JUX1BPUlQsIGRldmluZm8sCisJCQkgICAgICAgdHQsIE5VTEwsIDAsIDEwMDApOworfQorCisvKgorICogZW51bWVyYXRpb24gYmxvY2tzIGtodWJkIGZvciBhIGxvbmcgdGltZS4gd2UgdXNlIGtldmVudGQgaW5zdGVhZCwgc2luY2UKKyAqIGxvbmcgYmxvY2tpbmcgdGhlcmUgaXMgdGhlIGV4Y2VwdGlvbiwgbm90IHRoZSBydWxlLiAgYWNjb3JkaW5nbHksIEhDRHMKKyAqIHRhbGtpbmcgdG8gVFRzIG11c3QgcXVldWUgY29udHJvbCB0cmFuc2ZlcnMgKG5vdCBqdXN0IGJ1bGsgYW5kIGlzbyksIHNvCisgKiBib3RoIGNhbiB0YWxrIHRvIHRoZSBzYW1lIGh1YiBjb25jdXJyZW50bHkuCisgKi8KK3N0YXRpYyB2b2lkIGh1Yl90dF9rZXZlbnQgKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgdXNiX2h1YgkJKmh1YiA9IGFyZzsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmaHViLT50dC5sb2NrLCBmbGFncyk7CisJd2hpbGUgKCFsaXN0X2VtcHR5ICgmaHViLT50dC5jbGVhcl9saXN0KSkgeworCQlzdHJ1Y3QgbGlzdF9oZWFkCSp0ZW1wOworCQlzdHJ1Y3QgdXNiX3R0X2NsZWFyCSpjbGVhcjsKKwkJc3RydWN0IHVzYl9kZXZpY2UJKmhkZXYgPSBodWItPmhkZXY7CisJCWludAkJCXN0YXR1czsKKworCQl0ZW1wID0gaHViLT50dC5jbGVhcl9saXN0Lm5leHQ7CisJCWNsZWFyID0gbGlzdF9lbnRyeSAodGVtcCwgc3RydWN0IHVzYl90dF9jbGVhciwgY2xlYXJfbGlzdCk7CisJCWxpc3RfZGVsICgmY2xlYXItPmNsZWFyX2xpc3QpOworCisJCS8qIGRyb3AgbG9jayBzbyBIQ0QgY2FuIGNvbmN1cnJlbnRseSByZXBvcnQgb3RoZXIgVFQgZXJyb3JzICovCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZodWItPnR0LmxvY2ssIGZsYWdzKTsKKwkJc3RhdHVzID0gaHViX2NsZWFyX3R0X2J1ZmZlciAoaGRldiwgY2xlYXItPmRldmluZm8sIGNsZWFyLT50dCk7CisJCXNwaW5fbG9ja19pcnFzYXZlICgmaHViLT50dC5sb2NrLCBmbGFncyk7CisKKwkJaWYgKHN0YXR1cykKKwkJCWRldl9lcnIgKCZoZGV2LT5kZXYsCisJCQkJImNsZWFyIHR0ICVkICglMDR4KSBlcnJvciAlZFxuIiwKKwkJCQljbGVhci0+dHQsIGNsZWFyLT5kZXZpbmZvLCBzdGF0dXMpOworCQlrZnJlZSAoY2xlYXIpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmaHViLT50dC5sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogdXNiX2h1Yl90dF9jbGVhcl9idWZmZXIgLSBjbGVhciBjb250cm9sL2J1bGsgVFQgc3RhdGUgaW4gaGlnaCBzcGVlZCBodWIKKyAqIEB1ZGV2OiB0aGUgZGV2aWNlIHdob3NlIHNwbGl0IHRyYW5zYWN0aW9uIGZhaWxlZAorICogQHBpcGU6IGlkZW50aWZpZXMgdGhlIGVuZHBvaW50IG9mIHRoZSBmYWlsZWQgdHJhbnNhY3Rpb24KKyAqCisgKiBIaWdoIHNwZWVkIEhDRHMgdXNlIHRoaXMgdG8gdGVsbCB0aGUgaHViIGRyaXZlciB0aGF0IHNvbWUgc3BsaXQgY29udHJvbCBvcgorICogYnVsayB0cmFuc2FjdGlvbiBmYWlsZWQgaW4gYSB3YXkgdGhhdCByZXF1aXJlcyBjbGVhcmluZyBpbnRlcm5hbCBzdGF0ZSBvZgorICogYSB0cmFuc2FjdGlvbiB0cmFuc2xhdG9yLiAgVGhpcyBpcyBub3JtYWxseSBkZXRlY3RlZCAoYW5kIHJlcG9ydGVkKSBmcm9tCisgKiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqCisgKiBJdCBtYXkgbm90IGJlIHBvc3NpYmxlIGZvciB0aGF0IGh1YiB0byBoYW5kbGUgYWRkaXRpb25hbCBmdWxsIChvciBsb3cpCisgKiBzcGVlZCB0cmFuc2FjdGlvbnMgdW50aWwgdGhhdCBzdGF0ZSBpcyBmdWxseSBjbGVhcmVkIG91dC4KKyAqLwordm9pZCB1c2JfaHViX3R0X2NsZWFyX2J1ZmZlciAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCBwaXBlKQoreworCXN0cnVjdCB1c2JfdHQJCSp0dCA9IHVkZXYtPnR0OworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXN0cnVjdCB1c2JfdHRfY2xlYXIJKmNsZWFyOworCisJLyogd2UndmUgZ290IHRvIGNvcGUgd2l0aCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHBlbmRpbmcgVFQgY2xlYXJzLAorCSAqIHNpbmNlIGVhY2ggVFQgaGFzICJhdCBsZWFzdCB0d28iIGJ1ZmZlcnMgdGhhdCBjYW4gbmVlZCBpdCAoYW5kCisJICogdGhlcmUgY2FuIGJlIG1hbnkgVFRzIHBlciBodWIpLiAgZXZlbiBpZiB0aGV5J3JlIHVuY29tbW9uLgorCSAqLworCWlmICgoY2xlYXIgPSBrbWFsbG9jIChzaXplb2YgKmNsZWFyLCBTTEFCX0FUT01JQykpID09IE5VTEwpIHsKKwkJZGV2X2VyciAoJnVkZXYtPmRldiwgImNhbid0IHNhdmUgQ0xFQVJfVFRfQlVGRkVSIHN0YXRlXG4iKTsKKwkJLyogRklYTUUgcmVjb3ZlciBzb21laG93IC4uLiBSRVNFVF9UVD8gKi8KKwkJcmV0dXJuOworCX0KKworCS8qIGluZm8gdGhhdCBDTEVBUl9UVF9CVUZGRVIgbmVlZHMgKi8KKwljbGVhci0+dHQgPSB0dC0+bXVsdGkgPyB1ZGV2LT50dHBvcnQgOiAxOworCWNsZWFyLT5kZXZpbmZvID0gdXNiX3BpcGVlbmRwb2ludCAocGlwZSk7CisJY2xlYXItPmRldmluZm8gfD0gdWRldi0+ZGV2bnVtIDw8IDQ7CisJY2xlYXItPmRldmluZm8gfD0gdXNiX3BpcGVjb250cm9sIChwaXBlKQorCQkJPyAoVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCA8PCAxMSkKKwkJCTogKFVTQl9FTkRQT0lOVF9YRkVSX0JVTEsgPDwgMTEpOworCWlmICh1c2JfcGlwZWluIChwaXBlKSkKKwkJY2xlYXItPmRldmluZm8gfD0gMSA8PCAxNTsKKwkKKwkvKiB0ZWxsIGtldmVudGQgdG8gY2xlYXIgc3RhdGUgZm9yIHRoaXMgVFQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSAoJnR0LT5sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCAoJmNsZWFyLT5jbGVhcl9saXN0LCAmdHQtPmNsZWFyX2xpc3QpOworCXNjaGVkdWxlX3dvcmsgKCZ0dC0+a2V2ZW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmdHQtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgaHViX3Bvd2VyX29uKHN0cnVjdCB1c2JfaHViICpodWIpCit7CisJaW50IHBvcnQxOworCisJLyogaWYgaHViIHN1cHBvcnRzIHBvd2VyIHN3aXRjaGluZywgZW5hYmxlIHBvd2VyIG9uIGVhY2ggcG9ydCAqLworCWlmICgoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzICYgSFVCX0NIQVJfTFBTTSkgPCAyKSB7CisJCWRldl9kYmcoaHViLT5pbnRmZGV2LCAiZW5hYmxpbmcgcG93ZXIgb24gYWxsIHBvcnRzXG4iKTsKKwkJZm9yIChwb3J0MSA9IDE7IHBvcnQxIDw9IGh1Yi0+ZGVzY3JpcHRvci0+Yk5iclBvcnRzOyBwb3J0MSsrKQorCQkJc2V0X3BvcnRfZmVhdHVyZShodWItPmhkZXYsIHBvcnQxLAorCQkJCQlVU0JfUE9SVF9GRUFUX1BPV0VSKTsKKwl9CisKKwkvKiBXYWl0IGZvciBwb3dlciB0byBiZSBlbmFibGVkICovCisJbXNsZWVwKGh1Yi0+ZGVzY3JpcHRvci0+YlB3ck9uMlB3ckdvb2QgKiAyKTsKK30KKworc3RhdGljIHZvaWQgaHViX3F1aWVzY2Uoc3RydWN0IHVzYl9odWIgKmh1YikKK3sKKwkvKiBzdG9wIGtodWJkIGFuZCByZWxhdGVkIGFjdGl2aXR5ICovCisJaHViLT5xdWllc2NpbmcgPSAxOworCXVzYl9raWxsX3VyYihodWItPnVyYik7CisJaWYgKGh1Yi0+aGFzX2luZGljYXRvcnMpCisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJmh1Yi0+bGVkcyk7CisJaWYgKGh1Yi0+aGFzX2luZGljYXRvcnMgfHwgaHViLT50dC5odWIpCisJCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Cit9CisKK3N0YXRpYyB2b2lkIGh1Yl9hY3RpdmF0ZShzdHJ1Y3QgdXNiX2h1YiAqaHViKQoreworCWludAlzdGF0dXM7CisKKwlodWItPnF1aWVzY2luZyA9IDA7CisJaHViLT5hY3RpdmF0aW5nID0gMTsKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihodWItPnVyYiwgR0ZQX05PSU8pOworCWlmIChzdGF0dXMgPCAwKQorCQlkZXZfZXJyKGh1Yi0+aW50ZmRldiwgImFjdGl2YXRlIC0tPiAlZFxuIiwgc3RhdHVzKTsKKwlpZiAoaHViLT5oYXNfaW5kaWNhdG9ycyAmJiBibGlua2VubGlnaHRzKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmh1Yi0+bGVkcywgTEVEX0NZQ0xFX1BFUklPRCk7CisKKwkvKiBzY2FuIGFsbCBwb3J0cyBBU0FQICovCisJa2lja19raHViZChodWIpOworfQorCitzdGF0aWMgaW50IGh1Yl9odWJfc3RhdHVzKHN0cnVjdCB1c2JfaHViICpodWIsCisJCXUxNiAqc3RhdHVzLCB1MTYgKmNoYW5nZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ2V0X2h1Yl9zdGF0dXMoaHViLT5oZGV2LCAmaHViLT5zdGF0dXMtPmh1Yik7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIgKGh1Yi0+aW50ZmRldiwKKwkJCSIlcyBmYWlsZWQgKGVyciA9ICVkKVxuIiwgX19GVU5DVElPTl9fLCByZXQpOworCWVsc2UgeworCQkqc3RhdHVzID0gbGUxNl90b19jcHUoaHViLT5zdGF0dXMtPmh1Yi53SHViU3RhdHVzKTsKKwkJKmNoYW5nZSA9IGxlMTZfdG9fY3B1KGh1Yi0+c3RhdHVzLT5odWIud0h1YkNoYW5nZSk7IAorCQlyZXQgPSAwOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGh1Yl9jb25maWd1cmUoc3RydWN0IHVzYl9odWIgKmh1YiwKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50KQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpoZGV2ID0gaHViLT5oZGV2OworCXN0cnVjdCBkZXZpY2UgKmh1Yl9kZXYgPSBodWItPmludGZkZXY7CisJdTE2IGh1YnN0YXR1cywgaHViY2hhbmdlOworCXVuc2lnbmVkIGludCBwaXBlOworCWludCBtYXhwLCByZXQ7CisJY2hhciAqbWVzc2FnZTsKKworCWh1Yi0+YnVmZmVyID0gdXNiX2J1ZmZlcl9hbGxvYyhoZGV2LCBzaXplb2YoKmh1Yi0+YnVmZmVyKSwgR0ZQX0tFUk5FTCwKKwkJCSZodWItPmJ1ZmZlcl9kbWEpOworCWlmICghaHViLT5idWZmZXIpIHsKKwkJbWVzc2FnZSA9ICJjYW4ndCBhbGxvY2F0ZSBodWIgaXJxIGJ1ZmZlciI7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisKKwlodWItPnN0YXR1cyA9IGttYWxsb2Moc2l6ZW9mKCpodWItPnN0YXR1cyksIEdGUF9LRVJORUwpOworCWlmICghaHViLT5zdGF0dXMpIHsKKwkJbWVzc2FnZSA9ICJjYW4ndCBrbWFsbG9jIGh1YiBzdGF0dXMgYnVmZmVyIjsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCWh1Yi0+ZGVzY3JpcHRvciA9IGttYWxsb2Moc2l6ZW9mKCpodWItPmRlc2NyaXB0b3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWh1Yi0+ZGVzY3JpcHRvcikgeworCQltZXNzYWdlID0gImNhbid0IGttYWxsb2MgaHViIGRlc2NyaXB0b3IiOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogUmVxdWVzdCB0aGUgZW50aXJlIGh1YiBkZXNjcmlwdG9yLgorCSAqIGh1Yi0+ZGVzY3JpcHRvciBjYW4gaGFuZGxlIFVTQl9NQVhDSElMRFJFTiBwb3J0cywKKwkgKiBidXQgdGhlIGh1YiBjYW4vd2lsbCByZXR1cm4gZmV3ZXIgYnl0ZXMgaGVyZS4KKwkgKi8KKwlyZXQgPSBnZXRfaHViX2Rlc2NyaXB0b3IoaGRldiwgaHViLT5kZXNjcmlwdG9yLAorCQkJc2l6ZW9mKCpodWItPmRlc2NyaXB0b3IpKTsKKwlpZiAocmV0IDwgMCkgeworCQltZXNzYWdlID0gImNhbid0IHJlYWQgaHViIGRlc2NyaXB0b3IiOworCQlnb3RvIGZhaWw7CisJfSBlbHNlIGlmIChodWItPmRlc2NyaXB0b3ItPmJOYnJQb3J0cyA+IFVTQl9NQVhDSElMRFJFTikgeworCQltZXNzYWdlID0gImh1YiBoYXMgdG9vIG1hbnkgcG9ydHMhIjsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBmYWlsOworCX0KKworCWhkZXYtPm1heGNoaWxkID0gaHViLT5kZXNjcmlwdG9yLT5iTmJyUG9ydHM7CisJZGV2X2luZm8gKGh1Yl9kZXYsICIlZCBwb3J0JXMgZGV0ZWN0ZWRcbiIsIGhkZXYtPm1heGNoaWxkLAorCQkoaGRldi0+bWF4Y2hpbGQgPT0gMSkgPyAiIiA6ICJzIik7CisKKwlsZTE2X3RvX2NwdXMoJmh1Yi0+ZGVzY3JpcHRvci0+d0h1YkNoYXJhY3RlcmlzdGljcyk7CisKKwlpZiAoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzICYgSFVCX0NIQVJfQ09NUE9VTkQpIHsKKwkJaW50CWk7CisJCWNoYXIJcG9ydHN0ciBbVVNCX01BWENISUxEUkVOICsgMV07CisKKwkJZm9yIChpID0gMDsgaSA8IGhkZXYtPm1heGNoaWxkOyBpKyspCisJCQlwb3J0c3RyW2ldID0gaHViLT5kZXNjcmlwdG9yLT5EZXZpY2VSZW1vdmFibGUKKwkJCQkgICAgWygoaSArIDEpIC8gOCldICYgKDEgPDwgKChpICsgMSkgJSA4KSkKKwkJCQk/ICdGJyA6ICdSJzsKKwkJcG9ydHN0cltoZGV2LT5tYXhjaGlsZF0gPSAwOworCQlkZXZfZGJnKGh1Yl9kZXYsICJjb21wb3VuZCBkZXZpY2U7IHBvcnQgcmVtb3ZhYmxlIHN0YXR1czogJXNcbiIsIHBvcnRzdHIpOworCX0gZWxzZQorCQlkZXZfZGJnKGh1Yl9kZXYsICJzdGFuZGFsb25lIGh1YlxuIik7CisKKwlzd2l0Y2ggKGh1Yi0+ZGVzY3JpcHRvci0+d0h1YkNoYXJhY3RlcmlzdGljcyAmIEhVQl9DSEFSX0xQU00pIHsKKwkJY2FzZSAweDAwOgorCQkJZGV2X2RiZyhodWJfZGV2LCAiZ2FuZ2VkIHBvd2VyIHN3aXRjaGluZ1xuIik7CisJCQlicmVhazsKKwkJY2FzZSAweDAxOgorCQkJZGV2X2RiZyhodWJfZGV2LCAiaW5kaXZpZHVhbCBwb3J0IHBvd2VyIHN3aXRjaGluZ1xuIik7CisJCQlicmVhazsKKwkJY2FzZSAweDAyOgorCQljYXNlIDB4MDM6CisJCQlkZXZfZGJnKGh1Yl9kZXYsICJubyBwb3dlciBzd2l0Y2hpbmcgKHVzYiAxLjApXG4iKTsKKwkJCWJyZWFrOworCX0KKworCXN3aXRjaCAoaHViLT5kZXNjcmlwdG9yLT53SHViQ2hhcmFjdGVyaXN0aWNzICYgSFVCX0NIQVJfT0NQTSkgeworCQljYXNlIDB4MDA6CisJCQlkZXZfZGJnKGh1Yl9kZXYsICJnbG9iYWwgb3Zlci1jdXJyZW50IHByb3RlY3Rpb25cbiIpOworCQkJYnJlYWs7CisJCWNhc2UgMHgwODoKKwkJCWRldl9kYmcoaHViX2RldiwgImluZGl2aWR1YWwgcG9ydCBvdmVyLWN1cnJlbnQgcHJvdGVjdGlvblxuIik7CisJCQlicmVhazsKKwkJY2FzZSAweDEwOgorCQljYXNlIDB4MTg6CisJCQlkZXZfZGJnKGh1Yl9kZXYsICJubyBvdmVyLWN1cnJlbnQgcHJvdGVjdGlvblxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwl9CisKKwlzcGluX2xvY2tfaW5pdCAoJmh1Yi0+dHQubG9jayk7CisJSU5JVF9MSVNUX0hFQUQgKCZodWItPnR0LmNsZWFyX2xpc3QpOworCUlOSVRfV09SSyAoJmh1Yi0+dHQua2V2ZW50LCBodWJfdHRfa2V2ZW50LCBodWIpOworCXN3aXRjaCAoaGRldi0+ZGVzY3JpcHRvci5iRGV2aWNlUHJvdG9jb2wpIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWRldl9kYmcoaHViX2RldiwgIlNpbmdsZSBUVFxuIik7CisJCQlodWItPnR0Lmh1YiA9IGhkZXY7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoaGRldiwgMCwgMSk7CisJCQlpZiAocmV0ID09IDApIHsKKwkJCQlkZXZfZGJnKGh1Yl9kZXYsICJUVCBwZXIgcG9ydFxuIik7CisJCQkJaHViLT50dC5tdWx0aSA9IDE7CisJCQl9IGVsc2UKKwkJCQlkZXZfZXJyKGh1Yl9kZXYsICJVc2luZyBzaW5nbGUgVFQgKGVyciAlZClcbiIsCisJCQkJCXJldCk7CisJCQlodWItPnR0Lmh1YiA9IGhkZXY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9kYmcoaHViX2RldiwgIlVucmVjb2duaXplZCBodWIgcHJvdG9jb2wgJWRcbiIsCisJCQkJaGRldi0+ZGVzY3JpcHRvci5iRGV2aWNlUHJvdG9jb2wpOworCQkJYnJlYWs7CisJfQorCisJc3dpdGNoIChodWItPmRlc2NyaXB0b3ItPndIdWJDaGFyYWN0ZXJpc3RpY3MgJiBIVUJfQ0hBUl9UVFRUKSB7CisJCWNhc2UgMHgwMDoKKwkJCWlmIChoZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VQcm90b2NvbCAhPSAwKQorCQkJCWRldl9kYmcoaHViX2RldiwgIlRUIHJlcXVpcmVzIGF0IG1vc3QgOCBGUyBiaXQgdGltZXNcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgMHgyMDoKKwkJCWRldl9kYmcoaHViX2RldiwgIlRUIHJlcXVpcmVzIGF0IG1vc3QgMTYgRlMgYml0IHRpbWVzXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIDB4NDA6CisJCQlkZXZfZGJnKGh1Yl9kZXYsICJUVCByZXF1aXJlcyBhdCBtb3N0IDI0IEZTIGJpdCB0aW1lc1xuIik7CisJCQlicmVhazsKKwkJY2FzZSAweDYwOgorCQkJZGV2X2RiZyhodWJfZGV2LCAiVFQgcmVxdWlyZXMgYXQgbW9zdCAzMiBGUyBiaXQgdGltZXNcbiIpOworCQkJYnJlYWs7CisJfQorCisJLyogcHJvYmUoKSB6ZXJvZXMgaHViLT5pbmRpY2F0b3JbXSAqLworCWlmIChodWItPmRlc2NyaXB0b3ItPndIdWJDaGFyYWN0ZXJpc3RpY3MgJiBIVUJfQ0hBUl9QT1JUSU5EKSB7CisJCWh1Yi0+aGFzX2luZGljYXRvcnMgPSAxOworCQlkZXZfZGJnKGh1Yl9kZXYsICJQb3J0IGluZGljYXRvcnMgYXJlIHN1cHBvcnRlZFxuIik7CisJfQorCisJZGV2X2RiZyhodWJfZGV2LCAicG93ZXIgb24gdG8gcG93ZXIgZ29vZCB0aW1lOiAlZG1zXG4iLAorCQlodWItPmRlc2NyaXB0b3ItPmJQd3JPbjJQd3JHb29kICogMik7CisKKwkvKiBwb3dlciBidWRnZXRpbmcgbW9zdGx5IG1hdHRlcnMgd2l0aCBidXMtcG93ZXJlZCBodWJzLAorCSAqIGFuZCBiYXR0ZXJ5LXBvd2VyZWQgcm9vdCBodWJzIChtYXkgcHJvdmlkZSBqdXN0IDggbUEpLgorCSAqLworCXJldCA9IHVzYl9nZXRfc3RhdHVzKGhkZXYsIFVTQl9SRUNJUF9ERVZJQ0UsIDAsICZodWJzdGF0dXMpOworCWlmIChyZXQgPCAwKSB7CisJCW1lc3NhZ2UgPSAiY2FuJ3QgZ2V0IGh1YiBzdGF0dXMiOworCQlnb3RvIGZhaWw7CisJfQorCWNwdV90b19sZTE2cygmaHVic3RhdHVzKTsKKwlpZiAoKGh1YnN0YXR1cyAmICgxIDw8IFVTQl9ERVZJQ0VfU0VMRl9QT1dFUkVEKSkgPT0gMCkgeworCQlkZXZfZGJnKGh1Yl9kZXYsICJodWIgY29udHJvbGxlciBjdXJyZW50IHJlcXVpcmVtZW50OiAlZG1BXG4iLAorCQkJaHViLT5kZXNjcmlwdG9yLT5iSHViQ29udHJDdXJyZW50KTsKKwkJaHViLT5wb3dlcl9idWRnZXQgPSAoNTAxIC0gaHViLT5kZXNjcmlwdG9yLT5iSHViQ29udHJDdXJyZW50KQorCQkJCQkvIDI7CisJCWRldl9kYmcoaHViX2RldiwgIiVkbUEgYnVzIHBvd2VyIGJ1ZGdldCBmb3IgY2hpbGRyZW5cbiIsCisJCQlodWItPnBvd2VyX2J1ZGdldCAqIDIpOworCX0KKworCisJcmV0ID0gaHViX2h1Yl9zdGF0dXMoaHViLCAmaHVic3RhdHVzLCAmaHViY2hhbmdlKTsKKwlpZiAocmV0IDwgMCkgeworCQltZXNzYWdlID0gImNhbid0IGdldCBodWIgc3RhdHVzIjsKKwkJZ290byBmYWlsOworCX0KKworCS8qIGxvY2FsIHBvd2VyIHN0YXR1cyByZXBvcnRzIGFyZW4ndCBhbHdheXMgY29ycmVjdCAqLworCWlmIChoZGV2LT5hY3Rjb25maWctPmRlc2MuYm1BdHRyaWJ1dGVzICYgVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSKQorCQlkZXZfZGJnKGh1Yl9kZXYsICJsb2NhbCBwb3dlciBzb3VyY2UgaXMgJXNcbiIsCisJCQkoaHVic3RhdHVzICYgSFVCX1NUQVRVU19MT0NBTF9QT1dFUikKKwkJCT8gImxvc3QgKGluYWN0aXZlKSIgOiAiZ29vZCIpOworCisJaWYgKChodWItPmRlc2NyaXB0b3ItPndIdWJDaGFyYWN0ZXJpc3RpY3MgJiBIVUJfQ0hBUl9PQ1BNKSA9PSAwKQorCQlkZXZfZGJnKGh1Yl9kZXYsICIlc292ZXItY3VycmVudCBjb25kaXRpb24gZXhpc3RzXG4iLAorCQkJKGh1YnN0YXR1cyAmIEhVQl9TVEFUVVNfT1ZFUkNVUlJFTlQpID8gIiIgOiAibm8gIik7CisKKwkvKiBzZXQgdXAgdGhlIGludGVycnVwdCBlbmRwb2ludCAqLworCXBpcGUgPSB1c2JfcmN2aW50cGlwZShoZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7CisJbWF4cCA9IHVzYl9tYXhwYWNrZXQoaGRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOworCisJaWYgKG1heHAgPiBzaXplb2YoKmh1Yi0+YnVmZmVyKSkKKwkJbWF4cCA9IHNpemVvZigqaHViLT5idWZmZXIpOworCisJaHViLT51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghaHViLT51cmIpIHsKKwkJbWVzc2FnZSA9ICJjb3VsZG4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHQgdXJiIjsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCXVzYl9maWxsX2ludF91cmIoaHViLT51cmIsIGhkZXYsIHBpcGUsICpodWItPmJ1ZmZlciwgbWF4cCwgaHViX2lycSwKKwkJaHViLCBlbmRwb2ludC0+YkludGVydmFsKTsKKwlodWItPnVyYi0+dHJhbnNmZXJfZG1hID0gaHViLT5idWZmZXJfZG1hOworCWh1Yi0+dXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCS8qIG1heWJlIGN5Y2xlIHRoZSBodWIgbGVkcyAqLworCWlmIChodWItPmhhc19pbmRpY2F0b3JzICYmIGJsaW5rZW5saWdodHMpCisJCWh1Yi0+aW5kaWNhdG9yIFswXSA9IElORElDQVRPUl9DWUNMRTsKKworCWh1Yl9wb3dlcl9vbihodWIpOworCWh1Yl9hY3RpdmF0ZShodWIpOworCXJldHVybiAwOworCitmYWlsOgorCWRldl9lcnIgKGh1Yl9kZXYsICJjb25maWcgZmFpbGVkLCAlcyAoZXJyICVkKVxuIiwKKwkJCW1lc3NhZ2UsIHJldCk7CisJLyogaHViX2Rpc2Nvbm5lY3QoKSBmcmVlcyB1cmIgYW5kIGRlc2NyaXB0b3IgKi8KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaGlnaHNwZWVkX2h1YnM7CisKK3N0YXRpYyB2b2lkIGh1Yl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfaHViICpodWIgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldjsKKworCWlmICghaHViKQorCQlyZXR1cm47CisJaGRldiA9IGh1Yi0+aGRldjsKKworCWlmIChoZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJaGlnaHNwZWVkX2h1YnMtLTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCisJaHViX3F1aWVzY2UoaHViKTsKKwl1c2JfZnJlZV91cmIoaHViLT51cmIpOworCWh1Yi0+dXJiID0gTlVMTDsKKworCXNwaW5fbG9ja19pcnEoJmh1Yl9ldmVudF9sb2NrKTsKKwlsaXN0X2RlbF9pbml0KCZodWItPmV2ZW50X2xpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmaHViX2V2ZW50X2xvY2spOworCisJaWYgKGh1Yi0+ZGVzY3JpcHRvcikgeworCQlrZnJlZShodWItPmRlc2NyaXB0b3IpOworCQlodWItPmRlc2NyaXB0b3IgPSBOVUxMOworCX0KKworCWlmIChodWItPnN0YXR1cykgeworCQlrZnJlZShodWItPnN0YXR1cyk7CisJCWh1Yi0+c3RhdHVzID0gTlVMTDsKKwl9CisKKwlpZiAoaHViLT5idWZmZXIpIHsKKwkJdXNiX2J1ZmZlcl9mcmVlKGhkZXYsIHNpemVvZigqaHViLT5idWZmZXIpLCBodWItPmJ1ZmZlciwKKwkJCQlodWItPmJ1ZmZlcl9kbWEpOworCQlodWItPmJ1ZmZlciA9IE5VTEw7CisJfQorCisJLyogRnJlZSB0aGUgbWVtb3J5ICovCisJa2ZyZWUoaHViKTsKK30KKworc3RhdGljIGludCBodWJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpkZXNjOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKmhkZXY7CisJc3RydWN0IHVzYl9odWIgKmh1YjsKKworCWRlc2MgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKwloZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKworCS8qIFNvbWUgaHVicyBoYXZlIGEgc3ViY2xhc3Mgb2YgMSwgd2hpY2ggQUZBSUNUIGFjY29yZGluZyB0byB0aGUgKi8KKwkvKiAgc3BlY3MgaXMgbm90IGRlZmluZWQsIGJ1dCBpdCB3b3JrcyAqLworCWlmICgoZGVzYy0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gMCkgJiYKKwkgICAgKGRlc2MtPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzICE9IDEpKSB7CitkZXNjcmlwdG9yX2Vycm9yOgorCQlkZXZfZXJyICgmaW50Zi0+ZGV2LCAiYmFkIGRlc2NyaXB0b3IsIGlnbm9yaW5nIGh1YlxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIE11bHRpcGxlIGVuZHBvaW50cz8gV2hhdCBraW5kIG9mIG11dGFudCBuaW5qYS1odWIgaXMgdGhpcz8gKi8KKwlpZiAoZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDEpCisJCWdvdG8gZGVzY3JpcHRvcl9lcnJvcjsKKworCWVuZHBvaW50ID0gJmRlc2MtPmVuZHBvaW50WzBdLmRlc2M7CisKKwkvKiBPdXRwdXQgZW5kcG9pbnQ/IEN1cmlvdXNlciBhbmQgY3VyaW91c2VyLi4gKi8KKwlpZiAoIShlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pKQorCQlnb3RvIGRlc2NyaXB0b3JfZXJyb3I7CisKKwkvKiBJZiBpdCdzIG5vdCBhbiBpbnRlcnJ1cHQgZW5kcG9pbnQsIHdlJ2QgYmV0dGVyIHB1bnQhICovCisJaWYgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJCQkhPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpCisJCWdvdG8gZGVzY3JpcHRvcl9lcnJvcjsKKworCS8qIFdlIGZvdW5kIGEgaHViICovCisJZGV2X2luZm8gKCZpbnRmLT5kZXYsICJVU0IgaHViIGZvdW5kXG4iKTsKKworCWh1YiA9IGttYWxsb2Moc2l6ZW9mKCpodWIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWh1YikgeworCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAiY291bGRuJ3Qga21hbGxvYyBodWIgc3RydWN0XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtc2V0KGh1YiwgMCwgc2l6ZW9mKCpodWIpKTsKKworCUlOSVRfTElTVF9IRUFEKCZodWItPmV2ZW50X2xpc3QpOworCWh1Yi0+aW50ZmRldiA9ICZpbnRmLT5kZXY7CisJaHViLT5oZGV2ID0gaGRldjsKKwlJTklUX1dPUksoJmh1Yi0+bGVkcywgbGVkX3dvcmssIGh1Yik7CisKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBodWIpOworCisJaWYgKGhkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorCQloaWdoc3BlZWRfaHVicysrOworCisJaWYgKGh1Yl9jb25maWd1cmUoaHViLCBlbmRwb2ludCkgPj0gMCkKKwkJcmV0dXJuIDA7CisKKwlodWJfZGlzY29ubmVjdCAoaW50Zik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQKK2h1Yl9pb2N0bChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgdW5zaWduZWQgaW50IGNvZGUsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCisJLyogYXNzZXJ0IGlmbm8gPT0gMCAocGFydCBvZiBodWIgc3BlYykgKi8KKwlzd2l0Y2ggKGNvZGUpIHsKKwljYXNlIFVTQkRFVkZTX0hVQl9QT1JUSU5GTzogeworCQlzdHJ1Y3QgdXNiZGV2ZnNfaHViX3BvcnRpbmZvICppbmZvID0gdXNlcl9kYXRhOworCQlpbnQgaTsKKworCQlzcGluX2xvY2tfaXJxKCZkZXZpY2Vfc3RhdGVfbG9jayk7CisJCWlmIChoZGV2LT5kZXZudW0gPD0gMCkKKwkJCWluZm8tPm5wb3J0cyA9IDA7CisJCWVsc2UgeworCQkJaW5mby0+bnBvcnRzID0gaGRldi0+bWF4Y2hpbGQ7CisJCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnBvcnRzOyBpKyspIHsKKwkJCQlpZiAoaGRldi0+Y2hpbGRyZW5baV0gPT0gTlVMTCkKKwkJCQkJaW5mby0+cG9ydFtpXSA9IDA7CisJCQkJZWxzZQorCQkJCQlpbmZvLT5wb3J0W2ldID0KKwkJCQkJCWhkZXYtPmNoaWxkcmVuW2ldLT5kZXZudW07CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXZpY2Vfc3RhdGVfbG9jayk7CisKKwkJcmV0dXJuIGluZm8tPm5wb3J0cyArIDE7CisJCX0KKworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PU1lTOworCX0KK30KKworLyogY2FsbGVyIGhhcyBsb2NrZWQgdGhlIGh1YiBkZXZpY2UgKi8KK3N0YXRpYyB2b2lkIGh1Yl9wcmVfcmVzZXQoc3RydWN0IHVzYl9odWIgKmh1YikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGh1Yi0+aGRldjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBoZGV2LT5tYXhjaGlsZDsgKytpKSB7CisJCWlmIChoZGV2LT5jaGlsZHJlbltpXSkKKwkJCXVzYl9kaXNjb25uZWN0KCZoZGV2LT5jaGlsZHJlbltpXSk7CisJfQorCWh1Yl9xdWllc2NlKGh1Yik7Cit9CisKKy8qIGNhbGxlciBoYXMgbG9ja2VkIHRoZSBodWIgZGV2aWNlICovCitzdGF0aWMgdm9pZCBodWJfcG9zdF9yZXNldChzdHJ1Y3QgdXNiX2h1YiAqaHViKQoreworCWh1Yl9hY3RpdmF0ZShodWIpOworCWh1Yl9wb3dlcl9vbihodWIpOworfQorCisKKy8qIGdyYWIgZGV2aWNlL3BvcnQgbG9jaywgcmV0dXJuaW5nIGluZGV4IG9mIHRoYXQgcG9ydCAoemVybyBiYXNlZCkuCisgKiBwcm90ZWN0cyB0aGUgdXBzdHJlYW0gbGluayB1c2VkIGJ5IHRoaXMgZGV2aWNlIGZyb20gY29uY3VycmVudAorICogdHJlZSBvcGVyYXRpb25zIGxpa2Ugc3VzcGVuZCwgcmVzdW1lLCByZXNldCwgYW5kIGRpc2Nvbm5lY3QsIHdoaWNoCisgKiBhcHBseSB0byBldmVyeXRoaW5nIGRvd25zdHJlYW0gb2YgYSBnaXZlbiBwb3J0LgorICovCitzdGF0aWMgaW50IGxvY2t0cmVlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludAkJCXQ7CisJc3RydWN0IHVzYl9kZXZpY2UJKmhkZXY7CisKKwlpZiAoIXVkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJLyogcm9vdCBodWIgaXMgYWx3YXlzIHRoZSBmaXJzdCBsb2NrIGluIHRoZSBzZXJpZXMgKi8KKwloZGV2ID0gdWRldi0+cGFyZW50OworCWlmICghaGRldikgeworCQl1c2JfbG9ja19kZXZpY2UodWRldik7CisJCXJldHVybiAwOworCX0KKworCS8qIG9uIHRoZSBwYXRoIGZyb20gcm9vdCB0byB1cywgbG9jayBldmVyeXRoaW5nIGZyb20KKwkgKiB0b3AgZG93biwgZHJvcHBpbmcgcGFyZW50IGxvY2tzIHdoZW4gbm90IG5lZWRlZAorCSAqLworCXQgPSBsb2NrdHJlZShoZGV2KTsKKwlpZiAodCA8IDApCisJCXJldHVybiB0OworCWZvciAodCA9IDA7IHQgPCBoZGV2LT5tYXhjaGlsZDsgdCsrKSB7CisJCWlmIChoZGV2LT5jaGlsZHJlblt0XSA9PSB1ZGV2KSB7CisJCQkvKiBldmVyeXRoaW5nIGlzIGZhaWwtZmFzdCBvbmNlIGRpc2Nvbm5lY3QKKwkJCSAqIHByb2Nlc3Npbmcgc3RhcnRzCisJCQkgKi8KKwkJCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpCisJCQkJYnJlYWs7CisKKwkJCS8qIHdoZW4gZXZlcnlvbmUgZ3JhYnMgbG9ja3MgdG9wLT5ib3R0b20sCisJCQkgKiBub24tb3ZlcmxhcHBpbmcgd29yayBtYXkgYmUgY29uY3VycmVudAorCQkJICovCisJCQlkb3duKCZ1ZGV2LT5zZXJpYWxpemUpOworCQkJdXAoJmhkZXYtPnNlcmlhbGl6ZSk7CisJCQlyZXR1cm4gdCArIDE7CisJCX0KKwl9CisJdXNiX3VubG9ja19kZXZpY2UoaGRldik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyB2b2lkIHJlY3Vyc2l2ZWx5X21hcmtfTk9UQVRUQUNIRUQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdWRldi0+bWF4Y2hpbGQ7ICsraSkgeworCQlpZiAodWRldi0+Y2hpbGRyZW5baV0pCisJCQlyZWN1cnNpdmVseV9tYXJrX05PVEFUVEFDSEVEKHVkZXYtPmNoaWxkcmVuW2ldKTsKKwl9CisJdWRldi0+c3RhdGUgPSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQ7Cit9CisKKy8qKgorICogdXNiX3NldF9kZXZpY2Vfc3RhdGUgLSBjaGFuZ2UgYSBkZXZpY2UncyBjdXJyZW50IHN0YXRlICh1c2Jjb3JlLCBoY2RzKQorICogQHVkZXY6IHBvaW50ZXIgdG8gZGV2aWNlIHdob3NlIHN0YXRlIHNob3VsZCBiZSBjaGFuZ2VkCisgKiBAbmV3X3N0YXRlOiBuZXcgc3RhdGUgdmFsdWUgdG8gYmUgc3RvcmVkCisgKgorICogdWRldi0+c3RhdGUgaXMgX25vdF8gZnVsbHkgcHJvdGVjdGVkIGJ5IHRoZSBkZXZpY2UgbG9jay4gIEFsdGhvdWdoCisgKiBtb3N0IHRyYW5zaXRpb25zIGFyZSBtYWRlIG9ubHkgd2hpbGUgaG9sZGluZyB0aGUgbG9jaywgdGhlIHN0YXRlIGNhbgorICogY2FuIGNoYW5nZSB0byBVU0JfU1RBVEVfTk9UQVRUQUNIRUQgYXQgYWxtb3N0IGFueSB0aW1lLiAgVGhpcworICogaXMgc28gdGhhdCBkZXZpY2VzIGNhbiBiZSBtYXJrZWQgYXMgZGlzY29ubmVjdGVkIGFzIHNvb24gYXMgcG9zc2libGUsCisgKiB3aXRob3V0IGhhdmluZyB0byB3YWl0IGZvciBhbnkgc2VtYXBob3JlcyB0byBiZSByZWxlYXNlZC4gIEFzIGEgcmVzdWx0LAorICogYWxsIGNoYW5nZXMgdG8gYW55IGRldmljZSdzIHN0YXRlIG11c3QgYmUgcHJvdGVjdGVkIGJ5IHRoZQorICogZGV2aWNlX3N0YXRlX2xvY2sgc3BpbmxvY2suCisgKgorICogT25jZSBhIGRldmljZSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgZGV2aWNlIHRyZWUsIGFsbCBjaGFuZ2VzIHRvIGl0cyBzdGF0ZQorICogc2hvdWxkIGJlIG1hZGUgdXNpbmcgdGhpcyByb3V0aW5lLiAgVGhlIHN0YXRlIHNob3VsZCBfbm90XyBiZSBzZXQgZGlyZWN0bHkuCisgKgorICogSWYgdWRldi0+c3RhdGUgaXMgYWxyZWFkeSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQgdGhlbiBubyBjaGFuZ2UgaXMgbWFkZS4KKyAqIE90aGVyd2lzZSB1ZGV2LT5zdGF0ZSBpcyBzZXQgdG8gbmV3X3N0YXRlLCBhbmQgaWYgbmV3X3N0YXRlIGlzCisgKiBVU0JfU1RBVEVfTk9UQVRUQUNIRUQgdGhlbiBhbGwgb2YgdWRldidzIGRlc2NlbmRhbnRzJyBzdGF0ZXMgYXJlIGFsc28gc2V0CisgKiB0byBVU0JfU1RBVEVfTk9UQVRUQUNIRUQuCisgKi8KK3ZvaWQgdXNiX3NldF9kZXZpY2Vfc3RhdGUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCWVudW0gdXNiX2RldmljZV9zdGF0ZSBuZXdfc3RhdGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZpY2Vfc3RhdGVfbG9jaywgZmxhZ3MpOworCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpCisJCTsJLyogZG8gbm90aGluZyAqLworCWVsc2UgaWYgKG5ld19zdGF0ZSAhPSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpCisJCXVkZXYtPnN0YXRlID0gbmV3X3N0YXRlOworCWVsc2UKKwkJcmVjdXJzaXZlbHlfbWFya19OT1RBVFRBQ0hFRCh1ZGV2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZpY2Vfc3RhdGVfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTCh1c2Jfc2V0X2RldmljZV9zdGF0ZSk7CisKKworc3RhdGljIHZvaWQgY2hvb3NlX2FkZHJlc3Moc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50CQlkZXZudW07CisJc3RydWN0IHVzYl9idXMJKmJ1cyA9IHVkZXYtPmJ1czsKKworCS8qIElmIGtodWJkIGV2ZXIgYmVjb21lcyBtdWx0aXRocmVhZGVkLCB0aGlzIHdpbGwgbmVlZCBhIGxvY2sgKi8KKworCS8qIFRyeSB0byBhbGxvY2F0ZSB0aGUgbmV4dCBkZXZudW0gYmVnaW5uaW5nIGF0IGJ1cy0+ZGV2bnVtX25leHQuICovCisJZGV2bnVtID0gZmluZF9uZXh0X3plcm9fYml0KGJ1cy0+ZGV2bWFwLmRldmljZW1hcCwgMTI4LAorCQkJYnVzLT5kZXZudW1fbmV4dCk7CisJaWYgKGRldm51bSA+PSAxMjgpCisJCWRldm51bSA9IGZpbmRfbmV4dF96ZXJvX2JpdChidXMtPmRldm1hcC5kZXZpY2VtYXAsIDEyOCwgMSk7CisKKwlidXMtPmRldm51bV9uZXh0ID0gKCBkZXZudW0gPj0gMTI3ID8gMSA6IGRldm51bSArIDEpOworCisJaWYgKGRldm51bSA8IDEyOCkgeworCQlzZXRfYml0KGRldm51bSwgYnVzLT5kZXZtYXAuZGV2aWNlbWFwKTsKKwkJdWRldi0+ZGV2bnVtID0gZGV2bnVtOworCX0KK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV9hZGRyZXNzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWlmICh1ZGV2LT5kZXZudW0gPiAwKSB7CisJCWNsZWFyX2JpdCh1ZGV2LT5kZXZudW0sIHVkZXYtPmJ1cy0+ZGV2bWFwLmRldmljZW1hcCk7CisJCXVkZXYtPmRldm51bSA9IC0xOworCX0KK30KKworLyoqCisgKiB1c2JfZGlzY29ubmVjdCAtIGRpc2Nvbm5lY3QgYSBkZXZpY2UgKHVzYmNvcmUtaW50ZXJuYWwpCisgKiBAcGRldjogcG9pbnRlciB0byBkZXZpY2UgYmVpbmcgZGlzY29ubmVjdGVkCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0ICgpCisgKgorICogU29tZXRoaW5nIGdvdCBkaXNjb25uZWN0ZWQuIEdldCByaWQgb2YgaXQgYW5kIGFsbCBvZiBpdHMgY2hpbGRyZW4uCisgKgorICogSWYgKnBkZXYgaXMgYSBub3JtYWwgZGV2aWNlIHRoZW4gdGhlIHBhcmVudCBodWIgbXVzdCBhbHJlYWR5IGJlIGxvY2tlZC4KKyAqIElmICpwZGV2IGlzIGEgcm9vdCBodWIgdGhlbiB0aGlzIHJvdXRpbmUgd2lsbCBhY3F1aXJlIHRoZQorICogdXNiX2J1c19saXN0X2xvY2sgb24gYmVoYWxmIG9mIHRoZSBjYWxsZXIuCisgKgorICogT25seSBodWIgZHJpdmVycyAoaW5jbHVkaW5nIHZpcnR1YWwgcm9vdCBodWIgZHJpdmVycyBmb3IgaG9zdAorICogY29udHJvbGxlcnMpIHNob3VsZCBldmVyIGNhbGwgdGhpcy4KKyAqCisgKiBUaGlzIGNhbGwgaXMgc3luY2hyb25vdXMsIGFuZCBtYXkgbm90IGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuCisgKi8KK3ZvaWQgdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9kZXZpY2UgKipwZGV2KQoreworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gKnBkZXY7CisJaW50CQkJaTsKKworCWlmICghdWRldikgeworCQlwcl9kZWJ1ZyAoIiVzIG5vZGV2XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJLyogbWFyayB0aGUgZGV2aWNlIGFzIGluYWN0aXZlLCBzbyBhbnkgZnVydGhlciB1cmIgc3VibWlzc2lvbnMgZm9yCisJICogdGhpcyBkZXZpY2UgKGFuZCBhbnkgb2YgaXRzIGNoaWxkcmVuKSB3aWxsIGZhaWwgaW1tZWRpYXRlbHkuCisJICogdGhpcyBxdWllc2NlcyBldmVyeXRpbmcgZXhjZXB0IHBlbmRpbmcgdXJicy4KKwkgKi8KKwl1c2Jfc2V0X2RldmljZV9zdGF0ZSh1ZGV2LCBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpOworCisJLyogbG9jayB0aGUgYnVzIGxpc3Qgb24gYmVoYWxmIG9mIEhDRHMgdW5yZWdpc3RlcmluZyB0aGVpciByb290IGh1YnMgKi8KKwlpZiAoIXVkZXYtPnBhcmVudCkgeworCQlkb3duKCZ1c2JfYnVzX2xpc3RfbG9jayk7CisJCXVzYl9sb2NrX2RldmljZSh1ZGV2KTsKKwl9IGVsc2UKKwkJZG93bigmdWRldi0+c2VyaWFsaXplKTsKKworCWRldl9pbmZvICgmdWRldi0+ZGV2LCAiVVNCIGRpc2Nvbm5lY3QsIGFkZHJlc3MgJWRcbiIsIHVkZXYtPmRldm51bSk7CisKKwkvKiBGcmVlIHVwIGFsbCB0aGUgY2hpbGRyZW4gYmVmb3JlIHdlIHJlbW92ZSB0aGlzIGRldmljZSAqLworCWZvciAoaSA9IDA7IGkgPCBVU0JfTUFYQ0hJTERSRU47IGkrKykgeworCQlpZiAodWRldi0+Y2hpbGRyZW5baV0pCisJCQl1c2JfZGlzY29ubmVjdCgmdWRldi0+Y2hpbGRyZW5baV0pOworCX0KKworCS8qIGRlYWxsb2NhdGUgaGNkL2hhcmR3YXJlIHN0YXRlIC4uLiBudWtpbmcgYWxsIHBlbmRpbmcgdXJicyBhbmQKKwkgKiBjbGVhbmluZyB1cCBhbGwgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24KKwkgKiBzbyB0aGF0IHRoZSBoYXJkd2FyZSBpcyBub3cgZnVsbHkgcXVpZXNjZWQuCisJICovCisJdXNiX2Rpc2FibGVfZGV2aWNlKHVkZXYsIDApOworCisJLyogRnJlZSB0aGUgZGV2aWNlIG51bWJlciwgcmVtb3ZlIHRoZSAvcHJvYy9idXMvdXNiIGVudHJ5IGFuZAorCSAqIHRoZSBzeXNmcyBhdHRyaWJ1dGVzLCBhbmQgZGVsZXRlIHRoZSBwYXJlbnQncyBjaGlsZHJlbltdCisJICogKG9yIHJvb3RfaHViKSBwb2ludGVyLgorCSAqLworCWRldl9kYmcgKCZ1ZGV2LT5kZXYsICJ1bnJlZ2lzdGVyaW5nIGRldmljZVxuIik7CisJcmVsZWFzZV9hZGRyZXNzKHVkZXYpOworCXVzYmZzX3JlbW92ZV9kZXZpY2UodWRldik7CisJdXNiX3JlbW92ZV9zeXNmc19kZXZfZmlsZXModWRldik7CisKKwkvKiBBdm9pZCByYWNlcyB3aXRoIHJlY3Vyc2l2ZWx5X21hcmtfTk9UQVRUQUNIRUQoKSAqLworCXNwaW5fbG9ja19pcnEoJmRldmljZV9zdGF0ZV9sb2NrKTsKKwkqcGRldiA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxKCZkZXZpY2Vfc3RhdGVfbG9jayk7CisKKwlpZiAoIXVkZXYtPnBhcmVudCkgeworCQl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKKwkJdXAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwl9IGVsc2UKKwkJdXAoJnVkZXYtPnNlcmlhbGl6ZSk7CisKKwlkZXZpY2VfdW5yZWdpc3RlcigmdWRldi0+ZGV2KTsKK30KKworc3RhdGljIGludCBjaG9vc2VfY29uZmlndXJhdGlvbihzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQgYywgaTsKKworCS8qIE5PVEU6IHRoaXMgc2hvdWxkIGludGVyYWN0IHdpdGggaHViIHBvd2VyIGJ1ZGdldGluZyAqLworCisJYyA9IHVkZXYtPmNvbmZpZ1swXS5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWU7CisJaWYgKHVkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpIHsKKwkJZm9yIChpID0gMDsgaSA8IHVkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOyBpKyspIHsKKwkJCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IJKmRlc2M7CisKKwkJCS8qIGhldXJpc3RpYzogIExpbnV4IGlzIG1vcmUgbGlrZWx5IHRvIGhhdmUgY2xhc3MKKwkJCSAqIGRyaXZlcnMsIHNvIGF2b2lkIHZlbmRvci1zcGVjaWZpYyBpbnRlcmZhY2VzLgorCQkJICovCisJCQlkZXNjID0gJnVkZXYtPmNvbmZpZ1tpXS5pbnRmX2NhY2hlWzBdCisJCQkJCS0+YWx0c2V0dGluZy0+ZGVzYzsKKwkJCWlmIChkZXNjLT5iSW50ZXJmYWNlQ2xhc3MgPT0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDKQorCQkJCWNvbnRpbnVlOworCQkJLyogQ09NTS8yL2FsbCBpcyBDREMgQUNNLCBleGNlcHQgMHhmZiBpcyBNU0ZUIFJORElTLgorCQkJICogTVNGVCBuZWVkcyB0aGlzIHRvIGJlIHRoZSBmaXJzdCBjb25maWc7IG5ldmVyIHVzZQorCQkJICogaXQgYXMgdGhlIGRlZmF1bHQgdW5sZXNzIExpbnV4IGhhcyBob3N0LXNpZGUgUk5ESVMuCisJCQkgKiBBIHNlY29uZCBjb25maWcgd291bGQgaWRlYWxseSBiZSBDREMtRXRoZXJuZXQsIGJ1dAorCQkJICogbWF5IGluc3RlYWQgYmUgdGhlICJ2ZW5kb3Igc3BlY2lmaWMiIENEQyBzdWJzZXQKKwkJCSAqIGxvbmcgdXNlZCBieSBBUk0gTGludXggZm9yIHNhMTEwMCBvciBweGEyNTUuCisJCQkgKi8KKwkJCWlmIChkZXNjLT5iSW50ZXJmYWNlQ2xhc3MgPT0gVVNCX0NMQVNTX0NPTU0KKwkJCQkJJiYgZGVzYy0+YkludGVyZmFjZVN1YkNsYXNzID09IDIKKwkJCQkJJiYgZGVzYy0+YkludGVyZmFjZVByb3RvY29sID09IDB4ZmYpIHsKKwkJCQljID0gdWRldi0+Y29uZmlnWzFdLmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWMgPSB1ZGV2LT5jb25maWdbaV0uZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlOworCQkJYnJlYWs7CisJCX0KKwkJZGV2X2luZm8oJnVkZXYtPmRldiwKKwkJCSJjb25maWd1cmF0aW9uICMlZCBjaG9zZW4gZnJvbSAlZCBjaG9pY2VzXG4iLAorCQkJYywgdWRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMpOworCX0KKwlyZXR1cm4gYzsKK30KKworI2lmZGVmIERFQlVHCitzdGF0aWMgdm9pZCBzaG93X3N0cmluZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgY2hhciAqaWQsIGNoYXIgKnN0cmluZykKK3sKKwlpZiAoIXN0cmluZykKKwkJcmV0dXJuOworCWRldl9wcmludGsoS0VSTl9JTkZPLCAmdWRldi0+ZGV2LCAiJXM6ICVzXG4iLCBpZCwgc3RyaW5nKTsKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaG93X3N0cmluZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgY2hhciAqaWQsIGNoYXIgKnN0cmluZykKK3t9CisjZW5kaWYKKworc3RhdGljIHZvaWQgZ2V0X3N0cmluZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgY2hhciAqKnN0cmluZywgaW50IGluZGV4KQoreworCWNoYXIgKmJ1ZjsKKworCWlmICghaW5kZXgpCisJCXJldHVybjsKKwlidWYgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybjsKKwlpZiAodXNiX3N0cmluZyh1ZGV2LCBpbmRleCwgYnVmLCAyNTYpID4gMCkKKwkJKnN0cmluZyA9IGJ1ZjsKKwllbHNlCisJCWtmcmVlKGJ1Zik7Cit9CisKKworI2lmZGVmCUNPTkZJR19VU0JfT1RHCisjaW5jbHVkZSAib3RnX3doaXRlbGlzdC5oIgorI2VuZGlmCisKKy8qKgorICogdXNiX25ld19kZXZpY2UgLSBwZXJmb3JtIGluaXRpYWwgZGV2aWNlIHNldHVwICh1c2Jjb3JlLWludGVybmFsKQorICogQHVkZXY6IG5ld2x5IGFkZHJlc3NlZCBkZXZpY2UgKGluIEFERFJFU1Mgc3RhdGUpCisgKgorICogVGhpcyBpcyBjYWxsZWQgd2l0aCBkZXZpY2VzIHdoaWNoIGhhdmUgYmVlbiBlbnVtZXJhdGVkLCBidXQgbm90IHlldAorICogY29uZmlndXJlZC4gIFRoZSBkZXZpY2UgZGVzY3JpcHRvciBpcyBhdmFpbGFibGUsIGJ1dCBub3QgZGVzY3JpcHRvcnMKKyAqIGZvciBhbnkgZGV2aWNlIGNvbmZpZ3VyYXRpb24uICBUaGUgY2FsbGVyIG11c3QgaGF2ZSBsb2NrZWQgdWRldiBhbmQKKyAqIGVpdGhlciB0aGUgcGFyZW50IGh1YiAoaWYgdWRldiBpcyBhIG5vcm1hbCBkZXZpY2UpIG9yIGVsc2UgdGhlCisgKiB1c2JfYnVzX2xpc3RfbG9jayAoaWYgdWRldiBpcyBhIHJvb3QgaHViKS4gIFRoZSBwYXJlbnQncyBwb2ludGVyIHRvCisgKiB1ZGV2IGhhcyBhbHJlYWR5IGJlZW4gaW5zdGFsbGVkLCBidXQgdWRldiBpcyBub3QgeWV0IHZpc2libGUgdGhyb3VnaAorICogc3lzZnMgb3Igb3RoZXIgZmlsZXN5c3RlbSBjb2RlLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2VzcyAoZGV2aWNlIGlzIGNvbmZpZ3VyZWQgYW5kIGxpc3RlZCwgd2l0aCBpdHMKKyAqIGludGVyZmFjZXMsIGluIHN5c2ZzKTsgZWxzZSBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlLgorICoKKyAqIFRoaXMgY2FsbCBpcyBzeW5jaHJvbm91cywgYW5kIG1heSBub3QgYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqCisgKiBPbmx5IHRoZSBodWIgZHJpdmVyIHNob3VsZCBldmVyIGNhbGwgdGhpczsgcm9vdCBodWIgcmVnaXN0cmF0aW9uCisgKiB1c2VzIGl0IGluZGlyZWN0bHkuCisgKi8KK2ludCB1c2JfbmV3X2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQgZXJyOworCWludCBjOworCisJZXJyID0gdXNiX2dldF9jb25maWd1cmF0aW9uKHVkZXYpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgImNhbid0IHJlYWQgY29uZmlndXJhdGlvbnMsIGVycm9yICVkXG4iLAorCQkJZXJyKTsKKwkJZ290byBmYWlsOworCX0KKworCS8qIHJlYWQgdGhlIHN0YW5kYXJkIHN0cmluZ3MgYW5kIGNhY2hlIHRoZW0gaWYgcHJlc2VudCAqLworCWdldF9zdHJpbmcodWRldiwgJnVkZXYtPnByb2R1Y3QsIHVkZXYtPmRlc2NyaXB0b3IuaVByb2R1Y3QpOworCWdldF9zdHJpbmcodWRldiwgJnVkZXYtPm1hbnVmYWN0dXJlciwgdWRldi0+ZGVzY3JpcHRvci5pTWFudWZhY3R1cmVyKTsKKwlnZXRfc3RyaW5nKHVkZXYsICZ1ZGV2LT5zZXJpYWwsIHVkZXYtPmRlc2NyaXB0b3IuaVNlcmlhbE51bWJlcik7CisKKwkvKiBUZWxsIHRoZSB3b3JsZCEgKi8KKwlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJuZXcgZGV2aWNlIHN0cmluZ3M6IE1mcj0lZCwgUHJvZHVjdD0lZCwgIgorCQkJIlNlcmlhbE51bWJlcj0lZFxuIiwKKwkJCXVkZXYtPmRlc2NyaXB0b3IuaU1hbnVmYWN0dXJlciwKKwkJCXVkZXYtPmRlc2NyaXB0b3IuaVByb2R1Y3QsCisJCQl1ZGV2LT5kZXNjcmlwdG9yLmlTZXJpYWxOdW1iZXIpOworCXNob3dfc3RyaW5nKHVkZXYsICJQcm9kdWN0IiwgdWRldi0+cHJvZHVjdCk7CisJc2hvd19zdHJpbmcodWRldiwgIk1hbnVmYWN0dXJlciIsIHVkZXYtPm1hbnVmYWN0dXJlcik7CisJc2hvd19zdHJpbmcodWRldiwgIlNlcmlhbE51bWJlciIsIHVkZXYtPnNlcmlhbCk7CisKKyNpZmRlZglDT05GSUdfVVNCX09URworCS8qCisJICogT1RHLWF3YXJlIGRldmljZXMgb24gT1RHLWNhcGFibGUgcm9vdCBodWJzIG1heSBiZSBhYmxlIHRvIHVzZSBTUlAsCisJICogdG8gd2FrZSB1cyBhZnRlciB3ZSd2ZSBwb3dlcmVkIG9mZiBWQlVTOyBhbmQgSE5QLCBzd2l0Y2hpbmcgcm9sZXMKKwkgKiAiaG9zdCIgdG8gInBlcmlwaGVyYWwiLiAgVGhlIE9URyBkZXNjcmlwdG9yIGhlbHBzIGZpZ3VyZSB0aGlzIG91dC4KKwkgKi8KKwlpZiAoIXVkZXYtPmJ1cy0+aXNfYl9ob3N0CisJCQkmJiB1ZGV2LT5jb25maWcKKwkJCSYmIHVkZXYtPnBhcmVudCA9PSB1ZGV2LT5idXMtPnJvb3RfaHViKSB7CisJCXN0cnVjdCB1c2Jfb3RnX2Rlc2NyaXB0b3IJKmRlc2MgPSAwOworCQlzdHJ1Y3QgdXNiX2J1cwkJCSpidXMgPSB1ZGV2LT5idXM7CisKKwkJLyogZGVzY3JpcHRvciBtYXkgYXBwZWFyIGFueXdoZXJlIGluIGNvbmZpZyAqLworCQlpZiAoX191c2JfZ2V0X2V4dHJhX2Rlc2NyaXB0b3IgKHVkZXYtPnJhd2Rlc2NyaXB0b3JzWzBdLAorCQkJCQlsZTE2X3RvX2NwdSh1ZGV2LT5jb25maWdbMF0uZGVzYy53VG90YWxMZW5ndGgpLAorCQkJCQlVU0JfRFRfT1RHLCAodm9pZCAqKikgJmRlc2MpID09IDApIHsKKwkJCWlmIChkZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfT1RHX0hOUCkgeworCQkJCXVuc2lnbmVkCQlwb3J0MTsKKwkJCQlzdHJ1Y3QgdXNiX2RldmljZQkqcm9vdCA9IHVkZXYtPnBhcmVudDsKKwkJCQkKKwkJCQlmb3IgKHBvcnQxID0gMTsgcG9ydDEgPD0gcm9vdC0+bWF4Y2hpbGQ7CisJCQkJCQlwb3J0MSsrKSB7CisJCQkJCWlmIChyb290LT5jaGlsZHJlbltwb3J0MS0xXSA9PSB1ZGV2KQorCQkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJZGV2X2luZm8oJnVkZXYtPmRldiwKKwkJCQkJIkR1YWwtUm9sZSBPVEcgZGV2aWNlIG9uICVzSE5QIHBvcnRcbiIsCisJCQkJCShwb3J0MSA9PSBidXMtPm90Z19wb3J0KQorCQkJCQkJPyAiIiA6ICJub24tIik7CisKKwkJCQkvKiBlbmFibGUgSE5QIGJlZm9yZSBzdXNwZW5kLCBpdCdzIHNpbXBsZXIgKi8KKwkJCQlpZiAocG9ydDEgPT0gYnVzLT5vdGdfcG9ydCkKKwkJCQkJYnVzLT5iX2hucF9lbmFibGUgPSAxOworCQkJCWVyciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LAorCQkJCQl1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCQkJCVVTQl9SRVFfU0VUX0ZFQVRVUkUsIDAsCisJCQkJCWJ1cy0+Yl9obnBfZW5hYmxlCisJCQkJCQk/IFVTQl9ERVZJQ0VfQl9ITlBfRU5BQkxFCisJCQkJCQk6IFVTQl9ERVZJQ0VfQV9BTFRfSE5QX1NVUFBPUlQsCisJCQkJCTAsIE5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwkJCQlpZiAoZXJyIDwgMCkgeworCQkJCQkvKiBPVEcgTUVTU0FHRTogcmVwb3J0IGVycm9ycyBoZXJlLAorCQkJCQkgKiBjdXN0b21pemUgdG8gbWF0Y2ggeW91ciBwcm9kdWN0LgorCQkJCQkgKi8KKwkJCQkJZGV2X2luZm8oJnVkZXYtPmRldiwKKwkJCQkJCSJjYW4ndCBzZXQgSE5QIG1vZGU7ICVkXG4iLAorCQkJCQkJZXJyKTsKKwkJCQkJYnVzLT5iX2hucF9lbmFibGUgPSAwOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCWlmICghaXNfdGFyZ2V0ZWQodWRldikpIHsKKworCQkvKiBNYXliZSBpdCBjYW4gdGFsayB0byB1cywgdGhvdWdoIHdlIGNhbid0IHRhbGsgdG8gaXQuCisJCSAqIChJbmNsdWRlcyBITlAgdGVzdCBkZXZpY2UuKQorCQkgKi8KKwkJaWYgKHVkZXYtPmJ1cy0+Yl9obnBfZW5hYmxlIHx8IHVkZXYtPmJ1cy0+aXNfYl9ob3N0KSB7CisJCQlzdGF0aWMgaW50IF9fdXNiX3N1c3BlbmRfZGV2aWNlIChzdHJ1Y3QgdXNiX2RldmljZSAqLAorCQkJCQkJaW50IHBvcnQxLCBwbV9tZXNzYWdlX3Qgc3RhdGUpOworCQkJZXJyID0gX191c2Jfc3VzcGVuZF9kZXZpY2UodWRldiwKKwkJCQkJdWRldi0+YnVzLT5vdGdfcG9ydCwKKwkJCQkJUE1TR19TVVNQRU5EKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCWRldl9kYmcoJnVkZXYtPmRldiwgIkhOUCBmYWlsLCAlZFxuIiwgZXJyKTsKKwkJfQorCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGZhaWw7CisJfQorI2VuZGlmCisKKwkvKiBwdXQgZGV2aWNlLXNwZWNpZmljIGZpbGVzIGludG8gc3lzZnMgKi8KKwllcnIgPSBkZXZpY2VfYWRkICgmdWRldi0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgImNhbid0IGRldmljZV9hZGQsIGVycm9yICVkXG4iLCBlcnIpOworCQlnb3RvIGZhaWw7CisJfQorCXVzYl9jcmVhdGVfc3lzZnNfZGV2X2ZpbGVzICh1ZGV2KTsKKworCS8qIGNob29zZSBhbmQgc2V0IHRoZSBjb25maWd1cmF0aW9uLiB0aGF0IHJlZ2lzdGVycyB0aGUgaW50ZXJmYWNlcworCSAqIHdpdGggdGhlIGRyaXZlciBjb3JlLCBhbmQgbGV0cyB1c2IgZGV2aWNlIGRyaXZlcnMgYmluZCB0byB0aGVtLgorCSAqLworCWMgPSBjaG9vc2VfY29uZmlndXJhdGlvbih1ZGV2KTsKKwlpZiAoYyA8IDApCisJCWRldl93YXJuKCZ1ZGV2LT5kZXYsCisJCQkJImNhbid0IGNob29zZSBhbiBpbml0aWFsIGNvbmZpZ3VyYXRpb25cbiIpOworCWVsc2UgeworCQllcnIgPSB1c2Jfc2V0X2NvbmZpZ3VyYXRpb24odWRldiwgYyk7CisJCWlmIChlcnIpIHsKKwkJCWRldl9lcnIoJnVkZXYtPmRldiwgImNhbid0IHNldCBjb25maWcgIyVkLCBlcnJvciAlZFxuIiwKKwkJCQkJYywgZXJyKTsKKwkJCXVzYl9yZW1vdmVfc3lzZnNfZGV2X2ZpbGVzKHVkZXYpOworCQkJZGV2aWNlX2RlbCgmdWRldi0+ZGV2KTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCX0KKworCS8qIFVTQiBkZXZpY2Ugc3RhdGUgPT0gY29uZmlndXJlZCAuLi4gdXNhYmxlICovCisKKwkvKiBhZGQgYSAvcHJvYy9idXMvdXNiIGVudHJ5ICovCisJdXNiZnNfYWRkX2RldmljZSh1ZGV2KTsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwl1c2Jfc2V0X2RldmljZV9zdGF0ZSh1ZGV2LCBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpOworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBodWJfcG9ydF9zdGF0dXMoc3RydWN0IHVzYl9odWIgKmh1YiwgaW50IHBvcnQxLAorCQkJICAgICAgIHUxNiAqc3RhdHVzLCB1MTYgKmNoYW5nZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ2V0X3BvcnRfc3RhdHVzKGh1Yi0+aGRldiwgcG9ydDEsICZodWItPnN0YXR1cy0+cG9ydCk7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIgKGh1Yi0+aW50ZmRldiwKKwkJCSIlcyBmYWlsZWQgKGVyciA9ICVkKVxuIiwgX19GVU5DVElPTl9fLCByZXQpOworCWVsc2UgeworCQkqc3RhdHVzID0gbGUxNl90b19jcHUoaHViLT5zdGF0dXMtPnBvcnQud1BvcnRTdGF0dXMpOworCQkqY2hhbmdlID0gbGUxNl90b19jcHUoaHViLT5zdGF0dXMtPnBvcnQud1BvcnRDaGFuZ2UpOyAKKwkJcmV0ID0gMDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBQT1JUX1JFU0VUX1RSSUVTCTUKKyNkZWZpbmUgU0VUX0FERFJFU1NfVFJJRVMJMgorI2RlZmluZSBHRVRfREVTQ1JJUFRPUl9UUklFUwkyCisjZGVmaW5lIFNFVF9DT05GSUdfVFJJRVMJKDIgKiAodXNlX2JvdGhfc2NoZW1lcyArIDEpKQorI2RlZmluZSBVU0VfTkVXX1NDSEVNRShpKQkoKGkpIC8gMiA9PSBvbGRfc2NoZW1lX2ZpcnN0KQorCisjZGVmaW5lIEhVQl9ST09UX1JFU0VUX1RJTUUJNTAJLyogdGltZXMgYXJlIGluIG1zZWMgKi8KKyNkZWZpbmUgSFVCX1NIT1JUX1JFU0VUX1RJTUUJMTAKKyNkZWZpbmUgSFVCX0xPTkdfUkVTRVRfVElNRQkyMDAKKyNkZWZpbmUgSFVCX1JFU0VUX1RJTUVPVVQJNTAwCisKK3N0YXRpYyBpbnQgaHViX3BvcnRfd2FpdF9yZXNldChzdHJ1Y3QgdXNiX2h1YiAqaHViLCBpbnQgcG9ydDEsCisJCQkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHVuc2lnbmVkIGludCBkZWxheSkKK3sKKwlpbnQgZGVsYXlfdGltZSwgcmV0OworCXUxNiBwb3J0c3RhdHVzOworCXUxNiBwb3J0Y2hhbmdlOworCisJZm9yIChkZWxheV90aW1lID0gMDsKKwkJCWRlbGF5X3RpbWUgPCBIVUJfUkVTRVRfVElNRU9VVDsKKwkJCWRlbGF5X3RpbWUgKz0gZGVsYXkpIHsKKwkJLyogd2FpdCB0byBnaXZlIHRoZSBkZXZpY2UgYSBjaGFuY2UgdG8gcmVzZXQgKi8KKwkJbXNsZWVwKGRlbGF5KTsKKworCQkvKiByZWFkIGFuZCBkZWNvZGUgcG9ydCBzdGF0dXMgKi8KKwkJcmV0ID0gaHViX3BvcnRfc3RhdHVzKGh1YiwgcG9ydDEsICZwb3J0c3RhdHVzLCAmcG9ydGNoYW5nZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBEZXZpY2Ugd2VudCBhd2F5PyAqLworCQlpZiAoIShwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OKSkKKwkJCXJldHVybiAtRU5PVENPTk47CisKKwkJLyogYm9tYiBvdXQgY29tcGxldGVseSBpZiBzb21ldGhpbmcgd2VpcmQgaGFwcGVuZWQgKi8KKwkJaWYgKChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX0NPTk5FQ1RJT04pKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJLyogaWYgd2VgdmUgZmluaXNoZWQgcmVzZXR0aW5nLCB0aGVuIGJyZWFrIG91dCBvZiB0aGUgbG9vcCAqLworCQlpZiAoIShwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9SRVNFVCkgJiYKKwkJICAgIChwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9FTkFCTEUpKSB7CisJCQlpZiAocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfSElHSF9TUEVFRCkKKwkJCQl1ZGV2LT5zcGVlZCA9IFVTQl9TUEVFRF9ISUdIOworCQkJZWxzZSBpZiAocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfTE9XX1NQRUVEKQorCQkJCXVkZXYtPnNwZWVkID0gVVNCX1NQRUVEX0xPVzsKKwkJCWVsc2UKKwkJCQl1ZGV2LT5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKiBzd2l0Y2ggdG8gdGhlIGxvbmcgZGVsYXkgYWZ0ZXIgdHdvIHNob3J0IGRlbGF5IGZhaWx1cmVzICovCisJCWlmIChkZWxheV90aW1lID49IDIgKiBIVUJfU0hPUlRfUkVTRVRfVElNRSkKKwkJCWRlbGF5ID0gSFVCX0xPTkdfUkVTRVRfVElNRTsKKworCQlkZXZfZGJnIChodWItPmludGZkZXYsCisJCQkicG9ydCAlZCBub3QgcmVzZXQgeWV0LCB3YWl0aW5nICVkbXNcbiIsCisJCQlwb3J0MSwgZGVsYXkpOworCX0KKworCXJldHVybiAtRUJVU1k7Cit9CisKK3N0YXRpYyBpbnQgaHViX3BvcnRfcmVzZXQoc3RydWN0IHVzYl9odWIgKmh1YiwgaW50IHBvcnQxLAorCQkJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1bnNpZ25lZCBpbnQgZGVsYXkpCit7CisJaW50IGksIHN0YXR1czsKKworCS8qIFJlc2V0IHRoZSBwb3J0ICovCisJZm9yIChpID0gMDsgaSA8IFBPUlRfUkVTRVRfVFJJRVM7IGkrKykgeworCQlzdGF0dXMgPSBzZXRfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwKKwkJCQlwb3J0MSwgVVNCX1BPUlRfRkVBVF9SRVNFVCk7CisJCWlmIChzdGF0dXMpCisJCQlkZXZfZXJyKGh1Yi0+aW50ZmRldiwKKwkJCQkJImNhbm5vdCByZXNldCBwb3J0ICVkIChlcnIgPSAlZClcbiIsCisJCQkJCXBvcnQxLCBzdGF0dXMpOworCQllbHNlIHsKKwkJCXN0YXR1cyA9IGh1Yl9wb3J0X3dhaXRfcmVzZXQoaHViLCBwb3J0MSwgdWRldiwgZGVsYXkpOworCQkJaWYgKHN0YXR1cykKKwkJCQlkZXZfZGJnKGh1Yi0+aW50ZmRldiwKKwkJCQkJCSJwb3J0X3dhaXRfcmVzZXQ6IGVyciA9ICVkXG4iLAorCQkJCQkJc3RhdHVzKTsKKwkJfQorCisJCS8qIHJldHVybiBvbiBkaXNjb25uZWN0IG9yIHJlc2V0ICovCisJCXN3aXRjaCAoc3RhdHVzKSB7CisJCWNhc2UgMDoKKwkJCS8qIFRSU1RSQ1kgPSAxMCBtcyAqLworCQkJbXNsZWVwKDEwKTsKKwkJCS8qIEZBTEwgVEhST1VHSCAqLworCQljYXNlIC1FTk9UQ09OTjoKKwkJY2FzZSAtRU5PREVWOgorCQkJY2xlYXJfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwKKwkJCQlwb3J0MSwgVVNCX1BPUlRfRkVBVF9DX1JFU0VUKTsKKwkJCS8qIEZJWE1FIG5lZWQgZGlzY29ubmVjdCgpIGZvciBOT1RBVFRBQ0hFRCBkZXZpY2UgKi8KKwkJCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVkZXYsIHN0YXR1cworCQkJCQk/IFVTQl9TVEFURV9OT1RBVFRBQ0hFRAorCQkJCQk6IFVTQl9TVEFURV9ERUZBVUxUKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKworCQlkZXZfZGJnIChodWItPmludGZkZXYsCisJCQkicG9ydCAlZCBub3QgZW5hYmxlZCwgdHJ5aW5nIHJlc2V0IGFnYWluLi4uXG4iLAorCQkJcG9ydDEpOworCQlkZWxheSA9IEhVQl9MT05HX1JFU0VUX1RJTUU7CisJfQorCisJZGV2X2VyciAoaHViLT5pbnRmZGV2LAorCQkiQ2Fubm90IGVuYWJsZSBwb3J0ICVpLiAgTWF5YmUgdGhlIFVTQiBjYWJsZSBpcyBiYWQ/XG4iLAorCQlwb3J0MSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGh1Yl9wb3J0X2Rpc2FibGUoc3RydWN0IHVzYl9odWIgKmh1YiwgaW50IHBvcnQxLCBpbnQgc2V0X3N0YXRlKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpoZGV2ID0gaHViLT5oZGV2OworCWludCByZXQ7CisKKwlpZiAoaGRldi0+Y2hpbGRyZW5bcG9ydDEtMV0gJiYgc2V0X3N0YXRlKSB7CisJCXVzYl9zZXRfZGV2aWNlX3N0YXRlKGhkZXYtPmNoaWxkcmVuW3BvcnQxLTFdLAorCQkJCVVTQl9TVEFURV9OT1RBVFRBQ0hFRCk7CisJfQorCXJldCA9IGNsZWFyX3BvcnRfZmVhdHVyZShoZGV2LCBwb3J0MSwgVVNCX1BPUlRfRkVBVF9FTkFCTEUpOworCWlmIChyZXQpCisJCWRldl9lcnIoaHViLT5pbnRmZGV2LCAiY2Fubm90IGRpc2FibGUgcG9ydCAlZCAoZXJyID0gJWQpXG4iLAorCQkJcG9ydDEsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGlzYWJsZSBhIHBvcnQgYW5kIG1hcmsgYSBsb2dpY2FsIGNvbm5uZWN0LWNoYW5nZSBldmVudCwgc28gdGhhdCBzb21lCisgKiB0aW1lIGxhdGVyIGtodWJkIHdpbGwgZGlzY29ubmVjdCgpIGFueSBleGlzdGluZyB1c2JfZGV2aWNlIG9uIHRoZSBwb3J0CisgKiBhbmQgd2lsbCByZS1lbnVtZXJhdGUgaWYgdGhlcmUgYWN0dWFsbHkgaXMgYSBkZXZpY2UgYXR0YWNoZWQuCisgKi8KK3N0YXRpYyB2b2lkIGh1Yl9wb3J0X2xvZ2ljYWxfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2h1YiAqaHViLCBpbnQgcG9ydDEpCit7CisJZGV2X2RiZyhodWItPmludGZkZXYsICJsb2dpY2FsIGRpc2Nvbm5lY3Qgb24gcG9ydCAlZFxuIiwgcG9ydDEpOworCWh1Yl9wb3J0X2Rpc2FibGUoaHViLCBwb3J0MSwgMSk7CisKKwkvKiBGSVhNRSBsZXQgY2FsbGVyIGFzayB0byBwb3dlciBkb3duIHRoZSBwb3J0OgorCSAqICAtIHNvbWUgZGV2aWNlcyB3b24ndCBlbnVtZXJhdGUgd2l0aG91dCBhIFZCVVMgcG93ZXIgY3ljbGUKKwkgKiAgLSBTUlAgc2F2ZXMgcG93ZXIgdGhhdCB3YXkKKwkgKiAgLSB1c2Jfc3VzcGVuZF9kZXZpY2UoZGV2LFBNX1NVU1BFTkRfRElTSykKKwkgKiBUaGF0J3MgZWFzeSBpZiB0aGlzIGh1YiBjYW4gc3dpdGNoIHBvd2VyIHBlci1wb3J0LCBhbmQKKwkgKiBraHViZCByZWFjdGl2YXRlcyB0aGUgcG9ydCBsYXRlciAodGltZXIsIFNSUCwgZXRjKS4KKwkgKiBQb3dlcmRvd24gbXVzdCBiZSBvcHRpb25hbCwgYmVjYXVzZSBvZiByZXNldC9ERlUuCisJICovCisKKwlzZXRfYml0KHBvcnQxLCBodWItPmNoYW5nZV9iaXRzKTsKKyAJa2lja19raHViZChodWIpOworfQorCisKKyNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKKworLyoKKyAqIFNlbGVjdGl2ZSBwb3J0IHN1c3BlbmQgcmVkdWNlcyBwb3dlcjsgbW9zdCBzdXNwZW5kZWQgZGV2aWNlcyBkcmF3CisgKiBsZXNzIHRoYW4gNTAwIHVBLiAgSXQncyBhbHNvIHVzZWQgaW4gT1RHLCBhbG9uZyB3aXRoIHJlbW90ZSB3YWtldXAuCisgKiBBbGwgZGV2aWNlcyBiZWxvdyB0aGUgc3VzcGVuZGVkIHBvcnQgYXJlIGFsc28gc3VzcGVuZGVkLgorICoKKyAqIERldmljZXMgbGVhdmUgc3VzcGVuZCBzdGF0ZSB3aGVuIHRoZSBob3N0IHdha2VzIHRoZW0gdXAuICBTb21lIGRldmljZXMKKyAqIGFsc28gc3VwcG9ydCAicmVtb3RlIHdha2V1cCIsIHdoZXJlIHRoZSBkZXZpY2UgY2FuIGFjdGl2YXRlIHRoZSBVU0IKKyAqIHRyZWUgYWJvdmUgdGhlbSB0byBkZWxpdmVyIGRhdGEsIHN1Y2ggYXMgYSBrZXlwcmVzcyBvciBwYWNrZXQuICBJbgorICogc29tZSBjYXNlcywgdGhpcyB3YWtlcyB0aGUgVVNCIGhvc3QuCisgKi8KK3N0YXRpYyBpbnQgaHViX3BvcnRfc3VzcGVuZChzdHJ1Y3QgdXNiX2h1YiAqaHViLCBpbnQgcG9ydDEsCisJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludAlzdGF0dXM7CisKKwkvLyBkZXZfZGJnKGh1Yi0+aW50ZmRldiwgInN1c3BlbmQgcG9ydCAlZFxuIiwgcG9ydDEpOworCisJLyogZW5hYmxlIHJlbW90ZSB3YWtldXAgd2hlbiBhcHByb3ByaWF0ZTsgdGhpcyBsZXRzIHRoZSBkZXZpY2UKKwkgKiB3YWtlIHVwIHRoZSB1cHN0cmVhbSBodWIgKGluY2x1ZGluZyBtYXliZSB0aGUgcm9vdCBodWIpLgorCSAqCisJICogTk9URTogIE9URyBkZXZpY2VzIG1heSBpc3N1ZSByZW1vdGUgd2FrZXVwIChvciBTUlApIGV2ZW4gd2hlbgorCSAqIHdlIGRvbid0IGV4cGxpY2l0bHkgZW5hYmxlIGl0IGhlcmUuCisJICovCisJaWYgKHVkZXYtPmFjdGNvbmZpZworCQkJLy8gJiYgRklYTUUgKHJlbW90ZSB3YWtldXAgZW5hYmxlZCBvbiB0aGlzIGJ1cykKKwkJCS8vIC4uLiBjdXJyZW50bHkgYXNzdW1pbmcgaXQncyBhbHdheXMgYXBwcm9wcmlhdGUKKwkJCSYmICh1ZGV2LT5hY3Rjb25maWctPmRlc2MuYm1BdHRyaWJ1dGVzCisJCQkJJiBVU0JfQ09ORklHX0FUVF9XQUtFVVApICE9IDApIHsKKwkJc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCQlVU0JfUkVRX1NFVF9GRUFUVVJFLCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCVVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCwgMCwKKwkJCQlOVUxMLCAwLAorCQkJCVVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwkJaWYgKHN0YXR1cykKKwkJCWRldl9kYmcoJnVkZXYtPmRldiwKKwkJCQkid29uJ3QgcmVtb3RlIHdha2V1cCwgc3RhdHVzICVkXG4iLAorCQkJCXN0YXR1cyk7CisJfQorCisJLyogc2VlIDcuMS43LjYgKi8KKwlzdGF0dXMgPSBzZXRfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwgcG9ydDEsIFVTQl9QT1JUX0ZFQVRfU1VTUEVORCk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZGJnKGh1Yi0+aW50ZmRldiwKKwkJCSJjYW4ndCBzdXNwZW5kIHBvcnQgJWQsIHN0YXR1cyAlZFxuIiwKKwkJCXBvcnQxLCBzdGF0dXMpOworCQkvKiBwYXJhbm9pYTogICJzaG91bGQgbm90IGhhcHBlbiIgKi8KKwkJKHZvaWQpIHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCQkJVVNCX1JFUV9DTEVBUl9GRUFUVVJFLCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCVVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCwgMCwKKwkJCQlOVUxMLCAwLAorCQkJCVVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwl9IGVsc2UgeworCQkvKiBkZXZpY2UgaGFzIHVwIHRvIDEwIG1zZWMgdG8gZnVsbHkgc3VzcGVuZCAqLworCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJ1c2Igc3VzcGVuZFxuIik7CisJCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVkZXYsIFVTQl9TVEFURV9TVVNQRU5ERUQpOworCQltc2xlZXAoMTApOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogRGV2aWNlcyBvbiBVU0IgaHViIHBvcnRzIGhhdmUgb25seSBvbmUgInN1c3BlbmQiIHN0YXRlLCBjb3JyZXNwb25kaW5nCisgKiB0byBBQ1BJIEQyIChQTV9TVVNQRU5EX01FTSksICJtYXkgY2F1c2UgdGhlIGRldmljZSB0byBsb3NlIHNvbWUgY29udGV4dCIuCisgKiBTdGF0ZSB0cmFuc2l0aW9ucyBpbmNsdWRlOgorICoKKyAqICAgLSBzdXNwZW5kLCByZXN1bWUgLi4uIHdoZW4gdGhlIFZCVVMgcG93ZXIgbGluayBzdGF5cyBsaXZlCisgKiAgIC0gc3VzcGVuZCwgZGlzY29ubmVjdCAuLi4gVkJVUyBsb3N0CisgKgorICogT25jZSBWQlVTIGRyb3AgYnJlYWtzIHRoZSBjaXJjdWl0LCB0aGUgcG9ydCBpdCdzIHVzaW5nIGhhcyB0byBnbyB0aHJvdWdoCisgKiBub3JtYWwgcmUtZW51bWVyYXRpb24gcHJvY2VkdXJlcywgc3RhcnRpbmcgd2l0aCBlbmFibGluZyBWQlVTIHBvd2VyLgorICogT3RoZXIgdGhhbiByZS1pbml0aWFsaXppbmcgdGhlIGh1YiAocGx1Zy91bnBsdWcsIGV4Y2VwdCBmb3Igcm9vdCBodWJzKSwKKyAqIExpbnV4ICgyLjYpIGN1cnJlbnRseSBoYXMgTk8gbWVjaGFuaXNtcyB0byBpbml0aWF0ZSB0aGF0OiAgbm8ga2h1YmQKKyAqIHRpbWVyLCBubyBTUlAsIG5vIHJlcXVlc3RzIHRocm91Z2ggc3lzZnMuCisgKi8KK3N0YXRpYyBpbnQgX191c2Jfc3VzcGVuZF9kZXZpY2UgKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgcG9ydDEsCisJCQkJIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlpbnQJc3RhdHVzOworCisJLyogY2FsbGVyIG93bnMgdGhlIHVkZXYgZGV2aWNlIGxvY2sgKi8KKwlpZiAocG9ydDEgPCAwKQorCQlyZXR1cm4gcG9ydDE7CisKKwlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRAorCQkJfHwgdWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKSB7CisJCXJldHVybiAwOworCX0KKworCS8qIHN1c3BlbmQgaW50ZXJmYWNlIGRyaXZlcnM7IGlmIHRoaXMgaXMgYSBodWIsIGl0CisJICogc3VzcGVuZHMgdGhlIGNoaWxkIGRldmljZXMKKwkgKi8KKwlpZiAodWRldi0+YWN0Y29uZmlnKSB7CisJCWludAlpOworCisJCWZvciAoaSA9IDA7IGkgPCB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgeworCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGY7CisJCQlzdHJ1Y3QgdXNiX2RyaXZlcgkqZHJpdmVyOworCisJCQlpbnRmID0gdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbaV07CisJCQlpZiAoc3RhdGUgPD0gaW50Zi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFpbnRmLT5kZXYuZHJpdmVyKQorCQkJCWNvbnRpbnVlOworCQkJZHJpdmVyID0gdG9fdXNiX2RyaXZlcihpbnRmLT5kZXYuZHJpdmVyKTsKKworCQkJaWYgKGRyaXZlci0+c3VzcGVuZCkgeworCQkJCXN0YXR1cyA9IGRyaXZlci0+c3VzcGVuZChpbnRmLCBzdGF0ZSk7CisJCQkJaWYgKGludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSAhPSBzdGF0ZQorCQkJCQkJfHwgc3RhdHVzKQorCQkJCQlkZXZfZXJyKCZpbnRmLT5kZXYsCisJCQkJCQkic3VzcGVuZCAlZCBmYWlsLCBjb2RlICVkXG4iLAorCQkJCQkJc3RhdGUsIHN0YXR1cyk7CisJCQl9CisKKwkJCS8qIG9ubHkgZHJpdmVycyB3aXRoIHN1c3BlbmQoKSBjYW4gZXZlciByZXN1bWUoKTsKKwkJCSAqIGFuZCBhZnRlciBwb3dlciBsb3NzLCBldmVuIHRoZXkgd29uJ3QuCisJCQkgKiBidXNfcmVzY2FuX2RldmljZXMoKSBjYW4gcmViaW5kIGRyaXZlcnMgbGF0ZXIuCisJCQkgKgorCQkJICogRklYTUUgdGhlIFBNIGNvcmUgc2VsZi1kZWFkbG9ja3Mgd2hlbiB1bmJpbmRpbmcKKwkJCSAqIGRyaXZlcnMgZHVyaW5nIHN1c3BlbmQvcmVzdW1lIC4uLiBldmVyeXRoaW5nIGdyYWJzCisJCQkgKiBkcG1fc2VtIChub3QgYSBzcGlubG9jaywgdWdoKS4gIHdlIHdhbnQgdG8gdW5iaW5kLAorCQkJICogc2luY2Ugd2Uga25vdyBldmVyeSBkcml2ZXIncyBwcm9iZS9kaXNjb25uZWN0IHdvcmtzCisJCQkgKiBldmVuIGZvciBkcml2ZXJzIHRoYXQgY2FuJ3Qgc3VzcGVuZC4KKwkJCSAqLworCQkJaWYgKCFkcml2ZXItPnN1c3BlbmQgfHwgc3RhdGUgPiBQTV9TVVNQRU5EX01FTSkgeworI2lmIDEKKwkJCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAicmVzdW1lIGlzIHVuc2FmZSFcbiIpOworI2Vsc2UKKwkJCQlkb3duX3dyaXRlKCZ1c2JfYnVzX3R5cGUucndzZW0pOworCQkJCWRldmljZV9yZWxlYXNlX2RyaXZlcigmaW50Zi0+ZGV2KTsKKwkJCQl1cF93cml0ZSgmdXNiX2J1c190eXBlLnJ3c2VtKTsKKyNlbmRpZgorCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBGSVhNRSB0aGlzIG5lZWRzIHBvcnQgcG93ZXIgb2ZmIGNhbGwgcGF0aHMgdG9vLCB0byBoZWxwIGZvcmNlCisJICogVVNCIGludG8gdGhlICJnZW5lcmljIiBQTSBtb2RlbC4gIEF0IGxlYXN0IGZvciBkZXZpY2VzIG9uCisJICogcG9ydHMgdGhhdCBhcmVuJ3QgdXNpbmcgZ2FuZ2VkIHN3aXRjaGluZyAodXN1YWxseSByb290IGh1YnMpLgorCSAqCisJICogTk9URTogU1JQLWNhcGFibGUgbGlua3Mgc2hvdWxkIGFkb3B0IG1vcmUgYWdncmVzc2l2ZSBwb3dlcm9mZgorCSAqIHBvbGljaWVzICh3aGVuIEhOUCBkb2Vzbid0IGFwcGx5KSBvbmNlIHdlIGhhdmUgbWVjaGFuaXNtcyB0bworCSAqIHR1cm4gcG93ZXIgYmFjayBvbiEgIChMaWtlbHkgbm90IGJlZm9yZSAyLjcuLi4pCisJICovCisJaWYgKHN0YXRlID4gUE1fU1VTUEVORF9NRU0pIHsKKwkJZGV2X3dhcm4oJnVkZXYtPmRldiwgIm5vIHBvd2Vyb2ZmIHlldCwgc3VzcGVuZGluZyBpbnN0ZWFkXG4iKTsKKwl9CisKKwkvKiAiZ2xvYmFsIHN1c3BlbmQiIG9mIHRoZSBIQy10by1VU0IgaW50ZXJmYWNlIChyb290IGh1YiksIG9yCisJICogInNlbGVjdGl2ZSBzdXNwZW5kIiBvZiBqdXN0IG9uZSBodWItZGV2aWNlIGxpbmsuCisJICovCisJaWYgKCF1ZGV2LT5wYXJlbnQpIHsKKwkJc3RydWN0IHVzYl9idXMJKmJ1cyA9IHVkZXYtPmJ1czsKKwkJaWYgKGJ1cyAmJiBidXMtPm9wLT5odWJfc3VzcGVuZCkgeworCQkJc3RhdHVzID0gYnVzLT5vcC0+aHViX3N1c3BlbmQgKGJ1cyk7CisJCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJ1c2Igc3VzcGVuZFxuIik7CisJCQkJdXNiX3NldF9kZXZpY2Vfc3RhdGUodWRldiwKKwkJCQkJCVVTQl9TVEFURV9TVVNQRU5ERUQpOworCQkJfQorCQl9IGVsc2UKKwkJCXN0YXR1cyA9IC1FT1BOT1RTVVBQOworCX0gZWxzZQorCQlzdGF0dXMgPSBodWJfcG9ydF9zdXNwZW5kKGhkZXZfdG9faHViKHVkZXYtPnBhcmVudCksIHBvcnQxLAorCQkJCXVkZXYpOworCisJaWYgKHN0YXR1cyA9PSAwKQorCQl1ZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHVzYl9zdXNwZW5kX2RldmljZSAtIHN1c3BlbmQgYSB1c2IgZGV2aWNlCisgKiBAdWRldjogZGV2aWNlIHRoYXQncyBubyBsb25nZXIgaW4gYWN0aXZlIHVzZQorICogQHN0YXRlOiBQTVNHX1NVU1BFTkQgdG8gc3VzcGVuZAorICogQ29udGV4dDogbXVzdCBiZSBhYmxlIHRvIHNsZWVwOyBkZXZpY2Ugbm90IGxvY2tlZAorICoKKyAqIFN1c3BlbmRzIGEgVVNCIGRldmljZSB0aGF0IGlzbid0IGluIGFjdGl2ZSB1c2UsIGNvbnNlcnZpbmcgcG93ZXIuCisgKiBEZXZpY2VzIG1heSB3YWtlIG91dCBvZiBhIHN1c3BlbmQsIGlmIGFueXRoaW5nIGltcG9ydGFudCBoYXBwZW5zLAorICogdXNpbmcgdGhlIHJlbW90ZSB3YWtldXAgbWVjaGFuaXNtLiAgVGhleSBtYXkgYWxzbyBiZSB0YWtlbiBvdXQgb2YKKyAqIHN1c3BlbmQgYnkgdGhlIGhvc3QsIHVzaW5nIHVzYl9yZXN1bWVfZGV2aWNlKCkuICBJdCdzIGFsc28gcm91dGluZQorICogdG8gZGlzY29ubmVjdCBkZXZpY2VzIHdoaWxlIHRoZXkgYXJlIHN1c3BlbmRlZC4KKyAqCisgKiBTdXNwZW5kaW5nIE9URyBkZXZpY2VzIG1heSB0cmlnZ2VyIEhOUCwgaWYgdGhhdCdzIGJlZW4gZW5hYmxlZAorICogYmV0d2VlbiBhIHBhaXIgb2YgZHVhbC1yb2xlIGRldmljZXMuICBUaGF0IHdpbGwgY2hhbmdlIHJvbGVzLCBzdWNoCisgKiBhcyBmcm9tIEEtSG9zdCB0byBBLVBlcmlwaGVyYWwgb3IgZnJvbSBCLUhvc3QgYmFjayB0byBCLVBlcmlwaGVyYWwuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8uCisgKi8KK2ludCB1c2Jfc3VzcGVuZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlpbnQJcG9ydDEsIHN0YXR1czsKKworCXBvcnQxID0gbG9ja3RyZWUodWRldik7CisJaWYgKHBvcnQxIDwgMCkKKwkJcmV0dXJuIHBvcnQxOworCisJc3RhdHVzID0gX191c2Jfc3VzcGVuZF9kZXZpY2UodWRldiwgcG9ydDEsIHN0YXRlKTsKKwl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogaGFyZHdhcmUgcmVzdW1lIHNpZ25hbGluZyBpcyBmaW5pc2hlZCwgZWl0aGVyIGJlY2F1c2Ugb2Ygc2VsZWN0aXZlCisgKiByZXN1bWUgKGJ5IGhvc3QpIG9yIHJlbW90ZSB3YWtldXAgKGJ5IGRldmljZSkgLi4uIG5vdyBzZWUgd2hhdCBjaGFuZ2VkCisgKiBpbiB0aGUgdHJlZSB0aGF0J3Mgcm9vdGVkIGF0IHRoaXMgZGV2aWNlLgorICovCitzdGF0aWMgaW50IGZpbmlzaF9wb3J0X3Jlc3VtZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQJc3RhdHVzOworCXUxNglkZXZzdGF0dXM7CisKKwkvKiBjYWxsZXIgb3ducyB0aGUgdWRldiBkZXZpY2UgbG9jayAqLworCWRldl9kYmcoJnVkZXYtPmRldiwgInVzYiByZXN1bWVcbiIpOworCisJLyogdXNiIGNoOSBpZGVudGlmaWVzIGZvdXIgdmFyaWFudHMgb2YgU1VTUEVOREVELCBiYXNlZCBvbiB3aGF0CisJICogc3RhdGUgdGhlIGRldmljZSByZXN1bWVzIHRvLiAgTGludXggY3VycmVudGx5IHdvbid0IHNlZSB0aGUKKwkgKiBmaXJzdCB0d28gb24gdGhlIGhvc3Qgc2lkZTsgdGhleSdkIGJlIGluc2lkZSBodWJfcG9ydF9pbml0KCkKKwkgKiBkdXJpbmcgbWFueSB0aW1lb3V0cywgYnV0IGtodWJkIGNhbid0IHN1c3BlbmQgdW50aWwgbGF0ZXIuCisJICovCisJdXNiX3NldF9kZXZpY2Vfc3RhdGUodWRldiwgdWRldi0+YWN0Y29uZmlnCisJCQk/IFVTQl9TVEFURV9DT05GSUdVUkVECisJCQk6IFVTQl9TVEFURV9BRERSRVNTKTsKKwl1ZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOworCisgCS8qIDEwLjUuNC41IHNheXMgYmUgc3VyZSBkZXZpY2VzIGluIHRoZSB0cmVlIGFyZSBzdGlsbCB0aGVyZS4KKyAJICogRm9yIG5vdyBsZXQncyBhc3N1bWUgdGhlIGRldmljZSBkaWRuJ3QgZ28gY3Jhenkgb24gcmVzdW1lLAorCSAqIGFuZCBkZXZpY2UgZHJpdmVycyB3aWxsIGtub3cgYWJvdXQgYW55IHJlc3VtZSBxdWlya3MuCisJICovCisJc3RhdHVzID0gdXNiX2dldF9zdGF0dXModWRldiwgVVNCX1JFQ0lQX0RFVklDRSwgMCwgJmRldnN0YXR1cyk7CisJaWYgKHN0YXR1cyA8IDApCisJCWRldl9kYmcoJnVkZXYtPmRldiwKKwkJCSJnb25lIGFmdGVyIHVzYiByZXN1bWU/IHN0YXR1cyAlZFxuIiwKKwkJCXN0YXR1cyk7CisJZWxzZSBpZiAodWRldi0+YWN0Y29uZmlnKSB7CisJCXVuc2lnbmVkCWk7CisKKwkJbGUxNl90b19jcHVzKCZkZXZzdGF0dXMpOworCQlpZiAoZGV2c3RhdHVzICYgKDEgPDwgVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQKSkgeworCQkJc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkJCXVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCQkJVVNCX1JFUV9DTEVBUl9GRUFUVVJFLAorCQkJCQkJVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQkJVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQLCAwLAorCQkJCQlOVUxMLCAwLAorCQkJCQlVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJCQlpZiAoc3RhdHVzKSB7CisJCQkJZGV2X2RiZygmdWRldi0+ZGV2LCAiZGlzYWJsZSByZW1vdGUgIgorCQkJCQkid2FrZXVwLCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJCQkJc3RhdHVzID0gMDsKKwkJCX0KKwkJfQorCisJCS8qIHJlc3VtZSBpbnRlcmZhY2UgZHJpdmVyczsgaWYgdGhpcyBpcyBhIGh1YiwgaXQKKwkJICogcmVzdW1lcyB0aGUgY2hpbGQgZGV2aWNlcworCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IHVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKSB7CisJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZjsKKwkJCXN0cnVjdCB1c2JfZHJpdmVyCSpkcml2ZXI7CisKKwkJCWludGYgPSB1ZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVtpXTsKKwkJCWlmIChpbnRmLT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPT0gUE1fU1VTUEVORF9PTikKKwkJCQljb250aW51ZTsKKwkJCWlmICghaW50Zi0+ZGV2LmRyaXZlcikgeworCQkJCS8qIEZJWE1FIG1heWJlIGZvcmNlIHRvIGFsdCAwICovCisJCQkJY29udGludWU7CisJCQl9CisJCQlkcml2ZXIgPSB0b191c2JfZHJpdmVyKGludGYtPmRldi5kcml2ZXIpOworCisJCQkvKiBidXNfcmVzY2FuX2RldmljZXMoKSBtYXkgcmViaW5kIGRyaXZlcnMgKi8KKwkJCWlmICghZHJpdmVyLT5yZXN1bWUpCisJCQkJY29udGludWU7CisKKwkJCS8qIGNhbiB3ZSBkbyBiZXR0ZXIgdGhhbiBqdXN0IGxvZ2dpbmcgZXJyb3JzPyAqLworCQkJc3RhdHVzID0gZHJpdmVyLT5yZXN1bWUoaW50Zik7CisJCQlpZiAoaW50Zi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlICE9IFBNX1NVU1BFTkRfT04KKwkJCQkJfHwgc3RhdHVzKQorCQkJCWRldl9kYmcoJmludGYtPmRldiwKKwkJCQkJInJlc3VtZSBmYWlsLCBzdGF0ZSAlZCBjb2RlICVkXG4iLAorCQkJCQlpbnRmLT5kZXYucG93ZXIucG93ZXJfc3RhdGUsIHN0YXR1cyk7CisJCX0KKwkJc3RhdHVzID0gMDsKKworCX0gZWxzZSBpZiAodWRldi0+ZGV2bnVtIDw9IDApIHsKKwkJZGV2X2RiZygmdWRldi0+ZGV2LCAiYm9ndXMgcmVzdW1lIVxuIik7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQKK2h1Yl9wb3J0X3Jlc3VtZShzdHJ1Y3QgdXNiX2h1YiAqaHViLCBpbnQgcG9ydDEsIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludAlzdGF0dXM7CisKKwkvLyBkZXZfZGJnKGh1Yi0+aW50ZmRldiwgInJlc3VtZSBwb3J0ICVkXG4iLCBwb3J0MSk7CisKKwkvKiBzZWUgNy4xLjcuNzsgYWZmZWN0cyBwb3dlciB1c2FnZSwgYnV0IG5vdCBidWRnZXRpbmcgKi8KKwlzdGF0dXMgPSBjbGVhcl9wb3J0X2ZlYXR1cmUoaHViLT5oZGV2LAorCQkJcG9ydDEsIFVTQl9QT1JUX0ZFQVRfU1VTUEVORCk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZGJnKGh1Yi0+aW50ZmRldiwKKwkJCSJjYW4ndCByZXN1bWUgcG9ydCAlZCwgc3RhdHVzICVkXG4iLAorCQkJcG9ydDEsIHN0YXR1cyk7CisJfSBlbHNlIHsKKwkJdTE2CQlkZXZzdGF0dXM7CisJCXUxNgkJcG9ydGNoYW5nZTsKKworCQkvKiBkcml2ZSByZXN1bWUgZm9yIGF0IGxlYXN0IDIwIG1zZWMgKi8KKwkJaWYgKHVkZXYpCisJCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJSRVNVTUVcbiIpOworCQltc2xlZXAoMjUpOworCisjZGVmaW5lIExJVkVfRkxBR1MJKCBVU0JfUE9SVF9TVEFUX1BPV0VSIFwKKwkJCXwgVVNCX1BPUlRfU1RBVF9FTkFCTEUgXAorCQkJfCBVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT04pCisKKwkJLyogVmlydHVhbCByb290IGh1YnMgY2FuIHRyaWdnZXIgb24gR0VUX1BPUlRfU1RBVFVTIHRvCisJCSAqIHN0b3AgcmVzdW1lIHNpZ25hbGluZy4gIFRoZW4gZmluaXNoIHRoZSByZXN1bWUKKwkJICogc2VxdWVuY2UuCisJCSAqLworCQlkZXZzdGF0dXMgPSBwb3J0Y2hhbmdlID0gMDsKKwkJc3RhdHVzID0gaHViX3BvcnRfc3RhdHVzKGh1YiwgcG9ydDEsCisJCQkJJmRldnN0YXR1cywgJnBvcnRjaGFuZ2UpOworCQlpZiAoc3RhdHVzIDwgMAorCQkJCXx8IChkZXZzdGF0dXMgJiBMSVZFX0ZMQUdTKSAhPSBMSVZFX0ZMQUdTCisJCQkJfHwgKGRldnN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfU1VTUEVORCkgIT0gMAorCQkJCSkgeworCQkJZGV2X2RiZyhodWItPmludGZkZXYsCisJCQkJInBvcnQgJWQgc3RhdHVzICUwNHguJTA0eCBhZnRlciByZXN1bWUsICVkXG4iLAorCQkJCXBvcnQxLCBwb3J0Y2hhbmdlLCBkZXZzdGF0dXMsIHN0YXR1cyk7CisJCX0gZWxzZSB7CisJCQkvKiBUUlNNUkNZID0gMTAgbXNlYyAqLworCQkJbXNsZWVwKDEwKTsKKwkJCWlmICh1ZGV2KQorCQkJCXN0YXR1cyA9IGZpbmlzaF9wb3J0X3Jlc3VtZSh1ZGV2KTsKKwkJfQorCX0KKwlpZiAoc3RhdHVzIDwgMCkKKwkJaHViX3BvcnRfbG9naWNhbF9kaXNjb25uZWN0KGh1YiwgcG9ydDEpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBodWJfcmVzdW1lIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CisKKy8qKgorICogdXNiX3Jlc3VtZV9kZXZpY2UgLSByZS1hY3RpdmF0ZSBhIHN1c3BlbmRlZCB1c2IgZGV2aWNlCisgKiBAdWRldjogZGV2aWNlIHRvIHJlLWFjdGl2YXRlCisgKiBDb250ZXh0OiBtdXN0IGJlIGFibGUgdG8gc2xlZXA7IGRldmljZSBub3QgbG9ja2VkCisgKgorICogVGhpcyB3aWxsIHJlLWFjdGl2YXRlIHRoZSBzdXNwZW5kZWQgZGV2aWNlLCBpbmNyZWFzaW5nIHBvd2VyIHVzYWdlCisgKiB3aGlsZSBsZXR0aW5nIGRyaXZlcnMgY29tbXVuaWNhdGUgYWdhaW4gd2l0aCBpdHMgZW5kcG9pbnRzLgorICogVVNCIHJlc3VtZSBleHBsaWNpdGx5IGd1YXJhbnRlZXMgdGhhdCB0aGUgcG93ZXIgc2Vzc2lvbiBiZXR3ZWVuCisgKiB0aGUgaG9zdCBhbmQgdGhlIGRldmljZSBpcyB0aGUgc2FtZSBhcyBpdCB3YXMgd2hlbiB0aGUgZGV2aWNlCisgKiBzdXNwZW5kZWQuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8uCisgKi8KK2ludCB1c2JfcmVzdW1lX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQJcG9ydDEsIHN0YXR1czsKKworCXBvcnQxID0gbG9ja3RyZWUodWRldik7CisJaWYgKHBvcnQxIDwgMCkKKwkJcmV0dXJuIHBvcnQxOworCisJLyogImdsb2JhbCByZXN1bWUiIG9mIHRoZSBIQy10by1VU0IgaW50ZXJmYWNlIChyb290IGh1YiksIG9yCisJICogc2VsZWN0aXZlIHJlc3VtZSBvZiBvbmUgaHViLXRvLWRldmljZSBwb3J0CisJICovCisJaWYgKCF1ZGV2LT5wYXJlbnQpIHsKKwkJc3RydWN0IHVzYl9idXMJKmJ1cyA9IHVkZXYtPmJ1czsKKwkJaWYgKGJ1cyAmJiBidXMtPm9wLT5odWJfcmVzdW1lKSB7CisJCQlzdGF0dXMgPSBidXMtPm9wLT5odWJfcmVzdW1lIChidXMpOworCQl9IGVsc2UKKwkJCXN0YXR1cyA9IC1FT1BOT1RTVVBQOworCQlpZiAoc3RhdHVzID09IDApIHsKKwkJCWRldl9kYmcoJnVkZXYtPmRldiwgInVzYiByZXN1bWVcbiIpOworCQkJLyogVFJTTVJDWSA9IDEwIG1zZWMgKi8KKwkJCW1zbGVlcCgxMCk7CisJCQl1c2Jfc2V0X2RldmljZV9zdGF0ZSAodWRldiwgVVNCX1NUQVRFX0NPTkZJR1VSRUQpOworCQkJdWRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKKwkJCXN0YXR1cyA9IGh1Yl9yZXN1bWUgKHVkZXYKKwkJCQkJLT5hY3Rjb25maWctPmludGVyZmFjZVswXSk7CisJCX0KKwl9IGVsc2UgaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpIHsKKwkJLy8gTk9URSB0aGlzIGZhaWxzIGlmIHBhcmVudCBpcyBhbHNvIHN1c3BlbmRlZC4uLgorCQlzdGF0dXMgPSBodWJfcG9ydF9yZXN1bWUoaGRldl90b19odWIodWRldi0+cGFyZW50KSwKKwkJCQlwb3J0MSwgdWRldik7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gMDsKKwl9CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGV2X2RiZygmdWRldi0+ZGV2LCAiY2FuJ3QgcmVzdW1lLCBzdGF0dXMgJWRcbiIsCisJCQlzdGF0dXMpOworCX0KKworCXVzYl91bmxvY2tfZGV2aWNlKHVkZXYpOworCisJLyogcmViaW5kIGRyaXZlcnMgdGhhdCBoYWQgbm8gc3VzcGVuZCgpICovCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCXVzYl9sb2NrX2FsbF9kZXZpY2VzKCk7CisJCWJ1c19yZXNjYW5fZGV2aWNlcygmdXNiX2J1c190eXBlKTsKKwkJdXNiX3VubG9ja19hbGxfZGV2aWNlcygpOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHJlbW90ZV93YWtldXAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50CXN0YXR1cyA9IDA7CisKKwkvKiBkb24ndCByZXBlYXQgUkVTVU1FIHNlcXVlbmNlIGlmIHRoaXMgZGV2aWNlCisJICogd2FzIGFscmVhZHkgd29rZW4gdXAgYnkgc29tZSBvdGhlciB0YXNrCisJICovCisJZG93bigmdWRldi0+c2VyaWFsaXplKTsKKwlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkgeworCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJSRVNVTUUgKHdha2V1cClcbiIpOworCQkvKiBUUlNNUkNZID0gMTAgbXNlYyAqLworCQltc2xlZXAoMTApOworCQlzdGF0dXMgPSBmaW5pc2hfcG9ydF9yZXN1bWUodWRldik7CisJfQorCXVwKCZ1ZGV2LT5zZXJpYWxpemUpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgaHViX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgdXNiX2h1YgkJKmh1YiA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCXN0cnVjdCB1c2JfZGV2aWNlCSpoZGV2ID0gaHViLT5oZGV2OworCXVuc2lnbmVkCQlwb3J0MTsKKwlpbnQJCQlzdGF0dXM7CisKKwkvKiBzdG9wIGtodWJkIGFuZCByZWxhdGVkIGFjdGl2aXR5ICovCisJaHViX3F1aWVzY2UoaHViKTsKKworCS8qIHRoZW4gc3VzcGVuZCBldmVyeSBwb3J0ICovCisJZm9yIChwb3J0MSA9IDE7IHBvcnQxIDw9IGhkZXYtPm1heGNoaWxkOyBwb3J0MSsrKSB7CisJCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OworCisJCXVkZXYgPSBoZGV2LT5jaGlsZHJlbiBbcG9ydDEtMV07CisJCWlmICghdWRldikKKwkJCWNvbnRpbnVlOworCQlkb3duKCZ1ZGV2LT5zZXJpYWxpemUpOworCQlzdGF0dXMgPSBfX3VzYl9zdXNwZW5kX2RldmljZSh1ZGV2LCBwb3J0MSwgc3RhdGUpOworCQl1cCgmdWRldi0+c2VyaWFsaXplKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJzdXNwZW5kIHBvcnQgJWQgLS0+ICVkXG4iLAorCQkJCXBvcnQxLCBzdGF0dXMpOworCX0KKworCWludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGh1Yl9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9kZXZpY2UJKmhkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB1c2JfaHViCQkqaHViID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJdW5zaWduZWQJCXBvcnQxOworCWludAkJCXN0YXR1czsKKworCWlmIChpbnRmLT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPT0gUE1fU1VTUEVORF9PTikKKwkJcmV0dXJuIDA7CisKKwlmb3IgKHBvcnQxID0gMTsgcG9ydDEgPD0gaGRldi0+bWF4Y2hpbGQ7IHBvcnQxKyspIHsKKwkJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CisJCXUxNgkJCXBvcnRzdGF0LCBwb3J0Y2hhbmdlOworCisJCXVkZXYgPSBoZGV2LT5jaGlsZHJlbiBbcG9ydDEtMV07CisJCXN0YXR1cyA9IGh1Yl9wb3J0X3N0YXR1cyhodWIsIHBvcnQxLCAmcG9ydHN0YXQsICZwb3J0Y2hhbmdlKTsKKwkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19TVVNQRU5EKSB7CisJCQkJY2xlYXJfcG9ydF9mZWF0dXJlKGhkZXYsIHBvcnQxLAorCQkJCQlVU0JfUE9SVF9GRUFUX0NfU1VTUEVORCk7CisJCQkJcG9ydGNoYW5nZSAmPSB+VVNCX1BPUlRfU1RBVF9DX1NVU1BFTkQ7CisJCQl9CisKKwkJCS8qIGxldCBraHViZCBoYW5kbGUgZGlzY29ubmVjdHMgZXRjICovCisJCQlpZiAocG9ydGNoYW5nZSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghdWRldiB8fCBzdGF0dXMgPCAwKQorCQkJY29udGludWU7CisJCWRvd24gKCZ1ZGV2LT5zZXJpYWxpemUpOworCQlpZiAocG9ydHN0YXQgJiBVU0JfUE9SVF9TVEFUX1NVU1BFTkQpCisJCQlzdGF0dXMgPSBodWJfcG9ydF9yZXN1bWUoaHViLCBwb3J0MSwgdWRldik7CisJCWVsc2UgeworCQkJc3RhdHVzID0gZmluaXNoX3BvcnRfcmVzdW1lKHVkZXYpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJyZXN1bWUgcG9ydCAlZCAtLT4gJWRcbiIsCisJCQkJCXBvcnQxLCBzdGF0dXMpOworCQkJCWh1Yl9wb3J0X2xvZ2ljYWxfZGlzY29ubmVjdChodWIsIHBvcnQxKTsKKwkJCX0KKwkJfQorCQl1cCgmdWRldi0+c2VyaWFsaXplKTsKKwl9CisJaW50Zi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKKworCWh1Yi0+cmVzdW1lX3Jvb3RfaHViID0gMDsKKwlodWJfYWN0aXZhdGUoaHViKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB1c2JfcmVzdW1lX3Jvb3RfaHViKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2KQoreworCXN0cnVjdCB1c2JfaHViICpodWIgPSBoZGV2X3RvX2h1YihoZGV2KTsKKworCWh1Yi0+cmVzdW1lX3Jvb3RfaHViID0gMTsKKwlraWNrX2todWJkKGh1Yik7Cit9CisKKyNlbHNlCS8qICFDT05GSUdfVVNCX1NVU1BFTkQgKi8KKworaW50IHVzYl9zdXNwZW5kX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXJldHVybiAwOworfQorCitpbnQgdXNiX3Jlc3VtZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUJaHViX3N1c3BlbmQJCU5VTEwKKyNkZWZpbmUJaHViX3Jlc3VtZQkJTlVMTAorI2RlZmluZQlyZW1vdGVfd2FrZXVwKHgpCTAKKworI2VuZGlmCS8qIENPTkZJR19VU0JfU1VTUEVORCAqLworCitFWFBPUlRfU1lNQk9MKHVzYl9zdXNwZW5kX2RldmljZSk7CitFWFBPUlRfU1lNQk9MKHVzYl9yZXN1bWVfZGV2aWNlKTsKKworCisKKy8qIFVTQiAyLjAgc3BlYywgNy4xLjcuMyAvIGZpZyA3LTI5OgorICoKKyAqIEJldHdlZW4gY29ubmVjdCBkZXRlY3Rpb24gYW5kIHJlc2V0IHNpZ25hbGluZyB0aGVyZSBtdXN0IGJlIGEgZGVsYXkKKyAqIG9mIDEwMG1zIGF0IGxlYXN0IGZvciBkZWJvdW5jZSBhbmQgcG93ZXItc2V0dGxpbmcuICBUaGUgY29ycmVzcG9uZGluZworICogdGltZXIgc2hhbGwgcmVzdGFydCB3aGVuZXZlciB0aGUgZG93bnN0cmVhbSBwb3J0IGRldGVjdHMgYSBkaXNjb25uZWN0LgorICogCisgKiBBcHBhcmVudGx5IHRoZXJlIGFyZSBzb21lIGJsdWV0b290aCBhbmQgaXJkYS1kb25nbGVzIGFuZCBhIG51bWJlciBvZgorICogbG93LXNwZWVkIGRldmljZXMgZm9yIHdoaWNoIHRoaXMgZGVib3VuY2UgcGVyaW9kIG1heSBsYXN0IG92ZXIgYSBzZWNvbmQuCisgKiBOb3QgY292ZXJlZCBieSB0aGUgc3BlYyAtIGJ1dCBlYXN5IHRvIGRlYWwgd2l0aC4KKyAqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIHVzZXMgYSAxNTAwbXMgdG90YWwgZGVib3VuY2UgdGltZW91dDsgaWYgdGhlCisgKiBjb25uZWN0aW9uIGlzbid0IHN0YWJsZSBieSB0aGVuIGl0IHJldHVybnMgLUVUSU1FRE9VVC4gIEl0IGNoZWNrcworICogZXZlcnkgMjVtcyBmb3IgdHJhbnNpZW50IGRpc2Nvbm5lY3RzLiAgV2hlbiB0aGUgcG9ydCBzdGF0dXMgaGFzIGJlZW4KKyAqIHVuY2hhbmdlZCBmb3IgMTAwbXMgaXQgcmV0dXJucyB0aGUgcG9ydCBzdGF0dXMuCisgKi8KKworI2RlZmluZSBIVUJfREVCT1VOQ0VfVElNRU9VVAkxNTAwCisjZGVmaW5lIEhVQl9ERUJPVU5DRV9TVEVQCSAgMjUKKyNkZWZpbmUgSFVCX0RFQk9VTkNFX1NUQUJMRQkgMTAwCisKK3N0YXRpYyBpbnQgaHViX3BvcnRfZGVib3VuY2Uoc3RydWN0IHVzYl9odWIgKmh1YiwgaW50IHBvcnQxKQoreworCWludCByZXQ7CisJaW50IHRvdGFsX3RpbWUsIHN0YWJsZV90aW1lID0gMDsKKwl1MTYgcG9ydGNoYW5nZSwgcG9ydHN0YXR1czsKKwl1bnNpZ25lZCBjb25uZWN0aW9uID0gMHhmZmZmOworCisJZm9yICh0b3RhbF90aW1lID0gMDsgOyB0b3RhbF90aW1lICs9IEhVQl9ERUJPVU5DRV9TVEVQKSB7CisJCXJldCA9IGh1Yl9wb3J0X3N0YXR1cyhodWIsIHBvcnQxLCAmcG9ydHN0YXR1cywgJnBvcnRjaGFuZ2UpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYgKCEocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19DT05ORUNUSU9OKSAmJgorCQkgICAgIChwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OKSA9PSBjb25uZWN0aW9uKSB7CisJCQlzdGFibGVfdGltZSArPSBIVUJfREVCT1VOQ0VfU1RFUDsKKwkJCWlmIChzdGFibGVfdGltZSA+PSBIVUJfREVCT1VOQ0VfU1RBQkxFKQorCQkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJc3RhYmxlX3RpbWUgPSAwOworCQkJY29ubmVjdGlvbiA9IHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT047CisJCX0KKworCQlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19DT05ORUNUSU9OKSB7CisJCQljbGVhcl9wb3J0X2ZlYXR1cmUoaHViLT5oZGV2LCBwb3J0MSwKKwkJCQkJVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT04pOworCQl9CisKKwkJaWYgKHRvdGFsX3RpbWUgPj0gSFVCX0RFQk9VTkNFX1RJTUVPVVQpCisJCQlicmVhazsKKwkJbXNsZWVwKEhVQl9ERUJPVU5DRV9TVEVQKTsKKwl9CisKKwlkZXZfZGJnIChodWItPmludGZkZXYsCisJCSJkZWJvdW5jZTogcG9ydCAlZDogdG90YWwgJWRtcyBzdGFibGUgJWRtcyBzdGF0dXMgMHgleFxuIiwKKwkJcG9ydDEsIHRvdGFsX3RpbWUsIHN0YWJsZV90aW1lLCBwb3J0c3RhdHVzKTsKKworCWlmIChzdGFibGVfdGltZSA8IEhVQl9ERUJPVU5DRV9TVEFCTEUpCisJCXJldHVybiAtRVRJTUVET1VUOworCXJldHVybiBwb3J0c3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBlcDBfcmVpbml0KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXVzYl9kaXNhYmxlX2VuZHBvaW50KHVkZXYsIDAgKyBVU0JfRElSX0lOKTsKKwl1c2JfZGlzYWJsZV9lbmRwb2ludCh1ZGV2LCAwICsgVVNCX0RJUl9PVVQpOworCXVkZXYtPmVwX2luWzBdID0gdWRldi0+ZXBfb3V0WzBdID0gJnVkZXYtPmVwMDsKK30KKworI2RlZmluZSB1c2Jfc25kYWRkcjBwaXBlKCkJKFBJUEVfQ09OVFJPTCA8PCAzMCkKKyNkZWZpbmUgdXNiX3JjdmFkZHIwcGlwZSgpCSgoUElQRV9DT05UUk9MIDw8IDMwKSB8IFVTQl9ESVJfSU4pCisKK3N0YXRpYyBpbnQgaHViX3NldF9hZGRyZXNzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludCByZXR2YWw7CisKKwlpZiAodWRldi0+ZGV2bnVtID09IDApCisJCXJldHVybiAtRUlOVkFMOworCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfQUREUkVTUykKKwkJcmV0dXJuIDA7CisJaWYgKHVkZXYtPnN0YXRlICE9IFVTQl9TVEFURV9ERUZBVUxUKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGFkZHIwcGlwZSgpLAorCQlVU0JfUkVRX1NFVF9BRERSRVNTLCAwLCB1ZGV2LT5kZXZudW0sIDAsCisJCU5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwlpZiAocmV0dmFsID09IDApIHsKKwkJdXNiX3NldF9kZXZpY2Vfc3RhdGUodWRldiwgVVNCX1NUQVRFX0FERFJFU1MpOworCQllcDBfcmVpbml0KHVkZXYpOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBSZXNldCBkZXZpY2UsIChyZSlhc3NpZ24gYWRkcmVzcywgZ2V0IGRldmljZSBkZXNjcmlwdG9yLgorICogRGV2aWNlIGNvbm5lY3Rpb24gbXVzdCBiZSBzdGFibGUsIG5vIG1vcmUgZGVib3VuY2luZyBuZWVkZWQuCisgKiBSZXR1cm5zIGRldmljZSBpbiBVU0JfU1RBVEVfQUREUkVTUywgZXhjZXB0IG9uIGVycm9yLgorICoKKyAqIElmIHRoaXMgaXMgY2FsbGVkIGZvciBhbiBhbHJlYWR5LWV4aXN0aW5nIGRldmljZSAoYXMgcGFydCBvZgorICogdXNiX3Jlc2V0X2RldmljZSksIHRoZSBjYWxsZXIgbXVzdCBvd24gdGhlIGRldmljZSBsb2NrLiAgRm9yIGEKKyAqIG5ld2x5IGRldGVjdGVkIGRldmljZSB0aGF0IGlzIG5vdCBhY2Nlc3NpYmxlIHRocm91Z2ggYW55IGdsb2JhbAorICogcG9pbnRlcnMsIGl0J3Mgbm90IG5lY2Vzc2FyeSB0byBsb2NrIHRoZSBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQKK2h1Yl9wb3J0X2luaXQgKHN0cnVjdCB1c2JfaHViICpodWIsIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgcG9ydDEsCisJCWludCByZXRyeV9jb3VudGVyKQoreworCXN0YXRpYyBERUNMQVJFX01VVEVYKHVzYl9hZGRyZXNzMF9zZW0pOworCisJc3RydWN0IHVzYl9kZXZpY2UJKmhkZXYgPSBodWItPmhkZXY7CisJaW50CQkJaSwgaiwgcmV0dmFsOworCXVuc2lnbmVkCQlkZWxheSA9IEhVQl9TSE9SVF9SRVNFVF9USU1FOworCWVudW0gdXNiX2RldmljZV9zcGVlZAlvbGRzcGVlZCA9IHVkZXYtPnNwZWVkOworCisJLyogcm9vdCBodWIgcG9ydHMgaGF2ZSBhIHNsaWdodGx5IGxvbmdlciByZXNldCBwZXJpb2QKKwkgKiAoZnJvbSBVU0IgMi4wIHNwZWMsIHNlY3Rpb24gNy4xLjcuNSkKKwkgKi8KKwlpZiAoIWhkZXYtPnBhcmVudCkgeworCQlkZWxheSA9IEhVQl9ST09UX1JFU0VUX1RJTUU7CisJCWlmIChwb3J0MSA9PSBoZGV2LT5idXMtPm90Z19wb3J0KQorCQkJaGRldi0+YnVzLT5iX2hucF9lbmFibGUgPSAwOworCX0KKworCS8qIFNvbWUgbG93IHNwZWVkIGRldmljZXMgaGF2ZSBwcm9ibGVtcyB3aXRoIHRoZSBxdWljayBkZWxheSwgc28gKi8KKwkvKiAgYmUgYSBiaXQgcGVzc2ltaXN0aWMgd2l0aCB0aG9zZSBkZXZpY2VzLiBSSGJ1ZyAjMjM2NzAgKi8KKwlpZiAob2xkc3BlZWQgPT0gVVNCX1NQRUVEX0xPVykKKwkJZGVsYXkgPSBIVUJfTE9OR19SRVNFVF9USU1FOworCisJZG93bigmdXNiX2FkZHJlc3MwX3NlbSk7CisKKwkvKiBSZXNldCB0aGUgZGV2aWNlOyBmdWxsIHNwZWVkIG1heSBtb3JwaCB0byBoaWdoIHNwZWVkICovCisJcmV0dmFsID0gaHViX3BvcnRfcmVzZXQoaHViLCBwb3J0MSwgdWRldiwgZGVsYXkpOworCWlmIChyZXR2YWwgPCAwKQkJLyogZXJyb3Igb3IgZGlzY29ubmVjdCAqLworCQlnb3RvIGZhaWw7CisJCQkJLyogc3VjY2Vzcywgc3BlZWQgaXMga25vd24gKi8KKwlyZXR2YWwgPSAtRU5PREVWOworCisJaWYgKG9sZHNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOICYmIG9sZHNwZWVkICE9IHVkZXYtPnNwZWVkKSB7CisJCWRldl9kYmcoJnVkZXYtPmRldiwgImRldmljZSByZXNldCBjaGFuZ2VkIHNwZWVkIVxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisJb2xkc3BlZWQgPSB1ZGV2LT5zcGVlZDsKKyAgCisJLyogVVNCIDIuMCBzZWN0aW9uIDUuNS4zIHRhbGtzIGFib3V0IGVwMCBtYXhwYWNrZXQgLi4uCisJICogaXQncyBmaXhlZCBzaXplIGV4Y2VwdCBmb3IgZnVsbCBzcGVlZCBkZXZpY2VzLgorCSAqLworCXN3aXRjaCAodWRldi0+c3BlZWQpIHsKKwljYXNlIFVTQl9TUEVFRF9ISUdIOgkJLyogZml4ZWQgYXQgNjQgKi8KKwkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDY0KTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfRlVMTDoJCS8qIDgsIDE2LCAzMiwgb3IgNjQgKi8KKwkJLyogdG8gZGV0ZXJtaW5lIHRoZSBlcDAgbWF4cGFja2V0IHNpemUsIHRyeSB0byByZWFkCisJCSAqIHRoZSBkZXZpY2UgZGVzY3JpcHRvciB0byBnZXQgYk1heFBhY2tldFNpemUwIGFuZAorCQkgKiB0aGVuIGNvcnJlY3Qgb3VyIGluaXRpYWwgZ3Vlc3MuCisJCSAqLworCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNjQpOworCQlicmVhazsKKwljYXNlIFVTQl9TUEVFRF9MT1c6CQkvKiBmaXhlZCBhdCA4ICovCisJCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig4KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBmYWlsOworCX0KKyAKKwlkZXZfaW5mbyAoJnVkZXYtPmRldiwKKwkJCSIlcyAlcyBzcGVlZCBVU0IgZGV2aWNlIHVzaW5nICVzIGFuZCBhZGRyZXNzICVkXG4iLAorCQkJKHVkZXYtPmNvbmZpZykgPyAicmVzZXQiIDogIm5ldyIsCisJCQkoeyBjaGFyICpzcGVlZDsgc3dpdGNoICh1ZGV2LT5zcGVlZCkgeworCQkJY2FzZSBVU0JfU1BFRURfTE9XOglzcGVlZCA9ICJsb3ciOwlicmVhazsKKwkJCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CXNwZWVkID0gImZ1bGwiOwlicmVhazsKKwkJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CXNwZWVkID0gImhpZ2giOwlicmVhazsKKwkJCWRlZmF1bHQ6IAkJc3BlZWQgPSAiPyI7CWJyZWFrOworCQkJfTsgc3BlZWQ7fSksCisJCQl1ZGV2LT5idXMtPmNvbnRyb2xsZXItPmRyaXZlci0+bmFtZSwKKwkJCXVkZXYtPmRldm51bSk7CisKKwkvKiBTZXQgdXAgVFQgcmVjb3JkcywgaWYgbmVlZGVkICAqLworCWlmIChoZGV2LT50dCkgeworCQl1ZGV2LT50dCA9IGhkZXYtPnR0OworCQl1ZGV2LT50dHBvcnQgPSBoZGV2LT50dHBvcnQ7CisJfSBlbHNlIGlmICh1ZGV2LT5zcGVlZCAhPSBVU0JfU1BFRURfSElHSAorCQkJJiYgaGRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIHsKKwkJdWRldi0+dHQgPSAmaHViLT50dDsKKwkJdWRldi0+dHRwb3J0ID0gcG9ydDE7CisJfQorIAorCS8qIFdoeSBpbnRlcmxlYXZlIEdFVF9ERVNDUklQVE9SIGFuZCBTRVRfQUREUkVTUyB0aGlzIHdheT8KKwkgKiBCZWNhdXNlIGRldmljZSBoYXJkd2FyZSBhbmQgZmlybXdhcmUgaXMgc29tZXRpbWVzIGJ1Z2d5IGluCisJICogdGhpcyBhcmVhLCBhbmQgdGhpcyBpcyBob3cgTGludXggaGFzIGRvbmUgaXQgZm9yIGFnZXMuCisJICogQ2hhbmdlIGl0IGNhdXRpb3VzbHkuCisJICoKKwkgKiBOT1RFOiAgSWYgVVNFX05FV19TQ0hFTUUoKSBpcyB0cnVlIHdlIHdpbGwgc3RhcnQgYnkgaXNzdWluZworCSAqIGEgNjQtYnl0ZSBHRVRfREVTQ1JJUFRPUiByZXF1ZXN0LiAgVGhpcyBpcyB3aGF0IFdpbmRvd3MgZG9lcywKKwkgKiBzbyBpdCBtYXkgaGVscCB3aXRoIHNvbWUgbm9uLXN0YW5kYXJkcy1jb21wbGlhbnQgZGV2aWNlcy4KKwkgKiBPdGhlcndpc2Ugd2Ugc3RhcnQgd2l0aCBTRVRfQUREUkVTUyBhbmQgdGhlbiB0cnkgdG8gcmVhZCB0aGUKKwkgKiBmaXJzdCA4IGJ5dGVzIG9mIHRoZSBkZXZpY2UgZGVzY3JpcHRvciB0byBnZXQgdGhlIGVwMCBtYXhwYWNrZXQKKwkgKiB2YWx1ZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgR0VUX0RFU0NSSVBUT1JfVFJJRVM7ICgrK2ksIG1zbGVlcCgxMDApKSkgeworCQlpZiAoVVNFX05FV19TQ0hFTUUocmV0cnlfY291bnRlcikpIHsKKwkJCXN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgKmJ1ZjsKKwkJCWludCByID0gMDsKKworI2RlZmluZSBHRVRfREVTQ1JJUFRPUl9CVUZTSVpFCTY0CisJCQlidWYgPSBrbWFsbG9jKEdFVF9ERVNDUklQVE9SX0JVRlNJWkUsIEdGUF9OT0lPKTsKKwkJCWlmICghYnVmKSB7CisJCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogVXNlIGEgc2hvcnQgdGltZW91dCB0aGUgZmlyc3QgdGltZSB0aHJvdWdoLAorCQkJICogc28gdGhhdCByZWNhbGNpdHJhbnQgZnVsbC1zcGVlZCBkZXZpY2VzIHdpdGgKKwkJCSAqIDgtIG9yIDE2LWJ5dGUgZXAwLW1heHBhY2tldHMgd29uJ3Qgc2xvdyB0aGluZ3MKKwkJCSAqIGRvd24gdHJlbWVuZG91c2x5IGJ5IE5BS2luZyB0aGUgdW5leHBlY3RlZGx5CisJCQkgKiBlYXJseSBzdGF0dXMgc3RhZ2UuICBBbHNvLCByZXRyeSBvbiBhbGwgZXJyb3JzOworCQkJICogc29tZSBkZXZpY2VzIGFyZSBmbGFrZXkuCisJCQkgKi8KKwkJCWZvciAoaiA9IDA7IGogPCAzOyArK2opIHsKKwkJCQlidWYtPmJNYXhQYWNrZXRTaXplMCA9IDA7CisJCQkJciA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2YWRkcjBwaXBlKCksCisJCQkJCVVTQl9SRVFfR0VUX0RFU0NSSVBUT1IsIFVTQl9ESVJfSU4sCisJCQkJCVVTQl9EVF9ERVZJQ0UgPDwgOCwgMCwKKwkJCQkJYnVmLCBHRVRfREVTQ1JJUFRPUl9CVUZTSVpFLAorCQkJCQkoaSA/IFVTQl9DVFJMX0dFVF9USU1FT1VUIDogMTAwMCkpOworCQkJCXN3aXRjaCAoYnVmLT5iTWF4UGFja2V0U2l6ZTApIHsKKwkJCQljYXNlIDg6IGNhc2UgMTY6IGNhc2UgMzI6IGNhc2UgNjQ6CisJCQkJCWlmIChidWYtPmJEZXNjcmlwdG9yVHlwZSA9PQorCQkJCQkJCVVTQl9EVF9ERVZJQ0UpIHsKKwkJCQkJCXIgPSAwOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJLyogRkFMTCBUSFJPVUdIICovCisJCQkJZGVmYXVsdDoKKwkJCQkJaWYgKHIgPT0gMCkKKwkJCQkJCXIgPSAtRVBST1RPOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKHIgPT0gMCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQl1ZGV2LT5kZXNjcmlwdG9yLmJNYXhQYWNrZXRTaXplMCA9CisJCQkJCWJ1Zi0+Yk1heFBhY2tldFNpemUwOworCQkJa2ZyZWUoYnVmKTsKKworCQkJcmV0dmFsID0gaHViX3BvcnRfcmVzZXQoaHViLCBwb3J0MSwgdWRldiwgZGVsYXkpOworCQkJaWYgKHJldHZhbCA8IDApCQkvKiBlcnJvciBvciBkaXNjb25uZWN0ICovCisJCQkJZ290byBmYWlsOworCQkJaWYgKG9sZHNwZWVkICE9IHVkZXYtPnNwZWVkKSB7CisJCQkJZGV2X2RiZygmdWRldi0+ZGV2LAorCQkJCQkiZGV2aWNlIHJlc2V0IGNoYW5nZWQgc3BlZWQhXG4iKTsKKwkJCQlyZXR2YWwgPSAtRU5PREVWOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKwkJCWlmIChyKSB7CisJCQkJZGV2X2VycigmdWRldi0+ZGV2LCAiZGV2aWNlIGRlc2NyaXB0b3IgIgorCQkJCQkJInJlYWQvJXMsIGVycm9yICVkXG4iLAorCQkJCQkJIjY0Iiwgcik7CisJCQkJcmV0dmFsID0gLUVNU0dTSVpFOworCQkJCWNvbnRpbnVlOworCQkJfQorI3VuZGVmIEdFVF9ERVNDUklQVE9SX0JVRlNJWkUKKwkJfQorCisJCWZvciAoaiA9IDA7IGogPCBTRVRfQUREUkVTU19UUklFUzsgKytqKSB7CisJCQlyZXR2YWwgPSBodWJfc2V0X2FkZHJlc3ModWRldik7CisJCQlpZiAocmV0dmFsID49IDApCisJCQkJYnJlYWs7CisJCQltc2xlZXAoMjAwKTsKKwkJfQorCQlpZiAocmV0dmFsIDwgMCkgeworCQkJZGV2X2VycigmdWRldi0+ZGV2LAorCQkJCSJkZXZpY2Ugbm90IGFjY2VwdGluZyBhZGRyZXNzICVkLCBlcnJvciAlZFxuIiwKKwkJCQl1ZGV2LT5kZXZudW0sIHJldHZhbCk7CisJCQlnb3RvIGZhaWw7CisJCX0KKyAKKwkJLyogY29wZSB3aXRoIGhhcmR3YXJlIHF1aXJraW5lc3M6CisJCSAqICAtIGxldCBTRVRfQUREUkVTUyBzZXR0bGUsIHNvbWUgZGV2aWNlIGhhcmR3YXJlIHdhbnRzIGl0CisJCSAqICAtIHJlYWQgZXAwIG1heHBhY2tldCBldmVuIGZvciBoaWdoIGFuZCBsb3cgc3BlZWQsCisgIAkJICovCisJCW1zbGVlcCgxMCk7CisJCWlmIChVU0VfTkVXX1NDSEVNRShyZXRyeV9jb3VudGVyKSkKKwkJCWJyZWFrOworCisJCXJldHZhbCA9IHVzYl9nZXRfZGV2aWNlX2Rlc2NyaXB0b3IodWRldiwgOCk7CisJCWlmIChyZXR2YWwgPCA4KSB7CisJCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJkZXZpY2UgZGVzY3JpcHRvciAiCisJCQkJCSJyZWFkLyVzLCBlcnJvciAlZFxuIiwKKwkJCQkJIjgiLCByZXR2YWwpOworCQkJaWYgKHJldHZhbCA+PSAwKQorCQkJCXJldHZhbCA9IC1FTVNHU0laRTsKKwkJfSBlbHNlIHsKKwkJCXJldHZhbCA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWw7CisKKwlpID0gdWRldi0+ZGVzY3JpcHRvci5iTWF4UGFja2V0U2l6ZTA7CisJaWYgKGxlMTZfdG9fY3B1KHVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplKSAhPSBpKSB7CisJCWlmICh1ZGV2LT5zcGVlZCAhPSBVU0JfU1BFRURfRlVMTCB8fAorCQkJCSEoaSA9PSA4IHx8IGkgPT0gMTYgfHwgaSA9PSAzMiB8fCBpID09IDY0KSkgeworCQkJZGV2X2VycigmdWRldi0+ZGV2LCAiZXAwIG1heHBhY2tldCA9ICVkXG4iLCBpKTsKKwkJCXJldHZhbCA9IC1FTVNHU0laRTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJlcDAgbWF4cGFja2V0ID0gJWRcbiIsIGkpOworCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IGNwdV90b19sZTE2KGkpOworCQllcDBfcmVpbml0KHVkZXYpOworCX0KKyAgCisJcmV0dmFsID0gdXNiX2dldF9kZXZpY2VfZGVzY3JpcHRvcih1ZGV2LCBVU0JfRFRfREVWSUNFX1NJWkUpOworCWlmIChyZXR2YWwgPCAoc2lnbmVkKXNpemVvZih1ZGV2LT5kZXNjcmlwdG9yKSkgeworCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJkZXZpY2UgZGVzY3JpcHRvciByZWFkLyVzLCBlcnJvciAlZFxuIiwKKwkJCSJhbGwiLCByZXR2YWwpOworCQlpZiAocmV0dmFsID49IDApCisJCQlyZXR2YWwgPSAtRU5PTVNHOworCQlnb3RvIGZhaWw7CisJfQorCisJcmV0dmFsID0gMDsKKworZmFpbDoKKwlpZiAocmV0dmFsKQorCQlodWJfcG9ydF9kaXNhYmxlKGh1YiwgcG9ydDEsIDApOworCXVwKCZ1c2JfYWRkcmVzczBfc2VtKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZAorY2hlY2tfaGlnaHNwZWVkIChzdHJ1Y3QgdXNiX2h1YiAqaHViLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50IHBvcnQxKQoreworCXN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IJKnF1YWw7CisJaW50CQkJCXN0YXR1czsKKworCXF1YWwgPSBrbWFsbG9jIChzaXplb2YgKnF1YWwsIFNMQUJfS0VSTkVMKTsKKwlpZiAocXVhbCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlzdGF0dXMgPSB1c2JfZ2V0X2Rlc2NyaXB0b3IgKHVkZXYsIFVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSLCAwLAorCQkJcXVhbCwgc2l6ZW9mICpxdWFsKTsKKwlpZiAoc3RhdHVzID09IHNpemVvZiAqcXVhbCkgeworCQlkZXZfaW5mbygmdWRldi0+ZGV2LCAibm90IHJ1bm5pbmcgYXQgdG9wIHNwZWVkOyAiCisJCQkiY29ubmVjdCB0byBhIGhpZ2ggc3BlZWQgaHViXG4iKTsKKwkJLyogaHViIExFRHMgYXJlIHByb2JhYmx5IGhhcmRlciB0byBtaXNzIHRoYW4gc3lzbG9nICovCisJCWlmIChodWItPmhhc19pbmRpY2F0b3JzKSB7CisJCQlodWItPmluZGljYXRvcltwb3J0MS0xXSA9IElORElDQVRPUl9HUkVFTl9CTElOSzsKKwkJCXNjaGVkdWxlX3dvcmsgKCZodWItPmxlZHMpOworCQl9CisJfQorCWtmcmVlIChxdWFsKTsKK30KKworc3RhdGljIHVuc2lnbmVkCitodWJfcG93ZXJfcmVtYWluaW5nIChzdHJ1Y3QgdXNiX2h1YiAqaHViKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpoZGV2ID0gaHViLT5oZGV2OworCWludCByZW1haW5pbmc7CisJdW5zaWduZWQgaTsKKworCXJlbWFpbmluZyA9IGh1Yi0+cG93ZXJfYnVkZ2V0OworCWlmICghcmVtYWluaW5nKQkJLyogc2VsZi1wb3dlcmVkICovCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGhkZXYtPm1heGNoaWxkOyBpKyspIHsKKwkJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYgPSBoZGV2LT5jaGlsZHJlbltpXTsKKwkJaW50CQkJZGVsdGEsIGNlaWxpbmc7CisKKwkJaWYgKCF1ZGV2KQorCQkJY29udGludWU7CisKKwkJLyogMTAwbUEgcGVyLXBvcnQgY2VpbGluZywgb3IgOG1BIGZvciBPVEcgcG9ydHMgKi8KKwkJaWYgKGkgIT0gKHVkZXYtPmJ1cy0+b3RnX3BvcnQgLSAxKSB8fCBoZGV2LT5wYXJlbnQpCisJCQljZWlsaW5nID0gNTA7CisJCWVsc2UKKwkJCWNlaWxpbmcgPSA0OworCisJCWlmICh1ZGV2LT5hY3Rjb25maWcpCisJCQlkZWx0YSA9IHVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTWF4UG93ZXI7CisJCWVsc2UKKwkJCWRlbHRhID0gY2VpbGluZzsKKwkJLy8gZGV2X2RiZygmdWRldi0+ZGV2LCAiYnVkZ2V0ZWQgJWRtQVxuIiwgMiAqIGRlbHRhKTsKKwkJaWYgKGRlbHRhID4gY2VpbGluZykKKwkJCWRldl93YXJuKCZ1ZGV2LT5kZXYsICIlZG1BIG92ZXIgJWRtQSBidWRnZXQhXG4iLAorCQkJCTIgKiAoZGVsdGEgLSBjZWlsaW5nKSwgMiAqIGNlaWxpbmcpOworCQlyZW1haW5pbmcgLT0gZGVsdGE7CisJfQorCWlmIChyZW1haW5pbmcgPCAwKSB7CisJCWRldl93YXJuKGh1Yi0+aW50ZmRldiwKKwkJCSIlZG1BIG92ZXIgcG93ZXIgYnVkZ2V0IVxuIiwKKwkJCS0yICogcmVtYWluaW5nKTsKKwkJcmVtYWluaW5nID0gMDsKKwl9CisJcmV0dXJuIHJlbWFpbmluZzsKK30KKworLyogSGFuZGxlIHBoeXNpY2FsIG9yIGxvZ2ljYWwgY29ubmVjdGlvbiBjaGFuZ2UgZXZlbnRzLgorICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuOgorICogCWEgcG9ydCBjb25uZWN0aW9uLWNoYW5nZSBvY2N1cnM7CisgKglhIHBvcnQgZW5hYmxlLWNoYW5nZSBvY2N1cnMgKG9mdGVuIGNhdXNlZCBieSBFTUkpOworICoJdXNiX3Jlc2V0X2RldmljZSgpIGVuY291bnRlcnMgY2hhbmdlZCBkZXNjcmlwdG9ycyAoYXMgZnJvbQorICoJCWEgZmlybXdhcmUgZG93bmxvYWQpCisgKiBjYWxsZXIgYWxyZWFkeSBsb2NrZWQgdGhlIGh1YgorICovCitzdGF0aWMgdm9pZCBodWJfcG9ydF9jb25uZWN0X2NoYW5nZShzdHJ1Y3QgdXNiX2h1YiAqaHViLCBpbnQgcG9ydDEsCisJCQkJCXUxNiBwb3J0c3RhdHVzLCB1MTYgcG9ydGNoYW5nZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGh1Yi0+aGRldjsKKwlzdHJ1Y3QgZGV2aWNlICpodWJfZGV2ID0gaHViLT5pbnRmZGV2OworCWludCBzdGF0dXMsIGk7CisgCisJZGV2X2RiZyAoaHViX2RldiwKKwkJInBvcnQgJWQsIHN0YXR1cyAlMDR4LCBjaGFuZ2UgJTA0eCwgJXNcbiIsCisJCXBvcnQxLCBwb3J0c3RhdHVzLCBwb3J0Y2hhbmdlLCBwb3J0c3BlZWQgKHBvcnRzdGF0dXMpKTsKKworCWlmIChodWItPmhhc19pbmRpY2F0b3JzKSB7CisJCXNldF9wb3J0X2xlZChodWIsIHBvcnQxLCBIVUJfTEVEX0FVVE8pOworCQlodWItPmluZGljYXRvcltwb3J0MS0xXSA9IElORElDQVRPUl9BVVRPOworCX0KKyAKKwkvKiBEaXNjb25uZWN0IGFueSBleGlzdGluZyBkZXZpY2VzIHVuZGVyIHRoaXMgcG9ydCAqLworCWlmIChoZGV2LT5jaGlsZHJlbltwb3J0MS0xXSkKKwkJdXNiX2Rpc2Nvbm5lY3QoJmhkZXYtPmNoaWxkcmVuW3BvcnQxLTFdKTsKKwljbGVhcl9iaXQocG9ydDEsIGh1Yi0+Y2hhbmdlX2JpdHMpOworCisjaWZkZWYJQ09ORklHX1VTQl9PVEcKKwkvKiBkdXJpbmcgSE5QLCBkb24ndCByZXBlYXQgdGhlIGRlYm91bmNlICovCisJaWYgKGhkZXYtPmJ1cy0+aXNfYl9ob3N0KQorCQlwb3J0Y2hhbmdlICY9IH5VU0JfUE9SVF9TVEFUX0NfQ09OTkVDVElPTjsKKyNlbmRpZgorCisJaWYgKHBvcnRjaGFuZ2UgJiBVU0JfUE9SVF9TVEFUX0NfQ09OTkVDVElPTikgeworCQlzdGF0dXMgPSBodWJfcG9ydF9kZWJvdW5jZShodWIsIHBvcnQxKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRldl9lcnIgKGh1Yl9kZXYsCisJCQkJImNvbm5lY3QtZGVib3VuY2UgZmFpbGVkLCBwb3J0ICVkIGRpc2FibGVkXG4iLAorCQkJCXBvcnQxKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlwb3J0c3RhdHVzID0gc3RhdHVzOworCX0KKworCS8qIFJldHVybiBub3cgaWYgbm90aGluZyBpcyBjb25uZWN0ZWQgKi8KKwlpZiAoIShwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OKSkgeworCisJCS8qIG1heWJlIHN3aXRjaCBwb3dlciBiYWNrIG9uIChlLmcuIHJvb3QgaHViIHdhcyByZXNldCkgKi8KKwkJaWYgKChodWItPmRlc2NyaXB0b3ItPndIdWJDaGFyYWN0ZXJpc3RpY3MKKwkJCQkJJiBIVUJfQ0hBUl9MUFNNKSA8IDIKKwkJCQkmJiAhKHBvcnRzdGF0dXMgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX1BPV0VSKSkpCisJCQlzZXRfcG9ydF9mZWF0dXJlKGhkZXYsIHBvcnQxLCBVU0JfUE9SVF9GRUFUX1BPV0VSKTsKKyAKKwkJaWYgKHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX0VOQUJMRSkKKyAgCQkJZ290byBkb25lOworCQlyZXR1cm47CisJfQorCisjaWZkZWYgIENPTkZJR19VU0JfU1VTUEVORAorCS8qIElmIHNvbWV0aGluZyBpcyBjb25uZWN0ZWQsIGJ1dCB0aGUgcG9ydCBpcyBzdXNwZW5kZWQsIHdha2UgaXQgdXAuICovCisJaWYgKHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX1NVU1BFTkQpIHsKKwkJc3RhdHVzID0gaHViX3BvcnRfcmVzdW1lKGh1YiwgcG9ydDEsIE5VTEwpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJZGV2X2RiZyhodWJfZGV2LAorCQkJCSJjYW4ndCBjbGVhciBzdXNwZW5kIG9uIHBvcnQgJWQ7ICVkXG4iLAorCQkJCXBvcnQxLCBzdGF0dXMpOworCQkJZ290byBkb25lOworCQl9CisJfQorI2VuZGlmCisKKwlmb3IgKGkgPSAwOyBpIDwgU0VUX0NPTkZJR19UUklFUzsgaSsrKSB7CisJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCisJCS8qIHJlYWxsb2NhdGUgZm9yIGVhY2ggYXR0ZW1wdCwgc2luY2UgcmVmZXJlbmNlcworCQkgKiB0byB0aGUgcHJldmlvdXMgb25lIGNhbiBlc2NhcGUgaW4gdmFyaW91cyB3YXlzCisJCSAqLworCQl1ZGV2ID0gdXNiX2FsbG9jX2RldihoZGV2LCBoZGV2LT5idXMsIHBvcnQxKTsKKwkJaWYgKCF1ZGV2KSB7CisJCQlkZXZfZXJyIChodWJfZGV2LAorCQkJCSJjb3VsZG4ndCBhbGxvY2F0ZSBwb3J0ICVkIHVzYl9kZXZpY2VcbiIsCisJCQkJcG9ydDEpOworCQkJZ290byBkb25lOworCQl9CisKKwkJdXNiX3NldF9kZXZpY2Vfc3RhdGUodWRldiwgVVNCX1NUQVRFX1BPV0VSRUQpOworCQl1ZGV2LT5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworIAorCQkvKiBzZXQgdGhlIGFkZHJlc3MgKi8KKwkJY2hvb3NlX2FkZHJlc3ModWRldik7CisJCWlmICh1ZGV2LT5kZXZudW0gPD0gMCkgeworCQkJc3RhdHVzID0gLUVOT1RDT05OOwkvKiBEb24ndCByZXRyeSAqLworCQkJZ290byBsb29wOworCQl9CisKKwkJLyogcmVzZXQgYW5kIGdldCBkZXNjcmlwdG9yICovCisJCXN0YXR1cyA9IGh1Yl9wb3J0X2luaXQoaHViLCB1ZGV2LCBwb3J0MSwgaSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZ290byBsb29wOworCisJCS8qIGNvbnNlY3V0aXZlIGJ1cy1wb3dlcmVkIGh1YnMgYXJlbid0IHJlbGlhYmxlOyB0aGV5IGNhbgorCQkgKiB2aW9sYXRlIHRoZSB2b2x0YWdlIGRyb3AgYnVkZ2V0LiAgaWYgdGhlIG5ldyBjaGlsZCBoYXMKKwkJICogYSAicG93ZXJlZCIgTEVELCB1c2VycyBzaG91bGQgbm90aWNlIHdlIGRpZG4ndCBlbmFibGUgaXQKKwkJICogKHdpdGhvdXQgcmVhZGluZyBzeXNsb2cpLCBldmVuIHdpdGhvdXQgcGVyLXBvcnQgTEVEcworCQkgKiBvbiB0aGUgcGFyZW50LgorCQkgKi8KKwkJaWYgKHVkZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzID09IFVTQl9DTEFTU19IVUIKKwkJCQkmJiBodWItPnBvd2VyX2J1ZGdldCkgeworCQkJdTE2CWRldnN0YXQ7CisKKwkJCXN0YXR1cyA9IHVzYl9nZXRfc3RhdHVzKHVkZXYsIFVTQl9SRUNJUF9ERVZJQ0UsIDAsCisJCQkJCSZkZXZzdGF0KTsKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJZGV2X2RiZygmdWRldi0+ZGV2LCAiZ2V0IHN0YXR1cyAlZCA/XG4iLCBzdGF0dXMpOworCQkJCWdvdG8gbG9vcF9kaXNhYmxlOworCQkJfQorCQkJY3B1X3RvX2xlMTZzKCZkZXZzdGF0KTsKKwkJCWlmICgoZGV2c3RhdCAmICgxIDw8IFVTQl9ERVZJQ0VfU0VMRl9QT1dFUkVEKSkgPT0gMCkgeworCQkJCWRldl9lcnIoJnVkZXYtPmRldiwKKwkJCQkJImNhbid0IGNvbm5lY3QgYnVzLXBvd2VyZWQgaHViICIKKwkJCQkJInRvIHRoaXMgcG9ydFxuIik7CisJCQkJaWYgKGh1Yi0+aGFzX2luZGljYXRvcnMpIHsKKwkJCQkJaHViLT5pbmRpY2F0b3JbcG9ydDEtMV0gPQorCQkJCQkJSU5ESUNBVE9SX0FNQkVSX0JMSU5LOworCQkJCQlzY2hlZHVsZV93b3JrICgmaHViLT5sZWRzKTsKKwkJCQl9CisJCQkJc3RhdHVzID0gLUVOT1RDT05OOwkvKiBEb24ndCByZXRyeSAqLworCQkJCWdvdG8gbG9vcF9kaXNhYmxlOworCQkJfQorCQl9CisgCisJCS8qIGNoZWNrIGZvciBkZXZpY2VzIHJ1bm5pbmcgc2xvd2VyIHRoYW4gdGhleSBjb3VsZCAqLworCQlpZiAobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5iY2RVU0IpID49IDB4MDIwMAorCQkJCSYmIHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9GVUxMCisJCQkJJiYgaGlnaHNwZWVkX2h1YnMgIT0gMCkKKwkJCWNoZWNrX2hpZ2hzcGVlZCAoaHViLCB1ZGV2LCBwb3J0MSk7CisKKwkJLyogU3RvcmUgdGhlIHBhcmVudCdzIGNoaWxkcmVuW10gcG9pbnRlci4gIEF0IHRoaXMgcG9pbnQKKwkJICogdWRldiBiZWNvbWVzIGdsb2JhbGx5IGFjY2Vzc2libGUsIGFsdGhvdWdoIHByZXN1bWFibHkKKwkJICogbm8gb25lIHdpbGwgbG9vayBhdCBpdCB1bnRpbCBoZGV2IGlzIHVubG9ja2VkLgorCQkgKi8KKwkJZG93biAoJnVkZXYtPnNlcmlhbGl6ZSk7CisJCXN0YXR1cyA9IDA7CisKKwkJLyogV2UgbXVzdG4ndCBhZGQgbmV3IGRldmljZXMgaWYgdGhlIHBhcmVudCBodWIgaGFzCisJCSAqIGJlZW4gZGlzY29ubmVjdGVkOyB3ZSB3b3VsZCByYWNlIHdpdGggdGhlCisJCSAqIHJlY3Vyc2l2ZWx5X21hcmtfTk9UQVRUQUNIRUQoKSByb3V0aW5lLgorCQkgKi8KKwkJc3Bpbl9sb2NrX2lycSgmZGV2aWNlX3N0YXRlX2xvY2spOworCQlpZiAoaGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKQorCQkJc3RhdHVzID0gLUVOT1RDT05OOworCQllbHNlCisJCQloZGV2LT5jaGlsZHJlbltwb3J0MS0xXSA9IHVkZXY7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2aWNlX3N0YXRlX2xvY2spOworCisJCS8qIFJ1biBpdCB0aHJvdWdoIHRoZSBob29wcyAoZmluZCBhIGRyaXZlciwgZXRjKSAqLworCQlpZiAoIXN0YXR1cykgeworCQkJc3RhdHVzID0gdXNiX25ld19kZXZpY2UodWRldik7CisJCQlpZiAoc3RhdHVzKSB7CisJCQkJc3Bpbl9sb2NrX2lycSgmZGV2aWNlX3N0YXRlX2xvY2spOworCQkJCWhkZXYtPmNoaWxkcmVuW3BvcnQxLTFdID0gTlVMTDsKKwkJCQlzcGluX3VubG9ja19pcnEoJmRldmljZV9zdGF0ZV9sb2NrKTsKKwkJCX0KKwkJfQorCisJCXVwICgmdWRldi0+c2VyaWFsaXplKTsKKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gbG9vcF9kaXNhYmxlOworCisJCXN0YXR1cyA9IGh1Yl9wb3dlcl9yZW1haW5pbmcoaHViKTsKKwkJaWYgKHN0YXR1cykKKwkJCWRldl9kYmcoaHViX2RldiwKKwkJCQkiJWRtQSBwb3dlciBidWRnZXQgbGVmdFxuIiwKKwkJCQkyICogc3RhdHVzKTsKKworCQlyZXR1cm47CisKK2xvb3BfZGlzYWJsZToKKwkJaHViX3BvcnRfZGlzYWJsZShodWIsIHBvcnQxLCAxKTsKK2xvb3A6CisJCWVwMF9yZWluaXQodWRldik7CisJCXJlbGVhc2VfYWRkcmVzcyh1ZGV2KTsKKwkJdXNiX3B1dF9kZXYodWRldik7CisJCWlmIChzdGF0dXMgPT0gLUVOT1RDT05OKQorCQkJYnJlYWs7CisJfQorIAorZG9uZToKKwlodWJfcG9ydF9kaXNhYmxlKGh1YiwgcG9ydDEsIDEpOworfQorCitzdGF0aWMgdm9pZCBodWJfZXZlbnRzKHZvaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCXN0cnVjdCB1c2JfZGV2aWNlICpoZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCB1c2JfaHViICpodWI7CisJc3RydWN0IGRldmljZSAqaHViX2RldjsKKwl1MTYgaHVic3RhdHVzOworCXUxNiBodWJjaGFuZ2U7CisJdTE2IHBvcnRzdGF0dXM7CisJdTE2IHBvcnRjaGFuZ2U7CisJaW50IGksIHJldDsKKwlpbnQgY29ubmVjdF9jaGFuZ2U7CisKKwkvKgorCSAqICBXZSByZXN0YXJ0IHRoZSBsaXN0IGV2ZXJ5IHRpbWUgdG8gYXZvaWQgYSBkZWFkbG9jayB3aXRoCisJICogZGVsZXRpbmcgaHVicyBkb3duc3RyZWFtIGZyb20gdGhpcyBvbmUuIFRoaXMgc2hvdWxkIGJlCisJICogc2FmZSBzaW5jZSB3ZSBkZWxldGUgdGhlIGh1YiBmcm9tIHRoZSBldmVudCBsaXN0LgorCSAqIE5vdCB0aGUgbW9zdCBlZmZpY2llbnQsIGJ1dCBhdm9pZHMgZGVhZGxvY2tzLgorCSAqLworCXdoaWxlICgxKSB7CisKKwkJLyogR3JhYiB0aGUgZmlyc3QgZW50cnkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCAqLworCQlzcGluX2xvY2tfaXJxKCZodWJfZXZlbnRfbG9jayk7CisJCWlmIChsaXN0X2VtcHR5KCZodWJfZXZlbnRfbGlzdCkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaHViX2V2ZW50X2xvY2spOworCQkJYnJlYWs7CisJCX0KKworCQl0bXAgPSBodWJfZXZlbnRfbGlzdC5uZXh0OworCQlsaXN0X2RlbF9pbml0KHRtcCk7CisKKwkJaHViID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB1c2JfaHViLCBldmVudF9saXN0KTsKKwkJaGRldiA9IGh1Yi0+aGRldjsKKwkJaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoaHViLT5pbnRmZGV2KTsKKwkJaHViX2RldiA9ICZpbnRmLT5kZXY7CisKKwkJZGV2X2RiZyhodWJfZGV2LCAic3RhdGUgJWQgcG9ydHMgJWQgY2hnICUwNHggZXZ0ICUwNHhcbiIsCisJCQkJaGRldi0+c3RhdGUsIGh1Yi0+ZGVzY3JpcHRvcgorCQkJCQk/IGh1Yi0+ZGVzY3JpcHRvci0+Yk5iclBvcnRzCisJCQkJCTogMCwKKwkJCQkvKiBOT1RFOiBleHBlY3RzIG1heCAxNSBwb3J0cy4uLiAqLworCQkJCSh1MTYpIGh1Yi0+Y2hhbmdlX2JpdHNbMF0sCisJCQkJKHUxNikgaHViLT5ldmVudF9iaXRzWzBdKTsKKworCQl1c2JfZ2V0X2ludGYoaW50Zik7CisJCWkgPSBodWItPnJlc3VtZV9yb290X2h1YjsKKwkJc3Bpbl91bmxvY2tfaXJxKCZodWJfZXZlbnRfbG9jayk7CisKKwkJLyogSXMgdGhpcyBpcyBhIHJvb3QgaHViIHdhbnRpbmcgdG8gYmUgcmVzdW1lZD8gKi8KKwkJaWYgKGkpCisJCQl1c2JfcmVzdW1lX2RldmljZShoZGV2KTsKKworCQkvKiBMb2NrIHRoZSBkZXZpY2UsIHRoZW4gY2hlY2sgdG8gc2VlIGlmIHdlIHdlcmUKKwkJICogZGlzY29ubmVjdGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBsb2NrIHRvIHN1Y2NlZWQuICovCisJCWlmIChsb2NrdHJlZShoZGV2KSA8IDApIHsKKwkJCXVzYl9wdXRfaW50ZihpbnRmKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChodWIgIT0gdXNiX2dldF9pbnRmZGF0YShpbnRmKSkKKwkJCWdvdG8gbG9vcDsKKworCQkvKiBJZiB0aGUgaHViIGhhcyBkaWVkLCBjbGVhbiB1cCBhZnRlciBpdCAqLworCQlpZiAoaGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKSB7CisJCQlodWJfcHJlX3Jlc2V0KGh1Yik7CisJCQlnb3RvIGxvb3A7CisJCX0KKworCQkvKiBJZiB0aGlzIGlzIGFuIGluYWN0aXZlIG9yIHN1c3BlbmRlZCBodWIsIGRvIG5vdGhpbmcgKi8KKwkJaWYgKGh1Yi0+cXVpZXNjaW5nKQorCQkJZ290byBsb29wOworCisJCWlmIChodWItPmVycm9yKSB7CisJCQlkZXZfZGJnIChodWJfZGV2LCAicmVzZXR0aW5nIGZvciBlcnJvciAlZFxuIiwKKwkJCQlodWItPmVycm9yKTsKKworCQkJcmV0ID0gdXNiX3Jlc2V0X2RldmljZShoZGV2KTsKKwkJCWlmIChyZXQpIHsKKwkJCQlkZXZfZGJnIChodWJfZGV2LAorCQkJCQkiZXJyb3IgcmVzZXR0aW5nIGh1YjogJWRcbiIsIHJldCk7CisJCQkJZ290byBsb29wOworCQkJfQorCisJCQlodWItPm5lcnJvcnMgPSAwOworCQkJaHViLT5lcnJvciA9IDA7CisJCX0KKworCQkvKiBkZWFsIHdpdGggcG9ydCBzdGF0dXMgY2hhbmdlcyAqLworCQlmb3IgKGkgPSAxOyBpIDw9IGh1Yi0+ZGVzY3JpcHRvci0+Yk5iclBvcnRzOyBpKyspIHsKKwkJCWlmICh0ZXN0X2JpdChpLCBodWItPmJ1c3lfYml0cykpCisJCQkJY29udGludWU7CisJCQljb25uZWN0X2NoYW5nZSA9IHRlc3RfYml0KGksIGh1Yi0+Y2hhbmdlX2JpdHMpOworCQkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoaSwgaHViLT5ldmVudF9iaXRzKSAmJgorCQkJCQkhY29ubmVjdF9jaGFuZ2UgJiYgIWh1Yi0+YWN0aXZhdGluZykKKwkJCQljb250aW51ZTsKKworCQkJcmV0ID0gaHViX3BvcnRfc3RhdHVzKGh1YiwgaSwKKwkJCQkJJnBvcnRzdGF0dXMsICZwb3J0Y2hhbmdlKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoaHViLT5hY3RpdmF0aW5nICYmICFoZGV2LT5jaGlsZHJlbltpLTFdICYmCisJCQkJCShwb3J0c3RhdHVzICYKKwkJCQkJCVVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTikpCisJCQkJY29ubmVjdF9jaGFuZ2UgPSAxOworCisJCQlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19DT05ORUNUSU9OKSB7CisJCQkJY2xlYXJfcG9ydF9mZWF0dXJlKGhkZXYsIGksCisJCQkJCVVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OKTsKKwkJCQljb25uZWN0X2NoYW5nZSA9IDE7CisJCQl9CisKKwkJCWlmIChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX0VOQUJMRSkgeworCQkJCWlmICghY29ubmVjdF9jaGFuZ2UpCisJCQkJCWRldl9kYmcgKGh1Yl9kZXYsCisJCQkJCQkicG9ydCAlZCBlbmFibGUgY2hhbmdlLCAiCisJCQkJCQkic3RhdHVzICUwOHhcbiIsCisJCQkJCQlpLCBwb3J0c3RhdHVzKTsKKwkJCQljbGVhcl9wb3J0X2ZlYXR1cmUoaGRldiwgaSwKKwkJCQkJVVNCX1BPUlRfRkVBVF9DX0VOQUJMRSk7CisKKwkJCQkvKgorCQkJCSAqIEVNIGludGVyZmVyZW5jZSBzb21ldGltZXMgY2F1c2VzIGJhZGx5CisJCQkJICogc2hpZWxkZWQgVVNCIGRldmljZXMgdG8gYmUgc2h1dGRvd24gYnkKKwkJCQkgKiB0aGUgaHViLCB0aGlzIGhhY2sgZW5hYmxlcyB0aGVtIGFnYWluLgorCQkJCSAqIFdvcmtzIGF0IGxlYXN0IHdpdGggbW91c2UgZHJpdmVyLiAKKwkJCQkgKi8KKwkJCQlpZiAoIShwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9FTkFCTEUpCisJCQkJICAgICYmICFjb25uZWN0X2NoYW5nZQorCQkJCSAgICAmJiBoZGV2LT5jaGlsZHJlbltpLTFdKSB7CisJCQkJCWRldl9lcnIgKGh1Yl9kZXYsCisJCQkJCSAgICAicG9ydCAlaSAiCisJCQkJCSAgICAiZGlzYWJsZWQgYnkgaHViIChFTUk/KSwgIgorCQkJCQkgICAgInJlLWVuYWJsaW5nLi4uXG4iLAorCQkJCQkJaSk7CisJCQkJCWNvbm5lY3RfY2hhbmdlID0gMTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX1NVU1BFTkQpIHsKKwkJCQljbGVhcl9wb3J0X2ZlYXR1cmUoaGRldiwgaSwKKwkJCQkJVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQpOworCQkJCWlmIChoZGV2LT5jaGlsZHJlbltpLTFdKSB7CisJCQkJCXJldCA9IHJlbW90ZV93YWtldXAoaGRldi0+CisJCQkJCQkJY2hpbGRyZW5baS0xXSk7CisJCQkJCWlmIChyZXQgPCAwKQorCQkJCQkJY29ubmVjdF9jaGFuZ2UgPSAxOworCQkJCX0gZWxzZSB7CisJCQkJCXJldCA9IC1FTk9ERVY7CisJCQkJCWh1Yl9wb3J0X2Rpc2FibGUoaHViLCBpLCAxKTsKKwkJCQl9CisJCQkJZGV2X2RiZyAoaHViX2RldiwKKwkJCQkJInJlc3VtZSBvbiBwb3J0ICVkLCBzdGF0dXMgJWRcbiIsCisJCQkJCWksIHJldCk7CisJCQl9CisJCQkKKwkJCWlmIChwb3J0Y2hhbmdlICYgVVNCX1BPUlRfU1RBVF9DX09WRVJDVVJSRU5UKSB7CisJCQkJZGV2X2VyciAoaHViX2RldiwKKwkJCQkJIm92ZXItY3VycmVudCBjaGFuZ2Ugb24gcG9ydCAlZFxuIiwKKwkJCQkJaSk7CisJCQkJY2xlYXJfcG9ydF9mZWF0dXJlKGhkZXYsIGksCisJCQkJCVVTQl9QT1JUX0ZFQVRfQ19PVkVSX0NVUlJFTlQpOworCQkJCWh1Yl9wb3dlcl9vbihodWIpOworCQkJfQorCisJCQlpZiAocG9ydGNoYW5nZSAmIFVTQl9QT1JUX1NUQVRfQ19SRVNFVCkgeworCQkJCWRldl9kYmcgKGh1Yl9kZXYsCisJCQkJCSJyZXNldCBjaGFuZ2Ugb24gcG9ydCAlZFxuIiwKKwkJCQkJaSk7CisJCQkJY2xlYXJfcG9ydF9mZWF0dXJlKGhkZXYsIGksCisJCQkJCVVTQl9QT1JUX0ZFQVRfQ19SRVNFVCk7CisJCQl9CisKKwkJCWlmIChjb25uZWN0X2NoYW5nZSkKKwkJCQlodWJfcG9ydF9jb25uZWN0X2NoYW5nZShodWIsIGksCisJCQkJCQlwb3J0c3RhdHVzLCBwb3J0Y2hhbmdlKTsKKwkJfSAvKiBlbmQgZm9yIGkgKi8KKworCQkvKiBkZWFsIHdpdGggaHViIHN0YXR1cyBjaGFuZ2VzICovCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgaHViLT5ldmVudF9iaXRzKSA9PSAwKQorCQkJOwkvKiBkbyBub3RoaW5nICovCisJCWVsc2UgaWYgKGh1Yl9odWJfc3RhdHVzKGh1YiwgJmh1YnN0YXR1cywgJmh1YmNoYW5nZSkgPCAwKQorCQkJZGV2X2VyciAoaHViX2RldiwgImdldF9odWJfc3RhdHVzIGZhaWxlZFxuIik7CisJCWVsc2UgeworCQkJaWYgKGh1YmNoYW5nZSAmIEhVQl9DSEFOR0VfTE9DQUxfUE9XRVIpIHsKKwkJCQlkZXZfZGJnIChodWJfZGV2LCAicG93ZXIgY2hhbmdlXG4iKTsKKwkJCQljbGVhcl9odWJfZmVhdHVyZShoZGV2LCBDX0hVQl9MT0NBTF9QT1dFUik7CisJCQl9CisJCQlpZiAoaHViY2hhbmdlICYgSFVCX0NIQU5HRV9PVkVSQ1VSUkVOVCkgeworCQkJCWRldl9kYmcgKGh1Yl9kZXYsICJvdmVyY3VycmVudCBjaGFuZ2VcbiIpOworCQkJCW1zbGVlcCg1MDApOwkvKiBDb29sIGRvd24gKi8KKwkJCQljbGVhcl9odWJfZmVhdHVyZShoZGV2LCBDX0hVQl9PVkVSX0NVUlJFTlQpOworICAgICAgICAgICAgICAgICAgICAgICAgCWh1Yl9wb3dlcl9vbihodWIpOworCQkJfQorCQl9CisKKwkJaHViLT5hY3RpdmF0aW5nID0gMDsKKworbG9vcDoKKwkJdXNiX3VubG9ja19kZXZpY2UoaGRldik7CisJCXVzYl9wdXRfaW50ZihpbnRmKTsKKworICAgICAgICB9IC8qIGVuZCB3aGlsZSAoMSkgKi8KK30KKworc3RhdGljIGludCBodWJfdGhyZWFkKHZvaWQgKl9fdW51c2VkKQoreworCS8qCisJICogVGhpcyB0aHJlYWQgZG9lc24ndCBuZWVkIGFueSB1c2VyLWxldmVsIGFjY2VzcywKKwkgKiBzbyBnZXQgcmlkIG9mIGFsbCBvdXIgcmVzb3VyY2VzCisJICovCisKKwlkYWVtb25pemUoImtodWJkIik7CisJYWxsb3dfc2lnbmFsKFNJR0tJTEwpOworCisJLyogU2VuZCBtZSBhIHNpZ25hbCB0byBnZXQgbWUgZGllIChmb3IgZGVidWdnaW5nKSAqLworCWRvIHsKKwkJaHViX2V2ZW50cygpOworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoa2h1YmRfd2FpdCwgIWxpc3RfZW1wdHkoJmh1Yl9ldmVudF9saXN0KSk7IAorCQl0cnlfdG9fZnJlZXplKFBGX0ZSRUVaRSk7CisJfSB3aGlsZSAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKTsKKworCXByX2RlYnVnICgiJXM6IGtodWJkIGV4aXRpbmdcbiIsIHVzYmNvcmVfbmFtZSk7CisJY29tcGxldGVfYW5kX2V4aXQoJmtodWJkX2V4aXRlZCwgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBodWJfaWRfdGFibGUgW10gPSB7CisgICAgeyAubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9DTEFTUywKKyAgICAgIC5iRGV2aWNlQ2xhc3MgPSBVU0JfQ0xBU1NfSFVCfSwKKyAgICB7IC5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTLAorICAgICAgLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19IVUJ9LAorICAgIHsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGh1Yl9pZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBodWJfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJodWIiLAorCS5wcm9iZSA9CWh1Yl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CWh1Yl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JaHViX3N1c3BlbmQsCisJLnJlc3VtZSA9CWh1Yl9yZXN1bWUsCisJLmlvY3RsID0JaHViX2lvY3RsLAorCS5pZF90YWJsZSA9CWh1Yl9pZF90YWJsZSwKK307CisKK2ludCB1c2JfaHViX2luaXQodm9pZCkKK3sKKwlwaWRfdCBwaWQ7CisKKwlpZiAodXNiX3JlZ2lzdGVyKCZodWJfZHJpdmVyKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgcmVnaXN0ZXIgaHViIGRyaXZlclxuIiwKKwkJCXVzYmNvcmVfbmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlwaWQgPSBrZXJuZWxfdGhyZWFkKGh1Yl90aHJlYWQsIE5VTEwsIENMT05FX0tFUk5FTCk7CisJaWYgKHBpZCA+PSAwKSB7CisJCWtodWJkX3BpZCA9IHBpZDsKKworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBGYWxsIHRocm91Z2ggaWYga2VybmVsX3RocmVhZCBmYWlsZWQgKi8KKwl1c2JfZGVyZWdpc3RlcigmaHViX2RyaXZlcik7CisJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3Qgc3RhcnQga2h1YmRcbiIsIHVzYmNvcmVfbmFtZSk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQgdXNiX2h1Yl9jbGVhbnVwKHZvaWQpCit7CisJaW50IHJldDsKKworCS8qIEtpbGwgdGhlIHRocmVhZCAqLworCXJldCA9IGtpbGxfcHJvYyhraHViZF9waWQsIFNJR0tJTEwsIDEpOworCisJd2FpdF9mb3JfY29tcGxldGlvbigma2h1YmRfZXhpdGVkKTsKKworCS8qCisJICogSHViIHJlc291cmNlcyBhcmUgZnJlZWQgZm9yIHVzIGJ5IHVzYl9kZXJlZ2lzdGVyLiBJdCBjYWxscworCSAqIHVzYl9kcml2ZXJfcHVyZ2Ugb24gZXZlcnkgZGV2aWNlIHdoaWNoIGluIHR1cm4gY2FsbHMgdGhhdAorCSAqIGRldmljZXMgZGlzY29ubmVjdCBmdW5jdGlvbiBpZiBpdCBpcyB1c2luZyB0aGlzIGRyaXZlci4KKwkgKiBUaGUgaHViX2Rpc2Nvbm5lY3QgZnVuY3Rpb24gdGFrZXMgY2FyZSBvZiByZWxlYXNpbmcgdGhlCisJICogaW5kaXZpZHVhbCBodWIgcmVzb3VyY2VzLiAtZ3JlZworCSAqLworCXVzYl9kZXJlZ2lzdGVyKCZodWJfZHJpdmVyKTsKK30gLyogdXNiX2h1Yl9jbGVhbnVwKCkgKi8KKworCitzdGF0aWMgaW50IGNvbmZpZ19kZXNjcmlwdG9yc19jaGFuZ2VkKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXVuc2lnbmVkCQkJaW5kZXg7CisJdW5zaWduZWQJCQlsZW4gPSAwOworCXN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IJKmJ1ZjsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHVkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOyBpbmRleCsrKSB7CisJCWlmIChsZW4gPCBsZTE2X3RvX2NwdSh1ZGV2LT5jb25maWdbaW5kZXhdLmRlc2Mud1RvdGFsTGVuZ3RoKSkKKwkJCWxlbiA9IGxlMTZfdG9fY3B1KHVkZXYtPmNvbmZpZ1tpbmRleF0uZGVzYy53VG90YWxMZW5ndGgpOworCX0KKwlidWYgPSBrbWFsbG9jIChsZW4sIFNMQUJfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJZGV2X2VycigmdWRldi0+ZGV2LCAibm8gbWVtIHRvIHJlLXJlYWQgY29uZmlncyBhZnRlciByZXNldFxuIik7CisJCS8qIGFzc3VtZSB0aGUgd29yc3QgKi8KKwkJcmV0dXJuIDE7CisJfQorCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHVkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOyBpbmRleCsrKSB7CisJCWludCBsZW5ndGg7CisJCWludCBvbGRfbGVuZ3RoID0gbGUxNl90b19jcHUodWRldi0+Y29uZmlnW2luZGV4XS5kZXNjLndUb3RhbExlbmd0aCk7CisKKwkJbGVuZ3RoID0gdXNiX2dldF9kZXNjcmlwdG9yKHVkZXYsIFVTQl9EVF9DT05GSUcsIGluZGV4LCBidWYsCisJCQkJb2xkX2xlbmd0aCk7CisJCWlmIChsZW5ndGggPCBvbGRfbGVuZ3RoKSB7CisJCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJjb25maWcgaW5kZXggJWQsIGVycm9yICVkXG4iLAorCQkJCQlpbmRleCwgbGVuZ3RoKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChtZW1jbXAgKGJ1ZiwgdWRldi0+cmF3ZGVzY3JpcHRvcnNbaW5kZXhdLCBvbGRfbGVuZ3RoKQorCQkJCSE9IDApIHsKKwkJCWRldl9kYmcoJnVkZXYtPmRldiwgImNvbmZpZyBpbmRleCAlZCBjaGFuZ2VkICgjJWQpXG4iLAorCQkJCWluZGV4LCBidWYtPmJDb25maWd1cmF0aW9uVmFsdWUpOworCQkJYnJlYWs7CisJCX0KKwl9CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gaW5kZXggIT0gdWRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnM7Cit9CisKKy8qKgorICogdXNiX3Jlc2V0X2RldmljZSAtIHBlcmZvcm0gYSBVU0IgcG9ydCByZXNldCB0byByZWluaXRpYWxpemUgYSBkZXZpY2UKKyAqIEB1ZGV2OiBkZXZpY2UgdG8gcmVzZXQgKG5vdCBpbiBTVVNQRU5ERUQgb3IgTk9UQVRUQUNIRUQgc3RhdGUpCisgKgorICogV0FSTklORyAtIGRvbid0IHJlc2V0IGFueSBkZXZpY2UgdW5sZXNzIGRyaXZlcnMgZm9yIGFsbCBvZiBpdHMKKyAqIGludGVyZmFjZXMgYXJlIGV4cGVjdGluZyB0aGF0IHJlc2V0ISAgTWF5YmUgc29tZSBkcml2ZXItPnJlc2V0KCkKKyAqIG1ldGhvZCBzaG91bGQgZXZlbnR1YWxseSBoZWxwIGVuc3VyZSBzdWZmaWNpZW50IGNvb3BlcmF0aW9uLgorICoKKyAqIERvIGEgcG9ydCByZXNldCwgcmVhc3NpZ24gdGhlIGRldmljZSdzIGFkZHJlc3MsIGFuZCBlc3RhYmxpc2ggaXRzCisgKiBmb3JtZXIgb3BlcmF0aW5nIGNvbmZpZ3VyYXRpb24uICBJZiB0aGUgcmVzZXQgZmFpbHMsIG9yIHRoZSBkZXZpY2UncworICogZGVzY3JpcHRvcnMgY2hhbmdlIGZyb20gdGhlaXIgdmFsdWVzIGJlZm9yZSB0aGUgcmVzZXQsIG9yIHRoZSBvcmlnaW5hbAorICogY29uZmlndXJhdGlvbiBhbmQgYWx0c2V0dGluZ3MgY2Fubm90IGJlIHJlc3RvcmVkLCBhIGZsYWcgd2lsbCBiZSBzZXQKKyAqIHRlbGxpbmcga2h1YmQgdG8gcHJldGVuZCB0aGUgZGV2aWNlIGhhcyBiZWVuIGRpc2Nvbm5lY3RlZCBhbmQgdGhlbgorICogcmUtY29ubmVjdGVkLiAgQWxsIGRyaXZlcnMgd2lsbCBiZSB1bmJvdW5kLCBhbmQgdGhlIGRldmljZSB3aWxsIGJlCisgKiByZS1lbnVtZXJhdGVkIGFuZCBwcm9iZWQgYWxsIG92ZXIgYWdhaW4uCisgKgorICogUmV0dXJucyAwIGlmIHRoZSByZXNldCBzdWNjZWVkZWQsIC1FTk9ERVYgaWYgdGhlIGRldmljZSBoYXMgYmVlbgorICogZmxhZ2dlZCBmb3IgbG9naWNhbCBkaXNjb25uZWN0aW9uLCBvciBzb21lIG90aGVyIG5lZ2F0aXZlIGVycm9yIGNvZGUKKyAqIGlmIHRoZSByZXNldCB3YXNuJ3QgZXZlbiBhdHRlbXB0ZWQuCisgKgorICogVGhlIGNhbGxlciBtdXN0IG93biB0aGUgZGV2aWNlIGxvY2suICBGb3IgZXhhbXBsZSwgaXQncyBzYWZlIHRvIHVzZQorICogdGhpcyBmcm9tIGEgZHJpdmVyIHByb2JlKCkgcm91dGluZSBhZnRlciBkb3dubG9hZGluZyBuZXcgZmlybXdhcmUuCisgKiBGb3IgY2FsbHMgdGhhdCBtaWdodCBub3Qgb2NjdXIgZHVyaW5nIHByb2JlKCksIGRyaXZlcnMgc2hvdWxkIGxvY2sKKyAqIHRoZSBkZXZpY2UgdXNpbmcgdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldCgpLgorICovCitpbnQgdXNiX3Jlc2V0X2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZQkJKnBhcmVudF9oZGV2ID0gdWRldi0+cGFyZW50OworCXN0cnVjdCB1c2JfaHViCQkJKnBhcmVudF9odWI7CisJc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvcglkZXNjcmlwdG9yID0gdWRldi0+ZGVzY3JpcHRvcjsKKwlzdHJ1Y3QgdXNiX2h1YgkJCSpodWIgPSBOVUxMOworCWludCAJCQkJaSwgcmV0ID0gMCwgcG9ydDEgPSAtMTsKKworCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQgfHwKKwkJCXVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpIHsKKwkJZGV2X2RiZygmdWRldi0+ZGV2LCAiZGV2aWNlIHJlc2V0IG5vdCBhbGxvd2VkIGluIHN0YXRlICVkXG4iLAorCQkJCXVkZXYtPnN0YXRlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFwYXJlbnRfaGRldikgeworCQkvKiB0aGlzIHJlcXVpcmVzIGhjZC1zcGVjaWZpYyBsb2dpYzsgc2VlIE9IQ0kgaGNfcmVzdGFydCgpICovCisJCWRldl9kYmcoJnVkZXYtPmRldiwgIiVzIGZvciByb290IGh1YiFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlTRElSOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBwYXJlbnRfaGRldi0+bWF4Y2hpbGQ7IGkrKykKKwkJaWYgKHBhcmVudF9oZGV2LT5jaGlsZHJlbltpXSA9PSB1ZGV2KSB7CisJCQlwb3J0MSA9IGkgKyAxOworCQkJYnJlYWs7CisJCX0KKworCWlmIChwb3J0MSA8IDApIHsKKwkJLyogSWYgdGhpcyBldmVyIGhhcHBlbnMsIGl0J3MgdmVyeSBiYWQgKi8KKwkJZGV2X2VycigmdWRldi0+ZGV2LCAiQ2FuJ3QgbG9jYXRlIGRldmljZSdzIHBvcnQhXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCXBhcmVudF9odWIgPSBoZGV2X3RvX2h1YihwYXJlbnRfaGRldik7CisKKwkvKiBJZiB3ZSdyZSByZXNldHRpbmcgYW4gYWN0aXZlIGh1YiwgdGFrZSBzb21lIHNwZWNpYWwgYWN0aW9ucyAqLworCWlmICh1ZGV2LT5hY3Rjb25maWcgJiYKKwkJCXVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlWzBdLT5kZXYuZHJpdmVyID09CisJCQkJJmh1Yl9kcml2ZXIuZHJpdmVyICYmCisJCQkoaHViID0gaGRldl90b19odWIodWRldikpICE9IE5VTEwpIHsKKwkJaHViX3ByZV9yZXNldChodWIpOworCX0KKworCXNldF9iaXQocG9ydDEsIHBhcmVudF9odWItPmJ1c3lfYml0cyk7CisJZm9yIChpID0gMDsgaSA8IFNFVF9DT05GSUdfVFJJRVM7ICsraSkgeworCisJCS8qIGVwMCBtYXhwYWNrZXQgc2l6ZSBtYXkgY2hhbmdlOyBsZXQgdGhlIEhDRCBrbm93IGFib3V0IGl0LgorCQkgKiBPdGhlciBlbmRwb2ludHMgd2lsbCBiZSBoYW5kbGVkIGJ5IHJlLWVudW1lcmF0aW9uLiAqLworCQllcDBfcmVpbml0KHVkZXYpOworCQlyZXQgPSBodWJfcG9ydF9pbml0KHBhcmVudF9odWIsIHVkZXYsIHBvcnQxLCBpKTsKKwkJaWYgKHJldCA+PSAwKQorCQkJYnJlYWs7CisJfQorCWNsZWFyX2JpdChwb3J0MSwgcGFyZW50X2h1Yi0+YnVzeV9iaXRzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byByZV9lbnVtZXJhdGU7CisgCisJLyogRGV2aWNlIG1pZ2h0IGhhdmUgY2hhbmdlZCBmaXJtd2FyZSAoREZVIG9yIHNpbWlsYXIpICovCisJaWYgKG1lbWNtcCgmdWRldi0+ZGVzY3JpcHRvciwgJmRlc2NyaXB0b3IsIHNpemVvZiBkZXNjcmlwdG9yKQorCQkJfHwgY29uZmlnX2Rlc2NyaXB0b3JzX2NoYW5nZWQgKHVkZXYpKSB7CisJCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJkZXZpY2UgZmlybXdhcmUgY2hhbmdlZFxuIik7CisJCXVkZXYtPmRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yOwkvKiBmb3IgZGlzY29ubmVjdCgpIGNhbGxzICovCisJCWdvdG8gcmVfZW51bWVyYXRlOworICAJfQorICAKKwlpZiAoIXVkZXYtPmFjdGNvbmZpZykKKwkJZ290byBkb25lOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCVVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04sIDAsCisJCQl1ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSwgMCwKKwkJCU5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsCisJCQkiY2FuJ3QgcmVzdG9yZSBjb25maWd1cmF0aW9uICMlZCAoZXJyb3I9JWQpXG4iLAorCQkJdWRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUsIHJldCk7CisJCWdvdG8gcmVfZW51bWVyYXRlOworICAJfQorCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVkZXYsIFVTQl9TVEFURV9DT05GSUdVUkVEKTsKKworCWZvciAoaSA9IDA7IGkgPCB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgeworCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldOworCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICpkZXNjOworCisJCS8qIHNldF9pbnRlcmZhY2UgcmVzZXRzIGhvc3Qgc2lkZSB0b2dnbGUgZXZlbgorCQkgKiBmb3IgYWx0c2V0dGluZyB6ZXJvLiAgdGhlIGludGVyZmFjZSBtYXkgaGF2ZSBubyBkcml2ZXIuCisJCSAqLworCQlkZXNjID0gJmludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjOworCQlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZSh1ZGV2LCBkZXNjLT5iSW50ZXJmYWNlTnVtYmVyLAorCQkJZGVzYy0+YkFsdGVybmF0ZVNldHRpbmcpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycigmdWRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlc3RvcmUgaW50ZXJmYWNlICVkICIKKwkJCQkiYWx0c2V0dGluZyAlZCAoZXJyb3I9JWQpXG4iLAorCQkJCWRlc2MtPmJJbnRlcmZhY2VOdW1iZXIsCisJCQkJZGVzYy0+YkFsdGVybmF0ZVNldHRpbmcsCisJCQkJcmV0KTsKKwkJCWdvdG8gcmVfZW51bWVyYXRlOworCQl9CisJfQorCitkb25lOgorCWlmIChodWIpCisJCWh1Yl9wb3N0X3Jlc2V0KGh1Yik7CisJcmV0dXJuIDA7CisgCityZV9lbnVtZXJhdGU6CisJaHViX3BvcnRfbG9naWNhbF9kaXNjb25uZWN0KHBhcmVudF9odWIsIHBvcnQxKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmggYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMTRiODQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5oCkBAIC0wLDAgKzEsMjM4IEBACisjaWZuZGVmIF9fTElOVVhfSFVCX0gKKyNkZWZpbmUgX19MSU5VWF9IVUJfSAorCisvKgorICogSHViIHByb3RvY29sIGFuZCBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmVzLgorICoKKyAqIFNvbWUgb2YgdGhlc2UgYXJlIGtub3duIHRvIHRoZSAidmlydHVhbCByb290IGh1YiIgY29kZQorICogaW4gaG9zdCBjb250cm9sbGVyIGRyaXZlcnMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgkvKiBsaWtlbHkoKS91bmxpa2VseSgpICovCisKKy8qCisgKiBIdWIgcmVxdWVzdCB0eXBlcworICovCisKKyNkZWZpbmUgVVNCX1JUX0hVQgkoVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfREVWSUNFKQorI2RlZmluZSBVU0JfUlRfUE9SVAkoVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfT1RIRVIpCisKKy8qCisgKiBIdWIgY2xhc3MgcmVxdWVzdHMKKyAqIFNlZSBVU0IgMi4wIHNwZWMgVGFibGUgMTEtMTYKKyAqLworI2RlZmluZSBIVUJfQ0xFQVJfVFRfQlVGRkVSCTgKKyNkZWZpbmUgSFVCX1JFU0VUX1RUCQk5CisjZGVmaW5lIEhVQl9HRVRfVFRfU1RBVEUJMTAKKyNkZWZpbmUgSFVCX1NUT1BfVFQJCTExCisKKy8qCisgKiBIdWIgQ2xhc3MgZmVhdHVyZSBudW1iZXJzCisgKiBTZWUgVVNCIDIuMCBzcGVjIFRhYmxlIDExLTE3CisgKi8KKyNkZWZpbmUgQ19IVUJfTE9DQUxfUE9XRVIJMAorI2RlZmluZSBDX0hVQl9PVkVSX0NVUlJFTlQJMQorCisvKgorICogUG9ydCBmZWF0dXJlIG51bWJlcnMKKyAqIFNlZSBVU0IgMi4wIHNwZWMgVGFibGUgMTEtMTcKKyAqLworI2RlZmluZSBVU0JfUE9SVF9GRUFUX0NPTk5FQ1RJT04JMAorI2RlZmluZSBVU0JfUE9SVF9GRUFUX0VOQUJMRQkJMQorI2RlZmluZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQJCTIKKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9PVkVSX0NVUlJFTlQJMworI2RlZmluZSBVU0JfUE9SVF9GRUFUX1JFU0VUCQk0CisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfUE9XRVIJCTgKKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9MT1dTUEVFRAkJOQorI2RlZmluZSBVU0JfUE9SVF9GRUFUX0hJR0hTUEVFRAkJMTAKKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT04JMTYKKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9DX0VOQUJMRQkJMTcKKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQJCTE4CisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfQ19PVkVSX0NVUlJFTlQJMTkKKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9DX1JFU0VUCQkyMAorI2RlZmluZSBVU0JfUE9SVF9GRUFUX1RFU1QgICAgICAgICAgICAgIDIxCisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfSU5ESUNBVE9SICAgICAgICAgMjIKKworLyogCisgKiBIdWIgU3RhdHVzIGFuZCBIdWIgQ2hhbmdlIHJlc3VsdHMKKyAqIFNlZSBVU0IgMi4wIHNwZWMgVGFibGUgMTEtMTkgYW5kIFRhYmxlIDExLTIwCisgKi8KK3N0cnVjdCB1c2JfcG9ydF9zdGF0dXMgeworCV9fbGUxNiB3UG9ydFN0YXR1czsKKwlfX2xlMTYgd1BvcnRDaGFuZ2U7CQorfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIAorICogd1BvcnRTdGF0dXMgYml0IGZpZWxkCisgKiBTZWUgVVNCIDIuMCBzcGVjIFRhYmxlIDExLTIxCisgKi8KKyNkZWZpbmUgVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OCTB4MDAwMQorI2RlZmluZSBVU0JfUE9SVF9TVEFUX0VOQUJMRQkJMHgwMDAyCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfU1VTUEVORAkJMHgwMDA0CisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfT1ZFUkNVUlJFTlQJMHgwMDA4CisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfUkVTRVQJCTB4MDAxMAorLyogYml0cyA1IHRvIDcgYXJlIHJlc2VydmVkICovCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfUE9XRVIJCTB4MDEwMAorI2RlZmluZSBVU0JfUE9SVF9TVEFUX0xPV19TUEVFRAkJMHgwMjAwCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfSElHSF9TUEVFRCAgICAgICAgMHgwNDAwCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfVEVTVCAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfSU5ESUNBVE9SICAgICAgICAgMHgxMDAwCisvKiBiaXRzIDEzIHRvIDE1IGFyZSByZXNlcnZlZCAqLworCisvKiAKKyAqIHdQb3J0Q2hhbmdlIGJpdCBmaWVsZAorICogU2VlIFVTQiAyLjAgc3BlYyBUYWJsZSAxMS0yMgorICogQml0cyAwIHRvIDQgc2hvd24sIGJpdHMgNSB0byAxNSBhcmUgcmVzZXJ2ZWQKKyAqLworI2RlZmluZSBVU0JfUE9SVF9TVEFUX0NfQ09OTkVDVElPTgkweDAwMDEKKyNkZWZpbmUgVVNCX1BPUlRfU1RBVF9DX0VOQUJMRQkJMHgwMDAyCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfQ19TVVNQRU5ECQkweDAwMDQKKyNkZWZpbmUgVVNCX1BPUlRfU1RBVF9DX09WRVJDVVJSRU5UCTB4MDAwOAorI2RlZmluZSBVU0JfUE9SVF9TVEFUX0NfUkVTRVQJCTB4MDAxMAorCisvKgorICogd0h1YkNoYXJhY3RlcmlzdGljcyAobWFza3MpIAorICogU2VlIFVTQiAyLjAgc3BlYyBUYWJsZSAxMS0xMywgb2Zmc2V0IDMKKyAqLworI2RlZmluZSBIVUJfQ0hBUl9MUFNNCQkweDAwMDMgLyogRDEgLi4gRDAgKi8KKyNkZWZpbmUgSFVCX0NIQVJfQ09NUE9VTkQJMHgwMDA0IC8qIEQyICAgICAgICovCisjZGVmaW5lIEhVQl9DSEFSX09DUE0JCTB4MDAxOCAvKiBENCAuLiBEMyAqLworI2RlZmluZSBIVUJfQ0hBUl9UVFRUICAgICAgICAgICAweDAwNjAgLyogRDYgLi4gRDUgKi8KKyNkZWZpbmUgSFVCX0NIQVJfUE9SVElORCAgICAgICAgMHgwMDgwIC8qIEQ3ICAgICAgICovCisKK3N0cnVjdCB1c2JfaHViX3N0YXR1cyB7CisJX19sZTE2IHdIdWJTdGF0dXM7CisJX19sZTE2IHdIdWJDaGFuZ2U7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKKyAqIEh1YiBTdGF0dXMgJiBIdWIgQ2hhbmdlIGJpdCBtYXNrcworICogU2VlIFVTQiAyLjAgc3BlYyBUYWJsZSAxMS0xOSBhbmQgVGFibGUgMTEtMjAKKyAqIEJpdHMgMCBhbmQgMSBmb3Igd0h1YlN0YXR1cyBhbmQgd0h1YkNoYW5nZQorICogQml0cyAyIHRvIDE1IGFyZSByZXNlcnZlZCBmb3IgYm90aAorICovCisjZGVmaW5lIEhVQl9TVEFUVVNfTE9DQUxfUE9XRVIJMHgwMDAxCisjZGVmaW5lIEhVQl9TVEFUVVNfT1ZFUkNVUlJFTlQJMHgwMDAyCisjZGVmaW5lIEhVQl9DSEFOR0VfTE9DQUxfUE9XRVIJMHgwMDAxCisjZGVmaW5lIEhVQl9DSEFOR0VfT1ZFUkNVUlJFTlQJMHgwMDAyCisKKworLyogCisgKiBIdWIgZGVzY3JpcHRvciAKKyAqIFNlZSBVU0IgMi4wIHNwZWMgVGFibGUgMTEtMTMKKyAqLworCisjZGVmaW5lIFVTQl9EVF9IVUIJCQkoVVNCX1RZUEVfQ0xBU1MgfCAweDA5KQorI2RlZmluZSBVU0JfRFRfSFVCX05PTlZBUl9TSVpFCQk3CisKK3N0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgeworCV9fdTggIGJEZXNjTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsKKwlfX3U4ICBiTmJyUG9ydHM7CisJX191MTYgd0h1YkNoYXJhY3RlcmlzdGljczsKKwlfX3U4ICBiUHdyT24yUHdyR29vZDsKKwlfX3U4ICBiSHViQ29udHJDdXJyZW50OworCSAgICAJLyogYWRkIDEgYml0IGZvciBodWIgc3RhdHVzIGNoYW5nZTsgcm91bmQgdG8gYnl0ZXMgKi8KKwlfX3U4ICBEZXZpY2VSZW1vdmFibGVbKFVTQl9NQVhDSElMRFJFTiArIDEgKyA3KSAvIDhdOworCV9fdTggIFBvcnRQd3JDdHJsTWFza1soVVNCX01BWENISUxEUkVOICsgMSArIDcpIC8gOF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKiBwb3J0IGluZGljYXRvciBzdGF0dXMgc2VsZWN0b3JzLCB0YWJsZXMgMTEtNyBhbmQgMTEtMjUgKi8KKyNkZWZpbmUgSFVCX0xFRF9BVVRPCTAKKyNkZWZpbmUgSFVCX0xFRF9BTUJFUgkxCisjZGVmaW5lIEhVQl9MRURfR1JFRU4JMgorI2RlZmluZSBIVUJfTEVEX09GRgkzCisKK2VudW0gaHViX2xlZF9tb2RlIHsKKwlJTkRJQ0FUT1JfQVVUTyA9IDAsCisJSU5ESUNBVE9SX0NZQ0xFLAorCS8qIHNvZnR3YXJlIGJsaW5rcyBmb3IgYXR0ZW50aW9uOiAgc29mdHdhcmUsIGhhcmR3YXJlLCByZXNlcnZlZCAqLworCUlORElDQVRPUl9HUkVFTl9CTElOSywgSU5ESUNBVE9SX0dSRUVOX0JMSU5LX09GRiwKKwlJTkRJQ0FUT1JfQU1CRVJfQkxJTkssIElORElDQVRPUl9BTUJFUl9CTElOS19PRkYsCisJSU5ESUNBVE9SX0FMVF9CTElOSywgSU5ESUNBVE9SX0FMVF9CTElOS19PRkYKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgdXNiX2RldmljZTsKKworLyoKKyAqIEFzIG9mIFVTQiAyLjAsIGZ1bGwvbG93IHNwZWVkIGRldmljZXMgYXJlIHNlZ3JlZ2F0ZWQgaW50byB0cmVlcy4KKyAqIE9uZSB0eXBlIGdyb3dzIGZyb20gVVNCIDEuMSBob3N0IGNvbnRyb2xsZXJzIChPSENJLCBVSENJIGV0YykuCisgKiBUaGUgb3RoZXIgdHlwZSBncm93cyBmcm9tIGhpZ2ggc3BlZWQgaHVicyB3aGVuIHRoZXkgY29ubmVjdCB0bworICogZnVsbC9sb3cgc3BlZWQgZGV2aWNlcyB1c2luZyAiVHJhbnNhY3Rpb24gVHJhbnNsYXRvcnMiIChUVHMpLgorICoKKyAqIFRUcyBzaG91bGQgb25seSBiZSBrbm93biB0byB0aGUgaHViIGRyaXZlciwgYW5kIGhpZ2ggc3BlZWQgYnVzCisgKiBkcml2ZXJzIChvbmx5IEVIQ0kgZm9yIG5vdykuICBUaGV5IGFmZmVjdCBwZXJpb2RpYyBzY2hlZHVsaW5nIGFuZAorICogc29tZXRpbWVzIGNvbnRyb2wvYnVsayBlcnJvciByZWNvdmVyeS4KKyAqLworc3RydWN0IHVzYl90dCB7CisJc3RydWN0IHVzYl9kZXZpY2UJKmh1YjsJLyogdXBzdHJlYW0gaGlnaHNwZWVkIGh1YiAqLworCWludAkJCW11bHRpOwkvKiB0cnVlIG1lYW5zIG9uZSBUVCBwZXIgcG9ydCAqLworCisJLyogZm9yIGNvbnRyb2wvYnVsayBlcnJvciByZWNvdmVyeSAoQ0xFQVJfVFRfQlVGRkVSKSAqLworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IGxpc3RfaGVhZAljbGVhcl9saXN0OwkvKiBvZiB1c2JfdHRfY2xlYXIgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCQlrZXZlbnQ7Cit9OworCitzdHJ1Y3QgdXNiX3R0X2NsZWFyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNsZWFyX2xpc3Q7CisJdW5zaWduZWQJCXR0OworCXUxNgkJCWRldmluZm87Cit9OworCitleHRlcm4gdm9pZCB1c2JfaHViX3R0X2NsZWFyX2J1ZmZlciAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IHBpcGUpOworCitzdHJ1Y3QgdXNiX2h1YiB7CisJc3RydWN0IGRldmljZQkJKmludGZkZXY7CS8qIHRoZSAiaW50ZXJmYWNlIiBkZXZpY2UgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZQkqaGRldjsKKwlzdHJ1Y3QgdXJiCQkqdXJiOwkJLyogZm9yIGludGVycnVwdCBwb2xsaW5nIHBpcGUgKi8KKworCS8qIGJ1ZmZlciBmb3IgdXJiIC4uLiB3aXRoIGV4dHJhIHNwYWNlIGluIGNhc2Ugb2YgYmFiYmxlICovCisJY2hhcgkJCSgqYnVmZmVyKVs4XTsKKwlkbWFfYWRkcl90CQlidWZmZXJfZG1hOwkvKiBETUEgYWRkcmVzcyBmb3IgYnVmZmVyICovCisJdW5pb24geworCQlzdHJ1Y3QgdXNiX2h1Yl9zdGF0dXMJaHViOworCQlzdHJ1Y3QgdXNiX3BvcnRfc3RhdHVzCXBvcnQ7CisJfQkJCSpzdGF0dXM7CS8qIGJ1ZmZlciBmb3Igc3RhdHVzIHJlcG9ydHMgKi8KKworCWludAkJCWVycm9yOwkJLyogbGFzdCByZXBvcnRlZCBlcnJvciAqLworCWludAkJCW5lcnJvcnM7CS8qIHRyYWNrIGNvbnNlY3V0aXZlIGVycm9ycyAqLworCisJc3RydWN0IGxpc3RfaGVhZAlldmVudF9saXN0OwkvKiBodWJzIHcvZGF0YSBvciBlcnJzIHJlYWR5ICovCisJdW5zaWduZWQgbG9uZwkJZXZlbnRfYml0c1sxXTsJLyogc3RhdHVzIGNoYW5nZSBiaXRtYXNrICovCisJdW5zaWduZWQgbG9uZwkJY2hhbmdlX2JpdHNbMV07CS8qIHBvcnRzIHdpdGggbG9naWNhbCBjb25uZWN0CisJCQkJCQkJc3RhdHVzIGNoYW5nZSAqLworCXVuc2lnbmVkIGxvbmcJCWJ1c3lfYml0c1sxXTsJLyogcG9ydHMgYmVpbmcgcmVzZXQgKi8KKyNpZiBVU0JfTUFYQ0hJTERSRU4gPiAzMSAvKiA4KnNpemVvZih1bnNpZ25lZCBsb25nKSAtIDEgKi8KKyNlcnJvciBldmVudF9iaXRzW10gaXMgdG9vIHNob3J0IQorI2VuZGlmCisKKwlzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yICpkZXNjcmlwdG9yOwkvKiBjbGFzcyBkZXNjcmlwdG9yICovCisJc3RydWN0IHVzYl90dAkJdHQ7CQkvKiBUcmFuc2FjdGlvbiBUcmFuc2xhdG9yICovCisKKwl1OAkJCXBvd2VyX2J1ZGdldDsJLyogaW4gMm1BIHVuaXRzOyBvciB6ZXJvICovCisKKwl1bnNpZ25lZAkJcXVpZXNjaW5nOjE7CisJdW5zaWduZWQJCWFjdGl2YXRpbmc6MTsKKwl1bnNpZ25lZAkJcmVzdW1lX3Jvb3RfaHViOjE7CisKKwl1bnNpZ25lZAkJaGFzX2luZGljYXRvcnM6MTsKKwllbnVtIGh1Yl9sZWRfbW9kZQlpbmRpY2F0b3JbVVNCX01BWENISUxEUkVOXTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJbGVkczsKK307CisKKy8qIHVzZSB0aGlzIGZvciBsb3ctcG93ZXJlZCByb290IGh1YnMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAoraHViX3NldF9wb3dlcl9idWRnZXQgKHN0cnVjdCB1c2JfZGV2aWNlICpodWJkZXYsIHVuc2lnbmVkIG1BKQoreworCXN0cnVjdCB1c2JfaHViCSpodWI7CisKKwlodWIgPSAoc3RydWN0IHVzYl9odWIgKikKKwkJdXNiX2dldF9pbnRmZGF0YSAoaHViZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVswXSk7CisJaHViLT5wb3dlcl9idWRnZXQgPSBtaW4obUEsKHVuc2lnbmVkKTUwMCkvMjsKK30KKworI2VuZGlmIC8qIF9fTElOVVhfSFVCX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTEzNDA3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCkBAIC0wLDAgKzEsNzY0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKglpbm9kZS5jICAtLSAgSW5vZGUvRGVudHJ5IGZ1bmN0aW9ucyBmb3IgdGhlIFVTQiBkZXZpY2UgZmlsZSBzeXN0ZW0uCisgKgorICoJQ29weXJpZ2h0IChDKSAyMDAwIFRob21hcyBTYWlsZXIgKHNhaWxlckBpZmUuZWUuZXRoei5jaCkKKyAqCUNvcHlyaWdodCAoQykgMjAwMSwyMDAyLDIwMDQgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICoJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICoJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKglGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiAgSGlzdG9yeToKKyAqICAgMC4xICAwNC4wMS4yMDAwICBDcmVhdGVkCisgKiAgIDAuMiAgMTAuMTIuMjAwMSAgY29udmVydGVkIHRvIHVzZSB0aGUgdmZzIGxheWVyIGJldHRlcgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYmRldmljZV9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgInVzYi5oIgorCitzdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgdXNiZnNfb3BzOworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmYXVsdF9maWxlX29wZXJhdGlvbnM7CitzdGF0aWMgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdXNiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CitzdGF0aWMgc3RydWN0IHZmc21vdW50ICp1c2Jmc19tb3VudDsKK3N0YXRpYyBpbnQgdXNiZnNfbW91bnRfY291bnQ7CS8qID0gMCAqLworc3RhdGljIGludCBpZ25vcmVfbW91bnQgPSAwOworCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZGV2aWNlc191c2Jmc19kZW50cnk7CitzdGF0aWMgaW50IG51bV9idXNlczsJLyogPSAwICovCisKK3N0YXRpYyB1aWRfdCBkZXZ1aWQ7CS8qID0gMCAqLworc3RhdGljIHVpZF90IGJ1c3VpZDsJLyogPSAwICovCitzdGF0aWMgdWlkX3QgbGlzdHVpZDsJLyogPSAwICovCitzdGF0aWMgZ2lkX3QgZGV2Z2lkOwkvKiA9IDAgKi8KK3N0YXRpYyBnaWRfdCBidXNnaWQ7CS8qID0gMCAqLworc3RhdGljIGdpZF90IGxpc3RnaWQ7CS8qID0gMCAqLworc3RhdGljIHVtb2RlX3QgZGV2bW9kZSA9IFNfSVdVU1IgfCBTX0lSVUdPOworc3RhdGljIHVtb2RlX3QgYnVzbW9kZSA9IFNfSVhVR08gfCBTX0lSVUdPOworc3RhdGljIHVtb2RlX3QgbGlzdG1vZGUgPSBTX0lSVUdPOworCitlbnVtIHsKKwlPcHRfZGV2dWlkLCBPcHRfZGV2Z2lkLCBPcHRfZGV2bW9kZSwKKwlPcHRfYnVzdWlkLCBPcHRfYnVzZ2lkLCBPcHRfYnVzbW9kZSwKKwlPcHRfbGlzdHVpZCwgT3B0X2xpc3RnaWQsIE9wdF9saXN0bW9kZSwKKwlPcHRfZXJyLAorfTsKKworc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0geworCXtPcHRfZGV2dWlkLCAiZGV2dWlkPSV1In0sCisJe09wdF9kZXZnaWQsICJkZXZnaWQ9JXUifSwKKwl7T3B0X2Rldm1vZGUsICJkZXZtb2RlPSVvIn0sCisJe09wdF9idXN1aWQsICJidXN1aWQ9JXUifSwKKwl7T3B0X2J1c2dpZCwgImJ1c2dpZD0ldSJ9LAorCXtPcHRfYnVzbW9kZSwgImJ1c21vZGU9JW8ifSwKKwl7T3B0X2xpc3R1aWQsICJsaXN0dWlkPSV1In0sCisJe09wdF9saXN0Z2lkLCAibGlzdGdpZD0ldSJ9LAorCXtPcHRfbGlzdG1vZGUsICJsaXN0bW9kZT0lbyJ9LAorCXtPcHRfZXJyLCBOVUxMfQorfTsKKworc3RhdGljIGludCBwYXJzZV9vcHRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgY2hhciAqZGF0YSkKK3sKKwljaGFyICpwOworCWludCBvcHRpb247CisKKwkvKiAocmUpc2V0IHRvIGRlZmF1bHRzLiAqLworCWRldnVpZCA9IDA7CisJYnVzdWlkID0gMDsKKwlsaXN0dWlkID0gMDsKKwlkZXZnaWQgPSAwOworCWJ1c2dpZCA9IDA7CisJbGlzdGdpZCA9IDA7CisJZGV2bW9kZSA9IFNfSVdVU1IgfCBTX0lSVUdPOworCWJ1c21vZGUgPSBTX0lYVUdPIHwgU19JUlVHTzsKKwlsaXN0bW9kZSA9IFNfSVJVR087CisKKwl3aGlsZSAoKHAgPSBzdHJzZXAoJmRhdGEsICIsIikpICE9IE5VTEwpIHsKKwkJc3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdOworCQlpbnQgdG9rZW47CisJCWlmICghKnApCisJCQljb250aW51ZTsKKworCQl0b2tlbiA9IG1hdGNoX3Rva2VuKHAsIHRva2VucywgYXJncyk7CisJCXN3aXRjaCAodG9rZW4pIHsKKwkJY2FzZSBPcHRfZGV2dWlkOgorCQkJaWYgKG1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbikpCisJCQkgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJCQlkZXZ1aWQgPSBvcHRpb247CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZGV2Z2lkOgorCQkJaWYgKG1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbikpCisJCQkgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJCQlkZXZnaWQgPSBvcHRpb247CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZGV2bW9kZToKKwkJCWlmIChtYXRjaF9vY3RhbCgmYXJnc1swXSwgJm9wdGlvbikpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlkZXZtb2RlID0gb3B0aW9uICYgU19JUldYVUdPOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2J1c3VpZDoKKwkJCWlmIChtYXRjaF9pbnQoJmFyZ3NbMF0sICZvcHRpb24pKQorCQkJICAgICAgIHJldHVybiAtRUlOVkFMOworCQkJYnVzdWlkID0gb3B0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2J1c2dpZDoKKwkJCWlmIChtYXRjaF9pbnQoJmFyZ3NbMF0sICZvcHRpb24pKQorCQkJICAgICAgIHJldHVybiAtRUlOVkFMOworCQkJYnVzZ2lkID0gb3B0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2J1c21vZGU6CisJCQlpZiAobWF0Y2hfb2N0YWwoJmFyZ3NbMF0sICZvcHRpb24pKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJYnVzbW9kZSA9IG9wdGlvbiAmIFNfSVJXWFVHTzsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9saXN0dWlkOgorCQkJaWYgKG1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbikpCisJCQkgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJCQlsaXN0dWlkID0gb3B0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2xpc3RnaWQ6CisJCQlpZiAobWF0Y2hfaW50KCZhcmdzWzBdLCAmb3B0aW9uKSkKKwkJCSAgICAgICByZXR1cm4gLUVJTlZBTDsKKwkJCWxpc3RnaWQgPSBvcHRpb247CisJCQlicmVhazsKKwkJY2FzZSBPcHRfbGlzdG1vZGU6CisJCQlpZiAobWF0Y2hfb2N0YWwoJmFyZ3NbMF0sICZvcHRpb24pKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJbGlzdG1vZGUgPSBvcHRpb24gJiBTX0lSV1hVR087CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVycigidXNiZnM6IHVucmVjb2duaXNlZCBtb3VudCBvcHRpb24gXCIlc1wiICIKKwkJCSAgICAib3IgbWlzc2luZyB2YWx1ZVxuIiwgcCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfc3BlY2lhbChzdHJ1Y3QgZGVudHJ5ICpzcGVjaWFsKQoreworCXNwZWNpYWwtPmRfaW5vZGUtPmlfdWlkID0gbGlzdHVpZDsKKwlzcGVjaWFsLT5kX2lub2RlLT5pX2dpZCA9IGxpc3RnaWQ7CisJc3BlY2lhbC0+ZF9pbm9kZS0+aV9tb2RlID0gU19JRlJFRyB8IGxpc3Rtb2RlOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfZGV2KHN0cnVjdCBkZW50cnkgKmRldikKK3sKKwlkZXYtPmRfaW5vZGUtPmlfdWlkID0gZGV2dWlkOworCWRldi0+ZF9pbm9kZS0+aV9naWQgPSBkZXZnaWQ7CisJZGV2LT5kX2lub2RlLT5pX21vZGUgPSBTX0lGUkVHIHwgZGV2bW9kZTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2J1cyhzdHJ1Y3QgZGVudHJ5ICpidXMpCit7CisJc3RydWN0IGRlbnRyeSAqZGV2ID0gTlVMTDsKKworCWJ1cy0+ZF9pbm9kZS0+aV91aWQgPSBidXN1aWQ7CisJYnVzLT5kX2lub2RlLT5pX2dpZCA9IGJ1c2dpZDsKKwlidXMtPmRfaW5vZGUtPmlfbW9kZSA9IFNfSUZESVIgfCBidXNtb2RlOworCisJZG93bigmYnVzLT5kX2lub2RlLT5pX3NlbSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZF9zdWJkaXJzLCBkX2NoaWxkKQorCQlpZiAoZGV2LT5kX2lub2RlKQorCQkJdXBkYXRlX2RldihkZXYpOworCisJdXAoJmJ1cy0+ZF9pbm9kZS0+aV9zZW0pOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpyb290ID0gc2ItPnNfcm9vdDsKKwlzdHJ1Y3QgZGVudHJ5ICpidXMgPSBOVUxMOworCisJaWYgKCFyb290KQorCQlyZXR1cm47CisKKwlkb3duKCZyb290LT5kX2lub2RlLT5pX3NlbSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1cywgJnJvb3QtPmRfc3ViZGlycywgZF9jaGlsZCkgeworCQlpZiAoYnVzLT5kX2lub2RlKSB7CisJCQlzd2l0Y2ggKFNfSUZNVCAmIGJ1cy0+ZF9pbm9kZS0+aV9tb2RlKSB7CisJCQljYXNlIFNfSUZESVI6CisJCQkJdXBkYXRlX2J1cyhidXMpOworCQkJCWJyZWFrOworCQkJY2FzZSBTX0lGUkVHOgorCQkJCXVwZGF0ZV9zcGVjaWFsKGJ1cyk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXdhcm4oIlVua25vd24gbm9kZSAlcyBtb2RlICV4IGZvdW5kIG9uIHJlbW91bnQhXG4iLGJ1cy0+ZF9uYW1lLm5hbWUsYnVzLT5kX2lub2RlLT5pX21vZGUpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJdXAoJnJvb3QtPmRfaW5vZGUtPmlfc2VtKTsKK30KKworc3RhdGljIGludCByZW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqZmxhZ3MsIGNoYXIgKmRhdGEpCit7CisJLyogSWYgdGhpcyBpcyBub3QgYSByZWFsIG1vdW50LAorCSAqIGkuZS4gaXQncyBhIHNpbXBsZV9waW5fZnMgZnJvbSBjcmVhdGVfc3BlY2lhbF9maWxlcywKKwkgKiB0aGVuIGlnbm9yZSBpdC4KKwkgKi8KKwlpZiAoaWdub3JlX21vdW50KQorCQlyZXR1cm4gMDsKKworCWlmIChwYXJzZV9vcHRpb25zKHNiLCBkYXRhKSkgeworCQl3YXJuKCJ1c2JmczogbW91bnQgcGFyYW1ldGVyIGVycm9yOiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodXNiZnNfbW91bnQgJiYgdXNiZnNfbW91bnQtPm1udF9zYikKKwkJdXBkYXRlX3NiKHVzYmZzX21vdW50LT5tbnRfc2IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKnVzYmZzX2dldF9pbm9kZSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG1vZGUsIGRldl90IGRldikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmV3X2lub2RlKHNiKTsKKworCWlmIChpbm9kZSkgeworCQlpbm9kZS0+aV9tb2RlID0gbW9kZTsKKwkJaW5vZGUtPmlfdWlkID0gY3VycmVudC0+ZnN1aWQ7CisJCWlub2RlLT5pX2dpZCA9IGN1cnJlbnQtPmZzZ2lkOworCQlpbm9kZS0+aV9ibGtzaXplID0gUEFHRV9DQUNIRV9TSVpFOworCQlpbm9kZS0+aV9ibG9ja3MgPSAwOworCQlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJCXN3aXRjaCAobW9kZSAmIFNfSUZNVCkgeworCQlkZWZhdWx0OgorCQkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBtb2RlLCBkZXYpOworCQkJYnJlYWs7CisJCWNhc2UgU19JRlJFRzoKKwkJCWlub2RlLT5pX2ZvcCA9ICZkZWZhdWx0X2ZpbGVfb3BlcmF0aW9uczsKKwkJCWJyZWFrOworCQljYXNlIFNfSUZESVI6CisJCQlpbm9kZS0+aV9vcCA9ICZ1c2Jmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKKwkJCWlub2RlLT5pX2ZvcCA9ICZzaW1wbGVfZGlyX29wZXJhdGlvbnM7CisKKwkJCS8qIGRpcmVjdG9yeSBpbm9kZXMgc3RhcnQgb2ZmIHdpdGggaV9ubGluayA9PSAyIChmb3IgIi4iIGVudHJ5KSAqLworCQkJaW5vZGUtPmlfbmxpbmsrKzsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBpbm9kZTsgCit9CisKKy8qIFNNUC1zYWZlICovCitzdGF0aWMgaW50IHVzYmZzX21rbm9kIChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwKKwkJCWRldl90IGRldikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gdXNiZnNfZ2V0X2lub2RlKGRpci0+aV9zYiwgbW9kZSwgZGV2KTsKKwlpbnQgZXJyb3IgPSAtRVBFUk07CisKKwlpZiAoZGVudHJ5LT5kX2lub2RlKQorCQlyZXR1cm4gLUVFWElTVDsKKworCWlmIChpbm9kZSkgeworCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOworCQlkZ2V0KGRlbnRyeSk7CisJCWVycm9yID0gMDsKKwl9CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IHVzYmZzX21rZGlyIChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSkKK3sKKwlpbnQgcmVzOworCisJbW9kZSA9IChtb2RlICYgKFNfSVJXWFVHTyB8IFNfSVNWVFgpKSB8IFNfSUZESVI7CisJcmVzID0gdXNiZnNfbWtub2QgKGRpciwgZGVudHJ5LCBtb2RlLCAwKTsKKwlpZiAoIXJlcykKKwkJZGlyLT5pX25saW5rKys7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB1c2Jmc19jcmVhdGUgKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlKQoreworCW1vZGUgPSAobW9kZSAmIFNfSUFMTFVHTykgfCBTX0lGUkVHOworCXJldHVybiB1c2Jmc19ta25vZCAoZGlyLCBkZW50cnksIG1vZGUsIDApOworfQorCitzdGF0aWMgaW5saW5lIGludCB1c2Jmc19wb3NpdGl2ZSAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXJldHVybiBkZW50cnktPmRfaW5vZGUgJiYgIWRfdW5oYXNoZWQoZGVudHJ5KTsKK30KKworc3RhdGljIGludCB1c2Jmc19lbXB0eSAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisKKwlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKworCWxpc3RfZm9yX2VhY2gobGlzdCwgJmRlbnRyeS0+ZF9zdWJkaXJzKSB7CisJCXN0cnVjdCBkZW50cnkgKmRlID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgZGVudHJ5LCBkX2NoaWxkKTsKKwkJaWYgKHVzYmZzX3Bvc2l0aXZlKGRlKSkgeworCQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB1c2Jmc191bmxpbmsgKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlkb3duKCZpbm9kZS0+aV9zZW0pOworCWRlbnRyeS0+ZF9pbm9kZS0+aV9ubGluay0tOworCWRwdXQoZGVudHJ5KTsKKwl1cCgmaW5vZGUtPmlfc2VtKTsKKwlkX2RlbGV0ZShkZW50cnkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzYmZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJaW50IGVycm9yID0gLUVOT1RFTVBUWTsKKwlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKworCWRvd24oJmlub2RlLT5pX3NlbSk7CisJZGVudHJ5X3VuaGFzaChkZW50cnkpOworCWlmICh1c2Jmc19lbXB0eShkZW50cnkpKSB7CisJCWRlbnRyeS0+ZF9pbm9kZS0+aV9ubGluayAtPSAyOworCQlkcHV0KGRlbnRyeSk7CisJCWlub2RlLT5pX2ZsYWdzIHw9IFNfREVBRDsKKwkJZGlyLT5pX25saW5rLS07CisJCWVycm9yID0gMDsKKwl9CisJdXAoJmlub2RlLT5pX3NlbSk7CisJaWYgKCFlcnJvcikKKwkJZF9kZWxldGUoZGVudHJ5KTsKKwlkcHV0KGRlbnRyeSk7CisJcmV0dXJuIGVycm9yOworfQorCisKKy8qIGRlZmF1bHQgZmlsZSBvcGVyYXRpb25zICovCitzdGF0aWMgc3NpemVfdCBkZWZhdWx0X3JlYWRfZmlsZSAoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgZGVmYXVsdF93cml0ZV9maWxlIChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBsb2ZmX3QgZGVmYXVsdF9maWxlX2xzZWVrIChzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWcpCit7CisJbG9mZl90IHJldHZhbCA9IC1FSU5WQUw7CisKKwlkb3duKCZmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOworCXN3aXRjaChvcmlnKSB7CisJY2FzZSAwOgorCQlpZiAob2Zmc2V0ID4gMCkgeworCQkJZmlsZS0+Zl9wb3MgPSBvZmZzZXQ7CisJCQlyZXR2YWwgPSBmaWxlLT5mX3BvczsKKwkJfSAKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlpZiAoKG9mZnNldCArIGZpbGUtPmZfcG9zKSA+IDApIHsKKwkJCWZpbGUtPmZfcG9zICs9IG9mZnNldDsKKwkJCXJldHZhbCA9IGZpbGUtPmZfcG9zOworCQl9IAorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJdXAoJmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3NlbSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBkZWZhdWx0X29wZW4gKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmIChpbm9kZS0+dS5nZW5lcmljX2lwKQorCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+dS5nZW5lcmljX2lwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZmF1bHRfZmlsZV9vcGVyYXRpb25zID0geworCS5yZWFkID0JCWRlZmF1bHRfcmVhZF9maWxlLAorCS53cml0ZSA9CWRlZmF1bHRfd3JpdGVfZmlsZSwKKwkub3BlbiA9CQlkZWZhdWx0X29wZW4sCisJLmxsc2VlayA9CWRlZmF1bHRfZmlsZV9sc2VlaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB1c2Jmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHsKKwkubG9va3VwID0Jc2ltcGxlX2xvb2t1cCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB1c2Jmc19vcHMgPSB7CisJLnN0YXRmcyA9CXNpbXBsZV9zdGF0ZnMsCisJLmRyb3BfaW5vZGUgPQlnZW5lcmljX2RlbGV0ZV9pbm9kZSwKKwkucmVtb3VudF9mcyA9CXJlbW91bnQsCit9OworCitzdGF0aWMgaW50IHVzYmZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSwgaW50IHNpbGVudCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBkZW50cnkgKnJvb3Q7CisKKwlzYi0+c19ibG9ja3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CisJc2ItPnNfYmxvY2tzaXplX2JpdHMgPSBQQUdFX0NBQ0hFX1NISUZUOworCXNiLT5zX21hZ2ljID0gVVNCREVWSUNFX1NVUEVSX01BR0lDOworCXNiLT5zX29wID0gJnVzYmZzX29wczsKKwlzYi0+c190aW1lX2dyYW4gPSAxOworCWlub2RlID0gdXNiZnNfZ2V0X2lub2RlKHNiLCBTX0lGRElSIHwgMDc1NSwgMCk7CisKKwlpZiAoIWlub2RlKSB7CisJCWRiZygiJXM6IGNvdWxkIG5vdCBnZXQgaW5vZGUhIixfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyb290ID0gZF9hbGxvY19yb290KGlub2RlKTsKKwlpZiAoIXJvb3QpIHsKKwkJZGJnKCIlczogY291bGQgbm90IGdldCByb290IGRlbnRyeSEiLF9fRlVOQ1RJT05fXyk7CisJCWlwdXQoaW5vZGUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc2ItPnNfcm9vdCA9IHJvb3Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICogZ2V0X2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUpCit7ICAgICAgICAgICAgICAgCisJc3RydWN0IHFzdHIgcXN0cjsKKworCXFzdHIubmFtZSA9IG5hbWU7CisJcXN0ci5sZW4gPSBzdHJsZW4obmFtZSk7CisJcXN0ci5oYXNoID0gZnVsbF9uYW1lX2hhc2gobmFtZSxxc3RyLmxlbik7CisJcmV0dXJuIGxvb2t1cF9oYXNoKCZxc3RyLHBhcmVudCk7Cit9ICAgICAgICAgICAgICAgCisKKworLyoKKyAqIGZzX2NyZWF0ZV9ieV9uYW1lIC0gY3JlYXRlIGEgZmlsZSwgZ2l2ZW4gYSBuYW1lCisgKiBAbmFtZToJbmFtZSBvZiBmaWxlCisgKiBAbW9kZToJdHlwZSBvZiBmaWxlCisgKiBAcGFyZW50OglkZW50cnkgb2YgZGlyZWN0b3J5IHRvIGNyZWF0ZSBpdCBpbgorICogQGRlbnRyeToJcmVzdWx0aW5nIGRlbnRyeSBvZiBmaWxlCisgKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGJvdGggcmVndWxhciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCisgKi8KK3N0YXRpYyBpbnQgZnNfY3JlYXRlX2J5X25hbWUgKGNvbnN0IGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlLAorCQkJICAgICAgc3RydWN0IGRlbnRyeSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICoqZGVudHJ5KQoreworCWludCBlcnJvciA9IDA7CisKKwkvKiBJZiB0aGUgcGFyZW50IGlzIG5vdCBzcGVjaWZpZWQsIHdlIGNyZWF0ZSBpdCBpbiB0aGUgcm9vdC4KKwkgKiBXZSBuZWVkIHRoZSByb290IGRlbnRyeSB0byBkbyB0aGlzLCB3aGljaCBpcyBpbiB0aGUgc3VwZXIgCisJICogYmxvY2suIEEgcG9pbnRlciB0byB0aGF0IGlzIGluIHRoZSBzdHJ1Y3QgdmZzbW91bnQgdGhhdCB3ZQorCSAqIGhhdmUgYXJvdW5kLgorCSAqLworCWlmICghcGFyZW50ICkgeworCQlpZiAodXNiZnNfbW91bnQgJiYgdXNiZnNfbW91bnQtPm1udF9zYikgeworCQkJcGFyZW50ID0gdXNiZnNfbW91bnQtPm1udF9zYi0+c19yb290OworCQl9CisJfQorCisJaWYgKCFwYXJlbnQpIHsKKwkJZGJnKCJBaCEgY2FuIG5vdCBmaW5kIGEgcGFyZW50ISIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkqZGVudHJ5ID0gTlVMTDsKKwlkb3duKCZwYXJlbnQtPmRfaW5vZGUtPmlfc2VtKTsKKwkqZGVudHJ5ID0gZ2V0X2RlbnRyeSAocGFyZW50LCBuYW1lKTsKKwlpZiAoIUlTX0VSUihkZW50cnkpKSB7CisJCWlmICgobW9kZSAmIFNfSUZNVCkgPT0gU19JRkRJUikKKwkJCWVycm9yID0gdXNiZnNfbWtkaXIgKHBhcmVudC0+ZF9pbm9kZSwgKmRlbnRyeSwgbW9kZSk7CisJCWVsc2UgCisJCQllcnJvciA9IHVzYmZzX2NyZWF0ZSAocGFyZW50LT5kX2lub2RlLCAqZGVudHJ5LCBtb2RlKTsKKwl9IGVsc2UKKwkJZXJyb3IgPSBQVFJfRVJSKGRlbnRyeSk7CisJdXAoJnBhcmVudC0+ZF9pbm9kZS0+aV9zZW0pOworCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZnNfY3JlYXRlX2ZpbGUgKGNvbnN0IGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlLAorCQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwgdm9pZCAqZGF0YSwKKwkJCQkgICAgICBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzLAorCQkJCSAgICAgIHVpZF90IHVpZCwgZ2lkX3QgZ2lkKQoreworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKwlpbnQgZXJyb3I7CisKKwlkYmcoImNyZWF0aW5nIGZpbGUgJyVzJyIsbmFtZSk7CisKKwllcnJvciA9IGZzX2NyZWF0ZV9ieV9uYW1lIChuYW1lLCBtb2RlLCBwYXJlbnQsICZkZW50cnkpOworCWlmIChlcnJvcikgeworCQlkZW50cnkgPSBOVUxMOworCX0gZWxzZSB7CisJCWlmIChkZW50cnktPmRfaW5vZGUpIHsKKwkJCWlmIChkYXRhKQorCQkJCWRlbnRyeS0+ZF9pbm9kZS0+dS5nZW5lcmljX2lwID0gZGF0YTsKKwkJCWlmIChmb3BzKQorCQkJCWRlbnRyeS0+ZF9pbm9kZS0+aV9mb3AgPSBmb3BzOworCQkJZGVudHJ5LT5kX2lub2RlLT5pX3VpZCA9IHVpZDsKKwkJCWRlbnRyeS0+ZF9pbm9kZS0+aV9naWQgPSBnaWQ7CisJCX0KKwl9CisKKwlyZXR1cm4gZGVudHJ5OworfQorCitzdGF0aWMgdm9pZCBmc19yZW1vdmVfZmlsZSAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBkZW50cnkgKnBhcmVudCA9IGRlbnRyeS0+ZF9wYXJlbnQ7CisJCisJaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+ZF9pbm9kZSkKKwkJcmV0dXJuOworCisJZG93bigmcGFyZW50LT5kX2lub2RlLT5pX3NlbSk7CisJaWYgKHVzYmZzX3Bvc2l0aXZlKGRlbnRyeSkpIHsKKwkJaWYgKGRlbnRyeS0+ZF9pbm9kZSkgeworCQkJaWYgKFNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQorCQkJCXVzYmZzX3JtZGlyKHBhcmVudC0+ZF9pbm9kZSwgZGVudHJ5KTsKKwkJCWVsc2UKKwkJCQl1c2Jmc191bmxpbmsocGFyZW50LT5kX2lub2RlLCBkZW50cnkpOworCQlkcHV0KGRlbnRyeSk7CisJCX0KKwl9CisJdXAoJnBhcmVudC0+ZF9pbm9kZS0+aV9zZW0pOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqdXNiX2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKKwlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhKQoreworCXJldHVybiBnZXRfc2Jfc2luZ2xlKGZzX3R5cGUsIGZsYWdzLCBkYXRhLCB1c2Jmc19maWxsX3N1cGVyKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHVzYl9mc190eXBlID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJ1c2JmcyIsCisJLmdldF9zYiA9CXVzYl9nZXRfc2IsCisJLmtpbGxfc2IgPQlraWxsX2xpdHRlcl9zdXBlciwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGNyZWF0ZV9zcGVjaWFsX2ZpbGVzICh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKKwlpbnQgcmV0dmFsOworCisJLyogdGhlIHNpbXBsZV9waW5fZnMgY2FsbHMgd2lsbCBjYWxsIHJlbW91bnQgd2l0aCBubyBvcHRpb25zCisJICogd2l0aG91dCB0aGlzIGZsYWcgdGhhdCB3b3VsZCBvdmVyd3JpdGUgdGhlIHJlYWwgbW91bnQgb3B0aW9ucyAoaWYgYW55KQorCSAqLworCWlnbm9yZV9tb3VudCA9IDE7CisKKwkvKiBjcmVhdGUgdGhlIGRldmljZXMgc3BlY2lhbCBmaWxlICovCisJcmV0dmFsID0gc2ltcGxlX3Bpbl9mcygidXNiZnMiLCAmdXNiZnNfbW91bnQsICZ1c2Jmc19tb3VudF9jb3VudCk7CisJaWYgKHJldHZhbCkgeworCQllcnIgKCJVbmFibGUgdG8gZ2V0IHVzYmZzIG1vdW50Iik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZ25vcmVfbW91bnQgPSAwOworCisJcGFyZW50ID0gdXNiZnNfbW91bnQtPm1udF9zYi0+c19yb290OworCWRldmljZXNfdXNiZnNfZGVudHJ5ID0gZnNfY3JlYXRlX2ZpbGUgKCJkZXZpY2VzIiwKKwkJCQkJICAgICAgIGxpc3Rtb2RlIHwgU19JRlJFRywgcGFyZW50LAorCQkJCQkgICAgICAgTlVMTCwgJnVzYmZzX2RldmljZXNfZm9wcywKKwkJCQkJICAgICAgIGxpc3R1aWQsIGxpc3RnaWQpOworCWlmIChkZXZpY2VzX3VzYmZzX2RlbnRyeSA9PSBOVUxMKSB7CisJCWVyciAoIlVuYWJsZSB0byBjcmVhdGUgZGV2aWNlcyB1c2JmcyBmaWxlIik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3JfY2xlYW5fbW91bnRzOworCX0KKworCWdvdG8gZXhpdDsKKwkKK2Vycm9yX2NsZWFuX21vdW50czoKKwlzaW1wbGVfcmVsZWFzZV9mcygmdXNiZnNfbW91bnQsICZ1c2Jmc19tb3VudF9jb3VudCk7CitleGl0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9zcGVjaWFsX2ZpbGVzICh2b2lkKQoreworCWlmIChkZXZpY2VzX3VzYmZzX2RlbnRyeSkKKwkJZnNfcmVtb3ZlX2ZpbGUgKGRldmljZXNfdXNiZnNfZGVudHJ5KTsKKwlkZXZpY2VzX3VzYmZzX2RlbnRyeSA9IE5VTEw7CisJc2ltcGxlX3JlbGVhc2VfZnMoJnVzYmZzX21vdW50LCAmdXNiZnNfbW91bnRfY291bnQpOworfQorCit2b2lkIHVzYmZzX3VwZGF0ZV9zcGVjaWFsICh2b2lkKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlpZiAoZGV2aWNlc191c2Jmc19kZW50cnkpIHsKKwkJaW5vZGUgPSBkZXZpY2VzX3VzYmZzX2RlbnRyeS0+ZF9pbm9kZTsKKwkJaWYgKGlub2RlKQorCQkJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCX0KK30KKwordm9pZCB1c2Jmc19hZGRfYnVzKHN0cnVjdCB1c2JfYnVzICpidXMpCit7CisJc3RydWN0IGRlbnRyeSAqcGFyZW50OworCWNoYXIgbmFtZVs4XTsKKwlpbnQgcmV0dmFsOworCisJLyogY3JlYXRlIHRoZSBzcGVjaWFsIGZpbGVzIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGJ1cyBhZGRlZCAqLworCWlmIChudW1fYnVzZXMgPT0gMCkgeworCQlyZXR2YWwgPSBjcmVhdGVfc3BlY2lhbF9maWxlcygpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuOworCX0KKwkrK251bV9idXNlczsKKworCXNwcmludGYgKG5hbWUsICIlMDNkIiwgYnVzLT5idXNudW0pOworCisJcGFyZW50ID0gdXNiZnNfbW91bnQtPm1udF9zYi0+c19yb290OworCWJ1cy0+dXNiZnNfZGVudHJ5ID0gZnNfY3JlYXRlX2ZpbGUgKG5hbWUsIGJ1c21vZGUgfCBTX0lGRElSLCBwYXJlbnQsCisJCQkJCSAgICBidXMsIE5VTEwsIGJ1c3VpZCwgYnVzZ2lkKTsKKwlpZiAoYnVzLT51c2Jmc19kZW50cnkgPT0gTlVMTCkgeworCQllcnIgKCJlcnJvciBjcmVhdGluZyB1c2JmcyBidXMgZW50cnkiKTsKKwkJcmV0dXJuOworCX0KKworCXVzYmZzX3VwZGF0ZV9zcGVjaWFsKCk7CisJdXNiZnNfY29ubl9kaXNjX2V2ZW50KCk7Cit9CisKK3ZvaWQgdXNiZnNfcmVtb3ZlX2J1cyhzdHJ1Y3QgdXNiX2J1cyAqYnVzKQoreworCWlmIChidXMtPnVzYmZzX2RlbnRyeSkgeworCQlmc19yZW1vdmVfZmlsZSAoYnVzLT51c2Jmc19kZW50cnkpOworCQlidXMtPnVzYmZzX2RlbnRyeSA9IE5VTEw7CisJfQorCisJLS1udW1fYnVzZXM7CisJaWYgKG51bV9idXNlcyA8PSAwKSB7CisJCXJlbW92ZV9zcGVjaWFsX2ZpbGVzKCk7CisJCW51bV9idXNlcyA9IDA7CisJfQorCisJdXNiZnNfdXBkYXRlX3NwZWNpYWwoKTsKKwl1c2Jmc19jb25uX2Rpc2NfZXZlbnQoKTsKK30KKwordm9pZCB1c2Jmc19hZGRfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJY2hhciBuYW1lWzhdOworCWludCBpOworCWludCBpX3NpemU7CisKKwlzcHJpbnRmIChuYW1lLCAiJTAzZCIsIGRldi0+ZGV2bnVtKTsKKwlkZXYtPnVzYmZzX2RlbnRyeSA9IGZzX2NyZWF0ZV9maWxlIChuYW1lLCBkZXZtb2RlIHwgU19JRlJFRywKKwkJCQkJICAgIGRldi0+YnVzLT51c2Jmc19kZW50cnksIGRldiwKKwkJCQkJICAgICZ1c2Jmc19kZXZpY2VfZmlsZV9vcGVyYXRpb25zLAorCQkJCQkgICAgZGV2dWlkLCBkZXZnaWQpOworCWlmIChkZXYtPnVzYmZzX2RlbnRyeSA9PSBOVUxMKSB7CisJCWVyciAoImVycm9yIGNyZWF0aW5nIHVzYmZzIGRldmljZSBlbnRyeSIpOworCQlyZXR1cm47CisJfQorCisJLyogU2V0IHRoZSBzaXplIG9mIHRoZSBkZXZpY2UncyBmaWxlIHRvIGJlCisJICogZXF1YWwgdG8gdGhlIHNpemUgb2YgdGhlIGRldmljZSBkZXNjcmlwdG9ycy4gKi8KKwlpX3NpemUgPSBzaXplb2YgKHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IpOworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOyArK2kpIHsKKwkJc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvciAqY29uZmlnID0KKwkJCShzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yICopZGV2LT5yYXdkZXNjcmlwdG9yc1tpXTsKKwkJaV9zaXplICs9IGxlMTZfdG9fY3B1KGNvbmZpZy0+d1RvdGFsTGVuZ3RoKTsKKwl9CisJaWYgKGRldi0+dXNiZnNfZGVudHJ5LT5kX2lub2RlKQorCQlkZXYtPnVzYmZzX2RlbnRyeS0+ZF9pbm9kZS0+aV9zaXplID0gaV9zaXplOworCisJdXNiZnNfdXBkYXRlX3NwZWNpYWwoKTsKKwl1c2Jmc19jb25uX2Rpc2NfZXZlbnQoKTsKK30KKwordm9pZCB1c2Jmc19yZW1vdmVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldl9zdGF0ZSAqZHM7CisJc3RydWN0IHNpZ2luZm8gc2luZm87CisKKwlpZiAoZGV2LT51c2Jmc19kZW50cnkpIHsKKwkJZnNfcmVtb3ZlX2ZpbGUgKGRldi0+dXNiZnNfZGVudHJ5KTsKKwkJZGV2LT51c2Jmc19kZW50cnkgPSBOVUxMOworCX0KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRldi0+ZmlsZWxpc3QpKSB7CisJCWRzID0gbGlzdF9lbnRyeShkZXYtPmZpbGVsaXN0Lm5leHQsIHN0cnVjdCBkZXZfc3RhdGUsIGxpc3QpOworCQl3YWtlX3VwX2FsbCgmZHMtPndhaXQpOworCQlsaXN0X2RlbF9pbml0KCZkcy0+bGlzdCk7CisJCWlmIChkcy0+ZGlzY3NpZ25yKSB7CisJCQlzaW5mby5zaV9zaWdubyA9IFNJR1BJUEU7CisJCQlzaW5mby5zaV9lcnJubyA9IEVQSVBFOworCQkJc2luZm8uc2lfY29kZSA9IFNJX0FTWU5DSU87CisJCQlzaW5mby5zaV9hZGRyID0gZHMtPmRpc2Njb250ZXh0OworCQkJc2VuZF9zaWdfaW5mbyhkcy0+ZGlzY3NpZ25yLCAmc2luZm8sIGRzLT5kaXNjdGFzayk7CisJCX0KKwl9CisJdXNiZnNfdXBkYXRlX3NwZWNpYWwoKTsKKwl1c2Jmc19jb25uX2Rpc2NfZXZlbnQoKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnVzYmRpciA9IE5VTEw7CisKK2ludCBfX2luaXQgdXNiZnNfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnVzYmZzX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHZhbCA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJnVzYl9mc190eXBlKTsKKwlpZiAocmV0dmFsKSB7CisJCXVzYl9kZXJlZ2lzdGVyKCZ1c2Jmc19kcml2ZXIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qIGNyZWF0ZSBtb3VudCBwb2ludCBmb3IgdXNiZnMgKi8KKwl1c2JkaXIgPSBwcm9jX21rZGlyKCJ1c2IiLCBwcm9jX2J1cyk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB1c2Jmc19jbGVhbnVwKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnVzYmZzX2RyaXZlcik7CisJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZ1c2JfZnNfdHlwZSk7CisJaWYgKHVzYmRpcikKKwkJcmVtb3ZlX3Byb2NfZW50cnkoInVzYiIsIHByb2NfYnVzKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGJkYjM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMKQEAgLTAsMCArMSwxNDgwIEBACisvKgorICogbWVzc2FnZS5jIC0gc3luY2hyb25vdXMgbWVzc2FnZSBoYW5kbGluZworICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKwkjZGVmaW5lIERFQlVHCisjZWxzZQorCSN1bmRlZiBERUJVRworI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4JLyogZm9yIHNjYXR0ZXJsaXN0IG1hY3JvcyAqLworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaW5jbHVkZSAiaGNkLmgiCS8qIGZvciB1c2Jjb3JlIGludGVybmFscyAqLworI2luY2x1ZGUgInVzYi5oIgorCitzdGF0aWMgdm9pZCB1c2JfYXBpX2Jsb2NraW5nX2NvbXBsZXRpb24oc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwljb21wbGV0ZSgoc3RydWN0IGNvbXBsZXRpb24gKil1cmItPmNvbnRleHQpOworfQorCisKK3N0YXRpYyB2b2lkIHRpbWVvdXRfa2lsbCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHVyYgkqdXJiID0gKHN0cnVjdCB1cmIgKikgZGF0YTsKKworCXVzYl91bmxpbmtfdXJiKHVyYik7Cit9CisKKy8vIFN0YXJ0cyB1cmIgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uIG9yIHRpbWVvdXQKKy8vIG5vdGUgdGhhdCB0aGlzIGNhbGwgaXMgTk9UIGludGVycnVwdGlibGUsIHdoaWxlCisvLyBtYW55IGRldmljZSBkcml2ZXIgaS9vIHJlcXVlc3RzIHNob3VsZCBiZSBpbnRlcnJ1cHRpYmxlCitzdGF0aWMgaW50IHVzYl9zdGFydF93YWl0X3VyYihzdHJ1Y3QgdXJiICp1cmIsIGludCB0aW1lb3V0LCBpbnQqIGFjdHVhbF9sZW5ndGgpCit7IAorCXN0cnVjdCBjb21wbGV0aW9uCWRvbmU7CisJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7CisJaW50CQkJc3RhdHVzOworCisJaW5pdF9jb21wbGV0aW9uKCZkb25lKTsgCQorCXVyYi0+Y29udGV4dCA9ICZkb25lOworCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0FTWU5DX1VOTElOSzsKKwl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX05PSU8pOworCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCWlmICh0aW1lb3V0ID4gMCkgeworCQkJaW5pdF90aW1lcigmdGltZXIpOworCQkJdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOworCQkJdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXVyYjsKKwkJCXRpbWVyLmZ1bmN0aW9uID0gdGltZW91dF9raWxsOworCQkJLyogZ3JyLiAgdGltZW91dCBfc2hvdWxkXyBpbmNsdWRlIHN1Ym1pdCBkZWxheXMuICovCisJCQlhZGRfdGltZXIoJnRpbWVyKTsKKwkJfQorCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkb25lKTsKKwkJc3RhdHVzID0gdXJiLT5zdGF0dXM7CisJCS8qIG5vdGU6ICBIQ0RzIHJldHVybiBFVElNRURPVVQgZm9yIG90aGVyIHJlYXNvbnMgdG9vICovCisJCWlmIChzdGF0dXMgPT0gLUVDT05OUkVTRVQpIHsKKwkJCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsCisJCQkJIiVzIHRpbWVkIG91dCBvbiBlcCVkJXMgbGVuPSVkLyVkXG4iLAorCQkJCWN1cnJlbnQtPmNvbW0sCisJCQkJdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLAorCQkJCXVzYl9waXBlaW4odXJiLT5waXBlKSA/ICJpbiIgOiAib3V0IiwKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGgsCisJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoCisJCQkJKTsKKwkJCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAwKQorCQkJCXN0YXR1cyA9IDA7CisJCQllbHNlCisJCQkJc3RhdHVzID0gLUVUSU1FRE9VVDsKKwkJfQorCQlpZiAodGltZW91dCA+IDApCisJCQlkZWxfdGltZXJfc3luYygmdGltZXIpOworCX0KKworCWlmIChhY3R1YWxfbGVuZ3RoKQorCQkqYWN0dWFsX2xlbmd0aCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwl1c2JfZnJlZV91cmIodXJiKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLy8gcmV0dXJucyBzdGF0dXMgKG5lZ2F0aXZlKSBvciBsZW5ndGggKHBvc2l0aXZlKQorc3RhdGljIGludCB1c2JfaW50ZXJuYWxfY29udHJvbF9tc2coc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCisJCQkJICAgIHVuc2lnbmVkIGludCBwaXBlLCAKKwkJCQkgICAgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY21kLAorCQkJCSAgICB2b2lkICpkYXRhLCBpbnQgbGVuLCBpbnQgdGltZW91dCkKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IHJldHY7CisJaW50IGxlbmd0aDsKKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX05PSU8pOworCWlmICghdXJiKQorCQlyZXR1cm4gLUVOT01FTTsKKyAgCisJdXNiX2ZpbGxfY29udHJvbF91cmIodXJiLCB1c2JfZGV2LCBwaXBlLCAodW5zaWduZWQgY2hhciAqKWNtZCwgZGF0YSwKKwkJCSAgICAgbGVuLCB1c2JfYXBpX2Jsb2NraW5nX2NvbXBsZXRpb24sIE5VTEwpOworCisJcmV0diA9IHVzYl9zdGFydF93YWl0X3VyYih1cmIsIHRpbWVvdXQsICZsZW5ndGgpOworCWlmIChyZXR2IDwgMCkKKwkJcmV0dXJuIHJldHY7CisJZWxzZQorCQlyZXR1cm4gbGVuZ3RoOworfQorCisvKioKKyAqCXVzYl9jb250cm9sX21zZyAtIEJ1aWxkcyBhIGNvbnRyb2wgdXJiLCBzZW5kcyBpdCBvZmYgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uCisgKglAZGV2OiBwb2ludGVyIHRvIHRoZSB1c2IgZGV2aWNlIHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG8KKyAqCUBwaXBlOiBlbmRwb2ludCAicGlwZSIgdG8gc2VuZCB0aGUgbWVzc2FnZSB0bworICoJQHJlcXVlc3Q6IFVTQiBtZXNzYWdlIHJlcXVlc3QgdmFsdWUKKyAqCUByZXF1ZXN0dHlwZTogVVNCIG1lc3NhZ2UgcmVxdWVzdCB0eXBlIHZhbHVlCisgKglAdmFsdWU6IFVTQiBtZXNzYWdlIHZhbHVlCisgKglAaW5kZXg6IFVTQiBtZXNzYWdlIGluZGV4IHZhbHVlCisgKglAZGF0YTogcG9pbnRlciB0byB0aGUgZGF0YSB0byBzZW5kCisgKglAc2l6ZTogbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBkYXRhIHRvIHNlbmQKKyAqCUB0aW1lb3V0OiB0aW1lIGluIG1zZWNzIHRvIHdhaXQgZm9yIHRoZSBtZXNzYWdlIHRvIGNvbXBsZXRlIGJlZm9yZQorICoJCXRpbWluZyBvdXQgKGlmIDAgdGhlIHdhaXQgaXMgZm9yZXZlcikKKyAqCUNvbnRleHQ6ICFpbl9pbnRlcnJ1cHQgKCkKKyAqCisgKglUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgc2ltcGxlIGNvbnRyb2wgbWVzc2FnZSB0byBhIHNwZWNpZmllZCBlbmRwb2ludAorICoJYW5kIHdhaXRzIGZvciB0aGUgbWVzc2FnZSB0byBjb21wbGV0ZSwgb3IgdGltZW91dC4KKyAqCQorICoJSWYgc3VjY2Vzc2Z1bCwgaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkLCBvdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCisgKgorICoJRG9uJ3QgdXNlIHRoaXMgZnVuY3Rpb24gZnJvbSB3aXRoaW4gYW4gaW50ZXJydXB0IGNvbnRleHQsIGxpa2UgYQorICoJYm90dG9tIGhhbGYgaGFuZGxlci4gIElmIHlvdSBuZWVkIGFuIGFzeW5jaHJvbm91cyBtZXNzYWdlLCBvciBuZWVkIHRvIHNlbmQKKyAqCWEgbWVzc2FnZSBmcm9tIHdpdGhpbiBpbnRlcnJ1cHQgY29udGV4dCwgdXNlIHVzYl9zdWJtaXRfdXJiKCkKKyAqICAgICAgSWYgYSB0aHJlYWQgaW4geW91ciBkcml2ZXIgdXNlcyB0aGlzIGNhbGwsIG1ha2Ugc3VyZSB5b3VyIGRpc2Nvbm5lY3QoKQorICogICAgICBtZXRob2QgY2FuIHdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlLiAgU2luY2UgeW91IGRvbid0IGhhdmUgYSBoYW5kbGUgb24KKyAqICAgICAgdGhlIFVSQiB1c2VkLCB5b3UgY2FuJ3QgY2FuY2VsIHRoZSByZXF1ZXN0LgorICovCitpbnQgdXNiX2NvbnRyb2xfbXNnKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlLCBfX3U4IHJlcXVlc3QsIF9fdTggcmVxdWVzdHR5cGUsCisJCQkgX191MTYgdmFsdWUsIF9fdTE2IGluZGV4LCB2b2lkICpkYXRhLCBfX3UxNiBzaXplLCBpbnQgdGltZW91dCkKK3sKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpkciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpLCBHRlBfTk9JTyk7CisJaW50IHJldDsKKwkKKwlpZiAoIWRyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRyLT5iUmVxdWVzdFR5cGU9IHJlcXVlc3R0eXBlOworCWRyLT5iUmVxdWVzdCA9IHJlcXVlc3Q7CisJZHItPndWYWx1ZSA9IGNwdV90b19sZTE2cCgmdmFsdWUpOworCWRyLT53SW5kZXggPSBjcHVfdG9fbGUxNnAoJmluZGV4KTsKKwlkci0+d0xlbmd0aCA9IGNwdV90b19sZTE2cCgmc2l6ZSk7CisKKwkvL2RiZygidXNiX2NvbnRyb2xfbXNnIik7CQorCisJcmV0ID0gdXNiX2ludGVybmFsX2NvbnRyb2xfbXNnKGRldiwgcGlwZSwgZHIsIGRhdGEsIHNpemUsIHRpbWVvdXQpOworCisJa2ZyZWUoZHIpOworCisJcmV0dXJuIHJldDsKK30KKworCisvKioKKyAqCXVzYl9idWxrX21zZyAtIEJ1aWxkcyBhIGJ1bGsgdXJiLCBzZW5kcyBpdCBvZmYgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uCisgKglAdXNiX2RldjogcG9pbnRlciB0byB0aGUgdXNiIGRldmljZSB0byBzZW5kIHRoZSBtZXNzYWdlIHRvCisgKglAcGlwZTogZW5kcG9pbnQgInBpcGUiIHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG8KKyAqCUBkYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQKKyAqCUBsZW46IGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZGF0YSB0byBzZW5kCisgKglAYWN0dWFsX2xlbmd0aDogcG9pbnRlciB0byBhIGxvY2F0aW9uIHRvIHB1dCB0aGUgYWN0dWFsIGxlbmd0aCB0cmFuc2ZlcnJlZCBpbiBieXRlcworICoJQHRpbWVvdXQ6IHRpbWUgaW4gbXNlY3MgdG8gd2FpdCBmb3IgdGhlIG1lc3NhZ2UgdG8gY29tcGxldGUgYmVmb3JlCisgKgkJdGltaW5nIG91dCAoaWYgMCB0aGUgd2FpdCBpcyBmb3JldmVyKQorICoJQ29udGV4dDogIWluX2ludGVycnVwdCAoKQorICoKKyAqCVRoaXMgZnVuY3Rpb24gc2VuZHMgYSBzaW1wbGUgYnVsayBtZXNzYWdlIHRvIGEgc3BlY2lmaWVkIGVuZHBvaW50CisgKglhbmQgd2FpdHMgZm9yIHRoZSBtZXNzYWdlIHRvIGNvbXBsZXRlLCBvciB0aW1lb3V0LgorICoJCisgKglJZiBzdWNjZXNzZnVsLCBpdCByZXR1cm5zIDAsIG90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KKyAqCVRoZSBudW1iZXIgb2YgYWN0dWFsIGJ5dGVzIHRyYW5zZmVycmVkIHdpbGwgYmUgc3RvcmVkIGluIHRoZSAKKyAqCWFjdHVhbF9sZW5ndGggcGFyYW1hdGVyLgorICoKKyAqCURvbid0IHVzZSB0aGlzIGZ1bmN0aW9uIGZyb20gd2l0aGluIGFuIGludGVycnVwdCBjb250ZXh0LCBsaWtlIGEKKyAqCWJvdHRvbSBoYWxmIGhhbmRsZXIuICBJZiB5b3UgbmVlZCBhbiBhc3luY2hyb25vdXMgbWVzc2FnZSwgb3IgbmVlZCB0bworICoJc2VuZCBhIG1lc3NhZ2UgZnJvbSB3aXRoaW4gaW50ZXJydXB0IGNvbnRleHQsIHVzZSB1c2Jfc3VibWl0X3VyYigpCisgKiAgICAgIElmIGEgdGhyZWFkIGluIHlvdXIgZHJpdmVyIHVzZXMgdGhpcyBjYWxsLCBtYWtlIHN1cmUgeW91ciBkaXNjb25uZWN0KCkKKyAqICAgICAgbWV0aG9kIGNhbiB3YWl0IGZvciBpdCB0byBjb21wbGV0ZS4gIFNpbmNlIHlvdSBkb24ndCBoYXZlIGEgaGFuZGxlIG9uCisgKiAgICAgIHRoZSBVUkIgdXNlZCwgeW91IGNhbid0IGNhbmNlbCB0aGUgcmVxdWVzdC4KKyAqLworaW50IHVzYl9idWxrX21zZyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgdW5zaWduZWQgaW50IHBpcGUsIAorCQkJdm9pZCAqZGF0YSwgaW50IGxlbiwgaW50ICphY3R1YWxfbGVuZ3RoLCBpbnQgdGltZW91dCkKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwlpZiAobGVuIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl1cmI9dXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVyYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHVzYl9kZXYsIHBpcGUsIGRhdGEsIGxlbiwKKwkJCSAgdXNiX2FwaV9ibG9ja2luZ19jb21wbGV0aW9uLCBOVUxMKTsKKworCXJldHVybiB1c2Jfc3RhcnRfd2FpdF91cmIodXJiLCB0aW1lb3V0LCBhY3R1YWxfbGVuZ3RoKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgc2dfY2xlYW4gKHN0cnVjdCB1c2Jfc2dfcmVxdWVzdCAqaW8pCit7CisJaWYgKGlvLT51cmJzKSB7CisJCXdoaWxlIChpby0+ZW50cmllcy0tKQorCQkJdXNiX2ZyZWVfdXJiIChpby0+dXJicyBbaW8tPmVudHJpZXNdKTsKKwkJa2ZyZWUgKGlvLT51cmJzKTsKKwkJaW8tPnVyYnMgPSBOVUxMOworCX0KKwlpZiAoaW8tPmRldi0+ZGV2LmRtYV9tYXNrICE9IE5VTEwpCisJCXVzYl9idWZmZXJfdW5tYXBfc2cgKGlvLT5kZXYsIGlvLT5waXBlLCBpby0+c2csIGlvLT5uZW50cyk7CisJaW8tPmRldiA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHNnX2NvbXBsZXRlIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2dfcmVxdWVzdAkqaW8gPSAoc3RydWN0IHVzYl9zZ19yZXF1ZXN0ICopIHVyYi0+Y29udGV4dDsKKworCXNwaW5fbG9jayAoJmlvLT5sb2NrKTsKKworCS8qIEluIDIuNSB3ZSByZXF1aXJlIGhjZHMnIGVuZHBvaW50IHF1ZXVlcyBub3QgdG8gcHJvZ3Jlc3MgYWZ0ZXIgZmF1bHQKKwkgKiByZXBvcnRzLCB1bnRpbCB0aGUgY29tcGxldGlvbiBjYWxsYmFjayAodGhpcyEpIHJldHVybnMuICBUaGF0IGxldHMKKwkgKiBkZXZpY2UgZHJpdmVyIGNvZGUgKGxpa2UgdGhpcyByb3V0aW5lKSB1bmxpbmsgcXVldWVkIHVyYnMgZmlyc3QsCisJICogaWYgaXQgbmVlZHMgdG8sIHNpbmNlIHRoZSBIQyB3b24ndCB3b3JrIG9uIHRoZW0gYXQgYWxsLiAgU28gaXQncworCSAqIG5vdCBwb3NzaWJsZSBmb3IgcGFnZSBOKzEgdG8gb3ZlcndyaXRlIHBhZ2UgTiwgYW5kIHNvIG9uLgorCSAqCisJICogVGhhdCdzIG9ubHkgZm9yICJoYXJkIiBmYXVsdHM7ICJzb2Z0IiBmYXVsdHMgKHVubGlua3MpIHNvbWV0aW1lcworCSAqIGNvbXBsZXRlIGJlZm9yZSB0aGUgSENEIGNhbiBnZXQgcmVxdWVzdHMgYXdheSBmcm9tIGhhcmR3YXJlLAorCSAqIHRob3VnaCBuZXZlciBkdXJpbmcgY2xlYW51cCBhZnRlciBhIGhhcmQgZmF1bHQuCisJICovCisJaWYgKGlvLT5zdGF0dXMKKwkJCSYmIChpby0+c3RhdHVzICE9IC1FQ09OTlJFU0VUCisJCQkJfHwgdXJiLT5zdGF0dXMgIT0gLUVDT05OUkVTRVQpCisJCQkmJiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJZGV2X2VyciAoaW8tPmRldi0+YnVzLT5jb250cm9sbGVyLAorCQkJImRldiAlcyBlcCVkJXMgc2NhdHRlcmxpc3QgZXJyb3IgJWQvJWRcbiIsCisJCQlpby0+ZGV2LT5kZXZwYXRoLAorCQkJdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKSwKKwkJCXVzYl9waXBlaW4gKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIsCisJCQl1cmItPnN0YXR1cywgaW8tPnN0YXR1cyk7CisJCS8vIEJVRyAoKTsKKwl9CisKKwlpZiAoaW8tPnN0YXR1cyA9PSAwICYmIHVyYi0+c3RhdHVzICYmIHVyYi0+c3RhdHVzICE9IC1FQ09OTlJFU0VUKSB7CisJCWludAkJaSwgZm91bmQsIHN0YXR1czsKKworCQlpby0+c3RhdHVzID0gdXJiLT5zdGF0dXM7CisKKwkJLyogdGhlIHByZXZpb3VzIHVyYnMsIGFuZCB0aGlzIG9uZSwgY29tcGxldGVkIGFscmVhZHkuCisJCSAqIHVubGluayBwZW5kaW5nIHVyYnMgc28gdGhleSB3b24ndCByeC90eCBiYWQgZGF0YS4KKwkJICogY2FyZWZ1bDogdW5saW5rIGNhbiBzb21ldGltZXMgYmUgc3luY2hyb25vdXMuLi4KKwkJICovCisJCXNwaW5fdW5sb2NrICgmaW8tPmxvY2spOworCQlmb3IgKGkgPSAwLCBmb3VuZCA9IDA7IGkgPCBpby0+ZW50cmllczsgaSsrKSB7CisJCQlpZiAoIWlvLT51cmJzIFtpXSB8fCAhaW8tPnVyYnMgW2ldLT5kZXYpCisJCQkJY29udGludWU7CisJCQlpZiAoZm91bmQpIHsKKwkJCQlzdGF0dXMgPSB1c2JfdW5saW5rX3VyYiAoaW8tPnVyYnMgW2ldKTsKKwkJCQlpZiAoc3RhdHVzICE9IC1FSU5QUk9HUkVTUyAmJiBzdGF0dXMgIT0gLUVCVVNZKQorCQkJCQlkZXZfZXJyICgmaW8tPmRldi0+ZGV2LAorCQkJCQkJIiVzLCB1bmxpbmsgLS0+ICVkXG4iLAorCQkJCQkJX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQkJfSBlbHNlIGlmICh1cmIgPT0gaW8tPnVyYnMgW2ldKQorCQkJCWZvdW5kID0gMTsKKwkJfQorCQlzcGluX2xvY2sgKCZpby0+bG9jayk7CisJfQorCXVyYi0+ZGV2ID0gTlVMTDsKKworCS8qIG9uIHRoZSBsYXN0IGNvbXBsZXRpb24sIHNpZ25hbCB1c2Jfc2dfd2FpdCgpICovCisJaW8tPmJ5dGVzICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwlpby0+Y291bnQtLTsKKwlpZiAoIWlvLT5jb3VudCkKKwkJY29tcGxldGUgKCZpby0+Y29tcGxldGUpOworCisJc3Bpbl91bmxvY2sgKCZpby0+bG9jayk7Cit9CisKKworLyoqCisgKiB1c2Jfc2dfaW5pdCAtIGluaXRpYWxpemVzIHNjYXR0ZXJsaXN0LWJhc2VkIGJ1bGsvaW50ZXJydXB0IEkvTyByZXF1ZXN0CisgKiBAaW86IHJlcXVlc3QgYmxvY2sgYmVpbmcgaW5pdGlhbGl6ZWQuICB1bnRpbCB1c2Jfc2dfd2FpdCgpIHJldHVybnMsCisgKgl0cmVhdCB0aGlzIGFzIGEgcG9pbnRlciB0byBhbiBvcGFxdWUgYmxvY2sgb2YgbWVtb3J5LAorICogQGRldjogdGhlIHVzYiBkZXZpY2UgdGhhdCB3aWxsIHNlbmQgb3IgcmVjZWl2ZSB0aGUgZGF0YQorICogQHBpcGU6IGVuZHBvaW50ICJwaXBlIiB1c2VkIHRvIHRyYW5zZmVyIHRoZSBkYXRhCisgKiBAcGVyaW9kOiBwb2xsaW5nIHJhdGUgZm9yIGludGVycnVwdCBlbmRwb2ludHMsIGluIGZyYW1lcyBvcgorICogCShmb3IgaGlnaCBzcGVlZCBlbmRwb2ludHMpIG1pY3JvZnJhbWVzOyBpZ25vcmVkIGZvciBidWxrCisgKiBAc2c6IHNjYXR0ZXJsaXN0IGVudHJpZXMKKyAqIEBuZW50czogaG93IG1hbnkgZW50cmllcyBpbiB0aGUgc2NhdHRlcmxpc3QKKyAqIEBsZW5ndGg6IGhvdyBtYW55IGJ5dGVzIHRvIHNlbmQgZnJvbSB0aGUgc2NhdHRlcmxpc3QsIG9yIHplcm8gdG8KKyAqIAlzZW5kIGV2ZXJ5IGJ5dGUgaWRlbnRpZmllZCBpbiB0aGUgbGlzdC4KKyAqIEBtZW1fZmxhZ3M6IFNMQUJfKiBmbGFncyBhZmZlY3RpbmcgbWVtb3J5IGFsbG9jYXRpb25zIGluIHRoaXMgY2FsbAorICoKKyAqIFJldHVybnMgemVybyBmb3Igc3VjY2VzcywgZWxzZSBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlLiAgVGhpcyBpbml0aWFsaXplcyBhCisgKiBzY2F0dGVyL2dhdGhlciByZXF1ZXN0LCBhbGxvY2F0aW5nIHJlc291cmNlcyBzdWNoIGFzIEkvTyBtYXBwaW5ncyBhbmQgdXJiCisgKiBtZW1vcnkgKGV4Y2VwdCBtYXliZSBtZW1vcnkgdXNlZCBieSBVU0IgY29udHJvbGxlciBkcml2ZXJzKS4KKyAqCisgKiBUaGUgcmVxdWVzdCBtdXN0IGJlIGlzc3VlZCB1c2luZyB1c2Jfc2dfd2FpdCgpLCB3aGljaCB3YWl0cyBmb3IgdGhlIEkvTyB0bworICogY29tcGxldGUgKG9yIHRvIGJlIGNhbmNlbGVkKSBhbmQgdGhlbiBjbGVhbnMgdXAgYWxsIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkKKyAqIHVzYl9zZ19pbml0KCkuCisgKgorICogVGhlIHJlcXVlc3QgbWF5IGJlIGNhbmNlbGVkIHdpdGggdXNiX3NnX2NhbmNlbCgpLCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyCisgKiB1c2Jfc2dfd2FpdCgpIGlzIGNhbGxlZC4KKyAqLworaW50IHVzYl9zZ19pbml0ICgKKwlzdHJ1Y3QgdXNiX3NnX3JlcXVlc3QJKmlvLAorCXN0cnVjdCB1c2JfZGV2aWNlCSpkZXYsCisJdW5zaWduZWQJCXBpcGUsIAorCXVuc2lnbmVkCQlwZXJpb2QsCisJc3RydWN0IHNjYXR0ZXJsaXN0CSpzZywKKwlpbnQJCQluZW50cywKKwlzaXplX3QJCQlsZW5ndGgsCisJaW50CQkJbWVtX2ZsYWdzCispCit7CisJaW50CQkJaTsKKwlpbnQJCQl1cmJfZmxhZ3M7CisJaW50CQkJZG1hOworCisJaWYgKCFpbyB8fCAhZGV2IHx8ICFzZworCQkJfHwgdXNiX3BpcGVjb250cm9sIChwaXBlKQorCQkJfHwgdXNiX3BpcGVpc29jIChwaXBlKQorCQkJfHwgbmVudHMgPD0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaW5pdCAoJmlvLT5sb2NrKTsKKwlpby0+ZGV2ID0gZGV2OworCWlvLT5waXBlID0gcGlwZTsKKwlpby0+c2cgPSBzZzsKKwlpby0+bmVudHMgPSBuZW50czsKKworCS8qIG5vdCBhbGwgaG9zdCBjb250cm9sbGVycyB1c2UgRE1BIChsaWtlIHRoZSBtYWluc3RyZWFtIHBjaSBvbmVzKTsKKwkgKiB0aGV5IGNhbiB1c2UgUElPIChzbDgxMSkgb3IgYmUgc29mdHdhcmUgb3ZlciBhbm90aGVyIHRyYW5zcG9ydC4KKwkgKi8KKwlkbWEgPSAoZGV2LT5kZXYuZG1hX21hc2sgIT0gTlVMTCk7CisJaWYgKGRtYSkKKwkJaW8tPmVudHJpZXMgPSB1c2JfYnVmZmVyX21hcF9zZyAoZGV2LCBwaXBlLCBzZywgbmVudHMpOworCWVsc2UKKwkJaW8tPmVudHJpZXMgPSBuZW50czsKKworCS8qIGluaXRpYWxpemUgYWxsIHRoZSB1cmJzIHdlJ2xsIHVzZSAqLworCWlmIChpby0+ZW50cmllcyA8PSAwKQorCQlyZXR1cm4gaW8tPmVudHJpZXM7CisKKwlpby0+Y291bnQgPSBpby0+ZW50cmllczsKKwlpby0+dXJicyA9IGttYWxsb2MgKGlvLT5lbnRyaWVzICogc2l6ZW9mICppby0+dXJicywgbWVtX2ZsYWdzKTsKKwlpZiAoIWlvLT51cmJzKQorCQlnb3RvIG5vbWVtOworCisJdXJiX2ZsYWdzID0gVVJCX0FTWU5DX1VOTElOSyB8IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQCisJCQl8IFVSQl9OT19JTlRFUlJVUFQ7CisJaWYgKHVzYl9waXBlaW4gKHBpcGUpKQorCQl1cmJfZmxhZ3MgfD0gVVJCX1NIT1JUX05PVF9PSzsKKworCWZvciAoaSA9IDA7IGkgPCBpby0+ZW50cmllczsgaSsrKSB7CisJCXVuc2lnbmVkCQlsZW47CisKKwkJaW8tPnVyYnMgW2ldID0gdXNiX2FsbG9jX3VyYiAoMCwgbWVtX2ZsYWdzKTsKKwkJaWYgKCFpby0+dXJicyBbaV0pIHsKKwkJCWlvLT5lbnRyaWVzID0gaTsKKwkJCWdvdG8gbm9tZW07CisJCX0KKworCQlpby0+dXJicyBbaV0tPmRldiA9IE5VTEw7CisJCWlvLT51cmJzIFtpXS0+cGlwZSA9IHBpcGU7CisJCWlvLT51cmJzIFtpXS0+aW50ZXJ2YWwgPSBwZXJpb2Q7CisJCWlvLT51cmJzIFtpXS0+dHJhbnNmZXJfZmxhZ3MgPSB1cmJfZmxhZ3M7CisKKwkJaW8tPnVyYnMgW2ldLT5jb21wbGV0ZSA9IHNnX2NvbXBsZXRlOworCQlpby0+dXJicyBbaV0tPmNvbnRleHQgPSBpbzsKKwkJaW8tPnVyYnMgW2ldLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJCWlvLT51cmJzIFtpXS0+YWN0dWFsX2xlbmd0aCA9IDA7CisKKwkJaWYgKGRtYSkgeworCQkJLyogaGMgbWF5IHVzZSBfb25seV8gdHJhbnNmZXJfZG1hICovCisJCQlpby0+dXJicyBbaV0tPnRyYW5zZmVyX2RtYSA9IHNnX2RtYV9hZGRyZXNzIChzZyArIGkpOworCQkJbGVuID0gc2dfZG1hX2xlbiAoc2cgKyBpKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGhjIG1heSB1c2UgX29ubHlfIHRyYW5zZmVyX2J1ZmZlciAqLworCQkJaW8tPnVyYnMgW2ldLT50cmFuc2Zlcl9idWZmZXIgPQorCQkJCXBhZ2VfYWRkcmVzcyAoc2cgW2ldLnBhZ2UpICsgc2cgW2ldLm9mZnNldDsKKwkJCWxlbiA9IHNnIFtpXS5sZW5ndGg7CisJCX0KKworCQlpZiAobGVuZ3RoKSB7CisJCQlsZW4gPSBtaW5fdCAodW5zaWduZWQsIGxlbiwgbGVuZ3RoKTsKKwkJCWxlbmd0aCAtPSBsZW47CisJCQlpZiAobGVuZ3RoID09IDApCisJCQkJaW8tPmVudHJpZXMgPSBpICsgMTsKKwkJfQorCQlpby0+dXJicyBbaV0tPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBsZW47CisJfQorCWlvLT51cmJzIFstLWldLT50cmFuc2Zlcl9mbGFncyAmPSB+VVJCX05PX0lOVEVSUlVQVDsKKworCS8qIHRyYW5zYWN0aW9uIHN0YXRlICovCisJaW8tPnN0YXR1cyA9IDA7CisJaW8tPmJ5dGVzID0gMDsKKwlpbml0X2NvbXBsZXRpb24gKCZpby0+Y29tcGxldGUpOworCXJldHVybiAwOworCitub21lbToKKwlzZ19jbGVhbiAoaW8pOworCXJldHVybiAtRU5PTUVNOworfQorCisKKy8qKgorICogdXNiX3NnX3dhaXQgLSBzeW5jaHJvbm91c2x5IGV4ZWN1dGUgc2NhdHRlci9nYXRoZXIgcmVxdWVzdAorICogQGlvOiByZXF1ZXN0IGJsb2NrIGhhbmRsZSwgYXMgaW5pdGlhbGl6ZWQgd2l0aCB1c2Jfc2dfaW5pdCgpLgorICogCXNvbWUgZmllbGRzIGJlY29tZSBhY2Nlc3NpYmxlIHdoZW4gdGhpcyBjYWxsIHJldHVybnMuCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0ICgpCisgKgorICogVGhpcyBmdW5jdGlvbiBibG9ja3MgdW50aWwgdGhlIHNwZWNpZmllZCBJL08gb3BlcmF0aW9uIGNvbXBsZXRlcy4gIEl0CisgKiBsZXZlcmFnZXMgdGhlIGdyb3VwaW5nIG9mIHRoZSByZWxhdGVkIEkvTyByZXF1ZXN0cyB0byBnZXQgZ29vZCB0cmFuc2ZlcgorICogcmF0ZXMsIGJ5IHF1ZXVlaW5nIHRoZSByZXF1ZXN0cy4gIEF0IGhpZ2hlciBzcGVlZHMsIHN1Y2ggcXVldWluZyBjYW4KKyAqIHNpZ25pZmljYW50bHkgaW1wcm92ZSBVU0IgdGhyb3VnaHB1dC4KKyAqCisgKiBUaGVyZSBhcmUgdGhyZWUga2luZHMgb2YgY29tcGxldGlvbiBmb3IgdGhpcyBmdW5jdGlvbi4KKyAqICgxKSBzdWNjZXNzLCB3aGVyZSBpby0+c3RhdHVzIGlzIHplcm8uICBUaGUgbnVtYmVyIG9mIGlvLT5ieXRlcworICogICAgIHRyYW5zZmVycmVkIGlzIGFzIHJlcXVlc3RlZC4KKyAqICgyKSBlcnJvciwgd2hlcmUgaW8tPnN0YXR1cyBpcyBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlLiAgVGhlIG51bWJlcgorICogICAgIG9mIGlvLT5ieXRlcyB0cmFuc2ZlcnJlZCBiZWZvcmUgdGhlIGVycm9yIGlzIHVzdWFsbHkgbGVzcworICogICAgIHRoYW4gcmVxdWVzdGVkLCBhbmQgY2FuIGJlIG5vbnplcm8uCisgKiAoMykgY2FuY2VsYXRpb24sIGEgdHlwZSBvZiBlcnJvciB3aXRoIHN0YXR1cyAtRUNPTk5SRVNFVCB0aGF0CisgKiAgICAgaXMgaW5pdGlhdGVkIGJ5IHVzYl9zZ19jYW5jZWwoKS4KKyAqCisgKiBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgYWxsIG1lbW9yeSBhbGxvY2F0ZWQgdGhyb3VnaCB1c2Jfc2dfaW5pdCgpIG9yCisgKiB0aGlzIGNhbGwgd2lsbCBoYXZlIGJlZW4gZnJlZWQuICBUaGUgcmVxdWVzdCBibG9jayBwYXJhbWV0ZXIgbWF5IHN0aWxsIGJlCisgKiBwYXNzZWQgdG8gdXNiX3NnX2NhbmNlbCgpLCBvciBpdCBtYXkgYmUgZnJlZWQuICBJdCBjb3VsZCBhbHNvIGJlCisgKiByZWluaXRpYWxpemVkIGFuZCB0aGVuIHJldXNlZC4KKyAqCisgKiBEYXRhIFRyYW5zZmVyIFJhdGVzOgorICoKKyAqIEJ1bGsgdHJhbnNmZXJzIGFyZSB2YWxpZCBmb3IgZnVsbCBvciBoaWdoIHNwZWVkIGVuZHBvaW50cy4KKyAqIFRoZSBiZXN0IGZ1bGwgc3BlZWQgZGF0YSByYXRlIGlzIDE5IHBhY2tldHMgb2YgNjQgYnl0ZXMgZWFjaAorICogcGVyIGZyYW1lLCBvciAxMjE2IGJ5dGVzIHBlciBtaWxsaXNlY29uZC4KKyAqIFRoZSBiZXN0IGhpZ2ggc3BlZWQgZGF0YSByYXRlIGlzIDEzIHBhY2tldHMgb2YgNTEyIGJ5dGVzIGVhY2gKKyAqIHBlciBtaWNyb2ZyYW1lLCBvciA1MiBLQnl0ZXMgcGVyIG1pbGxpc2Vjb25kLgorICoKKyAqIFRoZSByZWFzb24gdG8gdXNlIGludGVycnVwdCB0cmFuc2ZlcnMgdGhyb3VnaCB0aGlzIEFQSSB3b3VsZCBtb3N0IGxpa2VseQorICogYmUgdG8gcmVzZXJ2ZSBoaWdoIHNwZWVkIGJhbmR3aWR0aCwgd2hlcmUgdXAgdG8gMjQgS0J5dGVzIHBlciBtaWxsaXNlY29uZAorICogY291bGQgYmUgdHJhbnNmZXJyZWQuICBUaGF0IGNhcGFiaWxpdHkgaXMgbGVzcyB1c2VmdWwgZm9yIGxvdyBvciBmdWxsCisgKiBzcGVlZCBpbnRlcnJ1cHQgZW5kcG9pbnRzLCB3aGljaCBhbGxvdyBhdCBtb3N0IG9uZSBwYWNrZXQgcGVyIG1pbGxpc2Vjb25kLAorICogb2YgYXQgbW9zdCA4IG9yIDY0IGJ5dGVzIChyZXNwZWN0aXZlbHkpLgorICovCit2b2lkIHVzYl9zZ193YWl0IChzdHJ1Y3QgdXNiX3NnX3JlcXVlc3QgKmlvKQoreworCWludAkJaSwgZW50cmllcyA9IGlvLT5lbnRyaWVzOworCisJLyogcXVldWUgdGhlIHVyYnMuICAqLworCXNwaW5fbG9ja19pcnEgKCZpby0+bG9jayk7CisJZm9yIChpID0gMDsgaSA8IGVudHJpZXMgJiYgIWlvLT5zdGF0dXM7IGkrKykgeworCQlpbnQJcmV0dmFsOworCisJCWlvLT51cmJzIFtpXS0+ZGV2ID0gaW8tPmRldjsKKwkJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKGlvLT51cmJzIFtpXSwgU0xBQl9BVE9NSUMpOworCisJCS8qIGFmdGVyIHdlIHN1Ym1pdCwgbGV0IGNvbXBsZXRpb25zIG9yIGNhbmNlbGF0aW9ucyBmaXJlOworCQkgKiB3ZSBoYW5kc2hha2UgdXNpbmcgaW8tPnN0YXR1cy4KKwkJICovCisJCXNwaW5fdW5sb2NrX2lycSAoJmlvLT5sb2NrKTsKKwkJc3dpdGNoIChyZXR2YWwpIHsKKwkJCS8qIG1heWJlIHdlIHJldHJ5aW5nIHdpbGwgcmVjb3ZlciAqLworCQljYXNlIC1FTlhJTzoJLy8gaGMgZGlkbid0IHF1ZXVlIHRoaXMgb25lCisJCWNhc2UgLUVBR0FJTjoKKwkJY2FzZSAtRU5PTUVNOgorCQkJaW8tPnVyYnNbaV0tPmRldiA9IE5VTEw7CisJCQlyZXR2YWwgPSAwOworCQkJaS0tOworCQkJeWllbGQgKCk7CisJCQlicmVhazsKKworCQkJLyogbm8gZXJyb3I/IGNvbnRpbnVlIGltbWVkaWF0ZWx5LgorCQkJICoKKwkJCSAqIE5PVEU6IHRvIHdvcmsgYmV0dGVyIHdpdGggVUhDSSAoNEsgSS9PIGJ1ZmZlciBtYXkKKwkJCSAqIG5lZWQgM0sgb2YgVERzKSBpdCBtYXkgYmUgZ29vZCB0byBsaW1pdCBob3cgbWFueQorCQkJICogVVJCcyBhcmUgcXVldWVkIGF0IG9uY2U7IE4gbWlsbGlzZWNvbmRzPworCQkJICovCisJCWNhc2UgMDoKKwkJCWNwdV9yZWxheCAoKTsKKwkJCWJyZWFrOworCisJCQkvKiBmYWlsIGFueSB1bmNvbXBsZXRlZCB1cmJzICovCisJCWRlZmF1bHQ6CisJCQlpby0+dXJicyBbaV0tPmRldiA9IE5VTEw7CisJCQlpby0+dXJicyBbaV0tPnN0YXR1cyA9IHJldHZhbDsKKwkJCWRldl9kYmcgKCZpby0+ZGV2LT5kZXYsICIlcywgc3VibWl0IC0tPiAlZFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJCQl1c2Jfc2dfY2FuY2VsIChpbyk7CisJCX0KKwkJc3Bpbl9sb2NrX2lycSAoJmlvLT5sb2NrKTsKKwkJaWYgKHJldHZhbCAmJiAoaW8tPnN0YXR1cyA9PSAwIHx8IGlvLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQpKQorCQkJaW8tPnN0YXR1cyA9IHJldHZhbDsKKwl9CisJaW8tPmNvdW50IC09IGVudHJpZXMgLSBpOworCWlmIChpby0+Y291bnQgPT0gMCkKKwkJY29tcGxldGUgKCZpby0+Y29tcGxldGUpOworCXNwaW5fdW5sb2NrX2lycSAoJmlvLT5sb2NrKTsKKworCS8qIE9LLCB5ZXMsIHRoaXMgY291bGQgYmUgcGFja2FnZWQgYXMgbm9uLWJsb2NraW5nLgorCSAqIFNvIGNvdWxkIHRoZSBzdWJtaXQgbG9vcCBhYm92ZSAuLi4gYnV0IGl0J3MgZWFzaWVyIHRvCisJICogc29sdmUgbmVpdGhlciBwcm9ibGVtIHRoYW4gdG8gc29sdmUgYm90aCEKKwkgKi8KKwl3YWl0X2Zvcl9jb21wbGV0aW9uICgmaW8tPmNvbXBsZXRlKTsKKworCXNnX2NsZWFuIChpbyk7Cit9CisKKy8qKgorICogdXNiX3NnX2NhbmNlbCAtIHN0b3Agc2NhdHRlci9nYXRoZXIgaS9vIGlzc3VlZCBieSB1c2Jfc2dfd2FpdCgpCisgKiBAaW86IHJlcXVlc3QgYmxvY2ssIGluaXRpYWxpemVkIHdpdGggdXNiX3NnX2luaXQoKQorICoKKyAqIFRoaXMgc3RvcHMgYSByZXF1ZXN0IGFmdGVyIGl0IGhhcyBiZWVuIHN0YXJ0ZWQgYnkgdXNiX3NnX3dhaXQoKS4KKyAqIEl0IGNhbiBhbHNvIHByZXZlbnRzIG9uZSBpbml0aWFsaXplZCBieSB1c2Jfc2dfaW5pdCgpIGZyb20gc3RhcnRpbmcsCisgKiBzbyB0aGF0IGNhbGwganVzdCBmcmVlcyByZXNvdXJjZXMgYWxsb2NhdGVkIHRvIHRoZSByZXF1ZXN0LgorICovCit2b2lkIHVzYl9zZ19jYW5jZWwgKHN0cnVjdCB1c2Jfc2dfcmVxdWVzdCAqaW8pCit7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmaW8tPmxvY2ssIGZsYWdzKTsKKworCS8qIHNodXQgZXZlcnl0aGluZyBkb3duLCBpZiBpdCBkaWRuJ3QgYWxyZWFkeSAqLworCWlmICghaW8tPnN0YXR1cykgeworCQlpbnQJaTsKKworCQlpby0+c3RhdHVzID0gLUVDT05OUkVTRVQ7CisJCXNwaW5fdW5sb2NrICgmaW8tPmxvY2spOworCQlmb3IgKGkgPSAwOyBpIDwgaW8tPmVudHJpZXM7IGkrKykgeworCQkJaW50CXJldHZhbDsKKworCQkJaWYgKCFpby0+dXJicyBbaV0tPmRldikKKwkJCQljb250aW51ZTsKKwkJCXJldHZhbCA9IHVzYl91bmxpbmtfdXJiIChpby0+dXJicyBbaV0pOworCQkJaWYgKHJldHZhbCAhPSAtRUlOUFJPR1JFU1MgJiYgcmV0dmFsICE9IC1FQlVTWSkKKwkJCQlkZXZfd2FybiAoJmlvLT5kZXYtPmRldiwgIiVzLCB1bmxpbmsgLS0+ICVkXG4iLAorCQkJCQlfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJCX0KKwkJc3Bpbl9sb2NrICgmaW8tPmxvY2spOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmaW8tPmxvY2ssIGZsYWdzKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiB1c2JfZ2V0X2Rlc2NyaXB0b3IgLSBpc3N1ZXMgYSBnZW5lcmljIEdFVF9ERVNDUklQVE9SIHJlcXVlc3QKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugd2hvc2UgZGVzY3JpcHRvciBpcyBiZWluZyByZXRyaWV2ZWQKKyAqIEB0eXBlOiB0aGUgZGVzY3JpcHRvciB0eXBlIChVU0JfRFRfKikKKyAqIEBpbmRleDogdGhlIG51bWJlciBvZiB0aGUgZGVzY3JpcHRvcgorICogQGJ1Zjogd2hlcmUgdG8gcHV0IHRoZSBkZXNjcmlwdG9yCisgKiBAc2l6ZTogaG93IGJpZyBpcyAiYnVmIj8KKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQgKCkKKyAqCisgKiBHZXRzIGEgVVNCIGRlc2NyaXB0b3IuICBDb252ZW5pZW5jZSBmdW5jdGlvbnMgZXhpc3QgdG8gc2ltcGxpZnkKKyAqIGdldHRpbmcgc29tZSB0eXBlcyBvZiBkZXNjcmlwdG9ycy4gIFVzZQorICogdXNiX2dldF9zdHJpbmcoKSBvciB1c2Jfc3RyaW5nKCkgZm9yIFVTQl9EVF9TVFJJTkcuCisgKiBEZXZpY2UgKFVTQl9EVF9ERVZJQ0UpIGFuZCBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3JzIChVU0JfRFRfQ09ORklHKQorICogYXJlIHBhcnQgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUuCisgKiBJbiBhZGRpdGlvbiB0byBhIG51bWJlciBvZiBVU0Itc3RhbmRhcmQgZGVzY3JpcHRvcnMsIHNvbWUKKyAqIGRldmljZXMgYWxzbyB1c2UgY2xhc3Mtc3BlY2lmaWMgb3IgdmVuZG9yLXNwZWNpZmljIGRlc2NyaXB0b3JzLgorICoKKyAqIFRoaXMgY2FsbCBpcyBzeW5jaHJvbm91cywgYW5kIG1heSBub3QgYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgb24gc3VjY2Vzcywgb3IgZWxzZSB0aGUgc3RhdHVzIGNvZGUKKyAqIHJldHVybmVkIGJ5IHRoZSB1bmRlcmx5aW5nIHVzYl9jb250cm9sX21zZygpIGNhbGwuCisgKi8KK2ludCB1c2JfZ2V0X2Rlc2NyaXB0b3Ioc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciB0eXBlLCB1bnNpZ25lZCBjaGFyIGluZGV4LCB2b2lkICpidWYsIGludCBzaXplKQoreworCWludCBpOworCWludCByZXN1bHQ7CisJCisJbWVtc2V0KGJ1ZiwwLHNpemUpOwkvLyBNYWtlIHN1cmUgd2UgcGFyc2UgcmVhbGx5IHJlY2VpdmVkIGRhdGEKKworCWZvciAoaSA9IDA7IGkgPCAzOyArK2kpIHsKKwkJLyogcmV0cnkgb24gbGVuZ3RoIDAgb3Igc3RhbGw7IHNvbWUgZGV2aWNlcyBhcmUgZmxha2V5ICovCisJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLAorCQkJCVVTQl9SRVFfR0VUX0RFU0NSSVBUT1IsIFVTQl9ESVJfSU4sCisJCQkJKHR5cGUgPDwgOCkgKyBpbmRleCwgMCwgYnVmLCBzaXplLAorCQkJCVVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwkJaWYgKHJlc3VsdCA9PSAwIHx8IHJlc3VsdCA9PSAtRVBJUEUpCisJCQljb250aW51ZTsKKwkJaWYgKHJlc3VsdCA+IDEgJiYgKCh1OCAqKWJ1ZilbMV0gIT0gdHlwZSkgeworCQkJcmVzdWx0ID0gLUVQUk9UTzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIHVzYl9nZXRfc3RyaW5nIC0gZ2V0cyBhIHN0cmluZyBkZXNjcmlwdG9yCisgKiBAZGV2OiB0aGUgZGV2aWNlIHdob3NlIHN0cmluZyBkZXNjcmlwdG9yIGlzIGJlaW5nIHJldHJpZXZlZAorICogQGxhbmdpZDogY29kZSBmb3IgbGFuZ3VhZ2UgY2hvc2VuIChmcm9tIHN0cmluZyBkZXNjcmlwdG9yIHplcm8pCisgKiBAaW5kZXg6IHRoZSBudW1iZXIgb2YgdGhlIGRlc2NyaXB0b3IKKyAqIEBidWY6IHdoZXJlIHRvIHB1dCB0aGUgc3RyaW5nCisgKiBAc2l6ZTogaG93IGJpZyBpcyAiYnVmIj8KKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQgKCkKKyAqCisgKiBSZXRyaWV2ZXMgYSBzdHJpbmcsIGVuY29kZWQgdXNpbmcgVVRGLTE2TEUgKFVuaWNvZGUsIDE2IGJpdHMgcGVyIGNoYXJhY3RlciwKKyAqIGluIGxpdHRsZS1lbmRpYW4gYnl0ZSBvcmRlcikuCisgKiBUaGUgdXNiX3N0cmluZygpIGZ1bmN0aW9uIHdpbGwgb2Z0ZW4gYmUgYSBjb252ZW5pZW50IHdheSB0byB0dXJuCisgKiB0aGVzZSBzdHJpbmdzIGludG8ga2VybmVsLXByaW50YWJsZSBmb3JtLgorICoKKyAqIFN0cmluZ3MgbWF5IGJlIHJlZmVyZW5jZWQgaW4gZGV2aWNlLCBjb25maWd1cmF0aW9uLCBpbnRlcmZhY2UsIG9yIG90aGVyCisgKiBkZXNjcmlwdG9ycywgYW5kIGNvdWxkIGFsc28gYmUgdXNlZCBpbiB2ZW5kb3Itc3BlY2lmaWMgd2F5cy4KKyAqCisgKiBUaGlzIGNhbGwgaXMgc3luY2hyb25vdXMsIGFuZCBtYXkgbm90IGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIG9uIHN1Y2Nlc3MsIG9yIGVsc2UgdGhlIHN0YXR1cyBjb2RlCisgKiByZXR1cm5lZCBieSB0aGUgdW5kZXJseWluZyB1c2JfY29udHJvbF9tc2coKSBjYWxsLgorICovCitpbnQgdXNiX2dldF9zdHJpbmcoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgbGFuZ2lkLAorCQl1bnNpZ25lZCBjaGFyIGluZGV4LCB2b2lkICpidWYsIGludCBzaXplKQoreworCWludCBpOworCWludCByZXN1bHQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgKytpKSB7CisJCS8qIHJldHJ5IG9uIGxlbmd0aCAwIG9yIHN0YWxsOyBzb21lIGRldmljZXMgYXJlIGZsYWtleSAqLworCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX0RFU0NSSVBUT1IsIFVTQl9ESVJfSU4sCisJCQkoVVNCX0RUX1NUUklORyA8PCA4KSArIGluZGV4LCBsYW5naWQsIGJ1Ziwgc2l6ZSwKKwkJCVVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwkJaWYgKCEocmVzdWx0ID09IDAgfHwgcmVzdWx0ID09IC1FUElQRSkpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgdXNiX3RyeV9zdHJpbmdfd29ya2Fyb3VuZHModW5zaWduZWQgY2hhciAqYnVmLCBpbnQgKmxlbmd0aCkKK3sKKwlpbnQgbmV3bGVuZ3RoLCBvbGRsZW5ndGggPSAqbGVuZ3RoOworCisJZm9yIChuZXdsZW5ndGggPSAyOyBuZXdsZW5ndGggKyAxIDwgb2xkbGVuZ3RoOyBuZXdsZW5ndGggKz0gMikKKwkJaWYgKCFpc3ByaW50KGJ1ZltuZXdsZW5ndGhdKSB8fCBidWZbbmV3bGVuZ3RoICsgMV0pCisJCQlicmVhazsKKworCWlmIChuZXdsZW5ndGggPiAyKSB7CisJCWJ1ZlswXSA9IG5ld2xlbmd0aDsKKwkJKmxlbmd0aCA9IG5ld2xlbmd0aDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdXNiX3N0cmluZ19zdWIoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGxhbmdpZCwKKwkJdW5zaWduZWQgaW50IGluZGV4LCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJaW50IHJjOworCisJLyogVHJ5IHRvIHJlYWQgdGhlIHN0cmluZyBkZXNjcmlwdG9yIGJ5IGFza2luZyBmb3IgdGhlIG1heGltdW0KKwkgKiBwb3NzaWJsZSBudW1iZXIgb2YgYnl0ZXMgKi8KKwlyYyA9IHVzYl9nZXRfc3RyaW5nKGRldiwgbGFuZ2lkLCBpbmRleCwgYnVmLCAyNTUpOworCisJLyogSWYgdGhhdCBmYWlsZWQgdHJ5IHRvIHJlYWQgdGhlIGRlc2NyaXB0b3IgbGVuZ3RoLCB0aGVuCisJICogYXNrIGZvciBqdXN0IHRoYXQgbWFueSBieXRlcyAqLworCWlmIChyYyA8IDIpIHsKKwkJcmMgPSB1c2JfZ2V0X3N0cmluZyhkZXYsIGxhbmdpZCwgaW5kZXgsIGJ1ZiwgMik7CisJCWlmIChyYyA9PSAyKQorCQkJcmMgPSB1c2JfZ2V0X3N0cmluZyhkZXYsIGxhbmdpZCwgaW5kZXgsIGJ1ZiwgYnVmWzBdKTsKKwl9CisKKwlpZiAocmMgPj0gMikgeworCQlpZiAoIWJ1ZlswXSAmJiAhYnVmWzFdKQorCQkJdXNiX3RyeV9zdHJpbmdfd29ya2Fyb3VuZHMoYnVmLCAmcmMpOworCisJCS8qIFRoZXJlIG1pZ2h0IGJlIGV4dHJhIGp1bmsgYXQgdGhlIGVuZCBvZiB0aGUgZGVzY3JpcHRvciAqLworCQlpZiAoYnVmWzBdIDwgcmMpCisJCQlyYyA9IGJ1ZlswXTsKKworCQlyYyA9IHJjIC0gKHJjICYgMSk7IC8qIGZvcmNlIGEgbXVsdGlwbGUgb2YgdHdvICovCisJfQorCisJaWYgKHJjIDwgMikKKwkJcmMgPSAocmMgPCAwID8gcmMgOiAtRUlOVkFMKTsKKworCXJldHVybiByYzsKK30KKworLyoqCisgKiB1c2Jfc3RyaW5nIC0gcmV0dXJucyBJU08gODg1OS0xIHZlcnNpb24gb2YgYSBzdHJpbmcgZGVzY3JpcHRvcgorICogQGRldjogdGhlIGRldmljZSB3aG9zZSBzdHJpbmcgZGVzY3JpcHRvciBpcyBiZWluZyByZXRyaWV2ZWQKKyAqIEBpbmRleDogdGhlIG51bWJlciBvZiB0aGUgZGVzY3JpcHRvcgorICogQGJ1Zjogd2hlcmUgdG8gcHV0IHRoZSBzdHJpbmcKKyAqIEBzaXplOiBob3cgYmlnIGlzICJidWYiPworICogQ29udGV4dDogIWluX2ludGVycnVwdCAoKQorICogCisgKiBUaGlzIGNvbnZlcnRzIHRoZSBVVEYtMTZMRSBlbmNvZGVkIHN0cmluZ3MgcmV0dXJuZWQgYnkgZGV2aWNlcywgZnJvbQorICogdXNiX2dldF9zdHJpbmdfZGVzY3JpcHRvcigpLCB0byBudWxsLXRlcm1pbmF0ZWQgSVNPLTg4NTktMSBlbmNvZGVkIG9uZXMKKyAqIHRoYXQgYXJlIG1vcmUgdXNhYmxlIGluIG1vc3Qga2VybmVsIGNvbnRleHRzLiAgTm90ZSB0aGF0IGFsbCBjaGFyYWN0ZXJzCisgKiBpbiB0aGUgY2hvc2VuIGRlc2NyaXB0b3IgdGhhdCBjYW4ndCBiZSBlbmNvZGVkIHVzaW5nIElTTy04ODU5LTEKKyAqIGFyZSBjb252ZXJ0ZWQgdG8gdGhlIHF1ZXN0aW9uIG1hcmsgKCI/IikgY2hhcmFjdGVyLCBhbmQgdGhpcyBmdW5jdGlvbgorICogY2hvb3NlcyBzdHJpbmdzIGluIHRoZSBmaXJzdCBsYW5ndWFnZSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZS4KKyAqCisgKiBUaGUgQVNDSUkgKG9yLCByZWR1bmRhbnRseSwgIlVTLUFTQ0lJIikgY2hhcmFjdGVyIHNldCBpcyB0aGUgc2V2ZW4tYml0CisgKiBzdWJzZXQgb2YgSVNPIDg4NTktMS4gSVNPLTg4NTktMSBpcyB0aGUgZWlnaHQtYml0IHN1YnNldCBvZiBVbmljb2RlLAorICogYW5kIGlzIGFwcHJvcHJpYXRlIGZvciB1c2UgbWFueSB1c2VzIG9mIEVuZ2xpc2ggYW5kIHNldmVyYWwgb3RoZXIKKyAqIFdlc3Rlcm4gRXVyb3BlYW4gbGFuZ3VhZ2VzLiAgKEJ1dCBpdCBkb2Vzbid0IGluY2x1ZGUgdGhlICJFdXJvIiBzeW1ib2wuKQorICoKKyAqIFRoaXMgY2FsbCBpcyBzeW5jaHJvbm91cywgYW5kIG1heSBub3QgYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqCisgKiBSZXR1cm5zIGxlbmd0aCBvZiB0aGUgc3RyaW5nICg+PSAwKSBvciB1c2JfY29udHJvbF9tc2cgc3RhdHVzICg8IDApLgorICovCitpbnQgdXNiX3N0cmluZyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgaW5kZXgsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJdW5zaWduZWQgY2hhciAqdGJ1ZjsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGludCB1LCBpZHg7CisKKwlpZiAoZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKQorCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKKwlpZiAoc2l6ZSA8PSAwIHx8ICFidWYgfHwgIWluZGV4KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlidWZbMF0gPSAwOworCXRidWYgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0YnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGdldCBsYW5naWQgZm9yIHN0cmluZ3MgaWYgaXQncyBub3QgeWV0IGtub3duICovCisJaWYgKCFkZXYtPmhhdmVfbGFuZ2lkKSB7CisJCWVyciA9IHVzYl9zdHJpbmdfc3ViKGRldiwgMCwgMCwgdGJ1Zik7CisJCWlmIChlcnIgPCAwKSB7CisJCQlkZXZfZXJyICgmZGV2LT5kZXYsCisJCQkJInN0cmluZyBkZXNjcmlwdG9yIDAgcmVhZCBlcnJvcjogJWRcbiIsCisJCQkJZXJyKTsKKwkJCWdvdG8gZXJyb3V0OworCQl9IGVsc2UgaWYgKGVyciA8IDQpIHsKKwkJCWRldl9lcnIgKCZkZXYtPmRldiwgInN0cmluZyBkZXNjcmlwdG9yIDAgdG9vIHNob3J0XG4iKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIGVycm91dDsKKwkJfSBlbHNlIHsKKwkJCWRldi0+aGF2ZV9sYW5naWQgPSAtMTsKKwkJCWRldi0+c3RyaW5nX2xhbmdpZCA9IHRidWZbMl0gfCAodGJ1ZlszXTw8IDgpOworCQkJCS8qIGFsd2F5cyB1c2UgdGhlIGZpcnN0IGxhbmdpZCBsaXN0ZWQgKi8KKwkJCWRldl9kYmcgKCZkZXYtPmRldiwgImRlZmF1bHQgbGFuZ3VhZ2UgMHglMDR4XG4iLAorCQkJCWRldi0+c3RyaW5nX2xhbmdpZCk7CisJCX0KKwl9CisJCisJZXJyID0gdXNiX3N0cmluZ19zdWIoZGV2LCBkZXYtPnN0cmluZ19sYW5naWQsIGluZGV4LCB0YnVmKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJvdXQ7CisKKwlzaXplLS07CQkvKiBsZWF2ZSByb29tIGZvciB0cmFpbGluZyBOVUxMIGNoYXIgaW4gb3V0cHV0IGJ1ZmZlciAqLworCWZvciAoaWR4ID0gMCwgdSA9IDI7IHUgPCBlcnI7IHUgKz0gMikgeworCQlpZiAoaWR4ID49IHNpemUpCisJCQlicmVhazsKKwkJaWYgKHRidWZbdSsxXSkJCQkvKiBoaWdoIGJ5dGUgKi8KKwkJCWJ1ZltpZHgrK10gPSAnPyc7ICAvKiBub24gSVNPLTg4NTktMSBjaGFyYWN0ZXIgKi8KKwkJZWxzZQorCQkJYnVmW2lkeCsrXSA9IHRidWZbdV07CisJfQorCWJ1ZltpZHhdID0gMDsKKwllcnIgPSBpZHg7CisKKwlpZiAodGJ1ZlsxXSAhPSBVU0JfRFRfU1RSSU5HKQorCQlkZXZfZGJnKCZkZXYtPmRldiwgIndyb25nIGRlc2NyaXB0b3IgdHlwZSAlMDJ4IGZvciBzdHJpbmcgJWQgKFwiJXNcIilcbiIsIHRidWZbMV0sIGluZGV4LCBidWYpOworCisgZXJyb3V0OgorCWtmcmVlKHRidWYpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiB1c2JfZ2V0X2RldmljZV9kZXNjcmlwdG9yIC0gKHJlKXJlYWRzIHRoZSBkZXZpY2UgZGVzY3JpcHRvciAodXNiY29yZSkKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugd2hvc2UgZGV2aWNlIGRlc2NyaXB0b3IgaXMgYmVpbmcgdXBkYXRlZAorICogQHNpemU6IGhvdyBtdWNoIG9mIHRoZSBkZXNjcmlwdG9yIHRvIHJlYWQKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQgKCkKKyAqCisgKiBVcGRhdGVzIHRoZSBjb3B5IG9mIHRoZSBkZXZpY2UgZGVzY3JpcHRvciBzdG9yZWQgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUsCisgKiB3aGljaCBkZWRpY2F0ZXMgc3BhY2UgZm9yIHRoaXMgcHVycG9zZS4gIE5vdGUgdGhhdCBzZXZlcmFsIGZpZWxkcyBhcmUKKyAqIGNvbnZlcnRlZCB0byB0aGUgaG9zdCBDUFUncyBieXRlIG9yZGVyOiAgdGhlIFVTQiB2ZXJzaW9uIChiY2RVU0IpLCBhbmQKKyAqIHZlbmRvcnMgcHJvZHVjdCBhbmQgdmVyc2lvbiBmaWVsZHMgKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGFuZCBiY2REZXZpY2UpLgorICogVGhhdCBsZXRzIGRldmljZSBkcml2ZXJzIGNvbXBhcmUgYWdhaW5zdCBub24tYnl0ZXN3YXBwZWQgY29uc3RhbnRzLgorICoKKyAqIE5vdCBleHBvcnRlZCwgb25seSBmb3IgdXNlIGJ5IHRoZSBjb3JlLiAgSWYgZHJpdmVycyByZWFsbHkgd2FudCB0byByZWFkCisgKiB0aGUgZGV2aWNlIGRlc2NyaXB0b3IgZGlyZWN0bHksIHRoZXkgY2FuIGNhbGwgdXNiX2dldF9kZXNjcmlwdG9yKCkgd2l0aAorICogdHlwZSA9IFVTQl9EVF9ERVZJQ0UgYW5kIGluZGV4ID0gMC4KKyAqCisgKiBUaGlzIGNhbGwgaXMgc3luY2hyb25vdXMsIGFuZCBtYXkgbm90IGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIG9uIHN1Y2Nlc3MsIG9yIGVsc2UgdGhlIHN0YXR1cyBjb2RlCisgKiByZXR1cm5lZCBieSB0aGUgdW5kZXJseWluZyB1c2JfY29udHJvbF9tc2coKSBjYWxsLgorICovCitpbnQgdXNiX2dldF9kZXZpY2VfZGVzY3JpcHRvcihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yICpkZXNjOworCWludCByZXQ7CisKKwlpZiAoc2l6ZSA+IHNpemVvZigqZGVzYykpCisJCXJldHVybiAtRUlOVkFMOworCWRlc2MgPSBrbWFsbG9jKHNpemVvZigqZGVzYyksIEdGUF9OT0lPKTsKKwlpZiAoIWRlc2MpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gdXNiX2dldF9kZXNjcmlwdG9yKGRldiwgVVNCX0RUX0RFVklDRSwgMCwgZGVzYywgc2l6ZSk7CisJaWYgKHJldCA+PSAwKSAKKwkJbWVtY3B5KCZkZXYtPmRlc2NyaXB0b3IsIGRlc2MsIHNpemUpOworCWtmcmVlKGRlc2MpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdXNiX2dldF9zdGF0dXMgLSBpc3N1ZXMgYSBHRVRfU1RBVFVTIGNhbGwKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugd2hvc2Ugc3RhdHVzIGlzIGJlaW5nIGNoZWNrZWQKKyAqIEB0eXBlOiBVU0JfUkVDSVBfKjsgZm9yIGRldmljZSwgaW50ZXJmYWNlLCBvciBlbmRwb2ludAorICogQHRhcmdldDogemVybyAoZm9yIGRldmljZSksIGVsc2UgaW50ZXJmYWNlIG9yIGVuZHBvaW50IG51bWJlcgorICogQGRhdGE6IHBvaW50ZXIgdG8gdHdvIGJ5dGVzIG9mIGJpdG1hcCBkYXRhCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0ICgpCisgKgorICogUmV0dXJucyBkZXZpY2UsIGludGVyZmFjZSwgb3IgZW5kcG9pbnQgc3RhdHVzLiAgTm9ybWFsbHkgb25seSBvZgorICogaW50ZXJlc3QgdG8gc2VlIGlmIHRoZSBkZXZpY2UgaXMgc2VsZiBwb3dlcmVkLCBvciBoYXMgZW5hYmxlZCB0aGUKKyAqIHJlbW90ZSB3YWtldXAgZmFjaWxpdHk7IG9yIHdoZXRoZXIgYSBidWxrIG9yIGludGVycnVwdCBlbmRwb2ludAorICogaXMgaGFsdGVkICgic3RhbGxlZCIpLgorICoKKyAqIEJpdHMgaW4gdGhlc2Ugc3RhdHVzIGJpdG1hcHMgYXJlIHNldCB1c2luZyB0aGUgU0VUX0ZFQVRVUkUgcmVxdWVzdCwKKyAqIGFuZCBjbGVhcmVkIHVzaW5nIHRoZSBDTEVBUl9GRUFUVVJFIHJlcXVlc3QuICBUaGUgdXNiX2NsZWFyX2hhbHQoKQorICogZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgdG8gY2xlYXIgaGFsdCAoInN0YWxsIikgc3RhdHVzLgorICoKKyAqIFRoaXMgY2FsbCBpcyBzeW5jaHJvbm91cywgYW5kIG1heSBub3QgYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgb24gc3VjY2Vzcywgb3IgZWxzZSB0aGUgc3RhdHVzIGNvZGUKKyAqIHJldHVybmVkIGJ5IHRoZSB1bmRlcmx5aW5nIHVzYl9jb250cm9sX21zZygpIGNhbGwuCisgKi8KK2ludCB1c2JfZ2V0X3N0YXR1cyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgdHlwZSwgaW50IHRhcmdldCwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCXUxNiAqc3RhdHVzID0ga21hbGxvYyhzaXplb2YoKnN0YXR1cyksIEdGUF9LRVJORUwpOworCisJaWYgKCFzdGF0dXMpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCisJCVVTQl9SRVFfR0VUX1NUQVRVUywgVVNCX0RJUl9JTiB8IHR5cGUsIDAsIHRhcmdldCwgc3RhdHVzLAorCQlzaXplb2YoKnN0YXR1cyksIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKworCSoodTE2ICopZGF0YSA9ICpzdGF0dXM7CisJa2ZyZWUoc3RhdHVzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHVzYl9jbGVhcl9oYWx0IC0gdGVsbHMgZGV2aWNlIHRvIGNsZWFyIGVuZHBvaW50IGhhbHQvc3RhbGwgY29uZGl0aW9uCisgKiBAZGV2OiBkZXZpY2Ugd2hvc2UgZW5kcG9pbnQgaXMgaGFsdGVkCisgKiBAcGlwZTogZW5kcG9pbnQgInBpcGUiIGJlaW5nIGNsZWFyZWQKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQgKCkKKyAqCisgKiBUaGlzIGlzIHVzZWQgdG8gY2xlYXIgaGFsdCBjb25kaXRpb25zIGZvciBidWxrIGFuZCBpbnRlcnJ1cHQgZW5kcG9pbnRzLAorICogYXMgcmVwb3J0ZWQgYnkgVVJCIGNvbXBsZXRpb24gc3RhdHVzLiAgRW5kcG9pbnRzIHRoYXQgYXJlIGhhbHRlZCBhcmUKKyAqIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyBiZWluZyAic3RhbGxlZCIuICBTdWNoIGVuZHBvaW50cyBhcmUgdW5hYmxlCisgKiB0byB0cmFuc21pdCBvciByZWNlaXZlIGRhdGEgdW50aWwgdGhlIGhhbHQgc3RhdHVzIGlzIGNsZWFyZWQuICBBbnkgVVJCcworICogcXVldWVkIGZvciBzdWNoIGFuIGVuZHBvaW50IHNob3VsZCBub3JtYWxseSBiZSB1bmxpbmtlZCBieSB0aGUgZHJpdmVyCisgKiBiZWZvcmUgY2xlYXJpbmcgdGhlIGhhbHQgY29uZGl0aW9uLCBhcyBkZXNjcmliZWQgaW4gc2VjdGlvbnMgNS43LjUKKyAqIGFuZCA1LjguNSBvZiB0aGUgVVNCIDIuMCBzcGVjLgorICoKKyAqIE5vdGUgdGhhdCBjb250cm9sIGFuZCBpc29jaHJvbm91cyBlbmRwb2ludHMgZG9uJ3QgaGFsdCwgYWx0aG91Z2ggY29udHJvbAorICogZW5kcG9pbnRzIHJlcG9ydCAicHJvdG9jb2wgc3RhbGwiIChmb3IgdW5zdXBwb3J0ZWQgcmVxdWVzdHMpIHVzaW5nIHRoZQorICogc2FtZSBzdGF0dXMgY29kZSB1c2VkIHRvIHJlcG9ydCBhIHRydWUgc3RhbGwuCisgKgorICogVGhpcyBjYWxsIGlzIHN5bmNocm9ub3VzLCBhbmQgbWF5IG5vdCBiZSB1c2VkIGluIGFuIGludGVycnVwdCBjb250ZXh0LgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBvciBlbHNlIHRoZSBzdGF0dXMgY29kZSByZXR1cm5lZCBieSB0aGUKKyAqIHVuZGVybHlpbmcgdXNiX2NvbnRyb2xfbXNnKCkgY2FsbC4KKyAqLworaW50IHVzYl9jbGVhcl9oYWx0KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBwaXBlKQoreworCWludCByZXN1bHQ7CisJaW50IGVuZHAgPSB1c2JfcGlwZWVuZHBvaW50KHBpcGUpOworCQorCWlmICh1c2JfcGlwZWluIChwaXBlKSkKKwkJZW5kcCB8PSBVU0JfRElSX0lOOworCisJLyogd2UgZG9uJ3QgY2FyZSBpZiBpdCB3YXNuJ3QgaGFsdGVkIGZpcnN0LiBpbiBmYWN0IHNvbWUgZGV2aWNlcworCSAqIChsaWtlIHNvbWUgaWJtY2FtIG1vZGVsIDEgdW5pdHMpIHNlZW0gdG8gZXhwZWN0IGhvc3RzIHRvIG1ha2UKKwkgKiB0aGlzIHJlcXVlc3QgZm9yIGlzbyBlbmRwb2ludHMsIHdoaWNoIGNhbid0IGhhbHQhCisJICovCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCVVTQl9SRVFfQ0xFQVJfRkVBVFVSRSwgVVNCX1JFQ0lQX0VORFBPSU5ULAorCQlVU0JfRU5EUE9JTlRfSEFMVCwgZW5kcCwgTlVMTCwgMCwKKwkJVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCisJLyogZG9uJ3QgdW4taGFsdCBvciBmb3JjZSB0byBEQVRBMCBleGNlcHQgb24gc3VjY2VzcyAqLworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OworCisJLyogTk9URTogIHNlZW1zIGxpa2UgTWljcm9zb2Z0IGFuZCBBcHBsZSBkb24ndCBib3RoZXIgdmVyaWZ5aW5nCisJICogdGhlIGNsZWFyICJ0b29rIiwgc28gc29tZSBkZXZpY2VzIGNvdWxkIGxvY2sgdXAgaWYgeW91IGNoZWNrLi4uCisJICogc3VjaCBhcyB0aGUgSGFnaXdhcmEgRmxhc2hHYXRlIERVQUwuICBTbyB3ZSB3b24ndCBib3RoZXIuCisJICoKKwkgKiBOT1RFOiAgbWFrZSBzdXJlIHRoZSBsb2dpYyBoZXJlIGRvZXNuJ3QgZGl2ZXJnZSBtdWNoIGZyb20KKwkgKiB0aGUgY29weSBpbiB1c2Itc3RvcmFnZSwgZm9yIGFzIGxvbmcgYXMgd2UgbmVlZCB0d28gY29waWVzLgorCSAqLworCisJLyogdG9nZ2xlIHdhcyByZXNldCBieSB0aGUgY2xlYXIgKi8KKwl1c2Jfc2V0dG9nZ2xlKGRldiwgdXNiX3BpcGVlbmRwb2ludChwaXBlKSwgdXNiX3BpcGVvdXQocGlwZSksIDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdXNiX2Rpc2FibGVfZW5kcG9pbnQgLS0gRGlzYWJsZSBhbiBlbmRwb2ludCBieSBhZGRyZXNzCisgKiBAZGV2OiB0aGUgZGV2aWNlIHdob3NlIGVuZHBvaW50IGlzIGJlaW5nIGRpc2FibGVkCisgKiBAZXBhZGRyOiB0aGUgZW5kcG9pbnQncyBhZGRyZXNzLiAgRW5kcG9pbnQgbnVtYmVyIGZvciBvdXRwdXQsCisgKgllbmRwb2ludCBudW1iZXIgKyBVU0JfRElSX0lOIGZvciBpbnB1dAorICoKKyAqIERlYWxsb2NhdGVzIGhjZC9oYXJkd2FyZSBzdGF0ZSBmb3IgdGhpcyBlbmRwb2ludCAuLi4gYW5kIG51a2VzIGFsbAorICogcGVuZGluZyB1cmJzLgorICoKKyAqIElmIHRoZSBIQ0QgaGFzbid0IHJlZ2lzdGVyZWQgYSBkaXNhYmxlKCkgZnVuY3Rpb24sIHRoaXMgc2V0cyB0aGUKKyAqIGVuZHBvaW50J3MgbWF4cGFja2V0IHNpemUgdG8gMCB0byBwcmV2ZW50IGZ1cnRoZXIgc3VibWlzc2lvbnMuCisgKi8KK3ZvaWQgdXNiX2Rpc2FibGVfZW5kcG9pbnQoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVwYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgZXBudW0gPSBlcGFkZHIgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKworCWlmICghZGV2KQorCQlyZXR1cm47CisKKwlpZiAodXNiX2VuZHBvaW50X291dChlcGFkZHIpKSB7CisJCWVwID0gZGV2LT5lcF9vdXRbZXBudW1dOworCQlkZXYtPmVwX291dFtlcG51bV0gPSBOVUxMOworCX0gZWxzZSB7CisJCWVwID0gZGV2LT5lcF9pbltlcG51bV07CisJCWRldi0+ZXBfaW5bZXBudW1dID0gTlVMTDsKKwl9CisJaWYgKGVwICYmIGRldi0+YnVzICYmIGRldi0+YnVzLT5vcCAmJiBkZXYtPmJ1cy0+b3AtPmRpc2FibGUpCisJCWRldi0+YnVzLT5vcC0+ZGlzYWJsZShkZXYsIGVwKTsKK30KKworLyoqCisgKiB1c2JfZGlzYWJsZV9pbnRlcmZhY2UgLS0gRGlzYWJsZSBhbGwgZW5kcG9pbnRzIGZvciBhbiBpbnRlcmZhY2UKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugd2hvc2UgaW50ZXJmYWNlIGlzIGJlaW5nIGRpc2FibGVkCisgKiBAaW50ZjogcG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIGRlc2NyaXB0b3IKKyAqCisgKiBEaXNhYmxlcyBhbGwgdGhlIGVuZHBvaW50cyBmb3IgdGhlIGludGVyZmFjZSdzIGN1cnJlbnQgYWx0c2V0dGluZy4KKyAqLwordm9pZCB1c2JfZGlzYWJsZV9pbnRlcmZhY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0ID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWx0LT5kZXNjLmJOdW1FbmRwb2ludHM7ICsraSkgeworCQl1c2JfZGlzYWJsZV9lbmRwb2ludChkZXYsCisJCQkJYWx0LT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOworCX0KK30KKworLyoKKyAqIHVzYl9kaXNhYmxlX2RldmljZSAtIERpc2FibGUgYWxsIHRoZSBlbmRwb2ludHMgZm9yIGEgVVNCIGRldmljZQorICogQGRldjogdGhlIGRldmljZSB3aG9zZSBlbmRwb2ludHMgYXJlIGJlaW5nIGRpc2FibGVkCisgKiBAc2tpcF9lcDA6IDAgdG8gZGlzYWJsZSBlbmRwb2ludCAwLCAxIHRvIHNraXAgaXQuCisgKgorICogRGlzYWJsZXMgYWxsIHRoZSBkZXZpY2UncyBlbmRwb2ludHMsIHBvdGVudGlhbGx5IGluY2x1ZGluZyBlbmRwb2ludCAwLgorICogRGVhbGxvY2F0ZXMgaGNkL2hhcmR3YXJlIHN0YXRlIGZvciB0aGUgZW5kcG9pbnRzIChudWtpbmcgYWxsIG9yIG1vc3QKKyAqIHBlbmRpbmcgdXJicykgYW5kIHVzYmNvcmUgc3RhdGUgZm9yIHRoZSBpbnRlcmZhY2VzLCBzbyB0aGF0IHVzYmNvcmUKKyAqIG11c3QgdXNiX3NldF9jb25maWd1cmF0aW9uKCkgYmVmb3JlIGFueSBpbnRlcmZhY2VzIGNvdWxkIGJlIHVzZWQuCisgKi8KK3ZvaWQgdXNiX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBza2lwX2VwMCkKK3sKKwlpbnQgaTsKKworCWRldl9kYmcoJmRldi0+ZGV2LCAiJXMgbnVraW5nICVzIFVSQnNcbiIsIF9fRlVOQ1RJT05fXywKKwkJCXNraXBfZXAwID8gIm5vbi1lcDAiIDogImFsbCIpOworCWZvciAoaSA9IHNraXBfZXAwOyBpIDwgMTY7ICsraSkgeworCQl1c2JfZGlzYWJsZV9lbmRwb2ludChkZXYsIGkpOworCQl1c2JfZGlzYWJsZV9lbmRwb2ludChkZXYsIGkgKyBVU0JfRElSX0lOKTsKKwl9CisJZGV2LT50b2dnbGVbMF0gPSBkZXYtPnRvZ2dsZVsxXSA9IDA7CisKKwkvKiBnZXR0aW5nIHJpZCBvZiBpbnRlcmZhY2VzIHdpbGwgZGlzY29ubmVjdAorCSAqIGFueSBkcml2ZXJzIGJvdW5kIHRvIHRoZW0gKGEga2V5IHNpZGUgZWZmZWN0KQorCSAqLworCWlmIChkZXYtPmFjdGNvbmZpZykgeworCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgeworCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGVyZmFjZTsKKworCQkJLyogcmVtb3ZlIHRoaXMgaW50ZXJmYWNlICovCisJCQlpbnRlcmZhY2UgPSBkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldOworCQkJZGV2X2RiZyAoJmRldi0+ZGV2LCAidW5yZWdpc3RlcmluZyBpbnRlcmZhY2UgJXNcbiIsCisJCQkJaW50ZXJmYWNlLT5kZXYuYnVzX2lkKTsKKwkJCXVzYl9yZW1vdmVfc3lzZnNfaW50Zl9maWxlcyhpbnRlcmZhY2UpOworCQkJa2ZyZWUoaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+c3RyaW5nKTsKKwkJCWludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPnN0cmluZyA9IE5VTEw7CisJCQlkZXZpY2VfZGVsICgmaW50ZXJmYWNlLT5kZXYpOworCQl9CisKKwkJLyogTm93IHRoYXQgdGhlIGludGVyZmFjZXMgYXJlIHVuYm91bmQsIG5vYm9keSBzaG91bGQKKwkJICogdHJ5IHRvIGFjY2VzcyB0aGVtLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IGRldi0+YWN0Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyBpKyspIHsKKwkJCXB1dF9kZXZpY2UgKCZkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldLT5kZXYpOworCQkJZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVtpXSA9IE5VTEw7CisJCX0KKwkJZGV2LT5hY3Rjb25maWcgPSBOVUxMOworCQlpZiAoZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfQ09ORklHVVJFRCkKKwkJCXVzYl9zZXRfZGV2aWNlX3N0YXRlKGRldiwgVVNCX1NUQVRFX0FERFJFU1MpOworCX0KK30KKworCisvKgorICogdXNiX2VuYWJsZV9lbmRwb2ludCAtIEVuYWJsZSBhbiBlbmRwb2ludCBmb3IgVVNCIGNvbW11bmljYXRpb25zCisgKiBAZGV2OiB0aGUgZGV2aWNlIHdob3NlIGludGVyZmFjZSBpcyBiZWluZyBlbmFibGVkCisgKiBAZXA6IHRoZSBlbmRwb2ludAorICoKKyAqIFJlc2V0cyB0aGUgZW5kcG9pbnQgdG9nZ2xlLCBhbmQgc2V0cyBkZXYtPmVwX3tpbixvdXR9IHBvaW50ZXJzLgorICogRm9yIGNvbnRyb2wgZW5kcG9pbnRzLCBib3RoIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHNpZGVzIGFyZSBoYW5kbGVkLgorICovCitzdGF0aWMgdm9pZAordXNiX2VuYWJsZV9lbmRwb2ludChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKQoreworCXVuc2lnbmVkIGludCBlcGFkZHIgPSBlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCXVuc2lnbmVkIGludCBlcG51bSA9IGVwYWRkciAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKKwlpbnQgaXNfY29udHJvbDsKKworCWlzX2NvbnRyb2wgPSAoKGVwLT5kZXNjLmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQorCQkJPT0gVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCk7CisJaWYgKHVzYl9lbmRwb2ludF9vdXQoZXBhZGRyKSB8fCBpc19jb250cm9sKSB7CisJCXVzYl9zZXR0b2dnbGUoZGV2LCBlcG51bSwgMSwgMCk7CisJCWRldi0+ZXBfb3V0W2VwbnVtXSA9IGVwOworCX0KKwlpZiAoIXVzYl9lbmRwb2ludF9vdXQoZXBhZGRyKSB8fCBpc19jb250cm9sKSB7CisJCXVzYl9zZXR0b2dnbGUoZGV2LCBlcG51bSwgMCwgMCk7CisJCWRldi0+ZXBfaW5bZXBudW1dID0gZXA7CisJfQorfQorCisvKgorICogdXNiX2VuYWJsZV9pbnRlcmZhY2UgLSBFbmFibGUgYWxsIHRoZSBlbmRwb2ludHMgZm9yIGFuIGludGVyZmFjZQorICogQGRldjogdGhlIGRldmljZSB3aG9zZSBpbnRlcmZhY2UgaXMgYmVpbmcgZW5hYmxlZAorICogQGludGY6IHBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSBkZXNjcmlwdG9yCisgKgorICogRW5hYmxlcyBhbGwgdGhlIGVuZHBvaW50cyBmb3IgdGhlIGludGVyZmFjZSdzIGN1cnJlbnQgYWx0c2V0dGluZy4KKyAqLworc3RhdGljIHZvaWQgdXNiX2VuYWJsZV9pbnRlcmZhY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0ID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWx0LT5kZXNjLmJOdW1FbmRwb2ludHM7ICsraSkKKwkJdXNiX2VuYWJsZV9lbmRwb2ludChkZXYsICZhbHQtPmVuZHBvaW50W2ldKTsKK30KKworLyoqCisgKiB1c2Jfc2V0X2ludGVyZmFjZSAtIE1ha2VzIGEgcGFydGljdWxhciBhbHRlcm5hdGUgc2V0dGluZyBiZSBjdXJyZW50CisgKiBAZGV2OiB0aGUgZGV2aWNlIHdob3NlIGludGVyZmFjZSBpcyBiZWluZyB1cGRhdGVkCisgKiBAaW50ZXJmYWNlOiB0aGUgaW50ZXJmYWNlIGJlaW5nIHVwZGF0ZWQKKyAqIEBhbHRlcm5hdGU6IHRoZSBzZXR0aW5nIGJlaW5nIGNob3Nlbi4KKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQgKCkKKyAqCisgKiBUaGlzIGlzIHVzZWQgdG8gZW5hYmxlIGRhdGEgdHJhbnNmZXJzIG9uIGludGVyZmFjZXMgdGhhdCBtYXkgbm90CisgKiBiZSBlbmFibGVkIGJ5IGRlZmF1bHQuICBOb3QgYWxsIGRldmljZXMgc3VwcG9ydCBzdWNoIGNvbmZpZ3VyYWJpbGl0eS4KKyAqIE9ubHkgdGhlIGRyaXZlciBib3VuZCB0byBhbiBpbnRlcmZhY2UgbWF5IGNoYW5nZSBpdHMgc2V0dGluZy4KKyAqCisgKiBXaXRoaW4gYW55IGdpdmVuIGNvbmZpZ3VyYXRpb24sIGVhY2ggaW50ZXJmYWNlIG1heSBoYXZlIHNldmVyYWwKKyAqIGFsdGVybmF0aXZlIHNldHRpbmdzLiAgVGhlc2UgYXJlIG9mdGVuIHVzZWQgdG8gY29udHJvbCBsZXZlbHMgb2YKKyAqIGJhbmR3aWR0aCBjb25zdW1wdGlvbi4gIEZvciBleGFtcGxlLCB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciBhIGhpZ2gKKyAqIHNwZWVkIGludGVycnVwdCBlbmRwb2ludCBtYXkgbm90IHNlbmQgbW9yZSB0aGFuIDY0IGJ5dGVzIHBlciBtaWNyb2ZyYW1lLAorICogd2hpbGUgaW50ZXJydXB0IHRyYW5zZmVycyBvZiB1cCB0byAzS0J5dGVzIHBlciBtaWNyb2ZyYW1lIGFyZSBsZWdhbC4KKyAqIEFsc28sIGlzb2Nocm9ub3VzIGVuZHBvaW50cyBtYXkgbmV2ZXIgYmUgcGFydCBvZiBhbgorICogaW50ZXJmYWNlJ3MgZGVmYXVsdCBzZXR0aW5nLiAgVG8gYWNjZXNzIHN1Y2ggYmFuZHdpZHRoLCBhbHRlcm5hdGUKKyAqIGludGVyZmFjZSBzZXR0aW5ncyBtdXN0IGJlIG1hZGUgY3VycmVudC4KKyAqCisgKiBOb3RlIHRoYXQgaW4gdGhlIExpbnV4IFVTQiBzdWJzeXN0ZW0sIGJhbmR3aWR0aCBhc3NvY2lhdGVkIHdpdGgKKyAqIGFuIGVuZHBvaW50IGluIGEgZ2l2ZW4gYWx0ZXJuYXRlIHNldHRpbmcgaXMgbm90IHJlc2VydmVkIHVudGlsIGFuIFVSQgorICogaXMgc3VibWl0dGVkIHRoYXQgbmVlZHMgdGhhdCBiYW5kd2lkdGguICBTb21lIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zCisgKiBhbGxvY2F0ZSBiYW5kd2lkdGggZWFybHksIHdoZW4gYSBjb25maWd1cmF0aW9uIGlzIGNob3Nlbi4KKyAqCisgKiBUaGlzIGNhbGwgaXMgc3luY2hyb25vdXMsIGFuZCBtYXkgbm90IGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuCisgKiBBbHNvLCBkcml2ZXJzIG11c3Qgbm90IGNoYW5nZSBhbHRzZXR0aW5ncyB3aGlsZSB1cmJzIGFyZSBzY2hlZHVsZWQgZm9yCisgKiBlbmRwb2ludHMgaW4gdGhhdCBpbnRlcmZhY2U7IGFsbCBzdWNoIHVyYnMgbXVzdCBmaXJzdCBiZSBjb21wbGV0ZWQKKyAqIChwZXJoYXBzIGZvcmNlZCBieSB1bmxpbmtpbmcpLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBvciBlbHNlIHRoZSBzdGF0dXMgY29kZSByZXR1cm5lZCBieSB0aGUKKyAqIHVuZGVybHlpbmcgdXNiX2NvbnRyb2xfbXNnKCkgY2FsbC4KKyAqLworaW50IHVzYl9zZXRfaW50ZXJmYWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBpbnRlcmZhY2UsIGludCBhbHRlcm5hdGUpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdDsKKwlpbnQgcmV0OworCWludCBtYW51YWwgPSAwOworCisJaWYgKGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKKwkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CisKKwlpZmFjZSA9IHVzYl9pZm51bV90b19pZihkZXYsIGludGVyZmFjZSk7CisJaWYgKCFpZmFjZSkgeworCQlkZXZfZGJnKCZkZXYtPmRldiwgInNlbGVjdGluZyBpbnZhbGlkIGludGVyZmFjZSAlZFxuIiwKKwkJCWludGVyZmFjZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWFsdCA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpZmFjZSwgYWx0ZXJuYXRlKTsKKwlpZiAoIWFsdCkgeworCQl3YXJuKCJzZWxlY3RpbmcgaW52YWxpZCBhbHRzZXR0aW5nICVkIiwgYWx0ZXJuYXRlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkJICAgVVNCX1JFUV9TRVRfSU5URVJGQUNFLCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJCSAgIGFsdGVybmF0ZSwgaW50ZXJmYWNlLCBOVUxMLCAwLCA1MDAwKTsKKworCS8qIDkuNC4xMCBzYXlzIGRldmljZXMgZG9uJ3QgbmVlZCB0aGlzIGFuZCBhcmUgZnJlZSB0byBTVEFMTCB0aGUKKwkgKiByZXF1ZXN0IGlmIHRoZSBpbnRlcmZhY2Ugb25seSBoYXMgb25lIGFsdGVybmF0ZSBzZXR0aW5nLgorCSAqLworCWlmIChyZXQgPT0gLUVQSVBFICYmIGlmYWNlLT5udW1fYWx0c2V0dGluZyA9PSAxKSB7CisJCWRldl9kYmcoJmRldi0+ZGV2LAorCQkJIm1hbnVhbCBzZXRfaW50ZXJmYWNlIGZvciBpZmFjZSAlZCwgYWx0ICVkXG4iLAorCQkJaW50ZXJmYWNlLCBhbHRlcm5hdGUpOworCQltYW51YWwgPSAxOworCX0gZWxzZSBpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEZJWE1FIGRyaXZlcnMgc2hvdWxkbid0IG5lZWQgdG8gcmVwbGljYXRlL2J1Z2ZpeCB0aGUgbG9naWMgaGVyZQorCSAqIHdoZW4gdGhleSBpbXBsZW1lbnQgYXN5bmMgb3IgZWFzaWx5LWtpbGxhYmxlIHZlcnNpb25zIG9mIHRoaXMgb3IKKwkgKiBvdGhlciAic2hvdWxkLWJlLWludGVybmFsIiBmdW5jdGlvbnMgKGxpa2UgY2xlYXJfaGFsdCkuCisJICogc2hvdWxkIGhjZCt1c2Jjb3JlIHBvc3Rwcm9jZXNzIGNvbnRyb2wgcmVxdWVzdHM/CisJICovCisKKwkvKiBwcmV2ZW50IHN1Ym1pc3Npb25zIHVzaW5nIHByZXZpb3VzIGVuZHBvaW50IHNldHRpbmdzICovCisJdXNiX2Rpc2FibGVfaW50ZXJmYWNlKGRldiwgaWZhY2UpOworCisJLyogOS4xLjEuNSBzYXlzOgorCSAqCisJICoJQ29uZmlndXJpbmcgYSBkZXZpY2Ugb3IgY2hhbmdpbmcgYW4gYWx0ZXJuYXRlIHNldHRpbmcKKwkgKgljYXVzZXMgYWxsIG9mIHRoZSBzdGF0dXMgYW5kIGNvbmZpZ3VyYXRpb24gdmFsdWVzCisJICoJYXNzb2NpYXRlZCB3aXRoIGVuZHBvaW50cyBpbiB0aGUgYWZmZWN0ZWQgaW50ZXJmYWNlcyB0bworCSAqCWJlIHNldCB0byB0aGVpciBkZWZhdWx0IHZhbHVlcy4gVGhpcyBpbmNsdWRlcyBzZXR0aW5nCisJICoJdGhlIGRhdGEgdG9nZ2xlIG9mIGFueSBlbmRwb2ludCB1c2luZyBkYXRhIHRvZ2dsZXMgdG8KKwkgKgl0aGUgdmFsdWUgREFUQTAuCisJICoKKwkgKiBTb21lIGRldmljZXMgdGFrZSB0aGlzIHRvbyBsaXRlcmFsbHkgYW5kIGRvbid0IHJlc2V0IHRoZSBkYXRhCisJICogdG9nZ2xlcyBpZiB0aGUgbmV3IGFsdHNldHRpbmcgaXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBvbmUgKHRoZQorCSAqIGNvbW1hbmQgaXNuJ3QgImNoYW5naW5nIiBhbiBhbHRlcm5hdGUgc2V0dGluZykuICBXZSB3aWxsIG1hbnVhbGx5CisJICogcmVzZXQgdGhlIHRvZ2dsZXMgd2hlbiB0aGUgbmV3IGFuZCBvbGQgYWx0c2V0dGluZ3MgYXJlIHRoZSBzYW1lLgorCSAqIE1vc3QgZGV2aWNlcyB3b24ndCBuZWVkIHRoaXMsIGJ1dCBmb3J0dW5hdGVseSBpdCBkb2Vzbid0IGhhcHBlbgorCSAqIG9mdGVuLgorCSAqLworCWlmIChpZmFjZS0+Y3VyX2FsdHNldHRpbmcgPT0gYWx0KQorCQltYW51YWwgPSAxOworCWlmYWNlLT5jdXJfYWx0c2V0dGluZyA9IGFsdDsKKworCS8qIElmIHRoZSBpbnRlcmZhY2Ugb25seSBoYXMgb25lIGFsdHNldHRpbmcgYW5kIHRoZSBkZXZpY2UgZGlkbid0CisJICogYWNjZXB0IHRoZSByZXF1ZXN0IChvciB3aGVuZXZlciB0aGUgb2xkIGFsdHNldHRpbmcgaXMgdGhlIHNhbWUKKwkgKiBhcyB0aGUgbmV3IG9uZSksIHdlIGF0dGVtcHQgdG8gY2Fycnkgb3V0IHRoZSBlcXVpdmFsZW50IGFjdGlvbgorCSAqIGJ5IG1hbnVhbGx5IGNsZWFyaW5nIHRoZSBIQUxUIGZlYXR1cmUgZm9yIGVhY2ggZW5kcG9pbnQgaW4gdGhlCisJICogbmV3IGFsdHNldHRpbmcuCisJICovCisJaWYgKG1hbnVhbCkgeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgYWx0LT5kZXNjLmJOdW1FbmRwb2ludHM7IGkrKykgeworCQkJdW5zaWduZWQgaW50IGVwYWRkciA9CisJCQkJYWx0LT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJCQl1bnNpZ25lZCBpbnQgcGlwZSA9CisJX19jcmVhdGVfcGlwZShkZXYsIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyAmIGVwYWRkcikKKwl8ICh1c2JfZW5kcG9pbnRfb3V0KGVwYWRkcikgPyBVU0JfRElSX09VVCA6IFVTQl9ESVJfSU4pOworCisJCQl1c2JfY2xlYXJfaGFsdChkZXYsIHBpcGUpOworCQl9CisJfQorCisJLyogOS4xLjEuNTogcmVzZXQgdG9nZ2xlcyBmb3IgYWxsIGVuZHBvaW50cyBpbiB0aGUgbmV3IGFsdHNldHRpbmcKKwkgKgorCSAqIE5vdGU6CisJICogRGVzcGl0ZSBFUDAgaXMgYWx3YXlzIHByZXNlbnQgaW4gYWxsIGludGVyZmFjZXMvQVMsIHRoZSBsaXN0IG9mCisJICogZW5kcG9pbnRzIGZyb20gdGhlIGRlc2NyaXB0b3IgZG9lcyBub3QgY29udGFpbiBFUDAuIER1ZSB0byBpdHMKKwkgKiBvbW5pcHJlc2VuY2Ugb25lIG1pZ2h0IGV4cGVjdCBFUDAgYmVpbmcgY29uc2lkZXJlZCAiYWZmZWN0ZWQiIGJ5CisJICogYW55IFNldEludGVyZmFjZSByZXF1ZXN0IGFuZCBoZW5jZSBhc3N1bWUgdG9nZ2xlcyBuZWVkIHRvIGJlIHJlc2V0LgorCSAqIEhvd2V2ZXIsIEVQMCB0b2dnbGVzIGFyZSByZS1zeW5jZWQgZm9yIGV2ZXJ5IGluZGl2aWR1YWwgdHJhbnNmZXIKKwkgKiBkdXJpbmcgdGhlIFNFVFVQIHN0YWdlIC0gaGVuY2UgRVAwIHRvZ2dsZXMgYXJlICJkb24ndCBjYXJlIiBoZXJlLgorCSAqIChMaWtld2lzZSwgRVAwIG5ldmVyICJoYWx0cyIgb24gd2VsbCBkZXNpZ25lZCBkZXZpY2VzLikKKwkgKi8KKwl1c2JfZW5hYmxlX2ludGVyZmFjZShkZXYsIGlmYWNlKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHVzYl9yZXNldF9jb25maWd1cmF0aW9uIC0gbGlnaHR3ZWlnaHQgZGV2aWNlIHJlc2V0CisgKiBAZGV2OiB0aGUgZGV2aWNlIHdob3NlIGNvbmZpZ3VyYXRpb24gaXMgYmVpbmcgcmVzZXQKKyAqCisgKiBUaGlzIGlzc3VlcyBhIHN0YW5kYXJkIFNFVF9DT05GSUdVUkFUSU9OIHJlcXVlc3QgdG8gdGhlIGRldmljZSB1c2luZworICogdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gIFRoZSBlZmZlY3QgaXMgdG8gcmVzZXQgbW9zdCBVU0ItcmVsYXRlZAorICogc3RhdGUgaW4gdGhlIGRldmljZSwgaW5jbHVkaW5nIGludGVyZmFjZSBhbHRzZXR0aW5ncyAocmVzZXQgdG8gemVybyksCisgKiBlbmRwb2ludCBoYWx0cyAoY2xlYXJlZCksIGFuZCBkYXRhIHRvZ2dsZSAob25seSBmb3IgYnVsayBhbmQgaW50ZXJydXB0CisgKiBlbmRwb2ludHMpLiAgT3RoZXIgdXNiY29yZSBzdGF0ZSBpcyB1bmNoYW5nZWQsIGluY2x1ZGluZyBiaW5kaW5ncyBvZgorICogdXNiIGRldmljZSBkcml2ZXJzIHRvIGludGVyZmFjZXMuCisgKgorICogQmVjYXVzZSB0aGlzIGFmZmVjdHMgbXVsdGlwbGUgaW50ZXJmYWNlcywgYXZvaWQgdXNpbmcgdGhpcyB3aXRoIGNvbXBvc2l0ZQorICogKG11bHRpLWludGVyZmFjZSkgZGV2aWNlcy4gIEluc3RlYWQsIHRoZSBkcml2ZXIgZm9yIGVhY2ggaW50ZXJmYWNlIG1heQorICogdXNlIHVzYl9zZXRfaW50ZXJmYWNlKCkgb24gdGhlIGludGVyZmFjZXMgaXQgY2xhaW1zLiAgUmVzZXR0aW5nIHRoZSB3aG9sZQorICogY29uZmlndXJhdGlvbiB3b3VsZCBhZmZlY3Qgb3RoZXIgZHJpdmVycycgaW50ZXJmYWNlcy4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3Qgb3duIHRoZSBkZXZpY2UgbG9jay4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKi8KK2ludCB1c2JfcmVzZXRfY29uZmlndXJhdGlvbihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCWludAkJCWksIHJldHZhbDsKKwlzdHJ1Y3QgdXNiX2hvc3RfY29uZmlnCSpjb25maWc7CisKKwlpZiAoZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKQorCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKKworCS8qIGNhbGxlciBtdXN0IGhhdmUgbG9ja2VkIHRoZSBkZXZpY2UgYW5kIG11c3Qgb3duCisJICogdGhlIHVzYiBidXMgcmVhZGxvY2sgKHNvIGRyaXZlciBiaW5kaW5ncyBhcmUgc3RhYmxlKTsKKwkgKiBjYWxscyBkdXJpbmcgcHJvYmUoKSBhcmUgZmluZQorCSAqLworCisJZm9yIChpID0gMTsgaSA8IDE2OyArK2kpIHsKKwkJdXNiX2Rpc2FibGVfZW5kcG9pbnQoZGV2LCBpKTsKKwkJdXNiX2Rpc2FibGVfZW5kcG9pbnQoZGV2LCBpICsgVVNCX0RJUl9JTik7CisJfQorCisJY29uZmlnID0gZGV2LT5hY3Rjb25maWc7CisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQlVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OLCAwLAorCQkJY29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUsIDAsCisJCQlOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJdXNiX3NldF9kZXZpY2Vfc3RhdGUoZGV2LCBVU0JfU1RBVEVfQUREUkVTUyk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJZGV2LT50b2dnbGVbMF0gPSBkZXYtPnRvZ2dsZVsxXSA9IDA7CisKKwkvKiByZS1pbml0IGhjL2hjZCBpbnRlcmZhY2UvZW5kcG9pbnQgc3RhdGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyBpKyspIHsKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSBjb25maWctPmludGVyZmFjZVtpXTsKKwkJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0OworCisJCWFsdCA9IHVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhpbnRmLCAwKTsKKworCQkvKiBObyBhbHRzZXR0aW5nIDA/ICBXZSdsbCBhc3N1bWUgdGhlIGZpcnN0IGFsdHNldHRpbmcuCisJCSAqIFdlIGNvdWxkIHVzZSBhIEdldEludGVyZmFjZSBjYWxsLCBidXQgaWYgYSBkZXZpY2UgaXMKKwkJICogc28gbm9uLWNvbXBsaWFudCB0aGF0IGl0IGRvZXNuJ3QgaGF2ZSBhbHRzZXR0aW5nIDAKKwkJICogdGhlbiBJIHdvdWxkbid0IHRydXN0IGl0cyByZXBseSBhbnl3YXkuCisJCSAqLworCQlpZiAoIWFsdCkKKwkJCWFsdCA9ICZpbnRmLT5hbHRzZXR0aW5nWzBdOworCisJCWludGYtPmN1cl9hbHRzZXR0aW5nID0gYWx0OworCQl1c2JfZW5hYmxlX2ludGVyZmFjZShkZXYsIGludGYpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV9pbnRlcmZhY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2NhY2hlICppbnRmYyA9CisJCQlhbHRzZXR0aW5nX3RvX3VzYl9pbnRlcmZhY2VfY2FjaGUoaW50Zi0+YWx0c2V0dGluZyk7CisKKwlrcmVmX3B1dCgmaW50ZmMtPnJlZiwgdXNiX3JlbGVhc2VfaW50ZXJmYWNlX2NhY2hlKTsKKwlrZnJlZShpbnRmKTsKK30KKworLyoKKyAqIHVzYl9zZXRfY29uZmlndXJhdGlvbiAtIE1ha2VzIGEgcGFydGljdWxhciBkZXZpY2Ugc2V0dGluZyBiZSBjdXJyZW50CisgKiBAZGV2OiB0aGUgZGV2aWNlIHdob3NlIGNvbmZpZ3VyYXRpb24gaXMgYmVpbmcgdXBkYXRlZAorICogQGNvbmZpZ3VyYXRpb246IHRoZSBjb25maWd1cmF0aW9uIGJlaW5nIGNob3Nlbi4KKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKSwgY2FsbGVyIG93bnMgdGhlIGRldmljZSBsb2NrCisgKgorICogVGhpcyBpcyB1c2VkIHRvIGVuYWJsZSBub24tZGVmYXVsdCBkZXZpY2UgbW9kZXMuICBOb3QgYWxsIGRldmljZXMKKyAqIHVzZSB0aGlzIGtpbmQgb2YgY29uZmlndXJhYmlsaXR5OyBtYW55IGRldmljZXMgb25seSBoYXZlIG9uZQorICogY29uZmlndXJhdGlvbi4KKyAqCisgKiBVU0IgZGV2aWNlIGNvbmZpZ3VyYXRpb25zIG1heSBhZmZlY3QgTGludXggaW50ZXJvcGVyYWJpbGl0eSwKKyAqIHBvd2VyIGNvbnN1bXB0aW9uIGFuZCB0aGUgZnVuY3Rpb25hbGl0eSBhdmFpbGFibGUuICBGb3IgZXhhbXBsZSwKKyAqIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaXMgbGltaXRlZCB0byB1c2luZyAxMDBtQSBvZiBidXMgcG93ZXIsCisgKiBzbyB0aGF0IHdoZW4gY2VydGFpbiBkZXZpY2UgZnVuY3Rpb25hbGl0eSByZXF1aXJlcyBtb3JlIHBvd2VyLAorICogYW5kIHRoZSBkZXZpY2UgaXMgYnVzIHBvd2VyZWQsIHRoYXQgZnVuY3Rpb25hbGl0eSBzaG91bGQgYmUgaW4gc29tZQorICogbm9uLWRlZmF1bHQgZGV2aWNlIGNvbmZpZ3VyYXRpb24uICBPdGhlciBkZXZpY2UgbW9kZXMgbWF5IGFsc28gYmUKKyAqIHJlZmxlY3RlZCBhcyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHN1Y2ggYXMgd2hldGhlciB0d28gSVNETgorICogY2hhbm5lbHMgYXJlIGF2YWlsYWJsZSBpbmRlcGVuZGVudGx5OyBhbmQgY2hvb3NpbmcgYmV0d2VlbiBvcGVuCisgKiBzdGFuZGFyZCBkZXZpY2UgcHJvdG9jb2xzIChsaWtlIENEQykgb3IgcHJvcHJpZXRhcnkgb25lcy4KKyAqCisgKiBOb3RlIHRoYXQgVVNCIGhhcyBhbiBhZGRpdGlvbmFsIGxldmVsIG9mIGRldmljZSBjb25maWd1cmFiaWxpdHksCisgKiBhc3NvY2lhdGVkIHdpdGggaW50ZXJmYWNlcy4gIFRoYXQgY29uZmlndXJhYmlsaXR5IGlzIGFjY2Vzc2VkIHVzaW5nCisgKiB1c2Jfc2V0X2ludGVyZmFjZSgpLgorICoKKyAqIFRoaXMgY2FsbCBpcyBzeW5jaHJvbm91cy4gVGhlIGNhbGxpbmcgY29udGV4dCBtdXN0IGJlIGFibGUgdG8gc2xlZXAsCisgKiBtdXN0IG93biB0aGUgZGV2aWNlIGxvY2ssIGFuZCBtdXN0IG5vdCBob2xkIHRoZSBkcml2ZXIgbW9kZWwncyBVU0IKKyAqIGJ1cyByd3NlbTsgdXNiIGRldmljZSBkcml2ZXIgcHJvYmUoKSBtZXRob2RzIGNhbm5vdCB1c2UgdGhpcyByb3V0aW5lLgorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBvciBlbHNlIHRoZSBzdGF0dXMgY29kZSByZXR1cm5lZCBieSB0aGUKKyAqIHVuZGVybHlpbmcgY2FsbCB0aGF0IGZhaWxlZC4gIE9uIHN1Y2Nlc2Z1bCBjb21wbGV0aW9uLCBlYWNoIGludGVyZmFjZQorICogaW4gdGhlIG9yaWdpbmFsIGRldmljZSBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGRlc3Ryb3llZCwgYW5kIGVhY2ggb25lCisgKiBpbiB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gcHJvYmVkIGJ5IGFsbCByZWxldmFudCB1c2IgZGV2aWNlCisgKiBkcml2ZXJzIGN1cnJlbnRseSBrbm93biB0byB0aGUga2VybmVsLgorICovCitpbnQgdXNiX3NldF9jb25maWd1cmF0aW9uKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBjb25maWd1cmF0aW9uKQoreworCWludCBpLCByZXQ7CisJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqY3AgPSBOVUxMOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICoqbmV3X2ludGVyZmFjZXMgPSBOVUxMOworCWludCBuLCBuaW50ZjsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zOyBpKyspIHsKKwkJaWYgKGRldi0+Y29uZmlnW2ldLmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9PSBjb25maWd1cmF0aW9uKSB7CisJCQljcCA9ICZkZXYtPmNvbmZpZ1tpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICgoIWNwICYmIGNvbmZpZ3VyYXRpb24gIT0gMCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogVGhlIFVTQiBzcGVjIHNheXMgY29uZmlndXJhdGlvbiAwIG1lYW5zIHVuY29uZmlndXJlZC4KKwkgKiBCdXQgaWYgYSBkZXZpY2UgaW5jbHVkZXMgYSBjb25maWd1cmF0aW9uIG51bWJlcmVkIDAsCisJICogd2Ugd2lsbCBhY2NlcHQgaXQgYXMgYSBjb3JyZWN0bHkgY29uZmlndXJlZCBzdGF0ZS4KKwkgKi8KKwlpZiAoY3AgJiYgY29uZmlndXJhdGlvbiA9PSAwKQorCQlkZXZfd2FybigmZGV2LT5kZXYsICJjb25maWcgMCBkZXNjcmlwdG9yPz9cbiIpOworCisJaWYgKGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKKwkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIG5ldyBpbnRlcmZhY2VzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLAorCSAqIHNvIHRoYXQgaWYgd2UgcnVuIG91dCB0aGVuIG5vdGhpbmcgd2lsbCBoYXZlIGNoYW5nZWQuICovCisJbiA9IG5pbnRmID0gMDsKKwlpZiAoY3ApIHsKKwkJbmludGYgPSBjcC0+ZGVzYy5iTnVtSW50ZXJmYWNlczsKKwkJbmV3X2ludGVyZmFjZXMgPSBrbWFsbG9jKG5pbnRmICogc2l6ZW9mKCpuZXdfaW50ZXJmYWNlcyksCisJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghbmV3X2ludGVyZmFjZXMpIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiT3V0IG9mIG1lbW9yeSIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlmb3IgKDsgbiA8IG5pbnRmOyArK24pIHsKKwkJCW5ld19pbnRlcmZhY2VzW25dID0ga21hbGxvYygKKwkJCQkJc2l6ZW9mKHN0cnVjdCB1c2JfaW50ZXJmYWNlKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCQlpZiAoIW5ld19pbnRlcmZhY2VzW25dKSB7CisJCQkJZGV2X2VycigmZGV2LT5kZXYsICJPdXQgb2YgbWVtb3J5Iik7CisJCQkJcmV0ID0gLUVOT01FTTsKK2ZyZWVfaW50ZXJmYWNlczoKKwkJCQl3aGlsZSAoLS1uID49IDApCisJCQkJCWtmcmVlKG5ld19pbnRlcmZhY2VzW25dKTsKKwkJCQlrZnJlZShuZXdfaW50ZXJmYWNlcyk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0KKworCS8qIGlmIGl0J3MgYWxyZWFkeSBjb25maWd1cmVkLCBjbGVhciBvdXQgb2xkIHN0YXRlIGZpcnN0LgorCSAqIGdldHRpbmcgcmlkIG9mIG9sZCBpbnRlcmZhY2VzIG1lYW5zIHVuYmluZGluZyB0aGVpciBkcml2ZXJzLgorCSAqLworCWlmIChkZXYtPnN0YXRlICE9IFVTQl9TVEFURV9BRERSRVNTKQorCQl1c2JfZGlzYWJsZV9kZXZpY2UgKGRldiwgMSk7CS8vIFNraXAgZXAwCisKKwlpZiAoKHJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTiwgMCwgY29uZmlndXJhdGlvbiwgMCwKKwkJCU5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKSkgPCAwKQorCQlnb3RvIGZyZWVfaW50ZXJmYWNlczsKKworCWRldi0+YWN0Y29uZmlnID0gY3A7CisJaWYgKCFjcCkKKwkJdXNiX3NldF9kZXZpY2Vfc3RhdGUoZGV2LCBVU0JfU1RBVEVfQUREUkVTUyk7CisJZWxzZSB7CisJCXVzYl9zZXRfZGV2aWNlX3N0YXRlKGRldiwgVVNCX1NUQVRFX0NPTkZJR1VSRUQpOworCisJCS8qIEluaXRpYWxpemUgdGhlIG5ldyBpbnRlcmZhY2Ugc3RydWN0dXJlcyBhbmQgdGhlCisJCSAqIGhjL2hjZC91c2Jjb3JlIGludGVyZmFjZS9lbmRwb2ludCBzdGF0ZS4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBuaW50ZjsgKytpKSB7CisJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9jYWNoZSAqaW50ZmM7CisJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwkJCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdDsKKworCQkJY3AtPmludGVyZmFjZVtpXSA9IGludGYgPSBuZXdfaW50ZXJmYWNlc1tpXTsKKwkJCW1lbXNldChpbnRmLCAwLCBzaXplb2YoKmludGYpKTsKKwkJCWludGZjID0gY3AtPmludGZfY2FjaGVbaV07CisJCQlpbnRmLT5hbHRzZXR0aW5nID0gaW50ZmMtPmFsdHNldHRpbmc7CisJCQlpbnRmLT5udW1fYWx0c2V0dGluZyA9IGludGZjLT5udW1fYWx0c2V0dGluZzsKKwkJCWtyZWZfZ2V0KCZpbnRmYy0+cmVmKTsKKworCQkJYWx0ID0gdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKGludGYsIDApOworCisJCQkvKiBObyBhbHRzZXR0aW5nIDA/ICBXZSdsbCBhc3N1bWUgdGhlIGZpcnN0IGFsdHNldHRpbmcuCisJCQkgKiBXZSBjb3VsZCB1c2UgYSBHZXRJbnRlcmZhY2UgY2FsbCwgYnV0IGlmIGEgZGV2aWNlIGlzCisJCQkgKiBzbyBub24tY29tcGxpYW50IHRoYXQgaXQgZG9lc24ndCBoYXZlIGFsdHNldHRpbmcgMAorCQkJICogdGhlbiBJIHdvdWxkbid0IHRydXN0IGl0cyByZXBseSBhbnl3YXkuCisJCQkgKi8KKwkJCWlmICghYWx0KQorCQkJCWFsdCA9ICZpbnRmLT5hbHRzZXR0aW5nWzBdOworCisJCQlpbnRmLT5jdXJfYWx0c2V0dGluZyA9IGFsdDsKKwkJCXVzYl9lbmFibGVfaW50ZXJmYWNlKGRldiwgaW50Zik7CisJCQlpbnRmLT5kZXYucGFyZW50ID0gJmRldi0+ZGV2OworCQkJaW50Zi0+ZGV2LmRyaXZlciA9IE5VTEw7CisJCQlpbnRmLT5kZXYuYnVzID0gJnVzYl9idXNfdHlwZTsKKwkJCWludGYtPmRldi5kbWFfbWFzayA9IGRldi0+ZGV2LmRtYV9tYXNrOworCQkJaW50Zi0+ZGV2LnJlbGVhc2UgPSByZWxlYXNlX2ludGVyZmFjZTsKKwkJCWRldmljZV9pbml0aWFsaXplICgmaW50Zi0+ZGV2KTsKKwkJCXNwcmludGYgKCZpbnRmLT5kZXYuYnVzX2lkWzBdLCAiJWQtJXM6JWQuJWQiLAorCQkJCSBkZXYtPmJ1cy0+YnVzbnVtLCBkZXYtPmRldnBhdGgsCisJCQkJIGNvbmZpZ3VyYXRpb24sCisJCQkJIGFsdC0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKwkJfQorCQlrZnJlZShuZXdfaW50ZXJmYWNlcyk7CisKKwkJaWYgKChjcC0+ZGVzYy5pQ29uZmlndXJhdGlvbikgJiYKKwkJICAgIChjcC0+c3RyaW5nID09IE5VTEwpKSB7CisJCQljcC0+c3RyaW5nID0ga21hbGxvYygyNTYsIEdGUF9LRVJORUwpOworCQkJaWYgKGNwLT5zdHJpbmcpCisJCQkJdXNiX3N0cmluZyhkZXYsIGNwLT5kZXNjLmlDb25maWd1cmF0aW9uLCBjcC0+c3RyaW5nLCAyNTYpOworCQl9CisKKwkJLyogTm93IHRoYXQgYWxsIHRoZSBpbnRlcmZhY2VzIGFyZSBzZXQgdXAsIHJlZ2lzdGVyIHRoZW0KKwkJICogdG8gdHJpZ2dlciBiaW5kaW5nIG9mIGRyaXZlcnMgdG8gaW50ZXJmYWNlcy4gIHByb2JlKCkKKwkJICogcm91dGluZXMgbWF5IGluc3RhbGwgZGlmZmVyZW50IGFsdHNldHRpbmdzIGFuZCBtYXkKKwkJICogY2xhaW0oKSBhbnkgaW50ZXJmYWNlcyBub3QgeWV0IGJvdW5kLiAgTWFueSBjbGFzcyBkcml2ZXJzCisJCSAqIG5lZWQgdGhhdDogQ0RDLCBhdWRpbywgdmlkZW8sIGV0Yy4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBuaW50ZjsgKytpKSB7CisJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IGNwLT5pbnRlcmZhY2VbaV07CisJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICpkZXNjOworCisJCQlkZXNjID0gJmludGYtPmFsdHNldHRpbmcgWzBdLmRlc2M7CisJCQlkZXZfZGJnICgmZGV2LT5kZXYsCisJCQkJImFkZGluZyAlcyAoY29uZmlnICMlZCwgaW50ZXJmYWNlICVkKVxuIiwKKwkJCQlpbnRmLT5kZXYuYnVzX2lkLCBjb25maWd1cmF0aW9uLAorCQkJCWRlc2MtPmJJbnRlcmZhY2VOdW1iZXIpOworCQkJcmV0ID0gZGV2aWNlX2FkZCAoJmludGYtPmRldik7CisJCQlpZiAocmV0ICE9IDApIHsKKwkJCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCQkJImRldmljZV9hZGQoJXMpIC0tPiAlZFxuIiwKKwkJCQkJaW50Zi0+ZGV2LmJ1c19pZCwKKwkJCQkJcmV0KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICgoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuaUludGVyZmFjZSkgJiYKKwkJCSAgICAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPnN0cmluZyA9PSBOVUxMKSkgeworCQkJCWludGYtPmN1cl9hbHRzZXR0aW5nLT5zdHJpbmcgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5zdHJpbmcpCisJCQkJCXVzYl9zdHJpbmcoZGV2LCBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5pSW50ZXJmYWNlLAorCQkJCQkJICAgaW50Zi0+Y3VyX2FsdHNldHRpbmctPnN0cmluZywgMjU2KTsKKwkJCX0KKwkJCXVzYl9jcmVhdGVfc3lzZnNfaW50Zl9maWxlcyAoaW50Zik7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvLyBzeW5jaHJvbm91cyByZXF1ZXN0IGNvbXBsZXRpb24gbW9kZWwKK0VYUE9SVF9TWU1CT0wodXNiX2NvbnRyb2xfbXNnKTsKK0VYUE9SVF9TWU1CT0wodXNiX2J1bGtfbXNnKTsKKworRVhQT1JUX1NZTUJPTCh1c2Jfc2dfaW5pdCk7CitFWFBPUlRfU1lNQk9MKHVzYl9zZ19jYW5jZWwpOworRVhQT1JUX1NZTUJPTCh1c2Jfc2dfd2FpdCk7CisKKy8vIHN5bmNocm9ub3VzIGNvbnRyb2wgbWVzc2FnZSBjb252ZW5pZW5jZSByb3V0aW5lcworRVhQT1JUX1NZTUJPTCh1c2JfZ2V0X2Rlc2NyaXB0b3IpOworRVhQT1JUX1NZTUJPTCh1c2JfZ2V0X3N0YXR1cyk7CitFWFBPUlRfU1lNQk9MKHVzYl9nZXRfc3RyaW5nKTsKK0VYUE9SVF9TWU1CT0wodXNiX3N0cmluZyk7CisKKy8vIHN5bmNocm9ub3VzIGNhbGxzIHRoYXQgYWxzbyBtYWludGFpbiB1c2Jjb3JlIHN0YXRlCitFWFBPUlRfU1lNQk9MKHVzYl9jbGVhcl9oYWx0KTsKK0VYUE9SVF9TWU1CT0wodXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24pOworRVhQT1JUX1NZTUJPTCh1c2Jfc2V0X2ludGVyZmFjZSk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvb3RnX3doaXRlbGlzdC5oIGIvZHJpdmVycy91c2IvY29yZS9vdGdfd2hpdGVsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3YTVhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvb3RnX3doaXRlbGlzdC5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogZHJpdmVycy91c2IvY29yZS9vdGdfd2hpdGVsaXN0LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qCisgKiBUaGlzIE9URyBXaGl0ZWxpc3QgaXMgdGhlIE9URyAiVGFyZ2V0ZWQgUGVyaXBoZXJhbCBMaXN0Ii4gIEl0IHNob3VsZAorICogbW9zdGx5IHVzZSBvZiBVU0JfREVWSUNFKCkgb3IgVVNCX0RFVklDRV9WRVIoKSBlbnRyaWVzLi4KKyAqCisgKiBZT1UgX1NIT1VMRF8gQ0hBTkdFIFRISVMgTElTVCBUTyBNQVRDSCBZT1VSIFBST0RVQ1QgQU5EIElUUyBURVNUSU5HIQorICovIAorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgd2hpdGVsaXN0X3RhYmxlIFtdID0geworCisvKiBodWJzIGFyZSBvcHRpb25hbCBpbiBPVEcsIGJ1dCB2ZXJ5IGhhbmR5IC4uLiAqLworeyBVU0JfREVWSUNFX0lORk8oVVNCX0NMQVNTX0hVQiwgMCwgMCksIH0sCit7IFVTQl9ERVZJQ0VfSU5GTyhVU0JfQ0xBU1NfSFVCLCAwLCAxKSwgfSwKKworI2lmZGVmCUNPTkZJR19VU0JfUFJJTlRFUgkJLyogaWdub3Jpbmcgbm9uc3RhdGljIGxpbmthZ2UhICovCisvKiBGSVhNRSBhY3R1YWxseSwgcHJpbnRlcnMgYXJlIE5PVCBzdXBwb3NlZCB0byB1c2UgZGV2aWNlIGNsYXNzZXM7CisgKiB0aGV5J3JlIHN1cHBvc2VkIHRvIHVzZSBpbnRlcmZhY2UgY2xhc3Nlcy4uLgorICovCit7IFVTQl9ERVZJQ0VfSU5GTyg3LCAxLCAxKSB9LAoreyBVU0JfREVWSUNFX0lORk8oNywgMSwgMikgfSwKK3sgVVNCX0RFVklDRV9JTkZPKDcsIDEsIDMpIH0sCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19VU0JfQ0RDRVRIRVIKKy8qIExpbnV4LVVTQiBDREMgRXRoZXJuZXQgZ2FkZ2V0ICovCit7IFVTQl9ERVZJQ0UoMHgwNTI1LCAweGE0YTEpLCB9LAorLyogTGludXgtVVNCIENEQyBFdGhlcm5ldCArIFJORElTIGdhZGdldCAqLworeyBVU0JfREVWSUNFKDB4MDUyNSwgMHhhNGEyKSwgfSwKKyNlbmRpZgorCisjaWYJZGVmaW5lZChDT05GSUdfVVNCX1RFU1QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9URVNUX01PRFVMRSkKKy8qIGdhZGdldCB6ZXJvLCBmb3IgdGVzdGluZyAqLworeyBVU0JfREVWSUNFKDB4MDUyNSwgMHhhNGEwKSwgfSwKKyNlbmRpZgorCit7IH0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK3N0YXRpYyBpbnQgaXNfdGFyZ2V0ZWQoc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZV9pZAkqaWQgPSB3aGl0ZWxpc3RfdGFibGU7CisKKwkvKiBwb3NzaWJsZSBpbiBkZXZlbG9wZXIgY29uZmlncyBvbmx5ISAqLworCWlmICghZGV2LT5idXMtPm90Z19wb3J0KQorCQlyZXR1cm4gMTsKKworCS8qIEhOUCB0ZXN0IGRldmljZSBpcyBfbmV2ZXJfIHRhcmdldGVkIChzZWUgT1RHIHNwZWMgNi42LjYpICovCisJaWYgKChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IDB4MWEwYSAmJiAKKwkgICAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4YmFkZCkpCisJCXJldHVybiAwOworCisJLyogTk9URTogY2FuJ3QgdXNlIHVzYl9tYXRjaF9pZCgpIHNpbmNlIGludGVyZmFjZSBjYWNoZXMKKwkgKiBhcmVuJ3Qgc2V0IHVwIHlldC4gdGhpcyBpcyBjdXQvcGFzdGUgZnJvbSB0aGF0IGNvZGUuCisJICovCisJZm9yIChpZCA9IHdoaXRlbGlzdF90YWJsZTsgaWQtPm1hdGNoX2ZsYWdzOyBpZCsrKSB7CisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IpICYmCisJCSAgICBpZC0+aWRWZW5kb3IgIT0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9QUk9EVUNUKSAmJgorCQkgICAgaWQtPmlkUHJvZHVjdCAhPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSkKKwkJCWNvbnRpbnVlOworCisJCS8qIE5vIG5lZWQgdG8gdGVzdCBpZC0+YmNkRGV2aWNlX2xvICE9IDAsIHNpbmNlIDAgaXMgbmV2ZXIKKwkJICAgZ3JlYXRlciB0aGFuIGFueSB1bnNpZ25lZCBudW1iZXIuICovCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfTE8pICYmCisJCSAgICAoaWQtPmJjZERldmljZV9sbyA+IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfSEkpICYmCisJCSAgICAoaWQtPmJjZERldmljZV9oaSA8IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfQ0xBU1MpICYmCisJCSAgICAoaWQtPmJEZXZpY2VDbGFzcyAhPSBkZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfU1VCQ0xBU1MpICYmCisJCSAgICAoaWQtPmJEZXZpY2VTdWJDbGFzcyE9IGRldi0+ZGVzY3JpcHRvci5iRGV2aWNlU3ViQ2xhc3MpKQorCQkJY29udGludWU7CisKKwkJaWYgKChpZC0+bWF0Y2hfZmxhZ3MgJiBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9QUk9UT0NPTCkgJiYKKwkJICAgIChpZC0+YkRldmljZVByb3RvY29sICE9IGRldi0+ZGVzY3JpcHRvci5iRGV2aWNlUHJvdG9jb2wpKQorCQkJY29udGludWU7CisKKwkJcmV0dXJuIDE7CisJfQorCisJLyogYWRkIG90aGVyIG1hdGNoIGNyaXRlcmlhIGhlcmUgLi4uICovCisKKworCS8qIE9URyBNRVNTQUdFOiByZXBvcnQgZXJyb3JzIGhlcmUsIGN1c3RvbWl6ZSB0byBtYXRjaCB5b3VyIHByb2R1Y3QgKi8KKwlkZXZfZXJyKCZkZXYtPmRldiwgImRldmljZSB2JTA0eCBwJTA0eCBpcyBub3Qgc3VwcG9ydGVkXG4iLAorCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisjaWZkZWYJQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUCisJcmV0dXJuIDA7CisjZWxzZQorCXJldHVybiAxOworI2VuZGlmCit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYyBiL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzliM2JkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCkBAIC0wLDAgKzEsMzE4IEBACisvKgorICogZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCisgKgorICogKEMpIENvcHlyaWdodCAyMDAyIERhdmlkIEJyb3duZWxsCisgKiAoQykgQ29weXJpZ2h0IDIwMDIsMjAwNCBHcmVnIEtyb2FoLUhhcnRtYW4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMiwyMDA0IElCTSBDb3JwLgorICoKKyAqIEFsbCBvZiB0aGUgc3lzZnMgZmlsZSBhdHRyaWJ1dGVzIGZvciB1c2IgZGV2aWNlcyBhbmQgaW50ZXJmYWNlcy4KKyAqCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCisJI2RlZmluZSBERUJVRworI2Vsc2UKKwkjdW5kZWYgREVCVUcKKyNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSAidXNiLmgiCisKKy8qIEFjdGl2ZSBjb25maWd1cmF0aW9uIGZpZWxkcyAqLworI2RlZmluZSB1c2JfYWN0Y29uZmlnX3Nob3coZmllbGQsIG11bHRpcGxpZXIsIGZvcm1hdF9zdHJpbmcpCQlcCitzdGF0aWMgc3NpemVfdCAgc2hvd18jI2ZpZWxkIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikJCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CQkJCQlcCisJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqYWN0Y29uZmlnOwkJCQlcCisJCQkJCQkJCQlcCisJdWRldiA9IHRvX3VzYl9kZXZpY2UgKGRldik7CQkJCQlcCisJYWN0Y29uZmlnID0gdWRldi0+YWN0Y29uZmlnOwkJCQkJXAorCWlmIChhY3Rjb25maWcpCQkJCQkJCVwKKwkJcmV0dXJuIHNwcmludGYgKGJ1ZiwgZm9ybWF0X3N0cmluZywJCQlcCisJCQkJYWN0Y29uZmlnLT5kZXNjLmZpZWxkICogbXVsdGlwbGllcik7CVwKKwllbHNlCQkJCQkJCQlcCisJCXJldHVybiAwOwkJCQkJCVwKK30JCQkJCQkJCQlcCisKKyNkZWZpbmUgdXNiX2FjdGNvbmZpZ19hdHRyKGZpZWxkLCBtdWx0aXBsaWVyLCBmb3JtYXRfc3RyaW5nKQkJXAordXNiX2FjdGNvbmZpZ19zaG93KGZpZWxkLCBtdWx0aXBsaWVyLCBmb3JtYXRfc3RyaW5nKQkJCVwKK3N0YXRpYyBERVZJQ0VfQVRUUihmaWVsZCwgU19JUlVHTywgc2hvd18jI2ZpZWxkLCBOVUxMKTsKKwordXNiX2FjdGNvbmZpZ19hdHRyIChiTnVtSW50ZXJmYWNlcywgMSwgIiUyZFxuIikKK3VzYl9hY3Rjb25maWdfYXR0ciAoYm1BdHRyaWJ1dGVzLCAxLCAiJTJ4XG4iKQordXNiX2FjdGNvbmZpZ19hdHRyIChiTWF4UG93ZXIsIDIsICIlM2RtQVxuIikKKworc3RhdGljIHNzaXplX3Qgc2hvd19jb25maWd1cmF0aW9uX3N0cmluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlzdHJ1Y3QgdXNiX2hvc3RfY29uZmlnICphY3Rjb25maWc7CisJaW50IGxlbjsKKworCXVkZXYgPSB0b191c2JfZGV2aWNlIChkZXYpOworCWFjdGNvbmZpZyA9IHVkZXYtPmFjdGNvbmZpZzsKKwlpZiAoKCFhY3Rjb25maWcpIHx8ICghYWN0Y29uZmlnLT5zdHJpbmcpKQorCQlyZXR1cm4gMDsKKwlsZW4gPSBzcHJpbnRmKGJ1ZiwgYWN0Y29uZmlnLT5zdHJpbmcsIFBBR0VfU0laRSk7CisJaWYgKGxlbiA8IDApCisJCXJldHVybiAwOworCWJ1ZltsZW5dID0gJ1xuJzsKKwlidWZbbGVuKzFdID0gMDsKKwlyZXR1cm4gbGVuKzE7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoY29uZmlndXJhdGlvbiwgU19JUlVHTywgc2hvd19jb25maWd1cmF0aW9uX3N0cmluZywgTlVMTCk7CisKKy8qIGNvbmZpZ3VyYXRpb24gdmFsdWUgaXMgYWx3YXlzIHByZXNlbnQsIGFuZCByL3cgKi8KK3VzYl9hY3Rjb25maWdfc2hvdyhiQ29uZmlndXJhdGlvblZhbHVlLCAxLCAiJXVcbiIpOworCitzdGF0aWMgc3NpemVfdAorc2V0X2JDb25maWd1cmF0aW9uVmFsdWUgKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYgPSB1ZGV2ID0gdG9fdXNiX2RldmljZSAoZGV2KTsKKwlpbnQJCQljb25maWcsIHZhbHVlOworCisJaWYgKHNzY2FuZiAoYnVmLCAiJXUiLCAmY29uZmlnKSAhPSAxIHx8IGNvbmZpZyA+IDI1NSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOworCXZhbHVlID0gdXNiX3NldF9jb25maWd1cmF0aW9uICh1ZGV2LCBjb25maWcpOworCXVzYl91bmxvY2tfZGV2aWNlKHVkZXYpOworCXJldHVybiAodmFsdWUgPCAwKSA/IHZhbHVlIDogY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihiQ29uZmlndXJhdGlvblZhbHVlLCBTX0lSVUdPIHwgU19JV1VTUiwgCisJCXNob3dfYkNvbmZpZ3VyYXRpb25WYWx1ZSwgc2V0X2JDb25maWd1cmF0aW9uVmFsdWUpOworCisvKiBTdHJpbmcgZmllbGRzICovCisjZGVmaW5lIHVzYl9zdHJpbmdfYXR0cihuYW1lKQkJCQkJCVwKK3N0YXRpYyBzc2l6ZV90ICBzaG93XyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikJCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CQkJCQlcCisJaW50IGxlbjsJCQkJCQkJXAorCQkJCQkJCQkJXAorCXVkZXYgPSB0b191c2JfZGV2aWNlIChkZXYpOwkJCQkJXAorCWxlbiA9IHNucHJpbnRmKGJ1ZiwgMjU2LCAiJXMiLCB1ZGV2LT5uYW1lKTsJCQlcCisJaWYgKGxlbiA8IDApCQkJCQkJCVwKKwkJcmV0dXJuIDA7CQkJCQkJXAorCWJ1ZltsZW5dID0gJ1xuJzsJCQkJCQlcCisJYnVmW2xlbisxXSA9IDA7CQkJCQkJCVwKKwlyZXR1cm4gbGVuKzE7CQkJCQkJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd18jI25hbWUsIE5VTEwpOworCit1c2Jfc3RyaW5nX2F0dHIocHJvZHVjdCk7Cit1c2Jfc3RyaW5nX2F0dHIobWFudWZhY3R1cmVyKTsKK3VzYl9zdHJpbmdfYXR0cihzZXJpYWwpOworCitzdGF0aWMgc3NpemVfdAorc2hvd19zcGVlZCAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJY2hhciAqc3BlZWQ7CisKKwl1ZGV2ID0gdG9fdXNiX2RldmljZSAoZGV2KTsKKworCXN3aXRjaCAodWRldi0+c3BlZWQpIHsKKwljYXNlIFVTQl9TUEVFRF9MT1c6CisJCXNwZWVkID0gIjEuNSI7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX1VOS05PV046CisJY2FzZSBVU0JfU1BFRURfRlVMTDoKKwkJc3BlZWQgPSAiMTIiOworCQlicmVhazsKKwljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQlzcGVlZCA9ICI0ODAiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzcGVlZCA9ICJ1bmtub3duIjsKKwl9CisJcmV0dXJuIHNwcmludGYgKGJ1ZiwgIiVzXG4iLCBzcGVlZCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoc3BlZWQsIFNfSVJVR08sIHNob3dfc3BlZWQsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdAorc2hvd19kZXZudW0gKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCisJdWRldiA9IHRvX3VzYl9kZXZpY2UgKGRldik7CisJcmV0dXJuIHNwcmludGYgKGJ1ZiwgIiVkXG4iLCB1ZGV2LT5kZXZudW0pOworfQorc3RhdGljIERFVklDRV9BVFRSKGRldm51bSwgU19JUlVHTywgc2hvd19kZXZudW0sIE5VTEwpOworCitzdGF0aWMgc3NpemVfdAorc2hvd192ZXJzaW9uIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwl1MTYgYmNkVVNCOworCisJdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKKwliY2RVU0IgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmJjZFVTQik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJTJ4LiUwMnhcbiIsIGJjZFVTQiA+PiA4LCBiY2RVU0IgJiAweGZmKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUih2ZXJzaW9uLCBTX0lSVUdPLCBzaG93X3ZlcnNpb24sIE5VTEwpOworCitzdGF0aWMgc3NpemVfdAorc2hvd19tYXhjaGlsZCAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisKKwl1ZGV2ID0gdG9fdXNiX2RldmljZSAoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZiAoYnVmLCAiJWRcbiIsIHVkZXYtPm1heGNoaWxkKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihtYXhjaGlsZCwgU19JUlVHTywgc2hvd19tYXhjaGlsZCwgTlVMTCk7CisKKy8qIERlc2NyaXB0b3IgZmllbGRzICovCisjZGVmaW5lIHVzYl9kZXNjcmlwdG9yX2F0dHJfbGUxNihmaWVsZCwgZm9ybWF0X3N0cmluZykJCQlcCitzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAorc2hvd18jI2ZpZWxkIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikJCQkJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsJCQkJCVwKKwkJCQkJCQkJCVwKKwl1ZGV2ID0gdG9fdXNiX2RldmljZSAoZGV2KTsJCQkJCVwKKwlyZXR1cm4gc3ByaW50ZiAoYnVmLCBmb3JtYXRfc3RyaW5nLCAJCQkJXAorCQkJbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5maWVsZCkpOwkJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBERVZJQ0VfQVRUUihmaWVsZCwgU19JUlVHTywgc2hvd18jI2ZpZWxkLCBOVUxMKTsKKwordXNiX2Rlc2NyaXB0b3JfYXR0cl9sZTE2KGlkVmVuZG9yLCAiJTA0eFxuIikKK3VzYl9kZXNjcmlwdG9yX2F0dHJfbGUxNihpZFByb2R1Y3QsICIlMDR4XG4iKQordXNiX2Rlc2NyaXB0b3JfYXR0cl9sZTE2KGJjZERldmljZSwgIiUwNHhcbiIpCisKKyNkZWZpbmUgdXNiX2Rlc2NyaXB0b3JfYXR0cihmaWVsZCwgZm9ybWF0X3N0cmluZykJCQlcCitzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAorc2hvd18jI2ZpZWxkIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikJCQkJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsJCQkJCVwKKwkJCQkJCQkJCVwKKwl1ZGV2ID0gdG9fdXNiX2RldmljZSAoZGV2KTsJCQkJCVwKKwlyZXR1cm4gc3ByaW50ZiAoYnVmLCBmb3JtYXRfc3RyaW5nLCB1ZGV2LT5kZXNjcmlwdG9yLmZpZWxkKTsJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBERVZJQ0VfQVRUUihmaWVsZCwgU19JUlVHTywgc2hvd18jI2ZpZWxkLCBOVUxMKTsKKwordXNiX2Rlc2NyaXB0b3JfYXR0ciAoYkRldmljZUNsYXNzLCAiJTAyeFxuIikKK3VzYl9kZXNjcmlwdG9yX2F0dHIgKGJEZXZpY2VTdWJDbGFzcywgIiUwMnhcbiIpCit1c2JfZGVzY3JpcHRvcl9hdHRyIChiRGV2aWNlUHJvdG9jb2wsICIlMDJ4XG4iKQordXNiX2Rlc2NyaXB0b3JfYXR0ciAoYk51bUNvbmZpZ3VyYXRpb25zLCAiJWRcbiIpCisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZXZfYXR0cnNbXSA9IHsKKwkvKiBjdXJyZW50IGNvbmZpZ3VyYXRpb24ncyBhdHRyaWJ1dGVzICovCisJJmRldl9hdHRyX2JOdW1JbnRlcmZhY2VzLmF0dHIsCisJJmRldl9hdHRyX2JDb25maWd1cmF0aW9uVmFsdWUuYXR0ciwKKwkmZGV2X2F0dHJfYm1BdHRyaWJ1dGVzLmF0dHIsCisJJmRldl9hdHRyX2JNYXhQb3dlci5hdHRyLAorCS8qIGRldmljZSBhdHRyaWJ1dGVzICovCisJJmRldl9hdHRyX2lkVmVuZG9yLmF0dHIsCisJJmRldl9hdHRyX2lkUHJvZHVjdC5hdHRyLAorCSZkZXZfYXR0cl9iY2REZXZpY2UuYXR0ciwKKwkmZGV2X2F0dHJfYkRldmljZUNsYXNzLmF0dHIsCisJJmRldl9hdHRyX2JEZXZpY2VTdWJDbGFzcy5hdHRyLAorCSZkZXZfYXR0cl9iRGV2aWNlUHJvdG9jb2wuYXR0ciwKKwkmZGV2X2F0dHJfYk51bUNvbmZpZ3VyYXRpb25zLmF0dHIsCisJJmRldl9hdHRyX3NwZWVkLmF0dHIsCisJJmRldl9hdHRyX2Rldm51bS5hdHRyLAorCSZkZXZfYXR0cl92ZXJzaW9uLmF0dHIsCisJJmRldl9hdHRyX21heGNoaWxkLmF0dHIsCisJTlVMTCwKK307CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkZXZfYXR0cl9ncnAgPSB7CisJLmF0dHJzID0gZGV2X2F0dHJzLAorfTsKKwordm9pZCB1c2JfY3JlYXRlX3N5c2ZzX2Rldl9maWxlcyAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnVkZXYtPmRldjsKKworCXN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmZGV2X2F0dHJfZ3JwKTsKKworCWlmICh1ZGV2LT5tYW51ZmFjdHVyZXIpCisJCWRldmljZV9jcmVhdGVfZmlsZSAoZGV2LCAmZGV2X2F0dHJfbWFudWZhY3R1cmVyKTsKKwlpZiAodWRldi0+cHJvZHVjdCkKKwkJZGV2aWNlX2NyZWF0ZV9maWxlIChkZXYsICZkZXZfYXR0cl9wcm9kdWN0KTsKKwlpZiAodWRldi0+c2VyaWFsKQorCQlkZXZpY2VfY3JlYXRlX2ZpbGUgKGRldiwgJmRldl9hdHRyX3NlcmlhbCk7CisJZGV2aWNlX2NyZWF0ZV9maWxlIChkZXYsICZkZXZfYXR0cl9jb25maWd1cmF0aW9uKTsKK30KKwordm9pZCB1c2JfcmVtb3ZlX3N5c2ZzX2Rldl9maWxlcyAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnVkZXYtPmRldjsKKworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmZGV2X2F0dHJfZ3JwKTsKKworCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIpCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tYW51ZmFjdHVyZXIpOworCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmlQcm9kdWN0KQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcHJvZHVjdCk7CisJaWYgKHVkZXYtPmRlc2NyaXB0b3IuaVNlcmlhbE51bWJlcikKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3NlcmlhbCk7CisJZGV2aWNlX3JlbW92ZV9maWxlIChkZXYsICZkZXZfYXR0cl9jb25maWd1cmF0aW9uKTsKK30KKworLyogSW50ZXJmYWNlIGZpZWxkcyAqLworI2RlZmluZSB1c2JfaW50Zl9hdHRyKGZpZWxkLCBmb3JtYXRfc3RyaW5nKQkJCQlcCitzdGF0aWMgc3NpemVfdAkJCQkJCQkJXAorc2hvd18jI2ZpZWxkIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikJCQkJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UgKGRldik7CQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHNwcmludGYgKGJ1ZiwgZm9ybWF0X3N0cmluZywgaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuZmllbGQpOyBcCit9CQkJCQkJCQkJXAorc3RhdGljIERFVklDRV9BVFRSKGZpZWxkLCBTX0lSVUdPLCBzaG93XyMjZmllbGQsIE5VTEwpOworCit1c2JfaW50Zl9hdHRyIChiSW50ZXJmYWNlTnVtYmVyLCAiJTAyeFxuIikKK3VzYl9pbnRmX2F0dHIgKGJBbHRlcm5hdGVTZXR0aW5nLCAiJTJkXG4iKQordXNiX2ludGZfYXR0ciAoYk51bUVuZHBvaW50cywgIiUwMnhcbiIpCit1c2JfaW50Zl9hdHRyIChiSW50ZXJmYWNlQ2xhc3MsICIlMDJ4XG4iKQordXNiX2ludGZfYXR0ciAoYkludGVyZmFjZVN1YkNsYXNzLCAiJTAyeFxuIikKK3VzYl9pbnRmX2F0dHIgKGJJbnRlcmZhY2VQcm90b2NvbCwgIiUwMnhcbiIpCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfaW50ZXJmYWNlX3N0cmluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlpbnQgbGVuOworCisJaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UgKGRldik7CisJdWRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCWxlbiA9IHNucHJpbnRmKGJ1ZiwgMjU2LCAiJXMiLCBpbnRmLT5jdXJfYWx0c2V0dGluZy0+c3RyaW5nKTsKKwlpZiAobGVuIDwgMCkKKwkJcmV0dXJuIDA7CisJYnVmW2xlbl0gPSAnXG4nOworCWJ1ZltsZW4rMV0gPSAwOworCXJldHVybiBsZW4rMTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihpbnRlcmZhY2UsIFNfSVJVR08sIHNob3dfaW50ZXJmYWNlX3N0cmluZywgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppbnRmX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2JJbnRlcmZhY2VOdW1iZXIuYXR0ciwKKwkmZGV2X2F0dHJfYkFsdGVybmF0ZVNldHRpbmcuYXR0ciwKKwkmZGV2X2F0dHJfYk51bUVuZHBvaW50cy5hdHRyLAorCSZkZXZfYXR0cl9iSW50ZXJmYWNlQ2xhc3MuYXR0ciwKKwkmZGV2X2F0dHJfYkludGVyZmFjZVN1YkNsYXNzLmF0dHIsCisJJmRldl9hdHRyX2JJbnRlcmZhY2VQcm90b2NvbC5hdHRyLAorCU5VTEwsCit9Oworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaW50Zl9hdHRyX2dycCA9IHsKKwkuYXR0cnMgPSBpbnRmX2F0dHJzLAorfTsKKwordm9pZCB1c2JfY3JlYXRlX3N5c2ZzX2ludGZfZmlsZXMgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN5c2ZzX2NyZWF0ZV9ncm91cCgmaW50Zi0+ZGV2LmtvYmosICZpbnRmX2F0dHJfZ3JwKTsKKworCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+c3RyaW5nKQorCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2ludGVyZmFjZSk7CisJCQorfQorCit2b2lkIHVzYl9yZW1vdmVfc3lzZnNfaW50Zl9maWxlcyAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZpbnRmLT5kZXYua29iaiwgJmludGZfYXR0cl9ncnApOworCisJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5zdHJpbmcpCisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW50ZXJmYWNlKTsKKworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS91cmIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM4MzhmOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKQEAgLTAsMCArMSw1MTEgQEAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworCSNkZWZpbmUgREVCVUcKKyNlbHNlCisJI3VuZGVmIERFQlVHCisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJoY2QuaCIKKworI2RlZmluZSB0b191cmIoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1cmIsIGtyZWYpCisKK3N0YXRpYyB2b2lkIHVyYl9kZXN0cm95KHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCB1cmIgKnVyYiA9IHRvX3VyYihrcmVmKTsKKwlrZnJlZSh1cmIpOworfQorCisvKioKKyAqIHVzYl9pbml0X3VyYiAtIGluaXRpYWxpemVzIGEgdXJiIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgYnkgYSBVU0IgZHJpdmVyCisgKiBAdXJiOiBwb2ludGVyIHRvIHRoZSB1cmIgdG8gaW5pdGlhbGl6ZQorICoKKyAqIEluaXRpYWxpemVzIGEgdXJiIHNvIHRoYXQgdGhlIFVTQiBzdWJzeXN0ZW0gY2FuIHVzZSBpdCBwcm9wZXJseS4KKyAqCisgKiBJZiBhIHVyYiBpcyBjcmVhdGVkIHdpdGggYSBjYWxsIHRvIHVzYl9hbGxvY191cmIoKSBpdCBpcyBub3QKKyAqIG5lY2Vzc2FyeSB0byBjYWxsIHRoaXMgZnVuY3Rpb24uICBPbmx5IHVzZSB0aGlzIGlmIHlvdSBhbGxvY2F0ZSB0aGUKKyAqIHNwYWNlIGZvciBhIHN0cnVjdCB1cmIgb24geW91ciBvd24uICBJZiB5b3UgY2FsbCB0aGlzIGZ1bmN0aW9uLCBiZQorICogY2FyZWZ1bCB3aGVuIGZyZWVpbmcgdGhlIG1lbW9yeSBmb3IgeW91ciB1cmIgdGhhdCBpdCBpcyBubyBsb25nZXIgaW4KKyAqIHVzZSBieSB0aGUgVVNCIGNvcmUuCisgKgorICogT25seSB1c2UgdGhpcyBmdW5jdGlvbiBpZiB5b3UgX3JlYWxseV8gdW5kZXJzdGFuZCB3aGF0IHlvdSBhcmUgZG9pbmcuCisgKi8KK3ZvaWQgdXNiX2luaXRfdXJiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpZiAodXJiKSB7CisJCW1lbXNldCh1cmIsIDAsIHNpemVvZigqdXJiKSk7CisJCWtyZWZfaW5pdCgmdXJiLT5rcmVmKTsKKwkJc3Bpbl9sb2NrX2luaXQoJnVyYi0+bG9jayk7CisJfQorfQorCisvKioKKyAqIHVzYl9hbGxvY191cmIgLSBjcmVhdGVzIGEgbmV3IHVyYiBmb3IgYSBVU0IgZHJpdmVyIHRvIHVzZQorICogQGlzb19wYWNrZXRzOiBudW1iZXIgb2YgaXNvIHBhY2tldHMgZm9yIHRoaXMgdXJiCisgKiBAbWVtX2ZsYWdzOiB0aGUgdHlwZSBvZiBtZW1vcnkgdG8gYWxsb2NhdGUsIHNlZSBrbWFsbG9jKCkgZm9yIGEgbGlzdCBvZgorICoJdmFsaWQgb3B0aW9ucyBmb3IgdGhpcy4KKyAqCisgKiBDcmVhdGVzIGFuIHVyYiBmb3IgdGhlIFVTQiBkcml2ZXIgdG8gdXNlLCBpbml0aWFsaXplcyBhIGZldyBpbnRlcm5hbAorICogc3RydWN0dXJlcywgaW5jcmVtZW50ZXMgdGhlIHVzYWdlIGNvdW50ZXIsIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBpdC4KKyAqCisgKiBJZiBubyBtZW1vcnkgaXMgYXZhaWxhYmxlLCBOVUxMIGlzIHJldHVybmVkLgorICoKKyAqIElmIHRoZSBkcml2ZXIgd2FudCB0byB1c2UgdGhpcyB1cmIgZm9yIGludGVycnVwdCwgY29udHJvbCwgb3IgYnVsaworICogZW5kcG9pbnRzLCBwYXNzICcwJyBhcyB0aGUgbnVtYmVyIG9mIGlzbyBwYWNrZXRzLgorICoKKyAqIFRoZSBkcml2ZXIgbXVzdCBjYWxsIHVzYl9mcmVlX3VyYigpIHdoZW4gaXQgaXMgZmluaXNoZWQgd2l0aCB0aGUgdXJiLgorICovCitzdHJ1Y3QgdXJiICp1c2JfYWxsb2NfdXJiKGludCBpc29fcGFja2V0cywgaW50IG1lbV9mbGFncykKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwl1cmIgPSAoc3RydWN0IHVyYiAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1cmIpICsgCisJCWlzb19wYWNrZXRzICogc2l6ZW9mKHN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yKSwKKwkJbWVtX2ZsYWdzKTsKKwlpZiAoIXVyYikgeworCQllcnIoImFsbG9jX3VyYjoga21hbGxvYyBmYWlsZWQiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXVzYl9pbml0X3VyYih1cmIpOworCXJldHVybiB1cmI7Cit9CisKKy8qKgorICogdXNiX2ZyZWVfdXJiIC0gZnJlZXMgdGhlIG1lbW9yeSB1c2VkIGJ5IGEgdXJiIHdoZW4gYWxsIHVzZXJzIG9mIGl0IGFyZSBmaW5pc2hlZAorICogQHVyYjogcG9pbnRlciB0byB0aGUgdXJiIHRvIGZyZWUsIG1heSBiZSBOVUxMCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2hlbiBhIHVzZXIgb2YgYSB1cmIgaXMgZmluaXNoZWQgd2l0aCBpdC4gIFdoZW4gdGhlIGxhc3QgdXNlcgorICogb2YgdGhlIHVyYiBjYWxscyB0aGlzIGZ1bmN0aW9uLCB0aGUgbWVtb3J5IG9mIHRoZSB1cmIgaXMgZnJlZWQuCisgKgorICogTm90ZTogVGhlIHRyYW5zZmVyIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhlIHVyYiBpcyBub3QgZnJlZWQsIHRoYXQgbXVzdCBiZQorICogZG9uZSBlbHNld2hlcmUuCisgKi8KK3ZvaWQgdXNiX2ZyZWVfdXJiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpZiAodXJiKQorCQlrcmVmX3B1dCgmdXJiLT5rcmVmLCB1cmJfZGVzdHJveSk7Cit9CisKKy8qKgorICogdXNiX2dldF91cmIgLSBpbmNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIHVyYgorICogQHVyYjogcG9pbnRlciB0byB0aGUgdXJiIHRvIG1vZGlmeSwgbWF5IGJlIE5VTEwKKyAqCisgKiBUaGlzIG11c3QgYmUgIGNhbGxlZCB3aGVuZXZlciBhIHVyYiBpcyB0cmFuc2ZlcnJlZCBmcm9tIGEgZGV2aWNlIGRyaXZlciB0byBhCisgKiBob3N0IGNvbnRyb2xsZXIgZHJpdmVyLiAgVGhpcyBhbGxvd3MgcHJvcGVyIHJlZmVyZW5jZSBjb3VudGluZyB0byBoYXBwZW4KKyAqIGZvciB1cmJzLgorICoKKyAqIEEgcG9pbnRlciB0byB0aGUgdXJiIHdpdGggdGhlIGluY3JlbWVudGVkIHJlZmVyZW5jZSBjb3VudGVyIGlzIHJldHVybmVkLgorICovCitzdHJ1Y3QgdXJiICogdXNiX2dldF91cmIoc3RydWN0IHVyYiAqdXJiKQoreworCWlmICh1cmIpCisJCWtyZWZfZ2V0KCZ1cmItPmtyZWYpOworCXJldHVybiB1cmI7Cit9CisJCQorCQkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogdXNiX3N1Ym1pdF91cmIgLSBpc3N1ZSBhbiBhc3luY2hyb25vdXMgdHJhbnNmZXIgcmVxdWVzdCBmb3IgYW4gZW5kcG9pbnQKKyAqIEB1cmI6IHBvaW50ZXIgdG8gdGhlIHVyYiBkZXNjcmliaW5nIHRoZSByZXF1ZXN0CisgKiBAbWVtX2ZsYWdzOiB0aGUgdHlwZSBvZiBtZW1vcnkgdG8gYWxsb2NhdGUsIHNlZSBrbWFsbG9jKCkgZm9yIGEgbGlzdAorICoJb2YgdmFsaWQgb3B0aW9ucyBmb3IgdGhpcy4KKyAqCisgKiBUaGlzIHN1Ym1pdHMgYSB0cmFuc2ZlciByZXF1ZXN0LCBhbmQgdHJhbnNmZXJzIGNvbnRyb2wgb2YgdGhlIFVSQgorICogZGVzY3JpYmluZyB0aGF0IHJlcXVlc3QgdG8gdGhlIFVTQiBzdWJzeXN0ZW0uICBSZXF1ZXN0IGNvbXBsZXRpb24gd2lsbAorICogYmUgaW5kaWNhdGVkIGxhdGVyLCBhc3luY2hyb25vdXNseSwgYnkgY2FsbGluZyB0aGUgY29tcGxldGlvbiBoYW5kbGVyLgorICogVGhlIHRocmVlIHR5cGVzIG9mIGNvbXBsZXRpb24gYXJlIHN1Y2Nlc3MsIGVycm9yLCBhbmQgdW5saW5rCisgKiAoYSBzb2Z0d2FyZS1pbmR1Y2VkIGZhdWx0LCBhbHNvIGNhbGxlZCAicmVxdWVzdCBjYW5jZWxhdGlvbiIpLiAgCisgKgorICogVVJCcyBtYXkgYmUgc3VibWl0dGVkIGluIGludGVycnVwdCBjb250ZXh0LgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGNvcnJlY3RseSBpbml0aWFsaXplZCB0aGUgVVJCIGJlZm9yZSBzdWJtaXR0aW5nCisgKiBpdC4gIEZ1bmN0aW9ucyBzdWNoIGFzIHVzYl9maWxsX2J1bGtfdXJiKCkgYW5kIHVzYl9maWxsX2NvbnRyb2xfdXJiKCkgYXJlCisgKiBhdmFpbGFibGUgdG8gZW5zdXJlIHRoYXQgbW9zdCBmaWVsZHMgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZCwgZm9yCisgKiB0aGUgcGFydGljdWxhciBraW5kIG9mIHRyYW5zZmVyLCBhbHRob3VnaCB0aGV5IHdpbGwgbm90IGluaXRpYWxpemUKKyAqIGFueSB0cmFuc2ZlciBmbGFncy4KKyAqCisgKiBTdWNjZXNzZnVsIHN1Ym1pc3Npb25zIHJldHVybiAwOyBvdGhlcndpc2UgdGhpcyByb3V0aW5lIHJldHVybnMgYQorICogbmVnYXRpdmUgZXJyb3IgbnVtYmVyLiAgSWYgdGhlIHN1Ym1pc3Npb24gaXMgc3VjY2Vzc2Z1bCwgdGhlIGNvbXBsZXRlKCkKKyAqIGNhbGxiYWNrIGZyb20gdGhlIFVSQiB3aWxsIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UsIHdoZW4gdGhlIFVTQiBjb3JlIGFuZAorICogSG9zdCBDb250cm9sbGVyIERyaXZlciAoSENEKSBhcmUgZmluaXNoZWQgd2l0aCB0aGUgVVJCLiAgV2hlbiB0aGUgY29tcGxldGlvbgorICogZnVuY3Rpb24gaXMgY2FsbGVkLCBjb250cm9sIG9mIHRoZSBVUkIgaXMgcmV0dXJuZWQgdG8gdGhlIGRldmljZQorICogZHJpdmVyIHdoaWNoIGlzc3VlZCB0aGUgcmVxdWVzdC4gIFRoZSBjb21wbGV0aW9uIGhhbmRsZXIgbWF5IHRoZW4KKyAqIGltbWVkaWF0ZWx5IGZyZWUgb3IgcmV1c2UgdGhhdCBVUkIuCisgKgorICogV2l0aCBmZXcgZXhjZXB0aW9ucywgVVNCIGRldmljZSBkcml2ZXJzIHNob3VsZCBuZXZlciBhY2Nlc3MgVVJCIGZpZWxkcworICogcHJvdmlkZWQgYnkgdXNiY29yZSBvciB0aGUgSENEIHVudGlsIGl0cyBjb21wbGV0ZSgpIGlzIGNhbGxlZC4KKyAqIFRoZSBleGNlcHRpb25zIHJlbGF0ZSB0byBwZXJpb2RpYyB0cmFuc2ZlciBzY2hlZHVsaW5nLiAgRm9yIGJvdGgKKyAqIGludGVycnVwdCBhbmQgaXNvY2hyb25vdXMgdXJicywgYXMgcGFydCBvZiBzdWNjZXNzZnVsIFVSQiBzdWJtaXNzaW9uCisgKiB1cmItPmludGVydmFsIGlzIG1vZGlmaWVkIHRvIHJlZmxlY3QgdGhlIGFjdHVhbCB0cmFuc2ZlciBwZXJpb2QgdXNlZAorICogKG5vcm1hbGx5IHNvbWUgcG93ZXIgb2YgdHdvIHVuaXRzKS4gIEFuZCBmb3IgaXNvY2hyb25vdXMgdXJicywKKyAqIHVyYi0+c3RhcnRfZnJhbWUgaXMgbW9kaWZpZWQgdG8gcmVmbGVjdCB3aGVuIHRoZSBVUkIncyB0cmFuc2ZlcnMgd2VyZQorICogc2NoZWR1bGVkIHRvIHN0YXJ0LiAgTm90IGFsbCBpc29jaHJvbm91cyB0cmFuc2ZlciBzY2hlZHVsaW5nIHBvbGljaWVzCisgKiB3aWxsIHdvcmssIGJ1dCBtb3N0IGhvc3QgY29udHJvbGxlciBkcml2ZXJzIHNob3VsZCBlYXNpbHkgaGFuZGxlIElTTworICogcXVldWVzIGdvaW5nIGZyb20gbm93IHVudGlsIDEwLTIwMCBtc2VjIGludG8gdGhlIGZ1dHVyZS4KKyAqCisgKiBGb3IgY29udHJvbCBlbmRwb2ludHMsIHRoZSBzeW5jaHJvbm91cyB1c2JfY29udHJvbF9tc2coKSBjYWxsIGlzCisgKiBvZnRlbiB1c2VkIChpbiBub24taW50ZXJydXB0IGNvbnRleHQpIGluc3RlYWQgb2YgdGhpcyBjYWxsLgorICogVGhhdCBpcyBvZnRlbiB1c2VkIHRocm91Z2ggY29udmVuaWVuY2Ugd3JhcHBlcnMsIGZvciB0aGUgcmVxdWVzdHMKKyAqIHRoYXQgYXJlIHN0YW5kYXJkaXplZCBpbiB0aGUgVVNCIDIuMCBzcGVjaWZpY2F0aW9uLiAgRm9yIGJ1bGsKKyAqIGVuZHBvaW50cywgYSBzeW5jaHJvbm91cyB1c2JfYnVsa19tc2coKSBjYWxsIGlzIGF2YWlsYWJsZS4KKyAqCisgKiBSZXF1ZXN0IFF1ZXVpbmc6CisgKgorICogVVJCcyBtYXkgYmUgc3VibWl0dGVkIHRvIGVuZHBvaW50cyBiZWZvcmUgcHJldmlvdXMgb25lcyBjb21wbGV0ZSwgdG8KKyAqIG1pbmltaXplIHRoZSBpbXBhY3Qgb2YgaW50ZXJydXB0IGxhdGVuY2llcyBhbmQgc3lzdGVtIG92ZXJoZWFkIG9uIGRhdGEKKyAqIHRocm91Z2hwdXQuICBXaXRoIHRoYXQgcXVldWluZyBwb2xpY3ksIGFuIGVuZHBvaW50J3MgcXVldWUgd291bGQgbmV2ZXIKKyAqIGJlIGVtcHR5LiAgVGhpcyBpcyByZXF1aXJlZCBmb3IgY29udGludW91cyBpc29jaHJvbm91cyBkYXRhIHN0cmVhbXMsCisgKiBhbmQgbWF5IGFsc28gYmUgcmVxdWlyZWQgZm9yIHNvbWUga2luZHMgb2YgaW50ZXJydXB0IHRyYW5zZmVycy4gU3VjaAorICogcXVldWluZyBhbHNvIG1heGltaXplcyBiYW5kd2lkdGggdXRpbGl6YXRpb24gYnkgbGV0dGluZyBVU0IgY29udHJvbGxlcnMKKyAqIHN0YXJ0IHdvcmsgb24gbGF0ZXIgcmVxdWVzdHMgYmVmb3JlIGRyaXZlciBzb2Z0d2FyZSBoYXMgZmluaXNoZWQgdGhlCisgKiBjb21wbGV0aW9uIHByb2Nlc3NpbmcgZm9yIGVhcmxpZXIgKHN1Y2Nlc3NmdWwpIHJlcXVlc3RzLgorICoKKyAqIEFzIG9mIExpbnV4IDIuNiwgYWxsIFVTQiBlbmRwb2ludCB0cmFuc2ZlciBxdWV1ZXMgc3VwcG9ydCBkZXB0aHMgZ3JlYXRlcgorICogdGhhbiBvbmUuICBUaGlzIHdhcyBwcmV2aW91c2x5IGEgSENELXNwZWNpZmljIGJlaGF2aW9yLCBleGNlcHQgZm9yIElTTworICogdHJhbnNmZXJzLiAgTm9uLWlzb2Nocm9ub3VzIGVuZHBvaW50IHF1ZXVlcyBhcmUgaW5hY3RpdmUgZHVyaW5nIGNsZWFudXAKKyAqIGFmdGVyIGZhdWx0cyAodHJhbnNmZXIgZXJyb3JzIG9yIGNhbmNlbGF0aW9uKS4KKyAqCisgKiBSZXNlcnZlZCBCYW5kd2lkdGggVHJhbnNmZXJzOgorICoKKyAqIFBlcmlvZGljIHRyYW5zZmVycyAoaW50ZXJydXB0IG9yIGlzb2Nocm9ub3VzKSBhcmUgcGVyZm9ybWVkIHJlcGVhdGVkbHksCisgKiB1c2luZyB0aGUgaW50ZXJ2YWwgc3BlY2lmaWVkIGluIHRoZSB1cmIuICBTdWJtaXR0aW5nIHRoZSBmaXJzdCB1cmIgdG8KKyAqIHRoZSBlbmRwb2ludCByZXNlcnZlcyB0aGUgYmFuZHdpZHRoIG5lY2Vzc2FyeSB0byBtYWtlIHRob3NlIHRyYW5zZmVycy4KKyAqIElmIHRoZSBVU0Igc3Vic3lzdGVtIGNhbid0IGFsbG9jYXRlIHN1ZmZpY2llbnQgYmFuZHdpZHRoIHRvIHBlcmZvcm0KKyAqIHRoZSBwZXJpb2RpYyByZXF1ZXN0LCBzdWJtaXR0aW5nIHN1Y2ggYSBwZXJpb2RpYyByZXF1ZXN0IHNob3VsZCBmYWlsLgorICoKKyAqIERldmljZSBkcml2ZXJzIG11c3QgZXhwbGljaXRseSByZXF1ZXN0IHRoYXQgcmVwZXRpdGlvbiwgYnkgZW5zdXJpbmcgdGhhdAorICogc29tZSBVUkIgaXMgYWx3YXlzIG9uIHRoZSBlbmRwb2ludCdzIHF1ZXVlIChleGNlcHQgcG9zc2libHkgZm9yIHNob3J0CisgKiBwZXJpb2RzIGR1cmluZyBjb21wbGV0aW9uIGNhbGxhY2tzKS4gIFdoZW4gdGhlcmUgaXMgbm8gbG9uZ2VyIGFuIHVyYgorICogcXVldWVkLCB0aGUgZW5kcG9pbnQncyBiYW5kd2lkdGggcmVzZXJ2YXRpb24gaXMgY2FuY2VsZWQuICBUaGlzIG1lYW5zCisgKiBkcml2ZXJzIGNhbiB1c2UgdGhlaXIgY29tcGxldGlvbiBoYW5kbGVycyB0byBlbnN1cmUgdGhleSBrZWVwIGJhbmR3aWR0aAorICogdGhleSBuZWVkLCBieSByZWluaXRpYWxpemluZyBhbmQgcmVzdWJtaXR0aW5nIHRoZSBqdXN0LWNvbXBsZXRlZCB1cmIKKyAqIHVudGlsIHRoZSBkcml2ZXIgbG9uZ2VyIG5lZWRzIHRoYXQgcGVyaW9kaWMgYmFuZHdpZHRoLgorICoKKyAqIE1lbW9yeSBGbGFnczoKKyAqCisgKiBUaGUgZ2VuZXJhbCBydWxlcyBmb3IgaG93IHRvIGRlY2lkZSB3aGljaCBtZW1fZmxhZ3MgdG8gdXNlCisgKiBhcmUgdGhlIHNhbWUgYXMgZm9yIGttYWxsb2MuICBUaGVyZSBhcmUgZm91cgorICogZGlmZmVyZW50IHBvc3NpYmxlIHZhbHVlczsgR0ZQX0tFUk5FTCwgR0ZQX05PRlMsIEdGUF9OT0lPIGFuZAorICogR0ZQX0FUT01JQy4KKyAqCisgKiBHRlBfTk9GUyBpcyBub3QgZXZlciB1c2VkLCBhcyBpdCBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQgeWV0LgorICoKKyAqIEdGUF9BVE9NSUMgaXMgdXNlZCB3aGVuCisgKiAgIChhKSB5b3UgYXJlIGluc2lkZSBhIGNvbXBsZXRpb24gaGFuZGxlciwgYW4gaW50ZXJydXB0LCBib3R0b20gaGFsZiwKKyAqICAgICAgIHRhc2tsZXQgb3IgdGltZXIsIG9yCisgKiAgIChiKSB5b3UgYXJlIGhvbGRpbmcgYSBzcGlubG9jayBvciByd2xvY2sgKGRvZXMgbm90IGFwcGx5IHRvCisgKiAgICAgICBzZW1hcGhvcmVzKSwgb3IKKyAqICAgKGMpIGN1cnJlbnQtPnN0YXRlICE9IFRBU0tfUlVOTklORywgdGhpcyBpcyB0aGUgY2FzZSBvbmx5IGFmdGVyCisgKiAgICAgICB5b3UndmUgY2hhbmdlZCBpdC4KKyAqIAorICogR0ZQX05PSU8gaXMgdXNlZCBpbiB0aGUgYmxvY2sgaW8gcGF0aCBhbmQgZXJyb3IgaGFuZGxpbmcgb2Ygc3RvcmFnZQorICogZGV2aWNlcy4KKyAqCisgKiBBbGwgb3RoZXIgc2l0dWF0aW9ucyB1c2UgR0ZQX0tFUk5FTC4KKyAqCisgKiBTb21lIG1vcmUgc3BlY2lmaWMgcnVsZXMgZm9yIG1lbV9mbGFncyBjYW4gYmUgaW5mZXJyZWQsIHN1Y2ggYXMKKyAqICAoMSkgc3RhcnRfeG1pdCwgdGltZW91dCwgYW5kIHJlY2VpdmUgbWV0aG9kcyBvZiBuZXR3b3JrIGRyaXZlcnMgbXVzdAorICogICAgICB1c2UgR0ZQX0FUT01JQyAodGhleSBhcmUgY2FsbGVkIHdpdGggYSBzcGlubG9jayBoZWxkKTsKKyAqICAoMikgcXVldWVjb21tYW5kIG1ldGhvZHMgb2Ygc2NzaSBkcml2ZXJzIG11c3QgdXNlIEdGUF9BVE9NSUMgKGFsc28KKyAqICAgICAgY2FsbGVkIHdpdGggYSBzcGlubG9jayBoZWxkKTsKKyAqICAoMykgSWYgeW91IHVzZSBhIGtlcm5lbCB0aHJlYWQgd2l0aCBhIG5ldHdvcmsgZHJpdmVyIHlvdSBtdXN0IHVzZQorICogICAgICBHRlBfTk9JTywgdW5sZXNzIChiKSBvciAoYykgYXBwbHk7CisgKiAgKDQpIGFmdGVyIHlvdSBoYXZlIGRvbmUgYSBkb3duKCkgeW91IGNhbiB1c2UgR0ZQX0tFUk5FTCwgdW5sZXNzIChiKSBvciAoYykKKyAqICAgICAgYXBwbHkgb3IgeW91ciBhcmUgaW4gYSBzdG9yYWdlIGRyaXZlcidzIGJsb2NrIGlvIHBhdGg7CisgKiAgKDUpIFVTQiBwcm9iZSBhbmQgZGlzY29ubmVjdCBjYW4gdXNlIEdGUF9LRVJORUwgdW5sZXNzIChiKSBvciAoYykgYXBwbHk7IGFuZAorICogICg2KSBjaGFuZ2luZyBmaXJtd2FyZSBvbiBhIHJ1bm5pbmcgc3RvcmFnZSBvciBuZXQgZGV2aWNlIHVzZXMKKyAqICAgICAgR0ZQX05PSU8sIHVubGVzcyBiKSBvciBjKSBhcHBseQorICoKKyAqLworaW50IHVzYl9zdWJtaXRfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IG1lbV9mbGFncykKK3sKKwlpbnQJCQlwaXBlLCB0ZW1wLCBtYXg7CisJc3RydWN0IHVzYl9kZXZpY2UJKmRldjsKKwlzdHJ1Y3QgdXNiX29wZXJhdGlvbnMJKm9wOworCWludAkJCWlzX291dDsKKworCWlmICghdXJiIHx8IHVyYi0+aGNwcml2IHx8ICF1cmItPmNvbXBsZXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIShkZXYgPSB1cmItPmRldikgfHwKKwkgICAgKGRldi0+c3RhdGUgPCBVU0JfU1RBVEVfREVGQVVMVCkgfHwKKwkgICAgKCFkZXYtPmJ1cykgfHwgKGRldi0+ZGV2bnVtIDw9IDApKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKQorCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKKwlpZiAoIShvcCA9IGRldi0+YnVzLT5vcCkgfHwgIW9wLT5zdWJtaXRfdXJiKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXVyYi0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJdXJiLT5iYW5kd2lkdGggPSAwOworCisJLyogTG90cyBvZiBzYW5pdHkgY2hlY2tzLCBzbyBIQ0RzIGNhbiByZWx5IG9uIGNsZWFuIGRhdGEKKwkgKiBhbmQgZG9uJ3QgbmVlZCB0byBkdXBsaWNhdGUgdGVzdHMKKwkgKi8KKwlwaXBlID0gdXJiLT5waXBlOworCXRlbXAgPSB1c2JfcGlwZXR5cGUgKHBpcGUpOworCWlzX291dCA9IHVzYl9waXBlb3V0IChwaXBlKTsKKworCWlmICghdXNiX3BpcGVjb250cm9sIChwaXBlKSAmJiBkZXYtPnN0YXRlIDwgVVNCX1NUQVRFX0NPTkZJR1VSRUQpCisJCXJldHVybiAtRU5PREVWOworCisJLyogRklYTUUgdGhlcmUgc2hvdWxkIGJlIGEgc2hhcmFibGUgbG9jayBwcm90ZWN0aW5nIHVzIGFnYWluc3QKKwkgKiBjb25maWcvYWx0c2V0dGluZyBjaGFuZ2VzIGFuZCBkaXNjb25uZWN0cywga2lja2luZyBpbiBoZXJlLgorCSAqIChoZXJlID09IGJlZm9yZSBtYXhwYWNrZXQsIGFuZCBldmVudHVhbGx5IGVuZHBvaW50IHR5cGUsCisJICogY2hlY2tzIGdldCBtYWRlLikKKwkgKi8KKworCW1heCA9IHVzYl9tYXhwYWNrZXQgKGRldiwgcGlwZSwgaXNfb3V0KTsKKwlpZiAobWF4IDw9IDApIHsKKwkJZGV2X2RiZygmZGV2LT5kZXYsCisJCQkiYm9ndXMgZW5kcG9pbnQgZXAlZCVzIGluICVzIChiYWQgbWF4cGFja2V0ICVkKVxuIiwKKwkJCXVzYl9waXBlZW5kcG9pbnQgKHBpcGUpLCBpc19vdXQgPyAib3V0IiA6ICJpbiIsCisJCQlfX0ZVTkNUSU9OX18sIG1heCk7CisJCXJldHVybiAtRU1TR1NJWkU7CisJfQorCisJLyogcGVyaW9kaWMgdHJhbnNmZXJzIGxpbWl0IHNpemUgcGVyIGZyYW1lL3VmcmFtZSwKKwkgKiBidXQgZHJpdmVycyBvbmx5IGNvbnRyb2wgdGhvc2Ugc2l6ZXMgZm9yIElTTy4KKwkgKiB3aGlsZSB3ZSdyZSBjaGVja2luZywgaW5pdGlhbGl6ZSByZXR1cm4gc3RhdHVzLgorCSAqLworCWlmICh0ZW1wID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJaW50CW4sIGxlbjsKKworCQkvKiAiaGlnaCBiYW5kd2lkdGgiIG1vZGUsIDEtMyBwYWNrZXRzL3VmcmFtZT8gKi8KKwkJaWYgKGRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIHsKKwkJCWludAltdWx0ID0gMSArICgobWF4ID4+IDExKSAmIDB4MDMpOworCQkJbWF4ICY9IDB4MDdmZjsKKwkJCW1heCAqPSBtdWx0OworCQl9CisKKwkJaWYgKHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPD0gMCkJCSAgICAKKwkJCXJldHVybiAtRUlOVkFMOworCQlmb3IgKG4gPSAwOyBuIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgbisrKSB7CisJCQlsZW4gPSB1cmItPmlzb19mcmFtZV9kZXNjIFtuXS5sZW5ndGg7CisJCQlpZiAobGVuIDwgMCB8fCBsZW4gPiBtYXgpIAorCQkJCXJldHVybiAtRU1TR1NJWkU7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjIFtuXS5zdGF0dXMgPSAtRVhERVY7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjIFtuXS5hY3R1YWxfbGVuZ3RoID0gMDsKKwkJfQorCX0KKworCS8qIHRoZSBJL08gYnVmZmVyIG11c3QgYmUgbWFwcGVkL3VubWFwcGVkLCBleGNlcHQgd2hlbiBsZW5ndGg9MCAqLworCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPCAwKQorCQlyZXR1cm4gLUVNU0dTSVpFOworCisjaWZkZWYgREVCVUcKKwkvKiBzdHVmZiB0aGF0IGRyaXZlcnMgc2hvdWxkbid0IGRvLCBidXQgd2hpY2ggc2hvdWxkbid0CisJICogY2F1c2UgcHJvYmxlbXMgaW4gSENEcyBpZiB0aGV5IGdldCBpdCB3cm9uZy4KKwkgKi8KKwl7CisJdW5zaWduZWQgaW50CW9yaWdfZmxhZ3MgPSB1cmItPnRyYW5zZmVyX2ZsYWdzOworCXVuc2lnbmVkIGludAlhbGxvd2VkOworCisJLyogZW5mb3JjZSBzaW1wbGUvc3RhbmRhcmQgcG9saWN5ICovCisJYWxsb3dlZCA9IFVSQl9BU1lOQ19VTkxJTks7CS8vIGFmZmVjdHMgbGF0ZXIgdW5saW5rcworCWFsbG93ZWQgfD0gKFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQIHwgVVJCX05PX1NFVFVQX0RNQV9NQVApOworCWFsbG93ZWQgfD0gVVJCX05PX0lOVEVSUlVQVDsKKwlzd2l0Y2ggKHRlbXApIHsKKwljYXNlIFBJUEVfQlVMSzoKKwkJaWYgKGlzX291dCkKKwkJCWFsbG93ZWQgfD0gVVJCX1pFUk9fUEFDS0VUOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgUElQRV9DT05UUk9MOgorCQlhbGxvd2VkIHw9IFVSQl9OT19GU0JSOwkvKiBvbmx5IGFmZmVjdHMgVUhDSSAqLworCQkvKiBGQUxMVEhST1VHSCAqLworCWRlZmF1bHQ6CQkJLyogYWxsIG5vbi1pc28gZW5kcG9pbnRzICovCisJCWlmICghaXNfb3V0KQorCQkJYWxsb3dlZCB8PSBVUkJfU0hPUlRfTk9UX09LOworCQlicmVhazsKKwljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJCWFsbG93ZWQgfD0gVVJCX0lTT19BU0FQOworCQlicmVhazsKKwl9CisJdXJiLT50cmFuc2Zlcl9mbGFncyAmPSBhbGxvd2VkOworCisJLyogZmFpbCBpZiBzdWJtaXR0ZXIgZ2F2ZSBib2d1cyBmbGFncyAqLworCWlmICh1cmItPnRyYW5zZmVyX2ZsYWdzICE9IG9yaWdfZmxhZ3MpIHsKKwkJZXJyICgiQk9HVVMgdXJiIGZsYWdzLCAleCAtLT4gJXgiLAorCQkJb3JpZ19mbGFncywgdXJiLT50cmFuc2Zlcl9mbGFncyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl9CisjZW5kaWYKKwkvKgorCSAqIEZvcmNlIHBlcmlvZGljIHRyYW5zZmVyIGludGVydmFscyB0byBiZSBsZWdhbCB2YWx1ZXMgdGhhdCBhcmUKKwkgKiBhIHBvd2VyIG9mIHR3byAoc28gSENEcyBkb24ndCBuZWVkIHRvKS4KKwkgKgorCSAqIEZJWE1FIHdhbnQgYnVzLT57aW50cixpc299X3NjaGVkX2hvcml6b24gdmFsdWVzIGhlcmUuICBFYWNoIEhDCisJICogc3VwcG9ydHMgZGlmZmVyZW50IHZhbHVlcy4uLiB0aGlzIHVzZXMgRUhDSS9VSENJIGRlZmF1bHRzIChhbmQKKwkgKiBFSENJIGNhbiB1c2Ugc21hbGxlciBub24tZGVmYXVsdCB2YWx1ZXMpLgorCSAqLworCXN3aXRjaCAodGVtcCkgeworCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKKwljYXNlIFBJUEVfSU5URVJSVVBUOgorCQkvKiB0b28gc21hbGw/ICovCisJCWlmICh1cmItPmludGVydmFsIDw9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJLyogdG9vIGJpZz8gKi8KKwkJc3dpdGNoIChkZXYtPnNwZWVkKSB7CisJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CS8qIHVuaXRzIGFyZSBtaWNyb2ZyYW1lcyAqLworCQkJLy8gTk9URSB1c2IgaGFuZGxlcyAyXjE1CisJCQlpZiAodXJiLT5pbnRlcnZhbCA+ICgxMDI0ICogOCkpCisJCQkJdXJiLT5pbnRlcnZhbCA9IDEwMjQgKiA4OworCQkJdGVtcCA9IDEwMjQgKiA4OworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CS8qIHVuaXRzIGFyZSBmcmFtZXMvbXNlYyAqLworCQljYXNlIFVTQl9TUEVFRF9MT1c6CisJCQlpZiAodGVtcCA9PSBQSVBFX0lOVEVSUlVQVCkgeworCQkJCWlmICh1cmItPmludGVydmFsID4gMjU1KQorCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQkvLyBOT1RFIG9oY2kgb25seSBoYW5kbGVzIHVwIHRvIDMyCisJCQkJdGVtcCA9IDEyODsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHVyYi0+aW50ZXJ2YWwgPiAxMDI0KQorCQkJCQl1cmItPmludGVydmFsID0gMTAyNDsKKwkJCQkvLyBOT1RFIHVzYiBhbmQgb2hjaSBoYW5kbGUgdXAgdG8gMl4xNQorCQkJCXRlbXAgPSAxMDI0OworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQkvKiBwb3dlciBvZiB0d28/ICovCisJCXdoaWxlICh0ZW1wID4gdXJiLT5pbnRlcnZhbCkKKwkJCXRlbXAgPj49IDE7CisJCXVyYi0+aW50ZXJ2YWwgPSB0ZW1wOworCX0KKworCXJldHVybiBvcC0+c3VibWl0X3VyYiAodXJiLCBtZW1fZmxhZ3MpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIHVzYl91bmxpbmtfdXJiIC0gYWJvcnQvY2FuY2VsIGEgdHJhbnNmZXIgcmVxdWVzdCBmb3IgYW4gZW5kcG9pbnQKKyAqIEB1cmI6IHBvaW50ZXIgdG8gdXJiIGRlc2NyaWJpbmcgYSBwcmV2aW91c2x5IHN1Ym1pdHRlZCByZXF1ZXN0LAorICoJbWF5IGJlIE5VTEwKKyAqCisgKiBUaGlzIHJvdXRpbmUgY2FuY2VscyBhbiBpbi1wcm9ncmVzcyByZXF1ZXN0LiAgVVJCcyBjb21wbGV0ZSBvbmx5CisgKiBvbmNlIHBlciBzdWJtaXNzaW9uLCBhbmQgbWF5IGJlIGNhbmNlbGVkIG9ubHkgb25jZSBwZXIgc3VibWlzc2lvbi4KKyAqIFN1Y2Nlc3NmdWwgY2FuY2VsYXRpb24gbWVhbnMgdGhlIHJlcXVlc3RzJ3MgY29tcGxldGlvbiBoYW5kbGVyIHdpbGwKKyAqIGJlIGNhbGxlZCB3aXRoIGEgc3RhdHVzIGNvZGUgaW5kaWNhdGluZyB0aGF0IHRoZSByZXF1ZXN0IGhhcyBiZWVuCisgKiBjYW5jZWxlZCAocmF0aGVyIHRoYW4gYW55IG90aGVyIGNvZGUpIGFuZCB3aWxsIHF1aWNrbHkgYmUgcmVtb3ZlZAorICogZnJvbSBob3N0IGNvbnRyb2xsZXIgZGF0YSBzdHJ1Y3R1cmVzLgorICoKKyAqIEluIHRoZSBwYXN0LCBjbGVhcmluZyB0aGUgVVJCX0FTWU5DX1VOTElOSyB0cmFuc2ZlciBmbGFnIGZvciB0aGUKKyAqIFVSQiBpbmRpY2F0ZWQgdGhhdCB0aGUgcmVxdWVzdCB3YXMgc3luY2hyb25vdXMuICBUaGlzIHVzYWdlIGlzIG5vdworICogZGVwcmVjYXRlZDsgaWYgdGhlIGZsYWcgaXMgY2xlYXIgdGhlIGNhbGwgd2lsbCBiZSBmb3J3YXJkZWQgdG8KKyAqIHVzYl9raWxsX3VyYigpIGFuZCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgMC4gIEluIHRoZSBmdXR1cmUsIGRyaXZlcnMKKyAqIHNob3VsZCBjYWxsIHVzYl9raWxsX3VyYigpIGRpcmVjdGx5IGZvciBzeW5jaHJvbm91cyB1bmxpbmtpbmcuCisgKgorICogV2hlbiB0aGUgVVJCX0FTWU5DX1VOTElOSyB0cmFuc2ZlciBmbGFnIGZvciB0aGUgVVJCIGlzIHNldCwgdGhpcworICogcmVxdWVzdCBpcyBhc3luY2hyb25vdXMuICBTdWNjZXNzIGlzIGluZGljYXRlZCBieSByZXR1cm5pbmcgLUVJTlBST0dSRVNTLAorICogYXQgd2hpY2ggdGltZSB0aGUgVVJCIHdpbGwgbm9ybWFsbHkgaGF2ZSBiZWVuIHVubGlua2VkIGJ1dCBub3QgeWV0CisgKiBnaXZlbiBiYWNrIHRvIHRoZSBkZXZpY2UgZHJpdmVyLiAgV2hlbiBpdCBpcyBjYWxsZWQsIHRoZSBjb21wbGV0aW9uCisgKiBmdW5jdGlvbiB3aWxsIHNlZSB1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVC4gIEZhaWx1cmUgaXMgaW5kaWNhdGVkCisgKiBieSBhbnkgb3RoZXIgcmV0dXJuIHZhbHVlLiAgVW5saW5raW5nIHdpbGwgZmFpbCB3aGVuIHRoZSBVUkIgaXMgbm90CisgKiBjdXJyZW50bHkgImxpbmtlZCIgKGkuZS4sIGl0IHdhcyBuZXZlciBzdWJtaXR0ZWQsIG9yIGl0IHdhcyB1bmxpbmtlZAorICogYmVmb3JlLCBvciB0aGUgaGFyZHdhcmUgaXMgYWxyZWFkeSBmaW5pc2hlZCB3aXRoIGl0KSwgZXZlbiBpZiB0aGUKKyAqIGNvbXBsZXRpb24gaGFuZGxlciBoYXMgbm90IHlldCBydW4uCisgKgorICogVW5saW5raW5nIGFuZCBFbmRwb2ludCBRdWV1ZXM6CisgKgorICogSG9zdCBDb250cm9sbGVyIERyaXZlcnMgKEhDRHMpIHBsYWNlIGFsbCB0aGUgVVJCcyBmb3IgYSBwYXJ0aWN1bGFyCisgKiBlbmRwb2ludCBpbiBhIHF1ZXVlLiAgTm9ybWFsbHkgdGhlIHF1ZXVlIGFkdmFuY2VzIGFzIHRoZSBjb250cm9sbGVyCisgKiBoYXJkd2FyZSBwcm9jZXNzZXMgZWFjaCByZXF1ZXN0LiAgQnV0IHdoZW4gYW4gVVJCIHRlcm1pbmF0ZXMgd2l0aCBhbnkKKyAqIGZhdWx0IChzdWNoIGFzIGFuIGVycm9yLCBvciBiZWluZyB1bmxpbmtlZCkgaXRzIHF1ZXVlIHN0b3BzLCBhdCBsZWFzdAorICogdW50aWwgdGhhdCBVUkIncyBjb21wbGV0aW9uIHJvdXRpbmUgcmV0dXJucy4gIEl0IGlzIGd1YXJhbnRlZWQgdGhhdAorICogdGhlIHF1ZXVlIHdpbGwgbm90IHJlc3RhcnQgdW50aWwgYWxsIGl0cyB1bmxpbmtlZCBVUkJzIGhhdmUgYmVlbiBmdWxseQorICogcmV0aXJlZCwgd2l0aCB0aGVpciBjb21wbGV0aW9uIHJvdXRpbmVzIHJ1biwgZXZlbiBpZiB0aGF0J3Mgbm90IHVudGlsCisgKiBzb21lIHRpbWUgYWZ0ZXIgdGhlIG9yaWdpbmFsIGNvbXBsZXRpb24gaGFuZGxlciByZXR1cm5zLgorICoKKyAqIFRoaXMgbWVhbnMgdGhhdCBVU0IgZGV2aWNlIGRyaXZlcnMgY2FuIHNhZmVseSBidWlsZCBkZWVwIHF1ZXVlcyBmb3IKKyAqIGxhcmdlIG9yIGNvbXBsZXggdHJhbnNmZXJzLCBhbmQgY2xlYW4gdGhlbSB1cCByZWxpYWJseSBhZnRlciBhbnkgc29ydAorICogb2YgYWJvcnRlZCB0cmFuc2ZlciBieSB1bmxpbmtpbmcgYWxsIHBlbmRpbmcgVVJCcyBhdCB0aGUgZmlyc3QgZmF1bHQuCisgKgorICogTm90ZSB0aGF0IGFuIFVSQiB0ZXJtaW5hdGluZyBlYXJseSBiZWNhdXNlIGEgc2hvcnQgcGFja2V0IHdhcyByZWNlaXZlZAorICogd2lsbCBjb3VudCBhcyBhbiBlcnJvciBpZiBhbmQgb25seSBpZiB0aGUgVVJCX1NIT1JUX05PVF9PSyBmbGFnIGlzIHNldC4KKyAqIEFsc28sIHRoYXQgYWxsIHVubGlua3MgcGVyZm9ybWVkIGluIGFueSBVUkIgY29tcGxldGlvbiBoYW5kbGVyIG11c3QKKyAqIGJlIGFzeW5jaHJvbm91cy4KKyAqCisgKiBRdWV1ZXMgZm9yIGlzb2Nocm9ub3VzIGVuZHBvaW50cyBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseSwgYmVjYXVzZSB0aGV5CisgKiBhZHZhbmNlIGF0IGZpeGVkIHJhdGVzLiAgU3VjaCBxdWV1ZXMgZG8gbm90IHN0b3Agd2hlbiBhbiBVUkIgaXMgdW5saW5rZWQuCisgKiBBbiB1bmxpbmtlZCBVUkIgbWF5IGxlYXZlIGEgZ2FwIGluIHRoZSBzdHJlYW0gb2YgcGFja2V0cy4gIEl0IGlzIHVuZGVmaW5lZAorICogd2hldGhlciBzdWNoIGdhcHMgY2FuIGJlIGZpbGxlZCBpbi4KKyAqCisgKiBXaGVuIGEgY29udHJvbCBVUkIgdGVybWluYXRlcyB3aXRoIGFuIGVycm9yLCBpdCBpcyBsaWtlbHkgdGhhdCB0aGUKKyAqIHN0YXR1cyBzdGFnZSBvZiB0aGUgdHJhbnNmZXIgd2lsbCBub3QgdGFrZSBwbGFjZSwgZXZlbiBpZiBpdCBpcyBtZXJlbHkKKyAqIGEgc29mdCBlcnJvciByZXN1bHRpbmcgZnJvbSBhIHNob3J0LXBhY2tldCB3aXRoIFVSQl9TSE9SVF9OT1RfT0sgc2V0LgorICovCitpbnQgdXNiX3VubGlua191cmIoc3RydWN0IHVyYiAqdXJiKQoreworCWlmICghdXJiKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX0FTWU5DX1VOTElOSykpIHsKKyNpZmRlZiBDT05GSUdfREVCVUdfS0VSTkVMCisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAidXNiX3VubGlua191cmIoKSBpcyBkZXByZWNhdGVkIGZvciAiCisJCQkJInN5bmNocm9ub3VzIHVubGlua3MuICBVc2UgdXNiX2tpbGxfdXJiKCkgaW5zdGVhZC5cbiIpOworCQkJV0FSTl9PTigxKTsKKwkJfQorI2VuZGlmCisJCXVzYl9raWxsX3VyYih1cmIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCEodXJiLT5kZXYgJiYgdXJiLT5kZXYtPmJ1cyAmJiB1cmItPmRldi0+YnVzLT5vcCkpCisJCXJldHVybiAtRU5PREVWOworCXJldHVybiB1cmItPmRldi0+YnVzLT5vcC0+dW5saW5rX3VyYih1cmIsIC1FQ09OTlJFU0VUKTsKK30KKworLyoqCisgKiB1c2Jfa2lsbF91cmIgLSBjYW5jZWwgYSB0cmFuc2ZlciByZXF1ZXN0IGFuZCB3YWl0IGZvciBpdCB0byBmaW5pc2gKKyAqIEB1cmI6IHBvaW50ZXIgdG8gVVJCIGRlc2NyaWJpbmcgYSBwcmV2aW91c2x5IHN1Ym1pdHRlZCByZXF1ZXN0LAorICoJbWF5IGJlIE5VTEwKKyAqCisgKiBUaGlzIHJvdXRpbmUgY2FuY2VscyBhbiBpbi1wcm9ncmVzcyByZXF1ZXN0LiAgSXQgaXMgZ3VhcmFudGVlZCB0aGF0CisgKiB1cG9uIHJldHVybiBhbGwgY29tcGxldGlvbiBoYW5kbGVycyB3aWxsIGhhdmUgZmluaXNoZWQgYW5kIHRoZSBVUkIKKyAqIHdpbGwgYmUgdG90YWxseSBpZGxlIGFuZCBhdmFpbGFibGUgZm9yIHJldXNlLiAgVGhlc2UgZmVhdHVyZXMgbWFrZQorICogdGhpcyBhbiBpZGVhbCB3YXkgdG8gc3RvcCBJL08gaW4gYSBkaXNjb25uZWN0KCkgY2FsbGJhY2sgb3IgY2xvc2UoKQorICogZnVuY3Rpb24uICBJZiB0aGUgcmVxdWVzdCBoYXMgbm90IGFscmVhZHkgZmluaXNoZWQgb3IgYmVlbiB1bmxpbmtlZAorICogdGhlIGNvbXBsZXRpb24gaGFuZGxlciB3aWxsIHNlZSB1cmItPnN0YXR1cyA9PSAtRU5PRU5ULgorICoKKyAqIFdoaWxlIHRoZSByb3V0aW5lIGlzIHJ1bm5pbmcsIGF0dGVtcHRzIHRvIHJlc3VibWl0IHRoZSBVUkIgd2lsbCBmYWlsCisgKiB3aXRoIGVycm9yIC1FUEVSTS4gIFRodXMgZXZlbiBpZiB0aGUgVVJCJ3MgY29tcGxldGlvbiBoYW5kbGVyIGFsd2F5cworICogdHJpZXMgdG8gcmVzdWJtaXQsIGl0IHdpbGwgbm90IHN1Y2NlZWQgYW5kIHRoZSBVUkIgd2lsbCBiZWNvbWUgaWRsZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgbWF5IG5vdCBiZSB1c2VkIGluIGFuIGludGVycnVwdCBjb250ZXh0IChzdWNoIGFzIGEgYm90dG9tCisgKiBoYWxmIG9yIGEgY29tcGxldGlvbiBoYW5kbGVyKSwgb3Igd2hlbiBob2xkaW5nIGEgc3BpbmxvY2ssIG9yIGluIG90aGVyCisgKiBzaXR1YXRpb25zIHdoZXJlIHRoZSBjYWxsZXIgY2FuJ3Qgc2NoZWR1bGUoKS4KKyAqLwordm9pZCB1c2Jfa2lsbF91cmIoc3RydWN0IHVyYiAqdXJiKQoreworCWlmICghKHVyYiAmJiB1cmItPmRldiAmJiB1cmItPmRldi0+YnVzICYmIHVyYi0+ZGV2LT5idXMtPm9wKSkKKwkJcmV0dXJuOworCXNwaW5fbG9ja19pcnEoJnVyYi0+bG9jayk7CisJKyt1cmItPnJlamVjdDsKKwlzcGluX3VubG9ja19pcnEoJnVyYi0+bG9jayk7CisKKwl1cmItPmRldi0+YnVzLT5vcC0+dW5saW5rX3VyYih1cmIsIC1FTk9FTlQpOworCXdhaXRfZXZlbnQodXNiX2tpbGxfdXJiX3F1ZXVlLCBhdG9taWNfcmVhZCgmdXJiLT51c2VfY291bnQpID09IDApOworCisJc3Bpbl9sb2NrX2lycSgmdXJiLT5sb2NrKTsKKwktLXVyYi0+cmVqZWN0OworCXNwaW5fdW5sb2NrX2lycSgmdXJiLT5sb2NrKTsKK30KKworRVhQT1JUX1NZTUJPTCh1c2JfaW5pdF91cmIpOworRVhQT1JUX1NZTUJPTCh1c2JfYWxsb2NfdXJiKTsKK0VYUE9SVF9TWU1CT0wodXNiX2ZyZWVfdXJiKTsKK0VYUE9SVF9TWU1CT0wodXNiX2dldF91cmIpOworRVhQT1JUX1NZTUJPTCh1c2Jfc3VibWl0X3VyYik7CitFWFBPUlRfU1lNQk9MKHVzYl91bmxpbmtfdXJiKTsKK0VYUE9SVF9TWU1CT0wodXNiX2tpbGxfdXJiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS91c2IuYyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA1MzRlZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKQEAgLTAsMCArMSwxNTczIEBACisvKgorICogZHJpdmVycy91c2IvdXNiLmMKKyAqCisgKiAoQykgQ29weXJpZ2h0IExpbnVzIFRvcnZhbGRzIDE5OTkKKyAqIChDKSBDb3B5cmlnaHQgSm9oYW5uZXMgRXJkZmVsdCAxOTk5LTIwMDEKKyAqIChDKSBDb3B5cmlnaHQgQW5kcmVhcyBHYWwgMTk5OQorICogKEMpIENvcHlyaWdodCBHcmVnb3J5IFAuIFNtaXRoIDE5OTkKKyAqIChDKSBDb3B5cmlnaHQgRGV0aSBGbGllZ2wgMTk5OSAobmV3IFVTQiBhcmNoaXRlY3R1cmUpCisgKiAoQykgQ29weXJpZ2h0IFJhbmR5IER1bmxhcCAyMDAwCisgKiAoQykgQ29weXJpZ2h0IERhdmlkIEJyb3duZWxsIDIwMDAtMjAwNAorICogKEMpIENvcHlyaWdodCBZZ2dkcmFzaWwgQ29tcHV0aW5nLCBJbmMuIDIwMDAKKyAqICAgICAodXNiX2RldmljZV9pZCBtYXRjaGluZyBjaGFuZ2VzIGJ5IEFkYW0gSi4gUmljaHRlcikKKyAqIChDKSBDb3B5cmlnaHQgR3JlZyBLcm9haC1IYXJ0bWFuIDIwMDItMjAwMworICoKKyAqIE5PVEUhIFRoaXMgaXMgbm90IGFjdHVhbGx5IGEgZHJpdmVyIGF0IGFsbCwgcmF0aGVyIHRoaXMgaXMKKyAqIGp1c3QgYSBjb2xsZWN0aW9uIG9mIGhlbHBlciByb3V0aW5lcyB0aGF0IGltcGxlbWVudCB0aGUKKyAqIGdlbmVyaWMgVVNCIHRoaW5ncyB0aGF0IHRoZSByZWFsIGRyaXZlcnMgY2FuIHVzZS4uCisgKgorICogVGhpbmsgb2YgdGhpcyBhcyBhICJVU0IgbGlicmFyeSIgcmF0aGVyIHRoYW4gYW55dGhpbmcgZWxzZS4KKyAqIEl0IHNob3VsZCBiZSBjb25zaWRlcmVkIGEgc2xhdmUsIHdpdGggbm8gY2FsbGJhY2tzLiBDYWxsYmFja3MKKyAqIGFyZSBldmlsLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKwkjZGVmaW5lIERFQlVHCisjZWxzZQorCSN1bmRlZiBERUJVRworI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+ICAvKiBmb3IgaW5faW50ZXJydXB0KCkgKi8KKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKyNpbmNsdWRlICJoY2QuaCIKKyNpbmNsdWRlICJ1c2IuaCIKKworZXh0ZXJuIGludCAgdXNiX2h1Yl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgdXNiX2h1Yl9jbGVhbnVwKHZvaWQpOworZXh0ZXJuIGludCB1c2JfbWFqb3JfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHVzYl9tYWpvcl9jbGVhbnVwKHZvaWQpOworZXh0ZXJuIGludCB1c2JfaG9zdF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgdXNiX2hvc3RfY2xlYW51cCh2b2lkKTsKKworCitjb25zdCBjaGFyICp1c2Jjb3JlX25hbWUgPSAidXNiY29yZSI7CisKK3N0YXRpYyBpbnQgbm91c2I7CS8qIERpc2FibGUgVVNCIHdoZW4gYnVpbHQgaW50byBrZXJuZWwgaW1hZ2UgKi8KKwkJCS8qIE5vdCBob25vcmVkIG9uIG1vZHVsYXIgYnVpbGQgKi8KKworc3RhdGljIERFQ0xBUkVfUldTRU0odXNiX2FsbF9kZXZpY2VzX3J3c2VtKTsKKworCitzdGF0aWMgaW50IGdlbmVyaWNfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgZ2VuZXJpY19yZW1vdmUgKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHVzYl9nZW5lcmljX2RyaXZlciA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9CSJ1c2IiLAorCS5idXMgPSAmdXNiX2J1c190eXBlLAorCS5wcm9iZSA9IGdlbmVyaWNfcHJvYmUsCisJLnJlbW92ZSA9IGdlbmVyaWNfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCB1c2JfZ2VuZXJpY19kcml2ZXJfZGF0YTsKKworLyogY2FsbGVkIGZyb20gZHJpdmVyIGNvcmUgd2l0aCB1c2JfYnVzX3R5cGUuc3Vic3lzIHdyaXRlbG9jayAqLworc3RhdGljIGludCB1c2JfcHJvYmVfaW50ZXJmYWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqIGludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9kcml2ZXIgKiBkcml2ZXIgPSB0b191c2JfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKwljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQ7CisJaW50IGVycm9yID0gLUVOT0RFVjsKKworCWRldl9kYmcoZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIWRyaXZlci0+cHJvYmUpCisJCXJldHVybiBlcnJvcjsKKwkvKiBGSVhNRSB3ZSdkIG11Y2ggcHJlZmVyIHRvIGp1c3QgcmVzdW1lIGl0IC4uLiAqLworCWlmIChpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKQorCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKKworCWlkID0gdXNiX21hdGNoX2lkIChpbnRmLCBkcml2ZXItPmlkX3RhYmxlKTsKKwlpZiAoaWQpIHsKKwkJZGV2X2RiZyAoZGV2LCAiJXMgLSBnb3QgaWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWludGYtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfQklORElORzsKKwkJZXJyb3IgPSBkcml2ZXItPnByb2JlIChpbnRmLCBpZCk7CisJCWludGYtPmNvbmRpdGlvbiA9IGVycm9yID8gVVNCX0lOVEVSRkFDRV9VTkJPVU5EIDoKKwkJCQlVU0JfSU5URVJGQUNFX0JPVU5EOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworLyogY2FsbGVkIGZyb20gZHJpdmVyIGNvcmUgd2l0aCB1c2JfYnVzX3R5cGUuc3Vic3lzIHdyaXRlbG9jayAqLworc3RhdGljIGludCB1c2JfdW5iaW5kX2ludGVyZmFjZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlciA9IHRvX3VzYl9kcml2ZXIoaW50Zi0+ZGV2LmRyaXZlcik7CisKKwlpbnRmLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX1VOQklORElORzsKKworCS8qIHJlbGVhc2UgYWxsIHVyYnMgZm9yIHRoaXMgaW50ZXJmYWNlICovCisJdXNiX2Rpc2FibGVfaW50ZXJmYWNlKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIGludGYpOworCisJaWYgKGRyaXZlciAmJiBkcml2ZXItPmRpc2Nvbm5lY3QpCisJCWRyaXZlci0+ZGlzY29ubmVjdChpbnRmKTsKKworCS8qIHJlc2V0IG90aGVyIGludGVyZmFjZSBzdGF0ZSAqLworCXVzYl9zZXRfaW50ZXJmYWNlKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksCisJCQlpbnRmLT5hbHRzZXR0aW5nWzBdLmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJCTApOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJaW50Zi0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9VTkJPVU5EOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdXNiX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgYSBVU0IgZHJpdmVyCisgKiBAbmV3X2RyaXZlcjogVVNCIG9wZXJhdGlvbnMgZm9yIHRoZSBkcml2ZXIKKyAqCisgKiBSZWdpc3RlcnMgYSBVU0IgZHJpdmVyIHdpdGggdGhlIFVTQiBjb3JlLiAgVGhlIGxpc3Qgb2YgdW5hdHRhY2hlZAorICogaW50ZXJmYWNlcyB3aWxsIGJlIHJlc2Nhbm5lZCB3aGVuZXZlciBhIG5ldyBkcml2ZXIgaXMgYWRkZWQsIGFsbG93aW5nCisgKiB0aGUgbmV3IGRyaXZlciB0byBhdHRhY2ggdG8gYW55IHJlY29nbml6ZWQgZGV2aWNlcy4KKyAqIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgYW5kIDAgb24gc3VjY2Vzcy4KKyAqIAorICogTk9URTogaWYgeW91IHdhbnQgeW91ciBkcml2ZXIgdG8gdXNlIHRoZSBVU0IgbWFqb3IgbnVtYmVyLCB5b3UgbXVzdCBjYWxsCisgKiB1c2JfcmVnaXN0ZXJfZGV2KCkgdG8gZW5hYmxlIHRoYXQgZnVuY3Rpb25hbGl0eS4gIFRoaXMgZnVuY3Rpb24gbm8gbG9uZ2VyCisgKiB0YWtlcyBjYXJlIG9mIHRoYXQuCisgKi8KK2ludCB1c2JfcmVnaXN0ZXIoc3RydWN0IHVzYl9kcml2ZXIgKm5ld19kcml2ZXIpCit7CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAobm91c2IpCisJCXJldHVybiAtRU5PREVWOworCisJbmV3X2RyaXZlci0+ZHJpdmVyLm5hbWUgPSAoY2hhciAqKW5ld19kcml2ZXItPm5hbWU7CisJbmV3X2RyaXZlci0+ZHJpdmVyLmJ1cyA9ICZ1c2JfYnVzX3R5cGU7CisJbmV3X2RyaXZlci0+ZHJpdmVyLnByb2JlID0gdXNiX3Byb2JlX2ludGVyZmFjZTsKKwluZXdfZHJpdmVyLT5kcml2ZXIucmVtb3ZlID0gdXNiX3VuYmluZF9pbnRlcmZhY2U7CisJbmV3X2RyaXZlci0+ZHJpdmVyLm93bmVyID0gbmV3X2RyaXZlci0+b3duZXI7CisKKwl1c2JfbG9ja19hbGxfZGV2aWNlcygpOworCXJldHZhbCA9IGRyaXZlcl9yZWdpc3RlcigmbmV3X2RyaXZlci0+ZHJpdmVyKTsKKwl1c2JfdW5sb2NrX2FsbF9kZXZpY2VzKCk7CisKKwlpZiAoIXJldHZhbCkgeworCQlwcl9pbmZvKCIlczogcmVnaXN0ZXJlZCBuZXcgZHJpdmVyICVzXG4iLAorCQkJdXNiY29yZV9uYW1lLCBuZXdfZHJpdmVyLT5uYW1lKTsKKwkJdXNiZnNfdXBkYXRlX3NwZWNpYWwoKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciAlZCByZWdpc3RlcmluZyBkcml2ZXIgJXNcbiIsCisJCQl1c2Jjb3JlX25hbWUsIHJldHZhbCwgbmV3X2RyaXZlci0+bmFtZSk7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiB1c2JfZGVyZWdpc3RlciAtIHVucmVnaXN0ZXIgYSBVU0IgZHJpdmVyCisgKiBAZHJpdmVyOiBVU0Igb3BlcmF0aW9ucyBvZiB0aGUgZHJpdmVyIHRvIHVucmVnaXN0ZXIKKyAqIENvbnRleHQ6IG11c3QgYmUgYWJsZSB0byBzbGVlcAorICoKKyAqIFVubGlua3MgdGhlIHNwZWNpZmllZCBkcml2ZXIgZnJvbSB0aGUgaW50ZXJuYWwgVVNCIGRyaXZlciBsaXN0LgorICogCisgKiBOT1RFOiBJZiB5b3UgY2FsbGVkIHVzYl9yZWdpc3Rlcl9kZXYoKSwgeW91IHN0aWxsIG5lZWQgdG8gY2FsbAorICogdXNiX2RlcmVnaXN0ZXJfZGV2KCkgdG8gY2xlYW4gdXAgeW91ciBkcml2ZXIncyBhbGxvY2F0ZWQgbWlub3IgbnVtYmVycywKKyAqIHRoaXMgKiBjYWxsIHdpbGwgbm8gbG9uZ2VyIGRvIGl0IGZvciB5b3UuCisgKi8KK3ZvaWQgdXNiX2RlcmVnaXN0ZXIoc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlcikKK3sKKwlwcl9pbmZvKCIlczogZGVyZWdpc3RlcmluZyBkcml2ZXIgJXNcbiIsIHVzYmNvcmVfbmFtZSwgZHJpdmVyLT5uYW1lKTsKKworCXVzYl9sb2NrX2FsbF9kZXZpY2VzKCk7CisJZHJpdmVyX3VucmVnaXN0ZXIgKCZkcml2ZXItPmRyaXZlcik7CisJdXNiX3VubG9ja19hbGxfZGV2aWNlcygpOworCisJdXNiZnNfdXBkYXRlX3NwZWNpYWwoKTsKK30KKworLyoqCisgKiB1c2JfaWZudW1fdG9faWYgLSBnZXQgdGhlIGludGVyZmFjZSBvYmplY3Qgd2l0aCBhIGdpdmVuIGludGVyZmFjZSBudW1iZXIKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugd2hvc2UgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIGNvbnNpZGVyZWQKKyAqIEBpZm51bTogdGhlIGRlc2lyZWQgaW50ZXJmYWNlCisgKgorICogVGhpcyB3YWxrcyB0aGUgZGV2aWNlIGRlc2NyaXB0b3IgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIGNvbmZpZ3VyYXRpb24KKyAqIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHdpdGggdGhhdCBwYXJ0aWN1bGFyIGludGVyZmFjZQorICogbnVtYmVyLCBvciBudWxsLgorICoKKyAqIE5vdGUgdGhhdCBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3JzIGFyZSBub3QgcmVxdWlyZWQgdG8gYXNzaWduIGludGVyZmFjZQorICogbnVtYmVycyBzZXF1ZW50aWFsbHksIHNvIHRoYXQgaXQgd291bGQgYmUgaW5jb3JyZWN0IHRvIGFzc3VtZSB0aGF0CisgKiB0aGUgZmlyc3QgaW50ZXJmYWNlIGluIHRoYXQgZGVzY3JpcHRvciBjb3JyZXNwb25kcyB0byBpbnRlcmZhY2UgemVyby4KKyAqIFRoaXMgcm91dGluZSBoZWxwcyBkZXZpY2UgZHJpdmVycyBhdm9pZCBzdWNoIG1pc3Rha2VzLgorICogSG93ZXZlciwgeW91IHNob3VsZCBtYWtlIHN1cmUgdGhhdCB5b3UgZG8gdGhlIHJpZ2h0IHRoaW5nIHdpdGggYW55CisgKiBhbHRlcm5hdGUgc2V0dGluZ3MgYXZhaWxhYmxlIGZvciB0aGlzIGludGVyZmFjZXMuCisgKgorICogRG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHVubGVzcyB5b3UgYXJlIGJvdW5kIHRvIG9uZSBvZiB0aGUgaW50ZXJmYWNlcworICogb24gdGhpcyBkZXZpY2Ugb3IgeW91IGhhdmUgbG9ja2VkIHRoZSBkZXZpY2UhCisgKi8KK3N0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfaWZudW1fdG9faWYoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaWZudW0pCit7CisJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqY29uZmlnID0gZGV2LT5hY3Rjb25maWc7CisJaW50IGk7CisKKwlpZiAoIWNvbmZpZykKKwkJcmV0dXJuIE5VTEw7CisJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKQorCQlpZiAoY29uZmlnLT5pbnRlcmZhY2VbaV0tPmFsdHNldHRpbmdbMF0KKwkJCQkuZGVzYy5iSW50ZXJmYWNlTnVtYmVyID09IGlmbnVtKQorCQkJcmV0dXJuIGNvbmZpZy0+aW50ZXJmYWNlW2ldOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogdXNiX2FsdG51bV90b19hbHRzZXR0aW5nIC0gZ2V0IHRoZSBhbHRzZXR0aW5nIHN0cnVjdHVyZSB3aXRoIGEgZ2l2ZW4KKyAqCWFsdGVybmF0ZSBzZXR0aW5nIG51bWJlci4KKyAqIEBpbnRmOiB0aGUgaW50ZXJmYWNlIGNvbnRhaW5pbmcgdGhlIGFsdHNldHRpbmcgaW4gcXVlc3Rpb24KKyAqIEBhbHRudW06IHRoZSBkZXNpcmVkIGFsdGVybmF0ZSBzZXR0aW5nIG51bWJlcgorICoKKyAqIFRoaXMgc2VhcmNoZXMgdGhlIGFsdHNldHRpbmcgYXJyYXkgb2YgdGhlIHNwZWNpZmllZCBpbnRlcmZhY2UgZm9yCisgKiBhbiBlbnRyeSB3aXRoIHRoZSBjb3JyZWN0IGJBbHRlcm5hdGVTZXR0aW5nIHZhbHVlIGFuZCByZXR1cm5zIGEgcG9pbnRlcgorICogdG8gdGhhdCBlbnRyeSwgb3IgbnVsbC4KKyAqCisgKiBOb3RlIHRoYXQgYWx0c2V0dGluZ3MgbmVlZCBub3QgYmUgc3RvcmVkIHNlcXVlbnRpYWxseSBieSBudW1iZXIsIHNvCisgKiBpdCB3b3VsZCBiZSBpbmNvcnJlY3QgdG8gYXNzdW1lIHRoYXQgdGhlIGZpcnN0IGFsdHNldHRpbmcgZW50cnkgaW4KKyAqIHRoZSBhcnJheSBjb3JyZXNwb25kcyB0byBhbHRzZXR0aW5nIHplcm8uICBUaGlzIHJvdXRpbmUgaGVscHMgZGV2aWNlCisgKiBkcml2ZXJzIGF2b2lkIHN1Y2ggbWlzdGFrZXMuCisgKgorICogRG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHVubGVzcyB5b3UgYXJlIGJvdW5kIHRvIHRoZSBpbnRmIGludGVyZmFjZQorICogb3IgeW91IGhhdmUgbG9ja2VkIHRoZSBkZXZpY2UhCisgKi8KK3N0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKnVzYl9hbHRudW1fdG9fYWx0c2V0dGluZyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJdW5zaWduZWQgaW50IGFsdG51bSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnRmLT5udW1fYWx0c2V0dGluZzsgaSsrKSB7CisJCWlmIChpbnRmLT5hbHRzZXR0aW5nW2ldLmRlc2MuYkFsdGVybmF0ZVNldHRpbmcgPT0gYWx0bnVtKQorCQkJcmV0dXJuICZpbnRmLT5hbHRzZXR0aW5nW2ldOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiB1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSAtIGJpbmQgYSBkcml2ZXIgdG8gYW4gaW50ZXJmYWNlCisgKiBAZHJpdmVyOiB0aGUgZHJpdmVyIHRvIGJlIGJvdW5kCisgKiBAaWZhY2U6IHRoZSBpbnRlcmZhY2UgdG8gd2hpY2ggaXQgd2lsbCBiZSBib3VuZDsgbXVzdCBiZSBpbiB0aGUKKyAqCXVzYiBkZXZpY2UncyBhY3RpdmUgY29uZmlndXJhdGlvbgorICogQHByaXY6IGRyaXZlciBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGludGVyZmFjZQorICoKKyAqIFRoaXMgaXMgdXNlZCBieSB1c2IgZGV2aWNlIGRyaXZlcnMgdGhhdCBuZWVkIHRvIGNsYWltIG1vcmUgdGhhbiBvbmUKKyAqIGludGVyZmFjZSBvbiBhIGRldmljZSB3aGVuIHByb2JpbmcgKGF1ZGlvIGFuZCBhY20gYXJlIGN1cnJlbnQgZXhhbXBsZXMpLgorICogTm8gZGV2aWNlIGRyaXZlciBzaG91bGQgZGlyZWN0bHkgbW9kaWZ5IGludGVybmFsIHVzYl9pbnRlcmZhY2Ugb3IKKyAqIHVzYl9kZXZpY2Ugc3RydWN0dXJlIG1lbWJlcnMuCisgKgorICogRmV3IGRyaXZlcnMgc2hvdWxkIG5lZWQgdG8gdXNlIHRoaXMgcm91dGluZSwgc2luY2UgdGhlIG1vc3QgbmF0dXJhbAorICogd2F5IHRvIGJpbmQgdG8gYW4gaW50ZXJmYWNlIGlzIHRvIHJldHVybiB0aGUgcHJpdmF0ZSBkYXRhIGZyb20KKyAqIHRoZSBkcml2ZXIncyBwcm9iZSgpIG1ldGhvZC4KKyAqCisgKiBDYWxsZXJzIG11c3Qgb3duIHRoZSBkZXZpY2UgbG9jayBhbmQgdGhlIGRyaXZlciBtb2RlbCdzIHVzYl9idXNfdHlwZS5zdWJzeXMKKyAqIHdyaXRlbG9jay4gIFNvIGRyaXZlciBwcm9iZSgpIGVudHJpZXMgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nLAorICogYnV0IG90aGVyIGNhbGwgY29udGV4dHMgbWF5IG5lZWQgdG8gZXhwbGljaXRseSBjbGFpbSB0aG9zZSBsb2Nrcy4KKyAqLworaW50IHVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKHN0cnVjdCB1c2JfZHJpdmVyICpkcml2ZXIsCisJCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlLCB2b2lkKiBwcml2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpZmFjZS0+ZGV2OworCisJaWYgKGRldi0+ZHJpdmVyKQorCQlyZXR1cm4gLUVCVVNZOworCisJZGV2LT5kcml2ZXIgPSAmZHJpdmVyLT5kcml2ZXI7CisJdXNiX3NldF9pbnRmZGF0YShpZmFjZSwgcHJpdik7CisJaWZhY2UtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfQk9VTkQ7CisKKwkvKiBpZiBpbnRlcmZhY2Ugd2FzIGFscmVhZHkgYWRkZWQsIGJpbmQgbm93OyBlbHNlIGxldAorCSAqIHRoZSBmdXR1cmUgZGV2aWNlX2FkZCgpIGJpbmQgaXQsIGJ5cGFzc2luZyBwcm9iZSgpCisJICovCisJaWYgKCFsaXN0X2VtcHR5ICgmZGV2LT5idXNfbGlzdCkpCisJCWRldmljZV9iaW5kX2RyaXZlcihkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZSAtIHVuYmluZCBhIGRyaXZlciBmcm9tIGFuIGludGVyZmFjZQorICogQGRyaXZlcjogdGhlIGRyaXZlciB0byBiZSB1bmJvdW5kCisgKiBAaWZhY2U6IHRoZSBpbnRlcmZhY2UgZnJvbSB3aGljaCBpdCB3aWxsIGJlIHVuYm91bmQKKyAqCisgKiBUaGlzIGNhbiBiZSB1c2VkIGJ5IGRyaXZlcnMgdG8gcmVsZWFzZSBhbiBpbnRlcmZhY2Ugd2l0aG91dCB3YWl0aW5nCisgKiBmb3IgdGhlaXIgZGlzY29ubmVjdCgpIG1ldGhvZHMgdG8gYmUgY2FsbGVkLiAgSW4gdHlwaWNhbCBjYXNlcyB0aGlzCisgKiBhbHNvIGNhdXNlcyB0aGUgZHJpdmVyIGRpc2Nvbm5lY3QoKSBtZXRob2QgdG8gYmUgY2FsbGVkLgorICoKKyAqIFRoaXMgY2FsbCBpcyBzeW5jaHJvbm91cywgYW5kIG1heSBub3QgYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqIENhbGxlcnMgbXVzdCBvd24gdGhlIGRldmljZSBsb2NrIGFuZCB0aGUgZHJpdmVyIG1vZGVsJ3MgdXNiX2J1c190eXBlLnN1YnN5cworICogd3JpdGVsb2NrLiAgU28gZHJpdmVyIGRpc2Nvbm5lY3QoKSBlbnRyaWVzIGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZywKKyAqIGJ1dCBvdGhlciBjYWxsIGNvbnRleHRzIG1heSBuZWVkIHRvIGV4cGxpY2l0bHkgY2xhaW0gdGhvc2UgbG9ja3MuCisgKi8KK3ZvaWQgdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZShzdHJ1Y3QgdXNiX2RyaXZlciAqZHJpdmVyLAorCQkJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmlmYWNlLT5kZXY7CisKKwkvKiB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGRvbid0IHJlbGVhc2Ugc29tZXRoaW5nIHRoYXQncyBub3Qgb3VycyAqLworCWlmICghZGV2LT5kcml2ZXIgfHwgZGV2LT5kcml2ZXIgIT0gJmRyaXZlci0+ZHJpdmVyKQorCQlyZXR1cm47CisKKwkvKiBkb24ndCBkaXNjb25uZWN0IGZyb20gZGlzY29ubmVjdCgpLCBvciBiZWZvcmUgZGV2X2FkZCgpICovCisJaWYgKCFsaXN0X2VtcHR5ICgmZGV2LT5kcml2ZXJfbGlzdCkgJiYgIWxpc3RfZW1wdHkgKCZkZXYtPmJ1c19saXN0KSkKKwkJZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRldik7CisKKwlkZXYtPmRyaXZlciA9IE5VTEw7CisJdXNiX3NldF9pbnRmZGF0YShpZmFjZSwgTlVMTCk7CisJaWZhY2UtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfVU5CT1VORDsKK30KKworLyoqCisgKiB1c2JfbWF0Y2hfaWQgLSBmaW5kIGZpcnN0IHVzYl9kZXZpY2VfaWQgbWF0Y2hpbmcgZGV2aWNlIG9yIGludGVyZmFjZQorICogQGludGVyZmFjZTogdGhlIGludGVyZmFjZSBvZiBpbnRlcmVzdAorICogQGlkOiBhcnJheSBvZiB1c2JfZGV2aWNlX2lkIHN0cnVjdHVyZXMsIHRlcm1pbmF0ZWQgYnkgemVybyBlbnRyeQorICoKKyAqIHVzYl9tYXRjaF9pZCBzZWFyY2hlcyBhbiBhcnJheSBvZiB1c2JfZGV2aWNlX2lkJ3MgYW5kIHJldHVybnMKKyAqIHRoZSBmaXJzdCBvbmUgbWF0Y2hpbmcgdGhlIGRldmljZSBvciBpbnRlcmZhY2UsIG9yIG51bGwuCisgKiBUaGlzIGlzIHVzZWQgd2hlbiBiaW5kaW5nIChvciByZWJpbmRpbmcpIGEgZHJpdmVyIHRvIGFuIGludGVyZmFjZS4KKyAqIE1vc3QgVVNCIGRldmljZSBkcml2ZXJzIHdpbGwgdXNlIHRoaXMgaW5kaXJlY3RseSwgdGhyb3VnaCB0aGUgdXNiIGNvcmUsCisgKiBidXQgc29tZSBsYXllcmVkIGRyaXZlciBmcmFtZXdvcmtzIHVzZSBpdCBkaXJlY3RseS4KKyAqIFRoZXNlIGRldmljZSB0YWJsZXMgYXJlIGV4cG9ydGVkIHdpdGggTU9EVUxFX0RFVklDRV9UQUJMRSwgdGhyb3VnaAorICogbW9kdXRpbHMgYW5kICJtb2R1bGVzLnVzYm1hcCIsIHRvIHN1cHBvcnQgdGhlIGRyaXZlciBsb2FkaW5nCisgKiBmdW5jdGlvbmFsaXR5IG9mIFVTQiBob3RwbHVnZ2luZy4KKyAqCisgKiBXaGF0IE1hdGNoZXM6CisgKgorICogVGhlICJtYXRjaF9mbGFncyIgZWxlbWVudCBpbiBhIHVzYl9kZXZpY2VfaWQgY29udHJvbHMgd2hpY2gKKyAqIG1lbWJlcnMgYXJlIHVzZWQuICBJZiB0aGUgY29ycmVzcG9uZGluZyBiaXQgaXMgc2V0LCB0aGUKKyAqIHZhbHVlIGluIHRoZSBkZXZpY2VfaWQgbXVzdCBtYXRjaCBpdHMgY29ycmVzcG9uZGluZyBtZW1iZXIKKyAqIGluIHRoZSBkZXZpY2Ugb3IgaW50ZXJmYWNlIGRlc2NyaXB0b3IsIG9yIGVsc2UgdGhlIGRldmljZV9pZAorICogZG9lcyBub3QgbWF0Y2guCisgKgorICogImRyaXZlcl9pbmZvIiBpcyBub3JtYWxseSB1c2VkIG9ubHkgYnkgZGV2aWNlIGRyaXZlcnMsCisgKiBidXQgeW91IGNhbiBjcmVhdGUgYSB3aWxkY2FyZCAibWF0Y2hlcyBhbnl0aGluZyIgdXNiX2RldmljZV9pZAorICogYXMgYSBkcml2ZXIncyAibW9kdWxlcy51c2JtYXAiIGVudHJ5IGlmIHlvdSBwcm92aWRlIGFuIGlkIHdpdGgKKyAqIG9ubHkgYSBub256ZXJvICJkcml2ZXJfaW5mbyIgZmllbGQuICBJZiB5b3UgZG8gdGhpcywgdGhlIFVTQiBkZXZpY2UKKyAqIGRyaXZlcidzIHByb2JlKCkgcm91dGluZSBzaG91bGQgdXNlIGFkZGl0aW9uYWwgaW50ZWxsaWdlbmNlIHRvCisgKiBkZWNpZGUgd2hldGhlciB0byBiaW5kIHRvIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlLgorICogCisgKiBXaGF0IE1ha2VzIEdvb2QgdXNiX2RldmljZV9pZCBUYWJsZXM6CisgKgorICogVGhlIG1hdGNoIGFsZ29yaXRobSBpcyB2ZXJ5IHNpbXBsZSwgc28gdGhhdCBpbnRlbGxpZ2VuY2UgaW4KKyAqIGRyaXZlciBzZWxlY3Rpb24gbXVzdCBjb21lIGZyb20gc21hcnQgZHJpdmVyIGlkIHJlY29yZHMuCisgKiBVbmxlc3MgeW91IGhhdmUgZ29vZCByZWFzb25zIHRvIHVzZSBhbm90aGVyIHNlbGVjdGlvbiBwb2xpY3ksCisgKiBwcm92aWRlIG1hdGNoIGVsZW1lbnRzIG9ubHkgaW4gcmVsYXRlZCBncm91cHMsIGFuZCBvcmRlciBtYXRjaAorICogc3BlY2lmaWVycyBmcm9tIHNwZWNpZmljIHRvIGdlbmVyYWwuICBVc2UgdGhlIG1hY3JvcyBwcm92aWRlZAorICogZm9yIHRoYXQgcHVycG9zZSBpZiB5b3UgY2FuLgorICoKKyAqIFRoZSBtb3N0IHNwZWNpZmljIG1hdGNoIHNwZWNpZmllcnMgdXNlIGRldmljZSBkZXNjcmlwdG9yCisgKiBkYXRhLiAgVGhlc2UgYXJlIGNvbW1vbmx5IHVzZWQgd2l0aCBwcm9kdWN0LXNwZWNpZmljIG1hdGNoZXM7CisgKiB0aGUgVVNCX0RFVklDRSBtYWNybyBsZXRzIHlvdSBwcm92aWRlIHZlbmRvciBhbmQgcHJvZHVjdCBJRHMsCisgKiBhbmQgeW91IGNhbiBhbHNvIG1hdGNoIGFnYWluc3QgcmFuZ2VzIG9mIHByb2R1Y3QgcmV2aXNpb25zLgorICogVGhlc2UgYXJlIHdpZGVseSB1c2VkIGZvciBkZXZpY2VzIHdpdGggYXBwbGljYXRpb24gb3IgdmVuZG9yCisgKiBzcGVjaWZpYyBiRGV2aWNlQ2xhc3MgdmFsdWVzLgorICoKKyAqIE1hdGNoZXMgYmFzZWQgb24gZGV2aWNlIGNsYXNzL3N1YmNsYXNzL3Byb3RvY29sIHNwZWNpZmljYXRpb25zCisgKiBhcmUgc2xpZ2h0bHkgbW9yZSBnZW5lcmFsOyB1c2UgdGhlIFVTQl9ERVZJQ0VfSU5GTyBtYWNybywgb3IKKyAqIGl0cyBzaWJsaW5ncy4gIFRoZXNlIGFyZSB1c2VkIHdpdGggc2luZ2xlLWZ1bmN0aW9uIGRldmljZXMKKyAqIHdoZXJlIGJEZXZpY2VDbGFzcyBkb2Vzbid0IHNwZWNpZnkgdGhhdCBlYWNoIGludGVyZmFjZSBoYXMKKyAqIGl0cyBvd24gY2xhc3MuIAorICoKKyAqIE1hdGNoZXMgYmFzZWQgb24gaW50ZXJmYWNlIGNsYXNzL3N1YmNsYXNzL3Byb3RvY29sIGFyZSB0aGUKKyAqIG1vc3QgZ2VuZXJhbDsgdGhleSBsZXQgZHJpdmVycyBiaW5kIHRvIGFueSBpbnRlcmZhY2Ugb24gYQorICogbXVsdGlwbGUtZnVuY3Rpb24gZGV2aWNlLiAgVXNlIHRoZSBVU0JfSU5URVJGQUNFX0lORk8KKyAqIG1hY3JvLCBvciBpdHMgc2libGluZ3MsIHRvIG1hdGNoIGNsYXNzLXBlci1pbnRlcmZhY2Ugc3R5bGUgCisgKiBkZXZpY2VzIChhcyByZWNvcmRlZCBpbiBiRGV2aWNlQ2xhc3MpLgorICogIAorICogV2l0aGluIHRob3NlIGdyb3VwcywgcmVtZW1iZXIgdGhhdCBub3QgYWxsIGNvbWJpbmF0aW9ucyBhcmUKKyAqIG1lYW5pbmdmdWwuICBGb3IgZXhhbXBsZSwgZG9uJ3QgZ2l2ZSBhIHByb2R1Y3QgdmVyc2lvbiByYW5nZQorICogd2l0aG91dCB2ZW5kb3IgYW5kIHByb2R1Y3QgSURzOyBvciBzcGVjaWZ5IGEgcHJvdG9jb2wgd2l0aG91dAorICogaXRzIGFzc29jaWF0ZWQgY2xhc3MgYW5kIHN1YmNsYXNzLgorICovICAgCitjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqCit1c2JfbWF0Y2hfaWQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGY7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKworCS8qIHByb2NfY29ubmVjdGluZm8gaW4gZGV2aW8uYyBtYXkgY2FsbCB1cyB3aXRoIGlkID09IE5VTEwuICovCisJaWYgKGlkID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJaW50ZiA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CisJZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCisJLyogSXQgaXMgaW1wb3J0YW50IHRvIGNoZWNrIHRoYXQgaWQtPmRyaXZlcl9pbmZvIGlzIG5vbnplcm8sCisJICAgc2luY2UgYW4gZW50cnkgdGhhdCBpcyBhbGwgemVyb2VzIGV4Y2VwdCBmb3IgYSBub256ZXJvCisJICAgaWQtPmRyaXZlcl9pbmZvIGlzIHRoZSB3YXkgdG8gY3JlYXRlIGFuIGVudHJ5IHRoYXQKKwkgICBpbmRpY2F0ZXMgdGhhdCB0aGUgZHJpdmVyIHdhbnQgdG8gZXhhbWluZSBldmVyeQorCSAgIGRldmljZSBhbmQgaW50ZXJmYWNlLiAqLworCWZvciAoOyBpZC0+aWRWZW5kb3IgfHwgaWQtPmJEZXZpY2VDbGFzcyB8fCBpZC0+YkludGVyZmFjZUNsYXNzIHx8CisJICAgICAgIGlkLT5kcml2ZXJfaW5mbzsgaWQrKykgeworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IpICYmCisJCSAgICBpZC0+aWRWZW5kb3IgIT0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9QUk9EVUNUKSAmJgorCQkgICAgaWQtPmlkUHJvZHVjdCAhPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSkKKwkJCWNvbnRpbnVlOworCisJCS8qIE5vIG5lZWQgdG8gdGVzdCBpZC0+YmNkRGV2aWNlX2xvICE9IDAsIHNpbmNlIDAgaXMgbmV2ZXIKKwkJICAgZ3JlYXRlciB0aGFuIGFueSB1bnNpZ25lZCBudW1iZXIuICovCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfTE8pICYmCisJCSAgICAoaWQtPmJjZERldmljZV9sbyA+IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfSEkpICYmCisJCSAgICAoaWQtPmJjZERldmljZV9oaSA8IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfQ0xBU1MpICYmCisJCSAgICAoaWQtPmJEZXZpY2VDbGFzcyAhPSBkZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfU1VCQ0xBU1MpICYmCisJCSAgICAoaWQtPmJEZXZpY2VTdWJDbGFzcyE9IGRldi0+ZGVzY3JpcHRvci5iRGV2aWNlU3ViQ2xhc3MpKQorCQkJY29udGludWU7CisKKwkJaWYgKChpZC0+bWF0Y2hfZmxhZ3MgJiBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9QUk9UT0NPTCkgJiYKKwkJICAgIChpZC0+YkRldmljZVByb3RvY29sICE9IGRldi0+ZGVzY3JpcHRvci5iRGV2aWNlUHJvdG9jb2wpKQorCQkJY29udGludWU7CisKKwkJaWYgKChpZC0+bWF0Y2hfZmxhZ3MgJiBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUykgJiYKKwkJICAgIChpZC0+YkludGVyZmFjZUNsYXNzICE9IGludGYtPmRlc2MuYkludGVyZmFjZUNsYXNzKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MpICYmCisJCSAgICAoaWQtPmJJbnRlcmZhY2VTdWJDbGFzcyAhPSBpbnRmLT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcykpCisJCQljb250aW51ZTsKKworCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1BST1RPQ09MKSAmJgorCQkgICAgKGlkLT5iSW50ZXJmYWNlUHJvdG9jb2wgIT0gaW50Zi0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wpKQorCQkJY29udGludWU7CisKKwkJcmV0dXJuIGlkOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHVzYl9maW5kX2ludGVyZmFjZSAtIGZpbmQgdXNiX2ludGVyZmFjZSBwb2ludGVyIGZvciBkcml2ZXIgYW5kIGRldmljZQorICogQGRydjogdGhlIGRyaXZlciB3aG9zZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaXMgY29uc2lkZXJlZAorICogQG1pbm9yOiB0aGUgbWlub3IgbnVtYmVyIG9mIHRoZSBkZXNpcmVkIGRldmljZQorICoKKyAqIFRoaXMgd2Fsa3MgdGhlIGRyaXZlciBkZXZpY2UgbGlzdCBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSAKKyAqIHdpdGggdGhlIG1hdGNoaW5nIG1pbm9yLiAgTm90ZSwgdGhpcyBvbmx5IHdvcmtzIGZvciBkZXZpY2VzIHRoYXQgc2hhcmUgdGhlCisgKiBVU0IgbWFqb3IgbnVtYmVyLgorICovCitzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdXNiX2ZpbmRfaW50ZXJmYWNlKHN0cnVjdCB1c2JfZHJpdmVyICpkcnYsIGludCBtaW5vcikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisKKwlsaXN0X2Zvcl9lYWNoKGVudHJ5LCAmZHJ2LT5kcml2ZXIuZGV2aWNlcykgeworCQlkZXYgPSBjb250YWluZXJfb2YoZW50cnksIHN0cnVjdCBkZXZpY2UsIGRyaXZlcl9saXN0KTsKKworCQkvKiBjYW4ndCBsb29rIGF0IHVzYiBkZXZpY2VzLCBvbmx5IGludGVyZmFjZXMgKi8KKwkJaWYgKGRldi0+ZHJpdmVyID09ICZ1c2JfZ2VuZXJpY19kcml2ZXIpCisJCQljb250aW51ZTsKKworCQlpbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCQlpZiAoaW50Zi0+bWlub3IgPT0gLTEpCisJCQljb250aW51ZTsKKwkJaWYgKGludGYtPm1pbm9yID09IG1pbm9yKQorCQkJcmV0dXJuIGludGY7CisJfQorCisJLyogbm8gZGV2aWNlIGZvdW5kIHRoYXQgbWF0Y2hlcyAqLworCXJldHVybiBOVUxMOwkKK30KKworc3RhdGljIGludCB1c2JfZGV2aWNlX21hdGNoIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisJc3RydWN0IHVzYl9kcml2ZXIgKnVzYl9kcnY7CisJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkOworCisJLyogY2hlY2sgZm9yIGdlbmVyaWMgZHJpdmVyLCB3aGljaCB3ZSBkb24ndCBtYXRjaCBhbnkgZGV2aWNlIHdpdGggKi8KKwlpZiAoZHJ2ID09ICZ1c2JfZ2VuZXJpY19kcml2ZXIpCisJCXJldHVybiAwOworCisJaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwl1c2JfZHJ2ID0gdG9fdXNiX2RyaXZlcihkcnYpOworCQorCWlkID0gdXNiX21hdGNoX2lkIChpbnRmLCB1c2JfZHJ2LT5pZF90YWJsZSk7CisJaWYgKGlkKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCisKKyNpZmRlZglDT05GSUdfSE9UUExVRworCisvKgorICogVVNCIGhvdHBsdWdnaW5nIGludm9rZXMgd2hhdCAvcHJvYy9zeXMva2VybmVsL2hvdHBsdWcgc2F5cworICogKG5vcm1hbGx5IC9zYmluL2hvdHBsdWcpIHdoZW4gVVNCIGRldmljZXMgZ2V0IGFkZGVkIG9yIHJlbW92ZWQuCisgKgorICogVGhpcyBpbnZva2VzIGEgdXNlciBtb2RlIHBvbGljeSBhZ2VudCwgdHlwaWNhbGx5IGhlbHBpbmcgdG8gbG9hZCBkcml2ZXIKKyAqIG9yIG90aGVyIG1vZHVsZXMsIGNvbmZpZ3VyZSB0aGUgZGV2aWNlLCBhbmQgbW9yZS4gIERyaXZlcnMgY2FuIHByb3ZpZGUKKyAqIGEgTU9EVUxFX0RFVklDRV9UQUJMRSB0byBoZWxwIHdpdGggbW9kdWxlIGxvYWRpbmcgc3VidGFza3MuCisgKgorICogV2UncmUgY2FsbGVkIGVpdGhlciBmcm9tIGtodWJkICh0aGUgdHlwaWNhbCBjYXNlKSBvciBmcm9tIHJvb3QgaHViCisgKiAoaW5pdCwga2FwbWQsIG1vZHByb2JlLCBybW1vZCwgZXRjKSwgYnV0IHRoZSBhZ2VudHMgbmVlZCB0byBoYW5kbGUKKyAqIGRlbGF5cyBpbiBldmVudCBkZWxpdmVyeS4gIFVzZSBzeXNmcyAoYW5kIERFVlBBVEgpIHRvIG1ha2Ugc3VyZSB0aGUKKyAqIGRldmljZSAoYW5kIHRoaXMgY29uZmlndXJhdGlvbiEpIGFyZSBzdGlsbCBwcmVzZW50LgorICovCitzdGF0aWMgaW50IHVzYl9ob3RwbHVnIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKiplbnZwLCBpbnQgbnVtX2VudnAsCisJCQljaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjsKKwlpbnQgaSA9IDA7CisJaW50IGxlbmd0aCA9IDA7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBkcml2ZXIgaXMgb2Z0ZW4gbnVsbCBoZXJlOyBkZXZfZGJnKCkgd291bGQgb29wcyAqLworCXByX2RlYnVnICgidXNiICVzOiBob3RwbHVnXG4iLCBkZXYtPmJ1c19pZCk7CisKKwkvKiBNdXN0IGNoZWNrIGRyaXZlcl9kYXRhIGhlcmUsIGFzIG9uIHJlbW92ZSBkcml2ZXIgaXMgYWx3YXlzIE5VTEwgKi8KKwlpZiAoKGRldi0+ZHJpdmVyID09ICZ1c2JfZ2VuZXJpY19kcml2ZXIpIHx8IAorCSAgICAoZGV2LT5kcml2ZXJfZGF0YSA9PSAmdXNiX2dlbmVyaWNfZHJpdmVyX2RhdGEpKQorCQlyZXR1cm4gMDsKKworCWludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCQorCWlmICh1c2JfZGV2LT5kZXZudW0gPCAwKSB7CisJCXByX2RlYnVnICgidXNiICVzOiBhbHJlYWR5IGRlbGV0ZWQ/XG4iLCBkZXYtPmJ1c19pZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpZiAoIXVzYl9kZXYtPmJ1cykgeworCQlwcl9kZWJ1ZyAoInVzYiAlczogYnVzIHJlbW92ZWQ/XG4iLCBkZXYtPmJ1c19pZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworI2lmZGVmCUNPTkZJR19VU0JfREVWSUNFRlMKKwkvKiBJZiB0aGlzIGlzIGF2YWlsYWJsZSwgdXNlcnNwYWNlIHByb2dyYW1zIGNhbiBkaXJlY3RseSByZWFkCisJICogYWxsIHRoZSBkZXZpY2UgZGVzY3JpcHRvcnMgd2UgZG9uJ3QgdGVsbCB0aGVtIGFib3V0LiAgT3IKKwkgKiBldmVuIGFjdCBhcyB1c2VybW9kZSBkcml2ZXJzLgorCSAqCisJICogRklYTUUgcmVkdWNlIGhhcmR3aXJlZCBpbnRlbGxpZ2VuY2UgaGVyZQorCSAqLworCWlmIChhZGRfaG90cGx1Z19lbnZfdmFyKGVudnAsIG51bV9lbnZwLCAmaSwKKwkJCQlidWZmZXIsIGJ1ZmZlcl9zaXplLCAmbGVuZ3RoLAorCQkJCSJERVZJQ0U9L3Byb2MvYnVzL3VzYi8lMDNkLyUwM2QiLAorCQkJCXVzYl9kZXYtPmJ1cy0+YnVzbnVtLCB1c2JfZGV2LT5kZXZudW0pKQorCQlyZXR1cm4gLUVOT01FTTsKKyNlbmRpZgorCisJLyogcGVyLWRldmljZSBjb25maWd1cmF0aW9ucyBhcmUgY29tbW9uICovCisJaWYgKGFkZF9ob3RwbHVnX2Vudl92YXIoZW52cCwgbnVtX2VudnAsICZpLAorCQkJCWJ1ZmZlciwgYnVmZmVyX3NpemUsICZsZW5ndGgsCisJCQkJIlBST0RVQ1Q9JXgvJXgvJXgiLAorCQkJCWxlMTZfdG9fY3B1KHVzYl9kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQkJCWxlMTZfdG9fY3B1KHVzYl9kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSwKKwkJCQlsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGNsYXNzLWJhc2VkIGRyaXZlciBiaW5kaW5nIG1vZGVscyAqLworCWlmIChhZGRfaG90cGx1Z19lbnZfdmFyKGVudnAsIG51bV9lbnZwLCAmaSwKKwkJCQlidWZmZXIsIGJ1ZmZlcl9zaXplLCAmbGVuZ3RoLAorCQkJCSJUWVBFPSVkLyVkLyVkIiwKKwkJCQl1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcywKKwkJCQl1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VTdWJDbGFzcywKKwkJCQl1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VQcm90b2NvbCkpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHVzYl9kZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzID09IDApIHsKKwkJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0ID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisKKwkJLyogMi40IG9ubHkgZXhwb3NlZCBpbnRlcmZhY2UgemVyby4gIGluIDIuNSwgaG90cGx1ZworCQkgKiBhZ2VudHMgYXJlIGNhbGxlZCBmb3IgYWxsIGludGVyZmFjZXMsIGFuZCBjYW4gdXNlCisJCSAqICRERVZQQVRIL2JJbnRlcmZhY2VOdW1iZXIgaWYgbmVjZXNzYXJ5LgorCQkgKi8KKwkJaWYgKGFkZF9ob3RwbHVnX2Vudl92YXIoZW52cCwgbnVtX2VudnAsICZpLAorCQkJCQlidWZmZXIsIGJ1ZmZlcl9zaXplLCAmbGVuZ3RoLAorCQkJCQkiSU5URVJGQUNFPSVkLyVkLyVkIiwKKwkJCQkJYWx0LT5kZXNjLmJJbnRlcmZhY2VDbGFzcywKKwkJCQkJYWx0LT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcywKKwkJCQkJYWx0LT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbCkpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlpZiAoYWRkX2hvdHBsdWdfZW52X3ZhcihlbnZwLCBudW1fZW52cCwgJmksCisJCQkJCWJ1ZmZlciwgYnVmZmVyX3NpemUsICZsZW5ndGgsCisJCQkJCSJNT0RBTElBUz11c2I6diUwNFhwJTA0WGRsJTA0WGRoJTA0WGRjJTAyWGRzYyUwMlhkcCUwMlhpYyUwMlhpc2MlMDJYaXAlMDJYIiwKKwkJCQkJbGUxNl90b19jcHUodXNiX2Rldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCQkJCWxlMTZfdG9fY3B1KHVzYl9kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSwKKwkJCQkJbGUxNl90b19jcHUodXNiX2Rldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpLAorCQkJCQlsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSksCisJCQkJCXVzYl9kZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzLAorCQkJCQl1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VTdWJDbGFzcywKKwkJCQkJdXNiX2Rldi0+ZGVzY3JpcHRvci5iRGV2aWNlUHJvdG9jb2wsCisJCQkJCWFsdC0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MsCisJCQkJCWFsdC0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MsCisJCQkJCWFsdC0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wpKQorCQkJcmV0dXJuIC1FTk9NRU07CisgCX0gZWxzZSB7CisJCWlmIChhZGRfaG90cGx1Z19lbnZfdmFyKGVudnAsIG51bV9lbnZwLCAmaSwKKwkJCQkJYnVmZmVyLCBidWZmZXJfc2l6ZSwgJmxlbmd0aCwKKwkJCQkJIk1PREFMSUFTPXVzYjp2JTA0WHAlMDRYZGwlMDRYZGglMDRYZGMlMDJYZHNjJTAyWGRwJTAyWGljKmlzYyppcCoiLAorCQkJCQlsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJCQkJbGUxNl90b19jcHUodXNiX2Rldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpLAorCQkJCQlsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSksCisJCQkJCWxlMTZfdG9fY3B1KHVzYl9kZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSwKKwkJCQkJdXNiX2Rldi0+ZGVzY3JpcHRvci5iRGV2aWNlQ2xhc3MsCisJCQkJCXVzYl9kZXYtPmRlc2NyaXB0b3IuYkRldmljZVN1YkNsYXNzLAorCQkJCQl1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VQcm90b2NvbCkpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwllbnZwW2ldID0gTlVMTDsKKworCXJldHVybiAwOworfQorCisjZWxzZQorCitzdGF0aWMgaW50IHVzYl9ob3RwbHVnIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKiplbnZwLAorCQkJaW50IG51bV9lbnZwLCBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSkKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworI2VuZGlmCS8qIENPTkZJR19IT1RQTFVHICovCisKKy8qKgorICogdXNiX3JlbGVhc2VfZGV2IC0gZnJlZSBhIHVzYiBkZXZpY2Ugc3RydWN0dXJlIHdoZW4gYWxsIHVzZXJzIG9mIGl0IGFyZSBmaW5pc2hlZC4KKyAqIEBkZXY6IGRldmljZSB0aGF0J3MgYmVlbiBkaXNjb25uZWN0ZWQKKyAqCisgKiBXaWxsIGJlIGNhbGxlZCBvbmx5IGJ5IHRoZSBkZXZpY2UgY29yZSB3aGVuIGFsbCB1c2VycyBvZiB0aGlzIHVzYiBkZXZpY2UgYXJlCisgKiBkb25lLgorICovCitzdGF0aWMgdm9pZCB1c2JfcmVsZWFzZV9kZXYoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCisJdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKKworCXVzYl9kZXN0cm95X2NvbmZpZ3VyYXRpb24odWRldik7CisJdXNiX2J1c19wdXQodWRldi0+YnVzKTsKKwlrZnJlZSh1ZGV2LT5wcm9kdWN0KTsKKwlrZnJlZSh1ZGV2LT5tYW51ZmFjdHVyZXIpOworCWtmcmVlKHVkZXYtPnNlcmlhbCk7CisJa2ZyZWUodWRldik7Cit9CisKKy8qKgorICogdXNiX2FsbG9jX2RldiAtIHVzYiBkZXZpY2UgY29uc3RydWN0b3IgKHVzYmNvcmUtaW50ZXJuYWwpCisgKiBAcGFyZW50OiBodWIgdG8gd2hpY2ggZGV2aWNlIGlzIGNvbm5lY3RlZDsgbnVsbCB0byBhbGxvY2F0ZSBhIHJvb3QgaHViCisgKiBAYnVzOiBidXMgdXNlZCB0byBhY2Nlc3MgdGhlIGRldmljZQorICogQHBvcnQxOiBvbmUtYmFzZWQgaW5kZXggb2YgcG9ydDsgaWdub3JlZCBmb3Igcm9vdCBodWJzCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0ICgpCisgKgorICogT25seSBodWIgZHJpdmVycyAoaW5jbHVkaW5nIHZpcnR1YWwgcm9vdCBodWIgZHJpdmVycyBmb3IgaG9zdAorICogY29udHJvbGxlcnMpIHNob3VsZCBldmVyIGNhbGwgdGhpcy4KKyAqCisgKiBUaGlzIGNhbGwgbWF5IG5vdCBiZSB1c2VkIGluIGEgbm9uLXNsZWVwaW5nIGNvbnRleHQuCisgKi8KK3N0cnVjdCB1c2JfZGV2aWNlICoKK3VzYl9hbGxvY19kZXYoc3RydWN0IHVzYl9kZXZpY2UgKnBhcmVudCwgc3RydWN0IHVzYl9idXMgKmJ1cywgdW5zaWduZWQgcG9ydDEpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKworCWRldiA9IGttYWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQoZGV2LCAwLCBzaXplb2YoKmRldikpOworCisJYnVzID0gdXNiX2J1c19nZXQoYnVzKTsKKwlpZiAoIWJ1cykgeworCQlrZnJlZShkZXYpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlkZXZpY2VfaW5pdGlhbGl6ZSgmZGV2LT5kZXYpOworCWRldi0+ZGV2LmJ1cyA9ICZ1c2JfYnVzX3R5cGU7CisJZGV2LT5kZXYuZG1hX21hc2sgPSBidXMtPmNvbnRyb2xsZXItPmRtYV9tYXNrOworCWRldi0+ZGV2LmRyaXZlcl9kYXRhID0gJnVzYl9nZW5lcmljX2RyaXZlcl9kYXRhOworCWRldi0+ZGV2LmRyaXZlciA9ICZ1c2JfZ2VuZXJpY19kcml2ZXI7CisJZGV2LT5kZXYucmVsZWFzZSA9IHVzYl9yZWxlYXNlX2RldjsKKwlkZXYtPnN0YXRlID0gVVNCX1NUQVRFX0FUVEFDSEVEOworCisJSU5JVF9MSVNUX0hFQUQoJmRldi0+ZXAwLnVyYl9saXN0KTsKKwlkZXYtPmVwMC5kZXNjLmJMZW5ndGggPSBVU0JfRFRfRU5EUE9JTlRfU0laRTsKKwlkZXYtPmVwMC5kZXNjLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9FTkRQT0lOVDsKKwkvKiBlcDAgbWF4cGFja2V0IGNvbWVzIGxhdGVyLCBmcm9tIGRldmljZSBkZXNjcmlwdG9yICovCisJZGV2LT5lcF9pblswXSA9IGRldi0+ZXBfb3V0WzBdID0gJmRldi0+ZXAwOworCisJLyogU2F2ZSByZWFkYWJsZSBhbmQgc3RhYmxlIHRvcG9sb2d5IGlkLCBkaXN0aW5ndWlzaGluZyBkZXZpY2VzCisJICogYnkgbG9jYXRpb24gZm9yIGRpYWdub3N0aWNzLCB0b29scywgZHJpdmVyIG1vZGVsLCBldGMuICBUaGUKKwkgKiBzdHJpbmcgaXMgYSBwYXRoIGFsb25nIGh1YiBwb3J0cywgZnJvbSB0aGUgcm9vdC4gIEVhY2ggZGV2aWNlJ3MKKwkgKiBkZXYtPmRldnBhdGggd2lsbCBiZSBzdGFibGUgdW50aWwgVVNCIGlzIHJlLWNhYmxlZCwgYW5kIGh1YnMKKwkgKiBhcmUgb2Z0ZW4gbGFiZWxlZCB3aXRoIHRoZXNlIHBvcnQgbnVtYmVycy4gIFRoZSBidXNfaWQgaXNuJ3QKKwkgKiBhcyBzdGFibGU6ICBidXMtPmJ1c251bSBjaGFuZ2VzIGVhc2lseSBmcm9tIG1vZHByb2JlIG9yZGVyLAorCSAqIGNhcmRidXMgb3IgcGNpIGhvdHBsdWdnaW5nLCBhbmQgc28gb24uCisJICovCisJaWYgKHVubGlrZWx5ICghcGFyZW50KSkgeworCQlkZXYtPmRldnBhdGggWzBdID0gJzAnOworCisJCWRldi0+ZGV2LnBhcmVudCA9IGJ1cy0+Y29udHJvbGxlcjsKKwkJc3ByaW50ZiAoJmRldi0+ZGV2LmJ1c19pZFswXSwgInVzYiVkIiwgYnVzLT5idXNudW0pOworCX0gZWxzZSB7CisJCS8qIG1hdGNoIGFueSBsYWJlbGluZyBvbiB0aGUgaHViczsgaXQncyBvbmUtYmFzZWQgKi8KKwkJaWYgKHBhcmVudC0+ZGV2cGF0aCBbMF0gPT0gJzAnKQorCQkJc25wcmludGYgKGRldi0+ZGV2cGF0aCwgc2l6ZW9mIGRldi0+ZGV2cGF0aCwKKwkJCQkiJWQiLCBwb3J0MSk7CisJCWVsc2UKKwkJCXNucHJpbnRmIChkZXYtPmRldnBhdGgsIHNpemVvZiBkZXYtPmRldnBhdGgsCisJCQkJIiVzLiVkIiwgcGFyZW50LT5kZXZwYXRoLCBwb3J0MSk7CisKKwkJZGV2LT5kZXYucGFyZW50ID0gJnBhcmVudC0+ZGV2OworCQlzcHJpbnRmICgmZGV2LT5kZXYuYnVzX2lkWzBdLCAiJWQtJXMiLAorCQkJYnVzLT5idXNudW0sIGRldi0+ZGV2cGF0aCk7CisKKwkJLyogaHViIGRyaXZlciBzZXRzIHVwIFRUIHJlY29yZHMgKi8KKwl9CisKKwlkZXYtPmJ1cyA9IGJ1czsKKwlkZXYtPnBhcmVudCA9IHBhcmVudDsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5maWxlbGlzdCk7CisKKwlpbml0X01VVEVYKCZkZXYtPnNlcmlhbGl6ZSk7CisKKwlyZXR1cm4gZGV2OworfQorCisvKioKKyAqIHVzYl9nZXRfZGV2IC0gaW5jcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSB1c2IgZGV2aWNlIHN0cnVjdHVyZQorICogQGRldjogdGhlIGRldmljZSBiZWluZyByZWZlcmVuY2VkCisgKgorICogRWFjaCBsaXZlIHJlZmVyZW5jZSB0byBhIGRldmljZSBzaG91bGQgYmUgcmVmY291bnRlZC4KKyAqCisgKiBEcml2ZXJzIGZvciBVU0IgaW50ZXJmYWNlcyBzaG91bGQgbm9ybWFsbHkgcmVjb3JkIHN1Y2ggcmVmZXJlbmNlcyBpbgorICogdGhlaXIgcHJvYmUoKSBtZXRob2RzLCB3aGVuIHRoZXkgYmluZCB0byBhbiBpbnRlcmZhY2UsIGFuZCByZWxlYXNlCisgKiB0aGVtIGJ5IGNhbGxpbmcgdXNiX3B1dF9kZXYoKSwgaW4gdGhlaXIgZGlzY29ubmVjdCgpIG1ldGhvZHMuCisgKgorICogQSBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugd2l0aCB0aGUgaW5jcmVtZW50ZWQgcmVmZXJlbmNlIGNvdW50ZXIgaXMgcmV0dXJuZWQuCisgKi8KK3N0cnVjdCB1c2JfZGV2aWNlICp1c2JfZ2V0X2RldihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCWlmIChkZXYpCisJCWdldF9kZXZpY2UoJmRldi0+ZGV2KTsKKwlyZXR1cm4gZGV2OworfQorCisvKioKKyAqIHVzYl9wdXRfZGV2IC0gcmVsZWFzZSBhIHVzZSBvZiB0aGUgdXNiIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBkZXY6IGRldmljZSB0aGF0J3MgYmVlbiBkaXNjb25uZWN0ZWQKKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aGVuIGEgdXNlciBvZiBhIGRldmljZSBpcyBmaW5pc2hlZCB3aXRoIGl0LiAgV2hlbiB0aGUgbGFzdAorICogdXNlciBvZiB0aGUgZGV2aWNlIGNhbGxzIHRoaXMgZnVuY3Rpb24sIHRoZSBtZW1vcnkgb2YgdGhlIGRldmljZSBpcyBmcmVlZC4KKyAqLwordm9pZCB1c2JfcHV0X2RldihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCWlmIChkZXYpCisJCXB1dF9kZXZpY2UoJmRldi0+ZGV2KTsKK30KKworLyoqCisgKiB1c2JfZ2V0X2ludGYgLSBpbmNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIHVzYiBpbnRlcmZhY2Ugc3RydWN0dXJlCisgKiBAaW50ZjogdGhlIGludGVyZmFjZSBiZWluZyByZWZlcmVuY2VkCisgKgorICogRWFjaCBsaXZlIHJlZmVyZW5jZSB0byBhIGludGVyZmFjZSBtdXN0IGJlIHJlZmNvdW50ZWQuCisgKgorICogRHJpdmVycyBmb3IgVVNCIGludGVyZmFjZXMgc2hvdWxkIG5vcm1hbGx5IHJlY29yZCBzdWNoIHJlZmVyZW5jZXMgaW4KKyAqIHRoZWlyIHByb2JlKCkgbWV0aG9kcywgd2hlbiB0aGV5IGJpbmQgdG8gYW4gaW50ZXJmYWNlLCBhbmQgcmVsZWFzZQorICogdGhlbSBieSBjYWxsaW5nIHVzYl9wdXRfaW50ZigpLCBpbiB0aGVpciBkaXNjb25uZWN0KCkgbWV0aG9kcy4KKyAqCisgKiBBIHBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSB3aXRoIHRoZSBpbmNyZW1lbnRlZCByZWZlcmVuY2UgY291bnRlciBpcworICogcmV0dXJuZWQuCisgKi8KK3N0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfZ2V0X2ludGYoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJaWYgKGludGYpCisJCWdldF9kZXZpY2UoJmludGYtPmRldik7CisJcmV0dXJuIGludGY7Cit9CisKKy8qKgorICogdXNiX3B1dF9pbnRmIC0gcmVsZWFzZSBhIHVzZSBvZiB0aGUgdXNiIGludGVyZmFjZSBzdHJ1Y3R1cmUKKyAqIEBpbnRmOiBpbnRlcmZhY2UgdGhhdCdzIGJlZW4gZGVjcmVtZW50ZWQKKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aGVuIGEgdXNlciBvZiBhbiBpbnRlcmZhY2UgaXMgZmluaXNoZWQgd2l0aCBpdC4gIFdoZW4gdGhlCisgKiBsYXN0IHVzZXIgb2YgdGhlIGludGVyZmFjZSBjYWxscyB0aGlzIGZ1bmN0aW9uLCB0aGUgbWVtb3J5IG9mIHRoZSBpbnRlcmZhY2UKKyAqIGlzIGZyZWVkLgorICovCit2b2lkIHVzYl9wdXRfaW50ZihzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlpZiAoaW50ZikKKwkJcHV0X2RldmljZSgmaW50Zi0+ZGV2KTsKK30KKworCisvKgkJCVVTQiBkZXZpY2UgbG9ja2luZworICoKKyAqIEFsdGhvdWdoIGxvY2tpbmcgVVNCIGRldmljZXMgc2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZCwgaXQgaXMKKyAqIGNvbXBsaWNhdGVkIGJ5IHRoZSB3YXkgdGhlIGRyaXZlci1tb2RlbCBjb3JlIHdvcmtzLiAgV2hlbiBhIG5ldyBVU0IKKyAqIGRyaXZlciBpcyByZWdpc3RlcmVkIG9yIHVucmVnaXN0ZXJlZCwgdGhlIGNvcmUgd2lsbCBhdXRvbWF0aWNhbGx5CisgKiBwcm9iZSBvciBkaXNjb25uZWN0IGFsbCBtYXRjaGluZyBpbnRlcmZhY2VzIG9uIGFsbCBVU0IgZGV2aWNlcyB3aGlsZQorICogaG9sZGluZyB0aGUgVVNCIHN1YnN5c3RlbSB3cml0ZWxvY2suICBUaGVyZSdzIG5vIGdvb2Qgd2F5IGZvciB1cyB0bworICogdGVsbCB3aGljaCBkZXZpY2VzIHdpbGwgYmUgdXNlZCBvciB0byBsb2NrIHRoZW0gYmVmb3JlaGFuZDsgb3VyIG9ubHkKKyAqIG9wdGlvbiBpcyB0byBlZmZlY3RpdmVseSBsb2NrIGFsbCB0aGUgVVNCIGRldmljZXMuCisgKgorICogV2UgZG8gdGhhdCBieSB1c2luZyBhIHByaXZhdGUgcnctc2VtYXBob3JlLCB1c2JfYWxsX2RldmljZXNfcndzZW0uCisgKiBXaGVuIGxvY2tpbmcgYW4gaW5kaXZpZHVhbCBkZXZpY2UgeW91IG11c3QgZmlyc3QgYWNxdWlyZSB0aGUgcndzZW0ncworICogcmVhZGxvY2suICBXaGVuIGEgZHJpdmVyIGlzIHJlZ2lzdGVyZWQgb3IgdW5yZWdpc3RlcmVkIHRoZSB3cml0ZWxvY2sKKyAqIG11c3QgYmUgaGVsZC4gIFRoZXNlIGFjdGlvbnMgYXJlIGVuY2Fwc3VsYXRlZCBpbiB0aGUgc3Vicm91dGluZXMKKyAqIGJlbG93LCBzbyBhbGwgYSBkcml2ZXIgbmVlZHMgdG8gZG8gaXMgY2FsbCB1c2JfbG9ja19kZXZpY2UoKSBhbmQKKyAqIHVzYl91bmxvY2tfZGV2aWNlKCkuCisgKgorICogQ29tcGxpY2F0aW9ucyBhcmlzZSB3aGVuIHNldmVyYWwgZGV2aWNlcyBhcmUgdG8gYmUgbG9ja2VkIGF0IHRoZSBzYW1lCisgKiB0aW1lLiAgT25seSBodWItYXdhcmUgZHJpdmVycyB0aGF0IGFyZSBwYXJ0IG9mIHVzYmNvcmUgZXZlciBoYXZlIHRvCisgKiBkbyB0aGlzOyBub2JvZHkgZWxzZSBuZWVkcyB0byB3b3JyeSBhYm91dCBpdC4gIFRoZSBwcm9ibGVtIGlzIHRoYXQKKyAqIHVzYl9sb2NrX2RldmljZSgpIG11c3Qgbm90IGJlIGNhbGxlZCB0byBsb2NrIGEgc2Vjb25kIGRldmljZSBzaW5jZSBpdAorICogd291bGQgYWNxdWlyZSB0aGUgcndzZW0ncyByZWFkbG9jayByZWVudHJhbnRseSwgbGVhZGluZyB0byBkZWFkbG9jayBpZgorICogYW5vdGhlciB0aHJlYWQgd2FzIHdhaXRpbmcgZm9yIHRoZSB3cml0ZWxvY2suICBUaGUgc29sdXRpb24gaXMgc2ltcGxlOgorICoKKyAqCVdoZW4gbG9ja2luZyBtb3JlIHRoYW4gb25lIGRldmljZSwgY2FsbCB1c2JfbG9ja19kZXZpY2UoKQorICoJdG8gbG9jayB0aGUgZmlyc3Qgb25lLiAgTG9jayB0aGUgb3RoZXJzIGJ5IGNhbGxpbmcKKyAqCWRvd24oJnVkZXYtPnNlcmlhbGl6ZSkgZGlyZWN0bHkuCisgKgorICoJV2hlbiB1bmxvY2tpbmcgbXVsdGlwbGUgZGV2aWNlcywgdXNlIHVwKCZ1ZGV2LT5zZXJpYWxpemUpCisgKgl0byB1bmxvY2sgYWxsIGJ1dCB0aGUgbGFzdCBvbmUuICBVbmxvY2sgdGhlIGxhc3Qgb25lIGJ5CisgKgljYWxsaW5nIHVzYl91bmxvY2tfZGV2aWNlKCkuCisgKgorICoJV2hlbiBsb2NraW5nIGJvdGggYSBkZXZpY2UgYW5kIGl0cyBwYXJlbnQsIGFsd2F5cyBsb2NrIHRoZQorICoJdGhlIHBhcmVudCBmaXJzdC4KKyAqLworCisvKioKKyAqIHVzYl9sb2NrX2RldmljZSAtIGFjcXVpcmUgdGhlIGxvY2sgZm9yIGEgdXNiIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEB1ZGV2OiBkZXZpY2UgdGhhdCdzIGJlaW5nIGxvY2tlZAorICoKKyAqIFVzZSB0aGlzIHJvdXRpbmUgd2hlbiB5b3UgZG9uJ3QgaG9sZCBhbnkgb3RoZXIgZGV2aWNlIGxvY2tzOworICogdG8gYWNxdWlyZSBuZXN0ZWQgaW5uZXIgbG9ja3MgY2FsbCBkb3duKCZ1ZGV2LT5zZXJpYWxpemUpIGRpcmVjdGx5LgorICogVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHByb3BlciBpbnRlcmFjdGlvbiB3aXRoIHVzYl9sb2NrX2FsbF9kZXZpY2VzKCkuCisgKi8KK3ZvaWQgdXNiX2xvY2tfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWRvd25fcmVhZCgmdXNiX2FsbF9kZXZpY2VzX3J3c2VtKTsKKwlkb3duKCZ1ZGV2LT5zZXJpYWxpemUpOworfQorCisvKioKKyAqIHVzYl90cnlsb2NrX2RldmljZSAtIGF0dGVtcHQgdG8gYWNxdWlyZSB0aGUgbG9jayBmb3IgYSB1c2IgZGV2aWNlIHN0cnVjdHVyZQorICogQHVkZXY6IGRldmljZSB0aGF0J3MgYmVpbmcgbG9ja2VkCisgKgorICogRG9uJ3QgdXNlIHRoaXMgcm91dGluZSBpZiB5b3UgYWxyZWFkeSBob2xkIGEgZGV2aWNlIGxvY2s7CisgKiB1c2UgZG93bl90cnlsb2NrKCZ1ZGV2LT5zZXJpYWxpemUpIGluc3RlYWQuCisgKiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgcHJvcGVyIGludGVyYWN0aW9uIHdpdGggdXNiX2xvY2tfYWxsX2RldmljZXMoKS4KKyAqCisgKiBSZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCwgMCBpZiBjb250ZW50aW9uLgorICovCitpbnQgdXNiX3RyeWxvY2tfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWlmICghZG93bl9yZWFkX3RyeWxvY2soJnVzYl9hbGxfZGV2aWNlc19yd3NlbSkpCisJCXJldHVybiAwOworCWlmIChkb3duX3RyeWxvY2soJnVkZXYtPnNlcmlhbGl6ZSkpIHsKKwkJdXBfcmVhZCgmdXNiX2FsbF9kZXZpY2VzX3J3c2VtKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisvKioKKyAqIHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQgLSBjYXV0aW91c2x5IGFjcXVpcmUgdGhlIGxvY2sgZm9yIGEKKyAqCXVzYiBkZXZpY2Ugc3RydWN0dXJlCisgKiBAdWRldjogZGV2aWNlIHRoYXQncyBiZWluZyBsb2NrZWQKKyAqIEBpZmFjZTogaW50ZXJmYWNlIGJvdW5kIHRvIHRoZSBkcml2ZXIgbWFraW5nIHRoZSByZXF1ZXN0IChvcHRpb25hbCkKKyAqCisgKiBBdHRlbXB0cyB0byBhY3F1aXJlIHRoZSBkZXZpY2UgbG9jaywgYnV0IGZhaWxzIGlmIHRoZSBkZXZpY2UgaXMKKyAqIE5PVEFUVEFDSEVEIG9yIFNVU1BFTkRFRCwgb3IgaWYgaWZhY2UgaXMgc3BlY2lmaWVkIGFuZCB0aGUgaW50ZXJmYWNlCisgKiBpcyBuZWl0aGVyIEJJTkRJTkcgbm9yIEJPVU5ELiAgUmF0aGVyIHRoYW4gc2xlZXBpbmcgdG8gd2FpdCBmb3IgdGhlCisgKiBsb2NrLCB0aGUgcm91dGluZSBwb2xscyByZXBlYXRlZGx5LiAgVGhpcyBpcyB0byBwcmV2ZW50IGRlYWRsb2NrIHdpdGgKKyAqIGRpc2Nvbm5lY3Q7IGluIHNvbWUgZHJpdmVycyAoc3VjaCBhcyB1c2Itc3RvcmFnZSkgdGhlIGRpc2Nvbm5lY3QoKQorICogY2FsbGJhY2sgd2lsbCBibG9jayB3YWl0aW5nIGZvciBhIGRldmljZSByZXNldCB0byBjb21wbGV0ZS4KKyAqCisgKiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBmb3IgZmFpbHVyZSwgb3RoZXJ3aXNlIDEgb3IgMCB0byBpbmRpY2F0ZQorICogdGhhdCB0aGUgZGV2aWNlIHdpbGwgb3Igd2lsbCBub3QgaGF2ZSB0byBiZSB1bmxvY2tlZC4gICgwIGNhbiBiZQorICogcmV0dXJuZWQgd2hlbiBhbiBpbnRlcmZhY2UgaXMgZ2l2ZW4gYW5kIGlzIEJJTkRJTkcsIGJlY2F1c2UgaW4gdGhhdAorICogY2FzZSB0aGUgZHJpdmVyIGFscmVhZHkgb3ducyB0aGUgZGV2aWNlIGxvY2suKQorICovCitpbnQgdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQoreworCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpCisJCXJldHVybiAtRU5PREVWOworCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKQorCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKKwlpZiAoaWZhY2UpIHsKKwkJc3dpdGNoIChpZmFjZS0+Y29uZGl0aW9uKSB7CisJCSAgY2FzZSBVU0JfSU5URVJGQUNFX0JJTkRJTkc6CisJCQlyZXR1cm4gMDsKKwkJICBjYXNlIFVTQl9JTlRFUkZBQ0VfQk9VTkQ6CisJCQlicmVhazsKKwkJICBkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5UUjsKKwkJfQorCX0KKworCXdoaWxlICghdXNiX3RyeWxvY2tfZGV2aWNlKHVkZXYpKSB7CisJCW1zbGVlcCgxNSk7CisJCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpCisJCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKKwkJaWYgKGlmYWNlICYmIGlmYWNlLT5jb25kaXRpb24gIT0gVVNCX0lOVEVSRkFDRV9CT1VORCkKKwkJCXJldHVybiAtRUlOVFI7CisJfQorCXJldHVybiAxOworfQorCisvKioKKyAqIHVzYl91bmxvY2tfZGV2aWNlIC0gcmVsZWFzZSB0aGUgbG9jayBmb3IgYSB1c2IgZGV2aWNlIHN0cnVjdHVyZQorICogQHVkZXY6IGRldmljZSB0aGF0J3MgYmVpbmcgdW5sb2NrZWQKKyAqCisgKiBVc2UgdGhpcyByb3V0aW5lIHdoZW4gcmVsZWFzaW5nIHRoZSBvbmx5IGRldmljZSBsb2NrIHlvdSBob2xkOworICogdG8gcmVsZWFzZSBpbm5lciBuZXN0ZWQgbG9ja3MgY2FsbCB1cCgmdWRldi0+c2VyaWFsaXplKSBkaXJlY3RseS4KKyAqIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBwcm9wZXIgaW50ZXJhY3Rpb24gd2l0aCB1c2JfbG9ja19hbGxfZGV2aWNlcygpLgorICovCit2b2lkIHVzYl91bmxvY2tfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXVwKCZ1ZGV2LT5zZXJpYWxpemUpOworCXVwX3JlYWQoJnVzYl9hbGxfZGV2aWNlc19yd3NlbSk7Cit9CisKKy8qKgorICogdXNiX2xvY2tfYWxsX2RldmljZXMgLSBhY3F1aXJlIHRoZSBsb2NrIGZvciBhbGwgdXNiIGRldmljZSBzdHJ1Y3R1cmVzCisgKgorICogVGhpcyBpcyBuZWNlc3Nhcnkgd2hlbiByZWdpc3RlcmluZyBhIG5ldyBkcml2ZXIgb3IgcHJvYmluZyBhIGJ1cywKKyAqIHNpbmNlIHRoZSBkcml2ZXItbW9kZWwgY29yZSBtYXkgdHJ5IHRvIHVzZSBhbnkgdXNiX2RldmljZS4KKyAqLwordm9pZCB1c2JfbG9ja19hbGxfZGV2aWNlcyh2b2lkKQoreworCWRvd25fd3JpdGUoJnVzYl9hbGxfZGV2aWNlc19yd3NlbSk7Cit9CisKKy8qKgorICogdXNiX3VubG9ja19hbGxfZGV2aWNlcyAtIHJlbGVhc2UgdGhlIGxvY2sgZm9yIGFsbCB1c2IgZGV2aWNlIHN0cnVjdHVyZXMKKyAqLwordm9pZCB1c2JfdW5sb2NrX2FsbF9kZXZpY2VzKHZvaWQpCit7CisJdXBfd3JpdGUoJnVzYl9hbGxfZGV2aWNlc19yd3NlbSk7Cit9CisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlICptYXRjaF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgdTE2IHZlbmRvcl9pZCwgdTE2IHByb2R1Y3RfaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnJldF9kZXYgPSBOVUxMOworCWludCBjaGlsZDsKKworCWRldl9kYmcoJmRldi0+ZGV2LCAiY2hlY2sgZm9yIHZlbmRvciAlMDR4LCBwcm9kdWN0ICUwNHggLi4uXG4iLAorCSAgICBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCSAgICBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisKKwkvKiBzZWUgaWYgdGhpcyBkZXZpY2UgbWF0Y2hlcyAqLworCWlmICgodmVuZG9yX2lkID09IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikpICYmCisJICAgIChwcm9kdWN0X2lkID09IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKSkgeworCQlkZXZfZGJnICgmZGV2LT5kZXYsICJtYXRjaGVkIHRoaXMgZGV2aWNlIVxuIik7CisJCXJldF9kZXYgPSB1c2JfZ2V0X2RldihkZXYpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogbG9vayB0aHJvdWdoIGFsbCBvZiB0aGUgY2hpbGRyZW4gb2YgdGhpcyBkZXZpY2UgKi8KKwlmb3IgKGNoaWxkID0gMDsgY2hpbGQgPCBkZXYtPm1heGNoaWxkOyArK2NoaWxkKSB7CisJCWlmIChkZXYtPmNoaWxkcmVuW2NoaWxkXSkgeworCQkJZG93bigmZGV2LT5jaGlsZHJlbltjaGlsZF0tPnNlcmlhbGl6ZSk7CisJCQlyZXRfZGV2ID0gbWF0Y2hfZGV2aWNlKGRldi0+Y2hpbGRyZW5bY2hpbGRdLAorCQkJCQkgICAgICAgdmVuZG9yX2lkLCBwcm9kdWN0X2lkKTsKKwkJCXVwKCZkZXYtPmNoaWxkcmVuW2NoaWxkXS0+c2VyaWFsaXplKTsKKwkJCWlmIChyZXRfZGV2KQorCQkJCWdvdG8gZXhpdDsKKwkJfQorCX0KK2V4aXQ6CisJcmV0dXJuIHJldF9kZXY7Cit9CisKKy8qKgorICogdXNiX2ZpbmRfZGV2aWNlIC0gZmluZCBhIHNwZWNpZmljIHVzYiBkZXZpY2UgaW4gdGhlIHN5c3RlbQorICogQHZlbmRvcl9pZDogdGhlIHZlbmRvciBpZCBvZiB0aGUgZGV2aWNlIHRvIGZpbmQKKyAqIEBwcm9kdWN0X2lkOiB0aGUgcHJvZHVjdCBpZCBvZiB0aGUgZGV2aWNlIHRvIGZpbmQKKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byBhIHN0cnVjdCB1c2JfZGV2aWNlIGlmIHN1Y2ggYSBzcGVjaWZpZWQgdXNiCisgKiBkZXZpY2UgaXMgcHJlc2VudCBpbiB0aGUgc3lzdGVtIGN1cnJlbnRseS4gIFRoZSB1c2FnZSBjb3VudCBvZiB0aGUKKyAqIGRldmljZSB3aWxsIGJlIGluY3JlbWVudGVkIGlmIGEgZGV2aWNlIGlzIGZvdW5kLiAgTWFrZSBzdXJlIHRvIGNhbGwKKyAqIHVzYl9wdXRfZGV2KCkgd2hlbiB0aGUgY2FsbGVyIGlzIGZpbmlzaGVkIHdpdGggdGhlIGRldmljZS4KKyAqCisgKiBJZiBhIGRldmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgdmVuZG9yIGFuZCBwcm9kdWN0IGlkIGlzIG5vdCBmb3VuZCwKKyAqIE5VTEwgaXMgcmV0dXJuZWQuCisgKi8KK3N0cnVjdCB1c2JfZGV2aWNlICp1c2JfZmluZF9kZXZpY2UodTE2IHZlbmRvcl9pZCwgdTE2IHByb2R1Y3RfaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqYnVzbGlzdDsKKwlzdHJ1Y3QgdXNiX2J1cyAqYnVzOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBOVUxMOworCQorCWRvd24oJnVzYl9idXNfbGlzdF9sb2NrKTsKKwlmb3IgKGJ1c2xpc3QgPSB1c2JfYnVzX2xpc3QubmV4dDsKKwkgICAgIGJ1c2xpc3QgIT0gJnVzYl9idXNfbGlzdDsgCisJICAgICBidXNsaXN0ID0gYnVzbGlzdC0+bmV4dCkgeworCQlidXMgPSBjb250YWluZXJfb2YoYnVzbGlzdCwgc3RydWN0IHVzYl9idXMsIGJ1c19saXN0KTsKKwkJaWYgKCFidXMtPnJvb3RfaHViKQorCQkJY29udGludWU7CisJCXVzYl9sb2NrX2RldmljZShidXMtPnJvb3RfaHViKTsKKwkJZGV2ID0gbWF0Y2hfZGV2aWNlKGJ1cy0+cm9vdF9odWIsIHZlbmRvcl9pZCwgcHJvZHVjdF9pZCk7CisJCXVzYl91bmxvY2tfZGV2aWNlKGJ1cy0+cm9vdF9odWIpOworCQlpZiAoZGV2KQorCQkJZ290byBleGl0OworCX0KK2V4aXQ6CisJdXAoJnVzYl9idXNfbGlzdF9sb2NrKTsKKwlyZXR1cm4gZGV2OworfQorCisvKioKKyAqIHVzYl9nZXRfY3VycmVudF9mcmFtZV9udW1iZXIgLSByZXR1cm4gY3VycmVudCBidXMgZnJhbWUgbnVtYmVyCisgKiBAZGV2OiB0aGUgZGV2aWNlIHdob3NlIGJ1cyBpcyBiZWluZyBxdWVyaWVkCisgKgorICogUmV0dXJucyB0aGUgY3VycmVudCBmcmFtZSBudW1iZXIgZm9yIHRoZSBVU0IgaG9zdCBjb250cm9sbGVyCisgKiB1c2VkIHdpdGggdGhlIGdpdmVuIFVTQiBkZXZpY2UuICBUaGlzIGNhbiBiZSB1c2VkIHdoZW4gc2NoZWR1bGluZworICogaXNvY2hyb25vdXMgcmVxdWVzdHMuCisgKgorICogTm90ZSB0aGF0IGRpZmZlcmVudCBraW5kcyBvZiBob3N0IGNvbnRyb2xsZXIgaGF2ZSBkaWZmZXJlbnQKKyAqICJzY2hlZHVsaW5nIGhvcml6b25zIi4gIFdoaWxlIG9uZSB0eXBlIG1pZ2h0IHN1cHBvcnQgc2NoZWR1bGluZyBvbmx5CisgKiAzMiBmcmFtZXMgaW50byB0aGUgZnV0dXJlLCBvdGhlcnMgY291bGQgc3VwcG9ydCBzY2hlZHVsaW5nIHVwIHRvCisgKiAxMDI0IGZyYW1lcyBpbnRvIHRoZSBmdXR1cmUuCisgKi8KK2ludCB1c2JfZ2V0X2N1cnJlbnRfZnJhbWVfbnVtYmVyKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldi0+YnVzLT5vcC0+Z2V0X2ZyYW1lX251bWJlciAoZGV2KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBfX3VzYl9nZXRfZXh0cmFfZGVzY3JpcHRvcigpIGZpbmRzIGEgZGVzY3JpcHRvciBvZiBzcGVjaWZpYyB0eXBlIGluIHRoZQorICogZXh0cmEgZmllbGQgb2YgdGhlIGludGVyZmFjZSBhbmQgZW5kcG9pbnQgZGVzY3JpcHRvciBzdHJ1Y3RzLgorICovCisKK2ludCBfX3VzYl9nZXRfZXh0cmFfZGVzY3JpcHRvcihjaGFyICpidWZmZXIsIHVuc2lnbmVkIHNpemUsCisJdW5zaWduZWQgY2hhciB0eXBlLCB2b2lkICoqcHRyKQoreworCXN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmhlYWRlcjsKKworCXdoaWxlIChzaXplID49IHNpemVvZihzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyKSkgeworCQloZWFkZXIgPSAoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKWJ1ZmZlcjsKKworCQlpZiAoaGVhZGVyLT5iTGVuZ3RoIDwgMikgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJIiVzOiBib2d1cyBkZXNjcmlwdG9yLCB0eXBlICVkIGxlbmd0aCAlZFxuIiwKKwkJCQl1c2Jjb3JlX25hbWUsCisJCQkJaGVhZGVyLT5iRGVzY3JpcHRvclR5cGUsIAorCQkJCWhlYWRlci0+Ykxlbmd0aCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoaGVhZGVyLT5iRGVzY3JpcHRvclR5cGUgPT0gdHlwZSkgeworCQkJKnB0ciA9IGhlYWRlcjsKKwkJCXJldHVybiAwOworCQl9CisKKwkJYnVmZmVyICs9IGhlYWRlci0+Ykxlbmd0aDsKKwkJc2l6ZSAtPSBoZWFkZXItPmJMZW5ndGg7CisJfQorCXJldHVybiAtMTsKK30KKworLyoqCisgKiB1c2JfYnVmZmVyX2FsbG9jIC0gYWxsb2NhdGUgZG1hLWNvbnNpc3RlbnQgYnVmZmVyIGZvciBVUkJfTk9feHh4X0RNQV9NQVAKKyAqIEBkZXY6IGRldmljZSB0aGUgYnVmZmVyIHdpbGwgYmUgdXNlZCB3aXRoCisgKiBAc2l6ZTogcmVxdWVzdGVkIGJ1ZmZlciBzaXplCisgKiBAbWVtX2ZsYWdzOiBhZmZlY3Qgd2hldGhlciBhbGxvY2F0aW9uIG1heSBibG9jaworICogQGRtYTogdXNlZCB0byByZXR1cm4gRE1BIGFkZHJlc3Mgb2YgYnVmZmVyCisgKgorICogUmV0dXJuIHZhbHVlIGlzIGVpdGhlciBudWxsIChpbmRpY2F0aW5nIG5vIGJ1ZmZlciBjb3VsZCBiZSBhbGxvY2F0ZWQpLCBvcgorICogdGhlIGNwdS1zcGFjZSBwb2ludGVyIHRvIGEgYnVmZmVyIHRoYXQgbWF5IGJlIHVzZWQgdG8gcGVyZm9ybSBETUEgdG8gdGhlCisgKiBzcGVjaWZpZWQgZGV2aWNlLiAgU3VjaCBjcHUtc3BhY2UgYnVmZmVycyBhcmUgcmV0dXJuZWQgYWxvbmcgd2l0aCB0aGUgRE1BCisgKiBhZGRyZXNzICh0aHJvdWdoIHRoZSBwb2ludGVyIHByb3ZpZGVkKS4KKyAqCisgKiBUaGVzZSBidWZmZXJzIGFyZSB1c2VkIHdpdGggVVJCX05PX3h4eF9ETUFfTUFQIHNldCBpbiB1cmItPnRyYW5zZmVyX2ZsYWdzCisgKiB0byBhdm9pZCBiZWhhdmlvcnMgbGlrZSB1c2luZyAiRE1BIGJvdW5jZSBidWZmZXJzIiwgb3IgdHlpbmcgZG93biBJL08KKyAqIG1hcHBpbmcgaGFyZHdhcmUgZm9yIGxvbmcgaWRsZSBwZXJpb2RzLiAgVGhlIGltcGxlbWVudGF0aW9uIHZhcmllcyBiZXR3ZWVuCisgKiBwbGF0Zm9ybXMsIGRlcGVuZGluZyBvbiBkZXRhaWxzIG9mIGhvdyBETUEgd2lsbCB3b3JrIHRvIHRoaXMgZGV2aWNlLgorICogVXNpbmcgdGhlc2UgYnVmZmVycyBhbHNvIGhlbHBzIHByZXZlbnQgY2FjaGVsaW5lIHNoYXJpbmcgcHJvYmxlbXMgb24KKyAqIGFyY2hpdGVjdHVyZXMgd2hlcmUgQ1BVIGNhY2hlcyBhcmUgbm90IERNQS1jb2hlcmVudC4KKyAqCisgKiBXaGVuIHRoZSBidWZmZXIgaXMgbm8gbG9uZ2VyIHVzZWQsIGZyZWUgaXQgd2l0aCB1c2JfYnVmZmVyX2ZyZWUoKS4KKyAqLwordm9pZCAqdXNiX2J1ZmZlcl9hbGxvYyAoCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKKwlzaXplX3Qgc2l6ZSwKKwlpbnQgbWVtX2ZsYWdzLAorCWRtYV9hZGRyX3QgKmRtYQorKQoreworCWlmICghZGV2IHx8ICFkZXYtPmJ1cyB8fCAhZGV2LT5idXMtPm9wIHx8ICFkZXYtPmJ1cy0+b3AtPmJ1ZmZlcl9hbGxvYykKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGRldi0+YnVzLT5vcC0+YnVmZmVyX2FsbG9jIChkZXYtPmJ1cywgc2l6ZSwgbWVtX2ZsYWdzLCBkbWEpOworfQorCisvKioKKyAqIHVzYl9idWZmZXJfZnJlZSAtIGZyZWUgbWVtb3J5IGFsbG9jYXRlZCB3aXRoIHVzYl9idWZmZXJfYWxsb2MoKQorICogQGRldjogZGV2aWNlIHRoZSBidWZmZXIgd2FzIHVzZWQgd2l0aAorICogQHNpemU6IHJlcXVlc3RlZCBidWZmZXIgc2l6ZQorICogQGFkZHI6IENQVSBhZGRyZXNzIG9mIGJ1ZmZlcgorICogQGRtYTogRE1BIGFkZHJlc3Mgb2YgYnVmZmVyCisgKgorICogVGhpcyByZWNsYWltcyBhbiBJL08gYnVmZmVyLCBsZXR0aW5nIGl0IGJlIHJldXNlZC4gIFRoZSBtZW1vcnkgbXVzdCBoYXZlCisgKiBiZWVuIGFsbG9jYXRlZCB1c2luZyB1c2JfYnVmZmVyX2FsbG9jKCksIGFuZCB0aGUgcGFyYW1ldGVycyBtdXN0IG1hdGNoCisgKiB0aG9zZSBwcm92aWRlZCBpbiB0aGF0IGFsbG9jYXRpb24gcmVxdWVzdC4gCisgKi8KK3ZvaWQgdXNiX2J1ZmZlcl9mcmVlICgKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAorCXNpemVfdCBzaXplLAorCXZvaWQgKmFkZHIsCisJZG1hX2FkZHJfdCBkbWEKKykKK3sKKwlpZiAoIWRldiB8fCAhZGV2LT5idXMgfHwgIWRldi0+YnVzLT5vcCB8fCAhZGV2LT5idXMtPm9wLT5idWZmZXJfZnJlZSkKKwkgICAgCXJldHVybjsKKwlkZXYtPmJ1cy0+b3AtPmJ1ZmZlcl9mcmVlIChkZXYtPmJ1cywgc2l6ZSwgYWRkciwgZG1hKTsKK30KKworLyoqCisgKiB1c2JfYnVmZmVyX21hcCAtIGNyZWF0ZSBETUEgbWFwcGluZyhzKSBmb3IgYW4gdXJiCisgKiBAdXJiOiB1cmIgd2hvc2UgdHJhbnNmZXJfYnVmZmVyL3NldHVwX3BhY2tldCB3aWxsIGJlIG1hcHBlZAorICoKKyAqIFJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCAoaW5kaWNhdGluZyBubyBidWZmZXIgY291bGQgYmUgbWFwcGVkKSwgb3IKKyAqIHRoZSBwYXJhbWV0ZXIuICBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUCBhbmQgVVJCX05PX1NFVFVQX0RNQV9NQVAgYXJlCisgKiBhZGRlZCB0byB1cmItPnRyYW5zZmVyX2ZsYWdzIGlmIHRoZSBvcGVyYXRpb24gc3VjY2VlZHMuICBJZiB0aGUgZGV2aWNlCisgKiBpcyBjb25uZWN0ZWQgdG8gdGhpcyBzeXN0ZW0gdGhyb3VnaCBhIG5vbi1ETUEgY29udHJvbGxlciwgdGhpcyBvcGVyYXRpb24KKyAqIGFsd2F5cyBzdWNjZWVkcy4KKyAqCisgKiBUaGlzIGNhbGwgd291bGQgbm9ybWFsbHkgYmUgdXNlZCBmb3IgYW4gdXJiIHdoaWNoIGlzIHJldXNlZCwgcGVyaGFwcworICogYXMgdGhlIHRhcmdldCBvZiBhIGxhcmdlIHBlcmlvZGljIHRyYW5zZmVyLCB3aXRoIHVzYl9idWZmZXJfZG1hc3luYygpCisgKiBjYWxscyB0byBzeW5jaHJvbml6ZSBtZW1vcnkgYW5kIGRtYSBzdGF0ZS4KKyAqCisgKiBSZXZlcnNlIHRoZSBlZmZlY3Qgb2YgdGhpcyBjYWxsIHdpdGggdXNiX2J1ZmZlcl91bm1hcCgpLgorICovCisjaWYgMAorc3RydWN0IHVyYiAqdXNiX2J1ZmZlcl9tYXAgKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX2J1cwkJKmJ1czsKKwlzdHJ1Y3QgZGV2aWNlCQkqY29udHJvbGxlcjsKKworCWlmICghdXJiCisJCQl8fCAhdXJiLT5kZXYKKwkJCXx8ICEoYnVzID0gdXJiLT5kZXYtPmJ1cykKKwkJCXx8ICEoY29udHJvbGxlciA9IGJ1cy0+Y29udHJvbGxlcikpCisJCXJldHVybiBOVUxMOworCisJaWYgKGNvbnRyb2xsZXItPmRtYV9tYXNrKSB7CisJCXVyYi0+dHJhbnNmZXJfZG1hID0gZG1hX21hcF9zaW5nbGUgKGNvbnRyb2xsZXIsCisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJdXNiX3BpcGVpbiAodXJiLT5waXBlKQorCQkJCT8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRSk7CisJCWlmICh1c2JfcGlwZWNvbnRyb2wgKHVyYi0+cGlwZSkpCisJCQl1cmItPnNldHVwX2RtYSA9IGRtYV9tYXBfc2luZ2xlIChjb250cm9sbGVyLAorCQkJCQl1cmItPnNldHVwX3BhY2tldCwKKwkJCQkJc2l6ZW9mIChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSwKKwkJCQkJRE1BX1RPX0RFVklDRSk7CisJLy8gRklYTUUgZ2VuZXJpYyBhcGkgYnJva2VuIGxpa2UgcGNpLCBjYW4ndCByZXBvcnQgZXJyb3JzCisJLy8gaWYgKHVyYi0+dHJhbnNmZXJfZG1hID09IERNQV9BRERSX0lOVkFMSUQpIHJldHVybiAwOworCX0gZWxzZQorCQl1cmItPnRyYW5zZmVyX2RtYSA9IH4wOworCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gKFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQCisJCQkJfCBVUkJfTk9fU0VUVVBfRE1BX01BUCk7CisJcmV0dXJuIHVyYjsKK30KKyNlbmRpZiAgLyogIDAgICovCisKKy8qIFhYWCBESVNBQkxFRCwgbm8gdXNlcnMgY3VycmVudGx5LiAgSWYgeW91IHdpc2ggdG8gcmUtZW5hYmxlIHRoaXMKKyAqIFhYWCBwbGVhc2UgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHN5bmMgaXMgdG8gdHJhbnNmZXIgb3duZXJzaGlwIG9mCisgKiBYWFggdGhlIGJ1ZmZlciBmcm9tIGRldmljZSB0byBjcHUgb3IgdmljZSB2ZXJzZSwgYW5kIHRodXNseSB1c2UgdGhlCisgKiBYWFggYXBwcm9wcmlhdGUgX2Zvcl97Y3B1LGRldmljZX0oKSBtZXRob2QuICAtRGF2ZU0KKyAqLworI2lmIDAKKworLyoqCisgKiB1c2JfYnVmZmVyX2RtYXN5bmMgLSBzeW5jaHJvbml6ZSBETUEgYW5kIENQVSB2aWV3IG9mIGJ1ZmZlcihzKQorICogQHVyYjogdXJiIHdob3NlIHRyYW5zZmVyX2J1ZmZlci9zZXR1cF9wYWNrZXQgd2lsbCBiZSBzeW5jaHJvbml6ZWQKKyAqLwordm9pZCB1c2JfYnVmZmVyX2RtYXN5bmMgKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX2J1cwkJKmJ1czsKKwlzdHJ1Y3QgZGV2aWNlCQkqY29udHJvbGxlcjsKKworCWlmICghdXJiCisJCQl8fCAhKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUCkKKwkJCXx8ICF1cmItPmRldgorCQkJfHwgIShidXMgPSB1cmItPmRldi0+YnVzKQorCQkJfHwgIShjb250cm9sbGVyID0gYnVzLT5jb250cm9sbGVyKSkKKwkJcmV0dXJuOworCisJaWYgKGNvbnRyb2xsZXItPmRtYV9tYXNrKSB7CisJCWRtYV9zeW5jX3NpbmdsZSAoY29udHJvbGxlciwKKwkJCXVyYi0+dHJhbnNmZXJfZG1hLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQl1c2JfcGlwZWluICh1cmItPnBpcGUpCisJCQkJPyBETUFfRlJPTV9ERVZJQ0UgOiBETUFfVE9fREVWSUNFKTsKKwkJaWYgKHVzYl9waXBlY29udHJvbCAodXJiLT5waXBlKSkKKwkJCWRtYV9zeW5jX3NpbmdsZSAoY29udHJvbGxlciwKKwkJCQkJdXJiLT5zZXR1cF9kbWEsCisJCQkJCXNpemVvZiAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksCisJCQkJCURNQV9UT19ERVZJQ0UpOworCX0KK30KKyNlbmRpZgorCisvKioKKyAqIHVzYl9idWZmZXJfdW5tYXAgLSBmcmVlIERNQSBtYXBwaW5nKHMpIGZvciBhbiB1cmIKKyAqIEB1cmI6IHVyYiB3aG9zZSB0cmFuc2Zlcl9idWZmZXIgd2lsbCBiZSB1bm1hcHBlZAorICoKKyAqIFJldmVyc2VzIHRoZSBlZmZlY3Qgb2YgdXNiX2J1ZmZlcl9tYXAoKS4KKyAqLworI2lmIDAKK3ZvaWQgdXNiX2J1ZmZlcl91bm1hcCAoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1c2JfYnVzCQkqYnVzOworCXN0cnVjdCBkZXZpY2UJCSpjb250cm9sbGVyOworCisJaWYgKCF1cmIKKwkJCXx8ICEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQKQorCQkJfHwgIXVyYi0+ZGV2CisJCQl8fCAhKGJ1cyA9IHVyYi0+ZGV2LT5idXMpCisJCQl8fCAhKGNvbnRyb2xsZXIgPSBidXMtPmNvbnRyb2xsZXIpKQorCQlyZXR1cm47CisKKwlpZiAoY29udHJvbGxlci0+ZG1hX21hc2spIHsKKwkJZG1hX3VubWFwX3NpbmdsZSAoY29udHJvbGxlciwKKwkJCXVyYi0+dHJhbnNmZXJfZG1hLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQl1c2JfcGlwZWluICh1cmItPnBpcGUpCisJCQkJPyBETUFfRlJPTV9ERVZJQ0UgOiBETUFfVE9fREVWSUNFKTsKKwkJaWYgKHVzYl9waXBlY29udHJvbCAodXJiLT5waXBlKSkKKwkJCWRtYV91bm1hcF9zaW5nbGUgKGNvbnRyb2xsZXIsCisJCQkJCXVyYi0+c2V0dXBfZG1hLAorCQkJCQlzaXplb2YgKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpLAorCQkJCQlETUFfVE9fREVWSUNFKTsKKwl9CisJdXJiLT50cmFuc2Zlcl9mbGFncyAmPSB+KFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQCisJCQkJfCBVUkJfTk9fU0VUVVBfRE1BX01BUCk7Cit9CisjZW5kaWYgIC8qICAwICAqLworCisvKioKKyAqIHVzYl9idWZmZXJfbWFwX3NnIC0gY3JlYXRlIHNjYXR0ZXJsaXN0IERNQSBtYXBwaW5nKHMpIGZvciBhbiBlbmRwb2ludAorICogQGRldjogZGV2aWNlIHRvIHdoaWNoIHRoZSBzY2F0dGVybGlzdCB3aWxsIGJlIG1hcHBlZAorICogQHBpcGU6IGVuZHBvaW50IGRlZmluaW5nIHRoZSBtYXBwaW5nIGRpcmVjdGlvbgorICogQHNnOiB0aGUgc2NhdHRlcmxpc3QgdG8gbWFwCisgKiBAbmVudHM6IHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgc2NhdHRlcmxpc3QKKyAqCisgKiBSZXR1cm4gdmFsdWUgaXMgZWl0aGVyIDwgMCAoaW5kaWNhdGluZyBubyBidWZmZXJzIGNvdWxkIGJlIG1hcHBlZCksIG9yCisgKiB0aGUgbnVtYmVyIG9mIERNQSBtYXBwaW5nIGFycmF5IGVudHJpZXMgaW4gdGhlIHNjYXR0ZXJsaXN0LgorICoKKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHBsYWNpbmcgdGhlIHJlc3VsdGluZyBETUEgYWRkcmVzc2VzIGZyb20KKyAqIHRoZSBzY2F0dGVybGlzdCBpbnRvIFVSQiB0cmFuc2ZlciBidWZmZXIgcG9pbnRlcnMsIGFuZCBmb3Igc2V0dGluZyB0aGUKKyAqIFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQIHRyYW5zZmVyIGZsYWcgaW4gZWFjaCBvZiB0aG9zZSBVUkJzLgorICoKKyAqIFRvcCBJL08gcmF0ZXMgY29tZSBmcm9tIHF1ZXVpbmcgVVJCcywgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciBlYWNoIG9uZQorICogdG8gY29tcGxldGUgYmVmb3JlIHN0YXJ0aW5nIHRoZSBuZXh0IEkvTy4gICBUaGlzIGlzIHBhcnRpY3VsYXJseSBlYXN5CisgKiB0byBkbyB3aXRoIHNjYXR0ZXJsaXN0cy4gIEp1c3QgYWxsb2NhdGUgYW5kIHN1Ym1pdCBvbmUgVVJCIGZvciBlYWNoIERNQQorICogbWFwcGluZyBlbnRyeSByZXR1cm5lZCwgc3RvcHBpbmcgb24gdGhlIGZpcnN0IGVycm9yIG9yIHdoZW4gYWxsIHN1Y2NlZWQuCisgKiBCZXR0ZXIgeWV0LCB1c2UgdGhlIHVzYl9zZ18qKCkgY2FsbHMsIHdoaWNoIGRvIHRoYXQgKGFuZCBtb3JlKSBmb3IgeW91LgorICoKKyAqIFRoaXMgY2FsbCB3b3VsZCBub3JtYWxseSBiZSB1c2VkIHdoZW4gdHJhbnNsYXRpbmcgc2NhdHRlcmxpc3QgcmVxdWVzdHMsCisgKiByYXRoZXIgdGhhbiB1c2JfYnVmZmVyX21hcCgpLCBzaW5jZSBvbiBzb21lIGhhcmR3YXJlICh3aXRoIElPTU1VcykgaXQKKyAqIG1heSBiZSBhYmxlIHRvIGNvYWxlc2NlIG1hcHBpbmdzIGZvciBpbXByb3ZlZCBJL08gZWZmaWNpZW5jeS4KKyAqCisgKiBSZXZlcnNlIHRoZSBlZmZlY3Qgb2YgdGhpcyBjYWxsIHdpdGggdXNiX2J1ZmZlcl91bm1hcF9zZygpLgorICovCitpbnQgdXNiX2J1ZmZlcl9tYXBfc2cgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHBpcGUsCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cykKK3sKKwlzdHJ1Y3QgdXNiX2J1cwkJKmJ1czsKKwlzdHJ1Y3QgZGV2aWNlCQkqY29udHJvbGxlcjsKKworCWlmICghZGV2CisJCQl8fCB1c2JfcGlwZWNvbnRyb2wgKHBpcGUpCisJCQl8fCAhKGJ1cyA9IGRldi0+YnVzKQorCQkJfHwgIShjb250cm9sbGVyID0gYnVzLT5jb250cm9sbGVyKQorCQkJfHwgIWNvbnRyb2xsZXItPmRtYV9tYXNrKQorCQlyZXR1cm4gLTE7CisKKwkvLyBGSVhNRSBnZW5lcmljIGFwaSBicm9rZW4gbGlrZSBwY2ksIGNhbid0IHJlcG9ydCBlcnJvcnMKKwlyZXR1cm4gZG1hX21hcF9zZyAoY29udHJvbGxlciwgc2csIG5lbnRzLAorCQkJdXNiX3BpcGVpbiAocGlwZSkgPyBETUFfRlJPTV9ERVZJQ0UgOiBETUFfVE9fREVWSUNFKTsKK30KKworLyogWFhYIERJU0FCTEVELCBubyB1c2VycyBjdXJyZW50bHkuICBJZiB5b3Ugd2lzaCB0byByZS1lbmFibGUgdGhpcworICogWFhYIHBsZWFzZSBkZXRlcm1pbmUgd2hldGhlciB0aGUgc3luYyBpcyB0byB0cmFuc2ZlciBvd25lcnNoaXAgb2YKKyAqIFhYWCB0aGUgYnVmZmVyIGZyb20gZGV2aWNlIHRvIGNwdSBvciB2aWNlIHZlcnNlLCBhbmQgdGh1c2x5IHVzZSB0aGUKKyAqIFhYWCBhcHByb3ByaWF0ZSBfZm9yX3tjcHUsZGV2aWNlfSgpIG1ldGhvZC4gIC1EYXZlTQorICovCisjaWYgMAorCisvKioKKyAqIHVzYl9idWZmZXJfZG1hc3luY19zZyAtIHN5bmNocm9uaXplIERNQSBhbmQgQ1BVIHZpZXcgb2Ygc2NhdHRlcmxpc3QgYnVmZmVyKHMpCisgKiBAZGV2OiBkZXZpY2UgdG8gd2hpY2ggdGhlIHNjYXR0ZXJsaXN0IHdpbGwgYmUgbWFwcGVkCisgKiBAcGlwZTogZW5kcG9pbnQgZGVmaW5pbmcgdGhlIG1hcHBpbmcgZGlyZWN0aW9uCisgKiBAc2c6IHRoZSBzY2F0dGVybGlzdCB0byBzeW5jaHJvbml6ZQorICogQG5faHdfZW50czogdGhlIHBvc2l0aXZlIHJldHVybiB2YWx1ZSBmcm9tIHVzYl9idWZmZXJfbWFwX3NnCisgKgorICogVXNlIHRoaXMgd2hlbiB5b3UgYXJlIHJlLXVzaW5nIGEgc2NhdHRlcmxpc3QncyBkYXRhIGJ1ZmZlcnMgZm9yCisgKiBhbm90aGVyIFVTQiByZXF1ZXN0LgorICovCit2b2lkIHVzYl9idWZmZXJfZG1hc3luY19zZyAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgcGlwZSwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5faHdfZW50cykKK3sKKwlzdHJ1Y3QgdXNiX2J1cwkJKmJ1czsKKwlzdHJ1Y3QgZGV2aWNlCQkqY29udHJvbGxlcjsKKworCWlmICghZGV2CisJCQl8fCAhKGJ1cyA9IGRldi0+YnVzKQorCQkJfHwgIShjb250cm9sbGVyID0gYnVzLT5jb250cm9sbGVyKQorCQkJfHwgIWNvbnRyb2xsZXItPmRtYV9tYXNrKQorCQlyZXR1cm47CisKKwlkbWFfc3luY19zZyAoY29udHJvbGxlciwgc2csIG5faHdfZW50cywKKwkJCXVzYl9waXBlaW4gKHBpcGUpID8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRSk7Cit9CisjZW5kaWYKKworLyoqCisgKiB1c2JfYnVmZmVyX3VubWFwX3NnIC0gZnJlZSBETUEgbWFwcGluZyhzKSBmb3IgYSBzY2F0dGVybGlzdAorICogQGRldjogZGV2aWNlIHRvIHdoaWNoIHRoZSBzY2F0dGVybGlzdCB3aWxsIGJlIG1hcHBlZAorICogQHBpcGU6IGVuZHBvaW50IGRlZmluaW5nIHRoZSBtYXBwaW5nIGRpcmVjdGlvbgorICogQHNnOiB0aGUgc2NhdHRlcmxpc3QgdG8gdW5tYXAKKyAqIEBuX2h3X2VudHM6IHRoZSBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgZnJvbSB1c2JfYnVmZmVyX21hcF9zZworICoKKyAqIFJldmVyc2VzIHRoZSBlZmZlY3Qgb2YgdXNiX2J1ZmZlcl9tYXBfc2coKS4KKyAqLwordm9pZCB1c2JfYnVmZmVyX3VubWFwX3NnIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBwaXBlLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbl9od19lbnRzKQoreworCXN0cnVjdCB1c2JfYnVzCQkqYnVzOworCXN0cnVjdCBkZXZpY2UJCSpjb250cm9sbGVyOworCisJaWYgKCFkZXYKKwkJCXx8ICEoYnVzID0gZGV2LT5idXMpCisJCQl8fCAhKGNvbnRyb2xsZXIgPSBidXMtPmNvbnRyb2xsZXIpCisJCQl8fCAhY29udHJvbGxlci0+ZG1hX21hc2spCisJCXJldHVybjsKKworCWRtYV91bm1hcF9zZyAoY29udHJvbGxlciwgc2csIG5faHdfZW50cywKKwkJCXVzYl9waXBlaW4gKHBpcGUpID8gRE1BX0ZST01fREVWSUNFIDogRE1BX1RPX0RFVklDRSk7Cit9CisKK3N0YXRpYyBpbnQgdXNiX2dlbmVyaWNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBzdGF0ZSkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlzdHJ1Y3QgdXNiX2RyaXZlciAqZHJpdmVyOworCisJaWYgKGRldi0+ZHJpdmVyID09ICZ1c2JfZ2VuZXJpY19kcml2ZXIpCisJCXJldHVybiB1c2Jfc3VzcGVuZF9kZXZpY2UgKHRvX3VzYl9kZXZpY2UoZGV2KSwgc3RhdGUpOworCisJaWYgKChkZXYtPmRyaXZlciA9PSBOVUxMKSB8fAorCSAgICAoZGV2LT5kcml2ZXJfZGF0YSA9PSAmdXNiX2dlbmVyaWNfZHJpdmVyX2RhdGEpKQorCQlyZXR1cm4gMDsKKworCWludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJZHJpdmVyID0gdG9fdXNiX2RyaXZlcihkZXYtPmRyaXZlcik7CisKKwkvKiB0aGVyZSdzIG9ubHkgb25lIFVTQiBzdXNwZW5kIHN0YXRlICovCisJaWYgKGludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZHJpdmVyLT5zdXNwZW5kKQorCQlyZXR1cm4gZHJpdmVyLT5zdXNwZW5kKGludGYsIHN0YXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2JfZ2VuZXJpY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCB1c2JfZHJpdmVyICpkcml2ZXI7CisKKwkvKiBkZXZpY2VzIHJlc3VtZSB0aHJvdWdoIHRoZWlyIGh1YiAqLworCWlmIChkZXYtPmRyaXZlciA9PSAmdXNiX2dlbmVyaWNfZHJpdmVyKQorCQlyZXR1cm4gdXNiX3Jlc3VtZV9kZXZpY2UgKHRvX3VzYl9kZXZpY2UoZGV2KSk7CisKKwlpZiAoKGRldi0+ZHJpdmVyID09IE5VTEwpIHx8CisJICAgIChkZXYtPmRyaXZlcl9kYXRhID09ICZ1c2JfZ2VuZXJpY19kcml2ZXJfZGF0YSkpCisJCXJldHVybiAwOworCisJaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlkcml2ZXIgPSB0b191c2JfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKworCWlmIChkcml2ZXItPnJlc3VtZSkKKwkJcmV0dXJuIGRyaXZlci0+cmVzdW1lKGludGYpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgYnVzX3R5cGUgdXNiX2J1c190eXBlID0geworCS5uYW1lID0JCSJ1c2IiLAorCS5tYXRjaCA9CXVzYl9kZXZpY2VfbWF0Y2gsCisJLmhvdHBsdWcgPQl1c2JfaG90cGx1ZywKKwkuc3VzcGVuZCA9CXVzYl9nZW5lcmljX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9nZW5lcmljX3Jlc3VtZSwKK307CisKKyNpZm5kZWYgTU9EVUxFCisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9zZXR1cF9kaXNhYmxlKGNoYXIgKnN0cikKK3sKKwlub3VzYiA9IDE7CisJcmV0dXJuIDE7Cit9CisKKy8qIGZvcm1hdCB0byBkaXNhYmxlIFVTQiBvbiBrZXJuZWwgY29tbWFuZCBsaW5lIGlzOiBub3VzYiAqLworX19zZXR1cCgibm91c2IiLCB1c2Jfc2V0dXBfZGlzYWJsZSk7CisKKyNlbmRpZgorCisvKgorICogZm9yIGV4dGVybmFsIHJlYWQgYWNjZXNzIHRvIDxub3VzYj4KKyAqLworaW50IHVzYl9kaXNhYmxlZCh2b2lkKQoreworCXJldHVybiBub3VzYjsKK30KKworLyoKKyAqIEluaXQKKyAqLworc3RhdGljIGludCBfX2luaXQgdXNiX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCWlmIChub3VzYikgeworCQlwcl9pbmZvICgiJXM6IFVTQiBzdXBwb3J0IGRpc2FibGVkXG4iLCB1c2Jjb3JlX25hbWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR2YWwgPSBidXNfcmVnaXN0ZXIoJnVzYl9idXNfdHlwZSk7CisJaWYgKHJldHZhbCkgCisJCWdvdG8gb3V0OworCXJldHZhbCA9IHVzYl9ob3N0X2luaXQoKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGhvc3RfaW5pdF9mYWlsZWQ7CisJcmV0dmFsID0gdXNiX21ham9yX2luaXQoKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG1ham9yX2luaXRfZmFpbGVkOworCXJldHZhbCA9IHVzYmZzX2luaXQoKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZzX2luaXRfZmFpbGVkOworCXJldHZhbCA9IHVzYl9odWJfaW5pdCgpOworCWlmIChyZXR2YWwpCisJCWdvdG8gaHViX2luaXRfZmFpbGVkOworCisJcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyKCZ1c2JfZ2VuZXJpY19kcml2ZXIpOworCWlmICghcmV0dmFsKQorCQlnb3RvIG91dDsKKworCXVzYl9odWJfY2xlYW51cCgpOworaHViX2luaXRfZmFpbGVkOgorCXVzYmZzX2NsZWFudXAoKTsKK2ZzX2luaXRfZmFpbGVkOgorCXVzYl9tYWpvcl9jbGVhbnVwKCk7CQorbWFqb3JfaW5pdF9mYWlsZWQ6CisJdXNiX2hvc3RfY2xlYW51cCgpOworaG9zdF9pbml0X2ZhaWxlZDoKKwlidXNfdW5yZWdpc3RlcigmdXNiX2J1c190eXBlKTsKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogQ2xlYW51cAorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX2V4aXQodm9pZCkKK3sKKwkvKiBUaGlzIHdpbGwgbWF0dGVyIGlmIHNodXRkb3duL3JlYm9vdCBkb2VzIGV4aXRjYWxscy4gKi8KKwlpZiAobm91c2IpCisJCXJldHVybjsKKworCWRyaXZlcl91bnJlZ2lzdGVyKCZ1c2JfZ2VuZXJpY19kcml2ZXIpOworCXVzYl9tYWpvcl9jbGVhbnVwKCk7CisJdXNiZnNfY2xlYW51cCgpOworCXVzYl9odWJfY2xlYW51cCgpOworCXVzYl9ob3N0X2NsZWFudXAoKTsKKwlidXNfdW5yZWdpc3RlcigmdXNiX2J1c190eXBlKTsKK30KKworc3Vic3lzX2luaXRjYWxsKHVzYl9pbml0KTsKK21vZHVsZV9leGl0KHVzYl9leGl0KTsKKworLyoKKyAqIFVTQiBtYXkgYmUgYnVpbHQgaW50byB0aGUga2VybmVsIG9yIGJlIGJ1aWx0IGFzIG1vZHVsZXMuCisgKiBUaGVzZSBzeW1ib2xzIGFyZSBleHBvcnRlZCBmb3IgZGV2aWNlIChvciBob3N0IGNvbnRyb2xsZXIpCisgKiBkcml2ZXIgbW9kdWxlcyB0byB1c2UuCisgKi8KKworRVhQT1JUX1NZTUJPTCh1c2JfcmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTCh1c2JfZGVyZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MKHVzYl9kaXNhYmxlZCk7CisKK0VYUE9SVF9TWU1CT0wodXNiX2FsbG9jX2Rldik7CitFWFBPUlRfU1lNQk9MKHVzYl9wdXRfZGV2KTsKK0VYUE9SVF9TWU1CT0wodXNiX2dldF9kZXYpOworRVhQT1JUX1NZTUJPTCh1c2JfaHViX3R0X2NsZWFyX2J1ZmZlcik7CisKK0VYUE9SVF9TWU1CT0wodXNiX2xvY2tfZGV2aWNlKTsKK0VYUE9SVF9TWU1CT0wodXNiX3RyeWxvY2tfZGV2aWNlKTsKK0VYUE9SVF9TWU1CT0wodXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldCk7CitFWFBPUlRfU1lNQk9MKHVzYl91bmxvY2tfZGV2aWNlKTsKKworRVhQT1JUX1NZTUJPTCh1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSk7CitFWFBPUlRfU1lNQk9MKHVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UpOworRVhQT1JUX1NZTUJPTCh1c2JfbWF0Y2hfaWQpOworRVhQT1JUX1NZTUJPTCh1c2JfZmluZF9pbnRlcmZhY2UpOworRVhQT1JUX1NZTUJPTCh1c2JfaWZudW1fdG9faWYpOworRVhQT1JUX1NZTUJPTCh1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcpOworCitFWFBPUlRfU1lNQk9MKHVzYl9yZXNldF9kZXZpY2UpOworRVhQT1JUX1NZTUJPTCh1c2JfZGlzY29ubmVjdCk7CisKK0VYUE9SVF9TWU1CT0woX191c2JfZ2V0X2V4dHJhX2Rlc2NyaXB0b3IpOworCitFWFBPUlRfU1lNQk9MKHVzYl9maW5kX2RldmljZSk7CitFWFBPUlRfU1lNQk9MKHVzYl9nZXRfY3VycmVudF9mcmFtZV9udW1iZXIpOworCitFWFBPUlRfU1lNQk9MICh1c2JfYnVmZmVyX2FsbG9jKTsKK0VYUE9SVF9TWU1CT0wgKHVzYl9idWZmZXJfZnJlZSk7CisKKyNpZiAwCitFWFBPUlRfU1lNQk9MICh1c2JfYnVmZmVyX21hcCk7CitFWFBPUlRfU1lNQk9MICh1c2JfYnVmZmVyX2RtYXN5bmMpOworRVhQT1JUX1NZTUJPTCAodXNiX2J1ZmZlcl91bm1hcCk7CisjZW5kaWYKKworRVhQT1JUX1NZTUJPTCAodXNiX2J1ZmZlcl9tYXBfc2cpOworI2lmIDAKK0VYUE9SVF9TWU1CT0wgKHVzYl9idWZmZXJfZG1hc3luY19zZyk7CisjZW5kaWYKK0VYUE9SVF9TWU1CT0wgKHVzYl9idWZmZXJfdW5tYXBfc2cpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oIGIvZHJpdmVycy91c2IvY29yZS91c2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzMzZWVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvY29yZS91c2IuaApAQCAtMCwwICsxLDQ2IEBACisvKiBGdW5jdGlvbnMgbG9jYWwgdG8gZHJpdmVycy91c2IvY29yZS8gKi8KKworZXh0ZXJuIHZvaWQgdXNiX2NyZWF0ZV9zeXNmc19kZXZfZmlsZXMgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgdXNiX3JlbW92ZV9zeXNmc19kZXZfZmlsZXMgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgdXNiX2NyZWF0ZV9zeXNmc19pbnRmX2ZpbGVzIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CitleHRlcm4gdm9pZCB1c2JfcmVtb3ZlX3N5c2ZzX2ludGZfZmlsZXMgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKKworZXh0ZXJuIHZvaWQgdXNiX2Rpc2FibGVfZW5kcG9pbnQgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlcGFkZHIpOworZXh0ZXJuIHZvaWQgdXNiX2Rpc2FibGVfaW50ZXJmYWNlIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CitleHRlcm4gdm9pZCB1c2JfcmVsZWFzZV9pbnRlcmZhY2VfY2FjaGUoc3RydWN0IGtyZWYgKnJlZik7CitleHRlcm4gdm9pZCB1c2JfZGlzYWJsZV9kZXZpY2UgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBza2lwX2VwMCk7CisKK2V4dGVybiBpbnQgdXNiX2dldF9kZXZpY2VfZGVzY3JpcHRvcihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAorCQl1bnNpZ25lZCBpbnQgc2l6ZSk7CitleHRlcm4gaW50IHVzYl9zZXRfY29uZmlndXJhdGlvbihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgY29uZmlndXJhdGlvbik7CisKK2V4dGVybiB2b2lkIHVzYl9sb2NrX2FsbF9kZXZpY2VzKHZvaWQpOworZXh0ZXJuIHZvaWQgdXNiX3VubG9ja19hbGxfZGV2aWNlcyh2b2lkKTsKKworZXh0ZXJuIHZvaWQgdXNiX2tpY2tfa2h1YmQoc3RydWN0IHVzYl9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCB1c2JfcmVzdW1lX3Jvb3RfaHViKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOworCisvKiBmb3IgbGFiZWxpbmcgZGlhZ25vc3RpY3MgKi8KK2V4dGVybiBjb25zdCBjaGFyICp1c2Jjb3JlX25hbWU7CisKKy8qIHVzYmZzIHN0dWZmICovCitleHRlcm4gc3RydWN0IHVzYl9kcml2ZXIgdXNiZnNfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiZnNfZGV2aWNlc19mb3BzOworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiZnNfZGV2aWNlX2ZpbGVfb3BlcmF0aW9uczsKK2V4dGVybiB2b2lkIHVzYmZzX2Nvbm5fZGlzY19ldmVudCh2b2lkKTsKKworc3RydWN0IGRldl9zdGF0ZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OyAgICAgIC8qIHN0YXRlIGxpc3QgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCXN0cnVjdCBmaWxlICpmaWxlOworCXNwaW5sb2NrX3QgbG9jazsgICAgICAgICAgICAvKiBwcm90ZWN0cyB0aGUgYXN5bmMgdXJiIGxpc3RzICovCisJc3RydWN0IGxpc3RfaGVhZCBhc3luY19wZW5kaW5nOworCXN0cnVjdCBsaXN0X2hlYWQgYXN5bmNfY29tcGxldGVkOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7ICAgICAvKiB3YWtlIHVwIGlmIGEgcmVxdWVzdCBjb21wbGV0ZWQgKi8KKwl1bnNpZ25lZCBpbnQgZGlzY3NpZ25yOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqZGlzY3Rhc2s7CisJdm9pZCBfX3VzZXIgKmRpc2Njb250ZXh0OworCXVuc2lnbmVkIGxvbmcgaWZjbGFpbWVkOworfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjI0ZjlmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKQEAgLTAsMCArMSwzODkgQEAKKyMKKyMgVVNCIEdhZGdldCBzdXBwb3J0IG9uIGEgc3lzdGVtIGludm9sdmVzCisjICAgIChhKSBhIHBlcmlwaGVyYWwgY29udHJvbGxlciwgYW5kCisjICAgIChiKSB0aGUgZ2FkZ2V0IGRyaXZlciB1c2luZyBpdC4KKyMKKyMgTk9URTogIEdhZGdldCBzdXBwb3J0ICoqIERPRVMgTk9UICoqIGRlcGVuZCBvbiBob3N0LXNpZGUgQ09ORklHX1VTQiAhIQorIworIyAgLSBIb3N0IHN5c3RlbXMgKGxpa2UgUENzKSBuZWVkIENPTkZJR19VU0IgKHdpdGggIkEiIGphY2tzKS4KKyMgIC0gUGVyaXBoZXJhbHMgKGxpa2UgUERBcykgbmVlZCBDT05GSUdfVVNCX0dBREdFVCAod2l0aCAiQiIgamFja3MpLgorIyAgLSBTb21lIHN5c3RlbXMgaGF2ZSBib3RoIGtpbmRzIG9mIG9mIGNvbnRyb2xsZXIuCisjCisjIFdpdGggaGVscCBmcm9tIGEgc3BlY2lhbCB0cmFuc2NlaXZlciBhbmQgYSAiTWluaS1BQiIgamFjaywgc3lzdGVtcyB3aXRoCisjIGJvdGgga2luZHMgb2YgY29udHJvbGxlciBjYW4gYWxzbyBzdXBwb3J0ICJVU0IgT24tdGhlLUdvIiAoQ09ORklHX1VTQl9PVEcpLgorIworbWVudSAiVVNCIEdhZGdldCBTdXBwb3J0IgorCitjb25maWcgVVNCX0dBREdFVAorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBVU0IgR2FkZ2V0cyIKKwloZWxwCisJICAgVVNCIGlzIGEgbWFzdGVyL3NsYXZlIHByb3RvY29sLCBvcmdhbml6ZWQgd2l0aCBvbmUgbWFzdGVyCisJICAgaG9zdCAoc3VjaCBhcyBhIFBDKSBjb250cm9sbGluZyB1cCB0byAxMjcgcGVyaXBoZXJhbCBkZXZpY2VzLgorCSAgIFRoZSBVU0IgaGFyZHdhcmUgaXMgYXN5bW1ldHJpYywgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHNldCB1cDoKKwkgICB5b3UgY2FuJ3QgY29ubmVjdCBhICJ0by10aGUtaG9zdCIgY29ubmVjdG9yIHRvIGEgcGVyaXBoZXJhbC4KKworCSAgIExpbnV4IGNhbiBydW4gaW4gdGhlIGhvc3QsIG9yIGluIHRoZSBwZXJpcGhlcmFsLiAgSW4gYm90aCBjYXNlcworCSAgIHlvdSBuZWVkIGEgbG93IGxldmVsIGJ1cyBjb250cm9sbGVyIGRyaXZlciwgYW5kIHNvbWUgc29mdHdhcmUKKwkgICB0YWxraW5nIHRvIGl0LiAgUGVyaXBoZXJhbCBjb250cm9sbGVycyBhcmUgb2Z0ZW4gZGlzY3JldGUgc2lsaWNvbiwKKwkgICBvciBhcmUgaW50ZWdyYXRlZCB3aXRoIHRoZSBDUFUgaW4gYSBtaWNyb2NvbnRyb2xsZXIuICBUaGUgbW9yZQorCSAgIGZhbWlsaWFyIGhvc3Qgc2lkZSBjb250cm9sbGVycyBoYXZlIG5hbWVzIGxpa2UgbGlrZSAiRUhDSSIsICJPSENJIiwKKwkgICBvciAiVUhDSSIsIGFuZCBhcmUgdXN1YWxseSBpbnRlZ3JhdGVkIGludG8gc291dGhicmlkZ2VzIG9uIFBDCisJICAgbW90aGVyYm9hcmRzLgorCisJICAgRW5hYmxlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaWYgeW91IHdhbnQgdG8gcnVuIExpbnV4IGluc2lkZQorCSAgIGEgVVNCIHBlcmlwaGVyYWwgZGV2aWNlLiAgQ29uZmlndXJlIG9uZSBoYXJkd2FyZSBkcml2ZXIgZm9yIHlvdXIKKwkgICBwZXJpcGhlcmFsL2RldmljZSBzaWRlIGJ1cyBjb250cm9sbGVyLCBhbmQgYSAiZ2FkZ2V0IGRyaXZlciIgZm9yCisJICAgeW91ciBwZXJpcGhlcmFsIHByb3RvY29sLiAgKElmIHlvdSB1c2UgbW9kdWxhciBnYWRnZXQgZHJpdmVycywKKwkgICB5b3UgbWF5IGNvbmZpZ3VyZSBtb3JlIHRoYW4gb25lLikKKworCSAgIElmIGluIGRvdWJ0LCBzYXkgIk4iIGFuZCBkb24ndCBlbmFibGUgdGhlc2UgZHJpdmVyczsgbW9zdCBwZW9wbGUKKwkgICBkb24ndCBoYXZlIHRoaXMga2luZCBvZiBoYXJkd2FyZSAoZXhjZXB0IG1heWJlIGluc2lkZSBMaW51eCBQREFzKS4KKworCSAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgPGh0dHA6Ly93d3cubGludXgtdXNiLm9yZy9nYWRnZXQ+IGFuZAorCSAgIHRoZSBrZXJuZWwgRG9jQm9vayBkb2N1bWVudGF0aW9uIGZvciB0aGlzIEFQSS4KKworY29uZmlnIFVTQl9HQURHRVRfREVCVUdfRklMRVMKKwlib29sZWFuICJEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZmlsZXMiCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUICYmIFBST0NfRlMKKwloZWxwCisJICAgU29tZSBvZiB0aGUgZHJpdmVycyBpbiB0aGUgImdhZGdldCIgZnJhbWV3b3JrIGNhbiBleHBvc2UKKwkgICBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gZmlsZXMgc3VjaCBhcyAvcHJvYy9kcml2ZXIvdWRjCisJICAgKGZvciBhIHBlcmlwaGVyYWwgY29udHJvbGxlcikuICBUaGUgaW5mb3JtYXRpb24gaW4gdGhlc2UKKwkgICBmaWxlcyBtYXkgaGVscCB3aGVuIHlvdSdyZSB0cm91Ymxlc2hvb3Rpbmcgb3IgYnJpbmdpbmcgdXAgYQorCSAgIGRyaXZlciBvbiBhIG5ldyBib2FyZC4gICBFbmFibGUgdGhlc2UgZmlsZXMgYnkgY2hvb3NpbmcgIlkiCisJICAgaGVyZS4gIElmIGluIGRvdWJ0LCBvciB0byBjb25zZXJ2ZSBrZXJuZWwgbWVtb3J5LCBzYXkgIk4iLgorCisjCisjIFVTQiBQZXJpcGhlcmFsIENvbnRyb2xsZXIgU3VwcG9ydAorIworY2hvaWNlCisJcHJvbXB0ICJVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyIgorCWRlcGVuZHMgb24gVVNCX0dBREdFVAorCWhlbHAKKwkgICBBIFVTQiBkZXZpY2UgdXNlcyBhIGNvbnRyb2xsZXIgdG8gdGFsayB0byBpdHMgaG9zdC4KKwkgICBTeXN0ZW1zIHNob3VsZCBoYXZlIG9ubHkgb25lIHN1Y2ggdXBzdHJlYW0gbGluay4KKwkgICBNYW55IGNvbnRyb2xsZXIgZHJpdmVycyBhcmUgcGxhdGZvcm0tc3BlY2lmaWM7IHRoZXNlCisJICAgb2Z0ZW4gbmVlZCBib2FyZC1zcGVjaWZpYyBob29rcy4KKworY29uZmlnIFVTQl9HQURHRVRfTkVUMjI4MAorCWJvb2xlYW4gIk5ldENoaXAgMjI4MCIKKwlkZXBlbmRzIG9uIFBDSQorCXNlbGVjdCBVU0JfR0FER0VUX0RVQUxTUEVFRAorCWhlbHAKKwkgICBOZXRDaGlwIDIyODAgaXMgYSBQQ0kgYmFzZWQgVVNCIHBlcmlwaGVyYWwgY29udHJvbGxlciB3aGljaAorCSAgIHN1cHBvcnRzIGJvdGggZnVsbCBhbmQgaGlnaCBzcGVlZCBVU0IgMi4wIGRhdGEgdHJhbnNmZXJzLiAgCisJICAgCisJICAgSXQgaGFzIHNpeCBjb25maWd1cmFibGUgZW5kcG9pbnRzLCBhcyB3ZWxsIGFzIGVuZHBvaW50IHplcm8KKwkgICAoZm9yIGNvbnRyb2wgdHJhbnNmZXJzKSBhbmQgc2V2ZXJhbCBlbmRwb2ludHMgd2l0aCBkZWRpY2F0ZWQKKwkgICBmdW5jdGlvbnMuCisKKwkgICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQorCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJuZXQyMjgwIiBhbmQgZm9yY2UgYWxsCisJICAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCisKK2NvbmZpZyBVU0JfTkVUMjI4MAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX05FVDIyODAKKwlkZWZhdWx0IFVTQl9HQURHRVQKKworY29uZmlnIFVTQl9HQURHRVRfUFhBMlhYCisJYm9vbGVhbiAiUFhBIDI1eCBvciBJWFAgNHh4IgorCWRlcGVuZHMgb24gKEFSQ0hfUFhBICYmIFBYQTI1eCkgfHwgQVJDSF9JWFA0WFgKKwloZWxwCisJICAgSW50ZWwncyBQWEEgMjV4IHNlcmllcyBYU2NhbGUgQVJNLTVURSBwcm9jZXNzb3JzIGluY2x1ZGUKKwkgICBhbiBpbnRlZ3JhdGVkIGZ1bGwgc3BlZWQgVVNCIDEuMSBkZXZpY2UgY29udHJvbGxlci4gIFRoZQorCSAgIGNvbnRyb2xsZXIgaW4gdGhlIElYUCA0eHggc2VyaWVzIGlzIHJlZ2lzdGVyLWNvbXBhdGlibGUuCisKKwkgICBJdCBoYXMgZmlmdGVlbiBmaXhlZC1mdW5jdGlvbiBlbmRwb2ludHMsIGFzIHdlbGwgYXMgZW5kcG9pbnQKKwkgICB6ZXJvIChmb3IgY29udHJvbCB0cmFuc2ZlcnMpLgorCisJICAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKKwkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAicHhhMnh4X3VkYyIgYW5kIGZvcmNlIGFsbAorCSAgIGdhZGdldCBkcml2ZXJzIHRvIGFsc28gYmUgZHluYW1pY2FsbHkgbGlua2VkLgorCitjb25maWcgVVNCX1BYQTJYWAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX1BYQTJYWAorCWRlZmF1bHQgVVNCX0dBREdFVAorCisjIGlmIHRoZXJlJ3Mgb25seSBvbmUgZ2FkZ2V0IGRyaXZlciwgdXNpbmcgb25seSB0d28gYnVsayBlbmRwb2ludHMsCisjIGRvbid0IHdhc3RlIG1lbW9yeSBmb3IgdGhlIG90aGVyIGVuZHBvaW50cworY29uZmlnIFVTQl9QWEEyWFhfU01BTEwKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVRfUFhBMlhYCisJYm9vbAorCWRlZmF1bHQgbiBpZiBVU0JfRVRIX1JORElTCisJZGVmYXVsdCB5IGlmIFVTQl9aRVJPCisJZGVmYXVsdCB5IGlmIFVTQl9FVEgKKwlkZWZhdWx0IHkgaWYgVVNCX0dfU0VSSUFMCisKK2NvbmZpZyBVU0JfR0FER0VUX0dPS1UKKwlib29sZWFuICJUb3NoaWJhIFRDODZDMDAxICdHb2t1LVMnIgorCWRlcGVuZHMgb24gUENJCisJaGVscAorCSAgIFRoZSBUb3NoaWJhIFRDODZDMDAxIGlzIGEgUENJIGRldmljZSB3aGljaCBpbmNsdWRlcyBjb250cm9sbGVycworCSAgIGZvciBmdWxsIHNwZWVkIFVTQiBkZXZpY2VzLCBJREUsIEkyQywgU0lPLCBwbHVzIGEgVVNCIGhvc3QgKE9IQ0kpLgorCSAgIAorCSAgIFRoZSBkZXZpY2UgY29udHJvbGxlciBoYXMgdGhyZWUgY29uZmlndXJhYmxlIChidWxrIG9yIGludGVycnVwdCkKKwkgICBlbmRwb2ludHMsIHBsdXMgZW5kcG9pbnQgemVybyAoZm9yIGNvbnRyb2wgdHJhbnNmZXJzKS4KKworCSAgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCisJICAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImdva3VfdWRjIiBhbmQgdG8gZm9yY2UgYWxsCisJICAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCisKK2NvbmZpZyBVU0JfR09LVQorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX0dPS1UKKwlkZWZhdWx0IFVTQl9HQURHRVQKKworCitjb25maWcgVVNCX0dBREdFVF9MSDdBNDBYCisJYm9vbGVhbiAiTEg3QTQwWCIKKwlkZXBlbmRzIG9uIEFSQ0hfTEg3QTQwWAorCWhlbHAKKyAgICBUaGlzIGRyaXZlciBwcm92aWRlcyBVU0IgRGV2aWNlIENvbnRyb2xsZXIgZHJpdmVyIGZvciBMSDdBNDB4CisKK2NvbmZpZyBVU0JfTEg3QTQwWAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX0xIN0E0MFgKKwlkZWZhdWx0IFVTQl9HQURHRVQKKworCitjb25maWcgVVNCX0dBREdFVF9PTUFQCisJYm9vbGVhbiAiT01BUCBVU0IgRGV2aWNlIENvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAKKwlzZWxlY3QgSVNQMTMwMV9PTUFQIGlmIE1BQ0hfT01BUF9IMiB8fCBNQUNIX09NQVBfSDMKKwloZWxwCisJICAgTWFueSBUZXhhcyBJbnN0cnVtZW50cyBPTUFQIHByb2Nlc3NvcnMgaGF2ZSBmbGV4aWJsZSBmdWxsCisJICAgc3BlZWQgVVNCIGRldmljZSBjb250cm9sbGVycywgd2l0aCBzdXBwb3J0IGZvciB1cCB0byAzMAorCSAgIGVuZHBvaW50cyAocGx1cyBlbmRwb2ludCB6ZXJvKS4gIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZQorCSAgIGNvbnRyb2xsZXIgaW4gdGhlIE9NQVAgMTYxMSwgYW5kIHNob3VsZCB3b3JrIHdpdGggY29udHJvbGxlcnMKKwkgICBpbiBvdGhlciBPTUFQIHByb2Nlc3NvcnMgdG9vLCBnaXZlbiBtaW5vciB0d2Vha3MuCisKKwkgICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQorCSAgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJvbWFwX3VkYyIgYW5kIGZvcmNlIGFsbAorCSAgIGdhZGdldCBkcml2ZXJzIHRvIGFsc28gYmUgZHluYW1pY2FsbHkgbGlua2VkLgorCitjb25maWcgVVNCX09NQVAKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gVVNCX0dBREdFVF9PTUFQCisJZGVmYXVsdCBVU0JfR0FER0VUCisKK2NvbmZpZyBVU0JfT1RHCisJYm9vbGVhbiAiT1RHIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUX09NQVAgJiYgQVJDSF9PTUFQX09URyAmJiBVU0JfT0hDSV9IQ0QKKwloZWxwCisJICAgVGhlIG1vc3Qgbm90YWJsZSBmZWF0dXJlIG9mIFVTQiBPVEcgaXMgc3VwcG9ydCBmb3IgYQorCSAgICJEdWFsLVJvbGUiIGRldmljZSwgd2hpY2ggY2FuIGFjdCBhcyBlaXRoZXIgYSBkZXZpY2UKKwkgICBvciBhIGhvc3QuICBUaGUgaW5pdGlhbCByb2xlIGNob2ljZSBjYW4gYmUgY2hhbmdlZAorCSAgIGxhdGVyLCB3aGVuIHR3byBkdWFsLXJvbGUgZGV2aWNlcyB0YWxrIHRvIGVhY2ggb3RoZXIuCisKKwkgICBTZWxlY3QgdGhpcyBvbmx5IGlmIHlvdXIgT01BUCBib2FyZCBoYXMgYSBNaW5pLUFCIGNvbm5lY3Rvci4KKworCitjb25maWcgVVNCX0dBREdFVF9EVU1NWV9IQ0QKKwlib29sZWFuICJEdW1teSBIQ0QgKERFVkVMT1BNRU5UKSIKKwlkZXBlbmRzIG9uIFVTQiAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgVVNCX0dBREdFVF9EVUFMU1BFRUQKKwloZWxwCisJICBUaGlzIGhvc3QgY29udHJvbGxlciBkcml2ZXIgZW11bGF0ZXMgVVNCLCBsb29waW5nIGFsbCBkYXRhIHRyYW5zZmVyCisJICByZXF1ZXN0cyBiYWNrIHRvIGEgVVNCICJnYWRnZXQgZHJpdmVyIiBpbiB0aGUgc2FtZSBob3N0LiAgVGhlIGhvc3QKKwkgIHNpZGUgaXMgdGhlIG1hc3RlcjsgdGhlIGdhZGdldCBzaWRlIGlzIHRoZSBzbGF2ZS4gIEdhZGdldCBkcml2ZXJzCisJICBjYW4gYmUgaGlnaCwgZnVsbCwgb3IgbG93IHNwZWVkOyBhbmQgdGhleSBoYXZlIGFjY2VzcyB0byBlbmRwb2ludHMKKwkgIGxpa2UgdGhvc2UgZnJvbSBORVQyMjgwLCBQWEEyeHgsIG9yIFNBMTEwMCBoYXJkd2FyZS4KKwkgIAorCSAgVGhpcyBtYXkgaGVscCBpbiBzb21lIHN0YWdlcyBvZiBjcmVhdGluZyBhIGRyaXZlciB0byBlbWJlZCBpbiBhCisJICBMaW51eCBkZXZpY2UsIHNpbmNlIGl0IGxldHMgeW91IGRlYnVnIHNldmVyYWwgcGFydHMgb2YgdGhlIGdhZGdldAorCSAgZHJpdmVyIHdpdGhvdXQgaXRzIGhhcmR3YXJlIG9yIGRyaXZlcnMgYmVpbmcgaW52b2x2ZWQuCisJICAKKwkgIFNpbmNlIHN1Y2ggYSBnYWRnZXQgc2lkZSBkcml2ZXIgbmVlZHMgdG8gaW50ZXJvcGVyYXRlIHdpdGggYSBob3N0CisJICBzaWRlIExpbnV4LVVTQiBkZXZpY2UgZHJpdmVyLCB0aGlzIG1heSBoZWxwIHRvIGRlYnVnIGJvdGggc2lkZXMKKwkgIG9mIGEgVVNCIHByb3RvY29sIHN0YWNrLgorCisJICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQorCSAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImR1bW15X2hjZCIgYW5kIGZvcmNlIGFsbAorCSAgZ2FkZ2V0IGRyaXZlcnMgdG8gYWxzbyBiZSBkeW5hbWljYWxseSBsaW5rZWQuCisKK2NvbmZpZyBVU0JfRFVNTVlfSENECisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVRfRFVNTVlfSENECisJZGVmYXVsdCBVU0JfR0FER0VUCisKKyMgTk9URTogIFBsZWFzZSBrZWVwIGR1bW15X2hjZCBMQVNUIHNvIHRoYXQgInJlYWwgaGFyZHdhcmUiIGFwcGVhcnMKKyMgZmlyc3QgYW5kIHdpbGwgYmUgc2VsZWN0ZWQgYnkgZGVmYXVsdC4KKworZW5kY2hvaWNlCisKK2NvbmZpZyBVU0JfR0FER0VUX0RVQUxTUEVFRAorCWJvb2wKKwlkZXBlbmRzIG9uIFVTQl9HQURHRVQKKwlkZWZhdWx0IG4KKwloZWxwCisJICBNZWFucyB0aGF0IGdhZGdldCBkcml2ZXJzIHNob3VsZCBpbmNsdWRlIGV4dHJhIGRlc2NyaXB0b3JzCisJICBhbmQgY29kZSB0byBoYW5kbGUgZHVhbC1zcGVlZCBjb250cm9sbGVycy4KKworIworIyBVU0IgR2FkZ2V0IERyaXZlcnMKKyMKK2Nob2ljZQorCXRyaXN0YXRlICJVU0IgR2FkZ2V0IERyaXZlcnMiCisJZGVwZW5kcyBvbiBVU0JfR0FER0VUCisJZGVmYXVsdCBVU0JfRVRICisJaGVscAorCSAgQSBMaW51eCAiR2FkZ2V0IERyaXZlciIgdGFsa3MgdG8gdGhlIFVTQiBQZXJpcGhlcmFsIENvbnRyb2xsZXIKKwkgIGRyaXZlciB0aHJvdWdoIHRoZSBhYnN0cmFjdCAiZ2FkZ2V0IiBBUEkuICBTb21lIG90aGVyIG9wZXJhdGluZworCSAgc3lzdGVtcyBjYWxsIHRoZXNlICJjbGllbnQiIGRyaXZlcnMsIG9mIHdoaWNoICJjbGFzcyBkcml2ZXJzIgorCSAgYXJlIGEgc3Vic2V0IChpbXBsZW1lbnRpbmcgYSBVU0IgZGV2aWNlIGNsYXNzIHNwZWNpZmljYXRpb24pLgorCSAgQSBnYWRnZXQgZHJpdmVyIGltcGxlbWVudHMgb25lIG9yIG1vcmUgVVNCIGZ1bmN0aW9ucyB1c2luZworCSAgdGhlIHBlcmlwaGVyYWwgaGFyZHdhcmUuCisKKwkgIEdhZGdldCBkcml2ZXJzIGFyZSBoYXJkd2FyZS1uZXV0cmFsLCBvciAicGxhdGZvcm0gaW5kZXBlbmRlbnQiLAorCSAgZXhjZXB0IHRoYXQgdGhleSBzb21ldGltZXMgbXVzdCB1bmRlcnN0YW5kIHF1aXJrcyBvciBsaW1pdGF0aW9ucworCSAgb2YgdGhlIHBhcnRpY3VsYXIgY29udHJvbGxlcnMgdGhleSB3b3JrIHdpdGguICBGb3IgZXhhbXBsZSwgd2hlbgorCSAgYSBjb250cm9sbGVyIGRvZXNuJ3Qgc3VwcG9ydCBhbHRlcm5hdGUgY29uZmlndXJhdGlvbnMgb3IgcHJvdmlkZQorCSAgZW5vdWdoIG9mIHRoZSByaWdodCB0eXBlcyBvZiBlbmRwb2ludHMsIHRoZSBnYWRnZXQgZHJpdmVyIG1pZ2h0CisJICBub3QgYmUgYWJsZSB3b3JrIHdpdGggdGhhdCBjb250cm9sbGVyLCBvciBtaWdodCBuZWVkIHRvIGltcGxlbWVudAorCSAgYSBsZXNzIGNvbW1vbiB2YXJpYW50IG9mIGEgZGV2aWNlIGNsYXNzIHByb3RvY29sLgorCisjIHRoaXMgZmlyc3Qgc2V0IG9mIGRyaXZlcnMgYWxsIGRlcGVuZCBvbiBidWxrLWNhcGFibGUgaGFyZHdhcmUuCisKK2NvbmZpZyBVU0JfWkVSTworCXRyaXN0YXRlICJHYWRnZXQgWmVybyAoREVWRUxPUE1FTlQpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJaGVscAorCSAgR2FkZ2V0IFplcm8gaXMgYSB0d28tY29uZmlndXJhdGlvbiBkZXZpY2UuICBJdCBlaXRoZXIgc2lua3MgYW5kCisJICBzb3VyY2VzIGJ1bGsgZGF0YTsgb3IgaXQgbG9vcHMgYmFjayBhIGNvbmZpZ3VyYWJsZSBudW1iZXIgb2YKKwkgIHRyYW5zZmVycy4gIEl0IGFsc28gaW1wbGVtZW50cyBjb250cm9sIHJlcXVlc3RzLCBmb3IgImNoYXB0ZXIgOSIKKwkgIGNvbmZvcm1hbmNlLiAgVGhlIGRyaXZlciBuZWVkcyBvbmx5IHR3byBidWxrLWNhcGFibGUgZW5kcG9pbnRzLCBzbworCSAgaXQgY2FuIHdvcmsgb24gdG9wIG9mIG1vc3QgZGV2aWNlLXNpZGUgdXNiIGNvbnRyb2xsZXJzLiAgSXQncworCSAgdXNlZnVsIGZvciB0ZXN0aW5nLCBhbmQgaXMgYWxzbyBhIHdvcmtpbmcgZXhhbXBsZSBzaG93aW5nIGhvdworCSAgVVNCICJnYWRnZXQgZHJpdmVycyIgY2FuIGJlIHdyaXR0ZW4uCisKKwkgIE1ha2UgdGhpcyBiZSB0aGUgZmlyc3QgZHJpdmVyIHlvdSB0cnkgdXNpbmcgb24gdG9wIG9mIGFueSBuZXcKKwkgIFVTQiBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgZHJpdmVyLiAgVGhlbiB5b3UgY2FuIHVzZSBob3N0LXNpZGUKKwkgIHRlc3Qgc29mdHdhcmUsIGxpa2UgdGhlICJ1c2J0ZXN0IiBkcml2ZXIsIHRvIHB1dCB5b3VyIGhhcmR3YXJlCisJICBhbmQgaXRzIGRyaXZlciB0aHJvdWdoIGEgYmFzaWMgc2V0IG9mIGZ1bmN0aW9uYWwgdGVzdHMuCisKKwkgIEdhZGdldCBaZXJvIGFsc28gd29ya3Mgd2l0aCB0aGUgaG9zdC1zaWRlICJ1c2Itc2tlbGV0b24iIGRyaXZlciwKKwkgIGFuZCB3aXRoIG1hbnkga2luZHMgb2YgaG9zdC1zaWRlIHRlc3Qgc29mdHdhcmUuICBZb3UgbWF5IG5lZWQKKwkgIHRvIHR3ZWFrIHByb2R1Y3QgYW5kIHZlbmRvciBJRHMgYmVmb3JlIGhvc3Qgc29mdHdhcmUga25vd3MgYWJvdXQKKwkgIHRoaXMgZGV2aWNlLCBhbmQgYXJyYW5nZSB0byBzZWxlY3QgYW4gYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbi4KKworCSAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKKwkgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJnX3plcm8iLgorCitjb25maWcgVVNCX1pFUk9fSE5QVEVTVAorCWJvb2xlYW4gIkhOUCBUZXN0IERldmljZSIKKwlkZXBlbmRzIG9uIFVTQl9aRVJPICYmIFVTQl9PVEcKKwloZWxwCisJICBZb3UgY2FuIGNvbmZpZ3VyZSB0aGlzIGRldmljZSB0byBlbnVtZXJhdGUgdXNpbmcgdGhlIGRldmljZQorCSAgaWRlbnRpZmllcnMgb2YgdGhlIFVTQi1PVEcgdGVzdCBkZXZpY2UuICBUaGF0IG1lYW5zIHRoYXQgd2hlbgorCSAgdGhpcyBnYWRnZXQgY29ubmVjdHMgdG8gYW5vdGhlciBPVEcgZGV2aWNlLCB3aXRoIHRoaXMgb25lIHVzaW5nCisJICB0aGUgIkItUGVyaXBoZXJhbCIgcm9sZSwgdGhhdCBkZXZpY2Ugd2lsbCB1c2UgSE5QIHRvIGxldCB0aGlzCisJICBvbmUgc2VydmUgYXMgdGhlIFVTQiBob3N0IGluc3RlYWQgKGluIHRoZSAiQi1Ib3N0IiByb2xlKS4KKworY29uZmlnIFVTQl9FVEgKKwl0cmlzdGF0ZSAiRXRoZXJuZXQgR2FkZ2V0ICh3aXRoIENEQyBFdGhlcm5ldCBzdXBwb3J0KSIKKwlkZXBlbmRzIG9uIE5FVAorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIGltcGxlbWVudHMgRXRoZXJuZXQgc3R5bGUgY29tbXVuaWNhdGlvbiwgaW4gZWl0aGVyCisJICBvZiB0d28gd2F5czoKKwkgIAorCSAgIC0gVGhlICJDb21tdW5pY2F0aW9uIERldmljZSBDbGFzcyIgKENEQykgRXRoZXJuZXQgQ29udHJvbCBNb2RlbC4KKwkgICAgIFRoYXQgcHJvdG9jb2wgaXMgb2Z0ZW4gYXZvaWRlZCB3aXRoIHB1cmUgRXRoZXJuZXQgYWRhcHRlcnMsIGluCisJICAgICBmYXZvciBvZiBzaW1wbGVyIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSwgYnV0IGlzIHdpZGVseQorCSAgICAgc3VwcG9ydGVkIGJ5IGZpcm13YXJlIGZvciBzbWFydCBuZXR3b3JrIGRldmljZXMuCisKKwkgICAtIE9uIGhhcmR3YXJlIGNhbid0IGltcGxlbWVudCB0aGF0IHByb3RvY29sLCBhIHNpbXBsZSBDREMgc3Vic2V0CisJICAgICBpcyB1c2VkLCBwbGFjaW5nIGZld2VyIGRlbWFuZHMgb24gVVNCLgorCisJICBSTkRJUyBzdXBwb3J0IGlzIGEgdGhpcmQgb3B0aW9uLCBtb3JlIGRlbWFuZGluZyB0aGFuIHRoYXQgc3Vic2V0LgorCisJICBXaXRoaW4gdGhlIFVTQiBkZXZpY2UsIHRoaXMgZ2FkZ2V0IGRyaXZlciBleHBvc2VzIGEgbmV0d29yayBkZXZpY2UKKwkgICJ1c2JYIiwgd2hlcmUgWCBkZXBlbmRzIG9uIHdoYXQgb3RoZXIgbmV0d29ya2luZyBkZXZpY2VzIHlvdSBoYXZlLgorCSAgVHJlYXQgaXQgbGlrZSBhIHR3by1ub2RlIEV0aGVybmV0IGxpbms6ICBob3N0LCBhbmQgZ2FkZ2V0LgorCisJICBUaGUgTGludXgtVVNCIGhvc3Qtc2lkZSAidXNibmV0IiBkcml2ZXIgaW50ZXJvcGVyYXRlcyB3aXRoIHRoaXMKKwkgIGRyaXZlciwgc28gdGhhdCBkZWVwIEkvTyBxdWV1ZXMgY2FuIGJlIHN1cHBvcnRlZC4gIE9uIDIuNCBrZXJuZWxzLAorCSAgdXNlICJDRENFdGhlciIgaW5zdGVhZCwgaWYgeW91J3JlIHVzaW5nIHRoZSBDREMgb3B0aW9uLiBUaGF0IENEQworCSAgbW9kZSBzaG91bGQgYWxzbyBpbnRlcm9wZXJhdGUgd2l0aCBzdGFuZGFyZCBDREMgRXRoZXJuZXQgY2xhc3MKKwkgIGRyaXZlcnMgb24gb3RoZXIgaG9zdCBvcGVyYXRpbmcgc3lzdGVtcy4KKworCSAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKKwkgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJnX2V0aGVyIi4KKworY29uZmlnIFVTQl9FVEhfUk5ESVMKKwlib29sICJSTkRJUyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCX0VUSCAmJiBFWFBFUklNRU5UQUwKKwlkZWZhdWx0IHkKKwloZWxwCisJICAgTWljcm9zb2Z0IFdpbmRvd3MgWFAgYnVuZGxlcyB0aGUgIlJlbW90ZSBORElTIiAoUk5ESVMpIHByb3RvY29sLAorCSAgIGFuZCBNaWNyb3NvZnQgcHJvdmlkZXMgcmVkaXN0cmlidXRhYmxlIGJpbmFyeSBSTkRJUyBkcml2ZXJzIGZvcgorCSAgIG9sZGVyIHZlcnNpb25zIG9mIFdpbmRvd3MuCisKKwkgICBJZiB5b3Ugc2F5ICJ5IiBoZXJlLCB0aGUgRXRoZXJuZXQgZ2FkZ2V0IGRyaXZlciB3aWxsIHRyeSB0byBwcm92aWRlCisJICAgYSBzZWNvbmQgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIHN1cHBvcnRpbmcgUk5ESVMgdG8gdGFsayB0byBzdWNoCisJICAgTWljcm9zb2Z0IFVTQiBob3N0cy4KKwkgICAKKwkgICBUbyBtYWtlIE1TLVdpbmRvd3Mgd29yayB3aXRoIHRoaXMsIHVzZSBEb2N1bWVudGF0aW9uL3VzYi9saW51eC5pbmYKKwkgICBhcyB0aGUgImRyaXZlciBpbmZvIGZpbGUiLiAgRm9yIHZlcnNpb25zIG9mIE1TLVdpbmRvd3Mgb2xkZXIgdGhhbgorCSAgIFhQLCB5b3UnbGwgbmVlZCB0byBkb3dubG9hZCBkcml2ZXJzIGZyb20gTWljcm9zb2Z0J3Mgd2Vic2l0ZTsgYSBVUkwKKwkgICBpcyBnaXZlbiBpbiBjb21tZW50cyBmb3VuZCBpbiB0aGF0IGluZm8gZmlsZS4KKworY29uZmlnIFVTQl9HQURHRVRGUworCXRyaXN0YXRlICJHYWRnZXQgRmlsZXN5c3RlbSAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGEgZmlsZXN5c3RlbSBiYXNlZCBBUEkgdGhhdCBsZXRzIHVzZXIgbW9kZQorCSAgcHJvZ3JhbXMgaW1wbGVtZW50IGEgc2luZ2xlLWNvbmZpZ3VyYXRpb24gVVNCIGRldmljZSwgaW5jbHVkaW5nCisJICBlbmRwb2ludCBJL08gYW5kIGNvbnRyb2wgcmVxdWVzdHMgdGhhdCBkb24ndCByZWxhdGUgdG8gZW51bWVyYXRpb24uCisJICBBbGwgZW5kcG9pbnRzLCB0cmFuc2ZlciBzcGVlZHMsIGFuZCB0cmFuc2ZlciB0eXBlcyBzdXBwb3J0ZWQgYnkKKwkgIHRoZSBoYXJkd2FyZSBhcmUgYXZhaWxhYmxlLCB0aHJvdWdoIHJlYWQoKSBhbmQgd3JpdGUoKSBjYWxscy4KKworCSAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKKwkgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJnYWRnZXRmcyIuCisKK2NvbmZpZyBVU0JfRklMRV9TVE9SQUdFCisJdHJpc3RhdGUgIkZpbGUtYmFja2VkIFN0b3JhZ2UgR2FkZ2V0IgorCWhlbHAKKwkgIFRoZSBGaWxlLWJhY2tlZCBTdG9yYWdlIEdhZGdldCBhY3RzIGFzIGEgVVNCIE1hc3MgU3RvcmFnZQorCSAgZGlzayBkcml2ZS4gIEFzIGl0cyBzdG9yYWdlIHJlcG9zaXRvcnkgaXQgY2FuIHVzZSBhIHJlZ3VsYXIKKwkgIGZpbGUgb3IgYSBibG9jayBkZXZpY2UgKGluIG11Y2ggdGhlIHNhbWUgd2F5IGFzIHRoZSAibG9vcCIKKwkgIGRldmljZSBkcml2ZXIpLCBzcGVjaWZpZWQgYXMgYSBtb2R1bGUgcGFyYW1ldGVyLgorCisJICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQorCSAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImdfZmlsZV9zdG9yYWdlIi4KKworY29uZmlnIFVTQl9GSUxFX1NUT1JBR0VfVEVTVAorCWJvb2wgIkZpbGUtYmFja2VkIFN0b3JhZ2UgR2FkZ2V0IHRlc3RpbmcgdmVyc2lvbiIKKwlkZXBlbmRzIG9uIFVTQl9GSUxFX1NUT1JBR0UKKwlkZWZhdWx0IG4KKwloZWxwCisJICBTYXkgInkiIHRvIGdlbmVyYXRlIHRoZSBsYXJnZXIgdGVzdGluZyB2ZXJzaW9uIG9mIHRoZQorCSAgRmlsZS1iYWNrZWQgU3RvcmFnZSBHYWRnZXQsIHVzZWZ1bCBmb3IgcHJvYmluZyB0aGUKKwkgIGJlaGF2aW9yIG9mIFVTQiBNYXNzIFN0b3JhZ2UgaG9zdHMuICBOb3QgbmVlZGVkIGZvcgorCSAgbm9ybWFsIG9wZXJhdGlvbi4KKworY29uZmlnIFVTQl9HX1NFUklBTAorCXRyaXN0YXRlICJTZXJpYWwgR2FkZ2V0ICh3aXRoIENEQyBBQ00gc3VwcG9ydCkiCisJaGVscAorCSAgVGhlIFNlcmlhbCBHYWRnZXQgdGFsa3MgdG8gdGhlIExpbnV4LVVTQiBnZW5lcmljIHNlcmlhbCBkcml2ZXIuCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBhIENEQy1BQ00gbW9kdWxlIG9wdGlvbiwgd2hpY2ggY2FuIGJlIHVzZWQKKwkgIHRvIGludGVyb3BlcmF0ZSB3aXRoIE1TLVdpbmRvd3MgaG9zdHMgb3Igd2l0aCB0aGUgTGludXgtVVNCCisJICAiY2RjLWFjbSIgZHJpdmVyLgorCisJICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQorCSAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImdfc2VyaWFsIi4KKworCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBEb2N1bWVudGF0aW9uL3VzYi9nYWRnZXRfc2VyaWFsLnR4dAorCSAgd2hpY2ggaW5jbHVkZXMgaW5zdHJ1Y3Rpb25zIGFuZCBhICJkcml2ZXIgaW5mbyBmaWxlIiBuZWVkZWQgdG8KKwkgIG1ha2UgTVMtV2luZG93cyB3b3JrIHdpdGggdGhpcyBkcml2ZXIuCisKKworIyBwdXQgZHJpdmVycyB0aGF0IG5lZWQgaXNvY2hyb25vdXMgdHJhbnNmZXIgc3VwcG9ydCAoZm9yIGF1ZGlvCisjIG9yIHZpZGVvIGNsYXNzIGdhZGdldCBkcml2ZXJzKSwgb3Igc3BlY2lmaWMgaGFyZHdhcmUsIGhlcmUuCisKKyMgLSBub25lIHlldAorCitlbmRjaG9pY2UKKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L01ha2VmaWxlIGIvZHJpdmVycy91c2IvZ2FkZ2V0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZmQwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUKQEAgLTAsMCArMSwzMCBAQAorIworIyBVU0IgcGVyaXBoZXJhbCBjb250cm9sbGVyIGRyaXZlcnMKKyMKK29iai0kKENPTkZJR19VU0JfRFVNTVlfSENEKQkrPSBkdW1teV9oY2Qubworb2JqLSQoQ09ORklHX1VTQl9ORVQyMjgwKQkrPSBuZXQyMjgwLm8KK29iai0kKENPTkZJR19VU0JfUFhBMlhYKQkrPSBweGEyeHhfdWRjLm8KK29iai0kKENPTkZJR19VU0JfR09LVSkJCSs9IGdva3VfdWRjLm8KK29iai0kKENPTkZJR19VU0JfT01BUCkJCSs9IG9tYXBfdWRjLm8KK29iai0kKENPTkZJR19VU0JfTEg3QTQwWCkJKz0gbGg3YTQweF91ZGMubworCisjCisjIFVTQiBnYWRnZXQgZHJpdmVycworIworZ196ZXJvLW9ianMJCQk6PSB6ZXJvLm8gdXNic3RyaW5nLm8gY29uZmlnLm8gZXBhdXRvY29uZi5vCitnX2V0aGVyLW9ianMJCQk6PSBldGhlci5vIHVzYnN0cmluZy5vIGNvbmZpZy5vIGVwYXV0b2NvbmYubworZ19zZXJpYWwtb2JqcwkJCTo9IHNlcmlhbC5vIHVzYnN0cmluZy5vIGNvbmZpZy5vIGVwYXV0b2NvbmYubworZ2FkZ2V0ZnMtb2JqcwkJCTo9IGlub2RlLm8KK2dfZmlsZV9zdG9yYWdlLW9ianMJCTo9IGZpbGVfc3RvcmFnZS5vIHVzYnN0cmluZy5vIGNvbmZpZy5vIFwKKwkJCQkJZXBhdXRvY29uZi5vCisKK2lmZXEgKCQoQ09ORklHX1VTQl9FVEhfUk5ESVMpLHkpCisJZ19ldGhlci1vYmpzCQkrPSBybmRpcy5vCitlbmRpZgorIAorb2JqLSQoQ09ORklHX1VTQl9aRVJPKQkJKz0gZ196ZXJvLm8KK29iai0kKENPTkZJR19VU0JfRVRIKQkJKz0gZ19ldGhlci5vCitvYmotJChDT05GSUdfVVNCX0dBREdFVEZTKQkrPSBnYWRnZXRmcy5vCitvYmotJChDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSkJKz0gZ19maWxlX3N0b3JhZ2Uubworb2JqLSQoQ09ORklHX1VTQl9HX1NFUklBTCkJKz0gZ19zZXJpYWwubworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY29uZmlnLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNiNDg2NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jb25maWcuYwpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIHVzYi9nYWRnZXQvY29uZmlnLmMgLS0gc2ltcGxpZnkgYnVpbGRpbmcgY29uZmlnIGRlc2NyaXB0b3JzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIERhdmlkIEJyb3duZWxsCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYl9jaDkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CisKKworLyoqCisgKiB1c2JfZGVzY3JpcHRvcl9maWxsYnVmIC0gZmlsbCBidWZmZXIgd2l0aCBkZXNjcmlwdG9ycworICogQGJ1ZjogQnVmZmVyIHRvIGJlIGZpbGxlZAorICogQGJ1ZmxlbjogU2l6ZSBvZiBidWYKKyAqIEBzcmM6IEFycmF5IG9mIGRlc2NyaXB0b3IgcG9pbnRlcnMsIHRlcm1pbmF0ZWQgYnkgbnVsbCBwb2ludGVyLgorICoKKyAqIENvcGllcyBkZXNjcmlwdG9ycyBpbnRvIHRoZSBidWZmZXIsIHJldHVybmluZyB0aGUgbGVuZ3RoIG9yIGEKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhleSBjYW4ndCBhbGwgYmUgY29waWVkLiAgVXNlZnVsIHdoZW4KKyAqIGFzc2VtYmxpbmcgZGVzY3JpcHRvcnMgZm9yIGFuIGFzc29jaWF0ZWQgc2V0IG9mIGludGVyZmFjZXMgdXNlZAorICogYXMgcGFydCBvZiBjb25maWd1cmluZyBhIGNvbXBvc2l0ZSBkZXZpY2U7IG9yIGluIG90aGVyIGNhc2VzIHdoZXJlCisgKiBzZXRzIG9mIGRlc2NyaXB0b3JzIG5lZWQgdG8gYmUgbWFyc2hhbGVkLgorICovCitpbnQKK3VzYl9kZXNjcmlwdG9yX2ZpbGxidWYodm9pZCAqYnVmLCB1bnNpZ25lZCBidWZsZW4sCisJCWNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKipzcmMpCit7CisJdTgJKmRlc3QgPSBidWY7CisKKwlpZiAoIXNyYykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBmaWxsIGJ1ZmZlciBmcm9tIHNyY1tdIHVudGlsIG51bGwgZGVzY3JpcHRvciBwdHIgKi8KKwlmb3IgKDsgMCAhPSAqc3JjOyBzcmMrKykgeworCQl1bnNpZ25lZAkJbGVuID0gKCpzcmMpLT5iTGVuZ3RoOworCisJCWlmIChsZW4gPiBidWZsZW4pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbWVtY3B5KGRlc3QsICpzcmMsIGxlbik7CisJCWJ1ZmxlbiAtPSBsZW47CisJCWRlc3QgKz0gbGVuOworCX0KKwlyZXR1cm4gZGVzdCAtICh1OCAqKWJ1ZjsKK30KKworCisvKioKKyAqIHVzYl9nYWRnZXRfY29uZmlnX2J1ZiAtIGJ1aWx0cyBhIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvcgorICogQGNvbmZpZzogSGVhZGVyIGZvciB0aGUgZGVzY3JpcHRvciwgaW5jbHVkaW5nIGNoYXJhY3RlcmlzdGljcyBzdWNoCisgKglhcyBwb3dlciByZXF1aXJlbWVudHMgYW5kIG51bWJlciBvZiBpbnRlcmZhY2VzLgorICogQGRlc2M6IE51bGwtdGVybWluYXRlZCB2ZWN0b3Igb2YgcG9pbnRlcnMgdG8gdGhlIGRlc2NyaXB0b3JzIChpbnRlcmZhY2UsCisgKgllbmRwb2ludCwgZXRjKSBkZWZpbmluZyBhbGwgZnVuY3Rpb25zIGluIHRoaXMgZGV2aWNlIGNvbmZpZ3VyYXRpb24uCisgKiBAYnVmOiBCdWZmZXIgZm9yIHRoZSByZXN1bHRpbmcgY29uZmlndXJhdGlvbiBkZXNjcmlwdG9yLgorICogQGxlbmd0aDogTGVuZ3RoIG9mIGJ1ZmZlci4gIElmIHRoaXMgaXMgbm90IGJpZyBlbm91Z2ggdG8gaG9sZCB0aGUKKyAqCWVudGlyZSBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IsIGFuIGVycm9yIGNvZGUgd2lsbCBiZSByZXR1cm5lZC4KKyAqCisgKiBUaGlzIGNvcGllcyBkZXNjcmlwdG9ycyBpbnRvIHRoZSByZXNwb25zZSBidWZmZXIsIGJ1aWxkaW5nIGEgZGVzY3JpcHRvcgorICogZm9yIHRoYXQgY29uZmlndXJhdGlvbi4gIEl0IHJldHVybnMgdGhlIGJ1ZmZlciBsZW5ndGggb3IgYSBuZWdhdGl2ZQorICogc3RhdHVzIGNvZGUuICBUaGUgY29uZmlnLndUb3RhbExlbmd0aCBmaWVsZCBpcyBzZXQgdG8gbWF0Y2ggdGhlIGxlbmd0aAorICogb2YgdGhlIHJlc3VsdCwgYnV0IG90aGVyIGRlc2NyaXB0b3IgZmllbGRzIChpbmNsdWRpbmcgcG93ZXIgdXNhZ2UgYW5kCisgKiBpbnRlcmZhY2UgY291bnQpIG11c3QgYmUgc2V0IGJ5IHRoZSBjYWxsZXIuCisgKgorICogR2FkZ2V0IGRyaXZlcnMgY291bGQgdXNlIHRoaXMgd2hlbiBjb25zdHJ1Y3RpbmcgYSBjb25maWcgZGVzY3JpcHRvcgorICogaW4gcmVzcG9uc2UgdG8gVVNCX1JFUV9HRVRfREVTQ1JJUFRPUi4gIFRoZXkgd2lsbCBuZWVkIHRvIHBhdGNoIHRoZQorICogcmVzdWx0aW5nIGJEZXNjcmlwdG9yVHlwZSB2YWx1ZSBpZiBVU0JfRFRfT1RIRVJfU1BFRURfQ09ORklHIGlzIG5lZWRlZC4KKyAqLworaW50IHVzYl9nYWRnZXRfY29uZmlnX2J1ZigKKwljb25zdCBzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yCSpjb25maWcsCisJdm9pZAkJCQkJKmJ1ZiwKKwl1bnNpZ25lZAkJCQlsZW5ndGgsCisJY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlcgkqKmRlc2MKKykKK3sKKwlzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yCQkqY3AgPSBidWY7CisJaW50CQkJCQlsZW47CisKKwkvKiBjb25maWcgZGVzY3JpcHRvciBmaXJzdCAqLworCWlmIChsZW5ndGggPCBVU0JfRFRfQ09ORklHX1NJWkUgfHwgIWRlc2MpCisJCXJldHVybiAtRUlOVkFMOworCSpjcCA9ICpjb25maWc7IAorCisJLyogdGhlbiBpbnRlcmZhY2UvZW5kcG9pbnQvY2xhc3MvdmVuZG9yLy4uLiAqLworCWxlbiA9IHVzYl9kZXNjcmlwdG9yX2ZpbGxidWYoVVNCX0RUX0NPTkZJR19TSVpFICsgKHU4KilidWYsCisJCQlsZW5ndGggLSBVU0JfRFRfQ09ORklHX1NJWkUsIGRlc2MpOworCWlmIChsZW4gPCAwKQorCQlyZXR1cm4gbGVuOworCWxlbiArPSBVU0JfRFRfQ09ORklHX1NJWkU7CisJaWYgKGxlbiA+IDB4ZmZmZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBwYXRjaCB1cCB0aGUgY29uZmlnIGRlc2NyaXB0b3IgKi8KKwljcC0+Ykxlbmd0aCA9IFVTQl9EVF9DT05GSUdfU0laRTsKKwljcC0+YkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0NPTkZJRzsKKwljcC0+d1RvdGFsTGVuZ3RoID0gY3B1X3RvX2xlMTYobGVuKTsKKwljcC0+Ym1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX09ORTsKKwlyZXR1cm4gbGVuOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVmOGE5YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwpAQCAtMCwwICsxLDE3OTMgQEAKKy8qCisgKiBkdW1teV9oY2QuYyAtLSBEdW1teS9Mb29wYmFjayBVU0IgaG9zdCBhbmQgZGV2aWNlIGVtdWxhdG9yIGRyaXZlci4KKyAqCisgKiBNYWludGFpbmVyOiBBbGFuIFN0ZXJuIDxzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1PgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBCcm93bmVsbAorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUgQWxhbiBTdGVybgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisKKy8qCisgKiBUaGlzIGV4cG9zZXMgYSBkZXZpY2Ugc2lkZSAiVVNCIGdhZGdldCIgQVBJLCBkcml2ZW4gYnkgcmVxdWVzdHMgdG8gYQorICogTGludXgtVVNCIGhvc3QgY29udHJvbGxlciBkcml2ZXIuICBVU0IgdHJhZmZpYyBpcyBzaW11bGF0ZWQ7IHRoZXJlJ3MKKyAqIG5vIG5lZWQgZm9yIFVTQiBoYXJkd2FyZS4gIFVzZSB0aGlzIHdpdGggdHdvIG90aGVyIGRyaXZlcnM6CisgKgorICogIC0gR2FkZ2V0IGRyaXZlciwgcmVzcG9uZGluZyB0byByZXF1ZXN0cyAoc2xhdmUpOworICogIC0gSG9zdC1zaWRlIGRldmljZSBkcml2ZXIsIGFzIGFscmVhZHkgZmFtaWxpYXIgaW4gTGludXguCisgKgorICogSGF2aW5nIHRoaXMgYWxsIGluIG9uZSBrZXJuZWwgY2FuIGhlbHAgc29tZSBzdGFnZXMgb2YgZGV2ZWxvcG1lbnQsCisgKiBieXBhc3Npbmcgc29tZSBoYXJkd2FyZSAoYW5kIGRyaXZlcikgaXNzdWVzLiAgVU1MIGNvdWxkIGhlbHAgdG9vLgorICovCisKKyNkZWZpbmUgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKworI2luY2x1ZGUgIi4uL2NvcmUvaGNkLmgiCisKKworI2RlZmluZSBEUklWRVJfREVTQwkiVVNCIEhvc3QrR2FkZ2V0IEVtdWxhdG9yIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMTcgRGVjIDIwMDQiCisKK3N0YXRpYyBjb25zdCBjaGFyCWRyaXZlcl9uYW1lIFtdID0gImR1bW15X2hjZCI7CitzdGF0aWMgY29uc3QgY2hhcglkcml2ZXJfZGVzYyBbXSA9ICJVU0IgSG9zdCtHYWRnZXQgRW11bGF0b3IiOworCitzdGF0aWMgY29uc3QgY2hhcglnYWRnZXRfbmFtZSBbXSA9ICJkdW1teV91ZGMiOworCitNT0RVTEVfREVTQ1JJUFRJT04gKERSSVZFUl9ERVNDKTsKK01PRFVMRV9BVVRIT1IgKCJEYXZpZCBCcm93bmVsbCIpOworTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogZ2FkZ2V0IHNpZGUgZHJpdmVyIGRhdGEgc3RydWN0cmVzICovCitzdHJ1Y3QgZHVtbXlfZXAgeworCXN0cnVjdCBsaXN0X2hlYWQJCXF1ZXVlOworCXVuc2lnbmVkIGxvbmcJCQlsYXN0X2lvOwkvKiBqaWZmaWVzIHRpbWVzdGFtcCAqLworCXN0cnVjdCB1c2JfZ2FkZ2V0CQkqZ2FkZ2V0OworCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYzsKKwlzdHJ1Y3QgdXNiX2VwCQkJZXA7CisJdW5zaWduZWQJCQloYWx0ZWQgOiAxOworCXVuc2lnbmVkCQkJYWxyZWFkeV9zZWVuIDogMTsKKwl1bnNpZ25lZAkJCXNldHVwX3N0YWdlIDogMTsKK307CisKK3N0cnVjdCBkdW1teV9yZXF1ZXN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlxdWV1ZTsJCS8qIGVwJ3MgcmVxdWVzdHMgKi8KKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJCXJlcTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR1bW15X2VwICp1c2JfZXBfdG9fZHVtbXlfZXAgKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mIChfZXAsIHN0cnVjdCBkdW1teV9lcCwgZXApOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdW1teV9yZXF1ZXN0ICp1c2JfcmVxdWVzdF90b19kdW1teV9yZXF1ZXN0CisJCShzdHJ1Y3QgdXNiX3JlcXVlc3QgKl9yZXEpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZiAoX3JlcSwgc3RydWN0IGR1bW15X3JlcXVlc3QsIHJlcSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBFdmVyeSBkZXZpY2UgaGFzIGVwMCBmb3IgY29udHJvbCByZXF1ZXN0cywgcGx1cyB1cCB0byAzMCBtb3JlIGVuZHBvaW50cywKKyAqIGluIG9uZSBvZiB0d28gdHlwZXM6CisgKgorICogICAtIENvbmZpZ3VyYWJsZTogIGRpcmVjdGlvbiAoaW4vb3V0KSwgdHlwZSAoYnVsaywgaXNvLCBldGMpLCBhbmQgZW5kcG9pbnQKKyAqICAgICBudW1iZXIgY2FuIGJlIGNoYW5nZWQuICBOYW1lcyBsaWtlICJlcC1hIiBhcmUgdXNlZCBmb3IgdGhpcyB0eXBlLgorICoKKyAqICAgLSBGaXhlZCBGdW5jdGlvbjogIGluIG90aGVyIGNhc2VzLiAgc29tZSBjaGFyYWN0ZXJpc3RpY3MgbWF5IGJlIG11dGFibGU7CisgKiAgICAgdGhhdCdkIGJlIGhhcmR3YXJlLXNwZWNpZmljLiAgTmFtZXMgbGlrZSAiZXAxMm91dC1idWxrIiBhcmUgdXNlZC4KKyAqCisgKiBHYWRnZXQgZHJpdmVycyBhcmUgcmVzcG9uc2libGUgZm9yIG5vdCBzZXR0aW5nIHVwIGNvbmZsaWN0aW5nIGVuZHBvaW50CisgKiBjb25maWd1cmF0aW9ucywgaWxsZWdhbCBvciB1bnN1cHBvcnRlZCBwYWNrZXQgbGVuZ3RocywgYW5kIHNvIG9uLgorICovCisKK3N0YXRpYyBjb25zdCBjaGFyIGVwMG5hbWUgW10gPSAiZXAwIjsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGVwX25hbWUgW10gPSB7CisJZXAwbmFtZSwJCQkJLyogZXZlcnlvbmUgaGFzIGVwMCAqLworCisJLyogYWN0IGxpa2UgYSBuZXQyMjgwOiBoaWdoIHNwZWVkLCBzaXggY29uZmlndXJhYmxlIGVuZHBvaW50cyAqLworCSJlcC1hIiwgImVwLWIiLCAiZXAtYyIsICJlcC1kIiwgImVwLWUiLCAiZXAtZiIsCisKKwkvKiBvciBsaWtlIHB4YTI1MDogZmlmdGVlbiBmaXhlZCBmdW5jdGlvbiBlbmRwb2ludHMgKi8KKwkiZXAxaW4tYnVsayIsICJlcDJvdXQtYnVsayIsICJlcDNpbi1pc28iLCAiZXA0b3V0LWlzbyIsICJlcDVpbi1pbnQiLAorCSJlcDZpbi1idWxrIiwgImVwN291dC1idWxrIiwgImVwOGluLWlzbyIsICJlcDlvdXQtaXNvIiwgImVwMTBpbi1pbnQiLAorCSJlcDExaW4tYnVsayIsICJlcDEyb3V0LWJ1bGsiLCAiZXAxM2luLWlzbyIsICJlcDE0b3V0LWlzbyIsCisJCSJlcDE1aW4taW50IiwKKworCS8qIG9yIGxpa2Ugc2ExMTAwOiB0d28gZml4ZWQgZnVuY3Rpb24gZW5kcG9pbnRzICovCisJImVwMW91dC1idWxrIiwgImVwMmluLWJ1bGsiLAorfTsKKyNkZWZpbmUgRFVNTVlfRU5EUE9JTlRTCShzaXplb2YoZXBfbmFtZSkvc2l6ZW9mKGNoYXIgKikpCisKKyNkZWZpbmUgRklGT19TSVpFCQk2NAorCitzdHJ1Y3QgdXJicCB7CisJc3RydWN0IHVyYgkJKnVyYjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXVyYnBfbGlzdDsKK307CisKK3N0cnVjdCBkdW1teSB7CisJc3BpbmxvY2tfdAkJCWxvY2s7CisKKwkvKgorCSAqIFNMQVZFL0dBREdFVCBzaWRlIHN1cHBvcnQKKwkgKi8KKwlzdHJ1Y3QgZHVtbXlfZXAJCQllcCBbRFVNTVlfRU5EUE9JTlRTXTsKKwlpbnQJCQkJYWRkcmVzczsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkJZ2FkZ2V0OworCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlcgkqZHJpdmVyOworCXN0cnVjdCBkdW1teV9yZXF1ZXN0CQlmaWZvX3JlcTsKKwl1OAkJCQlmaWZvX2J1ZiBbRklGT19TSVpFXTsKKwl1MTYJCQkJZGV2c3RhdHVzOworCisJLyoKKwkgKiBNQVNURVIvSE9TVCBzaWRlIHN1cHBvcnQKKwkgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdAkJdGltZXI7CisJdTMyCQkJCXBvcnRfc3RhdHVzOworCXVuc2lnbmVkCQkJcmVzdW1pbmc6MTsKKwl1bnNpZ25lZCBsb25nCQkJcmVfdGltZW91dDsKKworCXN0cnVjdCB1c2JfZGV2aWNlCQkqdWRldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQl1cmJwX2xpc3Q7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdW1teSAqaGNkX3RvX2R1bW15IChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXJldHVybiAoc3RydWN0IGR1bW15ICopIChoY2QtPmhjZF9wcml2KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNiX2hjZCAqZHVtbXlfdG9faGNkIChzdHJ1Y3QgZHVtbXkgKmR1bSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKCh2b2lkICopIGR1bSwgc3RydWN0IHVzYl9oY2QsIGhjZF9wcml2KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlICpkdW1teV9kZXYgKHN0cnVjdCBkdW1teSAqZHVtKQoreworCXJldHVybiBkdW1teV90b19oY2QoZHVtKS0+c2VsZi5jb250cm9sbGVyOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdW1teSAqZXBfdG9fZHVtbXkgKHN0cnVjdCBkdW1teV9lcCAqZXApCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZiAoZXAtPmdhZGdldCwgc3RydWN0IGR1bW15LCBnYWRnZXQpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdW1teSAqZ2FkZ2V0X3RvX2R1bW15IChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXJldHVybiBjb250YWluZXJfb2YgKGdhZGdldCwgc3RydWN0IGR1bW15LCBnYWRnZXQpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdW1teSAqZ2FkZ2V0X2Rldl90b19kdW1teSAoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YgKGRldiwgc3RydWN0IGR1bW15LCBnYWRnZXQuZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBkdW1teQkJCSp0aGVfY29udHJvbGxlcjsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFRoaXMgImhhcmR3YXJlIiBtYXkgbG9vayBhIGJpdCBvZGQgaW4gZGlhZ25vc3RpY3Mgc2luY2UgaXQncyBnb3QgYm90aAorICogaG9zdCBhbmQgZGV2aWNlIHNpZGVzOyBhbmQgaXQgYmluZHMgZGlmZmVyZW50IGRyaXZlcnMgdG8gZWFjaCBzaWRlLgorICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZQkJdGhlX3BkZXY7CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkdW1teV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gKGNoYXIgKikgZHJpdmVyX25hbWUsCisJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBTTEFWRS9HQURHRVQgU0lERSBEUklWRVIKKyAqCisgKiBUaGlzIG9ubHkgdHJhY2tzIGdhZGdldCBzdGF0ZS4gIEFsbCB0aGUgd29yayBpcyBkb25lIHdoZW4gdGhlIGhvc3QKKyAqIHNpZGUgdHJpZXMgc29tZSAoZW11bGF0ZWQpIGkvbyBvcGVyYXRpb24uICBSZWFsIGRldmljZSBjb250cm9sbGVyCisgKiBkcml2ZXJzIHdvdWxkIGRvIHJlYWwgaS9vIHVzaW5nIGRtYSwgZmlmb3MsIGlycXMsIHRpbWVycywgZXRjLgorICovCisKKyNkZWZpbmUgaXNfZW5hYmxlZChkdW0pIFwKKwkoZHVtLT5wb3J0X3N0YXR1cyAmIFVTQl9QT1JUX1NUQVRfRU5BQkxFKQorCitzdGF0aWMgaW50CitkdW1teV9lbmFibGUgKHN0cnVjdCB1c2JfZXAgKl9lcCwgY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjKQoreworCXN0cnVjdCBkdW1teQkJKmR1bTsKKwlzdHJ1Y3QgZHVtbXlfZXAJCSplcDsKKwl1bnNpZ25lZAkJbWF4OworCWludAkJCXJldHZhbDsKKworCWVwID0gdXNiX2VwX3RvX2R1bW15X2VwIChfZXApOworCWlmICghX2VwIHx8ICFkZXNjIHx8IGVwLT5kZXNjIHx8IF9lcC0+bmFtZSA9PSBlcDBuYW1lCisJCQl8fCBkZXNjLT5iRGVzY3JpcHRvclR5cGUgIT0gVVNCX0RUX0VORFBPSU5UKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkdW0gPSBlcF90b19kdW1teSAoZXApOworCWlmICghZHVtLT5kcml2ZXIgfHwgIWlzX2VuYWJsZWQgKGR1bSkpCisJCXJldHVybiAtRVNIVVRET1dOOworCW1heCA9IGxlMTZfdG9fY3B1KGRlc2MtPndNYXhQYWNrZXRTaXplKSAmIDB4M2ZmOworCisJLyogZHJpdmVycyBtdXN0IG5vdCByZXF1ZXN0IGJhZCBzZXR0aW5ncywgc2luY2UgbG93ZXIgbGV2ZWxzCisJICogKGhhcmR3YXJlIG9yIGl0cyBkcml2ZXJzKSBtYXkgbm90IGNoZWNrLiAgc29tZSBlbmRwb2ludHMKKwkgKiBjYW4ndCBkbyBpc28sIG1hbnkgaGF2ZSBtYXhwYWNrZXQgbGltaXRhdGlvbnMsIGV0Yy4KKwkgKgorCSAqIHNpbmNlIHRoaXMgImhhcmR3YXJlIiBkcml2ZXIgaXMgaGVyZSB0byBoZWxwIGRlYnVnZ2luZywgd2UKKwkgKiBoYXZlIHNvbWUgZXh0cmEgc2FuaXR5IGNoZWNrcy4gICh0aGVyZSBjb3VsZCBiZSBtb3JlIHRob3VnaCwKKwkgKiBlc3BlY2lhbGx5IGZvciAiZXA5b3V0IiBzdHlsZSBmaXhlZCBmdW5jdGlvbiBvbmVzLikKKwkgKi8KKwlyZXR2YWwgPSAtRUlOVkFMOworCXN3aXRjaCAoZGVzYy0+Ym1BdHRyaWJ1dGVzICYgMHgwMykgeworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoKKwkJaWYgKHN0cnN0ciAoZXAtPmVwLm5hbWUsICItaXNvIikKKwkJCQl8fCBzdHJzdHIgKGVwLT5lcC5uYW1lLCAiLWludCIpKSB7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJc3dpdGNoIChkdW0tPmdhZGdldC5zcGVlZCkgeworCQljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQkJaWYgKG1heCA9PSA1MTIpCisJCQkJYnJlYWs7CisJCQkvKiBjb25zZXJ2ZSByZXR1cm4gc3RhdGVtZW50cyAqLworCQlkZWZhdWx0OgorCQkJc3dpdGNoIChtYXgpIHsKKwkJCWNhc2UgODogY2FzZSAxNjogY2FzZSAzMjogY2FzZSA2NDoKKwkJCQkvKiB3ZSdsbCBmYWtlIGFueSBsZWdhbCBzaXplICovCisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQljYXNlIFVTQl9TUEVFRF9MT1c6CisJCQkJZ290byBkb25lOworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgorCQlpZiAoc3Ryc3RyIChlcC0+ZXAubmFtZSwgIi1pc28iKSkgLyogYnVsayBpcyBvayAqLworCQkJZ290byBkb25lOworCQkvKiByZWFsIGhhcmR3YXJlIG1pZ2h0IG5vdCBoYW5kbGUgYWxsIHBhY2tldCBzaXplcyAqLworCQlzd2l0Y2ggKGR1bS0+Z2FkZ2V0LnNwZWVkKSB7CisJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCQlpZiAobWF4IDw9IDEwMjQpCisJCQkJYnJlYWs7CisJCQkvKiBzYXZlIGEgcmV0dXJuIHN0YXRlbWVudCAqLworCQljYXNlIFVTQl9TUEVFRF9GVUxMOgorCQkJaWYgKG1heCA8PSA2NCkKKwkJCQlicmVhazsKKwkJCS8qIHNhdmUgYSByZXR1cm4gc3RhdGVtZW50ICovCisJCWRlZmF1bHQ6CisJCQlpZiAobWF4IDw9IDgpCisJCQkJYnJlYWs7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DOgorCQlpZiAoc3Ryc3RyIChlcC0+ZXAubmFtZSwgIi1idWxrIikKKwkJCQl8fCBzdHJzdHIgKGVwLT5lcC5uYW1lLCAiLWludCIpKQorCQkJZ290byBkb25lOworCQkvKiByZWFsIGhhcmR3YXJlIG1pZ2h0IG5vdCBoYW5kbGUgYWxsIHBhY2tldCBzaXplcyAqLworCQlzd2l0Y2ggKGR1bS0+Z2FkZ2V0LnNwZWVkKSB7CisJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCQlpZiAobWF4IDw9IDEwMjQpCisJCQkJYnJlYWs7CisJCQkvKiBzYXZlIGEgcmV0dXJuIHN0YXRlbWVudCAqLworCQljYXNlIFVTQl9TUEVFRF9GVUxMOgorCQkJaWYgKG1heCA8PSAxMDIzKQorCQkJCWJyZWFrOworCQkJLyogc2F2ZSBhIHJldHVybiBzdGF0ZW1lbnQgKi8KKwkJZGVmYXVsdDoKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBmZXcgY2hpcHMgc3VwcG9ydCBjb250cm9sIGV4Y2VwdCBvbiBlcDAgKi8KKwkJZ290byBkb25lOworCX0KKworCV9lcC0+bWF4cGFja2V0ID0gbWF4OworCWVwLT5kZXNjID0gZGVzYzsKKworCWRldl9kYmcgKGR1bW15X2RldihkdW0pLCAiZW5hYmxlZCAlcyAoZXAlZCVzLSVzKSBtYXhwYWNrZXQgJWRcbiIsCisJCV9lcC0+bmFtZSwKKwkJZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIDB4MGYsCisJCShkZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgPyAiaW4iIDogIm91dCIsCisJCSh7IGNoYXIgKnZhbDsKKwkJIHN3aXRjaCAoZGVzYy0+Ym1BdHRyaWJ1dGVzICYgMHgwMykgeworCQkgY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLOiB2YWwgPSAiYnVsayI7IGJyZWFrOworCQkgY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DOiB2YWwgPSAiaXNvIjsgYnJlYWs7CisJCSBjYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lOVDogdmFsID0gImludHIiOyBicmVhazsKKwkJIGRlZmF1bHQ6IHZhbCA9ICJjdHJsIjsgYnJlYWs7CisJCSB9OyB2YWw7IH0pLAorCQltYXgpOworCisJLyogYXQgdGhpcyBwb2ludCByZWFsIGhhcmR3YXJlIHNob3VsZCBiZSBOQUtpbmcgdHJhbnNmZXJzCisJICogdG8gdGhhdCBlbmRwb2ludCwgdW50aWwgYSBidWZmZXIgaXMgcXVldWVkIHRvIGl0LgorCSAqLworCXJldHZhbCA9IDA7Citkb25lOgorCXJldHVybiByZXR2YWw7Cit9CisKKy8qIGNhbGxlZCB3aXRoIHNwaW5sb2NrIGhlbGQgKi8KK3N0YXRpYyB2b2lkIG51a2UgKHN0cnVjdCBkdW1teSAqZHVtLCBzdHJ1Y3QgZHVtbXlfZXAgKmVwKQoreworCXdoaWxlICghbGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkpIHsKKwkJc3RydWN0IGR1bW15X3JlcXVlc3QJKnJlcTsKKworCQlyZXEgPSBsaXN0X2VudHJ5IChlcC0+cXVldWUubmV4dCwgc3RydWN0IGR1bW15X3JlcXVlc3QsIHF1ZXVlKTsKKwkJbGlzdF9kZWxfaW5pdCAoJnJlcS0+cXVldWUpOworCQlyZXEtPnJlcS5zdGF0dXMgPSAtRVNIVVRET1dOOworCisJCXNwaW5fdW5sb2NrICgmZHVtLT5sb2NrKTsKKwkJcmVxLT5yZXEuY29tcGxldGUgKCZlcC0+ZXAsICZyZXEtPnJlcSk7CisJCXNwaW5fbG9jayAoJmR1bS0+bG9jayk7CisJfQorfQorCitzdGF0aWMgaW50IGR1bW15X2Rpc2FibGUgKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlzdHJ1Y3QgZHVtbXlfZXAJCSplcDsKKwlzdHJ1Y3QgZHVtbXkJCSpkdW07CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJaW50CQkJcmV0dmFsOworCisJZXAgPSB1c2JfZXBfdG9fZHVtbXlfZXAgKF9lcCk7CisJaWYgKCFfZXAgfHwgIWVwLT5kZXNjIHx8IF9lcC0+bmFtZSA9PSBlcDBuYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkdW0gPSBlcF90b19kdW1teSAoZXApOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkdW0tPmxvY2ssIGZsYWdzKTsKKwllcC0+ZGVzYyA9IE5VTEw7CisJcmV0dmFsID0gMDsKKwludWtlIChkdW0sIGVwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZHVtLT5sb2NrLCBmbGFncyk7CisKKwlkZXZfZGJnIChkdW1teV9kZXYoZHVtKSwgImRpc2FibGVkICVzXG4iLCBfZXAtPm5hbWUpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3JlcXVlc3QgKgorZHVtbXlfYWxsb2NfcmVxdWVzdCAoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgbWVtX2ZsYWdzKQoreworCXN0cnVjdCBkdW1teV9lcAkJKmVwOworCXN0cnVjdCBkdW1teV9yZXF1ZXN0CSpyZXE7CisKKwlpZiAoIV9lcCkKKwkJcmV0dXJuIE5VTEw7CisJZXAgPSB1c2JfZXBfdG9fZHVtbXlfZXAgKF9lcCk7CisKKwlyZXEgPSBrbWFsbG9jIChzaXplb2YgKnJlcSwgbWVtX2ZsYWdzKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIE5VTEw7CisJbWVtc2V0IChyZXEsIDAsIHNpemVvZiAqcmVxKTsKKwlJTklUX0xJU1RfSEVBRCAoJnJlcS0+cXVldWUpOworCXJldHVybiAmcmVxLT5yZXE7Cit9CisKK3N0YXRpYyB2b2lkCitkdW1teV9mcmVlX3JlcXVlc3QgKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBkdW1teV9lcAkJKmVwOworCXN0cnVjdCBkdW1teV9yZXF1ZXN0CSpyZXE7CisKKwllcCA9IHVzYl9lcF90b19kdW1teV9lcCAoX2VwKTsKKwlpZiAoIWVwIHx8ICFfcmVxIHx8ICghZXAtPmRlc2MgJiYgX2VwLT5uYW1lICE9IGVwMG5hbWUpKQorCQlyZXR1cm47CisKKwlyZXEgPSB1c2JfcmVxdWVzdF90b19kdW1teV9yZXF1ZXN0IChfcmVxKTsKKwlXQVJOX09OICghbGlzdF9lbXB0eSAoJnJlcS0+cXVldWUpKTsKKwlrZnJlZSAocmVxKTsKK30KKworc3RhdGljIHZvaWQgKgorZHVtbXlfYWxsb2NfYnVmZmVyICgKKwlzdHJ1Y3QgdXNiX2VwICpfZXAsCisJdW5zaWduZWQgYnl0ZXMsCisJZG1hX2FkZHJfdCAqZG1hLAorCWludCBtZW1fZmxhZ3MKKykgeworCWNoYXIJCQkqcmV0dmFsOworCXN0cnVjdCBkdW1teV9lcAkJKmVwOworCXN0cnVjdCBkdW1teQkJKmR1bTsKKworCWVwID0gdXNiX2VwX3RvX2R1bW15X2VwIChfZXApOworCWR1bSA9IGVwX3RvX2R1bW15IChlcCk7CisKKwlpZiAoIWR1bS0+ZHJpdmVyKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR2YWwgPSBrbWFsbG9jIChieXRlcywgbWVtX2ZsYWdzKTsKKwkqZG1hID0gKGRtYV9hZGRyX3QpIHJldHZhbDsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZAorZHVtbXlfZnJlZV9idWZmZXIgKAorCXN0cnVjdCB1c2JfZXAgKl9lcCwKKwl2b2lkICpidWYsCisJZG1hX2FkZHJfdCBkbWEsCisJdW5zaWduZWQgYnl0ZXMKKykgeworCWlmIChieXRlcykKKwkJa2ZyZWUgKGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkCitmaWZvX2NvbXBsZXRlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7Cit9CisKK3N0YXRpYyBpbnQKK2R1bW15X3F1ZXVlIChzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSwgaW50IG1lbV9mbGFncykKK3sKKwlzdHJ1Y3QgZHVtbXlfZXAJCSplcDsKKwlzdHJ1Y3QgZHVtbXlfcmVxdWVzdAkqcmVxOworCXN0cnVjdCBkdW1teQkJKmR1bTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCXJlcSA9IHVzYl9yZXF1ZXN0X3RvX2R1bW15X3JlcXVlc3QgKF9yZXEpOworCWlmICghX3JlcSB8fCAhbGlzdF9lbXB0eSAoJnJlcS0+cXVldWUpIHx8ICFfcmVxLT5jb21wbGV0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcCA9IHVzYl9lcF90b19kdW1teV9lcCAoX2VwKTsKKwlpZiAoIV9lcCB8fCAoIWVwLT5kZXNjICYmIF9lcC0+bmFtZSAhPSBlcDBuYW1lKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkdW0gPSBlcF90b19kdW1teSAoZXApOworCWlmICghZHVtLT5kcml2ZXIgfHwgIWlzX2VuYWJsZWQgKGR1bSkpCisJCXJldHVybiAtRVNIVVRET1dOOworCisjaWYgMAorCWRldl9kYmcgKGR1bW15X2RldihkdW0pLCAiZXAgJXAgcXVldWUgcmVxICVwIHRvICVzLCBsZW4gJWQgYnVmICVwXG4iLAorCQkJZXAsIF9yZXEsIF9lcC0+bmFtZSwgX3JlcS0+bGVuZ3RoLCBfcmVxLT5idWYpOworI2VuZGlmCisKKwlfcmVxLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJX3JlcS0+YWN0dWFsID0gMDsKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmR1bS0+bG9jaywgZmxhZ3MpOworCisJLyogaW1wbGVtZW50IGFuIGVtdWxhdGVkIHNpbmdsZS1yZXF1ZXN0IEZJRk8gKi8KKwlpZiAoZXAtPmRlc2MgJiYgKGVwLT5kZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgJiYKKwkJCWxpc3RfZW1wdHkgKCZkdW0tPmZpZm9fcmVxLnF1ZXVlKSAmJgorCQkJbGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkgJiYKKwkJCV9yZXEtPmxlbmd0aCA8PSBGSUZPX1NJWkUpIHsKKwkJcmVxID0gJmR1bS0+Zmlmb19yZXE7CisJCXJlcS0+cmVxID0gKl9yZXE7CisJCXJlcS0+cmVxLmJ1ZiA9IGR1bS0+Zmlmb19idWY7CisJCW1lbWNweSAoZHVtLT5maWZvX2J1ZiwgX3JlcS0+YnVmLCBfcmVxLT5sZW5ndGgpOworCQlyZXEtPnJlcS5jb250ZXh0ID0gZHVtOworCQlyZXEtPnJlcS5jb21wbGV0ZSA9IGZpZm9fY29tcGxldGU7CisKKwkJc3Bpbl91bmxvY2sgKCZkdW0tPmxvY2spOworCQlfcmVxLT5hY3R1YWwgPSBfcmVxLT5sZW5ndGg7CisJCV9yZXEtPnN0YXR1cyA9IDA7CisJCV9yZXEtPmNvbXBsZXRlIChfZXAsIF9yZXEpOworCQlzcGluX2xvY2sgKCZkdW0tPmxvY2spOworCX0KKwlsaXN0X2FkZF90YWlsICgmcmVxLT5xdWV1ZSwgJmVwLT5xdWV1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmR1bS0+bG9jaywgZmxhZ3MpOworCisJLyogcmVhbCBoYXJkd2FyZSB3b3VsZCBsaWtlbHkgZW5hYmxlIHRyYW5zZmVycyBoZXJlLCBpbiBjYXNlCisJICogaXQnZCBiZWVuIGxlZnQgTkFLaW5nLgorCSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR1bW15X2RlcXVldWUgKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBkdW1teV9lcAkJKmVwOworCXN0cnVjdCBkdW1teQkJKmR1bTsKKwlpbnQJCQlyZXR2YWwgPSAtRUlOVkFMOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXN0cnVjdCBkdW1teV9yZXF1ZXN0CSpyZXEgPSBOVUxMOworCisJaWYgKCFfZXAgfHwgIV9yZXEpCisJCXJldHVybiByZXR2YWw7CisJZXAgPSB1c2JfZXBfdG9fZHVtbXlfZXAgKF9lcCk7CisJZHVtID0gZXBfdG9fZHVtbXkgKGVwKTsKKworCWlmICghZHVtLT5kcml2ZXIpCisJCXJldHVybiAtRVNIVVRET1dOOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkdW0tPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CisJCWlmICgmcmVxLT5yZXEgPT0gX3JlcSkgeworCQkJbGlzdF9kZWxfaW5pdCAoJnJlcS0+cXVldWUpOworCQkJX3JlcS0+c3RhdHVzID0gLUVDT05OUkVTRVQ7CisJCQlyZXR2YWwgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmR1bS0+bG9jaywgZmxhZ3MpOworCisJaWYgKHJldHZhbCA9PSAwKSB7CisJCWRldl9kYmcgKGR1bW15X2RldihkdW0pLAorCQkJCSJkZXF1ZXVlZCByZXEgJXAgZnJvbSAlcywgbGVuICVkIGJ1ZiAlcFxuIiwKKwkJCQlyZXEsIF9lcC0+bmFtZSwgX3JlcS0+bGVuZ3RoLCBfcmVxLT5idWYpOworCQlfcmVxLT5jb21wbGV0ZSAoX2VwLCBfcmVxKTsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludAorZHVtbXlfc2V0X2hhbHQgKHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBkdW1teV9lcAkJKmVwOworCXN0cnVjdCBkdW1teQkJKmR1bTsKKworCWlmICghX2VwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllcCA9IHVzYl9lcF90b19kdW1teV9lcCAoX2VwKTsKKwlkdW0gPSBlcF90b19kdW1teSAoZXApOworCWlmICghZHVtLT5kcml2ZXIpCisJCXJldHVybiAtRVNIVVRET1dOOworCWlmICghdmFsdWUpCisJCWVwLT5oYWx0ZWQgPSAwOworCWVsc2UgaWYgKGVwLT5kZXNjICYmIChlcC0+ZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pICYmCisJCQkhbGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkpCisJCXJldHVybiAtRUFHQUlOOworCWVsc2UKKwkJZXAtPmhhbHRlZCA9IDE7CisJLyogRklYTUUgY2xlYXIgZW11bGF0ZWQgZGF0YSB0b2dnbGUgdG9vICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2VwX29wcyBkdW1teV9lcF9vcHMgPSB7CisJLmVuYWJsZQkJPSBkdW1teV9lbmFibGUsCisJLmRpc2FibGUJPSBkdW1teV9kaXNhYmxlLAorCisJLmFsbG9jX3JlcXVlc3QJPSBkdW1teV9hbGxvY19yZXF1ZXN0LAorCS5mcmVlX3JlcXVlc3QJPSBkdW1teV9mcmVlX3JlcXVlc3QsCisKKwkuYWxsb2NfYnVmZmVyCT0gZHVtbXlfYWxsb2NfYnVmZmVyLAorCS5mcmVlX2J1ZmZlcgk9IGR1bW15X2ZyZWVfYnVmZmVyLAorCS8qIG1hcCwgdW5tYXAsIC4uLiBldmVudHVhbGx5IGhvb2sgdGhlICJnZW5lcmljIiBkbWEgY2FsbHMgKi8KKworCS5xdWV1ZQkJPSBkdW1teV9xdWV1ZSwKKwkuZGVxdWV1ZQk9IGR1bW15X2RlcXVldWUsCisKKwkuc2V0X2hhbHQJPSBkdW1teV9zZXRfaGFsdCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHRoZXJlIGFyZSBib3RoIGhvc3QgYW5kIGRldmljZSBzaWRlIHZlcnNpb25zIG9mIHRoaXMgY2FsbCAuLi4gKi8KK3N0YXRpYyBpbnQgZHVtbXlfZ19nZXRfZnJhbWUgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0KQoreworCXN0cnVjdCB0aW1ldmFsCXR2OworCisJZG9fZ2V0dGltZW9mZGF5ICgmdHYpOworCXJldHVybiB0di50dl91c2VjIC8gMTAwMDsKK30KKworc3RhdGljIGludCBkdW1teV93YWtldXAgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0KQoreworCXN0cnVjdCBkdW1teQkqZHVtOworCisJZHVtID0gZ2FkZ2V0X3RvX2R1bW15IChfZ2FkZ2V0KTsKKwlpZiAoKGR1bS0+ZGV2c3RhdHVzICYgKDEgPDwgVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQKSkgPT0gMAorCQkJfHwgIShkdW0tPnBvcnRfc3RhdHVzICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogaHViIG5vdGljZXMgb3VyIHJlcXVlc3QsIGlzc3VlcyBkb3duc3RyZWFtIHJlc3VtZSwgZXRjICovCisJZHVtLT5yZXN1bWluZyA9IDE7CisJZHVtLT5wb3J0X3N0YXR1cyB8PSAoMSA8PCBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHVtbXlfc2V0X3NlbGZwb3dlcmVkIChzdHJ1Y3QgdXNiX2dhZGdldCAqX2dhZGdldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBkdW1teQkqZHVtOworCisJZHVtID0gZ2FkZ2V0X3RvX2R1bW15IChfZ2FkZ2V0KTsKKwlpZiAodmFsdWUpCisJCWR1bS0+ZGV2c3RhdHVzIHw9ICgxIDw8IFVTQl9ERVZJQ0VfU0VMRl9QT1dFUkVEKTsKKwllbHNlCisJCWR1bS0+ZGV2c3RhdHVzICY9IH4oMSA8PCBVU0JfREVWSUNFX1NFTEZfUE9XRVJFRCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2dhZGdldF9vcHMgZHVtbXlfb3BzID0geworCS5nZXRfZnJhbWUJPSBkdW1teV9nX2dldF9mcmFtZSwKKwkud2FrZXVwCQk9IGR1bW15X3dha2V1cCwKKwkuc2V0X3NlbGZwb3dlcmVkID0gZHVtbXlfc2V0X3NlbGZwb3dlcmVkLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogImZ1bmN0aW9uIiBzeXNmcyBhdHRyaWJ1dGUgKi8KK3N0YXRpYyBzc2l6ZV90CitzaG93X2Z1bmN0aW9uIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZHVtbXkJKmR1bSA9IGdhZGdldF9kZXZfdG9fZHVtbXkgKGRldik7CisKKwlpZiAoIWR1bS0+ZHJpdmVyIHx8ICFkdW0tPmRyaXZlci0+ZnVuY3Rpb24pCisJCXJldHVybiAwOworCXJldHVybiBzY25wcmludGYgKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGR1bS0+ZHJpdmVyLT5mdW5jdGlvbik7Cit9CitERVZJQ0VfQVRUUiAoZnVuY3Rpb24sIFNfSVJVR08sIHNob3dfZnVuY3Rpb24sIE5VTEwpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogRHJpdmVyIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbi4KKyAqCisgKiBUaGlzIGlzIGJhc2ljYWxseSBoYXJkd2FyZS1zcGVjaWZpYzsgdGhlcmUncyB1c3VhbGx5IG9ubHkgb25lIHJlYWwgVVNCCisgKiBkZXZpY2UgKG5vdCBob3N0KSBjb250cm9sbGVyIHNpbmNlIHRoYXQncyBob3cgVVNCIGRldmljZXMgYXJlIGludGVuZGVkCisgKiB0byB3b3JrLiAgU28gbW9zdCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlc2UgYXBpIGNhbGxzIHdpbGwgcmVseSBvbiB0aGUKKyAqIGZhY3QgdGhhdCBvbmx5IG9uZSBkcml2ZXIgd2lsbCBldmVyIGJpbmQgdG8gdGhlIGhhcmR3YXJlLiAgQnV0IGN1cmlvdXMKKyAqIGhhcmR3YXJlIGNhbiBiZSBidWlsdCB3aXRoIGRpc2NyZXRlIGNvbXBvbmVudHMsIHNvIHRoZSBnYWRnZXQgQVBJIGRvZXNuJ3QKKyAqIHJlcXVpcmUgdGhhdCBhc3N1bXB0aW9uLgorICoKKyAqIEZvciB0aGlzIGVtdWxhdG9yLCBpdCBtaWdodCBiZSBjb252ZW5pZW50IHRvIGNyZWF0ZSBhIHVzYiBzbGF2ZSBkZXZpY2UKKyAqIGZvciBlYWNoIGRyaXZlciB0aGF0IHJlZ2lzdGVyczogIGp1c3QgYWRkIHRvIGEgYmlnIHJvb3QgaHViLgorICovCisKK3N0YXRpYyB2b2lkCitkdW1teV91ZGNfcmVsZWFzZSAoc3RydWN0IGRldmljZSAqZGV2KQoreworfQorCitzdGF0aWMgdm9pZAorZHVtbXlfcGRldl9yZWxlYXNlIChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7Cit9CisKK3N0YXRpYyBpbnQKK2R1bW15X3JlZ2lzdGVyX3VkYyAoc3RydWN0IGR1bW15ICpkdW0pCit7CisJaW50CQlyYzsKKworCXN0cmNweSAoZHVtLT5nYWRnZXQuZGV2LmJ1c19pZCwgInVkYyIpOworCWR1bS0+Z2FkZ2V0LmRldi5wYXJlbnQgPSBkdW1teV9kZXYoZHVtKTsKKwlkdW0tPmdhZGdldC5kZXYucmVsZWFzZSA9IGR1bW15X3VkY19yZWxlYXNlOworCisJcmMgPSBkZXZpY2VfcmVnaXN0ZXIgKCZkdW0tPmdhZGdldC5kZXYpOworCWlmIChyYyA9PSAwKQorCQlkZXZpY2VfY3JlYXRlX2ZpbGUgKCZkdW0tPmdhZGdldC5kZXYsICZkZXZfYXR0cl9mdW5jdGlvbik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZAorZHVtbXlfdW5yZWdpc3Rlcl91ZGMgKHN0cnVjdCBkdW1teSAqZHVtKQoreworCWRldmljZV9yZW1vdmVfZmlsZSAoJmR1bS0+Z2FkZ2V0LmRldiwgJmRldl9hdHRyX2Z1bmN0aW9uKTsKKwlkZXZpY2VfdW5yZWdpc3RlciAoJmR1bS0+Z2FkZ2V0LmRldik7Cit9CisKK2ludAordXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIgKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCXN0cnVjdCBkdW1teQkqZHVtID0gdGhlX2NvbnRyb2xsZXI7CisJaW50CQlyZXR2YWwsIGk7CisKKwlpZiAoIWR1bSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGR1bS0+ZHJpdmVyKQorCQlyZXR1cm4gLUVCVVNZOworCWlmICghZHJpdmVyLT5iaW5kIHx8ICFkcml2ZXItPnVuYmluZCB8fCAhZHJpdmVyLT5zZXR1cAorCQkJfHwgZHJpdmVyLT5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIFNMQVZFIHNpZGUgaW5pdCAuLi4gdGhlIGxheWVyIGFib3ZlIGhhcmR3YXJlLCB3aGljaAorCSAqIGNhbid0IGVudW1lcmF0ZSB3aXRob3V0IGhlbHAgZnJvbSB0aGUgZHJpdmVyIHdlJ3JlIGJpbmRpbmcuCisJICovCisJZHVtLT5nYWRnZXQubmFtZSA9IGdhZGdldF9uYW1lOworCWR1bS0+Z2FkZ2V0Lm9wcyA9ICZkdW1teV9vcHM7CisJZHVtLT5nYWRnZXQuaXNfZHVhbHNwZWVkID0gMTsKKworCWR1bS0+ZGV2c3RhdHVzID0gMDsKKwlkdW0tPnJlc3VtaW5nID0gMDsKKworCUlOSVRfTElTVF9IRUFEICgmZHVtLT5nYWRnZXQuZXBfbGlzdCk7CisJZm9yIChpID0gMDsgaSA8IERVTU1ZX0VORFBPSU5UUzsgaSsrKSB7CisJCXN0cnVjdCBkdW1teV9lcAkqZXAgPSAmZHVtLT5lcCBbaV07CisKKwkJaWYgKCFlcF9uYW1lIFtpXSkKKwkJCWJyZWFrOworCQllcC0+ZXAubmFtZSA9IGVwX25hbWUgW2ldOworCQllcC0+ZXAub3BzID0gJmR1bW15X2VwX29wczsKKwkJbGlzdF9hZGRfdGFpbCAoJmVwLT5lcC5lcF9saXN0LCAmZHVtLT5nYWRnZXQuZXBfbGlzdCk7CisJCWVwLT5oYWx0ZWQgPSBlcC0+YWxyZWFkeV9zZWVuID0gZXAtPnNldHVwX3N0YWdlID0gMDsKKwkJZXAtPmVwLm1heHBhY2tldCA9IH4wOworCQllcC0+bGFzdF9pbyA9IGppZmZpZXM7CisJCWVwLT5nYWRnZXQgPSAmZHVtLT5nYWRnZXQ7CisJCWVwLT5kZXNjID0gTlVMTDsKKwkJSU5JVF9MSVNUX0hFQUQgKCZlcC0+cXVldWUpOworCX0KKworCWR1bS0+Z2FkZ2V0LmVwMCA9ICZkdW0tPmVwIFswXS5lcDsKKwlkdW0tPmVwIFswXS5lcC5tYXhwYWNrZXQgPSA2NDsKKwlsaXN0X2RlbF9pbml0ICgmZHVtLT5lcCBbMF0uZXAuZXBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmR1bS0+Zmlmb19yZXEucXVldWUpOworCisJZHVtLT5kcml2ZXIgPSBkcml2ZXI7CisJZHVtLT5nYWRnZXQuZGV2LmRyaXZlciA9ICZkcml2ZXItPmRyaXZlcjsKKwlkZXZfZGJnIChkdW1teV9kZXYoZHVtKSwgImJpbmRpbmcgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLAorCQkJZHJpdmVyLT5kcml2ZXIubmFtZSk7CisJaWYgKChyZXR2YWwgPSBkcml2ZXItPmJpbmQgKCZkdW0tPmdhZGdldCkpICE9IDApIHsKKwkJZHVtLT5kcml2ZXIgPSBOVUxMOworCQlkdW0tPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvLyBGSVhNRTogQ2hlY2sgdGhlc2UgY2FsbHMgZm9yIGVycm9ycyBhbmQgcmUtb3JkZXIKKwlkcml2ZXItPmRyaXZlci5idXMgPSBkdW0tPmdhZGdldC5kZXYucGFyZW50LT5idXM7CisJZHJpdmVyX3JlZ2lzdGVyICgmZHJpdmVyLT5kcml2ZXIpOworCisJZGV2aWNlX2JpbmRfZHJpdmVyICgmZHVtLT5nYWRnZXQuZGV2KTsKKworCS8qIGtodWJkIHdpbGwgZW51bWVyYXRlIHRoaXMgaW4gYSB3aGlsZSAqLworCWR1bS0+cG9ydF9zdGF0dXMgfD0gVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OCisJCXwgKDEgPDwgVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT04pOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCAodXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIpOworCisvKiBjYWxsZXIgbXVzdCBob2xkIGxvY2sgKi8KK3N0YXRpYyB2b2lkCitzdG9wX2FjdGl2aXR5IChzdHJ1Y3QgZHVtbXkgKmR1bSwgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJc3RydWN0IGR1bW15X2VwCSplcDsKKworCS8qIHByZXZlbnQgYW55IG1vcmUgcmVxdWVzdHMgKi8KKwlkdW0tPmFkZHJlc3MgPSAwOworCisJLyogVGhlIHRpbWVyIGlzIGxlZnQgcnVubmluZyBzbyB0aGF0IG91dHN0YW5kaW5nIFVSQnMgY2FuIGZhaWwgKi8KKworCS8qIG51a2UgYW55IHBlbmRpbmcgcmVxdWVzdHMgZmlyc3QsIHNvIGRyaXZlciBpL28gaXMgcXVpZXNjZWQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChlcCwgJmR1bS0+Z2FkZ2V0LmVwX2xpc3QsIGVwLmVwX2xpc3QpCisJCW51a2UgKGR1bSwgZXApOworCisJLyogZHJpdmVyIG5vdyBkb2VzIGFueSBub24tdXNiIHF1aWVzY2luZyBuZWNlc3NhcnkgKi8KKwlpZiAoZHJpdmVyKSB7CisJCXNwaW5fdW5sb2NrICgmZHVtLT5sb2NrKTsKKwkJZHJpdmVyLT5kaXNjb25uZWN0ICgmZHVtLT5nYWRnZXQpOworCQlzcGluX2xvY2sgKCZkdW0tPmxvY2spOworCX0KK30KKworaW50Cit1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyIChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlzdHJ1Y3QgZHVtbXkJKmR1bSA9IHRoZV9jb250cm9sbGVyOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlpZiAoIWR1bSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFkcml2ZXIgfHwgZHJpdmVyICE9IGR1bS0+ZHJpdmVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRldl9kYmcgKGR1bW15X2RldihkdW0pLCAidW5yZWdpc3RlciBnYWRnZXQgZHJpdmVyICclcydcbiIsCisJCQlkcml2ZXItPmRyaXZlci5uYW1lKTsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZHVtLT5sb2NrLCBmbGFncyk7CisJc3RvcF9hY3Rpdml0eSAoZHVtLCBkcml2ZXIpOworCWR1bS0+cG9ydF9zdGF0dXMgJj0gfihVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT04gfCBVU0JfUE9SVF9TVEFUX0VOQUJMRSB8CisJCQlVU0JfUE9SVF9TVEFUX0xPV19TUEVFRCB8IFVTQl9QT1JUX1NUQVRfSElHSF9TUEVFRCk7CisJZHVtLT5wb3J0X3N0YXR1cyB8PSAoMSA8PCBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmR1bS0+bG9jaywgZmxhZ3MpOworCisJZHJpdmVyLT51bmJpbmQgKCZkdW0tPmdhZGdldCk7CisJZHVtLT5kcml2ZXIgPSBOVUxMOworCisJZGV2aWNlX3JlbGVhc2VfZHJpdmVyICgmZHVtLT5nYWRnZXQuZGV2KTsKKworCWRyaXZlcl91bnJlZ2lzdGVyICgmZHJpdmVyLT5kcml2ZXIpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MICh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKKworI3VuZGVmIGlzX2VuYWJsZWQKKworaW50IG5ldDIyODBfc2V0X2ZpZm9fbW9kZSAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwgaW50IG1vZGUpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CitFWFBPUlRfU1lNQk9MIChuZXQyMjgwX3NldF9maWZvX21vZGUpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBNQVNURVIvSE9TVCBTSURFIERSSVZFUgorICoKKyAqIHRoaXMgdXNlcyB0aGUgaGNkIGZyYW1ld29yayB0byBob29rIHVwIHRvIGhvc3Qgc2lkZSBkcml2ZXJzLgorICogaXRzIHJvb3QgaHViIHdpbGwgb25seSBoYXZlIG9uZSBkZXZpY2UsIG90aGVyd2lzZSBpdCBhY3RzIGxpa2UKKyAqIGEgbm9ybWFsIGhvc3QgY29udHJvbGxlci4KKyAqCisgKiB3aGVuIHVyYnMgYXJlIHF1ZXVlZCwgdGhleSdyZSBqdXN0IHN0dWNrIG9uIGEgbGlzdCB0aGF0IHdlCisgKiBzY2FuIGluIGEgdGltZXIgY2FsbGJhY2suICB0aGF0IGNhbGxiYWNrIGNvbm5lY3RzIHdyaXRlcyBmcm9tCisgKiB0aGUgaG9zdCB3aXRoIHJlYWRzIGZyb20gdGhlIGRldmljZSwgYW5kIHNvIG9uLCBiYXNlZCBvbiB0aGUKKyAqIHVzYiAyLjAgcnVsZXMuCisgKi8KKworc3RhdGljIGludCBkdW1teV91cmJfZW5xdWV1ZSAoCisJc3RydWN0IHVzYl9oY2QJCQkqaGNkLAorCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludAkqZXAsCisJc3RydWN0IHVyYgkJCSp1cmIsCisJaW50CQkJCW1lbV9mbGFncworKSB7CisJc3RydWN0IGR1bW15CSpkdW07CisJc3RydWN0IHVyYnAJKnVyYnA7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIgJiYgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXVyYnAgPSBrbWFsbG9jIChzaXplb2YgKnVyYnAsIG1lbV9mbGFncyk7CisJaWYgKCF1cmJwKQorCQlyZXR1cm4gLUVOT01FTTsKKwl1cmJwLT51cmIgPSB1cmI7CisKKwlkdW0gPSBoY2RfdG9fZHVtbXkgKGhjZCk7CisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkdW0tPmxvY2ssIGZsYWdzKTsKKworCWlmICghZHVtLT51ZGV2KSB7CisJCWR1bS0+dWRldiA9IHVyYi0+ZGV2OworCQl1c2JfZ2V0X2RldiAoZHVtLT51ZGV2KTsKKwl9IGVsc2UgaWYgKHVubGlrZWx5IChkdW0tPnVkZXYgIT0gdXJiLT5kZXYpKQorCQlkZXZfZXJyIChkdW1teV9kZXYoZHVtKSwgInVzYl9kZXZpY2UgYWRkcmVzcyBoYXMgY2hhbmdlZCFcbiIpOworCisJbGlzdF9hZGRfdGFpbCAoJnVyYnAtPnVyYnBfbGlzdCwgJmR1bS0+dXJicF9saXN0KTsKKwl1cmItPmhjcHJpdiA9IHVyYnA7CisJaWYgKHVzYl9waXBldHlwZSAodXJiLT5waXBlKSA9PSBQSVBFX0NPTlRST0wpCisJCXVyYi0+ZXJyb3JfY291bnQgPSAxOwkJLyogbWFyayBhcyBhIG5ldyB1cmIgKi8KKworCS8qIGtpY2sgdGhlIHNjaGVkdWxlciwgaXQnbGwgZG8gdGhlIHJlc3QgKi8KKwlpZiAoIXRpbWVyX3BlbmRpbmcgKCZkdW0tPnRpbWVyKSkKKwkJbW9kX3RpbWVyICgmZHVtLT50aW1lciwgamlmZmllcyArIDEpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmR1bS0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR1bW15X3VyYl9kZXF1ZXVlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJLyogZ2l2ZWJhY2sgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGluIHRpbWVyIGNhbGxiYWNrICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1heWJlX3NldF9zdGF0dXMgKHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cykKK3sKKwlzcGluX2xvY2sgKCZ1cmItPmxvY2spOworCWlmICh1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCisJCXVyYi0+c3RhdHVzID0gc3RhdHVzOworCXNwaW5fdW5sb2NrICgmdXJiLT5sb2NrKTsKK30KKworLyogdHJhbnNmZXIgdXAgdG8gYSBmcmFtZSdzIHdvcnRoOyBjYWxsZXIgbXVzdCBvd24gbG9jayAqLworc3RhdGljIGludAordHJhbnNmZXIgKHN0cnVjdCBkdW1teSAqZHVtLCBzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBkdW1teV9lcCAqZXAsIGludCBsaW1pdCkKK3sKKwlzdHJ1Y3QgZHVtbXlfcmVxdWVzdAkqcmVxOworCit0b3A6CisJLyogaWYgdGhlcmUncyBubyByZXF1ZXN0IHF1ZXVlZCwgdGhlIGRldmljZSBpcyBOQUtpbmc7IHJldHVybiAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkgKHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKKwkJdW5zaWduZWQJaG9zdF9sZW4sIGRldl9sZW4sIGxlbjsKKwkJaW50CQlpc19zaG9ydCwgdG9faG9zdDsKKwkJaW50CQlyZXNjYW4gPSAwOworCisJCS8qIDEuLk4gcGFja2V0cyBvZiBlcC0+ZXAubWF4cGFja2V0IGVhY2ggLi4uIHRoZSBsYXN0IG9uZQorCQkgKiBtYXkgYmUgc2hvcnQgKGluY2x1ZGluZyB6ZXJvIGxlbmd0aCkuCisJCSAqCisJCSAqIHdyaXRlciBjYW4gc2VuZCBhIHpscCBleHBsaWNpdGx5IChsZW5ndGggMCkgb3IgaW1wbGljaXRseQorCQkgKiAobGVuZ3RoIG1vZCBtYXhwYWNrZXQgemVybywgYW5kICd6ZXJvJyBmbGFnKTsgdGhleSBhbHdheXMKKwkJICogdGVybWluYXRlIHJlYWRzLgorCQkgKi8KKwkJaG9zdF9sZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLSB1cmItPmFjdHVhbF9sZW5ndGg7CisJCWRldl9sZW4gPSByZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWw7CisJCWxlbiA9IG1pbiAoaG9zdF9sZW4sIGRldl9sZW4pOworCisJCS8qIEZJWE1FIHVwZGF0ZSBlbXVsYXRlZCBkYXRhIHRvZ2dsZSB0b28gKi8KKworCQl0b19ob3N0ID0gdXNiX3BpcGVpbiAodXJiLT5waXBlKTsKKwkJaWYgKHVubGlrZWx5IChsZW4gPT0gMCkpCisJCQlpc19zaG9ydCA9IDE7CisJCWVsc2UgeworCQkJY2hhcgkJKnVidWYsICpyYnVmOworCisJCQkvKiBub3QgZW5vdWdoIGJhbmR3aWR0aCBsZWZ0PyAqLworCQkJaWYgKGxpbWl0IDwgZXAtPmVwLm1heHBhY2tldCAmJiBsaW1pdCA8IGxlbikKKwkJCQlicmVhazsKKwkJCWxlbiA9IG1pbiAobGVuLCAodW5zaWduZWQpIGxpbWl0KTsKKwkJCWlmIChsZW4gPT0gMCkKKwkJCQlicmVhazsKKworCQkJLyogdXNlIGFuIGV4dHJhIHBhc3MgZm9yIHRoZSBmaW5hbCBzaG9ydCBwYWNrZXQgKi8KKwkJCWlmIChsZW4gPiBlcC0+ZXAubWF4cGFja2V0KSB7CisJCQkJcmVzY2FuID0gMTsKKwkJCQlsZW4gLT0gKGxlbiAlIGVwLT5lcC5tYXhwYWNrZXQpOworCQkJfQorCQkJaXNfc2hvcnQgPSAobGVuICUgZXAtPmVwLm1heHBhY2tldCkgIT0gMDsKKworCQkJLyogZWxzZSB0cmFuc2ZlciBwYWNrZXQocykgKi8KKwkJCXVidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJCXJidWYgPSByZXEtPnJlcS5idWYgKyByZXEtPnJlcS5hY3R1YWw7CisJCQlpZiAodG9faG9zdCkKKwkJCQltZW1jcHkgKHVidWYsIHJidWYsIGxlbik7CisJCQllbHNlCisJCQkJbWVtY3B5IChyYnVmLCB1YnVmLCBsZW4pOworCQkJZXAtPmxhc3RfaW8gPSBqaWZmaWVzOworCisJCQlsaW1pdCAtPSBsZW47CisJCQl1cmItPmFjdHVhbF9sZW5ndGggKz0gbGVuOworCQkJcmVxLT5yZXEuYWN0dWFsICs9IGxlbjsKKwkJfQorCisJCS8qIHNob3J0IHBhY2tldHMgdGVybWluYXRlLCBtYXliZSB3aXRoIG92ZXJmbG93L3VuZGVyZmxvdy4KKwkJICogaXQncyBvbmx5IHJlYWxseSBhbiBlcnJvciB0byB3cml0ZSB0b28gbXVjaC4KKwkJICoKKwkJICogcGFydGlhbGx5IGZpbGxpbmcgYSBidWZmZXIgb3B0aW9uYWxseSBibG9ja3MgcXVldWUgYWR2YW5jZXMKKwkJICogKHNvIGNvbXBsZXRpb24gaGFuZGxlcnMgY2FuIGNsZWFuIHVwIHRoZSBxdWV1ZSkgYnV0IHdlIGRvbid0CisJCSAqIG5lZWQgdG8gZW11bGF0ZSBzdWNoIGRhdGEtaW4tZmxpZ2h0LiAgc28gd2Ugb25seSBzaG93IHBhcnQKKwkJICogb2YgdGhlIFVSQl9TSE9SVF9OT1RfT0sgZWZmZWN0OiBjb21wbGV0aW9uIHN0YXR1cy4KKwkJICovCisJCWlmIChpc19zaG9ydCkgeworCQkJaWYgKGhvc3RfbGVuID09IGRldl9sZW4pIHsKKwkJCQlyZXEtPnJlcS5zdGF0dXMgPSAwOworCQkJCW1heWJlX3NldF9zdGF0dXMgKHVyYiwgMCk7CisJCQl9IGVsc2UgaWYgKHRvX2hvc3QpIHsKKwkJCQlyZXEtPnJlcS5zdGF0dXMgPSAwOworCQkJCWlmIChkZXZfbGVuID4gaG9zdF9sZW4pCisJCQkJCW1heWJlX3NldF9zdGF0dXMgKHVyYiwgLUVPVkVSRkxPVyk7CisJCQkJZWxzZQorCQkJCQltYXliZV9zZXRfc3RhdHVzICh1cmIsCisJCQkJCQkodXJiLT50cmFuc2Zlcl9mbGFncworCQkJCQkJCSYgVVJCX1NIT1JUX05PVF9PSykKKwkJCQkJCT8gLUVSRU1PVEVJTyA6IDApOworCQkJfSBlbHNlIGlmICghdG9faG9zdCkgeworCQkJCW1heWJlX3NldF9zdGF0dXMgKHVyYiwgMCk7CisJCQkJaWYgKGhvc3RfbGVuID4gZGV2X2xlbikKKwkJCQkJcmVxLT5yZXEuc3RhdHVzID0gLUVPVkVSRkxPVzsKKwkJCQllbHNlCisJCQkJCXJlcS0+cmVxLnN0YXR1cyA9IDA7CisJCQl9CisKKwkJLyogbWFueSByZXF1ZXN0cyB0ZXJtaW5hdGUgd2l0aG91dCBhIHNob3J0IHBhY2tldCAqLworCQl9IGVsc2UgeworCQkJaWYgKHJlcS0+cmVxLmxlbmd0aCA9PSByZXEtPnJlcS5hY3R1YWwKKwkJCQkJJiYgIXJlcS0+cmVxLnplcm8pCisJCQkJcmVxLT5yZXEuc3RhdHVzID0gMDsKKwkJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPT0gdXJiLT5hY3R1YWxfbGVuZ3RoCisJCQkJCSYmICEodXJiLT50cmFuc2Zlcl9mbGFncworCQkJCQkJJiBVUkJfWkVST19QQUNLRVQpKSB7CisJCQkJbWF5YmVfc2V0X3N0YXR1cyAodXJiLCAwKTsKKwkJCX0KKwkJfQorCisJCS8qIGRldmljZSBzaWRlIGNvbXBsZXRpb24gLS0+IGNvbnRpbnVhYmxlICovCisJCWlmIChyZXEtPnJlcS5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSB7CisJCQlsaXN0X2RlbF9pbml0ICgmcmVxLT5xdWV1ZSk7CisKKwkJCXNwaW5fdW5sb2NrICgmZHVtLT5sb2NrKTsKKwkJCXJlcS0+cmVxLmNvbXBsZXRlICgmZXAtPmVwLCAmcmVxLT5yZXEpOworCQkJc3Bpbl9sb2NrICgmZHVtLT5sb2NrKTsKKworCQkJLyogcmVxdWVzdHMgbWlnaHQgaGF2ZSBiZWVuIHVubGlua2VkLi4uICovCisJCQlyZXNjYW4gPSAxOworCQl9CisKKwkJLyogaG9zdCBzaWRlIGNvbXBsZXRpb24gLS0+IHRlcm1pbmF0ZSAqLworCQlpZiAodXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKQorCQkJYnJlYWs7CisKKwkJLyogcmVzY2FuIHRvIGNvbnRpbnVlIHdpdGggYW55IG90aGVyIHF1ZXVlZCBpL28gKi8KKwkJaWYgKHJlc2NhbikKKwkJCWdvdG8gdG9wOworCX0KKwlyZXR1cm4gbGltaXQ7Cit9CisKK3N0YXRpYyBpbnQgcGVyaW9kaWNfYnl0ZXMgKHN0cnVjdCBkdW1teSAqZHVtLCBzdHJ1Y3QgZHVtbXlfZXAgKmVwKQoreworCWludAlsaW1pdCA9IGVwLT5lcC5tYXhwYWNrZXQ7CisKKwlpZiAoZHVtLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIHsKKwkJaW50CXRtcDsKKworCQkvKiBoaWdoIGJhbmR3aWR0aCBtb2RlICovCisJCXRtcCA9IGxlMTZfdG9fY3B1KGVwLT5kZXNjLT53TWF4UGFja2V0U2l6ZSk7CisJCXRtcCA9IGxlMTZfdG9fY3B1ICh0bXApOworCQl0bXAgPSAodG1wID4+IDExKSAmIDB4MDM7CisJCXRtcCAqPSA4IC8qIGFwcGxpZXMgdG8gZW50aXJlIGZyYW1lICovOworCQlsaW1pdCArPSBsaW1pdCAqIHRtcDsKKwl9CisJcmV0dXJuIGxpbWl0OworfQorCisjZGVmaW5lIGlzX2FjdGl2ZShkdW0pCSgoZHVtLT5wb3J0X3N0YXR1cyAmIFwKKwkJKFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTiB8IFVTQl9QT1JUX1NUQVRfRU5BQkxFIHwgXAorCQkJVVNCX1BPUlRfU1RBVF9TVVNQRU5EKSkgXAorCQk9PSAoVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OIHwgVVNCX1BPUlRfU1RBVF9FTkFCTEUpKQorCitzdGF0aWMgc3RydWN0IGR1bW15X2VwICpmaW5kX2VuZHBvaW50IChzdHJ1Y3QgZHVtbXkgKmR1bSwgdTggYWRkcmVzcykKK3sKKwlpbnQJCWk7CisKKwlpZiAoIWlzX2FjdGl2ZSAoZHVtKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKChhZGRyZXNzICYgflVTQl9ESVJfSU4pID09IDApCisJCXJldHVybiAmZHVtLT5lcCBbMF07CisJZm9yIChpID0gMTsgaSA8IERVTU1ZX0VORFBPSU5UUzsgaSsrKSB7CisJCXN0cnVjdCBkdW1teV9lcAkqZXAgPSAmZHVtLT5lcCBbaV07CisKKwkJaWYgKCFlcC0+ZGVzYykKKwkJCWNvbnRpbnVlOworCQlpZiAoZXAtPmRlc2MtPmJFbmRwb2ludEFkZHJlc3MgPT0gYWRkcmVzcykKKwkJCXJldHVybiBlcDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKyN1bmRlZiBpc19hY3RpdmUKKworI2RlZmluZSBEZXZfUmVxdWVzdAkoVVNCX1RZUEVfU1RBTkRBUkQgfCBVU0JfUkVDSVBfREVWSUNFKQorI2RlZmluZSBEZXZfSW5SZXF1ZXN0CShEZXZfUmVxdWVzdCB8IFVTQl9ESVJfSU4pCisjZGVmaW5lIEludGZfUmVxdWVzdAkoVVNCX1RZUEVfU1RBTkRBUkQgfCBVU0JfUkVDSVBfSU5URVJGQUNFKQorI2RlZmluZSBJbnRmX0luUmVxdWVzdAkoSW50Zl9SZXF1ZXN0IHwgVVNCX0RJUl9JTikKKyNkZWZpbmUgRXBfUmVxdWVzdAkoVVNCX1RZUEVfU1RBTkRBUkQgfCBVU0JfUkVDSVBfRU5EUE9JTlQpCisjZGVmaW5lIEVwX0luUmVxdWVzdAkoRXBfUmVxdWVzdCB8IFVTQl9ESVJfSU4pCisKKy8qIGRyaXZlIGJvdGggc2lkZXMgb2YgdGhlIHRyYW5zZmVyczsgbG9va3MgbGlrZSBpcnEgaGFuZGxlcnMgdG8KKyAqIGJvdGggZHJpdmVycyBleGNlcHQgdGhlIGNhbGxiYWNrcyBhcmVuJ3QgaW5faXJxKCkuCisgKi8KK3N0YXRpYyB2b2lkIGR1bW15X3RpbWVyICh1bnNpZ25lZCBsb25nIF9kdW0pCit7CisJc3RydWN0IGR1bW15CQkqZHVtID0gKHN0cnVjdCBkdW1teSAqKSBfZHVtOworCXN0cnVjdCB1cmJwCQkqdXJicCwgKnRtcDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlpbnQJCQlsaW1pdCwgdG90YWw7CisJaW50CQkJaTsKKworCS8qIHNpbXBsaXN0aWMgbW9kZWwgZm9yIG9uZSBmcmFtZSdzIGJhbmR3aWR0aCAqLworCXN3aXRjaCAoZHVtLT5nYWRnZXQuc3BlZWQpIHsKKwljYXNlIFVTQl9TUEVFRF9MT1c6CisJCXRvdGFsID0gOC8qYnl0ZXMqLyAqIDEyLypwYWNrZXRzKi87CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCXRvdGFsID0gNjQvKmJ5dGVzKi8gKiAxOS8qcGFja2V0cyovOworCQlicmVhazsKKwljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQl0b3RhbCA9IDUxMi8qYnl0ZXMqLyAqIDEzLypwYWNrZXRzKi8gKiA4Lyp1ZnJhbWVzKi87CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIgKGR1bW15X2RldihkdW0pLCAiYm9ndXMgZGV2aWNlIHNwZWVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEZJWE1FIGlmIEhaICE9IDEwMDAgdGhpcyB3aWxsIHByb2JhYmx5IG1pc2JlaGF2ZSAuLi4gKi8KKworCS8qIGxvb2sgYXQgZWFjaCB1cmIgcXVldWVkIGJ5IHRoZSBob3N0IHNpZGUgZHJpdmVyICovCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkdW0tPmxvY2ssIGZsYWdzKTsKKworCWlmICghZHVtLT51ZGV2KSB7CisJCWRldl9lcnIgKGR1bW15X2RldihkdW0pLAorCQkJCSJ0aW1lciBmaXJlZCB3aXRoIG5vIFVSQnMgcGVuZGluZz9cbiIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZHVtLT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgRFVNTVlfRU5EUE9JTlRTOyBpKyspIHsKKwkJaWYgKCFlcF9uYW1lIFtpXSkKKwkJCWJyZWFrOworCQlkdW0tPmVwIFtpXS5hbHJlYWR5X3NlZW4gPSAwOworCX0KKworcmVzdGFydDoKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUgKHVyYnAsIHRtcCwgJmR1bS0+dXJicF9saXN0LCB1cmJwX2xpc3QpIHsKKwkJc3RydWN0IHVyYgkJKnVyYjsKKwkJc3RydWN0IGR1bW15X3JlcXVlc3QJKnJlcTsKKwkJdTgJCQlhZGRyZXNzOworCQlzdHJ1Y3QgZHVtbXlfZXAJCSplcCA9IE5VTEw7CisJCWludAkJCXR5cGU7CisKKwkJdXJiID0gdXJicC0+dXJiOworCQlpZiAodXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSB7CisJCQkvKiBsaWtlbHkgaXQgd2FzIGp1c3QgdW5saW5rZWQgKi8KKwkJCWdvdG8gcmV0dXJuX3VyYjsKKwkJfQorCQl0eXBlID0gdXNiX3BpcGV0eXBlICh1cmItPnBpcGUpOworCisJCS8qIHVzZWQgdXAgdGhpcyBmcmFtZSdzIG5vbi1wZXJpb2RpYyBiYW5kd2lkdGg/CisJCSAqIEZJWE1FIHRoZXJlJ3MgaW5maW5pdGUgYmFuZHdpZHRoIGZvciBjb250cm9sIGFuZAorCQkgKiBwZXJpb2RpYyB0cmFuc2ZlcnMgLi4uIHVucmVhbGlzdGljLgorCQkgKi8KKwkJaWYgKHRvdGFsIDw9IDAgJiYgdHlwZSA9PSBQSVBFX0JVTEspCisJCQljb250aW51ZTsKKworCQkvKiBmaW5kIHRoZSBnYWRnZXQncyBlcCBmb3IgdGhpcyByZXF1ZXN0IChpZiBjb25maWd1cmVkKSAqLworCQlhZGRyZXNzID0gdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKTsKKwkJaWYgKHVzYl9waXBlaW4gKHVyYi0+cGlwZSkpCisJCQlhZGRyZXNzIHw9IFVTQl9ESVJfSU47CisJCWVwID0gZmluZF9lbmRwb2ludChkdW0sIGFkZHJlc3MpOworCQlpZiAoIWVwKSB7CisJCQkvKiBzZXRfY29uZmlndXJhdGlvbigpIGRpc2FncmVlbWVudCAqLworCQkJZGV2X2RiZyAoZHVtbXlfZGV2KGR1bSksCisJCQkJIm5vIGVwIGNvbmZpZ3VyZWQgZm9yIHVyYiAlcFxuIiwKKwkJCQl1cmIpOworCQkJbWF5YmVfc2V0X3N0YXR1cyAodXJiLCAtRVBST1RPKTsKKwkJCWdvdG8gcmV0dXJuX3VyYjsKKwkJfQorCisJCWlmIChlcC0+YWxyZWFkeV9zZWVuKQorCQkJY29udGludWU7CisJCWVwLT5hbHJlYWR5X3NlZW4gPSAxOworCQlpZiAoZXAgPT0gJmR1bS0+ZXAgWzBdICYmIHVyYi0+ZXJyb3JfY291bnQpIHsKKwkJCWVwLT5zZXR1cF9zdGFnZSA9IDE7CS8qIGEgbmV3IHVyYiAqLworCQkJdXJiLT5lcnJvcl9jb3VudCA9IDA7CisJCX0KKwkJaWYgKGVwLT5oYWx0ZWQgJiYgIWVwLT5zZXR1cF9zdGFnZSkgeworCQkJLyogTk9URTogbXVzdCBub3QgYmUgaXNvISAqLworCQkJZGV2X2RiZyAoZHVtbXlfZGV2KGR1bSksICJlcCAlcyBoYWx0ZWQsIHVyYiAlcFxuIiwKKwkJCQkJZXAtPmVwLm5hbWUsIHVyYik7CisJCQltYXliZV9zZXRfc3RhdHVzICh1cmIsIC1FUElQRSk7CisJCQlnb3RvIHJldHVybl91cmI7CisJCX0KKwkJLyogRklYTUUgbWFrZSBzdXJlIGJvdGggZW5kcyBhZ3JlZSBvbiBtYXhwYWNrZXQgKi8KKworCQkvKiBoYW5kbGUgY29udHJvbCByZXF1ZXN0cyAqLworCQlpZiAoZXAgPT0gJmR1bS0+ZXAgWzBdICYmIGVwLT5zZXR1cF9zdGFnZSkgeworCQkJc3RydWN0IHVzYl9jdHJscmVxdWVzdAkJc2V0dXA7CisJCQlpbnQJCQkJdmFsdWUgPSAxOworCQkJc3RydWN0IGR1bW15X2VwCQkJKmVwMjsKKworCQkJc2V0dXAgPSAqKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QqKSB1cmItPnNldHVwX3BhY2tldDsKKwkJCWxlMTZfdG9fY3B1cyAoJnNldHVwLndJbmRleCk7CisJCQlsZTE2X3RvX2NwdXMgKCZzZXR1cC53VmFsdWUpOworCQkJbGUxNl90b19jcHVzICgmc2V0dXAud0xlbmd0aCk7CisJCQlpZiAoc2V0dXAud0xlbmd0aCAhPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpIHsKKwkJCQltYXliZV9zZXRfc3RhdHVzICh1cmIsIC1FT1ZFUkZMT1cpOworCQkJCWdvdG8gcmV0dXJuX3VyYjsKKwkJCX0KKworCQkJLyogcGFyYW5vaWEsIGluIGNhc2Ugb2Ygc3RhbGUgcXVldWVkIGRhdGEgKi8KKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkgKHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKKwkJCQlsaXN0X2RlbF9pbml0ICgmcmVxLT5xdWV1ZSk7CisJCQkJcmVxLT5yZXEuc3RhdHVzID0gLUVPVkVSRkxPVzsKKwkJCQlkZXZfZGJnIChkdW1teV9kZXYoZHVtKSwgInN0YWxlIHJlcSA9ICVwXG4iLAorCQkJCQkJcmVxKTsKKworCQkJCXNwaW5fdW5sb2NrICgmZHVtLT5sb2NrKTsKKwkJCQlyZXEtPnJlcS5jb21wbGV0ZSAoJmVwLT5lcCwgJnJlcS0+cmVxKTsKKwkJCQlzcGluX2xvY2sgKCZkdW0tPmxvY2spOworCQkJCWVwLT5hbHJlYWR5X3NlZW4gPSAwOworCQkJCWdvdG8gcmVzdGFydDsKKwkJCX0KKworCQkJLyogZ2FkZ2V0IGRyaXZlciBuZXZlciBzZWVzIHNldF9hZGRyZXNzIG9yIG9wZXJhdGlvbnMKKwkJCSAqIG9uIHN0YW5kYXJkIGZlYXR1cmUgZmxhZ3MuICBzb21lIGhhcmR3YXJlIGRvZXNuJ3QKKwkJCSAqIGV2ZW4gZXhwb3NlIHRoZW0uCisJCQkgKi8KKwkJCWVwLT5sYXN0X2lvID0gamlmZmllczsKKwkJCWVwLT5zZXR1cF9zdGFnZSA9IDA7CisJCQllcC0+aGFsdGVkID0gMDsKKwkJCXN3aXRjaCAoc2V0dXAuYlJlcXVlc3QpIHsKKwkJCWNhc2UgVVNCX1JFUV9TRVRfQUREUkVTUzoKKwkJCQlpZiAoc2V0dXAuYlJlcXVlc3RUeXBlICE9IERldl9SZXF1ZXN0KQorCQkJCQlicmVhazsKKwkJCQlkdW0tPmFkZHJlc3MgPSBzZXR1cC53VmFsdWU7CisJCQkJbWF5YmVfc2V0X3N0YXR1cyAodXJiLCAwKTsKKwkJCQlkZXZfZGJnIChkdW1teV9kZXYoZHVtKSwgInNldF9hZGRyZXNzID0gJWRcbiIsCisJCQkJCQlzZXR1cC53VmFsdWUpOworCQkJCXZhbHVlID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgVVNCX1JFUV9TRVRfRkVBVFVSRToKKwkJCQlpZiAoc2V0dXAuYlJlcXVlc3RUeXBlID09IERldl9SZXF1ZXN0KSB7CisJCQkJCXZhbHVlID0gMDsKKwkJCQkJc3dpdGNoIChzZXR1cC53VmFsdWUpIHsKKwkJCQkJY2FzZSBVU0JfREVWSUNFX1JFTU9URV9XQUtFVVA6CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCXZhbHVlID0gLUVPUE5PVFNVUFA7CisJCQkJCX0KKwkJCQkJaWYgKHZhbHVlID09IDApIHsKKwkJCQkJCWR1bS0+ZGV2c3RhdHVzIHw9CisJCQkJCQkJKDEgPDwgc2V0dXAud1ZhbHVlKTsKKwkJCQkJCW1heWJlX3NldF9zdGF0dXMgKHVyYiwgMCk7CisJCQkJCX0KKworCQkJCX0gZWxzZSBpZiAoc2V0dXAuYlJlcXVlc3RUeXBlID09IEVwX1JlcXVlc3QpIHsKKwkJCQkJLy8gZW5kcG9pbnQgaGFsdAorCQkJCQllcDIgPSBmaW5kX2VuZHBvaW50IChkdW0sCisJCQkJCQkJc2V0dXAud0luZGV4KTsKKwkJCQkJaWYgKCFlcDIpIHsKKwkJCQkJCXZhbHVlID0gLUVPUE5PVFNVUFA7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQllcDItPmhhbHRlZCA9IDE7CisJCQkJCXZhbHVlID0gMDsKKwkJCQkJbWF5YmVfc2V0X3N0YXR1cyAodXJiLCAwKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRToKKwkJCQlpZiAoc2V0dXAuYlJlcXVlc3RUeXBlID09IERldl9SZXF1ZXN0KSB7CisJCQkJCXN3aXRjaCAoc2V0dXAud1ZhbHVlKSB7CisJCQkJCWNhc2UgVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQOgorCQkJCQkJZHVtLT5kZXZzdGF0dXMgJj0gfigxIDw8CisJCQkJCQkJVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQKTsKKwkJCQkJCXZhbHVlID0gMDsKKwkJCQkJCW1heWJlX3NldF9zdGF0dXMgKHVyYiwgMCk7CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCXZhbHVlID0gLUVPUE5PVFNVUFA7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0gZWxzZSBpZiAoc2V0dXAuYlJlcXVlc3RUeXBlID09IEVwX1JlcXVlc3QpIHsKKwkJCQkJLy8gZW5kcG9pbnQgaGFsdAorCQkJCQllcDIgPSBmaW5kX2VuZHBvaW50IChkdW0sCisJCQkJCQkJc2V0dXAud0luZGV4KTsKKwkJCQkJaWYgKCFlcDIpIHsKKwkJCQkJCXZhbHVlID0gLUVPUE5PVFNVUFA7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQllcDItPmhhbHRlZCA9IDA7CisJCQkJCXZhbHVlID0gMDsKKwkJCQkJbWF5YmVfc2V0X3N0YXR1cyAodXJiLCAwKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFVTQl9SRVFfR0VUX1NUQVRVUzoKKwkJCQlpZiAoc2V0dXAuYlJlcXVlc3RUeXBlID09IERldl9JblJlcXVlc3QKKwkJCQkJCXx8IHNldHVwLmJSZXF1ZXN0VHlwZQorCQkJCQkJCT09IEludGZfSW5SZXF1ZXN0CisJCQkJCQl8fCBzZXR1cC5iUmVxdWVzdFR5cGUKKwkJCQkJCQk9PSBFcF9JblJlcXVlc3QKKwkJCQkJCSkgeworCQkJCQljaGFyICpidWY7CisKKwkJCQkJLy8gZGV2aWNlOiByZW1vdGUgd2FrZXVwLCBzZWxmcG93ZXJlZAorCQkJCQkvLyBpbnRlcmZhY2U6IG5vdGhpbmcKKwkJCQkJLy8gZW5kcG9pbnQ6IGhhbHQKKwkJCQkJYnVmID0gKGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwkJCQkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IDApIHsKKwkJCQkJCWlmIChzZXR1cC5iUmVxdWVzdFR5cGUgPT0KKwkJCQkJCQkJRXBfSW5SZXF1ZXN0KSB7CisJZXAyID0gZmluZF9lbmRwb2ludCAoZHVtLCBzZXR1cC53SW5kZXgpOworCWlmICghZXAyKSB7CisJCXZhbHVlID0gLUVPUE5PVFNVUFA7CisJCWJyZWFrOworCX0KKwlidWYgWzBdID0gZXAyLT5oYWx0ZWQ7CisJCQkJCQl9IGVsc2UgaWYgKHNldHVwLmJSZXF1ZXN0VHlwZSA9PQorCQkJCQkJCQlEZXZfSW5SZXF1ZXN0KSB7CisJCQkJCQkJYnVmIFswXSA9ICh1OCkKKwkJCQkJCQkJZHVtLT5kZXZzdGF0dXM7CisJCQkJCQl9IGVsc2UKKwkJCQkJCQlidWYgWzBdID0gMDsKKwkJCQkJfQorCQkJCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID4gMSkKKwkJCQkJCWJ1ZiBbMV0gPSAwOworCQkJCQl1cmItPmFjdHVhbF9sZW5ndGggPSBtaW4gKDIsCisJCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCQkJCQl2YWx1ZSA9IDA7CisJCQkJCW1heWJlX3NldF9zdGF0dXMgKHVyYiwgMCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBnYWRnZXQgZHJpdmVyIGhhbmRsZXMgYWxsIG90aGVyIHJlcXVlc3RzLiAgYmxvY2sKKwkJCSAqIHVudGlsIHNldHVwKCkgcmV0dXJuczsgbm8gcmVlbnRyYW5jeSBpc3N1ZXMgZXRjLgorCQkJICovCisJCQlpZiAodmFsdWUgPiAwKSB7CisJCQkJc3Bpbl91bmxvY2sgKCZkdW0tPmxvY2spOworCQkJCXZhbHVlID0gZHVtLT5kcml2ZXItPnNldHVwICgmZHVtLT5nYWRnZXQsCisJCQkJCQkmc2V0dXApOworCQkJCXNwaW5fbG9jayAoJmR1bS0+bG9jayk7CisKKwkJCQlpZiAodmFsdWUgPj0gMCkgeworCQkJCQkvKiBubyBkZWxheXMgKG1heCA2NEtCIGRhdGEgc3RhZ2UpICovCisJCQkJCWxpbWl0ID0gNjQqMTAyNDsKKwkJCQkJZ290byB0cmVhdF9jb250cm9sX2xpa2VfYnVsazsKKwkJCQl9CisJCQkJLyogZXJyb3IsIHNlZSBiZWxvdyAqLworCQkJfQorCisJCQlpZiAodmFsdWUgPCAwKSB7CisJCQkJaWYgKHZhbHVlICE9IC1FT1BOT1RTVVBQKQorCQkJCQlkZXZfZGJnIChkdW1teV9kZXYoZHVtKSwKKwkJCQkJCSJzZXR1cCAtLT4gJWRcbiIsCisJCQkJCQl2YWx1ZSk7CisJCQkJbWF5YmVfc2V0X3N0YXR1cyAodXJiLCAtRVBJUEUpOworCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJCQl9CisKKwkJCWdvdG8gcmV0dXJuX3VyYjsKKwkJfQorCisJCS8qIG5vbi1jb250cm9sIHJlcXVlc3RzICovCisJCWxpbWl0ID0gdG90YWw7CisJCXN3aXRjaCAodXNiX3BpcGV0eXBlICh1cmItPnBpcGUpKSB7CisJCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKKwkJCS8qIEZJWE1FIGlzIGl0IHVyYi0+aW50ZXJ2YWwgc2luY2UgdGhlIGxhc3QgeGZlcj8KKwkJCSAqIHVzZSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLgorCQkJICogY29tcGxldGUgd2hldGhlciBvciBub3QgZXAgaGFzIHJlcXVlc3RzIHF1ZXVlZC4KKwkJCSAqIHJlcG9ydCByYW5kb20gZXJyb3JzLCB0byBkZWJ1ZyBkcml2ZXJzLgorCQkJICovCisJCQlsaW1pdCA9IG1heCAobGltaXQsIHBlcmlvZGljX2J5dGVzIChkdW0sIGVwKSk7CisJCQltYXliZV9zZXRfc3RhdHVzICh1cmIsIC1FTk9TWVMpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJCS8qIEZJWE1FIGlzIGl0IHVyYi0+aW50ZXJ2YWwgc2luY2UgdGhlIGxhc3QgeGZlcj8KKwkJCSAqIHRoaXMgYWxtb3N0IGNlcnRhaW5seSBwb2xscyB0b28gZmFzdC4KKwkJCSAqLworCQkJbGltaXQgPSBtYXggKGxpbWl0LCBwZXJpb2RpY19ieXRlcyAoZHVtLCBlcCkpOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKworCQkvLyBjYXNlIFBJUEVfQlVMSzogIGNhc2UgUElQRV9DT05UUk9MOgorCQlkZWZhdWx0OgorCQl0cmVhdF9jb250cm9sX2xpa2VfYnVsazoKKwkJCWVwLT5sYXN0X2lvID0gamlmZmllczsKKwkJCXRvdGFsID0gdHJhbnNmZXIgKGR1bSwgdXJiLCBlcCwgbGltaXQpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBpbmNvbXBsZXRlIHRyYW5zZmVyPyAqLworCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKQorCQkJY29udGludWU7CisKK3JldHVybl91cmI6CisJCXVyYi0+aGNwcml2ID0gTlVMTDsKKwkJbGlzdF9kZWwgKCZ1cmJwLT51cmJwX2xpc3QpOworCQlrZnJlZSAodXJicCk7CisJCWlmIChlcCkKKwkJCWVwLT5hbHJlYWR5X3NlZW4gPSBlcC0+c2V0dXBfc3RhZ2UgPSAwOworCisJCXNwaW5fdW5sb2NrICgmZHVtLT5sb2NrKTsKKwkJdXNiX2hjZF9naXZlYmFja191cmIgKGR1bW15X3RvX2hjZChkdW0pLCB1cmIsIE5VTEwpOworCQlzcGluX2xvY2sgKCZkdW0tPmxvY2spOworCisJCWdvdG8gcmVzdGFydDsKKwl9CisKKwkvKiB3YW50IGEgMSBtc2VjIGRlbGF5IGhlcmUgKi8KKwlpZiAoIWxpc3RfZW1wdHkgKCZkdW0tPnVyYnBfbGlzdCkpCisJCW1vZF90aW1lciAoJmR1bS0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEpKTsKKwllbHNlIHsKKwkJdXNiX3B1dF9kZXYgKGR1bS0+dWRldik7CisJCWR1bS0+dWRldiA9IE5VTEw7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmR1bS0+bG9jaywgZmxhZ3MpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFBPUlRfQ19NQVNLIFwKKwkgKCgxIDw8IFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OKSBcCisJfCAoMSA8PCBVU0JfUE9SVF9GRUFUX0NfRU5BQkxFKSBcCisJfCAoMSA8PCBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORCkgXAorCXwgKDEgPDwgVVNCX1BPUlRfRkVBVF9DX09WRVJfQ1VSUkVOVCkgXAorCXwgKDEgPDwgVVNCX1BPUlRfRkVBVF9DX1JFU0VUKSkKKworc3RhdGljIGludCBkdW1teV9odWJfc3RhdHVzIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IGR1bW15CQkqZHVtOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCWludAkJCXJldHZhbDsKKworCWR1bSA9IGhjZF90b19kdW1teSAoaGNkKTsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZHVtLT5sb2NrLCBmbGFncyk7CisJaWYgKCEoZHVtLT5wb3J0X3N0YXR1cyAmIFBPUlRfQ19NQVNLKSkKKwkJcmV0dmFsID0gMDsKKwllbHNlIHsKKwkJKmJ1ZiA9ICgxIDw8IDEpOworCQlkZXZfZGJnIChkdW1teV9kZXYoZHVtKSwgInBvcnQgc3RhdHVzIDB4JTA4eCBoYXMgY2hhbmdlc1xuIiwKKwkJCWR1bS0+cG9ydF9zdGF0dXMpOworCQlyZXR2YWwgPSAxOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZHVtLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitodWJfZGVzY3JpcHRvciAoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqZGVzYykKK3sKKwltZW1zZXQgKGRlc2MsIDAsIHNpemVvZiAqZGVzYyk7CisJZGVzYy0+YkRlc2NyaXB0b3JUeXBlID0gMHgyOTsKKwlkZXNjLT5iRGVzY0xlbmd0aCA9IDk7CisJZGVzYy0+d0h1YkNoYXJhY3RlcmlzdGljcyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDAwMSk7CisJZGVzYy0+Yk5iclBvcnRzID0gMTsKKwlkZXNjLT5iaXRtYXAgWzBdID0gMHhmZjsKKwlkZXNjLT5iaXRtYXAgWzFdID0gMHhmZjsKK30KKworc3RhdGljIGludCBkdW1teV9odWJfY29udHJvbCAoCisJc3RydWN0IHVzYl9oY2QJKmhjZCwKKwl1MTYJCXR5cGVSZXEsCisJdTE2CQl3VmFsdWUsCisJdTE2CQl3SW5kZXgsCisJY2hhcgkJKmJ1ZiwKKwl1MTYJCXdMZW5ndGgKKykgeworCXN0cnVjdCBkdW1teQkqZHVtOworCWludAkJcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJZHVtID0gaGNkX3RvX2R1bW15IChoY2QpOworCXNwaW5fbG9ja19pcnFzYXZlICgmZHVtLT5sb2NrLCBmbGFncyk7CisJc3dpdGNoICh0eXBlUmVxKSB7CisJY2FzZSBDbGVhckh1YkZlYXR1cmU6CisJCWJyZWFrOworCWNhc2UgQ2xlYXJQb3J0RmVhdHVyZToKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJCQlpZiAoZHVtLT5wb3J0X3N0YXR1cyAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfU1VTUEVORCkpIHsKKwkJCQkvKiAyMG1zZWMgcmVzdW1lIHNpZ25hbGluZyAqLworCQkJCWR1bS0+cmVzdW1pbmcgPSAxOworCQkJCWR1bS0+cmVfdGltZW91dCA9IGppZmZpZXMgKworCQkJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMjApOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKKwkJCWR1bS0+cG9ydF9zdGF0dXMgPSAwOworCQkJZHVtLT5yZXN1bWluZyA9IDA7CisJCQlzdG9wX2FjdGl2aXR5KGR1bSwgZHVtLT5kcml2ZXIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkdW0tPnBvcnRfc3RhdHVzICY9IH4oMSA8PCB3VmFsdWUpOworCQl9CisJCWJyZWFrOworCWNhc2UgR2V0SHViRGVzY3JpcHRvcjoKKwkJaHViX2Rlc2NyaXB0b3IgKChzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yICopIGJ1Zik7CisJCWJyZWFrOworCWNhc2UgR2V0SHViU3RhdHVzOgorCQkqKHUzMiAqKSBidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJYnJlYWs7CisJY2FzZSBHZXRQb3J0U3RhdHVzOgorCQlpZiAod0luZGV4ICE9IDEpCisJCQlyZXR2YWwgPSAtRVBJUEU7CisKKwkJLyogd2hvZXZlciByZXNldHMgb3IgcmVzdW1lcyBtdXN0IEdldFBvcnRTdGF0dXMgdG8KKwkJICogY29tcGxldGUgaXQhIQorCQkgKi8KKwkJaWYgKGR1bS0+cmVzdW1pbmcgJiYgdGltZV9hZnRlciAoamlmZmllcywgZHVtLT5yZV90aW1lb3V0KSkgeworCQkJZHVtLT5wb3J0X3N0YXR1cyB8PSAoMSA8PCBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORCk7CisJCQlkdW0tPnBvcnRfc3RhdHVzICY9IH4oMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpOworCQkJZHVtLT5yZXN1bWluZyA9IDA7CisJCQlkdW0tPnJlX3RpbWVvdXQgPSAwOworCQkJaWYgKGR1bS0+ZHJpdmVyICYmIGR1bS0+ZHJpdmVyLT5yZXN1bWUpIHsKKwkJCQlzcGluX3VubG9jayAoJmR1bS0+bG9jayk7CisJCQkJZHVtLT5kcml2ZXItPnJlc3VtZSAoJmR1bS0+Z2FkZ2V0KTsKKwkJCQlzcGluX2xvY2sgKCZkdW0tPmxvY2spOworCQkJfQorCQl9CisJCWlmICgoZHVtLT5wb3J0X3N0YXR1cyAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfUkVTRVQpKSAhPSAwCisJCQkJJiYgdGltZV9hZnRlciAoamlmZmllcywgZHVtLT5yZV90aW1lb3V0KSkgeworCQkJZHVtLT5wb3J0X3N0YXR1cyB8PSAoMSA8PCBVU0JfUE9SVF9GRUFUX0NfUkVTRVQpOworCQkJZHVtLT5wb3J0X3N0YXR1cyAmPSB+KDEgPDwgVVNCX1BPUlRfRkVBVF9SRVNFVCk7CisJCQlkdW0tPnJlX3RpbWVvdXQgPSAwOworCQkJaWYgKGR1bS0+ZHJpdmVyKSB7CisJCQkJZHVtLT5wb3J0X3N0YXR1cyB8PSBVU0JfUE9SVF9TVEFUX0VOQUJMRTsKKwkJCQkvKiBnaXZlIGl0IHRoZSBiZXN0IHNwZWVkIHdlIGFncmVlIG9uICovCisJCQkJZHVtLT5nYWRnZXQuc3BlZWQgPSBkdW0tPmRyaXZlci0+c3BlZWQ7CisJCQkJZHVtLT5nYWRnZXQuZXAwLT5tYXhwYWNrZXQgPSA2NDsKKwkJCQlzd2l0Y2ggKGR1bS0+Z2FkZ2V0LnNwZWVkKSB7CisJCQkJY2FzZSBVU0JfU1BFRURfSElHSDoKKwkJCQkJZHVtLT5wb3J0X3N0YXR1cyB8PQorCQkJCQkJVVNCX1BPUlRfU1RBVF9ISUdIX1NQRUVEOworCQkJCQlicmVhazsKKwkJCQljYXNlIFVTQl9TUEVFRF9MT1c6CisJCQkJCWR1bS0+Z2FkZ2V0LmVwMC0+bWF4cGFja2V0ID0gODsKKwkJCQkJZHVtLT5wb3J0X3N0YXR1cyB8PQorCQkJCQkJVVNCX1BPUlRfU1RBVF9MT1dfU1BFRUQ7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWR1bS0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCQkoKHUxNiAqKSBidWYpWzBdID0gY3B1X3RvX2xlMTYgKGR1bS0+cG9ydF9zdGF0dXMpOworCQkoKHUxNiAqKSBidWYpWzFdID0gY3B1X3RvX2xlMTYgKGR1bS0+cG9ydF9zdGF0dXMgPj4gMTYpOworCQlicmVhazsKKwljYXNlIFNldEh1YkZlYXR1cmU6CisJCXJldHZhbCA9IC1FUElQRTsKKwkJYnJlYWs7CisJY2FzZSBTZXRQb3J0RmVhdHVyZToKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJCQlpZiAoKGR1bS0+cG9ydF9zdGF0dXMgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpKQorCQkJCQk9PSAwKSB7CisJCQkJZHVtLT5wb3J0X3N0YXR1cyB8PQorCQkJCQkJKDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EKTsKKwkJCQlpZiAoZHVtLT5kcml2ZXIgJiYgZHVtLT5kcml2ZXItPnN1c3BlbmQpIHsKKwkJCQkJc3Bpbl91bmxvY2sgKCZkdW0tPmxvY2spOworCQkJCQlkdW0tPmRyaXZlci0+c3VzcGVuZCAoJmR1bS0+Z2FkZ2V0KTsKKwkJCQkJc3Bpbl9sb2NrICgmZHVtLT5sb2NrKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1JFU0VUOgorCQkJLyogaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIGRpc2Nvbm5lY3QgZmlyc3QgKi8KKwkJCWlmIChkdW0tPnBvcnRfc3RhdHVzICYgVVNCX1BPUlRfU1RBVF9FTkFCTEUpIHsKKwkJCQlkdW0tPnBvcnRfc3RhdHVzICY9IH4oVVNCX1BPUlRfU1RBVF9FTkFCTEUKKwkJCQkJCXwgVVNCX1BPUlRfU1RBVF9MT1dfU1BFRUQKKwkJCQkJCXwgVVNCX1BPUlRfU1RBVF9ISUdIX1NQRUVEKTsKKwkJCQlpZiAoZHVtLT5kcml2ZXIpIHsKKwkJCQkJZGV2X2RiZyAoZHVtbXlfZGV2KGR1bSksCisJCQkJCQkJImRpc2Nvbm5lY3RcbiIpOworCQkJCQlzdG9wX2FjdGl2aXR5IChkdW0sIGR1bS0+ZHJpdmVyKTsKKwkJCQl9CisKKwkJCQkvKiBGSVhNRSB0ZXN0IHRoYXQgY29kZSBwYXRoISAqLworCQkJfQorCQkJLyogNTBtc2VjIHJlc2V0IHNpZ25hbGluZyAqLworCQkJZHVtLT5yZV90aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTApOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJZGVmYXVsdDoKKwkJCWR1bS0+cG9ydF9zdGF0dXMgfD0gKDEgPDwgd1ZhbHVlKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9kYmcgKGR1bW15X2RldihkdW0pLAorCQkJImh1YiBjb250cm9sIHJlcSUwNHggdiUwNHggaSUwNHggbCVkXG4iLAorCQkJdHlwZVJlcSwgd1ZhbHVlLCB3SW5kZXgsIHdMZW5ndGgpOworCisJCS8qICJwcm90b2NvbCBzdGFsbCIgb24gZXJyb3IgKi8KKwkJcmV0dmFsID0gLUVQSVBFOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZHVtLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIHNzaXplX3QKK3Nob3dfdXJiIChjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50IGVwID0gdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKTsKKworCXJldHVybiBzbnByaW50ZiAoYnVmLCBzaXplLAorCQkidXJiLyVwICVzIGVwJWQlcyVzIGxlbiAlZC8lZFxuIiwKKwkJdXJiLAorCQkoeyBjaGFyICpzOworCQkgc3dpdGNoICh1cmItPmRldi0+c3BlZWQpIHsKKwkJIGNhc2UgVVNCX1NQRUVEX0xPVzoJcyA9ICJscyI7IGJyZWFrOworCQkgY2FzZSBVU0JfU1BFRURfRlVMTDoJcyA9ICJmcyI7IGJyZWFrOworCQkgY2FzZSBVU0JfU1BFRURfSElHSDoJcyA9ICJocyI7IGJyZWFrOworCQkgZGVmYXVsdDoJCXMgPSAiPyI7IGJyZWFrOworCQkgfTsgczsgfSksCisJCWVwLCBlcCA/ICh1c2JfcGlwZWluICh1cmItPnBpcGUpID8gImluIiA6ICJvdXQiKSA6ICIiLAorCQkoeyBjaGFyICpzOyBcCisJCSBzd2l0Y2ggKHVzYl9waXBldHlwZSAodXJiLT5waXBlKSkgeyBcCisJCSBjYXNlIFBJUEVfQ09OVFJPTDoJcyA9ICIiOyBicmVhazsgXAorCQkgY2FzZSBQSVBFX0JVTEs6CXMgPSAiLWJ1bGsiOyBicmVhazsgXAorCQkgY2FzZSBQSVBFX0lOVEVSUlVQVDoJcyA9ICItaW50IjsgYnJlYWs7IFwKKwkJIGRlZmF1bHQ6IAkJcyA9ICItaXNvIjsgYnJlYWs7IFwKKwkJfTsgczt9KSwKKwkJdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworfQorCitzdGF0aWMgc3NpemVfdAorc2hvd191cmJzIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YSAoZGV2KTsKKwlzdHJ1Y3QgZHVtbXkJCSpkdW0gPSBoY2RfdG9fZHVtbXkgKGhjZCk7CisJc3RydWN0IHVyYnAJCSp1cmJwOworCXNpemVfdAkJCXNpemUgPSAwOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkdW0tPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5ICh1cmJwLCAmZHVtLT51cmJwX2xpc3QsIHVyYnBfbGlzdCkgeworCQlzaXplX3QJCXRlbXA7CisKKwkJdGVtcCA9IHNob3dfdXJiIChidWYsIFBBR0VfU0laRSAtIHNpemUsIHVyYnAtPnVyYik7CisJCWJ1ZiArPSB0ZW1wOworCQlzaXplICs9IHRlbXA7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkdW0tPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBzaXplOworfQorc3RhdGljIERFVklDRV9BVFRSICh1cmJzLCBTX0lSVUdPLCBzaG93X3VyYnMsIE5VTEwpOworCitzdGF0aWMgaW50IGR1bW15X3N0YXJ0IChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBkdW1teQkJKmR1bTsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqcm9vdDsKKwlpbnQJCQlyZXR2YWw7CisKKwlkdW0gPSBoY2RfdG9fZHVtbXkgKGhjZCk7CisKKwkvKgorCSAqIE1BU1RFUiBzaWRlIGluaXQgLi4uIHdlIGVtdWxhdGUgYSByb290IGh1YiB0aGF0J2xsIG9ubHkgZXZlcgorCSAqIHRhbGsgdG8gb25lIGRldmljZSAodGhlIHNsYXZlIHNpZGUpLiAgQWxzbyBhcHBlYXJzIGluIHN5c2ZzLAorCSAqIGp1c3QgbGlrZSBtb3JlIGZhbWlsaWFyIHBjaS1iYXNlZCBIQ0RzLgorCSAqLworCXNwaW5fbG9ja19pbml0ICgmZHVtLT5sb2NrKTsKKwlpbml0X3RpbWVyICgmZHVtLT50aW1lcik7CisJZHVtLT50aW1lci5mdW5jdGlvbiA9IGR1bW15X3RpbWVyOworCWR1bS0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkdW07CisKKwlJTklUX0xJU1RfSEVBRCAoJmR1bS0+dXJicF9saXN0KTsKKworCXJvb3QgPSB1c2JfYWxsb2NfZGV2IChOVUxMLCAmaGNkLT5zZWxmLCAwKTsKKwlpZiAoIXJvb3QpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogcm9vdCBodWIgZW50ZXJzIGFkZHJlc3NlZCBzdGF0ZS4uLiAqLworCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOworCXJvb3QtPnNwZWVkID0gVVNCX1NQRUVEX0hJR0g7CisKKwkvKiAuLi50aGVuIGNvbmZpZ3VyZWQsIHNvIGtodWJkIHNlZXMgdXMuICovCisJaWYgKChyZXR2YWwgPSB1c2JfaGNkX3JlZ2lzdGVyX3Jvb3RfaHViIChyb290LCBoY2QpKSAhPSAwKSB7CisJCWdvdG8gZXJyMTsKKwl9CisKKwkvKiBvbmx5IHNob3cgYSBsb3ctcG93ZXIgcG9ydDoganVzdCA4bUEgKi8KKwlodWJfc2V0X3Bvd2VyX2J1ZGdldCAocm9vdCwgOCk7CisKKwlpZiAoKHJldHZhbCA9IGR1bW15X3JlZ2lzdGVyX3VkYyAoZHVtKSkgIT0gMCkKKwkJZ290byBlcnIyOworCisJLyogRklYTUUgJ3VyYnMnIHNob3VsZCBiZSBhIHBlci1kZXZpY2UgdGhpbmcsIG1heWJlIGluIHVzYmNvcmUgKi8KKwlkZXZpY2VfY3JlYXRlX2ZpbGUgKGR1bW15X2RldihkdW0pLCAmZGV2X2F0dHJfdXJicyk7CisJcmV0dXJuIDA7CisKKyBlcnIyOgorCXVzYl9kaXNjb25uZWN0ICgmaGNkLT5zZWxmLnJvb3RfaHViKTsKKyBlcnIxOgorCXVzYl9wdXRfZGV2IChyb290KTsKKwloY2QtPnN0YXRlID0gSENfU1RBVEVfUVVJRVNDSU5HOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGR1bW15X3N0b3AgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IGR1bW15CQkqZHVtOworCisJZHVtID0gaGNkX3RvX2R1bW15IChoY2QpOworCisJZGV2aWNlX3JlbW92ZV9maWxlIChkdW1teV9kZXYoZHVtKSwgJmRldl9hdHRyX3VyYnMpOworCisJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAoZHVtLT5kcml2ZXIpOworCWR1bW15X3VucmVnaXN0ZXJfdWRjIChkdW0pOworCisJZGV2X2luZm8gKGR1bW15X2RldihkdW0pLCAic3RvcHBlZFxuIik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZHVtbXlfaF9nZXRfZnJhbWUgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJcmV0dXJuIGR1bW15X2dfZ2V0X2ZyYW1lIChOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgZHVtbXlfaGNkID0geworCS5kZXNjcmlwdGlvbiA9CQkoY2hhciAqKSBkcml2ZXJfbmFtZSwKKwkucHJvZHVjdF9kZXNjID0JCSJEdW1teSBob3N0IGNvbnRyb2xsZXIiLAorCS5oY2RfcHJpdl9zaXplID0Jc2l6ZW9mKHN0cnVjdCBkdW1teSksCisKKwkuZmxhZ3MgPQkJSENEX1VTQjIsCisKKwkuc3RhcnQgPQkJZHVtbXlfc3RhcnQsCisJLnN0b3AgPQkJCWR1bW15X3N0b3AsCisKKwkudXJiX2VucXVldWUgPSAJCWR1bW15X3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZSA9IAkJZHVtbXlfdXJiX2RlcXVldWUsCisKKwkuZ2V0X2ZyYW1lX251bWJlciA9IAlkdW1teV9oX2dldF9mcmFtZSwKKworCS5odWJfc3RhdHVzX2RhdGEgPSAJZHVtbXlfaHViX3N0YXR1cywKKwkuaHViX2NvbnRyb2wgPSAJCWR1bW15X2h1Yl9jb250cm9sLAorfTsKKworc3RhdGljIGludCBkdW1teV9wcm9iZSAoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCWludAkJCXJldHZhbDsKKworCWRldl9pbmZvIChkZXYsICIlcywgZHJpdmVyICIgRFJJVkVSX1ZFUlNJT04gIlxuIiwgZHJpdmVyX2Rlc2MpOworCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QgKCZkdW1teV9oY2QsIGRldiwgZGV2LT5idXNfaWQpOworCWlmICghaGNkKQorCQlyZXR1cm4gLUVOT01FTTsKKwl0aGVfY29udHJvbGxlciA9IGhjZF90b19kdW1teSAoaGNkKTsKKworCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgMCwgMCk7CisJaWYgKHJldHZhbCAhPSAwKSB7CisJCXVzYl9wdXRfaGNkIChoY2QpOworCQl0aGVfY29udHJvbGxlciA9IE5VTEw7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGR1bW15X3JlbW92ZSAoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCisJaGNkID0gZGV2X2dldF9kcnZkYXRhIChkZXYpOworCXVzYl9yZW1vdmVfaGNkIChoY2QpOworCXVzYl9wdXRfaGNkIChoY2QpOworCXRoZV9jb250cm9sbGVyID0gTlVMTDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBkdW1teV9wZGV2X2RldGVjdCAodm9pZCkKK3sKKwlpbnQJCQlyZXR2YWw7CisKKwlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIgKCZkdW1teV9kcml2ZXIpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJdGhlX3BkZXYubmFtZSA9ICJoYyI7CisJdGhlX3BkZXYuZGV2LmRyaXZlciA9ICZkdW1teV9kcml2ZXI7CisJdGhlX3BkZXYuZGV2LnJlbGVhc2UgPSBkdW1teV9wZGV2X3JlbGVhc2U7CisKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIgKCZ0aGVfcGRldik7CisJaWYgKHJldHZhbCA8IDApCisJCWRyaXZlcl91bnJlZ2lzdGVyICgmZHVtbXlfZHJpdmVyKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBkdW1teV9wZGV2X3JlbW92ZSAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlciAoJnRoZV9wZGV2KTsKKwlkcml2ZXJfdW5yZWdpc3RlciAoJmR1bW15X2RyaXZlcik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19pbml0IGluaXQgKHZvaWQpCit7CisJaW50CXJldHZhbDsKKworCWlmICh1c2JfZGlzYWJsZWQgKCkpCisJCXJldHVybiAtRU5PREVWOworCWlmICgocmV0dmFsID0gZHVtbXlfcGRldl9kZXRlY3QgKCkpICE9IDApCisJCXJldHVybiByZXR2YWw7CisJaWYgKChyZXR2YWwgPSBkdW1teV9wcm9iZSAoJnRoZV9wZGV2LmRldikpICE9IDApCisJCWR1bW15X3BkZXZfcmVtb3ZlICgpOworCXJldHVybiByZXR2YWw7Cit9Cittb2R1bGVfaW5pdCAoaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwICh2b2lkKQoreworCWR1bW15X3JlbW92ZSAoJnRoZV9wZGV2LmRldik7CisJZHVtbXlfcGRldl9yZW1vdmUgKCk7Cit9Cittb2R1bGVfZXhpdCAoY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXBhdXRvY29uZi5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2VwYXV0b2NvbmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2M2ZDc1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2VwYXV0b2NvbmYuYwpAQCAtMCwwICsxLDMxMCBAQAorLyoKKyAqIGVwYXV0b2NvbmYuYyAtLSBlbmRwb2ludCBhdXRvY29uZmlndXJhdGlvbiBmb3IgdXNiIGdhZGdldCBkcml2ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IERhdmlkIEJyb3duZWxsCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjaW5jbHVkZSA8bGludXgvdXNiX2NoOS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9nYWRnZXQuaD4KKworI2luY2x1ZGUgImdhZGdldF9jaGlwcy5oIgorCisKKy8qIHdlIG11c3QgYXNzaWduIGFkZHJlc3NlcyBmb3IgY29uZmlndXJhYmxlIGVuZHBvaW50cyAobGlrZSBuZXQyMjgwKSAqLworc3RhdGljIF9faW5pdGRhdGEgdW5zaWduZWQgZXBudW07CisKKy8vICNkZWZpbmUgTUFOWV9FTkRQT0lOVFMKKyNpZmRlZiBNQU5ZX0VORFBPSU5UUworLyogbW9yZSB0aGFuIDE1IGNvbmZpZ3VyYWJsZSBlbmRwb2ludHMgKi8KK3N0YXRpYyBfX2luaXRkYXRhIHVuc2lnbmVkIGluX2VwbnVtOworI2VuZGlmCisKKworLyoKKyAqIFRoaXMgc2hvdWxkIHdvcmsgd2l0aCBlbmRwb2ludHMgZnJvbSBjb250cm9sbGVyIGRyaXZlcnMgc2hhcmluZyB0aGUKKyAqIHNhbWUgZW5kcG9pbnQgbmFtaW5nIGNvbnZlbnRpb24uICBCeSBleGFtcGxlOgorICoKKyAqCS0gZXAxLCBlcDIsIC4uLiBhZGRyZXNzIGlzIGZpeGVkLCBub3QgZGlyZWN0aW9uIG9yIHR5cGUKKyAqCS0gZXAxaW4sIGVwMm91dCwgLi4uIGFkZHJlc3MgYW5kIGRpcmVjdGlvbiBhcmUgZml4ZWQsIG5vdCB0eXBlCisgKgktIGVwMS1idWxrLCBlcDItYnVsaywgLi4uIGFkZHJlc3MgYW5kIHR5cGUgYXJlIGZpeGVkLCBub3QgZGlyZWN0aW9uCisgKgktIGVwMWluLWJ1bGssIGVwMm91dC1pc28sIC4uLiBhbGwgdGhyZWUgYXJlIGZpeGVkCisgKgktIGVwLSogLi4uIG5vIGZ1bmN0aW9uYWxpdHkgcmVzdHJpY3Rpb25zCisgKgorICogVHlwZSBzdWZmaXhlcyBhcmUgIi1idWxrIiwgIi1pc28iLCBvciAiLWludCIuICBOdW1iZXJzIGFyZSBkZWNpbWFsLgorICogTGVzcyBjb21tb24gcmVzdHJpY3Rpb25zIGFyZSBpbXBsaWVkIGJ5IGdhZGdldF9pc18qKCkuCisgKgorICogTk9URTogIGVhY2ggZW5kcG9pbnQgaXMgdW5pZGlyZWN0aW9uYWwsIGFzIHNwZWNpZmllZCBieSBpdHMgVVNCCisgKiBkZXNjcmlwdG9yOyBhbmQgaXNuJ3Qgc3BlY2lmaWMgdG8gYSBjb25maWd1cmF0aW9uIG9yIGFsdHNldHRpbmcuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0CitlcF9tYXRjaGVzICgKKwlzdHJ1Y3QgdXNiX2dhZGdldAkJKmdhZGdldCwKKwlzdHJ1Y3QgdXNiX2VwCQkJKmVwLAorCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqZGVzYworKQoreworCXU4CQl0eXBlOworCWNvbnN0IGNoYXIJKnRtcDsKKwl1MTYJCW1heDsKKworCS8qIGVuZHBvaW50IGFscmVhZHkgY2xhaW1lZD8gKi8KKwlpZiAoMCAhPSBlcC0+ZHJpdmVyX2RhdGEpCisJCXJldHVybiAwOworCQkKKwkvKiBvbmx5IHN1cHBvcnQgZXAwIGZvciBwb3J0YWJsZSBDT05UUk9MIHRyYWZmaWMgKi8KKwl0eXBlID0gZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0s7CisJaWYgKFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wgPT0gdHlwZSkKKwkJcmV0dXJuIDA7CisKKwkvKiBzb21lIG90aGVyIG5hbWluZyBjb252ZW50aW9uICovCisJaWYgKCdlJyAhPSBlcC0+bmFtZVswXSkKKwkJcmV0dXJuIDA7CisKKwkvKiB0eXBlLXJlc3RyaWN0aW9uOiAgIi1pc28iLCAiLWJ1bGsiLCBvciAiLWludCIuCisJICogZGlyZWN0aW9uLXJlc3RyaWN0aW9uOiAgImluIiwgIm91dCIuCisJICovCisJaWYgKCctJyAhPSBlcC0+bmFtZVsyXSkgeworCQl0bXAgPSBzdHJyY2hyIChlcC0+bmFtZSwgJy0nKTsKKwkJaWYgKHRtcCkgeworCQkJc3dpdGNoICh0eXBlKSB7CisJCQljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lOVDoKKwkJCQkvKiBidWxrIGVuZHBvaW50cyBoYW5kbGUgaW50ZXJydXB0IHRyYW5zZmVycywKKwkJCQkgKiBleGNlcHQgdGhlIHRvZ2dsZS1xdWlya3kgaXNvLXN5bmNoIGtpbmQKKwkJCQkgKi8KKwkJCQlpZiAoJ3MnID09IHRtcFsyXSkJLy8gPT0gIi1pc28iCisJCQkJCXJldHVybiAwOworCQkJCS8qIGZvciBub3csIGF2b2lkIFBYQSAiaW50ZXJydXB0LWluIjsKKwkJCQkgKiBpdCdzIGRvY3VtZW50ZWQgYXMgbmV2ZXIgdXNpbmcgREFUQTEuCisJCQkJICovCisJCQkJaWYgKGdhZGdldF9pc19weGEgKGdhZGdldCkKKwkJCQkJCSYmICdpJyA9PSB0bXAgWzFdKQorCQkJCQlyZXR1cm4gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoKKwkJCQlpZiAoJ2InICE9IHRtcFsxXSkJLy8gIT0gIi1idWxrIgorCQkJCQlyZXR1cm4gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKKwkJCQlpZiAoJ3MnICE9IHRtcFsyXSkJLy8gIT0gIi1pc28iCisJCQkJCXJldHVybiAwOworCQkJfQorCQl9IGVsc2UgeworCQkJdG1wID0gZXAtPm5hbWUgKyBzdHJsZW4gKGVwLT5uYW1lKTsKKwkJfQorCisJCS8qIGRpcmVjdGlvbi1yZXN0cmljdGlvbjogICIuLmluLS4uIiwgIm91dC0uLiIgKi8KKwkJdG1wLS07CisJCWlmICghaXNkaWdpdCAoKnRtcCkpIHsKKwkJCWlmIChkZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgeworCQkJCWlmICgnbicgIT0gKnRtcCkKKwkJCQkJcmV0dXJuIDA7CisJCQl9IGVsc2UgeworCQkJCWlmICgndCcgIT0gKnRtcCkKKwkJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwl9CisKKwkvKiBlbmRwb2ludCBtYXhwYWNrZXQgc2l6ZSBpcyBhbiBpbnB1dCBwYXJhbWV0ZXIsIGV4Y2VwdCBmb3IgYnVsaworCSAqIHdoZXJlIGl0J3MgYW4gb3V0cHV0IHBhcmFtZXRlciByZXByZXNlbnRpbmcgdGhlIGZ1bGwgc3BlZWQgbGltaXQuCisJICogdGhlIHVzYiBzcGVjIGZpeGVzIGhpZ2ggc3BlZWQgYnVsayBtYXhwYWNrZXQgYXQgNTEyIGJ5dGVzLgorCSAqLworCW1heCA9IDB4N2ZmICYgbGUxNl90b19jcHVwICgmZGVzYy0+d01heFBhY2tldFNpemUpOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgorCQkvKiBJTlQ6ICBsaW1pdCA2NCBieXRlcyBmdWxsIHNwZWVkLCAxMDI0IGhpZ2ggc3BlZWQgKi8KKwkJaWYgKCFnYWRnZXQtPmlzX2R1YWxzcGVlZCAmJiBtYXggPiA2NCkKKwkJCXJldHVybiAwOworCQkvKiBGQUxMVEhST1VHSCAqLworCisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DOgorCQkvKiBJU086ICBsaW1pdCAxMDIzIGJ5dGVzIGZ1bGwgc3BlZWQsIDEwMjQgaGlnaCBzcGVlZCAqLworCQlpZiAoZXAtPm1heHBhY2tldCA8IG1heCkKKwkJCXJldHVybiAwOworCQlpZiAoIWdhZGdldC0+aXNfZHVhbHNwZWVkICYmIG1heCA+IDEwMjMpCisJCQlyZXR1cm4gMDsKKworCQkvKiBCT1RIOiAgImhpZ2ggYmFuZHdpZHRoIiB3b3JrcyBvbmx5IGF0IGhpZ2ggc3BlZWQgKi8KKwkJaWYgKChkZXNjLT53TWF4UGFja2V0U2l6ZSAmIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMzw8MTEpKSkgeworCQkJaWYgKCFnYWRnZXQtPmlzX2R1YWxzcGVlZCkKKwkJCQlyZXR1cm4gMDsKKwkJCS8qIGNvbmZpZ3VyZSB5b3VyIGhhcmR3YXJlIHdpdGggZW5vdWdoIGJ1ZmZlcmluZyEhICovCisJCX0KKwkJYnJlYWs7CisJfQorCisJLyogTUFUQ0ghISAqLworCisJLyogcmVwb3J0IGFkZHJlc3MgKi8KKwlpZiAoaXNkaWdpdCAoZXAtPm5hbWUgWzJdKSkgeworCQl1OAludW0gPSBzaW1wbGVfc3RydG9sICgmZXAtPm5hbWUgWzJdLCBOVUxMLCAxMCk7CisJCWRlc2MtPmJFbmRwb2ludEFkZHJlc3MgfD0gbnVtOworI2lmZGVmCU1BTllfRU5EUE9JTlRTCisJfSBlbHNlIGlmIChkZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgeworCQlpZiAoKytpbl9lcG51bSA+IDE1KQorCQkJcmV0dXJuIDA7CisJCWRlc2MtPmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOIHwgaW5fZXBudW07CisjZW5kaWYKKwl9IGVsc2UgeworCQlpZiAoKytlcG51bSA+IDE1KQorCQkJcmV0dXJuIDA7CisJCWRlc2MtPmJFbmRwb2ludEFkZHJlc3MgfD0gZXBudW07CisJfQorCisJLyogcmVwb3J0ICh2YXJpYWJsZSkgZnVsbCBzcGVlZCBidWxrIG1heHBhY2tldCAqLworCWlmIChVU0JfRU5EUE9JTlRfWEZFUl9CVUxLID09IHR5cGUpIHsKKwkJaW50IHNpemUgPSBlcC0+bWF4cGFja2V0OworCisJCS8qIG1pbigpIGRvZXNuJ3Qgd29yayBvbiBiaXRmaWVsZHMgd2l0aCBnY2MtMy41ICovCisJCWlmIChzaXplID4gNjQpCisJCQlzaXplID0gNjQ7CisJCWRlc2MtPndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoc2l6ZSk7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9lcCAqIF9faW5pdAorZmluZF9lcCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgdXNiX2VwCSplcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkgKGVwLCAmZ2FkZ2V0LT5lcF9saXN0LCBlcF9saXN0KSB7CisJCWlmICgwID09IHN0cmNtcCAoZXAtPm5hbWUsIG5hbWUpKQorCQkJcmV0dXJuIGVwOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiB1c2JfZXBfYXV0b2NvbmZpZyAtIGNob29zZSBhbiBlbmRwb2ludCBtYXRjaGluZyB0aGUgZGVzY3JpcHRvcgorICogQGdhZGdldDogVGhlIGRldmljZSB0byB3aGljaCB0aGUgZW5kcG9pbnQgbXVzdCBiZWxvbmcuCisgKiBAZGVzYzogRW5kcG9pbnQgZGVzY3JpcHRvciwgd2l0aCBlbmRwb2ludCBkaXJlY3Rpb24gYW5kIHRyYW5zZmVyIG1vZGUKKyAqCWluaXRpYWxpemVkLiAgRm9yIHBlcmlvZGljIHRyYW5zZmVycywgdGhlIG1heGltdW0gcGFja2V0CisgKglzaXplIG11c3QgYWxzbyBiZSBpbml0aWFsaXplZC4gIFRoaXMgaXMgbW9kaWZpZWQgb24gc3VjY2Vzcy4KKyAqCisgKiBCeSBjaG9vc2luZyBhbiBlbmRwb2ludCB0byB1c2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGRlc2NyaXB0b3IsIHRoaXMKKyAqIHJvdXRpbmUgc2ltcGxpZmllcyB3cml0aW5nIGdhZGdldCBkcml2ZXJzIHRoYXQgd29yayB3aXRoIG11bHRpcGxlCisgKiBVU0IgZGV2aWNlIGNvbnRyb2xsZXJzLiAgVGhlIGVuZHBvaW50IHdvdWxkIGJlIHBhc3NlZCBsYXRlciB0bworICogdXNiX2VwX2VuYWJsZSgpLCBhbG9uZyB3aXRoIHNvbWUgZGVzY3JpcHRvci4KKyAqCisgKiBUaGF0IHNlY29uZCBkZXNjcmlwdG9yIHdvbid0IGFsd2F5cyBiZSB0aGUgc2FtZSBhcyB0aGUgZmlyc3Qgb25lLgorICogRm9yIGV4YW1wbGUsIGlzb2Nocm9ub3VzIGVuZHBvaW50cyBjYW4gYmUgYXV0b2NvbmZpZ3VyZWQgZm9yIGhpZ2gKKyAqIGJhbmR3aWR0aCwgYW5kIHRoZW4gdXNlZCBpbiBzZXZlcmFsIGxvd2VyIGJhbmR3aWR0aCBhbHRzZXR0aW5ncy4KKyAqIEFsc28sIGhpZ2ggYW5kIGZ1bGwgc3BlZWQgZGVzY3JpcHRvcnMgd2lsbCBiZSBkaWZmZXJlbnQuCisgKgorICogQmUgc3VyZSB0byBleGFtaW5lIGFuZCB0ZXN0IHRoZSByZXN1bHRzIG9mIGF1dG9jb25maWd1cmF0aW9uIG9uIHlvdXIKKyAqIGhhcmR3YXJlLiAgVGhpcyBjb2RlIG1heSBub3QgbWFrZSB0aGUgYmVzdCBjaG9pY2VzIGFib3V0IGhvdyB0byB1c2UgdGhlCisgKiBVU0IgY29udHJvbGxlciwgYW5kIGl0IGNhbid0IGtub3cgYWxsIHRoZSByZXN0cmljdGlvbnMgdGhhdCBtYXkgYXBwbHkuCisgKiBTb21lIGNvbWJpbmF0aW9ucyBvZiBkcml2ZXIgYW5kIGhhcmR3YXJlIHdvbid0IGJlIGFibGUgdG8gYXV0b2NvbmZpZ3VyZS4KKyAqCisgKiBPbiBzdWNjZXNzLCB0aGlzIHJldHVybnMgYW4gdW4tY2xhaW1lZCB1c2JfZXAsIGFuZCBtb2RpZmllcyB0aGUgZW5kcG9pbnQKKyAqIGRlc2NyaXB0b3IgYkVuZHBvaW50QWRkcmVzcy4gIEZvciBidWxrIGVuZHBvaW50cywgdGhlIHdNYXhQYWNrZXQgdmFsdWUKKyAqIGlzIGluaXRpYWxpemVkIGFzIGlmIHRoZSBlbmRwb2ludCB3ZXJlIHVzZWQgYXQgZnVsbCBzcGVlZC4gIFRvIHByZXZlbnQKKyAqIHRoZSBlbmRwb2ludCBmcm9tIGJlaW5nIHJldHVybmVkIGJ5IGEgbGF0ZXIgYXV0b2NvbmZpZyBjYWxsLCBjbGFpbSBpdAorICogYnkgYXNzaWduaW5nIGVwLT5kcml2ZXJfZGF0YSB0byBzb21lIG5vbi1udWxsIHZhbHVlLgorICoKKyAqIE9uIGZhaWx1cmUsIHRoaXMgcmV0dXJucyBhIG51bGwgZW5kcG9pbnQgZGVzY3JpcHRvci4KKyAqLworc3RydWN0IHVzYl9lcCAqIF9faW5pdCB1c2JfZXBfYXV0b2NvbmZpZyAoCisJc3RydWN0IHVzYl9nYWRnZXQJCSpnYWRnZXQsCisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpkZXNjCispCit7CisJc3RydWN0IHVzYl9lcAkqZXA7CisJdTgJCXR5cGU7CisKKwl0eXBlID0gZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0s7CisKKwkvKiBGaXJzdCwgYXBwbHkgY2hpcC1zcGVjaWZpYyAiYmVzdCB1c2FnZSIga25vd2xlZGdlLgorCSAqIFRoaXMgbWlnaHQgbWFrZSBhIGdvb2QgdXNiX2dhZGdldF9vcHMgaG9vayAuLi4KKwkgKi8KKwlpZiAoZ2FkZ2V0X2lzX25ldDIyODAgKGdhZGdldCkgJiYgdHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpIHsKKwkJLyogZXAtZSwgZXAtZiBhcmUgUElPIHdpdGggb25seSA2NCBieXRlIGZpZm9zICovCisJCWVwID0gZmluZF9lcCAoZ2FkZ2V0LCAiZXAtZSIpOworCQlpZiAoZXAgJiYgZXBfbWF0Y2hlcyAoZ2FkZ2V0LCBlcCwgZGVzYykpCisJCQlyZXR1cm4gZXA7CisJCWVwID0gZmluZF9lcCAoZ2FkZ2V0LCAiZXAtZiIpOworCQlpZiAoZXAgJiYgZXBfbWF0Y2hlcyAoZ2FkZ2V0LCBlcCwgZGVzYykpCisJCQlyZXR1cm4gZXA7CisKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19nb2t1IChnYWRnZXQpKSB7CisJCWlmIChVU0JfRU5EUE9JTlRfWEZFUl9JTlQgPT0gdHlwZSkgeworCQkJLyogc2luZ2xlIGJ1ZmZlcmluZyBpcyBlbm91Z2ggKi8KKwkJCWVwID0gZmluZF9lcCAoZ2FkZ2V0LCAiZXAzLWJ1bGsiKTsKKwkJCWlmIChlcCAmJiBlcF9tYXRjaGVzIChnYWRnZXQsIGVwLCBkZXNjKSkKKwkJCQlyZXR1cm4gZXA7CisJCX0gZWxzZSBpZiAoVVNCX0VORFBPSU5UX1hGRVJfQlVMSyA9PSB0eXBlCisJCQkJJiYgKFVTQl9ESVJfSU4gJiBkZXNjLT5iRW5kcG9pbnRBZGRyZXNzKSkgeworCQkJLyogRE1BIG1heSBiZSBhdmFpbGFibGUgKi8KKwkJCWVwID0gZmluZF9lcCAoZ2FkZ2V0LCAiZXAyLWJ1bGsiKTsKKwkJCWlmIChlcCAmJiBlcF9tYXRjaGVzIChnYWRnZXQsIGVwLCBkZXNjKSkKKwkJCQlyZXR1cm4gZXA7CisJCX0KKworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3NoIChnYWRnZXQpICYmIFVTQl9FTkRQT0lOVF9YRkVSX0lOVCA9PSB0eXBlKSB7CisJCS8qIHNpbmdsZSBidWZmZXJpbmcgaXMgZW5vdWdoOyBtYXliZSA4IGJ5dGUgZmlmbyBpcyB0b28gKi8KKwkJZXAgPSBmaW5kX2VwIChnYWRnZXQsICJlcDNpbi1idWxrIik7CisJCWlmIChlcCAmJiBlcF9tYXRjaGVzIChnYWRnZXQsIGVwLCBkZXNjKSkKKwkJCXJldHVybiBlcDsKKworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX21xMTF4eCAoZ2FkZ2V0KSAmJiBVU0JfRU5EUE9JTlRfWEZFUl9JTlQgPT0gdHlwZSkgeworCQllcCA9IGZpbmRfZXAgKGdhZGdldCwgImVwMS1idWxrIik7CisJCWlmIChlcCAmJiBlcF9tYXRjaGVzIChnYWRnZXQsIGVwLCBkZXNjKSkKKwkJCXJldHVybiBlcDsKKwl9CisKKwkvKiBTZWNvbmQsIGxvb2sgYXQgZW5kcG9pbnRzIHVudGlsIGFuIHVuY2xhaW1lZCBvbmUgbG9va3MgdXNhYmxlICovIAorCWxpc3RfZm9yX2VhY2hfZW50cnkgKGVwLCAmZ2FkZ2V0LT5lcF9saXN0LCBlcF9saXN0KSB7CisJCWlmIChlcF9tYXRjaGVzIChnYWRnZXQsIGVwLCBkZXNjKSkKKwkJCXJldHVybiBlcDsKKwl9CisKKwkvKiBGYWlsICovCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogdXNiX2VwX2F1dG9jb25maWdfcmVzZXQgLSByZXNldCBlbmRwb2ludCBhdXRvY29uZmlnIHN0YXRlCisgKiBAZ2FkZ2V0OiBkZXZpY2UgZm9yIHdoaWNoIGF1dG9jb25maWcgc3RhdGUgd2lsbCBiZSByZXNldAorICoKKyAqIFVzZSB0aGlzIGZvciBkZXZpY2VzIHdoZXJlIG9uZSBjb25maWd1cmF0aW9uIG1heSBuZWVkIHRvIGFzc2lnbgorICogZW5kcG9pbnQgcmVzb3VyY2VzIHZlcnkgZGlmZmVyZW50bHkgZnJvbSB0aGUgbmV4dCBvbmUuICBJdCBjbGVhcnMKKyAqIHN0YXRlIHN1Y2ggYXMgZXAtPmRyaXZlcl9kYXRhIGFuZCB0aGUgcmVjb3JkIG9mIGFzc2lnbmVkIGVuZHBvaW50cworICogdXNlZCBieSB1c2JfZXBfYXV0b2NvbmZpZygpLgorICovCit2b2lkIF9faW5pdCB1c2JfZXBfYXV0b2NvbmZpZ19yZXNldCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgdXNiX2VwCSplcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkgKGVwLCAmZ2FkZ2V0LT5lcF9saXN0LCBlcF9saXN0KSB7CisJCWVwLT5kcml2ZXJfZGF0YSA9IE5VTEw7CisJfQorI2lmZGVmCU1BTllfRU5EUE9JTlRTCisJaW5fZXBudW0gPSAwOworI2VuZGlmCisJZXBudW0gPSAwOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZjlmYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYwpAQCAtMCwwICsxLDI2NjAgQEAKKy8qCisgKiBldGhlci5jIC0tIEV0aGVybmV0IGdhZGdldCBkcml2ZXIsIHdpdGggQ0RDIGFuZCBub24tQ0RDIG9wdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSBEYXZpZCBCcm93bmVsbAorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgUm9iZXJ0IFNjaHdlYmVsLCBCZW5lZGlrdCBTcHJhbmdlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisKKy8vICNkZWZpbmUgREVCVUcgMQorLy8gI2RlZmluZSBWRVJCT1NFCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisjaW5jbHVkZSA8bGludXgvdXNiX2NoOS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9jZGMuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKworI2luY2x1ZGUgImdhZGdldF9jaGlwcy5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogRXRoZXJuZXQgZ2FkZ2V0IGRyaXZlciAtLSB3aXRoIENEQyBhbmQgbm9uLUNEQyBvcHRpb25zCisgKiBCdWlsZHMgb24gaGFyZHdhcmUgc3VwcG9ydCBmb3IgYSBmdWxsIGR1cGxleCBsaW5rLgorICoKKyAqIENEQyBFdGhlcm5ldCBpcyB0aGUgc3RhbmRhcmQgVVNCIHNvbHV0aW9uIGZvciBzZW5kaW5nIEV0aGVybmV0IGZyYW1lcworICogdXNpbmcgVVNCLiAgUmVhbCBoYXJkd2FyZSB0ZW5kcyB0byB1c2UgdGhlIHNhbWUgZnJhbWluZyBwcm90b2NvbCBidXQgbG9vaworICogZGlmZmVyZW50IGZvciBjb250cm9sIGZlYXR1cmVzLiAgVGhpcyBkcml2ZXIgc3Ryb25nbHkgcHJlZmVycyB0byB1c2UKKyAqIHRoaXMgVVNCLUlGIHN0YW5kYXJkIGFzIGl0cyBvcGVuLXN5c3RlbXMgaW50ZXJvcGVyYWJpbGl0eSBzb2x1dGlvbjsKKyAqIG1vc3QgaG9zdCBzaWRlIFVTQiBzdGFja3MgKGV4Y2VwdCBmcm9tIE1pY3Jvc29mdCkgc3VwcG9ydCBpdC4KKyAqCisgKiBUaGVyZSdzIHNvbWUgaGFyZHdhcmUgdGhhdCBjYW4ndCB0YWxrIENEQy4gIFdlIG1ha2UgdGhhdCBoYXJkd2FyZQorICogaW1wbGVtZW50IGEgIm1pbmltYWxpc3QiIHZlbmRvci1hZ25vc3RpYyBDREMgY29yZTogIHNhbWUgZnJhbWluZywgYnV0CisgKiBsaW5rLWxldmVsIHNldHVwIG9ubHkgcmVxdWlyZXMgYWN0aXZhdGluZyB0aGUgY29uZmlndXJhdGlvbi4KKyAqIExpbnV4IHN1cHBvcnRzIGl0LCBidXQgb3RoZXIgaG9zdCBvcGVyYXRpbmcgc3lzdGVtcyBtYXkgbm90LgorICogKFRoaXMgaXMgYSBzdWJzZXQgb2YgQ0RDIEV0aGVybmV0LikKKyAqCisgKiBBIHRoaXJkIG9wdGlvbiBpcyBhbHNvIGluIHVzZS4gIFJhdGhlciB0aGFuIENEQyBFdGhlcm5ldCwgb3Igc29tZXRoaW5nCisgKiBzaW1wbGVyLCBNaWNyb3NvZnQgcHVzaGVzIHRoZWlyIG93biBhcHByb2FjaDogUk5ESVMuICBUaGUgcHVibGlzaGVkCisgKiBSTkRJUyBzcGVjcyBhcmUgYW1iaWd1b3VzIGFuZCBhcHBlYXIgdG8gYmUgaW5jb21wbGV0ZSwgYW5kIGFyZSBhbHNvCisgKiBuZWVkbGVzc2x5IGNvbXBsZXguCisgKi8KKworI2RlZmluZSBEUklWRVJfREVTQwkJIkV0aGVybmV0IEdhZGdldCIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSJFcXVpbm94IDIwMDQiCisKK3N0YXRpYyBjb25zdCBjaGFyIHNob3J0bmFtZSBbXSA9ICJldGhlciI7CitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfZGVzYyBbXSA9IERSSVZFUl9ERVNDOworCisjZGVmaW5lIFJYX0VYVFJBCTIwCQkvKiBndWFyZCBhZ2FpbnN0IHJ4IG92ZXJmbG93cyAqLworCisjaWZkZWYJQ09ORklHX1VTQl9FVEhfUk5ESVMKKyNpbmNsdWRlICJybmRpcy5oIgorI2Vsc2UKKyNkZWZpbmUgcm5kaXNfaW5pdCgpIDAKKyNkZWZpbmUgcm5kaXNfZXhpdCgpIGRve313aGlsZSgwKQorI2VuZGlmCisKKy8qIENEQyBhbmQgUk5ESVMgc3VwcG9ydCB0aGUgc2FtZSBob3N0LWNob3NlbiBvdXRnb2luZyBwYWNrZXQgZmlsdGVycy4gKi8KKyNkZWZpbmUJREVGQVVMVF9GSUxURVIJKFVTQl9DRENfUEFDS0VUX1RZUEVfQlJPQURDQVNUIFwKKyAJCQl8VVNCX0NEQ19QQUNLRVRfVFlQRV9ESVJFQ1RFRCkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdHJ1Y3QgZXRoX2RldiB7CisJc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0OworCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOwkJLyogZm9yIGNvbnRyb2wgcmVzcG9uc2VzICovCisJc3RydWN0IHVzYl9yZXF1ZXN0CSpzdGF0X3JlcTsJLyogZm9yIGNkYyAmIHJuZGlzIHN0YXR1cyAqLworCisJdTgJCQljb25maWc7CisJc3RydWN0IHVzYl9lcAkJKmluX2VwLCAqb3V0X2VwLCAqc3RhdHVzX2VwOworCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgorCQkJCSppbiwgKm91dCwgKnN0YXR1czsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXR4X3JlcXMsIHJ4X3JlcXM7CisKKwlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0OworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCXN0YXRzOworCWF0b21pY190CQl0eF9xbGVuOworCisJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CisJdW5zaWduZWQJCXpscDoxOworCXVuc2lnbmVkCQljZGM6MTsKKwl1bnNpZ25lZAkJcm5kaXM6MTsKKwl1bnNpZ25lZAkJc3VzcGVuZGVkOjE7CisJdTE2CQkJY2RjX2ZpbHRlcjsKKwl1bnNpZ25lZCBsb25nCQl0b2RvOworI2RlZmluZQlXT1JLX1JYX01FTU9SWQkJMAorCWludAkJCXJuZGlzX2NvbmZpZzsKKwl1OAkJCWhvc3RfbWFjIFtFVEhfQUxFTl07Cit9OworCisvKiBUaGlzIHZlcnNpb24gYXV0b2NvbmZpZ3VyZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhdCBydW4tdGltZS4KKyAqCisgKiBJdCBhbHNvIEFTU1VNRVMgYSBzZWxmLXBvd2VyZWQgZGV2aWNlLCB3aXRob3V0IHJlbW90ZSB3YWtldXAsCisgKiBhbHRob3VnaCByZW1vdGUgd2FrZXVwIHN1cHBvcnQgd291bGQgbWFrZSBzZW5zZS4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKkVQX0lOX05BTUU7CitzdGF0aWMgY29uc3QgY2hhciAqRVBfT1VUX05BTUU7CitzdGF0aWMgY29uc3QgY2hhciAqRVBfU1RBVFVTX05BTUU7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIERPIE5PVCBSRVVTRSBUSEVTRSBJRHMgd2l0aCBhIHByb3RvY29sLWluY29tcGF0aWJsZSBkcml2ZXIhISAgRXZlciEhCisgKiBJbnN0ZWFkOiAgYWxsb2NhdGUgeW91ciBvd24sIHVzaW5nIG5vcm1hbCBVU0ItSUYgcHJvY2VkdXJlcy4KKyAqLworCisvKiBUaGFua3MgdG8gTmV0Q2hpcCBUZWNobm9sb2dpZXMgZm9yIGRvbmF0aW5nIHRoaXMgcHJvZHVjdCBJRC4KKyAqIEl0J3MgZm9yIGRldmljZXMgd2l0aCBvbmx5IENEQyBFdGhlcm5ldCBjb25maWd1cmF0aW9ucy4KKyAqLworI2RlZmluZSBDRENfVkVORE9SX05VTQkweDA1MjUJCS8qIE5ldENoaXAgKi8KKyNkZWZpbmUgQ0RDX1BST0RVQ1RfTlVNCTB4YTRhMQkJLyogTGludXgtVVNCIEV0aGVybmV0IEdhZGdldCAqLworCisvKiBGb3IgaGFyZHdhcmUgdGhhdCBjYW4ndCB0YWxrIENEQywgd2UgdXNlIHRoZSBzYW1lIHZlbmRvciBJRCB0aGF0CisgKiBBUk0gTGludXggaGFzIHVzZWQgZm9yIGV0aGVybmV0LW92ZXItdXNiLCBib3RoIHdpdGggc2ExMTAwIGFuZAorICogd2l0aCBweGEyNTAuICBXZSdyZSBwcm90b2NvbC1jb21wYXRpYmxlLCBpZiB0aGUgaG9zdC1zaWRlIGRyaXZlcnMKKyAqIHVzZSB0aGUgZW5kcG9pbnQgZGVzY3JpcHRvcnMuICBiY2REZXZpY2UgKHZlcnNpb24pIGlzIG5vbnplcm8sIHNvCisgKiBkcml2ZXJzIHRoYXQgbmVlZCB0byBoYXJkLXdpcmUgZW5kcG9pbnQgbnVtYmVycyBoYXZlIGEgaG9vay4KKyAqCisgKiBUaGUgcHJvdG9jb2wgaXMgYSBtaW5pbWFsIHN1YnNldCBvZiBDREMgRXRoZXIsIHdoaWNoIHdvcmtzIG9uIGFueSBidWxrCisgKiBoYXJkd2FyZSB0aGF0J3Mgbm90IGRlZXBseSBicm9rZW4gLi4uIGV2ZW4gb24gaGFyZHdhcmUgdGhhdCBjYW4ndCB0YWxrCisgKiBSTkRJUyAobGlrZSBTQS0xMTAwLCB3aXRoIG5vIGludGVycnVwdCBlbmRwb2ludCwgb3IgYW55dGhpbmcgdGhhdAorICogZG9lc24ndCBoYW5kbGUgY29udHJvbC1PVVQpLgorICovCisjZGVmaW5lCVNJTVBMRV9WRU5ET1JfTlVNCTB4MDQ5ZgorI2RlZmluZQlTSU1QTEVfUFJPRFVDVF9OVU0JMHg1MDVhCisKKy8qIEZvciBoYXJkd2FyZSB0aGF0IGNhbiB0YWxrIFJORElTIGFuZCBlaXRoZXIgb2YgdGhlIGFib3ZlIHByb3RvY29scywKKyAqIHVzZSB0aGlzIElEIC4uLiB0aGUgd2luZG93cyBJTkYgZmlsZXMgd2lsbCBrbm93IGl0LiAgVW5sZXNzIGl0J3MKKyAqIHVzZWQgd2l0aCBDREMgRXRoZXJuZXQsIExpbnV4IDIuNCBob3N0cyB3aWxsIG5lZWQgdXBkYXRlcyB0byBjaG9vc2UKKyAqIHRoZSBub24tUk5ESVMgY29uZmlndXJhdGlvbi4KKyAqLworI2RlZmluZSBSTkRJU19WRU5ET1JfTlVNCTB4MDUyNQkvKiBOZXRDaGlwICovCisjZGVmaW5lIFJORElTX1BST0RVQ1RfTlVNCTB4YTRhMgkvKiBFdGhlcm5ldC9STkRJUyBHYWRnZXQgKi8KKworCisvKiBTb21lIHN5c3RlbXMgd2lsbCB3YW50IGRpZmZlcmVudCBwcm9kdWN0IGlkZW50aWZlcnMgcHVibGlzaGVkIGluIHRoZQorICogZGV2aWNlIGRlc2NyaXB0b3IsIGVpdGhlciBudW1iZXJzIG9yIHN0cmluZ3Mgb3IgYm90aC4gIFRoZXNlIHN0cmluZworICogcGFyYW1ldGVycyBhcmUgaW4gVVRGLTggKHN1cGVyc2V0IG9mIEFTQ0lJJ3MgNyBiaXQgY2hhcmFjdGVycykuCisgKi8KKworc3RhdGljIHVzaG9ydCBfX2luaXRkYXRhIGlkVmVuZG9yOworbW9kdWxlX3BhcmFtKGlkVmVuZG9yLCB1c2hvcnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpZFZlbmRvciwgIlVTQiBWZW5kb3IgSUQiKTsKKworc3RhdGljIHVzaG9ydCBfX2luaXRkYXRhIGlkUHJvZHVjdDsKK21vZHVsZV9wYXJhbShpZFByb2R1Y3QsIHVzaG9ydCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGlkUHJvZHVjdCwgIlVTQiBQcm9kdWN0IElEIik7CisKK3N0YXRpYyB1c2hvcnQgX19pbml0ZGF0YSBiY2REZXZpY2U7Cittb2R1bGVfcGFyYW0oYmNkRGV2aWNlLCB1c2hvcnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhiY2REZXZpY2UsICJVU0IgRGV2aWNlIHZlcnNpb24gKEJDRCkiKTsKKworc3RhdGljIGNoYXIgKl9faW5pdGRhdGEgaU1hbnVmYWN0dXJlcjsKK21vZHVsZV9wYXJhbShpTWFudWZhY3R1cmVyLCBjaGFycCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGlNYW51ZmFjdHVyZXIsICJVU0IgTWFudWZhY3R1cmVyIHN0cmluZyIpOworCitzdGF0aWMgY2hhciAqX19pbml0ZGF0YSBpUHJvZHVjdDsKK21vZHVsZV9wYXJhbShpUHJvZHVjdCwgY2hhcnAsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpUHJvZHVjdCwgIlVTQiBQcm9kdWN0IHN0cmluZyIpOworCisvKiBpbml0aWFsIHZhbHVlLCBjaGFuZ2VkIGJ5ICJpZmNvbmZpZyB1c2IwIGh3IGV0aGVyIHh4Onh4Onh4Onh4Onh4Onh4IiAqLworc3RhdGljIGNoYXIgKl9faW5pdGRhdGEgZGV2X2FkZHI7Cittb2R1bGVfcGFyYW0oZGV2X2FkZHIsIGNoYXJwLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoZGV2X2FkZHIsICJEZXZpY2UgRXRoZXJuZXQgQWRkcmVzcyIpOworCisvKiB0aGlzIGFkZHJlc3MgaXMgaW52aXNpYmxlIHRvIGlmY29uZmlnICovCitzdGF0aWMgY2hhciAqX19pbml0ZGF0YSBob3N0X2FkZHI7Cittb2R1bGVfcGFyYW0oaG9zdF9hZGRyLCBjaGFycCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGhvc3RfYWRkciwgIkhvc3QgRXRoZXJuZXQgQWRkcmVzcyIpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEluY2x1ZGUgQ0RDIHN1cHBvcnQgaWYgd2UgY291bGQgcnVuIG9uIENEQy1jYXBhYmxlIGhhcmR3YXJlLiAqLworCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MAorI2RlZmluZQlERVZfQ09ORklHX0NEQworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QKKyNkZWZpbmUJREVWX0NPTkZJR19DREMKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfR09LVQorI2RlZmluZQlERVZfQ09ORklHX0NEQworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYCisjZGVmaW5lIERFVl9DT05GSUdfQ0RDCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01RMTFYWAorI2RlZmluZQlERVZfQ09ORklHX0NEQworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9PTUFQCisjZGVmaW5lCURFVl9DT05GSUdfQ0RDCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX045NjA0CisjZGVmaW5lCURFVl9DT05GSUdfQ0RDCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WAorI2RlZmluZSBERVZfQ09ORklHX0NEQworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9BVDkxCisjZGVmaW5lIERFVl9DT05GSUdfQ0RDCisjZW5kaWYKKworCisvKiBGb3IgQ0RDLWluY2FwYWJsZSBoYXJkd2FyZSwgY2hvb3NlIHRoZSBzaW1wbGUgY2RjIHN1YnNldC4KKyAqIEFueXRoaW5nIHRoYXQgdGFsa3MgYnVsayAod2l0aG91dCBub3RhYmxlIGJ1Z3MpIGNhbiBkbyB0aGlzLgorICovCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYCisjZGVmaW5lCURFVl9DT05GSUdfU1VCU0VUCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX1NICisjZGVmaW5lCURFVl9DT05GSUdfU1VCU0VUCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX1NBMTEwMAorLyogdXNlIG5vbi1DREMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lCURFVl9DT05GSUdfU1VCU0VUCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAKKyNkZWZpbmUgREVWX0NPTkZJR19DREMKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiAibWFpbiIgY29uZmlnIGlzIGVpdGhlciBDREMsIG9yIGl0cyBzaW1wbGUgc3Vic2V0ICovCitzdGF0aWMgaW5saW5lIGludCBpc19jZGMoc3RydWN0IGV0aF9kZXYgKmRldikKK3sKKyNpZgkhZGVmaW5lZChERVZfQ09ORklHX1NVQlNFVCkKKwlyZXR1cm4gMTsJCS8qIG9ubHkgY2RjIHBvc3NpYmxlICovCisjZWxpZgkhZGVmaW5lZCAoREVWX0NPTkZJR19DREMpCisJcmV0dXJuIDA7CQkvKiBvbmx5IHN1YnNldCBwb3NzaWJsZSAqLworI2Vsc2UKKwlyZXR1cm4gZGV2LT5jZGM7CS8qIGRlcGVuZHMgb24gd2hhdCBoYXJkd2FyZSB3ZSBmb3VuZCAqLworI2VuZGlmCit9CisKKy8qICJzZWNvbmRhcnkiIFJORElTIGNvbmZpZyBtYXkgc29tZXRpbWVzIGJlIGFjdGl2YXRlZCAqLworc3RhdGljIGlubGluZSBpbnQgcm5kaXNfYWN0aXZlKHN0cnVjdCBldGhfZGV2ICpkZXYpCit7CisjaWZkZWYJQ09ORklHX1VTQl9FVEhfUk5ESVMKKwlyZXR1cm4gZGV2LT5ybmRpczsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworI2RlZmluZQlzdWJzZXRfYWN0aXZlKGRldikJKCFpc19jZGMoZGV2KSAmJiAhcm5kaXNfYWN0aXZlKGRldikpCisjZGVmaW5lCWNkY19hY3RpdmUoZGV2KQkJKCBpc19jZGMoZGV2KSAmJiAhcm5kaXNfYWN0aXZlKGRldikpCisKKworCisjZGVmaW5lIERFRkFVTFRfUUxFTgkyCS8qIGRvdWJsZSBidWZmZXJpbmcgYnkgZGVmYXVsdCAqLworCisvKiBwZWFrIGJ1bGsgdHJhbnNmZXIgYml0cy1wZXItc2Vjb25kICovCisjZGVmaW5lCUhTX0JQUyAJCSgxMyAqIDUxMiAqIDggKiAxMDAwICogOCkKKyNkZWZpbmUJRlNfQlBTCQkoMTkgKiAgNjQgKiAxICogMTAwMCAqIDgpCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKworc3RhdGljIHVuc2lnbmVkIHFtdWx0ID0gNTsKK21vZHVsZV9wYXJhbSAocW11bHQsIHVpbnQsIFNfSVJVR098U19JV1VTUik7CisKKworLyogZm9yIGR1YWwtc3BlZWQgaGFyZHdhcmUsIHVzZSBkZWVwZXIgcXVldWVzIGF0IGhpZ2hzcGVlZCAqLworI2RlZmluZSBxbGVuKGdhZGdldCkgXAorCShERUZBVUxUX1FMRU4qKChnYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSA/IHFtdWx0IDogMSkpCisKKy8qIGFsc28gZGVmZXIgSVJRcyBvbiBoaWdoc3BlZWQgVFggKi8KKyNkZWZpbmUgVFhfREVMQVkJcW11bHQKKworI2RlZmluZQlCSVRSQVRFKGcpCSgoKGcpLT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgPyBIU19CUFMgOiBGU19CUFMpCisKKyNlbHNlCS8qIGZ1bGwgc3BlZWQgKGxvdyBzcGVlZCBkb2Vzbid0IGRvIGJ1bGspICovCisjZGVmaW5lIHFsZW4oZ2FkZ2V0KSBERUZBVUxUX1FMRU4KKworI2RlZmluZQlCSVRSQVRFKGcpCUZTX0JQUworI2VuZGlmCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSB4cHJpbnRrKGQsbGV2ZWwsZm10LGFyZ3MuLi4pIFwKKwlwcmludGsobGV2ZWwgIiVzOiAiIGZtdCAsIChkKS0+bmV0LT5uYW1lICwgIyMgYXJncykKKworI2lmZGVmIERFQlVHCisjdW5kZWYgREVCVUcKKyNkZWZpbmUgREVCVUcoZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX0RFQlVHICwgZm10ICwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIERFQlVHKGRldixmbXQsYXJncy4uLikgXAorCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgVkVSQk9TRQorI2RlZmluZSBWREVCVUcJREVCVUcKKyNlbHNlCisjZGVmaW5lIFZERUJVRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogREVCVUcgKi8KKworI2RlZmluZSBFUlJPUihkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fRVJSICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgV0FSTihkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fV0FSTklORyAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIElORk8oZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX0lORk8gLCBmbXQgLCAjIyBhcmdzKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBVU0IgRFJJVkVSIEhPT0tVUCAodG8gdGhlIGhhcmR3YXJlIGRyaXZlciwgYmVsb3cgdXMpLCBtb3N0bHkKKyAqIGVwMCBpbXBsZW1lbnRhdGlvbjogIGRlc2NyaXB0b3JzLCBjb25maWcgbWFuYWdlbWVudCwgc2V0dXAoKS4KKyAqIGFsc28gb3B0aW9uYWwgY2xhc3Mtc3BlY2lmaWMgbm90aWZpY2F0aW9uIGludGVycnVwdCB0cmFuc2Zlci4KKyAqLworCisvKgorICogREVTQ1JJUFRPUlMgLi4uIG1vc3QgYXJlIHN0YXRpYywgYnV0IHN0cmluZ3MgYW5kIChmdWxsKSBjb25maWd1cmF0aW9uCisgKiBkZXNjcmlwdG9ycyBhcmUgYnVpbHQgb24gZGVtYW5kLiAgRm9yIG5vdyB3ZSBkbyBlaXRoZXIgZnVsbCBDREMsIG9yCisgKiBvdXIgc2ltcGxlIHN1YnNldCwgd2l0aCBSTkRJUyBhcyBhbiBvcHRpb25hbCBzZWNvbmQgY29uZmlndXJhdGlvbi4KKyAqCisgKiBSTkRJUyBpbmNsdWRlcyBzb21lIENEQyBBQ00gZGVzY3JpcHRvcnMgLi4uIGxpa2UgQ0RDIEV0aGVybmV0LiAgQnV0CisgKiB0aGUgY2xhc3MgZGVzY3JpcHRvcnMgbWF0Y2ggYSBtb2RlbSAodGhleSdyZSBpZ25vcmVkOyBpdCdzIHJlYWxseSBqdXN0CisgKiBFdGhlcm5ldCBmdW5jdGlvbmFsaXR5KSwgdGhleSBkb24ndCBuZWVkIHRoZSBOT1AgYWx0c2V0dGluZywgYW5kIHRoZQorICogc3RhdHVzIHRyYW5zZmVyIGVuZHBvaW50IGlzbid0IG9wdGlvbmFsLgorICovCisKKyNkZWZpbmUgU1RSSU5HX01BTlVGQUNUVVJFUgkJMQorI2RlZmluZSBTVFJJTkdfUFJPRFVDVAkJCTIKKyNkZWZpbmUgU1RSSU5HX0VUSEFERFIJCQkzCisjZGVmaW5lIFNUUklOR19EQVRBCQkJNAorI2RlZmluZSBTVFJJTkdfQ09OVFJPTAkJCTUKKyNkZWZpbmUgU1RSSU5HX1JORElTX0NPTlRST0wJCTYKKyNkZWZpbmUgU1RSSU5HX0NEQwkJCTcKKyNkZWZpbmUgU1RSSU5HX1NVQlNFVAkJCTgKKyNkZWZpbmUgU1RSSU5HX1JORElTCQkJOQorCisjZGVmaW5lIFVTQl9CVUZTSVoJMjU2CQkvKiBob2xkcyBvdXIgYmlnZ2VzdCBkZXNjcmlwdG9yICovCisKKy8qCisgKiBUaGlzIGRldmljZSBhZHZlcnRpc2VzIG9uZSBjb25maWd1cmF0aW9uLCBldGhfY29uZmlnLCB1bmxlc3MgUk5ESVMKKyAqIGlzIGVuYWJsZWQgKHJuZGlzX2NvbmZpZykgb24gaGFyZHdhcmUgc3VwcG9ydGluZyBhdCBsZWFzdCB0d28gY29uZmlncy4KKyAqCisgKiBOT1RFOiAgQ29udHJvbGxlcnMgbGlrZSBzdXBlcmhfdWRjIHNob3VsZCBwcm9iYWJseSBiZSBhYmxlIHRvIHVzZQorICogYW4gUk5ESVMtb25seSBjb25maWd1cmF0aW9uLgorICoKKyAqIEZJWE1FIGRlZmluZSBzb21lIGhpZ2hlci1wb3dlcmVkIGNvbmZpZ3VyYXRpb25zIHRvIG1ha2UgaXQgZWFzaWVyCisgKiB0byByZWNoYXJnZSBiYXR0ZXJpZXMgLi4uCisgKi8KKworI2RlZmluZSBERVZfQ09ORklHX1ZBTFVFCTEJLyogY2RjIG9yIHN1YnNldCAqLworI2RlZmluZSBERVZfUk5ESVNfQ09ORklHX1ZBTFVFCTIJLyogcm5kaXM7IG9wdGlvbmFsICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yCitkZXZpY2VfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2YgZGV2aWNlX2Rlc2MsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0UsCisKKwkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMCksCisKKwkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19DT01NLAorCS5iRGV2aWNlU3ViQ2xhc3MgPQkwLAorCS5iRGV2aWNlUHJvdG9jb2wgPQkwLAorCisJLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKENEQ19WRU5ET1JfTlVNKSwKKwkuaWRQcm9kdWN0ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKENEQ19QUk9EVUNUX05VTSksCisJLmlNYW51ZmFjdHVyZXIgPQlTVFJJTkdfTUFOVUZBQ1RVUkVSLAorCS5pUHJvZHVjdCA9CQlTVFJJTkdfUFJPRFVDVCwKKwkuYk51bUNvbmZpZ3VyYXRpb25zID0JMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX290Z19kZXNjcmlwdG9yCitvdGdfZGVzY3JpcHRvciA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2Ygb3RnX2Rlc2NyaXB0b3IsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9PVEcsCisKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9PVEdfU1JQLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IKK2V0aF9jb25maWcgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGV0aF9jb25maWcsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DT05GSUcsCisKKwkvKiBjb21wdXRlIHdUb3RhbExlbmd0aCBvbiB0aGUgZmx5ICovCisJLmJOdW1JbnRlcmZhY2VzID0JMiwKKwkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9CURFVl9DT05GSUdfVkFMVUUsCisJLmlDb25maWd1cmF0aW9uID0JU1RSSU5HX0NEQywKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9DT05GSUdfQVRUX09ORSB8IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKKwkuYk1heFBvd2VyID0JCTUwLAorfTsKKworI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCitzdGF0aWMgc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvciAKK3JuZGlzX2NvbmZpZyA9IHsKKwkuYkxlbmd0aCA9ICAgICAgICAgICAgICBzaXplb2Ygcm5kaXNfY29uZmlnLAorCS5iRGVzY3JpcHRvclR5cGUgPSAgICAgIFVTQl9EVF9DT05GSUcsCisKKwkvKiBjb21wdXRlIHdUb3RhbExlbmd0aCBvbiB0aGUgZmx5ICovCisJLmJOdW1JbnRlcmZhY2VzID0gICAgICAgMiwKKwkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9ICBERVZfUk5ESVNfQ09ORklHX1ZBTFVFLAorCS5pQ29uZmlndXJhdGlvbiA9ICAgICAgIFNUUklOR19STkRJUywKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9DT05GSUdfQVRUX09ORSB8IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKKwkuYk1heFBvd2VyID0gICAgICAgICAgICA1MCwKK307CisjZW5kaWYKKworLyoKKyAqIENvbXBhcmVkIHRvIHRoZSBzaW1wbGUgQ0RDIHN1YnNldCwgdGhlIGZ1bGwgQ0RDIEV0aGVybmV0IG1vZGVsIGFkZHMKKyAqIHRocmVlIGNsYXNzIGRlc2NyaXB0b3JzLCB0d28gaW50ZXJmYWNlIGRlc2NyaXB0b3JzLCBvcHRpb25hbCBzdGF0dXMKKyAqIGVuZHBvaW50LiAgQm90aCBoYXZlIGEgImRhdGEiIGludGVyZmFjZSBhbmQgdHdvIGJ1bGsgZW5kcG9pbnRzLgorICogVGhlcmUgYXJlIGFsc28gZGlmZmVyZW5jZXMgaW4gaG93IGNvbnRyb2wgcmVxdWVzdHMgYXJlIGhhbmRsZWQuCisgKgorICogUk5ESVMgc2hhcmVzIGEgbG90IHdpdGggQ0RDLUV0aGVybmV0LCBzaW5jZSBpdCdzIGEgdmFyaWFudCBvZgorICogdGhlIENEQy1BQ00gKG1vZGVtKSBzcGVjLgorICovCisKKyNpZmRlZglERVZfQ09ORklHX0NEQworc3RhdGljIHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IKK2NvbnRyb2xfaW50ZiA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2YgY29udHJvbF9pbnRmLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAorCisJLmJJbnRlcmZhY2VOdW1iZXIgPQkwLAorCS8qIHN0YXR1cyBlbmRwb2ludCBpcyBvcHRpb25hbDsgdGhpcyBtYXkgYmUgcGF0Y2hlZCBsYXRlciAqLworCS5iTnVtRW5kcG9pbnRzID0JMSwKKwkuYkludGVyZmFjZUNsYXNzID0JVVNCX0NMQVNTX0NPTU0sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9CVVTQl9DRENfU1VCQ0xBU1NfRVRIRVJORVQsCisJLmJJbnRlcmZhY2VQcm90b2NvbCA9CVVTQl9DRENfUFJPVE9fTk9ORSwKKwkuaUludGVyZmFjZSA9CQlTVFJJTkdfQ09OVFJPTCwKK307CisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcgorcm5kaXNfY29udHJvbF9pbnRmID0geworCS5iTGVuZ3RoID0gICAgICAgICAgICAgIHNpemVvZiBybmRpc19jb250cm9sX2ludGYsCisJLmJEZXNjcmlwdG9yVHlwZSA9ICAgICAgVVNCX0RUX0lOVEVSRkFDRSwKKwkgIAorCS5iSW50ZXJmYWNlTnVtYmVyID0gICAgIDAsCisJLmJOdW1FbmRwb2ludHMgPSAgICAgICAgMSwKKwkuYkludGVyZmFjZUNsYXNzID0gICAgICBVU0JfQ0xBU1NfQ09NTSwKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gICBVU0JfQ0RDX1NVQkNMQVNTX0FDTSwKKwkuYkludGVyZmFjZVByb3RvY29sID0gICBVU0JfQ0RDX0FDTV9QUk9UT19WRU5ET1IsCisJLmlJbnRlcmZhY2UgPSAgICAgICAgICAgU1RSSU5HX1JORElTX0NPTlRST0wsCit9OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKERFVl9DT05GSUdfQ0RDKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfRVRIX1JORElTKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9jZGNfaGVhZGVyX2Rlc2MgaGVhZGVyX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGhlYWRlcl9kZXNjLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAorCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX0hFQURFUl9UWVBFLAorCisJLmJjZENEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAxMTApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfY2RjX3VuaW9uX2Rlc2MgdW5pb25fZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2YgdW5pb25fZGVzYywKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19VTklPTl9UWVBFLAorCisJLmJNYXN0ZXJJbnRlcmZhY2UwID0JMCwJLyogaW5kZXggb2YgY29udHJvbCBpbnRlcmZhY2UgKi8KKwkuYlNsYXZlSW50ZXJmYWNlMCA9CTEsCS8qIGluZGV4IG9mIERBVEEgaW50ZXJmYWNlICovCit9OworCisjZW5kaWYJLyogQ0RDIHx8IFJORElTICovCisKKyNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9jZGNfY2FsbF9tZ210X2Rlc2NyaXB0b3IgY2FsbF9tZ210X2Rlc2NyaXB0b3IgPSB7CisJLmJMZW5ndGggPSAgCQlzaXplb2YgY2FsbF9tZ210X2Rlc2NyaXB0b3IsCisJLmJEZXNjcmlwdG9yVHlwZSA9IAlVU0JfRFRfQ1NfSU5URVJGQUNFLAorCS5iRGVzY3JpcHRvclN1YlR5cGUgPSAJVVNCX0NEQ19DQUxMX01BTkFHRU1FTlRfVFlQRSwKKworCS5ibUNhcGFiaWxpdGllcyA9IAkweDAwLAorCS5iRGF0YUludGVyZmFjZSA9IAkweDAxLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2RjX2FjbV9kZXNjcmlwdG9yIGFjbV9kZXNjcmlwdG9yID0geworCS5iTGVuZ3RoID0gIAkJc2l6ZW9mIGFjbV9kZXNjcmlwdG9yLAorCS5iRGVzY3JpcHRvclR5cGUgPSAJVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0gCVVTQl9DRENfQUNNX1RZUEUsCisKKwkuYm1DYXBhYmlsaXRpZXMgPSAJMHgwMCwKK307CisKKyNlbmRpZgorCisjaWZkZWYJREVWX0NPTkZJR19DREMKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfY2RjX2V0aGVyX2Rlc2MgZXRoZXJfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2YgZXRoZXJfZGVzYywKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19FVEhFUk5FVF9UWVBFLAorCisJLyogdGhpcyBkZXNjcmlwdG9yIGFjdHVhbGx5IGFkZHMgdmFsdWUsIHN1cnByaXNlISAqLworCS5pTUFDQWRkcmVzcyA9CQlTVFJJTkdfRVRIQUREUiwKKwkuYm1FdGhlcm5ldFN0YXRpc3RpY3MgPQlfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKSwgLyogbm8gc3RhdGlzdGljcyAqLworCS53TWF4U2VnbWVudFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2IChFVEhfRlJBTUVfTEVOKSwKKwkud051bWJlck1DRmlsdGVycyA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDApLAorCS5iTnVtYmVyUG93ZXJGaWx0ZXJzID0JMCwKK307CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChERVZfQ09ORklHX0NEQykgfHwgZGVmaW5lZChDT05GSUdfVVNCX0VUSF9STkRJUykKKworLyogaW5jbHVkZSB0aGUgc3RhdHVzIGVuZHBvaW50IGlmIHdlIGNhbiwgZXZlbiB3aGVyZSBpdCdzIG9wdGlvbmFsLgorICogdXNlIHdNYXhQYWNrZXRTaXplIGJpZyBlbm91Z2ggdG8gZml0IENEQ19OT1RJRllfU1BFRURfQ0hBTkdFIGluIG9uZQorICogcGFja2V0LCB0byBzaW1wbGlmeSBjYW5jZWxhdGlvbjsgYW5kIGEgYmlnIHRyYW5zZmVyIGludGVydmFsLCB0bworICogd2FzdGUgbGVzcyBiYW5kd2lkdGguCisgKgorICogc29tZSBkcml2ZXJzIChsaWtlIExpbnV4IDIuNCBjZGMtZXRoZXIhKSAibmVlZCIgaXQgdG8gZXhpc3QgZXZlbgorICogaWYgdGhleSBpZ25vcmUgdGhlIGNvbm5lY3QvZGlzY29ubmVjdCBub3RpZmljYXRpb25zIHRoYXQgcmVhbCBhZXRoZXIKKyAqIGNhbiBwcm92aWRlLiAgbW9yZSBhZHZhbmNlZCBjZGMgY29uZmlndXJhdGlvbnMgbWlnaHQgd2FudCB0byBzdXBwb3J0CisgKiBlbmNhcHN1bGF0ZWQgY29tbWFuZHMgKHZlbmRvci1zcGVjaWZpYywgdXNpbmcgY29udHJvbC1PVVQpLgorICoKKyAqIFJORElTIHJlcXVpcmVzIHRoZSBzdGF0dXMgZW5kcG9pbnQsIHNpbmNlIGl0IHVzZXMgdGhhdCBlbmNhcHN1bGF0aW9uCisgKiBtZWNoYW5pc20gZm9yIGl0cyBmdW5reSBSUEMgc2NoZW1lLgorICovCisgCisjZGVmaW5lIExPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMJNQkvKiAxIDw8IDUgPT0gMzIgbXNlYyAqLworI2RlZmluZSBTVEFUVVNfQllURUNPVU5UCQkxNgkvKiA4IGJ5dGUgaGVhZGVyICsgZGF0YSAqLworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCitmc19zdGF0dXNfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAorCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKFNUQVRVU19CWVRFQ09VTlQpLAorCS5iSW50ZXJ2YWwgPQkJMSA8PCBMT0cyX1NUQVRVU19JTlRFUlZBTF9NU0VDLAorfTsKKyNlbmRpZgorCisjaWZkZWYJREVWX0NPTkZJR19DREMKKworLyogdGhlIGRlZmF1bHQgZGF0YSBpbnRlcmZhY2UgaGFzIG5vIGVuZHBvaW50cyAuLi4gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IKK2RhdGFfbm9wX2ludGYgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGRhdGFfbm9wX2ludGYsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9JTlRFUkZBQ0UsCisKKwkuYkludGVyZmFjZU51bWJlciA9CTEsCisJLmJBbHRlcm5hdGVTZXR0aW5nID0JMCwKKwkuYk51bUVuZHBvaW50cyA9CTAsCisJLmJJbnRlcmZhY2VDbGFzcyA9CVVTQl9DTEFTU19DRENfREFUQSwKKwkuYkludGVyZmFjZVN1YkNsYXNzID0JMCwKKwkuYkludGVyZmFjZVByb3RvY29sID0JMCwKK307CisKKy8qIC4uLiBidXQgdGhlICJyZWFsIiBkYXRhIGludGVyZmFjZSBoYXMgdHdvIGJ1bGsgZW5kcG9pbnRzICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yCitkYXRhX2ludGYgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGRhdGFfaW50ZiwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKKworCS5iSW50ZXJmYWNlTnVtYmVyID0JMSwKKwkuYkFsdGVybmF0ZVNldHRpbmcgPQkxLAorCS5iTnVtRW5kcG9pbnRzID0JMiwKKwkuYkludGVyZmFjZUNsYXNzID0JVVNCX0NMQVNTX0NEQ19EQVRBLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPQkwLAorCS5iSW50ZXJmYWNlUHJvdG9jb2wgPQkwLAorCS5pSW50ZXJmYWNlID0JCVNUUklOR19EQVRBLAorfTsKKworI2VuZGlmCisKKyNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUworCisvKiBSTkRJUyBkb2Vzbid0IGFjdGl2YXRlIGJ5IGNoYW5naW5nIHRvIHRoZSAicmVhbCIgYWx0c2V0dGluZyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcgorcm5kaXNfZGF0YV9pbnRmID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBybmRpc19kYXRhX2ludGYsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9JTlRFUkZBQ0UsCisKKwkuYkludGVyZmFjZU51bWJlciA9CTEsCisJLmJBbHRlcm5hdGVTZXR0aW5nID0JMCwKKwkuYk51bUVuZHBvaW50cyA9CTIsCisJLmJJbnRlcmZhY2VDbGFzcyA9CVVTQl9DTEFTU19DRENfREFUQSwKKwkuYkludGVyZmFjZVN1YkNsYXNzID0JMCwKKwkuYkludGVyZmFjZVByb3RvY29sID0JMCwKKwkuaUludGVyZmFjZSA9CQlTVFJJTkdfREFUQSwKK307CisKKyNlbmRpZgorCisjaWZkZWYgREVWX0NPTkZJR19TVUJTRVQKKworLyoKKyAqICJTaW1wbGUiIENEQy1zdWJzZXQgb3B0aW9uIGlzIGEgc2ltcGxlIHZlbmRvci1uZXV0cmFsIG1vZGVsIHRoYXQgbW9zdAorICogZnVsbCBzcGVlZCBjb250cm9sbGVycyBjYW4gaGFuZGxlOiAgb25lIGludGVyZmFjZSwgdHdvIGJ1bGsgZW5kcG9pbnRzLgorICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yCitzdWJzZXRfZGF0YV9pbnRmID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBzdWJzZXRfZGF0YV9pbnRmLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAorCisJLmJJbnRlcmZhY2VOdW1iZXIgPQkwLAorCS5iQWx0ZXJuYXRlU2V0dGluZyA9CTAsCisJLmJOdW1FbmRwb2ludHMgPQkyLAorCS5iSW50ZXJmYWNlQ2xhc3MgPQlVU0JfQ0xBU1NfVkVORE9SX1NQRUMsCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9CTAsCisJLmJJbnRlcmZhY2VQcm90b2NvbCA9CTAsCisJLmlJbnRlcmZhY2UgPQkJU1RSSU5HX0RBVEEsCit9OworCisjZW5kaWYJLyogU1VCU0VUICovCisKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgorZnNfc291cmNlX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCitmc19zaW5rX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9PVVQsCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmZzX2V0aF9mdW5jdGlvbiBbMTFdID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvdGdfZGVzY3JpcHRvciwKKyNpZmRlZiBERVZfQ09ORklHX0NEQworCS8qICJjZGMiIG1vZGUgZGVzY3JpcHRvcnMgKi8KKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmY29udHJvbF9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmdW5pb25fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZXRoZXJfZGVzYywKKwkvKiBOT1RFOiBzdGF0dXMgZW5kcG9pbnQgbWF5IG5lZWQgdG8gYmUgcmVtb3ZlZCAqLworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19zdGF0dXNfZGVzYywKKwkvKiBkYXRhIGludGVyZmFjZSwgd2l0aCBhbHRzZXR0aW5nICovCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmRhdGFfbm9wX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmRhdGFfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc291cmNlX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3NpbmtfZGVzYywKKwlOVUxMLAorI2VuZGlmIC8qIERFVl9DT05GSUdfQ0RDICovCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGZzX3N1YnNldF9kZXNjcmlwdG9ycyh2b2lkKQoreworI2lmZGVmIERFVl9DT05GSUdfU1VCU0VUCisJZnNfZXRoX2Z1bmN0aW9uWzFdID0gKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJnN1YnNldF9kYXRhX2ludGY7CisJZnNfZXRoX2Z1bmN0aW9uWzJdID0gKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3NvdXJjZV9kZXNjOworCWZzX2V0aF9mdW5jdGlvblszXSA9IChzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19zaW5rX2Rlc2M7CisJZnNfZXRoX2Z1bmN0aW9uWzRdID0gTlVMTDsKKyNlbHNlCisJZnNfZXRoX2Z1bmN0aW9uWzFdID0gTlVMTDsKKyNlbmRpZgorfQorCisjaWZkZWYJQ09ORklHX1VTQl9FVEhfUk5ESVMKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpmc19ybmRpc19mdW5jdGlvbiBbXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb3RnX2Rlc2NyaXB0b3IsCisJLyogY29udHJvbCBpbnRlcmZhY2UgbWF0Y2hlcyBBQ00sIG5vdCBFdGhlcm5ldCAqLworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZybmRpc19jb250cm9sX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhlYWRlcl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZjYWxsX21nbXRfZGVzY3JpcHRvciwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmYWNtX2Rlc2NyaXB0b3IsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJnVuaW9uX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3N0YXR1c19kZXNjLAorCS8qIGRhdGEgaW50ZXJmYWNlIGhhcyBubyBhbHRzZXR0aW5nICovCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJnJuZGlzX2RhdGFfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc291cmNlX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzX3NpbmtfZGVzYywKKwlOVUxMLAorfTsKKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisKKy8qCisgKiB1c2IgMi4wIGRldmljZXMgbmVlZCB0byBleHBvc2UgYm90aCBoaWdoIHNwZWVkIGFuZCBmdWxsIHNwZWVkCisgKiBkZXNjcmlwdG9ycywgdW5sZXNzIHRoZXkgb25seSBydW4gYXQgZnVsbCBzcGVlZC4KKyAqLworCisjaWYgZGVmaW5lZChERVZfQ09ORklHX0NEQykgfHwgZGVmaW5lZChDT05GSUdfVVNCX0VUSF9STkRJUykKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKK2hzX3N0YXR1c19kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2IChTVEFUVVNfQllURUNPVU5UKSwKKwkuYkludGVydmFsID0JCUxPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMgKyA0LAorfTsKKyNlbmRpZiAvKiBERVZfQ09ORklHX0NEQyAqLworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCitoc19zb3VyY2VfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCitoc19zaW5rX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2ICg1MTIpLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IKK2Rldl9xdWFsaWZpZXIgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGRldl9xdWFsaWZpZXIsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSLAorCisJLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDApLAorCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX0NPTU0sCisKKwkuYk51bUNvbmZpZ3VyYXRpb25zID0JMSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19ldGhfZnVuY3Rpb24gWzExXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb3RnX2Rlc2NyaXB0b3IsCisjaWZkZWYgREVWX0NPTkZJR19DREMKKwkvKiAiY2RjIiBtb2RlIGRlc2NyaXB0b3JzICovCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmNvbnRyb2xfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaGVhZGVyX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJnVuaW9uX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmV0aGVyX2Rlc2MsCisJLyogTk9URTogc3RhdHVzIGVuZHBvaW50IG1heSBuZWVkIHRvIGJlIHJlbW92ZWQgKi8KKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfc3RhdHVzX2Rlc2MsCisJLyogZGF0YSBpbnRlcmZhY2UsIHdpdGggYWx0c2V0dGluZyAqLworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZkYXRhX25vcF9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZkYXRhX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3NvdXJjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19zaW5rX2Rlc2MsCisJTlVMTCwKKyNlbmRpZiAvKiBERVZfQ09ORklHX0NEQyAqLworfTsKKworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBoc19zdWJzZXRfZGVzY3JpcHRvcnModm9pZCkKK3sKKyNpZmRlZiBERVZfQ09ORklHX1NVQlNFVAorCWhzX2V0aF9mdW5jdGlvblsxXSA9IChzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZzdWJzZXRfZGF0YV9pbnRmOworCWhzX2V0aF9mdW5jdGlvblsyXSA9IChzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19zb3VyY2VfZGVzYzsKKwloc19ldGhfZnVuY3Rpb25bM10gPSAoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc2lua19kZXNjOworCWhzX2V0aF9mdW5jdGlvbls0XSA9IE5VTEw7CisjZWxzZQorCWhzX2V0aF9mdW5jdGlvblsxXSA9IE5VTEw7CisjZW5kaWYKK30KKworI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfcm5kaXNfZnVuY3Rpb24gW10gPSB7CisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJm90Z19kZXNjcmlwdG9yLAorCS8qIGNvbnRyb2wgaW50ZXJmYWNlIG1hdGNoZXMgQUNNLCBub3QgRXRoZXJuZXQgKi8KKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmcm5kaXNfY29udHJvbF9pbnRmLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmY2FsbF9tZ210X2Rlc2NyaXB0b3IsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmFjbV9kZXNjcmlwdG9yLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZ1bmlvbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19zdGF0dXNfZGVzYywKKwkvKiBkYXRhIGludGVyZmFjZSBoYXMgbm8gYWx0c2V0dGluZyAqLworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZybmRpc19kYXRhX2ludGYsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3NvdXJjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19zaW5rX2Rlc2MsCisJTlVMTCwKK307CisjZW5kaWYKKworCisvKiBtYXhwYWNrZXQgYW5kIG90aGVyIHRyYW5zZmVyIGNoYXJhY3RlcmlzdGljcyB2YXJ5IGJ5IHNwZWVkLiAqLworI2RlZmluZSBlcF9kZXNjKGcsaHMsZnMpICgoKGcpLT5zcGVlZD09VVNCX1NQRUVEX0hJR0gpPyhocyk6KGZzKSkKKworI2Vsc2UKKworLyogaWYgdGhlcmUncyBubyBoaWdoIHNwZWVkIHN1cHBvcnQsIG1heHBhY2tldCBkb2Vzbid0IGNoYW5nZS4gKi8KKyNkZWZpbmUgZXBfZGVzYyhnLGhzLGZzKSBmcworCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGhzX3N1YnNldF9kZXNjcmlwdG9ycyh2b2lkKQoreworfQorCisjZW5kaWYJLyogIUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBkZXNjcmlwdG9ycyB0aGF0IGFyZSBidWlsdCBvbi1kZW1hbmQgKi8KKworc3RhdGljIGNoYXIJCQkJbWFudWZhY3R1cmVyIFs1MF07CitzdGF0aWMgY2hhcgkJCQlwcm9kdWN0X2Rlc2MgWzQwXSA9IERSSVZFUl9ERVNDOworCisjaWZkZWYJREVWX0NPTkZJR19DREMKKy8qIGFkZHJlc3MgdGhhdCB0aGUgaG9zdCB3aWxsIHVzZSAuLi4gdXN1YWxseSBhc3NpZ25lZCBhdCByYW5kb20gKi8KK3N0YXRpYyBjaGFyCQkJCWV0aGFkZHIgWzIgKiBFVEhfQUxFTiArIDFdOworI2VuZGlmCisKKy8qIHN0YXRpYyBzdHJpbmdzLCBpbiBVVEYtOCAqLworc3RhdGljIHN0cnVjdCB1c2Jfc3RyaW5nCQlzdHJpbmdzIFtdID0geworCXsgU1RSSU5HX01BTlVGQUNUVVJFUiwJbWFudWZhY3R1cmVyLCB9LAorCXsgU1RSSU5HX1BST0RVQ1QsCXByb2R1Y3RfZGVzYywgfSwKKwl7IFNUUklOR19EQVRBLAkJIkV0aGVybmV0IERhdGEiLCB9LAorI2lmZGVmCURFVl9DT05GSUdfQ0RDCisJeyBTVFJJTkdfQ0RDLAkJIkNEQyBFdGhlcm5ldCIsIH0sCisJeyBTVFJJTkdfRVRIQUREUiwJZXRoYWRkciwgfSwKKwl7IFNUUklOR19DT05UUk9MLAkiQ0RDIENvbW11bmljYXRpb25zIENvbnRyb2wiLCB9LAorI2VuZGlmCisjaWZkZWYJREVWX0NPTkZJR19TVUJTRVQKKwl7IFNUUklOR19TVUJTRVQsCSJDREMgRXRoZXJuZXQgU3Vic2V0IiwgfSwKKyNlbmRpZgorI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCisJeyBTVFJJTkdfUk5ESVMsCQkiUk5ESVMiLCB9LAorCXsgU1RSSU5HX1JORElTX0NPTlRST0wsCSJSTkRJUyBDb21tdW5pY2F0aW9ucyBDb250cm9sIiwgfSwKKyNlbmRpZgorCXsgIH0JCS8qIGVuZCBvZiBsaXN0ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncwlzdHJpbmd0YWIgPSB7CisJLmxhbmd1YWdlCT0gMHgwNDA5LAkvKiBlbi11cyAqLworCS5zdHJpbmdzCT0gc3RyaW5ncywKK307CisKKy8qCisgKiBvbmUgY29uZmlnLCB0d28gaW50ZXJmYWNlczogIGNvbnRyb2wsIGRhdGEuCisgKiBjb21wbGljYXRpb25zOiBjbGFzcyBkZXNjcmlwdG9ycywgYW5kIGFuIGFsdHNldHRpbmcuCisgKi8KK3N0YXRpYyBpbnQKK2NvbmZpZ19idWYgKGVudW0gdXNiX2RldmljZV9zcGVlZCBzcGVlZCwKKwl1OCAqYnVmLCB1OCB0eXBlLAorCXVuc2lnbmVkIGluZGV4LCBpbnQgaXNfb3RnKQoreworCWludAkJCQkJbGVuOworCWNvbnN0IHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IJKmNvbmZpZzsKKwljb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyCSoqZnVuY3Rpb247CisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisJaW50CQkJCWhzID0gKHNwZWVkID09IFVTQl9TUEVFRF9ISUdIKTsKKworCWlmICh0eXBlID09IFVTQl9EVF9PVEhFUl9TUEVFRF9DT05GSUcpCisJCWhzID0gIWhzOworI2RlZmluZSB3aGljaF9mbih0KQkoaHMgPyBoc18gIyMgdCAjIyBfZnVuY3Rpb24gOiBmc18gIyMgdCAjIyBfZnVuY3Rpb24pCisjZWxzZQorI2RlZmluZQl3aGljaF9mbih0KQkoZnNfICMjIHQgIyMgX2Z1bmN0aW9uKQorI2VuZGlmCisKKwlpZiAoaW5kZXggPj0gZGV2aWNlX2Rlc2MuYk51bUNvbmZpZ3VyYXRpb25zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCisJLyogbGlzdCB0aGUgUk5ESVMgY29uZmlnIGZpcnN0LCB0byBtYWtlIE1pY3Jvc29mdCdzIGRyaXZlcnMKKwkgKiBoYXBweS4gRE9DU0lTIDEuMCBuZWVkcyB0aGlzIHRvby4KKwkgKi8KKwlpZiAoZGV2aWNlX2Rlc2MuYk51bUNvbmZpZ3VyYXRpb25zID09IDIgJiYgaW5kZXggPT0gMCkgeworCQljb25maWcgPSAmcm5kaXNfY29uZmlnOworCQlmdW5jdGlvbiA9IHdoaWNoX2ZuIChybmRpcyk7CisJfSBlbHNlCisjZW5kaWYKKwl7CisJCWNvbmZpZyA9ICZldGhfY29uZmlnOworCQlmdW5jdGlvbiA9IHdoaWNoX2ZuIChldGgpOworCX0KKworCS8qIGZvciBub3csIGRvbid0IGFkdmVydGlzZSBzcnAtb25seSBkZXZpY2VzICovCisJaWYgKCFpc19vdGcpCisJCWZ1bmN0aW9uKys7CisKKwlsZW4gPSB1c2JfZ2FkZ2V0X2NvbmZpZ19idWYgKGNvbmZpZywgYnVmLCBVU0JfQlVGU0laLCBmdW5jdGlvbik7CisJaWYgKGxlbiA8IDApCisJCXJldHVybiBsZW47CisJKChzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yICopIGJ1ZiktPmJEZXNjcmlwdG9yVHlwZSA9IHR5cGU7CisJcmV0dXJuIGxlbjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgZXRoX3N0YXJ0IChzdHJ1Y3QgZXRoX2RldiAqZGV2LCBpbnQgZ2ZwX2ZsYWdzKTsKK3N0YXRpYyBpbnQgYWxsb2NfcmVxdWVzdHMgKHN0cnVjdCBldGhfZGV2ICpkZXYsIHVuc2lnbmVkIG4sIGludCBnZnBfZmxhZ3MpOworCisjaWZkZWYJREVWX0NPTkZJR19DREMKK3N0YXRpYyBpbmxpbmUgaW50IGV0aGVyX2FsdF9lcF9zZXR1cCAoc3RydWN0IGV0aF9kZXYgKmRldiwgc3RydWN0IHVzYl9lcCAqZXApCit7CisJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpkOworCisJLyogV2l0aCBDREMsICB0aGUgaG9zdCBpc24ndCBhbGxvd2VkIHRvIHVzZSB0aGVzZSB0d28gZGF0YQorCSAqIGVuZHBvaW50cyBpbiB0aGUgZGVmYXVsdCBhbHRzZXR0aW5nIGZvciB0aGUgaW50ZXJmYWNlLgorCSAqIHNvIHdlIGRvbid0IGFjdGl2YXRlIHRoZW0geWV0LiAgUmVzZXQgZnJvbSBTRVRfSU5URVJGQUNFLgorCSAqCisJICogU3RyaWN0bHkgc3BlYWtpbmcgUk5ESVMgc2hvdWxkIHdvcmsgdGhlIHNhbWU6IGFjdGl2YXRpb24gaXMKKwkgKiBhIHNpZGUgZWZmZWN0IG9mIHNldHRpbmcgYSBwYWNrZXQgZmlsdGVyLiAgRGVhY3RpdmF0aW9uIGlzCisJICogZnJvbSBSRU1PVEVfTkRJU19IQUxUX01TRywgcmVzZXQgZnJvbSBSRU1PVEVfTkRJU19SRVNFVF9NU0cuCisJICovCisKKwkvKiBvbmUgZW5kcG9pbnQgd3JpdGVzIGRhdGEgYmFjayBJTiB0byB0aGUgaG9zdCAqLworCWlmIChzdHJjbXAgKGVwLT5uYW1lLCBFUF9JTl9OQU1FKSA9PSAwKSB7CisJCWQgPSBlcF9kZXNjIChkZXYtPmdhZGdldCwgJmhzX3NvdXJjZV9kZXNjLCAmZnNfc291cmNlX2Rlc2MpOworCQllcC0+ZHJpdmVyX2RhdGEgPSBkZXY7CisJCWRldi0+aW4gPSBkOworCisJLyogb25lIGVuZHBvaW50IGp1c3QgcmVhZHMgT1VUIHBhY2tldHMgKi8KKwl9IGVsc2UgaWYgKHN0cmNtcCAoZXAtPm5hbWUsIEVQX09VVF9OQU1FKSA9PSAwKSB7CisJCWQgPSBlcF9kZXNjIChkZXYtPmdhZGdldCwgJmhzX3NpbmtfZGVzYywgJmZzX3NpbmtfZGVzYyk7CisJCWVwLT5kcml2ZXJfZGF0YSA9IGRldjsKKwkJZGV2LT5vdXQgPSBkOworCisJLyogb3B0aW9uYWwgc3RhdHVzL25vdGlmaWNhdGlvbiBlbmRwb2ludCAqLworCX0gZWxzZSBpZiAoRVBfU1RBVFVTX05BTUUgJiYKKwkJCXN0cmNtcCAoZXAtPm5hbWUsIEVQX1NUQVRVU19OQU1FKSA9PSAwKSB7CisJCWludAkJCXJlc3VsdDsKKworCQlkID0gZXBfZGVzYyAoZGV2LT5nYWRnZXQsICZoc19zdGF0dXNfZGVzYywgJmZzX3N0YXR1c19kZXNjKTsKKwkJcmVzdWx0ID0gdXNiX2VwX2VuYWJsZSAoZXAsIGQpOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCXJldHVybiByZXN1bHQ7CisKKwkJZXAtPmRyaXZlcl9kYXRhID0gZGV2OworCQlkZXYtPnN0YXR1cyA9IGQ7CisJfQorCXJldHVybiAwOworfQorI2VuZGlmCisKKyNpZglkZWZpbmVkKERFVl9DT05GSUdfU1VCU0VUKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfRVRIX1JORElTKQorc3RhdGljIGlubGluZSBpbnQgZXRoZXJfZXBfc2V0dXAgKHN0cnVjdCBldGhfZGV2ICpkZXYsIHN0cnVjdCB1c2JfZXAgKmVwKQoreworCWludAkJCQkJcmVzdWx0OworCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqZDsKKworCS8qIENEQyBzdWJzZXQgaXMgc2ltcGxlcjogIGlmIHRoZSBkZXZpY2UgaXMgdGhlcmUsCisJICogaXQncyBsaXZlIHdpdGggcnggYW5kIHR4IGVuZHBvaW50cy4KKwkgKgorCSAqIERvIHRoaXMgYXMgYSBzaG9ydGN1dCBmb3IgUk5ESVMgdG9vLgorCSAqLworCisJLyogb25lIGVuZHBvaW50IHdyaXRlcyBkYXRhIGJhY2sgSU4gdG8gdGhlIGhvc3QgKi8KKwlpZiAoc3RyY21wIChlcC0+bmFtZSwgRVBfSU5fTkFNRSkgPT0gMCkgeworCQlkID0gZXBfZGVzYyAoZGV2LT5nYWRnZXQsICZoc19zb3VyY2VfZGVzYywgJmZzX3NvdXJjZV9kZXNjKTsKKwkJcmVzdWx0ID0gdXNiX2VwX2VuYWJsZSAoZXAsIGQpOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCXJldHVybiByZXN1bHQ7CisKKwkJZXAtPmRyaXZlcl9kYXRhID0gZGV2OworCQlkZXYtPmluID0gZDsKKworCS8qIG9uZSBlbmRwb2ludCBqdXN0IHJlYWRzIE9VVCBwYWNrZXRzICovCisJfSBlbHNlIGlmIChzdHJjbXAgKGVwLT5uYW1lLCBFUF9PVVRfTkFNRSkgPT0gMCkgeworCQlkID0gZXBfZGVzYyAoZGV2LT5nYWRnZXQsICZoc19zaW5rX2Rlc2MsICZmc19zaW5rX2Rlc2MpOworCQlyZXN1bHQgPSB1c2JfZXBfZW5hYmxlIChlcCwgZCk7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJcmV0dXJuIHJlc3VsdDsKKworCQllcC0+ZHJpdmVyX2RhdGEgPSBkZXY7CisJCWRldi0+b3V0ID0gZDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50CitzZXRfZXRoZXJfY29uZmlnIChzdHJ1Y3QgZXRoX2RldiAqZGV2LCBpbnQgZ2ZwX2ZsYWdzKQoreworCWludAkJCXJlc3VsdCA9IDA7CisJc3RydWN0IHVzYl9lcAkJKmVwOworCXN0cnVjdCB1c2JfZ2FkZ2V0CSpnYWRnZXQgPSBkZXYtPmdhZGdldDsKKworCWdhZGdldF9mb3JfZWFjaF9lcCAoZXAsIGdhZGdldCkgeworI2lmZGVmCURFVl9DT05GSUdfQ0RDCisJCWlmICghZGV2LT5ybmRpcyAmJiBkZXYtPmNkYykgeworCQkJcmVzdWx0ID0gZXRoZXJfYWx0X2VwX3NldHVwIChkZXYsIGVwKTsKKwkJCWlmIChyZXN1bHQgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJfQorI2VuZGlmCisKKyNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUworCQlpZiAoZGV2LT5ybmRpcyAmJiBzdHJjbXAgKGVwLT5uYW1lLCBFUF9TVEFUVVNfTkFNRSkgPT0gMCkgeworCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpkOworCQkJZCA9IGVwX2Rlc2MgKGdhZGdldCwgJmhzX3N0YXR1c19kZXNjLCAmZnNfc3RhdHVzX2Rlc2MpOworCQkJcmVzdWx0ID0gdXNiX2VwX2VuYWJsZSAoZXAsIGQpOworCQkJaWYgKHJlc3VsdCA9PSAwKSB7CisJCQkJZXAtPmRyaXZlcl9kYXRhID0gZGV2OworCQkJCWRldi0+c3RhdHVzID0gZDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfSBlbHNlCisjZW5kaWYKKworCQl7CisjaWYJZGVmaW5lZChERVZfQ09ORklHX1NVQlNFVCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX0VUSF9STkRJUykKKwkJCXJlc3VsdCA9IGV0aGVyX2VwX3NldHVwIChkZXYsIGVwKTsKKwkJCWlmIChyZXN1bHQgPT0gMCkKKwkJCQljb250aW51ZTsKKyNlbmRpZgorCQl9CisKKwkJLyogc3RvcCBvbiBlcnJvciAqLworCQlFUlJPUiAoZGV2LCAiY2FuJ3QgZW5hYmxlICVzLCByZXN1bHQgJWRcbiIsIGVwLT5uYW1lLCByZXN1bHQpOworCQlicmVhazsKKwl9CisJaWYgKCFyZXN1bHQgJiYgKCFkZXYtPmluX2VwIHx8ICFkZXYtPm91dF9lcCkpCisJCXJlc3VsdCA9IC1FTk9ERVY7CisKKwlpZiAocmVzdWx0ID09IDApCisJCXJlc3VsdCA9IGFsbG9jX3JlcXVlc3RzIChkZXYsIHFsZW4gKGdhZGdldCksIGdmcF9mbGFncyk7CisKKwkvKiBvbiBlcnJvciwgZGlzYWJsZSBhbnkgZW5kcG9pbnRzICAqLworCWlmIChyZXN1bHQgPCAwKSB7CisjaWYgZGVmaW5lZChERVZfQ09ORklHX0NEQykgfHwgZGVmaW5lZChDT05GSUdfVVNCX0VUSF9STkRJUykKKwkJaWYgKGRldi0+c3RhdHVzKQorCQkJKHZvaWQpIHVzYl9lcF9kaXNhYmxlIChkZXYtPnN0YXR1c19lcCk7CisjZW5kaWYKKwkJZGV2LT5zdGF0dXMgPSBOVUxMOworI2lmIGRlZmluZWQoREVWX0NPTkZJR19TVUJTRVQpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9FVEhfUk5ESVMpCisJCWlmIChkZXYtPnJuZGlzIHx8ICFkZXYtPmNkYykgeworCQkJaWYgKGRldi0+aW4pCisJCQkJKHZvaWQpIHVzYl9lcF9kaXNhYmxlIChkZXYtPmluX2VwKTsKKwkJCWlmIChkZXYtPm91dCkKKwkJCQkodm9pZCkgdXNiX2VwX2Rpc2FibGUgKGRldi0+b3V0X2VwKTsKKwkJfQorI2VuZGlmCisJCWRldi0+aW4gPSBOVUxMOworCQlkZXYtPm91dCA9IE5VTEw7CisJfSBlbHNlCisKKwkvKiBhY3RpdmF0ZSBub24tQ0RDIGNvbmZpZ3MgcmlnaHQgYXdheQorCSAqIHRoaXMgaXNuJ3Qgc3RyaWN0bHkgYWNjb3JkaW5nIHRvIHRoZSBSTkRJUyBzcGVjCisJICovCisjaWYgZGVmaW5lZChERVZfQ09ORklHX1NVQlNFVCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX0VUSF9STkRJUykKKwlpZiAoZGV2LT5ybmRpcyB8fCAhZGV2LT5jZGMpIHsKKwkJbmV0aWZfY2Fycmllcl9vbiAoZGV2LT5uZXQpOworCQlpZiAobmV0aWZfcnVubmluZyAoZGV2LT5uZXQpKSB7CisJCQlzcGluX3VubG9jayAoJmRldi0+bG9jayk7CisJCQlldGhfc3RhcnQgKGRldiwgR0ZQX0FUT01JQyk7CisJCQlzcGluX2xvY2sgKCZkZXYtPmxvY2spOworCQl9CisJfQorI2VuZGlmCisKKwlpZiAocmVzdWx0ID09IDApCisJCURFQlVHIChkZXYsICJxbGVuICVkXG4iLCBxbGVuIChnYWRnZXQpKTsKKworCS8qIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY2xlYW51cCBvbiBlcnJvciAqLworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGV0aF9yZXNldF9jb25maWcgKHN0cnVjdCBldGhfZGV2ICpkZXYpCit7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CisKKwlpZiAoZGV2LT5jb25maWcgPT0gMCkKKwkJcmV0dXJuOworCisJREVCVUcgKGRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJbmV0aWZfc3RvcF9xdWV1ZSAoZGV2LT5uZXQpOworCW5ldGlmX2NhcnJpZXJfb2ZmIChkZXYtPm5ldCk7CisKKwkvKiBkaXNhYmxlIGVuZHBvaW50cywgZm9yY2luZyAoc3luY2hyb25vdXMpIGNvbXBsZXRpb24gb2YKKwkgKiBwZW5kaW5nIGkvby4gIHRoZW4gZnJlZSB0aGUgcmVxdWVzdHMuCisJICovCisJaWYgKGRldi0+aW4pIHsKKwkJdXNiX2VwX2Rpc2FibGUgKGRldi0+aW5fZXApOworCQl3aGlsZSAobGlrZWx5ICghbGlzdF9lbXB0eSAoJmRldi0+dHhfcmVxcykpKSB7CisJCQlyZXEgPSBjb250YWluZXJfb2YgKGRldi0+dHhfcmVxcy5uZXh0LAorCQkJCQkJc3RydWN0IHVzYl9yZXF1ZXN0LCBsaXN0KTsKKwkJCWxpc3RfZGVsICgmcmVxLT5saXN0KTsKKwkJCXVzYl9lcF9mcmVlX3JlcXVlc3QgKGRldi0+aW5fZXAsIHJlcSk7CisJCX0KKwl9CisJaWYgKGRldi0+b3V0KSB7CisJCXVzYl9lcF9kaXNhYmxlIChkZXYtPm91dF9lcCk7CisJCXdoaWxlIChsaWtlbHkgKCFsaXN0X2VtcHR5ICgmZGV2LT5yeF9yZXFzKSkpIHsKKwkJCXJlcSA9IGNvbnRhaW5lcl9vZiAoZGV2LT5yeF9yZXFzLm5leHQsCisJCQkJCQlzdHJ1Y3QgdXNiX3JlcXVlc3QsIGxpc3QpOworCQkJbGlzdF9kZWwgKCZyZXEtPmxpc3QpOworCQkJdXNiX2VwX2ZyZWVfcmVxdWVzdCAoZGV2LT5vdXRfZXAsIHJlcSk7CisJCX0KKwl9CisKKwlpZiAoZGV2LT5zdGF0dXMpIHsKKwkJdXNiX2VwX2Rpc2FibGUgKGRldi0+c3RhdHVzX2VwKTsKKwl9CisJZGV2LT5jb25maWcgPSAwOworfQorCisvKiBjaGFuZ2Ugb3VyIG9wZXJhdGlvbmFsIGNvbmZpZy4gIG11c3QgYWdyZWUgd2l0aCB0aGUgY29kZQorICogdGhhdCByZXR1cm5zIGNvbmZpZyBkZXNjcmlwdG9ycywgYW5kIGFsdHNldHRpbmcgY29kZS4KKyAqLworc3RhdGljIGludAorZXRoX3NldF9jb25maWcgKHN0cnVjdCBldGhfZGV2ICpkZXYsIHVuc2lnbmVkIG51bWJlciwgaW50IGdmcF9mbGFncykKK3sKKwlpbnQJCQlyZXN1bHQgPSAwOworCXN0cnVjdCB1c2JfZ2FkZ2V0CSpnYWRnZXQgPSBkZXYtPmdhZGdldDsKKworCWlmIChudW1iZXIgPT0gZGV2LT5jb25maWcpCisJCXJldHVybiAwOworCisJaWYgKGdhZGdldF9pc19zYTExMDAgKGdhZGdldCkKKwkJCSYmIGRldi0+Y29uZmlnCisJCQkmJiBhdG9taWNfcmVhZCAoJmRldi0+dHhfcWxlbikgIT0gMCkgeworCQkvKiB0eCBmaWZvIGlzIGZ1bGwsIGJ1dCB3ZSBjYW4ndCBjbGVhciBpdC4uLiovCisJCUlORk8gKGRldiwgImNhbid0IGNoYW5nZSBjb25maWd1cmF0aW9uc1xuIik7CisJCXJldHVybiAtRVNQSVBFOworCX0KKwlldGhfcmVzZXRfY29uZmlnIChkZXYpOworCisJLyogZGVmYXVsdDogIHBhc3MgYWxsIHBhY2tldHMsIG5vIG11bHRpY2FzdCBmaWx0ZXJpbmcgKi8KKwlkZXYtPmNkY19maWx0ZXIgPSAweDAwMGY7CisKKwlzd2l0Y2ggKG51bWJlcikgeworCWNhc2UgREVWX0NPTkZJR19WQUxVRToKKwkJZGV2LT5ybmRpcyA9IDA7CisJCXJlc3VsdCA9IHNldF9ldGhlcl9jb25maWcgKGRldiwgZ2ZwX2ZsYWdzKTsKKwkJYnJlYWs7CisjaWZkZWYJQ09ORklHX1VTQl9FVEhfUk5ESVMKKwljYXNlIERFVl9STkRJU19DT05GSUdfVkFMVUU6CisJCWRldi0+cm5kaXMgPSAxOworCQlyZXN1bHQgPSBzZXRfZXRoZXJfY29uZmlnIChkZXYsIGdmcF9mbGFncyk7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJLyogRkFMTCBUSFJPVUdIICovCisJY2FzZSAwOgorCQlicmVhazsKKwl9CisKKwlpZiAocmVzdWx0KSB7CisJCWlmIChudW1iZXIpCisJCQlldGhfcmVzZXRfY29uZmlnIChkZXYpOworCQl1c2JfZ2FkZ2V0X3ZidXNfZHJhdyhkZXYtPmdhZGdldCwKKwkJCQlkZXYtPmdhZGdldC0+aXNfb3RnID8gOCA6IDEwMCk7CisJfSBlbHNlIHsKKwkJY2hhciAqc3BlZWQ7CisJCXVuc2lnbmVkIHBvd2VyOworCisJCXBvd2VyID0gMiAqIGV0aF9jb25maWcuYk1heFBvd2VyOworCQl1c2JfZ2FkZ2V0X3ZidXNfZHJhdyhkZXYtPmdhZGdldCwgcG93ZXIpOworCisJCXN3aXRjaCAoZ2FkZ2V0LT5zcGVlZCkgeworCQljYXNlIFVTQl9TUEVFRF9GVUxMOglzcGVlZCA9ICJmdWxsIjsgYnJlYWs7CisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CXNwZWVkID0gImhpZ2giOyBicmVhazsKKyNlbmRpZgorCQlkZWZhdWx0OiAJCXNwZWVkID0gIj8iOyBicmVhazsKKwkJfQorCisJCWRldi0+Y29uZmlnID0gbnVtYmVyOworCQlJTkZPIChkZXYsICIlcyBzcGVlZCBjb25maWcgIyVkOiAlZCBtQSwgJXMsIHVzaW5nICVzXG4iLAorCQkJCXNwZWVkLCBudW1iZXIsIHBvd2VyLCBkcml2ZXJfZGVzYywKKwkJCQlkZXYtPnJuZGlzCisJCQkJCT8gIlJORElTIgorCQkJCQk6IChkZXYtPmNkYworCQkJCQkJPyAiQ0RDIEV0aGVybmV0IgorCQkJCQkJOiAiQ0RDIEV0aGVybmV0IFN1YnNldCIpKTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmCURFVl9DT05GSUdfQ0RDCisKK3N0YXRpYyB2b2lkIGV0aF9zdGF0dXNfY29tcGxldGUgKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgdXNiX2NkY19ub3RpZmljYXRpb24JKmV2ZW50ID0gcmVxLT5idWY7CisJaW50CQkJCXZhbHVlID0gcmVxLT5zdGF0dXM7CisJc3RydWN0IGV0aF9kZXYJCQkqZGV2ID0gZXAtPmRyaXZlcl9kYXRhOworCisJLyogaXNzdWUgdGhlIHNlY29uZCBub3RpZmljYXRpb24gaWYgaG9zdCByZWFkcyB0aGUgZmlyc3QgKi8KKwlpZiAoZXZlbnQtPmJOb3RpZmljYXRpb25UeXBlID09IFVTQl9DRENfTk9USUZZX05FVFdPUktfQ09OTkVDVElPTgorCQkJJiYgdmFsdWUgPT0gMCkgeworCQlfX2xlMzIJKmRhdGEgPSByZXEtPmJ1ZiArIHNpemVvZiAqZXZlbnQ7CisKKwkJZXZlbnQtPmJtUmVxdWVzdFR5cGUgPSAweEExOworCQlldmVudC0+Yk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX05PVElGWV9TUEVFRF9DSEFOR0U7CisJCWV2ZW50LT53VmFsdWUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgwKTsKKwkJZXZlbnQtPndJbmRleCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDEpOworCQlldmVudC0+d0xlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDgpOworCisJCS8qIFNQRUVEX0NIQU5HRSBkYXRhIGlzIHVwL2Rvd24gc3BlZWRzIGluIGJpdHMvc2VjICovCisJCWRhdGEgWzBdID0gZGF0YSBbMV0gPSBjcHVfdG9fbGUzMiAoQklUUkFURSAoZGV2LT5nYWRnZXQpKTsKKworCQlyZXEtPmxlbmd0aCA9IFNUQVRVU19CWVRFQ09VTlQ7CisJCXZhbHVlID0gdXNiX2VwX3F1ZXVlIChlcCwgcmVxLCBHRlBfQVRPTUlDKTsKKwkJREVCVUcgKGRldiwgInNlbmQgU1BFRURfQ0hBTkdFIC0tPiAlZFxuIiwgdmFsdWUpOworCQlpZiAodmFsdWUgPT0gMCkKKwkJCXJldHVybjsKKwl9IGVsc2UgaWYgKHZhbHVlICE9IC1FQ09OTlJFU0VUKQorCQlERUJVRyAoZGV2LCAiZXZlbnQgJTAyeCAtLT4gJWRcbiIsCisJCQlldmVudC0+Yk5vdGlmaWNhdGlvblR5cGUsIHZhbHVlKTsKKwlldmVudC0+Ym1SZXF1ZXN0VHlwZSA9IDB4ZmY7Cit9CisKK3N0YXRpYyB2b2lkIGlzc3VlX3N0YXJ0X3N0YXR1cyAoc3RydWN0IGV0aF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJCSpyZXEgPSBkZXYtPnN0YXRfcmVxOworCXN0cnVjdCB1c2JfY2RjX25vdGlmaWNhdGlvbgkqZXZlbnQ7CisJaW50CQkJCXZhbHVlOworIAorCURFQlVHIChkZXYsICIlcywgZmx1c2ggb2xkIHN0YXR1cyBmaXJzdFxuIiwgX19GVU5DVElPTl9fKTsKKworCS8qIGZsdXNoIG9sZCBzdGF0dXMKKwkgKgorCSAqIEZJWE1FIHVnbHkgaWRpb20sIG1heWJlIHdlJ2QgYmUgYmV0dGVyIHdpdGgganVzdAorCSAqIGEgImNhbmNlbCB0aGUgd2hvbGUgcXVldWUiIHByaW1pdGl2ZSBzaW5jZSBhbnkKKwkgKiB1bmxpbmstb25lIHByaW1pdGl2ZSBoYXMgd2F5IHRvbyBtYW55IGVycm9yIG1vZGVzLgorCSAqIGhlcmUsIHdlICJrbm93IiB0b2dnbGUgaXMgYWxyZWFkeSBjbGVhci4uLgorCSAqLworCXVzYl9lcF9kaXNhYmxlIChkZXYtPnN0YXR1c19lcCk7CisJdXNiX2VwX2VuYWJsZSAoZGV2LT5zdGF0dXNfZXAsIGRldi0+c3RhdHVzKTsKKworCS8qIDMuOC4xIHNheXMgdG8gaXNzdWUgZmlyc3QgTkVUV09SS19DT05ORUNUSU9OLCB0aGVuCisJICogYSBTUEVFRF9DSEFOR0UuICBjb3VsZCBiZSB1c2VmdWwgaW4gc29tZSBjb25maWdzLgorCSAqLworCWV2ZW50ID0gcmVxLT5idWY7CisJZXZlbnQtPmJtUmVxdWVzdFR5cGUgPSAweEExOworCWV2ZW50LT5iTm90aWZpY2F0aW9uVHlwZSA9IFVTQl9DRENfTk9USUZZX05FVFdPUktfQ09OTkVDVElPTjsKKwlldmVudC0+d1ZhbHVlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMSk7CS8qIGNvbm5lY3RlZCAqLworCWV2ZW50LT53SW5kZXggPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgxKTsKKwlldmVudC0+d0xlbmd0aCA9IDA7CisKKwlyZXEtPmxlbmd0aCA9IHNpemVvZiAqZXZlbnQ7CisJcmVxLT5jb21wbGV0ZSA9IGV0aF9zdGF0dXNfY29tcGxldGU7CisJdmFsdWUgPSB1c2JfZXBfcXVldWUgKGRldi0+c3RhdHVzX2VwLCByZXEsIEdGUF9BVE9NSUMpOworCWlmICh2YWx1ZSA8IDApCisJCURFQlVHIChkZXYsICJzdGF0dXMgYnVmIHF1ZXVlIC0tPiAlZFxuIiwgdmFsdWUpOworfQorCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgZXRoX3NldHVwX2NvbXBsZXRlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJaWYgKHJlcS0+c3RhdHVzIHx8IHJlcS0+YWN0dWFsICE9IHJlcS0+bGVuZ3RoKQorCQlERUJVRyAoKHN0cnVjdCBldGhfZGV2ICopIGVwLT5kcml2ZXJfZGF0YSwKKwkJCQkic2V0dXAgY29tcGxldGUgLS0+ICVkLCAlZC8lZFxuIiwKKwkJCQlyZXEtPnN0YXR1cywgcmVxLT5hY3R1YWwsIHJlcS0+bGVuZ3RoKTsKK30KKworI2lmZGVmIENPTkZJR19VU0JfRVRIX1JORElTCisKK3N0YXRpYyB2b2lkIHJuZGlzX3Jlc3BvbnNlX2NvbXBsZXRlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJaWYgKHJlcS0+c3RhdHVzIHx8IHJlcS0+YWN0dWFsICE9IHJlcS0+bGVuZ3RoKQorCQlERUJVRyAoKHN0cnVjdCBldGhfZGV2ICopIGVwLT5kcml2ZXJfZGF0YSwKKwkJCSJybmRpcyByZXNwb25zZSBjb21wbGV0ZSAtLT4gJWQsICVkLyVkXG4iLAorCQkJcmVxLT5zdGF0dXMsIHJlcS0+YWN0dWFsLCByZXEtPmxlbmd0aCk7CisKKwkvKiBkb25lIHNlbmRpbmcgYWZ0ZXIgVVNCX0NEQ19HRVRfRU5DQVBTVUxBVEVEX1JFU1BPTlNFICovCit9CisKK3N0YXRpYyB2b2lkIHJuZGlzX2NvbW1hbmRfY29tcGxldGUgKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgZXRoX2RldiAgICAgICAgICAqZGV2ID0gZXAtPmRyaXZlcl9kYXRhOworCWludAkJCXN0YXR1czsKKwkKKwkvKiByZWNlaXZlZCBSTkRJUyBjb21tYW5kIGZyb20gVVNCX0NEQ19TRU5EX0VOQ0FQU1VMQVRFRF9DT01NQU5EICovCisJc3Bpbl9sb2NrKCZkZXYtPmxvY2spOworCXN0YXR1cyA9IHJuZGlzX21zZ19wYXJzZXIgKGRldi0+cm5kaXNfY29uZmlnLCAodTggKikgcmVxLT5idWYpOworCWlmIChzdGF0dXMgPCAwKQorCQlFUlJPUihkZXYsICIlczogcm5kaXMgcGFyc2UgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKK30KKworI2VuZGlmCS8qIFJORElTICovCisKKy8qCisgKiBUaGUgc2V0dXAoKSBjYWxsYmFjayBpbXBsZW1lbnRzIGFsbCB0aGUgZXAwIGZ1bmN0aW9uYWxpdHkgdGhhdCdzIG5vdAorICogaGFuZGxlZCBsb3dlciBkb3duLiAgQ0RDIGhhcyBhIG51bWJlciBvZiBsZXNzLWNvbW1vbiBmZWF0dXJlczoKKyAqCisgKiAgLSB0d28gaW50ZXJmYWNlczogIGNvbnRyb2wsIGFuZCBldGhlcm5ldCBkYXRhCisgKiAgLSBFdGhlcm5ldCBkYXRhIGludGVyZmFjZSBoYXMgdHdvIGFsdHNldHRpbmdzOiAgZGVmYXVsdCwgYW5kIGFjdGl2ZQorICogIC0gY2xhc3Mtc3BlY2lmaWMgZGVzY3JpcHRvcnMgZm9yIHRoZSBjb250cm9sIGludGVyZmFjZQorICogIC0gY2xhc3Mtc3BlY2lmaWMgY29udHJvbCByZXF1ZXN0cworICovCitzdGF0aWMgaW50CitldGhfc2V0dXAgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCit7CisJc3RydWN0IGV0aF9kZXYJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXEgPSBkZXYtPnJlcTsKKwlpbnQJCQl2YWx1ZSA9IC1FT1BOT1RTVVBQOworCXUxNgkJCXdJbmRleCA9IGN0cmwtPndJbmRleDsKKwl1MTYJCQl3VmFsdWUgPSBjdHJsLT53VmFsdWU7CisJdTE2CQkJd0xlbmd0aCA9IGN0cmwtPndMZW5ndGg7CisKKwkvKiBkZXNjcmlwdG9ycyBqdXN0IGdvIGludG8gdGhlIHByZS1hbGxvY2F0ZWQgZXAwIGJ1ZmZlciwKKwkgKiB3aGlsZSBjb25maWcgY2hhbmdlIGV2ZW50cyBtYXkgZW5hYmxlIG5ldHdvcmsgdHJhZmZpYy4KKwkgKi8KKwlyZXEtPmNvbXBsZXRlID0gZXRoX3NldHVwX2NvbXBsZXRlOworCXN3aXRjaCAoY3RybC0+YlJlcXVlc3QpIHsKKworCWNhc2UgVVNCX1JFUV9HRVRfREVTQ1JJUFRPUjoKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSBVU0JfRElSX0lOKQorCQkJYnJlYWs7CisJCXN3aXRjaCAod1ZhbHVlID4+IDgpIHsKKworCQljYXNlIFVTQl9EVF9ERVZJQ0U6CisJCQl2YWx1ZSA9IG1pbiAod0xlbmd0aCwgKHUxNikgc2l6ZW9mIGRldmljZV9kZXNjKTsKKwkJCW1lbWNweSAocmVxLT5idWYsICZkZXZpY2VfZGVzYywgdmFsdWUpOworCQkJYnJlYWs7CisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisJCWNhc2UgVVNCX0RUX0RFVklDRV9RVUFMSUZJRVI6CisJCQlpZiAoIWdhZGdldC0+aXNfZHVhbHNwZWVkKQorCQkJCWJyZWFrOworCQkJdmFsdWUgPSBtaW4gKHdMZW5ndGgsICh1MTYpIHNpemVvZiBkZXZfcXVhbGlmaWVyKTsKKwkJCW1lbWNweSAocmVxLT5idWYsICZkZXZfcXVhbGlmaWVyLCB2YWx1ZSk7CisJCQlicmVhazsKKworCQljYXNlIFVTQl9EVF9PVEhFUl9TUEVFRF9DT05GSUc6CisJCQlpZiAoIWdhZGdldC0+aXNfZHVhbHNwZWVkKQorCQkJCWJyZWFrOworCQkJLy8gRkFMTFRIUk9VR0gKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgKi8KKwkJY2FzZSBVU0JfRFRfQ09ORklHOgorCQkJdmFsdWUgPSBjb25maWdfYnVmIChnYWRnZXQtPnNwZWVkLCByZXEtPmJ1ZiwKKwkJCQkJd1ZhbHVlID4+IDgsCisJCQkJCXdWYWx1ZSAmIDB4ZmYsCisJCQkJCWdhZGdldC0+aXNfb3RnKTsKKwkJCWlmICh2YWx1ZSA+PSAwKQorCQkJCXZhbHVlID0gbWluICh3TGVuZ3RoLCAodTE2KSB2YWx1ZSk7CisJCQlicmVhazsKKworCQljYXNlIFVTQl9EVF9TVFJJTkc6CisJCQl2YWx1ZSA9IHVzYl9nYWRnZXRfZ2V0X3N0cmluZyAoJnN0cmluZ3RhYiwKKwkJCQkJd1ZhbHVlICYgMHhmZiwgcmVxLT5idWYpOworCQkJaWYgKHZhbHVlID49IDApCisJCQkJdmFsdWUgPSBtaW4gKHdMZW5ndGgsICh1MTYpIHZhbHVlKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJY2FzZSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IDApCisJCQlicmVhazsKKwkJaWYgKGdhZGdldC0+YV9obnBfc3VwcG9ydCkKKwkJCURFQlVHIChkZXYsICJITlAgYXZhaWxhYmxlXG4iKTsKKwkJZWxzZSBpZiAoZ2FkZ2V0LT5hX2FsdF9obnBfc3VwcG9ydCkKKwkJCURFQlVHIChkZXYsICJITlAgbmVlZHMgYSBkaWZmZXJlbnQgcm9vdCBwb3J0XG4iKTsKKwkJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKwkJdmFsdWUgPSBldGhfc2V0X2NvbmZpZyAoZGV2LCB3VmFsdWUsIEdGUF9BVE9NSUMpOworCQlzcGluX3VubG9jayAoJmRldi0+bG9jayk7CisJCWJyZWFrOworCWNhc2UgVVNCX1JFUV9HRVRfQ09ORklHVVJBVElPTjoKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSBVU0JfRElSX0lOKQorCQkJYnJlYWs7CisJCSoodTggKilyZXEtPmJ1ZiA9IGRldi0+Y29uZmlnOworCQl2YWx1ZSA9IG1pbiAod0xlbmd0aCwgKHUxNikgMSk7CisJCWJyZWFrOworCisJY2FzZSBVU0JfUkVRX1NFVF9JTlRFUkZBQ0U6CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gVVNCX1JFQ0lQX0lOVEVSRkFDRQorCQkJCXx8ICFkZXYtPmNvbmZpZworCQkJCXx8IHdJbmRleCA+IDEpCisJCQlicmVhazsKKwkJaWYgKCFkZXYtPmNkYyAmJiB3SW5kZXggIT0gMCkKKwkJCWJyZWFrOworCQlzcGluX2xvY2sgKCZkZXYtPmxvY2spOworCisJCS8qIFBYQSBoYXJkd2FyZSBwYXJ0aWFsbHkgaGFuZGxlcyBTRVRfSU5URVJGQUNFOworCQkgKiB3ZSBuZWVkIHRvIGtsdWdlIGFyb3VuZCB0aGF0IGludGVyZmVyZW5jZS4KKwkJICovCisJCWlmIChnYWRnZXRfaXNfcHhhIChnYWRnZXQpKSB7CisJCQl2YWx1ZSA9IGV0aF9zZXRfY29uZmlnIChkZXYsIERFVl9DT05GSUdfVkFMVUUsCisJCQkJCQlHRlBfQVRPTUlDKTsKKwkJCWdvdG8gZG9uZV9zZXRfaW50ZjsKKwkJfQorCisjaWZkZWYgREVWX0NPTkZJR19DREMKKwkJc3dpdGNoICh3SW5kZXgpIHsKKwkJY2FzZSAwOgkJLyogY29udHJvbC9tYXN0ZXIgaW50ZiAqLworCQkJaWYgKHdWYWx1ZSAhPSAwKQorCQkJCWJyZWFrOworCQkJaWYgKGRldi0+c3RhdHVzKSB7CisJCQkJdXNiX2VwX2Rpc2FibGUgKGRldi0+c3RhdHVzX2VwKTsKKwkJCQl1c2JfZXBfZW5hYmxlIChkZXYtPnN0YXR1c19lcCwgZGV2LT5zdGF0dXMpOworCQkJfQorCQkJdmFsdWUgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMToJCS8qIGRhdGEgaW50ZiAqLworCQkJaWYgKHdWYWx1ZSA+IDEpCisJCQkJYnJlYWs7CisJCQl1c2JfZXBfZGlzYWJsZSAoZGV2LT5pbl9lcCk7CisJCQl1c2JfZXBfZGlzYWJsZSAoZGV2LT5vdXRfZXApOworCisJCQkvKiBDREMgcmVxdWlyZXMgdGhlIGRhdGEgdHJhbnNmZXJzIG5vdCBiZSBkb25lIGZyb20KKwkJCSAqIHRoZSBkZWZhdWx0IGludGVyZmFjZSBzZXR0aW5nIC4uLiBhbHNvLCBzZXR0aW5nCisJCQkgKiB0aGUgbm9uLWRlZmF1bHQgaW50ZXJmYWNlIGNsZWFycyBmaWx0ZXJzIGV0Yy4KKwkJCSAqLworCQkJaWYgKHdWYWx1ZSA9PSAxKSB7CisJCQkJdXNiX2VwX2VuYWJsZSAoZGV2LT5pbl9lcCwgZGV2LT5pbik7CisJCQkJdXNiX2VwX2VuYWJsZSAoZGV2LT5vdXRfZXAsIGRldi0+b3V0KTsKKwkJCQlkZXYtPmNkY19maWx0ZXIgPSBERUZBVUxUX0ZJTFRFUjsKKwkJCQluZXRpZl9jYXJyaWVyX29uIChkZXYtPm5ldCk7CisJCQkJaWYgKGRldi0+c3RhdHVzKQorCQkJCQlpc3N1ZV9zdGFydF9zdGF0dXMgKGRldik7CisJCQkJaWYgKG5ldGlmX3J1bm5pbmcgKGRldi0+bmV0KSkgeworCQkJCQlzcGluX3VubG9jayAoJmRldi0+bG9jayk7CisJCQkJCWV0aF9zdGFydCAoZGV2LCBHRlBfQVRPTUlDKTsKKwkJCQkJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCW5ldGlmX3N0b3BfcXVldWUgKGRldi0+bmV0KTsKKwkJCQluZXRpZl9jYXJyaWVyX29mZiAoZGV2LT5uZXQpOworCQkJfQorCQkJdmFsdWUgPSAwOworCQkJYnJlYWs7CisJCX0KKyNlbHNlCisJCS8qIEZJWE1FIHRoaXMgaXMgd3JvbmcsIGFzIGlzIHRoZSBhc3N1bXB0aW9uIHRoYXQKKwkJICogYWxsIG5vbi1QWEEgaGFyZHdhcmUgdGFsa3MgcmVhbCBDREMgLi4uCisJCSAqLworCQlkZXZfd2FybiAoJmdhZGdldC0+ZGV2LCAic2V0X2ludGVyZmFjZSBpZ25vcmVkIVxuIik7CisjZW5kaWYgLyogREVWX0NPTkZJR19DREMgKi8KKworZG9uZV9zZXRfaW50ZjoKKwkJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworCQlicmVhazsKKwljYXNlIFVTQl9SRVFfR0VUX0lOVEVSRkFDRToKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAoVVNCX0RJUl9JTnxVU0JfUkVDSVBfSU5URVJGQUNFKQorCQkJCXx8ICFkZXYtPmNvbmZpZworCQkJCXx8IHdJbmRleCA+IDEpCisJCQlicmVhazsKKwkJaWYgKCEoZGV2LT5jZGMgfHwgZGV2LT5ybmRpcykgJiYgd0luZGV4ICE9IDApCisJCQlicmVhazsKKworCQkvKiBmb3IgQ0RDLCBpZmYgY2FycmllciBpcyBvbiwgZGF0YSBpbnRlcmZhY2UgaXMgYWN0aXZlLiAqLworCQlpZiAoZGV2LT5ybmRpcyB8fCB3SW5kZXggIT0gMSkKKwkJCSoodTggKilyZXEtPmJ1ZiA9IDA7CisJCWVsc2UKKwkJCSoodTggKilyZXEtPmJ1ZiA9IG5ldGlmX2NhcnJpZXJfb2sgKGRldi0+bmV0KSA/IDEgOiAwOworCQl2YWx1ZSA9IG1pbiAod0xlbmd0aCwgKHUxNikgMSk7CisJCWJyZWFrOworCisjaWZkZWYgREVWX0NPTkZJR19DREMKKwljYXNlIFVTQl9DRENfU0VUX0VUSEVSTkVUX1BBQ0tFVF9GSUxURVI6CisJCS8qIHNlZSA2LjIuMzA6IG5vIGRhdGEsIHdJbmRleCA9IGludGVyZmFjZSwKKwkJICogd1ZhbHVlID0gcGFja2V0IGZpbHRlciBiaXRtYXAKKwkJICovCisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9JTlRFUkZBQ0UpCisJCQkJfHwgIWRldi0+Y2RjCisJCQkJfHwgZGV2LT5ybmRpcworCQkJCXx8IHdMZW5ndGggIT0gMAorCQkJCXx8IHdJbmRleCA+IDEpCisJCQlicmVhazsKKwkJREVCVUcgKGRldiwgInBhY2tldCBmaWx0ZXIgJTAyeFxuIiwgd1ZhbHVlKTsKKwkJZGV2LT5jZGNfZmlsdGVyID0gd1ZhbHVlOworCQl2YWx1ZSA9IDA7CisJCWJyZWFrOworCisJLyogYW5kIHBvdGVudGlhbGx5OgorCSAqIGNhc2UgVVNCX0NEQ19TRVRfRVRIRVJORVRfTVVMVElDQVNUX0ZJTFRFUlM6CisJICogY2FzZSBVU0JfQ0RDX1NFVF9FVEhFUk5FVF9QTV9QQVRURVJOX0ZJTFRFUjoKKwkgKiBjYXNlIFVTQl9DRENfR0VUX0VUSEVSTkVUX1BNX1BBVFRFUk5fRklMVEVSOgorCSAqIGNhc2UgVVNCX0NEQ19HRVRfRVRIRVJORVRfU1RBVElTVElDOgorCSAqLworCisjZW5kaWYgLyogREVWX0NPTkZJR19DREMgKi8KKworI2lmZGVmIENPTkZJR19VU0JfRVRIX1JORElTCQkKKwkvKiBSTkRJUyB1c2VzIHRoZSBDREMgY29tbWFuZCBlbmNhcHN1bGF0aW9uIG1lY2hhbmlzbSB0byBpbXBsZW1lbnQKKwkgKiBhbiBSUEMgc2NoZW1lLCB3aXRoIG11Y2ggZ2V0dGluZy9zZXR0aW5nIG9mIGF0dHJpYnV0ZXMgYnkgT0lELgorCSAqLworCWNhc2UgVVNCX0NEQ19TRU5EX0VOQ0FQU1VMQVRFRF9DT01NQU5EOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IChVU0JfVFlQRV9DTEFTU3xVU0JfUkVDSVBfSU5URVJGQUNFKQorCQkJCXx8ICFkZXYtPnJuZGlzCisJCQkJfHwgd0xlbmd0aCA+IFVTQl9CVUZTSVoKKwkJCQl8fCB3VmFsdWUKKwkJCQl8fCBybmRpc19jb250cm9sX2ludGYuYkludGVyZmFjZU51bWJlcgorCQkJCQkhPSB3SW5kZXgpCisJCQlicmVhazsKKwkJLyogcmVhZCB0aGUgcmVxdWVzdCwgdGhlbiBwcm9jZXNzIGl0ICovCisJCXZhbHVlID0gd0xlbmd0aDsKKwkJcmVxLT5jb21wbGV0ZSA9IHJuZGlzX2NvbW1hbmRfY29tcGxldGU7CisJCS8qIGxhdGVyLCBybmRpc19jb250cm9sX2FjayAoKSBzZW5kcyBhIG5vdGlmaWNhdGlvbiAqLworCQlicmVhazsKKwkJCisJY2FzZSBVU0JfQ0RDX0dFVF9FTkNBUFNVTEFURURfUkVTUE9OU0U6CisJCWlmICgoVVNCX0RJUl9JTnxVU0JfVFlQRV9DTEFTU3xVU0JfUkVDSVBfSU5URVJGQUNFKQorCQkJCQk9PSBjdHJsLT5iUmVxdWVzdFR5cGUKKwkJCQkmJiBkZXYtPnJuZGlzCisJCQkJLy8gJiYgd0xlbmd0aCA+PSAweDA0MDAKKwkJCQkmJiAhd1ZhbHVlCisJCQkJJiYgcm5kaXNfY29udHJvbF9pbnRmLmJJbnRlcmZhY2VOdW1iZXIKKwkJCQkJPT0gd0luZGV4KSB7CisJCQl1OCAqYnVmOworCisJCQkvKiByZXR1cm4gdGhlIHJlc3VsdCAqLworCQkJYnVmID0gcm5kaXNfZ2V0X25leHRfcmVzcG9uc2UgKGRldi0+cm5kaXNfY29uZmlnLAorCQkJCQkJICAgICAgICZ2YWx1ZSk7CisJCQlpZiAoYnVmKSB7CisJCQkJbWVtY3B5IChyZXEtPmJ1ZiwgYnVmLCB2YWx1ZSk7CisJCQkJcmVxLT5jb21wbGV0ZSA9IHJuZGlzX3Jlc3BvbnNlX2NvbXBsZXRlOworCQkJCXJuZGlzX2ZyZWVfcmVzcG9uc2UoZGV2LT5ybmRpc19jb25maWcsIGJ1Zik7CisJCQl9CisJCQkvKiBlbHNlIHN0YWxscyAuLi4gc3BlYyBzYXlzIHRvIGF2b2lkIHRoYXQgKi8KKwkJfQorCQlicmVhazsKKyNlbmRpZgkvKiBSTkRJUyAqLworCisJZGVmYXVsdDoKKwkJVkRFQlVHIChkZXYsCisJCQkidW5rbm93biBjb250cm9sIHJlcSUwMnguJTAyeCB2JTA0eCBpJTA0eCBsJWRcbiIsCisJCQljdHJsLT5iUmVxdWVzdFR5cGUsIGN0cmwtPmJSZXF1ZXN0LAorCQkJd1ZhbHVlLCB3SW5kZXgsIHdMZW5ndGgpOworCX0KKworCS8qIHJlc3BvbmQgd2l0aCBkYXRhIHRyYW5zZmVyIGJlZm9yZSBzdGF0dXMgcGhhc2U/ICovCisJaWYgKHZhbHVlID49IDApIHsKKwkJcmVxLT5sZW5ndGggPSB2YWx1ZTsKKwkJcmVxLT56ZXJvID0gdmFsdWUgPCB3TGVuZ3RoCisJCQkJJiYgKHZhbHVlICUgZ2FkZ2V0LT5lcDAtPm1heHBhY2tldCkgPT0gMDsKKwkJdmFsdWUgPSB1c2JfZXBfcXVldWUgKGdhZGdldC0+ZXAwLCByZXEsIEdGUF9BVE9NSUMpOworCQlpZiAodmFsdWUgPCAwKSB7CisJCQlERUJVRyAoZGV2LCAiZXBfcXVldWUgLS0+ICVkXG4iLCB2YWx1ZSk7CisJCQlyZXEtPnN0YXR1cyA9IDA7CisJCQlldGhfc2V0dXBfY29tcGxldGUgKGdhZGdldC0+ZXAwLCByZXEpOworCQl9CisJfQorCisJLyogaG9zdCBlaXRoZXIgc3RhbGxzICh2YWx1ZSA8IDApIG9yIHJlcG9ydHMgc3VjY2VzcyAqLworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQKK2V0aF9kaXNjb25uZWN0IChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBldGhfZGV2CQkqZGV2ID0gZ2V0X2dhZGdldF9kYXRhIChnYWRnZXQpOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwluZXRpZl9zdG9wX3F1ZXVlIChkZXYtPm5ldCk7CisJbmV0aWZfY2Fycmllcl9vZmYgKGRldi0+bmV0KTsKKwlldGhfcmVzZXRfY29uZmlnIChkZXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIEZJWE1FIFJORElTIHNob3VsZCBlbnRlciBSTkRJU19VTklOSVRJQUxJWkVEICovCisKKwkvKiBuZXh0IHdlIG1heSBnZXQgc2V0dXAoKSBjYWxscyB0byBlbnVtZXJhdGUgbmV3IGNvbm5lY3Rpb25zOworCSAqIG9yIGFuIHVuYmluZCgpIGR1cmluZyBzaHV0ZG93biAoaW5jbHVkaW5nIHJlbW92aW5nIG1vZHVsZSkuCisJICovCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIE5FVFdPUksgRFJJVkVSIEhPT0tVUCAodG8gdGhlIGxheWVyIGFib3ZlIHRoaXMgZHJpdmVyKSAqLworCitzdGF0aWMgaW50IGV0aF9jaGFuZ2VfbXR1IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBpbnQgbmV3X210dSkKK3sKKwlzdHJ1Y3QgZXRoX2RldgkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCS8vIEZJWE1FIGlmIHJuZGlzLCBkb24ndCBjaGFuZ2Ugd2hpbGUgbGluaydzIGxpdmUKKworCWlmIChuZXdfbXR1IDw9IEVUSF9ITEVOIHx8IG5ld19tdHUgPiBFVEhfRlJBTUVfTEVOKQorCQlyZXR1cm4gLUVSQU5HRTsKKwkvKiBubyB6ZXJvLWxlbmd0aCBwYWNrZXQgcmVhZCB3YW50ZWQgYWZ0ZXIgbXR1LXNpemVkIHBhY2tldHMgKi8KKwlpZiAoKChuZXdfbXR1ICsgc2l6ZW9mIChzdHJ1Y3QgZXRoaGRyKSkgJSBkZXYtPmluX2VwLT5tYXhwYWNrZXQpID09IDApCisJCXJldHVybiAtRURPTTsKKwluZXQtPm10dSA9IG5ld19tdHU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZXRoX2dldF9zdGF0cyAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlyZXR1cm4gJigoc3RydWN0IGV0aF9kZXYgKiluZXRkZXZfcHJpdihuZXQpKS0+c3RhdHM7Cit9CisKK3N0YXRpYyB2b2lkIGV0aF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICpwKQoreworCXN0cnVjdCBldGhfZGV2CSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCXN0cmxjcHkocC0+ZHJpdmVyLCBzaG9ydG5hbWUsIHNpemVvZiBwLT5kcml2ZXIpOworCXN0cmxjcHkocC0+dmVyc2lvbiwgRFJJVkVSX1ZFUlNJT04sIHNpemVvZiBwLT52ZXJzaW9uKTsKKwlzdHJsY3B5KHAtPmZ3X3ZlcnNpb24sIGRldi0+Z2FkZ2V0LT5uYW1lLCBzaXplb2YgcC0+ZndfdmVyc2lvbik7CisJc3RybGNweSAocC0+YnVzX2luZm8sIGRldi0+Z2FkZ2V0LT5kZXYuYnVzX2lkLCBzaXplb2YgcC0+YnVzX2luZm8pOworfQorCitzdGF0aWMgdTMyIGV0aF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCBldGhfZGV2CSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCXJldHVybiBkZXYtPmdhZGdldC0+c3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV047Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0geworCS5nZXRfZHJ2aW5mbyA9IGV0aF9nZXRfZHJ2aW5mbywKKwkuZ2V0X2xpbmsgPSBldGhfZ2V0X2xpbmsKK307CisKK3N0YXRpYyB2b2lkIGRlZmVyX2tldmVudCAoc3RydWN0IGV0aF9kZXYgKmRldiwgaW50IGZsYWcpCit7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQgKGZsYWcsICZkZXYtPnRvZG8pKQorCQlyZXR1cm47CisJaWYgKCFzY2hlZHVsZV93b3JrICgmZGV2LT53b3JrKSkKKwkJRVJST1IgKGRldiwgImtldmVudCAlZCBtYXkgaGF2ZSBiZWVuIGRyb3BwZWRcbiIsIGZsYWcpOworCWVsc2UKKwkJREVCVUcgKGRldiwgImtldmVudCAlZCBzY2hlZHVsZWRcbiIsIGZsYWcpOworfQorCitzdGF0aWMgdm9pZCByeF9jb21wbGV0ZSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKTsKKworc3RhdGljIGludAorcnhfc3VibWl0IChzdHJ1Y3QgZXRoX2RldiAqZGV2LCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSwgaW50IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnNrYjsKKwlpbnQJCQlyZXR2YWwgPSAtRU5PTUVNOworCXNpemVfdAkJCXNpemU7CisKKwkvKiBQYWRkaW5nIHVwIHRvIFJYX0VYVFJBIGhhbmRsZXMgbWlub3IgZGlzYWdyZWVtZW50cyB3aXRoIGhvc3QuCisJICogTm9ybWFsbHkgd2UgdXNlIHRoZSBVU0IgInRlcm1pbmF0ZSBvbiBzaG9ydCByZWFkIiBjb252ZW50aW9uOworCSAqIHNvIGFsbG93IHVwIHRvIChOKm1heHBhY2tldCksIHNpbmNlIHRoYXQgbWVtb3J5IGlzIG5vcm1hbGx5CisJICogYWxyZWFkeSBhbGxvY2F0ZWQuICBTb21lIGhhcmR3YXJlIGRvZXNuJ3QgZGVhbCB3ZWxsIHdpdGggc2hvcnQKKwkgKiByZWFkcyAoZS5nLiBETUEgbXVzdCBiZSBOKm1heHBhY2tldCksIHNvIGZvciBub3cgZG9uJ3QgdHJpbSBhCisJICogYnl0ZSBvZmYgdGhlIGVuZCAodG8gZm9yY2UgaGFyZHdhcmUgZXJyb3JzIG9uIG92ZXJmbG93KS4KKwkgKgorCSAqIFJORElTIHVzZXMgaW50ZXJuYWwgZnJhbWluZywgYW5kIGV4cGxpY2l0bHkgYWxsb3dzIHNlbmRlcnMgdG8KKwkgKiBwYWQgdG8gZW5kLW9mLXBhY2tldC4gIFRoYXQncyBwb3RlbnRpYWxseSBuaWNlIGZvciBzcGVlZCwKKwkgKiBidXQgbWVhbnMgcmVjZWl2ZXJzIGNhbid0IHJlY292ZXIgc3luY2ggb24gdGhlaXIgb3duLgorCSAqLworCXNpemUgPSAoc2l6ZW9mIChzdHJ1Y3QgZXRoaGRyKSArIGRldi0+bmV0LT5tdHUgKyBSWF9FWFRSQSk7CisJc2l6ZSArPSBkZXYtPm91dF9lcC0+bWF4cGFja2V0IC0gMTsKKyNpZmRlZiBDT05GSUdfVVNCX0VUSF9STkRJUworCWlmIChkZXYtPnJuZGlzKQorCQlzaXplICs9IHNpemVvZiAoc3RydWN0IHJuZGlzX3BhY2tldF9tc2dfdHlwZSk7CisjZW5kaWYJCisJc2l6ZSAtPSBzaXplICUgZGV2LT5vdXRfZXAtPm1heHBhY2tldDsKKworCWlmICgoc2tiID0gYWxsb2Nfc2tiIChzaXplICsgTkVUX0lQX0FMSUdOLCBnZnBfZmxhZ3MpKSA9PSAwKSB7CisJCURFQlVHIChkZXYsICJubyByeCBza2JcbiIpOworCQlnb3RvIGVub21lbTsKKwl9CisJCisJLyogU29tZSBwbGF0Zm9ybXMgcGVyZm9ybSBiZXR0ZXIgd2hlbiBJUCBwYWNrZXRzIGFyZSBhbGlnbmVkLAorCSAqIGJ1dCBvbiBhdCBsZWFzdCBvbmUsIGNoZWNrc3VtbWluZyBmYWlscyBvdGhlcndpc2UuICBOb3RlOgorCSAqIHRoaXMgZG9lc24ndCBhY2NvdW50IGZvciB2YXJpYWJsZS1zaXplZCBSTkRJUyBoZWFkZXJzLgorCSAqLworCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKKworCXJlcS0+YnVmID0gc2tiLT5kYXRhOworCXJlcS0+bGVuZ3RoID0gc2l6ZTsKKwlyZXEtPmNvbXBsZXRlID0gcnhfY29tcGxldGU7CisJcmVxLT5jb250ZXh0ID0gc2tiOworCisJcmV0dmFsID0gdXNiX2VwX3F1ZXVlIChkZXYtPm91dF9lcCwgcmVxLCBnZnBfZmxhZ3MpOworCWlmIChyZXR2YWwgPT0gLUVOT01FTSkKK2Vub21lbToKKwkJZGVmZXJfa2V2ZW50IChkZXYsIFdPUktfUlhfTUVNT1JZKTsKKwlpZiAocmV0dmFsKSB7CisJCURFQlVHIChkZXYsICJyeCBzdWJtaXQgLS0+ICVkXG4iLCByZXR2YWwpOworCQlkZXZfa2ZyZWVfc2tiX2FueSAoc2tiKTsKKwkJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKwkJbGlzdF9hZGQgKCZyZXEtPmxpc3QsICZkZXYtPnJ4X3JlcXMpOworCQlzcGluX3VubG9jayAoJmRldi0+bG9jayk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHJ4X2NvbXBsZXRlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IHNrX2J1ZmYJKnNrYiA9IHJlcS0+Y29udGV4dDsKKwlzdHJ1Y3QgZXRoX2RldgkqZGV2ID0gZXAtPmRyaXZlcl9kYXRhOworCWludAkJc3RhdHVzID0gcmVxLT5zdGF0dXM7CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCisJLyogbm9ybWFsIGNvbXBsZXRpb24gKi8KKwljYXNlIDA6CisJCXNrYl9wdXQgKHNrYiwgcmVxLT5hY3R1YWwpOworI2lmZGVmIENPTkZJR19VU0JfRVRIX1JORElTCisJCS8qIHdlIGtub3cgTWF4UGFja2V0c1BlclRyYW5zZmVyID09IDEgaGVyZSAqLworCQlpZiAoZGV2LT5ybmRpcykKKwkJCXJuZGlzX3JtX2hkciAocmVxLT5idWYsICYoc2tiLT5sZW4pKTsKKyNlbmRpZgorCQlpZiAoRVRIX0hMRU4gPiBza2ItPmxlbiB8fCBza2ItPmxlbiA+IEVUSF9GUkFNRV9MRU4pIHsKKwkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCURFQlVHIChkZXYsICJyeCBsZW5ndGggJWRcbiIsIHNrYi0+bGVuKTsKKwkJCWJyZWFrOworCQl9CisKKwkJc2tiLT5kZXYgPSBkZXYtPm5ldDsKKwkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zIChza2IsIGRldi0+bmV0KTsKKwkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisKKwkJLyogbm8gYnVmZmVyIGNvcGllcyBuZWVkZWQsIHVubGVzcyBoYXJkd2FyZSBjYW4ndAorCQkgKiB1c2Ugc2tiIGJ1ZmZlcnMuCisJCSAqLworCQlzdGF0dXMgPSBuZXRpZl9yeCAoc2tiKTsKKwkJc2tiID0gTlVMTDsKKwkJYnJlYWs7CisKKwkvKiBzb2Z0d2FyZS1kcml2ZW4gaW50ZXJmYWNlIHNodXRkb3duICovCisJY2FzZSAtRUNPTk5SRVNFVDoJCS8vIHVubGluaworCWNhc2UgLUVTSFVURE9XTjoJCS8vIGRpc2Nvbm5lY3QgZXRjCisJCVZERUJVRyAoZGV2LCAicnggc2h1dGRvd24sIGNvZGUgJWRcbiIsIHN0YXR1cyk7CisJCWdvdG8gcXVpZXNjZTsKKworCS8qIGZvciBoYXJkd2FyZSBhdXRvbWFnaWMgKHN1Y2ggYXMgcHhhKSAqLworCWNhc2UgLUVDT05OQUJPUlRFRDoJCS8vIGVuZHBvaW50IHJlc2V0CisJCURFQlVHIChkZXYsICJyeCAlcyByZXNldFxuIiwgZXAtPm5hbWUpOworCQlkZWZlcl9rZXZlbnQgKGRldiwgV09SS19SWF9NRU1PUlkpOworcXVpZXNjZToKKwkJZGV2X2tmcmVlX3NrYl9hbnkgKHNrYik7CisJCWdvdG8gY2xlYW47CisKKwkvKiBkYXRhIG92ZXJydW4gKi8KKwljYXNlIC1FT1ZFUkZMT1c6CisJCWRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJLy8gRkFMTFRIUk9VR0gKKwkgICAgCisJZGVmYXVsdDoKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJREVCVUcgKGRldiwgInJ4IHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHNrYikKKwkJZGV2X2tmcmVlX3NrYl9hbnkgKHNrYik7CisJaWYgKCFuZXRpZl9ydW5uaW5nIChkZXYtPm5ldCkpIHsKK2NsZWFuOgorCQkvKiBub2JvZHkgcmVhZGluZyByeF9yZXFzLCBzbyBubyBkZXYtPmxvY2sgKi8KKwkJbGlzdF9hZGQgKCZyZXEtPmxpc3QsICZkZXYtPnJ4X3JlcXMpOworCQlyZXEgPSBOVUxMOworCX0KKwlpZiAocmVxKQorCQlyeF9zdWJtaXQgKGRldiwgcmVxLCBHRlBfQVRPTUlDKTsKK30KKworc3RhdGljIGludCBwcmVhbGxvYyAoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgc3RydWN0IHVzYl9lcCAqZXAsCisJCQl1bnNpZ25lZCBuLCBpbnQgZ2ZwX2ZsYWdzKQoreworCXVuc2lnbmVkCQlpOworCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOworCisJaWYgKCFuKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIHF1ZXVlL3JlY3ljbGUgdXAgdG8gTiByZXF1ZXN0cyAqLworCWkgPSBuOworCWxpc3RfZm9yX2VhY2hfZW50cnkgKHJlcSwgbGlzdCwgbGlzdCkgeworCQlpZiAoaS0tID09IDApCisJCQlnb3RvIGV4dHJhOworCX0KKwl3aGlsZSAoaS0tKSB7CisJCXJlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0IChlcCwgZ2ZwX2ZsYWdzKTsKKwkJaWYgKCFyZXEpCisJCQlyZXR1cm4gbGlzdF9lbXB0eSAobGlzdCkgPyAtRU5PTUVNIDogMDsKKwkJbGlzdF9hZGQgKCZyZXEtPmxpc3QsIGxpc3QpOworCX0KKwlyZXR1cm4gMDsKKworZXh0cmE6CisJLyogZnJlZSBleHRyYXMgKi8KKwlmb3IgKDs7KSB7CisJCXN0cnVjdCBsaXN0X2hlYWQJKm5leHQ7CisKKwkJbmV4dCA9IHJlcS0+bGlzdC5uZXh0OworCQlsaXN0X2RlbCAoJnJlcS0+bGlzdCk7CisJCXVzYl9lcF9mcmVlX3JlcXVlc3QgKGVwLCByZXEpOworCisJCWlmIChuZXh0ID09IGxpc3QpCisJCQlicmVhazsKKworCQlyZXEgPSBjb250YWluZXJfb2YgKG5leHQsIHN0cnVjdCB1c2JfcmVxdWVzdCwgbGlzdCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsbG9jX3JlcXVlc3RzIChzdHJ1Y3QgZXRoX2RldiAqZGV2LCB1bnNpZ25lZCBuLCBpbnQgZ2ZwX2ZsYWdzKQoreworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBwcmVhbGxvYyAoJmRldi0+dHhfcmVxcywgZGV2LT5pbl9lcCwgbiwgZ2ZwX2ZsYWdzKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsOworCXN0YXR1cyA9IHByZWFsbG9jICgmZGV2LT5yeF9yZXFzLCBkZXYtPm91dF9lcCwgbiwgZ2ZwX2ZsYWdzKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBmYWlsOworCXJldHVybiAwOworZmFpbDoKKwlERUJVRyAoZGV2LCAiY2FuJ3QgYWxsb2MgcmVxdWVzdHNcbiIpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIHJ4X2ZpbGwgKHN0cnVjdCBldGhfZGV2ICpkZXYsIGludCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwljbGVhcl9iaXQgKFdPUktfUlhfTUVNT1JZLCAmZGV2LT50b2RvKTsKKworCS8qIGZpbGwgdW51c2VkIHJ4cSBzbG90cyB3aXRoIHNvbWUgc2tiICovCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkgKCZkZXYtPnJ4X3JlcXMpKSB7CisJCXJlcSA9IGNvbnRhaW5lcl9vZiAoZGV2LT5yeF9yZXFzLm5leHQsCisJCQkJc3RydWN0IHVzYl9yZXF1ZXN0LCBsaXN0KTsKKwkJbGlzdF9kZWxfaW5pdCAoJnJlcS0+bGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCQlpZiAocnhfc3VibWl0IChkZXYsIHJlcSwgZ2ZwX2ZsYWdzKSA8IDApIHsKKwkJCWRlZmVyX2tldmVudCAoZGV2LCBXT1JLX1JYX01FTU9SWSk7CisJCQlyZXR1cm47CisJCX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGV0aF93b3JrICh2b2lkICpfZGV2KQoreworCXN0cnVjdCBldGhfZGV2CQkqZGV2ID0gX2RldjsKKworCWlmICh0ZXN0X2JpdCAoV09SS19SWF9NRU1PUlksICZkZXYtPnRvZG8pKSB7CisJCWlmIChuZXRpZl9ydW5uaW5nIChkZXYtPm5ldCkpCisJCQlyeF9maWxsIChkZXYsIEdGUF9LRVJORUwpOworCQllbHNlCisJCQljbGVhcl9iaXQgKFdPUktfUlhfTUVNT1JZLCAmZGV2LT50b2RvKTsKKwl9CisKKwlpZiAoZGV2LT50b2RvKQorCQlERUJVRyAoZGV2LCAid29yayBkb25lLCBmbGFncyA9IDB4JWx4XG4iLCBkZXYtPnRvZG8pOworfQorCitzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBza19idWZmCSpza2IgPSByZXEtPmNvbnRleHQ7CisJc3RydWN0IGV0aF9kZXYJKmRldiA9IGVwLT5kcml2ZXJfZGF0YTsKKworCXN3aXRjaCAocmVxLT5zdGF0dXMpIHsKKwlkZWZhdWx0OgorCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlWREVCVUcgKGRldiwgInR4IGVyciAlZFxuIiwgcmVxLT5zdGF0dXMpOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgLUVDT05OUkVTRVQ6CQkvLyB1bmxpbmsKKwljYXNlIC1FU0hVVERPV046CQkvLyBkaXNjb25uZWN0IGV0YworCQlicmVhazsKKwljYXNlIDA6CisJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJfQorCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCisJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKwlsaXN0X2FkZCAoJnJlcS0+bGlzdCwgJmRldi0+dHhfcmVxcyk7CisJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworCWRldl9rZnJlZV9za2JfYW55IChza2IpOworCisJYXRvbWljX2RlYyAoJmRldi0+dHhfcWxlbik7CisJaWYgKG5ldGlmX2NhcnJpZXJfb2sgKGRldi0+bmV0KSkKKwkJbmV0aWZfd2FrZV9xdWV1ZSAoZGV2LT5uZXQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBldGhfaXNfcHJvbWlzYyAoc3RydWN0IGV0aF9kZXYgKmRldikKK3sKKwkvKiBubyBmaWx0ZXJzIGZvciB0aGUgQ0RDIHN1YnNldDsgYWx3YXlzIHByb21pc2MgKi8KKwlpZiAoc3Vic2V0X2FjdGl2ZSAoZGV2KSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIGRldi0+Y2RjX2ZpbHRlciAmIFVTQl9DRENfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVM7Cit9CisKK3N0YXRpYyBpbnQgZXRoX3N0YXJ0X3htaXQgKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IGV0aF9kZXYJCSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCWludAkJCWxlbmd0aCA9IHNrYi0+bGVuOworCWludAkJCXJldHZhbDsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IE5VTEw7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwkvKiBhcHBseSBvdXRnb2luZyBDREMgb3IgUk5ESVMgZmlsdGVycyAqLworCWlmICghZXRoX2lzX3Byb21pc2MgKGRldikpIHsKKwkJdTgJCSpkZXN0ID0gc2tiLT5kYXRhOworCisJCWlmIChkZXN0IFswXSAmIDB4MDEpIHsKKwkJCXUxNgl0eXBlOworCisJCQkvKiBpZ25vcmVzIFVTQl9DRENfUEFDS0VUX1RZUEVfTVVMVElDQVNUIGFuZCBob3N0CisJCQkgKiBTRVRfRVRIRVJORVRfTVVMVElDQVNUX0ZJTFRFUlMgcmVxdWVzdHMKKwkJCSAqLworCQkJaWYgKG1lbWNtcCAoZGVzdCwgbmV0LT5icm9hZGNhc3QsIEVUSF9BTEVOKSA9PSAwKQorCQkJCXR5cGUgPSBVU0JfQ0RDX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVDsKKwkJCWVsc2UKKwkJCQl0eXBlID0gVVNCX0NEQ19QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUOworCQkJaWYgKCEoZGV2LT5jZGNfZmlsdGVyICYgdHlwZSkpIHsKKwkJCQlkZXZfa2ZyZWVfc2tiX2FueSAoc2tiKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQkvKiBpZ25vcmVzIFVTQl9DRENfUEFDS0VUX1RZUEVfRElSRUNURUQgKi8KKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCXJlcSA9IGNvbnRhaW5lcl9vZiAoZGV2LT50eF9yZXFzLm5leHQsIHN0cnVjdCB1c2JfcmVxdWVzdCwgbGlzdCk7CisJbGlzdF9kZWwgKCZyZXEtPmxpc3QpOworCWlmIChsaXN0X2VtcHR5ICgmZGV2LT50eF9yZXFzKSkKKwkJbmV0aWZfc3RvcF9xdWV1ZSAobmV0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwkvKiBubyBidWZmZXIgY29waWVzIG5lZWRlZCwgdW5sZXNzIHRoZSBuZXR3b3JrIHN0YWNrIGRpZCBpdAorCSAqIG9yIHRoZSBoYXJkd2FyZSBjYW4ndCB1c2Ugc2tiIGJ1ZmZlcnMuCisJICogb3IgdGhlcmUncyBub3QgZW5vdWdoIHNwYWNlIGZvciBhbnkgUk5ESVMgaGVhZGVycyB3ZSBuZWVkCisJICovCisjaWZkZWYgQ09ORklHX1VTQl9FVEhfUk5ESVMKKwlpZiAoZGV2LT5ybmRpcykgeworCQlzdHJ1Y3Qgc2tfYnVmZgkqc2tiX3JuZGlzOworCisJCXNrYl9ybmRpcyA9IHNrYl9yZWFsbG9jX2hlYWRyb29tIChza2IsCisJCQkJc2l6ZW9mIChzdHJ1Y3Qgcm5kaXNfcGFja2V0X21zZ190eXBlKSk7CisJCWlmICghc2tiX3JuZGlzKQorCQkJZ290byBkcm9wOworCQorCQlkZXZfa2ZyZWVfc2tiX2FueSAoc2tiKTsKKwkJc2tiID0gc2tiX3JuZGlzOworCQlybmRpc19hZGRfaGRyIChza2IpOworCQlsZW5ndGggPSBza2ItPmxlbjsKKwl9CisjZW5kaWYKKwlyZXEtPmJ1ZiA9IHNrYi0+ZGF0YTsKKwlyZXEtPmNvbnRleHQgPSBza2I7CisJcmVxLT5jb21wbGV0ZSA9IHR4X2NvbXBsZXRlOworCisJLyogdXNlIHpscCBmcmFtaW5nIG9uIHR4IGZvciBzdHJpY3QgQ0RDLUV0aGVyIGNvbmZvcm1hbmNlLAorCSAqIHRob3VnaCBhbnkgcm9idXN0IG5ldHdvcmsgcnggcGF0aCBpZ25vcmVzIGV4dHJhIHBhZGRpbmcuCisJICogYW5kIHNvbWUgaGFyZHdhcmUgZG9lc24ndCBsaWtlIHRvIHdyaXRlIHpscHMuCisJICovCisJcmVxLT56ZXJvID0gMTsKKwlpZiAoIWRldi0+emxwICYmIChsZW5ndGggJSBkZXYtPmluX2VwLT5tYXhwYWNrZXQpID09IDApCisJCWxlbmd0aCsrOworCisJcmVxLT5sZW5ndGggPSBsZW5ndGg7CisKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwkvKiB0aHJvdHRsZSBoaWdoc3BlZWQgSVJRIHJhdGUgYmFjayBzbGlnaHRseSAqLworCXJlcS0+bm9faW50ZXJydXB0ID0gKGRldi0+Z2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJPyAoKGF0b21pY19yZWFkICgmZGV2LT50eF9xbGVuKSAlIFRYX0RFTEFZKSAhPSAwKQorCQk6IDA7CisjZW5kaWYKKworCXJldHZhbCA9IHVzYl9lcF9xdWV1ZSAoZGV2LT5pbl9lcCwgcmVxLCBHRlBfQVRPTUlDKTsKKwlzd2l0Y2ggKHJldHZhbCkgeworCWRlZmF1bHQ6CisJCURFQlVHIChkZXYsICJ0eCBxdWV1ZSBlcnIgJWRcbiIsIHJldHZhbCk7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJbmV0LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJCWF0b21pY19pbmMgKCZkZXYtPnR4X3FsZW4pOworCX0KKworCWlmIChyZXR2YWwpIHsKKyNpZmRlZiBDT05GSUdfVVNCX0VUSF9STkRJUworZHJvcDoKKyNlbmRpZgorCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJZGV2X2tmcmVlX3NrYl9hbnkgKHNrYik7CisJCXNwaW5fbG9ja19pcnFzYXZlICgmZGV2LT5sb2NrLCBmbGFncyk7CisJCWlmIChsaXN0X2VtcHR5ICgmZGV2LT50eF9yZXFzKSkKKwkJCW5ldGlmX3N0YXJ0X3F1ZXVlIChuZXQpOworCQlsaXN0X2FkZCAoJnJlcS0+bGlzdCwgJmRldi0+dHhfcmVxcyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBDT05GSUdfVVNCX0VUSF9STkRJUworCitzdGF0aWMgdm9pZCBybmRpc19zZW5kX21lZGlhX3N0YXRlIChzdHJ1Y3QgZXRoX2RldiAqZGV2LCBpbnQgY29ubmVjdCkKK3sKKwlpZiAoIWRldikKKwkJcmV0dXJuOworCQorCWlmIChjb25uZWN0KSB7CisJCWlmIChybmRpc19zaWduYWxfY29ubmVjdCAoZGV2LT5ybmRpc19jb25maWcpKQorCQkJcmV0dXJuOworCX0gZWxzZSB7CisJCWlmIChybmRpc19zaWduYWxfZGlzY29ubmVjdCAoZGV2LT5ybmRpc19jb25maWcpKQorCQkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHZvaWQKK3JuZGlzX2NvbnRyb2xfYWNrX2NvbXBsZXRlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJaWYgKHJlcS0+c3RhdHVzIHx8IHJlcS0+YWN0dWFsICE9IHJlcS0+bGVuZ3RoKQorCQlERUJVRyAoKHN0cnVjdCBldGhfZGV2ICopIGVwLT5kcml2ZXJfZGF0YSwKKwkJCSJybmRpcyBjb250cm9sIGFjayBjb21wbGV0ZSAtLT4gJWQsICVkLyVkXG4iLAorCQkJcmVxLT5zdGF0dXMsIHJlcS0+YWN0dWFsLCByZXEtPmxlbmd0aCk7CisKKwl1c2JfZXBfZnJlZV9idWZmZXIoZXAsIHJlcS0+YnVmLCByZXEtPmRtYSwgOCk7CisJdXNiX2VwX2ZyZWVfcmVxdWVzdChlcCwgcmVxKTsKK30KKworc3RhdGljIGludCBybmRpc19jb250cm9sX2FjayAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlzdHJ1Y3QgZXRoX2RldiAgICAgICAgICAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwl1MzIgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisJc3RydWN0IHVzYl9yZXF1ZXN0ICAgICAgKnJlc3A7CisJCisJLyogaW4gY2FzZSBSTkRJUyBjYWxscyB0aGlzIGFmdGVyIGRpc2Nvbm5lY3QgKi8KKwlpZiAoIWRldi0+c3RhdHVzX2VwKSB7CisJCURFQlVHIChkZXYsICJzdGF0dXMgRU5PREVWXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBub3RpZmljYXRpb24gaWUuIEFDSyAqLworCXJlc3AgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdCAoZGV2LT5zdGF0dXNfZXAsIEdGUF9BVE9NSUMpOworCWlmICghcmVzcCkgeworCQlERUJVRyAoZGV2LCAic3RhdHVzIEVOT01FTVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwkKKwlyZXNwLT5idWYgPSB1c2JfZXBfYWxsb2NfYnVmZmVyIChkZXYtPnN0YXR1c19lcCwgOCwKKwkJCQkJICZyZXNwLT5kbWEsIEdGUF9BVE9NSUMpOworCWlmICghcmVzcC0+YnVmKSB7CisJCURFQlVHIChkZXYsICJzdGF0dXMgYnVmIEVOT01FTVxuIik7CisJCXVzYl9lcF9mcmVlX3JlcXVlc3QgKGRldi0+c3RhdHVzX2VwLCByZXNwKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCQorCS8qIFNlbmQgUk5ESVMgUkVTUE9OU0VfQVZBSUxBQkxFIG5vdGlmaWNhdGlvbjsKKwkgKiBVU0JfQ0RDX05PVElGWV9SRVNQT05TRV9BVkFJTEFCTEUgc2hvdWxkIHdvcmsgdG9vCisJICovCisJcmVzcC0+bGVuZ3RoID0gODsKKwlyZXNwLT5jb21wbGV0ZSA9IHJuZGlzX2NvbnRyb2xfYWNrX2NvbXBsZXRlOworCQorCSooKF9fbGUzMiAqKSByZXNwLT5idWYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSk7CisJKigoX19sZTMyICopIHJlc3AtPmJ1ZiArIDEpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCisJbGVuZ3RoID0gdXNiX2VwX3F1ZXVlIChkZXYtPnN0YXR1c19lcCwgcmVzcCwgR0ZQX0FUT01JQyk7CisJaWYgKGxlbmd0aCA8IDApIHsKKwkJcmVzcC0+c3RhdHVzID0gMDsKKwkJcm5kaXNfY29udHJvbF9hY2tfY29tcGxldGUgKGRldi0+c3RhdHVzX2VwLCByZXNwKTsKKwl9CisJCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgkvKiBSTkRJUyAqLworCitzdGF0aWMgdm9pZCBldGhfc3RhcnQgKHN0cnVjdCBldGhfZGV2ICpkZXYsIGludCBnZnBfZmxhZ3MpCit7CisJREVCVUcgKGRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLyogZmlsbCB0aGUgcnggcXVldWUgKi8KKwlyeF9maWxsIChkZXYsIGdmcF9mbGFncyk7CisKKwkvKiBhbmQgb3BlbiB0aGUgdHggZmxvb2RnYXRlcyAqLyAKKwlhdG9taWNfc2V0ICgmZGV2LT50eF9xbGVuLCAwKTsKKwluZXRpZl93YWtlX3F1ZXVlIChkZXYtPm5ldCk7CisjaWZkZWYgQ09ORklHX1VTQl9FVEhfUk5ESVMKKwlpZiAoZGV2LT5ybmRpcykgeworCQlybmRpc19zZXRfcGFyYW1fbWVkaXVtIChkZXYtPnJuZGlzX2NvbmZpZywKKwkJCQkJTkRJU19NRURJVU1fODAyXzMsCisJCQkJCUJJVFJBVEUoZGV2LT5nYWRnZXQpKTsKKwkJcm5kaXNfc2VuZF9tZWRpYV9zdGF0ZSAoZGV2LCAxKTsKKwl9CisjZW5kaWYJCit9CisKK3N0YXRpYyBpbnQgZXRoX29wZW4gKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IGV0aF9kZXYJCSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCisJREVCVUcgKGRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWlmIChuZXRpZl9jYXJyaWVyX29rIChkZXYtPm5ldCkpCisJCWV0aF9zdGFydCAoZGV2LCBHRlBfS0VSTkVMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBldGhfc3RvcCAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlzdHJ1Y3QgZXRoX2RldgkJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisKKwlWREVCVUcgKGRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCW5ldGlmX3N0b3BfcXVldWUgKG5ldCk7CisKKwlERUJVRyAoZGV2LCAic3RvcCBzdGF0czogcngvdHggJWxkLyVsZCwgZXJycyAlbGQvJWxkXG4iLAorCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMsIGRldi0+c3RhdHMudHhfcGFja2V0cywgCisJCWRldi0+c3RhdHMucnhfZXJyb3JzLCBkZXYtPnN0YXRzLnR4X2Vycm9ycworCQkpOworCisJLyogZW5zdXJlIHRoZXJlIGFyZSBubyBtb3JlIGFjdGl2ZSByZXF1ZXN0cyAqLworCWlmIChkZXYtPmNvbmZpZykgeworCQl1c2JfZXBfZGlzYWJsZSAoZGV2LT5pbl9lcCk7CisJCXVzYl9lcF9kaXNhYmxlIChkZXYtPm91dF9lcCk7CisJCWlmIChuZXRpZl9jYXJyaWVyX29rIChkZXYtPm5ldCkpIHsKKwkJCURFQlVHIChkZXYsICJob3N0IHN0aWxsIHVzaW5nIGluL291dCBlbmRwb2ludHNcbiIpOworCQkJLy8gRklYTUUgaWRpb20gbWF5IGxlYXZlIHRvZ2dsZSB3cm9uZyBoZXJlCisJCQl1c2JfZXBfZW5hYmxlIChkZXYtPmluX2VwLCBkZXYtPmluKTsKKwkJCXVzYl9lcF9lbmFibGUgKGRldi0+b3V0X2VwLCBkZXYtPm91dCk7CisJCX0KKwkJaWYgKGRldi0+c3RhdHVzX2VwKSB7CisJCQl1c2JfZXBfZGlzYWJsZSAoZGV2LT5zdGF0dXNfZXApOworCQkJdXNiX2VwX2VuYWJsZSAoZGV2LT5zdGF0dXNfZXAsIGRldi0+c3RhdHVzKTsKKwkJfQorCX0KKwkKKyNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUworCWlmIChkZXYtPnJuZGlzKSB7CisJCXJuZGlzX3NldF9wYXJhbV9tZWRpdW0gKGRldi0+cm5kaXNfY29uZmlnLAorCQkJCQlORElTX01FRElVTV84MDJfMywgMCk7CisJCXJuZGlzX3NlbmRfbWVkaWFfc3RhdGUgKGRldiwgMCk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCB1c2JfcmVxdWVzdCAqZXRoX3JlcV9hbGxvYyAoc3RydWN0IHVzYl9lcCAqZXAsIHVuc2lnbmVkIHNpemUpCit7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CisKKwlyZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdCAoZXAsIEdGUF9LRVJORUwpOworCWlmICghcmVxKQorCQlyZXR1cm4gTlVMTDsKKworCXJlcS0+YnVmID0ga21hbGxvYyAoc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXEtPmJ1ZikgeworCQl1c2JfZXBfZnJlZV9yZXF1ZXN0IChlcCwgcmVxKTsKKwkJcmVxID0gTlVMTDsKKwl9CisJcmV0dXJuIHJlcTsKK30KKworc3RhdGljIHZvaWQKK2V0aF9yZXFfZnJlZSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCWtmcmVlIChyZXEtPmJ1Zik7CisJdXNiX2VwX2ZyZWVfcmVxdWVzdCAoZXAsIHJlcSk7Cit9CisKKworc3RhdGljIHZvaWQKK2V0aF91bmJpbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IGV0aF9kZXYJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7CisKKwlERUJVRyAoZGV2LCAidW5iaW5kXG4iKTsKKyNpZmRlZiBDT05GSUdfVVNCX0VUSF9STkRJUworCXJuZGlzX2RlcmVnaXN0ZXIgKGRldi0+cm5kaXNfY29uZmlnKTsKKwlybmRpc19leGl0ICgpOworI2VuZGlmCisKKwkvKiB3ZSd2ZSBhbHJlYWR5IGJlZW4gZGlzY29ubmVjdGVkIC4uLiBubyBpL28gaXMgYWN0aXZlICovCisJaWYgKGRldi0+cmVxKSB7CisJCWV0aF9yZXFfZnJlZSAoZ2FkZ2V0LT5lcDAsIGRldi0+cmVxKTsKKwkJZGV2LT5yZXEgPSBOVUxMOworCX0KKwlpZiAoZGV2LT5zdGF0X3JlcSkgeworCQlldGhfcmVxX2ZyZWUgKGRldi0+c3RhdHVzX2VwLCBkZXYtPnN0YXRfcmVxKTsKKwkJZGV2LT5zdGF0X3JlcSA9IE5VTEw7CisJfQorCisJdW5yZWdpc3Rlcl9uZXRkZXYgKGRldi0+bmV0KTsKKwlmcmVlX25ldGRldihkZXYtPm5ldCk7CisKKwkvKiBhc3N1bWluZyB3ZSB1c2VkIGtldmVudGQsIGl0IG11c3QgcXVpZXNjZSB0b28gKi8KKwlmbHVzaF9zY2hlZHVsZWRfd29yayAoKTsKKwlzZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCwgTlVMTCk7Cit9CisKK3N0YXRpYyB1OCBfX2luaXQgbmliYmxlICh1bnNpZ25lZCBjaGFyIGMpCit7CisJaWYgKGxpa2VseSAoaXNkaWdpdCAoYykpKQorCQlyZXR1cm4gYyAtICcwJzsKKwljID0gdG91cHBlciAoYyk7CisJaWYgKGxpa2VseSAoaXN4ZGlnaXQgKGMpKSkKKwkJcmV0dXJuIDEwICsgYyAtICdBJzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGdldF9ldGhlcl9hZGRyIChjb25zdCBjaGFyICpzdHIsIHU4ICpkZXZfYWRkcikKK3sKKwlpZiAoc3RyKSB7CisJCXVuc2lnbmVkCWk7CisKKwkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQkJdW5zaWduZWQgY2hhciBudW07CisKKwkJCWlmKCgqc3RyID09ICcuJykgfHwgKCpzdHIgPT0gJzonKSkKKwkJCQlzdHIrKzsKKwkJCW51bSA9IG5pYmJsZSgqc3RyKyspIDw8IDQ7CisJCQludW0gfD0gKG5pYmJsZSgqc3RyKyspKTsKKwkJCWRldl9hZGRyIFtpXSA9IG51bTsKKwkJfQorCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkciAoZGV2X2FkZHIpKQorCQkJcmV0dXJuOworCX0KKwlyYW5kb21fZXRoZXJfYWRkcihkZXZfYWRkcik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0CitldGhfYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgZXRoX2RldgkJKmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0OworCXU4CQkJY2RjID0gMSwgemxwID0gMSwgcm5kaXMgPSAxOworCXN0cnVjdCB1c2JfZXAJCSppbl9lcCwgKm91dF9lcCwgKnN0YXR1c19lcCA9IE5VTEw7CisJaW50CQkJc3RhdHVzID0gLUVOT01FTTsKKworCS8qIHRoZXNlIGZsYWdzIGFyZSBvbmx5IGV2ZXIgY2xlYXJlZDsgY29tcGlsZXIgdGFrZSBub3RlICovCisjaWZuZGVmCURFVl9DT05GSUdfQ0RDCisJY2RjID0gMDsKKyNlbmRpZgorI2lmbmRlZglDT05GSUdfVVNCX0VUSF9STkRJUworCXJuZGlzID0gMDsKKyNlbmRpZgorCisJLyogQmVjYXVzZSBtb3N0IGhvc3Qgc2lkZSBVU0Igc3RhY2tzIGhhbmRsZSBDREMgRXRoZXJuZXQsIHRoYXQKKwkgKiBzdGFuZGFyZCBwcm90b2NvbCBpcyBfc3Ryb25nbHlfIHByZWZlcnJlZCBmb3IgaW50ZXJvcCBwdXJwb3Nlcy4KKwkgKiAoQnkgZXZlcnlvbmUgZXhjZXB0IE1pY3Jvc29mdC4pCisJICovCisJaWYgKGdhZGdldF9pc19uZXQyMjgwIChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMSk7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfZHVtbXkgKGdhZGdldCkpIHsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjAyKTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19weGEgKGdhZGdldCkpIHsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjAzKTsKKwkJLyogcHhhIGRvZXNuJ3Qgc3VwcG9ydCBhbHRzZXR0aW5ncyAqLworCQljZGMgPSAwOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3NoKGdhZGdldCkpIHsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjA0KTsKKwkJLyogc2ggZG9lc24ndCBzdXBwb3J0IG11bHRpcGxlIGludGVyZmFjZXMgb3IgY29uZmlncyAqLworCQljZGMgPSAwOworCQlybmRpcyA9IDA7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfc2ExMTAwIChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwNSk7CisJCS8qIGhhcmR3YXJlIGNhbid0IHdyaXRlIHpscHMgKi8KKwkJemxwID0gMDsKKwkJLyogc2ExMTAwIENBTiBkbyBDREMsIHdpdGhvdXQgc3RhdHVzIGVuZHBvaW50IC4uLiB3ZSB1c2UKKwkJICogbm9uLUNEQyB0byBiZSBjb21wYXRpYmxlIHdpdGggQVJNIExpbnV4LTIuNCAidXNiLWV0aCIuCisJCSAqLworCQljZGMgPSAwOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX2dva3UgKGdhZGdldCkpIHsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjA2KTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19tcTExeHggKGdhZGdldCkpIHsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjA3KTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19vbWFwIChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwOCk7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfbGg3YTQweChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwOSk7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfbjk2MDQoZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMTApOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3B4YTI3eChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIxMSk7CisgCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3MzYzI0MTAoZ2FkZ2V0KSkgeworIAkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjEyKTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19hdDkxKGdhZGdldCkpIHsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjEzKTsKKwl9IGVsc2UgeworCQkvKiBjYW4ndCBhc3N1bWUgQ0RDIHdvcmtzLiAgZG9uJ3Qgd2FudCB0byBkZWZhdWx0IHRvCisJCSAqIGFueXRoaW5nIGxlc3MgZnVuY3Rpb25hbCBvbiBDREMtY2FwYWJsZSBoYXJkd2FyZSwKKwkJICogc28gd2UgZmFpbCBpbiB0aGlzIGNhc2UuCisJCSAqLworCQlkZXZfZXJyICgmZ2FkZ2V0LT5kZXYsCisJCQkiY29udHJvbGxlciAnJXMnIG5vdCByZWNvZ25pemVkXG4iLAorCQkJZ2FkZ2V0LT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXNucHJpbnRmIChtYW51ZmFjdHVyZXIsIHNpemVvZiBtYW51ZmFjdHVyZXIsICIlcyAlcy8lcyIsCisJCXN5c3RlbV91dHNuYW1lLnN5c25hbWUsIHN5c3RlbV91dHNuYW1lLnJlbGVhc2UsCisJCWdhZGdldC0+bmFtZSk7CisKKwkvKiBJZiB0aGVyZSdzIGFuIFJORElTIGNvbmZpZ3VyYXRpb24sIHRoYXQncyB3aGF0IFdpbmRvd3Mgd2FudHMgdG8KKwkgKiBiZSB1c2luZyAuLi4gc28gdXNlIHRoZXNlIHByb2R1Y3QgSURzIGhlcmUgYW5kIGluIHRoZSAibGludXguaW5mIgorCSAqIG5lZWRlZCB0byBpbnN0YWxsIE1TRlQgZHJpdmVycy4gIEN1cnJlbnQgTGludXgga2VybmVscyB3aWxsIHVzZQorCSAqIHRoZSBzZWNvbmQgY29uZmlndXJhdGlvbiBpZiBpdCdzIENEQyBFdGhlcm5ldCwgYW5kIG5lZWQgc29tZSBoZWxwCisJICogdG8gY2hvb3NlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG90aGVyd2lzZS4KKwkgKi8KKwlpZiAocm5kaXMpIHsKKwkJZGV2aWNlX2Rlc2MuaWRWZW5kb3IgPQorCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihSTkRJU19WRU5ET1JfTlVNKTsKKwkJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoUk5ESVNfUFJPRFVDVF9OVU0pOworCQlzbnByaW50ZiAocHJvZHVjdF9kZXNjLCBzaXplb2YgcHJvZHVjdF9kZXNjLAorCQkJIlJORElTLyVzIiwgZHJpdmVyX2Rlc2MpOworCisJLyogQ0RDIHN1YnNldCAuLi4gcmVjb2duaXplZCBieSBMaW51eCBzaW5jZSAyLjQuMTAsIGJ1dCBXaW5kb3dzCisJICogZHJpdmVycyBhcmVuJ3Qgd2lkZWx5IGF2YWlsYWJsZS4KKwkgKi8KKwl9IGVsc2UgaWYgKCFjZGMpIHsKKwkJZGV2aWNlX2Rlc2MuYkRldmljZUNsYXNzID0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDOworCQlkZXZpY2VfZGVzYy5pZFZlbmRvciA9CisJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFNJTVBMRV9WRU5ET1JfTlVNKTsKKwkJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoU0lNUExFX1BST0RVQ1RfTlVNKTsKKwl9CisKKwkvKiBzdXBwb3J0IG9wdGlvbmFsIHZlbmRvci9kaXN0cm8gY3VzdG9taXphdGlvbiAqLworCWlmIChpZFZlbmRvcikgeworCQlpZiAoIWlkUHJvZHVjdCkgeworCQkJZGV2X2VyciAoJmdhZGdldC0+ZGV2LCAiaWRWZW5kb3IgbmVlZHMgaWRQcm9kdWN0IVxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlkZXZpY2VfZGVzYy5pZFZlbmRvciA9IGNwdV90b19sZTE2KGlkVmVuZG9yKTsKKwkJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0gY3B1X3RvX2xlMTYoaWRQcm9kdWN0KTsKKwkJaWYgKGJjZERldmljZSkKKwkJCWRldmljZV9kZXNjLmJjZERldmljZSA9IGNwdV90b19sZTE2KGJjZERldmljZSk7CisJfQorCWlmIChpTWFudWZhY3R1cmVyKQorCQlzdHJsY3B5IChtYW51ZmFjdHVyZXIsIGlNYW51ZmFjdHVyZXIsIHNpemVvZiBtYW51ZmFjdHVyZXIpOworCWlmIChpUHJvZHVjdCkKKwkJc3RybGNweSAocHJvZHVjdF9kZXNjLCBpUHJvZHVjdCwgc2l6ZW9mIHByb2R1Y3RfZGVzYyk7CisKKwkvKiBhbGwgd2UgcmVhbGx5IG5lZWQgaXMgYnVsayBJTi9PVVQgKi8KKwl1c2JfZXBfYXV0b2NvbmZpZ19yZXNldCAoZ2FkZ2V0KTsKKwlpbl9lcCA9IHVzYl9lcF9hdXRvY29uZmlnIChnYWRnZXQsICZmc19zb3VyY2VfZGVzYyk7CisJaWYgKCFpbl9lcCkgeworYXV0b2NvbmZfZmFpbDoKKwkJZGV2X2VyciAoJmdhZGdldC0+ZGV2LAorCQkJImNhbid0IGF1dG9jb25maWd1cmUgb24gJXNcbiIsCisJCQlnYWRnZXQtPm5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJRVBfSU5fTkFNRSA9IGluX2VwLT5uYW1lOworCWluX2VwLT5kcml2ZXJfZGF0YSA9IGluX2VwOwkvKiBjbGFpbSAqLworCQorCW91dF9lcCA9IHVzYl9lcF9hdXRvY29uZmlnIChnYWRnZXQsICZmc19zaW5rX2Rlc2MpOworCWlmICghb3V0X2VwKQorCQlnb3RvIGF1dG9jb25mX2ZhaWw7CisJRVBfT1VUX05BTUUgPSBvdXRfZXAtPm5hbWU7CisJb3V0X2VwLT5kcml2ZXJfZGF0YSA9IG91dF9lcDsJLyogY2xhaW0gKi8KKworI2lmIGRlZmluZWQoREVWX0NPTkZJR19DREMpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9FVEhfUk5ESVMpCisJLyogQ0RDIEV0aGVybmV0IGNvbnRyb2wgaW50ZXJmYWNlIGRvZXNuJ3QgcmVxdWlyZSBhIHN0YXR1cyBlbmRwb2ludC4KKwkgKiBTaW5jZSBzb21lIGhvc3RzIGV4cGVjdCBvbmUsIHRyeSB0byBhbGxvY2F0ZSBvbmUgYW55d2F5LgorCSAqLworCWlmIChjZGMgfHwgcm5kaXMpIHsKKwkJc3RhdHVzX2VwID0gdXNiX2VwX2F1dG9jb25maWcgKGdhZGdldCwgJmZzX3N0YXR1c19kZXNjKTsKKwkJaWYgKHN0YXR1c19lcCkgeworCQkJRVBfU1RBVFVTX05BTUUgPSBzdGF0dXNfZXAtPm5hbWU7CisJCQlzdGF0dXNfZXAtPmRyaXZlcl9kYXRhID0gc3RhdHVzX2VwOwkvKiBjbGFpbSAqLworCQl9IGVsc2UgaWYgKHJuZGlzKSB7CisJCQlkZXZfZXJyICgmZ2FkZ2V0LT5kZXYsCisJCQkJImNhbid0IHJ1biBSTkRJUyBvbiAlc1xuIiwKKwkJCQlnYWRnZXQtPm5hbWUpOworCQkJcmV0dXJuIC1FTk9ERVY7CisjaWZkZWYgREVWX0NPTkZJR19DREMKKwkJLyogcHhhMjV4IG9ubHkgZG9lcyBDREMgc3Vic2V0OyBvZnRlbiB1c2VkIHdpdGggUk5ESVMgKi8KKwkJfSBlbHNlIGlmIChjZGMpIHsKKwkJCWNvbnRyb2xfaW50Zi5iTnVtRW5kcG9pbnRzID0gMDsKKwkJCS8qIEZJWE1FIHJlbW92ZSBlbmRwb2ludCBmcm9tIGRlc2NyaXB0b3IgbGlzdCAqLworI2VuZGlmCisJCX0KKwl9CisjZW5kaWYKKworCS8qIG9uZSBjb25maWc6ICBjZGMsIGVsc2UgbWluaW1hbCBzdWJzZXQgKi8KKwlpZiAoIWNkYykgeworCQlldGhfY29uZmlnLmJOdW1JbnRlcmZhY2VzID0gMTsKKwkJZXRoX2NvbmZpZy5pQ29uZmlndXJhdGlvbiA9IFNUUklOR19TVUJTRVQ7CisJCWZzX3N1YnNldF9kZXNjcmlwdG9ycygpOworCQloc19zdWJzZXRfZGVzY3JpcHRvcnMoKTsKKwl9CisKKwkvKiBGb3Igbm93IFJORElTIGlzIGFsd2F5cyBhIHNlY29uZCBjb25maWcgKi8KKwlpZiAocm5kaXMpCisJCWRldmljZV9kZXNjLmJOdW1Db25maWd1cmF0aW9ucyA9IDI7CisKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwlpZiAocm5kaXMpCisJCWRldl9xdWFsaWZpZXIuYk51bUNvbmZpZ3VyYXRpb25zID0gMjsKKwllbHNlIGlmICghY2RjKQorCQlkZXZfcXVhbGlmaWVyLmJEZXZpY2VDbGFzcyA9IFVTQl9DTEFTU19WRU5ET1JfU1BFQzsKKworCS8qIGFzc3VtZXMgZXAwIHVzZXMgdGhlIHNhbWUgdmFsdWUgZm9yIGJvdGggc3BlZWRzIC4uLiAqLworCWRldl9xdWFsaWZpZXIuYk1heFBhY2tldFNpemUwID0gZGV2aWNlX2Rlc2MuYk1heFBhY2tldFNpemUwOworCisJLyogYW5kIHRoYXQgYWxsIGVuZHBvaW50cyBhcmUgZHVhbC1zcGVlZCAqLworCWhzX3NvdXJjZV9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPSBmc19zb3VyY2VfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCWhzX3NpbmtfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0gZnNfc2lua19kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisjaWYgZGVmaW5lZChERVZfQ09ORklHX0NEQykgfHwgZGVmaW5lZChDT05GSUdfVVNCX0VUSF9STkRJUykKKwlpZiAoRVBfU1RBVFVTX05BTUUpCisJCWhzX3N0YXR1c19kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQkJCWZzX3N0YXR1c19kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisjZW5kaWYKKyNlbmRpZgkvKiBEVUFMU1BFRUQgKi8KKworCWRldmljZV9kZXNjLmJNYXhQYWNrZXRTaXplMCA9IGdhZGdldC0+ZXAwLT5tYXhwYWNrZXQ7CisJdXNiX2dhZGdldF9zZXRfc2VsZnBvd2VyZWQgKGdhZGdldCk7CisKKwlpZiAoZ2FkZ2V0LT5pc19vdGcpIHsKKwkJb3RnX2Rlc2NyaXB0b3IuYm1BdHRyaWJ1dGVzIHw9IFVTQl9PVEdfSE5QLAorCQlldGhfY29uZmlnLmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7CisJCWV0aF9jb25maWcuYk1heFBvd2VyID0gNDsKKyNpZmRlZglDT05GSUdfVVNCX0VUSF9STkRJUworCQlybmRpc19jb25maWcuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKKwkJcm5kaXNfY29uZmlnLmJNYXhQb3dlciA9IDQ7CisjZW5kaWYKKwl9CisKKyAJbmV0ID0gYWxsb2NfZXRoZXJkZXYgKHNpemVvZiAqZGV2KTsKKyAJaWYgKCFuZXQpCisJCXJldHVybiBzdGF0dXM7CisJZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlzcGluX2xvY2tfaW5pdCAoJmRldi0+bG9jayk7CisJSU5JVF9XT1JLICgmZGV2LT53b3JrLCBldGhfd29yaywgZGV2KTsKKwlJTklUX0xJU1RfSEVBRCAoJmRldi0+dHhfcmVxcyk7CisJSU5JVF9MSVNUX0hFQUQgKCZkZXYtPnJ4X3JlcXMpOworCisJLyogbmV0d29yayBkZXZpY2Ugc2V0dXAgKi8KKwlkZXYtPm5ldCA9IG5ldDsKKwlTRVRfTU9EVUxFX09XTkVSIChuZXQpOworCXN0cmNweSAobmV0LT5uYW1lLCAidXNiJWQiKTsKKwlkZXYtPmNkYyA9IGNkYzsKKwlkZXYtPnpscCA9IHpscDsKKworCWRldi0+aW5fZXAgPSBpbl9lcDsKKwlkZXYtPm91dF9lcCA9IG91dF9lcDsKKwlkZXYtPnN0YXR1c19lcCA9IHN0YXR1c19lcDsKKworCS8qIE1vZHVsZSBwYXJhbXMgZm9yIHRoZXNlIGFkZHJlc3NlcyBzaG91bGQgY29tZSBmcm9tIElEIHByb21zLgorCSAqIFRoZSBob3N0IHNpZGUgYWRkcmVzcyBpcyB1c2VkIHdpdGggQ0RDIGFuZCBSTkRJUywgYW5kIGNvbW1vbmx5CisJICogZW5kcyB1cCBpbiBhIHBlcnNpc3RlbnQgY29uZmlnIGRhdGFiYXNlLgorCSAqLworCWdldF9ldGhlcl9hZGRyKGRldl9hZGRyLCBuZXQtPmRldl9hZGRyKTsKKwlpZiAoY2RjIHx8IHJuZGlzKSB7CisJCWdldF9ldGhlcl9hZGRyKGhvc3RfYWRkciwgZGV2LT5ob3N0X21hYyk7CisjaWZkZWYJREVWX0NPTkZJR19DREMKKwkJc25wcmludGYgKGV0aGFkZHIsIHNpemVvZiBldGhhZGRyLCAiJTAyWCUwMlglMDJYJTAyWCUwMlglMDJYIiwKKwkJCWRldi0+aG9zdF9tYWMgWzBdLCBkZXYtPmhvc3RfbWFjIFsxXSwKKwkJCWRldi0+aG9zdF9tYWMgWzJdLCBkZXYtPmhvc3RfbWFjIFszXSwKKwkJCWRldi0+aG9zdF9tYWMgWzRdLCBkZXYtPmhvc3RfbWFjIFs1XSk7CisjZW5kaWYKKwl9CisKKwlpZiAocm5kaXMpIHsKKwkJc3RhdHVzID0gcm5kaXNfaW5pdCgpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJZGV2X2VyciAoJmdhZGdldC0+ZGV2LCAiY2FuJ3QgaW5pdCBSTkRJUywgJWRcbiIsCisJCQkJc3RhdHVzKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCX0KKworCW5ldC0+Y2hhbmdlX210dSA9IGV0aF9jaGFuZ2VfbXR1OworCW5ldC0+Z2V0X3N0YXRzID0gZXRoX2dldF9zdGF0czsKKwluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IGV0aF9zdGFydF94bWl0OworCW5ldC0+b3BlbiA9IGV0aF9vcGVuOworCW5ldC0+c3RvcCA9IGV0aF9zdG9wOworCS8vIHdhdGNoZG9nX3RpbWVvLCB0eF90aW1lb3V0IC4uLgorCS8vIHNldF9tdWx0aWNhc3RfbGlzdAorCVNFVF9FVEhUT09MX09QUyhuZXQsICZvcHMpOworCisJLyogcHJlYWxsb2NhdGUgY29udHJvbCBtZXNzYWdlIGRhdGEgYW5kIGJ1ZmZlciAqLworCWRldi0+cmVxID0gZXRoX3JlcV9hbGxvYyAoZ2FkZ2V0LT5lcDAsIFVTQl9CVUZTSVopOworCWlmICghZGV2LT5yZXEpCisJCWdvdG8gZmFpbDsKKwlkZXYtPnJlcS0+Y29tcGxldGUgPSBldGhfc2V0dXBfY29tcGxldGU7CisKKwkvKiAuLi4gYW5kIG1heWJlIGxpa2V3aXNlIGZvciBzdGF0dXMgdHJhbnNmZXIgKi8KKwlpZiAoZGV2LT5zdGF0dXNfZXApIHsKKwkJZGV2LT5zdGF0X3JlcSA9IGV0aF9yZXFfYWxsb2MgKGRldi0+c3RhdHVzX2VwLAorCQkJCQlTVEFUVVNfQllURUNPVU5UKTsKKwkJaWYgKCFkZXYtPnN0YXRfcmVxKSB7CisJCQlldGhfcmVxX2ZyZWUgKGdhZGdldC0+ZXAwLCBkZXYtPnJlcSk7CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKKwkvKiBmaW5pc2ggaG9va3VwIHRvIGxvd2VyIGxheWVyIC4uLiAqLworCWRldi0+Z2FkZ2V0ID0gZ2FkZ2V0OworCXNldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0LCBkZXYpOworCWdhZGdldC0+ZXAwLT5kcml2ZXJfZGF0YSA9IGRldjsKKwkKKwkvKiB0d28ga2luZHMgb2YgaG9zdC1pbml0aWF0ZWQgc3RhdGUgY2hhbmdlczoKKwkgKiAgLSBpZmYgREFUQSB0cmFuc2ZlciBpcyBhY3RpdmUsIGNhcnJpZXIgaXMgIm9uIgorCSAqICAtIHR4IHF1ZXVlaW5nIGVuYWJsZWQgaWYgb3BlbiAqYW5kKiBjYXJyaWVyIGlzICJvbiIKKwkgKi8KKwluZXRpZl9zdG9wX3F1ZXVlIChkZXYtPm5ldCk7CisJbmV0aWZfY2Fycmllcl9vZmYgKGRldi0+bmV0KTsKKworIAkvLyBTRVRfTkVUREVWX0RFViAoZGV2LT5uZXQsICZnYWRnZXQtPmRldik7CisgCXN0YXR1cyA9IHJlZ2lzdGVyX25ldGRldiAoZGV2LT5uZXQpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGZhaWwxOworCisJSU5GTyAoZGV2LCAiJXMsIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04gIlxuIiwgZHJpdmVyX2Rlc2MpOworCUlORk8gKGRldiwgInVzaW5nICVzLCBPVVQgJXMgSU4gJXMlcyVzXG4iLCBnYWRnZXQtPm5hbWUsCisJCUVQX09VVF9OQU1FLCBFUF9JTl9OQU1FLAorCQlFUF9TVEFUVVNfTkFNRSA/ICIgU1RBVFVTICIgOiAiIiwKKwkJRVBfU1RBVFVTX05BTUUgPyBFUF9TVEFUVVNfTkFNRSA6ICIiCisJCSk7CisJSU5GTyAoZGV2LCAiTUFDICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQluZXQtPmRldl9hZGRyIFswXSwgbmV0LT5kZXZfYWRkciBbMV0sCisJCW5ldC0+ZGV2X2FkZHIgWzJdLCBuZXQtPmRldl9hZGRyIFszXSwKKwkJbmV0LT5kZXZfYWRkciBbNF0sIG5ldC0+ZGV2X2FkZHIgWzVdKTsKKworCWlmIChjZGMgfHwgcm5kaXMpCisJCUlORk8gKGRldiwgIkhPU1QgTUFDICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJZGV2LT5ob3N0X21hYyBbMF0sIGRldi0+aG9zdF9tYWMgWzFdLAorCQkJZGV2LT5ob3N0X21hYyBbMl0sIGRldi0+aG9zdF9tYWMgWzNdLAorCQkJZGV2LT5ob3N0X21hYyBbNF0sIGRldi0+aG9zdF9tYWMgWzVdKTsKKworI2lmZGVmCUNPTkZJR19VU0JfRVRIX1JORElTCisJaWYgKHJuZGlzKSB7CisJCXUzMgl2ZW5kb3JJRCA9IDA7CisKKwkJLyogRklYTUUgUk5ESVMgdmVuZG9yIGlkID09ICJ2ZW5kb3IgTklDIGNvZGUiID09ID8gKi8KKwkJCisJCWRldi0+cm5kaXNfY29uZmlnID0gcm5kaXNfcmVnaXN0ZXIgKHJuZGlzX2NvbnRyb2xfYWNrKTsKKwkJaWYgKGRldi0+cm5kaXNfY29uZmlnIDwgMCkgeworZmFpbDA6CisJCQl1bnJlZ2lzdGVyX25ldGRldiAoZGV2LT5uZXQpOworCQkJc3RhdHVzID0gLUVOT0RFVjsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQkKKwkJLyogdGhlc2Ugc2V0IHVwIGEgbG90IG9mIHRoZSBPSURzIHRoYXQgUk5ESVMgbmVlZHMgKi8KKwkJcm5kaXNfc2V0X2hvc3RfbWFjIChkZXYtPnJuZGlzX2NvbmZpZywgZGV2LT5ob3N0X21hYyk7CisJCWlmIChybmRpc19zZXRfcGFyYW1fZGV2IChkZXYtPnJuZGlzX2NvbmZpZywgZGV2LT5uZXQsCisJCQkJCSAmZGV2LT5zdGF0cykpCisJCQlnb3RvIGZhaWwwOworCQlpZiAocm5kaXNfc2V0X3BhcmFtX3ZlbmRvciAoZGV2LT5ybmRpc19jb25maWcsIHZlbmRvcklELAorCQkJCQkgICAgbWFudWZhY3R1cmVyKSkKKwkJCWdvdG8gZmFpbDA7CisJCWlmIChybmRpc19zZXRfcGFyYW1fbWVkaXVtIChkZXYtPnJuZGlzX2NvbmZpZywKKwkJCQkJICAgIE5ESVNfTUVESVVNXzgwMl8zLAorCQkJCQkgICAgMCkpCisJCQlnb3RvIGZhaWwwOworCQlJTkZPIChkZXYsICJSTkRJUyByZWFkeVxuIik7CisJfQorI2VuZGlmCQorCisJcmV0dXJuIHN0YXR1czsKKworZmFpbDE6CisJZGV2X2RiZygmZ2FkZ2V0LT5kZXYsICJyZWdpc3Rlcl9uZXRkZXYgZmFpbGVkLCAlZFxuIiwgc3RhdHVzKTsKK2ZhaWw6CisJZXRoX3VuYmluZCAoZ2FkZ2V0KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZAorZXRoX3N1c3BlbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IGV0aF9kZXYJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7CisKKwlERUJVRyAoZGV2LCAic3VzcGVuZFxuIik7CisJZGV2LT5zdXNwZW5kZWQgPSAxOworfQorCitzdGF0aWMgdm9pZAorZXRoX3Jlc3VtZSAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgZXRoX2RldgkJKmRldiA9IGdldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0KTsKKworCURFQlVHIChkZXYsICJyZXN1bWVcbiIpOworCWRldi0+c3VzcGVuZGVkID0gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciBldGhfZHJpdmVyID0geworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCS5zcGVlZAkJPSBVU0JfU1BFRURfSElHSCwKKyNlbHNlCisJLnNwZWVkCQk9IFVTQl9TUEVFRF9GVUxMLAorI2VuZGlmCisJLmZ1bmN0aW9uCT0gKGNoYXIgKikgZHJpdmVyX2Rlc2MsCisJLmJpbmQJCT0gZXRoX2JpbmQsCisJLnVuYmluZAkJPSBldGhfdW5iaW5kLAorCisJLnNldHVwCQk9IGV0aF9zZXR1cCwKKwkuZGlzY29ubmVjdAk9IGV0aF9kaXNjb25uZWN0LAorCisJLnN1c3BlbmQJPSBldGhfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGV0aF9yZXN1bWUsCisKKwkuZHJpdmVyIAk9IHsKKwkJLm5hbWUJCT0gKGNoYXIgKikgc2hvcnRuYW1lLAorCQkvLyAuc2h1dGRvd24gPSAuLi4KKwkJLy8gLnN1c3BlbmQgPSAuLi4KKwkJLy8gLnJlc3VtZSA9IC4uLgorCX0sCit9OworCitNT0RVTEVfREVTQ1JJUFRJT04gKERSSVZFUl9ERVNDKTsKK01PRFVMRV9BVVRIT1IgKCJEYXZpZCBCcm93bmVsbCwgQmVuZWRpa3QgU3BhbmdlciIpOworTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKKworCitzdGF0aWMgaW50IF9faW5pdCBpbml0ICh2b2lkKQoreworCXJldHVybiB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlciAoJmV0aF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQgKGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cCAodm9pZCkKK3sKKwl1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyICgmZXRoX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCAoY2xlYW51cCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODU3ZjBlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCkBAIC0wLDAgKzEsNDEzOSBAQAorLyoKKyAqIGZpbGVfc3RvcmFnZS5jIC0tIEZpbGUtYmFja2VkIFVTQiBTdG9yYWdlIEdhZGdldCwgZm9yIFVTQiBkZXZlbG9wbWVudAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1IEFsYW4gU3Rlcm4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBtYXkgbm90IGJlIHVzZWQKKyAqICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQUxURVJOQVRJVkVMWSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhhdCBMaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTCisgKiBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisvKgorICogVGhlIEZpbGUtYmFja2VkIFN0b3JhZ2UgR2FkZ2V0IGFjdHMgYXMgYSBVU0IgTWFzcyBTdG9yYWdlIGRldmljZSwKKyAqIGFwcGVhcmluZyB0byB0aGUgaG9zdCBhcyBhIGRpc2sgZHJpdmUuICBJbiBhZGRpdGlvbiB0byBwcm92aWRpbmcgYW4KKyAqIGV4YW1wbGUgb2YgYSBnZW51aW5lbHkgdXNlZnVsIGdhZGdldCBkcml2ZXIgZm9yIGEgVVNCIGRldmljZSwgaXQgYWxzbworICogaWxsdXN0cmF0ZXMgYSB0ZWNobmlxdWUgb2YgZG91YmxlLWJ1ZmZlcmluZyBmb3IgaW5jcmVhc2VkIHRocm91Z2hwdXQuCisgKiBMYXN0IGJ1dCBub3QgbGVhc3QsIGl0IGdpdmVzIGFuIGVhc3kgd2F5IHRvIHByb2JlIHRoZSBiZWhhdmlvciBvZiB0aGUKKyAqIE1hc3MgU3RvcmFnZSBkcml2ZXJzIGluIGEgVVNCIGhvc3QuCisgKgorICogQmFja2luZyBzdG9yYWdlIGlzIHByb3ZpZGVkIGJ5IGEgcmVndWxhciBmaWxlIG9yIGEgYmxvY2sgZGV2aWNlLCBzcGVjaWZpZWQKKyAqIGJ5IHRoZSAiZmlsZSIgbW9kdWxlIHBhcmFtZXRlci4gIEFjY2VzcyBjYW4gYmUgbGltaXRlZCB0byByZWFkLW9ubHkgYnkKKyAqIHNldHRpbmcgdGhlIG9wdGlvbmFsICJybyIgbW9kdWxlIHBhcmFtZXRlci4gIFRoZSBnYWRnZXQgd2lsbCBpbmRpY2F0ZSB0aGF0CisgKiBpdCBoYXMgcmVtb3ZhYmxlIG1lZGlhIGlmIHRoZSBvcHRpb25hbCAicmVtb3ZhYmxlIiBtb2R1bGUgcGFyYW1ldGVyIGlzIHNldC4KKyAqCisgKiBUaGUgZ2FkZ2V0IHN1cHBvcnRzIHRoZSBDb250cm9sLUJ1bGsgKENCKSwgQ29udHJvbC1CdWxrLUludGVycnVwdCAoQ0JJKSwKKyAqIGFuZCBCdWxrLU9ubHkgKGFsc28ga25vd24gYXMgQnVsay1CdWxrLUJ1bGsgb3IgQkJCKSB0cmFuc3BvcnRzLCBzZWxlY3RlZAorICogYnkgdGhlIG9wdGlvbmFsICJ0cmFuc3BvcnQiIG1vZHVsZSBwYXJhbWV0ZXIuICBJdCBhbHNvIHN1cHBvcnRzIHRoZQorICogZm9sbG93aW5nIHByb3RvY29sczogUkJDICgweDAxKSwgQVRBUEkgb3IgU0ZGLTgwMjBpICgweDAyKSwgUUlDLTE1NyAoMGMwMyksCisgKiBVRkkgKDB4MDQpLCBTRkYtODA3MGkgKDB4MDUpLCBhbmQgdHJhbnNwYXJlbnQgU0NTSSAoMHgwNiksIHNlbGVjdGVkIGJ5CisgKiB0aGUgb3B0aW9uYWwgInByb3RvY29sIiBtb2R1bGUgcGFyYW1ldGVyLiAgSW4gYWRkaXRpb24sIHRoZSBkZWZhdWx0CisgKiBWZW5kb3IgSUQsIFByb2R1Y3QgSUQsIGFuZCByZWxlYXNlIG51bWJlciBjYW4gYmUgb3ZlcnJpZGRlbi4KKyAqCisgKiBUaGVyZSBpcyBzdXBwb3J0IGZvciBtdWx0aXBsZSBsb2dpY2FsIHVuaXRzIChMVU5zKSwgZWFjaCBvZiB3aGljaCBoYXMKKyAqIGl0cyBvd24gYmFja2luZyBmaWxlLiAgVGhlIG51bWJlciBvZiBMVU5zIGNhbiBiZSBzZXQgdXNpbmcgdGhlIG9wdGlvbmFsCisgKiAibHVucyIgbW9kdWxlIHBhcmFtZXRlciAoYW55d2hlcmUgZnJvbSAxIHRvIDgpLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIGZpbGVzIGFyZSBzcGVjaWZpZWQgdXNpbmcgY29tbWEtc2VwYXJhdGVkIGxpc3RzIGZvciAiZmlsZSIgYW5kICJybyIuCisgKiBUaGUgZGVmYXVsdCBudW1iZXIgb2YgTFVOcyBpcyB0YWtlbiBmcm9tIHRoZSBudW1iZXIgb2YgImZpbGUiIGVsZW1lbnRzOworICogaXQgaXMgMSBpZiAiZmlsZSIgaXMgbm90IGdpdmVuLiAgSWYgInJlbW92YWJsZSIgaXMgbm90IHNldCB0aGVuIGEgYmFja2luZworICogZmlsZSBtdXN0IGJlIHNwZWNpZmllZCBmb3IgZWFjaCBMVU4uICBJZiBpdCBpcyBzZXQsIHRoZW4gYW4gdW5zcGVjaWZpZWQKKyAqIG9yIGVtcHR5IGJhY2tpbmcgZmlsZW5hbWUgbWVhbnMgdGhlIExVTidzIG1lZGl1bSBpcyBub3QgbG9hZGVkLgorICoKKyAqIFJlcXVpcmVtZW50cyBhcmUgbW9kZXN0OyBvbmx5IGEgYnVsay1pbiBhbmQgYSBidWxrLW91dCBlbmRwb2ludCBhcmUKKyAqIG5lZWRlZCAoYW4gaW50ZXJydXB0LW91dCBlbmRwb2ludCBpcyBhbHNvIG5lZWRlZCBmb3IgQ0JJKS4gIFRoZSBtZW1vcnkKKyAqIHJlcXVpcmVtZW50IGFtb3VudHMgdG8gdHdvIDE2SyBidWZmZXJzLCBzaXplIGNvbmZpZ3VyYWJsZSBieSBhIHBhcmFtZXRlci4KKyAqIFN1cHBvcnQgaXMgaW5jbHVkZWQgZm9yIGJvdGggZnVsbC1zcGVlZCBhbmQgaGlnaC1zcGVlZCBvcGVyYXRpb24uCisgKgorICogTW9kdWxlIG9wdGlvbnM6CisgKgorICoJZmlsZT1maWxlbmFtZVssZmlsZW5hbWUuLi5dCisgKgkJCQlSZXF1aXJlZCBpZiAicmVtb3ZhYmxlIiBpcyBub3Qgc2V0LCBuYW1lcyBvZgorICoJCQkJCXRoZSBmaWxlcyBvciBibG9jayBkZXZpY2VzIHVzZWQgZm9yCisgKgkJCQkJYmFja2luZyBzdG9yYWdlCisgKglybz1iWyxiLi4uXQkJRGVmYXVsdCBmYWxzZSwgYm9vbGVhbnMgZm9yIHJlYWQtb25seSBhY2Nlc3MKKyAqCXJlbW92YWJsZQkJRGVmYXVsdCBmYWxzZSwgYm9vbGVhbiBmb3IgcmVtb3ZhYmxlIG1lZGlhCisgKglsdW5zPU4JCQlEZWZhdWx0IE4gPSBudW1iZXIgb2YgZmlsZW5hbWVzLCBudW1iZXIgb2YKKyAqCQkJCQlMVU5zIHRvIHN1cHBvcnQKKyAqCXRyYW5zcG9ydD1YWFgJCURlZmF1bHQgQkJCLCB0cmFuc3BvcnQgbmFtZSAoQ0IsIENCSSwgb3IgQkJCKQorICoJcHJvdG9jb2w9WVlZCQlEZWZhdWx0IFNDU0ksIHByb3RvY29sIG5hbWUgKFJCQywgODAyMCBvcgorICoJCQkJCUFUQVBJLCBRSUMsIFVGSSwgODA3MCwgb3IgU0NTSTsKKyAqCQkJCQlhbHNvIDEgLSA2KQorICoJdmVuZG9yPTB4VlZWVgkJRGVmYXVsdCAweDA1MjUgKE5ldENoaXApLCBVU0IgVmVuZG9yIElECisgKglwcm9kdWN0PTB4UFBQUAkJRGVmYXVsdCAweGE0YTUgKEZTRyksIFVTQiBQcm9kdWN0IElECisgKglyZWxlYXNlPTB4UlJSUgkJT3ZlcnJpZGUgdGhlIFVTQiByZWxlYXNlIG51bWJlciAoYmNkRGV2aWNlKQorICoJYnVmbGVuPU4JCURlZmF1bHQgTj0xNjM4NCwgYnVmZmVyIHNpemUgdXNlZCAod2lsbCBiZQorICoJCQkJCXJvdW5kZWQgZG93biB0byBhIG11bHRpcGxlIG9mCisgKgkJCQkJUEFHRV9DQUNIRV9TSVpFKQorICoJc3RhbGwJCQlEZWZhdWx0IGRldGVybWluZWQgYWNjb3JkaW5nIHRvIHRoZSB0eXBlIG9mCisgKgkJCQkJVVNCIGRldmljZSBjb250cm9sbGVyICh1c3VhbGx5IHRydWUpLAorICoJCQkJCWJvb2xlYW4gdG8gcGVybWl0IHRoZSBkcml2ZXIgdG8gaGFsdAorICoJCQkJCWJ1bGsgZW5kcG9pbnRzCisgKgorICogSWYgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0LCBvbmx5IHRoZSAiZmlsZSIsICJybyIsCisgKiAicmVtb3ZhYmxlIiwgYW5kICJsdW5zIiBvcHRpb25zIGFyZSBhdmFpbGFibGU7IGRlZmF1bHQgdmFsdWVzIGFyZSB1c2VkCisgKiBmb3IgZXZlcnl0aGluZyBlbHNlLgorICoKKyAqIFRoZSBwYXRobmFtZXMgb2YgdGhlIGJhY2tpbmcgZmlsZXMgYW5kIHRoZSBybyBzZXR0aW5ncyBhcmUgYXZhaWxhYmxlIGluCisgKiB0aGUgYXR0cmlidXRlIGZpbGVzICJmaWxlIiBhbmQgInJvIiBpbiB0aGUgbHVuPG4+IHN1YmRpcmVjdG9yeSBvZiB0aGUKKyAqIGdhZGdldCdzIHN5c2ZzIGRpcmVjdG9yeS4gIElmIHRoZSAicmVtb3ZhYmxlIiBvcHRpb24gaXMgc2V0LCB3cml0aW5nIHRvCisgKiB0aGVzZSBmaWxlcyB3aWxsIHNpbXVsYXRlIGVqZWN0aW5nL2xvYWRpbmcgdGhlIG1lZGl1bSAod3JpdGluZyBhbiBlbXB0eQorICogbGluZSBtZWFucyBlamVjdCkgYW5kIGFkanVzdGluZyBhIHdyaXRlLWVuYWJsZSB0YWIuICBDaGFuZ2VzIHRvIHRoZSBybworICogc2V0dGluZyBhcmUgbm90IGFsbG93ZWQgd2hlbiB0aGUgbWVkaXVtIGlzIGxvYWRlZC4KKyAqCisgKiBUaGlzIGdhZGdldCBkcml2ZXIgaXMgaGVhdmlseSBiYXNlZCBvbiAiR2FkZ2V0IFplcm8iIGJ5IERhdmlkIEJyb3duZWxsLgorICovCisKKworLyoKKyAqCQkJCURyaXZlciBEZXNpZ24KKyAqCisgKiBUaGUgRlNHIGRyaXZlciBpcyBmYWlybHkgc3RyYWlnaHRmb3J3YXJkLiAgVGhlcmUgaXMgYSBtYWluIGtlcm5lbAorICogdGhyZWFkIHRoYXQgaGFuZGxlcyBtb3N0IG9mIHRoZSB3b3JrLiAgSW50ZXJydXB0IHJvdXRpbmVzIGZpZWxkCisgKiBjYWxsYmFja3MgZnJvbSB0aGUgY29udHJvbGxlciBkcml2ZXI6IGJ1bGstIGFuZCBpbnRlcnJ1cHQtcmVxdWVzdAorICogY29tcGxldGlvbiBub3RpZmljYXRpb25zLCBlbmRwb2ludC0wIGV2ZW50cywgYW5kIGRpc2Nvbm5lY3QgZXZlbnRzLgorICogQ29tcGxldGlvbiBldmVudHMgYXJlIHBhc3NlZCB0byB0aGUgbWFpbiB0aHJlYWQgYnkgd2FrZXVwIGNhbGxzLiAgTWFueQorICogZXAwIHJlcXVlc3RzIGFyZSBoYW5kbGVkIGF0IGludGVycnVwdCB0aW1lLCBidXQgU2V0SW50ZXJmYWNlLAorICogU2V0Q29uZmlndXJhdGlvbiwgYW5kIGRldmljZSByZXNldCByZXF1ZXN0cyBhcmUgZm9yd2FyZGVkIHRvIHRoZQorICogdGhyZWFkIGluIHRoZSBmb3JtIG9mICJleGNlcHRpb25zIiB1c2luZyBTSUdVU1IxIHNpZ25hbHMgKHNpbmNlIHRoZXkKKyAqIHNob3VsZCBpbnRlcnJ1cHQgYW55IG9uZ29pbmcgZmlsZSBJL08gb3BlcmF0aW9ucykuCisgKgorICogVGhlIHRocmVhZCdzIG1haW4gcm91dGluZSBpbXBsZW1lbnRzIHRoZSBzdGFuZGFyZCBjb21tYW5kL2RhdGEvc3RhdHVzCisgKiBwYXJ0cyBvZiBhIFNDU0kgaW50ZXJhY3Rpb24uICBJdCBhbmQgaXRzIHN1YnJvdXRpbmVzIGFyZSBmdWxsIG9mIHRlc3RzCisgKiBmb3IgcGVuZGluZyBzaWduYWxzL2V4Y2VwdGlvbnMgLS0gYWxsIHRoaXMgcG9sbGluZyBpcyBuZWNlc3Nhcnkgc2luY2UKKyAqIHRoZSBrZXJuZWwgaGFzIG5vIHNldGptcC9sb25nam1wIGVxdWl2YWxlbnRzLiAgKE1heWJlIHRoaXMgaXMgYW4KKyAqIGluZGljYXRpb24gdGhhdCB0aGUgZHJpdmVyIHJlYWxseSB3YW50cyB0byBiZSBydW5uaW5nIGluIHVzZXJzcGFjZS4pCisgKiBBbiBpbXBvcnRhbnQgcG9pbnQgaXMgdGhhdCBzbyBsb25nIGFzIHRoZSB0aHJlYWQgaXMgYWxpdmUgaXQga2VlcHMgYW4KKyAqIG9wZW4gcmVmZXJlbmNlIHRvIHRoZSBiYWNraW5nIGZpbGUuICBUaGlzIHdpbGwgcHJldmVudCB1bm1vdW50aW5nCisgKiB0aGUgYmFja2luZyBmaWxlJ3MgdW5kZXJseWluZyBmaWxlc3lzdGVtIGFuZCBjb3VsZCBjYXVzZSBwcm9ibGVtcworICogZHVyaW5nIHN5c3RlbSBzaHV0ZG93biwgZm9yIGV4YW1wbGUuICBUbyBwcmV2ZW50IHN1Y2ggcHJvYmxlbXMsIHRoZQorICogdGhyZWFkIGNhdGNoZXMgSU5ULCBURVJNLCBhbmQgS0lMTCBzaWduYWxzIGFuZCBjb252ZXJ0cyB0aGVtIGludG8KKyAqIGFuIEVYSVQgZXhjZXB0aW9uLgorICoKKyAqIEluIG5vcm1hbCBvcGVyYXRpb24gdGhlIG1haW4gdGhyZWFkIGlzIHN0YXJ0ZWQgZHVyaW5nIHRoZSBnYWRnZXQncworICogZnNnX2JpbmQoKSBjYWxsYmFjayBhbmQgc3RvcHBlZCBkdXJpbmcgZnNnX3VuYmluZCgpLiAgQnV0IGl0IGNhbiBhbHNvCisgKiBleGl0IHdoZW4gaXQgcmVjZWl2ZXMgYSBzaWduYWwsIGFuZCB0aGVyZSdzIG5vIHBvaW50IGxlYXZpbmcgdGhlCisgKiBnYWRnZXQgcnVubmluZyB3aGVuIHRoZSB0aHJlYWQgaXMgZGVhZC4gIFNvIGp1c3QgYmVmb3JlIHRoZSB0aHJlYWQKKyAqIGV4aXRzLCBpdCBkZXJlZ2lzdGVycyB0aGUgZ2FkZ2V0IGRyaXZlci4gIFRoaXMgbWFrZXMgdGhpbmdzIGEgbGl0dGxlCisgKiB0cmlja3k6IFRoZSBkcml2ZXIgaXMgZGVyZWdpc3RlcmVkIGF0IHR3byBwbGFjZXMsIGFuZCB0aGUgZXhpdGluZworICogdGhyZWFkIGNhbiBpbmRpcmVjdGx5IGNhbGwgZnNnX3VuYmluZCgpIHdoaWNoIGluIHR1cm4gY2FuIHRlbGwgdGhlCisgKiB0aHJlYWQgdG8gZXhpdC4gIFRoZSBmaXJzdCBwcm9ibGVtIGlzIHJlc29sdmVkIHRocm91Z2ggdGhlIHVzZSBvZiB0aGUKKyAqIFJFR0lTVEVSRUQgYXRvbWljIGJpdGZsYWc7IHRoZSBkcml2ZXIgd2lsbCBvbmx5IGJlIGRlcmVnaXN0ZXJlZCBvbmNlLgorICogVGhlIHNlY29uZCBwcm9ibGVtIGlzIHJlc29sdmVkIGJ5IGhhdmluZyBmc2dfdW5iaW5kKCkgY2hlY2sKKyAqIGZzZy0+c3RhdGU7IGl0IHdvbid0IHRyeSB0byBzdG9wIHRoZSB0aHJlYWQgaWYgdGhlIHN0YXRlIGlzIGFscmVhZHkKKyAqIEZTR19TVEFURV9URVJNSU5BVEVELgorICoKKyAqIFRvIHByb3ZpZGUgbWF4aW11bSB0aHJvdWdocHV0LCB0aGUgZHJpdmVyIHVzZXMgYSBjaXJjdWxhciBwaXBlbGluZSBvZgorICogYnVmZmVyIGhlYWRzIChzdHJ1Y3QgZnNnX2J1ZmZoZCkuICBJbiBwcmluY2lwbGUgdGhlIHBpcGVsaW5lIGNhbiBiZQorICogYXJiaXRyYXJpbHkgbG9uZzsgaW4gcHJhY3RpY2UgdGhlIGJlbmVmaXRzIGRvbid0IGp1c3RpZnkgaGF2aW5nIG1vcmUKKyAqIHRoYW4gMiBzdGFnZXMgKGkuZS4sIGRvdWJsZSBidWZmZXJpbmcpLiAgQnV0IGl0IGhlbHBzIHRvIHRoaW5rIG9mIHRoZQorICogcGlwZWxpbmUgYXMgYmVpbmcgYSBsb25nIG9uZS4gIEVhY2ggYnVmZmVyIGhlYWQgY29udGFpbnMgYSBidWxrLWluIGFuZAorICogYSBidWxrLW91dCByZXF1ZXN0IHBvaW50ZXIgKHNpbmNlIHRoZSBidWZmZXIgY2FuIGJlIHVzZWQgZm9yIGJvdGgKKyAqIG91dHB1dCBhbmQgaW5wdXQgLS0gZGlyZWN0aW9ucyBhbHdheXMgYXJlIGdpdmVuIGZyb20gdGhlIGhvc3QncworICogcG9pbnQgb2YgdmlldykgYXMgd2VsbCBhcyBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBhbmQgdmFyaW91cyBzdGF0ZQorICogdmFyaWFibGVzLgorICoKKyAqIFVzZSBvZiB0aGUgcGlwZWxpbmUgZm9sbG93cyBhIHNpbXBsZSBwcm90b2NvbC4gIFRoZXJlIGlzIGEgdmFyaWFibGUKKyAqIChmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGwpIHRoYXQgcG9pbnRzIHRvIHRoZSBuZXh0IGJ1ZmZlciBoZWFkIHRvIHVzZS4KKyAqIEF0IGFueSB0aW1lIHRoYXQgYnVmZmVyIGhlYWQgbWF5IHN0aWxsIGJlIGluIHVzZSBmcm9tIGFuIGVhcmxpZXIKKyAqIHJlcXVlc3QsIHNvIGVhY2ggYnVmZmVyIGhlYWQgaGFzIGEgc3RhdGUgdmFyaWFibGUgaW5kaWNhdGluZyB3aGV0aGVyCisgKiBpdCBpcyBFTVBUWSwgRlVMTCwgb3IgQlVTWS4gIFR5cGljYWwgdXNlIGludm9sdmVzIHdhaXRpbmcgZm9yIHRoZQorICogYnVmZmVyIGhlYWQgdG8gYmUgRU1QVFksIGZpbGxpbmcgdGhlIGJ1ZmZlciBlaXRoZXIgYnkgZmlsZSBJL08gb3IgYnkKKyAqIFVTQiBJL08gKGR1cmluZyB3aGljaCB0aGUgYnVmZmVyIGhlYWQgaXMgQlVTWSksIGFuZCBtYXJraW5nIHRoZSBidWZmZXIKKyAqIGhlYWQgRlVMTCB3aGVuIHRoZSBJL08gaXMgY29tcGxldGUuICBUaGVuIHRoZSBidWZmZXIgd2lsbCBiZSBlbXB0aWVkCisgKiAoYWdhaW4gcG9zc2libHkgYnkgVVNCIEkvTywgZHVyaW5nIHdoaWNoIGl0IGlzIG1hcmtlZCBCVVNZKSBhbmQKKyAqIGZpbmFsbHkgbWFya2VkIEVNUFRZIGFnYWluIChwb3NzaWJseSBieSBhIGNvbXBsZXRpb24gcm91dGluZSkuCisgKgorICogQSBtb2R1bGUgcGFyYW1ldGVyIHRlbGxzIHRoZSBkcml2ZXIgdG8gYXZvaWQgc3RhbGxpbmcgdGhlIGJ1bGsKKyAqIGVuZHBvaW50cyB3aGVyZXZlciB0aGUgdHJhbnNwb3J0IHNwZWNpZmljYXRpb24gYWxsb3dzLiAgVGhpcyBpcworICogbmVjZXNzYXJ5IGZvciBzb21lIFVEQ3MgbGlrZSB0aGUgU3VwZXJILCB3aGljaCBjYW5ub3QgcmVsaWFibHkgY2xlYXIgYQorICogaGFsdCBvbiBhIGJ1bGsgZW5kcG9pbnQuICBIb3dldmVyLCB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgdGhlCisgKiBCdWxrLW9ubHkgc3BlY2lmaWNhdGlvbiByZXF1aXJlcyBhIHN0YWxsLiAgSW4gc3VjaCBjYXNlcyB0aGUgZHJpdmVyCisgKiB3aWxsIGhhbHQgdGhlIGVuZHBvaW50IGFuZCBzZXQgYSBmbGFnIGluZGljYXRpbmcgdGhhdCBpdCBzaG91bGQgY2xlYXIKKyAqIHRoZSBoYWx0IGluIHNvZnR3YXJlIGR1cmluZyB0aGUgbmV4dCBkZXZpY2UgcmVzZXQuICBIb3BlZnVsbHkgdGhpcworICogd2lsbCBwZXJtaXQgZXZlcnl0aGluZyB0byB3b3JrIGNvcnJlY3RseS4gIEZ1cnRoZXJtb3JlLCBhbHRob3VnaCB0aGUKKyAqIHNwZWNpZmljYXRpb24gYWxsb3dzIHRoZSBidWxrLW91dCBlbmRwb2ludCB0byBoYWx0IHdoZW4gdGhlIGhvc3Qgc2VuZHMKKyAqIHRvbyBtdWNoIGRhdGEsIGltcGxlbWVudGluZyB0aGlzIHdvdWxkIGNhdXNlIGFuIHVuYXZvaWRhYmxlIHJhY2UuCisgKiBUaGUgZHJpdmVyIHdpbGwgYWx3YXlzIHVzZSB0aGUgIm5vLXN0YWxsIiBhcHByb2FjaCBmb3IgT1VUIHRyYW5zZmVycy4KKyAqCisgKiBPbmUgc3VidGxlIHBvaW50IGNvbmNlcm5zIHNlbmRpbmcgc3RhdHVzLXN0YWdlIHJlc3BvbnNlcyBmb3IgZXAwCisgKiByZXF1ZXN0cy4gIFNvbWUgb2YgdGhlc2UgcmVxdWVzdHMsIHN1Y2ggYXMgZGV2aWNlIHJlc2V0LCBjYW4gaW52b2x2ZQorICogaW50ZXJydXB0aW5nIGFuIG9uZ29pbmcgZmlsZSBJL08gb3BlcmF0aW9uLCB3aGljaCBtaWdodCB0YWtlIGFuCisgKiBhcmJpdHJhcmlseSBsb25nIHRpbWUuICBEdXJpbmcgdGhhdCBkZWxheSB0aGUgaG9zdCBtaWdodCBnaXZlIHVwIG9uCisgKiB0aGUgb3JpZ2luYWwgZXAwIHJlcXVlc3QgYW5kIGlzc3VlIGEgbmV3IG9uZS4gIFdoZW4gdGhhdCBoYXBwZW5zIHRoZQorICogZHJpdmVyIHNob3VsZCBub3Qgbm90aWZ5IHRoZSBob3N0IGFib3V0IGNvbXBsZXRpb24gb2YgdGhlIG9yaWdpbmFsCisgKiByZXF1ZXN0LCBhcyB0aGUgaG9zdCB3aWxsIG5vIGxvbmdlciBiZSB3YWl0aW5nIGZvciBpdC4gIFNvIHRoZSBkcml2ZXIKKyAqIGFzc2lnbnMgdG8gZWFjaCBlcDAgcmVxdWVzdCBhIHVuaXF1ZSB0YWcsIGFuZCBpdCBrZWVwcyB0cmFjayBvZiB0aGUKKyAqIHRhZyB2YWx1ZSBvZiB0aGUgcmVxdWVzdCBhc3NvY2lhdGVkIHdpdGggYSBsb25nLXJ1bm5pbmcgZXhjZXB0aW9uCisgKiAoZGV2aWNlLXJlc2V0LCBpbnRlcmZhY2UtY2hhbmdlLCBvciBjb25maWd1cmF0aW9uLWNoYW5nZSkuICBXaGVuIHRoZQorICogZXhjZXB0aW9uIGhhbmRsZXIgaXMgZmluaXNoZWQsIHRoZSBzdGF0dXMtc3RhZ2UgcmVzcG9uc2UgaXMgc3VibWl0dGVkCisgKiBvbmx5IGlmIHRoZSBjdXJyZW50IGVwMCByZXF1ZXN0IHRhZyBpcyBlcXVhbCB0byB0aGUgZXhjZXB0aW9uIHJlcXVlc3QKKyAqIHRhZy4gIFRodXMgb25seSB0aGUgbW9zdCByZWNlbnRseSByZWNlaXZlZCBlcDAgcmVxdWVzdCB3aWxsIGdldCBhCisgKiBzdGF0dXMtc3RhZ2UgcmVzcG9uc2UuCisgKgorICogV2FybmluZzogVGhpcyBkcml2ZXIgc291cmNlIGZpbGUgaXMgdG9vIGxvbmcuICBJdCBvdWdodCB0byBiZSBzcGxpdCB1cAorICogaW50byBhIGhlYWRlciBmaWxlIHBsdXMgYWJvdXQgMyBzZXBhcmF0ZSAuYyBmaWxlcywgdG8gaGFuZGxlIHRoZSBkZXRhaWxzCisgKiBvZiB0aGUgR2FkZ2V0LCBVU0IgTWFzcyBTdG9yYWdlLCBhbmQgU0NTSSBwcm90b2NvbHMuCisgKi8KKworCisjdW5kZWYgREVCVUcKKyN1bmRlZiBWRVJCT1NFCisjdW5kZWYgRFVNUF9NU0dTCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mY250bC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCisjaW5jbHVkZSA8bGludXgvdXNiX2NoOS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9nYWRnZXQuaD4KKworI2luY2x1ZGUgImdhZGdldF9jaGlwcy5oIgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgRFJJVkVSX0RFU0MJCSJGaWxlLWJhY2tlZCBTdG9yYWdlIEdhZGdldCIKKyNkZWZpbmUgRFJJVkVSX05BTUUJCSJnX2ZpbGVfc3RvcmFnZSIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSIyMCBPY3RvYmVyIDIwMDQiCisKK3N0YXRpYyBjb25zdCBjaGFyIGxvbmduYW1lW10gPSBEUklWRVJfREVTQzsKK3N0YXRpYyBjb25zdCBjaGFyIHNob3J0bmFtZVtdID0gRFJJVkVSX05BTUU7CisKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfQVVUSE9SKCJBbGFuIFN0ZXJuIik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CisKKy8qIFRoYW5rcyB0byBOZXRDaGlwIFRlY2hub2xvZ2llcyBmb3IgZG9uYXRpbmcgdGhpcyBwcm9kdWN0IElELgorICoKKyAqIERPIE5PVCBSRVVTRSBUSEVTRSBJRHMgd2l0aCBhbnkgb3RoZXIgZHJpdmVyISEgIEV2ZXIhIQorICogSW5zdGVhZDogIGFsbG9jYXRlIHlvdXIgb3duLCB1c2luZyBub3JtYWwgVVNCLUlGIHByb2NlZHVyZXMuICovCisjZGVmaW5lIERSSVZFUl9WRU5ET1JfSUQJMHgwNTI1CS8vIE5ldENoaXAKKyNkZWZpbmUgRFJJVkVSX1BST0RVQ1RfSUQJMHhhNGE1CS8vIExpbnV4LVVTQiBGaWxlLWJhY2tlZCBTdG9yYWdlIEdhZGdldAorCisKKy8qCisgKiBUaGlzIGRyaXZlciBhc3N1bWVzIHNlbGYtcG93ZXJlZCBoYXJkd2FyZSBhbmQgaGFzIG5vIHdheSBmb3IgdXNlcnMgdG8KKyAqIHRyaWdnZXIgcmVtb3RlIHdha2V1cC4gIEl0IHVzZXMgYXV0b2NvbmZpZ3VyYXRpb24gdG8gc2VsZWN0IGVuZHBvaW50cworICogYW5kIGVuZHBvaW50IGFkZHJlc3Nlcy4KKyAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgeHByaW50ayhmLGxldmVsLGZtdCxhcmdzLi4uKSBcCisJZGV2X3ByaW50ayhsZXZlbCAsICYoZiktPmdhZGdldC0+ZGV2ICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgeXByaW50ayhsLGxldmVsLGZtdCxhcmdzLi4uKSBcCisJZGV2X3ByaW50ayhsZXZlbCAsICYobCktPmRldiAsIGZtdCAsICMjIGFyZ3MpCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkcoZnNnLGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhmc2cgLCBLRVJOX0RFQlVHICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgTERCRyhsdW4sZm10LGFyZ3MuLi4pIFwKKwl5cHJpbnRrKGx1biAsIEtFUk5fREVCVUcgLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBNREJHKGZtdCxhcmdzLi4uKSBcCisJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogIiBmbXQgLCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREJHKGZzZyxmbXQsYXJncy4uLikgXAorCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgTERCRyhsdW4sZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIE1EQkcoZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjdW5kZWYgVkVSQk9TRQorI3VuZGVmIERVTVBfTVNHUworI2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRlZiBWRVJCT1NFCisjZGVmaW5lIFZEQkcJREJHCisjZGVmaW5lIFZMREJHCUxEQkcKKyNlbHNlCisjZGVmaW5lIFZEQkcoZnNnLGZtdCxhcmdzLi4uKSBcCisJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBWTERCRyhsdW4sZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogVkVSQk9TRSAqLworCisjZGVmaW5lIEVSUk9SKGZzZyxmbXQsYXJncy4uLikgXAorCXhwcmludGsoZnNnICwgS0VSTl9FUlIgLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBMRVJST1IobHVuLGZtdCxhcmdzLi4uKSBcCisJeXByaW50ayhsdW4gLCBLRVJOX0VSUiAsIGZtdCAsICMjIGFyZ3MpCisKKyNkZWZpbmUgV0FSTihmc2csZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGZzZyAsIEtFUk5fV0FSTklORyAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIExXQVJOKGx1bixmbXQsYXJncy4uLikgXAorCXlwcmludGsobHVuICwgS0VSTl9XQVJOSU5HICwgZm10ICwgIyMgYXJncykKKworI2RlZmluZSBJTkZPKGZzZyxmbXQsYXJncy4uLikgXAorCXhwcmludGsoZnNnICwgS0VSTl9JTkZPICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgTElORk8obHVuLGZtdCxhcmdzLi4uKSBcCisJeXByaW50ayhsdW4gLCBLRVJOX0lORk8gLCBmbXQgLCAjIyBhcmdzKQorCisjZGVmaW5lIE1JTkZPKGZtdCxhcmdzLi4uKSBcCisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiAiIGZtdCAsICMjIGFyZ3MpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRW5jYXBzdWxhdGUgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgc2V0dGluZ3MgKi8KKworI2RlZmluZSBNQVhfTFVOUwk4CisKKwkvKiBBcmdnaCEgIFRoZXJlIHNob3VsZCBiZSBhIG1vZHVsZV9wYXJhbV9hcnJheV9uYW1lZCBtYWNybyEgKi8KK3N0YXRpYyBjaGFyCQkqZmlsZVtNQVhfTFVOU10gPSB7TlVMTCwgfTsKK3N0YXRpYyBpbnQJCXJvW01BWF9MVU5TXSA9IHswLCB9OworCitzdGF0aWMgc3RydWN0IHsKKwlpbnQJCW51bV9maWxlbmFtZXM7CisJaW50CQludW1fcm9zOworCXVuc2lnbmVkIGludAlubHVuczsKKworCWNoYXIJCSp0cmFuc3BvcnRfcGFybTsKKwljaGFyCQkqcHJvdG9jb2xfcGFybTsKKwlpbnQJCXJlbW92YWJsZTsKKwl1bnNpZ25lZCBzaG9ydAl2ZW5kb3I7CisJdW5zaWduZWQgc2hvcnQJcHJvZHVjdDsKKwl1bnNpZ25lZCBzaG9ydAlyZWxlYXNlOworCXVuc2lnbmVkIGludAlidWZsZW47CisJaW50CQljYW5fc3RhbGw7CisKKwlpbnQJCXRyYW5zcG9ydF90eXBlOworCWNoYXIJCSp0cmFuc3BvcnRfbmFtZTsKKwlpbnQJCXByb3RvY29sX3R5cGU7CisJY2hhcgkJKnByb3RvY29sX25hbWU7CisKK30gbW9kX2RhdGEgPSB7CQkJCQkvLyBEZWZhdWx0IHZhbHVlcworCS50cmFuc3BvcnRfcGFybQkJPSAiQkJCIiwKKwkucHJvdG9jb2xfcGFybQkJPSAiU0NTSSIsCisJLnJlbW92YWJsZQkJPSAwLAorCS52ZW5kb3IJCQk9IERSSVZFUl9WRU5ET1JfSUQsCisJLnByb2R1Y3QJCT0gRFJJVkVSX1BST0RVQ1RfSUQsCisJLnJlbGVhc2UJCT0gMHhmZmZmLAkvLyBVc2UgY29udHJvbGxlciBjaGlwIHR5cGUKKwkuYnVmbGVuCQkJPSAxNjM4NCwKKwkuY2FuX3N0YWxsCQk9IDEsCisJfTsKKworCittb2R1bGVfcGFyYW1fYXJyYXkoZmlsZSwgY2hhcnAsICZtb2RfZGF0YS5udW1fZmlsZW5hbWVzLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoZmlsZSwgIm5hbWVzIG9mIGJhY2tpbmcgZmlsZXMgb3IgZGV2aWNlcyIpOworCittb2R1bGVfcGFyYW1fYXJyYXkocm8sIGJvb2wsICZtb2RfZGF0YS5udW1fcm9zLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0Mocm8sICJ0cnVlIHRvIGZvcmNlIHJlYWQtb25seSIpOworCittb2R1bGVfcGFyYW1fbmFtZWQobHVucywgbW9kX2RhdGEubmx1bnMsIHVpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhsdW5zLCAibnVtYmVyIG9mIExVTnMiKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKHJlbW92YWJsZSwgbW9kX2RhdGEucmVtb3ZhYmxlLCBib29sLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MocmVtb3ZhYmxlLCAidHJ1ZSB0byBzaW11bGF0ZSByZW1vdmFibGUgbWVkaWEiKTsKKworCisvKiBJbiB0aGUgbm9uLVRFU1QgdmVyc2lvbiwgb25seSB0aGUgbW9kdWxlIHBhcmFtZXRlcnMgbGlzdGVkIGFib3ZlCisgKiBhcmUgYXZhaWxhYmxlLiAqLworI2lmZGVmIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QKKworbW9kdWxlX3BhcmFtX25hbWVkKHRyYW5zcG9ydCwgbW9kX2RhdGEudHJhbnNwb3J0X3Bhcm0sIGNoYXJwLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0ModHJhbnNwb3J0LCAidHlwZSBvZiB0cmFuc3BvcnQgKEJCQiwgQ0JJLCBvciBDQikiKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKHByb3RvY29sLCBtb2RfZGF0YS5wcm90b2NvbF9wYXJtLCBjaGFycCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHByb3RvY29sLCAidHlwZSBvZiBwcm90b2NvbCAoUkJDLCA4MDIwLCBRSUMsIFVGSSwgIgorCQkiODA3MCwgb3IgU0NTSSkiKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKHZlbmRvciwgbW9kX2RhdGEudmVuZG9yLCB1c2hvcnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyh2ZW5kb3IsICJVU0IgVmVuZG9yIElEIik7CisKK21vZHVsZV9wYXJhbV9uYW1lZChwcm9kdWN0LCBtb2RfZGF0YS5wcm9kdWN0LCB1c2hvcnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhwcm9kdWN0LCAiVVNCIFByb2R1Y3QgSUQiKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKHJlbGVhc2UsIG1vZF9kYXRhLnJlbGVhc2UsIHVzaG9ydCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHJlbGVhc2UsICJVU0IgcmVsZWFzZSBudW1iZXIiKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKGJ1ZmxlbiwgbW9kX2RhdGEuYnVmbGVuLCB1aW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoYnVmbGVuLCAiSS9PIGJ1ZmZlciBzaXplIik7CisKK21vZHVsZV9wYXJhbV9uYW1lZChzdGFsbCwgbW9kX2RhdGEuY2FuX3N0YWxsLCBib29sLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0Moc3RhbGwsICJmYWxzZSB0byBwcmV2ZW50IGJ1bGsgc3RhbGxzIik7CisKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVVNCIHByb3RvY29sIHZhbHVlID0gdGhlIHRyYW5zcG9ydCBtZXRob2QgKi8KKyNkZWZpbmUgVVNCX1BSX0NCSQkweDAwCQkvLyBDb250cm9sL0J1bGsvSW50ZXJydXB0CisjZGVmaW5lIFVTQl9QUl9DQgkweDAxCQkvLyBDb250cm9sL0J1bGsgdy9vIGludGVycnVwdAorI2RlZmluZSBVU0JfUFJfQlVMSwkweDUwCQkvLyBCdWxrLW9ubHkKKworLyogVVNCIHN1YmNsYXNzIHZhbHVlID0gdGhlIHByb3RvY29sIGVuY2Fwc3VsYXRpb24gKi8KKyNkZWZpbmUgVVNCX1NDX1JCQwkweDAxCQkvLyBSZWR1Y2VkIEJsb2NrIENvbW1hbmRzIChmbGFzaCkKKyNkZWZpbmUgVVNCX1NDXzgwMjAJMHgwMgkJLy8gU0ZGLTgwMjBpLCBNTUMtMiwgQVRBUEkgKENELVJPTSkKKyNkZWZpbmUgVVNCX1NDX1FJQwkweDAzCQkvLyBRSUMtMTU3ICh0YXBlKQorI2RlZmluZSBVU0JfU0NfVUZJCTB4MDQJCS8vIFVGSSAoZmxvcHB5KQorI2RlZmluZSBVU0JfU0NfODA3MAkweDA1CQkvLyBTRkYtODA3MGkgKHJlbW92YWJsZSkKKyNkZWZpbmUgVVNCX1NDX1NDU0kJMHgwNgkJLy8gVHJhbnNwYXJlbnQgU0NTSQorCisvKiBCdWxrLW9ubHkgZGF0YSBzdHJ1Y3R1cmVzICovCisKKy8qIENvbW1hbmQgQmxvY2sgV3JhcHBlciAqLworc3RydWN0IGJ1bGtfY2Jfd3JhcCB7CisJX19sZTMyCVNpZ25hdHVyZTsJCS8vIENvbnRhaW5zICdVU0JDJworCXUzMglUYWc7CQkJLy8gVW5pcXVlIHBlciBjb21tYW5kIGlkCisJX19sZTMyCURhdGFUcmFuc2Zlckxlbmd0aDsJLy8gU2l6ZSBvZiB0aGUgZGF0YQorCXU4CUZsYWdzOwkJCS8vIERpcmVjdGlvbiBpbiBiaXQgNworCXU4CUx1bjsJCQkvLyBMVU4gKG5vcm1hbGx5IDApCisJdTgJTGVuZ3RoOwkJCS8vIE9mIHRoZSBDREIsIDw9IE1BWF9DT01NQU5EX1NJWkUKKwl1OAlDREJbMTZdOwkJLy8gQ29tbWFuZCBEYXRhIEJsb2NrCit9OworCisjZGVmaW5lIFVTQl9CVUxLX0NCX1dSQVBfTEVOCTMxCisjZGVmaW5lIFVTQl9CVUxLX0NCX1NJRwkJMHg0MzQyNTM1NQkvLyBTcGVsbHMgb3V0IFVTQkMKKyNkZWZpbmUgVVNCX0JVTEtfSU5fRkxBRwkweDgwCisKKy8qIENvbW1hbmQgU3RhdHVzIFdyYXBwZXIgKi8KK3N0cnVjdCBidWxrX2NzX3dyYXAgeworCV9fbGUzMglTaWduYXR1cmU7CQkvLyBTaG91bGQgPSAnVVNCUycKKwl1MzIJVGFnOwkJCS8vIFNhbWUgYXMgb3JpZ2luYWwgY29tbWFuZAorCV9fbGUzMglSZXNpZHVlOwkJLy8gQW1vdW50IG5vdCB0cmFuc2ZlcnJlZAorCXU4CVN0YXR1czsJCQkvLyBTZWUgYmVsb3cKK307CisKKyNkZWZpbmUgVVNCX0JVTEtfQ1NfV1JBUF9MRU4JMTMKKyNkZWZpbmUgVVNCX0JVTEtfQ1NfU0lHCQkweDUzNDI1MzU1CS8vIFNwZWxscyBvdXQgJ1VTQlMnCisjZGVmaW5lIFVTQl9TVEFUVVNfUEFTUwkJMAorI2RlZmluZSBVU0JfU1RBVFVTX0ZBSUwJCTEKKyNkZWZpbmUgVVNCX1NUQVRVU19QSEFTRV9FUlJPUgkyCisKKy8qIEJ1bGstb25seSBjbGFzcyBzcGVjaWZpYyByZXF1ZXN0cyAqLworI2RlZmluZSBVU0JfQlVMS19SRVNFVF9SRVFVRVNUCQkweGZmCisjZGVmaW5lIFVTQl9CVUxLX0dFVF9NQVhfTFVOX1JFUVVFU1QJMHhmZQorCisKKy8qIENCSSBJbnRlcnJ1cHQgZGF0YSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBpbnRlcnJ1cHRfZGF0YSB7CisJdTgJYlR5cGU7CisJdTgJYlZhbHVlOworfTsKKworI2RlZmluZSBDQklfSU5URVJSVVBUX0RBVEFfTEVOCQkyCisKKy8qIENCSSBBY2NlcHQgRGV2aWNlLVNwZWNpZmljIENvbW1hbmQgcmVxdWVzdCAqLworI2RlZmluZSBVU0JfQ0JJX0FEU0NfUkVRVUVTVAkJMHgwMAorCisKKyNkZWZpbmUgTUFYX0NPTU1BTkRfU0laRQkxNgkvLyBMZW5ndGggb2YgYSBTQ1NJIENvbW1hbmQgRGF0YSBCbG9jaworCisvKiBTQ1NJIGNvbW1hbmRzIHRoYXQgd2UgcmVjb2duaXplICovCisjZGVmaW5lIFNDX0ZPUk1BVF9VTklUCQkJMHgwNAorI2RlZmluZSBTQ19JTlFVSVJZCQkJMHgxMgorI2RlZmluZSBTQ19NT0RFX1NFTEVDVF82CQkweDE1CisjZGVmaW5lIFNDX01PREVfU0VMRUNUXzEwCQkweDU1CisjZGVmaW5lIFNDX01PREVfU0VOU0VfNgkJCTB4MWEKKyNkZWZpbmUgU0NfTU9ERV9TRU5TRV8xMAkJMHg1YQorI2RlZmluZSBTQ19QUkVWRU5UX0FMTE9XX01FRElVTV9SRU1PVkFMCTB4MWUKKyNkZWZpbmUgU0NfUkVBRF82CQkJMHgwOAorI2RlZmluZSBTQ19SRUFEXzEwCQkJMHgyOAorI2RlZmluZSBTQ19SRUFEXzEyCQkJMHhhOAorI2RlZmluZSBTQ19SRUFEX0NBUEFDSVRZCQkweDI1CisjZGVmaW5lIFNDX1JFQURfRk9STUFUX0NBUEFDSVRJRVMJMHgyMworI2RlZmluZSBTQ19SRUxFQVNFCQkJMHgxNworI2RlZmluZSBTQ19SRVFVRVNUX1NFTlNFCQkweDAzCisjZGVmaW5lIFNDX1JFU0VSVkUJCQkweDE2CisjZGVmaW5lIFNDX1NFTkRfRElBR05PU1RJQwkJMHgxZAorI2RlZmluZSBTQ19TVEFSVF9TVE9QX1VOSVQJCTB4MWIKKyNkZWZpbmUgU0NfU1lOQ0hST05JWkVfQ0FDSEUJCTB4MzUKKyNkZWZpbmUgU0NfVEVTVF9VTklUX1JFQURZCQkweDAwCisjZGVmaW5lIFNDX1ZFUklGWQkJCTB4MmYKKyNkZWZpbmUgU0NfV1JJVEVfNgkJCTB4MGEKKyNkZWZpbmUgU0NfV1JJVEVfMTAJCQkweDJhCisjZGVmaW5lIFNDX1dSSVRFXzEyCQkJMHhhYQorCisvKiBTQ1NJIFNlbnNlIEtleS9BZGRpdGlvbmFsIFNlbnNlIENvZGUvQVNDIFF1YWxpZmllciB2YWx1ZXMgKi8KKyNkZWZpbmUgU1NfTk9fU0VOU0UJCQkJMAorI2RlZmluZSBTU19DT01NVU5JQ0FUSU9OX0ZBSUxVUkUJCTB4MDQwODAwCisjZGVmaW5lIFNTX0lOVkFMSURfQ09NTUFORAkJCTB4MDUyMDAwCisjZGVmaW5lIFNTX0lOVkFMSURfRklFTERfSU5fQ0RCCQkJMHgwNTI0MDAKKyNkZWZpbmUgU1NfTE9HSUNBTF9CTE9DS19BRERSRVNTX09VVF9PRl9SQU5HRQkweDA1MjEwMAorI2RlZmluZSBTU19MT0dJQ0FMX1VOSVRfTk9UX1NVUFBPUlRFRAkJMHgwNTI1MDAKKyNkZWZpbmUgU1NfTUVESVVNX05PVF9QUkVTRU5UCQkJMHgwMjNhMDAKKyNkZWZpbmUgU1NfTUVESVVNX1JFTU9WQUxfUFJFVkVOVEVECQkweDA1NTMwMgorI2RlZmluZSBTU19OT1RfUkVBRFlfVE9fUkVBRFlfVFJBTlNJVElPTgkweDA2MjgwMAorI2RlZmluZSBTU19SRVNFVF9PQ0NVUlJFRAkJCTB4MDYyOTAwCisjZGVmaW5lIFNTX1NBVklOR19QQVJBTUVURVJTX05PVF9TVVBQT1JURUQJMHgwNTM5MDAKKyNkZWZpbmUgU1NfVU5SRUNPVkVSRURfUkVBRF9FUlJPUgkJMHgwMzExMDAKKyNkZWZpbmUgU1NfV1JJVEVfRVJST1IJCQkJMHgwMzBjMDIKKyNkZWZpbmUgU1NfV1JJVEVfUFJPVEVDVEVECQkJMHgwNzI3MDAKKworI2RlZmluZSBTSyh4KQkJKCh1OCkgKCh4KSA+PiAxNikpCS8vIFNlbnNlIEtleSBieXRlLCBldGMuCisjZGVmaW5lIEFTQyh4KQkJKCh1OCkgKCh4KSA+PiA4KSkKKyNkZWZpbmUgQVNDUSh4KQkJKCh1OCkgKHgpKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBUaGVzZSBkZWZpbml0aW9ucyB3aWxsIHBlcm1pdCB0aGUgY29tcGlsZXIgdG8gYXZvaWQgZ2VuZXJhdGluZyBjb2RlIGZvcgorICogcGFydHMgb2YgdGhlIGRyaXZlciB0aGF0IGFyZW4ndCB1c2VkIGluIHRoZSBub24tVEVTVCB2ZXJzaW9uLiAgRXZlbiBnY2MKKyAqIGNhbiByZWNvZ25pemUgd2hlbiBhIHRlc3Qgb2YgYSBjb25zdGFudCBleHByZXNzaW9uIHlpZWxkcyBhIGRlYWQgY29kZQorICogcGF0aC4KKyAqLworCisjaWZkZWYgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVAorCisjZGVmaW5lIHRyYW5zcG9ydF9pc19iYmIoKQkobW9kX2RhdGEudHJhbnNwb3J0X3R5cGUgPT0gVVNCX1BSX0JVTEspCisjZGVmaW5lIHRyYW5zcG9ydF9pc19jYmkoKQkobW9kX2RhdGEudHJhbnNwb3J0X3R5cGUgPT0gVVNCX1BSX0NCSSkKKyNkZWZpbmUgcHJvdG9jb2xfaXNfc2NzaSgpCShtb2RfZGF0YS5wcm90b2NvbF90eXBlID09IFVTQl9TQ19TQ1NJKQorCisjZWxzZQorCisjZGVmaW5lIHRyYW5zcG9ydF9pc19iYmIoKQkxCisjZGVmaW5lIHRyYW5zcG9ydF9pc19jYmkoKQkwCisjZGVmaW5lIHByb3RvY29sX2lzX3Njc2koKQkxCisKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUICovCisKKworc3RydWN0IGx1biB7CisJc3RydWN0IGZpbGUJKmZpbHA7CisJbG9mZl90CQlmaWxlX2xlbmd0aDsKKwlsb2ZmX3QJCW51bV9zZWN0b3JzOworCisJdW5zaWduZWQgaW50CXJvIDogMTsKKwl1bnNpZ25lZCBpbnQJcHJldmVudF9tZWRpdW1fcmVtb3ZhbCA6IDE7CisJdW5zaWduZWQgaW50CXJlZ2lzdGVyZWQgOiAxOworCisJdTMyCQlzZW5zZV9kYXRhOworCXUzMgkJc2Vuc2VfZGF0YV9pbmZvOworCXUzMgkJdW5pdF9hdHRlbnRpb25fZGF0YTsKKworCXN0cnVjdCBkZXZpY2UJZGV2OworfTsKKworI2RlZmluZSBiYWNraW5nX2ZpbGVfaXNfb3BlbihjdXJsdW4pCSgoY3VybHVuKS0+ZmlscCAhPSBOVUxMKQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsdW4gKmRldl90b19sdW4oc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgbHVuLCBkZXYpOworfQorCisKKy8qIEJpZyBlbm91Z2ggdG8gaG9sZCBvdXIgYmlnZ2VzdCBkZXNjcmlwdG9yICovCisjZGVmaW5lIEVQMF9CVUZTSVpFCTI1NgorI2RlZmluZSBERUxBWUVEX1NUQVRVUwkoRVAwX0JVRlNJWkUgKyA5OTkpCS8vIEFuIGltcG9zc2libHkgbGFyZ2UgdmFsdWUKKworLyogTnVtYmVyIG9mIGJ1ZmZlcnMgd2Ugd2lsbCB1c2UuICAyIGlzIGVub3VnaCBmb3IgZG91YmxlLWJ1ZmZlcmluZyAqLworI2RlZmluZSBOVU1fQlVGRkVSUwkyCisKK2VudW0gZnNnX2J1ZmZlcl9zdGF0ZSB7CisJQlVGX1NUQVRFX0VNUFRZID0gMCwKKwlCVUZfU1RBVEVfRlVMTCwKKwlCVUZfU1RBVEVfQlVTWQorfTsKKworc3RydWN0IGZzZ19idWZmaGQgeworCXZvaWQJCQkJKmJ1ZjsKKwlkbWFfYWRkcl90CQkJZG1hOworCXZvbGF0aWxlIGVudW0gZnNnX2J1ZmZlcl9zdGF0ZQlzdGF0ZTsKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkJKm5leHQ7CisKKwkvKiBUaGUgTmV0Q2hpcCAyMjgwIGlzIGZhc3RlciwgYW5kIGhhbmRsZXMgc29tZSBwcm90b2NvbCBmYXVsdHMKKwkgKiBiZXR0ZXIsIGlmIHdlIGRvbid0IHN1Ym1pdCBhbnkgc2hvcnQgYnVsay1vdXQgcmVhZCByZXF1ZXN0cy4KKwkgKiBTbyB3ZSB3aWxsIHJlY29yZCB0aGUgaW50ZW5kZWQgcmVxdWVzdCBsZW5ndGggaGVyZS4gKi8KKwl1bnNpZ25lZCBpbnQJCQlidWxrX291dF9pbnRlbmRlZF9sZW5ndGg7CisKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJCSppbnJlcTsKKwl2b2xhdGlsZSBpbnQJCQlpbnJlcV9idXN5OworCXN0cnVjdCB1c2JfcmVxdWVzdAkJKm91dHJlcTsKKwl2b2xhdGlsZSBpbnQJCQlvdXRyZXFfYnVzeTsKK307CisKK2VudW0gZnNnX3N0YXRlIHsKKwlGU0dfU1RBVEVfQ09NTUFORF9QSEFTRSA9IC0xMCwJCS8vIFRoaXMgb25lIGlzbid0IHVzZWQgYW55d2hlcmUKKwlGU0dfU1RBVEVfREFUQV9QSEFTRSwKKwlGU0dfU1RBVEVfU1RBVFVTX1BIQVNFLAorCisJRlNHX1NUQVRFX0lETEUgPSAwLAorCUZTR19TVEFURV9BQk9SVF9CVUxLX09VVCwKKwlGU0dfU1RBVEVfUkVTRVQsCisJRlNHX1NUQVRFX0lOVEVSRkFDRV9DSEFOR0UsCisJRlNHX1NUQVRFX0NPTkZJR19DSEFOR0UsCisJRlNHX1NUQVRFX0RJU0NPTk5FQ1QsCisJRlNHX1NUQVRFX0VYSVQsCisJRlNHX1NUQVRFX1RFUk1JTkFURUQKK307CisKK2VudW0gZGF0YV9kaXJlY3Rpb24geworCURBVEFfRElSX1VOS05PV04gPSAwLAorCURBVEFfRElSX0ZST01fSE9TVCwKKwlEQVRBX0RJUl9UT19IT1NULAorCURBVEFfRElSX05PTkUKK307CisKK3N0cnVjdCBmc2dfZGV2IHsKKwkvKiBsb2NrIHByb3RlY3RzOiBzdGF0ZSwgYWxsIHRoZSByZXFfYnVzeSdzLCBhbmQgY2JidWZfY21uZCAqLworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldDsKKworCS8qIGZpbGVzZW0gcHJvdGVjdHM6IGJhY2tpbmcgZmlsZXMgaW4gdXNlICovCisJc3RydWN0IHJ3X3NlbWFwaG9yZQlmaWxlc2VtOworCisJc3RydWN0IHVzYl9lcAkJKmVwMDsJCS8vIEhhbmR5IGNvcHkgb2YgZ2FkZ2V0LT5lcDAKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKmVwMHJlcTsJLy8gRm9yIGNvbnRyb2wgcmVzcG9uc2VzCisJdm9sYXRpbGUgdW5zaWduZWQgaW50CWVwMF9yZXFfdGFnOworCWNvbnN0IGNoYXIJCSplcDByZXFfbmFtZTsKKworCXN0cnVjdCB1c2JfcmVxdWVzdAkqaW50cmVxOwkvLyBGb3IgaW50ZXJydXB0IHJlc3BvbnNlcworCXZvbGF0aWxlIGludAkJaW50cmVxX2J1c3k7CisJc3RydWN0IGZzZ19idWZmaGQJKmludHJfYnVmZmhkOworCisgCXVuc2lnbmVkIGludAkJYnVsa19vdXRfbWF4cGFja2V0OworCWVudW0gZnNnX3N0YXRlCQlzdGF0ZTsJCS8vIEZvciBleGNlcHRpb24gaGFuZGxpbmcKKwl1bnNpZ25lZCBpbnQJCWV4Y2VwdGlvbl9yZXFfdGFnOworCisJdTgJCQljb25maWcsIG5ld19jb25maWc7CisKKwl1bnNpZ25lZCBpbnQJCXJ1bm5pbmcgOiAxOworCXVuc2lnbmVkIGludAkJYnVsa19pbl9lbmFibGVkIDogMTsKKwl1bnNpZ25lZCBpbnQJCWJ1bGtfb3V0X2VuYWJsZWQgOiAxOworCXVuc2lnbmVkIGludAkJaW50cl9pbl9lbmFibGVkIDogMTsKKwl1bnNpZ25lZCBpbnQJCXBoYXNlX2Vycm9yIDogMTsKKwl1bnNpZ25lZCBpbnQJCXNob3J0X3BhY2tldF9yZWNlaXZlZCA6IDE7CisJdW5zaWduZWQgaW50CQliYWRfbHVuX29rYXkgOiAxOworCisJdW5zaWduZWQgbG9uZwkJYXRvbWljX2JpdGZsYWdzOworI2RlZmluZSBSRUdJU1RFUkVECQkwCisjZGVmaW5lIENMRUFSX0JVTEtfSEFMVFMJMQorI2RlZmluZSBTVVNQRU5ERUQJCTIKKworCXN0cnVjdCB1c2JfZXAJCSpidWxrX2luOworCXN0cnVjdCB1c2JfZXAJCSpidWxrX291dDsKKwlzdHJ1Y3QgdXNiX2VwCQkqaW50cl9pbjsKKworCXN0cnVjdCBmc2dfYnVmZmhkCSpuZXh0X2J1ZmZoZF90b19maWxsOworCXN0cnVjdCBmc2dfYnVmZmhkCSpuZXh0X2J1ZmZoZF90b19kcmFpbjsKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAlidWZmaGRzW05VTV9CVUZGRVJTXTsKKworCXdhaXRfcXVldWVfaGVhZF90CXRocmVhZF93cWg7CisJaW50CQkJdGhyZWFkX3dha2V1cF9uZWVkZWQ7CisJc3RydWN0IGNvbXBsZXRpb24JdGhyZWFkX25vdGlmaWVyOworCWludAkJCXRocmVhZF9waWQ7CisJc3RydWN0IHRhc2tfc3RydWN0CSp0aHJlYWRfdGFzazsKKwlzaWdzZXRfdAkJdGhyZWFkX3NpZ25hbF9tYXNrOworCisJaW50CQkJY21uZF9zaXplOworCXU4CQkJY21uZFtNQVhfQ09NTUFORF9TSVpFXTsKKwllbnVtIGRhdGFfZGlyZWN0aW9uCWRhdGFfZGlyOworCXUzMgkJCWRhdGFfc2l6ZTsKKwl1MzIJCQlkYXRhX3NpemVfZnJvbV9jbW5kOworCXUzMgkJCXRhZzsKKwl1bnNpZ25lZCBpbnQJCWx1bjsKKwl1MzIJCQlyZXNpZHVlOworCXUzMgkJCXVzYl9hbW91bnRfbGVmdDsKKworCS8qIFRoZSBDQiBwcm90b2NvbCBvZmZlcnMgbm8gd2F5IGZvciBhIGhvc3QgdG8ga25vdyB3aGVuIGEgY29tbWFuZAorCSAqIGhhcyBjb21wbGV0ZWQuICBBcyBhIHJlc3VsdCB0aGUgbmV4dCBjb21tYW5kIG1heSBhcnJpdmUgZWFybHksCisJICogYW5kIHdlIHdpbGwgc3RpbGwgaGF2ZSB0byBoYW5kbGUgaXQuICBGb3IgdGhhdCByZWFzb24gd2UgbmVlZAorCSAqIGEgYnVmZmVyIHRvIHN0b3JlIG5ldyBjb21tYW5kcyB3aGVuIHVzaW5nIENCIChvciBDQkksIHdoaWNoCisJICogZG9lcyBub3Qgb2JsaWdlIGEgaG9zdCB0byB3YWl0IGZvciBjb21tYW5kIGNvbXBsZXRpb24gZWl0aGVyKS4gKi8KKwlpbnQJCQljYmJ1Zl9jbW5kX3NpemU7CisJdTgJCQljYmJ1Zl9jbW5kW01BWF9DT01NQU5EX1NJWkVdOworCisJdW5zaWduZWQgaW50CQlubHVuczsKKwlzdHJ1Y3QgbHVuCQkqbHVuczsKKwlzdHJ1Y3QgbHVuCQkqY3VybHVuOworCXN0cnVjdCBjb21wbGV0aW9uCWx1bl9yZWxlYXNlZDsKK307CisKK3R5cGVkZWYgdm9pZCAoKmZzZ19yb3V0aW5lX3QpKHN0cnVjdCBmc2dfZGV2ICopOworCitzdGF0aWMgaW50IGlubGluZSBleGNlcHRpb25faW5fcHJvZ3Jlc3Moc3RydWN0IGZzZ19kZXYgKmZzZykKK3sKKwlyZXR1cm4gKGZzZy0+c3RhdGUgPiBGU0dfU1RBVEVfSURMRSk7Cit9CisKKy8qIE1ha2UgYnVsay1vdXQgcmVxdWVzdHMgYmUgZGl2aXNpYmxlIGJ5IHRoZSBtYXhwYWNrZXQgc2l6ZSAqLworc3RhdGljIHZvaWQgaW5saW5lIHNldF9idWxrX291dF9yZXFfbGVuZ3RoKHN0cnVjdCBmc2dfZGV2ICpmc2csCisJCXN0cnVjdCBmc2dfYnVmZmhkICpiaCwgdW5zaWduZWQgaW50IGxlbmd0aCkKK3sKKwl1bnNpZ25lZCBpbnQJcmVtOworCisJYmgtPmJ1bGtfb3V0X2ludGVuZGVkX2xlbmd0aCA9IGxlbmd0aDsKKwlyZW0gPSBsZW5ndGggJSBmc2ctPmJ1bGtfb3V0X21heHBhY2tldDsKKwlpZiAocmVtID4gMCkKKwkJbGVuZ3RoICs9IGZzZy0+YnVsa19vdXRfbWF4cGFja2V0IC0gcmVtOworCWJoLT5vdXRyZXEtPmxlbmd0aCA9IGxlbmd0aDsKK30KKworc3RhdGljIHN0cnVjdCBmc2dfZGV2CQkJKnRoZV9mc2c7CitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyCQlmc2dfZHJpdmVyOworCitzdGF0aWMgdm9pZAljbG9zZV9iYWNraW5nX2ZpbGUoc3RydWN0IGx1biAqY3VybHVuKTsKK3N0YXRpYyB2b2lkCWNsb3NlX2FsbF9iYWNraW5nX2ZpbGVzKHN0cnVjdCBmc2dfZGV2ICpmc2cpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBEVU1QX01TR1MKKworc3RhdGljIHZvaWQgZHVtcF9tc2coc3RydWN0IGZzZ19kZXYgKmZzZywgY29uc3QgY2hhciAqbGFiZWwsCisJCWNvbnN0IHU4ICpidWYsIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisJdW5zaWduZWQgaW50CXN0YXJ0LCBudW0sIGk7CisJY2hhcgkJbGluZVs1Ml0sICpwOworCisJaWYgKGxlbmd0aCA+PSA1MTIpCisJCXJldHVybjsKKwlEQkcoZnNnLCAiJXMsIGxlbmd0aCAldTpcbiIsIGxhYmVsLCBsZW5ndGgpOworCisJc3RhcnQgPSAwOworCXdoaWxlIChsZW5ndGggPiAwKSB7CisJCW51bSA9IG1pbihsZW5ndGgsIDE2dSk7CisJCXAgPSBsaW5lOworCQlmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKKwkJCWlmIChpID09IDgpCisJCQkJKnArKyA9ICcgJzsKKwkJCXNwcmludGYocCwgIiAlMDJ4IiwgYnVmW2ldKTsKKwkJCXAgKz0gMzsKKwkJfQorCQkqcCA9IDA7CisJCXByaW50ayhLRVJOX0RFQlVHICIlNng6ICVzXG4iLCBzdGFydCwgbGluZSk7CisJCWJ1ZiArPSBudW07CisJCXN0YXJ0ICs9IG51bTsKKwkJbGVuZ3RoIC09IG51bTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlubGluZSBkdW1wX2NkYihzdHJ1Y3QgZnNnX2RldiAqZnNnKQore30KKworI2Vsc2UKKworc3RhdGljIHZvaWQgaW5saW5lIGR1bXBfbXNnKHN0cnVjdCBmc2dfZGV2ICpmc2csIGNvbnN0IGNoYXIgKmxhYmVsLAorCQljb25zdCB1OCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQore30KKworc3RhdGljIHZvaWQgaW5saW5lIGR1bXBfY2RiKHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJaW50CWk7CisJY2hhcgljbWRidWZbMypNQVhfQ09NTUFORF9TSVpFICsgMV07CisKKwlmb3IgKGkgPSAwOyBpIDwgZnNnLT5jbW5kX3NpemU7ICsraSkKKwkJc3ByaW50ZihjbWRidWYgKyBpKjMsICIgJTAyeCIsIGZzZy0+Y21uZFtpXSk7CisJVkRCRyhmc2csICJTQ1NJIENEQjogJXNcbiIsIGNtZGJ1Zik7Cit9CisKKyNlbmRpZiAvKiBEVU1QX01TR1MgKi8KKworCitzdGF0aWMgaW50IGZzZ19zZXRfaGFsdChzdHJ1Y3QgZnNnX2RldiAqZnNnLCBzdHJ1Y3QgdXNiX2VwICplcCkKK3sKKwljb25zdCBjaGFyCSpuYW1lOworCisJaWYgKGVwID09IGZzZy0+YnVsa19pbikKKwkJbmFtZSA9ICJidWxrLWluIjsKKwllbHNlIGlmIChlcCA9PSBmc2ctPmJ1bGtfb3V0KQorCQluYW1lID0gImJ1bGstb3V0IjsKKwllbHNlCisJCW5hbWUgPSBlcC0+bmFtZTsKKwlEQkcoZnNnLCAiJXMgc2V0IGhhbHRcbiIsIG5hbWUpOworCXJldHVybiB1c2JfZXBfc2V0X2hhbHQoZXApOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFJvdXRpbmVzIGZvciB1bmFsaWduZWQgZGF0YSBhY2Nlc3MgKi8KKworc3RhdGljIHUxNiBpbmxpbmUgZ2V0X2JlMTYodTggKmJ1ZikKK3sKKwlyZXR1cm4gKCh1MTYpIGJ1ZlswXSA8PCA4KSB8ICgodTE2KSBidWZbMV0pOworfQorCitzdGF0aWMgdTMyIGlubGluZSBnZXRfYmUzMih1OCAqYnVmKQoreworCXJldHVybiAoKHUzMikgYnVmWzBdIDw8IDI0KSB8ICgodTMyKSBidWZbMV0gPDwgMTYpIHwKKwkJCSgodTMyKSBidWZbMl0gPDwgOCkgfCAoKHUzMikgYnVmWzNdKTsKK30KKworc3RhdGljIHZvaWQgaW5saW5lIHB1dF9iZTE2KHU4ICpidWYsIHUxNiB2YWwpCit7CisJYnVmWzBdID0gdmFsID4+IDg7CisJYnVmWzFdID0gdmFsOworfQorCitzdGF0aWMgdm9pZCBpbmxpbmUgcHV0X2JlMzIodTggKmJ1ZiwgdTMyIHZhbCkKK3sKKwlidWZbMF0gPSB2YWwgPj4gMjQ7CisJYnVmWzFdID0gdmFsID4+IDE2OworCWJ1ZlsyXSA9IHZhbCA+PiA4OworCWJ1ZlszXSA9IHZhbDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogREVTQ1JJUFRPUlMgLi4uIG1vc3QgYXJlIHN0YXRpYywgYnV0IHN0cmluZ3MgYW5kIChmdWxsKSBjb25maWd1cmF0aW9uCisgKiBkZXNjcmlwdG9ycyBhcmUgYnVpbHQgb24gZGVtYW5kLiAgQWxzbyB0aGUgKHN0YXRpYykgY29uZmlnIGFuZCBpbnRlcmZhY2UKKyAqIGRlc2NyaXB0b3JzIGFyZSBhZGp1c3RlZCBkdXJpbmcgZnNnX2JpbmQoKS4KKyAqLworI2RlZmluZSBTVFJJTkdfTUFOVUZBQ1RVUkVSCTEKKyNkZWZpbmUgU1RSSU5HX1BST0RVQ1QJCTIKKyNkZWZpbmUgU1RSSU5HX1NFUklBTAkJMworI2RlZmluZSBTVFJJTkdfQ09ORklHCQk0CisjZGVmaW5lIFNUUklOR19JTlRFUkZBQ0UJNQorCisvKiBUaGVyZSBpcyBvbmx5IG9uZSBjb25maWd1cmF0aW9uLiAqLworI2RlZmluZQlDT05GSUdfVkFMVUUJCTEKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IKK2RldmljZV9kZXNjID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZpY2VfZGVzYywKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKKworCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX1BFUl9JTlRFUkZBQ0UsCisKKwkvKiBUaGUgbmV4dCB0aHJlZSB2YWx1ZXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgbW9kdWxlIHBhcmFtZXRlcnMgKi8KKwkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihEUklWRVJfVkVORE9SX0lEKSwKKwkuaWRQcm9kdWN0ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRFJJVkVSX1BST0RVQ1RfSUQpLAorCS5iY2REZXZpY2UgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweGZmZmYpLAorCisJLmlNYW51ZmFjdHVyZXIgPQlTVFJJTkdfTUFOVUZBQ1RVUkVSLAorCS5pUHJvZHVjdCA9CQlTVFJJTkdfUFJPRFVDVCwKKwkuaVNlcmlhbE51bWJlciA9CVNUUklOR19TRVJJQUwsCisJLmJOdW1Db25maWd1cmF0aW9ucyA9CTEsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvcgorY29uZmlnX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGNvbmZpZ19kZXNjLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ09ORklHLAorCisJLyogd1RvdGFsTGVuZ3RoIGNvbXB1dGVkIGJ5IHVzYl9nYWRnZXRfY29uZmlnX2J1ZigpICovCisJLmJOdW1JbnRlcmZhY2VzID0JMSwKKwkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9CUNPTkZJR19WQUxVRSwKKwkuaUNvbmZpZ3VyYXRpb24gPQlTVFJJTkdfQ09ORklHLAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0NPTkZJR19BVFRfT05FIHwgVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAorCS5iTWF4UG93ZXIgPQkJMSwJLy8gc2VsZi1wb3dlcmVkCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9vdGdfZGVzY3JpcHRvcgorb3RnX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mKG90Z19kZXNjKSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX09URywKKworCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX09UR19TUlAsCit9OworCisvKiBUaGVyZSBpcyBvbmx5IG9uZSBpbnRlcmZhY2UuICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yCitpbnRmX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGludGZfZGVzYywKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKKworCS5iTnVtRW5kcG9pbnRzID0JMiwJCS8vIEFkanVzdGVkIGR1cmluZyBmc2dfYmluZCgpCisJLmJJbnRlcmZhY2VDbGFzcyA9CVVTQl9DTEFTU19NQVNTX1NUT1JBR0UsCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9CVVTQl9TQ19TQ1NJLAkvLyBBZGp1c3RlZCBkdXJpbmcgZnNnX2JpbmQoKQorCS5iSW50ZXJmYWNlUHJvdG9jb2wgPQlVU0JfUFJfQlVMSywJLy8gQWRqdXN0ZWQgZHVyaW5nIGZzZ19iaW5kKCkKKwkuaUludGVyZmFjZSA9CQlTVFJJTkdfSU5URVJGQUNFLAorfTsKKworLyogVGhyZWUgZnVsbC1zcGVlZCBlbmRwb2ludCBkZXNjcmlwdG9yczogYnVsay1pbiwgYnVsay1vdXQsCisgKiBhbmQgaW50ZXJydXB0LWluLiAqLworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCitmc19idWxrX2luX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLyogd01heFBhY2tldFNpemUgc2V0IGJ5IGF1dG9jb25maWd1cmF0aW9uICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCitmc19idWxrX291dF9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkvKiB3TWF4UGFja2V0U2l6ZSBzZXQgYnkgYXV0b2NvbmZpZ3VyYXRpb24gKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKK2ZzX2ludHJfaW5fZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAorCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMiksCisJLmJJbnRlcnZhbCA9CQkzMiwJLy8gZnJhbWVzIC0+IDMyIG1zCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZnNfZnVuY3Rpb25bXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb3RnX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmludGZfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfYnVsa19pbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19idWxrX291dF9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19pbnRyX2luX2Rlc2MsCisJTlVMTCwKK307CisjZGVmaW5lIEZTX0ZVTkNUSU9OX1BSRV9FUF9FTlRSSUVTCTIKKworCisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisKKy8qCisgKiBVU0IgMi4wIGRldmljZXMgbmVlZCB0byBleHBvc2UgYm90aCBoaWdoIHNwZWVkIGFuZCBmdWxsIHNwZWVkCisgKiBkZXNjcmlwdG9ycywgdW5sZXNzIHRoZXkgb25seSBydW4gYXQgZnVsbCBzcGVlZC4KKyAqCisgKiBUaGF0IG1lYW5zIGFsdGVybmF0ZSBlbmRwb2ludCBkZXNjcmlwdG9ycyAoYmlnZ2VyIHBhY2tldHMpCisgKiBhbmQgYSAiZGV2aWNlIHF1YWxpZmllciIgLi4uIHBsdXMgbW9yZSBjb25zdHJ1Y3Rpb24gb3B0aW9ucworICogZm9yIHRoZSBjb25maWcgZGVzY3JpcHRvci4KKyAqLworc3RhdGljIHN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IKK2Rldl9xdWFsaWZpZXIgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGRldl9xdWFsaWZpZXIsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSLAorCisJLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCksCisJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfUEVSX0lOVEVSRkFDRSwKKworCS5iTnVtQ29uZmlndXJhdGlvbnMgPQkxLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgoraHNfYnVsa19pbl9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkvKiBiRW5kcG9pbnRBZGRyZXNzIGNvcGllZCBmcm9tIGZzX2J1bGtfaW5fZGVzYyBkdXJpbmcgZnNnX2JpbmQoKSAqLworCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCitoc19idWxrX291dF9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkvKiBiRW5kcG9pbnRBZGRyZXNzIGNvcGllZCBmcm9tIGZzX2J1bGtfb3V0X2Rlc2MgZHVyaW5nIGZzZ19iaW5kKCkgKi8KKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS5iSW50ZXJ2YWwgPQkJMSwJLy8gTkFLIGV2ZXJ5IDEgdWZyYW1lCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCitoc19pbnRyX2luX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS8qIGJFbmRwb2ludEFkZHJlc3MgY29waWVkIGZyb20gZnNfaW50cl9pbl9kZXNjIGR1cmluZyBmc2dfYmluZCgpICovCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCisJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNigyKSwKKwkuYkludGVydmFsID0JCTksCS8vIDIqKig5LTEpID0gMjU2IHVmcmFtZXMgLT4gMzIgbXMKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19mdW5jdGlvbltdID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvdGdfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaW50Zl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZoc19idWxrX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX2J1bGtfb3V0X2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX2ludHJfaW5fZGVzYywKKwlOVUxMLAorfTsKKyNkZWZpbmUgSFNfRlVOQ1RJT05fUFJFX0VQX0VOVFJJRVMJMgorCisvKiBNYXhwYWNrZXQgYW5kIG90aGVyIHRyYW5zZmVyIGNoYXJhY3RlcmlzdGljcyB2YXJ5IGJ5IHNwZWVkLiAqLworI2RlZmluZSBlcF9kZXNjKGcsZnMsaHMpCSgoKGcpLT5zcGVlZD09VVNCX1NQRUVEX0hJR0gpID8gKGhzKSA6IChmcykpCisKKyNlbHNlCisKKy8qIElmIHRoZXJlJ3Mgbm8gaGlnaCBzcGVlZCBzdXBwb3J0LCBhbHdheXMgdXNlIHRoZSBmdWxsLXNwZWVkIGRlc2NyaXB0b3IuICovCisjZGVmaW5lIGVwX2Rlc2MoZyxmcyxocykJZnMKKworI2VuZGlmCS8qICFDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgKi8KKworCisvKiBUaGUgQ0JJIHNwZWNpZmljYXRpb24gbGltaXRzIHRoZSBzZXJpYWwgc3RyaW5nIHRvIDEyIHVwcGVyY2FzZSBoZXhhZGVjaW1hbAorICogY2hhcmFjdGVycy4gKi8KK3N0YXRpYyBjaGFyCQkJCW1hbnVmYWN0dXJlcls2NF07CitzdGF0aWMgY2hhcgkJCQlzZXJpYWxbMTNdOworCisvKiBTdGF0aWMgc3RyaW5ncywgaW4gVVRGLTggKGZvciBzaW1wbGljaXR5IHdlIHVzZSBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMpICovCitzdGF0aWMgc3RydWN0IHVzYl9zdHJpbmcJCXN0cmluZ3NbXSA9IHsKKwl7U1RSSU5HX01BTlVGQUNUVVJFUiwJbWFudWZhY3R1cmVyfSwKKwl7U1RSSU5HX1BST0RVQ1QsCWxvbmduYW1lfSwKKwl7U1RSSU5HX1NFUklBTCwJCXNlcmlhbH0sCisJe1NUUklOR19DT05GSUcsCQkiU2VsZi1wb3dlcmVkIn0sCisJe1NUUklOR19JTlRFUkZBQ0UsCSJNYXNzIFN0b3JhZ2UifSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MJc3RyaW5ndGFiID0geworCS5sYW5ndWFnZQk9IDB4MDQwOSwJCS8vIGVuLXVzCisJLnN0cmluZ3MJPSBzdHJpbmdzLAorfTsKKworCisvKgorICogQ29uZmlnIGRlc2NyaXB0b3JzIG11c3QgYWdyZWUgd2l0aCB0aGUgY29kZSB0aGF0IHNldHMgY29uZmlndXJhdGlvbnMKKyAqIGFuZCB3aXRoIGNvZGUgbWFuYWdpbmcgaW50ZXJmYWNlcyBhbmQgdGhlaXIgYWx0c2V0dGluZ3MuICBUaGV5IG11c3QKKyAqIGFsc28gaGFuZGxlIGRpZmZlcmVudCBzcGVlZHMgYW5kIG90aGVyLXNwZWVkIHJlcXVlc3RzLgorICovCitzdGF0aWMgaW50IHBvcHVsYXRlX2NvbmZpZ19idWYoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwKKwkJdTggKmJ1ZiwgdTggdHlwZSwgdW5zaWduZWQgaW5kZXgpCit7CisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisJZW51bSB1c2JfZGV2aWNlX3NwZWVkCQkJc3BlZWQgPSBnYWRnZXQtPnNwZWVkOworI2VuZGlmCisJaW50CQkJCQlsZW47CisJY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlcgkqKmZ1bmN0aW9uOworCisJaWYgKGluZGV4ID4gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwlpZiAodHlwZSA9PSBVU0JfRFRfT1RIRVJfU1BFRURfQ09ORklHKQorCQlzcGVlZCA9IChVU0JfU1BFRURfRlVMTCArIFVTQl9TUEVFRF9ISUdIKSAtIHNwZWVkOworCWlmIChzcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJZnVuY3Rpb24gPSBoc19mdW5jdGlvbjsKKwllbHNlCisjZW5kaWYKKwkJZnVuY3Rpb24gPSBmc19mdW5jdGlvbjsKKworCS8qIGZvciBub3csIGRvbid0IGFkdmVydGlzZSBzcnAtb25seSBkZXZpY2VzICovCisJaWYgKCFnYWRnZXQtPmlzX290ZykKKwkJZnVuY3Rpb24rKzsKKworCWxlbiA9IHVzYl9nYWRnZXRfY29uZmlnX2J1ZigmY29uZmlnX2Rlc2MsIGJ1ZiwgRVAwX0JVRlNJWkUsIGZ1bmN0aW9uKTsKKwkoKHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgKikgYnVmKS0+YkRlc2NyaXB0b3JUeXBlID0gdHlwZTsKKwlyZXR1cm4gbGVuOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFRoZXNlIHJvdXRpbmVzIG1heSBiZSBjYWxsZWQgaW4gcHJvY2VzcyBjb250ZXh0IG9yIGluX2lycSAqLworCitzdGF0aWMgdm9pZCB3YWtldXBfdGhyZWFkKHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJLyogVGVsbCB0aGUgbWFpbiB0aHJlYWQgdGhhdCBzb21ldGhpbmcgaGFzIGhhcHBlbmVkICovCisJZnNnLT50aHJlYWRfd2FrZXVwX25lZWRlZCA9IDE7CisJd2FrZV91cF9hbGwoJmZzZy0+dGhyZWFkX3dxaCk7Cit9CisKKworc3RhdGljIHZvaWQgcmFpc2VfZXhjZXB0aW9uKHN0cnVjdCBmc2dfZGV2ICpmc2csIGVudW0gZnNnX3N0YXRlIG5ld19zdGF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRocmVhZF90YXNrOworCisJLyogRG8gbm90aGluZyBpZiBhIGhpZ2hlci1wcmlvcml0eSBleGNlcHRpb24gaXMgYWxyZWFkeSBpbiBwcm9ncmVzcy4KKwkgKiBJZiBhIGxvd2VyLW9yLWVxdWFsIHByaW9yaXR5IGV4Y2VwdGlvbiBpcyBpbiBwcm9ncmVzcywgcHJlZW1wdCBpdAorCSAqIGFuZCBub3RpZnkgdGhlIG1haW4gdGhyZWFkIGJ5IHNlbmRpbmcgaXQgYSBzaWduYWwuICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZzZy0+bG9jaywgZmxhZ3MpOworCWlmIChmc2ctPnN0YXRlIDw9IG5ld19zdGF0ZSkgeworCQlmc2ctPmV4Y2VwdGlvbl9yZXFfdGFnID0gZnNnLT5lcDBfcmVxX3RhZzsKKwkJZnNnLT5zdGF0ZSA9IG5ld19zdGF0ZTsKKwkJdGhyZWFkX3Rhc2sgPSBmc2ctPnRocmVhZF90YXNrOworCQlpZiAodGhyZWFkX3Rhc2spCisJCQlzZW5kX3NpZ19pbmZvKFNJR1VTUjEsIFNFTkRfU0lHX0ZPUkNFRCwgdGhyZWFkX3Rhc2spOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2ctPmxvY2ssIGZsYWdzKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBUaGUgZGlzY29ubmVjdCBjYWxsYmFjayBhbmQgZXAwIHJvdXRpbmVzLiAgVGhlc2UgYWx3YXlzIHJ1biBpbl9pcnEsCisgKiBleGNlcHQgdGhhdCBlcDBfcXVldWUoKSBpcyBjYWxsZWQgaW4gdGhlIG1haW4gdGhyZWFkIHRvIGFja25vd2xlZGdlCisgKiBjb21wbGV0aW9uIG9mIHZhcmlvdXMgcmVxdWVzdHM6IHNldCBjb25maWcsIHNldCBpbnRlcmZhY2UsIGFuZAorICogQnVsay1vbmx5IGRldmljZSByZXNldC4gKi8KKworc3RhdGljIHZvaWQgZnNnX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgZnNnX2RldgkJKmZzZyA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOworCisJREJHKGZzZywgImRpc2Nvbm5lY3Qgb3IgcG9ydCByZXNldFxuIik7CisJcmFpc2VfZXhjZXB0aW9uKGZzZywgRlNHX1NUQVRFX0RJU0NPTk5FQ1QpOworfQorCisKK3N0YXRpYyBpbnQgZXAwX3F1ZXVlKHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJaW50CXJjOworCisJcmMgPSB1c2JfZXBfcXVldWUoZnNnLT5lcDAsIGZzZy0+ZXAwcmVxLCBHRlBfQVRPTUlDKTsKKwlpZiAocmMgIT0gMCAmJiByYyAhPSAtRVNIVVRET1dOKSB7CisKKwkJLyogV2UgY2FuJ3QgZG8gbXVjaCBtb3JlIHRoYW4gd2FpdCBmb3IgYSByZXNldCAqLworCQlXQVJOKGZzZywgImVycm9yIGluIHN1Ym1pc3Npb246ICVzIC0tPiAlZFxuIiwKKwkJCQlmc2ctPmVwMC0+bmFtZSwgcmMpOworCX0KKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGVwMF9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGZzZ19kZXYJCSpmc2cgPSAoc3RydWN0IGZzZ19kZXYgKikgZXAtPmRyaXZlcl9kYXRhOworCisJaWYgKHJlcS0+YWN0dWFsID4gMCkKKwkJZHVtcF9tc2coZnNnLCBmc2ctPmVwMHJlcV9uYW1lLCByZXEtPmJ1ZiwgcmVxLT5hY3R1YWwpOworCWlmIChyZXEtPnN0YXR1cyB8fCByZXEtPmFjdHVhbCAhPSByZXEtPmxlbmd0aCkKKwkJREJHKGZzZywgIiVzIC0tPiAlZCwgJXUvJXVcbiIsIF9fRlVOQ1RJT05fXywKKwkJCQlyZXEtPnN0YXR1cywgcmVxLT5hY3R1YWwsIHJlcS0+bGVuZ3RoKTsKKwlpZiAocmVxLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQpCQkvLyBSZXF1ZXN0IHdhcyBjYW5jZWxsZWQKKwkJdXNiX2VwX2ZpZm9fZmx1c2goZXApOworCisJaWYgKHJlcS0+c3RhdHVzID09IDAgJiYgcmVxLT5jb250ZXh0KQorCQkoKGZzZ19yb3V0aW5lX3QpIChyZXEtPmNvbnRleHQpKShmc2cpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEJ1bGsgYW5kIGludGVycnVwdCBlbmRwb2ludCBjb21wbGV0aW9uIGhhbmRsZXJzLgorICogVGhlc2UgYWx3YXlzIHJ1biBpbl9pcnEuICovCisKK3N0YXRpYyB2b2lkIGJ1bGtfaW5fY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBmc2dfZGV2CQkqZnNnID0gKHN0cnVjdCBmc2dfZGV2ICopIGVwLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSAoc3RydWN0IGZzZ19idWZmaGQgKikgcmVxLT5jb250ZXh0OworCisJaWYgKHJlcS0+c3RhdHVzIHx8IHJlcS0+YWN0dWFsICE9IHJlcS0+bGVuZ3RoKQorCQlEQkcoZnNnLCAiJXMgLS0+ICVkLCAldS8ldVxuIiwgX19GVU5DVElPTl9fLAorCQkJCXJlcS0+c3RhdHVzLCByZXEtPmFjdHVhbCwgcmVxLT5sZW5ndGgpOworCWlmIChyZXEtPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCkJCS8vIFJlcXVlc3Qgd2FzIGNhbmNlbGxlZAorCQl1c2JfZXBfZmlmb19mbHVzaChlcCk7CisKKwkvKiBIb2xkIHRoZSBsb2NrIHdoaWxlIHdlIHVwZGF0ZSB0aGUgcmVxdWVzdCBhbmQgYnVmZmVyIHN0YXRlcyAqLworCXNwaW5fbG9jaygmZnNnLT5sb2NrKTsKKwliaC0+aW5yZXFfYnVzeSA9IDA7CisJYmgtPnN0YXRlID0gQlVGX1NUQVRFX0VNUFRZOworCXNwaW5fdW5sb2NrKCZmc2ctPmxvY2spOworCXdha2V1cF90aHJlYWQoZnNnKTsKK30KKworc3RhdGljIHZvaWQgYnVsa19vdXRfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBmc2dfZGV2CQkqZnNnID0gKHN0cnVjdCBmc2dfZGV2ICopIGVwLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSAoc3RydWN0IGZzZ19idWZmaGQgKikgcmVxLT5jb250ZXh0OworCisJZHVtcF9tc2coZnNnLCAiYnVsay1vdXQiLCByZXEtPmJ1ZiwgcmVxLT5hY3R1YWwpOworCWlmIChyZXEtPnN0YXR1cyB8fCByZXEtPmFjdHVhbCAhPSBiaC0+YnVsa19vdXRfaW50ZW5kZWRfbGVuZ3RoKQorCQlEQkcoZnNnLCAiJXMgLS0+ICVkLCAldS8ldVxuIiwgX19GVU5DVElPTl9fLAorCQkJCXJlcS0+c3RhdHVzLCByZXEtPmFjdHVhbCwKKwkJCQliaC0+YnVsa19vdXRfaW50ZW5kZWRfbGVuZ3RoKTsKKwlpZiAocmVxLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQpCQkvLyBSZXF1ZXN0IHdhcyBjYW5jZWxsZWQKKwkJdXNiX2VwX2ZpZm9fZmx1c2goZXApOworCisJLyogSG9sZCB0aGUgbG9jayB3aGlsZSB3ZSB1cGRhdGUgdGhlIHJlcXVlc3QgYW5kIGJ1ZmZlciBzdGF0ZXMgKi8KKwlzcGluX2xvY2soJmZzZy0+bG9jayk7CisJYmgtPm91dHJlcV9idXN5ID0gMDsKKwliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRlVMTDsKKwlzcGluX3VubG9jaygmZnNnLT5sb2NrKTsKKwl3YWtldXBfdGhyZWFkKGZzZyk7Cit9CisKKworI2lmZGVmIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QKK3N0YXRpYyB2b2lkIGludHJfaW5fY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBmc2dfZGV2CQkqZnNnID0gKHN0cnVjdCBmc2dfZGV2ICopIGVwLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSAoc3RydWN0IGZzZ19idWZmaGQgKikgcmVxLT5jb250ZXh0OworCisJaWYgKHJlcS0+c3RhdHVzIHx8IHJlcS0+YWN0dWFsICE9IHJlcS0+bGVuZ3RoKQorCQlEQkcoZnNnLCAiJXMgLS0+ICVkLCAldS8ldVxuIiwgX19GVU5DVElPTl9fLAorCQkJCXJlcS0+c3RhdHVzLCByZXEtPmFjdHVhbCwgcmVxLT5sZW5ndGgpOworCWlmIChyZXEtPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCkJCS8vIFJlcXVlc3Qgd2FzIGNhbmNlbGxlZAorCQl1c2JfZXBfZmlmb19mbHVzaChlcCk7CisKKwkvKiBIb2xkIHRoZSBsb2NrIHdoaWxlIHdlIHVwZGF0ZSB0aGUgcmVxdWVzdCBhbmQgYnVmZmVyIHN0YXRlcyAqLworCXNwaW5fbG9jaygmZnNnLT5sb2NrKTsKKwlmc2ctPmludHJlcV9idXN5ID0gMDsKKwliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRU1QVFk7CisJc3Bpbl91bmxvY2soJmZzZy0+bG9jayk7CisJd2FrZXVwX3RocmVhZChmc2cpOworfQorCisjZWxzZQorc3RhdGljIHZvaWQgaW50cl9pbl9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7fQorI2VuZGlmIC8qIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBFcDAgY2xhc3Mtc3BlY2lmaWMgaGFuZGxlcnMuICBUaGVzZSBhbHdheXMgcnVuIGluX2lycS4gKi8KKworI2lmZGVmIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QKK3N0YXRpYyB2b2lkIHJlY2VpdmVkX2NiaV9hZHNjKHN0cnVjdCBmc2dfZGV2ICpmc2csIHN0cnVjdCBmc2dfYnVmZmhkICpiaCkKK3sKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IGZzZy0+ZXAwcmVxOworCXN0YXRpYyB1OAkJY2JpX3Jlc2V0X2NtbmRbNl0gPSB7CisJCQlTQ19TRU5EX0RJQUdOT1NUSUMsIDQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OworCisJLyogRXJyb3IgaW4gY29tbWFuZCB0cmFuc2Zlcj8gKi8KKwlpZiAocmVxLT5zdGF0dXMgfHwgcmVxLT5sZW5ndGggIT0gcmVxLT5hY3R1YWwgfHwKKwkJCXJlcS0+YWN0dWFsIDwgNiB8fCByZXEtPmFjdHVhbCA+IE1BWF9DT01NQU5EX1NJWkUpIHsKKworCQkvKiBOb3QgYWxsIGNvbnRyb2xsZXJzIGFsbG93IGEgcHJvdG9jb2wgc3RhbGwgYWZ0ZXIKKwkJICogcmVjZWl2aW5nIGNvbnRyb2wtb3V0IGRhdGEsIGJ1dCB3ZSdsbCB0cnkgYW55d2F5LiAqLworCQlmc2dfc2V0X2hhbHQoZnNnLCBmc2ctPmVwMCk7CisJCXJldHVybjsJCQkvLyBXYWl0IGZvciByZXNldAorCX0KKworCS8qIElzIGl0IHRoZSBzcGVjaWFsIHJlc2V0IGNvbW1hbmQ/ICovCisJaWYgKHJlcS0+YWN0dWFsID49IHNpemVvZiBjYmlfcmVzZXRfY21uZCAmJgorCQkJbWVtY21wKHJlcS0+YnVmLCBjYmlfcmVzZXRfY21uZCwKKwkJCQlzaXplb2YgY2JpX3Jlc2V0X2NtbmQpID09IDApIHsKKworCQkvKiBSYWlzZSBhbiBleGNlcHRpb24gdG8gc3RvcCB0aGUgY3VycmVudCBvcGVyYXRpb24KKwkJICogYW5kIHJlaW5pdGlhbGl6ZSBvdXIgc3RhdGUuICovCisJCURCRyhmc2csICJjYmkgcmVzZXQgcmVxdWVzdFxuIik7CisJCXJhaXNlX2V4Y2VwdGlvbihmc2csIEZTR19TVEFURV9SRVNFVCk7CisJCXJldHVybjsKKwl9CisKKwlWREJHKGZzZywgIkNCW0ldIGFjY2VwdCBkZXZpY2Utc3BlY2lmaWMgY29tbWFuZFxuIik7CisJc3Bpbl9sb2NrKCZmc2ctPmxvY2spOworCisJLyogU2F2ZSB0aGUgY29tbWFuZCBmb3IgbGF0ZXIgKi8KKwlpZiAoZnNnLT5jYmJ1Zl9jbW5kX3NpemUpCisJCVdBUk4oZnNnLCAiQ0JbSV0gb3ZlcndyaXRpbmcgcHJldmlvdXMgY29tbWFuZFxuIik7CisJZnNnLT5jYmJ1Zl9jbW5kX3NpemUgPSByZXEtPmFjdHVhbDsKKwltZW1jcHkoZnNnLT5jYmJ1Zl9jbW5kLCByZXEtPmJ1ZiwgZnNnLT5jYmJ1Zl9jbW5kX3NpemUpOworCisJc3Bpbl91bmxvY2soJmZzZy0+bG9jayk7CisJd2FrZXVwX3RocmVhZChmc2cpOworfQorCisjZWxzZQorc3RhdGljIHZvaWQgcmVjZWl2ZWRfY2JpX2Fkc2Moc3RydWN0IGZzZ19kZXYgKmZzZywgc3RydWN0IGZzZ19idWZmaGQgKmJoKQore30KKyNlbmRpZiAvKiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUICovCisKKworc3RhdGljIGludCBjbGFzc19zZXR1cF9yZXEoc3RydWN0IGZzZ19kZXYgKmZzZywKKwkJY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKK3sKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IGZzZy0+ZXAwcmVxOworCWludAkJCXZhbHVlID0gLUVPUE5PVFNVUFA7CisJdTE2CQkJd19pbmRleCA9IGN0cmwtPndJbmRleDsKKwl1MTYJCQl3X2xlbmd0aCA9IGN0cmwtPndMZW5ndGg7CisKKwlpZiAoIWZzZy0+Y29uZmlnKQorCQlyZXR1cm4gdmFsdWU7CisKKwkvKiBIYW5kbGUgQnVsay1vbmx5IGNsYXNzLXNwZWNpZmljIHJlcXVlc3RzICovCisJaWYgKHRyYW5zcG9ydF9pc19iYmIoKSkgeworCQlzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0KSB7CisKKwkJY2FzZSBVU0JfQlVMS19SRVNFVF9SRVFVRVNUOgorCQkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAoVVNCX0RJUl9PVVQgfAorCQkJCQlVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UpKQorCQkJCWJyZWFrOworCQkJaWYgKHdfaW5kZXggIT0gMCkgeworCQkJCXZhbHVlID0gLUVET007CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIFJhaXNlIGFuIGV4Y2VwdGlvbiB0byBzdG9wIHRoZSBjdXJyZW50IG9wZXJhdGlvbgorCQkJICogYW5kIHJlaW5pdGlhbGl6ZSBvdXIgc3RhdGUuICovCisJCQlEQkcoZnNnLCAiYnVsayByZXNldCByZXF1ZXN0XG4iKTsKKwkJCXJhaXNlX2V4Y2VwdGlvbihmc2csIEZTR19TVEFURV9SRVNFVCk7CisJCQl2YWx1ZSA9IERFTEFZRURfU1RBVFVTOworCQkJYnJlYWs7CisKKwkJY2FzZSBVU0JfQlVMS19HRVRfTUFYX0xVTl9SRVFVRVNUOgorCQkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAoVVNCX0RJUl9JTiB8CisJCQkJCVVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSkpCisJCQkJYnJlYWs7CisJCQlpZiAod19pbmRleCAhPSAwKSB7CisJCQkJdmFsdWUgPSAtRURPTTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCVZEQkcoZnNnLCAiZ2V0IG1heCBMVU5cbiIpOworCQkJKih1OCAqKSByZXEtPmJ1ZiA9IGZzZy0+bmx1bnMgLSAxOworCQkJdmFsdWUgPSBtaW4od19sZW5ndGgsICh1MTYpIDEpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBIYW5kbGUgQ0JJIGNsYXNzLXNwZWNpZmljIHJlcXVlc3RzICovCisJZWxzZSB7CisJCXN3aXRjaCAoY3RybC0+YlJlcXVlc3QpIHsKKworCQljYXNlIFVTQl9DQklfQURTQ19SRVFVRVNUOgorCQkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAoVVNCX0RJUl9PVVQgfAorCQkJCQlVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UpKQorCQkJCWJyZWFrOworCQkJaWYgKHdfaW5kZXggIT0gMCkgeworCQkJCXZhbHVlID0gLUVET007CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAod19sZW5ndGggPiBNQVhfQ09NTUFORF9TSVpFKSB7CisJCQkJdmFsdWUgPSAtRU9WRVJGTE9XOworCQkJCWJyZWFrOworCQkJfQorCQkJdmFsdWUgPSB3X2xlbmd0aDsKKwkJCWZzZy0+ZXAwcmVxLT5jb250ZXh0ID0gcmVjZWl2ZWRfY2JpX2Fkc2M7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICh2YWx1ZSA9PSAtRU9QTk9UU1VQUCkKKwkJVkRCRyhmc2csCisJCQkidW5rbm93biBjbGFzcy1zcGVjaWZpYyBjb250cm9sIHJlcSAiCisJCQkiJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwldVxuIiwKKwkJCWN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3QsCisJCQljdHJsLT53VmFsdWUsIHdfaW5kZXgsIHdfbGVuZ3RoKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRXAwIHN0YW5kYXJkIHJlcXVlc3QgaGFuZGxlcnMuICBUaGVzZSBhbHdheXMgcnVuIGluX2lycS4gKi8KKworc3RhdGljIGludCBzdGFuZGFyZF9zZXR1cF9yZXEoc3RydWN0IGZzZ19kZXYgKmZzZywKKwkJY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKK3sKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IGZzZy0+ZXAwcmVxOworCWludAkJCXZhbHVlID0gLUVPUE5PVFNVUFA7CisJdTE2CQkJd19pbmRleCA9IGN0cmwtPndJbmRleDsKKwl1MTYJCQl3X3ZhbHVlID0gY3RybC0+d1ZhbHVlOworCXUxNgkJCXdfbGVuZ3RoID0gY3RybC0+d0xlbmd0aDsKKworCS8qIFVzdWFsbHkgdGhpcyBqdXN0IHN0b3JlcyByZXBseSBkYXRhIGluIHRoZSBwcmUtYWxsb2NhdGVkIGVwMCBidWZmZXIsCisJICogYnV0IGNvbmZpZyBjaGFuZ2UgZXZlbnRzIHdpbGwgYWxzbyByZWNvbmZpZ3VyZSBoYXJkd2FyZS4gKi8KKwlzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0KSB7CisKKwljYXNlIFVTQl9SRVFfR0VUX0RFU0NSSVBUT1I6CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9TVEFOREFSRCB8CisJCQkJVVNCX1JFQ0lQX0RFVklDRSkpCisJCQlicmVhazsKKwkJc3dpdGNoICh3X3ZhbHVlID4+IDgpIHsKKworCQljYXNlIFVTQl9EVF9ERVZJQ0U6CisJCQlWREJHKGZzZywgImdldCBkZXZpY2UgZGVzY3JpcHRvclxuIik7CisJCQl2YWx1ZSA9IG1pbih3X2xlbmd0aCwgKHUxNikgc2l6ZW9mIGRldmljZV9kZXNjKTsKKwkJCW1lbWNweShyZXEtPmJ1ZiwgJmRldmljZV9kZXNjLCB2YWx1ZSk7CisJCQlicmVhazsKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwkJY2FzZSBVU0JfRFRfREVWSUNFX1FVQUxJRklFUjoKKwkJCVZEQkcoZnNnLCAiZ2V0IGRldmljZSBxdWFsaWZpZXJcbiIpOworCQkJaWYgKCFmc2ctPmdhZGdldC0+aXNfZHVhbHNwZWVkKQorCQkJCWJyZWFrOworCQkJdmFsdWUgPSBtaW4od19sZW5ndGgsICh1MTYpIHNpemVvZiBkZXZfcXVhbGlmaWVyKTsKKwkJCW1lbWNweShyZXEtPmJ1ZiwgJmRldl9xdWFsaWZpZXIsIHZhbHVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRzoKKwkJCVZEQkcoZnNnLCAiZ2V0IG90aGVyLXNwZWVkIGNvbmZpZyBkZXNjcmlwdG9yXG4iKTsKKwkJCWlmICghZnNnLT5nYWRnZXQtPmlzX2R1YWxzcGVlZCkKKwkJCQlicmVhazsKKwkJCWdvdG8gZ2V0X2NvbmZpZzsKKyNlbmRpZgorCQljYXNlIFVTQl9EVF9DT05GSUc6CisJCQlWREJHKGZzZywgImdldCBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3JcbiIpOworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCQlnZXRfY29uZmlnOgorI2VuZGlmCisJCQl2YWx1ZSA9IHBvcHVsYXRlX2NvbmZpZ19idWYoZnNnLT5nYWRnZXQsCisJCQkJCXJlcS0+YnVmLAorCQkJCQl3X3ZhbHVlID4+IDgsCisJCQkJCXdfdmFsdWUgJiAweGZmKTsKKwkJCWlmICh2YWx1ZSA+PSAwKQorCQkJCXZhbHVlID0gbWluKHdfbGVuZ3RoLCAodTE2KSB2YWx1ZSk7CisJCQlicmVhazsKKworCQljYXNlIFVTQl9EVF9TVFJJTkc6CisJCQlWREJHKGZzZywgImdldCBzdHJpbmcgZGVzY3JpcHRvclxuIik7CisKKwkJCS8qIHdJbmRleCA9PSBsYW5ndWFnZSBjb2RlICovCisJCQl2YWx1ZSA9IHVzYl9nYWRnZXRfZ2V0X3N0cmluZygmc3RyaW5ndGFiLAorCQkJCQl3X3ZhbHVlICYgMHhmZiwgcmVxLT5idWYpOworCQkJaWYgKHZhbHVlID49IDApCisJCQkJdmFsdWUgPSBtaW4od19sZW5ndGgsICh1MTYpIHZhbHVlKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJLyogT25lIGNvbmZpZywgdHdvIHNwZWVkcyAqLworCWNhc2UgVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTjoKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9TVEFOREFSRCB8CisJCQkJVVNCX1JFQ0lQX0RFVklDRSkpCisJCQlicmVhazsKKwkJVkRCRyhmc2csICJzZXQgY29uZmlndXJhdGlvblxuIik7CisJCWlmICh3X3ZhbHVlID09IENPTkZJR19WQUxVRSB8fCB3X3ZhbHVlID09IDApIHsKKwkJCWZzZy0+bmV3X2NvbmZpZyA9IHdfdmFsdWU7CisKKwkJCS8qIFJhaXNlIGFuIGV4Y2VwdGlvbiB0byB3aXBlIG91dCBwcmV2aW91cyB0cmFuc2FjdGlvbgorCQkJICogc3RhdGUgKHF1ZXVlZCBidWZzLCBldGMpIGFuZCBzZXQgdGhlIG5ldyBjb25maWcuICovCisJCQlyYWlzZV9leGNlcHRpb24oZnNnLCBGU0dfU1RBVEVfQ09ORklHX0NIQU5HRSk7CisJCQl2YWx1ZSA9IERFTEFZRURfU1RBVFVTOworCQl9CisJCWJyZWFrOworCWNhc2UgVVNCX1JFUV9HRVRfQ09ORklHVVJBVElPTjoKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAoVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1NUQU5EQVJEIHwKKwkJCQlVU0JfUkVDSVBfREVWSUNFKSkKKwkJCWJyZWFrOworCQlWREJHKGZzZywgImdldCBjb25maWd1cmF0aW9uXG4iKTsKKwkJKih1OCAqKSByZXEtPmJ1ZiA9IGZzZy0+Y29uZmlnOworCQl2YWx1ZSA9IG1pbih3X2xlbmd0aCwgKHUxNikgMSk7CisJCWJyZWFrOworCisJY2FzZSBVU0JfUkVRX1NFVF9JTlRFUkZBQ0U6CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9ESVJfT1VUfCBVU0JfVFlQRV9TVEFOREFSRCB8CisJCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRSkpCisJCQlicmVhazsKKwkJaWYgKGZzZy0+Y29uZmlnICYmIHdfaW5kZXggPT0gMCkgeworCisJCQkvKiBSYWlzZSBhbiBleGNlcHRpb24gdG8gd2lwZSBvdXQgcHJldmlvdXMgdHJhbnNhY3Rpb24KKwkJCSAqIHN0YXRlIChxdWV1ZWQgYnVmcywgZXRjKSBhbmQgaW5zdGFsbCB0aGUgbmV3CisJCQkgKiBpbnRlcmZhY2UgYWx0c2V0dGluZy4gKi8KKwkJCXJhaXNlX2V4Y2VwdGlvbihmc2csIEZTR19TVEFURV9JTlRFUkZBQ0VfQ0hBTkdFKTsKKwkJCXZhbHVlID0gREVMQVlFRF9TVEFUVVM7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBVU0JfUkVRX0dFVF9JTlRFUkZBQ0U6CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9TVEFOREFSRCB8CisJCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRSkpCisJCQlicmVhazsKKwkJaWYgKCFmc2ctPmNvbmZpZykKKwkJCWJyZWFrOworCQlpZiAod19pbmRleCAhPSAwKSB7CisJCQl2YWx1ZSA9IC1FRE9NOworCQkJYnJlYWs7CisJCX0KKwkJVkRCRyhmc2csICJnZXQgaW50ZXJmYWNlXG4iKTsKKwkJKih1OCAqKSByZXEtPmJ1ZiA9IDA7CisJCXZhbHVlID0gbWluKHdfbGVuZ3RoLCAodTE2KSAxKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlWREJHKGZzZywKKwkJCSJ1bmtub3duIGNvbnRyb2wgcmVxICUwMnguJTAyeCB2JTA0eCBpJTA0eCBsJXVcbiIsCisJCQljdHJsLT5iUmVxdWVzdFR5cGUsIGN0cmwtPmJSZXF1ZXN0LAorCQkJd192YWx1ZSwgd19pbmRleCwgd19sZW5ndGgpOworCX0KKworCXJldHVybiB2YWx1ZTsKK30KKworCitzdGF0aWMgaW50IGZzZ19zZXR1cChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LAorCQljb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKQoreworCXN0cnVjdCBmc2dfZGV2CQkqZnNnID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CisJaW50CQkJcmM7CisKKwkrK2ZzZy0+ZXAwX3JlcV90YWc7CQkvLyBSZWNvcmQgYXJyaXZhbCBvZiBhIG5ldyByZXF1ZXN0CisJZnNnLT5lcDByZXEtPmNvbnRleHQgPSBOVUxMOworCWZzZy0+ZXAwcmVxLT5sZW5ndGggPSAwOworCWR1bXBfbXNnKGZzZywgImVwMC1zZXR1cCIsICh1OCAqKSBjdHJsLCBzaXplb2YoKmN0cmwpKTsKKworCWlmICgoY3RybC0+YlJlcXVlc3RUeXBlICYgVVNCX1RZUEVfTUFTSykgPT0gVVNCX1RZUEVfQ0xBU1MpCisJCXJjID0gY2xhc3Nfc2V0dXBfcmVxKGZzZywgY3RybCk7CisJZWxzZQorCQlyYyA9IHN0YW5kYXJkX3NldHVwX3JlcShmc2csIGN0cmwpOworCisJLyogUmVzcG9uZCB3aXRoIGRhdGEvc3RhdHVzIG9yIGRlZmVyIHVudGlsIGxhdGVyPyAqLworCWlmIChyYyA+PSAwICYmIHJjICE9IERFTEFZRURfU1RBVFVTKSB7CisJCWZzZy0+ZXAwcmVxLT5sZW5ndGggPSByYzsKKwkJZnNnLT5lcDByZXEtPnplcm8gPSAocmMgPCBjdHJsLT53TGVuZ3RoICYmCisJCQkJKHJjICUgZ2FkZ2V0LT5lcDAtPm1heHBhY2tldCkgPT0gMCk7CisJCWZzZy0+ZXAwcmVxX25hbWUgPSAoY3RybC0+YlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTiA/CisJCQkJImVwMC1pbiIgOiAiZXAwLW91dCIpOworCQlyYyA9IGVwMF9xdWV1ZShmc2cpOworCX0KKworCS8qIERldmljZSBlaXRoZXIgc3RhbGxzIChyYyA8IDApIG9yIHJlcG9ydHMgc3VjY2VzcyAqLworCXJldHVybiByYzsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBBbGwgdGhlIGZvbGxvd2luZyByb3V0aW5lcyBydW4gaW4gcHJvY2VzcyBjb250ZXh0ICovCisKKworLyogVXNlIHRoaXMgZm9yIGJ1bGsgb3IgaW50ZXJydXB0IHRyYW5zZmVycywgbm90IGVwMCAqLworc3RhdGljIHZvaWQgc3RhcnRfdHJhbnNmZXIoc3RydWN0IGZzZ19kZXYgKmZzZywgc3RydWN0IHVzYl9lcCAqZXAsCisJCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxLCB2b2xhdGlsZSBpbnQgKnBidXN5LAorCQl2b2xhdGlsZSBlbnVtIGZzZ19idWZmZXJfc3RhdGUgKnN0YXRlKQoreworCWludAlyYzsKKworCWlmIChlcCA9PSBmc2ctPmJ1bGtfaW4pCisJCWR1bXBfbXNnKGZzZywgImJ1bGstaW4iLCByZXEtPmJ1ZiwgcmVxLT5sZW5ndGgpOworCWVsc2UgaWYgKGVwID09IGZzZy0+aW50cl9pbikKKwkJZHVtcF9tc2coZnNnLCAiaW50ci1pbiIsIHJlcS0+YnVmLCByZXEtPmxlbmd0aCk7CisJKnBidXN5ID0gMTsKKwkqc3RhdGUgPSBCVUZfU1RBVEVfQlVTWTsKKwlyYyA9IHVzYl9lcF9xdWV1ZShlcCwgcmVxLCBHRlBfS0VSTkVMKTsKKwlpZiAocmMgIT0gMCkgeworCQkqcGJ1c3kgPSAwOworCQkqc3RhdGUgPSBCVUZfU1RBVEVfRU1QVFk7CisKKwkJLyogV2UgY2FuJ3QgZG8gbXVjaCBtb3JlIHRoYW4gd2FpdCBmb3IgYSByZXNldCAqLworCisJCS8qIE5vdGU6IGN1cnJlbnRseSB0aGUgbmV0MjI4MCBkcml2ZXIgZmFpbHMgemVyby1sZW5ndGgKKwkJICogc3VibWlzc2lvbnMgaWYgRE1BIGlzIGVuYWJsZWQuICovCisJCWlmIChyYyAhPSAtRVNIVVRET1dOICYmICEocmMgPT0gLUVPUE5PVFNVUFAgJiYKKwkJCQkJCXJlcS0+bGVuZ3RoID09IDApKQorCQkJV0FSTihmc2csICJlcnJvciBpbiBzdWJtaXNzaW9uOiAlcyAtLT4gJWRcbiIsCisJCQkJCWVwLT5uYW1lLCByYyk7CisJfQorfQorCisKK3N0YXRpYyBpbnQgc2xlZXBfdGhyZWFkKHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJaW50CXJjOworCisJLyogV2FpdCB1bnRpbCBhIHNpZ25hbCBhcnJpdmVzIG9yIHdlIGFyZSB3b2tlbiB1cCAqLworCXJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGZzZy0+dGhyZWFkX3dxaCwKKwkJCWZzZy0+dGhyZWFkX3dha2V1cF9uZWVkZWQpOworCWZzZy0+dGhyZWFkX3dha2V1cF9uZWVkZWQgPSAwOworCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX0ZSRUVaRSkKKwkJcmVmcmlnZXJhdG9yKFBGX0ZSRUVaRSk7CisJcmV0dXJuIChyYyA/IC1FSU5UUiA6IDApOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZG9fcmVhZChzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCXN0cnVjdCBsdW4JCSpjdXJsdW4gPSBmc2ctPmN1cmx1bjsKKwl1MzIJCQlsYmE7CisJc3RydWN0IGZzZ19idWZmaGQJKmJoOworCWludAkJCXJjOworCXUzMgkJCWFtb3VudF9sZWZ0OworCWxvZmZfdAkJCWZpbGVfb2Zmc2V0LCBmaWxlX29mZnNldF90bXA7CisJdW5zaWduZWQgaW50CQlhbW91bnQ7CisJdW5zaWduZWQgaW50CQlwYXJ0aWFsX3BhZ2U7CisJc3NpemVfdAkJCW5yZWFkOworCisJLyogR2V0IHRoZSBzdGFydGluZyBMb2dpY2FsIEJsb2NrIEFkZHJlc3MgYW5kIGNoZWNrIHRoYXQgaXQncworCSAqIG5vdCB0b28gYmlnICovCisJaWYgKGZzZy0+Y21uZFswXSA9PSBTQ19SRUFEXzYpCisJCWxiYSA9IChmc2ctPmNtbmRbMV0gPDwgMTYpIHwgZ2V0X2JlMTYoJmZzZy0+Y21uZFsyXSk7CisJZWxzZSB7CisJCWxiYSA9IGdldF9iZTMyKCZmc2ctPmNtbmRbMl0pOworCisJCS8qIFdlIGFsbG93IERQTyAoRGlzYWJsZSBQYWdlIE91dCA9IGRvbid0IHNhdmUgZGF0YSBpbiB0aGUKKwkJICogY2FjaGUpIGFuZCBGVUEgKEZvcmNlIFVuaXQgQWNjZXNzID0gZG9uJ3QgcmVhZCBmcm9tIHRoZQorCQkgKiBjYWNoZSksIGJ1dCB3ZSBkb24ndCBpbXBsZW1lbnQgdGhlbS4gKi8KKwkJaWYgKChmc2ctPmNtbmRbMV0gJiB+MHgxOCkgIT0gMCkgeworCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwlpZiAobGJhID49IGN1cmx1bi0+bnVtX3NlY3RvcnMpIHsKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfTE9HSUNBTF9CTE9DS19BRERSRVNTX09VVF9PRl9SQU5HRTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWZpbGVfb2Zmc2V0ID0gKChsb2ZmX3QpIGxiYSkgPDwgOTsKKworCS8qIENhcnJ5IG91dCB0aGUgZmlsZSByZWFkcyAqLworCWFtb3VudF9sZWZ0ID0gZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kOworCWlmICh1bmxpa2VseShhbW91bnRfbGVmdCA9PSAwKSkKKwkJcmV0dXJuIC1FSU87CQkvLyBObyBkZWZhdWx0IHJlcGx5CisKKwlmb3IgKDs7KSB7CisKKwkJLyogRmlndXJlIG91dCBob3cgbXVjaCB3ZSBuZWVkIHRvIHJlYWQ6CisJCSAqIFRyeSB0byByZWFkIHRoZSByZW1haW5pbmcgYW1vdW50LgorCQkgKiBCdXQgZG9uJ3QgcmVhZCBtb3JlIHRoYW4gdGhlIGJ1ZmZlciBzaXplLgorCQkgKiBBbmQgZG9uJ3QgdHJ5IHRvIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBmaWxlLgorCQkgKiBGaW5hbGx5LCBpZiB3ZSdyZSBub3QgYXQgYSBwYWdlIGJvdW5kYXJ5LCBkb24ndCByZWFkIHBhc3QKKwkJICoJdGhlIG5leHQgcGFnZS4KKwkJICogSWYgdGhpcyBtZWFucyByZWFkaW5nIDAgdGhlbiB3ZSB3ZXJlIGFza2VkIHRvIHJlYWQgcGFzdAorCQkgKgl0aGUgZW5kIG9mIGZpbGUuICovCisJCWFtb3VudCA9IG1pbigodW5zaWduZWQgaW50KSBhbW91bnRfbGVmdCwgbW9kX2RhdGEuYnVmbGVuKTsKKwkJYW1vdW50ID0gbWluKChsb2ZmX3QpIGFtb3VudCwKKwkJCQljdXJsdW4tPmZpbGVfbGVuZ3RoIC0gZmlsZV9vZmZzZXQpOworCQlwYXJ0aWFsX3BhZ2UgPSBmaWxlX29mZnNldCAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKKwkJaWYgKHBhcnRpYWxfcGFnZSA+IDApCisJCQlhbW91bnQgPSBtaW4oYW1vdW50LCAodW5zaWduZWQgaW50KSBQQUdFX0NBQ0hFX1NJWkUgLQorCQkJCQlwYXJ0aWFsX3BhZ2UpOworCisJCS8qIFdhaXQgZm9yIHRoZSBuZXh0IGJ1ZmZlciB0byBiZWNvbWUgYXZhaWxhYmxlICovCisJCWJoID0gZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsOworCQl3aGlsZSAoYmgtPnN0YXRlICE9IEJVRl9TVEFURV9FTVBUWSkgeworCQkJaWYgKChyYyA9IHNsZWVwX3RocmVhZChmc2cpKSAhPSAwKQorCQkJCXJldHVybiByYzsKKwkJfQorCisJCS8qIElmIHdlIHdlcmUgYXNrZWQgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgZmlsZSwKKwkJICogZW5kIHdpdGggYW4gZW1wdHkgYnVmZmVyLiAqLworCQlpZiAoYW1vdW50ID09IDApIHsKKwkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9CisJCQkJCVNTX0xPR0lDQUxfQkxPQ0tfQUREUkVTU19PVVRfT0ZfUkFOR0U7CisJCQljdXJsdW4tPnNlbnNlX2RhdGFfaW5mbyA9IGZpbGVfb2Zmc2V0ID4+IDk7CisJCQliaC0+aW5yZXEtPmxlbmd0aCA9IDA7CisJCQliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRlVMTDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogUGVyZm9ybSB0aGUgcmVhZCAqLworCQlmaWxlX29mZnNldF90bXAgPSBmaWxlX29mZnNldDsKKwkJbnJlYWQgPSB2ZnNfcmVhZChjdXJsdW4tPmZpbHAsCisJCQkJKGNoYXIgX191c2VyICopIGJoLT5idWYsCisJCQkJYW1vdW50LCAmZmlsZV9vZmZzZXRfdG1wKTsKKwkJVkxEQkcoY3VybHVuLCAiZmlsZSByZWFkICV1IEAgJWxsdSAtPiAlZFxuIiwgYW1vdW50LAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGZpbGVfb2Zmc2V0LAorCQkJCShpbnQpIG5yZWFkKTsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJcmV0dXJuIC1FSU5UUjsKKworCQlpZiAobnJlYWQgPCAwKSB7CisJCQlMREJHKGN1cmx1biwgImVycm9yIGluIGZpbGUgcmVhZDogJWRcbiIsCisJCQkJCShpbnQpIG5yZWFkKTsKKwkJCW5yZWFkID0gMDsKKwkJfSBlbHNlIGlmIChucmVhZCA8IGFtb3VudCkgeworCQkJTERCRyhjdXJsdW4sICJwYXJ0aWFsIGZpbGUgcmVhZDogJWQvJXVcbiIsCisJCQkJCShpbnQpIG5yZWFkLCBhbW91bnQpOworCQkJbnJlYWQgLT0gKG5yZWFkICYgNTExKTsJLy8gUm91bmQgZG93biB0byBhIGJsb2NrCisJCX0KKwkJZmlsZV9vZmZzZXQgICs9IG5yZWFkOworCQlhbW91bnRfbGVmdCAgLT0gbnJlYWQ7CisJCWZzZy0+cmVzaWR1ZSAtPSBucmVhZDsKKwkJYmgtPmlucmVxLT5sZW5ndGggPSBucmVhZDsKKwkJYmgtPnN0YXRlID0gQlVGX1NUQVRFX0ZVTEw7CisKKwkJLyogSWYgYW4gZXJyb3Igb2NjdXJyZWQsIHJlcG9ydCBpdCBhbmQgaXRzIHBvc2l0aW9uICovCisJCWlmIChucmVhZCA8IGFtb3VudCkgeworCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfVU5SRUNPVkVSRURfUkVBRF9FUlJPUjsKKwkJCWN1cmx1bi0+c2Vuc2VfZGF0YV9pbmZvID0gZmlsZV9vZmZzZXQgPj4gOTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGFtb3VudF9sZWZ0ID09IDApCisJCQlicmVhazsJCS8vIE5vIG1vcmUgbGVmdCB0byByZWFkCisKKwkJLyogU2VuZCB0aGlzIGJ1ZmZlciBhbmQgZ28gcmVhZCBzb21lIG1vcmUgKi8KKwkJYmgtPmlucmVxLT56ZXJvID0gMDsKKwkJc3RhcnRfdHJhbnNmZXIoZnNnLCBmc2ctPmJ1bGtfaW4sIGJoLT5pbnJlcSwKKwkJCQkmYmgtPmlucmVxX2J1c3ksICZiaC0+c3RhdGUpOworCQlmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKKwl9CisKKwlyZXR1cm4gLUVJTzsJCS8vIE5vIGRlZmF1bHQgcmVwbHkKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGRvX3dyaXRlKHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJc3RydWN0IGx1bgkJKmN1cmx1biA9IGZzZy0+Y3VybHVuOworCXUzMgkJCWxiYTsKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmg7CisJaW50CQkJZ2V0X3NvbWVfbW9yZTsKKwl1MzIJCQlhbW91bnRfbGVmdF90b19yZXEsIGFtb3VudF9sZWZ0X3RvX3dyaXRlOworCWxvZmZfdAkJCXVzYl9vZmZzZXQsIGZpbGVfb2Zmc2V0LCBmaWxlX29mZnNldF90bXA7CisJdW5zaWduZWQgaW50CQlhbW91bnQ7CisJdW5zaWduZWQgaW50CQlwYXJ0aWFsX3BhZ2U7CisJc3NpemVfdAkJCW53cml0dGVuOworCWludAkJCXJjOworCisJaWYgKGN1cmx1bi0+cm8pIHsKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfV1JJVEVfUFJPVEVDVEVEOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJY3VybHVuLT5maWxwLT5mX2ZsYWdzICY9IH5PX1NZTkM7CS8vIERlZmF1bHQgaXMgbm90IHRvIHdhaXQKKworCS8qIEdldCB0aGUgc3RhcnRpbmcgTG9naWNhbCBCbG9jayBBZGRyZXNzIGFuZCBjaGVjayB0aGF0IGl0J3MKKwkgKiBub3QgdG9vIGJpZyAqLworCWlmIChmc2ctPmNtbmRbMF0gPT0gU0NfV1JJVEVfNikKKwkJbGJhID0gKGZzZy0+Y21uZFsxXSA8PCAxNikgfCBnZXRfYmUxNigmZnNnLT5jbW5kWzJdKTsKKwllbHNlIHsKKwkJbGJhID0gZ2V0X2JlMzIoJmZzZy0+Y21uZFsyXSk7CisKKwkJLyogV2UgYWxsb3cgRFBPIChEaXNhYmxlIFBhZ2UgT3V0ID0gZG9uJ3Qgc2F2ZSBkYXRhIGluIHRoZQorCQkgKiBjYWNoZSkgYW5kIEZVQSAoRm9yY2UgVW5pdCBBY2Nlc3MgPSB3cml0ZSBkaXJlY3RseSB0byB0aGUKKwkJICogbWVkaXVtKS4gIFdlIGRvbid0IGltcGxlbWVudCBEUE87IHdlIGltcGxlbWVudCBGVUEgYnkKKwkJICogcGVyZm9ybWluZyBzeW5jaHJvbm91cyBvdXRwdXQuICovCisJCWlmICgoZnNnLT5jbW5kWzFdICYgfjB4MTgpICE9IDApIHsKKwkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfRklFTERfSU5fQ0RCOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKGZzZy0+Y21uZFsxXSAmIDB4MDgpCS8vIEZVQQorCQkJY3VybHVuLT5maWxwLT5mX2ZsYWdzIHw9IE9fU1lOQzsKKwl9CisJaWYgKGxiYSA+PSBjdXJsdW4tPm51bV9zZWN0b3JzKSB7CisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0xPR0lDQUxfQkxPQ0tfQUREUkVTU19PVVRfT0ZfUkFOR0U7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENhcnJ5IG91dCB0aGUgZmlsZSB3cml0ZXMgKi8KKwlnZXRfc29tZV9tb3JlID0gMTsKKwlmaWxlX29mZnNldCA9IHVzYl9vZmZzZXQgPSAoKGxvZmZfdCkgbGJhKSA8PCA5OworCWFtb3VudF9sZWZ0X3RvX3JlcSA9IGFtb3VudF9sZWZ0X3RvX3dyaXRlID0gZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kOworCisJd2hpbGUgKGFtb3VudF9sZWZ0X3RvX3dyaXRlID4gMCkgeworCisJCS8qIFF1ZXVlIGEgcmVxdWVzdCBmb3IgbW9yZSBkYXRhIGZyb20gdGhlIGhvc3QgKi8KKwkJYmggPSBmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGw7CisJCWlmIChiaC0+c3RhdGUgPT0gQlVGX1NUQVRFX0VNUFRZICYmIGdldF9zb21lX21vcmUpIHsKKworCQkJLyogRmlndXJlIG91dCBob3cgbXVjaCB3ZSB3YW50IHRvIGdldDoKKwkJCSAqIFRyeSB0byBnZXQgdGhlIHJlbWFpbmluZyBhbW91bnQuCisJCQkgKiBCdXQgZG9uJ3QgZ2V0IG1vcmUgdGhhbiB0aGUgYnVmZmVyIHNpemUuCisJCQkgKiBBbmQgZG9uJ3QgdHJ5IHRvIGdvIHBhc3QgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKwkJCSAqIElmIHdlJ3JlIG5vdCBhdCBhIHBhZ2UgYm91bmRhcnksCisJCQkgKglkb24ndCBnbyBwYXN0IHRoZSBuZXh0IHBhZ2UuCisJCQkgKiBJZiB0aGlzIG1lYW5zIGdldHRpbmcgMCwgdGhlbiB3ZSB3ZXJlIGFza2VkCisJCQkgKgl0byB3cml0ZSBwYXN0IHRoZSBlbmQgb2YgZmlsZS4KKwkJCSAqIEZpbmFsbHksIHJvdW5kIGRvd24gdG8gYSBibG9jayBib3VuZGFyeS4gKi8KKwkJCWFtb3VudCA9IG1pbihhbW91bnRfbGVmdF90b19yZXEsIG1vZF9kYXRhLmJ1Zmxlbik7CisJCQlhbW91bnQgPSBtaW4oKGxvZmZfdCkgYW1vdW50LCBjdXJsdW4tPmZpbGVfbGVuZ3RoIC0KKwkJCQkJdXNiX29mZnNldCk7CisJCQlwYXJ0aWFsX3BhZ2UgPSB1c2Jfb2Zmc2V0ICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOworCQkJaWYgKHBhcnRpYWxfcGFnZSA+IDApCisJCQkJYW1vdW50ID0gbWluKGFtb3VudCwKKwkodW5zaWduZWQgaW50KSBQQUdFX0NBQ0hFX1NJWkUgLSBwYXJ0aWFsX3BhZ2UpOworCisJCQlpZiAoYW1vdW50ID09IDApIHsKKwkJCQlnZXRfc29tZV9tb3JlID0gMDsKKwkJCQljdXJsdW4tPnNlbnNlX2RhdGEgPQorCQkJCQlTU19MT0dJQ0FMX0JMT0NLX0FERFJFU1NfT1VUX09GX1JBTkdFOworCQkJCWN1cmx1bi0+c2Vuc2VfZGF0YV9pbmZvID0gdXNiX29mZnNldCA+PiA5OworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYW1vdW50IC09IChhbW91bnQgJiA1MTEpOworCQkJaWYgKGFtb3VudCA9PSAwKSB7CisKKwkJCQkvKiBXaHkgd2VyZSB3ZSB3ZXJlIGFza2VkIHRvIHRyYW5zZmVyIGEKKwkJCQkgKiBwYXJ0aWFsIGJsb2NrPyAqLworCQkJCWdldF9zb21lX21vcmUgPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBHZXQgdGhlIG5leHQgYnVmZmVyICovCisJCQl1c2Jfb2Zmc2V0ICs9IGFtb3VudDsKKwkJCWZzZy0+dXNiX2Ftb3VudF9sZWZ0IC09IGFtb3VudDsKKwkJCWFtb3VudF9sZWZ0X3RvX3JlcSAtPSBhbW91bnQ7CisJCQlpZiAoYW1vdW50X2xlZnRfdG9fcmVxID09IDApCisJCQkJZ2V0X3NvbWVfbW9yZSA9IDA7CisKKwkJCS8qIGFtb3VudCBpcyBhbHdheXMgZGl2aXNpYmxlIGJ5IDUxMiwgaGVuY2UgYnkKKwkJCSAqIHRoZSBidWxrLW91dCBtYXhwYWNrZXQgc2l6ZSAqLworCQkJYmgtPm91dHJlcS0+bGVuZ3RoID0gYmgtPmJ1bGtfb3V0X2ludGVuZGVkX2xlbmd0aCA9CisJCQkJCWFtb3VudDsKKwkJCXN0YXJ0X3RyYW5zZmVyKGZzZywgZnNnLT5idWxrX291dCwgYmgtPm91dHJlcSwKKwkJCQkJJmJoLT5vdXRyZXFfYnVzeSwgJmJoLT5zdGF0ZSk7CisJCQlmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogV3JpdGUgdGhlIHJlY2VpdmVkIGRhdGEgdG8gdGhlIGJhY2tpbmcgZmlsZSAqLworCQliaCA9IGZzZy0+bmV4dF9idWZmaGRfdG9fZHJhaW47CisJCWlmIChiaC0+c3RhdGUgPT0gQlVGX1NUQVRFX0VNUFRZICYmICFnZXRfc29tZV9tb3JlKQorCQkJYnJlYWs7CQkJLy8gV2Ugc3RvcHBlZCBlYXJseQorCQlpZiAoYmgtPnN0YXRlID09IEJVRl9TVEFURV9GVUxMKSB7CisJCQlmc2ctPm5leHRfYnVmZmhkX3RvX2RyYWluID0gYmgtPm5leHQ7CisJCQliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRU1QVFk7CisKKwkJCS8qIERpZCBzb21ldGhpbmcgZ28gd3Jvbmcgd2l0aCB0aGUgdHJhbnNmZXI/ICovCisJCQlpZiAoYmgtPm91dHJlcS0+c3RhdHVzICE9IDApIHsKKwkJCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19DT01NVU5JQ0FUSU9OX0ZBSUxVUkU7CisJCQkJY3VybHVuLT5zZW5zZV9kYXRhX2luZm8gPSBmaWxlX29mZnNldCA+PiA5OworCQkJCWJyZWFrOworCQkJfQorCisJCQlhbW91bnQgPSBiaC0+b3V0cmVxLT5hY3R1YWw7CisJCQlpZiAoY3VybHVuLT5maWxlX2xlbmd0aCAtIGZpbGVfb2Zmc2V0IDwgYW1vdW50KSB7CisJCQkJTEVSUk9SKGN1cmx1biwKKwkid3JpdGUgJXUgQCAlbGx1IGJleW9uZCBlbmQgJWxsdVxuIiwKKwlhbW91bnQsICh1bnNpZ25lZCBsb25nIGxvbmcpIGZpbGVfb2Zmc2V0LAorCSh1bnNpZ25lZCBsb25nIGxvbmcpIGN1cmx1bi0+ZmlsZV9sZW5ndGgpOworCQkJCWFtb3VudCA9IGN1cmx1bi0+ZmlsZV9sZW5ndGggLSBmaWxlX29mZnNldDsKKwkJCX0KKworCQkJLyogUGVyZm9ybSB0aGUgd3JpdGUgKi8KKwkJCWZpbGVfb2Zmc2V0X3RtcCA9IGZpbGVfb2Zmc2V0OworCQkJbndyaXR0ZW4gPSB2ZnNfd3JpdGUoY3VybHVuLT5maWxwLAorCQkJCQkoY2hhciBfX3VzZXIgKikgYmgtPmJ1ZiwKKwkJCQkJYW1vdW50LCAmZmlsZV9vZmZzZXRfdG1wKTsKKwkJCVZMREJHKGN1cmx1biwgImZpbGUgd3JpdGUgJXUgQCAlbGx1IC0+ICVkXG4iLCBhbW91bnQsCisJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGZpbGVfb2Zmc2V0LAorCQkJCQkoaW50KSBud3JpdHRlbik7CisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQkJcmV0dXJuIC1FSU5UUjsJCS8vIEludGVycnVwdGVkIQorCisJCQlpZiAobndyaXR0ZW4gPCAwKSB7CisJCQkJTERCRyhjdXJsdW4sICJlcnJvciBpbiBmaWxlIHdyaXRlOiAlZFxuIiwKKwkJCQkJCShpbnQpIG53cml0dGVuKTsKKwkJCQlud3JpdHRlbiA9IDA7CisJCQl9IGVsc2UgaWYgKG53cml0dGVuIDwgYW1vdW50KSB7CisJCQkJTERCRyhjdXJsdW4sICJwYXJ0aWFsIGZpbGUgd3JpdGU6ICVkLyV1XG4iLAorCQkJCQkJKGludCkgbndyaXR0ZW4sIGFtb3VudCk7CisJCQkJbndyaXR0ZW4gLT0gKG53cml0dGVuICYgNTExKTsKKwkJCQkJCS8vIFJvdW5kIGRvd24gdG8gYSBibG9jaworCQkJfQorCQkJZmlsZV9vZmZzZXQgKz0gbndyaXR0ZW47CisJCQlhbW91bnRfbGVmdF90b193cml0ZSAtPSBud3JpdHRlbjsKKwkJCWZzZy0+cmVzaWR1ZSAtPSBud3JpdHRlbjsKKworCQkJLyogSWYgYW4gZXJyb3Igb2NjdXJyZWQsIHJlcG9ydCBpdCBhbmQgaXRzIHBvc2l0aW9uICovCisJCQlpZiAobndyaXR0ZW4gPCBhbW91bnQpIHsKKwkJCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19XUklURV9FUlJPUjsKKwkJCQljdXJsdW4tPnNlbnNlX2RhdGFfaW5mbyA9IGZpbGVfb2Zmc2V0ID4+IDk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIERpZCB0aGUgaG9zdCBkZWNpZGUgdG8gc3RvcCBlYXJseT8gKi8KKwkJCWlmIChiaC0+b3V0cmVxLT5hY3R1YWwgIT0gYmgtPm91dHJlcS0+bGVuZ3RoKSB7CisJCQkJZnNnLT5zaG9ydF9wYWNrZXRfcmVjZWl2ZWQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQkvKiBXYWl0IGZvciBzb21ldGhpbmcgdG8gaGFwcGVuICovCisJCWlmICgocmMgPSBzbGVlcF90aHJlYWQoZnNnKSkgIT0gMCkKKwkJCXJldHVybiByYzsKKwl9CisKKwlyZXR1cm4gLUVJTzsJCS8vIE5vIGRlZmF1bHQgcmVwbHkKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBTeW5jIHRoZSBmaWxlIGRhdGEsIGRvbid0IGJvdGhlciB3aXRoIHRoZSBtZXRhZGF0YS4KKyAqIFRoaXMgY29kZSB3YXMgY29waWVkIGZyb20gZnMvYnVmZmVyLmM6c3lzX2ZkYXRhc3luYygpLiAqLworc3RhdGljIGludCBmc3luY19zdWIoc3RydWN0IGx1biAqY3VybHVuKQoreworCXN0cnVjdCBmaWxlCSpmaWxwID0gY3VybHVuLT5maWxwOworCXN0cnVjdCBpbm9kZQkqaW5vZGU7CisJaW50CQlyYywgZXJyOworCisJaWYgKGN1cmx1bi0+cm8gfHwgIWZpbHApCisJCXJldHVybiAwOworCWlmICghZmlscC0+Zl9vcC0+ZnN5bmMpCisJCXJldHVybiAtRUlOVkFMOworCisJaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlkb3duKCZpbm9kZS0+aV9zZW0pOworCWN1cnJlbnQtPmZsYWdzIHw9IFBGX1NZTkNXUklURTsKKwlyYyA9IGZpbGVtYXBfZmRhdGF3cml0ZShpbm9kZS0+aV9tYXBwaW5nKTsKKwllcnIgPSBmaWxwLT5mX29wLT5mc3luYyhmaWxwLCBmaWxwLT5mX2RlbnRyeSwgMSk7CisJaWYgKCFyYykKKwkJcmMgPSBlcnI7CisJZXJyID0gZmlsZW1hcF9mZGF0YXdhaXQoaW5vZGUtPmlfbWFwcGluZyk7CisJaWYgKCFyYykKKwkJcmMgPSBlcnI7CisJY3VycmVudC0+ZmxhZ3MgJj0gflBGX1NZTkNXUklURTsKKwl1cCgmaW5vZGUtPmlfc2VtKTsKKwlWTERCRyhjdXJsdW4sICJmZGF0YXN5bmMgLT4gJWRcbiIsIHJjKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGZzeW5jX2FsbChzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCWludAlpOworCisJZm9yIChpID0gMDsgaSA8IGZzZy0+bmx1bnM7ICsraSkKKwkJZnN5bmNfc3ViKCZmc2ctPmx1bnNbaV0pOworfQorCitzdGF0aWMgaW50IGRvX3N5bmNocm9uaXplX2NhY2hlKHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJc3RydWN0IGx1bgkqY3VybHVuID0gZnNnLT5jdXJsdW47CisJaW50CQlyYzsKKworCS8qIFdlIGlnbm9yZSB0aGUgcmVxdWVzdGVkIExCQSBhbmQgd3JpdGUgb3V0IGFsbCBmaWxlJ3MKKwkgKiBkaXJ0eSBkYXRhIGJ1ZmZlcnMuICovCisJcmMgPSBmc3luY19zdWIoY3VybHVuKTsKKwlpZiAocmMpCisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX1dSSVRFX0VSUk9SOworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIGludmFsaWRhdGVfc3ViKHN0cnVjdCBsdW4gKmN1cmx1bikKK3sKKwlzdHJ1Y3QgZmlsZQkqZmlscCA9IGN1cmx1bi0+ZmlscDsKKwlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CisJdW5zaWduZWQgbG9uZwlyYzsKKworCXJjID0gaW52YWxpZGF0ZV9pbm9kZV9wYWdlcyhpbm9kZS0+aV9tYXBwaW5nKTsKKwlWTERCRyhjdXJsdW4sICJpbnZhbGlkYXRlX2lub2RlX3BhZ2VzIC0+ICVsZFxuIiwgcmMpOworfQorCitzdGF0aWMgaW50IGRvX3ZlcmlmeShzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCXN0cnVjdCBsdW4JCSpjdXJsdW4gPSBmc2ctPmN1cmx1bjsKKwl1MzIJCQlsYmE7CisJdTMyCQkJdmVyaWZpY2F0aW9uX2xlbmd0aDsKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSBmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGw7CisJbG9mZl90CQkJZmlsZV9vZmZzZXQsIGZpbGVfb2Zmc2V0X3RtcDsKKwl1MzIJCQlhbW91bnRfbGVmdDsKKwl1bnNpZ25lZCBpbnQJCWFtb3VudDsKKwlzc2l6ZV90CQkJbnJlYWQ7CisKKwkvKiBHZXQgdGhlIHN0YXJ0aW5nIExvZ2ljYWwgQmxvY2sgQWRkcmVzcyBhbmQgY2hlY2sgdGhhdCBpdCdzCisJICogbm90IHRvbyBiaWcgKi8KKwlsYmEgPSBnZXRfYmUzMigmZnNnLT5jbW5kWzJdKTsKKwlpZiAobGJhID49IGN1cmx1bi0+bnVtX3NlY3RvcnMpIHsKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfTE9HSUNBTF9CTE9DS19BRERSRVNTX09VVF9PRl9SQU5HRTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogV2UgYWxsb3cgRFBPIChEaXNhYmxlIFBhZ2UgT3V0ID0gZG9uJ3Qgc2F2ZSBkYXRhIGluIHRoZQorCSAqIGNhY2hlKSBidXQgd2UgZG9uJ3QgaW1wbGVtZW50IGl0LiAqLworCWlmICgoZnNnLT5jbW5kWzFdICYgfjB4MTApICE9IDApIHsKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZlcmlmaWNhdGlvbl9sZW5ndGggPSBnZXRfYmUxNigmZnNnLT5jbW5kWzddKTsKKwlpZiAodW5saWtlbHkodmVyaWZpY2F0aW9uX2xlbmd0aCA9PSAwKSkKKwkJcmV0dXJuIC1FSU87CQkvLyBObyBkZWZhdWx0IHJlcGx5CisKKwkvKiBQcmVwYXJlIHRvIGNhcnJ5IG91dCB0aGUgZmlsZSB2ZXJpZnkgKi8KKwlhbW91bnRfbGVmdCA9IHZlcmlmaWNhdGlvbl9sZW5ndGggPDwgOTsKKwlmaWxlX29mZnNldCA9ICgobG9mZl90KSBsYmEpIDw8IDk7CisKKwkvKiBXcml0ZSBvdXQgYWxsIHRoZSBkaXJ0eSBidWZmZXJzIGJlZm9yZSBpbnZhbGlkYXRpbmcgdGhlbSAqLworCWZzeW5jX3N1YihjdXJsdW4pOworCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJcmV0dXJuIC1FSU5UUjsKKworCWludmFsaWRhdGVfc3ViKGN1cmx1bik7CisJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQlyZXR1cm4gLUVJTlRSOworCisJLyogSnVzdCB0cnkgdG8gcmVhZCB0aGUgcmVxdWVzdGVkIGJsb2NrcyAqLworCXdoaWxlIChhbW91bnRfbGVmdCA+IDApIHsKKworCQkvKiBGaWd1cmUgb3V0IGhvdyBtdWNoIHdlIG5lZWQgdG8gcmVhZDoKKwkJICogVHJ5IHRvIHJlYWQgdGhlIHJlbWFpbmluZyBhbW91bnQsIGJ1dCBub3QgbW9yZSB0aGFuCisJCSAqIHRoZSBidWZmZXIgc2l6ZS4KKwkJICogQW5kIGRvbid0IHRyeSB0byByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKwkJICogSWYgdGhpcyBtZWFucyByZWFkaW5nIDAgdGhlbiB3ZSB3ZXJlIGFza2VkIHRvIHJlYWQKKwkJICogcGFzdCB0aGUgZW5kIG9mIGZpbGUuICovCisJCWFtb3VudCA9IG1pbigodW5zaWduZWQgaW50KSBhbW91bnRfbGVmdCwgbW9kX2RhdGEuYnVmbGVuKTsKKwkJYW1vdW50ID0gbWluKChsb2ZmX3QpIGFtb3VudCwKKwkJCQljdXJsdW4tPmZpbGVfbGVuZ3RoIC0gZmlsZV9vZmZzZXQpOworCQlpZiAoYW1vdW50ID09IDApIHsKKwkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9CisJCQkJCVNTX0xPR0lDQUxfQkxPQ0tfQUREUkVTU19PVVRfT0ZfUkFOR0U7CisJCQljdXJsdW4tPnNlbnNlX2RhdGFfaW5mbyA9IGZpbGVfb2Zmc2V0ID4+IDk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFBlcmZvcm0gdGhlIHJlYWQgKi8KKwkJZmlsZV9vZmZzZXRfdG1wID0gZmlsZV9vZmZzZXQ7CisJCW5yZWFkID0gdmZzX3JlYWQoY3VybHVuLT5maWxwLAorCQkJCShjaGFyIF9fdXNlciAqKSBiaC0+YnVmLAorCQkJCWFtb3VudCwgJmZpbGVfb2Zmc2V0X3RtcCk7CisJCVZMREJHKGN1cmx1biwgImZpbGUgcmVhZCAldSBAICVsbHUgLT4gJWRcbiIsIGFtb3VudCwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBmaWxlX29mZnNldCwKKwkJCQkoaW50KSBucmVhZCk7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCXJldHVybiAtRUlOVFI7CisKKwkJaWYgKG5yZWFkIDwgMCkgeworCQkJTERCRyhjdXJsdW4sICJlcnJvciBpbiBmaWxlIHZlcmlmeTogJWRcbiIsCisJCQkJCShpbnQpIG5yZWFkKTsKKwkJCW5yZWFkID0gMDsKKwkJfSBlbHNlIGlmIChucmVhZCA8IGFtb3VudCkgeworCQkJTERCRyhjdXJsdW4sICJwYXJ0aWFsIGZpbGUgdmVyaWZ5OiAlZC8ldVxuIiwKKwkJCQkJKGludCkgbnJlYWQsIGFtb3VudCk7CisJCQlucmVhZCAtPSAobnJlYWQgJiA1MTEpOwkvLyBSb3VuZCBkb3duIHRvIGEgc2VjdG9yCisJCX0KKwkJaWYgKG5yZWFkID09IDApIHsKKwkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX1VOUkVDT1ZFUkVEX1JFQURfRVJST1I7CisJCQljdXJsdW4tPnNlbnNlX2RhdGFfaW5mbyA9IGZpbGVfb2Zmc2V0ID4+IDk7CisJCQlicmVhazsKKwkJfQorCQlmaWxlX29mZnNldCArPSBucmVhZDsKKwkJYW1vdW50X2xlZnQgLT0gbnJlYWQ7CisJfQorCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZG9faW5xdWlyeShzdHJ1Y3QgZnNnX2RldiAqZnNnLCBzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmgpCit7CisJdTgJKmJ1ZiA9ICh1OCAqKSBiaC0+YnVmOworCisJc3RhdGljIGNoYXIgdmVuZG9yX2lkW10gPSAiTGludXggICAiOworCXN0YXRpYyBjaGFyIHByb2R1Y3RfaWRbXSA9ICJGaWxlLVN0b3IgR2FkZ2V0IjsKKworCWlmICghZnNnLT5jdXJsdW4pIHsJCS8vIFVuc3VwcG9ydGVkIExVTnMgYXJlIG9rYXkKKwkJZnNnLT5iYWRfbHVuX29rYXkgPSAxOworCQltZW1zZXQoYnVmLCAwLCAzNik7CisJCWJ1ZlswXSA9IDB4N2Y7CQkvLyBVbnN1cHBvcnRlZCwgbm8gZGV2aWNlLXR5cGUKKwkJcmV0dXJuIDM2OworCX0KKworCW1lbXNldChidWYsIDAsIDgpOwkvLyBOb24tcmVtb3ZhYmxlLCBkaXJlY3QtYWNjZXNzIGRldmljZQorCWlmIChtb2RfZGF0YS5yZW1vdmFibGUpCisJCWJ1ZlsxXSA9IDB4ODA7CisJYnVmWzJdID0gMjsJCS8vIEFOU0kgU0NTSSBsZXZlbCAyCisJYnVmWzNdID0gMjsJCS8vIFNDU0ktMiBJTlFVSVJZIGRhdGEgZm9ybWF0CisJYnVmWzRdID0gMzE7CQkvLyBBZGRpdGlvbmFsIGxlbmd0aAorCQkJCS8vIE5vIHNwZWNpYWwgb3B0aW9ucworCXNwcmludGYoYnVmICsgOCwgIiUtOHMlLTE2cyUwNHgiLCB2ZW5kb3JfaWQsIHByb2R1Y3RfaWQsCisJCQltb2RfZGF0YS5yZWxlYXNlKTsKKwlyZXR1cm4gMzY7Cit9CisKKworc3RhdGljIGludCBkb19yZXF1ZXN0X3NlbnNlKHN0cnVjdCBmc2dfZGV2ICpmc2csIHN0cnVjdCBmc2dfYnVmZmhkICpiaCkKK3sKKwlzdHJ1Y3QgbHVuCSpjdXJsdW4gPSBmc2ctPmN1cmx1bjsKKwl1OAkJKmJ1ZiA9ICh1OCAqKSBiaC0+YnVmOworCXUzMgkJc2QsIHNkaW5mbzsKKworCS8qCisJICogRnJvbSB0aGUgU0NTSS0yIHNwZWMuLCBzZWN0aW9uIDcuOSAoVW5pdCBhdHRlbnRpb24gY29uZGl0aW9uKToKKwkgKgorCSAqIElmIGEgUkVRVUVTVCBTRU5TRSBjb21tYW5kIGlzIHJlY2VpdmVkIGZyb20gYW4gaW5pdGlhdG9yCisJICogd2l0aCBhIHBlbmRpbmcgdW5pdCBhdHRlbnRpb24gY29uZGl0aW9uIChiZWZvcmUgdGhlIHRhcmdldAorCSAqIGdlbmVyYXRlcyB0aGUgY29udGluZ2VudCBhbGxlZ2lhbmNlIGNvbmRpdGlvbiksIHRoZW4gdGhlCisJICogdGFyZ2V0IHNoYWxsIGVpdGhlcjoKKwkgKiAgIGEpIHJlcG9ydCBhbnkgcGVuZGluZyBzZW5zZSBkYXRhIGFuZCBwcmVzZXJ2ZSB0aGUgdW5pdAorCSAqCWF0dGVudGlvbiBjb25kaXRpb24gb24gdGhlIGxvZ2ljYWwgdW5pdCwgb3IsCisJICogICBiKSByZXBvcnQgdGhlIHVuaXQgYXR0ZW50aW9uIGNvbmRpdGlvbiwgbWF5IGRpc2NhcmQgYW55CisJICoJcGVuZGluZyBzZW5zZSBkYXRhLCBhbmQgY2xlYXIgdGhlIHVuaXQgYXR0ZW50aW9uCisJICoJY29uZGl0aW9uIG9uIHRoZSBsb2dpY2FsIHVuaXQgZm9yIHRoYXQgaW5pdGlhdG9yLgorCSAqCisJICogRlNHIG5vcm1hbGx5IHVzZXMgb3B0aW9uIGEpOyBlbmFibGUgdGhpcyBjb2RlIHRvIHVzZSBvcHRpb24gYikuCisJICovCisjaWYgMAorCWlmIChjdXJsdW4gJiYgY3VybHVuLT51bml0X2F0dGVudGlvbl9kYXRhICE9IFNTX05PX1NFTlNFKSB7CisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IGN1cmx1bi0+dW5pdF9hdHRlbnRpb25fZGF0YTsKKwkJY3VybHVuLT51bml0X2F0dGVudGlvbl9kYXRhID0gU1NfTk9fU0VOU0U7CisJfQorI2VuZGlmCisKKwlpZiAoIWN1cmx1bikgewkJLy8gVW5zdXBwb3J0ZWQgTFVOcyBhcmUgb2theQorCQlmc2ctPmJhZF9sdW5fb2theSA9IDE7CisJCXNkID0gU1NfTE9HSUNBTF9VTklUX05PVF9TVVBQT1JURUQ7CisJCXNkaW5mbyA9IDA7CisJfSBlbHNlIHsKKwkJc2QgPSBjdXJsdW4tPnNlbnNlX2RhdGE7CisJCXNkaW5mbyA9IGN1cmx1bi0+c2Vuc2VfZGF0YV9pbmZvOworCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19OT19TRU5TRTsKKwkJY3VybHVuLT5zZW5zZV9kYXRhX2luZm8gPSAwOworCX0KKworCW1lbXNldChidWYsIDAsIDE4KTsKKwlidWZbMF0gPSAweDgwIHwgMHg3MDsJCQkvLyBWYWxpZCwgY3VycmVudCBlcnJvcgorCWJ1ZlsyXSA9IFNLKHNkKTsKKwlwdXRfYmUzMigmYnVmWzNdLCBzZGluZm8pOwkJLy8gU2Vuc2UgaW5mb3JtYXRpb24KKwlidWZbN10gPSAxOCAtIDg7CQkJLy8gQWRkaXRpb25hbCBzZW5zZSBsZW5ndGgKKwlidWZbMTJdID0gQVNDKHNkKTsKKwlidWZbMTNdID0gQVNDUShzZCk7CisJcmV0dXJuIDE4OworfQorCisKK3N0YXRpYyBpbnQgZG9fcmVhZF9jYXBhY2l0eShzdHJ1Y3QgZnNnX2RldiAqZnNnLCBzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmgpCit7CisJc3RydWN0IGx1bgkqY3VybHVuID0gZnNnLT5jdXJsdW47CisJdTMyCQlsYmEgPSBnZXRfYmUzMigmZnNnLT5jbW5kWzJdKTsKKwlpbnQJCXBtaSA9IGZzZy0+Y21uZFs4XTsKKwl1OAkJKmJ1ZiA9ICh1OCAqKSBiaC0+YnVmOworCisJLyogQ2hlY2sgdGhlIFBNSSBhbmQgTEJBIGZpZWxkcyAqLworCWlmIChwbWkgPiAxIHx8IChwbWkgPT0gMCAmJiBsYmEgIT0gMCkpIHsKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXB1dF9iZTMyKCZidWZbMF0sIGN1cmx1bi0+bnVtX3NlY3RvcnMgLSAxKTsJLy8gTWF4IGxvZ2ljYWwgYmxvY2sKKwlwdXRfYmUzMigmYnVmWzRdLCA1MTIpOwkJCQkvLyBCbG9jayBsZW5ndGgKKwlyZXR1cm4gODsKK30KKworCitzdGF0aWMgaW50IGRvX21vZGVfc2Vuc2Uoc3RydWN0IGZzZ19kZXYgKmZzZywgc3RydWN0IGZzZ19idWZmaGQgKmJoKQoreworCXN0cnVjdCBsdW4JKmN1cmx1biA9IGZzZy0+Y3VybHVuOworCWludAkJbXNjbW5kID0gZnNnLT5jbW5kWzBdOworCXU4CQkqYnVmID0gKHU4ICopIGJoLT5idWY7CisJdTgJCSpidWYwID0gYnVmOworCWludAkJcGMsIHBhZ2VfY29kZTsKKwlpbnQJCWNoYW5nZWFibGVfdmFsdWVzLCBhbGxfcGFnZXM7CisJaW50CQl2YWxpZF9wYWdlID0gMDsKKwlpbnQJCWxlbiwgbGltaXQ7CisKKwlpZiAoKGZzZy0+Y21uZFsxXSAmIH4weDA4KSAhPSAwKSB7CQkvLyBNYXNrIGF3YXkgREJECisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfRklFTERfSU5fQ0RCOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcGMgPSBmc2ctPmNtbmRbMl0gPj4gNjsKKwlwYWdlX2NvZGUgPSBmc2ctPmNtbmRbMl0gJiAweDNmOworCWlmIChwYyA9PSAzKSB7CisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX1NBVklOR19QQVJBTUVURVJTX05PVF9TVVBQT1JURUQ7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljaGFuZ2VhYmxlX3ZhbHVlcyA9IChwYyA9PSAxKTsKKwlhbGxfcGFnZXMgPSAocGFnZV9jb2RlID09IDB4M2YpOworCisJLyogV3JpdGUgdGhlIG1vZGUgcGFyYW1ldGVyIGhlYWRlci4gIEZpeGVkIHZhbHVlcyBhcmU6IGRlZmF1bHQKKwkgKiBtZWRpdW0gdHlwZSwgbm8gY2FjaGUgY29udHJvbCAoRFBPRlVBKSwgYW5kIG5vIGJsb2NrIGRlc2NyaXB0b3JzLgorCSAqIFRoZSBvbmx5IHZhcmlhYmxlIHZhbHVlIGlzIHRoZSBXcml0ZVByb3RlY3QgYml0LiAgV2Ugd2lsbCBmaWxsIGluCisJICogdGhlIG1vZGUgZGF0YSBsZW5ndGggbGF0ZXIuICovCisJbWVtc2V0KGJ1ZiwgMCwgOCk7CisJaWYgKG1zY21uZCA9PSBTQ19NT0RFX1NFTlNFXzYpIHsKKwkJYnVmWzJdID0gKGN1cmx1bi0+cm8gPyAweDgwIDogMHgwMCk7CQkvLyBXUCwgRFBPRlVBCisJCWJ1ZiArPSA0OworCQlsaW1pdCA9IDI1NTsKKwl9IGVsc2UgewkJCS8vIFNDX01PREVfU0VOU0VfMTAKKwkJYnVmWzNdID0gKGN1cmx1bi0+cm8gPyAweDgwIDogMHgwMCk7CQkvLyBXUCwgRFBPRlVBCisJCWJ1ZiArPSA4OworCQlsaW1pdCA9IDY1NTM1OwkJLy8gU2hvdWxkIHJlYWxseSBiZSBtb2RfZGF0YS5idWZsZW4KKwl9CisKKwkvKiBObyBibG9jayBkZXNjcmlwdG9ycyAqLworCisJLyogVGhlIG1vZGUgcGFnZXMsIGluIG51bWVyaWNhbCBvcmRlci4gIFRoZSBvbmx5IHBhZ2Ugd2Ugc3VwcG9ydAorCSAqIGlzIHRoZSBDYWNoaW5nIHBhZ2UuICovCisJaWYgKHBhZ2VfY29kZSA9PSAweDA4IHx8IGFsbF9wYWdlcykgeworCQl2YWxpZF9wYWdlID0gMTsKKwkJYnVmWzBdID0gMHgwODsJCS8vIFBhZ2UgY29kZQorCQlidWZbMV0gPSAxMDsJCS8vIFBhZ2UgbGVuZ3RoCisJCW1lbXNldChidWYrMiwgMCwgMTApOwkvLyBOb25lIG9mIHRoZSBmaWVsZHMgYXJlIGNoYW5nZWFibGUKKworCQlpZiAoIWNoYW5nZWFibGVfdmFsdWVzKSB7CisJCQlidWZbMl0gPSAweDA0OwkvLyBXcml0ZSBjYWNoZSBlbmFibGUsCisJCQkJCS8vIFJlYWQgY2FjaGUgbm90IGRpc2FibGVkCisJCQkJCS8vIE5vIGNhY2hlIHJldGVudGlvbiBwcmlvcml0aWVzCisJCQlwdXRfYmUxNigmYnVmWzRdLCAweGZmZmYpOyAgLy8gRG9uJ3QgZGlzYWJsZSBwcmVmZXRjaAorCQkJCQkvLyBNaW5pbXVtIHByZWZldGNoID0gMAorCQkJcHV0X2JlMTYoJmJ1Zls4XSwgMHhmZmZmKTsgIC8vIE1heGltdW0gcHJlZmV0Y2gKKwkJCXB1dF9iZTE2KCZidWZbMTBdLCAweGZmZmYpOyAvLyBNYXhpbXVtIHByZWZldGNoIGNlaWxpbmcKKwkJfQorCQlidWYgKz0gMTI7CisJfQorCisJLyogQ2hlY2sgdGhhdCBhIHZhbGlkIHBhZ2Ugd2FzIHJlcXVlc3RlZCBhbmQgdGhlIG1vZGUgZGF0YSBsZW5ndGgKKwkgKiBpc24ndCB0b28gbG9uZy4gKi8KKwlsZW4gPSBidWYgLSBidWYwOworCWlmICghdmFsaWRfcGFnZSB8fCBsZW4gPiBsaW1pdCkgeworCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0ZJRUxEX0lOX0NEQjsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogIFN0b3JlIHRoZSBtb2RlIGRhdGEgbGVuZ3RoICovCisJaWYgKG1zY21uZCA9PSBTQ19NT0RFX1NFTlNFXzYpCisJCWJ1ZjBbMF0gPSBsZW4gLSAxOworCWVsc2UKKwkJcHV0X2JlMTYoYnVmMCwgbGVuIC0gMik7CisJcmV0dXJuIGxlbjsKK30KKworCitzdGF0aWMgaW50IGRvX3N0YXJ0X3N0b3Aoc3RydWN0IGZzZ19kZXYgKmZzZykKK3sKKwlzdHJ1Y3QgbHVuCSpjdXJsdW4gPSBmc2ctPmN1cmx1bjsKKwlpbnQJCWxvZWosIHN0YXJ0OworCisJaWYgKCFtb2RfZGF0YS5yZW1vdmFibGUpIHsKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9DT01NQU5EOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvLyBpbnQgaW1tZWQgPSBmc2ctPmNtbmRbMV0gJiAweDAxOworCWxvZWogPSBmc2ctPmNtbmRbNF0gJiAweDAyOworCXN0YXJ0ID0gZnNnLT5jbW5kWzRdICYgMHgwMTsKKworI2lmZGVmIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QKKwlpZiAoKGZzZy0+Y21uZFsxXSAmIH4weDAxKSAhPSAwIHx8CQkvLyBNYXNrIGF3YXkgSW1tZWQKKwkJCShmc2ctPmNtbmRbNF0gJiB+MHgwMykgIT0gMCkgewkvLyBNYXNrIExvRWosIFN0YXJ0CisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfRklFTERfSU5fQ0RCOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIXN0YXJ0KSB7CisKKwkJLyogQXJlIHdlIGFsbG93ZWQgdG8gdW5sb2FkIHRoZSBtZWRpYT8gKi8KKwkJaWYgKGN1cmx1bi0+cHJldmVudF9tZWRpdW1fcmVtb3ZhbCkgeworCQkJTERCRyhjdXJsdW4sICJ1bmxvYWQgYXR0ZW1wdCBwcmV2ZW50ZWRcbiIpOworCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfTUVESVVNX1JFTU9WQUxfUFJFVkVOVEVEOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKGxvZWopIHsJCS8vIFNpbXVsYXRlIGFuIHVubG9hZC9lamVjdAorCQkJdXBfcmVhZCgmZnNnLT5maWxlc2VtKTsKKwkJCWRvd25fd3JpdGUoJmZzZy0+ZmlsZXNlbSk7CisJCQljbG9zZV9iYWNraW5nX2ZpbGUoY3VybHVuKTsKKwkJCXVwX3dyaXRlKCZmc2ctPmZpbGVzZW0pOworCQkJZG93bl9yZWFkKCZmc2ctPmZpbGVzZW0pOworCQl9CisJfSBlbHNlIHsKKworCQkvKiBPdXIgZW11bGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBtb3VudGluZzsgdGhlIG1lZGl1bSBpcworCQkgKiBhdmFpbGFibGUgZm9yIHVzZSBhcyBzb29uIGFzIGl0IGlzIGxvYWRlZC4gKi8KKwkJaWYgKCFiYWNraW5nX2ZpbGVfaXNfb3BlbihjdXJsdW4pKSB7CisJCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19NRURJVU1fTk9UX1BSRVNFTlQ7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKyNlbmRpZgorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgZG9fcHJldmVudF9hbGxvdyhzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCXN0cnVjdCBsdW4JKmN1cmx1biA9IGZzZy0+Y3VybHVuOworCWludAkJcHJldmVudDsKKworCWlmICghbW9kX2RhdGEucmVtb3ZhYmxlKSB7CisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfQ09NTUFORDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJldmVudCA9IGZzZy0+Y21uZFs0XSAmIDB4MDE7CisJaWYgKChmc2ctPmNtbmRbNF0gJiB+MHgwMSkgIT0gMCkgewkJLy8gTWFzayBhd2F5IFByZXZlbnQKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjdXJsdW4tPnByZXZlbnRfbWVkaXVtX3JlbW92YWwgJiYgIXByZXZlbnQpCisJCWZzeW5jX3N1YihjdXJsdW4pOworCWN1cmx1bi0+cHJldmVudF9tZWRpdW1fcmVtb3ZhbCA9IHByZXZlbnQ7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBkb19yZWFkX2Zvcm1hdF9jYXBhY2l0aWVzKHN0cnVjdCBmc2dfZGV2ICpmc2csCisJCQlzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmgpCit7CisJc3RydWN0IGx1bgkqY3VybHVuID0gZnNnLT5jdXJsdW47CisJdTgJCSpidWYgPSAodTggKikgYmgtPmJ1ZjsKKworCWJ1ZlswXSA9IGJ1ZlsxXSA9IGJ1ZlsyXSA9IDA7CisJYnVmWzNdID0gODsJCS8vIE9ubHkgdGhlIEN1cnJlbnQvTWF4aW11bSBDYXBhY2l0eSBEZXNjcmlwdG9yCisJYnVmICs9IDQ7CisKKwlwdXRfYmUzMigmYnVmWzBdLCBjdXJsdW4tPm51bV9zZWN0b3JzKTsJCS8vIE51bWJlciBvZiBibG9ja3MKKwlwdXRfYmUzMigmYnVmWzRdLCA1MTIpOwkJCQkvLyBCbG9jayBsZW5ndGgKKwlidWZbNF0gPSAweDAyOwkJCQkJLy8gQ3VycmVudCBjYXBhY2l0eQorCXJldHVybiAxMjsKK30KKworCitzdGF0aWMgaW50IGRvX21vZGVfc2VsZWN0KHN0cnVjdCBmc2dfZGV2ICpmc2csIHN0cnVjdCBmc2dfYnVmZmhkICpiaCkKK3sKKwlzdHJ1Y3QgbHVuCSpjdXJsdW4gPSBmc2ctPmN1cmx1bjsKKworCS8qIFdlIGRvbid0IHN1cHBvcnQgTU9ERSBTRUxFQ1QgKi8KKwljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0NPTU1BTkQ7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBoYWx0X2J1bGtfaW5fZW5kcG9pbnQoc3RydWN0IGZzZ19kZXYgKmZzZykKK3sKKwlpbnQJcmM7CisKKwlyYyA9IGZzZ19zZXRfaGFsdChmc2csIGZzZy0+YnVsa19pbik7CisJaWYgKHJjID09IC1FQUdBSU4pCisJCVZEQkcoZnNnLCAiZGVsYXllZCBidWxrLWluIGVuZHBvaW50IGhhbHRcbiIpOworCXdoaWxlIChyYyAhPSAwKSB7CisJCWlmIChyYyAhPSAtRUFHQUlOKSB7CisJCQlXQVJOKGZzZywgInVzYl9lcF9zZXRfaGFsdCAtPiAlZFxuIiwgcmMpOworCQkJcmMgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBXYWl0IGZvciBhIHNob3J0IHRpbWUgYW5kIHRoZW4gdHJ5IGFnYWluICovCisJCWlmIChtc2xlZXBfaW50ZXJydXB0aWJsZSgxMDApICE9IDApCisJCQlyZXR1cm4gLUVJTlRSOworCQlyYyA9IHVzYl9lcF9zZXRfaGFsdChmc2ctPmJ1bGtfaW4pOworCX0KKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgcGFkX3dpdGhfemVyb3Moc3RydWN0IGZzZ19kZXYgKmZzZykKK3sKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSBmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGw7CisJdTMyCQkJbmtlZXAgPSBiaC0+aW5yZXEtPmxlbmd0aDsKKwl1MzIJCQluc2VuZDsKKwlpbnQJCQlyYzsKKworCWJoLT5zdGF0ZSA9IEJVRl9TVEFURV9FTVBUWTsJCS8vIEZvciB0aGUgZmlyc3QgaXRlcmF0aW9uCisJZnNnLT51c2JfYW1vdW50X2xlZnQgPSBua2VlcCArIGZzZy0+cmVzaWR1ZTsKKwl3aGlsZSAoZnNnLT51c2JfYW1vdW50X2xlZnQgPiAwKSB7CisKKwkJLyogV2FpdCBmb3IgdGhlIG5leHQgYnVmZmVyIHRvIGJlIGZyZWUgKi8KKwkJd2hpbGUgKGJoLT5zdGF0ZSAhPSBCVUZfU1RBVEVfRU1QVFkpIHsKKwkJCWlmICgocmMgPSBzbGVlcF90aHJlYWQoZnNnKSkgIT0gMCkKKwkJCQlyZXR1cm4gcmM7CisJCX0KKworCQluc2VuZCA9IG1pbihmc2ctPnVzYl9hbW91bnRfbGVmdCwgKHUzMikgbW9kX2RhdGEuYnVmbGVuKTsKKwkJbWVtc2V0KGJoLT5idWYgKyBua2VlcCwgMCwgbnNlbmQgLSBua2VlcCk7CisJCWJoLT5pbnJlcS0+bGVuZ3RoID0gbnNlbmQ7CisJCWJoLT5pbnJlcS0+emVybyA9IDA7CisJCXN0YXJ0X3RyYW5zZmVyKGZzZywgZnNnLT5idWxrX2luLCBiaC0+aW5yZXEsCisJCQkJJmJoLT5pbnJlcV9idXN5LCAmYmgtPnN0YXRlKTsKKwkJYmggPSBmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKKwkJZnNnLT51c2JfYW1vdW50X2xlZnQgLT0gbnNlbmQ7CisJCW5rZWVwID0gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGhyb3dfYXdheV9kYXRhKHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJc3RydWN0IGZzZ19idWZmaGQJKmJoOworCXUzMgkJCWFtb3VudDsKKwlpbnQJCQlyYzsKKworCXdoaWxlICgoYmggPSBmc2ctPm5leHRfYnVmZmhkX3RvX2RyYWluKS0+c3RhdGUgIT0gQlVGX1NUQVRFX0VNUFRZIHx8CisJCQlmc2ctPnVzYl9hbW91bnRfbGVmdCA+IDApIHsKKworCQkvKiBUaHJvdyBhd2F5IHRoZSBkYXRhIGluIGEgZmlsbGVkIGJ1ZmZlciAqLworCQlpZiAoYmgtPnN0YXRlID09IEJVRl9TVEFURV9GVUxMKSB7CisJCQliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRU1QVFk7CisJCQlmc2ctPm5leHRfYnVmZmhkX3RvX2RyYWluID0gYmgtPm5leHQ7CisKKwkJCS8qIEEgc2hvcnQgcGFja2V0IG9yIGFuIGVycm9yIGVuZHMgZXZlcnl0aGluZyAqLworCQkJaWYgKGJoLT5vdXRyZXEtPmFjdHVhbCAhPSBiaC0+b3V0cmVxLT5sZW5ndGggfHwKKwkJCQkJYmgtPm91dHJlcS0+c3RhdHVzICE9IDApIHsKKwkJCQlyYWlzZV9leGNlcHRpb24oZnNnLCBGU0dfU1RBVEVfQUJPUlRfQlVMS19PVVQpOworCQkJCXJldHVybiAtRUlOVFI7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFRyeSB0byBzdWJtaXQgYW5vdGhlciByZXF1ZXN0IGlmIHdlIG5lZWQgb25lICovCisJCWJoID0gZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsOworCQlpZiAoYmgtPnN0YXRlID09IEJVRl9TVEFURV9FTVBUWSAmJiBmc2ctPnVzYl9hbW91bnRfbGVmdCA+IDApIHsKKwkJCWFtb3VudCA9IG1pbihmc2ctPnVzYl9hbW91bnRfbGVmdCwKKwkJCQkJKHUzMikgbW9kX2RhdGEuYnVmbGVuKTsKKworCQkJLyogYW1vdW50IGlzIGFsd2F5cyBkaXZpc2libGUgYnkgNTEyLCBoZW5jZSBieQorCQkJICogdGhlIGJ1bGstb3V0IG1heHBhY2tldCBzaXplICovCisJCQliaC0+b3V0cmVxLT5sZW5ndGggPSBiaC0+YnVsa19vdXRfaW50ZW5kZWRfbGVuZ3RoID0KKwkJCQkJYW1vdW50OworCQkJc3RhcnRfdHJhbnNmZXIoZnNnLCBmc2ctPmJ1bGtfb3V0LCBiaC0+b3V0cmVxLAorCQkJCQkmYmgtPm91dHJlcV9idXN5LCAmYmgtPnN0YXRlKTsKKwkJCWZzZy0+bmV4dF9idWZmaGRfdG9fZmlsbCA9IGJoLT5uZXh0OworCQkJZnNnLT51c2JfYW1vdW50X2xlZnQgLT0gYW1vdW50OworCQkJY29udGludWU7CisJCX0KKworCQkvKiBPdGhlcndpc2Ugd2FpdCBmb3Igc29tZXRoaW5nIHRvIGhhcHBlbiAqLworCQlpZiAoKHJjID0gc2xlZXBfdGhyZWFkKGZzZykpICE9IDApCisJCQlyZXR1cm4gcmM7CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgZmluaXNoX3JlcGx5KHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJc3RydWN0IGZzZ19idWZmaGQJKmJoID0gZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsOworCWludAkJCXJjID0gMDsKKworCXN3aXRjaCAoZnNnLT5kYXRhX2RpcikgeworCWNhc2UgREFUQV9ESVJfTk9ORToKKwkJYnJlYWs7CQkJLy8gTm90aGluZyB0byBzZW5kCisKKwkvKiBJZiB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdGhlIGhvc3Qgd2FudHMgdG8gcmVhZCBvciB3cml0ZSwKKwkgKiB0aGlzIG11c3QgYmUgQ0Igb3IgQ0JJIHdpdGggYW4gdW5rbm93biBjb21tYW5kLiAgV2UgbXVzdG4ndAorCSAqIHRyeSB0byBzZW5kIG9yIHJlY2VpdmUgYW55IGRhdGEuICBTbyBzdGFsbCBib3RoIGJ1bGsgcGlwZXMKKwkgKiBpZiB3ZSBjYW4gYW5kIHdhaXQgZm9yIGEgcmVzZXQuICovCisJY2FzZSBEQVRBX0RJUl9VTktOT1dOOgorCQlpZiAobW9kX2RhdGEuY2FuX3N0YWxsKSB7CisJCQlmc2dfc2V0X2hhbHQoZnNnLCBmc2ctPmJ1bGtfb3V0KTsKKwkJCXJjID0gaGFsdF9idWxrX2luX2VuZHBvaW50KGZzZyk7CisJCX0KKwkJYnJlYWs7CisKKwkvKiBBbGwgYnV0IHRoZSBsYXN0IGJ1ZmZlciBvZiBkYXRhIG11c3QgaGF2ZSBhbHJlYWR5IGJlZW4gc2VudCAqLworCWNhc2UgREFUQV9ESVJfVE9fSE9TVDoKKwkJaWYgKGZzZy0+ZGF0YV9zaXplID09IDApCisJCQk7CQkvLyBOb3RoaW5nIHRvIHNlbmQKKworCQkvKiBJZiB0aGVyZSdzIG5vIHJlc2lkdWUsIHNpbXBseSBzZW5kIHRoZSBsYXN0IGJ1ZmZlciAqLworCQllbHNlIGlmIChmc2ctPnJlc2lkdWUgPT0gMCkgeworCQkJYmgtPmlucmVxLT56ZXJvID0gMDsKKwkJCXN0YXJ0X3RyYW5zZmVyKGZzZywgZnNnLT5idWxrX2luLCBiaC0+aW5yZXEsCisJCQkJCSZiaC0+aW5yZXFfYnVzeSwgJmJoLT5zdGF0ZSk7CisJCQlmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKKwkJfQorCisJCS8qIFRoZXJlIGlzIGEgcmVzaWR1ZS4gIEZvciBDQiBhbmQgQ0JJLCBzaW1wbHkgbWFyayB0aGUgZW5kCisJCSAqIG9mIHRoZSBkYXRhIHdpdGggYSBzaG9ydCBwYWNrZXQuICBIb3dldmVyLCBpZiB3ZSBhcmUKKwkJICogYWxsb3dlZCB0byBzdGFsbCwgdGhlcmUgd2FzIG5vIGRhdGEgYXQgYWxsIChyZXNpZHVlID09CisJCSAqIGRhdGFfc2l6ZSksIGFuZCB0aGUgY29tbWFuZCBmYWlsZWQgKGludmFsaWQgTFVOIG9yCisJCSAqIHNlbnNlIGRhdGEgaXMgc2V0KSwgdGhlbiBoYWx0IHRoZSBidWxrLWluIGVuZHBvaW50CisJCSAqIGluc3RlYWQuICovCisJCWVsc2UgaWYgKCF0cmFuc3BvcnRfaXNfYmJiKCkpIHsKKwkJCWlmIChtb2RfZGF0YS5jYW5fc3RhbGwgJiYKKwkJCQkJZnNnLT5yZXNpZHVlID09IGZzZy0+ZGF0YV9zaXplICYmCisJKCFmc2ctPmN1cmx1biB8fCBmc2ctPmN1cmx1bi0+c2Vuc2VfZGF0YSAhPSBTU19OT19TRU5TRSkpIHsKKwkJCQliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRU1QVFk7CisJCQkJcmMgPSBoYWx0X2J1bGtfaW5fZW5kcG9pbnQoZnNnKTsKKwkJCX0gZWxzZSB7CisJCQkJYmgtPmlucmVxLT56ZXJvID0gMTsKKwkJCQlzdGFydF90cmFuc2Zlcihmc2csIGZzZy0+YnVsa19pbiwgYmgtPmlucmVxLAorCQkJCQkJJmJoLT5pbnJlcV9idXN5LCAmYmgtPnN0YXRlKTsKKwkJCQlmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKKwkJCX0KKwkJfQorCisJCS8qIEZvciBCdWxrLW9ubHksIGlmIHdlJ3JlIGFsbG93ZWQgdG8gc3RhbGwgdGhlbiBzZW5kIHRoZQorCQkgKiBzaG9ydCBwYWNrZXQgYW5kIGhhbHQgdGhlIGJ1bGstaW4gZW5kcG9pbnQuICBJZiB3ZSBjYW4ndAorCQkgKiBzdGFsbCwgcGFkIG91dCB0aGUgcmVtYWluaW5nIGRhdGEgd2l0aCAwJ3MuICovCisJCWVsc2UgeworCQkJaWYgKG1vZF9kYXRhLmNhbl9zdGFsbCkgeworCQkJCWJoLT5pbnJlcS0+emVybyA9IDE7CisJCQkJc3RhcnRfdHJhbnNmZXIoZnNnLCBmc2ctPmJ1bGtfaW4sIGJoLT5pbnJlcSwKKwkJCQkJCSZiaC0+aW5yZXFfYnVzeSwgJmJoLT5zdGF0ZSk7CisJCQkJZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsID0gYmgtPm5leHQ7CisJCQkJcmMgPSBoYWx0X2J1bGtfaW5fZW5kcG9pbnQoZnNnKTsKKwkJCX0gZWxzZQorCQkJCXJjID0gcGFkX3dpdGhfemVyb3MoZnNnKTsKKwkJfQorCQlicmVhazsKKworCS8qIFdlIGhhdmUgcHJvY2Vzc2VkIGFsbCB3ZSB3YW50IGZyb20gdGhlIGRhdGEgdGhlIGhvc3QgaGFzIHNlbnQuCisJICogVGhlcmUgbWF5IHN0aWxsIGJlIG91dHN0YW5kaW5nIGJ1bGstb3V0IHJlcXVlc3RzLiAqLworCWNhc2UgREFUQV9ESVJfRlJPTV9IT1NUOgorCQlpZiAoZnNnLT5yZXNpZHVlID09IDApCisJCQk7CQkvLyBOb3RoaW5nIHRvIHJlY2VpdmUKKworCQkvKiBEaWQgdGhlIGhvc3Qgc3RvcCBzZW5kaW5nIHVuZXhwZWN0ZWRseSBlYXJseT8gKi8KKwkJZWxzZSBpZiAoZnNnLT5zaG9ydF9wYWNrZXRfcmVjZWl2ZWQpIHsKKwkJCXJhaXNlX2V4Y2VwdGlvbihmc2csIEZTR19TVEFURV9BQk9SVF9CVUxLX09VVCk7CisJCQlyYyA9IC1FSU5UUjsKKwkJfQorCisJCS8qIFdlIGhhdmVuJ3QgcHJvY2Vzc2VkIGFsbCB0aGUgaW5jb21pbmcgZGF0YS4gIEV2ZW4gdGhvdWdoCisJCSAqIHdlIG1heSBiZSBhbGxvd2VkIHRvIHN0YWxsLCBkb2luZyBzbyB3b3VsZCBjYXVzZSBhIHJhY2UuCisJCSAqIFRoZSBjb250cm9sbGVyIG1heSBhbHJlYWR5IGhhdmUgQUNLJ2VkIGFsbCB0aGUgcmVtYWluaW5nCisJCSAqIGJ1bGstb3V0IHBhY2tldHMsIGluIHdoaWNoIGNhc2UgdGhlIGhvc3Qgd291bGRuJ3Qgc2VlIGEKKwkJICogU1RBTEwuICBOb3QgcmVhbGl6aW5nIHRoZSBlbmRwb2ludCB3YXMgaGFsdGVkLCBpdCB3b3VsZG4ndAorCQkgKiBjbGVhciB0aGUgaGFsdCAtLSBsZWFkaW5nIHRvIHByb2JsZW1zIGxhdGVyIG9uLiAqLworI2lmIDAKKwkJZWxzZSBpZiAobW9kX2RhdGEuY2FuX3N0YWxsKSB7CisJCQlmc2dfc2V0X2hhbHQoZnNnLCBmc2ctPmJ1bGtfb3V0KTsKKwkJCXJhaXNlX2V4Y2VwdGlvbihmc2csIEZTR19TVEFURV9BQk9SVF9CVUxLX09VVCk7CisJCQlyYyA9IC1FSU5UUjsKKwkJfQorI2VuZGlmCisKKwkJLyogV2UgY2FuJ3Qgc3RhbGwuICBSZWFkIGluIHRoZSBleGNlc3MgZGF0YSBhbmQgdGhyb3cgaXQKKwkJICogYWxsIGF3YXkuICovCisJCWVsc2UKKwkJCXJjID0gdGhyb3dfYXdheV9kYXRhKGZzZyk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmM7Cit9CisKKworc3RhdGljIGludCBzZW5kX3N0YXR1cyhzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCXN0cnVjdCBsdW4JCSpjdXJsdW4gPSBmc2ctPmN1cmx1bjsKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmg7CisJaW50CQkJcmM7CisJdTgJCQlzdGF0dXMgPSBVU0JfU1RBVFVTX1BBU1M7CisJdTMyCQkJc2QsIHNkaW5mbyA9IDA7CisKKwkvKiBXYWl0IGZvciB0aGUgbmV4dCBidWZmZXIgdG8gYmVjb21lIGF2YWlsYWJsZSAqLworCWJoID0gZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsOworCXdoaWxlIChiaC0+c3RhdGUgIT0gQlVGX1NUQVRFX0VNUFRZKSB7CisJCWlmICgocmMgPSBzbGVlcF90aHJlYWQoZnNnKSkgIT0gMCkKKwkJCXJldHVybiByYzsKKwl9CisKKwlpZiAoY3VybHVuKSB7CisJCXNkID0gY3VybHVuLT5zZW5zZV9kYXRhOworCQlzZGluZm8gPSBjdXJsdW4tPnNlbnNlX2RhdGFfaW5mbzsKKwl9IGVsc2UgaWYgKGZzZy0+YmFkX2x1bl9va2F5KQorCQlzZCA9IFNTX05PX1NFTlNFOworCWVsc2UKKwkJc2QgPSBTU19MT0dJQ0FMX1VOSVRfTk9UX1NVUFBPUlRFRDsKKworCWlmIChmc2ctPnBoYXNlX2Vycm9yKSB7CisJCURCRyhmc2csICJzZW5kaW5nIHBoYXNlLWVycm9yIHN0YXR1c1xuIik7CisJCXN0YXR1cyA9IFVTQl9TVEFUVVNfUEhBU0VfRVJST1I7CisJCXNkID0gU1NfSU5WQUxJRF9DT01NQU5EOworCX0gZWxzZSBpZiAoc2QgIT0gU1NfTk9fU0VOU0UpIHsKKwkJREJHKGZzZywgInNlbmRpbmcgY29tbWFuZC1mYWlsdXJlIHN0YXR1c1xuIik7CisJCXN0YXR1cyA9IFVTQl9TVEFUVVNfRkFJTDsKKwkJVkRCRyhmc2csICIgIHNlbnNlIGRhdGE6IFNLIHglMDJ4LCBBU0MgeCUwMngsIEFTQ1EgeCUwMng7IgorCQkJCSIgIGluZm8geCV4XG4iLAorCQkJCVNLKHNkKSwgQVNDKHNkKSwgQVNDUShzZCksIHNkaW5mbyk7CisJfQorCisJaWYgKHRyYW5zcG9ydF9pc19iYmIoKSkgeworCQlzdHJ1Y3QgYnVsa19jc193cmFwCSpjc3cgPSAoc3RydWN0IGJ1bGtfY3Nfd3JhcCAqKSBiaC0+YnVmOworCisJCS8qIFN0b3JlIGFuZCBzZW5kIHRoZSBCdWxrLW9ubHkgQ1NXICovCisJCWNzdy0+U2lnbmF0dXJlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMihVU0JfQlVMS19DU19TSUcpOworCQljc3ctPlRhZyA9IGZzZy0+dGFnOworCQljc3ctPlJlc2lkdWUgPSBjcHVfdG9fbGUzMihmc2ctPnJlc2lkdWUpOworCQljc3ctPlN0YXR1cyA9IHN0YXR1czsKKworCQliaC0+aW5yZXEtPmxlbmd0aCA9IFVTQl9CVUxLX0NTX1dSQVBfTEVOOworCQliaC0+aW5yZXEtPnplcm8gPSAwOworCQlzdGFydF90cmFuc2Zlcihmc2csIGZzZy0+YnVsa19pbiwgYmgtPmlucmVxLAorCQkJCSZiaC0+aW5yZXFfYnVzeSwgJmJoLT5zdGF0ZSk7CisKKwl9IGVsc2UgaWYgKG1vZF9kYXRhLnRyYW5zcG9ydF90eXBlID09IFVTQl9QUl9DQikgeworCisJCS8qIENvbnRyb2wtQnVsayB0cmFuc3BvcnQgaGFzIG5vIHN0YXR1cyBwaGFzZSEgKi8KKwkJcmV0dXJuIDA7CisKKwl9IGVsc2UgewkJCS8vIFVTQl9QUl9DQkkKKwkJc3RydWN0IGludGVycnVwdF9kYXRhCSpidWYgPSAoc3RydWN0IGludGVycnVwdF9kYXRhICopCisJCQkJCQliaC0+YnVmOworCisJCS8qIFN0b3JlIGFuZCBzZW5kIHRoZSBJbnRlcnJ1cHQgZGF0YS4gIFVGSSBzZW5kcyB0aGUgQVNDCisJCSAqIGFuZCBBU0NRIGJ5dGVzLiAgRXZlcnl0aGluZyBlbHNlIHNlbmRzIGEgVHlwZSAod2hpY2gKKwkJICogaXMgYWx3YXlzIDApIGFuZCB0aGUgc3RhdHVzIFZhbHVlLiAqLworCQlpZiAobW9kX2RhdGEucHJvdG9jb2xfdHlwZSA9PSBVU0JfU0NfVUZJKSB7CisJCQlidWYtPmJUeXBlID0gQVNDKHNkKTsKKwkJCWJ1Zi0+YlZhbHVlID0gQVNDUShzZCk7CisJCX0gZWxzZSB7CisJCQlidWYtPmJUeXBlID0gMDsKKwkJCWJ1Zi0+YlZhbHVlID0gc3RhdHVzOworCQl9CisJCWZzZy0+aW50cmVxLT5sZW5ndGggPSBDQklfSU5URVJSVVBUX0RBVEFfTEVOOworCisJCWZzZy0+aW50cl9idWZmaGQgPSBiaDsJCS8vIFBvaW50IHRvIHRoZSByaWdodCBidWZmaGQKKwkJZnNnLT5pbnRyZXEtPmJ1ZiA9IGJoLT5pbnJlcS0+YnVmOworCQlmc2ctPmludHJlcS0+ZG1hID0gYmgtPmlucmVxLT5kbWE7CisJCWZzZy0+aW50cmVxLT5jb250ZXh0ID0gYmg7CisJCXN0YXJ0X3RyYW5zZmVyKGZzZywgZnNnLT5pbnRyX2luLCBmc2ctPmludHJlcSwKKwkJCQkmZnNnLT5pbnRyZXFfYnVzeSwgJmJoLT5zdGF0ZSk7CisJfQorCisJZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsID0gYmgtPm5leHQ7CisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogQ2hlY2sgd2hldGhlciB0aGUgY29tbWFuZCBpcyBwcm9wZXJseSBmb3JtZWQgYW5kIHdoZXRoZXIgaXRzIGRhdGEgc2l6ZQorICogYW5kIGRpcmVjdGlvbiBhZ3JlZSB3aXRoIHRoZSB2YWx1ZXMgd2UgYWxyZWFkeSBoYXZlLiAqLworc3RhdGljIGludCBjaGVja19jb21tYW5kKHN0cnVjdCBmc2dfZGV2ICpmc2csIGludCBjbW5kX3NpemUsCisJCWVudW0gZGF0YV9kaXJlY3Rpb24gZGF0YV9kaXIsIHVuc2lnbmVkIGludCBtYXNrLAorCQlpbnQgbmVlZHNfbWVkaXVtLCBjb25zdCBjaGFyICpuYW1lKQoreworCWludAkJCWk7CisJaW50CQkJbHVuID0gZnNnLT5jbW5kWzFdID4+IDU7CisJc3RhdGljIGNvbnN0IGNoYXIJZGlybGV0dGVyWzRdID0geyd1JywgJ28nLCAnaScsICduJ307CisJY2hhcgkJCWhkbGVuWzIwXTsKKwlzdHJ1Y3QgbHVuCQkqY3VybHVuOworCisJLyogQWRqdXN0IHRoZSBleHBlY3RlZCBjbW5kX3NpemUgZm9yIHByb3RvY29sIGVuY2Fwc3VsYXRpb24gcGFkZGluZy4KKwkgKiBUcmFuc3BhcmVudCBTQ1NJIGRvZXNuJ3QgcGFkLiAqLworCWlmIChwcm90b2NvbF9pc19zY3NpKCkpCisJCTsKKworCS8qIFRoZXJlJ3Mgc29tZSBkaXNhZ3JlZW1lbnQgYXMgdG8gd2hldGhlciBSQkMgcGFkcyBjb21tYW5kcyBvciBub3QuCisJICogV2UnbGwgcGxheSBpdCBzYWZlIGFuZCBhY2NlcHQgZWl0aGVyIGZvcm0uICovCisJZWxzZSBpZiAobW9kX2RhdGEucHJvdG9jb2xfdHlwZSA9PSBVU0JfU0NfUkJDKSB7CisJCWlmIChmc2ctPmNtbmRfc2l6ZSA9PSAxMikKKwkJCWNtbmRfc2l6ZSA9IDEyOworCisJLyogQWxsIHRoZSBvdGhlciBwcm90b2NvbHMgcGFkIHRvIDEyIGJ5dGVzICovCisJfSBlbHNlCisJCWNtbmRfc2l6ZSA9IDEyOworCisJaGRsZW5bMF0gPSAwOworCWlmIChmc2ctPmRhdGFfZGlyICE9IERBVEFfRElSX1VOS05PV04pCisJCXNwcmludGYoaGRsZW4sICIsIEglYz0ldSIsIGRpcmxldHRlclsoaW50KSBmc2ctPmRhdGFfZGlyXSwKKwkJCQlmc2ctPmRhdGFfc2l6ZSk7CisJVkRCRyhmc2csICJTQ1NJIGNvbW1hbmQ6ICVzOyAgRGM9JWQsIEQlYz0ldTsgIEhjPSVkJXNcbiIsCisJCQluYW1lLCBjbW5kX3NpemUsIGRpcmxldHRlclsoaW50KSBkYXRhX2Rpcl0sCisJCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQsIGZzZy0+Y21uZF9zaXplLCBoZGxlbik7CisKKwkvKiBXZSBjYW4ndCByZXBseSBhdCBhbGwgdW50aWwgd2Uga25vdyB0aGUgY29ycmVjdCBkYXRhIGRpcmVjdGlvbgorCSAqIGFuZCBzaXplLiAqLworCWlmIChmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPT0gMCkKKwkJZGF0YV9kaXIgPSBEQVRBX0RJUl9OT05FOworCWlmIChmc2ctPmRhdGFfZGlyID09IERBVEFfRElSX1VOS05PV04pIHsJLy8gQ0Igb3IgQ0JJCisJCWZzZy0+ZGF0YV9kaXIgPSBkYXRhX2RpcjsKKwkJZnNnLT5kYXRhX3NpemUgPSBmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQ7CisKKwl9IGVsc2UgewkJCQkJLy8gQnVsay1vbmx5CisJCWlmIChmc2ctPmRhdGFfc2l6ZSA8IGZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCkgeworCisJCQkvKiBIb3N0IGRhdGEgc2l6ZSA8IERldmljZSBkYXRhIHNpemUgaXMgYSBwaGFzZSBlcnJvci4KKwkJCSAqIENhcnJ5IG91dCB0aGUgY29tbWFuZCwgYnV0IG9ubHkgdHJhbnNmZXIgYXMgbXVjaAorCQkJICogYXMgd2UgYXJlIGFsbG93ZWQuICovCisJCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSBmc2ctPmRhdGFfc2l6ZTsKKwkJCWZzZy0+cGhhc2VfZXJyb3IgPSAxOworCQl9CisJfQorCWZzZy0+cmVzaWR1ZSA9IGZzZy0+dXNiX2Ftb3VudF9sZWZ0ID0gZnNnLT5kYXRhX3NpemU7CisKKwkvKiBDb25mbGljdGluZyBkYXRhIGRpcmVjdGlvbnMgaXMgYSBwaGFzZSBlcnJvciAqLworCWlmIChmc2ctPmRhdGFfZGlyICE9IGRhdGFfZGlyICYmIGZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCA+IDApIHsKKwkJZnNnLT5waGFzZV9lcnJvciA9IDE7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFZlcmlmeSB0aGUgbGVuZ3RoIG9mIHRoZSBjb21tYW5kIGl0c2VsZiAqLworCWlmIChjbW5kX3NpemUgIT0gZnNnLT5jbW5kX3NpemUpIHsKKworCQkvKiBTcGVjaWFsIGNhc2Ugd29ya2Fyb3VuZDogTVMtV2luZG93cyBpc3N1ZXMgUkVRVUVTVCBTRU5TRQorCQkgKiB3aXRoIGNidy0+TGVuZ3RoID09IDEyIChpdCBzaG91bGQgYmUgNikuICovCisJCWlmIChmc2ctPmNtbmRbMF0gPT0gU0NfUkVRVUVTVF9TRU5TRSAmJiBmc2ctPmNtbmRfc2l6ZSA9PSAxMikKKwkJCWNtbmRfc2l6ZSA9IGZzZy0+Y21uZF9zaXplOworCQllbHNlIHsKKwkJCWZzZy0+cGhhc2VfZXJyb3IgPSAxOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwkvKiBDaGVjayB0aGF0IHRoZSBMVU4gdmFsdWVzIGFyZSBvb25zaXN0ZW50ICovCisJaWYgKHRyYW5zcG9ydF9pc19iYmIoKSkgeworCQlpZiAoZnNnLT5sdW4gIT0gbHVuKQorCQkJREJHKGZzZywgInVzaW5nIExVTiAlZCBmcm9tIENCVywgIgorCQkJCQkibm90IExVTiAlZCBmcm9tIENEQlxuIiwKKwkJCQkJZnNnLT5sdW4sIGx1bik7CisJfSBlbHNlCisJCWZzZy0+bHVuID0gbHVuOwkJLy8gVXNlIExVTiBmcm9tIHRoZSBjb21tYW5kCisKKwkvKiBDaGVjayB0aGUgTFVOICovCisJaWYgKGZzZy0+bHVuID49IDAgJiYgZnNnLT5sdW4gPCBmc2ctPm5sdW5zKSB7CisJCWZzZy0+Y3VybHVuID0gY3VybHVuID0gJmZzZy0+bHVuc1tmc2ctPmx1bl07CisJCWlmIChmc2ctPmNtbmRbMF0gIT0gU0NfUkVRVUVTVF9TRU5TRSkgeworCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfTk9fU0VOU0U7CisJCQljdXJsdW4tPnNlbnNlX2RhdGFfaW5mbyA9IDA7CisJCX0KKwl9IGVsc2UgeworCQlmc2ctPmN1cmx1biA9IGN1cmx1biA9IE5VTEw7CisJCWZzZy0+YmFkX2x1bl9va2F5ID0gMDsKKworCQkvKiBJTlFVSVJZIGFuZCBSRVFVRVNUIFNFTlNFIGNvbW1hbmRzIGFyZSBleHBsaWNpdGx5IGFsbG93ZWQKKwkJICogdG8gdXNlIHVuc3VwcG9ydGVkIExVTnM7IGFsbCBvdGhlcnMgbWF5IG5vdC4gKi8KKwkJaWYgKGZzZy0+Y21uZFswXSAhPSBTQ19JTlFVSVJZICYmCisJCQkJZnNnLT5jbW5kWzBdICE9IFNDX1JFUVVFU1RfU0VOU0UpIHsKKwkJCURCRyhmc2csICJ1bnN1cHBvcnRlZCBMVU4gJWRcbiIsIGZzZy0+bHVuKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJLyogSWYgYSB1bml0IGF0dGVudGlvbiBjb25kaXRpb24gZXhpc3RzLCBvbmx5IElOUVVJUlkgYW5kCisJICogUkVRVUVTVCBTRU5TRSBjb21tYW5kcyBhcmUgYWxsb3dlZDsgYW55dGhpbmcgZWxzZSBtdXN0IGZhaWwuICovCisJaWYgKGN1cmx1biAmJiBjdXJsdW4tPnVuaXRfYXR0ZW50aW9uX2RhdGEgIT0gU1NfTk9fU0VOU0UgJiYKKwkJCWZzZy0+Y21uZFswXSAhPSBTQ19JTlFVSVJZICYmCisJCQlmc2ctPmNtbmRbMF0gIT0gU0NfUkVRVUVTVF9TRU5TRSkgeworCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBjdXJsdW4tPnVuaXRfYXR0ZW50aW9uX2RhdGE7CisJCWN1cmx1bi0+dW5pdF9hdHRlbnRpb25fZGF0YSA9IFNTX05PX1NFTlNFOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDaGVjayB0aGF0IG9ubHkgY29tbWFuZCBieXRlcyBsaXN0ZWQgaW4gdGhlIG1hc2sgYXJlIG5vbi16ZXJvICovCisJZnNnLT5jbW5kWzFdICY9IDB4MWY7CQkJLy8gTWFzayBhd2F5IHRoZSBMVU4KKwlmb3IgKGkgPSAxOyBpIDwgY21uZF9zaXplOyArK2kpIHsKKwkJaWYgKGZzZy0+Y21uZFtpXSAmJiAhKG1hc2sgJiAoMSA8PCBpKSkpIHsKKwkJCWlmIChjdXJsdW4pCisJCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCS8qIElmIHRoZSBtZWRpdW0gaXNuJ3QgbW91bnRlZCBhbmQgdGhlIGNvbW1hbmQgbmVlZHMgdG8gYWNjZXNzCisJICogaXQsIHJldHVybiBhbiBlcnJvci4gKi8KKwlpZiAoY3VybHVuICYmICFiYWNraW5nX2ZpbGVfaXNfb3BlbihjdXJsdW4pICYmIG5lZWRzX21lZGl1bSkgeworCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19NRURJVU1fTk9UX1BSRVNFTlQ7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgZG9fc2NzaV9jb21tYW5kKHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJc3RydWN0IGZzZ19idWZmaGQJKmJoOworCWludAkJCXJjOworCWludAkJCXJlcGx5ID0gLUVJTlZBTDsKKwlpbnQJCQlpOworCXN0YXRpYyBjaGFyCQl1bmtub3duWzE2XTsKKworCWR1bXBfY2RiKGZzZyk7CisKKwkvKiBXYWl0IGZvciB0aGUgbmV4dCBidWZmZXIgdG8gYmVjb21lIGF2YWlsYWJsZSBmb3IgZGF0YSBvciBzdGF0dXMgKi8KKwliaCA9IGZzZy0+bmV4dF9idWZmaGRfdG9fZHJhaW4gPSBmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGw7CisJd2hpbGUgKGJoLT5zdGF0ZSAhPSBCVUZfU1RBVEVfRU1QVFkpIHsKKwkJaWYgKChyYyA9IHNsZWVwX3RocmVhZChmc2cpKSAhPSAwKQorCQkJcmV0dXJuIHJjOworCQl9CisJZnNnLT5waGFzZV9lcnJvciA9IDA7CisJZnNnLT5zaG9ydF9wYWNrZXRfcmVjZWl2ZWQgPSAwOworCisJZG93bl9yZWFkKCZmc2ctPmZpbGVzZW0pOwkvLyBXZSdyZSB1c2luZyB0aGUgYmFja2luZyBmaWxlCisJc3dpdGNoIChmc2ctPmNtbmRbMF0pIHsKKworCWNhc2UgU0NfSU5RVUlSWToKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gZnNnLT5jbW5kWzRdOworCQlpZiAoKHJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIDYsIERBVEFfRElSX1RPX0hPU1QsCisJCQkJKDE8PDQpLCAwLAorCQkJCSJJTlFVSVJZIikpID09IDApCisJCQlyZXBseSA9IGRvX2lucXVpcnkoZnNnLCBiaCk7CisJCWJyZWFrOworCisJY2FzZSBTQ19NT0RFX1NFTEVDVF82OgorCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSBmc2ctPmNtbmRbNF07CisJCWlmICgocmVwbHkgPSBjaGVja19jb21tYW5kKGZzZywgNiwgREFUQV9ESVJfRlJPTV9IT1NULAorCQkJCSgxPDwxKSB8ICgxPDw0KSwgMCwKKwkJCQkiTU9ERSBTRUxFQ1QoNikiKSkgPT0gMCkKKwkJCXJlcGx5ID0gZG9fbW9kZV9zZWxlY3QoZnNnLCBiaCk7CisJCWJyZWFrOworCisJY2FzZSBTQ19NT0RFX1NFTEVDVF8xMDoKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gZ2V0X2JlMTYoJmZzZy0+Y21uZFs3XSk7CisJCWlmICgocmVwbHkgPSBjaGVja19jb21tYW5kKGZzZywgMTAsIERBVEFfRElSX0ZST01fSE9TVCwKKwkJCQkoMTw8MSkgfCAoMzw8NyksIDAsCisJCQkJIk1PREUgU0VMRUNUKDEwKSIpKSA9PSAwKQorCQkJcmVwbHkgPSBkb19tb2RlX3NlbGVjdChmc2csIGJoKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDX01PREVfU0VOU0VfNjoKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gZnNnLT5jbW5kWzRdOworCQlpZiAoKHJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIDYsIERBVEFfRElSX1RPX0hPU1QsCisJCQkJKDE8PDEpIHwgKDE8PDIpIHwgKDE8PDQpLCAwLAorCQkJCSJNT0RFIFNFTlNFKDYpIikpID09IDApCisJCQlyZXBseSA9IGRvX21vZGVfc2Vuc2UoZnNnLCBiaCk7CisJCWJyZWFrOworCisJY2FzZSBTQ19NT0RFX1NFTlNFXzEwOgorCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSBnZXRfYmUxNigmZnNnLT5jbW5kWzddKTsKKwkJaWYgKChyZXBseSA9IGNoZWNrX2NvbW1hbmQoZnNnLCAxMCwgREFUQV9ESVJfVE9fSE9TVCwKKwkJCQkoMTw8MSkgfCAoMTw8MikgfCAoMzw8NyksIDAsCisJCQkJIk1PREUgU0VOU0UoMTApIikpID09IDApCisJCQlyZXBseSA9IGRvX21vZGVfc2Vuc2UoZnNnLCBiaCk7CisJCWJyZWFrOworCisJY2FzZSBTQ19QUkVWRU5UX0FMTE9XX01FRElVTV9SRU1PVkFMOgorCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSAwOworCQlpZiAoKHJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIDYsIERBVEFfRElSX05PTkUsCisJCQkJKDE8PDQpLCAwLAorCQkJCSJQUkVWRU5ULUFMTE9XIE1FRElVTSBSRU1PVkFMIikpID09IDApCisJCQlyZXBseSA9IGRvX3ByZXZlbnRfYWxsb3coZnNnKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDX1JFQURfNjoKKwkJaSA9IGZzZy0+Y21uZFs0XTsKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gKGkgPT0gMCA/IDI1NiA6IGkpIDw8IDk7CisJCWlmICgocmVwbHkgPSBjaGVja19jb21tYW5kKGZzZywgNiwgREFUQV9ESVJfVE9fSE9TVCwKKwkJCQkoNzw8MSkgfCAoMTw8NCksIDEsCisJCQkJIlJFQUQoNikiKSkgPT0gMCkKKwkJCXJlcGx5ID0gZG9fcmVhZChmc2cpOworCQlicmVhazsKKworCWNhc2UgU0NfUkVBRF8xMDoKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gZ2V0X2JlMTYoJmZzZy0+Y21uZFs3XSkgPDwgOTsKKwkJaWYgKChyZXBseSA9IGNoZWNrX2NvbW1hbmQoZnNnLCAxMCwgREFUQV9ESVJfVE9fSE9TVCwKKwkJCQkoMTw8MSkgfCAoMHhmPDwyKSB8ICgzPDw3KSwgMSwKKwkJCQkiUkVBRCgxMCkiKSkgPT0gMCkKKwkJCXJlcGx5ID0gZG9fcmVhZChmc2cpOworCQlicmVhazsKKworCWNhc2UgU0NfUkVBRF8xMjoKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gZ2V0X2JlMzIoJmZzZy0+Y21uZFs2XSkgPDwgOTsKKwkJaWYgKChyZXBseSA9IGNoZWNrX2NvbW1hbmQoZnNnLCAxMiwgREFUQV9ESVJfVE9fSE9TVCwKKwkJCQkoMTw8MSkgfCAoMHhmPDwyKSB8ICgweGY8PDYpLCAxLAorCQkJCSJSRUFEKDEyKSIpKSA9PSAwKQorCQkJcmVwbHkgPSBkb19yZWFkKGZzZyk7CisJCWJyZWFrOworCisJY2FzZSBTQ19SRUFEX0NBUEFDSVRZOgorCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSA4OworCQlpZiAoKHJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIDEwLCBEQVRBX0RJUl9UT19IT1NULAorCQkJCSgweGY8PDIpIHwgKDE8PDgpLCAxLAorCQkJCSJSRUFEIENBUEFDSVRZIikpID09IDApCisJCQlyZXBseSA9IGRvX3JlYWRfY2FwYWNpdHkoZnNnLCBiaCk7CisJCWJyZWFrOworCisJY2FzZSBTQ19SRUFEX0ZPUk1BVF9DQVBBQ0lUSUVTOgorCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSBnZXRfYmUxNigmZnNnLT5jbW5kWzddKTsKKwkJaWYgKChyZXBseSA9IGNoZWNrX2NvbW1hbmQoZnNnLCAxMCwgREFUQV9ESVJfVE9fSE9TVCwKKwkJCQkoMzw8NyksIDEsCisJCQkJIlJFQUQgRk9STUFUIENBUEFDSVRJRVMiKSkgPT0gMCkKKwkJCXJlcGx5ID0gZG9fcmVhZF9mb3JtYXRfY2FwYWNpdGllcyhmc2csIGJoKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDX1JFUVVFU1RfU0VOU0U6CisJCWZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IGZzZy0+Y21uZFs0XTsKKwkJaWYgKChyZXBseSA9IGNoZWNrX2NvbW1hbmQoZnNnLCA2LCBEQVRBX0RJUl9UT19IT1NULAorCQkJCSgxPDw0KSwgMCwKKwkJCQkiUkVRVUVTVCBTRU5TRSIpKSA9PSAwKQorCQkJcmVwbHkgPSBkb19yZXF1ZXN0X3NlbnNlKGZzZywgYmgpOworCQlicmVhazsKKworCWNhc2UgU0NfU1RBUlRfU1RPUF9VTklUOgorCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSAwOworCQlpZiAoKHJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIDYsIERBVEFfRElSX05PTkUsCisJCQkJKDE8PDEpIHwgKDE8PDQpLCAwLAorCQkJCSJTVEFSVC1TVE9QIFVOSVQiKSkgPT0gMCkKKwkJCXJlcGx5ID0gZG9fc3RhcnRfc3RvcChmc2cpOworCQlicmVhazsKKworCWNhc2UgU0NfU1lOQ0hST05JWkVfQ0FDSEU6CisJCWZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IDA7CisJCWlmICgocmVwbHkgPSBjaGVja19jb21tYW5kKGZzZywgMTAsIERBVEFfRElSX05PTkUsCisJCQkJKDB4Zjw8MikgfCAoMzw8NyksIDEsCisJCQkJIlNZTkNIUk9OSVpFIENBQ0hFIikpID09IDApCisJCQlyZXBseSA9IGRvX3N5bmNocm9uaXplX2NhY2hlKGZzZyk7CisJCWJyZWFrOworCisJY2FzZSBTQ19URVNUX1VOSVRfUkVBRFk6CisJCWZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IDA7CisJCXJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIDYsIERBVEFfRElSX05PTkUsCisJCQkJMCwgMSwKKwkJCQkiVEVTVCBVTklUIFJFQURZIik7CisJCWJyZWFrOworCisJLyogQWx0aG91Z2ggb3B0aW9uYWwsIHRoaXMgY29tbWFuZCBpcyB1c2VkIGJ5IE1TLVdpbmRvd3MuICBXZQorCSAqIHN1cHBvcnQgYSBtaW5pbWFsIHZlcnNpb246IEJ5dENoayBtdXN0IGJlIDAuICovCisJY2FzZSBTQ19WRVJJRlk6CisJCWZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IDA7CisJCWlmICgocmVwbHkgPSBjaGVja19jb21tYW5kKGZzZywgMTAsIERBVEFfRElSX05PTkUsCisJCQkJKDE8PDEpIHwgKDB4Zjw8MikgfCAoMzw8NyksIDEsCisJCQkJIlZFUklGWSIpKSA9PSAwKQorCQkJcmVwbHkgPSBkb192ZXJpZnkoZnNnKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDX1dSSVRFXzY6CisJCWkgPSBmc2ctPmNtbmRbNF07CisJCWZzZy0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IChpID09IDAgPyAyNTYgOiBpKSA8PCA5OworCQlpZiAoKHJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIDYsIERBVEFfRElSX0ZST01fSE9TVCwKKwkJCQkoNzw8MSkgfCAoMTw8NCksIDEsCisJCQkJIldSSVRFKDYpIikpID09IDApCisJCQlyZXBseSA9IGRvX3dyaXRlKGZzZyk7CisJCWJyZWFrOworCisJY2FzZSBTQ19XUklURV8xMDoKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gZ2V0X2JlMTYoJmZzZy0+Y21uZFs3XSkgPDwgOTsKKwkJaWYgKChyZXBseSA9IGNoZWNrX2NvbW1hbmQoZnNnLCAxMCwgREFUQV9ESVJfRlJPTV9IT1NULAorCQkJCSgxPDwxKSB8ICgweGY8PDIpIHwgKDM8PDcpLCAxLAorCQkJCSJXUklURSgxMCkiKSkgPT0gMCkKKwkJCXJlcGx5ID0gZG9fd3JpdGUoZnNnKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDX1dSSVRFXzEyOgorCQlmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSBnZXRfYmUzMigmZnNnLT5jbW5kWzZdKSA8PCA5OworCQlpZiAoKHJlcGx5ID0gY2hlY2tfY29tbWFuZChmc2csIDEyLCBEQVRBX0RJUl9GUk9NX0hPU1QsCisJCQkJKDE8PDEpIHwgKDB4Zjw8MikgfCAoMHhmPDw2KSwgMSwKKwkJCQkiV1JJVEUoMTIpIikpID09IDApCisJCQlyZXBseSA9IGRvX3dyaXRlKGZzZyk7CisJCWJyZWFrOworCisJLyogU29tZSBtYW5kYXRvcnkgY29tbWFuZHMgdGhhdCB3ZSByZWNvZ25pemUgYnV0IGRvbid0IGltcGxlbWVudC4KKwkgKiBUaGV5IGRvbid0IG1lYW4gbXVjaCBpbiB0aGlzIHNldHRpbmcuICBJdCdzIGxlZnQgYXMgYW4gZXhlcmNpc2UKKwkgKiBmb3IgYW55b25lIGludGVyZXN0ZWQgdG8gaW1wbGVtZW50IFJFU0VSVkUgYW5kIFJFTEVBU0UgaW4gdGVybXMKKwkgKiBvZiBQb3NpeCBsb2Nrcy4gKi8KKwljYXNlIFNDX0ZPUk1BVF9VTklUOgorCWNhc2UgU0NfUkVMRUFTRToKKwljYXNlIFNDX1JFU0VSVkU6CisJY2FzZSBTQ19TRU5EX0RJQUdOT1NUSUM6CisJCS8vIEZhbGwgdGhyb3VnaAorCisJZGVmYXVsdDoKKwkJZnNnLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gMDsKKwkJc3ByaW50Zih1bmtub3duLCAiVW5rbm93biB4JTAyeCIsIGZzZy0+Y21uZFswXSk7CisJCWlmICgocmVwbHkgPSBjaGVja19jb21tYW5kKGZzZywgZnNnLT5jbW5kX3NpemUsCisJCQkJREFUQV9ESVJfVU5LTk9XTiwgMHhmZiwgMCwgdW5rbm93bikpID09IDApIHsKKwkJCWZzZy0+Y3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9DT01NQU5EOworCQkJcmVwbHkgPSAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCX0KKwl1cF9yZWFkKCZmc2ctPmZpbGVzZW0pOworCisJaWYgKHJlcGx5ID09IC1FSU5UUiB8fCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJcmV0dXJuIC1FSU5UUjsKKworCS8qIFNldCB1cCB0aGUgc2luZ2xlIHJlcGx5IGJ1ZmZlciBmb3IgZmluaXNoX3JlcGx5KCkgKi8KKwlpZiAocmVwbHkgPT0gLUVJTlZBTCkKKwkJcmVwbHkgPSAwOwkJLy8gRXJyb3IgcmVwbHkgbGVuZ3RoCisJaWYgKHJlcGx5ID49IDAgJiYgZnNnLT5kYXRhX2RpciA9PSBEQVRBX0RJUl9UT19IT1NUKSB7CisJCXJlcGx5ID0gbWluKCh1MzIpIHJlcGx5LCBmc2ctPmRhdGFfc2l6ZV9mcm9tX2NtbmQpOworCQliaC0+aW5yZXEtPmxlbmd0aCA9IHJlcGx5OworCQliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRlVMTDsKKwkJZnNnLT5yZXNpZHVlIC09IHJlcGx5OworCX0JCQkJLy8gT3RoZXJ3aXNlIGl0J3MgYWxyZWFkeSBzZXQKKworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgcmVjZWl2ZWRfY2J3KHN0cnVjdCBmc2dfZGV2ICpmc2csIHN0cnVjdCBmc2dfYnVmZmhkICpiaCkKK3sKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IGJoLT5vdXRyZXE7CisJc3RydWN0IGJ1bGtfY2Jfd3JhcAkqY2J3ID0gKHN0cnVjdCBidWxrX2NiX3dyYXAgKikgcmVxLT5idWY7CisKKwkvKiBXYXMgdGhpcyBhIHJlYWwgcGFja2V0PyAqLworCWlmIChyZXEtPnN0YXR1cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBJcyB0aGUgQ0JXIHZhbGlkPyAqLworCWlmIChyZXEtPmFjdHVhbCAhPSBVU0JfQlVMS19DQl9XUkFQX0xFTiB8fAorCQkJY2J3LT5TaWduYXR1cmUgIT0gX19jb25zdGFudF9jcHVfdG9fbGUzMigKKwkJCQlVU0JfQlVMS19DQl9TSUcpKSB7CisJCURCRyhmc2csICJpbnZhbGlkIENCVzogbGVuICV1IHNpZyAweCV4XG4iLAorCQkJCXJlcS0+YWN0dWFsLAorCQkJCWxlMzJfdG9fY3B1KGNidy0+U2lnbmF0dXJlKSk7CisKKwkJLyogVGhlIEJ1bGstb25seSBzcGVjIHNheXMgd2UgTVVTVCBzdGFsbCB0aGUgYnVsayBwaXBlcyEKKwkJICogSWYgd2Ugd2FudCB0byBhdm9pZCBzdGFsbHMsIHNldCBhIGZsYWcgc28gdGhhdCB3ZSB3aWxsCisJCSAqIGNsZWFyIHRoZSBlbmRwb2ludCBoYWx0cyBhdCB0aGUgbmV4dCByZXNldC4gKi8KKwkJaWYgKCFtb2RfZGF0YS5jYW5fc3RhbGwpCisJCQlzZXRfYml0KENMRUFSX0JVTEtfSEFMVFMsICZmc2ctPmF0b21pY19iaXRmbGFncyk7CisJCWZzZ19zZXRfaGFsdChmc2csIGZzZy0+YnVsa19vdXQpOworCQloYWx0X2J1bGtfaW5fZW5kcG9pbnQoZnNnKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogSXMgdGhlIENCVyBtZWFuaW5nZnVsPyAqLworCWlmIChjYnctPkx1biA+PSBNQVhfTFVOUyB8fCBjYnctPkZsYWdzICYgflVTQl9CVUxLX0lOX0ZMQUcgfHwKKwkJCWNidy0+TGVuZ3RoIDwgNiB8fCBjYnctPkxlbmd0aCA+IE1BWF9DT01NQU5EX1NJWkUpIHsKKwkJREJHKGZzZywgIm5vbi1tZWFuaW5nZnVsIENCVzogbHVuID0gJXUsIGZsYWdzID0gMHgleCwgIgorCQkJCSJjbWRsZW4gJXVcbiIsCisJCQkJY2J3LT5MdW4sIGNidy0+RmxhZ3MsIGNidy0+TGVuZ3RoKTsKKworCQkvKiBXZSBjYW4gZG8gYW55dGhpbmcgd2Ugd2FudCBoZXJlLCBzbyBsZXQncyBzdGFsbCB0aGUKKwkJICogYnVsayBwaXBlcyBpZiB3ZSBhcmUgYWxsb3dlZCB0by4gKi8KKwkJaWYgKG1vZF9kYXRhLmNhbl9zdGFsbCkgeworCQkJZnNnX3NldF9oYWx0KGZzZywgZnNnLT5idWxrX291dCk7CisJCQloYWx0X2J1bGtfaW5fZW5kcG9pbnQoZnNnKTsKKwkJfQorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBTYXZlIHRoZSBjb21tYW5kIGZvciBsYXRlciAqLworCWZzZy0+Y21uZF9zaXplID0gY2J3LT5MZW5ndGg7CisJbWVtY3B5KGZzZy0+Y21uZCwgY2J3LT5DREIsIGZzZy0+Y21uZF9zaXplKTsKKwlpZiAoY2J3LT5GbGFncyAmIFVTQl9CVUxLX0lOX0ZMQUcpCisJCWZzZy0+ZGF0YV9kaXIgPSBEQVRBX0RJUl9UT19IT1NUOworCWVsc2UKKwkJZnNnLT5kYXRhX2RpciA9IERBVEFfRElSX0ZST01fSE9TVDsKKwlmc2ctPmRhdGFfc2l6ZSA9IGxlMzJfdG9fY3B1KGNidy0+RGF0YVRyYW5zZmVyTGVuZ3RoKTsKKwlpZiAoZnNnLT5kYXRhX3NpemUgPT0gMCkKKwkJZnNnLT5kYXRhX2RpciA9IERBVEFfRElSX05PTkU7CisJZnNnLT5sdW4gPSBjYnctPkx1bjsKKwlmc2ctPnRhZyA9IGNidy0+VGFnOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgZ2V0X25leHRfY29tbWFuZChzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCXN0cnVjdCBmc2dfYnVmZmhkCSpiaDsKKwlpbnQJCQlyYyA9IDA7CisKKwlpZiAodHJhbnNwb3J0X2lzX2JiYigpKSB7CisKKwkJLyogV2FpdCBmb3IgdGhlIG5leHQgYnVmZmVyIHRvIGJlY29tZSBhdmFpbGFibGUgKi8KKwkJYmggPSBmc2ctPm5leHRfYnVmZmhkX3RvX2ZpbGw7CisJCXdoaWxlIChiaC0+c3RhdGUgIT0gQlVGX1NUQVRFX0VNUFRZKSB7CisJCQlpZiAoKHJjID0gc2xlZXBfdGhyZWFkKGZzZykpICE9IDApCisJCQkJcmV0dXJuIHJjOworCQkJfQorCisJCS8qIFF1ZXVlIGEgcmVxdWVzdCB0byByZWFkIGEgQnVsay1vbmx5IENCVyAqLworCQlzZXRfYnVsa19vdXRfcmVxX2xlbmd0aChmc2csIGJoLCBVU0JfQlVMS19DQl9XUkFQX0xFTik7CisJCXN0YXJ0X3RyYW5zZmVyKGZzZywgZnNnLT5idWxrX291dCwgYmgtPm91dHJlcSwKKwkJCQkmYmgtPm91dHJlcV9idXN5LCAmYmgtPnN0YXRlKTsKKworCQkvKiBXZSB3aWxsIGRyYWluIHRoZSBidWZmZXIgaW4gc29mdHdhcmUsIHdoaWNoIG1lYW5zIHdlCisJCSAqIGNhbiByZXVzZSBpdCBmb3IgdGhlIG5leHQgZmlsbGluZy4gIE5vIG5lZWQgdG8gYWR2YW5jZQorCQkgKiBuZXh0X2J1ZmZoZF90b19maWxsLiAqLworCisJCS8qIFdhaXQgZm9yIHRoZSBDQlcgdG8gYXJyaXZlICovCisJCXdoaWxlIChiaC0+c3RhdGUgIT0gQlVGX1NUQVRFX0ZVTEwpIHsKKwkJCWlmICgocmMgPSBzbGVlcF90aHJlYWQoZnNnKSkgIT0gMCkKKwkJCQlyZXR1cm4gcmM7CisJCQl9CisJCXJjID0gcmVjZWl2ZWRfY2J3KGZzZywgYmgpOworCQliaC0+c3RhdGUgPSBCVUZfU1RBVEVfRU1QVFk7CisKKwl9IGVsc2UgewkJLy8gVVNCX1BSX0NCIG9yIFVTQl9QUl9DQkkKKworCQkvKiBXYWl0IGZvciB0aGUgbmV4dCBjb21tYW5kIHRvIGFycml2ZSAqLworCQl3aGlsZSAoZnNnLT5jYmJ1Zl9jbW5kX3NpemUgPT0gMCkgeworCQkJaWYgKChyYyA9IHNsZWVwX3RocmVhZChmc2cpKSAhPSAwKQorCQkJCXJldHVybiByYzsKKwkJCX0KKworCQkvKiBJcyB0aGUgcHJldmlvdXMgc3RhdHVzIGludGVycnVwdCByZXF1ZXN0IHN0aWxsIGJ1c3k/CisJCSAqIFRoZSBob3N0IGlzIGFsbG93ZWQgdG8gc2tpcCByZWFkaW5nIHRoZSBzdGF0dXMsCisJCSAqIHNvIHdlIG11c3QgY2FuY2VsIGl0LiAqLworCQlpZiAoZnNnLT5pbnRyZXFfYnVzeSkKKwkJCXVzYl9lcF9kZXF1ZXVlKGZzZy0+aW50cl9pbiwgZnNnLT5pbnRyZXEpOworCisJCS8qIENvcHkgdGhlIGNvbW1hbmQgYW5kIG1hcmsgdGhlIGJ1ZmZlciBlbXB0eSAqLworCQlmc2ctPmRhdGFfZGlyID0gREFUQV9ESVJfVU5LTk9XTjsKKwkJc3Bpbl9sb2NrX2lycSgmZnNnLT5sb2NrKTsKKwkJZnNnLT5jbW5kX3NpemUgPSBmc2ctPmNiYnVmX2NtbmRfc2l6ZTsKKwkJbWVtY3B5KGZzZy0+Y21uZCwgZnNnLT5jYmJ1Zl9jbW5kLCBmc2ctPmNtbmRfc2l6ZSk7CisJCWZzZy0+Y2JidWZfY21uZF9zaXplID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxKCZmc2ctPmxvY2spOworCX0KKwlyZXR1cm4gcmM7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBlbmFibGVfZW5kcG9pbnQoc3RydWN0IGZzZ19kZXYgKmZzZywgc3RydWN0IHVzYl9lcCAqZXAsCisJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZCkKK3sKKwlpbnQJcmM7CisKKwllcC0+ZHJpdmVyX2RhdGEgPSBmc2c7CisJcmMgPSB1c2JfZXBfZW5hYmxlKGVwLCBkKTsKKwlpZiAocmMpCisJCUVSUk9SKGZzZywgImNhbid0IGVuYWJsZSAlcywgcmVzdWx0ICVkXG4iLCBlcC0+bmFtZSwgcmMpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBhbGxvY19yZXF1ZXN0KHN0cnVjdCBmc2dfZGV2ICpmc2csIHN0cnVjdCB1c2JfZXAgKmVwLAorCQlzdHJ1Y3QgdXNiX3JlcXVlc3QgKipwcmVxKQoreworCSpwcmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QoZXAsIEdGUF9BVE9NSUMpOworCWlmICgqcHJlcSkKKwkJcmV0dXJuIDA7CisJRVJST1IoZnNnLCAiY2FuJ3QgYWxsb2NhdGUgcmVxdWVzdCBmb3IgJXNcbiIsIGVwLT5uYW1lKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyoKKyAqIFJlc2V0IGludGVyZmFjZSBzZXR0aW5nIGFuZCByZS1pbml0IGVuZHBvaW50IHN0YXRlICh0b2dnbGUgZXRjKS4KKyAqIENhbGwgd2l0aCBhbHRzZXR0aW5nIDwgMCB0byBkaXNhYmxlIHRoZSBpbnRlcmZhY2UuICBUaGUgb25seSBvdGhlcgorICogYXZhaWxhYmxlIGFsdHNldHRpbmcgaXMgMCwgd2hpY2ggZW5hYmxlcyB0aGUgaW50ZXJmYWNlLgorICovCitzdGF0aWMgaW50IGRvX3NldF9pbnRlcmZhY2Uoc3RydWN0IGZzZ19kZXYgKmZzZywgaW50IGFsdHNldHRpbmcpCit7CisJaW50CXJjID0gMDsKKwlpbnQJaTsKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmQ7CisKKwlpZiAoZnNnLT5ydW5uaW5nKQorCQlEQkcoZnNnLCAicmVzZXQgaW50ZXJmYWNlXG4iKTsKKworcmVzZXQ6CisJLyogRGVhbGxvY2F0ZSB0aGUgcmVxdWVzdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0JVRkZFUlM7ICsraSkgeworCQlzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmggPSAmZnNnLT5idWZmaGRzW2ldOworCisJCWlmIChiaC0+aW5yZXEpIHsKKwkJCXVzYl9lcF9mcmVlX3JlcXVlc3QoZnNnLT5idWxrX2luLCBiaC0+aW5yZXEpOworCQkJYmgtPmlucmVxID0gTlVMTDsKKwkJfQorCQlpZiAoYmgtPm91dHJlcSkgeworCQkJdXNiX2VwX2ZyZWVfcmVxdWVzdChmc2ctPmJ1bGtfb3V0LCBiaC0+b3V0cmVxKTsKKwkJCWJoLT5vdXRyZXEgPSBOVUxMOworCQl9CisJfQorCWlmIChmc2ctPmludHJlcSkgeworCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGZzZy0+aW50cl9pbiwgZnNnLT5pbnRyZXEpOworCQlmc2ctPmludHJlcSA9IE5VTEw7CisJfQorCisJLyogRGlzYWJsZSB0aGUgZW5kcG9pbnRzICovCisJaWYgKGZzZy0+YnVsa19pbl9lbmFibGVkKSB7CisJCXVzYl9lcF9kaXNhYmxlKGZzZy0+YnVsa19pbik7CisJCWZzZy0+YnVsa19pbl9lbmFibGVkID0gMDsKKwl9CisJaWYgKGZzZy0+YnVsa19vdXRfZW5hYmxlZCkgeworCQl1c2JfZXBfZGlzYWJsZShmc2ctPmJ1bGtfb3V0KTsKKwkJZnNnLT5idWxrX291dF9lbmFibGVkID0gMDsKKwl9CisJaWYgKGZzZy0+aW50cl9pbl9lbmFibGVkKSB7CisJCXVzYl9lcF9kaXNhYmxlKGZzZy0+aW50cl9pbik7CisJCWZzZy0+aW50cl9pbl9lbmFibGVkID0gMDsKKwl9CisKKwlmc2ctPnJ1bm5pbmcgPSAwOworCWlmIChhbHRzZXR0aW5nIDwgMCB8fCByYyAhPSAwKQorCQlyZXR1cm4gcmM7CisKKwlEQkcoZnNnLCAic2V0IGludGVyZmFjZSAlZFxuIiwgYWx0c2V0dGluZyk7CisKKwkvKiBFbmFibGUgdGhlIGVuZHBvaW50cyAqLworCWQgPSBlcF9kZXNjKGZzZy0+Z2FkZ2V0LCAmZnNfYnVsa19pbl9kZXNjLCAmaHNfYnVsa19pbl9kZXNjKTsKKwlpZiAoKHJjID0gZW5hYmxlX2VuZHBvaW50KGZzZywgZnNnLT5idWxrX2luLCBkKSkgIT0gMCkKKwkJZ290byByZXNldDsKKwlmc2ctPmJ1bGtfaW5fZW5hYmxlZCA9IDE7CisKKwlkID0gZXBfZGVzYyhmc2ctPmdhZGdldCwgJmZzX2J1bGtfb3V0X2Rlc2MsICZoc19idWxrX291dF9kZXNjKTsKKwlpZiAoKHJjID0gZW5hYmxlX2VuZHBvaW50KGZzZywgZnNnLT5idWxrX291dCwgZCkpICE9IDApCisJCWdvdG8gcmVzZXQ7CisJZnNnLT5idWxrX291dF9lbmFibGVkID0gMTsKKwlmc2ctPmJ1bGtfb3V0X21heHBhY2tldCA9IGxlMTZfdG9fY3B1KGQtPndNYXhQYWNrZXRTaXplKTsKKworCWlmICh0cmFuc3BvcnRfaXNfY2JpKCkpIHsKKwkJZCA9IGVwX2Rlc2MoZnNnLT5nYWRnZXQsICZmc19pbnRyX2luX2Rlc2MsICZoc19pbnRyX2luX2Rlc2MpOworCQlpZiAoKHJjID0gZW5hYmxlX2VuZHBvaW50KGZzZywgZnNnLT5pbnRyX2luLCBkKSkgIT0gMCkKKwkJCWdvdG8gcmVzZXQ7CisJCWZzZy0+aW50cl9pbl9lbmFibGVkID0gMTsKKwl9CisKKwkvKiBBbGxvY2F0ZSB0aGUgcmVxdWVzdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0JVRkZFUlM7ICsraSkgeworCQlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSAmZnNnLT5idWZmaGRzW2ldOworCisJCWlmICgocmMgPSBhbGxvY19yZXF1ZXN0KGZzZywgZnNnLT5idWxrX2luLCAmYmgtPmlucmVxKSkgIT0gMCkKKwkJCWdvdG8gcmVzZXQ7CisJCWlmICgocmMgPSBhbGxvY19yZXF1ZXN0KGZzZywgZnNnLT5idWxrX291dCwgJmJoLT5vdXRyZXEpKSAhPSAwKQorCQkJZ290byByZXNldDsKKwkJYmgtPmlucmVxLT5idWYgPSBiaC0+b3V0cmVxLT5idWYgPSBiaC0+YnVmOworCQliaC0+aW5yZXEtPmRtYSA9IGJoLT5vdXRyZXEtPmRtYSA9IGJoLT5kbWE7CisJCWJoLT5pbnJlcS0+Y29udGV4dCA9IGJoLT5vdXRyZXEtPmNvbnRleHQgPSBiaDsKKwkJYmgtPmlucmVxLT5jb21wbGV0ZSA9IGJ1bGtfaW5fY29tcGxldGU7CisJCWJoLT5vdXRyZXEtPmNvbXBsZXRlID0gYnVsa19vdXRfY29tcGxldGU7CisJfQorCWlmICh0cmFuc3BvcnRfaXNfY2JpKCkpIHsKKwkJaWYgKChyYyA9IGFsbG9jX3JlcXVlc3QoZnNnLCBmc2ctPmludHJfaW4sICZmc2ctPmludHJlcSkpICE9IDApCisJCQlnb3RvIHJlc2V0OworCQlmc2ctPmludHJlcS0+Y29tcGxldGUgPSBpbnRyX2luX2NvbXBsZXRlOworCX0KKworCWZzZy0+cnVubmluZyA9IDE7CisJZm9yIChpID0gMDsgaSA8IGZzZy0+bmx1bnM7ICsraSkKKwkJZnNnLT5sdW5zW2ldLnVuaXRfYXR0ZW50aW9uX2RhdGEgPSBTU19SRVNFVF9PQ0NVUlJFRDsKKwlyZXR1cm4gcmM7Cit9CisKKworLyoKKyAqIENoYW5nZSBvdXIgb3BlcmF0aW9uYWwgY29uZmlndXJhdGlvbi4gIFRoaXMgY29kZSBtdXN0IGFncmVlIHdpdGggdGhlIGNvZGUKKyAqIHRoYXQgcmV0dXJucyBjb25maWcgZGVzY3JpcHRvcnMsIGFuZCB3aXRoIGludGVyZmFjZSBhbHRzZXR0aW5nIGNvZGUuCisgKgorICogSXQncyBhbHNvIHJlc3BvbnNpYmxlIGZvciBwb3dlciBtYW5hZ2VtZW50IGludGVyYWN0aW9ucy4gIFNvbWUKKyAqIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IG5vdCB3b3JrIHdpdGggb3VyIGN1cnJlbnQgcG93ZXIgc291cmNlcy4KKyAqIEZvciBub3cgd2UganVzdCBhc3N1bWUgdGhlIGdhZGdldCBpcyBhbHdheXMgc2VsZi1wb3dlcmVkLgorICovCitzdGF0aWMgaW50IGRvX3NldF9jb25maWcoc3RydWN0IGZzZ19kZXYgKmZzZywgdTggbmV3X2NvbmZpZykKK3sKKwlpbnQJcmMgPSAwOworCisJLyogRGlzYWJsZSB0aGUgc2luZ2xlIGludGVyZmFjZSAqLworCWlmIChmc2ctPmNvbmZpZyAhPSAwKSB7CisJCURCRyhmc2csICJyZXNldCBjb25maWdcbiIpOworCQlmc2ctPmNvbmZpZyA9IDA7CisJCXJjID0gZG9fc2V0X2ludGVyZmFjZShmc2csIC0xKTsKKwl9CisKKwkvKiBFbmFibGUgdGhlIGludGVyZmFjZSAqLworCWlmIChuZXdfY29uZmlnICE9IDApIHsKKwkJZnNnLT5jb25maWcgPSBuZXdfY29uZmlnOworCQlpZiAoKHJjID0gZG9fc2V0X2ludGVyZmFjZShmc2csIDApKSAhPSAwKQorCQkJZnNnLT5jb25maWcgPSAwOwkvLyBSZXNldCBvbiBlcnJvcnMKKwkJZWxzZSB7CisJCQljaGFyICpzcGVlZDsKKworCQkJc3dpdGNoIChmc2ctPmdhZGdldC0+c3BlZWQpIHsKKwkJCWNhc2UgVVNCX1NQRUVEX0xPVzoJc3BlZWQgPSAibG93IjsJYnJlYWs7CisJCQljYXNlIFVTQl9TUEVFRF9GVUxMOglzcGVlZCA9ICJmdWxsIjsJYnJlYWs7CisJCQljYXNlIFVTQl9TUEVFRF9ISUdIOglzcGVlZCA9ICJoaWdoIjsJYnJlYWs7CisJCQlkZWZhdWx0OiAJCXNwZWVkID0gIj8iOwlicmVhazsKKwkJCX0KKwkJCUlORk8oZnNnLCAiJXMgc3BlZWQgY29uZmlnICMlZFxuIiwgc3BlZWQsIGZzZy0+Y29uZmlnKTsKKwkJfQorCX0KKwlyZXR1cm4gcmM7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgaGFuZGxlX2V4Y2VwdGlvbihzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCXNpZ2luZm9fdAkJaW5mbzsKKwlpbnQJCQlzaWc7CisJaW50CQkJaTsKKwlpbnQJCQludW1fYWN0aXZlOworCXN0cnVjdCBmc2dfYnVmZmhkCSpiaDsKKwllbnVtIGZzZ19zdGF0ZQkJb2xkX3N0YXRlOworCXU4CQkJbmV3X2NvbmZpZzsKKwlzdHJ1Y3QgbHVuCQkqY3VybHVuOworCXVuc2lnbmVkIGludAkJZXhjZXB0aW9uX3JlcV90YWc7CisJaW50CQkJcmM7CisKKwkvKiBDbGVhciB0aGUgZXhpc3Rpbmcgc2lnbmFscy4gIEFueXRoaW5nIGJ1dCBTSUdVU1IxIGlzIGNvbnZlcnRlZAorCSAqIGludG8gYSBoaWdoLXByaW9yaXR5IEVYSVQgZXhjZXB0aW9uLiAqLworCWZvciAoOzspIHsKKwkJc2lnID0gZGVxdWV1ZV9zaWduYWxfbG9jayhjdXJyZW50LCAmZnNnLT50aHJlYWRfc2lnbmFsX21hc2ssCisJCQkJJmluZm8pOworCQlpZiAoIXNpZykKKwkJCWJyZWFrOworCQlpZiAoc2lnICE9IFNJR1VTUjEpIHsKKwkJCWlmIChmc2ctPnN0YXRlIDwgRlNHX1NUQVRFX0VYSVQpCisJCQkJREJHKGZzZywgIk1haW4gdGhyZWFkIGV4aXRpbmcgb24gc2lnbmFsXG4iKTsKKwkJCXJhaXNlX2V4Y2VwdGlvbihmc2csIEZTR19TVEFURV9FWElUKTsKKwkJfQorCX0KKworCS8qIENhbmNlbCBhbGwgdGhlIHBlbmRpbmcgdHJhbnNmZXJzICovCisJaWYgKGZzZy0+aW50cmVxX2J1c3kpCisJCXVzYl9lcF9kZXF1ZXVlKGZzZy0+aW50cl9pbiwgZnNnLT5pbnRyZXEpOworCWZvciAoaSA9IDA7IGkgPCBOVU1fQlVGRkVSUzsgKytpKSB7CisJCWJoID0gJmZzZy0+YnVmZmhkc1tpXTsKKwkJaWYgKGJoLT5pbnJlcV9idXN5KQorCQkJdXNiX2VwX2RlcXVldWUoZnNnLT5idWxrX2luLCBiaC0+aW5yZXEpOworCQlpZiAoYmgtPm91dHJlcV9idXN5KQorCQkJdXNiX2VwX2RlcXVldWUoZnNnLT5idWxrX291dCwgYmgtPm91dHJlcSk7CisJfQorCisJLyogV2FpdCB1bnRpbCBldmVyeXRoaW5nIGlzIGlkbGUgKi8KKwlmb3IgKDs7KSB7CisJCW51bV9hY3RpdmUgPSBmc2ctPmludHJlcV9idXN5OworCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0JVRkZFUlM7ICsraSkgeworCQkJYmggPSAmZnNnLT5idWZmaGRzW2ldOworCQkJbnVtX2FjdGl2ZSArPSBiaC0+aW5yZXFfYnVzeSArIGJoLT5vdXRyZXFfYnVzeTsKKwkJfQorCQlpZiAobnVtX2FjdGl2ZSA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChzbGVlcF90aHJlYWQoZnNnKSkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBDbGVhciBvdXQgdGhlIGNvbnRyb2xsZXIncyBmaWZvcyAqLworCWlmIChmc2ctPmJ1bGtfaW5fZW5hYmxlZCkKKwkJdXNiX2VwX2ZpZm9fZmx1c2goZnNnLT5idWxrX2luKTsKKwlpZiAoZnNnLT5idWxrX291dF9lbmFibGVkKQorCQl1c2JfZXBfZmlmb19mbHVzaChmc2ctPmJ1bGtfb3V0KTsKKwlpZiAoZnNnLT5pbnRyX2luX2VuYWJsZWQpCisJCXVzYl9lcF9maWZvX2ZsdXNoKGZzZy0+aW50cl9pbik7CisKKwkvKiBSZXNldCB0aGUgSS9PIGJ1ZmZlciBzdGF0ZXMgYW5kIHBvaW50ZXJzLCB0aGUgU0NTSQorCSAqIHN0YXRlLCBhbmQgdGhlIGV4Y2VwdGlvbi4gIFRoZW4gaW52b2tlIHRoZSBoYW5kbGVyLiAqLworCXNwaW5fbG9ja19pcnEoJmZzZy0+bG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0JVRkZFUlM7ICsraSkgeworCQliaCA9ICZmc2ctPmJ1ZmZoZHNbaV07CisJCWJoLT5zdGF0ZSA9IEJVRl9TVEFURV9FTVBUWTsKKwl9CisJZnNnLT5uZXh0X2J1ZmZoZF90b19maWxsID0gZnNnLT5uZXh0X2J1ZmZoZF90b19kcmFpbiA9CisJCQkmZnNnLT5idWZmaGRzWzBdOworCisJZXhjZXB0aW9uX3JlcV90YWcgPSBmc2ctPmV4Y2VwdGlvbl9yZXFfdGFnOworCW5ld19jb25maWcgPSBmc2ctPm5ld19jb25maWc7CisJb2xkX3N0YXRlID0gZnNnLT5zdGF0ZTsKKworCWlmIChvbGRfc3RhdGUgPT0gRlNHX1NUQVRFX0FCT1JUX0JVTEtfT1VUKQorCQlmc2ctPnN0YXRlID0gRlNHX1NUQVRFX1NUQVRVU19QSEFTRTsKKwllbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IGZzZy0+bmx1bnM7ICsraSkgeworCQkJY3VybHVuID0gJmZzZy0+bHVuc1tpXTsKKwkJCWN1cmx1bi0+cHJldmVudF9tZWRpdW1fcmVtb3ZhbCA9IDA7CisJCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBjdXJsdW4tPnVuaXRfYXR0ZW50aW9uX2RhdGEgPQorCQkJCQlTU19OT19TRU5TRTsKKwkJCWN1cmx1bi0+c2Vuc2VfZGF0YV9pbmZvID0gMDsKKwkJfQorCQlmc2ctPnN0YXRlID0gRlNHX1NUQVRFX0lETEU7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmZnNnLT5sb2NrKTsKKworCS8qIENhcnJ5IG91dCBhbnkgZXh0cmEgYWN0aW9ucyByZXF1aXJlZCBmb3IgdGhlIGV4Y2VwdGlvbiAqLworCXN3aXRjaCAob2xkX3N0YXRlKSB7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisKKwljYXNlIEZTR19TVEFURV9BQk9SVF9CVUxLX09VVDoKKwkJc2VuZF9zdGF0dXMoZnNnKTsKKwkJc3Bpbl9sb2NrX2lycSgmZnNnLT5sb2NrKTsKKwkJaWYgKGZzZy0+c3RhdGUgPT0gRlNHX1NUQVRFX1NUQVRVU19QSEFTRSkKKwkJCWZzZy0+c3RhdGUgPSBGU0dfU1RBVEVfSURMRTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZmc2ctPmxvY2spOworCQlicmVhazsKKworCWNhc2UgRlNHX1NUQVRFX1JFU0VUOgorCQkvKiBJbiBjYXNlIHdlIHdlcmUgZm9yY2VkIGFnYWluc3Qgb3VyIHdpbGwgdG8gaGFsdCBhCisJCSAqIGJ1bGsgZW5kcG9pbnQsIGNsZWFyIHRoZSBoYWx0IG5vdy4gIChUaGUgU3VwZXJIIFVEQworCQkgKiByZXF1aXJlcyB0aGlzLikgKi8KKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDTEVBUl9CVUxLX0hBTFRTLAorCQkJCSZmc2ctPmF0b21pY19iaXRmbGFncykpIHsKKwkJCXVzYl9lcF9jbGVhcl9oYWx0KGZzZy0+YnVsa19pbik7CisJCQl1c2JfZXBfY2xlYXJfaGFsdChmc2ctPmJ1bGtfb3V0KTsKKwkJfQorCisJCWlmICh0cmFuc3BvcnRfaXNfYmJiKCkpIHsKKwkJCWlmIChmc2ctPmVwMF9yZXFfdGFnID09IGV4Y2VwdGlvbl9yZXFfdGFnKQorCQkJCWVwMF9xdWV1ZShmc2cpOwkvLyBDb21wbGV0ZSB0aGUgc3RhdHVzIHN0YWdlCisKKwkJfSBlbHNlIGlmICh0cmFuc3BvcnRfaXNfY2JpKCkpCisJCQlzZW5kX3N0YXR1cyhmc2cpOwkvLyBTdGF0dXMgYnkgaW50ZXJydXB0IHBpcGUKKworCQkvKiBUZWNobmljYWxseSB0aGlzIHNob3VsZCBnbyBoZXJlLCBidXQgaXQgd291bGQgb25seSBiZQorCQkgKiBhIHdhc3RlIG9mIHRpbWUuICBEaXR0byBmb3IgdGhlIElOVEVSRkFDRV9DSEFOR0UgYW5kCisJCSAqIENPTkZJR19DSEFOR0UgY2FzZXMuICovCisJCS8vIGZvciAoaSA9IDA7IGkgPCBmc2ctPm5sdW5zOyArK2kpCisJCS8vCWZzZy0+bHVuc1tpXS51bml0X2F0dGVudGlvbl9kYXRhID0gU1NfUkVTRVRfT0NDVVJSRUQ7CisJCWJyZWFrOworCisJY2FzZSBGU0dfU1RBVEVfSU5URVJGQUNFX0NIQU5HRToKKwkJcmMgPSBkb19zZXRfaW50ZXJmYWNlKGZzZywgMCk7CisJCWlmIChmc2ctPmVwMF9yZXFfdGFnICE9IGV4Y2VwdGlvbl9yZXFfdGFnKQorCQkJYnJlYWs7CisJCWlmIChyYyAhPSAwKQkJCS8vIFNUQUxMIG9uIGVycm9ycworCQkJZnNnX3NldF9oYWx0KGZzZywgZnNnLT5lcDApOworCQllbHNlCQkJCS8vIENvbXBsZXRlIHRoZSBzdGF0dXMgc3RhZ2UKKwkJCWVwMF9xdWV1ZShmc2cpOworCQlicmVhazsKKworCWNhc2UgRlNHX1NUQVRFX0NPTkZJR19DSEFOR0U6CisJCXJjID0gZG9fc2V0X2NvbmZpZyhmc2csIG5ld19jb25maWcpOworCQlpZiAoZnNnLT5lcDBfcmVxX3RhZyAhPSBleGNlcHRpb25fcmVxX3RhZykKKwkJCWJyZWFrOworCQlpZiAocmMgIT0gMCkJCQkvLyBTVEFMTCBvbiBlcnJvcnMKKwkJCWZzZ19zZXRfaGFsdChmc2csIGZzZy0+ZXAwKTsKKwkJZWxzZQkJCQkvLyBDb21wbGV0ZSB0aGUgc3RhdHVzIHN0YWdlCisJCQllcDBfcXVldWUoZnNnKTsKKwkJYnJlYWs7CisKKwljYXNlIEZTR19TVEFURV9ESVNDT05ORUNUOgorCQlmc3luY19hbGwoZnNnKTsKKwkJZG9fc2V0X2NvbmZpZyhmc2csIDApOwkJLy8gVW5jb25maWd1cmVkIHN0YXRlCisJCWJyZWFrOworCisJY2FzZSBGU0dfU1RBVEVfRVhJVDoKKwljYXNlIEZTR19TVEFURV9URVJNSU5BVEVEOgorCQlkb19zZXRfY29uZmlnKGZzZywgMCk7CQkJLy8gRnJlZSByZXNvdXJjZXMKKwkJc3Bpbl9sb2NrX2lycSgmZnNnLT5sb2NrKTsKKwkJZnNnLT5zdGF0ZSA9IEZTR19TVEFURV9URVJNSU5BVEVEOwkvLyBTdG9wIHRoZSB0aHJlYWQKKwkJc3Bpbl91bmxvY2tfaXJxKCZmc2ctPmxvY2spOworCQlicmVhazsKKwl9Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBmc2dfbWFpbl90aHJlYWQodm9pZCAqZnNnXykKK3sKKwlzdHJ1Y3QgZnNnX2RldgkJKmZzZyA9IChzdHJ1Y3QgZnNnX2RldiAqKSBmc2dfOworCisJZnNnLT50aHJlYWRfdGFzayA9IGN1cnJlbnQ7CisKKwkvKiBSZWxlYXNlIGFsbCBvdXIgdXNlcnNwYWNlIHJlc291cmNlcyAqLworCWRhZW1vbml6ZSgiZmlsZS1zdG9yYWdlLWdhZGdldCIpOworCisJLyogQWxsb3cgdGhlIHRocmVhZCB0byBiZSBraWxsZWQgYnkgYSBzaWduYWwsIGJ1dCBzZXQgdGhlIHNpZ25hbCBtYXNrCisJICogdG8gYmxvY2sgZXZlcnl0aGluZyBidXQgSU5ULCBURVJNLCBLSUxMLCBhbmQgVVNSMS4gKi8KKwlzaWdpbml0c2V0aW52KCZmc2ctPnRocmVhZF9zaWduYWxfbWFzaywgc2lnbWFzayhTSUdJTlQpIHwKKwkJCXNpZ21hc2soU0lHVEVSTSkgfCBzaWdtYXNrKFNJR0tJTEwpIHwKKwkJCXNpZ21hc2soU0lHVVNSMSkpOworCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmZnNnLT50aHJlYWRfc2lnbmFsX21hc2ssIE5VTEwpOworCisJLyogQXJyYW5nZSBmb3IgdXNlcnNwYWNlIHJlZmVyZW5jZXMgdG8gYmUgaW50ZXJwcmV0ZWQgYXMga2VybmVsCisJICogcG9pbnRlcnMuICBUaGF0IHdheSB3ZSBjYW4gcGFzcyBhIGtlcm5lbCBwb2ludGVyIHRvIGEgcm91dGluZQorCSAqIHRoYXQgZXhwZWN0cyBhIF9fdXNlciBwb2ludGVyIGFuZCBpdCB3aWxsIHdvcmsgb2theS4gKi8KKwlzZXRfZnMoZ2V0X2RzKCkpOworCisJLyogV2FpdCBmb3IgdGhlIGdhZGdldCByZWdpc3RyYXRpb24gdG8gZmluaXNoIHVwICovCisJd2FpdF9mb3JfY29tcGxldGlvbigmZnNnLT50aHJlYWRfbm90aWZpZXIpOworCisJLyogVGhlIG1haW4gbG9vcCAqLworCXdoaWxlIChmc2ctPnN0YXRlICE9IEZTR19TVEFURV9URVJNSU5BVEVEKSB7CisJCWlmIChleGNlcHRpb25faW5fcHJvZ3Jlc3MoZnNnKSB8fCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJaGFuZGxlX2V4Y2VwdGlvbihmc2cpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIWZzZy0+cnVubmluZykgeworCQkJc2xlZXBfdGhyZWFkKGZzZyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChnZXRfbmV4dF9jb21tYW5kKGZzZykpCisJCQljb250aW51ZTsKKworCQlzcGluX2xvY2tfaXJxKCZmc2ctPmxvY2spOworCQlpZiAoIWV4Y2VwdGlvbl9pbl9wcm9ncmVzcyhmc2cpKQorCQkJZnNnLT5zdGF0ZSA9IEZTR19TVEFURV9EQVRBX1BIQVNFOworCQlzcGluX3VubG9ja19pcnEoJmZzZy0+bG9jayk7CisKKwkJaWYgKGRvX3Njc2lfY29tbWFuZChmc2cpIHx8IGZpbmlzaF9yZXBseShmc2cpKQorCQkJY29udGludWU7CisKKwkJc3Bpbl9sb2NrX2lycSgmZnNnLT5sb2NrKTsKKwkJaWYgKCFleGNlcHRpb25faW5fcHJvZ3Jlc3MoZnNnKSkKKwkJCWZzZy0+c3RhdGUgPSBGU0dfU1RBVEVfU1RBVFVTX1BIQVNFOworCQlzcGluX3VubG9ja19pcnEoJmZzZy0+bG9jayk7CisKKwkJaWYgKHNlbmRfc3RhdHVzKGZzZykpCisJCQljb250aW51ZTsKKworCQlzcGluX2xvY2tfaXJxKCZmc2ctPmxvY2spOworCQlpZiAoIWV4Y2VwdGlvbl9pbl9wcm9ncmVzcyhmc2cpKQorCQkJZnNnLT5zdGF0ZSA9IEZTR19TVEFURV9JRExFOworCQlzcGluX3VubG9ja19pcnEoJmZzZy0+bG9jayk7CisJCX0KKworCWZzZy0+dGhyZWFkX3Rhc2sgPSBOVUxMOworCWZsdXNoX3NpZ25hbHMoY3VycmVudCk7CisKKwkvKiBJbiBjYXNlIHdlIGFyZSBleGl0aW5nIGJlY2F1c2Ugb2YgYSBzaWduYWwsIHVucmVnaXN0ZXIgdGhlCisJICogZ2FkZ2V0IGRyaXZlciBhbmQgY2xvc2UgdGhlIGJhY2tpbmcgZmlsZS4gKi8KKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJFR0lTVEVSRUQsICZmc2ctPmF0b21pY19iaXRmbGFncykpIHsKKwkJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcigmZnNnX2RyaXZlcik7CisJCWNsb3NlX2FsbF9iYWNraW5nX2ZpbGVzKGZzZyk7CisJfQorCisJLyogTGV0IHRoZSB1bmJpbmQgYW5kIGNsZWFudXAgcm91dGluZXMga25vdyB0aGUgdGhyZWFkIGhhcyBleGl0ZWQgKi8KKwljb21wbGV0ZV9hbmRfZXhpdCgmZnNnLT50aHJlYWRfbm90aWZpZXIsIDApOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIElmIHRoZSBuZXh0IHR3byByb3V0aW5lcyBhcmUgY2FsbGVkIHdoaWxlIHRoZSBnYWRnZXQgaXMgcmVnaXN0ZXJlZCwKKyAqIHRoZSBjYWxsZXIgbXVzdCBvd24gZnNnLT5maWxlc2VtIGZvciB3cml0aW5nLiAqLworCitzdGF0aWMgaW50IG9wZW5fYmFja2luZ19maWxlKHN0cnVjdCBsdW4gKmN1cmx1biwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJaW50CQkJCXJvOworCXN0cnVjdCBmaWxlCQkJKmZpbHAgPSBOVUxMOworCWludAkJCQlyYyA9IC1FSU5WQUw7CisJc3RydWN0IGlub2RlCQkJKmlub2RlID0gTlVMTDsKKwlsb2ZmX3QJCQkJc2l6ZTsKKwlsb2ZmX3QJCQkJbnVtX3NlY3RvcnM7CisKKwkvKiBSL1cgaWYgd2UgY2FuLCBSL08gaWYgd2UgbXVzdCAqLworCXJvID0gY3VybHVuLT5ybzsKKwlpZiAoIXJvKSB7CisJCWZpbHAgPSBmaWxwX29wZW4oZmlsZW5hbWUsIE9fUkRXUiB8IE9fTEFSR0VGSUxFLCAwKTsKKwkJaWYgKC1FUk9GUyA9PSBQVFJfRVJSKGZpbHApKQorCQkJcm8gPSAxOworCX0KKwlpZiAocm8pCisJCWZpbHAgPSBmaWxwX29wZW4oZmlsZW5hbWUsIE9fUkRPTkxZIHwgT19MQVJHRUZJTEUsIDApOworCWlmIChJU19FUlIoZmlscCkpIHsKKwkJTElORk8oY3VybHVuLCAidW5hYmxlIHRvIG9wZW4gYmFja2luZyBmaWxlOiAlc1xuIiwgZmlsZW5hbWUpOworCQlyZXR1cm4gUFRSX0VSUihmaWxwKTsKKwl9CisKKwlpZiAoIShmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCisJCXJvID0gMTsKKworCWlmIChmaWxwLT5mX2RlbnRyeSkKKwkJaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpZiAoaW5vZGUgJiYgU19JU0JMSyhpbm9kZS0+aV9tb2RlKSkgeworCQlpZiAoYmRldl9yZWFkX29ubHkoaW5vZGUtPmlfYmRldikpCisJCQlybyA9IDE7CisJfSBlbHNlIGlmICghaW5vZGUgfHwgIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKKwkJTElORk8oY3VybHVuLCAiaW52YWxpZCBmaWxlIHR5cGU6ICVzXG4iLCBmaWxlbmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIElmIHdlIGNhbid0IHJlYWQgdGhlIGZpbGUsIGl0J3Mgbm8gZ29vZC4KKwkgKiBJZiB3ZSBjYW4ndCB3cml0ZSB0aGUgZmlsZSwgdXNlIGl0IHJlYWQtb25seS4gKi8KKwlpZiAoIWZpbHAtPmZfb3AgfHwgIShmaWxwLT5mX29wLT5yZWFkIHx8IGZpbHAtPmZfb3AtPmFpb19yZWFkKSkgeworCQlMSU5GTyhjdXJsdW4sICJmaWxlIG5vdCByZWFkYWJsZTogJXNcbiIsIGZpbGVuYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCWlmICghKGZpbHAtPmZfb3AtPndyaXRlIHx8IGZpbHAtPmZfb3AtPmFpb193cml0ZSkpCisJCXJvID0gMTsKKworCXNpemUgPSBpX3NpemVfcmVhZChpbm9kZS0+aV9tYXBwaW5nLT5ob3N0KTsKKwlpZiAoc2l6ZSA8IDApIHsKKwkJTElORk8oY3VybHVuLCAidW5hYmxlIHRvIGZpbmQgZmlsZSBzaXplOiAlc1xuIiwgZmlsZW5hbWUpOworCQlyYyA9IChpbnQpIHNpemU7CisJCWdvdG8gb3V0OworCX0KKwludW1fc2VjdG9ycyA9IHNpemUgPj4gOTsJLy8gRmlsZSBzaXplIGluIDUxMi1ieXRlIHNlY3RvcnMKKwlpZiAobnVtX3NlY3RvcnMgPT0gMCkgeworCQlMSU5GTyhjdXJsdW4sICJmaWxlIHRvbyBzbWFsbDogJXNcbiIsIGZpbGVuYW1lKTsKKwkJcmMgPSAtRVRPT1NNQUxMOworCQlnb3RvIG91dDsKKwl9CisKKwlnZXRfZmlsZShmaWxwKTsKKwljdXJsdW4tPnJvID0gcm87CisJY3VybHVuLT5maWxwID0gZmlscDsKKwljdXJsdW4tPmZpbGVfbGVuZ3RoID0gc2l6ZTsKKwljdXJsdW4tPm51bV9zZWN0b3JzID0gbnVtX3NlY3RvcnM7CisJTERCRyhjdXJsdW4sICJvcGVuIGJhY2tpbmcgZmlsZTogJXNcbiIsIGZpbGVuYW1lKTsKKwlyYyA9IDA7CisKK291dDoKKwlmaWxwX2Nsb3NlKGZpbHAsIGN1cnJlbnQtPmZpbGVzKTsKKwlyZXR1cm4gcmM7Cit9CisKKworc3RhdGljIHZvaWQgY2xvc2VfYmFja2luZ19maWxlKHN0cnVjdCBsdW4gKmN1cmx1bikKK3sKKwlpZiAoY3VybHVuLT5maWxwKSB7CisJCUxEQkcoY3VybHVuLCAiY2xvc2UgYmFja2luZyBmaWxlXG4iKTsKKwkJZnB1dChjdXJsdW4tPmZpbHApOworCQljdXJsdW4tPmZpbHAgPSBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQgY2xvc2VfYWxsX2JhY2tpbmdfZmlsZXMoc3RydWN0IGZzZ19kZXYgKmZzZykKK3sKKwlpbnQJaTsKKworCWZvciAoaSA9IDA7IGkgPCBmc2ctPm5sdW5zOyArK2kpCisJCWNsb3NlX2JhY2tpbmdfZmlsZSgmZnNnLT5sdW5zW2ldKTsKK30KKworCitzdGF0aWMgc3NpemVfdCBzaG93X3JvKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsdW4JKmN1cmx1biA9IGRldl90b19sdW4oZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjdXJsdW4tPnJvKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsdW4JKmN1cmx1biA9IGRldl90b19sdW4oZGV2KTsKKwlzdHJ1Y3QgZnNnX2RldgkqZnNnID0gKHN0cnVjdCBmc2dfZGV2ICopIGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIJCSpwOworCXNzaXplX3QJCXJjOworCisJZG93bl9yZWFkKCZmc2ctPmZpbGVzZW0pOworCWlmIChiYWNraW5nX2ZpbGVfaXNfb3BlbihjdXJsdW4pKSB7CS8vIEdldCB0aGUgY29tcGxldGUgcGF0aG5hbWUKKwkJcCA9IGRfcGF0aChjdXJsdW4tPmZpbHAtPmZfZGVudHJ5LCBjdXJsdW4tPmZpbHAtPmZfdmZzbW50LAorCQkJCWJ1ZiwgUEFHRV9TSVpFIC0gMSk7CisJCWlmIChJU19FUlIocCkpCisJCQlyYyA9IFBUUl9FUlIocCk7CisJCWVsc2UgeworCQkJcmMgPSBzdHJsZW4ocCk7CisJCQltZW1tb3ZlKGJ1ZiwgcCwgcmMpOworCQkJYnVmW3JjXSA9ICdcbic7CQkvLyBBZGQgYSBuZXdsaW5lCisJCQlidWZbKytyY10gPSAwOworCQl9CisJfSBlbHNlIHsJCQkJLy8gTm8gZmlsZSwgcmV0dXJuIDAgYnl0ZXMKKwkJKmJ1ZiA9IDA7CisJCXJjID0gMDsKKwl9CisJdXBfcmVhZCgmZnNnLT5maWxlc2VtKTsKKwlyZXR1cm4gcmM7Cit9CisKKworc3RhdGljIHNzaXplX3Qgc3RvcmVfcm8oc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzc2l6ZV90CQlyYyA9IGNvdW50OworCXN0cnVjdCBsdW4JKmN1cmx1biA9IGRldl90b19sdW4oZGV2KTsKKwlzdHJ1Y3QgZnNnX2RldgkqZnNnID0gKHN0cnVjdCBmc2dfZGV2ICopIGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludAkJaTsKKworCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmaSkgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBBbGxvdyB0aGUgd3JpdGUtZW5hYmxlIHN0YXR1cyB0byBjaGFuZ2Ugb25seSB3aGlsZSB0aGUgYmFja2luZyBmaWxlCisJICogaXMgY2xvc2VkLiAqLworCWRvd25fcmVhZCgmZnNnLT5maWxlc2VtKTsKKwlpZiAoYmFja2luZ19maWxlX2lzX29wZW4oY3VybHVuKSkgeworCQlMREJHKGN1cmx1biwgInJlYWQtb25seSBzdGF0dXMgY2hhbmdlIHByZXZlbnRlZFxuIik7CisJCXJjID0gLUVCVVNZOworCX0gZWxzZSB7CisJCWN1cmx1bi0+cm8gPSAhIWk7CisJCUxEQkcoY3VybHVuLCAicmVhZC1vbmx5IHN0YXR1cyBzZXQgdG8gJWRcbiIsIGN1cmx1bi0+cm8pOworCX0KKwl1cF9yZWFkKCZmc2ctPmZpbGVzZW0pOworCXJldHVybiByYzsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBsdW4JKmN1cmx1biA9IGRldl90b19sdW4oZGV2KTsKKwlzdHJ1Y3QgZnNnX2RldgkqZnNnID0gKHN0cnVjdCBmc2dfZGV2ICopIGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludAkJcmMgPSAwOworCisJaWYgKGN1cmx1bi0+cHJldmVudF9tZWRpdW1fcmVtb3ZhbCAmJiBiYWNraW5nX2ZpbGVfaXNfb3BlbihjdXJsdW4pKSB7CisJCUxEQkcoY3VybHVuLCAiZWplY3QgYXR0ZW1wdCBwcmV2ZW50ZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOwkJCQkvLyAiRG9vciBpcyBsb2NrZWQiCisJfQorCisJLyogUmVtb3ZlIGEgdHJhaWxpbmcgbmV3bGluZSAqLworCWlmIChjb3VudCA+IDAgJiYgYnVmW2NvdW50LTFdID09ICdcbicpCisJCSgoY2hhciAqKSBidWYpW2NvdW50LTFdID0gMDsJCS8vIFVnaCEKKworCS8qIEVqZWN0IGN1cnJlbnQgbWVkaXVtICovCisJZG93bl93cml0ZSgmZnNnLT5maWxlc2VtKTsKKwlpZiAoYmFja2luZ19maWxlX2lzX29wZW4oY3VybHVuKSkgeworCQljbG9zZV9iYWNraW5nX2ZpbGUoY3VybHVuKTsKKwkJY3VybHVuLT51bml0X2F0dGVudGlvbl9kYXRhID0gU1NfTUVESVVNX05PVF9QUkVTRU5UOworCX0KKworCS8qIExvYWQgbmV3IG1lZGl1bSAqLworCWlmIChjb3VudCA+IDAgJiYgYnVmWzBdKSB7CisJCXJjID0gb3Blbl9iYWNraW5nX2ZpbGUoY3VybHVuLCBidWYpOworCQlpZiAocmMgPT0gMCkKKwkJCWN1cmx1bi0+dW5pdF9hdHRlbnRpb25fZGF0YSA9CisJCQkJCVNTX05PVF9SRUFEWV9UT19SRUFEWV9UUkFOU0lUSU9OOworCX0KKwl1cF93cml0ZSgmZnNnLT5maWxlc2VtKTsKKwlyZXR1cm4gKHJjIDwgMCA/IHJjIDogY291bnQpOworfQorCisKKy8qIFRoZSB3cml0ZSBwZXJtaXNzaW9ucyBhbmQgc3RvcmVfeHh4IHBvaW50ZXJzIGFyZSBzZXQgaW4gZnNnX2JpbmQoKSAqLworc3RhdGljIERFVklDRV9BVFRSKHJvLCAwNDQ0LCBzaG93X3JvLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihmaWxlLCAwNDQ0LCBzaG93X2ZpbGUsIE5VTEwpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIGx1bl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZnNnX2RldgkqZnNnID0gKHN0cnVjdCBmc2dfZGV2ICopIGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJY29tcGxldGUoJmZzZy0+bHVuX3JlbGVhc2VkKTsKK30KKworc3RhdGljIHZvaWQgZnNnX3VuYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBmc2dfZGV2CQkqZnNnID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CisJaW50CQkJaTsKKwlzdHJ1Y3QgbHVuCQkqY3VybHVuOworCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxID0gZnNnLT5lcDByZXE7CisKKwlEQkcoZnNnLCAidW5iaW5kXG4iKTsKKwljbGVhcl9iaXQoUkVHSVNURVJFRCwgJmZzZy0+YXRvbWljX2JpdGZsYWdzKTsKKworCS8qIFVucmVnaXN0ZXIgdGhlIHN5c2ZzIGF0dHJpYnV0ZSBmaWxlcyBhbmQgdGhlIExVTnMgKi8KKwlpbml0X2NvbXBsZXRpb24oJmZzZy0+bHVuX3JlbGVhc2VkKTsKKwlmb3IgKGkgPSAwOyBpIDwgZnNnLT5ubHVuczsgKytpKSB7CisJCWN1cmx1biA9ICZmc2ctPmx1bnNbaV07CisJCWlmIChjdXJsdW4tPnJlZ2lzdGVyZWQpIHsKKwkJCWRldmljZV9yZW1vdmVfZmlsZSgmY3VybHVuLT5kZXYsICZkZXZfYXR0cl9ybyk7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmN1cmx1bi0+ZGV2LCAmZGV2X2F0dHJfZmlsZSk7CisJCQlkZXZpY2VfdW5yZWdpc3RlcigmY3VybHVuLT5kZXYpOworCQkJd2FpdF9mb3JfY29tcGxldGlvbigmZnNnLT5sdW5fcmVsZWFzZWQpOworCQkJY3VybHVuLT5yZWdpc3RlcmVkID0gMDsKKwkJfQorCX0KKworCS8qIElmIHRoZSB0aHJlYWQgaXNuJ3QgYWxyZWFkeSBkZWFkLCB0ZWxsIGl0IHRvIGV4aXQgbm93ICovCisJaWYgKGZzZy0+c3RhdGUgIT0gRlNHX1NUQVRFX1RFUk1JTkFURUQpIHsKKwkJcmFpc2VfZXhjZXB0aW9uKGZzZywgRlNHX1NUQVRFX0VYSVQpOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZmc2ctPnRocmVhZF9ub3RpZmllcik7CisKKwkJLyogVGhlIGNsZWFudXAgcm91dGluZSB3YWl0cyBmb3IgdGhpcyBjb21wbGV0aW9uIGFsc28gKi8KKwkJY29tcGxldGUoJmZzZy0+dGhyZWFkX25vdGlmaWVyKTsKKwl9CisKKwkvKiBGcmVlIHRoZSBkYXRhIGJ1ZmZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0JVRkZFUlM7ICsraSkgeworCQlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSAmZnNnLT5idWZmaGRzW2ldOworCisJCWlmIChiaC0+YnVmKQorCQkJdXNiX2VwX2ZyZWVfYnVmZmVyKGZzZy0+YnVsa19pbiwgYmgtPmJ1ZiwgYmgtPmRtYSwKKwkJCQkJbW9kX2RhdGEuYnVmbGVuKTsKKwl9CisKKwkvKiBGcmVlIHRoZSByZXF1ZXN0IGFuZCBidWZmZXIgZm9yIGVuZHBvaW50IDAgKi8KKwlpZiAocmVxKSB7CisJCWlmIChyZXEtPmJ1ZikKKwkJCXVzYl9lcF9mcmVlX2J1ZmZlcihmc2ctPmVwMCwgcmVxLT5idWYsCisJCQkJCXJlcS0+ZG1hLCBFUDBfQlVGU0laRSk7CisJCXVzYl9lcF9mcmVlX3JlcXVlc3QoZnNnLT5lcDAsIHJlcSk7CisJfQorCisJc2V0X2dhZGdldF9kYXRhKGdhZGdldCwgTlVMTCk7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgY2hlY2tfcGFyYW1ldGVycyhzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCWludAlwcm90OworCisJLyogU3RvcmUgdGhlIGRlZmF1bHQgdmFsdWVzICovCisJbW9kX2RhdGEudHJhbnNwb3J0X3R5cGUgPSBVU0JfUFJfQlVMSzsKKwltb2RfZGF0YS50cmFuc3BvcnRfbmFtZSA9ICJCdWxrLW9ubHkiOworCW1vZF9kYXRhLnByb3RvY29sX3R5cGUgPSBVU0JfU0NfU0NTSTsKKwltb2RfZGF0YS5wcm90b2NvbF9uYW1lID0gIlRyYW5zcGFyZW50IFNDU0kiOworCisJaWYgKGdhZGdldF9pc19zaChmc2ctPmdhZGdldCkpCisJCW1vZF9kYXRhLmNhbl9zdGFsbCA9IDA7CisKKwlpZiAobW9kX2RhdGEucmVsZWFzZSA9PSAweGZmZmYpIHsJLy8gUGFyYW1ldGVyIHdhc24ndCBzZXQKKwkJaWYgKGdhZGdldF9pc19uZXQyMjgwKGZzZy0+Z2FkZ2V0KSkKKwkJCW1vZF9kYXRhLnJlbGVhc2UgPSAweDAzMDE7CisJCWVsc2UgaWYgKGdhZGdldF9pc19kdW1teShmc2ctPmdhZGdldCkpCisJCQltb2RfZGF0YS5yZWxlYXNlID0gMHgwMzAyOworCQllbHNlIGlmIChnYWRnZXRfaXNfcHhhKGZzZy0+Z2FkZ2V0KSkKKwkJCW1vZF9kYXRhLnJlbGVhc2UgPSAweDAzMDM7CisJCWVsc2UgaWYgKGdhZGdldF9pc19zaChmc2ctPmdhZGdldCkpCisJCQltb2RfZGF0YS5yZWxlYXNlID0gMHgwMzA0OworCisJCS8qIFRoZSBzYTExMDAgY29udHJvbGxlciBpcyBub3Qgc3VwcG9ydGVkICovCisKKwkJZWxzZSBpZiAoZ2FkZ2V0X2lzX2dva3UoZnNnLT5nYWRnZXQpKQorCQkJbW9kX2RhdGEucmVsZWFzZSA9IDB4MDMwNjsKKwkJZWxzZSBpZiAoZ2FkZ2V0X2lzX21xMTF4eChmc2ctPmdhZGdldCkpCisJCQltb2RfZGF0YS5yZWxlYXNlID0gMHgwMzA3OworCQllbHNlIGlmIChnYWRnZXRfaXNfb21hcChmc2ctPmdhZGdldCkpCisJCQltb2RfZGF0YS5yZWxlYXNlID0gMHgwMzA4OworCQllbHNlIGlmIChnYWRnZXRfaXNfbGg3YTQweChmc2ctPmdhZGdldCkpCisJCQltb2RfZGF0YS5yZWxlYXNlID0gMHgwMzA5OworCQllbHNlIGlmIChnYWRnZXRfaXNfbjk2MDQoZnNnLT5nYWRnZXQpKQorCQkJbW9kX2RhdGEucmVsZWFzZSA9IDB4MDMxMDsKKwkJZWxzZSBpZiAoZ2FkZ2V0X2lzX3B4YTI3eChmc2ctPmdhZGdldCkpCisJCQltb2RfZGF0YS5yZWxlYXNlID0gMHgwMzExOworCQllbHNlIGlmIChnYWRnZXRfaXNfczNjMjQxMChnYWRnZXQpKQorCQkJbW9kX2RhdGEucmVsZWFzZSA9IDB4MDMxMjsKKwkJZWxzZSBpZiAoZ2FkZ2V0X2lzX2F0OTEoZnNnLT5nYWRnZXQpKQorCQkJbW9kX2RhdGEucmVsZWFzZSA9IDB4MDMxMzsKKwkJZWxzZSB7CisJCQlXQVJOKGZzZywgImNvbnRyb2xsZXIgJyVzJyBub3QgcmVjb2duaXplZFxuIiwKKwkJCQlmc2ctPmdhZGdldC0+bmFtZSk7CisJCQltb2RfZGF0YS5yZWxlYXNlID0gMHgwMzk5OworCQl9CisJfQorCisJcHJvdCA9IHNpbXBsZV9zdHJ0b2wobW9kX2RhdGEucHJvdG9jb2xfcGFybSwgTlVMTCwgMCk7CisKKyNpZmRlZiBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUCisJaWYgKHN0cm5pY21wKG1vZF9kYXRhLnRyYW5zcG9ydF9wYXJtLCAiQkJCIiwgMTApID09IDApIHsKKwkJOwkJLy8gVXNlIGRlZmF1bHQgc2V0dGluZworCX0gZWxzZSBpZiAoc3RybmljbXAobW9kX2RhdGEudHJhbnNwb3J0X3Bhcm0sICJDQiIsIDEwKSA9PSAwKSB7CisJCW1vZF9kYXRhLnRyYW5zcG9ydF90eXBlID0gVVNCX1BSX0NCOworCQltb2RfZGF0YS50cmFuc3BvcnRfbmFtZSA9ICJDb250cm9sLUJ1bGsiOworCX0gZWxzZSBpZiAoc3RybmljbXAobW9kX2RhdGEudHJhbnNwb3J0X3Bhcm0sICJDQkkiLCAxMCkgPT0gMCkgeworCQltb2RfZGF0YS50cmFuc3BvcnRfdHlwZSA9IFVTQl9QUl9DQkk7CisJCW1vZF9kYXRhLnRyYW5zcG9ydF9uYW1lID0gIkNvbnRyb2wtQnVsay1JbnRlcnJ1cHQiOworCX0gZWxzZSB7CisJCUVSUk9SKGZzZywgImludmFsaWQgdHJhbnNwb3J0OiAlc1xuIiwgbW9kX2RhdGEudHJhbnNwb3J0X3Bhcm0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc3RybmljbXAobW9kX2RhdGEucHJvdG9jb2xfcGFybSwgIlNDU0kiLCAxMCkgPT0gMCB8fAorCQkJcHJvdCA9PSBVU0JfU0NfU0NTSSkgeworCQk7CQkvLyBVc2UgZGVmYXVsdCBzZXR0aW5nCisJfSBlbHNlIGlmIChzdHJuaWNtcChtb2RfZGF0YS5wcm90b2NvbF9wYXJtLCAiUkJDIiwgMTApID09IDAgfHwKKwkJCXByb3QgPT0gVVNCX1NDX1JCQykgeworCQltb2RfZGF0YS5wcm90b2NvbF90eXBlID0gVVNCX1NDX1JCQzsKKwkJbW9kX2RhdGEucHJvdG9jb2xfbmFtZSA9ICJSQkMiOworCX0gZWxzZSBpZiAoc3RybmljbXAobW9kX2RhdGEucHJvdG9jb2xfcGFybSwgIjgwMjAiLCA0KSA9PSAwIHx8CisJCQlzdHJuaWNtcChtb2RfZGF0YS5wcm90b2NvbF9wYXJtLCAiQVRBUEkiLCAxMCkgPT0gMCB8fAorCQkJcHJvdCA9PSBVU0JfU0NfODAyMCkgeworCQltb2RfZGF0YS5wcm90b2NvbF90eXBlID0gVVNCX1NDXzgwMjA7CisJCW1vZF9kYXRhLnByb3RvY29sX25hbWUgPSAiODAyMGkgKEFUQVBJKSI7CisJfSBlbHNlIGlmIChzdHJuaWNtcChtb2RfZGF0YS5wcm90b2NvbF9wYXJtLCAiUUlDIiwgMykgPT0gMCB8fAorCQkJcHJvdCA9PSBVU0JfU0NfUUlDKSB7CisJCW1vZF9kYXRhLnByb3RvY29sX3R5cGUgPSBVU0JfU0NfUUlDOworCQltb2RfZGF0YS5wcm90b2NvbF9uYW1lID0gIlFJQy0xNTciOworCX0gZWxzZSBpZiAoc3RybmljbXAobW9kX2RhdGEucHJvdG9jb2xfcGFybSwgIlVGSSIsIDEwKSA9PSAwIHx8CisJCQlwcm90ID09IFVTQl9TQ19VRkkpIHsKKwkJbW9kX2RhdGEucHJvdG9jb2xfdHlwZSA9IFVTQl9TQ19VRkk7CisJCW1vZF9kYXRhLnByb3RvY29sX25hbWUgPSAiVUZJIjsKKwl9IGVsc2UgaWYgKHN0cm5pY21wKG1vZF9kYXRhLnByb3RvY29sX3Bhcm0sICI4MDcwIiwgNCkgPT0gMCB8fAorCQkJcHJvdCA9PSBVU0JfU0NfODA3MCkgeworCQltb2RfZGF0YS5wcm90b2NvbF90eXBlID0gVVNCX1NDXzgwNzA7CisJCW1vZF9kYXRhLnByb3RvY29sX25hbWUgPSAiODA3MGkiOworCX0gZWxzZSB7CisJCUVSUk9SKGZzZywgImludmFsaWQgcHJvdG9jb2w6ICVzXG4iLCBtb2RfZGF0YS5wcm90b2NvbF9wYXJtKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbW9kX2RhdGEuYnVmbGVuICY9IFBBR0VfQ0FDSEVfTUFTSzsKKwlpZiAobW9kX2RhdGEuYnVmbGVuIDw9IDApIHsKKwkJRVJST1IoZnNnLCAiaW52YWxpZCBidWZsZW5cbiIpOworCQlyZXR1cm4gLUVUT09TTUFMTDsKKwl9CisjZW5kaWYgLyogQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCAqLworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgZnNnX2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgZnNnX2RldgkJKmZzZyA9IHRoZV9mc2c7CisJaW50CQkJcmM7CisJaW50CQkJaTsKKwlzdHJ1Y3QgbHVuCQkqY3VybHVuOworCXN0cnVjdCB1c2JfZXAJCSplcDsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcTsKKwljaGFyCQkJKnBhdGhidWYsICpwOworCisJZnNnLT5nYWRnZXQgPSBnYWRnZXQ7CisJc2V0X2dhZGdldF9kYXRhKGdhZGdldCwgZnNnKTsKKwlmc2ctPmVwMCA9IGdhZGdldC0+ZXAwOworCWZzZy0+ZXAwLT5kcml2ZXJfZGF0YSA9IGZzZzsKKworCWlmICgocmMgPSBjaGVja19wYXJhbWV0ZXJzKGZzZykpICE9IDApCisJCWdvdG8gb3V0OworCisJaWYgKG1vZF9kYXRhLnJlbW92YWJsZSkgewkvLyBFbmFibGUgdGhlIHN0b3JlX3h4eCBhdHRyaWJ1dGVzCisJCWRldl9hdHRyX3JvLmF0dHIubW9kZSA9IGRldl9hdHRyX2ZpbGUuYXR0ci5tb2RlID0gMDY0NDsKKwkJZGV2X2F0dHJfcm8uc3RvcmUgPSBzdG9yZV9ybzsKKwkJZGV2X2F0dHJfZmlsZS5zdG9yZSA9IHN0b3JlX2ZpbGU7CisJfQorCisJLyogRmluZCBvdXQgaG93IG1hbnkgTFVOcyB0aGVyZSBzaG91bGQgYmUgKi8KKwlpID0gbW9kX2RhdGEubmx1bnM7CisJaWYgKGkgPT0gMCkKKwkJaSA9IG1heChtb2RfZGF0YS5udW1fZmlsZW5hbWVzLCAxKTsKKwlpZiAoaSA+IE1BWF9MVU5TKSB7CisJCUVSUk9SKGZzZywgImludmFsaWQgbnVtYmVyIG9mIExVTnM6ICVkXG4iLCBpKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBDcmVhdGUgdGhlIExVTnMsIG9wZW4gdGhlaXIgYmFja2luZyBmaWxlcywgYW5kIHJlZ2lzdGVyIHRoZQorCSAqIExVTiBkZXZpY2VzIGluIHN5c2ZzLiAqLworCWZzZy0+bHVucyA9IGttYWxsb2MoaSAqIHNpemVvZihzdHJ1Y3QgbHVuKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmc2ctPmx1bnMpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJbWVtc2V0KGZzZy0+bHVucywgMCwgaSAqIHNpemVvZihzdHJ1Y3QgbHVuKSk7CisJZnNnLT5ubHVucyA9IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnNnLT5ubHVuczsgKytpKSB7CisJCWN1cmx1biA9ICZmc2ctPmx1bnNbaV07CisJCWN1cmx1bi0+cm8gPSByb1tpXTsKKwkJY3VybHVuLT5kZXYucGFyZW50ID0gJmdhZGdldC0+ZGV2OworCQljdXJsdW4tPmRldi5kcml2ZXIgPSAmZnNnX2RyaXZlci5kcml2ZXI7CisJCWRldl9zZXRfZHJ2ZGF0YSgmY3VybHVuLT5kZXYsIGZzZyk7CisJCXNucHJpbnRmKGN1cmx1bi0+ZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUsCisJCQkJIiVzLWx1biVkIiwgZ2FkZ2V0LT5kZXYuYnVzX2lkLCBpKTsKKworCQlpZiAoKHJjID0gZGV2aWNlX3JlZ2lzdGVyKCZjdXJsdW4tPmRldikpICE9IDApCisJCQlJTkZPKGZzZywgImZhaWxlZCB0byByZWdpc3RlciBMVU4lZDogJWRcbiIsIGksIHJjKTsKKwkJZWxzZSB7CisJCQljdXJsdW4tPnJlZ2lzdGVyZWQgPSAxOworCQkJY3VybHVuLT5kZXYucmVsZWFzZSA9IGx1bl9yZWxlYXNlOworCQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZjdXJsdW4tPmRldiwgJmRldl9hdHRyX3JvKTsKKwkJCWRldmljZV9jcmVhdGVfZmlsZSgmY3VybHVuLT5kZXYsICZkZXZfYXR0cl9maWxlKTsKKwkJfQorCisJCWlmIChmaWxlW2ldICYmICpmaWxlW2ldKSB7CisJCQlpZiAoKHJjID0gb3Blbl9iYWNraW5nX2ZpbGUoY3VybHVuLCBmaWxlW2ldKSkgIT0gMCkKKwkJCQlnb3RvIG91dDsKKwkJfSBlbHNlIGlmICghbW9kX2RhdGEucmVtb3ZhYmxlKSB7CisJCQlFUlJPUihmc2csICJubyBmaWxlIGdpdmVuIGZvciBMVU4lZFxuIiwgaSk7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIEZpbmQgYWxsIHRoZSBlbmRwb2ludHMgd2Ugd2lsbCB1c2UgKi8KKwl1c2JfZXBfYXV0b2NvbmZpZ19yZXNldChnYWRnZXQpOworCWVwID0gdXNiX2VwX2F1dG9jb25maWcoZ2FkZ2V0LCAmZnNfYnVsa19pbl9kZXNjKTsKKwlpZiAoIWVwKQorCQlnb3RvIGF1dG9jb25mX2ZhaWw7CisJZXAtPmRyaXZlcl9kYXRhID0gZnNnOwkJLy8gY2xhaW0gdGhlIGVuZHBvaW50CisJZnNnLT5idWxrX2luID0gZXA7CisKKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGdhZGdldCwgJmZzX2J1bGtfb3V0X2Rlc2MpOworCWlmICghZXApCisJCWdvdG8gYXV0b2NvbmZfZmFpbDsKKwllcC0+ZHJpdmVyX2RhdGEgPSBmc2c7CQkvLyBjbGFpbSB0aGUgZW5kcG9pbnQKKwlmc2ctPmJ1bGtfb3V0ID0gZXA7CisKKwlpZiAodHJhbnNwb3J0X2lzX2NiaSgpKSB7CisJCWVwID0gdXNiX2VwX2F1dG9jb25maWcoZ2FkZ2V0LCAmZnNfaW50cl9pbl9kZXNjKTsKKwkJaWYgKCFlcCkKKwkJCWdvdG8gYXV0b2NvbmZfZmFpbDsKKwkJZXAtPmRyaXZlcl9kYXRhID0gZnNnOwkJLy8gY2xhaW0gdGhlIGVuZHBvaW50CisJCWZzZy0+aW50cl9pbiA9IGVwOworCX0KKworCS8qIEZpeCB1cCB0aGUgZGVzY3JpcHRvcnMgKi8KKwlkZXZpY2VfZGVzYy5iTWF4UGFja2V0U2l6ZTAgPSBmc2ctPmVwMC0+bWF4cGFja2V0OworCWRldmljZV9kZXNjLmlkVmVuZG9yID0gY3B1X3RvX2xlMTYobW9kX2RhdGEudmVuZG9yKTsKKwlkZXZpY2VfZGVzYy5pZFByb2R1Y3QgPSBjcHVfdG9fbGUxNihtb2RfZGF0YS5wcm9kdWN0KTsKKwlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBjcHVfdG9fbGUxNihtb2RfZGF0YS5yZWxlYXNlKTsKKworCWkgPSAodHJhbnNwb3J0X2lzX2NiaSgpID8gMyA6IDIpOwkvLyBOdW1iZXIgb2YgZW5kcG9pbnRzCisJaW50Zl9kZXNjLmJOdW1FbmRwb2ludHMgPSBpOworCWludGZfZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBtb2RfZGF0YS5wcm90b2NvbF90eXBlOworCWludGZfZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wgPSBtb2RfZGF0YS50cmFuc3BvcnRfdHlwZTsKKwlmc19mdW5jdGlvbltpICsgRlNfRlVOQ1RJT05fUFJFX0VQX0VOVFJJRVNdID0gTlVMTDsKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCWhzX2Z1bmN0aW9uW2kgKyBIU19GVU5DVElPTl9QUkVfRVBfRU5UUklFU10gPSBOVUxMOworCisJLyogQXNzdW1lIGVwMCB1c2VzIHRoZSBzYW1lIG1heHBhY2tldCB2YWx1ZSBmb3IgYm90aCBzcGVlZHMgKi8KKwlkZXZfcXVhbGlmaWVyLmJNYXhQYWNrZXRTaXplMCA9IGZzZy0+ZXAwLT5tYXhwYWNrZXQ7CisKKwkvKiBBc3N1bWUgdGhhdCBhbGwgZW5kcG9pbnQgYWRkcmVzc2VzIGFyZSB0aGUgc2FtZSBmb3IgYm90aCBzcGVlZHMgKi8KKwloc19idWxrX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9IGZzX2J1bGtfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCWhzX2J1bGtfb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9IGZzX2J1bGtfb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKwloc19pbnRyX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9IGZzX2ludHJfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworI2VuZGlmCisKKwlpZiAoZ2FkZ2V0LT5pc19vdGcpIHsKKwkJb3RnX2Rlc2MuYm1BdHRyaWJ1dGVzIHw9IFVTQl9PVEdfSE5QLAorCQljb25maWdfZGVzYy5ibUF0dHJpYnV0ZXMgfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOworCX0KKworCXJjID0gLUVOT01FTTsKKworCS8qIEFsbG9jYXRlIHRoZSByZXF1ZXN0IGFuZCBidWZmZXIgZm9yIGVuZHBvaW50IDAgKi8KKwlmc2ctPmVwMHJlcSA9IHJlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0KGZzZy0+ZXAwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcSkKKwkJZ290byBvdXQ7CisJcmVxLT5idWYgPSB1c2JfZXBfYWxsb2NfYnVmZmVyKGZzZy0+ZXAwLCBFUDBfQlVGU0laRSwKKwkJCSZyZXEtPmRtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXEtPmJ1ZikKKwkJZ290byBvdXQ7CisJcmVxLT5jb21wbGV0ZSA9IGVwMF9jb21wbGV0ZTsKKworCS8qIEFsbG9jYXRlIHRoZSBkYXRhIGJ1ZmZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0JVRkZFUlM7ICsraSkgeworCQlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSAmZnNnLT5idWZmaGRzW2ldOworCisJCWJoLT5idWYgPSB1c2JfZXBfYWxsb2NfYnVmZmVyKGZzZy0+YnVsa19pbiwgbW9kX2RhdGEuYnVmbGVuLAorCQkJCSZiaC0+ZG1hLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFiaC0+YnVmKQorCQkJZ290byBvdXQ7CisJCWJoLT5uZXh0ID0gYmggKyAxOworCX0KKwlmc2ctPmJ1ZmZoZHNbTlVNX0JVRkZFUlMgLSAxXS5uZXh0ID0gJmZzZy0+YnVmZmhkc1swXTsKKworCS8qIFRoaXMgc2hvdWxkIHJlZmxlY3QgdGhlIGFjdHVhbCBnYWRnZXQgcG93ZXIgc291cmNlICovCisJdXNiX2dhZGdldF9zZXRfc2VsZnBvd2VyZWQoZ2FkZ2V0KTsKKworCXNucHJpbnRmKG1hbnVmYWN0dXJlciwgc2l6ZW9mIG1hbnVmYWN0dXJlciwgIiVzICVzIHdpdGggJXMiLAorCQkJc3lzdGVtX3V0c25hbWUuc3lzbmFtZSwgc3lzdGVtX3V0c25hbWUucmVsZWFzZSwKKwkJCWdhZGdldC0+bmFtZSk7CisKKwkvKiBPbiBhIHJlYWwgZGV2aWNlLCBzZXJpYWxbXSB3b3VsZCBiZSBsb2FkZWQgZnJvbSBwZXJtYW5lbnQKKwkgKiBzdG9yYWdlLiAgV2UganVzdCBlbmNvZGUgaXQgZnJvbSB0aGUgZHJpdmVyIHZlcnNpb24gc3RyaW5nLiAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc2VyaWFsKSAtIDI7IGkgKz0gMikgeworCQl1bnNpZ25lZCBjaGFyCQljID0gRFJJVkVSX1ZFUlNJT05baSAvIDJdOworCisJCWlmICghYykKKwkJCWJyZWFrOworCQlzcHJpbnRmKCZzZXJpYWxbaV0sICIlMDJYIiwgYyk7CisJfQorCisJaWYgKChyYyA9IGtlcm5lbF90aHJlYWQoZnNnX21haW5fdGhyZWFkLCBmc2csIChDTE9ORV9WTSB8IENMT05FX0ZTIHwKKwkJCUNMT05FX0ZJTEVTKSkpIDwgMCkKKwkJZ290byBvdXQ7CisJZnNnLT50aHJlYWRfcGlkID0gcmM7CisKKwlJTkZPKGZzZywgRFJJVkVSX0RFU0MgIiwgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKKwlJTkZPKGZzZywgIk51bWJlciBvZiBMVU5zPSVkXG4iLCBmc2ctPm5sdW5zKTsKKworCXBhdGhidWYgPSBrbWFsbG9jKFBBVEhfTUFYLCBHRlBfS0VSTkVMKTsKKwlmb3IgKGkgPSAwOyBpIDwgZnNnLT5ubHVuczsgKytpKSB7CisJCWN1cmx1biA9ICZmc2ctPmx1bnNbaV07CisJCWlmIChiYWNraW5nX2ZpbGVfaXNfb3BlbihjdXJsdW4pKSB7CisJCQlwID0gTlVMTDsKKwkJCWlmIChwYXRoYnVmKSB7CisJCQkJcCA9IGRfcGF0aChjdXJsdW4tPmZpbHAtPmZfZGVudHJ5LAorCQkJCQljdXJsdW4tPmZpbHAtPmZfdmZzbW50LAorCQkJCQlwYXRoYnVmLCBQQVRIX01BWCk7CisJCQkJaWYgKElTX0VSUihwKSkKKwkJCQkJcCA9IE5VTEw7CisJCQl9CisJCQlMSU5GTyhjdXJsdW4sICJybz0lZCwgZmlsZTogJXNcbiIsCisJCQkJCWN1cmx1bi0+cm8sIChwID8gcCA6ICIoZXJyb3IpIikpOworCQl9CisJfQorCWtmcmVlKHBhdGhidWYpOworCisJREJHKGZzZywgInRyYW5zcG9ydD0lcyAoeCUwMngpXG4iLAorCQkJbW9kX2RhdGEudHJhbnNwb3J0X25hbWUsIG1vZF9kYXRhLnRyYW5zcG9ydF90eXBlKTsKKwlEQkcoZnNnLCAicHJvdG9jb2w9JXMgKHglMDJ4KVxuIiwKKwkJCW1vZF9kYXRhLnByb3RvY29sX25hbWUsIG1vZF9kYXRhLnByb3RvY29sX3R5cGUpOworCURCRyhmc2csICJWZW5kb3JJRD14JTA0eCwgUHJvZHVjdElEPXglMDR4LCBSZWxlYXNlPXglMDR4XG4iLAorCQkJbW9kX2RhdGEudmVuZG9yLCBtb2RfZGF0YS5wcm9kdWN0LCBtb2RfZGF0YS5yZWxlYXNlKTsKKwlEQkcoZnNnLCAicmVtb3ZhYmxlPSVkLCBzdGFsbD0lZCwgYnVmbGVuPSV1XG4iLAorCQkJbW9kX2RhdGEucmVtb3ZhYmxlLCBtb2RfZGF0YS5jYW5fc3RhbGwsCisJCQltb2RfZGF0YS5idWZsZW4pOworCURCRyhmc2csICJJL08gdGhyZWFkIHBpZDogJWRcbiIsIGZzZy0+dGhyZWFkX3BpZCk7CisJcmV0dXJuIDA7CisKK2F1dG9jb25mX2ZhaWw6CisJRVJST1IoZnNnLCAidW5hYmxlIHRvIGF1dG9jb25maWd1cmUgYWxsIGVuZHBvaW50c1xuIik7CisJcmMgPSAtRU5PVFNVUFA7CisKK291dDoKKwlmc2ctPnN0YXRlID0gRlNHX1NUQVRFX1RFUk1JTkFURUQ7CS8vIFRoZSB0aHJlYWQgaXMgZGVhZAorCWZzZ191bmJpbmQoZ2FkZ2V0KTsKKwljbG9zZV9hbGxfYmFja2luZ19maWxlcyhmc2cpOworCXJldHVybiByYzsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBmc2dfc3VzcGVuZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBmc2dfZGV2CQkqZnNnID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CisKKwlEQkcoZnNnLCAic3VzcGVuZFxuIik7CisJc2V0X2JpdChTVVNQRU5ERUQsICZmc2ctPmF0b21pY19iaXRmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGZzZ19yZXN1bWUoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgZnNnX2RldgkJKmZzZyA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOworCisJREJHKGZzZywgInJlc3VtZVxuIik7CisJY2xlYXJfYml0KFNVU1BFTkRFRCwgJmZzZy0+YXRvbWljX2JpdGZsYWdzKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyCQlmc2dfZHJpdmVyID0geworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCS5zcGVlZAkJPSBVU0JfU1BFRURfSElHSCwKKyNlbHNlCisJLnNwZWVkCQk9IFVTQl9TUEVFRF9GVUxMLAorI2VuZGlmCisJLmZ1bmN0aW9uCT0gKGNoYXIgKikgbG9uZ25hbWUsCisJLmJpbmQJCT0gZnNnX2JpbmQsCisJLnVuYmluZAkJPSBmc2dfdW5iaW5kLAorCS5kaXNjb25uZWN0CT0gZnNnX2Rpc2Nvbm5lY3QsCisJLnNldHVwCQk9IGZzZ19zZXR1cCwKKwkuc3VzcGVuZAk9IGZzZ19zdXNwZW5kLAorCS5yZXN1bWUJCT0gZnNnX3Jlc3VtZSwKKworCS5kcml2ZXIJCT0geworCQkubmFtZQkJPSAoY2hhciAqKSBzaG9ydG5hbWUsCisJCS8vIC5yZWxlYXNlID0gLi4uCisJCS8vIC5zdXNwZW5kID0gLi4uCisJCS8vIC5yZXN1bWUgPSAuLi4KKwl9LAorfTsKKworCitzdGF0aWMgaW50IF9faW5pdCBmc2dfYWxsb2Modm9pZCkKK3sKKwlzdHJ1Y3QgZnNnX2RldgkJKmZzZzsKKworCWZzZyA9IGttYWxsb2Moc2l6ZW9mICpmc2csIEdGUF9LRVJORUwpOworCWlmICghZnNnKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQoZnNnLCAwLCBzaXplb2YgKmZzZyk7CisJc3Bpbl9sb2NrX2luaXQoJmZzZy0+bG9jayk7CisJaW5pdF9yd3NlbSgmZnNnLT5maWxlc2VtKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZmc2ctPnRocmVhZF93cWgpOworCWluaXRfY29tcGxldGlvbigmZnNnLT50aHJlYWRfbm90aWZpZXIpOworCisJdGhlX2ZzZyA9IGZzZzsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBmc2dfZnJlZShzdHJ1Y3QgZnNnX2RldiAqZnNnKQoreworCWtmcmVlKGZzZy0+bHVucyk7CisJa2ZyZWUoZnNnKTsKK30KKworCitzdGF0aWMgaW50IF9faW5pdCBmc2dfaW5pdCh2b2lkKQoreworCWludAkJcmM7CisJc3RydWN0IGZzZ19kZXYJKmZzZzsKKworCWlmICgocmMgPSBmc2dfYWxsb2MoKSkgIT0gMCkKKwkJcmV0dXJuIHJjOworCWZzZyA9IHRoZV9mc2c7CisJaWYgKChyYyA9IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKCZmc2dfZHJpdmVyKSkgIT0gMCkgeworCQlmc2dfZnJlZShmc2cpOworCQlyZXR1cm4gcmM7CisJfQorCXNldF9iaXQoUkVHSVNURVJFRCwgJmZzZy0+YXRvbWljX2JpdGZsYWdzKTsKKworCS8qIFRlbGwgdGhlIHRocmVhZCB0byBzdGFydCB3b3JraW5nICovCisJY29tcGxldGUoJmZzZy0+dGhyZWFkX25vdGlmaWVyKTsKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KGZzZ19pbml0KTsKKworCitzdGF0aWMgdm9pZCBfX2V4aXQgZnNnX2NsZWFudXAodm9pZCkKK3sKKwlzdHJ1Y3QgZnNnX2RldgkqZnNnID0gdGhlX2ZzZzsKKworCS8qIFVucmVnaXN0ZXIgdGhlIGRyaXZlciBpZmYgdGhlIHRocmVhZCBoYXNuJ3QgYWxyZWFkeSBkb25lIHNvICovCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRUdJU1RFUkVELCAmZnNnLT5hdG9taWNfYml0ZmxhZ3MpKQorCQl1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKCZmc2dfZHJpdmVyKTsKKworCS8qIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gZmluaXNoIHVwICovCisJd2FpdF9mb3JfY29tcGxldGlvbigmZnNnLT50aHJlYWRfbm90aWZpZXIpOworCisJY2xvc2VfYWxsX2JhY2tpbmdfZmlsZXMoZnNnKTsKKwlmc2dfZnJlZShmc2cpOworfQorbW9kdWxlX2V4aXQoZnNnX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dhZGdldF9jaGlwcy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dhZGdldF9jaGlwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMmViNTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIFVTQiBkZXZpY2UgY29udHJvbGxlcnMgaGF2ZSBsb3RzIG9mIHF1aXJrcy4gIFVzZSB0aGVzZSBtYWNyb3MgaW4KKyAqIGdhZGdldCBkcml2ZXJzIG9yIG90aGVyIGNvZGUgdGhhdCBuZWVkcyB0byBkZWFsIHdpdGggdGhlbSwgYW5kIHdoaWNoCisgKiBhdXRvY29uZmlndXJlcyBpbnN0ZWFkIG9mIHVzaW5nIGVhcmx5IGJpbmRpbmcgdG8gdGhlIGhhcmR3YXJlLgorICoKKyAqIFRoaXMgY291bGQgZXZlbnR1YWxseSB3b3JrIGxpa2UgdGhlIEFSTSBtYWNoX2lzXyooKSBzdHVmZiwgZHJpdmVuIGJ5CisgKiBzb21lIGNvbmZpZyBmaWxlIHRoYXQgZ2V0cyB1cGRhdGVkIGFzIG5ldyBoYXJkd2FyZSBpcyBzdXBwb3J0ZWQuCisgKgorICogTk9URTogIHNvbWUgb2YgdGhlc2UgY29udHJvbGxlciBkcml2ZXJzIG1heSBub3QgYmUgYXZhaWxhYmxlIHlldC4KKyAqLworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAKKyNkZWZpbmUJZ2FkZ2V0X2lzX25ldDIyODAoZykJIXN0cmNtcCgibmV0MjI4MCIsIChnKS0+bmFtZSkKKyNlbHNlCisjZGVmaW5lCWdhZGdldF9pc19uZXQyMjgwKGcpCTAKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENECisjZGVmaW5lCWdhZGdldF9pc19kdW1teShnKQkhc3RyY21wKCJkdW1teV91ZGMiLCAoZyktPm5hbWUpCisjZWxzZQorI2RlZmluZQlnYWRnZXRfaXNfZHVtbXkoZykJMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFgKKyNkZWZpbmUJZ2FkZ2V0X2lzX3B4YShnKQkhc3RyY21wKCJweGEyeHhfdWRjIiwgKGcpLT5uYW1lKQorI2Vsc2UKKyNkZWZpbmUJZ2FkZ2V0X2lzX3B4YShnKQkwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0dPS1UKKyNkZWZpbmUJZ2FkZ2V0X2lzX2dva3UoZykJIXN0cmNtcCgiZ29rdV91ZGMiLCAoZyktPm5hbWUpCisjZWxzZQorI2RlZmluZQlnYWRnZXRfaXNfZ29rdShnKQkwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX1NVUEVSSAorI2RlZmluZQlnYWRnZXRfaXNfc2goZykJCSFzdHJjbXAoInNoX3VkYyIsIChnKS0+bmFtZSkKKyNlbHNlCisjZGVmaW5lCWdhZGdldF9pc19zaChnKQkJMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9TQTExMDAKKyNkZWZpbmUJZ2FkZ2V0X2lzX3NhMTEwMChnKQkhc3RyY21wKCJzYTExMDBfdWRjIiwgKGcpLT5uYW1lKQorI2Vsc2UKKyNkZWZpbmUJZ2FkZ2V0X2lzX3NhMTEwMChnKQkwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFgKKyNkZWZpbmUJZ2FkZ2V0X2lzX2xoN2E0MHgoZykJIXN0cmNtcCgibGg3YTQweF91ZGMiLCAoZyktPm5hbWUpCisjZWxzZQorI2RlZmluZQlnYWRnZXRfaXNfbGg3YTQweChnKQkwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01RMTFYWAorI2RlZmluZQlnYWRnZXRfaXNfbXExMXh4KGcpCSFzdHJjbXAoIm1xMTF4eF91ZGMiLCAoZyktPm5hbWUpCisjZWxzZQorI2RlZmluZQlnYWRnZXRfaXNfbXExMXh4KGcpCTAKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfT01BUAorI2RlZmluZQlnYWRnZXRfaXNfb21hcChnKQkhc3RyY21wKCJvbWFwX3VkYyIsIChnKS0+bmFtZSkKKyNlbHNlCisjZGVmaW5lCWdhZGdldF9pc19vbWFwKGcpCTAKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTjk2MDQKKyNkZWZpbmUJZ2FkZ2V0X2lzX245NjA0KGcpCSFzdHJjbXAoIm45NjA0X3VkYyIsIChnKS0+bmFtZSkKKyNlbHNlCisjZGVmaW5lCWdhZGdldF9pc19uOTYwNChnKQkwCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WAorI2RlZmluZQlnYWRnZXRfaXNfcHhhMjd4KGcpCSFzdHJjbXAoInB4YTI3eF91ZGMiLCAoZyktPm5hbWUpCisjZWxzZQorI2RlZmluZQlnYWRnZXRfaXNfcHhhMjd4KGcpCTAKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMAorI2RlZmluZSBnYWRnZXRfaXNfczNjMjQxMChnKSAgICAhc3RyY21wKCJzM2MyNDEwX3VkYyIsIChnKS0+bmFtZSkKKyNlbHNlCisjZGVmaW5lIGdhZGdldF9pc19zM2MyNDEwKGcpICAgIDAKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfQVQ5MQorI2RlZmluZSBnYWRnZXRfaXNfYXQ5MShnKQkhc3RyY21wKCJhdDkxX3VkYyIsIChnKS0+bmFtZSkKKyNlbHNlCisjZGVmaW5lIGdhZGdldF9pc19hdDkxKGcpCTAKKyNlbmRpZgorCisvLyBDT05GSUdfVVNCX0dBREdFVF9TWDIKKy8vIENPTkZJR19VU0JfR0FER0VUX0FVMVgwMAorLy8gLi4uCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA1ZGI3YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCkBAIC0wLDAgKzEsMTk4NCBAQAorLyoKKyAqIFRvc2hpYmEgVEM4NkMwMDEgKCJHb2t1LVMiKSBVU0IgRGV2aWNlIENvbnRyb2xsZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgTGluZW8KKyAqICAgICAgYnkgU3R1YXJ0IEx5bm5lLCBUb20gUnVzaHdvcnRoLCBhbmQgQnJ1Y2UgQmFsZGVuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgVG9zaGliYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDAzIE1vbnRhVmlzdGEgU29mdHdhcmUgKHNvdXJjZUBtdmlzdGEuY29tKQorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKy8qCisgKiBUaGlzIGRldmljZSBoYXMgZXAwIGFuZCB0aHJlZSBzZW1pLWNvbmZpZ3VyYWJsZSBidWxrL2ludGVycnVwdCBlbmRwb2ludHMuCisgKgorICogIC0gRW5kcG9pbnQgbnVtYmVyaW5nIGlzIGZpeGVkOiBlcHsxLDIsM30tYnVsaworICogIC0gR2FkZ2V0IGRyaXZlcnMgY2FuIGNob29zZSBlcCBtYXhwYWNrZXQgKDgvMTYvMzIvNjQpCisgKiAgLSBHYWRnZXQgZHJpdmVycyBjYW4gY2hvb3NlIGRpcmVjdGlvbiAoSU4sIE9VVCkKKyAqICAtIERNQSB3b3JrcyB3aXRoIGVwMSAoT1VUIHRyYW5zZmVycykgYW5kIGVwMiAoSU4gdHJhbnNmZXJzKS4KKyAqLworCisjdW5kZWYgREVCVUcKKy8vICNkZWZpbmUJVkVSQk9TRQkJLyogZXh0cmEgZGVidWcgbWVzc2FnZXMgKHN1Y2Nlc3MgdG9vKSAqLworLy8gI2RlZmluZQlVU0JfVFJBQ0UJLyogcGFja2V0LWxldmVsIHN1Y2Nlc3MgbWVzc2FnZXMgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiX2NoOS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9nYWRnZXQuaD4KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworCisjaW5jbHVkZSAiZ29rdV91ZGMuaCIKKworI2RlZmluZQlEUklWRVJfREVTQwkJIlRDODZDMDAxIFVTQiBEZXZpY2UgQ29udHJvbGxlciIKKyNkZWZpbmUJRFJJVkVSX1ZFUlNJT04JCSIzMC1PY3QgMjAwMyIKKworI2RlZmluZQlETUFfQUREUl9JTlZBTElECSh+KGRtYV9hZGRyX3QpMCkKKworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWUgW10gPSAiZ29rdV91ZGMiOworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX2Rlc2MgW10gPSBEUklWRVJfREVTQzsKKworTU9EVUxFX0FVVEhPUigic291cmNlQG12aXN0YS5jb20iKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKworLyoKKyAqIElOIGRtYSBiZWhhdmVzIG9rIHVuZGVyIHRlc3RpbmcsIHRob3VnaCB0aGUgSU4tZG1hIGFib3J0IHBhdGhzIGRvbid0CisgKiBzZWVtIHRvIGJlaGF2ZSBxdWl0ZSBhcyBleHBlY3RlZC4gIFVzZWQgYnkgZGVmYXVsdC4KKyAqCisgKiBPVVQgZG1hIGRvY3VtZW50cyBkZXNpZ24gcHJvYmxlbXMgaGFuZGxpbmcgdGhlIGNvbW1vbiAic2hvcnQgcGFja2V0IgorICogdHJhbnNmZXIgdGVybWluYXRpb24gcG9saWN5OyBpdCBjb3VsZG4ndCBlbmFibGVkIGJ5IGRlZmF1bHQsIGV2ZW4KKyAqIGlmIHRoZSBPVVQtZG1hIGFib3J0IHByb2JsZW1zIGhhZCBhIHJlc29sdXRpb24uCisgKi8KK3N0YXRpYyB1bnNpZ25lZCB1c2VfZG1hID0gMTsKKworI2lmIDAKKy8vI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisvKiAibW9kcHJvYmUgZ29rdV91ZGMgdXNlX2RtYT0xIiBldGMKKyAqCTAgdG8gZGlzYWJsZSBkbWEKKyAqCTEgdG8gdXNlIElOIGRtYSBvbmx5IChub3JtYWwgb3BlcmF0aW9uKQorICoJMiB0byB1c2UgSU4gYW5kIE9VVCBkbWEKKyAqLworbW9kdWxlX3BhcmFtKHVzZV9kbWEsIHVpbnQsIFNfSVJVR08pOworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIG51a2Uoc3RydWN0IGdva3VfZXAgKiwgaW50IHN0YXR1cyk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY29tbWFuZChzdHJ1Y3QgZ29rdV91ZGNfcmVncyBfX2lvbWVtICpyZWdzLCBpbnQgY29tbWFuZCwgdW5zaWduZWQgZXBudW0pCit7CisJd3JpdGVsKENPTU1BTkRfRVAoZXBudW0pIHwgY29tbWFuZCwgJnJlZ3MtPkNvbW1hbmQpOworCXVkZWxheSgzMDApOworfQorCitzdGF0aWMgaW50Citnb2t1X2VwX2VuYWJsZShzdHJ1Y3QgdXNiX2VwICpfZXAsIGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYykKK3sKKwlzdHJ1Y3QgZ29rdV91ZGMJKmRldjsKKwlzdHJ1Y3QgZ29rdV9lcAkqZXA7CisJdTMyCQltb2RlOworCXUxNgkJbWF4OworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBnb2t1X2VwLCBlcCk7CisJaWYgKCFfZXAgfHwgIWRlc2MgfHwgZXAtPmRlc2MKKwkJCXx8IGRlc2MtPmJEZXNjcmlwdG9yVHlwZSAhPSBVU0JfRFRfRU5EUE9JTlQpCisJCXJldHVybiAtRUlOVkFMOworCWRldiA9IGVwLT5kZXY7CisJaWYgKGVwID09ICZkZXYtPmVwWzBdKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWRldi0+ZHJpdmVyIHx8IGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKQorCQlyZXR1cm4gLUVTSFVURE9XTjsKKwlpZiAoZXAtPm51bSAhPSAoZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIDB4MGYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spIHsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICgocmVhZGwoZXAtPnJlZ19zdGF0dXMpICYgRVB4U1RBVFVTX0VQX01BU0spCisJCQkhPSBFUHhTVEFUVVNfRVBfSU5WQUxJRCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIGVuYWJsaW5nIHRoZSBuby10b2dnbGUgaW50ZXJydXB0IG1vZGUgd291bGQgbmVlZCBhbiBhcGkgaG9vayAqLworCW1vZGUgPSAwOworCW1heCA9IGxlMTZfdG9fY3B1KGdldF91bmFsaWduZWQoJmRlc2MtPndNYXhQYWNrZXRTaXplKSk7CisJc3dpdGNoIChtYXgpIHsKKwljYXNlIDY0Ogltb2RlKys7CisJY2FzZSAzMjoJbW9kZSsrOworCWNhc2UgMTY6CW1vZGUrKzsKKwljYXNlIDg6CQltb2RlIDw8PSAzOworCQkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW1vZGUgfD0gMiA8PCAxOwkJLyogYnVsaywgb3IgaW50ci13aXRoLXRvZ2dsZSAqLworCisJLyogZXAxL2VwMiBkbWEgZGlyZWN0aW9uIGlzIGNob3NlbiBlYXJseTsgaXQgd29ya3MgaW4gdGhlIG90aGVyCisJICogZGlyZWN0aW9uLCB3aXRoIHBpby4gIGJlIGNhdXRpb3VzIHdpdGggb3V0LWRtYS4KKwkgKi8KKwllcC0+aXNfaW4gPSAoVVNCX0RJUl9JTiAmIGRlc2MtPmJFbmRwb2ludEFkZHJlc3MpICE9IDA7CisJaWYgKGVwLT5pc19pbikgeworCQltb2RlIHw9IDE7CisJCWVwLT5kbWEgPSAodXNlX2RtYSAhPSAwKSAmJiAoZXAtPm51bSA9PSBVRENfTVNUUkRfRU5EUE9JTlQpOworCX0gZWxzZSB7CisJCWVwLT5kbWEgPSAodXNlX2RtYSA9PSAyKSAmJiAoZXAtPm51bSA9PSBVRENfTVNUV1JfRU5EUE9JTlQpOworCQlpZiAoZXAtPmRtYSkKKwkJCURCRyhkZXYsICIlcyBvdXQtZG1hIGhpZGVzIHNob3J0IHBhY2tldHNcbiIsCisJCQkJZXAtPmVwLm5hbWUpOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CisKKwkvKiBlcDEgYW5kIGVwMiBjYW4gZG8gZG91YmxlIGJ1ZmZlcmluZyBhbmQvb3IgZG1hICovCisJaWYgKGVwLT5udW0gPCAzKSB7CisJCXN0cnVjdCBnb2t1X3VkY19yZWdzIF9faW9tZW0JKnJlZ3MgPSBlcC0+ZGV2LT5yZWdzOworCQl1MzIJCQkJdG1wOworCisJCS8qIGRvdWJsZSBidWZmZXIgZXhjZXB0IChmb3Igbm93KSB3aXRoIHBpbyBpbiAqLworCQl0bXAgPSAoKGVwLT5kbWEgfHwgIWVwLT5pc19pbikKKwkJCQk/IDB4MTAJLyogZG91YmxlIGJ1ZmZlcmVkICovCisJCQkJOiAweDExCS8qIHNpbmdsZSBidWZmZXIgKi8KKwkJCSkgPDwgZXAtPm51bTsKKwkJdG1wIHw9IHJlYWRsKCZyZWdzLT5FUHhTaW5nbGUpOworCQl3cml0ZWwodG1wLCAmcmVncy0+RVB4U2luZ2xlKTsKKworCQl0bXAgPSAoZXAtPmRtYSA/IDB4MTAvKmRtYSovIDogMHgxMS8qcGlvKi8pIDw8IGVwLT5udW07CisJCXRtcCB8PSByZWFkbCgmcmVncy0+RVB4QkNTKTsKKwkJd3JpdGVsKHRtcCwgJnJlZ3MtPkVQeEJDUyk7CisJfQorCXdyaXRlbChtb2RlLCBlcC0+cmVnX21vZGUpOworCWNvbW1hbmQoZXAtPmRldi0+cmVncywgQ09NTUFORF9SRVNFVCwgZXAtPm51bSk7CisJZXAtPmVwLm1heHBhY2tldCA9IG1heDsKKwllcC0+c3RvcHBlZCA9IDA7CisJZXAtPmRlc2MgPSBkZXNjOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5kZXYtPmxvY2ssIGZsYWdzKTsKKworCURCRyhkZXYsICJlbmFibGUgJXMgJXMgJXMgbWF4cGFja2V0ICV1XG4iLCBlcC0+ZXAubmFtZSwKKwkJZXAtPmlzX2luID8gIklOIiA6ICJPVVQiLAorCQllcC0+ZG1hID8gImRtYSIgOiAicGlvIiwKKwkJbWF4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBlcF9yZXNldChzdHJ1Y3QgZ29rdV91ZGNfcmVncyBfX2lvbWVtICpyZWdzLCBzdHJ1Y3QgZ29rdV9lcCAqZXApCit7CisJc3RydWN0IGdva3VfdWRjCQkqZGV2ID0gZXAtPmRldjsKKworCWlmIChyZWdzKSB7CisJCWNvbW1hbmQocmVncywgQ09NTUFORF9JTlZBTElELCBlcC0+bnVtKTsKKwkJaWYgKGVwLT5udW0pIHsKKwkJCWlmIChlcC0+bnVtID09IFVEQ19NU1RXUl9FTkRQT0lOVCkKKwkJCQlkZXYtPmludF9lbmFibGUgJj0gfihJTlRfTVNUV1JFTkQKKwkJCQkJCQl8SU5UX01TVFdSVE1PVVQpOworCQkJZWxzZSBpZiAoZXAtPm51bSA9PSBVRENfTVNUUkRfRU5EUE9JTlQpCisJCQkJZGV2LT5pbnRfZW5hYmxlICY9IH5JTlRfTVNUUkRFTkQ7CisJCQlkZXYtPmludF9lbmFibGUgJj0gfklOVF9FUHhEQVRBU0VUIChlcC0+bnVtKTsKKwkJfSBlbHNlCisJCQlkZXYtPmludF9lbmFibGUgJj0gfklOVF9FUDA7CisJCXdyaXRlbChkZXYtPmludF9lbmFibGUsICZyZWdzLT5pbnRfZW5hYmxlKTsKKwkJcmVhZGwoJnJlZ3MtPmludF9lbmFibGUpOworCQlpZiAoZXAtPm51bSA8IDMpIHsKKwkJCXN0cnVjdCBnb2t1X3VkY19yZWdzIF9faW9tZW0JKnIgPSBlcC0+ZGV2LT5yZWdzOworCQkJdTMyCQkJCXRtcDsKKworCQkJdG1wID0gcmVhZGwoJnItPkVQeFNpbmdsZSk7CisJCQl0bXAgJj0gfigweDExIDw8IGVwLT5udW0pOworCQkJd3JpdGVsKHRtcCwgJnItPkVQeFNpbmdsZSk7CisKKwkJCXRtcCA9IHJlYWRsKCZyLT5FUHhCQ1MpOworCQkJdG1wICY9IH4oMHgxMSA8PCBlcC0+bnVtKTsKKwkJCXdyaXRlbCh0bXAsICZyLT5FUHhCQ1MpOworCQl9CisJCS8qIHJlc2V0IGRtYSBpbiBjYXNlIHdlJ3JlIHN0aWxsIHVzaW5nIGl0ICovCisJCWlmIChlcC0+ZG1hKSB7CisJCQl1MzIJbWFzdGVyOworCisJCQltYXN0ZXIgPSByZWFkbCgmcmVncy0+ZG1hX21hc3RlcikgJiBNU1RfUldfQklUUzsKKwkJCWlmIChlcC0+bnVtID09IFVEQ19NU1RXUl9FTkRQT0lOVCkgeworCQkJCW1hc3RlciAmPSB+TVNUX1dfQklUUzsKKwkJCQltYXN0ZXIgfD0gTVNUX1dSX1JFU0VUOworCQkJfSBlbHNlIHsKKwkJCQltYXN0ZXIgJj0gfk1TVF9SX0JJVFM7CisJCQkJbWFzdGVyIHw9IE1TVF9SRF9SRVNFVDsKKwkJCX0KKwkJCXdyaXRlbChtYXN0ZXIsICZyZWdzLT5kbWFfbWFzdGVyKTsKKwkJfQorCX0KKworCWVwLT5lcC5tYXhwYWNrZXQgPSBNQVhfRklGT19TSVpFOworCWVwLT5kZXNjID0gTlVMTDsKKwllcC0+c3RvcHBlZCA9IDE7CisJZXAtPmlycXMgPSAwOworCWVwLT5kbWEgPSAwOworfQorCitzdGF0aWMgaW50IGdva3VfZXBfZGlzYWJsZShzdHJ1Y3QgdXNiX2VwICpfZXApCit7CisJc3RydWN0IGdva3VfZXAJKmVwOworCXN0cnVjdCBnb2t1X3VkYwkqZGV2OworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBnb2t1X2VwLCBlcCk7CisJaWYgKCFfZXAgfHwgIWVwLT5kZXNjKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlkZXYgPSBlcC0+ZGV2OworCWlmIChkZXYtPmVwMHN0YXRlID09IEVQMF9TVVNQRU5EKQorCQlyZXR1cm4gLUVCVVNZOworCisJVkRCRyhkZXYsICJkaXNhYmxlICVzXG4iLCBfZXAtPm5hbWUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCW51a2UoZXAsIC1FU0hVVERPV04pOworCWVwX3Jlc2V0KGRldi0+cmVncywgZXApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3JlcXVlc3QgKgorZ29rdV9hbGxvY19yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgZ29rdV9yZXF1ZXN0CSpyZXE7CisKKwlpZiAoIV9lcCkKKwkJcmV0dXJuIE5VTEw7CisJcmVxID0ga21hbGxvYyhzaXplb2YgKnJlcSwgZ2ZwX2ZsYWdzKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQocmVxLCAwLCBzaXplb2YgKnJlcSk7CisJcmVxLT5yZXEuZG1hID0gRE1BX0FERFJfSU5WQUxJRDsKKwlJTklUX0xJU1RfSEVBRCgmcmVxLT5xdWV1ZSk7CisJcmV0dXJuICZyZXEtPnJlcTsKK30KKworc3RhdGljIHZvaWQKK2dva3VfZnJlZV9yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBnb2t1X3JlcXVlc3QJKnJlcTsKKworCWlmICghX2VwIHx8ICFfcmVxKQorCQlyZXR1cm47CisKKwlyZXEgPSBjb250YWluZXJfb2YoX3JlcSwgc3RydWN0IGdva3VfcmVxdWVzdCwgcmVxKTsKKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZyZXEtPnF1ZXVlKSk7CisJa2ZyZWUocmVxKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI3VuZGVmIFVTRV9LTUFMTE9DCisKKy8qIG1hbnkgY29tbW9uIHBsYXRmb3JtcyBoYXZlIGRtYS1jb2hlcmVudCBjYWNoZXMsIHdoaWNoIG1lYW5zIHRoYXQgaXQncworICogc2FmZSB0byB1c2Uga21hbGxvYygpIG1lbW9yeSBmb3IgYWxsIGkvbyBidWZmZXJzIHdpdGhvdXQgdXNpbmcgYW55CisgKiBjYWNoZSBmbHVzaGluZyBjYWxscy4gICh1bmxlc3MgeW91J3JlIHRyeWluZyB0byBzaGFyZSBjYWNoZSBsaW5lcworICogYmV0d2VlbiBkbWEgYW5kIG5vbi1kbWEgYWN0aXZpdGllcywgd2hpY2ggaXMgYSBzbG93IGlkZWEgaW4gYW55IGNhc2UuKQorICoKKyAqIG90aGVyIHBsYXRmb3JtcyBuZWVkIG1vcmUgY2FyZSwgd2l0aCAyLjYgaGF2aW5nIGEgbW9kZXJhdGVseSBnZW5lcmFsCisgKiBzb2x1dGlvbiBleGNlcHQgZm9yIHRoZSBjb21tb24gImJ1ZmZlciBpcyBzbWFsbGVyIHRoYW4gYSBwYWdlIiBjYXNlLgorICovCisjaWYJZGVmaW5lZChDT05GSUdfWDg2KQorI2RlZmluZSBVU0VfS01BTExPQworCisjZWxpZglkZWZpbmVkKENPTkZJR19NSVBTKSAmJiAhZGVmaW5lZChDT05GSUdfTk9OQ09IRVJFTlRfSU8pCisjZGVmaW5lIFVTRV9LTUFMTE9DCisKKyNlbGlmCWRlZmluZWQoQ09ORklHX1BQQykgJiYgIWRlZmluZWQoQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRSkKKyNkZWZpbmUgVVNFX0tNQUxMT0MKKworI2VuZGlmCisKKy8qIGFsbG9jYXRpbmcgYnVmZmVycyB0aGlzIHdheSBlbGltaW5hdGVzIGRtYSBtYXBwaW5nIG92ZXJoZWFkLCB3aGljaAorICogb24gc29tZSBwbGF0Zm9ybXMgd2lsbCBtZWFuIGVsaW1pbmF0aW5nIGEgcGVyLWlvIGJ1ZmZlciBjb3B5LiAgd2l0aAorICogc29tZSBraW5kcyBvZiBzeXN0ZW0gY2FjaGVzLCBmdXJ0aGVyIHR3ZWFrcyBtYXkgc3RpbGwgYmUgbmVlZGVkLgorICovCitzdGF0aWMgdm9pZCAqCitnb2t1X2FsbG9jX2J1ZmZlcihzdHJ1Y3QgdXNiX2VwICpfZXAsIHVuc2lnbmVkIGJ5dGVzLAorCQkJZG1hX2FkZHJfdCAqZG1hLCBpbnQgIGdmcF9mbGFncykKK3sKKwl2b2lkCQkqcmV0dmFsOworCXN0cnVjdCBnb2t1X2VwCSplcDsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IGdva3VfZXAsIGVwKTsKKwlpZiAoIV9lcCkKKwkJcmV0dXJuIE5VTEw7CisJKmRtYSA9IERNQV9BRERSX0lOVkFMSUQ7CisKKyNpZglkZWZpbmVkKFVTRV9LTUFMTE9DKQorCXJldHZhbCA9IGttYWxsb2MoYnl0ZXMsIGdmcF9mbGFncyk7CisJaWYgKHJldHZhbCkKKwkJKmRtYSA9IHZpcnRfdG9fcGh5cyhyZXR2YWwpOworI2Vsc2UKKwlpZiAoZXAtPmRtYSkgeworCQkvKiB0aGUgbWFpbiBwcm9ibGVtIHdpdGggdGhpcyBjYWxsIGlzIHRoYXQgaXQgd2FzdGVzIG1lbW9yeQorCQkgKiBvbiB0eXBpY2FsIDEvTiBwYWdlIGFsbG9jYXRpb25zOiBpdCBhbGxvY2F0ZXMgMS1OIHBhZ2VzLgorCQkgKi8KKyN3YXJuaW5nIFVzaW5nIGRtYV9hbGxvY19jb2hlcmVudCBldmVuIHdpdGggYnVmZmVycyBzbWFsbGVyIHRoYW4gYSBwYWdlLgorCQlyZXR2YWwgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmVwLT5kZXYtPnBkZXYtPmRldiwKKwkJCQlieXRlcywgZG1hLCBnZnBfZmxhZ3MpOworCX0gZWxzZQorCQlyZXR2YWwgPSBrbWFsbG9jKGJ5dGVzLCBnZnBfZmxhZ3MpOworI2VuZGlmCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQKK2dva3VfZnJlZV9idWZmZXIoc3RydWN0IHVzYl9lcCAqX2VwLCB2b2lkICpidWYsIGRtYV9hZGRyX3QgZG1hLCB1bnNpZ25lZCBieXRlcykKK3sKKwkvKiBmcmVlIG1lbW9yeSBpbnRvIHRoZSByaWdodCBhbGxvY2F0b3IgKi8KKyNpZm5kZWYJVVNFX0tNQUxMT0MKKwlpZiAoZG1hICE9IERNQV9BRERSX0lOVkFMSUQpIHsKKwkJc3RydWN0IGdva3VfZXAJKmVwOworCisJCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IGdva3VfZXAsIGVwKTsKKwkJaWYgKCFfZXApCisJCQlyZXR1cm47CisJCWRtYV9mcmVlX2NvaGVyZW50KCZlcC0+ZGV2LT5wZGV2LT5kZXYsIGJ5dGVzLCBidWYsIGRtYSk7CisJfSBlbHNlCisjZW5kaWYKKwkJa2ZyZWUgKGJ1Zik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCitkb25lKHN0cnVjdCBnb2t1X2VwICplcCwgc3RydWN0IGdva3VfcmVxdWVzdCAqcmVxLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBnb2t1X3VkYwkJKmRldjsKKwl1bnNpZ25lZAkJc3RvcHBlZCA9IGVwLT5zdG9wcGVkOworCisJbGlzdF9kZWxfaW5pdCgmcmVxLT5xdWV1ZSk7CisKKwlpZiAobGlrZWx5KHJlcS0+cmVxLnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpKQorCQlyZXEtPnJlcS5zdGF0dXMgPSBzdGF0dXM7CisJZWxzZQorCQlzdGF0dXMgPSByZXEtPnJlcS5zdGF0dXM7CisKKwlkZXYgPSBlcC0+ZGV2OworCWlmIChyZXEtPm1hcHBlZCkgeworCQlwY2lfdW5tYXBfc2luZ2xlKGRldi0+cGRldiwgcmVxLT5yZXEuZG1hLCByZXEtPnJlcS5sZW5ndGgsCisJCQllcC0+aXNfaW4gPyBQQ0lfRE1BX1RPREVWSUNFIDogUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJcmVxLT5yZXEuZG1hID0gRE1BX0FERFJfSU5WQUxJRDsKKwkJcmVxLT5tYXBwZWQgPSAwOworCX0KKworI2lmbmRlZiBVU0JfVFJBQ0UKKwlpZiAoc3RhdHVzICYmIHN0YXR1cyAhPSAtRVNIVVRET1dOKQorI2VuZGlmCisJCVZEQkcoZGV2LCAiY29tcGxldGUgJXMgcmVxICVwIHN0YXQgJWQgbGVuICV1LyV1XG4iLAorCQkJZXAtPmVwLm5hbWUsICZyZXEtPnJlcSwgc3RhdHVzLAorCQkJcmVxLT5yZXEuYWN0dWFsLCByZXEtPnJlcS5sZW5ndGgpOworCisJLyogZG9uJ3QgbW9kaWZ5IHF1ZXVlIGhlYWRzIGR1cmluZyBjb21wbGV0aW9uIGNhbGxiYWNrICovCisJZXAtPnN0b3BwZWQgPSAxOworCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOworCXJlcS0+cmVxLmNvbXBsZXRlKCZlcC0+ZXAsICZyZXEtPnJlcSk7CisJc3Bpbl9sb2NrKCZkZXYtPmxvY2spOworCWVwLT5zdG9wcGVkID0gc3RvcHBlZDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBpbnQKK3dyaXRlX3BhY2tldCh1MzIgX19pb21lbSAqZmlmbywgdTggKmJ1Ziwgc3RydWN0IGdva3VfcmVxdWVzdCAqcmVxLCB1bnNpZ25lZCBtYXgpCit7CisJdW5zaWduZWQJbGVuZ3RoLCBjb3VudDsKKworCWxlbmd0aCA9IG1pbihyZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWwsIG1heCk7CisJcmVxLT5yZXEuYWN0dWFsICs9IGxlbmd0aDsKKworCWNvdW50ID0gbGVuZ3RoOworCXdoaWxlIChsaWtlbHkoY291bnQtLSkpCisJCXdyaXRlbCgqYnVmKyssIGZpZm8pOworCXJldHVybiBsZW5ndGg7Cit9CisKKy8vIHJldHVybjogIDAgPSBzdGlsbCBydW5uaW5nLCAxID0gY29tcGxldGVkLCBuZWdhdGl2ZSA9IGVycm5vCitzdGF0aWMgaW50IHdyaXRlX2ZpZm8oc3RydWN0IGdva3VfZXAgKmVwLCBzdHJ1Y3QgZ29rdV9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGdva3VfdWRjCSpkZXYgPSBlcC0+ZGV2OworCXUzMgkJdG1wOworCXU4CQkqYnVmOworCXVuc2lnbmVkCWNvdW50OworCWludAkJaXNfbGFzdDsKKworCXRtcCA9IHJlYWRsKCZkZXYtPnJlZ3MtPkRhdGFTZXQpOworCWJ1ZiA9IHJlcS0+cmVxLmJ1ZiArIHJlcS0+cmVxLmFjdHVhbDsKKwlwcmVmZXRjaChidWYpOworCisJZGV2ID0gZXAtPmRldjsKKwlpZiAodW5saWtlbHkoZXAtPm51bSA9PSAwICYmIGRldi0+ZXAwc3RhdGUgIT0gRVAwX0lOKSkKKwkJcmV0dXJuIC1FTDJITFQ7CisKKwkvKiBOT1RFOiAganVzdCBzaW5nbGUtYnVmZmVyZWQgUElPLUlOIGZvciBub3cuICAqLworCWlmICh1bmxpa2VseSgodG1wICYgREFUQVNFVF9BKGVwLT5udW0pKSAhPSAwKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBjbGVhciBvdXIgInBhY2tldCBhdmFpbGFibGUiIGlycSAqLworCWlmIChlcC0+bnVtICE9IDApCisJCXdyaXRlbCh+SU5UX0VQeERBVEFTRVQoZXAtPm51bSksICZkZXYtPnJlZ3MtPmludF9zdGF0dXMpOworCisJY291bnQgPSB3cml0ZV9wYWNrZXQoZXAtPnJlZ19maWZvLCBidWYsIHJlcSwgZXAtPmVwLm1heHBhY2tldCk7CisKKwkvKiBsYXN0IHBhY2tldCBvZnRlbiBzaG9ydCAoc29tZXRpbWVzIGEgemxwLCBlc3BlY2lhbGx5IG9uIGVwMCkgKi8KKwlpZiAodW5saWtlbHkoY291bnQgIT0gZXAtPmVwLm1heHBhY2tldCkpIHsKKwkJd3JpdGVsKH4oMTw8ZXAtPm51bSksICZkZXYtPnJlZ3MtPkVPUCk7CisJCWlmIChlcC0+bnVtID09IDApIHsKKwkJCWRldi0+ZXBbMF0uc3RvcHBlZCA9IDE7CisJCQlkZXYtPmVwMHN0YXRlID0gRVAwX1NUQVRVUzsKKwkJfQorCQlpc19sYXN0ID0gMTsKKwl9IGVsc2UgeworCQlpZiAobGlrZWx5KHJlcS0+cmVxLmxlbmd0aCAhPSByZXEtPnJlcS5hY3R1YWwpCisJCQkJfHwgcmVxLT5yZXEuemVybykKKwkJCWlzX2xhc3QgPSAwOworCQllbHNlCisJCQlpc19sYXN0ID0gMTsKKwl9CisjaWYgMAkJLyogcHJpbnRrIHNlZW1lZCB0byB0cmFzaCBpc19sYXN0Li4uKi8KKy8vI2lmZGVmIFVTQl9UUkFDRQorCVZEQkcoZGV2LCAid3JvdGUgJXMgJXUgYnl0ZXMlcyBJTiAldSBsZWZ0ICVwXG4iLAorCQllcC0+ZXAubmFtZSwgY291bnQsIGlzX2xhc3QgPyAiL2xhc3QiIDogIiIsCisJCXJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbCwgcmVxKTsKKyNlbmRpZgorCisJLyogcmVxdWVzdHMgY29tcGxldGUgd2hlbiBhbGwgSU4gZGF0YSBpcyBpbiB0aGUgRklGTywKKwkgKiBvciBzb21ldGltZXMgbGF0ZXIsIGlmIGEgemxwIHdhcyBuZWVkZWQuCisJICovCisJaWYgKGlzX2xhc3QpIHsKKwkJZG9uZShlcCwgcmVxLCAwKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9maWZvKHN0cnVjdCBnb2t1X2VwICplcCwgc3RydWN0IGdva3VfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBnb2t1X3VkY19yZWdzIF9faW9tZW0JKnJlZ3M7CisJdTMyCQkJCXNpemUsIHNldDsKKwl1OAkJCQkqYnVmOworCXVuc2lnbmVkCQkJYnVmZmVyc3BhY2UsIGlzX3Nob3J0LCBkYnVmZjsKKworCXJlZ3MgPSBlcC0+ZGV2LT5yZWdzOwordG9wOgorCWJ1ZiA9IHJlcS0+cmVxLmJ1ZiArIHJlcS0+cmVxLmFjdHVhbDsKKwlwcmVmZXRjaHcoYnVmKTsKKworCWlmICh1bmxpa2VseShlcC0+bnVtID09IDAgJiYgZXAtPmRldi0+ZXAwc3RhdGUgIT0gRVAwX09VVCkpCisJCXJldHVybiAtRUwySExUOworCisJZGJ1ZmYgPSAoZXAtPm51bSA9PSAxIHx8IGVwLT5udW0gPT0gMik7CisJZG8geworCQkvKiBhY2sgZGF0YXNldCBpcnEgbWF0Y2hpbmcgdGhlIHN0YXR1cyB3ZSdsbCBoYW5kbGUgKi8KKwkJaWYgKGVwLT5udW0gIT0gMCkKKwkJCXdyaXRlbCh+SU5UX0VQeERBVEFTRVQoZXAtPm51bSksICZyZWdzLT5pbnRfc3RhdHVzKTsKKworCQlzZXQgPSByZWFkbCgmcmVncy0+RGF0YVNldCkgJiBEQVRBU0VUX0FCKGVwLT5udW0pOworCQlzaXplID0gcmVhZGwoJnJlZ3MtPkVQeFNpemVMQVtlcC0+bnVtXSk7CisJCWJ1ZmZlcnNwYWNlID0gcmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsOworCisJCS8qIHVzdWFsbHkgZG8gbm90aGluZyB3aXRob3V0IGFuIE9VVCBwYWNrZXQgKi8KKwkJaWYgKGxpa2VseShlcC0+bnVtICE9IDAgfHwgYnVmZmVyc3BhY2UgIT0gMCkpIHsKKwkJCWlmICh1bmxpa2VseShzZXQgPT0gMCkpCisJCQkJYnJlYWs7CisJCQkvKiB1c2UgZXAxL2VwMiBkb3VibGUtYnVmZmVyaW5nIGZvciBPVVQgKi8KKwkJCWlmICghKHNpemUgJiBQQUNLRVRfQUNUSVZFKSkKKwkJCQlzaXplID0gcmVhZGwoJnJlZ3MtPkVQeFNpemVMQltlcC0+bnVtXSk7CisJCQlpZiAoIShzaXplICYgUEFDS0VUX0FDVElWRSkpIAkvLyAiY2FuJ3QgaGFwcGVuIgorCQkJCWJyZWFrOworCQkJc2l6ZSAmPSBEQVRBU0laRTsJLyogRVB4U2l6ZUggPT0gMCAqLworCisJCS8qIGVwMG91dCBuby1vdXQtZGF0YSBjYXNlIGZvciBzZXRfY29uZmlnLCBldGMgKi8KKwkJfSBlbHNlCisJCQlzaXplID0gMDsKKworCQkvKiByZWFkIGFsbCBieXRlcyBmcm9tIHRoaXMgcGFja2V0ICovCisJCXJlcS0+cmVxLmFjdHVhbCArPSBzaXplOworCQlpc19zaG9ydCA9IChzaXplIDwgZXAtPmVwLm1heHBhY2tldCk7CisjaWZkZWYgVVNCX1RSQUNFCisJCVZEQkcoZXAtPmRldiwgInJlYWQgJXMgJXUgYnl0ZXMlcyBPVVQgcmVxICVwICV1LyV1XG4iLAorCQkJZXAtPmVwLm5hbWUsIHNpemUsIGlzX3Nob3J0ID8gIi9TIiA6ICIiLAorCQkJcmVxLCByZXEtPnJlcS5hY3R1YWwsIHJlcS0+cmVxLmxlbmd0aCk7CisjZW5kaWYKKwkJd2hpbGUgKGxpa2VseShzaXplLS0gIT0gMCkpIHsKKwkJCXU4CWJ5dGUgPSAodTgpIHJlYWRsKGVwLT5yZWdfZmlmbyk7CisKKwkJCWlmICh1bmxpa2VseShidWZmZXJzcGFjZSA9PSAwKSkgeworCQkJCS8qIHRoaXMgaGFwcGVucyB3aGVuIHRoZSBkcml2ZXIncyBidWZmZXIKKwkJCQkgKiBpcyBzbWFsbGVyIHRoYW4gd2hhdCB0aGUgaG9zdCBzZW50LgorCQkJCSAqIGRpc2NhcmQgdGhlIGV4dHJhIGRhdGEgaW4gdGhpcyBwYWNrZXQuCisJCQkJICovCisJCQkJaWYgKHJlcS0+cmVxLnN0YXR1cyAhPSAtRU9WRVJGTE9XKQorCQkJCQlEQkcoZXAtPmRldiwgIiVzIG92ZXJmbG93ICV1XG4iLAorCQkJCQkJZXAtPmVwLm5hbWUsIHNpemUpOworCQkJCXJlcS0+cmVxLnN0YXR1cyA9IC1FT1ZFUkZMT1c7CisJCQl9IGVsc2UgeworCQkJCSpidWYrKyA9IGJ5dGU7CisJCQkJYnVmZmVyc3BhY2UtLTsKKwkJCX0KKwkJfQorCisJCS8qIGNvbXBsZXRpb24gKi8KKwkJaWYgKHVubGlrZWx5KGlzX3Nob3J0IHx8IHJlcS0+cmVxLmFjdHVhbCA9PSByZXEtPnJlcS5sZW5ndGgpKSB7CisJCQlpZiAodW5saWtlbHkoZXAtPm51bSA9PSAwKSkgeworCQkJCS8qIG5vbi1jb250cm9sIGVuZHBvaW50cyBub3cgdXNhYmxlPyAqLworCQkJCWlmIChlcC0+ZGV2LT5yZXFfY29uZmlnKQorCQkJCQl3cml0ZWwoZXAtPmRldi0+Y29uZmlndXJlZAorCQkJCQkJCT8gVVNCU1RBVEVfQ09ORklHVVJFRAorCQkJCQkJCTogMCwKKwkJCQkJCSZyZWdzLT5Vc2JTdGF0ZSk7CisJCQkJLyogZXAwb3V0IHN0YXR1cyBzdGFnZSAqLworCQkJCXdyaXRlbCh+KDE8PDApLCAmcmVncy0+RU9QKTsKKwkJCQllcC0+c3RvcHBlZCA9IDE7CisJCQkJZXAtPmRldi0+ZXAwc3RhdGUgPSBFUDBfU1RBVFVTOworCQkJfQorCQkJZG9uZShlcCwgcmVxLCAwKTsKKworCQkJLyogZW1wdHkgdGhlIHNlY29uZCBidWZmZXIgYXNhcCAqLworCQkJaWYgKGRidWZmICYmICFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCQkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwKKwkJCQkJCXN0cnVjdCBnb2t1X3JlcXVlc3QsIHF1ZXVlKTsKKwkJCQlnb3RvIHRvcDsKKwkJCX0KKwkJCXJldHVybiAxOworCQl9CisJfSB3aGlsZSAoZGJ1ZmYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3Bpb19pcnFfZW5hYmxlKHN0cnVjdCBnb2t1X3VkYyAqZGV2LAorCQlzdHJ1Y3QgZ29rdV91ZGNfcmVncyBfX2lvbWVtICpyZWdzLCBpbnQgZXBudW0pCit7CisJZGV2LT5pbnRfZW5hYmxlIHw9IElOVF9FUHhEQVRBU0VUIChlcG51bSk7CisJd3JpdGVsKGRldi0+aW50X2VuYWJsZSwgJnJlZ3MtPmludF9lbmFibGUpOworCS8qIHdyaXRlIG1heSBzdGlsbCBiZSBwb3N0ZWQgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkCitwaW9faXJxX2Rpc2FibGUoc3RydWN0IGdva3VfdWRjICpkZXYsCisJCXN0cnVjdCBnb2t1X3VkY19yZWdzIF9faW9tZW0gKnJlZ3MsIGludCBlcG51bSkKK3sKKwlkZXYtPmludF9lbmFibGUgJj0gfklOVF9FUHhEQVRBU0VUIChlcG51bSk7CisJd3JpdGVsKGRldi0+aW50X2VuYWJsZSwgJnJlZ3MtPmludF9lbmFibGUpOworCS8qIHdyaXRlIG1heSBzdGlsbCBiZSBwb3N0ZWQgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkCitwaW9fYWR2YW5jZShzdHJ1Y3QgZ29rdV9lcCAqZXApCit7CisJc3RydWN0IGdva3VfcmVxdWVzdAkqcmVxOworCisJaWYgKHVubGlrZWx5KGxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKSkKKwkJcmV0dXJuOworCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBnb2t1X3JlcXVlc3QsIHF1ZXVlKTsKKwkoZXAtPmlzX2luID8gd3JpdGVfZmlmbyA6IHJlYWRfZmlmbykoZXAsIHJlcSk7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLy8gcmV0dXJuOiAgMCA9IHEgcnVubmluZywgMSA9IHEgc3RvcHBlZCwgbmVnYXRpdmUgPSBlcnJubworc3RhdGljIGludCBzdGFydF9kbWEoc3RydWN0IGdva3VfZXAgKmVwLCBzdHJ1Y3QgZ29rdV9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGdva3VfdWRjX3JlZ3MgX19pb21lbQkqcmVncyA9IGVwLT5kZXYtPnJlZ3M7CisJdTMyCQkJCW1hc3RlcjsKKwl1MzIJCQkJc3RhcnQgPSByZXEtPnJlcS5kbWE7CisJdTMyCQkJCWVuZCA9IHN0YXJ0ICsgcmVxLT5yZXEubGVuZ3RoIC0gMTsKKworCW1hc3RlciA9IHJlYWRsKCZyZWdzLT5kbWFfbWFzdGVyKSAmIE1TVF9SV19CSVRTOworCisJLyogcmUtaW5pdCB0aGUgYml0cyBhZmZlY3RpbmcgSU4gZG1hOyBjYXJlZnVsIHdpdGggemxwcyAqLworCWlmIChsaWtlbHkoZXAtPmlzX2luKSkgeworCQlpZiAodW5saWtlbHkobWFzdGVyICYgTVNUX1JEX0VOQSkpIHsKKwkJCURCRyAoZXAtPmRldiwgInN0YXJ0LCBJTiBhY3RpdmUgZG1hICUwM3ghIVxuIiwKKwkJCQltYXN0ZXIpOworLy8JCQlyZXR1cm4gLUVMMkhMVDsKKwkJfQorCQl3cml0ZWwoZW5kLCAmcmVncy0+aW5fZG1hX2VuZCk7CisJCXdyaXRlbChzdGFydCwgJnJlZ3MtPmluX2RtYV9zdGFydCk7CisKKwkJbWFzdGVyICY9IH5NU1RfUl9CSVRTOworCQlpZiAodW5saWtlbHkocmVxLT5yZXEubGVuZ3RoID09IDApKQorCQkJbWFzdGVyID0gTVNUX1JEX0VOQSB8IE1TVF9SRF9FT1BCOworCQllbHNlIGlmICgocmVxLT5yZXEubGVuZ3RoICUgZXAtPmVwLm1heHBhY2tldCkgIT0gMAorCQkJCQl8fCByZXEtPnJlcS56ZXJvKQorCQkJbWFzdGVyID0gTVNUX1JEX0VOQSB8IE1TVF9FT1BCX0VOQTsKKwkJZWxzZQorCQkJbWFzdGVyID0gTVNUX1JEX0VOQSB8IE1TVF9FT1BCX0RJUzsKKworCQllcC0+ZGV2LT5pbnRfZW5hYmxlIHw9IElOVF9NU1RSREVORDsKKworCS8qIEdva3UgRE1BLU9VVCBtZXJnZXMgc2hvcnQgcGFja2V0cywgd2hpY2ggcGxheXMgcG9vcmx5IHdpdGgKKwkgKiBwcm90b2NvbHMgd2hlcmUgc2hvcnQgcGFja2V0cyBtYXJrIHRoZSB0cmFuc2ZlciBib3VuZGFyaWVzLgorCSAqIFRoZSBjaGlwIHN1cHBvcnRzIGEgbm9uc3RhbmRhcmQgcG9saWN5IHdpdGggSU5UX01TVFdSVE1PVVQsCisJICogZW5kaW5nIHRyYW5zZmVycyBhZnRlciAzIFNPRnM7IHdlIGRvbid0IHR1cm4gaXQgb24uCisJICovCisJfSBlbHNlIHsKKwkJaWYgKHVubGlrZWx5KG1hc3RlciAmIE1TVF9XUl9FTkEpKSB7CisJCQlEQkcgKGVwLT5kZXYsICJzdGFydCwgT1VUIGFjdGl2ZSBkbWEgJTAzeCEhXG4iLAorCQkJCW1hc3Rlcik7CisvLwkJCXJldHVybiAtRUwySExUOworCQl9CisJCXdyaXRlbChlbmQsICZyZWdzLT5vdXRfZG1hX2VuZCk7CisJCXdyaXRlbChzdGFydCwgJnJlZ3MtPm91dF9kbWFfc3RhcnQpOworCisJCW1hc3RlciAmPSB+TVNUX1dfQklUUzsKKwkJbWFzdGVyIHw9IE1TVF9XUl9FTkEgfCBNU1RfVElNRU9VVF9ESVM7CisKKwkJZXAtPmRldi0+aW50X2VuYWJsZSB8PSBJTlRfTVNUV1JFTkR8SU5UX01TVFdSVE1PVVQ7CisJfQorCisJd3JpdGVsKG1hc3RlciwgJnJlZ3MtPmRtYV9tYXN0ZXIpOworCXdyaXRlbChlcC0+ZGV2LT5pbnRfZW5hYmxlLCAmcmVncy0+aW50X2VuYWJsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRtYV9hZHZhbmNlKHN0cnVjdCBnb2t1X3VkYyAqZGV2LCBzdHJ1Y3QgZ29rdV9lcCAqZXApCit7CisJc3RydWN0IGdva3VfcmVxdWVzdAkJKnJlcTsKKwlzdHJ1Y3QgZ29rdV91ZGNfcmVncyBfX2lvbWVtCSpyZWdzID0gZXAtPmRldi0+cmVnczsKKwl1MzIJCQkJbWFzdGVyOworCisJbWFzdGVyID0gcmVhZGwoJnJlZ3MtPmRtYV9tYXN0ZXIpOworCisJaWYgKHVubGlrZWx5KGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpKSB7CitzdG9wOgorCQlpZiAoZXAtPmlzX2luKQorCQkJZGV2LT5pbnRfZW5hYmxlICY9IH5JTlRfTVNUUkRFTkQ7CisJCWVsc2UKKwkJCWRldi0+aW50X2VuYWJsZSAmPSB+KElOVF9NU1RXUkVORHxJTlRfTVNUV1JUTU9VVCk7CisJCXdyaXRlbChkZXYtPmludF9lbmFibGUsICZyZWdzLT5pbnRfZW5hYmxlKTsKKwkJcmV0dXJuOworCX0KKwlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgZ29rdV9yZXF1ZXN0LCBxdWV1ZSk7CisKKwkvKiBub3JtYWwgaHcgZG1hIGNvbXBsZXRpb24gKG5vdCBhYm9ydCkgKi8KKwlpZiAobGlrZWx5KGVwLT5pc19pbikpIHsKKwkJaWYgKHVubGlrZWx5KG1hc3RlciAmIE1TVF9SRF9FTkEpKQorCQkJcmV0dXJuOworCQlyZXEtPnJlcS5hY3R1YWwgPSByZWFkbCgmcmVncy0+aW5fZG1hX2N1cnJlbnQpOworCX0gZWxzZSB7CisJCWlmICh1bmxpa2VseShtYXN0ZXIgJiBNU1RfV1JfRU5BKSkKKwkJCXJldHVybjsKKworCQkvKiBoYXJkd2FyZSBtZXJnZXMgc2hvcnQgcGFja2V0cywgYW5kIGFsc28gaGlkZXMgcGFja2V0CisJCSAqIG92ZXJydW5zLiAgYSBwYXJ0aWFsIHBhY2tldCBNQVkgYmUgaW4gdGhlIGZpZm8gaGVyZS4KKwkJICovCisJCXJlcS0+cmVxLmFjdHVhbCA9IHJlYWRsKCZyZWdzLT5vdXRfZG1hX2N1cnJlbnQpOworCX0KKwlyZXEtPnJlcS5hY3R1YWwgLT0gcmVxLT5yZXEuZG1hOworCXJlcS0+cmVxLmFjdHVhbCsrOworCisjaWZkZWYgVVNCX1RSQUNFCisJVkRCRyhkZXYsICJkb25lICVzICVzIGRtYSwgJXUvJXUgYnl0ZXMsIHJlcSAlcFxuIiwKKwkJZXAtPmVwLm5hbWUsIGVwLT5pc19pbiA/ICJJTiIgOiAiT1VUIiwKKwkJcmVxLT5yZXEuYWN0dWFsLCByZXEtPnJlcS5sZW5ndGgsIHJlcSk7CisjZW5kaWYKKwlkb25lKGVwLCByZXEsIDApOworCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQlnb3RvIHN0b3A7CisJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IGdva3VfcmVxdWVzdCwgcXVldWUpOworCSh2b2lkKSBzdGFydF9kbWEoZXAsIHJlcSk7Cit9CisKK3N0YXRpYyB2b2lkIGFib3J0X2RtYShzdHJ1Y3QgZ29rdV9lcCAqZXAsIGludCBzdGF0dXMpCit7CisJc3RydWN0IGdva3VfdWRjX3JlZ3MgX19pb21lbQkqcmVncyA9IGVwLT5kZXYtPnJlZ3M7CisJc3RydWN0IGdva3VfcmVxdWVzdAkJKnJlcTsKKwl1MzIJCQkJY3VyciwgbWFzdGVyOworCisJLyogTkFLIGZ1dHVyZSBob3N0IHJlcXVlc3RzLCBob3BpbmcgdGhlIGltcGxpY2l0IGRlbGF5IGxldHMgdGhlCisJICogZG1hIGVuZ2luZSBmaW5pc2ggcmVhZGluZyAob3Igd3JpdGluZykgaXRzIGxhdGVzdCBwYWNrZXQgYW5kCisJICogZW1wdHkgdGhlIGRtYSBidWZmZXIgKHVwIHRvIDE2IGJ5dGVzKS4KKwkgKgorCSAqIFRoaXMgYXZvaWRzIG5lZWRpbmcgdG8gY2xlYW4gdXAgYSBwYXJ0aWFsIHBhY2tldCBpbiB0aGUgZmlmbzsKKwkgKiB3ZSBjYW4ndCBkbyB0aGF0IGZvciBJTiB3aXRob3V0IHNpZGUgZWZmZWN0cyB0byBIQUxUIGFuZCBUT0dHTEUuCisJICovCisJY29tbWFuZChyZWdzLCBDT01NQU5EX0ZJRk9fRElTQUJMRSwgZXAtPm51bSk7CisJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IGdva3VfcmVxdWVzdCwgcXVldWUpOworCW1hc3RlciA9IHJlYWRsKCZyZWdzLT5kbWFfbWFzdGVyKSAmIE1TVF9SV19CSVRTOworCisJLyogRklYTUUgdXNpbmcgdGhlc2UgcmVzZXRzIGlzbid0IHVzYWJseSBkb2N1bWVudGVkLiB0aGlzIG1heQorCSAqIG5vdCB3b3JrIHVubGVzcyBpdCdzIGZvbGxvd2VkIGJ5IGRpc2FibGluZyB0aGUgZW5kcG9pbnQuCisJICoKKwkgKiBGSVhNRSB0aGUgT1VUIHJlc2V0IHBhdGggZG9lc24ndCBldmVuIGJlaGF2ZSBjb25zaXN0ZW50bHkuCisJICovCisJaWYgKGVwLT5pc19pbikgeworCQlpZiAodW5saWtlbHkoKHJlYWRsKCZyZWdzLT5kbWFfbWFzdGVyKSAmIE1TVF9SRF9FTkEpID09IDApKQorCQkJZ290byBmaW5pc2hlZDsKKwkJY3VyciA9IHJlYWRsKCZyZWdzLT5pbl9kbWFfY3VycmVudCk7CisKKwkJd3JpdGVsKGN1cnIsICZyZWdzLT5pbl9kbWFfZW5kKTsKKwkJd3JpdGVsKGN1cnIsICZyZWdzLT5pbl9kbWFfc3RhcnQpOworCisJCW1hc3RlciAmPSB+TVNUX1JfQklUUzsKKwkJbWFzdGVyIHw9IE1TVF9SRF9SRVNFVDsKKwkJd3JpdGVsKG1hc3RlciwgJnJlZ3MtPmRtYV9tYXN0ZXIpOworCisJCWlmIChyZWFkbCgmcmVncy0+ZG1hX21hc3RlcikgJiBNU1RfUkRfRU5BKQorCQkJREJHKGVwLT5kZXYsICJJTiBkbWEgYWN0aXZlIGFmdGVyIHJlc2V0IVxuIik7CisKKwl9IGVsc2UgeworCQlpZiAodW5saWtlbHkoKHJlYWRsKCZyZWdzLT5kbWFfbWFzdGVyKSAmIE1TVF9XUl9FTkEpID09IDApKQorCQkJZ290byBmaW5pc2hlZDsKKwkJY3VyciA9IHJlYWRsKCZyZWdzLT5vdXRfZG1hX2N1cnJlbnQpOworCisJCXdyaXRlbChjdXJyLCAmcmVncy0+b3V0X2RtYV9lbmQpOworCQl3cml0ZWwoY3VyciwgJnJlZ3MtPm91dF9kbWFfc3RhcnQpOworCisJCW1hc3RlciAmPSB+TVNUX1dfQklUUzsKKwkJbWFzdGVyIHw9IE1TVF9XUl9SRVNFVDsKKwkJd3JpdGVsKG1hc3RlciwgJnJlZ3MtPmRtYV9tYXN0ZXIpOworCisJCWlmIChyZWFkbCgmcmVncy0+ZG1hX21hc3RlcikgJiBNU1RfV1JfRU5BKQorCQkJREJHKGVwLT5kZXYsICJPVVQgZG1hIGFjdGl2ZSBhZnRlciByZXNldCFcbiIpOworCX0KKwlyZXEtPnJlcS5hY3R1YWwgPSAoY3VyciAtIHJlcS0+cmVxLmRtYSkgKyAxOworCXJlcS0+cmVxLnN0YXR1cyA9IHN0YXR1czsKKworCVZEQkcoZXAtPmRldiwgIiVzICVzICVzICVkLyVkXG4iLCBfX0ZVTkNUSU9OX18sIGVwLT5lcC5uYW1lLAorCQllcC0+aXNfaW4gPyAiSU4iIDogIk9VVCIsCisJCXJlcS0+cmVxLmFjdHVhbCwgcmVxLT5yZXEubGVuZ3RoKTsKKworCWNvbW1hbmQocmVncywgQ09NTUFORF9GSUZPX0VOQUJMRSwgZXAtPm51bSk7CisKKwlyZXR1cm47CisKK2ZpbmlzaGVkOgorCS8qIGRtYSBhbHJlYWR5IGNvbXBsZXRlZDsgbm8gYWJvcnQgbmVlZGVkICovCisJY29tbWFuZChyZWdzLCBDT01NQU5EX0ZJRk9fRU5BQkxFLCBlcC0+bnVtKTsKKwlyZXEtPnJlcS5hY3R1YWwgPSByZXEtPnJlcS5sZW5ndGg7CisJcmVxLT5yZXEuc3RhdHVzID0gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludAorZ29rdV9xdWV1ZShzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSwgaW50IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgZ29rdV9yZXF1ZXN0CSpyZXE7CisJc3RydWN0IGdva3VfZXAJCSplcDsKKwlzdHJ1Y3QgZ29rdV91ZGMJCSpkZXY7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJaW50CQkJc3RhdHVzOworCisJLyogYWx3YXlzIHJlcXVpcmUgYSBjcHUtdmlldyBidWZmZXIgc28gcGlvIHdvcmtzICovCisJcmVxID0gY29udGFpbmVyX29mKF9yZXEsIHN0cnVjdCBnb2t1X3JlcXVlc3QsIHJlcSk7CisJaWYgKHVubGlrZWx5KCFfcmVxIHx8ICFfcmVxLT5jb21wbGV0ZQorCQkJfHwgIV9yZXEtPmJ1ZiB8fCAhbGlzdF9lbXB0eSgmcmVxLT5xdWV1ZSkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBnb2t1X2VwLCBlcCk7CisJaWYgKHVubGlrZWx5KCFfZXAgfHwgKCFlcC0+ZGVzYyAmJiBlcC0+bnVtICE9IDApKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGV2ID0gZXAtPmRldjsKKwlpZiAodW5saWtlbHkoIWRldi0+ZHJpdmVyIHx8IGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSkKKwkJcmV0dXJuIC1FU0hVVERPV047CisKKwkvKiBjYW4ndCB0b3VjaCByZWdpc3RlcnMgd2hlbiBzdXNwZW5kZWQgKi8KKwlpZiAoZGV2LT5lcDBzdGF0ZSA9PSBFUDBfU1VTUEVORCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIHNldCB1cCBkbWEgbWFwcGluZyBpbiBjYXNlIHRoZSBjYWxsZXIgZGlkbid0ICovCisJaWYgKGVwLT5kbWEgJiYgX3JlcS0+ZG1hID09IERNQV9BRERSX0lOVkFMSUQpIHsKKwkJX3JlcS0+ZG1hID0gcGNpX21hcF9zaW5nbGUoZGV2LT5wZGV2LCBfcmVxLT5idWYsIF9yZXEtPmxlbmd0aCwKKwkJCWVwLT5pc19pbiA/IFBDSV9ETUFfVE9ERVZJQ0UgOiBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlyZXEtPm1hcHBlZCA9IDE7CisJfQorCisjaWZkZWYgVVNCX1RSQUNFCisJVkRCRyhkZXYsICIlcyBxdWV1ZSByZXEgJXAsIGxlbiAldSBidWYgJXBcbiIsCisJCQlfZXAtPm5hbWUsIF9yZXEsIF9yZXEtPmxlbmd0aCwgX3JlcS0+YnVmKTsKKyNlbmRpZgorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJX3JlcS0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCV9yZXEtPmFjdHVhbCA9IDA7CisKKwkvKiBmb3IgZXAwIElOIHdpdGhvdXQgcHJlbWF0dXJlIHN0YXR1cywgemxwIGlzIHJlcXVpcmVkIGFuZAorCSAqIHdyaXRpbmcgRU9QIHN0YXJ0cyB0aGUgc3RhdHVzIHN0YWdlIChPVVQpLgorCSAqLworCWlmICh1bmxpa2VseShlcC0+bnVtID09IDAgJiYgZXAtPmlzX2luKSkKKwkJX3JlcS0+emVybyA9IDE7CisKKwkvKiBraWNrc3RhcnQgdGhpcyBpL28gcXVldWU/ICovCisJc3RhdHVzID0gMDsKKwlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSAmJiBsaWtlbHkoIWVwLT5zdG9wcGVkKSkgeworCQkvKiBkbWE6ICBkb25lIGFmdGVyIGRtYSBjb21wbGV0aW9uIElSUSAob3IgZXJyb3IpCisJCSAqIHBpbzogIGRvbmUgYWZ0ZXIgbGFzdCBmaWZvIG9wZXJhdGlvbgorCQkgKi8KKwkJaWYgKGVwLT5kbWEpCisJCQlzdGF0dXMgPSBzdGFydF9kbWEoZXAsIHJlcSk7CisJCWVsc2UKKwkJCXN0YXR1cyA9IChlcC0+aXNfaW4gPyB3cml0ZV9maWZvIDogcmVhZF9maWZvKShlcCwgcmVxKTsKKworCQlpZiAodW5saWtlbHkoc3RhdHVzICE9IDApKSB7CisJCQlpZiAoc3RhdHVzID4gMCkKKwkJCQlzdGF0dXMgPSAwOworCQkJcmVxID0gTlVMTDsKKwkJfQorCisJfSAvKiBlbHNlIHBpbyBvciBkbWEgaXJxIGhhbmRsZXIgYWR2YW5jZXMgdGhlIHF1ZXVlLiAqLworCisJaWYgKGxpa2VseShyZXEgIT0gMCkpCisJCWxpc3RfYWRkX3RhaWwoJnJlcS0+cXVldWUsICZlcC0+cXVldWUpOworCisJaWYgKGxpa2VseSghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkKKwkJCSYmIGxpa2VseShlcC0+bnVtICE9IDApCisJCQkmJiAhZXAtPmRtYQorCQkJJiYgIShkZXYtPmludF9lbmFibGUgJiBJTlRfRVB4REFUQVNFVCAoZXAtPm51bSkpKQorCQlwaW9faXJxX2VuYWJsZShkZXYsIGRldi0+cmVncywgZXAtPm51bSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIHBjaSB3cml0ZXMgbWF5IHN0aWxsIGJlIHBvc3RlZCAqLworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIGRlcXVldWUgQUxMIHJlcXVlc3RzICovCitzdGF0aWMgdm9pZCBudWtlKHN0cnVjdCBnb2t1X2VwICplcCwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgZ29rdV9yZXF1ZXN0CSpyZXE7CisKKwllcC0+c3RvcHBlZCA9IDE7CisJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCXJldHVybjsKKwlpZiAoZXAtPmRtYSkKKwkJYWJvcnRfZG1hKGVwLCBzdGF0dXMpOworCXdoaWxlICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgZ29rdV9yZXF1ZXN0LCBxdWV1ZSk7CisJCWRvbmUoZXAsIHJlcSwgc3RhdHVzKTsKKwl9Cit9CisKKy8qIGRlcXVldWUgSlVTVCBPTkUgcmVxdWVzdCAqLworc3RhdGljIGludCBnb2t1X2RlcXVldWUoc3RydWN0IHVzYl9lcCAqX2VwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKl9yZXEpCit7CisJc3RydWN0IGdva3VfcmVxdWVzdAkqcmVxOworCXN0cnVjdCBnb2t1X2VwCQkqZXA7CisJc3RydWN0IGdva3VfdWRjCQkqZGV2OworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgZ29rdV9lcCwgZXApOworCWlmICghX2VwIHx8ICFfcmVxIHx8ICghZXAtPmRlc2MgJiYgZXAtPm51bSAhPSAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGV2ID0gZXAtPmRldjsKKwlpZiAoIWRldi0+ZHJpdmVyKQorCQlyZXR1cm4gLUVTSFVURE9XTjsKKworCS8qIHdlIGNhbid0IHRvdWNoIChkbWEpIHJlZ2lzdGVycyB3aGVuIHN1c3BlbmRlZCAqLworCWlmIChkZXYtPmVwMHN0YXRlID09IEVQMF9TVVNQRU5EKQorCQlyZXR1cm4gLUVCVVNZOworCisJVkRCRyhkZXYsICIlcyAlcyAlcyAlcyAlcFxuIiwgX19GVU5DVElPTl9fLCBfZXAtPm5hbWUsCisJCWVwLT5pc19pbiA/ICJJTiIgOiAiT1VUIiwKKwkJZXAtPmRtYSA/ICJkbWEiIDogInBpbyIsCisJCV9yZXEpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJLyogbWFrZSBzdXJlIGl0J3MgYWN0dWFsbHkgcXVldWVkIG9uIHRoaXMgZW5kcG9pbnQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CisJCWlmICgmcmVxLT5yZXEgPT0gX3JlcSkKKwkJCWJyZWFrOworCX0KKwlpZiAoJnJlcS0+cmVxICE9IF9yZXEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZXAtPmRtYSAmJiBlcC0+cXVldWUubmV4dCA9PSAmcmVxLT5xdWV1ZSAmJiAhZXAtPnN0b3BwZWQpIHsKKwkJYWJvcnRfZG1hKGVwLCAtRUNPTk5SRVNFVCk7CisJCWRvbmUoZXAsIHJlcSwgLUVDT05OUkVTRVQpOworCQlkbWFfYWR2YW5jZShkZXYsIGVwKTsKKwl9IGVsc2UgaWYgKCFsaXN0X2VtcHR5KCZyZXEtPnF1ZXVlKSkKKwkJZG9uZShlcCwgcmVxLCAtRUNPTk5SRVNFVCk7CisJZWxzZQorCQlyZXEgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJlcSA/IDAgOiAtRU9QTk9UU1VQUDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgZ29rdV9jbGVhcl9oYWx0KHN0cnVjdCBnb2t1X2VwICplcCkKK3sKKwkvLyBhc3NlcnQgKGVwLT5udW0gIT0wKQorCVZEQkcoZXAtPmRldiwgIiVzIGNsZWFyIGhhbHRcbiIsIGVwLT5lcC5uYW1lKTsKKwljb21tYW5kKGVwLT5kZXYtPnJlZ3MsIENPTU1BTkRfU0VUREFUQTAsIGVwLT5udW0pOworCWNvbW1hbmQoZXAtPmRldi0+cmVncywgQ09NTUFORF9TVEFMTF9DTEVBUiwgZXAtPm51bSk7CisJaWYgKGVwLT5zdG9wcGVkKSB7CisJCWVwLT5zdG9wcGVkID0gMDsKKwkJaWYgKGVwLT5kbWEpIHsKKwkJCXN0cnVjdCBnb2t1X3JlcXVlc3QJKnJlcTsKKworCQkJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCQkJcmV0dXJuOworCQkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IGdva3VfcmVxdWVzdCwKKwkJCQkJCXF1ZXVlKTsKKwkJCSh2b2lkKSBzdGFydF9kbWEoZXAsIHJlcSk7CisJCX0gZWxzZQorCQkJcGlvX2FkdmFuY2UoZXApOworCX0KK30KKworc3RhdGljIGludCBnb2t1X3NldF9oYWx0KHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBnb2t1X2VwCSplcDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCWludAkJcmV0dmFsID0gMDsKKworCWlmICghX2VwKQorCQlyZXR1cm4gLUVOT0RFVjsKKwllcCA9IGNvbnRhaW5lcl9vZiAoX2VwLCBzdHJ1Y3QgZ29rdV9lcCwgZXApOworCisJaWYgKGVwLT5udW0gPT0gMCkgeworCQlpZiAodmFsdWUpIHsKKwkJCWVwLT5kZXYtPmVwMHN0YXRlID0gRVAwX1NUQUxMOworCQkJZXAtPmRldi0+ZXBbMF0uc3RvcHBlZCA9IDE7CisJCX0gZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBkb24ndCBjaGFuZ2UgRVB4U1RBVFVTX0VQX0lOVkFMSUQgdG8gUkVBRFkgKi8KKwl9IGVsc2UgaWYgKCFlcC0+ZGVzYykgeworCQlEQkcoZXAtPmRldiwgIiVzICVzIGluYWN0aXZlP1xuIiwgX19GVU5DVElPTl9fLCBlcC0+ZXAubmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQlyZXR2YWwgPSAtRUFHQUlOOworCWVsc2UgaWYgKGVwLT5pc19pbiAmJiB2YWx1ZQorCQkJLyogZGF0YSBpbiAoZWl0aGVyKSBwYWNrZXQgYnVmZmVyPyAqLworCQkJJiYgKHJlYWRsKCZlcC0+ZGV2LT5yZWdzLT5EYXRhU2V0KQorCQkJCQkmIERBVEFTRVRfQUIoZXAtPm51bSkpKQorCQlyZXR2YWwgPSAtRUFHQUlOOworCWVsc2UgaWYgKCF2YWx1ZSkKKwkJZ29rdV9jbGVhcl9oYWx0KGVwKTsKKwllbHNlIHsKKwkJZXAtPnN0b3BwZWQgPSAxOworCQlWREJHKGVwLT5kZXYsICIlcyBzZXQgaGFsdFxuIiwgZXAtPmVwLm5hbWUpOworCQljb21tYW5kKGVwLT5kZXYtPnJlZ3MsIENPTU1BTkRfU1RBTEwsIGVwLT5udW0pOworCQlyZWFkbChlcC0+cmVnX3N0YXR1cyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5kZXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGdva3VfZmlmb19zdGF0dXMoc3RydWN0IHVzYl9lcCAqX2VwKQoreworCXN0cnVjdCBnb2t1X2VwCQkJKmVwOworCXN0cnVjdCBnb2t1X3VkY19yZWdzIF9faW9tZW0JKnJlZ3M7CisJdTMyCQkJCXNpemU7CisKKwlpZiAoIV9lcCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgZ29rdV9lcCwgZXApOworCisJLyogc2l6ZSBpcyBvbmx5IHJlcG9ydGVkIHNhbmVseSBmb3IgT1VUICovCisJaWYgKGVwLT5pc19pbikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJLyogaWdub3JlcyAxNi1ieXRlIGRtYSBidWZmZXI7IFNpemVIID09IDAgKi8KKwlyZWdzID0gZXAtPmRldi0+cmVnczsKKwlzaXplID0gcmVhZGwoJnJlZ3MtPkVQeFNpemVMQVtlcC0+bnVtXSkgJiBEQVRBU0laRTsKKwlzaXplICs9IHJlYWRsKCZyZWdzLT5FUHhTaXplTEJbZXAtPm51bV0pICYgREFUQVNJWkU7CisJVkRCRyhlcC0+ZGV2LCAiJXMgJXMgJXVcbiIsIF9fRlVOQ1RJT05fXywgZXAtPmVwLm5hbWUsIHNpemUpOworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgdm9pZCBnb2t1X2ZpZm9fZmx1c2goc3RydWN0IHVzYl9lcCAqX2VwKQoreworCXN0cnVjdCBnb2t1X2VwCQkJKmVwOworCXN0cnVjdCBnb2t1X3VkY19yZWdzIF9faW9tZW0JKnJlZ3M7CisJdTMyCQkJCXNpemU7CisKKwlpZiAoIV9lcCkKKwkJcmV0dXJuOworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IGdva3VfZXAsIGVwKTsKKwlWREJHKGVwLT5kZXYsICIlcyAlc1xuIiwgX19GVU5DVElPTl9fLCBlcC0+ZXAubmFtZSk7CisKKwkvKiBkb24ndCBjaGFuZ2UgRVB4U1RBVFVTX0VQX0lOVkFMSUQgdG8gUkVBRFkgKi8KKwlpZiAoIWVwLT5kZXNjICYmIGVwLT5udW0gIT0gMCkgeworCQlEQkcoZXAtPmRldiwgIiVzICVzIGluYWN0aXZlP1xuIiwgX19GVU5DVElPTl9fLCBlcC0+ZXAubmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlyZWdzID0gZXAtPmRldi0+cmVnczsKKwlzaXplID0gcmVhZGwoJnJlZ3MtPkVQeFNpemVMQVtlcC0+bnVtXSk7CisJc2l6ZSAmPSBEQVRBU0laRTsKKworCS8qIE5vbi1kZXNpcmFibGUgYmVoYXZpb3I6ICBGSUZPX0NMRUFSIGFsc28gY2xlYXJzIHRoZQorCSAqIGVuZHBvaW50IGhhbHQgZmVhdHVyZS4gIEZvciBPVVQsIHdlIF9jb3VsZF8ganVzdCByZWFkCisJICogdGhlIGJ5dGVzIG91dCAoUElPLCBpZiAhZXAtPmRtYSk7IGZvciBpbiwgbm8gY2hvaWNlLgorCSAqLworCWlmIChzaXplKQorCQljb21tYW5kKHJlZ3MsIENPTU1BTkRfRklGT19DTEVBUiwgZXAtPm51bSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VwX29wcyBnb2t1X2VwX29wcyA9IHsKKwkuZW5hYmxlCQk9IGdva3VfZXBfZW5hYmxlLAorCS5kaXNhYmxlCT0gZ29rdV9lcF9kaXNhYmxlLAorCisJLmFsbG9jX3JlcXVlc3QJPSBnb2t1X2FsbG9jX3JlcXVlc3QsCisJLmZyZWVfcmVxdWVzdAk9IGdva3VfZnJlZV9yZXF1ZXN0LAorCisJLmFsbG9jX2J1ZmZlcgk9IGdva3VfYWxsb2NfYnVmZmVyLAorCS5mcmVlX2J1ZmZlcgk9IGdva3VfZnJlZV9idWZmZXIsCisKKwkucXVldWUJCT0gZ29rdV9xdWV1ZSwKKwkuZGVxdWV1ZQk9IGdva3VfZGVxdWV1ZSwKKworCS5zZXRfaGFsdAk9IGdva3Vfc2V0X2hhbHQsCisJLmZpZm9fc3RhdHVzCT0gZ29rdV9maWZvX3N0YXR1cywKKwkuZmlmb19mbHVzaAk9IGdva3VfZmlmb19mbHVzaCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZ29rdV9nZXRfZnJhbWUoc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9nYWRnZXRfb3BzIGdva3Vfb3BzID0geworCS5nZXRfZnJhbWUJPSBnb2t1X2dldF9mcmFtZSwKKwkvLyBubyByZW1vdGUgd2FrZXVwCisJLy8gbm90IHNlbGZwb3dlcmVkCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIGNoYXIgKmRtYXN0cih2b2lkKQoreworCWlmICh1c2VfZG1hID09IDApCisJCXJldHVybiAiKGRtYSBkaXNhYmxlZCkiOworCWVsc2UgaWYgKHVzZV9kbWEgPT0gMikKKwkJcmV0dXJuICIoZG1hIElOIGFuZCBPVVQpIjsKKwllbHNlCisJCXJldHVybiAiKGRtYSBJTikiOworfQorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMKKworc3RhdGljIGNvbnN0IGNoYXIgcHJvY19ub2RlX25hbWUgW10gPSAiZHJpdmVyL3VkYyI7CisKKyNkZWZpbmUgRk9VUkJJVFMgIiVzJXMlcyVzIgorI2RlZmluZSBFSUdIVEJJVFMgRk9VUkJJVFMgRk9VUkJJVFMKKworc3RhdGljIHZvaWQKK2R1bXBfaW50bWFzayhjb25zdCBjaGFyICpsYWJlbCwgdTMyIG1hc2ssIGNoYXIgKipuZXh0LCB1bnNpZ25lZCAqc2l6ZSkKK3sKKwlpbnQgdDsKKworCS8qIGludF9zdGF0dXMgaXMgdGhlIHNhbWUgZm9ybWF0IC4uLiAqLworCXQgPSBzY25wcmludGYoKm5leHQsICpzaXplLAorCQkiJXMgJTA1WCA9IiBGT1VSQklUUyBFSUdIVEJJVFMgRUlHSFRCSVRTICJcbiIsCisJCWxhYmVsLCBtYXNrLAorCQkobWFzayAmIElOVF9QV1JERVRFQ1QpID8gIiBwb3dlciIgOiAiIiwKKwkJKG1hc2sgJiBJTlRfU1lTRVJST1IpID8gIiBzeXMiIDogIiIsCisJCShtYXNrICYgSU5UX01TVFJERU5EKSA/ICIgaW4tZG1hIiA6ICIiLAorCQkobWFzayAmIElOVF9NU1RXUlRNT1VUKSA/ICIgd3J0bW8iIDogIiIsCisKKwkJKG1hc2sgJiBJTlRfTVNUV1JFTkQpID8gIiBvdXQtZG1hIiA6ICIiLAorCQkobWFzayAmIElOVF9NU1RXUlNFVCkgPyAiIHdyc2V0IiA6ICIiLAorCQkobWFzayAmIElOVF9FUlIpID8gIiBlcnIiIDogIiIsCisJCShtYXNrICYgSU5UX1NPRikgPyAiIHNvZiIgOiAiIiwKKworCQkobWFzayAmIElOVF9FUDNOQUspID8gIiBlcDNuYWsiIDogIiIsCisJCShtYXNrICYgSU5UX0VQMk5BSykgPyAiIGVwMm5hayIgOiAiIiwKKwkJKG1hc2sgJiBJTlRfRVAxTkFLKSA/ICIgZXAxbmFrIiA6ICIiLAorCQkobWFzayAmIElOVF9FUDNEQVRBU0VUKSA/ICIgZXAzIiA6ICIiLAorCisJCShtYXNrICYgSU5UX0VQMkRBVEFTRVQpID8gIiBlcDIiIDogIiIsCisJCShtYXNrICYgSU5UX0VQMURBVEFTRVQpID8gIiBlcDEiIDogIiIsCisJCShtYXNrICYgSU5UX1NUQVRVU05BSykgPyAiIGVwMHNuYWsiIDogIiIsCisJCShtYXNrICYgSU5UX1NUQVRVUykgPyAiIGVwMHN0YXR1cyIgOiAiIiwKKworCQkobWFzayAmIElOVF9TRVRVUCkgPyAiIHNldHVwIiA6ICIiLAorCQkobWFzayAmIElOVF9FTkRQT0lOVDApID8gIiBlcDAiIDogIiIsCisJCShtYXNrICYgSU5UX1VTQlJFU0VUKSA/ICIgcmVzZXQiIDogIiIsCisJCShtYXNrICYgSU5UX1NVU1BFTkQpID8gIiBzdXNwZW5kIiA6ICIiKTsKKwkqc2l6ZSAtPSB0OworCSpuZXh0ICs9IHQ7Cit9CisKKworc3RhdGljIGludAordWRjX3Byb2NfcmVhZChjaGFyICpidWZmZXIsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCisJCWludCAqZW9mLCB2b2lkICpfZGV2KQoreworCWNoYXIJCQkJKmJ1ZiA9IGJ1ZmZlcjsKKwlzdHJ1Y3QgZ29rdV91ZGMJCQkqZGV2ID0gX2RldjsKKwlzdHJ1Y3QgZ29rdV91ZGNfcmVncyBfX2lvbWVtCSpyZWdzID0gZGV2LT5yZWdzOworCWNoYXIJCQkJKm5leHQgPSBidWY7CisJdW5zaWduZWQJCQlzaXplID0gY291bnQ7CisJdW5zaWduZWQgbG9uZwkJCWZsYWdzOworCWludAkJCQlpLCB0LCBpc191c2JfY29ubmVjdGVkOworCXUzMgkJCQl0bXA7CisKKwlpZiAob2ZmICE9IDApCisJCXJldHVybiAwOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJLyogYmFzaWMgZGV2aWNlIHN0YXR1cyAqLworCXRtcCA9IHJlYWRsKCZyZWdzLT5wb3dlcl9kZXRlY3QpOworCWlzX3VzYl9jb25uZWN0ZWQgPSB0bXAgJiBQV19ERVRFQ1Q7CisJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAorCQkiJXMgLSAlc1xuIgorCQkiJXMgdmVyc2lvbjogJXMgJXNcbiIKKwkJIkdhZGdldCBkcml2ZXI6ICVzXG4iCisJCSJIb3N0ICVzLCAlc1xuIgorCQkiXG4iLAorCQlwY2lfbmFtZShkZXYtPnBkZXYpLCBkcml2ZXJfZGVzYywKKwkJZHJpdmVyX25hbWUsIERSSVZFUl9WRVJTSU9OLCBkbWFzdHIoKSwKKwkJZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+ZHJpdmVyLm5hbWUgOiAiKG5vbmUpIiwKKwkJaXNfdXNiX2Nvbm5lY3RlZAorCQkJPyAoKHRtcCAmIFBXX1BVTExVUCkgPyAiZnVsbCBzcGVlZCIgOiAicG93ZXJlZCIpCisJCQk6ICJkaXNjb25uZWN0ZWQiLAorCQkoe2NoYXIgKnRtcDsKKwkJc3dpdGNoKGRldi0+ZXAwc3RhdGUpeworCQljYXNlIEVQMF9ESVNDT05ORUNUOgl0bXAgPSAiZXAwX2Rpc2Nvbm5lY3QiOyBicmVhazsKKwkJY2FzZSBFUDBfSURMRToJCXRtcCA9ICJlcDBfaWRsZSI7IGJyZWFrOworCQljYXNlIEVQMF9JTjoJCXRtcCA9ICJlcDBfaW4iOyBicmVhazsKKwkJY2FzZSBFUDBfT1VUOgkJdG1wID0gImVwMF9vdXQiOyBicmVhazsKKwkJY2FzZSBFUDBfU1RBVFVTOgl0bXAgPSAiZXAwX3N0YXR1cyI7IGJyZWFrOworCQljYXNlIEVQMF9TVEFMTDoJCXRtcCA9ICJlcDBfc3RhbGwiOyBicmVhazsKKwkJY2FzZSBFUDBfU1VTUEVORDoJdG1wID0gImVwMF9zdXNwZW5kIjsgYnJlYWs7CisJCWRlZmF1bHQ6CQl0bXAgPSAiZXAwXz8iOyBicmVhazsKKwkJfSB0bXA7IH0pCisJCSk7CisJc2l6ZSAtPSB0OworCW5leHQgKz0gdDsKKworCWR1bXBfaW50bWFzaygiaW50X3N0YXR1cyIsIHJlYWRsKCZyZWdzLT5pbnRfc3RhdHVzKSwgJm5leHQsICZzaXplKTsKKwlkdW1wX2ludG1hc2soImludF9lbmFibGUiLCByZWFkbCgmcmVncy0+aW50X2VuYWJsZSksICZuZXh0LCAmc2l6ZSk7CisKKwlpZiAoIWlzX3VzYl9jb25uZWN0ZWQgfHwgIWRldi0+ZHJpdmVyIHx8ICh0bXAgJiBQV19QVUxMVVApID09IDApCisJCWdvdG8gZG9uZTsKKworCS8qIHJlZ2lzdGVycyBmb3IgKGFjdGl2ZSkgZGV2aWNlIGFuZCBlcDAgKi8KKwl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsICJcbmlycXMgJWx1XG5kYXRhc2V0ICUwMnggIgorCQkJInNpbmdsZS5iY3MgJTAyeC4lMDJ4IHN0YXRlICV4IGFkZHIgJXVcbiIsCisJCQlkZXYtPmlycXMsIHJlYWRsKCZyZWdzLT5EYXRhU2V0KSwKKwkJCXJlYWRsKCZyZWdzLT5FUHhTaW5nbGUpLCByZWFkbCgmcmVncy0+RVB4QkNTKSwKKwkJCXJlYWRsKCZyZWdzLT5Vc2JTdGF0ZSksCisJCQlyZWFkbCgmcmVncy0+YWRkcmVzcykpOworCXNpemUgLT0gdDsKKwluZXh0ICs9IHQ7CisKKwl0bXAgPSByZWFkbCgmcmVncy0+ZG1hX21hc3Rlcik7CisJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAorCQkiZG1hICUwM1ggPSIgRUlHSFRCSVRTICIlcyAlc1xuIiwgdG1wLAorCQkodG1wICYgTVNUX0VPUEJfRElTKSA/ICIgZW9wYi0iIDogIiIsCisJCSh0bXAgJiBNU1RfRU9QQl9FTkEpID8gIiBlb3BiKyIgOiAiIiwKKwkJKHRtcCAmIE1TVF9USU1FT1VUX0RJUykgPyAiIHRtby0iIDogIiIsCisJCSh0bXAgJiBNU1RfVElNRU9VVF9FTkEpID8gIiB0bW8rIiA6ICIiLAorCisJCSh0bXAgJiBNU1RfUkRfRU9QQikgPyAiIGVvcGIiIDogIiIsCisJCSh0bXAgJiBNU1RfUkRfUkVTRVQpID8gIiBpbl9yZXNldCIgOiAiIiwKKwkJKHRtcCAmIE1TVF9XUl9SRVNFVCkgPyAiIG91dF9yZXNldCIgOiAiIiwKKwkJKHRtcCAmIE1TVF9SRF9FTkEpID8gIiBJTiIgOiAiIiwKKworCQkodG1wICYgTVNUX1dSX0VOQSkgPyAiIE9VVCIgOiAiIiwKKwkJKHRtcCAmIE1TVF9DT05ORUNUSU9OKQorCQkJPyAiZXAxaW4vZXAyb3V0IgorCQkJOiAiZXAxb3V0L2VwMmluIik7CisJc2l6ZSAtPSB0OworCW5leHQgKz0gdDsKKworCS8qIGR1bXAgZW5kcG9pbnQgcXVldWVzICovCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlzdHJ1Y3QgZ29rdV9lcAkJKmVwID0gJmRldi0+ZXAgW2ldOworCQlzdHJ1Y3QgZ29rdV9yZXF1ZXN0CSpyZXE7CisJCWludAkJCXQ7CisKKwkJaWYgKGkgJiYgIWVwLT5kZXNjKQorCQkJY29udGludWU7CisKKwkJdG1wID0gcmVhZGwoZXAtPnJlZ19zdGF0dXMpOworCQl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCisJCQkiJXMgJXMgbWF4ICV1ICVzLCBpcnFzICVsdSwgIgorCQkJInN0YXR1cyAlMDJ4ICglcykgIiBGT1VSQklUUyAiXG4iLAorCQkJZXAtPmVwLm5hbWUsCisJCQllcC0+aXNfaW4gPyAiaW4iIDogIm91dCIsCisJCQllcC0+ZXAubWF4cGFja2V0LAorCQkJZXAtPmRtYSA/ICJkbWEiIDogInBpbyIsCisJCQllcC0+aXJxcywKKwkJCXRtcCwgKHsgY2hhciAqczsKKwkJCXN3aXRjaCAodG1wICYgRVB4U1RBVFVTX0VQX01BU0spIHsKKwkJCWNhc2UgRVB4U1RBVFVTX0VQX1JFQURZOgorCQkJCXMgPSAicmVhZHkiOyBicmVhazsKKwkJCWNhc2UgRVB4U1RBVFVTX0VQX0RBVEFJTjoKKwkJCQlzID0gInBhY2tldCI7IGJyZWFrOworCQkJY2FzZSBFUHhTVEFUVVNfRVBfRlVMTDoKKwkJCQlzID0gImZ1bGwiOyBicmVhazsKKwkJCWNhc2UgRVB4U1RBVFVTX0VQX1RYX0VSUjoJLy8gaG9zdCB3aWxsIHJldHJ5CisJCQkJcyA9ICJ0eF9lcnIiOyBicmVhazsKKwkJCWNhc2UgRVB4U1RBVFVTX0VQX1JYX0VSUjoKKwkJCQlzID0gInJ4X2VyciI7IGJyZWFrOworCQkJY2FzZSBFUHhTVEFUVVNfRVBfQlVTWToJCS8qIGVwMCBvbmx5ICovCisJCQkJcyA9ICJidXN5IjsgYnJlYWs7CisJCQljYXNlIEVQeFNUQVRVU19FUF9TVEFMTDoKKwkJCQlzID0gInN0YWxsIjsgYnJlYWs7CisJCQljYXNlIEVQeFNUQVRVU19FUF9JTlZBTElEOgkvLyB0aGVzZSAiY2FuJ3QgaGFwcGVuIgorCQkJCXMgPSAiaW52YWxpZCI7IGJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzID0gIj8iOyBicmVhazsKKwkJCX07IHM7IH0pLAorCQkJKHRtcCAmIEVQeFNUQVRVU19UT0dHTEUpID8gImRhdGExIiA6ICJkYXRhMCIsCisJCQkodG1wICYgRVB4U1RBVFVTX1NVU1BFTkQpID8gIiBzdXNwZW5kIiA6ICIiLAorCQkJKHRtcCAmIEVQeFNUQVRVU19GSUZPX0RJU0FCTEUpID8gIiBkaXNhYmxlIiA6ICIiLAorCQkJKHRtcCAmIEVQeFNUQVRVU19TVEFHRV9FUlJPUikgPyAiIGVwMHN0YXQiIDogIiIKKwkJCSk7CisJCWlmICh0IDw9IDAgfHwgdCA+IHNpemUpCisJCQlnb3RvIGRvbmU7CisJCXNpemUgLT0gdDsKKwkJbmV4dCArPSB0OworCisJCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCQl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsICJcdChub3RoaW5nIHF1ZXVlZClcbiIpOworCQkJaWYgKHQgPD0gMCB8fCB0ID4gc2l6ZSkKKwkJCQlnb3RvIGRvbmU7CisJCQlzaXplIC09IHQ7CisJCQluZXh0ICs9IHQ7CisJCQljb250aW51ZTsKKwkJfQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKKwkJCWlmIChlcC0+ZG1hICYmIHJlcS0+cXVldWUucHJldiA9PSAmZXAtPnF1ZXVlKSB7CisJCQkJaWYgKGkgPT0gVURDX01TVFJEX0VORFBPSU5UKQorCQkJCQl0bXAgPSByZWFkbCgmcmVncy0+aW5fZG1hX2N1cnJlbnQpOworCQkJCWVsc2UKKwkJCQkJdG1wID0gcmVhZGwoJnJlZ3MtPm91dF9kbWFfY3VycmVudCk7CisJCQkJdG1wIC09IHJlcS0+cmVxLmRtYTsKKwkJCQl0bXArKzsKKwkJCX0gZWxzZQorCQkJCXRtcCA9IHJlcS0+cmVxLmFjdHVhbDsKKworCQkJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAorCQkJCSJcdHJlcSAlcCBsZW4gJXUvJXUgYnVmICVwXG4iLAorCQkJCSZyZXEtPnJlcSwgdG1wLCByZXEtPnJlcS5sZW5ndGgsCisJCQkJcmVxLT5yZXEuYnVmKTsKKwkJCWlmICh0IDw9IDAgfHwgdCA+IHNpemUpCisJCQkJZ290byBkb25lOworCQkJc2l6ZSAtPSB0OworCQkJbmV4dCArPSB0OworCQl9CisJfQorCitkb25lOgorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkqZW9mID0gMTsKKwlyZXR1cm4gY291bnQgLSBzaXplOworfQorCisjZW5kaWYJLyogQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgdWRjX3JlaW5pdCAoc3RydWN0IGdva3VfdWRjICpkZXYpCit7CisJc3RhdGljIGNoYXIgKm5hbWVzIFtdID0geyAiZXAwIiwgImVwMS1idWxrIiwgImVwMi1idWxrIiwgImVwMy1idWxrIiB9OworCQorCXVuc2lnbmVkIGk7CisKKwlJTklUX0xJU1RfSEVBRCAoJmRldi0+Z2FkZ2V0LmVwX2xpc3QpOworCWRldi0+Z2FkZ2V0LmVwMCA9ICZkZXYtPmVwIFswXS5lcDsKKwlkZXYtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCWRldi0+ZXAwc3RhdGUgPSBFUDBfRElTQ09OTkVDVDsKKwlkZXYtPmlycXMgPSAwOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlzdHJ1Y3QgZ29rdV9lcAkqZXAgPSAmZGV2LT5lcFtpXTsKKworCQllcC0+bnVtID0gaTsKKwkJZXAtPmVwLm5hbWUgPSBuYW1lc1tpXTsKKwkJZXAtPnJlZ19maWZvID0gJmRldi0+cmVncy0+ZXBfZmlmbyBbaV07CisJCWVwLT5yZWdfc3RhdHVzID0gJmRldi0+cmVncy0+ZXBfc3RhdHVzIFtpXTsKKwkJZXAtPnJlZ19tb2RlID0gJmRldi0+cmVncy0+ZXBfbW9kZVtpXTsKKworCQllcC0+ZXAub3BzID0gJmdva3VfZXBfb3BzOworCQlsaXN0X2FkZF90YWlsICgmZXAtPmVwLmVwX2xpc3QsICZkZXYtPmdhZGdldC5lcF9saXN0KTsKKwkJZXAtPmRldiA9IGRldjsKKwkJSU5JVF9MSVNUX0hFQUQgKCZlcC0+cXVldWUpOworCisJCWVwX3Jlc2V0KE5VTEwsIGVwKTsKKwl9CisKKwlkZXYtPmVwWzBdLnJlZ19tb2RlID0gTlVMTDsKKwlkZXYtPmVwWzBdLmVwLm1heHBhY2tldCA9IE1BWF9FUDBfU0laRTsKKwlsaXN0X2RlbF9pbml0ICgmZGV2LT5lcFswXS5lcC5lcF9saXN0KTsKK30KKworc3RhdGljIHZvaWQgdWRjX3Jlc2V0KHN0cnVjdCBnb2t1X3VkYyAqZGV2KQoreworCXN0cnVjdCBnb2t1X3VkY19yZWdzIF9faW9tZW0JKnJlZ3MgPSBkZXYtPnJlZ3M7CisKKwl3cml0ZWwoMCwgJnJlZ3MtPnBvd2VyX2RldGVjdCk7CisJd3JpdGVsKDAsICZyZWdzLT5pbnRfZW5hYmxlKTsKKwlyZWFkbCgmcmVncy0+aW50X2VuYWJsZSk7CisJZGV2LT5pbnRfZW5hYmxlID0gMDsKKworCS8qIGRlYXNzZXJ0IHJlc2V0LCBsZWF2ZSBVU0IgRCsgYXQgaGktWiAobm8gcHVsbHVwKQorCSAqIGRvbid0IGxldCBJTlRfUFdSREVURUNUIHNlcXVlbmNlIGJlZ2luCisJICovCisJdWRlbGF5KDI1MCk7CisJd3JpdGVsKFBXX1JFU0VUQiwgJnJlZ3MtPnBvd2VyX2RldGVjdCk7CisJcmVhZGwoJnJlZ3MtPmludF9lbmFibGUpOworfQorCitzdGF0aWMgdm9pZCBlcDBfc3RhcnQoc3RydWN0IGdva3VfdWRjICpkZXYpCit7CisJc3RydWN0IGdva3VfdWRjX3JlZ3MgX19pb21lbQkqcmVncyA9IGRldi0+cmVnczsKKwl1bnNpZ25lZAkJCWk7CisKKwlWREJHKGRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJdWRjX3Jlc2V0KGRldik7CisJdWRjX3JlaW5pdCAoZGV2KTsKKwkvL3dyaXRlbChNU1RfRU9QQl9FTkEgfCBNU1RfVElNRU9VVF9FTkEsICZyZWdzLT5kbWFfbWFzdGVyKTsKKworCS8qIGh3IGhhbmRsZXMgc2V0X2FkZHJlc3MsIHNldF9mZWF0dXJlLCBnZXRfc3RhdHVzOyBtYXliZSBtb3JlICovCisJd3JpdGVsKCAgIEdfUkVRTU9ERV9TRVRfSU5URiB8IEdfUkVRTU9ERV9HRVRfSU5URgorCQl8IEdfUkVRTU9ERV9TRVRfQ09ORiB8IEdfUkVRTU9ERV9HRVRfQ09ORgorCQl8IEdfUkVRTU9ERV9HRVRfREVTQworCQl8IEdfUkVRTU9ERV9DTEVBUl9GRUFUCisJCSwgJnJlZ3MtPnJlcW1vZGUpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJZGV2LT5lcFtpXS5pcnFzID0gMDsKKworCS8qIGNhbid0IG1vZGlmeSBkZXNjcmlwdG9ycyBhZnRlciB3cml0aW5nIFVzYlJlYWR5ICovCisJZm9yIChpID0gMDsgaSA8IERFU0NfTEVOOyBpKyspCisJCXdyaXRlbCgwLCAmcmVncy0+ZGVzY3JpcHRvcnNbaV0pOworCXdyaXRlbCgwLCAmcmVncy0+VXNiUmVhZHkpOworCisJLyogZXhwZWN0IGVwMCByZXF1ZXN0cyB3aGVuIHRoZSBob3N0IGRyb3BzIHJlc2V0ICovCisJd3JpdGVsKFBXX1JFU0VUQiB8IFBXX1BVTExVUCwgJnJlZ3MtPnBvd2VyX2RldGVjdCk7CisJZGV2LT5pbnRfZW5hYmxlID0gSU5UX0RFVldJREUgfCBJTlRfRVAwOworCXdyaXRlbChkZXYtPmludF9lbmFibGUsICZkZXYtPnJlZ3MtPmludF9lbmFibGUpOworCXJlYWRsKCZyZWdzLT5pbnRfZW5hYmxlKTsKKwlkZXYtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworCWRldi0+ZXAwc3RhdGUgPSBFUDBfSURMRTsKK30KKworc3RhdGljIHZvaWQgdWRjX2VuYWJsZShzdHJ1Y3QgZ29rdV91ZGMgKmRldikKK3sKKwkvKiBzdGFydCBlbnVtZXJhdGlvbiBub3csIG9yIGFmdGVyIHBvd2VyIGRldGVjdCBpcnEgKi8KKwlpZiAocmVhZGwoJmRldi0+cmVncy0+cG93ZXJfZGV0ZWN0KSAmIFBXX0RFVEVDVCkKKwkJZXAwX3N0YXJ0KGRldik7CisJZWxzZSB7CisJCURCRyhkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwkJZGV2LT5pbnRfZW5hYmxlID0gSU5UX1BXUkRFVEVDVDsKKwkJd3JpdGVsKGRldi0+aW50X2VuYWJsZSwgJmRldi0+cmVncy0+aW50X2VuYWJsZSk7CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBrZWVwaW5nIGl0IHNpbXBsZToKKyAqIC0gb25lIGJ1cyBkcml2ZXIsIGluaXR0ZWQgZmlyc3Q7CisgKiAtIG9uZSBmdW5jdGlvbiBkcml2ZXIsIGluaXR0ZWQgc2Vjb25kCisgKi8KKworc3RhdGljIHN0cnVjdCBnb2t1X3VkYwkqdGhlX2NvbnRyb2xsZXI7CisKKy8qIHdoZW4gYSBkcml2ZXIgaXMgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQsIGl0IHdpbGwgcmVjZWl2ZQorICogY29udHJvbCByZXF1ZXN0cyBpbmNsdWRpbmcgc2V0X2NvbmZpZ3VyYXRpb24oKSwgd2hpY2ggZW5hYmxlcworICogbm9uLWNvbnRyb2wgcmVxdWVzdHMuICB0aGVuIHVzYiB0cmFmZmljIGZvbGxvd3MgdW50aWwgYQorICogZGlzY29ubmVjdCBpcyByZXBvcnRlZC4gIHRoZW4gYSBob3N0IG1heSBjb25uZWN0IGFnYWluLCBvcgorICogdGhlIGRyaXZlciBtaWdodCBnZXQgdW5ib3VuZC4KKyAqLworaW50IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCXN0cnVjdCBnb2t1X3VkYwkqZGV2ID0gdGhlX2NvbnRyb2xsZXI7CisJaW50CQkJcmV0dmFsOworCisJaWYgKCFkcml2ZXIKKwkJCXx8IGRyaXZlci0+c3BlZWQgIT0gVVNCX1NQRUVEX0ZVTEwKKwkJCXx8ICFkcml2ZXItPmJpbmQKKwkJCXx8ICFkcml2ZXItPnVuYmluZAorCQkJfHwgIWRyaXZlci0+ZGlzY29ubmVjdAorCQkJfHwgIWRyaXZlci0+c2V0dXApCisJCXJldHVybiAtRUlOVkFMOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoZGV2LT5kcml2ZXIpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBob29rIHVwIHRoZSBkcml2ZXIgKi8KKwlkcml2ZXItPmRyaXZlci5idXMgPSBOVUxMOworCWRldi0+ZHJpdmVyID0gZHJpdmVyOworCWRldi0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAmZHJpdmVyLT5kcml2ZXI7CisJcmV0dmFsID0gZHJpdmVyLT5iaW5kKCZkZXYtPmdhZGdldCk7CisJaWYgKHJldHZhbCkgeworCQlEQkcoZGV2LCAiYmluZCB0byBkcml2ZXIgJXMgLS0+IGVycm9yICVkXG4iLAorCQkJCWRyaXZlci0+ZHJpdmVyLm5hbWUsIHJldHZhbCk7CisJCWRldi0+ZHJpdmVyID0gTlVMTDsKKwkJZGV2LT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJLyogdGhlbiBlbmFibGUgaG9zdCBkZXRlY3Rpb24gYW5kIGVwMDsgYW5kIHdlJ3JlIHJlYWR5CisJICogZm9yIHNldF9jb25maWd1cmF0aW9uIGFzIHdlbGwgYXMgZXZlbnR1YWwgZGlzY29ubmVjdC4KKwkgKi8KKwl1ZGNfZW5hYmxlKGRldik7CisKKwlEQkcoZGV2LCAicmVnaXN0ZXJlZCBnYWRnZXQgZHJpdmVyICclcydcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcik7CisKK3N0YXRpYyB2b2lkCitzdG9wX2FjdGl2aXR5KHN0cnVjdCBnb2t1X3VkYyAqZGV2LCBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwl1bnNpZ25lZAlpOworCisJREJHIChkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJZHJpdmVyID0gTlVMTDsKKworCS8qIGRpc2Nvbm5lY3QgZ2FkZ2V0IGRyaXZlciBhZnRlciBxdWllc2NlaW5nIGh3IGFuZCB0aGUgZHJpdmVyICovCisJdWRjX3Jlc2V0IChkZXYpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCW51a2UoJmRldi0+ZXAgW2ldLCAtRVNIVVRET1dOKTsKKwlpZiAoZHJpdmVyKSB7CisJCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOworCQlkcml2ZXItPmRpc2Nvbm5lY3QoJmRldi0+Z2FkZ2V0KTsKKwkJc3Bpbl9sb2NrKCZkZXYtPmxvY2spOworCX0KKworCWlmIChkZXYtPmRyaXZlcikKKwkJdWRjX2VuYWJsZShkZXYpOworfQorCitpbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlzdHJ1Y3QgZ29rdV91ZGMJKmRldiA9IHRoZV9jb250cm9sbGVyOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFkcml2ZXIgfHwgZHJpdmVyICE9IGRldi0+ZHJpdmVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlkZXYtPmRyaXZlciA9IE5VTEw7CisJc3RvcF9hY3Rpdml0eShkZXYsIGRyaXZlcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlkcml2ZXItPnVuYmluZCgmZGV2LT5nYWRnZXQpOworCisJREJHKGRldiwgInVucmVnaXN0ZXJlZCBkcml2ZXIgJyVzJ1xuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIpOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIGVwMF9zZXR1cChzdHJ1Y3QgZ29rdV91ZGMgKmRldikKK3sKKwlzdHJ1Y3QgZ29rdV91ZGNfcmVncyBfX2lvbWVtCSpyZWdzID0gZGV2LT5yZWdzOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJCWN0cmw7CisJaW50CQkJCXRtcDsKKworCS8qIHJlYWQgU0VUVVAgcGFja2V0IGFuZCBlbnRlciBEQVRBIHN0YWdlICovCisJY3RybC5iUmVxdWVzdFR5cGUgPSByZWFkbCgmcmVncy0+YlJlcXVlc3RUeXBlKTsKKwljdHJsLmJSZXF1ZXN0ID0gcmVhZGwoJnJlZ3MtPmJSZXF1ZXN0KTsKKwljdHJsLndWYWx1ZSAgPSAocmVhZGwoJnJlZ3MtPndWYWx1ZUgpICA8PCA4KSB8IHJlYWRsKCZyZWdzLT53VmFsdWVMKTsKKwljdHJsLndJbmRleCAgPSAocmVhZGwoJnJlZ3MtPndJbmRleEgpICA8PCA4KSB8IHJlYWRsKCZyZWdzLT53SW5kZXhMKTsKKwljdHJsLndMZW5ndGggPSAocmVhZGwoJnJlZ3MtPndMZW5ndGhIKSA8PCA4KSB8IHJlYWRsKCZyZWdzLT53TGVuZ3RoTCk7CisJd3JpdGVsKDAsICZyZWdzLT5TZXR1cFJlY3YpOworCisJbnVrZSgmZGV2LT5lcFswXSwgMCk7CisJZGV2LT5lcFswXS5zdG9wcGVkID0gMDsKKwlpZiAobGlrZWx5KGN0cmwuYlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikpIHsKKwkJZGV2LT5lcFswXS5pc19pbiA9IDE7CisJCWRldi0+ZXAwc3RhdGUgPSBFUDBfSU47CisJCS8qIGRldGVjdCBlYXJseSBzdGF0dXMgc3RhZ2VzICovCisJCXdyaXRlbChJQ09OVFJPTF9TVEFUVVNOQUssICZkZXYtPnJlZ3MtPkludENvbnRyb2wpOworCX0gZWxzZSB7CisJCWRldi0+ZXBbMF0uaXNfaW4gPSAwOworCQlkZXYtPmVwMHN0YXRlID0gRVAwX09VVDsKKworCQkvKiBOT1RFOiAgQ0xFQVJfRkVBVFVSRSBpcyBkb25lIGluIHNvZnR3YXJlIHNvIHRoYXQgd2UgY2FuCisJCSAqIHN5bmNocm9uaXplIHRyYW5zZmVyIHJlc3RhcnRzIGFmdGVyIGJ1bGsgSU4gc3RhbGxzLiAgZGF0YQorCQkgKiB3b24ndCBldmVuIGVudGVyIHRoZSBmaWZvIHVudGlsIHRoZSBoYWx0IGlzIGNsZWFyZWQuCisJCSAqLworCQlzd2l0Y2ggKGN0cmwuYlJlcXVlc3QpIHsKKwkJY2FzZSBVU0JfUkVRX0NMRUFSX0ZFQVRVUkU6CisJCQlzd2l0Y2ggKGN0cmwuYlJlcXVlc3RUeXBlKSB7CisJCQljYXNlIFVTQl9SRUNJUF9FTkRQT0lOVDoKKwkJCQl0bXAgPSBjdHJsLndJbmRleCAmIDB4MGY7CisJCQkJLyogYWN0aXZlIGVuZHBvaW50ICovCisJCQkJaWYgKHRtcCA+IDMgfHwgKCFkZXYtPmVwW3RtcF0uZGVzYyAmJiB0bXAgIT0gMCkpCisJCQkJCWdvdG8gc3RhbGw7CisJCQkJaWYgKGN0cmwud0luZGV4ICYgVVNCX0RJUl9JTikgeworCQkJCQlpZiAoIWRldi0+ZXBbdG1wXS5pc19pbikKKwkJCQkJCWdvdG8gc3RhbGw7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKGRldi0+ZXBbdG1wXS5pc19pbikKKwkJCQkJCWdvdG8gc3RhbGw7CisJCQkJfQorCQkJCWlmIChjdHJsLndWYWx1ZSAhPSBVU0JfRU5EUE9JTlRfSEFMVCkKKwkJCQkJZ290byBzdGFsbDsKKwkJCQlpZiAodG1wKQorCQkJCQlnb2t1X2NsZWFyX2hhbHQoJmRldi0+ZXBbdG1wXSk7CitzdWNjZWVkOgorCQkJCS8qIHN0YXJ0IGVwMG91dCBzdGF0dXMgc3RhZ2UgKi8KKwkJCQl3cml0ZWwofigxPDwwKSwgJnJlZ3MtPkVPUCk7CisJCQkJZGV2LT5lcFswXS5zdG9wcGVkID0gMTsKKwkJCQlkZXYtPmVwMHN0YXRlID0gRVAwX1NUQVRVUzsKKwkJCQlyZXR1cm47CisJCQljYXNlIFVTQl9SRUNJUF9ERVZJQ0U6CisJCQkJLyogZGV2aWNlIHJlbW90ZSB3YWtldXA6IGFsd2F5cyBjbGVhciAqLworCQkJCWlmIChjdHJsLndWYWx1ZSAhPSAxKQorCQkJCQlnb3RvIHN0YWxsOworCQkJCVZEQkcoZGV2LCAiY2xlYXIgZGV2IHJlbW90ZSB3YWtldXBcbiIpOworCQkJCWdvdG8gc3VjY2VlZDsKKwkJCWNhc2UgVVNCX1JFQ0lQX0lOVEVSRkFDRToKKwkJCQlnb3RvIHN0YWxsOworCQkJZGVmYXVsdDoJCS8qIHBhc3MgdG8gZ2FkZ2V0IGRyaXZlciAqLworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworI2lmZGVmIFVTQl9UUkFDRQorCVZEQkcoZGV2LCAiU0VUVVAgJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwlMDR4XG4iLAorCQljdHJsLmJSZXF1ZXN0VHlwZSwgY3RybC5iUmVxdWVzdCwKKwkJY3RybC53VmFsdWUsIGN0cmwud0luZGV4LCBjdHJsLndMZW5ndGgpOworI2VuZGlmCisKKwkvKiBodyB3YW50cyB0byBrbm93IHdoZW4gd2UncmUgY29uZmlndXJlZCAob3Igbm90KSAqLworCWRldi0+cmVxX2NvbmZpZyA9IChjdHJsLmJSZXF1ZXN0ID09IFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04KKwkJCQkmJiBjdHJsLmJSZXF1ZXN0VHlwZSA9PSBVU0JfUkVDSVBfREVWSUNFKTsKKwlpZiAodW5saWtlbHkoZGV2LT5yZXFfY29uZmlnKSkKKwkJZGV2LT5jb25maWd1cmVkID0gKGN0cmwud1ZhbHVlICE9IDApOworCisJLyogZGVsZWdhdGUgZXZlcnl0aGluZyB0byB0aGUgZ2FkZ2V0IGRyaXZlci4KKwkgKiBpdCBtYXkgcmVzcG9uZCBhZnRlciB0aGlzIGlycSBoYW5kbGVyIHJldHVybnMuCisJICovCisJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworCXRtcCA9IGRldi0+ZHJpdmVyLT5zZXR1cCgmZGV2LT5nYWRnZXQsICZjdHJsKTsKKwlzcGluX2xvY2sgKCZkZXYtPmxvY2spOworCWlmICh1bmxpa2VseSh0bXAgPCAwKSkgeworc3RhbGw6CisjaWZkZWYgVVNCX1RSQUNFCisJCVZEQkcoZGV2LCAicmVxICUwMnguJTAyeCBwcm90b2NvbCBTVEFMTDsgZXJyICVkXG4iLAorCQkJCWN0cmwuYlJlcXVlc3RUeXBlLCBjdHJsLmJSZXF1ZXN0LCB0bXApOworI2VuZGlmCisJCWNvbW1hbmQocmVncywgQ09NTUFORF9TVEFMTCwgMCk7CisJCWRldi0+ZXBbMF0uc3RvcHBlZCA9IDE7CisJCWRldi0+ZXAwc3RhdGUgPSBFUDBfU1RBTEw7CisJfQorCisJLyogZXhwZWN0IGF0IGxlYXN0IG9uZSBkYXRhIG9yIHN0YXR1cyBzdGFnZSBpcnEgKi8KK30KKworI2RlZmluZSBBQ0soaXJxYml0KSB7IFwKKwkJc3RhdCAmPSB+aXJxYml0OyBcCisJCXdyaXRlbCh+aXJxYml0LCAmcmVncy0+aW50X3N0YXR1cyk7IFwKKwkJaGFuZGxlZCA9IDE7IFwKKwkJfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZ29rdV9pcnEoaW50IGlycSwgdm9pZCAqX2Rldiwgc3RydWN0IHB0X3JlZ3MgKnIpCit7CisJc3RydWN0IGdva3VfdWRjCQkJKmRldiA9IF9kZXY7CisJc3RydWN0IGdva3VfdWRjX3JlZ3MgX19pb21lbQkqcmVncyA9IGRldi0+cmVnczsKKwlzdHJ1Y3QgZ29rdV9lcAkJCSplcDsKKwl1MzIJCQkJc3RhdCwgaGFuZGxlZCA9IDA7CisJdW5zaWduZWQJCQlpLCByZXNjYW5zID0gNTsKKworCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsKKworcmVzY2FuOgorCXN0YXQgPSByZWFkbCgmcmVncy0+aW50X3N0YXR1cykgJiBkZXYtPmludF9lbmFibGU7CisgICAgICAgIGlmICghc3RhdCkKKwkJZ290byBkb25lOworCWRldi0+aXJxcysrOworCisJLyogZGV2aWNlLXdpZGUgaXJxcyAqLworCWlmICh1bmxpa2VseShzdGF0ICYgSU5UX0RFVldJREUpKSB7CisJCWlmIChzdGF0ICYgSU5UX1NZU0VSUk9SKSB7CisJCQlFUlJPUihkZXYsICJzeXN0ZW0gZXJyb3JcbiIpOworCQkJc3RvcF9hY3Rpdml0eShkZXYsIGRldi0+ZHJpdmVyKTsKKwkJCXN0YXQgPSAwOworCQkJaGFuZGxlZCA9IDE7CisJCQkvLyBGSVhNRSBoYXZlIGEgbmVhdGVyIHdheSB0byBwcmV2ZW50IHJlLWVudW1lcmF0aW9uCisJCQlkZXYtPmRyaXZlciA9IE5VTEw7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJaWYgKHN0YXQgJiBJTlRfUFdSREVURUNUKSB7CisJCQl3cml0ZWwofnN0YXQsICZyZWdzLT5pbnRfc3RhdHVzKTsKKwkJCWlmIChyZWFkbCgmZGV2LT5yZWdzLT5wb3dlcl9kZXRlY3QpICYgUFdfREVURUNUKSB7CisJCQkJVkRCRyhkZXYsICJjb25uZWN0XG4iKTsKKwkJCQllcDBfc3RhcnQoZGV2KTsKKwkJCX0gZWxzZSB7CisJCQkJREJHKGRldiwgImRpc2Nvbm5lY3RcbiIpOworCQkJCWlmIChkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfRlVMTCkKKwkJCQkJc3RvcF9hY3Rpdml0eShkZXYsIGRldi0+ZHJpdmVyKTsKKwkJCQlkZXYtPmVwMHN0YXRlID0gRVAwX0RJU0NPTk5FQ1Q7CisJCQkJZGV2LT5pbnRfZW5hYmxlID0gSU5UX0RFVldJREU7CisJCQkJd3JpdGVsKGRldi0+aW50X2VuYWJsZSwgJmRldi0+cmVncy0+aW50X2VuYWJsZSk7CisJCQl9CisJCQlzdGF0ID0gMDsKKwkJCWhhbmRsZWQgPSAxOworCQkJZ290byBkb25lOworCQl9CisJCWlmIChzdGF0ICYgSU5UX1NVU1BFTkQpIHsKKwkJCUFDSyhJTlRfU1VTUEVORCk7CisJCQlpZiAocmVhZGwoJnJlZ3MtPmVwX3N0YXR1c1swXSkgJiBFUHhTVEFUVVNfU1VTUEVORCkgeworCQkJCXN3aXRjaCAoZGV2LT5lcDBzdGF0ZSkgeworCQkJCWNhc2UgRVAwX0RJU0NPTk5FQ1Q6CisJCQkJY2FzZSBFUDBfU1VTUEVORDoKKwkJCQkJZ290byBwbV9uZXh0OworCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlEQkcoZGV2LCAiVVNCIHN1c3BlbmRcbiIpOworCQkJCWRldi0+ZXAwc3RhdGUgPSBFUDBfU1VTUEVORDsKKwkJCQlpZiAoZGV2LT5nYWRnZXQuc3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04KKwkJCQkJCSYmIGRldi0+ZHJpdmVyCisJCQkJCQkmJiBkZXYtPmRyaXZlci0+c3VzcGVuZCkgeworCQkJCQlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKKwkJCQkJZGV2LT5kcml2ZXItPnN1c3BlbmQoJmRldi0+Z2FkZ2V0KTsKKwkJCQkJc3Bpbl9sb2NrKCZkZXYtPmxvY2spOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKGRldi0+ZXAwc3RhdGUgIT0gRVAwX1NVU1BFTkQpIHsKKwkJCQkJREJHKGRldiwgImJvZ3VzIFVTQiByZXN1bWUgJWRcbiIsCisJCQkJCQlkZXYtPmVwMHN0YXRlKTsKKwkJCQkJZ290byBwbV9uZXh0OworCQkJCX0KKwkJCQlEQkcoZGV2LCAiVVNCIHJlc3VtZVxuIik7CisJCQkJZGV2LT5lcDBzdGF0ZSA9IEVQMF9JRExFOworCQkJCWlmIChkZXYtPmdhZGdldC5zcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTgorCQkJCQkJJiYgZGV2LT5kcml2ZXIKKwkJCQkJCSYmIGRldi0+ZHJpdmVyLT5yZXN1bWUpIHsKKwkJCQkJc3Bpbl91bmxvY2soJmRldi0+bG9jayk7CisJCQkJCWRldi0+ZHJpdmVyLT5yZXN1bWUoJmRldi0+Z2FkZ2V0KTsKKwkJCQkJc3Bpbl9sb2NrKCZkZXYtPmxvY2spOworCQkJCX0KKwkJCX0KKwkJfQorcG1fbmV4dDoKKwkJaWYgKHN0YXQgJiBJTlRfVVNCUkVTRVQpIHsJCS8qIGh1YiByZXNldCBkb25lICovCisJCQlBQ0soSU5UX1VTQlJFU0VUKTsKKwkJCUlORk8oZGV2LCAiVVNCIHJlc2V0IGRvbmUsIGdhZGdldCAlc1xuIiwKKwkJCQlkZXYtPmRyaXZlci0+ZHJpdmVyLm5hbWUpOworCQl9CisJCS8vIGFuZCBJTlRfRVJSIG9uIHNvbWUgZW5kcG9pbnQncyBjcmMvYml0c3R1ZmYvLi4uIHByb2JsZW0KKwl9CisKKwkvKiBwcm9ncmVzcyBlcDAgc2V0dXAsIGRhdGEsIG9yIHN0YXR1cyBzdGFnZXMuCisJICogbm8gdHJhbnNpdGlvbiB7RVAwX1NUQVRVUywgRVAwX1NUQUxMfSAtLT4gRVAwX0lETEU7IHNhdmVzIGlycXMKKwkgKi8KKwlpZiAoc3RhdCAmIElOVF9TRVRVUCkgeworCQlBQ0soSU5UX1NFVFVQKTsKKwkJZGV2LT5lcFswXS5pcnFzKys7CisJCWVwMF9zZXR1cChkZXYpOworCX0KKyAgICAgICAgaWYgKHN0YXQgJiBJTlRfU1RBVFVTTkFLKSB7CisJCUFDSyhJTlRfU1RBVFVTTkFLfElOVF9FTkRQT0lOVDApOworCQlpZiAoZGV2LT5lcDBzdGF0ZSA9PSBFUDBfSU4pIHsKKwkJCWVwID0gJmRldi0+ZXBbMF07CisJCQllcC0+aXJxcysrOworCQkJbnVrZShlcCwgMCk7CisJCQl3cml0ZWwofigxPDwwKSwgJnJlZ3MtPkVPUCk7CisJCQlkZXYtPmVwMHN0YXRlID0gRVAwX1NUQVRVUzsKKwkJfQorCX0KKyAgICAgICAgaWYgKHN0YXQgJiBJTlRfRU5EUE9JTlQwKSB7CisJCUFDSyhJTlRfRU5EUE9JTlQwKTsKKwkJZXAgPSAmZGV2LT5lcFswXTsKKwkJZXAtPmlycXMrKzsKKwkJcGlvX2FkdmFuY2UoZXApOworICAgICAgICB9CisKKwkvKiBkbWEgY29tcGxldGlvbiAqLworICAgICAgICBpZiAoc3RhdCAmIElOVF9NU1RSREVORCkgewkvKiBJTiAqLworCQlBQ0soSU5UX01TVFJERU5EKTsKKwkJZXAgPSAmZGV2LT5lcFtVRENfTVNUUkRfRU5EUE9JTlRdOworCQllcC0+aXJxcysrOworCQlkbWFfYWR2YW5jZShkZXYsIGVwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RhdCAmIElOVF9NU1RXUkVORCkgewkvKiBPVVQgKi8KKwkJQUNLKElOVF9NU1RXUkVORCk7CisJCWVwID0gJmRldi0+ZXBbVURDX01TVFdSX0VORFBPSU5UXTsKKwkJZXAtPmlycXMrKzsKKwkJZG1hX2FkdmFuY2UoZGV2LCBlcCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXQgJiBJTlRfTVNUV1JUTU9VVCkgewkvKiBPVVQgKi8KKwkJQUNLKElOVF9NU1RXUlRNT1VUKTsKKwkJZXAgPSAmZGV2LT5lcFtVRENfTVNUV1JfRU5EUE9JTlRdOworCQllcC0+aXJxcysrOworCQlFUlJPUihkZXYsICIlcyB3cml0ZSB0aW1lb3V0ID9cbiIsIGVwLT5lcC5uYW1lKTsKKwkJLy8gcmVzZXQgZG1hPyB0aGVuIGRtYV9hZHZhbmNlKCkKKyAgICAgICAgfQorCisJLyogcGlvICovCisJZm9yIChpID0gMTsgaSA8IDQ7IGkrKykgeworCQl1MzIJCXRtcCA9IElOVF9FUHhEQVRBU0VUKGkpOworCisJCWlmICghKHN0YXQgJiB0bXApKQorCQkJY29udGludWU7CisJCWVwID0gJmRldi0+ZXBbaV07CisJCXBpb19hZHZhbmNlKGVwKTsKKwkJaWYgKGxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKQorCQkJcGlvX2lycV9kaXNhYmxlKGRldiwgcmVncywgaSk7CisJCXN0YXQgJj0gfnRtcDsKKwkJaGFuZGxlZCA9IDE7CisJCWVwLT5pcnFzKys7CisJfQorCisJaWYgKHJlc2NhbnMtLSkKKwkJZ290byByZXNjYW47CisKK2RvbmU6CisJKHZvaWQpcmVhZGwoJnJlZ3MtPmludF9lbmFibGUpOworCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOworCWlmIChzdGF0KQorCQlEQkcoZGV2LCAidW5oYW5kbGVkIGlycSBzdGF0dXM6ICUwNXggKCUwNXgsICUwNXgpXG4iLCBzdGF0LAorCQkJCXJlYWRsKCZyZWdzLT5pbnRfc3RhdHVzKSwgZGV2LT5pbnRfZW5hYmxlKTsKKwlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKK30KKworI3VuZGVmIEFDSworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBnYWRnZXRfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQoreworCXN0cnVjdCBnb2t1X3VkYwkqZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCisJa2ZyZWUoZGV2KTsKK30KKworLyogdGVhciBkb3duIHRoZSBiaW5kaW5nIGJldHdlZW4gdGhpcyBkcml2ZXIgYW5kIHRoZSBwY2kgZGV2aWNlICovCisKK3N0YXRpYyB2b2lkIGdva3VfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBnb2t1X3VkYwkJKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCURCRyhkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwkvKiBzdGFydCB3aXRoIHRoZSBkcml2ZXIgYWJvdmUgdXMgKi8KKwlpZiAoZGV2LT5kcml2ZXIpIHsKKwkJLyogc2hvdWxkIGhhdmUgYmVlbiBkb25lIGFscmVhZHkgYnkgZHJpdmVyIG1vZGVsIGNvcmUgKi8KKwkJV0FSTihkZXYsICJwY2kgcmVtb3ZlLCBkcml2ZXIgJyVzJyBpcyBzdGlsbCByZWdpc3RlcmVkXG4iLAorCQkJCWRldi0+ZHJpdmVyLT5kcml2ZXIubmFtZSk7CisJCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoZGV2LT5kcml2ZXIpOworCX0KKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTCisJcmVtb3ZlX3Byb2NfZW50cnkocHJvY19ub2RlX25hbWUsIE5VTEwpOworI2VuZGlmCisJaWYgKGRldi0+cmVncykKKwkJdWRjX3Jlc2V0KGRldik7CisJaWYgKGRldi0+Z290X2lycSkKKwkJZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOworCWlmIChkZXYtPnJlZ3MpCisJCWlvdW5tYXAoZGV2LT5yZWdzKTsKKwlpZiAoZGV2LT5nb3RfcmVnaW9uKQorCQlyZWxlYXNlX21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0IChwZGV2LCAwKSwKKwkJCQlwY2lfcmVzb3VyY2VfbGVuIChwZGV2LCAwKSk7CisJaWYgKGRldi0+ZW5hYmxlZCkKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCWRldmljZV91bnJlZ2lzdGVyKCZkZXYtPmdhZGdldC5kZXYpOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWRldi0+cmVncyA9IE5VTEw7CisJdGhlX2NvbnRyb2xsZXIgPSBOVUxMOworCisJSU5GTyhkZXYsICJ1bmJpbmRcbiIpOworfQorCisvKiB3cmFwIHRoaXMgZHJpdmVyIGFyb3VuZCB0aGUgc3BlY2lmaWVkIHBjaSBkZXZpY2UsIGJ1dAorICogZG9uJ3QgcmVzcG9uZCBvdmVyIFVTQiB1bnRpbCBhIGdhZGdldCBkcml2ZXIgYmluZHMgdG8gdXMuCisgKi8KKworc3RhdGljIGludCBnb2t1X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGdva3VfdWRjCQkqZGV2ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nCQlyZXNvdXJjZSwgbGVuOworCXZvaWQgX19pb21lbQkJKmJhc2UgPSBOVUxMOworCWludAkJCXJldHZhbDsKKwljaGFyCQkJYnVmIFs4XSwgKmJ1ZnA7CisKKwkvKiBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgY29udHJvbGxlciBpbiBhIHN5c3RlbSwKKwkgKiB1c2JfZ2FkZ2V0X2RyaXZlcl97cmVnaXN0ZXIsdW5yZWdpc3Rlcn0oKSBtdXN0IGNoYW5nZS4KKwkgKi8KKwlpZiAodGhlX2NvbnRyb2xsZXIpIHsKKwkJV0FSTihkZXYsICJpZ25vcmluZyAlc1xuIiwgcGNpX25hbWUocGRldikpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlpZiAoIXBkZXYtPmlycSkgeworCQlwcmludGsoS0VSTl9FUlIgIkNoZWNrIFBDSSAlcyBJUlEgc2V0dXAhXG4iLCBwY2lfbmFtZShwZGV2KSk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBhbGxvYywgYW5kIHN0YXJ0IGluaXQgKi8KKwlkZXYgPSBrbWFsbG9jIChzaXplb2YgKmRldiwgU0xBQl9LRVJORUwpOworCWlmIChkZXYgPT0gTlVMTCl7CisJCXByX2RlYnVnKCJlbm9tZW0gJXNcbiIsIHBjaV9uYW1lKHBkZXYpKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworCW1lbXNldChkZXYsIDAsIHNpemVvZiAqZGV2KTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5sb2NrKTsKKwlkZXYtPnBkZXYgPSBwZGV2OworCWRldi0+Z2FkZ2V0Lm9wcyA9ICZnb2t1X29wczsKKworCS8qIHRoZSAiZ2FkZ2V0IiBhYnN0cmFjdHMvdmlydHVhbGl6ZXMgdGhlIGNvbnRyb2xsZXIgKi8KKwlzdHJjcHkoZGV2LT5nYWRnZXQuZGV2LmJ1c19pZCwgImdhZGdldCIpOworCWRldi0+Z2FkZ2V0LmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWRldi0+Z2FkZ2V0LmRldi5kbWFfbWFzayA9IHBkZXYtPmRldi5kbWFfbWFzazsKKwlkZXYtPmdhZGdldC5kZXYucmVsZWFzZSA9IGdhZGdldF9yZWxlYXNlOworCWRldi0+Z2FkZ2V0Lm5hbWUgPSBkcml2ZXJfbmFtZTsKKworCS8qIG5vdyBhbGwgdGhlIHBjaSBnb29kaWVzIC4uLiAqLworCXJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCURCRyhkZXYsICJjYW4ndCBlbmFibGUsICVkXG4iLCByZXR2YWwpOworCQlnb3RvIGRvbmU7CisJfQorCWRldi0+ZW5hYmxlZCA9IDE7CisKKwlyZXNvdXJjZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwlsZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlc291cmNlLCBsZW4sIGRyaXZlcl9uYW1lKSkgeworCQlEQkcoZGV2LCAiY29udHJvbGxlciBhbHJlYWR5IGluIHVzZVxuIik7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBkb25lOworCX0KKwlkZXYtPmdvdF9yZWdpb24gPSAxOworCisJYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyZXNvdXJjZSwgbGVuKTsKKwlpZiAoYmFzZSA9PSBOVUxMKSB7CisJCURCRyhkZXYsICJjYW4ndCBtYXAgbWVtb3J5XG4iKTsKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZ290byBkb25lOworCX0KKwlkZXYtPnJlZ3MgPSAoc3RydWN0IGdva3VfdWRjX3JlZ3MgX19pb21lbSAqKSBiYXNlOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CisJSU5GTyhkZXYsICIlc1xuIiwgZHJpdmVyX2Rlc2MpOworCUlORk8oZGV2LCAidmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiICVzXG4iLCBkbWFzdHIoKSk7CisjaWZuZGVmIF9fc3BhcmNfXworCXNjbnByaW50ZihidWYsIHNpemVvZiBidWYsICIlZCIsIHBkZXYtPmlycSk7CisJYnVmcCA9IGJ1ZjsKKyNlbHNlCisJYnVmcCA9IF9faXJxX2l0b2EocGRldi0+aXJxKTsKKyNlbmRpZgorCUlORk8oZGV2LCAiaXJxICVzLCBwY2kgbWVtICVwXG4iLCBidWZwLCBiYXNlKTsKKworCS8qIGluaXQgdG8ga25vd24gc3RhdGUsIHRoZW4gc2V0dXAgaXJxcyAqLworCXVkY19yZXNldChkZXYpOworCXVkY19yZWluaXQgKGRldik7CisJaWYgKHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgZ29rdV9pcnEsIFNBX1NISVJRLyp8U0FfU0FNUExFX1JBTkRPTSovLAorCQkJZHJpdmVyX25hbWUsIGRldikgIT0gMCkgeworCQlEQkcoZGV2LCAicmVxdWVzdCBpbnRlcnJ1cHQgJXMgZmFpbGVkXG4iLCBidWZwKTsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlnb3RvIGRvbmU7CisJfQorCWRldi0+Z290X2lycSA9IDE7CisJaWYgKHVzZV9kbWEpCisJCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUworCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkocHJvY19ub2RlX25hbWUsIDAsIE5VTEwsIHVkY19wcm9jX3JlYWQsIGRldik7CisjZW5kaWYKKworCS8qIGRvbmUgKi8KKwl0aGVfY29udHJvbGxlciA9IGRldjsKKwlkZXZpY2VfcmVnaXN0ZXIoJmRldi0+Z2FkZ2V0LmRldik7CisKKwlyZXR1cm4gMDsKKworZG9uZToKKwlpZiAoZGV2KQorCQlnb2t1X3JlbW92ZSAocGRldik7CisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkcyBbXSA9IHsgeworCS5jbGFzcyA9IAkoKFBDSV9DTEFTU19TRVJJQUxfVVNCIDw8IDgpIHwgMHhmZSksCisJLmNsYXNzX21hc2sgPSAJfjAsCisJLnZlbmRvciA9CTB4MTAyZiwJCS8qIFRvc2hpYmEgKi8KKwkuZGV2aWNlID0JMHgwMTA3LAkJLyogdGhpcyBVREMgKi8KKwkuc3VidmVuZG9yID0JUENJX0FOWV9JRCwKKwkuc3ViZGV2aWNlID0JUENJX0FOWV9JRCwKKworfSwgeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHBjaSwgcGNpX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBnb2t1X3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJKGNoYXIgKikgZHJpdmVyX25hbWUsCisJLmlkX3RhYmxlID0JcGNpX2lkcywKKworCS5wcm9iZSA9CWdva3VfcHJvYmUsCisJLnJlbW92ZSA9CWdva3VfcmVtb3ZlLAorCisJLyogRklYTUUgYWRkIHBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydCAqLworfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdCAodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlciAoJmdva3VfcGNpX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCAoaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwICh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlciAoJmdva3VfcGNpX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCAoY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhOGM4ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuaApAQCAtMCwwICsxLDI5MCBAQAorLyoKKyAqIFRvc2hpYmEgVEM4NkMwMDEgKCJHb2t1LVMiKSBVU0IgRGV2aWNlIENvbnRyb2xsZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgTGluZW8KKyAqICAgICAgYnkgU3R1YXJ0IEx5bm5lLCBUb20gUnVzaHdvcnRoLCBhbmQgQnJ1Y2UgQmFsZGVuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgVG9zaGliYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDAzIE1vbnRhVmlzdGEgU29mdHdhcmUgKHNvdXJjZUBtdmlzdGEuY29tKQorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKy8qCisgKiBQQ0kgQkFSIDAgcG9pbnRzIHRvIHRoZXNlIHJlZ2lzdGVycy4KKyAqLworc3RydWN0IGdva3VfdWRjX3JlZ3MgeworCS8qIGlycSBtYW5hZ2VtZW50ICovCisJdTMyCWludF9zdGF0dXM7CQkvKiAweDAwMCAqLworCXUzMglpbnRfZW5hYmxlOworI2RlZmluZSBJTlRfU1VTUEVORAkJMHgwMDAwMQkJLyogb3IgcmVzdW1lICovCisjZGVmaW5lIElOVF9VU0JSRVNFVAkJMHgwMDAwMgorI2RlZmluZSBJTlRfRU5EUE9JTlQwCQkweDAwMDA0CisjZGVmaW5lIElOVF9TRVRVUAkJMHgwMDAwOAorI2RlZmluZSBJTlRfU1RBVFVTCQkweDAwMDEwCisjZGVmaW5lIElOVF9TVEFUVVNOQUsJCTB4MDAwMjAKKyNkZWZpbmUgSU5UX0VQeERBVEFTRVQobikJKDB4MDAwMjAgPDwgKG4pKQkvKiAwIDwgbiA8IDQgKi8KKyMJZGVmaW5lIElOVF9FUDFEQVRBU0VUCQkweDAwMDQwCisjCWRlZmluZSBJTlRfRVAyREFUQVNFVAkJMHgwMDA4MAorIwlkZWZpbmUgSU5UX0VQM0RBVEFTRVQJCTB4MDAxMDAKKyNkZWZpbmUgSU5UX0VQbk5BSyhuKQkJKDB4MDAxMDAgPCAobikpCQkvKiAwIDwgbiA8IDQgKi8KKyMJZGVmaW5lIElOVF9FUDFOQUsJCTB4MDAyMDAKKyMJZGVmaW5lIElOVF9FUDJOQUsJCTB4MDA0MDAKKyMJZGVmaW5lIElOVF9FUDNOQUsJCTB4MDA4MDAKKyNkZWZpbmUgSU5UX1NPRgkJCTB4MDEwMDAKKyNkZWZpbmUgSU5UX0VSUgkJCTB4MDIwMDAKKyNkZWZpbmUgSU5UX01TVFdSU0VUCQkweDA0MDAwCisjZGVmaW5lIElOVF9NU1RXUkVORAkJMHgwODAwMAorI2RlZmluZSBJTlRfTVNUV1JUTU9VVAkJMHgxMDAwMAorI2RlZmluZSBJTlRfTVNUUkRFTkQJCTB4MjAwMDAKKyNkZWZpbmUgSU5UX1NZU0VSUk9SCQkweDQwMDAwCisjZGVmaW5lIElOVF9QV1JERVRFQ1QJCTB4ODAwMDAKKworI2RlZmluZQlJTlRfREVWV0lERQkJKElOVF9QV1JERVRFQ1R8SU5UX1NZU0VSUk9SLyp8SU5UX0VSUiovfElOVF9VU0JSRVNFVHxJTlRfU1VTUEVORCkKKyNkZWZpbmUJSU5UX0VQMCAJCShJTlRfU0VUVVB8SU5UX0VORFBPSU5UMC8qfElOVF9TVEFUVVMqL3xJTlRfU1RBVFVTTkFLKQorCisJdTMyCWRtYV9tYXN0ZXI7CisjZGVmaW5lIE1TVF9FT1BCX0RJUwkJMHgwODAwCisjZGVmaW5lIE1TVF9FT1BCX0VOQQkJMHgwNDAwCisjZGVmaW5lIE1TVF9USU1FT1VUX0RJUwkJMHgwMjAwCisjZGVmaW5lIE1TVF9USU1FT1VUX0VOQQkJMHgwMTAwCisjZGVmaW5lIE1TVF9SRF9FT1BCCQkweDAwODAJCS8qIHdyaXRlLW9ubHkgKi8KKyNkZWZpbmUgTVNUX1JEX1JFU0VUCQkweDAwNDAKKyNkZWZpbmUgTVNUX1dSX1JFU0VUCQkweDAwMjAKKyNkZWZpbmUgTVNUX1JEX0VOQQkJMHgwMDA0CQkvKiAxOnN0YXJ0LCAwOmlnbm9yZSAqLworI2RlZmluZSBNU1RfV1JfRU5BCQkweDAwMDIJCS8qIDE6c3RhcnQsIDA6aWdub3JlICovCisjZGVmaW5lIE1TVF9DT05ORUNUSU9OCQkweDAwMDEJCS8qIDAgZm9yIGVwMW91dC9lcDJpbiAqLworCisjZGVmaW5lIE1TVF9SX0JJVFMJCShNU1RfRU9QQl9ESVN8TVNUX0VPUEJfRU5BIFwKKwkJCQkJfE1TVF9SRF9FTkF8TVNUX1JEX1JFU0VUKQorI2RlZmluZSBNU1RfV19CSVRTCQkoTVNUX1RJTUVPVVRfRElTfE1TVF9USU1FT1VUX0VOQSBcCisJCQkJCXxNU1RfV1JfRU5BfE1TVF9XUl9SRVNFVCkKKyNkZWZpbmUgTVNUX1JXX0JJVFMJCShNU1RfUl9CSVRTfE1TVF9XX0JJVFMgXAorCQkJCQl8TVNUX0NPTk5FQ1RJT04pCisKKy8qIHRoZXNlIHZhbHVlcyBhc3N1bWUgKGRtYV9tYXN0ZXIgJiBNU1RfQ09OTkVDVElPTikgPT0gMCAqLworI2RlZmluZSBVRENfTVNUV1JfRU5EUE9JTlQgICAgICAgIDEKKyNkZWZpbmUgVURDX01TVFJEX0VORFBPSU5UICAgICAgICAyCisKKwkvKiBkbWEgbWFzdGVyIHdyaXRlICovCisJdTMyCW91dF9kbWFfc3RhcnQ7CisJdTMyCW91dF9kbWFfZW5kOworCXUzMglvdXRfZG1hX2N1cnJlbnQ7CisKKwkvKiBkbWEgbWFzdGVyIHJlYWQgKi8KKwl1MzIJaW5fZG1hX3N0YXJ0OworCXUzMglpbl9kbWFfZW5kOworCXUzMglpbl9kbWFfY3VycmVudDsKKworCXUzMglwb3dlcl9kZXRlY3Q7CisjZGVmaW5lIFBXX0RFVEVDVAkJMHgwNAorI2RlZmluZSBQV19SRVNFVEIJCTB4MDIKKyNkZWZpbmUgUFdfUFVMTFVQCQkweDAxCisKKwl1OAlfcmVzZXJ2ZWQwIFsweDFkOF07CisKKwkvKiBlbmRwb2ludCByZWdpc3RlcnMgKi8KKwl1MzIJZXBfZmlmbyBbNF07CQkvKiAweDIwMCAqLworCXU4CV9yZXNlcnZlZDEgWzB4MTBdOworCXUzMgllcF9tb2RlIFs0XTsJCS8qIG9ubHkgMS0zIHZhbGlkICovCisJdTgJX3Jlc2VydmVkMiBbMHgxMF07CisKKwl1MzIJZXBfc3RhdHVzIFs0XTsKKyNkZWZpbmUgRVB4U1RBVFVTX1RPR0dMRQkweDQwCisjZGVmaW5lIEVQeFNUQVRVU19TVVNQRU5ECTB4MjAKKyNkZWZpbmUgRVB4U1RBVFVTX0VQX01BU0sJKDB4MDc8PDIpCisjCWRlZmluZSBFUHhTVEFUVVNfRVBfUkVBRFkJKDA8PDIpCisjCWRlZmluZSBFUHhTVEFUVVNfRVBfREFUQUlOCSgxPDwyKQorIwlkZWZpbmUgRVB4U1RBVFVTX0VQX0ZVTEwJKDI8PDIpCisjCWRlZmluZSBFUHhTVEFUVVNfRVBfVFhfRVJSCSgzPDwyKQorIwlkZWZpbmUgRVB4U1RBVFVTX0VQX1JYX0VSUgkoNDw8MikKKyMJZGVmaW5lIEVQeFNUQVRVU19FUF9CVVNZCSg1PDwyKQorIwlkZWZpbmUgRVB4U1RBVFVTX0VQX1NUQUxMCSg2PDwyKQorIwlkZWZpbmUgRVB4U1RBVFVTX0VQX0lOVkFMSUQJKDc8PDIpCisjZGVmaW5lIEVQeFNUQVRVU19GSUZPX0RJU0FCTEUJMHgwMgorI2RlZmluZSBFUHhTVEFUVVNfU1RBR0VfRVJST1IJMHgwMQorCisJdTgJX3Jlc2VydmVkMyBbMHgxMF07CisJdTMyCUVQeFNpemVMQVs0XTsKKyNkZWZpbmUgUEFDS0VUX0FDVElWRQkJKDE8PDcpCisjZGVmaW5lIERBVEFTSVpFCQkweDdmCisJdTgJX3Jlc2VydmVkM2EgWzB4MTBdOworCXUzMglFUHhTaXplTEJbNF07CQkvKiBvbmx5IDEsMiB2YWxpZCAqLworCXU4CV9yZXNlcnZlZDNiIFsweDEwXTsKKwl1MzIJRVB4U2l6ZUhBWzRdOwkJLyogb25seSAxLTMgdmFsaWQgKi8KKwl1OAlfcmVzZXJ2ZWQzYyBbMHgxMF07CisJdTMyCUVQeFNpemVIQls0XTsJCS8qIG9ubHkgMSwyIHZhbGlkICovCisJdTgJX3Jlc2VydmVkNFsweDMwXTsKKworCS8qIFNFVFVQIHBhY2tldCBjb250ZW50cyAqLworCXUzMgliUmVxdWVzdFR5cGU7CQkvKiAweDMwMCAqLworCXUzMgliUmVxdWVzdDsKKwl1MzIJd1ZhbHVlTDsKKwl1MzIJd1ZhbHVlSDsKKwl1MzIJd0luZGV4TDsKKwl1MzIJd0luZGV4SDsKKwl1MzIJd0xlbmd0aEw7CisJdTMyCXdMZW5ndGhIOworCisJLyogY29tbWFuZCBpbnRlcmFjdGlvbi9oYW5kc2hha2luZyAqLworCXUzMglTZXR1cFJlY3Y7CQkvKiAweDMyMCAqLworCXUzMglDdXJyQ29uZmlnOworCXUzMglTdGRSZXF1ZXN0OworCXUzMglSZXF1ZXN0OworCXUzMglEYXRhU2V0OworI2RlZmluZSBEQVRBU0VUX0EoZXBudW0pCSgxPDwoMiooZXBudW0pKSkKKyNkZWZpbmUgREFUQVNFVF9CKGVwbnVtKQkoMjw8KDIqKGVwbnVtKSkpCisjZGVmaW5lIERBVEFTRVRfQUIoZXBudW0pCSgzPDwoMiooZXBudW0pKSkKKwl1OAlfcmVzZXJ2ZWQ1WzRdOworCisJdTMyCVVzYlN0YXRlOworI2RlZmluZSBVU0JTVEFURV9DT05GSUdVUkVECTB4MDQKKyNkZWZpbmUgVVNCU1RBVEVfQUREUkVTU0VECTB4MDIKKyNkZWZpbmUgVVNCU1RBVEVfREVGQVVMVAkweDAxCisKKwl1MzIJRU9QOworCisJdTMyCUNvbW1hbmQ7CQkvKiAweDM0MCAqLworI2RlZmluZSBDT01NQU5EX1NFVERBVEEwCTIKKyNkZWZpbmUgQ09NTUFORF9SRVNFVAkJMworI2RlZmluZSBDT01NQU5EX1NUQUxMCQk0CisjZGVmaW5lIENPTU1BTkRfSU5WQUxJRAkJNQorI2RlZmluZSBDT01NQU5EX0ZJRk9fRElTQUJMRQk3CisjZGVmaW5lIENPTU1BTkRfRklGT19FTkFCTEUJOAorI2RlZmluZSBDT01NQU5EX0lOSVRfREVTQ1JJUFRPUgk5CisjZGVmaW5lIENPTU1BTkRfRklGT19DTEVBUgkxMAkvKiBhbHNvIHN0YWxsICovCisjZGVmaW5lIENPTU1BTkRfU1RBTExfQ0xFQVIJMTEKKyNkZWZpbmUgQ09NTUFORF9FUChuKQkJKChuKSA8PCA0KQorCisJdTMyCUVQeFNpbmdsZTsKKwl1OAlfcmVzZXJ2ZWQ2WzRdOworCXUzMglFUHhCQ1M7CisJdTgJX3Jlc2VydmVkN1s4XTsKKwl1MzIJSW50Q29udHJvbDsKKyNkZWZpbmUgSUNPTlRST0xfU1RBVFVTTkFLCTEKKwl1OAlfcmVzZXJ2ZWQ4WzRdOworCisJdTMyCXJlcW1vZGU7CS8vIDB4MzYwIHN0YW5kYXJkIHJlcXVlc3QgbW9kZSwgbG93IDggYml0cworI2RlZmluZSBHX1JFUU1PREVfU0VUX0lOVEYJKDE8PDcpCisjZGVmaW5lIEdfUkVRTU9ERV9HRVRfSU5URgkoMTw8NikKKyNkZWZpbmUgR19SRVFNT0RFX1NFVF9DT05GCSgxPDw1KQorI2RlZmluZSBHX1JFUU1PREVfR0VUX0NPTkYJKDE8PDQpCisjZGVmaW5lIEdfUkVRTU9ERV9HRVRfREVTQwkoMTw8MykKKyNkZWZpbmUgR19SRVFNT0RFX1NFVF9GRUFUCSgxPDwyKQorI2RlZmluZSBHX1JFUU1PREVfQ0xFQVJfRkVBVAkoMTw8MSkKKyNkZWZpbmUgR19SRVFNT0RFX0dFVF9TVEFUVVMJKDE8PDApCisKKwl1MzIJUmVxTW9kZTsKKwl1OAlfcmVzZXJ2ZWQ5WzB4MThdOworCXUzMglQb3J0U3RhdHVzOwkJLyogMHgzODAgKi8KKwl1OAlfcmVzZXJ2ZWQxMFs4XTsKKwl1MzIJYWRkcmVzczsKKwl1MzIJYnVmZl90ZXN0OworCXU4CV9yZXNlcnZlZDExWzRdOworCXUzMglVc2JSZWFkeTsKKwl1OAlfcmVzZXJ2ZWQxMls0XTsKKwl1MzIJU2V0RGVzY1N0YWxsOwkJLyogMHgzYTAgKi8KKwl1OAlfcmVzZXJ2ZWQxM1sweDQ1Y107CisKKwkvKiBoYXJkd2FyZSBjb3VsZCBoYW5kbGUgbGltaXRlZCBHRVRfREVTQ1JJUFRPUiBkdXRpZXMgKi8KKyNkZWZpbmUJREVTQ19MRU4JMHg4MAorCXUzMglkZXNjcmlwdG9yc1tERVNDX0xFTl07CS8qIDB4ODAwICovCisJdTgJX3Jlc2VydmVkMTRbMHg2MDBdOworCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZQlNQVhfRklGT19TSVpFCTY0CisjZGVmaW5lCU1BWF9FUDBfU0laRQk4CQkvKiBlcDAgZmlmbyBpcyBiaWdnZXIsIHRob3VnaCAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIERSSVZFUiBEQVRBIFNUUlVDVFVSRVMgYW5kIFVUSUxJVElFUyAqLworCitzdHJ1Y3QgZ29rdV9lcCB7CisJc3RydWN0IHVzYl9lcAkJCQllcDsKKwlzdHJ1Y3QgZ29rdV91ZGMJCQkJKmRldjsKKwl1bnNpZ25lZCBsb25nCQkJCWlycXM7CisKKwl1bnNpZ25lZAkJCQludW06OCwKKwkJCQkJCWRtYToxLAorCQkJCQkJaXNfaW46MSwKKwkJCQkJCXN0b3BwZWQ6MTsKKworCS8qIGFuYWxvZ291cyB0byBhIGhvc3Qtc2lkZSBxaCAqLworCXN0cnVjdCBsaXN0X2hlYWQJCQlxdWV1ZTsKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmRlc2M7CisKKwl1MzIgX19pb21lbQkJCQkqcmVnX2ZpZm87CisJdTMyIF9faW9tZW0JCQkJKnJlZ19tb2RlOworCXUzMiBfX2lvbWVtCQkJCSpyZWdfc3RhdHVzOworfTsKKworc3RydWN0IGdva3VfcmVxdWVzdCB7CisJc3RydWN0IHVzYl9yZXF1ZXN0CQlyZXE7CisJc3RydWN0IGxpc3RfaGVhZAkJcXVldWU7CisKKwl1bnNpZ25lZAkJCW1hcHBlZDoxOworfTsKKworZW51bSBlcDBzdGF0ZSB7CisJRVAwX0RJU0NPTk5FQ1QsCQkvKiBubyBob3N0ICovCisJRVAwX0lETEUsCQkvKiBiZXR3ZWVuIFNUQVRVUyBhY2sgYW5kIFNFVFVQIHJlcG9ydCAqLworCUVQMF9JTiwgRVAwX09VVCwgCS8qIGRhdGEgc3RhZ2UgKi8KKwlFUDBfU1RBVFVTLAkJLyogc3RhdHVzIHN0YWdlICovCisJRVAwX1NUQUxMLAkJLyogZGF0YSBvciBzdGF0dXMgc3RhZ2VzICovCisJRVAwX1NVU1BFTkQsCQkvKiB1c2Igc3VzcGVuZCAqLworfTsKKworc3RydWN0IGdva3VfdWRjIHsKKwkvKiBlYWNoIHBjaSBkZXZpY2UgcHJvdmlkZXMgb25lIGdhZGdldCwgc2V2ZXJhbCBlbmRwb2ludHMgKi8KKwlzdHJ1Y3QgdXNiX2dhZGdldAkJZ2FkZ2V0OworCXNwaW5sb2NrX3QJCQlsb2NrOworCXN0cnVjdCBnb2t1X2VwCQkJZXBbNF07CisJc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyIAkqZHJpdmVyOworCisJZW51bSBlcDBzdGF0ZQkJCWVwMHN0YXRlOworCXVuc2lnbmVkCQkJZ290X2lycToxLAorCQkJCQlnb3RfcmVnaW9uOjEsCisJCQkJCXJlcV9jb25maWc6MSwKKwkJCQkJY29uZmlndXJlZDoxLAorCQkJCQllbmFibGVkOjE7CisKKwkvKiBwY2kgc3RhdGUgdXNlZCB0byBhY2Nlc3MgdGhvc2UgZW5kcG9pbnRzICovCisJc3RydWN0IHBjaV9kZXYJCQkqcGRldjsKKwlzdHJ1Y3QgZ29rdV91ZGNfcmVncyBfX2lvbWVtCSpyZWdzOworCXUzMgkJCQlpbnRfZW5hYmxlOworCisJLyogc3RhdGlzdGljcy4uLiAqLworCXVuc2lnbmVkIGxvbmcJCQlpcnFzOworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSB4cHJpbnRrKGRldixsZXZlbCxmbXQsYXJncy4uLikgXAorCXByaW50ayhsZXZlbCAiJXMgJXM6ICIgZm10ICwgZHJpdmVyX25hbWUgLCBcCisJCQlwY2lfbmFtZShkZXYtPnBkZXYpICwgIyMgYXJncykKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERCRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fREVCVUcgLCBmbXQgLCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREJHKGRldixmbXQsYXJncy4uLikgXAorCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgVkVSQk9TRQorI2RlZmluZSBWREJHIERCRworI2Vsc2UKKyNkZWZpbmUgVkRCRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYJLyogVkVSQk9TRSAqLworCisjZGVmaW5lIEVSUk9SKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9FUlIgLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBXQVJOKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9XQVJOSU5HICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgSU5GTyhkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fSU5GTyAsIGZtdCAsICMjIGFyZ3MpCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNmZjY3YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCkBAIC0wLDAgKzEsMjExMCBAQAorLyoKKyAqIGlub2RlLmMgLS0gdXNlciBtb2RlIGZpbGVzeXN0ZW0gYXBpIGZvciB1c2IgZ2FkZ2V0IGNvbnRyb2xsZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgRGF2aWQgQnJvd25lbGwKKyAqIENvcHlyaWdodCAoQykgMjAwMyBBZ2lsZW50IFRlY2hub2xvZ2llcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisKKy8vICNkZWZpbmUJREVCVUcgCQkJLyogZGF0YSB0byBoZWxwIGZhdWx0IGRpYWdub3NpcyAqLworLy8gI2RlZmluZQlWRVJCT1NFCQkvKiBleHRyYSBkZWJ1ZyBtZXNzYWdlcyAoc3VjY2VzcyB0b28pICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvdXRzLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorCisjaW5jbHVkZSA8bGludXgvdXNiX2dhZGdldGZzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiX2dhZGdldC5oPgorCisKKy8qCisgKiBUaGUgZ2FkZ2V0ZnMgQVBJIG1hcHMgZWFjaCBlbmRwb2ludCB0byBhIGZpbGUgZGVzY3JpcHRvciBzbyB0aGF0IHlvdQorICogY2FuIHVzZSBzdGFuZGFyZCBzeW5jaHJvbm91cyByZWFkL3dyaXRlIGNhbGxzIGZvciBJL08uICBUaGVyZSdzIHNvbWUKKyAqIE9fTk9OQkxPQ0sgYW5kIE9fQVNZTkMvRkFTWU5DIHN0eWxlIGkvbyBzdXBwb3J0LiAgRXhhbXBsZSB1c2VybW9kZQorICogZHJpdmVycyBzaG93IGhvdyB0aGlzIHdvcmtzIGluIHByYWN0aWNlLiAgWW91IGNhbiBhbHNvIHVzZSBBSU8gdG8KKyAqIGVsaW1pbmF0ZSBJL08gZ2FwcyBiZXR3ZWVuIHJlcXVlc3RzLCB0byBoZWxwIHdoZW4gc3RyZWFtaW5nIGRhdGEuCisgKgorICogS2V5IHBhcnRzIHRoYXQgbXVzdCBiZSBVU0Itc3BlY2lmaWMgYXJlIHByb3RvY29scyBkZWZpbmluZyBob3cgdGhlCisgKiByZWFkL3dyaXRlIG9wZXJhdGlvbnMgcmVsYXRlIHRvIHRoZSBoYXJkd2FyZSBzdGF0ZSBtYWNoaW5lcy4gIFRoZXJlCisgKiBhcmUgdHdvIHR5cGVzIG9mIGZpbGVzLiAgT25lIHR5cGUgaXMgZm9yIHRoZSBkZXZpY2UsIGltcGxlbWVudGluZyBlcDAuCisgKiBUaGUgb3RoZXIgdHlwZSBpcyBmb3IgZWFjaCBJTiBvciBPVVQgZW5kcG9pbnQuICBJbiBib3RoIGNhc2VzLCB0aGUKKyAqIHVzZXIgbW9kZSBkcml2ZXIgbXVzdCBjb25maWd1cmUgdGhlIGhhcmR3YXJlIGJlZm9yZSB1c2luZyBpdC4KKyAqCisgKiAtIEZpcnN0LCBkZXZfY29uZmlnKCkgaXMgY2FsbGVkIHdoZW4gL2Rldi9nYWRnZXQvJENISVAgaXMgY29uZmlndXJlZAorICogICAoYnkgd3JpdGluZyBjb25maWd1cmF0aW9uIGFuZCBkZXZpY2UgZGVzY3JpcHRvcnMpLiAgQWZ0ZXJ3YXJkcyBpdAorICogICBtYXkgc2VydmUgYXMgYSBzb3VyY2Ugb2YgZGV2aWNlIGV2ZW50cywgdXNlZCB0byBoYW5kbGUgYWxsIGNvbnRyb2wKKyAqICAgcmVxdWVzdHMgb3RoZXIgdGhhbiBiYXNpYyBlbnVtZXJhdGlvbi4KKyAqCisgKiAtIFRoZW4gZWl0aGVyIGltbWVkaWF0ZWx5LCBvciBhZnRlciBhIFNFVF9DT05GSUdVUkFUSU9OIGNvbnRyb2wgcmVxdWVzdCwKKyAqICAgZXBfY29uZmlnKCkgaXMgY2FsbGVkIHdoZW4gZWFjaCAvZGV2L2dhZGdldC9lcCogZmlsZSBpcyBjb25maWd1cmVkCisgKiAgIChieSB3cml0aW5nIGVuZHBvaW50IGRlc2NyaXB0b3JzKS4gIEFmdGVyd2FyZHMgdGhlc2UgZmlsZXMgYXJlIHVzZWQKKyAqICAgdG8gd3JpdGUoKSBJTiBkYXRhIG9yIHRvIHJlYWQoKSBPVVQgZGF0YS4gIFRvIGhhbHQgdGhlIGVuZHBvaW50LCBhCisgKiAgICJ3cm9uZyBkaXJlY3Rpb24iIHJlcXVlc3QgaXMgaXNzdWVkIChsaWtlIHJlYWRpbmcgYW4gSU4gZW5kcG9pbnQpLgorICoKKyAqIFVubGlrZSAidXNiZnMiIHRoZSBvbmx5IGlvY3RsKClzIGFyZSBmb3IgdGhpbmdzIHRoYXQgYXJlIHJhcmUsIGFuZCBtYXliZQorICogbm90IHBvc3NpYmxlIG9uIGFsbCBoYXJkd2FyZS4gIEZvciBleGFtcGxlLCBwcmVjaXNlIGZhdWx0IGhhbmRsaW5nIHdpdGgKKyAqIHJlc3BlY3QgdG8gZGF0YSBsZWZ0IGluIGVuZHBvaW50IGZpZm9zIGFmdGVyIGFib3J0ZWQgb3BlcmF0aW9uczsgb3IKKyAqIHNlbGVjdGl2ZSBjbGVhcmluZyBvZiBlbmRwb2ludCBoYWx0cywgdG8gaW1wbGVtZW50IFNFVF9JTlRFUkZBQ0UuCisgKi8KKworI2RlZmluZQlEUklWRVJfREVTQwkiVVNCIEdhZGdldCBmaWxlc3lzdGVtIgorI2RlZmluZQlEUklWRVJfVkVSU0lPTgkiMjQgQXVnIDIwMDQiCisKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9kZXNjIFtdID0gRFJJVkVSX0RFU0M7CitzdGF0aWMgY29uc3QgY2hhciBzaG9ydG5hbWUgW10gPSAiZ2FkZ2V0ZnMiOworCitNT0RVTEVfREVTQ1JJUFRJT04gKERSSVZFUl9ERVNDKTsKK01PRFVMRV9BVVRIT1IgKCJEYXZpZCBCcm93bmVsbCIpOworTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIEdBREdFVEZTX01BR0lDCQkweGFlZTcxZWU3CisjZGVmaW5lIERNQV9BRERSX0lOVkFMSUQJKH4oZG1hX2FkZHJfdCkwKQorCisvKiAvZGV2L2dhZGdldC8kQ0hJUCByZXByZXNlbnRzIGVwMCBhbmQgdGhlIHdob2xlIGRldmljZSAqLworZW51bSBlcDBfc3RhdGUgeworCS8qIERJU0JMRUQgaXMgdGhlIGluaXRpYWwgc3RhdGUuCisJICovCisJU1RBVEVfREVWX0RJU0FCTEVEID0gMCwKKworCS8qIE9ubHkgb25lIG9wZW4oKSBvZiAvZGV2L2dhZGdldC8kQ0hJUDsgb25seSBvbmUgZmlsZSB0cmFja3MKKwkgKiBlcDAvZGV2aWNlIGkvbyBtb2RlcyBhbmQgYmluZGluZyB0byB0aGUgY29udHJvbGxlci4gIERyaXZlcgorCSAqIG11c3QgYWx3YXlzIHdyaXRlIGRlc2NyaXB0b3JzIHRvIGluaXRpYWxpemUgdGhlIGRldmljZSwgdGhlbgorCSAqIHRoZSBkZXZpY2UgYmVjb21lcyBVTkNPTk5FQ1RFRCB1bnRpbCBlbnVtZXJhdGlvbi4KKwkgKi8KKwlTVEFURV9PUEVORUQsCisKKwkvKiBGcm9tIHRoZW4gb24sIGVwMCBmZCBpcyBpbiBlaXRoZXIgb2YgdHdvIGJhc2ljIG1vZGVzOgorCSAqIC0gKFVOKUNPTk5FQ1RFRDogcmVhZCB1c2JfZ2FkZ2V0ZnNfZXZlbnQocykgZnJvbSBpdAorCSAqIC0gU0VUVVA6IHJlYWQvd3JpdGUgd2lsbCB0cmFuc2ZlciBjb250cm9sIGRhdGEgYW5kIHN1Y2NlZWQ7CisJICogICBvciBpZiAid3JvbmcgZGlyZWN0aW9uIiwgcGVyZm9ybXMgcHJvdG9jb2wgc3RhbGwKKwkgKi8KKwlTVEFURV9VTkNPTk5FQ1RFRCwKKwlTVEFURV9DT05ORUNURUQsCisJU1RBVEVfU0VUVVAsCisKKwkvKiBVTkJPVU5EIG1lYW5zIHRoZSBkcml2ZXIgY2xvc2VkIGVwMCwgc28gdGhlIGRldmljZSB3b24ndCBiZQorCSAqIGFjY2Vzc2libGUgYWdhaW4gKERFVl9ESVNBQkxFRCkgdW50aWwgYWxsIGZkcyBhcmUgY2xvc2VkLgorCSAqLworCVNUQVRFX0RFVl9VTkJPVU5ELAorfTsKKworLyogZW5vdWdoIGZvciB0aGUgd2hvbGUgcXVldWU6IG1vc3QgZXZlbnRzIGludmFsaWRhdGUgb3RoZXJzICovCisjZGVmaW5lCU5fRVZFTlQJCQk1CisKK3N0cnVjdCBkZXZfZGF0YSB7CisJc3BpbmxvY2tfdAkJCWxvY2s7CisJYXRvbWljX3QJCQljb3VudDsKKwllbnVtIGVwMF9zdGF0ZQkJCXN0YXRlOworCXN0cnVjdCB1c2JfZ2FkZ2V0ZnNfZXZlbnQJZXZlbnQgW05fRVZFTlRdOworCXVuc2lnbmVkCQkJZXZfbmV4dDsKKwlzdHJ1Y3QgZmFzeW5jX3N0cnVjdAkJKmZhc3luYzsKKwl1OAkJCQljdXJyZW50X2NvbmZpZzsKKworCS8qIGRyaXZlcnMgcmVhZGluZyBlcDAgTVVTVCBoYW5kbGUgY29udHJvbCByZXF1ZXN0cyAoU0VUVVApCisJICogcmVwb3J0ZWQgdGhhdCB3YXk7IGVsc2UgdGhlIGhvc3Qgd2lsbCB0aW1lIG91dC4KKwkgKi8KKwl1bnNpZ25lZAkJCXVzZXJtb2RlX3NldHVwIDogMSwKKwkJCQkJc2V0dXBfaW4gOiAxLAorCQkJCQlzZXR1cF9jYW5fc3RhbGwgOiAxLAorCQkJCQlzZXR1cF9vdXRfcmVhZHkgOiAxLAorCQkJCQlzZXR1cF9vdXRfZXJyb3IgOiAxLAorCQkJCQlzZXR1cF9hYm9ydCA6IDE7CisKKwkvKiB0aGUgcmVzdCBpcyBiYXNpY2FsbHkgd3JpdGUtb25jZSAqLworCXN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IJKmNvbmZpZywgKmhzX2NvbmZpZzsKKwlzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yCSpkZXY7CisJc3RydWN0IHVzYl9yZXF1ZXN0CQkqcmVxOworCXN0cnVjdCB1c2JfZ2FkZ2V0CQkqZ2FkZ2V0OworCXN0cnVjdCBsaXN0X2hlYWQJCWVwZmlsZXM7CisJdm9pZAkJCQkqYnVmOworCXdhaXRfcXVldWVfaGVhZF90CQl3YWl0OworCXN0cnVjdCBzdXBlcl9ibG9jawkJKnNiOworCXN0cnVjdCBkZW50cnkJCQkqZGVudHJ5OworCisJLyogZXhjZXB0IHRoaXMgc2NyYXRjaCBpL28gYnVmZmVyIGZvciBlcDAgKi8KKwl1OAkJCQlyYnVmIFsyNTZdOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGdldF9kZXYgKHN0cnVjdCBkZXZfZGF0YSAqZGF0YSkKK3sKKwlhdG9taWNfaW5jICgmZGF0YS0+Y291bnQpOworfQorCitzdGF0aWMgdm9pZCBwdXRfZGV2IChzdHJ1Y3QgZGV2X2RhdGEgKmRhdGEpCit7CisJaWYgKGxpa2VseSAoIWF0b21pY19kZWNfYW5kX3Rlc3QgKCZkYXRhLT5jb3VudCkpKQorCQlyZXR1cm47CisJLyogbmVlZHMgbm8gbW9yZSBjbGVhbnVwICovCisJQlVHX09OICh3YWl0cXVldWVfYWN0aXZlICgmZGF0YS0+d2FpdCkpOworCWtmcmVlIChkYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZfZGF0YSAqZGV2X25ldyAodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2X2RhdGEJCSpkZXY7CisKKwlkZXYgPSBrbWFsbG9jIChzaXplb2YgKmRldiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYpCisJCXJldHVybiBOVUxMOworCW1lbXNldCAoZGV2LCAwLCBzaXplb2YgKmRldik7CisJZGV2LT5zdGF0ZSA9IFNUQVRFX0RFVl9ESVNBQkxFRDsKKwlhdG9taWNfc2V0ICgmZGV2LT5jb3VudCwgMSk7CisJc3Bpbl9sb2NrX2luaXQgKCZkZXYtPmxvY2spOworCUlOSVRfTElTVF9IRUFEICgmZGV2LT5lcGZpbGVzKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkICgmZGV2LT53YWl0KTsKKwlyZXR1cm4gZGV2OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBvdGhlciAvZGV2L2dhZGdldC8kRU5EUE9JTlQgZmlsZXMgcmVwcmVzZW50IGVuZHBvaW50cyAqLworZW51bSBlcF9zdGF0ZSB7CisJU1RBVEVfRVBfRElTQUJMRUQgPSAwLAorCVNUQVRFX0VQX1JFQURZLAorCVNUQVRFX0VQX0RFRkVSX0VOQUJMRSwKKwlTVEFURV9FUF9FTkFCTEVELAorCVNUQVRFX0VQX1VOQk9VTkQsCit9OworCitzdHJ1Y3QgZXBfZGF0YSB7CisJc3RydWN0IHNlbWFwaG9yZQkJbG9jazsKKwllbnVtIGVwX3N0YXRlCQkJc3RhdGU7CisJYXRvbWljX3QJCQljb3VudDsKKwlzdHJ1Y3QgZGV2X2RhdGEJCQkqZGV2OworCS8qIG11c3QgaG9sZCBkZXYtPmxvY2sgYmVmb3JlIGFjY2Vzc2luZyBlcCBvciByZXEgKi8KKwlzdHJ1Y3QgdXNiX2VwCQkJKmVwOworCXN0cnVjdCB1c2JfcmVxdWVzdAkJKnJlcTsKKwlzc2l6ZV90CQkJCXN0YXR1czsKKwljaGFyCQkJCW5hbWUgWzE2XTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJZGVzYywgaHNfZGVzYzsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQllcGZpbGVzOworCXdhaXRfcXVldWVfaGVhZF90CQl3YWl0OworCXN0cnVjdCBkZW50cnkJCQkqZGVudHJ5OworCXN0cnVjdCBpbm9kZQkJCSppbm9kZTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfZXAgKHN0cnVjdCBlcF9kYXRhICpkYXRhKQoreworCWF0b21pY19pbmMgKCZkYXRhLT5jb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHB1dF9lcCAoc3RydWN0IGVwX2RhdGEgKmRhdGEpCit7CisJaWYgKGxpa2VseSAoIWF0b21pY19kZWNfYW5kX3Rlc3QgKCZkYXRhLT5jb3VudCkpKQorCQlyZXR1cm47CisJcHV0X2RldiAoZGF0YS0+ZGV2KTsKKwkvKiBuZWVkcyBubyBtb3JlIGNsZWFudXAgKi8KKwlCVUdfT04gKCFsaXN0X2VtcHR5ICgmZGF0YS0+ZXBmaWxlcykpOworCUJVR19PTiAod2FpdHF1ZXVlX2FjdGl2ZSAoJmRhdGEtPndhaXQpKTsKKwlCVUdfT04gKGRvd25fdHJ5bG9jayAoJmRhdGEtPmxvY2spICE9IDApOworCWtmcmVlIChkYXRhKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogbW9zdCAiaG93IHRvIHVzZSB0aGUgaGFyZHdhcmUiIHBvbGljeSBjaG9pY2VzIGFyZSBpbiB1c2Vyc3BhY2U6CisgKiBtYXBwaW5nIGVuZHBvaW50IHJvbGVzICh3aGljaCB0aGUgZHJpdmVyIG5lZWRzKSB0byB0aGUgY2FwYWJpbGl0aWVzCisgKiB3aGljaCB0aGUgdXNiIGNvbnRyb2xsZXIgaGFzLiAgbW9zdCBvZiB0aG9zZSBjYXBhYmlsaXRpZXMgYXJlIGV4cG9zZWQKKyAqIGltcGxpY2l0bHksIHN0YXJ0aW5nIHdpdGggdGhlIGRyaXZlciBuYW1lIGFuZCB0aGVuIGVuZHBvaW50IG5hbWVzLgorICovCisKK3N0YXRpYyBjb25zdCBjaGFyICpDSElQOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBOT1RFOiAgZG9uJ3QgdXNlIGRldl9wcmludGsgY2FsbHMgYmVmb3JlIGJpbmRpbmcgdG8gdGhlIGdhZGdldAorICogYXQgdGhlIGVuZCBvZiBlcDAgY29uZmlndXJhdGlvbiwgb3IgYWZ0ZXIgdW5iaW5kLgorICovCisKKy8qIHRvbyB3b3JkeTogZGV2X3ByaW50ayhsZXZlbCAsICYoZCktPmdhZGdldC0+ZGV2ICwgZm10ICwgIyMgYXJncykgKi8KKyNkZWZpbmUgeHByaW50ayhkLGxldmVsLGZtdCxhcmdzLi4uKSBcCisJcHJpbnRrKGxldmVsICIlczogIiBmbXQgLCBzaG9ydG5hbWUgLCAjIyBhcmdzKQorCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREJHKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9ERUJVRyAsIGZtdCAsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEQkcoZGV2LGZtdCxhcmdzLi4uKSBcCisJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRlZiBWRVJCT1NFCisjZGVmaW5lIFZERUJVRwlEQkcKKyNlbHNlCisjZGVmaW5lIFZERUJVRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogREVCVUcgKi8KKworI2RlZmluZSBFUlJPUihkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fRVJSICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgV0FSTihkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fV0FSTklORyAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIElORk8oZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX0lORk8gLCBmbXQgLCAjIyBhcmdzKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFNZTkNIUk9OT1VTIEVORFBPSU5UIE9QRVJBVElPTlMgKGJ1bGsvaW50ci9pc28pCisgKgorICogQWZ0ZXIgb3BlbmluZywgY29uZmlndXJlIG5vbi1jb250cm9sIGVuZHBvaW50cy4gIFRoZW4gdXNlIG5vcm1hbAorICogc3RyZWFtIHJlYWQoKSBhbmQgd3JpdGUoKSByZXF1ZXN0czsgYW5kIG1heWJlIGlvY3RsKCkgdG8gZ2V0IG1vcmUKKyAqIHByZWNpc2UgRklGTyBzdGF0dXMgd2hlbiByZWNvdmVyaW5nIGZyb20gY2FuY2VsYXRpb24uCisgKi8KKworc3RhdGljIHZvaWQgZXBpb19jb21wbGV0ZSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBlcF9kYXRhCSplcGRhdGEgPSBlcC0+ZHJpdmVyX2RhdGE7CisKKwlpZiAoIXJlcS0+Y29udGV4dCkKKwkJcmV0dXJuOworCWlmIChyZXEtPnN0YXR1cykKKwkJZXBkYXRhLT5zdGF0dXMgPSByZXEtPnN0YXR1czsKKwllbHNlCisJCWVwZGF0YS0+c3RhdHVzID0gcmVxLT5hY3R1YWw7CisJY29tcGxldGUgKChzdHJ1Y3QgY29tcGxldGlvbiAqKXJlcS0+Y29udGV4dCk7Cit9CisKKy8qIHRhc2tsb2NrIGVuZHBvaW50LCByZXR1cm5pbmcgd2hlbiBpdCdzIGNvbm5lY3RlZC4KKyAqIHN0aWxsIG5lZWQgZGV2LT5sb2NrIHRvIHVzZSBlcGRhdGEtPmVwLgorICovCitzdGF0aWMgaW50CitnZXRfcmVhZHlfZXAgKHVuc2lnbmVkIGZfZmxhZ3MsIHN0cnVjdCBlcF9kYXRhICplcGRhdGEpCit7CisJaW50CXZhbDsKKworCWlmIChmX2ZsYWdzICYgT19OT05CTE9DSykgeworCQlpZiAoZG93bl90cnlsb2NrICgmZXBkYXRhLT5sb2NrKSAhPSAwKQorCQkJZ290byBub25ibG9jazsKKwkJaWYgKGVwZGF0YS0+c3RhdGUgIT0gU1RBVEVfRVBfRU5BQkxFRCkgeworCQkJdXAgKCZlcGRhdGEtPmxvY2spOworbm9uYmxvY2s6CisJCQl2YWwgPSAtRUFHQUlOOworCQl9IGVsc2UKKwkJCXZhbCA9IDA7CisJCXJldHVybiB2YWw7CisJfQorCisJaWYgKCh2YWwgPSBkb3duX2ludGVycnVwdGlibGUgKCZlcGRhdGEtPmxvY2spKSA8IDApCisJCXJldHVybiB2YWw7CituZXdzdGF0ZToKKwlzd2l0Y2ggKGVwZGF0YS0+c3RhdGUpIHsKKwljYXNlIFNUQVRFX0VQX0VOQUJMRUQ6CisJCWJyZWFrOworCWNhc2UgU1RBVEVfRVBfREVGRVJfRU5BQkxFOgorCQlEQkcgKGVwZGF0YS0+ZGV2LCAiJXMgd2FpdCBmb3IgaG9zdFxuIiwgZXBkYXRhLT5uYW1lKTsKKwkJaWYgKCh2YWwgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUgKGVwZGF0YS0+d2FpdCwgCisJCQkJZXBkYXRhLT5zdGF0ZSAhPSBTVEFURV9FUF9ERUZFUl9FTkFCTEUKKwkJCQl8fCBlcGRhdGEtPmRldi0+c3RhdGUgPT0gU1RBVEVfREVWX1VOQk9VTkQKKwkJCQkpKSA8IDApCisJCQlnb3RvIGZhaWw7CisJCWdvdG8gbmV3c3RhdGU7CisJLy8gY2FzZSBTVEFURV9FUF9ESVNBQkxFRDoJCS8qICJjYW4ndCBoYXBwZW4iICovCisJLy8gY2FzZSBTVEFURV9FUF9SRUFEWToJCQkvKiAiY2FuJ3QgaGFwcGVuIiAqLworCWRlZmF1bHQ6CQkJCS8qIGVycm9yISAqLworCQlwcl9kZWJ1ZyAoIiVzOiBlcCAlcCBub3QgYXZhaWxhYmxlLCBzdGF0ZSAlZFxuIiwKKwkJCQlzaG9ydG5hbWUsIGVwZGF0YSwgZXBkYXRhLT5zdGF0ZSk7CisJCS8vIEZBTExUSFJPVUdICisJY2FzZSBTVEFURV9FUF9VTkJPVU5EOgkJCS8qIGNsZWFuIGRpc2Nvbm5lY3QgKi8KKwkJdmFsID0gLUVOT0RFVjsKK2ZhaWw6CisJCXVwICgmZXBkYXRhLT5sb2NrKTsKKwl9CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHNzaXplX3QKK2VwX2lvIChzdHJ1Y3QgZXBfZGF0YSAqZXBkYXRhLCB2b2lkICpidWYsIHVuc2lnbmVkIGxlbikKK3sKKwlERUNMQVJFX0NPTVBMRVRJT04gKGRvbmUpOworCWludCB2YWx1ZTsKKworCXNwaW5fbG9ja19pcnEgKCZlcGRhdGEtPmRldi0+bG9jayk7CisJaWYgKGxpa2VseSAoZXBkYXRhLT5lcCAhPSBOVUxMKSkgeworCQlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IGVwZGF0YS0+cmVxOworCisJCXJlcS0+Y29udGV4dCA9ICZkb25lOworCQlyZXEtPmNvbXBsZXRlID0gZXBpb19jb21wbGV0ZTsKKwkJcmVxLT5idWYgPSBidWY7CisJCXJlcS0+bGVuZ3RoID0gbGVuOworCQl2YWx1ZSA9IHVzYl9lcF9xdWV1ZSAoZXBkYXRhLT5lcCwgcmVxLCBHRlBfQVRPTUlDKTsKKwl9IGVsc2UKKwkJdmFsdWUgPSAtRU5PREVWOworCXNwaW5fdW5sb2NrX2lycSAoJmVwZGF0YS0+ZGV2LT5sb2NrKTsKKworCWlmIChsaWtlbHkgKHZhbHVlID09IDApKSB7CisJCXZhbHVlID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlIChkb25lLndhaXQsIGRvbmUuZG9uZSk7CisJCWlmICh2YWx1ZSAhPSAwKSB7CisJCQlzcGluX2xvY2tfaXJxICgmZXBkYXRhLT5kZXYtPmxvY2spOworCQkJaWYgKGxpa2VseSAoZXBkYXRhLT5lcCAhPSBOVUxMKSkgeworCQkJCURCRyAoZXBkYXRhLT5kZXYsICIlcyBpL28gaW50ZXJydXB0ZWRcbiIsCisJCQkJCQllcGRhdGEtPm5hbWUpOworCQkJCXVzYl9lcF9kZXF1ZXVlIChlcGRhdGEtPmVwLCBlcGRhdGEtPnJlcSk7CisJCQkJc3Bpbl91bmxvY2tfaXJxICgmZXBkYXRhLT5kZXYtPmxvY2spOworCisJCQkJd2FpdF9ldmVudCAoZG9uZS53YWl0LCBkb25lLmRvbmUpOworCQkJCWlmIChlcGRhdGEtPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCkKKwkJCQkJZXBkYXRhLT5zdGF0dXMgPSAtRUlOVFI7CisJCQl9IGVsc2UgeworCQkJCXNwaW5fdW5sb2NrX2lycSAoJmVwZGF0YS0+ZGV2LT5sb2NrKTsKKworCQkJCURCRyAoZXBkYXRhLT5kZXYsICJlbmRwb2ludCBnb25lXG4iKTsKKwkJCQllcGRhdGEtPnN0YXR1cyA9IC1FTk9ERVY7CisJCQl9CisJCX0KKwkJcmV0dXJuIGVwZGF0YS0+c3RhdHVzOworCX0KKwlyZXR1cm4gdmFsdWU7Cit9CisKKworLyogaGFuZGxlIGEgc3luY2hyb25vdXMgT1VUIGJ1bGsvaW50ci9pc28gdHJhbnNmZXIgKi8KK3N0YXRpYyBzc2l6ZV90CitlcF9yZWFkIChzdHJ1Y3QgZmlsZSAqZmQsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcHRyKQoreworCXN0cnVjdCBlcF9kYXRhCQkqZGF0YSA9IGZkLT5wcml2YXRlX2RhdGE7CisJdm9pZAkJCSprYnVmOworCXNzaXplX3QJCQl2YWx1ZTsKKworCWlmICgodmFsdWUgPSBnZXRfcmVhZHlfZXAgKGZkLT5mX2ZsYWdzLCBkYXRhKSkgPCAwKQorCQlyZXR1cm4gdmFsdWU7CisKKwkvKiBoYWx0IGFueSBlbmRwb2ludCBieSBkb2luZyBhICJ3cm9uZyBkaXJlY3Rpb24iIGkvbyBjYWxsICovCisJaWYgKGRhdGEtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pIHsKKwkJaWYgKChkYXRhLT5kZXNjLmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQorCQkJCT09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJREJHIChkYXRhLT5kZXYsICIlcyBoYWx0XG4iLCBkYXRhLT5uYW1lKTsKKwkJc3Bpbl9sb2NrX2lycSAoJmRhdGEtPmRldi0+bG9jayk7CisJCWlmIChsaWtlbHkgKGRhdGEtPmVwICE9IE5VTEwpKQorCQkJdXNiX2VwX3NldF9oYWx0IChkYXRhLT5lcCk7CisJCXNwaW5fdW5sb2NrX2lycSAoJmRhdGEtPmRldi0+bG9jayk7CisJCXVwICgmZGF0YS0+bG9jayk7CisJCXJldHVybiAtRUJBRE1TRzsKKwl9CisKKwkvKiBGSVhNRSByZWFkYWhlYWQgZm9yIE9fTk9OQkxPQ0sgYW5kIHBvbGwoKTsgY2FyZWZ1bCB3aXRoIFpMUHMgKi8KKworCXZhbHVlID0gLUVOT01FTTsKKwlrYnVmID0ga21hbGxvYyAobGVuLCBTTEFCX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5ICgha2J1ZikpCisJCWdvdG8gZnJlZTE7CisKKwl2YWx1ZSA9IGVwX2lvIChkYXRhLCBrYnVmLCBsZW4pOworCVZERUJVRyAoZGF0YS0+ZGV2LCAiJXMgcmVhZCAlZCBPVVQsIHN0YXR1cyAlZFxuIiwKKwkJZGF0YS0+bmFtZSwgbGVuLCB2YWx1ZSk7CisJaWYgKHZhbHVlID49IDAgJiYgY29weV90b191c2VyIChidWYsIGtidWYsIHZhbHVlKSkKKwkJdmFsdWUgPSAtRUZBVUxUOworCitmcmVlMToKKwl1cCAoJmRhdGEtPmxvY2spOworCWtmcmVlIChrYnVmKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8qIGhhbmRsZSBhIHN5bmNocm9ub3VzIElOIGJ1bGsvaW50ci9pc28gdHJhbnNmZXIgKi8KK3N0YXRpYyBzc2l6ZV90CitlcF93cml0ZSAoc3RydWN0IGZpbGUgKmZkLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnB0cikKK3sKKwlzdHJ1Y3QgZXBfZGF0YQkJKmRhdGEgPSBmZC0+cHJpdmF0ZV9kYXRhOworCXZvaWQJCQkqa2J1ZjsKKwlzc2l6ZV90CQkJdmFsdWU7CisKKwlpZiAoKHZhbHVlID0gZ2V0X3JlYWR5X2VwIChmZC0+Zl9mbGFncywgZGF0YSkpIDwgMCkKKwkJcmV0dXJuIHZhbHVlOworCisJLyogaGFsdCBhbnkgZW5kcG9pbnQgYnkgZG9pbmcgYSAid3JvbmcgZGlyZWN0aW9uIiBpL28gY2FsbCAqLworCWlmICghKGRhdGEtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pKSB7CisJCWlmICgoZGF0YS0+ZGVzYy5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKKwkJCQk9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCURCRyAoZGF0YS0+ZGV2LCAiJXMgaGFsdFxuIiwgZGF0YS0+bmFtZSk7CisJCXNwaW5fbG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOworCQlpZiAobGlrZWx5IChkYXRhLT5lcCAhPSBOVUxMKSkKKwkJCXVzYl9lcF9zZXRfaGFsdCAoZGF0YS0+ZXApOworCQlzcGluX3VubG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOworCQl1cCAoJmRhdGEtPmxvY2spOworCQlyZXR1cm4gLUVCQURNU0c7CisJfQorCisJLyogRklYTUUgd3JpdGViZWhpbmQgZm9yIE9fTk9OQkxPQ0sgYW5kIHBvbGwoKSwgcWxlbiA9IDEgKi8KKworCXZhbHVlID0gLUVOT01FTTsKKwlrYnVmID0ga21hbGxvYyAobGVuLCBTTEFCX0tFUk5FTCk7CisJaWYgKCFrYnVmKQorCQlnb3RvIGZyZWUxOworCWlmIChjb3B5X2Zyb21fdXNlciAoa2J1ZiwgYnVmLCBsZW4pKSB7CisJCXZhbHVlID0gLUVGQVVMVDsKKwkJZ290byBmcmVlMTsKKwl9CisKKwl2YWx1ZSA9IGVwX2lvIChkYXRhLCBrYnVmLCBsZW4pOworCVZERUJVRyAoZGF0YS0+ZGV2LCAiJXMgd3JpdGUgJWQgSU4sIHN0YXR1cyAlZFxuIiwKKwkJZGF0YS0+bmFtZSwgbGVuLCB2YWx1ZSk7CitmcmVlMToKKwl1cCAoJmRhdGEtPmxvY2spOworCWtmcmVlIChrYnVmKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBpbnQKK2VwX3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZCkKK3sKKwlzdHJ1Y3QgZXBfZGF0YQkJKmRhdGEgPSBmZC0+cHJpdmF0ZV9kYXRhOworCisJLyogY2xlYW4gdXAgaWYgdGhpcyBjYW4gYmUgcmVvcGVuZWQgKi8KKwlpZiAoZGF0YS0+c3RhdGUgIT0gU1RBVEVfRVBfVU5CT1VORCkgeworCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0VQX0RJU0FCTEVEOworCQlkYXRhLT5kZXNjLmJEZXNjcmlwdG9yVHlwZSA9IDA7CisJCWRhdGEtPmhzX2Rlc2MuYkRlc2NyaXB0b3JUeXBlID0gMDsKKwl9CisJcHV0X2VwIChkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlcF9pb2N0bCAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkLAorCQl1bnNpZ25lZCBjb2RlLCB1bnNpZ25lZCBsb25nIHZhbHVlKQoreworCXN0cnVjdCBlcF9kYXRhCQkqZGF0YSA9IGZkLT5wcml2YXRlX2RhdGE7CisJaW50CQkJc3RhdHVzOworCisJaWYgKChzdGF0dXMgPSBnZXRfcmVhZHlfZXAgKGZkLT5mX2ZsYWdzLCBkYXRhKSkgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJc3Bpbl9sb2NrX2lycSAoJmRhdGEtPmRldi0+bG9jayk7CisJaWYgKGxpa2VseSAoZGF0YS0+ZXAgIT0gTlVMTCkpIHsKKwkJc3dpdGNoIChjb2RlKSB7CisJCWNhc2UgR0FER0VURlNfRklGT19TVEFUVVM6CisJCQlzdGF0dXMgPSB1c2JfZXBfZmlmb19zdGF0dXMgKGRhdGEtPmVwKTsKKwkJCWJyZWFrOworCQljYXNlIEdBREdFVEZTX0ZJRk9fRkxVU0g6CisJCQl1c2JfZXBfZmlmb19mbHVzaCAoZGF0YS0+ZXApOworCQkJYnJlYWs7CisJCWNhc2UgR0FER0VURlNfQ0xFQVJfSEFMVDoKKwkJCXN0YXR1cyA9IHVzYl9lcF9jbGVhcl9oYWx0IChkYXRhLT5lcCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXN0YXR1cyA9IC1FTk9UVFk7CisJCX0KKwl9IGVsc2UKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwlzcGluX3VubG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOworCXVwICgmZGF0YS0+bG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogQVNZTkNIUk9OT1VTIEVORFBPSU5UIEkvTyBPUEVSQVRJT05TIChidWxrL2ludHIvaXNvKSAqLworCitzdHJ1Y3Qga2lvY2JfcHJpdiB7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CisJc3RydWN0IGVwX2RhdGEJCSplcGRhdGE7CisJdm9pZAkJCSpidWY7CisJY2hhciBfX3VzZXIJCSp1YnVmOworCXVuc2lnbmVkCQlhY3R1YWw7Cit9OworCitzdGF0aWMgaW50IGVwX2Fpb19jYW5jZWwoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW9fZXZlbnQgKmUpCit7CisJc3RydWN0IGtpb2NiX3ByaXYJKnByaXYgPSBpb2NiLT5wcml2YXRlOworCXN0cnVjdCBlcF9kYXRhCQkqZXBkYXRhOworCWludAkJCXZhbHVlOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwllcGRhdGEgPSBwcml2LT5lcGRhdGE7CisJLy8gc3Bpbl9sb2NrKCZlcGRhdGEtPmRldi0+bG9jayk7CisJa2lvY2JTZXRDYW5jZWxsZWQoaW9jYik7CisJaWYgKGxpa2VseShlcGRhdGEgJiYgZXBkYXRhLT5lcCAmJiBwcml2LT5yZXEpKQorCQl2YWx1ZSA9IHVzYl9lcF9kZXF1ZXVlIChlcGRhdGEtPmVwLCBwcml2LT5yZXEpOworCWVsc2UKKwkJdmFsdWUgPSAtRUlOVkFMOworCS8vIHNwaW5fdW5sb2NrKCZlcGRhdGEtPmRldi0+bG9jayk7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJYWlvX3B1dF9yZXEoaW9jYik7CisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgc3NpemVfdCBlcF9haW9fcmVhZF9yZXRyeShzdHJ1Y3Qga2lvY2IgKmlvY2IpCit7CisJc3RydWN0IGtpb2NiX3ByaXYJKnByaXYgPSBpb2NiLT5wcml2YXRlOworCXNzaXplX3QJCQlzdGF0dXMgPSBwcml2LT5hY3R1YWw7CisKKwkvKiB3ZSAicmV0cnkiIHRvIGdldCB0aGUgcmlnaHQgbW0gY29udGV4dCBmb3IgdGhpczogKi8KKwlzdGF0dXMgPSBjb3B5X3RvX3VzZXIocHJpdi0+dWJ1ZiwgcHJpdi0+YnVmLCBwcml2LT5hY3R1YWwpOworCWlmICh1bmxpa2VseSgwICE9IHN0YXR1cykpCisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJZWxzZQorCQlzdGF0dXMgPSBwcml2LT5hY3R1YWw7CisJa2ZyZWUocHJpdi0+YnVmKTsKKwlrZnJlZShwcml2KTsKKwlhaW9fcHV0X3JlcShpb2NiKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBlcF9haW9fY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBraW9jYgkJKmlvY2IgPSByZXEtPmNvbnRleHQ7CisJc3RydWN0IGtpb2NiX3ByaXYJKnByaXYgPSBpb2NiLT5wcml2YXRlOworCXN0cnVjdCBlcF9kYXRhCQkqZXBkYXRhID0gcHJpdi0+ZXBkYXRhOworCisJLyogbG9jayBhZ2FpbnN0IGRpc2Nvbm5lY3QgKGFuZCBpZGVhbGx5LCBjYW5jZWwpICovCisJc3Bpbl9sb2NrKCZlcGRhdGEtPmRldi0+bG9jayk7CisJcHJpdi0+cmVxID0gTlVMTDsKKwlwcml2LT5lcGRhdGEgPSBOVUxMOworCWlmIChOVUxMID09IGlvY2ItPmtpX3JldHJ5CisJCQl8fCB1bmxpa2VseSgwID09IHJlcS0+YWN0dWFsKQorCQkJfHwgdW5saWtlbHkoa2lvY2JJc0NhbmNlbGxlZChpb2NiKSkpIHsKKwkJa2ZyZWUocmVxLT5idWYpOworCQlrZnJlZShwcml2KTsKKwkJaW9jYi0+cHJpdmF0ZSA9IE5VTEw7CisJCS8qIGFpb19jb21wbGV0ZSgpIHJlcG9ydHMgYnl0ZXMtdHJhbnNmZXJyZWQgX2FuZF8gZmF1bHRzICovCisJCWlmICh1bmxpa2VseShraW9jYklzQ2FuY2VsbGVkKGlvY2IpKSkKKwkJCWFpb19wdXRfcmVxKGlvY2IpOworCQllbHNlCisJCQlhaW9fY29tcGxldGUoaW9jYiwKKwkJCQlyZXEtPmFjdHVhbCA/IHJlcS0+YWN0dWFsIDogcmVxLT5zdGF0dXMsCisJCQkJcmVxLT5zdGF0dXMpOworCX0gZWxzZSB7CisJCS8qIHJldHJ5KCkgd29uJ3QgcmVwb3J0IGJvdGg7IHNvIHdlIGhpZGUgc29tZSBmYXVsdHMgKi8KKwkJaWYgKHVubGlrZWx5KDAgIT0gcmVxLT5zdGF0dXMpKQorCQkJREJHKGVwZGF0YS0+ZGV2LCAiJXMgZmF1bHQgJWQgbGVuICVkXG4iLAorCQkJCWVwLT5uYW1lLCByZXEtPnN0YXR1cywgcmVxLT5hY3R1YWwpOworCisJCXByaXYtPmJ1ZiA9IHJlcS0+YnVmOworCQlwcml2LT5hY3R1YWwgPSByZXEtPmFjdHVhbDsKKwkJa2lja19pb2NiKGlvY2IpOworCX0KKwlzcGluX3VubG9jaygmZXBkYXRhLT5kZXYtPmxvY2spOworCisJdXNiX2VwX2ZyZWVfcmVxdWVzdChlcCwgcmVxKTsKKwlwdXRfZXAoZXBkYXRhKTsKK30KKworc3RhdGljIHNzaXplX3QKK2VwX2Fpb19yd3RhaWwoCisJc3RydWN0IGtpb2NiCSppb2NiLAorCWNoYXIJCSpidWYsCisJc2l6ZV90CQlsZW4sCisJc3RydWN0IGVwX2RhdGEJKmVwZGF0YSwKKwljaGFyIF9fdXNlcgkqdWJ1ZgorKQoreworCXN0cnVjdCBraW9jYl9wcml2CSpwcml2ID0gKHZvaWQgKikgJmlvY2ItPnByaXZhdGU7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CisJc3NpemVfdAkJCXZhbHVlOworCisJcHJpdiA9IGttYWxsb2Moc2l6ZW9mICpwcml2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpIHsKKwkJdmFsdWUgPSAtRU5PTUVNOworZmFpbDoKKwkJa2ZyZWUoYnVmKTsKKwkJcmV0dXJuIHZhbHVlOworCX0KKwlpb2NiLT5wcml2YXRlID0gcHJpdjsKKwlwcml2LT51YnVmID0gdWJ1ZjsKKworCXZhbHVlID0gZ2V0X3JlYWR5X2VwKGlvY2ItPmtpX2ZpbHAtPmZfZmxhZ3MsIGVwZGF0YSk7CisJaWYgKHVubGlrZWx5KHZhbHVlIDwgMCkpIHsKKwkJa2ZyZWUocHJpdik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpb2NiLT5raV9jYW5jZWwgPSBlcF9haW9fY2FuY2VsOworCWdldF9lcChlcGRhdGEpOworCXByaXYtPmVwZGF0YSA9IGVwZGF0YTsKKwlwcml2LT5hY3R1YWwgPSAwOworCisJLyogZWFjaCBraW9jYiBpcyBjb3VwbGVkIHRvIG9uZSB1c2JfcmVxdWVzdCwgYnV0IHdlIGNhbid0CisJICogYWxsb2NhdGUgb3Igc3VibWl0IHRob3NlIGlmIHRoZSBob3N0IGRpc2Nvbm5lY3RlZC4KKwkgKi8KKwlzcGluX2xvY2tfaXJxKCZlcGRhdGEtPmRldi0+bG9jayk7CisJaWYgKGxpa2VseShlcGRhdGEtPmVwKSkgeworCQlyZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdChlcGRhdGEtPmVwLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGxpa2VseShyZXEpKSB7CisJCQlwcml2LT5yZXEgPSByZXE7CisJCQlyZXEtPmJ1ZiA9IGJ1ZjsKKwkJCXJlcS0+bGVuZ3RoID0gbGVuOworCQkJcmVxLT5jb21wbGV0ZSA9IGVwX2Fpb19jb21wbGV0ZTsKKwkJCXJlcS0+Y29udGV4dCA9IGlvY2I7CisJCQl2YWx1ZSA9IHVzYl9lcF9xdWV1ZShlcGRhdGEtPmVwLCByZXEsIEdGUF9BVE9NSUMpOworCQkJaWYgKHVubGlrZWx5KDAgIT0gdmFsdWUpKQorCQkJCXVzYl9lcF9mcmVlX3JlcXVlc3QoZXBkYXRhLT5lcCwgcmVxKTsKKwkJfSBlbHNlCisJCQl2YWx1ZSA9IC1FQUdBSU47CisJfSBlbHNlCisJCXZhbHVlID0gLUVOT0RFVjsKKwlzcGluX3VubG9ja19pcnEoJmVwZGF0YS0+ZGV2LT5sb2NrKTsKKworCXVwKCZlcGRhdGEtPmxvY2spOworCisJaWYgKHVubGlrZWx5KHZhbHVlKSkgeworCQlrZnJlZShwcml2KTsKKwkJcHV0X2VwKGVwZGF0YSk7CisJfSBlbHNlCisJCXZhbHVlID0gLUVJT0NCUVVFVUVEOworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHNzaXplX3QKK2VwX2Fpb19yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBsZW4sIGxvZmZfdCBvKQoreworCXN0cnVjdCBlcF9kYXRhCQkqZXBkYXRhID0gaW9jYi0+a2lfZmlscC0+cHJpdmF0ZV9kYXRhOworCWNoYXIJCQkqYnVmOworCisJaWYgKHVubGlrZWx5KGVwZGF0YS0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikpCisJCXJldHVybiAtRUlOVkFMOworCWJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIWJ1ZikpCisJCXJldHVybiAtRU5PTUVNOworCWlvY2ItPmtpX3JldHJ5ID0gZXBfYWlvX3JlYWRfcmV0cnk7CisJcmV0dXJuIGVwX2Fpb19yd3RhaWwoaW9jYiwgYnVmLCBsZW4sIGVwZGF0YSwgdWJ1Zik7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitlcF9haW9fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90IG8pCit7CisJc3RydWN0IGVwX2RhdGEJCSplcGRhdGEgPSBpb2NiLT5raV9maWxwLT5wcml2YXRlX2RhdGE7CisJY2hhcgkJCSpidWY7CisKKwlpZiAodW5saWtlbHkoIShlcGRhdGEtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghYnVmKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKHVubGlrZWx5KGNvcHlfZnJvbV91c2VyKGJ1ZiwgdWJ1ZiwgbGVuKSAhPSAwKSkgeworCQlrZnJlZShidWYpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJcmV0dXJuIGVwX2Fpb19yd3RhaWwoaW9jYiwgYnVmLCBsZW4sIGVwZGF0YSwgTlVMTCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHVzZWQgYWZ0ZXIgZW5kcG9pbnQgY29uZmlndXJhdGlvbiAqLworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXBfaW9fb3BlcmF0aW9ucyA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubGxzZWVrID0Jbm9fbGxzZWVrLAorCisJLnJlYWQgPQkJZXBfcmVhZCwKKwkud3JpdGUgPQllcF93cml0ZSwKKwkuaW9jdGwgPQllcF9pb2N0bCwKKwkucmVsZWFzZSA9CWVwX3JlbGVhc2UsCisKKwkuYWlvX3JlYWQgPQllcF9haW9fcmVhZCwKKwkuYWlvX3dyaXRlID0JZXBfYWlvX3dyaXRlLAorfTsKKworLyogRU5EUE9JTlQgSU5JVElBTElaQVRJT04KKyAqCisgKiAgICAgZmQgPSBvcGVuICgiL2Rldi9nYWRnZXQvJEVORFBPSU5UIiwgT19SRFdSKQorICogICAgIHN0YXR1cyA9IHdyaXRlIChmZCwgZGVzY3JpcHRvcnMsIHNpemVvZiBkZXNjcmlwdG9ycykKKyAqCisgKiBUaGF0IHdyaXRlIGVzdGFibGlzaGVzIHRoZSBlbmRwb2ludCBjb25maWd1cmF0aW9uLCBjb25maWd1cmluZworICogdGhlIGNvbnRyb2xsZXIgdG8gcHJvY2VzcyBidWxrLCBpbnRlcnJ1cHQsIG9yIGlzb2Nocm9ub3VzIHRyYW5zZmVycworICogYXQgdGhlIHJpZ2h0IG1heHBhY2tldCBzaXplLCBhbmQgc28gb24uCisgKgorICogVGhlIGRlc2NyaXB0b3JzIGFyZSBtZXNzYWdlIHR5cGUgMSwgaWRlbnRpZmllZCBieSBhIGhvc3Qgb3JkZXIgdTMyCisgKiBhdCB0aGUgYmVnaW5uaW5nIG9mIHdoYXQncyB3cml0dGVuLiAgRGVzY3JpcHRvciBvcmRlciBpczogZnVsbC9sb3cKKyAqIHNwZWVkIGRlc2NyaXB0b3IsIHRoZW4gb3B0aW9uYWwgaGlnaCBzcGVlZCBkZXNjcmlwdG9yLgorICovCitzdGF0aWMgc3NpemVfdAorZXBfY29uZmlnIChzdHJ1Y3QgZmlsZSAqZmQsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcHRyKQoreworCXN0cnVjdCBlcF9kYXRhCQkqZGF0YSA9IGZkLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9lcAkJKmVwOworCXUzMgkJCXRhZzsKKwlpbnQJCQl2YWx1ZTsKKworCWlmICgodmFsdWUgPSBkb3duX2ludGVycnVwdGlibGUgKCZkYXRhLT5sb2NrKSkgPCAwKQorCQlyZXR1cm4gdmFsdWU7CisKKwlpZiAoZGF0YS0+c3RhdGUgIT0gU1RBVEVfRVBfUkVBRFkpIHsKKwkJdmFsdWUgPSAtRUwySExUOworCQlnb3RvIGZhaWw7CisJfQorCisJdmFsdWUgPSBsZW47CisJaWYgKGxlbiA8IFVTQl9EVF9FTkRQT0lOVF9TSVpFICsgNCkKKwkJZ290byBmYWlsMDsKKworCS8qIHdlIG1pZ2h0IG5lZWQgdG8gY2hhbmdlIG1lc3NhZ2UgZm9ybWF0IHNvbWVkYXkgKi8KKwlpZiAoY29weV9mcm9tX3VzZXIgKCZ0YWcsIGJ1ZiwgNCkpIHsKKwkJZ290byBmYWlsMTsKKwl9CisJaWYgKHRhZyAhPSAxKSB7CisJCURCRyhkYXRhLT5kZXYsICJjb25maWcgJXMsIGJhZCB0YWcgJWRcbiIsIGRhdGEtPm5hbWUsIHRhZyk7CisJCWdvdG8gZmFpbDA7CisJfQorCWJ1ZiArPSA0OworCWxlbiAtPSA0OworCisJLyogTk9URTogIGF1ZGlvIGVuZHBvaW50IGV4dGVuc2lvbnMgbm90IGFjY2VwdGVkIGhlcmU7CisJICoganVzdCBkb24ndCBpbmNsdWRlIHRoZSBleHRyYSBieXRlcy4KKwkgKi8KKworCS8qIGZ1bGwvbG93IHNwZWVkIGRlc2NyaXB0b3IsIHRoZW4gaGlnaCBzcGVlZCAqLworCWlmIChjb3B5X2Zyb21fdXNlciAoJmRhdGEtPmRlc2MsIGJ1ZiwgVVNCX0RUX0VORFBPSU5UX1NJWkUpKSB7CisJCWdvdG8gZmFpbDE7CisJfQorCWlmIChkYXRhLT5kZXNjLmJMZW5ndGggIT0gVVNCX0RUX0VORFBPSU5UX1NJWkUKKwkJCXx8IGRhdGEtPmRlc2MuYkRlc2NyaXB0b3JUeXBlICE9IFVTQl9EVF9FTkRQT0lOVCkKKwkJZ290byBmYWlsMDsKKwlpZiAobGVuICE9IFVTQl9EVF9FTkRQT0lOVF9TSVpFKSB7CisJCWlmIChsZW4gIT0gMiAqIFVTQl9EVF9FTkRQT0lOVF9TSVpFKQorCQkJZ290byBmYWlsMDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyICgmZGF0YS0+aHNfZGVzYywgYnVmICsgVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJCQkJCVVTQl9EVF9FTkRQT0lOVF9TSVpFKSkgeworCQkJZ290byBmYWlsMTsKKwkJfQorCQlpZiAoZGF0YS0+aHNfZGVzYy5iTGVuZ3RoICE9IFVTQl9EVF9FTkRQT0lOVF9TSVpFCisJCQkJfHwgZGF0YS0+aHNfZGVzYy5iRGVzY3JpcHRvclR5cGUKKwkJCQkJIT0gVVNCX0RUX0VORFBPSU5UKSB7CisJCQlEQkcoZGF0YS0+ZGV2LCAiY29uZmlnICVzLCBiYWQgaHMgbGVuZ3RoIG9yIHR5cGVcbiIsCisJCQkJCWRhdGEtPm5hbWUpOworCQkJZ290byBmYWlsMDsKKwkJfQorCX0KKwl2YWx1ZSA9IGxlbjsKKworCXNwaW5fbG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOworCWlmIChkYXRhLT5kZXYtPnN0YXRlID09IFNUQVRFX0RFVl9VTkJPVU5EKSB7CisJCXZhbHVlID0gLUVOT0VOVDsKKwkJZ290byBnb25lOworCX0gZWxzZSBpZiAoKGVwID0gZGF0YS0+ZXApID09IE5VTEwpIHsKKwkJdmFsdWUgPSAtRU5PREVWOworCQlnb3RvIGdvbmU7CisJfQorCXN3aXRjaCAoZGF0YS0+ZGV2LT5nYWRnZXQtPnNwZWVkKSB7CisJY2FzZSBVU0JfU1BFRURfTE9XOgorCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCXZhbHVlID0gdXNiX2VwX2VuYWJsZSAoZXAsICZkYXRhLT5kZXNjKTsKKwkJaWYgKHZhbHVlID09IDApCisJCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0VQX0VOQUJMRUQ7CisJCWJyZWFrOworI2lmZGVmCUhJR0hTUEVFRAorCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCS8qIGZhaWxzIGlmIGNhbGxlciBkaWRuJ3QgcHJvdmlkZSB0aGF0IGRlc2NyaXB0b3IuLi4gKi8KKwkJdmFsdWUgPSB1c2JfZXBfZW5hYmxlIChlcCwgJmRhdGEtPmhzX2Rlc2MpOworCQlpZiAodmFsdWUgPT0gMCkKKwkJCWRhdGEtPnN0YXRlID0gU1RBVEVfRVBfRU5BQkxFRDsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlEQkcgKGRhdGEtPmRldiwgInVuY29ubmVjdGVkLCAlcyBpbml0IGRlZmVycmVkXG4iLAorCQkJCWRhdGEtPm5hbWUpOworCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0VQX0RFRkVSX0VOQUJMRTsKKwl9CisJaWYgKHZhbHVlID09IDApCisJCWZkLT5mX29wID0gJmVwX2lvX29wZXJhdGlvbnM7Citnb25lOgorCXNwaW5fdW5sb2NrX2lycSAoJmRhdGEtPmRldi0+bG9jayk7CisJaWYgKHZhbHVlIDwgMCkgeworZmFpbDoKKwkJZGF0YS0+ZGVzYy5iRGVzY3JpcHRvclR5cGUgPSAwOworCQlkYXRhLT5oc19kZXNjLmJEZXNjcmlwdG9yVHlwZSA9IDA7CisJfQorCXVwICgmZGF0YS0+bG9jayk7CisJcmV0dXJuIHZhbHVlOworZmFpbDA6CisJdmFsdWUgPSAtRUlOVkFMOworCWdvdG8gZmFpbDsKK2ZhaWwxOgorCXZhbHVlID0gLUVGQVVMVDsKKwlnb3RvIGZhaWw7Cit9CisKK3N0YXRpYyBpbnQKK2VwX29wZW4gKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZCkKK3sKKwlzdHJ1Y3QgZXBfZGF0YQkJKmRhdGEgPSBpbm9kZS0+dS5nZW5lcmljX2lwOworCWludAkJCXZhbHVlID0gLUVCVVNZOworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSAoJmRhdGEtPmxvY2spICE9IDApCisJCXJldHVybiAtRUlOVFI7CisJc3Bpbl9sb2NrX2lycSAoJmRhdGEtPmRldi0+bG9jayk7CisJaWYgKGRhdGEtPmRldi0+c3RhdGUgPT0gU1RBVEVfREVWX1VOQk9VTkQpCisJCXZhbHVlID0gLUVOT0VOVDsKKwllbHNlIGlmIChkYXRhLT5zdGF0ZSA9PSBTVEFURV9FUF9ESVNBQkxFRCkgeworCQl2YWx1ZSA9IDA7CisJCWRhdGEtPnN0YXRlID0gU1RBVEVfRVBfUkVBRFk7CisJCWdldF9lcCAoZGF0YSk7CisJCWZkLT5wcml2YXRlX2RhdGEgPSBkYXRhOworCQlWREVCVUcgKGRhdGEtPmRldiwgIiVzIHJlYWR5XG4iLCBkYXRhLT5uYW1lKTsKKwl9IGVsc2UKKwkJREJHIChkYXRhLT5kZXYsICIlcyBzdGF0ZSAlZFxuIiwKKwkJCWRhdGEtPm5hbWUsIGRhdGEtPnN0YXRlKTsKKwlzcGluX3VubG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOworCXVwICgmZGF0YS0+bG9jayk7CisJcmV0dXJuIHZhbHVlOworfQorCisvKiB1c2VkIGJlZm9yZSBlbmRwb2ludCBjb25maWd1cmF0aW9uICovCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcF9jb25maWdfb3BlcmF0aW9ucyA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubGxzZWVrID0Jbm9fbGxzZWVrLAorCisJLm9wZW4gPQkJZXBfb3BlbiwKKwkud3JpdGUgPQllcF9jb25maWcsCisJLnJlbGVhc2UgPQllcF9yZWxlYXNlLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRVAwIElNUExFTUVOVEFUSU9OIGNhbiBiZSBwYXJ0bHkgaW4gdXNlcnNwYWNlLgorICoKKyAqIERyaXZlcnMgdGhhdCB1c2UgdGhpcyBmYWNpbGl0eSByZWNlaXZlIHZhcmlvdXMgZXZlbnRzLCBpbmNsdWRpbmcKKyAqIGNvbnRyb2wgcmVxdWVzdHMgdGhlIGtlcm5lbCBkb2Vzbid0IGhhbmRsZS4gIERyaXZlcnMgdGhhdCBkb24ndAorICogdXNlIHRoaXMgZmFjaWxpdHkgbWF5IGJlIHRvbyBzaW1wbGUtbWluZGVkIGZvciByZWFsIGFwcGxpY2F0aW9ucy4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgZXAwX3JlYWRhYmxlIChzdHJ1Y3QgZGV2X2RhdGEgKmRldikKK3sKKwl3YWtlX3VwICgmZGV2LT53YWl0KTsKKwlraWxsX2Zhc3luYyAoJmRldi0+ZmFzeW5jLCBTSUdJTywgUE9MTF9JTik7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFuX3JlcSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBkZXZfZGF0YQkJKmRldiA9IGVwLT5kcml2ZXJfZGF0YTsKKworCWlmIChyZXEtPmJ1ZiAhPSBkZXYtPnJidWYpIHsKKwkJdXNiX2VwX2ZyZWVfYnVmZmVyIChlcCwgcmVxLT5idWYsIHJlcS0+ZG1hLCByZXEtPmxlbmd0aCk7CisJCXJlcS0+YnVmID0gZGV2LT5yYnVmOworCQlyZXEtPmRtYSA9IERNQV9BRERSX0lOVkFMSUQ7CisJfQorCXJlcS0+Y29tcGxldGUgPSBlcGlvX2NvbXBsZXRlOworCWRldi0+c2V0dXBfb3V0X3JlYWR5ID0gMDsKK30KKworc3RhdGljIHZvaWQgZXAwX2NvbXBsZXRlIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGRldl9kYXRhCQkqZGV2ID0gZXAtPmRyaXZlcl9kYXRhOworCWludAkJCWZyZWUgPSAxOworCisJLyogZm9yIGNvbnRyb2wgT1VULCBkYXRhIG11c3Qgc3RpbGwgZ2V0IHRvIHVzZXJzcGFjZSAqLworCWlmICghZGV2LT5zZXR1cF9pbikgeworCQlkZXYtPnNldHVwX291dF9lcnJvciA9IChyZXEtPnN0YXR1cyAhPSAwKTsKKwkJaWYgKCFkZXYtPnNldHVwX291dF9lcnJvcikKKwkJCWZyZWUgPSAwOworCQlkZXYtPnNldHVwX291dF9yZWFkeSA9IDE7CisJCWVwMF9yZWFkYWJsZSAoZGV2KTsKKwl9IGVsc2UgaWYgKGRldi0+c3RhdGUgPT0gU1RBVEVfU0VUVVApCisJCWRldi0+c3RhdGUgPSBTVEFURV9DT05ORUNURUQ7CisKKwkvKiBjbGVhbiB1cCBhcyBhcHByb3ByaWF0ZSAqLworCWlmIChmcmVlICYmIHJlcS0+YnVmICE9ICZkZXYtPnJidWYpCisJCWNsZWFuX3JlcSAoZXAsIHJlcSk7CisJcmVxLT5jb21wbGV0ZSA9IGVwaW9fY29tcGxldGU7Cit9CisKK3N0YXRpYyBpbnQgc2V0dXBfcmVxIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEsIHUxNiBsZW4pCit7CisJc3RydWN0IGRldl9kYXRhCSpkZXYgPSBlcC0+ZHJpdmVyX2RhdGE7CisKKwlpZiAoZGV2LT5zZXR1cF9vdXRfcmVhZHkpIHsKKwkJREJHIChkZXYsICJlcDAgcmVxdWVzdCBidXN5IVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWlmIChsZW4gPiBzaXplb2YgKGRldi0+cmJ1ZikpCisJCXJlcS0+YnVmID0gdXNiX2VwX2FsbG9jX2J1ZmZlciAoZXAsIGxlbiwgJnJlcS0+ZG1hLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVxLT5idWYgPT0gMCkgeworCQlyZXEtPmJ1ZiA9IGRldi0+cmJ1ZjsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJlcS0+Y29tcGxldGUgPSBlcDBfY29tcGxldGU7CisJcmVxLT5sZW5ndGggPSBsZW47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitlcDBfcmVhZCAoc3RydWN0IGZpbGUgKmZkLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnB0cikKK3sKKwlzdHJ1Y3QgZGV2X2RhdGEJCQkqZGV2ID0gZmQtPnByaXZhdGVfZGF0YTsKKwlzc2l6ZV90CQkJCXJldHZhbDsKKwllbnVtIGVwMF9zdGF0ZQkJCXN0YXRlOworCisJc3Bpbl9sb2NrX2lycSAoJmRldi0+bG9jayk7CisKKwkvKiByZXBvcnQgZmQgbW9kZSBjaGFuZ2UgYmVmb3JlIGFjdGluZyBvbiBpdCAqLworCWlmIChkZXYtPnNldHVwX2Fib3J0KSB7CisJCWRldi0+c2V0dXBfYWJvcnQgPSAwOworCQlyZXR2YWwgPSAtRUlEUk07CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBjb250cm9sIERBVEEgc3RhZ2UgKi8KKwlpZiAoKHN0YXRlID0gZGV2LT5zdGF0ZSkgPT0gU1RBVEVfU0VUVVApIHsKKworCQlpZiAoZGV2LT5zZXR1cF9pbikgewkJLyogc3RhbGwgSU4gKi8KKwkJCVZERUJVRyhkZXYsICJlcDBpbiBzdGFsbFxuIik7CisJCQkodm9pZCkgdXNiX2VwX3NldF9oYWx0IChkZXYtPmdhZGdldC0+ZXAwKTsKKwkJCXJldHZhbCA9IC1FTDJITFQ7CisJCQlkZXYtPnN0YXRlID0gU1RBVEVfQ09OTkVDVEVEOworCisJCX0gZWxzZSBpZiAobGVuID09IDApIHsJCS8qIGFjayBTRVRfQ09ORklHVVJBVElPTiBldGMgKi8KKwkJCXN0cnVjdCB1c2JfZXAJCSplcCA9IGRldi0+Z2FkZ2V0LT5lcDA7CisJCQlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IGRldi0+cmVxOworCisJCQlpZiAoKHJldHZhbCA9IHNldHVwX3JlcSAoZXAsIHJlcSwgMCkpID09IDApCisJCQkJcmV0dmFsID0gdXNiX2VwX3F1ZXVlIChlcCwgcmVxLCBHRlBfQVRPTUlDKTsKKwkJCWRldi0+c3RhdGUgPSBTVEFURV9DT05ORUNURUQ7CisKKwkJCS8qIGFzc3VtZSB0aGF0IHdhcyBTRVRfQ09ORklHVVJBVElPTiAqLworCQkJaWYgKGRldi0+Y3VycmVudF9jb25maWcpIHsKKwkJCQl1bnNpZ25lZCBwb3dlcjsKKyNpZmRlZglISUdIU1BFRUQKKwkJCQlpZiAoZGV2LT5nYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorCQkJCQlwb3dlciA9IGRldi0+aHNfY29uZmlnLT5iTWF4UG93ZXI7CisJCQkJZWxzZQorI2VuZGlmCisJCQkJCXBvd2VyID0gZGV2LT5jb25maWctPmJNYXhQb3dlcjsKKwkJCQl1c2JfZ2FkZ2V0X3ZidXNfZHJhdyhkZXYtPmdhZGdldCwgMiAqIHBvd2VyKTsKKwkJCX0KKworCQl9IGVsc2UgewkJCS8qIGNvbGxlY3QgT1VUIGRhdGEgKi8KKwkJCWlmICgoZmQtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSAhPSAwCisJCQkJCSYmICFkZXYtPnNldHVwX291dF9yZWFkeSkgeworCQkJCXJldHZhbCA9IC1FQUdBSU47CisJCQkJZ290byBkb25lOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxICgmZGV2LT5sb2NrKTsKKwkJCXJldHZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSAoZGV2LT53YWl0LAorCQkJCQlkZXYtPnNldHVwX291dF9yZWFkeSAhPSAwKTsKKworCQkJLyogRklYTUUgc3RhdGUgY291bGQgY2hhbmdlIGZyb20gdW5kZXIgdXMgKi8KKwkJCXNwaW5fbG9ja19pcnEgKCZkZXYtPmxvY2spOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGRvbmU7CisJCQlpZiAoZGV2LT5zZXR1cF9vdXRfZXJyb3IpCisJCQkJcmV0dmFsID0gLUVJTzsKKwkJCWVsc2UgeworCQkJCWxlbiA9IG1pbiAobGVuLCAoc2l6ZV90KWRldi0+cmVxLT5hY3R1YWwpOworLy8gRklYTUUgZG9uJ3QgY2FsbCB0aGlzIHdpdGggdGhlIHNwaW5sb2NrIGhlbGQgLi4uCisJCQkJaWYgKGNvcHlfdG9fdXNlciAoYnVmLCAmZGV2LT5yZXEtPmJ1ZiwgbGVuKSkKKwkJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCQljbGVhbl9yZXEgKGRldi0+Z2FkZ2V0LT5lcDAsIGRldi0+cmVxKTsKKwkJCQkvKiBOT1RFIHVzZXJzcGFjZSBjYW4ndCB5ZXQgY2hvb3NlIHRvIHN0YWxsICovCisJCQl9CisJCX0KKwkJZ290byBkb25lOworCX0KKworCS8qIGVsc2Ugbm9ybWFsOiByZXR1cm4gZXZlbnQgZGF0YSAqLworCWlmIChsZW4gPCBzaXplb2YgZGV2LT5ldmVudCBbMF0pIHsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBkb25lOworCX0KKwlsZW4gLT0gbGVuICUgc2l6ZW9mIChzdHJ1Y3QgdXNiX2dhZGdldGZzX2V2ZW50KTsKKwlkZXYtPnVzZXJtb2RlX3NldHVwID0gMTsKKworc2NhbjoKKwkvKiByZXR1cm4gcXVldWVkIGV2ZW50cyByaWdodCBhd2F5ICovCisJaWYgKGRldi0+ZXZfbmV4dCAhPSAwKSB7CisJCXVuc2lnbmVkCQlpLCBuOworCQlpbnQJCQl0bXAgPSBkZXYtPmV2X25leHQ7CisKKwkJbGVuID0gbWluIChsZW4sIHRtcCAqIHNpemVvZiAoc3RydWN0IHVzYl9nYWRnZXRmc19ldmVudCkpOworCQluID0gbGVuIC8gc2l6ZW9mIChzdHJ1Y3QgdXNiX2dhZGdldGZzX2V2ZW50KTsKKworCQkvKiBlcDAgY2FuJ3QgZGVsaXZlciBldmVudHMgd2hlbiBTVEFURV9TRVRVUCAqLworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlpZiAoZGV2LT5ldmVudCBbaV0udHlwZSA9PSBHQURHRVRGU19TRVRVUCkgeworCQkJCWxlbiA9IG4gPSBpICsgMTsKKwkJCQlsZW4gKj0gc2l6ZW9mIChzdHJ1Y3QgdXNiX2dhZGdldGZzX2V2ZW50KTsKKwkJCQluID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlzcGluX3VubG9ja19pcnEgKCZkZXYtPmxvY2spOworCQlpZiAoY29weV90b191c2VyIChidWYsICZkZXYtPmV2ZW50LCBsZW4pKQorCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZWxzZQorCQkJcmV0dmFsID0gbGVuOworCQlpZiAobGVuID4gMCkgeworCQkJbGVuIC89IHNpemVvZiAoc3RydWN0IHVzYl9nYWRnZXRmc19ldmVudCk7CisKKwkJCS8qIE5PVEUgdGhpcyBkb2Vzbid0IGd1YXJkIGFnYWluc3QgYnJva2VuIGRyaXZlcnM7CisJCQkgKiBjb25jdXJyZW50IGVwMCByZWFkZXJzIG1heSBsb3NlIGV2ZW50cy4KKwkJCSAqLworCQkJc3Bpbl9sb2NrX2lycSAoJmRldi0+bG9jayk7CisJCQlkZXYtPmV2X25leHQgLT0gbGVuOworCQkJaWYgKGRldi0+ZXZfbmV4dCAhPSAwKQorCQkJCW1lbW1vdmUgKCZkZXYtPmV2ZW50LCAmZGV2LT5ldmVudCBbbGVuXSwKKwkJCQkJc2l6ZW9mIChzdHJ1Y3QgdXNiX2dhZGdldGZzX2V2ZW50KQorCQkJCQkJKiAodG1wIC0gbGVuKSk7CisJCQlpZiAobiA9PSAwKQorCQkJCWRldi0+c3RhdGUgPSBTVEFURV9TRVRVUDsKKwkJCXNwaW5fdW5sb2NrX2lycSAoJmRldi0+bG9jayk7CisJCX0KKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJaWYgKGZkLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQlyZXR2YWwgPSAtRUFHQUlOOworCQlnb3RvIGRvbmU7CisJfQorCisJc3dpdGNoIChzdGF0ZSkgeworCWRlZmF1bHQ6CisJCURCRyAoZGV2LCAiZmFpbCAlcywgc3RhdGUgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdGUpOworCQlyZXR2YWwgPSAtRVNSQ0g7CisJCWJyZWFrOworCWNhc2UgU1RBVEVfVU5DT05ORUNURUQ6CisJY2FzZSBTVEFURV9DT05ORUNURUQ6CisJCXNwaW5fdW5sb2NrX2lycSAoJmRldi0+bG9jayk7CisJCURCRyAoZGV2LCAiJXMgd2FpdFxuIiwgX19GVU5DVElPTl9fKTsKKworCQkvKiB3YWl0IGZvciBldmVudHMgKi8KKwkJcmV0dmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlIChkZXYtPndhaXQsCisJCQkJZGV2LT5ldl9uZXh0ICE9IDApOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiByZXR2YWw7CisJCXNwaW5fbG9ja19pcnEgKCZkZXYtPmxvY2spOworCQlnb3RvIHNjYW47CisJfQorCitkb25lOgorCXNwaW5fdW5sb2NrX2lycSAoJmRldi0+bG9jayk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0ZnNfZXZlbnQgKgorbmV4dF9ldmVudCAoc3RydWN0IGRldl9kYXRhICpkZXYsIGVudW0gdXNiX2dhZGdldGZzX2V2ZW50X3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgdXNiX2dhZGdldGZzX2V2ZW50CSpldmVudDsKKwl1bnNpZ25lZAkJCWk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwkvKiB0aGVzZSBldmVudHMgcHVyZ2UgdGhlIHF1ZXVlICovCisJY2FzZSBHQURHRVRGU19ESVNDT05ORUNUOgorCQlpZiAoZGV2LT5zdGF0ZSA9PSBTVEFURV9TRVRVUCkKKwkJCWRldi0+c2V0dXBfYWJvcnQgPSAxOworCQkvLyBGQUxMIFRIUk9VR0gKKwljYXNlIEdBREdFVEZTX0NPTk5FQ1Q6CisJCWRldi0+ZXZfbmV4dCA9IDA7CisJCWJyZWFrOworCWNhc2UgR0FER0VURlNfU0VUVVA6CQkvKiBwcmV2aW91cyByZXF1ZXN0IHRpbWVkIG91dCAqLworCWNhc2UgR0FER0VURlNfU1VTUEVORDoJCS8qIHNhbWUgZWZmZWN0ICovCisJCS8qIHRoZXNlIGV2ZW50cyBjYW4ndCBiZSByZXBlYXRlZCAqLworCQlmb3IgKGkgPSAwOyBpICE9IGRldi0+ZXZfbmV4dDsgaSsrKSB7CisJCQlpZiAoZGV2LT5ldmVudCBbaV0udHlwZSAhPSB0eXBlKQorCQkJCWNvbnRpbnVlOworCQkJREJHIChkZXYsICJkaXNjYXJkIG9sZCBldmVudCAlZFxuIiwgdHlwZSk7CisJCQlkZXYtPmV2X25leHQtLTsKKwkJCWlmIChpID09IGRldi0+ZXZfbmV4dCkKKwkJCQlicmVhazsKKwkJCS8qIGluZGljZXMgc3RhcnQgYXQgemVybywgZm9yIHNpbXBsaWNpdHkgKi8KKwkJCW1lbW1vdmUgKCZkZXYtPmV2ZW50IFtpXSwgJmRldi0+ZXZlbnQgW2kgKyAxXSwKKwkJCQlzaXplb2YgKHN0cnVjdCB1c2JfZ2FkZ2V0ZnNfZXZlbnQpCisJCQkJCSogKGRldi0+ZXZfbmV4dCAtIGkpKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcgKCk7CisJfQorCWV2ZW50ID0gJmRldi0+ZXZlbnQgW2Rldi0+ZXZfbmV4dCsrXTsKKwlCVUdfT04gKGRldi0+ZXZfbmV4dCA+IE5fRVZFTlQpOworCVZERUJVRyAoZGV2LCAiZXYgJWQsIG5leHQgJWRcbiIsIHR5cGUsIGRldi0+ZXZfbmV4dCk7CisJbWVtc2V0IChldmVudCwgMCwgc2l6ZW9mICpldmVudCk7CisJZXZlbnQtPnR5cGUgPSB0eXBlOworCXJldHVybiBldmVudDsKK30KKworc3RhdGljIHNzaXplX3QKK2VwMF93cml0ZSAoc3RydWN0IGZpbGUgKmZkLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnB0cikKK3sKKwlzdHJ1Y3QgZGV2X2RhdGEJCSpkZXYgPSBmZC0+cHJpdmF0ZV9kYXRhOworCXNzaXplX3QJCQlyZXR2YWwgPSAtRVNSQ0g7CisKKwlzcGluX2xvY2tfaXJxICgmZGV2LT5sb2NrKTsKKworCS8qIHJlcG9ydCBmZCBtb2RlIGNoYW5nZSBiZWZvcmUgYWN0aW5nIG9uIGl0ICovCisJaWYgKGRldi0+c2V0dXBfYWJvcnQpIHsKKwkJZGV2LT5zZXR1cF9hYm9ydCA9IDA7CisJCXJldHZhbCA9IC1FSURSTTsKKworCS8qIGRhdGEgYW5kL29yIHN0YXR1cyBzdGFnZSBmb3IgY29udHJvbCByZXF1ZXN0ICovCisJfSBlbHNlIGlmIChkZXYtPnN0YXRlID09IFNUQVRFX1NFVFVQKSB7CisKKwkJLyogSU4gREFUQStTVEFUVVMgY2FsbGVyIG1ha2VzIGxlbiA8PSB3TGVuZ3RoICovCisJCWlmIChkZXYtPnNldHVwX2luKSB7CisJCQlyZXR2YWwgPSBzZXR1cF9yZXEgKGRldi0+Z2FkZ2V0LT5lcDAsIGRldi0+cmVxLCBsZW4pOworCQkJaWYgKHJldHZhbCA9PSAwKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxICgmZGV2LT5sb2NrKTsKKwkJCQlpZiAoY29weV9mcm9tX3VzZXIgKGRldi0+cmVxLT5idWYsIGJ1ZiwgbGVuKSkKKwkJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCQllbHNlCisJCQkJCXJldHZhbCA9IHVzYl9lcF9xdWV1ZSAoCisJCQkJCQlkZXYtPmdhZGdldC0+ZXAwLCBkZXYtPnJlcSwKKwkJCQkJCUdGUF9LRVJORUwpOworCQkJCWlmIChyZXR2YWwgPCAwKSB7CisJCQkJCXNwaW5fbG9ja19pcnEgKCZkZXYtPmxvY2spOworCQkJCQljbGVhbl9yZXEgKGRldi0+Z2FkZ2V0LT5lcDAsIGRldi0+cmVxKTsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxICgmZGV2LT5sb2NrKTsKKwkJCQl9IGVsc2UKKwkJCQkJcmV0dmFsID0gbGVuOworCisJCQkJcmV0dXJuIHJldHZhbDsKKwkJCX0KKworCQkvKiBjYW4gc3RhbGwgc29tZSBPVVQgdHJhbnNmZXJzICovCisJCX0gZWxzZSBpZiAoZGV2LT5zZXR1cF9jYW5fc3RhbGwpIHsKKwkJCVZERUJVRyhkZXYsICJlcDBvdXQgc3RhbGxcbiIpOworCQkJKHZvaWQpIHVzYl9lcF9zZXRfaGFsdCAoZGV2LT5nYWRnZXQtPmVwMCk7CisJCQlyZXR2YWwgPSAtRUwySExUOworCQkJZGV2LT5zdGF0ZSA9IFNUQVRFX0NPTk5FQ1RFRDsKKwkJfSBlbHNlIHsKKwkJCURCRyhkZXYsICJib2d1cyBlcDBvdXQgc3RhbGwhXG4iKTsKKwkJfQorCX0gZWxzZQorCQlEQkcgKGRldiwgImZhaWwgJXMsIHN0YXRlICVkXG4iLCBfX0ZVTkNUSU9OX18sIGRldi0+c3RhdGUpOworCisJc3Bpbl91bmxvY2tfaXJxICgmZGV2LT5sb2NrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50CitlcDBfZmFzeW5jIChpbnQgZiwgc3RydWN0IGZpbGUgKmZkLCBpbnQgb24pCit7CisJc3RydWN0IGRldl9kYXRhCQkqZGV2ID0gZmQtPnByaXZhdGVfZGF0YTsKKwkvLyBjYWxsZXIgbXVzdCBGX1NFVE9XTiBiZWZvcmUgc2lnbmFsIGRlbGl2ZXJ5IGhhcHBlbnMKKwlWREVCVUcgKGRldiwgIiVzICVzXG4iLCBfX0ZVTkNUSU9OX18sIG9uID8gIm9uIiA6ICJvZmYiKTsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlciAoZiwgZmQsIG9uLCAmZGV2LT5mYXN5bmMpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyIGdhZGdldGZzX2RyaXZlcjsKKworc3RhdGljIGludAorZGV2X3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZCkKK3sKKwlzdHJ1Y3QgZGV2X2RhdGEJCSpkZXYgPSBmZC0+cHJpdmF0ZV9kYXRhOworCisJLyogY2xvc2luZyBlcDAgPT09IHNodXRkb3duIGFsbCAqLworCisJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAoJmdhZGdldGZzX2RyaXZlcik7CisKKwkvKiBhdCB0aGlzIHBvaW50ICJnb29kIiBoYXJkd2FyZSBoYXMgZGlzY29ubmVjdGVkIHRoZQorCSAqIGRldmljZSBmcm9tIFVTQjsgdGhlIGhvc3Qgd29uJ3Qgc2VlIGl0IGFueSBtb3JlLgorCSAqIGFsdGVybmF0aXZlbHksIGFsbCBob3N0IHJlcXVlc3RzIHdpbGwgdGltZSBvdXQuCisJICovCisKKwlmYXN5bmNfaGVscGVyICgtMSwgZmQsIDAsICZkZXYtPmZhc3luYyk7CisJa2ZyZWUgKGRldi0+YnVmKTsKKwlkZXYtPmJ1ZiA9IE5VTEw7CisJcHV0X2RldiAoZGV2KTsKKworCS8qIG90aGVyIGVuZHBvaW50cyB3ZXJlIGFsbCBkZWNvdXBsZWQgZnJvbSB0aGlzIGRldmljZSAqLworCWRldi0+c3RhdGUgPSBTVEFURV9ERVZfRElTQUJMRUQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGV2X2lvY3RsIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQsCisJCXVuc2lnbmVkIGNvZGUsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCit7CisJc3RydWN0IGRldl9kYXRhCQkqZGV2ID0gZmQtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0ID0gZGV2LT5nYWRnZXQ7CisKKwlpZiAoZ2FkZ2V0LT5vcHMtPmlvY3RsKQorCQlyZXR1cm4gZ2FkZ2V0LT5vcHMtPmlvY3RsIChnYWRnZXQsIGNvZGUsIHZhbHVlKTsKKwlyZXR1cm4gLUVOT1RUWTsKK30KKworLyogdXNlZCBhZnRlciBkZXZpY2UgY29uZmlndXJhdGlvbiAqLworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXAwX2lvX29wZXJhdGlvbnMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLmxsc2VlayA9CW5vX2xsc2VlaywKKworCS5yZWFkID0JCWVwMF9yZWFkLAorCS53cml0ZSA9CWVwMF93cml0ZSwKKwkuZmFzeW5jID0JZXAwX2Zhc3luYywKKwkvLyAucG9sbCA9CWVwMF9wb2xsLAorCS5pb2N0bCA9CWRldl9pb2N0bCwKKwkucmVsZWFzZSA9CWRldl9yZWxlYXNlLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVGhlIGluLWtlcm5lbCBnYWRnZXQgZHJpdmVyIGhhbmRsZXMgbW9zdCBlcDAgaXNzdWVzLCBpbiBwYXJ0aWN1bGFyCisgKiBlbnVtZXJhdGluZyB0aGUgc2luZ2xlIGNvbmZpZ3VyYXRpb24gKGFzIHByb3ZpZGVkIGZyb20gdXNlciBzcGFjZSkuCisgKgorICogVW5yZWNvZ25pemVkIGVwMCByZXF1ZXN0cyBtYXkgYmUgaGFuZGxlZCBpbiB1c2VyIHNwYWNlLgorICovCisKKyNpZmRlZglISUdIU1BFRUQKK3N0YXRpYyB2b2lkIG1ha2VfcXVhbGlmaWVyIChzdHJ1Y3QgZGV2X2RhdGEgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yCQlxdWFsOworCXN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IJCSpkZXNjOworCisJcXVhbC5iTGVuZ3RoID0gc2l6ZW9mIHF1YWw7CisJcXVhbC5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfREVWSUNFX1FVQUxJRklFUjsKKwlxdWFsLmJjZFVTQiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMCk7CisKKwlkZXNjID0gZGV2LT5kZXY7CisJcXVhbC5iRGV2aWNlQ2xhc3MgPSBkZXNjLT5iRGV2aWNlQ2xhc3M7CisJcXVhbC5iRGV2aWNlU3ViQ2xhc3MgPSBkZXNjLT5iRGV2aWNlU3ViQ2xhc3M7CisJcXVhbC5iRGV2aWNlUHJvdG9jb2wgPSBkZXNjLT5iRGV2aWNlUHJvdG9jb2w7CisKKwkvKiBhc3N1bWVzIGVwMCB1c2VzIHRoZSBzYW1lIHZhbHVlIGZvciBib3RoIHNwZWVkcyAuLi4gKi8KKwlxdWFsLmJNYXhQYWNrZXRTaXplMCA9IGRlc2MtPmJNYXhQYWNrZXRTaXplMDsKKworCXF1YWwuYk51bUNvbmZpZ3VyYXRpb25zID0gMTsKKwlxdWFsLmJSRVNFUlZFRCA9IDA7CisKKwltZW1jcHkgKGRldi0+cmJ1ZiwgJnF1YWwsIHNpemVvZiBxdWFsKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50Citjb25maWdfYnVmIChzdHJ1Y3QgZGV2X2RhdGEgKmRldiwgdTggdHlwZSwgdW5zaWduZWQgaW5kZXgpCit7CisJaW50CQlsZW47CisjaWZkZWYgSElHSFNQRUVECisJaW50CQloczsKKyNlbmRpZgorCisJLyogb25seSBvbmUgY29uZmlndXJhdGlvbiAqLworCWlmIChpbmRleCA+IDApCisJCXJldHVybiAtRUlOVkFMOworCisjaWZkZWYgSElHSFNQRUVECisJaHMgPSAoZGV2LT5nYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKTsKKwlpZiAodHlwZSA9PSBVU0JfRFRfT1RIRVJfU1BFRURfQ09ORklHKQorCQlocyA9ICFoczsKKwlpZiAoaHMpIHsKKwkJZGV2LT5yZXEtPmJ1ZiA9IGRldi0+aHNfY29uZmlnOworCQlsZW4gPSBsZTE2X3RvX2NwdXAgKCZkZXYtPmhzX2NvbmZpZy0+d1RvdGFsTGVuZ3RoKTsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJZGV2LT5yZXEtPmJ1ZiA9IGRldi0+Y29uZmlnOworCQlsZW4gPSBsZTE2X3RvX2NwdXAgKCZkZXYtPmNvbmZpZy0+d1RvdGFsTGVuZ3RoKTsKKwl9CisJKCh1OCAqKWRldi0+cmVxLT5idWYpIFsxXSA9IHR5cGU7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludAorZ2FkZ2V0ZnNfc2V0dXAgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCit7CisJc3RydWN0IGRldl9kYXRhCQkJKmRldiA9IGdldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0KTsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJCSpyZXEgPSBkZXYtPnJlcTsKKwlpbnQJCQkJdmFsdWUgPSAtRU9QTk9UU1VQUDsKKwlzdHJ1Y3QgdXNiX2dhZGdldGZzX2V2ZW50CSpldmVudDsKKwl1MTYJCQkJd192YWx1ZSA9IGN0cmwtPndWYWx1ZTsKKwl1MTYJCQkJd19sZW5ndGggPSBjdHJsLT53TGVuZ3RoOworCisJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKwlkZXYtPnNldHVwX2Fib3J0ID0gMDsKKwlpZiAoZGV2LT5zdGF0ZSA9PSBTVEFURV9VTkNPTk5FQ1RFRCkgeworCQlzdHJ1Y3QgdXNiX2VwCSplcDsKKwkJc3RydWN0IGVwX2RhdGEJKmRhdGE7CisKKwkJZGV2LT5zdGF0ZSA9IFNUQVRFX0NPTk5FQ1RFRDsKKwkJZGV2LT5kZXYtPmJNYXhQYWNrZXRTaXplMCA9IGdhZGdldC0+ZXAwLT5tYXhwYWNrZXQ7CisKKyNpZmRlZglISUdIU1BFRUQKKwkJaWYgKGdhZGdldC0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0ggJiYgZGV2LT5oc19jb25maWcgPT0gMCkgeworCQkJRVJST1IgKGRldiwgIm5vIGhpZ2ggc3BlZWQgY29uZmlnPz9cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKyNlbmRpZgkvKiBISUdIU1BFRUQgKi8KKworCQlJTkZPIChkZXYsICJjb25uZWN0ZWRcbiIpOworCQlldmVudCA9IG5leHRfZXZlbnQgKGRldiwgR0FER0VURlNfQ09OTkVDVCk7CisJCWV2ZW50LT51LnNwZWVkID0gZ2FkZ2V0LT5zcGVlZDsKKwkJZXAwX3JlYWRhYmxlIChkZXYpOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkgKGVwLCAmZ2FkZ2V0LT5lcF9saXN0LCBlcF9saXN0KSB7CisJCQlkYXRhID0gZXAtPmRyaXZlcl9kYXRhOworCQkJLyogLi4uIGRvd25fdHJ5bG9jayAoJmRhdGEtPmxvY2spIC4uLiAqLworCQkJaWYgKGRhdGEtPnN0YXRlICE9IFNUQVRFX0VQX0RFRkVSX0VOQUJMRSkKKwkJCQljb250aW51ZTsKKyNpZmRlZglISUdIU1BFRUQKKwkJCWlmIChnYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorCQkJCXZhbHVlID0gdXNiX2VwX2VuYWJsZSAoZXAsICZkYXRhLT5oc19kZXNjKTsKKwkJCWVsc2UKKyNlbmRpZgkvKiBISUdIU1BFRUQgKi8KKwkJCQl2YWx1ZSA9IHVzYl9lcF9lbmFibGUgKGVwLCAmZGF0YS0+ZGVzYyk7CisJCQlpZiAodmFsdWUpIHsKKwkJCQlFUlJPUiAoZGV2LCAiZGVmZXJyZWQgJXMgZW5hYmxlIC0tPiAlZFxuIiwKKwkJCQkJZGF0YS0+bmFtZSwgdmFsdWUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9FUF9FTkFCTEVEOworCQkJd2FrZV91cCAoJmRhdGEtPndhaXQpOworCQkJREJHIChkZXYsICJ3b2tlIHVwICVzIHdhaXRlcnNcbiIsIGRhdGEtPm5hbWUpOworCQl9CisKKwkvKiBob3N0IG1heSBoYXZlIGdpdmVuIHVwIHdhaXRpbmcgZm9yIHJlc3BvbnNlLiAgd2UgY2FuIG1pc3MgY29udHJvbAorCSAqIHJlcXVlc3RzIGhhbmRsZWQgbG93ZXIgZG93biAoZGV2aWNlL2VuZHBvaW50IHN0YXR1cyBhbmQgZmVhdHVyZXMpOworCSAqIHRoZW4gZXAwX3tyZWFkLHdyaXRlfSB3aWxsIHJlcG9ydCB0aGUgd3Jvbmcgc3RhdHVzLiBjb250cm9sbGVyCisJICogZHJpdmVyIHdpbGwgaGF2ZSBhYm9ydGVkIHBlbmRpbmcgaS9vLgorCSAqLworCX0gZWxzZSBpZiAoZGV2LT5zdGF0ZSA9PSBTVEFURV9TRVRVUCkKKwkJZGV2LT5zZXR1cF9hYm9ydCA9IDE7CisKKwlyZXEtPmJ1ZiA9IGRldi0+cmJ1ZjsKKwlyZXEtPmRtYSA9IERNQV9BRERSX0lOVkFMSUQ7CisJcmVxLT5jb250ZXh0ID0gTlVMTDsKKwl2YWx1ZSA9IC1FT1BOT1RTVVBQOworCXN3aXRjaCAoY3RybC0+YlJlcXVlc3QpIHsKKworCWNhc2UgVVNCX1JFUV9HRVRfREVTQ1JJUFRPUjoKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSBVU0JfRElSX0lOKQorCQkJZ290byB1bnJlY29nbml6ZWQ7CisJCXN3aXRjaCAod192YWx1ZSA+PiA4KSB7CisKKwkJY2FzZSBVU0JfRFRfREVWSUNFOgorCQkJdmFsdWUgPSBtaW4gKHdfbGVuZ3RoLCAodTE2KSBzaXplb2YgKmRldi0+ZGV2KTsKKwkJCXJlcS0+YnVmID0gZGV2LT5kZXY7CisJCQlicmVhazsKKyNpZmRlZglISUdIU1BFRUQKKwkJY2FzZSBVU0JfRFRfREVWSUNFX1FVQUxJRklFUjoKKwkJCWlmICghZGV2LT5oc19jb25maWcpCisJCQkJYnJlYWs7CisJCQl2YWx1ZSA9IG1pbiAod19sZW5ndGgsICh1MTYpCisJCQkJc2l6ZW9mIChzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yKSk7CisJCQltYWtlX3F1YWxpZmllciAoZGV2KTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9EVF9PVEhFUl9TUEVFRF9DT05GSUc6CisJCQkvLyBGQUxMVEhST1VHSAorI2VuZGlmCisJCWNhc2UgVVNCX0RUX0NPTkZJRzoKKwkJCXZhbHVlID0gY29uZmlnX2J1ZiAoZGV2LAorCQkJCQl3X3ZhbHVlID4+IDgsCisJCQkJCXdfdmFsdWUgJiAweGZmKTsKKwkJCWlmICh2YWx1ZSA+PSAwKQorCQkJCXZhbHVlID0gbWluICh3X2xlbmd0aCwgKHUxNikgdmFsdWUpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX0RUX1NUUklORzoKKwkJCWdvdG8gdW5yZWNvZ25pemVkOworCisJCWRlZmF1bHQ6CQkvLyBhbGwgb3RoZXJzIGFyZSBlcnJvcnMKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJLyogY3VycmVudGx5IG9uZSBjb25maWcsIHR3byBzcGVlZHMgKi8KKwljYXNlIFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT046CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gMCkKKwkJCWJyZWFrOworCQlpZiAoMCA9PSAodTgpIHdfdmFsdWUpIHsKKwkJCXZhbHVlID0gMDsKKwkJCWRldi0+Y3VycmVudF9jb25maWcgPSAwOworCQkJdXNiX2dhZGdldF92YnVzX2RyYXcoZ2FkZ2V0LCA4IC8qIG1BICovICk7CisJCQkvLyB1c2VyIG1vZGUgZXhwZWN0ZWQgdG8gZGlzYWJsZSBlbmRwb2ludHMKKwkJfSBlbHNlIHsKKwkJCXU4CWNvbmZpZywgcG93ZXI7CisjaWZkZWYJSElHSFNQRUVECisJCQlpZiAoZ2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgeworCQkJCWNvbmZpZyA9IGRldi0+aHNfY29uZmlnLT5iQ29uZmlndXJhdGlvblZhbHVlOworCQkJCXBvd2VyID0gZGV2LT5oc19jb25maWctPmJNYXhQb3dlcjsKKwkJCX0gZWxzZQorI2VuZGlmCisJCQl7CisJCQkJY29uZmlnID0gZGV2LT5jb25maWctPmJDb25maWd1cmF0aW9uVmFsdWU7CisJCQkJcG93ZXIgPSBkZXYtPmNvbmZpZy0+Yk1heFBvd2VyOworCQkJfQorCisJCQlpZiAoY29uZmlnID09ICh1OCkgd192YWx1ZSkgeworCQkJCXZhbHVlID0gMDsKKwkJCQlkZXYtPmN1cnJlbnRfY29uZmlnID0gY29uZmlnOworCQkJCXVzYl9nYWRnZXRfdmJ1c19kcmF3KGdhZGdldCwgMiAqIHBvd2VyKTsKKwkJCX0KKwkJfQorCisJCS8qIHJlcG9ydCBTRVRfQ09ORklHVVJBVElPTiBsaWtlIGFueSBvdGhlciBjb250cm9sIHJlcXVlc3QsCisJCSAqIGV4Y2VwdCB0aGF0IHVzZXJtb2RlIG1heSBub3Qgc3RhbGwgdGhpcy4gIHRoZSBuZXh0CisJCSAqIHJlcXVlc3QgbXVzdG4ndCBiZSBhbGxvd2VkIHN0YXJ0IHVudGlsIHRoaXMgZmluaXNoZXM6CisJCSAqIGVuZHBvaW50cyBhbmQgdGhyZWFkcyBzZXQgdXAsIGV0Yy4KKwkJICoKKwkJICogTk9URTogIG9sZGVyIFBYQSBoYXJkd2FyZSAoYmVmb3JlIFBYQSAyNTU6IHdpdGhvdXQgVURDQ0ZSKQorCQkgKiBoYXMgYmFkL3JhY2V5IGF1dG9tYWdpYyB0aGF0IHByZXZlbnRzIHN5bmNocm9uaXppbmcgaGVyZS4KKwkJICogZXZlbiBrZXJuZWwgbW9kZSBkcml2ZXJzIG9mdGVuIG1pc3MgdGhlbS4KKwkJICovCisJCWlmICh2YWx1ZSA9PSAwKSB7CisJCQlJTkZPIChkZXYsICJjb25maWd1cmF0aW9uICMlZFxuIiwgZGV2LT5jdXJyZW50X2NvbmZpZyk7CisJCQlpZiAoZGV2LT51c2VybW9kZV9zZXR1cCkgeworCQkJCWRldi0+c2V0dXBfY2FuX3N0YWxsID0gMDsKKwkJCQlnb3RvIGRlbGVnYXRlOworCQkJfQorCQl9CisJCWJyZWFrOworCisjaWZuZGVmCUNPTkZJR19VU0JfR0FER0VURlNfUFhBMlhYCisJLyogUFhBIGF1dG9tYWdpY2FsbHkgaGFuZGxlcyB0aGlzIHJlcXVlc3QgdG9vICovCisJY2FzZSBVU0JfUkVRX0dFVF9DT05GSUdVUkFUSU9OOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IDB4ODApCisJCQlicmVhazsKKwkJKih1OCAqKXJlcS0+YnVmID0gZGV2LT5jdXJyZW50X2NvbmZpZzsKKwkJdmFsdWUgPSBtaW4gKHdfbGVuZ3RoLCAodTE2KSAxKTsKKwkJYnJlYWs7CisjZW5kaWYKKworCWRlZmF1bHQ6Cit1bnJlY29nbml6ZWQ6CisJCVZERUJVRyAoZGV2LCAiJXMgcmVxJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwlZFxuIiwKKwkJCWRldi0+dXNlcm1vZGVfc2V0dXAgPyAiZGVsZWdhdGUiIDogImZhaWwiLAorCQkJY3RybC0+YlJlcXVlc3RUeXBlLCBjdHJsLT5iUmVxdWVzdCwKKwkJCXdfdmFsdWUsIGxlMTZfdG9fY3B1KGN0cmwtPndJbmRleCksIHdfbGVuZ3RoKTsKKworCQkvKiBpZiB0aGVyZSdzIGFuIGVwMCByZWFkZXIsIGRvbid0IHN0YWxsICovCisJCWlmIChkZXYtPnVzZXJtb2RlX3NldHVwKSB7CisJCQlkZXYtPnNldHVwX2Nhbl9zdGFsbCA9IDE7CitkZWxlZ2F0ZToKKwkJCWRldi0+c2V0dXBfaW4gPSAoY3RybC0+YlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikKKwkJCQkJCT8gMSA6IDA7CisJCQlkZXYtPnNldHVwX291dF9yZWFkeSA9IDA7CisJCQlkZXYtPnNldHVwX291dF9lcnJvciA9IDA7CisJCQl2YWx1ZSA9IDA7CisKKwkJCS8qIHJlYWQgREFUQSBzdGFnZSBmb3IgT1VUIHJpZ2h0IGF3YXkgKi8KKwkJCWlmICh1bmxpa2VseSAoIWRldi0+c2V0dXBfaW4gJiYgd19sZW5ndGgpKSB7CisJCQkJdmFsdWUgPSBzZXR1cF9yZXEgKGdhZGdldC0+ZXAwLCBkZXYtPnJlcSwKKwkJCQkJCQl3X2xlbmd0aCk7CisJCQkJaWYgKHZhbHVlIDwgMCkKKwkJCQkJYnJlYWs7CisJCQkJdmFsdWUgPSB1c2JfZXBfcXVldWUgKGdhZGdldC0+ZXAwLCBkZXYtPnJlcSwKKwkJCQkJCQlHRlBfQVRPTUlDKTsKKwkJCQlpZiAodmFsdWUgPCAwKSB7CisJCQkJCWNsZWFuX3JlcSAoZ2FkZ2V0LT5lcDAsIGRldi0+cmVxKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJLyogd2UgY2FuJ3QgY3VycmVudGx5IHN0YWxsIHRoZXNlICovCisJCQkJZGV2LT5zZXR1cF9jYW5fc3RhbGwgPSAwOworCQkJfQorCisJCQkvKiBzdGF0ZSBjaGFuZ2VzIHdoZW4gcmVhZGVyIGNvbGxlY3RzIGV2ZW50ICovCisJCQlldmVudCA9IG5leHRfZXZlbnQgKGRldiwgR0FER0VURlNfU0VUVVApOworCQkJZXZlbnQtPnUuc2V0dXAgPSAqY3RybDsKKwkJCWVwMF9yZWFkYWJsZSAoZGV2KTsKKwkJCXNwaW5fdW5sb2NrICgmZGV2LT5sb2NrKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJLyogcHJvY2VlZCB3aXRoIGRhdGEgdHJhbnNmZXIgYW5kIHN0YXR1cyBwaGFzZXM/ICovCisJaWYgKHZhbHVlID49IDAgJiYgZGV2LT5zdGF0ZSAhPSBTVEFURV9TRVRVUCkgeworCQlyZXEtPmxlbmd0aCA9IHZhbHVlOworCQlyZXEtPnplcm8gPSB2YWx1ZSA8IHdfbGVuZ3RoOworCQl2YWx1ZSA9IHVzYl9lcF9xdWV1ZSAoZ2FkZ2V0LT5lcDAsIHJlcSwgR0ZQX0FUT01JQyk7CisJCWlmICh2YWx1ZSA8IDApIHsKKwkJCURCRyAoZGV2LCAiZXBfcXVldWUgLS0+ICVkXG4iLCB2YWx1ZSk7CisJCQlyZXEtPnN0YXR1cyA9IDA7CisJCX0KKwl9CisKKwkvKiBkZXZpY2Ugc3RhbGxzIHdoZW4gdmFsdWUgPCAwICovCisJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgZGVzdHJveV9lcF9maWxlcyAoc3RydWN0IGRldl9kYXRhICpkZXYpCit7CisJc3RydWN0IGxpc3RfaGVhZAkqZW50cnksICp0bXA7CisKKwlEQkcgKGRldiwgIiVzICVkXG4iLCBfX0ZVTkNUSU9OX18sIGRldi0+c3RhdGUpOworCisJLyogZGV2LT5zdGF0ZSBtdXN0IHByZXZlbnQgaW50ZXJmZXJlbmNlICovCityZXN0YXJ0OgorCXNwaW5fbG9ja19pcnEgKCZkZXYtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfc2FmZSAoZW50cnksIHRtcCwgJmRldi0+ZXBmaWxlcykgeworCQlzdHJ1Y3QgZXBfZGF0YQkqZXA7CisJCXN0cnVjdCBpbm9kZQkqcGFyZW50OworCQlzdHJ1Y3QgZGVudHJ5CSpkZW50cnk7CisKKwkJLyogYnJlYWsgbGluayB0byBGUyAqLworCQllcCA9IGxpc3RfZW50cnkgKGVudHJ5LCBzdHJ1Y3QgZXBfZGF0YSwgZXBmaWxlcyk7CisJCWxpc3RfZGVsX2luaXQgKCZlcC0+ZXBmaWxlcyk7CisJCWRlbnRyeSA9IGVwLT5kZW50cnk7CisJCWVwLT5kZW50cnkgPSBOVUxMOworCQlwYXJlbnQgPSBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlOworCisJCS8qIGJyZWFrIGxpbmsgdG8gY29udHJvbGxlciAqLworCQlpZiAoZXAtPnN0YXRlID09IFNUQVRFX0VQX0VOQUJMRUQpCisJCQkodm9pZCkgdXNiX2VwX2Rpc2FibGUgKGVwLT5lcCk7CisJCWVwLT5zdGF0ZSA9IFNUQVRFX0VQX1VOQk9VTkQ7CisJCXVzYl9lcF9mcmVlX3JlcXVlc3QgKGVwLT5lcCwgZXAtPnJlcSk7CisJCWVwLT5lcCA9IE5VTEw7CisJCXdha2VfdXAgKCZlcC0+d2FpdCk7CisJCXB1dF9lcCAoZXApOworCisJCXNwaW5fdW5sb2NrX2lycSAoJmRldi0+bG9jayk7CisKKwkJLyogYnJlYWsgbGluayB0byBkY2FjaGUgKi8KKwkJZG93biAoJnBhcmVudC0+aV9zZW0pOworCQlkX2RlbGV0ZSAoZGVudHJ5KTsKKwkJZHB1dCAoZGVudHJ5KTsKKwkJdXAgKCZwYXJlbnQtPmlfc2VtKTsKKworCQkvKiBmZHMgbWF5IHN0aWxsIGJlIG9wZW4gKi8KKwkJZ290byByZXN0YXJ0OworCX0KKwlzcGluX3VubG9ja19pcnEgKCZkZXYtPmxvY2spOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKgorZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgY29uc3QgKm5hbWUsCisJCXZvaWQgKmRhdGEsIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMsCisJCXN0cnVjdCBkZW50cnkgKipkZW50cnlfcCk7CisKK3N0YXRpYyBpbnQgYWN0aXZhdGVfZXBfZmlsZXMgKHN0cnVjdCBkZXZfZGF0YSAqZGV2KQoreworCXN0cnVjdCB1c2JfZXAJKmVwOworCisJZ2FkZ2V0X2Zvcl9lYWNoX2VwIChlcCwgZGV2LT5nYWRnZXQpIHsKKwkJc3RydWN0IGVwX2RhdGEJKmRhdGE7CisKKwkJZGF0YSA9IGttYWxsb2MgKHNpemVvZiAqZGF0YSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZGF0YSkKKwkJCWdvdG8gZW5vbWVtOworCQltZW1zZXQgKGRhdGEsIDAsIHNpemVvZiBkYXRhKTsKKwkJZGF0YS0+c3RhdGUgPSBTVEFURV9FUF9ESVNBQkxFRDsKKwkJaW5pdF9NVVRFWCAoJmRhdGEtPmxvY2spOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkICgmZGF0YS0+d2FpdCk7CisKKwkJc3RybmNweSAoZGF0YS0+bmFtZSwgZXAtPm5hbWUsIHNpemVvZiAoZGF0YS0+bmFtZSkgLSAxKTsKKwkJYXRvbWljX3NldCAoJmRhdGEtPmNvdW50LCAxKTsKKwkJZGF0YS0+ZGV2ID0gZGV2OworCQlnZXRfZGV2IChkZXYpOworCisJCWRhdGEtPmVwID0gZXA7CisJCWVwLT5kcml2ZXJfZGF0YSA9IGRhdGE7CisKKwkJZGF0YS0+cmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QgKGVwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkYXRhLT5yZXEpCisJCQlnb3RvIGVub21lbTsKKworCQlkYXRhLT5pbm9kZSA9IGdhZGdldGZzX2NyZWF0ZV9maWxlIChkZXYtPnNiLCBkYXRhLT5uYW1lLAorCQkJCWRhdGEsICZlcF9jb25maWdfb3BlcmF0aW9ucywKKwkJCQkmZGF0YS0+ZGVudHJ5KTsKKwkJaWYgKCFkYXRhLT5pbm9kZSkgeworCQkJa2ZyZWUgKGRhdGEpOworCQkJZ290byBlbm9tZW07CisJCX0KKwkJbGlzdF9hZGRfdGFpbCAoJmRhdGEtPmVwZmlsZXMsICZkZXYtPmVwZmlsZXMpOworCX0KKwlyZXR1cm4gMDsKKworZW5vbWVtOgorCURCRyAoZGV2LCAiJXMgZW5vbWVtXG4iLCBfX0ZVTkNUSU9OX18pOworCWRlc3Ryb3lfZXBfZmlsZXMgKGRldik7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkCitnYWRnZXRmc191bmJpbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IGRldl9kYXRhCQkqZGV2ID0gZ2V0X2dhZGdldF9kYXRhIChnYWRnZXQpOworCisJREJHIChkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCXNwaW5fbG9ja19pcnEgKCZkZXYtPmxvY2spOworCWRldi0+c3RhdGUgPSBTVEFURV9ERVZfVU5CT1VORDsKKwlzcGluX3VubG9ja19pcnEgKCZkZXYtPmxvY2spOworCisJZGVzdHJveV9lcF9maWxlcyAoZGV2KTsKKwlnYWRnZXQtPmVwMC0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCXNldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0LCBOVUxMKTsKKworCS8qIHdlJ3ZlIGFscmVhZHkgYmVlbiBkaXNjb25uZWN0ZWQgLi4uIG5vIGkvbyBpcyBhY3RpdmUgKi8KKwlpZiAoZGV2LT5yZXEpCisJCXVzYl9lcF9mcmVlX3JlcXVlc3QgKGdhZGdldC0+ZXAwLCBkZXYtPnJlcSk7CisJREJHIChkZXYsICIlcyBkb25lXG4iLCBfX0ZVTkNUSU9OX18pOworCXB1dF9kZXYgKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X2RhdGEJCSp0aGVfZGV2aWNlOworCitzdGF0aWMgaW50CitnYWRnZXRmc19iaW5kIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBkZXZfZGF0YQkJKmRldiA9IHRoZV9kZXZpY2U7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FU1JDSDsKKwlpZiAoMCAhPSBzdHJjbXAgKENISVAsIGdhZGdldC0+bmFtZSkpIHsKKwkJcHJpbnRrIChLRVJOX0VSUiAiJXMgZXhwZWN0ZWQgJXMgY29udHJvbGxlciBub3QgJXNcbiIsCisJCQlzaG9ydG5hbWUsIENISVAsIGdhZGdldC0+bmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0LCBkZXYpOworCWRldi0+Z2FkZ2V0ID0gZ2FkZ2V0OworCWdhZGdldC0+ZXAwLT5kcml2ZXJfZGF0YSA9IGRldjsKKwlkZXYtPmRldi0+Yk1heFBhY2tldFNpemUwID0gZ2FkZ2V0LT5lcDAtPm1heHBhY2tldDsKKworCS8qIHByZWFsbG9jYXRlIGNvbnRyb2wgcmVzcG9uc2UgYW5kIGJ1ZmZlciAqLworCWRldi0+cmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QgKGdhZGdldC0+ZXAwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+cmVxKQorCQlnb3RvIGVub21lbTsKKwlkZXYtPnJlcS0+Y29udGV4dCA9IE5VTEw7CisJZGV2LT5yZXEtPmNvbXBsZXRlID0gZXBpb19jb21wbGV0ZTsKKworCWlmIChhY3RpdmF0ZV9lcF9maWxlcyAoZGV2KSA8IDApCisJCWdvdG8gZW5vbWVtOworCisJSU5GTyAoZGV2LCAiYm91bmQgdG8gJXMgZHJpdmVyXG4iLCBnYWRnZXQtPm5hbWUpOworCWRldi0+c3RhdGUgPSBTVEFURV9VTkNPTk5FQ1RFRDsKKwlnZXRfZGV2IChkZXYpOworCXJldHVybiAwOworCitlbm9tZW06CisJZ2FkZ2V0ZnNfdW5iaW5kIChnYWRnZXQpOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZAorZ2FkZ2V0ZnNfZGlzY29ubmVjdCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgZGV2X2RhdGEJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7CisKKwlpZiAoZGV2LT5zdGF0ZSA9PSBTVEFURV9VTkNPTk5FQ1RFRCkgeworCQlEQkcgKGRldiwgImFscmVhZHkgdW5jb25uZWN0ZWRcbiIpOworCQlyZXR1cm47CisJfQorCWRldi0+c3RhdGUgPSBTVEFURV9VTkNPTk5FQ1RFRDsKKworCUlORk8gKGRldiwgImRpc2Nvbm5lY3RlZFxuIik7CisJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKwluZXh0X2V2ZW50IChkZXYsIEdBREdFVEZTX0RJU0NPTk5FQ1QpOworCWVwMF9yZWFkYWJsZSAoZGV2KTsKKwlzcGluX3VubG9jayAoJmRldi0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCitnYWRnZXRmc19zdXNwZW5kIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBkZXZfZGF0YQkJKmRldiA9IGdldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0KTsKKworCUlORk8gKGRldiwgInN1c3BlbmRlZCBmcm9tIHN0YXRlICVkXG4iLCBkZXYtPnN0YXRlKTsKKwlzcGluX2xvY2sgKCZkZXYtPmxvY2spOworCXN3aXRjaCAoZGV2LT5zdGF0ZSkgeworCWNhc2UgU1RBVEVfU0VUVVA6CQkvLyBWRVJZIG9kZC4uLiBob3N0IGRpZWQ/PworCWNhc2UgU1RBVEVfQ09OTkVDVEVEOgorCWNhc2UgU1RBVEVfVU5DT05ORUNURUQ6CisJCW5leHRfZXZlbnQgKGRldiwgR0FER0VURlNfU1VTUEVORCk7CisJCWVwMF9yZWFkYWJsZSAoZGV2KTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyIGdhZGdldGZzX2RyaXZlciA9IHsKKyNpZmRlZglISUdIU1BFRUQKKwkuc3BlZWQJCT0gVVNCX1NQRUVEX0hJR0gsCisjZWxzZQorCS5zcGVlZAkJPSBVU0JfU1BFRURfRlVMTCwKKyNlbmRpZgorCS5mdW5jdGlvbgk9IChjaGFyICopIGRyaXZlcl9kZXNjLAorCS5iaW5kCQk9IGdhZGdldGZzX2JpbmQsCisJLnVuYmluZAkJPSBnYWRnZXRmc191bmJpbmQsCisJLnNldHVwCQk9IGdhZGdldGZzX3NldHVwLAorCS5kaXNjb25uZWN0CT0gZ2FkZ2V0ZnNfZGlzY29ubmVjdCwKKwkuc3VzcGVuZAk9IGdhZGdldGZzX3N1c3BlbmQsCisKKwkuZHJpdmVyIAk9IHsKKwkJLm5hbWUJCT0gKGNoYXIgKikgc2hvcnRuYW1lLAorCQkvLyAuc2h1dGRvd24gPSAuLi4KKwkJLy8gLnN1c3BlbmQgPSAuLi4KKwkJLy8gLnJlc3VtZSA9IC4uLgorCX0sCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBnYWRnZXRmc19ub3Aoc3RydWN0IHVzYl9nYWRnZXQgKmFyZykgeyB9CisKK3N0YXRpYyBpbnQgZ2FkZ2V0ZnNfcHJvYmUgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJQ0hJUCA9IGdhZGdldC0+bmFtZTsKKwlyZXR1cm4gLUVJU05BTTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciBwcm9iZV9kcml2ZXIgPSB7CisJLnNwZWVkCQk9IFVTQl9TUEVFRF9ISUdILAorCS5iaW5kCQk9IGdhZGdldGZzX3Byb2JlLAorCS51bmJpbmQJCT0gZ2FkZ2V0ZnNfbm9wLAorCS5zZXR1cAkJPSAodm9pZCAqKWdhZGdldGZzX25vcCwKKwkuZGlzY29ubmVjdAk9IGdhZGdldGZzX25vcCwKKwkuZHJpdmVyIAk9IHsKKwkJLm5hbWUJCT0gIm5vcCIsCisJfSwKK307CisKKworLyogREVWSUNFIElOSVRJQUxJWkFUSU9OCisgKgorICogICAgIGZkID0gb3BlbiAoIi9kZXYvZ2FkZ2V0LyRDSElQIiwgT19SRFdSKQorICogICAgIHN0YXR1cyA9IHdyaXRlIChmZCwgZGVzY3JpcHRvcnMsIHNpemVvZiBkZXNjcmlwdG9ycykKKyAqCisgKiBUaGF0IHdyaXRlIGVzdGFibGlzaGVzIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbiwgc28gdGhlIGtlcm5lbCBjYW4KKyAqIGJpbmQgdG8gdGhlIGNvbnRyb2xsZXIgLi4uIGd1YXJhbnRlZWluZyBpdCBjYW4gaGFuZGxlIGVudW1lcmF0aW9uCisgKiBhdCBhbGwgbmVjZXNzYXJ5IHNwZWVkcy4gIERlc2NyaXB0b3Igb3JkZXIgaXM6CisgKgorICogLiBtZXNzYWdlIHRhZyAodTMyLCBob3N0IG9yZGVyKSAuLi4gZm9yIG5vdywgbXVzdCBiZSB6ZXJvOyBpdAorICoJd291bGQgY2hhbmdlIHRvIHN1cHBvcnQgZmVhdHVyZXMgbGlrZSBtdWx0aS1jb25maWcgZGV2aWNlcworICogLiBmdWxsL2xvdyBzcGVlZCBjb25maWcgLi4uIGFsbCB3VG90YWxMZW5ndGggYnl0ZXMgKHdpdGggaW50ZXJmYWNlLAorICoJY2xhc3MsIGFsdHNldHRpbmcsIGVuZHBvaW50LCBhbmQgb3RoZXIgZGVzY3JpcHRvcnMpCisgKiAuIGhpZ2ggc3BlZWQgY29uZmlnIC4uLiBhbGwgZGVzY3JpcHRvcnMsIGZvciBoaWdoIHNwZWVkIG9wZXJhdGlvbjsKKyAqIAl0aGlzIG9uZSdzIG9wdGlvbmFsIGV4Y2VwdCBmb3IgaGlnaC1zcGVlZCBoYXJkd2FyZQorICogLiBkZXZpY2UgZGVzY3JpcHRvcgorICoKKyAqIEVuZHBvaW50cyBhcmUgbm90IHlldCBlbmFibGVkLiBEcml2ZXJzIG1heSB3YW50IHRvIGltbWVkaWF0ZWx5CisgKiBpbml0aWFsaXplIHRoZW0sIHVzaW5nIHRoZSAvZGV2L2dhZGdldC9lcCogZmlsZXMgdGhhdCBhcmUgYXZhaWxhYmxlCisgKiBhcyBzb29uIGFzIHRoZSBrZXJuZWwgc2VlcyB0aGUgY29uZmlndXJhdGlvbiwgb3IgdGhleSBjYW4gd2FpdAorICogdW50aWwgZGV2aWNlIGNvbmZpZ3VyYXRpb24gYW5kIGludGVyZmFjZSBhbHRzZXR0aW5nIGNoYW5nZXMgY3JlYXRlCisgKiB0aGUgbmVlZCB0byBjb25maWd1cmUgKG9yIHVuY29uZmlndXJlKSB0aGVtLgorICoKKyAqIEFmdGVyIGluaXRpYWxpemF0aW9uLCB0aGUgZGV2aWNlIHN0YXlzIGFjdGl2ZSBmb3IgYXMgbG9uZyBhcyB0aGF0CisgKiAkQ0hJUCBmaWxlIGlzIG9wZW4uICBFdmVudHMgbWF5IHRoZW4gYmUgcmVhZCBmcm9tIHRoYXQgZGVzY3JpcHRvciwKKyAqIHN1Y2ggY29uZmlndXJhdGlvbiBub3RpZmljYXRpb25zLiAgTW9yZSBjb21wbGV4IGRyaXZlcnMgd2lsbCBoYW5kbGUKKyAqIHNvbWUgY29udHJvbCByZXF1ZXN0cyBpbiB1c2VyIHNwYWNlLgorICovCisKK3N0YXRpYyBpbnQgaXNfdmFsaWRfY29uZmlnIChzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yICpjb25maWcpCit7CisJcmV0dXJuIGNvbmZpZy0+YkRlc2NyaXB0b3JUeXBlID09IFVTQl9EVF9DT05GSUcKKwkJJiYgY29uZmlnLT5iTGVuZ3RoID09IFVTQl9EVF9DT05GSUdfU0laRQorCQkmJiBjb25maWctPmJDb25maWd1cmF0aW9uVmFsdWUgIT0gMAorCQkmJiAoY29uZmlnLT5ibUF0dHJpYnV0ZXMgJiBVU0JfQ09ORklHX0FUVF9PTkUpICE9IDAKKwkJJiYgKGNvbmZpZy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0NPTkZJR19BVFRfV0FLRVVQKSA9PSAwOworCS8qIEZJWE1FIGlmIGdhZGdldC0+aXNfb3RnLCBfbXVzdF8gaW5jbHVkZSBhbiBvdGcgZGVzY3JpcHRvciAqLworCS8qIEZJWE1FIGNoZWNrIGxlbmd0aHM6IHdhbGsgdG8gZW5kICovCit9CisKK3N0YXRpYyBzc2l6ZV90CitkZXZfY29uZmlnIChzdHJ1Y3QgZmlsZSAqZmQsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcHRyKQoreworCXN0cnVjdCBkZXZfZGF0YQkJKmRldiA9IGZkLT5wcml2YXRlX2RhdGE7CisJc3NpemVfdAkJCXZhbHVlID0gbGVuLCBsZW5ndGggPSBsZW47CisJdW5zaWduZWQJCXRvdGFsOworCXUzMgkJCXRhZzsKKwljaGFyCQkJKmtidWY7CisKKwlpZiAoZGV2LT5zdGF0ZSAhPSBTVEFURV9PUEVORUQpCisJCXJldHVybiAtRUVYSVNUOworCisJaWYgKGxlbiA8IChVU0JfRFRfQ09ORklHX1NJWkUgKyBVU0JfRFRfREVWSUNFX1NJWkUgKyA0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiB3ZSBtaWdodCBuZWVkIHRvIGNoYW5nZSBtZXNzYWdlIGZvcm1hdCBzb21lZGF5ICovCisJaWYgKGNvcHlfZnJvbV91c2VyICgmdGFnLCBidWYsIDQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAodGFnICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCWJ1ZiArPSA0OworCWxlbmd0aCAtPSA0OworCisJa2J1ZiA9IGttYWxsb2MgKGxlbmd0aCwgU0xBQl9LRVJORUwpOworCWlmICgha2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGNvcHlfZnJvbV91c2VyIChrYnVmLCBidWYsIGxlbmd0aCkpIHsKKwkJa2ZyZWUgKGtidWYpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlzcGluX2xvY2tfaXJxICgmZGV2LT5sb2NrKTsKKwl2YWx1ZSA9IC1FSU5WQUw7CisJaWYgKGRldi0+YnVmKQorCQlnb3RvIGZhaWw7CisJZGV2LT5idWYgPSBrYnVmOworCisJLyogZnVsbCBvciBsb3cgc3BlZWQgY29uZmlnICovCisJZGV2LT5jb25maWcgPSAodm9pZCAqKSBrYnVmOworCXRvdGFsID0gbGUxNl90b19jcHVwICgmZGV2LT5jb25maWctPndUb3RhbExlbmd0aCk7CisJaWYgKCFpc192YWxpZF9jb25maWcgKGRldi0+Y29uZmlnKSB8fCB0b3RhbCA+PSBsZW5ndGgpCisJCWdvdG8gZmFpbDsKKwlrYnVmICs9IHRvdGFsOworCWxlbmd0aCAtPSB0b3RhbDsKKworCS8qIG9wdGlvbmFsIGhpZ2ggc3BlZWQgY29uZmlnICovCisJaWYgKGtidWYgWzFdID09IFVTQl9EVF9DT05GSUcpIHsKKwkJZGV2LT5oc19jb25maWcgPSAodm9pZCAqKSBrYnVmOworCQl0b3RhbCA9IGxlMTZfdG9fY3B1cCAoJmRldi0+aHNfY29uZmlnLT53VG90YWxMZW5ndGgpOworCQlpZiAoIWlzX3ZhbGlkX2NvbmZpZyAoZGV2LT5oc19jb25maWcpIHx8IHRvdGFsID49IGxlbmd0aCkKKwkJCWdvdG8gZmFpbDsKKwkJa2J1ZiArPSB0b3RhbDsKKwkJbGVuZ3RoIC09IHRvdGFsOworCX0KKworCS8qIGNvdWxkIHN1cHBvcnQgbXVsdGlwbGUgY29uZmlncywgdXNpbmcgYW5vdGhlciBlbmNvZGluZyEgKi8KKworCS8qIGRldmljZSBkZXNjcmlwdG9yICh0d2Vha2VkIGZvciBwYXJhbm9pYSkgKi8KKwlpZiAobGVuZ3RoICE9IFVTQl9EVF9ERVZJQ0VfU0laRSkKKwkJZ290byBmYWlsOworCWRldi0+ZGV2ID0gKHZvaWQgKilrYnVmOworCWlmIChkZXYtPmRldi0+Ykxlbmd0aCAhPSBVU0JfRFRfREVWSUNFX1NJWkUKKwkJCXx8IGRldi0+ZGV2LT5iRGVzY3JpcHRvclR5cGUgIT0gVVNCX0RUX0RFVklDRQorCQkJfHwgZGV2LT5kZXYtPmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKQorCQlnb3RvIGZhaWw7CisJZGV2LT5kZXYtPmJOdW1Db25maWd1cmF0aW9ucyA9IDE7CisJZGV2LT5kZXYtPmJjZFVTQiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMCk7CisKKwkvKiB0cmlnZ2VycyBnYWRnZXRmc19iaW5kKCk7IHRoZW4gd2UgY2FuIGVudW1lcmF0ZS4gKi8KKwlzcGluX3VubG9ja19pcnEgKCZkZXYtPmxvY2spOworCXZhbHVlID0gdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIgKCZnYWRnZXRmc19kcml2ZXIpOworCWlmICh2YWx1ZSAhPSAwKSB7CisJCWtmcmVlIChkZXYtPmJ1Zik7CisJCWRldi0+YnVmID0gTlVMTDsKKwl9IGVsc2UgeworCQkvKiBhdCB0aGlzIHBvaW50ICJnb29kIiBoYXJkd2FyZSBoYXMgZm9yIHRoZSBmaXJzdCB0aW1lCisJCSAqIGxldCB0aGUgVVNCIHRoZSBob3N0IHNlZSB1cy4gIGFsdGVybmF0aXZlbHksIGlmIHVzZXJzCisJCSAqIHVucGx1Zy9yZXBsdWcgdGhhdCB3aWxsIGNsZWFyIGFsbCB0aGUgZXJyb3Igc3RhdGUuCisJCSAqCisJCSAqIG5vdGU6ICBldmVyeXRoaW5nIHJ1bm5pbmcgYmVmb3JlIGhlcmUgd2FzIGd1YXJhbnRlZWQKKwkJICogdG8gY2hva2UgZHJpdmVyIG1vZGVsIHN0eWxlIGRpYWdub3N0aWNzLiAgZnJvbSBoZXJlCisJCSAqIG9uLCB0aGV5IGNhbiB3b3JrIC4uLiBleGNlcHQgaW4gY2xlYW51cCBwYXRocyB0aGF0CisJCSAqIGtpY2sgaW4gYWZ0ZXIgdGhlIGVwMCBkZXNjcmlwdG9yIGlzIGNsb3NlZC4KKwkJICovCisJCWZkLT5mX29wID0gJmVwMF9pb19vcGVyYXRpb25zOworCQl2YWx1ZSA9IGxlbjsKKwl9CisJcmV0dXJuIHZhbHVlOworCitmYWlsOgorCXNwaW5fdW5sb2NrX2lycSAoJmRldi0+bG9jayk7CisJcHJfZGVidWcgKCIlczogJXMgZmFpbCAlWmQsICVwXG4iLCBzaG9ydG5hbWUsIF9fRlVOQ1RJT05fXywgdmFsdWUsIGRldik7CisJa2ZyZWUgKGRldi0+YnVmKTsKKwlkZXYtPmJ1ZiA9IE5VTEw7CisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgaW50CitkZXZfb3BlbiAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKQoreworCXN0cnVjdCBkZXZfZGF0YQkJKmRldiA9IGlub2RlLT51LmdlbmVyaWNfaXA7CisJaW50CQkJdmFsdWUgPSAtRUJVU1k7CisKKwlpZiAoZGV2LT5zdGF0ZSA9PSBTVEFURV9ERVZfRElTQUJMRUQpIHsKKwkJZGV2LT5ldl9uZXh0ID0gMDsKKwkJZGV2LT5zdGF0ZSA9IFNUQVRFX09QRU5FRDsKKwkJZmQtPnByaXZhdGVfZGF0YSA9IGRldjsKKwkJZ2V0X2RldiAoZGV2KTsKKwkJdmFsdWUgPSAwOworCX0KKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRldl9pbml0X29wZXJhdGlvbnMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLmxsc2VlayA9CW5vX2xsc2VlaywKKworCS5vcGVuID0JCWRldl9vcGVuLAorCS53cml0ZSA9CWRldl9jb25maWcsCisJLmZhc3luYyA9CWVwMF9mYXN5bmMsCisJLmlvY3RsID0JZGV2X2lvY3RsLAorCS5yZWxlYXNlID0JZGV2X3JlbGVhc2UsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBGSUxFU1lTVEVNIEFORCBTVVBFUkJMT0NLIE9QRVJBVElPTlMKKyAqCisgKiBNb3VudGluZyB0aGUgZmlsZXN5c3RlbSBjcmVhdGVzIGEgY29udHJvbGxlciBmaWxlLCB1c2VkIGZpcnN0IGZvcgorICogZGV2aWNlIGNvbmZpZ3VyYXRpb24gdGhlbiBsYXRlciBmb3IgZXZlbnQgbW9uaXRvcmluZy4KKyAqLworCisKKy8qIEZJWE1FIFBBTSBldGMgY291bGQgc2V0IHRoaXMgc2VjdXJpdHkgcG9saWN5IHdpdGhvdXQgbW91bnQgb3B0aW9ucworICogaWYgZXBmaWxlcyBpbmhlcml0ZWQgb3duZXJzaGlwIGFuZCBwZXJtaXNzb25zIGZyb20gZXAwIC4uLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBkZWZhdWx0X3VpZDsKK3N0YXRpYyB1bnNpZ25lZCBkZWZhdWx0X2dpZDsKK3N0YXRpYyB1bnNpZ25lZCBkZWZhdWx0X3Blcm0gPSBTX0lSVVNSIHwgU19JV1VTUjsKKworbW9kdWxlX3BhcmFtIChkZWZhdWx0X3VpZCwgdWludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0gKGRlZmF1bHRfZ2lkLCB1aW50LCAwNjQ0KTsKK21vZHVsZV9wYXJhbSAoZGVmYXVsdF9wZXJtLCB1aW50LCAwNjQ0KTsKKworCitzdGF0aWMgc3RydWN0IGlub2RlICoKK2dhZGdldGZzX21ha2VfaW5vZGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCXZvaWQgKmRhdGEsIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMsCisJCWludCBtb2RlKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuZXdfaW5vZGUgKHNiKTsKKworCWlmIChpbm9kZSkgeworCQlpbm9kZS0+aV9tb2RlID0gbW9kZTsKKwkJaW5vZGUtPmlfdWlkID0gZGVmYXVsdF91aWQ7CisJCWlub2RlLT5pX2dpZCA9IGRlZmF1bHRfZ2lkOworCQlpbm9kZS0+aV9ibGtzaXplID0gUEFHRV9DQUNIRV9TSVpFOworCQlpbm9kZS0+aV9ibG9ja3MgPSAwOworCQlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUKKwkJCQk9IENVUlJFTlRfVElNRTsKKwkJaW5vZGUtPnUuZ2VuZXJpY19pcCA9IGRhdGE7CisJCWlub2RlLT5pX2ZvcCA9IGZvcHM7CisJfQorCXJldHVybiBpbm9kZTsKK30KKworLyogY3JlYXRlcyBpbiBmcyByb290IGRpcmVjdG9yeSwgc28gbm9uLXJlbmFtYWJsZSBhbmQgbm9uLWxpbmthYmxlLgorICogc28gaW5vZGUgYW5kIGRlbnRyeSBhcmUgcGFpcmVkLCB1bnRpbCBkZXZpY2UgcmVjb25maWcuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKgorZ2FkZ2V0ZnNfY3JlYXRlX2ZpbGUgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgY29uc3QgKm5hbWUsCisJCXZvaWQgKmRhdGEsIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMsCisJCXN0cnVjdCBkZW50cnkgKipkZW50cnlfcCkKK3sKKwlzdHJ1Y3QgZGVudHJ5CSpkZW50cnk7CisJc3RydWN0IGlub2RlCSppbm9kZTsKKworCWRlbnRyeSA9IGRfYWxsb2NfbmFtZShzYi0+c19yb290LCBuYW1lKTsKKwlpZiAoIWRlbnRyeSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpbm9kZSA9IGdhZGdldGZzX21ha2VfaW5vZGUgKHNiLCBkYXRhLCBmb3BzLAorCQkJU19JRlJFRyB8IChkZWZhdWx0X3Blcm0gJiBTX0lSV1hVR08pKTsKKwlpZiAoIWlub2RlKSB7CisJCWRwdXQoZGVudHJ5KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWRfYWRkIChkZW50cnksIGlub2RlKTsKKwkqZGVudHJ5X3AgPSBkZW50cnk7CisJcmV0dXJuIGlub2RlOworfQorCitzdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZ2FkZ2V0X2ZzX29wZXJhdGlvbnMgPSB7CisJLnN0YXRmcyA9CXNpbXBsZV9zdGF0ZnMsCisJLmRyb3BfaW5vZGUgPQlnZW5lcmljX2RlbGV0ZV9pbm9kZSwKK307CisKK3N0YXRpYyBpbnQKK2dhZGdldGZzX2ZpbGxfc3VwZXIgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKm9wdHMsIGludCBzaWxlbnQpCit7CisJc3RydWN0IGlub2RlCSppbm9kZTsKKwlzdHJ1Y3QgZGVudHJ5CSpkOworCXN0cnVjdCBkZXZfZGF0YQkqZGV2OworCisJaWYgKHRoZV9kZXZpY2UpCisJCXJldHVybiAtRVNSQ0g7CisKKwkvKiBmYWtlIHByb2JlIHRvIGRldGVybWluZSAkQ0hJUCAqLworCSh2b2lkKSB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlciAoJnByb2JlX2RyaXZlcik7CisJaWYgKCFDSElQKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIHN1cGVyYmxvY2sgKi8KKwlzYi0+c19ibG9ja3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CisJc2ItPnNfYmxvY2tzaXplX2JpdHMgPSBQQUdFX0NBQ0hFX1NISUZUOworCXNiLT5zX21hZ2ljID0gR0FER0VURlNfTUFHSUM7CisJc2ItPnNfb3AgPSAmZ2FkZ2V0X2ZzX29wZXJhdGlvbnM7CisJc2ItPnNfdGltZV9ncmFuID0gMTsKKworCS8qIHJvb3QgaW5vZGUgKi8KKwlpbm9kZSA9IGdhZGdldGZzX21ha2VfaW5vZGUgKHNiLAorCQkJTlVMTCwgJnNpbXBsZV9kaXJfb3BlcmF0aW9ucywKKwkJCVNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTyk7CisJaWYgKCFpbm9kZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJaW5vZGUtPmlfb3AgPSAmc2ltcGxlX2Rpcl9pbm9kZV9vcGVyYXRpb25zOworCWlmICghKGQgPSBkX2FsbG9jX3Jvb3QgKGlub2RlKSkpIHsKKwkJaXB1dCAoaW5vZGUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc2ItPnNfcm9vdCA9IGQ7CisKKwkvKiB0aGUgZXAwIGZpbGUgaXMgbmFtZWQgYWZ0ZXIgdGhlIGNvbnRyb2xsZXIgd2UgZXhwZWN0OworCSAqIHVzZXIgbW9kZSBjb2RlIGNhbiB1c2UgaXQgZm9yIHNhbml0eSBjaGVja3MsIGxpa2Ugd2UgZG8uCisJICovCisJZGV2ID0gZGV2X25ldyAoKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXYtPnNiID0gc2I7CisJaWYgKCEoaW5vZGUgPSBnYWRnZXRmc19jcmVhdGVfZmlsZSAoc2IsIENISVAsCisJCQkJZGV2LCAmZGV2X2luaXRfb3BlcmF0aW9ucywKKwkJCQkmZGV2LT5kZW50cnkpKSkgeworCQlwdXRfZGV2KGRldik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIG90aGVyIGVuZHBvaW50IGZpbGVzIGFyZSBhdmFpbGFibGUgYWZ0ZXIgaGFyZHdhcmUgc2V0dXAsCisJICogZnJvbSBiaW5kaW5nIHRvIGEgY29udHJvbGxlci4KKwkgKi8KKwl0aGVfZGV2aWNlID0gZGV2OworCXJldHVybiAwOworfQorCisvKiAibW91bnQgLXQgZ2FkZ2V0ZnMgcGF0aCAvZGV2L2dhZGdldCIgZW5kcyB1cCBoZXJlICovCitzdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICoKK2dhZGdldGZzX2dldF9zYiAoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnQsIGludCBmbGFncywKKwkJY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqb3B0cykKK3sKKwlyZXR1cm4gZ2V0X3NiX3NpbmdsZSAodCwgZmxhZ3MsIG9wdHMsIGdhZGdldGZzX2ZpbGxfc3VwZXIpOworfQorCitzdGF0aWMgdm9pZAorZ2FkZ2V0ZnNfa2lsbF9zYiAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlraWxsX2xpdHRlcl9zdXBlciAoc2IpOworCWlmICh0aGVfZGV2aWNlKSB7CisJCXB1dF9kZXYgKHRoZV9kZXZpY2UpOworCQl0aGVfZGV2aWNlID0gTlVMTDsKKwl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBnYWRnZXRmc190eXBlID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJPSBzaG9ydG5hbWUsCisJLmdldF9zYgkJPSBnYWRnZXRmc19nZXRfc2IsCisJLmtpbGxfc2IJPSBnYWRnZXRmc19raWxsX3NiLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2luaXQgaW5pdCAodm9pZCkKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSAoJmdhZGdldGZzX3R5cGUpOworCWlmIChzdGF0dXMgPT0gMCkKKwkJcHJfaW5mbyAoIiVzOiAlcywgdmVyc2lvbiAiIERSSVZFUl9WRVJTSU9OICJcbiIsCisJCQlzaG9ydG5hbWUsIGRyaXZlcl9kZXNjKTsKKwlyZXR1cm4gc3RhdHVzOworfQorbW9kdWxlX2luaXQgKGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cCAodm9pZCkKK3sKKwlwcl9kZWJ1ZyAoInVucmVnaXN0ZXIgJXNcbiIsIHNob3J0bmFtZSk7CisJdW5yZWdpc3Rlcl9maWxlc3lzdGVtICgmZ2FkZ2V0ZnNfdHlwZSk7Cit9Cittb2R1bGVfZXhpdCAoY2xlYW51cCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRlZjlmNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCkBAIC0wLDAgKzEsMjE2NyBAQAorLyoKKyAqIGxpbnV4L2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCisgKiBTaGFycCBMSDdBNDB4IG9uLWNoaXAgZnVsbCBzcGVlZCBVU0IgZGV2aWNlIGNvbnRyb2xsZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IE1pa2tvIExhaHRlZW5tYWtpLCBOb3JkaWMgSUQKKyAqIENvcHlyaWdodCAoQykgMjAwNCBCbyBIZW5yaWtzZW4sIE5vcmRpYyBJRAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgImxoN2E0MHhfdWRjLmgiCisKKy8vI2RlZmluZSBERUJVRyBwcmludGsKKy8vI2RlZmluZSBERUJVR19FUDAgcHJpbnRrCisvLyNkZWZpbmUgREVCVUdfU0VUVVAgcHJpbnRrCisKKyNpZm5kZWYgREVCVUdfRVAwCisjIGRlZmluZSBERUJVR19FUDAoZm10LGFyZ3MuLi4pCisjZW5kaWYKKyNpZm5kZWYgREVCVUdfU0VUVVAKKyMgZGVmaW5lIERFQlVHX1NFVFVQKGZtdCxhcmdzLi4uKQorI2VuZGlmCisjaWZuZGVmIERFQlVHCisjIGRlZmluZSBOT19TVEFURVMKKyMgZGVmaW5lIERFQlVHKGZtdCxhcmdzLi4uKQorI2VuZGlmCisKKyNkZWZpbmUJRFJJVkVSX0RFU0MJCQkiTEg3QTQweCBVU0IgRGV2aWNlIENvbnRyb2xsZXIiCisjZGVmaW5lCURSSVZFUl9WRVJTSU9OCQlfX0RBVEVfXworCisjaWZuZGVmIF9CSVQJCQkvKiBGSVhNRSAtIHdoYXQgaGFwcGVuZGVkIHRvIF9CSVQgaW4gMi42LjdiazE4PyAqLworI2RlZmluZSBfQklUKHgpICgxPDwoeCkpCisjZW5kaWYKKworc3RydWN0IGxoN2E0MHhfdWRjICp0aGVfY29udHJvbGxlcjsKKworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWVbXSA9ICJsaDdhNDB4X3VkYyI7CitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfZGVzY1tdID0gRFJJVkVSX0RFU0M7CitzdGF0aWMgY29uc3QgY2hhciBlcDBuYW1lW10gPSAiZXAwLWNvbnRyb2wiOworCisvKgorICBMb2NhbCBkZWZpbmludGlvbnMuCisqLworCisjaWZuZGVmIE5PX1NUQVRFUworc3RhdGljIGNoYXIgKnN0YXRlX25hbWVzW10gPSB7CisJIldBSVRfRk9SX1NFVFVQIiwKKwkiREFUQV9TVEFURV9YTUlUIiwKKwkiREFUQV9TVEFURV9ORUVEX1pMUCIsCisJIldBSVRfRk9SX09VVF9TVEFUVVMiLAorCSJEQVRBX1NUQVRFX1JFQ1YiCit9OworI2VuZGlmCisKKy8qCisgIExvY2FsIGRlY2xhcmF0aW9ucy4KKyovCitzdGF0aWMgaW50IGxoN2E0MHhfZXBfZW5hYmxlKHN0cnVjdCB1c2JfZXAgKmVwLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKik7CitzdGF0aWMgaW50IGxoN2E0MHhfZXBfZGlzYWJsZShzdHJ1Y3QgdXNiX2VwICplcCk7CitzdGF0aWMgc3RydWN0IHVzYl9yZXF1ZXN0ICpsaDdhNDB4X2FsbG9jX3JlcXVlc3Qoc3RydWN0IHVzYl9lcCAqZXAsIGludCk7CitzdGF0aWMgdm9pZCBsaDdhNDB4X2ZyZWVfcmVxdWVzdChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICopOworc3RhdGljIHZvaWQgKmxoN2E0MHhfYWxsb2NfYnVmZmVyKHN0cnVjdCB1c2JfZXAgKmVwLCB1bnNpZ25lZCwgZG1hX2FkZHJfdCAqLAorCQkJCSAgaW50KTsKK3N0YXRpYyB2b2lkIGxoN2E0MHhfZnJlZV9idWZmZXIoc3RydWN0IHVzYl9lcCAqZXAsIHZvaWQgKiwgZG1hX2FkZHJfdCwKKwkJCQl1bnNpZ25lZCk7CitzdGF0aWMgaW50IGxoN2E0MHhfcXVldWUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqLCBpbnQpOworc3RhdGljIGludCBsaDdhNDB4X2RlcXVldWUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqKTsKK3N0YXRpYyBpbnQgbGg3YTQweF9zZXRfaGFsdChzdHJ1Y3QgdXNiX2VwICplcCwgaW50KTsKK3N0YXRpYyBpbnQgbGg3YTQweF9maWZvX3N0YXR1cyhzdHJ1Y3QgdXNiX2VwICplcCk7CitzdGF0aWMgaW50IGxoN2E0MHhfZmlmb19zdGF0dXMoc3RydWN0IHVzYl9lcCAqZXApOworc3RhdGljIHZvaWQgbGg3YTQweF9maWZvX2ZsdXNoKHN0cnVjdCB1c2JfZXAgKmVwKTsKK3N0YXRpYyB2b2lkIGxoN2E0MHhfZXAwX2tpY2soc3RydWN0IGxoN2E0MHhfdWRjICpkZXYsIHN0cnVjdCBsaDdhNDB4X2VwICplcCk7CitzdGF0aWMgdm9pZCBsaDdhNDB4X2hhbmRsZV9lcDAoc3RydWN0IGxoN2E0MHhfdWRjICpkZXYsIHUzMiBpbnRyKTsKKworc3RhdGljIHZvaWQgZG9uZShzdHJ1Y3QgbGg3YTQweF9lcCAqZXAsIHN0cnVjdCBsaDdhNDB4X3JlcXVlc3QgKnJlcSwKKwkJIGludCBzdGF0dXMpOworc3RhdGljIHZvaWQgcGlvX2lycV9lbmFibGUoaW50IGJFbmRwb2ludEFkZHJlc3MpOworc3RhdGljIHZvaWQgcGlvX2lycV9kaXNhYmxlKGludCBiRW5kcG9pbnRBZGRyZXNzKTsKK3N0YXRpYyB2b2lkIHN0b3BfYWN0aXZpdHkoc3RydWN0IGxoN2E0MHhfdWRjICpkZXYsCisJCQkgIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKTsKK3N0YXRpYyB2b2lkIGZsdXNoKHN0cnVjdCBsaDdhNDB4X2VwICplcCk7CitzdGF0aWMgdm9pZCB1ZGNfZW5hYmxlKHN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2KTsKK3N0YXRpYyB2b2lkIHVkY19zZXRfYWRkcmVzcyhzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiwgdW5zaWduZWQgY2hhciBhZGRyZXNzKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZXBfb3BzIGxoN2E0MHhfZXBfb3BzID0geworCS5lbmFibGUgPSBsaDdhNDB4X2VwX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGxoN2E0MHhfZXBfZGlzYWJsZSwKKworCS5hbGxvY19yZXF1ZXN0ID0gbGg3YTQweF9hbGxvY19yZXF1ZXN0LAorCS5mcmVlX3JlcXVlc3QgPSBsaDdhNDB4X2ZyZWVfcmVxdWVzdCwKKworCS5hbGxvY19idWZmZXIgPSBsaDdhNDB4X2FsbG9jX2J1ZmZlciwKKwkuZnJlZV9idWZmZXIgPSBsaDdhNDB4X2ZyZWVfYnVmZmVyLAorCisJLnF1ZXVlID0gbGg3YTQweF9xdWV1ZSwKKwkuZGVxdWV1ZSA9IGxoN2E0MHhfZGVxdWV1ZSwKKworCS5zZXRfaGFsdCA9IGxoN2E0MHhfc2V0X2hhbHQsCisJLmZpZm9fc3RhdHVzID0gbGg3YTQweF9maWZvX3N0YXR1cywKKwkuZmlmb19mbHVzaCA9IGxoN2E0MHhfZmlmb19mbHVzaCwKK307CisKKy8qIElubGluZSBjb2RlICovCisKK3N0YXRpYyBfX2lubGluZV9fIGludCB3cml0ZV9wYWNrZXQoc3RydWN0IGxoN2E0MHhfZXAgKmVwLAorCQkJCSAgIHN0cnVjdCBsaDdhNDB4X3JlcXVlc3QgKnJlcSwgaW50IG1heCkKK3sKKwl1OCAqYnVmOworCWludCBsZW5ndGgsIGNvdW50OworCXZvbGF0aWxlIHUzMiAqZmlmbyA9ICh2b2xhdGlsZSB1MzIgKillcC0+ZmlmbzsKKworCWJ1ZiA9IHJlcS0+cmVxLmJ1ZiArIHJlcS0+cmVxLmFjdHVhbDsKKwlwcmVmZXRjaChidWYpOworCisJbGVuZ3RoID0gcmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsOworCWxlbmd0aCA9IG1pbihsZW5ndGgsIG1heCk7CisJcmVxLT5yZXEuYWN0dWFsICs9IGxlbmd0aDsKKworCURFQlVHKCJXcml0ZSAlZCAobWF4ICVkKSwgZmlmbyAlcFxuIiwgbGVuZ3RoLCBtYXgsIGZpZm8pOworCisJY291bnQgPSBsZW5ndGg7CisJd2hpbGUgKGNvdW50LS0pIHsKKwkJKmZpZm8gPSAqYnVmKys7CisJfQorCisJcmV0dXJuIGxlbmd0aDsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCB1c2Jfc2V0X2luZGV4KHUzMiBlcCkKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKWlvX3AydihVU0JfSU5ERVgpID0gZXA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHUzMiB1c2JfcmVhZCh1MzIgcG9ydCkKK3sKKwlyZXR1cm4gKih2b2xhdGlsZSB1MzIgKilpb19wMnYocG9ydCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgdXNiX3dyaXRlKHUzMiB2YWwsIHUzMiBwb3J0KQoreworCSoodm9sYXRpbGUgdTMyICopaW9fcDJ2KHBvcnQpID0gdmFsOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHVzYl9zZXQodTMyIHZhbCwgdTMyIHBvcnQpCit7CisJdm9sYXRpbGUgdTMyICppb3BvcnQgPSAodm9sYXRpbGUgdTMyICopaW9fcDJ2KHBvcnQpOworCXUzMiBhZnRlciA9ICgqaW9wb3J0KSB8IHZhbDsKKwkqaW9wb3J0ID0gYWZ0ZXI7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgdXNiX2NsZWFyKHUzMiB2YWwsIHUzMiBwb3J0KQoreworCXZvbGF0aWxlIHUzMiAqaW9wb3J0ID0gKHZvbGF0aWxlIHUzMiAqKWlvX3Aydihwb3J0KTsKKwl1MzIgYWZ0ZXIgPSAoKmlvcG9ydCkgJiB+dmFsOworCSppb3BvcnQgPSBhZnRlcjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBHUElPX1BPUlRDX0RSIAkoMHg4MDAwMEUwOCkKKyNkZWZpbmUgR1BJT19QT1JUQ19ERFIgCSgweDgwMDAwRTE4KQorI2RlZmluZSBHUElPX1BPUlRDX1BEUiAJKDB4ODAwMDBFNzApCisKKy8qIGdldCBwb3J0IEMgcGluIGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgZ2V0X3BvcnRjX3BkcihiaXQpIAkJKCh1c2JfcmVhZChHUElPX1BPUlRDX1BEUikgJiBfQklUKGJpdCkpICE9IDApCisvKiBnZXQgcG9ydCBDIGRhdGEgZGlyZWN0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIGdldF9wb3J0Y19kZHIoYml0KSAJCSgodXNiX3JlYWQoR1BJT19QT1JUQ19ERFIpICYgX0JJVChiaXQpKSAhPSAwKQorLyogc2V0IHBvcnQgQyBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIHNldF9wb3J0Y19kcihiaXQsIHZhbCkgCSh2YWwgPyB1c2Jfc2V0KF9CSVQoYml0KSwgR1BJT19QT1JUQ19EUikgOiB1c2JfY2xlYXIoX0JJVChiaXQpLCBHUElPX1BPUlRDX0RSKSkKKy8qIHNldCBwb3J0IEMgZGF0YSBkaXJlY3Rpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgc2V0X3BvcnRjX2RkcihiaXQsIHZhbCkgKHZhbCA/IHVzYl9zZXQoX0JJVChiaXQpLCBHUElPX1BPUlRDX0REUikgOiB1c2JfY2xlYXIoX0JJVChiaXQpLCBHUElPX1BPUlRDX0REUikpCisKKy8qCisgKiBMUEQ3QTQwNCBHUElPJ3M6CisgKiBQb3J0IEMgYml0IDEgPSBVU0IgUG9ydCAxIFBvd2VyIEVuYWJsZQorICogUG9ydCBDIGJpdCAyID0gVVNCIFBvcnQgMSBEYXRhIENhcnJpZXIgRGV0ZWN0CisgKi8KKyNkZWZpbmUgaXNfdXNiX2Nvbm5lY3RlZCgpIAkJZ2V0X3BvcnRjX3BkcigyKQorCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMKKworc3RhdGljIGNvbnN0IGNoYXIgcHJvY19ub2RlX25hbWVbXSA9ICJkcml2ZXIvdWRjIjsKKworc3RhdGljIGludAordWRjX3Byb2NfcmVhZChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LAorCSAgICAgIGludCAqZW9mLCB2b2lkICpfZGV2KQoreworCWNoYXIgKmJ1ZiA9IHBhZ2U7CisJc3RydWN0IGxoN2E0MHhfdWRjICpkZXYgPSBfZGV2OworCWNoYXIgKm5leHQgPSBidWY7CisJdW5zaWduZWQgc2l6ZSA9IGNvdW50OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHQ7CisKKwlpZiAob2ZmICE9IDApCisJCXJldHVybiAwOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJLyogYmFzaWMgZGV2aWNlIHN0YXR1cyAqLworCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKKwkJICAgICAgRFJJVkVSX0RFU0MgIlxuIgorCQkgICAgICAiJXMgdmVyc2lvbjogJXNcbiIKKwkJICAgICAgIkdhZGdldCBkcml2ZXI6ICVzXG4iCisJCSAgICAgICJIb3N0OiAlc1xuXG4iLAorCQkgICAgICBkcml2ZXJfbmFtZSwgRFJJVkVSX1ZFUlNJT04sCisJCSAgICAgIGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPmRyaXZlci5uYW1lIDogIihub25lKSIsCisJCSAgICAgIGlzX3VzYl9jb25uZWN0ZWQoKT8gImZ1bGwgc3BlZWQiIDogImRpc2Nvbm5lY3RlZCIpOworCXNpemUgLT0gdDsKKwluZXh0ICs9IHQ7CisKKwl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCisJCSAgICAgICJHUElPOlxuIgorCQkgICAgICAiIFBvcnQgQyBiaXQgMTogJWQsIGRpciAlZFxuIgorCQkgICAgICAiIFBvcnQgQyBiaXQgMjogJWQsIGRpciAlZFxuXG4iLAorCQkgICAgICBnZXRfcG9ydGNfcGRyKDEpLCBnZXRfcG9ydGNfZGRyKDEpLAorCQkgICAgICBnZXRfcG9ydGNfcGRyKDIpLCBnZXRfcG9ydGNfZGRyKDIpCisJICAgICk7CisJc2l6ZSAtPSB0OworCW5leHQgKz0gdDsKKworCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKKwkJICAgICAgIkRDUCBwdWxsdXA6ICVkXG5cbiIsCisJCSAgICAgICh1c2JfcmVhZChVU0JfUE0pICYgUE1fVVNCX0RDUCkgIT0gMCk7CisJc2l6ZSAtPSB0OworCW5leHQgKz0gdDsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkqZW9mID0gMTsKKwlyZXR1cm4gY291bnQgLSBzaXplOworfQorCisjZGVmaW5lIGNyZWF0ZV9wcm9jX2ZpbGVzKCkgCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkocHJvY19ub2RlX25hbWUsIDAsIE5VTEwsIHVkY19wcm9jX3JlYWQsIGRldikKKyNkZWZpbmUgcmVtb3ZlX3Byb2NfZmlsZXMoKSAJcmVtb3ZlX3Byb2NfZW50cnkocHJvY19ub2RlX25hbWUsIE5VTEwpCisKKyNlbHNlCS8qICFDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyAqLworCisjZGVmaW5lIGNyZWF0ZV9wcm9jX2ZpbGVzKCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIHJlbW92ZV9wcm9jX2ZpbGVzKCkgZG8ge30gd2hpbGUgKDApCisKKyNlbmRpZgkvKiBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyAqLworCisvKgorICogCXVkY19kaXNhYmxlIC0gZGlzYWJsZSBVU0IgZGV2aWNlIGNvbnRyb2xsZXIKKyAqLworc3RhdGljIHZvaWQgdWRjX2Rpc2FibGUoc3RydWN0IGxoN2E0MHhfdWRjICpkZXYpCit7CisJREVCVUcoIiVzLCAlcFxuIiwgX19GVU5DVElPTl9fLCBkZXYpOworCisJdWRjX3NldF9hZGRyZXNzKGRldiwgMCk7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwl1c2Jfd3JpdGUoMCwgVVNCX0lOX0lOVF9FTik7CisJdXNiX3dyaXRlKDAsIFVTQl9PVVRfSU5UX0VOKTsKKwl1c2Jfd3JpdGUoMCwgVVNCX0lOVF9FTik7CisKKwkvKiBEaXNhYmxlIHRoZSBVU0IgKi8KKwl1c2Jfd3JpdGUoMCwgVVNCX1BNKTsKKworI2lmZGVmIENPTkZJR19BUkNIX0xIN0E0MDQKKwkvKiBEaXNhYmxlIFVTQiBwb3dlciAqLworCXNldF9wb3J0Y19kcigxLCAwKTsKKyNlbmRpZgorCisJLyogaWYgaGFyZHdhcmUgc3VwcG9ydHMgaXQsIGRpc2Nvbm5lY3QgZnJvbSB1c2IgKi8KKwkvKiBtYWtlX3VzYl9kaXNhcHBlYXIoKTsgKi8KKworCWRldi0+ZXAwc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwlkZXYtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCWRldi0+dXNiX2FkZHJlc3MgPSAwOworfQorCisvKgorICogCXVkY19yZWluaXQgLSBpbml0aWFsaXplIHNvZnR3YXJlIHN0YXRlCisgKi8KK3N0YXRpYyB2b2lkIHVkY19yZWluaXQoc3RydWN0IGxoN2E0MHhfdWRjICpkZXYpCit7CisJdTMyIGk7CisKKwlERUJVRygiJXMsICVwXG4iLCBfX0ZVTkNUSU9OX18sIGRldik7CisKKwkvKiBkZXZpY2UvZXAwIHJlY29yZHMgaW5pdCAqLworCUlOSVRfTElTVF9IRUFEKCZkZXYtPmdhZGdldC5lcF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5nYWRnZXQuZXAwLT5lcF9saXN0KTsKKwlkZXYtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisKKwkvKiBiYXNpYyBlbmRwb2ludCByZWNvcmRzIGluaXQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVURDX01BWF9FTkRQT0lOVFM7IGkrKykgeworCQlzdHJ1Y3QgbGg3YTQweF9lcCAqZXAgPSAmZGV2LT5lcFtpXTsKKworCQlpZiAoaSAhPSAwKQorCQkJbGlzdF9hZGRfdGFpbCgmZXAtPmVwLmVwX2xpc3QsICZkZXYtPmdhZGdldC5lcF9saXN0KTsKKworCQllcC0+ZGVzYyA9IDA7CisJCWVwLT5zdG9wcGVkID0gMDsKKwkJSU5JVF9MSVNUX0hFQUQoJmVwLT5xdWV1ZSk7CisJCWVwLT5waW9faXJxcyA9IDA7CisJfQorCisJLyogdGhlIHJlc3Qgd2FzIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQsIGFuZCBpcyByZWFkLW9ubHkgKi8KK30KKworI2RlZmluZSBCWVRFUzJNQVhQKHgpCSh4IC8gOCkKKyNkZWZpbmUgTUFYUDJCWVRFUyh4KQkoeCAqIDgpCisKKy8qIHVudGlsIGl0J3MgZW5hYmxlZCwgdGhpcyBVREMgc2hvdWxkIGJlIGNvbXBsZXRlbHkgaW52aXNpYmxlCisgKiB0byBhbnkgVVNCIGhvc3QuCisgKi8KK3N0YXRpYyB2b2lkIHVkY19lbmFibGUoc3RydWN0IGxoN2E0MHhfdWRjICpkZXYpCit7CisJaW50IGVwOworCisJREVCVUcoIiVzLCAlcFxuIiwgX19GVU5DVElPTl9fLCBkZXYpOworCisJZGV2LT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKworI2lmZGVmIENPTkZJR19BUkNIX0xIN0E0MDQKKwkvKiBTZXQgUG9ydCBDIGJpdCAxICYgMiBhcyBvdXRwdXQgKi8KKwlzZXRfcG9ydGNfZGRyKDEsIDEpOworCXNldF9wb3J0Y19kZHIoMiwgMSk7CisKKwkvKiBFbmFibGUgVVNCIHBvd2VyICovCisJc2V0X3BvcnRjX2RyKDEsIDApOworI2VuZGlmCisKKwkvKgorCSAqIEMuZiBDaGFwdGVyIDE4LjEuMy4xIEluaXRpYWxpemluZyB0aGUgVVNCCisJICovCisKKwkvKiBEaXNhYmxlIHRoZSBVU0IgKi8KKwl1c2JfY2xlYXIoUE1fVVNCX0VOQUJMRSwgVVNCX1BNKTsKKworCS8qIFJlc2V0IEFQQiAmIEkvTyBzaWRlcyBvZiB0aGUgVVNCICovCisJdXNiX3NldChVU0JfUkVTRVRfQVBCIHwgVVNCX1JFU0VUX0lPLCBVU0JfUkVTRVQpOworCW1kZWxheSg1KTsKKwl1c2JfY2xlYXIoVVNCX1JFU0VUX0FQQiB8IFVTQl9SRVNFVF9JTywgVVNCX1JFU0VUKTsKKworCS8qIFNldCBNQVhQIHZhbHVlcyBmb3IgZWFjaCAqLworCWZvciAoZXAgPSAwOyBlcCA8IFVEQ19NQVhfRU5EUE9JTlRTOyBlcCsrKSB7CisJCXN0cnVjdCBsaDdhNDB4X2VwICplcF9yZWcgPSAmZGV2LT5lcFtlcF07CisJCXUzMiBjc3I7CisKKwkJdXNiX3NldF9pbmRleChlcCk7CisKKwkJc3dpdGNoIChlcF9yZWctPmVwX3R5cGUpIHsKKwkJY2FzZSBlcF9idWxrX2luOgorCQljYXNlIGVwX2ludGVycnVwdDoKKwkJCXVzYl9jbGVhcihVU0JfSU5fQ1NSMl9VU0JfRE1BX0VOIHwgVVNCX0lOX0NTUjJfQVVUT19TRVQsCisJCQkJICBlcF9yZWctPmNzcjIpOworCQkJLyogRmFsbCB0aHJvdWdoICovCisJCWNhc2UgZXBfY29udHJvbDoKKwkJCXVzYl93cml0ZShCWVRFUzJNQVhQKGVwX21heHBhY2tldChlcF9yZWcpKSwKKwkJCQkgIFVTQl9JTl9NQVhQKTsKKwkJCWJyZWFrOworCQljYXNlIGVwX2J1bGtfb3V0OgorCQkJdXNiX2NsZWFyKFVTQl9PVVRfQ1NSMl9VU0JfRE1BX0VOIHwKKwkJCQkgIFVTQl9PVVRfQ1NSMl9BVVRPX0NMUiwgZXBfcmVnLT5jc3IyKTsKKwkJCXVzYl93cml0ZShCWVRFUzJNQVhQKGVwX21heHBhY2tldChlcF9yZWcpKSwKKwkJCQkgIFVTQl9PVVRfTUFYUCk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFJlYWQgJiBXcml0ZSBDU1IxLCBqdXN0IGluIGNhc2UgKi8KKwkJY3NyID0gdXNiX3JlYWQoZXBfcmVnLT5jc3IxKTsKKwkJdXNiX3dyaXRlKGNzciwgZXBfcmVnLT5jc3IxKTsKKworCQlmbHVzaChlcF9yZWcpOworCX0KKworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCXVzYl93cml0ZSgwLCBVU0JfSU5fSU5UX0VOKTsKKwl1c2Jfd3JpdGUoMCwgVVNCX09VVF9JTlRfRU4pOworCXVzYl93cml0ZSgwLCBVU0JfSU5UX0VOKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCisJdXNiX3NldChVU0JfSU5fSU5UX0VQMCwgVVNCX0lOX0lOVF9FTik7CisJdXNiX3NldChVU0JfSU5UX1JFU0VUX0lOVCB8IFVTQl9JTlRfUkVTVU1FX0lOVCwgVVNCX0lOVF9FTik7CisJLyogRG9udCBlbmFibGUgcmVzdCBvZiB0aGUgaW50ZXJydXB0cyAqLworCS8qIHVzYl9zZXQoVVNCX0lOX0lOVF9FUDMgfCBVU0JfSU5fSU5UX0VQMSB8IFVTQl9JTl9JTlRfRVAwLCBVU0JfSU5fSU5UX0VOKTsKKwkgICB1c2Jfc2V0KFVTQl9PVVRfSU5UX0VQMiwgVVNCX09VVF9JTlRfRU4pOyAqLworCisJLyogRW5hYmxlIFNVU1BFTkQgKi8KKwl1c2Jfc2V0KFBNX0VOQUJMRV9TVVNQRU5ELCBVU0JfUE0pOworCisJLyogRW5hYmxlIHRoZSBVU0IgKi8KKwl1c2Jfc2V0KFBNX1VTQl9FTkFCTEUsIFVTQl9QTSk7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9MSDdBNDA0CisJLyogTk9URTogRE9FUyBOT1QgV09SSyEgKi8KKwkvKiBMZXQgaG9zdCBkZXRlY3QgVURDOgorCSAqIFNvZnR3YXJlIG11c3Qgd3JpdGUgYSAwIHRvIHRoZSBQTVI6RENQX0NUUkwgYml0IHRvIHR1cm4gdGhpcworCSAqIHRyYW5zaXN0b3Igb24gYW5kIHB1bGwgdGhlIFVTQkRQIHBpbiBISUdILgorCSAqLworCS8qIHVzYl9jbGVhcihQTV9VU0JfRENQLCBVU0JfUE0pOworCSAgIHVzYl9zZXQoUE1fVVNCX0RDUCwgVVNCX1BNKTsgKi8KKyNlbmRpZgorfQorCisvKgorICBSZWdpc3RlciBlbnRyeSBwb2ludCBmb3IgdGhlIHBlcmlwaGVyYWwgY29udHJvbGxlciBkcml2ZXIuCisqLworaW50IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCXN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2ID0gdGhlX2NvbnRyb2xsZXI7CisJaW50IHJldHZhbDsKKworCURFQlVHKCIlczogJXNcbiIsIF9fRlVOQ1RJT05fXywgZHJpdmVyLT5kcml2ZXIubmFtZSk7CisKKwlpZiAoIWRyaXZlcgorCSAgICB8fCBkcml2ZXItPnNwZWVkICE9IFVTQl9TUEVFRF9GVUxMCisJICAgIHx8ICFkcml2ZXItPmJpbmQKKwkgICAgfHwgIWRyaXZlci0+dW5iaW5kIHx8ICFkcml2ZXItPmRpc2Nvbm5lY3QgfHwgIWRyaXZlci0+c2V0dXApCisJCXJldHVybiAtRUlOVkFMOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoZGV2LT5kcml2ZXIpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBmaXJzdCBob29rIHVwIHRoZSBkcml2ZXIgLi4uICovCisJZGV2LT5kcml2ZXIgPSBkcml2ZXI7CisJZGV2LT5nYWRnZXQuZGV2LmRyaXZlciA9ICZkcml2ZXItPmRyaXZlcjsKKworCWRldmljZV9hZGQoJmRldi0+Z2FkZ2V0LmRldik7CisJcmV0dmFsID0gZHJpdmVyLT5iaW5kKCZkZXYtPmdhZGdldCk7CisJaWYgKHJldHZhbCkgeworCQlwcmludGsoIiVzOiBiaW5kIHRvIGRyaXZlciAlcyAtLT4gZXJyb3IgJWRcbiIsIGRldi0+Z2FkZ2V0Lm5hbWUsCisJCSAgICAgICBkcml2ZXItPmRyaXZlci5uYW1lLCByZXR2YWwpOworCQlkZXZpY2VfZGVsKCZkZXYtPmdhZGdldC5kZXYpOworCisJCWRldi0+ZHJpdmVyID0gMDsKKwkJZGV2LT5nYWRnZXQuZGV2LmRyaXZlciA9IDA7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJLyogLi4uIHRoZW4gZW5hYmxlIGhvc3QgZGV0ZWN0aW9uIGFuZCBlcDA7IGFuZCB3ZSdyZSByZWFkeQorCSAqIGZvciBzZXRfY29uZmlndXJhdGlvbiBhcyB3ZWxsIGFzIGV2ZW50dWFsIGRpc2Nvbm5lY3QuCisJICogTk9URTogIHRoaXMgc2hvdWxkbid0IHBvd2VyIHVwIHVudGlsIGxhdGVyLgorCSAqLworCXByaW50aygiJXM6IHJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLCBkZXYtPmdhZGdldC5uYW1lLAorCSAgICAgICBkcml2ZXItPmRyaXZlci5uYW1lKTsKKworCXVkY19lbmFibGUoZGV2KTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyKTsKKworLyoKKyAgVW5yZWdpc3RlciBlbnRyeSBwb2ludCBmb3IgdGhlIHBlcmlwaGVyYWwgY29udHJvbGxlciBkcml2ZXIuCisqLworaW50IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJc3RydWN0IGxoN2E0MHhfdWRjICpkZXYgPSB0aGVfY29udHJvbGxlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCWlmICghZHJpdmVyIHx8IGRyaXZlciAhPSBkZXYtPmRyaXZlcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJZGV2LT5kcml2ZXIgPSAwOworCXN0b3BfYWN0aXZpdHkoZGV2LCBkcml2ZXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJZHJpdmVyLT51bmJpbmQoJmRldi0+Z2FkZ2V0KTsKKwlkZXZpY2VfZGVsKCZkZXYtPmdhZGdldC5kZXYpOworCisJdWRjX2Rpc2FibGUoZGV2KTsKKworCURFQlVHKCJ1bnJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqIFdyaXRlIHJlcXVlc3QgdG8gRklGTyAobWF4IHdyaXRlID09IG1heHAgc2l6ZSkKKyAqICBSZXR1cm46ICAwID0gc3RpbGwgcnVubmluZywgMSA9IGNvbXBsZXRlZCwgbmVnYXRpdmUgPSBlcnJubworICogIE5PVEU6IElOREVYIHJlZ2lzdGVyIG11c3QgYmUgc2V0IGZvciBFUAorICovCitzdGF0aWMgaW50IHdyaXRlX2ZpZm8oc3RydWN0IGxoN2E0MHhfZXAgKmVwLCBzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0ICpyZXEpCit7CisJdTMyIG1heDsKKwl1MzIgY3NyOworCisJbWF4ID0gbGUxNl90b19jcHUoZXAtPmRlc2MtPndNYXhQYWNrZXRTaXplKTsKKworCWNzciA9IHVzYl9yZWFkKGVwLT5jc3IxKTsKKwlERUJVRygiQ1NSOiAleCAlZFxuIiwgY3NyLCBjc3IgJiBVU0JfSU5fQ1NSMV9GSUZPX05PVF9FTVBUWSk7CisKKwlpZiAoIShjc3IgJiBVU0JfSU5fQ1NSMV9GSUZPX05PVF9FTVBUWSkpIHsKKwkJdW5zaWduZWQgY291bnQ7CisJCWludCBpc19sYXN0LCBpc19zaG9ydDsKKworCQljb3VudCA9IHdyaXRlX3BhY2tldChlcCwgcmVxLCBtYXgpOworCQl1c2Jfc2V0KFVTQl9JTl9DU1IxX0lOX1BLVF9SRFksIGVwLT5jc3IxKTsKKworCQkvKiBsYXN0IHBhY2tldCBpcyB1c3VhbGx5IHNob3J0IChvciBhIHpscCkgKi8KKwkJaWYgKHVubGlrZWx5KGNvdW50ICE9IG1heCkpCisJCQlpc19sYXN0ID0gaXNfc2hvcnQgPSAxOworCQllbHNlIHsKKwkJCWlmIChsaWtlbHkocmVxLT5yZXEubGVuZ3RoICE9IHJlcS0+cmVxLmFjdHVhbCkKKwkJCSAgICB8fCByZXEtPnJlcS56ZXJvKQorCQkJCWlzX2xhc3QgPSAwOworCQkJZWxzZQorCQkJCWlzX2xhc3QgPSAxOworCQkJLyogaW50ZXJydXB0L2lzbyBtYXhwYWNrZXQgbWF5IG5vdCBmaWxsIHRoZSBmaWZvICovCisJCQlpc19zaG9ydCA9IHVubGlrZWx5KG1heCA8IGVwX21heHBhY2tldChlcCkpOworCQl9CisKKwkJREVCVUcoIiVzOiB3cm90ZSAlcyAlZCBieXRlcyVzJXMgJWQgbGVmdCAlcFxuIiwgX19GVU5DVElPTl9fLAorCQkgICAgICBlcC0+ZXAubmFtZSwgY291bnQsCisJCSAgICAgIGlzX2xhc3QgPyAiL0wiIDogIiIsIGlzX3Nob3J0ID8gIi9TIiA6ICIiLAorCQkgICAgICByZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWwsIHJlcSk7CisKKwkJLyogcmVxdWVzdHMgY29tcGxldGUgd2hlbiBhbGwgSU4gZGF0YSBpcyBpbiB0aGUgRklGTyAqLworCQlpZiAoaXNfbGFzdCkgeworCQkJZG9uZShlcCwgcmVxLCAwKTsKKwkJCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCQkJcGlvX2lycV9kaXNhYmxlKGVwX2luZGV4KGVwKSk7CisJCQl9CisJCQlyZXR1cm4gMTsKKwkJfQorCX0gZWxzZSB7CisJCURFQlVHKCJIbW0uLiAlZCBlcCBGSUZPIGlzIG5vdCBlbXB0eSFcbiIsIGVwX2luZGV4KGVwKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKiBSZWFkIHRvIHJlcXVlc3QgZnJvbSBGSUZPIChtYXggcmVhZCA9PSBieXRlcyBpbiBmaWZvKQorICogIFJldHVybjogIDAgPSBzdGlsbCBydW5uaW5nLCAxID0gY29tcGxldGVkLCBuZWdhdGl2ZSA9IGVycm5vCisgKiAgTk9URTogSU5ERVggcmVnaXN0ZXIgbXVzdCBiZSBzZXQgZm9yIEVQCisgKi8KK3N0YXRpYyBpbnQgcmVhZF9maWZvKHN0cnVjdCBsaDdhNDB4X2VwICplcCwgc3RydWN0IGxoN2E0MHhfcmVxdWVzdCAqcmVxKQoreworCXUzMiBjc3I7CisJdTggKmJ1ZjsKKwl1bnNpZ25lZCBidWZmZXJzcGFjZSwgY291bnQsIGlzX3Nob3J0OworCXZvbGF0aWxlIHUzMiAqZmlmbyA9ICh2b2xhdGlsZSB1MzIgKillcC0+ZmlmbzsKKworCS8qIG1ha2Ugc3VyZSB0aGVyZSdzIGEgcGFja2V0IGluIHRoZSBGSUZPLiAqLworCWNzciA9IHVzYl9yZWFkKGVwLT5jc3IxKTsKKwlpZiAoIShjc3IgJiBVU0JfT1VUX0NTUjFfT1VUX1BLVF9SRFkpKSB7CisJCURFQlVHKCIlczogUGFja2V0IE5PVCByZWFkeSFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJ1ZiA9IHJlcS0+cmVxLmJ1ZiArIHJlcS0+cmVxLmFjdHVhbDsKKwlwcmVmZXRjaHcoYnVmKTsKKwlidWZmZXJzcGFjZSA9IHJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbDsKKworCS8qIHJlYWQgYWxsIGJ5dGVzIGZyb20gdGhpcyBwYWNrZXQgKi8KKwljb3VudCA9IHVzYl9yZWFkKFVTQl9PVVRfRklGT19XQzEpOworCXJlcS0+cmVxLmFjdHVhbCArPSBtaW4oY291bnQsIGJ1ZmZlcnNwYWNlKTsKKworCWlzX3Nob3J0ID0gKGNvdW50IDwgZXAtPmVwLm1heHBhY2tldCk7CisJREVCVUcoInJlYWQgJXMgJTAyeCwgJWQgYnl0ZXMlcyByZXEgJXAgJWQvJWRcbiIsCisJICAgICAgZXAtPmVwLm5hbWUsIGNzciwgY291bnQsCisJICAgICAgaXNfc2hvcnQgPyAiL1MiIDogIiIsIHJlcSwgcmVxLT5yZXEuYWN0dWFsLCByZXEtPnJlcS5sZW5ndGgpOworCisJd2hpbGUgKGxpa2VseShjb3VudC0tICE9IDApKSB7CisJCXU4IGJ5dGUgPSAodTgpICgqZmlmbyAmIDB4ZmYpOworCisJCWlmICh1bmxpa2VseShidWZmZXJzcGFjZSA9PSAwKSkgeworCQkJLyogdGhpcyBoYXBwZW5zIHdoZW4gdGhlIGRyaXZlcidzIGJ1ZmZlcgorCQkJICogaXMgc21hbGxlciB0aGFuIHdoYXQgdGhlIGhvc3Qgc2VudC4KKwkJCSAqIGRpc2NhcmQgdGhlIGV4dHJhIGRhdGEuCisJCQkgKi8KKwkJCWlmIChyZXEtPnJlcS5zdGF0dXMgIT0gLUVPVkVSRkxPVykKKwkJCQlwcmludGsoIiVzIG92ZXJmbG93ICVkXG4iLCBlcC0+ZXAubmFtZSwgY291bnQpOworCQkJcmVxLT5yZXEuc3RhdHVzID0gLUVPVkVSRkxPVzsKKwkJfSBlbHNlIHsKKwkJCSpidWYrKyA9IGJ5dGU7CisJCQlidWZmZXJzcGFjZS0tOworCQl9CisJfQorCisJdXNiX2NsZWFyKFVTQl9PVVRfQ1NSMV9PVVRfUEtUX1JEWSwgZXAtPmNzcjEpOworCisJLyogY29tcGxldGlvbiAqLworCWlmIChpc19zaG9ydCB8fCByZXEtPnJlcS5hY3R1YWwgPT0gcmVxLT5yZXEubGVuZ3RoKSB7CisJCWRvbmUoZXAsIHJlcSwgMCk7CisJCXVzYl9zZXQoVVNCX09VVF9DU1IxX0ZJRk9fRkxVU0gsIGVwLT5jc3IxKTsKKworCQlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkKKwkJCXBpb19pcnFfZGlzYWJsZShlcF9pbmRleChlcCkpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBmaW5pc2hlZCB0aGF0IHBhY2tldC4gIHRoZSBuZXh0IG9uZSBtYXkgYmUgd2FpdGluZy4uLiAqLworCXJldHVybiAwOworfQorCisvKgorICoJZG9uZSAtIHJldGlyZSBhIHJlcXVlc3Q7IGNhbGxlciBibG9ja2VkIGlycXMKKyAqICBJTkRFWCByZWdpc3RlciBpcyBwcmVzZXJ2ZWQgdG8ga2VlcCBzYW1lCisgKi8KK3N0YXRpYyB2b2lkIGRvbmUoc3RydWN0IGxoN2E0MHhfZXAgKmVwLCBzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0ICpyZXEsIGludCBzdGF0dXMpCit7CisJdW5zaWduZWQgaW50IHN0b3BwZWQgPSBlcC0+c3RvcHBlZDsKKwl1MzIgaW5kZXg7CisKKwlERUJVRygiJXMsICVwXG4iLCBfX0ZVTkNUSU9OX18sIGVwKTsKKwlsaXN0X2RlbF9pbml0KCZyZXEtPnF1ZXVlKTsKKworCWlmIChsaWtlbHkocmVxLT5yZXEuc3RhdHVzID09IC1FSU5QUk9HUkVTUykpCisJCXJlcS0+cmVxLnN0YXR1cyA9IHN0YXR1czsKKwllbHNlCisJCXN0YXR1cyA9IHJlcS0+cmVxLnN0YXR1czsKKworCWlmIChzdGF0dXMgJiYgc3RhdHVzICE9IC1FU0hVVERPV04pCisJCURFQlVHKCJjb21wbGV0ZSAlcyByZXEgJXAgc3RhdCAlZCBsZW4gJXUvJXVcbiIsCisJCSAgICAgIGVwLT5lcC5uYW1lLCAmcmVxLT5yZXEsIHN0YXR1cywKKwkJICAgICAgcmVxLT5yZXEuYWN0dWFsLCByZXEtPnJlcS5sZW5ndGgpOworCisJLyogZG9uJ3QgbW9kaWZ5IHF1ZXVlIGhlYWRzIGR1cmluZyBjb21wbGV0aW9uIGNhbGxiYWNrICovCisJZXAtPnN0b3BwZWQgPSAxOworCS8qIFJlYWQgY3VycmVudCBpbmRleCAoY29tcGxldGlvbiBtYXkgbW9kaWZ5IGl0KSAqLworCWluZGV4ID0gdXNiX3JlYWQoVVNCX0lOREVYKTsKKworCXNwaW5fdW5sb2NrKCZlcC0+ZGV2LT5sb2NrKTsKKwlyZXEtPnJlcS5jb21wbGV0ZSgmZXAtPmVwLCAmcmVxLT5yZXEpOworCXNwaW5fbG9jaygmZXAtPmRldi0+bG9jayk7CisKKwkvKiBSZXN0b3JlIGluZGV4ICovCisJdXNiX3NldF9pbmRleChpbmRleCk7CisJZXAtPnN0b3BwZWQgPSBzdG9wcGVkOworfQorCisvKiogRW5hYmxlIEVQIGludGVycnVwdCAqLworc3RhdGljIHZvaWQgcGlvX2lycV9lbmFibGUoaW50IGVwKQoreworCURFQlVHKCIlczogJWRcbiIsIF9fRlVOQ1RJT05fXywgZXApOworCisJc3dpdGNoIChlcCkgeworCWNhc2UgMToKKwkJdXNiX3NldChVU0JfSU5fSU5UX0VQMSwgVVNCX0lOX0lOVF9FTik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdXNiX3NldChVU0JfT1VUX0lOVF9FUDIsIFVTQl9PVVRfSU5UX0VOKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQl1c2Jfc2V0KFVTQl9JTl9JTlRfRVAzLCBVU0JfSU5fSU5UX0VOKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVCVUcoIlVua25vd24gZW5kcG9pbnQ6ICVkXG4iLCBlcCk7CisJCWJyZWFrOworCX0KK30KKworLyoqIERpc2FibGUgRVAgaW50ZXJydXB0ICovCitzdGF0aWMgdm9pZCBwaW9faXJxX2Rpc2FibGUoaW50IGVwKQoreworCURFQlVHKCIlczogJWRcbiIsIF9fRlVOQ1RJT05fXywgZXApOworCisJc3dpdGNoIChlcCkgeworCWNhc2UgMToKKwkJdXNiX2NsZWFyKFVTQl9JTl9JTlRfRVAxLCBVU0JfSU5fSU5UX0VOKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl1c2JfY2xlYXIoVVNCX09VVF9JTlRfRVAyLCBVU0JfT1VUX0lOVF9FTik7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJdXNiX2NsZWFyKFVTQl9JTl9JTlRfRVAzLCBVU0JfSU5fSU5UX0VOKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVCVUcoIlVua25vd24gZW5kcG9pbnQ6ICVkXG4iLCBlcCk7CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIAludWtlIC0gZGVxdWV1ZSBBTEwgcmVxdWVzdHMKKyAqLwordm9pZCBudWtlKHN0cnVjdCBsaDdhNDB4X2VwICplcCwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0ICpyZXE7CisKKwlERUJVRygiJXMsICVwXG4iLCBfX0ZVTkNUSU9OX18sIGVwKTsKKworCS8qIEZsdXNoIEZJRk8gKi8KKwlmbHVzaChlcCk7CisKKwkvKiBjYWxsZWQgd2l0aCBpcnFzIGJsb2NrZWQgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IGxoN2E0MHhfcmVxdWVzdCwgcXVldWUpOworCQlkb25lKGVwLCByZXEsIHN0YXR1cyk7CisJfQorCisJLyogRGlzYWJsZSBJUlEgaWYgRVAgaXMgZW5hYmxlZCAoaGFzIGRlY3JpcHRvcikgKi8KKwlpZiAoZXAtPmRlc2MpCisJCXBpb19pcnFfZGlzYWJsZShlcF9pbmRleChlcCkpOworfQorCisvKgordm9pZCBudWtlX2FsbChzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldikKK3sKKwlpbnQgbjsKKwlmb3Iobj0wOyBuPFVEQ19NQVhfRU5EUE9JTlRTOyBuKyspIHsKKwkJc3RydWN0IGxoN2E0MHhfZXAgKmVwID0gJmRldi0+ZXBbbl07CisJCXVzYl9zZXRfaW5kZXgobik7CisJCW51a2UoZXAsIDApOworCX0KK30qLworCisvKgorc3RhdGljIHZvaWQgZmx1c2hfYWxsKHN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2KQoreworCWludCBuOworICAgIGZvciAobiA9IDA7IG4gPCBVRENfTUFYX0VORFBPSU5UUzsgbisrKQorICAgIHsKKwkJc3RydWN0IGxoN2E0MHhfZXAgKmVwID0gJmRldi0+ZXBbbl07CisJCWZsdXNoKGVwKTsKKyAgICB9Cit9CisqLworCisvKiogRmx1c2ggRVAKKyAqIE5PVEU6IElOREVYIHJlZ2lzdGVyIG11c3QgYmUgc2V0IGJlZm9yZSB0aGlzIGNhbGwKKyAqLworc3RhdGljIHZvaWQgZmx1c2goc3RydWN0IGxoN2E0MHhfZXAgKmVwKQoreworCURFQlVHKCIlcywgJXBcbiIsIF9fRlVOQ1RJT05fXywgZXApOworCisJc3dpdGNoIChlcC0+ZXBfdHlwZSkgeworCWNhc2UgZXBfY29udHJvbDoKKwkJLyogY2hlY2ssIGJ5IGltcGxpY2F0aW9uIGMuZi4gMTUuMS4yLjExICovCisJCWJyZWFrOworCisJY2FzZSBlcF9idWxrX2luOgorCWNhc2UgZXBfaW50ZXJydXB0OgorCQkvKiBpZihjc3IgJiBVU0JfSU5fQ1NSMV9JTl9QS1RfUkRZKSAqLworCQl1c2Jfc2V0KFVTQl9JTl9DU1IxX0ZJRk9fRkxVU0gsIGVwLT5jc3IxKTsKKwkJYnJlYWs7CisKKwljYXNlIGVwX2J1bGtfb3V0OgorCQkvKiBpZihjc3IgJiBVU0JfT1VUX0NTUjFfT1VUX1BLVF9SRFkpICovCisJCXVzYl9zZXQoVVNCX09VVF9DU1IxX0ZJRk9fRkxVU0gsIGVwLT5jc3IxKTsKKwkJYnJlYWs7CisJfQorfQorCisvKioKKyAqIGxoN2E0MHhfaW5fZXBuIC0gaGFuZGxlIElOIGludGVycnVwdAorICovCitzdGF0aWMgdm9pZCBsaDdhNDB4X2luX2VwbihzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiwgdTMyIGVwX2lkeCwgdTMyIGludHIpCit7CisJdTMyIGNzcjsKKwlzdHJ1Y3QgbGg3YTQweF9lcCAqZXAgPSAmZGV2LT5lcFtlcF9pZHhdOworCXN0cnVjdCBsaDdhNDB4X3JlcXVlc3QgKnJlcTsKKworCXVzYl9zZXRfaW5kZXgoZXBfaWR4KTsKKworCWNzciA9IHVzYl9yZWFkKGVwLT5jc3IxKTsKKwlERUJVRygiJXM6ICVkLCBjc3IgJXhcbiIsIF9fRlVOQ1RJT05fXywgZXBfaWR4LCBjc3IpOworCisJaWYgKGNzciAmIFVTQl9JTl9DU1IxX1NFTlRfU1RBTEwpIHsKKwkJREVCVUcoIlVTQl9JTl9DU1IxX1NFTlRfU1RBTExcbiIpOworCQl1c2Jfc2V0KFVTQl9JTl9DU1IxX1NFTlRfU1RBTEwgLyp8VVNCX0lOX0NTUjFfU0VORF9TVEFMTCAqLyAsCisJCQllcC0+Y3NyMSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWVwLT5kZXNjKSB7CisJCURFQlVHKCIlczogTk8gRVAgREVTQ1xuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQlyZXEgPSAwOworCWVsc2UKKwkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IGxoN2E0MHhfcmVxdWVzdCwgcXVldWUpOworCisJREVCVUcoInJlcTogJXBcbiIsIHJlcSk7CisKKwlpZiAoIXJlcSkKKwkJcmV0dXJuOworCisJd3JpdGVfZmlmbyhlcCwgcmVxKTsKK30KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBCdWxrIE9VVCAocmVjdikKKyAqLworCitzdGF0aWMgdm9pZCBsaDdhNDB4X291dF9lcG4oc3RydWN0IGxoN2E0MHhfdWRjICpkZXYsIHUzMiBlcF9pZHgsIHUzMiBpbnRyKQoreworCXN0cnVjdCBsaDdhNDB4X2VwICplcCA9ICZkZXYtPmVwW2VwX2lkeF07CisJc3RydWN0IGxoN2E0MHhfcmVxdWVzdCAqcmVxOworCisJREVCVUcoIiVzOiAlZFxuIiwgX19GVU5DVElPTl9fLCBlcF9pZHgpOworCisJdXNiX3NldF9pbmRleChlcF9pZHgpOworCisJaWYgKGVwLT5kZXNjKSB7CisJCXUzMiBjc3I7CisJCWNzciA9IHVzYl9yZWFkKGVwLT5jc3IxKTsKKworCQl3aGlsZSAoKGNzciA9CisJCQl1c2JfcmVhZChlcC0+CisJCQkJIGNzcjEpKSAmIChVU0JfT1VUX0NTUjFfT1VUX1BLVF9SRFkgfAorCQkJCQkgICBVU0JfT1VUX0NTUjFfU0VOVF9TVEFMTCkpIHsKKwkJCURFQlVHKCIlczogJXhcbiIsIF9fRlVOQ1RJT05fXywgY3NyKTsKKworCQkJaWYgKGNzciAmIFVTQl9PVVRfQ1NSMV9TRU5UX1NUQUxMKSB7CisJCQkJREVCVUcoIiVzOiBzdGFsbCBzZW50LCBmbHVzaCBmaWZvXG4iLAorCQkJCSAgICAgIF9fRlVOQ1RJT05fXyk7CisJCQkJLyogdXNiX3NldChVU0JfT1VUX0NTUjFfRklGT19GTFVTSCwgZXAtPmNzcjEpOyAqLworCQkJCWZsdXNoKGVwKTsKKwkJCX0gZWxzZSBpZiAoY3NyICYgVVNCX09VVF9DU1IxX09VVF9QS1RfUkRZKSB7CisJCQkJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCQkJCXJlcSA9IDA7CisJCQkJZWxzZQorCQkJCQlyZXEgPQorCQkJCQkgICAgbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwKKwkJCQkJCSAgICAgICBzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0LAorCQkJCQkJICAgICAgIHF1ZXVlKTsKKworCQkJCWlmICghcmVxKSB7CisJCQkJCXByaW50aygiJXM6IE5VTEwgUkVRICVkXG4iLAorCQkJCQkgICAgICAgX19GVU5DVElPTl9fLCBlcF9pZHgpOworCQkJCQlmbHVzaChlcCk7CisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSB7CisJCQkJCXJlYWRfZmlmbyhlcCwgcmVxKTsKKwkJCQl9CisJCQl9CisKKwkJfQorCisJfSBlbHNlIHsKKwkJLyogVGhyb3cgcGFja2V0IGF3YXkuLiAqLworCQlwcmludGsoIiVzOiBObyBkZXNjcmlwdG9yPyE/XG4iLCBfX0ZVTkNUSU9OX18pOworCQlmbHVzaChlcCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdG9wX2FjdGl2aXR5KHN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2LAorCQkJICBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlpbnQgaTsKKworCS8qIGRvbid0IGRpc2Nvbm5lY3QgZHJpdmVycyBtb3JlIHRoYW4gb25jZSAqLworCWlmIChkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJZHJpdmVyID0gMDsKKwlkZXYtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCisJLyogcHJldmVudCBuZXcgcmVxdWVzdCBzdWJtaXNzaW9ucywga2lsbCBhbnkgb3V0c3RhbmRpbmcgcmVxdWVzdHMgICovCisJZm9yIChpID0gMDsgaSA8IFVEQ19NQVhfRU5EUE9JTlRTOyBpKyspIHsKKwkJc3RydWN0IGxoN2E0MHhfZXAgKmVwID0gJmRldi0+ZXBbaV07CisJCWVwLT5zdG9wcGVkID0gMTsKKworCQl1c2Jfc2V0X2luZGV4KGkpOworCQludWtlKGVwLCAtRVNIVVRET1dOKTsKKwl9CisKKwkvKiByZXBvcnQgZGlzY29ubmVjdDsgdGhlIGRyaXZlciBpcyBhbHJlYWR5IHF1aWVzY2VkICovCisJaWYgKGRyaXZlcikgeworCQlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKKwkJZHJpdmVyLT5kaXNjb25uZWN0KCZkZXYtPmdhZGdldCk7CisJCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsKKwl9CisKKwkvKiByZS1pbml0IGRyaXZlci12aXNpYmxlIGRhdGEgc3RydWN0dXJlcyAqLworCXVkY19yZWluaXQoZGV2KTsKK30KKworLyoqIEhhbmRsZSBVU0IgUkVTRVQgaW50ZXJydXB0CisgKi8KK3N0YXRpYyB2b2lkIGxoN2E0MHhfcmVzZXRfaW50cihzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldikKK3sKKyNpZiAwCQkJCS8qIGRlZiBDT05GSUdfQVJDSF9MSDdBNDA0ICovCisJLyogRG9lcyBub3Qgd29yayBhbHdheXMuLi4gKi8KKworCURFQlVHKCIlczogJWRcbiIsIF9fRlVOQ1RJT05fXywgZGV2LT51c2JfYWRkcmVzcyk7CisKKwlpZiAoIWRldi0+dXNiX2FkZHJlc3MpIHsKKwkJLyp1c2Jfc2V0KFVTQl9SRVNFVF9JTywgVVNCX1JFU0VUKTsKKwkJICAgbWRlbGF5KDUpOworCQkgICB1c2JfY2xlYXIoVVNCX1JFU0VUX0lPLCBVU0JfUkVTRVQpOyAqLworCQlyZXR1cm47CisJfQorCS8qIFB1dCB0aGUgVVNCIGNvbnRyb2xsZXIgaW50byByZXNldC4gKi8KKwl1c2Jfc2V0KFVTQl9SRVNFVF9JTywgVVNCX1JFU0VUKTsKKworCS8qIFNldCBEZXZpY2UgSUQgdG8gMCAqLworCXVkY19zZXRfYWRkcmVzcyhkZXYsIDApOworCisJLyogTGV0IFBMTDIgc2V0dGxlIGRvd24gKi8KKwltZGVsYXkoNSk7CisKKwkvKiBSZWxlYXNlIHRoZSBVU0IgY29udHJvbGxlciBmcm9tIHJlc2V0ICovCisJdXNiX2NsZWFyKFVTQl9SRVNFVF9JTywgVVNCX1JFU0VUKTsKKworCS8qIFJlLWVuYWJsZSBVREMgKi8KKwl1ZGNfZW5hYmxlKGRldik7CisKKyNlbmRpZgorCWRldi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7Cit9CisKKy8qCisgKglsaDdhNDB4IHVzYiBjbGllbnQgaW50ZXJydXB0IGhhbmRsZXIuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBsaDdhNDB4X3VkY19pcnEoaW50IGlycSwgdm9pZCAqX2Rldiwgc3RydWN0IHB0X3JlZ3MgKnIpCit7CisJc3RydWN0IGxoN2E0MHhfdWRjICpkZXYgPSBfZGV2OworCisJREVCVUcoIlxuXG4iKTsKKworCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsKKworCWZvciAoOzspIHsKKwkJdTMyIGludHJfaW4gPSB1c2JfcmVhZChVU0JfSU5fSU5UKTsKKwkJdTMyIGludHJfb3V0ID0gdXNiX3JlYWQoVVNCX09VVF9JTlQpOworCQl1MzIgaW50cl9pbnQgPSB1c2JfcmVhZChVU0JfSU5UKTsKKworCQkvKiBUZXN0IGFsc28gYWdhaW5zdCBlbmFibGUgYml0cy4uIChsaDdhNDB4IGVycmF0YSkuLiBTaWdoLi4gKi8KKwkJdTMyIGluX2VuID0gdXNiX3JlYWQoVVNCX0lOX0lOVF9FTik7CisJCXUzMiBvdXRfZW4gPSB1c2JfcmVhZChVU0JfT1VUX0lOVF9FTik7CisKKwkJaWYgKCFpbnRyX291dCAmJiAhaW50cl9pbiAmJiAhaW50cl9pbnQpCisJCQlicmVhazsKKworCQlERUJVRygiJXMgKG9uIHN0YXRlICVzKVxuIiwgX19GVU5DVElPTl9fLAorCQkgICAgICBzdGF0ZV9uYW1lc1tkZXYtPmVwMHN0YXRlXSk7CisJCURFQlVHKCJpbnRyX291dCA9ICV4XG4iLCBpbnRyX291dCk7CisJCURFQlVHKCJpbnRyX2luICA9ICV4XG4iLCBpbnRyX2luKTsKKwkJREVCVUcoImludHJfaW50ID0gJXhcbiIsIGludHJfaW50KTsKKworCQlpZiAoaW50cl9pbikgeworCQkJdXNiX3dyaXRlKGludHJfaW4sIFVTQl9JTl9JTlQpOworCisJCQlpZiAoKGludHJfaW4gJiBVU0JfSU5fSU5UX0VQMSkKKwkJCSAgICAmJiAoaW5fZW4gJiBVU0JfSU5fSU5UX0VQMSkpIHsKKwkJCQlERUJVRygiVVNCX0lOX0lOVF9FUDFcbiIpOworCQkJCWxoN2E0MHhfaW5fZXBuKGRldiwgMSwgaW50cl9pbik7CisJCQl9CisJCQlpZiAoKGludHJfaW4gJiBVU0JfSU5fSU5UX0VQMykKKwkJCSAgICAmJiAoaW5fZW4gJiBVU0JfSU5fSU5UX0VQMykpIHsKKwkJCQlERUJVRygiVVNCX0lOX0lOVF9FUDNcbiIpOworCQkJCWxoN2E0MHhfaW5fZXBuKGRldiwgMywgaW50cl9pbik7CisJCQl9CisJCQlpZiAoaW50cl9pbiAmIFVTQl9JTl9JTlRfRVAwKSB7CisJCQkJREVCVUcoIlVTQl9JTl9JTlRfRVAwIChjb250cm9sKVxuIik7CisJCQkJbGg3YTQweF9oYW5kbGVfZXAwKGRldiwgaW50cl9pbik7CisJCQl9CisJCX0KKworCQlpZiAoaW50cl9vdXQpIHsKKwkJCXVzYl93cml0ZShpbnRyX291dCwgVVNCX09VVF9JTlQpOworCisJCQlpZiAoKGludHJfb3V0ICYgVVNCX09VVF9JTlRfRVAyKQorCQkJICAgICYmIChvdXRfZW4gJiBVU0JfT1VUX0lOVF9FUDIpKSB7CisJCQkJREVCVUcoIlVTQl9PVVRfSU5UX0VQMlxuIik7CisJCQkJbGg3YTQweF9vdXRfZXBuKGRldiwgMiwgaW50cl9vdXQpOworCQkJfQorCQl9CisKKwkJaWYgKGludHJfaW50KSB7CisJCQl1c2Jfd3JpdGUoaW50cl9pbnQsIFVTQl9JTlQpOworCisJCQlpZiAoaW50cl9pbnQgJiBVU0JfSU5UX1JFU0VUX0lOVCkgeworCQkJCWxoN2E0MHhfcmVzZXRfaW50cihkZXYpOworCQkJfQorCisJCQlpZiAoaW50cl9pbnQgJiBVU0JfSU5UX1JFU1VNRV9JTlQpIHsKKwkJCQlERUJVRygiVVNCIHJlc3VtZVxuIik7CisKKwkJCQlpZiAoZGV2LT5nYWRnZXQuc3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04KKwkJCQkgICAgJiYgZGV2LT5kcml2ZXIKKwkJCQkgICAgJiYgZGV2LT5kcml2ZXItPnJlc3VtZQorCQkJCSAgICAmJiBpc191c2JfY29ubmVjdGVkKCkpIHsKKwkJCQkJZGV2LT5kcml2ZXItPnJlc3VtZSgmZGV2LT5nYWRnZXQpOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGludHJfaW50ICYgVVNCX0lOVF9TVVNQRU5EX0lOVCkgeworCQkJCURFQlVHKCJVU0Igc3VzcGVuZCVzXG4iLAorCQkJCSAgICAgIGlzX3VzYl9jb25uZWN0ZWQoKT8gIiIgOiAiK2Rpc2Nvbm5lY3QiKTsKKwkJCQlpZiAoIWlzX3VzYl9jb25uZWN0ZWQoKSkgeworCQkJCQlzdG9wX2FjdGl2aXR5KGRldiwgZGV2LT5kcml2ZXIpOworCQkJCX0gZWxzZSBpZiAoZGV2LT5nYWRnZXQuc3BlZWQgIT0KKwkJCQkJICAgVVNCX1NQRUVEX1VOS05PV04gJiYgZGV2LT5kcml2ZXIKKwkJCQkJICAgJiYgZGV2LT5kcml2ZXItPnN1c3BlbmQpIHsKKwkJCQkJZGV2LT5kcml2ZXItPnN1c3BlbmQoJmRldi0+Z2FkZ2V0KTsKKwkJCQl9CisJCQl9CisKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGxoN2E0MHhfZXBfZW5hYmxlKHN0cnVjdCB1c2JfZXAgKl9lcCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjKQoreworCXN0cnVjdCBsaDdhNDB4X2VwICplcDsKKwlzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJREVCVUcoIiVzLCAlcFxuIiwgX19GVU5DVElPTl9fLCBfZXApOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgbGg3YTQweF9lcCwgZXApOworCWlmICghX2VwIHx8ICFkZXNjIHx8IGVwLT5kZXNjIHx8IF9lcC0+bmFtZSA9PSBlcDBuYW1lCisJICAgIHx8IGRlc2MtPmJEZXNjcmlwdG9yVHlwZSAhPSBVU0JfRFRfRU5EUE9JTlQKKwkgICAgfHwgZXAtPmJFbmRwb2ludEFkZHJlc3MgIT0gZGVzYy0+YkVuZHBvaW50QWRkcmVzcworCSAgICB8fCBlcF9tYXhwYWNrZXQoZXApIDwgbGUxNl90b19jcHUoZGVzYy0+d01heFBhY2tldFNpemUpKSB7CisJCURFQlVHKCIlcywgYmFkIGVwIG9yIGRlc2NyaXB0b3JcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHhmZXIgdHlwZXMgbXVzdCBtYXRjaCwgZXhjZXB0IHRoYXQgaW50ZXJydXB0IH49IGJ1bGsgKi8KKwlpZiAoZXAtPmJtQXR0cmlidXRlcyAhPSBkZXNjLT5ibUF0dHJpYnV0ZXMKKwkgICAgJiYgZXAtPmJtQXR0cmlidXRlcyAhPSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLCisJICAgICYmIGRlc2MtPmJtQXR0cmlidXRlcyAhPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpIHsKKwkJREVCVUcoIiVzLCAlcyB0eXBlIG1pc21hdGNoXG4iLCBfX0ZVTkNUSU9OX18sIF9lcC0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGhhcmR3YXJlIF9jb3VsZF8gZG8gc21hbGxlciwgYnV0IGRyaXZlciBkb2Vzbid0ICovCisJaWYgKChkZXNjLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSworCSAgICAgJiYgbGUxNl90b19jcHUoZGVzYy0+d01heFBhY2tldFNpemUpICE9IGVwX21heHBhY2tldChlcCkpCisJICAgIHx8ICFkZXNjLT53TWF4UGFja2V0U2l6ZSkgeworCQlERUJVRygiJXMsIGJhZCAlcyBtYXhwYWNrZXRcbiIsIF9fRlVOQ1RJT05fXywgX2VwLT5uYW1lKTsKKwkJcmV0dXJuIC1FUkFOR0U7CisJfQorCisJZGV2ID0gZXAtPmRldjsKKwlpZiAoIWRldi0+ZHJpdmVyIHx8IGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSB7CisJCURFQlVHKCIlcywgYm9ndXMgZGV2aWNlIHN0YXRlXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVTSFVURE9XTjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCisJZXAtPnN0b3BwZWQgPSAwOworCWVwLT5kZXNjID0gZGVzYzsKKwllcC0+cGlvX2lycXMgPSAwOworCWVwLT5lcC5tYXhwYWNrZXQgPSBsZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSk7CisKKwkvKiBSZXNldCBoYWx0IHN0YXRlIChkb2VzIGZsdXNoKSAqLworCWxoN2E0MHhfc2V0X2hhbHQoX2VwLCAwKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5kZXYtPmxvY2ssIGZsYWdzKTsKKworCURFQlVHKCIlczogZW5hYmxlZCAlc1xuIiwgX19GVU5DVElPTl9fLCBfZXAtPm5hbWUpOworCXJldHVybiAwOworfQorCisvKiogRGlzYWJsZSBFUAorICogIE5PVEU6IFNldHMgSU5ERVggcmVnaXN0ZXIKKyAqLworc3RhdGljIGludCBsaDdhNDB4X2VwX2Rpc2FibGUoc3RydWN0IHVzYl9lcCAqX2VwKQoreworCXN0cnVjdCBsaDdhNDB4X2VwICplcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJREVCVUcoIiVzLCAlcFxuIiwgX19GVU5DVElPTl9fLCBfZXApOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgbGg3YTQweF9lcCwgZXApOworCWlmICghX2VwIHx8ICFlcC0+ZGVzYykgeworCQlERUJVRygiJXMsICVzIG5vdCBlbmFibGVkXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgICAgIF9lcCA/IGVwLT5lcC5uYW1lIDogTlVMTCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CisKKwl1c2Jfc2V0X2luZGV4KGVwX2luZGV4KGVwKSk7CisKKwkvKiBOdWtlIGFsbCBwZW5kaW5nIHJlcXVlc3RzIChkb2VzIGZsdXNoKSAqLworCW51a2UoZXAsIC1FU0hVVERPV04pOworCisJLyogRGlzYWJsZSBlcCBJUlEgKi8KKwlwaW9faXJxX2Rpc2FibGUoZXBfaW5kZXgoZXApKTsKKworCWVwLT5kZXNjID0gMDsKKwllcC0+c3RvcHBlZCA9IDE7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CisKKwlERUJVRygiJXM6IGRpc2FibGVkICVzXG4iLCBfX0ZVTkNUSU9OX18sIF9lcC0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3JlcXVlc3QgKmxoN2E0MHhfYWxsb2NfcmVxdWVzdChzdHJ1Y3QgdXNiX2VwICplcCwKKwkJCQkJCSBpbnQgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCBsaDdhNDB4X3JlcXVlc3QgKnJlcTsKKworCURFQlVHKCIlcywgJXBcbiIsIF9fRlVOQ1RJT05fXywgZXApOworCisJcmVxID0ga21hbGxvYyhzaXplb2YgKnJlcSwgZ2ZwX2ZsYWdzKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIDA7CisKKwltZW1zZXQocmVxLCAwLCBzaXplb2YgKnJlcSk7CisJSU5JVF9MSVNUX0hFQUQoJnJlcS0+cXVldWUpOworCisJcmV0dXJuICZyZXEtPnJlcTsKK30KKworc3RhdGljIHZvaWQgbGg3YTQweF9mcmVlX3JlcXVlc3Qoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0ICpyZXE7CisKKwlERUJVRygiJXMsICVwXG4iLCBfX0ZVTkNUSU9OX18sIGVwKTsKKworCXJlcSA9IGNvbnRhaW5lcl9vZihfcmVxLCBzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0LCByZXEpOworCVdBUk5fT04oIWxpc3RfZW1wdHkoJnJlcS0+cXVldWUpKTsKKwlrZnJlZShyZXEpOworfQorCitzdGF0aWMgdm9pZCAqbGg3YTQweF9hbGxvY19idWZmZXIoc3RydWN0IHVzYl9lcCAqZXAsIHVuc2lnbmVkIGJ5dGVzLAorCQkJCSAgZG1hX2FkZHJfdCAqIGRtYSwgaW50IGdmcF9mbGFncykKK3sKKwljaGFyICpyZXR2YWw7CisKKwlERUJVRygiJXMgKCVwLCAlZCwgJWQpXG4iLCBfX0ZVTkNUSU9OX18sIGVwLCBieXRlcywgZ2ZwX2ZsYWdzKTsKKworCXJldHZhbCA9IGttYWxsb2MoYnl0ZXMsIGdmcF9mbGFncyAmIH4oX19HRlBfRE1BIHwgX19HRlBfSElHSE1FTSkpOworCWlmIChyZXR2YWwpCisJCSpkbWEgPSB2aXJ0X3RvX2J1cyhyZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGxoN2E0MHhfZnJlZV9idWZmZXIoc3RydWN0IHVzYl9lcCAqZXAsIHZvaWQgKmJ1ZiwgZG1hX2FkZHJfdCBkbWEsCisJCQkJdW5zaWduZWQgYnl0ZXMpCit7CisJREVCVUcoIiVzLCAlcFxuIiwgX19GVU5DVElPTl9fLCBlcCk7CisJa2ZyZWUoYnVmKTsKK30KKworLyoqIFF1ZXVlIG9uZSByZXF1ZXN0CisgKiAgS2lja3N0YXJ0IHRyYW5zZmVyIGlmIG5lZWRlZAorICogIE5PVEU6IFNldHMgSU5ERVggcmVnaXN0ZXIKKyAqLworc3RhdGljIGludCBsaDdhNDB4X3F1ZXVlKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxLAorCQkJIGludCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IGxoN2E0MHhfcmVxdWVzdCAqcmVxOworCXN0cnVjdCBsaDdhNDB4X2VwICplcDsKKwlzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJREVCVUcoIlxuXG5cbiVzLCAlcFxuIiwgX19GVU5DVElPTl9fLCBfZXApOworCisJcmVxID0gY29udGFpbmVyX29mKF9yZXEsIHN0cnVjdCBsaDdhNDB4X3JlcXVlc3QsIHJlcSk7CisJaWYgKHVubGlrZWx5CisJICAgICghX3JlcSB8fCAhX3JlcS0+Y29tcGxldGUgfHwgIV9yZXEtPmJ1ZgorCSAgICAgfHwgIWxpc3RfZW1wdHkoJnJlcS0+cXVldWUpKSkgeworCQlERUJVRygiJXMsIGJhZCBwYXJhbXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IGxoN2E0MHhfZXAsIGVwKTsKKwlpZiAodW5saWtlbHkoIV9lcCB8fCAoIWVwLT5kZXNjICYmIGVwLT5lcC5uYW1lICE9IGVwMG5hbWUpKSkgeworCQlERUJVRygiJXMsIGJhZCBlcFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2ID0gZXAtPmRldjsKKwlpZiAodW5saWtlbHkoIWRldi0+ZHJpdmVyIHx8IGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSkgeworCQlERUJVRygiJXMsIGJvZ3VzIGRldmljZSBzdGF0ZSAlcFxuIiwgX19GVU5DVElPTl9fLCBkZXYtPmRyaXZlcik7CisJCXJldHVybiAtRVNIVVRET1dOOworCX0KKworCURFQlVHKCIlcyBxdWV1ZSByZXEgJXAsIGxlbiAlZCBidWYgJXBcbiIsIF9lcC0+bmFtZSwgX3JlcSwgX3JlcS0+bGVuZ3RoLAorCSAgICAgIF9yZXEtPmJ1Zik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlfcmVxLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJX3JlcS0+YWN0dWFsID0gMDsKKworCS8qIGtpY2tzdGFydCB0aGlzIGkvbyBxdWV1ZT8gKi8KKwlERUJVRygiQWRkIHRvICVkIFEgJWQgJWRcbiIsIGVwX2luZGV4KGVwKSwgbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSwKKwkgICAgICBlcC0+c3RvcHBlZCk7CisJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkgJiYgbGlrZWx5KCFlcC0+c3RvcHBlZCkpIHsKKwkJdTMyIGNzcjsKKworCQlpZiAodW5saWtlbHkoZXBfaW5kZXgoZXApID09IDApKSB7CisJCQkvKiBFUDAgKi8KKwkJCWxpc3RfYWRkX3RhaWwoJnJlcS0+cXVldWUsICZlcC0+cXVldWUpOworCQkJbGg3YTQweF9lcDBfa2ljayhkZXYsIGVwKTsKKwkJCXJlcSA9IDA7CisJCX0gZWxzZSBpZiAoZXBfaXNfaW4oZXApKSB7CisJCQkvKiBFUDEgJiBFUDMgKi8KKwkJCXVzYl9zZXRfaW5kZXgoZXBfaW5kZXgoZXApKTsKKwkJCWNzciA9IHVzYl9yZWFkKGVwLT5jc3IxKTsKKwkJCXBpb19pcnFfZW5hYmxlKGVwX2luZGV4KGVwKSk7CisJCQlpZiAoKGNzciAmIFVTQl9JTl9DU1IxX0ZJRk9fTk9UX0VNUFRZKSA9PSAwKSB7CisJCQkJaWYgKHdyaXRlX2ZpZm8oZXAsIHJlcSkgPT0gMSkKKwkJCQkJcmVxID0gMDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIEVQMiAqLworCQkJdXNiX3NldF9pbmRleChlcF9pbmRleChlcCkpOworCQkJY3NyID0gdXNiX3JlYWQoZXAtPmNzcjEpOworCQkJcGlvX2lycV9lbmFibGUoZXBfaW5kZXgoZXApKTsKKwkJCWlmICghKGNzciAmIFVTQl9PVVRfQ1NSMV9GSUZPX0ZVTEwpKSB7CisJCQkJaWYgKHJlYWRfZmlmbyhlcCwgcmVxKSA9PSAxKQorCQkJCQlyZXEgPSAwOworCQkJfQorCQl9CisJfQorCisJLyogcGlvIG9yIGRtYSBpcnEgaGFuZGxlciBhZHZhbmNlcyB0aGUgcXVldWUuICovCisJaWYgKGxpa2VseShyZXEgIT0gMCkpCisJCWxpc3RfYWRkX3RhaWwoJnJlcS0+cXVldWUsICZlcC0+cXVldWUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogZGVxdWV1ZSBKVVNUIE9ORSByZXF1ZXN0ICovCitzdGF0aWMgaW50IGxoN2E0MHhfZGVxdWV1ZShzdHJ1Y3QgdXNiX2VwICpfZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqX3JlcSkKK3sKKwlzdHJ1Y3QgbGg3YTQweF9lcCAqZXA7CisJc3RydWN0IGxoN2E0MHhfcmVxdWVzdCAqcmVxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlERUJVRygiJXMsICVwXG4iLCBfX0ZVTkNUSU9OX18sIF9lcCk7CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBsaDdhNDB4X2VwLCBlcCk7CisJaWYgKCFfZXAgfHwgZXAtPmVwLm5hbWUgPT0gZXAwbmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCisJLyogbWFrZSBzdXJlIGl0J3MgYWN0dWFsbHkgcXVldWVkIG9uIHRoaXMgZW5kcG9pbnQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKKwkJaWYgKCZyZXEtPnJlcSA9PSBfcmVxKQorCQkJYnJlYWs7CisJfQorCWlmICgmcmVxLT5yZXEgIT0gX3JlcSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRvbmUoZXAsIHJlcSwgLUVDT05OUkVTRVQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKiogSGFsdCBzcGVjaWZpYyBFUAorICogIFJldHVybiAwIGlmIHN1Y2Nlc3MKKyAqICBOT1RFOiBTZXRzIElOREVYIHJlZ2lzdGVyIHRvIEVQICEKKyAqLworc3RhdGljIGludCBsaDdhNDB4X3NldF9oYWx0KHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBsaDdhNDB4X2VwICplcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgbGg3YTQweF9lcCwgZXApOworCWlmICh1bmxpa2VseSghX2VwIHx8ICghZXAtPmRlc2MgJiYgZXAtPmVwLm5hbWUgIT0gZXAwbmFtZSkpKSB7CisJCURFQlVHKCIlcywgYmFkIGVwXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl1c2Jfc2V0X2luZGV4KGVwX2luZGV4KGVwKSk7CisKKwlERUJVRygiJXMsIGVwICVkLCB2YWwgJWRcbiIsIF9fRlVOQ1RJT05fXywgZXBfaW5kZXgoZXApLCB2YWx1ZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCisJaWYgKGVwX2luZGV4KGVwKSA9PSAwKSB7CisJCS8qIEVQMCAqLworCQl1c2Jfc2V0KEVQMF9TRU5EX1NUQUxMLCBlcC0+Y3NyMSk7CisJfSBlbHNlIGlmIChlcF9pc19pbihlcCkpIHsKKwkJdTMyIGNzciA9IHVzYl9yZWFkKGVwLT5jc3IxKTsKKwkJaWYgKHZhbHVlICYmICgoY3NyICYgVVNCX0lOX0NTUjFfRklGT19OT1RfRU1QVFkpCisJCQkgICAgICB8fCAhbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkpIHsKKwkJCS8qCisJCQkgKiBBdHRlbXB0cyB0byBoYWx0IElOIGVuZHBvaW50cyB3aWxsIGZhaWwgKHJldHVybmluZyAtRUFHQUlOKQorCQkJICogaWYgYW55IHRyYW5zZmVyIHJlcXVlc3RzIGFyZSBzdGlsbCBxdWV1ZWQsIG9yIGlmIHRoZSBjb250cm9sbGVyCisJCQkgKiBGSUZPIHN0aWxsIGhvbGRzIGJ5dGVzIHRoYXQgdGhlIGhvc3QgaGFzbpJ0IGNvbGxlY3RlZC4KKwkJCSAqLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCQkJREVCVUcKKwkJCSAgICAoIkF0dGVtcHQgdG8gaGFsdCBJTiBlbmRwb2ludCBmYWlsZWQgKHJldHVybmluZyAtRUFHQUlOKSAlZCAlZFxuIiwKKwkJCSAgICAgKGNzciAmIFVTQl9JTl9DU1IxX0ZJRk9fTk9UX0VNUFRZKSwKKwkJCSAgICAgIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwkJZmx1c2goZXApOworCQlpZiAodmFsdWUpCisJCQl1c2Jfc2V0KFVTQl9JTl9DU1IxX1NFTkRfU1RBTEwsIGVwLT5jc3IxKTsKKwkJZWxzZSB7CisJCQl1c2JfY2xlYXIoVVNCX0lOX0NTUjFfU0VORF9TVEFMTCwgZXAtPmNzcjEpOworCQkJdXNiX3NldChVU0JfSU5fQ1NSMV9DTFJfREFUQV9UT0dHTEUsIGVwLT5jc3IxKTsKKwkJfQorCisJfSBlbHNlIHsKKworCQlmbHVzaChlcCk7CisJCWlmICh2YWx1ZSkKKwkJCXVzYl9zZXQoVVNCX09VVF9DU1IxX1NFTkRfU1RBTEwsIGVwLT5jc3IxKTsKKwkJZWxzZSB7CisJCQl1c2JfY2xlYXIoVVNCX09VVF9DU1IxX1NFTkRfU1RBTEwsIGVwLT5jc3IxKTsKKwkJCXVzYl9zZXQoVVNCX09VVF9DU1IxX0NMUl9EQVRBX1JFRywgZXAtPmNzcjEpOworCQl9CisJfQorCisJaWYgKHZhbHVlKSB7CisJCWVwLT5zdG9wcGVkID0gMTsKKwl9IGVsc2UgeworCQllcC0+c3RvcHBlZCA9IDA7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCisJREVCVUcoIiVzICVzIGhhbHRlZFxuIiwgX2VwLT5uYW1lLCB2YWx1ZSA9PSAwID8gIk5PVCIgOiAiSVMiKTsKKworCXJldHVybiAwOworfQorCisvKiogUmV0dXJuIGJ5dGVzIGluIEVQIEZJRk8KKyAqICBOT1RFOiBTZXRzIElOREVYIHJlZ2lzdGVyIHRvIEVQCisgKi8KK3N0YXRpYyBpbnQgbGg3YTQweF9maWZvX3N0YXR1cyhzdHJ1Y3QgdXNiX2VwICpfZXApCit7CisJdTMyIGNzcjsKKwlpbnQgY291bnQgPSAwOworCXN0cnVjdCBsaDdhNDB4X2VwICplcDsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IGxoN2E0MHhfZXAsIGVwKTsKKwlpZiAoIV9lcCkgeworCQlERUJVRygiJXMsIGJhZCBlcFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJREVCVUcoIiVzLCAlZFxuIiwgX19GVU5DVElPTl9fLCBlcF9pbmRleChlcCkpOworCisJLyogTFBEIGNhbid0IHJlcG9ydCB1bmNsYWltZWQgYnl0ZXMgZnJvbSBJTiBmaWZvcyAqLworCWlmIChlcF9pc19pbihlcCkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXVzYl9zZXRfaW5kZXgoZXBfaW5kZXgoZXApKTsKKworCWNzciA9IHVzYl9yZWFkKGVwLT5jc3IxKTsKKwlpZiAoZXAtPmRldi0+Z2FkZ2V0LnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOIHx8CisJICAgIGNzciAmIFVTQl9PVVRfQ1NSMV9PVVRfUEtUX1JEWSkgeworCQljb3VudCA9IHVzYl9yZWFkKFVTQl9PVVRfRklGT19XQzEpOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworLyoqIEZsdXNoIEVQIEZJRk8KKyAqICBOT1RFOiBTZXRzIElOREVYIHJlZ2lzdGVyIHRvIEVQCisgKi8KK3N0YXRpYyB2b2lkIGxoN2E0MHhfZmlmb19mbHVzaChzdHJ1Y3QgdXNiX2VwICpfZXApCit7CisJc3RydWN0IGxoN2E0MHhfZXAgKmVwOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgbGg3YTQweF9lcCwgZXApOworCWlmICh1bmxpa2VseSghX2VwIHx8ICghZXAtPmRlc2MgJiYgZXAtPmVwLm5hbWUgIT0gZXAwbmFtZSkpKSB7CisJCURFQlVHKCIlcywgYmFkIGVwXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJdXNiX3NldF9pbmRleChlcF9pbmRleChlcCkpOworCWZsdXNoKGVwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBFbmQgUG9pbnQgMCByZWxhdGVkIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiByZXR1cm46ICAwID0gc3RpbGwgcnVubmluZywgMSA9IGNvbXBsZXRlZCwgbmVnYXRpdmUgPSBlcnJubyAqLworc3RhdGljIGludCB3cml0ZV9maWZvX2VwMChzdHJ1Y3QgbGg3YTQweF9lcCAqZXAsIHN0cnVjdCBsaDdhNDB4X3JlcXVlc3QgKnJlcSkKK3sKKwl1MzIgbWF4OworCXVuc2lnbmVkIGNvdW50OworCWludCBpc19sYXN0OworCisJbWF4ID0gZXBfbWF4cGFja2V0KGVwKTsKKworCURFQlVHX0VQMCgiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwljb3VudCA9IHdyaXRlX3BhY2tldChlcCwgcmVxLCBtYXgpOworCisJLyogbGFzdCBwYWNrZXQgaXMgdXN1YWxseSBzaG9ydCAob3IgYSB6bHApICovCisJaWYgKHVubGlrZWx5KGNvdW50ICE9IG1heCkpCisJCWlzX2xhc3QgPSAxOworCWVsc2UgeworCQlpZiAobGlrZWx5KHJlcS0+cmVxLmxlbmd0aCAhPSByZXEtPnJlcS5hY3R1YWwpIHx8IHJlcS0+cmVxLnplcm8pCisJCQlpc19sYXN0ID0gMDsKKwkJZWxzZQorCQkJaXNfbGFzdCA9IDE7CisJfQorCisJREVCVUdfRVAwKCIlczogd3JvdGUgJXMgJWQgYnl0ZXMlcyAlZCBsZWZ0ICVwXG4iLCBfX0ZVTkNUSU9OX18sCisJCSAgZXAtPmVwLm5hbWUsIGNvdW50LAorCQkgIGlzX2xhc3QgPyAiL0wiIDogIiIsIHJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbCwgcmVxKTsKKworCS8qIHJlcXVlc3RzIGNvbXBsZXRlIHdoZW4gYWxsIElOIGRhdGEgaXMgaW4gdGhlIEZJRk8gKi8KKwlpZiAoaXNfbGFzdCkgeworCQlkb25lKGVwLCByZXEsIDApOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGxoN2E0MHhfZmlmb19yZWFkKHN0cnVjdCBsaDdhNDB4X2VwICplcCwKKwkJCQkJdW5zaWduZWQgY2hhciAqY3AsIGludCBtYXgpCit7CisJaW50IGJ5dGVzOworCWludCBjb3VudCA9IHVzYl9yZWFkKFVTQl9PVVRfRklGT19XQzEpOworCXZvbGF0aWxlIHUzMiAqZmlmbyA9ICh2b2xhdGlsZSB1MzIgKillcC0+ZmlmbzsKKworCWlmIChjb3VudCA+IG1heCkKKwkJY291bnQgPSBtYXg7CisJYnl0ZXMgPSBjb3VudDsKKwl3aGlsZSAoY291bnQtLSkKKwkJKmNwKysgPSAqZmlmbyAmIDB4RkY7CisJcmV0dXJuIGJ5dGVzOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxoN2E0MHhfZmlmb193cml0ZShzdHJ1Y3QgbGg3YTQweF9lcCAqZXAsCisJCQkJCSAgdW5zaWduZWQgY2hhciAqY3AsIGludCBjb3VudCkKK3sKKwl2b2xhdGlsZSB1MzIgKmZpZm8gPSAodm9sYXRpbGUgdTMyICopZXAtPmZpZm87CisJREVCVUdfRVAwKCJmaWZvX3dyaXRlOiAlZCAlZFxuIiwgZXBfaW5kZXgoZXApLCBjb3VudCk7CisJd2hpbGUgKGNvdW50LS0pCisJCSpmaWZvID0gKmNwKys7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9maWZvX2VwMChzdHJ1Y3QgbGg3YTQweF9lcCAqZXAsIHN0cnVjdCBsaDdhNDB4X3JlcXVlc3QgKnJlcSkKK3sKKwl1MzIgY3NyOworCXU4ICpidWY7CisJdW5zaWduZWQgYnVmZmVyc3BhY2UsIGNvdW50LCBpc19zaG9ydDsKKwl2b2xhdGlsZSB1MzIgKmZpZm8gPSAodm9sYXRpbGUgdTMyICopZXAtPmZpZm87CisKKwlERUJVR19FUDAoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJY3NyID0gdXNiX3JlYWQoVVNCX0VQMF9DU1IpOworCWlmICghKGNzciAmIFVTQl9PVVRfQ1NSMV9PVVRfUEtUX1JEWSkpCisJCXJldHVybiAwOworCisJYnVmID0gcmVxLT5yZXEuYnVmICsgcmVxLT5yZXEuYWN0dWFsOworCXByZWZldGNodyhidWYpOworCWJ1ZmZlcnNwYWNlID0gcmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsOworCisJLyogcmVhZCBhbGwgYnl0ZXMgZnJvbSB0aGlzIHBhY2tldCAqLworCWlmIChsaWtlbHkoY3NyICYgRVAwX09VVF9QS1RfUkRZKSkgeworCQljb3VudCA9IHVzYl9yZWFkKFVTQl9PVVRfRklGT19XQzEpOworCQlyZXEtPnJlcS5hY3R1YWwgKz0gbWluKGNvdW50LCBidWZmZXJzcGFjZSk7CisJfSBlbHNlCQkJLyogemxwICovCisJCWNvdW50ID0gMDsKKworCWlzX3Nob3J0ID0gKGNvdW50IDwgZXAtPmVwLm1heHBhY2tldCk7CisJREVCVUdfRVAwKCJyZWFkICVzICUwMngsICVkIGJ5dGVzJXMgcmVxICVwICVkLyVkXG4iLAorCQkgIGVwLT5lcC5uYW1lLCBjc3IsIGNvdW50LAorCQkgIGlzX3Nob3J0ID8gIi9TIiA6ICIiLCByZXEsIHJlcS0+cmVxLmFjdHVhbCwgcmVxLT5yZXEubGVuZ3RoKTsKKworCXdoaWxlIChsaWtlbHkoY291bnQtLSAhPSAwKSkgeworCQl1OCBieXRlID0gKHU4KSAoKmZpZm8gJiAweGZmKTsKKworCQlpZiAodW5saWtlbHkoYnVmZmVyc3BhY2UgPT0gMCkpIHsKKwkJCS8qIHRoaXMgaGFwcGVucyB3aGVuIHRoZSBkcml2ZXIncyBidWZmZXIKKwkJCSAqIGlzIHNtYWxsZXIgdGhhbiB3aGF0IHRoZSBob3N0IHNlbnQuCisJCQkgKiBkaXNjYXJkIHRoZSBleHRyYSBkYXRhLgorCQkJICovCisJCQlpZiAocmVxLT5yZXEuc3RhdHVzICE9IC1FT1ZFUkZMT1cpCisJCQkJREVCVUdfRVAwKCIlcyBvdmVyZmxvdyAlZFxuIiwgZXAtPmVwLm5hbWUsCisJCQkJCSAgY291bnQpOworCQkJcmVxLT5yZXEuc3RhdHVzID0gLUVPVkVSRkxPVzsKKwkJfSBlbHNlIHsKKwkJCSpidWYrKyA9IGJ5dGU7CisJCQlidWZmZXJzcGFjZS0tOworCQl9CisJfQorCisJLyogY29tcGxldGlvbiAqLworCWlmIChpc19zaG9ydCB8fCByZXEtPnJlcS5hY3R1YWwgPT0gcmVxLT5yZXEubGVuZ3RoKSB7CisJCWRvbmUoZXAsIHJlcSwgMCk7CisJCXJldHVybiAxOworCX0KKworCS8qIGZpbmlzaGVkIHRoYXQgcGFja2V0LiAgdGhlIG5leHQgb25lIG1heSBiZSB3YWl0aW5nLi4uICovCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdWRjX3NldF9hZGRyZXNzIC0gc2V0IHRoZSBVU0IgYWRkcmVzcyBmb3IgdGhpcyBkZXZpY2UKKyAqIEBhZGRyZXNzOgorICoKKyAqIENhbGxlZCBmcm9tIGNvbnRyb2wgZW5kcG9pbnQgZnVuY3Rpb24gYWZ0ZXIgaXQgZGVjb2RlcyBhIHNldCBhZGRyZXNzIHNldHVwIHBhY2tldC4KKyAqLworc3RhdGljIHZvaWQgdWRjX3NldF9hZGRyZXNzKHN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2LCB1bnNpZ25lZCBjaGFyIGFkZHJlc3MpCit7CisJREVCVUdfRVAwKCIlczogJWRcbiIsIF9fRlVOQ1RJT05fXywgYWRkcmVzcyk7CisJLyogYy5mLiAxNS4xLjIuMiBUYWJsZSAxNS00IGFkZHJlc3Mgd2lsbCBiZSB1c2VkIGFmdGVyIERBVEFfRU5EIGlzIHNldCAqLworCWRldi0+dXNiX2FkZHJlc3MgPSBhZGRyZXNzOworCXVzYl9zZXQoKGFkZHJlc3MgJiBVU0JfRkFfRlVOQ1RJT05fQUREUiksIFVTQl9GQSk7CisJdXNiX3NldChVU0JfRkFfQUREUl9VUERBVEUgfCAoYWRkcmVzcyAmIFVTQl9GQV9GVU5DVElPTl9BRERSKSwgVVNCX0ZBKTsKKwkvKiB1c2JfcmVhZChVU0JfRkEpOyAqLworfQorCisvKgorICogREFUQV9TVEFURV9SRUNWIChPVVRfUEtUX1JEWSkKKyAqICAgICAgLSBpZiBlcnJvcgorICogICAgICAgICAgICAgIHNldCBFUDBfQ0xSX09VVCB8IEVQMF9EQVRBX0VORCB8IEVQMF9TRU5EX1NUQUxMIGJpdHMKKyAqICAgICAgLSBlbHNlCisgKiAgICAgICAgICAgICAgc2V0IEVQMF9DTFJfT1VUIGJpdAorIAkJCQlpZiBsYXN0IHNldCBFUDBfREFUQV9FTkQgYml0CisgKi8KK3N0YXRpYyB2b2lkIGxoN2E0MHhfZXAwX291dChzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiwgdTMyIGNzcikKK3sKKwlzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0ICpyZXE7CisJc3RydWN0IGxoN2E0MHhfZXAgKmVwID0gJmRldi0+ZXBbMF07CisJaW50IHJldDsKKworCURFQlVHX0VQMCgiJXM6ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGNzcik7CisKKwlpZiAobGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkKKwkJcmVxID0gMDsKKwllbHNlCisJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBsaDdhNDB4X3JlcXVlc3QsIHF1ZXVlKTsKKworCWlmIChyZXEpIHsKKworCQlpZiAocmVxLT5yZXEubGVuZ3RoID09IDApIHsKKwkJCURFQlVHX0VQMCgiWkVSTyBMRU5HVEggT1VUIVxuIik7CisJCQl1c2Jfc2V0KChFUDBfQ0xSX09VVCB8IEVQMF9EQVRBX0VORCksIFVTQl9FUDBfQ1NSKTsKKwkJCWRldi0+ZXAwc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKKwkJCXJldHVybjsKKwkJfQorCQlyZXQgPSByZWFkX2ZpZm9fZXAwKGVwLCByZXEpOworCQlpZiAocmV0KSB7CisJCQkvKiBEb25lISAqLworCQkJREVCVUdfRVAwKCIlczogZmluaXNoZWQsIHdhaXRpbmcgZm9yIHN0YXR1c1xuIiwKKwkJCQkgIF9fRlVOQ1RJT05fXyk7CisKKwkJCXVzYl9zZXQoKEVQMF9DTFJfT1VUIHwgRVAwX0RBVEFfRU5EKSwgVVNCX0VQMF9DU1IpOworCQkJZGV2LT5lcDBzdGF0ZSA9IFdBSVRfRk9SX1NFVFVQOworCQl9IGVsc2UgeworCQkJLyogTm90IGRvbmUgeWV0Li4gKi8KKwkJCURFQlVHX0VQMCgiJXM6IG5vdCBmaW5pc2hlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXVzYl9zZXQoRVAwX0NMUl9PVVQsIFVTQl9FUDBfQ1NSKTsKKwkJfQorCX0gZWxzZSB7CisJCURFQlVHX0VQMCgiTk8gUkVRPz8hXG4iKTsKKwl9Cit9CisKKy8qCisgKiBEQVRBX1NUQVRFX1hNSVQKKyAqLworc3RhdGljIGludCBsaDdhNDB4X2VwMF9pbihzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiwgdTMyIGNzcikKK3sKKwlzdHJ1Y3QgbGg3YTQweF9yZXF1ZXN0ICpyZXE7CisJc3RydWN0IGxoN2E0MHhfZXAgKmVwID0gJmRldi0+ZXBbMF07CisJaW50IHJldCwgbmVlZF96bHAgPSAwOworCisJREVCVUdfRVAwKCIlczogJXhcbiIsIF9fRlVOQ1RJT05fXywgY3NyKTsKKworCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKQorCQlyZXEgPSAwOworCWVsc2UKKwkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IGxoN2E0MHhfcmVxdWVzdCwgcXVldWUpOworCisJaWYgKCFyZXEpIHsKKwkJREVCVUdfRVAwKCIlczogTlVMTCBSRVFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAwOworCX0KKworCWlmIChyZXEtPnJlcS5sZW5ndGggPT0gMCkgeworCisJCXVzYl9zZXQoKEVQMF9JTl9QS1RfUkRZIHwgRVAwX0RBVEFfRU5EKSwgVVNCX0VQMF9DU1IpOworCQlkZXYtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCXJldHVybiAxOworCX0KKworCWlmIChyZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWwgPT0gRVAwX1BBQ0tFVFNJWkUpIHsKKwkJLyogTmV4dCB3cml0ZSB3aWxsIGVuZCB3aXRoIHRoZSBwYWNrZXQgc2l6ZSwgKi8KKwkJLyogc28gd2UgbmVlZCBaZXJvLWxlbmd0aC1wYWNrZXQgKi8KKwkJbmVlZF96bHAgPSAxOworCX0KKworCXJldCA9IHdyaXRlX2ZpZm9fZXAwKGVwLCByZXEpOworCisJaWYgKHJldCA9PSAxICYmICFuZWVkX3pscCkgeworCQkvKiBMYXN0IHBhY2tldCAqLworCQlERUJVR19FUDAoIiVzOiBmaW5pc2hlZCwgd2FpdGluZyBmb3Igc3RhdHVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJCXVzYl9zZXQoKEVQMF9JTl9QS1RfUkRZIHwgRVAwX0RBVEFfRU5EKSwgVVNCX0VQMF9DU1IpOworCQlkZXYtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJfSBlbHNlIHsKKwkJREVCVUdfRVAwKCIlczogbm90IGZpbmlzaGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQl1c2Jfc2V0KEVQMF9JTl9QS1RfUkRZLCBVU0JfRVAwX0NTUik7CisJfQorCisJaWYgKG5lZWRfemxwKSB7CisJCURFQlVHX0VQMCgiJXM6IE5lZWQgWkxQIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJdXNiX3NldChFUDBfSU5fUEtUX1JEWSwgVVNCX0VQMF9DU1IpOworCQlkZXYtPmVwMHN0YXRlID0gREFUQV9TVEFURV9ORUVEX1pMUDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBsaDdhNDB4X2hhbmRsZV9nZXRfc3RhdHVzKHN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2LAorCQkJCSAgICAgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKK3sKKwlzdHJ1Y3QgbGg3YTQweF9lcCAqZXAwID0gJmRldi0+ZXBbMF07CisJc3RydWN0IGxoN2E0MHhfZXAgKnFlcDsKKwlpbnQgcmVxdHlwZSA9IChjdHJsLT5iUmVxdWVzdFR5cGUgJiBVU0JfUkVDSVBfTUFTSyk7CisJdTE2IHZhbCA9IDA7CisKKwlpZiAocmVxdHlwZSA9PSBVU0JfUkVDSVBfSU5URVJGQUNFKSB7CisJCS8qIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4KKwkJICogQW5kIGFjY29yZGluZyB0byB0aGUgVVNCIHNwZWMsIHRoaXMgb25lIGRvZXMgbm90aGluZy4uCisJCSAqIEp1c3QgcmV0dXJuIDAKKwkJICovCisJCURFQlVHX1NFVFVQKCJHRVRfU1RBVFVTOiBVU0JfUkVDSVBfSU5URVJGQUNFXG4iKTsKKwl9IGVsc2UgaWYgKHJlcXR5cGUgPT0gVVNCX1JFQ0lQX0RFVklDRSkgeworCQlERUJVR19TRVRVUCgiR0VUX1NUQVRVUzogVVNCX1JFQ0lQX0RFVklDRVxuIik7CisJCXZhbCB8PSAoMSA8PCAwKTsJLyogU2VsZiBwb3dlcmVkICovCisJCS8qdmFsIHw9ICgxPDwxKTsgKi8vKiBSZW1vdGUgd2FrZXVwICovCisJfSBlbHNlIGlmIChyZXF0eXBlID09IFVTQl9SRUNJUF9FTkRQT0lOVCkgeworCQlpbnQgZXBfbnVtID0gKGN0cmwtPndJbmRleCAmIH5VU0JfRElSX0lOKTsKKworCQlERUJVR19TRVRVUAorCQkgICAgKCJHRVRfU1RBVFVTOiBVU0JfUkVDSVBfRU5EUE9JTlQgKCVkKSwgY3RybC0+d0xlbmd0aCA9ICVkXG4iLAorCQkgICAgIGVwX251bSwgY3RybC0+d0xlbmd0aCk7CisKKwkJaWYgKGN0cmwtPndMZW5ndGggPiAyIHx8IGVwX251bSA+IDMpCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkJcWVwID0gJmRldi0+ZXBbZXBfbnVtXTsKKwkJaWYgKGVwX2lzX2luKHFlcCkgIT0gKChjdHJsLT53SW5kZXggJiBVU0JfRElSX0lOKSA/IDEgOiAwKQorCQkgICAgJiYgZXBfaW5kZXgocWVwKSAhPSAwKSB7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCX0KKworCQl1c2Jfc2V0X2luZGV4KGVwX2luZGV4KHFlcCkpOworCisJCS8qIFJldHVybiBzdGF0dXMgb24gbmV4dCBJTiB0b2tlbiAqLworCQlzd2l0Y2ggKHFlcC0+ZXBfdHlwZSkgeworCQljYXNlIGVwX2NvbnRyb2w6CisJCQl2YWwgPQorCQkJICAgICh1c2JfcmVhZChxZXAtPmNzcjEpICYgRVAwX1NFTkRfU1RBTEwpID09CisJCQkgICAgRVAwX1NFTkRfU1RBTEw7CisJCQlicmVhazsKKwkJY2FzZSBlcF9idWxrX2luOgorCQljYXNlIGVwX2ludGVycnVwdDoKKwkJCXZhbCA9CisJCQkgICAgKHVzYl9yZWFkKHFlcC0+Y3NyMSkgJiBVU0JfSU5fQ1NSMV9TRU5EX1NUQUxMKSA9PQorCQkJICAgIFVTQl9JTl9DU1IxX1NFTkRfU1RBTEw7CisJCQlicmVhazsKKwkJY2FzZSBlcF9idWxrX291dDoKKwkJCXZhbCA9CisJCQkgICAgKHVzYl9yZWFkKHFlcC0+Y3NyMSkgJiBVU0JfT1VUX0NTUjFfU0VORF9TVEFMTCkgPT0KKwkJCSAgICBVU0JfT1VUX0NTUjFfU0VORF9TVEFMTDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogQmFjayB0byBFUDAgaW5kZXggKi8KKwkJdXNiX3NldF9pbmRleCgwKTsKKworCQlERUJVR19TRVRVUCgiR0VUX1NUQVRVUywgZXA6ICVkICgleCksIHZhbCA9ICVkXG4iLCBlcF9udW0sCisJCQkgICAgY3RybC0+d0luZGV4LCB2YWwpOworCX0gZWxzZSB7CisJCURFQlVHX1NFVFVQKCJVbmtub3duIFJFUSBUWVBFOiAlZFxuIiwgcmVxdHlwZSk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwkvKiBDbGVhciAib3V0IHBhY2tldCByZWFkeSIgKi8KKwl1c2Jfc2V0KChFUDBfQ0xSX09VVCksIFVTQl9FUDBfQ1NSKTsKKwkvKiBQdXQgc3RhdHVzIHRvIEZJRk8gKi8KKwlsaDdhNDB4X2ZpZm9fd3JpdGUoZXAwLCAodTggKikgJiB2YWwsIHNpemVvZih2YWwpKTsKKwkvKiBJc3N1ZSAiSW4gcGFja2V0IHJlYWR5IiAqLworCXVzYl9zZXQoKEVQMF9JTl9QS1RfUkRZIHwgRVAwX0RBVEFfRU5EKSwgVVNCX0VQMF9DU1IpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXQUlUX0ZPUl9TRVRVUCAoT1VUX1BLVF9SRFkpCisgKiAgICAgIC0gcmVhZCBkYXRhIHBhY2tldCBmcm9tIEVQMCBGSUZPCisgKiAgICAgIC0gZGVjb2RlIGNvbW1hbmQKKyAqICAgICAgLSBpZiBlcnJvcgorICogICAgICAgICAgICAgIHNldCBFUDBfQ0xSX09VVCB8IEVQMF9EQVRBX0VORCB8IEVQMF9TRU5EX1NUQUxMIGJpdHMKKyAqICAgICAgLSBlbHNlCisgKiAgICAgICAgICAgICAgc2V0IEVQMF9DTFJfT1VUIHwgRVAwX0RBVEFfRU5EIGJpdHMKKyAqLworc3RhdGljIHZvaWQgbGg3YTQweF9lcDBfc2V0dXAoc3RydWN0IGxoN2E0MHhfdWRjICpkZXYsIHUzMiBjc3IpCit7CisJc3RydWN0IGxoN2E0MHhfZXAgKmVwID0gJmRldi0+ZXBbMF07CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCBjdHJsOworCWludCBpLCBieXRlcywgaXNfaW47CisKKwlERUJVR19TRVRVUCgiJXM6ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGNzcik7CisKKwkvKiBOdWtlIGFsbCBwcmV2aW91cyB0cmFuc2ZlcnMgKi8KKwludWtlKGVwLCAtRVBST1RPKTsKKworCS8qIHJlYWQgY29udHJvbCByZXEgZnJvbSBmaWZvICg4IGJ5dGVzKSAqLworCWJ5dGVzID0gbGg3YTQweF9maWZvX3JlYWQoZXAsICh1bnNpZ25lZCBjaGFyICopJmN0cmwsIDgpOworCisJREVCVUdfU0VUVVAoIlJlYWQgQ1RSTCBSRVEgJWQgYnl0ZXNcbiIsIGJ5dGVzKTsKKwlERUJVR19TRVRVUCgiQ1RSTC5iUmVxdWVzdFR5cGUgPSAlZCAoaXNfaW4gJWQpXG4iLCBjdHJsLmJSZXF1ZXN0VHlwZSwKKwkJICAgIGN0cmwuYlJlcXVlc3RUeXBlID09IFVTQl9ESVJfSU4pOworCURFQlVHX1NFVFVQKCJDVFJMLmJSZXF1ZXN0ID0gJWRcbiIsIGN0cmwuYlJlcXVlc3QpOworCURFQlVHX1NFVFVQKCJDVFJMLndMZW5ndGggPSAlZFxuIiwgY3RybC53TGVuZ3RoKTsKKwlERUJVR19TRVRVUCgiQ1RSTC53VmFsdWUgPSAlZCAoJWQpXG4iLCBjdHJsLndWYWx1ZSwgY3RybC53VmFsdWUgPj4gOCk7CisJREVCVUdfU0VUVVAoIkNUUkwud0luZGV4ID0gJWRcbiIsIGN0cmwud0luZGV4KTsKKworCS8qIFNldCBkaXJlY3Rpb24gb2YgRVAwICovCisJaWYgKGxpa2VseShjdHJsLmJSZXF1ZXN0VHlwZSAmIFVTQl9ESVJfSU4pKSB7CisJCWVwLT5iRW5kcG9pbnRBZGRyZXNzIHw9IFVTQl9ESVJfSU47CisJCWlzX2luID0gMTsKKwl9IGVsc2UgeworCQllcC0+YkVuZHBvaW50QWRkcmVzcyAmPSB+VVNCX0RJUl9JTjsKKwkJaXNfaW4gPSAwOworCX0KKworCWRldi0+cmVxX3BlbmRpbmcgPSAxOworCisJLyogSGFuZGxlIHNvbWUgU0VUVVAgcGFja2V0cyBvdXJzZWx2ZXMgKi8KKwlzd2l0Y2ggKGN0cmwuYlJlcXVlc3QpIHsKKwljYXNlIFVTQl9SRVFfU0VUX0FERFJFU1M6CisJCWlmIChjdHJsLmJSZXF1ZXN0VHlwZSAhPSAoVVNCX1RZUEVfU1RBTkRBUkQgfCBVU0JfUkVDSVBfREVWSUNFKSkKKwkJCWJyZWFrOworCisJCURFQlVHX1NFVFVQKCJVU0JfUkVRX1NFVF9BRERSRVNTICglZClcbiIsIGN0cmwud1ZhbHVlKTsKKwkJdWRjX3NldF9hZGRyZXNzKGRldiwgY3RybC53VmFsdWUpOworCQl1c2Jfc2V0KChFUDBfQ0xSX09VVCB8IEVQMF9EQVRBX0VORCksIFVTQl9FUDBfQ1NSKTsKKwkJcmV0dXJuOworCisJY2FzZSBVU0JfUkVRX0dFVF9TVEFUVVM6eworCQkJaWYgKGxoN2E0MHhfaGFuZGxlX2dldF9zdGF0dXMoZGV2LCAmY3RybCkgPT0gMCkKKwkJCQlyZXR1cm47CisKKwljYXNlIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRToKKwljYXNlIFVTQl9SRVFfU0VUX0ZFQVRVUkU6CisJCQlpZiAoY3RybC5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0VORFBPSU5UKSB7CisJCQkJc3RydWN0IGxoN2E0MHhfZXAgKnFlcDsKKwkJCQlpbnQgZXBfbnVtID0gKGN0cmwud0luZGV4ICYgMHgwZik7CisKKwkJCQkvKiBTdXBwb3J0IG9ubHkgSEFMVCBmZWF0dXJlICovCisJCQkJaWYgKGN0cmwud1ZhbHVlICE9IDAgfHwgY3RybC53TGVuZ3RoICE9IDAKKwkJCQkgICAgfHwgZXBfbnVtID4gMyB8fCBlcF9udW0gPCAxKQorCQkJCQlicmVhazsKKworCQkJCXFlcCA9ICZkZXYtPmVwW2VwX251bV07CisJCQkJaWYgKGN0cmwuYlJlcXVlc3QgPT0gVVNCX1JFUV9TRVRfRkVBVFVSRSkgeworCQkJCQlERUJVR19TRVRVUCgiU0VUX0ZFQVRVUkUgKCVkKVxuIiwKKwkJCQkJCSAgICBlcF9udW0pOworCQkJCQlsaDdhNDB4X3NldF9oYWx0KCZxZXAtPmVwLCAxKTsKKwkJCQl9IGVsc2UgeworCQkJCQlERUJVR19TRVRVUCgiQ0xSX0ZFQVRVUkUgKCVkKVxuIiwKKwkJCQkJCSAgICBlcF9udW0pOworCQkJCQlsaDdhNDB4X3NldF9oYWx0KCZxZXAtPmVwLCAwKTsKKwkJCQl9CisJCQkJdXNiX3NldF9pbmRleCgwKTsKKworCQkJCS8qIFJlcGx5IHdpdGggYSBaTFAgb24gbmV4dCBJTiB0b2tlbiAqLworCQkJCXVzYl9zZXQoKEVQMF9DTFJfT1VUIHwgRVAwX0RBVEFfRU5EKSwKKwkJCQkJVVNCX0VQMF9DU1IpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAobGlrZWx5KGRldi0+ZHJpdmVyKSkgeworCQkvKiBkZXZpY2UtMi1ob3N0IChJTikgb3Igbm8gZGF0YSBzZXR1cCBjb21tYW5kLCBwcm9jZXNzIGltbWVkaWF0ZWx5ICovCisJCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOworCQlpID0gZGV2LT5kcml2ZXItPnNldHVwKCZkZXYtPmdhZGdldCwgJmN0cmwpOworCQlzcGluX2xvY2soJmRldi0+bG9jayk7CisKKwkJaWYgKGkgPCAwKSB7CisJCQkvKiBzZXR1cCBwcm9jZXNzaW5nIGZhaWxlZCwgZm9yY2Ugc3RhbGwgKi8KKwkJCURFQlVHX1NFVFVQCisJCQkgICAgKCIgIC0tPiBFUlJPUjogZ2FkZ2V0IHNldHVwIEZBSUxFRCAoc3RhbGxpbmcpLCBzZXR1cCByZXR1cm5lZCAlZFxuIiwKKwkJCSAgICAgaSk7CisJCQl1c2Jfc2V0X2luZGV4KDApOworCQkJdXNiX3NldCgoRVAwX0NMUl9PVVQgfCBFUDBfREFUQV9FTkQgfCBFUDBfU0VORF9TVEFMTCksCisJCQkJVVNCX0VQMF9DU1IpOworCisJCQkvKiBlcC0+c3RvcHBlZCA9IDE7ICovCisJCQlkZXYtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCX0KKwl9Cit9CisKKy8qCisgKiBEQVRBX1NUQVRFX05FRURfWkxQCisgKi8KK3N0YXRpYyB2b2lkIGxoN2E0MHhfZXAwX2luX3pscChzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiwgdTMyIGNzcikKK3sKKwlERUJVR19FUDAoIiVzOiAleFxuIiwgX19GVU5DVElPTl9fLCBjc3IpOworCisJLyogYy5mLiBUYWJsZSAxNS0xNCAqLworCXVzYl9zZXQoKEVQMF9JTl9QS1RfUkRZIHwgRVAwX0RBVEFfRU5EKSwgVVNCX0VQMF9DU1IpOworCWRldi0+ZXAwc3RhdGUgPSBXQUlUX0ZPUl9TRVRVUDsKK30KKworLyoKKyAqIGhhbmRsZSBlcDAgaW50ZXJydXB0CisgKi8KK3N0YXRpYyB2b2lkIGxoN2E0MHhfaGFuZGxlX2VwMChzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiwgdTMyIGludHIpCit7CisJc3RydWN0IGxoN2E0MHhfZXAgKmVwID0gJmRldi0+ZXBbMF07CisJdTMyIGNzcjsKKworCS8qIFNldCBpbmRleCAwICovCisJdXNiX3NldF9pbmRleCgwKTsKKyAJY3NyID0gdXNiX3JlYWQoVVNCX0VQMF9DU1IpOworCisJREVCVUdfRVAwKCIlczogY3NyID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgY3NyKTsKKworCS8qCisJICogRm9yIG92ZXJ2aWV3IG9mIHdoYXQgd2Ugc2hvdWxkIGJlIGRvaW5nIHNlZSBjLmYuIENoYXB0ZXIgMTguMS4yLjQKKwkgKiBXZSB3aWxsIGZvbGxvdyB0aGF0IG91dGxpbmUgaGVyZSBtb2RpZmllZCBieSBvdXIgb3duIGdsb2JhbCBzdGF0ZQorCSAqIGluZGljYXRpb24gd2hpY2ggcHJvdmlkZXMgaGludHMgYXMgdG8gd2hhdCB3ZSB0aGluayBzaG91bGQgYmUKKwkgKiBoYXBwZW5pbmcuLgorCSAqLworCisJLyoKKwkgKiBpZiBTRU5UX1NUQUxMIGlzIHNldAorCSAqICAgICAgLSBjbGVhciB0aGUgU0VOVF9TVEFMTCBiaXQKKwkgKi8KKwlpZiAoY3NyICYgRVAwX1NFTlRfU1RBTEwpIHsKKwkJREVCVUdfRVAwKCIlczogRVAwX1NFTlRfU1RBTEwgaXMgc2V0OiAleFxuIiwgX19GVU5DVElPTl9fLCBjc3IpOworCQl1c2JfY2xlYXIoKEVQMF9TRU5UX1NUQUxMIHwgRVAwX1NFTkRfU1RBTEwpLCBVU0JfRVAwX0NTUik7CisJCW51a2UoZXAsIC1FQ09OTkFCT1JURUQpOworCQlkZXYtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIGlmIGEgdHJhbnNmZXIgaXMgaW4gcHJvZ3Jlc3MgJiYgSU5fUEtUX1JEWSBhbmQgT1VUX1BLVF9SRFkgYXJlIGNsZWFyCisJICogICAgICAtIGZpbGwgRVAwIEZJRk8KKwkgKiAgICAgIC0gaWYgbGFzdCBwYWNrZXQKKwkgKiAgICAgIC0gICAgICAgc2V0IElOX1BLVF9SRFkgfCBEQVRBX0VORAorCSAqICAgICAgLSBlbHNlCisJICogICAgICAgICAgICAgIHNldCBJTl9QS1RfUkRZCisJICovCisJaWYgKCEoY3NyICYgKEVQMF9JTl9QS1RfUkRZIHwgRVAwX09VVF9QS1RfUkRZKSkpIHsKKwkJREVCVUdfRVAwKCIlczogSU5fUEtUX1JEWSBhbmQgT1VUX1BLVF9SRFkgYXJlIGNsZWFyXG4iLAorCQkJICBfX0ZVTkNUSU9OX18pOworCisJCXN3aXRjaCAoZGV2LT5lcDBzdGF0ZSkgeworCQljYXNlIERBVEFfU1RBVEVfWE1JVDoKKwkJCURFQlVHX0VQMCgiY29udGludWUgd2l0aCBEQVRBX1NUQVRFX1hNSVRcbiIpOworCQkJbGg3YTQweF9lcDBfaW4oZGV2LCBjc3IpOworCQkJcmV0dXJuOworCQljYXNlIERBVEFfU1RBVEVfTkVFRF9aTFA6CisJCQlERUJVR19FUDAoImNvbnRpbnVlIHdpdGggREFUQV9TVEFURV9ORUVEX1pMUFxuIik7CisJCQlsaDdhNDB4X2VwMF9pbl96bHAoZGV2LCBjc3IpOworCQkJcmV0dXJuOworCQlkZWZhdWx0OgorCQkJLyogU3RhbGw/ICovCisJCQlERUJVR19FUDAoIk9kZCBzdGF0ZSEhIHN0YXRlID0gJXNcbiIsCisJCQkJICBzdGF0ZV9uYW1lc1tkZXYtPmVwMHN0YXRlXSk7CisJCQlkZXYtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJCQkvKiBudWtlKGVwLCAwKTsgKi8KKwkJCS8qIHVzYl9zZXQoRVAwX1NFTkRfU1RBTEwsIGVwLT5jc3IxKTsgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBpZiBTRVRVUF9FTkQgaXMgc2V0CisJICogICAgICAtIGFib3J0IHRoZSBsYXN0IHRyYW5zZmVyCisJICogICAgICAtIHNldCBTRVJWSUNFRF9TRVRVUF9FTkRfQklUCisJICovCisJaWYgKGNzciAmIEVQMF9TRVRVUF9FTkQpIHsKKwkJREVCVUdfRVAwKCIlczogRVAwX1NFVFVQX0VORCBpcyBzZXQ6ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGNzcik7CisKKwkJdXNiX3NldChFUDBfQ0xSX1NFVFVQX0VORCwgVVNCX0VQMF9DU1IpOworCisJCW51a2UoZXAsIDApOworCQlkZXYtPmVwMHN0YXRlID0gV0FJVF9GT1JfU0VUVVA7CisJfQorCisJLyoKKwkgKiBpZiBFUDBfT1VUX1BLVF9SRFkgaXMgc2V0CisJICogICAgICAtIHJlYWQgZGF0YSBwYWNrZXQgZnJvbSBFUDAgRklGTworCSAqICAgICAgLSBkZWNvZGUgY29tbWFuZAorCSAqICAgICAgLSBpZiBlcnJvcgorCSAqICAgICAgICAgICAgICBzZXQgU0VSVklDRURfT1VUX1BLVF9SRFkgfCBEQVRBX0VORCBiaXRzIHwgU0VORF9TVEFMTAorCSAqICAgICAgLSBlbHNlCisJICogICAgICAgICAgICAgIHNldCBTRVJWSUNFRF9PVVRfUEtUX1JEWSB8IERBVEFfRU5EIGJpdHMKKwkgKi8KKwlpZiAoY3NyICYgRVAwX09VVF9QS1RfUkRZKSB7CisKKwkJREVCVUdfRVAwKCIlczogRVAwX09VVF9QS1RfUkRZIGlzIHNldDogJXhcbiIsIF9fRlVOQ1RJT05fXywKKwkJCSAgY3NyKTsKKworCQlzd2l0Y2ggKGRldi0+ZXAwc3RhdGUpIHsKKwkJY2FzZSBXQUlUX0ZPUl9TRVRVUDoKKwkJCURFQlVHX0VQMCgiV0FJVF9GT1JfU0VUVVBcbiIpOworCQkJbGg3YTQweF9lcDBfc2V0dXAoZGV2LCBjc3IpOworCQkJYnJlYWs7CisKKwkJY2FzZSBEQVRBX1NUQVRFX1JFQ1Y6CisJCQlERUJVR19FUDAoIkRBVEFfU1RBVEVfUkVDVlxuIik7CisJCQlsaDdhNDB4X2VwMF9vdXQoZGV2LCBjc3IpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCS8qIHNlbmQgc3RhbGw/ICovCisJCQlERUJVR19FUDAoInN0cmFuZ2Ugc3RhdGUhISAyLiBzZW5kIHN0YWxsPyBzdGF0ZSA9ICVkXG4iLAorCQkJCSAgZGV2LT5lcDBzdGF0ZSk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgbGg3YTQweF9lcDBfa2ljayhzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiwgc3RydWN0IGxoN2E0MHhfZXAgKmVwKQoreworCXUzMiBjc3I7CisKKwl1c2Jfc2V0X2luZGV4KDApOworCWNzciA9IHVzYl9yZWFkKFVTQl9FUDBfQ1NSKTsKKworCURFQlVHX0VQMCgiJXM6ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGNzcik7CisKKwkvKiBDbGVhciAib3V0IHBhY2tldCByZWFkeSIgKi8KKwl1c2Jfc2V0KEVQMF9DTFJfT1VULCBVU0JfRVAwX0NTUik7CisKKwlpZiAoZXBfaXNfaW4oZXApKSB7CisJCWRldi0+ZXAwc3RhdGUgPSBEQVRBX1NUQVRFX1hNSVQ7CisJCWxoN2E0MHhfZXAwX2luKGRldiwgY3NyKTsKKwl9IGVsc2UgeworCQlkZXYtPmVwMHN0YXRlID0gREFUQV9TVEFURV9SRUNWOworCQlsaDdhNDB4X2VwMF9vdXQoZGV2LCBjc3IpOworCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAJZGV2aWNlLXNjb3BlZCBwYXJ0cyBvZiB0aGUgYXBpIHRvIHRoZSB1c2IgY29udHJvbGxlciBoYXJkd2FyZQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RhdGljIGludCBsaDdhNDB4X3VkY19nZXRfZnJhbWUoc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQpCit7CisJdTMyIGZyYW1lMSA9IHVzYl9yZWFkKFVTQl9GUk1fTlVNMSk7CS8qIExlYXN0IHNpZ25pZmljYW50IDggYml0cyAqLworCXUzMiBmcmFtZTIgPSB1c2JfcmVhZChVU0JfRlJNX05VTTIpOwkvKiBNb3N0IHNpZ25pZmljYW50IDMgYml0cyAqLworCURFQlVHKCIlcywgJXBcbiIsIF9fRlVOQ1RJT05fXywgX2dhZGdldCk7CisJcmV0dXJuICgoZnJhbWUyICYgMHgwNykgPDwgOCkgfCAoZnJhbWUxICYgMHhmZik7Cit9CisKK3N0YXRpYyBpbnQgbGg3YTQweF91ZGNfd2FrZXVwKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0KQoreworCS8qIGhvc3QgbWF5IG5vdCBoYXZlIGVuYWJsZWQgcmVtb3RlIHdha2V1cCAqLworCS8qaWYgKChVRENDUzAgJiBVRENDUzBfRFJXRikgPT0gMCkKKwkgICByZXR1cm4gLUVIT1NUVU5SRUFDSDsKKwkgICB1ZGNfc2V0X21hc2tfVURDQ1IoVURDQ1JfUlNNKTsgKi8KKwlyZXR1cm4gLUVOT1RTVVBQOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9nYWRnZXRfb3BzIGxoN2E0MHhfdWRjX29wcyA9IHsKKwkuZ2V0X2ZyYW1lID0gbGg3YTQweF91ZGNfZ2V0X2ZyYW1lLAorCS53YWtldXAgPSBsaDdhNDB4X3VkY193YWtldXAsCisJLyogY3VycmVudCB2ZXJzaW9ucyBtdXN0IGFsd2F5cyBiZSBzZWxmLXBvd2VyZWQgKi8KK307CisKK3N0YXRpYyB2b2lkIG5vcF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlERUJVRygiJXMgJXNcbiIsIF9fRlVOQ1RJT05fXywgZGV2LT5idXNfaWQpOworfQorCitzdGF0aWMgc3RydWN0IGxoN2E0MHhfdWRjIG1lbW9yeSA9IHsKKwkudXNiX2FkZHJlc3MgPSAwLAorCisJLmdhZGdldCA9IHsKKwkJICAgLm9wcyA9ICZsaDdhNDB4X3VkY19vcHMsCisJCSAgIC5lcDAgPSAmbWVtb3J5LmVwWzBdLmVwLAorCQkgICAubmFtZSA9IGRyaXZlcl9uYW1lLAorCQkgICAuZGV2ID0geworCQkJICAgLmJ1c19pZCA9ICJnYWRnZXQiLAorCQkJICAgLnJlbGVhc2UgPSBub3BfcmVsZWFzZSwKKwkJCSAgIH0sCisJCSAgIH0sCisKKwkvKiBjb250cm9sIGVuZHBvaW50ICovCisJLmVwWzBdID0geworCQkgIC5lcCA9IHsKKwkJCSAubmFtZSA9IGVwMG5hbWUsCisJCQkgLm9wcyA9ICZsaDdhNDB4X2VwX29wcywKKwkJCSAubWF4cGFja2V0ID0gRVAwX1BBQ0tFVFNJWkUsCisJCQkgfSwKKwkJICAuZGV2ID0gJm1lbW9yeSwKKworCQkgIC5iRW5kcG9pbnRBZGRyZXNzID0gMCwKKwkJICAuYm1BdHRyaWJ1dGVzID0gMCwKKworCQkgIC5lcF90eXBlID0gZXBfY29udHJvbCwKKwkJICAuZmlmbyA9IGlvX3AydihVU0JfRVAwX0ZJRk8pLAorCQkgIC5jc3IxID0gVVNCX0VQMF9DU1IsCisJCSAgLmNzcjIgPSBVU0JfRVAwX0NTUiwKKwkJICB9LAorCisJLyogZmlyc3QgZ3JvdXAgb2YgZW5kcG9pbnRzICovCisJLmVwWzFdID0geworCQkgIC5lcCA9IHsKKwkJCSAubmFtZSA9ICJlcDFpbi1idWxrIiwKKwkJCSAub3BzID0gJmxoN2E0MHhfZXBfb3BzLAorCQkJIC5tYXhwYWNrZXQgPSA2NCwKKwkJCSB9LAorCQkgIC5kZXYgPSAmbWVtb3J5LAorCisJCSAgLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOIHwgMSwKKwkJICAuYm1BdHRyaWJ1dGVzID0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKworCQkgIC5lcF90eXBlID0gZXBfYnVsa19pbiwKKwkJICAuZmlmbyA9IGlvX3AydihVU0JfRVAxX0ZJRk8pLAorCQkgIC5jc3IxID0gVVNCX0lOX0NTUjEsCisJCSAgLmNzcjIgPSBVU0JfSU5fQ1NSMiwKKwkJICB9LAorCisJLmVwWzJdID0geworCQkgIC5lcCA9IHsKKwkJCSAubmFtZSA9ICJlcDJvdXQtYnVsayIsCisJCQkgLm9wcyA9ICZsaDdhNDB4X2VwX29wcywKKwkJCSAubWF4cGFja2V0ID0gNjQsCisJCQkgfSwKKwkJICAuZGV2ID0gJm1lbW9yeSwKKworCQkgIC5iRW5kcG9pbnRBZGRyZXNzID0gMiwKKwkJICAuYm1BdHRyaWJ1dGVzID0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKworCQkgIC5lcF90eXBlID0gZXBfYnVsa19vdXQsCisJCSAgLmZpZm8gPSBpb19wMnYoVVNCX0VQMl9GSUZPKSwKKwkJICAuY3NyMSA9IFVTQl9PVVRfQ1NSMSwKKwkJICAuY3NyMiA9IFVTQl9PVVRfQ1NSMiwKKwkJICB9LAorCisJLmVwWzNdID0geworCQkgIC5lcCA9IHsKKwkJCSAubmFtZSA9ICJlcDNpbi1pbnQiLAorCQkJIC5vcHMgPSAmbGg3YTQweF9lcF9vcHMsCisJCQkgLm1heHBhY2tldCA9IDY0LAorCQkJIH0sCisJCSAgLmRldiA9ICZtZW1vcnksCisKKwkJICAuYkVuZHBvaW50QWRkcmVzcyA9IFVTQl9ESVJfSU4gfCAzLAorCQkgIC5ibUF0dHJpYnV0ZXMgPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCisKKwkJICAuZXBfdHlwZSA9IGVwX2ludGVycnVwdCwKKwkJICAuZmlmbyA9IGlvX3AydihVU0JfRVAzX0ZJRk8pLAorCQkgIC5jc3IxID0gVVNCX0lOX0NTUjEsCisJCSAgLmNzcjIgPSBVU0JfSU5fQ1NSMiwKKwkJICB9LAorfTsKKworLyoKKyAqIAlwcm9iZSAtIGJpbmRzIHRvIHRoZSBwbGF0Zm9ybSBkZXZpY2UKKyAqLworc3RhdGljIGludCBsaDdhNDB4X3VkY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQoreworCXN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2ID0gJm1lbW9yeTsKKwlpbnQgcmV0dmFsOworCisJREVCVUcoIiVzOiAlcFxuIiwgX19GVU5DVElPTl9fLCBfZGV2KTsKKworCXNwaW5fbG9ja19pbml0KCZkZXYtPmxvY2spOworCWRldi0+ZGV2ID0gX2RldjsKKworCWRldmljZV9pbml0aWFsaXplKCZkZXYtPmdhZGdldC5kZXYpOworCWRldi0+Z2FkZ2V0LmRldi5wYXJlbnQgPSBfZGV2OworCisJdGhlX2NvbnRyb2xsZXIgPSBkZXY7CisJZGV2X3NldF9kcnZkYXRhKF9kZXYsIGRldik7CisKKwl1ZGNfZGlzYWJsZShkZXYpOworCXVkY19yZWluaXQoZGV2KTsKKworCS8qIGlycSBzZXR1cCBhZnRlciBvbGQgaGFyZHdhcmUgc3RhdGUgaXMgY2xlYW5lZCB1cCAqLworCXJldHZhbCA9CisJICAgIHJlcXVlc3RfaXJxKElSUV9VU0JJTlRSLCBsaDdhNDB4X3VkY19pcnEsIFNBX0lOVEVSUlVQVCwgZHJpdmVyX25hbWUsCisJCQlkZXYpOworCWlmIChyZXR2YWwgIT0gMCkgeworCQlERUJVRyhLRVJOX0VSUiAiJXM6IGNhbid0IGdldCBpcnEgJWksIGVyciAlZFxuIiwgZHJpdmVyX25hbWUsCisJCSAgICAgIElSUV9VU0JJTlRSLCByZXR2YWwpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWNyZWF0ZV9wcm9jX2ZpbGVzKCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGxoN2E0MHhfdWRjX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQoreworCXN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2ID0gX2Rldi0+ZHJpdmVyX2RhdGE7CisKKwlERUJVRygiJXM6ICVwXG4iLCBfX0ZVTkNUSU9OX18sIGRldik7CisKKwl1ZGNfZGlzYWJsZShkZXYpOworCXJlbW92ZV9wcm9jX2ZpbGVzKCk7CisJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihkZXYtPmRyaXZlcik7CisKKwlmcmVlX2lycShJUlFfVVNCSU5UUiwgZGV2KTsKKworCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCAwKTsKKworCXRoZV9jb250cm9sbGVyID0gMDsKKworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdWRjX2RyaXZlciA9IHsKKwkubmFtZSA9IChjaGFyICopZHJpdmVyX25hbWUsCisJLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkucHJvYmUgPSBsaDdhNDB4X3VkY19wcm9iZSwKKwkucmVtb3ZlID0gbGg3YTQweF91ZGNfcmVtb3ZlCisJICAgIC8qIEZJWE1FIHBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydCAqLworCSAgICAvKiAuc3VzcGVuZCA9IC4uLiBkaXNhYmxlIFVEQyAqLworCSAgICAvKiAucmVzdW1lID0gLi4uIHJlLWVuYWJsZSBVREMgKi8KK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVkY19pbml0KHZvaWQpCit7CisJREVCVUcoIiVzOiAlcyB2ZXJzaW9uICVzXG4iLCBfX0ZVTkNUSU9OX18sIGRyaXZlcl9uYW1lLCBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmdWRjX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1ZGNfZXhpdCh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodWRjX2luaXQpOworbW9kdWxlX2V4aXQodWRjX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0FVVEhPUigiTWlra28gTGFodGVlbm1ha2ksIEJvIEhlbnJpa3NlbiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmI0NTVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmgKQEAgLTAsMCArMSwyNjEgQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuaAorICogU2hhcnAgTEg3QTQweCBvbi1jaGlwIGZ1bGwgc3BlZWQgVVNCIGRldmljZSBjb250cm9sbGVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBNaWtrbyBMYWh0ZWVubWFraSwgTm9yZGljIElECisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQm8gSGVucmlrc2VuLCBOb3JkaWMgSUQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19MSDdBNDBYX0hfCisjZGVmaW5lIF9fTEg3QTQwWF9IXworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYl9jaDkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CisKKy8qCisgKiBNZW1vcnkgbWFwCisgKi8KKworI2RlZmluZSBVU0JfRkEJCQkJCTB4ODAwMDAyMDAJLy8gZnVuY3Rpb24gYWRkcmVzcyByZWdpc3RlcgorI2RlZmluZSBVU0JfUE0JCQkJCTB4ODAwMDAyMDQJLy8gcG93ZXIgbWFuYWdlbWVudCByZWdpc3RlcgorCisjZGVmaW5lIFVTQl9JTl9JTlQJCQkJMHg4MDAwMDIwOAkvLyBJTiBpbnRlcnJ1cHQgcmVnaXN0ZXIgYmFuayAoRVAwLUVQMykKKyNkZWZpbmUgVVNCX09VVF9JTlQJCQkJMHg4MDAwMDIxMAkvLyBPVVQgaW50ZXJydXB0IHJlZ2lzdGVyIGJhbmsgKEVQMikKKyNkZWZpbmUgVVNCX0lOVAkJCQkJMHg4MDAwMDIxOAkvLyBpbnRlcnJ1cHQgcmVnaXN0ZXIgYmFuaworCisjZGVmaW5lIFVTQl9JTl9JTlRfRU4JCQkweDgwMDAwMjFDCS8vIElOIGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgYmFuaworI2RlZmluZSBVU0JfT1VUX0lOVF9FTgkJCTB4ODAwMDAyMjQJLy8gT1VUIGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgYmFuaworI2RlZmluZSBVU0JfSU5UX0VOCQkJCTB4ODAwMDAyMkMJLy8gVVNCIGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgYmFuaworCisjZGVmaW5lIFVTQl9GUk1fTlVNMQkJCTB4ODAwMDAyMzAJLy8gRnJhbWUgbnVtYmVyMSByZWdpc3RlcgorI2RlZmluZSBVU0JfRlJNX05VTTIJCQkweDgwMDAwMjM0CS8vIEZyYW1lIG51bWJlcjIgcmVnaXN0ZXIKKyNkZWZpbmUgVVNCX0lOREVYCQkJCTB4ODAwMDAyMzgJLy8gaW5kZXggcmVnaXN0ZXIKKworI2RlZmluZSBVU0JfSU5fTUFYUAkJCQkweDgwMDAwMjQwCS8vIElOIE1BWFAgcmVnaXN0ZXIKKyNkZWZpbmUgVVNCX0lOX0NTUjEJCQkJMHg4MDAwMDI0NAkvLyBJTiBDU1IxIHJlZ2lzdGVyL0VQMCBDU1IgcmVnaXN0ZXIKKyNkZWZpbmUgVVNCX0VQMF9DU1IJCQkJMHg4MDAwMDI0NAkvLyBJTiBDU1IxIHJlZ2lzdGVyL0VQMCBDU1IgcmVnaXN0ZXIKKyNkZWZpbmUgVVNCX0lOX0NTUjIJCQkJMHg4MDAwMDI0OAkvLyBJTiBDU1IyIHJlZ2lzdGVyCisjZGVmaW5lIFVTQl9PVVRfTUFYUAkJCTB4ODAwMDAyNEMJLy8gT1VUIE1BWFAgcmVnaXN0ZXIKKworI2RlZmluZSBVU0JfT1VUX0NTUjEJCQkweDgwMDAwMjUwCS8vIE9VVCBDU1IxIHJlZ2lzdGVyCisjZGVmaW5lIFVTQl9PVVRfQ1NSMgkJCTB4ODAwMDAyNTQJLy8gT1VUIENTUjIgcmVnaXN0ZXIKKyNkZWZpbmUgVVNCX09VVF9GSUZPX1dDMQkJMHg4MDAwMDI1OAkvLyBPVVQgRklGTyB3cml0ZSBjb3VudDEgcmVnaXN0ZXIKKyNkZWZpbmUgVVNCX09VVF9GSUZPX1dDMgkJMHg4MDAwMDI1QwkvLyBPVVQgRklGTyB3cml0ZSBjb3VudDIgcmVnaXN0ZXIKKworI2RlZmluZSBVU0JfUkVTRVQJCQkJMHg4MDAwMDQ0QwkvLyBVU0IgcmVzZXQgcmVnaXN0ZXIKKworI2RlZmluZQlVU0JfRVAwX0ZJRk8JCQkweDgwMDAwMjgwCisjZGVmaW5lCVVTQl9FUDFfRklGTwkJCTB4ODAwMDAyODQKKyNkZWZpbmUJVVNCX0VQMl9GSUZPCQkJMHg4MDAwMDI4OAorI2RlZmluZQlVU0JfRVAzX0ZJRk8JCQkweDgwMDAwMjhjCisKKy8qCisgKiBVU0IgcmVzZXQgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBVU0JfUkVTRVRfQVBCCQkJKDE8PDEpCS8vcmVzZXRzIFVTQiBBUEIgY29udHJvbCBzaWRlIFdSSVRFCisjZGVmaW5lIFVTQl9SRVNFVF9JTwkJCSgxPDwwKQkvL3Jlc2V0cyBVU0IgSU8gc2lkZSBXUklURQorCisvKgorICogVVNCIGZ1bmN0aW9uIGFkZHJlc3MgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBVU0JfRkFfQUREUl9VUERBVEUJCSgxPDw3KQorI2RlZmluZSBVU0JfRkFfRlVOQ1RJT05fQUREUgkoMHg3RikKKworLyoKKyAqIFBvd2VyIE1hbmFnZW1lbnQgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBQTV9VU0JfRENQCQkJCSgxPDw1KQorI2RlZmluZSBQTV9VU0JfRU5BQkxFCQkJKDE8PDQpCisjZGVmaW5lIFBNX1VTQl9SRVNFVAkJCSgxPDwzKQorI2RlZmluZSBQTV9VQ19SRVNVTUUJCQkoMTw8MikKKyNkZWZpbmUgUE1fU1VTUEVORF9NT0RFCQkJKDE8PDEpCisjZGVmaW5lIFBNX0VOQUJMRV9TVVNQRU5ECQkoMTw8MCkKKworLyoKKyAqIElOIGludGVycnVwdCByZWdpc3RlcgorICovCisjZGVmaW5lIFVTQl9JTl9JTlRfRVAzCQkJCSgxPDwzKQorI2RlZmluZSBVU0JfSU5fSU5UX0VQMQkJCQkoMTw8MSkKKyNkZWZpbmUgVVNCX0lOX0lOVF9FUDAJCQkJKDE8PDApCisKKy8qCisgKiBPVVQgaW50ZXJydXB0IHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgVVNCX09VVF9JTlRfRVAyCQkJCSgxPDwyKQorCisvKgorICogVVNCIGludGVycnVwdCByZWdpc3RlcgorICovCisjZGVmaW5lIFVTQl9JTlRfUkVTRVRfSU5UCQkJKDE8PDIpCisjZGVmaW5lIFVTQl9JTlRfUkVTVU1FX0lOVAkJCSgxPDwxKQorI2RlZmluZSBVU0JfSU5UX1NVU1BFTkRfSU5UCQkJKDE8PDApCisKKy8qCisgKiBVU0IgaW50ZXJydXB0IGVuYWJsZSByZWdpc3RlcgorICovCisjZGVmaW5lIFVTQl9JTlRfRU5fVVNCX1JFU0VUX0lOVEVSCQkoMTw8MikKKyNkZWZpbmUgVVNCX0lOVF9FTl9SRVNVTUVfSU5URVIJCQkoMTw8MSkKKyNkZWZpbmUgVVNCX0lOVF9FTl9TVVNQRU5EX0lOVEVSCQkoMTw8MCkKKworLyoKKyAqIElOQ1NSMSByZWdpc3RlcgorICovCisjZGVmaW5lIFVTQl9JTl9DU1IxX0NMUl9EQVRBX1RPR0dMRQkJKDE8PDYpCisjZGVmaW5lIFVTQl9JTl9DU1IxX1NFTlRfU1RBTEwJCQkoMTw8NSkKKyNkZWZpbmUgVVNCX0lOX0NTUjFfU0VORF9TVEFMTAkJCSgxPDw0KQorI2RlZmluZSBVU0JfSU5fQ1NSMV9GSUZPX0ZMVVNICQkJKDE8PDMpCisjZGVmaW5lIFVTQl9JTl9DU1IxX0ZJRk9fTk9UX0VNUFRZCQkoMTw8MSkKKyNkZWZpbmUgVVNCX0lOX0NTUjFfSU5fUEtUX1JEWQkJCSgxPDwwKQorCisvKgorICogSU5DU1IyIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgVVNCX0lOX0NTUjJfQVVUT19TRVQJCQkoMTw8NykKKyNkZWZpbmUgVVNCX0lOX0NTUjJfVVNCX0RNQV9FTgkJCSgxPDw0KQorCisvKgorICogT1VUIENTUjEgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBVU0JfT1VUX0NTUjFfQ0xSX0RBVEFfUkVHCQkoMTw8NykKKyNkZWZpbmUgVVNCX09VVF9DU1IxX1NFTlRfU1RBTEwJCQkoMTw8NikKKyNkZWZpbmUgVVNCX09VVF9DU1IxX1NFTkRfU1RBTEwJCQkoMTw8NSkKKyNkZWZpbmUgVVNCX09VVF9DU1IxX0ZJRk9fRkxVU0gJCQkoMTw8NCkKKyNkZWZpbmUgVVNCX09VVF9DU1IxX0ZJRk9fRlVMTAkJCSgxPDwxKQorI2RlZmluZSBVU0JfT1VUX0NTUjFfT1VUX1BLVF9SRFkJCSgxPDwwKQorCisvKgorICogT1VUIENTUjIgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBVU0JfT1VUX0NTUjJfQVVUT19DTFIJCQkoMTw8NykKKyNkZWZpbmUgVVNCX09VVF9DU1IyX1VTQl9ETUFfRU4JCQkoMTw8NCkKKworLyoKKyAqIEVQMCBDU1IKKyAqLworI2RlZmluZSBFUDBfQ0xSX1NFVFVQX0VORAkJKDE8PDcpCS8qIENsZWFyICJTZXR1cCBFbmRzIiBCaXQgKHcpICovCisjZGVmaW5lIEVQMF9DTFJfT1VUCQkJCSgxPDw2KQkvKiBDbGVhciAiT3V0IHBhY2tldCByZWFkeSIgQml0ICh3KSAqLworI2RlZmluZSBFUDBfU0VORF9TVEFMTAkJCSgxPDw1KQkvKiBTZW5kIFNUQUxMIEhhbmRzaGFrZSAocncpICovCisjZGVmaW5lIEVQMF9TRVRVUF9FTkQJCQkoMTw8NCkJLyogU2V0dXAgRW5kcyAocikgKi8KKworI2RlZmluZSBFUDBfREFUQV9FTkQJCQkoMTw8MykJLyogRGF0YSBlbmQgKHJ3KSAqLworI2RlZmluZSBFUDBfU0VOVF9TVEFMTAkJCSgxPDwyKQkvKiBTZW50IFN0YWxsIEhhbmRzaGFrZSAocikgKi8KKyNkZWZpbmUgRVAwX0lOX1BLVF9SRFkJCQkoMTw8MSkJLyogSW4gcGFja2V0IHJlYWR5IChydykgKi8KKyNkZWZpbmUgRVAwX09VVF9QS1RfUkRZCQkJKDE8PDApCS8qIE91dCBwYWNrZXQgcmVhZHkgKHIpICovCisKKy8qIGdlbmVyYWwgQ1NSICovCisjZGVmaW5lIE9VVF9QS1RfUkRZCQkoMTw8MCkKKyNkZWZpbmUgSU5fUEtUX1JEWQkJKDE8PDApCisKKy8qCisgKiBJTi9PVVQgTUFYUCByZWdpc3RlcgorICovCisjZGVmaW5lIFVTQl9PVVRfTUFYUF9NQVhQCQkJKDB4RikKKyNkZWZpbmUgVVNCX0lOX01BWFBfTUFYUAkJCSgweEYpCisKKy8vIE1heCBwYWNrZXQgc2l6ZQorLy8jZGVmaW5lIEVQMF9QQUNLRVRTSVpFICAgICAgICAweDEwCisjZGVmaW5lIEVQMF9QQUNLRVRTSVpFICAJMHg4CisjZGVmaW5lIEVQMF9NQVhQQUNLRVRTSVpFICAJMHgxMAorCisjZGVmaW5lIFVEQ19NQVhfRU5EUE9JTlRTICAgICAgIDQKKworI2RlZmluZSBXQUlUX0ZPUl9TRVRVUCAgICAgICAgICAwCisjZGVmaW5lIERBVEFfU1RBVEVfWE1JVCAgICAgICAgIDEKKyNkZWZpbmUgREFUQV9TVEFURV9ORUVEX1pMUCAgICAgMgorI2RlZmluZSBXQUlUX0ZPUl9PVVRfU1RBVFVTICAgICAzCisjZGVmaW5lIERBVEFfU1RBVEVfUkVDViAgICAgICAgIDQKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBJTworICovCisKK3R5cGVkZWYgZW51bSBlcF90eXBlIHsKKwllcF9jb250cm9sLCBlcF9idWxrX2luLCBlcF9idWxrX291dCwgZXBfaW50ZXJydXB0Cit9IGVwX3R5cGVfdDsKKworc3RydWN0IGxoN2E0MHhfZXAgeworCXN0cnVjdCB1c2JfZXAgZXA7CisJc3RydWN0IGxoN2E0MHhfdWRjICpkZXY7CisKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2M7CisJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZTsKKwl1bnNpZ25lZCBsb25nIHBpb19pcnFzOworCisJdTggc3RvcHBlZDsKKwl1OCBiRW5kcG9pbnRBZGRyZXNzOworCXU4IGJtQXR0cmlidXRlczsKKworCWVwX3R5cGVfdCBlcF90eXBlOworCXUzMiBmaWZvOworCXUzMiBjc3IxOworCXUzMiBjc3IyOworfTsKKworc3RydWN0IGxoN2E0MHhfcmVxdWVzdCB7CisJc3RydWN0IHVzYl9yZXF1ZXN0IHJlcTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlOworfTsKKworc3RydWN0IGxoN2E0MHhfdWRjIHsKKwlzdHJ1Y3QgdXNiX2dhZGdldCBnYWRnZXQ7CisJc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXI7CisJc3RydWN0IGRldmljZSAqZGV2OworCXNwaW5sb2NrX3QgbG9jazsKKworCWludCBlcDBzdGF0ZTsKKwlzdHJ1Y3QgbGg3YTQweF9lcCBlcFtVRENfTUFYX0VORFBPSU5UU107CisKKwl1bnNpZ25lZCBjaGFyIHVzYl9hZGRyZXNzOworCisJdW5zaWduZWQgcmVxX3BlbmRpbmc6MSwgcmVxX3N0ZDoxLCByZXFfY29uZmlnOjE7Cit9OworCitleHRlcm4gc3RydWN0IGxoN2E0MHhfdWRjICp0aGVfY29udHJvbGxlcjsKKworI2RlZmluZSBlcF9pc19pbihFUCkgCQkoKChFUCktPmJFbmRwb2ludEFkZHJlc3MmVVNCX0RJUl9JTik9PVVTQl9ESVJfSU4pCisjZGVmaW5lIGVwX2luZGV4KEVQKSAJCSgoRVApLT5iRW5kcG9pbnRBZGRyZXNzJjB4RikKKyNkZWZpbmUgZXBfbWF4cGFja2V0KEVQKSAJKChFUCktPmVwLm1heHBhY2tldCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmRpcy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25kaXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTUzYmJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25kaXMuaApAQCAtMCwwICsxLDIxNyBAQAorLyoKKyAqIG5kaXMuaCAKKyAqIAorICogbnRkZG5kaXMuaCBtb2RpZmllZCBieSBCZW5lZGlrdCBTcHJhbmdlciA8Yi5zcHJhbmdlckBwZW5ndXRyb25peC5kZT4KKyAqIAorICogVGhhbmtzIHRvIHRoZSBjeWd3aW4gZGV2ZWxvcG1lbnQgdGVhbSwgCisgKiBlc3BhY2lhbGx5IHRvIENhc3BlciBTLiBIb3Juc3RydXAgPGNob3Juc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgTk9UIENPUFlSSUdIVEVECisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBvZmZlcmVkIGZvciB1c2UgaW4gdGhlIHB1YmxpYyBkb21haW4uIFlvdSBtYXkKKyAqIHVzZSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgaXQgZnJlZWx5LgorICoKKyAqIFRoaXMgY29kZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFkuIEFMTCBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQgQVJFIEhFUkVCWQorICogRElTQ0xBSU1FRC4gVGhpcyBpbmNsdWRlcyBidXQgaXMgbm90IGxpbWl0ZWQgdG8gd2FycmFudGllcyBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9ORElTX0gKKyNkZWZpbmUgX0xJTlVYX05ESVNfSAorCisKKyNkZWZpbmUgTkRJU19TVEFUVVNfTVVMVElDQVNUX0ZVTEwJICAweEMwMDEwMDA5CisjZGVmaW5lIE5ESVNfU1RBVFVTX01VTFRJQ0FTVF9FWElTVFMgICAgICAweEMwMDEwMDBBCisjZGVmaW5lIE5ESVNfU1RBVFVTX01VTFRJQ0FTVF9OT1RfRk9VTkQgICAweEMwMDEwMDBCCisKK2VudW0gTkRJU19ERVZJQ0VfUE9XRVJfU1RBVEUgeworCU5kaXNEZXZpY2VTdGF0ZVVuc3BlY2lmaWVkID0gMCwKKwlOZGlzRGV2aWNlU3RhdGVEMCwKKwlOZGlzRGV2aWNlU3RhdGVEMSwKKwlOZGlzRGV2aWNlU3RhdGVEMiwKKwlOZGlzRGV2aWNlU3RhdGVEMywKKwlOZGlzRGV2aWNlU3RhdGVNYXhpbXVtCit9OworCitzdHJ1Y3QgTkRJU19QTV9XQUtFX1VQX0NBUEFCSUxJVElFUyB7CisJZW51bSBORElTX0RFVklDRV9QT1dFUl9TVEFURSAgTWluTWFnaWNQYWNrZXRXYWtlVXA7CisJZW51bSBORElTX0RFVklDRV9QT1dFUl9TVEFURSAgTWluUGF0dGVybldha2VVcDsKKwllbnVtIE5ESVNfREVWSUNFX1BPV0VSX1NUQVRFICBNaW5MaW5rQ2hhbmdlV2FrZVVwOworfTsKKworLyogTkRJU19QTlBfQ0FQQUJJTElUSUVTLkZsYWdzIGNvbnN0YW50cyAqLworI2RlZmluZSBORElTX0RFVklDRV9XQUtFX1VQX0VOQUJMRSAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE5ESVNfREVWSUNFX1dBS0VfT05fUEFUVEVSTl9NQVRDSF9FTkFCTEUgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTkRJU19ERVZJQ0VfV0FLRV9PTl9NQUdJQ19QQUNLRVRfRU5BQkxFICAgMHgwMDAwMDAwNAorCitzdHJ1Y3QgTkRJU19QTlBfQ0FQQUJJTElUSUVTIHsKKwl1MzIJCQkJCUZsYWdzOworCXN0cnVjdCBORElTX1BNX1dBS0VfVVBfQ0FQQUJJTElUSUVTCVdha2VVcENhcGFiaWxpdGllczsKK307CisKK3N0cnVjdCBORElTX1BNX1BBQ0tFVF9QQVRURVJOIHsKKwl1MzIJUHJpb3JpdHk7CisJdTMyCVJlc2VydmVkOworCXUzMglNYXNrU2l6ZTsKKwl1MzIJUGF0dGVybk9mZnNldDsKKwl1MzIJUGF0dGVyblNpemU7CisJdTMyCVBhdHRlcm5GbGFnczsKK307CisKKworLyogUmVxdWlyZWQgT2JqZWN0IElEcyAoT0lEcykgKi8KKyNkZWZpbmUgT0lEX0dFTl9TVVBQT1JURURfTElTVCAgICAgICAgICAgIDB4MDAwMTAxMDEKKyNkZWZpbmUgT0lEX0dFTl9IQVJEV0FSRV9TVEFUVVMgICAgICAgICAgIDB4MDAwMTAxMDIKKyNkZWZpbmUgT0lEX0dFTl9NRURJQV9TVVBQT1JURUQgICAgICAgICAgIDB4MDAwMTAxMDMKKyNkZWZpbmUgT0lEX0dFTl9NRURJQV9JTl9VU0UgICAgICAgICAgICAgIDB4MDAwMTAxMDQKKyNkZWZpbmUgT0lEX0dFTl9NQVhJTVVNX0xPT0tBSEVBRCAgICAgICAgIDB4MDAwMTAxMDUKKyNkZWZpbmUgT0lEX0dFTl9NQVhJTVVNX0ZSQU1FX1NJWkUgICAgICAgIDB4MDAwMTAxMDYKKyNkZWZpbmUgT0lEX0dFTl9MSU5LX1NQRUVEICAgICAgICAgICAgICAgIDB4MDAwMTAxMDcKKyNkZWZpbmUgT0lEX0dFTl9UUkFOU01JVF9CVUZGRVJfU1BBQ0UgICAgIDB4MDAwMTAxMDgKKyNkZWZpbmUgT0lEX0dFTl9SRUNFSVZFX0JVRkZFUl9TUEFDRSAgICAgIDB4MDAwMTAxMDkKKyNkZWZpbmUgT0lEX0dFTl9UUkFOU01JVF9CTE9DS19TSVpFICAgICAgIDB4MDAwMTAxMEEKKyNkZWZpbmUgT0lEX0dFTl9SRUNFSVZFX0JMT0NLX1NJWkUgICAgICAgIDB4MDAwMTAxMEIKKyNkZWZpbmUgT0lEX0dFTl9WRU5ET1JfSUQgICAgICAgICAgICAgICAgIDB4MDAwMTAxMEMKKyNkZWZpbmUgT0lEX0dFTl9WRU5ET1JfREVTQ1JJUFRJT04gICAgICAgIDB4MDAwMTAxMEQKKyNkZWZpbmUgT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVIgICAgIDB4MDAwMTAxMEUKKyNkZWZpbmUgT0lEX0dFTl9DVVJSRU5UX0xPT0tBSEVBRCAgICAgICAgIDB4MDAwMTAxMEYKKyNkZWZpbmUgT0lEX0dFTl9EUklWRVJfVkVSU0lPTiAgICAgICAgICAgIDB4MDAwMTAxMTAKKyNkZWZpbmUgT0lEX0dFTl9NQVhJTVVNX1RPVEFMX1NJWkUgICAgICAgIDB4MDAwMTAxMTEKKyNkZWZpbmUgT0lEX0dFTl9QUk9UT0NPTF9PUFRJT05TICAgICAgICAgIDB4MDAwMTAxMTIKKyNkZWZpbmUgT0lEX0dFTl9NQUNfT1BUSU9OUyAgICAgICAgICAgICAgIDB4MDAwMTAxMTMKKyNkZWZpbmUgT0lEX0dFTl9NRURJQV9DT05ORUNUX1NUQVRVUyAgICAgIDB4MDAwMTAxMTQKKyNkZWZpbmUgT0lEX0dFTl9NQVhJTVVNX1NFTkRfUEFDS0VUUyAgICAgIDB4MDAwMTAxMTUKKyNkZWZpbmUgT0lEX0dFTl9WRU5ET1JfRFJJVkVSX1ZFUlNJT04gICAgIDB4MDAwMTAxMTYKKyNkZWZpbmUgT0lEX0dFTl9TVVBQT1JURURfR1VJRFMgICAgICAgICAgIDB4MDAwMTAxMTcKKyNkZWZpbmUgT0lEX0dFTl9ORVRXT1JLX0xBWUVSX0FERFJFU1NFUyAgIDB4MDAwMTAxMTgKKyNkZWZpbmUgT0lEX0dFTl9UUkFOU1BPUlRfSEVBREVSX09GRlNFVCAgIDB4MDAwMTAxMTkKKyNkZWZpbmUgT0lEX0dFTl9NQUNISU5FX05BTUUgICAgICAgICAgICAgIDB4MDAwMTAyMUEKKyNkZWZpbmUgT0lEX0dFTl9STkRJU19DT05GSUdfUEFSQU1FVEVSICAgIDB4MDAwMTAyMUIKKyNkZWZpbmUgT0lEX0dFTl9WTEFOX0lEICAgICAgICAgICAgICAgICAgIDB4MDAwMTAyMUMKKworLyogT3B0aW9uYWwgT0lEcyAqLworI2RlZmluZSBPSURfR0VOX01FRElBX0NBUEFCSUxJVElFUyAgICAgICAgMHgwMDAxMDIwMQorI2RlZmluZSBPSURfR0VOX1BIWVNJQ0FMX01FRElVTSAgICAgICAgICAgMHgwMDAxMDIwMgorCisvKiBSZXF1aXJlZCBzdGF0aXN0aWNzIE9JRHMgKi8KKyNkZWZpbmUgT0lEX0dFTl9YTUlUX09LICAgICAgICAgICAgICAgICAgIDB4MDAwMjAxMDEKKyNkZWZpbmUgT0lEX0dFTl9SQ1ZfT0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAxMDIKKyNkZWZpbmUgT0lEX0dFTl9YTUlUX0VSUk9SICAgICAgICAgICAgICAgIDB4MDAwMjAxMDMKKyNkZWZpbmUgT0lEX0dFTl9SQ1ZfRVJST1IgICAgICAgICAgICAgICAgIDB4MDAwMjAxMDQKKyNkZWZpbmUgT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSICAgICAgICAgICAgIDB4MDAwMjAxMDUKKworLyogT3B0aW9uYWwgc3RhdGlzdGljcyBPSURzICovCisjZGVmaW5lIE9JRF9HRU5fRElSRUNURURfQllURVNfWE1JVCAgICAgICAweDAwMDIwMjAxCisjZGVmaW5lIE9JRF9HRU5fRElSRUNURURfRlJBTUVTX1hNSVQgICAgICAweDAwMDIwMjAyCisjZGVmaW5lIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1hNSVQgICAgICAweDAwMDIwMjAzCisjZGVmaW5lIE9JRF9HRU5fTVVMVElDQVNUX0ZSQU1FU19YTUlUICAgICAweDAwMDIwMjA0CisjZGVmaW5lIE9JRF9HRU5fQlJPQURDQVNUX0JZVEVTX1hNSVQgICAgICAweDAwMDIwMjA1CisjZGVmaW5lIE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19YTUlUICAgICAweDAwMDIwMjA2CisjZGVmaW5lIE9JRF9HRU5fRElSRUNURURfQllURVNfUkNWICAgICAgICAweDAwMDIwMjA3CisjZGVmaW5lIE9JRF9HRU5fRElSRUNURURfRlJBTUVTX1JDViAgICAgICAweDAwMDIwMjA4CisjZGVmaW5lIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1JDViAgICAgICAweDAwMDIwMjA5CisjZGVmaW5lIE9JRF9HRU5fTVVMVElDQVNUX0ZSQU1FU19SQ1YgICAgICAweDAwMDIwMjBBCisjZGVmaW5lIE9JRF9HRU5fQlJPQURDQVNUX0JZVEVTX1JDViAgICAgICAweDAwMDIwMjBCCisjZGVmaW5lIE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19SQ1YgICAgICAweDAwMDIwMjBDCisjZGVmaW5lIE9JRF9HRU5fUkNWX0NSQ19FUlJPUiAgICAgICAgICAgICAweDAwMDIwMjBECisjZGVmaW5lIE9JRF9HRU5fVFJBTlNNSVRfUVVFVUVfTEVOR1RIICAgICAweDAwMDIwMjBFCisjZGVmaW5lIE9JRF9HRU5fR0VUX1RJTUVfQ0FQUyAgICAgICAgICAgICAweDAwMDIwMjBGCisjZGVmaW5lIE9JRF9HRU5fR0VUX05FVENBUkRfVElNRSAgICAgICAgICAweDAwMDIwMjEwCisjZGVmaW5lIE9JRF9HRU5fTkVUQ0FSRF9MT0FEICAgICAgICAgICAgICAweDAwMDIwMjExCisjZGVmaW5lIE9JRF9HRU5fREVWSUNFX1BST0ZJTEUgICAgICAgICAgICAweDAwMDIwMjEyCisjZGVmaW5lIE9JRF9HRU5fSU5JVF9USU1FX01TICAgICAgICAgICAgICAweDAwMDIwMjEzCisjZGVmaW5lIE9JRF9HRU5fUkVTRVRfQ09VTlRTICAgICAgICAgICAgICAweDAwMDIwMjE0CisjZGVmaW5lIE9JRF9HRU5fTUVESUFfU0VOU0VfQ09VTlRTICAgICAgICAweDAwMDIwMjE1CisjZGVmaW5lIE9JRF9HRU5fRlJJRU5ETFlfTkFNRSAgICAgICAgICAgICAweDAwMDIwMjE2CisjZGVmaW5lIE9JRF9HRU5fTUlOSVBPUlRfSU5GTyAgICAgICAgICAgICAweDAwMDIwMjE3CisjZGVmaW5lIE9JRF9HRU5fUkVTRVRfVkVSSUZZX1BBUkFNRVRFUlMgICAweDAwMDIwMjE4CisKKy8qIElFRUUgODAyLjMgKEV0aGVybmV0KSBPSURzICovCisjZGVmaW5lIE5ESVNfODAyXzNfTUFDX09QVElPTl9QUklPUklUWSAgICAweDAwMDAwMDAxCisKKyNkZWZpbmUgT0lEXzgwMl8zX1BFUk1BTkVOVF9BRERSRVNTICAgICAgIDB4MDEwMTAxMDEKKyNkZWZpbmUgT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUyAgICAgICAgIDB4MDEwMTAxMDIKKyNkZWZpbmUgT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUICAgICAgICAgIDB4MDEwMTAxMDMKKyNkZWZpbmUgT0lEXzgwMl8zX01BWElNVU1fTElTVF9TSVpFICAgICAgIDB4MDEwMTAxMDQKKyNkZWZpbmUgT0lEXzgwMl8zX01BQ19PUFRJT05TICAgICAgICAgICAgIDB4MDEwMTAxMDUKKyNkZWZpbmUgT0lEXzgwMl8zX1JDVl9FUlJPUl9BTElHTk1FTlQgICAgIDB4MDEwMjAxMDEKKyNkZWZpbmUgT0lEXzgwMl8zX1hNSVRfT05FX0NPTExJU0lPTiAgICAgIDB4MDEwMjAxMDIKKyNkZWZpbmUgT0lEXzgwMl8zX1hNSVRfTU9SRV9DT0xMSVNJT05TICAgIDB4MDEwMjAxMDMKKyNkZWZpbmUgT0lEXzgwMl8zX1hNSVRfREVGRVJSRUQgICAgICAgICAgIDB4MDEwMjAyMDEKKyNkZWZpbmUgT0lEXzgwMl8zX1hNSVRfTUFYX0NPTExJU0lPTlMgICAgIDB4MDEwMjAyMDIKKyNkZWZpbmUgT0lEXzgwMl8zX1JDVl9PVkVSUlVOICAgICAgICAgICAgIDB4MDEwMjAyMDMKKyNkZWZpbmUgT0lEXzgwMl8zX1hNSVRfVU5ERVJSVU4gICAgICAgICAgIDB4MDEwMjAyMDQKKyNkZWZpbmUgT0lEXzgwMl8zX1hNSVRfSEVBUlRCRUFUX0ZBSUxVUkUgIDB4MDEwMjAyMDUKKyNkZWZpbmUgT0lEXzgwMl8zX1hNSVRfVElNRVNfQ1JTX0xPU1QgICAgIDB4MDEwMjAyMDYKKyNkZWZpbmUgT0lEXzgwMl8zX1hNSVRfTEFURV9DT0xMSVNJT05TICAgIDB4MDEwMjAyMDcKKworLyogT0lEX0dFTl9NSU5JUE9SVF9JTkZPIGNvbnN0YW50cyAqLworI2RlZmluZSBORElTX01JTklQT1JUX0JVU19NQVNURVIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBORElTX01JTklQT1JUX1dETV9EUklWRVIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBORElTX01JTklQT1JUX1NHX0xJU1QgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBORElTX01JTklQT1JUX1NVUFBPUlRTX01FRElBX1FVRVJZICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBORElTX01JTklQT1JUX0lORElDQVRFU19QQUNLRVRTICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBORElTX01JTklQT1JUX0lHTk9SRV9QQUNLRVRfUVVFVUUgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBORElTX01JTklQT1JUX0lHTk9SRV9SRVFVRVNUX1FVRVVFICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBORElTX01JTklQT1JUX0lHTk9SRV9UT0tFTl9SSU5HX0VSUk9SUyAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBORElTX01JTklQT1JUX0lOVEVSTUVESUFURV9EUklWRVIgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBORElTX01JTklQT1JUX0lTX05ESVNfNSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBORElTX01JTklQT1JUX0lTX0NPICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBORElTX01JTklQT1JUX0RFU0VSSUFMSVpFICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBORElTX01JTklQT1JUX1JFUVVJUkVTX01FRElBX1BPTExJTkcgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBORElTX01JTklQT1JUX1NVUFBPUlRTX01FRElBX1NFTlNFICAgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBORElTX01JTklQT1JUX05FVEJPT1RfQ0FSRCAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBORElTX01JTklQT1JUX1BNX1NVUFBPUlRFRCAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBORElTX01JTklQT1JUX1NVUFBPUlRTX01BQ19BRERSRVNTX09WRVJXUklURSAgMHgwMDAxMDAwMAorI2RlZmluZSBORElTX01JTklQT1JUX1VTRVNfU0FGRV9CVUZGRVJfQVBJUyAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBORElTX01JTklQT1JUX0hJRERFTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBORElTX01JTklQT1JUX1NXRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBORElTX01JTklQT1JUX1NVUlBSSVNFX1JFTU9WRV9PSyAgICAgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBORElTX01JTklQT1JUX05PX0hBTFRfT05fU1VTUEVORCAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBORElTX01JTklQT1JUX0hBUkRXQVJFX0RFVklDRSAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBORElTX01JTklQT1JUX1NVUFBPUlRTX0NBTkNFTF9TRU5EX1BBQ0tFVFMgICAgMHgwMDgwMDAwMAorI2RlZmluZSBORElTX01JTklQT1JUXzY0QklUU19ETUEgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAorCisjZGVmaW5lIE5ESVNfTUVESVVNXzgwMl8zCQkweDAwMDAwMDAwCisjZGVmaW5lIE5ESVNfTUVESVVNXzgwMl81CQkweDAwMDAwMDAxCisjZGVmaW5lIE5ESVNfTUVESVVNX0ZEREkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgTkRJU19NRURJVU1fV0FOCQkJMHgwMDAwMDAwMworI2RlZmluZSBORElTX01FRElVTV9MT0NBTF9UQUxLCQkweDAwMDAwMDA0CisjZGVmaW5lIE5ESVNfTUVESVVNX0RJWAkJCTB4MDAwMDAwMDUKKyNkZWZpbmUgTkRJU19NRURJVU1fQVJDRU5UX1JBVwkJMHgwMDAwMDAwNgorI2RlZmluZSBORElTX01FRElVTV9BUkNFTlRfODc4XzIJMHgwMDAwMDAwNworI2RlZmluZSBORElTX01FRElVTV9BVE0JCQkweDAwMDAwMDA4CisjZGVmaW5lIE5ESVNfTUVESVVNX1dJUkVMRVNTX0xBTgkweDAwMDAwMDA5CisjZGVmaW5lIE5ESVNfTUVESVVNX0lSREEJCTB4MDAwMDAwMEEKKyNkZWZpbmUgTkRJU19NRURJVU1fQlBDCQkJMHgwMDAwMDAwQgorI2RlZmluZSBORElTX01FRElVTV9DT19XQU4JCTB4MDAwMDAwMEMKKyNkZWZpbmUgTkRJU19NRURJVU1fMTM5NAkJMHgwMDAwMDAwRAorCisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfRElSRUNURUQJMHgwMDAwMDAwMQorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVAkweDAwMDAwMDAyCisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVAkweDAwMDAwMDA0CisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfQlJPQURDQVNUCTB4MDAwMDAwMDgKKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9TT1VSQ0VfUk9VVElORwkweDAwMDAwMDEwCisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMJMHgwMDAwMDAyMAorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX1NNVAkJMHgwMDAwMDA0MAorI2RlZmluZSBORElTX1BBQ0tFVF9UWVBFX0FMTF9MT0NBTAkweDAwMDAwMDgwCisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfR1JPVVAJCTB4MDAwMDAxMDAKKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9BTExfRlVOQ1RJT05BTAkweDAwMDAwMjAwCisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfRlVOQ1RJT05BTAkweDAwMDAwNDAwCisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfTUFDX0ZSQU1FCTB4MDAwMDA4MDAKKworI2RlZmluZSBORElTX01FRElBX1NUQVRFX0NPTk5FQ1RFRAkweDAwMDAwMDAwCisjZGVmaW5lIE5ESVNfTUVESUFfU1RBVEVfRElTQ09OTkVDVEVECTB4MDAwMDAwMDEKKworI2RlZmluZSBORElTX01BQ19PUFRJT05fQ09QWV9MT09LQUhFQURfREFUQSAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBORElTX01BQ19PUFRJT05fUkVDRUlWRV9TRVJJQUxJWkVEICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBORElTX01BQ19PUFRJT05fVFJBTlNGRVJTX05PVF9QRU5EICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBORElTX01BQ19PUFRJT05fTk9fTE9PUEJBQ0sgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBORElTX01BQ19PUFRJT05fRlVMTF9EVVBMRVggICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBORElTX01BQ19PUFRJT05fRU9UWF9JTkRJQ0FUSU9OICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBORElTX01BQ19PUFRJT05fODAyMVBfUFJJT1JJVFkgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBORElTX01BQ19PUFRJT05fUkVTRVJWRUQgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorCisjZW5kaWYgLyogX0xJTlVYX05ESVNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU0NTdmMjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCkBAIC0wLDAgKzEsMjk2NyBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIFBMWCBORVQyMjgwIFVTQiBkZXZpY2UgY29udHJvbGxlci4KKyAqIFNwZWNzIGFuZCBlcnJhdGEgYXJlIGF2YWlsYWJsZSBmcm9tIDxodHRwOi8vd3d3LnBseHRlY2guY29tPi4KKyAqCisgKiBQTFggVGVjaG5vbG9neSBJbmMuIChmb3JtZXJseSBOZXRDaGlwIFRlY2hub2xvZ3kpIHN1cHBvcnRlZCB0aGUgCisgKiBkZXZlbG9wbWVudCBvZiB0aGlzIGRyaXZlci4KKyAqCisgKgorICogQ09ERSBTVEFUVVMgSElHSExJR0hUUworICoKKyAqIFRoaXMgZHJpdmVyIHNob3VsZCB3b3JrIHdlbGwgd2l0aCBtb3N0ICJnYWRnZXQiIGRyaXZlcnMsIGluY2x1ZGluZworICogdGhlIEZpbGUgU3RvcmFnZSwgU2VyaWFsLCBhbmQgRXRoZXJuZXQvUk5ESVMgZ2FkZ2V0IGRyaXZlcnMKKyAqIGFzIHdlbGwgYXMgR2FkZ2V0IFplcm8gYW5kIEdhZGdldGZzLgorICoKKyAqIERNQSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuICBEcml2ZXJzIHVzaW5nIHRyYW5zZmVyIHF1ZXVlcyBtaWdodCB1c2UKKyAqIERNQSBjaGFpbmluZyB0byByZW1vdmUgSVJRIGxhdGVuY2llcyBiZXR3ZWVuIHRyYW5zZmVycy4gIChFeGNlcHQgd2hlbgorICogc2hvcnQgT1VUIHRyYW5zZmVycyBoYXBwZW4uKSAgRHJpdmVycyBjYW4gdXNlIHRoZSByZXEtPm5vX2ludGVycnVwdAorICogaGludCB0byBjb21wbGV0ZWx5IGVsaW1pbmF0ZSBzb21lIElSUXMsIGlmIGEgbGF0ZXIgSVJRIGlzIGd1YXJhbnRlZWQKKyAqIGFuZCBETUEgY2hhaW5pbmcgaXMgZW5hYmxlZC4KKyAqCisgKiBOb3RlIHRoYXQgYWxtb3N0IGFsbCB0aGUgZXJyYXRhIHdvcmthcm91bmRzIGhlcmUgYXJlIG9ubHkgbmVlZGVkIGZvcgorICogcmV2MSBjaGlwcy4gIFJldjFhIHNpbGljb24gKDAxMTApIGZpeGVzIGFsbW9zdCBhbGwgb2YgdGhlbS4KKyAqLworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzIERhdmlkIEJyb3duZWxsCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSBQTFggVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjdW5kZWYJREVCVUcJCS8qIG1lc3NhZ2VzIG9uIGVycm9yIGFuZCBtb3N0IGZhdWx0IHBhdGhzICovCisjdW5kZWYJVkVSQk9TRQkJLyogZXh0cmEgZGVidWcgbWVzc2FnZXMgKHN1Y2Nlc3MgdG9vKSAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiX2NoOS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9nYWRnZXQuaD4KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworCisjZGVmaW5lCURSSVZFUl9ERVNDCQkiUExYIE5FVDIyODAgVVNCIFBlcmlwaGVyYWwgQ29udHJvbGxlciIKKyNkZWZpbmUJRFJJVkVSX1ZFUlNJT04JCSIyMDA1IEZlYiAwMyIKKworI2RlZmluZQlETUFfQUREUl9JTlZBTElECSh+KGRtYV9hZGRyX3QpMCkKKyNkZWZpbmUJRVBfRE9OVFVTRQkJMTMJLyogbm9uemVybyAqLworCisjZGVmaW5lIFVTRV9SREtfTEVEUwkJLyogR1BJTyBwaW5zIGNvbnRyb2wgdGhyZWUgTEVEcyAqLworCisKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lIFtdID0gIm5ldDIyODAiOworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX2Rlc2MgW10gPSBEUklWRVJfREVTQzsKKworc3RhdGljIGNvbnN0IGNoYXIgZXAwbmFtZSBbXSA9ICJlcDAiOworc3RhdGljIGNvbnN0IGNoYXIgKmVwX25hbWUgW10gPSB7CisJZXAwbmFtZSwKKwkiZXAtYSIsICJlcC1iIiwgImVwLWMiLCAiZXAtZCIsCisJImVwLWUiLCAiZXAtZiIsCit9OworCisvKiB1c2VfZG1hIC0tIGdlbmVyYWwgZ29vZG5lc3MsIGZld2VyIGludGVycnVwdHMsIGxlc3MgY3B1IGxvYWQgKHZzIFBJTykKKyAqIHVzZV9kbWFfY2hhaW5pbmcgLS0gZG1hIGRlc2NyaXB0b3IgcXVldWVpbmcgZ2l2ZXMgZXZlbiBtb3JlIGlycSByZWR1Y3Rpb24KKyAqCisgKiBUaGUgbmV0MjI4MCBETUEgZW5naW5lcyBhcmUgbm90IHRpZ2h0bHkgaW50ZWdyYXRlZCB3aXRoIHRoZWlyIEZJRk9zOworICogbm90IGFsbCBjYXNlcyBhcmUgKHlldCkgaGFuZGxlZCB3ZWxsIGluIHRoaXMgZHJpdmVyIG9yIHRoZSBzaWxpY29uLgorICogU29tZSBnYWRnZXQgZHJpdmVycyB3b3JrIGJldHRlciB3aXRoIHRoZSBkbWEgc3VwcG9ydCBoZXJlIHRoYW4gb3RoZXJzLgorICogVGhlc2UgdHdvIHBhcmFtZXRlcnMgbGV0IHlvdSB1c2UgUElPIG9yIG1vcmUgYWdncmVzc2l2ZSBETUEuCisgKi8KK3N0YXRpYyBpbnQgdXNlX2RtYSA9IDE7CitzdGF0aWMgaW50IHVzZV9kbWFfY2hhaW5pbmcgPSAwOworCisvKiAibW9kcHJvYmUgbmV0MjI4MCB1c2VfZG1hPW4iIGV0YyAqLworbW9kdWxlX3BhcmFtICh1c2VfZG1hLCBib29sLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbSAodXNlX2RtYV9jaGFpbmluZywgYm9vbCwgU19JUlVHTyk7CisKKworLyogbW9kZSAwID09IGVwLXthLGIsYyxkfSAxSyBmaWZvIGVhY2gKKyAqIG1vZGUgMSA9PSBlcC17YSxifSAySyBmaWZvIGVhY2gsIGVwLXtjLGR9IHVuYXZhaWxhYmxlCisgKiBtb2RlIDIgPT0gZXAtYSAySyBmaWZvLCBlcC17YixjfSAxSyBlYWNoLCBlcC1kIHVuYXZhaWxhYmxlCisgKi8KK3N0YXRpYyB1c2hvcnQgZmlmb19tb2RlID0gMDsKKworLyogIm1vZHByb2JlIG5ldDIyODAgZmlmb19tb2RlPTEiIGV0YyAqLworbW9kdWxlX3BhcmFtIChmaWZvX21vZGUsIHVzaG9ydCwgMDY0NCk7CisKKy8qIGVuYWJsZV9zdXNwZW5kIC0tIFdoZW4gZW5hYmxlZCwgdGhlIGRyaXZlciB3aWxsIHJlc3BvbmQgdG8KKyAqIFVTQiBzdXNwZW5kIHJlcXVlc3RzIGJ5IHBvd2VyaW5nIGRvd24gdGhlIE5FVDIyODAuICBPdGhlcndpc2UsCisgKiBVU0Igc3VzcGVuZCByZXF1ZXN0cyB3aWxsIGJlIGlnbm9yZWQuICBUaGlzIGlzIGFjY2VwdGlibGUgZm9yCisgKiBzZWxmLXBvd2VyZWQgZGV2aWNlcywgYW5kIGhlbHBzIGF2b2lkIHNvbWUgcXVpcmtzLgorICovCitzdGF0aWMgaW50IGVuYWJsZV9zdXNwZW5kID0gMDsKKworLyogIm1vZHByb2JlIG5ldDIyODAgZW5hYmxlX3N1c3BlbmQ9MSIgZXRjICovCittb2R1bGVfcGFyYW0gKGVuYWJsZV9zdXNwZW5kLCBib29sLCBTX0lSVUdPKTsKKworCisjZGVmaW5lCURJUl9TVFJJTkcoYkFkZHJlc3MpICgoKGJBZGRyZXNzKSAmIFVTQl9ESVJfSU4pID8gImluIiA6ICJvdXQiKQorCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUykgfHwgZGVmaW5lZCAoREVCVUcpCitzdGF0aWMgY2hhciAqdHlwZV9zdHJpbmcgKHU4IGJtQXR0cmlidXRlcykKK3sKKwlzd2l0Y2ggKChibUF0dHJpYnV0ZXMpICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spIHsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6CXJldHVybiAiYnVsayI7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DOglyZXR1cm4gImlzbyI7CisJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6CXJldHVybiAiaW50ciI7CisJfTsKKwlyZXR1cm4gImNvbnRyb2wiOworfQorI2VuZGlmCisKKyNpbmNsdWRlICJuZXQyMjgwLmgiCisKKyNkZWZpbmUgdmFsaWRfYml0CV9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEgPDwgVkFMSURfQklUKQorI2RlZmluZSBkbWFfZG9uZV9pZQlfX2NvbnN0YW50X2NwdV90b19sZTMyICgxIDw8IERNQV9ET05FX0lOVEVSUlVQVF9FTkFCTEUpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQKK25ldDIyODBfZW5hYmxlIChzdHJ1Y3QgdXNiX2VwICpfZXAsIGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYykKK3sKKwlzdHJ1Y3QgbmV0MjI4MAkJKmRldjsKKwlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXA7CisJdTMyCQkJbWF4LCB0bXA7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwllcCA9IGNvbnRhaW5lcl9vZiAoX2VwLCBzdHJ1Y3QgbmV0MjI4MF9lcCwgZXApOworCWlmICghX2VwIHx8ICFkZXNjIHx8IGVwLT5kZXNjIHx8IF9lcC0+bmFtZSA9PSBlcDBuYW1lCisJCQl8fCBkZXNjLT5iRGVzY3JpcHRvclR5cGUgIT0gVVNCX0RUX0VORFBPSU5UKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkZXYgPSBlcC0+ZGV2OworCWlmICghZGV2LT5kcml2ZXIgfHwgZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCisJCXJldHVybiAtRVNIVVRET1dOOworCisJLyogZXJyYXR1bSAwMTE5IHdvcmthcm91bmQgdGllcyB1cCBhbiBlbmRwb2ludCBudW1iZXIgKi8KKwlpZiAoKGRlc2MtPmJFbmRwb2ludEFkZHJlc3MgJiAweDBmKSA9PSBFUF9ET05UVVNFKQorCQlyZXR1cm4gLUVET007CisKKwkvKiBzYW5pdHkgY2hlY2sgZXAtZS9lcC1mIHNpbmNlIHRoZWlyIGZpZm9zIGFyZSBzbWFsbCAqLworCW1heCA9IGxlMTZfdG9fY3B1IChkZXNjLT53TWF4UGFja2V0U2l6ZSkgJiAweDFmZmY7CisJaWYgKGVwLT5udW0gPiA0ICYmIG1heCA+IDY0KQorCQlyZXR1cm4gLUVSQU5HRTsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZGV2LT5sb2NrLCBmbGFncyk7CisJX2VwLT5tYXhwYWNrZXQgPSBtYXggJiAweDdmZjsKKwllcC0+ZGVzYyA9IGRlc2M7CisKKwkvKiBlcF9yZXNldCgpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkICovCisJZXAtPnN0b3BwZWQgPSAwOworCWVwLT5vdXRfb3ZlcmZsb3cgPSAwOworCisJLyogc2V0IHNwZWVkLWRlcGVuZGVudCBtYXggcGFja2V0OyBtYXkga2ljayBpbiBoaWdoIGJhbmR3aWR0aCAqLworCXNldF9pZHhfcmVnIChkZXYtPnJlZ3MsIFJFR19FUF9NQVhQS1QgKGRldiwgZXAtPm51bSksIG1heCk7CisKKwkvKiBGSUZPIGxpbmVzIGNhbid0IGdvIHRvIGRpZmZlcmVudCBwYWNrZXRzLiAgUElPIGlzIG9rLCBzbworCSAqIHVzZSBpdCBpbnN0ZWFkIG9mIHRyb3VibGVzb21lIChub24tYnVsaykgbXVsdGktcGFja2V0IERNQS4KKwkgKi8KKwlpZiAoZXAtPmRtYSAmJiAobWF4ICUgNCkgIT0gMCAmJiB1c2VfZG1hX2NoYWluaW5nKSB7CisJCURFQlVHIChlcC0+ZGV2LCAiJXMsIG5vIGRtYSBmb3IgbWF4cGFja2V0ICVkXG4iLAorCQkJZXAtPmVwLm5hbWUsIGVwLT5lcC5tYXhwYWNrZXQpOworCQllcC0+ZG1hID0gTlVMTDsKKwl9CisKKwkvKiBzZXQgdHlwZSwgZGlyZWN0aW9uLCBhZGRyZXNzOyByZXNldCBmaWZvIGNvdW50ZXJzICovCisJd3JpdGVsICgoMSA8PCBGSUZPX0ZMVVNIKSwgJmVwLT5yZWdzLT5lcF9zdGF0KTsKKwl0bXAgPSAoZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spOworCWlmICh0bXAgPT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSB7CisJCS8qIGVycmF0dW0gMDEwNSB3b3JrYXJvdW5kIHByZXZlbnRzIGhzIE5ZRVQgKi8KKwkJaWYgKGRldi0+Y2hpcHJldiA9PSAwMTAwCisJCQkJJiYgZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gKKwkJCQkmJiAhKGRlc2MtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSkKKwkJCXdyaXRlbCAoKDEgPDwgQ0xFQVJfTkFLX09VVF9QQUNLRVRTX01PREUpLAorCQkJCSZlcC0+cmVncy0+ZXBfcnNwKTsKKwl9IGVsc2UgaWYgKHRtcCA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSB7CisJCS8qIGNhdGNoIHNvbWUgcGFydGljdWxhcmx5IGJsYXRhbnQgZHJpdmVyIGJ1Z3MgKi8KKwkJaWYgKChkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfSElHSAorCQkJCQkmJiBtYXggIT0gNTEyKQorCQkJCXx8IChkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfRlVMTAorCQkJCQkmJiBtYXggPiA2NCkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAtRVJBTkdFOworCQl9CisJfQorCWVwLT5pc19pc28gPSAodG1wID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpID8gMSA6IDA7CisJdG1wIDw8PSBFTkRQT0lOVF9UWVBFOworCXRtcCB8PSBkZXNjLT5iRW5kcG9pbnRBZGRyZXNzOworCXRtcCB8PSAoNCA8PCBFTkRQT0lOVF9CWVRFX0NPVU5UKTsJLyogZGVmYXVsdCBmdWxsIGZpZm8gbGluZXMgKi8KKwl0bXAgfD0gMSA8PCBFTkRQT0lOVF9FTkFCTEU7CisJd21iICgpOworCisJLyogZm9yIE9VVCB0cmFuc2ZlcnMsIGJsb2NrIHRoZSByeCBmaWZvIHVudGlsIGEgcmVhZCBpcyBwb3N0ZWQgKi8KKwllcC0+aXNfaW4gPSAodG1wICYgVVNCX0RJUl9JTikgIT0gMDsKKwlpZiAoIWVwLT5pc19pbikKKwkJd3JpdGVsICgoMSA8PCBTRVRfTkFLX09VVF9QQUNLRVRTKSwgJmVwLT5yZWdzLT5lcF9yc3ApOworCisJd3JpdGVsICh0bXAsICZlcC0+cmVncy0+ZXBfY2ZnKTsKKworCS8qIGVuYWJsZSBpcnFzICovCisJaWYgKCFlcC0+ZG1hKSB7CQkJCS8qIHBpbywgcGVyLXBhY2tldCAqLworCQl0bXAgPSAoMSA8PCBlcC0+bnVtKSB8IHJlYWRsICgmZGV2LT5yZWdzLT5wY2lpcnFlbmIwKTsKKwkJd3JpdGVsICh0bXAsICZkZXYtPnJlZ3MtPnBjaWlycWVuYjApOworCisJCXRtcCA9ICgxIDw8IERBVEFfUEFDS0VUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUpCisJCQl8ICgxIDw8IERBVEFfUEFDS0VUX1RSQU5TTUlUVEVEX0lOVEVSUlVQVF9FTkFCTEUpCisJCQl8IHJlYWRsICgmZXAtPnJlZ3MtPmVwX2lycWVuYik7CisJCXdyaXRlbCAodG1wLCAmZXAtPnJlZ3MtPmVwX2lycWVuYik7CisJfSBlbHNlIHsJCQkJLyogZG1hLCBwZXItcmVxdWVzdCAqLworCQl0bXAgPSAoMSA8PCAoOCArIGVwLT5udW0pKTsJLyogY29tcGxldGlvbiAqLworCQl0bXAgfD0gcmVhZGwgKCZkZXYtPnJlZ3MtPnBjaWlycWVuYjEpOworCQl3cml0ZWwgKHRtcCwgJmRldi0+cmVncy0+cGNpaXJxZW5iMSk7CisKKwkJLyogZm9yIHNob3J0IE9VVCB0cmFuc2ZlcnMsIGRtYSBjb21wbGV0aW9ucyBjYW4ndAorCQkgKiBhZHZhbmNlIHRoZSBxdWV1ZTsgZG8gaXQgcGlvLXN0eWxlLCBieSBoYW5kLgorCQkgKiBOT1RFIGVycmF0dW0gMDExMiB3b3JrYXJvdW5kICMyCisJCSAqLworCQlpZiAoKGRlc2MtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSA9PSAwKSB7CisJCQl0bXAgPSAoMSA8PCBTSE9SVF9QQUNLRVRfVFJBTlNGRVJSRURfSU5URVJSVVBUX0VOQUJMRSk7CisJCQl3cml0ZWwgKHRtcCwgJmVwLT5yZWdzLT5lcF9pcnFlbmIpOworCisJCQl0bXAgPSAoMSA8PCBlcC0+bnVtKSB8IHJlYWRsICgmZGV2LT5yZWdzLT5wY2lpcnFlbmIwKTsKKwkJCXdyaXRlbCAodG1wLCAmZGV2LT5yZWdzLT5wY2lpcnFlbmIwKTsKKwkJfQorCX0KKworCXRtcCA9IGRlc2MtPmJFbmRwb2ludEFkZHJlc3M7CisJREVCVUcgKGRldiwgImVuYWJsZWQgJXMgKGVwJWQlcy0lcykgJXMgbWF4ICUwNHhcbiIsCisJCV9lcC0+bmFtZSwgdG1wICYgMHgwZiwgRElSX1NUUklORyAodG1wKSwKKwkJdHlwZV9zdHJpbmcgKGRlc2MtPmJtQXR0cmlidXRlcyksCisJCWVwLT5kbWEgPyAiZG1hIiA6ICJwaW8iLCBtYXgpOworCisJLyogcGNpIHdyaXRlcyBtYXkgc3RpbGwgYmUgcG9zdGVkICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRzaGFrZSAodTMyIF9faW9tZW0gKnB0ciwgdTMyIG1hc2ssIHUzMiBkb25lLCBpbnQgdXNlYykKK3sKKwl1MzIJcmVzdWx0OworCisJZG8geworCQlyZXN1bHQgPSByZWFkbCAocHRyKTsKKwkJaWYgKHJlc3VsdCA9PSB+KHUzMikwKQkJLyogImRldmljZSB1bnBsdWdnZWQiICovCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmVzdWx0ICY9IG1hc2s7CisJCWlmIChyZXN1bHQgPT0gZG9uZSkKKwkJCXJldHVybiAwOworCQl1ZGVsYXkgKDEpOworCQl1c2VjLS07CisJfSB3aGlsZSAodXNlYyA+IDApOworCXJldHVybiAtRVRJTUVET1VUOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9lcF9vcHMgbmV0MjI4MF9lcF9vcHM7CisKK3N0YXRpYyB2b2lkIGVwX3Jlc2V0IChzdHJ1Y3QgbmV0MjI4MF9yZWdzIF9faW9tZW0gKnJlZ3MsIHN0cnVjdCBuZXQyMjgwX2VwICplcCkKK3sKKwl1MzIJCXRtcDsKKworCWVwLT5kZXNjID0gTlVMTDsKKwlJTklUX0xJU1RfSEVBRCAoJmVwLT5xdWV1ZSk7CisKKwllcC0+ZXAubWF4cGFja2V0ID0gfjA7CisJZXAtPmVwLm9wcyA9ICZuZXQyMjgwX2VwX29wczsKKworCS8qIGRpc2FibGUgdGhlIGRtYSwgaXJxcywgZW5kcG9pbnQuLi4gKi8KKwlpZiAoZXAtPmRtYSkgeworCQl3cml0ZWwgKDAsICZlcC0+ZG1hLT5kbWFjdGwpOworCQl3cml0ZWwgKCAgKDEgPDwgRE1BX1NDQVRURVJfR0FUSEVSX0RPTkVfSU5URVJSVVBUKQorCQkJfCAoMSA8PCBETUFfVFJBTlNBQ1RJT05fRE9ORV9JTlRFUlJVUFQpCisJCQl8ICgxIDw8IERNQV9BQk9SVCkKKwkJCSwgJmVwLT5kbWEtPmRtYXN0YXQpOworCisJCXRtcCA9IHJlYWRsICgmcmVncy0+cGNpaXJxZW5iMCk7CisJCXRtcCAmPSB+KDEgPDwgZXAtPm51bSk7CisJCXdyaXRlbCAodG1wLCAmcmVncy0+cGNpaXJxZW5iMCk7CisJfSBlbHNlIHsKKwkJdG1wID0gcmVhZGwgKCZyZWdzLT5wY2lpcnFlbmIxKTsKKwkJdG1wICY9IH4oMSA8PCAoOCArIGVwLT5udW0pKTsJLyogY29tcGxldGlvbiAqLworCQl3cml0ZWwgKHRtcCwgJnJlZ3MtPnBjaWlycWVuYjEpOworCX0KKwl3cml0ZWwgKDAsICZlcC0+cmVncy0+ZXBfaXJxZW5iKTsKKworCS8qIGluaXQgdG8gb3VyIGNob3NlbiBkZWZhdWx0cywgbm90YWJseSBzbyB0aGF0IHdlIE5BSyBPVVQKKwkgKiBwYWNrZXRzIHVudGlsIHRoZSBkcml2ZXIgcXVldWVzIGEgcmVhZCAoK25vdGUgZXJyYXR1bSAwMTEyKQorCSAqLworCXRtcCA9ICgxIDw8IFNFVF9OQUtfT1VUX1BBQ0tFVFNfTU9ERSkKKwkJfCAoMSA8PCBTRVRfTkFLX09VVF9QQUNLRVRTKQorCQl8ICgxIDw8IENMRUFSX0VQX0hJREVfU1RBVFVTX1BIQVNFKQorCQl8ICgxIDw8IENMRUFSX0lOVEVSUlVQVF9NT0RFKTsKKworCWlmIChlcC0+bnVtICE9IDApIHsKKwkJdG1wIHw9ICgxIDw8IENMRUFSX0VORFBPSU5UX1RPR0dMRSkKKwkJCXwgKDEgPDwgQ0xFQVJfRU5EUE9JTlRfSEFMVCk7CisJfQorCXdyaXRlbCAodG1wLCAmZXAtPnJlZ3MtPmVwX3JzcCk7CisKKwkvKiBzY3J1YiBtb3N0IHN0YXR1cyBiaXRzLCBhbmQgZmx1c2ggYW55IGZpZm8gc3RhdGUgKi8KKwl3cml0ZWwgKCAgKDEgPDwgVElNRU9VVCkKKwkJfCAoMSA8PCBVU0JfU1RBTExfU0VOVCkKKwkJfCAoMSA8PCBVU0JfSU5fTkFLX1NFTlQpCisJCXwgKDEgPDwgVVNCX0lOX0FDS19SQ1ZEKQorCQl8ICgxIDw8IFVTQl9PVVRfUElOR19OQUtfU0VOVCkKKwkJfCAoMSA8PCBVU0JfT1VUX0FDS19TRU5UKQorCQl8ICgxIDw8IEZJRk9fT1ZFUkZMT1cpCisJCXwgKDEgPDwgRklGT19VTkRFUkZMT1cpCisJCXwgKDEgPDwgRklGT19GTFVTSCkKKwkJfCAoMSA8PCBTSE9SVF9QQUNLRVRfT1VUX0RPTkVfSU5URVJSVVBUKQorCQl8ICgxIDw8IFNIT1JUX1BBQ0tFVF9UUkFOU0ZFUlJFRF9JTlRFUlJVUFQpCisJCXwgKDEgPDwgREFUQV9QQUNLRVRfUkVDRUlWRURfSU5URVJSVVBUKQorCQl8ICgxIDw8IERBVEFfUEFDS0VUX1RSQU5TTUlUVEVEX0lOVEVSUlVQVCkKKwkJfCAoMSA8PCBEQVRBX09VVF9QSU5HX1RPS0VOX0lOVEVSUlVQVCkKKwkJfCAoMSA8PCBEQVRBX0lOX1RPS0VOX0lOVEVSUlVQVCkKKwkJLCAmZXAtPnJlZ3MtPmVwX3N0YXQpOworCisJLyogZmlmbyBzaXplIGlzIGhhbmRsZWQgc2VwYXJhdGVseSAqLworfQorCitzdGF0aWMgdm9pZCBudWtlIChzdHJ1Y3QgbmV0MjI4MF9lcCAqKTsKKworc3RhdGljIGludCBuZXQyMjgwX2Rpc2FibGUgKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXA7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwllcCA9IGNvbnRhaW5lcl9vZiAoX2VwLCBzdHJ1Y3QgbmV0MjI4MF9lcCwgZXApOworCWlmICghX2VwIHx8ICFlcC0+ZGVzYyB8fCBfZXAtPm5hbWUgPT0gZXAwbmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmVwLT5kZXYtPmxvY2ssIGZsYWdzKTsKKwludWtlIChlcCk7CisJZXBfcmVzZXQgKGVwLT5kZXYtPnJlZ3MsIGVwKTsKKworCVZERUJVRyAoZXAtPmRldiwgImRpc2FibGVkICVzICVzXG4iLAorCQkJZXAtPmRtYSA/ICJkbWEiIDogInBpbyIsIF9lcC0+bmFtZSk7CisKKwkvKiBzeW5jaCBtZW1vcnkgdmlld3Mgd2l0aCB0aGUgZGV2aWNlICovCisJKHZvaWQpIHJlYWRsICgmZXAtPnJlZ3MtPmVwX2NmZyk7CisKKwlpZiAodXNlX2RtYSAmJiAhZXAtPmRtYSAmJiBlcC0+bnVtID49IDEgJiYgZXAtPm51bSA8PSA0KQorCQllcC0+ZG1hID0gJmVwLT5kZXYtPmRtYSBbZXAtPm51bSAtIDFdOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVwLT5kZXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCB1c2JfcmVxdWVzdCAqCituZXQyMjgwX2FsbG9jX3JlcXVlc3QgKHN0cnVjdCB1c2JfZXAgKl9lcCwgaW50IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXA7CisJc3RydWN0IG5ldDIyODBfcmVxdWVzdAkqcmVxOworCisJaWYgKCFfZXApCisJCXJldHVybiBOVUxMOworCWVwID0gY29udGFpbmVyX29mIChfZXAsIHN0cnVjdCBuZXQyMjgwX2VwLCBlcCk7CisKKwlyZXEgPSBrbWFsbG9jIChzaXplb2YgKnJlcSwgZ2ZwX2ZsYWdzKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQgKHJlcSwgMCwgc2l6ZW9mICpyZXEpOworCXJlcS0+cmVxLmRtYSA9IERNQV9BRERSX0lOVkFMSUQ7CisJSU5JVF9MSVNUX0hFQUQgKCZyZXEtPnF1ZXVlKTsKKworCS8qIHRoaXMgZG1hIGRlc2NyaXB0b3IgbWF5IGJlIHN3YXBwZWQgd2l0aCB0aGUgcHJldmlvdXMgZHVtbXkgKi8KKwlpZiAoZXAtPmRtYSkgeworCQlzdHJ1Y3QgbmV0MjI4MF9kbWEJKnRkOworCisJCXRkID0gcGNpX3Bvb2xfYWxsb2MgKGVwLT5kZXYtPnJlcXVlc3RzLCBnZnBfZmxhZ3MsCisJCQkJJnJlcS0+dGRfZG1hKTsKKwkJaWYgKCF0ZCkgeworCQkJa2ZyZWUgKHJlcSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQl0ZC0+ZG1hY291bnQgPSAwOwkvKiBub3QgVkFMSUQgKi8KKwkJdGQtPmRtYWFkZHIgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChETUFfQUREUl9JTlZBTElEKTsKKwkJdGQtPmRtYWRlc2MgPSB0ZC0+ZG1hYWRkcjsKKwkJcmVxLT50ZCA9IHRkOworCX0KKwlyZXR1cm4gJnJlcS0+cmVxOworfQorCitzdGF0aWMgdm9pZAorbmV0MjI4MF9mcmVlX3JlcXVlc3QgKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBuZXQyMjgwX2VwCSplcDsKKwlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0CSpyZXE7CisKKwllcCA9IGNvbnRhaW5lcl9vZiAoX2VwLCBzdHJ1Y3QgbmV0MjI4MF9lcCwgZXApOworCWlmICghX2VwIHx8ICFfcmVxKQorCQlyZXR1cm47CisKKwlyZXEgPSBjb250YWluZXJfb2YgKF9yZXEsIHN0cnVjdCBuZXQyMjgwX3JlcXVlc3QsIHJlcSk7CisJV0FSTl9PTiAoIWxpc3RfZW1wdHkgKCZyZXEtPnF1ZXVlKSk7CisJaWYgKHJlcS0+dGQpCisJCXBjaV9wb29sX2ZyZWUgKGVwLT5kZXYtPnJlcXVlc3RzLCByZXEtPnRkLCByZXEtPnRkX2RtYSk7CisJa2ZyZWUgKHJlcSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyN1bmRlZiBVU0VfS01BTExPQworCisvKiBtYW55IGNvbW1vbiBwbGF0Zm9ybXMgaGF2ZSBkbWEtY29oZXJlbnQgY2FjaGVzLCB3aGljaCBtZWFucyB0aGF0IGl0J3MKKyAqIHNhZmUgdG8gdXNlIGttYWxsb2MoKSBtZW1vcnkgZm9yIGFsbCBpL28gYnVmZmVycyB3aXRob3V0IHVzaW5nIGFueQorICogY2FjaGUgZmx1c2hpbmcgY2FsbHMuICAodW5sZXNzIHlvdSdyZSB0cnlpbmcgdG8gc2hhcmUgY2FjaGUgbGluZXMKKyAqIGJldHdlZW4gZG1hIGFuZCBub24tZG1hIGFjdGl2aXRpZXMsIHdoaWNoIGlzIGEgc2xvdyBpZGVhIGluIGFueSBjYXNlLikKKyAqCisgKiBvdGhlciBwbGF0Zm9ybXMgbmVlZCBtb3JlIGNhcmUsIHdpdGggMi41IGhhdmluZyBhIG1vZGVyYXRlbHkgZ2VuZXJhbAorICogc29sdXRpb24gKHdoaWNoIGZhbGxzIGRvd24gZm9yIGFsbG9jYXRpb25zIHNtYWxsZXIgdGhhbiBvbmUgcGFnZSkKKyAqIHRoYXQgaW1wcm92ZXMgc2lnbmlmaWNhbnRseSBvbiB0aGUgMi40IFBDSSBhbGxvY2F0b3JzIGJ5IHJlbW92aW5nCisgKiB0aGUgcmVzdHJpY3Rpb24gdGhhdCBtZW1vcnkgbmV2ZXIgYmUgZnJlZWQgaW5faW50ZXJydXB0KCkuCisgKi8KKyNpZglkZWZpbmVkKENPTkZJR19YODYpCisjZGVmaW5lIFVTRV9LTUFMTE9DCisKKyNlbGlmCWRlZmluZWQoQ09ORklHX1BQQykgJiYgIWRlZmluZWQoQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRSkKKyNkZWZpbmUgVVNFX0tNQUxMT0MKKworI2VsaWYJZGVmaW5lZChDT05GSUdfTUlQUykgJiYgIWRlZmluZWQoQ09ORklHX05PTkNPSEVSRU5UX0lPKQorI2RlZmluZSBVU0VfS01BTExPQworCisvKiBGSVhNRSB0aGVyZSBhcmUgb3RoZXIgY2FzZXMsIGluY2x1ZGluZyBhbiB4ODYtNjQgb25lIC4uLiAgKi8KKyNlbmRpZgorCisvKiBhbGxvY2F0aW5nIGJ1ZmZlcnMgdGhpcyB3YXkgZWxpbWluYXRlcyBkbWEgbWFwcGluZyBvdmVyaGVhZCwgd2hpY2gKKyAqIG9uIHNvbWUgcGxhdGZvcm1zIHdpbGwgbWVhbiBlbGltaW5hdGluZyBhIHBlci1pbyBidWZmZXIgY29weS4gIHdpdGgKKyAqIHNvbWUga2luZHMgb2Ygc3lzdGVtIGNhY2hlcywgZnVydGhlciB0d2Vha3MgbWF5IHN0aWxsIGJlIG5lZWRlZC4KKyAqLworc3RhdGljIHZvaWQgKgorbmV0MjI4MF9hbGxvY19idWZmZXIgKAorCXN0cnVjdCB1c2JfZXAJCSpfZXAsCisJdW5zaWduZWQJCWJ5dGVzLAorCWRtYV9hZGRyX3QJCSpkbWEsCisJaW50CQkJZ2ZwX2ZsYWdzCispCit7CisJdm9pZAkJCSpyZXR2YWw7CisJc3RydWN0IG5ldDIyODBfZXAJKmVwOworCisJZXAgPSBjb250YWluZXJfb2YgKF9lcCwgc3RydWN0IG5ldDIyODBfZXAsIGVwKTsKKwlpZiAoIV9lcCkKKwkJcmV0dXJuIE5VTEw7CisJKmRtYSA9IERNQV9BRERSX0lOVkFMSUQ7CisKKyNpZglkZWZpbmVkKFVTRV9LTUFMTE9DKQorCXJldHZhbCA9IGttYWxsb2MoYnl0ZXMsIGdmcF9mbGFncyk7CisJaWYgKHJldHZhbCkKKwkJKmRtYSA9IHZpcnRfdG9fcGh5cyhyZXR2YWwpOworI2Vsc2UKKwlpZiAoZXAtPmRtYSkgeworCQkvKiB0aGUgbWFpbiBwcm9ibGVtIHdpdGggdGhpcyBjYWxsIGlzIHRoYXQgaXQgd2FzdGVzIG1lbW9yeQorCQkgKiBvbiB0eXBpY2FsIDEvTiBwYWdlIGFsbG9jYXRpb25zOiBpdCBhbGxvY2F0ZXMgMS1OIHBhZ2VzLgorCQkgKi8KKyN3YXJuaW5nIFVzaW5nIGRtYV9hbGxvY19jb2hlcmVudCBldmVuIHdpdGggYnVmZmVycyBzbWFsbGVyIHRoYW4gYSBwYWdlLgorCQlyZXR2YWwgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmVwLT5kZXYtPnBkZXYtPmRldiwKKwkJCQlieXRlcywgZG1hLCBnZnBfZmxhZ3MpOworCX0gZWxzZQorCQlyZXR2YWwgPSBrbWFsbG9jKGJ5dGVzLCBnZnBfZmxhZ3MpOworI2VuZGlmCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQKK25ldDIyODBfZnJlZV9idWZmZXIgKAorCXN0cnVjdCB1c2JfZXAgKl9lcCwKKwl2b2lkICpidWYsCisJZG1hX2FkZHJfdCBkbWEsCisJdW5zaWduZWQgYnl0ZXMKKykgeworCS8qIGZyZWUgbWVtb3J5IGludG8gdGhlIHJpZ2h0IGFsbG9jYXRvciAqLworI2lmbmRlZglVU0VfS01BTExPQworCWlmIChkbWEgIT0gRE1BX0FERFJfSU5WQUxJRCkgeworCQlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXA7CisKKwkJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgbmV0MjI4MF9lcCwgZXApOworCQlpZiAoIV9lcCkKKwkJCXJldHVybjsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJmVwLT5kZXYtPnBkZXYtPmRldiwgYnl0ZXMsIGJ1ZiwgZG1hKTsKKwl9IGVsc2UKKyNlbmRpZgorCQlrZnJlZSAoYnVmKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogbG9hZCBhIHBhY2tldCBpbnRvIHRoZSBmaWZvIHdlIHVzZSBmb3IgdXNiIElOIHRyYW5zZmVycy4KKyAqIHdvcmtzIGZvciBhbGwgZW5kcG9pbnRzLgorICoKKyAqIE5PVEU6IHBpbyB3aXRoIGVwLWEuLmVwLWQgY291bGQgc3R1ZmYgbXVsdGlwbGUgcGFja2V0cyBpbnRvIHRoZSBmaWZvCisgKiBhdCBhIHRpbWUsIGJ1dCB0aGlzIGNvZGUgaXMgc2ltcGxlciBiZWNhdXNlIGl0IGtub3dzIGl0IG9ubHkgd3JpdGVzCisgKiBvbmUgcGFja2V0LiAgZXAtYS4uZXAtZCBzaG91bGQgdXNlIGRtYSBpbnN0ZWFkLgorICovCitzdGF0aWMgdm9pZAord3JpdGVfZmlmbyAoc3RydWN0IG5ldDIyODBfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgbmV0MjI4MF9lcF9yZWdzCV9faW9tZW0gKnJlZ3MgPSBlcC0+cmVnczsKKwl1OAkJCSpidWY7CisJdTMyCQkJdG1wOworCXVuc2lnbmVkCQljb3VudCwgdG90YWw7CisKKwkvKiBJTlZBUklBTlQ6ICBmaWZvIGlzIGN1cnJlbnRseSBlbXB0eS4gKHRlc3RhYmxlKSAqLworCisJaWYgKHJlcSkgeworCQlidWYgPSByZXEtPmJ1ZiArIHJlcS0+YWN0dWFsOworCQlwcmVmZXRjaCAoYnVmKTsKKwkJdG90YWwgPSByZXEtPmxlbmd0aCAtIHJlcS0+YWN0dWFsOworCX0gZWxzZSB7CisJCXRvdGFsID0gMDsKKwkJYnVmID0gTlVMTDsKKwl9CisKKwkvKiB3cml0ZSBqdXN0IG9uZSBwYWNrZXQgYXQgYSB0aW1lICovCisJY291bnQgPSBlcC0+ZXAubWF4cGFja2V0OworCWlmIChjb3VudCA+IHRvdGFsKQkvKiBtaW4oKSBjYW5ub3QgYmUgdXNlZCBvbiBhIGJpdGZpZWxkICovCisJCWNvdW50ID0gdG90YWw7CisKKwlWREVCVUcgKGVwLT5kZXYsICJ3cml0ZSAlcyBmaWZvIChJTikgJWQgYnl0ZXMlcyByZXEgJXBcbiIsCisJCQllcC0+ZXAubmFtZSwgY291bnQsCisJCQkoY291bnQgIT0gZXAtPmVwLm1heHBhY2tldCkgPyAiIChzaG9ydCkiIDogIiIsCisJCQlyZXEpOworCXdoaWxlIChjb3VudCA+PSA0KSB7CisJCS8qIE5PVEUgYmUgY2FyZWZ1bCBpZiB5b3UgdHJ5IHRvIGFsaWduIHRoZXNlLiBmaWZvIGxpbmVzCisJCSAqIHNob3VsZCBub3JtYWxseSBiZSBmdWxsICg0IGJ5dGVzKSBhbmQgc3VjY2Vzc2l2ZSBwYXJ0aWFsCisJCSAqIGxpbmVzIGFyZSBvayBvbmx5IGluIGNlcnRhaW4gY2FzZXMuCisJCSAqLworCQl0bXAgPSBnZXRfdW5hbGlnbmVkICgodTMyICopYnVmKTsKKwkJY3B1X3RvX2xlMzJzICgmdG1wKTsKKwkJd3JpdGVsICh0bXAsICZyZWdzLT5lcF9kYXRhKTsKKwkJYnVmICs9IDQ7CisJCWNvdW50IC09IDQ7CisJfQorCisJLyogbGFzdCBmaWZvIGVudHJ5IGlzICJzaG9ydCIgdW5sZXNzIHdlIHdyb3RlIGEgZnVsbCBwYWNrZXQuCisJICogYWxzbyBleHBsaWNpdGx5IHZhbGlkYXRlIGxhc3Qgd29yZCBpbiAocGVyaW9kaWMpIHRyYW5zZmVycworCSAqIHdoZW4gbWF4cGFja2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIDQgYnl0ZXMuCisJICovCisJaWYgKGNvdW50IHx8IHRvdGFsIDwgZXAtPmVwLm1heHBhY2tldCkgeworCQl0bXAgPSBjb3VudCA/IGdldF91bmFsaWduZWQgKCh1MzIgKilidWYpIDogY291bnQ7CisJCWNwdV90b19sZTMycyAoJnRtcCk7CisJCXNldF9maWZvX2J5dGVjb3VudCAoZXAsIGNvdW50ICYgMHgwMyk7CisJCXdyaXRlbCAodG1wLCAmcmVncy0+ZXBfZGF0YSk7CisJfQorCisJLyogcGNpIHdyaXRlcyBtYXkgc3RpbGwgYmUgcG9zdGVkICovCit9CisKKy8qIHdvcmsgYXJvdW5kIGVycmF0dW0gMDEwNjogUENJIGFuZCBVU0IgcmFjZSBvdmVyIHRoZSBPVVQgZmlmby4KKyAqIGNhbGxlciBndWFyYW50ZWVzIGNoaXByZXYgMDEwMCwgb3V0IGVuZHBvaW50IGlzIE5BS2luZywgYW5kCisgKiB0aGVyZSdzIG5vIHJlYWwgZGF0YSBpbiB0aGUgZmlmby4KKyAqCisgKiBOT1RFOiAgYWxzbyB1c2VkIGluIGNhc2VzIHdoZXJlIHRoYXQgZXJyYXR1bSBkb2Vzbid0IGFwcGx5OgorICogd2hlcmUgdGhlIGhvc3Qgd3JvdGUgInRvbyBtdWNoIiBkYXRhIHRvIHVzLgorICovCitzdGF0aWMgdm9pZCBvdXRfZmx1c2ggKHN0cnVjdCBuZXQyMjgwX2VwICplcCkKK3sKKwl1MzIJX19pb21lbSAqc3RhdHA7CisJdTMyCXRtcDsKKworCUFTU0VSVF9PVVRfTkFLSU5HIChlcCk7CisKKwlzdGF0cCA9ICZlcC0+cmVncy0+ZXBfc3RhdDsKKwl3cml0ZWwgKCAgKDEgPDwgREFUQV9PVVRfUElOR19UT0tFTl9JTlRFUlJVUFQpCisJCXwgKDEgPDwgREFUQV9QQUNLRVRfUkVDRUlWRURfSU5URVJSVVBUKQorCQksIHN0YXRwKTsKKwl3cml0ZWwgKCgxIDw8IEZJRk9fRkxVU0gpLCBzdGF0cCk7CisJbWIgKCk7CisJdG1wID0gcmVhZGwgKHN0YXRwKTsKKwlpZiAodG1wICYgKDEgPDwgREFUQV9PVVRfUElOR19UT0tFTl9JTlRFUlJVUFQpCisJCQkvKiBoaWdoIHNwZWVkIGRpZCBidWxrIE5ZRVQ7IGZpZm8gaXNuJ3QgZmlsbGluZyAqLworCQkJJiYgZXAtPmRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9GVUxMKSB7CisJCXVuc2lnbmVkCXVzZWM7CisKKwkJdXNlYyA9IDUwOwkJLyogNjQgYnl0ZSBidWxrL2ludGVycnVwdCAqLworCQloYW5kc2hha2UgKHN0YXRwLCAoMSA8PCBVU0JfT1VUX1BJTkdfTkFLX1NFTlQpLAorCQkJCSgxIDw8IFVTQl9PVVRfUElOR19OQUtfU0VOVCksIHVzZWMpOworCQkvKiBOQUsgZG9uZTsgbm93IENMRUFSX05BS19PVVRfUEFDS0VUUyBpcyBzYWZlICovCisJfQorfQorCisvKiB1bmxvYWQgcGFja2V0KHMpIGZyb20gdGhlIGZpZm8gd2UgdXNlIGZvciB1c2IgT1VUIHRyYW5zZmVycy4KKyAqIHJldHVybnMgdHJ1ZSBpZmYgdGhlIHJlcXVlc3QgY29tcGxldGVkLCBiZWNhdXNlIG9mIHNob3J0IHBhY2tldAorICogb3IgdGhlIHJlcXVlc3QgYnVmZmVyIGhhdmluZyBmaWxsZWQgd2l0aCBmdWxsIHBhY2tldHMuCisgKgorICogZm9yIGVwLWEuLmVwLWQgdGhpcyB3aWxsIHJlYWQgbXVsdGlwbGUgcGFja2V0cyBvdXQgd2hlbiB0aGV5CisgKiBoYXZlIGJlZW4gYWNjZXB0ZWQuCisgKi8KK3N0YXRpYyBpbnQKK3JlYWRfZmlmbyAoc3RydWN0IG5ldDIyODBfZXAgKmVwLCBzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IG5ldDIyODBfZXBfcmVncwlfX2lvbWVtICpyZWdzID0gZXAtPnJlZ3M7CisJdTgJCQkqYnVmID0gcmVxLT5yZXEuYnVmICsgcmVxLT5yZXEuYWN0dWFsOworCXVuc2lnbmVkCQljb3VudCwgdG1wLCBpc19zaG9ydDsKKwl1bnNpZ25lZAkJY2xlYW51cCA9IDAsIHByZXZlbnQgPSAwOworCisJLyogZXJyYXR1bSAwMTA2IC4uLiBwYWNrZXRzIGNvbWluZyBpbiBkdXJpbmcgZmlmbyByZWFkcyBtaWdodAorCSAqIGJlIGluY29tcGxldGVseSByZWplY3RlZC4gIG5vdCBhbGwgY2FzZXMgaGF2ZSB3b3JrYXJvdW5kcy4KKwkgKi8KKwlpZiAoZXAtPmRldi0+Y2hpcHJldiA9PSAweDAxMDAKKwkJCSYmIGVwLT5kZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfRlVMTCkgeworCQl1ZGVsYXkgKDEpOworCQl0bXAgPSByZWFkbCAoJmVwLT5yZWdzLT5lcF9zdGF0KTsKKwkJaWYgKCh0bXAgJiAoMSA8PCBOQUtfT1VUX1BBQ0tFVFMpKSkKKwkJCWNsZWFudXAgPSAxOworCQllbHNlIGlmICgodG1wICYgKDEgPDwgRklGT19GVUxMKSkpIHsKKwkJCXN0YXJ0X291dF9uYWtpbmcgKGVwKTsKKwkJCXByZXZlbnQgPSAxOworCQl9CisJCS8qIGVsc2U6IGhvcGUgd2UgZG9uJ3Qgc2VlIHRoZSBwcm9ibGVtICovCisJfQorCisJLyogbmV2ZXIgb3ZlcmZsb3cgdGhlIHJ4IGJ1ZmZlci4gdGhlIGZpZm8gcmVhZHMgcGFja2V0cyB1bnRpbAorCSAqIGl0IHNlZXMgYSBzaG9ydCBvbmU7IHdlIG1pZ2h0IG5vdCBiZSByZWFkeSBmb3IgdGhlbSBhbGwuCisJICovCisJcHJlZmV0Y2h3IChidWYpOworCWNvdW50ID0gcmVhZGwgKCZyZWdzLT5lcF9hdmFpbCk7CisJaWYgKHVubGlrZWx5IChjb3VudCA9PSAwKSkgeworCQl1ZGVsYXkgKDEpOworCQl0bXAgPSByZWFkbCAoJmVwLT5yZWdzLT5lcF9zdGF0KTsKKwkJY291bnQgPSByZWFkbCAoJnJlZ3MtPmVwX2F2YWlsKTsKKwkJLyogaGFuZGxlZCB0aGF0IGRhdGEgYWxyZWFkeT8gKi8KKwkJaWYgKGNvdW50ID09IDAgJiYgKHRtcCAmICgxIDw8IE5BS19PVVRfUEFDS0VUUykpID09IDApCisJCQlyZXR1cm4gMDsKKwl9CisKKwl0bXAgPSByZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWw7CisJaWYgKGNvdW50ID4gdG1wKSB7CisJCS8qIGFzIHdpdGggRE1BLCBkYXRhIG92ZXJmbG93IGdldHMgZmx1c2hlZCAqLworCQlpZiAoKHRtcCAlIGVwLT5lcC5tYXhwYWNrZXQpICE9IDApIHsKKwkJCUVSUk9SIChlcC0+ZGV2LAorCQkJCSIlcyBvdXQgZmlmbyAlZCBieXRlcywgZXhwZWN0ZWQgJWRcbiIsCisJCQkJZXAtPmVwLm5hbWUsIGNvdW50LCB0bXApOworCQkJcmVxLT5yZXEuc3RhdHVzID0gLUVPVkVSRkxPVzsKKwkJCWNsZWFudXAgPSAxOworCQkJLyogTkFLX09VVF9QQUNLRVRTIHdpbGwgYmUgc2V0LCBzbyBmbHVzaGluZyBpcyBzYWZlOworCQkJICogdGhlIG5leHQgcmVhZCB3aWxsIHN0YXJ0IHdpdGggdGhlIG5leHQgcGFja2V0CisJCQkgKi8KKwkJfSAvKiBlbHNlIGl0J3MgYSBaTFAsIG5vIHdvcnJpZXMgKi8KKwkJY291bnQgPSB0bXA7CisJfQorCXJlcS0+cmVxLmFjdHVhbCArPSBjb3VudDsKKworCWlzX3Nob3J0ID0gKGNvdW50ID09IDApIHx8ICgoY291bnQgJSBlcC0+ZXAubWF4cGFja2V0KSAhPSAwKTsKKworCVZERUJVRyAoZXAtPmRldiwgInJlYWQgJXMgZmlmbyAoT1VUKSAlZCBieXRlcyVzJXMlcyByZXEgJXAgJWQvJWRcbiIsCisJCQllcC0+ZXAubmFtZSwgY291bnQsIGlzX3Nob3J0ID8gIiAoc2hvcnQpIiA6ICIiLAorCQkJY2xlYW51cCA/ICIgZmx1c2giIDogIiIsIHByZXZlbnQgPyAiIG5hayIgOiAiIiwKKwkJCXJlcSwgcmVxLT5yZXEuYWN0dWFsLCByZXEtPnJlcS5sZW5ndGgpOworCisJd2hpbGUgKGNvdW50ID49IDQpIHsKKwkJdG1wID0gcmVhZGwgKCZyZWdzLT5lcF9kYXRhKTsKKwkJY3B1X3RvX2xlMzJzICgmdG1wKTsKKwkJcHV0X3VuYWxpZ25lZCAodG1wLCAodTMyICopYnVmKTsKKwkJYnVmICs9IDQ7CisJCWNvdW50IC09IDQ7CisJfQorCWlmIChjb3VudCkgeworCQl0bXAgPSByZWFkbCAoJnJlZ3MtPmVwX2RhdGEpOworCQkvKiBMRSBjb252ZXJzaW9uIGlzIGltcGxpY2l0IGhlcmU6ICovCisJCWRvIHsKKwkJCSpidWYrKyA9ICh1OCkgdG1wOworCQkJdG1wID4+PSA4OworCQl9IHdoaWxlICgtLWNvdW50KTsKKwl9CisJaWYgKGNsZWFudXApCisJCW91dF9mbHVzaCAoZXApOworCWlmIChwcmV2ZW50KSB7CisJCXdyaXRlbCAoKDEgPDwgQ0xFQVJfTkFLX09VVF9QQUNLRVRTKSwgJmVwLT5yZWdzLT5lcF9yc3ApOworCQkodm9pZCkgcmVhZGwgKCZlcC0+cmVncy0+ZXBfcnNwKTsKKwl9CisKKwlyZXR1cm4gaXNfc2hvcnQgfHwgKChyZXEtPnJlcS5hY3R1YWwgPT0gcmVxLT5yZXEubGVuZ3RoKQorCQkJCSYmICFyZXEtPnJlcS56ZXJvKTsKK30KKworLyogZmlsbCBvdXQgZG1hIGRlc2NyaXB0b3IgdG8gbWF0Y2ggYSBnaXZlbiByZXF1ZXN0ICovCitzdGF0aWMgdm9pZAorZmlsbF9kbWFfZGVzYyAoc3RydWN0IG5ldDIyODBfZXAgKmVwLCBzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0ICpyZXEsIGludCB2YWxpZCkKK3sKKwlzdHJ1Y3QgbmV0MjI4MF9kbWEJKnRkID0gcmVxLT50ZDsKKwl1MzIJCQlkbWFjb3VudCA9IHJlcS0+cmVxLmxlbmd0aDsKKworCS8qIGRvbid0IGxldCBETUEgY29udGludWUgYWZ0ZXIgYSBzaG9ydCBPVVQgcGFja2V0LAorCSAqIHNvIG92ZXJydW5zIGNhbid0IGFmZmVjdCB0aGUgbmV4dCB0cmFuc2Zlci4KKwkgKiBpbiBjYXNlIG9mIG92ZXJydW5zIG9uIG1heC1zaXplIHBhY2tldHMsIHdlIGNhbid0CisJICogc3RvcCB0aGUgZmlmbyBmcm9tIGZpbGxpbmcgYnV0IHdlIGNhbiBmbHVzaCBpdC4KKwkgKi8KKwlpZiAoZXAtPmlzX2luKQorCQlkbWFjb3VudCB8PSAoMSA8PCBETUFfRElSRUNUSU9OKTsKKwllbHNlIGlmICgoZG1hY291bnQgJSBlcC0+ZXAubWF4cGFja2V0KSAhPSAwKQorCQlkbWFjb3VudCB8PSAoMSA8PCBFTkRfT0ZfQ0hBSU4pOworCisJcmVxLT52YWxpZCA9IHZhbGlkOworCWlmICh2YWxpZCkKKwkJZG1hY291bnQgfD0gKDEgPDwgVkFMSURfQklUKTsKKwlpZiAobGlrZWx5KCFyZXEtPnJlcS5ub19pbnRlcnJ1cHQgfHwgIXVzZV9kbWFfY2hhaW5pbmcpKQorCQlkbWFjb3VudCB8PSAoMSA8PCBETUFfRE9ORV9JTlRFUlJVUFRfRU5BQkxFKTsKKworCS8qIHRkLT5kbWFkZXNjID0gcHJldmlvdXNseSBzZXQgYnkgY2FsbGVyICovCisJdGQtPmRtYWFkZHIgPSBjcHVfdG9fbGUzMiAocmVxLT5yZXEuZG1hKTsKKworCS8qIDIyODAgbWF5IGJlIHBvbGxpbmcgVkFMSURfQklUIHRocm91Z2ggZXAtPmRtYS0+ZG1hZGVzYyAqLworCXdtYiAoKTsKKwl0ZC0+ZG1hY291bnQgPSBjcHVfdG9fbGUzMnAgKCZkbWFjb3VudCk7Cit9CisKK3N0YXRpYyBjb25zdCB1MzIgZG1hY3RsX2RlZmF1bHQgPQorCQkgICgxIDw8IERNQV9TQ0FUVEVSX0dBVEhFUl9ET05FX0lOVEVSUlVQVCkKKwkJfCAoMSA8PCBETUFfQ0xFQVJfQ09VTlRfRU5BQkxFKQorCQkvKiBlcnJhdHVtIDAxMTYgd29ya2Fyb3VuZCBwYXJ0IDEgKHVzZSBQT0xMSU5HKSAqLworCQl8IChQT0xMXzEwMF9VU0VDIDw8IERFU0NSSVBUT1JfUE9MTElOR19SQVRFKQorCQl8ICgxIDw8IERNQV9WQUxJRF9CSVRfUE9MTElOR19FTkFCTEUpCisJCXwgKDEgPDwgRE1BX1ZBTElEX0JJVF9FTkFCTEUpCisJCXwgKDEgPDwgRE1BX1NDQVRURVJfR0FUSEVSX0VOQUJMRSkKKwkJLyogZXJyYXR1bSAwMTE2IHdvcmthcm91bmQgcGFydCAyIChubyBBVVRPU1RBUlQpICovCisJCXwgKDEgPDwgRE1BX0VOQUJMRSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcGluX3N0b3BfZG1hIChzdHJ1Y3QgbmV0MjI4MF9kbWFfcmVncyBfX2lvbWVtICpkbWEpCit7CisJaGFuZHNoYWtlICgmZG1hLT5kbWFjdGwsICgxIDw8IERNQV9FTkFCTEUpLCAwLCA1MCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG9wX2RtYSAoc3RydWN0IG5ldDIyODBfZG1hX3JlZ3MgX19pb21lbSAqZG1hKQoreworCXdyaXRlbCAocmVhZGwgKCZkbWEtPmRtYWN0bCkgJiB+KDEgPDwgRE1BX0VOQUJMRSksICZkbWEtPmRtYWN0bCk7CisJc3Bpbl9zdG9wX2RtYSAoZG1hKTsKK30KKworc3RhdGljIHZvaWQgc3RhcnRfcXVldWUgKHN0cnVjdCBuZXQyMjgwX2VwICplcCwgdTMyIGRtYWN0bCwgdTMyIHRkX2RtYSkKK3sKKwlzdHJ1Y3QgbmV0MjI4MF9kbWFfcmVncwlfX2lvbWVtICpkbWEgPSBlcC0+ZG1hOworCisJd3JpdGVsICgoMSA8PCBWQUxJRF9CSVQpIHwgKGVwLT5pc19pbiA8PCBETUFfRElSRUNUSU9OKSwKKwkJCSZkbWEtPmRtYWNvdW50KTsKKwl3cml0ZWwgKHJlYWRsICgmZG1hLT5kbWFzdGF0KSwgJmRtYS0+ZG1hc3RhdCk7CisKKwl3cml0ZWwgKHRkX2RtYSwgJmRtYS0+ZG1hZGVzYyk7CisJd3JpdGVsIChkbWFjdGwsICZkbWEtPmRtYWN0bCk7CisKKwkvKiBlcnJhdHVtIDAxMTYgd29ya2Fyb3VuZCBwYXJ0IDM6ICBwY2kgYXJiaXRlciBhd2F5IGZyb20gbmV0MjI4MCAqLworCSh2b2lkKSByZWFkbCAoJmVwLT5kZXYtPnBjaS0+cGNpbXN0Y3RsKTsKKworCXdyaXRlbCAoKDEgPDwgRE1BX1NUQVJUKSwgJmRtYS0+ZG1hc3RhdCk7CisKKwlpZiAoIWVwLT5pc19pbikKKwkJc3RvcF9vdXRfbmFraW5nIChlcCk7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X2RtYSAoc3RydWN0IG5ldDIyODBfZXAgKmVwLCBzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0ICpyZXEpCit7CisJdTMyCQkJdG1wOworCXN0cnVjdCBuZXQyMjgwX2RtYV9yZWdzCV9faW9tZW0gKmRtYSA9IGVwLT5kbWE7CisKKwkvKiBGSVhNRSBjYW4ndCB1c2UgRE1BIGZvciBaTFBzICovCisKKwkvKiBvbiB0aGlzIHBhdGggd2UgImtub3ciIHRoZXJlJ3Mgbm8gZG1hIGFjdGl2ZSAoeWV0KSAqLworCVdBUk5fT04gKHJlYWRsICgmZG1hLT5kbWFjdGwpICYgKDEgPDwgRE1BX0VOQUJMRSkpOworCXdyaXRlbCAoMCwgJmVwLT5kbWEtPmRtYWN0bCk7CisKKwkvKiBwcmV2aW91cyBPVVQgcGFja2V0IG1pZ2h0IGhhdmUgYmVlbiBzaG9ydCAqLworCWlmICghZXAtPmlzX2luICYmICgodG1wID0gcmVhZGwgKCZlcC0+cmVncy0+ZXBfc3RhdCkpCisJCSAJCSYgKDEgPDwgTkFLX09VVF9QQUNLRVRTKSkgIT0gMCkgeworCQl3cml0ZWwgKCgxIDw8IFNIT1JUX1BBQ0tFVF9UUkFOU0ZFUlJFRF9JTlRFUlJVUFQpLAorCQkJJmVwLT5yZWdzLT5lcF9zdGF0KTsKKworCQl0bXAgPSByZWFkbCAoJmVwLT5yZWdzLT5lcF9hdmFpbCk7CisJCWlmICh0bXApIHsKKwkJCXdyaXRlbCAocmVhZGwgKCZkbWEtPmRtYXN0YXQpLCAmZG1hLT5kbWFzdGF0KTsKKworCQkJLyogdHJhbnNmZXIgYWxsL3NvbWUgZmlmbyBkYXRhICovCisJCQl3cml0ZWwgKHJlcS0+cmVxLmRtYSwgJmRtYS0+ZG1hYWRkcik7CisJCQl0bXAgPSBtaW4gKHRtcCwgcmVxLT5yZXEubGVuZ3RoKTsKKworCQkJLyogZG1hIGlycSwgZmFraW5nIHNjYXR0ZXJsaXN0IHN0YXR1cyAqLworCQkJcmVxLT50ZC0+ZG1hY291bnQgPSBjcHVfdG9fbGUzMiAocmVxLT5yZXEubGVuZ3RoIC0gdG1wKTsKKwkJCXdyaXRlbCAoKDEgPDwgRE1BX0RPTkVfSU5URVJSVVBUX0VOQUJMRSkKKwkJCQl8IHRtcCwgJmRtYS0+ZG1hY291bnQpOworCQkJcmVxLT50ZC0+ZG1hZGVzYyA9IDA7CisJCQlyZXEtPnZhbGlkID0gMTsKKworCQkJd3JpdGVsICgoMSA8PCBETUFfRU5BQkxFKSwgJmRtYS0+ZG1hY3RsKTsKKwkJCXdyaXRlbCAoKDEgPDwgRE1BX1NUQVJUKSwgJmRtYS0+ZG1hc3RhdCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwl0bXAgPSBkbWFjdGxfZGVmYXVsdDsKKworCS8qIGZvcmNlIHBhY2tldCBib3VuZGFyaWVzIGJldHdlZW4gZG1hIHJlcXVlc3RzLCBidXQgcHJldmVudCB0aGUKKwkgKiBjb250cm9sbGVyIGZyb20gYXV0b21hZ2ljYWxseSB3cml0aW5nIGEgbGFzdCAic2hvcnQiIHBhY2tldAorCSAqICh6ZXJvIGxlbmd0aCkgdW5sZXNzIHRoZSBkcml2ZXIgZXhwbGljaXRseSBzYWlkIHRvIGRvIHRoYXQuCisJICovCisJaWYgKGVwLT5pc19pbikgeworCQlpZiAobGlrZWx5ICgocmVxLT5yZXEubGVuZ3RoICUgZXAtPmVwLm1heHBhY2tldCkgIT0gMAorCQkJCXx8IHJlcS0+cmVxLnplcm8pKSB7CisJCQl0bXAgfD0gKDEgPDwgRE1BX0ZJRk9fVkFMSURBVEUpOworCQkJZXAtPmluX2ZpZm9fdmFsaWRhdGUgPSAxOworCQl9IGVsc2UKKwkJCWVwLT5pbl9maWZvX3ZhbGlkYXRlID0gMDsKKwl9CisKKwkvKiBpbml0IHJlcS0+dGQsIHBvaW50aW5nIHRvIHRoZSBjdXJyZW50IGR1bW15ICovCisJcmVxLT50ZC0+ZG1hZGVzYyA9IGNwdV90b19sZTMyIChlcC0+dGRfZG1hKTsKKwlmaWxsX2RtYV9kZXNjIChlcCwgcmVxLCAxKTsKKworCWlmICghdXNlX2RtYV9jaGFpbmluZykKKwkJcmVxLT50ZC0+ZG1hY291bnQgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSA8PCBFTkRfT0ZfQ0hBSU4pOworCisJc3RhcnRfcXVldWUgKGVwLCB0bXAsIHJlcS0+dGRfZG1hKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitxdWV1ZV9kbWEgKHN0cnVjdCBuZXQyMjgwX2VwICplcCwgc3RydWN0IG5ldDIyODBfcmVxdWVzdCAqcmVxLCBpbnQgdmFsaWQpCit7CisJc3RydWN0IG5ldDIyODBfZG1hCSplbmQ7CisJZG1hX2FkZHJfdAkJdG1wOworCisJLyogc3dhcCBuZXcgZHVtbXkgZm9yIG9sZCwgbGluazsgZmlsbCBhbmQgbWF5YmUgYWN0aXZhdGUgKi8KKwllbmQgPSBlcC0+ZHVtbXk7CisJZXAtPmR1bW15ID0gcmVxLT50ZDsKKwlyZXEtPnRkID0gZW5kOworCisJdG1wID0gZXAtPnRkX2RtYTsKKwllcC0+dGRfZG1hID0gcmVxLT50ZF9kbWE7CisJcmVxLT50ZF9kbWEgPSB0bXA7CisKKwllbmQtPmRtYWRlc2MgPSBjcHVfdG9fbGUzMiAoZXAtPnRkX2RtYSk7CisKKwlmaWxsX2RtYV9kZXNjIChlcCwgcmVxLCB2YWxpZCk7Cit9CisKK3N0YXRpYyB2b2lkCitkb25lIChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXAsIHN0cnVjdCBuZXQyMjgwX3JlcXVlc3QgKnJlcSwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgbmV0MjI4MAkJKmRldjsKKwl1bnNpZ25lZAkJc3RvcHBlZCA9IGVwLT5zdG9wcGVkOworCisJbGlzdF9kZWxfaW5pdCAoJnJlcS0+cXVldWUpOworCisJaWYgKHJlcS0+cmVxLnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCisJCXJlcS0+cmVxLnN0YXR1cyA9IHN0YXR1czsKKwllbHNlCisJCXN0YXR1cyA9IHJlcS0+cmVxLnN0YXR1czsKKworCWRldiA9IGVwLT5kZXY7CisJaWYgKHJlcS0+bWFwcGVkKSB7CisJCXBjaV91bm1hcF9zaW5nbGUgKGRldi0+cGRldiwgcmVxLT5yZXEuZG1hLCByZXEtPnJlcS5sZW5ndGgsCisJCQllcC0+aXNfaW4gPyBQQ0lfRE1BX1RPREVWSUNFIDogUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJcmVxLT5yZXEuZG1hID0gRE1BX0FERFJfSU5WQUxJRDsKKwkJcmVxLT5tYXBwZWQgPSAwOworCX0KKworCWlmIChzdGF0dXMgJiYgc3RhdHVzICE9IC1FU0hVVERPV04pCisJCVZERUJVRyAoZGV2LCAiY29tcGxldGUgJXMgcmVxICVwIHN0YXQgJWQgbGVuICV1LyV1XG4iLAorCQkJZXAtPmVwLm5hbWUsICZyZXEtPnJlcSwgc3RhdHVzLAorCQkJcmVxLT5yZXEuYWN0dWFsLCByZXEtPnJlcS5sZW5ndGgpOworCisJLyogZG9uJ3QgbW9kaWZ5IHF1ZXVlIGhlYWRzIGR1cmluZyBjb21wbGV0aW9uIGNhbGxiYWNrICovCisJZXAtPnN0b3BwZWQgPSAxOworCXNwaW5fdW5sb2NrICgmZGV2LT5sb2NrKTsKKwlyZXEtPnJlcS5jb21wbGV0ZSAoJmVwLT5lcCwgJnJlcS0+cmVxKTsKKwlzcGluX2xvY2sgKCZkZXYtPmxvY2spOworCWVwLT5zdG9wcGVkID0gc3RvcHBlZDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludAorbmV0MjI4MF9xdWV1ZSAoc3RydWN0IHVzYl9lcCAqX2VwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKl9yZXEsIGludCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IG5ldDIyODBfcmVxdWVzdAkqcmVxOworCXN0cnVjdCBuZXQyMjgwX2VwCSplcDsKKwlzdHJ1Y3QgbmV0MjI4MAkJKmRldjsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCS8qIHdlIGFsd2F5cyByZXF1aXJlIGEgY3B1LXZpZXcgYnVmZmVyLCBzbyB0aGF0IHdlIGNhbgorCSAqIGFsd2F5cyB1c2UgcGlvIChhcyBmYWxsYmFjayBvciB3aGF0ZXZlcikuCisJICovCisJcmVxID0gY29udGFpbmVyX29mIChfcmVxLCBzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0LCByZXEpOworCWlmICghX3JlcSB8fCAhX3JlcS0+Y29tcGxldGUgfHwgIV9yZXEtPmJ1ZgorCQkJfHwgIWxpc3RfZW1wdHkgKCZyZXEtPnF1ZXVlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKF9yZXEtPmxlbmd0aCA+ICh+MCAmIERNQV9CWVRFX0NPVU5UX01BU0spKQorCQlyZXR1cm4gLUVET007CisJZXAgPSBjb250YWluZXJfb2YgKF9lcCwgc3RydWN0IG5ldDIyODBfZXAsIGVwKTsKKwlpZiAoIV9lcCB8fCAoIWVwLT5kZXNjICYmIGVwLT5udW0gIT0gMCkpCisJCXJldHVybiAtRUlOVkFMOworCWRldiA9IGVwLT5kZXY7CisJaWYgKCFkZXYtPmRyaXZlciB8fCBkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJcmV0dXJuIC1FU0hVVERPV047CisKKwkvKiBGSVhNRSBpbXBsZW1lbnQgUElPIGZhbGxiYWNrIGZvciBaTFBzIHdpdGggRE1BICovCisJaWYgKGVwLT5kbWEgJiYgX3JlcS0+bGVuZ3RoID09IDApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCS8qIHNldCB1cCBkbWEgbWFwcGluZyBpbiBjYXNlIHRoZSBjYWxsZXIgZGlkbid0ICovCisJaWYgKGVwLT5kbWEgJiYgX3JlcS0+ZG1hID09IERNQV9BRERSX0lOVkFMSUQpIHsKKwkJX3JlcS0+ZG1hID0gcGNpX21hcF9zaW5nbGUgKGRldi0+cGRldiwgX3JlcS0+YnVmLCBfcmVxLT5sZW5ndGgsCisJCQllcC0+aXNfaW4gPyBQQ0lfRE1BX1RPREVWSUNFIDogUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJcmVxLT5tYXBwZWQgPSAxOworCX0KKworI2lmIDAKKwlWREVCVUcgKGRldiwgIiVzIHF1ZXVlIHJlcSAlcCwgbGVuICVkIGJ1ZiAlcFxuIiwKKwkJCV9lcC0+bmFtZSwgX3JlcSwgX3JlcS0+bGVuZ3RoLCBfcmVxLT5idWYpOworI2VuZGlmCisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCisJX3JlcS0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCV9yZXEtPmFjdHVhbCA9IDA7CisKKwkvKiBraWNrc3RhcnQgdGhpcyBpL28gcXVldWU/ICovCisJaWYgKGxpc3RfZW1wdHkgKCZlcC0+cXVldWUpICYmICFlcC0+c3RvcHBlZCkgeworCQkvKiB1c2UgRE1BIGlmIHRoZSBlbmRwb2ludCBzdXBwb3J0cyBpdCwgZWxzZSBwaW8gKi8KKwkJaWYgKGVwLT5kbWEpCisJCQlzdGFydF9kbWEgKGVwLCByZXEpOworCQllbHNlIHsKKwkJCS8qIG1heWJlIHRoZXJlJ3Mgbm8gY29udHJvbCBkYXRhLCBqdXN0IHN0YXR1cyBhY2sgKi8KKwkJCWlmIChlcC0+bnVtID09IDAgJiYgX3JlcS0+bGVuZ3RoID09IDApIHsKKwkJCQlhbGxvd19zdGF0dXMgKGVwKTsKKwkJCQlkb25lIChlcCwgcmVxLCAwKTsKKwkJCQlWREVCVUcgKGRldiwgIiVzIHN0YXR1cyBhY2tcbiIsIGVwLT5lcC5uYW1lKTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisKKwkJCS8qIFBJTyAuLi4gc3R1ZmYgdGhlIGZpZm8sIG9yIHVuYmxvY2sgaXQuICAqLworCQkJaWYgKGVwLT5pc19pbikKKwkJCQl3cml0ZV9maWZvIChlcCwgX3JlcSk7CisJCQllbHNlIGlmIChsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKSkgeworCQkJCXUzMglzOworCisJCQkJLyogT1VUIEZJRk8gbWlnaHQgaGF2ZSBwYWNrZXQocykgYnVmZmVyZWQgKi8KKwkJCQlzID0gcmVhZGwgKCZlcC0+cmVncy0+ZXBfc3RhdCk7CisJCQkJaWYgKChzICYgKDEgPDwgRklGT19FTVBUWSkpID09IDApIHsKKwkJCQkJLyogbm90ZTogIF9yZXEtPnNob3J0X25vdF9vayBpcworCQkJCQkgKiBpZ25vcmVkIGhlcmUgc2luY2UgUElPIF9hbHdheXNfCisJCQkJCSAqIHN0b3BzIHF1ZXVlIGFkdmFuY2UgaGVyZSwgYW5kCisJCQkJCSAqIF9yZXEtPnN0YXR1cyBkb2Vzbid0IGNoYW5nZSBmb3IKKwkJCQkJICogc2hvcnQgcmVhZHMgKG9ubHkgX3JlcS0+YWN0dWFsKQorCQkJCQkgKi8KKwkJCQkJaWYgKHJlYWRfZmlmbyAoZXAsIHJlcSkpIHsKKwkJCQkJCWRvbmUgKGVwLCByZXEsIDApOworCQkJCQkJaWYgKGVwLT5udW0gPT0gMCkKKwkJCQkJCQlhbGxvd19zdGF0dXMgKGVwKTsKKwkJCQkJCS8qIGRvbid0IHF1ZXVlIGl0ICovCisJCQkJCQlyZXEgPSBOVUxMOworCQkJCQl9IGVsc2UKKwkJCQkJCXMgPSByZWFkbCAoJmVwLT5yZWdzLT5lcF9zdGF0KTsKKwkJCQl9CisKKwkJCQkvKiBkb24ndCBOQUssIGxldCB0aGUgZmlmbyBmaWxsICovCisJCQkJaWYgKHJlcSAmJiAocyAmICgxIDw8IE5BS19PVVRfUEFDS0VUUykpKQorCQkJCQl3cml0ZWwgKCgxIDw8IENMRUFSX05BS19PVVRfUEFDS0VUUyksCisJCQkJCQkJJmVwLT5yZWdzLT5lcF9yc3ApOworCQkJfQorCQl9CisKKwl9IGVsc2UgaWYgKGVwLT5kbWEpIHsKKwkJaW50CXZhbGlkID0gMTsKKworCQlpZiAoZXAtPmlzX2luKSB7CisJCQlpbnQJZXhwZWN0OworCisJCQkvKiBwcmV2ZW50aW5nIG1hZ2ljIHpscHMgaXMgcGVyLWVuZ2luZSBzdGF0ZSwgbm90CisJCQkgKiBwZXItdHJhbnNmZXI7IGlycSBsb2dpYyBtdXN0IHJlY292ZXIgaGljY3Vwcy4KKwkJCSAqLworCQkJZXhwZWN0ID0gbGlrZWx5IChyZXEtPnJlcS56ZXJvCisJCQkJfHwgKHJlcS0+cmVxLmxlbmd0aCAlIGVwLT5lcC5tYXhwYWNrZXQpICE9IDApOworCQkJaWYgKGV4cGVjdCAhPSBlcC0+aW5fZmlmb192YWxpZGF0ZSkKKwkJCQl2YWxpZCA9IDA7CisJCX0KKwkJcXVldWVfZG1hIChlcCwgcmVxLCB2YWxpZCk7CisKKwl9IC8qIGVsc2UgdGhlIGlycSBoYW5kbGVyIGFkdmFuY2VzIHRoZSBxdWV1ZS4gKi8KKworCWlmIChyZXEpCisJCWxpc3RfYWRkX3RhaWwgKCZyZXEtPnF1ZXVlLCAmZXAtPnF1ZXVlKTsKK2RvbmU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCisJLyogcGNpIHdyaXRlcyBtYXkgc3RpbGwgYmUgcG9zdGVkICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZG1hX2RvbmUgKAorCXN0cnVjdCBuZXQyMjgwX2VwICplcCwKKwlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0ICpyZXEsCisJdTMyIGRtYWNvdW50LAorCWludCBzdGF0dXMKKykKK3sKKwlyZXEtPnJlcS5hY3R1YWwgPSByZXEtPnJlcS5sZW5ndGggLSAoRE1BX0JZVEVfQ09VTlRfTUFTSyAmIGRtYWNvdW50KTsKKwlkb25lIChlcCwgcmVxLCBzdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCByZXN0YXJ0X2RtYSAoc3RydWN0IG5ldDIyODBfZXAgKmVwKTsKKworc3RhdGljIHZvaWQgc2Nhbl9kbWFfY29tcGxldGlvbnMgKHN0cnVjdCBuZXQyMjgwX2VwICplcCkKK3sKKwkvKiBvbmx5IGxvb2sgYXQgZGVzY3JpcHRvcnMgdGhhdCB3ZXJlICJuYXR1cmFsbHkiIHJldGlyZWQsCisJICogc28gZmlmbyBhbmQgbGlzdCBoZWFkIHN0YXRlIHdvbid0IG1hdHRlcgorCSAqLworCXdoaWxlICghbGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkpIHsKKwkJc3RydWN0IG5ldDIyODBfcmVxdWVzdAkqcmVxOworCQl1MzIJCQl0bXA7CisKKwkJcmVxID0gbGlzdF9lbnRyeSAoZXAtPnF1ZXVlLm5leHQsCisJCQkJc3RydWN0IG5ldDIyODBfcmVxdWVzdCwgcXVldWUpOworCQlpZiAoIXJlcS0+dmFsaWQpCisJCQlicmVhazsKKwkJcm1iICgpOworCQl0bXAgPSBsZTMyX3RvX2NwdXAgKCZyZXEtPnRkLT5kbWFjb3VudCk7CisJCWlmICgodG1wICYgKDEgPDwgVkFMSURfQklUKSkgIT0gMCkKKwkJCWJyZWFrOworCisJCS8qIFNIT1JUX1BBQ0tFVF9UUkFOU0ZFUlJFRF9JTlRFUlJVUFQgaGFuZGxlcyAidXNiLXNob3J0IgorCQkgKiBjYXNlcyB3aGVyZSBETUEgbXVzdCBiZSBhYm9ydGVkOyB0aGlzIGNvZGUgaGFuZGxlcworCQkgKiBhbGwgbm9uLWFib3J0IERNQSBjb21wbGV0aW9ucy4KKwkJICovCisJCWlmICh1bmxpa2VseSAocmVxLT50ZC0+ZG1hZGVzYyA9PSAwKSkgeworCQkJLyogcGFyYW5vaWEgKi8KKwkJCXRtcCA9IHJlYWRsICgmZXAtPmRtYS0+ZG1hY291bnQpOworCQkJaWYgKHRtcCAmIERNQV9CWVRFX0NPVU5UX01BU0spCisJCQkJYnJlYWs7CisJCQkvKiBzaW5nbGUgdHJhbnNmZXIgbW9kZSAqLworCQkJZG1hX2RvbmUgKGVwLCByZXEsIHRtcCwgMCk7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmICghZXAtPmlzX2luCisJCQkJJiYgKHJlcS0+cmVxLmxlbmd0aCAlIGVwLT5lcC5tYXhwYWNrZXQpICE9IDApIHsKKwkJCXRtcCA9IHJlYWRsICgmZXAtPnJlZ3MtPmVwX3N0YXQpOworCisJCQkvKiBBVk9JRCBUUk9VQkxFIEhFUkUgYnkgbm90IGlzc3Vpbmcgc2hvcnQgcmVhZHMgZnJvbQorCQkJICogeW91ciBnYWRnZXQgZHJpdmVyLiAgVGhhdCBoZWxwcyBhdm9pZHMgZXJyYXRhIDAxMjEsCisJCQkgKiAwMTIyLCBhbmQgMDEyNDsgbm90IGFsbCBjYXNlcyB0cmlnZ2VyIHRoZSB3YXJuaW5nLgorCQkJICovCisJCQlpZiAoKHRtcCAmICgxIDw8IE5BS19PVVRfUEFDS0VUUykpID09IDApIHsKKwkJCQlXQVJOIChlcC0+ZGV2LCAiJXMgbG9zdCBwYWNrZXQgc3luYyFcbiIsCisJCQkJCQllcC0+ZXAubmFtZSk7CisJCQkJcmVxLT5yZXEuc3RhdHVzID0gLUVPVkVSRkxPVzsKKwkJCX0gZWxzZSBpZiAoKHRtcCA9IHJlYWRsICgmZXAtPnJlZ3MtPmVwX2F2YWlsKSkgIT0gMCkgeworCQkJCS8qIGZpZm8gZ2V0cyBmbHVzaGVkIGxhdGVyICovCisJCQkJZXAtPm91dF9vdmVyZmxvdyA9IDE7CisJCQkJREVCVUcgKGVwLT5kZXYsICIlcyBkbWEsIGRpc2NhcmQgJWQgbGVuICVkXG4iLAorCQkJCQkJZXAtPmVwLm5hbWUsIHRtcCwKKwkJCQkJCXJlcS0+cmVxLmxlbmd0aCk7CisJCQkJcmVxLT5yZXEuc3RhdHVzID0gLUVPVkVSRkxPVzsKKwkJCX0KKwkJfQorCQlkbWFfZG9uZSAoZXAsIHJlcSwgdG1wLCAwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlc3RhcnRfZG1hIChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXApCit7CisJc3RydWN0IG5ldDIyODBfcmVxdWVzdAkqcmVxOworCXUzMgkJCWRtYWN0bCA9IGRtYWN0bF9kZWZhdWx0OworCisJaWYgKGVwLT5zdG9wcGVkKQorCQlyZXR1cm47CisJcmVxID0gbGlzdF9lbnRyeSAoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBuZXQyMjgwX3JlcXVlc3QsIHF1ZXVlKTsKKworCWlmICghdXNlX2RtYV9jaGFpbmluZykgeworCQlzdGFydF9kbWEgKGVwLCByZXEpOworCQlyZXR1cm47CisJfQorCisJLyogdGhlIDIyODAgd2lsbCBiZSBwcm9jZXNzaW5nIHRoZSBxdWV1ZSB1bmxlc3MgcXVldWUgaGljY3VwcyBhZnRlcgorCSAqIHRoZSBwcmV2aW91cyB0cmFuc2ZlcjoKKwkgKiAgSU46ICAgd2FudGVkIGF1dG9tYWdpYyB6bHAsIGhlYWQgZG9lc24ndCAob3IgdmljZSB2ZXJzYSkKKwkgKiAgICAgICAgRE1BX0ZJRk9fVkFMSURBVEUgZG9lc24ndCBpbml0IGZyb20gZG1hIGRlc2NyaXB0b3JzLgorCSAqICBPVVQ6ICB3YXMgInVzYi1zaG9ydCIsIHdlIG11c3QgcmVzdGFydC4KKwkgKi8KKwlpZiAoZXAtPmlzX2luICYmICFyZXEtPnZhbGlkKSB7CisJCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QJKmVudHJ5LCAqcHJldiA9IE5VTEw7CisJCWludAkJCXJlcW1vZGUsIGRvbmUgPSAwOworCisJCURFQlVHIChlcC0+ZGV2LCAiJXMgZG1hIGhpY2N1cCB0ZCAlcFxuIiwgZXAtPmVwLm5hbWUsIHJlcS0+dGQpOworCQllcC0+aW5fZmlmb192YWxpZGF0ZSA9IGxpa2VseSAocmVxLT5yZXEuemVybworCQkJfHwgKHJlcS0+cmVxLmxlbmd0aCAlIGVwLT5lcC5tYXhwYWNrZXQpICE9IDApOworCQlpZiAoZXAtPmluX2ZpZm9fdmFsaWRhdGUpCisJCQlkbWFjdGwgfD0gKDEgPDwgRE1BX0ZJRk9fVkFMSURBVEUpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5IChlbnRyeSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKKwkJCXUzMgkJZG1hY291bnQ7CisKKwkJCWlmIChlbnRyeSA9PSByZXEpCisJCQkJY29udGludWU7CisJCQlkbWFjb3VudCA9IGVudHJ5LT50ZC0+ZG1hY291bnQ7CisJCQlpZiAoIWRvbmUpIHsKKwkJCQlyZXFtb2RlID0gbGlrZWx5IChlbnRyeS0+cmVxLnplcm8KKwkJCQkJfHwgKGVudHJ5LT5yZXEubGVuZ3RoCisJCQkJCQklIGVwLT5lcC5tYXhwYWNrZXQpICE9IDApOworCQkJCWlmIChyZXFtb2RlID09IGVwLT5pbl9maWZvX3ZhbGlkYXRlKSB7CisJCQkJCWVudHJ5LT52YWxpZCA9IDE7CisJCQkJCWRtYWNvdW50IHw9IHZhbGlkX2JpdDsKKwkJCQkJZW50cnktPnRkLT5kbWFjb3VudCA9IGRtYWNvdW50OworCQkJCQlwcmV2ID0gZW50cnk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIGZvcmNlIGEgaGljY3VwICovCisJCQkJCXByZXYtPnRkLT5kbWFjb3VudCB8PSBkbWFfZG9uZV9pZTsKKwkJCQkJZG9uZSA9IDE7CisJCQkJfQorCQkJfQorCisJCQkvKiB3YWxrIHRoZSByZXN0IG9mIHRoZSBxdWV1ZSBzbyB1bmxpbmtzIGJlaGF2ZSAqLworCQkJZW50cnktPnZhbGlkID0gMDsKKwkJCWRtYWNvdW50ICY9IH52YWxpZF9iaXQ7CisJCQllbnRyeS0+dGQtPmRtYWNvdW50ID0gZG1hY291bnQ7CisJCQlwcmV2ID0gZW50cnk7CisJCX0KKwl9CisKKwl3cml0ZWwgKDAsICZlcC0+ZG1hLT5kbWFjdGwpOworCXN0YXJ0X3F1ZXVlIChlcCwgZG1hY3RsLCByZXEtPnRkX2RtYSk7Cit9CisKK3N0YXRpYyB2b2lkIGFib3J0X2RtYSAoc3RydWN0IG5ldDIyODBfZXAgKmVwKQoreworCS8qIGFib3J0IHRoZSBjdXJyZW50IHRyYW5zZmVyICovCisJaWYgKGxpa2VseSAoIWxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKSkgeworCQkvKiBGSVhNRSB3b3JrIGFyb3VuZCBlcnJhdGEgMDEyMSwgMDEyMiwgMDEyNCAqLworCQl3cml0ZWwgKCgxIDw8IERNQV9BQk9SVCksICZlcC0+ZG1hLT5kbWFzdGF0KTsKKwkJc3Bpbl9zdG9wX2RtYSAoZXAtPmRtYSk7CisJfSBlbHNlCisJCXN0b3BfZG1hIChlcC0+ZG1hKTsKKwlzY2FuX2RtYV9jb21wbGV0aW9ucyAoZXApOworfQorCisvKiBkZXF1ZXVlIEFMTCByZXF1ZXN0cyAqLworc3RhdGljIHZvaWQgbnVrZSAoc3RydWN0IG5ldDIyODBfZXAgKmVwKQoreworCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QJKnJlcTsKKworCS8qIGNhbGxlZCB3aXRoIHNwaW5sb2NrIGhlbGQgKi8KKwllcC0+c3RvcHBlZCA9IDE7CisJaWYgKGVwLT5kbWEpCisJCWFib3J0X2RtYSAoZXApOworCXdoaWxlICghbGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkpIHsKKwkJcmVxID0gbGlzdF9lbnRyeSAoZXAtPnF1ZXVlLm5leHQsCisJCQkJc3RydWN0IG5ldDIyODBfcmVxdWVzdCwKKwkJCQlxdWV1ZSk7CisJCWRvbmUgKGVwLCByZXEsIC1FU0hVVERPV04pOworCX0KK30KKworLyogZGVxdWV1ZSBKVVNUIE9ORSByZXF1ZXN0ICovCitzdGF0aWMgaW50IG5ldDIyODBfZGVxdWV1ZSAoc3RydWN0IHVzYl9lcCAqX2VwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKl9yZXEpCit7CisJc3RydWN0IG5ldDIyODBfZXAJKmVwOworCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QJKnJlcTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwl1MzIJCQlkbWFjdGw7CisJaW50CQkJc3RvcHBlZDsKKworCWVwID0gY29udGFpbmVyX29mIChfZXAsIHN0cnVjdCBuZXQyMjgwX2VwLCBlcCk7CisJaWYgKCFfZXAgfHwgKCFlcC0+ZGVzYyAmJiBlcC0+bnVtICE9IDApIHx8ICFfcmVxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCXN0b3BwZWQgPSBlcC0+c3RvcHBlZDsKKworCS8qIHF1aWVzY2UgZG1hIHdoaWxlIHdlIHBhdGNoIHRoZSBxdWV1ZSAqLworCWRtYWN0bCA9IDA7CisJZXAtPnN0b3BwZWQgPSAxOworCWlmIChlcC0+ZG1hKSB7CisJCWRtYWN0bCA9IHJlYWRsICgmZXAtPmRtYS0+ZG1hY3RsKTsKKwkJLyogV0FSTklORyBlcnJhdHVtIDAxMjcgbWF5IGtpY2sgaW4gLi4uICovCisJCXN0b3BfZG1hIChlcC0+ZG1hKTsKKwkJc2Nhbl9kbWFfY29tcGxldGlvbnMgKGVwKTsKKwl9CisKKwkvKiBtYWtlIHN1cmUgaXQncyBzdGlsbCBxdWV1ZWQgb24gdGhpcyBlbmRwb2ludCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkgKHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKKwkJaWYgKCZyZXEtPnJlcSA9PSBfcmVxKQorCQkJYnJlYWs7CisJfQorCWlmICgmcmVxLT5yZXEgIT0gX3JlcSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBxdWV1ZSBoZWFkIG1heSBiZSBwYXJ0aWFsbHkgY29tcGxldGUuICovCisJaWYgKGVwLT5xdWV1ZS5uZXh0ID09ICZyZXEtPnF1ZXVlKSB7CisJCWlmIChlcC0+ZG1hKSB7CisJCQlERUJVRyAoZXAtPmRldiwgInVubGluayAoJXMpIGRtYVxuIiwgX2VwLT5uYW1lKTsKKwkJCV9yZXEtPnN0YXR1cyA9IC1FQ09OTlJFU0VUOworCQkJYWJvcnRfZG1hIChlcCk7CisJCQlpZiAobGlrZWx5IChlcC0+cXVldWUubmV4dCA9PSAmcmVxLT5xdWV1ZSkpIHsKKwkJCQkvLyBOT1RFOiBtaXNyZXBvcnRzIHNpbmdsZS10cmFuc2ZlciBtb2RlCisJCQkJcmVxLT50ZC0+ZG1hY291bnQgPSAwOwkvKiBpbnZhbGlkYXRlICovCisJCQkJZG1hX2RvbmUgKGVwLCByZXEsCisJCQkJCXJlYWRsICgmZXAtPmRtYS0+ZG1hY291bnQpLAorCQkJCQktRUNPTk5SRVNFVCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlERUJVRyAoZXAtPmRldiwgInVubGluayAoJXMpIHBpb1xuIiwgX2VwLT5uYW1lKTsKKwkJCWRvbmUgKGVwLCByZXEsIC1FQ09OTlJFU0VUKTsKKwkJfQorCQlyZXEgPSBOVUxMOworCisJLyogcGF0Y2ggdXAgaGFyZHdhcmUgY2hhaW5pbmcgZGF0YSAqLworCX0gZWxzZSBpZiAoZXAtPmRtYSAmJiB1c2VfZG1hX2NoYWluaW5nKSB7CisJCWlmIChyZXEtPnF1ZXVlLnByZXYgPT0gZXAtPnF1ZXVlLm5leHQpIHsKKwkJCXdyaXRlbCAobGUzMl90b19jcHUgKHJlcS0+dGQtPmRtYWRlc2MpLAorCQkJCSZlcC0+ZG1hLT5kbWFkZXNjKTsKKwkJCWlmIChyZXEtPnRkLT5kbWFjb3VudCAmIGRtYV9kb25lX2llKQorCQkJCXdyaXRlbCAocmVhZGwgKCZlcC0+ZG1hLT5kbWFjb3VudCkKKwkJCQkJCXwgZG1hX2RvbmVfaWUsCisJCQkJCSZlcC0+ZG1hLT5kbWFjb3VudCk7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0CSpwcmV2OworCisJCQlwcmV2ID0gbGlzdF9lbnRyeSAocmVxLT5xdWV1ZS5wcmV2LAorCQkJCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QsIHF1ZXVlKTsKKwkJCXByZXYtPnRkLT5kbWFkZXNjID0gcmVxLT50ZC0+ZG1hZGVzYzsKKwkJCWlmIChyZXEtPnRkLT5kbWFjb3VudCAmIGRtYV9kb25lX2llKQorCQkJCXByZXYtPnRkLT5kbWFjb3VudCB8PSBkbWFfZG9uZV9pZTsKKwkJfQorCX0KKworCWlmIChyZXEpCisJCWRvbmUgKGVwLCByZXEsIC1FQ09OTlJFU0VUKTsKKwllcC0+c3RvcHBlZCA9IHN0b3BwZWQ7CisKKwlpZiAoZXAtPmRtYSkgeworCQkvKiB0dXJuIG9mZiBkbWEgb24gaW5hY3RpdmUgcXVldWVzICovCisJCWlmIChsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKSkKKwkJCXN0b3BfZG1hIChlcC0+ZG1hKTsKKwkJZWxzZSBpZiAoIWVwLT5zdG9wcGVkKSB7CisJCQkvKiByZXN1bWUgY3VycmVudCByZXF1ZXN0LCBvciBzdGFydCBuZXcgb25lICovCisJCQlpZiAocmVxKQorCQkJCXdyaXRlbCAoZG1hY3RsLCAmZXAtPmRtYS0+ZG1hY3RsKTsKKwkJCWVsc2UKKwkJCQlzdGFydF9kbWEgKGVwLCBsaXN0X2VudHJ5IChlcC0+cXVldWUubmV4dCwKKwkJCQkJc3RydWN0IG5ldDIyODBfcmVxdWVzdCwgcXVldWUpKTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgbmV0MjI4MF9maWZvX3N0YXR1cyAoc3RydWN0IHVzYl9lcCAqX2VwKTsKKworc3RhdGljIGludAorbmV0MjI4MF9zZXRfaGFsdCAoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IG5ldDIyODBfZXAJKmVwOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCWludAkJCXJldHZhbCA9IDA7CisKKwllcCA9IGNvbnRhaW5lcl9vZiAoX2VwLCBzdHJ1Y3QgbmV0MjI4MF9lcCwgZXApOworCWlmICghX2VwIHx8ICghZXAtPmRlc2MgJiYgZXAtPm51bSAhPSAwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFlcC0+ZGV2LT5kcml2ZXIgfHwgZXAtPmRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKQorCQlyZXR1cm4gLUVTSFVURE9XTjsKKwlpZiAoZXAtPmRlc2MgLyogbm90IGVwMCAqLyAmJiAoZXAtPmRlc2MtPmJtQXR0cmlidXRlcyAmIDB4MDMpCisJCQkJCQk9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOworCWlmICghbGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkpCisJCXJldHZhbCA9IC1FQUdBSU47CisJZWxzZSBpZiAoZXAtPmlzX2luICYmIHZhbHVlICYmIG5ldDIyODBfZmlmb19zdGF0dXMgKF9lcCkgIT0gMCkKKwkJcmV0dmFsID0gLUVBR0FJTjsKKwllbHNlIHsKKwkJVkRFQlVHIChlcC0+ZGV2LCAiJXMgJXMgaGFsdFxuIiwgX2VwLT5uYW1lLAorCQkJCXZhbHVlID8gInNldCIgOiAiY2xlYXIiKTsKKwkJLyogc2V0L2NsZWFyLCB0aGVuIHN5bmNoIG1lbW9yeSB2aWV3cyB3aXRoIHRoZSBkZXZpY2UgKi8KKwkJaWYgKHZhbHVlKSB7CisJCQlpZiAoZXAtPm51bSA9PSAwKQorCQkJCWVwLT5kZXYtPnByb3RvY29sX3N0YWxsID0gMTsKKwkJCWVsc2UKKwkJCQlzZXRfaGFsdCAoZXApOworCQl9IGVsc2UKKwkJCWNsZWFyX2hhbHQgKGVwKTsKKwkJKHZvaWQpIHJlYWRsICgmZXAtPnJlZ3MtPmVwX3JzcCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlcC0+ZGV2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50CituZXQyMjgwX2ZpZm9fc3RhdHVzIChzdHJ1Y3QgdXNiX2VwICpfZXApCit7CisJc3RydWN0IG5ldDIyODBfZXAJKmVwOworCXUzMgkJCWF2YWlsOworCisJZXAgPSBjb250YWluZXJfb2YgKF9lcCwgc3RydWN0IG5ldDIyODBfZXAsIGVwKTsKKwlpZiAoIV9lcCB8fCAoIWVwLT5kZXNjICYmIGVwLT5udW0gIT0gMCkpCisJCXJldHVybiAtRU5PREVWOworCWlmICghZXAtPmRldi0+ZHJpdmVyIHx8IGVwLT5kZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJcmV0dXJuIC1FU0hVVERPV047CisKKwlhdmFpbCA9IHJlYWRsICgmZXAtPnJlZ3MtPmVwX2F2YWlsKSAmICgoMSA8PCAxMikgLSAxKTsKKwlpZiAoYXZhaWwgPiBlcC0+Zmlmb19zaXplKQorCQlyZXR1cm4gLUVPVkVSRkxPVzsKKwlpZiAoZXAtPmlzX2luKQorCQlhdmFpbCA9IGVwLT5maWZvX3NpemUgLSBhdmFpbDsKKwlyZXR1cm4gYXZhaWw7Cit9CisKK3N0YXRpYyB2b2lkCituZXQyMjgwX2ZpZm9fZmx1c2ggKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXA7CisKKwllcCA9IGNvbnRhaW5lcl9vZiAoX2VwLCBzdHJ1Y3QgbmV0MjI4MF9lcCwgZXApOworCWlmICghX2VwIHx8ICghZXAtPmRlc2MgJiYgZXAtPm51bSAhPSAwKSkKKwkJcmV0dXJuOworCWlmICghZXAtPmRldi0+ZHJpdmVyIHx8IGVwLT5kZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJcmV0dXJuOworCisJd3JpdGVsICgoMSA8PCBGSUZPX0ZMVVNIKSwgJmVwLT5yZWdzLT5lcF9zdGF0KTsKKwkodm9pZCkgcmVhZGwgKCZlcC0+cmVncy0+ZXBfcnNwKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZXBfb3BzIG5ldDIyODBfZXBfb3BzID0geworCS5lbmFibGUJCT0gbmV0MjI4MF9lbmFibGUsCisJLmRpc2FibGUJPSBuZXQyMjgwX2Rpc2FibGUsCisKKwkuYWxsb2NfcmVxdWVzdAk9IG5ldDIyODBfYWxsb2NfcmVxdWVzdCwKKwkuZnJlZV9yZXF1ZXN0CT0gbmV0MjI4MF9mcmVlX3JlcXVlc3QsCisKKwkuYWxsb2NfYnVmZmVyCT0gbmV0MjI4MF9hbGxvY19idWZmZXIsCisJLmZyZWVfYnVmZmVyCT0gbmV0MjI4MF9mcmVlX2J1ZmZlciwKKworCS5xdWV1ZQkJPSBuZXQyMjgwX3F1ZXVlLAorCS5kZXF1ZXVlCT0gbmV0MjI4MF9kZXF1ZXVlLAorCisJLnNldF9oYWx0CT0gbmV0MjI4MF9zZXRfaGFsdCwKKwkuZmlmb19zdGF0dXMJPSBuZXQyMjgwX2ZpZm9fc3RhdHVzLAorCS5maWZvX2ZsdXNoCT0gbmV0MjI4MF9maWZvX2ZsdXNoLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBuZXQyMjgwX2dldF9mcmFtZSAoc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQpCit7CisJc3RydWN0IG5ldDIyODAJCSpkZXY7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJdTE2CQkJcmV0dmFsOworCisJaWYgKCFfZ2FkZ2V0KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlkZXYgPSBjb250YWluZXJfb2YgKF9nYWRnZXQsIHN0cnVjdCBuZXQyMjgwLCBnYWRnZXQpOworCXNwaW5fbG9ja19pcnFzYXZlICgmZGV2LT5sb2NrLCBmbGFncyk7CisJcmV0dmFsID0gZ2V0X2lkeF9yZWcgKGRldi0+cmVncywgUkVHX0ZSQU1FKSAmIDB4MDNmZjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBuZXQyMjgwX3dha2V1cCAoc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQpCit7CisJc3RydWN0IG5ldDIyODAJCSpkZXY7CisJdTMyCQkJdG1wOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJaWYgKCFfZ2FkZ2V0KQorCQlyZXR1cm4gMDsKKwlkZXYgPSBjb250YWluZXJfb2YgKF9nYWRnZXQsIHN0cnVjdCBuZXQyMjgwLCBnYWRnZXQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwl0bXAgPSByZWFkbCAoJmRldi0+dXNiLT51c2JjdGwpOworCWlmICh0bXAgJiAoMSA8PCBERVZJQ0VfUkVNT1RFX1dBS0VVUF9FTkFCTEUpKQorCQl3cml0ZWwgKDEgPDwgR0VORVJBVEVfUkVTVU1FLCAmZGV2LT51c2ItPnVzYnN0YXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIHBjaSB3cml0ZXMgbWF5IHN0aWxsIGJlIHBvc3RlZCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5ldDIyODBfc2V0X3NlbGZwb3dlcmVkIChzdHJ1Y3QgdXNiX2dhZGdldCAqX2dhZGdldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBuZXQyMjgwCQkqZGV2OworCXUzMgkJCXRtcDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCWlmICghX2dhZGdldCkKKwkJcmV0dXJuIDA7CisJZGV2ID0gY29udGFpbmVyX29mIChfZ2FkZ2V0LCBzdHJ1Y3QgbmV0MjI4MCwgZ2FkZ2V0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZGV2LT5sb2NrLCBmbGFncyk7CisJdG1wID0gcmVhZGwgKCZkZXYtPnVzYi0+dXNiY3RsKTsKKwlpZiAodmFsdWUpCisJCXRtcCB8PSAoMSA8PCBTRUxGX1BPV0VSRURfU1RBVFVTKTsKKwllbHNlCisJCXRtcCAmPSB+KDEgPDwgU0VMRl9QT1dFUkVEX1NUQVRVUyk7CisJd3JpdGVsICh0bXAsICZkZXYtPnVzYi0+dXNiY3RsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXQyMjgwX3B1bGx1cChzdHJ1Y3QgdXNiX2dhZGdldCAqX2dhZGdldCwgaW50IGlzX29uKQoreworCXN0cnVjdCBuZXQyMjgwICAqZGV2OworCXUzMiAgICAgICAgICAgICB0bXA7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCisJaWYgKCFfZ2FkZ2V0KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlkZXYgPSBjb250YWluZXJfb2YgKF9nYWRnZXQsIHN0cnVjdCBuZXQyMjgwLCBnYWRnZXQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwl0bXAgPSByZWFkbCAoJmRldi0+dXNiLT51c2JjdGwpOworCWRldi0+c29mdGNvbm5lY3QgPSAoaXNfb24gIT0gMCk7CisJaWYgKGlzX29uKQorCQl0bXAgfD0gKDEgPDwgVVNCX0RFVEVDVF9FTkFCTEUpOworCWVsc2UKKwkJdG1wICY9IH4oMSA8PCBVU0JfREVURUNUX0VOQUJMRSk7CisJd3JpdGVsICh0bXAsICZkZXYtPnVzYi0+dXNiY3RsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZ2FkZ2V0X29wcyBuZXQyMjgwX29wcyA9IHsKKwkuZ2V0X2ZyYW1lCT0gbmV0MjI4MF9nZXRfZnJhbWUsCisJLndha2V1cAkJPSBuZXQyMjgwX3dha2V1cCwKKwkuc2V0X3NlbGZwb3dlcmVkID0gbmV0MjI4MF9zZXRfc2VsZnBvd2VyZWQsCisJLnB1bGx1cAkJPSBuZXQyMjgwX3B1bGx1cCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUworCisvKiBGSVhNRSBtb3ZlIHRoZXNlIGludG8gcHJvY2ZzLCBhbmQgdXNlIHNlcV9maWxlLgorICogU3lzZnMgX3N0aWxsXyBkb2Vzbid0IGJlaGF2ZSBmb3IgYXJiaXRyYXJpbHkgc2l6ZWQgZmlsZXMsCisgKiBhbmQgYWxzbyBkb2Vzbid0IGhlbHAgcHJvZHVjdHMgdXNpbmcgdGhpcyB3aXRoIDIuNCBrZXJuZWxzLgorICovCisKKy8qICJmdW5jdGlvbiIgc3lzZnMgYXR0cmlidXRlICovCitzdGF0aWMgc3NpemVfdAorc2hvd19mdW5jdGlvbiAoc3RydWN0IGRldmljZSAqX2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXQyMjgwCSpkZXYgPSBkZXZfZ2V0X2RydmRhdGEgKF9kZXYpOworCisJaWYgKCFkZXYtPmRyaXZlcgorCQkJfHwgIWRldi0+ZHJpdmVyLT5mdW5jdGlvbgorCQkJfHwgc3RybGVuIChkZXYtPmRyaXZlci0+ZnVuY3Rpb24pID4gUEFHRV9TSVpFKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gc2NucHJpbnRmIChidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBkZXYtPmRyaXZlci0+ZnVuY3Rpb24pOworfQorc3RhdGljIERFVklDRV9BVFRSIChmdW5jdGlvbiwgU19JUlVHTywgc2hvd19mdW5jdGlvbiwgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90CitzaG93X3JlZ2lzdGVycyAoc3RydWN0IGRldmljZSAqX2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXQyMjgwCQkqZGV2OworCWNoYXIJCQkqbmV4dDsKKwl1bnNpZ25lZAkJc2l6ZSwgdDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlpbnQJCQlpOworCXUzMgkJCXQxLCB0MjsKKwljaGFyCQkJKnM7CisKKwlkZXYgPSBkZXZfZ2V0X2RydmRhdGEgKF9kZXYpOworCW5leHQgPSBidWY7CisJc2l6ZSA9IFBBR0VfU0laRTsKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCisJaWYgKGRldi0+ZHJpdmVyKQorCQlzID0gZGV2LT5kcml2ZXItPmRyaXZlci5uYW1lOworCWVsc2UKKwkJcyA9ICIobm9uZSkiOworCisJLyogTWFpbiBDb250cm9sIFJlZ2lzdGVycyAqLworCXQgPSBzY25wcmludGYgKG5leHQsIHNpemUsICIlcyB2ZXJzaW9uICIgRFJJVkVSX1ZFUlNJT04KKwkJCSIsIGNoaXByZXYgJTA0eCwgZG1hICVzXG5cbiIKKwkJCSJkZXZpbml0ICUwM3ggZmlmb2N0bCAlMDh4IGdhZGdldCAnJXMnXG4iCisJCQkicGNpIGlycWVuYjAgJTAyeCBpcnFlbmIxICUwOHggIgorCQkJImlycXN0YXQwICUwNHggaXJxc3RhdDEgJTA4eFxuIiwKKwkJCWRyaXZlcl9uYW1lLCBkZXYtPmNoaXByZXYsCisJCQl1c2VfZG1hCisJCQkJPyAodXNlX2RtYV9jaGFpbmluZyA/ICJjaGFpbmluZyIgOiAiZW5hYmxlZCIpCisJCQkJOiAiZGlzYWJsZWQiLAorCQkJcmVhZGwgKCZkZXYtPnJlZ3MtPmRldmluaXQpLAorCQkJcmVhZGwgKCZkZXYtPnJlZ3MtPmZpZm9jdGwpLAorCQkJcywKKwkJCXJlYWRsICgmZGV2LT5yZWdzLT5wY2lpcnFlbmIwKSwKKwkJCXJlYWRsICgmZGV2LT5yZWdzLT5wY2lpcnFlbmIxKSwKKwkJCXJlYWRsICgmZGV2LT5yZWdzLT5pcnFzdGF0MCksCisJCQlyZWFkbCAoJmRldi0+cmVncy0+aXJxc3RhdDEpKTsKKwlzaXplIC09IHQ7CisJbmV4dCArPSB0OworCisJLyogVVNCIENvbnRyb2wgUmVnaXN0ZXJzICovCisJdDEgPSByZWFkbCAoJmRldi0+dXNiLT51c2JjdGwpOworCXQyID0gcmVhZGwgKCZkZXYtPnVzYi0+dXNic3RhdCk7CisJaWYgKHQxICYgKDEgPDwgVkJVU19QSU4pKSB7CisJCWlmICh0MiAmICgxIDw8IEhJR0hfU1BFRUQpKQorCQkJcyA9ICJoaWdoIHNwZWVkIjsKKwkJZWxzZSBpZiAoZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCisJCQlzID0gInBvd2VyZWQiOworCQllbHNlCisJCQlzID0gImZ1bGwgc3BlZWQiOworCQkvKiBmdWxsIHNwZWVkIGJpdCAoNikgbm90IHdvcmtpbmc/PyAqLworCX0gZWxzZQorCQkJcyA9ICJub3QgYXR0YWNoZWQiOworCXQgPSBzY25wcmludGYgKG5leHQsIHNpemUsCisJCQkic3RkcnNwICUwOHggdXNiY3RsICUwOHggdXNic3RhdCAlMDh4ICIKKwkJCQkiYWRkciAweCUwMnggKCVzKVxuIiwKKwkJCXJlYWRsICgmZGV2LT51c2ItPnN0ZHJzcCksIHQxLCB0MiwKKwkJCXJlYWRsICgmZGV2LT51c2ItPm91cmFkZHIpLCBzKTsKKwlzaXplIC09IHQ7CisJbmV4dCArPSB0OworCisJLyogUENJIE1hc3RlciBDb250cm9sIFJlZ2lzdGVycyAqLworCisJLyogRE1BIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKwkvKiBDb25maWd1cmFibGUgRVAgQ29udHJvbCBSZWdpc3RlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7CisJCXN0cnVjdCBuZXQyMjgwX2VwCSplcDsKKworCQllcCA9ICZkZXYtPmVwIFtpXTsKKwkJaWYgKGkgJiYgIWVwLT5kZXNjKQorCQkJY29udGludWU7CisKKwkJdDEgPSByZWFkbCAoJmVwLT5yZWdzLT5lcF9jZmcpOworCQl0MiA9IHJlYWRsICgmZXAtPnJlZ3MtPmVwX3JzcCkgJiAweGZmOworCQl0ID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAorCQkJCSJcbiVzXHRjZmcgJTA1eCByc3AgKCUwMngpICVzJXMlcyVzJXMlcyVzJXMiCisJCQkJCSJpcnFlbmIgJTAyeFxuIiwKKwkJCQllcC0+ZXAubmFtZSwgdDEsIHQyLAorCQkJCSh0MiAmICgxIDw8IENMRUFSX05BS19PVVRfUEFDS0VUUykpCisJCQkJCT8gIk5BSyAiIDogIiIsCisJCQkJKHQyICYgKDEgPDwgQ0xFQVJfRVBfSElERV9TVEFUVVNfUEhBU0UpKQorCQkJCQk/ICJoaWRlICIgOiAiIiwKKwkJCQkodDIgJiAoMSA8PCBDTEVBUl9FUF9GT1JDRV9DUkNfRVJST1IpKQorCQkJCQk/ICJDUkMgIiA6ICIiLAorCQkJCSh0MiAmICgxIDw8IENMRUFSX0lOVEVSUlVQVF9NT0RFKSkKKwkJCQkJPyAiaW50ZXJydXB0ICIgOiAiIiwKKwkJCQkodDIgJiAoMTw8Q0xFQVJfQ09OVFJPTF9TVEFUVVNfUEhBU0VfSEFORFNIQUtFKSkKKwkJCQkJPyAic3RhdHVzICIgOiAiIiwKKwkJCQkodDIgJiAoMSA8PCBDTEVBUl9OQUtfT1VUX1BBQ0tFVFNfTU9ERSkpCisJCQkJCT8gIk5BS21vZGUgIiA6ICIiLAorCQkJCSh0MiAmICgxIDw8IENMRUFSX0VORFBPSU5UX1RPR0dMRSkpCisJCQkJCT8gIkRBVEExICIgOiAiREFUQTAgIiwKKwkJCQkodDIgJiAoMSA8PCBDTEVBUl9FTkRQT0lOVF9IQUxUKSkKKwkJCQkJPyAiSEFMVCAiIDogIiIsCisJCQkJcmVhZGwgKCZlcC0+cmVncy0+ZXBfaXJxZW5iKSk7CisJCXNpemUgLT0gdDsKKwkJbmV4dCArPSB0OworCisJCXQgPSBzY25wcmludGYgKG5leHQsIHNpemUsCisJCQkJIlx0c3RhdCAlMDh4IGF2YWlsICUwNHggIgorCQkJCSIoZXAlZCVzLSVzKSVzXG4iLAorCQkJCXJlYWRsICgmZXAtPnJlZ3MtPmVwX3N0YXQpLAorCQkJCXJlYWRsICgmZXAtPnJlZ3MtPmVwX2F2YWlsKSwKKwkJCQl0MSAmIDB4MGYsIERJUl9TVFJJTkcgKHQxKSwKKwkJCQl0eXBlX3N0cmluZyAodDEgPj4gOCksCisJCQkJZXAtPnN0b3BwZWQgPyAiKiIgOiAiIik7CisJCXNpemUgLT0gdDsKKwkJbmV4dCArPSB0OworCisJCWlmICghZXAtPmRtYSkKKwkJCWNvbnRpbnVlOworCisJCXQgPSBzY25wcmludGYgKG5leHQsIHNpemUsCisJCQkJIiAgZG1hXHRjdGwgJTA4eCBzdGF0ICUwOHggY291bnQgJTA4eFxuIgorCQkJCSJcdGFkZHIgJTA4eCBkZXNjICUwOHhcbiIsCisJCQkJcmVhZGwgKCZlcC0+ZG1hLT5kbWFjdGwpLAorCQkJCXJlYWRsICgmZXAtPmRtYS0+ZG1hc3RhdCksCisJCQkJcmVhZGwgKCZlcC0+ZG1hLT5kbWFjb3VudCksCisJCQkJcmVhZGwgKCZlcC0+ZG1hLT5kbWFhZGRyKSwKKwkJCQlyZWFkbCAoJmVwLT5kbWEtPmRtYWRlc2MpKTsKKwkJc2l6ZSAtPSB0OworCQluZXh0ICs9IHQ7CisKKwl9CisKKwkvKiBJbmRleGVkIFJlZ2lzdGVycyAqLworCQkvLyBub25lIHlldCAKKworCS8qIFN0YXRpc3RpY3MgKi8KKwl0ID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAiXG5pcnFzOiAgIik7CisJc2l6ZSAtPSB0OworCW5leHQgKz0gdDsKKwlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7CisJCXN0cnVjdCBuZXQyMjgwX2VwCSplcDsKKworCQllcCA9ICZkZXYtPmVwIFtpXTsKKwkJaWYgKGkgJiYgIWVwLT5pcnFzKQorCQkJY29udGludWU7CisJCXQgPSBzY25wcmludGYgKG5leHQsIHNpemUsICIgJXMvJWx1IiwgZXAtPmVwLm5hbWUsIGVwLT5pcnFzKTsKKwkJc2l6ZSAtPSB0OworCQluZXh0ICs9IHQ7CisKKwl9CisJdCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgIlxuIik7CisJc2l6ZSAtPSB0OworCW5leHQgKz0gdDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBQQUdFX1NJWkUgLSBzaXplOworfQorc3RhdGljIERFVklDRV9BVFRSIChyZWdpc3RlcnMsIFNfSVJVR08sIHNob3dfcmVnaXN0ZXJzLCBOVUxMKTsKKworc3RhdGljIHNzaXplX3QKK3Nob3dfcXVldWVzIChzdHJ1Y3QgZGV2aWNlICpfZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IG5ldDIyODAJCSpkZXY7CisJY2hhcgkJCSpuZXh0OworCXVuc2lnbmVkCQlzaXplOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCWludAkJCWk7CisKKwlkZXYgPSBkZXZfZ2V0X2RydmRhdGEgKF9kZXYpOworCW5leHQgPSBidWY7CisJc2l6ZSA9IFBBR0VfU0laRTsKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgeworCQlzdHJ1Y3QgbmV0MjI4MF9lcAkJKmVwID0gJmRldi0+ZXAgW2ldOworCQlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0CQkqcmVxOworCQlpbnQJCQkJdDsKKworCQlpZiAoaSAhPSAwKSB7CisJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmQ7CisKKwkJCWQgPSBlcC0+ZGVzYzsKKwkJCWlmICghZCkKKwkJCQljb250aW51ZTsKKwkJCXQgPSBkLT5iRW5kcG9pbnRBZGRyZXNzOworCQkJdCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJCQkiXG4lcyAoZXAlZCVzLSVzKSBtYXggJTA0eCAlcyBmaWZvICVkXG4iLAorCQkJCWVwLT5lcC5uYW1lLCB0ICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLLAorCQkJCSh0ICYgVVNCX0RJUl9JTikgPyAiaW4iIDogIm91dCIsCisJCQkJKHsgY2hhciAqdmFsOworCQkJCSBzd2l0Y2ggKGQtPmJtQXR0cmlidXRlcyAmIDB4MDMpIHsKKwkJCQkgY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLOgorCQkJCSAJdmFsID0gImJ1bGsiOyBicmVhazsKKwkJCQkgY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6CisJCQkJIAl2YWwgPSAiaW50ciI7IGJyZWFrOworCQkJCSBkZWZhdWx0OgorCQkJCSAJdmFsID0gImlzbyI7IGJyZWFrOworCQkJCSB9OyB2YWw7IH0pLAorCQkJCWxlMTZfdG9fY3B1IChkLT53TWF4UGFja2V0U2l6ZSkgJiAweDFmZmYsCisJCQkJZXAtPmRtYSA/ICJkbWEiIDogInBpbyIsIGVwLT5maWZvX3NpemUKKwkJCQkpOworCQl9IGVsc2UgLyogZXAwIHNob3VsZCBvbmx5IGhhdmUgb25lIHRyYW5zZmVyIHF1ZXVlZCAqLworCQkJdCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgImVwMCBtYXggNjQgcGlvICVzXG4iLAorCQkJCQllcC0+aXNfaW4gPyAiaW4iIDogIm91dCIpOworCQlpZiAodCA8PSAwIHx8IHQgPiBzaXplKQorCQkJZ290byBkb25lOworCQlzaXplIC09IHQ7CisJCW5leHQgKz0gdDsKKworCQlpZiAobGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkpIHsKKwkJCXQgPSBzY25wcmludGYgKG5leHQsIHNpemUsICJcdChub3RoaW5nIHF1ZXVlZClcbiIpOworCQkJaWYgKHQgPD0gMCB8fCB0ID4gc2l6ZSkKKwkJCQlnb3RvIGRvbmU7CisJCQlzaXplIC09IHQ7CisJCQluZXh0ICs9IHQ7CisJCQljb250aW51ZTsKKwkJfQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5IChyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CisJCQlpZiAoZXAtPmRtYSAmJiByZXEtPnRkX2RtYSA9PSByZWFkbCAoJmVwLT5kbWEtPmRtYWRlc2MpKQorCQkJCXQgPSBzY25wcmludGYgKG5leHQsIHNpemUsCisJCQkJCSJcdHJlcSAlcCBsZW4gJWQvJWQgIgorCQkJCQkiYnVmICVwIChkbWFjb3VudCAlMDh4KVxuIiwKKwkJCQkJJnJlcS0+cmVxLCByZXEtPnJlcS5hY3R1YWwsCisJCQkJCXJlcS0+cmVxLmxlbmd0aCwgcmVxLT5yZXEuYnVmLAorCQkJCQlyZWFkbCAoJmVwLT5kbWEtPmRtYWNvdW50KSk7CisJCQllbHNlCisJCQkJdCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJCQkJIlx0cmVxICVwIGxlbiAlZC8lZCBidWYgJXBcbiIsCisJCQkJCSZyZXEtPnJlcSwgcmVxLT5yZXEuYWN0dWFsLAorCQkJCQlyZXEtPnJlcS5sZW5ndGgsIHJlcS0+cmVxLmJ1Zik7CisJCQlpZiAodCA8PSAwIHx8IHQgPiBzaXplKQorCQkJCWdvdG8gZG9uZTsKKwkJCXNpemUgLT0gdDsKKwkJCW5leHQgKz0gdDsKKworCQkJaWYgKGVwLT5kbWEpIHsKKwkJCQlzdHJ1Y3QgbmV0MjI4MF9kbWEJKnRkOworCisJCQkJdGQgPSByZXEtPnRkOworCQkJCXQgPSBzY25wcmludGYgKG5leHQsIHNpemUsICJcdCAgICB0ZCAlMDh4ICIKKwkJCQkJIiBjb3VudCAlMDh4IGJ1ZiAlMDh4IGRlc2MgJTA4eFxuIiwKKwkJCQkJKHUzMikgcmVxLT50ZF9kbWEsCisJCQkJCWxlMzJfdG9fY3B1ICh0ZC0+ZG1hY291bnQpLAorCQkJCQlsZTMyX3RvX2NwdSAodGQtPmRtYWFkZHIpLAorCQkJCQlsZTMyX3RvX2NwdSAodGQtPmRtYWRlc2MpKTsKKwkJCQlpZiAodCA8PSAwIHx8IHQgPiBzaXplKQorCQkJCQlnb3RvIGRvbmU7CisJCQkJc2l6ZSAtPSB0OworCQkJCW5leHQgKz0gdDsKKwkJCX0KKwkJfQorCX0KKworZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIFBBR0VfU0laRSAtIHNpemU7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIgKHF1ZXVlcywgU19JUlVHTywgc2hvd19xdWV1ZXMsIE5VTEwpOworCisKKyNlbHNlCisKKyNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9maWxlKGEsYikJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGRldmljZV9yZW1vdmVfZmlsZQlkZXZpY2VfY3JlYXRlX2ZpbGUKKworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGFub3RoZXIgZHJpdmVyLXNwZWNpZmljIG1vZGUgbWlnaHQgYmUgYSByZXF1ZXN0IHR5cGUgZG9pbmcgZG1hCisgKiB0by9mcm9tIGFub3RoZXIgZGV2aWNlIGZpZm8gaW5zdGVhZCBvZiB0by9mcm9tIG1lbW9yeS4KKyAqLworCitzdGF0aWMgdm9pZCBzZXRfZmlmb19tb2RlIChzdHJ1Y3QgbmV0MjI4MCAqZGV2LCBpbnQgbW9kZSkKK3sKKwkvKiBrZWVwaW5nIGhpZ2ggYml0cyBwcmVzZXJ2ZXMgQkFSMiAqLworCXdyaXRlbCAoKDB4ZmZmZiA8PCBQQ0lfQkFTRTJfUkFOR0UpIHwgbW9kZSwgJmRldi0+cmVncy0+Zmlmb2N0bCk7CisKKwkvKiBhbHdheXMgZXAte2EsYixlLGZ9IC4uLiBtYXliZSBub3QgZXAtYyBvciBlcC1kICovCisJSU5JVF9MSVNUX0hFQUQgKCZkZXYtPmdhZGdldC5lcF9saXN0KTsKKwlsaXN0X2FkZF90YWlsICgmZGV2LT5lcCBbMV0uZXAuZXBfbGlzdCwgJmRldi0+Z2FkZ2V0LmVwX2xpc3QpOworCWxpc3RfYWRkX3RhaWwgKCZkZXYtPmVwIFsyXS5lcC5lcF9saXN0LCAmZGV2LT5nYWRnZXQuZXBfbGlzdCk7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSAwOgorCQlsaXN0X2FkZF90YWlsICgmZGV2LT5lcCBbM10uZXAuZXBfbGlzdCwgJmRldi0+Z2FkZ2V0LmVwX2xpc3QpOworCQlsaXN0X2FkZF90YWlsICgmZGV2LT5lcCBbNF0uZXAuZXBfbGlzdCwgJmRldi0+Z2FkZ2V0LmVwX2xpc3QpOworCQlkZXYtPmVwIFsxXS5maWZvX3NpemUgPSBkZXYtPmVwIFsyXS5maWZvX3NpemUgPSAxMDI0OworCQlicmVhazsKKwljYXNlIDE6CisJCWRldi0+ZXAgWzFdLmZpZm9fc2l6ZSA9IGRldi0+ZXAgWzJdLmZpZm9fc2l6ZSA9IDIwNDg7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbGlzdF9hZGRfdGFpbCAoJmRldi0+ZXAgWzNdLmVwLmVwX2xpc3QsICZkZXYtPmdhZGdldC5lcF9saXN0KTsKKwkJZGV2LT5lcCBbMV0uZmlmb19zaXplID0gMjA0ODsKKwkJZGV2LT5lcCBbMl0uZmlmb19zaXplID0gMTAyNDsKKwkJYnJlYWs7CisJfQorCS8qIGZpZm8gc2l6ZXMgZm9yIGVwMCwgZXAtYywgZXAtZCwgZXAtZSwgYW5kIGVwLWYgbmV2ZXIgY2hhbmdlICovCisJbGlzdF9hZGRfdGFpbCAoJmRldi0+ZXAgWzVdLmVwLmVwX2xpc3QsICZkZXYtPmdhZGdldC5lcF9saXN0KTsKKwlsaXN0X2FkZF90YWlsICgmZGV2LT5lcCBbNl0uZXAuZXBfbGlzdCwgJmRldi0+Z2FkZ2V0LmVwX2xpc3QpOworfQorCisvKioKKyAqIG5ldDIyODBfc2V0X2ZpZm9fbW9kZSAtIGNoYW5nZSBhbGxvY2F0aW9uIG9mIGZpZm8gYnVmZmVycworICogQGdhZGdldDogYWNjZXNzIHRvIHRoZSBuZXQyMjgwIGRldmljZSB0aGF0IHdpbGwgYmUgdXBkYXRlZAorICogQG1vZGU6IDAgZm9yIGRlZmF1bHQsIGZvdXIgMWtCIGJ1ZmZlcnMgKGVwLWEgdGhyb3VnaCBlcC1kKTsKKyAqIAkxIGZvciB0d28gMmtCIGJ1ZmZlcnMgKGVwLWEgYW5kIGVwLWIgb25seSk7CisgKiAJMiBmb3Igb25lIDJrQiBidWZmZXIgKGVwLWEpIGFuZCB0d28gMWtCIG9uZXMgKGVwLWIsIGVwLWMpLgorICoKKyAqIHJldHVybnMgemVybyBvbiBzdWNjZXNzLCBlbHNlIG5lZ2F0aXZlIGVycm5vLiAgd2hlbiB0aGlzIHN1Y2NlZWRzLAorICogdGhlIGNvbnRlbnRzIG9mIGdhZGdldC0+ZXBfbGlzdCBtYXkgaGF2ZSBjaGFuZ2VkLgorICoKKyAqIHlvdSBtYXkgb25seSBjYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiBlbmRwb2ludHMgYS1kIGFyZSBhbGwgZGlzYWJsZWQuCisgKiB1c2UgaXQgd2hlbmV2ZXIgZXh0cmEgaGFyZHdhcmUgYnVmZmVyaW5nIGNhbiBoZWxwIHBlcmZvcm1hbmNlLCBzdWNoCisgKiBhcyBiZWZvcmUgZW5hYmxpbmcgImhpZ2ggYmFuZHdpZHRoIiBpbnRlcnJ1cHQgZW5kcG9pbnRzIHRoYXQgdXNlCisgKiBtYXhwYWNrZXQgYmlnZ2VyIHRoYW4gNTEyICh3aGVuIGRvdWJsZSBidWZmZXJpbmcgd291bGQgb3RoZXJ3aXNlCisgKiBiZSB1bmF2YWlsYWJsZSkuCisgKi8KK2ludCBuZXQyMjgwX3NldF9maWZvX21vZGUgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGludCBtb2RlKQoreworCWludAkJCWk7CisJc3RydWN0IG5ldDIyODAJCSpkZXY7CisJaW50CQkJc3RhdHVzID0gMDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCWlmICghZ2FkZ2V0KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlkZXYgPSBjb250YWluZXJfb2YgKGdhZGdldCwgc3RydWN0IG5ldDIyODAsIGdhZGdldCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCisJZm9yIChpID0gMTsgaSA8PSA0OyBpKyspCisJCWlmIChkZXYtPmVwIFtpXS5kZXNjKSB7CisJCQlzdGF0dXMgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwlpZiAobW9kZSA8IDAgfHwgbW9kZSA+IDIpCisJCXN0YXR1cyA9IC1FSU5WQUw7CisJaWYgKHN0YXR1cyA9PSAwKQorCQlzZXRfZmlmb19tb2RlIChkZXYsIG1vZGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChzdGF0dXMgPT0gMCkgeworCQlpZiAobW9kZSA9PSAxKQorCQkJREVCVUcgKGRldiwgImZpZm86ICBlcC1hIDJLLCBlcC1iIDJLXG4iKTsKKwkJZWxzZSBpZiAobW9kZSA9PSAyKQorCQkJREVCVUcgKGRldiwgImZpZm86ICBlcC1hIDJLLCBlcC1iIDFLLCBlcC1jIDFLXG4iKTsKKwkJLyogZWxzZSBhbGwgYXJlIDFLICovCisJfQorCXJldHVybiBzdGF0dXM7Cit9CitFWFBPUlRfU1lNQk9MIChuZXQyMjgwX3NldF9maWZvX21vZGUpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBrZWVwaW5nIGl0IHNpbXBsZToKKyAqIC0gb25lIGJ1cyBkcml2ZXIsIGluaXR0ZWQgZmlyc3Q7CisgKiAtIG9uZSBmdW5jdGlvbiBkcml2ZXIsIGluaXR0ZWQgc2Vjb25kCisgKgorICogbW9zdCBvZiB0aGUgd29yayB0byBzdXBwb3J0IG11bHRpcGxlIG5ldDIyODAgY29udHJvbGxlcnMgd291bGQKKyAqIGJlIHRvIGFzc29jaWF0ZSB0aGlzIGdhZGdldCBkcml2ZXIgKHllcz8pIHdpdGggYWxsIG9mIHRoZW0sIG9yCisgKiBwZXJoYXBzIHRvIGJpbmQgc3BlY2lmaWMgZHJpdmVycyB0byBzcGVjaWZpYyBkZXZpY2VzLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgbmV0MjI4MAkqdGhlX2NvbnRyb2xsZXI7CisKK3N0YXRpYyB2b2lkIHVzYl9yZXNldCAoc3RydWN0IG5ldDIyODAgKmRldikKK3sKKwl1MzIJdG1wOworCisJZGV2LT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKwkodm9pZCkgcmVhZGwgKCZkZXYtPnVzYi0+dXNiY3RsKTsKKworCW5ldDIyODBfbGVkX2luaXQgKGRldik7CisKKwkvKiBkaXNhYmxlIGF1dG9tYXRpYyByZXNwb25zZXMsIGFuZCBpcnFzICovCisJd3JpdGVsICgwLCAmZGV2LT51c2ItPnN0ZHJzcCk7CisJd3JpdGVsICgwLCAmZGV2LT5yZWdzLT5wY2lpcnFlbmIwKTsKKwl3cml0ZWwgKDAsICZkZXYtPnJlZ3MtPnBjaWlycWVuYjEpOworCisJLyogY2xlYXIgb2xkIGRtYSBhbmQgaXJxIHN0YXRlICovCisJZm9yICh0bXAgPSAwOyB0bXAgPCA0OyB0bXArKykgeworCQlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXAgPSAmZGV2LT5lcCBbdG1wICsgMV07CisKKwkJaWYgKGVwLT5kbWEpCisJCQlhYm9ydF9kbWEgKGVwKTsKKwl9CisJd3JpdGVsICh+MCwgJmRldi0+cmVncy0+aXJxc3RhdDApLAorCXdyaXRlbCAofigxIDw8IFNVU1BFTkRfUkVRVUVTVF9JTlRFUlJVUFQpLCAmZGV2LT5yZWdzLT5pcnFzdGF0MSksCisKKwkvKiByZXNldCwgYW5kIGVuYWJsZSBwY2kgKi8KKwl0bXAgPSByZWFkbCAoJmRldi0+cmVncy0+ZGV2aW5pdCkKKwkJfCAoMSA8PCBQQ0lfRU5BQkxFKQorCQl8ICgxIDw8IEZJRk9fU09GVF9SRVNFVCkKKwkJfCAoMSA8PCBVU0JfU09GVF9SRVNFVCkKKwkJfCAoMSA8PCBNODA1MV9SRVNFVCk7CisJd3JpdGVsICh0bXAsICZkZXYtPnJlZ3MtPmRldmluaXQpOworCisJLyogc3RhbmRhcmQgZmlmbyBhbmQgZW5kcG9pbnQgYWxsb2NhdGlvbnMgKi8KKwlzZXRfZmlmb19tb2RlIChkZXYsIChmaWZvX21vZGUgPD0gMikgPyBmaWZvX21vZGUgOiAwKTsKK30KKworc3RhdGljIHZvaWQgdXNiX3JlaW5pdCAoc3RydWN0IG5ldDIyODAgKmRldikKK3sKKwl1MzIJdG1wOworCWludAlpbml0X2RtYTsKKworCS8qIHVzZV9kbWEgY2hhbmdlcyBhcmUgaWdub3JlZCB0aWxsIG5leHQgZGV2aWNlIHJlLWluaXQgKi8KKwlpbml0X2RtYSA9IHVzZV9kbWE7CisKKwkvKiBiYXNpYyBlbmRwb2ludCBpbml0ICovCisJZm9yICh0bXAgPSAwOyB0bXAgPCA3OyB0bXArKykgeworCQlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXAgPSAmZGV2LT5lcCBbdG1wXTsKKworCQllcC0+ZXAubmFtZSA9IGVwX25hbWUgW3RtcF07CisJCWVwLT5kZXYgPSBkZXY7CisJCWVwLT5udW0gPSB0bXA7CisKKwkJaWYgKHRtcCA+IDAgJiYgdG1wIDw9IDQpIHsKKwkJCWVwLT5maWZvX3NpemUgPSAxMDI0OworCQkJaWYgKGluaXRfZG1hKQorCQkJCWVwLT5kbWEgPSAmZGV2LT5kbWEgW3RtcCAtIDFdOworCQl9IGVsc2UKKwkJCWVwLT5maWZvX3NpemUgPSA2NDsKKwkJZXAtPnJlZ3MgPSAmZGV2LT5lcHJlZ3MgW3RtcF07CisJCWVwX3Jlc2V0IChkZXYtPnJlZ3MsIGVwKTsKKwl9CisJZGV2LT5lcCBbMF0uZXAubWF4cGFja2V0ID0gNjQ7CisJZGV2LT5lcCBbNV0uZXAubWF4cGFja2V0ID0gNjQ7CisJZGV2LT5lcCBbNl0uZXAubWF4cGFja2V0ID0gNjQ7CisKKwlkZXYtPmdhZGdldC5lcDAgPSAmZGV2LT5lcCBbMF0uZXA7CisJZGV2LT5lcCBbMF0uc3RvcHBlZCA9IDA7CisJSU5JVF9MSVNUX0hFQUQgKCZkZXYtPmdhZGdldC5lcDAtPmVwX2xpc3QpOworCisJLyogd2Ugd2FudCB0byBwcmV2ZW50IGxvd2xldmVsL2luc2VjdXJlIGFjY2VzcyBmcm9tIHRoZSBVU0IgaG9zdCwKKwkgKiBidXQgZXJyYXR1bSAwMTE5IG1lYW5zIHRoaXMgZW5hYmxlIGJpdCBpcyBpZ25vcmVkCisJICovCisJZm9yICh0bXAgPSAwOyB0bXAgPCA1OyB0bXArKykKKwkJd3JpdGVsIChFUF9ET05UVVNFLCAmZGV2LT5kZXAgW3RtcF0uZGVwX2NmZyk7Cit9CisKK3N0YXRpYyB2b2lkIGVwMF9zdGFydCAoc3RydWN0IG5ldDIyODAgKmRldikKK3sKKwl3cml0ZWwgKCAgKDEgPDwgQ0xFQVJfRVBfSElERV9TVEFUVVNfUEhBU0UpCisJCXwgKDEgPDwgQ0xFQVJfTkFLX09VVF9QQUNLRVRTKQorCQl8ICgxIDw8IENMRUFSX0NPTlRST0xfU1RBVFVTX1BIQVNFX0hBTkRTSEFLRSkKKwkJLCAmZGV2LT5lcHJlZ3MgWzBdLmVwX3JzcCk7CisKKwkvKgorCSAqIGhhcmR3YXJlIG9wdGlvbmFsbHkgaGFuZGxlcyBhIGJ1bmNoIG9mIHN0YW5kYXJkIHJlcXVlc3RzCisJICogdGhhdCB0aGUgQVBJIGhpZGVzIGZyb20gZHJpdmVycyBhbnl3YXkuICBoYXZlIGl0IGRvIHNvLgorCSAqIGVuZHBvaW50IHN0YXR1cy9mZWF0dXJlcyBhcmUgaGFuZGxlZCBpbiBzb2Z0d2FyZSwgdG8KKwkgKiBoZWxwIHBhc3MgdGVzdHMgZm9yIHNvbWUgZHViaW91cyBiZWhhdmlvci4KKwkgKi8KKwl3cml0ZWwgKCAgKDEgPDwgU0VUX1RFU1RfTU9ERSkKKwkJfCAoMSA8PCBTRVRfQUREUkVTUykKKwkJfCAoMSA8PCBERVZJQ0VfU0VUX0NMRUFSX0RFVklDRV9SRU1PVEVfV0FLRVVQKQorCQl8ICgxIDw8IEdFVF9ERVZJQ0VfU1RBVFVTKQorCQl8ICgxIDw8IEdFVF9JTlRFUkZBQ0VfU1RBVFVTKQorCQksICZkZXYtPnVzYi0+c3RkcnNwKTsKKwl3cml0ZWwgKCAgKDEgPDwgVVNCX1JPT1RfUE9SVF9XQUtFVVBfRU5BQkxFKQorCQl8ICgxIDw8IFNFTEZfUE9XRVJFRF9VU0JfREVWSUNFKQorCQl8ICgxIDw8IFJFTU9URV9XQUtFVVBfU1VQUE9SVCkKKwkJfCAoZGV2LT5zb2Z0Y29ubmVjdCA8PCBVU0JfREVURUNUX0VOQUJMRSkKKwkJfCAoMSA8PCBTRUxGX1BPV0VSRURfU1RBVFVTKQorCQksICZkZXYtPnVzYi0+dXNiY3RsKTsKKworCS8qIGVuYWJsZSBpcnFzIHNvIHdlIGNhbiBzZWUgZXAwIGFuZCBnZW5lcmFsIG9wZXJhdGlvbiAgKi8KKwl3cml0ZWwgKCAgKDEgPDwgU0VUVVBfUEFDS0VUX0lOVEVSUlVQVF9FTkFCTEUpCisJCXwgKDEgPDwgRU5EUE9JTlRfMF9JTlRFUlJVUFRfRU5BQkxFKQorCQksICZkZXYtPnJlZ3MtPnBjaWlycWVuYjApOworCXdyaXRlbCAoICAoMSA8PCBQQ0lfSU5URVJSVVBUX0VOQUJMRSkKKwkJfCAoMSA8PCBQQ0lfTUFTVEVSX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUpCisJCXwgKDEgPDwgUENJX1RBUkdFVF9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFKQorCQl8ICgxIDw8IFBDSV9SRVRSWV9BQk9SVF9JTlRFUlJVUFRfRU5BQkxFKQorCQl8ICgxIDw8IFZCVVNfSU5URVJSVVBUX0VOQUJMRSkKKwkJfCAoMSA8PCBST09UX1BPUlRfUkVTRVRfSU5URVJSVVBUX0VOQUJMRSkKKwkJfCAoMSA8PCBTVVNQRU5EX1JFUVVFU1RfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUpCisJCSwgJmRldi0+cmVncy0+cGNpaXJxZW5iMSk7CisKKwkvKiBkb24ndCBsZWF2ZSBhbnkgd3JpdGVzIHBvc3RlZCAqLworCSh2b2lkKSByZWFkbCAoJmRldi0+dXNiLT51c2JjdGwpOworfQorCisvKiB3aGVuIGEgZHJpdmVyIGlzIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkLCBpdCB3aWxsIHJlY2VpdmUKKyAqIGNvbnRyb2wgcmVxdWVzdHMgaW5jbHVkaW5nIHNldF9jb25maWd1cmF0aW9uKCksIHdoaWNoIGVuYWJsZXMKKyAqIG5vbi1jb250cm9sIHJlcXVlc3RzLiAgdGhlbiB1c2IgdHJhZmZpYyBmb2xsb3dzIHVudGlsIGEKKyAqIGRpc2Nvbm5lY3QgaXMgcmVwb3J0ZWQuICB0aGVuIGEgaG9zdCBtYXkgY29ubmVjdCBhZ2Fpbiwgb3IKKyAqIHRoZSBkcml2ZXIgbWlnaHQgZ2V0IHVuYm91bmQuCisgKi8KK2ludCB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJc3RydWN0IG5ldDIyODAJCSpkZXYgPSB0aGVfY29udHJvbGxlcjsKKwlpbnQJCQlyZXR2YWw7CisJdW5zaWduZWQJCWk7CisKKwkvKiBpbnNpc3Qgb24gaGlnaCBzcGVlZCBzdXBwb3J0IGZyb20gdGhlIGRyaXZlciwgc2luY2UKKwkgKiAoZGV2LT51c2ItPnhjdnJkaWFnICYgRk9SQ0VfRlVMTF9TUEVFRF9NT0RFKQorCSAqICJtdXN0IG5vdCBiZSB1c2VkIGluIG5vcm1hbCBvcGVyYXRpb24iCisJICovCisJaWYgKCFkcml2ZXIKKwkJCXx8IGRyaXZlci0+c3BlZWQgIT0gVVNCX1NQRUVEX0hJR0gKKwkJCXx8ICFkcml2ZXItPmJpbmQKKwkJCXx8ICFkcml2ZXItPnVuYmluZAorCQkJfHwgIWRyaXZlci0+c2V0dXApCisJCXJldHVybiAtRUlOVkFMOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoZGV2LT5kcml2ZXIpCisJCXJldHVybiAtRUJVU1k7CisKKwlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKQorCQlkZXYtPmVwIFtpXS5pcnFzID0gMDsKKworCS8qIGhvb2sgdXAgdGhlIGRyaXZlciAuLi4gKi8KKwlkZXYtPnNvZnRjb25uZWN0ID0gMTsKKwlkcml2ZXItPmRyaXZlci5idXMgPSBOVUxMOworCWRldi0+ZHJpdmVyID0gZHJpdmVyOworCWRldi0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAmZHJpdmVyLT5kcml2ZXI7CisJcmV0dmFsID0gZHJpdmVyLT5iaW5kICgmZGV2LT5nYWRnZXQpOworCWlmIChyZXR2YWwpIHsKKwkJREVCVUcgKGRldiwgImJpbmQgdG8gZHJpdmVyICVzIC0tPiAlZFxuIiwKKwkJCQlkcml2ZXItPmRyaXZlci5uYW1lLCByZXR2YWwpOworCQlkZXYtPmRyaXZlciA9IE5VTEw7CisJCWRldi0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWRldmljZV9jcmVhdGVfZmlsZSAoJmRldi0+cGRldi0+ZGV2LCAmZGV2X2F0dHJfZnVuY3Rpb24pOworCWRldmljZV9jcmVhdGVfZmlsZSAoJmRldi0+cGRldi0+ZGV2LCAmZGV2X2F0dHJfcXVldWVzKTsKKworCS8qIC4uLiB0aGVuIGVuYWJsZSBob3N0IGRldGVjdGlvbiBhbmQgZXAwOyBhbmQgd2UncmUgcmVhZHkKKwkgKiBmb3Igc2V0X2NvbmZpZ3VyYXRpb24gYXMgd2VsbCBhcyBldmVudHVhbCBkaXNjb25uZWN0LgorCSAqLworCW5ldDIyODBfbGVkX2FjdGl2ZSAoZGV2LCAxKTsKKwllcDBfc3RhcnQgKGRldik7CisKKwlERUJVRyAoZGV2LCAiJXMgcmVhZHksIHVzYmN0bCAlMDh4IHN0ZHJzcCAlMDh4XG4iLAorCQkJZHJpdmVyLT5kcml2ZXIubmFtZSwKKwkJCXJlYWRsICgmZGV2LT51c2ItPnVzYmN0bCksCisJCQlyZWFkbCAoJmRldi0+dXNiLT5zdGRyc3ApKTsKKworCS8qIHBjaSB3cml0ZXMgbWF5IHN0aWxsIGJlIHBvc3RlZCAqLworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCAodXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIpOworCitzdGF0aWMgdm9pZAorc3RvcF9hY3Rpdml0eSAoc3RydWN0IG5ldDIyODAgKmRldiwgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJaW50CQkJaTsKKworCS8qIGRvbid0IGRpc2Nvbm5lY3QgaWYgaXQncyBub3QgY29ubmVjdGVkICovCisJaWYgKGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKQorCQlkcml2ZXIgPSBOVUxMOworCisJLyogc3RvcCBoYXJkd2FyZTsgcHJldmVudCBuZXcgcmVxdWVzdCBzdWJtaXNzaW9uczsKKwkgKiBhbmQga2lsbCBhbnkgb3V0c3RhbmRpbmcgcmVxdWVzdHMuCisJICovCisJdXNiX3Jlc2V0IChkZXYpOworCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspCisJCW51a2UgKCZkZXYtPmVwIFtpXSk7CisKKwkvKiByZXBvcnQgZGlzY29ubmVjdDsgdGhlIGRyaXZlciBpcyBhbHJlYWR5IHF1aWVzY2VkICovCisJaWYgKGRyaXZlcikgeworCQlzcGluX3VubG9jayAoJmRldi0+bG9jayk7CisJCWRyaXZlci0+ZGlzY29ubmVjdCAoJmRldi0+Z2FkZ2V0KTsKKwkJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKwl9CisKKwl1c2JfcmVpbml0IChkZXYpOworfQorCitpbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJc3RydWN0IG5ldDIyODAJKmRldiA9IHRoZV9jb250cm9sbGVyOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFkcml2ZXIgfHwgZHJpdmVyICE9IGRldi0+ZHJpdmVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZGV2LT5sb2NrLCBmbGFncyk7CisJc3RvcF9hY3Rpdml0eSAoZGV2LCBkcml2ZXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCW5ldDIyODBfcHVsbHVwICgmZGV2LT5nYWRnZXQsIDApOworCisJZHJpdmVyLT51bmJpbmQgKCZkZXYtPmdhZGdldCk7CisJZGV2LT5nYWRnZXQuZGV2LmRyaXZlciA9IE5VTEw7CisJZGV2LT5kcml2ZXIgPSBOVUxMOworCisJbmV0MjI4MF9sZWRfYWN0aXZlIChkZXYsIDApOworCWRldmljZV9yZW1vdmVfZmlsZSAoJmRldi0+cGRldi0+ZGV2LCAmZGV2X2F0dHJfZnVuY3Rpb24pOworCWRldmljZV9yZW1vdmVfZmlsZSAoJmRldi0+cGRldi0+ZGV2LCAmZGV2X2F0dHJfcXVldWVzKTsKKworCURFQlVHIChkZXYsICJ1bnJlZ2lzdGVyZWQgZHJpdmVyICclcydcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCAodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogaGFuZGxlIGVwMCwgZXAtZSwgZXAtZiB3aXRoIDY0IGJ5dGUgcGFja2V0czogcGFja2V0IHBlciBpcnEuCisgKiBhbHNvIHdvcmtzIGZvciBkbWEtY2FwYWJsZSBlbmRwb2ludHMsIGluIHBpbyBtb2RlIG9yIGp1c3QKKyAqIHRvIG1hbnVhbGx5IGFkdmFuY2UgdGhlIHF1ZXVlIGFmdGVyIHNob3J0IE9VVCB0cmFuc2ZlcnMuCisgKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV9lcF9zbWFsbCAoc3RydWN0IG5ldDIyODBfZXAgKmVwKQoreworCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QJKnJlcTsKKwl1MzIJCQl0OworCS8qIDAgZXJyb3IsIDEgbWlkLWRhdGEsIDIgZG9uZSAqLworCWludAkJCW1vZGUgPSAxOworCisJaWYgKCFsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKSkKKwkJcmVxID0gbGlzdF9lbnRyeSAoZXAtPnF1ZXVlLm5leHQsCisJCQlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0LCBxdWV1ZSk7CisJZWxzZQorCQlyZXEgPSBOVUxMOworCisJLyogYWNrIGFsbCwgYW5kIGhhbmRsZSB3aGF0IHdlIGNhcmUgYWJvdXQgKi8KKwl0ID0gcmVhZGwgKCZlcC0+cmVncy0+ZXBfc3RhdCk7CisJZXAtPmlycXMrKzsKKyNpZiAwCisJVkRFQlVHIChlcC0+ZGV2LCAiJXMgYWNrIGVwX3N0YXQgJTA4eCwgcmVxICVwXG4iLAorCQkJZXAtPmVwLm5hbWUsIHQsIHJlcSA/ICZyZXEtPnJlcSA6IDApOworI2VuZGlmCisJd3JpdGVsICh0ICYgfigxIDw8IE5BS19PVVRfUEFDS0VUUyksICZlcC0+cmVncy0+ZXBfc3RhdCk7CisKKwkvKiBmb3IgZXAwLCBtb25pdG9yIHRva2VuIGlycXMgdG8gY2F0Y2ggZGF0YSBzdGFnZSBsZW5ndGggZXJyb3JzCisJICogYW5kIHRvIHN5bmNocm9uaXplIG9uIHN0YXR1cy4KKwkgKgorCSAqIGFsc28sIHRvIGRlZmVyIHJlcG9ydGluZyBvZiBwcm90b2NvbCBzdGFsbHMgLi4uIGhlcmUncyB3aGVyZQorCSAqIGRhdGEgb3Igc3RhdHVzIGZpcnN0IGFwcGVhcnMsIGhhbmRsaW5nIHN0YWxscyBoZXJlIHNob3VsZCBuZXZlcgorCSAqIGNhdXNlIHRyb3VibGUgb24gdGhlIGhvc3Qgc2lkZS4uCisJICoKKwkgKiBjb250cm9sIHJlcXVlc3RzIGNvdWxkIGJlIHNsaWdodGx5IGZhc3RlciB3aXRob3V0IHRva2VuIHN5bmNoIGZvcgorCSAqIHN0YXR1cywgYnV0IHN0YXR1cyBjYW4gamFtIHVwIHRoYXQgd2F5LgorCSAqLworCWlmICh1bmxpa2VseSAoZXAtPm51bSA9PSAwKSkgeworCQlpZiAoZXAtPmlzX2luKSB7CisJCQkvKiBzdGF0dXM7IHN0b3AgTkFLaW5nICovCisJCQlpZiAodCAmICgxIDw8IERBVEFfT1VUX1BJTkdfVE9LRU5fSU5URVJSVVBUKSkgeworCQkJCWlmIChlcC0+ZGV2LT5wcm90b2NvbF9zdGFsbCkgeworCQkJCQllcC0+c3RvcHBlZCA9IDE7CisJCQkJCXNldF9oYWx0IChlcCk7CisJCQkJfQorCQkJCWlmICghcmVxKQorCQkJCQlhbGxvd19zdGF0dXMgKGVwKTsKKwkJCQltb2RlID0gMjsKKwkJCS8qIHJlcGx5IHRvIGV4dHJhIElOIGRhdGEgdG9rZW5zIHdpdGggYSB6bHAgKi8KKwkJCX0gZWxzZSBpZiAodCAmICgxIDw8IERBVEFfSU5fVE9LRU5fSU5URVJSVVBUKSkgeworCQkJCWlmIChlcC0+ZGV2LT5wcm90b2NvbF9zdGFsbCkgeworCQkJCQllcC0+c3RvcHBlZCA9IDE7CisJCQkJCXNldF9oYWx0IChlcCk7CisJCQkJCW1vZGUgPSAyOworCQkJCX0gZWxzZSBpZiAoIXJlcSAmJiBlcC0+c3RvcHBlZCkKKwkJCQkJd3JpdGVfZmlmbyAoZXAsIE5VTEwpOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogc3RhdHVzOyBzdG9wIE5BS2luZyAqLworCQkJaWYgKHQgJiAoMSA8PCBEQVRBX0lOX1RPS0VOX0lOVEVSUlVQVCkpIHsKKwkJCQlpZiAoZXAtPmRldi0+cHJvdG9jb2xfc3RhbGwpIHsKKwkJCQkJZXAtPnN0b3BwZWQgPSAxOworCQkJCQlzZXRfaGFsdCAoZXApOworCQkJCX0KKwkJCQltb2RlID0gMjsKKwkJCS8qIGFuIGV4dHJhIE9VVCB0b2tlbiBpcyBhbiBlcnJvciAqLworCQkJfSBlbHNlIGlmICgoKHQgJiAoMSA8PCBEQVRBX09VVF9QSU5HX1RPS0VOX0lOVEVSUlVQVCkpCisJCQkJCSYmIHJlcQorCQkJCQkmJiByZXEtPnJlcS5hY3R1YWwgPT0gcmVxLT5yZXEubGVuZ3RoKQorCQkJCQl8fCAhcmVxKSB7CisJCQkJZXAtPmRldi0+cHJvdG9jb2xfc3RhbGwgPSAxOworCQkJCXNldF9oYWx0IChlcCk7CisJCQkJZXAtPnN0b3BwZWQgPSAxOworCQkJCWlmIChyZXEpCisJCQkJCWRvbmUgKGVwLCByZXEsIC1FT1ZFUkZMT1cpOworCQkJCXJlcSA9IE5VTEw7CisJCQl9CisJCX0KKwl9CisKKwlpZiAodW5saWtlbHkgKCFyZXEpKQorCQlyZXR1cm47CisKKwkvKiBtYW51YWwgRE1BIHF1ZXVlIGFkdmFuY2UgYWZ0ZXIgc2hvcnQgT1VUICovCisJaWYgKGxpa2VseSAoZXAtPmRtYSAhPSAwKSkgeworCQlpZiAodCAmICgxIDw8IFNIT1JUX1BBQ0tFVF9UUkFOU0ZFUlJFRF9JTlRFUlJVUFQpKSB7CisJCQl1MzIJY291bnQ7CisJCQlpbnQJc3RvcHBlZCA9IGVwLT5zdG9wcGVkOworCisJCQkvKiBUUkFOU0ZFUlJFRCB3b3JrcyBhcm91bmQgT1VUX0RPTkUgZXJyYXR1bSAwMTEyLgorCQkJICogd2UgZXhwZWN0IChOIDw9IG1heHBhY2tldCkgYnl0ZXM7IGhvc3Qgd3JvdGUgTS4KKwkJCSAqIGlmZiAoTSA8IE4pIHdlIHdvbid0IGV2ZXIgc2VlIGEgRE1BIGludGVycnVwdC4KKwkJCSAqLworCQkJZXAtPnN0b3BwZWQgPSAxOworCQkJZm9yIChjb3VudCA9IDA7IDsgdCA9IHJlYWRsICgmZXAtPnJlZ3MtPmVwX3N0YXQpKSB7CisKKwkJCQkvKiBhbnkgcHJlY2VkaW5nIGRtYSB0cmFuc2ZlcnMgbXVzdCBmaW5pc2guCisJCQkJICogZG1hIGhhbmRsZXMgKE0gPj0gTiksIG1heSBlbXB0eSB0aGUgcXVldWUKKwkJCQkgKi8KKwkJCQlzY2FuX2RtYV9jb21wbGV0aW9ucyAoZXApOworCQkJCWlmICh1bmxpa2VseSAobGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkKKwkJCQkJCXx8IGVwLT5vdXRfb3ZlcmZsb3cpKSB7CisJCQkJCXJlcSA9IE5VTEw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlyZXEgPSBsaXN0X2VudHJ5IChlcC0+cXVldWUubmV4dCwKKwkJCQkJc3RydWN0IG5ldDIyODBfcmVxdWVzdCwgcXVldWUpOworCisJCQkJLyogaGVyZSBlaXRoZXIgKE0gPCBOKSwgYSAicmVhbCIgc2hvcnQgcng7CisJCQkJICogb3IgKE0gPT0gTikgYW5kIHRoZSBxdWV1ZSBkaWRuJ3QgZW1wdHkKKwkJCQkgKi8KKwkJCQlpZiAobGlrZWx5ICh0ICYgKDEgPDwgRklGT19FTVBUWSkpKSB7CisJCQkJCWNvdW50ID0gcmVhZGwgKCZlcC0+ZG1hLT5kbWFjb3VudCk7CisJCQkJCWNvdW50ICY9IERNQV9CWVRFX0NPVU5UX01BU0s7CisJCQkJCWlmIChyZWFkbCAoJmVwLT5kbWEtPmRtYWRlc2MpCisJCQkJCQkJIT0gcmVxLT50ZF9kbWEpCisJCQkJCQlyZXEgPSBOVUxMOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJdWRlbGF5KDEpOworCQkJfQorCisJCQkvKiBzdG9wIERNQSwgbGVhdmUgZXAgTkFLaW5nICovCisJCQl3cml0ZWwgKCgxIDw8IERNQV9BQk9SVCksICZlcC0+ZG1hLT5kbWFzdGF0KTsKKwkJCXNwaW5fc3RvcF9kbWEgKGVwLT5kbWEpOworCisJCQlpZiAobGlrZWx5IChyZXEpKSB7CisJCQkJcmVxLT50ZC0+ZG1hY291bnQgPSAwOworCQkJCXQgPSByZWFkbCAoJmVwLT5yZWdzLT5lcF9hdmFpbCk7CisJCQkJZG1hX2RvbmUgKGVwLCByZXEsIGNvdW50LCB0KTsKKwkJCX0KKworCQkJLyogYWxzbyBmbHVzaCB0byBwcmV2ZW50IGVycmF0dW0gMDEwNiB0cm91YmxlICovCisJCQlpZiAodW5saWtlbHkgKGVwLT5vdXRfb3ZlcmZsb3cKKwkJCQkJfHwgKGVwLT5kZXYtPmNoaXByZXYgPT0gMHgwMTAwCisJCQkJCQkmJiBlcC0+ZGV2LT5nYWRnZXQuc3BlZWQKKwkJCQkJCQk9PSBVU0JfU1BFRURfRlVMTCkpKSB7CisJCQkJb3V0X2ZsdXNoIChlcCk7CisJCQkJZXAtPm91dF9vdmVyZmxvdyA9IDA7CisJCQl9CisKKwkJCS8qIChyZSlzdGFydCBkbWEgaWYgbmVlZGVkLCBzdG9wIE5BS2luZyAqLworCQkJZXAtPnN0b3BwZWQgPSBzdG9wcGVkOworCQkJaWYgKCFsaXN0X2VtcHR5ICgmZXAtPnF1ZXVlKSkKKwkJCQlyZXN0YXJ0X2RtYSAoZXApOworCQl9IGVsc2UKKwkJCURFQlVHIChlcC0+ZGV2LCAiJXMgZG1hIGVwX3N0YXQgJTA4eCA/P1xuIiwKKwkJCQkJZXAtPmVwLm5hbWUsIHQpOworCQlyZXR1cm47CisKKwkvKiBkYXRhIHBhY2tldChzKSByZWNlaXZlZCAoaW4gdGhlIGZpZm8sIE9VVCkgKi8KKwl9IGVsc2UgaWYgKHQgJiAoMSA8PCBEQVRBX1BBQ0tFVF9SRUNFSVZFRF9JTlRFUlJVUFQpKSB7CisJCWlmIChyZWFkX2ZpZm8gKGVwLCByZXEpICYmIGVwLT5udW0gIT0gMCkKKwkJCW1vZGUgPSAyOworCisJLyogZGF0YSBwYWNrZXQocykgdHJhbnNtaXR0ZWQgKElOKSAqLworCX0gZWxzZSBpZiAodCAmICgxIDw8IERBVEFfUEFDS0VUX1RSQU5TTUlUVEVEX0lOVEVSUlVQVCkpIHsKKwkJdW5zaWduZWQJbGVuOworCisJCWxlbiA9IHJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbDsKKwkJaWYgKGxlbiA+IGVwLT5lcC5tYXhwYWNrZXQpCisJCQlsZW4gPSBlcC0+ZXAubWF4cGFja2V0OworCQlyZXEtPnJlcS5hY3R1YWwgKz0gbGVuOworCisJCS8qIGlmIHdlIHdyb3RlIGl0IGFsbCwgd2UncmUgdXN1YWxseSBkb25lICovCisJCWlmIChyZXEtPnJlcS5hY3R1YWwgPT0gcmVxLT5yZXEubGVuZ3RoKSB7CisJCQlpZiAoZXAtPm51bSA9PSAwKSB7CisJCQkJLyogd2FpdCBmb3IgY29udHJvbCBzdGF0dXMgKi8KKwkJCQlpZiAobW9kZSAhPSAyKQorCQkJCQlyZXEgPSBOVUxMOworCQkJfSBlbHNlIGlmICghcmVxLT5yZXEuemVybyB8fCBsZW4gIT0gZXAtPmVwLm1heHBhY2tldCkKKwkJCQltb2RlID0gMjsKKwkJfQorCisJLyogdGhlcmUgd2FzIG5vdGhpbmcgdG8gZG8gLi4uICAqLworCX0gZWxzZSBpZiAobW9kZSA9PSAxKQorCQlyZXR1cm47CisKKwkvKiBkb25lICovCisJaWYgKG1vZGUgPT0gMikgeworCQkvKiBzdHJlYW0gZW5kcG9pbnRzIG9mdGVuIHJlc3VibWl0L3VubGluayBpbiBjb21wbGV0aW9uICovCisJCWRvbmUgKGVwLCByZXEsIDApOworCisJCS8qIG1heWJlIGFkdmFuY2UgcXVldWUgdG8gbmV4dCByZXF1ZXN0ICovCisJCWlmIChlcC0+bnVtID09IDApIHsKKwkJCS8qIE5PVEU6ICBuZXQyMjgwIGNvdWxkIGxldCBnYWRnZXQgZHJpdmVyIHN0YXJ0IHRoZQorCQkJICogc3RhdHVzIHN0YWdlIGxhdGVyLiBzaW5jZSBub3QgYWxsIGNvbnRyb2xsZXJzIGxldAorCQkJICogdGhlbSBjb250cm9sIHRoYXQsIHRoZSBhcGkgZG9lc24ndCAoeWV0KSBhbGxvdyBpdC4KKwkJCSAqLworCQkJaWYgKCFlcC0+c3RvcHBlZCkKKwkJCQlhbGxvd19zdGF0dXMgKGVwKTsKKwkJCXJlcSA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQlpZiAoIWxpc3RfZW1wdHkgKCZlcC0+cXVldWUpICYmICFlcC0+c3RvcHBlZCkKKwkJCQlyZXEgPSBsaXN0X2VudHJ5IChlcC0+cXVldWUubmV4dCwKKwkJCQkJc3RydWN0IG5ldDIyODBfcmVxdWVzdCwgcXVldWUpOworCQkJZWxzZQorCQkJCXJlcSA9IE5VTEw7CisJCQlpZiAocmVxICYmICFlcC0+aXNfaW4pCisJCQkJc3RvcF9vdXRfbmFraW5nIChlcCk7CisJCX0KKwl9CisKKwkvKiBpcyB0aGVyZSBhIGJ1ZmZlciBmb3IgdGhlIG5leHQgcGFja2V0PworCSAqIGZvciBiZXN0IHN0cmVhbWluZyBwZXJmb3JtYW5jZSwgbWFrZSBzdXJlIHRoZXJlIGlzIG9uZS4KKwkgKi8KKwlpZiAocmVxICYmICFlcC0+c3RvcHBlZCkgeworCisJCS8qIGxvYWQgSU4gZmlmbyB3aXRoIG5leHQgcGFja2V0IChtYXkgYmUgemxwKSAqLworCQlpZiAodCAmICgxIDw8IERBVEFfUEFDS0VUX1RSQU5TTUlUVEVEX0lOVEVSUlVQVCkpCisJCQl3cml0ZV9maWZvIChlcCwgJnJlcS0+cmVxKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0MjI4MF9lcCAqCitnZXRfZXBfYnlfYWRkciAoc3RydWN0IG5ldDIyODAgKmRldiwgdTE2IHdJbmRleCkKK3sKKwlzdHJ1Y3QgbmV0MjI4MF9lcAkqZXA7CisKKwlpZiAoKHdJbmRleCAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSykgPT0gMCkKKwkJcmV0dXJuICZkZXYtPmVwIFswXTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChlcCwgJmRldi0+Z2FkZ2V0LmVwX2xpc3QsIGVwLmVwX2xpc3QpIHsKKwkJdTgJYkVuZHBvaW50QWRkcmVzczsKKworCQlpZiAoIWVwLT5kZXNjKQorCQkJY29udGludWU7CisJCWJFbmRwb2ludEFkZHJlc3MgPSBlcC0+ZGVzYy0+YkVuZHBvaW50QWRkcmVzczsKKwkJaWYgKCh3SW5kZXggXiBiRW5kcG9pbnRBZGRyZXNzKSAmIFVTQl9ESVJfSU4pCisJCQljb250aW51ZTsKKwkJaWYgKCh3SW5kZXggJiAweDBmKSA9PSAoYkVuZHBvaW50QWRkcmVzcyAmIDB4MGYpKQorCQkJcmV0dXJuIGVwOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3N0YXQwX2lycXMgKHN0cnVjdCBuZXQyMjgwICpkZXYsIHUzMiBzdGF0KQoreworCXN0cnVjdCBuZXQyMjgwX2VwCSplcDsKKwl1MzIJCQludW0sIHNjcmF0Y2g7CisKKwkvKiBtb3N0IG9mIHRoZXNlIGRvbid0IG5lZWQgaW5kaXZpZHVhbCBhY2tzICovCisJc3RhdCAmPSB+KDEgPDwgSU5UQV9BU1NFUlRFRCk7CisJaWYgKCFzdGF0KQorCQlyZXR1cm47CisJLy8gREVCVUcgKGRldiwgImlycXN0YXQwICUwNHhcbiIsIHN0YXQpOworCisJLyogc3RhcnRpbmcgYSBjb250cm9sIHJlcXVlc3Q/ICovCisJaWYgKHVubGlrZWx5IChzdGF0ICYgKDEgPDwgU0VUVVBfUEFDS0VUX0lOVEVSUlVQVCkpKSB7CisJCXVuaW9uIHsKKwkJCXUzMgkJCXJhdyBbMl07CisJCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0CXI7CisJCX0gdTsKKwkJaW50CQkJCXRtcCA9IDA7CisJCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QJCSpyZXE7CisKKwkJaWYgKGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSB7CisJCQlpZiAocmVhZGwgKCZkZXYtPnVzYi0+dXNic3RhdCkgJiAoMSA8PCBISUdIX1NQRUVEKSkKKwkJCQlkZXYtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9ISUdIOworCQkJZWxzZQorCQkJCWRldi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CisJCQluZXQyMjgwX2xlZF9zcGVlZCAoZGV2LCBkZXYtPmdhZGdldC5zcGVlZCk7CisJCQlERUJVRyAoZGV2LCAiJXMgc3BlZWRcbiIsCisJCQkJKGRldi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorCQkJCQk/ICJoaWdoIiA6ICJmdWxsIik7CisJCX0KKworCQllcCA9ICZkZXYtPmVwIFswXTsKKwkJZXAtPmlycXMrKzsKKworCQkvKiBtYWtlIHN1cmUgYW55IGxlZnRvdmVyIHJlcXVlc3Qgc3RhdGUgaXMgY2xlYXJlZCAqLworCQlzdGF0ICY9IH4oMSA8PCBFTkRQT0lOVF8wX0lOVEVSUlVQVCk7CisJCXdoaWxlICghbGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkpIHsKKwkJCXJlcSA9IGxpc3RfZW50cnkgKGVwLT5xdWV1ZS5uZXh0LAorCQkJCQlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0LCBxdWV1ZSk7CisJCQlkb25lIChlcCwgcmVxLCAocmVxLT5yZXEuYWN0dWFsID09IHJlcS0+cmVxLmxlbmd0aCkKKwkJCQkJCT8gMCA6IC1FUFJPVE8pOworCQl9CisJCWVwLT5zdG9wcGVkID0gMDsKKwkJZGV2LT5wcm90b2NvbF9zdGFsbCA9IDA7CisJCXdyaXRlbCAoICAoMSA8PCBUSU1FT1VUKQorCQkJfCAoMSA8PCBVU0JfU1RBTExfU0VOVCkKKwkJCXwgKDEgPDwgVVNCX0lOX05BS19TRU5UKQorCQkJfCAoMSA8PCBVU0JfSU5fQUNLX1JDVkQpCisJCQl8ICgxIDw8IFVTQl9PVVRfUElOR19OQUtfU0VOVCkKKwkJCXwgKDEgPDwgVVNCX09VVF9BQ0tfU0VOVCkKKwkJCXwgKDEgPDwgRklGT19PVkVSRkxPVykKKwkJCXwgKDEgPDwgRklGT19VTkRFUkZMT1cpCisJCQl8ICgxIDw8IFNIT1JUX1BBQ0tFVF9PVVRfRE9ORV9JTlRFUlJVUFQpCisJCQl8ICgxIDw8IFNIT1JUX1BBQ0tFVF9UUkFOU0ZFUlJFRF9JTlRFUlJVUFQpCisJCQl8ICgxIDw8IERBVEFfUEFDS0VUX1JFQ0VJVkVEX0lOVEVSUlVQVCkKKwkJCXwgKDEgPDwgREFUQV9QQUNLRVRfVFJBTlNNSVRURURfSU5URVJSVVBUKQorCQkJfCAoMSA8PCBEQVRBX09VVF9QSU5HX1RPS0VOX0lOVEVSUlVQVCkKKwkJCXwgKDEgPDwgREFUQV9JTl9UT0tFTl9JTlRFUlJVUFQpCisJCQksICZlcC0+cmVncy0+ZXBfc3RhdCk7CisJCXUucmF3IFswXSA9IHJlYWRsICgmZGV2LT51c2ItPnNldHVwMDEyMyk7CisJCXUucmF3IFsxXSA9IHJlYWRsICgmZGV2LT51c2ItPnNldHVwNDU2Nyk7CisJCQorCQljcHVfdG9fbGUzMnMgKCZ1LnJhdyBbMF0pOworCQljcHVfdG9fbGUzMnMgKCZ1LnJhdyBbMV0pOworCisJCWxlMTZfdG9fY3B1cyAoJnUuci53VmFsdWUpOworCQlsZTE2X3RvX2NwdXMgKCZ1LnIud0luZGV4KTsKKwkJbGUxNl90b19jcHVzICgmdS5yLndMZW5ndGgpOworCisJCS8qIGFjayB0aGUgaXJxICovCisJCXdyaXRlbCAoMSA8PCBTRVRVUF9QQUNLRVRfSU5URVJSVVBULCAmZGV2LT5yZWdzLT5pcnFzdGF0MCk7CisJCXN0YXQgXj0gKDEgPDwgU0VUVVBfUEFDS0VUX0lOVEVSUlVQVCk7CisKKwkJLyogd2F0Y2ggY29udHJvbCB0cmFmZmljIGF0IHRoZSB0b2tlbiBsZXZlbCwgYW5kIGZvcmNlCisJCSAqIHN5bmNocm9uaXphdGlvbiBiZWZvcmUgbGV0dGluZyB0aGUgc3RhdHVzIHN0YWdlIGhhcHBlbi4KKwkJICogRklYTUUgaWdub3JlIHRva2VucyB3ZSdsbCBOQUssIHVudGlsIGRyaXZlciByZXNwb25kcy4KKwkJICogdGhhdCdsbCBtZWFuIGEgbG90IGxlc3MgaXJxcyBmb3Igc29tZSBkcml2ZXJzLgorCQkgKi8KKwkJZXAtPmlzX2luID0gKHUuci5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKSAhPSAwOworCQlpZiAoZXAtPmlzX2luKSB7CisJCQlzY3JhdGNoID0gKDEgPDwgREFUQV9QQUNLRVRfVFJBTlNNSVRURURfSU5URVJSVVBUKQorCQkJCXwgKDEgPDwgREFUQV9PVVRfUElOR19UT0tFTl9JTlRFUlJVUFQpCisJCQkJfCAoMSA8PCBEQVRBX0lOX1RPS0VOX0lOVEVSUlVQVCk7CisJCQlzdG9wX291dF9uYWtpbmcgKGVwKTsKKwkJfSBlbHNlCisJCQlzY3JhdGNoID0gKDEgPDwgREFUQV9QQUNLRVRfUkVDRUlWRURfSU5URVJSVVBUKQorCQkJCXwgKDEgPDwgREFUQV9PVVRfUElOR19UT0tFTl9JTlRFUlJVUFQpCisJCQkJfCAoMSA8PCBEQVRBX0lOX1RPS0VOX0lOVEVSUlVQVCk7CisJCXdyaXRlbCAoc2NyYXRjaCwgJmRldi0+ZXByZWdzIFswXS5lcF9pcnFlbmIpOworCisJCS8qIHdlIG1hZGUgdGhlIGhhcmR3YXJlIGhhbmRsZSBtb3N0IGxvd2xldmVsIHJlcXVlc3RzOworCQkgKiBldmVyeXRoaW5nIGVsc2UgZ29lcyB1cGxldmVsIHRvIHRoZSBnYWRnZXQgY29kZS4KKwkJICovCisJCXN3aXRjaCAodS5yLmJSZXF1ZXN0KSB7CisJCWNhc2UgVVNCX1JFUV9HRVRfU1RBVFVTOiB7CisJCQlzdHJ1Y3QgbmV0MjI4MF9lcAkqZTsKKwkJCXUxNgkJCXN0YXR1czsKKworCQkJLyogaHcgaGFuZGxlcyBkZXZpY2UgYW5kIGludGVyZmFjZSBzdGF0dXMgKi8KKwkJCWlmICh1LnIuYlJlcXVlc3RUeXBlICE9IChVU0JfRElSX0lOfFVTQl9SRUNJUF9FTkRQT0lOVCkpCisJCQkJZ290byBkZWxlZ2F0ZTsKKwkJCWlmICgoZSA9IGdldF9lcF9ieV9hZGRyIChkZXYsIHUuci53SW5kZXgpKSA9PSAwCisJCQkJCXx8IHUuci53TGVuZ3RoID4gMikKKwkJCQlnb3RvIGRvX3N0YWxsOworCisJCQlpZiAocmVhZGwgKCZlLT5yZWdzLT5lcF9yc3ApCisJCQkJCSYgKDEgPDwgU0VUX0VORFBPSU5UX0hBTFQpKQorCQkJCXN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDEpOworCQkJZWxzZQorCQkJCXN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDApOworCisJCQkvKiBkb24ndCBib3RoZXIgd2l0aCBhIHJlcXVlc3Qgb2JqZWN0ISAqLworCQkJd3JpdGVsICgwLCAmZGV2LT5lcHJlZ3MgWzBdLmVwX2lycWVuYik7CisJCQlzZXRfZmlmb19ieXRlY291bnQgKGVwLCB1LnIud0xlbmd0aCk7CisJCQl3cml0ZWwgKHN0YXR1cywgJmRldi0+ZXByZWdzIFswXS5lcF9kYXRhKTsKKwkJCWFsbG93X3N0YXR1cyAoZXApOworCQkJVkRFQlVHIChkZXYsICIlcyBzdGF0ICUwMnhcbiIsIGVwLT5lcC5uYW1lLCBzdGF0dXMpOworCQkJZ290byBuZXh0X2VuZHBvaW50czsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRTogeworCQkJc3RydWN0IG5ldDIyODBfZXAJKmU7CisKKwkJCS8qIGh3IGhhbmRsZXMgZGV2aWNlIGZlYXR1cmVzICovCisJCQlpZiAodS5yLmJSZXF1ZXN0VHlwZSAhPSBVU0JfUkVDSVBfRU5EUE9JTlQpCisJCQkJZ290byBkZWxlZ2F0ZTsKKwkJCWlmICh1LnIud1ZhbHVlICE9IFVTQl9FTkRQT0lOVF9IQUxUCisJCQkJCXx8IHUuci53TGVuZ3RoICE9IDApCisJCQkJZ290byBkb19zdGFsbDsKKwkJCWlmICgoZSA9IGdldF9lcF9ieV9hZGRyIChkZXYsIHUuci53SW5kZXgpKSA9PSAwKQorCQkJCWdvdG8gZG9fc3RhbGw7CisJCQljbGVhcl9oYWx0IChlKTsKKwkJCWFsbG93X3N0YXR1cyAoZXApOworCQkJVkRFQlVHIChkZXYsICIlcyBjbGVhciBoYWx0XG4iLCBlcC0+ZXAubmFtZSk7CisJCQlnb3RvIG5leHRfZW5kcG9pbnRzOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX1JFUV9TRVRfRkVBVFVSRTogeworCQkJc3RydWN0IG5ldDIyODBfZXAJKmU7CisKKwkJCS8qIGh3IGhhbmRsZXMgZGV2aWNlIGZlYXR1cmVzICovCisJCQlpZiAodS5yLmJSZXF1ZXN0VHlwZSAhPSBVU0JfUkVDSVBfRU5EUE9JTlQpCisJCQkJZ290byBkZWxlZ2F0ZTsKKwkJCWlmICh1LnIud1ZhbHVlICE9IFVTQl9FTkRQT0lOVF9IQUxUCisJCQkJCXx8IHUuci53TGVuZ3RoICE9IDApCisJCQkJZ290byBkb19zdGFsbDsKKwkJCWlmICgoZSA9IGdldF9lcF9ieV9hZGRyIChkZXYsIHUuci53SW5kZXgpKSA9PSAwKQorCQkJCWdvdG8gZG9fc3RhbGw7CisJCQlzZXRfaGFsdCAoZSk7CisJCQlhbGxvd19zdGF0dXMgKGVwKTsKKwkJCVZERUJVRyAoZGV2LCAiJXMgc2V0IGhhbHRcbiIsIGVwLT5lcC5uYW1lKTsKKwkJCWdvdG8gbmV4dF9lbmRwb2ludHM7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKK2RlbGVnYXRlOgorCQkJVkRFQlVHIChkZXYsICJzZXR1cCAlMDJ4LiUwMnggdiUwNHggaSUwNHggIgorCQkJCSJlcF9jZmcgJTA4eFxuIiwKKwkJCQl1LnIuYlJlcXVlc3RUeXBlLCB1LnIuYlJlcXVlc3QsCisJCQkJdS5yLndWYWx1ZSwgdS5yLndJbmRleCwKKwkJCQlyZWFkbCAoJmVwLT5yZWdzLT5lcF9jZmcpKTsKKwkJCXNwaW5fdW5sb2NrICgmZGV2LT5sb2NrKTsKKwkJCXRtcCA9IGRldi0+ZHJpdmVyLT5zZXR1cCAoJmRldi0+Z2FkZ2V0LCAmdS5yKTsKKwkJCXNwaW5fbG9jayAoJmRldi0+bG9jayk7CisJCX0KKworCQkvKiBzdGFsbCBlcDAgb24gZXJyb3IgKi8KKwkJaWYgKHRtcCA8IDApIHsKK2RvX3N0YWxsOgorCQkJVkRFQlVHIChkZXYsICJyZXEgJTAyeC4lMDJ4IHByb3RvY29sIFNUQUxMOyBzdGF0ICVkXG4iLAorCQkJCQl1LnIuYlJlcXVlc3RUeXBlLCB1LnIuYlJlcXVlc3QsIHRtcCk7CisJCQlkZXYtPnByb3RvY29sX3N0YWxsID0gMTsKKwkJfQorCisJCS8qIHNvbWUgaW4vb3V0IHRva2VuIGlycSBzaG91bGQgZm9sbG93OyBtYXliZSBzdGFsbCB0aGVuLgorCQkgKiBkcml2ZXIgbXVzdCBxdWV1ZSBhIHJlcXVlc3QgKGV2ZW4gemxwKSBvciBoYWx0IGVwMAorCQkgKiBiZWZvcmUgdGhlIGhvc3QgdGltZXMgb3V0LgorCQkgKi8KKwl9CisKK25leHRfZW5kcG9pbnRzOgorCS8qIGVuZHBvaW50IGRhdGEgaXJxID8gKi8KKwlzY3JhdGNoID0gc3RhdCAmIDB4N2Y7CisJc3RhdCAmPSB+MHg3ZjsKKwlmb3IgKG51bSA9IDA7IHNjcmF0Y2g7IG51bSsrKSB7CisJCXUzMgkJdDsKKworCQkvKiBkbyB0aGlzIGVuZHBvaW50J3MgRklGTyBhbmQgcXVldWUgbmVlZCB0ZW5kaW5nPyAqLworCQl0ID0gMSA8PCBudW07CisJCWlmICgoc2NyYXRjaCAmIHQpID09IDApCisJCQljb250aW51ZTsKKwkJc2NyYXRjaCBePSB0OworCisJCWVwID0gJmRldi0+ZXAgW251bV07CisJCWhhbmRsZV9lcF9zbWFsbCAoZXApOworCX0KKworCWlmIChzdGF0KQorCQlERUJVRyAoZGV2LCAidW5oYW5kbGVkIGlycXN0YXQwICUwOHhcbiIsIHN0YXQpOworfQorCisjZGVmaW5lIERNQV9JTlRFUlJVUFRTICggXAorCQkgICgxIDw8IERNQV9EX0lOVEVSUlVQVCkgXAorCQl8ICgxIDw8IERNQV9DX0lOVEVSUlVQVCkgXAorCQl8ICgxIDw8IERNQV9CX0lOVEVSUlVQVCkgXAorCQl8ICgxIDw8IERNQV9BX0lOVEVSUlVQVCkpCisjZGVmaW5lCVBDSV9FUlJPUl9JTlRFUlJVUFRTICggXAorCQkgICgxIDw8IFBDSV9NQVNURVJfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUKSBcCisJCXwgKDEgPDwgUENJX1RBUkdFVF9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFQpIFwKKwkJfCAoMSA8PCBQQ0lfUkVUUllfQUJPUlRfSU5URVJSVVBUKSkKKworc3RhdGljIHZvaWQgaGFuZGxlX3N0YXQxX2lycXMgKHN0cnVjdCBuZXQyMjgwICpkZXYsIHUzMiBzdGF0KQoreworCXN0cnVjdCBuZXQyMjgwX2VwCSplcDsKKwl1MzIJCQl0bXAsIG51bSwgbWFzaywgc2NyYXRjaDsKKworCS8qIGFmdGVyIGRpc2Nvbm5lY3QgdGhlcmUncyBub3RoaW5nIGVsc2UgdG8gZG8hICovCisJdG1wID0gKDEgPDwgVkJVU19JTlRFUlJVUFQpIHwgKDEgPDwgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlVQVCk7CisJbWFzayA9ICgxIDw8IEhJR0hfU1BFRUQpIHwgKDEgPDwgRlVMTF9TUEVFRCk7CisKKwkvKiBWQlVTIGRpc2Nvbm5lY3QgaXMgaW5kaWNhdGVkIGJ5IFZCVVNfUElOIGFuZCBWQlVTX0lOVEVSUlVQVCBzZXQuCisJICogUm9vdCBQb3J0IFJlc2V0IGlzIGluZGljYXRlZCBieSBST09UX1BPUlRfUkVTRVRfSU5URVJSUlVQVCBzZXQgYW5kCisJICogYm90aCBISUdIX1NQRUVEIGFuZCBGVUxMX1NQRUVEIGNsZWFyIChhcyBST09UX1BPUlRfUkVTRVRfSU5URVJSVVBUIAorCSAqIG9ubHkgaW5kaWNhdGVzIGEgY2hhbmdlIGluIHRoZSByZXNldCBzdGF0ZSkuCisJICovCisJaWYgKHN0YXQgJiB0bXApIHsKKwkJd3JpdGVsICh0bXAsICZkZXYtPnJlZ3MtPmlycXN0YXQxKTsKKwkJaWYgKCgoKHN0YXQgJiAoMSA8PCBST09UX1BPUlRfUkVTRVRfSU5URVJSVVBUKSkgJiYgCisJCQkJKChyZWFkbCAoJmRldi0+dXNiLT51c2JzdGF0KSAmIG1hc2spID09IDApKQorCQkJCXx8ICgocmVhZGwgKCZkZXYtPnVzYi0+dXNiY3RsKSAmICgxIDw8IFZCVVNfUElOKSkgPT0gMCkgCisJCQkgICAgKSAmJiAoIGRldi0+Z2FkZ2V0LnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOKSkgeworCQkJREVCVUcgKGRldiwgImRpc2Nvbm5lY3QgJXNcbiIsCisJCQkJCWRldi0+ZHJpdmVyLT5kcml2ZXIubmFtZSk7CisJCQlzdG9wX2FjdGl2aXR5IChkZXYsIGRldi0+ZHJpdmVyKTsKKwkJCWVwMF9zdGFydCAoZGV2KTsKKwkJCXJldHVybjsKKwkJfQorCQlzdGF0ICY9IH50bXA7CisKKwkJLyogdkJVUyBjYW4gYm91bmNlIC4uLiBvbmUgb2YgbWFueSByZWFzb25zIHRvIGlnbm9yZSB0aGUKKwkJICogbm90aW9uIG9mIGhvdHBsdWcgZXZlbnRzIG9uIGJ1cyBjb25uZWN0L2Rpc2Nvbm5lY3QhCisJCSAqLworCQlpZiAoIXN0YXQpCisJCQlyZXR1cm47CisJfQorCisJLyogTk9URTogY2hpcCBzdGF5cyBpbiBQQ0kgRDAgc3RhdGUgZm9yIG5vdywgYnV0IGl0IGNvdWxkCisJICogZW50ZXIgRDEgdG8gc2F2ZSBtb3JlIHBvd2VyCisJICovCisJdG1wID0gKDEgPDwgU1VTUEVORF9SRVFVRVNUX0NIQU5HRV9JTlRFUlJVUFQpOworCWlmIChzdGF0ICYgdG1wKSB7CisJCXdyaXRlbCAodG1wLCAmZGV2LT5yZWdzLT5pcnFzdGF0MSk7CisJCWlmIChzdGF0ICYgKDEgPDwgU1VTUEVORF9SRVFVRVNUX0lOVEVSUlVQVCkpIHsKKwkJCWlmIChkZXYtPmRyaXZlci0+c3VzcGVuZCkKKwkJCQlkZXYtPmRyaXZlci0+c3VzcGVuZCAoJmRldi0+Z2FkZ2V0KTsKKwkJCWlmICghZW5hYmxlX3N1c3BlbmQpCisJCQkJc3RhdCAmPSB+KDEgPDwgU1VTUEVORF9SRVFVRVNUX0lOVEVSUlVQVCk7CisJCX0gZWxzZSB7CisJCQlpZiAoZGV2LT5kcml2ZXItPnJlc3VtZSkKKwkJCQlkZXYtPmRyaXZlci0+cmVzdW1lICgmZGV2LT5nYWRnZXQpOworCQkJLyogYXQgaGlnaCBzcGVlZCwgbm90ZSBlcnJhdHVtIDAxMzMgKi8KKwkJfQorCQlzdGF0ICY9IH50bXA7CisJfQorCisJLyogY2xlYXIgYW55IG90aGVyIHN0YXR1cy9pcnFzICovCisJaWYgKHN0YXQpCisJCXdyaXRlbCAoc3RhdCwgJmRldi0+cmVncy0+aXJxc3RhdDEpOworCisJLyogc29tZSBzdGF0dXMgd2UgY2FuIGp1c3QgaWdub3JlICovCisJc3RhdCAmPSB+KCgxIDw8IENPTlRST0xfU1RBVFVTX0lOVEVSUlVQVCkKKwkJCXwgKDEgPDwgU1VTUEVORF9SRVFVRVNUX0lOVEVSUlVQVCkKKwkJCXwgKDEgPDwgUkVTVU1FX0lOVEVSUlVQVCkKKwkJCXwgKDEgPDwgU09GX0lOVEVSUlVQVCkpOworCWlmICghc3RhdCkKKwkJcmV0dXJuOworCS8vIERFQlVHIChkZXYsICJpcnFzdGF0MSAlMDh4XG4iLCBzdGF0KTsKKworCS8qIERNQSBzdGF0dXMsIGZvciBlcC17YSxiLGMsZH0gKi8KKwlzY3JhdGNoID0gc3RhdCAmIERNQV9JTlRFUlJVUFRTOworCXN0YXQgJj0gfkRNQV9JTlRFUlJVUFRTOworCXNjcmF0Y2ggPj49IDk7CisJZm9yIChudW0gPSAwOyBzY3JhdGNoOyBudW0rKykgeworCQlzdHJ1Y3QgbmV0MjI4MF9kbWFfcmVncwlfX2lvbWVtICpkbWE7CisKKwkJdG1wID0gMSA8PCBudW07CisJCWlmICgodG1wICYgc2NyYXRjaCkgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlzY3JhdGNoIF49IHRtcDsKKworCQllcCA9ICZkZXYtPmVwIFtudW0gKyAxXTsKKwkJZG1hID0gZXAtPmRtYTsKKworCQlpZiAoIWRtYSkKKwkJCWNvbnRpbnVlOworCisJCS8qIGNsZWFyIGVwJ3MgZG1hIHN0YXR1cyAqLworCQl0bXAgPSByZWFkbCAoJmRtYS0+ZG1hc3RhdCk7CisJCXdyaXRlbCAodG1wLCAmZG1hLT5kbWFzdGF0KTsKKworCQkvKiBjaGFpbmluZyBzaG91bGQgc3RvcCBvbiBhYm9ydCwgc2hvcnQgT1VUIGZyb20gZmlmbywKKwkJICogb3IgKHN0YXQwIGNvZGVwYXRoKSBzaG9ydCBPVVQgdHJhbnNmZXIuCisJCSAqLworCQlpZiAoIXVzZV9kbWFfY2hhaW5pbmcpIHsKKwkJCWlmICgodG1wICYgKDEgPDwgRE1BX1RSQU5TQUNUSU9OX0RPTkVfSU5URVJSVVBUKSkKKwkJCQkJPT0gMCkgeworCQkJCURFQlVHIChlcC0+ZGV2LCAiJXMgbm8geGFjdCBkb25lPyAlMDh4XG4iLAorCQkJCQllcC0+ZXAubmFtZSwgdG1wKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXN0b3BfZG1hIChlcC0+ZG1hKTsKKwkJfQorCisJCS8qIE9VVCB0cmFuc2ZlcnMgdGVybWluYXRlIHdoZW4gdGhlIGRhdGEgZnJvbSB0aGUKKwkJICogaG9zdCBpcyBpbiBvdXIgbWVtb3J5LiAgUHJvY2VzcyB3aGF0ZXZlcidzIGRvbmUuCisJCSAqIE9uIHRoaXMgcGF0aCwgd2Uga25vdyB0cmFuc2ZlcidzIGxhc3QgcGFja2V0IHdhc24ndAorCQkgKiBsZXNzIHRoYW4gcmVxLT5sZW5ndGguIE5BS19PVVRfUEFDS0VUUyBtYXkgYmUgc2V0LAorCQkgKiBvciB0aGUgRklGTyBtYXkgYWxyZWFkeSBiZSBob2xkaW5nIG5ldyBwYWNrZXRzLgorCQkgKgorCQkgKiBJTiB0cmFuc2ZlcnMgY2FuIGxpbmdlciBpbiB0aGUgRklGTyBmb3IgYSB2ZXJ5CisJCSAqIGxvbmcgdGltZSAuLi4gd2UgaWdub3JlIHRoYXQgZm9yIG5vdywgYWNjb3VudGluZworCQkgKiBwcmVjaXNlbHkgKGxpa2UgUElPIGRvZXMpIG5lZWRzIHBlci1wYWNrZXQgaXJxcworCQkgKi8KKwkJc2Nhbl9kbWFfY29tcGxldGlvbnMgKGVwKTsKKworCQkvKiBkaXNhYmxlIGRtYSBvbiBpbmFjdGl2ZSBxdWV1ZXM7IGVsc2UgbWF5YmUgcmVzdGFydCAqLworCQlpZiAobGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkpIHsKKwkJCWlmICh1c2VfZG1hX2NoYWluaW5nKQorCQkJCXN0b3BfZG1hIChlcC0+ZG1hKTsKKwkJfSBlbHNlIHsKKwkJCXRtcCA9IHJlYWRsICgmZG1hLT5kbWFjdGwpOworCQkJaWYgKCF1c2VfZG1hX2NoYWluaW5nCisJCQkJCXx8ICh0bXAgJiAoMSA8PCBETUFfRU5BQkxFKSkgPT0gMCkKKwkJCQlyZXN0YXJ0X2RtYSAoZXApOworCQkJZWxzZSBpZiAoZXAtPmlzX2luICYmIHVzZV9kbWFfY2hhaW5pbmcpIHsKKwkJCQlzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0CSpyZXE7CisJCQkJdTMyCQkJZG1hY291bnQ7CisKKwkJCQkvKiB0aGUgZGVzY3JpcHRvciBhdCB0aGUgaGVhZCBvZiB0aGUgY2hhaW4KKwkJCQkgKiBtYXkgc3RpbGwgaGF2ZSBWQUxJRF9CSVQgY2xlYXI7IHRoYXQncworCQkJCSAqIHVzZWQgdG8gdHJpZ2dlciBjaGFuZ2luZyBETUFfRklGT19WQUxJREFURQorCQkJCSAqIChhZmZlY3RzIGF1dG9tYWdpYyB6bHAgd3JpdGVzKS4KKwkJCQkgKi8KKwkJCQlyZXEgPSBsaXN0X2VudHJ5IChlcC0+cXVldWUubmV4dCwKKwkJCQkJCXN0cnVjdCBuZXQyMjgwX3JlcXVlc3QsIHF1ZXVlKTsKKwkJCQlkbWFjb3VudCA9IHJlcS0+dGQtPmRtYWNvdW50OworCQkJCWRtYWNvdW50ICY9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKAorCQkJCQkJKDEgPDwgVkFMSURfQklUKQorCQkJCQkJfCBETUFfQllURV9DT1VOVF9NQVNLKTsKKwkJCQlpZiAoZG1hY291bnQgJiYgKGRtYWNvdW50ICYgdmFsaWRfYml0KSA9PSAwKQorCQkJCQlyZXN0YXJ0X2RtYSAoZXApOworCQkJfQorCQl9CisJCWVwLT5pcnFzKys7CisJfQorCisJLyogTk9URTogIHRoZXJlIGFyZSBvdGhlciBQQ0kgZXJyb3JzIHdlIG1pZ2h0IHVzZWZ1bGx5IG5vdGljZS4KKwkgKiBpZiB0aGV5IGFwcGVhciB2ZXJ5IG9mdGVuLCBoZXJlJ3Mgd2hlcmUgdG8gdHJ5IHJlY292ZXJpbmcuCisJICovCisJaWYgKHN0YXQgJiBQQ0lfRVJST1JfSU5URVJSVVBUUykgeworCQlFUlJPUiAoZGV2LCAicGNpIGRtYSBlcnJvcjsgc3RhdCAlMDh4XG4iLCBzdGF0KTsKKwkJc3RhdCAmPSB+UENJX0VSUk9SX0lOVEVSUlVQVFM7CisJCS8qIHRoZXNlIGFyZSBmYXRhbCBlcnJvcnMsIGJ1dCAibWF5YmUiIHRoZXkgd29uJ3QKKwkJICogaGFwcGVuIGFnYWluIC4uLgorCQkgKi8KKwkJc3RvcF9hY3Rpdml0eSAoZGV2LCBkZXYtPmRyaXZlcik7CisJCWVwMF9zdGFydCAoZGV2KTsKKwkJc3RhdCA9IDA7CisJfQorCisJaWYgKHN0YXQpCisJCURFQlVHIChkZXYsICJ1bmhhbmRsZWQgaXJxc3RhdDEgJTA4eFxuIiwgc3RhdCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBuZXQyMjgwX2lycSAoaW50IGlycSwgdm9pZCAqX2Rldiwgc3RydWN0IHB0X3JlZ3MgKiByKQoreworCXN0cnVjdCBuZXQyMjgwCQkqZGV2ID0gX2RldjsKKworCXNwaW5fbG9jayAoJmRldi0+bG9jayk7CisKKwkvKiBoYW5kbGUgZGlzY29ubmVjdCwgZG1hLCBhbmQgbW9yZSAqLworCWhhbmRsZV9zdGF0MV9pcnFzIChkZXYsIHJlYWRsICgmZGV2LT5yZWdzLT5pcnFzdGF0MSkpOworCisJLyogY29udHJvbCByZXF1ZXN0cyBhbmQgUElPICovCisJaGFuZGxlX3N0YXQwX2lycXMgKGRldiwgcmVhZGwgKCZkZXYtPnJlZ3MtPmlycXN0YXQwKSk7CisKKwlzcGluX3VubG9jayAoJmRldi0+bG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIGdhZGdldF9yZWxlYXNlIChzdHJ1Y3QgZGV2aWNlICpfZGV2KQoreworCXN0cnVjdCBuZXQyMjgwCSpkZXYgPSBkZXZfZ2V0X2RydmRhdGEgKF9kZXYpOworCisJa2ZyZWUgKGRldik7Cit9CisKKy8qIHRlYXIgZG93biB0aGUgYmluZGluZyBiZXR3ZWVuIHRoaXMgZHJpdmVyIGFuZCB0aGUgcGNpIGRldmljZSAqLworCitzdGF0aWMgdm9pZCBuZXQyMjgwX3JlbW92ZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG5ldDIyODAJCSpkZXYgPSBwY2lfZ2V0X2RydmRhdGEgKHBkZXYpOworCisJLyogc3RhcnQgd2l0aCB0aGUgZHJpdmVyIGFib3ZlIHVzICovCisJaWYgKGRldi0+ZHJpdmVyKSB7CisJCS8qIHNob3VsZCBoYXZlIGJlZW4gZG9uZSBhbHJlYWR5IGJ5IGRyaXZlciBtb2RlbCBjb3JlICovCisJCVdBUk4gKGRldiwgInBjaSByZW1vdmUsIGRyaXZlciAnJXMnIGlzIHN0aWxsIHJlZ2lzdGVyZWRcbiIsCisJCQkJZGV2LT5kcml2ZXItPmRyaXZlci5uYW1lKTsKKwkJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAoZGV2LT5kcml2ZXIpOworCX0KKworCS8qIHRoZW4gY2xlYW4gdXAgdGhlIHJlc291cmNlcyB3ZSBhbGxvY2F0ZWQgZHVyaW5nIHByb2JlKCkgKi8KKwluZXQyMjgwX2xlZF9zaHV0ZG93biAoZGV2KTsKKwlpZiAoZGV2LT5yZXF1ZXN0cykgeworCQlpbnQJCWk7CisJCWZvciAoaSA9IDE7IGkgPCA1OyBpKyspIHsKKwkJCWlmICghZGV2LT5lcCBbaV0uZHVtbXkpCisJCQkJY29udGludWU7CisJCQlwY2lfcG9vbF9mcmVlIChkZXYtPnJlcXVlc3RzLCBkZXYtPmVwIFtpXS5kdW1teSwKKwkJCQkJZGV2LT5lcCBbaV0udGRfZG1hKTsKKwkJfQorCQlwY2lfcG9vbF9kZXN0cm95IChkZXYtPnJlcXVlc3RzKTsKKwl9CisJaWYgKGRldi0+Z290X2lycSkKKwkJZnJlZV9pcnEgKHBkZXYtPmlycSwgZGV2KTsKKwlpZiAoZGV2LT5yZWdzKQorCQlpb3VubWFwIChkZXYtPnJlZ3MpOworCWlmIChkZXYtPnJlZ2lvbikKKwkJcmVsZWFzZV9tZW1fcmVnaW9uIChwY2lfcmVzb3VyY2Vfc3RhcnQgKHBkZXYsIDApLAorCQkJCXBjaV9yZXNvdXJjZV9sZW4gKHBkZXYsIDApKTsKKwlpZiAoZGV2LT5lbmFibGVkKQorCQlwY2lfZGlzYWJsZV9kZXZpY2UgKHBkZXYpOworCWRldmljZV91bnJlZ2lzdGVyICgmZGV2LT5nYWRnZXQuZGV2KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUgKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9yZWdpc3RlcnMpOworCXBjaV9zZXRfZHJ2ZGF0YSAocGRldiwgTlVMTCk7CisKKwlJTkZPIChkZXYsICJ1bmJpbmRcbiIpOworCisJdGhlX2NvbnRyb2xsZXIgPSBOVUxMOworfQorCisvKiB3cmFwIHRoaXMgZHJpdmVyIGFyb3VuZCB0aGUgc3BlY2lmaWVkIGRldmljZSwgYnV0CisgKiBkb24ndCByZXNwb25kIG92ZXIgVVNCIHVudGlsIGEgZ2FkZ2V0IGRyaXZlciBiaW5kcyB0byB1cy4KKyAqLworCitzdGF0aWMgaW50IG5ldDIyODBfcHJvYmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IG5ldDIyODAJCSpkZXY7CisJdW5zaWduZWQgbG9uZwkJcmVzb3VyY2UsIGxlbjsKKwl2b2lkCQkJX19pb21lbSAqYmFzZSA9IE5VTEw7CisJaW50CQkJcmV0dmFsLCBpOworCWNoYXIJCQlidWYgWzhdLCAqYnVmcDsKKworCS8qIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBjb250cm9sbGVyIGluIGEgc3lzdGVtLAorCSAqIHVzYl9nYWRnZXRfZHJpdmVyX3tyZWdpc3Rlcix1bnJlZ2lzdGVyfSgpIG11c3QgY2hhbmdlLgorCSAqLworCWlmICh0aGVfY29udHJvbGxlcikgeworCQlkZXZfd2FybiAoJnBkZXYtPmRldiwgImlnbm9yaW5nXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBhbGxvYywgYW5kIHN0YXJ0IGluaXQgKi8KKwlkZXYgPSBrbWFsbG9jIChzaXplb2YgKmRldiwgU0xBQl9LRVJORUwpOworCWlmIChkZXYgPT0gTlVMTCl7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisKKwltZW1zZXQgKGRldiwgMCwgc2l6ZW9mICpkZXYpOworCXNwaW5fbG9ja19pbml0ICgmZGV2LT5sb2NrKTsKKwlkZXYtPnBkZXYgPSBwZGV2OworCWRldi0+Z2FkZ2V0Lm9wcyA9ICZuZXQyMjgwX29wczsKKwlkZXYtPmdhZGdldC5pc19kdWFsc3BlZWQgPSAxOworCisJLyogdGhlICJnYWRnZXQiIGFic3RyYWN0cy92aXJ0dWFsaXplcyB0aGUgY29udHJvbGxlciAqLworCXN0cmNweSAoZGV2LT5nYWRnZXQuZGV2LmJ1c19pZCwgImdhZGdldCIpOworCWRldi0+Z2FkZ2V0LmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWRldi0+Z2FkZ2V0LmRldi5kbWFfbWFzayA9IHBkZXYtPmRldi5kbWFfbWFzazsKKwlkZXYtPmdhZGdldC5kZXYucmVsZWFzZSA9IGdhZGdldF9yZWxlYXNlOworCWRldi0+Z2FkZ2V0Lm5hbWUgPSBkcml2ZXJfbmFtZTsKKworCS8qIG5vdyBhbGwgdGhlIHBjaSBnb29kaWVzIC4uLiAqLworCWlmIChwY2lfZW5hYmxlX2RldmljZSAocGRldikgPCAwKSB7CisgICAJICAgICAgICByZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGRvbmU7CisJfQorCWRldi0+ZW5hYmxlZCA9IDE7CisKKwkvKiBCQVIgMCBob2xkcyBhbGwgdGhlIHJlZ2lzdGVycworCSAqIEJBUiAxIGlzIDgwNTEgbWVtb3J5OyB1bnVzZWQgaGVyZSAobm90ZSBlcnJhdHVtIDAxMDMpCisJICogQkFSIDIgaXMgZmlmbyBtZW1vcnk7IHVudXNlZCBoZXJlCisJICovCisJcmVzb3VyY2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQgKHBkZXYsIDApOworCWxlbiA9IHBjaV9yZXNvdXJjZV9sZW4gKHBkZXYsIDApOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uIChyZXNvdXJjZSwgbGVuLCBkcml2ZXJfbmFtZSkpIHsKKwkJREVCVUcgKGRldiwgImNvbnRyb2xsZXIgYWxyZWFkeSBpbiB1c2VcbiIpOworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZG9uZTsKKwl9CisJZGV2LT5yZWdpb24gPSAxOworCisJYmFzZSA9IGlvcmVtYXBfbm9jYWNoZSAocmVzb3VyY2UsIGxlbik7CisJaWYgKGJhc2UgPT0gTlVMTCkgeworCQlERUJVRyAoZGV2LCAiY2FuJ3QgbWFwIG1lbW9yeVxuIik7CisJCXJldHZhbCA9IC1FRkFVTFQ7CisJCWdvdG8gZG9uZTsKKwl9CisJZGV2LT5yZWdzID0gKHN0cnVjdCBuZXQyMjgwX3JlZ3MgX19pb21lbSAqKSBiYXNlOworCWRldi0+dXNiID0gKHN0cnVjdCBuZXQyMjgwX3VzYl9yZWdzIF9faW9tZW0gKikgKGJhc2UgKyAweDAwODApOworCWRldi0+cGNpID0gKHN0cnVjdCBuZXQyMjgwX3BjaV9yZWdzIF9faW9tZW0gKikgKGJhc2UgKyAweDAxMDApOworCWRldi0+ZG1hID0gKHN0cnVjdCBuZXQyMjgwX2RtYV9yZWdzIF9faW9tZW0gKikgKGJhc2UgKyAweDAxODApOworCWRldi0+ZGVwID0gKHN0cnVjdCBuZXQyMjgwX2RlcF9yZWdzIF9faW9tZW0gKikgKGJhc2UgKyAweDAyMDApOworCWRldi0+ZXByZWdzID0gKHN0cnVjdCBuZXQyMjgwX2VwX3JlZ3MgX19pb21lbSAqKSAoYmFzZSArIDB4MDMwMCk7CisKKwkvKiBwdXQgaW50byBpbml0aWFsIGNvbmZpZywgbGluayB1cCBhbGwgZW5kcG9pbnRzICovCisJd3JpdGVsICgwLCAmZGV2LT51c2ItPnVzYmN0bCk7CisJdXNiX3Jlc2V0IChkZXYpOworCXVzYl9yZWluaXQgKGRldik7CisKKwkvKiBpcnEgc2V0dXAgYWZ0ZXIgb2xkIGhhcmR3YXJlIGlzIGNsZWFuZWQgdXAgKi8KKwlpZiAoIXBkZXYtPmlycSkgeworCQlFUlJPUiAoZGV2LCAiTm8gSVJRLiAgQ2hlY2sgUENJIHNldHVwIVxuIik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZG9uZTsKKwl9CisjaWZuZGVmIF9fc3BhcmNfXworCXNjbnByaW50ZiAoYnVmLCBzaXplb2YgYnVmLCAiJWQiLCBwZGV2LT5pcnEpOworCWJ1ZnAgPSBidWY7CisjZWxzZQorCWJ1ZnAgPSBfX2lycV9pdG9hKHBkZXYtPmlycSk7CisjZW5kaWYKKwlpZiAocmVxdWVzdF9pcnEgKHBkZXYtPmlycSwgbmV0MjI4MF9pcnEsIFNBX1NISVJRLCBkcml2ZXJfbmFtZSwgZGV2KQorCQkJIT0gMCkgeworCQlFUlJPUiAoZGV2LCAicmVxdWVzdCBpbnRlcnJ1cHQgJXMgZmFpbGVkXG4iLCBidWZwKTsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlnb3RvIGRvbmU7CisJfQorCWRldi0+Z290X2lycSA9IDE7CisKKwkvKiBETUEgc2V0dXAgKi8KKwkvKiBOT1RFOiAgd2Uga25vdyBvbmx5IHRoZSAzMiBMU0JzIG9mIGRtYSBhZGRyZXNzZXMgbWF5IGJlIG5vbnplcm8gKi8KKwlkZXYtPnJlcXVlc3RzID0gcGNpX3Bvb2xfY3JlYXRlICgicmVxdWVzdHMiLCBwZGV2LAorCQlzaXplb2YgKHN0cnVjdCBuZXQyMjgwX2RtYSksCisJCTAgLyogbm8gYWxpZ25tZW50IHJlcXVpcmVtZW50cyAqLywKKwkJMCAvKiBvciBwYWdlLWNyb3NzaW5nIGlzc3VlcyAqLyk7CisJaWYgKCFkZXYtPnJlcXVlc3RzKSB7CisJCURFQlVHIChkZXYsICJjYW4ndCBnZXQgcmVxdWVzdCBwb29sXG4iKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKwlmb3IgKGkgPSAxOyBpIDwgNTsgaSsrKSB7CisJCXN0cnVjdCBuZXQyMjgwX2RtYQkqdGQ7CisKKwkJdGQgPSBwY2lfcG9vbF9hbGxvYyAoZGV2LT5yZXF1ZXN0cywgR0ZQX0tFUk5FTCwKKwkJCQkmZGV2LT5lcCBbaV0udGRfZG1hKTsKKwkJaWYgKCF0ZCkgeworCQkJREVCVUcgKGRldiwgImNhbid0IGdldCBkdW1teSAlZFxuIiwgaSk7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJZ290byBkb25lOworCQl9CisJCXRkLT5kbWFjb3VudCA9IDA7CS8qIG5vdCBWQUxJRCAqLworCQl0ZC0+ZG1hYWRkciA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKERNQV9BRERSX0lOVkFMSUQpOworCQl0ZC0+ZG1hZGVzYyA9IHRkLT5kbWFhZGRyOworCQlkZXYtPmVwIFtpXS5kdW1teSA9IHRkOworCX0KKworCS8qIGVuYWJsZSBsb3dlci1vdmVyaGVhZCBwY2kgbWVtb3J5IGJ1cnN0cyBkdXJpbmcgRE1BICovCisJd3JpdGVsICggKDEgPDwgRE1BX01FTU9SWV9XUklURV9BTkRfSU5WQUxJREFURV9FTkFCTEUpCisJCQkvLyAyNTYgd3JpdGUgcmV0cmllcyBtYXkgbm90IGJlIGVub3VnaC4uLgorCQkJLy8gfCAoMSA8PCBQQ0lfUkVUUllfQUJPUlRfRU5BQkxFKQorCQkJfCAoMSA8PCBETUFfUkVBRF9NVUxUSVBMRV9FTkFCTEUpCisJCQl8ICgxIDw8IERNQV9SRUFEX0xJTkVfRU5BQkxFKQorCQkJLCAmZGV2LT5wY2ktPnBjaW1zdGN0bCk7CisJLyogZXJyYXR1bSAwMTE1IHNob3VsZG4ndCBhcHBlYXI6IExpbnV4IGluaXRzIFBDSV9MQVRFTkNZX1RJTUVSICovCisJcGNpX3NldF9tYXN0ZXIgKHBkZXYpOworCXBjaV9zZXRfbXdpIChwZGV2KTsKKworCS8qIC4uLiBhbHNvIGZsdXNoZXMgYW55IHBvc3RlZCBwY2kgd3JpdGVzICovCisJZGV2LT5jaGlwcmV2ID0gZ2V0X2lkeF9yZWcgKGRldi0+cmVncywgUkVHX0NISVBSRVYpICYgMHhmZmZmOworCisJLyogZG9uZSAqLworCXBjaV9zZXRfZHJ2ZGF0YSAocGRldiwgZGV2KTsKKwlJTkZPIChkZXYsICIlc1xuIiwgZHJpdmVyX2Rlc2MpOworCUlORk8gKGRldiwgImlycSAlcywgcGNpIG1lbSAlcCwgY2hpcCByZXYgJTA0eFxuIiwKKwkJCWJ1ZnAsIGJhc2UsIGRldi0+Y2hpcHJldik7CisJSU5GTyAoZGV2LCAidmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiOyBkbWEgJXNcbiIsCisJCQl1c2VfZG1hCisJCQkJPyAodXNlX2RtYV9jaGFpbmluZyA/ICJjaGFpbmluZyIgOiAiZW5hYmxlZCIpCisJCQkJOiAiZGlzYWJsZWQiKTsKKwl0aGVfY29udHJvbGxlciA9IGRldjsKKworCWRldmljZV9yZWdpc3RlciAoJmRldi0+Z2FkZ2V0LmRldik7CisJZGV2aWNlX2NyZWF0ZV9maWxlICgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfcmVnaXN0ZXJzKTsKKworCXJldHVybiAwOworCitkb25lOgorCWlmIChkZXYpCisJCW5ldDIyODBfcmVtb3ZlIChwZGV2KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfaWRzIFtdID0geyB7CisJLmNsYXNzID0gCSgoUENJX0NMQVNTX1NFUklBTF9VU0IgPDwgOCkgfCAweGZlKSwKKwkuY2xhc3NfbWFzayA9IAl+MCwKKwkudmVuZG9yID0JMHgxN2NjLAorCS5kZXZpY2UgPQkweDIyODAsCisJLnN1YnZlbmRvciA9CVBDSV9BTllfSUQsCisJLnN1YmRldmljZSA9CVBDSV9BTllfSUQsCisKK30sIHsgLyogZW5kOiBhbGwgemVyb2VzICovIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFIChwY2ksIHBjaV9pZHMpOworCisvKiBwY2kgZHJpdmVyIGdsdWU7IHRoaXMgaXMgYSAibmV3IHN0eWxlIiBQQ0kgZHJpdmVyIG1vZHVsZSAqLworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5ldDIyODBfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9CQkoY2hhciAqKSBkcml2ZXJfbmFtZSwKKwkuaWRfdGFibGUgPQlwY2lfaWRzLAorCisJLnByb2JlID0JbmV0MjI4MF9wcm9iZSwKKwkucmVtb3ZlID0JbmV0MjI4MF9yZW1vdmUsCisKKwkvKiBGSVhNRSBhZGQgcG93ZXIgbWFuYWdlbWVudCBzdXBwb3J0ICovCit9OworCitNT0RVTEVfREVTQ1JJUFRJT04gKERSSVZFUl9ERVNDKTsKK01PRFVMRV9BVVRIT1IgKCJEYXZpZCBCcm93bmVsbCIpOworTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdCAodm9pZCkKK3sKKwlpZiAoIXVzZV9kbWEpCisJCXVzZV9kbWFfY2hhaW5pbmcgPSAwOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyICgmbmV0MjI4MF9wY2lfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0IChpbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXAgKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyICgmbmV0MjI4MF9wY2lfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0IChjbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZjQ1MDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5oCkBAIC0wLDAgKzEsNzI4IEBACisvKgorICogTmV0Q2hpcCAyMjgwIGhpZ2gvZnVsbCBzcGVlZCBVU0IgZGV2aWNlIGNvbnRyb2xsZXIuCisgKiBVbmxpa2UgbWFueSBzdWNoIGNvbnRyb2xsZXJzLCB0aGlzIG9uZSB0YWxrcyBQQ0kuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBOZXRDaGlwIFRlY2hub2xvZ3ksIEluYy4gKGh0dHA6Ly93d3cubmV0Y2hpcC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgRGF2aWQgQnJvd25lbGwKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogTkVUMjI4MCBNRU1PUlkgTUFQUEVEIFJFR0lTVEVSUworICoKKyAqIFRoZSByZWdpc3RlciBsYXlvdXQgY2FtZSBmcm9tIHRoZSBjaGlwIGRvY3VtZW50YXRpb24sIGFuZCB0aGUgYml0CisgKiBudW1iZXIgZGVmaW5pdGlvbnMgd2VyZSBleHRyYWN0ZWQgZnJvbSBjaGlwIHNwZWNpZmljYXRpb24uCisgKgorICogVXNlIHRoZSBzaGlmdCBvcGVyYXRvciAoJzw8JykgdG8gYnVpbGQgYml0IG1hc2tzLCB3aXRoIHJlYWRsL3dyaXRlbAorICogdG8gYWNjZXNzIHRoZSByZWdpc3RlcnMgdGhyb3VnaCBQQ0kuCisgKi8KKworLyogbWFpbiByZWdpc3RlcnMsIEJBUjAgKyAweDAwMDAgKi8KK3N0cnVjdCBuZXQyMjgwX3JlZ3MgeworCS8vIG9mZnNldCAweDAwMDAKKwl1MzIJCWRldmluaXQ7CisjZGVmaW5lICAgICBMT0NBTF9DTE9DS19GUkVRVUVOQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgRk9SQ0VfUENJX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIFBDSV9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBQQ0lfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgRklGT19TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIENGR19TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBQQ0lfU09GVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgVVNCX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIE04MDUxX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQllZWN0bDsKKyNkZWZpbmUgICAgIEVFUFJPTV9BRERSRVNTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSAgICAgRUVQUk9NX0NISVBfU0VMRUNUX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lICAgICBFRVBST01fUFJFU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgICAgIEVFUFJPTV9WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSAgICAgRUVQUk9NX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lICAgICBFRVBST01fQ0hJUF9TRUxFQ1RfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgICAgIEVFUFJPTV9CWVRFX1JFQURfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSAgICAgRUVQUk9NX0JZVEVfV1JJVEVfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBFRVBST01fUkVBRF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgRUVQUk9NX1dSSVRFX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCWVlY2xrZnJlcTsKKwl1MzIJCV91bnVzZWQwOworCS8vIG9mZnNldCAweDAwMTAKKworCXUzMgkJcGNpaXJxZW5iMDsJCS8qIGludGVycnVwdCBQQ0kgbWFzdGVyIC4uLiAqLworI2RlZmluZSAgICAgU0VUVVBfUEFDS0VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIEVORFBPSU5UX0ZfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBFTkRQT0lOVF9FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgRU5EUE9JTlRfRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIEVORFBPSU5UX0NfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBFTkRQT0lOVF9CX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgRU5EUE9JTlRfQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIEVORFBPSU5UXzBfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlwY2lpcnFlbmIxOworI2RlZmluZSAgICAgUENJX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lICAgICBQT1dFUl9TVEFURV9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgICAgIFBDSV9BUkJJVEVSX1RJTUVPVVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAyNgorI2RlZmluZSAgICAgUENJX1BBUklUWV9FUlJPUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMjAKKyNkZWZpbmUgICAgIFBDSV9UQVJHRVRfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAxOQorI2RlZmluZSAgICAgUENJX1RBUkdFVF9BQk9SVF9BU1NFUlRFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgIDE4CisjZGVmaW5lICAgICBQQ0lfUkVUUllfQUJPUlRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfQ1lDTEVfRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgR1BJT19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lICAgICBETUFfRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgICAgIERNQV9DX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSAgICAgRE1BX0JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lICAgICBETUFfQV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSAgICAgRUVQUk9NX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgICAgIFZCVVNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBDT05UUk9MX1NUQVRVU19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgUkVTVU1FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIFNPRl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQljcHVfaXJxZW5iMDsJCS8qIC4uLiBvciBvbmJvYXJkIDgwNTEgKi8KKyNkZWZpbmUgICAgIFNFVFVQX1BBQ0tFVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBFTkRQT0lOVF9GX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgRU5EUE9JTlRfRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIEVORFBPSU5UX0RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBFTkRQT0lOVF9DX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgRU5EUE9JTlRfQl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIEVORFBPSU5UX0FfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBFTkRQT0lOVF8wX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJY3B1X2lycWVuYjE7CisjZGVmaW5lICAgICBDUFVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgICAgIFBPV0VSX1NUQVRFX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAyNworI2RlZmluZSAgICAgUENJX0FSQklURVJfVElNRU9VVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lICAgICBQQ0lfUEFSSVRZX0VSUk9SX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgICAgIFBDSV9JTlRBX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSAgICAgUENJX1BNRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzCisjZGVmaW5lICAgICBQQ0lfU0VSUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgICAgIFBDSV9QRVJSX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSAgICAgUENJX01BU1RFUl9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgIDIwCisjZGVmaW5lICAgICBQQ0lfVEFSR0VUX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMTkKKyNkZWZpbmUgICAgIFBDSV9SRVRSWV9BQk9SVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAxNworI2RlZmluZSAgICAgUENJX01BU1RFUl9DWUNMRV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBHUElPX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgICAgIERNQV9EX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgRE1BX0NfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBETUFfQl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIERNQV9BX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBFRVBST01fRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgVkJVU19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIENPTlRST0xfU1RBVFVTX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBST09UX1BPUlRfUkVTRVRfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9DSEFOR0VfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBSRVNVTUVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgU09GX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworCS8vIG9mZnNldCAweDAwMjAKKwl1MzIJCV91bnVzZWQxOworCXUzMgkJdXNiaXJxZW5iMTsKKyNkZWZpbmUgICAgIFVTQl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSAgICAgUE9XRVJfU1RBVEVfQ0hBTkdFX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgIDI3CisjZGVmaW5lICAgICBQQ0lfQVJCSVRFUl9USU1FT1VUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgICAgIFBDSV9QQVJJVFlfRVJST1JfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAyNQorI2RlZmluZSAgICAgUENJX0lOVEFfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lICAgICBQQ0lfUE1FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgICAgIFBDSV9TRVJSX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSAgICAgUENJX1BFUlJfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX0FCT1JUX1JFQ0VJVkVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgMjAKKyNkZWZpbmUgICAgIFBDSV9UQVJHRVRfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAxOQorI2RlZmluZSAgICAgUENJX1JFVFJZX0FCT1JUX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX0NZQ0xFX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIEdQSU9fSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSAgICAgRE1BX0RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBETUFfQ19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIERNQV9CX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgRE1BX0FfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIEVFUFJPTV9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBWQlVTX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgQ09OVFJPTF9TVEFUVVNfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIFJPT1RfUE9SVF9SRVNFVF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgU1VTUEVORF9SRVFVRVNUX0NIQU5HRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIFJFU1VNRV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBTT0ZfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJaXJxc3RhdDA7CisjZGVmaW5lICAgICBJTlRBX0FTU0VSVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgICAgIFNFVFVQX1BBQ0tFVF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBFTkRQT0lOVF9GX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgRU5EUE9JTlRfRV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIEVORFBPSU5UX0RfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBFTkRQT0lOVF9DX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgRU5EUE9JTlRfQl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIEVORFBPSU5UX0FfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBFTkRQT0lOVF8wX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJaXJxc3RhdDE7CisjZGVmaW5lICAgICBQT1dFUl9TVEFURV9DSEFOR0VfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgICAgIFBDSV9BUkJJVEVSX1RJTUVPVVRfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAyNgorI2RlZmluZSAgICAgUENJX1BBUklUWV9FUlJPUl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lICAgICBQQ0lfSU5UQV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgICAgIFBDSV9QTUVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMworI2RlZmluZSAgICAgUENJX1NFUlJfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lICAgICBQQ0lfUEVSUl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfQUJPUlRfUkVDRUlWRURfSU5URVJSVVBUICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSAgICAgUENJX1RBUkdFVF9BQk9SVF9SRUNFSVZFRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgIDE5CisjZGVmaW5lICAgICBQQ0lfUkVUUllfQUJPUlRfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfQ1lDTEVfRE9ORV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgR1BJT19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lICAgICBETUFfRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgICAgIERNQV9DX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSAgICAgRE1BX0JfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lICAgICBETUFfQV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSAgICAgRUVQUk9NX0RPTkVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgICAgIFZCVVNfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBDT05UUk9MX1NUQVRVU19JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSAgICAgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIFNVU1BFTkRfUkVRVUVTVF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBTVVNQRU5EX1JFUVVFU1RfQ0hBTkdFX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgUkVTVU1FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIFNPRl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJLy8gb2Zmc2V0IDB4MDAzMAorCXUzMgkJaWR4YWRkcjsKKwl1MzIJCWlkeGRhdGE7CisJdTMyCQlmaWZvY3RsOworI2RlZmluZSAgICAgUENJX0JBU0UyX1JBTkdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBJR05PUkVfRklGT19BVkFJTEFCSUxJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgUENJX0JBU0UyX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIEZJRk9fQ09ORklHVVJBVElPTl9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlfdW51c2VkMjsKKwkvLyBvZmZzZXQgMHgwMDQwCisJdTMyCQltZW1hZGRyOworI2RlZmluZSAgICAgU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lICAgICBESVJFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcKKyNkZWZpbmUgICAgIEZJRk9fRElBR05PU1RJQ19TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSAgICAgTUVNT1JZX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCW1lbWRhdGEwOworCXUzMgkJbWVtZGF0YTE7CisJdTMyCQlfdW51c2VkMzsKKwkvLyBvZmZzZXQgMHgwMDUwCisJdTMyCQlncGlvY3RsOworI2RlZmluZSAgICAgR1BJTzNfTEVEX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBHUElPM19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIEdQSU8yX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgR1BJTzFfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIEdQSU8wX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBHUElPM19PVVRQVVRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgR1BJTzJfT1VUUFVUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIEdQSU8xX09VVFBVVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lICAgICBHUElPMF9PVVRQVVRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgR1BJTzNfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIEdQSU8yX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBHUElPMV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgR1BJTzBfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCWdwaW9zdGF0OworI2RlZmluZSAgICAgR1BJTzNfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIEdQSU8yX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBHUElPMV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgR1BJTzBfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiB1c2IgY29udHJvbCwgQkFSMCArIDB4MDA4MCAqLworc3RydWN0IG5ldDIyODBfdXNiX3JlZ3MgeworCS8vIG9mZnNldCAweDAwODAKKwl1MzIJCXN0ZHJzcDsKKyNkZWZpbmUgICAgIFNUQUxMX1VOU1VQUE9SVEVEX1JFUVVFU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAzMQorI2RlZmluZSAgICAgU0VUX1RFU1RfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBHRVRfT1RIRVJfU1BFRURfQ09ORklHVVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAgMTUKKyNkZWZpbmUgICAgIEdFVF9ERVZJQ0VfUVVBTElGSUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSAgICAgU0VUX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lICAgICBFTkRQT0lOVF9TRVRfQ0xFQVJfSEFMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgICAgIERFVklDRV9TRVRfQ0xFQVJfREVWSUNFX1JFTU9URV9XQUtFVVAgICAgICAgICAgICAgICAxMQorI2RlZmluZSAgICAgR0VUX1NUUklOR19ERVNDUklQVE9SXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lICAgICBHRVRfU1RSSU5HX0RFU0NSSVBUT1JfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSAgICAgR0VUX1NUUklOR19ERVNDUklQVE9SXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgICAgIEdFVF9TRVRfSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBHRVRfU0VUX0NPTkZJR1VSQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgR0VUX0NPTkZJR1VSQVRJT05fREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIEdFVF9ERVZJQ0VfREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBHRVRfRU5EUE9JTlRfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgR0VUX0lOVEVSRkFDRV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIEdFVF9ERVZJQ0VfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlwcm9kdmVuZGlkOworI2RlZmluZSAgICAgUFJPRFVDVF9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBWRU5ET1JfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJcmVsbnVtOworCXUzMgkJdXNiY3RsOworI2RlZmluZSAgICAgU0VSSUFMX05VTUJFUl9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBQUk9EVUNUX0lEX1NUUklOR19FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgICAgIFZFTkRPUl9JRF9TVFJJTkdfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSAgICAgVVNCX1JPT1RfUE9SVF9XQUtFVVBfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBWQlVTX1BJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIFRJTUVEX0RJU0NPTk5FQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBTVVNQRU5EX0lNTUVESUFURUxZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgU0VMRl9QT1dFUkVEX1VTQl9ERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIFJFTU9URV9XQUtFVVBfU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lICAgICBQTUVfUE9MQVJJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgVVNCX0RFVEVDVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIFBNRV9XQUtFVVBfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBERVZJQ0VfUkVNT1RFX1dBS0VVUF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgU0VMRl9QT1dFUkVEX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwkvLyBvZmZzZXQgMHgwMDkwCisJdTMyCQl1c2JzdGF0OworI2RlZmluZSAgICAgSElHSF9TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIEZVTExfU1BFRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBHRU5FUkFURV9SRVNVTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgR0VORVJBVEVfREVWSUNFX1JFTU9URV9XQUtFVVAgICAgICAgICAgICAgICAgICAgICAgIDQKKwl1MzIJCXhjdnJkaWFnOworI2RlZmluZSAgICAgRk9SQ0VfSElHSF9TUEVFRF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lICAgICBGT1JDRV9GVUxMX1NQRUVEX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgICAgIFVTQl9URVNUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSAgICAgTElORV9TVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lICAgICBUUkFOU0NFSVZFUl9PUEVSQVRJT05fTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgVFJBTlNDRUlWRVJfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIFRFUk1JTkFUSU9OX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlzZXR1cDAxMjM7CisJdTMyCQlzZXR1cDQ1Njc7CisJLy8gb2Zmc2V0IDB4MDA5MAorCXUzMgkJX3VudXNlZDA7CisJdTMyCQlvdXJhZGRyOworI2RlZmluZSAgICAgRk9SQ0VfSU1NRURJQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgICAgIE9VUl9VU0JfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlvdXJjb25maWc7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogcGNpIGNvbnRyb2wsIEJBUjAgKyAweDAxMDAgKi8KK3N0cnVjdCBuZXQyMjgwX3BjaV9yZWdzIHsKKwkvLyBvZmZzZXQgMHgwMTAwCisJdTMyCQkgcGNpbXN0Y3RsOworI2RlZmluZSAgICAgUENJX0FSQklURVJfUEFSS19TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lICAgICBQQ0lfTVVMVEkgTEVWRUxfQVJCSVRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgICAgIFBDSV9SRVRSWV9BQk9SVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSAgICAgRE1BX01FTU9SWV9XUklURV9BTkRfSU5WQUxJREFURV9FTkFCTEUgICAgICAgICAgICAgIDEwCisjZGVmaW5lICAgICBETUFfUkVBRF9NVUxUSVBMRV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSAgICAgRE1BX1JFQURfTElORV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgICAgIFBDSV9NQVNURVJfQ09NTUFORF9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICAgICAgTUVNX1JFQURfT1JfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgICAgICAgICBJT19SRUFEX09SX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgICAgIENGR19SRUFEX09SX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSAgICAgUENJX01BU1RFUl9SRUFEX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgICAgICBQQ0lfTUFTVEVSX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSAgICAgICAgIFBDSV9NQVNURVJfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBQQ0lfTUFTVEVSX0JZVEVfV1JJVEVfRU5BQkxFUyAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJIHBjaW1zdGFkZHI7CisJdTMyCQkgcGNpbXN0ZGF0YTsKKwl1MzIJCSBwY2ltc3RzdGF0OworI2RlZmluZSAgICAgUENJX0FSQklURVJfQ0xFQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgIFBDSV9FWFRFUk5BTF9BUkJJVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBQQ0lfSE9TVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIGRtYSBjb250cm9sLCBCQVIwICsgMHgwMTgwIC4uLiBhcnJheSBvZiBmb3VyIHN0cnVjdHMgbGlrZSB0aGlzLAorICogZm9yIGNoYW5uZWxzIDAuLjMuICBzZWUgYWxzbyBzdHJ1Y3QgbmV0MjI4MF9kbWE6ICBkZXNjcmlwdG9yCisgKiB0aGF0IGNhbiBiZSBsb2FkZWQgaW50byBzb21lIG9mIHRoZXNlIHJlZ2lzdGVycy4KKyAqLworc3RydWN0IG5ldDIyODBfZG1hX3JlZ3MgewkvKiBbMTEuN10gKi8KKwkvLyBvZmZzZXQgMHgwMTgwLCAweDAxYTAsIDB4MDFjMCwgMHgwMWUwLCAKKwl1MzIJCWRtYWN0bDsKKyNkZWZpbmUgICAgIERNQV9TQ0FUVEVSX0dBVEhFUl9ET05FX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAyNQorI2RlZmluZSAgICAgRE1BX0NMRUFSX0NPVU5UX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lICAgICBERVNDUklQVE9SX1BPTExJTkdfUkFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkKKyNkZWZpbmUgICAgICAgICBQT0xMX0NPTlRJTlVPVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSAgICAgICAgIFBPTExfMV9VU0VDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICAgICAgUE9MTF8xMDBfVVNFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgICAgICBQT0xMXzFfTVNFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSAgICAgRE1BX1ZBTElEX0JJVF9QT0xMSU5HX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lICAgICBETUFfVkFMSURfQklUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgICAgIERNQV9TQ0FUVEVSX0dBVEhFUl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgRE1BX09VVF9BVVRPX1NUQVJUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgICAgIERNQV9QUkVFTVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICBETUFfRklGT19WQUxJREFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgRE1BX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgICAgIERNQV9BRERSRVNTX0hPTEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlkbWFzdGF0OworI2RlZmluZSAgICAgRE1BX1NDQVRURVJfR0FUSEVSX0RPTkVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgIDI1CisjZGVmaW5lICAgICBETUFfVFJBTlNBQ1RJT05fRE9ORV9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgICAgIERNQV9BQk9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBETUFfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJX3VudXNlZDAgWzJdOworCS8vIG9mZnNldCAweDAxOTAsIDB4MDFiMCwgMHgwMWQwLCAweDAxZjAsIAorCXUzMgkJZG1hY291bnQ7CisjZGVmaW5lICAgICBWQUxJRF9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgICAgIERNQV9ESVJFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSAgICAgRE1BX0RPTkVfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lICAgICBFTkRfT0ZfQ0hBSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgICAgICAgICBETUFfQllURV9DT1VOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgxPDwyNCktMSkKKyNkZWZpbmUgICAgIERNQV9CWVRFX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisJdTMyCQlkbWFhZGRyOworCXUzMgkJZG1hZGVzYzsKKwl1MzIJCV91bnVzZWQxOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIGRlZGljYXRlZCBlbmRwb2ludCByZWdpc3RlcnMsIEJBUjAgKyAweDAyMDAgKi8KKworc3RydWN0IG5ldDIyODBfZGVwX3JlZ3MgewkvKiBbMTEuOF0gKi8KKwkvLyBvZmZzZXQgMHgwMjAwLCAweDAyMTAsIDB4MjIwLCAweDIzMCwgMHgyNDAKKwl1MzIJCWRlcF9jZmc7CisJLy8gb2Zmc2V0IDB4MDIwNCwgMHgwMjE0LCAweDIyNCwgMHgyMzQsIDB4MjQ0CisJdTMyCQlkZXBfcnNwOworCXUzMgkJX3VudXNlZCBbMl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogY29uZmlndXJhYmxlIGVuZHBvaW50IHJlZ2lzdGVycywgQkFSMCArIDB4MDMwMCAuLi4gYXJyYXkgb2Ygc2V2ZW4gc3RydWN0cworICogbGlrZSB0aGlzLCBmb3IgZXAwIHRoZW4gdGhlIGNvbmZpZ3VyYWJsZSBlbmRwb2ludHMgQS4uRgorICogZXAwIHJlc2VydmVkIGZvciBjb250cm9sOyBFIGFuZCBGIGhhdmUgb25seSA2NCBieXRlcyBvZiBmaWZvCisgKi8KK3N0cnVjdCBuZXQyMjgwX2VwX3JlZ3MgewkvKiBbMTEuOV0gKi8KKwkvLyBvZmZzZXQgMHgwMzAwLCAweDAzMjAsIDB4MDM0MCwgMHgwMzYwLCAweDAzODAsIDB4MDNhMCwgMHgwM2MwCisJdTMyCQllcF9jZmc7CisjZGVmaW5lICAgICBFTkRQT0lOVF9CWVRFX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgICAgIEVORFBPSU5UX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgRU5EUE9JTlRfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgICAgIEVORFBPSU5UX0RJUkVDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lICAgICBFTkRQT0lOVF9OVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCXUzMgkJZXBfcnNwOworI2RlZmluZSAgICAgU0VUX05BS19PVVRfUEFDS0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lICAgICBTRVRfRVBfSElERV9TVEFUVVNfUEhBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgICAgIFNFVF9FUF9GT1JDRV9DUkNfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSAgICAgU0VUX0lOVEVSUlVQVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lICAgICBTRVRfQ09OVFJPTF9TVEFUVVNfUEhBU0VfSEFORFNIQUtFICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgICAgIFNFVF9OQUtfT1VUX1BBQ0tFVFNfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSAgICAgU0VUX0VORFBPSU5UX1RPR0dMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgICAgIFNFVF9FTkRQT0lOVF9IQUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lICAgICBDTEVBUl9OQUtfT1VUX1BBQ0tFVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSAgICAgQ0xFQVJfRVBfSElERV9TVEFUVVNfUEhBU0UgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIENMRUFSX0VQX0ZPUkNFX0NSQ19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lICAgICBDTEVBUl9JTlRFUlJVUFRfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgQ0xFQVJfQ09OVFJPTF9TVEFUVVNfUEhBU0VfSEFORFNIQUtFICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIENMRUFSX05BS19PVVRfUEFDS0VUU19NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBDTEVBUl9FTkRQT0lOVF9UT0dHTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgQ0xFQVJfRU5EUE9JTlRfSEFMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCWVwX2lycWVuYjsKKyNkZWZpbmUgICAgIFNIT1JUX1BBQ0tFVF9PVVRfRE9ORV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICA2CisjZGVmaW5lICAgICBTSE9SVF9QQUNLRVRfVFJBTlNGRVJSRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgNQorI2RlZmluZSAgICAgREFUQV9QQUNLRVRfUkVDRUlWRURfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIERBVEFfUEFDS0VUX1RSQU5TTUlUVEVEX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAyCisjZGVmaW5lICAgICBEQVRBX09VVF9QSU5HX1RPS0VOX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgREFUQV9JTl9UT0tFTl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDAKKwl1MzIJCWVwX3N0YXQ7CisjZGVmaW5lICAgICBGSUZPX1ZBTElEX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgICAgIEhJR0hfQkFORFdJRFRIX09VVF9UUkFOU0FDVElPTl9QSUQgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSAgICAgVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lICAgICBVU0JfU1RBTExfU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgICAgIFVTQl9JTl9OQUtfU0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOQorI2RlZmluZSAgICAgVVNCX0lOX0FDS19SQ1ZEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lICAgICBVU0JfT1VUX1BJTkdfTkFLX1NFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgICAgIFVTQl9PVVRfQUNLX1NFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgRklGT19PVkVSRkxPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lICAgICBGSUZPX1VOREVSRkxPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgICAgIEZJRk9fRlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSAgICAgRklGT19FTVBUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lICAgICBGSUZPX0ZMVVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSAgICAgU0hPUlRfUEFDS0VUX09VVF9ET05FX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgICAgIFNIT1JUX1BBQ0tFVF9UUkFOU0ZFUlJFRF9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lICAgICBOQUtfT1VUX1BBQ0tFVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSAgICAgREFUQV9QQUNLRVRfUkVDRUlWRURfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgICAgIERBVEFfUEFDS0VUX1RSQU5TTUlUVEVEX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lICAgICBEQVRBX09VVF9QSU5HX1RPS0VOX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgREFUQV9JTl9UT0tFTl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKwkvLyBvZmZzZXQgMHgwMzEwLCAweDAzMzAsIDB4MDM1MCwgMHgwMzcwLCAweDAzOTAsIDB4MDNiMCwgMHgwM2QwCisJdTMyCQllcF9hdmFpbDsKKwl1MzIJCWVwX2RhdGE7CisJdTMyCQlfdW51c2VkMCBbMl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmCV9fS0VSTkVMX18KKworLyogaW5kZXhlZCByZWdpc3RlcnMgWzExLjEwXSBhcmUgYWNjZXNzZWQgaW5kaXJlY3RseQorICogY2FsbGVyIG11c3Qgb3duIHRoZSBkZXZpY2UgbG9jay4KKyAqLworCitzdGF0aWMgaW5saW5lIHUzMgorZ2V0X2lkeF9yZWcgKHN0cnVjdCBuZXQyMjgwX3JlZ3MgX19pb21lbSAqcmVncywgdTMyIGluZGV4KQoreworCXdyaXRlbCAoaW5kZXgsICZyZWdzLT5pZHhhZGRyKTsKKwkvKiBOT1RFOiAgc3luY2hzIGRldmljZS9jcHUgbWVtb3J5IHZpZXdzICovCisJcmV0dXJuIHJlYWRsICgmcmVncy0+aWR4ZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2V0X2lkeF9yZWcgKHN0cnVjdCBuZXQyMjgwX3JlZ3MgX19pb21lbSAqcmVncywgdTMyIGluZGV4LCB1MzIgdmFsdWUpCit7CisJd3JpdGVsIChpbmRleCwgJnJlZ3MtPmlkeGFkZHIpOworCXdyaXRlbCAodmFsdWUsICZyZWdzLT5pZHhkYXRhKTsKKwkvKiBwb3N0ZWQsIG1heSBub3QgYmUgdmlzaWJsZSB5ZXQgKi8KK30KKworI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KKworCisjZGVmaW5lIFJFR19ESUFHCQkweDAKKyNkZWZpbmUgICAgIFJFVFJZX0NPVU5URVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSAgICAgRk9SQ0VfUENJX1NFUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lICAgICBGT1JDRV9QQ0lfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgICAgIEZPUkNFX1VTQl9JTlRFUlJVUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lICAgICBGT1JDRV9DUFVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSAgICAgSUxMRUdBTF9CWVRFX0VOQUJMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgICAgIEZBU1RfVElNRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lICAgICBGT1JDRV9SRUNFSVZFX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSAgICAgRk9SQ0VfVFJBTlNNSVRfQ1JDX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUkVHX0ZSQU1FCQkweDAyCS8qIGZyb20gbGFzdCBzb2YgKi8KKyNkZWZpbmUgUkVHX0NISVBSRVYJCTB4MDMJLyogaW4gYmNkICovCisjZGVmaW5lCVJFR19IU19OQUtfUkFURQkJMHgwYQkvKiBOQUsgcGVyIE4gdWZyYW1lcyAqLworCisjZGVmaW5lCUNISVBSRVZfMQkweDAxMDAKKyNkZWZpbmUJQ0hJUFJFVl8xQQkweDAxMTAKKworI2lmZGVmCV9fS0VSTkVMX18KKworLyogZXAgYS1mIGhpZ2hzcGVlZCBhbmQgZnVsbHNwZWVkIG1heHBhY2tldCwgYWRkcmVzc2VzCisgKiBjb21wdXRlZCBmcm9tIGVwLT5udW0KKyAqLworI2RlZmluZSBSRUdfRVBfTUFYUEtUKGRldixudW0pICgoKG51bSkgKyAxKSAqIDB4MTAgKyBcCisJCSgoKGRldiktPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgPyAwIDogMSkpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFs4LjNdIGZvciBzY2F0dGVyL2dhdGhlciBpL28KKyAqIHVzZSBzdHJ1Y3QgbmV0MjI4MF9kbWFfcmVncyBiaXRmaWVsZHMKKyAqLworc3RydWN0IG5ldDIyODBfZG1hIHsKKwlfX2xlMzIJCWRtYWNvdW50OworCV9fbGUzMgkJZG1hYWRkcjsJCS8qIHRoZSBidWZmZXIgKi8KKwlfX2xlMzIJCWRtYWRlc2M7CQkvKiBuZXh0IGRtYSBkZXNjcmlwdG9yICovCisJX19sZTMyCQlfcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgxNikpKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRFJJVkVSIERBVEEgU1RSVUNUVVJFUyBhbmQgVVRJTElUSUVTICovCisKK3N0cnVjdCBuZXQyMjgwX2VwIHsKKwlzdHJ1Y3QgdXNiX2VwCQkJCWVwOworCXN0cnVjdCBuZXQyMjgwX2VwX3JlZ3MJCQlfX2lvbWVtICpyZWdzOworCXN0cnVjdCBuZXQyMjgwX2RtYV9yZWdzCQkJX19pb21lbSAqZG1hOworCXN0cnVjdCBuZXQyMjgwX2RtYQkJCSpkdW1teTsKKwlkbWFfYWRkcl90CQkJCXRkX2RtYTsJLyogb2YgZHVtbXkgKi8KKwlzdHJ1Y3QgbmV0MjI4MAkJCQkqZGV2OworCXVuc2lnbmVkIGxvbmcJCQkJaXJxczsKKworCS8qIGFuYWxvZ291cyB0byBhIGhvc3Qtc2lkZSBxaCAqLworCXN0cnVjdCBsaXN0X2hlYWQJCQlxdWV1ZTsKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmRlc2M7CisJdW5zaWduZWQJCQkJbnVtIDogOCwKKwkJCQkJCWZpZm9fc2l6ZSA6IDEyLAorCQkJCQkJaW5fZmlmb192YWxpZGF0ZSA6IDEsCisJCQkJCQlvdXRfb3ZlcmZsb3cgOiAxLAorCQkJCQkJc3RvcHBlZCA6IDEsCisJCQkJCQlpc19pbiA6IDEsCisJCQkJCQlpc19pc28gOiAxOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGFsbG93X3N0YXR1cyAoc3RydWN0IG5ldDIyODBfZXAgKmVwKQoreworCS8qIGVwMCBvbmx5ICovCisJd3JpdGVsICggICgxIDw8IENMRUFSX0NPTlRST0xfU1RBVFVTX1BIQVNFX0hBTkRTSEFLRSkKKwkJfCAoMSA8PCBDTEVBUl9OQUtfT1VUX1BBQ0tFVFMpCisJCXwgKDEgPDwgQ0xFQVJfTkFLX09VVF9QQUNLRVRTX01PREUpCisJCSwgJmVwLT5yZWdzLT5lcF9yc3ApOworCWVwLT5zdG9wcGVkID0gMTsKK30KKworLyogY291bnQgKDw9IDQpIGJ5dGVzIGluIHRoZSBuZXh0IGZpZm8gd3JpdGUgd2lsbCBiZSB2YWxpZCAqLworc3RhdGljIGlubGluZSB2b2lkIHNldF9maWZvX2J5dGVjb3VudCAoc3RydWN0IG5ldDIyODBfZXAgKmVwLCB1bnNpZ25lZCBjb3VudCkKK3sKKwl3cml0ZWIgKGNvdW50LCAyICsgKHU4IF9faW9tZW0gKikgJmVwLT5yZWdzLT5lcF9jZmcpOworfQorCitzdHJ1Y3QgbmV0MjI4MF9yZXF1ZXN0IHsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJCXJlcTsKKwlzdHJ1Y3QgbmV0MjI4MF9kbWEJCSp0ZDsKKwlkbWFfYWRkcl90CQkJdGRfZG1hOworCXN0cnVjdCBsaXN0X2hlYWQJCXF1ZXVlOworCXVuc2lnbmVkCQkJbWFwcGVkIDogMSwKKwkJCQkJdmFsaWQgOiAxOworfTsKKworc3RydWN0IG5ldDIyODAgeworCS8qIGVhY2ggcGNpIGRldmljZSBwcm92aWRlcyBvbmUgZ2FkZ2V0LCBzZXZlcmFsIGVuZHBvaW50cyAqLworCXN0cnVjdCB1c2JfZ2FkZ2V0CQlnYWRnZXQ7CisJc3BpbmxvY2tfdAkJCWxvY2s7CisJc3RydWN0IG5ldDIyODBfZXAJCWVwIFs3XTsKKwlzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgCSpkcml2ZXI7CisJdW5zaWduZWQJCQllbmFibGVkIDogMSwKKwkJCQkJcHJvdG9jb2xfc3RhbGwgOiAxLAorCQkJCQlzb2Z0Y29ubmVjdCA6IDEsCisJCQkJCWdvdF9pcnEgOiAxLAorCQkJCQlyZWdpb24gOiAxOworCXUxNgkJCQljaGlwcmV2OworCisJLyogcGNpIHN0YXRlIHVzZWQgdG8gYWNjZXNzIHRob3NlIGVuZHBvaW50cyAqLworCXN0cnVjdCBwY2lfZGV2CQkJKnBkZXY7CisJc3RydWN0IG5ldDIyODBfcmVncwkJX19pb21lbSAqcmVnczsKKwlzdHJ1Y3QgbmV0MjI4MF91c2JfcmVncwkJX19pb21lbSAqdXNiOworCXN0cnVjdCBuZXQyMjgwX3BjaV9yZWdzCQlfX2lvbWVtICpwY2k7CisJc3RydWN0IG5ldDIyODBfZG1hX3JlZ3MJCV9faW9tZW0gKmRtYTsKKwlzdHJ1Y3QgbmV0MjI4MF9kZXBfcmVncwkJX19pb21lbSAqZGVwOworCXN0cnVjdCBuZXQyMjgwX2VwX3JlZ3MJCV9faW9tZW0gKmVwcmVnczsKKworCXN0cnVjdCBwY2lfcG9vbAkJCSpyZXF1ZXN0czsKKwkvLyBzdGF0aXN0aWNzLi4uCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2hhbHQgKHN0cnVjdCBuZXQyMjgwX2VwICplcCkKK3sKKwkvKiBlcDAgYW5kIGJ1bGsvaW50ciBlbmRwb2ludHMgKi8KKwl3cml0ZWwgKCAgKDEgPDwgQ0xFQVJfQ09OVFJPTF9TVEFUVVNfUEhBU0VfSEFORFNIQUtFKQorCQkgICAgLyogc2V0IE5BS19PVVQgZm9yIGVycmF0dW0gMDExNCAqLworCQl8ICgoZXAtPmRldi0+Y2hpcHJldiA9PSBDSElQUkVWXzEpIDw8IFNFVF9OQUtfT1VUX1BBQ0tFVFMpCisJCXwgKDEgPDwgU0VUX0VORFBPSU5UX0hBTFQpCisJCSwgJmVwLT5yZWdzLT5lcF9yc3ApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfaGFsdCAoc3RydWN0IG5ldDIyODBfZXAgKmVwKQoreworCS8qIGVwMCBhbmQgYnVsay9pbnRyIGVuZHBvaW50cyAqLworCXdyaXRlbCAoICAoMSA8PCBDTEVBUl9FTkRQT0lOVF9IQUxUKQorCQl8ICgxIDw8IENMRUFSX0VORFBPSU5UX1RPR0dMRSkKKwkJICAgIC8qIHVubGVzcyB0aGUgZ2FkZ2V0IGRyaXZlciBsZWZ0IGEgc2hvcnQgcGFja2V0IGluIHRoZQorCQkgICAgICogZmlmbywgdGhpcyByZXZlcnNlcyB0aGUgZXJyYXR1bSAwMTE0IHdvcmthcm91bmQuCisJCSAgICAgKi8KKwkJfCAoKGVwLT5kZXYtPmNoaXByZXYgPT0gQ0hJUFJFVl8xKSA8PCBDTEVBUl9OQUtfT1VUX1BBQ0tFVFMpCisJCSwgJmVwLT5yZWdzLT5lcF9yc3ApOworfQorCisjaWZkZWYgVVNFX1JES19MRURTCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXQyMjgwX2xlZF9pbml0IChzdHJ1Y3QgbmV0MjI4MCAqZGV2KQoreworCS8qIExFRDMgKGdyZWVuKSBpcyBvbiBkdXJpbmcgVVNCIGFjdGl2aXR5LiBub3RlIGVycmF0dW0gMDExMy4gKi8KKwl3cml0ZWwgKCgxIDw8IEdQSU8zX0xFRF9TRUxFQ1QpCisJCXwgKDEgPDwgR1BJTzNfT1VUUFVUX0VOQUJMRSkKKwkJfCAoMSA8PCBHUElPMl9PVVRQVVRfRU5BQkxFKQorCQl8ICgxIDw8IEdQSU8xX09VVFBVVF9FTkFCTEUpCisJCXwgKDEgPDwgR1BJTzBfT1VUUFVUX0VOQUJMRSkKKwkJLCAmZGV2LT5yZWdzLT5ncGlvY3RsKTsKK30KKworLyogaW5kaWNhdGUgc3BlZWQgd2l0aCBiaS1jb2xvciBMRUQgMC8xICovCitzdGF0aWMgaW5saW5lCit2b2lkIG5ldDIyODBfbGVkX3NwZWVkIChzdHJ1Y3QgbmV0MjI4MCAqZGV2LCBlbnVtIHVzYl9kZXZpY2Vfc3BlZWQgc3BlZWQpCit7CisJdTMyCXZhbCA9IHJlYWRsICgmZGV2LT5yZWdzLT5ncGlvY3RsKTsKKwlzd2l0Y2ggKHNwZWVkKSB7CisJY2FzZSBVU0JfU1BFRURfSElHSDoJCS8qIGdyZWVuICovCisJCXZhbCAmPSB+KDEgPDwgR1BJTzBfREFUQSk7CisJCXZhbCB8PSAoMSA8PCBHUElPMV9EQVRBKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfRlVMTDoJCS8qIHJlZCAqLworCQl2YWwgJj0gfigxIDw8IEdQSU8xX0RBVEEpOworCQl2YWwgfD0gKDEgPDwgR1BJTzBfREFUQSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CQkJLyogKG9mZi9ibGFjaykgKi8KKwkJdmFsICY9IH4oKDEgPDwgR1BJTzFfREFUQSkgfCAoMSA8PCBHUElPMF9EQVRBKSk7CisJCWJyZWFrOworCX0KKwl3cml0ZWwgKHZhbCwgJmRldi0+cmVncy0+Z3Bpb2N0bCk7Cit9CisKKy8qIGluZGljYXRlIHBvd2VyIHdpdGggTEVEIDIgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXQyMjgwX2xlZF9hY3RpdmUgKHN0cnVjdCBuZXQyMjgwICpkZXYsIGludCBpc19hY3RpdmUpCit7CisJdTMyCXZhbCA9IHJlYWRsICgmZGV2LT5yZWdzLT5ncGlvY3RsKTsKKworCS8vIEZJWE1FIHRoaXMgTEVEIG5ldmVyIHNlZW1zIHRvIHR1cm4gb24uCisJaWYgKGlzX2FjdGl2ZSkKKwkJdmFsIHw9IEdQSU8yX0RBVEE7CisJZWxzZQorCQl2YWwgJj0gfkdQSU8yX0RBVEE7CisJd3JpdGVsICh2YWwsICZkZXYtPnJlZ3MtPmdwaW9jdGwpOworfQorc3RhdGljIGlubGluZSB2b2lkIG5ldDIyODBfbGVkX3NodXRkb3duIChzdHJ1Y3QgbmV0MjI4MCAqZGV2KQoreworCS8qIHR1cm4gb2ZmIGFsbCBmb3VyIEdQSU8qX0RBVEEgYml0cyAqLworCXdyaXRlbCAocmVhZGwgKCZkZXYtPnJlZ3MtPmdwaW9jdGwpICYgfjB4MGYsCisJCQkmZGV2LT5yZWdzLT5ncGlvY3RsKTsKK30KKworI2Vsc2UKKworI2RlZmluZSBuZXQyMjgwX2xlZF9pbml0KGRldikJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbmV0MjI4MF9sZWRfc3BlZWQoZGV2LCBzcGVlZCkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBuZXQyMjgwX2xlZF9zaHV0ZG93bihkZXYpCWRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgeHByaW50ayhkZXYsbGV2ZWwsZm10LGFyZ3MuLi4pIFwKKwlwcmludGsobGV2ZWwgIiVzICVzOiAiIGZtdCAsIGRyaXZlcl9uYW1lICwgXAorCQkJcGNpX25hbWUoZGV2LT5wZGV2KSAsICMjIGFyZ3MpCisKKyNpZmRlZiBERUJVRworI3VuZGVmIERFQlVHCisjZGVmaW5lIERFQlVHKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9ERUJVRyAsIGZtdCAsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBERUJVRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogREVCVUcgKi8KKworI2lmZGVmIFZFUkJPU0UKKyNkZWZpbmUgVkRFQlVHIERFQlVHCisjZWxzZQorI2RlZmluZSBWREVCVUcoZGV2LGZtdCxhcmdzLi4uKSBcCisJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCS8qIFZFUkJPU0UgKi8KKworI2RlZmluZSBFUlJPUihkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fRVJSICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgV0FSTihkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fV0FSTklORyAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIElORk8oZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX0lORk8gLCBmbXQgLCAjIyBhcmdzKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIHZvaWQgc3RhcnRfb3V0X25ha2luZyAoc3RydWN0IG5ldDIyODBfZXAgKmVwKQoreworCS8qIE5PVEU6ICBoYXJkd2FyZSByYWNlcyBsdXJrIGhlcmUsIGFuZCBQSU5HIHByb3RvY29sIGlzc3VlcyAqLworCXdyaXRlbCAoKDEgPDwgU0VUX05BS19PVVRfUEFDS0VUUyksICZlcC0+cmVncy0+ZXBfcnNwKTsKKwkvKiBzeW5jaCB3aXRoIGRldmljZSAqLworCXJlYWRsICgmZXAtPnJlZ3MtPmVwX3JzcCk7Cit9CisKKyNpZmRlZiBERUJVRworc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9vdXRfbmFraW5nIChzdHJ1Y3QgbmV0MjI4MF9lcCAqZXAsIGNvbnN0IGNoYXIgKndoZXJlKQoreworCXUzMgl0bXAgPSByZWFkbCAoJmVwLT5yZWdzLT5lcF9zdGF0KTsKKworCWlmICgodG1wICYgKDEgPDwgTkFLX09VVF9QQUNLRVRTKSkgPT0gMCkgeworCQlERUJVRyAoZXAtPmRldiwgIiVzICVzICUwOHggIU5BS1xuIiwKKwkJCQllcC0+ZXAubmFtZSwgd2hlcmUsIHRtcCk7CisJCXdyaXRlbCAoKDEgPDwgU0VUX05BS19PVVRfUEFDS0VUUyksCisJCQkmZXAtPnJlZ3MtPmVwX3JzcCk7CisJfQorfQorI2RlZmluZSBBU1NFUlRfT1VUX05BS0lORyhlcCkgYXNzZXJ0X291dF9uYWtpbmcoZXAsX19GVU5DVElPTl9fKQorI2Vsc2UKKyNkZWZpbmUgQVNTRVJUX09VVF9OQUtJTkcoZXApIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG9wX291dF9uYWtpbmcgKHN0cnVjdCBuZXQyMjgwX2VwICplcCkKK3sKKwl1MzIJdG1wOworCisJdG1wID0gcmVhZGwgKCZlcC0+cmVncy0+ZXBfc3RhdCk7CisJaWYgKCh0bXAgJiAoMSA8PCBOQUtfT1VUX1BBQ0tFVFMpKSAhPSAwKQorCQl3cml0ZWwgKCgxIDw8IENMRUFSX05BS19PVVRfUEFDS0VUUyksICZlcC0+cmVncy0+ZXBfcnNwKTsKK30KKworI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY2ZWE1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYwpAQCAtMCwwICsxLDI4NzIgQEAKKy8qCisgKiBvbWFwX3VkYy5jIC0tIGZvciBPTUFQIGZ1bGwgc3BlZWQgdWRjOyBtb3N0IGNoaXBzIHN1cHBvcnQgT1RHLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgRGF2aWQgQnJvd25lbGwKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI3VuZGVmCURFQlVHCisjdW5kZWYJVkVSQk9TRQorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiX2NoOS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9nYWRnZXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Jfb3RnLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvZG1hLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+CisKKyNpbmNsdWRlICJvbWFwX3VkYy5oIgorCisjdW5kZWYJVVNCX1RSQUNFCisKKy8qIGJ1bGsgRE1BIHNlZW1zIHRvIGJlIGJlaGF2aW5nIGZvciBib3RoIElOIGFuZCBPVVQgKi8KKyNkZWZpbmUJVVNFX0RNQQorCisvKiBJU08gdG9vICovCisjZGVmaW5lCVVTRV9JU08KKworI2RlZmluZQlEUklWRVJfREVTQwkiT01BUCBVREMgZHJpdmVyIgorI2RlZmluZQlEUklWRVJfVkVSU0lPTgkiNCBPY3RvYmVyIDIwMDQiCisKKyNkZWZpbmUJRE1BX0FERFJfSU5WQUxJRAkofihkbWFfYWRkcl90KTApCisKKworLyoKKyAqIFRoZSBPTUFQIFVEQyBuZWVkcyBfdmVyeV8gZWFybHkgZW5kcG9pbnQgc2V0dXA6ICBiZWZvcmUgZW5hYmxpbmcgdGhlCisgKiBEKyBwdWxsdXAgdG8gYWxsb3cgZW51bWVyYXRpb24uICBUaGF0J3MgdG9vIGVhcmx5IGZvciB0aGUgZ2FkZ2V0CisgKiBmcmFtZXdvcmsgdG8gdXNlIGZyb20gdXNiX2VuZHBvaW50X2VuYWJsZSgpLCB3aGljaCBoYXBwZW5zIGFmdGVyCisgKiBlbnVtZXJhdGlvbiBhcyBwYXJ0IG9mIGFjdGl2YXRpbmcgYW4gaW50ZXJmYWNlLiAgKEJ1dCBpZiB3ZSBhZGQgYW4KKyAqIG9wdGlvbmFsIG5ldyAiVURDIG5vdCB5ZXQgcnVubmluZyIgc3RhdGUgdG8gdGhlIGdhZGdldCBkcml2ZXIgbW9kZWwsCisgKiBldmVuIGp1c3QgZHVyaW5nIGRyaXZlciBiaW5kaW5nLCB0aGUgZW5kcG9pbnQgYXV0b2NvbmZpZyBsb2dpYyBpcyB0aGUKKyAqIG5hdHVyYWwgc3BvdCB0byBtYW51ZmFjdHVyZSBuZXcgZW5kcG9pbnRzLikKKyAqCisgKiBTbyBpbnN0ZWFkIG9mIHVzaW5nIGVuZHBvaW50IGVuYWJsZSBjYWxscyB0byBjb250cm9sIHRoZSBoYXJkd2FyZSBzZXR1cCwKKyAqIHRoaXMgZHJpdmVyIGRlZmluZXMgYSAiZmlmbyBtb2RlIiBwYXJhbWV0ZXIuICBJdCdzIHVzZWQgZHVyaW5nIGRyaXZlcgorICogaW5pdGlhbGl6YXRpb24gdG8gY2hvb3NlIGFtb25nIGEgc2V0IG9mIHByZS1kZWZpbmVkIGVuZHBvaW50IGNvbmZpZ3MuCisgKiBTZWUgb21hcF91ZGNfc2V0dXAoKSBmb3IgYXZhaWxhYmxlIG1vZGVzLCBvciB0byBhZGQgb3RoZXJzLiAgVGhhdCBjb2RlCisgKiBsaXZlcyBpbiBhbiBpbml0IHNlY3Rpb24sIHNvIHVzZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSBpZiB5b3UgbmVlZAorICogdG8gY2hhbmdlIHRoZSBmaWZvIG1vZGUgYWZ0ZXIgdGhlIGtlcm5lbCBib290cy4KKyAqCisgKiBHYWRnZXQgZHJpdmVycyBub3JtYWxseSBpZ25vcmUgZW5kcG9pbnRzIHRoZXkgZG9uJ3QgY2FyZSBhYm91dCwgYW5kCisgKiB3b24ndCBpbmNsdWRlIHRoZW0gaW4gY29uZmlndXJhdGlvbiBkZXNjcmlwdG9ycy4gIFRoYXQgbWVhbnMgb25seQorICogbWlzYmVoYXZpbmcgaG9zdHMgd291bGQgZXZlbiBub3RpY2UgdGhleSBleGlzdC4KKyAqLworI2lmZGVmCVVTRV9JU08KK3N0YXRpYyB1bnNpZ25lZCBmaWZvX21vZGUgPSAzOworI2Vsc2UKK3N0YXRpYyB1bnNpZ25lZCBmaWZvX21vZGUgPSAwOworI2VuZGlmCisKKy8qICJtb2Rwcm9iZSBvbWFwX3VkYyBmaWZvX21vZGU9NDIiLCBvciBlbHNlIGFzIGEga2VybmVsCisgKiBib290IHBhcmFtZXRlciAib21hcF91ZGM6Zmlmb19tb2RlPTQyIgorICovCittb2R1bGVfcGFyYW0gKGZpZm9fbW9kZSwgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDIChmaWZvX21vZGUsICJlbmRwb2ludCBzZXR1cCAoMCA9PSBkZWZhdWx0KSIpOworCisjaWZkZWYJVVNFX0RNQQorc3RhdGljIHVuc2lnbmVkIHVzZV9kbWEgPSAxOworCisvKiAibW9kcHJvYmUgb21hcF91ZGMgdXNlX2RtYT15Iiwgb3IgZWxzZSBhcyBhIGtlcm5lbAorICogYm9vdCBwYXJhbWV0ZXIgIm9tYXBfdWRjOnVzZV9kbWE9eSIKKyAqLworbW9kdWxlX3BhcmFtICh1c2VfZG1hLCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MgKHVzZV9kbWEsICJlbmFibGUvZGlzYWJsZSBETUEiKTsKKyNlbHNlCS8qICFVU0VfRE1BICovCisKKy8qIHNhdmUgYSBiaXQgb2YgY29kZSAqLworI2RlZmluZQl1c2VfZG1hCQkwCisjZW5kaWYJLyogIVVTRV9ETUEgKi8KKworCitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZSBbXSA9ICJvbWFwX3VkYyI7CitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfZGVzYyBbXSA9IERSSVZFUl9ERVNDOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiB0aGVyZSdzIGEgbm90aW9uIG9mICJjdXJyZW50IGVuZHBvaW50IiBmb3IgbW9kaWZ5aW5nIGVuZHBvaW50CisgKiBzdGF0ZSwgYW5kIFBJTyBhY2Nlc3MgdG8gaXRzIEZJRk8uICAKKyAqLworCitzdGF0aWMgdm9pZCB1c2VfZXAoc3RydWN0IG9tYXBfZXAgKmVwLCB1MTYgc2VsZWN0KQoreworCXUxNgludW0gPSBlcC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4MGY7CisKKwlpZiAoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQorCQludW0gfD0gVURDX0VQX0RJUjsKKwlVRENfRVBfTlVNX1JFRyA9IG51bSB8IHNlbGVjdDsKKwkvKiB3aGVuIHNlbGVjdCwgTVVTVCBkZXNlbGVjdCBsYXRlciAhISAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVzZWxlY3RfZXAodm9pZCkKK3sKKwlVRENfRVBfTlVNX1JFRyAmPSB+VURDX0VQX1NFTDsKKwkvKiA2IHdhaXQgc3RhdGVzIGJlZm9yZSBUWCB3aWxsIGhhcHBlbiAqLworfQorCitzdGF0aWMgdm9pZCBkbWFfY2hhbm5lbF9jbGFpbShzdHJ1Y3Qgb21hcF9lcCAqZXAsIHVuc2lnbmVkIHByZWZlcnJlZCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgb21hcF9lcF9lbmFibGUoc3RydWN0IHVzYl9lcCAqX2VwLAorCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJc3RydWN0IG9tYXBfZXAJKmVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IG9tYXBfZXAsIGVwKTsKKwlzdHJ1Y3Qgb21hcF91ZGMJKnVkYzsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXUxNgkJbWF4cDsKKworCS8qIGNhdGNoIHZhcmlvdXMgYm9ndXMgcGFyYW1ldGVycyAqLworCWlmICghX2VwIHx8ICFkZXNjIHx8IGVwLT5kZXNjCisJCQl8fCBkZXNjLT5iRGVzY3JpcHRvclR5cGUgIT0gVVNCX0RUX0VORFBPSU5UCisJCQl8fCBlcC0+YkVuZHBvaW50QWRkcmVzcyAhPSBkZXNjLT5iRW5kcG9pbnRBZGRyZXNzCisJCQl8fCBlcC0+bWF4cGFja2V0IDwgbGUxNl90b19jcHUKKwkJCQkJCShkZXNjLT53TWF4UGFja2V0U2l6ZSkpIHsKKwkJREJHKCIlcywgYmFkIGVwIG9yIGRlc2NyaXB0b3JcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwltYXhwID0gbGUxNl90b19jcHUgKGRlc2MtPndNYXhQYWNrZXRTaXplKTsKKwlpZiAoKGRlc2MtPmJtQXR0cmlidXRlcyA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLCisJCQkJJiYgbWF4cCAhPSBlcC0+bWF4cGFja2V0KQorCQkJfHwgZGVzYy0+d01heFBhY2tldFNpemUgPiBlcC0+bWF4cGFja2V0CisJCQl8fCAhZGVzYy0+d01heFBhY2tldFNpemUpIHsKKwkJREJHKCIlcywgYmFkICVzIG1heHBhY2tldFxuIiwgX19GVU5DVElPTl9fLCBfZXAtPm5hbWUpOworCQlyZXR1cm4gLUVSQU5HRTsKKwl9CisKKyNpZmRlZglVU0VfSVNPCisJaWYgKChkZXNjLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQworCQkJCSYmIGRlc2MtPmJJbnRlcnZhbCAhPSAxKSkgeworCQkvKiBoYXJkd2FyZSB3YW50cyBwZXJpb2QgPSAxOyBVU0IgYWxsb3dzIDJeKEludGVydmFsLTEpICovCisJCURCRygiJXMsIHVuc3VwcG9ydGVkIElTTyBwZXJpb2QgJWRtc1xuIiwgX2VwLT5uYW1lLAorCQkJCTEgPDwgKGRlc2MtPmJJbnRlcnZhbCAtIDEpKTsKKwkJcmV0dXJuIC1FRE9NOworCX0KKyNlbHNlCisJaWYgKGRlc2MtPmJtQXR0cmlidXRlcyA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKSB7CisJCURCRygiJXMsIElTTyBueWV0XG4iLCBfZXAtPm5hbWUpOworCQlyZXR1cm4gLUVET007CisJfQorI2VuZGlmCisKKwkvKiB4ZmVyIHR5cGVzIG11c3QgbWF0Y2gsIGV4Y2VwdCB0aGF0IGludGVycnVwdCB+PSBidWxrICovCisJaWYgKGVwLT5ibUF0dHJpYnV0ZXMgIT0gZGVzYy0+Ym1BdHRyaWJ1dGVzCisJCQkmJiBlcC0+Ym1BdHRyaWJ1dGVzICE9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEsKKwkJCSYmIGRlc2MtPmJtQXR0cmlidXRlcyAhPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpIHsKKwkJREJHKCIlcywgJXMgdHlwZSBtaXNtYXRjaFxuIiwgX19GVU5DVElPTl9fLCBfZXAtPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl1ZGMgPSBlcC0+dWRjOworCWlmICghdWRjLT5kcml2ZXIgfHwgdWRjLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pIHsKKwkJREJHKCIlcywgYm9ndXMgZGV2aWNlIHN0YXRlXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVTSFVURE9XTjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwllcC0+ZGVzYyA9IGRlc2M7CisJZXAtPmlycXMgPSAwOworCWVwLT5zdG9wcGVkID0gMDsKKwllcC0+ZXAubWF4cGFja2V0ID0gbWF4cDsKKworCS8qIHNldCBlbmRwb2ludCB0byBpbml0aWFsIHN0YXRlICovCisJZXAtPmRtYV9jaGFubmVsID0gMDsKKwllcC0+aGFzX2RtYSA9IDA7CisJZXAtPmxjaCA9IC0xOworCXVzZV9lcChlcCwgVURDX0VQX1NFTCk7CisJVURDX0NUUkxfUkVHID0gVURDX1JFU0VUX0VQOworCWVwLT5hY2t3YWl0ID0gMDsKKwlkZXNlbGVjdF9lcCgpOworCisJaWYgKGVwLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykKKwkJbGlzdF9hZGQoJmVwLT5pc28sICZ1ZGMtPmlzbyk7CisKKwkvKiBtYXliZSBhc3NpZ24gYSBETUEgY2hhbm5lbCB0byB0aGlzIGVuZHBvaW50ICovCisJaWYgKHVzZV9kbWEgJiYgZGVzYy0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspCisJCS8qIEZJWE1FIElTTyBjYW4gZG1hLCBidXQgcHJlZmVycyBmaXJzdCBjaGFubmVsICovCisJCWRtYV9jaGFubmVsX2NsYWltKGVwLCAwKTsKKworCS8qIFBJTyBPVVQgbWF5IFJYIHBhY2tldHMgKi8KKwlpZiAoZGVzYy0+Ym1BdHRyaWJ1dGVzICE9IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MKKwkJCSYmICFlcC0+aGFzX2RtYQorCQkJJiYgIShlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pKSB7CisJCVVEQ19DVFJMX1JFRyA9IFVEQ19TRVRfRklGT19FTjsKKwkJZXAtPmFja3dhaXQgPSAxICsgZXAtPmRvdWJsZV9idWY7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJVkRCRygiJXMgZW5hYmxlZFxuIiwgX2VwLT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbnVrZShzdHJ1Y3Qgb21hcF9lcCAqLCBpbnQgc3RhdHVzKTsKKworc3RhdGljIGludCBvbWFwX2VwX2Rpc2FibGUoc3RydWN0IHVzYl9lcCAqX2VwKQoreworCXN0cnVjdCBvbWFwX2VwCSplcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBvbWFwX2VwLCBlcCk7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCWlmICghX2VwIHx8ICFlcC0+ZGVzYykgeworCQlEQkcoIiVzLCAlcyBub3QgZW5hYmxlZFxuIiwgX19GVU5DVElPTl9fLAorCQkJX2VwID8gZXAtPmVwLm5hbWUgOiBOVUxMKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT51ZGMtPmxvY2ssIGZsYWdzKTsKKwllcC0+ZGVzYyA9IDA7CisJbnVrZSAoZXAsIC1FU0hVVERPV04pOworCWVwLT5lcC5tYXhwYWNrZXQgPSBlcC0+bWF4cGFja2V0OworCWVwLT5oYXNfZG1hID0gMDsKKwlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0hBTFQ7CisJbGlzdF9kZWxfaW5pdCgmZXAtPmlzbyk7CisJZGVsX3RpbWVyKCZlcC0+dGltZXIpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPnVkYy0+bG9jaywgZmxhZ3MpOworCisJVkRCRygiJXMgZGlzYWJsZWRcbiIsIF9lcC0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3JlcXVlc3QgKgorb21hcF9hbGxvY19yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKmVwLCBpbnQgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCBvbWFwX3JlcQkqcmVxOworCisJcmVxID0ga21hbGxvYyhzaXplb2YgKnJlcSwgZ2ZwX2ZsYWdzKTsKKwlpZiAocmVxKSB7CisJCW1lbXNldCAocmVxLCAwLCBzaXplb2YgKnJlcSk7CisJCXJlcS0+cmVxLmRtYSA9IERNQV9BRERSX0lOVkFMSUQ7CisJCUlOSVRfTElTVF9IRUFEICgmcmVxLT5xdWV1ZSk7CisJfQorCXJldHVybiAmcmVxLT5yZXE7Cit9CisKK3N0YXRpYyB2b2lkCitvbWFwX2ZyZWVfcmVxdWVzdChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBvbWFwX3JlcQkqcmVxID0gY29udGFpbmVyX29mKF9yZXEsIHN0cnVjdCBvbWFwX3JlcSwgcmVxKTsKKworCWlmIChfcmVxKQorCQlrZnJlZSAocmVxKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgKgorb21hcF9hbGxvY19idWZmZXIoCisJc3RydWN0IHVzYl9lcAkqX2VwLAorCXVuc2lnbmVkCWJ5dGVzLAorCWRtYV9hZGRyX3QJKmRtYSwKKwlpbnQJCWdmcF9mbGFncworKQoreworCXZvaWQJCSpyZXR2YWw7CisJc3RydWN0IG9tYXBfZXAJKmVwOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3Qgb21hcF9lcCwgZXApOworCWlmICh1c2VfZG1hICYmIGVwLT5oYXNfZG1hKSB7CisJCXN0YXRpYyBpbnQJd2FybmVkOworCQlpZiAoIXdhcm5lZCAmJiBieXRlcyA8IFBBR0VfU0laRSkgeworCQkJZGV2X3dhcm4oZXAtPnVkYy0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQkJInVzaW5nIGRtYV9hbGxvY19jb2hlcmVudCBmb3IgIgorCQkJCSJzbWFsbCBhbGxvY2F0aW9ucyB3YXN0ZXMgbWVtb3J5XG4iKTsKKwkJCXdhcm5lZCsrOworCQl9CisJCXJldHVybiBkbWFfYWxsb2NfY29oZXJlbnQoZXAtPnVkYy0+Z2FkZ2V0LmRldi5wYXJlbnQsCisJCQkJYnl0ZXMsIGRtYSwgZ2ZwX2ZsYWdzKTsKKwl9CisKKwlyZXR2YWwgPSBrbWFsbG9jKGJ5dGVzLCBnZnBfZmxhZ3MpOworCWlmIChyZXR2YWwpCisJCSpkbWEgPSB2aXJ0X3RvX3BoeXMocmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBvbWFwX2ZyZWVfYnVmZmVyKAorCXN0cnVjdCB1c2JfZXAJKl9lcCwKKwl2b2lkCQkqYnVmLAorCWRtYV9hZGRyX3QJZG1hLAorCXVuc2lnbmVkCWJ5dGVzCispCit7CisJc3RydWN0IG9tYXBfZXAJKmVwOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3Qgb21hcF9lcCwgZXApOworCWlmICh1c2VfZG1hICYmIF9lcCAmJiBlcC0+aGFzX2RtYSkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoZXAtPnVkYy0+Z2FkZ2V0LmRldi5wYXJlbnQsIGJ5dGVzLCBidWYsIGRtYSk7CisJZWxzZQorCQlrZnJlZSAoYnVmKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK2RvbmUoc3RydWN0IG9tYXBfZXAgKmVwLCBzdHJ1Y3Qgb21hcF9yZXEgKnJlcSwgaW50IHN0YXR1cykKK3sKKwl1bnNpZ25lZAkJc3RvcHBlZCA9IGVwLT5zdG9wcGVkOworCisJbGlzdF9kZWxfaW5pdCgmcmVxLT5xdWV1ZSk7CisKKwlpZiAocmVxLT5yZXEuc3RhdHVzID09IC1FSU5QUk9HUkVTUykKKwkJcmVxLT5yZXEuc3RhdHVzID0gc3RhdHVzOworCWVsc2UKKwkJc3RhdHVzID0gcmVxLT5yZXEuc3RhdHVzOworCisJaWYgKHVzZV9kbWEgJiYgZXAtPmhhc19kbWEpIHsKKwkJaWYgKHJlcS0+bWFwcGVkKSB7CisJCQlkbWFfdW5tYXBfc2luZ2xlKGVwLT51ZGMtPmdhZGdldC5kZXYucGFyZW50LAorCQkJCXJlcS0+cmVxLmRtYSwgcmVxLT5yZXEubGVuZ3RoLAorCQkJCShlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pCisJCQkJCT8gRE1BX1RPX0RFVklDRQorCQkJCQk6IERNQV9GUk9NX0RFVklDRSk7CisJCQlyZXEtPnJlcS5kbWEgPSBETUFfQUREUl9JTlZBTElEOworCQkJcmVxLT5tYXBwZWQgPSAwOworCQl9IGVsc2UKKwkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGVwLT51ZGMtPmdhZGdldC5kZXYucGFyZW50LAorCQkJCXJlcS0+cmVxLmRtYSwgcmVxLT5yZXEubGVuZ3RoLAorCQkJCShlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pCisJCQkJCT8gRE1BX1RPX0RFVklDRQorCQkJCQk6IERNQV9GUk9NX0RFVklDRSk7CisJfQorCisjaWZuZGVmCVVTQl9UUkFDRQorCWlmIChzdGF0dXMgJiYgc3RhdHVzICE9IC1FU0hVVERPV04pCisjZW5kaWYKKwkJVkRCRygiY29tcGxldGUgJXMgcmVxICVwIHN0YXQgJWQgbGVuICV1LyV1XG4iLAorCQkJZXAtPmVwLm5hbWUsICZyZXEtPnJlcSwgc3RhdHVzLAorCQkJcmVxLT5yZXEuYWN0dWFsLCByZXEtPnJlcS5sZW5ndGgpOworCisJLyogZG9uJ3QgbW9kaWZ5IHF1ZXVlIGhlYWRzIGR1cmluZyBjb21wbGV0aW9uIGNhbGxiYWNrICovCisJZXAtPnN0b3BwZWQgPSAxOworCXNwaW5fdW5sb2NrKCZlcC0+dWRjLT5sb2NrKTsKKwlyZXEtPnJlcS5jb21wbGV0ZSgmZXAtPmVwLCAmcmVxLT5yZXEpOworCXNwaW5fbG9jaygmZXAtPnVkYy0+bG9jayk7CisJZXAtPnN0b3BwZWQgPSBzdG9wcGVkOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lCUZJRk9fRlVMTAkoVURDX05PTl9JU09fRklGT19GVUxMIHwgVURDX0lTT19GSUZPX0ZVTEwpCisjZGVmaW5lCUZJRk9fVU5XUklUQUJMRQkoVURDX0VQX0hBTFRFRCB8IEZJRk9fRlVMTCkKKworI2RlZmluZSBGSUZPX0VNUFRZCShVRENfTk9OX0lTT19GSUZPX0VNUFRZIHwgVURDX0lTT19GSUZPX0VNUFRZKQorI2RlZmluZSBGSUZPX1VOUkVBREFCTEUgKFVEQ19FUF9IQUxURUQgfCBGSUZPX0VNUFRZKQorCitzdGF0aWMgaW5saW5lIGludCAKK3dyaXRlX3BhY2tldCh1OCAqYnVmLCBzdHJ1Y3Qgb21hcF9yZXEgKnJlcSwgdW5zaWduZWQgbWF4KQoreworCXVuc2lnbmVkCWxlbjsKKwl1MTYJCSp3cDsKKworCWxlbiA9IG1pbihyZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWwsIG1heCk7CisJcmVxLT5yZXEuYWN0dWFsICs9IGxlbjsKKworCW1heCA9IGxlbjsKKwlpZiAobGlrZWx5KCgoKGludClidWYpICYgMSkgPT0gMCkpIHsKKwkJd3AgPSAodTE2ICopYnVmOworCQl3aGlsZSAobWF4ID49IDIpIHsKKwkJCVVEQ19EQVRBX1JFRyA9ICp3cCsrOworCQkJbWF4IC09IDI7CisJCX0KKwkJYnVmID0gKHU4ICopd3A7CisJfQorCXdoaWxlIChtYXgtLSkKKwkJKih2b2xhdGlsZSB1OCAqKSZVRENfREFUQV9SRUcgPSAqYnVmKys7CisJcmV0dXJuIGxlbjsKK30KKworLy8gRklYTUUgY2hhbmdlIHIvdyBmaWZvIGNhbGxpbmcgY29udmVudGlvbgorCisKKy8vIHJldHVybjogIDAgPSBzdGlsbCBydW5uaW5nLCAxID0gY29tcGxldGVkLCBuZWdhdGl2ZSA9IGVycm5vCitzdGF0aWMgaW50IHdyaXRlX2ZpZm8oc3RydWN0IG9tYXBfZXAgKmVwLCBzdHJ1Y3Qgb21hcF9yZXEgKnJlcSkKK3sKKwl1OAkJKmJ1ZjsKKwl1bnNpZ25lZAljb3VudDsKKwlpbnQJCWlzX2xhc3Q7CisJdTE2CQllcF9zdGF0OworCisJYnVmID0gcmVxLT5yZXEuYnVmICsgcmVxLT5yZXEuYWN0dWFsOworCXByZWZldGNoKGJ1Zik7CisKKwkvKiBQSU8tSU4gaXNuJ3QgZG91YmxlIGJ1ZmZlcmVkIGV4Y2VwdCBmb3IgaXNvICovCisJZXBfc3RhdCA9IFVEQ19TVEFUX0ZMR19SRUc7CisJaWYgKGVwX3N0YXQgJiBGSUZPX1VOV1JJVEFCTEUpCisJCXJldHVybiAwOworCisJY291bnQgPSBlcC0+ZXAubWF4cGFja2V0OworCWNvdW50ID0gd3JpdGVfcGFja2V0KGJ1ZiwgcmVxLCBjb3VudCk7CisJVURDX0NUUkxfUkVHID0gVURDX1NFVF9GSUZPX0VOOworCWVwLT5hY2t3YWl0ID0gMTsKKworCS8qIGxhc3QgcGFja2V0IGlzIG9mdGVuIHNob3J0IChzb21ldGltZXMgYSB6bHApICovCisJaWYgKGNvdW50ICE9IGVwLT5lcC5tYXhwYWNrZXQpCisJCWlzX2xhc3QgPSAxOworCWVsc2UgaWYgKHJlcS0+cmVxLmxlbmd0aCA9PSByZXEtPnJlcS5hY3R1YWwKKwkJCSYmICFyZXEtPnJlcS56ZXJvKQorCQlpc19sYXN0ID0gMTsKKwllbHNlCisJCWlzX2xhc3QgPSAwOworCisJLyogTk9URTogIHJlcXVlc3RzIGNvbXBsZXRlIHdoZW4gYWxsIElOIGRhdGEgaXMgaW4gYQorCSAqIEZJRk8gKG9yIHNvbWV0aW1lcyBsYXRlciwgaWYgYSB6bHAgd2FzIG5lZWRlZCkuCisJICogVXNlIHVzYl9lcF9maWZvX3N0YXR1cygpIHdoZXJlIG5lZWRlZC4KKwkgKi8KKwlpZiAoaXNfbGFzdCkKKwkJZG9uZShlcCwgcmVxLCAwKTsKKwlyZXR1cm4gaXNfbGFzdDsKK30KKworc3RhdGljIGlubGluZSBpbnQgCityZWFkX3BhY2tldCh1OCAqYnVmLCBzdHJ1Y3Qgb21hcF9yZXEgKnJlcSwgdW5zaWduZWQgYXZhaWwpCit7CisJdW5zaWduZWQJbGVuOworCXUxNgkJKndwOworCisJbGVuID0gbWluKHJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbCwgYXZhaWwpOworCXJlcS0+cmVxLmFjdHVhbCArPSBsZW47CisJYXZhaWwgPSBsZW47CisKKwlpZiAobGlrZWx5KCgoKGludClidWYpICYgMSkgPT0gMCkpIHsKKwkJd3AgPSAodTE2ICopYnVmOworCQl3aGlsZSAoYXZhaWwgPj0gMikgeworCQkJKndwKysgPSBVRENfREFUQV9SRUc7CisJCQlhdmFpbCAtPSAyOworCQl9CisJCWJ1ZiA9ICh1OCAqKXdwOworCX0KKwl3aGlsZSAoYXZhaWwtLSkKKwkJKmJ1ZisrID0gKih2b2xhdGlsZSB1OCAqKSZVRENfREFUQV9SRUc7CisJcmV0dXJuIGxlbjsKK30KKworLy8gcmV0dXJuOiAgMCA9IHN0aWxsIHJ1bm5pbmcsIDEgPSBxdWV1ZSBlbXB0eSwgbmVnYXRpdmUgPSBlcnJubworc3RhdGljIGludCByZWFkX2ZpZm8oc3RydWN0IG9tYXBfZXAgKmVwLCBzdHJ1Y3Qgb21hcF9yZXEgKnJlcSkKK3sKKwl1OAkJKmJ1ZjsKKwl1bnNpZ25lZAljb3VudCwgYXZhaWw7CisJaW50CQlpc19sYXN0OworCisJYnVmID0gcmVxLT5yZXEuYnVmICsgcmVxLT5yZXEuYWN0dWFsOworCXByZWZldGNodyhidWYpOworCisJZm9yICg7OykgeworCQl1MTYJZXBfc3RhdCA9IFVEQ19TVEFUX0ZMR19SRUc7CisKKwkJaXNfbGFzdCA9IDA7CisJCWlmIChlcF9zdGF0ICYgRklGT19FTVBUWSkgeworCQkJaWYgKCFlcC0+ZG91YmxlX2J1ZikKKwkJCQlicmVhazsKKwkJCWVwLT5mbmYgPSAxOworCQl9CisJCWlmIChlcF9zdGF0ICYgVURDX0VQX0hBTFRFRCkKKwkJCWJyZWFrOworCisJCWlmIChlcF9zdGF0ICYgRklGT19GVUxMKQorCQkJYXZhaWwgPSBlcC0+ZXAubWF4cGFja2V0OworCQllbHNlICB7CisJCQlhdmFpbCA9IFVEQ19SWEZTVEFUX1JFRzsKKwkJCWVwLT5mbmYgPSBlcC0+ZG91YmxlX2J1ZjsKKwkJfQorCQljb3VudCA9IHJlYWRfcGFja2V0KGJ1ZiwgcmVxLCBhdmFpbCk7CisKKwkJLyogcGFydGlhbCBwYWNrZXQgcmVhZHMgbWF5IG5vdCBiZSBlcnJvcnMgKi8KKwkJaWYgKGNvdW50IDwgZXAtPmVwLm1heHBhY2tldCkgeworCQkJaXNfbGFzdCA9IDE7CisJCQkvKiBvdmVyZmxvd2VkIHRoaXMgcmVxdWVzdD8gIGZsdXNoIGV4dHJhIGRhdGEgKi8KKwkJCWlmIChjb3VudCAhPSBhdmFpbCkgeworCQkJCXJlcS0+cmVxLnN0YXR1cyA9IC1FT1ZFUkZMT1c7CisJCQkJYXZhaWwgLT0gY291bnQ7CisJCQkJd2hpbGUgKGF2YWlsLS0pCisJCQkJCSh2b2lkKSAqKHZvbGF0aWxlIHU4ICopJlVEQ19EQVRBX1JFRzsKKwkJCX0KKwkJfSBlbHNlIGlmIChyZXEtPnJlcS5sZW5ndGggPT0gcmVxLT5yZXEuYWN0dWFsKQorCQkJaXNfbGFzdCA9IDE7CisJCWVsc2UKKwkJCWlzX2xhc3QgPSAwOworCisJCWlmICghZXAtPmJFbmRwb2ludEFkZHJlc3MpCisJCQlicmVhazsKKwkJaWYgKGlzX2xhc3QpCisJCQlkb25lKGVwLCByZXEsIDApOworCQlicmVhazsKKwl9CisJcmV0dXJuIGlzX2xhc3Q7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB1MTYgZG1hX3NyY19sZW4oc3RydWN0IG9tYXBfZXAgKmVwLCBkbWFfYWRkcl90IHN0YXJ0KQoreworCWRtYV9hZGRyX3QJZW5kOworCisJLyogSU4tRE1BIG5lZWRzIHRoaXMgb24gZmF1bHQvY2FuY2VsIHBhdGhzLCBzbyAxNXh4IG1pc3JlcG9ydHMKKwkgKiB0aGUgbGFzdCB0cmFuc2ZlcidzIGJ5dGVjb3VudCBieSBtb3JlIHRoYW4gYSBGSUZPJ3Mgd29ydGguCisJICovCisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQorCQlyZXR1cm4gMDsKKworCWVuZCA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NBQyhlcC0+bGNoKSk7CisJaWYgKGVuZCA9PSBlcC0+ZG1hX2NvdW50ZXIpCisJCXJldHVybiAwOworCisJZW5kIHw9IHN0YXJ0ICYgKDB4ZmZmZiA8PCAxNik7CisJaWYgKGVuZCA8IHN0YXJ0KQorCQllbmQgKz0gMHgxMDAwMDsKKwlyZXR1cm4gZW5kIC0gc3RhcnQ7Cit9CisKKyNkZWZpbmUgRE1BX0RFU1RfTEFTVCh4KSAoY3B1X2lzX29tYXAxNXh4KCkgXAorCQk/IE9NQVBfRE1BX0NTQUMoeCkgLyogcmVhbGx5OiBDUEMgKi8gXAorCQk6IE9NQVBfRE1BX0NEQUMoeCkpCisKK3N0YXRpYyB1MTYgZG1hX2Rlc3RfbGVuKHN0cnVjdCBvbWFwX2VwICplcCwgZG1hX2FkZHJfdCBzdGFydCkKK3sKKwlkbWFfYWRkcl90CWVuZDsKKworCWVuZCA9IG9tYXBfcmVhZHcoRE1BX0RFU1RfTEFTVChlcC0+bGNoKSk7CisJaWYgKGVuZCA9PSBlcC0+ZG1hX2NvdW50ZXIpCisJCXJldHVybiAwOworCisJZW5kIHw9IHN0YXJ0ICYgKDB4ZmZmZiA8PCAxNik7CisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQorCQllbmQrKzsKKwlpZiAoZW5kIDwgc3RhcnQpCisJCWVuZCArPSAweDEwMDAwOworCXJldHVybiBlbmQgLSBzdGFydDsKK30KKworCisvKiBFYWNoIFVTQiB0cmFuc2ZlciByZXF1ZXN0IHVzaW5nIERNQSBtYXBzIHRvIG9uZSBvciBtb3JlIERNQSB0cmFuc2ZlcnMuCisgKiBXaGVuIERNQSBjb21wbGV0aW9uIGlzbid0IHJlcXVlc3QgY29tcGxldGlvbiwgdGhlIFVEQyBjb250aW51ZXMgd2l0aAorICogdGhlIG5leHQgRE1BIHRyYW5zZmVyIGZvciB0aGF0IFVTQiB0cmFuc2Zlci4KKyAqLworCitzdGF0aWMgdm9pZCBuZXh0X2luX2RtYShzdHJ1Y3Qgb21hcF9lcCAqZXAsIHN0cnVjdCBvbWFwX3JlcSAqcmVxKQoreworCXUxNgkJdHhkbWFfY3RybDsKKwl1bnNpZ25lZAlsZW5ndGggPSByZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWw7CisJY29uc3QgaW50CXN5bmNfbW9kZSA9IGNwdV9pc19vbWFwMTV4eCgpCisJCQkJPyBPTUFQX0RNQV9TWU5DX0ZSQU1FCisJCQkJOiBPTUFQX0RNQV9TWU5DX0VMRU1FTlQ7CisKKwkvKiBtZWFzdXJlIGxlbmd0aCBpbiBlaXRoZXIgYnl0ZXMgb3IgcGFja2V0cyAqLworCWlmICgoY3B1X2lzX29tYXAxNnh4KCkgJiYgbGVuZ3RoIDw9IChVRENfVFhOX1RTQyArIDEpKQorCQkJfHwgKGNwdV9pc19vbWFwMTV4eCgpICYmIGxlbmd0aCA8IGVwLT5tYXhwYWNrZXQpKSB7CisJCXR4ZG1hX2N0cmwgPSBVRENfVFhOX0VPVCB8IGxlbmd0aDsKKwkJb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhlcC0+bGNoLCBPTUFQX0RNQV9EQVRBX1RZUEVfUzgsCisJCQkJbGVuZ3RoLCAxLCBzeW5jX21vZGUpOworCX0gZWxzZSB7CisJCWxlbmd0aCA9IG1pbihsZW5ndGggLyBlcC0+bWF4cGFja2V0LAorCQkJCSh1bnNpZ25lZCkgVURDX1RYTl9UU0MgKyAxKTsKKyAJCXR4ZG1hX2N0cmwgPSBsZW5ndGg7CisJCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoZXAtPmxjaCwgT01BUF9ETUFfREFUQV9UWVBFX1M4LAorCQkJCWVwLT5lcC5tYXhwYWNrZXQsIGxlbmd0aCwgc3luY19tb2RlKTsKKwkJbGVuZ3RoICo9IGVwLT5tYXhwYWNrZXQ7CisJfQorCW9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKGVwLT5sY2gsIE9NQVBfRE1BX1BPUlRfRU1JRkYsCisJCU9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLCByZXEtPnJlcS5kbWEgKyByZXEtPnJlcS5hY3R1YWwpOworCisJb21hcF9zdGFydF9kbWEoZXAtPmxjaCk7CisJZXAtPmRtYV9jb3VudGVyID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DU0FDKGVwLT5sY2gpKTsKKwlVRENfRE1BX0lSUV9FTl9SRUcgfD0gVURDX1RYX0RPTkVfSUUoZXAtPmRtYV9jaGFubmVsKTsKKwlVRENfVFhETUFfUkVHKGVwLT5kbWFfY2hhbm5lbCkgPSBVRENfVFhOX1NUQVJUIHwgdHhkbWFfY3RybDsKKwlyZXEtPmRtYV9ieXRlcyA9IGxlbmd0aDsKK30KKworc3RhdGljIHZvaWQgZmluaXNoX2luX2RtYShzdHJ1Y3Qgb21hcF9lcCAqZXAsIHN0cnVjdCBvbWFwX3JlcSAqcmVxLCBpbnQgc3RhdHVzKQoreworCWlmIChzdGF0dXMgPT0gMCkgeworCQlyZXEtPnJlcS5hY3R1YWwgKz0gcmVxLT5kbWFfYnl0ZXM7CisKKwkJLyogcmV0dXJuIGlmIHRoaXMgcmVxdWVzdCBuZWVkcyB0byBzZW5kIGRhdGEgb3IgemxwICovCisJCWlmIChyZXEtPnJlcS5hY3R1YWwgPCByZXEtPnJlcS5sZW5ndGgpCisJCQlyZXR1cm47CisJCWlmIChyZXEtPnJlcS56ZXJvCisJCQkJJiYgcmVxLT5kbWFfYnl0ZXMgIT0gMAorCQkJCSYmIChyZXEtPnJlcS5hY3R1YWwgJSBlcC0+bWF4cGFja2V0KSA9PSAwKQorCQkJcmV0dXJuOworCX0gZWxzZQorCQlyZXEtPnJlcS5hY3R1YWwgKz0gZG1hX3NyY19sZW4oZXAsIHJlcS0+cmVxLmRtYQorCQkJCQkJCSsgcmVxLT5yZXEuYWN0dWFsKTsKKworCS8qIHR4IGNvbXBsZXRpb24gKi8KKwlvbWFwX3N0b3BfZG1hKGVwLT5sY2gpOworCVVEQ19ETUFfSVJRX0VOX1JFRyAmPSB+VURDX1RYX0RPTkVfSUUoZXAtPmRtYV9jaGFubmVsKTsKKwlkb25lKGVwLCByZXEsIHN0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIG5leHRfb3V0X2RtYShzdHJ1Y3Qgb21hcF9lcCAqZXAsIHN0cnVjdCBvbWFwX3JlcSAqcmVxKQoreworCXVuc2lnbmVkIHBhY2tldHM7CisKKwkvKiBOT1RFOiAgd2UgZmlsdGVyZWQgb3V0ICJzaG9ydCByZWFkcyIgYmVmb3JlLCBzbyB3ZSBrbm93CisJICogdGhlIGJ1ZmZlciBoYXMgb25seSB3aG9sZSBudW1iZXJzIG9mIHBhY2tldHMuCisJICovCisKKwkvKiBzZXQgdXAgdGhpcyBETUEgdHJhbnNmZXIsIGVuYWJsZSB0aGUgZmlmbywgc3RhcnQgKi8KKwlwYWNrZXRzID0gKHJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbCkgLyBlcC0+ZXAubWF4cGFja2V0OworCXBhY2tldHMgPSBtaW4ocGFja2V0cywgKHVuc2lnbmVkKVVEQ19SWE5fVEMgKyAxKTsKKwlyZXEtPmRtYV9ieXRlcyA9IHBhY2tldHMgKiBlcC0+ZXAubWF4cGFja2V0OworCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoZXAtPmxjaCwgT01BUF9ETUFfREFUQV9UWVBFX1M4LAorCQkJZXAtPmVwLm1heHBhY2tldCwgcGFja2V0cywKKwkJCU9NQVBfRE1BX1NZTkNfRUxFTUVOVCk7CisJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGVwLT5sY2gsIE9NQVBfRE1BX1BPUlRfRU1JRkYsCisJCU9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLCByZXEtPnJlcS5kbWEgKyByZXEtPnJlcS5hY3R1YWwpOworCWVwLT5kbWFfY291bnRlciA9IG9tYXBfcmVhZHcoRE1BX0RFU1RfTEFTVChlcC0+bGNoKSk7CisKKwlVRENfUlhETUFfUkVHKGVwLT5kbWFfY2hhbm5lbCkgPSBVRENfUlhOX1NUT1AgfCAocGFja2V0cyAtIDEpOworCVVEQ19ETUFfSVJRX0VOX1JFRyB8PSBVRENfUlhfRU9UX0lFKGVwLT5kbWFfY2hhbm5lbCk7CisJVURDX0VQX05VTV9SRUcgPSAoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiAweGYpOworCVVEQ19DVFJMX1JFRyA9IFVEQ19TRVRfRklGT19FTjsKKworCW9tYXBfc3RhcnRfZG1hKGVwLT5sY2gpOworfQorCitzdGF0aWMgdm9pZAorZmluaXNoX291dF9kbWEoc3RydWN0IG9tYXBfZXAgKmVwLCBzdHJ1Y3Qgb21hcF9yZXEgKnJlcSwgaW50IHN0YXR1cykKK3sKKwl1MTYJY291bnQ7CisKKwlpZiAoc3RhdHVzID09IDApCisJCWVwLT5kbWFfY291bnRlciA9ICh1MTYpIChyZXEtPnJlcS5kbWEgKyByZXEtPnJlcS5hY3R1YWwpOworCWNvdW50ID0gZG1hX2Rlc3RfbGVuKGVwLCByZXEtPnJlcS5kbWEgKyByZXEtPnJlcS5hY3R1YWwpOworCWNvdW50ICs9IHJlcS0+cmVxLmFjdHVhbDsKKwlpZiAoY291bnQgPD0gcmVxLT5yZXEubGVuZ3RoKQorCQlyZXEtPnJlcS5hY3R1YWwgPSBjb3VudDsKKworCWlmIChjb3VudCAhPSByZXEtPmRtYV9ieXRlcyB8fCBzdGF0dXMpCisJCW9tYXBfc3RvcF9kbWEoZXAtPmxjaCk7CisKKwkvKiBpZiB0aGlzIHdhc24ndCBzaG9ydCwgcmVxdWVzdCBtYXkgbmVlZCBhbm90aGVyIHRyYW5zZmVyICovCisJZWxzZSBpZiAocmVxLT5yZXEuYWN0dWFsIDwgcmVxLT5yZXEubGVuZ3RoKQorCQlyZXR1cm47CisKKwkvKiByeCBjb21wbGV0aW9uICovCisJVURDX0RNQV9JUlFfRU5fUkVHICY9IH5VRENfUlhfRU9UX0lFKGVwLT5kbWFfY2hhbm5lbCk7CisJZG9uZShlcCwgcmVxLCBzdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCBkbWFfaXJxKHN0cnVjdCBvbWFwX3VkYyAqdWRjLCB1MTYgaXJxX3NyYykKK3sKKwl1MTYJCWRtYW5fc3RhdCA9IFVEQ19ETUFOX1NUQVRfUkVHOworCXN0cnVjdCBvbWFwX2VwCSplcDsKKwlzdHJ1Y3Qgb21hcF9yZXEJKnJlcTsKKworCS8qIElOIGRtYTogdHggdG8gaG9zdCAqLworCWlmIChpcnFfc3JjICYgVURDX1RYTl9ET05FKSB7CisJCWVwID0gJnVkYy0+ZXBbMTYgKyBVRENfRE1BX1RYX1NSQyhkbWFuX3N0YXQpXTsKKwkJZXAtPmlycXMrKzsKKwkJLyogY2FuIHNlZSBUWE5fRE9ORSBhZnRlciBkbWEgYWJvcnQgKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCQlyZXEgPSBjb250YWluZXJfb2YoZXAtPnF1ZXVlLm5leHQsCisJCQkJCQlzdHJ1Y3Qgb21hcF9yZXEsIHF1ZXVlKTsKKwkJCWZpbmlzaF9pbl9kbWEoZXAsIHJlcSwgMCk7CisJCX0KKwkJVURDX0lSUV9TUkNfUkVHID0gVURDX1RYTl9ET05FOworCisJCWlmICghbGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkpIHsKKwkJCXJlcSA9IGNvbnRhaW5lcl9vZihlcC0+cXVldWUubmV4dCwKKwkJCQkJc3RydWN0IG9tYXBfcmVxLCBxdWV1ZSk7CisJCQluZXh0X2luX2RtYShlcCwgcmVxKTsKKwkJfQorCX0KKworCS8qIE9VVCBkbWE6IHJ4IGZyb20gaG9zdCAqLworCWlmIChpcnFfc3JjICYgVURDX1JYTl9FT1QpIHsKKwkJZXAgPSAmdWRjLT5lcFtVRENfRE1BX1JYX1NSQyhkbWFuX3N0YXQpXTsKKwkJZXAtPmlycXMrKzsKKwkJLyogY2FuIHNlZSBSWE5fRU9UIGFmdGVyIGRtYSBhYm9ydCAqLworCQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJCXJlcSA9IGNvbnRhaW5lcl9vZihlcC0+cXVldWUubmV4dCwKKwkJCQkJc3RydWN0IG9tYXBfcmVxLCBxdWV1ZSk7CisJCQlmaW5pc2hfb3V0X2RtYShlcCwgcmVxLCAwKTsKKwkJfQorCQlVRENfSVJRX1NSQ19SRUcgPSBVRENfUlhOX0VPVDsKKworCQlpZiAoIWxpc3RfZW1wdHkgKCZlcC0+cXVldWUpKSB7CisJCQlyZXEgPSBjb250YWluZXJfb2YoZXAtPnF1ZXVlLm5leHQsCisJCQkJCXN0cnVjdCBvbWFwX3JlcSwgcXVldWUpOworCQkJbmV4dF9vdXRfZG1hKGVwLCByZXEpOworCQl9CisJfQorCisJaWYgKGlycV9zcmMgJiBVRENfUlhOX0NOVCkgeworCQllcCA9ICZ1ZGMtPmVwW1VEQ19ETUFfUlhfU1JDKGRtYW5fc3RhdCldOworCQllcC0+aXJxcysrOworCQkvKiBvbWFwMTV4eCBkb2VzIHRoaXMgdW5hc2tlZC4uLiAqLworCQlWREJHKCIlcywgUlhfQ05UIGlycT9cbiIsIGVwLT5lcC5uYW1lKTsKKwkJVURDX0lSUV9TUkNfUkVHID0gVURDX1JYTl9DTlQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBkbWFfZXJyb3IoaW50IGxjaCwgdTE2IGNoX3N0YXR1cywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgb21hcF9lcAkqZXAgPSBkYXRhOworCisJLyogaWYgY2hfc3RhdHVzICYgT01BUF9ETUFfRFJPUF9JUlEgLi4uICovCisJLyogaWYgY2hfc3RhdHVzICYgT01BUF9ETUFfVE9VVF9JUlEgLi4uICovCisJRVJSKCIlcyBkbWEgZXJyb3IsIGxjaCAlZCBzdGF0dXMgJTAyeFxuIiwgZXAtPmVwLm5hbWUsIGxjaCwgY2hfc3RhdHVzKTsKKworCS8qIGNvbXBsZXRlIGN1cnJlbnQgdHJhbnNmZXIgLi4uICovCit9CisKK3N0YXRpYyB2b2lkIGRtYV9jaGFubmVsX2NsYWltKHN0cnVjdCBvbWFwX2VwICplcCwgdW5zaWduZWQgY2hhbm5lbCkKK3sKKwl1MTYJcmVnOworCWludAlzdGF0dXMsIHJlc3RhcnQsIGlzX2luOworCisJaXNfaW4gPSBlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU47CisJaWYgKGlzX2luKQorCQlyZWcgPSBVRENfVFhETUFfQ0ZHX1JFRzsKKwllbHNlCisJCXJlZyA9IFVEQ19SWERNQV9DRkdfUkVHOworCXJlZyB8PSAxIDw8IDEyOwkJLyogInB1bHNlIiBhY3RpdmF0ZWQgKi8KKworCWVwLT5kbWFfY2hhbm5lbCA9IDA7CisJZXAtPmxjaCA9IC0xOworCWlmIChjaGFubmVsID09IDAgfHwgY2hhbm5lbCA+IDMpIHsKKwkJaWYgKChyZWcgJiAweDBmMDApID09IDApCisJCQljaGFubmVsID0gMzsKKwkJZWxzZSBpZiAoKHJlZyAmIDB4MDBmMCkgPT0gMCkKKwkJCWNoYW5uZWwgPSAyOworCQllbHNlIGlmICgocmVnICYgMHgwMDBmKSA9PSAwKQkvKiBwcmVmZXJyZWQgZm9yIElTTyAqLworCQkJY2hhbm5lbCA9IDE7CisJCWVsc2UgeworCQkJc3RhdHVzID0gLUVNTElOSzsKKwkJCWdvdG8ganVzdF9yZXN0YXJ0OworCQl9CisJfQorCXJlZyB8PSAoMHgwZiAmIGVwLT5iRW5kcG9pbnRBZGRyZXNzKSA8PCAoNCAqIChjaGFubmVsIC0gMSkpOworCWVwLT5kbWFfY2hhbm5lbCA9IGNoYW5uZWw7CisKKwlpZiAoaXNfaW4pIHsKKwkJc3RhdHVzID0gb21hcF9yZXF1ZXN0X2RtYShPTUFQX0RNQV9VU0JfVzJGQ19UWDAgLSAxICsgY2hhbm5lbCwKKwkJCWVwLT5lcC5uYW1lLCBkbWFfZXJyb3IsIGVwLCAmZXAtPmxjaCk7CisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJVURDX1RYRE1BX0NGR19SRUcgPSByZWc7CisJCQlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMoZXAtPmxjaCwKKwkJCQlPTUFQX0RNQV9QT1JUX1RJUEIsCisJCQkJT01BUF9ETUFfQU1PREVfQ09OU1RBTlQsCisJCQkJKHVuc2lnbmVkIGxvbmcpIGlvX3YycCgodTMyKSZVRENfREFUQV9ETUFfUkVHKSk7CisJCX0KKwl9IGVsc2UgeworCQlzdGF0dXMgPSBvbWFwX3JlcXVlc3RfZG1hKE9NQVBfRE1BX1VTQl9XMkZDX1JYMCAtIDEgKyBjaGFubmVsLAorCQkJZXAtPmVwLm5hbWUsIGRtYV9lcnJvciwgZXAsICZlcC0+bGNoKTsKKwkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlVRENfUlhETUFfQ0ZHX1JFRyA9IHJlZzsKKwkJCW9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKGVwLT5sY2gsCisJCQkJT01BUF9ETUFfUE9SVF9USVBCLAorCQkJCU9NQVBfRE1BX0FNT0RFX0NPTlNUQU5ULAorCQkJCSh1bnNpZ25lZCBsb25nKSBpb192MnAoKHUzMikmVURDX0RBVEFfRE1BX1JFRykpOworCQl9CisJfQorCWlmIChzdGF0dXMpCisJCWVwLT5kbWFfY2hhbm5lbCA9IDA7CisJZWxzZSB7CisJCWVwLT5oYXNfZG1hID0gMTsKKwkJb21hcF9kaXNhYmxlX2RtYV9pcnEoZXAtPmxjaCwgT01BUF9ETUFfQkxPQ0tfSVJRKTsKKworCQkvKiBjaGFubmVsIHR5cGUgUDogaHcgc3luY2ggKGZpZm8pICovCisJCWlmICghY3B1X2lzX29tYXAxNXh4KCkpCisJCQlvbWFwX3dyaXRldygyLCBPTUFQX0RNQV9MQ0hfQ1RSTChlcC0+bGNoKSk7CisJfQorCitqdXN0X3Jlc3RhcnQ6CisJLyogcmVzdGFydCBhbnkgcXVldWUsIGV2ZW4gaWYgdGhlIGNsYWltIGZhaWxlZCAgKi8KKwlyZXN0YXJ0ID0gIWVwLT5zdG9wcGVkICYmICFsaXN0X2VtcHR5KCZlcC0+cXVldWUpOworCisJaWYgKHN0YXR1cykKKwkJREJHKCIlcyBubyBkbWEgY2hhbm5lbDogJWQlc1xuIiwgZXAtPmVwLm5hbWUsIHN0YXR1cywKKwkJCXJlc3RhcnQgPyAiIChyZXN0YXJ0KSIgOiAiIik7CisJZWxzZQorCQlEQkcoIiVzIGNsYWltZWQgJWN4ZG1hJWQgbGNoICVkJXNcbiIsIGVwLT5lcC5uYW1lLAorCQkJaXNfaW4gPyAndCcgOiAncicsCisJCQllcC0+ZG1hX2NoYW5uZWwgLSAxLCBlcC0+bGNoLAorCQkJcmVzdGFydCA/ICIgKHJlc3RhcnQpIiA6ICIiKTsKKworCWlmIChyZXN0YXJ0KSB7CisJCXN0cnVjdCBvbWFwX3JlcQkqcmVxOworCQlyZXEgPSBjb250YWluZXJfb2YoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBvbWFwX3JlcSwgcXVldWUpOworCQlpZiAoZXAtPmhhc19kbWEpCisJCQkoaXNfaW4gPyBuZXh0X2luX2RtYSA6IG5leHRfb3V0X2RtYSkoZXAsIHJlcSk7CisJCWVsc2UgeworCQkJdXNlX2VwKGVwLCBVRENfRVBfU0VMKTsKKwkJCShpc19pbiA/IHdyaXRlX2ZpZm8gOiByZWFkX2ZpZm8pKGVwLCByZXEpOworCQkJZGVzZWxlY3RfZXAoKTsKKwkJCWlmICghaXNfaW4pIHsKKwkJCQlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0ZJRk9fRU47CisJCQkJZXAtPmFja3dhaXQgPSAxICsgZXAtPmRvdWJsZV9idWY7CisJCQl9CisJCQkvKiBJTjogNiB3YWl0IHN0YXRlcyBiZWZvcmUgaXQnbGwgdHggKi8KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZG1hX2NoYW5uZWxfcmVsZWFzZShzdHJ1Y3Qgb21hcF9lcCAqZXApCit7CisJaW50CQlzaGlmdCA9IDQgKiAoZXAtPmRtYV9jaGFubmVsIC0gMSk7CisJdTE2CQltYXNrID0gMHgwZiA8PCBzaGlmdDsKKwlzdHJ1Y3Qgb21hcF9yZXEJKnJlcTsKKwlpbnQJCWFjdGl2ZTsKKworCS8qIGFib3J0IGFueSBhY3RpdmUgdXNiIHRyYW5zZmVyIHJlcXVlc3QgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCXJlcSA9IGNvbnRhaW5lcl9vZihlcC0+cXVldWUubmV4dCwgc3RydWN0IG9tYXBfcmVxLCBxdWV1ZSk7CisJZWxzZQorCQlyZXEgPSAwOworCisJYWN0aXZlID0gKCgxIDw8IDcpICYgb21hcF9yZWFkbChPTUFQX0RNQV9DQ1IoZXAtPmxjaCkpKSAhPSAwOworCisJREJHKCIlcyByZWxlYXNlICVzICVjeGRtYSVkICVwXG4iLCBlcC0+ZXAubmFtZSwKKwkJCWFjdGl2ZSA/ICJhY3RpdmUiIDogImlkbGUiLAorCQkJKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgPyAndCcgOiAncicsCisJCQllcC0+ZG1hX2NoYW5uZWwgLSAxLCByZXEpOworCisJLyogd2FpdCB0aWxsIGN1cnJlbnQgcGFja2V0IERNQSBmaW5pc2hlcywgYW5kIGZpZm8gZW1wdGllcyAqLworCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pIHsKKwkJVURDX1RYRE1BX0NGR19SRUcgJj0gfm1hc2s7CisKKwkJaWYgKHJlcSkgeworCQkJZmluaXNoX2luX2RtYShlcCwgcmVxLCAtRUNPTk5SRVNFVCk7CisKKwkJCS8qIGNsZWFyIEZJRk87IGhvc3RzIHByb2JhYmx5IHdvbid0IGVtcHR5IGl0ICovCisJCQl1c2VfZXAoZXAsIFVEQ19FUF9TRUwpOworCQkJVURDX0NUUkxfUkVHID0gVURDX0NMUl9FUDsKKwkJCWRlc2VsZWN0X2VwKCk7CisJCX0KKwkJd2hpbGUgKFVEQ19UWERNQV9DRkdfUkVHICYgbWFzaykKKwkJCXVkZWxheSgxMCk7CisJfSBlbHNlIHsKKwkJVURDX1JYRE1BX0NGR19SRUcgJj0gfm1hc2s7CisKKwkJLyogZG1hIGVtcHRpZXMgdGhlIGZpZm8gKi8KKwkJd2hpbGUgKFVEQ19SWERNQV9DRkdfUkVHICYgbWFzaykKKwkJCXVkZWxheSgxMCk7CisJCWlmIChyZXEpCisJCQlmaW5pc2hfb3V0X2RtYShlcCwgcmVxLCAtRUNPTk5SRVNFVCk7CisJfQorCW9tYXBfZnJlZV9kbWEoZXAtPmxjaCk7CisJZXAtPmRtYV9jaGFubmVsID0gMDsKKwllcC0+bGNoID0gLTE7CisJLyogaGFzX2RtYSBzdGlsbCBzZXQsIHRpbGwgZW5kcG9pbnQgaXMgZnVsbHkgcXVpZXNjZWQgKi8KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50CitvbWFwX2VwX3F1ZXVlKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxLCBpbnQgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCBvbWFwX2VwCSplcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBvbWFwX2VwLCBlcCk7CisJc3RydWN0IG9tYXBfcmVxCSpyZXEgPSBjb250YWluZXJfb2YoX3JlcSwgc3RydWN0IG9tYXBfcmVxLCByZXEpOworCXN0cnVjdCBvbWFwX3VkYwkqdWRjOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJaW50CQlpc19pc28gPSAwOworCisJLyogY2F0Y2ggdmFyaW91cyBib2d1cyBwYXJhbWV0ZXJzICovCisJaWYgKCFfcmVxIHx8ICFyZXEtPnJlcS5jb21wbGV0ZSB8fCAhcmVxLT5yZXEuYnVmCisJCQl8fCAhbGlzdF9lbXB0eSgmcmVxLT5xdWV1ZSkpIHsKKwkJREJHKCIlcywgYmFkIHBhcmFtc1xuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICghX2VwIHx8ICghZXAtPmRlc2MgJiYgZXAtPmJFbmRwb2ludEFkZHJlc3MpKSB7CisJCURCRygiJXMsIGJhZCBlcFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChlcC0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpIHsKKwkJaWYgKHJlcS0+cmVxLmxlbmd0aCA+IGVwLT5lcC5tYXhwYWNrZXQpCisJCQlyZXR1cm4gLUVNU0dTSVpFOworCQlpc19pc28gPSAxOworCX0KKworCS8qIHRoaXMgaXNuJ3QgYm9ndXMsIGJ1dCBPTUFQIERNQSBpc24ndCB0aGUgb25seSBoYXJkd2FyZSB0bworCSAqIGhhdmUgYSBoYXJkIHRpbWUgd2l0aCBwYXJ0aWFsIHBhY2tldCByZWFkcy4uLiAgcmVqZWN0IGl0LgorCSAqLworCWlmICh1c2VfZG1hCisJCQkmJiBlcC0+aGFzX2RtYQorCQkJJiYgZXAtPmJFbmRwb2ludEFkZHJlc3MgIT0gMAorCQkJJiYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgPT0gMAorCQkJJiYgKHJlcS0+cmVxLmxlbmd0aCAlIGVwLT5lcC5tYXhwYWNrZXQpICE9IDApIHsKKwkJREJHKCIlcywgbm8gcGFydGlhbCBwYWNrZXQgT1VUIHJlYWRzXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVNU0dTSVpFOworCX0KKworCXVkYyA9IGVwLT51ZGM7CisJaWYgKCF1ZGMtPmRyaXZlciB8fCB1ZGMtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJcmV0dXJuIC1FU0hVVERPV047CisKKwlpZiAodXNlX2RtYSAmJiBlcC0+aGFzX2RtYSkgeworCQlpZiAocmVxLT5yZXEuZG1hID09IERNQV9BRERSX0lOVkFMSUQpIHsKKwkJCXJlcS0+cmVxLmRtYSA9IGRtYV9tYXBfc2luZ2xlKAorCQkJCWVwLT51ZGMtPmdhZGdldC5kZXYucGFyZW50LAorCQkJCXJlcS0+cmVxLmJ1ZiwKKwkJCQlyZXEtPnJlcS5sZW5ndGgsCisJCQkJKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikKKwkJCQkJPyBETUFfVE9fREVWSUNFCisJCQkJCTogRE1BX0ZST01fREVWSUNFKTsKKwkJCXJlcS0+bWFwcGVkID0gMTsKKwkJfSBlbHNlIHsKKwkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKAorCQkJCWVwLT51ZGMtPmdhZGdldC5kZXYucGFyZW50LAorCQkJCXJlcS0+cmVxLmRtYSwgcmVxLT5yZXEubGVuZ3RoLAorCQkJCShlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pCisJCQkJCT8gRE1BX1RPX0RFVklDRQorCQkJCQk6IERNQV9GUk9NX0RFVklDRSk7CisJCQlyZXEtPm1hcHBlZCA9IDA7CisJCX0KKwl9CisKKwlWREJHKCIlcyBxdWV1ZSByZXEgJXAsIGxlbiAlZCBidWYgJXBcbiIsCisJCWVwLT5lcC5uYW1lLCBfcmVxLCBfcmVxLT5sZW5ndGgsIF9yZXEtPmJ1Zik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwlyZXEtPnJlcS5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisJcmVxLT5yZXEuYWN0dWFsID0gMDsKKworCS8qIG1heWJlIGtpY2tzdGFydCBub24taXNvIGkvbyBxdWV1ZXMgKi8KKwlpZiAoaXNfaXNvKQorCQlVRENfSVJRX0VOX1JFRyB8PSBVRENfU09GX0lFOworCWVsc2UgaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkgJiYgIWVwLT5zdG9wcGVkICYmICFlcC0+YWNrd2FpdCkgeworCQlpbnQJaXNfaW47CisKKwkJaWYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzID09IDApIHsKKwkJCWlmICghdWRjLT5lcDBfcGVuZGluZyB8fCAhbGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkpIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKwkJCQlyZXR1cm4gLUVMMkhMVDsKKwkJCX0KKworCQkJLyogZW1wdHkgREFUQSBzdGFnZT8gKi8KKwkJCWlzX2luID0gdWRjLT5lcDBfaW47CisJCQlpZiAoIXJlcS0+cmVxLmxlbmd0aCkgeworCisJCQkJLyogY2hpcCBiZWNhbWUgQ09ORklHVVJFRCBvciBBRERSRVNTRUQKKwkJCQkgKiBlYXJsaWVyOyBkcml2ZXJzIG1heSBhbHJlYWR5IGhhdmUgcXVldWVkCisJCQkJICogcmVxdWVzdHMgdG8gbm9uLWNvbnRyb2wgZW5kcG9pbnRzCisJCQkJICovCisJCQkJaWYgKHVkYy0+ZXAwX3NldF9jb25maWcpIHsKKwkJCQkJdTE2CWlycV9lbiA9IFVEQ19JUlFfRU5fUkVHOworCisJCQkJCWlycV9lbiB8PSBVRENfRFNfQ0hHX0lFIHwgVURDX0VQMF9JRTsKKwkJCQkJaWYgKCF1ZGMtPmVwMF9yZXNldF9jb25maWcpCisJCQkJCQlpcnFfZW4gfD0gVURDX0VQTl9SWF9JRQorCQkJCQkJCXwgVURDX0VQTl9UWF9JRTsKKwkJCQkJVURDX0lSUV9FTl9SRUcgPSBpcnFfZW47CisJCQkJfQorCisJCQkJLyogU1RBVFVTIGlzIHJldmVyc2UgZGlyZWN0aW9uICovCisJCQkJVURDX0VQX05VTV9SRUcgPSBpc19pbgorCQkJCQkJPyBVRENfRVBfU0VMCisJCQkJCQk6IChVRENfRVBfU0VMfFVEQ19FUF9ESVIpOworCQkJCVVEQ19DVFJMX1JFRyA9IFVEQ19DTFJfRVA7CisJCQkJVURDX0NUUkxfUkVHID0gVURDX1NFVF9GSUZPX0VOOworCQkJCVVEQ19FUF9OVU1fUkVHID0gdWRjLT5lcDBfaW4gPyAwIDogVURDX0VQX0RJUjsKKworCQkJCS8qIGNsZWFudXAgKi8KKwkJCQl1ZGMtPmVwMF9wZW5kaW5nID0gMDsKKwkJCQlkb25lKGVwLCByZXEsIDApOworCQkJCXJlcSA9IDA7CisKKwkJCS8qIG5vbi1lbXB0eSBEQVRBIHN0YWdlICovCisJCQl9IGVsc2UgaWYgKGlzX2luKSB7CisJCQkJVURDX0VQX05VTV9SRUcgPSBVRENfRVBfU0VMfFVEQ19FUF9ESVI7CisJCQl9IGVsc2UgeworCQkJCWlmICh1ZGMtPmVwMF9zZXR1cCkKKwkJCQkJZ290byBpcnFfd2FpdDsKKwkJCQlVRENfRVBfTlVNX1JFRyA9IFVEQ19FUF9TRUw7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpc19pbiA9IGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTjsKKwkJCWlmICghZXAtPmhhc19kbWEpCisJCQkJdXNlX2VwKGVwLCBVRENfRVBfU0VMKTsKKwkJCS8qIGlmIElTTzogU09GIElSUXMgbXVzdCBiZSBlbmFibGVkL2Rpc2FibGVkISAqLworCQl9CisKKwkJaWYgKGVwLT5oYXNfZG1hKQorCQkJKGlzX2luID8gbmV4dF9pbl9kbWEgOiBuZXh0X291dF9kbWEpKGVwLCByZXEpOworCQllbHNlIGlmIChyZXEpIHsKKwkJCWlmICgoaXNfaW4gPyB3cml0ZV9maWZvIDogcmVhZF9maWZvKShlcCwgcmVxKSA9PSAxKQorCQkJCXJlcSA9IDA7CisJCQlkZXNlbGVjdF9lcCgpOworCQkJaWYgKCFpc19pbikgeworCQkJCVVEQ19DVFJMX1JFRyA9IFVEQ19TRVRfRklGT19FTjsKKwkJCQllcC0+YWNrd2FpdCA9IDEgKyBlcC0+ZG91YmxlX2J1ZjsKKwkJCX0KKwkJCS8qIElOOiA2IHdhaXQgc3RhdGVzIGJlZm9yZSBpdCdsbCB0eCAqLworCQl9CisJfQorCitpcnFfd2FpdDoKKwkvKiBpcnEgaGFuZGxlciBhZHZhbmNlcyB0aGUgcXVldWUgKi8KKwlpZiAocmVxICE9IDApCisJCWxpc3RfYWRkX3RhaWwoJnJlcS0+cXVldWUsICZlcC0+cXVldWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcF9lcF9kZXF1ZXVlKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBvbWFwX2VwCSplcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBvbWFwX2VwLCBlcCk7CisJc3RydWN0IG9tYXBfcmVxCSpyZXE7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKworCWlmICghX2VwIHx8ICFfcmVxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7CisKKwkvKiBtYWtlIHN1cmUgaXQncyBhY3R1YWxseSBxdWV1ZWQgb24gdGhpcyBlbmRwb2ludCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkgKHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKKwkJaWYgKCZyZXEtPnJlcSA9PSBfcmVxKQorCQkJYnJlYWs7CisJfQorCWlmICgmcmVxLT5yZXEgIT0gX3JlcSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1c2VfZG1hICYmIGVwLT5kbWFfY2hhbm5lbCAmJiBlcC0+cXVldWUubmV4dCA9PSAmcmVxLT5xdWV1ZSkgeworCQlpbnQgY2hhbm5lbCA9IGVwLT5kbWFfY2hhbm5lbDsKKworCQkvKiByZWxlYXNpbmcgdGhlIGNoYW5uZWwgY2FuY2VscyB0aGUgcmVxdWVzdCwKKwkJICogcmVjbGFpbWluZyB0aGUgY2hhbm5lbCByZXN0YXJ0cyB0aGUgcXVldWUKKwkJICovCisJCWRtYV9jaGFubmVsX3JlbGVhc2UoZXApOworCQlkbWFfY2hhbm5lbF9jbGFpbShlcCwgY2hhbm5lbCk7CisJfSBlbHNlIAorCQlkb25lKGVwLCByZXEsIC1FQ09OTlJFU0VUKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgb21hcF9lcF9zZXRfaGFsdChzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb21hcF9lcAkqZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3Qgb21hcF9lcCwgZXApOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJaW50CQlzdGF0dXMgPSAtRU9QTk9UU1VQUDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7CisKKwkvKiBqdXN0IHVzZSBwcm90b2NvbCBzdGFsbHMgZm9yIGVwMDsgcmVhbCBoYWx0cyBhcmUgYW5ub3lpbmcgKi8KKwlpZiAoZXAtPmJFbmRwb2ludEFkZHJlc3MgPT0gMCkgeworCQlpZiAoIWVwLT51ZGMtPmVwMF9wZW5kaW5nKQorCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZWxzZSBpZiAodmFsdWUpIHsKKwkJCWlmIChlcC0+dWRjLT5lcDBfc2V0X2NvbmZpZykgeworCQkJCVdBUk4oImVycm9yIGNoYW5naW5nIGNvbmZpZz9cbiIpOworCQkJCVVEQ19TWVNDT04yX1JFRyA9IFVEQ19DTFJfQ0ZHOworCQkJfQorCQkJVURDX1NZU0NPTjJfUkVHID0gVURDX1NUQUxMX0NNRDsKKwkJCWVwLT51ZGMtPmVwMF9wZW5kaW5nID0gMDsKKwkJCXN0YXR1cyA9IDA7CisJCX0gZWxzZSAvKiBOT1AgKi8KKwkJCXN0YXR1cyA9IDA7CisKKwkvKiBvdGhlcndpc2UsIGFsbCBhY3RpdmUgbm9uLUlTTyBlbmRwb2ludHMgY2FuIGhhbHQgKi8KKwl9IGVsc2UgaWYgKGVwLT5ibUF0dHJpYnV0ZXMgIT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQyAmJiBlcC0+ZGVzYykgeworCisJCS8qIElOIGVuZHBvaW50cyBtdXN0IGFscmVhZHkgYmUgaWRsZSAqLworCQlpZiAoKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikKKwkJCQkmJiAhbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeyAKKwkJCXN0YXR1cyA9IC1FQUdBSU47CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlpZiAodmFsdWUpIHsKKwkJCWludAljaGFubmVsOworCisJCQlpZiAodXNlX2RtYSAmJiBlcC0+ZG1hX2NoYW5uZWwKKwkJCQkJJiYgIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJCQljaGFubmVsID0gZXAtPmRtYV9jaGFubmVsOworCQkJCWRtYV9jaGFubmVsX3JlbGVhc2UoZXApOworCQkJfSBlbHNlCisJCQkJY2hhbm5lbCA9IDA7CisKKwkJCXVzZV9lcChlcCwgVURDX0VQX1NFTCk7CisJCQlpZiAoVURDX1NUQVRfRkxHX1JFRyAmIFVEQ19OT05fSVNPX0ZJRk9fRU1QVFkpIHsKKwkJCQlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0hBTFQ7CisJCQkJc3RhdHVzID0gMDsKKwkJCX0gZWxzZQorCQkJCXN0YXR1cyA9IC1FQUdBSU47CisJCQlkZXNlbGVjdF9lcCgpOworCisJCQlpZiAoY2hhbm5lbCkKKwkJCQlkbWFfY2hhbm5lbF9jbGFpbShlcCwgY2hhbm5lbCk7CisJCX0gZWxzZSB7CisJCQl1c2VfZXAoZXAsIDApOworCQkJVURDX0NUUkxfUkVHID0gVURDX1JFU0VUX0VQOworCQkJZXAtPmFja3dhaXQgPSAwOworCQkJaWYgKCEoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSkgeworCQkJCVVEQ19DVFJMX1JFRyA9IFVEQ19TRVRfRklGT19FTjsKKwkJCQllcC0+YWNrd2FpdCA9IDEgKyBlcC0+ZG91YmxlX2J1ZjsKKwkJCX0KKwkJfQorCX0KK2RvbmU6CisJVkRCRygiJXMgJXMgaGFsdCBzdGF0ICVkXG4iLCBlcC0+ZXAubmFtZSwKKwkJdmFsdWUgPyAic2V0IiA6ICJjbGVhciIsIHN0YXR1cyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZXBfb3BzIG9tYXBfZXBfb3BzID0geworCS5lbmFibGUJCT0gb21hcF9lcF9lbmFibGUsCisJLmRpc2FibGUJPSBvbWFwX2VwX2Rpc2FibGUsCisKKwkuYWxsb2NfcmVxdWVzdAk9IG9tYXBfYWxsb2NfcmVxdWVzdCwKKwkuZnJlZV9yZXF1ZXN0CT0gb21hcF9mcmVlX3JlcXVlc3QsCisKKwkuYWxsb2NfYnVmZmVyCT0gb21hcF9hbGxvY19idWZmZXIsCisJLmZyZWVfYnVmZmVyCT0gb21hcF9mcmVlX2J1ZmZlciwKKworCS5xdWV1ZQkJPSBvbWFwX2VwX3F1ZXVlLAorCS5kZXF1ZXVlCT0gb21hcF9lcF9kZXF1ZXVlLAorCisJLnNldF9oYWx0CT0gb21hcF9lcF9zZXRfaGFsdCwKKwkvLyBmaWZvX3N0YXR1cyAuLi4gcmVwb3J0IGJ5dGVzIGluIGZpZm8KKwkvLyBmaWZvX2ZsdXNoIC4uLiBmbHVzaCBmaWZvCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IG9tYXBfZ2V0X2ZyYW1lKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJdTE2CXNvZiA9IFVEQ19TT0ZfUkVHOworCXJldHVybiAoc29mICYgVURDX1RTX09LKSA/IChzb2YgJiBVRENfVFMpIDogLUVMMk5TWU5DOworfQorCitzdGF0aWMgaW50IG9tYXBfd2FrZXVwKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IG9tYXBfdWRjCSp1ZGM7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwlpbnQJCXJldHZhbCA9IC1FSE9TVFVOUkVBQ0g7CisKKwl1ZGMgPSBjb250YWluZXJfb2YoZ2FkZ2V0LCBzdHJ1Y3Qgb21hcF91ZGMsIGdhZGdldCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJaWYgKHVkYy0+ZGV2c3RhdCAmIFVEQ19TVVMpIHsKKwkJLyogTk9URTogIE9URyBzcGVjIGVycmF0dW0gc2F5cyB0aGF0IE9URyBkZXZpY2VzIG1heQorCQkgKiBpc3N1ZSB3YWtldXBzIHdpdGhvdXQgaG9zdCBlbmFibGUuCisJCSAqLworCQlpZiAodWRjLT5kZXZzdGF0ICYgKFVEQ19CX0hOUF9FTkFCTEV8VURDX1JfV0tfT0spKSB7CisJCQlEQkcoInJlbW90ZSB3YWtldXAuLi5cbiIpOworCQkJVURDX1NZU0NPTjJfUkVHID0gVURDX1JNVF9XS1A7CisJCQlyZXR2YWwgPSAwOworCQl9CisKKwkvKiBOT1RFOiAgbm9uLU9URyBzeXN0ZW1zIG1heSB1c2UgU1JQIFRPTy4uLiAqLworCX0gZWxzZSBpZiAoISh1ZGMtPmRldnN0YXQgJiBVRENfQVRUKSkgeworCQlpZiAodWRjLT50cmFuc2NlaXZlcikKKwkJCXJldHZhbCA9IG90Z19zdGFydF9zcnAodWRjLT50cmFuc2NlaXZlcik7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludAorb21hcF9zZXRfc2VsZnBvd2VyZWQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwgaW50IGlzX3NlbGZwb3dlcmVkKQoreworCXN0cnVjdCBvbWFwX3VkYwkqdWRjOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJdTE2CQlzeXNjb24xOworCisJdWRjID0gY29udGFpbmVyX29mKGdhZGdldCwgc3RydWN0IG9tYXBfdWRjLCBnYWRnZXQpOworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKwlzeXNjb24xID0gVURDX1NZU0NPTjFfUkVHOworCWlmIChpc19zZWxmcG93ZXJlZCkKKwkJc3lzY29uMSB8PSBVRENfU0VMRl9QV1I7CisJZWxzZQorCQlzeXNjb24xICY9IH5VRENfU0VMRl9QV1I7CisJVURDX1NZU0NPTjFfUkVHID0gc3lzY29uMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNhbl9wdWxsdXAoc3RydWN0IG9tYXBfdWRjICp1ZGMpCit7CisJcmV0dXJuIHVkYy0+ZHJpdmVyICYmIHVkYy0+c29mdGNvbm5lY3QgJiYgdWRjLT52YnVzX2FjdGl2ZTsKK30KKworc3RhdGljIHZvaWQgcHVsbHVwX2VuYWJsZShzdHJ1Y3Qgb21hcF91ZGMgKnVkYykKK3sKKwlVRENfU1lTQ09OMV9SRUcgfD0gVURDX1BVTExVUF9FTjsKKyNpZm5kZWYgQ09ORklHX1VTQl9PVEcKKwlpZiAoIWNwdV9pc19vbWFwMTV4eCgpKQorCQlPVEdfQ1RSTF9SRUcgfD0gT1RHX0JTRVNTVkxEOworI2VuZGlmCisJVURDX0lSUV9FTl9SRUcgPSBVRENfRFNfQ0hHX0lFOworfQorCitzdGF0aWMgdm9pZCBwdWxsdXBfZGlzYWJsZShzdHJ1Y3Qgb21hcF91ZGMgKnVkYykKK3sKKyNpZm5kZWYgQ09ORklHX1VTQl9PVEcKKwlpZiAoIWNwdV9pc19vbWFwMTV4eCgpKQorCQlPVEdfQ1RSTF9SRUcgJj0gfk9UR19CU0VTU1ZMRDsKKyNlbmRpZgorCVVEQ19JUlFfRU5fUkVHID0gVURDX0RTX0NIR19JRTsKKwlVRENfU1lTQ09OMV9SRUcgJj0gflVEQ19QVUxMVVBfRU47Cit9CisKKy8qCisgKiBDYWxsZWQgYnkgd2hhdGV2ZXIgZGV0ZWN0cyBWQlVTIHNlc3Npb25zOiAgZXh0ZXJuYWwgdHJhbnNjZWl2ZXIKKyAqIGRyaXZlciwgb3IgbWF5YmUgR1BJTzAgVkJVUyBJUlEuICBNYXkgcmVxdWVzdCA0OCBNSHogY2xvY2suCisgKi8KK3N0YXRpYyBpbnQgb21hcF92YnVzX3Nlc3Npb24oc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwgaW50IGlzX2FjdGl2ZSkKK3sKKwlzdHJ1Y3Qgb21hcF91ZGMJKnVkYzsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJdWRjID0gY29udGFpbmVyX29mKGdhZGdldCwgc3RydWN0IG9tYXBfdWRjLCBnYWRnZXQpOworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKwlWREJHKCJWQlVTICVzXG4iLCBpc19hY3RpdmUgPyAib24iIDogIm9mZiIpOworCXVkYy0+dmJ1c19hY3RpdmUgPSAoaXNfYWN0aXZlICE9IDApOworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgeworCQkvKiAic29mdHdhcmUiIGRldGVjdCwgaWdub3JlZCBpZiAhVkJVU19NT0RFXzE1MTAgKi8KKwkJaWYgKGlzX2FjdGl2ZSkKKwkJCUZVTkNfTVVYX0NUUkxfMF9SRUcgfD0gVkJVU19DVFJMXzE1MTA7CisJCWVsc2UKKwkJCUZVTkNfTVVYX0NUUkxfMF9SRUcgJj0gflZCVVNfQ1RSTF8xNTEwOworCX0KKwlpZiAoY2FuX3B1bGx1cCh1ZGMpKQorCQlwdWxsdXBfZW5hYmxlKHVkYyk7CisJZWxzZQorCQlwdWxsdXBfZGlzYWJsZSh1ZGMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXBfdmJ1c19kcmF3KHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIHVuc2lnbmVkIG1BKQoreworCXN0cnVjdCBvbWFwX3VkYwkqdWRjOworCisJdWRjID0gY29udGFpbmVyX29mKGdhZGdldCwgc3RydWN0IG9tYXBfdWRjLCBnYWRnZXQpOworCWlmICh1ZGMtPnRyYW5zY2VpdmVyKQorCQlyZXR1cm4gb3RnX3NldF9wb3dlcih1ZGMtPnRyYW5zY2VpdmVyLCBtQSk7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgaW50IG9tYXBfcHVsbHVwKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGludCBpc19vbikKK3sKKwlzdHJ1Y3Qgb21hcF91ZGMJKnVkYzsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJdWRjID0gY29udGFpbmVyX29mKGdhZGdldCwgc3RydWN0IG9tYXBfdWRjLCBnYWRnZXQpOworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKwl1ZGMtPnNvZnRjb25uZWN0ID0gKGlzX29uICE9IDApOworCWlmIChjYW5fcHVsbHVwKHVkYykpCisJCXB1bGx1cF9lbmFibGUodWRjKTsKKwllbHNlCisJCXB1bGx1cF9kaXNhYmxlKHVkYyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9vcHMgb21hcF9nYWRnZXRfb3BzID0geworCS5nZXRfZnJhbWUJCT0gb21hcF9nZXRfZnJhbWUsCisJLndha2V1cAkJCT0gb21hcF93YWtldXAsCisJLnNldF9zZWxmcG93ZXJlZAk9IG9tYXBfc2V0X3NlbGZwb3dlcmVkLAorCS52YnVzX3Nlc3Npb24JCT0gb21hcF92YnVzX3Nlc3Npb24sCisJLnZidXNfZHJhdwkJPSBvbWFwX3ZidXNfZHJhdywKKwkucHVsbHVwCQkJPSBvbWFwX3B1bGx1cCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGRlcXVldWUgQUxMIHJlcXVlc3RzOyBjYWxsZXIgaG9sZHMgdWRjLT5sb2NrICovCitzdGF0aWMgdm9pZCBudWtlKHN0cnVjdCBvbWFwX2VwICplcCwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3Qgb21hcF9yZXEJKnJlcTsKKworCWVwLT5zdG9wcGVkID0gMTsKKworCWlmICh1c2VfZG1hICYmIGVwLT5kbWFfY2hhbm5lbCkKKwkJZG1hX2NoYW5uZWxfcmVsZWFzZShlcCk7CisKKwl1c2VfZXAoZXAsIDApOworCVVEQ19DVFJMX1JFRyA9IFVEQ19DTFJfRVA7CisJaWYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYmIGVwLT5ibUF0dHJpYnV0ZXMgIT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykKKwkJVURDX0NUUkxfUkVHID0gVURDX1NFVF9IQUxUOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBvbWFwX3JlcSwgcXVldWUpOworCQlkb25lKGVwLCByZXEsIHN0YXR1cyk7CisJfQorfQorCisvKiBjYWxsZXIgaG9sZHMgdWRjLT5sb2NrICovCitzdGF0aWMgdm9pZCB1ZGNfcXVpZXNjZShzdHJ1Y3Qgb21hcF91ZGMgKnVkYykKK3sKKwlzdHJ1Y3Qgb21hcF9lcAkqZXA7CisKKwl1ZGMtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCW51a2UoJnVkYy0+ZXBbMF0sIC1FU0hVVERPV04pOworCWxpc3RfZm9yX2VhY2hfZW50cnkgKGVwLCAmdWRjLT5nYWRnZXQuZXBfbGlzdCwgZXAuZXBfbGlzdCkKKwkJbnVrZShlcCwgLUVTSFVURE9XTik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9vdGcoc3RydWN0IG9tYXBfdWRjICp1ZGMpCit7CisJdTE2CWRldnN0YXQ7CisKKwlpZiAoIXVkYy0+Z2FkZ2V0LmlzX290ZykKKwkJcmV0dXJuOworCisJaWYgKE9UR19DVFJMX1JFRyAmIE9UR19JRCkKKwkJZGV2c3RhdCA9IFVEQ19ERVZTVEFUX1JFRzsKKwllbHNlCisJCWRldnN0YXQgPSAwOworCisJdWRjLT5nYWRnZXQuYl9obnBfZW5hYmxlID0gISEoZGV2c3RhdCAmIFVEQ19CX0hOUF9FTkFCTEUpOworCXVkYy0+Z2FkZ2V0LmFfaG5wX3N1cHBvcnQgPSAhIShkZXZzdGF0ICYgVURDX0FfSE5QX1NVUFBPUlQpOworCXVkYy0+Z2FkZ2V0LmFfYWx0X2hucF9zdXBwb3J0ID0gISEoZGV2c3RhdCAmIFVEQ19BX0FMVF9ITlBfU1VQUE9SVCk7CisKKwkvKiBFbmFibGUgSE5QIGVhcmx5LCBhdm9pZGluZyByYWNlcyBvbiBzdXNwZW5kIGlycSBwYXRoLgorCSAqIEFTU1VNRVMgT1RHIHN0YXRlIG1hY2hpbmUgQl9CVVNfUkVRIGlucHV0IGlzIHRydWUuCisJICovCisJaWYgKHVkYy0+Z2FkZ2V0LmJfaG5wX2VuYWJsZSkKKwkJT1RHX0NUUkxfUkVHID0gKE9UR19DVFJMX1JFRyB8IE9UR19CX0hOUEVOIHwgT1RHX0JfQlVTUkVRKQorCQkJCSYgfk9UR19QVUxMVVA7Cit9CisKK3N0YXRpYyB2b2lkIGVwMF9pcnEoc3RydWN0IG9tYXBfdWRjICp1ZGMsIHUxNiBpcnFfc3JjKQoreworCXN0cnVjdCBvbWFwX2VwCSplcDAgPSAmdWRjLT5lcFswXTsKKwlzdHJ1Y3Qgb21hcF9yZXEJKnJlcSA9IDA7CisKKwllcDAtPmlycXMrKzsKKworCS8qIENsZWFyIGFueSBwZW5kaW5nIHJlcXVlc3RzIGFuZCB0aGVuIHNjcnViIGFueSByeC90eCBzdGF0ZQorCSAqIGJlZm9yZSBzdGFydGluZyB0byBoYW5kbGUgdGhlIFNFVFVQIHJlcXVlc3QuCisJICovCisJaWYgKGlycV9zcmMgJiBVRENfU0VUVVApIHsKKwkJdTE2CWFjayA9IGlycV9zcmMgJiAoVURDX0VQMF9UWHxVRENfRVAwX1JYKTsKKworCQludWtlKGVwMCwgMCk7CisJCWlmIChhY2spIHsKKwkJCVVEQ19JUlFfU1JDX1JFRyA9IGFjazsKKwkJCWlycV9zcmMgPSBVRENfU0VUVVA7CisJCX0KKwl9CisKKwkvKiBJTi9PVVQgcGFja2V0cyBtZWFuIHdlJ3JlIGluIHRoZSBEQVRBIG9yIFNUQVRVUyBzdGFnZS4gIAorCSAqIFRoaXMgZHJpdmVyIHVzZXMgb25seSB1c2VzIHByb3RvY29sIHN0YWxscyAoZXAwIG5ldmVyIGhhbHRzKSwKKwkgKiBhbmQgaWYgd2UgZ290IHRoaXMgZmFyIHRoZSBnYWRnZXQgZHJpdmVyIGFscmVhZHkgaGFkIGEKKwkgKiBjaGFuY2UgdG8gc3RhbGwuICBUcmllcyB0byBiZSBmb3JnaXZpbmcgb2YgaG9zdCBvZGRpdGllcy4KKwkgKgorCSAqIE5PVEU6ICB0aGUgbGFzdCBjaGFuY2UgZ2FkZ2V0IGRyaXZlcnMgaGF2ZSB0byBzdGFsbCBjb250cm9sCisJICogcmVxdWVzdHMgaXMgZHVyaW5nIHRoZWlyIHJlcXVlc3QgY29tcGxldGlvbiBjYWxsYmFjay4KKwkgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJmVwMC0+cXVldWUpKQorCQlyZXEgPSBjb250YWluZXJfb2YoZXAwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3Qgb21hcF9yZXEsIHF1ZXVlKTsKKworCS8qIElOID09IFRYIHRvIGhvc3QgKi8KKwlpZiAoaXJxX3NyYyAmIFVEQ19FUDBfVFgpIHsKKwkJaW50CXN0YXQ7CisKKwkJVURDX0lSUV9TUkNfUkVHID0gVURDX0VQMF9UWDsKKwkJVURDX0VQX05VTV9SRUcgPSBVRENfRVBfU0VMfFVEQ19FUF9ESVI7CisJCXN0YXQgPSBVRENfU1RBVF9GTEdfUkVHOworCQlpZiAoc3RhdCAmIFVEQ19BQ0spIHsKKwkJCWlmICh1ZGMtPmVwMF9pbikgeworCQkJCS8qIHdyaXRlIG5leHQgSU4gcGFja2V0IGZyb20gcmVzcG9uc2UsCisJCQkJICogb3Igc2V0IHVwIHRoZSBzdGF0dXMgc3RhZ2UuCisJCQkJICovCisJCQkJaWYgKHJlcSkKKwkJCQkJc3RhdCA9IHdyaXRlX2ZpZm8oZXAwLCByZXEpOworCQkJCVVEQ19FUF9OVU1fUkVHID0gVURDX0VQX0RJUjsKKwkJCQlpZiAoIXJlcSAmJiB1ZGMtPmVwMF9wZW5kaW5nKSB7CisJCQkJCVVEQ19FUF9OVU1fUkVHID0gVURDX0VQX1NFTDsKKwkJCQkJVURDX0NUUkxfUkVHID0gVURDX0NMUl9FUDsKKwkJCQkJVURDX0NUUkxfUkVHID0gVURDX1NFVF9GSUZPX0VOOworCQkJCQlVRENfRVBfTlVNX1JFRyA9IDA7CisJCQkJCXVkYy0+ZXAwX3BlbmRpbmcgPSAwOworCQkJCX0gLyogZWxzZTogIDYgd2FpdCBzdGF0ZXMgYmVmb3JlIGl0J2xsIHR4ICovCisJCQl9IGVsc2UgeworCQkJCS8qIGFjayBzdGF0dXMgc3RhZ2Ugb2YgT1VUIHRyYW5zZmVyICovCisJCQkJVURDX0VQX05VTV9SRUcgPSBVRENfRVBfRElSOworCQkJCWlmIChyZXEpCisJCQkJCWRvbmUoZXAwLCByZXEsIDApOworCQkJfQorCQkJcmVxID0gMDsKKwkJfSBlbHNlIGlmIChzdGF0ICYgVURDX1NUQUxMKSB7CisJCQlVRENfQ1RSTF9SRUcgPSBVRENfQ0xSX0hBTFQ7CisJCQlVRENfRVBfTlVNX1JFRyA9IFVEQ19FUF9ESVI7CisJCX0gZWxzZSB7CisJCQlVRENfRVBfTlVNX1JFRyA9IFVEQ19FUF9ESVI7CisJCX0KKwl9CisKKwkvKiBPVVQgPT0gUlggZnJvbSBob3N0ICovCisJaWYgKGlycV9zcmMgJiBVRENfRVAwX1JYKSB7CisJCWludAlzdGF0OworCisJCVVEQ19JUlFfU1JDX1JFRyA9IFVEQ19FUDBfUlg7CisJCVVEQ19FUF9OVU1fUkVHID0gVURDX0VQX1NFTDsKKwkJc3RhdCA9IFVEQ19TVEFUX0ZMR19SRUc7CisJCWlmIChzdGF0ICYgVURDX0FDSykgeworCQkJaWYgKCF1ZGMtPmVwMF9pbikgeworCQkJCXN0YXQgPSAwOworCQkJCS8qIHJlYWQgbmV4dCBPVVQgcGFja2V0IG9mIHJlcXVlc3QsIG1heWJlCisJCQkJICogcmVhY3Rpdml0aW5nIHRoZSBmaWZvOyBzdGFsbCBvbiBlcnJvcnMuCisJCQkJICovCisJCQkJaWYgKCFyZXEgfHwgKHN0YXQgPSByZWFkX2ZpZm8oZXAwLCByZXEpKSA8IDApIHsKKwkJCQkJVURDX1NZU0NPTjJfUkVHID0gVURDX1NUQUxMX0NNRDsKKwkJCQkJdWRjLT5lcDBfcGVuZGluZyA9IDA7CisJCQkJCXN0YXQgPSAwOworCQkJCX0gZWxzZSBpZiAoc3RhdCA9PSAwKQorCQkJCQlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0ZJRk9fRU47CisJCQkJVURDX0VQX05VTV9SRUcgPSAwOworCQkJCQorCQkJCS8qIGFjdGl2YXRlIHN0YXR1cyBzdGFnZSAqLworCQkJCWlmIChzdGF0ID09IDEpIHsKKwkJCQkJZG9uZShlcDAsIHJlcSwgMCk7CisJCQkJCS8qIHRoYXQgbWF5IGhhdmUgU1RBTExlZCBlcDAuLi4gKi8KKwkJCQkJVURDX0VQX05VTV9SRUcgPSBVRENfRVBfU0VMfFVEQ19FUF9ESVI7CisJCQkJCVVEQ19DVFJMX1JFRyA9IFVEQ19DTFJfRVA7CisJCQkJCVVEQ19DVFJMX1JFRyA9IFVEQ19TRVRfRklGT19FTjsKKwkJCQkJVURDX0VQX05VTV9SRUcgPSBVRENfRVBfRElSOworCQkJCQl1ZGMtPmVwMF9wZW5kaW5nID0gMDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIGFjayBzdGF0dXMgc3RhZ2Ugb2YgSU4gdHJhbnNmZXIgKi8KKwkJCQlVRENfRVBfTlVNX1JFRyA9IDA7CisJCQkJaWYgKHJlcSkKKwkJCQkJZG9uZShlcDAsIHJlcSwgMCk7CisJCQl9CisJCX0gZWxzZSBpZiAoc3RhdCAmIFVEQ19TVEFMTCkgeworCQkJVURDX0NUUkxfUkVHID0gVURDX0NMUl9IQUxUOworCQkJVURDX0VQX05VTV9SRUcgPSAwOworCQl9IGVsc2UgeworCQkJVURDX0VQX05VTV9SRUcgPSAwOworCQl9CisJfQorCisJLyogU0VUVVAgc3RhcnRzIGFsbCBjb250cm9sIHRyYW5zZmVycyAqLworCWlmIChpcnFfc3JjICYgVURDX1NFVFVQKSB7CisJCXVuaW9uIHUgeworCQkJdTE2CQkJd29yZFs0XTsKKwkJCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJcjsKKwkJfSB1OworCQlpbnQJCQlzdGF0dXMgPSAtRUlOVkFMOworCQlzdHJ1Y3Qgb21hcF9lcAkJKmVwOworCisJCS8qIHJlYWQgdGhlIChsYXRlc3QpIFNFVFVQIG1lc3NhZ2UgKi8KKwkJZG8geworCQkJVURDX0VQX05VTV9SRUcgPSBVRENfU0VUVVBfU0VMOworCQkJLyogdHdvIGJ5dGVzIGF0IGEgdGltZSAqLworCQkJdS53b3JkWzBdID0gVURDX0RBVEFfUkVHOworCQkJdS53b3JkWzFdID0gVURDX0RBVEFfUkVHOworCQkJdS53b3JkWzJdID0gVURDX0RBVEFfUkVHOworCQkJdS53b3JkWzNdID0gVURDX0RBVEFfUkVHOworCQkJVURDX0VQX05VTV9SRUcgPSAwOworCQl9IHdoaWxlIChVRENfSVJRX1NSQ19SRUcgJiBVRENfU0VUVVApOworCQlsZTE2X3RvX2NwdXMgKCZ1LnIud1ZhbHVlKTsKKwkJbGUxNl90b19jcHVzICgmdS5yLndJbmRleCk7CisJCWxlMTZfdG9fY3B1cyAoJnUuci53TGVuZ3RoKTsKKworCQkvKiBEZWxlZ2F0ZSBhbG1vc3QgYWxsIGNvbnRyb2wgcmVxdWVzdHMgdG8gdGhlIGdhZGdldCBkcml2ZXIsCisJCSAqIGV4Y2VwdCBmb3IgYSBoYW5kZnVsIG9mIGNoOSBzdGF0dXMvZmVhdHVyZSByZXF1ZXN0cyB0aGF0CisJCSAqIGhhcmR3YXJlIGRvZXNuJ3QgYXV0b2RlY29kZSBfYW5kXyB0aGUgZ2FkZ2V0IEFQSSBoaWRlcy4KKwkJICovCisJCXVkYy0+ZXAwX2luID0gKHUuci5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKSAhPSAwOworCQl1ZGMtPmVwMF9zZXRfY29uZmlnID0gMDsKKwkJdWRjLT5lcDBfcGVuZGluZyA9IDE7CisJCWVwMC0+c3RvcHBlZCA9IDA7CisJCWVwMC0+YWNrd2FpdCA9IDA7CisJCXN3aXRjaCAodS5yLmJSZXF1ZXN0KSB7CisJCWNhc2UgVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTjoKKwkJCS8qIHVkYyBuZWVkcyB0byBrbm93IHdoZW4gZXAgIT0gMCBpcyB2YWxpZCAqLworCQkJaWYgKHUuci5iUmVxdWVzdFR5cGUgIT0gVVNCX1JFQ0lQX0RFVklDRSkKKwkJCQlnb3RvIGRlbGVnYXRlOworCQkJaWYgKHUuci53TGVuZ3RoICE9IDApCisJCQkJZ290byBkb19zdGFsbDsKKwkJCXVkYy0+ZXAwX3NldF9jb25maWcgPSAxOworCQkJdWRjLT5lcDBfcmVzZXRfY29uZmlnID0gKHUuci53VmFsdWUgPT0gMCk7CisJCQlWREJHKCJzZXQgY29uZmlnICVkXG4iLCB1LnIud1ZhbHVlKTsKKworCQkJLyogdXBkYXRlIHVkYyBOT1cgc2luY2UgZ2FkZ2V0IGRyaXZlciBtYXkgc3RhcnQKKwkJCSAqIHF1ZXVlaW5nIHJlcXVlc3RzIGltbWVkaWF0ZWx5OyBjbGVhciBjb25maWcKKwkJCSAqIGxhdGVyIGlmIGl0IGZhaWxzIHRoZSByZXF1ZXN0LgorCQkJICovCisJCQlpZiAodWRjLT5lcDBfcmVzZXRfY29uZmlnKQorCQkJCVVEQ19TWVNDT04yX1JFRyA9IFVEQ19DTFJfQ0ZHOworCQkJZWxzZQorCQkJCVVEQ19TWVNDT04yX1JFRyA9IFVEQ19ERVZfQ0ZHOworCQkJdXBkYXRlX290Zyh1ZGMpOworCQkJZ290byBkZWxlZ2F0ZTsKKwkJY2FzZSBVU0JfUkVRX0NMRUFSX0ZFQVRVUkU6CisJCQkvKiBjbGVhciBlbmRwb2ludCBoYWx0ICovCisJCQlpZiAodS5yLmJSZXF1ZXN0VHlwZSAhPSBVU0JfUkVDSVBfRU5EUE9JTlQpCisJCQkJZ290byBkZWxlZ2F0ZTsKKwkJCWlmICh1LnIud1ZhbHVlICE9IFVTQl9FTkRQT0lOVF9IQUxUCisJCQkJCXx8IHUuci53TGVuZ3RoICE9IDApCisJCQkJZ290byBkb19zdGFsbDsKKwkJCWVwID0gJnVkYy0+ZXBbdS5yLndJbmRleCAmIDB4Zl07CisJCQlpZiAoZXAgIT0gZXAwKSB7CisJCQkJaWYgKHUuci53SW5kZXggJiBVU0JfRElSX0lOKQorCQkJCQllcCArPSAxNjsKKwkJCQlpZiAoZXAtPmJtQXR0cmlidXRlcyA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DCisJCQkJCQl8fCAhZXAtPmRlc2MpCisJCQkJCWdvdG8gZG9fc3RhbGw7CisJCQkJdXNlX2VwKGVwLCAwKTsKKwkJCQlVRENfQ1RSTF9SRUcgPSBVRENfUkVTRVRfRVA7CisJCQkJZXAtPmFja3dhaXQgPSAwOworCQkJCWlmICghKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikpIHsKKwkJCQkJVURDX0NUUkxfUkVHID0gVURDX1NFVF9GSUZPX0VOOworCQkJCQllcC0+YWNrd2FpdCA9IDEgKyBlcC0+ZG91YmxlX2J1ZjsKKwkJCQl9CisJCQl9CisJCQlWREJHKCIlcyBoYWx0IGNsZWFyZWQgYnkgaG9zdFxuIiwgZXAtPm5hbWUpOworCQkJZ290byBlcDBvdXRfc3RhdHVzX3N0YWdlOworCQljYXNlIFVTQl9SRVFfU0VUX0ZFQVRVUkU6CisJCQkvKiBzZXQgZW5kcG9pbnQgaGFsdCAqLworCQkJaWYgKHUuci5iUmVxdWVzdFR5cGUgIT0gVVNCX1JFQ0lQX0VORFBPSU5UKQorCQkJCWdvdG8gZGVsZWdhdGU7CisJCQlpZiAodS5yLndWYWx1ZSAhPSBVU0JfRU5EUE9JTlRfSEFMVAorCQkJCQl8fCB1LnIud0xlbmd0aCAhPSAwKQorCQkJCWdvdG8gZG9fc3RhbGw7CisJCQllcCA9ICZ1ZGMtPmVwW3Uuci53SW5kZXggJiAweGZdOworCQkJaWYgKHUuci53SW5kZXggJiBVU0JfRElSX0lOKQorCQkJCWVwICs9IDE2OworCQkJaWYgKGVwLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQworCQkJCQl8fCBlcCA9PSBlcDAgfHwgIWVwLT5kZXNjKQorCQkJCWdvdG8gZG9fc3RhbGw7CisJCQlpZiAodXNlX2RtYSAmJiBlcC0+aGFzX2RtYSkgeworCQkJCS8qIHRoaXMgaGFzIHJ1ZGUgc2lkZS1lZmZlY3RzIChhYm9ydHMpIGFuZAorCQkJCSAqIGNhbid0IHJlYWxseSB3b3JrIGlmIERNQS1JTiBpcyBhY3RpdmUKKwkJCQkgKi8KKwkJCQlEQkcoIiVzIGhvc3Qgc2V0X2hhbHQsIE5ZRVQgXG4iLCBlcC0+bmFtZSk7CisJCQkJZ290byBkb19zdGFsbDsKKwkJCX0KKwkJCXVzZV9lcChlcCwgMCk7CisJCQkvKiBjYW4ndCBoYWx0IGlmIGZpZm8gaXNuJ3QgZW1wdHkuLi4gKi8KKwkJCVVEQ19DVFJMX1JFRyA9IFVEQ19DTFJfRVA7CisJCQlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0hBTFQ7CisJCQlWREJHKCIlcyBoYWx0ZWQgYnkgaG9zdFxuIiwgZXAtPm5hbWUpOworZXAwb3V0X3N0YXR1c19zdGFnZToKKwkJCXN0YXR1cyA9IDA7CisJCQlVRENfRVBfTlVNX1JFRyA9IFVEQ19FUF9TRUx8VURDX0VQX0RJUjsKKwkJCVVEQ19DVFJMX1JFRyA9IFVEQ19DTFJfRVA7CisJCQlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0ZJRk9fRU47CisJCQlVRENfRVBfTlVNX1JFRyA9IFVEQ19FUF9ESVI7CisJCQl1ZGMtPmVwMF9wZW5kaW5nID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9SRVFfR0VUX1NUQVRVUzoKKwkJCS8qIHJldHVybiBpbnRlcmZhY2Ugc3RhdHVzLiAgaWYgd2Ugd2VyZSBwZWRhbnRpYywKKwkJCSAqIHdlJ2QgZGV0ZWN0IG5vbi1leGlzdGVudCBpbnRlcmZhY2VzLCBhbmQgc3RhbGwuCisJCQkgKi8KKwkJCWlmICh1LnIuYlJlcXVlc3RUeXBlCisJCQkJCSE9IChVU0JfRElSX0lOfFVTQl9SRUNJUF9JTlRFUkZBQ0UpKQorCQkJCWdvdG8gZGVsZWdhdGU7CisJCQkvKiByZXR1cm4gdHdvIHplcm8gYnl0ZXMgKi8KKwkJCVVEQ19FUF9OVU1fUkVHID0gVURDX0VQX1NFTHxVRENfRVBfRElSOworCQkJVURDX0RBVEFfUkVHID0gMDsKKwkJCVVEQ19DVFJMX1JFRyA9IFVEQ19TRVRfRklGT19FTjsKKwkJCVVEQ19FUF9OVU1fUkVHID0gVURDX0VQX0RJUjsKKwkJCXN0YXR1cyA9IDA7CisJCQlWREJHKCJHRVRfU1RBVFVTLCBpbnRlcmZhY2UgJWRcbiIsIHUuci53SW5kZXgpOworCQkJLyogbmV4dCwgc3RhdHVzIHN0YWdlICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKK2RlbGVnYXRlOgorCQkJLyogYWN0aXZhdGUgdGhlIGVwMG91dCBmaWZvIHJpZ2h0IGF3YXkgKi8KKwkJCWlmICghdWRjLT5lcDBfaW4gJiYgdS5yLndMZW5ndGgpIHsKKwkJCQlVRENfRVBfTlVNX1JFRyA9IDA7CisJCQkJVURDX0NUUkxfUkVHID0gVURDX1NFVF9GSUZPX0VOOworCQkJfQorCisJCQkvKiBnYWRnZXQgZHJpdmVycyBzZWUgY2xhc3MvdmVuZG9yIHNwZWNpZmljIHJlcXVlc3RzLAorCQkJICoge1NFVCxHRVR9X3tJTlRFUkZBQ0UsREVTQ1JJUFRPUixDT05GSUdVUkFUSU9OfSwKKwkJCSAqIGFuZCBtb3JlCisJCQkgKi8KKwkJCVZEQkcoIlNFVFVQICUwMnguJTAyeCB2JTA0eCBpJTA0eCBsJTA0eFxuIiwKKwkJCQl1LnIuYlJlcXVlc3RUeXBlLCB1LnIuYlJlcXVlc3QsCisJCQkJdS5yLndWYWx1ZSwgdS5yLndJbmRleCwgdS5yLndMZW5ndGgpOworCisJCQkvKiBUaGUgZ2FkZ2V0IGRyaXZlciBtYXkgcmV0dXJuIGFuIGVycm9yIGhlcmUsCisJCQkgKiBjYXVzaW5nIGFuIGltbWVkaWF0ZSBwcm90b2NvbCBzdGFsbC4KKwkJCSAqCisJCQkgKiBFbHNlIGl0IG11c3QgaXNzdWUgYSByZXNwb25zZSwgZWl0aGVyIHF1ZXVlaW5nIGEKKwkJCSAqIHJlc3BvbnNlIGJ1ZmZlciBmb3IgdGhlIERBVEEgc3RhZ2UsIG9yIGhhbHRpbmcgZXAwCisJCQkgKiAoY2F1c2luZyBhIHByb3RvY29sIHN0YWxsLCBub3QgYSByZWFsIGhhbHQpLiAgQQorCQkJICogemVybyBsZW5ndGggYnVmZmVyIG1lYW5zIG5vIERBVEEgc3RhZ2UuCisJCQkgKgorCQkJICogSXQncyBmaW5lIHRvIGlzc3VlIHRoYXQgcmVzcG9uc2UgYWZ0ZXIgdGhlIHNldHVwKCkKKwkJCSAqIGNhbGwgcmV0dXJucywgYW5kIHRoaXMgSVJRIHdhcyBoYW5kbGVkLgorCQkJICovCisJCQl1ZGMtPmVwMF9zZXR1cCA9IDE7CisJCQlzcGluX3VubG9jaygmdWRjLT5sb2NrKTsKKwkJCXN0YXR1cyA9IHVkYy0+ZHJpdmVyLT5zZXR1cCAoJnVkYy0+Z2FkZ2V0LCAmdS5yKTsKKwkJCXNwaW5fbG9jaygmdWRjLT5sb2NrKTsKKwkJCXVkYy0+ZXAwX3NldHVwID0gMDsKKwkJfQorCisJCWlmIChzdGF0dXMgPCAwKSB7Citkb19zdGFsbDoKKwkJCVZEQkcoInJlcSAlMDJ4LiUwMnggcHJvdG9jb2wgU1RBTEw7IHN0YXQgJWRcbiIsCisJCQkJCXUuci5iUmVxdWVzdFR5cGUsIHUuci5iUmVxdWVzdCwgc3RhdHVzKTsKKwkJCWlmICh1ZGMtPmVwMF9zZXRfY29uZmlnKSB7CisJCQkJaWYgKHVkYy0+ZXAwX3Jlc2V0X2NvbmZpZykKKwkJCQkJV0FSTigiZXJyb3IgcmVzZXR0aW5nIGNvbmZpZz9cbiIpOworCQkJCWVsc2UKKwkJCQkJVURDX1NZU0NPTjJfUkVHID0gVURDX0NMUl9DRkc7CisJCQl9CisJCQlVRENfU1lTQ09OMl9SRUcgPSBVRENfU1RBTExfQ01EOworCQkJdWRjLT5lcDBfcGVuZGluZyA9IDA7CisJCX0KKwl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgT1RHX0ZMQUdTIChVRENfQl9ITlBfRU5BQkxFfFVEQ19BX0hOUF9TVVBQT1JUfFVEQ19BX0FMVF9ITlBfU1VQUE9SVCkKKworc3RhdGljIHZvaWQgZGV2c3RhdGVfaXJxKHN0cnVjdCBvbWFwX3VkYyAqdWRjLCB1MTYgaXJxX3NyYykKK3sKKwl1MTYJZGV2c3RhdCwgY2hhbmdlOworCisJZGV2c3RhdCA9IFVEQ19ERVZTVEFUX1JFRzsKKwljaGFuZ2UgPSBkZXZzdGF0IF4gdWRjLT5kZXZzdGF0OworCXVkYy0+ZGV2c3RhdCA9IGRldnN0YXQ7CisKKwlpZiAoY2hhbmdlICYgKFVEQ19VU0JfUkVTRVR8VURDX0FUVCkpIHsKKwkJdWRjX3F1aWVzY2UodWRjKTsKKworCQlpZiAoY2hhbmdlICYgVURDX0FUVCkgeworCQkJLyogZHJpdmVyIGZvciBhbnkgZXh0ZXJuYWwgdHJhbnNjZWl2ZXIgd2lsbAorCQkJICogaGF2ZSBjYWxsZWQgb21hcF92YnVzX3Nlc3Npb24oKSBhbHJlYWR5CisJCQkgKi8KKwkJCWlmIChkZXZzdGF0ICYgVURDX0FUVCkgeworCQkJCXVkYy0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CisJCQkJVkRCRygiY29ubmVjdFxuIik7CisJCQkJaWYgKCF1ZGMtPnRyYW5zY2VpdmVyKQorCQkJCQlwdWxsdXBfZW5hYmxlKHVkYyk7CisJCQkJLy8gaWYgKGRyaXZlci0+Y29ubmVjdCkgY2FsbCBpdAorCQkJfSBlbHNlIGlmICh1ZGMtPmdhZGdldC5zcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTikgeworCQkJCXVkYy0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047CisJCQkJaWYgKCF1ZGMtPnRyYW5zY2VpdmVyKQorCQkJCQlwdWxsdXBfZGlzYWJsZSh1ZGMpOworCQkJCURCRygiZGlzY29ubmVjdCwgZ2FkZ2V0ICVzXG4iLAorCQkJCQl1ZGMtPmRyaXZlci0+ZHJpdmVyLm5hbWUpOworCQkJCWlmICh1ZGMtPmRyaXZlci0+ZGlzY29ubmVjdCkgeworCQkJCQlzcGluX3VubG9jaygmdWRjLT5sb2NrKTsKKwkJCQkJdWRjLT5kcml2ZXItPmRpc2Nvbm5lY3QoJnVkYy0+Z2FkZ2V0KTsKKwkJCQkJc3Bpbl9sb2NrKCZ1ZGMtPmxvY2spOworCQkJCX0KKwkJCX0KKwkJCWNoYW5nZSAmPSB+VURDX0FUVDsKKwkJfQorCisJCWlmIChjaGFuZ2UgJiBVRENfVVNCX1JFU0VUKSB7CisJCQlpZiAoZGV2c3RhdCAmIFVEQ19VU0JfUkVTRVQpIHsKKwkJCQlWREJHKCJSRVNFVD0xXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJdWRjLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKKwkJCQlJTkZPKCJVU0IgcmVzZXQgZG9uZSwgZ2FkZ2V0ICVzXG4iLAorCQkJCQl1ZGMtPmRyaXZlci0+ZHJpdmVyLm5hbWUpOworCQkJCS8qIGVwMCB0cmFmZmljIGlzIGxlZ2FsIGZyb20gbm93IG9uICovCisJCQkJVURDX0lSUV9FTl9SRUcgPSBVRENfRFNfQ0hHX0lFIHwgVURDX0VQMF9JRTsKKwkJCX0KKwkJCWNoYW5nZSAmPSB+VURDX1VTQl9SRVNFVDsKKwkJfQorCX0KKwlpZiAoY2hhbmdlICYgVURDX1NVUykgeworCQlpZiAodWRjLT5nYWRnZXQuc3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04pIHsKKwkJCS8vIEZJWE1FIHRlbGwgaXNwMTMwMSB0byBzdXNwZW5kL3Jlc3VtZSAoPykKKwkJCWlmIChkZXZzdGF0ICYgVURDX1NVUykgeworCQkJCVZEQkcoInN1c3BlbmRcbiIpOworCQkJCXVwZGF0ZV9vdGcodWRjKTsKKwkJCQkvKiBITlAgY291bGQgYmUgdW5kZXIgd2F5IGFscmVhZHkgKi8KKwkJCQlpZiAodWRjLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwKKwkJCQkJCSYmIHVkYy0+ZHJpdmVyLT5zdXNwZW5kKSB7CisJCQkJCXNwaW5fdW5sb2NrKCZ1ZGMtPmxvY2spOworCQkJCQl1ZGMtPmRyaXZlci0+c3VzcGVuZCgmdWRjLT5nYWRnZXQpOworCQkJCQlzcGluX2xvY2soJnVkYy0+bG9jayk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlWREJHKCJyZXN1bWVcbiIpOworCQkJCWlmICh1ZGMtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfRlVMTAorCQkJCQkJJiYgdWRjLT5kcml2ZXItPnJlc3VtZSkgeworCQkJCQlzcGluX3VubG9jaygmdWRjLT5sb2NrKTsKKwkJCQkJdWRjLT5kcml2ZXItPnJlc3VtZSgmdWRjLT5nYWRnZXQpOworCQkJCQlzcGluX2xvY2soJnVkYy0+bG9jayk7CisJCQkJfQorCQkJfQorCQl9CisJCWNoYW5nZSAmPSB+VURDX1NVUzsKKwl9CisJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSAmJiAoY2hhbmdlICYgT1RHX0ZMQUdTKSkgeworCQl1cGRhdGVfb3RnKHVkYyk7CisJCWNoYW5nZSAmPSB+T1RHX0ZMQUdTOworCX0KKworCWNoYW5nZSAmPSB+KFVEQ19DRkd8VURDX0RFRnxVRENfQUREKTsKKwlpZiAoY2hhbmdlKQorCQlWREJHKCJkZXZzdGF0ICUwM3gsIGlnbm9yZSBjaGFuZ2UgJTAzeFxuIiwKKwkJCWRldnN0YXQsICBjaGFuZ2UpOworCisJVURDX0lSUV9TUkNfUkVHID0gVURDX0RTX0NIRzsKK30KKworc3RhdGljIGlycXJldHVybl90CitvbWFwX3VkY19pcnEoaW50IGlycSwgdm9pZCAqX3VkYywgc3RydWN0IHB0X3JlZ3MgKnIpCit7CisJc3RydWN0IG9tYXBfdWRjCSp1ZGMgPSBfdWRjOworCXUxNgkJaXJxX3NyYzsKKwlpcnFyZXR1cm5fdAlzdGF0dXMgPSBJUlFfTk9ORTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCWlycV9zcmMgPSBVRENfSVJRX1NSQ19SRUc7CisKKwkvKiBEZXZpY2Ugc3RhdGUgY2hhbmdlICh1c2IgY2g5IHN0dWZmKSAqLworCWlmIChpcnFfc3JjICYgVURDX0RTX0NIRykgeworCQlkZXZzdGF0ZV9pcnEoX3VkYywgaXJxX3NyYyk7CisJCXN0YXR1cyA9IElSUV9IQU5ETEVEOworCQlpcnFfc3JjICY9IH5VRENfRFNfQ0hHOworCX0KKworCS8qIEVQMCBjb250cm9sIHRyYW5zZmVycyAqLworCWlmIChpcnFfc3JjICYgKFVEQ19FUDBfUlh8VURDX1NFVFVQfFVEQ19FUDBfVFgpKSB7CisJCWVwMF9pcnEoX3VkYywgaXJxX3NyYyk7CisJCXN0YXR1cyA9IElSUV9IQU5ETEVEOworCQlpcnFfc3JjICY9IH4oVURDX0VQMF9SWHxVRENfU0VUVVB8VURDX0VQMF9UWCk7CisJfQorCisJLyogRE1BIHRyYW5zZmVyIGNvbXBsZXRpb24gKi8KKwlpZiAodXNlX2RtYSAmJiAoaXJxX3NyYyAmIChVRENfVFhOX0RPTkV8VURDX1JYTl9DTlR8VURDX1JYTl9FT1QpKSkgeworCQlkbWFfaXJxKF91ZGMsIGlycV9zcmMpOworCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKKwkJaXJxX3NyYyAmPSB+KFVEQ19UWE5fRE9ORXxVRENfUlhOX0NOVHxVRENfUlhOX0VPVCk7CisJfQorCisJaXJxX3NyYyAmPSB+KFVEQ19TT0Z8VURDX0VQTl9UWHxVRENfRVBOX1JYKTsKKwlpZiAoaXJxX3NyYykKKwkJREJHKCJ1ZGNfaXJxLCB1bmhhbmRsZWQgJTAzeFxuIiwgaXJxX3NyYyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiB3b3JrYXJvdW5kIGZvciBzZWVtaW5nbHktbG9zdCBJUlFzIGZvciBSWCBBQ0tzLi4uICovCisjZGVmaW5lIFBJT19PVVRfVElNRU9VVAkoamlmZmllcyArIEhaLzMpCisjZGVmaW5lIEhBTEZfRlVMTChmKQkoISgoZikmKFVEQ19OT05fSVNPX0ZJRk9fRlVMTHxVRENfTk9OX0lTT19GSUZPX0VNUFRZKSkpCisKK3N0YXRpYyB2b2lkIHBpb19vdXRfdGltZXIodW5zaWduZWQgbG9uZyBfZXApCit7CisJc3RydWN0IG9tYXBfZXAJKmVwID0gKHZvaWQgKikgX2VwOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJdTE2CQlzdGF0X2ZsZzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+dWRjLT5sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpICYmIGVwLT5hY2t3YWl0KSB7CisJCXVzZV9lcChlcCwgMCk7CisJCXN0YXRfZmxnID0gVURDX1NUQVRfRkxHX1JFRzsKKworCQlpZiAoKHN0YXRfZmxnICYgVURDX0FDSykgJiYgKCEoc3RhdF9mbGcgJiBVRENfRklGT19FTikKKwkJCQl8fCAoZXAtPmRvdWJsZV9idWYgJiYgSEFMRl9GVUxMKHN0YXRfZmxnKSkpKSB7CisJCQlzdHJ1Y3Qgb21hcF9yZXEJKnJlcTsKKworCQkJVkRCRygiJXM6IGxvc2UsICUwNHhcbiIsIGVwLT5lcC5uYW1lLCBzdGF0X2ZsZyk7CisJCQlyZXEgPSBjb250YWluZXJfb2YoZXAtPnF1ZXVlLm5leHQsCisJCQkJCXN0cnVjdCBvbWFwX3JlcSwgcXVldWUpOworCQkJVURDX0VQX05VTV9SRUcgPSBlcC0+YkVuZHBvaW50QWRkcmVzcyB8IFVEQ19FUF9TRUw7CisJCQkodm9pZCkgcmVhZF9maWZvKGVwLCByZXEpOworCQkJVURDX0VQX05VTV9SRUcgPSBlcC0+YkVuZHBvaW50QWRkcmVzczsKKwkJCVVEQ19DVFJMX1JFRyA9IFVEQ19TRVRfRklGT19FTjsKKwkJCWVwLT5hY2t3YWl0ID0gMSArIGVwLT5kb3VibGVfYnVmOworCQl9CisJfQorCW1vZF90aW1lcigmZXAtPnRpbWVyLCBQSU9fT1VUX1RJTUVPVVQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT51ZGMtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlycXJldHVybl90CitvbWFwX3VkY19waW9faXJxKGludCBpcnEsIHZvaWQgKl9kZXYsIHN0cnVjdCBwdF9yZWdzICpyKQoreworCXUxNgkJZXBuX3N0YXQsIGlycV9zcmM7CisJaXJxcmV0dXJuX3QJc3RhdHVzID0gSVJRX05PTkU7CisJc3RydWN0IG9tYXBfZXAJKmVwOworCWludAkJZXBudW07CisJc3RydWN0IG9tYXBfdWRjCSp1ZGMgPSBfZGV2OworCXN0cnVjdCBvbWFwX3JlcQkqcmVxOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJZXBuX3N0YXQgPSBVRENfRVBOX1NUQVRfUkVHOworCWlycV9zcmMgPSBVRENfSVJRX1NSQ19SRUc7CisKKwkvKiBoYW5kbGUgT1VUIGZpcnN0LCB0byBhdm9pZCBzb21lIHdhc3RlZnVsIE5BS3MgKi8KKwlpZiAoaXJxX3NyYyAmIFVEQ19FUE5fUlgpIHsKKwkJZXBudW0gPSAoZXBuX3N0YXQgPj4gOCkgJiAweDBmOworCQlVRENfSVJRX1NSQ19SRUcgPSBVRENfRVBOX1JYOworCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKKwkJZXAgPSAmdWRjLT5lcFtlcG51bV07CisJCWVwLT5pcnFzKys7CisKKwkJVURDX0VQX05VTV9SRUcgPSBlcG51bSB8IFVEQ19FUF9TRUw7CisJCWVwLT5mbmYgPSAwOworCQlpZiAoKFVEQ19TVEFUX0ZMR19SRUcgJiBVRENfQUNLKSkgeworCQkJZXAtPmFja3dhaXQtLTsKKwkJCWlmICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQkJCWludCBzdGF0OworCQkJCXJlcSA9IGNvbnRhaW5lcl9vZihlcC0+cXVldWUubmV4dCwKKwkJCQkJCXN0cnVjdCBvbWFwX3JlcSwgcXVldWUpOworCQkJCXN0YXQgPSByZWFkX2ZpZm8oZXAsIHJlcSk7CisJCQkJaWYgKCFlcC0+ZG91YmxlX2J1ZikKKwkJCQkJZXAtPmZuZiA9IDE7CisJCQl9CisJCX0KKwkJLyogbWluIDYgY2xvY2sgZGVsYXkgYmVmb3JlIGNsZWFyaW5nIEVQX1NFTCAuLi4gKi8KKwkJZXBuX3N0YXQgPSBVRENfRVBOX1NUQVRfUkVHOworCQllcG5fc3RhdCA9IFVEQ19FUE5fU1RBVF9SRUc7CisJCVVEQ19FUF9OVU1fUkVHID0gZXBudW07CisKKwkJLyogZW5hYmxpbmcgZmlmbyBfYWZ0ZXJfIGNsZWFyaW5nIEFDSywgY29udHJhcnkgdG8gZG9jcywKKwkJICogcmVkdWNlcyBsb3NzYWdlOyB0aW1lciBzdGlsbCBuZWVkZWQgdGhvdWdoIChzaWdoKS4KKwkJICovCisJCWlmIChlcC0+Zm5mKSB7CisJCQlVRENfQ1RSTF9SRUcgPSBVRENfU0VUX0ZJRk9fRU47CisJCQllcC0+YWNrd2FpdCA9IDEgKyBlcC0+ZG91YmxlX2J1ZjsKKwkJfQorCQltb2RfdGltZXIoJmVwLT50aW1lciwgUElPX09VVF9USU1FT1VUKTsKKwl9CisKKwkvKiB0aGVuIElOIHRyYW5zZmVycyAqLworCWVsc2UgaWYgKGlycV9zcmMgJiBVRENfRVBOX1RYKSB7CisJCWVwbnVtID0gZXBuX3N0YXQgJiAweDBmOworCQlVRENfSVJRX1NSQ19SRUcgPSBVRENfRVBOX1RYOworCQlzdGF0dXMgPSBJUlFfSEFORExFRDsKKwkJZXAgPSAmdWRjLT5lcFsxNiArIGVwbnVtXTsKKwkJZXAtPmlycXMrKzsKKworCQlVRENfRVBfTlVNX1JFRyA9IGVwbnVtIHwgVURDX0VQX0RJUiB8IFVEQ19FUF9TRUw7CisJCWlmICgoVURDX1NUQVRfRkxHX1JFRyAmIFVEQ19BQ0spKSB7CisJCQllcC0+YWNrd2FpdCA9IDA7CisJCQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJCQlyZXEgPSBjb250YWluZXJfb2YoZXAtPnF1ZXVlLm5leHQsCisJCQkJCQlzdHJ1Y3Qgb21hcF9yZXEsIHF1ZXVlKTsKKwkJCQkodm9pZCkgd3JpdGVfZmlmbyhlcCwgcmVxKTsKKwkJCX0KKwkJfQorCQkvKiBtaW4gNiBjbG9jayBkZWxheSBiZWZvcmUgY2xlYXJpbmcgRVBfU0VMIC4uLiAqLworCQllcG5fc3RhdCA9IFVEQ19FUE5fU1RBVF9SRUc7CisJCWVwbl9zdGF0ID0gVURDX0VQTl9TVEFUX1JFRzsKKwkJVURDX0VQX05VTV9SRUcgPSBlcG51bSB8IFVEQ19FUF9ESVI7CisJCS8qIHRoZW4gNiBjbG9ja3MgYmVmb3JlIGl0J2QgdHggKi8KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisjaWZkZWYJVVNFX0lTTworc3RhdGljIGlycXJldHVybl90CitvbWFwX3VkY19pc29faXJxKGludCBpcnEsIHZvaWQgKl9kZXYsIHN0cnVjdCBwdF9yZWdzICpyKQoreworCXN0cnVjdCBvbWFwX3VkYwkqdWRjID0gX2RldjsKKwlzdHJ1Y3Qgb21hcF9lcAkqZXA7CisJaW50CQlwZW5kaW5nID0gMDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOworCisJLyogaGFuZGxlIGFsbCBub24tRE1BIElTTyB0cmFuc2ZlcnMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChlcCwgJnVkYy0+aXNvLCBpc28pIHsKKwkJdTE2CQlzdGF0OworCQlzdHJ1Y3Qgb21hcF9yZXEJKnJlcTsKKworCQlpZiAoZXAtPmhhc19kbWEgfHwgbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkKKwkJCWNvbnRpbnVlOworCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3Qgb21hcF9yZXEsIHF1ZXVlKTsKKworCQl1c2VfZXAoZXAsIFVEQ19FUF9TRUwpOworCQlzdGF0ID0gVURDX1NUQVRfRkxHX1JFRzsKKworCQkvKiBOT1RFOiBsaWtlIHRoZSBvdGhlciBjb250cm9sbGVyIGRyaXZlcnMsIHRoaXMgaXNuJ3QKKwkJICogY3VycmVudGx5IHJlcG9ydGluZyBsb3N0IG9yIGRhbWFnZWQgZnJhbWVzLgorCQkgKi8KKwkJaWYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgeworCQkJaWYgKHN0YXQgJiBVRENfTUlTU19JTikKKwkJCQkvKiBkb25lKGVwLCByZXEsIC1FUFJPVE8pICovOworCQkJZWxzZQorCQkJCXdyaXRlX2ZpZm8oZXAsIHJlcSk7CisJCX0gZWxzZSB7CisJCQlpbnQJc3RhdHVzID0gMDsKKworCQkJaWYgKHN0YXQgJiBVRENfTk9fUlhQQUNLRVQpCisJCQkJc3RhdHVzID0gLUVSRU1PVEVJTzsKKwkJCWVsc2UgaWYgKHN0YXQgJiBVRENfSVNPX0VSUikKKwkJCQlzdGF0dXMgPSAtRUlMU0VROworCQkJZWxzZSBpZiAoc3RhdCAmIFVEQ19EQVRBX0ZMVVNIKQorCQkJCXN0YXR1cyA9IC1FTk9TUjsKKworCQkJaWYgKHN0YXR1cykKKwkJCQkvKiBkb25lKGVwLCByZXEsIHN0YXR1cykgKi87CisJCQllbHNlCisJCQkJcmVhZF9maWZvKGVwLCByZXEpOworCQl9CisJCWRlc2VsZWN0X2VwKCk7CisJCS8qIDYgd2FpdCBzdGF0ZXMgYmVmb3JlIG5leHQgRVAgKi8KKworCQllcC0+aXJxcysrOworCQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCQlwZW5kaW5nID0gMTsKKwl9CisJaWYgKCFwZW5kaW5nKQorCQlVRENfSVJRX0VOX1JFRyAmPSB+VURDX1NPRl9JRTsKKwlVRENfSVJRX1NSQ19SRUcgPSBVRENfU09GOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91ZGMgKnVkYzsKKworaW50IHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyIChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlpbnQJCXN0YXR1cyA9IC1FTk9ERVY7CisJc3RydWN0IG9tYXBfZXAJKmVwOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwkvKiBiYXNpYyBzYW5pdHkgdGVzdHMgKi8KKwlpZiAoIXVkYykKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFkcml2ZXIKKwkJCS8vIEZJWE1FIGlmIG90ZywgY2hlY2s6ICBkcml2ZXItPmlzX290ZworCQkJfHwgZHJpdmVyLT5zcGVlZCA8IFVTQl9TUEVFRF9GVUxMCisJCQl8fCAhZHJpdmVyLT5iaW5kCisJCQl8fCAhZHJpdmVyLT51bmJpbmQKKwkJCXx8ICFkcml2ZXItPnNldHVwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKwlpZiAodWRjLT5kcml2ZXIpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyogcmVzZXQgc3RhdGUgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChlcCwgJnVkYy0+Z2FkZ2V0LmVwX2xpc3QsIGVwLmVwX2xpc3QpIHsKKwkJZXAtPmlycXMgPSAwOworCQlpZiAoZXAtPmJtQXR0cmlidXRlcyA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKQorCQkJY29udGludWU7CisJCXVzZV9lcChlcCwgMCk7CisJCVVEQ19DVFJMX1JFRyA9IFVEQ19TRVRfSEFMVDsKKwl9CisJdWRjLT5lcDBfcGVuZGluZyA9IDA7CisJdWRjLT5lcFswXS5pcnFzID0gMDsKKwl1ZGMtPnNvZnRjb25uZWN0ID0gMTsKKworCS8qIGhvb2sgdXAgdGhlIGRyaXZlciAqLworCWRyaXZlci0+ZHJpdmVyLmJ1cyA9IDA7CisJdWRjLT5kcml2ZXIgPSBkcml2ZXI7CisJdWRjLT5nYWRnZXQuZGV2LmRyaXZlciA9ICZkcml2ZXItPmRyaXZlcjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKworCXN0YXR1cyA9IGRyaXZlci0+YmluZCAoJnVkYy0+Z2FkZ2V0KTsKKwlpZiAoc3RhdHVzKSB7CisJCURCRygiYmluZCB0byAlcyAtLT4gJWRcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUsIHN0YXR1cyk7CisJCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAwOworCQl1ZGMtPmRyaXZlciA9IDA7CisJCWdvdG8gZG9uZTsKKwl9CisJREJHKCJib3VuZCB0byBkcml2ZXIgJXNcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCisJVURDX0lSUV9TUkNfUkVHID0gVURDX0lSUV9TUkNfTUFTSzsKKworCS8qIGNvbm5lY3QgdG8gYnVzIHRocm91Z2ggdHJhbnNjZWl2ZXIgKi8KKwlpZiAodWRjLT50cmFuc2NlaXZlcikgeworCQlzdGF0dXMgPSBvdGdfc2V0X3BlcmlwaGVyYWwodWRjLT50cmFuc2NlaXZlciwgJnVkYy0+Z2FkZ2V0KTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCUVSUigiY2FuJ3QgYmluZCB0byB0cmFuc2NlaXZlclxuIik7CisJCQlkcml2ZXItPnVuYmluZCAoJnVkYy0+Z2FkZ2V0KTsKKwkJCXVkYy0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAwOworCQkJdWRjLT5kcml2ZXIgPSAwOworCQkJZ290byBkb25lOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGNhbl9wdWxsdXAodWRjKSkKKwkJCXB1bGx1cF9lbmFibGUgKHVkYyk7CisJCWVsc2UKKwkJCXB1bGx1cF9kaXNhYmxlICh1ZGMpOworCX0KKworCS8qIGJvYXJkcyB0aGF0IGRvbid0IGhhdmUgVkJVUyBzZW5zaW5nIGNhbid0IGF1dG9nYXRlIDQ4TUh6OworCSAqIGNhbid0IGVudGVyIGRlZXAgc2xlZXAgd2hpbGUgYSBnYWRnZXQgZHJpdmVyIGlzIGFjdGl2ZS4KKwkgKi8KKwlpZiAobWFjaGluZV9pc19vbWFwX2lubm92YXRvcigpIHx8IG1hY2hpbmVfaXNfb21hcF9vc2soKSkKKwkJb21hcF92YnVzX3Nlc3Npb24oJnVkYy0+Z2FkZ2V0LCAxKTsKKworZG9uZToKKwlyZXR1cm4gc3RhdHVzOworfQorRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcik7CisKK2ludCB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyIChzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCWludAkJc3RhdHVzID0gLUVOT0RFVjsKKworCWlmICghdWRjKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIWRyaXZlciB8fCBkcml2ZXIgIT0gdWRjLT5kcml2ZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG1hY2hpbmVfaXNfb21hcF9pbm5vdmF0b3IoKSB8fCBtYWNoaW5lX2lzX29tYXBfb3NrKCkpCisJCW9tYXBfdmJ1c19zZXNzaW9uKCZ1ZGMtPmdhZGdldCwgMCk7CisKKwlpZiAodWRjLT50cmFuc2NlaXZlcikKKwkJKHZvaWQpIG90Z19zZXRfcGVyaXBoZXJhbCh1ZGMtPnRyYW5zY2VpdmVyLCAwKTsKKwllbHNlCisJCXB1bGx1cF9kaXNhYmxlKHVkYyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJdWRjX3F1aWVzY2UodWRjKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKworCWRyaXZlci0+dW5iaW5kKCZ1ZGMtPmdhZGdldCk7CisJdWRjLT5nYWRnZXQuZGV2LmRyaXZlciA9IDA7CisJdWRjLT5kcml2ZXIgPSAwOworCisKKwlEQkcoInVucmVnaXN0ZXJlZCBkcml2ZXIgJyVzJ1xuIiwgZHJpdmVyLT5kcml2ZXIubmFtZSk7CisJcmV0dXJuIHN0YXR1czsKK30KK0VYUE9SVF9TWU1CT0wodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTCisKKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCitzdGF0aWMgY29uc3QgY2hhciBwcm9jX2ZpbGVuYW1lW10gPSAiZHJpdmVyL3VkYyI7CisKKyNkZWZpbmUgRk9VUkJJVFMgIiVzJXMlcyVzIgorI2RlZmluZSBFSUdIVEJJVFMgRk9VUkJJVFMgRk9VUkJJVFMKKworc3RhdGljIHZvaWQgcHJvY19lcF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IG9tYXBfZXAgKmVwKQoreworCXUxNgkJc3RhdF9mbGc7CisJc3RydWN0IG9tYXBfcmVxCSpyZXE7CisJY2hhcgkJYnVmWzIwXTsKKworCXVzZV9lcChlcCwgMCk7CisKKwlpZiAodXNlX2RtYSAmJiBlcC0+aGFzX2RtYSkKKwkJc25wcmludGYoYnVmLCBzaXplb2YgYnVmLCAiKCVjeGRtYSVkIGxjaCVkKSAiLAorCQkJKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgPyAndCcgOiAncicsCisJCQllcC0+ZG1hX2NoYW5uZWwgLSAxLCBlcC0+bGNoKTsKKwllbHNlCisJCWJ1ZlswXSA9IDA7CisKKwlzdGF0X2ZsZyA9IFVEQ19TVEFUX0ZMR19SRUc7CisJc2VxX3ByaW50ZihzLAorCQkiXG4lcyAlcyVzJXNpcnFzICVsZCBzdGF0ICUwNHggIiBFSUdIVEJJVFMgRk9VUkJJVFMgIiVzXG4iLAorCQllcC0+bmFtZSwgYnVmLAorCQllcC0+ZG91YmxlX2J1ZiA/ICJkYnVmICIgOiAiIiwKKwkJKHtjaGFyICpzOyBzd2l0Y2goZXAtPmFja3dhaXQpeworCQljYXNlIDA6IHMgPSAiIjsgYnJlYWs7CisJCWNhc2UgMTogcyA9ICIoYWNrdykgIjsgYnJlYWs7CisJCWNhc2UgMjogcyA9ICIoYWNrdzIpICI7IGJyZWFrOworCQlkZWZhdWx0OiBzID0gIig/KSAiOyBicmVhazsKKwkJfSBzO30pLAorCQllcC0+aXJxcywgc3RhdF9mbGcsCisJCShzdGF0X2ZsZyAmIFVEQ19OT19SWFBBQ0tFVCkgPyAibm9fcnhwYWNrZXQgIiA6ICIiLAorCQkoc3RhdF9mbGcgJiBVRENfTUlTU19JTikgPyAibWlzc19pbiAiIDogIiIsCisJCShzdGF0X2ZsZyAmIFVEQ19EQVRBX0ZMVVNIKSA/ICJkYXRhX2ZsdXNoICIgOiAiIiwKKwkJKHN0YXRfZmxnICYgVURDX0lTT19FUlIpID8gImlzb19lcnIgIiA6ICIiLAorCQkoc3RhdF9mbGcgJiBVRENfSVNPX0ZJRk9fRU1QVFkpID8gImlzb19maWZvX2VtcHR5ICIgOiAiIiwKKwkJKHN0YXRfZmxnICYgVURDX0lTT19GSUZPX0ZVTEwpID8gImlzb19maWZvX2Z1bGwgIiA6ICIiLAorCQkoc3RhdF9mbGcgJiBVRENfRVBfSEFMVEVEKSA/ICJIQUxUICIgOiAiIiwKKwkJKHN0YXRfZmxnICYgVURDX1NUQUxMKSA/ICJTVEFMTCAiIDogIiIsCisJCShzdGF0X2ZsZyAmIFVEQ19OQUspID8gIk5BSyAiIDogIiIsCisJCShzdGF0X2ZsZyAmIFVEQ19BQ0spID8gIkFDSyAiIDogIiIsCisJCShzdGF0X2ZsZyAmIFVEQ19GSUZPX0VOKSA/ICJmaWZvX2VuICIgOiAiIiwKKwkJKHN0YXRfZmxnICYgVURDX05PTl9JU09fRklGT19FTVBUWSkgPyAiZmlmb19lbXB0eSAiIDogIiIsCisJCShzdGF0X2ZsZyAmIFVEQ19OT05fSVNPX0ZJRk9fRlVMTCkgPyAiZmlmb19mdWxsICIgOiAiIik7CisKKwlpZiAobGlzdF9lbXB0eSAoJmVwLT5xdWV1ZSkpCisJCXNlcV9wcmludGYocywgIlx0KHF1ZXVlIGVtcHR5KVxuIik7CisJZWxzZQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5IChyZXEsICZlcC0+cXVldWUsIHF1ZXVlKSB7CisJCQl1bnNpZ25lZAlsZW5ndGggPSByZXEtPnJlcS5hY3R1YWw7CisKKwkJCWlmICh1c2VfZG1hICYmIGJ1ZlswXSkgeworCQkJCWxlbmd0aCArPSAoKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikKKwkJCQkJCT8gZG1hX3NyY19sZW4gOiBkbWFfZGVzdF9sZW4pCisJCQkJCShlcCwgcmVxLT5yZXEuZG1hICsgbGVuZ3RoKTsKKwkJCQlidWZbMF0gPSAwOworCQkJfQorCQkJc2VxX3ByaW50ZihzLCAiXHRyZXEgJXAgbGVuICVkLyVkIGJ1ZiAlcFxuIiwKKwkJCQkJJnJlcS0+cmVxLCBsZW5ndGgsCisJCQkJCXJlcS0+cmVxLmxlbmd0aCwgcmVxLT5yZXEuYnVmKTsKKwkJfQorfQorCitzdGF0aWMgY2hhciAqdHJ4X21vZGUodW5zaWduZWQgbSwgaW50IGVuYWJsZWQpCit7CisJc3dpdGNoIChtKSB7CisJY2FzZSAwOgkJcmV0dXJuIGVuYWJsZWQgPyAiKjZ3aXJlIiA6ICJ1bnVzZWQiOworCWNhc2UgMToJCXJldHVybiAiNHdpcmUiOworCWNhc2UgMjoJCXJldHVybiAiM3dpcmUiOworCWNhc2UgMzogCXJldHVybiAiNndpcmUiOworCWRlZmF1bHQ6CXJldHVybiAidW5rbm93biI7CisJfQorfQorCitzdGF0aWMgaW50IHByb2Nfb3RnX3Nob3coc3RydWN0IHNlcV9maWxlICpzKQoreworCXUzMgkJdG1wOworCXUzMgkJdHJhbnM7CisKKwl0bXAgPSBPVEdfUkVWX1JFRzsKKwl0cmFucyA9IFVTQl9UUkFOU0NFSVZFUl9DVFJMX1JFRzsKKwlzZXFfcHJpbnRmKHMsICJPVEcgcmV2ICVkLiVkLCB0cmFuc2NlaXZlcl9jdHJsICUwM3hcbiIsCisJCXRtcCA+PiA0LCB0bXAgJiAweGYsIHRyYW5zKTsKKwl0bXAgPSBPVEdfU1lTQ09OXzFfUkVHOworCXNlcV9wcmludGYocywgIm90Z19zeXNjb24xICUwOHggdXNiMiAlcywgdXNiMSAlcywgdXNiMCAlcywiCisJCQlGT1VSQklUUyAiXG4iLCB0bXAsCisJCXRyeF9tb2RlKFVTQjJfVFJYX01PREUodG1wKSwgdHJhbnMgJiBDT05GX1VTQjJfVU5JX1IpLAorCQl0cnhfbW9kZShVU0IxX1RSWF9NT0RFKHRtcCksIHRyYW5zICYgQ09ORl9VU0IxX1VOSV9SKSwKKwkJKFVTQjBfVFJYX01PREUodG1wKSA9PSAwKQorCQkJPyAiaW50ZXJuYWwiCisJCQk6IHRyeF9tb2RlKFVTQjBfVFJYX01PREUodG1wKSwgMSksCisJCSh0bXAgJiBPVEdfSURMRV9FTikgPyAiICFvdGciIDogIiIsCisJCSh0bXAgJiBIU1RfSURMRV9FTikgPyAiICFob3N0IiA6ICIiLAorCQkodG1wICYgREVWX0lETEVfRU4pID8gIiAhZGV2IiA6ICIiLAorCQkodG1wICYgT1RHX1JFU0VUX0RPTkUpID8gIiByZXNldF9kb25lIiA6ICIgcmVzZXRfYWN0aXZlIik7CisJdG1wID0gT1RHX1NZU0NPTl8yX1JFRzsKKwlzZXFfcHJpbnRmKHMsICJvdGdfc3lzY29uMiAlMDh4JXMiIEVJR0hUQklUUworCQkJIiBiX2FzZV9icnN0PSVkIGhtYz0lZFxuIiwgdG1wLAorCQkodG1wICYgT1RHX0VOKSA/ICIgb3RnX2VuIiA6ICIiLAorCQkodG1wICYgVVNCWF9TWU5DSFJPKSA/ICIgc3luY2hybyIgOiAiIiwKKwkJLy8gbXVjaCBtb3JlIFNSUCBzdHVmZgorCQkodG1wICYgU1JQX0RBVEEpID8gIiBzcnBfZGF0YSIgOiAiIiwKKwkJKHRtcCAmIFNSUF9WQlVTKSA/ICIgc3JwX3ZidXMiIDogIiIsCisJCSh0bXAgJiBPVEdfUEFERU4pID8gIiBvdGdfcGFkZW4iIDogIiIsCisJCSh0bXAgJiBITUNfUEFERU4pID8gIiBobWNfcGFkZW4iIDogIiIsCisJCSh0bXAgJiBVSE9TVF9FTikgPyAiIHVob3N0X2VuIiA6ICIiLAorCQkodG1wICYgSE1DX1RMTFNQRUVEKSA/ICIgdGxsc3BlZWQiIDogIiIsCisJCSh0bXAgJiBITUNfVExMQVRUQUNIKSA/ICIgdGxsYXR0YWNoIiA6ICIiLAorCQlCX0FTRV9CUlNUKHRtcCksCisJCU9UR19ITUModG1wKSk7CisJdG1wID0gT1RHX0NUUkxfUkVHOworCXNlcV9wcmludGYocywgIm90Z19jdHJsICAgICUwNngiIEVJR0hUQklUUyBFSUdIVEJJVFMgIiVzXG4iLCB0bXAsCisJCSh0bXAgJiBPVEdfQVNFU1NWTEQpID8gIiBhc2VzcyIgOiAiIiwKKwkJKHRtcCAmIE9UR19CU0VTU0VORCkgPyAiIGJzZXNzX2VuZCIgOiAiIiwKKwkJKHRtcCAmIE9UR19CU0VTU1ZMRCkgPyAiIGJzZXNzIiA6ICIiLAorCQkodG1wICYgT1RHX1ZCVVNWTEQpID8gIiB2YnVzIiA6ICIiLAorCQkodG1wICYgT1RHX0lEKSA/ICIgaWQiIDogIiIsCisJCSh0bXAgJiBPVEdfRFJJVkVSX1NFTCkgPyAiIERFVklDRSIgOiAiIEhPU1QiLAorCQkodG1wICYgT1RHX0FfU0VUQl9ITlBFTikgPyAiIGFfc2V0Yl9obnBlbiIgOiAiIiwKKwkJKHRtcCAmIE9UR19BX0JVU1JFUSkgPyAiIGFfYnVzIiA6ICIiLAorCQkodG1wICYgT1RHX0JfSE5QRU4pID8gIiBiX2hucGVuIiA6ICIiLAorCQkodG1wICYgT1RHX0JfQlVTUkVRKSA/ICIgYl9idXMiIDogIiIsCisJCSh0bXAgJiBPVEdfQlVTRFJPUCkgPyAiIGJ1c2Ryb3AiIDogIiIsCisJCSh0bXAgJiBPVEdfUFVMTERPV04pID8gIiBkb3duIiA6ICIiLAorCQkodG1wICYgT1RHX1BVTExVUCkgPyAiIHVwIiA6ICIiLAorCQkodG1wICYgT1RHX0RSVl9WQlVTKSA/ICIgZHJ2IiA6ICIiLAorCQkodG1wICYgT1RHX1BEX1ZCVVMpID8gIiBwZF92YiIgOiAiIiwKKwkJKHRtcCAmIE9UR19QVV9WQlVTKSA/ICIgcHVfdmIiIDogIiIsCisJCSh0bXAgJiBPVEdfUFVfSUQpID8gIiBwdV9pZCIgOiAiIgorCQkpOworCXRtcCA9IE9UR19JUlFfRU5fUkVHOworCXNlcV9wcmludGYocywgIm90Z19pcnFfZW4gICUwNHgiICJcbiIsIHRtcCk7CisJdG1wID0gT1RHX0lSUV9TUkNfUkVHOworCXNlcV9wcmludGYocywgIm90Z19pcnFfc3JjICUwNHgiICJcbiIsIHRtcCk7CisJdG1wID0gT1RHX09VVENUUkxfUkVHOworCXNlcV9wcmludGYocywgIm90Z19vdXRjdHJsICUwNHgiICJcbiIsIHRtcCk7CisJdG1wID0gT1RHX1RFU1RfUkVHOworCXNlcV9wcmludGYocywgIm90Z190ZXN0ICAgICUwNHgiICJcbiIsIHRtcCk7Cit9CisKK3N0YXRpYyBpbnQgcHJvY191ZGNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKl8pCit7CisJdTMyCQl0bXA7CisJc3RydWN0IG9tYXBfZXAJKmVwOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWRjLT5sb2NrLCBmbGFncyk7CisKKwlzZXFfcHJpbnRmKHMsICIlcywgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTgorI2lmZGVmCVVTRV9JU08KKwkJIiAoaXNvKSIKKyNlbmRpZgorCQkiJXNcbiIsCisJCWRyaXZlcl9kZXNjLAorCQl1c2VfZG1hID8gICIgKGRtYSkiIDogIiIpOworCisJdG1wID0gVURDX1JFVl9SRUcgJiAweGZmOyAKKwlzZXFfcHJpbnRmKHMsCisJCSJVREMgcmV2ICVkLiVkLCBmaWZvIG1vZGUgJWQsIGdhZGdldCAlc1xuIgorCQkiaG1jICVkLCB0cmFuc2NlaXZlciAlc1xuIiwKKwkJdG1wID4+IDQsIHRtcCAmIDB4ZiwKKwkJZmlmb19tb2RlLAorCQl1ZGMtPmRyaXZlciA/IHVkYy0+ZHJpdmVyLT5kcml2ZXIubmFtZSA6ICIobm9uZSkiLAorCQlITUMsCisJCXVkYy0+dHJhbnNjZWl2ZXIgPyB1ZGMtPnRyYW5zY2VpdmVyLT5sYWJlbCA6ICIobm9uZSkiKTsKKwlzZXFfcHJpbnRmKHMsICJVTFBEIGNvbnRyb2wgJTA0eCByZXEgJTA0eCBzdGF0dXMgJTA0eFxuIiwKKwkJX19SRUcxNihVTFBEX0NMT0NLX0NUUkwpLAorCQlfX1JFRzE2KFVMUERfU09GVF9SRVEpLAorCQlfX1JFRzE2KFVMUERfU1RBVFVTX1JFUSkpOworCisJLyogT1RHIGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCisJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkKKwkJcHJvY19vdGdfc2hvdyhzKTsKKworCXRtcCA9IFVEQ19TWVNDT04xX1JFRzsKKwlzZXFfcHJpbnRmKHMsICJcbnN5c2NvbjEgICAgICUwNHgiIEVJR0hUQklUUyAiXG4iLCB0bXAsCisJCSh0bXAgJiBVRENfQ0ZHX0xPQ0spID8gIiBjZmdfbG9jayIgOiAiIiwKKwkJKHRtcCAmIFVEQ19EQVRBX0VORElBTikgPyAiIGRhdGFfZW5kaWFuIiA6ICIiLAorCQkodG1wICYgVURDX0RNQV9FTkRJQU4pID8gIiBkbWFfZW5kaWFuIiA6ICIiLAorCQkodG1wICYgVURDX05BS19FTikgPyAiIG5hayIgOiAiIiwKKwkJKHRtcCAmIFVEQ19BVVRPREVDT0RFX0RJUykgPyAiIGF1dG9kZWNvZGVfZGlzIiA6ICIiLAorCQkodG1wICYgVURDX1NFTEZfUFdSKSA/ICIgc2VsZl9wd3IiIDogIiIsCisJCSh0bXAgJiBVRENfU09GRl9ESVMpID8gIiBzb2ZmX2RpcyIgOiAiIiwKKwkJKHRtcCAmIFVEQ19QVUxMVVBfRU4pID8gIiBQVUxMVVAiIDogIiIpOworCS8vIHN5c2NvbjIgaXMgd3JpdGUtb25seQorCisJLyogVURDIGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCisJaWYgKCEodG1wICYgVURDX1BVTExVUF9FTikpIHsKKwkJc2VxX3ByaW50ZihzLCAiKHN1c3BlbmRlZClcbiIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGMtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdG1wID0gVURDX0RFVlNUQVRfUkVHOworCXNlcV9wcmludGYocywgImRldnN0YXQgICAgICUwNHgiIEVJR0hUQklUUyAiJXMlc1xuIiwgdG1wLAorCQkodG1wICYgVURDX0JfSE5QX0VOQUJMRSkgPyAiIGJfaG5wIiA6ICIiLAorCQkodG1wICYgVURDX0FfSE5QX1NVUFBPUlQpID8gIiBhX2hucCIgOiAiIiwKKwkJKHRtcCAmIFVEQ19BX0FMVF9ITlBfU1VQUE9SVCkgPyAiIGFfYWx0X2hucCIgOiAiIiwKKwkJKHRtcCAmIFVEQ19SX1dLX09LKSA/ICIgcl93a19vayIgOiAiIiwKKwkJKHRtcCAmIFVEQ19VU0JfUkVTRVQpID8gIiB1c2JfcmVzZXQiIDogIiIsCisJCSh0bXAgJiBVRENfU1VTKSA/ICIgU1VTIiA6ICIiLAorCQkodG1wICYgVURDX0NGRykgPyAiIENGRyIgOiAiIiwKKwkJKHRtcCAmIFVEQ19BREQpID8gIiBBREQiIDogIiIsCisJCSh0bXAgJiBVRENfREVGKSA/ICIgREVGIiA6ICIiLAorCQkodG1wICYgVURDX0FUVCkgPyAiIEFUVCIgOiAiIik7CisJc2VxX3ByaW50ZihzLCAic29mICAgICAgICAgJTA0eFxuIiwgVURDX1NPRl9SRUcpOworCXRtcCA9IFVEQ19JUlFfRU5fUkVHOworCXNlcV9wcmludGYocywgImlycV9lbiAgICAgICUwNHgiIEZPVVJCSVRTICIlc1xuIiwgdG1wLAorCQkodG1wICYgVURDX1NPRl9JRSkgPyAiIHNvZiIgOiAiIiwKKwkJKHRtcCAmIFVEQ19FUE5fUlhfSUUpID8gIiBlcG5fcngiIDogIiIsCisJCSh0bXAgJiBVRENfRVBOX1RYX0lFKSA/ICIgZXBuX3R4IiA6ICIiLAorCQkodG1wICYgVURDX0RTX0NIR19JRSkgPyAiIGRzX2NoZyIgOiAiIiwKKwkJKHRtcCAmIFVEQ19FUDBfSUUpID8gIiBlcDAiIDogIiIpOworCXRtcCA9IFVEQ19JUlFfU1JDX1JFRzsKKwlzZXFfcHJpbnRmKHMsICJpcnFfc3JjICAgICAlMDR4IiBFSUdIVEJJVFMgIiVzJXNcbiIsIHRtcCwKKwkJKHRtcCAmIFVEQ19UWE5fRE9ORSkgPyAiIHR4bl9kb25lIiA6ICIiLAorCQkodG1wICYgVURDX1JYTl9DTlQpID8gIiByeG5fY250IiA6ICIiLAorCQkodG1wICYgVURDX1JYTl9FT1QpID8gIiByeG5fZW90IiA6ICIiLAorCQkodG1wICYgVURDX1NPRikgPyAiIHNvZiIgOiAiIiwKKwkJKHRtcCAmIFVEQ19FUE5fUlgpID8gIiBlcG5fcngiIDogIiIsCisJCSh0bXAgJiBVRENfRVBOX1RYKSA/ICIgZXBuX3R4IiA6ICIiLAorCQkodG1wICYgVURDX0RTX0NIRykgPyAiIGRzX2NoZyIgOiAiIiwKKwkJKHRtcCAmIFVEQ19TRVRVUCkgPyAiIHNldHVwIiA6ICIiLAorCQkodG1wICYgVURDX0VQMF9SWCkgPyAiIGVwMG91dCIgOiAiIiwKKwkJKHRtcCAmIFVEQ19FUDBfVFgpID8gIiBlcDBpbiIgOiAiIik7CisJaWYgKHVzZV9kbWEpIHsKKwkJdW5zaWduZWQgaTsKKworCQl0bXAgPSBVRENfRE1BX0lSUV9FTl9SRUc7CisJCXNlcV9wcmludGYocywgImRtYV9pcnFfZW4gICUwNHglcyIgRUlHSFRCSVRTICJcbiIsIHRtcCwKKwkJCSh0bXAgJiBVRENfVFhfRE9ORV9JRSgzKSkgPyAiIHR4Ml9kb25lIiA6ICIiLAorCQkJKHRtcCAmIFVEQ19SWF9DTlRfSUUoMykpID8gIiByeDJfY250IiA6ICIiLAorCQkJKHRtcCAmIFVEQ19SWF9FT1RfSUUoMykpID8gIiByeDJfZW90IiA6ICIiLAorCisJCQkodG1wICYgVURDX1RYX0RPTkVfSUUoMikpID8gIiB0eDFfZG9uZSIgOiAiIiwKKwkJCSh0bXAgJiBVRENfUlhfQ05UX0lFKDIpKSA/ICIgcngxX2NudCIgOiAiIiwKKwkJCSh0bXAgJiBVRENfUlhfRU9UX0lFKDIpKSA/ICIgcngxX2VvdCIgOiAiIiwKKworCQkJKHRtcCAmIFVEQ19UWF9ET05FX0lFKDEpKSA/ICIgdHgwX2RvbmUiIDogIiIsCisJCQkodG1wICYgVURDX1JYX0NOVF9JRSgxKSkgPyAiIHJ4MF9jbnQiIDogIiIsCisJCQkodG1wICYgVURDX1JYX0VPVF9JRSgxKSkgPyAiIHJ4MF9lb3QiIDogIiIpOworCisJCXRtcCA9IFVEQ19SWERNQV9DRkdfUkVHOworCQlzZXFfcHJpbnRmKHMsICJyeGRtYV9jZmcgICAlMDR4XG4iLCB0bXApOworCQlpZiAodG1wKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQkJaWYgKCh0bXAgJiAoMHgwZiA8PCAoaSAqIDQpKSkgPT0gMCkKKwkJCQkJY29udGludWU7CisJCQkJc2VxX3ByaW50ZihzLCAicnhkbWFbJWRdICAgICUwNHhcbiIsIGksCisJCQkJCQlVRENfUlhETUFfUkVHKGkgKyAxKSk7CisJCQl9CisJCX0KKwkJdG1wID0gVURDX1RYRE1BX0NGR19SRUc7CisJCXNlcV9wcmludGYocywgInR4ZG1hX2NmZyAgICUwNHhcbiIsIHRtcCk7CisJCWlmICh0bXApIHsKKwkJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCQlpZiAoISh0bXAgJiAoMHgwZiA8PCAoaSAqIDQpKSkpCisJCQkJCWNvbnRpbnVlOworCQkJCXNlcV9wcmludGYocywgInR4ZG1hWyVkXSAgICAlMDR4XG4iLCBpLAorCQkJCQkJVURDX1RYRE1BX1JFRyhpICsgMSkpOworCQkJfQorCQl9CisJfQorCisJdG1wID0gVURDX0RFVlNUQVRfUkVHOworCWlmICh0bXAgJiBVRENfQVRUKSB7CisJCXByb2NfZXBfc2hvdyhzLCAmdWRjLT5lcFswXSk7CisJCWlmICh0bXAgJiBVRENfQUREKSB7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5IChlcCwgJnVkYy0+Z2FkZ2V0LmVwX2xpc3QsCisJCQkJCWVwLmVwX2xpc3QpIHsKKwkJCQlpZiAoZXAtPmRlc2MpCisJCQkJCXByb2NfZXBfc2hvdyhzLCBlcCk7CisJCQl9CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWRjLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY191ZGNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcHJvY191ZGNfc2hvdywgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfb3BzID0geworCS5vcGVuCQk9IHByb2NfdWRjX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9wcm9jX2ZpbGUodm9pZCkKK3sKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZTsKKworCXBkZSA9IGNyZWF0ZV9wcm9jX2VudHJ5IChwcm9jX2ZpbGVuYW1lLCAwLCBOVUxMKTsKKwlpZiAocGRlKQorCQlwZGUtPnByb2NfZm9wcyA9ICZwcm9jX29wczsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX3Byb2NfZmlsZSh2b2lkKQoreworCXJlbW92ZV9wcm9jX2VudHJ5KHByb2NfZmlsZW5hbWUsIDApOworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3JlYXRlX3Byb2NfZmlsZSh2b2lkKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9wcm9jX2ZpbGUodm9pZCkge30KKworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEJlZm9yZSB0aGlzIGNvbnRyb2xsZXIgY2FuIGVudW1lcmF0ZSwgd2UgbmVlZCB0byBwaWNrIGFuIGVuZHBvaW50CisgKiBjb25maWd1cmF0aW9uLCBvciAiZmlmb19tb2RlIiAgVGhhdCBpbnZvbHZlcyBhbGxvY2F0aW5nIDJLQiBvZiBwYWNrZXQKKyAqIGJ1ZmZlciBzcGFjZSBhbW9uZyB0aGUgZW5kcG9pbnRzIHdlJ2xsIGJlIG9wZXJhdGluZy4KKyAqLworc3RhdGljIHVuc2lnbmVkIF9faW5pdAorb21hcF9lcF9zZXR1cChjaGFyICpuYW1lLCB1OCBhZGRyLCB1OCB0eXBlLAorCQl1bnNpZ25lZCBidWYsIHVuc2lnbmVkIG1heHAsIGludCBkYnVmKQoreworCXN0cnVjdCBvbWFwX2VwCSplcDsKKwl1MTYJCWVwbl9yeHR4ID0gMDsKKworCS8qIE9VVCBlbmRwb2ludHMgZmlyc3QsIHRoZW4gSU4gKi8KKwllcCA9ICZ1ZGMtPmVwW2FkZHIgJiAweGZdOworCWlmIChhZGRyICYgVVNCX0RJUl9JTikKKwkJZXAgKz0gMTY7CisKKwkvKiBpbiBjYXNlIG9mIGVwIGluaXQgdGFibGUgYnVncyAqLworCUJVR19PTihlcC0+bmFtZVswXSk7CisKKwkvKiBjaGlwIHNldHVwIC4uLiBiaXQgdmFsdWVzIGFyZSBzYW1lIGZvciBJTiwgT1VUICovCisJaWYgKHR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykgeworCQlzd2l0Y2ggKG1heHApIHsKKwkJY2FzZSA4OgkJZXBuX3J4dHggPSAwIDw8IDEyOyBicmVhazsKKwkJY2FzZSAxNjoJZXBuX3J4dHggPSAxIDw8IDEyOyBicmVhazsKKwkJY2FzZSAzMjoJZXBuX3J4dHggPSAyIDw8IDEyOyBicmVhazsKKwkJY2FzZSA2NDoJZXBuX3J4dHggPSAzIDw8IDEyOyBicmVhazsKKwkJY2FzZSAxMjg6CWVwbl9yeHR4ID0gNCA8PCAxMjsgYnJlYWs7CisJCWNhc2UgMjU2OgllcG5fcnh0eCA9IDUgPDwgMTI7IGJyZWFrOworCQljYXNlIDUxMjoJZXBuX3J4dHggPSA2IDw8IDEyOyBicmVhazsKKwkJZGVmYXVsdDoJQlVHKCk7CisJCX0KKwkJZXBuX3J4dHggfD0gVURDX0VQTl9SWF9JU087CisJCWRidWYgPSAxOworCX0gZWxzZSB7CisJCS8qIGRvdWJsZS1idWZmZXJpbmcgIm5vdCBzdXBwb3J0ZWQiIG9uIDE1eHgsCisJCSAqIGFuZCBpZ25vcmVkIGZvciBQSU8tSU4gb24gMTZ4eAorCQkgKi8KKwkJaWYgKCF1c2VfZG1hIHx8IGNwdV9pc19vbWFwMTV4eCgpKQorCQkJZGJ1ZiA9IDA7CisKKwkJc3dpdGNoIChtYXhwKSB7CisJCWNhc2UgODoJCWVwbl9yeHR4ID0gMCA8PCAxMjsgYnJlYWs7CisJCWNhc2UgMTY6CWVwbl9yeHR4ID0gMSA8PCAxMjsgYnJlYWs7CisJCWNhc2UgMzI6CWVwbl9yeHR4ID0gMiA8PCAxMjsgYnJlYWs7CisJCWNhc2UgNjQ6CWVwbl9yeHR4ID0gMyA8PCAxMjsgYnJlYWs7CisJCWRlZmF1bHQ6CUJVRygpOworCQl9CisJCWlmIChkYnVmICYmIGFkZHIpCisJCQllcG5fcnh0eCB8PSBVRENfRVBOX1JYX0RCOworCQlpbml0X3RpbWVyKCZlcC0+dGltZXIpOworCQllcC0+dGltZXIuZnVuY3Rpb24gPSBwaW9fb3V0X3RpbWVyOworCQllcC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBlcDsKKwl9CisJaWYgKGFkZHIpCisJCWVwbl9yeHR4IHw9IFVEQ19FUE5fUlhfVkFMSUQ7CisJQlVHX09OKGJ1ZiAmIDB4MDcpOworCWVwbl9yeHR4IHw9IGJ1ZiA+PiAzOworCisJREJHKCIlcyBhZGRyICUwMnggcnh0eCAlMDR4IG1heHAgJWQlcyBidWYgJWRcbiIsCisJCW5hbWUsIGFkZHIsIGVwbl9yeHR4LCBtYXhwLCBkYnVmID8gIngyIiA6ICIiLCBidWYpOworCisJaWYgKGFkZHIgJiBVU0JfRElSX0lOKQorCQlVRENfRVBfVFhfUkVHKGFkZHIgJiAweGYpID0gZXBuX3J4dHg7CisJZWxzZQorCQlVRENfRVBfUlhfUkVHKGFkZHIpID0gZXBuX3J4dHg7CisKKwkvKiBuZXh0IGVuZHBvaW50J3MgYnVmZmVyIHN0YXJ0cyBhZnRlciB0aGlzIG9uZSdzICovCisJYnVmICs9IG1heHA7CisJaWYgKGRidWYpCisJCWJ1ZiArPSBtYXhwOworCUJVR19PTihidWYgPiAyMDQ4KTsKKworCS8qIHNldCB1cCBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmVzICovCisJQlVHX09OKHN0cmxlbihuYW1lKSA+PSBzaXplb2YgZXAtPm5hbWUpOworCXN0cmxjcHkoZXAtPm5hbWUsIG5hbWUsIHNpemVvZiBlcC0+bmFtZSk7CisJSU5JVF9MSVNUX0hFQUQoJmVwLT5xdWV1ZSk7CisJSU5JVF9MSVNUX0hFQUQoJmVwLT5pc28pOworCWVwLT5iRW5kcG9pbnRBZGRyZXNzID0gYWRkcjsKKwllcC0+Ym1BdHRyaWJ1dGVzID0gdHlwZTsKKwllcC0+ZG91YmxlX2J1ZiA9IGRidWY7CisJZXAtPnVkYyA9IHVkYzsgCisKKwllcC0+ZXAubmFtZSA9IGVwLT5uYW1lOworCWVwLT5lcC5vcHMgPSAmb21hcF9lcF9vcHM7CisJZXAtPmVwLm1heHBhY2tldCA9IGVwLT5tYXhwYWNrZXQgPSBtYXhwOworCWxpc3RfYWRkX3RhaWwgKCZlcC0+ZXAuZXBfbGlzdCwgJnVkYy0+Z2FkZ2V0LmVwX2xpc3QpOworCisJcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIHZvaWQgb21hcF91ZGNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJY29tcGxldGUodWRjLT5kb25lKTsKKwlrZnJlZSAodWRjKTsKKwl1ZGMgPSAwOworfQorCitzdGF0aWMgaW50IF9faW5pdAorb21hcF91ZGNfc2V0dXAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2Rldiwgc3RydWN0IG90Z190cmFuc2NlaXZlciAqeGNlaXYpCit7CisJdW5zaWduZWQJdG1wLCBidWY7CisKKwkvKiBhYm9saXNoIGFueSBwcmV2aW91cyBoYXJkd2FyZSBzdGF0ZSAqLworCVVEQ19TWVNDT04xX1JFRyA9IDA7CisJVURDX0lSUV9FTl9SRUcgPSAwOworCVVEQ19JUlFfU1JDX1JFRyA9IFVEQ19JUlFfU1JDX01BU0s7CisJVURDX0RNQV9JUlFfRU5fUkVHID0gMDsKKwlVRENfUlhETUFfQ0ZHX1JFRyA9IDA7CisJVURDX1RYRE1BX0NGR19SRUcgPSAwOworCisJLyogVURDX1BVTExVUF9FTiBnYXRlcyB0aGUgY2hpcCBjbG9jayAqLworCS8vIE9UR19TWVNDT05fMV9SRUcgfD0gREVWX0lETEVfRU47CisKKwl1ZGMgPSBrbWFsbG9jIChzaXplb2YgKnVkYywgU0xBQl9LRVJORUwpOworCWlmICghdWRjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldCh1ZGMsIDAsIHNpemVvZiAqdWRjKTsKKwlzcGluX2xvY2tfaW5pdCAoJnVkYy0+bG9jayk7CisKKwl1ZGMtPmdhZGdldC5vcHMgPSAmb21hcF9nYWRnZXRfb3BzOworCXVkYy0+Z2FkZ2V0LmVwMCA9ICZ1ZGMtPmVwWzBdLmVwOworCUlOSVRfTElTVF9IRUFEKCZ1ZGMtPmdhZGdldC5lcF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmdWRjLT5pc28pOworCXVkYy0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047CisJdWRjLT5nYWRnZXQubmFtZSA9IGRyaXZlcl9uYW1lOworCisJZGV2aWNlX2luaXRpYWxpemUoJnVkYy0+Z2FkZ2V0LmRldik7CisJc3RyY3B5ICh1ZGMtPmdhZGdldC5kZXYuYnVzX2lkLCAiZ2FkZ2V0Iik7CisJdWRjLT5nYWRnZXQuZGV2LnJlbGVhc2UgPSBvbWFwX3VkY19yZWxlYXNlOworCXVkYy0+Z2FkZ2V0LmRldi5wYXJlbnQgPSAmb2Rldi0+ZGV2OworCWlmICh1c2VfZG1hKQorCQl1ZGMtPmdhZGdldC5kZXYuZG1hX21hc2sgPSBvZGV2LT5kZXYuZG1hX21hc2s7CisKKwl1ZGMtPnRyYW5zY2VpdmVyID0geGNlaXY7CisKKwkvKiBlcDAgaXMgc3BlY2lhbDsgcHV0IGl0IHJpZ2h0IGFmdGVyIHRoZSBTRVRVUCBidWZmZXIgKi8KKwlidWYgPSBvbWFwX2VwX3NldHVwKCJlcDAiLCAwLCBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MLAorCQkJOCAvKiBhZnRlciBTRVRVUCAqLywgNjQgLyogbWF4cGFja2V0ICovLCAwKTsKKwlsaXN0X2RlbF9pbml0KCZ1ZGMtPmVwWzBdLmVwLmVwX2xpc3QpOworCisJLyogaW5pdGlhbGx5IGRpc2FibGUgYWxsIG5vbi1lcDAgZW5kcG9pbnRzICovCisJZm9yICh0bXAgPSAxOyB0bXAgPCAxNTsgdG1wKyspIHsKKwkJVURDX0VQX1JYX1JFRyh0bXApID0gMDsKKwkJVURDX0VQX1RYX1JFRyh0bXApID0gMDsKKwl9CisKKyNkZWZpbmUgT01BUF9CVUxLX0VQKG5hbWUsYWRkcikgXAorCWJ1ZiA9IG9tYXBfZXBfc2V0dXAobmFtZSAiLWJ1bGsiLCBhZGRyLCBcCisJCQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLCBidWYsIDY0LCAxKTsKKyNkZWZpbmUgT01BUF9JTlRfRVAobmFtZSxhZGRyLCBtYXhwKSBcCisJYnVmID0gb21hcF9lcF9zZXR1cChuYW1lICItaW50IiwgYWRkciwgXAorCQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULCBidWYsIG1heHAsIDApOworI2RlZmluZSBPTUFQX0lTT19FUChuYW1lLGFkZHIsIG1heHApIFwKKwlidWYgPSBvbWFwX2VwX3NldHVwKG5hbWUgIi1pc28iLCBhZGRyLCBcCisJCQlVU0JfRU5EUE9JTlRfWEZFUl9JU09DLCBidWYsIG1heHAsIDEpOworCisJc3dpdGNoIChmaWZvX21vZGUpIHsKKwljYXNlIDA6CisJCU9NQVBfQlVMS19FUCgiZXAxaW4iLCAgVVNCX0RJUl9JTiAgfCAxKTsKKwkJT01BUF9CVUxLX0VQKCJlcDJvdXQiLCBVU0JfRElSX09VVCB8IDIpOworCQlPTUFQX0lOVF9FUCgiZXAzaW4iLCAgIFVTQl9ESVJfSU4gIHwgMywgMTYpOworCQlicmVhazsKKwljYXNlIDE6CisJCU9NQVBfQlVMS19FUCgiZXAxaW4iLCAgVVNCX0RJUl9JTiAgfCAxKTsKKwkJT01BUF9CVUxLX0VQKCJlcDJvdXQiLCBVU0JfRElSX09VVCB8IDIpOworCQlPTUFQX0JVTEtfRVAoImVwM2luIiwgIFVTQl9ESVJfSU4gIHwgMyk7CisJCU9NQVBfQlVMS19FUCgiZXA0b3V0IiwgVVNCX0RJUl9PVVQgfCA0KTsKKworCQlPTUFQX0JVTEtfRVAoImVwNWluIiwgIFVTQl9ESVJfSU4gIHwgNSk7CisJCU9NQVBfQlVMS19FUCgiZXA1b3V0IiwgVVNCX0RJUl9PVVQgfCA1KTsKKwkJT01BUF9CVUxLX0VQKCJlcDZpbiIsICBVU0JfRElSX0lOICB8IDYpOworCQlPTUFQX0JVTEtfRVAoImVwNm91dCIsIFVTQl9ESVJfT1VUIHwgNik7CisKKwkJT01BUF9CVUxLX0VQKCJlcDdpbiIsICBVU0JfRElSX0lOICB8IDcpOworCQlPTUFQX0JVTEtfRVAoImVwN291dCIsIFVTQl9ESVJfT1VUIHwgNyk7CisJCU9NQVBfQlVMS19FUCgiZXA4aW4iLCAgVVNCX0RJUl9JTiAgfCA4KTsKKwkJT01BUF9CVUxLX0VQKCJlcDhvdXQiLCBVU0JfRElSX09VVCB8IDgpOworCisJCU9NQVBfSU5UX0VQKCJlcDlpbiIsICAgVVNCX0RJUl9JTiAgfCA5LCAxNik7CisJCU9NQVBfSU5UX0VQKCJlcDEwb3V0IiwgVVNCX0RJUl9JTiAgfCAxMCwgMTYpOworCQlPTUFQX0lOVF9FUCgiZXAxMWluIiwgIFVTQl9ESVJfSU4gIHwgOSwgMTYpOworCQlPTUFQX0lOVF9FUCgiZXAxMm91dCIsIFVTQl9ESVJfSU4gIHwgMTAsIDE2KTsKKwkJYnJlYWs7CisKKyNpZmRlZglVU0VfSVNPCisJY2FzZSAyOgkJCS8qIG1peGVkIGlzby9idWxrICovCisJCU9NQVBfSVNPX0VQKCJlcDFpbiIsICAgVVNCX0RJUl9JTiAgfCAxLCAyNTYpOworCQlPTUFQX0lTT19FUCgiZXAyb3V0IiwgIFVTQl9ESVJfT1VUIHwgMiwgMjU2KTsKKwkJT01BUF9JU09fRVAoImVwM2luIiwgICBVU0JfRElSX0lOICB8IDMsIDEyOCk7CisJCU9NQVBfSVNPX0VQKCJlcDRvdXQiLCAgVVNCX0RJUl9PVVQgfCA0LCAxMjgpOworCisJCU9NQVBfSU5UX0VQKCJlcDVpbiIsICAgVVNCX0RJUl9JTiAgfCA1LCAxNik7CisKKwkJT01BUF9CVUxLX0VQKCJlcDZpbiIsICBVU0JfRElSX0lOICB8IDYpOworCQlPTUFQX0JVTEtfRVAoImVwN291dCIsIFVTQl9ESVJfT1VUIHwgNyk7CisJCU9NQVBfSU5UX0VQKCJlcDhpbiIsICAgVVNCX0RJUl9JTiAgfCA4LCAxNik7CisJCWJyZWFrOworCWNhc2UgMzoJCQkvKiBtaXhlZCBidWxrL2lzbyAqLworCQlPTUFQX0JVTEtfRVAoImVwMWluIiwgIFVTQl9ESVJfSU4gIHwgMSk7CisJCU9NQVBfQlVMS19FUCgiZXAyb3V0IiwgVVNCX0RJUl9PVVQgfCAyKTsKKwkJT01BUF9JTlRfRVAoImVwM2luIiwgICBVU0JfRElSX0lOICB8IDMsIDE2KTsKKworCQlPTUFQX0JVTEtfRVAoImVwNGluIiwgIFVTQl9ESVJfSU4gIHwgNCk7CisJCU9NQVBfQlVMS19FUCgiZXA1b3V0IiwgVVNCX0RJUl9PVVQgfCA1KTsKKwkJT01BUF9JTlRfRVAoImVwNmluIiwgICBVU0JfRElSX0lOICB8IDYsIDE2KTsKKworCQlPTUFQX0lTT19FUCgiZXA3aW4iLCAgIFVTQl9ESVJfSU4gIHwgNywgMjU2KTsKKwkJT01BUF9JU09fRVAoImVwOG91dCIsICBVU0JfRElSX09VVCB8IDgsIDI1Nik7CisJCU9NQVBfSU5UX0VQKCJlcDlpbiIsICAgVVNCX0RJUl9JTiAgfCA5LCAxNik7CisJCWJyZWFrOworI2VuZGlmCisKKwkvKiBhZGQgbW9yZSBtb2RlcyBhcyBuZWVkZWQgKi8KKworCWRlZmF1bHQ6CisJCUVSUigidW5zdXBwb3J0ZWQgZmlmb19tb2RlICMlZFxuIiwgZmlmb19tb2RlKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCVVEQ19TWVNDT04xX1JFRyA9IFVEQ19DRkdfTE9DS3xVRENfU0VMRl9QV1I7CisJSU5GTygiZmlmbyBtb2RlICVkLCAlZCBieXRlcyBub3QgdXNlZFxuIiwgZmlmb19tb2RlLCAyMDQ4IC0gYnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgb21hcF91ZGNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKm9kZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlpbnQJCQlzdGF0dXMgPSAtRU5PREVWOworCWludAkJCWhtYzsKKwlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyCSp4Y2VpdiA9IDA7CisJY29uc3QgY2hhcgkJKnR5cGUgPSAwOworCXN0cnVjdCBvbWFwX3VzYl9jb25maWcJKmNvbmZpZyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKworCS8qIE5PVEU6ICAia25vd3MiIHRoZSBvcmRlciBvZiB0aGUgcmVzb3VyY2VzISAqLworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKG9kZXYtPnJlc291cmNlWzBdLnN0YXJ0LCAKKwkJCW9kZXYtPnJlc291cmNlWzBdLmVuZCAtIG9kZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMSwKKwkJCWRyaXZlcl9uYW1lKSkgeworCQlEQkcoInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCUlORk8oIk9NQVAgVURDIHJldiAlZC4lZCVzXG4iLAorCQlVRENfUkVWX1JFRyA+PiA0LCBVRENfUkVWX1JFRyAmIDB4ZiwKKwkJY29uZmlnLT5vdGcgPyAiLCBNaW5pLUFCIiA6ICIiKTsKKworCS8qIHVzZSB0aGUgbW9kZSBnaXZlbiB0byB1cyBieSBib2FyZCBpbml0IGNvZGUgKi8KKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKKwkJaG1jID0gSE1DXzE1MTA7CisJCXR5cGUgPSAiKHVua25vd24pIjsKKworCQlpZiAobWFjaGluZV9pc19vbWFwX2lubm92YXRvcigpKSB7CisJCQkvKiBqdXN0IHNldCB1cCBzb2Z0d2FyZSBWQlVTIGRldGVjdCwgYW5kIHRoZW4KKwkJCSAqIGxhdGVyIHJpZyBpdCBzbyB3ZSBhbHdheXMgcmVwb3J0IFZCVVMuCisJCQkgKiBGSVhNRSB3aXRob3V0IHJlYWxseSBzZW5zaW5nIFZCVVMsIHdlIGNhbid0CisJCQkgKiBrbm93IHdoZW4gdG8gdHVybiBQVUxMVVBfRU4gb24vb2ZmOyBhbmQgdGhhdAorCQkJICogbWVhbnMgd2UgYWx3YXlzICJuZWVkIiB0aGUgNDhNSHogY2xvY2suCisJCQkgKi8KKwkJCXUzMiB0bXAgPSBGVU5DX01VWF9DVFJMXzBfUkVHOworCisJCQlGVU5DX01VWF9DVFJMXzBfUkVHICY9IH5WQlVTX0NUUkxfMTUxMDsKKwkJCXRtcCB8PSBWQlVTX01PREVfMTUxMDsKKwkJCXRtcCAmPSB+VkJVU19DVFJMXzE1MTA7CisJCQlGVU5DX01VWF9DVFJMXzBfUkVHID0gdG1wOworCQl9CisJfSBlbHNlIHsKKwkJaG1jID0gSE1DXzE2MTA7CisJCXN3aXRjaCAoaG1jKSB7CisJCWNhc2UgMzoKKwkJY2FzZSAxMToKKwkJY2FzZSAxNjoKKwkJY2FzZSAxOToKKwkJY2FzZSAyNToKKwkJCXhjZWl2ID0gb3RnX2dldF90cmFuc2NlaXZlcigpOworCQkJaWYgKCF4Y2VpdikgeworCQkJCURCRygiZXh0ZXJuYWwgdHJhbnNjZWl2ZXIgbm90IHJlZ2lzdGVyZWQhXG4iKTsKKwkJCQlpZiAoY29uZmlnLT5vdGcpCisJCQkJCWdvdG8gY2xlYW51cDA7CisJCQkJdHlwZSA9ICIodW5rbm93biBleHRlcm5hbCkiOworCQkJfSBlbHNlCisJCQkJdHlwZSA9IHhjZWl2LT5sYWJlbDsKKwkJCWJyZWFrOworCQljYXNlIDA6CQkJLyogUE9XRVJVUCBERUZBVUxUID09IDAgKi8KKwkJY2FzZSA0OgorCQljYXNlIDEyOgorCQljYXNlIDIwOgorCQkJdHlwZSA9ICJJTlRFR1JBVEVEIjsKKwkJCWJyZWFrOworCQljYXNlIDIxOgkJCS8qIGludGVybmFsIGxvb3BiYWNrICovCisJCQl0eXBlID0gIihsb29wYmFjaykiOworCQkJYnJlYWs7CisJCWNhc2UgMTQ6CQkJLyogdHJhbnNjZWl2ZXJsZXNzICovCisJCQl0eXBlID0gIihub25lKSI7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJRVJSKCJ1bnJlY29nbml6ZWQgVURDIEhNQyBtb2RlICVkXG4iLCBobWMpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CisJSU5GTygiaG1jIG1vZGUgJWQsIHRyYW5zY2VpdmVyICVzXG4iLCBobWMsIHR5cGUpOworCisJLyogYSAiZ2FkZ2V0IiBhYnN0cmFjdHMvdmlydHVhbGl6ZXMgdGhlIGNvbnRyb2xsZXIgKi8KKwlzdGF0dXMgPSBvbWFwX3VkY19zZXR1cChvZGV2LCB4Y2Vpdik7CisJaWYgKHN0YXR1cykgeworCQlnb3RvIGNsZWFudXAwOworCX0KKwl4Y2VpdiA9IDA7CisJLy8gInVkYyIgaXMgbm93IHZhbGlkCisJcHVsbHVwX2Rpc2FibGUodWRjKTsKKyNpZglkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUpCisJdWRjLT5nYWRnZXQuaXNfb3RnID0gKGNvbmZpZy0+b3RnICE9IDApOworI2VuZGlmCisKKwkvKiBVU0IgZ2VuZXJhbCBwdXJwb3NlIElSUTogIGVwMCwgc3RhdGUgY2hhbmdlcywgZG1hLCBldGMgKi8KKwlzdGF0dXMgPSByZXF1ZXN0X2lycShvZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgb21hcF91ZGNfaXJxLAorCQkJU0FfU0FNUExFX1JBTkRPTSwgZHJpdmVyX25hbWUsIHVkYyk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCUVSUiggImNhbid0IGdldCBpcnEgJWxkLCBlcnIgJWRcbiIsCisJCQlvZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgc3RhdHVzKTsKKwkJZ290byBjbGVhbnVwMTsKKwl9CisKKwkvKiBVU0IgIm5vbi1pc28iIElSUSAoUElPIGZvciBhbGwgYnV0IGVwMCkgKi8KKwlzdGF0dXMgPSByZXF1ZXN0X2lycShvZGV2LT5yZXNvdXJjZVsyXS5zdGFydCwgb21hcF91ZGNfcGlvX2lycSwKKwkJCVNBX1NBTVBMRV9SQU5ET00sICJvbWFwX3VkYyBwaW8iLCB1ZGMpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlFUlIoICJjYW4ndCBnZXQgaXJxICVsZCwgZXJyICVkXG4iLAorCQkJb2Rldi0+cmVzb3VyY2VbMl0uc3RhcnQsIHN0YXR1cyk7CisJCWdvdG8gY2xlYW51cDI7CisJfQorI2lmZGVmCVVTRV9JU08KKwlzdGF0dXMgPSByZXF1ZXN0X2lycShvZGV2LT5yZXNvdXJjZVszXS5zdGFydCwgb21hcF91ZGNfaXNvX2lycSwKKwkJCVNBX0lOVEVSUlVQVCwgIm9tYXBfdWRjIGlzbyIsIHVkYyk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCUVSUigiY2FuJ3QgZ2V0IGlycSAlbGQsIGVyciAlZFxuIiwKKwkJCW9kZXYtPnJlc291cmNlWzNdLnN0YXJ0LCBzdGF0dXMpOworCQlnb3RvIGNsZWFudXAzOworCX0KKyNlbmRpZgorCisJY3JlYXRlX3Byb2NfZmlsZSgpOworCWRldmljZV9hZGQoJnVkYy0+Z2FkZ2V0LmRldik7CisJcmV0dXJuIDA7CisKKyNpZmRlZglVU0VfSVNPCitjbGVhbnVwMzoKKwlmcmVlX2lycShvZGV2LT5yZXNvdXJjZVsyXS5zdGFydCwgdWRjKTsKKyNlbmRpZgorCitjbGVhbnVwMjoKKwlmcmVlX2lycShvZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgdWRjKTsKKworY2xlYW51cDE6CisJa2ZyZWUgKHVkYyk7CisJdWRjID0gMDsKKworY2xlYW51cDA6CisJaWYgKHhjZWl2KQorCQlwdXRfZGV2aWNlKHhjZWl2LT5kZXYpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihvZGV2LT5yZXNvdXJjZVswXS5zdGFydCwKKwkJCW9kZXYtPnJlc291cmNlWzBdLmVuZCAtIG9kZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBfX2V4aXQgb21hcF91ZGNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpvZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJREVDTEFSRV9DT01QTEVUSU9OKGRvbmUpOworCisJaWYgKCF1ZGMpCisJCXJldHVybiAtRU5PREVWOworCisJdWRjLT5kb25lID0gJmRvbmU7CisKKwlwdWxsdXBfZGlzYWJsZSh1ZGMpOworCWlmICh1ZGMtPnRyYW5zY2VpdmVyKSB7CisJCXB1dF9kZXZpY2UodWRjLT50cmFuc2NlaXZlci0+ZGV2KTsKKwkJdWRjLT50cmFuc2NlaXZlciA9IDA7CisJfQorCVVEQ19TWVNDT04xX1JFRyA9IDA7CisKKwlyZW1vdmVfcHJvY19maWxlKCk7CisKKyNpZmRlZglVU0VfSVNPCisJZnJlZV9pcnEob2Rldi0+cmVzb3VyY2VbM10uc3RhcnQsIHVkYyk7CisjZW5kaWYKKwlmcmVlX2lycShvZGV2LT5yZXNvdXJjZVsyXS5zdGFydCwgdWRjKTsKKwlmcmVlX2lycShvZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgdWRjKTsKKworCXJlbGVhc2VfbWVtX3JlZ2lvbihvZGV2LT5yZXNvdXJjZVswXS5zdGFydCwKKwkJCW9kZXYtPnJlc291cmNlWzBdLmVuZCAtIG9kZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMSk7CisKKwlkZXZpY2VfdW5yZWdpc3RlcigmdWRjLT5nYWRnZXQuZGV2KTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkb25lKTsKKworCXJldHVybiAwOworfQorCisvKiBzdXNwZW5kL3Jlc3VtZS93YWtldXAgZnJvbSBzeXNmcyAoZWNobyA+IHBvd2VyL3N0YXRlKSAqLworCitzdGF0aWMgaW50IG9tYXBfdWRjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgc3RhdGUsIHUzMiBsZXZlbCkKK3sKKwlpZiAobGV2ZWwgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlEQkcoInN1c3BlbmQsIHN0YXRlICVkXG4iLCBzdGF0ZSk7CisJb21hcF9wdWxsdXAoJnVkYy0+Z2FkZ2V0LCAwKTsKKwl1ZGMtPmdhZGdldC5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSAzOworCXVkYy0+Z2FkZ2V0LmRldi5wYXJlbnQtPnBvd2VyLnBvd2VyX3N0YXRlID0gMzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwX3VkY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgbGV2ZWwpCit7CisJaWYgKGxldmVsICE9IDApCisJCXJldHVybiAwOworCisJREJHKCJyZXN1bWUgKyB3YWtldXAvU1JQXG4iKTsKKwl1ZGMtPmdhZGdldC5kZXYucGFyZW50LT5wb3dlci5wb3dlcl9zdGF0ZSA9IDA7CisJdWRjLT5nYWRnZXQuZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gMDsKKwlvbWFwX3B1bGx1cCgmdWRjLT5nYWRnZXQsIDEpOworCisJLyogbWF5YmUgdGhlIGhvc3Qgd291bGQgZW51bWVyYXRlIHVzIGlmIHdlIG51ZGdlZCBpdCAqLworCW1zbGVlcCgxMDApOworCXJldHVybiBvbWFwX3dha2V1cCgmdWRjLT5nYWRnZXQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdWRjX2RyaXZlciA9IHsKKwkubmFtZQkJPSAoY2hhciAqKSBkcml2ZXJfbmFtZSwKKwkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkucHJvYmUJCT0gb21hcF91ZGNfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2V4aXRfcChvbWFwX3VkY19yZW1vdmUpLAorCS5zdXNwZW5kCT0gb21hcF91ZGNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IG9tYXBfdWRjX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVkY19pbml0KHZvaWQpCit7CisJSU5GTygiJXMsIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04KKyNpZmRlZglVU0VfSVNPCisJCSIgKGlzbykiCisjZW5kaWYKKwkJIiVzXG4iLCBkcml2ZXJfZGVzYywKKwkJdXNlX2RtYSA/ICAiIChkbWEpIiA6ICIiKTsKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHVkY19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHVkY19leGl0KHZvaWQpCit7CisJZHJpdmVyX3VucmVnaXN0ZXIoJnVkY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQodWRjX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZTY4NTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuaApAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqIG9tYXBfdWRjLmggLS0gZm9yIG9tYXAgMy4yIHVkYywgd2l0aCBPVEcgc3VwcG9ydAorICoKKyAqIDIwMDQgKEMpIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiAyMDA0IChDKSBEYXZpZCBCcm93bmVsbAorICovCisKKy8qCisgKiBVU0IgZGV2aWNlL2VuZHBvaW50IG1hbmFnZW1lbnQgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgVURDX1JFRyhvZmZzZXQpICAgICAgICAgICAgICBfX1JFRzE2KFVEQ19CQVNFICsgKG9mZnNldCkpCisKKyNkZWZpbmUJVURDX1JFVl9SRUcJCQlVRENfUkVHKDB4MCkJLyogUmV2aXNpb24gKi8KKyNkZWZpbmUJVURDX0VQX05VTV9SRUcJCQlVRENfUkVHKDB4NCkJLyogV2hpY2ggZW5kcG9pbnQgKi8KKyMJZGVmaW5lCVVEQ19TRVRVUF9TRUwJCSgxIDw8IDYpCisjCWRlZmluZQlVRENfRVBfU0VMCQkoMSA8PCA1KQorIwlkZWZpbmUJVURDX0VQX0RJUgkJKDEgPDwgNCkKKwkvKiBsb3cgNCBiaXRzIGZvciBlbmRwb2ludCBudW1iZXIgKi8KKyNkZWZpbmUJVURDX0RBVEFfUkVHCQkJVURDX1JFRygweDA4KQkvKiBFbmRwb2ludCBGSUZPICovCisjZGVmaW5lCVVEQ19DVFJMX1JFRwkJCVVEQ19SRUcoMHgwQykJLyogRW5kcG9pbnQgY29udHJvbCAqLworIwlkZWZpbmUJVURDX0NMUl9IQUxUCQkoMSA8PCA3KQorIwlkZWZpbmUJVURDX1NFVF9IQUxUCQkoMSA8PCA2KQorIwlkZWZpbmUJVURDX1NFVF9GSUZPX0VOCQkoMSA8PCAyKQorIwlkZWZpbmUJVURDX0NMUl9FUAkJKDEgPDwgMSkKKyMJZGVmaW5lCVVEQ19SRVNFVF9FUAkJKDEgPDwgMCkKKyNkZWZpbmUJVURDX1NUQVRfRkxHX1JFRwkJVURDX1JFRygweDEwKQkvKiBFbmRwb2ludCBzdGF0dXMgKi8KKyMJZGVmaW5lCVVEQ19OT19SWFBBQ0tFVAkJKDEgPDwgMTUpCisjCWRlZmluZQlVRENfTUlTU19JTgkJKDEgPDwgMTQpCisjCWRlZmluZQlVRENfREFUQV9GTFVTSAkJKDEgPDwgMTMpCisjCWRlZmluZQlVRENfSVNPX0VSUgkJKDEgPDwgMTIpCisjCWRlZmluZQlVRENfSVNPX0ZJRk9fRU1QVFkJKDEgPDwgOSkKKyMJZGVmaW5lCVVEQ19JU09fRklGT19GVUxMCSgxIDw8IDgpCisjCWRlZmluZQlVRENfRVBfSEFMVEVECQkoMSA8PCA2KQorIwlkZWZpbmUJVURDX1NUQUxMCQkoMSA8PCA1KQorIwlkZWZpbmUJVURDX05BSwkJCSgxIDw8IDQpCisjCWRlZmluZQlVRENfQUNLCQkJKDEgPDwgMykKKyMJZGVmaW5lCVVEQ19GSUZPX0VOCQkoMSA8PCAyKQorIwlkZWZpbmUJVURDX05PTl9JU09fRklGT19FTVBUWQkoMSA8PCAxKQorIwlkZWZpbmUJVURDX05PTl9JU09fRklGT19GVUxMCSgxIDw8IDApCisjZGVmaW5lCVVEQ19SWEZTVEFUX1JFRwkJCVVEQ19SRUcoMHgxNCkJLyogT1VUIGJ5dGVjb3VudCAqLworI2RlZmluZQlVRENfU1lTQ09OMV9SRUcJCQlVRENfUkVHKDB4MTgpCS8qIFN5c3RlbSBjb25maWcgMSAqLworIwlkZWZpbmUJVURDX0NGR19MT0NLCQkoMSA8PCA4KQorIwlkZWZpbmUJVURDX0RBVEFfRU5ESUFOCQkoMSA8PCA3KQorIwlkZWZpbmUJVURDX0RNQV9FTkRJQU4JCSgxIDw8IDYpCisjCWRlZmluZQlVRENfTkFLX0VOCQkoMSA8PCA0KQorIwlkZWZpbmUJVURDX0FVVE9ERUNPREVfRElTCSgxIDw8IDMpCisjCWRlZmluZQlVRENfU0VMRl9QV1IJCSgxIDw8IDIpCisjCWRlZmluZQlVRENfU09GRl9ESVMJCSgxIDw8IDEpCisjCWRlZmluZQlVRENfUFVMTFVQX0VOCQkoMSA8PCAwKQorI2RlZmluZQlVRENfU1lTQ09OMl9SRUcJCQlVRENfUkVHKDB4MUMpCS8qIFN5c3RlbSBjb25maWcgMiAqLworIwlkZWZpbmUJVURDX1JNVF9XS1AJCSgxIDw8IDYpCisjCWRlZmluZQlVRENfU1RBTExfQ01ECQkoMSA8PCA1KQorIwlkZWZpbmUJVURDX0RFVl9DRkcJCSgxIDw8IDMpCisjCWRlZmluZQlVRENfQ0xSX0NGRwkJKDEgPDwgMikKKyNkZWZpbmUJVURDX0RFVlNUQVRfUkVHCQkJVURDX1JFRygweDIwKQkvKiBEZXZpY2Ugc3RhdHVzICovCisjCWRlZmluZQlVRENfQl9ITlBfRU5BQkxFCSgxIDw8IDkpCisjCWRlZmluZQlVRENfQV9ITlBfU1VQUE9SVAkoMSA8PCA4KQorIwlkZWZpbmUJVURDX0FfQUxUX0hOUF9TVVBQT1JUCSgxIDw8IDcpCisjCWRlZmluZQlVRENfUl9XS19PSwkJKDEgPDwgNikKKyMJZGVmaW5lCVVEQ19VU0JfUkVTRVQJCSgxIDw8IDUpCisjCWRlZmluZQlVRENfU1VTCQkJKDEgPDwgNCkKKyMJZGVmaW5lCVVEQ19DRkcJCQkoMSA8PCAzKQorIwlkZWZpbmUJVURDX0FERAkJCSgxIDw8IDIpCisjCWRlZmluZQlVRENfREVGCQkJKDEgPDwgMSkKKyMJZGVmaW5lCVVEQ19BVFQJCQkoMSA8PCAwKQorI2RlZmluZQlVRENfU09GX1JFRwkJCVVEQ19SRUcoMHgyNCkJLyogU3RhcnQgb2YgZnJhbWUgKi8KKyMJZGVmaW5lCVVEQ19GVF9MT0NLCQkoMSA8PCAxMikKKyMJZGVmaW5lCVVEQ19UU19PSwkJKDEgPDwgMTEpCisjCWRlZmluZQlVRENfVFMJCQkweDAzZmYKKyNkZWZpbmUJVURDX0lSUV9FTl9SRUcJCQlVRENfUkVHKDB4MjgpCS8qIEludGVycnVwdCBlbmFibGUgKi8KKyMJZGVmaW5lCVVEQ19TT0ZfSUUJCSgxIDw8IDcpCisjCWRlZmluZQlVRENfRVBOX1JYX0lFCQkoMSA8PCA1KQorIwlkZWZpbmUJVURDX0VQTl9UWF9JRQkJKDEgPDwgNCkKKyMJZGVmaW5lCVVEQ19EU19DSEdfSUUJCSgxIDw8IDMpCisjCWRlZmluZQlVRENfRVAwX0lFCQkoMSA8PCAwKQorI2RlZmluZQlVRENfRE1BX0lSUV9FTl9SRUcJCVVEQ19SRUcoMHgyQykJLyogRE1BIGlycSBlbmFibGUgKi8KKwkvKiByeC90eCBkbWEgY2hhbm5lbHMgbnVtYmVyZWQgMS0zIG5vdCAwLTIgKi8KKyMJZGVmaW5lCVVEQ19UWF9ET05FX0lFKG4pCSgxIDw8ICg0ICogKG4pIC0gMikpCisjCWRlZmluZQlVRENfUlhfQ05UX0lFKG4pCSgxIDw8ICg0ICogKG4pIC0gMykpCisjCWRlZmluZQlVRENfUlhfRU9UX0lFKG4pCSgxIDw8ICg0ICogKG4pIC0gNCkpCisjZGVmaW5lCVVEQ19JUlFfU1JDX1JFRwkJCVVEQ19SRUcoMHgzMCkJLyogSW50ZXJydXB0IHNvdXJjZSAqLworIwlkZWZpbmUJVURDX1RYTl9ET05FCQkoMSA8PCAxMCkKKyMJZGVmaW5lCVVEQ19SWE5fQ05UCQkoMSA8PCA5KQorIwlkZWZpbmUJVURDX1JYTl9FT1QJCSgxIDw8IDgpCisjCWRlZmluZQlVRENfU09GCQkJKDEgPDwgNykKKyMJZGVmaW5lCVVEQ19FUE5fUlgJCSgxIDw8IDUpCisjCWRlZmluZQlVRENfRVBOX1RYCQkoMSA8PCA0KQorIwlkZWZpbmUJVURDX0RTX0NIRwkJKDEgPDwgMykKKyMJZGVmaW5lCVVEQ19TRVRVUAkJKDEgPDwgMikKKyMJZGVmaW5lCVVEQ19FUDBfUlgJCSgxIDw8IDEpCisjCWRlZmluZQlVRENfRVAwX1RYCQkoMSA8PCAwKQorIwlkZWZpbmUJVURDX0lSUV9TUkNfTUFTSwkweDdiZgorI2RlZmluZQlVRENfRVBOX1NUQVRfUkVHCQlVRENfUkVHKDB4MzQpCS8qIEVQIGlycSBzdGF0dXMgKi8KKyNkZWZpbmUJVURDX0RNQU5fU1RBVF9SRUcJCVVEQ19SRUcoMHgzOCkJLyogRE1BIGlycSBzdGF0dXMgKi8KKyMJZGVmaW5lCVVEQ19ETUFfUlhfU0IJCSgxIDw8IDEyKQorIwlkZWZpbmUJVURDX0RNQV9SWF9TUkMoeCkJKCgoeCk+PjgpICYgMHhmKQorIwlkZWZpbmUJVURDX0RNQV9UWF9TUkMoeCkJKCgoeCk+PjApICYgMHhmKQorCisKKy8qIERNQSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyczogIHVwIHRvIHRocmVlIGNoYW5uZWxzIGluIGVhY2ggZGlyZWN0aW9uLiAgKi8KKyNkZWZpbmUJVURDX1JYRE1BX0NGR19SRUcJCVVEQ19SRUcoMHg0MCkJLyogMyBlcHMgZm9yIFJYIERNQSAqLworI2RlZmluZQlVRENfVFhETUFfQ0ZHX1JFRwkJVURDX1JFRygweDQ0KQkvKiAzIGVwcyBmb3IgVFggRE1BICovCisjZGVmaW5lCVVEQ19EQVRBX0RNQV9SRUcJCVVEQ19SRUcoMHg0OCkJLyogcngvdHggZmlmbyBhZGRyICovCisKKy8qIHJ4L3R4IGRtYSBjb250cm9sLCBudW1iZXJpbmcgY2hhbm5lbHMgMS0zIG5vdCAwLTIgKi8KKyNkZWZpbmUJVURDX1RYRE1BX1JFRyhjaGFuKQkJVURDX1JFRygweDUwIC0gNCArIDQgKiAoY2hhbikpCisjCWRlZmluZSBVRENfVFhOX0VPVAkJKDEgPDwgMTUpCS8qIGJ5dGVzIHZzIHBhY2tldHMgKi8KKyMJZGVmaW5lIFVEQ19UWE5fU1RBUlQJCSgxIDw8IDE0KQkvKiBzdGFydCB0cmFuc2ZlciAqLworIwlkZWZpbmUgVURDX1RYTl9UU0MJCTB4MDNmZgkJLyogdW5pdHMgaW4geGZlciAqLworI2RlZmluZQlVRENfUlhETUFfUkVHKGNoYW4pCQlVRENfUkVHKDB4NjAgLSA0ICsgNCAqIChjaGFuKSkKKyMJZGVmaW5lIFVEQ19SWE5fU1RPUAkJKDEgPDwgMTUpCS8qIGVuYWJsZSBFT1QgaXJxICovCisjCWRlZmluZSBVRENfUlhOX1RDCQkweDAwZmYJCS8qIHBhY2tldHMgaW4geGZlciAqLworCisKKy8qCisgKiBFbmRwb2ludCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAodXNlZCBiZWZvcmUgQ0ZHX0xPQ0sgaXMgc2V0KQorICogVURDX0VQX1RYX1JFRygwKSBpcyB1bnVzZWQKKyAqLworI2RlZmluZQlVRENfRVBfUlhfUkVHKGVuZHBvaW50KQkJVURDX1JFRygweDgwICsgKGVuZHBvaW50KSo0KQorIwlkZWZpbmUJVURDX0VQTl9SWF9WQUxJRAkoMSA8PCAxNSkKKyMJZGVmaW5lCVVEQ19FUE5fUlhfREIJCSgxIDw8IDE0KQorCS8qIGJ1ZmZlciBzaXplIGluIGJpdHMgMTMsIDEyICovCisjCWRlZmluZQlVRENfRVBOX1JYX0lTTwkJKDEgPDwgMTEpCisJLyogYnVmZmVyIHBvaW50ZXIgaW4gbG93IDExIGJpdHMgKi8KKyNkZWZpbmUJVURDX0VQX1RYX1JFRyhlbmRwb2ludCkJCVVEQ19SRUcoMHhjMCArIChlbmRwb2ludCkqNCkKKwkvKiBzYW1lIGJpdGZpZWxkcyBhcyBpbiBSWF9SRUcgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IG9tYXBfcmVxIHsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJCXJlcTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlxdWV1ZTsKKwl1bnNpZ25lZAkJCWRtYV9ieXRlczsKKwl1bnNpZ25lZAkJCW1hcHBlZDoxOworfTsKKworc3RydWN0IG9tYXBfZXAgeworCXN0cnVjdCB1c2JfZXAJCQllcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlxdWV1ZTsKKwl1bnNpZ25lZCBsb25nCQkJaXJxczsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlpc287CisJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpkZXNjOworCWNoYXIJCQkJbmFtZVsxNF07CisJdTE2CQkJCW1heHBhY2tldDsKKwl1OAkJCQliRW5kcG9pbnRBZGRyZXNzOworCXU4CQkJCWJtQXR0cmlidXRlczsKKwl1bnNpZ25lZAkJCWRvdWJsZV9idWY6MTsKKwl1bnNpZ25lZAkJCXN0b3BwZWQ6MTsKKwl1bnNpZ25lZAkJCWZuZjoxOworCXVuc2lnbmVkCQkJaGFzX2RtYToxOworCXU4CQkJCWFja3dhaXQ7CisJdTgJCQkJZG1hX2NoYW5uZWw7CisJdTE2CQkJCWRtYV9jb3VudGVyOworCWludAkJCQlsY2g7CisJc3RydWN0IG9tYXBfdWRjCQkJKnVkYzsKKwlzdHJ1Y3QgdGltZXJfbGlzdAkJdGltZXI7Cit9OworCitzdHJ1Y3Qgb21hcF91ZGMgeworCXN0cnVjdCB1c2JfZ2FkZ2V0CQlnYWRnZXQ7CisJc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyCSpkcml2ZXI7CisJc3BpbmxvY2tfdAkJCWxvY2s7CisJc3RydWN0IG9tYXBfZXAJCQllcFszMl07CisJdTE2CQkJCWRldnN0YXQ7CisJc3RydWN0IG90Z190cmFuc2NlaXZlcgkJKnRyYW5zY2VpdmVyOworCXN0cnVjdCBsaXN0X2hlYWQJCWlzbzsKKwl1bnNpZ25lZAkJCXNvZnRjb25uZWN0OjE7CisJdW5zaWduZWQJCQl2YnVzX2FjdGl2ZToxOworCXVuc2lnbmVkCQkJZXAwX3BlbmRpbmc6MTsKKwl1bnNpZ25lZAkJCWVwMF9pbjoxOworCXVuc2lnbmVkCQkJZXAwX3NldF9jb25maWc6MTsKKwl1bnNpZ25lZAkJCWVwMF9yZXNldF9jb25maWc6MTsKKwl1bnNpZ25lZAkJCWVwMF9zZXR1cDoxOworCisJc3RydWN0IGNvbXBsZXRpb24JCSpkb25lOworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERCRyhzdHVmZi4uLikJCXByaW50ayhLRVJOX0RFQlVHICJ1ZGM6ICIgc3R1ZmYpCisjZWxzZQorI2RlZmluZSBEQkcoc3R1ZmYuLi4pCQlkb3t9d2hpbGUoMCkKKyNlbmRpZgorCisjaWZkZWYgVkVSQk9TRQorIyAgICBkZWZpbmUgVkRCRwkJREJHCisjZWxzZQorIyAgICBkZWZpbmUgVkRCRyhzdHVmZi4uLikJZG97fXdoaWxlKDApCisjZW5kaWYKKworI2RlZmluZSBFUlIoc3R1ZmYuLi4pCQlwcmludGsoS0VSTl9FUlIgInVkYzogIiBzdHVmZikKKyNkZWZpbmUgV0FSTihzdHVmZi4uLikJCXByaW50ayhLRVJOX1dBUk5JTkcgInVkYzogIiBzdHVmZikKKyNkZWZpbmUgSU5GTyhzdHVmZi4uLikJCXByaW50ayhLRVJOX0lORk8gInVkYzogIiBzdHVmZikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZQlNT0RfQ09ORl9DVFJMXzBfUkVHCV9fUkVHMzIoTU9EX0NPTkZfQ1RSTF8wKQorI2RlZmluZQlWQlVTX1cyRkNfMTUxMAkJKDEgPDwgMTcpCS8qIDAgZ3BpbzAsIDEgZHZkZDIgcGluICovCisKKyNkZWZpbmUJRlVOQ19NVVhfQ1RSTF8wX1JFRwlfX1JFRzMyKEZVTkNfTVVYX0NUUkxfMCkKKyNkZWZpbmUJVkJVU19DVFJMXzE1MTAJCSgxIDw8IDE5KQkvKiAxIGNvbm5lY3RlZCAoc29mdHdhcmUpICovCisjZGVmaW5lCVZCVVNfTU9ERV8xNTEwCQkoMSA8PCAxOCkJLyogMCBoYXJkd2FyZSwgMSBzb2Z0d2FyZSAqLworCisjZGVmaW5lCUhNQ18xNTEwCSgoTU9EX0NPTkZfQ1RSTF8wX1JFRyA+PiAxKSAmIDB4M2YpCisjZGVmaW5lCUhNQ18xNjEwCShPVEdfU1lTQ09OXzJfUkVHICYgMHgzZikKKyNkZWZpbmUJSE1DCQkoY3B1X2lzX29tYXAxNXh4KCkgPyBITUNfMTUxMCA6IEhNQ18xNjEwKQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzkwYzU3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYwpAQCAtMCwwICsxLDI2NDggQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5jCisgKiBJbnRlbCBQWEEyeHggYW5kIElYUDR4eCBvbi1jaGlwIGZ1bGwgc3BlZWQgVVNCIGRldmljZSBjb250cm9sbGVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBJbnRyaW5zeWMsIEluYy4gKEZyYW5rIEJlY2tlcikKKyAqIENvcHlyaWdodCAoQykgMjAwMyBSb2JlcnQgU2Nod2ViZWwsIFBlbmd1dHJvbml4CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQmVuZWRpa3QgU3ByYW5nZXIsIFBlbmd1dHJvbml4CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgRGF2aWQgQnJvd25lbGwKKyAqIENvcHlyaWdodCAoQykgMjAwMyBKb3NodWEgV2lzZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI3VuZGVmCURFQlVHCisvLyAjZGVmaW5lCVZFUkJPU0UJREJHX1ZFUkJPU0UKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorCisjaW5jbHVkZSA8bGludXgvdXNiX2NoOS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9nYWRnZXQuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3VkYy5oPgorCisKKy8qCisgKiBUaGlzIGRyaXZlciBoYW5kbGVzIHRoZSBVU0IgRGV2aWNlIENvbnRyb2xsZXIgKFVEQykgaW4gSW50ZWwncyBQWEEgMnh4CisgKiBzZXJpZXMgcHJvY2Vzc29ycy4gIFRoZSBVREMgZm9yIHRoZSBJWFAgNHh4IHNlcmllcyBpcyB2ZXJ5IHNpbWlsYXIuCisgKiBUaGVyZSBhcmUgZmlmdGVlbiBlbmRwb2ludHMsIGluIGFkZGl0aW9uIHRvIGVwMC4KKyAqCisgKiBTdWNoIGNvbnRyb2xsZXIgZHJpdmVycyB3b3JrIHdpdGggYSBnYWRnZXQgZHJpdmVyLiAgVGhlIGdhZGdldCBkcml2ZXIKKyAqIHJldHVybnMgZGVzY3JpcHRvcnMsIGltcGxlbWVudHMgY29uZmlndXJhdGlvbiBhbmQgZGF0YSBwcm90b2NvbHMgdXNlZAorICogYnkgdGhlIGhvc3QgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIGRldmljZSwgYW5kIGFsbG9jYXRlcyBlbmRwb2ludHMgdG8KKyAqIHRoZSBkaWZmZXJlbnQgcHJvdG9jb2wgaW50ZXJmYWNlcy4gIFRoZSBjb250cm9sbGVyIGRyaXZlciB2aXJ0dWFsaXplcworICogdXNiIGhhcmR3YXJlIHNvIHRoYXQgdGhlIGdhZGdldCBkcml2ZXJzIHdpbGwgYmUgbW9yZSBwb3J0YWJsZS4KKyAqIAorICogVGhpcyBVREMgaGFyZHdhcmUgd2FudHMgdG8gaW1wbGVtZW50IGEgYml0IHRvbyBtdWNoIFVTQiBwcm90b2NvbCwgc28KKyAqIGl0IGNvbnN0cmFpbnMgdGhlIHNvcnRzIG9mIFVTQiBjb25maWd1cmF0aW9uIGNoYW5nZSBldmVudHMgdGhhdCB3b3JrLgorICogVGhlIGVycmF0YSBmb3IgdGhlc2UgY2hpcHMgYXJlIG1pc2xlYWRpbmc7IHNvbWUgImZpeGVkIiBidWdzIGZyb20KKyAqIHB4YTI1MCBhMC9hMSBiMC9iMS9iMiBzdXJlIGFjdCBsaWtlIHRoZXkncmUgc3RpbGwgdGhlcmUuCisgKi8KKworI2RlZmluZQlEUklWRVJfVkVSU0lPTgkiMTQtRGVjLTIwMDMiCisjZGVmaW5lCURSSVZFUl9ERVNDCSJQWEEgMnh4IFVTQiBEZXZpY2UgQ29udHJvbGxlciBkcml2ZXIiCisKKworc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWUgW10gPSAicHhhMnh4X3VkYyI7CisKK3N0YXRpYyBjb25zdCBjaGFyIGVwMG5hbWUgW10gPSAiZXAwIjsKKworCisvLyAjZGVmaW5lCVVTRV9ETUEKKy8vICNkZWZpbmUJVVNFX09VVF9ETUEKKy8vICNkZWZpbmUJRElTQUJMRV9URVNUX01PREUKKworI2lmZGVmIENPTkZJR19BUkNIX0lYUDRYWAorI3VuZGVmIFVTRV9ETUEKKworLyogY3B1LXNwZWNpZmljIHJlZ2lzdGVyIGFkZHJlc3NlcyBhcmUgY29tcGlsZWQgaW4gdG8gdGhpcyBjb2RlICovCisjaWZkZWYgQ09ORklHX0FSQ0hfUFhBCisjZXJyb3IgIkNhbid0IGNvbmZpZ3VyZSBib3RoIElYUCBhbmQgUFhBIgorI2VuZGlmCisKKyNlbmRpZgorCisjaW5jbHVkZSAicHhhMnh4X3VkYy5oIgorCisKKyNpZmRlZglVU0VfRE1BCitzdGF0aWMgaW50IHVzZV9kbWEgPSAxOworbW9kdWxlX3BhcmFtKHVzZV9kbWEsIGJvb2wsIDApOworTU9EVUxFX1BBUk1fREVTQyAodXNlX2RtYSwgInRydWUgdG8gdXNlIGRtYSIpOworCitzdGF0aWMgdm9pZCBkbWFfbm9kZXNjX2hhbmRsZXIgKGludCBkbWFjaCwgdm9pZCAqX2VwLCBzdHJ1Y3QgcHRfcmVncyAqcik7CitzdGF0aWMgdm9pZCBraWNrX2RtYShzdHJ1Y3QgcHhhMnh4X2VwICplcCwgc3RydWN0IHB4YTJ4eF9yZXF1ZXN0ICpyZXEpOworCisjaWZkZWYgVVNFX09VVF9ETUEKKyNkZWZpbmUJRE1BU1RSICIgKGRtYSBzdXBwb3J0KSIKKyNlbHNlCisjZGVmaW5lCURNQVNUUiAiIChkbWEgaW4pIgorI2VuZGlmCisKKyNlbHNlCS8qICFVU0VfRE1BICovCisjZGVmaW5lCURNQVNUUiAiIChwaW8gb25seSkiCisjdW5kZWYJVVNFX09VVF9ETUEKKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX1VTQl9QWEEyWFhfU01BTEwKKyNkZWZpbmUgU0laRV9TVFIJIiAoc21hbGwpIgorI2Vsc2UKKyNkZWZpbmUgU0laRV9TVFIJIiIKKyNlbmRpZgorCisjaWZkZWYgRElTQUJMRV9URVNUX01PREUKKy8qIChtb2RlID09IDApID09IG5vIHVuZG9jdW1lbnRlZCBjaGlwIHR3ZWFrcworICogKG1vZGUgJiAxKSAgPT0gZG91YmxlIGJ1ZmZlciBidWxrIElOCisgKiAobW9kZSAmIDIpICA9PSBkb3VibGUgYnVmZmVyIGJ1bGsgT1VUCisgKiAuLi4gc28gbW9kZSA9IDMgKG9yIDcsIDE1LCBldGMpIGRvZXMgaXQgZm9yIGJvdGgKKyAqLworc3RhdGljIHVzaG9ydCBmaWZvX21vZGUgPSAwOworbW9kdWxlX3BhcmFtKGZpZm9fbW9kZSwgdXNob3J0LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MgKGZpZm9fbW9kZSwgInB4YTJ4eCB1ZGMgZmlmbyBtb2RlIik7CisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAJZW5kcG9pbnQgcmVsYXRlZCBwYXJ0cyBvZiB0aGUgYXBpIHRvIHRoZSB1c2IgY29udHJvbGxlciBoYXJkd2FyZSwKKyAqCXVzZWQgYnkgZ2FkZ2V0IGRyaXZlcjsgYW5kIHRoZSBpbm5lciB0YWxrZXItdG8taGFyZHdhcmUgY29yZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0YXRpYyB2b2lkIHB4YTJ4eF9lcF9maWZvX2ZsdXNoIChzdHJ1Y3QgdXNiX2VwICplcCk7CitzdGF0aWMgdm9pZCBudWtlIChzdHJ1Y3QgcHhhMnh4X2VwICosIGludCBzdGF0dXMpOworCitzdGF0aWMgdm9pZCBwaW9faXJxX2VuYWJsZShpbnQgYkVuZHBvaW50QWRkcmVzcykKK3sKKyAgICAgICAgYkVuZHBvaW50QWRkcmVzcyAmPSAweGY7CisgICAgICAgIGlmIChiRW5kcG9pbnRBZGRyZXNzIDwgOCkKKyAgICAgICAgICAgICAgICBVSUNSMCAmPSB+KDEgPDwgYkVuZHBvaW50QWRkcmVzcyk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGJFbmRwb2ludEFkZHJlc3MgLT0gODsKKyAgICAgICAgICAgICAgICBVSUNSMSAmPSB+KDEgPDwgYkVuZHBvaW50QWRkcmVzcyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwaW9faXJxX2Rpc2FibGUoaW50IGJFbmRwb2ludEFkZHJlc3MpCit7CisgICAgICAgIGJFbmRwb2ludEFkZHJlc3MgJj0gMHhmOworICAgICAgICBpZiAoYkVuZHBvaW50QWRkcmVzcyA8IDgpCisgICAgICAgICAgICAgICAgVUlDUjAgfD0gMSA8PCBiRW5kcG9pbnRBZGRyZXNzOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBiRW5kcG9pbnRBZGRyZXNzIC09IDg7CisgICAgICAgICAgICAgICAgVUlDUjEgfD0gMSA8PCBiRW5kcG9pbnRBZGRyZXNzOworICAgICAgICB9Cit9CisKKy8qIFRoZSBVRENDUiByZWcgY29udGFpbnMgbWFzayBhbmQgaW50ZXJydXB0IHN0YXR1cyBiaXRzLAorICogc28gdXNpbmcgJ3w9JyBpc24ndCBzYWZlIGFzIGl0IG1heSBhY2sgYW4gaW50ZXJydXB0LgorICovCisjZGVmaW5lIFVEQ0NSX01BU0tfQklUUyAgICAgICAgIChVRENDUl9SRU0gfCBVRENDUl9TUk0gfCBVRENDUl9VREUpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1ZGNfc2V0X21hc2tfVURDQ1IoaW50IG1hc2spCit7CisJVURDQ1IgPSAoVURDQ1IgJiBVRENDUl9NQVNLX0JJVFMpIHwgKG1hc2sgJiBVRENDUl9NQVNLX0JJVFMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWRjX2NsZWFyX21hc2tfVURDQ1IoaW50IG1hc2spCit7CisJVURDQ1IgPSAoVURDQ1IgJiBVRENDUl9NQVNLX0JJVFMpICYgfihtYXNrICYgVURDQ1JfTUFTS19CSVRTKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVkY19hY2tfaW50X1VEQ0NSKGludCBtYXNrKQoreworCS8qIHVkY2NyIGNvbnRhaW5zIHRoZSBiaXRzIHdlIGRvbnQgd2FudCB0byBjaGFuZ2UgKi8KKwlfX3UzMiB1ZGNjciA9IFVEQ0NSICYgVURDQ1JfTUFTS19CSVRTOworCisJVURDQ1IgPSB1ZGNjciB8IChtYXNrICYgflVEQ0NSX01BU0tfQklUUyk7Cit9CisKKy8qCisgKiBlbmRwb2ludCBlbmFibGUvZGlzYWJsZQorICoKKyAqIHdlIG5lZWQgdG8gdmVyaWZ5IHRoZSBkZXNjcmlwdG9ycyB1c2VkIHRvIGVuYWJsZSBlbmRwb2ludHMuICBzaW5jZSBweGEyeHgKKyAqIGVuZHBvaW50IGNvbmZpZ3VyYXRpb25zIGFyZSBmaXhlZCwgYW5kIGFyZSBwcmV0dHkgbXVjaCBhbHdheXMgZW5hYmxlZCwKKyAqIHRoZXJlJ3Mgbm90IGEgbG90IHRvIG1hbmFnZSBoZXJlLgorICoKKyAqIGJlY2F1c2UgcHhhMnh4IGNhbid0IHNlbGVjdGl2ZWx5IGluaXRpYWxpemUgYnVsayAob3IgaW50ZXJydXB0KSBlbmRwb2ludHMsCisgKiAocmVzZXR0aW5nIGVuZHBvaW50IGhhbHQgYW5kIHRvZ2dsZSksIFNFVF9JTlRFUkZBQ0UgaXMgdW51c2FibGUgZXhjZXB0CisgKiBmb3IgYSBzaW5nbGUgaW50ZXJmYWNlICh3aXRoIG9ubHkgdGhlIGRlZmF1bHQgYWx0c2V0dGluZykgYW5kIGZvciBnYWRnZXQKKyAqIGRyaXZlcnMgdGhhdCBkb24ndCBoYWx0IGVuZHBvaW50cyAobm90IHJlc2V0IGJ5IHNldF9pbnRlcmZhY2UpLiAgdGhhdCBhbHNvCisgKiBtZWFucyB0aGF0IGlmIHlvdSB1c2UgSVNPLCB5b3UgbXVzdCB2aW9sYXRlIHRoZSBVU0Igc3BlYyBydWxlIHRoYXQgYWxsCisgKiBpc28gZW5kcG9pbnRzIG11c3QgYmUgaW4gbm9uLWRlZmF1bHQgYWx0c2V0dGluZ3MuCisgKi8KK3N0YXRpYyBpbnQgcHhhMnh4X2VwX2VuYWJsZSAoc3RydWN0IHVzYl9lcCAqX2VwLAorCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJc3RydWN0IHB4YTJ4eF9lcCAgICAgICAgKmVwOworCXN0cnVjdCBweGEyeHhfdWRjICAgICAgICpkZXY7CisKKwllcCA9IGNvbnRhaW5lcl9vZiAoX2VwLCBzdHJ1Y3QgcHhhMnh4X2VwLCBlcCk7CisJaWYgKCFfZXAgfHwgIWRlc2MgfHwgZXAtPmRlc2MgfHwgX2VwLT5uYW1lID09IGVwMG5hbWUKKwkJCXx8IGRlc2MtPmJEZXNjcmlwdG9yVHlwZSAhPSBVU0JfRFRfRU5EUE9JTlQKKwkJCXx8IGVwLT5iRW5kcG9pbnRBZGRyZXNzICE9IGRlc2MtPmJFbmRwb2ludEFkZHJlc3MKKwkJCXx8IGVwLT5maWZvX3NpemUgPCBsZTE2X3RvX2NwdQorCQkJCQkJKGRlc2MtPndNYXhQYWNrZXRTaXplKSkgeworCQlETVNHKCIlcywgYmFkIGVwIG9yIGRlc2NyaXB0b3JcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHhmZXIgdHlwZXMgbXVzdCBtYXRjaCwgZXhjZXB0IHRoYXQgaW50ZXJydXB0IH49IGJ1bGsgKi8KKwlpZiAoZXAtPmJtQXR0cmlidXRlcyAhPSBkZXNjLT5ibUF0dHJpYnV0ZXMKKwkJCSYmIGVwLT5ibUF0dHJpYnV0ZXMgIT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSworCQkJJiYgZGVzYy0+Ym1BdHRyaWJ1dGVzICE9IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkgeworCQlETVNHKCIlcywgJXMgdHlwZSBtaXNtYXRjaFxuIiwgX19GVU5DVElPTl9fLCBfZXAtPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBoYXJkd2FyZSBfY291bGRfIGRvIHNtYWxsZXIsIGJ1dCBkcml2ZXIgZG9lc24ndCAqLworCWlmICgoZGVzYy0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEsKKwkJCQkmJiBsZTE2X3RvX2NwdSAoZGVzYy0+d01heFBhY2tldFNpemUpCisJCQkJCQkhPSBCVUxLX0ZJRk9fU0laRSkKKwkJCXx8ICFkZXNjLT53TWF4UGFja2V0U2l6ZSkgeworCQlETVNHKCIlcywgYmFkICVzIG1heHBhY2tldFxuIiwgX19GVU5DVElPTl9fLCBfZXAtPm5hbWUpOworCQlyZXR1cm4gLUVSQU5HRTsKKwl9CisKKwlkZXYgPSBlcC0+ZGV2OworCWlmICghZGV2LT5kcml2ZXIgfHwgZGV2LT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pIHsKKwkJRE1TRygiJXMsIGJvZ3VzIGRldmljZSBzdGF0ZVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FU0hVVERPV047CisJfQorCisJZXAtPmRlc2MgPSBkZXNjOworCWVwLT5kbWEgPSAtMTsKKwllcC0+c3RvcHBlZCA9IDA7CisJZXAtPnBpb19pcnFzID0gZXAtPmRtYV9pcnFzID0gMDsKKwllcC0+ZXAubWF4cGFja2V0ID0gbGUxNl90b19jcHUgKGRlc2MtPndNYXhQYWNrZXRTaXplKTsKKworCS8qIGZsdXNoIGZpZm8gKG1vc3RseSBmb3IgT1VUIGJ1ZmZlcnMpICovCisJcHhhMnh4X2VwX2ZpZm9fZmx1c2ggKF9lcCk7CisKKwkvKiAuLi4gcmVzZXQgaGFsdCBzdGF0ZSB0b28sIGlmIHdlIGNvdWxkIC4uLiAqLworCisjaWZkZWYJVVNFX0RNQQorCS8qIGZvciAoc29tZSkgYnVsayBhbmQgSVNPIGVuZHBvaW50cywgdHJ5IHRvIGdldCBhIERNQSBjaGFubmVsIGFuZAorCSAqIGJpbmQgaXQgdG8gdGhlIGVuZHBvaW50LiAgb3RoZXJ3aXNlIHVzZSBQSU8uIAorCSAqLworCXN3aXRjaCAoZXAtPmJtQXR0cmlidXRlcykgeworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKKwkJaWYgKGxlMTZfdG9fY3B1KGRlc2MtPndNYXhQYWNrZXRTaXplKSAlIDMyKQorCQkJYnJlYWs7CisJCS8vIGZhbGwgdGhyb3VnaAorCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoKKwkJaWYgKCF1c2VfZG1hIHx8ICFlcC0+cmVnX2RyY21yKQorCQkJYnJlYWs7CisJCWVwLT5kbWEgPSBweGFfcmVxdWVzdF9kbWEgKChjaGFyICopX2VwLT5uYW1lLAorIAkJCQkobGUxNl90b19jcHUgKGRlc2MtPndNYXhQYWNrZXRTaXplKSA+IDY0KQorCQkJCQk/IERNQV9QUklPX01FRElVTSAvKiBzb21lIGlzbyAqLworCQkJCQk6IERNQV9QUklPX0xPVywKKwkJCQlkbWFfbm9kZXNjX2hhbmRsZXIsIGVwKTsKKwkJaWYgKGVwLT5kbWEgPj0gMCkgeworCQkJKmVwLT5yZWdfZHJjbXIgPSBEUkNNUl9NQVBWTEQgfCBlcC0+ZG1hOworCQkJRE1TRygiJXMgdXNpbmcgZG1hJWRcbiIsIF9lcC0+bmFtZSwgZXAtPmRtYSk7CisJCX0KKwl9CisjZW5kaWYKKworCURCRyhEQkdfVkVSQk9TRSwgImVuYWJsZWQgJXNcbiIsIF9lcC0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHhhMnh4X2VwX2Rpc2FibGUgKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlzdHJ1Y3QgcHhhMnh4X2VwCSplcDsKKworCWVwID0gY29udGFpbmVyX29mIChfZXAsIHN0cnVjdCBweGEyeHhfZXAsIGVwKTsKKwlpZiAoIV9lcCB8fCAhZXAtPmRlc2MpIHsKKwkJRE1TRygiJXMsICVzIG5vdCBlbmFibGVkXG4iLCBfX0ZVTkNUSU9OX18sCisJCQlfZXAgPyBlcC0+ZXAubmFtZSA6IE5VTEwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJbnVrZSAoZXAsIC1FU0hVVERPV04pOworCisjaWZkZWYJVVNFX0RNQQorCWlmIChlcC0+ZG1hID49IDApIHsKKwkJKmVwLT5yZWdfZHJjbXIgPSAwOworCQlweGFfZnJlZV9kbWEgKGVwLT5kbWEpOworCQllcC0+ZG1hID0gLTE7CisJfQorI2VuZGlmCisKKwkvKiBmbHVzaCBmaWZvIChtb3N0bHkgZm9yIElOIGJ1ZmZlcnMpICovCisJcHhhMnh4X2VwX2ZpZm9fZmx1c2ggKF9lcCk7CisKKwllcC0+ZGVzYyA9IE5VTEw7CisJZXAtPnN0b3BwZWQgPSAxOworCisJREJHKERCR19WRVJCT1NFLCAiJXMgZGlzYWJsZWRcbiIsIF9lcC0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGZvciB0aGUgcHhhMnh4LCB0aGVzZSBjYW4ganVzdCB3cmFwIGttYWxsb2Mva2ZyZWUuICBnYWRnZXQgZHJpdmVycworICogbXVzdCBzdGlsbCBwYXNzIGNvcnJlY3RseSBpbml0aWFsaXplZCBlbmRwb2ludHMsIHNpbmNlIG90aGVyIGNvbnRyb2xsZXIKKyAqIGRyaXZlcnMgbWF5IGNhcmUgYWJvdXQgaG93IGl0J3MgY3VycmVudGx5IHNldCB1cCAoZG1hIGlzc3VlcyBldGMpLgorICovCisKKy8qCisgKiAJcHhhMnh4X2VwX2FsbG9jX3JlcXVlc3QgLSBhbGxvY2F0ZSBhIHJlcXVlc3QgZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHN0cnVjdCB1c2JfcmVxdWVzdCAqCitweGEyeHhfZXBfYWxsb2NfcmVxdWVzdCAoc3RydWN0IHVzYl9lcCAqX2VwLCBpbnQgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCBweGEyeHhfcmVxdWVzdCAqcmVxOworCisJcmVxID0ga21hbGxvYyAoc2l6ZW9mICpyZXEsIGdmcF9mbGFncyk7CisJaWYgKCFyZXEpCisJCXJldHVybiBOVUxMOworCisJbWVtc2V0IChyZXEsIDAsIHNpemVvZiAqcmVxKTsKKwlJTklUX0xJU1RfSEVBRCAoJnJlcS0+cXVldWUpOworCXJldHVybiAmcmVxLT5yZXE7Cit9CisKKworLyoKKyAqIAlweGEyeHhfZXBfZnJlZV9yZXF1ZXN0IC0gZGVhbGxvY2F0ZSBhIHJlcXVlc3QgZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQKK3B4YTJ4eF9lcF9mcmVlX3JlcXVlc3QgKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBweGEyeHhfcmVxdWVzdAkqcmVxOworCisJcmVxID0gY29udGFpbmVyX29mIChfcmVxLCBzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QsIHJlcSk7CisJV0FSTl9PTiAoIWxpc3RfZW1wdHkgKCZyZXEtPnF1ZXVlKSk7CisJa2ZyZWUocmVxKTsKK30KKworCisvKiBQWEEgY2FjaGUgbmVlZHMgZmx1c2hpbmcgd2l0aCBETUEgSS9PIChpdCdzIGRtYS1pbmNvaGVyZW50KSwgYnV0IHRoZXJlJ3MKKyAqIG5vIGRldmljZS1hZmZpbml0eSBhbmQgdGhlIGhlYXAgd29ya3MgcGVyZmVjdGx5IHdlbGwgZm9yIGkvbyBidWZmZXJzLgorICogSXQgd2FzdGVzIG11Y2ggbGVzcyBtZW1vcnkgdGhhbiBkbWFfYWxsb2NfY29oZXJlbnQoKSB3b3VsZCwgYW5kIGV2ZW4KKyAqIHByZXZlbnRzIGNhY2hlbGluZSAoMzIgYnl0ZXMgd2lkZSkgc2hhcmluZyBwcm9ibGVtcy4KKyAqLworc3RhdGljIHZvaWQgKgorcHhhMnh4X2VwX2FsbG9jX2J1ZmZlcihzdHJ1Y3QgdXNiX2VwICpfZXAsIHVuc2lnbmVkIGJ5dGVzLAorCWRtYV9hZGRyX3QgKmRtYSwgaW50IGdmcF9mbGFncykKK3sKKwljaGFyCQkJKnJldHZhbDsKKworCXJldHZhbCA9IGttYWxsb2MgKGJ5dGVzLCBnZnBfZmxhZ3MgJiB+KF9fR0ZQX0RNQXxfX0dGUF9ISUdITUVNKSk7CisJaWYgKHJldHZhbCkKKyNpZmRlZglVU0VfRE1BCisJCSpkbWEgPSB2aXJ0X3RvX2J1cyAocmV0dmFsKTsKKyNlbHNlCisJCSpkbWEgPSAoZG1hX2FkZHJfdCl+MDsKKyNlbmRpZgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkCitweGEyeHhfZXBfZnJlZV9idWZmZXIoc3RydWN0IHVzYl9lcCAqX2VwLCB2b2lkICpidWYsIGRtYV9hZGRyX3QgZG1hLAorCQl1bnNpZ25lZCBieXRlcykKK3sKKwlrZnJlZSAoYnVmKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqCWRvbmUgLSByZXRpcmUgYSByZXF1ZXN0OyBjYWxsZXIgYmxvY2tlZCBpcnFzCisgKi8KK3N0YXRpYyB2b2lkIGRvbmUoc3RydWN0IHB4YTJ4eF9lcCAqZXAsIHN0cnVjdCBweGEyeHhfcmVxdWVzdCAqcmVxLCBpbnQgc3RhdHVzKQoreworCXVuc2lnbmVkCQlzdG9wcGVkID0gZXAtPnN0b3BwZWQ7CisKKwlsaXN0X2RlbF9pbml0KCZyZXEtPnF1ZXVlKTsKKworCWlmIChsaWtlbHkgKHJlcS0+cmVxLnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpKQorCQlyZXEtPnJlcS5zdGF0dXMgPSBzdGF0dXM7CisJZWxzZQorCQlzdGF0dXMgPSByZXEtPnJlcS5zdGF0dXM7CisKKwlpZiAoc3RhdHVzICYmIHN0YXR1cyAhPSAtRVNIVVRET1dOKQorCQlEQkcoREJHX1ZFUkJPU0UsICJjb21wbGV0ZSAlcyByZXEgJXAgc3RhdCAlZCBsZW4gJXUvJXVcbiIsCisJCQllcC0+ZXAubmFtZSwgJnJlcS0+cmVxLCBzdGF0dXMsCisJCQlyZXEtPnJlcS5hY3R1YWwsIHJlcS0+cmVxLmxlbmd0aCk7CisKKwkvKiBkb24ndCBtb2RpZnkgcXVldWUgaGVhZHMgZHVyaW5nIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KKwllcC0+c3RvcHBlZCA9IDE7CisJcmVxLT5yZXEuY29tcGxldGUoJmVwLT5lcCwgJnJlcS0+cmVxKTsKKwllcC0+c3RvcHBlZCA9IHN0b3BwZWQ7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIGVwMF9pZGxlIChzdHJ1Y3QgcHhhMnh4X3VkYyAqZGV2KQoreworCWRldi0+ZXAwc3RhdGUgPSBFUDBfSURMRTsKK30KKworc3RhdGljIGludAord3JpdGVfcGFja2V0KHZvbGF0aWxlIHUzMiAqdWRkciwgc3RydWN0IHB4YTJ4eF9yZXF1ZXN0ICpyZXEsIHVuc2lnbmVkIG1heCkKK3sKKwl1OAkJKmJ1ZjsKKwl1bnNpZ25lZAlsZW5ndGgsIGNvdW50OworCisJYnVmID0gcmVxLT5yZXEuYnVmICsgcmVxLT5yZXEuYWN0dWFsOworCXByZWZldGNoKGJ1Zik7CisKKwkvKiBob3cgYmlnIHdpbGwgdGhpcyBwYWNrZXQgYmU/ICovCisJbGVuZ3RoID0gbWluKHJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbCwgbWF4KTsKKwlyZXEtPnJlcS5hY3R1YWwgKz0gbGVuZ3RoOworCisJY291bnQgPSBsZW5ndGg7CisJd2hpbGUgKGxpa2VseShjb3VudC0tKSkKKwkJKnVkZHIgPSAqYnVmKys7CisKKwlyZXR1cm4gbGVuZ3RoOworfQorCisvKgorICogd3JpdGUgdG8gYW4gSU4gZW5kcG9pbnQgZmlmbywgYXMgbWFueSBwYWNrZXRzIGFzIHBvc3NpYmxlLgorICogaXJxcyB3aWxsIHVzZSB0aGlzIHRvIHdyaXRlIHRoZSByZXN0IGxhdGVyLgorICogY2FsbGVyIGd1YXJhbnRlZXMgYXQgbGVhc3Qgb25lIHBhY2tldCBidWZmZXIgaXMgcmVhZHkgKG9yIGEgemxwKS4KKyAqLworc3RhdGljIGludAord3JpdGVfZmlmbyAoc3RydWN0IHB4YTJ4eF9lcCAqZXAsIHN0cnVjdCBweGEyeHhfcmVxdWVzdCAqcmVxKQoreworCXVuc2lnbmVkCQltYXg7CisKKwltYXggPSBsZTE2X3RvX2NwdShlcC0+ZGVzYy0+d01heFBhY2tldFNpemUpOworCWRvIHsKKwkJdW5zaWduZWQJY291bnQ7CisJCWludAkJaXNfbGFzdCwgaXNfc2hvcnQ7CisKKwkJY291bnQgPSB3cml0ZV9wYWNrZXQoZXAtPnJlZ191ZGRyLCByZXEsIG1heCk7CisKKwkJLyogbGFzdCBwYWNrZXQgaXMgdXN1YWxseSBzaG9ydCAob3IgYSB6bHApICovCisJCWlmICh1bmxpa2VseSAoY291bnQgIT0gbWF4KSkKKwkJCWlzX2xhc3QgPSBpc19zaG9ydCA9IDE7CisJCWVsc2UgeworCQkJaWYgKGxpa2VseShyZXEtPnJlcS5sZW5ndGggIT0gcmVxLT5yZXEuYWN0dWFsKQorCQkJCQl8fCByZXEtPnJlcS56ZXJvKQorCQkJCWlzX2xhc3QgPSAwOworCQkJZWxzZQorCQkJCWlzX2xhc3QgPSAxOworCQkJLyogaW50ZXJydXB0L2lzbyBtYXhwYWNrZXQgbWF5IG5vdCBmaWxsIHRoZSBmaWZvICovCisJCQlpc19zaG9ydCA9IHVubGlrZWx5IChtYXggPCBlcC0+Zmlmb19zaXplKTsKKwkJfQorCisJCURCRyhEQkdfVkVSWV9OT0lTWSwgIndyb3RlICVzICVkIGJ5dGVzJXMlcyAlZCBsZWZ0ICVwXG4iLAorCQkJZXAtPmVwLm5hbWUsIGNvdW50LAorCQkJaXNfbGFzdCA/ICIvTCIgOiAiIiwgaXNfc2hvcnQgPyAiL1MiIDogIiIsCisJCQlyZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWwsIHJlcSk7CisKKwkJLyogbGV0IGxvb3NlIHRoYXQgcGFja2V0LiBtYXliZSB0cnkgd3JpdGluZyBhbm90aGVyIG9uZSwKKwkJICogZG91YmxlIGJ1ZmZlcmluZyBtaWdodCB3b3JrLiAgVFNQLCBUUEMsIGFuZCBURlMKKwkJICogYml0IHZhbHVlcyBhcmUgdGhlIHNhbWUgZm9yIGFsbCBub3JtYWwgSU4gZW5kcG9pbnRzLgorCQkgKi8KKwkJKmVwLT5yZWdfdWRjY3MgPSBVRENDU19CSV9UUEM7CisJCWlmIChpc19zaG9ydCkKKwkJCSplcC0+cmVnX3VkY2NzID0gVURDQ1NfQklfVFNQOworCisJCS8qIHJlcXVlc3RzIGNvbXBsZXRlIHdoZW4gYWxsIElOIGRhdGEgaXMgaW4gdGhlIEZJRk8gKi8KKwkJaWYgKGlzX2xhc3QpIHsKKwkJCWRvbmUgKGVwLCByZXEsIDApOworCQkJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkgfHwgdW5saWtlbHkoZXAtPmRtYSA+PSAwKSkgeworCQkJCXBpb19pcnFfZGlzYWJsZSAoZXAtPmJFbmRwb2ludEFkZHJlc3MpOworI2lmZGVmIFVTRV9ETUEKKwkJCQkvKiB1bmFsaWduZWQgZGF0YSBhbmQgemxwcyBjb3VsZG4ndCB1c2UgZG1hICovCisJCQkJaWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSkgeworCQkJCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LAorCQkJCQkJc3RydWN0IHB4YTJ4eF9yZXF1ZXN0LCBxdWV1ZSk7CisJCQkJCWtpY2tfZG1hKGVwLHJlcSk7CisJCQkJCXJldHVybiAwOworCQkJCX0KKyNlbmRpZgorCQkJfQorCQkJcmV0dXJuIDE7CisJCX0KKworCQkvLyBUT0RPIGV4cGVyaW1lbnQ6IGhvdyByb2J1c3QgY2FuIGZpZm8gbW9kZSB0d2Vha2luZyBiZT8KKwkJLy8gZG91YmxlIGJ1ZmZlcmluZyBpcyBvZmYgaW4gdGhlIGRlZmF1bHQgZmlmbyBtb2RlLCB3aGljaAorCQkvLyBwcmV2ZW50cyBURlMgZnJvbSBiZWluZyBzZXQgaGVyZS4KKworCX0gd2hpbGUgKCplcC0+cmVnX3VkY2NzICYgVURDQ1NfQklfVEZTKTsKKwlyZXR1cm4gMDsKK30KKworLyogY2FsbGVyIGFzc2VydHMgcmVxLT5wZW5kaW5nIChlcDAgaXJxIHN0YXR1cyBueWV0IGNsZWFyZWQpOyBzdGFydHMKKyAqIGVwMCBkYXRhIHN0YWdlLiAgdGhlc2UgY2hpcHMgd2FudCB2ZXJ5IHNpbXBsZSBzdGF0ZSB0cmFuc2l0aW9ucy4KKyAqLworc3RhdGljIGlubGluZQordm9pZCBlcDBzdGFydChzdHJ1Y3QgcHhhMnh4X3VkYyAqZGV2LCB1MzIgZmxhZ3MsIGNvbnN0IGNoYXIgKnRhZykKK3sKKwlVRENDUzAgPSBmbGFnc3xVRENDUzBfU0F8VURDQ1MwX09QUjsKKwlVU0lSMCA9IFVTSVIwX0lSMDsKKwlkZXYtPnJlcV9wZW5kaW5nID0gMDsKKwlEQkcoREJHX1ZFUllfTk9JU1ksICIlcyAlcywgJTAyeC8lMDJ4XG4iLAorCQlfX0ZVTkNUSU9OX18sIHRhZywgVURDQ1MwLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlX2VwMF9maWZvIChzdHJ1Y3QgcHhhMnh4X2VwICplcCwgc3RydWN0IHB4YTJ4eF9yZXF1ZXN0ICpyZXEpCit7CisJdW5zaWduZWQJY291bnQ7CisJaW50CQlpc19zaG9ydDsKKworCWNvdW50ID0gd3JpdGVfcGFja2V0KCZVRERSMCwgcmVxLCBFUDBfRklGT19TSVpFKTsKKwllcC0+ZGV2LT5zdGF0cy53cml0ZS5ieXRlcyArPSBjb3VudDsKKworCS8qIGxhc3QgcGFja2V0ICJtdXN0IGJlIiBzaG9ydCAob3IgYSB6bHApICovCisJaXNfc2hvcnQgPSAoY291bnQgIT0gRVAwX0ZJRk9fU0laRSk7CisKKwlEQkcoREJHX1ZFUllfTk9JU1ksICJlcDBpbiAlZCBieXRlcyAlZCBsZWZ0ICVwXG4iLCBjb3VudCwKKwkJcmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsLCByZXEpOworCisJaWYgKHVubGlrZWx5IChpc19zaG9ydCkpIHsKKwkJaWYgKGVwLT5kZXYtPnJlcV9wZW5kaW5nKQorCQkJZXAwc3RhcnQoZXAtPmRldiwgVURDQ1MwX0lQUiwgInNob3J0IElOIik7CisJCWVsc2UKKwkJCVVEQ0NTMCA9IFVEQ0NTMF9JUFI7CisKKwkJY291bnQgPSByZXEtPnJlcS5sZW5ndGg7CisJCWRvbmUgKGVwLCByZXEsIDApOworCQllcDBfaWRsZShlcC0+ZGV2KTsKKyNpZiAxCisJCS8qIFRoaXMgc2VlbXMgdG8gZ2V0IHJpZCBvZiBsb3N0IHN0YXR1cyBpcnFzIGluIHNvbWUgY2FzZXM6CisJCSAqIGhvc3QgcmVzcG9uZHMgcXVpY2tseSwgb3IgbmV4dCByZXF1ZXN0IGludm9sdmVzIGNvbmZpZworCQkgKiBjaGFuZ2UgYXV0b21hZ2ljLCBvciBzaG91bGQgaGF2ZSBiZWVuIGhpZGRlbiwgb3IgLi4uCisJCSAqCisJCSAqIEZJWE1FIGdldCByaWQgb2YgYWxsIHVkZWxheXMgcG9zc2libGUuLi4KKwkJICovCisJCWlmIChjb3VudCA+PSBFUDBfRklGT19TSVpFKSB7CisJCQljb3VudCA9IDEwMDsKKwkJCWRvIHsKKwkJCQlpZiAoKFVEQ0NTMCAmIFVEQ0NTMF9PUFIpICE9IDApIHsKKwkJCQkJLyogY2xlYXIgT1BSLCBnZW5lcmF0ZSBhY2sgKi8KKwkJCQkJVURDQ1MwID0gVURDQ1MwX09QUjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWNvdW50LS07CisJCQkJdWRlbGF5KDEpOworCQkJfSB3aGlsZSAoY291bnQpOworCQl9CisjZW5kaWYKKwl9IGVsc2UgaWYgKGVwLT5kZXYtPnJlcV9wZW5kaW5nKQorCQllcDBzdGFydChlcC0+ZGV2LCAwLCAiSU4iKTsKKwlyZXR1cm4gaXNfc2hvcnQ7Cit9CisKKworLyoKKyAqIHJlYWRfZmlmbyAtICB1bmxvYWQgcGFja2V0KHMpIGZyb20gdGhlIGZpZm8gd2UgdXNlIGZvciB1c2IgT1VUCisgKiB0cmFuc2ZlcnMgYW5kIHB1dCB0aGVtIGludG8gdGhlIHJlcXVlc3QuICBjYWxsZXIgc2hvdWxkIGhhdmUgbWFkZQorICogc3VyZSB0aGVyZSdzIGF0IGxlYXN0IG9uZSBwYWNrZXQgcmVhZHkuCisgKgorICogcmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0IGNvbXBsZXRlZCBiZWNhdXNlIG9mIHNob3J0IHBhY2tldCBvciB0aGUKKyAqIHJlcXVlc3QgYnVmZmVyIGhhdmluZyBmaWxsZWQgKGFuZCBtYXliZSBvdmVycmFuIHRpbGwgZW5kLW9mLXBhY2tldCkuCisgKi8KK3N0YXRpYyBpbnQKK3JlYWRfZmlmbyAoc3RydWN0IHB4YTJ4eF9lcCAqZXAsIHN0cnVjdCBweGEyeHhfcmVxdWVzdCAqcmVxKQoreworCWZvciAoOzspIHsKKwkJdTMyCQl1ZGNjczsKKwkJdTgJCSpidWY7CisJCXVuc2lnbmVkCWJ1ZmZlcnNwYWNlLCBjb3VudCwgaXNfc2hvcnQ7CisKKwkJLyogbWFrZSBzdXJlIHRoZXJlJ3MgYSBwYWNrZXQgaW4gdGhlIEZJRk8uCisJCSAqIFVEQ0NTX3tCTyxJT31fUlBDIGFyZSBhbGwgdGhlIHNhbWUgYml0IHZhbHVlLgorCQkgKiBVRENDU197Qk8sSU99X1JORSBhcmUgYWxsIHRoZSBzYW1lIGJpdCB2YWx1ZS4KKwkJICovCisJCXVkY2NzID0gKmVwLT5yZWdfdWRjY3M7CisJCWlmICh1bmxpa2VseSAoKHVkY2NzICYgVURDQ1NfQk9fUlBDKSA9PSAwKSkKKwkJCWJyZWFrOworCQlidWYgPSByZXEtPnJlcS5idWYgKyByZXEtPnJlcS5hY3R1YWw7CisJCXByZWZldGNodyhidWYpOworCQlidWZmZXJzcGFjZSA9IHJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbDsKKworCQkvKiByZWFkIGFsbCBieXRlcyBmcm9tIHRoaXMgcGFja2V0ICovCisJCWlmIChsaWtlbHkgKHVkY2NzICYgVURDQ1NfQk9fUk5FKSkgeworCQkJY291bnQgPSAxICsgKDB4MGZmICYgKmVwLT5yZWdfdWJjcik7CisJCQlyZXEtPnJlcS5hY3R1YWwgKz0gbWluIChjb3VudCwgYnVmZmVyc3BhY2UpOworCQl9IGVsc2UgLyogemxwICovCisJCQljb3VudCA9IDA7CisJCWlzX3Nob3J0ID0gKGNvdW50IDwgZXAtPmVwLm1heHBhY2tldCk7CisJCURCRyhEQkdfVkVSWV9OT0lTWSwgInJlYWQgJXMgJTAyeCwgJWQgYnl0ZXMlcyByZXEgJXAgJWQvJWRcbiIsCisJCQllcC0+ZXAubmFtZSwgdWRjY3MsIGNvdW50LAorCQkJaXNfc2hvcnQgPyAiL1MiIDogIiIsCisJCQlyZXEsIHJlcS0+cmVxLmFjdHVhbCwgcmVxLT5yZXEubGVuZ3RoKTsKKwkJd2hpbGUgKGxpa2VseSAoY291bnQtLSAhPSAwKSkgeworCQkJdTgJYnl0ZSA9ICh1OCkgKmVwLT5yZWdfdWRkcjsKKworCQkJaWYgKHVubGlrZWx5IChidWZmZXJzcGFjZSA9PSAwKSkgeworCQkJCS8qIHRoaXMgaGFwcGVucyB3aGVuIHRoZSBkcml2ZXIncyBidWZmZXIKKwkJCQkgKiBpcyBzbWFsbGVyIHRoYW4gd2hhdCB0aGUgaG9zdCBzZW50LgorCQkJCSAqIGRpc2NhcmQgdGhlIGV4dHJhIGRhdGEuCisJCQkJICovCisJCQkJaWYgKHJlcS0+cmVxLnN0YXR1cyAhPSAtRU9WRVJGTE9XKQorCQkJCQlETVNHKCIlcyBvdmVyZmxvdyAlZFxuIiwKKwkJCQkJCWVwLT5lcC5uYW1lLCBjb3VudCk7CisJCQkJcmVxLT5yZXEuc3RhdHVzID0gLUVPVkVSRkxPVzsKKwkJCX0gZWxzZSB7CisJCQkJKmJ1ZisrID0gYnl0ZTsKKwkJCQlidWZmZXJzcGFjZS0tOworCQkJfQorCQl9CisJCSplcC0+cmVnX3VkY2NzID0gIFVEQ0NTX0JPX1JQQzsKKwkJLyogUlBDL1JTUC9STkUgY291bGQgbm93IHJlZmxlY3QgdGhlIG90aGVyIHBhY2tldCBidWZmZXIgKi8KKworCQkvKiBpc28gaXMgb25lIHJlcXVlc3QgcGVyIHBhY2tldCAqLworCQlpZiAoZXAtPmJtQXR0cmlidXRlcyA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKSB7CisJCQlpZiAodWRjY3MgJiBVRENDU19JT19ST0YpCisJCQkJcmVxLT5yZXEuc3RhdHVzID0gLUVIT1NUVU5SRUFDSDsKKwkJCS8qIG1vcmUgbGlrZSAiaXNfZG9uZSIgKi8KKwkJCWlzX3Nob3J0ID0gMTsKKwkJfQorCisJCS8qIGNvbXBsZXRpb24gKi8KKwkJaWYgKGlzX3Nob3J0IHx8IHJlcS0+cmVxLmFjdHVhbCA9PSByZXEtPnJlcS5sZW5ndGgpIHsKKwkJCWRvbmUgKGVwLCByZXEsIDApOworCQkJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCQkJcGlvX2lycV9kaXNhYmxlIChlcC0+YkVuZHBvaW50QWRkcmVzcyk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCS8qIGZpbmlzaGVkIHRoYXQgcGFja2V0LiAgdGhlIG5leHQgb25lIG1heSBiZSB3YWl0aW5nLi4uICovCisJfQorCXJldHVybiAwOworfQorCisvKgorICogc3BlY2lhbCBlcDAgdmVyc2lvbiBvZiB0aGUgYWJvdmUuICBubyBVQkNSMCBvciBkb3VibGUgYnVmZmVyaW5nOyBzdGF0dXMKKyAqIGhhbmRzaGFraW5nIGlzIG1hZ2ljLiAgbW9zdCBkZXZpY2UgcHJvdG9jb2xzIGRvbid0IG5lZWQgY29udHJvbC1PVVQuCisgKiBDREMgdmVuZG9yIGNvbW1hbmRzIChhbmQgUk5ESVMpLCBtYXNzIHN0b3JhZ2UgQ0IvQ0JJLCBhbmQgc29tZSBvdGhlcgorICogcHJvdG9jb2xzIGRvIHVzZSB0aGVtLgorICovCitzdGF0aWMgaW50CityZWFkX2VwMF9maWZvIChzdHJ1Y3QgcHhhMnh4X2VwICplcCwgc3RydWN0IHB4YTJ4eF9yZXF1ZXN0ICpyZXEpCit7CisJdTgJCSpidWYsIGJ5dGU7CisJdW5zaWduZWQJYnVmZmVyc3BhY2U7CisKKwlidWYgPSByZXEtPnJlcS5idWYgKyByZXEtPnJlcS5hY3R1YWw7CisJYnVmZmVyc3BhY2UgPSByZXEtPnJlcS5sZW5ndGggLSByZXEtPnJlcS5hY3R1YWw7CisKKwl3aGlsZSAoVURDQ1MwICYgVURDQ1MwX1JORSkgeworCQlieXRlID0gKHU4KSBVRERSMDsKKworCQlpZiAodW5saWtlbHkgKGJ1ZmZlcnNwYWNlID09IDApKSB7CisJCQkvKiB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgZHJpdmVyJ3MgYnVmZmVyCisJCQkgKiBpcyBzbWFsbGVyIHRoYW4gd2hhdCB0aGUgaG9zdCBzZW50LgorCQkJICogZGlzY2FyZCB0aGUgZXh0cmEgZGF0YS4KKwkJCSAqLworCQkJaWYgKHJlcS0+cmVxLnN0YXR1cyAhPSAtRU9WRVJGTE9XKQorCQkJCURNU0coIiVzIG92ZXJmbG93XG4iLCBlcC0+ZXAubmFtZSk7CisJCQlyZXEtPnJlcS5zdGF0dXMgPSAtRU9WRVJGTE9XOworCQl9IGVsc2UgeworCQkJKmJ1ZisrID0gYnl0ZTsKKwkJCXJlcS0+cmVxLmFjdHVhbCsrOworCQkJYnVmZmVyc3BhY2UtLTsKKwkJfQorCX0KKworCVVEQ0NTMCA9IFVEQ0NTMF9PUFIgfCBVRENDUzBfSVBSOworCisJLyogY29tcGxldGlvbiAqLworCWlmIChyZXEtPnJlcS5hY3R1YWwgPj0gcmVxLT5yZXEubGVuZ3RoKQorCQlyZXR1cm4gMTsKKworCS8qIGZpbmlzaGVkIHRoYXQgcGFja2V0LiAgdGhlIG5leHQgb25lIG1heSBiZSB3YWl0aW5nLi4uICovCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZglVU0VfRE1BCisKKyNkZWZpbmUJTUFYX0lOX0RNQQkoKERDTURfTEVOR1RIICsgMSkgLSBCVUxLX0ZJRk9fU0laRSkKKworc3RhdGljIHZvaWQKK3N0YXJ0X2RtYV9ub2Rlc2Moc3RydWN0IHB4YTJ4eF9lcCAqZXAsIHN0cnVjdCBweGEyeHhfcmVxdWVzdCAqcmVxLCBpbnQgaXNfaW4pCit7CisJdTMyCWRjbWQgPSByZXEtPnJlcS5sZW5ndGg7CisJdTMyCWJ1ZiA9IHJlcS0+cmVxLmRtYTsKKwl1MzIJZmlmbyA9IGlvX3YycCAoKHUzMillcC0+cmVnX3VkZHIpOworCisJLyogY2FsbGVyIGd1YXJhbnRlZXMgdGhlcmUncyBhIHBhY2tldCBvciBtb3JlIHJlbWFpbmluZworCSAqICAtIElOIG1heSBlbmQgd2l0aCBhIHNob3J0IHBhY2tldCAoVFNQIHNldCBzZXBhcmF0ZWx5KSwKKwkgKiAgLSBPVVQgaXMgYWx3YXlzIGZ1bGwgbGVuZ3RoCisJICovCisJYnVmICs9IHJlcS0+cmVxLmFjdHVhbDsKKwlkY21kIC09IHJlcS0+cmVxLmFjdHVhbDsKKwllcC0+ZG1hX2ZpeHVwID0gMDsKKworCS8qIG5vLWRlc2NyaXB0b3IgbW9kZSBjYW4gYmUgc2ltcGxlIGZvciBidWxrLWluLCBpc28taW4sIGlzby1vdXQgKi8KKwlEQ1NSKGVwLT5kbWEpID0gRENTUl9OT0RFU0M7CisJaWYgKGlzX2luKSB7CisJCURTQURSKGVwLT5kbWEpID0gYnVmOworCQlEVEFEUihlcC0+ZG1hKSA9IGZpZm87CisJCWlmIChkY21kID4gTUFYX0lOX0RNQSkKKwkJCWRjbWQgPSBNQVhfSU5fRE1BOworCQllbHNlCisJCQllcC0+ZG1hX2ZpeHVwID0gKGRjbWQgJSBlcC0+ZXAubWF4cGFja2V0KSAhPSAwOworCQlkY21kIHw9IERDTURfQlVSU1QzMiB8IERDTURfV0lEVEgxCisJCQl8IERDTURfRkxPV1RSRyB8IERDTURfSU5DU1JDQUREUjsKKwl9IGVsc2UgeworI2lmZGVmIFVTRV9PVVRfRE1BCisJCURTQURSKGVwLT5kbWEpID0gZmlmbzsKKwkJRFRBRFIoZXAtPmRtYSkgPSBidWY7CisJCWlmIChlcC0+Ym1BdHRyaWJ1dGVzICE9IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpCisJCQlkY21kID0gZXAtPmVwLm1heHBhY2tldDsKKwkJZGNtZCB8PSBEQ01EX0JVUlNUMzIgfCBEQ01EX1dJRFRIMQorCQkJfCBEQ01EX0ZMT1dTUkMgfCBEQ01EX0lOQ1RSR0FERFI7CisjZW5kaWYKKwl9CisJRENNRChlcC0+ZG1hKSA9IGRjbWQ7CisJRENTUihlcC0+ZG1hKSA9IERDU1JfUlVOIHwgRENTUl9OT0RFU0MKKwkJfCAodW5saWtlbHkoaXNfaW4pCisJCQk/IERDU1JfU1RPUElSUUVOCS8qIHVzZSBkbWFfbm9kZXNjX2hhbmRsZXIoKSAqLworCQkJOiAwKTsJCQkvKiB1c2UgaGFuZGxlX2VwKCkgKi8KK30KKworc3RhdGljIHZvaWQga2lja19kbWEoc3RydWN0IHB4YTJ4eF9lcCAqZXAsIHN0cnVjdCBweGEyeHhfcmVxdWVzdCAqcmVxKQoreworCWludAlpc19pbiA9IGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTjsKKworCWlmIChpc19pbikgeworCQkvKiB1bmFsaWduZWQgdHggYnVmZmVycyBhbmQgemxwcyBvbmx5IHdvcmsgd2l0aCBQSU8gKi8KKwkJaWYgKChyZXEtPnJlcS5kbWEgJiAweDBmKSAhPSAwCisJCQkJfHwgdW5saWtlbHkoKHJlcS0+cmVxLmxlbmd0aCAtIHJlcS0+cmVxLmFjdHVhbCkKKwkJCQkJCT09IDApKSB7CisJCQlwaW9faXJxX2VuYWJsZShlcC0+YkVuZHBvaW50QWRkcmVzcyk7CisJCQlpZiAoKCplcC0+cmVnX3VkY2NzICYgVURDQ1NfQklfVEZTKSAhPSAwKQorCQkJCSh2b2lkKSB3cml0ZV9maWZvKGVwLCByZXEpOworCQl9IGVsc2UgeworCQkJc3RhcnRfZG1hX25vZGVzYyhlcCwgcmVxLCBVU0JfRElSX0lOKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICgocmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsKSA8IGVwLT5lcC5tYXhwYWNrZXQpIHsKKwkJCURNU0coIiVzIHNob3J0IGRtYSByZWFkLi4uXG4iLCBlcC0+ZXAubmFtZSk7CisJCQkvKiB3ZSdyZSBhbHdheXMgc2V0IHVwIGZvciBwaW8gb3V0ICovCisJCQlyZWFkX2ZpZm8gKGVwLCByZXEpOworCQl9IGVsc2UgeworCQkJKmVwLT5yZWdfdWRjY3MgPSBVRENDU19CT19ETUUKKwkJCQl8ICgqZXAtPnJlZ191ZGNjcyAmIFVEQ0NTX0JPX0ZTVCk7CisJCQlzdGFydF9kbWFfbm9kZXNjKGVwLCByZXEsIFVTQl9ESVJfT1VUKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgY2FuY2VsX2RtYShzdHJ1Y3QgcHhhMnh4X2VwICplcCkKK3sKKwlzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QJKnJlcTsKKwl1MzIJCQl0bXA7CisKKwlpZiAoRENTUihlcC0+ZG1hKSA9PSAwIHx8IGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCXJldHVybjsKKworCURDU1IoZXAtPmRtYSkgPSAwOworCXdoaWxlICgoRENTUihlcC0+ZG1hKSAmIERDU1JfU1RPUFNUQVRFKSA9PSAwKQorCQljcHVfcmVsYXgoKTsKKworCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBweGEyeHhfcmVxdWVzdCwgcXVldWUpOworCXRtcCA9IERDTUQoZXAtPmRtYSkgJiBEQ01EX0xFTkdUSDsKKwlyZXEtPnJlcS5hY3R1YWwgPSByZXEtPnJlcS5sZW5ndGggLSAodG1wICYgRENNRF9MRU5HVEgpOworCisJLyogdGhlIGxhc3QgdHggcGFja2V0IG1heSBiZSBpbmNvbXBsZXRlLCBzbyBmbHVzaCB0aGUgZmlmby4KKwkgKiBGSVhNRSBjb3JyZWN0IHJlcS5hY3R1YWwgaWYgd2UgY2FuCisJICovCisJaWYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikKKwkJKmVwLT5yZWdfdWRjY3MgPSBVRENDU19CSV9GVEY7Cit9CisKKy8qIGRtYSBjaGFubmVsIHN0b3BwZWQgLi4uIG5vcm1hbCB0eCBlbmQgKElOKSwgb3Igb24gZXJyb3IgKElOL09VVCkgKi8KK3N0YXRpYyB2b2lkIGRtYV9ub2Rlc2NfaGFuZGxlcihpbnQgZG1hY2gsIHZvaWQgKl9lcCwgc3RydWN0IHB0X3JlZ3MgKnIpCit7CisJc3RydWN0IHB4YTJ4eF9lcAkqZXAgPSBfZXA7CisJc3RydWN0IHB4YTJ4eF9yZXF1ZXN0CSpyZXE7CisJdTMyCQkJdG1wLCBjb21wbGV0ZWQ7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCisJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwgc3RydWN0IHB4YTJ4eF9yZXF1ZXN0LCBxdWV1ZSk7CisKKwllcC0+ZG1hX2lycXMrKzsKKwllcC0+ZGV2LT5zdGF0cy5pcnFzKys7CisJSEVYX0RJU1BMQVkoZXAtPmRldi0+c3RhdHMuaXJxcyk7CisKKwkvKiBhY2svY2xlYXIgKi8KKwl0bXAgPSBEQ1NSKGVwLT5kbWEpOworCURDU1IoZXAtPmRtYSkgPSB0bXA7CisJaWYgKCh0bXAgJiBEQ1NSX1NUT1BTVEFURSkgPT0gMAorCQkJfHwgKEREQURSKGVwLT5kbWEpICYgRERBRFJfU1RPUCkgIT0gMCkgeworCQlEQkcoREJHX1ZFUkJPU0UsICIlcywgZGNzciAlMDh4IGRkYWRyICUwOHhcbiIsCisJCQllcC0+ZXAubmFtZSwgRENTUihlcC0+ZG1hKSwgRERBRFIoZXAtPmRtYSkpOworCQlnb3RvIGRvbmU7CisJfQorCURDU1IoZXAtPmRtYSkgPSAwOwkvKiBjbGVhciBEQ1NSX1NUT1BTVEFURSAqLworCisJLyogdXBkYXRlIHRyYW5zZmVyIHN0YXR1cyAqLworCWNvbXBsZXRlZCA9IHRtcCAmIERDU1JfQlVTRVJSOworCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pCisJCXRtcCA9IERTQURSKGVwLT5kbWEpOworCWVsc2UKKwkJdG1wID0gRFRBRFIoZXAtPmRtYSk7CisJcmVxLT5yZXEuYWN0dWFsID0gdG1wIC0gcmVxLT5yZXEuZG1hOworCisJLyogRklYTUUgc2VlbXMgd2Ugc29tZXRpbWVzIHNlZSBwYXJ0aWFsIHRyYW5zZmVycy4uLiAqLworCisJaWYgKHVubGlrZWx5KGNvbXBsZXRlZCAhPSAwKSkKKwkJcmVxLT5yZXEuc3RhdHVzID0gLUVJTzsKKwllbHNlIGlmIChyZXEtPnJlcS5hY3R1YWwpIHsKKwkJLyogdGhlc2UgcmVnaXN0ZXJzIGhhdmUgemVyb2VzIGluIGxvdyBiaXRzOyB0aGV5IG1pc2NvdW50CisJCSAqIHNvbWUgKGVuZC1vZi10cmFuc2Zlcikgc2hvcnQgcGFja2V0czogIHR4IDE0IGFzIHR4IDEyCisJCSAqLworCQlpZiAoZXAtPmRtYV9maXh1cCkKKwkJCXJlcS0+cmVxLmFjdHVhbCA9IG1pbihyZXEtPnJlcS5hY3R1YWwgKyAzLAorCQkJCQkJcmVxLT5yZXEubGVuZ3RoKTsKKworCQl0bXAgPSAocmVxLT5yZXEubGVuZ3RoIC0gcmVxLT5yZXEuYWN0dWFsKTsKKwkJY29tcGxldGVkID0gKHRtcCA9PSAwKTsKKwkJaWYgKGNvbXBsZXRlZCAmJiAoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSkgeworCisJCQkvKiBtYXliZSB2YWxpZGF0ZSBmaW5hbCBzaG9ydCBwYWNrZXQgLi4uICovCisJCQlpZiAoKHJlcS0+cmVxLmFjdHVhbCAlIGVwLT5lcC5tYXhwYWNrZXQpICE9IDApCisJCQkJKmVwLT5yZWdfdWRjY3MgPSBVRENDU19CSV9UU1AvKnxVRENDU19CSV9UUEMqLzsKKworCQkJLyogLi4uIG9yIHpscCwgdXNpbmcgcGlvIGZhbGxiYWNrICovCisJCQllbHNlIGlmIChlcC0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEsKKwkJCQkJJiYgcmVxLT5yZXEuemVybykgeworCQkJCURNU0coIiVzIHpscCB0ZXJtaW5hdGUgLi4uXG4iLCBlcC0+ZXAubmFtZSk7CisJCQkJY29tcGxldGVkID0gMDsKKwkJCX0KKwkJfQorCX0KKworCWlmIChsaWtlbHkoY29tcGxldGVkKSkgeworCQlkb25lKGVwLCByZXEsIDApOworCisJCS8qIG1heWJlIHJlLWFjdGl2YXRlIGFmdGVyIGNvbXBsZXRpb24gKi8KKwkJaWYgKGVwLT5zdG9wcGVkIHx8IGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCQlnb3RvIGRvbmU7CisJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBweGEyeHhfcmVxdWVzdCwgcXVldWUpOworCX0KKwlraWNrX2RtYShlcCwgcmVxKTsKK2RvbmU6CisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludAorcHhhMnh4X2VwX3F1ZXVlKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxLCBpbnQgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCBweGEyeHhfcmVxdWVzdAkqcmVxOworCXN0cnVjdCBweGEyeHhfZXAJKmVwOworCXN0cnVjdCBweGEyeHhfdWRjCSpkZXY7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlyZXEgPSBjb250YWluZXJfb2YoX3JlcSwgc3RydWN0IHB4YTJ4eF9yZXF1ZXN0LCByZXEpOworCWlmICh1bmxpa2VseSAoIV9yZXEgfHwgIV9yZXEtPmNvbXBsZXRlIHx8ICFfcmVxLT5idWYKKwkJCXx8ICFsaXN0X2VtcHR5KCZyZXEtPnF1ZXVlKSkpIHsKKwkJRE1TRygiJXMsIGJhZCBwYXJhbXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IHB4YTJ4eF9lcCwgZXApOworCWlmICh1bmxpa2VseSAoIV9lcCB8fCAoIWVwLT5kZXNjICYmIGVwLT5lcC5uYW1lICE9IGVwMG5hbWUpKSkgeworCQlETVNHKCIlcywgYmFkIGVwXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXYgPSBlcC0+ZGV2OworCWlmICh1bmxpa2VseSAoIWRldi0+ZHJpdmVyCisJCQl8fCBkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikpIHsKKwkJRE1TRygiJXMsIGJvZ3VzIGRldmljZSBzdGF0ZVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FU0hVVERPV047CisJfQorCisJLyogaXNvIGlzIGFsd2F5cyBvbmUgcGFja2V0IHBlciByZXF1ZXN0LCB0aGF0J3MgdGhlIG9ubHkgd2F5CisJICogd2UgY2FuIHJlcG9ydCBwZXItcGFja2V0IHN0YXR1cy4gIHRoYXQgYWxzbyBoZWxwcyB3aXRoIGRtYS4KKwkgKi8KKwlpZiAodW5saWtlbHkgKGVwLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQworCQkJJiYgcmVxLT5yZXEubGVuZ3RoID4gbGUxNl90b19jcHUKKwkJCQkJCShlcC0+ZGVzYy0+d01heFBhY2tldFNpemUpKSkKKwkJcmV0dXJuIC1FTVNHU0laRTsKKworI2lmZGVmCVVTRV9ETUEKKwkvLyBGSVhNRSBjYWxsZXIgbWF5IGFscmVhZHkgaGF2ZSBkb25lIHRoZSBkbWEgbWFwcGluZworCWlmIChlcC0+ZG1hID49IDApIHsKKwkJX3JlcS0+ZG1hID0gZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYsCisJCQlfcmVxLT5idWYsIF9yZXEtPmxlbmd0aCwKKwkJCSgoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSAhPSAwKQorCQkJCT8gRE1BX1RPX0RFVklDRQorCQkJCTogRE1BX0ZST01fREVWSUNFKTsKKwl9CisjZW5kaWYKKworCURCRyhEQkdfTk9JU1ksICIlcyBxdWV1ZSByZXEgJXAsIGxlbiAlZCBidWYgJXBcbiIsCisJICAgICBfZXAtPm5hbWUsIF9yZXEsIF9yZXEtPmxlbmd0aCwgX3JlcS0+YnVmKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCV9yZXEtPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKwlfcmVxLT5hY3R1YWwgPSAwOworCisJLyoga2lja3N0YXJ0IHRoaXMgaS9vIHF1ZXVlPyAqLworCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpICYmICFlcC0+c3RvcHBlZCkgeworCQlpZiAoZXAtPmRlc2MgPT0gMCAvKiBlcDAgKi8pIHsKKwkJCXVuc2lnbmVkCWxlbmd0aCA9IF9yZXEtPmxlbmd0aDsKKworCQkJc3dpdGNoIChkZXYtPmVwMHN0YXRlKSB7CisJCQljYXNlIEVQMF9JTl9EQVRBX1BIQVNFOgorCQkJCWRldi0+c3RhdHMud3JpdGUub3BzKys7CisJCQkJaWYgKHdyaXRlX2VwMF9maWZvKGVwLCByZXEpKQorCQkJCQlyZXEgPSBOVUxMOworCQkJCWJyZWFrOworCisJCQljYXNlIEVQMF9PVVRfREFUQV9QSEFTRToKKwkJCQlkZXYtPnN0YXRzLnJlYWQub3BzKys7CisJCQkJLyogbWVzc3kgLi4uICovCisJCQkJaWYgKGRldi0+cmVxX2NvbmZpZykgeworCQkJCQlEQkcoREJHX1ZFUkJPU0UsICJlcDAgY29uZmlnIGFjayVzXG4iLAorCQkJCQkJZGV2LT5oYXNfY2ZyID8gICIiIDogIiByYWNlZCIpOworCQkJCQlpZiAoZGV2LT5oYXNfY2ZyKQorCQkJCQkJVURDQ0ZSID0gVURDQ0ZSX0FSRU58VURDQ0ZSX0FDTQorCQkJCQkJCXxVRENDRlJfTUIxOworCQkJCQlkb25lKGVwLCByZXEsIDApOworCQkJCQlkZXYtPmVwMHN0YXRlID0gRVAwX0VORF9YRkVSOworCQkJCQlsb2NhbF9pcnFfcmVzdG9yZSAoZmxhZ3MpOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQkJaWYgKGRldi0+cmVxX3BlbmRpbmcpCisJCQkJCWVwMHN0YXJ0KGRldiwgVURDQ1MwX0lQUiwgIk9VVCIpOworCQkJCWlmIChsZW5ndGggPT0gMCB8fCAoKFVEQ0NTMCAmIFVEQ0NTMF9STkUpICE9IDAKKwkJCQkJCSYmIHJlYWRfZXAwX2ZpZm8oZXAsIHJlcSkpKSB7CisJCQkJCWVwMF9pZGxlKGRldik7CisJCQkJCWRvbmUoZXAsIHJlcSwgMCk7CisJCQkJCXJlcSA9IE5VTEw7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCURNU0coImVwMCBpL28sIG9kZCBzdGF0ZSAlZFxuIiwgZGV2LT5lcDBzdGF0ZSk7CisJCQkJbG9jYWxfaXJxX3Jlc3RvcmUgKGZsYWdzKTsKKwkJCQlyZXR1cm4gLUVMMkhMVDsKKwkJCX0KKyNpZmRlZglVU0VfRE1BCisJCS8qIGVpdGhlciBzdGFydCBkbWEgb3IgcHJpbWUgcGlvIHB1bXAgKi8KKwkJfSBlbHNlIGlmIChlcC0+ZG1hID49IDApIHsKKwkJCWtpY2tfZG1hKGVwLCByZXEpOworI2VuZGlmCisJCS8qIGNhbiB0aGUgRklGTyBjYW4gc2F0aXNmeSB0aGUgcmVxdWVzdCBpbW1lZGlhdGVseT8gKi8KKwkJfSBlbHNlIGlmICgoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSAhPSAwCisJCQkJJiYgKCplcC0+cmVnX3VkY2NzICYgVURDQ1NfQklfVEZTKSAhPSAwCisJCQkJJiYgd3JpdGVfZmlmbyhlcCwgcmVxKSkgeworCQkJcmVxID0gTlVMTDsKKwkJfSBlbHNlIGlmICgoKmVwLT5yZWdfdWRjY3MgJiBVRENDU19CT19SRlMpICE9IDAKKwkJCQkmJiByZWFkX2ZpZm8oZXAsIHJlcSkpIHsKKwkJCXJlcSA9IE5VTEw7CisJCX0KKworCQlpZiAobGlrZWx5IChyZXEgJiYgZXAtPmRlc2MpICYmIGVwLT5kbWEgPCAwKQorCQkJcGlvX2lycV9lbmFibGUoZXAtPmJFbmRwb2ludEFkZHJlc3MpOworCX0KKworCS8qIHBpbyBvciBkbWEgaXJxIGhhbmRsZXIgYWR2YW5jZXMgdGhlIHF1ZXVlLiAqLworCWlmIChsaWtlbHkgKHJlcSAhPSAwKSkKKwkJbGlzdF9hZGRfdGFpbCgmcmVxLT5xdWV1ZSwgJmVwLT5xdWV1ZSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIAludWtlIC0gZGVxdWV1ZSBBTEwgcmVxdWVzdHMKKyAqLworc3RhdGljIHZvaWQgbnVrZShzdHJ1Y3QgcHhhMnh4X2VwICplcCwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QgKnJlcTsKKworCS8qIGNhbGxlZCB3aXRoIGlycXMgYmxvY2tlZCAqLworI2lmZGVmCVVTRV9ETUEKKwlpZiAoZXAtPmRtYSA+PSAwICYmICFlcC0+c3RvcHBlZCkKKwkJY2FuY2VsX2RtYShlcCk7CisjZW5kaWYKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKKwkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwKKwkJCQlzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QsCisJCQkJcXVldWUpOworCQlkb25lKGVwLCByZXEsIHN0YXR1cyk7CisJfQorCWlmIChlcC0+ZGVzYykKKwkJcGlvX2lycV9kaXNhYmxlIChlcC0+YkVuZHBvaW50QWRkcmVzcyk7Cit9CisKKworLyogZGVxdWV1ZSBKVVNUIE9ORSByZXF1ZXN0ICovCitzdGF0aWMgaW50IHB4YTJ4eF9lcF9kZXF1ZXVlKHN0cnVjdCB1c2JfZXAgKl9lcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpfcmVxKQoreworCXN0cnVjdCBweGEyeHhfZXAJKmVwOworCXN0cnVjdCBweGEyeHhfcmVxdWVzdAkqcmVxOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgcHhhMnh4X2VwLCBlcCk7CisJaWYgKCFfZXAgfHwgZXAtPmVwLm5hbWUgPT0gZXAwbmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKiBtYWtlIHN1cmUgaXQncyBhY3R1YWxseSBxdWV1ZWQgb24gdGhpcyBlbmRwb2ludCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkgKHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKKwkJaWYgKCZyZXEtPnJlcSA9PSBfcmVxKQorCQkJYnJlYWs7CisJfQorCWlmICgmcmVxLT5yZXEgIT0gX3JlcSkgeworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworI2lmZGVmCVVTRV9ETUEKKwlpZiAoZXAtPmRtYSA+PSAwICYmIGVwLT5xdWV1ZS5uZXh0ID09ICZyZXEtPnF1ZXVlICYmICFlcC0+c3RvcHBlZCkgeworCQljYW5jZWxfZG1hKGVwKTsKKwkJZG9uZShlcCwgcmVxLCAtRUNPTk5SRVNFVCk7CisJCS8qIHJlc3RhcnQgaS9vICovCisJCWlmICghbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkgeworCQkJcmVxID0gbGlzdF9lbnRyeShlcC0+cXVldWUubmV4dCwKKwkJCQkJc3RydWN0IHB4YTJ4eF9yZXF1ZXN0LCBxdWV1ZSk7CisJCQlraWNrX2RtYShlcCwgcmVxKTsKKwkJfQorCX0gZWxzZQorI2VuZGlmCisJCWRvbmUoZXAsIHJlcSwgLUVDT05OUkVTRVQpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHB4YTJ4eF9lcF9zZXRfaGFsdChzdHJ1Y3QgdXNiX2VwICpfZXAsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgcHhhMnh4X2VwCSplcDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IHB4YTJ4eF9lcCwgZXApOworCWlmICh1bmxpa2VseSAoIV9lcAorCQkJfHwgKCFlcC0+ZGVzYyAmJiBlcC0+ZXAubmFtZSAhPSBlcDBuYW1lKSkKKwkJCXx8IGVwLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykgeworCQlETVNHKCIlcywgYmFkIGVwXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHZhbHVlID09IDApIHsKKwkJLyogdGhpcyBwYXRoIChyZXNldCB0b2dnbGUraGFsdCkgaXMgbmVlZGVkIHRvIGltcGxlbWVudAorCQkgKiBTRVRfSU5URVJGQUNFIG9uIG5vcm1hbCBoYXJkd2FyZS4gIGJ1dCBpdCBjYW4ndCBiZQorCQkgKiBkb25lIGZyb20gc29mdHdhcmUgb24gdGhlIFBYQSBVREMsIGFuZCB0aGUgaGFyZHdhcmUKKwkJICogZm9yZ2V0cyB0byBkbyBpdCBhcyBwYXJ0IG9mIFNFVF9JTlRFUkZBQ0UgYXV0b21hZ2ljLgorCQkgKi8KKwkJRE1TRygib25seSBob3N0IGNhbiBjbGVhciAlcyBoYWx0XG4iLCBfZXAtPm5hbWUpOworCQlyZXR1cm4gLUVST0ZTOworCX0KKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWlmICgoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSAhPSAwCisJCQkmJiAoKCplcC0+cmVnX3VkY2NzICYgVURDQ1NfQklfVEZTKSA9PSAwCisJCQkgICB8fCAhbGlzdF9lbXB0eSgmZXAtPnF1ZXVlKSkpIHsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwkvKiBGU1QgYml0IGlzIHRoZSBzYW1lIGZvciBjb250cm9sLCBidWxrIGluLCBidWxrIG91dCwgaW50ZXJydXB0IGluICovCisJKmVwLT5yZWdfdWRjY3MgPSBVRENDU19CSV9GU1R8VURDQ1NfQklfRlRGOworCisJLyogZXAwIG5lZWRzIHNwZWNpYWwgY2FyZSAqLworCWlmICghZXAtPmRlc2MpIHsKKwkJc3RhcnRfd2F0Y2hkb2coZXAtPmRldik7CisJCWVwLT5kZXYtPnJlcV9wZW5kaW5nID0gMDsKKwkJZXAtPmRldi0+ZXAwc3RhdGUgPSBFUDBfU1RBTEw7CisKKyAJLyogYW5kIGJ1bGsvaW50ciBlbmRwb2ludHMgbGlrZSBkcm9wcGluZyBzdGFsbHMgdG9vICovCisgCX0gZWxzZSB7CisgCQl1bnNpZ25lZCBpOworIAkJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkgKz0gMjApIHsKKyAJCQlpZiAoKmVwLT5yZWdfdWRjY3MgJiBVRENDU19CSV9TU1QpCisgCQkJCWJyZWFrOworIAkJCXVkZWxheSgyMCk7CisgCQl9CisgIAl9CisgCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCURCRyhEQkdfVkVSQk9TRSwgIiVzIGhhbHRcbiIsIF9lcC0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHhhMnh4X2VwX2ZpZm9fc3RhdHVzKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlzdHJ1Y3QgcHhhMnh4X2VwICAgICAgICAqZXA7CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBweGEyeHhfZXAsIGVwKTsKKwlpZiAoIV9lcCkgeworCQlETVNHKCIlcywgYmFkIGVwXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJLyogcHhhIGNhbid0IHJlcG9ydCB1bmNsYWltZWQgYnl0ZXMgZnJvbSBJTiBmaWZvcyAqLworCWlmICgoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSAhPSAwKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJaWYgKGVwLT5kZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTgorCQkJfHwgKCplcC0+cmVnX3VkY2NzICYgVURDQ1NfQk9fUkZTKSA9PSAwKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAoKmVwLT5yZWdfdWJjciAmIDB4ZmZmKSArIDE7Cit9CisKK3N0YXRpYyB2b2lkIHB4YTJ4eF9lcF9maWZvX2ZsdXNoKHN0cnVjdCB1c2JfZXAgKl9lcCkKK3sKKwlzdHJ1Y3QgcHhhMnh4X2VwICAgICAgICAqZXA7CisKKwllcCA9IGNvbnRhaW5lcl9vZihfZXAsIHN0cnVjdCBweGEyeHhfZXAsIGVwKTsKKwlpZiAoIV9lcCB8fCBlcC0+ZXAubmFtZSA9PSBlcDBuYW1lIHx8ICFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCURNU0coIiVzLCBiYWQgZXBcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiB0b2dnbGUgYW5kIGhhbHQgYml0cyBzdGF5IHVuY2hhbmdlZCAqLworCisJLyogZm9yIE9VVCwganVzdCByZWFkIGFuZCBkaXNjYXJkIHRoZSBGSUZPIGNvbnRlbnRzLiAqLworCWlmICgoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSA9PSAwKSB7CisJCXdoaWxlICgoKCplcC0+cmVnX3VkY2NzKSAmIFVEQ0NTX0JPX1JORSkgIT0gMCkKKwkJCSh2b2lkKSAqZXAtPnJlZ191ZGRyOworCQlyZXR1cm47CisJfQorCisJLyogbW9zdCBJTiBzdGF0dXMgaXMgdGhlIHNhbWUsIGJ1dCBJU08gY2FuJ3Qgc3RhbGwgKi8KKwkqZXAtPnJlZ191ZGNjcyA9IFVEQ0NTX0JJX1RQQ3xVRENDU19CSV9GVEZ8VURDQ1NfQklfVFVSCisJCXwgKGVwLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykKKwkJCT8gMCA6IFVEQ0NTX0JJX1NTVDsKK30KKworCitzdGF0aWMgc3RydWN0IHVzYl9lcF9vcHMgcHhhMnh4X2VwX29wcyA9IHsKKwkuZW5hYmxlCQk9IHB4YTJ4eF9lcF9lbmFibGUsCisJLmRpc2FibGUJPSBweGEyeHhfZXBfZGlzYWJsZSwKKworCS5hbGxvY19yZXF1ZXN0CT0gcHhhMnh4X2VwX2FsbG9jX3JlcXVlc3QsCisJLmZyZWVfcmVxdWVzdAk9IHB4YTJ4eF9lcF9mcmVlX3JlcXVlc3QsCisKKwkuYWxsb2NfYnVmZmVyCT0gcHhhMnh4X2VwX2FsbG9jX2J1ZmZlciwKKwkuZnJlZV9idWZmZXIJPSBweGEyeHhfZXBfZnJlZV9idWZmZXIsCisKKwkucXVldWUJCT0gcHhhMnh4X2VwX3F1ZXVlLAorCS5kZXF1ZXVlCT0gcHhhMnh4X2VwX2RlcXVldWUsCisKKwkuc2V0X2hhbHQJPSBweGEyeHhfZXBfc2V0X2hhbHQsCisJLmZpZm9fc3RhdHVzCT0gcHhhMnh4X2VwX2ZpZm9fc3RhdHVzLAorCS5maWZvX2ZsdXNoCT0gcHhhMnh4X2VwX2ZpZm9fZmx1c2gsCit9OworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogCWRldmljZS1zY29wZWQgcGFydHMgb2YgdGhlIGFwaSB0byB0aGUgdXNiIGNvbnRyb2xsZXIgaGFyZHdhcmUKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0YXRpYyBpbnQgcHhhMnh4X3VkY19nZXRfZnJhbWUoc3RydWN0IHVzYl9nYWRnZXQgKl9nYWRnZXQpCit7CisJcmV0dXJuICgoVUZOUkggJiAweDA3KSA8PCA4KSB8IChVRk5STCAmIDB4ZmYpOworfQorCitzdGF0aWMgaW50IHB4YTJ4eF91ZGNfd2FrZXVwKHN0cnVjdCB1c2JfZ2FkZ2V0ICpfZ2FkZ2V0KQoreworCS8qIGhvc3QgbWF5IG5vdCBoYXZlIGVuYWJsZWQgcmVtb3RlIHdha2V1cCAqLworCWlmICgoVURDQ1MwICYgVURDQ1MwX0RSV0YpID09IDApCisJCXJldHVybiAtRUhPU1RVTlJFQUNIOworCXVkY19zZXRfbWFza19VRENDUihVRENDUl9SU00pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdG9wX2FjdGl2aXR5KHN0cnVjdCBweGEyeHhfdWRjICosIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqKTsKK3N0YXRpYyB2b2lkIHVkY19lbmFibGUgKHN0cnVjdCBweGEyeHhfdWRjICopOworc3RhdGljIHZvaWQgdWRjX2Rpc2FibGUoc3RydWN0IHB4YTJ4eF91ZGMgKik7CisKKy8qIFdlIGRpc2FibGUgdGhlIFVEQyAtLSBhbmQgaXRzIDQ4IE1IeiBjbG9jayAtLSB3aGVuZXZlciBpdCdzIG5vdAorICogaW4gYWN0aXZlIHVzZS4gIAorICovCitzdGF0aWMgaW50IHB1bGx1cChzdHJ1Y3QgcHhhMnh4X3VkYyAqdWRjLCBpbnQgaXNfYWN0aXZlKQoreworCWlzX2FjdGl2ZSA9IGlzX2FjdGl2ZSAmJiB1ZGMtPnZidXMgJiYgdWRjLT5wdWxsdXA7CisJRE1TRygiJXNcbiIsIGlzX2FjdGl2ZSA/ICJhY3RpdmUiIDogImluYWN0aXZlIik7CisJaWYgKGlzX2FjdGl2ZSkKKwkJdWRjX2VuYWJsZSh1ZGMpOworCWVsc2UgeworCQlpZiAodWRjLT5nYWRnZXQuc3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04pIHsKKwkJCURNU0coImRpc2Nvbm5lY3QgJXNcbiIsIHVkYy0+ZHJpdmVyCisJCQkJPyB1ZGMtPmRyaXZlci0+ZHJpdmVyLm5hbWUKKwkJCQk6ICIobm8gZHJpdmVyKSIpOworCQkJc3RvcF9hY3Rpdml0eSh1ZGMsIHVkYy0+ZHJpdmVyKTsKKwkJfQorCQl1ZGNfZGlzYWJsZSh1ZGMpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogVkJVUyByZXBvcnRpbmcgbG9naWNhbGx5IGNvbWVzIGZyb20gYSB0cmFuc2NlaXZlciAqLworc3RhdGljIGludCBweGEyeHhfdWRjX3ZidXNfc2Vzc2lvbihzdHJ1Y3QgdXNiX2dhZGdldCAqX2dhZGdldCwgaW50IGlzX2FjdGl2ZSkKK3sKKwlzdHJ1Y3QgcHhhMnh4X3VkYwkqdWRjOworCisJdWRjID0gY29udGFpbmVyX29mKF9nYWRnZXQsIHN0cnVjdCBweGEyeHhfdWRjLCBnYWRnZXQpOworCXVkYy0+dmJ1cyA9IGlzX2FjdGl2ZSA9IChpc19hY3RpdmUgIT0gMCk7CisJRE1TRygidmJ1cyAlc1xuIiwgaXNfYWN0aXZlID8gInN1cHBsaWVkIiA6ICJpbmFjdGl2ZSIpOworCXB1bGx1cCh1ZGMsIGlzX2FjdGl2ZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGRyaXZlcnMgbWF5IGhhdmUgc29mdHdhcmUgY29udHJvbCBvdmVyIEQrIHB1bGx1cCAqLworc3RhdGljIGludCBweGEyeHhfdWRjX3B1bGx1cChzdHJ1Y3QgdXNiX2dhZGdldCAqX2dhZGdldCwgaW50IGlzX2FjdGl2ZSkKK3sKKwlzdHJ1Y3QgcHhhMnh4X3VkYwkqdWRjOworCisJdWRjID0gY29udGFpbmVyX29mKF9nYWRnZXQsIHN0cnVjdCBweGEyeHhfdWRjLCBnYWRnZXQpOworCisJLyogbm90IGFsbCBib2FyZHMgc3VwcG9ydCBwdWxsdXAgY29udHJvbCAqLworCWlmICghdWRjLT5tYWNoLT51ZGNfY29tbWFuZCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaXNfYWN0aXZlID0gKGlzX2FjdGl2ZSAhPSAwKTsKKwl1ZGMtPnB1bGx1cCA9IGlzX2FjdGl2ZTsKKwlwdWxsdXAodWRjLCBpc19hY3RpdmUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9nYWRnZXRfb3BzIHB4YTJ4eF91ZGNfb3BzID0geworCS5nZXRfZnJhbWUJPSBweGEyeHhfdWRjX2dldF9mcmFtZSwKKwkud2FrZXVwCQk9IHB4YTJ4eF91ZGNfd2FrZXVwLAorCS52YnVzX3Nlc3Npb24JPSBweGEyeHhfdWRjX3ZidXNfc2Vzc2lvbiwKKwkucHVsbHVwCQk9IHB4YTJ4eF91ZGNfcHVsbHVwLAorCisJLy8gLnZidXNfZHJhdyAuLi4gYm9hcmRzIG1heSBjb25zdW1lIGN1cnJlbnQgZnJvbSBWQlVTLCB1cCB0bworCS8vIDEwMC01MDBtQSBiYXNlZCBvbiBjb25maWcuICB0aGUgNTAwdUEgc3VzcGVuZCBjZWlsaW5nIG1lYW5zCisJLy8gdGhhdCBleGNsdXNpdmVseSB2YnVzLXBvd2VyZWQgUFhBIGRlc2lnbnMgdmlvbGF0ZSBVU0Igc3BlY3MuCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMKKworc3RhdGljIGNvbnN0IGNoYXIgcHJvY19ub2RlX25hbWUgW10gPSAiZHJpdmVyL3VkYyI7CisKK3N0YXRpYyBpbnQKK3VkY19wcm9jX3JlYWQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwKKwkJaW50ICplb2YsIHZvaWQgKl9kZXYpCit7CisJY2hhcgkJCSpidWYgPSBwYWdlOworCXN0cnVjdCBweGEyeHhfdWRjCSpkZXYgPSBfZGV2OworCWNoYXIJCQkqbmV4dCA9IGJ1ZjsKKwl1bnNpZ25lZAkJc2l6ZSA9IGNvdW50OworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCWludAkJCWksIHQ7CisJdTMyCQkJdG1wOworCisJaWYgKG9mZiAhPSAwKQorCQlyZXR1cm4gMDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qIGJhc2ljIGRldmljZSBzdGF0dXMgKi8KKwl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsIERSSVZFUl9ERVNDICJcbiIKKwkJIiVzIHZlcnNpb246ICVzXG5HYWRnZXQgZHJpdmVyOiAlc1xuSG9zdCAlc1xuXG4iLAorCQlkcml2ZXJfbmFtZSwgRFJJVkVSX1ZFUlNJT04gU0laRV9TVFIgRE1BU1RSLAorCQlkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5kcml2ZXIubmFtZSA6ICIobm9uZSkiLAorCQlpc191c2JfY29ubmVjdGVkKCkgPyAiZnVsbCBzcGVlZCIgOiAiZGlzY29ubmVjdGVkIik7CisJc2l6ZSAtPSB0OworCW5leHQgKz0gdDsKKworCS8qIHJlZ2lzdGVycyBmb3IgZGV2aWNlIGFuZCBlcDAgKi8KKwl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCisJCSJ1aWNyICUwMlguJTAyWCwgdXNpciAlMDJYLiUwMngsIHVmbnIgJTAyWC4lMDJYXG4iLAorCQlVSUNSMSwgVUlDUjAsIFVTSVIxLCBVU0lSMCwgVUZOUkgsIFVGTlJMKTsKKwlzaXplIC09IHQ7CisJbmV4dCArPSB0OworCisJdG1wID0gVURDQ1I7CisJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAorCQkidWRjY3IgJTAyWCA9JXMlcyVzJXMlcyVzJXMlc1xuIiwgdG1wLAorCQkodG1wICYgVURDQ1JfUkVNKSA/ICIgcmVtIiA6ICIiLAorCQkodG1wICYgVURDQ1JfUlNUSVIpID8gIiByc3RpciIgOiAiIiwKKwkJKHRtcCAmIFVEQ0NSX1NSTSkgPyAiIHNybSIgOiAiIiwKKwkJKHRtcCAmIFVEQ0NSX1NVU0lSKSA/ICIgc3VzaXIiIDogIiIsCisJCSh0bXAgJiBVRENDUl9SRVNJUikgPyAiIHJlc2lyIiA6ICIiLAorCQkodG1wICYgVURDQ1JfUlNNKSA/ICIgcnNtIiA6ICIiLAorCQkodG1wICYgVURDQ1JfVURBKSA/ICIgdWRhIiA6ICIiLAorCQkodG1wICYgVURDQ1JfVURFKSA/ICIgdWRlIiA6ICIiKTsKKwlzaXplIC09IHQ7CisJbmV4dCArPSB0OworCisJdG1wID0gVURDQ1MwOworCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKKwkJInVkY2NzMCAlMDJYID0lcyVzJXMlcyVzJXMlcyVzXG4iLCB0bXAsCisJCSh0bXAgJiBVRENDUzBfU0EpID8gIiBzYSIgOiAiIiwKKwkJKHRtcCAmIFVEQ0NTMF9STkUpID8gIiBybmUiIDogIiIsCisJCSh0bXAgJiBVRENDUzBfRlNUKSA/ICIgZnN0IiA6ICIiLAorCQkodG1wICYgVURDQ1MwX1NTVCkgPyAiIHNzdCIgOiAiIiwKKwkJKHRtcCAmIFVEQ0NTMF9EUldGKSA/ICIgZHdyZiIgOiAiIiwKKwkJKHRtcCAmIFVEQ0NTMF9GVEYpID8gIiBmdGYiIDogIiIsCisJCSh0bXAgJiBVRENDUzBfSVBSKSA/ICIgaXByIiA6ICIiLAorCQkodG1wICYgVURDQ1MwX09QUikgPyAiIG9wciIgOiAiIik7CisJc2l6ZSAtPSB0OworCW5leHQgKz0gdDsKKworCWlmIChkZXYtPmhhc19jZnIpIHsKKwkJdG1wID0gVURDQ0ZSOworCQl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsCisJCQkidWRjY2ZyICUwMlggPSVzJXNcbiIsIHRtcCwKKwkJCSh0bXAgJiBVRENDRlJfQVJFTikgPyAiIGFyZW4iIDogIiIsCisJCQkodG1wICYgVURDQ0ZSX0FDTSkgPyAiIGFjbSIgOiAiIik7CisJCXNpemUgLT0gdDsKKwkJbmV4dCArPSB0OworCX0KKworCWlmICghaXNfdXNiX2Nvbm5lY3RlZCgpIHx8ICFkZXYtPmRyaXZlcikKKwkJZ290byBkb25lOworCisJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLCAiZXAwIElOICVsdS8lbHUsIE9VVCAlbHUvJWx1XG5pcnFzICVsdVxuXG4iLAorCQlkZXYtPnN0YXRzLndyaXRlLmJ5dGVzLCBkZXYtPnN0YXRzLndyaXRlLm9wcywKKwkJZGV2LT5zdGF0cy5yZWFkLmJ5dGVzLCBkZXYtPnN0YXRzLnJlYWQub3BzLAorCQlkZXYtPnN0YXRzLmlycXMpOworCXNpemUgLT0gdDsKKwluZXh0ICs9IHQ7CisKKwkvKiBkdW1wIGVuZHBvaW50IHF1ZXVlcyAqLworCWZvciAoaSA9IDA7IGkgPCBQWEFfVURDX05VTV9FTkRQT0lOVFM7IGkrKykgeworCQlzdHJ1Y3QgcHhhMnh4X2VwCSplcCA9ICZkZXYtPmVwIFtpXTsKKwkJc3RydWN0IHB4YTJ4eF9yZXF1ZXN0CSpyZXE7CisJCWludAkJCXQ7CisKKwkJaWYgKGkgIT0gMCkgeworCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpkOworCisJCQlkID0gZXAtPmRlc2M7CisJCQlpZiAoIWQpCisJCQkJY29udGludWU7CisJCQl0bXAgPSAqZGV2LT5lcCBbaV0ucmVnX3VkY2NzOworCQkJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAorCQkJCSIlcyBtYXggJWQgJXMgdWRjY3MgJTAyeCBpcnFzICVsdS8lbHVcbiIsCisJCQkJZXAtPmVwLm5hbWUsIGxlMTZfdG9fY3B1IChkLT53TWF4UGFja2V0U2l6ZSksCisJCQkJKGVwLT5kbWEgPj0gMCkgPyAiZG1hIiA6ICJwaW8iLCB0bXAsCisJCQkJZXAtPnBpb19pcnFzLCBlcC0+ZG1hX2lycXMpOworCQkJLyogVE9ETyB0cmFuc2xhdGUgYWxsIGZpdmUgZ3JvdXBzIG9mIHVkY2NzIGJpdHMhICovCisKKwkJfSBlbHNlIC8qIGVwMCBzaG91bGQgb25seSBoYXZlIG9uZSB0cmFuc2ZlciBxdWV1ZWQgKi8KKwkJCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwgImVwMCBtYXggMTYgcGlvIGlycXMgJWx1XG4iLAorCQkJCWVwLT5waW9faXJxcyk7CisJCWlmICh0IDw9IDAgfHwgdCA+IHNpemUpCisJCQlnb3RvIGRvbmU7CisJCXNpemUgLT0gdDsKKwkJbmV4dCArPSB0OworCisJCWlmIChsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CisJCQl0ID0gc2NucHJpbnRmKG5leHQsIHNpemUsICJcdChub3RoaW5nIHF1ZXVlZClcbiIpOworCQkJaWYgKHQgPD0gMCB8fCB0ID4gc2l6ZSkKKwkJCQlnb3RvIGRvbmU7CisJCQlzaXplIC09IHQ7CisJCQluZXh0ICs9IHQ7CisJCQljb250aW51ZTsKKwkJfQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKKyNpZmRlZglVU0VfRE1BCisJCQlpZiAoZXAtPmRtYSA+PSAwICYmIHJlcS0+cXVldWUucHJldiA9PSAmZXAtPnF1ZXVlKQorCQkJCXQgPSBzY25wcmludGYobmV4dCwgc2l6ZSwKKwkJCQkJIlx0cmVxICVwIGxlbiAlZC8lZCAiCisJCQkJCSJidWYgJXAgKGRtYSVkIGRjbWQgJTA4eClcbiIsCisJCQkJCSZyZXEtPnJlcSwgcmVxLT5yZXEuYWN0dWFsLAorCQkJCQlyZXEtPnJlcS5sZW5ndGgsIHJlcS0+cmVxLmJ1ZiwKKwkJCQkJZXAtPmRtYSwgRENNRChlcC0+ZG1hKQorCQkJCQkvLyBsb3cgMTMgYml0cyA9PSBieXRlcy10by1nbworCQkJCQkpOworCQkJZWxzZQorI2VuZGlmCisJCQkJdCA9IHNjbnByaW50ZihuZXh0LCBzaXplLAorCQkJCQkiXHRyZXEgJXAgbGVuICVkLyVkIGJ1ZiAlcFxuIiwKKwkJCQkJJnJlcS0+cmVxLCByZXEtPnJlcS5hY3R1YWwsCisJCQkJCXJlcS0+cmVxLmxlbmd0aCwgcmVxLT5yZXEuYnVmKTsKKwkJCWlmICh0IDw9IDAgfHwgdCA+IHNpemUpCisJCQkJZ290byBkb25lOworCQkJc2l6ZSAtPSB0OworCQkJbmV4dCArPSB0OworCQl9CisJfQorCitkb25lOgorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkqZW9mID0gMTsKKwlyZXR1cm4gY291bnQgLSBzaXplOworfQorCisjZGVmaW5lIGNyZWF0ZV9wcm9jX2ZpbGVzKCkgXAorCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkocHJvY19ub2RlX25hbWUsIDAsIE5VTEwsIHVkY19wcm9jX3JlYWQsIGRldikKKyNkZWZpbmUgcmVtb3ZlX3Byb2NfZmlsZXMoKSBcCisJcmVtb3ZlX3Byb2NfZW50cnkocHJvY19ub2RlX25hbWUsIE5VTEwpCisKKyNlbHNlCS8qICFDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyAqLworCisjZGVmaW5lIGNyZWF0ZV9wcm9jX2ZpbGVzKCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIHJlbW92ZV9wcm9jX2ZpbGVzKCkgZG8ge30gd2hpbGUgKDApCisKKyNlbmRpZgkvKiBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyAqLworCisvKiAiZnVuY3Rpb24iIHN5c2ZzIGF0dHJpYnV0ZSAqLworc3RhdGljIHNzaXplX3QKK3Nob3dfZnVuY3Rpb24gKHN0cnVjdCBkZXZpY2UgKl9kZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcHhhMnh4X3VkYwkqZGV2ID0gZGV2X2dldF9kcnZkYXRhIChfZGV2KTsKKworCWlmICghZGV2LT5kcml2ZXIKKwkJCXx8ICFkZXYtPmRyaXZlci0+ZnVuY3Rpb24KKwkJCXx8IHN0cmxlbiAoZGV2LT5kcml2ZXItPmZ1bmN0aW9uKSA+IFBBR0VfU0laRSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNjbnByaW50ZiAoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgZGV2LT5kcml2ZXItPmZ1bmN0aW9uKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUiAoZnVuY3Rpb24sIFNfSVJVR08sIHNob3dfZnVuY3Rpb24sIE5VTEwpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogCXVkY19kaXNhYmxlIC0gZGlzYWJsZSBVU0IgZGV2aWNlIGNvbnRyb2xsZXIKKyAqLworc3RhdGljIHZvaWQgdWRjX2Rpc2FibGUoc3RydWN0IHB4YTJ4eF91ZGMgKmRldikKK3sKKwkvKiBibG9jayBhbGwgaXJxcyAqLworCXVkY19zZXRfbWFza19VRENDUihVRENDUl9TUk18VURDQ1JfUkVNKTsKKwlVSUNSMCA9IFVJQ1IxID0gMHhmZjsKKwlVRk5SSCA9IFVGTlJIX1NJTTsKKworCS8qIGlmIGhhcmR3YXJlIHN1cHBvcnRzIGl0LCBkaXNjb25uZWN0IGZyb20gdXNiICovCisJbWFrZV91c2JfZGlzYXBwZWFyKCk7CisKKwl1ZGNfY2xlYXJfbWFza19VRENDUihVRENDUl9VREUpOworCisjaWZkZWYJQ09ORklHX0FSQ0hfUFhBCisgICAgICAgIC8qIERpc2FibGUgY2xvY2sgZm9yIFVTQiBkZXZpY2UgKi8KKwlweGFfc2V0X2NrZW4oQ0tFTjExX1VTQiwgMCk7CisjZW5kaWYKKworCWVwMF9pZGxlIChkZXYpOworCWRldi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047CisJTEVEX0NPTk5FQ1RFRF9PRkY7Cit9CisKKworLyoKKyAqIAl1ZGNfcmVpbml0IC0gaW5pdGlhbGl6ZSBzb2Z0d2FyZSBzdGF0ZQorICovCitzdGF0aWMgdm9pZCB1ZGNfcmVpbml0KHN0cnVjdCBweGEyeHhfdWRjICpkZXYpCit7CisJdTMyCWk7CisKKwkvKiBkZXZpY2UvZXAwIHJlY29yZHMgaW5pdCAqLworCUlOSVRfTElTVF9IRUFEICgmZGV2LT5nYWRnZXQuZXBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQgKCZkZXYtPmdhZGdldC5lcDAtPmVwX2xpc3QpOworCWRldi0+ZXAwc3RhdGUgPSBFUDBfSURMRTsKKworCS8qIGJhc2ljIGVuZHBvaW50IHJlY29yZHMgaW5pdCAqLworCWZvciAoaSA9IDA7IGkgPCBQWEFfVURDX05VTV9FTkRQT0lOVFM7IGkrKykgeworCQlzdHJ1Y3QgcHhhMnh4X2VwICplcCA9ICZkZXYtPmVwW2ldOworCisJCWlmIChpICE9IDApCisJCQlsaXN0X2FkZF90YWlsICgmZXAtPmVwLmVwX2xpc3QsICZkZXYtPmdhZGdldC5lcF9saXN0KTsKKworCQllcC0+ZGVzYyA9IE5VTEw7CisJCWVwLT5zdG9wcGVkID0gMDsKKwkJSU5JVF9MSVNUX0hFQUQgKCZlcC0+cXVldWUpOworCQllcC0+cGlvX2lycXMgPSBlcC0+ZG1hX2lycXMgPSAwOworCX0KKworCS8qIHRoZSByZXN0IHdhcyBzdGF0aWNhbGx5IGluaXRpYWxpemVkLCBhbmQgaXMgcmVhZC1vbmx5ICovCit9CisKKy8qIHVudGlsIGl0J3MgZW5hYmxlZCwgdGhpcyBVREMgc2hvdWxkIGJlIGNvbXBsZXRlbHkgaW52aXNpYmxlCisgKiB0byBhbnkgVVNCIGhvc3QuCisgKi8KK3N0YXRpYyB2b2lkIHVkY19lbmFibGUgKHN0cnVjdCBweGEyeHhfdWRjICpkZXYpCit7CisJdWRjX2NsZWFyX21hc2tfVURDQ1IoVURDQ1JfVURFKTsKKworI2lmZGVmCUNPTkZJR19BUkNIX1BYQQorICAgICAgICAvKiBFbmFibGUgY2xvY2sgZm9yIFVTQiBkZXZpY2UgKi8KKwlweGFfc2V0X2NrZW4oQ0tFTjExX1VTQiwgMSk7CisJdWRlbGF5KDUpOworI2VuZGlmCisKKwkvKiB0cnkgdG8gY2xlYXIgdGhlc2UgYml0cyBiZWZvcmUgd2UgZW5hYmxlIHRoZSB1ZGMgKi8KKwl1ZGNfYWNrX2ludF9VRENDUihVRENDUl9TVVNJUnwvKlVEQ0NSX1JTVElSfCovVURDQ1JfUkVTSVIpOworCisJZXAwX2lkbGUoZGV2KTsKKwlkZXYtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCWRldi0+c3RhdHMuaXJxcyA9IDA7CisKKwkvKgorCSAqIHNlcXVlbmNlIHRha2VuIGZyb20gY2hhcHRlciAxMi41LjEwLCBQWEEyNTAgQXBwUHJvY0Rldk1hbnVhbDoKKwkgKiAtIGVuYWJsZSBVREMKKwkgKiAtIGlmIFJFU0VUIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIGFjayBpbnRlcnJ1cHQKKwkgKiAtIHVubWFzayByZXNldCBpbnRlcnJ1cHQKKwkgKi8KKwl1ZGNfc2V0X21hc2tfVURDQ1IoVURDQ1JfVURFKTsKKwlpZiAoIShVRENDUiAmIFVEQ0NSX1VEQSkpCisJCXVkY19hY2tfaW50X1VEQ0NSKFVEQ0NSX1JTVElSKTsKKworCWlmIChkZXYtPmhhc19jZnIgLyogVURDX1JFUzIgaXMgZGVmaW5lZCAqLykgeworCQkvKiBweGEyNTUgKGEwKykgY2FuIGF2b2lkIGEgc2V0X2NvbmZpZyByYWNlIHRoYXQgY291bGQKKwkJICogcHJldmVudCBnYWRnZXQgZHJpdmVycyBmcm9tIGNvbmZpZ3VyaW5nIGNvcnJlY3RseQorCQkgKi8KKwkJVURDQ0ZSID0gVURDQ0ZSX0FDTSB8IFVEQ0NGUl9NQjE7CisJfSBlbHNlIHsKKwkJLyogIlVTQiB0ZXN0IG1vZGUiIGZvciBweGEyNTAgZXJyYXRhIDQwLTQyIChzdGVwcGluZyBhMCwgYTEpCisJCSAqIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBtaXNzaW5nIHBhY2tldHMgYW5kIGludGVycnVwdHMuCisJCSAqIHN1cHBvc2VkbHkgb25lIGJpdCBwZXIgZW5kcG9pbnQsIGNvbnRyb2xsaW5nIHdoZXRoZXIgaXQKKwkJICogZG91YmxlIGJ1ZmZlcnMgb3Igbm90OyBBQ00vQVJFTiBiaXRzIGZpdCBpbnRvIHRoZSBob2xlcy4KKwkJICogemVybyBiaXRzIChsaWtlIFVTSVIwX0lSeCkgZGlzYWJsZSBkb3VibGUgYnVmZmVyaW5nLgorCQkgKi8KKwkJVURDX1JFUzEgPSAweDAwOworCQlVRENfUkVTMiA9IDB4MDA7CisJfQorCisjaWZkZWYJRElTQUJMRV9URVNUX01PREUKKwkvKiAidGVzdCBtb2RlIiBzZWVtcyB0byBoYXZlIGJlY29tZSB0aGUgZGVmYXVsdCBpbiBsYXRlciBjaGlwCisJICogcmV2cywgcHJldmVudGluZyBkb3VibGUgYnVmZmVyaW5nIChhbmQgaW52YWxpZGF0aW5nIGRvY3MpLgorCSAqIHRoaXMgRVhQRVJJTUVOVCBlbmFibGVzIGl0IGZvciBidWxrIGVuZHBvaW50cyBieSB0d2Vha2luZworCSAqIHVuZGVmaW5lZC9yZXNlcnZlZCByZWdpc3RlciBiaXRzICh0aGF0IG90aGVyIGRyaXZlcnMgY2xlYXIpLgorCSAqIEJlbGNhcnJhIGNvZGUgY29tbWVudHMgbm90ZWQgdGhpcyB1c2FnZS4KKwkgKi8KKwlpZiAoZmlmb19tb2RlICYgMSkgewkvKiBJTiBlbmRwb2ludHMgKi8KKwkJVURDX1JFUzEgfD0gVVNJUjBfSVIxfFVTSVIwX0lSNjsKKwkJVURDX1JFUzIgfD0gVVNJUjFfSVIxMTsKKwl9CisJaWYgKGZpZm9fbW9kZSAmIDIpIHsJLyogT1VUIGVuZHBvaW50cyAqLworCQlVRENfUkVTMSB8PSBVU0lSMF9JUjJ8VVNJUjBfSVI3OworCQlVRENfUkVTMiB8PSBVU0lSMV9JUjEyOworCX0KKyNlbmRpZgorCisJLyogZW5hYmxlIHN1c3BlbmQvcmVzdW1lIGFuZCByZXNldCBpcnFzICovCisJdWRjX2NsZWFyX21hc2tfVURDQ1IoVURDQ1JfU1JNIHwgVURDQ1JfUkVNKTsKKworCS8qIGVuYWJsZSBlcDAgaXJxcyAqLworCVVJQ1IwICY9IH5VSUNSMF9JTTA7CisKKwkvKiBpZiBoYXJkd2FyZSBzdXBwb3J0cyBpdCwgcHVsbHVwIEQrIGFuZCB3YWl0IGZvciByZXNldCAqLworCWxldF91c2JfYXBwZWFyKCk7Cit9CisKKworLyogd2hlbiBhIGRyaXZlciBpcyBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCwgaXQgd2lsbCByZWNlaXZlCisgKiBjb250cm9sIHJlcXVlc3RzIGluY2x1ZGluZyBzZXRfY29uZmlndXJhdGlvbigpLCB3aGljaCBlbmFibGVzCisgKiBub24tY29udHJvbCByZXF1ZXN0cy4gIHRoZW4gdXNiIHRyYWZmaWMgZm9sbG93cyB1bnRpbCBhCisgKiBkaXNjb25uZWN0IGlzIHJlcG9ydGVkLiAgdGhlbiBhIGhvc3QgbWF5IGNvbm5lY3QgYWdhaW4sIG9yCisgKiB0aGUgZHJpdmVyIG1pZ2h0IGdldCB1bmJvdW5kLgorICovCitpbnQgdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCit7CisJc3RydWN0IHB4YTJ4eF91ZGMJKmRldiA9IHRoZV9jb250cm9sbGVyOworCWludAkJCXJldHZhbDsKKworCWlmICghZHJpdmVyCisJCQl8fCBkcml2ZXItPnNwZWVkICE9IFVTQl9TUEVFRF9GVUxMCisJCQl8fCAhZHJpdmVyLT5iaW5kCisJCQl8fCAhZHJpdmVyLT51bmJpbmQKKwkJCXx8ICFkcml2ZXItPmRpc2Nvbm5lY3QKKwkJCXx8ICFkcml2ZXItPnNldHVwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKGRldi0+ZHJpdmVyKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogZmlyc3QgaG9vayB1cCB0aGUgZHJpdmVyIC4uLiAqLworCWRldi0+ZHJpdmVyID0gZHJpdmVyOworCWRldi0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAmZHJpdmVyLT5kcml2ZXI7CisJZGV2LT5wdWxsdXAgPSAxOworCisJZGV2aWNlX2FkZCAoJmRldi0+Z2FkZ2V0LmRldik7CisJcmV0dmFsID0gZHJpdmVyLT5iaW5kKCZkZXYtPmdhZGdldCk7CisJaWYgKHJldHZhbCkgeworCQlETVNHKCJiaW5kIHRvIGRyaXZlciAlcyAtLT4gZXJyb3IgJWRcbiIsCisJCQkJZHJpdmVyLT5kcml2ZXIubmFtZSwgcmV0dmFsKTsKKwkJZGV2aWNlX2RlbCAoJmRldi0+Z2FkZ2V0LmRldik7CisKKwkJZGV2LT5kcml2ZXIgPSBOVUxMOworCQlkZXYtPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJZGV2aWNlX2NyZWF0ZV9maWxlKGRldi0+ZGV2LCAmZGV2X2F0dHJfZnVuY3Rpb24pOworCisJLyogLi4uIHRoZW4gZW5hYmxlIGhvc3QgZGV0ZWN0aW9uIGFuZCBlcDA7IGFuZCB3ZSdyZSByZWFkeQorCSAqIGZvciBzZXRfY29uZmlndXJhdGlvbiBhcyB3ZWxsIGFzIGV2ZW50dWFsIGRpc2Nvbm5lY3QuCisJICovCisJRE1TRygicmVnaXN0ZXJlZCBnYWRnZXQgZHJpdmVyICclcydcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCXB1bGx1cChkZXYsIDEpOworCWR1bXBfc3RhdGUoZGV2KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIpOworCitzdGF0aWMgdm9pZAorc3RvcF9hY3Rpdml0eShzdHJ1Y3QgcHhhMnh4X3VkYyAqZGV2LCBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKK3sKKwlpbnQgaTsKKworCS8qIGRvbid0IGRpc2Nvbm5lY3QgZHJpdmVycyBtb3JlIHRoYW4gb25jZSAqLworCWlmIChkZXYtPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJZHJpdmVyID0gTlVMTDsKKwlkZXYtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCisJLyogcHJldmVudCBuZXcgcmVxdWVzdCBzdWJtaXNzaW9ucywga2lsbCBhbnkgb3V0c3RhbmRpbmcgcmVxdWVzdHMgICovCisJZm9yIChpID0gMDsgaSA8IFBYQV9VRENfTlVNX0VORFBPSU5UUzsgaSsrKSB7CisJCXN0cnVjdCBweGEyeHhfZXAgKmVwID0gJmRldi0+ZXBbaV07CisKKwkJZXAtPnN0b3BwZWQgPSAxOworCQludWtlKGVwLCAtRVNIVVRET1dOKTsKKwl9CisJZGVsX3RpbWVyX3N5bmMoJmRldi0+dGltZXIpOworCisJLyogcmVwb3J0IGRpc2Nvbm5lY3Q7IHRoZSBkcml2ZXIgaXMgYWxyZWFkeSBxdWllc2NlZCAqLworCUxFRF9DT05ORUNURURfT0ZGOworCWlmIChkcml2ZXIpCisJCWRyaXZlci0+ZGlzY29ubmVjdCgmZGV2LT5nYWRnZXQpOworCisJLyogcmUtaW5pdCBkcml2ZXItdmlzaWJsZSBkYXRhIHN0cnVjdHVyZXMgKi8KKwl1ZGNfcmVpbml0KGRldik7Cit9CisKK2ludCB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKQoreworCXN0cnVjdCBweGEyeHhfdWRjCSpkZXYgPSB0aGVfY29udHJvbGxlcjsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIWRyaXZlciB8fCBkcml2ZXIgIT0gZGV2LT5kcml2ZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlwdWxsdXAoZGV2LCAwKTsKKwlzdG9wX2FjdGl2aXR5KGRldiwgZHJpdmVyKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwlkcml2ZXItPnVuYmluZCgmZGV2LT5nYWRnZXQpOworCWRldi0+ZHJpdmVyID0gTlVMTDsKKworCWRldmljZV9kZWwgKCZkZXYtPmdhZGdldC5kZXYpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYtPmRldiwgJmRldl9hdHRyX2Z1bmN0aW9uKTsKKworCURNU0coInVucmVnaXN0ZXJlZCBnYWRnZXQgZHJpdmVyICclcydcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworCWR1bXBfc3RhdGUoZGV2KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIENPTkZJR19BUkNIX0xVQkJPQ0sKKworLyogTHViYm9jayBoYXMgc2VwYXJhdGUgY29ubmVjdCBhbmQgZGlzY29ubmVjdCBpcnFzLiAgTW9yZSB0eXBpY2FsIGRlc2lnbnMKKyAqIHVzZSBvbmUgR1BJTyBhcyB0aGUgVkJVUyBJUlEsIGFuZCBhbm90aGVyIHRvIGNvbnRyb2wgdGhlIEQrIHB1bGx1cC4KKyAqLworCitzdGF0aWMgaXJxcmV0dXJuX3QKK2x1YmJvY2tfdmJ1c19pcnEoaW50IGlycSwgdm9pZCAqX2Rldiwgc3RydWN0IHB0X3JlZ3MgKnIpCit7CisJc3RydWN0IHB4YTJ4eF91ZGMJKmRldiA9IF9kZXY7CisJaW50CQkJdmJ1czsKKworCWRldi0+c3RhdHMuaXJxcysrOworCUhFWF9ESVNQTEFZKGRldi0+c3RhdHMuaXJxcyk7CisJc3dpdGNoIChpcnEpIHsKKwljYXNlIExVQkJPQ0tfVVNCX0lSUToKKwkJTEVEX0NPTk5FQ1RFRF9PTjsKKwkJdmJ1cyA9IDE7CisJCWRpc2FibGVfaXJxKExVQkJPQ0tfVVNCX0lSUSk7CisJCWVuYWJsZV9pcnEoTFVCQk9DS19VU0JfRElTQ19JUlEpOworCQlicmVhazsKKwljYXNlIExVQkJPQ0tfVVNCX0RJU0NfSVJROgorCQlMRURfQ09OTkVDVEVEX09GRjsKKwkJdmJ1cyA9IDA7CisJCWRpc2FibGVfaXJxKExVQkJPQ0tfVVNCX0RJU0NfSVJRKTsKKwkJZW5hYmxlX2lycShMVUJCT0NLX1VTQl9JUlEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJcHhhMnh4X3VkY192YnVzX3Nlc3Npb24oJmRldi0+Z2FkZ2V0LCB2YnVzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKyNlbmRpZgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9lcF9zdGF0ZSAoc3RydWN0IHB4YTJ4eF91ZGMgKmRldikKK3sKKwl1bnNpZ25lZCBpOworCisJLyogaGFyZHdhcmUgU0VUX3tDT05GSUdVUkFUSU9OLElOVEVSRkFDRX0gYXV0b21hZ2ljIHJlc2V0cyBlbmRwb2ludAorCSAqIGZpZm9zLCBhbmQgcGVuZGluZyB0cmFuc2FjdGlvbnMgbXVzdG4ndCBiZSBjb250aW51ZWQgaW4gYW55IGNhc2UuCisJICovCisJZm9yIChpID0gMTsgaSA8IFBYQV9VRENfTlVNX0VORFBPSU5UUzsgaSsrKQorCQludWtlKCZkZXYtPmVwW2ldLCAtRUNPTk5BQk9SVEVEKTsKK30KKworc3RhdGljIHZvaWQgdWRjX3dhdGNoZG9nKHVuc2lnbmVkIGxvbmcgX2RldikKK3sKKwlzdHJ1Y3QgcHhhMnh4X3VkYwkqZGV2ID0gKHZvaWQgKilfZGV2OworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlpZiAoZGV2LT5lcDBzdGF0ZSA9PSBFUDBfU1RBTEwKKwkJCSYmIChVRENDUzAgJiBVRENDUzBfRlNUKSA9PSAwCisJCQkmJiAoVURDQ1MwICYgVURDQ1MwX1NTVCkgPT0gMCkgeworCQlVRENDUzAgPSBVRENDUzBfRlNUfFVEQ0NTMF9GVEY7CisJCURCRyhEQkdfVkVSQk9TRSwgImVwMCByZS1zdGFsbFxuIik7CisJCXN0YXJ0X3dhdGNoZG9nKGRldik7CisJfQorCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2VwMCAoc3RydWN0IHB4YTJ4eF91ZGMgKmRldikKK3sKKwl1MzIJCQl1ZGNjczAgPSBVRENDUzA7CisJc3RydWN0IHB4YTJ4eF9lcAkqZXAgPSAmZGV2LT5lcCBbMF07CisJc3RydWN0IHB4YTJ4eF9yZXF1ZXN0CSpyZXE7CisJdW5pb24geworCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0CXI7CisJCXU4CQkJcmF3IFs4XTsKKwkJdTMyCQkJd29yZCBbMl07CisJfSB1OworCisJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCisJCXJlcSA9IE5VTEw7CisJZWxzZQorCQlyZXEgPSBsaXN0X2VudHJ5KGVwLT5xdWV1ZS5uZXh0LCBzdHJ1Y3QgcHhhMnh4X3JlcXVlc3QsIHF1ZXVlKTsKKworCS8qIGNsZWFyIHN0YWxsIHN0YXR1cyAqLworCWlmICh1ZGNjczAgJiBVRENDUzBfU1NUKSB7CisJCW51a2UoZXAsIC1FUElQRSk7CisJCVVEQ0NTMCA9IFVEQ0NTMF9TU1Q7CisJCWRlbF90aW1lcigmZGV2LT50aW1lcik7CisJCWVwMF9pZGxlKGRldik7CisJfQorCisJLyogcHJldmlvdXMgcmVxdWVzdCB1bmZpbmlzaGVkPyAgbm9uLWVycm9yIGlmZiBiYWNrLXRvLWJhY2sgLi4uICovCisJaWYgKCh1ZGNjczAgJiBVRENDUzBfU0EpICE9IDAgJiYgZGV2LT5lcDBzdGF0ZSAhPSBFUDBfSURMRSkgeworCQludWtlKGVwLCAwKTsKKwkJZGVsX3RpbWVyKCZkZXYtPnRpbWVyKTsKKwkJZXAwX2lkbGUoZGV2KTsKKwl9CisKKwlzd2l0Y2ggKGRldi0+ZXAwc3RhdGUpIHsKKwljYXNlIEVQMF9JRExFOgorCQkvKiBsYXRlLWJyZWFraW5nIHN0YXR1cz8gKi8KKwkJdWRjY3MwID0gVURDQ1MwOworCisJCS8qIHN0YXJ0IGNvbnRyb2wgcmVxdWVzdD8gKi8KKwkJaWYgKGxpa2VseSgodWRjY3MwICYgKFVEQ0NTMF9PUFJ8VURDQ1MwX1NBfFVEQ0NTMF9STkUpKQorCQkJCT09IChVRENDUzBfT1BSfFVEQ0NTMF9TQXxVRENDUzBfUk5FKSkpIHsKKwkJCWludCBpOworCisJCQludWtlIChlcCwgLUVQUk9UTyk7CisKKwkJCS8qIHJlYWQgU0VUVVAgcGFja2V0ICovCisJCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCQkJaWYgKHVubGlrZWx5KCEoVURDQ1MwICYgVURDQ1MwX1JORSkpKSB7CitiYWRfc2V0dXA6CisJCQkJCURNU0coIlNFVFVQICVkIVxuIiwgaSk7CisJCQkJCWdvdG8gc3RhbGw7CisJCQkJfQorCQkJCXUucmF3IFtpXSA9ICh1OCkgVUREUjA7CisJCQl9CisJCQlpZiAodW5saWtlbHkoKFVEQ0NTMCAmIFVEQ0NTMF9STkUpICE9IDApKQorCQkJCWdvdG8gYmFkX3NldHVwOworCitnb3Rfc2V0dXA6CisJCQlEQkcoREJHX1ZFUkJPU0UsICJTRVRVUCAlMDJ4LiUwMnggdiUwNHggaSUwNHggbCUwNHhcbiIsCisJCQkJdS5yLmJSZXF1ZXN0VHlwZSwgdS5yLmJSZXF1ZXN0LAorCQkJCWxlMTZfdG9fY3B1KHUuci53VmFsdWUpLAorCQkJCWxlMTZfdG9fY3B1KHUuci53SW5kZXgpLAorCQkJCWxlMTZfdG9fY3B1KHUuci53TGVuZ3RoKSk7CisKKwkJCS8qIGNvcGUgd2l0aCBhdXRvbWFnaWMgZm9yIHNvbWUgc3RhbmRhcmQgcmVxdWVzdHMuICovCisJCQlkZXYtPnJlcV9zdGQgPSAodS5yLmJSZXF1ZXN0VHlwZSAmIFVTQl9UWVBFX01BU0spCisJCQkJCQk9PSBVU0JfVFlQRV9TVEFOREFSRDsKKwkJCWRldi0+cmVxX2NvbmZpZyA9IDA7CisJCQlkZXYtPnJlcV9wZW5kaW5nID0gMTsKKwkJCXN3aXRjaCAodS5yLmJSZXF1ZXN0KSB7CisJCQkvKiBoYXJkd2FyZSByZXN0cmljdHMgZ2FkZ2V0IGRyaXZlcnMgaGVyZSEgKi8KKwkJCWNhc2UgVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTjoKKwkJCQlpZiAodS5yLmJSZXF1ZXN0VHlwZSA9PSBVU0JfUkVDSVBfREVWSUNFKSB7CisJCQkJCS8qIHJlZmxlY3QgaGFyZHdhcmUncyBhdXRvbWFnaWMKKwkJCQkJICogdXAgdG8gdGhlIGdhZGdldCBkcml2ZXIuCisJCQkJCSAqLworY29uZmlnX2NoYW5nZToKKwkJCQkJZGV2LT5yZXFfY29uZmlnID0gMTsKKwkJCQkJY2xlYXJfZXBfc3RhdGUoZGV2KTsKKwkJCQkJLyogaWYgIWhhc19jZnIsIHRoZXJlJ3Mgbm8gc3luY2gKKwkJCQkJICogZWxzZSB1c2UgQVJFTiAobGF0ZXIpIG5vdCBTQXxPUFIKKwkJCQkJICogVVNJUjBfSVIwIGFjdHMgZWRnZSBzZW5zaXRpdmUKKwkJCQkJICovCisJCQkJfQorCQkJCWJyZWFrOworCQkJLyogLi4uIGFuZCBoZXJlLCBldmVuIG1vcmUgLi4uICovCisJCQljYXNlIFVTQl9SRVFfU0VUX0lOVEVSRkFDRToKKwkJCQlpZiAodS5yLmJSZXF1ZXN0VHlwZSA9PSBVU0JfUkVDSVBfSU5URVJGQUNFKSB7CisJCQkJCS8qIHVkYyBoYXJkd2FyZSBpcyBicm9rZW4gYnkgZGVzaWduOgorCQkJCQkgKiAgLSBhbHRzZXR0aW5nIG1heSBvbmx5IGJlIHplcm87CisJCQkJCSAqICAtIGh3IHJlc2V0cyBhbGwgaW50ZXJmYWNlcycgZXBzOworCQkJCQkgKiAgLSBlcCByZXNldCBkb2Vzbid0IGluY2x1ZGUgaGFsdCg/KS4KKwkJCQkJICovCisJCQkJCURNU0coImJyb2tlbiBzZXRfaW50ZXJmYWNlICglZC8lZClcbiIsCisJCQkJCQlsZTE2X3RvX2NwdSh1LnIud0luZGV4KSwKKwkJCQkJCWxlMTZfdG9fY3B1KHUuci53VmFsdWUpKTsKKwkJCQkJZ290byBjb25maWdfY2hhbmdlOworCQkJCX0KKwkJCQlicmVhazsKKwkJCS8qIGhhcmR3YXJlIHdhcyBzdXBwb3NlZCB0byBoaWRlIHRoaXMgKi8KKwkJCWNhc2UgVVNCX1JFUV9TRVRfQUREUkVTUzoKKwkJCQlpZiAodS5yLmJSZXF1ZXN0VHlwZSA9PSBVU0JfUkVDSVBfREVWSUNFKSB7CisJCQkJCWVwMHN0YXJ0KGRldiwgMCwgImFkZHJlc3MiKTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKHUuci5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKQorCQkJCWRldi0+ZXAwc3RhdGUgPSBFUDBfSU5fREFUQV9QSEFTRTsKKwkJCWVsc2UKKwkJCQlkZXYtPmVwMHN0YXRlID0gRVAwX09VVF9EQVRBX1BIQVNFOworCisJCQlpID0gZGV2LT5kcml2ZXItPnNldHVwKCZkZXYtPmdhZGdldCwgJnUucik7CisJCQlpZiAoaSA8IDApIHsKKwkJCQkvKiBoYXJkd2FyZSBhdXRvbWFnaWMgcHJldmVudGluZyBTVEFMTC4uLiAqLworCQkJCWlmIChkZXYtPnJlcV9jb25maWcpIHsKKwkJCQkJLyogaGFyZHdhcmUgc29tZXRpbWVzIG5lZ2xlY3RzIHRvIHRlbGwKKwkJCQkJICogdGVsbCB1cyBhYm91dCBjb25maWcgY2hhbmdlIGV2ZW50cywKKwkJCQkJICogc28gbGF0ZXIgb25lcyBtYXkgZmFpbC4uLgorCQkJCQkgKi8KKwkJCQkJV0FSTigiY29uZmlnIGNoYW5nZSAlMDJ4IGZhaWwgJWQ/XG4iLAorCQkJCQkJdS5yLmJSZXF1ZXN0LCBpKTsKKwkJCQkJcmV0dXJuOworCQkJCQkvKiBUT0RPIGV4cGVyaW1lbnQ6ICBpZiBoYXNfY2ZyLAorCQkJCQkgKiBoYXJkd2FyZSBkaWRuJ3QgQUNLOyBtYXliZSB3ZQorCQkJCQkgKiBjb3VsZCBhY3R1YWxseSBTVEFMTCEKKwkJCQkJICovCisJCQkJfQorCQkJCURCRyhEQkdfVkVSQk9TRSwgInByb3RvY29sIFNUQUxMLCAiCisJCQkJCSIlMDJ4IGVyciAlZFxuIiwgVURDQ1MwLCBpKTsKK3N0YWxsOgorCQkJCS8qIHRoZSB3YXRjaGRvZyB0aW1lciBoZWxwcyBkZWFsIHdpdGggY2FzZXMKKwkJCQkgKiB3aGVyZSB1ZGMgc2VlbXMgdG8gY2xlYXIgRlNUIHdyb25nbHksIGFuZAorCQkJCSAqIHRoZW4gTkFLcyBpbnN0ZWFkIG9mIFNUQUxMaW5nLgorCQkJCSAqLworCQkJCWVwMHN0YXJ0KGRldiwgVURDQ1MwX0ZTVHxVRENDUzBfRlRGLCAic3RhbGwiKTsKKwkJCQlzdGFydF93YXRjaGRvZyhkZXYpOworCQkJCWRldi0+ZXAwc3RhdGUgPSBFUDBfU1RBTEw7CisKKwkJCS8qIGRlZmVycmVkIGkvbyA9PSBubyByZXNwb25zZSB5ZXQgKi8KKwkJCX0gZWxzZSBpZiAoZGV2LT5yZXFfcGVuZGluZykgeworCQkJCWlmIChsaWtlbHkoZGV2LT5lcDBzdGF0ZSA9PSBFUDBfSU5fREFUQV9QSEFTRQorCQkJCQkJfHwgZGV2LT5yZXFfc3RkIHx8IHUuci53TGVuZ3RoKSkKKwkJCQkJZXAwc3RhcnQoZGV2LCAwLCAiZGVmZXIiKTsKKwkJCQllbHNlCisJCQkJCWVwMHN0YXJ0KGRldiwgVURDQ1MwX0lQUiwgImRlZmVyL0lQUiIpOworCQkJfQorCisJCQkvKiBleHBlY3QgYXQgbGVhc3Qgb25lIGRhdGEgb3Igc3RhdHVzIHN0YWdlIGlycSAqLworCQkJcmV0dXJuOworCisJCX0gZWxzZSBpZiAobGlrZWx5KCh1ZGNjczAgJiAoVURDQ1MwX09QUnxVRENDUzBfU0EpKQorCQkJCT09IChVRENDUzBfT1BSfFVEQ0NTMF9TQSkpKSB7CisJCQl1bnNpZ25lZCBpOworCisJCQkvKiBweGEyMTAvMjUwIGVycmF0dW0gMTMxIGZvciBCMC9CMSBzYXlzIFJORSBsaWVzLgorCQkJICogc3RpbGwgb2JzZXJ2ZWQgb24gYSBweGEyNTUgYTAuCisJCQkgKi8KKwkJCURCRyhEQkdfVkVSQk9TRSwgImUxMzFcbiIpOworCQkJbnVrZShlcCwgLUVQUk9UTyk7CisKKwkJCS8qIHJlYWQgU0VUVVAgZGF0YSwgYnV0IGRvbid0IHRydXN0IGl0IHRvbyBtdWNoICovCisJCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJCXUucmF3IFtpXSA9ICh1OCkgVUREUjA7CisJCQlpZiAoKHUuci5iUmVxdWVzdFR5cGUgJiBVU0JfUkVDSVBfTUFTSykKKwkJCQkJPiBVU0JfUkVDSVBfT1RIRVIpCisJCQkJZ290byBzdGFsbDsKKwkJCWlmICh1LndvcmQgWzBdID09IDAgJiYgdS53b3JkIFsxXSA9PSAwKQorCQkJCWdvdG8gc3RhbGw7CisJCQlnb3RvIGdvdF9zZXR1cDsKKwkJfSBlbHNlIHsKKwkJCS8qIHNvbWUgcmFuZG9tIGVhcmx5IElSUToKKwkJCSAqIC0gd2UgYWNrZWQgRlNUCisJCQkgKiAtIElQUiBjbGVhcmVkCisJCQkgKiAtIE9QUiBnb3Qgc2V0LCB3aXRob3V0IFNBIChsaWtlbHkgc3RhdHVzIHN0YWdlKQorCQkJICovCisJCQlVRENDUzAgPSB1ZGNjczAgJiAoVURDQ1MwX1NBfFVEQ0NTMF9PUFIpOworCQl9CisJCWJyZWFrOworCWNhc2UgRVAwX0lOX0RBVEFfUEhBU0U6CQkJLyogR0VUX0RFU0NSSVBUT1IgZXRjICovCisJCWlmICh1ZGNjczAgJiBVRENDUzBfT1BSKSB7CisJCQlVRENDUzAgPSBVRENDUzBfT1BSfFVEQ0NTMF9GVEY7CisJCQlEQkcoREJHX1ZFUkJPU0UsICJlcDBpbiBwcmVtYXR1cmUgc3RhdHVzXG4iKTsKKwkJCWlmIChyZXEpCisJCQkJZG9uZShlcCwgcmVxLCAwKTsKKwkJCWVwMF9pZGxlKGRldik7CisJCX0gZWxzZSAvKiBpcnEgd2FzIElQUiBjbGVhcmluZyAqLyB7CisJCQlpZiAocmVxKSB7CisJCQkJLyogdGhpcyBJTiBwYWNrZXQgbWlnaHQgZmluaXNoIHRoZSByZXF1ZXN0ICovCisJCQkJKHZvaWQpIHdyaXRlX2VwMF9maWZvKGVwLCByZXEpOworCQkJfSAvKiBlbHNlIElOIHRva2VuIGJlZm9yZSByZXNwb25zZSB3YXMgd3JpdHRlbiAqLworCQl9CisJCWJyZWFrOworCWNhc2UgRVAwX09VVF9EQVRBX1BIQVNFOgkJLyogU0VUX0RFU0NSSVBUT1IgZXRjICovCisJCWlmICh1ZGNjczAgJiBVRENDUzBfT1BSKSB7CisJCQlpZiAocmVxKSB7CisJCQkJLyogdGhpcyBPVVQgcGFja2V0IG1pZ2h0IGZpbmlzaCB0aGUgcmVxdWVzdCAqLworCQkJCWlmIChyZWFkX2VwMF9maWZvKGVwLCByZXEpKQorCQkJCQlkb25lKGVwLCByZXEsIDApOworCQkJCS8qIGVsc2UgbW9yZSBPVVQgcGFja2V0cyBleHBlY3RlZCAqLworCQkJfSAvKiBlbHNlIE9VVCB0b2tlbiBiZWZvcmUgcmVhZCB3YXMgaXNzdWVkICovCisJCX0gZWxzZSAvKiBpcnEgd2FzIElQUiBjbGVhcmluZyAqLyB7CisJCQlEQkcoREJHX1ZFUkJPU0UsICJlcDBvdXQgcHJlbWF0dXJlIHN0YXR1c1xuIik7CisJCQlpZiAocmVxKQorCQkJCWRvbmUoZXAsIHJlcSwgMCk7CisJCQllcDBfaWRsZShkZXYpOworCQl9CisJCWJyZWFrOworCWNhc2UgRVAwX0VORF9YRkVSOgorCQlpZiAocmVxKQorCQkJZG9uZShlcCwgcmVxLCAwKTsKKwkJLyogYWNrIGNvbnRyb2wtSU4gc3RhdHVzIChtYXliZSBpbi16bHAgd2FzIHNraXBwZWQpCisJCSAqIGFsc28gYXBwZWFycyBhZnRlciBzb21lIGNvbmZpZyBjaGFuZ2UgZXZlbnRzLgorCQkgKi8KKwkJaWYgKHVkY2NzMCAmIFVEQ0NTMF9PUFIpCisJCQlVRENDUzAgPSBVRENDUzBfT1BSOworCQllcDBfaWRsZShkZXYpOworCQlicmVhazsKKwljYXNlIEVQMF9TVEFMTDoKKwkJVURDQ1MwID0gVURDQ1MwX0ZTVDsKKwkJYnJlYWs7CisJfQorCVVTSVIwID0gVVNJUjBfSVIwOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfZXAoc3RydWN0IHB4YTJ4eF9lcCAqZXApCit7CisJc3RydWN0IHB4YTJ4eF9yZXF1ZXN0CSpyZXE7CisJaW50CQkJaXNfaW4gPSBlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU47CisJaW50CQkJY29tcGxldGVkOworCXUzMgkJCXVkY2NzLCB0bXA7CisKKwlkbyB7CisJCWNvbXBsZXRlZCA9IDA7CisJCWlmIChsaWtlbHkgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSkKKwkJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsCisJCQkJCXN0cnVjdCBweGEyeHhfcmVxdWVzdCwgcXVldWUpOworCQllbHNlCisJCQlyZXEgPSBOVUxMOworCisJCS8vIFRPRE8gY2hlY2sgRlNUIGhhbmRsaW5nCisKKwkJdWRjY3MgPSAqZXAtPnJlZ191ZGNjczsKKwkJaWYgKHVubGlrZWx5KGlzX2luKSkgewkvKiBpcnEgZnJvbSBUUEMsIFNTVCwgb3IgKElTTykgVFVSICovCisJCQl0bXAgPSBVRENDU19CSV9UVVI7CisJCQlpZiAobGlrZWx5KGVwLT5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykpCisJCQkJdG1wIHw9IFVEQ0NTX0JJX1NTVDsKKwkJCXRtcCAmPSB1ZGNjczsKKwkJCWlmIChsaWtlbHkgKHRtcCkpCisJCQkJKmVwLT5yZWdfdWRjY3MgPSB0bXA7CisJCQlpZiAocmVxICYmIGxpa2VseSAoKHVkY2NzICYgVURDQ1NfQklfVEZTKSAhPSAwKSkKKwkJCQljb21wbGV0ZWQgPSB3cml0ZV9maWZvKGVwLCByZXEpOworCisJCX0gZWxzZSB7CS8qIGlycSBmcm9tIFJQQyAob3IgZm9yIElTTywgUk9GKSAqLworCQkJaWYgKGxpa2VseShlcC0+Ym1BdHRyaWJ1dGVzID09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspKQorCQkJCXRtcCA9IFVEQ0NTX0JPX1NTVCB8IFVEQ0NTX0JPX0RNRTsKKwkJCWVsc2UKKwkJCQl0bXAgPSBVRENDU19JT19ST0YgfCBVRENDU19JT19ETUU7CisJCQl0bXAgJj0gdWRjY3M7CisJCQlpZiAobGlrZWx5KHRtcCkpCisJCQkJKmVwLT5yZWdfdWRjY3MgPSB0bXA7CisKKwkJCS8qIGZpZm9zIGNhbiBob2xkIHBhY2tldHMsIHJlYWR5IGZvciByZWFkaW5nLi4uICovCisJCQlpZiAobGlrZWx5KHJlcSkpIHsKKyNpZmRlZiBVU0VfT1VUX0RNQQorLy8gVE9ETyBkaWRuJ3QgeWV0IGRlYnVnIG91dC1kbWEuICB0aGlzIGFwcHJvYWNoIGFzc3VtZXMKKy8vIHRoZSB3b3JzdCBhYm91dCBzaG9ydCBwYWNrZXRzIGFuZCBSUEM7IGl0IG1pZ2h0IGJlIGJldHRlci4KKworCQkJCWlmIChsaWtlbHkoZXAtPmRtYSA+PSAwKSkgeworCQkJCQlpZiAoISh1ZGNjcyAmIFVEQ0NTX0JPX1JTUCkpIHsKKwkJCQkJCSplcC0+cmVnX3VkY2NzID0gVURDQ1NfQk9fUlBDOworCQkJCQkJZXAtPmRtYV9pcnFzKys7CisJCQkJCQlyZXR1cm47CisJCQkJCX0KKwkJCQl9CisjZW5kaWYKKwkJCQljb21wbGV0ZWQgPSByZWFkX2ZpZm8oZXAsIHJlcSk7CisJCQl9IGVsc2UKKwkJCQlwaW9faXJxX2Rpc2FibGUgKGVwLT5iRW5kcG9pbnRBZGRyZXNzKTsKKwkJfQorCQllcC0+cGlvX2lycXMrKzsKKwl9IHdoaWxlIChjb21wbGV0ZWQpOworfQorCisvKgorICoJcHhhMnh4X3VkY19pcnEgLSBpbnRlcnJ1cHQgaGFuZGxlcgorICoKKyAqIGF2b2lkIGRlbGF5cyBpbiBlcDAgcHJvY2Vzc2luZy4gdGhlIGNvbnRyb2wgaGFuZHNoYWtpbmcgaXNuJ3QgYWx3YXlzCisgKiB1bmRlciBzb2Z0d2FyZSBjb250cm9sIChweGEyNTBjMCBhbmQgdGhlIHB4YTI1NSBhcmUgYmV0dGVyKSwgYW5kIGRlbGF5cworICogY291bGQgY2F1c2UgdXNiIHByb3RvY29sIGVycm9ycy4KKyAqLworc3RhdGljIGlycXJldHVybl90CitweGEyeHhfdWRjX2lycShpbnQgaXJxLCB2b2lkICpfZGV2LCBzdHJ1Y3QgcHRfcmVncyAqcikKK3sKKwlzdHJ1Y3QgcHhhMnh4X3VkYwkqZGV2ID0gX2RldjsKKwlpbnQJCQloYW5kbGVkOworCisJZGV2LT5zdGF0cy5pcnFzKys7CisJSEVYX0RJU1BMQVkoZGV2LT5zdGF0cy5pcnFzKTsKKwlkbyB7CisJCXUzMgkJdWRjY3IgPSBVRENDUjsKKworCQloYW5kbGVkID0gMDsKKworCQkvKiBTVVNwZW5kIEludGVycnVwdCBSZXF1ZXN0ICovCisJCWlmICh1bmxpa2VseSh1ZGNjciAmIFVEQ0NSX1NVU0lSKSkgeworCQkJdWRjX2Fja19pbnRfVURDQ1IoVURDQ1JfU1VTSVIpOworCQkJaGFuZGxlZCA9IDE7CisJCQlEQkcoREJHX1ZFUkJPU0UsICJVU0Igc3VzcGVuZCVzXG4iLCBpc191c2JfY29ubmVjdGVkKCkKKwkJCQk/ICIiIDogIitkaXNjb25uZWN0Iik7CisKKwkJCWlmICghaXNfdXNiX2Nvbm5lY3RlZCgpKQorCQkJCXN0b3BfYWN0aXZpdHkoZGV2LCBkZXYtPmRyaXZlcik7CisJCQllbHNlIGlmIChkZXYtPmdhZGdldC5zcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTgorCQkJCQkmJiBkZXYtPmRyaXZlcgorCQkJCQkmJiBkZXYtPmRyaXZlci0+c3VzcGVuZCkKKwkJCQlkZXYtPmRyaXZlci0+c3VzcGVuZCgmZGV2LT5nYWRnZXQpOworCQkJZXAwX2lkbGUgKGRldik7CisJCX0KKworCQkvKiBSRVN1bWUgSW50ZXJydXB0IFJlcXVlc3QgKi8KKwkJaWYgKHVubGlrZWx5KHVkY2NyICYgVURDQ1JfUkVTSVIpKSB7CisJCQl1ZGNfYWNrX2ludF9VRENDUihVRENDUl9SRVNJUik7CisJCQloYW5kbGVkID0gMTsKKwkJCURCRyhEQkdfVkVSQk9TRSwgIlVTQiByZXN1bWVcbiIpOworCisJCQlpZiAoZGV2LT5nYWRnZXQuc3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04KKwkJCQkJJiYgZGV2LT5kcml2ZXIKKwkJCQkJJiYgZGV2LT5kcml2ZXItPnJlc3VtZQorCQkJCQkmJiBpc191c2JfY29ubmVjdGVkKCkpCisJCQkJZGV2LT5kcml2ZXItPnJlc3VtZSgmZGV2LT5nYWRnZXQpOworCQl9CisKKwkJLyogUmVTZVQgSW50ZXJydXB0IFJlcXVlc3QgLSBVU0IgcmVzZXQgKi8KKwkJaWYgKHVubGlrZWx5KHVkY2NyICYgVURDQ1JfUlNUSVIpKSB7CisJCQl1ZGNfYWNrX2ludF9VRENDUihVRENDUl9SU1RJUik7CisJCQloYW5kbGVkID0gMTsKKworCQkJaWYgKChVRENDUiAmIFVEQ0NSX1VEQSkgPT0gMCkgeworCQkJCURCRyhEQkdfVkVSQk9TRSwgIlVTQiByZXNldCBzdGFydFxuIik7CisKKwkJCQkvKiByZXNldCBkcml2ZXIgYW5kIGVuZHBvaW50cywKKwkJCQkgKiBpbiBjYXNlIHRoYXQncyBub3QgeWV0IGRvbmUKKwkJCQkgKi8KKwkJCQlzdG9wX2FjdGl2aXR5IChkZXYsIGRldi0+ZHJpdmVyKTsKKworCQkJfSBlbHNlIHsKKwkJCQlEQkcoREJHX1ZFUkJPU0UsICJVU0IgcmVzZXQgZW5kXG4iKTsKKwkJCQlkZXYtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworCQkJCUxFRF9DT05ORUNURURfT047CisJCQkJbWVtc2V0KCZkZXYtPnN0YXRzLCAwLCBzaXplb2YgZGV2LT5zdGF0cyk7CisJCQkJLyogZHJpdmVyIGFuZCBlbmRwb2ludHMgYXJlIHN0aWxsIHJlc2V0ICovCisJCQl9CisKKwkJfSBlbHNlIHsKKwkJCXUzMgl1c2lyMCA9IFVTSVIwICYgflVJQ1IwOworCQkJdTMyCXVzaXIxID0gVVNJUjEgJiB+VUlDUjE7CisJCQlpbnQJaTsKKworCQkJaWYgKHVubGlrZWx5ICghdXNpcjAgJiYgIXVzaXIxKSkKKwkJCQljb250aW51ZTsKKworCQkJREJHKERCR19WRVJZX05PSVNZLCAiaXJxICUwMnguJTAyeFxuIiwgdXNpcjEsIHVzaXIwKTsKKworCQkJLyogY29udHJvbCB0cmFmZmljICovCisJCQlpZiAodXNpcjAgJiBVU0lSMF9JUjApIHsKKwkJCQlkZXYtPmVwWzBdLnBpb19pcnFzKys7CisJCQkJaGFuZGxlX2VwMChkZXYpOworCQkJCWhhbmRsZWQgPSAxOworCQkJfQorCisJCQkvKiBlbmRwb2ludCBkYXRhIHRyYW5zZmVycyAqLworCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkJCXUzMgl0bXAgPSAxIDw8IGk7CisKKwkJCQlpZiAoaSAmJiAodXNpcjAgJiB0bXApKSB7CisJCQkJCWhhbmRsZV9lcCgmZGV2LT5lcFtpXSk7CisJCQkJCVVTSVIwIHw9IHRtcDsKKwkJCQkJaGFuZGxlZCA9IDE7CisJCQkJfQorCQkJCWlmICh1c2lyMSAmIHRtcCkgeworCQkJCQloYW5kbGVfZXAoJmRldi0+ZXBbaSs4XSk7CisJCQkJCVVTSVIxIHw9IHRtcDsKKwkJCQkJaGFuZGxlZCA9IDE7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogd2UgY291bGQgYWxzbyBhc2sgZm9yIDEgbXNlYyBTT0YgKFNJUikgaW50ZXJydXB0cyAqLworCisJfSB3aGlsZSAoaGFuZGxlZCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBub3BfcmVsZWFzZSAoc3RydWN0IGRldmljZSAqZGV2KQoreworCURNU0coIiVzICVzXG4iLCBfX0ZVTkNUSU9OX18sIGRldi0+YnVzX2lkKTsKK30KKworLyogdGhpcyB1c2VzIGxvYWQtdGltZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiAoaW5zdGVhZCBvZgorICogZG9pbmcgaXQgYXQgcnVuLXRpbWUpIHRvIHNhdmUgY29kZSwgZWxpbWluYXRlIGZhdWx0IHBhdGhzLCBhbmQKKyAqIGJlIG1vcmUgb2J2aW91c2x5IGNvcnJlY3QuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3VkYyBtZW1vcnkgPSB7CisJLmdhZGdldCA9IHsKKwkJLm9wcwkJPSAmcHhhMnh4X3VkY19vcHMsCisJCS5lcDAJCT0gJm1lbW9yeS5lcFswXS5lcCwKKwkJLm5hbWUJCT0gZHJpdmVyX25hbWUsCisJCS5kZXYgPSB7CisJCQkuYnVzX2lkCQk9ICJnYWRnZXQiLAorCQkJLnJlbGVhc2UJPSBub3BfcmVsZWFzZSwKKwkJfSwKKwl9LAorCisJLyogY29udHJvbCBlbmRwb2ludCAqLworCS5lcFswXSA9IHsKKwkJLmVwID0geworCQkJLm5hbWUJCT0gZXAwbmFtZSwKKwkJCS5vcHMJCT0gJnB4YTJ4eF9lcF9vcHMsCisJCQkubWF4cGFja2V0CT0gRVAwX0ZJRk9fU0laRSwKKwkJfSwKKwkJLmRldgkJPSAmbWVtb3J5LAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTMCwKKwkJLnJlZ191ZGRyCT0gJlVERFIwLAorCX0sCisKKwkvKiBmaXJzdCBncm91cCBvZiBlbmRwb2ludHMgKi8KKwkuZXBbMV0gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCQk9ICJlcDFpbi1idWxrIiwKKwkJCS5vcHMJCT0gJnB4YTJ4eF9lcF9vcHMsCisJCQkubWF4cGFja2V0CT0gQlVMS19GSUZPX1NJWkUsCisJCX0sCisJCS5kZXYJCT0gJm1lbW9yeSwKKwkJLmZpZm9fc2l6ZQk9IEJVTEtfRklGT19TSVpFLAorCQkuYkVuZHBvaW50QWRkcmVzcyA9IFVTQl9ESVJfSU4gfCAxLAorCQkuYm1BdHRyaWJ1dGVzCT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkJLnJlZ191ZGNjcwk9ICZVRENDUzEsCisJCS5yZWdfdWRkcgk9ICZVRERSMSwKKwkJZHJjbXIgKDI1KQorCX0sCisJLmVwWzJdID0geworCQkuZXAgPSB7CisJCQkubmFtZQkJPSAiZXAyb3V0LWJ1bGsiLAorCQkJLm9wcwkJPSAmcHhhMnh4X2VwX29wcywKKwkJCS5tYXhwYWNrZXQJPSBCVUxLX0ZJRk9fU0laRSwKKwkJfSwKKwkJLmRldgkJPSAmbWVtb3J5LAorCQkuZmlmb19zaXplCT0gQlVMS19GSUZPX1NJWkUsCisJCS5iRW5kcG9pbnRBZGRyZXNzID0gMiwKKwkJLmJtQXR0cmlidXRlcwk9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJCS5yZWdfdWRjY3MJPSAmVURDQ1MyLAorCQkucmVnX3ViY3IJPSAmVUJDUjIsCisJCS5yZWdfdWRkcgk9ICZVRERSMiwKKwkJZHJjbXIgKDI2KQorCX0sCisjaWZuZGVmIENPTkZJR19VU0JfUFhBMlhYX1NNQUxMCisJLmVwWzNdID0geworCQkuZXAgPSB7CisJCQkubmFtZQkJPSAiZXAzaW4taXNvIiwKKwkJCS5vcHMJCT0gJnB4YTJ4eF9lcF9vcHMsCisJCQkubWF4cGFja2V0CT0gSVNPX0ZJRk9fU0laRSwKKwkJfSwKKwkJLmRldgkJPSAmbWVtb3J5LAorCQkuZmlmb19zaXplCT0gSVNPX0ZJRk9fU0laRSwKKwkJLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOIHwgMywKKwkJLmJtQXR0cmlidXRlcwk9IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MsCisJCS5yZWdfdWRjY3MJPSAmVURDQ1MzLAorCQkucmVnX3VkZHIJPSAmVUREUjMsCisJCWRyY21yICgyNykKKwl9LAorCS5lcFs0XSA9IHsKKwkJLmVwID0geworCQkJLm5hbWUJCT0gImVwNG91dC1pc28iLAorCQkJLm9wcwkJPSAmcHhhMnh4X2VwX29wcywKKwkJCS5tYXhwYWNrZXQJPSBJU09fRklGT19TSVpFLAorCQl9LAorCQkuZGV2CQk9ICZtZW1vcnksCisJCS5maWZvX3NpemUJPSBJU09fRklGT19TSVpFLAorCQkuYkVuZHBvaW50QWRkcmVzcyA9IDQsCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DLAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTNCwKKwkJLnJlZ191YmNyCT0gJlVCQ1I0LAorCQkucmVnX3VkZHIJPSAmVUREUjQsCisJCWRyY21yICgyOCkKKwl9LAorCS5lcFs1XSA9IHsKKwkJLmVwID0geworCQkJLm5hbWUJCT0gImVwNWluLWludCIsCisJCQkub3BzCQk9ICZweGEyeHhfZXBfb3BzLAorCQkJLm1heHBhY2tldAk9IElOVF9GSUZPX1NJWkUsCisJCX0sCisJCS5kZXYJCT0gJm1lbW9yeSwKKwkJLmZpZm9fc2l6ZQk9IElOVF9GSUZPX1NJWkUsCisJCS5iRW5kcG9pbnRBZGRyZXNzID0gVVNCX0RJUl9JTiB8IDUsCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCisJCS5yZWdfdWRjY3MJPSAmVURDQ1M1LAorCQkucmVnX3VkZHIJPSAmVUREUjUsCisJfSwKKworCS8qIHNlY29uZCBncm91cCBvZiBlbmRwb2ludHMgKi8KKwkuZXBbNl0gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCQk9ICJlcDZpbi1idWxrIiwKKwkJCS5vcHMJCT0gJnB4YTJ4eF9lcF9vcHMsCisJCQkubWF4cGFja2V0CT0gQlVMS19GSUZPX1NJWkUsCisJCX0sCisJCS5kZXYJCT0gJm1lbW9yeSwKKwkJLmZpZm9fc2l6ZQk9IEJVTEtfRklGT19TSVpFLAorCQkuYkVuZHBvaW50QWRkcmVzcyA9IFVTQl9ESVJfSU4gfCA2LAorCQkuYm1BdHRyaWJ1dGVzCT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkJLnJlZ191ZGNjcwk9ICZVRENDUzYsCisJCS5yZWdfdWRkcgk9ICZVRERSNiwKKwkJZHJjbXIgKDMwKQorCX0sCisJLmVwWzddID0geworCQkuZXAgPSB7CisJCQkubmFtZQkJPSAiZXA3b3V0LWJ1bGsiLAorCQkJLm9wcwkJPSAmcHhhMnh4X2VwX29wcywKKwkJCS5tYXhwYWNrZXQJPSBCVUxLX0ZJRk9fU0laRSwKKwkJfSwKKwkJLmRldgkJPSAmbWVtb3J5LAorCQkuZmlmb19zaXplCT0gQlVMS19GSUZPX1NJWkUsCisJCS5iRW5kcG9pbnRBZGRyZXNzID0gNywKKwkJLmJtQXR0cmlidXRlcwk9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJCS5yZWdfdWRjY3MJPSAmVURDQ1M3LAorCQkucmVnX3ViY3IJPSAmVUJDUjcsCisJCS5yZWdfdWRkcgk9ICZVRERSNywKKwkJZHJjbXIgKDMxKQorCX0sCisJLmVwWzhdID0geworCQkuZXAgPSB7CisJCQkubmFtZQkJPSAiZXA4aW4taXNvIiwKKwkJCS5vcHMJCT0gJnB4YTJ4eF9lcF9vcHMsCisJCQkubWF4cGFja2V0CT0gSVNPX0ZJRk9fU0laRSwKKwkJfSwKKwkJLmRldgkJPSAmbWVtb3J5LAorCQkuZmlmb19zaXplCT0gSVNPX0ZJRk9fU0laRSwKKwkJLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOIHwgOCwKKwkJLmJtQXR0cmlidXRlcwk9IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MsCisJCS5yZWdfdWRjY3MJPSAmVURDQ1M4LAorCQkucmVnX3VkZHIJPSAmVUREUjgsCisJCWRyY21yICgzMikKKwl9LAorCS5lcFs5XSA9IHsKKwkJLmVwID0geworCQkJLm5hbWUJCT0gImVwOW91dC1pc28iLAorCQkJLm9wcwkJPSAmcHhhMnh4X2VwX29wcywKKwkJCS5tYXhwYWNrZXQJPSBJU09fRklGT19TSVpFLAorCQl9LAorCQkuZGV2CQk9ICZtZW1vcnksCisJCS5maWZvX3NpemUJPSBJU09fRklGT19TSVpFLAorCQkuYkVuZHBvaW50QWRkcmVzcyA9IDksCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DLAorCQkucmVnX3VkY2NzCT0gJlVEQ0NTOSwKKwkJLnJlZ191YmNyCT0gJlVCQ1I5LAorCQkucmVnX3VkZHIJPSAmVUREUjksCisJCWRyY21yICgzMykKKwl9LAorCS5lcFsxMF0gPSB7CisJCS5lcCA9IHsKKwkJCS5uYW1lCQk9ICJlcDEwaW4taW50IiwKKwkJCS5vcHMJCT0gJnB4YTJ4eF9lcF9vcHMsCisJCQkubWF4cGFja2V0CT0gSU5UX0ZJRk9fU0laRSwKKwkJfSwKKwkJLmRldgkJPSAmbWVtb3J5LAorCQkuZmlmb19zaXplCT0gSU5UX0ZJRk9fU0laRSwKKwkJLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOIHwgMTAsCisJCS5ibUF0dHJpYnV0ZXMJPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCisJCS5yZWdfdWRjY3MJPSAmVURDQ1MxMCwKKwkJLnJlZ191ZGRyCT0gJlVERFIxMCwKKwl9LAorCisJLyogdGhpcmQgZ3JvdXAgb2YgZW5kcG9pbnRzICovCisJLmVwWzExXSA9IHsKKwkJLmVwID0geworCQkJLm5hbWUJCT0gImVwMTFpbi1idWxrIiwKKwkJCS5vcHMJCT0gJnB4YTJ4eF9lcF9vcHMsCisJCQkubWF4cGFja2V0CT0gQlVMS19GSUZPX1NJWkUsCisJCX0sCisJCS5kZXYJCT0gJm1lbW9yeSwKKwkJLmZpZm9fc2l6ZQk9IEJVTEtfRklGT19TSVpFLAorCQkuYkVuZHBvaW50QWRkcmVzcyA9IFVTQl9ESVJfSU4gfCAxMSwKKwkJLmJtQXR0cmlidXRlcwk9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJCS5yZWdfdWRjY3MJPSAmVURDQ1MxMSwKKwkJLnJlZ191ZGRyCT0gJlVERFIxMSwKKwkJZHJjbXIgKDM1KQorCX0sCisJLmVwWzEyXSA9IHsKKwkJLmVwID0geworCQkJLm5hbWUJCT0gImVwMTJvdXQtYnVsayIsCisJCQkub3BzCQk9ICZweGEyeHhfZXBfb3BzLAorCQkJLm1heHBhY2tldAk9IEJVTEtfRklGT19TSVpFLAorCQl9LAorCQkuZGV2CQk9ICZtZW1vcnksCisJCS5maWZvX3NpemUJPSBCVUxLX0ZJRk9fU0laRSwKKwkJLmJFbmRwb2ludEFkZHJlc3MgPSAxMiwKKwkJLmJtQXR0cmlidXRlcwk9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJCS5yZWdfdWRjY3MJPSAmVURDQ1MxMiwKKwkJLnJlZ191YmNyCT0gJlVCQ1IxMiwKKwkJLnJlZ191ZGRyCT0gJlVERFIxMiwKKwkJZHJjbXIgKDM2KQorCX0sCisJLmVwWzEzXSA9IHsKKwkJLmVwID0geworCQkJLm5hbWUJCT0gImVwMTNpbi1pc28iLAorCQkJLm9wcwkJPSAmcHhhMnh4X2VwX29wcywKKwkJCS5tYXhwYWNrZXQJPSBJU09fRklGT19TSVpFLAorCQl9LAorCQkuZGV2CQk9ICZtZW1vcnksCisJCS5maWZvX3NpemUJPSBJU09fRklGT19TSVpFLAorCQkuYkVuZHBvaW50QWRkcmVzcyA9IFVTQl9ESVJfSU4gfCAxMywKKwkJLmJtQXR0cmlidXRlcwk9IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MsCisJCS5yZWdfdWRjY3MJPSAmVURDQ1MxMywKKwkJLnJlZ191ZGRyCT0gJlVERFIxMywKKwkJZHJjbXIgKDM3KQorCX0sCisJLmVwWzE0XSA9IHsKKwkJLmVwID0geworCQkJLm5hbWUJCT0gImVwMTRvdXQtaXNvIiwKKwkJCS5vcHMJCT0gJnB4YTJ4eF9lcF9vcHMsCisJCQkubWF4cGFja2V0CT0gSVNPX0ZJRk9fU0laRSwKKwkJfSwKKwkJLmRldgkJPSAmbWVtb3J5LAorCQkuZmlmb19zaXplCT0gSVNPX0ZJRk9fU0laRSwKKwkJLmJFbmRwb2ludEFkZHJlc3MgPSAxNCwKKwkJLmJtQXR0cmlidXRlcwk9IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MsCisJCS5yZWdfdWRjY3MJPSAmVURDQ1MxNCwKKwkJLnJlZ191YmNyCT0gJlVCQ1IxNCwKKwkJLnJlZ191ZGRyCT0gJlVERFIxNCwKKwkJZHJjbXIgKDM4KQorCX0sCisJLmVwWzE1XSA9IHsKKwkJLmVwID0geworCQkJLm5hbWUJCT0gImVwMTVpbi1pbnQiLAorCQkJLm9wcwkJPSAmcHhhMnh4X2VwX29wcywKKwkJCS5tYXhwYWNrZXQJPSBJTlRfRklGT19TSVpFLAorCQl9LAorCQkuZGV2CQk9ICZtZW1vcnksCisJCS5maWZvX3NpemUJPSBJTlRfRklGT19TSVpFLAorCQkuYkVuZHBvaW50QWRkcmVzcyA9IFVTQl9ESVJfSU4gfCAxNSwKKwkJLmJtQXR0cmlidXRlcwk9IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKKwkJLnJlZ191ZGNjcwk9ICZVRENDUzE1LAorCQkucmVnX3VkZHIJPSAmVUREUjE1LAorCX0sCisjZW5kaWYgLyogIUNPTkZJR19VU0JfUFhBMlhYX1NNQUxMICovCit9OworCisjZGVmaW5lIENQMTVSMF9WRU5ET1JfTUFTSwkweGZmZmZlMDAwCisKKyNpZglkZWZpbmVkKENPTkZJR19BUkNIX1BYQSkKKyNkZWZpbmUgQ1AxNVIwX1hTQ0FMRV9WQUxVRQkweDY5MDUyMDAwCS8qIGludGVsL2FybS94c2NhbGUgKi8KKworI2VsaWYJZGVmaW5lZChDT05GSUdfQVJDSF9JWFA0WFgpCisjZGVmaW5lIENQMTVSMF9YU0NBTEVfVkFMVUUJMHg2OTA1NDAwMAkvKiBpbnRlbC9hcm0vaXhwNHh4ICovCisKKyNlbmRpZgorCisjZGVmaW5lIENQMTVSMF9QUk9EX01BU0sJMHgwMDAwMDNmMAorI2RlZmluZSBQWEEyNXgJCQkweDAwMDAwMTAwCS8qIGFuZCBQWEEyNnggKi8KKyNkZWZpbmUgUFhBMjEwCQkJMHgwMDAwMDEyMAorCisjZGVmaW5lIENQMTVSMF9SRVZfTUFTSwkJMHgwMDAwMDAwZgorCisjZGVmaW5lIENQMTVSMF9QUk9EUkVWX01BU0sJKENQMTVSMF9QUk9EX01BU0sgfCBDUDE1UjBfUkVWX01BU0spCisKKyNkZWZpbmUgUFhBMjU1X0EwCQkweDAwMDAwMTA2CS8qIG9yIFBYQTI2MF9CMSAqLworI2RlZmluZSBQWEEyNTBfQzAJCTB4MDAwMDAxMDUJLyogb3IgUFhBMjZ4X0IwICovCisjZGVmaW5lIFBYQTI1MF9CMgkJMHgwMDAwMDEwNAorI2RlZmluZSBQWEEyNTBfQjEJCTB4MDAwMDAxMDMJLyogb3IgUFhBMjYwX0EwICovCisjZGVmaW5lIFBYQTI1MF9CMAkJMHgwMDAwMDEwMgorI2RlZmluZSBQWEEyNTBfQTEJCTB4MDAwMDAxMDEKKyNkZWZpbmUgUFhBMjUwX0EwCQkweDAwMDAwMTAwCisKKyNkZWZpbmUgUFhBMjEwX0MwCQkweDAwMDAwMTI1CisjZGVmaW5lIFBYQTIxMF9CMgkJMHgwMDAwMDEyNAorI2RlZmluZSBQWEEyMTBfQjEJCTB4MDAwMDAxMjMKKyNkZWZpbmUgUFhBMjEwX0IwCQkweDAwMDAwMTIyCisjZGVmaW5lIElYUDQyNV9BMAkJMHgwMDAwMDFjMQorCisvKgorICogCXByb2JlIC0gYmluZHMgdG8gdGhlIHBsYXRmb3JtIGRldmljZQorICovCitzdGF0aWMgaW50IF9faW5pdCBweGEyeHhfdWRjX3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCit7CisJc3RydWN0IHB4YTJ4eF91ZGMgKmRldiA9ICZtZW1vcnk7CisJaW50IHJldHZhbCwgb3V0X2RtYSA9IDE7CisJdTMyIGNoaXByZXY7CisKKwkvKiBpbnNpc3Qgb24gSW50ZWwvQVJNL1hTY2FsZSAqLworCWFzbSgibXJjJT8gcDE1LCAwLCAlMCwgYzAsIGMwIiA6ICI9ciIgKGNoaXByZXYpKTsKKwlpZiAoKGNoaXByZXYgJiBDUDE1UjBfVkVORE9SX01BU0spICE9IENQMTVSMF9YU0NBTEVfVkFMVUUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogbm90IFhTY2FsZSFcbiIsIGRyaXZlcl9uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogdHJpZ2dlciBjaGlwcmV2LXNwZWNpZmljIGxvZ2ljICovCisJc3dpdGNoIChjaGlwcmV2ICYgQ1AxNVIwX1BST0RSRVZfTUFTSykgeworI2lmCWRlZmluZWQoQ09ORklHX0FSQ0hfUFhBKQorCWNhc2UgUFhBMjU1X0EwOgorCQlkZXYtPmhhc19jZnIgPSAxOworCQlicmVhazsKKwljYXNlIFBYQTI1MF9BMDoKKwljYXNlIFBYQTI1MF9BMToKKwkJLyogQTAvQTEgIm5vdCByZWxlYXNlZCI7IGVwIDEzLCAxNSB1bnVzYWJsZSAqLworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFBYQTI1MF9CMjogY2FzZSBQWEEyMTBfQjI6CisJY2FzZSBQWEEyNTBfQjE6IGNhc2UgUFhBMjEwX0IxOgorCWNhc2UgUFhBMjUwX0IwOiBjYXNlIFBYQTIxMF9CMDoKKwkJb3V0X2RtYSA9IDA7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgUFhBMjUwX0MwOiBjYXNlIFBYQTIxMF9DMDoKKwkJYnJlYWs7CisjZWxpZglkZWZpbmVkKENPTkZJR19BUkNIX0lYUDRYWCkKKwljYXNlIElYUDQyNV9BMDoKKwkJb3V0X2RtYSA9IDA7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJb3V0X2RtYSA9IDA7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVucmVjb2duaXplZCBwcm9jZXNzb3I6ICUwOHhcbiIsCisJCQlkcml2ZXJfbmFtZSwgY2hpcHJldik7CisJCS8qIGlvcDN4eCwgaXhwNHh4LCAuLi4gKi8KKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcHJfZGVidWcoIiVzOiBJUlEgJWQlcyVzJXNcbiIsIGRyaXZlcl9uYW1lLCBJUlFfVVNCLAorCQlkZXYtPmhhc19jZnIgPyAiIiA6ICIgKCFjZnIpIiwKKwkJb3V0X2RtYSA/ICIiIDogIiAoYnJva2VuIGRtYS1vdXQpIiwKKwkJU0laRV9TVFIgRE1BU1RSCisJCSk7CisKKyNpZmRlZglVU0VfRE1BCisjaWZuZGVmCVVTRV9PVVRfRE1BCisJb3V0X2RtYSA9IDA7CisjZW5kaWYKKwkvKiBweGEgMjUwIGVycmF0dW0gMTMwIHByZXZlbnRzIHVzaW5nIE9VVCBkbWEgKGZpeGVkIEMwKSAqLworCWlmICghb3V0X2RtYSkgeworCQlETVNHKCJkaXNhYmxlZCBPVVQgZG1hXG4iKTsKKwkJZGV2LT5lcFsgMl0ucmVnX2RyY21yID0gZGV2LT5lcFsgNF0ucmVnX2RyY21yID0gMDsKKwkJZGV2LT5lcFsgN10ucmVnX2RyY21yID0gZGV2LT5lcFsgOV0ucmVnX2RyY21yID0gMDsKKwkJZGV2LT5lcFsxMl0ucmVnX2RyY21yID0gZGV2LT5lcFsxNF0ucmVnX2RyY21yID0gMDsKKwl9CisjZW5kaWYKKworCS8qIG90aGVyIG5vbi1zdGF0aWMgcGFydHMgb2YgaW5pdCAqLworCWRldi0+ZGV2ID0gX2RldjsKKwlkZXYtPm1hY2ggPSBfZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJaW5pdF90aW1lcigmZGV2LT50aW1lcik7CisJZGV2LT50aW1lci5mdW5jdGlvbiA9IHVkY193YXRjaGRvZzsKKwlkZXYtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgZGV2OworCisJZGV2aWNlX2luaXRpYWxpemUoJmRldi0+Z2FkZ2V0LmRldik7CisJZGV2LT5nYWRnZXQuZGV2LnBhcmVudCA9IF9kZXY7CisJZGV2LT5nYWRnZXQuZGV2LmRtYV9tYXNrID0gX2Rldi0+ZG1hX21hc2s7CisKKwl0aGVfY29udHJvbGxlciA9IGRldjsKKwlkZXZfc2V0X2RydmRhdGEoX2RldiwgZGV2KTsKKworCXVkY19kaXNhYmxlKGRldik7CisJdWRjX3JlaW5pdChkZXYpOworCisJZGV2LT52YnVzID0gaXNfdXNiX2Nvbm5lY3RlZCgpOworCisJLyogaXJxIHNldHVwIGFmdGVyIG9sZCBoYXJkd2FyZSBzdGF0ZSBpcyBjbGVhbmVkIHVwICovCisJcmV0dmFsID0gcmVxdWVzdF9pcnEoSVJRX1VTQiwgcHhhMnh4X3VkY19pcnEsCisJCQlTQV9JTlRFUlJVUFQsIGRyaXZlcl9uYW1lLCBkZXYpOworCWlmIChyZXR2YWwgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBnZXQgaXJxICVpLCBlcnIgJWRcbiIsCisJCQlkcml2ZXJfbmFtZSwgSVJRX1VTQiwgcmV0dmFsKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJZGV2LT5nb3RfaXJxID0gMTsKKworI2lmZGVmIENPTkZJR19BUkNIX0xVQkJPQ0sKKwlpZiAobWFjaGluZV9pc19sdWJib2NrKCkpIHsKKwkJcmV0dmFsID0gcmVxdWVzdF9pcnEoTFVCQk9DS19VU0JfRElTQ19JUlEsCisJCQkJbHViYm9ja192YnVzX2lycSwKKwkJCQlTQV9JTlRFUlJVUFQgfCBTQV9TQU1QTEVfUkFORE9NLAorCQkJCWRyaXZlcl9uYW1lLCBkZXYpOworCQlpZiAocmV0dmFsICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGdldCBpcnEgJWksIGVyciAlZFxuIiwKKwkJCQlkcml2ZXJfbmFtZSwgTFVCQk9DS19VU0JfRElTQ19JUlEsIHJldHZhbCk7CitsdWJib2NrX2ZhaWwwOgorCQkJZnJlZV9pcnEoSVJRX1VTQiwgZGV2KTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJcmV0dmFsID0gcmVxdWVzdF9pcnEoTFVCQk9DS19VU0JfSVJRLAorCQkJCWx1YmJvY2tfdmJ1c19pcnEsCisJCQkJU0FfSU5URVJSVVBUIHwgU0FfU0FNUExFX1JBTkRPTSwKKwkJCQlkcml2ZXJfbmFtZSwgZGV2KTsKKwkJaWYgKHJldHZhbCAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBnZXQgaXJxICVpLCBlcnIgJWRcbiIsCisJCQkJZHJpdmVyX25hbWUsIExVQkJPQ0tfVVNCX0lSUSwgcmV0dmFsKTsKKwkJCWZyZWVfaXJxKExVQkJPQ0tfVVNCX0RJU0NfSVJRLCBkZXYpOworCQkJZ290byBsdWJib2NrX2ZhaWwwOworCQl9CisjaWZkZWYgREVCVUcKKwkJLyogd2l0aCBVLUJvb3QgKGJ1dCBub3QgQkxPQiksIGhleCBpcyBvZmYgYnkgZGVmYXVsdCAqLworCQlIRVhfRElTUExBWShkZXYtPnN0YXRzLmlycXMpOworCQlMVUJfRElTQ19CTE5LX0xFRCAmPSAweGZmOworI2VuZGlmCisJfQorI2VuZGlmCisJY3JlYXRlX3Byb2NfZmlsZXMoKTsKKworCXJldHVybiAwOworfQorc3RhdGljIGludCBfX2V4aXQgcHhhMnh4X3VkY19yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3sKKwlzdHJ1Y3QgcHhhMnh4X3VkYyAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCisJdWRjX2Rpc2FibGUoZGV2KTsKKwlyZW1vdmVfcHJvY19maWxlcygpOworCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoZGV2LT5kcml2ZXIpOworCisJaWYgKGRldi0+Z290X2lycSkgeworCQlmcmVlX2lycShJUlFfVVNCLCBkZXYpOworCQlkZXYtPmdvdF9pcnEgPSAwOworCX0KKwlpZiAobWFjaGluZV9pc19sdWJib2NrKCkpIHsKKwkJZnJlZV9pcnEoTFVCQk9DS19VU0JfRElTQ19JUlEsIGRldik7CisJCWZyZWVfaXJxKExVQkJPQ0tfVVNCX0lSUSwgZGV2KTsKKwl9CisJZGV2X3NldF9kcnZkYXRhKF9kZXYsIE5VTEwpOworCXRoZV9jb250cm9sbGVyID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmCUNPTkZJR19QTQorCisvKiBVU0Igc3VzcGVuZCAoY29udHJvbGxlZCBieSB0aGUgaG9zdCkgYW5kIHN5c3RlbSBzdXNwZW5kIChjb250cm9sbGVkCisgKiBieSB0aGUgUFhBKSBkb24ndCBuZWNlc3NhcmlseSB3b3JrIHdlbGwgdG9nZXRoZXIuICBJZiBVU0IgaXMgYWN0aXZlLAorICogdGhlIDQ4IE1IeiBjbG9jayBpcyByZXF1aXJlZDsgc28gdGhlIHN5c3RlbSBjYW4ndCBlbnRlciAzMyBNSHogaWRsZQorICogbW9kZSwgb3IgYW55IGRlZXBlciBQTSBzYXZpbmcgc3RhdGUuCisgKgorICogRm9yIG5vdywgd2UgcHVudCBhbmQgZm9yY2libHkgZGlzY29ubmVjdCBmcm9tIHRoZSBVU0IgaG9zdCB3aGVuIFBYQQorICogZW50ZXJzIGFueSBzdXNwZW5kIHN0YXRlLiAgV2hpbGUgd2UncmUgZGlzY29ubmVjdGVkLCB3ZSBhbHdheXMgZGlzYWJsZQorICogdGhlIDQ4TUh6IFVTQiBjbG9jayAuLi4gYWxsb3dpbmcgUFhBIHNsZWVwIGFuZC9vciAzMyBNSHogaWRsZSBzdGF0ZXMuIAorICogQm9hcmRzIHdpdGhvdXQgc29mdHdhcmUgcHVsbHVwIGNvbnRyb2wgc2hvdWxkbid0IHVzZSB0aG9zZSBzdGF0ZXMuCisgKiBWQlVTIElSUXMgc2hvdWxkIHByb2JhYmx5IGJlIGlnbm9yZWQgc28gdGhhdCB0aGUgUFhBIGRldmljZSBqdXN0IGFjdHMKKyAqICJkZWFkIiB0byBVU0IgaG9zdHMgdW50aWwgc3lzdGVtIHJlc3VtZS4KKyAqLworc3RhdGljIGludCBweGEyeHhfdWRjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgc3RhdGUsIHUzMiBsZXZlbCkKK3sKKwlzdHJ1Y3QgcHhhMnh4X3VkYwkqdWRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAobGV2ZWwgPT0gU1VTUEVORF9QT1dFUl9ET1dOKSB7CisJCWlmICghdWRjLT5tYWNoLT51ZGNfY29tbWFuZCkKKwkJCVdBUk4oIlVTQiBob3N0IHdvbid0IGRldGVjdCBkaXNjb25uZWN0IVxuIik7CisJCXB1bGx1cCh1ZGMsIDApOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweGEyeHhfdWRjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKK3sKKwlzdHJ1Y3QgcHhhMnh4X3VkYwkqdWRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAobGV2ZWwgPT0gUkVTVU1FX1BPV0VSX09OKQorCQlwdWxsdXAodWRjLCAxKTsKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKyNkZWZpbmUJcHhhMnh4X3VkY19zdXNwZW5kCU5VTEwKKyNkZWZpbmUJcHhhMnh4X3VkY19yZXN1bWUJTlVMTAorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB1ZGNfZHJpdmVyID0geworCS5uYW1lCQk9ICJweGEyeHgtdWRjIiwKKwkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkucHJvYmUJCT0gcHhhMnh4X3VkY19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKHB4YTJ4eF91ZGNfcmVtb3ZlKSwKKwkuc3VzcGVuZAk9IHB4YTJ4eF91ZGNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHB4YTJ4eF91ZGNfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdWRjX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICIlczogdmVyc2lvbiAlc1xuIiwgZHJpdmVyX25hbWUsIERSSVZFUl9WRVJTSU9OKTsKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHVkY19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHVkY19leGl0KHZvaWQpCit7CisJZHJpdmVyX3VucmVnaXN0ZXIoJnVkY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQodWRjX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0FVVEhPUigiRnJhbmsgQmVja2VyLCBSb2JlcnQgU2Nod2ViZWwsIERhdmlkIEJyb3duZWxsIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmM2E3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5oCkBAIC0wLDAgKzEsMzIwIEBACisvKgorICogbGludXgvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuaAorICogSW50ZWwgUFhBMnh4IG9uLWNoaXAgZnVsbCBzcGVlZCBVU0IgZGV2aWNlIGNvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPiwgUGVuZ3V0cm9uaXgKKyAqIENvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBCcm93bmVsbAorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1VTQl9HQURHRVRfUFhBMlhYX0gKKyNkZWZpbmUgX19MSU5VWF9VU0JfR0FER0VUX1BYQTJYWF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBweGEyeHggaGFzIHRoaXMgKG1vdmUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmgpICovCisjZGVmaW5lIFVGTlJIX1NJUgkoMSA8PCA3KQkvKiBTT0YgaW50ZXJydXB0IHJlcXVlc3QgKi8KKyNkZWZpbmUgVUZOUkhfU0lNCSgxIDw8IDYpCS8qIFNPRiBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBVRk5SSF9JUEUxNAkoMSA8PCA1KQkvKiBJU08gcGFja2V0IGVycm9yLCBlcDE0ICovCisjZGVmaW5lIFVGTlJIX0lQRTkJKDEgPDwgNCkJLyogSVNPIHBhY2tldCBlcnJvciwgZXA5ICovCisjZGVmaW5lIFVGTlJIX0lQRTQJKDEgPDwgMykJLyogSVNPIHBhY2tldCBlcnJvciwgZXA0ICovCisKKy8qIHB4YTI1NSBoYXMgdGhpcyAobW92ZSB0byBpbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhLXJlZ3MuaCkgKi8KKyNkZWZpbmUJVURDQ0ZSCQlVRENfUkVTMgkvKiBVREMgQ29udHJvbCBGdW5jdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBVRENDRlJfQVJFTgkoMSA8PCA3KQkvKiBBQ0sgcmVzcG9uc2UgZW5hYmxlIChub3cpICovCisjZGVmaW5lIFVEQ0NGUl9BQ00JKDEgPDwgMikJLyogQUNLIGNvbnRyb2wgbW9kZSAod2FpdCBmb3IgQVJFTikgKi8KKworLyogbGF0ZXN0IHB4YTI1NSBlcnJhdGEgZGVmaW5lIG5ldyAibXVzdCBiZSBvbmUiIGJpdHMgaW4gVURDQ0ZSICovCisjZGVmaW5lCVVEQ0NGUl9NQjEJKDB4ZmYgJiB+KFVEQ0NGUl9BUkVOfFVEQ0NGUl9BQ00pKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdHJ1Y3QgcHhhMnh4X3VkYzsKKworc3RydWN0IHB4YTJ4eF9lcCB7CisJc3RydWN0IHVzYl9lcAkJCQllcDsKKwlzdHJ1Y3QgcHhhMnh4X3VkYwkJCSpkZXY7CisKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmRlc2M7CisJc3RydWN0IGxpc3RfaGVhZAkJCXF1ZXVlOworCXVuc2lnbmVkIGxvbmcJCQkJcGlvX2lycXM7CisJdW5zaWduZWQgbG9uZwkJCQlkbWFfaXJxczsKKwlzaG9ydAkJCQkJZG1hOyAKKworCXVuc2lnbmVkIHNob3J0CQkJCWZpZm9fc2l6ZTsKKwl1OAkJCQkJYkVuZHBvaW50QWRkcmVzczsKKwl1OAkJCQkJYm1BdHRyaWJ1dGVzOworCisJdW5zaWduZWQJCQkJc3RvcHBlZCA6IDE7CisJdW5zaWduZWQJCQkJZG1hX2ZpeHVwIDogMTsKKwkJCQkJCQkgCisJLyogVURDQ1MgPSBVREMgQ29udHJvbC9TdGF0dXMgZm9yIHRoaXMgRVAKKwkgKiBVQkNSID0gVURDIEJ5dGUgQ291bnQgUmVtYWluaW5nIChjb250ZW50cyBvZiBPVVQgZmlmbykKKwkgKiBVRERSID0gVURDIEVuZHBvaW50IERhdGEgUmVnaXN0ZXIgKHRoZSBmaWZvKQorCSAqIERSQ00gPSBETUEgUmVxdWVzdCBDaGFubmVsIE1hcAorCSAqLworCXZvbGF0aWxlIHUzMgkJCQkqcmVnX3VkY2NzOworCXZvbGF0aWxlIHUzMgkJCQkqcmVnX3ViY3I7CisJdm9sYXRpbGUgdTMyCQkJCSpyZWdfdWRkcjsKKyNpZmRlZiBVU0VfRE1BCisJdm9sYXRpbGUgdTMyCQkJCSpyZWdfZHJjbXI7CisjZGVmaW5lCWRyY21yKG4pICAucmVnX2RyY21yID0gJiBEUkNNUiAjIyBuICwKKyNlbHNlCisjZGVmaW5lCWRyY21yKG4pICAKKyNlbmRpZgorfTsKKworc3RydWN0IHB4YTJ4eF9yZXF1ZXN0IHsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJCQlyZXE7CisJc3RydWN0IGxpc3RfaGVhZAkJCXF1ZXVlOworfTsKKworZW51bSBlcDBfc3RhdGUgeyAKKwlFUDBfSURMRSwKKwlFUDBfSU5fREFUQV9QSEFTRSwKKwlFUDBfT1VUX0RBVEFfUEhBU0UsCisJRVAwX0VORF9YRkVSLAorCUVQMF9TVEFMTCwKK307CisKKyNkZWZpbmUgRVAwX0ZJRk9fU0laRQkoKHVuc2lnbmVkKTE2KQorI2RlZmluZSBCVUxLX0ZJRk9fU0laRQkoKHVuc2lnbmVkKTY0KQorI2RlZmluZSBJU09fRklGT19TSVpFCSgodW5zaWduZWQpMjU2KQorI2RlZmluZSBJTlRfRklGT19TSVpFCSgodW5zaWduZWQpOCkKKworc3RydWN0IHVkY19zdGF0cyB7CisJc3RydWN0IGVwMHN0YXRzIHsKKwkJdW5zaWduZWQgbG9uZwkJb3BzOworCQl1bnNpZ25lZCBsb25nCQlieXRlczsKKwl9IHJlYWQsIHdyaXRlOworCXVuc2lnbmVkIGxvbmcJCQlpcnFzOworfTsKKworI2lmZGVmIENPTkZJR19VU0JfUFhBMlhYX1NNQUxMCisvKiB3aGVuIG1lbW9yeSdzIHRpZ2h0LCBTTUFMTCBjb25maWcgc2F2ZXMgY29kZStkYXRhLiAgKi8KKyN1bmRlZglVU0VfRE1BCisjZGVmaW5lCVBYQV9VRENfTlVNX0VORFBPSU5UUwkzCisjZW5kaWYKKworI2lmbmRlZglQWEFfVURDX05VTV9FTkRQT0lOVFMKKyNkZWZpbmUJUFhBX1VEQ19OVU1fRU5EUE9JTlRTCTE2CisjZW5kaWYKKworc3RydWN0IHB4YTJ4eF91ZGMgeworCXN0cnVjdCB1c2JfZ2FkZ2V0CQkJZ2FkZ2V0OworCXN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlcgkJKmRyaXZlcjsKKworCWVudW0gZXAwX3N0YXRlCQkJCWVwMHN0YXRlOworCXN0cnVjdCB1ZGNfc3RhdHMJCQlzdGF0czsKKwl1bnNpZ25lZAkJCQlnb3RfaXJxIDogMSwKKwkJCQkJCXZidXMgOiAxLAorCQkJCQkJcHVsbHVwIDogMSwKKwkJCQkJCWhhc19jZnIgOiAxLAorCQkJCQkJcmVxX3BlbmRpbmcgOiAxLAorCQkJCQkJcmVxX3N0ZCA6IDEsCisJCQkJCQlyZXFfY29uZmlnIDogMTsKKworI2RlZmluZSBzdGFydF93YXRjaGRvZyhkZXYpIG1vZF90aW1lcigmZGV2LT50aW1lciwgamlmZmllcyArIChIWi8yMDApKQorCXN0cnVjdCB0aW1lcl9saXN0CQkJdGltZXI7CisKKwlzdHJ1Y3QgZGV2aWNlCQkJCSpkZXY7CisJc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvCQkqbWFjaDsKKwl1NjQJCQkJCWRtYV9tYXNrOworCXN0cnVjdCBweGEyeHhfZXAJCQllcCBbUFhBX1VEQ19OVU1fRU5EUE9JTlRTXTsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9MVUJCT0NLCisjaW5jbHVkZSA8YXNtL2FyY2gvbHViYm9jay5oPgorLyogbHViYm9jayBjYW4gYWxzbyByZXBvcnQgdXNiIGNvbm5lY3QvZGlzY29ubmVjdCBpcnFzICovCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBIRVhfRElTUExBWShuKQlpZiAobWFjaGluZV9pc19sdWJib2NrKCkpIHsgTFVCX0hFWExFRCA9IChuKTsgfQorI2VuZGlmCisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBMRURzIGFyZSBvbmx5IGZvciBkZWJ1ZyAqLworI2lmbmRlZiBIRVhfRElTUExBWQorI2RlZmluZSBIRVhfRElTUExBWShuKQkJZG8ge30gd2hpbGUoMCkKKyNlbmRpZgorCisjaWZkZWYgREVCVUcKKyNpbmNsdWRlIDxhc20vbGVkcy5oPgorCisjZGVmaW5lIExFRF9DT05ORUNURURfT04JbGVkc19ldmVudChsZWRfZ3JlZW5fb24pCisjZGVmaW5lIExFRF9DT05ORUNURURfT0ZGCWRvIHsgXAorCQkJCQlsZWRzX2V2ZW50KGxlZF9ncmVlbl9vZmYpOyBcCisJCQkJCUhFWF9ESVNQTEFZKDApOyBcCisJCQkJfSB3aGlsZSgwKQorI2VuZGlmCisKKyNpZm5kZWYgTEVEX0NPTk5FQ1RFRF9PTgorI2RlZmluZSBMRURfQ09OTkVDVEVEX09OCWRvIHt9IHdoaWxlKDApCisjZGVmaW5lIExFRF9DT05ORUNURURfT0ZGCWRvIHt9IHdoaWxlKDApCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCBweGEyeHhfdWRjICp0aGVfY29udHJvbGxlcjsKKworLyogb25lIEdQSU8gc2hvdWxkIGJlIHVzZWQgdG8gZGV0ZWN0IGhvc3QgZGlzY29ubmVjdCAqLworc3RhdGljIGlubGluZSBpbnQgaXNfdXNiX2Nvbm5lY3RlZCh2b2lkKQoreworCWlmICghdGhlX2NvbnRyb2xsZXItPm1hY2gtPnVkY19pc19jb25uZWN0ZWQpCisJCXJldHVybiAxOworCXJldHVybiB0aGVfY29udHJvbGxlci0+bWFjaC0+dWRjX2lzX2Nvbm5lY3RlZCgpOworfQorCisvKiBvbmUgR1BJTyBzaG91bGQgZm9yY2UgdGhlIGhvc3QgdG8gc2VlIHRoaXMgZGV2aWNlIChvciBub3QpICovCitzdGF0aWMgaW5saW5lIHZvaWQgbWFrZV91c2JfZGlzYXBwZWFyKHZvaWQpCit7CisJaWYgKCF0aGVfY29udHJvbGxlci0+bWFjaC0+dWRjX2NvbW1hbmQpCisJCXJldHVybjsKKwl0aGVfY29udHJvbGxlci0+bWFjaC0+dWRjX2NvbW1hbmQoUFhBMlhYX1VEQ19DTURfRElTQ09OTkVDVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsZXRfdXNiX2FwcGVhcih2b2lkKQoreworCWlmICghdGhlX2NvbnRyb2xsZXItPm1hY2gtPnVkY19jb21tYW5kKQorCQlyZXR1cm47CisJdGhlX2NvbnRyb2xsZXItPm1hY2gtPnVkY19jb21tYW5kKFBYQTJYWF9VRENfQ01EX0NPTk5FQ1QpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogRGVidWdnaW5nIHN1cHBvcnQgdmFuaXNoZXMgaW4gbm9uLWRlYnVnIGJ1aWxkcy4gIERCR19OT1JNQUwgc2hvdWxkIGJlCisgKiBtb3N0bHkgc2lsZW50IGR1cmluZyBub3JtYWwgdXNlL3Rlc3RpbmcsIHdpdGggbm8gdGltaW5nIHNpZGUtZWZmZWN0cy4KKyAqLworI2RlZmluZSBEQkdfTk9STUFMCTEJLyogZXJyb3IgcGF0aHMsIGRldmljZSBzdGF0ZSB0cmFuc2l0aW9ucyAqLworI2RlZmluZSBEQkdfVkVSQk9TRQkyCS8qIGFkZCBzb21lIHN1Y2Nlc3MgcGF0aCB0cmFjZSBpbmZvICovCisjZGVmaW5lIERCR19OT0lTWQkzCS8qIC4uLiBldmVuIG1vcmU6IHJlcXVlc3QgbGV2ZWwgKi8KKyNkZWZpbmUgREJHX1ZFUllfTk9JU1kJNAkvKiAuLi4gZXZlbiBtb3JlOiBwYWNrZXQgbGV2ZWwgKi8KKworI2lmZGVmIERFQlVHCisKK3N0YXRpYyBjb25zdCBjaGFyICpzdGF0ZV9uYW1lW10gPSB7CisJIkVQMF9JRExFIiwKKwkiRVAwX0lOX0RBVEFfUEhBU0UiLCAiRVAwX09VVF9EQVRBX1BIQVNFIiwKKwkiRVAwX0VORF9YRkVSIiwgIkVQMF9TVEFMTCIKK307CisKKyNkZWZpbmUgRE1TRyhzdHVmZi4uLikgcHJpbnRrKEtFUk5fREVCVUcgInVkYzogIiBzdHVmZikKKworI2lmZGVmIFZFUkJPU0UKKyMgICAgZGVmaW5lIFVEQ19ERUJVRyBEQkdfVkVSQk9TRQorI2Vsc2UKKyMgICAgZGVmaW5lIFVEQ19ERUJVRyBEQkdfTk9STUFMCisjZW5kaWYKKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQorZHVtcF91ZGNjcihjb25zdCBjaGFyICpsYWJlbCkKK3sKKwl1MzIJdWRjY3IgPSBVRENDUjsKKwlETVNHKCIlcyAlMDJYID0lcyVzJXMlcyVzJXMlcyVzXG4iLAorCQlsYWJlbCwgdWRjY3IsCisJCSh1ZGNjciAmIFVEQ0NSX1JFTSkgPyAiIHJlbSIgOiAiIiwKKwkJKHVkY2NyICYgVURDQ1JfUlNUSVIpID8gIiByc3RpciIgOiAiIiwKKwkJKHVkY2NyICYgVURDQ1JfU1JNKSA/ICIgc3JtIiA6ICIiLAorCQkodWRjY3IgJiBVRENDUl9TVVNJUikgPyAiIHN1c2lyIiA6ICIiLAorCQkodWRjY3IgJiBVRENDUl9SRVNJUikgPyAiIHJlc2lyIiA6ICIiLAorCQkodWRjY3IgJiBVRENDUl9SU00pID8gIiByc20iIDogIiIsCisJCSh1ZGNjciAmIFVEQ0NSX1VEQSkgPyAiIHVkYSIgOiAiIiwKKwkJKHVkY2NyICYgVURDQ1JfVURFKSA/ICIgdWRlIiA6ICIiKTsKK30KKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQorZHVtcF91ZGNjczAoY29uc3QgY2hhciAqbGFiZWwpCit7CisJdTMyCQl1ZGNjczAgPSBVRENDUzA7CisKKwlETVNHKCIlcyAlcyAlMDJYID0lcyVzJXMlcyVzJXMlcyVzXG4iLAorCQlsYWJlbCwgc3RhdGVfbmFtZVt0aGVfY29udHJvbGxlci0+ZXAwc3RhdGVdLCB1ZGNjczAsCisJCSh1ZGNjczAgJiBVRENDUzBfU0EpID8gIiBzYSIgOiAiIiwKKwkJKHVkY2NzMCAmIFVEQ0NTMF9STkUpID8gIiBybmUiIDogIiIsCisJCSh1ZGNjczAgJiBVRENDUzBfRlNUKSA/ICIgZnN0IiA6ICIiLAorCQkodWRjY3MwICYgVURDQ1MwX1NTVCkgPyAiIHNzdCIgOiAiIiwKKwkJKHVkY2NzMCAmIFVEQ0NTMF9EUldGKSA/ICIgZHdyZiIgOiAiIiwKKwkJKHVkY2NzMCAmIFVEQ0NTMF9GVEYpID8gIiBmdGYiIDogIiIsCisJCSh1ZGNjczAgJiBVRENDUzBfSVBSKSA/ICIgaXByIiA6ICIiLAorCQkodWRjY3MwICYgVURDQ1MwX09QUikgPyAiIG9wciIgOiAiIik7Cit9CisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKK2R1bXBfc3RhdGUoc3RydWN0IHB4YTJ4eF91ZGMgKmRldikKK3sKKwl1MzIJCXRtcDsKKwl1bnNpZ25lZAlpOworCisJRE1TRygiJXMgJXMsIHVpY3IgJTAyWC4lMDJYLCB1c2lyICUwMlguJTAyeCwgdWZuciAlMDJYLiUwMlhcbiIsCisJCWlzX3VzYl9jb25uZWN0ZWQoKSA/ICJob3N0ICIgOiAiZGlzY29ubmVjdGVkIiwKKwkJc3RhdGVfbmFtZVtkZXYtPmVwMHN0YXRlXSwKKwkJVUlDUjEsIFVJQ1IwLCBVU0lSMSwgVVNJUjAsIFVGTlJILCBVRk5STCk7CisJZHVtcF91ZGNjcigidWRjY3IiKTsKKwlpZiAoZGV2LT5oYXNfY2ZyKSB7CisJCXRtcCA9IFVEQ0NGUjsKKwkJRE1TRygidWRjY2ZyICUwMlggPSVzJXNcbiIsIHRtcCwKKwkJCSh0bXAgJiBVRENDRlJfQVJFTikgPyAiIGFyZW4iIDogIiIsCisJCQkodG1wICYgVURDQ0ZSX0FDTSkgPyAiIGFjbSIgOiAiIik7CisJfQorCisJaWYgKCFkZXYtPmRyaXZlcikgeworCQlETVNHKCJubyBnYWRnZXQgZHJpdmVyIGJvdW5kXG4iKTsKKwkJcmV0dXJuOworCX0gZWxzZQorCQlETVNHKCJlcDAgZHJpdmVyICclcydcbiIsIGRldi0+ZHJpdmVyLT5kcml2ZXIubmFtZSk7CisKKwlpZiAoIWlzX3VzYl9jb25uZWN0ZWQoKSkKKwkJcmV0dXJuOworCisJZHVtcF91ZGNjczAgKCJ1ZGNjczAiKTsKKwlETVNHKCJlcDAgSU4gJWx1LyVsdSwgT1VUICVsdS8lbHVcbiIsCisJCWRldi0+c3RhdHMud3JpdGUuYnl0ZXMsIGRldi0+c3RhdHMud3JpdGUub3BzLAorCQlkZXYtPnN0YXRzLnJlYWQuYnl0ZXMsIGRldi0+c3RhdHMucmVhZC5vcHMpOworCisJZm9yIChpID0gMTsgaSA8IFBYQV9VRENfTlVNX0VORFBPSU5UUzsgaSsrKSB7CisJCWlmIChkZXYtPmVwIFtpXS5kZXNjID09IDApCisJCQljb250aW51ZTsKKwkJRE1TRyAoInVkY2NzJWQgPSAlMDJ4XG4iLCBpLCAqZGV2LT5lcC0+cmVnX3VkY2NzKTsKKwl9Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgRE1TRyhzdHVmZi4uLikJCWRve313aGlsZSgwKQorCisjZGVmaW5lCWR1bXBfdWRjY3IoeCkJZG97fXdoaWxlKDApCisjZGVmaW5lCWR1bXBfdWRjY3MwKHgpCWRve313aGlsZSgwKQorI2RlZmluZQlkdW1wX3N0YXRlKHgpCWRve313aGlsZSgwKQorCisjZGVmaW5lIFVEQ19ERUJVRyAoKHVuc2lnbmVkKTApCisKKyNlbmRpZgorCisjZGVmaW5lIERCRyhsdmwsIHN0dWZmLi4uKSBkb3tpZiAoKGx2bCkgPD0gVURDX0RFQlVHKSBETVNHKHN0dWZmKTt9d2hpbGUoMCkKKworI2RlZmluZSBXQVJOKHN0dWZmLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HICJ1ZGM6ICIgc3R1ZmYpCisjZGVmaW5lIElORk8oc3R1ZmYuLi4pIHByaW50ayhLRVJOX0lORk8gInVkYzogIiBzdHVmZikKKworCisjZW5kaWYgLyogX19MSU5VWF9VU0JfR0FER0VUX1BYQTJYWF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNTE5NzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYwpAQCAtMCwwICsxLDE0MjggQEAKKy8qIAorICogUk5ESVMgTVNHIHBhcnNlcgorICogCisgKiBWZXJzaW9uOiAgICAgJElkOiBybmRpcy5jLHYgMS4xOSAyMDA0LzAzLzI1IDIxOjMzOjQ2IHJvYmVydCBFeHAgJAorICogCisgKiBBdXRob3JzOglCZW5lZGlrdCBTcHJhbmdlciwgUGVuZ3V0cm9uaXgKKyAqIAkJUm9iZXJ0IFNjaHdlYmVsLCBQZW5ndXRyb25peAorICogCisgKiAgICAgICAgICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgICAgICAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgICAgICAgICAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gCisgKiAKKyAqCQlUaGlzIHNvZnR3YXJlIHdhcyBvcmlnaW5hbGx5IGRldmVsb3BlZCBpbiBjb25mb3JtYW5jZSB3aXRoCisgKgkJTWljcm9zb2Z0J3MgUmVtb3RlIE5ESVMgU3BlY2lmaWNhdGlvbiBMaWNlbnNlIEFncmVlbWVudC4KKyAqICAgICAgICAgICAgICAKKyAqIDAzLzEyLzIwMDQgS2FpLVV3ZSBCbG9lbSA8bGludXgtZGV2ZWxvcG1lbnRAYXVlcnN3YWxkLmRlPgorICoJCUZpeGVkIG1lc3NhZ2UgbGVuZ3RoIGJ1ZyBpbiBpbml0X3Jlc3BvbnNlCisgKiAKKyAqIDAzLzI1LzIwMDQgS2FpLVV3ZSBCbG9lbSA8bGludXgtZGV2ZWxvcG1lbnRAYXVlcnN3YWxkLmRlPgorICogCQlGaXhlZCBybmRpc19ybV9oZHIgbGVuZ3RoIGJ1Zy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgRGF2aWQgQnJvd25lbGwKKyAqCQl1cGRhdGVzIHRvIG1lcmdlIHdpdGggTGludXggMi42LCBiZXR0ZXIgbWF0Y2ggUk5ESVMgc3BlYworICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworCisjdW5kZWYJUk5ESVNfUE0KKyN1bmRlZglWRVJCT1NFCisKKyNpbmNsdWRlICJybmRpcy5oIgorCisKKy8qIFRoZSBkcml2ZXIgZm9yIHlvdXIgVVNCIGNoaXAgbmVlZHMgdG8gc3VwcG9ydCBlcDAgT1VUIHRvIHdvcmsgd2l0aAorICogUk5ESVMsIHBsdXMgYWxsIHRocmVlIENEQyBFdGhlcm5ldCBlbmRwb2ludHMgKGludGVycnVwdCBub3Qgb3B0aW9uYWwpLgorICoKKyAqIFdpbmRvd3MgaG9zdHMgbmVlZCBhbiBJTkYgZmlsZSBsaWtlIERvY3VtZW50YXRpb24vdXNiL2xpbnV4LmluZgorICogYW5kIHdpbGwgYmUgaGFwcGllciBpZiB5b3UgcHJvdmlkZSB0aGUgaG9zdF9hZGRyIG1vZHVsZSBwYXJhbWV0ZXIuCisgKi8KKworI2lmIDAKKyNkZWZpbmUgREVCVUcoc3RyLGFyZ3MuLi4pIGRvIHsgXAorCWlmIChybmRpc19kZWJ1ZykgXAorCQlwcmludGsoS0VSTl9ERUJVRyBzdHIgLCAjIyBhcmdzICk7IFwKKwl9IHdoaWxlICgwKQorc3RhdGljIGludCBybmRpc19kZWJ1ZyA9IDA7CisKK21vZHVsZV9wYXJhbSAocm5kaXNfZGVidWcsIGJvb2wsIDApOworTU9EVUxFX1BBUk1fREVTQyAocm5kaXNfZGVidWcsICJlbmFibGUgZGVidWdnaW5nIik7CisKKyNlbHNlCisKKyNkZWZpbmUgcm5kaXNfZGVidWcJCTAKKyNkZWZpbmUgREVCVUcoc3RyLGFyZ3MuLi4pCWRve313aGlsZSgwKQorI2VuZGlmCisKKyNkZWZpbmUgUk5ESVNfTUFYX0NPTkZJR1MJMQorCisKK3N0YXRpYyBybmRpc19wYXJhbXMgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW1JORElTX01BWF9DT05GSUdTXTsKKworLyogRHJpdmVyIFZlcnNpb24gKi8KK3N0YXRpYyBjb25zdCBfX2xlMzIgcm5kaXNfZHJpdmVyX3ZlcnNpb24gPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxKTsKKworLyogRnVuY3Rpb24gUHJvdG90eXBlcyAqLworc3RhdGljIGludCBybmRpc19pbml0X3Jlc3BvbnNlIChpbnQgY29uZmlnTnIsIHJuZGlzX2luaXRfbXNnX3R5cGUgKmJ1Zik7CitzdGF0aWMgaW50IHJuZGlzX3F1ZXJ5X3Jlc3BvbnNlIChpbnQgY29uZmlnTnIsIHJuZGlzX3F1ZXJ5X21zZ190eXBlICpidWYpOworc3RhdGljIGludCBybmRpc19zZXRfcmVzcG9uc2UgKGludCBjb25maWdOciwgcm5kaXNfc2V0X21zZ190eXBlICpidWYpOworc3RhdGljIGludCBybmRpc19yZXNldF9yZXNwb25zZSAoaW50IGNvbmZpZ05yLCBybmRpc19yZXNldF9tc2dfdHlwZSAqYnVmKTsKK3N0YXRpYyBpbnQgcm5kaXNfa2VlcGFsaXZlX3Jlc3BvbnNlIChpbnQgY29uZmlnTnIsIAorCQkJCSAgICAgcm5kaXNfa2VlcGFsaXZlX21zZ190eXBlICpidWYpOworCitzdGF0aWMgcm5kaXNfcmVzcF90ICpybmRpc19hZGRfcmVzcG9uc2UgKGludCBjb25maWdOciwgdTMyIGxlbmd0aCk7CisKKworLyogTkRJUyBGdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQgZ2VuX25kaXNfcXVlcnlfcmVzcCAoaW50IGNvbmZpZ05yLCB1MzIgT0lELCBybmRpc19yZXNwX3QgKnIpCit7CisJaW50IAkJCXJldHZhbCA9IC1FTk9UU1VQUDsKKwl1MzIgCQkJbGVuZ3RoID0gMDsKKwlfX2xlMzIJCQkqdG1wOworCWludAkJCWksIGNvdW50OworCXJuZGlzX3F1ZXJ5X2NtcGx0X3R5cGUJKnJlc3A7CisKKwlpZiAoIXIpIHJldHVybiAtRU5PTUVNOworCXJlc3AgPSAocm5kaXNfcXVlcnlfY21wbHRfdHlwZSAqKSByLT5idWY7CisKKwlpZiAoIXJlc3ApIHJldHVybiAtRU5PTUVNOworCQorCXN3aXRjaCAoT0lEKSB7CisKKwkvKiBnZW5lcmFsIG9pZHMgKHRhYmxlIDQtMSkgKi8KKworCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEX0dFTl9TVVBQT1JURURfTElTVDoKKwkJREVCVUcgKCIlczogT0lEX0dFTl9TVVBQT1JURURfTElTVFxuIiwgX19GVU5DVElPTl9fKTsKKwkJbGVuZ3RoID0gc2l6ZW9mIChvaWRfc3VwcG9ydGVkX2xpc3QpOworCQljb3VudCAgPSBsZW5ndGggLyBzaXplb2YgKHUzMik7CisJCXRtcCA9IChfX2xlMzIgKikgKCh1OCAqKXJlc3AgKyAyNCk7CisJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorCQkJdG1wW2ldID0gY3B1X3RvX2xlMzIgKG9pZF9zdXBwb3J0ZWRfbGlzdFtpXSk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCQkKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF9HRU5fSEFSRFdBUkVfU1RBVFVTOgorCQlERUJVRygiJXM6IE9JRF9HRU5fSEFSRFdBUkVfU1RBVFVTXG4iLCBfX0ZVTkNUSU9OX18pOworCQlsZW5ndGggPSA0OworCQkvKiBCb2d1cyBxdWVzdGlvbiEgCisJCSAqIEhhcmR3YXJlIG11c3QgYmUgcmVhZHkgdG8gcmVjZWl2ZSBoaWdoIGxldmVsIHByb3RvY29scy4KKwkJICogQlRXOiAKKwkJICogcmVkZGl0ZSBlcmdvIHF1YWUgc3VudCBDYWVzYXJpcyBDYWVzYXJpCisJCSAqIGV0IHF1YWUgc3VudCBEZWkgRGVvIQorCQkgKi8KKwkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKwkJCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfR0VOX01FRElBX1NVUFBPUlRFRDoKKwkJREVCVUcoIiVzOiBPSURfR0VOX01FRElBX1NVUFBPUlRFRFxuIiwgX19GVU5DVElPTl9fKTsKKwkJbGVuZ3RoID0gNDsKKwkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5tZWRpdW0pOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKwkJCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfR0VOX01FRElBX0lOX1VTRToKKwkJREVCVUcoIiVzOiBPSURfR0VOX01FRElBX0lOX1VTRVxuIiwgX19GVU5DVElPTl9fKTsKKwkJbGVuZ3RoID0gNDsKKwkJLyogb25lIG1lZGl1bSwgb25lIHRyYW5zcG9ydC4uLiAobWF5YmUgeW91IGRvIGl0IGJldHRlcikgKi8KKwkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5tZWRpdW0pOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKwkJCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfR0VOX01BWElNVU1fRlJBTUVfU0laRToKKwkJREVCVUcoIiVzOiBPSURfR0VOX01BWElNVU1fRlJBTUVfU0laRVxuIiwgX19GVU5DVElPTl9fKTsKKwkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KSB7CisJCQlsZW5ndGggPSA0OworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmRldi0+bXR1KTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF9HRU5fTElOS19TUEVFRDoKKwkJREVCVUcoIiVzOiBPSURfR0VOX0xJTktfU1BFRURcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IDQ7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLm1lZGlhX3N0YXRlCisJCQk9PSBORElTX01FRElBX1NUQVRFX0RJU0NPTk5FQ1RFRCkKKwkJICAgICooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJZWxzZQorCQkgICAgKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnNwZWVkKTsKKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CisKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF9HRU5fVFJBTlNNSVRfQkxPQ0tfU0laRToKKwkJREVCVUcoIiVzOiBPSURfR0VOX1RSQU5TTUlUX0JMT0NLX1NJWkVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmRldikgeworCQkJbGVuZ3RoID0gNDsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYtPm10dSk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF9HRU5fUkVDRUlWRV9CTE9DS19TSVpFOgorCQlERUJVRygiJXM6IE9JRF9HRU5fUkVDRUlWRV9CTE9DS19TSVpFXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpIHsKKwkJCWxlbmd0aCA9IDQ7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gY3B1X3RvX2xlMzIgKAorCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2LT5tdHUpOworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlicmVhazsKKwkJCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfR0VOX1ZFTkRPUl9JRDoKKwkJREVCVUcoIiVzOiBPSURfR0VOX1ZFTkRPUl9JRFxuIiwgX19GVU5DVElPTl9fKTsKKwkJbGVuZ3RoID0gNDsKKwkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0udmVuZG9ySUQpOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKwkJCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfR0VOX1ZFTkRPUl9ERVNDUklQVElPTjoKKwkJREVCVUcoIiVzOiBPSURfR0VOX1ZFTkRPUl9ERVNDUklQVElPTlxuIiwgX19GVU5DVElPTl9fKTsKKwkJbGVuZ3RoID0gc3RybGVuIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnZlbmRvckRlc2NyKTsKKwkJbWVtY3B5ICgodTggKikgcmVzcCArIDI0LCAKKwkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0udmVuZG9yRGVzY3IsIGxlbmd0aCk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBPSURfR0VOX1ZFTkRPUl9EUklWRVJfVkVSU0lPTjoKKwkJREVCVUcoIiVzOiBPSURfR0VOX1ZFTkRPUl9EUklWRVJfVkVSU0lPTlxuIiwgX19GVU5DVElPTl9fKTsKKwkJbGVuZ3RoID0gNDsKKwkJLyogQ3JlYXRlZCBhcyBMRSAqLworCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gcm5kaXNfZHJpdmVyX3ZlcnNpb247CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUjoKKwkJREVCVUcoIiVzOiBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUlxuIiwgX19GVU5DVElPTl9fKTsKKwkJbGVuZ3RoID0gNDsKKwkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXNbY29uZmlnTnJdLmZpbHRlcik7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfR0VOX01BWElNVU1fVE9UQUxfU0laRToKKwkJREVCVUcoIiVzOiBPSURfR0VOX01BWElNVU1fVE9UQUxfU0laRVxuIiwgX19GVU5DVElPTl9fKTsKKwkJbGVuZ3RoID0gNDsKKwkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoCisJCQkJCVJORElTX01BWF9UT1RBTF9TSVpFKTsKKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CisKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF9HRU5fTUVESUFfQ09OTkVDVF9TVEFUVVM6CisJCURFQlVHKCIlczogT0lEX0dFTl9NRURJQV9DT05ORUNUX1NUQVRVU1xuIiwgX19GVU5DVElPTl9fKTsKKwkJbGVuZ3RoID0gNDsKKwkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQorCQkJCQkJLm1lZGlhX3N0YXRlKTsKKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIE9JRF9HRU5fUEhZU0lDQUxfTUVESVVNOgorCQlERUJVRygiJXM6IE9JRF9HRU5fUEhZU0lDQUxfTUVESVVNXG4iLCBfX0ZVTkNUSU9OX18pOworCQlsZW5ndGggPSA0OworCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCisJLyogVGhlIFJORElTIHNwZWNpZmljYXRpb24gaXMgaW5jb21wbGV0ZS93cm9uZy4gICBTb21lIHZlcnNpb25zCisJICogb2YgTVMtV2luZG93cyBleHBlY3QgT0lEcyB0aGF0IGFyZW4ndCBzcGVjaWZpZWQgdGhlcmUuICBPdGhlcgorCSAqIHZlcnNpb25zIGVtaXQgdW5kZWZpbmVkIFJORElTIG1lc3NhZ2VzLiBET0NVTUVOVCBBTEwgVEhFU0UhCisJICovCisJY2FzZSBPSURfR0VOX01BQ19PUFRJT05TOgkJLyogZnJvbSBXaW5NRSAqLworCQlERUJVRygiJXM6IE9JRF9HRU5fTUFDX09QVElPTlNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IDQ7CisJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKAorCQkJICBORElTX01BQ19PUFRJT05fUkVDRUlWRV9TRVJJQUxJWkVECisJCQl8IE5ESVNfTUFDX09QVElPTl9GVUxMX0RVUExFWCk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCisJLyogc3RhdGlzdGljcyBPSURzICh0YWJsZSA0LTIpICovCisKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF9HRU5fWE1JVF9PSzoKKwkJREVCVUcoIiVzOiBPSURfR0VOX1hNSVRfT0tcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7CisJCQlsZW5ndGggPSA0OworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCSAgICBybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzLT50eF9wYWNrZXRzIC0gCisJCQkgICAgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cy0+dHhfZXJyb3JzIC0KKwkJCSAgICBybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzLT50eF9kcm9wcGVkKTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfR0VOX1JDVl9PSzoKKwkJREVCVUcoIiVzOiBPSURfR0VOX1JDVl9PS1xuIiwgX19GVU5DVElPTl9fKTsKKwkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMpIHsKKwkJCWxlbmd0aCA9IDQ7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gY3B1X3RvX2xlMzIgKAorCQkJICAgIHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMtPnJ4X3BhY2tldHMgLSAKKwkJCSAgICBybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzLT5yeF9lcnJvcnMgLQorCQkJICAgIHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMtPnJ4X2Ryb3BwZWQpOworCQkJcmV0dmFsID0gMDsKKwkJfSBlbHNlIHsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJCXJldHZhbCA9IDA7CisJCX0KKwkJYnJlYWs7CisJCQorCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEX0dFTl9YTUlUX0VSUk9SOgorCQlERUJVRygiJXM6IE9JRF9HRU5fWE1JVF9FUlJPUlxuIiwgX19GVU5DVElPTl9fKTsKKwkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMpIHsKKwkJCWxlbmd0aCA9IDQ7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gY3B1X3RvX2xlMzIgKAorCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KKwkJCQkJLnN0YXRzLT50eF9lcnJvcnMpOworCQkJcmV0dmFsID0gMDsKKwkJfSBlbHNlIHsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJCXJldHZhbCA9IDA7CisJCX0KKwkJYnJlYWs7CisJCQorCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEX0dFTl9SQ1ZfRVJST1I6CisJCURFQlVHKCIlczogT0lEX0dFTl9SQ1ZfRVJST1JcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gY3B1X3RvX2xlMzIgKAorCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KKwkJCQkJLnN0YXRzLT5yeF9lcnJvcnMpOworCQkJcmV0dmFsID0gMDsKKwkJfSBlbHNlIHsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJCXJldHZhbCA9IDA7CisJCX0KKwkJYnJlYWs7CisJCQorCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSOgorCQlERUJVRygiJXM6IE9JRF9HRU5fUkNWX05PX0JVRkZFUlxuIiwgX19GVU5DVElPTl9fKTsKKwkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMpIHsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQorCQkJCQkuc3RhdHMtPnJ4X2Ryb3BwZWQpOworCQkJcmV0dmFsID0gMDsKKwkJfSBlbHNlIHsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJCXJldHZhbCA9IDA7CisJCX0KKwkJYnJlYWs7CisKKyNpZmRlZglSTkRJU19PUFRJT05BTF9TVEFUUworCWNhc2UgT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19YTUlUOgorCQlERUJVRygiJXM6IE9JRF9HRU5fRElSRUNURURfQllURVNfWE1JVFxuIiwgX19GVU5DVElPTl9fKTsKKwkJLyogCisJCSAqIEF1bnQgVGlsbHkncyBzaXplIG9mIHNob2VzCisJCSAqIG1pbnVzIGFudGFyY3RpY2EgY291bnQgb2YgcGVuZ3VpbnMKKwkJICogZGl2aWRlZCBieSB3ZWlnaHQgb2YgQWxwaGEgQ2VudGF1cmkKKwkJICovCisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7CisJCQlsZW5ndGggPSA0OworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQkocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQorCQkJCQkuc3RhdHMtPnR4X3BhY2tldHMgLSAKKwkJCQkgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQorCQkJCQkgLnN0YXRzLT50eF9lcnJvcnMgLQorCQkJCSBybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCisJCQkJCSAuc3RhdHMtPnR4X2Ryb3BwZWQpCisJCQkJKiAxMjMpOworCQkJcmV0dmFsID0gMDsKKwkJfSBlbHNlIHsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJCXJldHZhbCA9IDA7CisJCX0KKwkJYnJlYWs7CisJCQorCWNhc2UgT0lEX0dFTl9ESVJFQ1RFRF9GUkFNRVNfWE1JVDoKKwkJREVCVUcoIiVzOiBPSURfR0VOX0RJUkVDVEVEX0ZSQU1FU19YTUlUXG4iLCBfX0ZVTkNUSU9OX18pOworCQkvKiBkaXRvICovCisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7CisJCQlsZW5ndGggPSA0OworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQkocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQorCQkJCQkuc3RhdHMtPnR4X3BhY2tldHMgLSAKKwkJCQkgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQorCQkJCQkgLnN0YXRzLT50eF9lcnJvcnMgLQorCQkJCSBybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCisJCQkJCSAuc3RhdHMtPnR4X2Ryb3BwZWQpCisJCQkJLyAxMjMpOworCQkJcmV0dmFsID0gMDsKKwkJfSBlbHNlIHsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJCXJldHZhbCA9IDA7CisJCX0KKwkJYnJlYWs7CisJCQorCWNhc2UgT0lEX0dFTl9NVUxUSUNBU1RfQllURVNfWE1JVDoKKwkJREVCVUcoIiVzOiBPSURfR0VOX01VTFRJQ0FTVF9CWVRFU19YTUlUXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCisJCQkJCS5zdGF0cy0+bXVsdGljYXN0KjEyMzQpOworCQkJcmV0dmFsID0gMDsKKwkJfSBlbHNlIHsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJCXJldHZhbCA9IDA7CisJCX0KKwkJYnJlYWs7CisJCQorCWNhc2UgT0lEX0dFTl9NVUxUSUNBU1RfRlJBTUVTX1hNSVQ6CisJCURFQlVHKCIlczogT0lEX0dFTl9NVUxUSUNBU1RfRlJBTUVTX1hNSVRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gY3B1X3RvX2xlMzIgKAorCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KKwkJCQkJLnN0YXRzLT5tdWx0aWNhc3QpOworCQkJcmV0dmFsID0gMDsKKwkJfSBlbHNlIHsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJCXJldHZhbCA9IDA7CisJCX0KKwkJYnJlYWs7CisJCQorCWNhc2UgT0lEX0dFTl9CUk9BRENBU1RfQllURVNfWE1JVDoKKwkJREVCVUcoIiVzOiBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19YTUlUXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCisJCQkJCS5zdGF0cy0+dHhfcGFja2V0cy80MioyNTUpOworCQkJcmV0dmFsID0gMDsKKwkJfSBlbHNlIHsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJCXJldHZhbCA9IDA7CisJCX0KKwkJYnJlYWs7CisJCQorCWNhc2UgT0lEX0dFTl9CUk9BRENBU1RfRlJBTUVTX1hNSVQ6CisJCURFQlVHKCIlczogT0lEX0dFTl9CUk9BRENBU1RfRlJBTUVTX1hNSVRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gY3B1X3RvX2xlMzIgKAorCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KKwkJCQkJLnN0YXRzLT50eF9wYWNrZXRzLzQyKTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwljYXNlIE9JRF9HRU5fRElSRUNURURfQllURVNfUkNWOgorCQlERUJVRygiJXM6IE9JRF9HRU5fRElSRUNURURfQllURVNfUkNWXG4iLCBfX0ZVTkNUSU9OX18pOworCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCQkKKwljYXNlIE9JRF9HRU5fRElSRUNURURfRlJBTUVTX1JDVjoKKwkJREVCVUcoIiVzOiBPSURfR0VOX0RJUkVDVEVEX0ZSQU1FU19SQ1ZcbiIsIF9fRlVOQ1RJT05fXyk7CisJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CisJCQorCWNhc2UgT0lEX0dFTl9NVUxUSUNBU1RfQllURVNfUkNWOgorCQlERUJVRygiJXM6IE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1JDVlxuIiwgX19GVU5DVElPTl9fKTsKKwkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uc3RhdHMpIHsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBjcHVfdG9fbGUzMiAoCisJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXQorCQkJCQkuc3RhdHMtPm11bHRpY2FzdCAqIDExMTEpOworCQkJcmV0dmFsID0gMDsKKwkJfSBlbHNlIHsKKwkJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJCXJldHZhbCA9IDA7CisJCX0KKwkJYnJlYWs7CisJCQorCWNhc2UgT0lEX0dFTl9NVUxUSUNBU1RfRlJBTUVTX1JDVjoKKwkJREVCVUcoIiVzOiBPSURfR0VOX01VTFRJQ0FTVF9GUkFNRVNfUkNWXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zdGF0cykgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCisJCQkJCS5zdGF0cy0+bXVsdGljYXN0KTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwljYXNlIE9JRF9HRU5fQlJPQURDQVNUX0JZVEVTX1JDVjoKKwkJREVCVUcoIiVzOiBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19SQ1ZcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gY3B1X3RvX2xlMzIgKAorCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KKwkJCQkJLnN0YXRzLT5yeF9wYWNrZXRzLzQyKjI1NSk7CisJCQlyZXR2YWwgPSAwOworCQl9IGVsc2UgeworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkJcmV0dmFsID0gMDsKKwkJfQorCQlicmVhazsKKwkJCisJY2FzZSBPSURfR0VOX0JST0FEQ0FTVF9GUkFNRVNfUkNWOgorCQlERUJVRygiJXM6IE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19SQ1ZcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gY3B1X3RvX2xlMzIgKAorCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KKwkJCQkJLnN0YXRzLT5yeF9wYWNrZXRzLzQyKTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwljYXNlIE9JRF9HRU5fUkNWX0NSQ19FUlJPUjoKKwkJREVCVUcoIiVzOiBPSURfR0VOX1JDVl9DUkNfRVJST1JcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gY3B1X3RvX2xlMzIgKAorCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0KKwkJCQkJLnN0YXRzLT5yeF9jcmNfZXJyb3JzKTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwljYXNlIE9JRF9HRU5fVFJBTlNNSVRfUVVFVUVfTEVOR1RIOgorCQlERUJVRygiJXM6IE9JRF9HRU5fVFJBTlNNSVRfUVVFVUVfTEVOR1RIXG4iLCBfX0ZVTkNUSU9OX18pOworCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworI2VuZGlmCS8qIFJORElTX09QVElPTkFMX1NUQVRTICovCisKKwkvKiBpZWVlODAyLjMgT0lEcyAodGFibGUgNC0zKSAqLworCisJLyogbWFuZGF0b3J5ICovCisJY2FzZSBPSURfODAyXzNfUEVSTUFORU5UX0FERFJFU1M6CisJCURFQlVHKCIlczogT0lEXzgwMl8zX1BFUk1BTkVOVF9BRERSRVNTXG4iLCBfX0ZVTkNUSU9OX18pOworCQlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpIHsKKwkJCWxlbmd0aCA9IEVUSF9BTEVOOworCQkJbWVtY3B5ICgodTggKikgcmVzcCArIDI0LAorCQkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uaG9zdF9tYWMsCisJCQkJbGVuZ3RoKTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZSB7CisJCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF84MDJfM19DVVJSRU5UX0FERFJFU1M6CisJCURFQlVHKCIlczogT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTU1xuIiwgX19GVU5DVElPTl9fKTsKKwkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KSB7CisJCQlsZW5ndGggPSBFVEhfQUxFTjsKKwkJCW1lbWNweSAoKHU4ICopIHJlc3AgKyAyNCwKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmhvc3RfbWFjLAorCQkJCWxlbmd0aCk7CisJCQlyZXR2YWwgPSAwOworCQl9CisJCWJyZWFrOworCQkKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF84MDJfM19NVUxUSUNBU1RfTElTVDoKKwkJREVCVUcoIiVzOiBPSURfODAyXzNfTVVMVElDQVNUX0xJU1RcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IDQ7CisJCS8qIE11bHRpY2FzdCBiYXNlIGFkZHJlc3Mgb25seSAqLworCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMHhFMDAwMDAwMCk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCQkKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF84MDJfM19NQVhJTVVNX0xJU1RfU0laRToKKwkJREVCVUcoIiVzOiBPSURfODAyXzNfTUFYSU1VTV9MSVNUX1NJWkVcbiIsIF9fRlVOQ1RJT05fXyk7CisJCSBsZW5ndGggPSA0OworCQkvKiBNdWx0aWNhc3QgYmFzZSBhZGRyZXNzIG9ubHkgKi8KKwkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKwkJCisJY2FzZSBPSURfODAyXzNfTUFDX09QVElPTlM6CisJCURFQlVHKCIlczogT0lEXzgwMl8zX01BQ19PUFRJT05TXG4iLCBfX0ZVTkNUSU9OX18pOworCQlicmVhazsKKworCS8qIGllZWU4MDIuMyBzdGF0aXN0aWNzIE9JRHMgKHRhYmxlIDQtNCkgKi8KKworCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEXzgwMl8zX1JDVl9FUlJPUl9BTElHTk1FTlQ6CisJCURFQlVHKCIlczogT0lEXzgwMl8zX1JDVl9FUlJPUl9BTElHTk1FTlRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzKQorCQl7CisJCQlsZW5ndGggPSA0OworCQkJKigoX19sZTMyICopIHJlc3AgKyA2KSA9IGNwdV90b19sZTMyICgKKwkJCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdCisJCQkJCS5zdGF0cy0+cnhfZnJhbWVfZXJyb3JzKTsKKwkJCXJldHZhbCA9IDA7CisJCX0KKwkJYnJlYWs7CisJCQorCS8qIG1hbmRhdG9yeSAqLworCWNhc2UgT0lEXzgwMl8zX1hNSVRfT05FX0NPTExJU0lPTjoKKwkJREVCVUcoIiVzOiBPSURfODAyXzNfWE1JVF9PTkVfQ09MTElTSU9OXG4iLCBfX0ZVTkNUSU9OX18pOworCQlsZW5ndGggPSA0OworCQkqKChfX2xlMzIgKikgcmVzcCArIDYpID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCQkKKwkvKiBtYW5kYXRvcnkgKi8KKwljYXNlIE9JRF84MDJfM19YTUlUX01PUkVfQ09MTElTSU9OUzoKKwkJREVCVUcoIiVzOiBPSURfODAyXzNfWE1JVF9NT1JFX0NPTExJU0lPTlNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWxlbmd0aCA9IDQ7CisJCSooKF9fbGUzMiAqKSByZXNwICsgNikgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CisJCQorI2lmZGVmCVJORElTX09QVElPTkFMX1NUQVRTCisJY2FzZSBPSURfODAyXzNfWE1JVF9ERUZFUlJFRDoKKwkJREVCVUcoIiVzOiBPSURfODAyXzNfWE1JVF9ERUZFUlJFRFxuIiwgX19GVU5DVElPTl9fKTsKKwkJLyogVE9ETyAqLworCQlicmVhazsKKwkJCisJY2FzZSBPSURfODAyXzNfWE1JVF9NQVhfQ09MTElTSU9OUzoKKwkJREVCVUcoIiVzOiBPSURfODAyXzNfWE1JVF9NQVhfQ09MTElTSU9OU1xuIiwgX19GVU5DVElPTl9fKTsKKwkJLyogVE9ETyAqLworCQlicmVhazsKKwkJCisJY2FzZSBPSURfODAyXzNfUkNWX09WRVJSVU46CisJCURFQlVHKCIlczogT0lEXzgwMl8zX1JDVl9PVkVSUlVOXG4iLCBfX0ZVTkNUSU9OX18pOworCQkvKiBUT0RPICovCisJCWJyZWFrOworCQkKKwljYXNlIE9JRF84MDJfM19YTUlUX1VOREVSUlVOOgorCQlERUJVRygiJXM6IE9JRF84MDJfM19YTUlUX1VOREVSUlVOXG4iLCBfX0ZVTkNUSU9OX18pOworCQkvKiBUT0RPICovCisJCWJyZWFrOworCQkKKwljYXNlIE9JRF84MDJfM19YTUlUX0hFQVJUQkVBVF9GQUlMVVJFOgorCQlERUJVRygiJXM6IE9JRF84MDJfM19YTUlUX0hFQVJUQkVBVF9GQUlMVVJFXG4iLCBfX0ZVTkNUSU9OX18pOworCQkvKiBUT0RPICovCisJCWJyZWFrOworCQkKKwljYXNlIE9JRF84MDJfM19YTUlUX1RJTUVTX0NSU19MT1NUOgorCQlERUJVRygiJXM6IE9JRF84MDJfM19YTUlUX1RJTUVTX0NSU19MT1NUXG4iLCBfX0ZVTkNUSU9OX18pOworCQkvKiBUT0RPICovCisJCWJyZWFrOworCQkKKwljYXNlIE9JRF84MDJfM19YTUlUX0xBVEVfQ09MTElTSU9OUzoKKwkJREVCVUcoIiVzOiBPSURfODAyXzNfWE1JVF9MQVRFX0NPTExJU0lPTlNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCS8qIFRPRE8gKi8KKwkJYnJlYWs7CQkKKyNlbmRpZgkvKiBSTkRJU19PUFRJT05BTF9TVEFUUyAqLworCisjaWZkZWYJUk5ESVNfUE0KKwkvKiBwb3dlciBtYW5hZ2VtZW50IE9JRHMgKHRhYmxlIDQtNSkgKi8KKwljYXNlIE9JRF9QTlBfQ0FQQUJJTElUSUVTOgorCQlERUJVRygiJXM6IE9JRF9QTlBfQ0FQQUJJTElUSUVTXG4iLCBfX0ZVTkNUSU9OX18pOworCisJCS8qIGp1c3QgUE0sIGFuZCByZW1vdGUgd2FrZXVwIG9uIGxpbmsgc3RhdHVzIGNoYW5nZQorCQkgKiAobm90IG1hZ2ljIHBhY2tldCBvciBwYXR0ZXJuIG1hdGNoKQorCQkgKi8KKwkJbGVuZ3RoID0gc2l6ZW9mIChzdHJ1Y3QgTkRJU19QTlBfQ0FQQUJJTElUSUVTKTsKKwkJbWVtc2V0IChyZXNwLCAwLCBsZW5ndGgpOworCQl7CisJCQlzdHJ1Y3QgTkRJU19QTlBfQ0FQQUJJTElUSUVTICpjYXBzID0gKHZvaWQgKikgcmVzcDsKKworCQkJY2Fwcy0+RmxhZ3MgPSBORElTX0RFVklDRV9XQUtFX1VQX0VOQUJMRTsKKwkJCWNhcHMtPldha2VVcENhcGFiaWxpdGllcy5NaW5MaW5rQ2hhbmdlV2FrZVVwIAorCQkJCSA9IE5kaXNEZXZpY2VTdGF0ZUQzOworCisJCQkvKiBGSVhNRSB0aGVuIHVzZSB1c2JfZ2FkZ2V0X3dha2V1cCgpLCBhbmQKKwkJCSAqIHNldCBVU0JfQ09ORklHX0FUVF9XQUtFVVAgaW4gY29uZmlnIGRlc2MKKwkJCSAqLworCQl9CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCWNhc2UgT0lEX1BOUF9RVUVSWV9QT1dFUjoKKwkJREVCVUcoIiVzOiBPSURfUE5QX1FVRVJZX1BPV0VSXG4iLCBfX0ZVTkNUSU9OX18pOworCQkvKiBzdXJlLCBoYW5kbGUgYW55IHBvd2VyIHN0YXRlIHRoYXQgbWFwcyB0byBVU0Igc3VzcGVuZCAqLworCQlyZXR2YWwgPSAwOworCQlicmVhazsKKyNlbmRpZgorCisJZGVmYXVsdDoKKwkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIiVzOiBxdWVyeSB1bmtub3duIE9JRCAweCUwOFhcbiIsIAorCQkJIF9fRlVOQ1RJT05fXywgT0lEKTsKKwl9CisJCisJcmVzcC0+SW5mb3JtYXRpb25CdWZmZXJPZmZzZXQgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxNik7CisJcmVzcC0+SW5mb3JtYXRpb25CdWZmZXJMZW5ndGggPSBjcHVfdG9fbGUzMiAobGVuZ3RoKTsKKwlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gY3B1X3RvX2xlMzIgKDI0ICsgbGVuZ3RoKTsKKwlyLT5sZW5ndGggPSAyNCArIGxlbmd0aDsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGdlbl9uZGlzX3NldF9yZXNwICh1OCBjb25maWdOciwgdTMyIE9JRCwgdTggKmJ1ZiwgdTMyIGJ1Zl9sZW4sIAorCQkJICAgICAgcm5kaXNfcmVzcF90ICpyKQoreworCXJuZGlzX3NldF9jbXBsdF90eXBlCQkqcmVzcDsKKwlpbnQgCQkJCWksIHJldHZhbCA9IC1FTk9UU1VQUDsKKwlzdHJ1Y3Qgcm5kaXNfcGFyYW1zCQkqcGFyYW1zOworCisJaWYgKCFyKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXNwID0gKHJuZGlzX3NldF9jbXBsdF90eXBlICopIHItPmJ1ZjsKKwlpZiAoIXJlc3ApCisJCXJldHVybiAtRU5PTUVNOworCisJREVCVUcoInNldCBPSUQgJTA4eCB2YWx1ZSwgbGVuICVkOlxuIiwgT0lELCBidWZfbGVuKTsKKwlmb3IgKGkgPSAwOyBpIDwgYnVmX2xlbjsgaSArPSAxNikgeworCQlERUJVRyAoIiUwM2Q6ICIKKwkJCSIgJTAyeCAlMDJ4ICUwMnggJTAyeCIKKwkJCSIgJTAyeCAlMDJ4ICUwMnggJTAyeCIKKwkJCSIgJTAyeCAlMDJ4ICUwMnggJTAyeCIKKwkJCSIgJTAyeCAlMDJ4ICUwMnggJTAyeCIKKwkJCSJcbiIsCisJCQlpLAorCQkJYnVmW2ldLCBidWYgW2krMV0sCisJCQkJYnVmW2krMl0sIGJ1ZltpKzNdLAorCQkJYnVmW2krNF0sIGJ1ZiBbaSs1XSwKKwkJCQlidWZbaSs2XSwgYnVmW2krN10sCisJCQlidWZbaSs4XSwgYnVmIFtpKzldLAorCQkJCWJ1ZltpKzEwXSwgYnVmW2krMTFdLAorCQkJYnVmW2krMTJdLCBidWYgW2krMTNdLAorCQkJCWJ1ZltpKzE0XSwgYnVmW2krMTVdKTsKKwl9CisKKwlzd2l0Y2ggKE9JRCkgeworCWNhc2UgT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVI6CisJCXBhcmFtcyA9ICZybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdOworCQlyZXR2YWwgPSAwOworCisJCS8qIEZJWE1FIHVzZSB0aGVzZSBORElTX1BBQ0tFVF9UWVBFXyogYml0ZmxhZ3MgdG8KKwkJICogZmlsdGVyIHBhY2tldHMgaW4gaGFyZF9zdGFydF94bWl0KCkKKwkJICogTkRJU19QQUNLRVRfVFlQRV94ID09IFVTQl9DRENfUEFDS0VUX1RZUEVfeCBmb3IgeCBpbjoKKwkJICoJUFJPTUlTQ1VPVVMsIERJUkVDVEVELAorCQkgKglNVUxUSUNBU1QsIEFMTF9NVUxUSUNBU1QsIEJST0FEQ0FTVAorCQkgKi8KKwkJcGFyYW1zLT5maWx0ZXIgPSBsZTMyX3RvX2NwdXAoKF9fbGUzMiAqKWJ1Zik7CisJCURFQlVHKCIlczogT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVIgJTA4eFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcGFyYW1zLT5maWx0ZXIpOworCisJCS8qIHRoaXMgY2FsbCBoYXMgYSBzaWduaWZpY2FudCBzaWRlIGVmZmVjdDogIGl0J3MKKwkJICogd2hhdCBtYWtlcyB0aGUgcGFja2V0IGZsb3cgc3RhcnQgYW5kIHN0b3AsIGxpa2UKKwkJICogYWN0aXZhdGluZyB0aGUgQ0RDIEV0aGVybmV0IGFsdHNldHRpbmcuCisJCSAqLworCQlpZiAocGFyYW1zLT5maWx0ZXIpIHsKKwkJCXBhcmFtcy0+c3RhdGUgPSBSTkRJU19EQVRBX0lOSVRJQUxJWkVEOworCQkJbmV0aWZfY2Fycmllcl9vbihwYXJhbXMtPmRldik7CisJCQlpZiAobmV0aWZfcnVubmluZyhwYXJhbXMtPmRldikpCisJCQkJbmV0aWZfd2FrZV9xdWV1ZSAocGFyYW1zLT5kZXYpOworCQl9IGVsc2UgeworCQkJcGFyYW1zLT5zdGF0ZSA9IFJORElTX0lOSVRJQUxJWkVEOworCQkJbmV0aWZfY2Fycmllcl9vZmYgKHBhcmFtcy0+ZGV2KTsKKwkJCW5ldGlmX3N0b3BfcXVldWUgKHBhcmFtcy0+ZGV2KTsKKwkJfQorCQlicmVhazsKKwkJCisJY2FzZSBPSURfODAyXzNfTVVMVElDQVNUX0xJU1Q6CisJCS8qIEkgdGhpbmsgd2UgY2FuIGlnbm9yZSB0aGlzICovCQkKKwkJREVCVUcoIiVzOiBPSURfODAyXzNfTVVMVElDQVNUX0xJU1RcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworI2lmIDAKKwljYXNlIE9JRF9HRU5fUk5ESVNfQ09ORklHX1BBUkFNRVRFUjoKKwkJeworCQlzdHJ1Y3Qgcm5kaXNfY29uZmlnX3BhcmFtZXRlcgkqcGFyYW07CisJCXBhcmFtID0gKHN0cnVjdCBybmRpc19jb25maWdfcGFyYW1ldGVyICopIGJ1ZjsKKwkJREVCVUcoIiVzOiBPSURfR0VOX1JORElTX0NPTkZJR19QQVJBTUVURVIgJyUqcydcbiIsCisJCQlfX0ZVTkNUSU9OX18sCisJCQltaW4oY3B1X3RvX2xlMzIocGFyYW0tPlBhcmFtZXRlck5hbWVMZW5ndGgpLDgwKSwKKwkJCWJ1ZiArIHBhcmFtLT5QYXJhbWV0ZXJOYW1lT2Zmc2V0KTsKKwkJcmV0dmFsID0gMDsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorCisjaWZkZWYJUk5ESVNfUE0KKwljYXNlIE9JRF9QTlBfU0VUX1BPV0VSOgorCQlERUJVRyAoIk9JRF9QTlBfU0VUX1BPV0VSXG4iKTsKKwkJLyogc3VyZSwgaGFuZGxlIGFueSBwb3dlciBzdGF0ZSB0aGF0IG1hcHMgdG8gVVNCIHN1c3BlbmQgKi8KKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIE9JRF9QTlBfRU5BQkxFX1dBS0VfVVA6CisJCS8qIGFsd2F5cy1jb25uZWN0ZWQgLi4uICovCisJCURFQlVHICgiT0lEX1BOUF9FTkFCTEVfV0FLRV9VUFxuIik7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCisJLy8gbm8gUE0gcmVzdW1lIHBhdHRlcm5zIHN1cHBvcnRlZCAoc3BlY2lmaWVkIHdoZXJlPykKKwkvLyBzbyBPSURfUE5QX3tBREQsUkVNT1ZFfV9XQUtFX1VQX1BBVFRFUk4gYWx3YXlzIGZhaWxzCisjZW5kaWYKKworCWRlZmF1bHQ6CisJCXByaW50ayAoS0VSTl9XQVJOSU5HICIlczogc2V0IHVua25vd24gT0lEIDB4JTA4WCwgc2l6ZSAlZFxuIiwgCisJCQkgX19GVU5DVElPTl9fLCBPSUQsIGJ1Zl9sZW4pOworCX0KKwkKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiAKKyAqIFJlc3BvbnNlIEZ1bmN0aW9ucyAKKyAqLworCitzdGF0aWMgaW50IHJuZGlzX2luaXRfcmVzcG9uc2UgKGludCBjb25maWdOciwgcm5kaXNfaW5pdF9tc2dfdHlwZSAqYnVmKQoreworCXJuZGlzX2luaXRfY21wbHRfdHlwZQkqcmVzcDsgCisJcm5kaXNfcmVzcF90ICAgICAgICAgICAgKnI7CisJCisJaWYgKCFybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmRldikgcmV0dXJuIC1FTk9UU1VQUDsKKwkKKwlyID0gcm5kaXNfYWRkX3Jlc3BvbnNlIChjb25maWdOciwgc2l6ZW9mIChybmRpc19pbml0X2NtcGx0X3R5cGUpKTsKKwkKKwlpZiAoIXIpIHJldHVybiAtRU5PTUVNOworCQorCXJlc3AgPSAocm5kaXNfaW5pdF9jbXBsdF90eXBlICopIHItPmJ1ZjsKKwkKKwlpZiAoIXJlc3ApIHJldHVybiAtRU5PTUVNOworCQorCXJlc3AtPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoCisJCQlSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExUKTsKKwlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoNTIpOworCXJlc3AtPlJlcXVlc3RJRCA9IGJ1Zi0+UmVxdWVzdElEOyAvKiBTdGlsbCBMRSBpbiBtc2cgYnVmZmVyICovCisJcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCXJlc3AtPk1ham9yVmVyc2lvbiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX01BSk9SX1ZFUlNJT04pOworCXJlc3AtPk1pbm9yVmVyc2lvbiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX01JTk9SX1ZFUlNJT04pOworCXJlc3AtPkRldmljZUZsYWdzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfREZfQ09OTkVDVElPTkxFU1MpOworCXJlc3AtPk1lZGl1bSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX01FRElVTV84MDJfMyk7CisJcmVzcC0+TWF4UGFja2V0c1BlclRyYW5zZmVyID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSk7CisJcmVzcC0+TWF4VHJhbnNmZXJTaXplID0gY3B1X3RvX2xlMzIgKAorCQkgIHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2LT5tdHUKKwkJKyBzaXplb2YgKHN0cnVjdCBldGhoZHIpCisJCSsgc2l6ZW9mIChzdHJ1Y3Qgcm5kaXNfcGFja2V0X21zZ190eXBlKQorCQkrIDIyKTsKKwlyZXNwLT5QYWNrZXRBbGlnbm1lbnRGYWN0b3IgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwlyZXNwLT5BRkxpc3RPZmZzZXQgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwlyZXNwLT5BRkxpc3RTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCisJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uYWNrKQorCSAgICBybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmFjayAoCisJICAgIAkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpOworCQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJuZGlzX3F1ZXJ5X3Jlc3BvbnNlIChpbnQgY29uZmlnTnIsIHJuZGlzX3F1ZXJ5X21zZ190eXBlICpidWYpCit7CisJcm5kaXNfcXVlcnlfY21wbHRfdHlwZSAqcmVzcDsKKwlybmRpc19yZXNwX3QgICAgICAgICAgICAqcjsKKwkKKwkvLyBERUJVRygiJXM6IE9JRCA9ICUwOFhcbiIsIF9fRlVOQ1RJT05fXywgY3B1X3RvX2xlMzIoYnVmLT5PSUQpKTsKKwlpZiAoIXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KSByZXR1cm4gLUVOT1RTVVBQOworCQorCS8qIAorCSAqIHdlIG5lZWQgbW9yZSBtZW1vcnk6IAorCSAqIG9pZF9zdXBwb3J0ZWRfbGlzdCBpcyB0aGUgbGFyZ2VzdCBhbnN3ZXIgCisJICovCisJciA9IHJuZGlzX2FkZF9yZXNwb25zZSAoY29uZmlnTnIsIHNpemVvZiAob2lkX3N1cHBvcnRlZF9saXN0KSk7CisJCisJaWYgKCFyKSByZXR1cm4gLUVOT01FTTsKKwlyZXNwID0gKHJuZGlzX3F1ZXJ5X2NtcGx0X3R5cGUgKikgci0+YnVmOworCQorCWlmICghcmVzcCkgcmV0dXJuIC1FTk9NRU07CisJCisJcmVzcC0+TWVzc2FnZVR5cGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSRU1PVEVfTkRJU19RVUVSWV9DTVBMVCk7CisJcmVzcC0+TWVzc2FnZUxlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDI0KTsKKwlyZXNwLT5SZXF1ZXN0SUQgPSBidWYtPlJlcXVlc3RJRDsgLyogU3RpbGwgTEUgaW4gbXNnIGJ1ZmZlciAqLworCQorCWlmIChnZW5fbmRpc19xdWVyeV9yZXNwIChjb25maWdOciwgbGUzMl90b19jcHUgKGJ1Zi0+T0lEKSwgcikpIHsKKwkJLyogT0lEIG5vdCBzdXBwb3J0ZWQgKi8KKwkJcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoCisJCQkJUk5ESVNfU1RBVFVTX05PVF9TVVBQT1JURUQpOworCQlyZXNwLT5JbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQlyZXNwLT5JbmZvcm1hdGlvbkJ1ZmZlck9mZnNldCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCX0gZWxzZQorCQlyZXNwLT5TdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19TVEFUVVNfU1VDQ0VTUyk7CisJCisJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uYWNrKQorCSAgICBybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmFjayAoCisJICAgIAkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJuZGlzX3NldF9yZXNwb25zZSAoaW50IGNvbmZpZ05yLCBybmRpc19zZXRfbXNnX3R5cGUgKmJ1ZikKK3sKKwl1MzIJCQlCdWZMZW5ndGgsIEJ1Zk9mZnNldDsKKwlybmRpc19zZXRfY21wbHRfdHlwZQkqcmVzcDsKKwlybmRpc19yZXNwX3QJCSpyOworCQorCXIgPSBybmRpc19hZGRfcmVzcG9uc2UgKGNvbmZpZ05yLCBzaXplb2YgKHJuZGlzX3NldF9jbXBsdF90eXBlKSk7CisJCisJaWYgKCFyKSByZXR1cm4gLUVOT01FTTsKKwlyZXNwID0gKHJuZGlzX3NldF9jbXBsdF90eXBlICopIHItPmJ1ZjsKKwlpZiAoIXJlc3ApIHJldHVybiAtRU5PTUVNOworCisJQnVmTGVuZ3RoID0gbGUzMl90b19jcHUgKGJ1Zi0+SW5mb3JtYXRpb25CdWZmZXJMZW5ndGgpOworCUJ1Zk9mZnNldCA9IGxlMzJfdG9fY3B1IChidWYtPkluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0KTsKKworI2lmZGVmCVZFUkJPU0UKKwlERUJVRygiJXM6IExlbmd0aDogJWRcbiIsIF9fRlVOQ1RJT05fXywgQnVmTGVuZ3RoKTsKKwlERUJVRygiJXM6IE9mZnNldDogJWRcbiIsIF9fRlVOQ1RJT05fXywgQnVmT2Zmc2V0KTsKKwlERUJVRygiJXM6IEluZm9CdWZmZXI6ICIsIF9fRlVOQ1RJT05fXyk7CisJCisJZm9yIChpID0gMDsgaSA8IEJ1Zkxlbmd0aDsgaSsrKSB7CisJCURFQlVHICgiJTAyeCAiLCAqKCgodTggKikgYnVmKSArIGkgKyA4ICsgQnVmT2Zmc2V0KSk7CisJfQorCQorCURFQlVHICgiXG4iKTsKKyNlbmRpZgorCQorCXJlc3AtPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUkVNT1RFX05ESVNfU0VUX0NNUExUKTsKKwlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMTYpOworCXJlc3AtPlJlcXVlc3RJRCA9IGJ1Zi0+UmVxdWVzdElEOyAvKiBTdGlsbCBMRSBpbiBtc2cgYnVmZmVyICovCisJaWYgKGdlbl9uZGlzX3NldF9yZXNwIChjb25maWdOciwgbGUzMl90b19jcHUgKGJ1Zi0+T0lEKSwgCisJCQkgICAgICAgKCh1OCAqKSBidWYpICsgOCArIEJ1Zk9mZnNldCwgQnVmTGVuZ3RoLCByKSkKKwkgICAgcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX05PVF9TVVBQT1JURUQpOworCWVsc2UgcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCQorCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmFjaykKKwkgICAgcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5hY2sgKAorCSAgICAJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uZGV2KTsKKwkKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBybmRpc19yZXNldF9yZXNwb25zZSAoaW50IGNvbmZpZ05yLCBybmRpc19yZXNldF9tc2dfdHlwZSAqYnVmKQoreworCXJuZGlzX3Jlc2V0X2NtcGx0X3R5cGUJKnJlc3A7CisJcm5kaXNfcmVzcF90CQkqcjsKKwkKKwlyID0gcm5kaXNfYWRkX3Jlc3BvbnNlIChjb25maWdOciwgc2l6ZW9mIChybmRpc19yZXNldF9jbXBsdF90eXBlKSk7CisJCisJaWYgKCFyKSByZXR1cm4gLUVOT01FTTsKKwlyZXNwID0gKHJuZGlzX3Jlc2V0X2NtcGx0X3R5cGUgKikgci0+YnVmOworCWlmICghcmVzcCkgcmV0dXJuIC1FTk9NRU07CisJCisJcmVzcC0+TWVzc2FnZVR5cGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSRU1PVEVfTkRJU19SRVNFVF9DTVBMVCk7CisJcmVzcC0+TWVzc2FnZUxlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDE2KTsKKwlyZXNwLT5TdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19TVEFUVVNfU1VDQ0VTUyk7CisJLyogcmVzZW50IGluZm9ybWF0aW9uICovCisJcmVzcC0+QWRkcmVzc2luZ1Jlc2V0ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSk7CisJCisJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uYWNrKQorCSAgICBybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmFjayAoCisJICAgIAkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcm5kaXNfa2VlcGFsaXZlX3Jlc3BvbnNlIChpbnQgY29uZmlnTnIsCisJCQkJICAgICBybmRpc19rZWVwYWxpdmVfbXNnX3R5cGUgKmJ1ZikKK3sKKwlybmRpc19rZWVwYWxpdmVfY21wbHRfdHlwZQkqcmVzcDsKKwlybmRpc19yZXNwX3QJCQkqcjsKKworCS8qIGhvc3QgInNob3VsZCIgY2hlY2sgb25seSBpbiBSTkRJU19EQVRBX0lOSVRJQUxJWkVEIHN0YXRlICovCisKKwlyID0gcm5kaXNfYWRkX3Jlc3BvbnNlIChjb25maWdOciwgc2l6ZW9mIChybmRpc19rZWVwYWxpdmVfY21wbHRfdHlwZSkpOworCXJlc3AgPSAocm5kaXNfa2VlcGFsaXZlX2NtcGx0X3R5cGUgKikgci0+YnVmOworCWlmICghcmVzcCkgcmV0dXJuIC1FTk9NRU07CisJCQorCXJlc3AtPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoCisJCQlSRU1PVEVfTkRJU19LRUVQQUxJVkVfQ01QTFQpOworCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxNik7CisJcmVzcC0+UmVxdWVzdElEID0gYnVmLT5SZXF1ZXN0SUQ7IC8qIFN0aWxsIExFIGluIG1zZyBidWZmZXIgKi8KKwlyZXNwLT5TdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChSTkRJU19TVEFUVVNfU1VDQ0VTUyk7CisJCisJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uYWNrKQorCSAgICBybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmFjayAoCisJICAgIAkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpOworCQorCXJldHVybiAwOworfQorCisKKy8qIAorICogRGV2aWNlIHRvIEhvc3QgQ29tdW5pY2F0aW9uIAorICovCitzdGF0aWMgaW50IHJuZGlzX2luZGljYXRlX3N0YXR1c19tc2cgKGludCBjb25maWdOciwgdTMyIHN0YXR1cykKK3sKKwlybmRpc19pbmRpY2F0ZV9zdGF0dXNfbXNnX3R5cGUJKnJlc3A7CQorCXJuZGlzX3Jlc3BfdAkJCSpyOworCQorCWlmIChybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRlID09IFJORElTX1VOSU5JVElBTElaRUQpCisJICAgIHJldHVybiAtRU5PVFNVUFA7CisJCisJciA9IHJuZGlzX2FkZF9yZXNwb25zZSAoY29uZmlnTnIsIAorCQkJCXNpemVvZiAocm5kaXNfaW5kaWNhdGVfc3RhdHVzX21zZ190eXBlKSk7CisJaWYgKCFyKSByZXR1cm4gLUVOT01FTTsKKwkKKwlyZXNwID0gKHJuZGlzX2luZGljYXRlX3N0YXR1c19tc2dfdHlwZSAqKSByLT5idWY7CisJaWYgKCFyZXNwKSByZXR1cm4gLUVOT01FTTsKKwkKKwlyZXNwLT5NZXNzYWdlVHlwZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKAorCQkJUkVNT1RFX05ESVNfSU5ESUNBVEVfU1RBVFVTX01TRyk7CisJcmVzcC0+TWVzc2FnZUxlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDIwKTsKKwlyZXNwLT5TdGF0dXMgPSBjcHVfdG9fbGUzMiAoc3RhdHVzKTsKKwlyZXNwLT5TdGF0dXNCdWZmZXJMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwlyZXNwLT5TdGF0dXNCdWZmZXJPZmZzZXQgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkKKwlpZiAocm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5hY2spIAorCSAgICBybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmFjayAoCisJICAgIAkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5kZXYpOworCXJldHVybiAwOworfQorCitpbnQgcm5kaXNfc2lnbmFsX2Nvbm5lY3QgKGludCBjb25maWdOcikKK3sKKwlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLm1lZGlhX3N0YXRlCisJCQk9IE5ESVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEOworCXJldHVybiBybmRpc19pbmRpY2F0ZV9zdGF0dXNfbXNnIChjb25maWdOciwgCisJCQkJCSAgUk5ESVNfU1RBVFVTX01FRElBX0NPTk5FQ1QpOworfQorCitpbnQgcm5kaXNfc2lnbmFsX2Rpc2Nvbm5lY3QgKGludCBjb25maWdOcikKK3sKKwlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLm1lZGlhX3N0YXRlCisJCQk9IE5ESVNfTUVESUFfU1RBVEVfRElTQ09OTkVDVEVEOworCXJldHVybiBybmRpc19pbmRpY2F0ZV9zdGF0dXNfbXNnIChjb25maWdOciwKKwkJCQkJICBSTkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVCk7Cit9CisKK3ZvaWQgcm5kaXNfc2V0X2hvc3RfbWFjIChpbnQgY29uZmlnTnIsIGNvbnN0IHU4ICphZGRyKQoreworCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0uaG9zdF9tYWMgPSBhZGRyOworfQorCisvKiAKKyAqIE1lc3NhZ2UgUGFyc2VyIAorICovCitpbnQgcm5kaXNfbXNnX3BhcnNlciAodTggY29uZmlnTnIsIHU4ICpidWYpCit7CisJdTMyIE1zZ1R5cGUsIE1zZ0xlbmd0aDsKKwlfX2xlMzIgKnRtcDsKKwlzdHJ1Y3Qgcm5kaXNfcGFyYW1zCQkqcGFyYW1zOworCQorCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwkKKwl0bXAgPSAoX19sZTMyICopIGJ1ZjsgCisJTXNnVHlwZSAgID0gbGUzMl90b19jcHVwKHRtcCsrKTsKKwlNc2dMZW5ndGggPSBsZTMyX3RvX2NwdXAodG1wKyspOworCQorCWlmIChjb25maWdOciA+PSBSTkRJU19NQVhfQ09ORklHUykKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwlwYXJhbXMgPSAmcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXTsKKwkKKwkvKiBGb3IgVVNCOiByZXNwb25zZXMgbWF5IHRha2UgdXAgdG8gMTAgc2Vjb25kcyAqLworCXN3aXRjaCAoTXNnVHlwZSkKKwl7CisJY2FzZSBSRU1PVEVfTkRJU19JTklUSUFMSVpFX01TRzoKKwkJREVCVUcoIiVzOiBSRU1PVEVfTkRJU19JTklUSUFMSVpFX01TR1xuIiwgCisJCQlfX0ZVTkNUSU9OX18gKTsKKwkJcGFyYW1zLT5zdGF0ZSA9IFJORElTX0lOSVRJQUxJWkVEOworCQlyZXR1cm4gIHJuZGlzX2luaXRfcmVzcG9uc2UgKGNvbmZpZ05yLAorCQkJCQkgICAgIChybmRpc19pbml0X21zZ190eXBlICopIGJ1Zik7CisJCQorCWNhc2UgUkVNT1RFX05ESVNfSEFMVF9NU0c6CisJCURFQlVHKCIlczogUkVNT1RFX05ESVNfSEFMVF9NU0dcbiIsCisJCQlfX0ZVTkNUSU9OX18gKTsKKwkJcGFyYW1zLT5zdGF0ZSA9IFJORElTX1VOSU5JVElBTElaRUQ7CisJCWlmIChwYXJhbXMtPmRldikgeworCQkJbmV0aWZfY2Fycmllcl9vZmYgKHBhcmFtcy0+ZGV2KTsKKwkJCW5ldGlmX3N0b3BfcXVldWUgKHBhcmFtcy0+ZGV2KTsKKwkJfQorCQlyZXR1cm4gMDsKKwkJCisJY2FzZSBSRU1PVEVfTkRJU19RVUVSWV9NU0c6CisJCXJldHVybiBybmRpc19xdWVyeV9yZXNwb25zZSAoY29uZmlnTnIsIAorCQkJCQkgICAgIChybmRpc19xdWVyeV9tc2dfdHlwZSAqKSBidWYpOworCQkKKwljYXNlIFJFTU9URV9ORElTX1NFVF9NU0c6CisJCXJldHVybiBybmRpc19zZXRfcmVzcG9uc2UgKGNvbmZpZ05yLCAKKwkJCQkJICAgKHJuZGlzX3NldF9tc2dfdHlwZSAqKSBidWYpOworCQkKKwljYXNlIFJFTU9URV9ORElTX1JFU0VUX01TRzoKKwkJREVCVUcoIiVzOiBSRU1PVEVfTkRJU19SRVNFVF9NU0dcbiIsIAorCQkJX19GVU5DVElPTl9fICk7CisJCXJldHVybiBybmRpc19yZXNldF9yZXNwb25zZSAoY29uZmlnTnIsCisJCQkJCSAgICAgKHJuZGlzX3Jlc2V0X21zZ190eXBlICopIGJ1Zik7CisKKwljYXNlIFJFTU9URV9ORElTX0tFRVBBTElWRV9NU0c6CisJCS8qIEZvciBVU0I6IGhvc3QgZG9lcyB0aGlzIGV2ZXJ5IDUgc2Vjb25kcyAqLworI2lmZGVmCVZFUkJPU0UKKwkJREVCVUcoIiVzOiBSRU1PVEVfTkRJU19LRUVQQUxJVkVfTVNHXG4iLCAKKwkJCV9fRlVOQ1RJT05fXyApOworI2VuZGlmCisJCXJldHVybiBybmRpc19rZWVwYWxpdmVfcmVzcG9uc2UgKGNvbmZpZ05yLAorCQkJCQkJIChybmRpc19rZWVwYWxpdmVfbXNnX3R5cGUgKikgCisJCQkJCQkgYnVmKTsKKwkJCisJZGVmYXVsdDogCisJCS8qIEF0IGxlYXN0IFdpbmRvd3MgWFAgZW1pdHMgc29tZSB1bmRlZmluZWQgUk5ESVMgbWVzc2FnZXMuCisJCSAqIEluIG9uZSBjYXNlIHRob3NlIG1lc3NhZ2VzIHNlZW1lZCB0byByZWxhdGUgdG8gdGhlIGhvc3QKKwkJICogc3VzcGVuZGluZyBpdHNlbGYuCisJCSAqLworCQlwcmludGsgKEtFUk5fV0FSTklORworCQkJIiVzOiB1bmtub3duIFJORElTIG1lc3NhZ2UgMHglMDhYIGxlbiAlZFxuIiwgCisJCQlfX0ZVTkNUSU9OX18gLCBNc2dUeXBlLCBNc2dMZW5ndGgpOworCQl7CisJCQl1bnNpZ25lZCBpOworCQkJZm9yIChpID0gMDsgaSA8IE1zZ0xlbmd0aDsgaSArPSAxNikgeworCQkJCURFQlVHICgiJTAzZDogIgorCQkJCQkiICUwMnggJTAyeCAlMDJ4ICUwMngiCisJCQkJCSIgJTAyeCAlMDJ4ICUwMnggJTAyeCIKKwkJCQkJIiAlMDJ4ICUwMnggJTAyeCAlMDJ4IgorCQkJCQkiICUwMnggJTAyeCAlMDJ4ICUwMngiCisJCQkJCSJcbiIsCisJCQkJCWksCisJCQkJCWJ1ZltpXSwgYnVmIFtpKzFdLAorCQkJCQkJYnVmW2krMl0sIGJ1ZltpKzNdLAorCQkJCQlidWZbaSs0XSwgYnVmIFtpKzVdLAorCQkJCQkJYnVmW2krNl0sIGJ1ZltpKzddLAorCQkJCQlidWZbaSs4XSwgYnVmIFtpKzldLAorCQkJCQkJYnVmW2krMTBdLCBidWZbaSsxMV0sCisJCQkJCWJ1ZltpKzEyXSwgYnVmIFtpKzEzXSwKKwkJCQkJCWJ1ZltpKzE0XSwgYnVmW2krMTVdKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisJCisJcmV0dXJuIC1FTk9UU1VQUDsKK30KKworaW50IHJuZGlzX3JlZ2lzdGVyIChpbnQgKCogcm5kaXNfY29udHJvbF9hY2spIChzdHJ1Y3QgbmV0X2RldmljZSAqKSkKK3sKKwl1OCBpOworCQorCWZvciAoaSA9IDA7IGkgPCBSTkRJU19NQVhfQ09ORklHUzsgaSsrKSB7CisJCWlmICghcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2ldLnVzZWQpIHsKKwkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtpXS51c2VkID0gMTsKKwkJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtpXS5hY2sgPSBybmRpc19jb250cm9sX2FjazsKKwkJCURFQlVHKCIlczogY29uZmlnTnIgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBpKTsKKwkJCXJldHVybiBpOworCQl9CisJfQorCURFQlVHKCJmYWlsZWRcbiIpOworCQorCXJldHVybiAtMTsKK30KKwordm9pZCBybmRpc19kZXJlZ2lzdGVyIChpbnQgY29uZmlnTnIpCit7CisJREVCVUcoIiVzOiBcbiIsIF9fRlVOQ1RJT05fXyApOworCQorCWlmIChjb25maWdOciA+PSBSTkRJU19NQVhfQ09ORklHUykgcmV0dXJuOworCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0udXNlZCA9IDA7CisJCisJcmV0dXJuOworfQorCitpbnQgcm5kaXNfc2V0X3BhcmFtX2RldiAodTggY29uZmlnTnIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIAorCQkJIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cykKK3sKKwlERUJVRygiJXM6XG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlpZiAoIWRldiB8fCAhc3RhdHMpIHJldHVybiAtMTsKKwlpZiAoY29uZmlnTnIgPj0gUk5ESVNfTUFYX0NPTkZJR1MpIHJldHVybiAtMTsKKwkKKwlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLmRldiA9IGRldjsKKwlybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnN0YXRzID0gc3RhdHM7CisJCisJcmV0dXJuIDA7Cit9CisKK2ludCBybmRpc19zZXRfcGFyYW1fdmVuZG9yICh1OCBjb25maWdOciwgdTMyIHZlbmRvcklELCBjb25zdCBjaGFyICp2ZW5kb3JEZXNjcikKK3sKKwlERUJVRygiJXM6XG4iLCBfX0ZVTkNUSU9OX18gKTsKKwlpZiAoIXZlbmRvckRlc2NyKSByZXR1cm4gLTE7CisJaWYgKGNvbmZpZ05yID49IFJORElTX01BWF9DT05GSUdTKSByZXR1cm4gLTE7CisJCisJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS52ZW5kb3JJRCA9IHZlbmRvcklEOworCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0udmVuZG9yRGVzY3IgPSB2ZW5kb3JEZXNjcjsKKwkKKwlyZXR1cm4gMDsKK30KKworaW50IHJuZGlzX3NldF9wYXJhbV9tZWRpdW0gKHU4IGNvbmZpZ05yLCB1MzIgbWVkaXVtLCB1MzIgc3BlZWQpCit7CisJREVCVUcoIiVzOlxuIiwgX19GVU5DVElPTl9fICk7CisJaWYgKGNvbmZpZ05yID49IFJORElTX01BWF9DT05GSUdTKSByZXR1cm4gLTE7CisJCisJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5tZWRpdW0gPSBtZWRpdW07CisJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zcGVlZCA9IHNwZWVkOworCQorCXJldHVybiAwOworfQorCit2b2lkIHJuZGlzX2FkZF9oZHIgKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHJuZGlzX3BhY2tldF9tc2dfdHlwZQkqaGVhZGVyOworCisJaWYgKCFza2IpCisJCXJldHVybjsKKwloZWFkZXIgPSAodm9pZCAqKSBza2JfcHVzaCAoc2tiLCBzaXplb2YgKmhlYWRlcik7CisJbWVtc2V0IChoZWFkZXIsIDAsIHNpemVvZiAqaGVhZGVyKTsKKwloZWFkZXItPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSk7CisJaGVhZGVyLT5NZXNzYWdlTGVuZ3RoID0gY3B1X3RvX2xlMzIoc2tiLT5sZW4pOworCWhlYWRlci0+RGF0YU9mZnNldCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDM2KTsKKwloZWFkZXItPk9PQkRhdGFPZmZzZXQgPSBjcHVfdG9fbGUzMihza2ItPmxlbiAtIDQ0KTsKK30KKwordm9pZCBybmRpc19mcmVlX3Jlc3BvbnNlIChpbnQgY29uZmlnTnIsIHU4ICpidWYpCit7CisJcm5kaXNfcmVzcF90CQkqcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCSphY3QsICp0bXA7CisJCisJbGlzdF9mb3JfZWFjaF9zYWZlIChhY3QsIHRtcCwgCisJCQkgICAgJihybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnJlc3BfcXVldWUpKQorCXsKKwkJciA9IGxpc3RfZW50cnkgKGFjdCwgcm5kaXNfcmVzcF90LCBsaXN0KTsKKwkJaWYgKHIgJiYgci0+YnVmID09IGJ1ZikgeworCQkJbGlzdF9kZWwgKCZyLT5saXN0KTsKKwkJCWtmcmVlIChyKTsKKwkJfQorCX0KK30KKwordTggKnJuZGlzX2dldF9uZXh0X3Jlc3BvbnNlIChpbnQgY29uZmlnTnIsIHUzMiAqbGVuZ3RoKQoreworCXJuZGlzX3Jlc3BfdAkJKnI7CisJc3RydWN0IGxpc3RfaGVhZCAJKmFjdCwgKnRtcDsKKwkKKwlpZiAoIWxlbmd0aCkgcmV0dXJuIE5VTEw7CisJCisJbGlzdF9mb3JfZWFjaF9zYWZlIChhY3QsIHRtcCwgCisJCQkgICAgJihybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnJlc3BfcXVldWUpKQorCXsKKwkJciA9IGxpc3RfZW50cnkgKGFjdCwgcm5kaXNfcmVzcF90LCBsaXN0KTsKKwkJaWYgKCFyLT5zZW5kKSB7CisJCQlyLT5zZW5kID0gMTsKKwkJCSpsZW5ndGggPSByLT5sZW5ndGg7CisJCQlyZXR1cm4gci0+YnVmOworCQl9CisJfQorCQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgcm5kaXNfcmVzcF90ICpybmRpc19hZGRfcmVzcG9uc2UgKGludCBjb25maWdOciwgdTMyIGxlbmd0aCkKK3sKKwlybmRpc19yZXNwX3QJKnI7CisJCisJciA9IGttYWxsb2MgKHNpemVvZiAocm5kaXNfcmVzcF90KSArIGxlbmd0aCwgR0ZQX0FUT01JQyk7CisJaWYgKCFyKSByZXR1cm4gTlVMTDsKKwkKKwlyLT5idWYgPSAodTggKikgKHIgKyAxKTsKKwlyLT5sZW5ndGggPSBsZW5ndGg7CisJci0+c2VuZCA9IDA7CisJCisJbGlzdF9hZGRfdGFpbCAoJnItPmxpc3QsIAorCQkgICAgICAgJihybmRpc19wZXJfZGV2X3BhcmFtcyBbY29uZmlnTnJdLnJlc3BfcXVldWUpKTsKKwlyZXR1cm4gcjsKK30KKworaW50IHJuZGlzX3JtX2hkciAodTggKmJ1ZiwgdTMyICpsZW5ndGgpCit7CisJdTMyIGksIG1lc3NhZ2VMZW4sIGRhdGFPZmZzZXQ7CisJX19sZTMyICp0bXA7CisJCisJdG1wID0gKF9fbGUzMiAqKSBidWY7IAorCisJaWYgKCFidWYgfHwgIWxlbmd0aCkgcmV0dXJuIC0xOworCWlmIChsZTMyX3RvX2NwdXAodG1wKyspICE9IDEpIHJldHVybiAtMTsKKwkKKwltZXNzYWdlTGVuID0gbGUzMl90b19jcHVwKHRtcCsrKTsKKwlkYXRhT2Zmc2V0ID0gbGUzMl90b19jcHVwKHRtcCsrKSArIDg7CisKKwlpZiAobWVzc2FnZUxlbiA8IGRhdGFPZmZzZXQgfHwgbWVzc2FnZUxlbiA+ICpsZW5ndGgpIHJldHVybiAtMTsKKwkKKwlmb3IgKGkgPSBkYXRhT2Zmc2V0OyBpIDwgbWVzc2FnZUxlbjsgaSsrKQorCQlidWYgW2kgLSBkYXRhT2Zmc2V0XSA9IGJ1ZiBbaV07CisJCQorCSpsZW5ndGggPSBtZXNzYWdlTGVuIC0gZGF0YU9mZnNldDsKKwkKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTCisKK3N0YXRpYyBpbnQgcm5kaXNfcHJvY19yZWFkIChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwgCisJCSAgICAgdm9pZCAqZGF0YSkKK3sKKwljaGFyICpvdXQgPSBwYWdlOworCWludCBsZW47CisJcm5kaXNfcGFyYW1zICpwYXJhbSA9IChybmRpc19wYXJhbXMgKikgZGF0YTsKKwkKKwlvdXQgKz0gc25wcmludGYgKG91dCwgY291bnQsIAorCQkJICJDb25maWcgTnIuICVkXG4iCisJCQkgInVzZWQgICAgICA6ICVzXG4iCisJCQkgInN0YXRlICAgICA6ICVzXG4iCisJCQkgIm1lZGl1bSAgICA6IDB4JTA4WFxuIgorCQkJICJzcGVlZCAgICAgOiAlZFxuIgorCQkJICJjYWJsZSAgICAgOiAlc1xuIgorCQkJICJ2ZW5kb3IgSUQgOiAweCUwOFhcbiIKKwkJCSAidmVuZG9yICAgIDogJXNcbiIsIAorCQkJIHBhcmFtLT5jb25maWduciwgKHBhcmFtLT51c2VkKSA/ICJ5IiA6ICJuIiwgCisJCQkgKHsgY2hhciAqcyA9ICI/IjsKKwkJCSBzd2l0Y2ggKHBhcmFtLT5zdGF0ZSkgeworCQkJIGNhc2UgUk5ESVNfVU5JTklUSUFMSVpFRDoKKwkJCQlzID0gIlJORElTX1VOSU5JVElBTElaRUQiOyBicmVhazsKKwkJCSBjYXNlIFJORElTX0lOSVRJQUxJWkVEOgorCQkJCXMgPSAiUk5ESVNfSU5JVElBTElaRUQiOyBicmVhazsKKwkJCSBjYXNlIFJORElTX0RBVEFfSU5JVElBTElaRUQ6CisJCQkJcyA9ICJSTkRJU19EQVRBX0lOSVRJQUxJWkVEIjsgYnJlYWs7CisJCQl9OyBzOyB9KSwKKwkJCSBwYXJhbS0+bWVkaXVtLCAKKwkJCSAocGFyYW0tPm1lZGlhX3N0YXRlKSA/IDAgOiBwYXJhbS0+c3BlZWQqMTAwLCAKKwkJCSAocGFyYW0tPm1lZGlhX3N0YXRlKSA/ICJkaXNjb25uZWN0ZWQiIDogImNvbm5lY3RlZCIsCisJCQkgcGFyYW0tPnZlbmRvcklELCBwYXJhbS0+dmVuZG9yRGVzY3IpOyAgICAgIAorCQorCWxlbiA9IG91dCAtIHBhZ2U7CisJbGVuIC09IG9mZjsKKwkKKwlpZiAobGVuIDwgY291bnQpIHsKKwkJKmVvZiA9IDE7CisJCWlmIChsZW4gPD0gMCkKKwkJCXJldHVybiAwOworCX0gZWxzZQorCQlsZW4gPSBjb3VudDsKKwkKKwkqc3RhcnQgPSBwYWdlICsgb2ZmOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgcm5kaXNfcHJvY193cml0ZSAoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIAorCQkgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQoreworCXJuZGlzX3BhcmFtcyAqcCA9IGRhdGE7CisJdTMyIHNwZWVkID0gMDsKKwlpbnQgaSwgZmxfc3BlZWQgPSAwOworCQorCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWNoYXIgYzsKKwkJaWYgKGdldF91c2VyKGMsIGJ1ZmZlcikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJzAnOgorCQljYXNlICcxJzoKKwkJY2FzZSAnMic6CisJCWNhc2UgJzMnOgorCQljYXNlICc0JzoKKwkJY2FzZSAnNSc6CisJCWNhc2UgJzYnOgorCQljYXNlICc3JzoKKwkJY2FzZSAnOCc6CisJCWNhc2UgJzknOgorCQkJZmxfc3BlZWQgPSAxOworCQkJc3BlZWQgPSBzcGVlZCoxMCArIGMgLSAnMCc7CisJCQlicmVhazsKKwkJY2FzZSAnQyc6CisJCWNhc2UgJ2MnOgorCQkJcm5kaXNfc2lnbmFsX2Nvbm5lY3QgKHAtPmNvbmZpZ25yKTsKKwkJCWJyZWFrOworCQljYXNlICdEJzoKKwkJY2FzZSAnZCc6CisJCQlybmRpc19zaWduYWxfZGlzY29ubmVjdChwLT5jb25maWducik7CisJCQlicmVhazsKKwkJZGVmYXVsdDogCisJCQlpZiAoZmxfc3BlZWQpIHAtPnNwZWVkID0gc3BlZWQ7CisJCQllbHNlIERFQlVHICgiJWMgaXMgbm90IHZhbGlkXG4iLCBjKTsKKwkJCWJyZWFrOworCQl9CisJCQorCQlidWZmZXIrKzsKKwl9CisJCisJcmV0dXJuIGNvdW50OworfQorCisjZGVmaW5lCU5BTUVfVEVNUExBVEUJImRyaXZlci9ybmRpcy0lMDNkIgorCitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpybmRpc19jb25uZWN0X3N0YXRlIFtSTkRJU19NQVhfQ09ORklHU107CisKKyNlbmRpZgkvKiBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyAqLworCisKK2ludCBfX2luaXQgcm5kaXNfaW5pdCAodm9pZCkKK3sKKwl1OCBpOworCisJZm9yIChpID0gMDsgaSA8IFJORElTX01BWF9DT05GSUdTOyBpKyspIHsKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUworCQljaGFyIG5hbWUgWzIwXTsKKworCQlzcHJpbnRmIChuYW1lLCBOQU1FX1RFTVBMQVRFLCBpKTsKKwkJaWYgKCEocm5kaXNfY29ubmVjdF9zdGF0ZSBbaV0KKwkJCQk9IGNyZWF0ZV9wcm9jX2VudHJ5IChuYW1lLCAwNjYwLCBOVUxMKSkpIAorCQl7CisJCQlERUJVRyAoIiVzIDpyZW1vdmUgZW50cmllcyIsIF9fRlVOQ1RJT05fXyk7CisJCQl3aGlsZSAoaSkgeworCQkJCXNwcmludGYgKG5hbWUsIE5BTUVfVEVNUExBVEUsIC0taSk7CisJCQkJcmVtb3ZlX3Byb2NfZW50cnkgKG5hbWUsIE5VTEwpOworCQkJfQorCQkJREVCVUcgKCJcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlybmRpc19jb25uZWN0X3N0YXRlIFtpXS0+bmxpbmsgPSAxOworCQlybmRpc19jb25uZWN0X3N0YXRlIFtpXS0+d3JpdGVfcHJvYyA9IHJuZGlzX3Byb2Nfd3JpdGU7CisJCXJuZGlzX2Nvbm5lY3Rfc3RhdGUgW2ldLT5yZWFkX3Byb2MgPSBybmRpc19wcm9jX3JlYWQ7CisJCXJuZGlzX2Nvbm5lY3Rfc3RhdGUgW2ldLT5kYXRhID0gKHZvaWQgKikKKwkJCQkocm5kaXNfcGVyX2Rldl9wYXJhbXMgKyBpKTsKKyNlbmRpZgorCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbaV0uY29uZmlnbnIgPSBpOworCQlybmRpc19wZXJfZGV2X3BhcmFtcyBbaV0udXNlZCA9IDA7CisJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtpXS5zdGF0ZSA9IFJORElTX1VOSU5JVElBTElaRUQ7CisJCXJuZGlzX3Blcl9kZXZfcGFyYW1zIFtpXS5tZWRpYV9zdGF0ZQorCQkJCT0gTkRJU19NRURJQV9TVEFURV9ESVNDT05ORUNURUQ7CisJCUlOSVRfTElTVF9IRUFEICgmKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtpXS5yZXNwX3F1ZXVlKSk7CisJfQorCQorCXJldHVybiAwOworfQorCit2b2lkIHJuZGlzX2V4aXQgKHZvaWQpCit7CisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMKKwl1OCBpOworCWNoYXIgbmFtZSBbMjBdOworCQorCWZvciAoaSA9IDA7IGkgPCBSTkRJU19NQVhfQ09ORklHUzsgaSsrKSB7CisJCXNwcmludGYgKG5hbWUsIE5BTUVfVEVNUExBVEUsIGkpOworCQlyZW1vdmVfcHJvY19lbnRyeSAobmFtZSwgTlVMTCk7CisJfQorI2VuZGlmCit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIyNTAxOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ybmRpcy5oCkBAIC0wLDAgKzEsMzQ4IEBACisvKiAKKyAqIFJORElTCURlZmluaXRpb25zIGZvciBSZW1vdGUgTkRJUworICogCisgKiBWZXJzaW9uOgkkSWQ6IHJuZGlzLmgsdiAxLjE1IDIwMDQvMDMvMjUgMjE6MzM6NDYgcm9iZXJ0IEV4cCAkCisgKiAKKyAqIEF1dGhvcnM6CUJlbmVkaWt0IFNwcmFuZ2VyLCBQZW5ndXRyb25peAorICogCQlSb2JlcnQgU2Nod2ViZWwsIFBlbmd1dHJvbml4CisgKiAKKyAqIAkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gCisgKiAKKyAqCQlUaGlzIHNvZnR3YXJlIHdhcyBvcmlnaW5hbGx5IGRldmVsb3BlZCBpbiBjb25mb3JtYW5jZSB3aXRoCisgKgkJTWljcm9zb2Z0J3MgUmVtb3RlIE5ESVMgU3BlY2lmaWNhdGlvbiBMaWNlbnNlIEFncmVlbWVudC4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9STkRJU19ICisjZGVmaW5lIF9MSU5VWF9STkRJU19ICisKKyNpbmNsdWRlICJuZGlzLmgiCisKKyNkZWZpbmUgUk5ESVNfTUFYSU1VTV9GUkFNRV9TSVpFCTE1MTgKKyNkZWZpbmUgUk5ESVNfTUFYX1RPVEFMX1NJWkUJCTE1NTgKKworLyogUmVtb3RlIE5ESVMgVmVyc2lvbnMgKi8KKyNkZWZpbmUgUk5ESVNfTUFKT1JfVkVSU0lPTgkJMQorI2RlZmluZSBSTkRJU19NSU5PUl9WRVJTSU9OCQkwCisKKy8qIFN0YXR1cyBWYWx1ZXMgKi8KKyNkZWZpbmUgUk5ESVNfU1RBVFVTX1NVQ0NFU1MJCTB4MDAwMDAwMDBVCS8qIFN1Y2Nlc3MgICAgICAgICAgICovCisjZGVmaW5lIFJORElTX1NUQVRVU19GQUlMVVJFCQkweEMwMDAwMDAxVQkvKiBVbnNwZWNpZmllZCBlcnJvciAqLworI2RlZmluZSBSTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBCTB4QzAwMTAwMTVVCS8qIEludmFsaWQgZGF0YSAgICAgICovCisjZGVmaW5lIFJORElTX1NUQVRVU19OT1RfU1VQUE9SVEVECTB4QzAwMDAwQkJVCS8qIFVuc3VwcG9ydGVkIHJlcXVlc3QgKi8KKyNkZWZpbmUgUk5ESVNfU1RBVFVTX01FRElBX0NPTk5FQ1QJMHg0MDAxMDAwQlUJLyogRGV2aWNlIGNvbm5lY3RlZCAgKi8KKyNkZWZpbmUgUk5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QJMHg0MDAxMDAwQ1UJLyogRGV2aWNlIGRpc2Nvbm5lY3RlZCAqLworLyogRm9yIGFsbCBub3Qgc3BlY2lmaWVkIHN0YXR1cyBtZXNzYWdlczoKKyAqIFJORElTX1NUQVRVU19YeHggLT4gTkRJU19TVEFUVVNfWHh4IAorICovCisKKy8qIE1lc3NhZ2UgU2V0IGZvciBDb25uZWN0aW9ubGVzcyAoODAyLjMpIERldmljZXMgKi8KKyNkZWZpbmUgUkVNT1RFX05ESVNfSU5JVElBTElaRV9NU0cJMHgwMDAwMDAwMlUJLyogSW5pdGlhbGl6ZSBkZXZpY2UgKi8KKyNkZWZpbmUgUkVNT1RFX05ESVNfSEFMVF9NU0cJCTB4MDAwMDAwMDNVCisjZGVmaW5lIFJFTU9URV9ORElTX1FVRVJZX01TRwkJMHgwMDAwMDAwNFUKKyNkZWZpbmUgUkVNT1RFX05ESVNfU0VUX01TRwkJMHgwMDAwMDAwNVUKKyNkZWZpbmUgUkVNT1RFX05ESVNfUkVTRVRfTVNHCQkweDAwMDAwMDA2VQorI2RlZmluZSBSRU1PVEVfTkRJU19JTkRJQ0FURV9TVEFUVVNfTVNHCTB4MDAwMDAwMDdVCisjZGVmaW5lIFJFTU9URV9ORElTX0tFRVBBTElWRV9NU0cJMHgwMDAwMDAwOFUKKworLyogTWVzc2FnZSBjb21wbGV0aW9uICovCisjZGVmaW5lIFJFTU9URV9ORElTX0lOSVRJQUxJWkVfQ01QTFQJMHg4MDAwMDAwMlUKKyNkZWZpbmUgUkVNT1RFX05ESVNfUVVFUllfQ01QTFQJCTB4ODAwMDAwMDRVCisjZGVmaW5lIFJFTU9URV9ORElTX1NFVF9DTVBMVAkJMHg4MDAwMDAwNVUKKyNkZWZpbmUgUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQJCTB4ODAwMDAwMDZVCisjZGVmaW5lIFJFTU9URV9ORElTX0tFRVBBTElWRV9DTVBMVAkweDgwMDAwMDA4VQorCisvKiBEZXZpY2UgRmxhZ3MgKi8KKyNkZWZpbmUgUk5ESVNfREZfQ09OTkVDVElPTkxFU1MJCTB4MDAwMDAwMDFVCisjZGVmaW5lIFJORElTX0RGX0NPTk5FQ1RJT05fT1JJRU5URUQJMHgwMDAwMDAwMlUKKworI2RlZmluZSBSTkRJU19NRURJVU1fODAyXzMJCTB4MDAwMDAwMDBVCisKKy8qIGZyb20gZHJpdmVycy9uZXQvc2s5OGxpbi9oL3NrZ2Vwbm1pLmggKi8KKyNkZWZpbmUgT0lEX1BOUF9DQVBBQklMSVRJRVMJCQkweEZEMDEwMTAwCisjZGVmaW5lIE9JRF9QTlBfU0VUX1BPV0VSCQkJMHhGRDAxMDEwMQorI2RlZmluZSBPSURfUE5QX1FVRVJZX1BPV0VSCQkJMHhGRDAxMDEwMgorI2RlZmluZSBPSURfUE5QX0FERF9XQUtFX1VQX1BBVFRFUk4JCTB4RkQwMTAxMDMKKyNkZWZpbmUgT0lEX1BOUF9SRU1PVkVfV0FLRV9VUF9QQVRURVJOCQkweEZEMDEwMTA0CisjZGVmaW5lIE9JRF9QTlBfRU5BQkxFX1dBS0VfVVAJCQkweEZEMDEwMTA2CisKKworLyogc3VwcG9ydGVkIE9JRHMgKi8KK3N0YXRpYyBjb25zdCB1MzIgb2lkX3N1cHBvcnRlZF9saXN0IFtdID0gCit7CisJLyogdGhlIGdlbmVyYWwgc3R1ZmYgKi8KKwlPSURfR0VOX1NVUFBPUlRFRF9MSVNULAorCU9JRF9HRU5fSEFSRFdBUkVfU1RBVFVTLAorCU9JRF9HRU5fTUVESUFfU1VQUE9SVEVELAorCU9JRF9HRU5fTUVESUFfSU5fVVNFLAorCU9JRF9HRU5fTUFYSU1VTV9GUkFNRV9TSVpFLAorCU9JRF9HRU5fTElOS19TUEVFRCwKKwlPSURfR0VOX1RSQU5TTUlUX0JMT0NLX1NJWkUsCisJT0lEX0dFTl9SRUNFSVZFX0JMT0NLX1NJWkUsCisJT0lEX0dFTl9WRU5ET1JfSUQsCisJT0lEX0dFTl9WRU5ET1JfREVTQ1JJUFRJT04sCisJT0lEX0dFTl9WRU5ET1JfRFJJVkVSX1ZFUlNJT04sCisJT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVIsCisJT0lEX0dFTl9NQVhJTVVNX1RPVEFMX1NJWkUsCisJT0lEX0dFTl9NRURJQV9DT05ORUNUX1NUQVRVUywKKwlPSURfR0VOX1BIWVNJQ0FMX01FRElVTSwKKyNpZiAwCisJT0lEX0dFTl9STkRJU19DT05GSUdfUEFSQU1FVEVSLAorI2VuZGlmCisJCisJLyogdGhlIHN0YXRpc3RpY2FsIHN0dWZmICovCisJT0lEX0dFTl9YTUlUX09LLAorCU9JRF9HRU5fUkNWX09LLAorCU9JRF9HRU5fWE1JVF9FUlJPUiwKKwlPSURfR0VOX1JDVl9FUlJPUiwKKwlPSURfR0VOX1JDVl9OT19CVUZGRVIsCisjaWZkZWYJUk5ESVNfT1BUSU9OQUxfU1RBVFMKKwlPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1hNSVQsCisJT0lEX0dFTl9ESVJFQ1RFRF9GUkFNRVNfWE1JVCwKKwlPSURfR0VOX01VTFRJQ0FTVF9CWVRFU19YTUlULAorCU9JRF9HRU5fTVVMVElDQVNUX0ZSQU1FU19YTUlULAorCU9JRF9HRU5fQlJPQURDQVNUX0JZVEVTX1hNSVQsCisJT0lEX0dFTl9CUk9BRENBU1RfRlJBTUVTX1hNSVQsCisJT0lEX0dFTl9ESVJFQ1RFRF9CWVRFU19SQ1YsCisJT0lEX0dFTl9ESVJFQ1RFRF9GUkFNRVNfUkNWLAorCU9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1JDViwKKwlPSURfR0VOX01VTFRJQ0FTVF9GUkFNRVNfUkNWLAorCU9JRF9HRU5fQlJPQURDQVNUX0JZVEVTX1JDViwKKwlPSURfR0VOX0JST0FEQ0FTVF9GUkFNRVNfUkNWLAorCU9JRF9HRU5fUkNWX0NSQ19FUlJPUiwKKwlPSURfR0VOX1RSQU5TTUlUX1FVRVVFX0xFTkdUSCwKKyNlbmRpZgkvKiBSTkRJU19PUFRJT05BTF9TVEFUUyAqLworCisgICAgCS8qIG1hbmRhdG9yeSA4MDIuMyAqLworCS8qIHRoZSBnZW5lcmFsIHN0dWZmICovCisJT0lEXzgwMl8zX1BFUk1BTkVOVF9BRERSRVNTLAorCU9JRF84MDJfM19DVVJSRU5UX0FERFJFU1MsCisJT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNULAorCU9JRF84MDJfM19NQUNfT1BUSU9OUywKKwlPSURfODAyXzNfTUFYSU1VTV9MSVNUX1NJWkUsCisJCisJLyogdGhlIHN0YXRpc3RpY2FsIHN0dWZmICovCisJT0lEXzgwMl8zX1JDVl9FUlJPUl9BTElHTk1FTlQsCisJT0lEXzgwMl8zX1hNSVRfT05FX0NPTExJU0lPTiwKKwlPSURfODAyXzNfWE1JVF9NT1JFX0NPTExJU0lPTlMsCisjaWZkZWYJUk5ESVNfT1BUSU9OQUxfU1RBVFMKKwlPSURfODAyXzNfWE1JVF9ERUZFUlJFRCwKKwlPSURfODAyXzNfWE1JVF9NQVhfQ09MTElTSU9OUywKKwlPSURfODAyXzNfUkNWX09WRVJSVU4sCisJT0lEXzgwMl8zX1hNSVRfVU5ERVJSVU4sCisJT0lEXzgwMl8zX1hNSVRfSEVBUlRCRUFUX0ZBSUxVUkUsCisJT0lEXzgwMl8zX1hNSVRfVElNRVNfQ1JTX0xPU1QsCisJT0lEXzgwMl8zX1hNSVRfTEFURV9DT0xMSVNJT05TLAorI2VuZGlmCS8qIFJORElTX09QVElPTkFMX1NUQVRTICovCisKKyNpZmRlZglSTkRJU19QTQorCS8qIFBNIGFuZCB3YWtldXAgYXJlIG1hbmRhdG9yeSBmb3IgVVNCOiAqLworCisJLyogcG93ZXIgbWFuYWdlbWVudCAqLworCU9JRF9QTlBfQ0FQQUJJTElUSUVTLAorCU9JRF9QTlBfUVVFUllfUE9XRVIsCisJT0lEX1BOUF9TRVRfUE9XRVIsCisKKwkvKiB3YWtlIHVwIGhvc3QgKi8KKwlPSURfUE5QX0VOQUJMRV9XQUtFX1VQLAorCU9JRF9QTlBfQUREX1dBS0VfVVBfUEFUVEVSTiwKKwlPSURfUE5QX1JFTU9WRV9XQUtFX1VQX1BBVFRFUk4sCisjZW5kaWYKK307CisKKwordHlwZWRlZiBzdHJ1Y3Qgcm5kaXNfaW5pdF9tc2dfdHlwZSAKK3sKKwlfX2xlMzIJTWVzc2FnZVR5cGU7CisJX19sZTMyCU1lc3NhZ2VMZW5ndGg7CisJX19sZTMyCVJlcXVlc3RJRDsKKwlfX2xlMzIJTWFqb3JWZXJzaW9uOworCV9fbGUzMglNaW5vclZlcnNpb247CisJX19sZTMyCU1heFRyYW5zZmVyU2l6ZTsKK30gcm5kaXNfaW5pdF9tc2dfdHlwZTsKKwordHlwZWRlZiBzdHJ1Y3Qgcm5kaXNfaW5pdF9jbXBsdF90eXBlCit7CisJX19sZTMyCU1lc3NhZ2VUeXBlOworCV9fbGUzMglNZXNzYWdlTGVuZ3RoOworCV9fbGUzMglSZXF1ZXN0SUQ7CisJX19sZTMyCVN0YXR1czsKKwlfX2xlMzIJTWFqb3JWZXJzaW9uOworCV9fbGUzMglNaW5vclZlcnNpb247CisJX19sZTMyCURldmljZUZsYWdzOworCV9fbGUzMglNZWRpdW07CisJX19sZTMyCU1heFBhY2tldHNQZXJUcmFuc2ZlcjsKKwlfX2xlMzIJTWF4VHJhbnNmZXJTaXplOworCV9fbGUzMglQYWNrZXRBbGlnbm1lbnRGYWN0b3I7CisJX19sZTMyCUFGTGlzdE9mZnNldDsKKwlfX2xlMzIJQUZMaXN0U2l6ZTsKK30gcm5kaXNfaW5pdF9jbXBsdF90eXBlOworCit0eXBlZGVmIHN0cnVjdCBybmRpc19oYWx0X21zZ190eXBlCit7CisJX19sZTMyCU1lc3NhZ2VUeXBlOworCV9fbGUzMglNZXNzYWdlTGVuZ3RoOworCV9fbGUzMglSZXF1ZXN0SUQ7Cit9IHJuZGlzX2hhbHRfbXNnX3R5cGU7CisKK3R5cGVkZWYgc3RydWN0IHJuZGlzX3F1ZXJ5X21zZ190eXBlCit7CisJX19sZTMyCU1lc3NhZ2VUeXBlOworCV9fbGUzMglNZXNzYWdlTGVuZ3RoOworCV9fbGUzMglSZXF1ZXN0SUQ7CisJX19sZTMyCU9JRDsKKwlfX2xlMzIJSW5mb3JtYXRpb25CdWZmZXJMZW5ndGg7CisJX19sZTMyCUluZm9ybWF0aW9uQnVmZmVyT2Zmc2V0OworCV9fbGUzMglEZXZpY2VWY0hhbmRsZTsKK30gcm5kaXNfcXVlcnlfbXNnX3R5cGU7CisKK3R5cGVkZWYgc3RydWN0IHJuZGlzX3F1ZXJ5X2NtcGx0X3R5cGUKK3sKKwlfX2xlMzIJTWVzc2FnZVR5cGU7CisJX19sZTMyCU1lc3NhZ2VMZW5ndGg7CisJX19sZTMyCVJlcXVlc3RJRDsKKwlfX2xlMzIJU3RhdHVzOworCV9fbGUzMglJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aDsKKwlfX2xlMzIJSW5mb3JtYXRpb25CdWZmZXJPZmZzZXQ7Cit9IHJuZGlzX3F1ZXJ5X2NtcGx0X3R5cGU7CisKK3R5cGVkZWYgc3RydWN0IHJuZGlzX3NldF9tc2dfdHlwZQoreworCV9fbGUzMglNZXNzYWdlVHlwZTsKKwlfX2xlMzIJTWVzc2FnZUxlbmd0aDsKKwlfX2xlMzIJUmVxdWVzdElEOworCV9fbGUzMglPSUQ7CisJX19sZTMyCUluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoOworCV9fbGUzMglJbmZvcm1hdGlvbkJ1ZmZlck9mZnNldDsKKwlfX2xlMzIJRGV2aWNlVmNIYW5kbGU7Cit9IHJuZGlzX3NldF9tc2dfdHlwZTsKKwordHlwZWRlZiBzdHJ1Y3Qgcm5kaXNfc2V0X2NtcGx0X3R5cGUKK3sKKwlfX2xlMzIJTWVzc2FnZVR5cGU7CisJX19sZTMyCU1lc3NhZ2VMZW5ndGg7CisJX19sZTMyCVJlcXVlc3RJRDsKKwlfX2xlMzIJU3RhdHVzOworfSBybmRpc19zZXRfY21wbHRfdHlwZTsKKwordHlwZWRlZiBzdHJ1Y3Qgcm5kaXNfcmVzZXRfbXNnX3R5cGUKK3sKKwlfX2xlMzIJTWVzc2FnZVR5cGU7CisJX19sZTMyCU1lc3NhZ2VMZW5ndGg7CisJX19sZTMyCVJlc2VydmVkOworfSBybmRpc19yZXNldF9tc2dfdHlwZTsKKwordHlwZWRlZiBzdHJ1Y3Qgcm5kaXNfcmVzZXRfY21wbHRfdHlwZQoreworCV9fbGUzMglNZXNzYWdlVHlwZTsKKwlfX2xlMzIJTWVzc2FnZUxlbmd0aDsKKwlfX2xlMzIJU3RhdHVzOworCV9fbGUzMglBZGRyZXNzaW5nUmVzZXQ7Cit9IHJuZGlzX3Jlc2V0X2NtcGx0X3R5cGU7CisKK3R5cGVkZWYgc3RydWN0IHJuZGlzX2luZGljYXRlX3N0YXR1c19tc2dfdHlwZQoreworCV9fbGUzMglNZXNzYWdlVHlwZTsKKwlfX2xlMzIJTWVzc2FnZUxlbmd0aDsKKwlfX2xlMzIJU3RhdHVzOworCV9fbGUzMglTdGF0dXNCdWZmZXJMZW5ndGg7CisJX19sZTMyCVN0YXR1c0J1ZmZlck9mZnNldDsKK30gcm5kaXNfaW5kaWNhdGVfc3RhdHVzX21zZ190eXBlOworCit0eXBlZGVmIHN0cnVjdCBybmRpc19rZWVwYWxpdmVfbXNnX3R5cGUKK3sKKwlfX2xlMzIJTWVzc2FnZVR5cGU7CisJX19sZTMyCU1lc3NhZ2VMZW5ndGg7CisJX19sZTMyCVJlcXVlc3RJRDsKK30gcm5kaXNfa2VlcGFsaXZlX21zZ190eXBlOworCit0eXBlZGVmIHN0cnVjdCBybmRpc19rZWVwYWxpdmVfY21wbHRfdHlwZQoreworCV9fbGUzMglNZXNzYWdlVHlwZTsKKwlfX2xlMzIJTWVzc2FnZUxlbmd0aDsKKwlfX2xlMzIJUmVxdWVzdElEOworCV9fbGUzMglTdGF0dXM7Cit9IHJuZGlzX2tlZXBhbGl2ZV9jbXBsdF90eXBlOworCitzdHJ1Y3Qgcm5kaXNfcGFja2V0X21zZ190eXBlCit7CisJX19sZTMyCU1lc3NhZ2VUeXBlOworCV9fbGUzMglNZXNzYWdlTGVuZ3RoOworCV9fbGUzMglEYXRhT2Zmc2V0OworCV9fbGUzMglEYXRhTGVuZ3RoOworCV9fbGUzMglPT0JEYXRhT2Zmc2V0OworCV9fbGUzMglPT0JEYXRhTGVuZ3RoOworCV9fbGUzMglOdW1PT0JEYXRhRWxlbWVudHM7CisJX19sZTMyCVBlclBhY2tldEluZm9PZmZzZXQ7CisJX19sZTMyCVBlclBhY2tldEluZm9MZW5ndGg7CisJX19sZTMyCVZjSGFuZGxlOworCV9fbGUzMglSZXNlcnZlZDsKK307CisKK3N0cnVjdCBybmRpc19jb25maWdfcGFyYW1ldGVyCit7CisJX19sZTMyCVBhcmFtZXRlck5hbWVPZmZzZXQ7CisJX19sZTMyCVBhcmFtZXRlck5hbWVMZW5ndGg7CisJX19sZTMyCVBhcmFtZXRlclR5cGU7CisJX19sZTMyCVBhcmFtZXRlclZhbHVlT2Zmc2V0OworCV9fbGUzMglQYXJhbWV0ZXJWYWx1ZUxlbmd0aDsKK307CisKKy8qIGltcGxlbWVudGF0aW9uIHNwZWNpZmljICovCitlbnVtIHJuZGlzX3N0YXRlCit7CisJUk5ESVNfVU5JTklUSUFMSVpFRCwKKwlSTkRJU19JTklUSUFMSVpFRCwKKwlSTkRJU19EQVRBX0lOSVRJQUxJWkVELAorfTsKKwordHlwZWRlZiBzdHJ1Y3Qgcm5kaXNfcmVzcF90Cit7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXU4CQkJKmJ1ZjsKKwl1MzIJCQlsZW5ndGg7CisJaW50CQkJc2VuZDsKK30gcm5kaXNfcmVzcF90OworCit0eXBlZGVmIHN0cnVjdCBybmRpc19wYXJhbXMKK3sKKwl1OAkJCWNvbmZpZ25yOworCWludAkJCXVzZWQ7CisJZW51bSBybmRpc19zdGF0ZQlzdGF0ZTsKKwl1MzIJCQlmaWx0ZXI7CisJdTMyCQkJbWVkaXVtOworCXUzMgkJCXNwZWVkOworCXUzMgkJCW1lZGlhX3N0YXRlOworCWNvbnN0IHU4CQkqaG9zdF9tYWM7CisJc3RydWN0IG5ldF9kZXZpY2UgCSpkZXY7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzOworCXUzMgkJCXZlbmRvcklEOworCWNvbnN0IGNoYXIJCSp2ZW5kb3JEZXNjcjsKKwlpbnQgCQkJKCphY2spIChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJlc3BfcXVldWU7Cit9IHJuZGlzX3BhcmFtczsKKworLyogUk5ESVMgTWVzc2FnZSBwYXJzZXIgYW5kIG90aGVyIHVzZWxlc3MgZnVuY3Rpb25zICovCitpbnQgIHJuZGlzX21zZ19wYXJzZXIgKHU4IGNvbmZpZ05yLCB1OCAqYnVmKTsKK2ludCAgcm5kaXNfcmVnaXN0ZXIgKGludCAoKnJuZGlzX2NvbnRyb2xfYWNrKSAoc3RydWN0IG5ldF9kZXZpY2UgKikpOwordm9pZCBybmRpc19kZXJlZ2lzdGVyIChpbnQgY29uZmlnTnIpOworaW50ICBybmRpc19zZXRfcGFyYW1fZGV2ICh1OCBjb25maWdOciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMpOworaW50ICBybmRpc19zZXRfcGFyYW1fdmVuZG9yICh1OCBjb25maWdOciwgdTMyIHZlbmRvcklELCAKKwkJCSAgICBjb25zdCBjaGFyICp2ZW5kb3JEZXNjcik7CitpbnQgIHJuZGlzX3NldF9wYXJhbV9tZWRpdW0gKHU4IGNvbmZpZ05yLCB1MzIgbWVkaXVtLCB1MzIgc3BlZWQpOwordm9pZCBybmRpc19hZGRfaGRyIChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCAgcm5kaXNfcm1faGRyICh1OCAqYnVmLCB1MzIgKmxlbmd0aCk7Cit1OCAgICpybmRpc19nZXRfbmV4dF9yZXNwb25zZSAoaW50IGNvbmZpZ05yLCB1MzIgKmxlbmd0aCk7Cit2b2lkIHJuZGlzX2ZyZWVfcmVzcG9uc2UgKGludCBjb25maWdOciwgdTggKmJ1Zik7CisKK2ludCAgcm5kaXNfc2lnbmFsX2Nvbm5lY3QgKGludCBjb25maWdOcik7CitpbnQgIHJuZGlzX3NpZ25hbF9kaXNjb25uZWN0IChpbnQgY29uZmlnTnIpOworaW50ICBybmRpc19zdGF0ZSAoaW50IGNvbmZpZ05yKTsKK2V4dGVybiB2b2lkIHJuZGlzX3NldF9ob3N0X21hYyAoaW50IGNvbmZpZ05yLCBjb25zdCB1OCAqYWRkcik7CisKK2ludCBfX2luaXQgcm5kaXNfaW5pdCAodm9pZCk7Cit2b2lkIHJuZGlzX2V4aXQgKHZvaWQpOworCisjZW5kaWYgIC8qIF9MSU5VWF9STkRJU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFmM2Y3OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYwpAQCAtMCwwICsxLDI0MzYgQEAKKy8qCisgKiBnX3NlcmlhbC5jIC0tIFVTQiBnYWRnZXQgc2VyaWFsIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDAzIChDKSBBbCBCb3JjaGVycyAoYWxib3JjaGVyc0BzdGVpbmVycG9pbnQuY29tKQorICoKKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBpbiBwYXJ0IG9uIHRoZSBHYWRnZXQgWmVybyBkcml2ZXIsIHdoaWNoCisgKiBpcyBDb3B5cmlnaHQgKEMpIDIwMDMgYnkgRGF2aWQgQnJvd25lbGwsIGFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGFsc28gYm9ycm93cyBmcm9tIHVzYnNlcmlhbC5jLCB3aGljaCBpcworICogQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAwMiBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAwIFBldGVyIEJlcmdlciAocGJlcmdlckBicmltc29uLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMCBBbCBCb3JjaGVycyAoYWxib3JjaGVyc0BzdGVpbmVycG9pbnQuY29tKQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgKCJHUEwiKSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhhdCBMaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjaW5jbHVkZSA8bGludXgvdXNiX2NoOS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9jZGMuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CisKKyNpbmNsdWRlICJnYWRnZXRfY2hpcHMuaCIKKworCisvKiBXYWl0IENvbmQgKi8KKworI2RlZmluZSBfX3dhaXRfY29uZF9pbnRlcnJ1cHRpYmxlKHdxLCBjb25kaXRpb24sIGxvY2ssIGZsYWdzLCByZXQpCVwKK2RvIHsJCQkJCQkJCQlcCisJd2FpdF9xdWV1ZV90IF9fd2FpdDsJCQkJCQlcCisJaW5pdF93YWl0cXVldWVfZW50cnkoJl9fd2FpdCwgY3VycmVudCk7CQkJCVwKKwkJCQkJCQkJCVwKKwlhZGRfd2FpdF9xdWV1ZSgmd3EsICZfX3dhaXQpOwkJCQkJXAorCWZvciAoOzspIHsJCQkJCQkJXAorCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwkJCVwKKwkJaWYgKGNvbmRpdGlvbikJCQkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsJCQkJXAorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncyk7CQlcCisJCQlzY2hlZHVsZSgpOwkJCQkJXAorCQkJc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpOwkJCVwKKwkJCWNvbnRpbnVlOwkJCQkJXAorCQl9CQkJCQkJCVwKKwkJcmV0ID0gLUVSRVNUQVJUU1lTOwkJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsJCQkJCVwKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmd3EsICZfX3dhaXQpOwkJCQlcCit9IHdoaWxlICgwKQorCQorI2RlZmluZSB3YWl0X2NvbmRfaW50ZXJydXB0aWJsZSh3cSwgY29uZGl0aW9uLCBsb2NrLCBmbGFncykJCVwKKyh7CQkJCQkJCQkJXAorCWludCBfX3JldCA9IDA7CQkJCQkJCVwKKwlpZiAoIShjb25kaXRpb24pKQkJCQkJCVwKKwkJX193YWl0X2NvbmRfaW50ZXJydXB0aWJsZSh3cSwgY29uZGl0aW9uLCBsb2NrLCBmbGFncywJXAorCQkJCQkJX19yZXQpOwkJCVwKKwlfX3JldDsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX193YWl0X2NvbmRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLCBjb25kaXRpb24sIGxvY2ssIGZsYWdzLCAJXAorCQkJCQkJdGltZW91dCwgcmV0KQkJXAorZG8gewkJCQkJCQkJCVwKKwlzaWduZWQgbG9uZyBfX3RpbWVvdXQgPSB0aW1lb3V0OwkJCQlcCisJd2FpdF9xdWV1ZV90IF9fd2FpdDsJCQkJCQlcCisJaW5pdF93YWl0cXVldWVfZW50cnkoJl9fd2FpdCwgY3VycmVudCk7CQkJCVwKKwkJCQkJCQkJCVwKKwlhZGRfd2FpdF9xdWV1ZSgmd3EsICZfX3dhaXQpOwkJCQkJXAorCWZvciAoOzspIHsJCQkJCQkJXAorCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwkJCVwKKwkJaWYgKF9fdGltZW91dCA9PSAwKQkJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQlpZiAoY29uZGl0aW9uKQkJCQkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJaWYgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewkJCQlcCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKTsJCVwKKwkJCV9fdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQoX190aW1lb3V0KTsJXAorCQkJc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpOwkJCVwKKwkJCWNvbnRpbnVlOwkJCQkJXAorCQl9CQkJCQkJCVwKKwkJcmV0ID0gLUVSRVNUQVJUU1lTOwkJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsJCQkJCVwKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmd3EsICZfX3dhaXQpOwkJCQlcCit9IHdoaWxlICgwKQorCQorI2RlZmluZSB3YWl0X2NvbmRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLCBjb25kaXRpb24sIGxvY2ssIGZsYWdzLAlcCisJCQkJCQl0aW1lb3V0KQkJXAorKHsJCQkJCQkJCQlcCisJaW50IF9fcmV0ID0gMDsJCQkJCQkJXAorCWlmICghKGNvbmRpdGlvbikpCQkJCQkJXAorCQlfX3dhaXRfY29uZF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgbG9jaywJXAorCQkJCQkJZmxhZ3MsIHRpbWVvdXQsIF9fcmV0KTsJXAorCV9fcmV0OwkJCQkJCQkJXAorfSkKKworCisvKiBEZWZpbmVzICovCisKKyNkZWZpbmUgR1NfVkVSU0lPTl9TVFIJCQkidjIuMCIKKyNkZWZpbmUgR1NfVkVSU0lPTl9OVU0JCQkweDAyMDAKKworI2RlZmluZSBHU19MT05HX05BTUUJCQkiR2FkZ2V0IFNlcmlhbCIKKyNkZWZpbmUgR1NfU0hPUlRfTkFNRQkJCSJnX3NlcmlhbCIKKworI2RlZmluZSBHU19NQUpPUgkJCTEyNworI2RlZmluZSBHU19NSU5PUl9TVEFSVAkJCTAKKworI2RlZmluZSBHU19OVU1fUE9SVFMJCQkxNgorCisjZGVmaW5lIEdTX05VTV9DT05GSUdTCQkJMQorI2RlZmluZSBHU19OT19DT05GSUdfSUQJCQkwCisjZGVmaW5lIEdTX0JVTEtfQ09ORklHX0lECQkxCisjZGVmaW5lIEdTX0FDTV9DT05GSUdfSUQJCTIKKworI2RlZmluZSBHU19NQVhfTlVNX0lOVEVSRkFDRVMJCTIKKyNkZWZpbmUgR1NfQlVMS19JTlRFUkZBQ0VfSUQJCTAKKyNkZWZpbmUgR1NfQ09OVFJPTF9JTlRFUkZBQ0VfSUQJCTAKKyNkZWZpbmUgR1NfREFUQV9JTlRFUkZBQ0VfSUQJCTEKKworI2RlZmluZSBHU19NQVhfREVTQ19MRU4JCQkyNTYKKworI2RlZmluZSBHU19ERUZBVUxUX1JFQURfUV9TSVpFCQkzMgorI2RlZmluZSBHU19ERUZBVUxUX1dSSVRFX1FfU0laRQkJMzIKKworI2RlZmluZSBHU19ERUZBVUxUX1dSSVRFX0JVRl9TSVpFCTgxOTIKKyNkZWZpbmUgR1NfVE1QX0JVRl9TSVpFCQkJODE5MgorCisjZGVmaW5lIEdTX0NMT1NFX1RJTUVPVVQJCTE1CisKKyNkZWZpbmUgR1NfREVGQVVMVF9VU0VfQUNNCQkwCisKKyNkZWZpbmUgR1NfREVGQVVMVF9EVEVfUkFURQkJOTYwMAorI2RlZmluZSBHU19ERUZBVUxUX0RBVEFfQklUUwkJOAorI2RlZmluZSBHU19ERUZBVUxUX1BBUklUWQkJVVNCX0NEQ19OT19QQVJJVFkKKyNkZWZpbmUgR1NfREVGQVVMVF9DSEFSX0ZPUk1BVAkJVVNCX0NEQ18xX1NUT1BfQklUUworCisvKiBzZWxlY3QgaGlnaHNwZWVkL2Z1bGxzcGVlZCwgaGlkaW5nIGhpZ2hzcGVlZCBpZiBub3QgY29uZmlndXJlZCAqLworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorI2RlZmluZSBHU19TUEVFRF9TRUxFQ1QoaXNfaHMsaHMsZnMpICgoaXNfaHMpID8gKGhzKSA6IChmcykpCisjZWxzZQorI2RlZmluZSBHU19TUEVFRF9TRUxFQ1QoaXNfaHMsaHMsZnMpIChmcykKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgKi8KKworLyogZGVidWcgc2V0dGluZ3MgKi8KKyNpZmRlZiBHU19ERUJVRworc3RhdGljIGludCBkZWJ1ZyA9IDE7CisKKyNkZWZpbmUgZ3NfZGVidWcoZm9ybWF0LCBhcmcuLi4pIFwKKwlkbyB7IGlmIChkZWJ1ZykgcHJpbnRrKEtFUk5fREVCVUcgZm9ybWF0LCAjIyBhcmcpOyB9IHdoaWxlKDApCisjZGVmaW5lIGdzX2RlYnVnX2xldmVsKGxldmVsLCBmb3JtYXQsIGFyZy4uLikgXAorCWRvIHsgaWYgKGRlYnVnPj1sZXZlbCkgcHJpbnRrKEtFUk5fREVCVUcgZm9ybWF0LCAjIyBhcmcpOyB9IHdoaWxlKDApCisKKyNlbHNlCisKKyNkZWZpbmUgZ3NfZGVidWcoZm9ybWF0LCBhcmcuLi4pIFwKKwlkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgZ3NfZGVidWdfbGV2ZWwobGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSBcCisJZG8geyB9IHdoaWxlKDApCisKKyNlbmRpZiAvKiBHU19ERUJVRyAqLworCisvKiBUaGFua3MgdG8gTmV0Q2hpcCBUZWNobm9sb2dpZXMgZm9yIGRvbmF0aW5nIHRoaXMgcHJvZHVjdCBJRC4KKyAqCisgKiBETyBOT1QgUkVVU0UgVEhFU0UgSURzIHdpdGggYSBwcm90b2NvbC1pbmNvbXBhdGlibGUgZHJpdmVyISEgIEV2ZXIhIQorICogSW5zdGVhZDogIGFsbG9jYXRlIHlvdXIgb3duLCB1c2luZyBub3JtYWwgVVNCLUlGIHByb2NlZHVyZXMuCisgKi8KKyNkZWZpbmUgR1NfVkVORE9SX0lECQkJMHgwNTI1CS8qIE5ldENoaXAgKi8KKyNkZWZpbmUgR1NfUFJPRFVDVF9JRAkJCTB4YTRhNgkvKiBMaW51eC1VU0IgU2VyaWFsIEdhZGdldCAqLworI2RlZmluZSBHU19DRENfUFJPRFVDVF9JRAkJMHhhNGE3CS8qIC4uLiBhcyBDREMtQUNNICovCisKKyNkZWZpbmUgR1NfTE9HMl9OT1RJRllfSU5URVJWQUwJCTUJLyogMSA8PCA1ID09IDMyIG1zZWMgKi8KKyNkZWZpbmUgR1NfTk9USUZZX01BWFBBQ0tFVAkJOAorCisKKy8qIFN0cnVjdHVyZXMgKi8KKworc3RydWN0IGdzX2RldjsKKworLyogY2lyY3VsYXIgYnVmZmVyICovCitzdHJ1Y3QgZ3NfYnVmIHsKKwl1bnNpZ25lZCBpbnQJCWJ1Zl9zaXplOworCWNoYXIJCQkqYnVmX2J1ZjsKKwljaGFyCQkJKmJ1Zl9nZXQ7CisJY2hhcgkJCSpidWZfcHV0OworfTsKKworLyogbGlzdCBvZiByZXF1ZXN0cyAqLworc3RydWN0IGdzX3JlcV9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZAlyZV9lbnRyeTsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlX3JlcTsKK307CisKKy8qIHRoZSBwb3J0IHN0cnVjdHVyZSBob2xkcyBpbmZvIGZvciBlYWNoIHBvcnQsIG9uZSBmb3IgZWFjaCBtaW5vciBudW1iZXIgKi8KK3N0cnVjdCBnc19wb3J0IHsKKwlzdHJ1Y3QgZ3NfZGV2IAkJKnBvcnRfZGV2OwkvKiBwb2ludGVyIHRvIGRldmljZSBzdHJ1Y3QgKi8KKwlzdHJ1Y3QgdHR5X3N0cnVjdAkqcG9ydF90dHk7CS8qIHBvaW50ZXIgdG8gdHR5IHN0cnVjdCAqLworCXNwaW5sb2NrX3QJCXBvcnRfbG9jazsKKwlpbnQgCQkJcG9ydF9udW07CisJaW50CQkJcG9ydF9vcGVuX2NvdW50OworCWludAkJCXBvcnRfaW5fdXNlOwkvKiBvcGVuL2Nsb3NlIGluIHByb2dyZXNzICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJcG9ydF93cml0ZV93YWl0Oy8qIHdhaXRpbmcgdG8gd3JpdGUgKi8KKwlzdHJ1Y3QgZ3NfYnVmCQkqcG9ydF93cml0ZV9idWY7CisJc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcJcG9ydF9saW5lX2NvZGluZzsKK307CisKKy8qIHRoZSBkZXZpY2Ugc3RydWN0dXJlIGhvbGRzIGluZm8gZm9yIHRoZSBVU0IgZGV2aWNlICovCitzdHJ1Y3QgZ3NfZGV2IHsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkqZGV2X2dhZGdldDsJLyogZ2FkZ2V0IGRldmljZSBwb2ludGVyICovCisJc3BpbmxvY2tfdAkJZGV2X2xvY2s7CS8qIGxvY2sgZm9yIHNldC9yZXNldCBjb25maWcgKi8KKwlpbnQJCQlkZXZfY29uZmlnOwkvKiBjb25maWd1cmF0aW9uIG51bWJlciAqLworCXN0cnVjdCB1c2JfZXAJCSpkZXZfbm90aWZ5X2VwOwkvKiBhZGRyZXNzIG9mIG5vdGlmeSBlbmRwb2ludCAqLworCXN0cnVjdCB1c2JfZXAJCSpkZXZfaW5fZXA7CS8qIGFkZHJlc3Mgb2YgaW4gZW5kcG9pbnQgKi8KKwlzdHJ1Y3QgdXNiX2VwCQkqZGV2X291dF9lcDsJLyogYWRkcmVzcyBvZiBvdXQgZW5kcG9pbnQgKi8KKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJCS8qIGRlc2NpcHRvciBvZiBub3RpZnkgZXAgKi8KKwkJCQkqZGV2X25vdGlmeV9lcF9kZXNjOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkJLyogZGVzY3JpcHRvciBvZiBpbiBlbmRwb2ludCAqLworCQkJCSpkZXZfaW5fZXBfZGVzYzsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJCS8qIGRlc2NyaXB0b3Igb2Ygb3V0IGVuZHBvaW50ICovCisJCQkJKmRldl9vdXRfZXBfZGVzYzsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKmRldl9jdHJsX3JlcTsJLyogY29udHJvbCByZXF1ZXN0ICovCisJc3RydWN0IGxpc3RfaGVhZAlkZXZfcmVxX2xpc3Q7CS8qIGxpc3Qgb2Ygd3JpdGUgcmVxdWVzdHMgKi8KKwlpbnQJCQlkZXZfc2NoZWRfcG9ydDsJLyogcm91bmQgcm9iaW4gcG9ydCBzY2hlZHVsZWQgKi8KKwlzdHJ1Y3QgZ3NfcG9ydAkJKmRldl9wb3J0W0dTX05VTV9QT1JUU107IC8qIHRoZSBwb3J0cyAqLworfTsKKworCisvKiBGdW5jdGlvbnMgKi8KKworLyogbW9kdWxlICovCitzdGF0aWMgaW50IF9faW5pdCBnc19tb2R1bGVfaW5pdCh2b2lkKTsKK3N0YXRpYyB2b2lkIF9fZXhpdCBnc19tb2R1bGVfZXhpdCh2b2lkKTsKKworLyogdHR5IGRyaXZlciAqLworc3RhdGljIGludCBnc19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyB2b2lkIGdzX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgZ3Nfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgCisJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOworc3RhdGljIHZvaWQgZ3NfcHV0X2NoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCk7CitzdGF0aWMgdm9pZCBnc19mbHVzaF9jaGFycyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyBpbnQgZ3Nfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyBpbnQgZ3NfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworc3RhdGljIHZvaWQgZ3NfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOworc3RhdGljIHZvaWQgZ3NfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CitzdGF0aWMgdm9pZCBnc19icmVhayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpOworc3RhdGljIGludCAgZ3NfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQgZ3Nfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKm9sZCk7CisKK3N0YXRpYyBpbnQgZ3Nfc2VuZChzdHJ1Y3QgZ3NfZGV2ICpkZXYpOworc3RhdGljIGludCBnc19zZW5kX3BhY2tldChzdHJ1Y3QgZ3NfZGV2ICpkZXYsIGNoYXIgKnBhY2tldCwKKwl1bnNpZ25lZCBpbnQgc2l6ZSk7CitzdGF0aWMgaW50IGdzX3JlY3ZfcGFja2V0KHN0cnVjdCBnc19kZXYgKmRldiwgY2hhciAqcGFja2V0LAorCXVuc2lnbmVkIGludCBzaXplKTsKK3N0YXRpYyB2b2lkIGdzX3JlYWRfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKTsKK3N0YXRpYyB2b2lkIGdzX3dyaXRlX2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSk7CisKKy8qIGdhZGdldCBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgZ3NfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KTsKK3N0YXRpYyB2b2lkIGdzX3VuYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KTsKK3N0YXRpYyBpbnQgZ3Nfc2V0dXAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwKKwljb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKTsKK3N0YXRpYyBpbnQgZ3Nfc2V0dXBfc3RhbmRhcmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwKKwljb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKTsKK3N0YXRpYyBpbnQgZ3Nfc2V0dXBfY2xhc3Moc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwKKwljb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKTsKK3N0YXRpYyB2b2lkIGdzX3NldHVwX2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSk7CitzdGF0aWMgdm9pZCBnc19kaXNjb25uZWN0KHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpOworc3RhdGljIGludCBnc19zZXRfY29uZmlnKHN0cnVjdCBnc19kZXYgKmRldiwgdW5zaWduZWQgY29uZmlnKTsKK3N0YXRpYyB2b2lkIGdzX3Jlc2V0X2NvbmZpZyhzdHJ1Y3QgZ3NfZGV2ICpkZXYpOworc3RhdGljIGludCBnc19idWlsZF9jb25maWdfYnVmKHU4ICpidWYsIGVudW0gdXNiX2RldmljZV9zcGVlZCBzcGVlZCwKKwkJdTggdHlwZSwgdW5zaWduZWQgaW50IGluZGV4LCBpbnQgaXNfb3RnKTsKKworc3RhdGljIHN0cnVjdCB1c2JfcmVxdWVzdCAqZ3NfYWxsb2NfcmVxKHN0cnVjdCB1c2JfZXAgKmVwLCB1bnNpZ25lZCBpbnQgbGVuLAorCWludCBrbWFsbG9jX2ZsYWdzKTsKK3N0YXRpYyB2b2lkIGdzX2ZyZWVfcmVxKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSk7CisKK3N0YXRpYyBzdHJ1Y3QgZ3NfcmVxX2VudHJ5ICpnc19hbGxvY19yZXFfZW50cnkoc3RydWN0IHVzYl9lcCAqZXAsIHVuc2lnbmVkIGxlbiwKKwlpbnQga21hbGxvY19mbGFncyk7CitzdGF0aWMgdm9pZCBnc19mcmVlX3JlcV9lbnRyeShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IGdzX3JlcV9lbnRyeSAqcmVxKTsKKworc3RhdGljIGludCBnc19hbGxvY19wb3J0cyhzdHJ1Y3QgZ3NfZGV2ICpkZXYsIGludCBrbWFsbG9jX2ZsYWdzKTsKK3N0YXRpYyB2b2lkIGdzX2ZyZWVfcG9ydHMoc3RydWN0IGdzX2RldiAqZGV2KTsKKworLyogY2lyY3VsYXIgYnVmZmVyICovCitzdGF0aWMgc3RydWN0IGdzX2J1ZiAqZ3NfYnVmX2FsbG9jKHVuc2lnbmVkIGludCBzaXplLCBpbnQga21hbGxvY19mbGFncyk7CitzdGF0aWMgdm9pZCBnc19idWZfZnJlZShzdHJ1Y3QgZ3NfYnVmICpnYik7CitzdGF0aWMgdm9pZCBnc19idWZfY2xlYXIoc3RydWN0IGdzX2J1ZiAqZ2IpOworc3RhdGljIHVuc2lnbmVkIGludCBnc19idWZfZGF0YV9hdmFpbChzdHJ1Y3QgZ3NfYnVmICpnYik7CitzdGF0aWMgdW5zaWduZWQgaW50IGdzX2J1Zl9zcGFjZV9hdmFpbChzdHJ1Y3QgZ3NfYnVmICpnYik7CitzdGF0aWMgdW5zaWduZWQgaW50IGdzX2J1Zl9wdXQoc3RydWN0IGdzX2J1ZiAqZ2IsIGNvbnN0IGNoYXIgKmJ1ZiwKKwl1bnNpZ25lZCBpbnQgY291bnQpOworc3RhdGljIHVuc2lnbmVkIGludCBnc19idWZfZ2V0KHN0cnVjdCBnc19idWYgKmdiLCBjaGFyICpidWYsCisJdW5zaWduZWQgaW50IGNvdW50KTsKKworLyogZXh0ZXJuYWwgZnVuY3Rpb25zICovCitleHRlcm4gaW50IG5ldDIyODBfc2V0X2ZpZm9fbW9kZShzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LCBpbnQgbW9kZSk7CisKKworLyogR2xvYmFscyAqLworCitzdGF0aWMgc3RydWN0IGdzX2RldiAqZ3NfZGV2aWNlOworCitzdGF0aWMgY29uc3QgY2hhciAqRVBfSU5fTkFNRTsKK3N0YXRpYyBjb25zdCBjaGFyICpFUF9PVVRfTkFNRTsKK3N0YXRpYyBjb25zdCBjaGFyICpFUF9OT1RJRllfTkFNRTsKKworc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUJZ3Nfb3Blbl9jbG9zZV9zZW1bR1NfTlVNX1BPUlRTXTsKKworc3RhdGljIHVuc2lnbmVkIGludCByZWFkX3Ffc2l6ZSA9IEdTX0RFRkFVTFRfUkVBRF9RX1NJWkU7CitzdGF0aWMgdW5zaWduZWQgaW50IHdyaXRlX3Ffc2l6ZSA9IEdTX0RFRkFVTFRfV1JJVEVfUV9TSVpFOworCitzdGF0aWMgdW5zaWduZWQgaW50IHdyaXRlX2J1Zl9zaXplID0gR1NfREVGQVVMVF9XUklURV9CVUZfU0laRTsKKworc3RhdGljIHVuc2lnbmVkIGludCB1c2VfYWNtID0gR1NfREVGQVVMVF9VU0VfQUNNOworCisKKy8qIHR0eSBkcml2ZXIgc3RydWN0ICovCitzdGF0aWMgc3RydWN0IHR0eV9vcGVyYXRpb25zIGdzX3R0eV9vcHMgPSB7CisJLm9wZW4gPQkJCWdzX29wZW4sCisJLmNsb3NlID0JCWdzX2Nsb3NlLAorCS53cml0ZSA9CQlnc193cml0ZSwKKwkucHV0X2NoYXIgPQkJZ3NfcHV0X2NoYXIsCisJLmZsdXNoX2NoYXJzID0JCWdzX2ZsdXNoX2NoYXJzLAorCS53cml0ZV9yb29tID0JCWdzX3dyaXRlX3Jvb20sCisJLmlvY3RsID0JCWdzX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQlnc19zZXRfdGVybWlvcywKKwkudGhyb3R0bGUgPQkJZ3NfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkJZ3NfdW50aHJvdHRsZSwKKwkuYnJlYWtfY3RsID0JCWdzX2JyZWFrLAorCS5jaGFyc19pbl9idWZmZXIgPQlnc19jaGFyc19pbl9idWZmZXIsCit9Oworc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICpnc190dHlfZHJpdmVyOworCisvKiBnYWRnZXQgZHJpdmVyIHN0cnVjdCAqLworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciBnc19nYWRnZXRfZHJpdmVyID0geworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCS5zcGVlZCA9CQlVU0JfU1BFRURfSElHSCwKKyNlbHNlCisJLnNwZWVkID0JCVVTQl9TUEVFRF9GVUxMLAorI2VuZGlmIC8qIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCAqLworCS5mdW5jdGlvbiA9CQlHU19MT05HX05BTUUsCisJLmJpbmQgPQkJCWdzX2JpbmQsCisJLnVuYmluZCA9CQlnc191bmJpbmQsCisJLnNldHVwID0JCWdzX3NldHVwLAorCS5kaXNjb25uZWN0ID0JCWdzX2Rpc2Nvbm5lY3QsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPQkJR1NfU0hPUlRfTkFNRSwKKwkJLyogLnNodXRkb3duID0gLi4uICovCisJCS8qIC5zdXNwZW5kID0gLi4uICAqLworCQkvKiAucmVzdW1lID0gLi4uICAgKi8KKwl9LAorfTsKKworCisvKiBVU0IgZGVzY3JpcHRvcnMgKi8KKworI2RlZmluZSBHU19NQU5VRkFDVFVSRVJfU1RSX0lECTEKKyNkZWZpbmUgR1NfUFJPRFVDVF9TVFJfSUQJMgorI2RlZmluZSBHU19TRVJJQUxfU1RSX0lECTMKKyNkZWZpbmUgR1NfQlVMS19DT05GSUdfU1RSX0lECTQKKyNkZWZpbmUgR1NfQUNNX0NPTkZJR19TVFJfSUQJNQorI2RlZmluZSBHU19DT05UUk9MX1NUUl9JRAk2CisjZGVmaW5lIEdTX0RBVEFfU1RSX0lECQk3CisKKy8qIHN0YXRpYyBzdHJpbmdzLCBpbiBVVEYtOCAqLworc3RhdGljIGNoYXIgbWFudWZhY3R1cmVyWzUwXTsKK3N0YXRpYyBzdHJ1Y3QgdXNiX3N0cmluZyBnc19zdHJpbmdzW10gPSB7CisJeyBHU19NQU5VRkFDVFVSRVJfU1RSX0lELCBtYW51ZmFjdHVyZXIgfSwKKwl7IEdTX1BST0RVQ1RfU1RSX0lELCBHU19MT05HX05BTUUgfSwKKwl7IEdTX1NFUklBTF9TVFJfSUQsICIwIiB9LAorCXsgR1NfQlVMS19DT05GSUdfU1RSX0lELCAiR2FkZ2V0IFNlcmlhbCBCdWxrIiB9LAorCXsgR1NfQUNNX0NPTkZJR19TVFJfSUQsICJHYWRnZXQgU2VyaWFsIENEQyBBQ00iIH0sCisJeyBHU19DT05UUk9MX1NUUl9JRCwgIkdhZGdldCBTZXJpYWwgQ29udHJvbCIgfSwKKwl7IEdTX0RBVEFfU1RSX0lELCAiR2FkZ2V0IFNlcmlhbCBEYXRhIiB9LAorCXsgIH0gLyogZW5kIG9mIGxpc3QgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzIGdzX3N0cmluZ190YWJsZSA9IHsKKwkubGFuZ3VhZ2UgPQkJMHgwNDA5LAkvKiBlbi11cyAqLworCS5zdHJpbmdzID0JCWdzX3N0cmluZ3MsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvciBnc19kZXZpY2VfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfREVWSUNFX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0UsCisJLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCksCisJLmJEZXZpY2VTdWJDbGFzcyA9CTAsCisJLmJEZXZpY2VQcm90b2NvbCA9CTAsCisJLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVORE9SX0lEKSwKKwkuaWRQcm9kdWN0ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfUFJPRFVDVF9JRCksCisJLmlNYW51ZmFjdHVyZXIgPQlHU19NQU5VRkFDVFVSRVJfU1RSX0lELAorCS5pUHJvZHVjdCA9CQlHU19QUk9EVUNUX1NUUl9JRCwKKwkuaVNlcmlhbE51bWJlciA9CUdTX1NFUklBTF9TVFJfSUQsCisJLmJOdW1Db25maWd1cmF0aW9ucyA9CUdTX05VTV9DT05GSUdTLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfb3RnX2Rlc2NyaXB0b3IgZ3Nfb3RnX2Rlc2NyaXB0b3IgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mKGdzX290Z19kZXNjcmlwdG9yKSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX09URywKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9PVEdfU1JQLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgZ3NfYnVsa19jb25maWdfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfQ09ORklHX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DT05GSUcsCisJLyogLndUb3RhbExlbmd0aCBjb21wdXRlZCBkeW5hbWljYWxseSAqLworCS5iTnVtSW50ZXJmYWNlcyA9CTEsCisJLmJDb25maWd1cmF0aW9uVmFsdWUgPQlHU19CVUxLX0NPTkZJR19JRCwKKwkuaUNvbmZpZ3VyYXRpb24gPQlHU19CVUxLX0NPTkZJR19TVFJfSUQsCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfQ09ORklHX0FUVF9PTkUgfCBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCisJLmJNYXhQb3dlciA9CQkxLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgZ3NfYWNtX2NvbmZpZ19kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9DT05GSUdfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NPTkZJRywKKwkvKiAud1RvdGFsTGVuZ3RoIGNvbXB1dGVkIGR5bmFtaWNhbGx5ICovCisJLmJOdW1JbnRlcmZhY2VzID0JMiwKKwkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9CUdTX0FDTV9DT05GSUdfSUQsCisJLmlDb25maWd1cmF0aW9uID0JR1NfQUNNX0NPTkZJR19TVFJfSUQsCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfQ09ORklHX0FUVF9PTkUgfCBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCisJLmJNYXhQb3dlciA9CQkxLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgZ3NfYnVsa19pbnRlcmZhY2VfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfSU5URVJGQUNFX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9JTlRFUkZBQ0UsCisJLmJJbnRlcmZhY2VOdW1iZXIgPQlHU19CVUxLX0lOVEVSRkFDRV9JRCwKKwkuYk51bUVuZHBvaW50cyA9CTIsCisJLmJJbnRlcmZhY2VDbGFzcyA9CVVTQl9DTEFTU19DRENfREFUQSwKKwkuYkludGVyZmFjZVN1YkNsYXNzID0JMCwKKwkuYkludGVyZmFjZVByb3RvY29sID0JMCwKKwkuaUludGVyZmFjZSA9CQlHU19EQVRBX1NUUl9JRCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIGdzX2NvbnRyb2xfaW50ZXJmYWNlX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0lOVEVSRkFDRV9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAorCS5iSW50ZXJmYWNlTnVtYmVyID0JR1NfQ09OVFJPTF9JTlRFUkZBQ0VfSUQsCisJLmJOdW1FbmRwb2ludHMgPQkxLAorCS5iSW50ZXJmYWNlQ2xhc3MgPQlVU0JfQ0xBU1NfQ09NTSwKKwkuYkludGVyZmFjZVN1YkNsYXNzID0JVVNCX0NEQ19TVUJDTEFTU19BQ00sCisJLmJJbnRlcmZhY2VQcm90b2NvbCA9CVVTQl9DRENfQUNNX1BST1RPX0FUX1YyNVRFUiwKKwkuaUludGVyZmFjZSA9CQlHU19DT05UUk9MX1NUUl9JRCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIGdzX2RhdGFfaW50ZXJmYWNlX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0lOVEVSRkFDRV9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAorCS5iSW50ZXJmYWNlTnVtYmVyID0JR1NfREFUQV9JTlRFUkZBQ0VfSUQsCisJLmJOdW1FbmRwb2ludHMgPQkyLAorCS5iSW50ZXJmYWNlQ2xhc3MgPQlVU0JfQ0xBU1NfQ0RDX0RBVEEsCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9CTAsCisJLmJJbnRlcmZhY2VQcm90b2NvbCA9CTAsCisJLmlJbnRlcmZhY2UgPQkJR1NfREFUQV9TVFJfSUQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9jZGNfaGVhZGVyX2Rlc2MgZ3NfaGVhZGVyX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mKGdzX2hlYWRlcl9kZXNjKSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19IRUFERVJfVFlQRSwKKwkuYmNkQ0RDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTEwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2NkY19jYWxsX21nbXRfZGVzY3JpcHRvciBnc19jYWxsX21nbXRfZGVzY3JpcHRvciA9IHsKKwkuYkxlbmd0aCA9ICAJCXNpemVvZihnc19jYWxsX21nbXRfZGVzY3JpcHRvciksCisJLmJEZXNjcmlwdG9yVHlwZSA9IAlVU0JfRFRfQ1NfSU5URVJGQUNFLAorCS5iRGVzY3JpcHRvclN1YlR5cGUgPSAJVVNCX0NEQ19DQUxMX01BTkFHRU1FTlRfVFlQRSwKKwkuYm1DYXBhYmlsaXRpZXMgPSAJMCwKKwkuYkRhdGFJbnRlcmZhY2UgPSAJMSwJLyogaW5kZXggb2YgZGF0YSBpbnRlcmZhY2UgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NkY19hY21fZGVzY3JpcHRvciBnc19hY21fZGVzY3JpcHRvciA9IHsKKwkuYkxlbmd0aCA9ICAJCXNpemVvZihnc19hY21fZGVzY3JpcHRvciksCisJLmJEZXNjcmlwdG9yVHlwZSA9IAlVU0JfRFRfQ1NfSU5URVJGQUNFLAorCS5iRGVzY3JpcHRvclN1YlR5cGUgPSAJVVNCX0NEQ19BQ01fVFlQRSwKKwkuYm1DYXBhYmlsaXRpZXMgPSAJMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2NkY191bmlvbl9kZXNjIGdzX3VuaW9uX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mKGdzX3VuaW9uX2Rlc2MpLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAorCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX1VOSU9OX1RZUEUsCisJLmJNYXN0ZXJJbnRlcmZhY2UwID0JMCwJLyogaW5kZXggb2YgY29udHJvbCBpbnRlcmZhY2UgKi8KKwkuYlNsYXZlSW50ZXJmYWNlMCA9CTEsCS8qIGluZGV4IG9mIGRhdGEgaW50ZXJmYWNlICovCit9OworIAorc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBnc19mdWxsc3BlZWRfbm90aWZ5X2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCisJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19OT1RJRllfTUFYUEFDS0VUKSwKKwkuYkludGVydmFsID0JCTEgPDwgR1NfTE9HMl9OT1RJRllfSU5URVJWQUwsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGdzX2Z1bGxzcGVlZF9pbl9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZ3NfZnVsbHNwZWVkX291dF9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX09VVCwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZ3NfYnVsa19mdWxsc3BlZWRfZnVuY3Rpb25bXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3Nfb3RnX2Rlc2NyaXB0b3IsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2J1bGtfaW50ZXJmYWNlX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2Z1bGxzcGVlZF9pbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19mdWxsc3BlZWRfb3V0X2Rlc2MsCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpnc19hY21fZnVsbHNwZWVkX2Z1bmN0aW9uW10gPSB7CisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX290Z19kZXNjcmlwdG9yLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19jb250cm9sX2ludGVyZmFjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19oZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfY2FsbF9tZ210X2Rlc2NyaXB0b3IsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2FjbV9kZXNjcmlwdG9yLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc191bmlvbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19mdWxsc3BlZWRfbm90aWZ5X2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2RhdGFfaW50ZXJmYWNlX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2Z1bGxzcGVlZF9pbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19mdWxsc3BlZWRfb3V0X2Rlc2MsCisJTlVMTCwKK307CisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZ3NfaGlnaHNwZWVkX25vdGlmeV9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAorCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfTk9USUZZX01BWFBBQ0tFVCksCisJLmJJbnRlcnZhbCA9CQlHU19MT0cyX05PVElGWV9JTlRFUlZBTCs0LAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBnc19oaWdoc3BlZWRfaW5fZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGdzX2hpZ2hzcGVlZF9vdXRfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9xdWFsaWZpZXJfZGVzY3JpcHRvciBnc19xdWFsaWZpZXJfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2Yoc3RydWN0IHVzYl9xdWFsaWZpZXJfZGVzY3JpcHRvciksCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSLAorCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjAwKSwKKwkvKiBhc3N1bWVzIGVwMCB1c2VzIHRoZSBzYW1lIHZhbHVlIGZvciBib3RoIHNwZWVkcyAuLi4gKi8KKwkuYk51bUNvbmZpZ3VyYXRpb25zID0JR1NfTlVNX0NPTkZJR1MsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZ3NfYnVsa19oaWdoc3BlZWRfZnVuY3Rpb25bXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3Nfb3RnX2Rlc2NyaXB0b3IsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2J1bGtfaW50ZXJmYWNlX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2hpZ2hzcGVlZF9pbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19oaWdoc3BlZWRfb3V0X2Rlc2MsCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpnc19hY21faGlnaHNwZWVkX2Z1bmN0aW9uW10gPSB7CisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX290Z19kZXNjcmlwdG9yLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19jb250cm9sX2ludGVyZmFjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19oZWFkZXJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZ3NfY2FsbF9tZ210X2Rlc2NyaXB0b3IsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2FjbV9kZXNjcmlwdG9yLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc191bmlvbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19oaWdoc3BlZWRfbm90aWZ5X2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2RhdGFfaW50ZXJmYWNlX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmdzX2hpZ2hzcGVlZF9pbl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZnc19oaWdoc3BlZWRfb3V0X2Rlc2MsCisJTlVMTCwKK307CisKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgKi8KKworCisvKiBNb2R1bGUgKi8KK01PRFVMRV9ERVNDUklQVElPTihHU19MT05HX05BTUUpOworTU9EVUxFX0FVVEhPUigiQWwgQm9yY2hlcnMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2lmZGVmIEdTX0RFQlVHCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgZGVidWdnaW5nLCAwPW9mZiwgMT1vbiIpOworI2VuZGlmCisKK21vZHVsZV9wYXJhbShyZWFkX3Ffc2l6ZSwgdWludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHJlYWRfcV9zaXplLCAiUmVhZCByZXF1ZXN0IHF1ZXVlIHNpemUsIGRlZmF1bHQ9MzIiKTsKKworbW9kdWxlX3BhcmFtKHdyaXRlX3Ffc2l6ZSwgdWludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHdyaXRlX3Ffc2l6ZSwgIldyaXRlIHJlcXVlc3QgcXVldWUgc2l6ZSwgZGVmYXVsdD0zMiIpOworCittb2R1bGVfcGFyYW0od3JpdGVfYnVmX3NpemUsIHVpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyh3cml0ZV9idWZfc2l6ZSwgIldyaXRlIGJ1ZmZlciBzaXplLCBkZWZhdWx0PTgxOTIiKTsKKworbW9kdWxlX3BhcmFtKHVzZV9hY20sIHVpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyh1c2VfYWNtLCAiVXNlIENEQyBBQ00sIDA9bm8sIDE9eWVzLCBkZWZhdWx0PW5vIik7CisKK21vZHVsZV9pbml0KGdzX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGdzX21vZHVsZV9leGl0KTsKKworLyoKKyogIGdzX21vZHVsZV9pbml0CisqCisqICBSZWdpc3RlciBhcyBhIFVTQiBnYWRnZXQgZHJpdmVyIGFuZCBhIHR0eSBkcml2ZXIuCisqLworc3RhdGljIGludCBfX2luaXQgZ3NfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIoJmdzX2dhZGdldF9kcml2ZXIpOworCWlmIChyZXR2YWwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19tb2R1bGVfaW5pdDogY2Fubm90IHJlZ2lzdGVyIGdhZGdldCBkcml2ZXIsIHJldD0lZFxuIiwgcmV0dmFsKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlnc190dHlfZHJpdmVyID0gYWxsb2NfdHR5X2RyaXZlcihHU19OVU1fUE9SVFMpOworCWlmICghZ3NfdHR5X2RyaXZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisJZ3NfdHR5X2RyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlnc190dHlfZHJpdmVyLT5kcml2ZXJfbmFtZSA9IEdTX1NIT1JUX05BTUU7CisJZ3NfdHR5X2RyaXZlci0+bmFtZSA9ICJ0dHlncyI7CisJZ3NfdHR5X2RyaXZlci0+ZGV2ZnNfbmFtZSA9ICJ1c2IvdHR5Z3MvIjsKKwlnc190dHlfZHJpdmVyLT5tYWpvciA9IEdTX01BSk9SOworCWdzX3R0eV9kcml2ZXItPm1pbm9yX3N0YXJ0ID0gR1NfTUlOT1JfU1RBUlQ7CisJZ3NfdHR5X2RyaXZlci0+dHlwZSA9IFRUWV9EUklWRVJfVFlQRV9TRVJJQUw7CisJZ3NfdHR5X2RyaXZlci0+c3VidHlwZSA9IFNFUklBTF9UWVBFX05PUk1BTDsKKwlnc190dHlfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX05PX0RFVkZTOworCWdzX3R0eV9kcml2ZXItPmluaXRfdGVybWlvcyA9IHR0eV9zdGRfdGVybWlvczsKKwlnc190dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19jZmxhZyA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwl0dHlfc2V0X29wZXJhdGlvbnMoZ3NfdHR5X2RyaXZlciwgJmdzX3R0eV9vcHMpOworCisJZm9yIChpPTA7IGkgPCBHU19OVU1fUE9SVFM7IGkrKykKKwkJc2VtYV9pbml0KCZnc19vcGVuX2Nsb3NlX3NlbVtpXSwgMSk7CisKKwlyZXR2YWwgPSB0dHlfcmVnaXN0ZXJfZHJpdmVyKGdzX3R0eV9kcml2ZXIpOworCWlmIChyZXR2YWwpIHsKKwkJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcigmZ3NfZ2FkZ2V0X2RyaXZlcik7CisJCXB1dF90dHlfZHJpdmVyKGdzX3R0eV9kcml2ZXIpOworCQlwcmludGsoS0VSTl9FUlIgImdzX21vZHVsZV9pbml0OiBjYW5ub3QgcmVnaXN0ZXIgdHR5IGRyaXZlciwgcmV0PSVkXG4iLCByZXR2YWwpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXByaW50ayhLRVJOX0lORk8gImdzX21vZHVsZV9pbml0OiAlcyAlcyBsb2FkZWRcbiIsIEdTX0xPTkdfTkFNRSwgR1NfVkVSU0lPTl9TVFIpOworCXJldHVybiAwOworfQorCisvKgorKiBnc19tb2R1bGVfZXhpdAorKgorKiBVbnJlZ2lzdGVyIGFzIGEgdHR5IGRyaXZlciBhbmQgYSBVU0IgZ2FkZ2V0IGRyaXZlci4KKyovCitzdGF0aWMgdm9pZCBfX2V4aXQgZ3NfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoZ3NfdHR5X2RyaXZlcik7CisJcHV0X3R0eV9kcml2ZXIoZ3NfdHR5X2RyaXZlcik7CisJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcigmZ3NfZ2FkZ2V0X2RyaXZlcik7CisKKwlwcmludGsoS0VSTl9JTkZPICJnc19tb2R1bGVfZXhpdDogJXMgJXMgdW5sb2FkZWRcbiIsIEdTX0xPTkdfTkFNRSwgR1NfVkVSU0lPTl9TVFIpOworfQorCisvKiBUVFkgRHJpdmVyICovCisKKy8qCisgKiBnc19vcGVuCisgKi8KK3N0YXRpYyBpbnQgZ3Nfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcG9ydF9udW07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZ3NfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgZ3NfZGV2ICpkZXY7CisJc3RydWN0IGdzX2J1ZiAqYnVmOworCXN0cnVjdCBzZW1hcGhvcmUgKnNlbTsKKwlpbnQgcmV0OworCisJcG9ydF9udW0gPSB0dHktPmluZGV4OworCisJZ3NfZGVidWcoImdzX29wZW46ICglZCwlcCwlcClcbiIsIHBvcnRfbnVtLCB0dHksIGZpbGUpOworCisJaWYgKHBvcnRfbnVtIDwgMCB8fCBwb3J0X251bSA+PSBHU19OVU1fUE9SVFMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19vcGVuOiAoJWQsJXAsJXApIGludmFsaWQgcG9ydCBudW1iZXJcbiIsCisJCQlwb3J0X251bSwgdHR5LCBmaWxlKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGV2ID0gZ3NfZGV2aWNlOworCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3Nfb3BlbjogKCVkLCVwLCVwKSBOVUxMIGRldmljZSBwb2ludGVyXG4iLAorCQkJcG9ydF9udW0sIHR0eSwgZmlsZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNlbSA9ICZnc19vcGVuX2Nsb3NlX3NlbVtwb3J0X251bV07CisJaWYgKGRvd25faW50ZXJydXB0aWJsZShzZW0pKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkiZ3Nfb3BlbjogKCVkLCVwLCVwKSBpbnRlcnJ1cHRlZCB3YWl0aW5nIGZvciBzZW1hcGhvcmVcbiIsCisJCQlwb3J0X251bSwgdHR5LCBmaWxlKTsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5kZXZfbG9jaywgZmxhZ3MpOworCisJaWYgKGRldi0+ZGV2X2NvbmZpZyA9PSBHU19OT19DT05GSUdfSUQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiZ3Nfb3BlbjogKCVkLCVwLCVwKSBkZXZpY2UgaXMgbm90IGNvbm5lY3RlZFxuIiwKKwkJCXBvcnRfbnVtLCB0dHksIGZpbGUpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGV4aXRfdW5sb2NrX2RldjsKKwl9CisKKwlwb3J0ID0gZGV2LT5kZXZfcG9ydFtwb3J0X251bV07CisKKwlpZiAocG9ydCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3Nfb3BlbjogKCVkLCVwLCVwKSBOVUxMIHBvcnQgcG9pbnRlclxuIiwKKwkJCXBvcnRfbnVtLCB0dHksIGZpbGUpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGV4aXRfdW5sb2NrX2RldjsKKwl9CisKKwlzcGluX2xvY2soJnBvcnQtPnBvcnRfbG9jayk7CisJc3Bpbl91bmxvY2soJmRldi0+ZGV2X2xvY2spOworCisJaWYgKHBvcnQtPnBvcnRfZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19vcGVuOiAoJWQsJXAsJXApIHBvcnQgZGlzY29ubmVjdGVkICgxKVxuIiwKKwkJCXBvcnRfbnVtLCB0dHksIGZpbGUpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGV4aXRfdW5sb2NrX3BvcnQ7CisJfQorCisJaWYgKHBvcnQtPnBvcnRfb3Blbl9jb3VudCA+IDApIHsKKwkJKytwb3J0LT5wb3J0X29wZW5fY291bnQ7CisJCWdzX2RlYnVnKCJnc19vcGVuOiAoJWQsJXAsJXApIGFscmVhZHkgb3BlblxuIiwKKwkJCXBvcnRfbnVtLCB0dHksIGZpbGUpOworCQlyZXQgPSAwOworCQlnb3RvIGV4aXRfdW5sb2NrX3BvcnQ7CisJfQorCisJdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7CisKKwkvKiBtYXJrIHBvcnQgYXMgaW4gdXNlLCB3ZSBjYW4gZHJvcCBwb3J0IGxvY2sgYW5kIHNsZWVwIGlmIG5lY2Vzc2FyeSAqLworCXBvcnQtPnBvcnRfaW5fdXNlID0gMTsKKworCS8qIGFsbG9jYXRlIHdyaXRlIGJ1ZmZlciBvbiBmaXJzdCBvcGVuICovCisJaWYgKHBvcnQtPnBvcnRfd3JpdGVfYnVmID09IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7CisJCWJ1ZiA9IGdzX2J1Zl9hbGxvYyh3cml0ZV9idWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKKworCQkvKiBtaWdodCBoYXZlIGJlZW4gZGlzY29ubmVjdGVkIHdoaWxlIGFzbGVlcCwgY2hlY2sgKi8KKwkJaWYgKHBvcnQtPnBvcnRfZGV2ID09IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJnc19vcGVuOiAoJWQsJXAsJXApIHBvcnQgZGlzY29ubmVjdGVkICgyKVxuIiwKKwkJCQlwb3J0X251bSwgdHR5LCBmaWxlKTsKKwkJCXBvcnQtPnBvcnRfaW5fdXNlID0gMDsKKwkJCXJldCA9IC1FSU87CisJCQlnb3RvIGV4aXRfdW5sb2NrX3BvcnQ7CisJCX0KKworCQlpZiAoKHBvcnQtPnBvcnRfd3JpdGVfYnVmPWJ1ZikgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJnc19vcGVuOiAoJWQsJXAsJXApIGNhbm5vdCBhbGxvY2F0ZSBwb3J0IHdyaXRlIGJ1ZmZlclxuIiwKKwkJCQlwb3J0X251bSwgdHR5LCBmaWxlKTsKKwkJCXBvcnQtPnBvcnRfaW5fdXNlID0gMDsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXRfdW5sb2NrX3BvcnQ7CisJCX0KKworCX0KKworCS8qIHdhaXQgZm9yIGNhcnJpZXIgZGV0ZWN0IChub3QgaW1wbGVtZW50ZWQpICovCisKKwkvKiBtaWdodCBoYXZlIGJlZW4gZGlzY29ubmVjdGVkIHdoaWxlIGFzbGVlcCwgY2hlY2sgKi8KKwlpZiAocG9ydC0+cG9ydF9kZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX29wZW46ICglZCwlcCwlcCkgcG9ydCBkaXNjb25uZWN0ZWQgKDMpXG4iLAorCQkJcG9ydF9udW0sIHR0eSwgZmlsZSk7CisJCXBvcnQtPnBvcnRfaW5fdXNlID0gMDsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBleGl0X3VubG9ja19wb3J0OworCX0KKworCXR0eS0+ZHJpdmVyX2RhdGEgPSBwb3J0OworCXBvcnQtPnBvcnRfdHR5ID0gdHR5OworCXBvcnQtPnBvcnRfb3Blbl9jb3VudCA9IDE7CisJcG9ydC0+cG9ydF9pbl91c2UgPSAwOworCisJZ3NfZGVidWcoImdzX29wZW46ICglZCwlcCwlcCkgY29tcGxldGVkXG4iLCBwb3J0X251bSwgdHR5LCBmaWxlKTsKKworCXJldCA9IDA7CisKK2V4aXRfdW5sb2NrX3BvcnQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7CisJdXAoc2VtKTsKKwlyZXR1cm4gcmV0OworCitleGl0X3VubG9ja19kZXY6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5kZXZfbG9jaywgZmxhZ3MpOworCXVwKHNlbSk7CisJcmV0dXJuIHJldDsKKworfQorCisvKgorICogZ3NfY2xvc2UKKyAqLworc3RhdGljIHZvaWQgZ3NfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHNlbWFwaG9yZSAqc2VtOworCisJaWYgKHBvcnQgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX2Nsb3NlOiBOVUxMIHBvcnQgcG9pbnRlclxuIik7CisJCXJldHVybjsKKwl9CisKKwlnc19kZWJ1ZygiZ3NfY2xvc2U6ICglZCwlcCwlcClcbiIsIHBvcnQtPnBvcnRfbnVtLCB0dHksIGZpbGUpOworCisJc2VtID0gJmdzX29wZW5fY2xvc2Vfc2VtW3BvcnQtPnBvcnRfbnVtXTsKKwlkb3duKHNlbSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7CisKKwlpZiAocG9ydC0+cG9ydF9vcGVuX2NvdW50ID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiZ3NfY2xvc2U6ICglZCwlcCwlcCkgcG9ydCBpcyBhbHJlYWR5IGNsb3NlZFxuIiwKKwkJCXBvcnQtPnBvcnRfbnVtLCB0dHksIGZpbGUpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHBvcnQtPnBvcnRfb3Blbl9jb3VudCA+IDEpIHsKKwkJLS1wb3J0LT5wb3J0X29wZW5fY291bnQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBmcmVlIGRpc2Nvbm5lY3RlZCBwb3J0IG9uIGZpbmFsIGNsb3NlICovCisJaWYgKHBvcnQtPnBvcnRfZGV2ID09IE5VTEwpIHsKKwkJa2ZyZWUocG9ydCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBtYXJrIHBvcnQgYXMgY2xvc2VkIGJ1dCBpbiB1c2UsIHdlIGNhbiBkcm9wIHBvcnQgbG9jayAqLworCS8qIGFuZCBzbGVlcCBpZiBuZWNlc3NhcnkgKi8KKwlwb3J0LT5wb3J0X2luX3VzZSA9IDE7CisJcG9ydC0+cG9ydF9vcGVuX2NvdW50ID0gMDsKKworCS8qIHdhaXQgZm9yIHdyaXRlIGJ1ZmZlciB0byBkcmFpbiwgb3IgKi8KKwkvKiBhdCBtb3N0IEdTX0NMT1NFX1RJTUVPVVQgc2Vjb25kcyAqLworCWlmIChnc19idWZfZGF0YV9hdmFpbChwb3J0LT5wb3J0X3dyaXRlX2J1ZikgPiAwKSB7CisJCXdhaXRfY29uZF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocG9ydC0+cG9ydF93cml0ZV93YWl0LAorCQlwb3J0LT5wb3J0X2RldiA9PSBOVUxMCisJCXx8IGdzX2J1Zl9kYXRhX2F2YWlsKHBvcnQtPnBvcnRfd3JpdGVfYnVmKSA9PSAwLAorCQkmcG9ydC0+cG9ydF9sb2NrLCBmbGFncywgR1NfQ0xPU0VfVElNRU9VVCAqIEhaKTsKKwl9CisKKwkvKiBmcmVlIGRpc2Nvbm5lY3RlZCBwb3J0IG9uIGZpbmFsIGNsb3NlICovCisJLyogKG1pZ2h0IGhhdmUgaGFwcGVuZWQgZHVyaW5nIHRoZSBhYm92ZSBzbGVlcCkgKi8KKwlpZiAocG9ydC0+cG9ydF9kZXYgPT0gTlVMTCkgeworCQlrZnJlZShwb3J0KTsKKwkJZ290byBleGl0OworCX0KKworCWdzX2J1Zl9jbGVhcihwb3J0LT5wb3J0X3dyaXRlX2J1Zik7CisKKwl0dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKKwlwb3J0LT5wb3J0X3R0eSA9IE5VTEw7CisJcG9ydC0+cG9ydF9pbl91c2UgPSAwOworCisJZ3NfZGVidWcoImdzX2Nsb3NlOiAoJWQsJXAsJXApIGNvbXBsZXRlZFxuIiwKKwkJcG9ydC0+cG9ydF9udW0sIHR0eSwgZmlsZSk7CisKK2V4aXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7CisJdXAoc2VtKTsKK30KKworLyoKKyAqIGdzX3dyaXRlCisgKi8KK3N0YXRpYyBpbnQgZ3Nfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaW50IHJldDsKKworCWlmIChwb3J0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc193cml0ZTogTlVMTCBwb3J0IHBvaW50ZXJcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlnc19kZWJ1ZygiZ3Nfd3JpdGU6ICglZCwlcCkgd3JpdGluZyAlZCBieXRlc1xuIiwgcG9ydC0+cG9ydF9udW0sIHR0eSwKKwkJY291bnQpOworCisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCisJaWYgKHBvcnQtPnBvcnRfZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc193cml0ZTogKCVkLCVwKSBwb3J0IGlzIG5vdCBjb25uZWN0ZWRcbiIsCisJCQlwb3J0LT5wb3J0X251bSwgdHR5KTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBleGl0OworCX0KKworCWlmIChwb3J0LT5wb3J0X29wZW5fY291bnQgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX3dyaXRlOiAoJWQsJXApIHBvcnQgaXMgY2xvc2VkXG4iLAorCQkJcG9ydC0+cG9ydF9udW0sIHR0eSk7CisJCXJldCA9IC1FQkFERjsKKwkJZ290byBleGl0OworCX0KKworCWNvdW50ID0gZ3NfYnVmX3B1dChwb3J0LT5wb3J0X3dyaXRlX2J1ZiwgYnVmLCBjb3VudCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKKworCWdzX3NlbmQoZ3NfZGV2aWNlKTsKKworCWdzX2RlYnVnKCJnc193cml0ZTogKCVkLCVwKSB3cm90ZSAlZCBieXRlc1xuIiwgcG9ydC0+cG9ydF9udW0sIHR0eSwKKwkJY291bnQpOworCisJcmV0dXJuIGNvdW50OworCitleGl0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBnc19wdXRfY2hhcgorICovCitzdGF0aWMgdm9pZCBnc19wdXRfY2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyIGNoKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGdzX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCisJaWYgKHBvcnQgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX3B1dF9jaGFyOiBOVUxMIHBvcnQgcG9pbnRlclxuIik7CisJCXJldHVybjsKKwl9CisKKwlnc19kZWJ1ZygiZ3NfcHV0X2NoYXI6ICglZCwlcCkgY2hhcj0weCV4LCBjYWxsZWQgZnJvbSAlcCwgJXAsICVwXG4iLCBwb3J0LT5wb3J0X251bSwgdHR5LCBjaCwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMSksIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygyKSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7CisKKwlpZiAocG9ydC0+cG9ydF9kZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX3B1dF9jaGFyOiAoJWQsJXApIHBvcnQgaXMgbm90IGNvbm5lY3RlZFxuIiwKKwkJCXBvcnQtPnBvcnRfbnVtLCB0dHkpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHBvcnQtPnBvcnRfb3Blbl9jb3VudCA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3NfcHV0X2NoYXI6ICglZCwlcCkgcG9ydCBpcyBjbG9zZWRcbiIsCisJCQlwb3J0LT5wb3J0X251bSwgdHR5KTsKKwkJZ290byBleGl0OworCX0KKworCWdzX2J1Zl9wdXQocG9ydC0+cG9ydF93cml0ZV9idWYsICZjaCwgMSk7CisKK2V4aXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBnc19mbHVzaF9jaGFycworICovCitzdGF0aWMgdm9pZCBnc19mbHVzaF9jaGFycyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGdzX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCisJaWYgKHBvcnQgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX2ZsdXNoX2NoYXJzOiBOVUxMIHBvcnQgcG9pbnRlclxuIik7CisJCXJldHVybjsKKwl9CisKKwlnc19kZWJ1ZygiZ3NfZmx1c2hfY2hhcnM6ICglZCwlcClcbiIsIHBvcnQtPnBvcnRfbnVtLCB0dHkpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCisJaWYgKHBvcnQtPnBvcnRfZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiZ3NfZmx1c2hfY2hhcnM6ICglZCwlcCkgcG9ydCBpcyBub3QgY29ubmVjdGVkXG4iLAorCQkJcG9ydC0+cG9ydF9udW0sIHR0eSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAocG9ydC0+cG9ydF9vcGVuX2NvdW50ID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19mbHVzaF9jaGFyczogKCVkLCVwKSBwb3J0IGlzIGNsb3NlZFxuIiwKKwkJCXBvcnQtPnBvcnRfbnVtLCB0dHkpOworCQlnb3RvIGV4aXQ7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7CisKKwlnc19zZW5kKGdzX2RldmljZSk7CisKKwlyZXR1cm47CisKK2V4aXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBnc193cml0ZV9yb29tCisgKi8KK3N0YXRpYyBpbnQgZ3Nfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCisJaW50IHJvb20gPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGdzX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCisKKwlpZiAocG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKKworCWlmIChwb3J0LT5wb3J0X2RldiAhPSBOVUxMICYmIHBvcnQtPnBvcnRfb3Blbl9jb3VudCA+IDAKKwkmJiBwb3J0LT5wb3J0X3dyaXRlX2J1ZiAhPSBOVUxMKQorCQlyb29tID0gZ3NfYnVmX3NwYWNlX2F2YWlsKHBvcnQtPnBvcnRfd3JpdGVfYnVmKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCisJZ3NfZGVidWcoImdzX3dyaXRlX3Jvb206ICglZCwlcCkgcm9vbT0lZFxuIiwKKwkJcG9ydC0+cG9ydF9udW0sIHR0eSwgcm9vbSk7CisKKwlyZXR1cm4gcm9vbTsKK30KKworLyoKKyAqIGdzX2NoYXJzX2luX2J1ZmZlcgorICovCitzdGF0aWMgaW50IGdzX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCWludCBjaGFycyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisKKwlpZiAocG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5wb3J0X2xvY2ssIGZsYWdzKTsKKworCWlmIChwb3J0LT5wb3J0X2RldiAhPSBOVUxMICYmIHBvcnQtPnBvcnRfb3Blbl9jb3VudCA+IDAKKwkmJiBwb3J0LT5wb3J0X3dyaXRlX2J1ZiAhPSBOVUxMKQorCQljaGFycyA9IGdzX2J1Zl9kYXRhX2F2YWlsKHBvcnQtPnBvcnRfd3JpdGVfYnVmKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCisJZ3NfZGVidWcoImdzX2NoYXJzX2luX2J1ZmZlcjogKCVkLCVwKSBjaGFycz0lZFxuIiwKKwkJcG9ydC0+cG9ydF9udW0sIHR0eSwgY2hhcnMpOworCisJcmV0dXJuIGNoYXJzOworfQorCisvKgorICogZ3NfdGhyb3R0bGUKKyAqLworc3RhdGljIHZvaWQgZ3NfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKK30KKworLyoKKyAqIGdzX3VudGhyb3R0bGUKKyAqLworc3RhdGljIHZvaWQgZ3NfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworfQorCisvKgorICogZ3NfYnJlYWsKKyAqLworc3RhdGljIHZvaWQgZ3NfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQoreworfQorCisvKgorICogZ3NfaW9jdGwKKyAqLworc3RhdGljIGludCBnc19pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGdzX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCisJaWYgKHBvcnQgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX2lvY3RsOiBOVUxMIHBvcnQgcG9pbnRlclxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWdzX2RlYnVnKCJnc19pb2N0bDogKCVkLCVwLCVwKSBjbWQ9MHglNC40eCwgYXJnPSVsdVxuIiwKKwkJcG9ydC0+cG9ydF9udW0sIHR0eSwgZmlsZSwgY21kLCBhcmcpOworCisJLyogaGFuZGxlIGlvY3RscyAqLworCisJLyogY291bGQgbm90IGhhbmRsZSBpb2N0bCAqLworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKKy8qCisgKiBnc19zZXRfdGVybWlvcworICovCitzdGF0aWMgdm9pZCBnc19zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqb2xkKQoreworfQorCisvKgorKiBnc19zZW5kCisqCisqIFRoaXMgZnVuY3Rpb24gZmluZHMgYXZhaWxhYmxlIHdyaXRlIHJlcXVlc3RzLCBjYWxscworKiBnc19zZW5kX3BhY2tldCB0byBmaWxsIHRoZXNlIHBhY2tldHMgd2l0aCBkYXRhLCBhbmQKKyogY29udGludWVzIHVudGlsIGVpdGhlciB0aGVyZSBhcmUgbm8gbW9yZSB3cml0ZSByZXF1ZXN0cworKiBhdmFpbGFibGUgb3Igbm8gbW9yZSBkYXRhIHRvIHNlbmQuICBUaGlzIGZ1bmN0aW9uIGlzCisqIHJ1biB3aGVuZXZlciBkYXRhIGFycml2ZXMgb3Igd3JpdGUgcmVxdWVzdHMgYXJlIGF2YWlsYWJsZS4KKyovCitzdGF0aWMgaW50IGdzX3NlbmQoc3RydWN0IGdzX2RldiAqZGV2KQoreworCWludCByZXQsbGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHVzYl9lcCAqZXA7CisJc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXE7CisJc3RydWN0IGdzX3JlcV9lbnRyeSAqcmVxX2VudHJ5OworCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3Nfc2VuZDogTlVMTCBkZXZpY2UgcG9pbnRlclxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmRldl9sb2NrLCBmbGFncyk7CisKKwllcCA9IGRldi0+ZGV2X2luX2VwOworCisJd2hpbGUoIWxpc3RfZW1wdHkoJmRldi0+ZGV2X3JlcV9saXN0KSkgeworCisJCXJlcV9lbnRyeSA9IGxpc3RfZW50cnkoZGV2LT5kZXZfcmVxX2xpc3QubmV4dCwKKwkJCXN0cnVjdCBnc19yZXFfZW50cnksIHJlX2VudHJ5KTsKKworCQlyZXEgPSByZXFfZW50cnktPnJlX3JlcTsKKworCQlsZW4gPSBnc19zZW5kX3BhY2tldChkZXYsIHJlcS0+YnVmLCBlcC0+bWF4cGFja2V0KTsKKworCQlpZiAobGVuID4gMCkgeworZ3NfZGVidWdfbGV2ZWwoMywgImdzX3NlbmQ6IGxlbj0lZCwgMHglMi4yeCAweCUyLjJ4IDB4JTIuMnggLi4uXG4iLCBsZW4sICooKHVuc2lnbmVkIGNoYXIgKilyZXEtPmJ1ZiksICooKHVuc2lnbmVkIGNoYXIgKilyZXEtPmJ1ZisxKSwgKigodW5zaWduZWQgY2hhciAqKXJlcS0+YnVmKzIpKTsKKwkJCWxpc3RfZGVsKCZyZXFfZW50cnktPnJlX2VudHJ5KTsKKwkJCXJlcS0+bGVuZ3RoID0gbGVuOworCQkJaWYgKChyZXQ9dXNiX2VwX3F1ZXVlKGVwLCByZXEsIEdGUF9BVE9NSUMpKSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJnc19zZW5kOiBjYW5ub3QgcXVldWUgcmVhZCByZXF1ZXN0LCByZXQ9JWRcbiIsCisJCQkJCXJldCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5kZXZfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBnc19zZW5kX3BhY2tldAorICoKKyAqIElmIHRoZXJlIGlzIGRhdGEgdG8gc2VuZCwgYSBwYWNrZXQgaXMgYnVpbHQgaW4gdGhlIGdpdmVuCisgKiBidWZmZXIgYW5kIHRoZSBzaXplIGlzIHJldHVybmVkLiAgSWYgdGhlcmUgaXMgbm8gZGF0YSB0bworICogc2VuZCwgMCBpcyByZXR1cm5lZC4gIElmIHRoZXJlIGlzIGFueSBlcnJvciBhIG5lZ2F0aXZlCisgKiBlcnJvciBudW1iZXIgaXMgcmV0dXJuZWQuCisgKgorICogQ2FsbGVkIGR1cmluZyBVU0IgY29tcGxldGlvbiByb3V0aW5lLCBvbiBpbnRlcnJ1cHQgdGltZS4KKyAqCisgKiBXZSBhc3N1bWUgdGhhdCBkaXNjb25uZWN0IHdpbGwgbm90IGhhcHBlbiB1bnRpbCBhbGwgY29tcGxldGlvbgorICogcm91dGluZXMgaGF2ZSBjb21wbGV0ZWQsIHNvIHdlIGNhbiBhc3N1bWUgdGhhdCB0aGUgZGV2X3BvcnQKKyAqIGFycmF5IGRvZXMgbm90IGNoYW5nZSBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgZ3Nfc2VuZF9wYWNrZXQoc3RydWN0IGdzX2RldiAqZGV2LCBjaGFyICpwYWNrZXQsIHVuc2lnbmVkIGludCBzaXplKQoreworCXVuc2lnbmVkIGludCBsZW47CisJc3RydWN0IGdzX3BvcnQgKnBvcnQ7CisKKwkvKiBURU1QT1JBUlkgLS0gb25seSBwb3J0IDAgaXMgc3VwcG9ydGVkIHJpZ2h0IG5vdyAqLworCXBvcnQgPSBkZXYtPmRldl9wb3J0WzBdOworCisJaWYgKHBvcnQgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJnc19zZW5kX3BhY2tldDogcG9ydD0lZCwgTlVMTCBwb3J0IHBvaW50ZXJcbiIsCisJCQkwKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJc3Bpbl9sb2NrKCZwb3J0LT5wb3J0X2xvY2spOworCisJbGVuID0gZ3NfYnVmX2RhdGFfYXZhaWwocG9ydC0+cG9ydF93cml0ZV9idWYpOworCWlmIChsZW4gPCBzaXplKQorCQlzaXplID0gbGVuOworCisJaWYgKHNpemUgPT0gMCkKKwkJZ290byBleGl0OworCisJc2l6ZSA9IGdzX2J1Zl9nZXQocG9ydC0+cG9ydF93cml0ZV9idWYsIHBhY2tldCwgc2l6ZSk7CisKKwlpZiAocG9ydC0+cG9ydF90dHkpCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+cG9ydF90dHktPndyaXRlX3dhaXQpOworCitleGl0OgorCXNwaW5fdW5sb2NrKCZwb3J0LT5wb3J0X2xvY2spOworCXJldHVybiBzaXplOworfQorCisvKgorICogZ3NfcmVjdl9wYWNrZXQKKyAqCisgKiBDYWxsZWQgZm9yIGVhY2ggVVNCIHBhY2tldCByZWNlaXZlZC4gIFJlYWRzIHRoZSBwYWNrZXQKKyAqIGhlYWRlciBhbmQgc3R1ZmZzIHRoZSBkYXRhIGluIHRoZSBhcHByb3ByaWF0ZSB0dHkgYnVmZmVyLgorICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyLgorICoKKyAqIENhbGxlZCBkdXJpbmcgVVNCIGNvbXBsZXRpb24gcm91dGluZSwgb24gaW50ZXJydXB0IHRpbWUuCisgKgorICogV2UgYXNzdW1lIHRoYXQgZGlzY29ubmVjdCB3aWxsIG5vdCBoYXBwZW4gdW50aWwgYWxsIGNvbXBsZXRpb24KKyAqIHJvdXRpbmVzIGhhdmUgY29tcGxldGVkLCBzbyB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhlIGRldl9wb3J0CisgKiBhcnJheSBkb2VzIG5vdCBjaGFuZ2UgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW50IGdzX3JlY3ZfcGFja2V0KHN0cnVjdCBnc19kZXYgKmRldiwgY2hhciAqcGFja2V0LCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgbGVuOworCXN0cnVjdCBnc19wb3J0ICpwb3J0OworCWludCByZXQ7CisKKwkvKiBURU1QT1JBUlkgLS0gb25seSBwb3J0IDAgaXMgc3VwcG9ydGVkIHJpZ2h0IG5vdyAqLworCXBvcnQgPSBkZXYtPmRldl9wb3J0WzBdOworCisJaWYgKHBvcnQgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX3JlY3ZfcGFja2V0OiBwb3J0PSVkLCBOVUxMIHBvcnQgcG9pbnRlclxuIiwKKwkJCXBvcnQtPnBvcnRfbnVtKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJc3Bpbl9sb2NrKCZwb3J0LT5wb3J0X2xvY2spOworCisJaWYgKHBvcnQtPnBvcnRfb3Blbl9jb3VudCA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3NfcmVjdl9wYWNrZXQ6IHBvcnQ9JWQsIHBvcnQgaXMgY2xvc2VkXG4iLAorCQkJcG9ydC0+cG9ydF9udW0pOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHBvcnQtPnBvcnRfdHR5ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19yZWN2X3BhY2tldDogcG9ydD0lZCwgTlVMTCB0dHkgcG9pbnRlclxuIiwKKwkJCXBvcnQtPnBvcnRfbnVtKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBleGl0OworCX0KKworCWlmIChwb3J0LT5wb3J0X3R0eS0+bWFnaWMgIT0gVFRZX01BR0lDKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3NfcmVjdl9wYWNrZXQ6IHBvcnQ9JWQsIGJhZCB0dHkgbWFnaWNcbiIsCisJCQlwb3J0LT5wb3J0X251bSk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXhpdDsKKwl9CisKKwlsZW4gPSAodW5zaWduZWQgaW50KShUVFlfRkxJUEJVRl9TSVpFIC0gcG9ydC0+cG9ydF90dHktPmZsaXAuY291bnQpOworCWlmIChsZW4gPCBzaXplKQorCQlzaXplID0gbGVuOworCisJaWYgKHNpemUgPiAwKSB7CisJCW1lbWNweShwb3J0LT5wb3J0X3R0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIsIHBhY2tldCwgc2l6ZSk7CisJCXBvcnQtPnBvcnRfdHR5LT5mbGlwLmNoYXJfYnVmX3B0ciArPSBzaXplOworCQlwb3J0LT5wb3J0X3R0eS0+ZmxpcC5jb3VudCArPSBzaXplOworCQl0dHlfZmxpcF9idWZmZXJfcHVzaChwb3J0LT5wb3J0X3R0eSk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+cG9ydF90dHktPnJlYWRfd2FpdCk7CisJfQorCisJcmV0ID0gMDsKKworZXhpdDoKKwlzcGluX3VubG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorKiBnc19yZWFkX2NvbXBsZXRlCisqLworc3RhdGljIHZvaWQgZ3NfcmVhZF9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZ3NfZGV2ICpkZXYgPSBlcC0+ZHJpdmVyX2RhdGE7CisKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19yZWFkX2NvbXBsZXRlOiBOVUxMIGRldmljZSBwb2ludGVyXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaChyZXEtPnN0YXR1cykgeworCWNhc2UgMDoKKyAJCS8qIG5vcm1hbCBjb21wbGV0aW9uICovCisJCWdzX3JlY3ZfcGFja2V0KGRldiwgcmVxLT5idWYsIHJlcS0+YWN0dWFsKTsKK3JlcXVldWU6CisJCXJlcS0+bGVuZ3RoID0gZXAtPm1heHBhY2tldDsKKwkJaWYgKChyZXQ9dXNiX2VwX3F1ZXVlKGVwLCByZXEsIEdGUF9BVE9NSUMpKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkiZ3NfcmVhZF9jb21wbGV0ZTogY2Fubm90IHF1ZXVlIHJlYWQgcmVxdWVzdCwgcmV0PSVkXG4iLAorCQkJCXJldCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIC1FU0hVVERPV046CisJCS8qIGRpc2Nvbm5lY3QgKi8KKwkJZ3NfZGVidWcoImdzX3JlYWRfY29tcGxldGU6IHNodXRkb3duXG4iKTsKKwkJZ3NfZnJlZV9yZXEoZXAsIHJlcSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogdW5leHBlY3RlZCAqLworCQlwcmludGsoS0VSTl9FUlIKKwkJImdzX3JlYWRfY29tcGxldGU6IHVuZXhwZWN0ZWQgc3RhdHVzIGVycm9yLCBzdGF0dXM9JWRcbiIsCisJCQlyZXEtPnN0YXR1cyk7CisJCWdvdG8gcmVxdWV1ZTsKKwkJYnJlYWs7CisJfQorfQorCisvKgorKiBnc193cml0ZV9jb21wbGV0ZQorKi8KK3N0YXRpYyB2b2lkIGdzX3dyaXRlX2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgZ3NfZGV2ICpkZXYgPSBlcC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGdzX3JlcV9lbnRyeSAqZ3NfcmVxID0gcmVxLT5jb250ZXh0OworCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3Nfd3JpdGVfY29tcGxldGU6IE5VTEwgZGV2aWNlIHBvaW50ZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoKHJlcS0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBub3JtYWwgY29tcGxldGlvbiAqLworcmVxdWV1ZToKKwkJaWYgKGdzX3JlcSA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiZ3Nfd3JpdGVfY29tcGxldGU6IE5VTEwgcmVxdWVzdCBwb2ludGVyXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXNwaW5fbG9jaygmZGV2LT5kZXZfbG9jayk7CisJCWxpc3RfYWRkKCZnc19yZXEtPnJlX2VudHJ5LCAmZGV2LT5kZXZfcmVxX2xpc3QpOworCQlzcGluX3VubG9jaygmZGV2LT5kZXZfbG9jayk7CisKKwkJZ3Nfc2VuZChkZXYpOworCisJCWJyZWFrOworCisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiBkaXNjb25uZWN0ICovCisJCWdzX2RlYnVnKCJnc193cml0ZV9jb21wbGV0ZTogc2h1dGRvd25cbiIpOworCQlnc19mcmVlX3JlcShlcCwgcmVxKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJImdzX3dyaXRlX2NvbXBsZXRlOiB1bmV4cGVjdGVkIHN0YXR1cyBlcnJvciwgc3RhdHVzPSVkXG4iLAorCQkJcmVxLT5zdGF0dXMpOworCQlnb3RvIHJlcXVldWU7CisJCWJyZWFrOworCX0KK30KKworLyogR2FkZ2V0IERyaXZlciAqLworCisvKgorICogZ3NfYmluZAorICoKKyAqIENhbGxlZCBvbiBtb2R1bGUgbG9hZC4gIEFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgdGhlIGRldmljZQorICogc3RydWN0dXJlIGFuZCBhIGNvbnRyb2wgcmVxdWVzdC4KKyAqLworc3RhdGljIGludCBnc19iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdXNiX2VwICplcDsKKwlzdHJ1Y3QgZ3NfZGV2ICpkZXY7CisKKwkvKiBkZXZpY2Ugc3BlY2lmaWMgKi8KKwlpZiAoZ2FkZ2V0X2lzX25ldDIyODAoZ2FkZ2V0KSkgeworCQlnc19kZXZpY2VfZGVzYy5iY2REZXZpY2UgPQorCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19WRVJTSU9OX05VTXwweDAwMDEpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3B4YShnYWRnZXQpKSB7CisJCWdzX2RldmljZV9kZXNjLmJjZERldmljZSA9CisJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX1ZFUlNJT05fTlVNfDB4MDAwMik7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfc2goZ2FkZ2V0KSkgeworCQlnc19kZXZpY2VfZGVzYy5iY2REZXZpY2UgPQorCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19WRVJTSU9OX05VTXwweDAwMDMpOworCQkvKiBzaCBkb2Vzbid0IHN1cHBvcnQgbXVsdGlwbGUgaW50ZXJmYWNlcyBvciBjb25maWdzICovCisJCXVzZV9hY20gPSAwOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3NhMTEwMChnYWRnZXQpKSB7CisJCWdzX2RldmljZV9kZXNjLmJjZERldmljZSA9CisJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX1ZFUlNJT05fTlVNfDB4MDAwNCk7CisJCS8qIHNhMTEwMCBkb2Vzbid0IHN1cHBvcnQgbmVjZXNzYXJ5IGVuZHBvaW50cyAqLworCQl1c2VfYWNtID0gMDsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19nb2t1KGdhZGdldCkpIHsKKwkJZ3NfZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU18MHgwMDA1KTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19tcTExeHgoZ2FkZ2V0KSkgeworCQlnc19kZXZpY2VfZGVzYy5iY2REZXZpY2UgPQorCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19WRVJTSU9OX05VTXwweDAwMDYpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX29tYXAoZ2FkZ2V0KSkgeworCQlnc19kZXZpY2VfZGVzYy5iY2REZXZpY2UgPQorCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19WRVJTSU9OX05VTXwweDAwMDcpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX2xoN2E0MHgoZ2FkZ2V0KSkgeworCQlnc19kZXZpY2VfZGVzYy5iY2REZXZpY2UgPQorCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19WRVJTSU9OX05VTXwweDAwMDgpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX245NjA0KGdhZGdldCkpIHsKKwkJZ3NfZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KKwkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVSU0lPTl9OVU18MHgwMDA5KTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19weGEyN3goZ2FkZ2V0KSkgeworCQlnc19kZXZpY2VfZGVzYy5iY2REZXZpY2UgPQorCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19WRVJTSU9OX05VTXwweDAwMTEpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3MzYzI0MTAoZ2FkZ2V0KSkgeworCQlnc19kZXZpY2VfZGVzYy5iY2REZXZpY2UgPQorCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19WRVJTSU9OX05VTXwweDAwMTIpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX2F0OTEoZ2FkZ2V0KSkgeworCQlnc19kZXZpY2VfZGVzYy5iY2REZXZpY2UgPQorCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19WRVJTSU9OX05VTXwweDAwMTMpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImdzX2JpbmQ6IGNvbnRyb2xsZXIgJyVzJyBub3QgcmVjb2duaXplZFxuIiwKKwkJCWdhZGdldC0+bmFtZSk7CisJCS8qIHVucmVjb2duaXplZCwgYnV0IHNhZmUgdW5sZXNzIGJ1bGsgaXMgUkVBTExZIHF1aXJreSAqLworCQlnc19kZXZpY2VfZGVzYy5iY2REZXZpY2UgPQorCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19WRVJTSU9OX05VTXwweDAwOTkpOworCX0KKworCXVzYl9lcF9hdXRvY29uZmlnX3Jlc2V0KGdhZGdldCk7CisKKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGdhZGdldCwgJmdzX2Z1bGxzcGVlZF9pbl9kZXNjKTsKKwlpZiAoIWVwKQorCQlnb3RvIGF1dG9jb25mX2ZhaWw7CisJRVBfSU5fTkFNRSA9IGVwLT5uYW1lOworCWVwLT5kcml2ZXJfZGF0YSA9IGVwOwkvKiBjbGFpbSB0aGUgZW5kcG9pbnQgKi8KKworCWVwID0gdXNiX2VwX2F1dG9jb25maWcoZ2FkZ2V0LCAmZ3NfZnVsbHNwZWVkX291dF9kZXNjKTsKKwlpZiAoIWVwKQorCQlnb3RvIGF1dG9jb25mX2ZhaWw7CisJRVBfT1VUX05BTUUgPSBlcC0+bmFtZTsKKwllcC0+ZHJpdmVyX2RhdGEgPSBlcDsJLyogY2xhaW0gdGhlIGVuZHBvaW50ICovCisKKwlpZiAodXNlX2FjbSkgeworCQllcCA9IHVzYl9lcF9hdXRvY29uZmlnKGdhZGdldCwgJmdzX2Z1bGxzcGVlZF9ub3RpZnlfZGVzYyk7CisJCWlmICghZXApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZ3NfYmluZDogY2Fubm90IHJ1biBBQ00gb24gJXNcbiIsIGdhZGdldC0+bmFtZSk7CisJCQlnb3RvIGF1dG9jb25mX2ZhaWw7CisJCX0KKwkJZ3NfZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigKKwkJCQkJCUdTX0NEQ19QUk9EVUNUX0lEKSwKKwkJRVBfTk9USUZZX05BTUUgPSBlcC0+bmFtZTsKKwkJZXAtPmRyaXZlcl9kYXRhID0gZXA7CS8qIGNsYWltIHRoZSBlbmRwb2ludCAqLworCX0KKworCWdzX2RldmljZV9kZXNjLmJEZXZpY2VDbGFzcyA9IHVzZV9hY20KKwkJPyBVU0JfQ0xBU1NfQ09NTSA6IFVTQl9DTEFTU19WRU5ET1JfU1BFQzsKKwlnc19kZXZpY2VfZGVzYy5iTWF4UGFja2V0U2l6ZTAgPSBnYWRnZXQtPmVwMC0+bWF4cGFja2V0OworCisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisJZ3NfcXVhbGlmaWVyX2Rlc2MuYkRldmljZUNsYXNzID0gdXNlX2FjbQorCQk/IFVTQl9DTEFTU19DT01NIDogVVNCX0NMQVNTX1ZFTkRPUl9TUEVDOworCS8qIGFzc3VtZSBlcDAgdXNlcyB0aGUgc2FtZSBwYWNrZXQgc2l6ZSBmb3IgYm90aCBzcGVlZHMgKi8KKwlnc19xdWFsaWZpZXJfZGVzYy5iTWF4UGFja2V0U2l6ZTAgPSBnc19kZXZpY2VfZGVzYy5iTWF4UGFja2V0U2l6ZTA7CisJLyogYXNzdW1lIGVuZHBvaW50cyBhcmUgZHVhbC1zcGVlZCAqLworCWdzX2hpZ2hzcGVlZF9ub3RpZnlfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJZ3NfZnVsbHNwZWVkX25vdGlmeV9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJZ3NfaGlnaHNwZWVkX2luX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyA9CisJCWdzX2Z1bGxzcGVlZF9pbl9kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJZ3NfaGlnaHNwZWVkX291dF9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPQorCQlnc19mdWxsc3BlZWRfb3V0X2Rlc2MuYkVuZHBvaW50QWRkcmVzczsKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgKi8KKworCXVzYl9nYWRnZXRfc2V0X3NlbGZwb3dlcmVkKGdhZGdldCk7CisKKwlpZiAoZ2FkZ2V0LT5pc19vdGcpIHsKKwkJZ3Nfb3RnX2Rlc2NyaXB0b3IuYm1BdHRyaWJ1dGVzIHw9IFVTQl9PVEdfSE5QLAorCQlnc19idWxrX2NvbmZpZ19kZXNjLmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7CisJCWdzX2FjbV9jb25maWdfZGVzYy5ibUF0dHJpYnV0ZXMgfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOworCX0KKworCWdzX2RldmljZSA9IGRldiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBnc19kZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc25wcmludGYobWFudWZhY3R1cmVyLCBzaXplb2YobWFudWZhY3R1cmVyKSwgIiVzICVzIHdpdGggJXMiLAorCQlzeXN0ZW1fdXRzbmFtZS5zeXNuYW1lLCBzeXN0ZW1fdXRzbmFtZS5yZWxlYXNlLAorCQlnYWRnZXQtPm5hbWUpOworCisJbWVtc2V0KGRldiwgMCwgc2l6ZW9mKHN0cnVjdCBnc19kZXYpKTsKKwlkZXYtPmRldl9nYWRnZXQgPSBnYWRnZXQ7CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+ZGV2X2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPmRldl9yZXFfbGlzdCk7CisJc2V0X2dhZGdldF9kYXRhKGdhZGdldCwgZGV2KTsKKworCWlmICgocmV0PWdzX2FsbG9jX3BvcnRzKGRldiwgR0ZQX0tFUk5FTCkpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19iaW5kOiBjYW5ub3QgYWxsb2NhdGUgcG9ydHNcbiIpOworCQlnc191bmJpbmQoZ2FkZ2V0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBwcmVhbGxvY2F0ZSBjb250cm9sIHJlc3BvbnNlIGFuZCBidWZmZXIgKi8KKwlkZXYtPmRldl9jdHJsX3JlcSA9IGdzX2FsbG9jX3JlcShnYWRnZXQtPmVwMCwgR1NfTUFYX0RFU0NfTEVOLAorCQlHRlBfS0VSTkVMKTsKKwlpZiAoZGV2LT5kZXZfY3RybF9yZXEgPT0gTlVMTCkgeworCQlnc191bmJpbmQoZ2FkZ2V0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWRldi0+ZGV2X2N0cmxfcmVxLT5jb21wbGV0ZSA9IGdzX3NldHVwX2NvbXBsZXRlOworCisJZ2FkZ2V0LT5lcDAtPmRyaXZlcl9kYXRhID0gZGV2OworCisJcHJpbnRrKEtFUk5fSU5GTyAiZ3NfYmluZDogJXMgJXMgYm91bmRcbiIsCisJCUdTX0xPTkdfTkFNRSwgR1NfVkVSU0lPTl9TVFIpOworCisJcmV0dXJuIDA7CisKK2F1dG9jb25mX2ZhaWw6CisJcHJpbnRrKEtFUk5fRVJSICJnc19iaW5kOiBjYW5ub3QgYXV0b2NvbmZpZ3VyZSBvbiAlc1xuIiwgZ2FkZ2V0LT5uYW1lKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworLyoKKyAqIGdzX3VuYmluZAorICoKKyAqIENhbGxlZCBvbiBtb2R1bGUgdW5sb2FkLiAgRnJlZXMgdGhlIGNvbnRyb2wgcmVxdWVzdCBhbmQgZGV2aWNlCisgKiBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyB2b2lkIGdzX3VuYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBnc19kZXYgKmRldiA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOworCisJZ3NfZGV2aWNlID0gTlVMTDsKKworCS8qIHJlYWQvd3JpdGUgcmVxdWVzdHMgYWxyZWFkeSBmcmVlZCwgb25seSBjb250cm9sIHJlcXVlc3QgcmVtYWlucyAqLworCWlmIChkZXYgIT0gTlVMTCkgeworCQlpZiAoZGV2LT5kZXZfY3RybF9yZXEgIT0gTlVMTCkgeworCQkJZ3NfZnJlZV9yZXEoZ2FkZ2V0LT5lcDAsIGRldi0+ZGV2X2N0cmxfcmVxKTsKKwkJCWRldi0+ZGV2X2N0cmxfcmVxID0gTlVMTDsKKwkJfQorCQlnc19mcmVlX3BvcnRzKGRldik7CisJCWtmcmVlKGRldik7CisJCXNldF9nYWRnZXRfZGF0YShnYWRnZXQsIE5VTEwpOworCX0KKworCXByaW50ayhLRVJOX0lORk8gImdzX3VuYmluZDogJXMgJXMgdW5ib3VuZFxuIiwgR1NfTE9OR19OQU1FLAorCQlHU19WRVJTSU9OX1NUUik7Cit9CisKKy8qCisgKiBnc19zZXR1cAorICoKKyAqIEltcGxlbWVudHMgYWxsIHRoZSBjb250cm9sIGVuZHBvaW50IGZ1bmN0aW9uYWxpdHkgdGhhdCdzIG5vdAorICogaGFuZGxlZCBpbiBoYXJkd2FyZSBvciB0aGUgaGFyZHdhcmUgZHJpdmVyLgorICoKKyAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGRhdGEgc2VudCB0byB0aGUgaG9zdCwgb3IgYSBuZWdhdGl2ZQorICogZXJyb3IgbnVtYmVyLgorICovCitzdGF0aWMgaW50IGdzX3NldHVwKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsCisJY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKK3sKKwlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CisJc3RydWN0IGdzX2RldiAqZGV2ID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CisJc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEgPSBkZXYtPmRldl9jdHJsX3JlcTsKKwl1MTYgd0luZGV4ID0gY3RybC0+d0luZGV4OworCXUxNiB3VmFsdWUgPSBjdHJsLT53VmFsdWU7CisJdTE2IHdMZW5ndGggPSBjdHJsLT53TGVuZ3RoOworCisJc3dpdGNoIChjdHJsLT5iUmVxdWVzdFR5cGUgJiBVU0JfVFlQRV9NQVNLKSB7CisJY2FzZSBVU0JfVFlQRV9TVEFOREFSRDoKKwkJcmV0ID0gZ3Nfc2V0dXBfc3RhbmRhcmQoZ2FkZ2V0LGN0cmwpOworCQlicmVhazsKKworCWNhc2UgVVNCX1RZUEVfQ0xBU1M6CisJCXJldCA9IGdzX3NldHVwX2NsYXNzKGdhZGdldCxjdHJsKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgImdzX3NldHVwOiB1bmtub3duIHJlcXVlc3QsIHR5cGU9JTAyeCwgcmVxdWVzdD0lMDJ4LCB2YWx1ZT0lMDR4LCBpbmRleD0lMDR4LCBsZW5ndGg9JWRcbiIsCisJCQljdHJsLT5iUmVxdWVzdFR5cGUsIGN0cmwtPmJSZXF1ZXN0LAorCQkJd1ZhbHVlLCB3SW5kZXgsIHdMZW5ndGgpOworCQlicmVhazsKKwl9CisKKwkvKiByZXNwb25kIHdpdGggZGF0YSB0cmFuc2ZlciBiZWZvcmUgc3RhdHVzIHBoYXNlPyAqLworCWlmIChyZXQgPj0gMCkgeworCQlyZXEtPmxlbmd0aCA9IHJldDsKKwkJcmVxLT56ZXJvID0gcmV0IDwgd0xlbmd0aAorCQkJCSYmIChyZXQgJSBnYWRnZXQtPmVwMC0+bWF4cGFja2V0KSA9PSAwOworCQlyZXQgPSB1c2JfZXBfcXVldWUoZ2FkZ2V0LT5lcDAsIHJlcSwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImdzX3NldHVwOiBjYW5ub3QgcXVldWUgcmVzcG9uc2UsIHJldD0lZFxuIiwKKwkJCQlyZXQpOworCQkJcmVxLT5zdGF0dXMgPSAwOworCQkJZ3Nfc2V0dXBfY29tcGxldGUoZ2FkZ2V0LT5lcDAsIHJlcSk7CisJCX0KKwl9CisKKwkvKiBkZXZpY2UgZWl0aGVyIHN0YWxscyAocmV0IDwgMCkgb3IgcmVwb3J0cyBzdWNjZXNzICovCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnc19zZXR1cF9zdGFuZGFyZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LAorCWNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCit7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCXN0cnVjdCBnc19kZXYgKmRldiA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOworCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxID0gZGV2LT5kZXZfY3RybF9yZXE7CisJdTE2IHdJbmRleCA9IGN0cmwtPndJbmRleDsKKwl1MTYgd1ZhbHVlID0gY3RybC0+d1ZhbHVlOworCXUxNiB3TGVuZ3RoID0gY3RybC0+d0xlbmd0aDsKKworCXN3aXRjaCAoY3RybC0+YlJlcXVlc3QpIHsKKwljYXNlIFVTQl9SRVFfR0VUX0RFU0NSSVBUT1I6CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gVVNCX0RJUl9JTikKKwkJCWJyZWFrOworCisJCXN3aXRjaCAod1ZhbHVlID4+IDgpIHsKKwkJY2FzZSBVU0JfRFRfREVWSUNFOgorCQkJcmV0ID0gbWluKHdMZW5ndGgsCisJCQkJKHUxNilzaXplb2Yoc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvcikpOworCQkJbWVtY3B5KHJlcS0+YnVmLCAmZ3NfZGV2aWNlX2Rlc2MsIHJldCk7CisJCQlicmVhazsKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCQljYXNlIFVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSOgorCQkJaWYgKCFnYWRnZXQtPmlzX2R1YWxzcGVlZCkKKwkJCQlicmVhazsKKwkJCXJldCA9IG1pbih3TGVuZ3RoLAorCQkJCSh1MTYpc2l6ZW9mKHN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IpKTsKKwkJCW1lbWNweShyZXEtPmJ1ZiwgJmdzX3F1YWxpZmllcl9kZXNjLCByZXQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBVU0JfRFRfT1RIRVJfU1BFRURfQ09ORklHOgorCQkJaWYgKCFnYWRnZXQtPmlzX2R1YWxzcGVlZCkKKwkJCQlicmVhazsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworI2VuZGlmIC8qIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCAqLworCQljYXNlIFVTQl9EVF9DT05GSUc6CisJCQlyZXQgPSBnc19idWlsZF9jb25maWdfYnVmKHJlcS0+YnVmLCBnYWRnZXQtPnNwZWVkLAorCQkJCXdWYWx1ZSA+PiA4LCB3VmFsdWUgJiAweGZmLAorCQkJCWdhZGdldC0+aXNfb3RnKTsKKwkJCWlmIChyZXQgPj0gMCkKKwkJCQlyZXQgPSBtaW4od0xlbmd0aCwgKHUxNilyZXQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBVU0JfRFRfU1RSSU5HOgorCQkJLyogd0luZGV4ID09IGxhbmd1YWdlIGNvZGUuICovCisJCQlyZXQgPSB1c2JfZ2FkZ2V0X2dldF9zdHJpbmcoJmdzX3N0cmluZ190YWJsZSwKKwkJCQl3VmFsdWUgJiAweGZmLCByZXEtPmJ1Zik7CisJCQlpZiAocmV0ID49IDApCisJCQkJcmV0ID0gbWluKHdMZW5ndGgsICh1MTYpcmV0KTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJY2FzZSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IDApCisJCQlicmVhazsKKwkJc3Bpbl9sb2NrKCZkZXYtPmRldl9sb2NrKTsKKwkJcmV0ID0gZ3Nfc2V0X2NvbmZpZyhkZXYsIHdWYWx1ZSk7CisJCXNwaW5fdW5sb2NrKCZkZXYtPmRldl9sb2NrKTsKKwkJYnJlYWs7CisKKwljYXNlIFVTQl9SRVFfR0VUX0NPTkZJR1VSQVRJT046CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gVVNCX0RJUl9JTikKKwkJCWJyZWFrOworCQkqKHU4ICopcmVxLT5idWYgPSBkZXYtPmRldl9jb25maWc7CisJCXJldCA9IG1pbih3TGVuZ3RoLCAodTE2KTEpOworCQlicmVhazsKKworCWNhc2UgVVNCX1JFUV9TRVRfSU5URVJGQUNFOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IFVTQl9SRUNJUF9JTlRFUkZBQ0UKKwkJCQl8fCAhZGV2LT5kZXZfY29uZmlnCisJCQkJfHwgd0luZGV4ID49IEdTX01BWF9OVU1fSU5URVJGQUNFUykKKwkJCWJyZWFrOworCQlpZiAoZGV2LT5kZXZfY29uZmlnID09IEdTX0JVTEtfQ09ORklHX0lECisJCQkJJiYgd0luZGV4ICE9IEdTX0JVTEtfSU5URVJGQUNFX0lEKQorCQkJYnJlYWs7CisJCS8qIG5vIGFsdGVybmF0ZSBpbnRlcmZhY2Ugc2V0dGluZ3MgKi8KKwkJaWYgKHdWYWx1ZSAhPSAwKQorCQkJYnJlYWs7CisJCXNwaW5fbG9jaygmZGV2LT5kZXZfbG9jayk7CisJCS8qIFBYQSBoYXJkd2FyZSBwYXJ0aWFsbHkgaGFuZGxlcyBTRVRfSU5URVJGQUNFOworCQkgKiB3ZSBuZWVkIHRvIGtsdWdlIGFyb3VuZCB0aGF0IGludGVyZmVyZW5jZS4gICovCisJCWlmIChnYWRnZXRfaXNfcHhhKGdhZGdldCkpIHsKKwkJCXJldCA9IGdzX3NldF9jb25maWcoZGV2LCB1c2VfYWNtID8KKwkJCQlHU19BQ01fQ09ORklHX0lEIDogR1NfQlVMS19DT05GSUdfSUQpOworCQkJZ290byBzZXRfaW50ZXJmYWNlX2RvbmU7CisJCX0KKwkJaWYgKGRldi0+ZGV2X2NvbmZpZyAhPSBHU19CVUxLX0NPTkZJR19JRAorCQkJCSYmIHdJbmRleCA9PSBHU19DT05UUk9MX0lOVEVSRkFDRV9JRCkgeworCQkJaWYgKGRldi0+ZGV2X25vdGlmeV9lcCkgeworCQkJCXVzYl9lcF9kaXNhYmxlKGRldi0+ZGV2X25vdGlmeV9lcCk7CisJCQkJdXNiX2VwX2VuYWJsZShkZXYtPmRldl9ub3RpZnlfZXAsIGRldi0+ZGV2X25vdGlmeV9lcF9kZXNjKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXVzYl9lcF9kaXNhYmxlKGRldi0+ZGV2X2luX2VwKTsKKwkJCXVzYl9lcF9kaXNhYmxlKGRldi0+ZGV2X291dF9lcCk7CisJCQl1c2JfZXBfZW5hYmxlKGRldi0+ZGV2X2luX2VwLCBkZXYtPmRldl9pbl9lcF9kZXNjKTsKKwkJCXVzYl9lcF9lbmFibGUoZGV2LT5kZXZfb3V0X2VwLCBkZXYtPmRldl9vdXRfZXBfZGVzYyk7CisJCX0KKwkJcmV0ID0gMDsKK3NldF9pbnRlcmZhY2VfZG9uZToKKwkJc3Bpbl91bmxvY2soJmRldi0+ZGV2X2xvY2spOworCQlicmVhazsKKworCWNhc2UgVVNCX1JFUV9HRVRfSU5URVJGQUNFOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IChVU0JfRElSX0lOfFVTQl9SRUNJUF9JTlRFUkZBQ0UpCisJCXx8IGRldi0+ZGV2X2NvbmZpZyA9PSBHU19OT19DT05GSUdfSUQpCisJCQlicmVhazsKKwkJaWYgKHdJbmRleCA+PSBHU19NQVhfTlVNX0lOVEVSRkFDRVMKKwkJCQl8fCAoZGV2LT5kZXZfY29uZmlnID09IEdTX0JVTEtfQ09ORklHX0lECisJCQkJJiYgd0luZGV4ICE9IEdTX0JVTEtfSU5URVJGQUNFX0lEKSkgeworCQkJcmV0ID0gLUVET007CisJCQlicmVhazsKKwkJfQorCQkvKiBubyBhbHRlcm5hdGUgaW50ZXJmYWNlIHNldHRpbmdzICovCisJCSoodTggKilyZXEtPmJ1ZiA9IDA7CisJCXJldCA9IG1pbih3TGVuZ3RoLCAodTE2KTEpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiZ3Nfc2V0dXA6IHVua25vd24gc3RhbmRhcmQgcmVxdWVzdCwgdHlwZT0lMDJ4LCByZXF1ZXN0PSUwMngsIHZhbHVlPSUwNHgsIGluZGV4PSUwNHgsIGxlbmd0aD0lZFxuIiwKKwkJCWN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3QsCisJCQl3VmFsdWUsIHdJbmRleCwgd0xlbmd0aCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ3Nfc2V0dXBfY2xhc3Moc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCwKKwljb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKQoreworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKwlzdHJ1Y3QgZ3NfZGV2ICpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTsKKwlzdHJ1Y3QgZ3NfcG9ydCAqcG9ydCA9IGRldi0+ZGV2X3BvcnRbMF07CS8qIEFDTSBvbmx5IGhhcyBvbmUgcG9ydCAqLworCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxID0gZGV2LT5kZXZfY3RybF9yZXE7CisJdTE2IHdJbmRleCA9IGN0cmwtPndJbmRleDsKKwl1MTYgd1ZhbHVlID0gY3RybC0+d1ZhbHVlOworCXUxNiB3TGVuZ3RoID0gY3RybC0+d0xlbmd0aDsKKworCXN3aXRjaCAoY3RybC0+YlJlcXVlc3QpIHsKKwljYXNlIFVTQl9DRENfUkVRX1NFVF9MSU5FX0NPRElORzoKKwkJcmV0ID0gbWluKHdMZW5ndGgsCisJCQkodTE2KXNpemVvZihzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZykpOworCQlpZiAocG9ydCkgeworCQkJc3Bpbl9sb2NrKCZwb3J0LT5wb3J0X2xvY2spOworCQkJbWVtY3B5KCZwb3J0LT5wb3J0X2xpbmVfY29kaW5nLCByZXEtPmJ1ZiwgcmV0KTsKKwkJCXNwaW5fdW5sb2NrKCZwb3J0LT5wb3J0X2xvY2spOworCQl9CisJCWJyZWFrOworCisJY2FzZSBVU0JfQ0RDX1JFUV9HRVRfTElORV9DT0RJTkc6CisJCXBvcnQgPSBkZXYtPmRldl9wb3J0WzBdOwkvKiBBQ00gb25seSBoYXMgb25lIHBvcnQgKi8KKwkJcmV0ID0gbWluKHdMZW5ndGgsCisJCQkodTE2KXNpemVvZihzdHJ1Y3QgdXNiX2NkY19saW5lX2NvZGluZykpOworCQlpZiAocG9ydCkgeworCQkJc3Bpbl9sb2NrKCZwb3J0LT5wb3J0X2xvY2spOworCQkJbWVtY3B5KHJlcS0+YnVmLCAmcG9ydC0+cG9ydF9saW5lX2NvZGluZywgcmV0KTsKKwkJCXNwaW5fdW5sb2NrKCZwb3J0LT5wb3J0X2xvY2spOworCQl9CisJCWJyZWFrOworCisJY2FzZSBVU0JfQ0RDX1JFUV9TRVRfQ09OVFJPTF9MSU5FX1NUQVRFOgorCQlyZXQgPSAwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiZ3Nfc2V0dXA6IHVua25vd24gY2xhc3MgcmVxdWVzdCwgdHlwZT0lMDJ4LCByZXF1ZXN0PSUwMngsIHZhbHVlPSUwNHgsIGluZGV4PSUwNHgsIGxlbmd0aD0lZFxuIiwKKwkJCWN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3QsCisJCQl3VmFsdWUsIHdJbmRleCwgd0xlbmd0aCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBnc19zZXR1cF9jb21wbGV0ZQorICovCitzdGF0aWMgdm9pZCBnc19zZXR1cF9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJaWYgKHJlcS0+c3RhdHVzIHx8IHJlcS0+YWN0dWFsICE9IHJlcS0+bGVuZ3RoKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3Nfc2V0dXBfY29tcGxldGU6IHN0YXR1cyBlcnJvciwgc3RhdHVzPSVkLCBhY3R1YWw9JWQsIGxlbmd0aD0lZFxuIiwKKwkJCXJlcS0+c3RhdHVzLCByZXEtPmFjdHVhbCwgcmVxLT5sZW5ndGgpOworCX0KK30KKworLyoKKyAqIGdzX2Rpc2Nvbm5lY3QKKyAqCisgKiBDYWxsZWQgd2hlbiB0aGUgZGV2aWNlIGlzIGRpc2Nvbm5lY3RlZC4gIEZyZWVzIHRoZSBjbG9zZWQKKyAqIHBvcnRzIGFuZCBkaXNjb25uZWN0cyBvcGVuIHBvcnRzLiAgT3BlbiBwb3J0cyB3aWxsIGJlIGZyZWVkCisgKiBvbiBjbG9zZS4gIFRoZW4gcmVhbGxvY2F0ZXMgdGhlIHBvcnRzIGZvciB0aGUgbmV4dCBjb25uZWN0aW9uLgorICovCitzdGF0aWMgdm9pZCBnc19kaXNjb25uZWN0KHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZ3NfZGV2ICpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmRldl9sb2NrLCBmbGFncyk7CisKKwlnc19yZXNldF9jb25maWcoZGV2KTsKKworCS8qIGZyZWUgY2xvc2VkIHBvcnRzIGFuZCBkaXNjb25uZWN0IG9wZW4gcG9ydHMgKi8KKwkvKiAob3BlbiBwb3J0cyB3aWxsIGJlIGZyZWVkIHdoZW4gY2xvc2VkKSAqLworCWdzX2ZyZWVfcG9ydHMoZGV2KTsKKworCS8qIHJlLWFsbG9jYXRlIHBvcnRzIGZvciB0aGUgbmV4dCBjb25uZWN0aW9uICovCisJaWYgKGdzX2FsbG9jX3BvcnRzKGRldiwgR0ZQX0FUT01JQykgIT0gMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJnc19kaXNjb25uZWN0OiBjYW5ub3QgcmUtYWxsb2NhdGUgcG9ydHNcbiIpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5kZXZfbG9jaywgZmxhZ3MpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiZ3NfZGlzY29ubmVjdDogJXMgZGlzY29ubmVjdGVkXG4iLCBHU19MT05HX05BTUUpOworfQorCisvKgorICogZ3Nfc2V0X2NvbmZpZworICoKKyAqIENvbmZpZ3VyZXMgdGhlIGRldmljZSBieSBlbmFibGluZyBkZXZpY2Ugc3BlY2lmaWMKKyAqIG9wdGltaXphdGlvbnMsIHNldHRpbmcgdXAgdGhlIGVuZHBvaW50cywgYWxsb2NhdGluZworICogcmVhZCBhbmQgd3JpdGUgcmVxdWVzdHMgYW5kIHF1ZXVpbmcgcmVhZCByZXF1ZXN0cy4KKyAqCisgKiBUaGUgZGV2aWNlIGxvY2sgbXVzdCBiZSBoZWxkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW50IGdzX3NldF9jb25maWcoc3RydWN0IGdzX2RldiAqZGV2LCB1bnNpZ25lZCBjb25maWcpCit7CisJaW50IGk7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCA9IGRldi0+ZGV2X2dhZGdldDsKKwlzdHJ1Y3QgdXNiX2VwICplcDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX2Rlc2M7CisJc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXE7CisJc3RydWN0IGdzX3JlcV9lbnRyeSAqcmVxX2VudHJ5OworCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3Nfc2V0X2NvbmZpZzogTlVMTCBkZXZpY2UgcG9pbnRlclxuIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChjb25maWcgPT0gZGV2LT5kZXZfY29uZmlnKQorCQlyZXR1cm4gMDsKKworCWdzX3Jlc2V0X2NvbmZpZyhkZXYpOworCisJc3dpdGNoIChjb25maWcpIHsKKwljYXNlIEdTX05PX0NPTkZJR19JRDoKKwkJcmV0dXJuIDA7CisJY2FzZSBHU19CVUxLX0NPTkZJR19JRDoKKwkJaWYgKHVzZV9hY20pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJLyogZGV2aWNlIHNwZWNpZmljIG9wdGltaXphdGlvbnMgKi8KKwkJaWYgKGdhZGdldF9pc19uZXQyMjgwKGdhZGdldCkpCisJCQluZXQyMjgwX3NldF9maWZvX21vZGUoZ2FkZ2V0LCAxKTsKKwkJYnJlYWs7CisJY2FzZSBHU19BQ01fQ09ORklHX0lEOgorCQlpZiAoIXVzZV9hY20pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJLyogZGV2aWNlIHNwZWNpZmljIG9wdGltaXphdGlvbnMgKi8KKwkJaWYgKGdhZGdldF9pc19uZXQyMjgwKGdhZGdldCkpCisJCQluZXQyMjgwX3NldF9maWZvX21vZGUoZ2FkZ2V0LCAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2LT5kZXZfY29uZmlnID0gY29uZmlnOworCisJZ2FkZ2V0X2Zvcl9lYWNoX2VwKGVwLCBnYWRnZXQpIHsKKworCQlpZiAoRVBfTk9USUZZX05BTUUKKwkJJiYgc3RyY21wKGVwLT5uYW1lLCBFUF9OT1RJRllfTkFNRSkgPT0gMCkgeworCQkJZXBfZGVzYyA9IEdTX1NQRUVEX1NFTEVDVCgKKwkJCQlnYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdILAorCQkJCSZnc19oaWdoc3BlZWRfbm90aWZ5X2Rlc2MsCisJCQkJJmdzX2Z1bGxzcGVlZF9ub3RpZnlfZGVzYyk7CisJCQlyZXQgPSB1c2JfZXBfZW5hYmxlKGVwLGVwX2Rlc2MpOworCQkJaWYgKHJldCA9PSAwKSB7CisJCQkJZXAtPmRyaXZlcl9kYXRhID0gZGV2OworCQkJCWRldi0+ZGV2X25vdGlmeV9lcCA9IGVwOworCQkJCWRldi0+ZGV2X25vdGlmeV9lcF9kZXNjID0gZXBfZGVzYzsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJnc19zZXRfY29uZmlnOiBjYW5ub3QgZW5hYmxlIG5vdGlmeSBlbmRwb2ludCAlcywgcmV0PSVkXG4iLAorCQkJCQllcC0+bmFtZSwgcmV0KTsKKwkJCQlnb3RvIGV4aXRfcmVzZXRfY29uZmlnOworCQkJfQorCQl9CisKKwkJZWxzZSBpZiAoc3RyY21wKGVwLT5uYW1lLCBFUF9JTl9OQU1FKSA9PSAwKSB7CisJCQllcF9kZXNjID0gR1NfU1BFRURfU0VMRUNUKAorCQkJCWdhZGdldC0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gsCisgCQkJCSZnc19oaWdoc3BlZWRfaW5fZGVzYywKKwkJCQkmZ3NfZnVsbHNwZWVkX2luX2Rlc2MpOworCQkJcmV0ID0gdXNiX2VwX2VuYWJsZShlcCxlcF9kZXNjKTsKKwkJCWlmIChyZXQgPT0gMCkgeworCQkJCWVwLT5kcml2ZXJfZGF0YSA9IGRldjsKKwkJCQlkZXYtPmRldl9pbl9lcCA9IGVwOworCQkJCWRldi0+ZGV2X2luX2VwX2Rlc2MgPSBlcF9kZXNjOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgImdzX3NldF9jb25maWc6IGNhbm5vdCBlbmFibGUgaW4gZW5kcG9pbnQgJXMsIHJldD0lZFxuIiwKKwkJCQkJZXAtPm5hbWUsIHJldCk7CisJCQkJZ290byBleGl0X3Jlc2V0X2NvbmZpZzsKKwkJCX0KKwkJfQorCisJCWVsc2UgaWYgKHN0cmNtcChlcC0+bmFtZSwgRVBfT1VUX05BTUUpID09IDApIHsKKwkJCWVwX2Rlc2MgPSBHU19TUEVFRF9TRUxFQ1QoCisJCQkJZ2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCwKKwkJCQkmZ3NfaGlnaHNwZWVkX291dF9kZXNjLAorCQkJCSZnc19mdWxsc3BlZWRfb3V0X2Rlc2MpOworCQkJcmV0ID0gdXNiX2VwX2VuYWJsZShlcCxlcF9kZXNjKTsKKwkJCWlmIChyZXQgPT0gMCkgeworCQkJCWVwLT5kcml2ZXJfZGF0YSA9IGRldjsKKwkJCQlkZXYtPmRldl9vdXRfZXAgPSBlcDsKKwkJCQlkZXYtPmRldl9vdXRfZXBfZGVzYyA9IGVwX2Rlc2M7CisJCQl9IGVsc2UgeworCQkJCXByaW50ayhLRVJOX0VSUiAiZ3Nfc2V0X2NvbmZpZzogY2Fubm90IGVuYWJsZSBvdXQgZW5kcG9pbnQgJXMsIHJldD0lZFxuIiwKKwkJCQkJZXAtPm5hbWUsIHJldCk7CisJCQkJZ290byBleGl0X3Jlc2V0X2NvbmZpZzsKKwkJCX0KKwkJfQorCisJfQorCisJaWYgKGRldi0+ZGV2X2luX2VwID09IE5VTEwgfHwgZGV2LT5kZXZfb3V0X2VwID09IE5VTEwKKwl8fCAoY29uZmlnICE9IEdTX0JVTEtfQ09ORklHX0lEICYmIGRldi0+ZGV2X25vdGlmeV9lcCA9PSBOVUxMKSkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX3NldF9jb25maWc6IGNhbm5vdCBmaW5kIGVuZHBvaW50c1xuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdF9yZXNldF9jb25maWc7CisJfQorCisJLyogYWxsb2NhdGUgYW5kIHF1ZXVlIHJlYWQgcmVxdWVzdHMgKi8KKwllcCA9IGRldi0+ZGV2X291dF9lcDsKKwlmb3IgKGk9MDsgaTxyZWFkX3Ffc2l6ZSAmJiByZXQgPT0gMDsgaSsrKSB7CisJCWlmICgocmVxPWdzX2FsbG9jX3JlcShlcCwgZXAtPm1heHBhY2tldCwgR0ZQX0FUT01JQykpKSB7CisJCQlyZXEtPmNvbXBsZXRlID0gZ3NfcmVhZF9jb21wbGV0ZTsKKwkJCWlmICgocmV0PXVzYl9lcF9xdWV1ZShlcCwgcmVxLCBHRlBfQVRPTUlDKSkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgImdzX3NldF9jb25maWc6IGNhbm5vdCBxdWV1ZSByZWFkIHJlcXVlc3QsIHJldD0lZFxuIiwKKwkJCQkJcmV0KTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZ3Nfc2V0X2NvbmZpZzogY2Fubm90IGFsbG9jYXRlIHJlYWQgcmVxdWVzdHNcbiIpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdF9yZXNldF9jb25maWc7CisJCX0KKwl9CisKKwkvKiBhbGxvY2F0ZSB3cml0ZSByZXF1ZXN0cywgYW5kIHB1dCBvbiBmcmVlIGxpc3QgKi8KKwllcCA9IGRldi0+ZGV2X2luX2VwOworCWZvciAoaT0wOyBpPHdyaXRlX3Ffc2l6ZTsgaSsrKSB7CisJCWlmICgocmVxX2VudHJ5PWdzX2FsbG9jX3JlcV9lbnRyeShlcCwgZXAtPm1heHBhY2tldCwgR0ZQX0FUT01JQykpKSB7CisJCQlyZXFfZW50cnktPnJlX3JlcS0+Y29tcGxldGUgPSBnc193cml0ZV9jb21wbGV0ZTsKKwkJCWxpc3RfYWRkKCZyZXFfZW50cnktPnJlX2VudHJ5LCAmZGV2LT5kZXZfcmVxX2xpc3QpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSICJnc19zZXRfY29uZmlnOiBjYW5ub3QgYWxsb2NhdGUgd3JpdGUgcmVxdWVzdHNcbiIpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdF9yZXNldF9jb25maWc7CisJCX0KKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJnc19zZXRfY29uZmlnOiAlcyBjb25maWd1cmVkLCAlcyBzcGVlZCAlcyBjb25maWdcbiIsCisJCUdTX0xPTkdfTkFNRSwKKwkJZ2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCA/ICJoaWdoIiA6ICJmdWxsIiwKKwkJY29uZmlnID09IEdTX0JVTEtfQ09ORklHX0lEID8gIkJVTEsiIDogIkNEQy1BQ00iKTsKKworCXJldHVybiAwOworCitleGl0X3Jlc2V0X2NvbmZpZzoKKwlnc19yZXNldF9jb25maWcoZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZ3NfcmVzZXRfY29uZmlnCisgKgorICogTWFyayB0aGUgZGV2aWNlIGFzIG5vdCBjb25maWd1cmVkLCBkaXNhYmxlIGFsbCBlbmRwb2ludHMsCisgKiB3aGljaCBmb3JjZXMgY29tcGxldGlvbiBvZiBwZW5kaW5nIEkvTyBhbmQgZnJlZXMgcXVldWVkCisgKiByZXF1ZXN0cywgYW5kIGZyZWUgdGhlIHJlbWFpbmluZyB3cml0ZSByZXF1ZXN0cyBvbiB0aGUKKyAqIGZyZWUgbGlzdC4KKyAqCisgKiBUaGUgZGV2aWNlIGxvY2sgbXVzdCBiZSBoZWxkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0aWMgdm9pZCBnc19yZXNldF9jb25maWcoc3RydWN0IGdzX2RldiAqZGV2KQoreworCXN0cnVjdCBnc19yZXFfZW50cnkgKnJlcV9lbnRyeTsKKworCWlmIChkZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzX3Jlc2V0X2NvbmZpZzogTlVMTCBkZXZpY2UgcG9pbnRlclxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZGV2LT5kZXZfY29uZmlnID09IEdTX05PX0NPTkZJR19JRCkKKwkJcmV0dXJuOworCisJZGV2LT5kZXZfY29uZmlnID0gR1NfTk9fQ09ORklHX0lEOworCisJLyogZnJlZSB3cml0ZSByZXF1ZXN0cyBvbiB0aGUgZnJlZSBsaXN0ICovCisJd2hpbGUoIWxpc3RfZW1wdHkoJmRldi0+ZGV2X3JlcV9saXN0KSkgeworCQlyZXFfZW50cnkgPSBsaXN0X2VudHJ5KGRldi0+ZGV2X3JlcV9saXN0Lm5leHQsCisJCQlzdHJ1Y3QgZ3NfcmVxX2VudHJ5LCByZV9lbnRyeSk7CisJCWxpc3RfZGVsKCZyZXFfZW50cnktPnJlX2VudHJ5KTsKKwkJZ3NfZnJlZV9yZXFfZW50cnkoZGV2LT5kZXZfaW5fZXAsIHJlcV9lbnRyeSk7CisJfQorCisJLyogZGlzYWJsZSBlbmRwb2ludHMsIGZvcmNpbmcgY29tcGxldGlvbiBvZiBwZW5kaW5nIGkvbzsgKi8KKwkvKiBjb21wbGV0aW9uIGhhbmRsZXJzIGZyZWUgdGhlaXIgcmVxdWVzdHMgaW4gdGhpcyBjYXNlICovCisJaWYgKGRldi0+ZGV2X25vdGlmeV9lcCkgeworCQl1c2JfZXBfZGlzYWJsZShkZXYtPmRldl9ub3RpZnlfZXApOworCQlkZXYtPmRldl9ub3RpZnlfZXAgPSBOVUxMOworCX0KKwlpZiAoZGV2LT5kZXZfaW5fZXApIHsKKwkJdXNiX2VwX2Rpc2FibGUoZGV2LT5kZXZfaW5fZXApOworCQlkZXYtPmRldl9pbl9lcCA9IE5VTEw7CisJfQorCWlmIChkZXYtPmRldl9vdXRfZXApIHsKKwkJdXNiX2VwX2Rpc2FibGUoZGV2LT5kZXZfb3V0X2VwKTsKKwkJZGV2LT5kZXZfb3V0X2VwID0gTlVMTDsKKwl9Cit9CisKKy8qCisgKiBnc19idWlsZF9jb25maWdfYnVmCisgKgorICogQnVpbGRzIHRoZSBjb25maWcgZGVzY3JpcHRvcnMgaW4gdGhlIGdpdmVuIGJ1ZmZlciBhbmQgcmV0dXJucyB0aGUKKyAqIGxlbmd0aCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCisgKi8KK3N0YXRpYyBpbnQgZ3NfYnVpbGRfY29uZmlnX2J1Zih1OCAqYnVmLCBlbnVtIHVzYl9kZXZpY2Vfc3BlZWQgc3BlZWQsCisJdTggdHlwZSwgdW5zaWduZWQgaW50IGluZGV4LCBpbnQgaXNfb3RnKQoreworCWludCBsZW47CisJaW50IGhpZ2hfc3BlZWQ7CisJY29uc3Qgc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvciAqY29uZmlnX2Rlc2M7CisJY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKmZ1bmN0aW9uOworCisJaWYgKGluZGV4ID49IGdzX2RldmljZV9kZXNjLmJOdW1Db25maWd1cmF0aW9ucykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBvdGhlciBzcGVlZCBzd2l0Y2hlcyBoaWdoIGFuZCBmdWxsIHNwZWVkICovCisJaGlnaF9zcGVlZCA9IChzcGVlZCA9PSBVU0JfU1BFRURfSElHSCk7CisJaWYgKHR5cGUgPT0gVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRykKKwkJaGlnaF9zcGVlZCA9ICFoaWdoX3NwZWVkOworCisJaWYgKHVzZV9hY20pIHsKKwkJY29uZmlnX2Rlc2MgPSAmZ3NfYWNtX2NvbmZpZ19kZXNjOworCQlmdW5jdGlvbiA9IEdTX1NQRUVEX1NFTEVDVChoaWdoX3NwZWVkLAorCQkJZ3NfYWNtX2hpZ2hzcGVlZF9mdW5jdGlvbiwKKwkJCWdzX2FjbV9mdWxsc3BlZWRfZnVuY3Rpb24pOworCX0gZWxzZSB7CisJCWNvbmZpZ19kZXNjID0gJmdzX2J1bGtfY29uZmlnX2Rlc2M7CisJCWZ1bmN0aW9uID0gR1NfU1BFRURfU0VMRUNUKGhpZ2hfc3BlZWQsCisJCQlnc19idWxrX2hpZ2hzcGVlZF9mdW5jdGlvbiwKKwkJCWdzX2J1bGtfZnVsbHNwZWVkX2Z1bmN0aW9uKTsKKwl9CisKKwkvKiBmb3Igbm93LCBkb24ndCBhZHZlcnRpc2Ugc3JwLW9ubHkgZGV2aWNlcyAqLworCWlmICghaXNfb3RnKQorCQlmdW5jdGlvbisrOworCisJbGVuID0gdXNiX2dhZGdldF9jb25maWdfYnVmKGNvbmZpZ19kZXNjLCBidWYsIEdTX01BWF9ERVNDX0xFTiwgZnVuY3Rpb24pOworCWlmIChsZW4gPCAwKQorCQlyZXR1cm4gbGVuOworCisJKChzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yICopYnVmKS0+YkRlc2NyaXB0b3JUeXBlID0gdHlwZTsKKworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBnc19hbGxvY19yZXEKKyAqCisgKiBBbGxvY2F0ZSBhIHVzYl9yZXF1ZXN0IGFuZCBpdHMgYnVmZmVyLiAgUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlCisgKiB1c2JfcmVxdWVzdCBvciBOVUxMIGlmIHRoZXJlIGlzIGFuIGVycm9yLgorICovCitzdGF0aWMgc3RydWN0IHVzYl9yZXF1ZXN0ICpnc19hbGxvY19yZXEoc3RydWN0IHVzYl9lcCAqZXAsIHVuc2lnbmVkIGludCBsZW4sIGludCBrbWFsbG9jX2ZsYWdzKQoreworCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxOworCisJaWYgKGVwID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJcmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QoZXAsIGttYWxsb2NfZmxhZ3MpOworCisJaWYgKHJlcSAhPSBOVUxMKSB7CisJCXJlcS0+bGVuZ3RoID0gbGVuOworCQlyZXEtPmJ1ZiA9IGttYWxsb2MobGVuLCBrbWFsbG9jX2ZsYWdzKTsKKwkJaWYgKHJlcS0+YnVmID09IE5VTEwpIHsKKwkJCXVzYl9lcF9mcmVlX3JlcXVlc3QoZXAsIHJlcSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCXJldHVybiByZXE7Cit9CisKKy8qCisgKiBnc19mcmVlX3JlcQorICoKKyAqIEZyZWUgYSB1c2JfcmVxdWVzdCBhbmQgaXRzIGJ1ZmZlci4KKyAqLworc3RhdGljIHZvaWQgZ3NfZnJlZV9yZXEoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCWlmIChlcCAhPSBOVUxMICYmIHJlcSAhPSBOVUxMKSB7CisJCWtmcmVlKHJlcS0+YnVmKTsKKwkJdXNiX2VwX2ZyZWVfcmVxdWVzdChlcCwgcmVxKTsKKwl9Cit9CisKKy8qCisgKiBnc19hbGxvY19yZXFfZW50cnkKKyAqCisgKiBBbGxvY2F0ZXMgYSByZXF1ZXN0IGFuZCBpdHMgYnVmZmVyLCB1c2luZyB0aGUgZ2l2ZW4KKyAqIGVuZHBvaW50LCBidWZmZXIgbGVuLCBhbmQga21hbGxvYyBmbGFncy4KKyAqLworc3RhdGljIHN0cnVjdCBnc19yZXFfZW50cnkgKmdzX2FsbG9jX3JlcV9lbnRyeShzdHJ1Y3QgdXNiX2VwICplcCwgdW5zaWduZWQgbGVuLCBpbnQga21hbGxvY19mbGFncykKK3sKKwlzdHJ1Y3QgZ3NfcmVxX2VudHJ5CSpyZXE7CisKKwlyZXEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ3NfcmVxX2VudHJ5KSwga21hbGxvY19mbGFncyk7CisJaWYgKHJlcSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXJlcS0+cmVfcmVxID0gZ3NfYWxsb2NfcmVxKGVwLCBsZW4sIGttYWxsb2NfZmxhZ3MpOworCWlmIChyZXEtPnJlX3JlcSA9PSBOVUxMKSB7CisJCWtmcmVlKHJlcSk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJlcS0+cmVfcmVxLT5jb250ZXh0ID0gcmVxOworCisJcmV0dXJuIHJlcTsKK30KKworLyoKKyAqIGdzX2ZyZWVfcmVxX2VudHJ5CisgKgorICogRnJlZXMgYSByZXF1ZXN0IGFuZCBpdHMgYnVmZmVyLgorICovCitzdGF0aWMgdm9pZCBnc19mcmVlX3JlcV9lbnRyeShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IGdzX3JlcV9lbnRyeSAqcmVxKQoreworCWlmIChlcCAhPSBOVUxMICYmIHJlcSAhPSBOVUxMKSB7CisJCWlmIChyZXEtPnJlX3JlcSAhPSBOVUxMKQorCQkJZ3NfZnJlZV9yZXEoZXAsIHJlcS0+cmVfcmVxKTsKKwkJa2ZyZWUocmVxKTsKKwl9Cit9CisKKy8qCisgKiBnc19hbGxvY19wb3J0cworICoKKyAqIEFsbG9jYXRlIGFsbCBwb3J0cyBhbmQgc2V0IHRoZSBnc19kZXYgc3RydWN0IHRvIHBvaW50IHRvIHRoZW0uCisgKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KKyAqCisgKiBUaGUgZGV2aWNlIGxvY2sgaXMgbm9ybWFsbHkgaGVsZCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIGludCBnc19hbGxvY19wb3J0cyhzdHJ1Y3QgZ3NfZGV2ICpkZXYsIGludCBrbWFsbG9jX2ZsYWdzKQoreworCWludCBpOworCXN0cnVjdCBnc19wb3J0ICpwb3J0OworCisJaWYgKGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTzsKKworCWZvciAoaT0wOyBpPEdTX05VTV9QT1JUUzsgaSsrKSB7CisJCWlmICgocG9ydD0oc3RydWN0IGdzX3BvcnQgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ3NfcG9ydCksIGttYWxsb2NfZmxhZ3MpKSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJbWVtc2V0KHBvcnQsIDAsIHNpemVvZihzdHJ1Y3QgZ3NfcG9ydCkpOworCQlwb3J0LT5wb3J0X2RldiA9IGRldjsKKwkJcG9ydC0+cG9ydF9udW0gPSBpOworCQlwb3J0LT5wb3J0X2xpbmVfY29kaW5nLmR3RFRFUmF0ZSA9IGNwdV90b19sZTMyKEdTX0RFRkFVTFRfRFRFX1JBVEUpOworCQlwb3J0LT5wb3J0X2xpbmVfY29kaW5nLmJDaGFyRm9ybWF0ID0gR1NfREVGQVVMVF9DSEFSX0ZPUk1BVDsKKwkJcG9ydC0+cG9ydF9saW5lX2NvZGluZy5iUGFyaXR5VHlwZSA9IEdTX0RFRkFVTFRfUEFSSVRZOworCQlwb3J0LT5wb3J0X2xpbmVfY29kaW5nLmJEYXRhQml0cyA9IEdTX0RFRkFVTFRfREFUQV9CSVRTOworCQlzcGluX2xvY2tfaW5pdCgmcG9ydC0+cG9ydF9sb2NrKTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydC0+cG9ydF93cml0ZV93YWl0KTsKKworCQlkZXYtPmRldl9wb3J0W2ldID0gcG9ydDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGdzX2ZyZWVfcG9ydHMKKyAqCisgKiBGcmVlIGFsbCBjbG9zZWQgcG9ydHMuICBPcGVuIHBvcnRzIGFyZSBkaXNjb25uZWN0ZWQgYnkKKyAqIGZyZWVpbmcgdGhlaXIgd3JpdGUgYnVmZmVycywgc2V0dGluZyB0aGVpciBkZXZpY2UgcG9pbnRlcnMKKyAqIGFuZCB0aGUgcG9pbnRlcnMgdG8gdGhlbSBpbiB0aGUgZGV2aWNlIHRvIE5VTEwuICBUaGVzZQorICogcG9ydHMgd2lsbCBiZSBmcmVlZCB3aGVuIGNsb3NlZC4KKyAqCisgKiBUaGUgZGV2aWNlIGxvY2sgaXMgbm9ybWFsbHkgaGVsZCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIHZvaWQgZ3NfZnJlZV9wb3J0cyhzdHJ1Y3QgZ3NfZGV2ICpkZXYpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZ3NfcG9ydCAqcG9ydDsKKworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm9yIChpPTA7IGk8R1NfTlVNX1BPUlRTOyBpKyspIHsKKwkJaWYgKChwb3J0PWRldi0+ZGV2X3BvcnRbaV0pICE9IE5VTEwpIHsKKwkJCWRldi0+ZGV2X3BvcnRbaV0gPSBOVUxMOworCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7CisKKwkJCWlmIChwb3J0LT5wb3J0X3dyaXRlX2J1ZiAhPSBOVUxMKSB7CisJCQkJZ3NfYnVmX2ZyZWUocG9ydC0+cG9ydF93cml0ZV9idWYpOworCQkJCXBvcnQtPnBvcnRfd3JpdGVfYnVmID0gTlVMTDsKKwkJCX0KKworCQkJaWYgKHBvcnQtPnBvcnRfb3Blbl9jb3VudCA+IDAgfHwgcG9ydC0+cG9ydF9pbl91c2UpIHsKKwkJCQlwb3J0LT5wb3J0X2RldiA9IE5VTEw7CisJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5wb3J0X3dyaXRlX3dhaXQpOworCQkJCWlmIChwb3J0LT5wb3J0X3R0eSkgeworCQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPnBvcnRfdHR5LT5yZWFkX3dhaXQpOworCQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPnBvcnRfdHR5LT53cml0ZV93YWl0KTsKKwkJCQl9CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+cG9ydF9sb2NrLCBmbGFncyk7CisJCQl9IGVsc2UgeworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPnBvcnRfbG9jaywgZmxhZ3MpOworCQkJCWtmcmVlKHBvcnQpOworCQkJfQorCisJCX0KKwl9Cit9CisKKy8qIENpcmN1bGFyIEJ1ZmZlciAqLworCisvKgorICogZ3NfYnVmX2FsbG9jCisgKgorICogQWxsb2NhdGUgYSBjaXJjdWxhciBidWZmZXIgYW5kIGFsbCBhc3NvY2lhdGVkIG1lbW9yeS4KKyAqLworc3RhdGljIHN0cnVjdCBnc19idWYgKmdzX2J1Zl9hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IGttYWxsb2NfZmxhZ3MpCit7CisJc3RydWN0IGdzX2J1ZiAqZ2I7CisKKwlpZiAoc2l6ZSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWdiID0gKHN0cnVjdCBnc19idWYgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ3NfYnVmKSwga21hbGxvY19mbGFncyk7CisJaWYgKGdiID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJZ2ItPmJ1Zl9idWYgPSBrbWFsbG9jKHNpemUsIGttYWxsb2NfZmxhZ3MpOworCWlmIChnYi0+YnVmX2J1ZiA9PSBOVUxMKSB7CisJCWtmcmVlKGdiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZ2ItPmJ1Zl9zaXplID0gc2l6ZTsKKwlnYi0+YnVmX2dldCA9IGdiLT5idWZfcHV0ID0gZ2ItPmJ1Zl9idWY7CisKKwlyZXR1cm4gZ2I7Cit9CisKKy8qCisgKiBnc19idWZfZnJlZQorICoKKyAqIEZyZWUgdGhlIGJ1ZmZlciBhbmQgYWxsIGFzc29jaWF0ZWQgbWVtb3J5LgorICovCit2b2lkIGdzX2J1Zl9mcmVlKHN0cnVjdCBnc19idWYgKmdiKQoreworCWlmIChnYiAhPSBOVUxMKSB7CisJCWlmIChnYi0+YnVmX2J1ZiAhPSBOVUxMKQorCQkJa2ZyZWUoZ2ItPmJ1Zl9idWYpOworCQlrZnJlZShnYik7CisJfQorfQorCisvKgorICogZ3NfYnVmX2NsZWFyCisgKgorICogQ2xlYXIgb3V0IGFsbCBkYXRhIGluIHRoZSBjaXJjdWxhciBidWZmZXIuCisgKi8KK3ZvaWQgZ3NfYnVmX2NsZWFyKHN0cnVjdCBnc19idWYgKmdiKQoreworCWlmIChnYiAhPSBOVUxMKQorCQlnYi0+YnVmX2dldCA9IGdiLT5idWZfcHV0OworCQkvKiBlcXVpdmFsZW50IHRvIGEgZ2V0IG9mIGFsbCBkYXRhIGF2YWlsYWJsZSAqLworfQorCisvKgorICogZ3NfYnVmX2RhdGFfYXZhaWwKKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBvZiBkYXRhIGF2YWlsYWJsZSBpbiB0aGUgY2lyY3VsYXIKKyAqIGJ1ZmZlci4KKyAqLwordW5zaWduZWQgaW50IGdzX2J1Zl9kYXRhX2F2YWlsKHN0cnVjdCBnc19idWYgKmdiKQoreworCWlmIChnYiAhPSBOVUxMKQorCQlyZXR1cm4gKGdiLT5idWZfc2l6ZSArIGdiLT5idWZfcHV0IC0gZ2ItPmJ1Zl9nZXQpICUgZ2ItPmJ1Zl9zaXplOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBnc19idWZfc3BhY2VfYXZhaWwKKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBvZiBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGNpcmN1bGFyCisgKiBidWZmZXIuCisgKi8KK3Vuc2lnbmVkIGludCBnc19idWZfc3BhY2VfYXZhaWwoc3RydWN0IGdzX2J1ZiAqZ2IpCit7CisJaWYgKGdiICE9IE5VTEwpCisJCXJldHVybiAoZ2ItPmJ1Zl9zaXplICsgZ2ItPmJ1Zl9nZXQgLSBnYi0+YnVmX3B1dCAtIDEpICUgZ2ItPmJ1Zl9zaXplOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBnc19idWZfcHV0CisgKgorICogQ29weSBkYXRhIGRhdGEgZnJvbSBhIHVzZXIgYnVmZmVyIGFuZCBwdXQgaXQgaW50byB0aGUgY2lyY3VsYXIgYnVmZmVyLgorICogUmVzdHJpY3QgdG8gdGhlIGFtb3VudCBvZiBzcGFjZSBhdmFpbGFibGUuCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLgorICovCit1bnNpZ25lZCBpbnQgZ3NfYnVmX3B1dChzdHJ1Y3QgZ3NfYnVmICpnYiwgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWlmIChnYiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWxlbiAgPSBnc19idWZfc3BhY2VfYXZhaWwoZ2IpOworCWlmIChjb3VudCA+IGxlbikKKwkJY291bnQgPSBsZW47CisKKwlpZiAoY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBnYi0+YnVmX2J1ZiArIGdiLT5idWZfc2l6ZSAtIGdiLT5idWZfcHV0OworCWlmIChjb3VudCA+IGxlbikgeworCQltZW1jcHkoZ2ItPmJ1Zl9wdXQsIGJ1ZiwgbGVuKTsKKwkJbWVtY3B5KGdiLT5idWZfYnVmLCBidWYrbGVuLCBjb3VudCAtIGxlbik7CisJCWdiLT5idWZfcHV0ID0gZ2ItPmJ1Zl9idWYgKyBjb3VudCAtIGxlbjsKKwl9IGVsc2UgeworCQltZW1jcHkoZ2ItPmJ1Zl9wdXQsIGJ1ZiwgY291bnQpOworCQlpZiAoY291bnQgPCBsZW4pCisJCQlnYi0+YnVmX3B1dCArPSBjb3VudDsKKwkJZWxzZSAvKiBjb3VudCA9PSBsZW4gKi8KKwkJCWdiLT5idWZfcHV0ID0gZ2ItPmJ1Zl9idWY7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogZ3NfYnVmX2dldAorICoKKyAqIEdldCBkYXRhIGZyb20gdGhlIGNpcmN1bGFyIGJ1ZmZlciBhbmQgY29weSB0byB0aGUgZ2l2ZW4gYnVmZmVyLgorICogUmVzdHJpY3QgdG8gdGhlIGFtb3VudCBvZiBkYXRhIGF2YWlsYWJsZS4KKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCisgKi8KK3Vuc2lnbmVkIGludCBnc19idWZfZ2V0KHN0cnVjdCBnc19idWYgKmdiLCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJaWYgKGdiID09IE5VTEwpCisJCXJldHVybiAwOworCisJbGVuID0gZ3NfYnVmX2RhdGFfYXZhaWwoZ2IpOworCWlmIChjb3VudCA+IGxlbikKKwkJY291bnQgPSBsZW47CisKKwlpZiAoY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBnYi0+YnVmX2J1ZiArIGdiLT5idWZfc2l6ZSAtIGdiLT5idWZfZ2V0OworCWlmIChjb3VudCA+IGxlbikgeworCQltZW1jcHkoYnVmLCBnYi0+YnVmX2dldCwgbGVuKTsKKwkJbWVtY3B5KGJ1ZitsZW4sIGdiLT5idWZfYnVmLCBjb3VudCAtIGxlbik7CisJCWdiLT5idWZfZ2V0ID0gZ2ItPmJ1Zl9idWYgKyBjb3VudCAtIGxlbjsKKwl9IGVsc2UgeworCQltZW1jcHkoYnVmLCBnYi0+YnVmX2dldCwgY291bnQpOworCQlpZiAoY291bnQgPCBsZW4pCisJCQlnYi0+YnVmX2dldCArPSBjb3VudDsKKwkJZWxzZSAvKiBjb3VudCA9PSBsZW4gKi8KKwkJCWdiLT5idWZfZ2V0ID0gZ2ItPmJ1Zl9idWY7CisJfQorCisJcmV0dXJuIGNvdW50OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3VzYnN0cmluZy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VzYnN0cmluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNzM1NzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdXNic3RyaW5nLmMKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgRGF2aWQgQnJvd25lbGwKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC91c2JfY2g5Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiX2dhZGdldC5oPgorCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisKK3N0YXRpYyBpbnQgdXRmOF90b191dGYxNmxlKGNvbnN0IGNoYXIgKnMsIF9fbGUxNiAqY3AsIHVuc2lnbmVkIGxlbikKK3sKKwlpbnQJY291bnQgPSAwOworCXU4CWM7CisJdTE2CXVjaGFyOworCisJLyogdGhpcyBpbnNpc3RzIG9uIGNvcnJlY3QgZW5jb2RpbmdzLCB0aG91Z2ggbm90IG1pbmltYWwgb25lcy4KKwkgKiBCVVQgaXQgY3VycmVudGx5IHJlamVjdHMgbGVnaXQgNC1ieXRlIFVURi04IGNvZGUgcG9pbnRzLAorCSAqIHdoaWNoIG5lZWQgc3Vycm9nYXRlIHBhaXJzLiAgKFVuaWNvZGUgMy4xIGNhbiB1c2UgdGhlbS4pCisJICovCisJd2hpbGUgKGxlbiAhPSAwICYmIChjID0gKHU4KSAqcysrKSAhPSAwKSB7CisJCWlmICh1bmxpa2VseShjICYgMHg4MCkpIHsKKwkJCS8vIDItYnl0ZSBzZXF1ZW5jZToKKwkJCS8vIDAwMDAweXl5eXl4eHh4eHggPSAxMTB5eXl5eSAxMHh4eHh4eAorCQkJaWYgKChjICYgMHhlMCkgPT0gMHhjMCkgeworCQkJCXVjaGFyID0gKGMgJiAweDFmKSA8PCA2OworCisJCQkJYyA9ICh1OCkgKnMrKzsKKwkJCQlpZiAoKGMgJiAweGMwKSAhPSAweGMwKQorCQkJCQlnb3RvIGZhaWw7CisJCQkJYyAmPSAweDNmOworCQkJCXVjaGFyIHw9IGM7CisKKwkJCS8vIDMtYnl0ZSBzZXF1ZW5jZSAobW9zdCBDSktWIGNoYXJhY3RlcnMpOgorCQkJLy8genp6enl5eXl5eXh4eHh4eCA9IDExMTB6enp6IDEweXl5eXl5IDEweHh4eHh4CisJCQl9IGVsc2UgaWYgKChjICYgMHhmMCkgPT0gMHhlMCkgeworCQkJCXVjaGFyID0gKGMgJiAweDBmKSA8PCAxMjsKKworCQkJCWMgPSAodTgpICpzKys7CisJCQkJaWYgKChjICYgMHhjMCkgIT0gMHhjMCkKKwkJCQkJZ290byBmYWlsOworCQkJCWMgJj0gMHgzZjsKKwkJCQl1Y2hhciB8PSBjIDw8IDY7CisKKwkJCQljID0gKHU4KSAqcysrOworCQkJCWlmICgoYyAmIDB4YzApICE9IDB4YzApCisJCQkJCWdvdG8gZmFpbDsKKwkJCQljICY9IDB4M2Y7CisJCQkJdWNoYXIgfD0gYzsKKworCQkJCS8qIG5vIGJvZ3VzIHN1cnJvZ2F0ZXMgKi8KKwkJCQlpZiAoMHhkODAwIDw9IHVjaGFyICYmIHVjaGFyIDw9IDB4ZGZmZikKKwkJCQkJZ290byBmYWlsOworCisJCQkvLyA0LWJ5dGUgc2VxdWVuY2UgKHN1cnJvZ2F0ZSBwYWlycywgY3VycmVudGx5IHJhcmUpOgorCQkJLy8gMTExMDExMTB3d3d3enp6enl5ICsgMTEwMTExeXl5eXh4eHh4eAorCQkJLy8gICAgID0gMTExMTB1dXUgMTB1dXp6enogMTB5eXl5eXkgMTB4eHh4eHgKKwkJCS8vICh1dXV1dSA9IHd3d3cgKyAxKQorCQkJLy8gRklYTUUgYWNjZXB0IHRoZSBzdXJyb2dhdGUgY29kZSBwb2ludHMgKG9ubHkpCisKKwkJCX0gZWxzZQorCQkJCWdvdG8gZmFpbDsKKwkJfSBlbHNlCisJCQl1Y2hhciA9IGM7CisJCXB1dF91bmFsaWduZWQgKGNwdV90b19sZTE2ICh1Y2hhciksIGNwKyspOworCQljb3VudCsrOworCQlsZW4tLTsKKwl9CisJcmV0dXJuIGNvdW50OworZmFpbDoKKwlyZXR1cm4gLTE7Cit9CisKKworLyoqCisgKiB1c2JfZ2FkZ2V0X2dldF9zdHJpbmcgLSBmaWxsIG91dCBhIHN0cmluZyBkZXNjcmlwdG9yIAorICogQHRhYmxlOiBvZiBjIHN0cmluZ3MgZW5jb2RlZCB1c2luZyBVVEYtOAorICogQGlkOiBzdHJpbmcgaWQsIGZyb20gbG93IGJ5dGUgb2Ygd1ZhbHVlIGluIGdldCBzdHJpbmcgZGVzY3JpcHRvcgorICogQGJ1ZjogYXQgbGVhc3QgMjU2IGJ5dGVzCisgKgorICogRmluZHMgdGhlIFVURi04IHN0cmluZyBtYXRjaGluZyB0aGUgSUQsIGFuZCBjb252ZXJ0cyBpdCBpbnRvIGEKKyAqIHN0cmluZyBkZXNjcmlwdG9yIGluIHV0ZjE2LWxlLgorICogUmV0dXJucyBsZW5ndGggb2YgZGVzY3JpcHRvciAoYWx3YXlzIGV2ZW4pIG9yIG5lZ2F0aXZlIGVycm5vCisgKgorICogSWYgeW91ciBkcml2ZXIgbmVlZHMgc3RpbmdzIGluIG11bHRpcGxlIGxhbmd1YWdlcywgeW91J2xsIHByb2JhYmx5CisgKiAic3dpdGNoICh3SW5kZXgpIHsgLi4uIH0iICBpbiB5b3VyIGVwMCBzdHJpbmcgZGVzY3JpcHRvciBsb2dpYywKKyAqIHVzaW5nIHRoaXMgcm91dGluZSBhZnRlciBjaG9vc2luZyB3aGljaCBzZXQgb2YgVVRGLTggc3RyaW5ncyB0byB1c2UuCisgKiBOb3RlIHRoYXQgVVMtQVNDSUkgaXMgYSBzdHJpY3Qgc3Vic2V0IG9mIFVURi04OyBhbnkgc3RyaW5nIGJ5dGVzIHdpdGgKKyAqIHRoZSBlaWdodGggYml0IHNldCB3aWxsIGJlIG11bHRpYnl0ZSBVVEYtOCBjaGFyYWN0ZXJzLCBub3QgSVNPLTg4NTkvMQorICogY2hhcmFjdGVycyAod2hpY2ggYXJlIGFsc28gd2lkZWx5IHVzZWQgaW4gQyBzdHJpbmdzKS4KKyAqLworaW50Cit1c2JfZ2FkZ2V0X2dldF9zdHJpbmcgKHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MgKnRhYmxlLCBpbnQgaWQsIHU4ICpidWYpCit7CisJc3RydWN0IHVzYl9zdHJpbmcJKnM7CisJaW50CQkJbGVuOworCisJLyogZGVzY3JpcHRvciAwIGhhcyB0aGUgbGFuZ3VhZ2UgaWQgKi8KKwlpZiAoaWQgPT0gMCkgeworCQlidWYgWzBdID0gNDsKKwkJYnVmIFsxXSA9IFVTQl9EVF9TVFJJTkc7CisJCWJ1ZiBbMl0gPSAodTgpIHRhYmxlLT5sYW5ndWFnZTsKKwkJYnVmIFszXSA9ICh1OCkgKHRhYmxlLT5sYW5ndWFnZSA+PiA4KTsKKwkJcmV0dXJuIDQ7CisJfQorCWZvciAocyA9IHRhYmxlLT5zdHJpbmdzOyBzICYmIHMtPnM7IHMrKykKKwkJaWYgKHMtPmlkID09IGlkKQorCQkJYnJlYWs7CisKKwkvKiB1bnJlY29nbml6ZWQ6IHN0YWxsLiAqLworCWlmICghcyB8fCAhcy0+cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBzdHJpbmcgZGVzY3JpcHRvcnMgaGF2ZSBsZW5ndGgsIHRhZywgdGhlbiBVVEYxNi1MRSB0ZXh0ICovCisJbGVuID0gbWluICgoc2l6ZV90KSAxMjYsIHN0cmxlbiAocy0+cykpOworCW1lbXNldCAoYnVmICsgMiwgMCwgMiAqIGxlbik7CS8qIHplcm8gYWxsIHRoZSBieXRlcyAqLworCWxlbiA9IHV0ZjhfdG9fdXRmMTZsZShzLT5zLCAoX19sZTE2ICopJmJ1ZlsyXSwgbGVuKTsKKwlpZiAobGVuIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJYnVmIFswXSA9IChsZW4gKyAxKSAqIDI7CisJYnVmIFsxXSA9IFVTQl9EVF9TVFJJTkc7CisJcmV0dXJuIGJ1ZiBbMF07Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNDk0MzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jCkBAIC0wLDAgKzEsMTM1NyBAQAorLyoKKyAqIHplcm8uYyAtLSBHYWRnZXQgWmVybywgZm9yIFVTQiBkZXZlbG9wbWVudAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IERhdmlkIEJyb3duZWxsCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbWF5IG5vdCBiZSB1c2VkCisgKiAgICB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoYXQgTGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUworICogSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworLyoKKyAqIEdhZGdldCBaZXJvIG9ubHkgbmVlZHMgdHdvIGJ1bGsgZW5kcG9pbnRzLCBhbmQgaXMgYW4gZXhhbXBsZSBvZiBob3cgeW91CisgKiBjYW4gd3JpdGUgYSBoYXJkd2FyZS1hZ25vc3RpYyBnYWRnZXQgZHJpdmVyIHJ1bm5pbmcgaW5zaWRlIGEgVVNCIGRldmljZS4KKyAqCisgKiBIYXJkd2FyZSBkZXRhaWxzIGFyZSB2aXNpYmxlIChzZWUgQ09ORklHX1VTQl9aRVJPXyogYmVsb3cpIGJ1dCBkb24ndAorICogYWZmZWN0IG1vc3Qgb2YgdGhlIGRyaXZlci4KKyAqCisgKiBVc2UgaXQgd2l0aCB0aGUgTGludXggaG9zdC9tYXN0ZXIgc2lkZSAidXNidGVzdCIgZHJpdmVyIHRvIGdldCBhIGJhc2ljCisgKiBmdW5jdGlvbmFsIHRlc3Qgb2YgeW91ciBkZXZpY2Utc2lkZSB1c2Igc3RhY2ssIG9yIHdpdGggInVzYi1za2VsZXRvbiIuCisgKgorICogSXQgc3VwcG9ydHMgdHdvIHNpbWlsYXIgY29uZmlndXJhdGlvbnMuICBPbmUgc2lua3Mgd2hhdGV2ZXIgdGhlIHVzYiBob3N0CisgKiB3cml0ZXMsIGFuZCBpbiByZXR1cm4gc291cmNlcyB6ZXJvZXMuICBUaGUgb3RoZXIgbG9vcHMgd2hhdGV2ZXIgdGhlIGhvc3QKKyAqIHdyaXRlcyBiYWNrLCBzbyB0aGUgaG9zdCBjYW4gcmVhZCBpdC4gIE1vZHVsZSBvcHRpb25zIGluY2x1ZGU6CisgKgorICogICBidWZsZW49TgkJZGVmYXVsdCBOPTQwOTYsIGJ1ZmZlciBzaXplIHVzZWQKKyAqICAgcWxlbj1OCQlkZWZhdWx0IE49MzIsIGhvdyBtYW55IGJ1ZmZlcnMgaW4gdGhlIGxvb3BiYWNrIHF1ZXVlCisgKiAgIGxvb3BkZWZhdWx0CWRlZmF1bHQgZmFsc2UsIGxpc3QgbG9vcGJhY2sgY29uZmlnIGZpcnN0CisgKgorICogTWFueSBkcml2ZXJzIHdpbGwgb25seSBoYXZlIG9uZSBjb25maWd1cmF0aW9uLCBsZXR0aW5nIHRoZW0gYmUgbXVjaAorICogc2ltcGxlciBpZiB0aGV5IGFsc28gZG9uJ3Qgc3VwcG9ydCBoaWdoIHNwZWVkIG9wZXJhdGlvbiAobGlrZSB0aGlzCisgKiBkcml2ZXIgZG9lcykuCisgKi8KKworI2RlZmluZSBERUJVRyAxCisvLyAjZGVmaW5lIFZFUkJPU0UKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYl9jaDkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfZ2FkZ2V0Lmg+CisKKyNpbmNsdWRlICJnYWRnZXRfY2hpcHMuaCIKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkiU3QgUGF0cmljaydzIERheSAyMDA0IgorCitzdGF0aWMgY29uc3QgY2hhciBzaG9ydG5hbWUgW10gPSAiemVybyI7CitzdGF0aWMgY29uc3QgY2hhciBsb25nbmFtZSBbXSA9ICJHYWRnZXQgWmVybyI7CisKK3N0YXRpYyBjb25zdCBjaGFyIHNvdXJjZV9zaW5rIFtdID0gInNvdXJjZSBhbmQgc2luayBkYXRhIjsKK3N0YXRpYyBjb25zdCBjaGFyIGxvb3BiYWNrIFtdID0gImxvb3AgaW5wdXQgdG8gb3V0cHV0IjsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIGRyaXZlciBhc3N1bWVzIHNlbGYtcG93ZXJlZCBoYXJkd2FyZSwgYW5kCisgKiBoYXMgbm8gd2F5IGZvciB1c2VycyB0byB0cmlnZ2VyIHJlbW90ZSB3YWtldXAuCisgKgorICogdGhpcyB2ZXJzaW9uIGF1dG9jb25maWd1cmVzIGFzIG11Y2ggYXMgcG9zc2libGUsCisgKiB3aGljaCBpcyByZWFzb25hYmxlIGZvciBtb3N0ICJidWxrLW9ubHkiIGRyaXZlcnMuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpFUF9JTl9OQU1FOwkJLyogc291cmNlICovCitzdGF0aWMgY29uc3QgY2hhciAqRVBfT1VUX05BTUU7CQkvKiBzaW5rICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGJpZyBlbm91Z2ggdG8gaG9sZCBvdXIgYmlnZ2VzdCBkZXNjcmlwdG9yICovCisjZGVmaW5lIFVTQl9CVUZTSVoJMjU2CisKK3N0cnVjdCB6ZXJvX2RldiB7CisJc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0OworCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOwkJLyogZm9yIGNvbnRyb2wgcmVzcG9uc2VzICovCisKKwkvKiB3aGVuIGNvbmZpZ3VyZWQsIHdlIGhhdmUgb25lIG9mIHR3byBjb25maWdzOgorCSAqIC0gc291cmNlIGRhdGEgKGluIHRvIGhvc3QpIGFuZCBzaW5rIGl0IChvdXQgZnJvbSBob3N0KQorCSAqIC0gb3IgbG9vcCBpdCBiYWNrIChvdXQgZnJvbSBob3N0IGJhY2sgaW4gdG8gaG9zdCkKKwkgKi8KKwl1OAkJCWNvbmZpZzsKKwlzdHJ1Y3QgdXNiX2VwCQkqaW5fZXAsICpvdXRfZXA7CisKKwkvKiBhdXRvcmVzdW1lIHRpbWVyICovCisJc3RydWN0IHRpbWVyX2xpc3QJcmVzdW1lOworfTsKKworI2RlZmluZSB4cHJpbnRrKGQsbGV2ZWwsZm10LGFyZ3MuLi4pIFwKKwlkZXZfcHJpbnRrKGxldmVsICwgJihkKS0+Z2FkZ2V0LT5kZXYgLCBmbXQgLCAjIyBhcmdzKQorCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREJHKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9ERUJVRyAsIGZtdCAsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEQkcoZGV2LGZtdCxhcmdzLi4uKSBcCisJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRlZiBWRVJCT1NFCisjZGVmaW5lIFZEQkcJREJHCisjZWxzZQorI2RlZmluZSBWREJHKGRldixmbXQsYXJncy4uLikgXAorCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBWRVJCT1NFICovCisKKyNkZWZpbmUgRVJST1IoZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX0VSUiAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIFdBUk4oZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX1dBUk5JTkcgLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBJTkZPKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9JTkZPICwgZm10ICwgIyMgYXJncykKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHVuc2lnbmVkIGJ1ZmxlbiA9IDQwOTY7CitzdGF0aWMgdW5zaWduZWQgcWxlbiA9IDMyOworc3RhdGljIHVuc2lnbmVkIHBhdHRlcm4gPSAwOworCittb2R1bGVfcGFyYW0gKGJ1ZmxlbiwgdWludCwgU19JUlVHT3xTX0lXVVNSKTsKK21vZHVsZV9wYXJhbSAocWxlbiwgdWludCwgU19JUlVHT3xTX0lXVVNSKTsKK21vZHVsZV9wYXJhbSAocGF0dGVybiwgdWludCwgU19JUlVHT3xTX0lXVVNSKTsKKworLyoKKyAqIGlmIGl0J3Mgbm9uemVybywgYXV0b3Jlc3VtZSBzYXlzIGhvdyBtYW55IHNlY29uZHMgdG8gd2FpdAorICogYmVmb3JlIHRyeWluZyB0byB3YWtlIHVwIHRoZSBob3N0IGFmdGVyIHN1c3BlbmQuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBhdXRvcmVzdW1lID0gMDsKK21vZHVsZV9wYXJhbSAoYXV0b3Jlc3VtZSwgdWludCwgMCk7CisKKy8qCisgKiBOb3JtYWxseSB0aGUgImxvb3BiYWNrIiBjb25maWd1cmF0aW9uIGlzIHNlY29uZCAoaW5kZXggMSkgc28KKyAqIGl0J3Mgbm90IHRoZSBkZWZhdWx0LiAgSGVyZSdzIHdoZXJlIHRvIGNoYW5nZSB0aGF0IG9yZGVyLCB0bworICogd29yayBiZXR0ZXIgd2l0aCBob3N0cyB3aGVyZSBjb25maWcgY2hhbmdlcyBhcmUgcHJvYmxlbWF0aWMuCisgKiBPciBjb250cm9sbGVycyAobGlrZSBzdXBlcmgpIHRoYXQgb25seSBzdXBwb3J0IG9uZSBjb25maWcuCisgKi8KK3N0YXRpYyBpbnQgbG9vcGRlZmF1bHQgPSAwOworCittb2R1bGVfcGFyYW0gKGxvb3BkZWZhdWx0LCBib29sLCBTX0lSVUdPfFNfSVdVU1IpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBUaGFua3MgdG8gTmV0Q2hpcCBUZWNobm9sb2dpZXMgZm9yIGRvbmF0aW5nIHRoaXMgcHJvZHVjdCBJRC4KKyAqCisgKiBETyBOT1QgUkVVU0UgVEhFU0UgSURzIHdpdGggYSBwcm90b2NvbC1pbmNvbXBhdGlibGUgZHJpdmVyISEgIEV2ZXIhIQorICogSW5zdGVhZDogIGFsbG9jYXRlIHlvdXIgb3duLCB1c2luZyBub3JtYWwgVVNCLUlGIHByb2NlZHVyZXMuCisgKi8KKyNpZm5kZWYJQ09ORklHX1VTQl9aRVJPX0hOUFRFU1QKKyNkZWZpbmUgRFJJVkVSX1ZFTkRPUl9OVU0JMHgwNTI1CQkvKiBOZXRDaGlwICovCisjZGVmaW5lIERSSVZFUl9QUk9EVUNUX05VTQkweGE0YTAJCS8qIExpbnV4LVVTQiAiR2FkZ2V0IFplcm8iICovCisjZWxzZQorI2RlZmluZSBEUklWRVJfVkVORE9SX05VTQkweDFhMGEJCS8qIE9URyB0ZXN0IGRldmljZSBJRHMgKi8KKyNkZWZpbmUgRFJJVkVSX1BST0RVQ1RfTlVNCTB4YmFkZAorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBERVNDUklQVE9SUyAuLi4gbW9zdCBhcmUgc3RhdGljLCBidXQgc3RyaW5ncyBhbmQgKGZ1bGwpCisgKiBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3JzIGFyZSBidWlsdCBvbiBkZW1hbmQuCisgKi8KKworI2RlZmluZSBTVFJJTkdfTUFOVUZBQ1RVUkVSCQkyNQorI2RlZmluZSBTVFJJTkdfUFJPRFVDVAkJCTQyCisjZGVmaW5lIFNUUklOR19TRVJJQUwJCQkxMDEKKyNkZWZpbmUgU1RSSU5HX1NPVVJDRV9TSU5LCQkyNTAKKyNkZWZpbmUgU1RSSU5HX0xPT1BCQUNLCQkJMjUxCisKKy8qCisgKiBUaGlzIGRldmljZSBhZHZlcnRpc2VzIHR3byBjb25maWd1cmF0aW9uczsgdGhlc2UgbnVtYmVycyB3b3JrCisgKiBvbiBhIHB4YTI1MCBhcyB3ZWxsIGFzIG1vcmUgZmxleGlibGUgaGFyZHdhcmUuCisgKi8KKyNkZWZpbmUJQ09ORklHX1NPVVJDRV9TSU5LCTMKKyNkZWZpbmUJQ09ORklHX0xPT1BCQUNLCQkyCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yCitkZXZpY2VfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2YgZGV2aWNlX2Rlc2MsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0UsCisKKwkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMCksCisJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfVkVORE9SX1NQRUMsCisKKwkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNiAoRFJJVkVSX1ZFTkRPUl9OVU0pLAorCS5pZFByb2R1Y3QgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNiAoRFJJVkVSX1BST0RVQ1RfTlVNKSwKKwkuaU1hbnVmYWN0dXJlciA9CVNUUklOR19NQU5VRkFDVFVSRVIsCisJLmlQcm9kdWN0ID0JCVNUUklOR19QUk9EVUNULAorCS5pU2VyaWFsTnVtYmVyID0JU1RSSU5HX1NFUklBTCwKKwkuYk51bUNvbmZpZ3VyYXRpb25zID0JMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yCitzb3VyY2Vfc2lua19jb25maWcgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIHNvdXJjZV9zaW5rX2NvbmZpZywKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NPTkZJRywKKworCS8qIGNvbXB1dGUgd1RvdGFsTGVuZ3RoIG9uIHRoZSBmbHkgKi8KKwkuYk51bUludGVyZmFjZXMgPQkxLAorCS5iQ29uZmlndXJhdGlvblZhbHVlID0JQ09ORklHX1NPVVJDRV9TSU5LLAorCS5pQ29uZmlndXJhdGlvbiA9CVNUUklOR19TT1VSQ0VfU0lOSywKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9DT05GSUdfQVRUX09ORSB8IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKKwkuYk1heFBvd2VyID0JCTEsCS8qIHNlbGYtcG93ZXJlZCAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IKK2xvb3BiYWNrX2NvbmZpZyA9IHsKKwkuYkxlbmd0aCA9CQlzaXplb2YgbG9vcGJhY2tfY29uZmlnLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ09ORklHLAorCisJLyogY29tcHV0ZSB3VG90YWxMZW5ndGggb24gdGhlIGZseSAqLworCS5iTnVtSW50ZXJmYWNlcyA9CTEsCisJLmJDb25maWd1cmF0aW9uVmFsdWUgPQlDT05GSUdfTE9PUEJBQ0ssCisJLmlDb25maWd1cmF0aW9uID0JU1RSSU5HX0xPT1BCQUNLLAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0NPTkZJR19BVFRfT05FIHwgVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAorCS5iTWF4UG93ZXIgPQkJMSwJLyogc2VsZi1wb3dlcmVkICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9vdGdfZGVzY3JpcHRvcgorb3RnX2Rlc2NyaXB0b3IgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIG90Z19kZXNjcmlwdG9yLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfT1RHLAorCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfT1RHX1NSUCwKK307CisKKy8qIG9uZSBpbnRlcmZhY2UgaW4gZWFjaCBjb25maWd1cmF0aW9uICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yCitzb3VyY2Vfc2lua19pbnRmID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBzb3VyY2Vfc2lua19pbnRmLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAorCisJLmJOdW1FbmRwb2ludHMgPQkyLAorCS5iSW50ZXJmYWNlQ2xhc3MgPQlVU0JfQ0xBU1NfVkVORE9SX1NQRUMsCisJLmlJbnRlcmZhY2UgPQkJU1RSSU5HX1NPVVJDRV9TSU5LLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IKK2xvb3BiYWNrX2ludGYgPSB7CisJLmJMZW5ndGggPQkJc2l6ZW9mIGxvb3BiYWNrX2ludGYsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9JTlRFUkZBQ0UsCisKKwkuYk51bUVuZHBvaW50cyA9CTIsCisJLmJJbnRlcmZhY2VDbGFzcyA9CVVTQl9DTEFTU19WRU5ET1JfU1BFQywKKwkuaUludGVyZmFjZSA9CQlTVFJJTkdfTE9PUEJBQ0ssCit9OworCisvKiB0d28gZnVsbCBzcGVlZCBidWxrIGVuZHBvaW50czsgdGhlaXIgdXNlIGlzIGNvbmZpZy1kZXBlbmRlbnQgKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgorZnNfc291cmNlX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCitmc19zaW5rX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9PVVQsCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmZzX3NvdXJjZV9zaW5rX2Z1bmN0aW9uIFtdID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvdGdfZGVzY3JpcHRvciwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmc291cmNlX3NpbmtfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc2lua19kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19zb3VyY2VfZGVzYywKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmZzX2xvb3BiYWNrX2Z1bmN0aW9uIFtdID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvdGdfZGVzY3JpcHRvciwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbG9vcGJhY2tfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmZnNfc2lua19kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZmc19zb3VyY2VfZGVzYywKKwlOVUxMLAorfTsKKworI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCisvKgorICogdXNiIDIuMCBkZXZpY2VzIG5lZWQgdG8gZXhwb3NlIGJvdGggaGlnaCBzcGVlZCBhbmQgZnVsbCBzcGVlZAorICogZGVzY3JpcHRvcnMsIHVubGVzcyB0aGV5IG9ubHkgcnVuIGF0IGZ1bGwgc3BlZWQuCisgKgorICogdGhhdCBtZWFucyBhbHRlcm5hdGUgZW5kcG9pbnQgZGVzY3JpcHRvcnMgKGJpZ2dlciBwYWNrZXRzKQorICogYW5kIGEgImRldmljZSBxdWFsaWZpZXIiIC4uLiBwbHVzIG1vcmUgY29uc3RydWN0aW9uIG9wdGlvbnMKKyAqIGZvciB0aGUgY29uZmlnIGRlc2NyaXB0b3IuCisgKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgoraHNfc291cmNlX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKworCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2ICg1MTIpLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgoraHNfc2lua19kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNiAoNTEyKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yCitkZXZfcXVhbGlmaWVyID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZfcXVhbGlmaWVyLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFX1FVQUxJRklFUiwKKworCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjAwKSwKKwkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19WRU5ET1JfU1BFQywKKworCS5iTnVtQ29uZmlndXJhdGlvbnMgPQkyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmhzX3NvdXJjZV9zaW5rX2Z1bmN0aW9uIFtdID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvdGdfZGVzY3JpcHRvciwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmc291cmNlX3NpbmtfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfc291cmNlX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3NpbmtfZGVzYywKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmhzX2xvb3BiYWNrX2Z1bmN0aW9uIFtdID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopICZvdGdfZGVzY3JpcHRvciwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmbG9vcGJhY2tfaW50ZiwKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmaHNfc291cmNlX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJmhzX3NpbmtfZGVzYywKKwlOVUxMLAorfTsKKworLyogbWF4cGFja2V0IGFuZCBvdGhlciB0cmFuc2ZlciBjaGFyYWN0ZXJpc3RpY3MgdmFyeSBieSBzcGVlZC4gKi8KKyNkZWZpbmUgZXBfZGVzYyhnLGhzLGZzKSAoKChnKS0+c3BlZWQ9PVVTQl9TUEVFRF9ISUdIKT8oaHMpOihmcykpCisKKyNlbHNlCisKKy8qIGlmIHRoZXJlJ3Mgbm8gaGlnaCBzcGVlZCBzdXBwb3J0LCBtYXhwYWNrZXQgZG9lc24ndCBjaGFuZ2UuICovCisjZGVmaW5lIGVwX2Rlc2MoZyxocyxmcykgZnMKKworI2VuZGlmCS8qICFDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgKi8KKworc3RhdGljIGNoYXIJCQkJbWFudWZhY3R1cmVyIFs1MF07CitzdGF0aWMgY2hhcgkJCQlzZXJpYWwgWzQwXTsKKworLyogc3RhdGljIHN0cmluZ3MsIGluIFVURi04ICovCitzdGF0aWMgc3RydWN0IHVzYl9zdHJpbmcJCXN0cmluZ3MgW10gPSB7CisJeyBTVFJJTkdfTUFOVUZBQ1RVUkVSLCBtYW51ZmFjdHVyZXIsIH0sCisJeyBTVFJJTkdfUFJPRFVDVCwgbG9uZ25hbWUsIH0sCisJeyBTVFJJTkdfU0VSSUFMLCBzZXJpYWwsIH0sCisJeyBTVFJJTkdfTE9PUEJBQ0ssIGxvb3BiYWNrLCB9LAorCXsgU1RSSU5HX1NPVVJDRV9TSU5LLCBzb3VyY2Vfc2luaywgfSwKKwl7ICB9CQkJLyogZW5kIG9mIGxpc3QgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzCXN0cmluZ3RhYiA9IHsKKwkubGFuZ3VhZ2UJPSAweDA0MDksCS8qIGVuLXVzICovCisJLnN0cmluZ3MJPSBzdHJpbmdzLAorfTsKKworLyoKKyAqIGNvbmZpZyBkZXNjcmlwdG9ycyBhcmUgYWxzbyBoYW5kY3JhZnRlZC4gIHRoZXNlIG11c3QgYWdyZWUgd2l0aCBjb2RlCisgKiB0aGF0IHNldHMgY29uZmlndXJhdGlvbnMsIGFuZCB3aXRoIGNvZGUgbWFuYWdpbmcgaW50ZXJmYWNlcyBhbmQgdGhlaXIKKyAqIGFsdHNldHRpbmdzLiAgb3RoZXIgY29tcGxleGl0eSBtYXkgY29tZSBmcm9tOgorICoKKyAqICAtIGhpZ2ggc3BlZWQgc3VwcG9ydCwgaW5jbHVkaW5nICJvdGhlciBzcGVlZCBjb25maWciIHJ1bGVzCisgKiAgLSBtdWx0aXBsZSBjb25maWd1cmF0aW9ucworICogIC0gaW50ZXJmYWNlcyB3aXRoIGFsdGVybmF0ZSBzZXR0aW5ncworICogIC0gZW1iZWRkZWQgY2xhc3Mgb3IgdmVuZG9yLXNwZWNpZmljIGRlc2NyaXB0b3JzCisgKgorICogdGhpcyBoYW5kbGVzIGhpZ2ggc3BlZWQsIGFuZCBoYXMgYSBzZWNvbmQgY29uZmlnIHRoYXQgY291bGQgYXMgZWFzaWx5CisgKiBoYXZlIGJlZW4gYW4gYWx0ZXJuYXRlIGludGVyZmFjZSBzZXR0aW5nIChvbiBtb3N0IGhhcmR3YXJlKS4KKyAqCisgKiBOT1RFOiAgdG8gZGVtb25zdHJhdGUgKGFuZCB0ZXN0KSBtb3JlIFVTQiBjYXBhYmlsaXRpZXMsIHRoaXMgZHJpdmVyCisgKiBzaG91bGQgaW5jbHVkZSBhbiBhbHRzZXR0aW5nIHRvIHRlc3QgaW50ZXJydXB0IHRyYW5zZmVycywgaW5jbHVkaW5nCisgKiBoaWdoIGJhbmR3aWR0aCBtb2RlcyBhdCBoaWdoIHNwZWVkLiAgKE1heWJlIHdvcmsgbGlrZSBJbnRlbCdzIHRlc3QKKyAqIGRldmljZT8pCisgKi8KK3N0YXRpYyBpbnQKK2NvbmZpZ19idWYgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsCisJCXU4ICpidWYsIHU4IHR5cGUsIHVuc2lnbmVkIGluZGV4KQoreworCWludAkJCQlpc19zb3VyY2Vfc2luazsKKwlpbnQJCQkJbGVuOworCWNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKipmdW5jdGlvbjsKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwlpbnQJCQkJaHMgPSAoZ2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCk7CisjZW5kaWYKKworCS8qIHR3byBjb25maWd1cmF0aW9ucyB3aWxsIGFsd2F5cyBiZSBpbmRleCAwIGFuZCBpbmRleCAxICovCisJaWYgKGluZGV4ID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaXNfc291cmNlX3NpbmsgPSBsb29wZGVmYXVsdCA/IChpbmRleCA9PSAxKSA6IChpbmRleCA9PSAwKTsKKworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCWlmICh0eXBlID09IFVTQl9EVF9PVEhFUl9TUEVFRF9DT05GSUcpCisJCWhzID0gIWhzOworCWlmIChocykKKwkJZnVuY3Rpb24gPSBpc19zb3VyY2Vfc2luaworCQkJPyBoc19zb3VyY2Vfc2lua19mdW5jdGlvbgorCQkJOiBoc19sb29wYmFja19mdW5jdGlvbjsKKwllbHNlCisjZW5kaWYKKwkJZnVuY3Rpb24gPSBpc19zb3VyY2Vfc2luaworCQkJPyBmc19zb3VyY2Vfc2lua19mdW5jdGlvbgorCQkJOiBmc19sb29wYmFja19mdW5jdGlvbjsKKworCS8qIGZvciBub3csIGRvbid0IGFkdmVydGlzZSBzcnAtb25seSBkZXZpY2VzICovCisJaWYgKCFnYWRnZXQtPmlzX290ZykKKwkJZnVuY3Rpb24rKzsKKworCWxlbiA9IHVzYl9nYWRnZXRfY29uZmlnX2J1ZiAoaXNfc291cmNlX3NpbmsKKwkJCQkJPyAmc291cmNlX3NpbmtfY29uZmlnCisJCQkJCTogJmxvb3BiYWNrX2NvbmZpZywKKwkJCWJ1ZiwgVVNCX0JVRlNJWiwgZnVuY3Rpb24pOworCWlmIChsZW4gPCAwKQorCQlyZXR1cm4gbGVuOworCSgoc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvciAqKSBidWYpLT5iRGVzY3JpcHRvclR5cGUgPSB0eXBlOworCXJldHVybiBsZW47Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3JlcXVlc3QgKgorYWxsb2NfZXBfcmVxIChzdHJ1Y3QgdXNiX2VwICplcCwgdW5zaWduZWQgbGVuZ3RoKQoreworCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOworCisJcmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QgKGVwLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVxKSB7CisJCXJlcS0+bGVuZ3RoID0gbGVuZ3RoOworCQlyZXEtPmJ1ZiA9IHVzYl9lcF9hbGxvY19idWZmZXIgKGVwLCBsZW5ndGgsCisJCQkJJnJlcS0+ZG1hLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFyZXEtPmJ1ZikgeworCQkJdXNiX2VwX2ZyZWVfcmVxdWVzdCAoZXAsIHJlcSk7CisJCQlyZXEgPSBOVUxMOworCQl9CisJfQorCXJldHVybiByZXE7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfZXBfcmVxIChzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCit7CisJaWYgKHJlcS0+YnVmKQorCQl1c2JfZXBfZnJlZV9idWZmZXIgKGVwLCByZXEtPmJ1ZiwgcmVxLT5kbWEsIHJlcS0+bGVuZ3RoKTsKKwl1c2JfZXBfZnJlZV9yZXF1ZXN0IChlcCwgcmVxKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogb3B0aW9uYWxseSByZXF1aXJlIHNwZWNpZmljIHNvdXJjZS9zaW5rIGRhdGEgcGF0dGVybnMgICovCisKK3N0YXRpYyBpbnQKK2NoZWNrX3JlYWRfZGF0YSAoCisJc3RydWN0IHplcm9fZGV2CQkqZGV2LAorCXN0cnVjdCB1c2JfZXAJCSplcCwKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcQorKQoreworCXVuc2lnbmVkCWk7CisJdTgJCSpidWYgPSByZXEtPmJ1ZjsKKworCWZvciAoaSA9IDA7IGkgPCByZXEtPmFjdHVhbDsgaSsrLCBidWYrKykgeworCQlzd2l0Y2ggKHBhdHRlcm4pIHsKKwkJLyogYWxsLXplcm9lcyBoYXMgbm8gc3luY2hyb25pemF0aW9uIGlzc3VlcyAqLworCQljYXNlIDA6CisJCQlpZiAoKmJ1ZiA9PSAwKQorCQkJCWNvbnRpbnVlOworCQkJYnJlYWs7CisJCS8qIG1vZDYzIHN0YXlzIGluIHN5bmMgd2l0aCBzaG9ydC10ZXJtaW5hdGVkIHRyYW5zZmVycywKKwkJICogb3Igb3RoZXJ3aXNlIHdoZW4gaG9zdCBhbmQgZ2FkZ2V0IGFncmVlIG9uIGhvdyBsYXJnZQorCQkgKiBlYWNoIHVzYiB0cmFuc2ZlciByZXF1ZXN0IHNob3VsZCBiZS4gIHJlc3luYyBpcyBkb25lCisJCSAqIHdpdGggc2V0X2ludGVyZmFjZSBvciBzZXRfY29uZmlnLgorCQkgKi8KKwkJY2FzZSAxOgorCQkJaWYgKCpidWYgPT0gKHU4KShpICUgNjMpKQorCQkJCWNvbnRpbnVlOworCQkJYnJlYWs7CisJCX0KKwkJRVJST1IgKGRldiwgImJhZCBPVVQgYnl0ZSwgYnVmIFslZF0gPSAlZFxuIiwgaSwgKmJ1Zik7CisJCXVzYl9lcF9zZXRfaGFsdCAoZXApOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCityZWluaXRfd3JpdGVfZGF0YSAoCisJc3RydWN0IHplcm9fZGV2CQkqZGV2LAorCXN0cnVjdCB1c2JfZXAJCSplcCwKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcQorKQoreworCXVuc2lnbmVkCWk7CisJdTgJCSpidWYgPSByZXEtPmJ1ZjsKKworCXN3aXRjaCAocGF0dGVybikgeworCWNhc2UgMDoKKwkJbWVtc2V0IChyZXEtPmJ1ZiwgMCwgcmVxLT5sZW5ndGgpOworCQlicmVhazsKKwljYXNlIDE6CisJCWZvciAgKGkgPSAwOyBpIDwgcmVxLT5sZW5ndGg7IGkrKykKKwkJCSpidWYrKyA9ICh1OCkgKGkgJSA2Myk7CisJCWJyZWFrOworCX0KK30KKworLyogaWYgdGhlcmUgaXMgb25seSBvbmUgcmVxdWVzdCBpbiB0aGUgcXVldWUsIHRoZXJlJ2xsIGFsd2F5cyBiZSBhbgorICogaXJxIGRlbGF5IGJldHdlZW4gZW5kIG9mIG9uZSByZXF1ZXN0IGFuZCBzdGFydCBvZiB0aGUgbmV4dC4KKyAqIHRoYXQgcHJldmVudHMgdXNpbmcgaGFyZHdhcmUgZG1hIHF1ZXVlcy4KKyAqLworc3RhdGljIHZvaWQgc291cmNlX3NpbmtfY29tcGxldGUgKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgemVyb19kZXYJKmRldiA9IGVwLT5kcml2ZXJfZGF0YTsKKwlpbnQJCXN0YXR1cyA9IHJlcS0+c3RhdHVzOworCisJc3dpdGNoIChzdGF0dXMpIHsKKworCWNhc2UgMDogCQkJLyogbm9ybWFsIGNvbXBsZXRpb24/ICovCisJCWlmIChlcCA9PSBkZXYtPm91dF9lcCkKKwkJCWNoZWNrX3JlYWRfZGF0YSAoZGV2LCBlcCwgcmVxKTsKKwkJZWxzZQorCQkJcmVpbml0X3dyaXRlX2RhdGEgKGRldiwgZXAsIHJlcSk7CisJCWJyZWFrOworCisJLyogdGhpcyBlbmRwb2ludCBpcyBub3JtYWxseSBhY3RpdmUgd2hpbGUgd2UncmUgY29uZmlndXJlZCAqLworCWNhc2UgLUVDT05OQUJPUlRFRDogCQkvKiBoYXJkd2FyZSBmb3JjZWQgZXAgcmVzZXQgKi8KKwljYXNlIC1FQ09OTlJFU0VUOgkJLyogcmVxdWVzdCBkZXF1ZXVlZCAqLworCWNhc2UgLUVTSFVURE9XTjoJCS8qIGRpc2Nvbm5lY3QgZnJvbSBob3N0ICovCisJCVZEQkcgKGRldiwgIiVzIGdvbmUgKCVkKSwgJWQvJWRcbiIsIGVwLT5uYW1lLCBzdGF0dXMsCisJCQkJcmVxLT5hY3R1YWwsIHJlcS0+bGVuZ3RoKTsKKwkJaWYgKGVwID09IGRldi0+b3V0X2VwKQorCQkJY2hlY2tfcmVhZF9kYXRhIChkZXYsIGVwLCByZXEpOworCQlmcmVlX2VwX3JlcSAoZXAsIHJlcSk7CisJCXJldHVybjsKKworCWNhc2UgLUVPVkVSRkxPVzoJCS8qIGJ1ZmZlciBvdmVycnVuIG9uIHJlYWQgbWVhbnMgdGhhdAorCQkJCQkgKiB3ZSBkaWRuJ3QgcHJvdmlkZSBhIGJpZyBlbm91Z2gKKwkJCQkJICogYnVmZmVyLgorCQkJCQkgKi8KKwlkZWZhdWx0OgorI2lmIDEKKwkJREJHIChkZXYsICIlcyBjb21wbGV0ZSAtLT4gJWQsICVkLyVkXG4iLCBlcC0+bmFtZSwKKwkJCQlzdGF0dXMsIHJlcS0+YWN0dWFsLCByZXEtPmxlbmd0aCk7CisjZW5kaWYKKwljYXNlIC1FUkVNT1RFSU86CQkvKiBzaG9ydCByZWFkICovCisJCWJyZWFrOworCX0KKworCXN0YXR1cyA9IHVzYl9lcF9xdWV1ZSAoZXAsIHJlcSwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykgeworCQlFUlJPUiAoZGV2LCAia2lsbCAlczogIHJlc3VibWl0ICVkIGJ5dGVzIC0tPiAlZFxuIiwKKwkJCQllcC0+bmFtZSwgcmVxLT5sZW5ndGgsIHN0YXR1cyk7CisJCXVzYl9lcF9zZXRfaGFsdCAoZXApOworCQkvKiBGSVhNRSByZWNvdmVyIGxhdGVyIC4uLiBzb21laG93ICovCisJfQorfQorCitzdGF0aWMgc3RydWN0IHVzYl9yZXF1ZXN0ICoKK3NvdXJjZV9zaW5rX3N0YXJ0X2VwIChzdHJ1Y3QgdXNiX2VwICplcCwgaW50IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcTsKKwlpbnQJCQlzdGF0dXM7CisKKwlyZXEgPSBhbGxvY19lcF9yZXEgKGVwLCBidWZsZW4pOworCWlmICghcmVxKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldCAocmVxLT5idWYsIDAsIHJlcS0+bGVuZ3RoKTsKKwlyZXEtPmNvbXBsZXRlID0gc291cmNlX3NpbmtfY29tcGxldGU7CisKKwlpZiAoc3RyY21wIChlcC0+bmFtZSwgRVBfSU5fTkFNRSkgPT0gMCkKKwkJcmVpbml0X3dyaXRlX2RhdGEgKGVwLT5kcml2ZXJfZGF0YSwgZXAsIHJlcSk7CisKKwlzdGF0dXMgPSB1c2JfZXBfcXVldWUgKGVwLCByZXEsIGdmcF9mbGFncyk7CisJaWYgKHN0YXR1cykgeworCQlzdHJ1Y3QgemVyb19kZXYJKmRldiA9IGVwLT5kcml2ZXJfZGF0YTsKKworCQlFUlJPUiAoZGV2LCAic3RhcnQgJXMgLS0+ICVkXG4iLCBlcC0+bmFtZSwgc3RhdHVzKTsKKwkJZnJlZV9lcF9yZXEgKGVwLCByZXEpOworCQlyZXEgPSBOVUxMOworCX0KKworCXJldHVybiByZXE7Cit9CisKK3N0YXRpYyBpbnQKK3NldF9zb3VyY2Vfc2lua19jb25maWcgKHN0cnVjdCB6ZXJvX2RldiAqZGV2LCBpbnQgZ2ZwX2ZsYWdzKQoreworCWludAkJCXJlc3VsdCA9IDA7CisJc3RydWN0IHVzYl9lcAkJKmVwOworCXN0cnVjdCB1c2JfZ2FkZ2V0CSpnYWRnZXQgPSBkZXYtPmdhZGdldDsKKworCWdhZGdldF9mb3JfZWFjaF9lcCAoZXAsIGdhZGdldCkgeworCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IJKmQ7CisKKwkJLyogb25lIGVuZHBvaW50IHdyaXRlcyAoc291cmNlcykgemVyb2VzIGluICh0byB0aGUgaG9zdCkgKi8KKwkJaWYgKHN0cmNtcCAoZXAtPm5hbWUsIEVQX0lOX05BTUUpID09IDApIHsKKwkJCWQgPSBlcF9kZXNjIChnYWRnZXQsICZoc19zb3VyY2VfZGVzYywgJmZzX3NvdXJjZV9kZXNjKTsKKwkJCXJlc3VsdCA9IHVzYl9lcF9lbmFibGUgKGVwLCBkKTsKKwkJCWlmIChyZXN1bHQgPT0gMCkgeworCQkJCWVwLT5kcml2ZXJfZGF0YSA9IGRldjsKKwkJCQlpZiAoc291cmNlX3Npbmtfc3RhcnRfZXAgKGVwLCBnZnBfZmxhZ3MpICE9IDApIHsKKwkJCQkJZGV2LT5pbl9lcCA9IGVwOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJdXNiX2VwX2Rpc2FibGUgKGVwKTsKKwkJCQlyZXN1bHQgPSAtRUlPOworCQkJfQorCisJCS8qIG9uZSBlbmRwb2ludCByZWFkcyAoc2lua3MpIGFueXRoaW5nIG91dCAoZnJvbSB0aGUgaG9zdCkgKi8KKwkJfSBlbHNlIGlmIChzdHJjbXAgKGVwLT5uYW1lLCBFUF9PVVRfTkFNRSkgPT0gMCkgeworCQkJZCA9IGVwX2Rlc2MgKGdhZGdldCwgJmhzX3NpbmtfZGVzYywgJmZzX3NpbmtfZGVzYyk7CisJCQlyZXN1bHQgPSB1c2JfZXBfZW5hYmxlIChlcCwgZCk7CisJCQlpZiAocmVzdWx0ID09IDApIHsKKwkJCQllcC0+ZHJpdmVyX2RhdGEgPSBkZXY7CisJCQkJaWYgKHNvdXJjZV9zaW5rX3N0YXJ0X2VwIChlcCwgZ2ZwX2ZsYWdzKSAhPSAwKSB7CisJCQkJCWRldi0+b3V0X2VwID0gZXA7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQl1c2JfZXBfZGlzYWJsZSAoZXApOworCQkJCXJlc3VsdCA9IC1FSU87CisJCQl9CisKKwkJLyogaWdub3JlIGFueSBvdGhlciBlbmRwb2ludHMgKi8KKwkJfSBlbHNlCisJCQljb250aW51ZTsKKworCQkvKiBzdG9wIG9uIGVycm9yICovCisJCUVSUk9SIChkZXYsICJjYW4ndCBzdGFydCAlcywgcmVzdWx0ICVkXG4iLCBlcC0+bmFtZSwgcmVzdWx0KTsKKwkJYnJlYWs7CisJfQorCWlmIChyZXN1bHQgPT0gMCkKKwkJREJHIChkZXYsICJidWZsZW4gJWRcbiIsIGJ1Zmxlbik7CisKKwkvKiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFudXAgb24gZXJyb3IgKi8KKwlyZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBsb29wYmFja19jb21wbGV0ZSAoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCB6ZXJvX2RldgkqZGV2ID0gZXAtPmRyaXZlcl9kYXRhOworCWludAkJc3RhdHVzID0gcmVxLT5zdGF0dXM7CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCisJY2FzZSAwOiAJCQkvKiBub3JtYWwgY29tcGxldGlvbj8gKi8KKwkJaWYgKGVwID09IGRldi0+b3V0X2VwKSB7CisJCQkvKiBsb29wIHRoaXMgT1VUIHBhY2tldCBiYWNrIElOIHRvIHRoZSBob3N0ICovCisJCQlyZXEtPnplcm8gPSAocmVxLT5hY3R1YWwgPCByZXEtPmxlbmd0aCk7CisJCQlyZXEtPmxlbmd0aCA9IHJlcS0+YWN0dWFsOworCQkJc3RhdHVzID0gdXNiX2VwX3F1ZXVlIChkZXYtPmluX2VwLCByZXEsIEdGUF9BVE9NSUMpOworCQkJaWYgKHN0YXR1cyA9PSAwKQorCQkJCXJldHVybjsKKworCQkJLyogInNob3VsZCBuZXZlciBnZXQgaGVyZSIgKi8KKwkJCUVSUk9SIChkZXYsICJjYW4ndCBsb29wICVzIHRvICVzOiAlZFxuIiwKKwkJCQllcC0+bmFtZSwgZGV2LT5pbl9lcC0+bmFtZSwKKwkJCQlzdGF0dXMpOworCQl9CisKKwkJLyogcXVldWUgdGhlIGJ1ZmZlciBmb3Igc29tZSBsYXRlciBPVVQgcGFja2V0ICovCisJCXJlcS0+bGVuZ3RoID0gYnVmbGVuOworCQlzdGF0dXMgPSB1c2JfZXBfcXVldWUgKGRldi0+b3V0X2VwLCByZXEsIEdGUF9BVE9NSUMpOworCQlpZiAoc3RhdHVzID09IDApCisJCQlyZXR1cm47CisKKwkJLyogInNob3VsZCBuZXZlciBnZXQgaGVyZSIgKi8KKwkJLyogRkFMTFRIUk9VR0ggKi8KKworCWRlZmF1bHQ6CisJCUVSUk9SIChkZXYsICIlcyBsb29wIGNvbXBsZXRlIC0tPiAlZCwgJWQvJWRcbiIsIGVwLT5uYW1lLAorCQkJCXN0YXR1cywgcmVxLT5hY3R1YWwsIHJlcS0+bGVuZ3RoKTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKworCS8qIE5PVEU6ICBzaW5jZSB0aGlzIGRyaXZlciBkb2Vzbid0IG1haW50YWluIGFuIGV4cGxpY2l0IHJlY29yZAorCSAqIG9mIHJlcXVlc3RzIGl0IHN1Ym1pdHRlZCAoanVzdCBtYWludGFpbnMgcWxlbiBjb3VudCksIHdlCisJICogcmVseSBvbiB0aGUgaGFyZHdhcmUgZHJpdmVyIHRvIGNsZWFuIHVwIG9uIGRpc2Nvbm5lY3Qgb3IKKwkgKiBlbmRwb2ludCBkaXNhYmxlLgorCSAqLworCWNhc2UgLUVDT05OQUJPUlRFRDogCQkvKiBoYXJkd2FyZSBmb3JjZWQgZXAgcmVzZXQgKi8KKwljYXNlIC1FQ09OTlJFU0VUOgkJLyogcmVxdWVzdCBkZXF1ZXVlZCAqLworCWNhc2UgLUVTSFVURE9XTjoJCS8qIGRpc2Nvbm5lY3QgZnJvbSBob3N0ICovCisJCWZyZWVfZXBfcmVxIChlcCwgcmVxKTsKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGljIGludAorc2V0X2xvb3BiYWNrX2NvbmZpZyAoc3RydWN0IHplcm9fZGV2ICpkZXYsIGludCBnZnBfZmxhZ3MpCit7CisJaW50CQkJcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgdXNiX2VwCQkqZXA7CisJc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldCA9IGRldi0+Z2FkZ2V0OworCisJZ2FkZ2V0X2Zvcl9lYWNoX2VwIChlcCwgZ2FkZ2V0KSB7CisJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqZDsKKworCQkvKiBvbmUgZW5kcG9pbnQgd3JpdGVzIGRhdGEgYmFjayBJTiB0byB0aGUgaG9zdCAqLworCQlpZiAoc3RyY21wIChlcC0+bmFtZSwgRVBfSU5fTkFNRSkgPT0gMCkgeworCQkJZCA9IGVwX2Rlc2MgKGdhZGdldCwgJmhzX3NvdXJjZV9kZXNjLCAmZnNfc291cmNlX2Rlc2MpOworCQkJcmVzdWx0ID0gdXNiX2VwX2VuYWJsZSAoZXAsIGQpOworCQkJaWYgKHJlc3VsdCA9PSAwKSB7CisJCQkJZXAtPmRyaXZlcl9kYXRhID0gZGV2OworCQkJCWRldi0+aW5fZXAgPSBlcDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkvKiBvbmUgZW5kcG9pbnQganVzdCByZWFkcyBPVVQgcGFja2V0cyAqLworCQl9IGVsc2UgaWYgKHN0cmNtcCAoZXAtPm5hbWUsIEVQX09VVF9OQU1FKSA9PSAwKSB7CisJCQlkID0gZXBfZGVzYyAoZ2FkZ2V0LCAmaHNfc2lua19kZXNjLCAmZnNfc2lua19kZXNjKTsKKwkJCXJlc3VsdCA9IHVzYl9lcF9lbmFibGUgKGVwLCBkKTsKKwkJCWlmIChyZXN1bHQgPT0gMCkgeworCQkJCWVwLT5kcml2ZXJfZGF0YSA9IGRldjsKKwkJCQlkZXYtPm91dF9lcCA9IGVwOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCS8qIGlnbm9yZSBhbnkgb3RoZXIgZW5kcG9pbnRzICovCisJCX0gZWxzZQorCQkJY29udGludWU7CisKKwkJLyogc3RvcCBvbiBlcnJvciAqLworCQlFUlJPUiAoZGV2LCAiY2FuJ3QgZW5hYmxlICVzLCByZXN1bHQgJWRcbiIsIGVwLT5uYW1lLCByZXN1bHQpOworCQlicmVhazsKKwl9CisKKwkvKiBhbGxvY2F0ZSBhIGJ1bmNoIG9mIHJlYWQgYnVmZmVycyBhbmQgcXVldWUgdGhlbSBhbGwgYXQgb25jZS4KKwkgKiB3ZSBidWZmZXIgYXQgbW9zdCAncWxlbicgdHJhbnNmZXJzOyBmZXdlciBpZiBhbnkgbmVlZCBtb3JlCisJICogdGhhbiAnYnVmbGVuJyBieXRlcyBlYWNoLgorCSAqLworCWlmIChyZXN1bHQgPT0gMCkgeworCQlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcTsKKwkJdW5zaWduZWQJCWk7CisKKwkJZXAgPSBkZXYtPm91dF9lcDsKKwkJZm9yIChpID0gMDsgaSA8IHFsZW4gJiYgcmVzdWx0ID09IDA7IGkrKykgeworCQkJcmVxID0gYWxsb2NfZXBfcmVxIChlcCwgYnVmbGVuKTsKKwkJCWlmIChyZXEpIHsKKwkJCQlyZXEtPmNvbXBsZXRlID0gbG9vcGJhY2tfY29tcGxldGU7CisJCQkJcmVzdWx0ID0gdXNiX2VwX3F1ZXVlIChlcCwgcmVxLCBHRlBfQVRPTUlDKTsKKwkJCQlpZiAocmVzdWx0KQorCQkJCQlEQkcgKGRldiwgIiVzIHF1ZXVlIHJlcSAtLT4gJWRcbiIsCisJCQkJCQkJZXAtPm5hbWUsIHJlc3VsdCk7CisJCQl9IGVsc2UKKwkJCQlyZXN1bHQgPSAtRU5PTUVNOworCQl9CisJfQorCWlmIChyZXN1bHQgPT0gMCkKKwkJREJHIChkZXYsICJxbGVuICVkLCBidWZsZW4gJWRcbiIsIHFsZW4sIGJ1Zmxlbik7CisKKwkvKiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFudXAgb24gZXJyb3IgKi8KKwlyZXR1cm4gcmVzdWx0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCB6ZXJvX3Jlc2V0X2NvbmZpZyAoc3RydWN0IHplcm9fZGV2ICpkZXYpCit7CisJaWYgKGRldi0+Y29uZmlnID09IDApCisJCXJldHVybjsKKworCURCRyAoZGV2LCAicmVzZXQgY29uZmlnXG4iKTsKKworCS8qIGp1c3QgZGlzYWJsZSBlbmRwb2ludHMsIGZvcmNpbmcgY29tcGxldGlvbiBvZiBwZW5kaW5nIGkvby4KKwkgKiBhbGwgb3VyIGNvbXBsZXRpb24gaGFuZGxlcnMgZnJlZSB0aGVpciByZXF1ZXN0cyBpbiB0aGlzIGNhc2UuCisJICovCisJaWYgKGRldi0+aW5fZXApIHsKKwkJdXNiX2VwX2Rpc2FibGUgKGRldi0+aW5fZXApOworCQlkZXYtPmluX2VwID0gTlVMTDsKKwl9CisJaWYgKGRldi0+b3V0X2VwKSB7CisJCXVzYl9lcF9kaXNhYmxlIChkZXYtPm91dF9lcCk7CisJCWRldi0+b3V0X2VwID0gTlVMTDsKKwl9CisJZGV2LT5jb25maWcgPSAwOworCWRlbF90aW1lciAoJmRldi0+cmVzdW1lKTsKK30KKworLyogY2hhbmdlIG91ciBvcGVyYXRpb25hbCBjb25maWcuICB0aGlzIGNvZGUgbXVzdCBhZ3JlZSB3aXRoIHRoZSBjb2RlCisgKiB0aGF0IHJldHVybnMgY29uZmlnIGRlc2NyaXB0b3JzLCBhbmQgYWx0c2V0dGluZyBjb2RlLgorICoKKyAqIGl0J3MgYWxzbyByZXNwb25zaWJsZSBmb3IgcG93ZXIgbWFuYWdlbWVudCBpbnRlcmFjdGlvbnMuIHNvbWUKKyAqIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IG5vdCB3b3JrIHdpdGggb3VyIGN1cnJlbnQgcG93ZXIgc291cmNlcy4KKyAqCisgKiBub3RlIHRoYXQgc29tZSBkZXZpY2UgY29udHJvbGxlciBoYXJkd2FyZSB3aWxsIGNvbnN0cmFpbiB3aGF0IHRoaXMKKyAqIGNvZGUgY2FuIGRvLCBwZXJoYXBzIGJ5IGRpc2FsbG93aW5nIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBvcgorICogYnkgbGltaXRpbmcgY29uZmlndXJhdGlvbiBjaG9pY2VzIChsaWtlIHRoZSBweGEyeHgpLgorICovCitzdGF0aWMgaW50Cit6ZXJvX3NldF9jb25maWcgKHN0cnVjdCB6ZXJvX2RldiAqZGV2LCB1bnNpZ25lZCBudW1iZXIsIGludCBnZnBfZmxhZ3MpCit7CisJaW50CQkJcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0ID0gZGV2LT5nYWRnZXQ7CisKKwlpZiAobnVtYmVyID09IGRldi0+Y29uZmlnKQorCQlyZXR1cm4gMDsKKworCWlmIChnYWRnZXRfaXNfc2ExMTAwIChnYWRnZXQpICYmIGRldi0+Y29uZmlnKSB7CisJCS8qIHR4IGZpZm8gaXMgZnVsbCwgYnV0IHdlIGNhbid0IGNsZWFyIGl0Li4uKi8KKwkJSU5GTyAoZGV2LCAiY2FuJ3QgY2hhbmdlIGNvbmZpZ3VyYXRpb25zXG4iKTsKKwkJcmV0dXJuIC1FU1BJUEU7CisJfQorCXplcm9fcmVzZXRfY29uZmlnIChkZXYpOworCisJc3dpdGNoIChudW1iZXIpIHsKKwljYXNlIENPTkZJR19TT1VSQ0VfU0lOSzoKKwkJcmVzdWx0ID0gc2V0X3NvdXJjZV9zaW5rX2NvbmZpZyAoZGV2LCBnZnBfZmxhZ3MpOworCQlicmVhazsKKwljYXNlIENPTkZJR19MT09QQkFDSzoKKwkJcmVzdWx0ID0gc2V0X2xvb3BiYWNrX2NvbmZpZyAoZGV2LCBnZnBfZmxhZ3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXN1bHQgPSAtRUlOVkFMOworCQkvKiBGQUxMIFRIUk9VR0ggKi8KKwljYXNlIDA6CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJaWYgKCFyZXN1bHQgJiYgKCFkZXYtPmluX2VwIHx8ICFkZXYtPm91dF9lcCkpCisJCXJlc3VsdCA9IC1FTk9ERVY7CisJaWYgKHJlc3VsdCkKKwkJemVyb19yZXNldF9jb25maWcgKGRldik7CisJZWxzZSB7CisJCWNoYXIgKnNwZWVkOworCisJCXN3aXRjaCAoZ2FkZ2V0LT5zcGVlZCkgeworCQljYXNlIFVTQl9TUEVFRF9MT1c6CXNwZWVkID0gImxvdyI7IGJyZWFrOworCQljYXNlIFVTQl9TUEVFRF9GVUxMOglzcGVlZCA9ICJmdWxsIjsgYnJlYWs7CisJCWNhc2UgVVNCX1NQRUVEX0hJR0g6CXNwZWVkID0gImhpZ2giOyBicmVhazsKKwkJZGVmYXVsdDogCQlzcGVlZCA9ICI/IjsgYnJlYWs7CisJCX0KKworCQlkZXYtPmNvbmZpZyA9IG51bWJlcjsKKwkJSU5GTyAoZGV2LCAiJXMgc3BlZWQgY29uZmlnICMlZDogJXNcbiIsIHNwZWVkLCBudW1iZXIsCisJCQkJKG51bWJlciA9PSBDT05GSUdfU09VUkNFX1NJTkspCisJCQkJCT8gc291cmNlX3NpbmsgOiBsb29wYmFjayk7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHplcm9fc2V0dXBfY29tcGxldGUgKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlpZiAocmVxLT5zdGF0dXMgfHwgcmVxLT5hY3R1YWwgIT0gcmVxLT5sZW5ndGgpCisJCURCRyAoKHN0cnVjdCB6ZXJvX2RldiAqKSBlcC0+ZHJpdmVyX2RhdGEsCisJCQkJInNldHVwIGNvbXBsZXRlIC0tPiAlZCwgJWQvJWRcbiIsCisJCQkJcmVxLT5zdGF0dXMsIHJlcS0+YWN0dWFsLCByZXEtPmxlbmd0aCk7Cit9CisKKy8qCisgKiBUaGUgc2V0dXAoKSBjYWxsYmFjayBpbXBsZW1lbnRzIGFsbCB0aGUgZXAwIGZ1bmN0aW9uYWxpdHkgdGhhdCdzCisgKiBub3QgaGFuZGxlZCBsb3dlciBkb3duLCBpbiBoYXJkd2FyZSBvciB0aGUgaGFyZHdhcmUgZHJpdmVyIChsaWtlCisgKiBkZXZpY2UgYW5kIGVuZHBvaW50IGZlYXR1cmUgZmxhZ3MsIGFuZCB0aGVpciBzdGF0dXMpLiAgSXQncyBhbGwKKyAqIGhvdXNla2VlcGluZyBmb3IgdGhlIGdhZGdldCBmdW5jdGlvbiB3ZSdyZSBpbXBsZW1lbnRpbmcuICBNb3N0IG9mCisgKiB0aGUgd29yayBpcyBpbiBjb25maWctc3BlY2lmaWMgc2V0dXAuCisgKi8KK3N0YXRpYyBpbnQKK3plcm9fc2V0dXAgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsIGNvbnN0IHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCit7CisJc3RydWN0IHplcm9fZGV2CQkqZGV2ID0gZ2V0X2dhZGdldF9kYXRhIChnYWRnZXQpOworCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxID0gZGV2LT5yZXE7CisJaW50CQkJdmFsdWUgPSAtRU9QTk9UU1VQUDsKKwl1MTYJCQl3X2luZGV4ID0gY3RybC0+d0luZGV4OworCXUxNgkJCXdfdmFsdWUgPSBjdHJsLT53VmFsdWU7CisJdTE2CQkJd19sZW5ndGggPSBjdHJsLT53TGVuZ3RoOworCisJLyogdXN1YWxseSB0aGlzIHN0b3JlcyByZXBseSBkYXRhIGluIHRoZSBwcmUtYWxsb2NhdGVkIGVwMCBidWZmZXIsCisJICogYnV0IGNvbmZpZyBjaGFuZ2UgZXZlbnRzIHdpbGwgcmVjb25maWd1cmUgaGFyZHdhcmUuCisJICovCisJcmVxLT56ZXJvID0gMDsKKwlzd2l0Y2ggKGN0cmwtPmJSZXF1ZXN0KSB7CisKKwljYXNlIFVTQl9SRVFfR0VUX0RFU0NSSVBUT1I6CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gVVNCX0RJUl9JTikKKwkJCWdvdG8gdW5rbm93bjsKKwkJc3dpdGNoICh3X3ZhbHVlID4+IDgpIHsKKworCQljYXNlIFVTQl9EVF9ERVZJQ0U6CisJCQl2YWx1ZSA9IG1pbiAod19sZW5ndGgsICh1MTYpIHNpemVvZiBkZXZpY2VfZGVzYyk7CisJCQltZW1jcHkgKHJlcS0+YnVmLCAmZGV2aWNlX2Rlc2MsIHZhbHVlKTsKKwkJCWJyZWFrOworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRAorCQljYXNlIFVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSOgorCQkJaWYgKCFnYWRnZXQtPmlzX2R1YWxzcGVlZCkKKwkJCQlicmVhazsKKwkJCXZhbHVlID0gbWluICh3X2xlbmd0aCwgKHUxNikgc2l6ZW9mIGRldl9xdWFsaWZpZXIpOworCQkJbWVtY3B5IChyZXEtPmJ1ZiwgJmRldl9xdWFsaWZpZXIsIHZhbHVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRzoKKwkJCWlmICghZ2FkZ2V0LT5pc19kdWFsc3BlZWQpCisJCQkJYnJlYWs7CisJCQkvLyBGQUxMVEhST1VHSAorI2VuZGlmIC8qIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCAqLworCQljYXNlIFVTQl9EVF9DT05GSUc6CisJCQl2YWx1ZSA9IGNvbmZpZ19idWYgKGdhZGdldCwgcmVxLT5idWYsCisJCQkJCXdfdmFsdWUgPj4gOCwKKwkJCQkJd192YWx1ZSAmIDB4ZmYpOworCQkJaWYgKHZhbHVlID49IDApCisJCQkJdmFsdWUgPSBtaW4gKHdfbGVuZ3RoLCAodTE2KSB2YWx1ZSk7CisJCQlicmVhazsKKworCQljYXNlIFVTQl9EVF9TVFJJTkc6CisJCQkvKiB3SW5kZXggPT0gbGFuZ3VhZ2UgY29kZS4KKwkJCSAqIHRoaXMgZHJpdmVyIG9ubHkgaGFuZGxlcyBvbmUgbGFuZ3VhZ2UsIHlvdSBjYW4KKwkJCSAqIGFkZCBzdHJpbmcgdGFibGVzIGZvciBvdGhlciBsYW5ndWFnZXMsIHVzaW5nCisJCQkgKiBhbnkgVVRGLTggY2hhcmFjdGVycworCQkJICovCisJCQl2YWx1ZSA9IHVzYl9nYWRnZXRfZ2V0X3N0cmluZyAoJnN0cmluZ3RhYiwKKwkJCQkJd192YWx1ZSAmIDB4ZmYsIHJlcS0+YnVmKTsKKwkJCWlmICh2YWx1ZSA+PSAwKQorCQkJCXZhbHVlID0gbWluICh3X2xlbmd0aCwgKHUxNikgdmFsdWUpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwkvKiBjdXJyZW50bHkgdHdvIGNvbmZpZ3MsIHR3byBzcGVlZHMgKi8KKwljYXNlIFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT046CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gMCkKKwkJCWdvdG8gdW5rbm93bjsKKwkJaWYgKGdhZGdldC0+YV9obnBfc3VwcG9ydCkKKwkJCURCRyAoZGV2LCAiSE5QIGF2YWlsYWJsZVxuIik7CisJCWVsc2UgaWYgKGdhZGdldC0+YV9hbHRfaG5wX3N1cHBvcnQpCisJCQlEQkcgKGRldiwgIkhOUCBuZWVkcyBhIGRpZmZlcmVudCByb290IHBvcnRcbiIpOworCQllbHNlCisJCQlWREJHIChkZXYsICJITlAgaW5hY3RpdmVcbiIpOworCQlzcGluX2xvY2sgKCZkZXYtPmxvY2spOworCQl2YWx1ZSA9IHplcm9fc2V0X2NvbmZpZyAoZGV2LCB3X3ZhbHVlLCBHRlBfQVRPTUlDKTsKKwkJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworCQlicmVhazsKKwljYXNlIFVTQl9SRVFfR0VUX0NPTkZJR1VSQVRJT046CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gVVNCX0RJUl9JTikKKwkJCWdvdG8gdW5rbm93bjsKKwkJKih1OCAqKXJlcS0+YnVmID0gZGV2LT5jb25maWc7CisJCXZhbHVlID0gbWluICh3X2xlbmd0aCwgKHUxNikgMSk7CisJCWJyZWFrOworCisJLyogdW50aWwgd2UgYWRkIGFsdHNldHRpbmcgc3VwcG9ydCwgb3Igb3RoZXIgaW50ZXJmYWNlcywKKwkgKiBvbmx5IDAvMCBhcmUgcG9zc2libGUuICBweGEyeHggb25seSBzdXBwb3J0cyAwLzAgKHBvb3JseSkKKwkgKiBhbmQgYWxyZWFkeSBraWxsZWQgcGVuZGluZyBlbmRwb2ludCBJL08uCisJICovCisJY2FzZSBVU0JfUkVRX1NFVF9JTlRFUkZBQ0U6CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gVVNCX1JFQ0lQX0lOVEVSRkFDRSkKKwkJCWdvdG8gdW5rbm93bjsKKwkJc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKKwkJaWYgKGRldi0+Y29uZmlnICYmIHdfaW5kZXggPT0gMCAmJiB3X3ZhbHVlID09IDApIHsKKwkJCXU4CQljb25maWcgPSBkZXYtPmNvbmZpZzsKKworCQkJLyogcmVzZXRzIGludGVyZmFjZSBjb25maWd1cmF0aW9uLCBmb3JnZXRzIGFib3V0CisJCQkgKiBwcmV2aW91cyB0cmFuc2FjdGlvbiBzdGF0ZSAocXVldWVkIGJ1ZnMsIGV0YykKKwkJCSAqIGFuZCByZS1pbml0cyBlbmRwb2ludCBzdGF0ZSAodG9nZ2xlIGV0YykKKwkJCSAqIG5vIHJlc3BvbnNlIHF1ZXVlZCwganVzdCB6ZXJvIHN0YXR1cyA9PSBzdWNjZXNzLgorCQkJICogaWYgd2UgaGFkIG1vcmUgdGhhbiBvbmUgaW50ZXJmYWNlIHdlIGNvdWxkbid0CisJCQkgKiB1c2UgdGhpcyAicmVzZXQgdGhlIGNvbmZpZyIgc2hvcnRjdXQuCisJCQkgKi8KKwkJCXplcm9fcmVzZXRfY29uZmlnIChkZXYpOworCQkJemVyb19zZXRfY29uZmlnIChkZXYsIGNvbmZpZywgR0ZQX0FUT01JQyk7CisJCQl2YWx1ZSA9IDA7CisJCX0KKwkJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworCQlicmVhazsKKwljYXNlIFVTQl9SRVFfR0VUX0lOVEVSRkFDRToKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAoVVNCX0RJUl9JTnxVU0JfUkVDSVBfSU5URVJGQUNFKSkKKwkJCWdvdG8gdW5rbm93bjsKKwkJaWYgKCFkZXYtPmNvbmZpZykKKwkJCWJyZWFrOworCQlpZiAod19pbmRleCAhPSAwKSB7CisJCQl2YWx1ZSA9IC1FRE9NOworCQkJYnJlYWs7CisJCX0KKwkJKih1OCAqKXJlcS0+YnVmID0gMDsKKwkJdmFsdWUgPSBtaW4gKHdfbGVuZ3RoLCAodTE2KSAxKTsKKwkJYnJlYWs7CisKKwkvKgorCSAqIFRoZXNlIGFyZSB0aGUgc2FtZSB2ZW5kb3Itc3BlY2lmaWMgcmVxdWVzdHMgc3VwcG9ydGVkIGJ5CisJICogSW50ZWwncyBVU0IgMi4wIGNvbXBsaWFuY2UgdGVzdCBkZXZpY2VzLiAgV2UgZXhjZWVkIHRoYXQKKwkgKiBkZXZpY2Ugc3BlYyBieSBhbGxvd2luZyBtdWx0aXBsZS1wYWNrZXQgcmVxdWVzdHMuCisJICovCisJY2FzZSAweDViOgkvKiBjb250cm9sIFdSSVRFIHRlc3QgLS0gZmlsbCB0aGUgYnVmZmVyICovCisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9ESVJfT1VUfFVTQl9UWVBFX1ZFTkRPUikpCisJCQlnb3RvIHVua25vd247CisJCWlmICh3X3ZhbHVlIHx8IHdfaW5kZXgpCisJCQlicmVhazsKKwkJLyoganVzdCByZWFkIHRoYXQgbWFueSBieXRlcyBpbnRvIHRoZSBidWZmZXIgKi8KKwkJaWYgKHdfbGVuZ3RoID4gVVNCX0JVRlNJWikKKwkJCWJyZWFrOworCQl2YWx1ZSA9IHdfbGVuZ3RoOworCQlicmVhazsKKwljYXNlIDB4NWM6CS8qIGNvbnRyb2wgUkVBRCB0ZXN0IC0tIHJldHVybiB0aGUgYnVmZmVyICovCisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gKFVTQl9ESVJfSU58VVNCX1RZUEVfVkVORE9SKSkKKwkJCWdvdG8gdW5rbm93bjsKKwkJaWYgKHdfdmFsdWUgfHwgd19pbmRleCkKKwkJCWJyZWFrOworCQkvKiBleHBlY3QgdGhvc2UgYnl0ZXMgYXJlIHN0aWxsIGluIHRoZSBidWZmZXI7IHNlbmQgYmFjayAqLworCQlpZiAod19sZW5ndGggPiBVU0JfQlVGU0laCisJCQkJfHwgd19sZW5ndGggIT0gcmVxLT5sZW5ndGgpCisJCQlicmVhazsKKwkJdmFsdWUgPSB3X2xlbmd0aDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgordW5rbm93bjoKKwkJVkRCRyAoZGV2LAorCQkJInVua25vd24gY29udHJvbCByZXElMDJ4LiUwMnggdiUwNHggaSUwNHggbCVkXG4iLAorCQkJY3RybC0+YlJlcXVlc3RUeXBlLCBjdHJsLT5iUmVxdWVzdCwKKwkJCXdfdmFsdWUsIHdfaW5kZXgsIHdfbGVuZ3RoKTsKKwl9CisKKwkvKiByZXNwb25kIHdpdGggZGF0YSB0cmFuc2ZlciBiZWZvcmUgc3RhdHVzIHBoYXNlPyAqLworCWlmICh2YWx1ZSA+PSAwKSB7CisJCXJlcS0+bGVuZ3RoID0gdmFsdWU7CisJCXJlcS0+emVybyA9IHZhbHVlIDwgd19sZW5ndGg7CisJCXZhbHVlID0gdXNiX2VwX3F1ZXVlIChnYWRnZXQtPmVwMCwgcmVxLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHZhbHVlIDwgMCkgeworCQkJREJHIChkZXYsICJlcF9xdWV1ZSAtLT4gJWRcbiIsIHZhbHVlKTsKKwkJCXJlcS0+c3RhdHVzID0gMDsKKwkJCXplcm9fc2V0dXBfY29tcGxldGUgKGdhZGdldC0+ZXAwLCByZXEpOworCQl9CisJfQorCisJLyogZGV2aWNlIGVpdGhlciBzdGFsbHMgKHZhbHVlIDwgMCkgb3IgcmVwb3J0cyBzdWNjZXNzICovCisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgdm9pZAoremVyb19kaXNjb25uZWN0IChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCB6ZXJvX2RldgkJKmRldiA9IGdldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0KTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZGV2LT5sb2NrLCBmbGFncyk7CisJemVyb19yZXNldF9jb25maWcgKGRldik7CisKKwkvKiBhIG1vcmUgc2lnbmlmaWNhbnQgYXBwbGljYXRpb24gbWlnaHQgaGF2ZSBzb21lIG5vbi11c2IKKwkgKiBhY3Rpdml0aWVzIHRvIHF1aWVzY2UgaGVyZSwgc2F2aW5nIHJlc291cmNlcyBsaWtlIHBvd2VyCisJICogb3IgcHVzaGluZyB0aGUgbm90aWZpY2F0aW9uIHVwIGEgbmV0d29yayBzdGFjay4KKwkgKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwkvKiBuZXh0IHdlIG1heSBnZXQgc2V0dXAoKSBjYWxscyB0byBlbnVtZXJhdGUgbmV3IGNvbm5lY3Rpb25zOworCSAqIG9yIGFuIHVuYmluZCgpIGR1cmluZyBzaHV0ZG93biAoaW5jbHVkaW5nIHJlbW92aW5nIG1vZHVsZSkuCisJICovCit9CisKK3N0YXRpYyB2b2lkCit6ZXJvX2F1dG9yZXN1bWUgKHVuc2lnbmVkIGxvbmcgX2RldikKK3sKKwlzdHJ1Y3QgemVyb19kZXYJKmRldiA9IChzdHJ1Y3QgemVyb19kZXYgKikgX2RldjsKKwlpbnQJCXN0YXR1czsKKworCS8qIG5vcm1hbGx5IHRoZSBob3N0IHdvdWxkIGJlIHdva2VuIHVwIGZvciBzb21ldGhpbmcKKwkgKiBtb3JlIHNpZ25pZmljYW50IHRoYW4ganVzdCBhIHRpbWVyIGZpcmluZy4uLgorCSAqLworCWlmIChkZXYtPmdhZGdldC0+c3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04pIHsKKwkJc3RhdHVzID0gdXNiX2dhZGdldF93YWtldXAgKGRldi0+Z2FkZ2V0KTsKKwkJREJHIChkZXYsICJ3YWtldXAgLS0+ICVkXG4iLCBzdGF0dXMpOworCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK3plcm9fdW5iaW5kIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCB6ZXJvX2RldgkJKmRldiA9IGdldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0KTsKKworCURCRyAoZGV2LCAidW5iaW5kXG4iKTsKKworCS8qIHdlJ3ZlIGFscmVhZHkgYmVlbiBkaXNjb25uZWN0ZWQgLi4uIG5vIGkvbyBpcyBhY3RpdmUgKi8KKwlpZiAoZGV2LT5yZXEpCisJCWZyZWVfZXBfcmVxIChnYWRnZXQtPmVwMCwgZGV2LT5yZXEpOworCWRlbF90aW1lcl9zeW5jICgmZGV2LT5yZXN1bWUpOworCWtmcmVlIChkZXYpOworCXNldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0LCBOVUxMKTsKK30KKworc3RhdGljIGludAoremVyb19iaW5kIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCB6ZXJvX2RldgkJKmRldjsKKwlzdHJ1Y3QgdXNiX2VwCQkqZXA7CisKKwkvKiBCdWxrLW9ubHkgZHJpdmVycyBsaWtlIHRoaXMgb25lIFNIT1VMRCBiZSBhYmxlIHRvCisJICogYXV0b2NvbmZpZ3VyZSBvbiBhbnkgc2FuZSB1c2IgY29udHJvbGxlciBkcml2ZXIsCisJICogYnV0IHRoZXJlIG1heSBhbHNvIGJlIGltcG9ydGFudCBxdWlya3MgdG8gYWRkcmVzcy4KKwkgKi8KKwl1c2JfZXBfYXV0b2NvbmZpZ19yZXNldCAoZ2FkZ2V0KTsKKwllcCA9IHVzYl9lcF9hdXRvY29uZmlnIChnYWRnZXQsICZmc19zb3VyY2VfZGVzYyk7CisJaWYgKCFlcCkgeworYXV0b2NvbmZfZmFpbDoKKwkJcHJpbnRrIChLRVJOX0VSUiAiJXM6IGNhbid0IGF1dG9jb25maWd1cmUgb24gJXNcbiIsCisJCQlzaG9ydG5hbWUsIGdhZGdldC0+bmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlFUF9JTl9OQU1FID0gZXAtPm5hbWU7CisJZXAtPmRyaXZlcl9kYXRhID0gZXA7CS8qIGNsYWltICovCisJCisJZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyAoZ2FkZ2V0LCAmZnNfc2lua19kZXNjKTsKKwlpZiAoIWVwKQorCQlnb3RvIGF1dG9jb25mX2ZhaWw7CisJRVBfT1VUX05BTUUgPSBlcC0+bmFtZTsKKwllcC0+ZHJpdmVyX2RhdGEgPSBlcDsJLyogY2xhaW0gKi8KKworCisJLyoKKwkgKiBEUklWRVIgUE9MSUNZIENIT0lDRTogIHlvdSBtYXkgd2FudCB0byBkbyB0aGlzIGRpZmZlcmVudGx5LgorCSAqIE9uZSB0aGluZyB0byBhdm9pZCBpcyByZXVzaW5nIGEgYmNkRGV2aWNlIHJldmlzaW9uIGNvZGUKKwkgKiB3aXRoIGRpZmZlcmVudCBob3N0LXZpc2libGUgY29uZmlndXJhdGlvbnMgb3IgYmVoYXZpb3IKKwkgKiByZXN0cmljdGlvbnMgLS0gdXNpbmcgZXAxaW4vZXAyb3V0IHZzIGVwMW91dC9lcDNpbiwgZXRjCisJICovCisJaWYgKGdhZGdldF9pc19uZXQyMjgwIChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMSk7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfcHhhIChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMyk7CisjaWYgMAorCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3NoKGdhZGdldCkpIHsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjA0KTsKKwkJLyogU0ggaGFzIG9ubHkgb25lIGNvbmZpZ3VyYXRpb247IHNlZSAibG9vcGRlZmF1bHQiICovCisJCWRldmljZV9kZXNjLmJOdW1Db25maWd1cmF0aW9ucyA9IDE7CisJCS8qIEZJWE1FIG1ha2UgMSA9PSBkZWZhdWx0LmJDb25maWd1cmF0aW9uVmFsdWUgKi8KKyNlbmRpZgorCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3NhMTEwMCAoZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDUpOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX2dva3UgKGdhZGdldCkpIHsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjA2KTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19tcTExeHggKGdhZGdldCkpIHsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjA3KTsKKwl9IGVsc2UgaWYgKGdhZGdldF9pc19vbWFwIChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwOCk7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfbGg3YTQweChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwOSk7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfbjk2MDQoZ2FkZ2V0KSkgeworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMTApOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX3B4YTI3eChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIxMSk7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfczNjMjQxMChnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIxMik7CisJfSBlbHNlIGlmIChnYWRnZXRfaXNfYXQ5MShnYWRnZXQpKSB7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIxMyk7CisJfSBlbHNlIHsKKwkJLyogZ2FkZ2V0IHplcm8gaXMgc28gc2ltcGxlIChmb3Igbm93LCBubyBhbHRzZXR0aW5ncykgdGhhdAorCQkgKiBpdCBTSE9VTEQgTk9UIGhhdmUgcHJvYmxlbXMgd2l0aCBidWxrLWNhcGFibGUgaGFyZHdhcmUuCisJCSAqIHNvIHdhcm4gYWJvdXQgdW5yY29nbml6ZWQgY29udHJvbGxlcnMsIGRvbid0IHBhbmljLgorCQkgKgorCQkgKiB0aGluZ3MgbGlrZSBjb25maWd1cmF0aW9uIGFuZCBhbHRzZXR0aW5nIG51bWJlcmluZworCQkgKiBjYW4gbmVlZCBoYXJkd2FyZS1zcGVjaWZpYyBhdHRlbnRpb24gdGhvdWdoLgorCQkgKi8KKwkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIiVzOiBjb250cm9sbGVyICclcycgbm90IHJlY29nbml6ZWRcbiIsCisJCQlzaG9ydG5hbWUsIGdhZGdldC0+bmFtZSk7CisJCWRldmljZV9kZXNjLmJjZERldmljZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4OTk5OSk7CisJfQorCisKKwkvKiBvaywgd2UgbWFkZSBzZW5zZSBvZiB0aGUgaGFyZHdhcmUgLi4uICovCisJZGV2ID0ga21hbGxvYyAoc2l6ZW9mICpkZXYsIFNMQUJfS0VSTkVMKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0IChkZXYsIDAsIHNpemVvZiAqZGV2KTsKKwlzcGluX2xvY2tfaW5pdCAoJmRldi0+bG9jayk7CisJZGV2LT5nYWRnZXQgPSBnYWRnZXQ7CisJc2V0X2dhZGdldF9kYXRhIChnYWRnZXQsIGRldik7CisKKwkvKiBwcmVhbGxvY2F0ZSBjb250cm9sIHJlc3BvbnNlIGFuZCBidWZmZXIgKi8KKwlkZXYtPnJlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0IChnYWRnZXQtPmVwMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPnJlcSkKKwkJZ290byBlbm9tZW07CisJZGV2LT5yZXEtPmJ1ZiA9IHVzYl9lcF9hbGxvY19idWZmZXIgKGdhZGdldC0+ZXAwLCBVU0JfQlVGU0laLAorCQkJCSZkZXYtPnJlcS0+ZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+cmVxLT5idWYpCisJCWdvdG8gZW5vbWVtOworCisJZGV2LT5yZXEtPmNvbXBsZXRlID0gemVyb19zZXR1cF9jb21wbGV0ZTsKKworCWRldmljZV9kZXNjLmJNYXhQYWNrZXRTaXplMCA9IGdhZGdldC0+ZXAwLT5tYXhwYWNrZXQ7CisKKyNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQKKwkvKiBhc3N1bWUgZXAwIHVzZXMgdGhlIHNhbWUgdmFsdWUgZm9yIGJvdGggc3BlZWRzIC4uLiAqLworCWRldl9xdWFsaWZpZXIuYk1heFBhY2tldFNpemUwID0gZGV2aWNlX2Rlc2MuYk1heFBhY2tldFNpemUwOworCisJLyogYW5kIHRoYXQgYWxsIGVuZHBvaW50cyBhcmUgZHVhbC1zcGVlZCAqLworCWhzX3NvdXJjZV9kZXNjLmJFbmRwb2ludEFkZHJlc3MgPSBmc19zb3VyY2VfZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCWhzX3NpbmtfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0gZnNfc2lua19kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisjZW5kaWYKKworCWlmIChnYWRnZXQtPmlzX290ZykgeworCQlvdGdfZGVzY3JpcHRvci5ibUF0dHJpYnV0ZXMgfD0gVVNCX09UR19ITlAsCisJCXNvdXJjZV9zaW5rX2NvbmZpZy5ibUF0dHJpYnV0ZXMgfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOworCQlsb29wYmFja19jb25maWcuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKKwl9CisKKwlpZiAoZ2FkZ2V0LT5pc19vdGcpIHsKKwkJb3RnX2Rlc2NyaXB0b3IuYm1BdHRyaWJ1dGVzIHw9IFVTQl9PVEdfSE5QLAorCQlzb3VyY2Vfc2lua19jb25maWcuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKKwkJbG9vcGJhY2tfY29uZmlnLmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7CisJfQorCisJdXNiX2dhZGdldF9zZXRfc2VsZnBvd2VyZWQgKGdhZGdldCk7CisKKwlpbml0X3RpbWVyICgmZGV2LT5yZXN1bWUpOworCWRldi0+cmVzdW1lLmZ1bmN0aW9uID0gemVyb19hdXRvcmVzdW1lOworCWRldi0+cmVzdW1lLmRhdGEgPSAodW5zaWduZWQgbG9uZykgZGV2OworCWlmIChhdXRvcmVzdW1lKSB7CisJCXNvdXJjZV9zaW5rX2NvbmZpZy5ibUF0dHJpYnV0ZXMgfD0gVVNCX0NPTkZJR19BVFRfV0FLRVVQOworCQlsb29wYmFja19jb25maWcuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKKwl9CisKKwlnYWRnZXQtPmVwMC0+ZHJpdmVyX2RhdGEgPSBkZXY7CisKKwlJTkZPIChkZXYsICIlcywgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiXG4iLCBsb25nbmFtZSk7CisJSU5GTyAoZGV2LCAidXNpbmcgJXMsIE9VVCAlcyBJTiAlc1xuIiwgZ2FkZ2V0LT5uYW1lLAorCQlFUF9PVVRfTkFNRSwgRVBfSU5fTkFNRSk7CisKKwlzbnByaW50ZiAobWFudWZhY3R1cmVyLCBzaXplb2YgbWFudWZhY3R1cmVyLCAiJXMgJXMgd2l0aCAlcyIsCisJCXN5c3RlbV91dHNuYW1lLnN5c25hbWUsIHN5c3RlbV91dHNuYW1lLnJlbGVhc2UsCisJCWdhZGdldC0+bmFtZSk7CisKKwlyZXR1cm4gMDsKKworZW5vbWVtOgorCXplcm9fdW5iaW5kIChnYWRnZXQpOworCXJldHVybiAtRU5PTUVNOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZAoremVyb19zdXNwZW5kIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCB6ZXJvX2RldgkJKmRldiA9IGdldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0KTsKKworCWlmIChnYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKQorCQlyZXR1cm47CisKKwlpZiAoYXV0b3Jlc3VtZSkgeworCQltb2RfdGltZXIgKCZkZXYtPnJlc3VtZSwgamlmZmllcyArIChIWiAqIGF1dG9yZXN1bWUpKTsKKwkJREJHIChkZXYsICJzdXNwZW5kLCB3YWtldXAgaW4gJWQgc2Vjb25kc1xuIiwgYXV0b3Jlc3VtZSk7CisJfSBlbHNlCisJCURCRyAoZGV2LCAic3VzcGVuZFxuIik7Cit9CisKK3N0YXRpYyB2b2lkCit6ZXJvX3Jlc3VtZSAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgemVyb19kZXYJCSpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCk7CisKKwlEQkcgKGRldiwgInJlc3VtZVxuIik7CisJZGVsX3RpbWVyICgmZGV2LT5yZXN1bWUpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgemVyb19kcml2ZXIgPSB7CisjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVECisJLnNwZWVkCQk9IFVTQl9TUEVFRF9ISUdILAorI2Vsc2UKKwkuc3BlZWQJCT0gVVNCX1NQRUVEX0ZVTEwsCisjZW5kaWYKKwkuZnVuY3Rpb24JPSAoY2hhciAqKSBsb25nbmFtZSwKKwkuYmluZAkJPSB6ZXJvX2JpbmQsCisJLnVuYmluZAkJPSB6ZXJvX3VuYmluZCwKKworCS5zZXR1cAkJPSB6ZXJvX3NldHVwLAorCS5kaXNjb25uZWN0CT0gemVyb19kaXNjb25uZWN0LAorCisJLnN1c3BlbmQJPSB6ZXJvX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB6ZXJvX3Jlc3VtZSwKKworCS5kcml2ZXIgCT0geworCQkubmFtZQkJPSAoY2hhciAqKSBzaG9ydG5hbWUsCisJCS8vIC5zaHV0ZG93biA9IC4uLgorCQkvLyAuc3VzcGVuZCA9IC4uLgorCQkvLyAucmVzdW1lID0gLi4uCisJfSwKK307CisKK01PRFVMRV9BVVRIT1IgKCJEYXZpZCBCcm93bmVsbCIpOworTU9EVUxFX0xJQ0VOU0UgKCJEdWFsIEJTRC9HUEwiKTsKKworCitzdGF0aWMgaW50IF9faW5pdCBpbml0ICh2b2lkKQoreworCS8qIGEgcmVhbCB2YWx1ZSB3b3VsZCBsaWtlbHkgY29tZSB0aHJvdWdoIHNvbWUgaWQgcHJvbQorCSAqIG9yIG1vZHVsZSBvcHRpb24uICB0aGlzIG9uZSB0YWtlcyBhdCBsZWFzdCB0d28gcGFja2V0cy4KKwkgKi8KKwlzdHJsY3B5IChzZXJpYWwsICIwMTIzNDU2Nzg5LjAxMjM0NTY3ODkuMDEyMzQ1Njc4OSIsIHNpemVvZiBzZXJpYWwpOworCisJcmV0dXJuIHVzYl9nYWRnZXRfcmVnaXN0ZXJfZHJpdmVyICgmemVyb19kcml2ZXIpOworfQorbW9kdWxlX2luaXQgKGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cCAodm9pZCkKK3sKKwl1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyICgmemVyb19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQgKGNsZWFudXApOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE5NmMzMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwpAQCAtMCwwICsxLDEyNiBAQAorIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK2NvbW1lbnQgIlVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycyIKKwlkZXBlbmRzIG9uIFVTQgorCitjb25maWcgVVNCX0VIQ0lfSENECisJdHJpc3RhdGUgIkVIQ0kgSENEIChVU0IgMi4wKSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIFBDSQorCS0tLWhlbHAtLS0KKwkgIFRoZSBFbmhhbmNlZCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIChFSENJKSBpcyBzdGFuZGFyZCBmb3IgVVNCIDIuMAorCSAgImhpZ2ggc3BlZWQiICg0ODAgTWJpdC9zZWMsIDYwIE1ieXRlL3NlYykgaG9zdCBjb250cm9sbGVyIGhhcmR3YXJlLgorCSAgSWYgeW91ciBVU0IgaG9zdCBjb250cm9sbGVyIHN1cHBvcnRzIFVTQiAyLjAsIHlvdSB3aWxsIGxpa2VseSB3YW50IHRvCisJICBjb25maWd1cmUgdGhpcyBIb3N0IENvbnRyb2xsZXIgRHJpdmVyLiAgQXQgdGhpcyB3cml0aW5nLCB0aGUgcHJpbWFyeQorCSAgaW1wbGVtZW50YXRpb24gb2YgRUhDSSBpcyBhIGNoaXAgZnJvbSBORUMsIHdpZGVseSBhdmFpbGFibGUgaW4gYWRkLW9uCisJICBQQ0kgY2FyZHMsIGJ1dCBpbXBsZW1lbnRhdGlvbnMgYXJlIGluIHRoZSB3b3JrcyBmcm9tIG90aGVyIHZlbmRvcnMKKwkgIGluY2x1ZGluZyBJbnRlbCBhbmQgUGhpbGlwcy4gIE1vdGhlcmJvYXJkIHN1cHBvcnQgaXMgYXBwZWFyaW5nLgorCisJICBFSENJIGNvbnRyb2xsZXJzIGFyZSBwYWNrYWdlZCB3aXRoICJjb21wYW5pb24iIGhvc3QgY29udHJvbGxlcnMgKE9IQ0kKKwkgIG9yIFVIQ0kpIHRvIGhhbmRsZSBVU0IgMS4xIGRldmljZXMgY29ubmVjdGVkIHRvIHJvb3QgaHViIHBvcnRzLiAgUG9ydHMKKwkgIHdpbGwgY29ubmVjdCB0byBFSENJIGlmIGl0IHRoZSBkZXZpY2UgaXMgaGlnaCBzcGVlZCwgb3RoZXJ3aXNlIHRoZXkKKwkgIGNvbm5lY3QgdG8gYSBjb21wYW5pb24gY29udHJvbGxlci4gIElmIHlvdSBjb25maWd1cmUgRUhDSSwgeW91IHNob3VsZAorCSAgcHJvYmFibHkgY29uZmlndXJlIHRoZSBPSENJIChmb3IgTkVDIGFuZCBzb21lIG90aGVyIHZlbmRvcnMpIFVTQiBIb3N0CisJICBDb250cm9sbGVyIERyaXZlciBvciBVSENJIChmb3IgVmlhIG1vdGhlcmJvYXJkcykgSG9zdCBDb250cm9sbGVyCisJICBEcml2ZXIgdG9vLgorCisJICBZb3UgbWF5IHdhbnQgdG8gcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9laGNpLnR4dD4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVoY2ktaGNkLgorCitjb25maWcgVVNCX0VIQ0lfU1BMSVRfSVNPCisJYm9vbCAiRnVsbCBzcGVlZCBJU08gdHJhbnNhY3Rpb25zIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCX0VIQ0lfSENEICYmIEVYUEVSSU1FTlRBTAorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgY29kZSBpcyBuZXcgYW5kIGhhc24ndCBiZWVuIHVzZWQgd2l0aCBtYW55IGRpZmZlcmVudAorCSAgRUhDSSBvciBVU0IgMi4wIHRyYW5zYWN0aW9uIHRyYW5zbGF0b3IgaW1wbGVtZW50YXRpb25zLgorCSAgSXQgc2hvdWxkIHdvcmsgZm9yIElTTy1PVVQgdHJhbnNmZXJzLCBsaWtlIGF1ZGlvLgorCitjb25maWcgVVNCX0VIQ0lfUk9PVF9IVUJfVFQKKwlib29sICJSb290IEh1YiBUcmFuc2FjdGlvbiBUcmFuc2xhdG9ycyAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQl9FSENJX0hDRCAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJICBTb21lIEVIQ0kgY2hpcHMgaGF2ZSB2ZW5kb3Itc3BlY2lmaWMgZXh0ZW5zaW9ucyB0byBpbnRlZ3JhdGUKKwkgIHRyYW5zYWN0aW9uIHRyYW5zbGF0b3JzLCBzbyB0aGF0IG5vIE9IQ0kgb3IgVUhDSSBjb21wYW5pb24KKwkgIGNvbnRyb2xsZXIgaXMgbmVlZGVkLiAgSXQncyBzYWZlIHRvIHNheSAieSIgZXZlbiBpZiB5b3VyCisJICBjb250cm9sbGVyIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCisKKwkgIFRoaXMgc3VwcG9ydHMgdGhlIEVIQ0kgaW1wbGVtZW50YXRpb24gZnJvbSBUcmFuc0RpbWVuc2lvbiBJbmMuCisKK2NvbmZpZyBVU0JfT0hDSV9IQ0QKKwl0cmlzdGF0ZSAiT0hDSSBIQ0Qgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBVU0JfQVJDSF9IQVNfT0hDSQorCXNlbGVjdCBJU1AxMzAxX09NQVAgaWYgTUFDSF9PTUFQX0gyIHx8IE1BQ0hfT01BUF9IMworCS0tLWhlbHAtLS0KKwkgIFRoZSBPcGVuIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgKE9IQ0kpIGlzIGEgc3RhbmRhcmQgZm9yIGFjY2Vzc2luZworCSAgVVNCIDEuMSBob3N0IGNvbnRyb2xsZXIgaGFyZHdhcmUuICBJdCBkb2VzIG1vcmUgaW4gaGFyZHdhcmUgdGhhbiBJbnRlbCdzCisJICBVSENJIHNwZWNpZmljYXRpb24uICBJZiB5b3VyIFVTQiBob3N0IGNvbnRyb2xsZXIgZm9sbG93cyB0aGUgT0hDSSBzcGVjLAorCSAgc2F5IFkuICBPbiBtb3N0IG5vbi14ODYgc3lzdGVtcywgYW5kIG9uIHg4NiBoYXJkd2FyZSB0aGF0J3Mgbm90IHVzaW5nIGEKKwkgIFVTQiBjb250cm9sbGVyIGZyb20gSW50ZWwgb3IgVklBLCB0aGlzIGlzIGFwcHJvcHJpYXRlLiAgSWYgeW91ciBob3N0CisJICBjb250cm9sbGVyIGRvZXNuJ3QgdXNlIFBDSSwgdGhpcyBpcyBwcm9iYWJseSBhcHByb3ByaWF0ZS4gIEZvciBhIFBDSQorCSAgYmFzZWQgc3lzdGVtIHdoZXJlIHlvdSdyZSBub3Qgc3VyZSwgdGhlICJsc3BjaSAtdiIgZW50cnkgd2lsbCBsaXN0IHRoZQorCSAgcmlnaHQgInByb2ctaWYiIGZvciB5b3VyIFVTQiBjb250cm9sbGVyKHMpOiAgRUhDSSwgT0hDSSwgb3IgVUhDSS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgb2hjaS1oY2QuCisKK2NvbmZpZyBVU0JfT0hDSV9IQ0RfUFBDX1NPQworCWJvb2wgIk9IQ0kgc3VwcG9ydCBmb3Igb24tY2hpcCBQUEMgVVNCIGNvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBVU0JfT0hDSV9IQ0QgJiYgKFNUQjAzeHh4IHx8IFBQQ19NUEM1Mnh4KQorCWRlZmF1bHQgeQorCXNlbGVjdCBVU0JfT0hDSV9CSUdfRU5ESUFOCisJLS0taGVscC0tLQorCSAgRW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVVNCIGNvbnRyb2xsZXIgb24gdGhlIE1QQzUyeHggb3IKKwkgIFNUQjAzeHh4IHByb2Nlc3NvciBjaGlwLiAgSWYgdW5zdXJlLCBzYXkgWS4KKworY29uZmlnIFVTQl9PSENJX0hDRF9QQ0kKKwlib29sICJPSENJIHN1cHBvcnQgZm9yIFBDSS1idXMgVVNCIGNvbnRyb2xsZXJzIgorCWRlcGVuZHMgb24gVVNCX09IQ0lfSENEICYmIFBDSSAmJiAoU1RCMDN4eHggfHwgUFBDX01QQzUyeHgpCisJZGVmYXVsdCB5CisJc2VsZWN0IFVTQl9PSENJX0xJVFRMRV9FTkRJQU4KKwktLS1oZWxwLS0tCisJICBFbmFibGVzIHN1cHBvcnQgZm9yIFBDSS1idXMgcGx1Zy1pbiBVU0IgY29udHJvbGxlciBjYXJkcy4KKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBVU0JfT0hDSV9CSUdfRU5ESUFOCisJYm9vbAorCWRlcGVuZHMgb24gVVNCX09IQ0lfSENECisJZGVmYXVsdCBuCisKK2NvbmZpZyBVU0JfT0hDSV9MSVRUTEVfRU5ESUFOCisJYm9vbAorCWRlcGVuZHMgb24gVVNCX09IQ0lfSENECisJZGVmYXVsdCBuIGlmIFNUQjAzeHh4IHx8IFBQQ19NUEM1Mnh4CisJZGVmYXVsdCB5CisKK2NvbmZpZyBVU0JfVUhDSV9IQ0QKKwl0cmlzdGF0ZSAiVUhDSSBIQ0QgKG1vc3QgSW50ZWwgYW5kIFZJQSkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBQQ0kKKwktLS1oZWxwLS0tCisJICBUaGUgVW5pdmVyc2FsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgaXMgYSBzdGFuZGFyZCBieSBJbnRlbCBmb3IKKwkgIGFjY2Vzc2luZyB0aGUgVVNCIGhhcmR3YXJlIGluIHRoZSBQQyAod2hpY2ggaXMgYWxzbyBjYWxsZWQgdGhlIFVTQgorCSAgaG9zdCBjb250cm9sbGVyKS4gSWYgeW91ciBVU0IgaG9zdCBjb250cm9sbGVyIGNvbmZvcm1zIHRvIHRoaXMKKwkgIHN0YW5kYXJkLCB5b3UgbWF5IHdhbnQgdG8gc2F5IFksIGJ1dCBzZWUgYmVsb3cuIEFsbCByZWNlbnQgYm9hcmRzCisJICB3aXRoIEludGVsIFBDSSBjaGlwc2V0cyAobGlrZSBpbnRlbCA0MzBUWCwgNDQwRlgsIDQ0MExYLCA0NDBCWCwKKwkgIGk4MTAsIGk4MjApIGNvbmZvcm0gdG8gdGhpcyBzdGFuZGFyZC4gQWxzbyBhbGwgVklBIFBDSSBjaGlwc2V0cworCSAgKGxpa2UgVklBIFZQMiwgVlAzLCBNVlAzLCBBcG9sbG8gUHJvLCBBcG9sbG8gUHJvIElJIG9yIEFwb2xsbyBQcm8KKwkgIDEzMykuIElmIHVuc3VyZSwgc2F5IFkuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVoY2ktaGNkLgorCitjb25maWcgVVNCX1NMODExX0hDRAorCXRyaXN0YXRlICJTTDgxMUhTIEhDRCBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCCisJZGVmYXVsdCBOCisJaGVscAorCSAgVGhlIFNMODExSFMgaXMgYSBzaW5nbGUtcG9ydCBVU0IgY29udHJvbGxlciB0aGF0IHN1cHBvcnRzIGVpdGhlcgorCSAgaG9zdCBzaWRlIG9yIHBlcmlwaGVyYWwgc2lkZSByb2xlcy4gIEVuYWJsZSB0aGlzIG9wdGlvbiBpZiB5b3VyCisJICBib2FyZCBoYXMgdGhpcyBjaGlwLCBhbmQgeW91IHdhbnQgdG8gdXNlIGl0IGFzIGEgaG9zdCBjb250cm9sbGVyLiAKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNsODExLWhjZC4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU3NGNhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUKQEAgLTAsMCArMSwxMCBAQAorIworIyBNYWtlZmlsZSBmb3IgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXIKKyMgZnJhbWV3b3JrIGFuZCBkcml2ZXJzCisjCisKK29iai0kKENPTkZJR19VU0JfRUhDSV9IQ0QpCSs9IGVoY2ktaGNkLm8KK29iai0kKENPTkZJR19VU0JfT0hDSV9IQ0QpCSs9IG9oY2ktaGNkLm8KK29iai0kKENPTkZJR19VU0JfVUhDSV9IQ0QpCSs9IHVoY2ktaGNkLm8KK29iai0kKENPTkZJR19VU0JfU0w4MTFfSENEKQkrPSBzbDgxMS1oY2Qubworb2JqLSQoQ09ORklHX0VUUkFYX0FSQ0hfVjEwKQkrPSBoY19jcmlzdjEwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTVlMmEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jCkBAIC0wLDAgKzEsNzU1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDIgYnkgRGF2aWQgQnJvd25lbGwKKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyogdGhpcyBmaWxlIGlzIHBhcnQgb2YgZWhjaS1oY2QuYyAqLworCisjZGVmaW5lIGVoY2lfZGJnKGVoY2ksIGZtdCwgYXJncy4uLikgXAorCWRldl9kYmcgKGVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmNvbnRyb2xsZXIgLCBmbXQgLCAjIyBhcmdzICkKKyNkZWZpbmUgZWhjaV9lcnIoZWhjaSwgZm10LCBhcmdzLi4uKSBcCisJZGV2X2VyciAoZWhjaV90b19oY2QoZWhjaSktPnNlbGYuY29udHJvbGxlciAsIGZtdCAsICMjIGFyZ3MgKQorI2RlZmluZSBlaGNpX2luZm8oZWhjaSwgZm10LCBhcmdzLi4uKSBcCisJZGV2X2luZm8gKGVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmNvbnRyb2xsZXIgLCBmbXQgLCAjIyBhcmdzICkKKyNkZWZpbmUgZWhjaV93YXJuKGVoY2ksIGZtdCwgYXJncy4uLikgXAorCWRldl93YXJuIChlaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5jb250cm9sbGVyICwgZm10ICwgIyMgYXJncyApCisKKyNpZmRlZiBFSENJX1ZFUkJPU0VfREVCVUcKKyMJZGVmaW5lIHZkYmcgZGJnCisjCWRlZmluZSBlaGNpX3ZkYmcgZWhjaV9kYmcKKyNlbHNlCisjCWRlZmluZSB2ZGJnKGZtdCxhcmdzLi4uKSBkbyB7IH0gd2hpbGUgKDApCisjCWRlZmluZSBlaGNpX3ZkYmcoZWhjaSwgZm10LCBhcmdzLi4uKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2lmZGVmCURFQlVHCisKKy8qIGNoZWNrIHRoZSB2YWx1ZXMgaW4gdGhlIEhDU1BBUkFNUyByZWdpc3RlcgorICogKGhvc3QgY29udHJvbGxlciBfU3RydWN0dXJhbF8gcGFyYW1ldGVycykKKyAqIHNlZSBFSENJIHNwZWMsIFRhYmxlIDItNCBmb3IgZWFjaCB2YWx1ZQorICovCitzdGF0aWMgdm9pZCBkYmdfaGNzX3BhcmFtcyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBjaGFyICpsYWJlbCkKK3sKKwl1MzIJcGFyYW1zID0gcmVhZGwgKCZlaGNpLT5jYXBzLT5oY3NfcGFyYW1zKTsKKworCWVoY2lfZGJnIChlaGNpLAorCQkiJXMgaGNzX3BhcmFtcyAweCV4IGRiZz0lZCVzIGNjPSVkIHBjYz0lZCVzJXMgcG9ydHM9JWRcbiIsCisJCWxhYmVsLCBwYXJhbXMsCisJCUhDU19ERUJVR19QT1JUIChwYXJhbXMpLAorCQlIQ1NfSU5ESUNBVE9SIChwYXJhbXMpID8gIiBpbmQiIDogIiIsCisJCUhDU19OX0NDIChwYXJhbXMpLAorCQlIQ1NfTl9QQ0MgKHBhcmFtcyksCisJICAgICAgICBIQ1NfUE9SVFJPVVRFRCAocGFyYW1zKSA/ICIiIDogIiBvcmRlcmVkIiwKKwkJSENTX1BQQyAocGFyYW1zKSA/ICIiIDogIiAhcHBjIiwKKwkJSENTX05fUE9SVFMgKHBhcmFtcykKKwkJKTsKKwkvKiBQb3J0IHJvdXRpbmcsIHBlciBFSENJIDAuOTUgU3BlYywgU2VjdGlvbiAyLjIuNSAqLworCWlmIChIQ1NfUE9SVFJPVVRFRCAocGFyYW1zKSkgeworCQlpbnQgaTsKKwkJY2hhciBidWYgWzQ2XSwgdG1wIFs3XSwgYnl0ZTsKKworCQlidWZbMF0gPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgSENTX05fUE9SVFMgKHBhcmFtcyk7IGkrKykgeworCQkJLy8gRklYTUUgTUlQUyB3b24ndCByZWFkYigpIC4uLgorCQkJYnl0ZSA9IHJlYWRiICgmZWhjaS0+Y2Fwcy0+cG9ydHJvdXRlWyhpPj4xKV0pOworCQkJc3ByaW50Zih0bXAsICIlZCAiLCAKKwkJCQkoKGkgJiAweDEpID8gKChieXRlKSYweGYpIDogKChieXRlPj40KSYweGYpKSk7CisJCQlzdHJjYXQoYnVmLCB0bXApOworCQl9CisJCWVoY2lfZGJnIChlaGNpLCAiJXMgcG9ydHJvdXRlICVzXG4iLAorCQkJCWxhYmVsLCBidWYpOworCX0KK30KKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkYmdfaGNzX3BhcmFtcyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBjaGFyICpsYWJlbCkge30KKworI2VuZGlmCisKKyNpZmRlZglERUJVRworCisvKiBjaGVjayB0aGUgdmFsdWVzIGluIHRoZSBIQ0NQQVJBTVMgcmVnaXN0ZXIKKyAqIChob3N0IGNvbnRyb2xsZXIgX0NhcGFiaWxpdHlfIHBhcmFtZXRlcnMpCisgKiBzZWUgRUhDSSBTcGVjLCBUYWJsZSAyLTUgZm9yIGVhY2ggdmFsdWUKKyAqICovCitzdGF0aWMgdm9pZCBkYmdfaGNjX3BhcmFtcyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBjaGFyICpsYWJlbCkKK3sKKwl1MzIJcGFyYW1zID0gcmVhZGwgKCZlaGNpLT5jYXBzLT5oY2NfcGFyYW1zKTsKKworCWlmIChIQ0NfSVNPQ19DQUNIRSAocGFyYW1zKSkgeworCQllaGNpX2RiZyAoZWhjaSwKKwkJICAgICAiJXMgaGNjX3BhcmFtcyAlMDR4IGNhY2hpbmcgZnJhbWUgJXMlcyVzXG4iLAorCQkgICAgIGxhYmVsLCBwYXJhbXMsCisJCSAgICAgSENDX1BHTV9GUkFNRUxJU1RMRU4gKHBhcmFtcykgPyAiMjU2LzUxMi8xMDI0IiA6ICIxMDI0IiwKKwkJICAgICBIQ0NfQ0FOUEFSSyAocGFyYW1zKSA/ICIgcGFyayIgOiAiIiwKKwkJICAgICBIQ0NfNjRCSVRfQUREUiAocGFyYW1zKSA/ICIgNjQgYml0IGFkZHIiIDogIiIpOworCX0gZWxzZSB7CisJCWVoY2lfZGJnIChlaGNpLAorCQkgICAgICIlcyBoY2NfcGFyYW1zICUwNHggdGhyZXNoICVkIHVmcmFtZXMgJXMlcyVzXG4iLAorCQkgICAgIGxhYmVsLAorCQkgICAgIHBhcmFtcywKKwkJICAgICBIQ0NfSVNPQ19USFJFUyAocGFyYW1zKSwKKwkJICAgICBIQ0NfUEdNX0ZSQU1FTElTVExFTiAocGFyYW1zKSA/ICIyNTYvNTEyLzEwMjQiIDogIjEwMjQiLAorCQkgICAgIEhDQ19DQU5QQVJLIChwYXJhbXMpID8gIiBwYXJrIiA6ICIiLAorCQkgICAgIEhDQ182NEJJVF9BRERSIChwYXJhbXMpID8gIiA2NCBiaXQgYWRkciIgOiAiIik7CisJfQorfQorI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIGRiZ19oY2NfcGFyYW1zIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIGNoYXIgKmxhYmVsKSB7fQorCisjZW5kaWYKKworI2lmZGVmCURFQlVHCisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorZGJnX3F0ZCAoY29uc3QgY2hhciAqbGFiZWwsIHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcXRkICpxdGQpCit7CisJZWhjaV9kYmcgKGVoY2ksICIlcyB0ZCAlcCBuJTA4eCAlMDh4IHQlMDh4IHAwPSUwOHhcbiIsIGxhYmVsLCBxdGQsCisJCWxlMzJfdG9fY3B1cCAoJnF0ZC0+aHdfbmV4dCksCisJCWxlMzJfdG9fY3B1cCAoJnF0ZC0+aHdfYWx0X25leHQpLAorCQlsZTMyX3RvX2NwdXAgKCZxdGQtPmh3X3Rva2VuKSwKKwkJbGUzMl90b19jcHVwICgmcXRkLT5od19idWYgWzBdKSk7CisJaWYgKHF0ZC0+aHdfYnVmIFsxXSkKKwkJZWhjaV9kYmcgKGVoY2ksICIgIHAxPSUwOHggcDI9JTA4eCBwMz0lMDh4IHA0PSUwOHhcbiIsCisJCQlsZTMyX3RvX2NwdXAgKCZxdGQtPmh3X2J1ZiBbMV0pLAorCQkJbGUzMl90b19jcHVwICgmcXRkLT5od19idWYgWzJdKSwKKwkJCWxlMzJfdG9fY3B1cCAoJnF0ZC0+aHdfYnVmIFszXSksCisJCQlsZTMyX3RvX2NwdXAgKCZxdGQtPmh3X2J1ZiBbNF0pKTsKK30KKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCitkYmdfcWggKGNvbnN0IGNoYXIgKmxhYmVsLCBzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCkKK3sKKwllaGNpX2RiZyAoZWhjaSwgIiVzIHFoICVwIG4lMDh4IGluZm8gJXggJXggcXRkICV4XG4iLCBsYWJlbCwKKwkJcWgsIHFoLT5od19uZXh0LCBxaC0+aHdfaW5mbzEsIHFoLT5od19pbmZvMiwKKwkJcWgtPmh3X2N1cnJlbnQpOworCWRiZ19xdGQgKCJvdmVybGF5IiwgZWhjaSwgKHN0cnVjdCBlaGNpX3F0ZCAqKSAmcWgtPmh3X3F0ZF9uZXh0KTsKK30KKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCitkYmdfaXRkIChjb25zdCBjaGFyICpsYWJlbCwgc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9pdGQgKml0ZCkgCit7CisJZWhjaV9kYmcgKGVoY2ksICIlcyBbJWRdIGl0ZCAlcCwgbmV4dCAlMDh4LCB1cmIgJXBcbiIsCisJCWxhYmVsLCBpdGQtPmZyYW1lLCBpdGQsIGxlMzJfdG9fY3B1KGl0ZC0+aHdfbmV4dCksIGl0ZC0+dXJiKTsKKwllaGNpX2RiZyAoZWhjaSwKKwkJIiAgdHJhbnM6ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwgCisJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfdHJhbnNhY3Rpb25bMF0pLAorCQlsZTMyX3RvX2NwdShpdGQtPmh3X3RyYW5zYWN0aW9uWzFdKSwKKwkJbGUzMl90b19jcHUoaXRkLT5od190cmFuc2FjdGlvblsyXSksCisJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfdHJhbnNhY3Rpb25bM10pLAorCQlsZTMyX3RvX2NwdShpdGQtPmh3X3RyYW5zYWN0aW9uWzRdKSwKKwkJbGUzMl90b19jcHUoaXRkLT5od190cmFuc2FjdGlvbls1XSksCisJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfdHJhbnNhY3Rpb25bNl0pLAorCQlsZTMyX3RvX2NwdShpdGQtPmh3X3RyYW5zYWN0aW9uWzddKSk7CisJZWhjaV9kYmcgKGVoY2ksCisJCSIgIGJ1ZjogICAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLCAKKwkJbGUzMl90b19jcHUoaXRkLT5od19idWZwWzBdKSwKKwkJbGUzMl90b19jcHUoaXRkLT5od19idWZwWzFdKSwKKwkJbGUzMl90b19jcHUoaXRkLT5od19idWZwWzJdKSwKKwkJbGUzMl90b19jcHUoaXRkLT5od19idWZwWzNdKSwKKwkJbGUzMl90b19jcHUoaXRkLT5od19idWZwWzRdKSwKKwkJbGUzMl90b19jcHUoaXRkLT5od19idWZwWzVdKSwKKwkJbGUzMl90b19jcHUoaXRkLT5od19idWZwWzZdKSk7CisJZWhjaV9kYmcgKGVoY2ksICIgIGluZGV4OiAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZFxuIiwKKwkJaXRkLT5pbmRleFswXSwgaXRkLT5pbmRleFsxXSwgaXRkLT5pbmRleFsyXSwKKwkJaXRkLT5pbmRleFszXSwgaXRkLT5pbmRleFs0XSwgaXRkLT5pbmRleFs1XSwKKwkJaXRkLT5pbmRleFs2XSwgaXRkLT5pbmRleFs3XSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorZGJnX3NpdGQgKGNvbnN0IGNoYXIgKmxhYmVsLCBzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3NpdGQgKnNpdGQpIAoreworCWVoY2lfZGJnIChlaGNpLCAiJXMgWyVkXSBzaXRkICVwLCBuZXh0ICUwOHgsIHVyYiAlcFxuIiwKKwkJbGFiZWwsIHNpdGQtPmZyYW1lLCBzaXRkLCBsZTMyX3RvX2NwdShzaXRkLT5od19uZXh0KSwgc2l0ZC0+dXJiKTsKKwllaGNpX2RiZyAoZWhjaSwKKwkJIiAgYWRkciAlMDh4IHNjaGVkICUwNHggcmVzdWx0ICUwOHggYnVmICUwOHggJTA4eFxuIiwgCisJCWxlMzJfdG9fY3B1KHNpdGQtPmh3X2Z1bGxzcGVlZF9lcCksCisJCWxlMzJfdG9fY3B1KHNpdGQtPmh3X3VmcmFtZSksCisJCWxlMzJfdG9fY3B1KHNpdGQtPmh3X3Jlc3VsdHMpLAorCQlsZTMyX3RvX2NwdShzaXRkLT5od19idWYgWzBdKSwKKwkJbGUzMl90b19jcHUoc2l0ZC0+aHdfYnVmIFsxXSkpOworfQorCitzdGF0aWMgaW50IF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorZGJnX3N0YXR1c19idWYgKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBjb25zdCBjaGFyICpsYWJlbCwgdTMyIHN0YXR1cykKK3sKKwlyZXR1cm4gc2NucHJpbnRmIChidWYsIGxlbiwKKwkJIiVzJXNzdGF0dXMgJTA0eCVzJXMlcyVzJXMlcyVzJXMlcyVzIiwKKwkJbGFiZWwsIGxhYmVsIFswXSA/ICIgIiA6ICIiLCBzdGF0dXMsCisJCShzdGF0dXMgJiBTVFNfQVNTKSA/ICIgQXN5bmMiIDogIiIsCisJCShzdGF0dXMgJiBTVFNfUFNTKSA/ICIgUGVyaW9kaWMiIDogIiIsCisJCShzdGF0dXMgJiBTVFNfUkVDTCkgPyAiIFJlY2wiIDogIiIsCisJCShzdGF0dXMgJiBTVFNfSEFMVCkgPyAiIEhhbHQiIDogIiIsCisJCShzdGF0dXMgJiBTVFNfSUFBKSA/ICIgSUFBIiA6ICIiLAorCQkoc3RhdHVzICYgU1RTX0ZBVEFMKSA/ICIgRkFUQUwiIDogIiIsCisJCShzdGF0dXMgJiBTVFNfRkxSKSA/ICIgRkxSIiA6ICIiLAorCQkoc3RhdHVzICYgU1RTX1BDRCkgPyAiIFBDRCIgOiAiIiwKKwkJKHN0YXR1cyAmIFNUU19FUlIpID8gIiBFUlIiIDogIiIsCisJCShzdGF0dXMgJiBTVFNfSU5UKSA/ICIgSU5UIiA6ICIiCisJCSk7Cit9CisKK3N0YXRpYyBpbnQgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCitkYmdfaW50cl9idWYgKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBjb25zdCBjaGFyICpsYWJlbCwgdTMyIGVuYWJsZSkKK3sKKwlyZXR1cm4gc2NucHJpbnRmIChidWYsIGxlbiwKKwkJIiVzJXNpbnRyZW5hYmxlICUwMnglcyVzJXMlcyVzJXMiLAorCQlsYWJlbCwgbGFiZWwgWzBdID8gIiAiIDogIiIsIGVuYWJsZSwKKwkJKGVuYWJsZSAmIFNUU19JQUEpID8gIiBJQUEiIDogIiIsCisJCShlbmFibGUgJiBTVFNfRkFUQUwpID8gIiBGQVRBTCIgOiAiIiwKKwkJKGVuYWJsZSAmIFNUU19GTFIpID8gIiBGTFIiIDogIiIsCisJCShlbmFibGUgJiBTVFNfUENEKSA/ICIgUENEIiA6ICIiLAorCQkoZW5hYmxlICYgU1RTX0VSUikgPyAiIEVSUiIgOiAiIiwKKwkJKGVuYWJsZSAmIFNUU19JTlQpID8gIiBJTlQiIDogIiIKKwkJKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGZsc19zdHJpbmdzIFtdID0KKyAgICB7ICIxMDI0IiwgIjUxMiIsICIyNTYiLCAiPz8iIH07CisKK3N0YXRpYyBpbnQKK2RiZ19jb21tYW5kX2J1ZiAoY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIGNvbnN0IGNoYXIgKmxhYmVsLCB1MzIgY29tbWFuZCkKK3sKKwlyZXR1cm4gc2NucHJpbnRmIChidWYsIGxlbiwKKwkJIiVzJXNjb21tYW5kICUwNnggJXM9JWQgaXRocmVzaD0lZCVzJXMlcyVzIHBlcmlvZD0lcyVzICVzIiwKKwkJbGFiZWwsIGxhYmVsIFswXSA/ICIgIiA6ICIiLCBjb21tYW5kLAorCQkoY29tbWFuZCAmIENNRF9QQVJLKSA/ICJwYXJrIiA6ICIocGFyaykiLAorCQlDTURfUEFSS19DTlQgKGNvbW1hbmQpLAorCQkoY29tbWFuZCA+PiAxNikgJiAweDNmLAorCQkoY29tbWFuZCAmIENNRF9MUkVTRVQpID8gIiBMUmVzZXQiIDogIiIsCisJCShjb21tYW5kICYgQ01EX0lBQUQpID8gIiBJQUFEIiA6ICIiLAorCQkoY29tbWFuZCAmIENNRF9BU0UpID8gIiBBc3luYyIgOiAiIiwKKwkJKGNvbW1hbmQgJiBDTURfUFNFKSA/ICIgUGVyaW9kaWMiIDogIiIsCisJCWZsc19zdHJpbmdzIFsoY29tbWFuZCA+PiAyKSAmIDB4M10sCisJCShjb21tYW5kICYgQ01EX1JFU0VUKSA/ICIgUmVzZXQiIDogIiIsCisJCShjb21tYW5kICYgQ01EX1JVTikgPyAiUlVOIiA6ICJIQUxUIgorCQkpOworfQorCitzdGF0aWMgaW50CitkYmdfcG9ydF9idWYgKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBjb25zdCBjaGFyICpsYWJlbCwgaW50IHBvcnQsIHUzMiBzdGF0dXMpCit7CisJY2hhcgkqc2lnOworCisJLyogc2lnbmFsaW5nIHN0YXRlICovCisJc3dpdGNoIChzdGF0dXMgJiAoMyA8PCAxMCkpIHsKKwljYXNlIDAgPDwgMTA6IHNpZyA9ICJzZTAiOyBicmVhazsKKwljYXNlIDEgPDwgMTA6IHNpZyA9ICJrIjsgYnJlYWs7CQkvKiBsb3cgc3BlZWQgKi8KKwljYXNlIDIgPDwgMTA6IHNpZyA9ICJqIjsgYnJlYWs7CisJZGVmYXVsdDogc2lnID0gIj8iOyBicmVhazsKKwl9CisKKwlyZXR1cm4gc2NucHJpbnRmIChidWYsIGxlbiwKKwkJIiVzJXNwb3J0ICVkIHN0YXR1cyAlMDZ4JXMlcyBzaWc9JXMgJXMlcyVzJXMlcyVzJXMlcyVzIiwKKwkJbGFiZWwsIGxhYmVsIFswXSA/ICIgIiA6ICIiLCBwb3J0LCBzdGF0dXMsCisJCShzdGF0dXMgJiBQT1JUX1BPV0VSKSA/ICIgUE9XRVIiIDogIiIsCisJCShzdGF0dXMgJiBQT1JUX09XTkVSKSA/ICIgT1dORVIiIDogIiIsCisJCXNpZywKKwkJKHN0YXR1cyAmIFBPUlRfUkVTRVQpID8gIiBSRVNFVCIgOiAiIiwKKwkJKHN0YXR1cyAmIFBPUlRfU1VTUEVORCkgPyAiIFNVU1BFTkQiIDogIiIsCisJCShzdGF0dXMgJiBQT1JUX1JFU1VNRSkgPyAiIFJFU1VNRSIgOiAiIiwKKwkJKHN0YXR1cyAmIFBPUlRfT0NDKSA/ICIgT0NDIiA6ICIiLAorCQkoc3RhdHVzICYgUE9SVF9PQykgPyAiIE9DIiA6ICIiLAorCQkoc3RhdHVzICYgUE9SVF9QRUMpID8gIiBQRUMiIDogIiIsCisJCShzdGF0dXMgJiBQT1JUX1BFKSA/ICIgUEUiIDogIiIsCisJCShzdGF0dXMgJiBQT1JUX0NTQykgPyAiIENTQyIgOiAiIiwKKwkJKHN0YXR1cyAmIFBPUlRfQ09OTkVDVCkgPyAiIENPTk5FQ1QiIDogIiIKKwkgICAgKTsKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKK2RiZ19xaCAoY2hhciAqbGFiZWwsIHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcWggKnFoKQore30KKworc3RhdGljIGlubGluZSBpbnQgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCitkYmdfc3RhdHVzX2J1ZiAoY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIGNvbnN0IGNoYXIgKmxhYmVsLCB1MzIgc3RhdHVzKQoreyByZXR1cm4gMDsgfQorCitzdGF0aWMgaW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKK2RiZ19jb21tYW5kX2J1ZiAoY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIGNvbnN0IGNoYXIgKmxhYmVsLCB1MzIgY29tbWFuZCkKK3sgcmV0dXJuIDA7IH0KKworc3RhdGljIGlubGluZSBpbnQgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCitkYmdfaW50cl9idWYgKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBjb25zdCBjaGFyICpsYWJlbCwgdTMyIGVuYWJsZSkKK3sgcmV0dXJuIDA7IH0KKworc3RhdGljIGlubGluZSBpbnQgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCitkYmdfcG9ydF9idWYgKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBjb25zdCBjaGFyICpsYWJlbCwgaW50IHBvcnQsIHUzMiBzdGF0dXMpCit7IHJldHVybiAwOyB9CisKKyNlbmRpZgkvKiBERUJVRyAqLworCisvKiBmdW5jdGlvbnMgaGF2ZSB0aGUgIndyb25nIiBmaWxlbmFtZSB3aGVuIHRoZXkncmUgb3V0cHV0Li4uICovCisjZGVmaW5lIGRiZ19zdGF0dXMoZWhjaSwgbGFiZWwsIHN0YXR1cykgeyBcCisJY2hhciBfYnVmIFs4MF07IFwKKwlkYmdfc3RhdHVzX2J1ZiAoX2J1Ziwgc2l6ZW9mIF9idWYsIGxhYmVsLCBzdGF0dXMpOyBcCisJZWhjaV9kYmcgKGVoY2ksICIlc1xuIiwgX2J1Zik7IFwKK30KKworI2RlZmluZSBkYmdfY21kKGVoY2ksIGxhYmVsLCBjb21tYW5kKSB7IFwKKwljaGFyIF9idWYgWzgwXTsgXAorCWRiZ19jb21tYW5kX2J1ZiAoX2J1Ziwgc2l6ZW9mIF9idWYsIGxhYmVsLCBjb21tYW5kKTsgXAorCWVoY2lfZGJnIChlaGNpLCAiJXNcbiIsIF9idWYpOyBcCit9CisKKyNkZWZpbmUgZGJnX3BvcnQoZWhjaSwgbGFiZWwsIHBvcnQsIHN0YXR1cykgeyBcCisJY2hhciBfYnVmIFs4MF07IFwKKwlkYmdfcG9ydF9idWYgKF9idWYsIHNpemVvZiBfYnVmLCBsYWJlbCwgcG9ydCwgc3RhdHVzKTsgXAorCWVoY2lfZGJnIChlaGNpLCAiJXNcbiIsIF9idWYpOyBcCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBTVFVCX0RFQlVHX0ZJTEVTCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcmVhdGVfZGVidWdfZmlsZXMgKHN0cnVjdCBlaGNpX2hjZCAqYnVzKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfZGVidWdfZmlsZXMgKHN0cnVjdCBlaGNpX2hjZCAqYnVzKSB7IH0KKworI2Vsc2UKKworLyogdHJvdWJsZXNob290aW5nIGhlbHA6IGV4cG9zZSBzdGF0ZSBpbiBkcml2ZXJmcyAqLworCisjZGVmaW5lIHNwZWVkX2NoYXIoaW5mbzEpICh7IGNoYXIgdG1wOyBcCisJCXN3aXRjaCAoaW5mbzEgJiAoMyA8PCAxMikpIHsgXAorCQljYXNlIDAgPDwgMTI6IHRtcCA9ICdmJzsgYnJlYWs7IFwKKwkJY2FzZSAxIDw8IDEyOiB0bXAgPSAnbCc7IGJyZWFrOyBcCisJCWNhc2UgMiA8PCAxMjogdG1wID0gJ2gnOyBicmVhazsgXAorCQlkZWZhdWx0OiB0bXAgPSAnPyc7IGJyZWFrOyBcCisJCX07IHRtcDsgfSkKKworc3RhdGljIGlubGluZSBjaGFyIHRva2VuX21hcmsgKF9fbGUzMiB0b2tlbikKK3sKKwlfX3UzMiB2ID0gbGUzMl90b19jcHUgKHRva2VuKTsKKwlpZiAodiAmIFFURF9TVFNfQUNUSVZFKQorCQlyZXR1cm4gJyonOworCWlmICh2ICYgUVREX1NUU19IQUxUKQorCQlyZXR1cm4gJy0nOworCWlmICghSVNfU0hPUlRfUkVBRCAodikpCisJCXJldHVybiAnICc7CisJLyogdHJpZXMgdG8gYWR2YW5jZSB0aHJvdWdoIGh3X2FsdF9uZXh0ICovCisJcmV0dXJuICcvJzsKK30KKworc3RhdGljIHZvaWQgcWhfbGluZXMgKAorCXN0cnVjdCBlaGNpX2hjZCAqZWhjaSwKKwlzdHJ1Y3QgZWhjaV9xaCAqcWgsCisJY2hhciAqKm5leHRwLAorCXVuc2lnbmVkICpzaXplcAorKQoreworCXUzMgkJCXNjcmF0Y2g7CisJdTMyCQkJaHdfY3VycjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCSplbnRyeTsKKwlzdHJ1Y3QgZWhjaV9xdGQJCSp0ZDsKKwl1bnNpZ25lZAkJdGVtcDsKKwl1bnNpZ25lZAkJc2l6ZSA9ICpzaXplcDsKKwljaGFyCQkJKm5leHQgPSAqbmV4dHA7CisJY2hhcgkJCW1hcms7CisKKwlpZiAocWgtPmh3X3F0ZF9uZXh0ID09IEVIQ0lfTElTVF9FTkQpCS8qIE5FQyBkb2VzIHRoaXMgKi8KKwkJbWFyayA9ICdAJzsKKwllbHNlCisJCW1hcmsgPSB0b2tlbl9tYXJrIChxaC0+aHdfdG9rZW4pOworCWlmIChtYXJrID09ICcvJykgewkvKiBxaF9hbHRfbmV4dCBjb250cm9scyBxaCBhZHZhbmNlPyAqLworCQlpZiAoKHFoLT5od19hbHRfbmV4dCAmIFFURF9NQVNLKSA9PSBlaGNpLT5hc3luYy0+aHdfYWx0X25leHQpCisJCQltYXJrID0gJyMnOwkvKiBibG9ja2VkICovCisJCWVsc2UgaWYgKHFoLT5od19hbHRfbmV4dCA9PSBFSENJX0xJU1RfRU5EKQorCQkJbWFyayA9ICcuJzsJLyogdXNlIGh3X3F0ZF9uZXh0ICovCisJCS8qIGVsc2UgYWx0X25leHQgcG9pbnRzIHRvIHNvbWUgb3RoZXIgcXRkICovCisJfQorCXNjcmF0Y2ggPSBsZTMyX3RvX2NwdXAgKCZxaC0+aHdfaW5mbzEpOworCWh3X2N1cnIgPSAobWFyayA9PSAnKicpID8gbGUzMl90b19jcHVwICgmcWgtPmh3X2N1cnJlbnQpIDogMDsKKwl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAorCQkJInFoLyVwIGRldiVkICVjcyBlcCVkICUwOHggJTA4eCAoJTA4eCVjICVzIG5hayVkKSIsCisJCQlxaCwgc2NyYXRjaCAmIDB4MDA3ZiwKKwkJCXNwZWVkX2NoYXIgKHNjcmF0Y2gpLAorCQkJKHNjcmF0Y2ggPj4gOCkgJiAweDAwMGYsCisJCQlzY3JhdGNoLCBsZTMyX3RvX2NwdXAgKCZxaC0+aHdfaW5mbzIpLAorCQkJbGUzMl90b19jcHVwICgmcWgtPmh3X3Rva2VuKSwgbWFyaywKKwkJCShfX2NvbnN0YW50X2NwdV90b19sZTMyIChRVERfVE9HR0xFKSAmIHFoLT5od190b2tlbikKKwkJCQk/ICJkYXRhMSIgOiAiZGF0YTAiLAorCQkJKGxlMzJfdG9fY3B1cCAoJnFoLT5od19hbHRfbmV4dCkgPj4gMSkgJiAweDBmKTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworCisJLyogaGMgbWF5IGJlIG1vZGlmeWluZyB0aGUgbGlzdCBhcyB3ZSByZWFkIGl0IC4uLiAqLworCWxpc3RfZm9yX2VhY2ggKGVudHJ5LCAmcWgtPnF0ZF9saXN0KSB7CisJCXRkID0gbGlzdF9lbnRyeSAoZW50cnksIHN0cnVjdCBlaGNpX3F0ZCwgcXRkX2xpc3QpOworCQlzY3JhdGNoID0gbGUzMl90b19jcHVwICgmdGQtPmh3X3Rva2VuKTsKKwkJbWFyayA9ICcgJzsKKwkJaWYgKGh3X2N1cnIgPT0gdGQtPnF0ZF9kbWEpCisJCQltYXJrID0gJyonOworCQllbHNlIGlmIChxaC0+aHdfcXRkX25leHQgPT0gdGQtPnF0ZF9kbWEpCisJCQltYXJrID0gJysnOworCQllbHNlIGlmIChRVERfTEVOR1RIIChzY3JhdGNoKSkgeworCQkJaWYgKHRkLT5od19hbHRfbmV4dCA9PSBlaGNpLT5hc3luYy0+aHdfYWx0X25leHQpCisJCQkJbWFyayA9ICcjJzsKKwkJCWVsc2UgaWYgKHRkLT5od19hbHRfbmV4dCAhPSBFSENJX0xJU1RfRU5EKQorCQkJCW1hcmsgPSAnLyc7CisJCX0KKwkJdGVtcCA9IHNucHJpbnRmIChuZXh0LCBzaXplLAorCQkJCSJcblx0JXAlYyVzIGxlbj0lZCAlMDh4IHVyYiAlcCIsCisJCQkJdGQsIG1hcmssICh7IGNoYXIgKnRtcDsKKwkJCQkgc3dpdGNoICgoc2NyYXRjaD4+OCkmMHgwMykgeworCQkJCSBjYXNlIDA6IHRtcCA9ICJvdXQiOyBicmVhazsKKwkJCQkgY2FzZSAxOiB0bXAgPSAiaW4iOyBicmVhazsKKwkJCQkgY2FzZSAyOiB0bXAgPSAic2V0dXAiOyBicmVhazsKKwkJCQkgZGVmYXVsdDogdG1wID0gIj8iOyBicmVhazsKKwkJCQkgfSB0bXA7fSksCisJCQkJKHNjcmF0Y2ggPj4gMTYpICYgMHg3ZmZmLAorCQkJCXNjcmF0Y2gsCisJCQkJdGQtPnVyYik7CisJCWlmICh0ZW1wIDwgMCkKKwkJCXRlbXAgPSAwOworCQllbHNlIGlmIChzaXplIDwgdGVtcCkKKwkJCXRlbXAgPSBzaXplOworCQlzaXplIC09IHRlbXA7CisJCW5leHQgKz0gdGVtcDsKKwkJaWYgKHRlbXAgPT0gc2l6ZSkKKwkJCWdvdG8gZG9uZTsKKwl9CisKKwl0ZW1wID0gc25wcmludGYgKG5leHQsIHNpemUsICJcbiIpOworCWlmICh0ZW1wIDwgMCkKKwkJdGVtcCA9IDA7CisJZWxzZSBpZiAoc2l6ZSA8IHRlbXApCisJCXRlbXAgPSBzaXplOworCXNpemUgLT0gdGVtcDsKKwluZXh0ICs9IHRlbXA7CisKK2RvbmU6CisJKnNpemVwID0gc2l6ZTsKKwkqbmV4dHAgPSBuZXh0OworfQorCitzdGF0aWMgc3NpemVfdAorc2hvd19hc3luYyAoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9idXMJCSpidXM7CisJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwl1bnNpZ25lZAkJdGVtcCwgc2l6ZTsKKwljaGFyCQkJKm5leHQ7CisJc3RydWN0IGVoY2lfcWgJCSpxaDsKKworCSpidWYgPSAwOworCisJYnVzID0gdG9fdXNiX2J1cyhjbGFzc19kZXYpOworCWhjZCA9IGJ1cy0+aGNwcml2OworCWVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKKwluZXh0ID0gYnVmOworCXNpemUgPSBQQUdFX1NJWkU7CisKKwkvKiBkdW1wcyBhIHNuYXBzaG90IG9mIHRoZSBhc3luYyBzY2hlZHVsZS4KKwkgKiB1c3VhbGx5IGVtcHR5IGV4Y2VwdCBmb3IgbG9uZy10ZXJtIGJ1bGsgcmVhZHMsIG9yIGhlYWQuCisJICogb25lIFFIIHBlciBsaW5lLCBhbmQgVERzIHdlIGtub3cgYWJvdXQKKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlmb3IgKHFoID0gZWhjaS0+YXN5bmMtPnFoX25leHQucWg7IHNpemUgPiAwICYmIHFoOyBxaCA9IHFoLT5xaF9uZXh0LnFoKQorCQlxaF9saW5lcyAoZWhjaSwgcWgsICZuZXh0LCAmc2l6ZSk7CisJaWYgKGVoY2ktPnJlY2xhaW0gJiYgc2l6ZSA+IDApIHsKKwkJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgIlxucmVjbGFpbSA9XG4iKTsKKwkJc2l6ZSAtPSB0ZW1wOworCQluZXh0ICs9IHRlbXA7CisKKwkJZm9yIChxaCA9IGVoY2ktPnJlY2xhaW07IHNpemUgPiAwICYmIHFoOyBxaCA9IHFoLT5yZWNsYWltKQorCQkJcWhfbGluZXMgKGVoY2ksIHFoLCAmbmV4dCwgJnNpemUpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHN0cmxlbiAoYnVmKTsKK30KK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUiAoYXN5bmMsIFNfSVJVR08sIHNob3dfYXN5bmMsIE5VTEwpOworCisjZGVmaW5lIERCR19TQ0hFRF9MSU1JVCA2NAorCitzdGF0aWMgc3NpemVfdAorc2hvd19wZXJpb2RpYyAoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9idXMJCSpidXM7CisJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwl1bmlvbiBlaGNpX3NoYWRvdwlwLCAqc2VlbjsKKwl1bnNpZ25lZAkJdGVtcCwgc2l6ZSwgc2Vlbl9jb3VudDsKKwljaGFyCQkJKm5leHQ7CisJdW5zaWduZWQJCWk7CisJX19sZTMyCQkJdGFnOworCisJaWYgKCEoc2VlbiA9IGttYWxsb2MgKERCR19TQ0hFRF9MSU1JVCAqIHNpemVvZiAqc2VlbiwgU0xBQl9BVE9NSUMpKSkKKwkJcmV0dXJuIDA7CisJc2Vlbl9jb3VudCA9IDA7CisKKwlidXMgPSB0b191c2JfYnVzKGNsYXNzX2Rldik7CisJaGNkID0gYnVzLT5oY3ByaXY7CisJZWhjaSA9IGhjZF90b19laGNpIChoY2QpOworCW5leHQgPSBidWY7CisJc2l6ZSA9IFBBR0VfU0laRTsKKworCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsICJzaXplID0gJWRcbiIsIGVoY2ktPnBlcmlvZGljX3NpemUpOworCXNpemUgLT0gdGVtcDsKKwluZXh0ICs9IHRlbXA7CisKKwkvKiBkdW1wIGEgc25hcHNob3Qgb2YgdGhlIHBlcmlvZGljIHNjaGVkdWxlLgorCSAqIGlzbyBjaGFuZ2VzLCBpbnRlcnJ1cHQgdXN1YWxseSBkb2Vzbid0LgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBlaGNpLT5wZXJpb2RpY19zaXplOyBpKyspIHsKKwkJcCA9IGVoY2ktPnBzaGFkb3cgW2ldOworCQlpZiAobGlrZWx5ICghcC5wdHIpKQorCQkJY29udGludWU7CisJCXRhZyA9IFFfTkVYVF9UWVBFIChlaGNpLT5wZXJpb2RpYyBbaV0pOworCisJCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsICIlNGQ6ICIsIGkpOworCQlzaXplIC09IHRlbXA7CisJCW5leHQgKz0gdGVtcDsKKworCQlkbyB7CisJCQlzd2l0Y2ggKHRhZykgeworCQkJY2FzZSBRX1RZUEVfUUg6CisJCQkJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgIiBxaCVkLSUwNHgvJXAiLAorCQkJCQkJcC5xaC0+cGVyaW9kLAorCQkJCQkJbGUzMl90b19jcHVwICgmcC5xaC0+aHdfaW5mbzIpCisJCQkJCQkJLyogdWZyYW1lIG1hc2tzICovCisJCQkJCQkJJiAweGZmZmYsCisJCQkJCQlwLnFoKTsKKwkJCQlzaXplIC09IHRlbXA7CisJCQkJbmV4dCArPSB0ZW1wOworCQkJCS8qIGRvbid0IHJlcGVhdCB3aGF0IGZvbGxvd3MgdGhpcyBxaCAqLworCQkJCWZvciAodGVtcCA9IDA7IHRlbXAgPCBzZWVuX2NvdW50OyB0ZW1wKyspIHsKKwkJCQkJaWYgKHNlZW4gW3RlbXBdLnB0ciAhPSBwLnB0cikKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlpZiAocC5xaC0+cWhfbmV4dC5wdHIpCisJCQkJCQl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAorCQkJCQkJCSIgLi4uIik7CisJCQkJCXAucHRyID0gTlVMTDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8qIHNob3cgbW9yZSBpbmZvIHRoZSBmaXJzdCB0aW1lIGFyb3VuZCAqLworCQkJCWlmICh0ZW1wID09IHNlZW5fY291bnQgJiYgcC5wdHIpIHsKKwkJCQkJdTMyCXNjcmF0Y2ggPSBsZTMyX3RvX2NwdXAgKAorCQkJCQkJCSZwLnFoLT5od19pbmZvMSk7CisJCQkJCXN0cnVjdCBlaGNpX3F0ZAkqcXRkOworCQkJCQljaGFyCQkqdHlwZSA9ICIiOworCisJCQkJCS8qIGNvdW50IHRkcywgZ2V0IGVwIGRpcmVjdGlvbiAqLworCQkJCQl0ZW1wID0gMDsKKwkJCQkJbGlzdF9mb3JfZWFjaF9lbnRyeSAocXRkLAorCQkJCQkJCSZwLnFoLT5xdGRfbGlzdCwKKwkJCQkJCQlxdGRfbGlzdCkgeworCQkJCQkJdGVtcCsrOworCQkJCQkJc3dpdGNoICgweDAzICYgKGxlMzJfdG9fY3B1ICgKKwkJCQkJCQlxdGQtPmh3X3Rva2VuKSA+PiA4KSkgeworCQkJCQkJY2FzZSAwOiB0eXBlID0gIm91dCI7IGNvbnRpbnVlOworCQkJCQkJY2FzZSAxOiB0eXBlID0gImluIjsgY29udGludWU7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAorCQkJCQkJIiAoJWMlZCBlcCVkJXMgIgorCQkJCQkJIlslZC8lZF0gcSVkIHAlZCkiLAorCQkJCQkJc3BlZWRfY2hhciAoc2NyYXRjaCksCisJCQkJCQlzY3JhdGNoICYgMHgwMDdmLAorCQkJCQkJKHNjcmF0Y2ggPj4gOCkgJiAweDAwMGYsIHR5cGUsCisJCQkJCQlwLnFoLT51c2VjcywgcC5xaC0+Y191c2VjcywKKwkJCQkJCXRlbXAsCisJCQkJCQkweDdmZiAmIChzY3JhdGNoID4+IDE2KSk7CisKKwkJCQkJaWYgKHNlZW5fY291bnQgPCBEQkdfU0NIRURfTElNSVQpCisJCQkJCQlzZWVuIFtzZWVuX2NvdW50KytdLnFoID0gcC5xaDsKKwkJCQl9IGVsc2UKKwkJCQkJdGVtcCA9IDA7CisJCQkJaWYgKHAucWgpIHsKKwkJCQkJdGFnID0gUV9ORVhUX1RZUEUgKHAucWgtPmh3X25leHQpOworCQkJCQlwID0gcC5xaC0+cWhfbmV4dDsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFFfVFlQRV9GU1ROOgorCQkJCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsCisJCQkJCSIgZnN0bi0lOHgvJXAiLCBwLmZzdG4tPmh3X3ByZXYsCisJCQkJCXAuZnN0bik7CisJCQkJdGFnID0gUV9ORVhUX1RZUEUgKHAuZnN0bi0+aHdfbmV4dCk7CisJCQkJcCA9IHAuZnN0bi0+ZnN0bl9uZXh0OworCQkJCWJyZWFrOworCQkJY2FzZSBRX1RZUEVfSVREOgorCQkJCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsCisJCQkJCSIgaXRkLyVwIiwgcC5pdGQpOworCQkJCXRhZyA9IFFfTkVYVF9UWVBFIChwLml0ZC0+aHdfbmV4dCk7CisJCQkJcCA9IHAuaXRkLT5pdGRfbmV4dDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUV9UWVBFX1NJVEQ6CisJCQkJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJCQkJIiBzaXRkJWQtJTA0eC8lcCIsCisJCQkJCXAuc2l0ZC0+c3RyZWFtLT5pbnRlcnZhbCwKKwkJCQkJbGUzMl90b19jcHVwICgmcC5zaXRkLT5od191ZnJhbWUpCisJCQkJCQkmIDB4MDAwMGZmZmYsCisJCQkJCXAuc2l0ZCk7CisJCQkJdGFnID0gUV9ORVhUX1RZUEUgKHAuc2l0ZC0+aHdfbmV4dCk7CisJCQkJcCA9IHAuc2l0ZC0+c2l0ZF9uZXh0OworCQkJCWJyZWFrOworCQkJfQorCQkJc2l6ZSAtPSB0ZW1wOworCQkJbmV4dCArPSB0ZW1wOworCQl9IHdoaWxlIChwLnB0cik7CisKKwkJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgIlxuIik7CisJCXNpemUgLT0gdGVtcDsKKwkJbmV4dCArPSB0ZW1wOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCWtmcmVlIChzZWVuKTsKKworCXJldHVybiBQQUdFX1NJWkUgLSBzaXplOworfQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSIChwZXJpb2RpYywgU19JUlVHTywgc2hvd19wZXJpb2RpYywgTlVMTCk7CisKKyN1bmRlZiBEQkdfU0NIRURfTElNSVQKKworc3RhdGljIHNzaXplX3QKK3Nob3dfcmVnaXN0ZXJzIChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2J1cwkJKmJ1czsKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXVuc2lnbmVkCQl0ZW1wLCBzaXplLCBpOworCWNoYXIJCQkqbmV4dCwgc2NyYXRjaCBbODBdOworCXN0YXRpYyBjaGFyCQlmbXQgW10gPSAiJSpzXG4iOworCXN0YXRpYyBjaGFyCQlsYWJlbCBbXSA9ICIiOworCisJYnVzID0gdG9fdXNiX2J1cyhjbGFzc19kZXYpOworCWhjZCA9IGJ1cy0+aGNwcml2OworCWVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKKwluZXh0ID0gYnVmOworCXNpemUgPSBQQUdFX1NJWkU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKworCWlmIChidXMtPmNvbnRyb2xsZXItPnBvd2VyLnBvd2VyX3N0YXRlKSB7CisJCXNpemUgPSBzY25wcmludGYgKG5leHQsIHNpemUsCisJCQkiYnVzICVzLCBkZXZpY2UgJXMgKGRyaXZlciAiIERSSVZFUl9WRVJTSU9OICIpXG4iCisJCQkiU1VTUEVOREVEIChubyByZWdpc3RlciBhY2Nlc3MpXG4iLAorCQkJaGNkLT5zZWxmLmNvbnRyb2xsZXItPmJ1cy0+bmFtZSwKKwkJCWhjZC0+c2VsZi5jb250cm9sbGVyLT5idXNfaWQpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogQ2FwYWJpbGl0eSBSZWdpc3RlcnMgKi8KKwlpID0gSENfVkVSU0lPTihyZWFkbCAoJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKKwl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAorCQkiYnVzICVzLCBkZXZpY2UgJXMgKGRyaXZlciAiIERSSVZFUl9WRVJTSU9OICIpXG4iCisJCSJFSENJICV4LiUwMngsIGhjZCBzdGF0ZSAlZFxuIiwKKwkJaGNkLT5zZWxmLmNvbnRyb2xsZXItPmJ1cy0+bmFtZSwKKwkJaGNkLT5zZWxmLmNvbnRyb2xsZXItPmJ1c19pZCwKKwkJaSA+PiA4LCBpICYgMHgwZmYsIGhjZC0+c3RhdGUpOworCXNpemUgLT0gdGVtcDsKKwluZXh0ICs9IHRlbXA7CisKKwkvLyBGSVhNRSBpbnRlcnByZXQgYm90aCB0eXBlcyBvZiBwYXJhbXMKKwlpID0gcmVhZGwgKCZlaGNpLT5jYXBzLT5oY3NfcGFyYW1zKTsKKwl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAic3RydWN0dXJhbCBwYXJhbXMgMHglMDh4XG4iLCBpKTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworCisJaSA9IHJlYWRsICgmZWhjaS0+Y2Fwcy0+aGNjX3BhcmFtcyk7CisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgImNhcGFiaWxpdHkgcGFyYW1zIDB4JTA4eFxuIiwgaSk7CisJc2l6ZSAtPSB0ZW1wOworCW5leHQgKz0gdGVtcDsKKworCS8qIE9wZXJhdGlvbmFsIFJlZ2lzdGVycyAqLworCXRlbXAgPSBkYmdfc3RhdHVzX2J1ZiAoc2NyYXRjaCwgc2l6ZW9mIHNjcmF0Y2gsIGxhYmVsLAorCQkJcmVhZGwgKCZlaGNpLT5yZWdzLT5zdGF0dXMpKTsKKwl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCBmbXQsIHRlbXAsIHNjcmF0Y2gpOworCXNpemUgLT0gdGVtcDsKKwluZXh0ICs9IHRlbXA7CisKKwl0ZW1wID0gZGJnX2NvbW1hbmRfYnVmIChzY3JhdGNoLCBzaXplb2Ygc2NyYXRjaCwgbGFiZWwsCisJCQlyZWFkbCAoJmVoY2ktPnJlZ3MtPmNvbW1hbmQpKTsKKwl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCBmbXQsIHRlbXAsIHNjcmF0Y2gpOworCXNpemUgLT0gdGVtcDsKKwluZXh0ICs9IHRlbXA7CisKKwl0ZW1wID0gZGJnX2ludHJfYnVmIChzY3JhdGNoLCBzaXplb2Ygc2NyYXRjaCwgbGFiZWwsCisJCQlyZWFkbCAoJmVoY2ktPnJlZ3MtPmludHJfZW5hYmxlKSk7CisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgZm10LCB0ZW1wLCBzY3JhdGNoKTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworCisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgInVmcmFtZSAlMDR4XG4iLAorCQkJcmVhZGwgKCZlaGNpLT5yZWdzLT5mcmFtZV9pbmRleCkpOworCXNpemUgLT0gdGVtcDsKKwluZXh0ICs9IHRlbXA7CisKKwlmb3IgKGkgPSAwOyBpIDwgSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOyBpKyspIHsKKwkJdGVtcCA9IGRiZ19wb3J0X2J1ZiAoc2NyYXRjaCwgc2l6ZW9mIHNjcmF0Y2gsIGxhYmVsLCBpICsgMSwKKwkJCQlyZWFkbCAoJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFtpXSkpOworCQl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCBmbXQsIHRlbXAsIHNjcmF0Y2gpOworCQlzaXplIC09IHRlbXA7CisJCW5leHQgKz0gdGVtcDsKKwl9CisKKwlpZiAoZWhjaS0+cmVjbGFpbSkgeworCQl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAicmVjbGFpbSBxaCAlcCVzXG4iLAorCQkJCWVoY2ktPnJlY2xhaW0sCisJCQkJZWhjaS0+cmVjbGFpbV9yZWFkeSA/ICIgcmVhZHkiIDogIiIpOworCQlzaXplIC09IHRlbXA7CisJCW5leHQgKz0gdGVtcDsKKwl9CisKKyNpZmRlZiBFSENJX1NUQVRTCisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJImlycSBub3JtYWwgJWxkIGVyciAlbGQgcmVjbGFpbSAlbGQgKGxvc3QgJWxkKVxuIiwKKwkJZWhjaS0+c3RhdHMubm9ybWFsLCBlaGNpLT5zdGF0cy5lcnJvciwgZWhjaS0+c3RhdHMucmVjbGFpbSwKKwkJZWhjaS0+c3RhdHMubG9zdF9pYWEpOworCXNpemUgLT0gdGVtcDsKKwluZXh0ICs9IHRlbXA7CisKKwl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAiY29tcGxldGUgJWxkIHVubGluayAlbGRcbiIsCisJCWVoY2ktPnN0YXRzLmNvbXBsZXRlLCBlaGNpLT5zdGF0cy51bmxpbmspOworCXNpemUgLT0gdGVtcDsKKwluZXh0ICs9IHRlbXA7CisjZW5kaWYKKworZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIFBBR0VfU0laRSAtIHNpemU7Cit9CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIgKHJlZ2lzdGVycywgU19JUlVHTywgc2hvd19yZWdpc3RlcnMsIE5VTEwpOworCitzdGF0aWMgaW5saW5lIHZvaWQgY3JlYXRlX2RlYnVnX2ZpbGVzIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCit7CisJc3RydWN0IGNsYXNzX2RldmljZSAqY2xkZXYgPSAmZWhjaV90b19oY2QoZWhjaSktPnNlbGYuY2xhc3NfZGV2OworCisJY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKGNsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfYXN5bmMpOworCWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShjbGRldiwgJmNsYXNzX2RldmljZV9hdHRyX3BlcmlvZGljKTsKKwljbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoY2xkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9yZWdpc3RlcnMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX2RlYnVnX2ZpbGVzIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCit7CisJc3RydWN0IGNsYXNzX2RldmljZSAqY2xkZXYgPSAmZWhjaV90b19oY2QoZWhjaSktPnNlbGYuY2xhc3NfZGV2OworCisJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKGNsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfYXN5bmMpOworCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZShjbGRldiwgJmNsYXNzX2RldmljZV9hdHRyX3BlcmlvZGljKTsKKwljbGFzc19kZXZpY2VfcmVtb3ZlX2ZpbGUoY2xkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9yZWdpc3RlcnMpOworfQorCisjZW5kaWYgLyogU1RVQl9ERUJVR19GSUxFUyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYzYmI3OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwpAQCAtMCwwICsxLDEyNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCBieSBEYXZpZCBCcm93bmVsbAorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCisJI2RlZmluZSBERUJVRworI2Vsc2UKKwkjdW5kZWYgREVCVUcKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKyNpbmNsdWRlICIuLi9jb3JlL2hjZC5oIgorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBFSENJIGhjX2RyaXZlciBpbXBsZW1lbnRhdGlvbiAuLi4gZXhwZXJpbWVudGFsLCBpbmNvbXBsZXRlLgorICogQmFzZWQgb24gdGhlIGZpbmFsIDEuMCByZWdpc3RlciBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbi4KKyAqCisgKiBVU0IgMi4wIHNob3dzIHVwIGluIHVwY29taW5nIHd3dy5wY21jaWEub3JnIHRlY2hub2xvZ3kuCisgKiBGaXJzdCB3YXMgUENNQ0lBLCBsaWtlIElTQTsgdGhlbiBDYXJkQnVzLCB3aGljaCBpcyBQQ0kuCisgKiBOZXh0IGNvbWVzICJDYXJkQmF5IiwgdXNpbmcgVVNCIDIuMCBzaWduYWxzLgorICoKKyAqIENvbnRhaW5zIGFkZGl0aW9uYWwgY29udHJpYnV0aW9ucyBieSBCcmFkIEhhcmRzLCBSb3J5IEJvbHQsIGFuZCBvdGhlcnMuCisgKiBTcGVjaWFsIHRoYW5rcyB0byBJbnRlbCBhbmQgVklBIGZvciBwcm92aWRpbmcgaG9zdCBjb250cm9sbGVycyB0bworICogdGVzdCB0aGlzIGRyaXZlciBvbiwgYW5kIEN5cHJlc3MgKGluY2x1ZGluZyBJbi1TeXN0ZW0gRGVzaWduKSBmb3IKKyAqIHByb3ZpZGluZyBlYXJseSBkZXZpY2VzIGZvciB0aG9zZSBob3N0IGNvbnRyb2xsZXJzIHRvIHRhbGsgdG8hCisgKgorICogSElTVE9SWToKKyAqCisgKiAyMDA0LTA1LTEwIFJvb3QgaHViIGFuZCBQQ0kgc3VzcGVuZC9yZXN1bWUgc3VwcG9ydDsgcmVtb3RlIHdha2V1cC4gKGRiKQorICogMjAwNC0wMi0yNCBSZXBsYWNlIHBjaV8qIHdpdGggZ2VuZXJpYyBkbWFfKiBBUEkgY2FsbHMgKGRzYXhlbmFAcGxleGl0eS5uZXQpCisgKiAyMDAzLTEyLTI5IFJld3JpdHRlbiBoaWdoIHNwZWVkIGlzbyB0cmFuc2ZlciBzdXBwb3J0IChieSBNaWNoYWwgU29qa2EsCisgKgk8c29qa2FtQGNlbnRydW0uY3o+LCB1cGRhdGVzIGJ5IERCKS4KKyAqCisgKiAyMDAyLTExLTI5CUNvcnJlY3QgaGFuZGxpbmcgZm9yIGh3IGFzeW5jX25leHQgcmVnaXN0ZXIuCisgKiAyMDAyLTA4LTA2CUhhbmRsaW5nIGZvciBidWxrIGFuZCBpbnRlcnJ1cHQgdHJhbnNmZXJzIGlzIG1vc3RseSBzaGFyZWQ7CisgKglvbmx5IHNjaGVkdWxpbmcgaXMgZGlmZmVyZW50LCBubyBhcmJpdHJhcnkgbGltaXRhdGlvbnMuCisgKiAyMDAyLTA3LTI1CVNhbml0eSBjaGVjayBQQ0kgcmVhZHMsIG1vc3RseSBmb3IgYmV0dGVyIGNhcmRidXMgc3VwcG9ydCwKKyAqIAljbGVhbiB1cCBIQyBydW4gc3RhdGUgaGFuZHNoYWtpbmcuCisgKiAyMDAyLTA1LTI0CVByZWxpbWluYXJ5IEZTL0xTIGludGVycnVwdHMsIHVzaW5nIHNjaGVkdWxpbmcgc2hvcnRjdXRzCisgKiAyMDAyLTA1LTExCUNsZWFyIFRUIGVycm9ycyBmb3IgRlMvTFMgY3RybC9idWxrLiAgRmlsbCBpbiBzb21lIG90aGVyCisgKgltaXNzaW5nIHBpZWNlczogIGVuYWJsaW5nIDY0Yml0IGRtYSwgaGFuZG9mZiBmcm9tIEJJT1MvU01NLgorICogMjAwMi0wNS0wNwlTb21lIGVycm9yIHBhdGggY2xlYW51cHMgdG8gcmVwb3J0IGJldHRlciBlcnJvcnM7IHdtYigpOworICoJdXNlIG5vbi1DVlMgdmVyc2lvbiBpZDsgYmV0dGVyIGlzbyBiYW5kd2lkdGggY2xhaW0uCisgKiAyMDAyLTA0LTE5CUNvbnRyb2wvYnVsay9pbnRlcnJ1cHQgc3VibWl0IG5vIGxvbmdlciB1c2VzIGdpdmViYWNrKCkgb24KKyAqCWVycm9ycyBpbiBzdWJtaXQgcGF0aC4gIEJ1Z2ZpeGVzIHRvIGludGVycnVwdCBzY2hlZHVsaW5nL3Byb2Nlc3NpbmcuCisgKiAyMDAyLTAzLTA1CUluaXRpYWwgaGlnaC1zcGVlZCBJU08gc3VwcG9ydDsgcmVkdWNlIElURCBtZW1vcnk7IHNoaWZ0CisgKgltb3JlIGNoZWNraW5nIHRvIGdlbmVyaWMgaGNkIGZyYW1ld29yayAoZGIpLiAgTWFrZSBpdCB3b3JrIHdpdGgKKyAqCVBoaWxpcHMgRUhDSTsgcmVkdWNlIFBDSSB0cmFmZmljOyBzaG9ydGVuIElSUSBwYXRoIChSb3J5IEJvbHQpLgorICogMjAwMi0wMS0xNAlNaW5vciBjbGVhbnVwOyB2ZXJzaW9uIHN5bmNoLgorICogMjAwMi0wMS0wOAlGaXggcm9vdGh1YiBoYW5kb2ZmIG9mIEZTL0xTIHRvIGNvbXBhbmlvbiBjb250cm9sbGVycy4KKyAqIDIwMDItMDEtMDQJQ29udHJvbC9CdWxrIHF1ZXVpbmcgYmVoYXZlcy4KKyAqCisgKiAyMDAxLTEyLTEyCUluaXRpYWwgcGF0Y2ggdmVyc2lvbiBmb3IgTGludXggMi41LjEga2VybmVsLgorICogMjAwMS1KdW5lCVdvcmtzIHdpdGggdXNiLXN0b3JhZ2UgYW5kIE5FQyBFSENJIG9uIDIuNAorICovCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEwIERlYyAyMDA0IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJEYXZpZCBCcm93bmVsbCIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiAyLjAgJ0VuaGFuY2VkJyBIb3N0IENvbnRyb2xsZXIgKEVIQ0kpIERyaXZlciIKKworc3RhdGljIGNvbnN0IGNoYXIJaGNkX25hbWUgW10gPSAiZWhjaV9oY2QiOworCisKKyN1bmRlZiBFSENJX1ZFUkJPU0VfREVCVUcKKyN1bmRlZiBFSENJX1VSQl9UUkFDRQorCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgRUhDSV9TVEFUUworI2VuZGlmCisKKy8qIG1hZ2ljIG51bWJlcnMgdGhhdCBjYW4gYWZmZWN0IHN5c3RlbSBwZXJmb3JtYW5jZSAqLworI2RlZmluZQlFSENJX1RVTkVfQ0VSUgkJMwkvKiAwLTMgcXRkIHJldHJpZXM7IDAgPT0gZG9uJ3Qgc3RvcCAqLworI2RlZmluZQlFSENJX1RVTkVfUkxfSFMJCTQJLyogbmFrIHRocm90dGxlOyBzZWUgNC45ICovCisjZGVmaW5lCUVIQ0lfVFVORV9STF9UVAkJMAorI2RlZmluZQlFSENJX1RVTkVfTVVMVF9IUwkxCS8qIDEtMyB0cmFuc2FjdGlvbnMvdWZyYW1lOyA0LjEwLjMgKi8KKyNkZWZpbmUJRUhDSV9UVU5FX01VTFRfVFQJMQorI2RlZmluZQlFSENJX1RVTkVfRkxTCQkyCS8qIChzbWFsbCkgMjU2IGZyYW1lIHNjaGVkdWxlICovCisKKyNkZWZpbmUgRUhDSV9JQUFfSklGRklFUwkoSFovMTAwKQkvKiBhcmJpdHJhcnk7IH4xMCBtc2VjICovCisjZGVmaW5lIEVIQ0lfSU9fSklGRklFUwkJKEhaLzEwKQkJLyogaW8gd2F0Y2hkb2cgPiBpcnFfdGhyZXNoICovCisjZGVmaW5lIEVIQ0lfQVNZTkNfSklGRklFUwkoSFovMjApCQkvKiBhc3luYyBpZGxlIHRpbWVvdXQgKi8KKyNkZWZpbmUgRUhDSV9TSFJJTktfSklGRklFUwkoSFovMjAwKQkvKiBhc3luYyBxaCB1bmxpbmsgZGVsYXkgKi8KKworLyogSW5pdGlhbCBJUlEgbGF0ZW5jeTogIGZhc3RlciB0aGFuIGh3IGRlZmF1bHQgKi8KK3N0YXRpYyBpbnQgbG9nMl9pcnFfdGhyZXNoID0gMDsJCS8vIDAgdG8gNgorbW9kdWxlX3BhcmFtIChsb2cyX2lycV90aHJlc2gsIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDIChsb2cyX2lycV90aHJlc2gsICJsb2cyIElSUSBsYXRlbmN5LCAxLTY0IG1pY3JvZnJhbWVzIik7CisKKy8qIGluaXRpYWwgcGFyayBzZXR0aW5nOiAgc2xvd2VyIHRoYW4gaHcgZGVmYXVsdCAqLworc3RhdGljIHVuc2lnbmVkIHBhcmsgPSAwOworbW9kdWxlX3BhcmFtIChwYXJrLCB1aW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MgKHBhcmssICJwYXJrIHNldHRpbmc7IDEtMyBiYWNrLXRvLWJhY2sgYXN5bmMgcGFja2V0cyIpOworCisjZGVmaW5lCUlOVFJfTUFTSyAoU1RTX0lBQSB8IFNUU19GQVRBTCB8IFNUU19QQ0QgfCBTVFNfRVJSIHwgU1RTX0lOVCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2luY2x1ZGUgImVoY2kuaCIKKyNpbmNsdWRlICJlaGNpLWRiZy5jIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogaGFuZHNoYWtlIC0gc3BpbiByZWFkaW5nIGhjIHVudGlsIGhhbmRzaGFrZSBjb21wbGV0ZXMgb3IgZmFpbHMKKyAqIEBwdHI6IGFkZHJlc3Mgb2YgaGMgcmVnaXN0ZXIgdG8gYmUgcmVhZAorICogQG1hc2s6IGJpdHMgdG8gbG9vayBhdCBpbiByZXN1bHQgb2YgcmVhZAorICogQGRvbmU6IHZhbHVlIG9mIHRob3NlIGJpdHMgd2hlbiBoYW5kc2hha2Ugc3VjY2VlZHMKKyAqIEB1c2VjOiB0aW1lb3V0IGluIG1pY3Jvc2Vjb25kcworICoKKyAqIFJldHVybnMgbmVnYXRpdmUgZXJybm8sIG9yIHplcm8gb24gc3VjY2VzcworICoKKyAqIFN1Y2Nlc3MgaGFwcGVucyB3aGVuIHRoZSAibWFzayIgYml0cyBoYXZlIHRoZSBzcGVjaWZpZWQgdmFsdWUgKGhhcmR3YXJlCisgKiBoYW5kc2hha2UgZG9uZSkuICBUaGVyZSBhcmUgdHdvIGZhaWx1cmUgbW9kZXM6ICAidXNlYyIgaGF2ZSBwYXNzZWQgKG1ham9yCisgKiBoYXJkd2FyZSBmbGFrZW91dCksIG9yIHRoZSByZWdpc3RlciByZWFkcyBhcyBhbGwtb25lcyAoaGFyZHdhcmUgcmVtb3ZlZCkuCisgKgorICogVGhhdCBsYXN0IGZhaWx1cmUgc2hvdWxkX29ubHkgaGFwcGVuIGluIGNhc2VzIGxpa2UgcGh5c2ljYWwgY2FyZGJ1cyBlamVjdAorICogYmVmb3JlIGRyaXZlciBzaHV0ZG93bi4gQnV0IGl0IGFsc28gc2VlbXMgdG8gYmUgY2F1c2VkIGJ5IGJ1Z3MgaW4gY2FyZGJ1cworICogYnJpZGdlIHNodXRkb3duOiAgc2h1dHRpbmcgZG93biB0aGUgYnJpZGdlIGJlZm9yZSB0aGUgZGV2aWNlcyB1c2luZyBpdC4KKyAqLworc3RhdGljIGludCBoYW5kc2hha2UgKHZvaWQgX19pb21lbSAqcHRyLCB1MzIgbWFzaywgdTMyIGRvbmUsIGludCB1c2VjKQoreworCXUzMglyZXN1bHQ7CisKKwlkbyB7CisJCXJlc3VsdCA9IHJlYWRsIChwdHIpOworCQlpZiAocmVzdWx0ID09IH4odTMyKTApCQkvKiBjYXJkIHJlbW92ZWQgKi8KKwkJCXJldHVybiAtRU5PREVWOworCQlyZXN1bHQgJj0gbWFzazsKKwkJaWYgKHJlc3VsdCA9PSBkb25lKQorCQkJcmV0dXJuIDA7CisJCXVkZWxheSAoMSk7CisJCXVzZWMtLTsKKwl9IHdoaWxlICh1c2VjID4gMCk7CisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKKy8qIGZvcmNlIEhDIHRvIGhhbHQgc3RhdGUgZnJvbSB1bmtub3duIChFSENJIHNwZWMgc2VjdGlvbiAyLjMpICovCitzdGF0aWMgaW50IGVoY2lfaGFsdCAoc3RydWN0IGVoY2lfaGNkICplaGNpKQoreworCXUzMgl0ZW1wID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5zdGF0dXMpOworCisJaWYgKCh0ZW1wICYgU1RTX0hBTFQpICE9IDApCisJCXJldHVybiAwOworCisJdGVtcCA9IHJlYWRsICgmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJdGVtcCAmPSB+Q01EX1JVTjsKKwl3cml0ZWwgKHRlbXAsICZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKwlyZXR1cm4gaGFuZHNoYWtlICgmZWhjaS0+cmVncy0+c3RhdHVzLCBTVFNfSEFMVCwgU1RTX0hBTFQsIDE2ICogMTI1KTsKK30KKworLyogcHV0IFRESS9BUkMgc2lsaWNvbiBpbnRvIEVIQ0kgbW9kZSAqLworc3RhdGljIHZvaWQgdGRpX3Jlc2V0IChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCit7CisJdTMyIF9faW9tZW0JKnJlZ19wdHI7CisJdTMyCQl0bXA7CisKKwlyZWdfcHRyID0gKHUzMiBfX2lvbWVtICopKCgodTggX19pb21lbSAqKWVoY2ktPnJlZ3MpICsgMHg2OCk7CisJdG1wID0gcmVhZGwgKHJlZ19wdHIpOworCXRtcCB8PSAweDM7CisJd3JpdGVsICh0bXAsIHJlZ19wdHIpOworfQorCisvKiByZXNldCBhIG5vbi1ydW5uaW5nIChTVFNfSEFMVCA9PSAxKSBjb250cm9sbGVyICovCitzdGF0aWMgaW50IGVoY2lfcmVzZXQgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSkKK3sKKwlpbnQJcmV0dmFsOworCXUzMgljb21tYW5kID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKworCWNvbW1hbmQgfD0gQ01EX1JFU0VUOworCWRiZ19jbWQgKGVoY2ksICJyZXNldCIsIGNvbW1hbmQpOworCXdyaXRlbCAoY29tbWFuZCwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOworCWVoY2lfdG9faGNkKGVoY2kpLT5zdGF0ZSA9IEhDX1NUQVRFX0hBTFQ7CisJZWhjaS0+bmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXM7CisJcmV0dmFsID0gaGFuZHNoYWtlICgmZWhjaS0+cmVncy0+Y29tbWFuZCwgQ01EX1JFU0VULCAwLCAyNTAgKiAxMDAwKTsKKworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAoZWhjaV9pc19UREkoZWhjaSkpCisJCXRkaV9yZXNldCAoZWhjaSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBpZGxlIHRoZSBjb250cm9sbGVyIChmcm9tIHJ1bm5pbmcpICovCitzdGF0aWMgdm9pZCBlaGNpX3F1aWVzY2UgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSkKK3sKKwl1MzIJdGVtcDsKKworI2lmZGVmIERFQlVHCisJaWYgKCFIQ19JU19SVU5OSU5HIChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpKQorCQlCVUcgKCk7CisjZW5kaWYKKworCS8qIHdhaXQgZm9yIGFueSBzY2hlZHVsZSBlbmFibGVzL2Rpc2FibGVzIHRvIHRha2UgZWZmZWN0ICovCisJdGVtcCA9IHJlYWRsICgmZWhjaS0+cmVncy0+Y29tbWFuZCkgPDwgMTA7CisJdGVtcCAmPSBTVFNfQVNTIHwgU1RTX1BTUzsKKwlpZiAoaGFuZHNoYWtlICgmZWhjaS0+cmVncy0+c3RhdHVzLCBTVFNfQVNTIHwgU1RTX1BTUywKKwkJCQl0ZW1wLCAxNiAqIDEyNSkgIT0gMCkgeworCQllaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUgPSBIQ19TVEFURV9IQUxUOworCQlyZXR1cm47CisJfQorCisJLyogdGhlbiBkaXNhYmxlIGFueXRoaW5nIHRoYXQncyBzdGlsbCBhY3RpdmUgKi8KKwl0ZW1wID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKwl0ZW1wICY9IH4oQ01EX0FTRSB8IENNRF9JQUFEIHwgQ01EX1BTRSk7CisJd3JpdGVsICh0ZW1wLCAmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisKKwkvKiBoYXJkd2FyZSBjYW4gdGFrZSAxNiBtaWNyb2ZyYW1lcyB0byB0dXJuIG9mZiAuLi4gKi8KKwlpZiAoaGFuZHNoYWtlICgmZWhjaS0+cmVncy0+c3RhdHVzLCBTVFNfQVNTIHwgU1RTX1BTUywKKwkJCQkwLCAxNiAqIDEyNSkgIT0gMCkgeworCQllaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUgPSBIQ19TVEFURV9IQUxUOworCQlyZXR1cm47CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBlaGNpX3dvcmsoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKyNpbmNsdWRlICJlaGNpLWh1Yi5jIgorI2luY2x1ZGUgImVoY2ktbWVtLmMiCisjaW5jbHVkZSAiZWhjaS1xLmMiCisjaW5jbHVkZSAiZWhjaS1zY2hlZC5jIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBlaGNpX3dhdGNoZG9nICh1bnNpZ25lZCBsb25nIHBhcmFtKQoreworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2kgPSAoc3RydWN0IGVoY2lfaGNkICopIHBhcmFtOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisKKwkvKiBsb3N0IElBQSBpcnFzIHdlZGdlIHRoaW5ncyBiYWRseTsgc2VlbiB3aXRoIGEgdnQ4MjM1ICovCisJaWYgKGVoY2ktPnJlY2xhaW0pIHsKKwkJdTMyCQlzdGF0dXMgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPnN0YXR1cyk7CisKKwkJaWYgKHN0YXR1cyAmIFNUU19JQUEpIHsKKwkJCWVoY2lfdmRiZyAoZWhjaSwgImxvc3QgSUFBXG4iKTsKKwkJCUNPVU5UIChlaGNpLT5zdGF0cy5sb3N0X2lhYSk7CisJCQl3cml0ZWwgKFNUU19JQUEsICZlaGNpLT5yZWdzLT5zdGF0dXMpOworCQkJZWhjaS0+cmVjbGFpbV9yZWFkeSA9IDE7CisJCX0KKwl9CisKKyAJLyogc3RvcCBhc3luYyBwcm9jZXNzaW5nIGFmdGVyIGl0J3MgaWRsZWQgYSBiaXQgKi8KKwlpZiAodGVzdF9iaXQgKFRJTUVSX0FTWU5DX09GRiwgJmVoY2ktPmFjdGlvbnMpKQorIAkJc3RhcnRfdW5saW5rX2FzeW5jIChlaGNpLCBlaGNpLT5hc3luYyk7CisKKwkvKiBlaGNpIGNvdWxkIHJ1biBieSB0aW1lciwgd2l0aG91dCBJUlFzIC4uLiAqLworCWVoY2lfd29yayAoZWhjaSwgTlVMTCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworfQorCisjaWZkZWYJQ09ORklHX1BDSQorCisvKiBFSENJIDAuOTYgKGFuZCBsYXRlcikgc2VjdGlvbiA1LjEgc2F5cyBob3cgdG8ga2ljayBCSU9TL1NNTS8uLi4KKyAqIG9mZiB0aGUgY29udHJvbGxlciAobWF5YmUgaXQgY2FuIGJvb3QgZnJvbSBoaWdoc3BlZWQgVVNCIGRpc2tzKS4KKyAqLworc3RhdGljIGludCBiaW9zX2hhbmRvZmYgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgaW50IHdoZXJlLCB1MzIgY2FwKQoreworCWlmIChjYXAgJiAoMSA8PCAxNikpIHsKKwkJaW50IG1zZWMgPSA1MDAwOworCQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9CisJCQkJdG9fcGNpX2RldihlaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5jb250cm9sbGVyKTsKKworCQkvKiByZXF1ZXN0IGhhbmRvZmYgdG8gT1MgKi8KKwkJY2FwIHw9IDEgPDwgMjQ7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgd2hlcmUsIGNhcCk7CisKKwkJLyogYW5kIHdhaXQgYSB3aGlsZSBmb3IgaXQgdG8gaGFwcGVuICovCisJCWRvIHsKKwkJCW1zbGVlcCgxMCk7CisJCQltc2VjIC09IDEwOworCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHdoZXJlLCAmY2FwKTsKKwkJfSB3aGlsZSAoKGNhcCAmICgxIDw8IDE2KSkgJiYgbXNlYyk7CisJCWlmIChjYXAgJiAoMSA8PCAxNikpIHsKKwkJCWVoY2lfZXJyIChlaGNpLCAiQklPUyBoYW5kb2ZmIGZhaWxlZCAoJWQsICUwNHgpXG4iLAorCQkJCXdoZXJlLCBjYXApOworCQkJLy8gc29tZSBCSU9TIHZlcnNpb25zIHNlZW0gYnVnZ3kuLi4KKwkJCS8vIHJldHVybiAxOworCQkJZWhjaV93YXJuIChlaGNpLCAiY29udGludWluZyBhZnRlciBCSU9TIGJ1Zy4uLlxuIik7CisJCQlyZXR1cm4gMDsKKwkJfSAKKwkJZWhjaV9kYmcgKGVoY2ksICJCSU9TIGhhbmRvZmYgc3VjY2VlZGVkXG4iKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW50CitlaGNpX3JlYm9vdCAoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGNvZGUsIHZvaWQgKm51bGwpCit7CisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaTsKKworCWVoY2kgPSBjb250YWluZXJfb2YgKHNlbGYsIHN0cnVjdCBlaGNpX2hjZCwgcmVib290X25vdGlmaWVyKTsKKworCS8qIG1ha2UgQklPUy9ldGMgdXNlIGNvbXBhbmlvbiBjb250cm9sbGVyIGR1cmluZyByZWJvb3QgKi8KKwl3cml0ZWwgKDAsICZlaGNpLT5yZWdzLT5jb25maWd1cmVkX2ZsYWcpOworCXJldHVybiAwOworfQorCisKKy8qIGNhbGxlZCBieSBraHViZCBvciByb290IGh1YiBpbml0IHRocmVhZHMgKi8KKworc3RhdGljIGludCBlaGNpX2hjX3Jlc2V0IChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKKwl1MzIJCQl0ZW1wOworCXVuc2lnbmVkCQljb3VudCA9IDI1Ni80OworCisJc3Bpbl9sb2NrX2luaXQgKCZlaGNpLT5sb2NrKTsKKworCWVoY2ktPmNhcHMgPSBoY2QtPnJlZ3M7CisJZWhjaS0+cmVncyA9IGhjZC0+cmVncyArIEhDX0xFTkdUSCAocmVhZGwgKCZlaGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CisJZGJnX2hjc19wYXJhbXMgKGVoY2ksICJyZXNldCIpOworCWRiZ19oY2NfcGFyYW1zIChlaGNpLCAicmVzZXQiKTsKKworI2lmZGVmCUNPTkZJR19QQ0kKKwkvKiBFSENJIDAuOTYgYW5kIGxhdGVyIG1heSBoYXZlICJleHRlbmRlZCBjYXBhYmlsaXRpZXMiICovCisJaWYgKGhjZC0+c2VsZi5jb250cm9sbGVyLT5idXMgPT0gJnBjaV9idXNfdHlwZSkgeworCQlzdHJ1Y3QgcGNpX2RldgkqcGRldiA9IHRvX3BjaV9kZXYoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOworCisJCXN3aXRjaCAocGRldi0+dmVuZG9yKSB7CisJCWNhc2UgUENJX1ZFTkRPUl9JRF9UREk6CisJCQlpZiAocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfVERJX0VIQ0kpIHsKKwkJCQllaGNpLT5pc190ZGlfcmhfdHQgPSAxOworCQkJCXRkaV9yZXNldCAoZWhjaSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBQQ0lfVkVORE9SX0lEX0FNRDoKKwkJCS8qIEFNRDgxMTEgRUhDSSBkb2Vzbid0IHdvcmssIGFjY29yZGluZyB0byBBTUQgZXJyYXRhICovCisJCQlpZiAocGRldi0+ZGV2aWNlID09IDB4NzQ2MykgeworCQkJCWVoY2lfaW5mbyAoZWhjaSwgImlnbm9yaW5nIEFNRDgxMTEgKGVycmF0YSlcbiIpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQl0ZW1wID0gSENDX0VYVF9DQVBTIChyZWFkbCAoJmVoY2ktPmNhcHMtPmhjY19wYXJhbXMpKTsKKwl9IGVsc2UKKwkJdGVtcCA9IDA7CisJd2hpbGUgKHRlbXAgJiYgY291bnQtLSkgeworCQl1MzIJCWNhcDsKKworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQgKHRvX3BjaV9kZXYoaGNkLT5zZWxmLmNvbnRyb2xsZXIpLAorCQkJCXRlbXAsICZjYXApOworCQllaGNpX2RiZyAoZWhjaSwgImNhcGFiaWxpdHkgJTA0eCBhdCAlMDJ4XG4iLCBjYXAsIHRlbXApOworCQlzd2l0Y2ggKGNhcCAmIDB4ZmYpIHsKKwkJY2FzZSAxOgkJCS8qIEJJT1MvU01NLy4uLiBoYW5kb2ZmICovCisJCQlpZiAoYmlvc19oYW5kb2ZmIChlaGNpLCB0ZW1wLCBjYXApICE9IDApCisJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQkJYnJlYWs7CisJCWNhc2UgMDoJCQkvKiBpbGxlZ2FsIHJlc2VydmVkIGNhcGFiaWxpdHkgKi8KKwkJCWVoY2lfd2FybiAoZWhjaSwgImlsbGVnYWwgY2FwYWJpbGl0eSFcbiIpOworCQkJY2FwID0gMDsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJCWRlZmF1bHQ6CQkvKiB1bmtub3duICovCisJCQlicmVhazsKKwkJfQorCQl0ZW1wID0gKGNhcCA+PiA4KSAmIDB4ZmY7CisJfQorCWlmICghY291bnQpIHsKKwkJZWhjaV9lcnIgKGVoY2ksICJib2d1cyBjYXBhYmlsaXRpZXMgLi4uIFBDSSBwcm9ibGVtcyFcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJaWYgKGVoY2lfaXNfVERJKGVoY2kpKQorCQllaGNpX3Jlc2V0IChlaGNpKTsKKyNlbmRpZgorCisJLyogY2FjaGUgdGhpcyByZWFkb25seSBkYXRhOyBtaW5pbWl6ZSBQQ0kgcmVhZHMgKi8KKwllaGNpLT5oY3NfcGFyYW1zID0gcmVhZGwgKCZlaGNpLT5jYXBzLT5oY3NfcGFyYW1zKTsKKworCS8qIGF0IGxlYXN0IHRoZSBHZW5lc3lzIEdMODgwUyBuZWVkcyBmaXh1cCBoZXJlICovCisJdGVtcCA9IEhDU19OX0NDKGVoY2ktPmhjc19wYXJhbXMpICogSENTX05fUENDKGVoY2ktPmhjc19wYXJhbXMpOworCXRlbXAgJj0gMHgwZjsKKwlpZiAodGVtcCAmJiBIQ1NfTl9QT1JUUyhlaGNpLT5oY3NfcGFyYW1zKSA+IHRlbXApIHsKKwkJZWhjaV9kYmcgKGVoY2ksICJib2d1cyBwb3J0IGNvbmZpZ3VyYXRpb246ICIKKwkJCSJjYz0lZCB4IHBjYz0lZCA8IHBvcnRzPSVkXG4iLAorCQkJSENTX05fQ0MoZWhjaS0+aGNzX3BhcmFtcyksCisJCQlIQ1NfTl9QQ0MoZWhjaS0+aGNzX3BhcmFtcyksCisJCQlIQ1NfTl9QT1JUUyhlaGNpLT5oY3NfcGFyYW1zKSk7CisKKyNpZmRlZglDT05GSUdfUENJCisJCWlmIChoY2QtPnNlbGYuY29udHJvbGxlci0+YnVzID09ICZwY2lfYnVzX3R5cGUpIHsKKwkJCXN0cnVjdCBwY2lfZGV2CSpwZGV2OworCisJCQlwZGV2ID0gdG9fcGNpX2RldihoY2QtPnNlbGYuY29udHJvbGxlcik7CisJCQlzd2l0Y2ggKHBkZXYtPnZlbmRvcikgeworCQkJY2FzZSAweDE3YTA6CQkvKiBHRU5FU1lTICovCisJCQkJLyogR0w4ODBTOiBzaG91bGQgYmUgUE9SVFM9MiAqLworCQkJCXRlbXAgfD0gKGVoY2ktPmhjc19wYXJhbXMgJiB+MHhmKTsKKwkJCQllaGNpLT5oY3NfcGFyYW1zID0gdGVtcDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUENJX1ZFTkRPUl9JRF9OVklESUE6CisJCQkJLyogTkY0OiBzaG91bGQgYmUgUENDPTEwICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKyNlbmRpZgorCX0KKworCS8qIGZvcmNlIEhDIHRvIGhhbHQgc3RhdGUgKi8KKwlyZXR1cm4gZWhjaV9oYWx0IChlaGNpKTsKK30KKworc3RhdGljIGludCBlaGNpX3N0YXJ0IChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKKwl1MzIJCQl0ZW1wOworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OworCXN0cnVjdCB1c2JfYnVzCQkqYnVzOworCWludAkJCXJldHZhbDsKKwl1MzIJCQloY2NfcGFyYW1zOworCXU4ICAgICAgICAgICAgICAgICAgICAgIHNicm4gPSAwOworCWludAkJCWZpcnN0OworCisJLyogc2tpcCBzb21lIHRoaW5ncyBvbiByZXN0YXJ0IHBhdGhzICovCisJZmlyc3QgPSAoZWhjaS0+d2F0Y2hkb2cuZGF0YSA9PSAwKTsKKwlpZiAoZmlyc3QpIHsKKwkJaW5pdF90aW1lciAoJmVoY2ktPndhdGNoZG9nKTsKKwkJZWhjaS0+d2F0Y2hkb2cuZnVuY3Rpb24gPSBlaGNpX3dhdGNoZG9nOworCQllaGNpLT53YXRjaGRvZy5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGVoY2k7CisJfQorCisJLyoKKwkgKiBodyBkZWZhdWx0OiAxSyBwZXJpb2RpYyBsaXN0IGhlYWRzLCBvbmUgcGVyIGZyYW1lLgorCSAqIHBlcmlvZGljX3NpemUgY2FuIHNocmluayBieSBVU0JDTUQgdXBkYXRlIGlmIGhjY19wYXJhbXMgYWxsb3dzLgorCSAqLworCWVoY2ktPnBlcmlvZGljX3NpemUgPSBERUZBVUxUX0lfVERQUzsKKwlpZiAoZmlyc3QgJiYgKHJldHZhbCA9IGVoY2lfbWVtX2luaXQgKGVoY2ksIEdGUF9LRVJORUwpKSA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwkvKiBjb250cm9sbGVycyBtYXkgY2FjaGUgc29tZSBvZiB0aGUgcGVyaW9kaWMgc2NoZWR1bGUgLi4uICovCisJaGNjX3BhcmFtcyA9IHJlYWRsICgmZWhjaS0+Y2Fwcy0+aGNjX3BhcmFtcyk7CisJaWYgKEhDQ19JU09DX0NBQ0hFIChoY2NfcGFyYW1zKSkgCS8vIGZ1bGwgZnJhbWUgY2FjaGUKKwkJZWhjaS0+aV90aHJlc2ggPSA4OworCWVsc2UJCQkJCS8vIE4gbWljcm9mcmFtZXMgY2FjaGVkCisJCWVoY2ktPmlfdGhyZXNoID0gMiArIEhDQ19JU09DX1RIUkVTIChoY2NfcGFyYW1zKTsKKworCWVoY2ktPnJlY2xhaW0gPSBOVUxMOworCWVoY2ktPnJlY2xhaW1fcmVhZHkgPSAwOworCWVoY2ktPm5leHRfdWZyYW1lID0gLTE7CisKKwkvKiBjb250cm9sbGVyIHN0YXRlOiAgdW5rbm93biAtLT4gcmVzZXQgKi8KKworCS8qIEVIQ0kgc3BlYyBzZWN0aW9uIDQuMSAqLworCWlmICgocmV0dmFsID0gZWhjaV9yZXNldCAoZWhjaSkpICE9IDApIHsKKwkJZWhjaV9tZW1fY2xlYW51cCAoZWhjaSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCXdyaXRlbCAoZWhjaS0+cGVyaW9kaWNfZG1hLCAmZWhjaS0+cmVncy0+ZnJhbWVfbGlzdCk7CisKKyNpZmRlZglDT05GSUdfUENJCisJaWYgKGhjZC0+c2VsZi5jb250cm9sbGVyLT5idXMgPT0gJnBjaV9idXNfdHlwZSkgeworCQlzdHJ1Y3QgcGNpX2RldgkJKnBkZXY7CisJCXUxNgkJCXBvcnRfd2FrZTsKKworCQlwZGV2ID0gdG9fcGNpX2RldihoY2QtPnNlbGYuY29udHJvbGxlcik7CisKKwkJLyogU2VyaWFsIEJ1cyBSZWxlYXNlIE51bWJlciBpcyBhdCBQQ0kgMHg2MCBvZmZzZXQgKi8KKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgMHg2MCwgJnNicm4pOworCisJCS8qIHBvcnQgd2FrZSBjYXBhYmlsaXR5LCByZXBvcnRlZCBieSBib290IGZpcm13YXJlICovCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIDB4NjIsICZwb3J0X3dha2UpOworCQloY2QtPmNhbl93YWtldXAgPSAocG9ydF93YWtlICYgMSkgIT0gMDsKKworCQkvKiBoZWxwIGhjIGRtYSB3b3JrIHdlbGwgd2l0aCBjYWNoZWxpbmVzICovCisJCXBjaV9zZXRfbXdpIChwZGV2KTsKKwl9CisjZW5kaWYKKworCS8qCisJICogZGVkaWNhdGUgYSBxaCBmb3IgdGhlIGFzeW5jIHJpbmcgaGVhZCwgc2luY2Ugd2UgY291bGRuJ3QgdW5saW5rCisJICogYSAncmVhbCcgcWggd2l0aG91dCBzdG9wcGluZyB0aGUgYXN5bmMgc2NoZWR1bGUgWzQuOF0uICB1c2UgaXQKKwkgKiBhcyB0aGUgJ3JlY2xhbWF0aW9uIGxpc3QgaGVhZCcgdG9vLgorCSAqIGl0cyBkdW1teSBpcyB1c2VkIGluIGh3X2FsdF9uZXh0IG9mIG1hbnkgdGRzLCB0byBwcmV2ZW50IHRoZSBxaAorCSAqIGZyb20gYXV0b21hdGljYWxseSBhZHZhbmNpbmcgdG8gdGhlIG5leHQgdGQgYWZ0ZXIgc2hvcnQgcmVhZHMuCisJICovCisJaWYgKGZpcnN0KSB7CisJCWVoY2ktPmFzeW5jLT5xaF9uZXh0LnFoID0gTlVMTDsKKwkJZWhjaS0+YXN5bmMtPmh3X25leHQgPSBRSF9ORVhUIChlaGNpLT5hc3luYy0+cWhfZG1hKTsKKwkJZWhjaS0+YXN5bmMtPmh3X2luZm8xID0gY3B1X3RvX2xlMzIgKFFIX0hFQUQpOworCQllaGNpLT5hc3luYy0+aHdfdG9rZW4gPSBjcHVfdG9fbGUzMiAoUVREX1NUU19IQUxUKTsKKwkJZWhjaS0+YXN5bmMtPmh3X3F0ZF9uZXh0ID0gRUhDSV9MSVNUX0VORDsKKwkJZWhjaS0+YXN5bmMtPnFoX3N0YXRlID0gUUhfU1RBVEVfTElOS0VEOworCQllaGNpLT5hc3luYy0+aHdfYWx0X25leHQgPSBRVERfTkVYVCAoZWhjaS0+YXN5bmMtPmR1bW15LT5xdGRfZG1hKTsKKwl9CisJd3JpdGVsICgodTMyKWVoY2ktPmFzeW5jLT5xaF9kbWEsICZlaGNpLT5yZWdzLT5hc3luY19uZXh0KTsKKworCS8qCisJICogaGNjX3BhcmFtcyBjb250cm9scyB3aGV0aGVyIGVoY2ktPnJlZ3MtPnNlZ21lbnQgbXVzdCAoISEhKQorCSAqIGJlIHVzZWQ7IGl0IGNvbnN0cmFpbnMgUUgvSVREL1NJVEQgYW5kIFFURCBsb2NhdGlvbnMuCisJICogcGNpX3Bvb2wgY29uc2lzdGVudCBtZW1vcnkgYWx3YXlzIHVzZXMgc2VnbWVudCB6ZXJvLgorCSAqIHN0cmVhbWluZyBtYXBwaW5ncyBmb3IgSS9PIGJ1ZmZlcnMsIGxpa2UgcGNpX21hcF9zaW5nbGUoKSwKKwkgKiBjYW4gcmV0dXJuIHNlZ21lbnRzIGFib3ZlIDRHQiwgaWYgdGhlIGRldmljZSBhbGxvd3MuCisJICoKKwkgKiBOT1RFOiAgdGhlIGRtYSBtYXNrIGlzIHZpc2libGUgdGhyb3VnaCBkbWFfc3VwcG9ydGVkKCksIHNvCisJICogZHJpdmVycyBjYW4gcGFzcyB0aGlzIGluZm8gYWxvbmcgLi4uIGxpa2UgTkVUSUZfRl9ISUdIRE1BLAorCSAqIFNjc2lfSG9zdC5oaWdobWVtX2lvLCBhbmQgc28gZm9ydGguICBJdCdzIHJlYWRvbmx5IHRvIGFsbAorCSAqIGhvc3Qgc2lkZSBkcml2ZXJzIHRob3VnaC4KKwkgKi8KKwlpZiAoSENDXzY0QklUX0FERFIgKGhjY19wYXJhbXMpKSB7CisJCXdyaXRlbCAoMCwgJmVoY2ktPnJlZ3MtPnNlZ21lbnQpOworI2lmIDAKKy8vIHRoaXMgaXMgZGVlcGx5IGJyb2tlbiBvbiBhbG1vc3QgYWxsIGFyY2hpdGVjdHVyZXMKKwkJaWYgKCFwY2lfc2V0X2RtYV9tYXNrICh0b19wY2lfZGV2KGhjZC0+c2VsZi5jb250cm9sbGVyKSwgMHhmZmZmZmZmZmZmZmZmZmZmVUxMKSkKKwkJCWVoY2lfaW5mbyAoZWhjaSwgImVuYWJsZWQgNjRiaXQgUENJIERNQVxuIik7CisjZW5kaWYKKwl9CisKKwkvKiBjbGVhciBpbnRlcnJ1cHQgZW5hYmxlcywgc2V0IGlycSBsYXRlbmN5ICovCisJaWYgKGxvZzJfaXJxX3RocmVzaCA8IDAgfHwgbG9nMl9pcnFfdGhyZXNoID4gNikKKwkJbG9nMl9pcnFfdGhyZXNoID0gMDsKKwl0ZW1wID0gMSA8PCAoMTYgKyBsb2cyX2lycV90aHJlc2gpOworCWlmIChIQ0NfQ0FOUEFSSyhoY2NfcGFyYW1zKSkgeworCQkvKiBIVyBkZWZhdWx0IHBhcmsgPT0gMywgb24gaGFyZHdhcmUgdGhhdCBzdXBwb3J0cyBpdCAobGlrZQorCQkgKiBOVmlkaWEgYW5kIEFMSSBzaWxpY29uKSwgbWF4aW1pemVzIHRocm91Z2hwdXQgb24gdGhlIGFzeW5jCisJCSAqIHNjaGVkdWxlIGJ5IGF2b2lkaW5nIFFIIGZldGNoZXMgYmV0d2VlbiB0cmFuc2ZlcnMuCisJCSAqCisJCSAqIFdpdGggZmFzdCB1c2Igc3RvcmFnZSBkZXZpY2VzIGFuZCBORm9yY2UyLCAicGFyayIgc2VlbXMgdG8KKwkJICogbWFrZSBwcm9ibGVtczogIHRocm91Z2hwdXQgcmVkdWN0aW9uICghKSwgZGF0YSBlcnJvcnMuLi4KKwkJICovCisJCWlmIChwYXJrKSB7CisJCQlwYXJrID0gbWluIChwYXJrLCAodW5zaWduZWQpIDMpOworCQkJdGVtcCB8PSBDTURfUEFSSzsKKwkJCXRlbXAgfD0gcGFyayA8PCA4OworCQl9CisJCWVoY2lfaW5mbyAoZWhjaSwgInBhcmsgJWRcbiIsIHBhcmspOworCX0KKwlpZiAoSENDX1BHTV9GUkFNRUxJU1RMRU4gKGhjY19wYXJhbXMpKSB7CisJCS8qIHBlcmlvZGljIHNjaGVkdWxlIHNpemUgY2FuIGJlIHNtYWxsZXIgdGhhbiBkZWZhdWx0ICovCisJCXRlbXAgJj0gfigzIDw8IDIpOworCQl0ZW1wIHw9IChFSENJX1RVTkVfRkxTIDw8IDIpOworCQlzd2l0Y2ggKEVIQ0lfVFVORV9GTFMpIHsKKwkJY2FzZSAwOiBlaGNpLT5wZXJpb2RpY19zaXplID0gMTAyNDsgYnJlYWs7CisJCWNhc2UgMTogZWhjaS0+cGVyaW9kaWNfc2l6ZSA9IDUxMjsgYnJlYWs7CisJCWNhc2UgMjogZWhjaS0+cGVyaW9kaWNfc2l6ZSA9IDI1NjsgYnJlYWs7CisJCWRlZmF1bHQ6CUJVRyAoKTsKKwkJfQorCX0KKwkvLyBQaGlsaXBzLCBJbnRlbCwgYW5kIG1heWJlIG90aGVycyBuZWVkIENNRF9SVU4gYmVmb3JlIHRoZQorCS8vIHJvb3QgaHViIHdpbGwgZGV0ZWN0IG5ldyBkZXZpY2VzICh3aHk/KTsgTkVDIGRvZXNuJ3QKKwl0ZW1wIHw9IENNRF9SVU47CisJd3JpdGVsICh0ZW1wLCAmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJZGJnX2NtZCAoZWhjaSwgImluaXQiLCB0ZW1wKTsKKworCS8qIHNldCBhc3luYyBzbGVlcCB0aW1lID0gMTAgdXMgLi4uID8gKi8KKworCS8qIHdpcmUgdXAgdGhlIHJvb3QgaHViICovCisJYnVzID0gaGNkX3RvX2J1cyAoaGNkKTsKKwl1ZGV2ID0gZmlyc3QgPyB1c2JfYWxsb2NfZGV2IChOVUxMLCBidXMsIDApIDogYnVzLT5yb290X2h1YjsKKwlpZiAoIXVkZXYpIHsKK2RvbmUyOgorCQllaGNpX21lbV9jbGVhbnVwIChlaGNpKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXVkZXYtPnNwZWVkID0gVVNCX1NQRUVEX0hJR0g7CisJdWRldi0+c3RhdGUgPSBmaXJzdCA/IFVTQl9TVEFURV9BVFRBQ0hFRCA6IFVTQl9TVEFURV9DT05GSUdVUkVEOworCisJLyoKKwkgKiBTdGFydCwgZW5hYmxpbmcgZnVsbCBVU0IgMi4wIGZ1bmN0aW9uYWxpdHkgLi4uIHVzYiAxLjEgZGV2aWNlcworCSAqIGFyZSBleHBsaWNpdGx5IGhhbmRlZCB0byBjb21wYW5pb24gY29udHJvbGxlcihzKSwgc28gbm8gVFQgaXMKKwkgKiBpbnZvbHZlZCB3aXRoIHRoZSByb290IGh1Yi4gIChFeGNlcHQgd2hlcmUgb25lIGlzIGludGVncmF0ZWQsCisJICogYW5kIHRoZXJlJ3Mgbm8gY29tcGFuaW9uIGNvbnRyb2xsZXIgdW5sZXNzIG1heWJlIGZvciBVU0IgT1RHLikKKwkgKi8KKwlpZiAoZmlyc3QpIHsKKwkJZWhjaS0+cmVib290X25vdGlmaWVyLm5vdGlmaWVyX2NhbGwgPSBlaGNpX3JlYm9vdDsKKwkJcmVnaXN0ZXJfcmVib290X25vdGlmaWVyICgmZWhjaS0+cmVib290X25vdGlmaWVyKTsKKwl9CisKKwloY2QtPnN0YXRlID0gSENfU1RBVEVfUlVOTklORzsKKwl3cml0ZWwgKEZMQUdfQ0YsICZlaGNpLT5yZWdzLT5jb25maWd1cmVkX2ZsYWcpOworCXJlYWRsICgmZWhjaS0+cmVncy0+Y29tbWFuZCk7CS8qIHVuYmxvY2sgcG9zdGVkIHdyaXRlICovCisKKwl0ZW1wID0gSENfVkVSU0lPTihyZWFkbCAoJmVoY2ktPmNhcHMtPmhjX2NhcGJhc2UpKTsKKwllaGNpX2luZm8gKGVoY2ksCisJCSJVU0IgJXguJXggJXMsIEVIQ0kgJXguJTAyeCwgZHJpdmVyICVzXG4iLAorCQkoKHNicm4gJiAweGYwKT4+NCksIChzYnJuICYgMHgwZiksCisJCWZpcnN0ID8gImluaXRpYWxpemVkIiA6ICJyZXN0YXJ0ZWQiLAorCQl0ZW1wID4+IDgsIHRlbXAgJiAweGZmLCBEUklWRVJfVkVSU0lPTik7CisKKwkvKgorCSAqIEZyb20gaGVyZSBvbiwga2h1YmQgY29uY3VycmVudGx5IGFjY2Vzc2VzIHRoZSByb290CisJICogaHViOyBkcml2ZXJzIHdpbGwgYmUgdGFsa2luZyB0byBlbnVtZXJhdGVkIGRldmljZXMuCisJICogKE9uIHJlc3RhcnQgcGF0aHMsIGtodWJkIGFscmVhZHkga25vd3MgYWJvdXQgdGhlIHJvb3QKKwkgKiBodWIgYW5kIGNvdWxkIGZpbmQgd29yayBhcyBzb29uIGFzIHdlIHdyb3RlIEZMQUdfQ0YuKQorCSAqCisJICogQmVmb3JlIHRoaXMgcG9pbnQgdGhlIEhDIHdhcyBpZGxlL3JlYWR5LiAgQWZ0ZXIsIGtodWJkCisJICogYW5kIGRldmljZSBkcml2ZXJzIG1heSBzdGFydCBpdCBydW5uaW5nLgorCSAqLworCWlmIChmaXJzdCAmJiB1c2JfaGNkX3JlZ2lzdGVyX3Jvb3RfaHViICh1ZGV2LCBoY2QpICE9IDApIHsKKwkJaWYgKGhjZC0+c3RhdGUgPT0gSENfU1RBVEVfUlVOTklORykKKwkJCWVoY2lfcXVpZXNjZSAoZWhjaSk7CisJCWVoY2lfcmVzZXQgKGVoY2kpOworCQl1c2JfcHV0X2RldiAodWRldik7IAorCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGRvbmUyOworCX0KKworCXdyaXRlbCAoSU5UUl9NQVNLLCAmZWhjaS0+cmVncy0+aW50cl9lbmFibGUpOyAvKiBUdXJuIE9uIEludGVycnVwdHMgKi8KKworCWlmIChmaXJzdCkKKwkJY3JlYXRlX2RlYnVnX2ZpbGVzIChlaGNpKTsKKworCXJldHVybiAwOworfQorCisvKiBhbHdheXMgY2FsbGVkIGJ5IHRocmVhZDsgbm9ybWFsbHkgcm1tb2QgKi8KKworc3RhdGljIHZvaWQgZWhjaV9zdG9wIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKKwl1OAkJCXJoX3BvcnRzLCBwb3J0OworCisJZWhjaV9kYmcgKGVoY2ksICJzdG9wXG4iKTsKKworCS8qIFR1cm4gb2ZmIHBvcnQgcG93ZXIgb24gYWxsIHJvb3QgaHViIHBvcnRzLiAqLworCXJoX3BvcnRzID0gSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOworCWZvciAocG9ydCA9IDE7IHBvcnQgPD0gcmhfcG9ydHM7IHBvcnQrKykKKwkJKHZvaWQpIGVoY2lfaHViX2NvbnRyb2woaGNkLAorCQkJQ2xlYXJQb3J0RmVhdHVyZSwgVVNCX1BPUlRfRkVBVF9QT1dFUiwKKwkJCXBvcnQsIE5VTEwsIDApOworCisJLyogbm8gbW9yZSBpbnRlcnJ1cHRzIC4uLiAqLworCWRlbF90aW1lcl9zeW5jICgmZWhjaS0+d2F0Y2hkb2cpOworCisJc3Bpbl9sb2NrX2lycSgmZWhjaS0+bG9jayk7CisJaWYgKEhDX0lTX1JVTk5JTkcgKGhjZC0+c3RhdGUpKQorCQllaGNpX3F1aWVzY2UgKGVoY2kpOworCisJZWhjaV9yZXNldCAoZWhjaSk7CisJd3JpdGVsICgwLCAmZWhjaS0+cmVncy0+aW50cl9lbmFibGUpOworCXNwaW5fdW5sb2NrX2lycSgmZWhjaS0+bG9jayk7CisKKwkvKiBsZXQgY29tcGFuaW9uIGNvbnRyb2xsZXJzIHdvcmsgd2hlbiB3ZSBhcmVuJ3QgKi8KKwl3cml0ZWwgKDAsICZlaGNpLT5yZWdzLT5jb25maWd1cmVkX2ZsYWcpOworCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyICgmZWhjaS0+cmVib290X25vdGlmaWVyKTsKKworCXJlbW92ZV9kZWJ1Z19maWxlcyAoZWhjaSk7CisKKwkvKiByb290IGh1YiBpcyBzaHV0IGRvd24gc2VwYXJhdGVseSAoZmlyc3QsIHdoZW4gcG9zc2libGUpICovCisJc3Bpbl9sb2NrX2lycSAoJmVoY2ktPmxvY2spOworCWlmIChlaGNpLT5hc3luYykKKwkJZWhjaV93b3JrIChlaGNpLCBOVUxMKTsKKwlzcGluX3VubG9ja19pcnEgKCZlaGNpLT5sb2NrKTsKKwllaGNpX21lbV9jbGVhbnVwIChlaGNpKTsKKworI2lmZGVmCUVIQ0lfU1RBVFMKKwllaGNpX2RiZyAoZWhjaSwgImlycSBub3JtYWwgJWxkIGVyciAlbGQgcmVjbGFpbSAlbGQgKGxvc3QgJWxkKVxuIiwKKwkJZWhjaS0+c3RhdHMubm9ybWFsLCBlaGNpLT5zdGF0cy5lcnJvciwgZWhjaS0+c3RhdHMucmVjbGFpbSwKKwkJZWhjaS0+c3RhdHMubG9zdF9pYWEpOworCWVoY2lfZGJnIChlaGNpLCAiY29tcGxldGUgJWxkIHVubGluayAlbGRcbiIsCisJCWVoY2ktPnN0YXRzLmNvbXBsZXRlLCBlaGNpLT5zdGF0cy51bmxpbmspOworI2VuZGlmCisKKwlkYmdfc3RhdHVzIChlaGNpLCAiZWhjaV9zdG9wIGNvbXBsZXRlZCIsIHJlYWRsICgmZWhjaS0+cmVncy0+c3RhdHVzKSk7Cit9CisKK3N0YXRpYyBpbnQgZWhjaV9nZXRfZnJhbWUgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSA9IGhjZF90b19laGNpIChoY2QpOworCXJldHVybiAocmVhZGwgKCZlaGNpLT5yZWdzLT5mcmFtZV9pbmRleCkgPj4gMykgJSBlaGNpLT5wZXJpb2RpY19zaXplOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYJQ09ORklHX1BNCisKKy8qIHN1c3BlbmQvcmVzdW1lLCBzZWN0aW9uIDQuMyAqLworCisvKiBUaGVzZSByb3V0aW5lcyByZWx5IG9uIHRoZSBidXMgKHBjaSwgcGxhdGZvcm0sIGV0YykKKyAqIHRvIGhhbmRsZSBwb3dlcmRvd24gYW5kIHdha2V1cCwgYW5kIGN1cnJlbnRseSBhbHNvIG9uCisgKiB0cmFuc2NlaXZlcnMgdGhhdCBkb24ndCBuZWVkIGFueSBzb2Z0d2FyZSBhdHRlbnRpb24gdG8gc2V0IHVwCisgKiB0aGUgcmlnaHQgc29ydCBvZiB3YWtldXAuICAKKyAqLworCitzdGF0aWMgaW50IGVoY2lfc3VzcGVuZCAoc3RydWN0IHVzYl9oY2QgKmhjZCwgdTMyIHN0YXRlKQoreworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKKworCWlmICh0aW1lX2JlZm9yZSAoamlmZmllcywgZWhjaS0+bmV4dF9zdGF0ZWNoYW5nZSkpCisJCW1zbGVlcCAoMTAwKTsKKworI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAorCSh2b2lkKSB1c2Jfc3VzcGVuZF9kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yiwgc3RhdGUpOworI2Vsc2UKKwl1c2JfbG9ja19kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yik7CisJKHZvaWQpIGVoY2lfaHViX3N1c3BlbmQgKGhjZCk7CisJdXNiX3VubG9ja19kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yik7CisjZW5kaWYKKworCS8vIHNhdmUgKFBDSSkgRkxBREogaW4gY2FzZSBvZiBWYXV4IHBvd2VyIGxvc3MKKwkvLyAuLi4gd2UnZCBvbmx5IHVzZSBpdCB0byBoYW5kbGUgY2xvY2sgc2tldworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZWhjaV9yZXN1bWUgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSA9IGhjZF90b19laGNpIChoY2QpOworCXVuc2lnbmVkCQlwb3J0OworCXN0cnVjdCB1c2JfZGV2aWNlCSpyb290ID0gaGNkLT5zZWxmLnJvb3RfaHViOworCWludAkJCXJldHZhbCA9IC1FSU5WQUw7CisJaW50CQkJcG93ZXJ1cCA9IDA7CisKKwkvLyBtYXliZSByZXN0b3JlIChQQ0kpIEZMQURKCisKKwlpZiAodGltZV9iZWZvcmUgKGppZmZpZXMsIGVoY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQorCQltc2xlZXAgKDEwMCk7CisKKwkvKiBJZiBhbnkgcG9ydCBpcyBzdXNwZW5kZWQsIHdlIGtub3cgd2UgY2FuL211c3QgcmVzdW1lIHRoZSBIQy4gKi8KKwlmb3IgKHBvcnQgPSBIQ1NfTl9QT1JUUyAoZWhjaS0+aGNzX3BhcmFtcyk7IHBvcnQgPiAwOyApIHsKKwkJdTMyCXN0YXR1czsKKwkJcG9ydC0tOworCQlzdGF0dXMgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFtwb3J0XSk7CisJCWlmIChzdGF0dXMgJiBQT1JUX1NVU1BFTkQpIHsKKwkJCWRvd24gKCZoY2QtPnNlbGYucm9vdF9odWItPnNlcmlhbGl6ZSk7CisJCQlyZXR2YWwgPSBlaGNpX2h1Yl9yZXN1bWUgKGhjZCk7CisJCQl1cCAoJmhjZC0+c2VsZi5yb290X2h1Yi0+c2VyaWFsaXplKTsKKwkJCWJyZWFrOworCQl9CisJCWlmICgoc3RhdHVzICYgUE9SVF9QT1dFUikgPT0gMCkKKwkJCXBvd2VydXAgPSAxOworCQlpZiAoIXJvb3QtPmNoaWxkcmVuIFtwb3J0XSkKKwkJCWNvbnRpbnVlOworCQlkYmdfcG9ydCAoZWhjaSwgX19GVU5DVElPTl9fLCBwb3J0ICsgMSwgc3RhdHVzKTsKKwkJdXNiX3NldF9kZXZpY2Vfc3RhdGUgKHJvb3QtPmNoaWxkcmVuW3BvcnRdLAorCQkJCQlVU0JfU1RBVEVfTk9UQVRUQUNIRUQpOworCX0KKworCS8qIEVsc2UgcmVzZXQsIHRvIGNvcGUgd2l0aCBwb3dlciBsb3NzIG9yIGZsdXNoLXRvLXN0b3JhZ2UKKwkgKiBzdHlsZSAicmVzdW1lIiBoYXZpbmcgYWN0aXZhdGVkIEJJT1MgZHVyaW5nIHJlYm9vdC4KKwkgKi8KKwlpZiAocG9ydCA9PSAwKSB7CisJCSh2b2lkKSBlaGNpX2hhbHQgKGVoY2kpOworCQkodm9pZCkgZWhjaV9yZXNldCAoZWhjaSk7CisJCSh2b2lkKSBlaGNpX2hjX3Jlc2V0IChoY2QpOworCisJCS8qIGVtcHR5aW5nIHRoZSBzY2hlZHVsZSBhYm9ydHMgYW55IHVyYnMgKi8KKwkJc3Bpbl9sb2NrX2lycSAoJmVoY2ktPmxvY2spOworCQlpZiAoZWhjaS0+cmVjbGFpbSkKKwkJCWVoY2ktPnJlY2xhaW1fcmVhZHkgPSAxOworCQllaGNpX3dvcmsgKGVoY2ksIE5VTEwpOworCQlzcGluX3VubG9ja19pcnEgKCZlaGNpLT5sb2NrKTsKKworCQkvKiByZXN0YXJ0OyBraHViZCB3aWxsIGRpc2Nvbm5lY3QgZGV2aWNlcyAqLworCQlyZXR2YWwgPSBlaGNpX3N0YXJ0IChoY2QpOworCisJCS8qIGhlcmUgd2UgImtub3ciIHJvb3QgcG9ydHMgc2hvdWxkIGFsd2F5cyBzdGF5IHBvd2VyZWQ7CisJCSAqIGJ1dCBzb21lIGNvbnRyb2xsZXJzIG1heSBsb3N0IGFsbCBwb3dlci4KKwkJICovCisJCWlmIChwb3dlcnVwKSB7CisJCQllaGNpX2RiZyAoZWhjaSwgIi4uLnBvd2VydXAgcG9ydHMuLi5cbiIpOworCQkJZm9yIChwb3J0ID0gSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOyBwb3J0ID4gMDsgKQorCQkJCSh2b2lkKSBlaGNpX2h1Yl9jb250cm9sKGhjZCwKKwkJCQkJU2V0UG9ydEZlYXR1cmUsIFVTQl9QT1JUX0ZFQVRfUE9XRVIsCisJCQkJCQlwb3J0LS0sIE5VTEwsIDApOworCQkJbXNsZWVwKDIwKTsKKwkJfQorCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogZWhjaV93b3JrIGlzIGNhbGxlZCBmcm9tIHNvbWUgaW50ZXJydXB0cywgdGltZXJzLCBhbmQgc28gb24uCisgKiBpdCBjYWxscyBkcml2ZXIgY29tcGxldGlvbiBmdW5jdGlvbnMsIGFmdGVyIGRyb3BwaW5nIGVoY2ktPmxvY2suCisgKi8KK3N0YXRpYyB2b2lkIGVoY2lfd29yayAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl0aW1lcl9hY3Rpb25fZG9uZSAoZWhjaSwgVElNRVJfSU9fV0FUQ0hET0cpOworCWlmIChlaGNpLT5yZWNsYWltX3JlYWR5KQorCQllbmRfdW5saW5rX2FzeW5jIChlaGNpLCByZWdzKTsKKworCS8qIGFub3RoZXIgQ1BVIG1heSBkcm9wIGVoY2ktPmxvY2sgZHVyaW5nIGEgc2NoZWR1bGUgc2NhbiB3aGlsZQorCSAqIGl0IHJlcG9ydHMgdXJiIGNvbXBsZXRpb25zLiAgdGhpcyBmbGFnIGd1YXJkcyBhZ2FpbnN0IGJvZ3VzCisJICogYXR0ZW1wdHMgYXQgcmUtZW50cmFudCBzY2hlZHVsZSBzY2FubmluZy4KKwkgKi8KKwlpZiAoZWhjaS0+c2Nhbm5pbmcpCisJCXJldHVybjsKKwllaGNpLT5zY2FubmluZyA9IDE7CisJc2Nhbl9hc3luYyAoZWhjaSwgcmVncyk7CisJaWYgKGVoY2ktPm5leHRfdWZyYW1lICE9IC0xKQorCQlzY2FuX3BlcmlvZGljIChlaGNpLCByZWdzKTsKKwllaGNpLT5zY2FubmluZyA9IDA7CisKKwkvKiB0aGUgSU8gd2F0Y2hkb2cgZ3VhcmRzIGFnYWluc3QgaGFyZHdhcmUgb3IgZHJpdmVyIGJ1Z3MgdGhhdAorCSAqIG1pc3BsYWNlIElSUXMsIGFuZCBzaG91bGQgbGV0IHVzIHJ1biBjb21wbGV0ZWx5IHdpdGhvdXQgSVJRcy4KKwkgKiBzdWNoIGxvc3NhZ2UgaGFzIGJlZW4gb2JzZXJ2ZWQgb24gYm90aCBWVDYyMDIgYW5kIFZUODIzNS4gCisJICovCisJaWYgKEhDX0lTX1JVTk5JTkcgKGVoY2lfdG9faGNkKGVoY2kpLT5zdGF0ZSkgJiYKKwkJCShlaGNpLT5hc3luYy0+cWhfbmV4dC5wdHIgIT0gTlVMTCB8fAorCQkJIGVoY2ktPnBlcmlvZGljX3NjaGVkICE9IDApKQorCQl0aW1lcl9hY3Rpb24gKGVoY2ksIFRJTUVSX0lPX1dBVENIRE9HKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlycXJldHVybl90IGVoY2lfaXJxIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CisJdTMyCQkJc3RhdHVzOworCWludAkJCWJoOworCisJc3Bpbl9sb2NrICgmZWhjaS0+bG9jayk7CisKKwlzdGF0dXMgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPnN0YXR1cyk7CisKKwkvKiBlLmcuIGNhcmRidXMgcGh5c2ljYWwgZWplY3QgKi8KKwlpZiAoc3RhdHVzID09IH4odTMyKSAwKSB7CisJCWVoY2lfZGJnIChlaGNpLCAiZGV2aWNlIHJlbW92ZWRcbiIpOworCQlnb3RvIGRlYWQ7CisJfQorCisJc3RhdHVzICY9IElOVFJfTUFTSzsKKwlpZiAoIXN0YXR1cykgewkJCS8qIGlycSBzaGFyaW5nPyAqLworCQlzcGluX3VubG9jaygmZWhjaS0+bG9jayk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwkvKiBjbGVhciAoanVzdCkgaW50ZXJydXB0cyAqLworCXdyaXRlbCAoc3RhdHVzLCAmZWhjaS0+cmVncy0+c3RhdHVzKTsKKwlyZWFkbCAoJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOwkvKiB1bmJsb2NrIHBvc3RlZCB3cml0ZSAqLworCWJoID0gMDsKKworI2lmZGVmCUVIQ0lfVkVSQk9TRV9ERUJVRworCS8qIHVucmVxdWVzdGVkL2lnbm9yZWQ6IEZyYW1lIExpc3QgUm9sbG92ZXIgKi8KKwlkYmdfc3RhdHVzIChlaGNpLCAiaXJxIiwgc3RhdHVzKTsKKyNlbmRpZgorCisJLyogSU5ULCBFUlIsIGFuZCBJQUEgaW50ZXJydXB0IHJhdGVzIGNhbiBiZSB0aHJvdHRsZWQgKi8KKworCS8qIG5vcm1hbCBbNC4xNS4xLjJdIG9yIGVycm9yIFs0LjE1LjEuMV0gY29tcGxldGlvbiAqLworCWlmIChsaWtlbHkgKChzdGF0dXMgJiAoU1RTX0lOVHxTVFNfRVJSKSkgIT0gMCkpIHsKKwkJaWYgKGxpa2VseSAoKHN0YXR1cyAmIFNUU19FUlIpID09IDApKQorCQkJQ09VTlQgKGVoY2ktPnN0YXRzLm5vcm1hbCk7CisJCWVsc2UKKwkJCUNPVU5UIChlaGNpLT5zdGF0cy5lcnJvcik7CisJCWJoID0gMTsKKwl9CisKKwkvKiBjb21wbGV0ZSB0aGUgdW5saW5raW5nIG9mIHNvbWUgcWggWzQuMTUuMi4zXSAqLworCWlmIChzdGF0dXMgJiBTVFNfSUFBKSB7CisJCUNPVU5UIChlaGNpLT5zdGF0cy5yZWNsYWltKTsKKwkJZWhjaS0+cmVjbGFpbV9yZWFkeSA9IDE7CisJCWJoID0gMTsKKwl9CisKKwkvKiByZW1vdGUgd2FrZXVwIFs0LjMuMV0gKi8KKwlpZiAoKHN0YXR1cyAmIFNUU19QQ0QpICYmIGhjZC0+cmVtb3RlX3dha2V1cCkgeworCQl1bnNpZ25lZAlpID0gSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOworCisJCS8qIHJlc3VtZSByb290IGh1Yj8gKi8KKwkJc3RhdHVzID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKwkJaWYgKCEoc3RhdHVzICYgQ01EX1JVTikpCisJCQl3cml0ZWwgKHN0YXR1cyB8IENNRF9SVU4sICZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKworCQl3aGlsZSAoaS0tKSB7CisJCQlzdGF0dXMgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFtpXSk7CisJCQlpZiAoc3RhdHVzICYgUE9SVF9PV05FUikKKwkJCQljb250aW51ZTsKKwkJCWlmICghKHN0YXR1cyAmIFBPUlRfUkVTVU1FKQorCQkJCQl8fCBlaGNpLT5yZXNldF9kb25lIFtpXSAhPSAwKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBzdGFydCAyMCBtc2VjIHJlc3VtZSBzaWduYWxpbmcgZnJvbSB0aGlzIHBvcnQsCisJCQkgKiBhbmQgbWFrZSBraHViZCBjb2xsZWN0IFBPUlRfU1RBVF9DX1NVU1BFTkQgdG8KKwkJCSAqIHN0b3AgdGhhdCBzaWduYWxpbmcuCisJCQkgKi8KKwkJCWVoY2ktPnJlc2V0X2RvbmUgW2ldID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMgKDIwKTsKKwkJCW1vZF90aW1lciAoJmhjZC0+cmhfdGltZXIsCisJCQkJCWVoY2ktPnJlc2V0X2RvbmUgW2ldICsgMSk7CisJCQllaGNpX2RiZyAoZWhjaSwgInBvcnQgJWQgcmVtb3RlIHdha2V1cFxuIiwgaSArIDEpOworCQl9CisJfQorCisJLyogUENJIGVycm9ycyBbNC4xNS4yLjRdICovCisJaWYgKHVubGlrZWx5ICgoc3RhdHVzICYgU1RTX0ZBVEFMKSAhPSAwKSkgeworCQkvKiBib2d1cyAiZmF0YWwiIElSUXMgYXBwZWFyIG9uIHNvbWUgY2hpcHMuLi4gd2h5PyAgKi8KKwkJc3RhdHVzID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5zdGF0dXMpOworCQlkYmdfY21kIChlaGNpLCAiZmF0YWwiLCByZWFkbCAoJmVoY2ktPnJlZ3MtPmNvbW1hbmQpKTsKKwkJZGJnX3N0YXR1cyAoZWhjaSwgImZhdGFsIiwgc3RhdHVzKTsKKwkJaWYgKHN0YXR1cyAmIFNUU19IQUxUKSB7CisJCQllaGNpX2VyciAoZWhjaSwgImZhdGFsIGVycm9yXG4iKTsKK2RlYWQ6CisJCQllaGNpX3Jlc2V0IChlaGNpKTsKKwkJCXdyaXRlbCAoMCwgJmVoY2ktPnJlZ3MtPmNvbmZpZ3VyZWRfZmxhZyk7CisJCQkvKiBnZW5lcmljIGxheWVyIGtpbGxzL3VubGlua3MgYWxsIHVyYnMsIHRoZW4KKwkJCSAqIHVzZXMgZWhjaV9zdG9wIHRvIGNsZWFuIHVwIHRoZSByZXN0CisJCQkgKi8KKwkJCWJoID0gMTsKKwkJfQorCX0KKworCWlmIChiaCkKKwkJZWhjaV93b3JrIChlaGNpLCByZWdzKTsKKwlzcGluX3VubG9jayAoJmVoY2ktPmxvY2spOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIG5vbi1lcnJvciByZXR1cm5zIGFyZSBhIHByb21pc2UgdG8gZ2l2ZWJhY2soKSB0aGUgdXJiIGxhdGVyCisgKiB3ZSBkcm9wIG93bmVyc2hpcCBzbyBuZXh0IG93bmVyIChvciB1cmIgdW5saW5rKSBjYW4gZ2V0IGl0CisgKgorICogdXJiICsgZGV2IGlzIGluIGhjZC5zZWxmLmNvbnRyb2xsZXIudXJiX2xpc3QKKyAqIHdlJ3JlIHF1ZXVlaW5nIFREcyBvbnRvIHNvZnR3YXJlIGFuZCBoYXJkd2FyZSBsaXN0cworICoKKyAqIGhjZC1zcGVjaWZpYyBpbml0IGZvciBoY3ByaXYgaGFzbid0IGJlZW4gZG9uZSB5ZXQKKyAqCisgKiBOT1RFOiAgY29udHJvbCwgYnVsaywgYW5kIGludGVycnVwdCBzaGFyZSB0aGUgc2FtZSBjb2RlIHRvIGFwcGVuZCBURHMKKyAqIHRvIGEgKHBvc3NpYmx5IGFjdGl2ZSkgUUgsIGFuZCB0aGUgc2FtZSBRSCBzY2FubmluZyBjb2RlLgorICovCitzdGF0aWMgaW50IGVoY2lfdXJiX2VucXVldWUgKAorCXN0cnVjdCB1c2JfaGNkCSpoY2QsCisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwKKwlzdHJ1Y3QgdXJiCSp1cmIsCisJaW50CQltZW1fZmxhZ3MKKykgeworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXF0ZF9saXN0OworCisJSU5JVF9MSVNUX0hFQUQgKCZxdGRfbGlzdCk7CisKKwlzd2l0Y2ggKHVzYl9waXBldHlwZSAodXJiLT5waXBlKSkgeworCS8vIGNhc2UgUElQRV9DT05UUk9MOgorCS8vIGNhc2UgUElQRV9CVUxLOgorCWRlZmF1bHQ6CisJCWlmICghcWhfdXJiX3RyYW5zYWN0aW9uIChlaGNpLCB1cmIsICZxdGRfbGlzdCwgbWVtX2ZsYWdzKSkKKwkJCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gc3VibWl0X2FzeW5jIChlaGNpLCBlcCwgdXJiLCAmcXRkX2xpc3QsIG1lbV9mbGFncyk7CisKKwljYXNlIFBJUEVfSU5URVJSVVBUOgorCQlpZiAoIXFoX3VyYl90cmFuc2FjdGlvbiAoZWhjaSwgdXJiLCAmcXRkX2xpc3QsIG1lbV9mbGFncykpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIGludHJfc3VibWl0IChlaGNpLCBlcCwgdXJiLCAmcXRkX2xpc3QsIG1lbV9mbGFncyk7CisKKwljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJCWlmICh1cmItPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCisJCQlyZXR1cm4gaXRkX3N1Ym1pdCAoZWhjaSwgdXJiLCBtZW1fZmxhZ3MpOworCQllbHNlCisJCQlyZXR1cm4gc2l0ZF9zdWJtaXQgKGVoY2ksIHVyYiwgbWVtX2ZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVubGlua19hc3luYyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9xaCAqcWgpCit7CisJLyogaWYgd2UgbmVlZCB0byB1c2UgSUFBIGFuZCBpdCdzIGJ1c3ksIGRlZmVyICovCisJaWYgKHFoLT5xaF9zdGF0ZSA9PSBRSF9TVEFURV9MSU5LRUQKKwkJCSYmIGVoY2ktPnJlY2xhaW0KKwkJCSYmIEhDX0lTX1JVTk5JTkcgKGVoY2lfdG9faGNkKGVoY2kpLT5zdGF0ZSkpIHsKKwkJc3RydWN0IGVoY2lfcWgJCSpsYXN0OworCisJCWZvciAobGFzdCA9IGVoY2ktPnJlY2xhaW07CisJCQkJbGFzdC0+cmVjbGFpbTsKKwkJCQlsYXN0ID0gbGFzdC0+cmVjbGFpbSkKKwkJCWNvbnRpbnVlOworCQlxaC0+cWhfc3RhdGUgPSBRSF9TVEFURV9VTkxJTktfV0FJVDsKKwkJbGFzdC0+cmVjbGFpbSA9IHFoOworCisJLyogYnlwYXNzIElBQSBpZiB0aGUgaGMgY2FuJ3QgY2FyZSAqLworCX0gZWxzZSBpZiAoIUhDX0lTX1JVTk5JTkcgKGVoY2lfdG9faGNkKGVoY2kpLT5zdGF0ZSkgJiYgZWhjaS0+cmVjbGFpbSkKKwkJZW5kX3VubGlua19hc3luYyAoZWhjaSwgTlVMTCk7CisKKwkvKiBzb21ldGhpbmcgZWxzZSBtaWdodCBoYXZlIHVubGlua2VkIHRoZSBxaCBieSBub3cgKi8KKwlpZiAocWgtPnFoX3N0YXRlID09IFFIX1NUQVRFX0xJTktFRCkKKwkJc3RhcnRfdW5saW5rX2FzeW5jIChlaGNpLCBxaCk7Cit9CisKKy8qIHJlbW92ZSBmcm9tIGhhcmR3YXJlIGxpc3RzCisgKiBjb21wbGV0aW9ucyBub3JtYWxseSBoYXBwZW4gYXN5bmNocm9ub3VzbHkKKyAqLworCitzdGF0aWMgaW50IGVoY2lfdXJiX2RlcXVldWUgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CisJc3RydWN0IGVoY2lfcWgJCSpxaDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCXN3aXRjaCAodXNiX3BpcGV0eXBlICh1cmItPnBpcGUpKSB7CisJLy8gY2FzZSBQSVBFX0NPTlRST0w6CisJLy8gY2FzZSBQSVBFX0JVTEs6CisJZGVmYXVsdDoKKwkJcWggPSAoc3RydWN0IGVoY2lfcWggKikgdXJiLT5oY3ByaXY7CisJCWlmICghcWgpCisJCQlicmVhazsKKwkJdW5saW5rX2FzeW5jIChlaGNpLCBxaCk7CisJCWJyZWFrOworCisJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJcWggPSAoc3RydWN0IGVoY2lfcWggKikgdXJiLT5oY3ByaXY7CisJCWlmICghcWgpCisJCQlicmVhazsKKwkJc3dpdGNoIChxaC0+cWhfc3RhdGUpIHsKKwkJY2FzZSBRSF9TVEFURV9MSU5LRUQ6CisJCQlpbnRyX2Rlc2NoZWR1bGUgKGVoY2ksIHFoKTsKKwkJCS8qIEZBTEwgVEhST1VHSCAqLworCQljYXNlIFFIX1NUQVRFX0lETEU6CisJCQlxaF9jb21wbGV0aW9ucyAoZWhjaSwgcWgsIE5VTEwpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllaGNpX2RiZyAoZWhjaSwgImJvZ3VzIHFoICVwIHN0YXRlICVkXG4iLAorCQkJCQlxaCwgcWgtPnFoX3N0YXRlKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCS8qIHJlc2NoZWR1bGUgUUggaWZmIGFub3RoZXIgcmVxdWVzdCBpcyBxdWV1ZWQgKi8KKwkJaWYgKCFsaXN0X2VtcHR5ICgmcWgtPnF0ZF9saXN0KQorCQkJCSYmIEhDX0lTX1JVTk5JTkcgKGhjZC0+c3RhdGUpKSB7CisJCQlpbnQgc3RhdHVzOworCisJCQlzdGF0dXMgPSBxaF9zY2hlZHVsZSAoZWhjaSwgcWgpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKworCQkJaWYgKHN0YXR1cyAhPSAwKSB7CisJCQkJLy8gc2hvdWxkbid0IGhhcHBlbiBvZnRlbiwgYnV0IC4uLgorCQkJCS8vIEZJWE1FIGtpbGwgdGhvc2UgdGRzJyB1cmJzCisJCQkJZXJyICgiY2FuJ3QgcmVzY2hlZHVsZSBxaCAlcCwgZXJyICVkIiwKKwkJCQkJcWgsIHN0YXR1cyk7CisJCQl9CisJCQlyZXR1cm4gc3RhdHVzOworCQl9CisJCWJyZWFrOworCisJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQkvLyBpdGQgb3Igc2l0ZCAuLi4KKworCQkvLyB3YWl0IHRpbGwgbmV4dCBjb21wbGV0aW9uLCBkbyBpdCB0aGVuLgorCQkvLyBjb21wbGV0aW9uIGlycXMgY2FuIHdhaXQgdXAgdG8gMTAyNCBtc2VjLAorCQlicmVhazsKKwl9Citkb25lOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8vIGJ1bGsgcWggaG9sZHMgdGhlIGRhdGEgdG9nZ2xlCisKK3N0YXRpYyB2b2lkCitlaGNpX2VuZHBvaW50X2Rpc2FibGUgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApCit7CisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSA9IGhjZF90b19laGNpIChoY2QpOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXN0cnVjdCBlaGNpX3FoCQkqcWgsICp0bXA7CisKKwkvKiBBU1NFUlQ6ICBhbnkgcmVxdWVzdHMvdXJicyBhcmUgYmVpbmcgdW5saW5rZWQgKi8KKwkvKiBBU1NFUlQ6ICBub2JvZHkgY2FuIGJlIHN1Ym1pdHRpbmcgdXJicyBmb3IgdGhpcyBhbnkgbW9yZSAqLworCityZXNjYW46CisJc3Bpbl9sb2NrX2lycXNhdmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJcWggPSBlcC0+aGNwcml2OworCWlmICghcWgpCisJCWdvdG8gZG9uZTsKKworCS8qIGVuZHBvaW50cyBjYW4gYmUgaXNvIHN0cmVhbXMuICBmb3Igbm93LCB3ZSBkb24ndAorCSAqIGFjY2VsZXJhdGUgaXNvIGNvbXBsZXRpb25zIC4uLiBzbyBzcGluIGEgd2hpbGUuCisJICovCisJaWYgKHFoLT5od19pbmZvMSA9PSAwKSB7CisJCWVoY2lfdmRiZyAoZWhjaSwgImlzbyBkZWxheVxuIik7CisJCWdvdG8gaWRsZV90aW1lb3V0OworCX0KKworCWlmICghSENfSVNfUlVOTklORyAoaGNkLT5zdGF0ZSkpCisJCXFoLT5xaF9zdGF0ZSA9IFFIX1NUQVRFX0lETEU7CisJc3dpdGNoIChxaC0+cWhfc3RhdGUpIHsKKwljYXNlIFFIX1NUQVRFX0xJTktFRDoKKwkJZm9yICh0bXAgPSBlaGNpLT5hc3luYy0+cWhfbmV4dC5xaDsKKwkJCQl0bXAgJiYgdG1wICE9IHFoOworCQkJCXRtcCA9IHRtcC0+cWhfbmV4dC5xaCkKKwkJCWNvbnRpbnVlOworCQkvKiBwZXJpb2RpYyBxaCBzZWxmLXVubGlua3Mgb24gZW1wdHkgKi8KKwkJaWYgKCF0bXApCisJCQlnb3RvIG5vZ29vZDsKKwkJdW5saW5rX2FzeW5jIChlaGNpLCBxaCk7CisJCS8qIEZBTEwgVEhST1VHSCAqLworCWNhc2UgUUhfU1RBVEVfVU5MSU5LOgkJLyogd2FpdCBmb3IgaHcgdG8gZmluaXNoPyAqLworaWRsZV90aW1lb3V0OgorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCQlzZXRfY3VycmVudF9zdGF0ZSAoVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZV90aW1lb3V0ICgxKTsKKwkJZ290byByZXNjYW47CisJY2FzZSBRSF9TVEFURV9JRExFOgkJLyogZnVsbHkgdW5saW5rZWQgKi8KKwkJaWYgKGxpc3RfZW1wdHkgKCZxaC0+cXRkX2xpc3QpKSB7CisJCQlxaF9wdXQgKHFoKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIGVsc2UgRkFMTCBUSFJPVUdIICovCisJZGVmYXVsdDoKK25vZ29vZDoKKwkJLyogY2FsbGVyIHdhcyBzdXBwb3NlZCB0byBoYXZlIHVubGlua2VkIGFueSByZXF1ZXN0czsKKwkJICogdGhhdCdzIG5vdCBvdXIgam9iLiAganVzdCBsZWFrIHRoaXMgbWVtb3J5LgorCQkgKi8KKwkJZWhjaV9lcnIgKGVoY2ksICJxaCAlcCAoIyUwMngpIHN0YXRlICVkJXNcbiIsCisJCQlxaCwgZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcywgcWgtPnFoX3N0YXRlLAorCQkJbGlzdF9lbXB0eSAoJnFoLT5xdGRfbGlzdCkgPyAiIiA6ICIoaGFzIHRkcykiKTsKKwkJYnJlYWs7CisJfQorCWVwLT5oY3ByaXYgPSBOVUxMOworZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCXJldHVybjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgZWhjaV9kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uID0JCWhjZF9uYW1lLAorCS5wcm9kdWN0X2Rlc2MgPQkJIkVIQ0kgSG9zdCBDb250cm9sbGVyIiwKKwkuaGNkX3ByaXZfc2l6ZSA9CXNpemVvZihzdHJ1Y3QgZWhjaV9oY2QpLAorCisJLyoKKwkgKiBnZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UKKwkgKi8KKwkuaXJxID0JCQllaGNpX2lycSwKKwkuZmxhZ3MgPQkJSENEX01FTU9SWSB8IEhDRF9VU0IyLAorCisJLyoKKwkgKiBiYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucworCSAqLworCS5yZXNldCA9CQllaGNpX2hjX3Jlc2V0LAorCS5zdGFydCA9CQllaGNpX3N0YXJ0LAorI2lmZGVmCUNPTkZJR19QTQorCS5zdXNwZW5kID0JCWVoY2lfc3VzcGVuZCwKKwkucmVzdW1lID0JCWVoY2lfcmVzdW1lLAorI2VuZGlmCisJLnN0b3AgPQkJCWVoY2lfc3RvcCwKKworCS8qCisJICogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMKKwkgKi8KKwkudXJiX2VucXVldWUgPQkJZWhjaV91cmJfZW5xdWV1ZSwKKwkudXJiX2RlcXVldWUgPQkJZWhjaV91cmJfZGVxdWV1ZSwKKwkuZW5kcG9pbnRfZGlzYWJsZSA9CWVoY2lfZW5kcG9pbnRfZGlzYWJsZSwKKworCS8qCisJICogc2NoZWR1bGluZyBzdXBwb3J0CisJICovCisJLmdldF9mcmFtZV9udW1iZXIgPQllaGNpX2dldF9mcmFtZSwKKworCS8qCisJICogcm9vdCBodWIgc3VwcG9ydAorCSAqLworCS5odWJfc3RhdHVzX2RhdGEgPQllaGNpX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wgPQkJZWhjaV9odWJfY29udHJvbCwKKwkuaHViX3N1c3BlbmQgPQkJZWhjaV9odWJfc3VzcGVuZCwKKwkuaHViX3Jlc3VtZSA9CQllaGNpX2h1Yl9yZXN1bWUsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBFSENJIDEuMCBkb2Vzbid0IHJlcXVpcmUgUENJICovCisKKyNpZmRlZglDT05GSUdfUENJCisKKy8qIFBDSSBkcml2ZXIgc2VsZWN0aW9uIG1ldGFkYXRhOyBQQ0kgaG90cGx1Z2dpbmcgdXNlcyB0aGlzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkcyBbXSA9IHsgeworCS8qIGhhbmRsZSBhbnkgVVNCIDIuMCBFSENJIGNvbnRyb2xsZXIgKi8KKwlQQ0lfREVWSUNFX0NMQVNTKCgoUENJX0NMQVNTX1NFUklBTF9VU0IgPDwgOCkgfCAweDIwKSwgfjApLAorCS5kcml2ZXJfZGF0YSA9CSh1bnNpZ25lZCBsb25nKSAmZWhjaV9kcml2ZXIsCisJfSwKKwl7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSAocGNpLCBwY2lfaWRzKTsKKworLyogcGNpIGRyaXZlciBnbHVlOyB0aGlzIGlzIGEgIm5ldyBzdHlsZSIgUENJIGRyaXZlciBtb2R1bGUgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBlaGNpX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJKGNoYXIgKikgaGNkX25hbWUsCisJLmlkX3RhYmxlID0JcGNpX2lkcywKKworCS5wcm9iZSA9CXVzYl9oY2RfcGNpX3Byb2JlLAorCS5yZW1vdmUgPQl1c2JfaGNkX3BjaV9yZW1vdmUsCisKKyNpZmRlZglDT05GSUdfUE0KKwkuc3VzcGVuZCA9CXVzYl9oY2RfcGNpX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9oY2RfcGNpX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworI2VuZGlmCS8qIFBDSSAqLworCisKKyNkZWZpbmUgRFJJVkVSX0lORk8gRFJJVkVSX1ZFUlNJT04gIiAiIERSSVZFUl9ERVNDCisKK01PRFVMRV9ERVNDUklQVElPTiAoRFJJVkVSX0lORk8pOworTU9EVUxFX0FVVEhPUiAoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfTElDRU5TRSAoIkdQTCIpOworCitzdGF0aWMgaW50IF9faW5pdCBpbml0ICh2b2lkKSAKK3sKKwlpZiAodXNiX2Rpc2FibGVkKCkpCisJCXJldHVybiAtRU5PREVWOworCisJcHJfZGVidWcgKCIlczogYmxvY2sgc2l6ZXM6IHFoICVaZCBxdGQgJVpkIGl0ZCAlWmQgc2l0ZCAlWmRcbiIsCisJCWhjZF9uYW1lLAorCQlzaXplb2YgKHN0cnVjdCBlaGNpX3FoKSwgc2l6ZW9mIChzdHJ1Y3QgZWhjaV9xdGQpLAorCQlzaXplb2YgKHN0cnVjdCBlaGNpX2l0ZCksIHNpemVvZiAoc3RydWN0IGVoY2lfc2l0ZCkpOworCisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIgKCZlaGNpX3BjaV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQgKGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cCAodm9pZCkgCit7CQorCXBjaV91bnJlZ2lzdGVyX2RyaXZlciAoJmVoY2lfcGNpX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCAoY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM3MzUzNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYwpAQCAtMCwwICsxLDU1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAyIGJ5IERhdmlkIEJyb3duZWxsCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIHRoaXMgZmlsZSBpcyBwYXJ0IG9mIGVoY2ktaGNkLmMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEVIQ0kgUm9vdCBIdWIgLi4uIHRoZSBub25zaGFyYWJsZSBzdHVmZgorICoKKyAqIFJlZ2lzdGVycyBkb24ndCBuZWVkIGNwdV90b19sZTMyLCB0aGF0IGhhcHBlbnMgdHJhbnNwYXJlbnRseQorICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZglDT05GSUdfUE0KKworc3RhdGljIGludCBlaGNpX2h1Yl9zdXNwZW5kIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKKwlpbnQJCQlwb3J0OworCisJaWYgKHRpbWVfYmVmb3JlIChqaWZmaWVzLCBlaGNpLT5uZXh0X3N0YXRlY2hhbmdlKSkKKwkJbXNsZWVwKDUpOworCisJcG9ydCA9IEhDU19OX1BPUlRTIChlaGNpLT5oY3NfcGFyYW1zKTsKKwlzcGluX2xvY2tfaXJxICgmZWhjaS0+bG9jayk7CisKKwkvKiBzdG9wIHNjaGVkdWxlcywgY2xlYW4gYW55IGNvbXBsZXRlZCB3b3JrICovCisJaWYgKEhDX0lTX1JVTk5JTkcoaGNkLT5zdGF0ZSkpIHsKKwkJZWhjaV9xdWllc2NlIChlaGNpKTsKKwkJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1FVSUVTQ0lORzsKKwl9CisJZWhjaS0+Y29tbWFuZCA9IHJlYWRsICgmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJaWYgKGVoY2ktPnJlY2xhaW0pCisJCWVoY2ktPnJlY2xhaW1fcmVhZHkgPSAxOworCWVoY2lfd29yayhlaGNpLCBOVUxMKTsKKworCS8qIHN1c3BlbmQgYW55IGFjdGl2ZS91bnN1c3BlbmRlZCBwb3J0cywgbWF5YmUgYWxsb3cgd2FrZXVwICovCisJd2hpbGUgKHBvcnQtLSkgeworCQl1MzIgX19pb21lbQkqcmVnID0gJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFtwb3J0XTsKKwkJdTMyCQl0MSA9IHJlYWRsIChyZWcpOworCQl1MzIJCXQyID0gdDE7CisKKwkJaWYgKCh0MSAmIFBPUlRfUEUpICYmICEodDEgJiBQT1JUX09XTkVSKSkKKwkJCXQyIHw9IFBPUlRfU1VTUEVORDsKKwkJaWYgKGhjZC0+cmVtb3RlX3dha2V1cCkKKwkJCXQyIHw9IFBPUlRfV0tPQ19FfFBPUlRfV0tESVNDX0V8UE9SVF9XS0NPTk5fRTsKKwkJZWxzZQorCQkJdDIgJj0gfihQT1JUX1dLT0NfRXxQT1JUX1dLRElTQ19FfFBPUlRfV0tDT05OX0UpOworCisJCWlmICh0MSAhPSB0MikgeworCQkJZWhjaV92ZGJnIChlaGNpLCAicG9ydCAlZCwgJTA4eCAtPiAlMDh4XG4iLAorCQkJCXBvcnQgKyAxLCB0MSwgdDIpOworCQkJd3JpdGVsICh0MiwgcmVnKTsKKwkJfQorCX0KKworCS8qIHR1cm4gb2ZmIG5vdy1pZGxlIEhDICovCisJZWhjaV9oYWx0IChlaGNpKTsKKwloY2QtPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOworCisJZWhjaS0+bmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwKTsKKwlzcGluX3VubG9ja19pcnEgKCZlaGNpLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworCisvKiBjYWxsZXIgaGFzIGxvY2tlZCB0aGUgcm9vdCBodWIsIGFuZCBzaG91bGQgcmVzZXQvcmVpbml0IG9uIGVycm9yICovCitzdGF0aWMgaW50IGVoY2lfaHViX3Jlc3VtZSAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gaGNkX3RvX2VoY2kgKGhjZCk7CisJdTMyCQkJdGVtcDsKKwlpbnQJCQlpOworCWludAkJCWludHJfZW5hYmxlOworCisJaWYgKHRpbWVfYmVmb3JlIChqaWZmaWVzLCBlaGNpLT5uZXh0X3N0YXRlY2hhbmdlKSkKKwkJbXNsZWVwKDUpOworCXNwaW5fbG9ja19pcnEgKCZlaGNpLT5sb2NrKTsKKworCS8qIHJlLWluaXQgb3BlcmF0aW9uYWwgcmVnaXN0ZXJzIGluIGNhc2Ugd2UgbG9zdCBwb3dlciAqLworCWlmIChyZWFkbCAoJmVoY2ktPnJlZ3MtPmludHJfZW5hYmxlKSA9PSAwKSB7CisgCQkvKiBhdCBsZWFzdCBzb21lIEFQTSBpbXBsZW1lbnRhdGlvbnMgd2lsbCB0cnkgdG8gZGVsaXZlcgorCQkgKiBJUlFzIHJpZ2h0IGF3YXksIHNvIGRlbGF5IHRoZW0gdW50aWwgd2UncmUgcmVhZHkuCisgCQkgKi8KKyAJCWludHJfZW5hYmxlID0gMTsKKwkJd3JpdGVsICgwLCAmZWhjaS0+cmVncy0+c2VnbWVudCk7CisJCXdyaXRlbCAoZWhjaS0+cGVyaW9kaWNfZG1hLCAmZWhjaS0+cmVncy0+ZnJhbWVfbGlzdCk7CisJCXdyaXRlbCAoKHUzMillaGNpLT5hc3luYy0+cWhfZG1hLCAmZWhjaS0+cmVncy0+YXN5bmNfbmV4dCk7CisJfSBlbHNlCisJCWludHJfZW5hYmxlID0gMDsKKwllaGNpX2RiZyhlaGNpLCAicmVzdW1lIHJvb3QgaHViJXNcbiIsCisJCQlpbnRyX2VuYWJsZSA/ICIgYWZ0ZXIgcG93ZXIgbG9zcyIgOiAiIik7CisKKwkvKiByZXN0b3JlIENNRF9SVU4sIGZyYW1lbGlzdCBzaXplLCBhbmQgaXJxIHRocmVzaG9sZCAqLworCXdyaXRlbCAoZWhjaS0+Y29tbWFuZCwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOworCisJLyogdGFrZSBwb3J0cyBvdXQgb2Ygc3VzcGVuZCAqLworCWkgPSBIQ1NfTl9QT1JUUyAoZWhjaS0+aGNzX3BhcmFtcyk7CisJd2hpbGUgKGktLSkgeworCQl0ZW1wID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbaV0pOworCQl0ZW1wICY9IH4oUE9SVF9XS09DX0V8UE9SVF9XS0RJU0NfRXxQT1JUX1dLQ09OTl9FKTsKKwkJaWYgKHRlbXAgJiBQT1JUX1NVU1BFTkQpIHsKKwkJCWVoY2ktPnJlc2V0X2RvbmUgW2ldID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMgKDIwKTsKKwkJCXRlbXAgfD0gUE9SVF9SRVNVTUU7CisJCX0KKwkJd3JpdGVsICh0ZW1wLCAmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW2ldKTsKKwl9CisJaSA9IEhDU19OX1BPUlRTIChlaGNpLT5oY3NfcGFyYW1zKTsKKwltZGVsYXkgKDIwKTsKKwl3aGlsZSAoaS0tKSB7CisJCXRlbXAgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFtpXSk7CisJCWlmICgodGVtcCAmIFBPUlRfU1VTUEVORCkgPT0gMCkKKwkJCWNvbnRpbnVlOworCQl0ZW1wICY9IH5QT1JUX1JFU1VNRTsKKwkJd3JpdGVsICh0ZW1wLCAmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW2ldKTsKKwkJZWhjaV92ZGJnIChlaGNpLCAicmVzdW1lZCBwb3J0ICVkXG4iLCBpICsgMSk7CisJfQorCSh2b2lkKSByZWFkbCAoJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOworCisJLyogbWF5YmUgcmUtYWN0aXZhdGUgdGhlIHNjaGVkdWxlKHMpICovCisJdGVtcCA9IDA7CisJaWYgKGVoY2ktPmFzeW5jLT5xaF9uZXh0LnFoKQorCQl0ZW1wIHw9IENNRF9BU0U7CisJaWYgKGVoY2ktPnBlcmlvZGljX3NjaGVkKQorCQl0ZW1wIHw9IENNRF9QU0U7CisJaWYgKHRlbXApIHsKKwkJZWhjaS0+Y29tbWFuZCB8PSB0ZW1wOworCQl3cml0ZWwgKGVoY2ktPmNvbW1hbmQsICZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKwl9CisKKwllaGNpLT5uZXh0X3N0YXRlY2hhbmdlID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNSk7CisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisKKwkvKiBOb3cgd2UgY2FuIHNhZmVseSByZS1lbmFibGUgaXJxcyAqLworCWlmIChpbnRyX2VuYWJsZSkKKwkJd3JpdGVsIChJTlRSX01BU0ssICZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSk7CisKKwlzcGluX3VubG9ja19pcnEgKCZlaGNpLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKworI2RlZmluZSBlaGNpX2h1Yl9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgZWhjaV9odWJfcmVzdW1lCQlOVUxMCisKKyNlbmRpZgkvKiBDT05GSUdfUE0gKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBjaGVja19yZXNldF9jb21wbGV0ZSAoCisJc3RydWN0IGVoY2lfaGNkCSplaGNpLAorCWludAkJaW5kZXgsCisJaW50CQlwb3J0X3N0YXR1cworKSB7CisJaWYgKCEocG9ydF9zdGF0dXMgJiBQT1JUX0NPTk5FQ1QpKSB7CisJCWVoY2ktPnJlc2V0X2RvbmUgW2luZGV4XSA9IDA7CisJCXJldHVybiBwb3J0X3N0YXR1czsKKwl9CisKKwkvKiBpZiByZXNldCBmaW5pc2hlZCBhbmQgaXQncyBzdGlsbCBub3QgZW5hYmxlZCAtLSBoYW5kb2ZmICovCisJaWYgKCEocG9ydF9zdGF0dXMgJiBQT1JUX1BFKSkgeworCisJCS8qIHdpdGggaW50ZWdyYXRlZCBUVCwgdGhlcmUncyBub2JvZHkgdG8gaGFuZCBpdCB0byEgKi8KKwkJaWYgKGVoY2lfaXNfVERJKGVoY2kpKSB7CisJCQllaGNpX2RiZyAoZWhjaSwKKwkJCQkiRmFpbGVkIHRvIGVuYWJsZSBwb3J0ICVkIG9uIHJvb3QgaHViIFRUXG4iLAorCQkJCWluZGV4KzEpOworCQkJcmV0dXJuIHBvcnRfc3RhdHVzOworCQl9CisKKwkJZWhjaV9kYmcgKGVoY2ksICJwb3J0ICVkIGZ1bGwgc3BlZWQgLS0+IGNvbXBhbmlvblxuIiwKKwkJCWluZGV4ICsgMSk7CisKKwkJLy8gd2hhdCBoYXBwZW5zIGlmIEhDU19OX0NDKHBhcmFtcykgPT0gMCA/CisJCXBvcnRfc3RhdHVzIHw9IFBPUlRfT1dORVI7CisJCXdyaXRlbCAocG9ydF9zdGF0dXMsICZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbaW5kZXhdKTsKKworCX0gZWxzZQorCQllaGNpX2RiZyAoZWhjaSwgInBvcnQgJWQgaGlnaCBzcGVlZFxuIiwgaW5kZXggKyAxKTsKKworCXJldHVybiBwb3J0X3N0YXR1czsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisvKiBidWlsZCAic3RhdHVzIGNoYW5nZSIgcGFja2V0IChvbmUgb3IgdHdvIGJ5dGVzKSBmcm9tIEhDIHJlZ2lzdGVycyAqLworCitzdGF0aWMgaW50CitlaGNpX2h1Yl9zdGF0dXNfZGF0YSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBlaGNpX2hjZAkqZWhjaSA9IGhjZF90b19laGNpIChoY2QpOworCXUzMgkJdGVtcCwgc3RhdHVzID0gMDsKKwlpbnQJCXBvcnRzLCBpLCByZXR2YWwgPSAxOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwkvKiBpZiAhVVNCX1NVU1BFTkQsIHJvb3QgaHViIHRpbWVycyB3b24ndCBnZXQgc2h1dCBkb3duIC4uLiAqLworCWlmICghSENfSVNfUlVOTklORyhoY2QtPnN0YXRlKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBpbml0IHN0YXR1cyB0byBuby1jaGFuZ2VzICovCisJYnVmIFswXSA9IDA7CisJcG9ydHMgPSBIQ1NfTl9QT1JUUyAoZWhjaS0+aGNzX3BhcmFtcyk7CisJaWYgKHBvcnRzID4gNykgeworCQlidWYgWzFdID0gMDsKKwkJcmV0dmFsKys7CisJfQorCQorCS8qIG5vIGh1YiBjaGFuZ2UgcmVwb3J0cyAoYml0IDApIGZvciBub3cgKHBvd2VyLCAuLi4pICovCisKKwkvKiBwb3J0IE4gY2hhbmdlcyAoYml0IE4pPyAqLworCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBwb3J0czsgaSsrKSB7CisJCXRlbXAgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFtpXSk7CisJCWlmICh0ZW1wICYgUE9SVF9PV05FUikgeworCQkJLyogZG9uJ3QgcmVwb3J0IHRoaXMgaW4gR2V0UG9ydFN0YXR1cyAqLworCQkJaWYgKHRlbXAgJiBQT1JUX0NTQykgeworCQkJCXRlbXAgJj0gflBPUlRfQ1NDOworCQkJCXdyaXRlbCAodGVtcCwgJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFtpXSk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoISh0ZW1wICYgUE9SVF9DT05ORUNUKSkKKwkJCWVoY2ktPnJlc2V0X2RvbmUgW2ldID0gMDsKKwkJaWYgKCh0ZW1wICYgKFBPUlRfQ1NDIHwgUE9SVF9QRUMgfCBQT1JUX09DQykpICE9IDAKKwkJCQkvLyBQT1JUX1NUQVRfQ19TVVNQRU5EPworCQkJCXx8ICgodGVtcCAmIFBPUlRfUkVTVU1FKSAhPSAwCisJCQkJCSYmIHRpbWVfYWZ0ZXIgKGppZmZpZXMsCisJCQkJCQllaGNpLT5yZXNldF9kb25lIFtpXSkpKSB7CisJCQlpZiAoaSA8IDcpCisJCQkgICAgYnVmIFswXSB8PSAxIDw8IChpICsgMSk7CisJCQllbHNlCisJCQkgICAgYnVmIFsxXSB8PSAxIDw8IChpIC0gNyk7CisJCQlzdGF0dXMgPSBTVFNfUENEOworCQl9CisJfQorCS8qIEZJWE1FIGF1dG9zdXNwZW5kIGlkbGUgcm9vdCBodWJzICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gc3RhdHVzID8gcmV0dmFsIDogMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK2VoY2lfaHViX2Rlc2NyaXB0b3IgKAorCXN0cnVjdCBlaGNpX2hjZAkJCSplaGNpLAorCXN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IJKmRlc2MKKykgeworCWludAkJcG9ydHMgPSBIQ1NfTl9QT1JUUyAoZWhjaS0+aGNzX3BhcmFtcyk7CisJdTE2CQl0ZW1wOworCisJZGVzYy0+YkRlc2NyaXB0b3JUeXBlID0gMHgyOTsKKwlkZXNjLT5iUHdyT24yUHdyR29vZCA9IDEwOwkvKiBlaGNpIDEuMCwgMi4zLjkgc2F5cyAyMG1zIG1heCAqLworCWRlc2MtPmJIdWJDb250ckN1cnJlbnQgPSAwOworCisJZGVzYy0+Yk5iclBvcnRzID0gcG9ydHM7CisJdGVtcCA9IDEgKyAocG9ydHMgLyA4KTsKKwlkZXNjLT5iRGVzY0xlbmd0aCA9IDcgKyAyICogdGVtcDsKKworCS8qIHR3byBiaXRtYXBzOiAgcG9ydHMgcmVtb3ZhYmxlLCBhbmQgdXNiIDEuMCBsZWdhY3kgUG9ydFB3ckN0cmxNYXNrICovCisJbWVtc2V0ICgmZGVzYy0+Yml0bWFwIFswXSwgMCwgdGVtcCk7CisJbWVtc2V0ICgmZGVzYy0+Yml0bWFwIFt0ZW1wXSwgMHhmZiwgdGVtcCk7CisKKwl0ZW1wID0gMHgwMDA4OwkJCS8qIHBlci1wb3J0IG92ZXJjdXJyZW50IHJlcG9ydGluZyAqLworCWlmIChIQ1NfUFBDIChlaGNpLT5oY3NfcGFyYW1zKSkKKwkJdGVtcCB8PSAweDAwMDE7CQkvKiBwZXItcG9ydCBwb3dlciBjb250cm9sICovCisjaWYgMAorLy8gcmUtZW5hYmxlIHdoZW4gd2Ugc3VwcG9ydCBVU0JfUE9SVF9GRUFUX0lORElDQVRPUiBiZWxvdy4KKwlpZiAoSENTX0lORElDQVRPUiAoZWhjaS0+aGNzX3BhcmFtcykpCisJCXRlbXAgfD0gMHgwMDgwOwkJLyogcGVyLXBvcnQgaW5kaWNhdG9ycyAoTEVEcykgKi8KKyNlbmRpZgorCWRlc2MtPndIdWJDaGFyYWN0ZXJpc3RpY3MgPSAoX19mb3JjZSBfX3UxNiljcHVfdG9fbGUxNiAodGVtcCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUJUE9SVF9XQUtFX0JJVFMgCShQT1JUX1dLT0NfRXxQT1JUX1dLRElTQ19FfFBPUlRfV0tDT05OX0UpCisKK3N0YXRpYyBpbnQgZWhjaV9odWJfY29udHJvbCAoCisJc3RydWN0IHVzYl9oY2QJKmhjZCwKKwl1MTYJCXR5cGVSZXEsCisJdTE2CQl3VmFsdWUsCisJdTE2CQl3SW5kZXgsCisJY2hhcgkJKmJ1ZiwKKwl1MTYJCXdMZW5ndGgKKykgeworCXN0cnVjdCBlaGNpX2hjZAkqZWhjaSA9IGhjZF90b19laGNpIChoY2QpOworCWludAkJcG9ydHMgPSBIQ1NfTl9QT1JUUyAoZWhjaS0+aGNzX3BhcmFtcyk7CisJdTMyCQl0ZW1wLCBzdGF0dXM7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwlpbnQJCXJldHZhbCA9IDA7CisKKwkvKgorCSAqIEZJWE1FOiAgc3VwcG9ydCBTZXRQb3J0RmVhdHVyZXMgVVNCX1BPUlRfRkVBVF9JTkRJQ0FUT1IuCisJICogSENTX0lORElDQVRPUiBtYXkgc2F5IHdlIGNhbiBjaGFuZ2UgTEVEcyB0byBvZmYvYW1iZXIvZ3JlZW4uCisJICogKHRyYWNrIGN1cnJlbnQgc3RhdGUgb3Vyc2VsdmVzKSAuLi4gYmxpbmsgZm9yIGRpYWdub3N0aWNzLAorCSAqIHBvd2VyLCAidGhpcyBpcyB0aGUgb25lIiwgZXRjLiAgRUhDSSBzcGVjIHN1cHBvcnRzIHRoaXMuCisJICovCisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlzd2l0Y2ggKHR5cGVSZXEpIHsKKwljYXNlIENsZWFySHViRmVhdHVyZToKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBDX0hVQl9MT0NBTF9QT1dFUjoKKwkJY2FzZSBDX0hVQl9PVkVSX0NVUlJFTlQ6CisJCQkvKiBubyBodWItd2lkZSBmZWF0dXJlL3N0YXR1cyBmbGFncyAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQl9CisJCWJyZWFrOworCWNhc2UgQ2xlYXJQb3J0RmVhdHVyZToKKwkJaWYgKCF3SW5kZXggfHwgd0luZGV4ID4gcG9ydHMpCisJCQlnb3RvIGVycm9yOworCQl3SW5kZXgtLTsKKwkJdGVtcCA9IHJlYWRsICgmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW3dJbmRleF0pOworCQlpZiAodGVtcCAmIFBPUlRfT1dORVIpCisJCQlicmVhazsKKworCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIFVTQl9QT1JUX0ZFQVRfRU5BQkxFOgorCQkJd3JpdGVsICh0ZW1wICYgflBPUlRfUEUsCisJCQkJJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFt3SW5kZXhdKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19FTkFCTEU6CisJCQl3cml0ZWwgKHRlbXAgfCBQT1JUX1BFQywKKwkJCQkmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW3dJbmRleF0pOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9TVVNQRU5EOgorCQkJaWYgKHRlbXAgJiBQT1JUX1JFU0VUKQorCQkJCWdvdG8gZXJyb3I7CisJCQlpZiAodGVtcCAmIFBPUlRfU1VTUEVORCkgeworCQkJCWlmICgodGVtcCAmIFBPUlRfUEUpID09IDApCisJCQkJCWdvdG8gZXJyb3I7CisJCQkJLyogcmVzdW1lIHNpZ25hbGluZyBmb3IgMjAgbXNlYyAqLworCQkJCXdyaXRlbCAoKHRlbXAgJiB+UE9SVF9XQUtFX0JJVFMpIHwgUE9SVF9SRVNVTUUsCisJCQkJCSZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbd0luZGV4XSk7CisJCQkJZWhjaS0+cmVzZXRfZG9uZSBbd0luZGV4XSA9IGppZmZpZXMKKwkJCQkJCSsgbXNlY3NfdG9famlmZmllcyAoMjApOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQ6CisJCQkvKiB3ZSBhdXRvLWNsZWFyIHRoaXMgZmVhdHVyZSAqLworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKKwkJCWlmIChIQ1NfUFBDIChlaGNpLT5oY3NfcGFyYW1zKSkKKwkJCQl3cml0ZWwgKHRlbXAgJiB+UE9SVF9QT1dFUiwKKwkJCQkJJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFt3SW5kZXhdKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OOgorCQkJd3JpdGVsICh0ZW1wIHwgUE9SVF9DU0MsCisJCQkJJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFt3SW5kZXhdKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19PVkVSX0NVUlJFTlQ6CisJCQl3cml0ZWwgKHRlbXAgfCBQT1JUX09DQywKKwkJCQkmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW3dJbmRleF0pOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX1JFU0VUOgorCQkJLyogR2V0UG9ydFN0YXR1cyBjbGVhcnMgcmVzZXQgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBlcnJvcjsKKwkJfQorCQlyZWFkbCAoJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOwkvKiB1bmJsb2NrIHBvc3RlZCB3cml0ZSAqLworCQlicmVhazsKKwljYXNlIEdldEh1YkRlc2NyaXB0b3I6CisJCWVoY2lfaHViX2Rlc2NyaXB0b3IgKGVoY2ksIChzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yICopCisJCQlidWYpOworCQlicmVhazsKKwljYXNlIEdldEh1YlN0YXR1czoKKwkJLyogbm8gaHViLXdpZGUgZmVhdHVyZS9zdGF0dXMgZmxhZ3MgKi8KKwkJbWVtc2V0IChidWYsIDAsIDQpOworCQkvL2NwdV90b19sZTMycyAoKHUzMiAqKSBidWYpOworCQlicmVhazsKKwljYXNlIEdldFBvcnRTdGF0dXM6CisJCWlmICghd0luZGV4IHx8IHdJbmRleCA+IHBvcnRzKQorCQkJZ290byBlcnJvcjsKKwkJd0luZGV4LS07CisJCXN0YXR1cyA9IDA7CisJCXRlbXAgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFt3SW5kZXhdKTsKKworCQkvLyB3UG9ydENoYW5nZSBiaXRzCisJCWlmICh0ZW1wICYgUE9SVF9DU0MpCisJCQlzdGF0dXMgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTjsKKwkJaWYgKHRlbXAgJiBQT1JUX1BFQykKKwkJCXN0YXR1cyB8PSAxIDw8IFVTQl9QT1JUX0ZFQVRfQ19FTkFCTEU7CisJCWlmICh0ZW1wICYgUE9SVF9PQ0MpCisJCQlzdGF0dXMgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX0NfT1ZFUl9DVVJSRU5UOworCisJCS8qIHdob2V2ZXIgcmVzdW1lcyBtdXN0IEdldFBvcnRTdGF0dXMgdG8gY29tcGxldGUgaXQhISAqLworCQlpZiAoKHRlbXAgJiBQT1JUX1JFU1VNRSkKKwkJCQkmJiB0aW1lX2FmdGVyIChqaWZmaWVzLAorCQkJCQllaGNpLT5yZXNldF9kb25lIFt3SW5kZXhdKSkgeworCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQ7CisJCQllaGNpLT5yZXNldF9kb25lIFt3SW5kZXhdID0gMDsKKworCQkJLyogc3RvcCByZXN1bWUgc2lnbmFsaW5nICovCisJCQl0ZW1wID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbd0luZGV4XSk7CisJCQl3cml0ZWwgKHRlbXAgJiB+UE9SVF9SRVNVTUUsCisJCQkJJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFt3SW5kZXhdKTsKKwkJCXJldHZhbCA9IGhhbmRzaGFrZSAoCisJCQkJCSZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbd0luZGV4XSwKKwkJCQkJUE9SVF9SRVNVTUUsIDAsIDIwMDAgLyogMm1zZWMgKi8pOworCQkJaWYgKHJldHZhbCAhPSAwKSB7CisJCQkJZWhjaV9lcnIgKGVoY2ksICJwb3J0ICVkIHJlc3VtZSBlcnJvciAlZFxuIiwKKwkJCQkJd0luZGV4ICsgMSwgcmV0dmFsKTsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCQkJdGVtcCAmPSB+KFBPUlRfU1VTUEVORHxQT1JUX1JFU1VNRXwoMzw8MTApKTsKKwkJfQorCisJCS8qIHdob2V2ZXIgcmVzZXRzIG11c3QgR2V0UG9ydFN0YXR1cyB0byBjb21wbGV0ZSBpdCEhICovCisJCWlmICgodGVtcCAmIFBPUlRfUkVTRVQpCisJCQkJJiYgdGltZV9hZnRlciAoamlmZmllcywKKwkJCQkJZWhjaS0+cmVzZXRfZG9uZSBbd0luZGV4XSkpIHsKKwkJCXN0YXR1cyB8PSAxIDw8IFVTQl9QT1JUX0ZFQVRfQ19SRVNFVDsKKwkJCWVoY2ktPnJlc2V0X2RvbmUgW3dJbmRleF0gPSAwOworCisJCQkvKiBmb3JjZSByZXNldCB0byBjb21wbGV0ZSAqLworCQkJd3JpdGVsICh0ZW1wICYgflBPUlRfUkVTRVQsCisJCQkJCSZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbd0luZGV4XSk7CisJCQlyZXR2YWwgPSBoYW5kc2hha2UgKAorCQkJCQkmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW3dJbmRleF0sCisJCQkJCVBPUlRfUkVTRVQsIDAsIDUwMCk7CisJCQlpZiAocmV0dmFsICE9IDApIHsKKwkJCQllaGNpX2VyciAoZWhjaSwgInBvcnQgJWQgcmVzZXQgZXJyb3IgJWRcbiIsCisJCQkJCXdJbmRleCArIDEsIHJldHZhbCk7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKworCQkJLyogc2VlIHdoYXQgd2UgZm91bmQgb3V0ICovCisJCQl0ZW1wID0gY2hlY2tfcmVzZXRfY29tcGxldGUgKGVoY2ksIHdJbmRleCwKKwkJCQlyZWFkbCAoJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFt3SW5kZXhdKSk7CisJCX0KKworCQkvLyBkb24ndCBzaG93IHdQb3J0U3RhdHVzIGlmIGl0J3Mgb3duZWQgYnkgYSBjb21wYW5pb24gaGMKKwkJaWYgKCEodGVtcCAmIFBPUlRfT1dORVIpKSB7CisJCQlpZiAodGVtcCAmIFBPUlRfQ09OTkVDVCkgeworCQkJCXN0YXR1cyB8PSAxIDw8IFVTQl9QT1JUX0ZFQVRfQ09OTkVDVElPTjsKKwkJCQkvLyBzdGF0dXMgbWF5IGJlIGZyb20gaW50ZWdyYXRlZCBUVAorCQkJCXN0YXR1cyB8PSBlaGNpX3BvcnRfc3BlZWQoZWhjaSwgdGVtcCk7CisJCQl9CisJCQlpZiAodGVtcCAmIFBPUlRfUEUpCisJCQkJc3RhdHVzIHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9FTkFCTEU7CisJCQlpZiAodGVtcCAmIChQT1JUX1NVU1BFTkR8UE9SVF9SRVNVTUUpKQorCQkJCXN0YXR1cyB8PSAxIDw8IFVTQl9QT1JUX0ZFQVRfU1VTUEVORDsKKwkJCWlmICh0ZW1wICYgUE9SVF9PQykKKwkJCQlzdGF0dXMgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX09WRVJfQ1VSUkVOVDsKKwkJCWlmICh0ZW1wICYgUE9SVF9SRVNFVCkKKwkJCQlzdGF0dXMgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX1JFU0VUOworCQkJaWYgKHRlbXAgJiBQT1JUX1BPV0VSKQorCQkJCXN0YXR1cyB8PSAxIDw8IFVTQl9QT1JUX0ZFQVRfUE9XRVI7CisJCX0KKworI2lmbmRlZglFSENJX1ZFUkJPU0VfREVCVUcKKwlpZiAoc3RhdHVzICYgfjB4ZmZmZikJLyogb25seSBpZiB3UG9ydENoYW5nZSBpcyBpbnRlcmVzdGluZyAqLworI2VuZGlmCisJCWRiZ19wb3J0IChlaGNpLCAiR2V0U3RhdHVzIiwgd0luZGV4ICsgMSwgdGVtcCk7CisJCS8vIHdlICJrbm93IiB0aGlzIGFsaWdubWVudCBpcyBnb29kLCBjYWxsZXIgdXNlZCBrbWFsbG9jKCkuLi4KKwkJKigoX19sZTMyICopIGJ1ZikgPSBjcHVfdG9fbGUzMiAoc3RhdHVzKTsKKwkJYnJlYWs7CisJY2FzZSBTZXRIdWJGZWF0dXJlOgorCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIENfSFVCX0xPQ0FMX1BPV0VSOgorCQljYXNlIENfSFVCX09WRVJfQ1VSUkVOVDoKKwkJCS8qIG5vIGh1Yi13aWRlIGZlYXR1cmUvc3RhdHVzIGZsYWdzICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTZXRQb3J0RmVhdHVyZToKKwkJaWYgKCF3SW5kZXggfHwgd0luZGV4ID4gcG9ydHMpCisJCQlnb3RvIGVycm9yOworCQl3SW5kZXgtLTsKKwkJdGVtcCA9IHJlYWRsICgmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW3dJbmRleF0pOworCQlpZiAodGVtcCAmIFBPUlRfT1dORVIpCisJCQlicmVhazsKKworCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKKwkJCWlmICgodGVtcCAmIFBPUlRfUEUpID09IDAKKwkJCQkJfHwgKHRlbXAgJiBQT1JUX1JFU0VUKSAhPSAwKQorCQkJCWdvdG8gZXJyb3I7CisJCQlpZiAoaGNkLT5yZW1vdGVfd2FrZXVwKQorCQkJCXRlbXAgfD0gUE9SVF9XQUtFX0JJVFM7CisJCQl3cml0ZWwgKHRlbXAgfCBQT1JUX1NVU1BFTkQsCisJCQkJJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFt3SW5kZXhdKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUE9XRVI6CisJCQlpZiAoSENTX1BQQyAoZWhjaS0+aGNzX3BhcmFtcykpCisJCQkJd3JpdGVsICh0ZW1wIHwgUE9SVF9QT1dFUiwKKwkJCQkJJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzIFt3SW5kZXhdKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUkVTRVQ6CisJCQlpZiAodGVtcCAmIFBPUlRfUkVTVU1FKQorCQkJCWdvdG8gZXJyb3I7CisJCQkvKiBsaW5lIHN0YXR1cyBiaXRzIG1heSByZXBvcnQgdGhpcyBhcyBsb3cgc3BlZWQsCisJCQkgKiB3aGljaCBjYW4gYmUgZmluZSBpZiB0aGlzIHJvb3QgaHViIGhhcyBhCisJCQkgKiB0cmFuc2FjdGlvbiB0cmFuc2xhdG9yIGJ1aWx0IGluLgorCQkJICovCisJCQlpZiAoKHRlbXAgJiAoUE9SVF9QRXxQT1JUX0NPTk5FQ1QpKSA9PSBQT1JUX0NPTk5FQ1QKKwkJCQkJJiYgIWVoY2lfaXNfVERJKGVoY2kpCisJCQkJCSYmIFBPUlRfVVNCMTEgKHRlbXApKSB7CisJCQkJZWhjaV9kYmcgKGVoY2ksCisJCQkJCSJwb3J0ICVkIGxvdyBzcGVlZCAtLT4gY29tcGFuaW9uXG4iLAorCQkJCQl3SW5kZXggKyAxKTsKKwkJCQl0ZW1wIHw9IFBPUlRfT1dORVI7CisJCQl9IGVsc2UgeworCQkJCWVoY2lfdmRiZyAoZWhjaSwgInBvcnQgJWQgcmVzZXRcbiIsIHdJbmRleCArIDEpOworCQkJCXRlbXAgfD0gUE9SVF9SRVNFVDsKKwkJCQl0ZW1wICY9IH5QT1JUX1BFOworCisJCQkJLyoKKwkJCQkgKiBjYWxsZXIgbXVzdCB3YWl0LCB0aGVuIGNhbGwgR2V0UG9ydFN0YXR1cworCQkJCSAqIHVzYiAyLjAgc3BlYyBzYXlzIDUwIG1zIHJlc2V0cyBvbiByb290CisJCQkJICovCisJCQkJZWhjaS0+cmVzZXRfZG9uZSBbd0luZGV4XSA9IGppZmZpZXMKKwkJCQkJCSsgbXNlY3NfdG9famlmZmllcyAoNTApOworCQkJfQorCQkJd3JpdGVsICh0ZW1wLCAmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW3dJbmRleF0pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQl9CisJCXJlYWRsICgmZWhjaS0+cmVncy0+Y29tbWFuZCk7CS8qIHVuYmxvY2sgcG9zdGVkIHdyaXRlcyAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CitlcnJvcjoKKwkJLyogInN0YWxsIiBvbiBlcnJvciAqLworCQlyZXR2YWwgPSAtRVBJUEU7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1tZW0uYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1tZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTM4Njk3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW1lbS5jCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAxIGJ5IERhdmlkIEJyb3duZWxsCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIHRoaXMgZmlsZSBpcyBwYXJ0IG9mIGVoY2ktaGNkLmMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFRoZXJlJ3MgYmFzaWNhbGx5IHRocmVlIHR5cGVzIG9mIG1lbW9yeToKKyAqCS0gZGF0YSB1c2VkIG9ubHkgYnkgdGhlIEhDRCAuLi4ga21hbGxvYyBpcyBmaW5lCisgKgktIGFzeW5jIGFuZCBwZXJpb2RpYyBzY2hlZHVsZXMsIHNoYXJlZCBieSBIQyBhbmQgSENEIC4uLiB0aGVzZQorICoJICBuZWVkIHRvIHVzZSBkbWFfcG9vbCBvciBkbWFfYWxsb2NfY29oZXJlbnQKKyAqCS0gZHJpdmVyIGJ1ZmZlcnMsIHJlYWQvd3JpdHRlbiBieSBIQyAuLi4gc2luZ2xlIHNob3QgRE1BIG1hcHBlZCAKKyAqCisgKiBUaGVyZSdzIGFsc28gUENJICJyZWdpc3RlciIgZGF0YSwgd2hpY2ggaXMgbWVtb3J5IG1hcHBlZC4KKyAqIE5vIG1lbW9yeSBzZWVuIGJ5IHRoaXMgZHJpdmVyIGlzIHBhZ2VhYmxlLgorICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEFsbG9jYXRlIHRoZSBrZXkgdHJhbnNmZXIgc3RydWN0dXJlcyBmcm9tIHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBwb29sICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlaGNpX3F0ZF9pbml0IChzdHJ1Y3QgZWhjaV9xdGQgKnF0ZCwgZG1hX2FkZHJfdCBkbWEpCit7CisJbWVtc2V0IChxdGQsIDAsIHNpemVvZiAqcXRkKTsKKwlxdGQtPnF0ZF9kbWEgPSBkbWE7CisJcXRkLT5od190b2tlbiA9IGNwdV90b19sZTMyIChRVERfU1RTX0hBTFQpOworCXF0ZC0+aHdfbmV4dCA9IEVIQ0lfTElTVF9FTkQ7CisJcXRkLT5od19hbHRfbmV4dCA9IEVIQ0lfTElTVF9FTkQ7CisJSU5JVF9MSVNUX0hFQUQgKCZxdGQtPnF0ZF9saXN0KTsKK30KKworc3RhdGljIHN0cnVjdCBlaGNpX3F0ZCAqZWhjaV9xdGRfYWxsb2MgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgaW50IGZsYWdzKQoreworCXN0cnVjdCBlaGNpX3F0ZAkJKnF0ZDsKKwlkbWFfYWRkcl90CQlkbWE7CisKKwlxdGQgPSBkbWFfcG9vbF9hbGxvYyAoZWhjaS0+cXRkX3Bvb2wsIGZsYWdzLCAmZG1hKTsKKwlpZiAocXRkICE9IE5VTEwpIHsKKwkJZWhjaV9xdGRfaW5pdCAocXRkLCBkbWEpOworCX0KKwlyZXR1cm4gcXRkOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZWhjaV9xdGRfZnJlZSAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9xdGQgKnF0ZCkKK3sKKwlkbWFfcG9vbF9mcmVlIChlaGNpLT5xdGRfcG9vbCwgcXRkLCBxdGQtPnF0ZF9kbWEpOworfQorCisKK3N0YXRpYyB2b2lkIHFoX2Rlc3Ryb3kgKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBlaGNpX3FoICpxaCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZWhjaV9xaCwga3JlZik7CisJc3RydWN0IGVoY2lfaGNkICplaGNpID0gcWgtPmVoY2k7CisKKwkvKiBjbGVhbiBxdGRzIGZpcnN0LCBhbmQga25vdyB0aGlzIGlzIG5vdCBsaW5rZWQgKi8KKwlpZiAoIWxpc3RfZW1wdHkgKCZxaC0+cXRkX2xpc3QpIHx8IHFoLT5xaF9uZXh0LnB0cikgeworCQllaGNpX2RiZyAoZWhjaSwgInVudXNlZCBxaCBub3QgZW1wdHkhXG4iKTsKKwkJQlVHICgpOworCX0KKwlpZiAocWgtPmR1bW15KQorCQllaGNpX3F0ZF9mcmVlIChlaGNpLCBxaC0+ZHVtbXkpOworCXVzYl9wdXRfZGV2IChxaC0+ZGV2KTsKKwlkbWFfcG9vbF9mcmVlIChlaGNpLT5xaF9wb29sLCBxaCwgcWgtPnFoX2RtYSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZWhjaV9xaCAqZWhjaV9xaF9hbGxvYyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGVoY2lfcWgJCSpxaDsKKwlkbWFfYWRkcl90CQlkbWE7CisKKwlxaCA9IChzdHJ1Y3QgZWhjaV9xaCAqKQorCQlkbWFfcG9vbF9hbGxvYyAoZWhjaS0+cWhfcG9vbCwgZmxhZ3MsICZkbWEpOworCWlmICghcWgpCisJCXJldHVybiBxaDsKKworCW1lbXNldCAocWgsIDAsIHNpemVvZiAqcWgpOworCWtyZWZfaW5pdCgmcWgtPmtyZWYpOworCXFoLT5laGNpID0gZWhjaTsKKwlxaC0+cWhfZG1hID0gZG1hOworCS8vIElOSVRfTElTVF9IRUFEICgmcWgtPnFoX2xpc3QpOworCUlOSVRfTElTVF9IRUFEICgmcWgtPnF0ZF9saXN0KTsKKworCS8qIGR1bW15IHRkIGVuYWJsZXMgc2FmZSB1cmIgcXVldWluZyAqLworCXFoLT5kdW1teSA9IGVoY2lfcXRkX2FsbG9jIChlaGNpLCBmbGFncyk7CisJaWYgKHFoLT5kdW1teSA9PSBOVUxMKSB7CisJCWVoY2lfZGJnIChlaGNpLCAibm8gZHVtbXkgdGRcbiIpOworCQlkbWFfcG9vbF9mcmVlIChlaGNpLT5xaF9wb29sLCBxaCwgcWgtPnFoX2RtYSk7CisJCXFoID0gTlVMTDsKKwl9CisJcmV0dXJuIHFoOworfQorCisvKiB0byBzaGFyZSBhIHFoIChjcHUgdGhyZWFkcywgb3IgaGMpICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBlaGNpX3FoICpxaF9nZXQgKHN0cnVjdCBlaGNpX3FoICpxaCkKK3sKKwlrcmVmX2dldCgmcWgtPmtyZWYpOworCXJldHVybiBxaDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHFoX3B1dCAoc3RydWN0IGVoY2lfcWggKnFoKQoreworCWtyZWZfcHV0KCZxaC0+a3JlZiwgcWhfZGVzdHJveSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFRoZSBxdWV1ZSBoZWFkcyBhbmQgdHJhbnNmZXIgZGVzY3JpcHRvcnMgYXJlIG1hbmFnZWQgZnJvbSBwb29scyB0aWVkIAorICogdG8gZWFjaCBvZiB0aGUgInBlciBkZXZpY2UiIHN0cnVjdHVyZXMuCisgKiBUaGlzIGlzIHRoZSBpbml0aWFsaXNhdGlvbiBhbmQgY2xlYW51cCBjb2RlLgorICovCisKK3N0YXRpYyB2b2lkIGVoY2lfbWVtX2NsZWFudXAgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSkKK3sKKwlpZiAoZWhjaS0+YXN5bmMpCisJCXFoX3B1dCAoZWhjaS0+YXN5bmMpOworCWVoY2ktPmFzeW5jID0gTlVMTDsKKworCS8qIERNQSBjb25zaXN0ZW50IG1lbW9yeSBhbmQgcG9vbHMgKi8KKwlpZiAoZWhjaS0+cXRkX3Bvb2wpCisJCWRtYV9wb29sX2Rlc3Ryb3kgKGVoY2ktPnF0ZF9wb29sKTsKKwllaGNpLT5xdGRfcG9vbCA9IE5VTEw7CisKKwlpZiAoZWhjaS0+cWhfcG9vbCkgeworCQlkbWFfcG9vbF9kZXN0cm95IChlaGNpLT5xaF9wb29sKTsKKwkJZWhjaS0+cWhfcG9vbCA9IE5VTEw7CisJfQorCisJaWYgKGVoY2ktPml0ZF9wb29sKQorCQlkbWFfcG9vbF9kZXN0cm95IChlaGNpLT5pdGRfcG9vbCk7CisJZWhjaS0+aXRkX3Bvb2wgPSBOVUxMOworCisJaWYgKGVoY2ktPnNpdGRfcG9vbCkKKwkJZG1hX3Bvb2xfZGVzdHJveSAoZWhjaS0+c2l0ZF9wb29sKTsKKwllaGNpLT5zaXRkX3Bvb2wgPSBOVUxMOworCisJaWYgKGVoY2ktPnBlcmlvZGljKQorCQlkbWFfZnJlZV9jb2hlcmVudCAoZWhjaV90b19oY2QoZWhjaSktPnNlbGYuY29udHJvbGxlciwKKwkJCWVoY2ktPnBlcmlvZGljX3NpemUgKiBzaXplb2YgKHUzMiksCisJCQllaGNpLT5wZXJpb2RpYywgZWhjaS0+cGVyaW9kaWNfZG1hKTsKKwllaGNpLT5wZXJpb2RpYyA9IE5VTEw7CisKKwkvKiBzaGFkb3cgcGVyaW9kaWMgdGFibGUgKi8KKwlpZiAoZWhjaS0+cHNoYWRvdykKKwkJa2ZyZWUgKGVoY2ktPnBzaGFkb3cpOworCWVoY2ktPnBzaGFkb3cgPSBOVUxMOworfQorCisvKiByZW1lbWJlciB0byBhZGQgY2xlYW51cCBjb2RlIChhYm92ZSkgaWYgeW91IGFkZCBhbnl0aGluZyBoZXJlICovCitzdGF0aWMgaW50IGVoY2lfbWVtX2luaXQgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgaW50IGZsYWdzKQoreworCWludCBpOworCisJLyogUVREcyBmb3IgY29udHJvbC9idWxrL2ludHIgdHJhbnNmZXJzICovCisJZWhjaS0+cXRkX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUgKCJlaGNpX3F0ZCIsIAorCQkJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuY29udHJvbGxlciwKKwkJCXNpemVvZiAoc3RydWN0IGVoY2lfcXRkKSwKKwkJCTMyIC8qIGJ5dGUgYWxpZ25tZW50IChmb3IgaHcgcGFydHMpICovLAorCQkJNDA5NiAvKiBjYW4ndCBjcm9zcyA0SyAqLyk7CisJaWYgKCFlaGNpLT5xdGRfcG9vbCkgeworCQlnb3RvIGZhaWw7CisJfQorCisJLyogUUhzIGZvciBjb250cm9sL2J1bGsvaW50ciB0cmFuc2ZlcnMgKi8KKwllaGNpLT5xaF9wb29sID0gZG1hX3Bvb2xfY3JlYXRlICgiZWhjaV9xaCIsIAorCQkJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuY29udHJvbGxlciwKKwkJCXNpemVvZiAoc3RydWN0IGVoY2lfcWgpLAorCQkJMzIgLyogYnl0ZSBhbGlnbm1lbnQgKGZvciBodyBwYXJ0cykgKi8sCisJCQk0MDk2IC8qIGNhbid0IGNyb3NzIDRLICovKTsKKwlpZiAoIWVoY2ktPnFoX3Bvb2wpIHsKKwkJZ290byBmYWlsOworCX0KKwllaGNpLT5hc3luYyA9IGVoY2lfcWhfYWxsb2MgKGVoY2ksIGZsYWdzKTsKKwlpZiAoIWVoY2ktPmFzeW5jKSB7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBJVEQgZm9yIGhpZ2ggc3BlZWQgSVNPIHRyYW5zZmVycyAqLworCWVoY2ktPml0ZF9wb29sID0gZG1hX3Bvb2xfY3JlYXRlICgiZWhjaV9pdGQiLCAKKwkJCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmNvbnRyb2xsZXIsCisJCQlzaXplb2YgKHN0cnVjdCBlaGNpX2l0ZCksCisJCQkzMiAvKiBieXRlIGFsaWdubWVudCAoZm9yIGh3IHBhcnRzKSAqLywKKwkJCTQwOTYgLyogY2FuJ3QgY3Jvc3MgNEsgKi8pOworCWlmICghZWhjaS0+aXRkX3Bvb2wpIHsKKwkJZ290byBmYWlsOworCX0KKworCS8qIFNJVEQgZm9yIGZ1bGwvbG93IHNwZWVkIHNwbGl0IElTTyB0cmFuc2ZlcnMgKi8KKwllaGNpLT5zaXRkX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUgKCJlaGNpX3NpdGQiLCAKKwkJCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmNvbnRyb2xsZXIsCisJCQlzaXplb2YgKHN0cnVjdCBlaGNpX3NpdGQpLAorCQkJMzIgLyogYnl0ZSBhbGlnbm1lbnQgKGZvciBodyBwYXJ0cykgKi8sCisJCQk0MDk2IC8qIGNhbid0IGNyb3NzIDRLICovKTsKKwlpZiAoIWVoY2ktPnNpdGRfcG9vbCkgeworCQlnb3RvIGZhaWw7CisJfQorCisJLyogSGFyZHdhcmUgcGVyaW9kaWMgdGFibGUgKi8KKwllaGNpLT5wZXJpb2RpYyA9IChfX2xlMzIgKikKKwkJZG1hX2FsbG9jX2NvaGVyZW50IChlaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5jb250cm9sbGVyLAorCQkJZWhjaS0+cGVyaW9kaWNfc2l6ZSAqIHNpemVvZihfX2xlMzIpLAorCQkJJmVoY2ktPnBlcmlvZGljX2RtYSwgMCk7CisJaWYgKGVoY2ktPnBlcmlvZGljID09IE5VTEwpIHsKKwkJZ290byBmYWlsOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgZWhjaS0+cGVyaW9kaWNfc2l6ZTsgaSsrKQorCQllaGNpLT5wZXJpb2RpYyBbaV0gPSBFSENJX0xJU1RfRU5EOworCisJLyogc29mdHdhcmUgc2hhZG93IG9mIGhhcmR3YXJlIHRhYmxlICovCisJZWhjaS0+cHNoYWRvdyA9IGttYWxsb2MgKGVoY2ktPnBlcmlvZGljX3NpemUgKiBzaXplb2YgKHZvaWQgKiksIGZsYWdzKTsKKwlpZiAoZWhjaS0+cHNoYWRvdyA9PSBOVUxMKSB7CisJCWdvdG8gZmFpbDsKKwl9CisJbWVtc2V0IChlaGNpLT5wc2hhZG93LCAwLCBlaGNpLT5wZXJpb2RpY19zaXplICogc2l6ZW9mICh2b2lkICopKTsKKworCXJldHVybiAwOworCitmYWlsOgorCWVoY2lfZGJnIChlaGNpLCAiY291bGRuJ3QgaW5pdCBtZW1vcnlcbiIpOworCWVoY2lfbWVtX2NsZWFudXAgKGVoY2kpOworCXJldHVybiAtRU5PTUVNOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RmOWI5YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMKQEAgLTAsMCArMSwxMDkwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDIgYnkgRGF2aWQgQnJvd25lbGwKKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyogdGhpcyBmaWxlIGlzIHBhcnQgb2YgZWhjaS1oY2QuYyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogRUhDSSBoYXJkd2FyZSBxdWV1ZSBtYW5pcHVsYXRpb24gLi4uIHRoZSBjb3JlLiAgUUgvUVREIG1hbmlwdWxhdGlvbi4KKyAqCisgKiBDb250cm9sLCBidWxrLCBhbmQgaW50ZXJydXB0IHRyYWZmaWMgYWxsIHVzZSAicWgiIGxpc3RzLiAgVGhleSBsaXN0ICJxdGQiCisgKiBlbnRyaWVzIGRlc2NyaWJpbmcgVVNCIHRyYW5zYWN0aW9ucywgbWF4IDE2LTIwa0IvZW50cnkgKHdpdGggNGtCLWFsaWduZWQKKyAqIGJ1ZmZlcnMgbmVlZGVkIGZvciB0aGUgbGFyZ2VyIG51bWJlcikuICBXZSB1c2Ugb25lIFFIIHBlciBlbmRwb2ludCwgcXVldWUKKyAqIG11bHRpcGxlIHVyYnMgKGFsbCB0aHJlZSB0eXBlcykgcGVyIGVuZHBvaW50LiAgVVJCcyBtYXkgbmVlZCBzZXZlcmFsIHF0ZHMuCisgKgorICogSVNPIHRyYWZmaWMgdXNlcyAiSVNPIFREIiAoaXRkLCBhbmQgc2l0ZCkgcmVjb3JkcywgYW5kIChhbG9uZyB3aXRoCisgKiBpbnRlcnJ1cHRzKSBuZWVkcyBjYXJlZnVsIHNjaGVkdWxpbmcuICBQZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgY2FuIGJlCisgKiBhbiBvbmdvaW5nIGNoYWxsZW5nZS4gIFRoYXQncyBpbiAiZWhjaS1zY2hlZC5jIi4KKyAqIAorICogVVNCIDEuMSBkZXZpY2VzIGFyZSBoYW5kbGVkIChhKSBieSAiY29tcGFuaW9uIiBPSENJIG9yIFVIQ0kgcm9vdCBodWJzLAorICogb3Igb3RoZXJ3aXNlIHRocm91Z2ggdHJhbnNhY3Rpb24gdHJhbnNsYXRvcnMgKFRUcykgaW4gVVNCIDIuMCBodWJzIHVzaW5nCisgKiAoYikgc3BlY2lhbCBmaWVsZHMgaW4gcWggZW50cmllcyBvciAoYykgc3BsaXQgaXNvIGVudHJpZXMuICBUVHMgd2lsbAorICogYnVmZmVyIGxvdy9mdWxsIHNwZWVkIGRhdGEgc28gdGhlIGhvc3QgY29sbGVjdHMgaXQgYXQgaGlnaCBzcGVlZC4KKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBmaWxsIGEgcXRkLCByZXR1cm5pbmcgaG93IG11Y2ggb2YgdGhlIGJ1ZmZlciB3ZSB3ZXJlIGFibGUgdG8gcXVldWUgdXAgKi8KKworc3RhdGljIGludAorcXRkX2ZpbGwgKHN0cnVjdCBlaGNpX3F0ZCAqcXRkLCBkbWFfYWRkcl90IGJ1Ziwgc2l6ZV90IGxlbiwKKwkJaW50IHRva2VuLCBpbnQgbWF4cGFja2V0KQoreworCWludAlpLCBjb3VudDsKKwl1NjQJYWRkciA9IGJ1ZjsKKworCS8qIG9uZSBidWZmZXIgZW50cnkgcGVyIDRLIC4uLiBmaXJzdCBtaWdodCBiZSBzaG9ydCBvciB1bmFsaWduZWQgKi8KKwlxdGQtPmh3X2J1ZiBbMF0gPSBjcHVfdG9fbGUzMiAoKHUzMilhZGRyKTsKKwlxdGQtPmh3X2J1Zl9oaSBbMF0gPSBjcHVfdG9fbGUzMiAoKHUzMikoYWRkciA+PiAzMikpOworCWNvdW50ID0gMHgxMDAwIC0gKGJ1ZiAmIDB4MGZmZik7CS8qIHJlc3Qgb2YgdGhhdCBwYWdlICovCisJaWYgKGxpa2VseSAobGVuIDwgY291bnQpKQkJLyogLi4uIGlmZiBuZWVkZWQgKi8KKwkJY291bnQgPSBsZW47CisJZWxzZSB7CisJCWJ1ZiArPSAgMHgxMDAwOworCQlidWYgJj0gfjB4MGZmZjsKKworCQkvKiBwZXItcXRkIGxpbWl0OiBmcm9tIDE2SyB0byAyMEsgKGJlc3QgYWxpZ25tZW50KSAqLworCQlmb3IgKGkgPSAxOyBjb3VudCA8IGxlbiAmJiBpIDwgNTsgaSsrKSB7CisJCQlhZGRyID0gYnVmOworCQkJcXRkLT5od19idWYgW2ldID0gY3B1X3RvX2xlMzIgKCh1MzIpYWRkcik7CisJCQlxdGQtPmh3X2J1Zl9oaSBbaV0gPSBjcHVfdG9fbGUzMiAoKHUzMikoYWRkciA+PiAzMikpOworCQkJYnVmICs9IDB4MTAwMDsKKwkJCWlmICgoY291bnQgKyAweDEwMDApIDwgbGVuKQorCQkJCWNvdW50ICs9IDB4MTAwMDsKKwkJCWVsc2UKKwkJCQljb3VudCA9IGxlbjsKKwkJfQorCisJCS8qIHNob3J0IHBhY2tldHMgbWF5IG9ubHkgdGVybWluYXRlIHRyYW5zZmVycyAqLworCQlpZiAoY291bnQgIT0gbGVuKQorCQkJY291bnQgLT0gKGNvdW50ICUgbWF4cGFja2V0KTsKKwl9CisJcXRkLT5od190b2tlbiA9IGNwdV90b19sZTMyICgoY291bnQgPDwgMTYpIHwgdG9rZW4pOworCXF0ZC0+bGVuZ3RoID0gY291bnQ7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcWhfdXBkYXRlIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCwgc3RydWN0IGVoY2lfcXRkICpxdGQpCit7CisJLyogd3JpdGVzIHRvIGFuIGFjdGl2ZSBvdmVybGF5IGFyZSB1bnNhZmUgKi8KKwlCVUdfT04ocWgtPnFoX3N0YXRlICE9IFFIX1NUQVRFX0lETEUpOworCisJcWgtPmh3X3F0ZF9uZXh0ID0gUVREX05FWFQgKHF0ZC0+cXRkX2RtYSk7CisJcWgtPmh3X2FsdF9uZXh0ID0gRUhDSV9MSVNUX0VORDsKKworCS8qIEV4Y2VwdCBmb3IgY29udHJvbCBlbmRwb2ludHMsIHdlIG1ha2UgaGFyZHdhcmUgbWFpbnRhaW4gZGF0YQorCSAqIHRvZ2dsZSAobGlrZSBPSENJKSAuLi4gaGVyZSAocmUpaW5pdGlhbGl6ZSB0aGUgdG9nZ2xlIGluIHRoZSBRSCwKKwkgKiBhbmQgc2V0IHRoZSBwc2V1ZG8tdG9nZ2xlIGluIHVkZXYuIE9ubHkgdXNiX2NsZWFyX2hhbHQoKSB3aWxsCisJICogZXZlciBjbGVhciBpdC4KKwkgKi8KKwlpZiAoIShxaC0+aHdfaW5mbzEgJiBjcHVfdG9fbGUzMigxIDw8IDE0KSkpIHsKKwkJdW5zaWduZWQJaXNfb3V0LCBlcG51bTsKKworCQlpc19vdXQgPSAhKHF0ZC0+aHdfdG9rZW4gJiBjcHVfdG9fbGUzMigxIDw8IDgpKTsKKwkJZXBudW0gPSAobGUzMl90b19jcHVwKCZxaC0+aHdfaW5mbzEpID4+IDgpICYgMHgwZjsKKwkJaWYgKHVubGlrZWx5ICghdXNiX2dldHRvZ2dsZSAocWgtPmRldiwgZXBudW0sIGlzX291dCkpKSB7CisJCQlxaC0+aHdfdG9rZW4gJj0gfl9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFFURF9UT0dHTEUpOworCQkJdXNiX3NldHRvZ2dsZSAocWgtPmRldiwgZXBudW0sIGlzX291dCwgMSk7CisJCX0KKwl9CisKKwkvKiBIQyBtdXN0IHNlZSBsYXRlc3QgcXRkIGFuZCBxaCBkYXRhIGJlZm9yZSB3ZSBjbGVhciBBQ1RJVkUrSEFMVCAqLworCXdtYiAoKTsKKwlxaC0+aHdfdG9rZW4gJj0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUVREX1RPR0dMRSB8IFFURF9TVFNfUElORyk7Cit9CisKKy8qIGlmIGl0IHdlcmVuJ3QgZm9yIGEgY29tbW9uIHNpbGljb24gcXVpcmsgKHdyaXRpbmcgdGhlIGR1bW15IGludG8gdGhlIHFoCisgKiBvdmVybGF5LCBzbyBxaC0+aHdfdG9rZW4gd3JvbmdseSBiZWNvbWVzIGluYWN0aXZlL2hhbHRlZCksIG9ubHkgZmF1bHQKKyAqIHJlY292ZXJ5IChpbmNsdWRpbmcgdXJiIGRlcXVldWUpIHdvdWxkIG5lZWQgc29mdHdhcmUgY2hhbmdlcyB0byBhIFFILi4uCisgKi8KK3N0YXRpYyB2b2lkCitxaF9yZWZyZXNoIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCkKK3sKKwlzdHJ1Y3QgZWhjaV9xdGQgKnF0ZDsKKworCWlmIChsaXN0X2VtcHR5ICgmcWgtPnF0ZF9saXN0KSkKKwkJcXRkID0gcWgtPmR1bW15OworCWVsc2UgeworCQlxdGQgPSBsaXN0X2VudHJ5IChxaC0+cXRkX2xpc3QubmV4dCwKKwkJCQlzdHJ1Y3QgZWhjaV9xdGQsIHF0ZF9saXN0KTsKKwkJLyogZmlyc3QgcXRkIG1heSBhbHJlYWR5IGJlIHBhcnRpYWxseSBwcm9jZXNzZWQgKi8KKwkJaWYgKGNwdV90b19sZTMyIChxdGQtPnF0ZF9kbWEpID09IHFoLT5od19jdXJyZW50KQorCQkJcXRkID0gTlVMTDsKKwl9CisKKwlpZiAocXRkKQorCQlxaF91cGRhdGUgKGVoY2ksIHFoLCBxdGQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBxdGRfY29weV9zdGF0dXMgKAorCXN0cnVjdCBlaGNpX2hjZCAqZWhjaSwKKwlzdHJ1Y3QgdXJiICp1cmIsCisJc2l6ZV90IGxlbmd0aCwKKwl1MzIgdG9rZW4KKykKK3sKKwkvKiBjb3VudCBJTi9PVVQgYnl0ZXMsIG5vdCBTRVRVUCAoZXZlbiBzaG9ydCBwYWNrZXRzKSAqLworCWlmIChsaWtlbHkgKFFURF9QSUQgKHRva2VuKSAhPSAyKSkKKwkJdXJiLT5hY3R1YWxfbGVuZ3RoICs9IGxlbmd0aCAtIFFURF9MRU5HVEggKHRva2VuKTsKKworCS8qIGRvbid0IG1vZGlmeSBlcnJvciBjb2RlcyAqLworCWlmICh1bmxpa2VseSAodXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSkKKwkJcmV0dXJuOworCisJLyogZm9yY2UgY2xlYW51cCBhZnRlciBzaG9ydCByZWFkOyBub3QgYWx3YXlzIGFuIGVycm9yICovCisJaWYgKHVubGlrZWx5IChJU19TSE9SVF9SRUFEICh0b2tlbikpKQorCQl1cmItPnN0YXR1cyA9IC1FUkVNT1RFSU87CisKKwkvKiBzZXJpb3VzICJjYW4ndCBwcm9jZWVkIiBmYXVsdHMgcmVwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlICovCisJaWYgKHRva2VuICYgUVREX1NUU19IQUxUKSB7CisJCWlmICh0b2tlbiAmIFFURF9TVFNfQkFCQkxFKSB7CisJCQkvKiBGSVhNRSAibXVzdCIgZGlzYWJsZSBiYWJibGluZyBkZXZpY2UncyBwb3J0IHRvbyAqLworCQkJdXJiLT5zdGF0dXMgPSAtRU9WRVJGTE9XOworCQl9IGVsc2UgaWYgKHRva2VuICYgUVREX1NUU19NTUYpIHsKKwkJCS8qIGZzL2xzIGludGVycnVwdCB4ZmVyIG1pc3NlZCB0aGUgY29tcGxldGUtc3BsaXQgKi8KKwkJCXVyYi0+c3RhdHVzID0gLUVQUk9UTzsKKwkJfSBlbHNlIGlmICh0b2tlbiAmIFFURF9TVFNfREJFKSB7CisJCQl1cmItPnN0YXR1cyA9IChRVERfUElEICh0b2tlbikgPT0gMSkgLyogSU4gPyAqLworCQkJCT8gLUVOT1NSICAvKiBoYyBjb3VsZG4ndCByZWFkIGRhdGEgKi8KKwkJCQk6IC1FQ09NTTsgLyogaGMgY291bGRuJ3Qgd3JpdGUgZGF0YSAqLworCQl9IGVsc2UgaWYgKHRva2VuICYgUVREX1NUU19YQUNUKSB7CisJCQkvKiB0aW1lb3V0LCBiYWQgY3JjLCB3cm9uZyBQSUQsIGV0YzsgcmV0cmllZCAqLworCQkJaWYgKFFURF9DRVJSICh0b2tlbikpCisJCQkJdXJiLT5zdGF0dXMgPSAtRVBJUEU7CisJCQllbHNlIHsKKwkJCQllaGNpX2RiZyAoZWhjaSwgImRldnBhdGggJXMgZXAlZCVzIDNzdHJpa2VzXG4iLAorCQkJCQl1cmItPmRldi0+ZGV2cGF0aCwKKwkJCQkJdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKSwKKwkJCQkJdXNiX3BpcGVpbiAodXJiLT5waXBlKSA/ICJpbiIgOiAib3V0Iik7CisJCQkJdXJiLT5zdGF0dXMgPSAtRVBST1RPOworCQkJfQorCQkvKiBDRVJSIG5vbnplcm8gKyBubyBlcnJvcnMgKyBoYWx0IC0tPiBzdGFsbCAqLworCQl9IGVsc2UgaWYgKFFURF9DRVJSICh0b2tlbikpCisJCQl1cmItPnN0YXR1cyA9IC1FUElQRTsKKwkJZWxzZQkvKiB1bmtub3duICovCisJCQl1cmItPnN0YXR1cyA9IC1FUFJPVE87CisKKwkJZWhjaV92ZGJnIChlaGNpLAorCQkJImRldiVkIGVwJWQlcyBxdGQgdG9rZW4gJTA4eCAtLT4gc3RhdHVzICVkXG4iLAorCQkJdXNiX3BpcGVkZXZpY2UgKHVyYi0+cGlwZSksCisJCQl1c2JfcGlwZWVuZHBvaW50ICh1cmItPnBpcGUpLAorCQkJdXNiX3BpcGVpbiAodXJiLT5waXBlKSA/ICJpbiIgOiAib3V0IiwKKwkJCXRva2VuLCB1cmItPnN0YXR1cyk7CisKKwkJLyogaWYgYXN5bmMgQ1NQTElUIGZhaWxlZCwgdHJ5IGNsZWFuaW5nIG91dCB0aGUgVFQgYnVmZmVyICovCisJCWlmICh1cmItPnN0YXR1cyAhPSAtRVBJUEUKKwkJCQkmJiB1cmItPmRldi0+dHQgJiYgIXVzYl9waXBlaW50ICh1cmItPnBpcGUpCisJCQkJJiYgKCh0b2tlbiAmIFFURF9TVFNfTU1GKSAhPSAwCisJCQkJCXx8IFFURF9DRVJSKHRva2VuKSA9PSAwKQorCQkJCSYmICghZWhjaV9pc19UREkoZWhjaSkKKyAgICAgICAgICAgICAgICAJICAgICAgICAgICAgICAgIHx8IHVyYi0+ZGV2LT50dC0+aHViICE9CisJCQkJCSAgIGVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLnJvb3RfaHViKSkgeworI2lmZGVmIERFQlVHCisJCQlzdHJ1Y3QgdXNiX2RldmljZSAqdHQgPSB1cmItPmRldi0+dHQtPmh1YjsKKwkJCWRldl9kYmcgKCZ0dC0+ZGV2LAorCQkJCSJjbGVhciB0dCBidWZmZXIgcG9ydCAlZCwgYSVkIGVwJWQgdCUwOHhcbiIsCisJCQkJdXJiLT5kZXYtPnR0cG9ydCwgdXJiLT5kZXYtPmRldm51bSwKKwkJCQl1c2JfcGlwZWVuZHBvaW50ICh1cmItPnBpcGUpLCB0b2tlbik7CisjZW5kaWYgLyogREVCVUcgKi8KKwkJCXVzYl9odWJfdHRfY2xlYXJfYnVmZmVyICh1cmItPmRldiwgdXJiLT5waXBlKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK2VoY2lfdXJiX2RvbmUgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK19fcmVsZWFzZXMoZWhjaS0+bG9jaykKK19fYWNxdWlyZXMoZWhjaS0+bG9jaykKK3sKKwlpZiAobGlrZWx5ICh1cmItPmhjcHJpdiAhPSBOVUxMKSkgeworCQlzdHJ1Y3QgZWhjaV9xaAkqcWggPSAoc3RydWN0IGVoY2lfcWggKikgdXJiLT5oY3ByaXY7CisKKwkJLyogUy1tYXNrIGluIGEgUUggbWVhbnMgaXQncyBhbiBpbnRlcnJ1cHQgdXJiICovCisJCWlmICgocWgtPmh3X2luZm8yICYgX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMHgwMGZmKSkgIT0gMCkgeworCisJCQkvKiAuLi4gdXBkYXRlIGhjLXdpZGUgcGVyaW9kaWMgc3RhdHMgKGZvciB1c2JmcykgKi8KKwkJCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9pbnRfcmVxcy0tOworCQl9CisJCXFoX3B1dCAocWgpOworCX0KKworCXNwaW5fbG9jayAoJnVyYi0+bG9jayk7CisJdXJiLT5oY3ByaXYgPSBOVUxMOworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIC1FSU5QUk9HUkVTUzoJCS8qIHN1Y2Nlc3MgKi8KKwkJdXJiLT5zdGF0dXMgPSAwOworCWRlZmF1bHQ6CQkJLyogZmF1bHQgKi8KKwkJQ09VTlQgKGVoY2ktPnN0YXRzLmNvbXBsZXRlKTsKKwkJYnJlYWs7CisJY2FzZSAtRVJFTU9URUlPOgkJLyogZmF1bHQgb3Igbm9ybWFsICovCisJCWlmICghKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKSkKKwkJCXVyYi0+c3RhdHVzID0gMDsKKwkJQ09VTlQgKGVoY2ktPnN0YXRzLmNvbXBsZXRlKTsKKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoJCS8qIGNhbmNlbGVkICovCisJY2FzZSAtRU5PRU5UOgorCQlDT1VOVCAoZWhjaS0+c3RhdHMudW5saW5rKTsKKwkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrICgmdXJiLT5sb2NrKTsKKworI2lmZGVmIEVIQ0lfVVJCX1RSQUNFCisJZWhjaV9kYmcgKGVoY2ksCisJCSIlcyAlcyB1cmIgJXAgZXAlZCVzIHN0YXR1cyAlZCBsZW4gJWQvJWRcbiIsCisJCV9fRlVOQ1RJT05fXywgdXJiLT5kZXYtPmRldnBhdGgsIHVyYiwKKwkJdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKSwKKwkJdXNiX3BpcGVpbiAodXJiLT5waXBlKSA/ICJpbiIgOiAib3V0IiwKKwkJdXJiLT5zdGF0dXMsCisJCXVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKyNlbmRpZgorCisJLyogY29tcGxldGUoKSBjYW4gcmVlbnRlciB0aGlzIEhDRCAqLworCXNwaW5fdW5sb2NrICgmZWhjaS0+bG9jayk7CisJdXNiX2hjZF9naXZlYmFja191cmIgKGVoY2lfdG9faGNkKGVoY2kpLCB1cmIsIHJlZ3MpOworCXNwaW5fbG9jayAoJmVoY2ktPmxvY2spOworfQorCitzdGF0aWMgdm9pZCBzdGFydF91bmxpbmtfYXN5bmMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcWggKnFoKTsKK3N0YXRpYyB2b2lkIHVubGlua19hc3luYyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9xaCAqcWgpOworCitzdGF0aWMgdm9pZCBpbnRyX2Rlc2NoZWR1bGUgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcWggKnFoKTsKK3N0YXRpYyBpbnQgcWhfc2NoZWR1bGUgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcWggKnFoKTsKKworLyoKKyAqIFByb2Nlc3MgYW5kIGZyZWUgY29tcGxldGVkIHF0ZHMgZm9yIGEgcWgsIHJldHVybmluZyBVUkJzIHRvIGRyaXZlcnMuCisgKiBDaGFzZXMgdXAgdG8gcWgtPmh3X2N1cnJlbnQuICBSZXR1cm5zIG51bWJlciBvZiBjb21wbGV0aW9ucyBjYWxsZWQsCisgKiBpbmRpY2F0aW5nIGhvdyBtdWNoICJyZWFsIiB3b3JrIHdlIGRpZC4KKyAqLworI2RlZmluZSBIQUxUX0JJVCBfX2NvbnN0YW50X2NwdV90b19sZTMyKFFURF9TVFNfSEFMVCkKK3N0YXRpYyB1bnNpZ25lZAorcWhfY29tcGxldGlvbnMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcWggKnFoLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZWhjaV9xdGQJCSpsYXN0ID0gTlVMTCwgKmVuZCA9IHFoLT5kdW1teTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCSplbnRyeSwgKnRtcDsKKwlpbnQJCQlzdG9wcGVkOworCXVuc2lnbmVkCQljb3VudCA9IDA7CisJaW50CQkJZG9fc3RhdHVzID0gMDsKKwl1OAkJCXN0YXRlOworCisJaWYgKHVubGlrZWx5IChsaXN0X2VtcHR5ICgmcWgtPnF0ZF9saXN0KSkpCisJCXJldHVybiBjb3VudDsKKworCS8qIGNvbXBsZXRpb25zIChvciB0YXNrcyBvbiBvdGhlciBjcHVzKSBtdXN0IG5ldmVyIGNsb2JiZXIgSEFMVAorCSAqIHRpbGwgd2UndmUgZ29uZSB0aHJvdWdoIGFuZCBjbGVhbmVkIGV2ZXJ5dGhpbmcgdXAsIGV2ZW4gd2hlbgorCSAqIHRoZXkgYWRkIHVyYnMgdG8gdGhpcyBxaCdzIHF1ZXVlIG9yIG1hcmsgdGhlbSBmb3IgdW5saW5raW5nLgorCSAqCisJICogTk9URTogIHVubGlua2luZyBleHBlY3RzIHRvIGJlIGRvbmUgaW4gcXVldWUgb3JkZXIuCisJICovCisJc3RhdGUgPSBxaC0+cWhfc3RhdGU7CisJcWgtPnFoX3N0YXRlID0gUUhfU1RBVEVfQ09NUExFVElORzsKKwlzdG9wcGVkID0gKHN0YXRlID09IFFIX1NUQVRFX0lETEUpOworCisJLyogcmVtb3ZlIGRlLWFjdGl2YXRlZCBRVERzIGZyb20gZnJvbnQgb2YgcXVldWUuCisJICogYWZ0ZXIgZmF1bHRzIChpbmNsdWRpbmcgc2hvcnQgcmVhZHMpLCBjbGVhbnVwIHRoaXMgdXJiCisJICogdGhlbiBsZXQgdGhlIHF1ZXVlIGFkdmFuY2UuCisJICogaWYgcXVldWUgaXMgc3RvcHBlZCwgaGFuZGxlcyB1bmxpbmtzLgorCSAqLworCWxpc3RfZm9yX2VhY2hfc2FmZSAoZW50cnksIHRtcCwgJnFoLT5xdGRfbGlzdCkgeworCQlzdHJ1Y3QgZWhjaV9xdGQJKnF0ZDsKKwkJc3RydWN0IHVyYgkqdXJiOworCQl1MzIJCXRva2VuID0gMDsKKworCQlxdGQgPSBsaXN0X2VudHJ5IChlbnRyeSwgc3RydWN0IGVoY2lfcXRkLCBxdGRfbGlzdCk7CisJCXVyYiA9IHF0ZC0+dXJiOworCisJCS8qIGNsZWFuIHVwIGFueSBzdGF0ZSBmcm9tIHByZXZpb3VzIFFURCAuLi4qLworCQlpZiAobGFzdCkgeworCQkJaWYgKGxpa2VseSAobGFzdC0+dXJiICE9IHVyYikpIHsKKwkJCQllaGNpX3VyYl9kb25lIChlaGNpLCBsYXN0LT51cmIsIHJlZ3MpOworCQkJCWNvdW50Kys7CisJCQl9CisJCQllaGNpX3F0ZF9mcmVlIChlaGNpLCBsYXN0KTsKKwkJCWxhc3QgPSBOVUxMOworCQl9CisKKwkJLyogaWdub3JlIHVyYnMgc3VibWl0dGVkIGR1cmluZyBjb21wbGV0aW9ucyB3ZSByZXBvcnRlZCAqLworCQlpZiAocXRkID09IGVuZCkKKwkJCWJyZWFrOworCisJCS8qIGhhcmR3YXJlIGNvcGllcyBxdGQgb3V0IG9mIHFoIG92ZXJsYXkgKi8KKwkJcm1iICgpOworCQl0b2tlbiA9IGxlMzJfdG9fY3B1IChxdGQtPmh3X3Rva2VuKTsKKworCQkvKiBhbHdheXMgY2xlYW4gdXAgcXRkcyB0aGUgaGMgZGUtYWN0aXZhdGVkICovCisJCWlmICgodG9rZW4gJiBRVERfU1RTX0FDVElWRSkgPT0gMCkgeworCisJCQlpZiAoKHRva2VuICYgUVREX1NUU19IQUxUKSAhPSAwKSB7CisJCQkJc3RvcHBlZCA9IDE7CisKKwkJCS8qIG1hZ2ljIGR1bW15IGZvciBzb21lIHNob3J0IHJlYWRzOyBxaCB3b24ndCBhZHZhbmNlLgorCQkJICogdGhhdCBzaWxpY29uIHF1aXJrIGNhbiBraWNrIGluIHdpdGggdGhpcyBkdW1teSB0b28uCisJCQkgKi8KKwkJCX0gZWxzZSBpZiAoSVNfU0hPUlRfUkVBRCAodG9rZW4pCisJCQkJCSYmICEocXRkLT5od19hbHRfbmV4dCAmIEVIQ0lfTElTVF9FTkQpKSB7CisJCQkJc3RvcHBlZCA9IDE7CisJCQkJZ290byBoYWx0OworCQkJfQorCisJCS8qIHN0b3Agc2Nhbm5pbmcgd2hlbiB3ZSByZWFjaCBxdGRzIHRoZSBoYyBpcyB1c2luZyAqLworCQl9IGVsc2UgaWYgKGxpa2VseSAoIXN0b3BwZWQKKwkJCQkmJiBIQ19JU19SVU5OSU5HIChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpKSkgeworCQkJYnJlYWs7CisKKwkJfSBlbHNlIHsKKwkJCXN0b3BwZWQgPSAxOworCisJCQlpZiAodW5saWtlbHkgKCFIQ19JU19SVU5OSU5HIChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpKSkKKwkJCQl1cmItPnN0YXR1cyA9IC1FU0hVVERPV047CisKKwkJCS8qIGlnbm9yZSBhY3RpdmUgdXJicyB1bmxlc3Mgc29tZSBwcmV2aW91cyBxdGQKKwkJCSAqIGZvciB0aGUgdXJiIGZhdWx0ZWQgKGluY2x1ZGluZyBzaG9ydCByZWFkKSBvcgorCQkJICogaXRzIHVyYiB3YXMgY2FuY2VsZWQuICB3ZSBtYXkgcGF0Y2ggcWggb3IgcXRkcy4KKwkJCSAqLworCQkJaWYgKGxpa2VseSAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSkKKwkJCQljb250aW51ZTsKKwkJCQorCQkJLyogaXNzdWUgc3RhdHVzIGFmdGVyIHNob3J0IGNvbnRyb2wgcmVhZHMgKi8KKwkJCWlmICh1bmxpa2VseSAoZG9fc3RhdHVzICE9IDApCisJCQkJCSYmIFFURF9QSUQgKHRva2VuKSA9PSAwIC8qIE9VVCAqLykgeworCQkJCWRvX3N0YXR1cyA9IDA7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIHRva2VuIGluIG92ZXJsYXkgbWF5IGJlIG1vc3QgY3VycmVudCAqLworCQkJaWYgKHN0YXRlID09IFFIX1NUQVRFX0lETEUKKwkJCQkJJiYgY3B1X3RvX2xlMzIgKHF0ZC0+cXRkX2RtYSkKKwkJCQkJCT09IHFoLT5od19jdXJyZW50KQorCQkJCXRva2VuID0gbGUzMl90b19jcHUgKHFoLT5od190b2tlbik7CisKKwkJCS8qIGZvcmNlIGhhbHQgZm9yIHVubGlua2VkIG9yIGJsb2NrZWQgcWgsIHNvIHdlJ2xsCisJCQkgKiBwYXRjaCB0aGUgcWggbGF0ZXIgYW5kIHNvIHRoYXQgY29tcGxldGlvbnMgY2FuJ3QKKwkJCSAqIGFjdGl2YXRlIGl0IHdoaWxlIHdlICJrbm93IiBpdCdzIHN0b3BwZWQuCisJCQkgKi8KKwkJCWlmICgoSEFMVF9CSVQgJiBxaC0+aHdfdG9rZW4pID09IDApIHsKK2hhbHQ6CisJCQkJcWgtPmh3X3Rva2VuIHw9IEhBTFRfQklUOworCQkJCXdtYiAoKTsKKwkJCX0KKwkJfQorIAorCQkvKiByZW1vdmUgaXQgZnJvbSB0aGUgcXVldWUgKi8KKwkJc3Bpbl9sb2NrICgmdXJiLT5sb2NrKTsKKwkJcXRkX2NvcHlfc3RhdHVzIChlaGNpLCB1cmIsIHF0ZC0+bGVuZ3RoLCB0b2tlbik7CisJCWRvX3N0YXR1cyA9ICh1cmItPnN0YXR1cyA9PSAtRVJFTU9URUlPKQorCQkJCSYmIHVzYl9waXBlY29udHJvbCAodXJiLT5waXBlKTsKKwkJc3Bpbl91bmxvY2sgKCZ1cmItPmxvY2spOworCisJCWlmIChzdG9wcGVkICYmIHF0ZC0+cXRkX2xpc3QucHJldiAhPSAmcWgtPnF0ZF9saXN0KSB7CisJCQlsYXN0ID0gbGlzdF9lbnRyeSAocXRkLT5xdGRfbGlzdC5wcmV2LAorCQkJCQlzdHJ1Y3QgZWhjaV9xdGQsIHF0ZF9saXN0KTsKKwkJCWxhc3QtPmh3X25leHQgPSBxdGQtPmh3X25leHQ7CisJCX0KKwkJbGlzdF9kZWwgKCZxdGQtPnF0ZF9saXN0KTsKKwkJbGFzdCA9IHF0ZDsKKwl9CisKKwkvKiBsYXN0IHVyYidzIGNvbXBsZXRpb24gbWlnaHQgc3RpbGwgbmVlZCBjYWxsaW5nICovCisJaWYgKGxpa2VseSAobGFzdCAhPSBOVUxMKSkgeworCQllaGNpX3VyYl9kb25lIChlaGNpLCBsYXN0LT51cmIsIHJlZ3MpOworCQljb3VudCsrOworCQllaGNpX3F0ZF9mcmVlIChlaGNpLCBsYXN0KTsKKwl9CisKKwkvKiByZXN0b3JlIG9yaWdpbmFsIHN0YXRlOyBjYWxsZXIgbXVzdCB1bmxpbmsgb3IgcmVsaW5rICovCisJcWgtPnFoX3N0YXRlID0gc3RhdGU7CisKKwkvKiBiZSBzdXJlIHRoZSBoYXJkd2FyZSdzIGRvbmUgd2l0aCB0aGUgcWggYmVmb3JlIHJlZnJlc2hpbmcKKwkgKiBpdCBhZnRlciBmYXVsdCBjbGVhbnVwLCBvciByZWNvdmVyaW5nIGZyb20gc2lsaWNvbiB3cm9uZ2x5CisJICogb3ZlcmxheWluZyB0aGUgZHVtbXkgcXRkICh3aGljaCByZWR1Y2VzIERNQSBjaGF0dGVyKS4KKwkgKi8KKwlpZiAoc3RvcHBlZCAhPSAwIHx8IHFoLT5od19xdGRfbmV4dCA9PSBFSENJX0xJU1RfRU5EKSB7CisJCXN3aXRjaCAoc3RhdGUpIHsKKwkJY2FzZSBRSF9TVEFURV9JRExFOgorCQkJcWhfcmVmcmVzaChlaGNpLCBxaCk7CisJCQlicmVhazsKKwkJY2FzZSBRSF9TVEFURV9MSU5LRUQ6CisJCQkvKiBzaG91bGQgYmUgcmFyZSBmb3IgcGVyaW9kaWMgdHJhbnNmZXJzLAorCQkJICogZXhjZXB0IG1heWJlIGhpZ2ggYmFuZHdpZHRoIC4uLgorCQkJICovCisJCQlpZiAocWgtPnBlcmlvZCkgeworCQkJCWludHJfZGVzY2hlZHVsZSAoZWhjaSwgcWgpOworCQkJCSh2b2lkKSBxaF9zY2hlZHVsZSAoZWhjaSwgcWgpOworCQkJfSBlbHNlCisJCQkJdW5saW5rX2FzeW5jIChlaGNpLCBxaCk7CisJCQlicmVhazsKKwkJLyogb3RoZXJ3aXNlLCB1bmxpbmsgYWxyZWFkeSBzdGFydGVkICovCisJCX0KKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8vIGhpZ2ggYmFuZHdpZHRoIG11bHRpcGxpZXIsIGFzIGVuY29kZWQgaW4gaGlnaHNwZWVkIGVuZHBvaW50IGRlc2NyaXB0b3JzCisjZGVmaW5lIGhiX211bHQod01heFBhY2tldFNpemUpICgxICsgKCgod01heFBhY2tldFNpemUpID4+IDExKSAmIDB4MDMpKQorLy8gLi4uIGFuZCBwYWNrZXQgc2l6ZSwgZm9yIGFueSBraW5kIG9mIGVuZHBvaW50IGRlc2NyaXB0b3IKKyNkZWZpbmUgbWF4X3BhY2tldCh3TWF4UGFja2V0U2l6ZSkgKCh3TWF4UGFja2V0U2l6ZSkgJiAweDA3ZmYpCisKKy8qCisgKiByZXZlcnNlIG9mIHFoX3VyYl90cmFuc2FjdGlvbjogIGZyZWUgYSBsaXN0IG9mIFREcy4KKyAqIHVzZWQgZm9yIGNsZWFudXAgYWZ0ZXIgZXJyb3JzLCBiZWZvcmUgSEMgc2VlcyBhbiBVUkIncyBURHMuCisgKi8KK3N0YXRpYyB2b2lkIHF0ZF9saXN0X2ZyZWUgKAorCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2ksCisJc3RydWN0IHVyYgkJKnVyYiwKKwlzdHJ1Y3QgbGlzdF9oZWFkCSpxdGRfbGlzdAorKSB7CisJc3RydWN0IGxpc3RfaGVhZAkqZW50cnksICp0ZW1wOworCisJbGlzdF9mb3JfZWFjaF9zYWZlIChlbnRyeSwgdGVtcCwgcXRkX2xpc3QpIHsKKwkJc3RydWN0IGVoY2lfcXRkCSpxdGQ7CisKKwkJcXRkID0gbGlzdF9lbnRyeSAoZW50cnksIHN0cnVjdCBlaGNpX3F0ZCwgcXRkX2xpc3QpOworCQlsaXN0X2RlbCAoJnF0ZC0+cXRkX2xpc3QpOworCQllaGNpX3F0ZF9mcmVlIChlaGNpLCBxdGQpOworCX0KK30KKworLyoKKyAqIGNyZWF0ZSBhIGxpc3Qgb2YgZmlsbGVkIHF0ZHMgZm9yIHRoaXMgVVJCOyB3b24ndCBsaW5rIGludG8gcWguCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICoKK3FoX3VyYl90cmFuc2FjdGlvbiAoCisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSwKKwlzdHJ1Y3QgdXJiCQkqdXJiLAorCXN0cnVjdCBsaXN0X2hlYWQJKmhlYWQsCisJaW50CQkJZmxhZ3MKKykgeworCXN0cnVjdCBlaGNpX3F0ZAkJKnF0ZCwgKnF0ZF9wcmV2OworCWRtYV9hZGRyX3QJCWJ1ZjsKKwlpbnQJCQlsZW4sIG1heHBhY2tldDsKKwlpbnQJCQlpc19pbnB1dDsKKwl1MzIJCQl0b2tlbjsKKworCS8qCisJICogVVJCcyBtYXAgdG8gc2VxdWVuY2VzIG9mIFFURHM6ICBvbmUgbG9naWNhbCB0cmFuc2FjdGlvbgorCSAqLworCXF0ZCA9IGVoY2lfcXRkX2FsbG9jIChlaGNpLCBmbGFncyk7CisJaWYgKHVubGlrZWx5ICghcXRkKSkKKwkJcmV0dXJuIE5VTEw7CisJbGlzdF9hZGRfdGFpbCAoJnF0ZC0+cXRkX2xpc3QsIGhlYWQpOworCXF0ZC0+dXJiID0gdXJiOworCisJdG9rZW4gPSBRVERfU1RTX0FDVElWRTsKKwl0b2tlbiB8PSAoRUhDSV9UVU5FX0NFUlIgPDwgMTApOworCS8qIGZvciBzcGxpdCB0cmFuc2FjdGlvbnMsIFNwbGl0WFN0YXRlIGluaXRpYWxpemVkIHRvIHplcm8gKi8KKworCWxlbiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwlpc19pbnB1dCA9IHVzYl9waXBlaW4gKHVyYi0+cGlwZSk7CisJaWYgKHVzYl9waXBlY29udHJvbCAodXJiLT5waXBlKSkgeworCQkvKiBTRVRVUCBwaWQgKi8KKwkJcXRkX2ZpbGwgKHF0ZCwgdXJiLT5zZXR1cF9kbWEsIHNpemVvZiAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksCisJCQl0b2tlbiB8ICgyIC8qICJzZXR1cCIgKi8gPDwgOCksIDgpOworCisJCS8qIC4uLiBhbmQgYWx3YXlzIGF0IGxlYXN0IG9uZSBtb3JlIHBpZCAqLworCQl0b2tlbiBePSBRVERfVE9HR0xFOworCQlxdGRfcHJldiA9IHF0ZDsKKwkJcXRkID0gZWhjaV9xdGRfYWxsb2MgKGVoY2ksIGZsYWdzKTsKKwkJaWYgKHVubGlrZWx5ICghcXRkKSkKKwkJCWdvdG8gY2xlYW51cDsKKwkJcXRkLT51cmIgPSB1cmI7CisJCXF0ZF9wcmV2LT5od19uZXh0ID0gUVREX05FWFQgKHF0ZC0+cXRkX2RtYSk7CisJCWxpc3RfYWRkX3RhaWwgKCZxdGQtPnF0ZF9saXN0LCBoZWFkKTsKKwl9IAorCisJLyoKKwkgKiBkYXRhIHRyYW5zZmVyIHN0YWdlOiAgYnVmZmVyIHNldHVwCisJICovCisJaWYgKGxpa2VseSAobGVuID4gMCkpCisJCWJ1ZiA9IHVyYi0+dHJhbnNmZXJfZG1hOworCWVsc2UKKwkJYnVmID0gMDsKKworCS8qIGZvciB6ZXJvIGxlbmd0aCBEQVRBIHN0YWdlcywgU1RBVFVTIGlzIGFsd2F5cyBJTiAqLworCWlmICghYnVmIHx8IGlzX2lucHV0KQorCQl0b2tlbiB8PSAoMSAvKiAiaW4iICovIDw8IDgpOworCS8qIGVsc2UgaXQncyBhbHJlYWR5IGluaXR0ZWQgdG8gIm91dCIgcGlkICgwIDw8IDgpICovCisKKwltYXhwYWNrZXQgPSBtYXhfcGFja2V0KHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwgIWlzX2lucHV0KSk7CisKKwkvKgorCSAqIGJ1ZmZlciBnZXRzIHdyYXBwZWQgaW4gb25lIG9yIG1vcmUgcXRkczsKKwkgKiBsYXN0IG9uZSBtYXkgYmUgInNob3J0IiAoaW5jbHVkaW5nIHplcm8gbGVuKQorCSAqIGFuZCBtYXkgc2VydmUgYXMgYSBjb250cm9sIHN0YXR1cyBhY2sKKwkgKi8KKwlmb3IgKDs7KSB7CisJCWludCB0aGlzX3F0ZF9sZW47CisKKwkJdGhpc19xdGRfbGVuID0gcXRkX2ZpbGwgKHF0ZCwgYnVmLCBsZW4sIHRva2VuLCBtYXhwYWNrZXQpOworCQlsZW4gLT0gdGhpc19xdGRfbGVuOworCQlidWYgKz0gdGhpc19xdGRfbGVuOworCQlpZiAoaXNfaW5wdXQpCisJCQlxdGQtPmh3X2FsdF9uZXh0ID0gZWhjaS0+YXN5bmMtPmh3X2FsdF9uZXh0OworCisJCS8qIHFoIG1ha2VzIGNvbnRyb2wgcGFja2V0cyB1c2UgcXRkIHRvZ2dsZTsgbWF5YmUgc3dpdGNoIGl0ICovCisJCWlmICgobWF4cGFja2V0ICYgKHRoaXNfcXRkX2xlbiArIChtYXhwYWNrZXQgLSAxKSkpID09IDApCisJCQl0b2tlbiBePSBRVERfVE9HR0xFOworCisJCWlmIChsaWtlbHkgKGxlbiA8PSAwKSkKKwkJCWJyZWFrOworCisJCXF0ZF9wcmV2ID0gcXRkOworCQlxdGQgPSBlaGNpX3F0ZF9hbGxvYyAoZWhjaSwgZmxhZ3MpOworCQlpZiAodW5saWtlbHkgKCFxdGQpKQorCQkJZ290byBjbGVhbnVwOworCQlxdGQtPnVyYiA9IHVyYjsKKwkJcXRkX3ByZXYtPmh3X25leHQgPSBRVERfTkVYVCAocXRkLT5xdGRfZG1hKTsKKwkJbGlzdF9hZGRfdGFpbCAoJnF0ZC0+cXRkX2xpc3QsIGhlYWQpOworCX0KKworCS8qIHVubGVzcyB0aGUgYnVsay9pbnRlcnJ1cHQgY2FsbGVyIHdhbnRzIGEgY2hhbmNlIHRvIGNsZWFuCisJICogdXAgYWZ0ZXIgc2hvcnQgcmVhZHMsIGhjIHNob3VsZCBhZHZhbmNlIHFoIHBhc3QgdGhpcyB1cmIKKwkgKi8KKwlpZiAobGlrZWx5ICgodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spID09IDAKKwkJCQl8fCB1c2JfcGlwZWNvbnRyb2wgKHVyYi0+cGlwZSkpKQorCQlxdGQtPmh3X2FsdF9uZXh0ID0gRUhDSV9MSVNUX0VORDsKKworCS8qCisJICogY29udHJvbCByZXF1ZXN0cyBtYXkgbmVlZCBhIHRlcm1pbmF0aW5nIGRhdGEgInN0YXR1cyIgYWNrOworCSAqIGJ1bGsgb25lcyBtYXkgbmVlZCBhIHRlcm1pbmF0aW5nIHNob3J0IHBhY2tldCAoemVybyBsZW5ndGgpLgorCSAqLworCWlmIChsaWtlbHkgKGJ1ZiAhPSAwKSkgeworCQlpbnQJb25lX21vcmUgPSAwOworCisJCWlmICh1c2JfcGlwZWNvbnRyb2wgKHVyYi0+cGlwZSkpIHsKKwkJCW9uZV9tb3JlID0gMTsKKwkJCXRva2VuIF49IDB4MDEwMDsJLyogImluIiA8LS0+ICJvdXQiICAqLworCQkJdG9rZW4gfD0gUVREX1RPR0dMRTsJLyogZm9yY2UgREFUQTEgKi8KKwkJfSBlbHNlIGlmICh1c2JfcGlwZWJ1bGsgKHVyYi0+cGlwZSkKKwkJCQkmJiAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9aRVJPX1BBQ0tFVCkKKwkJCQkmJiAhKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAlIG1heHBhY2tldCkpIHsKKwkJCW9uZV9tb3JlID0gMTsKKwkJfQorCQlpZiAob25lX21vcmUpIHsKKwkJCXF0ZF9wcmV2ID0gcXRkOworCQkJcXRkID0gZWhjaV9xdGRfYWxsb2MgKGVoY2ksIGZsYWdzKTsKKwkJCWlmICh1bmxpa2VseSAoIXF0ZCkpCisJCQkJZ290byBjbGVhbnVwOworCQkJcXRkLT51cmIgPSB1cmI7CisJCQlxdGRfcHJldi0+aHdfbmV4dCA9IFFURF9ORVhUIChxdGQtPnF0ZF9kbWEpOworCQkJbGlzdF9hZGRfdGFpbCAoJnF0ZC0+cXRkX2xpc3QsIGhlYWQpOworCisJCQkvKiBuZXZlciBhbnkgZGF0YSBpbiBzdWNoIHBhY2tldHMgKi8KKwkJCXF0ZF9maWxsIChxdGQsIDAsIDAsIHRva2VuLCAwKTsKKwkJfQorCX0KKworCS8qIGJ5IGRlZmF1bHQsIGVuYWJsZSBpbnRlcnJ1cHQgb24gdXJiIGNvbXBsZXRpb24gKi8KKwlpZiAobGlrZWx5ICghKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfTk9fSU5URVJSVVBUKSkpCisJCXF0ZC0+aHdfdG9rZW4gfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUVREX0lPQyk7CisJcmV0dXJuIGhlYWQ7CisKK2NsZWFudXA6CisJcXRkX2xpc3RfZnJlZSAoZWhjaSwgdXJiLCBoZWFkKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLy8gV291bGQgYmUgYmVzdCB0byBjcmVhdGUgYWxsIHFoJ3MgZnJvbSBjb25maWcgZGVzY3JpcHRvcnMsCisvLyB3aGVuIGVhY2ggaW50ZXJmYWNlL2FsdHNldHRpbmcgaXMgZXN0YWJsaXNoZWQuICBVbmxpbmsKKy8vIGFueSBwcmV2aW91cyBxaCBhbmQgY2FuY2VsIGl0cyB1cmJzIGZpcnN0OyBlbmRwb2ludHMgYXJlCisvLyBpbXBsaWNpdGx5IHJlc2V0IHRoZW4gKGRhdGEgdG9nZ2xlIHRvbykuCisvLyBUaGF0J2QgbWVhbiB1cGRhdGluZyBob3cgdXNiY29yZSB0YWxrcyB0byBIQ0RzLiAoMi43PykKKworCisvKgorICogRWFjaCBRSCBob2xkcyBhIHF0ZCBsaXN0OyBhIFFIIGlzIHVzZWQgZm9yIGV2ZXJ5dGhpbmcgZXhjZXB0IGlzby4KKyAqCisgKiBGb3IgaW50ZXJydXB0IHVyYnMsIHRoZSBzY2hlZHVsZXIgbXVzdCBzZXQgdGhlIG1pY3JvZnJhbWUgc2NoZWR1bGluZworICogbWFzayhzKSBlYWNoIHRpbWUgdGhlIFFIIGdldHMgc2NoZWR1bGVkLiAgRm9yIGhpZ2hzcGVlZCwgdGhhdCdzCisgKiBqdXN0IG9uZSBtaWNyb2ZyYW1lIGluIHRoZSBzLW1hc2suICBGb3Igc3BsaXQgaW50ZXJydXB0IHRyYW5zYWN0aW9ucworICogdGhlcmUgYXJlIGFkZGl0aW9uYWwgY29tcGxpY2F0aW9uczogYy1tYXNrLCBtYXliZSBGU1ROcy4KKyAqLworc3RhdGljIHN0cnVjdCBlaGNpX3FoICoKK3FoX21ha2UgKAorCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2ksCisJc3RydWN0IHVyYgkJKnVyYiwKKwlpbnQJCQlmbGFncworKSB7CisJc3RydWN0IGVoY2lfcWgJCSpxaCA9IGVoY2lfcWhfYWxsb2MgKGVoY2ksIGZsYWdzKTsKKwl1MzIJCQlpbmZvMSA9IDAsIGluZm8yID0gMDsKKwlpbnQJCQlpc19pbnB1dCwgdHlwZTsKKwlpbnQJCQltYXhwID0gMDsKKworCWlmICghcWgpCisJCXJldHVybiBxaDsKKworCS8qCisJICogaW5pdCBlbmRwb2ludC9kZXZpY2UgZGF0YSBmb3IgdGhpcyBRSAorCSAqLworCWluZm8xIHw9IHVzYl9waXBlZW5kcG9pbnQgKHVyYi0+cGlwZSkgPDwgODsKKwlpbmZvMSB8PSB1c2JfcGlwZWRldmljZSAodXJiLT5waXBlKSA8PCAwOworCisJaXNfaW5wdXQgPSB1c2JfcGlwZWluICh1cmItPnBpcGUpOworCXR5cGUgPSB1c2JfcGlwZXR5cGUgKHVyYi0+cGlwZSk7CisJbWF4cCA9IHVzYl9tYXhwYWNrZXQgKHVyYi0+ZGV2LCB1cmItPnBpcGUsICFpc19pbnB1dCk7CisKKwkvKiBDb21wdXRlIGludGVycnVwdCBzY2hlZHVsaW5nIHBhcmFtZXRlcnMganVzdCBvbmNlLCBhbmQgc2F2ZS4KKwkgKiAtIGFsbG93aW5nIGZvciBoaWdoIGJhbmR3aWR0aCwgaG93IG1hbnkgbnNlYy91ZnJhbWUgYXJlIHVzZWQ/CisJICogLSBzcGxpdCB0cmFuc2FjdGlvbnMgbmVlZCBhIHNlY29uZCBDU1BMSVQgdWZyYW1lOyBzYW1lIHF1ZXN0aW9uCisJICogLSBzcGxpdHMgYWxzbyBuZWVkIGEgc2NoZWR1bGUgZ2FwIChmb3IgZnVsbC9sb3cgc3BlZWQgSS9PKQorCSAqIC0gcWggaGFzIGEgcG9sbGluZyBpbnRlcnZhbAorCSAqCisJICogRm9yIGNvbnRyb2wvYnVsayByZXF1ZXN0cywgdGhlIEhDIG9yIFRUIGhhbmRsZXMgdGhlc2UuCisJICovCisJaWYgKHR5cGUgPT0gUElQRV9JTlRFUlJVUFQpIHsKKwkJcWgtPnVzZWNzID0gdXNiX2NhbGNfYnVzX3RpbWUgKFVTQl9TUEVFRF9ISUdILCBpc19pbnB1dCwgMCwKKwkJCQloYl9tdWx0IChtYXhwKSAqIG1heF9wYWNrZXQgKG1heHApKTsKKwkJcWgtPnN0YXJ0ID0gTk9fRlJBTUU7CisKKwkJaWYgKHVyYi0+ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgeworCQkJcWgtPmNfdXNlY3MgPSAwOworCQkJcWgtPmdhcF91ZiA9IDA7CisKKwkJCXFoLT5wZXJpb2QgPSB1cmItPmludGVydmFsID4+IDM7CisJCQlpZiAocWgtPnBlcmlvZCA9PSAwICYmIHVyYi0+aW50ZXJ2YWwgIT0gMSkgeworCQkJCS8qIE5PVEUgaW50ZXJ2YWwgMiBvciA0IHVmcmFtZXMgY291bGQgd29yay4KKwkJCQkgKiBCdXQgaW50ZXJ2YWwgMSBzY2hlZHVsaW5nIGlzIHNpbXBsZXIsIGFuZAorCQkJCSAqIGluY2x1ZGVzIGhpZ2ggYmFuZHdpZHRoLgorCQkJCSAqLworCQkJCWRiZyAoImludHIgcGVyaW9kICVkIHVmcmFtZXMsIE5ZRVQhIiwKKwkJCQkJCXVyYi0+aW50ZXJ2YWwpOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIGdhcCBpcyBmKEZTL0xTIHRyYW5zZmVyIHRpbWVzKSAqLworCQkJcWgtPmdhcF91ZiA9IDEgKyB1c2JfY2FsY19idXNfdGltZSAodXJiLT5kZXYtPnNwZWVkLAorCQkJCQlpc19pbnB1dCwgMCwgbWF4cCkgLyAoMTI1ICogMTAwMCk7CisKKwkJCS8qIEZJWE1FIHRoaXMganVzdCBhcHByb3hpbWF0ZXMgU1BMSVQvQ1NQTElUIHRpbWVzICovCisJCQlpZiAoaXNfaW5wdXQpIHsJCS8vIFNQTElULCBnYXAsIENTUExJVCtEQVRBCisJCQkJcWgtPmNfdXNlY3MgPSBxaC0+dXNlY3MgKyBIU19VU0VDUyAoMCk7CisJCQkJcWgtPnVzZWNzID0gSFNfVVNFQ1MgKDEpOworCQkJfSBlbHNlIHsJCS8vIFNQTElUK0RBVEEsIGdhcCwgQ1NQTElUCisJCQkJcWgtPnVzZWNzICs9IEhTX1VTRUNTICgxKTsKKwkJCQlxaC0+Y191c2VjcyA9IEhTX1VTRUNTICgwKTsKKwkJCX0KKworCQkJcWgtPnBlcmlvZCA9IHVyYi0+aW50ZXJ2YWw7CisJCX0KKwl9CisKKwkvKiBzdXBwb3J0IGZvciB0dCBzY2hlZHVsaW5nLCBhbmQgYWNjZXNzIHRvIHRvZ2dsZXMgKi8KKwlxaC0+ZGV2ID0gdXNiX2dldF9kZXYgKHVyYi0+ZGV2KTsKKworCS8qIHVzaW5nIFRUPyAqLworCXN3aXRjaCAodXJiLT5kZXYtPnNwZWVkKSB7CisJY2FzZSBVU0JfU1BFRURfTE9XOgorCQlpbmZvMSB8PSAoMSA8PCAxMik7CS8qIEVQUyAibG93IiAqLworCQkvKiBGQUxMIFRIUk9VR0ggKi8KKworCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCS8qIEVQUyAwIG1lYW5zICJmdWxsIiAqLworCQlpZiAodHlwZSAhPSBQSVBFX0lOVEVSUlVQVCkKKwkJCWluZm8xIHw9IChFSENJX1RVTkVfUkxfVFQgPDwgMjgpOworCQlpZiAodHlwZSA9PSBQSVBFX0NPTlRST0wpIHsKKwkJCWluZm8xIHw9ICgxIDw8IDI3KTsJLyogZm9yIFRUICovCisJCQlpbmZvMSB8PSAxIDw8IDE0OwkvKiB0b2dnbGUgZnJvbSBxdGQgKi8KKwkJfQorCQlpbmZvMSB8PSBtYXhwIDw8IDE2OworCisJCWluZm8yIHw9IChFSENJX1RVTkVfTVVMVF9UVCA8PCAzMCk7CisJCWluZm8yIHw9IHVyYi0+ZGV2LT50dHBvcnQgPDwgMjM7CisKKwkJLyogc2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBUVDsgZm9yIFRESSdzIGludGVncmF0ZWQKKwkJICogcm9vdCBodWIgdHQsIGxlYXZlIGl0IHplcm9lZC4KKwkJICovCisJCWlmICghZWhjaV9pc19UREkoZWhjaSkKKwkJCQl8fCB1cmItPmRldi0+dHQtPmh1YiAhPQorCQkJCQllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5yb290X2h1YikKKwkJCWluZm8yIHw9IHVyYi0+ZGV2LT50dC0+aHViLT5kZXZudW0gPDwgMTY7CisKKwkJLyogTk9URTogIGlmIChQSVBFX0lOVEVSUlVQVCkgeyBzY2hlZHVsZXIgc2V0cyBjLW1hc2sgfSAqLworCisJCWJyZWFrOworCisJY2FzZSBVU0JfU1BFRURfSElHSDoJCS8qIG5vIFRUIGludm9sdmVkICovCisJCWluZm8xIHw9ICgyIDw8IDEyKTsJLyogRVBTICJoaWdoIiAqLworCQlpZiAodHlwZSA9PSBQSVBFX0NPTlRST0wpIHsKKwkJCWluZm8xIHw9IChFSENJX1RVTkVfUkxfSFMgPDwgMjgpOworCQkJaW5mbzEgfD0gNjQgPDwgMTY7CS8qIHVzYjIgZml4ZWQgbWF4cGFja2V0ICovCisJCQlpbmZvMSB8PSAxIDw8IDE0OwkvKiB0b2dnbGUgZnJvbSBxdGQgKi8KKwkJCWluZm8yIHw9IChFSENJX1RVTkVfTVVMVF9IUyA8PCAzMCk7CisJCX0gZWxzZSBpZiAodHlwZSA9PSBQSVBFX0JVTEspIHsKKwkJCWluZm8xIHw9IChFSENJX1RVTkVfUkxfSFMgPDwgMjgpOworCQkJaW5mbzEgfD0gNTEyIDw8IDE2OwkvKiB1c2IyIGZpeGVkIG1heHBhY2tldCAqLworCQkJaW5mbzIgfD0gKEVIQ0lfVFVORV9NVUxUX0hTIDw8IDMwKTsKKwkJfSBlbHNlIHsJCS8qIFBJUEVfSU5URVJSVVBUICovCisJCQlpbmZvMSB8PSBtYXhfcGFja2V0IChtYXhwKSA8PCAxNjsKKwkJCWluZm8yIHw9IGhiX211bHQgKG1heHApIDw8IDMwOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisgCQlkYmcgKCJib2d1cyBkZXYgJXAgc3BlZWQgJWQiLCB1cmItPmRldiwgdXJiLT5kZXYtPnNwZWVkKTsKK2RvbmU6CisJCXFoX3B1dCAocWgpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBOT1RFOiAgaWYgKFBJUEVfSU5URVJSVVBUKSB7IHNjaGVkdWxlciBzZXRzIHMtbWFzayB9ICovCisKKwkvKiBpbml0IGFzIGxpdmUsIHRvZ2dsZSBjbGVhciwgYWR2YW5jZSB0byBkdW1teSAqLworCXFoLT5xaF9zdGF0ZSA9IFFIX1NUQVRFX0lETEU7CisJcWgtPmh3X2luZm8xID0gY3B1X3RvX2xlMzIgKGluZm8xKTsKKwlxaC0+aHdfaW5mbzIgPSBjcHVfdG9fbGUzMiAoaW5mbzIpOworCXVzYl9zZXR0b2dnbGUgKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50ICh1cmItPnBpcGUpLCAhaXNfaW5wdXQsIDEpOworCXFoX3JlZnJlc2ggKGVoY2ksIHFoKTsKKwlyZXR1cm4gcWg7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIG1vdmUgcWggKGFuZCBpdHMgcXRkcykgb250byBhc3luYyBxdWV1ZTsgbWF5YmUgZW5hYmxlIHF1ZXVlLiAgKi8KKworc3RhdGljIHZvaWQgcWhfbGlua19hc3luYyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9xaCAqcWgpCit7CisJX19sZTMyCQlkbWEgPSBRSF9ORVhUIChxaC0+cWhfZG1hKTsKKwlzdHJ1Y3QgZWhjaV9xaAkqaGVhZDsKKworCS8qIChyZSlzdGFydCB0aGUgYXN5bmMgc2NoZWR1bGU/ICovCisJaGVhZCA9IGVoY2ktPmFzeW5jOworCXRpbWVyX2FjdGlvbl9kb25lIChlaGNpLCBUSU1FUl9BU1lOQ19PRkYpOworCWlmICghaGVhZC0+cWhfbmV4dC5xaCkgeworCQl1MzIJY21kID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKworCQlpZiAoIShjbWQgJiBDTURfQVNFKSkgeworCQkJLyogaW4gY2FzZSBhIGNsZWFyIG9mIENNRF9BU0UgZGlkbid0IHRha2UgeWV0ICovCisJCQkodm9pZCkgaGFuZHNoYWtlICgmZWhjaS0+cmVncy0+c3RhdHVzLCBTVFNfQVNTLCAwLCAxNTApOworCQkJY21kIHw9IENNRF9BU0UgfCBDTURfUlVOOworCQkJd3JpdGVsIChjbWQsICZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKwkJCWVoY2lfdG9faGNkKGVoY2kpLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisJCQkvKiBwb3N0ZWQgd3JpdGUgbmVlZCBub3QgYmUga25vd24gdG8gSEMgeWV0IC4uLiAqLworCQl9CisJfQorCisJLyogY2xlYXIgaGFsdCBhbmQvb3IgdG9nZ2xlOyBhbmQgbWF5YmUgcmVjb3ZlciBmcm9tIHNpbGljb24gcXVpcmsgKi8KKwlpZiAocWgtPnFoX3N0YXRlID09IFFIX1NUQVRFX0lETEUpCisJCXFoX3JlZnJlc2ggKGVoY2ksIHFoKTsKKworCS8qIHNwbGljZSByaWdodCBhZnRlciBzdGFydCAqLworCXFoLT5xaF9uZXh0ID0gaGVhZC0+cWhfbmV4dDsKKwlxaC0+aHdfbmV4dCA9IGhlYWQtPmh3X25leHQ7CisJd21iICgpOworCisJaGVhZC0+cWhfbmV4dC5xaCA9IHFoOworCWhlYWQtPmh3X25leHQgPSBkbWE7CisKKwlxaC0+cWhfc3RhdGUgPSBRSF9TVEFURV9MSU5LRUQ7CisJLyogcXRkIGNvbXBsZXRpb25zIHJlcG9ydGVkIGxhdGVyIGJ5IGludGVycnVwdCAqLworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lCVFIX0FERFJfTUFTSwlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4N2YpCisKKy8qCisgKiBGb3IgY29udHJvbC9idWxrL2ludGVycnVwdCwgcmV0dXJuIFFIIHdpdGggdGhlc2UgVERzIGFwcGVuZGVkLgorICogQWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyB0aGUgUUggaWYgbmVjZXNzYXJ5LgorICogUmV0dXJucyBudWxsIGlmIGl0IGNhbid0IGFsbG9jYXRlIGEgUUggaXQgbmVlZHMgdG8uCisgKiBJZiB0aGUgUUggaGFzIFREcyAodXJicykgYWxyZWFkeSwgdGhhdCdzIGdyZWF0LgorICovCitzdGF0aWMgc3RydWN0IGVoY2lfcWggKnFoX2FwcGVuZF90ZHMgKAorCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2ksCisJc3RydWN0IHVyYgkJKnVyYiwKKwlzdHJ1Y3QgbGlzdF9oZWFkCSpxdGRfbGlzdCwKKwlpbnQJCQllcG51bSwKKwl2b2lkCQkJKipwdHIKKykKK3sKKwlzdHJ1Y3QgZWhjaV9xaAkJKnFoID0gTlVMTDsKKworCXFoID0gKHN0cnVjdCBlaGNpX3FoICopICpwdHI7CisJaWYgKHVubGlrZWx5IChxaCA9PSBOVUxMKSkgeworCQkvKiBjYW4ndCBzbGVlcCBoZXJlLCB3ZSBoYXZlIGVoY2ktPmxvY2suLi4gKi8KKwkJcWggPSBxaF9tYWtlIChlaGNpLCB1cmIsIEdGUF9BVE9NSUMpOworCQkqcHRyID0gcWg7CisJfQorCWlmIChsaWtlbHkgKHFoICE9IE5VTEwpKSB7CisJCXN0cnVjdCBlaGNpX3F0ZAkqcXRkOworCisJCWlmICh1bmxpa2VseSAobGlzdF9lbXB0eSAocXRkX2xpc3QpKSkKKwkJCXF0ZCA9IE5VTEw7CisJCWVsc2UKKwkJCXF0ZCA9IGxpc3RfZW50cnkgKHF0ZF9saXN0LT5uZXh0LCBzdHJ1Y3QgZWhjaV9xdGQsCisJCQkJCXF0ZF9saXN0KTsKKworCQkvKiBjb250cm9sIHFoIG1heSBuZWVkIHBhdGNoaW5nIC4uLiAqLworCQlpZiAodW5saWtlbHkgKGVwbnVtID09IDApKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVzYl9yZXNldF9kZXZpY2UoKSBicmllZmx5IHJldmVydHMgdG8gYWRkcmVzcyAwICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNiX3BpcGVkZXZpY2UgKHVyYi0+cGlwZSkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcWgtPmh3X2luZm8xICY9IH5RSF9BRERSX01BU0s7CisJCX0KKworCQkvKiBqdXN0IG9uZSB3YXkgdG8gcXVldWUgcmVxdWVzdHM6IHN3YXAgd2l0aCB0aGUgZHVtbXkgcXRkLgorCQkgKiBvbmx5IGhjIG9yIHFoX3JlZnJlc2goKSBldmVyIG1vZGlmeSB0aGUgb3ZlcmxheS4KKwkJICovCisJCWlmIChsaWtlbHkgKHF0ZCAhPSBOVUxMKSkgeworCQkJc3RydWN0IGVoY2lfcXRkCQkqZHVtbXk7CisJCQlkbWFfYWRkcl90CQlkbWE7CisJCQlfX2xlMzIJCQl0b2tlbjsKKworCQkJLyogdG8gYXZvaWQgcmFjaW5nIHRoZSBIQywgdXNlIHRoZSBkdW1teSB0ZCBpbnN0ZWFkIG9mCisJCQkgKiB0aGUgZmlyc3QgdGQgb2Ygb3VyIGxpc3QgKGJlY29tZXMgbmV3IGR1bW15KS4gIGJvdGgKKwkJCSAqIHRkcyBzdGF5IGRlYWN0aXZhdGVkIHVudGlsIHdlJ3JlIGRvbmUsIHdoZW4gdGhlCisJCQkgKiBIQyBpcyBhbGxvd2VkIHRvIGZldGNoIHRoZSBvbGQgZHVtbXkgKDQuMTAuMikuCisJCQkgKi8KKwkJCXRva2VuID0gcXRkLT5od190b2tlbjsKKwkJCXF0ZC0+aHdfdG9rZW4gPSBIQUxUX0JJVDsKKwkJCXdtYiAoKTsKKwkJCWR1bW15ID0gcWgtPmR1bW15OworCisJCQlkbWEgPSBkdW1teS0+cXRkX2RtYTsKKwkJCSpkdW1teSA9ICpxdGQ7CisJCQlkdW1teS0+cXRkX2RtYSA9IGRtYTsKKworCQkJbGlzdF9kZWwgKCZxdGQtPnF0ZF9saXN0KTsKKwkJCWxpc3RfYWRkICgmZHVtbXktPnF0ZF9saXN0LCBxdGRfbGlzdCk7CisJCQlfX2xpc3Rfc3BsaWNlIChxdGRfbGlzdCwgcWgtPnF0ZF9saXN0LnByZXYpOworCisJCQllaGNpX3F0ZF9pbml0IChxdGQsIHF0ZC0+cXRkX2RtYSk7CisJCQlxaC0+ZHVtbXkgPSBxdGQ7CisKKwkJCS8qIGhjIG11c3Qgc2VlIHRoZSBuZXcgZHVtbXkgYXQgbGlzdCBlbmQgKi8KKwkJCWRtYSA9IHF0ZC0+cXRkX2RtYTsKKwkJCXF0ZCA9IGxpc3RfZW50cnkgKHFoLT5xdGRfbGlzdC5wcmV2LAorCQkJCQlzdHJ1Y3QgZWhjaV9xdGQsIHF0ZF9saXN0KTsKKwkJCXF0ZC0+aHdfbmV4dCA9IFFURF9ORVhUIChkbWEpOworCisJCQkvKiBsZXQgdGhlIGhjIHByb2Nlc3MgdGhlc2UgbmV4dCBxdGRzICovCisJCQl3bWIgKCk7CisJCQlkdW1teS0+aHdfdG9rZW4gPSB0b2tlbjsKKworCQkJdXJiLT5oY3ByaXYgPSBxaF9nZXQgKHFoKTsKKwkJfQorCX0KKwlyZXR1cm4gcWg7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQKK3N1Ym1pdF9hc3luYyAoCisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSwKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwLAorCXN0cnVjdCB1cmIJCSp1cmIsCisJc3RydWN0IGxpc3RfaGVhZAkqcXRkX2xpc3QsCisJaW50CQkJbWVtX2ZsYWdzCispIHsKKwlzdHJ1Y3QgZWhjaV9xdGQJCSpxdGQ7CisJaW50CQkJZXBudW07CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJc3RydWN0IGVoY2lfcWgJCSpxaCA9IE5VTEw7CisKKwlxdGQgPSBsaXN0X2VudHJ5IChxdGRfbGlzdC0+bmV4dCwgc3RydWN0IGVoY2lfcXRkLCBxdGRfbGlzdCk7CisJZXBudW0gPSBlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCisjaWZkZWYgRUhDSV9VUkJfVFJBQ0UKKwllaGNpX2RiZyAoZWhjaSwKKwkJIiVzICVzIHVyYiAlcCBlcCVkJXMgbGVuICVkLCBxdGQgJXAgW3FoICVwXVxuIiwKKwkJX19GVU5DVElPTl9fLCB1cmItPmRldi0+ZGV2cGF0aCwgdXJiLAorCQllcG51bSAmIDB4MGYsIChlcG51bSAmIFVTQl9ESVJfSU4pID8gImluIiA6ICJvdXQiLAorCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCXF0ZCwgZXAtPmhjcHJpdik7CisjZW5kaWYKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCXFoID0gcWhfYXBwZW5kX3RkcyAoZWhjaSwgdXJiLCBxdGRfbGlzdCwgZXBudW0sICZlcC0+aGNwcml2KTsKKworCS8qIENvbnRyb2wvYnVsayBvcGVyYXRpb25zIHRocm91Z2ggVFRzIGRvbid0IG5lZWQgc2NoZWR1bGluZywKKwkgKiB0aGUgSEMgYW5kIFRUIGhhbmRsZSBpdCB3aGVuIHRoZSBUVCBoYXMgYSBidWZmZXIgcmVhZHkuCisJICovCisJaWYgKGxpa2VseSAocWggIT0gTlVMTCkpIHsKKwkJaWYgKGxpa2VseSAocWgtPnFoX3N0YXRlID09IFFIX1NUQVRFX0lETEUpKQorCQkJcWhfbGlua19hc3luYyAoZWhjaSwgcWhfZ2V0IChxaCkpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCWlmICh1bmxpa2VseSAocWggPT0gTlVMTCkpIHsKKwkJcXRkX2xpc3RfZnJlZSAoZWhjaSwgdXJiLCBxdGRfbGlzdCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdGhlIGFzeW5jIHFoIGZvciB0aGUgcXRkcyBiZWluZyByZWNsYWltZWQgYXJlIG5vdyB1bmxpbmtlZCBmcm9tIHRoZSBIQyAqLworCitzdGF0aWMgdm9pZCBlbmRfdW5saW5rX2FzeW5jIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBlaGNpX3FoCQkqcWggPSBlaGNpLT5yZWNsYWltOworCXN0cnVjdCBlaGNpX3FoCQkqbmV4dDsKKworCXRpbWVyX2FjdGlvbl9kb25lIChlaGNpLCBUSU1FUl9JQUFfV0FUQ0hET0cpOworCisJLy8gcWgtPmh3X25leHQgPSBjcHVfdG9fbGUzMiAocWgtPnFoX2RtYSk7CisJcWgtPnFoX3N0YXRlID0gUUhfU1RBVEVfSURMRTsKKwlxaC0+cWhfbmV4dC5xaCA9IE5VTEw7CisJcWhfcHV0IChxaCk7CQkJLy8gcmVmY291bnQgZnJvbSByZWNsYWltIAorCisJLyogb3RoZXIgdW5saW5rKHMpIG1heSBiZSBwZW5kaW5nIChpbiBRSF9TVEFURV9VTkxJTktfV0FJVCkgKi8KKwluZXh0ID0gcWgtPnJlY2xhaW07CisJZWhjaS0+cmVjbGFpbSA9IG5leHQ7CisJZWhjaS0+cmVjbGFpbV9yZWFkeSA9IDA7CisJcWgtPnJlY2xhaW0gPSBOVUxMOworCisJcWhfY29tcGxldGlvbnMgKGVoY2ksIHFoLCByZWdzKTsKKworCWlmICghbGlzdF9lbXB0eSAoJnFoLT5xdGRfbGlzdCkKKwkJCSYmIEhDX0lTX1JVTk5JTkcgKGVoY2lfdG9faGNkKGVoY2kpLT5zdGF0ZSkpCisJCXFoX2xpbmtfYXN5bmMgKGVoY2ksIHFoKTsKKwllbHNlIHsKKwkJcWhfcHV0IChxaCk7CQkvLyByZWZjb3VudCBmcm9tIGFzeW5jIGxpc3QKKworCQkvKiBpdCdzIG5vdCBmcmVlIHRvIHR1cm4gdGhlIGFzeW5jIHNjaGVkdWxlIG9uL29mZjsgbGVhdmUgaXQKKwkJICogYWN0aXZlIGJ1dCBpZGxlIGZvciBhIHdoaWxlIG9uY2UgaXQgZW1wdGllcy4KKwkJICovCisJCWlmIChIQ19JU19SVU5OSU5HIChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpCisJCQkJJiYgZWhjaS0+YXN5bmMtPnFoX25leHQucWggPT0gTlVMTCkKKwkJCXRpbWVyX2FjdGlvbiAoZWhjaSwgVElNRVJfQVNZTkNfT0ZGKTsKKwl9CisKKwlpZiAobmV4dCkgeworCQllaGNpLT5yZWNsYWltID0gTlVMTDsKKwkJc3RhcnRfdW5saW5rX2FzeW5jIChlaGNpLCBuZXh0KTsKKwl9Cit9CisKKy8qIG1ha2VzIHN1cmUgdGhlIGFzeW5jIHFoIHdpbGwgYmVjb21lIGlkbGUgKi8KKy8qIGNhbGxlciBtdXN0IG93biBlaGNpLT5sb2NrICovCisKK3N0YXRpYyB2b2lkIHN0YXJ0X3VubGlua19hc3luYyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9xaCAqcWgpCit7CisJaW50CQljbWQgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOworCXN0cnVjdCBlaGNpX3FoCSpwcmV2OworCisjaWZkZWYgREVCVUcKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmVoY2ktPmxvY2spOworCWlmIChlaGNpLT5yZWNsYWltCisJCQl8fCAocWgtPnFoX3N0YXRlICE9IFFIX1NUQVRFX0xJTktFRAorCQkJCSYmIHFoLT5xaF9zdGF0ZSAhPSBRSF9TVEFURV9VTkxJTktfV0FJVCkKKwkJCSkKKwkJQlVHICgpOworI2VuZGlmCisKKwkvKiBzdG9wIGFzeW5jIHNjaGVkdWxlIHJpZ2h0IG5vdz8gKi8KKwlpZiAodW5saWtlbHkgKHFoID09IGVoY2ktPmFzeW5jKSkgeworCQkvKiBjYW4ndCBnZXQgaGVyZSB3aXRob3V0IFNUU19BU1Mgc2V0ICovCisJCWlmIChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUgIT0gSENfU1RBVEVfSEFMVCkgeworCQkJd3JpdGVsIChjbWQgJiB+Q01EX0FTRSwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOworCQkJd21iICgpOworCQkJLy8gaGFuZHNoYWtlIGxhdGVyLCBpZiB3ZSBuZWVkIHRvCisJCX0KKwkJdGltZXJfYWN0aW9uX2RvbmUgKGVoY2ksIFRJTUVSX0FTWU5DX09GRik7CisJCXJldHVybjsKKwl9IAorCisJcWgtPnFoX3N0YXRlID0gUUhfU1RBVEVfVU5MSU5LOworCWVoY2ktPnJlY2xhaW0gPSBxaCA9IHFoX2dldCAocWgpOworCisJcHJldiA9IGVoY2ktPmFzeW5jOworCXdoaWxlIChwcmV2LT5xaF9uZXh0LnFoICE9IHFoKQorCQlwcmV2ID0gcHJldi0+cWhfbmV4dC5xaDsKKworCXByZXYtPmh3X25leHQgPSBxaC0+aHdfbmV4dDsKKwlwcmV2LT5xaF9uZXh0ID0gcWgtPnFoX25leHQ7CisJd21iICgpOworCisJaWYgKHVubGlrZWx5IChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUgPT0gSENfU1RBVEVfSEFMVCkpIHsKKwkJLyogaWYgKHVubGlrZWx5IChxaC0+cmVjbGFpbSAhPSAwKSkKKwkJICogCXRoaXMgd2lsbCByZWN1cnNlLCBwcm9iYWJseSBub3QgbXVjaAorCQkgKi8KKwkJZW5kX3VubGlua19hc3luYyAoZWhjaSwgTlVMTCk7CisJCXJldHVybjsKKwl9CisKKwllaGNpLT5yZWNsYWltX3JlYWR5ID0gMDsKKwljbWQgfD0gQ01EX0lBQUQ7CisJd3JpdGVsIChjbWQsICZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKwkodm9pZCkgcmVhZGwgKCZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKwl0aW1lcl9hY3Rpb24gKGVoY2ksIFRJTUVSX0lBQV9XQVRDSERPRyk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCitzY2FuX2FzeW5jIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBlaGNpX3FoCQkqcWg7CisJZW51bSBlaGNpX3RpbWVyX2FjdGlvbglhY3Rpb24gPSBUSU1FUl9JT19XQVRDSERPRzsKKworCWlmICghKysoZWhjaS0+c3RhbXApKQorCQllaGNpLT5zdGFtcCsrOworCXRpbWVyX2FjdGlvbl9kb25lIChlaGNpLCBUSU1FUl9BU1lOQ19TSFJJTkspOworcmVzY2FuOgorCXFoID0gZWhjaS0+YXN5bmMtPnFoX25leHQucWg7CisJaWYgKGxpa2VseSAocWggIT0gTlVMTCkpIHsKKwkJZG8geworCQkJLyogY2xlYW4gYW55IGZpbmlzaGVkIHdvcmsgZm9yIHRoaXMgcWggKi8KKwkJCWlmICghbGlzdF9lbXB0eSAoJnFoLT5xdGRfbGlzdCkKKwkJCQkJJiYgcWgtPnN0YW1wICE9IGVoY2ktPnN0YW1wKSB7CisJCQkJaW50IHRlbXA7CisKKwkJCQkvKiB1bmxpbmtzIGNvdWxkIGhhcHBlbiBoZXJlOyBjb21wbGV0aW9uCisJCQkJICogcmVwb3J0aW5nIGRyb3BzIHRoZSBsb2NrLiAgcmVzY2FuIHVzaW5nCisJCQkJICogdGhlIGxhdGVzdCBzY2hlZHVsZSwgYnV0IGRvbid0IHJlc2NhbgorCQkJCSAqIHFocyB3ZSBhbHJlYWR5IGZpbmlzaGVkIChubyBsb29waW5nKS4KKwkJCQkgKi8KKwkJCQlxaCA9IHFoX2dldCAocWgpOworCQkJCXFoLT5zdGFtcCA9IGVoY2ktPnN0YW1wOworCQkJCXRlbXAgPSBxaF9jb21wbGV0aW9ucyAoZWhjaSwgcWgsIHJlZ3MpOworCQkJCXFoX3B1dCAocWgpOworCQkJCWlmICh0ZW1wICE9IDApIHsKKwkJCQkJZ290byByZXNjYW47CisJCQkJfQorCQkJfQorCisJCQkvKiB1bmxpbmsgaWRsZSBlbnRyaWVzLCByZWR1Y2luZyBIQyBQQ0kgdXNhZ2UgYXMgd2VsbAorCQkJICogYXMgSENEIHNjaGVkdWxlLXNjYW5uaW5nIGNvc3RzLiAgZGVsYXkgZm9yIGFueSBxaAorCQkJICogd2UganVzdCBzY2FubmVkLCB0aGVyZSdzIGEgbm90LXVudXN1YWwgY2FzZSB0aGF0IGl0CisJCQkgKiBkb2Vzbid0IHN0YXkgaWRsZSBmb3IgbG9uZy4KKwkJCSAqIChwbHVzLCBhdm9pZHMgc29tZSBraW5kIG9mIHJlLWFjdGl2YXRpb24gcmFjZS4pCisJCQkgKi8KKwkJCWlmIChsaXN0X2VtcHR5ICgmcWgtPnF0ZF9saXN0KSkgeworCQkJCWlmIChxaC0+c3RhbXAgPT0gZWhjaS0+c3RhbXApCisJCQkJCWFjdGlvbiA9IFRJTUVSX0FTWU5DX1NIUklOSzsKKwkJCQllbHNlIGlmICghZWhjaS0+cmVjbGFpbQorCQkJCQkgICAgJiYgcWgtPnFoX3N0YXRlID09IFFIX1NUQVRFX0xJTktFRCkKKwkJCQkJc3RhcnRfdW5saW5rX2FzeW5jIChlaGNpLCBxaCk7CisJCQl9CisKKwkJCXFoID0gcWgtPnFoX25leHQucWg7CisJCX0gd2hpbGUgKHFoKTsKKwl9CisJaWYgKGFjdGlvbiA9PSBUSU1FUl9BU1lOQ19TSFJJTkspCisJCXRpbWVyX2FjdGlvbiAoZWhjaSwgVElNRVJfQVNZTkNfU0hSSU5LKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZjODYzNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCkBAIC0wLDAgKzEsMTk5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA0IGJ5IERhdmlkIEJyb3duZWxsCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgTWljaGFsIFNvamthLCBmb3IgaGlnaC1zcGVlZCBpc28gdHJhbnNmZXJzCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIHRoaXMgZmlsZSBpcyBwYXJ0IG9mIGVoY2ktaGNkLmMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEVIQ0kgc2NoZWR1bGVkIHRyYW5zYWN0aW9uIHN1cHBvcnQ6ICBpbnRlcnJ1cHQsIGlzbywgc3BsaXQgaXNvCisgKiBUaGVzZSBhcmUgY2FsbGVkICJwZXJpb2RpYyIgdHJhbnNhY3Rpb25zIGluIHRoZSBFSENJIHNwZWMuCisgKgorICogTm90ZSB0aGF0IGZvciBpbnRlcnJ1cHQgdHJhbnNmZXJzLCB0aGUgUUgvUVREIG1hbmlwdWxhdGlvbiBpcyBzaGFyZWQKKyAqIHdpdGggdGhlICJhc3luY2hyb25vdXMiIHRyYW5zYWN0aW9uIHN1cHBvcnQgKGNvbnRyb2wvYnVsayB0cmFuc2ZlcnMpLgorICogVGhlIG9ubHkgcmVhbCBkaWZmZXJlbmNlIGlzIGluIGhvdyBpbnRlcnJ1cHQgdHJhbnNmZXJzIGFyZSBzY2hlZHVsZWQuCisgKgorICogRm9yIElTTywgd2UgbWFrZSBhbiAiaXNvX3N0cmVhbSIgaGVhZCB0byBzZXJ2ZSB0aGUgc2FtZSByb2xlIGFzIGEgUUguCisgKiBJdCBrZWVwcyB0cmFjayBvZiBldmVyeSBJVEQgKG9yIFNJVEQpIHRoYXQncyBsaW5rZWQsIGFuZCBob2xkcyBlbm91Z2gKKyAqIHByZS1jYWxjdWxhdGVkIHNjaGVkdWxlIGRhdGEgdG8gbWFrZSBhcHBlbmRpbmcgdG8gdGhlIHF1ZXVlIGJlIHF1aWNrLgorICovCisKK3N0YXRpYyBpbnQgZWhjaV9nZXRfZnJhbWUgKHN0cnVjdCB1c2JfaGNkICpoY2QpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogcGVyaW9kaWNfbmV4dF9zaGFkb3cgLSByZXR1cm4gIm5leHQiIHBvaW50ZXIgb24gc2hhZG93IGxpc3QKKyAqIEBwZXJpb2RpYzogaG9zdCBwb2ludGVyIHRvIHFoL2l0ZC9zaXRkCisgKiBAdGFnOiBoYXJkd2FyZSB0YWcgZm9yIHR5cGUgb2YgdGhpcyByZWNvcmQKKyAqLworc3RhdGljIHVuaW9uIGVoY2lfc2hhZG93ICoKK3BlcmlvZGljX25leHRfc2hhZG93ICh1bmlvbiBlaGNpX3NoYWRvdyAqcGVyaW9kaWMsIF9fbGUzMiB0YWcpCit7CisJc3dpdGNoICh0YWcpIHsKKwljYXNlIFFfVFlQRV9RSDoKKwkJcmV0dXJuICZwZXJpb2RpYy0+cWgtPnFoX25leHQ7CisJY2FzZSBRX1RZUEVfRlNUTjoKKwkJcmV0dXJuICZwZXJpb2RpYy0+ZnN0bi0+ZnN0bl9uZXh0OworCWNhc2UgUV9UWVBFX0lURDoKKwkJcmV0dXJuICZwZXJpb2RpYy0+aXRkLT5pdGRfbmV4dDsKKwkvLyBjYXNlIFFfVFlQRV9TSVREOgorCWRlZmF1bHQ6CisJCXJldHVybiAmcGVyaW9kaWMtPnNpdGQtPnNpdGRfbmV4dDsKKwl9Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgZWhjaS0+bG9jayAqLworc3RhdGljIHZvaWQgcGVyaW9kaWNfdW5saW5rIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHVuc2lnbmVkIGZyYW1lLCB2b2lkICpwdHIpCit7CisJdW5pb24gZWhjaV9zaGFkb3cJKnByZXZfcCA9ICZlaGNpLT5wc2hhZG93IFtmcmFtZV07CisJX19sZTMyCQkJKmh3X3AgPSAmZWhjaS0+cGVyaW9kaWMgW2ZyYW1lXTsKKwl1bmlvbiBlaGNpX3NoYWRvdwloZXJlID0gKnByZXZfcDsKKworCS8qIGZpbmQgcHJlZGVjZXNzb3Igb2YgInB0ciI7IGh3IGFuZCBzaGFkb3cgbGlzdHMgYXJlIGluIHN5bmMgKi8KKwl3aGlsZSAoaGVyZS5wdHIgJiYgaGVyZS5wdHIgIT0gcHRyKSB7CisJCXByZXZfcCA9IHBlcmlvZGljX25leHRfc2hhZG93IChwcmV2X3AsIFFfTkVYVF9UWVBFICgqaHdfcCkpOworCQlod19wID0gaGVyZS5od19uZXh0OworCQloZXJlID0gKnByZXZfcDsKKwl9CisJLyogYW4gaW50ZXJydXB0IGVudHJ5IChhdCBsaXN0IGVuZCkgY291bGQgaGF2ZSBiZWVuIHNoYXJlZCAqLworCWlmICghaGVyZS5wdHIpCisJCXJldHVybjsKKworCS8qIHVwZGF0ZSBzaGFkb3cgYW5kIGhhcmR3YXJlIGxpc3RzIC4uLiB0aGUgb2xkICJuZXh0IiBwb2ludGVycworCSAqIGZyb20gcHRyIG1heSBzdGlsbCBiZSBpbiB1c2UsIHRoZSBjYWxsZXIgdXBkYXRlcyB0aGVtLgorCSAqLworCSpwcmV2X3AgPSAqcGVyaW9kaWNfbmV4dF9zaGFkb3cgKCZoZXJlLCBRX05FWFRfVFlQRSAoKmh3X3ApKTsKKwkqaHdfcCA9ICpoZXJlLmh3X25leHQ7Cit9CisKKy8qIGhvdyBtYW55IG9mIHRoZSB1ZnJhbWUncyAxMjUgdXNlY3MgYXJlIGFsbG9jYXRlZD8gKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydAorcGVyaW9kaWNfdXNlY3MgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgdW5zaWduZWQgZnJhbWUsIHVuc2lnbmVkIHVmcmFtZSkKK3sKKwlfX2xlMzIJCQkqaHdfcCA9ICZlaGNpLT5wZXJpb2RpYyBbZnJhbWVdOworCXVuaW9uIGVoY2lfc2hhZG93CSpxID0gJmVoY2ktPnBzaGFkb3cgW2ZyYW1lXTsKKwl1bnNpZ25lZAkJdXNlY3MgPSAwOworCisJd2hpbGUgKHEtPnB0cikgeworCQlzd2l0Y2ggKFFfTkVYVF9UWVBFICgqaHdfcCkpIHsKKwkJY2FzZSBRX1RZUEVfUUg6CisJCQkvKiBpcyBpdCBpbiB0aGUgUy1tYXNrPyAqLworCQkJaWYgKHEtPnFoLT5od19pbmZvMiAmIGNwdV90b19sZTMyICgxIDw8IHVmcmFtZSkpCisJCQkJdXNlY3MgKz0gcS0+cWgtPnVzZWNzOworCQkJLyogLi4uIG9yIEMtbWFzaz8gKi8KKwkJCWlmIChxLT5xaC0+aHdfaW5mbzIgJiBjcHVfdG9fbGUzMiAoMSA8PCAoOCArIHVmcmFtZSkpKQorCQkJCXVzZWNzICs9IHEtPnFoLT5jX3VzZWNzOworCQkJaHdfcCA9ICZxLT5xaC0+aHdfbmV4dDsKKwkJCXEgPSAmcS0+cWgtPnFoX25leHQ7CisJCQlicmVhazsKKwkJLy8gY2FzZSBRX1RZUEVfRlNUTjoKKwkJZGVmYXVsdDoKKwkJCS8qIGZvciAic2F2ZSBwbGFjZSIgRlNUTnMsIGNvdW50IHRoZSByZWxldmFudCBJTlRSCisJCQkgKiBiYW5kd2lkdGggZnJvbSB0aGUgcHJldmlvdXMgZnJhbWUKKwkJCSAqLworCQkJaWYgKHEtPmZzdG4tPmh3X3ByZXYgIT0gRUhDSV9MSVNUX0VORCkgeworCQkJCWVoY2lfZGJnIChlaGNpLCAiaWdub3JpbmcgRlNUTiBjb3N0IC4uLlxuIik7CisJCQl9CisJCQlod19wID0gJnEtPmZzdG4tPmh3X25leHQ7CisJCQlxID0gJnEtPmZzdG4tPmZzdG5fbmV4dDsKKwkJCWJyZWFrOworCQljYXNlIFFfVFlQRV9JVEQ6CisJCQl1c2VjcyArPSBxLT5pdGQtPnVzZWNzIFt1ZnJhbWVdOworCQkJaHdfcCA9ICZxLT5pdGQtPmh3X25leHQ7CisJCQlxID0gJnEtPml0ZC0+aXRkX25leHQ7CisJCQlicmVhazsKKwkJY2FzZSBRX1RZUEVfU0lURDoKKwkJCS8qIGlzIGl0IGluIHRoZSBTLW1hc2s/ICAoY291bnQgU1BMSVQsIERBVEEpICovCisJCQlpZiAocS0+c2l0ZC0+aHdfdWZyYW1lICYgY3B1X3RvX2xlMzIgKDEgPDwgdWZyYW1lKSkgeworCQkJCWlmIChxLT5zaXRkLT5od19mdWxsc3BlZWRfZXAgJgorCQkJCQkJX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMTw8MzEpKQorCQkJCQl1c2VjcyArPSBxLT5zaXRkLT5zdHJlYW0tPnVzZWNzOworCQkJCWVsc2UJLyogd29yc3QgY2FzZSBmb3IgT1VUIHN0YXJ0LXNwbGl0ICovCisJCQkJCXVzZWNzICs9IEhTX1VTRUNTX0lTTyAoMTg4KTsKKwkJCX0KKworCQkJLyogLi4uIEMtbWFzaz8gIChjb3VudCBDU1BMSVQsIERBVEEpICovCisJCQlpZiAocS0+c2l0ZC0+aHdfdWZyYW1lICYKKwkJCQkJY3B1X3RvX2xlMzIgKDEgPDwgKDggKyB1ZnJhbWUpKSkgeworCQkJCS8qIHdvcnN0IGNhc2UgZm9yIElOIGNvbXBsZXRlLXNwbGl0ICovCisJCQkJdXNlY3MgKz0gcS0+c2l0ZC0+c3RyZWFtLT5jX3VzZWNzOworCQkJfQorCisJCQlod19wID0gJnEtPnNpdGQtPmh3X25leHQ7CisJCQlxID0gJnEtPnNpdGQtPnNpdGRfbmV4dDsKKwkJCWJyZWFrOworCQl9CisJfQorI2lmZGVmCURFQlVHCisJaWYgKHVzZWNzID4gMTAwKQorCQllaGNpX2VyciAoZWhjaSwgInVmcmFtZSAlZCBzY2hlZCBvdmVycnVuOiAlZCB1c2Vjc1xuIiwKKwkJCWZyYW1lICogOCArIHVmcmFtZSwgdXNlY3MpOworI2VuZGlmCisJcmV0dXJuIHVzZWNzOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IHNhbWVfdHQgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYxLCBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2MikKK3sKKwlpZiAoIWRldjEtPnR0IHx8ICFkZXYyLT50dCkKKwkJcmV0dXJuIDA7CisJaWYgKGRldjEtPnR0ICE9IGRldjItPnR0KQorCQlyZXR1cm4gMDsKKwlpZiAoZGV2MS0+dHQtPm11bHRpKQorCQlyZXR1cm4gZGV2MS0+dHRwb3J0ID09IGRldjItPnR0cG9ydDsKKwllbHNlCisJCXJldHVybiAxOworfQorCisvKiByZXR1cm4gdHJ1ZSBpZmYgdGhlIGRldmljZSdzIHRyYW5zYWN0aW9uIHRyYW5zbGF0b3IgaXMgYXZhaWxhYmxlCisgKiBmb3IgYSBwZXJpb2RpYyB0cmFuc2ZlciBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIGZyYW1lLCB1c2luZworICogYWxsIHRoZSB1ZnJhbWVzIGluIHRoZSBtYXNrLgorICovCitzdGF0aWMgaW50IHR0X25vX2NvbGxpc2lvbiAoCisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSwKKwl1bnNpZ25lZAkJcGVyaW9kLAorCXN0cnVjdCB1c2JfZGV2aWNlCSpkZXYsCisJdW5zaWduZWQJCWZyYW1lLAorCXUzMgkJCXVmX21hc2sKKykKK3sKKwlpZiAocGVyaW9kID09IDApCS8qIGVycm9yICovCisJCXJldHVybiAwOworCisJLyogbm90ZSBiYW5kd2lkdGggd2FzdGFnZTogIHNwbGl0IG5ldmVyIGZvbGxvd3MgY3NwbGl0CisJICogKGRpZmZlcmVudCBkZXYgb3IgZW5kcG9pbnQpIHVudGlsIHRoZSBuZXh0IHVmcmFtZS4KKwkgKiBjYWxsaW5nIGNvbnZlbnRpb24gZG9lc24ndCBtYWtlIHRoYXQgZGlzdGluY3Rpb24uCisJICovCisJZm9yICg7IGZyYW1lIDwgZWhjaS0+cGVyaW9kaWNfc2l6ZTsgZnJhbWUgKz0gcGVyaW9kKSB7CisJCXVuaW9uIGVoY2lfc2hhZG93CWhlcmU7CisJCV9fbGUzMgkJCXR5cGU7CisKKwkJaGVyZSA9IGVoY2ktPnBzaGFkb3cgW2ZyYW1lXTsKKwkJdHlwZSA9IFFfTkVYVF9UWVBFIChlaGNpLT5wZXJpb2RpYyBbZnJhbWVdKTsKKwkJd2hpbGUgKGhlcmUucHRyKSB7CisJCQlzd2l0Y2ggKHR5cGUpIHsKKwkJCWNhc2UgUV9UWVBFX0lURDoKKwkJCQl0eXBlID0gUV9ORVhUX1RZUEUgKGhlcmUuaXRkLT5od19uZXh0KTsKKwkJCQloZXJlID0gaGVyZS5pdGQtPml0ZF9uZXh0OworCQkJCWNvbnRpbnVlOworCQkJY2FzZSBRX1RZUEVfUUg6CisJCQkJaWYgKHNhbWVfdHQgKGRldiwgaGVyZS5xaC0+ZGV2KSkgeworCQkJCQl1MzIJCW1hc2s7CisKKwkJCQkJbWFzayA9IGxlMzJfdG9fY3B1IChoZXJlLnFoLT5od19pbmZvMik7CisJCQkJCS8qICJrbm93cyIgbm8gZ2FwIGlzIG5lZWRlZCAqLworCQkJCQltYXNrIHw9IG1hc2sgPj4gODsKKwkJCQkJaWYgKG1hc2sgJiB1Zl9tYXNrKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXR5cGUgPSBRX05FWFRfVFlQRSAoaGVyZS5xaC0+aHdfbmV4dCk7CisJCQkJaGVyZSA9IGhlcmUucWgtPnFoX25leHQ7CisJCQkJY29udGludWU7CisJCQljYXNlIFFfVFlQRV9TSVREOgorCQkJCWlmIChzYW1lX3R0IChkZXYsIGhlcmUuc2l0ZC0+dXJiLT5kZXYpKSB7CisJCQkJCXUxNgkJbWFzazsKKworCQkJCQltYXNrID0gbGUzMl90b19jcHUgKGhlcmUuc2l0ZAorCQkJCQkJCQktPmh3X3VmcmFtZSk7CisJCQkJCS8qIEZJWE1FIGFzc3VtZXMgbm8gZ2FwIGZvciBJTiEgKi8KKwkJCQkJbWFzayB8PSBtYXNrID4+IDg7CisJCQkJCWlmIChtYXNrICYgdWZfbWFzaykKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQl0eXBlID0gUV9ORVhUX1RZUEUgKGhlcmUuc2l0ZC0+aHdfbmV4dCk7CisJCQkJaGVyZSA9IGhlcmUuc2l0ZC0+c2l0ZF9uZXh0OworCQkJCWNvbnRpbnVlOworCQkJLy8gY2FzZSBRX1RZUEVfRlNUTjoKKwkJCWRlZmF1bHQ6CisJCQkJZWhjaV9kYmcgKGVoY2ksCisJCQkJCSJwZXJpb2RpYyBmcmFtZSAlZCBib2d1cyB0eXBlICVkXG4iLAorCQkJCQlmcmFtZSwgdHlwZSk7CisJCQl9CisKKwkJCS8qIGNvbGxpc2lvbiBvciBlcnJvciAqLworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiBubyBjb2xsaXNpb24gKi8KKwlyZXR1cm4gMTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBlbmFibGVfcGVyaW9kaWMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSkKK3sKKwl1MzIJY21kOworCWludAlzdGF0dXM7CisKKwkvKiBkaWQgY2xlYXJpbmcgUFNFIGRpZCB0YWtlIGVmZmVjdCB5ZXQ/CisJICogdGFrZXMgZWZmZWN0IG9ubHkgYXQgZnJhbWUgYm91bmRhcmllcy4uLgorCSAqLworCXN0YXR1cyA9IGhhbmRzaGFrZSAoJmVoY2ktPnJlZ3MtPnN0YXR1cywgU1RTX1BTUywgMCwgOSAqIDEyNSk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWVoY2lfdG9faGNkKGVoY2kpLT5zdGF0ZSA9IEhDX1NUQVRFX0hBTFQ7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJY21kID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5jb21tYW5kKSB8IENNRF9QU0U7CisJd3JpdGVsIChjbWQsICZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKwkvKiBwb3N0ZWQgd3JpdGUgLi4uIFBTUyBoYXBwZW5zIGxhdGVyICovCisJZWhjaV90b19oY2QoZWhjaSktPnN0YXRlID0gSENfU1RBVEVfUlVOTklORzsKKworCS8qIG1ha2Ugc3VyZSBlaGNpX3dvcmsgc2NhbnMgdGhlc2UgKi8KKwllaGNpLT5uZXh0X3VmcmFtZSA9IHJlYWRsICgmZWhjaS0+cmVncy0+ZnJhbWVfaW5kZXgpCisJCQkJJSAoZWhjaS0+cGVyaW9kaWNfc2l6ZSA8PCAzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaXNhYmxlX3BlcmlvZGljIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCit7CisJdTMyCWNtZDsKKwlpbnQJc3RhdHVzOworCisJLyogZGlkIHNldHRpbmcgUFNFIG5vdCB0YWtlIGVmZmVjdCB5ZXQ/CisJICogdGFrZXMgZWZmZWN0IG9ubHkgYXQgZnJhbWUgYm91bmRhcmllcy4uLgorCSAqLworCXN0YXR1cyA9IGhhbmRzaGFrZSAoJmVoY2ktPnJlZ3MtPnN0YXR1cywgU1RTX1BTUywgU1RTX1BTUywgOSAqIDEyNSk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWVoY2lfdG9faGNkKGVoY2kpLT5zdGF0ZSA9IEhDX1NUQVRFX0hBTFQ7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJY21kID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5jb21tYW5kKSAmIH5DTURfUFNFOworCXdyaXRlbCAoY21kLCAmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJLyogcG9zdGVkIHdyaXRlIC4uLiAqLworCisJZWhjaS0+bmV4dF91ZnJhbWUgPSAtMTsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogcGVyaW9kaWMgc2NoZWR1bGUgc2xvdHMgaGF2ZSBpc28gdGRzIChub3JtYWwgb3Igc3BsaXQpIGZpcnN0LCB0aGVuIGEKKyAqIHNwYXJzZSB0cmVlIGZvciBhY3RpdmUgaW50ZXJydXB0IHRyYW5zZmVycy4KKyAqCisgKiB0aGlzIGp1c3QgbGlua3MgaW4gYSBxaDsgY2FsbGVyIGd1YXJhbnRlZXMgdWZyYW1lIG1hc2tzIGFyZSBzZXQgcmlnaHQuCisgKiBubyBGU1ROIHN1cHBvcnQgKHlldDsgZWhjaSAwLjk2KykKKyAqLworc3RhdGljIGludCBxaF9saW5rX3BlcmlvZGljIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCkKK3sKKwl1bnNpZ25lZAlpOworCXVuc2lnbmVkCXBlcmlvZCA9IHFoLT5wZXJpb2Q7CisKKwlkZXZfZGJnICgmcWgtPmRldi0+ZGV2LAorCQkibGluayBxaCVkLSUwNHgvJXAgc3RhcnQgJWQgWyVkLyVkIHVzXVxuIiwKKwkJcGVyaW9kLCBsZTMyX3RvX2NwdXAgKCZxaC0+aHdfaW5mbzIpICYgMHhmZmZmLAorCQlxaCwgcWgtPnN0YXJ0LCBxaC0+dXNlY3MsIHFoLT5jX3VzZWNzKTsKKworCS8qIGhpZ2ggYmFuZHdpZHRoLCBvciBvdGhlcndpc2UgZXZlcnkgbWljcm9mcmFtZSAqLworCWlmIChwZXJpb2QgPT0gMCkKKwkJcGVyaW9kID0gMTsKKworCWZvciAoaSA9IHFoLT5zdGFydDsgaSA8IGVoY2ktPnBlcmlvZGljX3NpemU7IGkgKz0gcGVyaW9kKSB7CisJCXVuaW9uIGVoY2lfc2hhZG93CSpwcmV2ID0gJmVoY2ktPnBzaGFkb3cgW2ldOworCQl1MzIJCQkqaHdfcCA9ICZlaGNpLT5wZXJpb2RpYyBbaV07CisJCXVuaW9uIGVoY2lfc2hhZG93CWhlcmUgPSAqcHJldjsKKwkJdTMyCQkJdHlwZSA9IDA7CisKKwkJLyogc2tpcCB0aGUgaXNvIG5vZGVzIGF0IGxpc3QgaGVhZCAqLworCQl3aGlsZSAoaGVyZS5wdHIpIHsKKwkJCXR5cGUgPSBRX05FWFRfVFlQRSAoKmh3X3ApOworCQkJaWYgKHR5cGUgPT0gUV9UWVBFX1FIKQorCQkJCWJyZWFrOworCQkJcHJldiA9IHBlcmlvZGljX25leHRfc2hhZG93IChwcmV2LCB0eXBlKTsKKwkJCWh3X3AgPSAmaGVyZS5xaC0+aHdfbmV4dDsKKwkJCWhlcmUgPSAqcHJldjsKKwkJfQorCisJCS8qIHNvcnRpbmcgZWFjaCBicmFuY2ggYnkgcGVyaW9kIChzbG93LS0+ZmFzdCkKKwkJICogZW5hYmxlcyBzaGFyaW5nIGludGVyaW9yIHRyZWUgbm9kZXMKKwkJICovCisJCXdoaWxlIChoZXJlLnB0ciAmJiBxaCAhPSBoZXJlLnFoKSB7CisJCQlpZiAocWgtPnBlcmlvZCA+IGhlcmUucWgtPnBlcmlvZCkKKwkJCQlicmVhazsKKwkJCXByZXYgPSAmaGVyZS5xaC0+cWhfbmV4dDsKKwkJCWh3X3AgPSAmaGVyZS5xaC0+aHdfbmV4dDsKKwkJCWhlcmUgPSAqcHJldjsKKwkJfQorCQkvKiBsaW5rIGluIHRoaXMgcWgsIHVubGVzcyBzb21lIGVhcmxpZXIgcGFzcyBkaWQgdGhhdCAqLworCQlpZiAocWggIT0gaGVyZS5xaCkgeworCQkJcWgtPnFoX25leHQgPSBoZXJlOworCQkJaWYgKGhlcmUucWgpCisJCQkJcWgtPmh3X25leHQgPSAqaHdfcDsKKwkJCXdtYiAoKTsKKwkJCXByZXYtPnFoID0gcWg7CisJCQkqaHdfcCA9IFFIX05FWFQgKHFoLT5xaF9kbWEpOworCQl9CisJfQorCXFoLT5xaF9zdGF0ZSA9IFFIX1NUQVRFX0xJTktFRDsKKwlxaF9nZXQgKHFoKTsKKworCS8qIHVwZGF0ZSBwZXItcWggYmFuZHdpZHRoIGZvciB1c2JmcyAqLworCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9hbGxvY2F0ZWQgKz0gcWgtPnBlcmlvZAorCQk/ICgocWgtPnVzZWNzICsgcWgtPmNfdXNlY3MpIC8gcWgtPnBlcmlvZCkKKwkJOiAocWgtPnVzZWNzICogOCk7CisKKwkvKiBtYXliZSBlbmFibGUgcGVyaW9kaWMgc2NoZWR1bGUgcHJvY2Vzc2luZyAqLworCWlmICghZWhjaS0+cGVyaW9kaWNfc2NoZWQrKykKKwkJcmV0dXJuIGVuYWJsZV9wZXJpb2RpYyAoZWhjaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcWhfdW5saW5rX3BlcmlvZGljIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCkKK3sKKwl1bnNpZ25lZAlpOworCXVuc2lnbmVkCXBlcmlvZDsKKworCS8vIEZJWE1FOgorCS8vIElGIHRoaXMgaXNuJ3QgaGlnaCBzcGVlZAorCS8vICAgYW5kIHRoaXMgcWggaXMgYWN0aXZlIGluIHRoZSBjdXJyZW50IHVmcmFtZQorCS8vICAgKGFuZCBvdmVybGF5IHRva2VuIFNwbGl0WHN0YXRlIGlzIGZhbHNlPykKKwkvLyBUSEVOCisJLy8gICBxaC0+aHdfaW5mbzEgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSA8PCA3IC8qICJpZ25vcmUiICovKTsKKworCS8qIGhpZ2ggYmFuZHdpZHRoLCBvciBvdGhlcndpc2UgcGFydCBvZiBldmVyeSBtaWNyb2ZyYW1lICovCisJaWYgKChwZXJpb2QgPSBxaC0+cGVyaW9kKSA9PSAwKQorCQlwZXJpb2QgPSAxOworCisJZm9yIChpID0gcWgtPnN0YXJ0OyBpIDwgZWhjaS0+cGVyaW9kaWNfc2l6ZTsgaSArPSBwZXJpb2QpCisJCXBlcmlvZGljX3VubGluayAoZWhjaSwgaSwgcWgpOworCisJLyogdXBkYXRlIHBlci1xaCBiYW5kd2lkdGggZm9yIHVzYmZzICovCisJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuYmFuZHdpZHRoX2FsbG9jYXRlZCAtPSBxaC0+cGVyaW9kCisJCT8gKChxaC0+dXNlY3MgKyBxaC0+Y191c2VjcykgLyBxaC0+cGVyaW9kKQorCQk6IChxaC0+dXNlY3MgKiA4KTsKKworCWRldl9kYmcgKCZxaC0+ZGV2LT5kZXYsCisJCSJ1bmxpbmsgcWglZC0lMDR4LyVwIHN0YXJ0ICVkIFslZC8lZCB1c11cbiIsCisJCXFoLT5wZXJpb2QsIGxlMzJfdG9fY3B1cCAoJnFoLT5od19pbmZvMikgJiAweGZmZmYsCisJCXFoLCBxaC0+c3RhcnQsIHFoLT51c2VjcywgcWgtPmNfdXNlY3MpOworCisJLyogcWgtPnFoX25leHQgc3RpbGwgImxpdmUiIHRvIEhDICovCisJcWgtPnFoX3N0YXRlID0gUUhfU1RBVEVfVU5MSU5LOworCXFoLT5xaF9uZXh0LnB0ciA9IE5VTEw7CisJcWhfcHV0IChxaCk7CisKKwkvKiBtYXliZSB0dXJuIG9mZiBwZXJpb2RpYyBzY2hlZHVsZSAqLworCWVoY2ktPnBlcmlvZGljX3NjaGVkLS07CisJaWYgKCFlaGNpLT5wZXJpb2RpY19zY2hlZCkKKwkJKHZvaWQpIGRpc2FibGVfcGVyaW9kaWMgKGVoY2kpOworfQorCitzdGF0aWMgdm9pZCBpbnRyX2Rlc2NoZWR1bGUgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcWggKnFoKQoreworCXVuc2lnbmVkCXdhaXQ7CisKKwlxaF91bmxpbmtfcGVyaW9kaWMgKGVoY2ksIHFoKTsKKworCS8qIHNpbXBsZS9wYXJhbm9pZDogIGFsd2F5cyBkZWxheSwgZXhwZWN0aW5nIHRoZSBIQyBuZWVkcyB0byByZWFkCisJICogcWgtPmh3X25leHQgb3IgZmluaXNoIGEgd3JpdGViYWNrIGFmdGVyIFNQTElUL0NTUExJVCAuLi4gYW5kCisJICogZXhwZWN0IGtodWJkIHRvIGNsZWFuIHVwIGFmdGVyIGFueSBDU1BMSVRzIHdlIHdvbid0IGlzc3VlLgorCSAqIGFjdGl2ZSBoaWdoIHNwZWVkIHF1ZXVlcyBtYXkgbmVlZCBiaWdnZXIgZGVsYXlzLi4uCisJICovCisJaWYgKGxpc3RfZW1wdHkgKCZxaC0+cXRkX2xpc3QpCisJCQl8fCAoX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMHgwZmYgPDwgOCkKKwkJCQkJJiBxaC0+aHdfaW5mbzIpICE9IDApCisJCXdhaXQgPSAyOworCWVsc2UKKwkJd2FpdCA9IDU1OwkvKiB3b3JzdCBjYXNlOiAzICogMTAyNCAqLworCisJdWRlbGF5ICh3YWl0KTsKKwlxaC0+cWhfc3RhdGUgPSBRSF9TVEFURV9JRExFOworCXFoLT5od19uZXh0ID0gRUhDSV9MSVNUX0VORDsKKwl3bWIgKCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgY2hlY2tfcGVyaW9kICgKKwlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIAorCXVuc2lnbmVkCWZyYW1lLAorCXVuc2lnbmVkCXVmcmFtZSwKKwl1bnNpZ25lZAlwZXJpb2QsCisJdW5zaWduZWQJdXNlY3MKKykgeworCWludAkJY2xhaW1lZDsKKworCS8qIGNvbXBsZXRlIHNwbGl0IHJ1bm5pbmcgaW50byBuZXh0IGZyYW1lPworCSAqIGdpdmVuIEZTVE4gc3VwcG9ydCwgd2UgY291bGQgc29tZXRpbWVzIGNoZWNrLi4uCisJICovCisJaWYgKHVmcmFtZSA+PSA4KQorCQlyZXR1cm4gMDsKKworCS8qCisJICogODAlIHBlcmlvZGljID09IDEwMCB1c2VjL3VmcmFtZSBhdmFpbGFibGUKKwkgKiBjb252ZXJ0ICJ1c2VjcyB3ZSBuZWVkIiB0byAibWF4IGFscmVhZHkgY2xhaW1lZCIgCisJICovCisJdXNlY3MgPSAxMDAgLSB1c2VjczsKKworCS8qIHdlICJrbm93IiAyIGFuZCA0IHVmcmFtZSBpbnRlcnZhbHMgd2VyZSByZWplY3RlZDsgc28KKwkgKiBmb3IgcGVyaW9kIDAsIGNoZWNrIF9ldmVyeV8gbWljcm9mcmFtZSBpbiB0aGUgc2NoZWR1bGUuCisJICovCisJaWYgKHVubGlrZWx5IChwZXJpb2QgPT0gMCkpIHsKKwkJZG8geworCQkJZm9yICh1ZnJhbWUgPSAwOyB1ZnJhbWUgPCA3OyB1ZnJhbWUrKykgeworCQkJCWNsYWltZWQgPSBwZXJpb2RpY191c2VjcyAoZWhjaSwgZnJhbWUsIHVmcmFtZSk7CisJCQkJaWYgKGNsYWltZWQgPiB1c2VjcykKKwkJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0gd2hpbGUgKChmcmFtZSArPSAxKSA8IGVoY2ktPnBlcmlvZGljX3NpemUpOworCisJLyoganVzdCBjaGVjayB0aGUgc3BlY2lmaWVkIHVmcmFtZSwgYXQgdGhhdCBwZXJpb2QgKi8KKwl9IGVsc2UgeworCQlkbyB7CisJCQljbGFpbWVkID0gcGVyaW9kaWNfdXNlY3MgKGVoY2ksIGZyYW1lLCB1ZnJhbWUpOworCQkJaWYgKGNsYWltZWQgPiB1c2VjcykKKwkJCQlyZXR1cm4gMDsKKwkJfSB3aGlsZSAoKGZyYW1lICs9IHBlcmlvZCkgPCBlaGNpLT5wZXJpb2RpY19zaXplKTsKKwl9CisKKwkvLyBzdWNjZXNzIQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNoZWNrX2ludHJfc2NoZWR1bGUgKAorCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2ksIAorCXVuc2lnbmVkCQlmcmFtZSwKKwl1bnNpZ25lZAkJdWZyYW1lLAorCWNvbnN0IHN0cnVjdCBlaGNpX3FoCSpxaCwKKwlfX2xlMzIJCQkqY19tYXNrcAorKQoreworICAgIAlpbnQJCXJldHZhbCA9IC1FTk9TUEM7CisJdTgJCW1hc2s7CisKKwlpZiAocWgtPmNfdXNlY3MgJiYgdWZyYW1lID49IDYpCQkvKiBGU1ROIHRlcnJpdG9yeT8gKi8KKwkJZ290byBkb25lOworCisJaWYgKCFjaGVja19wZXJpb2QgKGVoY2ksIGZyYW1lLCB1ZnJhbWUsIHFoLT5wZXJpb2QsIHFoLT51c2VjcykpCisJCWdvdG8gZG9uZTsKKwlpZiAoIXFoLT5jX3VzZWNzKSB7CisJCXJldHZhbCA9IDA7CisJCSpjX21hc2twID0gMDsKKwkJZ290byBkb25lOworCX0KKworCS8qIE1ha2Ugc3VyZSB0aGlzIHR0J3MgYnVmZmVyIGlzIGFsc28gYXZhaWxhYmxlIGZvciBDU1BMSVRzLgorCSAqIFdlIHBlc3NpbWl6ZSBhIGJpdDsgcHJvYmFibHkgdGhlIHR5cGljYWwgZnVsbCBzcGVlZCBjYXNlCisJICogZG9lc24ndCBuZWVkIHRoZSBzZWNvbmQgQ1NQTElULgorCSAqIAorCSAqIE5PVEU6ICBib3RoIFNQTElUIGFuZCBDU1BMSVQgY291bGQgYmUgY2hlY2tlZCBpbiBqdXN0CisJICogb25lIHNtYXJ0IHBhc3MuLi4KKwkgKi8KKwltYXNrID0gMHgwMyA8PCAodWZyYW1lICsgcWgtPmdhcF91Zik7CisJKmNfbWFza3AgPSBjcHVfdG9fbGUzMiAobWFzayA8PCA4KTsKKworCW1hc2sgfD0gMSA8PCB1ZnJhbWU7CisJaWYgKHR0X25vX2NvbGxpc2lvbiAoZWhjaSwgcWgtPnBlcmlvZCwgcWgtPmRldiwgZnJhbWUsIG1hc2spKSB7CisJCWlmICghY2hlY2tfcGVyaW9kIChlaGNpLCBmcmFtZSwgdWZyYW1lICsgcWgtPmdhcF91ZiArIDEsCisJCQkJCXFoLT5wZXJpb2QsIHFoLT5jX3VzZWNzKSkKKwkJCWdvdG8gZG9uZTsKKwkJaWYgKCFjaGVja19wZXJpb2QgKGVoY2ksIGZyYW1lLCB1ZnJhbWUgKyBxaC0+Z2FwX3VmLAorCQkJCQlxaC0+cGVyaW9kLCBxaC0+Y191c2VjcykpCisJCQlnb3RvIGRvbmU7CisJCXJldHZhbCA9IDA7CisJfQorZG9uZToKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiAiZmlyc3QgZml0IiBzY2hlZHVsaW5nIHBvbGljeSB1c2VkIHRoZSBmaXJzdCB0aW1lIHRocm91Z2gsCisgKiBvciB3aGVuIHRoZSBwcmV2aW91cyBzY2hlZHVsZSBzbG90IGNhbid0IGJlIHJlLXVzZWQuCisgKi8KK3N0YXRpYyBpbnQgcWhfc2NoZWR1bGUgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfcWggKnFoKQoreworCWludCAJCXN0YXR1czsKKwl1bnNpZ25lZAl1ZnJhbWU7CisJX19sZTMyCQljX21hc2s7CisJdW5zaWduZWQJZnJhbWU7CQkvKiAwLi4ocWgtPnBlcmlvZCAtIDEpLCBvciBOT19GUkFNRSAqLworCisJcWhfcmVmcmVzaChlaGNpLCBxaCk7CisJcWgtPmh3X25leHQgPSBFSENJX0xJU1RfRU5EOworCWZyYW1lID0gcWgtPnN0YXJ0OworCisJLyogcmV1c2UgdGhlIHByZXZpb3VzIHNjaGVkdWxlIHNsb3RzLCBpZiB3ZSBjYW4gKi8KKwlpZiAoZnJhbWUgPCBxaC0+cGVyaW9kKSB7CisJCXVmcmFtZSA9IGZmcyAobGUzMl90b19jcHVwICgmcWgtPmh3X2luZm8yKSAmIDB4MDBmZik7CisJCXN0YXR1cyA9IGNoZWNrX2ludHJfc2NoZWR1bGUgKGVoY2ksIGZyYW1lLCAtLXVmcmFtZSwKKwkJCQlxaCwgJmNfbWFzayk7CisJfSBlbHNlIHsKKwkJdWZyYW1lID0gMDsKKwkJY19tYXNrID0gMDsKKwkJc3RhdHVzID0gLUVOT1NQQzsKKwl9CisKKwkvKiBlbHNlIHNjYW4gdGhlIHNjaGVkdWxlIHRvIGZpbmQgYSBncm91cCBvZiBzbG90cyBzdWNoIHRoYXQgYWxsCisJICogdWZyYW1lcyBoYXZlIGVub3VnaCBwZXJpb2RpYyBiYW5kd2lkdGggYXZhaWxhYmxlLgorCSAqLworCWlmIChzdGF0dXMpIHsKKwkJLyogIm5vcm1hbCIgY2FzZSwgdWZyYW1pbmcgZmxleGlibGUgZXhjZXB0IHdpdGggc3BsaXRzICovCisJCWlmIChxaC0+cGVyaW9kKSB7CisJCQlmcmFtZSA9IHFoLT5wZXJpb2QgLSAxOworCQkJZG8geworCQkJCWZvciAodWZyYW1lID0gMDsgdWZyYW1lIDwgODsgdWZyYW1lKyspIHsKKwkJCQkJc3RhdHVzID0gY2hlY2tfaW50cl9zY2hlZHVsZSAoZWhjaSwKKwkJCQkJCQlmcmFtZSwgdWZyYW1lLCBxaCwKKwkJCQkJCQkmY19tYXNrKTsKKwkJCQkJaWYgKHN0YXR1cyA9PSAwKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSB3aGlsZSAoc3RhdHVzICYmIGZyYW1lLS0pOworCisJCS8qIHFoLT5wZXJpb2QgPT0gMCBtZWFucyBldmVyeSB1ZnJhbWUgKi8KKwkJfSBlbHNlIHsKKwkJCWZyYW1lID0gMDsKKwkJCXN0YXR1cyA9IGNoZWNrX2ludHJfc2NoZWR1bGUgKGVoY2ksIDAsIDAsIHFoLCAmY19tYXNrKTsKKwkJfQorCQlpZiAoc3RhdHVzKQorCQkJZ290byBkb25lOworCQlxaC0+c3RhcnQgPSBmcmFtZTsKKworCQkvKiByZXNldCBTLWZyYW1lIGFuZCAobWF5YmUpIEMtZnJhbWUgbWFza3MgKi8KKwkJcWgtPmh3X2luZm8yICY9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKH4weGZmZmYpOworCQlxaC0+aHdfaW5mbzIgfD0gcWgtPnBlcmlvZAorCQkJPyBjcHVfdG9fbGUzMiAoMSA8PCB1ZnJhbWUpCisJCQk6IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDB4ZmYpOworCQlxaC0+aHdfaW5mbzIgfD0gY19tYXNrOworCX0gZWxzZQorCQllaGNpX2RiZyAoZWhjaSwgInJldXNlZCBxaCAlcCBzY2hlZHVsZVxuIiwgcWgpOworCisJLyogc3R1ZmYgaW50byB0aGUgcGVyaW9kaWMgc2NoZWR1bGUgKi8KKyAJc3RhdHVzID0gcWhfbGlua19wZXJpb2RpYyAoZWhjaSwgcWgpOworZG9uZToKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGludHJfc3VibWl0ICgKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLAorCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXAsCisJc3RydWN0IHVyYgkJKnVyYiwKKwlzdHJ1Y3QgbGlzdF9oZWFkCSpxdGRfbGlzdCwKKwlpbnQJCQltZW1fZmxhZ3MKKykgeworCXVuc2lnbmVkCQllcG51bTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlzdHJ1Y3QgZWhjaV9xaAkJKnFoOworCWludAkJCXN0YXR1cyA9IDA7CisJc3RydWN0IGxpc3RfaGVhZAllbXB0eTsKKworCS8qIGdldCBlbmRwb2ludCBhbmQgdHJhbnNmZXIvc2NoZWR1bGUgZGF0YSAqLworCWVwbnVtID0gZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzczsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCisJLyogZ2V0IHFoIGFuZCBmb3JjZSBhbnkgc2NoZWR1bGluZyBlcnJvcnMgKi8KKwlJTklUX0xJU1RfSEVBRCAoJmVtcHR5KTsKKwlxaCA9IHFoX2FwcGVuZF90ZHMgKGVoY2ksIHVyYiwgJmVtcHR5LCBlcG51bSwgJmVwLT5oY3ByaXYpOworCWlmIChxaCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisJaWYgKHFoLT5xaF9zdGF0ZSA9PSBRSF9TVEFURV9JRExFKSB7CisJCWlmICgoc3RhdHVzID0gcWhfc2NoZWR1bGUgKGVoY2ksIHFoKSkgIT0gMCkKKwkJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiB0aGVuIHF1ZXVlIHRoZSB1cmIncyB0ZHMgdG8gdGhlIHFoICovCisJcWggPSBxaF9hcHBlbmRfdGRzIChlaGNpLCB1cmIsIHF0ZF9saXN0LCBlcG51bSwgJmVwLT5oY3ByaXYpOworCUJVR19PTiAocWggPT0gTlVMTCk7CisKKwkvKiAuLi4gdXBkYXRlIHVzYmZzIHBlcmlvZGljIHN0YXRzICovCisJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuYmFuZHdpZHRoX2ludF9yZXFzKys7CisKK2RvbmU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlpZiAoc3RhdHVzKQorCQlxdGRfbGlzdF9mcmVlIChlaGNpLCB1cmIsIHF0ZF9saXN0KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGVoY2lfaXNvX3N0cmVhbSBvcHMgd29yayB3aXRoIGJvdGggSVREIGFuZCBTSVREICovCisKK3N0YXRpYyBzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtICoKK2lzb19zdHJlYW1fYWxsb2MgKGludCBtZW1fZmxhZ3MpCit7CisJc3RydWN0IGVoY2lfaXNvX3N0cmVhbSAqc3RyZWFtOworCisJc3RyZWFtID0ga21hbGxvYyhzaXplb2YgKnN0cmVhbSwgbWVtX2ZsYWdzKTsKKwlpZiAobGlrZWx5IChzdHJlYW0gIT0gTlVMTCkpIHsKKwkJbWVtc2V0IChzdHJlYW0sIDAsIHNpemVvZigqc3RyZWFtKSk7CisJCUlOSVRfTElTVF9IRUFEKCZzdHJlYW0tPnRkX2xpc3QpOworCQlJTklUX0xJU1RfSEVBRCgmc3RyZWFtLT5mcmVlX2xpc3QpOworCQlzdHJlYW0tPm5leHRfdWZyYW1lID0gLTE7CisJCXN0cmVhbS0+cmVmY291bnQgPSAxOworCX0KKwlyZXR1cm4gc3RyZWFtOworfQorCitzdGF0aWMgdm9pZAoraXNvX3N0cmVhbV9pbml0ICgKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLAorCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0JKnN0cmVhbSwKKwlzdHJ1Y3QgdXNiX2RldmljZQkqZGV2LAorCWludAkJCXBpcGUsCisJdW5zaWduZWQJCWludGVydmFsCispCit7CisJc3RhdGljIGNvbnN0IHU4IHNtYXNrX291dCBbXSA9IHsgMHgwMSwgMHgwMywgMHgwNywgMHgwZiwgMHgxZiwgMHgzZiB9OworCisJdTMyCQkJYnVmMTsKKwl1bnNpZ25lZAkJZXBudW0sIG1heHA7CisJaW50CQkJaXNfaW5wdXQ7CisJbG9uZwkJCWJhbmR3aWR0aDsKKworCS8qCisJICogdGhpcyBtaWdodCBiZSBhICJoaWdoIGJhbmR3aWR0aCIgaGlnaHNwZWVkIGVuZHBvaW50LAorCSAqIGFzIGVuY29kZWQgaW4gdGhlIGVwIGRlc2NyaXB0b3IncyB3TWF4UGFja2V0IGZpZWxkCisJICovCisJZXBudW0gPSB1c2JfcGlwZWVuZHBvaW50IChwaXBlKTsKKwlpc19pbnB1dCA9IHVzYl9waXBlaW4gKHBpcGUpID8gVVNCX0RJUl9JTiA6IDA7CisJbWF4cCA9IHVzYl9tYXhwYWNrZXQoZGV2LCBwaXBlLCAhaXNfaW5wdXQpOworCWlmIChpc19pbnB1dCkgeworCQlidWYxID0gKDEgPDwgMTEpOworCX0gZWxzZSB7CisJCWJ1ZjEgPSAwOworCX0KKworCS8qIGtub3dzIGFib3V0IElURCB2cyBTSVREICovCisJaWYgKGRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIHsKKwkJdW5zaWduZWQgbXVsdGkgPSBoYl9tdWx0KG1heHApOworCisJCXN0cmVhbS0+aGlnaHNwZWVkID0gMTsKKworCQltYXhwID0gbWF4X3BhY2tldChtYXhwKTsKKwkJYnVmMSB8PSBtYXhwOworCQltYXhwICo9IG11bHRpOworCisJCXN0cmVhbS0+YnVmMCA9IGNwdV90b19sZTMyICgoZXBudW0gPDwgOCkgfCBkZXYtPmRldm51bSk7CisJCXN0cmVhbS0+YnVmMSA9IGNwdV90b19sZTMyIChidWYxKTsKKwkJc3RyZWFtLT5idWYyID0gY3B1X3RvX2xlMzIgKG11bHRpKTsKKworCQkvKiB1c2JmcyB3YW50cyB0byByZXBvcnQgdGhlIGF2ZXJhZ2UgdXNlY3MgcGVyIGZyYW1lIHRpZWQgdXAKKwkJICogd2hlbiB0cmFuc2ZlcnMgb24gdGhpcyBlbmRwb2ludCBhcmUgc2NoZWR1bGVkIC4uLgorCQkgKi8KKwkJc3RyZWFtLT51c2VjcyA9IEhTX1VTRUNTX0lTTyAobWF4cCk7CisJCWJhbmR3aWR0aCA9IHN0cmVhbS0+dXNlY3MgKiA4OworCQliYW5kd2lkdGggLz0gMSA8PCAoaW50ZXJ2YWwgLSAxKTsKKworCX0gZWxzZSB7CisJCXUzMgkJYWRkcjsKKworCQlhZGRyID0gZGV2LT50dHBvcnQgPDwgMjQ7CisJCWlmICghZWhjaV9pc19UREkoZWhjaSkKKwkJCQl8fCAoZGV2LT50dC0+aHViICE9CisJCQkJCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLnJvb3RfaHViKSkKKwkJCWFkZHIgfD0gZGV2LT50dC0+aHViLT5kZXZudW0gPDwgMTY7CisJCWFkZHIgfD0gZXBudW0gPDwgODsKKwkJYWRkciB8PSBkZXYtPmRldm51bTsKKwkJc3RyZWFtLT51c2VjcyA9IEhTX1VTRUNTX0lTTyAobWF4cCk7CisJCWlmIChpc19pbnB1dCkgeworCQkJdTMyCXRtcDsKKworCQkJYWRkciB8PSAxIDw8IDMxOworCQkJc3RyZWFtLT5jX3VzZWNzID0gc3RyZWFtLT51c2VjczsKKwkJCXN0cmVhbS0+dXNlY3MgPSBIU19VU0VDU19JU08gKDEpOworCQkJc3RyZWFtLT5yYXdfbWFzayA9IDE7CisKKwkJCS8qIHBlc3NpbWlzdGljIGMtbWFzayAqLworCQkJdG1wID0gdXNiX2NhbGNfYnVzX3RpbWUgKFVTQl9TUEVFRF9GVUxMLCAxLCAwLCBtYXhwKQorCQkJCQkvICgxMjUgKiAxMDAwKTsKKwkJCXN0cmVhbS0+cmF3X21hc2sgfD0gMyA8PCAodG1wICsgOSk7CisJCX0gZWxzZQorCQkJc3RyZWFtLT5yYXdfbWFzayA9IHNtYXNrX291dCBbbWF4cCAvIDE4OF07CisJCWJhbmR3aWR0aCA9IHN0cmVhbS0+dXNlY3MgKyBzdHJlYW0tPmNfdXNlY3M7CisJCWJhbmR3aWR0aCAvPSAxIDw8IChpbnRlcnZhbCArIDIpOworCisJCS8qIHN0cmVhbS0+c3BsaXRzIGdldHMgY3JlYXRlZCBmcm9tIHJhd19tYXNrIGxhdGVyICovCisJCXN0cmVhbS0+YWRkcmVzcyA9IGNwdV90b19sZTMyIChhZGRyKTsKKwl9CisJc3RyZWFtLT5iYW5kd2lkdGggPSBiYW5kd2lkdGg7CisKKwlzdHJlYW0tPnVkZXYgPSBkZXY7CisKKwlzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MgPSBpc19pbnB1dCB8IGVwbnVtOworCXN0cmVhbS0+aW50ZXJ2YWwgPSBpbnRlcnZhbDsKKwlzdHJlYW0tPm1heHAgPSBtYXhwOworfQorCitzdGF0aWMgdm9pZAoraXNvX3N0cmVhbV9wdXQoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtICpzdHJlYW0pCit7CisJc3RyZWFtLT5yZWZjb3VudC0tOworCisJLyogZnJlZSB3aGVuZXZlciBqdXN0IGEgZGV2LT5lcCByZWZlcmVuY2UgcmVtYWlucy4KKwkgKiBub3QgbGlrZSBhIFFIIC0tIG5vIHBlcnNpc3RlbnQgc3RhdGUgKHRvZ2dsZSwgaGFsdCkKKwkgKi8KKwlpZiAoc3RyZWFtLT5yZWZjb3VudCA9PSAxKSB7CisJCWludAkJaXNfaW47CisKKwkJLy8gQlVHX09OICghbGlzdF9lbXB0eSgmc3RyZWFtLT50ZF9saXN0KSk7CisKKwkJd2hpbGUgKCFsaXN0X2VtcHR5ICgmc3RyZWFtLT5mcmVlX2xpc3QpKSB7CisJCQlzdHJ1Y3QgbGlzdF9oZWFkCSplbnRyeTsKKworCQkJZW50cnkgPSBzdHJlYW0tPmZyZWVfbGlzdC5uZXh0OworCQkJbGlzdF9kZWwgKGVudHJ5KTsKKworCQkJLyoga25vd3MgYWJvdXQgSVREIHZzIFNJVEQgKi8KKwkJCWlmIChzdHJlYW0tPmhpZ2hzcGVlZCkgeworCQkJCXN0cnVjdCBlaGNpX2l0ZAkJKml0ZDsKKworCQkJCWl0ZCA9IGxpc3RfZW50cnkgKGVudHJ5LCBzdHJ1Y3QgZWhjaV9pdGQsCisJCQkJCQlpdGRfbGlzdCk7CisJCQkJZG1hX3Bvb2xfZnJlZSAoZWhjaS0+aXRkX3Bvb2wsIGl0ZCwKKwkJCQkJCWl0ZC0+aXRkX2RtYSk7CisJCQl9IGVsc2UgeworCQkJCXN0cnVjdCBlaGNpX3NpdGQJKnNpdGQ7CisKKwkJCQlzaXRkID0gbGlzdF9lbnRyeSAoZW50cnksIHN0cnVjdCBlaGNpX3NpdGQsCisJCQkJCQlzaXRkX2xpc3QpOworCQkJCWRtYV9wb29sX2ZyZWUgKGVoY2ktPnNpdGRfcG9vbCwgc2l0ZCwKKwkJCQkJCXNpdGQtPnNpdGRfZG1hKTsKKwkJCX0KKwkJfQorCisJCWlzX2luID0gKHN0cmVhbS0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pID8gMHgxMCA6IDA7CisJCXN0cmVhbS0+YkVuZHBvaW50QWRkcmVzcyAmPSAweDBmOworCQlzdHJlYW0tPmVwLT5oY3ByaXYgPSBOVUxMOworCisJCWlmIChzdHJlYW0tPnJlc2NoZWR1bGVkKSB7CisJCQllaGNpX2luZm8gKGVoY2ksICJlcCVkJXMtaXNvIHJlc2NoZWR1bGVkICIKKwkJCQkiJWx1IHRpbWVzIGluICVsdSBzZWNvbmRzXG4iLAorCQkJCXN0cmVhbS0+YkVuZHBvaW50QWRkcmVzcywgaXNfaW4gPyAiaW4iIDogIm91dCIsCisJCQkJc3RyZWFtLT5yZXNjaGVkdWxlZCwKKwkJCQkoKGppZmZpZXMgLSBzdHJlYW0tPnN0YXJ0KS9IWikKKwkJCQkpOworCQl9CisKKwkJa2ZyZWUoc3RyZWFtKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGVoY2lfaXNvX3N0cmVhbSAqCitpc29fc3RyZWFtX2dldCAoc3RydWN0IGVoY2lfaXNvX3N0cmVhbSAqc3RyZWFtKQoreworCWlmIChsaWtlbHkgKHN0cmVhbSAhPSBOVUxMKSkKKwkJc3RyZWFtLT5yZWZjb3VudCsrOworCXJldHVybiBzdHJlYW07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtICoKK2lzb19zdHJlYW1fZmluZCAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJdW5zaWduZWQJCWVwbnVtOworCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0JKnN0cmVhbTsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJZXBudW0gPSB1c2JfcGlwZWVuZHBvaW50ICh1cmItPnBpcGUpOworCWlmICh1c2JfcGlwZWluKHVyYi0+cGlwZSkpCisJCWVwID0gdXJiLT5kZXYtPmVwX2luW2VwbnVtXTsKKwllbHNlCisJCWVwID0gdXJiLT5kZXYtPmVwX291dFtlcG51bV07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlzdHJlYW0gPSBlcC0+aGNwcml2OworCisJaWYgKHVubGlrZWx5IChzdHJlYW0gPT0gTlVMTCkpIHsKKwkJc3RyZWFtID0gaXNvX3N0cmVhbV9hbGxvYyhHRlBfQVRPTUlDKTsKKwkJaWYgKGxpa2VseSAoc3RyZWFtICE9IE5VTEwpKSB7CisJCQkvKiBkZXYtPmVwIG93bnMgdGhlIGluaXRpYWwgcmVmY291bnQgKi8KKwkJCWVwLT5oY3ByaXYgPSBzdHJlYW07CisJCQlzdHJlYW0tPmVwID0gZXA7CisJCQlpc29fc3RyZWFtX2luaXQoZWhjaSwgc3RyZWFtLCB1cmItPmRldiwgdXJiLT5waXBlLAorCQkJCQl1cmItPmludGVydmFsKTsKKwkJfQorCisJLyogaWYgZGV2LT5lcCBbZXBudW1dIGlzIGEgUUgsIGluZm8xLm1heHBhY2tldCBpcyBub256ZXJvICovCisJfSBlbHNlIGlmICh1bmxpa2VseSAoc3RyZWFtLT5od19pbmZvMSAhPSAwKSkgeworCQllaGNpX2RiZyAoZWhjaSwgImRldiAlcyBlcCVkJXMsIG5vdCBpc28/P1xuIiwKKwkJCXVyYi0+ZGV2LT5kZXZwYXRoLCBlcG51bSwKKwkJCXVzYl9waXBlaW4odXJiLT5waXBlKSA/ICJpbiIgOiAib3V0Iik7CisJCXN0cmVhbSA9IE5VTEw7CisJfQorCisJLyogY2FsbGVyIGd1YXJhbnRlZXMgYW4gZXZlbnR1YWwgbWF0Y2hpbmcgaXNvX3N0cmVhbV9wdXQgKi8KKwlzdHJlYW0gPSBpc29fc3RyZWFtX2dldCAoc3RyZWFtKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHN0cmVhbTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogZWhjaV9pc29fc2NoZWQgb3BzIGNhbiBiZSBJVEQtb25seSBvciBTSVRELW9ubHkgKi8KKworc3RhdGljIHN0cnVjdCBlaGNpX2lzb19zY2hlZCAqCitpc29fc2NoZWRfYWxsb2MgKHVuc2lnbmVkIHBhY2tldHMsIGludCBtZW1fZmxhZ3MpCit7CisJc3RydWN0IGVoY2lfaXNvX3NjaGVkCSppc29fc2NoZWQ7CisJaW50CQkJc2l6ZSA9IHNpemVvZiAqaXNvX3NjaGVkOworCisJc2l6ZSArPSBwYWNrZXRzICogc2l6ZW9mIChzdHJ1Y3QgZWhjaV9pc29fcGFja2V0KTsKKwlpc29fc2NoZWQgPSBrbWFsbG9jIChzaXplLCBtZW1fZmxhZ3MpOworCWlmIChsaWtlbHkgKGlzb19zY2hlZCAhPSBOVUxMKSkgeworCQltZW1zZXQoaXNvX3NjaGVkLCAwLCBzaXplKTsKKwkJSU5JVF9MSVNUX0hFQUQgKCZpc29fc2NoZWQtPnRkX2xpc3QpOworCX0KKwlyZXR1cm4gaXNvX3NjaGVkOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2l0ZF9zY2hlZF9pbml0ICgKKwlzdHJ1Y3QgZWhjaV9pc29fc2NoZWQJKmlzb19zY2hlZCwKKwlzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtCSpzdHJlYW0sCisJc3RydWN0IHVyYgkJKnVyYgorKQoreworCXVuc2lnbmVkCWk7CisJZG1hX2FkZHJfdAlkbWEgPSB1cmItPnRyYW5zZmVyX2RtYTsKKworCS8qIGhvdyBtYW55IHVmcmFtZXMgYXJlIG5lZWRlZCBmb3IgdGhlc2UgdHJhbnNmZXJzICovCisJaXNvX3NjaGVkLT5zcGFuID0gdXJiLT5udW1iZXJfb2ZfcGFja2V0cyAqIHN0cmVhbS0+aW50ZXJ2YWw7CisKKwkvKiBmaWd1cmUgb3V0IHBlci11ZnJhbWUgaXRkIGZpZWxkcyB0aGF0IHdlJ2xsIG5lZWQgbGF0ZXIKKwkgKiB3aGVuIHdlIGZpdCBuZXcgaXRkcyBpbnRvIHRoZSBzY2hlZHVsZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CisJCXN0cnVjdCBlaGNpX2lzb19wYWNrZXQJKnVmcmFtZSA9ICZpc29fc2NoZWQtPnBhY2tldCBbaV07CisJCXVuc2lnbmVkCQlsZW5ndGg7CisJCWRtYV9hZGRyX3QJCWJ1ZjsKKwkJdTMyCQkJdHJhbnM7CisKKwkJbGVuZ3RoID0gdXJiLT5pc29fZnJhbWVfZGVzYyBbaV0ubGVuZ3RoOworCQlidWYgPSBkbWEgKyB1cmItPmlzb19mcmFtZV9kZXNjIFtpXS5vZmZzZXQ7CisKKwkJdHJhbnMgPSBFSENJX0lTT0NfQUNUSVZFOworCQl0cmFucyB8PSBidWYgJiAweDBmZmY7CisJCWlmICh1bmxpa2VseSAoKChpICsgMSkgPT0gdXJiLT5udW1iZXJfb2ZfcGFja2V0cykpCisJCQkJJiYgISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX05PX0lOVEVSUlVQVCkpCisJCQl0cmFucyB8PSBFSENJX0lURF9JT0M7CisJCXRyYW5zIHw9IGxlbmd0aCA8PCAxNjsKKwkJdWZyYW1lLT50cmFuc2FjdGlvbiA9IGNwdV90b19sZTMyICh0cmFucyk7CisKKwkJLyogbWlnaHQgbmVlZCB0byBjcm9zcyBhIGJ1ZmZlciBwYWdlIHdpdGhpbiBhIHRkICovCisJCXVmcmFtZS0+YnVmcCA9IChidWYgJiB+KHU2NCkweDBmZmYpOworCQlidWYgKz0gbGVuZ3RoOworCQlpZiAodW5saWtlbHkgKCh1ZnJhbWUtPmJ1ZnAgIT0gKGJ1ZiAmIH4odTY0KTB4MGZmZikpKSkKKwkJCXVmcmFtZS0+Y3Jvc3MgPSAxOworCX0KK30KKworc3RhdGljIHZvaWQKK2lzb19zY2hlZF9mcmVlICgKKwlzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtCSpzdHJlYW0sCisJc3RydWN0IGVoY2lfaXNvX3NjaGVkCSppc29fc2NoZWQKKykKK3sKKwlpZiAoIWlzb19zY2hlZCkKKwkJcmV0dXJuOworCS8vIGNhbGxlciBtdXN0IGhvbGQgZWhjaS0+bG9jayEKKwlsaXN0X3NwbGljZSAoJmlzb19zY2hlZC0+dGRfbGlzdCwgJnN0cmVhbS0+ZnJlZV9saXN0KTsKKwlrZnJlZSAoaXNvX3NjaGVkKTsKK30KKworc3RhdGljIGludAoraXRkX3VyYl90cmFuc2FjdGlvbiAoCisJc3RydWN0IGVoY2lfaXNvX3N0cmVhbQkqc3RyZWFtLAorCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2ksCisJc3RydWN0IHVyYgkJKnVyYiwKKwlpbnQJCQltZW1fZmxhZ3MKKykKK3sKKwlzdHJ1Y3QgZWhjaV9pdGQJCSppdGQ7CisJZG1hX2FkZHJfdAkJaXRkX2RtYTsKKwlpbnQJCQlpOworCXVuc2lnbmVkCQludW1faXRkczsKKwlzdHJ1Y3QgZWhjaV9pc29fc2NoZWQJKnNjaGVkOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJc2NoZWQgPSBpc29fc2NoZWRfYWxsb2MgKHVyYi0+bnVtYmVyX29mX3BhY2tldHMsIG1lbV9mbGFncyk7CisJaWYgKHVubGlrZWx5IChzY2hlZCA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpdGRfc2NoZWRfaW5pdCAoc2NoZWQsIHN0cmVhbSwgdXJiKTsKKworCWlmICh1cmItPmludGVydmFsIDwgOCkKKwkJbnVtX2l0ZHMgPSAxICsgKHNjaGVkLT5zcGFuICsgNykgLyA4OworCWVsc2UKKwkJbnVtX2l0ZHMgPSB1cmItPm51bWJlcl9vZl9wYWNrZXRzOworCisJLyogYWxsb2NhdGUvaW5pdCBJVERzICovCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IG51bV9pdGRzOyBpKyspIHsKKworCQkvKiBmcmVlX2xpc3QubmV4dCBtaWdodCBiZSBjYWNoZS1ob3QgLi4uIGJ1dCBtYXliZQorCQkgKiB0aGUgSEMgY2FjaGVzIGl0IHRvby4gYXZvaWQgdGhhdCBpc3N1ZSBmb3Igbm93LgorCQkgKi8KKworCQkvKiBwcmVmZXIgcHJldmlvdXNseS1hbGxvY2F0ZWQgaXRkcyAqLworCQlpZiAobGlrZWx5ICghbGlzdF9lbXB0eSgmc3RyZWFtLT5mcmVlX2xpc3QpKSkgeworCQkJaXRkID0gbGlzdF9lbnRyeSAoc3RyZWFtLT5mcmVlX2xpc3QucHJldiwKKwkJCQkJIHN0cnVjdCBlaGNpX2l0ZCwgaXRkX2xpc3QpOworCQkJbGlzdF9kZWwgKCZpdGQtPml0ZF9saXN0KTsKKwkJCWl0ZF9kbWEgPSBpdGQtPml0ZF9kbWE7CisJCX0gZWxzZQorCQkJaXRkID0gTlVMTDsKKworCQlpZiAoIWl0ZCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwkJCWl0ZCA9IGRtYV9wb29sX2FsbG9jIChlaGNpLT5pdGRfcG9vbCwgbWVtX2ZsYWdzLAorCQkJCQkmaXRkX2RtYSk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwkJfQorCisJCWlmICh1bmxpa2VseSAoTlVMTCA9PSBpdGQpKSB7CisJCQlpc29fc2NoZWRfZnJlZSAoc3RyZWFtLCBzY2hlZCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtc2V0IChpdGQsIDAsIHNpemVvZiAqaXRkKTsKKwkJaXRkLT5pdGRfZG1hID0gaXRkX2RtYTsKKwkJbGlzdF9hZGQgKCZpdGQtPml0ZF9saXN0LCAmc2NoZWQtPnRkX2xpc3QpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCisJLyogdGVtcG9yYXJpbHkgc3RvcmUgc2NoZWR1bGUgaW5mbyBpbiBoY3ByaXYgKi8KKwl1cmItPmhjcHJpdiA9IHNjaGVkOworCXVyYi0+ZXJyb3JfY291bnQgPSAwOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIGludAoraXRkX3Nsb3Rfb2sgKAorCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2ksCisJdTMyCQkJbW9kLAorCXUzMgkJCXVmcmFtZSwKKwl1OAkJCXVzZWNzLAorCXUzMgkJCXBlcmlvZAorKQoreworCXVmcmFtZSAlPSBwZXJpb2Q7CisJZG8geworCQkvKiBjYW4ndCBjb21taXQgbW9yZSB0aGFuIDgwJSBwZXJpb2RpYyA9PSAxMDAgdXNlYyAqLworCQlpZiAocGVyaW9kaWNfdXNlY3MgKGVoY2ksIHVmcmFtZSA+PiAzLCB1ZnJhbWUgJiAweDcpCisJCQkJPiAoMTAwIC0gdXNlY3MpKQorCQkJcmV0dXJuIDA7CisKKwkJLyogd2Uga25vdyB1cmItPmludGVydmFsIGlzIDJeTiB1ZnJhbWVzICovCisJCXVmcmFtZSArPSBwZXJpb2Q7CisJfSB3aGlsZSAodWZyYW1lIDwgbW9kKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3NpdGRfc2xvdF9vayAoCisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSwKKwl1MzIJCQltb2QsCisJc3RydWN0IGVoY2lfaXNvX3N0cmVhbQkqc3RyZWFtLAorCXUzMgkJCXVmcmFtZSwKKwlzdHJ1Y3QgZWhjaV9pc29fc2NoZWQJKnNjaGVkLAorCXUzMgkJCXBlcmlvZF91ZnJhbWVzCispCit7CisJdTMyCQkJbWFzaywgdG1wOworCXUzMgkJCWZyYW1lLCB1ZjsKKworCW1hc2sgPSBzdHJlYW0tPnJhd19tYXNrIDw8ICh1ZnJhbWUgJiA3KTsKKworCS8qIGZvciBJTiwgZG9uJ3Qgd3JhcCBDU1BMSVQgaW50byB0aGUgbmV4dCBmcmFtZSAqLworCWlmIChtYXNrICYgfjB4ZmZmZikKKwkJcmV0dXJuIDA7CisKKwkvKiB0aGlzIG11bHRpLXBhc3MgbG9naWMgaXMgc2ltcGxlLCBidXQgcGVyZm9ybWFuY2UgbWF5CisJICogc3VmZmVyIHdoZW4gdGhlIHNjaGVkdWxlIGRhdGEgaXNuJ3QgY2FjaGVkLgorCSAqLworCisJLyogY2hlY2sgYmFuZHdpZHRoICovCisJdWZyYW1lICU9IHBlcmlvZF91ZnJhbWVzOworCWRvIHsKKwkJdTMyCQltYXhfdXNlZDsKKworCQlmcmFtZSA9IHVmcmFtZSA+PiAzOworCQl1ZiA9IHVmcmFtZSAmIDc7CisKKwkJLyogdHQgbXVzdCBiZSBpZGxlIGZvciBzdGFydChzKSwgYW55IGdhcCwgYW5kIGNzcGxpdC4KKwkJICogYXNzdW1lIHNjaGVkdWxpbmcgc2xvcCBsZWF2ZXMgMTArJSBmb3IgY29udHJvbC9idWxrLgorCQkgKi8KKwkJaWYgKCF0dF9ub19jb2xsaXNpb24gKGVoY2ksIHBlcmlvZF91ZnJhbWVzIDw8IDMsCisJCQkJc3RyZWFtLT51ZGV2LCBmcmFtZSwgbWFzaykpCisJCQlyZXR1cm4gMDsKKworCQkvKiBjaGVjayBzdGFydHMgKE9VVCB1c2VzIG1vcmUgdGhhbiBvbmUpICovCisJCW1heF91c2VkID0gMTAwIC0gc3RyZWFtLT51c2VjczsKKwkJZm9yICh0bXAgPSBzdHJlYW0tPnJhd19tYXNrICYgMHhmZjsgdG1wOyB0bXAgPj49IDEsIHVmKyspIHsKKwkJCWlmIChwZXJpb2RpY191c2VjcyAoZWhjaSwgZnJhbWUsIHVmKSA+IG1heF91c2VkKQorCQkJCXJldHVybiAwOworCQl9CisKKwkJLyogZm9yIElOLCBjaGVjayBDU1BMSVQgKi8KKwkJaWYgKHN0cmVhbS0+Y191c2VjcykgeworCQkJbWF4X3VzZWQgPSAxMDAgLSBzdHJlYW0tPmNfdXNlY3M7CisJCQlkbyB7CisJCQkJdG1wID0gMSA8PCB1ZjsKKwkJCQl0bXAgPDw9IDg7CisJCQkJaWYgKChzdHJlYW0tPnJhd19tYXNrICYgdG1wKSA9PSAwKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAocGVyaW9kaWNfdXNlY3MgKGVoY2ksIGZyYW1lLCB1ZikKKwkJCQkJCT4gbWF4X3VzZWQpCisJCQkJCXJldHVybiAwOworCQkJfSB3aGlsZSAoKyt1ZiA8IDgpOworCQl9CisKKwkJLyogd2Uga25vdyB1cmItPmludGVydmFsIGlzIDJeTiB1ZnJhbWVzICovCisJCXVmcmFtZSArPSBwZXJpb2RfdWZyYW1lczsKKwl9IHdoaWxlICh1ZnJhbWUgPCBtb2QpOworCisJc3RyZWFtLT5zcGxpdHMgPSBjcHVfdG9fbGUzMihzdHJlYW0tPnJhd19tYXNrIDw8ICh1ZnJhbWUgJiA3KSk7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBUaGlzIHNjaGVkdWxlciBwbGFucyBhbG1vc3QgYXMgZmFyIGludG8gdGhlIGZ1dHVyZSBhcyBpdCBoYXMgYWN0dWFsCisgKiBwZXJpb2RpYyBzY2hlZHVsZSBzbG90cy4gIChBZmZlY3RlZCBieSBUVU5FX0ZMUywgd2hpY2ggZGVmYXVsdHMgdG8KKyAqICJhcyBzbWFsbCBhcyBwb3NzaWJsZSIgdG8gYmUgY2FjaGUtZnJpZW5kbGllci4pICBUaGF0IGxpbWl0cyB0aGUgc2l6ZQorICogdHJhbnNmZXJzIHlvdSBjYW4gc3RyZWFtIHJlbGlhYmx5OyBhdm9pZCBtb3JlIHRoYW4gNjQgbXNlYyBwZXIgdXJiLgorICogQWxzbyBhdm9pZCBxdWV1ZSBkZXB0aHMgb2YgbGVzcyB0aGFuIGVoY2kncyB3b3JzdCBpcnEgbGF0ZW5jeSAoYWZmZWN0ZWQKKyAqIGJ5IHRoZSBwZXItdXJiIFVSQl9OT19JTlRFUlJVUFQgaGludCwgdGhlIGxvZzJfaXJxX3RocmVzaCBtb2R1bGUgcGFyYW1ldGVyLAorICogYW5kIG90aGVyIGZhY3RvcnMpOyBvciBtb3JlIHRoYW4gYWJvdXQgMjMwIG1zZWMgdG90YWwgKGZvciBwb3J0YWJpbGl0eSwKKyAqIGdpdmVuIEVIQ0lfVFVORV9GTFMgYW5kIHRoZSBzbG9wKS4gIE9yLCB3cml0ZSBhIHNtYXJ0ZXIgc2NoZWR1bGVyIQorICovCisKKyNkZWZpbmUgU0NIRURVTEVfU0xPUAkxMAkvKiBmcmFtZXMgKi8KKworc3RhdGljIGludAoraXNvX3N0cmVhbV9zY2hlZHVsZSAoCisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaSwKKwlzdHJ1Y3QgdXJiCQkqdXJiLAorCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0JKnN0cmVhbQorKQoreworCXUzMgkJCW5vdywgc3RhcnQsIG1heCwgcGVyaW9kOworCWludAkJCXN0YXR1czsKKwl1bnNpZ25lZAkJbW9kID0gZWhjaS0+cGVyaW9kaWNfc2l6ZSA8PCAzOworCXN0cnVjdCBlaGNpX2lzb19zY2hlZAkqc2NoZWQgPSB1cmItPmhjcHJpdjsKKworCWlmIChzY2hlZC0+c3BhbiA+IChtb2QgLSA4ICogU0NIRURVTEVfU0xPUCkpIHsKKwkJZWhjaV9kYmcgKGVoY2ksICJpc28gcmVxdWVzdCAlcCB0b28gbG9uZ1xuIiwgdXJiKTsKKwkJc3RhdHVzID0gLUVGQklHOworCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKChzdHJlYW0tPmRlcHRoICsgc2NoZWQtPnNwYW4pID4gbW9kKSB7CisJCWVoY2lfZGJnIChlaGNpLCAicmVxdWVzdCAlcCB3b3VsZCBvdmVyZmxvdyAoJWQrJWQ+JWQpXG4iLAorCQkJdXJiLCBzdHJlYW0tPmRlcHRoLCBzY2hlZC0+c3BhbiwgbW9kKTsKKwkJc3RhdHVzID0gLUVGQklHOworCQlnb3RvIGZhaWw7CisJfQorCisJbm93ID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5mcmFtZV9pbmRleCkgJSBtb2Q7CisKKwkvKiB3aGVuJ3MgdGhlIGxhc3QgdWZyYW1lIHRoaXMgdXJiIGNvdWxkIHN0YXJ0PyAqLworCW1heCA9IG5vdyArIG1vZDsKKworCS8qIHR5cGljYWwgY2FzZTogcmV1c2UgY3VycmVudCBzY2hlZHVsZS4gc3RyZWFtIGlzIHN0aWxsIGFjdGl2ZSwKKwkgKiBhbmQgbm8gZ2FwcyBmcm9tIGhvc3QgZmFsbGluZyBiZWhpbmQgKGlycSBkZWxheXMgZXRjKQorCSAqLworCWlmIChsaWtlbHkgKCFsaXN0X2VtcHR5ICgmc3RyZWFtLT50ZF9saXN0KSkpIHsKKwkJc3RhcnQgPSBzdHJlYW0tPm5leHRfdWZyYW1lOworCQlpZiAoc3RhcnQgPCBub3cpCisJCQlzdGFydCArPSBtb2Q7CisJCWlmIChsaWtlbHkgKChzdGFydCArIHNjaGVkLT5zcGFuKSA8IG1heCkpCisJCQlnb3RvIHJlYWR5OworCQkvKiBlbHNlIGZlbGwgYmVoaW5kOyBzb21lZGF5LCB0cnkgdG8gcmVzY2hlZHVsZSAqLworCQlzdGF0dXMgPSAtRUwyTlNZTkM7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBuZWVkIHRvIHNjaGVkdWxlOyB3aGVuJ3MgdGhlIG5leHQgKHUpZnJhbWUgd2UgY291bGQgc3RhcnQ/CisJICogdGhpcyBpcyBiaWdnZXIgdGhhbiBlaGNpLT5pX3RocmVzaCBhbGxvd3M7IHNjaGVkdWxpbmcgaXRzZWxmCisJICogaXNuJ3QgZnJlZSwgdGhlIHNsb3Agc2hvdWxkIGhhbmRsZSByZWFzb25hYmx5IHNsb3cgY3B1cy4gIGl0CisJICogY2FuIGFsc28gaGVscCBoaWdoIGJhbmR3aWR0aCBpZiB0aGUgZG1hIGFuZCBpcnEgbG9hZHMgZG9uJ3QKKwkgKiBqdW1wIHVudGlsIGFmdGVyIHRoZSBxdWV1ZSBpcyBwcmltZWQuCisJICovCisJc3RhcnQgPSBTQ0hFRFVMRV9TTE9QICogOCArIChub3cgJiB+MHgwNyk7CisJc3RhcnQgJT0gbW9kOworCXN0cmVhbS0+bmV4dF91ZnJhbWUgPSBzdGFydDsKKworCS8qIE5PVEU6ICBhc3N1bWVzIFVSQl9JU09fQVNBUCwgdG8gbGltaXQgY29tcGxleGl0eS9idWdzICovCisKKwlwZXJpb2QgPSB1cmItPmludGVydmFsOworCWlmICghc3RyZWFtLT5oaWdoc3BlZWQpCisJCXBlcmlvZCA8PD0gMzsKKworCS8qIGZpbmQgYSB1ZnJhbWUgc2xvdCB3aXRoIGVub3VnaCBiYW5kd2lkdGggKi8KKwlmb3IgKDsgc3RhcnQgPCAoc3RyZWFtLT5uZXh0X3VmcmFtZSArIHBlcmlvZCk7IHN0YXJ0KyspIHsKKwkJaW50CQllbm91Z2hfc3BhY2U7CisKKwkJLyogY2hlY2sgc2NoZWR1bGU6IGVub3VnaCBzcGFjZT8gKi8KKwkJaWYgKHN0cmVhbS0+aGlnaHNwZWVkKQorCQkJZW5vdWdoX3NwYWNlID0gaXRkX3Nsb3Rfb2sgKGVoY2ksIG1vZCwgc3RhcnQsCisJCQkJCXN0cmVhbS0+dXNlY3MsIHBlcmlvZCk7CisJCWVsc2UgeworCQkJaWYgKChzdGFydCAlIDgpID49IDYpCisJCQkJY29udGludWU7CisJCQllbm91Z2hfc3BhY2UgPSBzaXRkX3Nsb3Rfb2sgKGVoY2ksIG1vZCwgc3RyZWFtLAorCQkJCQlzdGFydCwgc2NoZWQsIHBlcmlvZCk7CisJCX0KKworCQkvKiBzY2hlZHVsZSBpdCBoZXJlIGlmIHRoZXJlJ3MgZW5vdWdoIGJhbmR3aWR0aCAqLworCQlpZiAoZW5vdWdoX3NwYWNlKSB7CisJCQlzdHJlYW0tPm5leHRfdWZyYW1lID0gc3RhcnQgJSBtb2Q7CisJCQlnb3RvIHJlYWR5OworCQl9CisJfQorCisJLyogbm8gcm9vbSBpbiB0aGUgc2NoZWR1bGUgKi8KKwllaGNpX2RiZyAoZWhjaSwgImlzbyAlc3NjaGVkIGZ1bGwgJXAgKG5vdyAlZCBtYXggJWQpXG4iLAorCQlsaXN0X2VtcHR5ICgmc3RyZWFtLT50ZF9saXN0KSA/ICIiIDogInJlIiwKKwkJdXJiLCBub3csIG1heCk7CisJc3RhdHVzID0gLUVOT1NQQzsKKworZmFpbDoKKwlpc29fc2NoZWRfZnJlZSAoc3RyZWFtLCBzY2hlZCk7CisJdXJiLT5oY3ByaXYgPSBOVUxMOworCXJldHVybiBzdGF0dXM7CisKK3JlYWR5OgorCS8qIHJlcG9ydCBoaWdoIHNwZWVkIHN0YXJ0IGluIHVmcmFtZXM7IGZ1bGwgc3BlZWQsIGluIGZyYW1lcyAqLworCXVyYi0+c3RhcnRfZnJhbWUgPSBzdHJlYW0tPm5leHRfdWZyYW1lOworCWlmICghc3RyZWFtLT5oaWdoc3BlZWQpCisJCXVyYi0+c3RhcnRfZnJhbWUgPj49IDM7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraXRkX2luaXQgKHN0cnVjdCBlaGNpX2lzb19zdHJlYW0gKnN0cmVhbSwgc3RydWN0IGVoY2lfaXRkICppdGQpCit7CisJaW50IGk7CisKKwlpdGQtPmh3X25leHQgPSBFSENJX0xJU1RfRU5EOworCWl0ZC0+aHdfYnVmcCBbMF0gPSBzdHJlYW0tPmJ1ZjA7CisJaXRkLT5od19idWZwIFsxXSA9IHN0cmVhbS0+YnVmMTsKKwlpdGQtPmh3X2J1ZnAgWzJdID0gc3RyZWFtLT5idWYyOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJaXRkLT5pbmRleFtpXSA9IC0xOworCisJLyogQWxsIG90aGVyIGZpZWxkcyBhcmUgZmlsbGVkIHdoZW4gc2NoZWR1bGluZyAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2l0ZF9wYXRjaCAoCisJc3RydWN0IGVoY2lfaXRkCQkqaXRkLAorCXN0cnVjdCBlaGNpX2lzb19zY2hlZAkqaXNvX3NjaGVkLAorCXVuc2lnbmVkCQlpbmRleCwKKwl1MTYJCQl1ZnJhbWUsCisJaW50CQkJZmlyc3QKKykKK3sKKwlzdHJ1Y3QgZWhjaV9pc29fcGFja2V0CSp1ZiA9ICZpc29fc2NoZWQtPnBhY2tldCBbaW5kZXhdOworCXVuc2lnbmVkCQlwZyA9IGl0ZC0+cGc7CisKKwkvLyBCVUdfT04gKHBnID09IDYgJiYgdWYtPmNyb3NzKTsKKworCXVmcmFtZSAmPSAweDA3OworCWl0ZC0+aW5kZXggW3VmcmFtZV0gPSBpbmRleDsKKworCWl0ZC0+aHdfdHJhbnNhY3Rpb24gW3VmcmFtZV0gPSB1Zi0+dHJhbnNhY3Rpb247CisJaXRkLT5od190cmFuc2FjdGlvbiBbdWZyYW1lXSB8PSBjcHVfdG9fbGUzMiAocGcgPDwgMTIpOworCWl0ZC0+aHdfYnVmcCBbcGddIHw9IGNwdV90b19sZTMyICh1Zi0+YnVmcCAmIH4odTMyKTApOworCWl0ZC0+aHdfYnVmcF9oaSBbcGddIHw9IGNwdV90b19sZTMyICgodTMyKSh1Zi0+YnVmcCA+PiAzMikpOworCisJLyogaXNvX2ZyYW1lX2Rlc2NbXS5vZmZzZXQgbXVzdCBiZSBzdHJpY3RseSBpbmNyZWFzaW5nICovCisJaWYgKHVubGlrZWx5ICghZmlyc3QgJiYgdWYtPmNyb3NzKSkgeworCQl1NjQJYnVmcCA9IHVmLT5idWZwICsgNDA5NjsKKwkJaXRkLT5wZyA9ICsrcGc7CisJCWl0ZC0+aHdfYnVmcCBbcGddIHw9IGNwdV90b19sZTMyIChidWZwICYgfih1MzIpMCk7CisJCWl0ZC0+aHdfYnVmcF9oaSBbcGddIHw9IGNwdV90b19sZTMyICgodTMyKShidWZwID4+IDMyKSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2l0ZF9saW5rIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHVuc2lnbmVkIGZyYW1lLCBzdHJ1Y3QgZWhjaV9pdGQgKml0ZCkKK3sKKwkvKiBhbHdheXMgcHJlcGVuZCBJVEQvU0lURCAuLi4gb25seSBRSCB0cmVlIGlzIG9yZGVyLXNlbnNpdGl2ZSAqLworCWl0ZC0+aXRkX25leHQgPSBlaGNpLT5wc2hhZG93IFtmcmFtZV07CisJaXRkLT5od19uZXh0ID0gZWhjaS0+cGVyaW9kaWMgW2ZyYW1lXTsKKwllaGNpLT5wc2hhZG93IFtmcmFtZV0uaXRkID0gaXRkOworCWl0ZC0+ZnJhbWUgPSBmcmFtZTsKKwl3bWIgKCk7CisJZWhjaS0+cGVyaW9kaWMgW2ZyYW1lXSA9IGNwdV90b19sZTMyIChpdGQtPml0ZF9kbWEpIHwgUV9UWVBFX0lURDsKK30KKworLyogZml0IHVyYidzIGl0ZHMgaW50byB0aGUgc2VsZWN0ZWQgc2NoZWR1bGUgc2xvdDsgYWN0aXZhdGUgYXMgbmVlZGVkICovCitzdGF0aWMgaW50CitpdGRfbGlua191cmIgKAorCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2ksCisJc3RydWN0IHVyYgkJKnVyYiwKKwl1bnNpZ25lZAkJbW9kLAorCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0JKnN0cmVhbQorKQoreworCWludAkJCXBhY2tldCwgZmlyc3QgPSAxOworCXVuc2lnbmVkCQluZXh0X3VmcmFtZSwgdWZyYW1lLCBmcmFtZTsKKwlzdHJ1Y3QgZWhjaV9pc29fc2NoZWQJKmlzb19zY2hlZCA9IHVyYi0+aGNwcml2OworCXN0cnVjdCBlaGNpX2l0ZAkJKml0ZDsKKworCW5leHRfdWZyYW1lID0gc3RyZWFtLT5uZXh0X3VmcmFtZSAlIG1vZDsKKworCWlmICh1bmxpa2VseSAobGlzdF9lbXB0eSgmc3RyZWFtLT50ZF9saXN0KSkpIHsKKwkJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuYmFuZHdpZHRoX2FsbG9jYXRlZAorCQkJCSs9IHN0cmVhbS0+YmFuZHdpZHRoOworCQllaGNpX3ZkYmcgKGVoY2ksCisJCQkic2NoZWR1bGUgZGV2cCAlcyBlcCVkJXMtaXNvIHBlcmlvZCAlZCBzdGFydCAlZC4lZFxuIiwKKwkJCXVyYi0+ZGV2LT5kZXZwYXRoLCBzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MgJiAweDBmLAorCQkJKHN0cmVhbS0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pID8gImluIiA6ICJvdXQiLAorCQkJdXJiLT5pbnRlcnZhbCwKKwkJCW5leHRfdWZyYW1lID4+IDMsIG5leHRfdWZyYW1lICYgMHg3KTsKKwkJc3RyZWFtLT5zdGFydCA9IGppZmZpZXM7CisJfQorCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMrKzsKKworCS8qIGZpbGwgaVREcyB1ZnJhbWUgYnkgdWZyYW1lICovCisJZm9yIChwYWNrZXQgPSAwLCBpdGQgPSBOVUxMOyBwYWNrZXQgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyApIHsKKwkJaWYgKGl0ZCA9PSBOVUxMKSB7CisJCQkvKiBBU1NFUlQ6ICB3ZSBoYXZlIGFsbCBuZWNlc3NhcnkgaXRkcyAqLworCQkJLy8gQlVHX09OIChsaXN0X2VtcHR5ICgmaXNvX3NjaGVkLT50ZF9saXN0KSk7CisKKwkJCS8qIEFTU0VSVDogIG5vIGl0ZHMgZm9yIHRoaXMgZW5kcG9pbnQgaW4gdGhpcyB1ZnJhbWUgKi8KKworCQkJaXRkID0gbGlzdF9lbnRyeSAoaXNvX3NjaGVkLT50ZF9saXN0Lm5leHQsCisJCQkJCXN0cnVjdCBlaGNpX2l0ZCwgaXRkX2xpc3QpOworCQkJbGlzdF9tb3ZlX3RhaWwgKCZpdGQtPml0ZF9saXN0LCAmc3RyZWFtLT50ZF9saXN0KTsKKwkJCWl0ZC0+c3RyZWFtID0gaXNvX3N0cmVhbV9nZXQgKHN0cmVhbSk7CisJCQlpdGQtPnVyYiA9IHVzYl9nZXRfdXJiICh1cmIpOworCQkJZmlyc3QgPSAxOworCQkJaXRkX2luaXQgKHN0cmVhbSwgaXRkKTsKKwkJfQorCisJCXVmcmFtZSA9IG5leHRfdWZyYW1lICYgMHgwNzsKKwkJZnJhbWUgPSBuZXh0X3VmcmFtZSA+PiAzOworCisJCWl0ZC0+dXNlY3MgW3VmcmFtZV0gPSBzdHJlYW0tPnVzZWNzOworCQlpdGRfcGF0Y2ggKGl0ZCwgaXNvX3NjaGVkLCBwYWNrZXQsIHVmcmFtZSwgZmlyc3QpOworCQlmaXJzdCA9IDA7CisKKwkJbmV4dF91ZnJhbWUgKz0gc3RyZWFtLT5pbnRlcnZhbDsKKwkJc3RyZWFtLT5kZXB0aCArPSBzdHJlYW0tPmludGVydmFsOworCQluZXh0X3VmcmFtZSAlPSBtb2Q7CisJCXBhY2tldCsrOworCisJCS8qIGxpbmsgY29tcGxldGVkIGl0ZHMgaW50byB0aGUgc2NoZWR1bGUgKi8KKwkJaWYgKCgobmV4dF91ZnJhbWUgPj4gMykgIT0gZnJhbWUpCisJCQkJfHwgcGFja2V0ID09IHVyYi0+bnVtYmVyX29mX3BhY2tldHMpIHsKKwkJCWl0ZF9saW5rIChlaGNpLCBmcmFtZSAlIGVoY2ktPnBlcmlvZGljX3NpemUsIGl0ZCk7CisJCQlpdGQgPSBOVUxMOworCQl9CisJfQorCXN0cmVhbS0+bmV4dF91ZnJhbWUgPSBuZXh0X3VmcmFtZTsKKworCS8qIGRvbid0IG5lZWQgdGhhdCBzY2hlZHVsZSBkYXRhIGFueSBtb3JlICovCisJaXNvX3NjaGVkX2ZyZWUgKHN0cmVhbSwgaXNvX3NjaGVkKTsKKwl1cmItPmhjcHJpdiA9IE5VTEw7CisKKwl0aW1lcl9hY3Rpb24gKGVoY2ksIFRJTUVSX0lPX1dBVENIRE9HKTsKKwlpZiAodW5saWtlbHkgKCFlaGNpLT5wZXJpb2RpY19zY2hlZCsrKSkKKwkJcmV0dXJuIGVuYWJsZV9wZXJpb2RpYyAoZWhjaSk7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUJSVNPX0VSUlMgKEVIQ0lfSVNPQ19CVUZfRVJSIHwgRUhDSV9JU09DX0JBQkJMRSB8IEVIQ0lfSVNPQ19YQUNURVJSKQorCitzdGF0aWMgdW5zaWduZWQKK2l0ZF9jb21wbGV0ZSAoCisJc3RydWN0IGVoY2lfaGNkCSplaGNpLAorCXN0cnVjdCBlaGNpX2l0ZAkqaXRkLAorCXN0cnVjdCBwdF9yZWdzCSpyZWdzCispIHsKKwlzdHJ1Y3QgdXJiCQkJCSp1cmIgPSBpdGQtPnVyYjsKKwlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvcgkqZGVzYzsKKwl1MzIJCQkJCXQ7CisJdW5zaWduZWQJCQkJdWZyYW1lOworCWludAkJCQkJdXJiX2luZGV4ID0gLTE7CisJc3RydWN0IGVoY2lfaXNvX3N0cmVhbQkJCSpzdHJlYW0gPSBpdGQtPnN0cmVhbTsKKwlzdHJ1Y3QgdXNiX2RldmljZQkJCSpkZXY7CisKKwkvKiBmb3IgZWFjaCB1ZnJhbWUgd2l0aCBhIHBhY2tldCAqLworCWZvciAodWZyYW1lID0gMDsgdWZyYW1lIDwgODsgdWZyYW1lKyspIHsKKwkJaWYgKGxpa2VseSAoaXRkLT5pbmRleFt1ZnJhbWVdID09IC0xKSkKKwkJCWNvbnRpbnVlOworCQl1cmJfaW5kZXggPSBpdGQtPmluZGV4W3VmcmFtZV07CisJCWRlc2MgPSAmdXJiLT5pc29fZnJhbWVfZGVzYyBbdXJiX2luZGV4XTsKKworCQl0ID0gbGUzMl90b19jcHVwICgmaXRkLT5od190cmFuc2FjdGlvbiBbdWZyYW1lXSk7CisJCWl0ZC0+aHdfdHJhbnNhY3Rpb24gW3VmcmFtZV0gPSAwOworCQlzdHJlYW0tPmRlcHRoIC09IHN0cmVhbS0+aW50ZXJ2YWw7CisKKwkJLyogcmVwb3J0IHRyYW5zZmVyIHN0YXR1cyAqLworCQlpZiAodW5saWtlbHkgKHQgJiBJU09fRVJSUykpIHsKKwkJCXVyYi0+ZXJyb3JfY291bnQrKzsKKwkJCWlmICh0ICYgRUhDSV9JU09DX0JVRl9FUlIpCisJCQkJZGVzYy0+c3RhdHVzID0gdXNiX3BpcGVpbiAodXJiLT5waXBlKQorCQkJCQk/IC1FTk9TUiAgLyogaGMgY291bGRuJ3QgcmVhZCAqLworCQkJCQk6IC1FQ09NTTsgLyogaGMgY291bGRuJ3Qgd3JpdGUgKi8KKwkJCWVsc2UgaWYgKHQgJiBFSENJX0lTT0NfQkFCQkxFKQorCQkJCWRlc2MtPnN0YXR1cyA9IC1FT1ZFUkZMT1c7CisJCQllbHNlIC8qICh0ICYgRUhDSV9JU09DX1hBQ1RFUlIpICovCisJCQkJZGVzYy0+c3RhdHVzID0gLUVQUk9UTzsKKworCQkJLyogSEMgbmVlZCBub3QgdXBkYXRlIGxlbmd0aCB3aXRoIHRoaXMgZXJyb3IgKi8KKwkJCWlmICghKHQgJiBFSENJX0lTT0NfQkFCQkxFKSkKKwkJCQlkZXNjLT5hY3R1YWxfbGVuZ3RoID0gRUhDSV9JVERfTEVOR1RIICh0KTsKKwkJfSBlbHNlIGlmIChsaWtlbHkgKCh0ICYgRUhDSV9JU09DX0FDVElWRSkgPT0gMCkpIHsKKwkJCWRlc2MtPnN0YXR1cyA9IDA7CisJCQlkZXNjLT5hY3R1YWxfbGVuZ3RoID0gRUhDSV9JVERfTEVOR1RIICh0KTsKKwkJfQorCX0KKworCXVzYl9wdXRfdXJiICh1cmIpOworCWl0ZC0+dXJiID0gTlVMTDsKKwlpdGQtPnN0cmVhbSA9IE5VTEw7CisJbGlzdF9tb3ZlICgmaXRkLT5pdGRfbGlzdCwgJnN0cmVhbS0+ZnJlZV9saXN0KTsKKwlpc29fc3RyZWFtX3B1dCAoZWhjaSwgc3RyZWFtKTsKKworCS8qIGhhbmRsZSBjb21wbGV0aW9uIG5vdz8gKi8KKwlpZiAobGlrZWx5ICgodXJiX2luZGV4ICsgMSkgIT0gdXJiLT5udW1iZXJfb2ZfcGFja2V0cykpCisJCXJldHVybiAwOworCisJLyogQVNTRVJUOiBpdCdzIHJlYWxseSB0aGUgbGFzdCBpdGQgZm9yIHRoaXMgdXJiCisJbGlzdF9mb3JfZWFjaF9lbnRyeSAoaXRkLCAmc3RyZWFtLT50ZF9saXN0LCBpdGRfbGlzdCkKKwkJQlVHX09OIChpdGQtPnVyYiA9PSB1cmIpOworCSAqLworCisJLyogZ2l2ZSB1cmIgYmFjayB0byB0aGUgZHJpdmVyIC4uLiBjYW4gYmUgb3V0LW9mLW9yZGVyICovCisJZGV2ID0gdXNiX2dldF9kZXYgKHVyYi0+ZGV2KTsKKwllaGNpX3VyYl9kb25lIChlaGNpLCB1cmIsIHJlZ3MpOworCXVyYiA9IE5VTEw7CisKKwkvKiBkZWZlciBzdG9wcGluZyBzY2hlZHVsZTsgY29tcGxldGlvbiBjYW4gc3VibWl0ICovCisJZWhjaS0+cGVyaW9kaWNfc2NoZWQtLTsKKwlpZiAodW5saWtlbHkgKCFlaGNpLT5wZXJpb2RpY19zY2hlZCkpCisJCSh2b2lkKSBkaXNhYmxlX3BlcmlvZGljIChlaGNpKTsKKwllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzLS07CisKKwlpZiAodW5saWtlbHkgKGxpc3RfZW1wdHkgKCZzdHJlYW0tPnRkX2xpc3QpKSkgeworCQllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5iYW5kd2lkdGhfYWxsb2NhdGVkCisJCQkJLT0gc3RyZWFtLT5iYW5kd2lkdGg7CisJCWVoY2lfdmRiZyAoZWhjaSwKKwkJCSJkZXNjaGVkdWxlIGRldnAgJXMgZXAlZCVzLWlzb1xuIiwKKwkJCWRldi0+ZGV2cGF0aCwgc3RyZWFtLT5iRW5kcG9pbnRBZGRyZXNzICYgMHgwZiwKKwkJCShzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSA/ICJpbiIgOiAib3V0Iik7CisJfQorCWlzb19zdHJlYW1fcHV0IChlaGNpLCBzdHJlYW0pOworCXVzYl9wdXRfZGV2IChkZXYpOworCisJcmV0dXJuIDE7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgaXRkX3N1Ym1pdCAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBtZW1fZmxhZ3MpCit7CisJaW50CQkJc3RhdHVzID0gLUVJTlZBTDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtCSpzdHJlYW07CisKKwkvKiBHZXQgaXNvX3N0cmVhbSBoZWFkICovCisJc3RyZWFtID0gaXNvX3N0cmVhbV9maW5kIChlaGNpLCB1cmIpOworCWlmICh1bmxpa2VseSAoc3RyZWFtID09IE5VTEwpKSB7CisJCWVoY2lfZGJnIChlaGNpLCAiY2FuJ3QgZ2V0IGlzbyBzdHJlYW1cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaWYgKHVubGlrZWx5ICh1cmItPmludGVydmFsICE9IHN0cmVhbS0+aW50ZXJ2YWwpKSB7CisJCWVoY2lfZGJnIChlaGNpLCAiY2FuJ3QgY2hhbmdlIGlzbyBpbnRlcnZhbCAlZCAtLT4gJWRcbiIsCisJCQlzdHJlYW0tPmludGVydmFsLCB1cmItPmludGVydmFsKTsKKwkJZ290byBkb25lOworCX0KKworI2lmZGVmIEVIQ0lfVVJCX1RSQUNFCisJZWhjaV9kYmcgKGVoY2ksCisJCSIlcyAlcyB1cmIgJXAgZXAlZCVzIGxlbiAlZCwgJWQgcGt0cyAlZCB1ZnJhbWVzIFslcF1cbiIsCisJCV9fRlVOQ1RJT05fXywgdXJiLT5kZXYtPmRldnBhdGgsIHVyYiwKKwkJdXNiX3BpcGVlbmRwb2ludCAodXJiLT5waXBlKSwKKwkJdXNiX3BpcGVpbiAodXJiLT5waXBlKSA/ICJpbiIgOiAib3V0IiwKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzLCB1cmItPmludGVydmFsLAorCQlzdHJlYW0pOworI2VuZGlmCisKKwkvKiBhbGxvY2F0ZSBJVERzIHcvbyBsb2NraW5nIGFueXRoaW5nICovCisJc3RhdHVzID0gaXRkX3VyYl90cmFuc2FjdGlvbiAoc3RyZWFtLCBlaGNpLCB1cmIsIG1lbV9mbGFncyk7CisJaWYgKHVubGlrZWx5IChzdGF0dXMgPCAwKSkgeworCQllaGNpX2RiZyAoZWhjaSwgImNhbid0IGluaXQgaXRkc1xuIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBzY2hlZHVsZSAuLi4gbmVlZCB0byBsb2NrICovCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJc3RhdHVzID0gaXNvX3N0cmVhbV9zY2hlZHVsZSAoZWhjaSwgdXJiLCBzdHJlYW0pOworIAlpZiAobGlrZWx5IChzdGF0dXMgPT0gMCkpCisJCWl0ZF9saW5rX3VyYiAoZWhjaSwgdXJiLCBlaGNpLT5wZXJpb2RpY19zaXplIDw8IDMsIHN0cmVhbSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKworZG9uZToKKwlpZiAodW5saWtlbHkgKHN0YXR1cyA8IDApKQorCQlpc29fc3RyZWFtX3B1dCAoZWhjaSwgc3RyZWFtKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisjaWZkZWYgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogIlNwbGl0IElTTyBURHMiIC4uLiB1c2VkIGZvciBVU0IgMS4xIGRldmljZXMgZ29pbmcgdGhyb3VnaCB0aGUKKyAqIFRUcyBpbiBVU0IgMi4wIGh1YnMuICBUaGVzZSBuZWVkIG1pY3JvZnJhbWUgc2NoZWR1bGluZy4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK3NpdGRfc2NoZWRfaW5pdCAoCisJc3RydWN0IGVoY2lfaXNvX3NjaGVkCSppc29fc2NoZWQsCisJc3RydWN0IGVoY2lfaXNvX3N0cmVhbQkqc3RyZWFtLAorCXN0cnVjdCB1cmIJCSp1cmIKKykKK3sKKwl1bnNpZ25lZAlpOworCWRtYV9hZGRyX3QJZG1hID0gdXJiLT50cmFuc2Zlcl9kbWE7CisKKwkvKiBob3cgbWFueSBmcmFtZXMgYXJlIG5lZWRlZCBmb3IgdGhlc2UgdHJhbnNmZXJzICovCisJaXNvX3NjaGVkLT5zcGFuID0gdXJiLT5udW1iZXJfb2ZfcGFja2V0cyAqIHN0cmVhbS0+aW50ZXJ2YWw7CisKKwkvKiBmaWd1cmUgb3V0IHBlci1mcmFtZSBzaXRkIGZpZWxkcyB0aGF0IHdlJ2xsIG5lZWQgbGF0ZXIKKwkgKiB3aGVuIHdlIGZpdCBuZXcgc2l0ZHMgaW50byB0aGUgc2NoZWR1bGUuCisJICovCisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQlzdHJ1Y3QgZWhjaV9pc29fcGFja2V0CSpwYWNrZXQgPSAmaXNvX3NjaGVkLT5wYWNrZXQgW2ldOworCQl1bnNpZ25lZAkJbGVuZ3RoOworCQlkbWFfYWRkcl90CQlidWY7CisJCXUzMgkJCXRyYW5zOworCisJCWxlbmd0aCA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2MgW2ldLmxlbmd0aCAmIDB4MDNmZjsKKwkJYnVmID0gZG1hICsgdXJiLT5pc29fZnJhbWVfZGVzYyBbaV0ub2Zmc2V0OworCisJCXRyYW5zID0gU0lURF9TVFNfQUNUSVZFOworCQlpZiAoKChpICsgMSkgPT0gdXJiLT5udW1iZXJfb2ZfcGFja2V0cykKKwkJCQkmJiAhKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfTk9fSU5URVJSVVBUKSkKKwkJCXRyYW5zIHw9IFNJVERfSU9DOworCQl0cmFucyB8PSBsZW5ndGggPDwgMTY7CisJCXBhY2tldC0+dHJhbnNhY3Rpb24gPSBjcHVfdG9fbGUzMiAodHJhbnMpOworCisJCS8qIG1pZ2h0IG5lZWQgdG8gY3Jvc3MgYSBidWZmZXIgcGFnZSB3aXRoaW4gYSB0ZCAqLworCQlwYWNrZXQtPmJ1ZnAgPSBidWY7CisJCXBhY2tldC0+YnVmMSA9IChidWYgKyBsZW5ndGgpICYgfjB4MGZmZjsKKwkJaWYgKHBhY2tldC0+YnVmMSAhPSAoYnVmICYgfih1NjQpMHgwZmZmKSkKKwkJCXBhY2tldC0+Y3Jvc3MgPSAxOworCisJCS8qIE9VVCB1c2VzIG11bHRpcGxlIHN0YXJ0LXNwbGl0cyAqLyAKKwkJaWYgKHN0cmVhbS0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pCisJCQljb250aW51ZTsKKwkJbGVuZ3RoID0gKGxlbmd0aCArIDE4NykgLyAxODg7CisJCWlmIChsZW5ndGggPiAxKSAvKiBCRUdJTiB2cyBBTEwgKi8KKwkJCWxlbmd0aCB8PSAxIDw8IDM7CisJCXBhY2tldC0+YnVmMSB8PSBsZW5ndGg7CisJfQorfQorCitzdGF0aWMgaW50CitzaXRkX3VyYl90cmFuc2FjdGlvbiAoCisJc3RydWN0IGVoY2lfaXNvX3N0cmVhbQkqc3RyZWFtLAorCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2ksCisJc3RydWN0IHVyYgkJKnVyYiwKKwlpbnQJCQltZW1fZmxhZ3MKKykKK3sKKwlzdHJ1Y3QgZWhjaV9zaXRkCSpzaXRkOworCWRtYV9hZGRyX3QJCXNpdGRfZG1hOworCWludAkJCWk7CisJc3RydWN0IGVoY2lfaXNvX3NjaGVkCSppc29fc2NoZWQ7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlpc29fc2NoZWQgPSBpc29fc2NoZWRfYWxsb2MgKHVyYi0+bnVtYmVyX29mX3BhY2tldHMsIG1lbV9mbGFncyk7CisJaWYgKGlzb19zY2hlZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNpdGRfc2NoZWRfaW5pdCAoaXNvX3NjaGVkLCBzdHJlYW0sIHVyYik7CisKKwkvKiBhbGxvY2F0ZS9pbml0IHNJVERzICovCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCisJCS8qIE5PVEU6ICBmb3Igbm93LCB3ZSBkb24ndCB0cnkgdG8gaGFuZGxlIHdyYXBhcm91bmQgY2FzZXMKKwkJICogZm9yIElOICh1c2luZyBzaXRkLT5od19iYWNrcG9pbnRlciwgbGlrZSBhIEZTVE4pLCB3aGljaAorCQkgKiBtZWFucyB3ZSBuZXZlciBuZWVkIHR3byBzaXRkcyBmb3IgZnVsbCBzcGVlZCBwYWNrZXRzLgorCQkgKi8KKworCQkvKiBmcmVlX2xpc3QubmV4dCBtaWdodCBiZSBjYWNoZS1ob3QgLi4uIGJ1dCBtYXliZQorCQkgKiB0aGUgSEMgY2FjaGVzIGl0IHRvby4gYXZvaWQgdGhhdCBpc3N1ZSBmb3Igbm93LgorCQkgKi8KKworCQkvKiBwcmVmZXIgcHJldmlvdXNseS1hbGxvY2F0ZWQgc2l0ZHMgKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZzdHJlYW0tPmZyZWVfbGlzdCkpIHsKKwkJCXNpdGQgPSBsaXN0X2VudHJ5IChzdHJlYW0tPmZyZWVfbGlzdC5wcmV2LAorCQkJCQkgc3RydWN0IGVoY2lfc2l0ZCwgc2l0ZF9saXN0KTsKKwkJCWxpc3RfZGVsICgmc2l0ZC0+c2l0ZF9saXN0KTsKKwkJCXNpdGRfZG1hID0gc2l0ZC0+c2l0ZF9kbWE7CisJCX0gZWxzZQorCQkJc2l0ZCA9IE5VTEw7CisKKwkJaWYgKCFzaXRkKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCQkJc2l0ZCA9IGRtYV9wb29sX2FsbG9jIChlaGNpLT5zaXRkX3Bvb2wsIG1lbV9mbGFncywKKwkJCQkJJnNpdGRfZG1hKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCQl9CisKKwkJaWYgKCFzaXRkKSB7CisJCQlpc29fc2NoZWRfZnJlZSAoc3RyZWFtLCBpc29fc2NoZWQpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbXNldCAoc2l0ZCwgMCwgc2l6ZW9mICpzaXRkKTsKKwkJc2l0ZC0+c2l0ZF9kbWEgPSBzaXRkX2RtYTsKKwkJbGlzdF9hZGQgKCZzaXRkLT5zaXRkX2xpc3QsICZpc29fc2NoZWQtPnRkX2xpc3QpOworCX0KKworCS8qIHRlbXBvcmFyaWx5IHN0b3JlIHNjaGVkdWxlIGluZm8gaW4gaGNwcml2ICovCisJdXJiLT5oY3ByaXYgPSBpc29fc2NoZWQ7CisJdXJiLT5lcnJvcl9jb3VudCA9IDA7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW5saW5lIHZvaWQKK3NpdGRfcGF0Y2ggKAorCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0JKnN0cmVhbSwKKwlzdHJ1Y3QgZWhjaV9zaXRkCSpzaXRkLAorCXN0cnVjdCBlaGNpX2lzb19zY2hlZAkqaXNvX3NjaGVkLAorCXVuc2lnbmVkCQlpbmRleAorKQoreworCXN0cnVjdCBlaGNpX2lzb19wYWNrZXQJKnVmID0gJmlzb19zY2hlZC0+cGFja2V0IFtpbmRleF07CisJdTY0CQkJYnVmcCA9IHVmLT5idWZwOworCisJc2l0ZC0+aHdfbmV4dCA9IEVIQ0lfTElTVF9FTkQ7CisJc2l0ZC0+aHdfZnVsbHNwZWVkX2VwID0gc3RyZWFtLT5hZGRyZXNzOworCXNpdGQtPmh3X3VmcmFtZSA9IHN0cmVhbS0+c3BsaXRzOworCXNpdGQtPmh3X3Jlc3VsdHMgPSB1Zi0+dHJhbnNhY3Rpb247CisJc2l0ZC0+aHdfYmFja3BvaW50ZXIgPSBFSENJX0xJU1RfRU5EOworCisJYnVmcCA9IHVmLT5idWZwOworCXNpdGQtPmh3X2J1ZiBbMF0gPSBjcHVfdG9fbGUzMiAoYnVmcCk7CisJc2l0ZC0+aHdfYnVmX2hpIFswXSA9IGNwdV90b19sZTMyIChidWZwID4+IDMyKTsKKworCXNpdGQtPmh3X2J1ZiBbMV0gPSBjcHVfdG9fbGUzMiAodWYtPmJ1ZjEpOworCWlmICh1Zi0+Y3Jvc3MpCisJCWJ1ZnAgKz0gNDA5NjsKKwlzaXRkLT5od19idWZfaGkgWzFdID0gY3B1X3RvX2xlMzIgKGJ1ZnAgPj4gMzIpOworCXNpdGQtPmluZGV4ID0gaW5kZXg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2l0ZF9saW5rIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHVuc2lnbmVkIGZyYW1lLCBzdHJ1Y3QgZWhjaV9zaXRkICpzaXRkKQoreworCS8qIG5vdGU6IHNpdGQgb3JkZXJpbmcgY291bGQgbWF0dGVyIChDU1BMSVQgdGhlbiBTU1BMSVQpICovCisJc2l0ZC0+c2l0ZF9uZXh0ID0gZWhjaS0+cHNoYWRvdyBbZnJhbWVdOworCXNpdGQtPmh3X25leHQgPSBlaGNpLT5wZXJpb2RpYyBbZnJhbWVdOworCWVoY2ktPnBzaGFkb3cgW2ZyYW1lXS5zaXRkID0gc2l0ZDsKKwlzaXRkLT5mcmFtZSA9IGZyYW1lOworCXdtYiAoKTsKKwllaGNpLT5wZXJpb2RpYyBbZnJhbWVdID0gY3B1X3RvX2xlMzIgKHNpdGQtPnNpdGRfZG1hKSB8IFFfVFlQRV9TSVREOworfQorCisvKiBmaXQgdXJiJ3Mgc2l0ZHMgaW50byB0aGUgc2VsZWN0ZWQgc2NoZWR1bGUgc2xvdDsgYWN0aXZhdGUgYXMgbmVlZGVkICovCitzdGF0aWMgaW50CitzaXRkX2xpbmtfdXJiICgKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLAorCXN0cnVjdCB1cmIJCSp1cmIsCisJdW5zaWduZWQJCW1vZCwKKwlzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtCSpzdHJlYW0KKykKK3sKKwlpbnQJCQlwYWNrZXQ7CisJdW5zaWduZWQJCW5leHRfdWZyYW1lOworCXN0cnVjdCBlaGNpX2lzb19zY2hlZAkqc2NoZWQgPSB1cmItPmhjcHJpdjsKKwlzdHJ1Y3QgZWhjaV9zaXRkCSpzaXRkOworCisJbmV4dF91ZnJhbWUgPSBzdHJlYW0tPm5leHRfdWZyYW1lOworCisJaWYgKGxpc3RfZW1wdHkoJnN0cmVhbS0+dGRfbGlzdCkpIHsKKwkJLyogdXNiZnMgaWdub3JlcyBUVCBiYW5kd2lkdGggKi8KKwkJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuYmFuZHdpZHRoX2FsbG9jYXRlZAorCQkJCSs9IHN0cmVhbS0+YmFuZHdpZHRoOworCQllaGNpX3ZkYmcgKGVoY2ksCisJCQkic2NoZWQgZGV2cCAlcyBlcCVkJXMtaXNvIFslZF0gJWRtcy8lMDR4XG4iLAorCQkJdXJiLT5kZXYtPmRldnBhdGgsIHN0cmVhbS0+YkVuZHBvaW50QWRkcmVzcyAmIDB4MGYsCisJCQkoc3RyZWFtLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgPyAiaW4iIDogIm91dCIsCisJCQkobmV4dF91ZnJhbWUgPj4gMykgJSBlaGNpLT5wZXJpb2RpY19zaXplLAorCQkJc3RyZWFtLT5pbnRlcnZhbCwgbGUzMl90b19jcHUgKHN0cmVhbS0+c3BsaXRzKSk7CisJCXN0cmVhbS0+c3RhcnQgPSBqaWZmaWVzOworCX0KKwllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzKys7CisKKwkvKiBmaWxsIHNJVERzIGZyYW1lIGJ5IGZyYW1lICovCisJZm9yIChwYWNrZXQgPSAwLCBzaXRkID0gTlVMTDsKKwkJCXBhY2tldCA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisJCQlwYWNrZXQrKykgeworCisJCS8qIEFTU0VSVDogIHdlIGhhdmUgYWxsIG5lY2Vzc2FyeSBzaXRkcyAqLworCQlCVUdfT04gKGxpc3RfZW1wdHkgKCZzY2hlZC0+dGRfbGlzdCkpOworCisJCS8qIEFTU0VSVDogIG5vIGl0ZHMgZm9yIHRoaXMgZW5kcG9pbnQgaW4gdGhpcyBmcmFtZSAqLworCisJCXNpdGQgPSBsaXN0X2VudHJ5IChzY2hlZC0+dGRfbGlzdC5uZXh0LAorCQkJCXN0cnVjdCBlaGNpX3NpdGQsIHNpdGRfbGlzdCk7CisJCWxpc3RfbW92ZV90YWlsICgmc2l0ZC0+c2l0ZF9saXN0LCAmc3RyZWFtLT50ZF9saXN0KTsKKwkJc2l0ZC0+c3RyZWFtID0gaXNvX3N0cmVhbV9nZXQgKHN0cmVhbSk7CisJCXNpdGQtPnVyYiA9IHVzYl9nZXRfdXJiICh1cmIpOworCisJCXNpdGRfcGF0Y2ggKHN0cmVhbSwgc2l0ZCwgc2NoZWQsIHBhY2tldCk7CisJCXNpdGRfbGluayAoZWhjaSwgKG5leHRfdWZyYW1lID4+IDMpICUgZWhjaS0+cGVyaW9kaWNfc2l6ZSwKKwkJCQlzaXRkKTsKKworCQluZXh0X3VmcmFtZSArPSBzdHJlYW0tPmludGVydmFsIDw8IDM7CisJCXN0cmVhbS0+ZGVwdGggKz0gc3RyZWFtLT5pbnRlcnZhbCA8PCAzOworCX0KKwlzdHJlYW0tPm5leHRfdWZyYW1lID0gbmV4dF91ZnJhbWUgJSBtb2Q7CisKKwkvKiBkb24ndCBuZWVkIHRoYXQgc2NoZWR1bGUgZGF0YSBhbnkgbW9yZSAqLworCWlzb19zY2hlZF9mcmVlIChzdHJlYW0sIHNjaGVkKTsKKwl1cmItPmhjcHJpdiA9IE5VTEw7CisKKwl0aW1lcl9hY3Rpb24gKGVoY2ksIFRJTUVSX0lPX1dBVENIRE9HKTsKKwlpZiAoIWVoY2ktPnBlcmlvZGljX3NjaGVkKyspCisJCXJldHVybiBlbmFibGVfcGVyaW9kaWMgKGVoY2kpOworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lCVNJVERfRVJSUyAoU0lURF9TVFNfRVJSIHwgU0lURF9TVFNfREJFIHwgU0lURF9TVFNfQkFCQkxFIFwKKwkgICAgICAgCQkJfCBTSVREX1NUU19YQUNUIHwgU0lURF9TVFNfTU1GKQorCitzdGF0aWMgdW5zaWduZWQKK3NpdGRfY29tcGxldGUgKAorCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2ksCisJc3RydWN0IGVoY2lfc2l0ZAkqc2l0ZCwKKwlzdHJ1Y3QgcHRfcmVncwkJKnJlZ3MKKykgeworCXN0cnVjdCB1cmIJCQkJKnVyYiA9IHNpdGQtPnVyYjsKKwlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvcgkqZGVzYzsKKwl1MzIJCQkJCXQ7CisJaW50CQkJCQl1cmJfaW5kZXggPSAtMTsKKwlzdHJ1Y3QgZWhjaV9pc29fc3RyZWFtCQkJKnN0cmVhbSA9IHNpdGQtPnN0cmVhbTsKKwlzdHJ1Y3QgdXNiX2RldmljZQkJCSpkZXY7CisKKwl1cmJfaW5kZXggPSBzaXRkLT5pbmRleDsKKwlkZXNjID0gJnVyYi0+aXNvX2ZyYW1lX2Rlc2MgW3VyYl9pbmRleF07CisJdCA9IGxlMzJfdG9fY3B1cCAoJnNpdGQtPmh3X3Jlc3VsdHMpOworCisJLyogcmVwb3J0IHRyYW5zZmVyIHN0YXR1cyAqLworCWlmICh0ICYgU0lURF9FUlJTKSB7CisJCXVyYi0+ZXJyb3JfY291bnQrKzsKKwkJaWYgKHQgJiBTSVREX1NUU19EQkUpCisJCQlkZXNjLT5zdGF0dXMgPSB1c2JfcGlwZWluICh1cmItPnBpcGUpCisJCQkJPyAtRU5PU1IgIC8qIGhjIGNvdWxkbid0IHJlYWQgKi8KKwkJCQk6IC1FQ09NTTsgLyogaGMgY291bGRuJ3Qgd3JpdGUgKi8KKwkJZWxzZSBpZiAodCAmIFNJVERfU1RTX0JBQkJMRSkKKwkJCWRlc2MtPnN0YXR1cyA9IC1FT1ZFUkZMT1c7CisJCWVsc2UgLyogWEFDVCwgTU1GLCBldGMgKi8KKwkJCWRlc2MtPnN0YXR1cyA9IC1FUFJPVE87CisJfSBlbHNlIHsKKwkJZGVzYy0+c3RhdHVzID0gMDsKKwkJZGVzYy0+YWN0dWFsX2xlbmd0aCA9IGRlc2MtPmxlbmd0aCAtIFNJVERfTEVOR1RIICh0KTsKKwl9CisKKwl1c2JfcHV0X3VyYiAodXJiKTsKKwlzaXRkLT51cmIgPSBOVUxMOworCXNpdGQtPnN0cmVhbSA9IE5VTEw7CisJbGlzdF9tb3ZlICgmc2l0ZC0+c2l0ZF9saXN0LCAmc3RyZWFtLT5mcmVlX2xpc3QpOworCXN0cmVhbS0+ZGVwdGggLT0gc3RyZWFtLT5pbnRlcnZhbCA8PCAzOworCWlzb19zdHJlYW1fcHV0IChlaGNpLCBzdHJlYW0pOworCisJLyogaGFuZGxlIGNvbXBsZXRpb24gbm93PyAqLworCWlmICgodXJiX2luZGV4ICsgMSkgIT0gdXJiLT5udW1iZXJfb2ZfcGFja2V0cykKKwkJcmV0dXJuIDA7CisKKwkvKiBBU1NFUlQ6IGl0J3MgcmVhbGx5IHRoZSBsYXN0IHNpdGQgZm9yIHRoaXMgdXJiCisJbGlzdF9mb3JfZWFjaF9lbnRyeSAoc2l0ZCwgJnN0cmVhbS0+dGRfbGlzdCwgc2l0ZF9saXN0KQorCQlCVUdfT04gKHNpdGQtPnVyYiA9PSB1cmIpOworCSAqLworCisJLyogZ2l2ZSB1cmIgYmFjayB0byB0aGUgZHJpdmVyICovCisJZGV2ID0gdXNiX2dldF9kZXYgKHVyYi0+ZGV2KTsKKwllaGNpX3VyYl9kb25lIChlaGNpLCB1cmIsIHJlZ3MpOworCXVyYiA9IE5VTEw7CisKKwkvKiBkZWZlciBzdG9wcGluZyBzY2hlZHVsZTsgY29tcGxldGlvbiBjYW4gc3VibWl0ICovCisJZWhjaS0+cGVyaW9kaWNfc2NoZWQtLTsKKwlpZiAoIWVoY2ktPnBlcmlvZGljX3NjaGVkKQorCQkodm9pZCkgZGlzYWJsZV9wZXJpb2RpYyAoZWhjaSk7CisJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcy0tOworCisJaWYgKGxpc3RfZW1wdHkgKCZzdHJlYW0tPnRkX2xpc3QpKSB7CisJCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9hbGxvY2F0ZWQKKwkJCQktPSBzdHJlYW0tPmJhbmR3aWR0aDsKKwkJZWhjaV92ZGJnIChlaGNpLAorCQkJImRlc2NoZWR1bGUgZGV2cCAlcyBlcCVkJXMtaXNvXG4iLAorCQkJZGV2LT5kZXZwYXRoLCBzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MgJiAweDBmLAorCQkJKHN0cmVhbS0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pID8gImluIiA6ICJvdXQiKTsKKwl9CisJaXNvX3N0cmVhbV9wdXQgKGVoY2ksIHN0cmVhbSk7CisJdXNiX3B1dF9kZXYgKGRldik7CisKKwlyZXR1cm4gMTsKK30KKworCitzdGF0aWMgaW50IHNpdGRfc3VibWl0IChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCB1cmIgKnVyYiwgaW50IG1lbV9mbGFncykKK3sKKwlpbnQJCQlzdGF0dXMgPSAtRUlOVkFMOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0JKnN0cmVhbTsKKworCS8qIEdldCBpc29fc3RyZWFtIGhlYWQgKi8KKwlzdHJlYW0gPSBpc29fc3RyZWFtX2ZpbmQgKGVoY2ksIHVyYik7CisJaWYgKHN0cmVhbSA9PSBOVUxMKSB7CisJCWVoY2lfZGJnIChlaGNpLCAiY2FuJ3QgZ2V0IGlzbyBzdHJlYW1cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaWYgKHVyYi0+aW50ZXJ2YWwgIT0gc3RyZWFtLT5pbnRlcnZhbCkgeworCQllaGNpX2RiZyAoZWhjaSwgImNhbid0IGNoYW5nZSBpc28gaW50ZXJ2YWwgJWQgLS0+ICVkXG4iLAorCQkJc3RyZWFtLT5pbnRlcnZhbCwgdXJiLT5pbnRlcnZhbCk7CisJCWdvdG8gZG9uZTsKKwl9CisKKyNpZmRlZiBFSENJX1VSQl9UUkFDRQorCWVoY2lfZGJnIChlaGNpLAorCQkic3VibWl0ICVwIGRldiVzIGVwJWQlcy1pc28gbGVuICVkXG4iLAorCQl1cmIsIHVyYi0+ZGV2LT5kZXZwYXRoLAorCQl1c2JfcGlwZWVuZHBvaW50ICh1cmItPnBpcGUpLAorCQl1c2JfcGlwZWluICh1cmItPnBpcGUpID8gImluIiA6ICJvdXQiLAorCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworI2VuZGlmCisKKwkvKiBhbGxvY2F0ZSBTSVREcyAqLworCXN0YXR1cyA9IHNpdGRfdXJiX3RyYW5zYWN0aW9uIChzdHJlYW0sIGVoY2ksIHVyYiwgbWVtX2ZsYWdzKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQllaGNpX2RiZyAoZWhjaSwgImNhbid0IGluaXQgc2l0ZHNcbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogc2NoZWR1bGUgLi4uIG5lZWQgdG8gbG9jayAqLworCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCXN0YXR1cyA9IGlzb19zdHJlYW1fc2NoZWR1bGUgKGVoY2ksIHVyYiwgc3RyZWFtKTsKKyAJaWYgKHN0YXR1cyA9PSAwKQorCQlzaXRkX2xpbmtfdXJiIChlaGNpLCB1cmIsIGVoY2ktPnBlcmlvZGljX3NpemUgPDwgMywgc3RyZWFtKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOworCitkb25lOgorCWlmIChzdGF0dXMgPCAwKQorCQlpc29fc3RyZWFtX3B1dCAoZWhjaSwgc3RyZWFtKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIGludAorc2l0ZF9zdWJtaXQgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IHVyYiAqdXJiLCBpbnQgbWVtX2ZsYWdzKQoreworCWVoY2lfZGJnIChlaGNpLCAic3BsaXQgaXNvIHN1cHBvcnQgaXMgZGlzYWJsZWRcbiIpOworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkCitzaXRkX2NvbXBsZXRlICgKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpLAorCXN0cnVjdCBlaGNpX3NpdGQJKnNpdGQsCisJc3RydWN0IHB0X3JlZ3MJCSpyZWdzCispIHsKKwllaGNpX2VyciAoZWhjaSwgInNpdGRfY29tcGxldGUgJXA/XG4iLCBzaXRkKTsKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIFVTQl9FSENJX1NQTElUX0lTTyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZAorc2Nhbl9wZXJpb2RpYyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZAlmcmFtZSwgY2xvY2ssIG5vd191ZnJhbWUsIG1vZDsKKwl1bnNpZ25lZAltb2RpZmllZDsKKworCW1vZCA9IGVoY2ktPnBlcmlvZGljX3NpemUgPDwgMzsKKworCS8qCisJICogV2hlbiBydW5uaW5nLCBzY2FuIGZyb20gbGFzdCBzY2FuIHBvaW50IHVwIHRvICJub3ciCisJICogZWxzZSBjbGVhbiB1cCBieSBzY2FubmluZyBldmVyeXRoaW5nIHRoYXQncyBsZWZ0LgorCSAqIFRvdWNoZXMgYXMgZmV3IHBhZ2VzIGFzIHBvc3NpYmxlOiAgY2FjaGUtZnJpZW5kbHkuCisJICovCisJbm93X3VmcmFtZSA9IGVoY2ktPm5leHRfdWZyYW1lOworCWlmIChIQ19JU19SVU5OSU5HIChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpKQorCQljbG9jayA9IHJlYWRsICgmZWhjaS0+cmVncy0+ZnJhbWVfaW5kZXgpOworCWVsc2UKKwkJY2xvY2sgPSBub3dfdWZyYW1lICsgbW9kIC0gMTsKKwljbG9jayAlPSBtb2Q7CisKKwlmb3IgKDs7KSB7CisJCXVuaW9uIGVoY2lfc2hhZG93CXEsICpxX3A7CisJCV9fbGUzMgkJCXR5cGUsICpod19wOworCQl1bnNpZ25lZAkJdWZyYW1lczsKKworCQkvKiBkb24ndCBzY2FuIHBhc3QgdGhlIGxpdmUgdWZyYW1lICovCisJCWZyYW1lID0gbm93X3VmcmFtZSA+PiAzOworCQlpZiAoZnJhbWUgPT0gKGNsb2NrID4+IDMpKQorCQkJdWZyYW1lcyA9IG5vd191ZnJhbWUgJiAweDA3OworCQllbHNlIHsKKwkJCS8qIHNhZmUgdG8gc2NhbiB0aGUgd2hvbGUgZnJhbWUgYXQgb25jZSAqLworCQkJbm93X3VmcmFtZSB8PSAweDA3OworCQkJdWZyYW1lcyA9IDg7CisJCX0KKworcmVzdGFydDoKKwkJLyogc2NhbiBlYWNoIGVsZW1lbnQgaW4gZnJhbWUncyBxdWV1ZSBmb3IgY29tcGxldGlvbnMgKi8KKwkJcV9wID0gJmVoY2ktPnBzaGFkb3cgW2ZyYW1lXTsKKwkJaHdfcCA9ICZlaGNpLT5wZXJpb2RpYyBbZnJhbWVdOworCQlxLnB0ciA9IHFfcC0+cHRyOworCQl0eXBlID0gUV9ORVhUX1RZUEUgKCpod19wKTsKKwkJbW9kaWZpZWQgPSAwOworCisJCXdoaWxlIChxLnB0ciAhPSBOVUxMKSB7CisJCQl1bnNpZ25lZAkJdWY7CisJCQl1bmlvbiBlaGNpX3NoYWRvdwl0ZW1wOworCQkJaW50CQkJbGl2ZTsKKworCQkJbGl2ZSA9IEhDX0lTX1JVTk5JTkcgKGVoY2lfdG9faGNkKGVoY2kpLT5zdGF0ZSk7CisJCQlzd2l0Y2ggKHR5cGUpIHsKKwkJCWNhc2UgUV9UWVBFX1FIOgorCQkJCS8qIGhhbmRsZSBhbnkgY29tcGxldGlvbnMgKi8KKwkJCQl0ZW1wLnFoID0gcWhfZ2V0IChxLnFoKTsKKwkJCQl0eXBlID0gUV9ORVhUX1RZUEUgKHEucWgtPmh3X25leHQpOworCQkJCXEgPSBxLnFoLT5xaF9uZXh0OworCQkJCW1vZGlmaWVkID0gcWhfY29tcGxldGlvbnMgKGVoY2ksIHRlbXAucWgsIHJlZ3MpOworCQkJCWlmICh1bmxpa2VseSAobGlzdF9lbXB0eSAoJnRlbXAucWgtPnF0ZF9saXN0KSkpCisJCQkJCWludHJfZGVzY2hlZHVsZSAoZWhjaSwgdGVtcC5xaCk7CisJCQkJcWhfcHV0ICh0ZW1wLnFoKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUV9UWVBFX0ZTVE46CisJCQkJLyogZm9yICJzYXZlIHBsYWNlIiBGU1ROcywgbG9vayBhdCBRSCBlbnRyaWVzCisJCQkJICogaW4gdGhlIHByZXZpb3VzIGZyYW1lIGZvciBjb21wbGV0aW9ucy4KKwkJCQkgKi8KKwkJCQlpZiAocS5mc3RuLT5od19wcmV2ICE9IEVIQ0lfTElTVF9FTkQpIHsKKwkJCQkJZGJnICgiaWdub3JpbmcgY29tcGxldGlvbnMgZnJvbSBGU1ROcyIpOworCQkJCX0KKwkJCQl0eXBlID0gUV9ORVhUX1RZUEUgKHEuZnN0bi0+aHdfbmV4dCk7CisJCQkJcSA9IHEuZnN0bi0+ZnN0bl9uZXh0OworCQkJCWJyZWFrOworCQkJY2FzZSBRX1RZUEVfSVREOgorCQkJCS8qIHNraXAgaXRkcyBmb3IgbGF0ZXIgaW4gdGhlIGZyYW1lICovCisJCQkJcm1iICgpOworCQkJCWZvciAodWYgPSBsaXZlID8gdWZyYW1lcyA6IDg7IHVmIDwgODsgdWYrKykgeworCQkJCQlpZiAoMCA9PSAocS5pdGQtPmh3X3RyYW5zYWN0aW9uIFt1Zl0KKwkJCQkJCQkmIElURF9BQ1RJVkUpKQorCQkJCQkJY29udGludWU7CisJCQkJCXFfcCA9ICZxLml0ZC0+aXRkX25leHQ7CisJCQkJCWh3X3AgPSAmcS5pdGQtPmh3X25leHQ7CisJCQkJCXR5cGUgPSBRX05FWFRfVFlQRSAocS5pdGQtPmh3X25leHQpOworCQkJCQlxID0gKnFfcDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmICh1ZiAhPSA4KQorCQkJCQlicmVhazsKKworCQkJCS8qIHRoaXMgb25lJ3MgcmVhZHkgLi4uIEhDIHdvbid0IGNhY2hlIHRoZQorCQkJCSAqIHBvaW50ZXIgZm9yIG11Y2ggbG9uZ2VyLCBpZiBhdCBhbGwuCisJCQkJICovCisJCQkJKnFfcCA9IHEuaXRkLT5pdGRfbmV4dDsKKwkJCQkqaHdfcCA9IHEuaXRkLT5od19uZXh0OworCQkJCXR5cGUgPSBRX05FWFRfVFlQRSAocS5pdGQtPmh3X25leHQpOworCQkJCXdtYigpOworCQkJCW1vZGlmaWVkID0gaXRkX2NvbXBsZXRlIChlaGNpLCBxLml0ZCwgcmVncyk7CisJCQkJcSA9ICpxX3A7CisJCQkJYnJlYWs7CisJCQljYXNlIFFfVFlQRV9TSVREOgorCQkJCWlmICgocS5zaXRkLT5od19yZXN1bHRzICYgU0lURF9BQ1RJVkUpCisJCQkJCQkmJiBsaXZlKSB7CisJCQkJCXFfcCA9ICZxLnNpdGQtPnNpdGRfbmV4dDsKKwkJCQkJaHdfcCA9ICZxLnNpdGQtPmh3X25leHQ7CisJCQkJCXR5cGUgPSBRX05FWFRfVFlQRSAocS5zaXRkLT5od19uZXh0KTsKKwkJCQkJcSA9ICpxX3A7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQkqcV9wID0gcS5zaXRkLT5zaXRkX25leHQ7CisJCQkJKmh3X3AgPSBxLnNpdGQtPmh3X25leHQ7CisJCQkJdHlwZSA9IFFfTkVYVF9UWVBFIChxLnNpdGQtPmh3X25leHQpOworCQkJCXdtYigpOworCQkJCW1vZGlmaWVkID0gc2l0ZF9jb21wbGV0ZSAoZWhjaSwgcS5zaXRkLCByZWdzKTsKKwkJCQlxID0gKnFfcDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZGJnICgiY29ycnVwdCB0eXBlICVkIGZyYW1lICVkIHNoYWRvdyAlcCIsCisJCQkJCXR5cGUsIGZyYW1lLCBxLnB0cik7CisJCQkJLy8gQlVHICgpOworCQkJCXEucHRyID0gTlVMTDsKKwkJCX0KKworCQkJLyogYXNzdW1lIGNvbXBsZXRpb24gY2FsbGJhY2tzIG1vZGlmeSB0aGUgcXVldWUgKi8KKwkJCWlmICh1bmxpa2VseSAobW9kaWZpZWQpKQorCQkJCWdvdG8gcmVzdGFydDsKKwkJfQorCisJCS8qIHN0b3Agd2hlbiB3ZSBjYXRjaCB1cCB0byB0aGUgSEMgKi8KKworCQkvLyBGSVhNRTogIHRoaXMgYXNzdW1lcyB3ZSB3b24ndCBnZXQgbGFwcGVkIHdoZW4KKwkJLy8gbGF0ZW5jaWVzIGNsaW1iOyB0aGF0IHNob3VsZCBiZSByYXJlLCBidXQuLi4KKwkJLy8gZGV0ZWN0IGl0LCBhbmQganVzdCBnbyBhbGwgdGhlIHdheSBhcm91bmQuCisJCS8vIEZMUiBtaWdodCBoZWxwIGRldGVjdCB0aGlzIGNhc2UsIHNvIGxvbmcgYXMgbGF0ZW5jaWVzCisJCS8vIGRvbid0IGV4Y2VlZCBwZXJpb2RpY19zaXplIG1zZWMgKGRlZmF1bHQgMS4wMjQgc2VjKS4KKworCQkvLyBGSVhNRTogIGxpa2V3aXNlIGFzc3VtZXMgSEMgZG9lc24ndCBoYWx0IG1pZC1zY2FuCisKKwkJaWYgKG5vd191ZnJhbWUgPT0gY2xvY2spIHsKKwkJCXVuc2lnbmVkCW5vdzsKKworCQkJaWYgKCFIQ19JU19SVU5OSU5HIChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpKQorCQkJCWJyZWFrOworCQkJZWhjaS0+bmV4dF91ZnJhbWUgPSBub3dfdWZyYW1lOworCQkJbm93ID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5mcmFtZV9pbmRleCkgJSBtb2Q7CisJCQlpZiAobm93X3VmcmFtZSA9PSBub3cpCisJCQkJYnJlYWs7CisKKwkJCS8qIHJlc2NhbiB0aGUgcmVzdCBvZiB0aGlzIGZyYW1lLCB0aGVuIC4uLiAqLworCQkJY2xvY2sgPSBub3c7CisJCX0gZWxzZSB7CisJCQlub3dfdWZyYW1lKys7CisJCQlub3dfdWZyYW1lICU9IG1vZDsKKwkJfQorCX0gCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3OTg4ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaApAQCAtMCwwICsxLDYzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAyIGJ5IERhdmlkIEJyb3duZWxsCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19MSU5VWF9FSENJX0hDRF9ICisjZGVmaW5lIF9fTElOVVhfRUhDSV9IQ0RfSAorCisvKiBkZWZpbml0aW9ucyB1c2VkIGZvciB0aGUgRUhDSSBkcml2ZXIgKi8KKworLyogc3RhdGlzdGljcyBjYW4gYmUga2VwdCBmb3IgZm9yIHR1bmluZy9tb25pdG9yaW5nICovCitzdHJ1Y3QgZWhjaV9zdGF0cyB7CisJLyogaXJxIHVzYWdlICovCisJdW5zaWduZWQgbG9uZwkJbm9ybWFsOworCXVuc2lnbmVkIGxvbmcJCWVycm9yOworCXVuc2lnbmVkIGxvbmcJCXJlY2xhaW07CisJdW5zaWduZWQgbG9uZwkJbG9zdF9pYWE7CisKKwkvKiB0ZXJtaW5hdGlvbiBvZiB1cmJzIGZyb20gY29yZSAqLworCXVuc2lnbmVkIGxvbmcJCWNvbXBsZXRlOworCXVuc2lnbmVkIGxvbmcJCXVubGluazsKK307CisKKy8qIGVoY2lfaGNkLT5sb2NrIGd1YXJkcyBzaGFyZWQgZGF0YSBhZ2FpbnN0IG90aGVyIENQVXM6CisgKiAgIGVoY2lfaGNkOglhc3luYywgcmVjbGFpbSwgcGVyaW9kaWMgKGFuZCBzaGFkb3cpLCAuLi4KKyAqICAgdXNiX2hvc3RfZW5kcG9pbnQ6IGhjcHJpdgorICogICBlaGNpX3FoOglxaF9uZXh0LCBxdGRfbGlzdAorICogICBlaGNpX3F0ZDoJcXRkX2xpc3QKKyAqCisgKiBBbHNvLCBob2xkIHRoaXMgbG9jayB3aGVuIHRhbGtpbmcgdG8gSEMgcmVnaXN0ZXJzIG9yCisgKiB3aGVuIHVwZGF0aW5nIGh3XyogZmllbGRzIGluIHNoYXJlZCBxaC9xdGQvLi4uIHN0cnVjdHVyZXMuCisgKi8KKworI2RlZmluZQlFSENJX01BWF9ST09UX1BPUlRTCTE1CQkvKiBzZWUgSENTX05fUE9SVFMgKi8KKworc3RydWN0IGVoY2lfaGNkIHsJCQkvKiBvbmUgcGVyIGNvbnRyb2xsZXIgKi8KKwlzcGlubG9ja190CQlsb2NrOworCisJLyogYXN5bmMgc2NoZWR1bGUgc3VwcG9ydCAqLworCXN0cnVjdCBlaGNpX3FoCQkqYXN5bmM7CisJc3RydWN0IGVoY2lfcWgJCSpyZWNsYWltOworCXVuc2lnbmVkCQlyZWNsYWltX3JlYWR5IDogMTsKKwl1bnNpZ25lZAkJc2Nhbm5pbmcgOiAxOworCisJLyogcGVyaW9kaWMgc2NoZWR1bGUgc3VwcG9ydCAqLworI2RlZmluZQlERUZBVUxUX0lfVERQUwkJMTAyNAkJLyogc29tZSBIQ3MgY2FuIGRvIGxlc3MgKi8KKwl1bnNpZ25lZAkJcGVyaW9kaWNfc2l6ZTsKKwlfX2xlMzIJCQkqcGVyaW9kaWM7CS8qIGh3IHBlcmlvZGljIHRhYmxlICovCisJZG1hX2FkZHJfdAkJcGVyaW9kaWNfZG1hOworCXVuc2lnbmVkCQlpX3RocmVzaDsJLyogdWZyYW1lcyBIQyBtaWdodCBjYWNoZSAqLworCisJdW5pb24gZWhjaV9zaGFkb3cJKnBzaGFkb3c7CS8qIG1pcnJvciBodyBwZXJpb2RpYyB0YWJsZSAqLworCWludAkJCW5leHRfdWZyYW1lOwkvKiBzY2FuIHBlcmlvZGljLCBzdGFydCBoZXJlICovCisJdW5zaWduZWQJCXBlcmlvZGljX3NjaGVkOwkvKiBwZXJpb2RpYyBhY3Rpdml0eSBjb3VudCAqLworCisJLyogcGVyIHJvb3QgaHViIHBvcnQgKi8KKwl1bnNpZ25lZCBsb25nCQlyZXNldF9kb25lIFtFSENJX01BWF9ST09UX1BPUlRTXTsKKworCS8qIHBlci1IQyBtZW1vcnkgcG9vbHMgKGNvdWxkIGJlIHBlci1idXMsIGJ1dCAuLi4pICovCisJc3RydWN0IGRtYV9wb29sCQkqcWhfcG9vbDsJLyogcWggcGVyIGFjdGl2ZSB1cmIgKi8KKwlzdHJ1Y3QgZG1hX3Bvb2wJCSpxdGRfcG9vbDsJLyogb25lIG9yIG1vcmUgcGVyIHFoICovCisJc3RydWN0IGRtYV9wb29sCQkqaXRkX3Bvb2w7CS8qIGl0ZCBwZXIgaXNvIHVyYiAqLworCXN0cnVjdCBkbWFfcG9vbAkJKnNpdGRfcG9vbDsJLyogc2l0ZCBwZXIgc3BsaXQgaXNvIHVyYiAqLworCisJc3RydWN0IHRpbWVyX2xpc3QJd2F0Y2hkb2c7CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrCXJlYm9vdF9ub3RpZmllcjsKKwl1bnNpZ25lZCBsb25nCQlhY3Rpb25zOworCXVuc2lnbmVkCQlzdGFtcDsKKwl1bnNpZ25lZCBsb25nCQluZXh0X3N0YXRlY2hhbmdlOworCXUzMgkJCWNvbW1hbmQ7CisKKwl1bnNpZ25lZAkJaXNfdGRpX3JoX3R0OjE7CS8qIFRESSByb290aHViIHdpdGggVFQgKi8KKworCS8qIGdsdWUgdG8gUENJIGFuZCBIQ0QgZnJhbWV3b3JrICovCisJc3RydWN0IGVoY2lfY2FwcyBfX2lvbWVtICpjYXBzOworCXN0cnVjdCBlaGNpX3JlZ3MgX19pb21lbSAqcmVnczsKKwlfX3UzMgkJCWhjc19wYXJhbXM7CS8qIGNhY2hlZCByZWdpc3RlciBjb3B5ICovCisKKwkvKiBpcnEgc3RhdGlzdGljcyAqLworI2lmZGVmIEVIQ0lfU1RBVFMKKwlzdHJ1Y3QgZWhjaV9zdGF0cwlzdGF0czsKKyMJZGVmaW5lIENPVU5UKHgpIGRvIHsgKHgpKys7IH0gd2hpbGUgKDApCisjZWxzZQorIwlkZWZpbmUgQ09VTlQoeCkgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKK307CisKKy8qIGNvbnZlcnQgYmV0d2VlbiBhbiBIQ0QgcG9pbnRlciBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgRUhDSV9IQ0QgKi8gCitzdGF0aWMgaW5saW5lIHN0cnVjdCBlaGNpX2hjZCAqaGNkX3RvX2VoY2kgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJcmV0dXJuIChzdHJ1Y3QgZWhjaV9oY2QgKikgKGhjZC0+aGNkX3ByaXYpOworfQorc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNiX2hjZCAqZWhjaV90b19oY2QgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mICgodm9pZCAqKSBlaGNpLCBzdHJ1Y3QgdXNiX2hjZCwgaGNkX3ByaXYpOworfQorCisKK2VudW0gZWhjaV90aW1lcl9hY3Rpb24geworCVRJTUVSX0lPX1dBVENIRE9HLAorCVRJTUVSX0lBQV9XQVRDSERPRywKKwlUSU1FUl9BU1lOQ19TSFJJTkssCisJVElNRVJfQVNZTkNfT0ZGLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkCit0aW1lcl9hY3Rpb25fZG9uZSAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBlbnVtIGVoY2lfdGltZXJfYWN0aW9uIGFjdGlvbikKK3sKKwljbGVhcl9iaXQgKGFjdGlvbiwgJmVoY2ktPmFjdGlvbnMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RpbWVyX2FjdGlvbiAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBlbnVtIGVoY2lfdGltZXJfYWN0aW9uIGFjdGlvbikKK3sKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQgKGFjdGlvbiwgJmVoY2ktPmFjdGlvbnMpKSB7CisJCXVuc2lnbmVkIGxvbmcgdDsKKworCQlzd2l0Y2ggKGFjdGlvbikgeworCQljYXNlIFRJTUVSX0lBQV9XQVRDSERPRzoKKwkJCXQgPSBFSENJX0lBQV9KSUZGSUVTOworCQkJYnJlYWs7CisJCWNhc2UgVElNRVJfSU9fV0FUQ0hET0c6CisJCQl0ID0gRUhDSV9JT19KSUZGSUVTOworCQkJYnJlYWs7CisJCWNhc2UgVElNRVJfQVNZTkNfT0ZGOgorCQkJdCA9IEVIQ0lfQVNZTkNfSklGRklFUzsKKwkJCWJyZWFrOworCQkvLyBjYXNlIFRJTUVSX0FTWU5DX1NIUklOSzoKKwkJZGVmYXVsdDoKKwkJCXQgPSBFSENJX1NIUklOS19KSUZGSUVTOworCQkJYnJlYWs7CisJCX0KKwkJdCArPSBqaWZmaWVzOworCQkvLyBhbGwgdGltaW5ncyBleGNlcHQgSUFBIHdhdGNoZG9nIGNhbiBiZSBvdmVycmlkZGVuLgorCQkvLyBhc3luYyBxdWV1ZSBTSFJJTksgb2Z0ZW4gcHJlY2VkZXMgSUFBLiAgd2hpbGUgaXQncyByZWFkeQorCQkvLyB0byBnbyBPRkYgbmVpdGhlciBjYW4gbWF0dGVyLCBhbmQgYWZ0ZXJ3YXJkcyB0aGUgSU8KKwkJLy8gd2F0Y2hkb2cgc3RvcHMgdW5sZXNzIHRoZXJlJ3Mgc3RpbGwgcGVyaW9kaWMgdHJhZmZpYy4KKwkJaWYgKGFjdGlvbiAhPSBUSU1FUl9JQUFfV0FUQ0hET0cKKwkJCQkmJiB0ID4gZWhjaS0+d2F0Y2hkb2cuZXhwaXJlcworCQkJCSYmIHRpbWVyX3BlbmRpbmcgKCZlaGNpLT53YXRjaGRvZykpCisJCQlyZXR1cm47CisJCW1vZF90aW1lciAoJmVoY2ktPndhdGNoZG9nLCB0KTsKKwl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEVIQ0kgcmVnaXN0ZXIgaW50ZXJmYWNlLCBjb3JyZXNwb25kcyB0byBFSENJIFJldmlzaW9uIDAuOTUgc3BlY2lmaWNhdGlvbiAqLworCisvKiBTZWN0aW9uIDIuMiBIb3N0IENvbnRyb2xsZXIgQ2FwYWJpbGl0eSBSZWdpc3RlcnMgKi8KK3N0cnVjdCBlaGNpX2NhcHMgeworCS8qIHRoZXNlIGZpZWxkcyBhcmUgc3BlY2lmaWVkIGFzIDggYW5kIDE2IGJpdCByZWdpc3RlcnMsCisJICogYnV0IHNvbWUgaG9zdHMgY2FuJ3QgcGVyZm9ybSA4IG9yIDE2IGJpdCBQQ0kgYWNjZXNzZXMuCisJICovCisJdTMyCWhjX2NhcGJhc2U7CisjZGVmaW5lIEhDX0xFTkdUSChwKQkJKCgocCk+PjAwKSYweDAwZmYpCS8qIGJpdHMgNzowICovCisjZGVmaW5lIEhDX1ZFUlNJT04ocCkJCSgoKHApPj4xNikmMHhmZmZmKQkvKiBiaXRzIDMxOjE2ICovCisJdTMyCQloY3NfcGFyYW1zOyAgICAgLyogSENTUEFSQU1TIC0gb2Zmc2V0IDB4NCAqLworI2RlZmluZSBIQ1NfREVCVUdfUE9SVChwKQkoKChwKT4+MjApJjB4ZikJLyogYml0cyAyMzoyMCwgZGVidWcgcG9ydD8gKi8KKyNkZWZpbmUgSENTX0lORElDQVRPUihwKQkoKHApJigxIDw8IDE2KSkJLyogdHJ1ZTogaGFzIHBvcnQgaW5kaWNhdG9ycyAqLworI2RlZmluZSBIQ1NfTl9DQyhwKQkJKCgocCk+PjEyKSYweGYpCS8qIGJpdHMgMTU6MTIsICNjb21wYW5pb24gSENzICovCisjZGVmaW5lIEhDU19OX1BDQyhwKQkJKCgocCk+PjgpJjB4ZikJLyogYml0cyAxMTo4LCBwb3J0cyBwZXIgQ0MgKi8KKyNkZWZpbmUgSENTX1BPUlRST1VURUQocCkJKChwKSYoMSA8PCA3KSkJLyogdHJ1ZTogcG9ydCByb3V0aW5nICovIAorI2RlZmluZSBIQ1NfUFBDKHApCQkoKHApJigxIDw8IDQpKQkvKiB0cnVlOiBwb3J0IHBvd2VyIGNvbnRyb2wgKi8gCisjZGVmaW5lIEhDU19OX1BPUlRTKHApCQkoKChwKT4+MCkmMHhmKQkvKiBiaXRzIDM6MCwgcG9ydHMgb24gSEMgKi8KKworCXUzMgkJaGNjX3BhcmFtczsgICAgICAvKiBIQ0NQQVJBTVMgLSBvZmZzZXQgMHg4ICovCisjZGVmaW5lIEhDQ19FWFRfQ0FQUyhwKQkJKCgocCk+PjgpJjB4ZmYpCS8qIGZvciBwY2kgZXh0ZW5kZWQgY2FwcyAqLworI2RlZmluZSBIQ0NfSVNPQ19DQUNIRShwKSAgICAgICAoKHApJigxIDw8IDcpKSAgLyogdHJ1ZTogY2FuIGNhY2hlIGlzb2MgZnJhbWUgKi8KKyNkZWZpbmUgSENDX0lTT0NfVEhSRVMocCkgICAgICAgKCgocCk+PjQpJjB4NykgIC8qIGJpdHMgNjo0LCB1ZnJhbWVzIGNhY2hlZCAqLworI2RlZmluZSBIQ0NfQ0FOUEFSSyhwKQkJKChwKSYoMSA8PCAyKSkgIC8qIHRydWU6IGNhbiBwYXJrIG9uIGFzeW5jIHFoICovCisjZGVmaW5lIEhDQ19QR01fRlJBTUVMSVNUTEVOKHApICgocCkmKDEgPDwgMSkpICAvKiB0cnVlOiBwZXJpb2RpY19zaXplIGNoYW5nZXMqLworI2RlZmluZSBIQ0NfNjRCSVRfQUREUihwKSAgICAgICAoKHApJigxKSkgICAgICAgLyogdHJ1ZTogY2FuIHVzZSA2NC1iaXQgYWRkciAqLworCXU4CQlwb3J0cm91dGUgWzhdOwkgLyogbmliYmxlcyBmb3Igcm91dGluZyAtIG9mZnNldCAweEMgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKy8qIFNlY3Rpb24gMi4zIEhvc3QgQ29udHJvbGxlciBPcGVyYXRpb25hbCBSZWdpc3RlcnMgKi8KK3N0cnVjdCBlaGNpX3JlZ3MgeworCisJLyogVVNCQ01EOiBvZmZzZXQgMHgwMCAqLworCXUzMgkJY29tbWFuZDsKKy8qIDIzOjE2IGlzIHIvdyBpbnRyIHJhdGUsIGluIG1pY3JvZnJhbWVzOyBkZWZhdWx0ICI4IiA9PSAxL21zZWMgKi8KKyNkZWZpbmUgQ01EX1BBUksJKDE8PDExKQkJLyogZW5hYmxlICJwYXJrIiBvbiBhc3luYyBxaCAqLworI2RlZmluZSBDTURfUEFSS19DTlQoYykJKCgoYyk+PjgpJjMpCS8qIGhvdyBtYW55IHRyYW5zZmVycyB0byBwYXJrIGZvciAqLworI2RlZmluZSBDTURfTFJFU0VUCSgxPDw3KQkJLyogcGFydGlhbCByZXNldCAobm8gcG9ydHMsIGV0YykgKi8KKyNkZWZpbmUgQ01EX0lBQUQJKDE8PDYpCQkvKiAiZG9vcmJlbGwiIGludGVycnVwdCBhc3luYyBhZHZhbmNlICovCisjZGVmaW5lIENNRF9BU0UJCSgxPDw1KQkJLyogYXN5bmMgc2NoZWR1bGUgZW5hYmxlICovCisjZGVmaW5lIENNRF9QU0UgIAkoMTw8NCkJCS8qIHBlcmlvZGljIHNjaGVkdWxlIGVuYWJsZSAqLworLyogMzoyIGlzIHBlcmlvZGljIGZyYW1lIGxpc3Qgc2l6ZSAqLworI2RlZmluZSBDTURfUkVTRVQJKDE8PDEpCQkvKiByZXNldCBIQyBub3QgYnVzICovCisjZGVmaW5lIENNRF9SVU4JCSgxPDwwKQkJLyogc3RhcnQvc3RvcCBIQyAqLworCisJLyogVVNCU1RTOiBvZmZzZXQgMHgwNCAqLworCXUzMgkJc3RhdHVzOworI2RlZmluZSBTVFNfQVNTCQkoMTw8MTUpCQkvKiBBc3luYyBTY2hlZHVsZSBTdGF0dXMgKi8KKyNkZWZpbmUgU1RTX1BTUwkJKDE8PDE0KQkJLyogUGVyaW9kaWMgU2NoZWR1bGUgU3RhdHVzICovCisjZGVmaW5lIFNUU19SRUNMCSgxPDwxMykJCS8qIFJlY2xhbWF0aW9uICovCisjZGVmaW5lIFNUU19IQUxUCSgxPDwxMikJCS8qIE5vdCBydW5uaW5nIChhbnkgcmVhc29uKSAqLworLyogc29tZSBiaXRzIHJlc2VydmVkICovCisJLyogdGhlc2UgU1RTXyogZmxhZ3MgYXJlIGFsc28gaW50cl9lbmFibGUgYml0cyAoVVNCSU5UUikgKi8KKyNkZWZpbmUgU1RTX0lBQQkJKDE8PDUpCQkvKiBJbnRlcnJ1cHRlZCBvbiBhc3luYyBhZHZhbmNlICovCisjZGVmaW5lIFNUU19GQVRBTAkoMTw8NCkJCS8qIHN1Y2ggYXMgc29tZSBQQ0kgYWNjZXNzIGVycm9ycyAqLworI2RlZmluZSBTVFNfRkxSCQkoMTw8MykJCS8qIGZyYW1lIGxpc3Qgcm9sbGVkIG92ZXIgKi8KKyNkZWZpbmUgU1RTX1BDRAkJKDE8PDIpCQkvKiBwb3J0IGNoYW5nZSBkZXRlY3QgKi8KKyNkZWZpbmUgU1RTX0VSUgkJKDE8PDEpCQkvKiAiZXJyb3IiIGNvbXBsZXRpb24gKG92ZXJmbG93LCAuLi4pICovCisjZGVmaW5lIFNUU19JTlQJCSgxPDwwKQkJLyogIm5vcm1hbCIgY29tcGxldGlvbiAoc2hvcnQsIC4uLikgKi8KKworCS8qIFVTQklOVFI6IG9mZnNldCAweDA4ICovCisJdTMyCQlpbnRyX2VuYWJsZTsKKworCS8qIEZSSU5ERVg6IG9mZnNldCAweDBDICovCisJdTMyCQlmcmFtZV9pbmRleDsJLyogY3VycmVudCBtaWNyb2ZyYW1lIG51bWJlciAqLworCS8qIENUUkxEU1NFR01FTlQ6IG9mZnNldCAweDEwICovCisJdTMyCQlzZWdtZW50OyAJLyogYWRkcmVzcyBiaXRzIDYzOjMyIGlmIG5lZWRlZCAqLworCS8qIFBFUklPRElDTElTVEJBU0U6IG9mZnNldCAweDE0ICovCisJdTMyCQlmcmFtZV9saXN0OyAJLyogcG9pbnRzIHRvIHBlcmlvZGljIGxpc3QgKi8KKwkvKiBBU1lOQ0xJU1RBRERSOiBvZmZzZXQgMHgxOCAqLworCXUzMgkJYXN5bmNfbmV4dDsJLyogYWRkcmVzcyBvZiBuZXh0IGFzeW5jIHF1ZXVlIGhlYWQgKi8KKworCXUzMgkJcmVzZXJ2ZWQgWzldOworCisJLyogQ09ORklHRkxBRzogb2Zmc2V0IDB4NDAgKi8KKwl1MzIJCWNvbmZpZ3VyZWRfZmxhZzsKKyNkZWZpbmUgRkxBR19DRgkJKDE8PDApCQkvKiB0cnVlOiB3ZSdsbCBzdXBwb3J0ICJoaWdoIHNwZWVkIiAqLworCisJLyogUE9SVFNDOiBvZmZzZXQgMHg0NCAqLworCXUzMgkJcG9ydF9zdGF0dXMgWzBdOwkvKiB1cCB0byBOX1BPUlRTICovCisvKiAzMToyMyByZXNlcnZlZCAqLworI2RlZmluZSBQT1JUX1dLT0NfRQkoMTw8MjIpCQkvKiB3YWtlIG9uIG92ZXJjdXJyZW50IChlbmFibGUpICovCisjZGVmaW5lIFBPUlRfV0tESVNDX0UJKDE8PDIxKQkJLyogd2FrZSBvbiBkaXNjb25uZWN0IChlbmFibGUpICovCisjZGVmaW5lIFBPUlRfV0tDT05OX0UJKDE8PDIwKQkJLyogd2FrZSBvbiBjb25uZWN0IChlbmFibGUpICovCisvKiAxOToxNiBmb3IgcG9ydCB0ZXN0aW5nICovCisjZGVmaW5lIFBPUlRfTEVEX09GRgkoMDw8MTQpCisjZGVmaW5lIFBPUlRfTEVEX0FNQkVSCSgxPDwxNCkKKyNkZWZpbmUgUE9SVF9MRURfR1JFRU4JKDI8PDE0KQorI2RlZmluZSBQT1JUX0xFRF9NQVNLCSgzPDwxNCkKKyNkZWZpbmUgUE9SVF9PV05FUgkoMTw8MTMpCQkvKiB0cnVlOiBjb21wYW5pb24gaGMgb3ducyB0aGlzIHBvcnQgKi8KKyNkZWZpbmUgUE9SVF9QT1dFUgkoMTw8MTIpCQkvKiB0cnVlOiBoYXMgcG93ZXIgKHNlZSBQUEMpICovCisjZGVmaW5lIFBPUlRfVVNCMTEoeCkgKCgoeCkmKDM8PDEwKSk9PSgxPDwxMCkpCS8qIFVTQiAxLjEgZGV2aWNlICovCisvKiAxMToxMCBmb3IgZGV0ZWN0aW5nIGxvd3NwZWVkIGRldmljZXMgKHJlc2V0IHZzIHJlbGVhc2Ugb3duZXJzaGlwKSAqLworLyogOSByZXNlcnZlZCAqLworI2RlZmluZSBQT1JUX1JFU0VUCSgxPDw4KQkJLyogcmVzZXQgcG9ydCAqLworI2RlZmluZSBQT1JUX1NVU1BFTkQJKDE8PDcpCQkvKiBzdXNwZW5kIHBvcnQgKi8KKyNkZWZpbmUgUE9SVF9SRVNVTUUJKDE8PDYpCQkvKiByZXN1bWUgaXQgKi8KKyNkZWZpbmUgUE9SVF9PQ0MJKDE8PDUpCQkvKiBvdmVyIGN1cnJlbnQgY2hhbmdlICovCisjZGVmaW5lIFBPUlRfT0MJCSgxPDw0KQkJLyogb3ZlciBjdXJyZW50IGFjdGl2ZSAqLworI2RlZmluZSBQT1JUX1BFQwkoMTw8MykJCS8qIHBvcnQgZW5hYmxlIGNoYW5nZSAqLworI2RlZmluZSBQT1JUX1BFCQkoMTw8MikJCS8qIHBvcnQgZW5hYmxlICovCisjZGVmaW5lIFBPUlRfQ1NDCSgxPDwxKQkJLyogY29ubmVjdCBzdGF0dXMgY2hhbmdlICovCisjZGVmaW5lIFBPUlRfQ09OTkVDVAkoMTw8MCkJCS8qIGRldmljZSBjb25uZWN0ZWQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBBcHBlbmRpeCBDLCBEZWJ1ZyBwb3J0IC4uLiBpbnRlbmRlZCBmb3IgdXNlIHdpdGggc3BlY2lhbCAiZGVidWcgZGV2aWNlcyIKKyAqIHRoYXQgY2FuIGhlbHAgaWYgdGhlcmUncyBubyBzZXJpYWwgY29uc29sZS4gIChub25zdGFuZGFyZCBlbnVtZXJhdGlvbi4pCisgKi8KK3N0cnVjdCBlaGNpX2RiZ19wb3J0IHsKKwl1MzIJY29udHJvbDsKKyNkZWZpbmUgREJHUF9PV05FUgkoMTw8MzApCisjZGVmaW5lIERCR1BfRU5BQkxFRAkoMTw8MjgpCisjZGVmaW5lIERCR1BfRE9ORQkoMTw8MTYpCisjZGVmaW5lIERCR1BfSU5VU0UJKDE8PDEwKQorI2RlZmluZSBEQkdQX0VSUkNPREUoeCkJKCgoeCk+PjcpJjB4MGYpCisjCWRlZmluZSBEQkdQX0VSUl9CQUQJMQorIwlkZWZpbmUgREJHUF9FUlJfU0lHTkFMCTIKKyNkZWZpbmUgREJHUF9FUlJPUgkoMTw8NikKKyNkZWZpbmUgREJHUF9HTwkJKDE8PDUpCisjZGVmaW5lIERCR1BfT1VUCSgxPDw0KQorI2RlZmluZSBEQkdQX0xFTih4KQkoKCh4KT4+MCkmMHgwZikKKwl1MzIJcGlkczsKKyNkZWZpbmUgREJHUF9QSURfR0VUKHgpCQkoKCh4KT4+MTYpJjB4ZmYpCisjZGVmaW5lIERCR1BfUElEX1NFVChkYXRhLHRvaykJKCgoZGF0YSk8PDgpfCh0b2spKTsKKwl1MzIJZGF0YTAzOworCXUzMglkYXRhNDc7CisJdTMyCWFkZHJlc3M7CisjZGVmaW5lIERCR1BfRVBBRERSKGRldixlcCkJKCgoZGV2KTw8OCl8KGVwKSk7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZQlRVERfTkVYVChkbWEpCWNwdV90b19sZTMyKCh1MzIpZG1hKQorCisvKgorICogRUhDSSBTcGVjaWZpY2F0aW9uIDAuOTUgU2VjdGlvbiAzLjUKKyAqIFFURDogZGVzY3JpYmUgZGF0YSB0cmFuc2ZlciBjb21wb25lbnRzIChidWZmZXIsIGRpcmVjdGlvbiwgLi4uKSAKKyAqIFNlZSBGaWcgMy02ICJRdWV1ZSBFbGVtZW50IFRyYW5zZmVyIERlc2NyaXB0b3IgQmxvY2sgRGlhZ3JhbSIuCisgKgorICogVGhlc2UgYXJlIGFzc29jaWF0ZWQgb25seSB3aXRoICJRSCIgKFF1ZXVlIEhlYWQpIHN0cnVjdHVyZXMsCisgKiB1c2VkIHdpdGggY29udHJvbCwgYnVsaywgYW5kIGludGVycnVwdCB0cmFuc2ZlcnMuCisgKi8KK3N0cnVjdCBlaGNpX3F0ZCB7CisJLyogZmlyc3QgcGFydCBkZWZpbmVkIGJ5IEVIQ0kgc3BlYyAqLworCV9fbGUzMgkJCWh3X25leHQ7CSAgLyogc2VlIEVIQ0kgMy41LjEgKi8KKwlfX2xlMzIJCQlod19hbHRfbmV4dDsgICAgICAvKiBzZWUgRUhDSSAzLjUuMiAqLworCV9fbGUzMgkJCWh3X3Rva2VuOyAgICAgICAgIC8qIHNlZSBFSENJIDMuNS4zICovICAgICAgIAorI2RlZmluZQlRVERfVE9HR0xFCSgxIDw8IDMxKQkvKiBkYXRhIHRvZ2dsZSAqLworI2RlZmluZQlRVERfTEVOR1RIKHRvaykJKCgodG9rKT4+MTYpICYgMHg3ZmZmKQorI2RlZmluZQlRVERfSU9DCQkoMSA8PCAxNSkJLyogaW50ZXJydXB0IG9uIGNvbXBsZXRlICovCisjZGVmaW5lCVFURF9DRVJSKHRvaykJKCgodG9rKT4+MTApICYgMHgzKQorI2RlZmluZQlRVERfUElEKHRvaykJKCgodG9rKT4+OCkgJiAweDMpCisjZGVmaW5lCVFURF9TVFNfQUNUSVZFCSgxIDw8IDcpCS8qIEhDIG1heSBleGVjdXRlIHRoaXMgKi8KKyNkZWZpbmUJUVREX1NUU19IQUxUCSgxIDw8IDYpCS8qIGhhbHRlZCBvbiBlcnJvciAqLworI2RlZmluZQlRVERfU1RTX0RCRQkoMSA8PCA1KQkvKiBkYXRhIGJ1ZmZlciBlcnJvciAoaW4gSEMpICovCisjZGVmaW5lCVFURF9TVFNfQkFCQkxFCSgxIDw8IDQpCS8qIGRldmljZSB3YXMgYmFiYmxpbmcgKHF0ZCBoYWx0ZWQpICovCisjZGVmaW5lCVFURF9TVFNfWEFDVAkoMSA8PCAzKQkvKiBkZXZpY2UgZ2F2ZSBpbGxlZ2FsIHJlc3BvbnNlICovCisjZGVmaW5lCVFURF9TVFNfTU1GCSgxIDw8IDIpCS8qIGluY29tcGxldGUgc3BsaXQgdHJhbnNhY3Rpb24gKi8KKyNkZWZpbmUJUVREX1NUU19TVFMJKDEgPDwgMSkJLyogc3BsaXQgdHJhbnNhY3Rpb24gc3RhdGUgKi8KKyNkZWZpbmUJUVREX1NUU19QSU5HCSgxIDw8IDApCS8qIGlzc3VlIFBJTkc/ICovCisJX19sZTMyCQkJaHdfYnVmIFs1XTsgICAgICAgIC8qIHNlZSBFSENJIDMuNS40ICovCisJX19sZTMyCQkJaHdfYnVmX2hpIFs1XTsgICAgICAgIC8qIEFwcGVuZGl4IEIgKi8KKworCS8qIHRoZSByZXN0IGlzIEhDRC1wcml2YXRlICovCisJZG1hX2FkZHJfdAkJcXRkX2RtYTsJCS8qIHF0ZCBhZGRyZXNzICovCisJc3RydWN0IGxpc3RfaGVhZAlxdGRfbGlzdDsJCS8qIHN3IHF0ZCBsaXN0ICovCisJc3RydWN0IHVyYgkJKnVyYjsJCQkvKiBxdGQncyB1cmIgKi8KKwlzaXplX3QJCQlsZW5ndGg7CQkJLyogbGVuZ3RoIG9mIGJ1ZmZlciAqLworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMzIpKSk7CisKKy8qIG1hc2sgTmFrQ250K1QgaW4gcWgtPmh3X2FsdF9uZXh0ICovCisjZGVmaW5lIFFURF9NQVNLIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKH4weDFmKQorCisjZGVmaW5lIElTX1NIT1JUX1JFQUQodG9rZW4pIChRVERfTEVOR1RIICh0b2tlbikgIT0gMCAmJiBRVERfUElEICh0b2tlbikgPT0gMSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdHlwZSB0YWcgZnJvbSB7cWgsaXRkLHNpdGQsZnN0bn0tPmh3X25leHQgKi8KKyNkZWZpbmUgUV9ORVhUX1RZUEUoZG1hKSAoKGRtYSkgJiBfX2NvbnN0YW50X2NwdV90b19sZTMyICgzIDw8IDEpKQorCisvKiB2YWx1ZXMgZm9yIHRoYXQgdHlwZSB0YWcgKi8KKyNkZWZpbmUgUV9UWVBFX0lURAlfX2NvbnN0YW50X2NwdV90b19sZTMyICgwIDw8IDEpCisjZGVmaW5lIFFfVFlQRV9RSAlfX2NvbnN0YW50X2NwdV90b19sZTMyICgxIDw8IDEpCisjZGVmaW5lIFFfVFlQRV9TSVREIAlfX2NvbnN0YW50X2NwdV90b19sZTMyICgyIDw8IDEpCisjZGVmaW5lIFFfVFlQRV9GU1ROIAlfX2NvbnN0YW50X2NwdV90b19sZTMyICgzIDw8IDEpCisKKy8qIG5leHQgYXN5bmMgcXVldWUgZW50cnksIG9yIHBvaW50ZXIgdG8gaW50ZXJydXB0L3BlcmlvZGljIFFIICovCisjZGVmaW5lCVFIX05FWFQoZG1hKQkoY3B1X3RvX2xlMzIoKCh1MzIpZG1hKSZ+MHgwMWYpfFFfVFlQRV9RSCkKKworLyogZm9yIHBlcmlvZGljL2FzeW5jIHNjaGVkdWxlcyBhbmQgcXRkIGxpc3RzLCBtYXJrIGVuZCBvZiBsaXN0ICovCisjZGVmaW5lCUVIQ0lfTElTVF9FTkQJX19jb25zdGFudF9jcHVfdG9fbGUzMigxKSAvKiAibnVsbCBwb2ludGVyIiB0byBodyAqLworCisvKgorICogRW50cmllcyBpbiBwZXJpb2RpYyBzaGFkb3cgdGFibGUgYXJlIHBvaW50ZXJzIHRvIG9uZSBvZiBmb3VyIGtpbmRzCisgKiBvZiBkYXRhIHN0cnVjdHVyZS4gIFRoYXQncyBkaWN0YXRlZCBieSB0aGUgaGFyZHdhcmU7IGEgdHlwZSB0YWcgaXMKKyAqIGVuY29kZWQgaW4gdGhlIGxvdyBiaXRzIG9mIHRoZSBoYXJkd2FyZSdzIHBlcmlvZGljIHNjaGVkdWxlLiAgVXNlCisgKiBRX05FWFRfVFlQRSB0byBnZXQgdGhlIHRhZy4KKyAqCisgKiBGb3IgZW50cmllcyBpbiB0aGUgYXN5bmMgc2NoZWR1bGUsIHRoZSB0eXBlIHRhZyBhbHdheXMgc2F5cyAicWgiLgorICovCit1bmlvbiBlaGNpX3NoYWRvdyB7CisJc3RydWN0IGVoY2lfcWggCQkqcWg7CQkvKiBRX1RZUEVfUUggKi8KKwlzdHJ1Y3QgZWhjaV9pdGQJCSppdGQ7CQkvKiBRX1RZUEVfSVREICovCisJc3RydWN0IGVoY2lfc2l0ZAkqc2l0ZDsJCS8qIFFfVFlQRV9TSVREICovCisJc3RydWN0IGVoY2lfZnN0bgkqZnN0bjsJCS8qIFFfVFlQRV9GU1ROICovCisJdTMyCQkJKmh3X25leHQ7CS8qIChhbGwgdHlwZXMpICovCisJdm9pZAkJCSpwdHI7Cit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogRUhDSSBTcGVjaWZpY2F0aW9uIDAuOTUgU2VjdGlvbiAzLjYKKyAqIFFIOiBkZXNjcmliZXMgY29udHJvbC9idWxrL2ludGVycnVwdCBlbmRwb2ludHMKKyAqIFNlZSBGaWcgMy03ICJRdWV1ZSBIZWFkIFN0cnVjdHVyZSBMYXlvdXQiLgorICoKKyAqIFRoZXNlIGFwcGVhciBpbiBib3RoIHRoZSBhc3luYyBhbmQgKGZvciBpbnRlcnJ1cHQpIHBlcmlvZGljIHNjaGVkdWxlcy4KKyAqLworCitzdHJ1Y3QgZWhjaV9xaCB7CisJLyogZmlyc3QgcGFydCBkZWZpbmVkIGJ5IEVIQ0kgc3BlYyAqLworCV9fbGUzMgkJCWh3X25leHQ7CSAvKiBzZWUgRUhDSSAzLjYuMSAqLworCV9fbGUzMgkJCWh3X2luZm8xOyAgICAgICAgLyogc2VlIEVIQ0kgMy42LjIgKi8KKyNkZWZpbmUJUUhfSEVBRAkJMHgwMDAwODAwMAorCV9fbGUzMgkJCWh3X2luZm8yOyAgICAgICAgLyogc2VlIEVIQ0kgMy42LjIgKi8KKwlfX2xlMzIJCQlod19jdXJyZW50OwkgLyogcXRkIGxpc3QgLSBzZWUgRUhDSSAzLjYuNCAqLworCQorCS8qIHF0ZCBvdmVybGF5IChoYXJkd2FyZSBwYXJ0cyBvZiBhIHN0cnVjdCBlaGNpX3F0ZCkgKi8KKwlfX2xlMzIJCQlod19xdGRfbmV4dDsKKwlfX2xlMzIJCQlod19hbHRfbmV4dDsKKwlfX2xlMzIJCQlod190b2tlbjsKKwlfX2xlMzIJCQlod19idWYgWzVdOworCV9fbGUzMgkJCWh3X2J1Zl9oaSBbNV07CisKKwkvKiB0aGUgcmVzdCBpcyBIQ0QtcHJpdmF0ZSAqLworCWRtYV9hZGRyX3QJCXFoX2RtYTsJCS8qIGFkZHJlc3Mgb2YgcWggKi8KKwl1bmlvbiBlaGNpX3NoYWRvdwlxaF9uZXh0OwkvKiBwdHIgdG8gcWg7IG9yIHBlcmlvZGljICovCisJc3RydWN0IGxpc3RfaGVhZAlxdGRfbGlzdDsJLyogc3cgcXRkIGxpc3QgKi8KKwlzdHJ1Y3QgZWhjaV9xdGQJCSpkdW1teTsKKwlzdHJ1Y3QgZWhjaV9xaAkJKnJlY2xhaW07CS8qIG5leHQgdG8gcmVjbGFpbSAqLworCisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaTsKKwlzdHJ1Y3Qga3JlZgkJa3JlZjsKKwl1bnNpZ25lZAkJc3RhbXA7CisKKwl1OAkJCXFoX3N0YXRlOworI2RlZmluZQlRSF9TVEFURV9MSU5LRUQJCTEJCS8qIEhDIHNlZXMgdGhpcyAqLworI2RlZmluZQlRSF9TVEFURV9VTkxJTksJCTIJCS8qIEhDIG1heSBzdGlsbCBzZWUgdGhpcyAqLworI2RlZmluZQlRSF9TVEFURV9JRExFCQkzCQkvKiBIQyBkb2Vzbid0IHNlZSB0aGlzICovCisjZGVmaW5lCVFIX1NUQVRFX1VOTElOS19XQUlUCTQJCS8qIExJTktFRCBhbmQgb24gcmVjbGFpbSBxICovCisjZGVmaW5lCVFIX1NUQVRFX0NPTVBMRVRJTkcJNQkJLyogZG9uJ3QgdG91Y2ggdG9rZW4uSEFMVCAqLworCisJLyogcGVyaW9kaWMgc2NoZWR1bGUgaW5mbyAqLworCXU4CQkJdXNlY3M7CQkvKiBpbnRyIGJhbmR3aWR0aCAqLworCXU4CQkJZ2FwX3VmOwkJLyogdWZyYW1lcyBzcGxpdC9jc3BsaXQgZ2FwICovCisJdTgJCQljX3VzZWNzOwkvKiAuLi4gc3BsaXQgY29tcGxldGlvbiBidyAqLworCXVuc2lnbmVkIHNob3J0CQlwZXJpb2Q7CQkvKiBwb2xsaW5nIGludGVydmFsICovCisJdW5zaWduZWQgc2hvcnQJCXN0YXJ0OwkJLyogd2hlcmUgcG9sbGluZyBzdGFydHMgKi8KKyNkZWZpbmUgTk9fRlJBTUUgKCh1bnNpZ25lZCBzaG9ydCl+MCkJCQkvKiBwaWNrIG5ldyBzdGFydCAqLworCXN0cnVjdCB1c2JfZGV2aWNlCSpkZXY7CQkvKiBhY2Nlc3MgdG8gVFQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDMyKSkpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBkZXNjcmlwdGlvbiBvZiBvbmUgaXNvIHRyYW5zYWN0aW9uICh1cCB0byAzIEtCIGRhdGEgaWYgaGlnaHNwZWVkKSAqLworc3RydWN0IGVoY2lfaXNvX3BhY2tldCB7CisJLyogVGhlc2Ugd2lsbCBiZSBjb3BpZWQgdG8gaVREIHdoZW4gc2NoZWR1bGluZyAqLworCXU2NAkJCWJ1ZnA7CQkvKiBpdGQtPmh3X2J1ZnB7LF9oaX1bcGddIHw9ICovCisJX19sZTMyCQkJdHJhbnNhY3Rpb247CS8qIGl0ZC0+aHdfdHJhbnNhY3Rpb25baV0gfD0gKi8KKwl1OAkJCWNyb3NzOwkJLyogYnVmIGNyb3NzZXMgcGFnZXMgKi8KKwkvKiBmb3IgZnVsbCBzcGVlZCBPVVQgc3BsaXRzICovCisJdTMyCQkJYnVmMTsKK307CisKKy8qIHRlbXBvcmFyeSBzY2hlZHVsZSBkYXRhIGZvciBwYWNrZXRzIGZyb20gaXNvIHVyYnMgKGJvdGggc3BlZWRzKQorICogZWFjaCBwYWNrZXQgaXMgb25lIGxvZ2ljYWwgdXNiIHRyYW5zYWN0aW9uIHRvIHRoZSBkZXZpY2UgKG5vdCBUVCksCisgKiBiZWdpbm5pbmcgYXQgc3RyZWFtLT5uZXh0X3VmcmFtZQorICovCitzdHJ1Y3QgZWhjaV9pc29fc2NoZWQgeworCXN0cnVjdCBsaXN0X2hlYWQJdGRfbGlzdDsKKwl1bnNpZ25lZAkJc3BhbjsKKwlzdHJ1Y3QgZWhjaV9pc29fcGFja2V0CXBhY2tldCBbMF07Cit9OworCisvKgorICogZWhjaV9pc29fc3RyZWFtIC0gZ3JvdXBzIGFsbCAocylpdGRzIGZvciB0aGlzIGVuZHBvaW50LgorICogYWN0cyBsaWtlIGEgcWggd291bGQsIGlmIEVIQ0kgaGFkIHRoZW0gZm9yIElTTy4KKyAqLworc3RydWN0IGVoY2lfaXNvX3N0cmVhbSB7CisJLyogZmlyc3QgdHdvIGZpZWxkcyBtYXRjaCBRSCwgYnV0IGluZm8xID09IDAgKi8KKwlfX2xlMzIJCQlod19uZXh0OworCV9fbGUzMgkJCWh3X2luZm8xOworCisJdTMyCQkJcmVmY291bnQ7CisJdTgJCQliRW5kcG9pbnRBZGRyZXNzOworCXU4CQkJaGlnaHNwZWVkOworCXUxNgkJCWRlcHRoOwkJLyogZGVwdGggaW4gdWZyYW1lcyAqLworCXN0cnVjdCBsaXN0X2hlYWQJdGRfbGlzdDsJLyogcXVldWVkIGl0ZHMvc2l0ZHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWZyZWVfbGlzdDsJLyogbGlzdCBvZiB1bnVzZWQgaXRkcy9zaXRkcyAqLworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OworIAlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOworCisJLyogb3V0cHV0IG9mIChyZSlzY2hlZHVsaW5nICovCisJdW5zaWduZWQgbG9uZwkJc3RhcnQ7CQkvKiBqaWZmaWVzICovCisJdW5zaWduZWQgbG9uZwkJcmVzY2hlZHVsZWQ7CisJaW50CQkJbmV4dF91ZnJhbWU7CisJX19sZTMyCQkJc3BsaXRzOworCisJLyogdGhlIHJlc3QgaXMgZGVyaXZlZCBmcm9tIHRoZSBlbmRwb2ludCBkZXNjcmlwdG9yLAorCSAqIHRydXN0aW5nIHVyYi0+aW50ZXJ2YWwgPT0gZihlcGRlc2MtPmJJbnRlcnZhbCkgYW5kCisJICogaW5jbHVkaW5nIHRoZSBleHRyYSBpbmZvIGZvciBod19idWZwWzAuLjJdCisJICovCisJdTgJCQlpbnRlcnZhbDsKKwl1OAkJCXVzZWNzLCBjX3VzZWNzOworCXUxNgkJCW1heHA7CisJdTE2CQkJcmF3X21hc2s7CisJdW5zaWduZWQJCWJhbmR3aWR0aDsKKworCS8qIFRoaXMgaXMgdXNlZCB0byBpbml0aWFsaXplIGlURCdzIGh3X2J1ZnAgZmllbGRzICovCisJX19sZTMyCQkJYnVmMDsJCQorCV9fbGUzMgkJCWJ1ZjE7CQkKKwlfX2xlMzIJCQlidWYyOworCisJLyogdGhpcyBpcyB1c2VkIHRvIGluaXRpYWxpemUgc0lURCdzIHR0IGluZm8gKi8KKwlfX2xlMzIJCQlhZGRyZXNzOworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEVIQ0kgU3BlY2lmaWNhdGlvbiAwLjk1IFNlY3Rpb24gMy4zCisgKiBGaWcgMy00ICJJc29jaHJvbm91cyBUcmFuc2FjdGlvbiBEZXNjcmlwdG9yIChpVEQpIgorICoKKyAqIFNjaGVkdWxlIHJlY29yZHMgZm9yIGhpZ2ggc3BlZWQgaXNvIHhmZXJzCisgKi8KK3N0cnVjdCBlaGNpX2l0ZCB7CisJLyogZmlyc3QgcGFydCBkZWZpbmVkIGJ5IEVIQ0kgc3BlYyAqLworCV9fbGUzMgkJCWh3X25leHQ7ICAgICAgICAgICAvKiBzZWUgRUhDSSAzLjMuMSAqLworCV9fbGUzMgkJCWh3X3RyYW5zYWN0aW9uIFs4XTsgLyogc2VlIEVIQ0kgMy4zLjIgKi8KKyNkZWZpbmUgRUhDSV9JU09DX0FDVElWRSAgICAgICAgKDE8PDMxKSAgICAgICAgLyogYWN0aXZhdGUgdHJhbnNmZXIgdGhpcyBzbG90ICovCisjZGVmaW5lIEVIQ0lfSVNPQ19CVUZfRVJSICAgICAgICgxPDwzMCkgICAgICAgIC8qIERhdGEgYnVmZmVyIGVycm9yICovCisjZGVmaW5lIEVIQ0lfSVNPQ19CQUJCTEUgICAgICAgICgxPDwyOSkgICAgICAgIC8qIGJhYmJsZSBkZXRlY3RlZCAqLworI2RlZmluZSBFSENJX0lTT0NfWEFDVEVSUiAgICAgICAoMTw8MjgpICAgICAgICAvKiBYYWN0RXJyIC0gdHJhbnNhY3Rpb24gZXJyb3IgKi8KKyNkZWZpbmUJRUhDSV9JVERfTEVOR1RIKHRvaykJKCgodG9rKT4+MTYpICYgMHgwZmZmKQorI2RlZmluZQlFSENJX0lURF9JT0MJCSgxIDw8IDE1KQkvKiBpbnRlcnJ1cHQgb24gY29tcGxldGUgKi8KKworI2RlZmluZSBJVERfQUNUSVZFCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRUhDSV9JU09DX0FDVElWRSkKKworCV9fbGUzMgkJCWh3X2J1ZnAgWzddOwkvKiBzZWUgRUhDSSAzLjMuMyAqLyAKKwlfX2xlMzIJCQlod19idWZwX2hpIFs3XTsJLyogQXBwZW5kaXggQiAqLworCisJLyogdGhlIHJlc3QgaXMgSENELXByaXZhdGUgKi8KKwlkbWFfYWRkcl90CQlpdGRfZG1hOwkvKiBmb3IgdGhpcyBpdGQgKi8KKwl1bmlvbiBlaGNpX3NoYWRvdwlpdGRfbmV4dDsJLyogcHRyIHRvIHBlcmlvZGljIHEgZW50cnkgKi8KKworCXN0cnVjdCB1cmIJCSp1cmI7CisJc3RydWN0IGVoY2lfaXNvX3N0cmVhbQkqc3RyZWFtOwkvKiBlbmRwb2ludCdzIHF1ZXVlICovCisJc3RydWN0IGxpc3RfaGVhZAlpdGRfbGlzdDsJLyogbGlzdCBvZiBzdHJlYW0ncyBpdGRzICovCisKKwkvKiBhbnkvYWxsIGh3X3RyYW5zYWN0aW9ucyBoZXJlIG1heSBiZSB1c2VkIGJ5IHRoYXQgdXJiICovCisJdW5zaWduZWQJCWZyYW1lOwkJLyogd2hlcmUgc2NoZWR1bGVkICovCisJdW5zaWduZWQJCXBnOworCXVuc2lnbmVkCQlpbmRleFs4XTsJLyogaW4gdXJiLT5pc29fZnJhbWVfZGVzYyAqLworCXU4CQkJdXNlY3NbOF07Cit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgzMikpKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEVIQ0kgU3BlY2lmaWNhdGlvbiAwLjk1IFNlY3Rpb24gMy40IAorICogc2lURCwgYWthIHNwbGl0LXRyYW5zYWN0aW9uIGlzb2Nocm9ub3VzIFRyYW5zZmVyIERlc2NyaXB0b3IKKyAqICAgICAgIC4uLiBkZXNjcmliZSBmdWxsIHNwZWVkIGlzbyB4ZmVycyB0aHJvdWdoIFRUIGluIGh1YnMKKyAqIHNlZSBGaWd1cmUgMy01ICJTcGxpdC10cmFuc2FjdGlvbiBJc29jaHJvbm91cyBUcmFuc2FjdGlvbiBEZXNjcmlwdG9yIChzaVREKQorICovCitzdHJ1Y3QgZWhjaV9zaXRkIHsKKwkvKiBmaXJzdCBwYXJ0IGRlZmluZWQgYnkgRUhDSSBzcGVjICovCisJX19sZTMyCQkJaHdfbmV4dDsKKy8qIHVzZXMgYml0IGZpZWxkIG1hY3JvcyBhYm92ZSAtIHNlZSBFSENJIDAuOTUgVGFibGUgMy04ICovCisJX19sZTMyCQkJaHdfZnVsbHNwZWVkX2VwOwkvKiBFSENJIHRhYmxlIDMtOSAqLworCV9fbGUzMgkJCWh3X3VmcmFtZTsJCS8qIEVIQ0kgdGFibGUgMy0xMCAqLworCV9fbGUzMgkJCWh3X3Jlc3VsdHM7CQkvKiBFSENJIHRhYmxlIDMtMTEgKi8KKyNkZWZpbmUJU0lURF9JT0MJKDEgPDwgMzEpCS8qIGludGVycnVwdCBvbiBjb21wbGV0aW9uICovCisjZGVmaW5lCVNJVERfUEFHRQkoMSA8PCAzMCkJLyogYnVmZmVyIDAvMSAqLworI2RlZmluZQlTSVREX0xFTkdUSCh4KQkoMHgzZmYgJiAoKHgpPj4xNikpCisjZGVmaW5lCVNJVERfU1RTX0FDVElWRQkoMSA8PCA3KQkvKiBIQyBtYXkgZXhlY3V0ZSB0aGlzICovCisjZGVmaW5lCVNJVERfU1RTX0VSUgkoMSA8PCA2KQkvKiBlcnJvciBmcm9tIFRUICovCisjZGVmaW5lCVNJVERfU1RTX0RCRQkoMSA8PCA1KQkvKiBkYXRhIGJ1ZmZlciBlcnJvciAoaW4gSEMpICovCisjZGVmaW5lCVNJVERfU1RTX0JBQkJMRQkoMSA8PCA0KQkvKiBkZXZpY2Ugd2FzIGJhYmJsaW5nICovCisjZGVmaW5lCVNJVERfU1RTX1hBQ1QJKDEgPDwgMykJLyogaWxsZWdhbCBJTiByZXNwb25zZSAqLworI2RlZmluZQlTSVREX1NUU19NTUYJKDEgPDwgMikJLyogaW5jb21wbGV0ZSBzcGxpdCB0cmFuc2FjdGlvbiAqLworI2RlZmluZQlTSVREX1NUU19TVFMJKDEgPDwgMSkJLyogc3BsaXQgdHJhbnNhY3Rpb24gc3RhdGUgKi8KKworI2RlZmluZSBTSVREX0FDVElWRQlfX2NvbnN0YW50X2NwdV90b19sZTMyKFNJVERfU1RTX0FDVElWRSkKKworCV9fbGUzMgkJCWh3X2J1ZiBbMl07CQkvKiBFSENJIHRhYmxlIDMtMTIgKi8KKwlfX2xlMzIJCQlod19iYWNrcG9pbnRlcjsJCS8qIEVIQ0kgdGFibGUgMy0xMyAqLworCV9fbGUzMgkJCWh3X2J1Zl9oaSBbMl07CQkvKiBBcHBlbmRpeCBCICovCisKKwkvKiB0aGUgcmVzdCBpcyBIQ0QtcHJpdmF0ZSAqLworCWRtYV9hZGRyX3QJCXNpdGRfZG1hOworCXVuaW9uIGVoY2lfc2hhZG93CXNpdGRfbmV4dDsJLyogcHRyIHRvIHBlcmlvZGljIHEgZW50cnkgKi8KKworCXN0cnVjdCB1cmIJCSp1cmI7CisJc3RydWN0IGVoY2lfaXNvX3N0cmVhbQkqc3RyZWFtOwkvKiBlbmRwb2ludCdzIHF1ZXVlICovCisJc3RydWN0IGxpc3RfaGVhZAlzaXRkX2xpc3Q7CS8qIGxpc3Qgb2Ygc3RyZWFtJ3Mgc2l0ZHMgKi8KKwl1bnNpZ25lZAkJZnJhbWU7CisJdW5zaWduZWQJCWluZGV4OworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMzIpKSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBFSENJIFNwZWNpZmljYXRpb24gMC45NiBTZWN0aW9uIDMuNworICogUGVyaW9kaWMgRnJhbWUgU3BhbiBUcmF2ZXJzYWwgTm9kZSAoRlNUTikKKyAqCisgKiBNYW5hZ2VzIHNwbGl0IGludGVycnVwdCB0cmFuc2FjdGlvbnMgKHVzaW5nIFRUKSB0aGF0IHNwYW4gZnJhbWUgYm91bmRhcmllcworICogaW50byB1ZnJhbWVzIDAvMTsgc2VlIDQuMTIuMi4yLiAgSW4gdGhvc2UgdWZyYW1lcywgYSAic2F2ZSBwbGFjZSIgRlNUTgorICogbWFrZXMgdGhlIEhDIGp1bXAgKGJhY2spIHRvIGEgUUggdG8gc2NhbiBmb3IgZnMvbHMgUUggY29tcGxldGlvbnMgdW50aWwKKyAqIGl0IGhpdHMgYSAicmVzdG9yZSIgRlNUTjsgdGhlbiBpdCByZXR1cm5zIHRvIGZpbmlzaCBvdGhlciB1ZnJhbWUgMC8xIHdvcmsuCisgKi8KK3N0cnVjdCBlaGNpX2ZzdG4geworCV9fbGUzMgkJCWh3X25leHQ7CS8qIGFueSBwZXJpb2RpYyBxIGVudHJ5ICovCisJX19sZTMyCQkJaHdfcHJldjsJLyogcWggb3IgRUhDSV9MSVNUX0VORCAqLworCisJLyogdGhlIHJlc3QgaXMgSENELXByaXZhdGUgKi8KKwlkbWFfYWRkcl90CQlmc3RuX2RtYTsKKwl1bmlvbiBlaGNpX3NoYWRvdwlmc3RuX25leHQ7CS8qIHB0ciB0byBwZXJpb2RpYyBxIGVudHJ5ICovCit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgzMikpKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVAorCisvKgorICogU29tZSBFSENJIGNvbnRyb2xsZXJzIGhhdmUgYSBUcmFuc2FjdGlvbiBUcmFuc2xhdG9yIGJ1aWx0IGludG8gdGhlCisgKiByb290IGh1Yi4gVGhpcyBpcyBhIG5vbi1zdGFuZGFyZCBmZWF0dXJlLiAgRWFjaCBjb250cm9sbGVyIHdpbGwgbmVlZAorICogdG8gYWRkIGNvZGUgdG8gdGhlIGZvbGxvd2luZyBpbmxpbmUgZnVuY3Rpb25zLCBhbmQgY2FsbCB0aGVtIGFzCisgKiBuZWVkZWQgKG1vc3RseSBpbiByb290IGh1YiBjb2RlKS4KKyAqLworCisjZGVmaW5lCWVoY2lfaXNfVERJKGUpCQkJKChlKS0+aXNfdGRpX3JoX3R0KQorCisvKiBSZXR1cm5zIHRoZSBzcGVlZCBvZiBhIGRldmljZSBhdHRhY2hlZCB0byBhIHBvcnQgb24gdGhlIHJvb3QgaHViLiAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK2VoY2lfcG9ydF9zcGVlZChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHVuc2lnbmVkIGludCBwb3J0c2MpCit7CisJaWYgKGVoY2lfaXNfVERJKGVoY2kpKSB7CisJCXN3aXRjaCAoKHBvcnRzYz4+MjYpJjMpIHsKKwkJY2FzZSAwOgorCQkJcmV0dXJuIDA7CisJCWNhc2UgMToKKwkJCXJldHVybiAoMTw8VVNCX1BPUlRfRkVBVF9MT1dTUEVFRCk7CisJCWNhc2UgMjoKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAoMTw8VVNCX1BPUlRfRkVBVF9ISUdIU1BFRUQpOworCQl9CisJfQorCXJldHVybiAoMTw8VVNCX1BPUlRfRkVBVF9ISUdIU1BFRUQpOworfQorCisjZWxzZQorCisjZGVmaW5lCWVoY2lfaXNfVERJKGUpCQkJKDApCisKKyNkZWZpbmUJZWhjaV9wb3J0X3NwZWVkKGVoY2ksIHBvcnRzYykJKDE8PFVTQl9QT1JUX0ZFQVRfSElHSFNQRUVEKQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZm5kZWYgREVCVUcKKyNkZWZpbmUgU1RVQl9ERUJVR19GSUxFUworI2VuZGlmCS8qIERFQlVHICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNlbmRpZiAvKiBfX0xJTlVYX0VIQ0lfSENEX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaGNfY3Jpc3YxMC5jIGIvZHJpdmVycy91c2IvaG9zdC9oY19jcmlzdjEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIxMmJlOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaGNfY3Jpc3YxMC5jCkBAIC0wLDAgKzEsNDU1NiBAQAorLyoKKyAqIHVzYi1ob3N0LmM6IEVUUkFYIDEwMExYIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVyIChIQ0QpCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzIEF4aXMgQ29tbXVuaWNhdGlvbnMgQUIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zdmludG8uaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorLyogVWdseSBpbmNsdWRlIGJlY2F1c2Ugd2UgZG9uJ3QgbGl2ZSB3aXRoIHRoZSBvdGhlciBob3N0IGRyaXZlcnMuICovCisjaW5jbHVkZSA8Li4vZHJpdmVycy91c2IvY29yZS9oY2QuaD4KKyNpbmNsdWRlIDwuLi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oPgorCisjaW5jbHVkZSAiaGNfY3Jpc3YxMC5oIgorCisjZGVmaW5lIEVUUkFYX1VTQl9IQ19JUlEgVVNCX0hDX0lSUV9OQlIKKyNkZWZpbmUgRVRSQVhfVVNCX1JYX0lSUSBVU0JfRE1BX1JYX0lSUV9OQlIKKyNkZWZpbmUgRVRSQVhfVVNCX1RYX0lSUSBVU0JfRE1BX1RYX0lSUV9OQlIKKworc3RhdGljIGNvbnN0IGNoYXIgKnVzYl9oY2RfdmVyc2lvbiA9ICIkUmV2aXNpb246IDEuMiAkIjsKKworI3VuZGVmIEtFUk5fREVCVUcKKyNkZWZpbmUgS0VSTl9ERUJVRyAiIgorCisKKyN1bmRlZiBVU0JfREVCVUdfUkgKKyN1bmRlZiBVU0JfREVCVUdfRVBJRAorI3VuZGVmIFVTQl9ERUJVR19TQgorI3VuZGVmIFVTQl9ERUJVR19ERVNDCisjdW5kZWYgVVNCX0RFQlVHX1VSQgorI3VuZGVmIFVTQl9ERUJVR19UUkFDRQorI3VuZGVmIFVTQl9ERUJVR19CVUxLCisjdW5kZWYgVVNCX0RFQlVHX0NUUkwKKyN1bmRlZiBVU0JfREVCVUdfSU5UUgorI3VuZGVmIFVTQl9ERUJVR19JU09DCisKKyNpZmRlZiBVU0JfREVCVUdfUkgKKyNkZWZpbmUgZGJnX3JoKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiAoUkgpICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisjZWxzZQorI2RlZmluZSBkYmdfcmgoZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZiBVU0JfREVCVUdfRVBJRAorI2RlZmluZSBkYmdfZXBpZChmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18gIjogKEVQSUQpICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisjZWxzZQorI2RlZmluZSBkYmdfZXBpZChmb3JtYXQsIGFyZy4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworI2lmZGVmIFVTQl9ERUJVR19TQgorI2RlZmluZSBkYmdfc2IoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fICI6IChTQikgIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKKyNlbHNlCisjZGVmaW5lIGRiZ19zYihmb3JtYXQsIGFyZy4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworI2lmZGVmIFVTQl9ERUJVR19DVFJMCisjZGVmaW5lIGRiZ19jdHJsKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiAoQ1RSTCkgIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKKyNlbHNlCisjZGVmaW5lIGRiZ19jdHJsKGZvcm1hdCwgYXJnLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZkZWYgVVNCX0RFQlVHX0JVTEsKKyNkZWZpbmUgZGJnX2J1bGsoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fICI6IChCVUxLKSAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQorI2Vsc2UKKyNkZWZpbmUgZGJnX2J1bGsoZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZmRlZiBVU0JfREVCVUdfSU5UUgorI2RlZmluZSBkYmdfaW50cihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18gIjogKElOVFIpICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisjZWxzZQorI2RlZmluZSBkYmdfaW50cihmb3JtYXQsIGFyZy4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworI2lmZGVmIFVTQl9ERUJVR19JU09DCisjZGVmaW5lIGRiZ19pc29jKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiAoSVNPQykgIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKKyNlbHNlCisjZGVmaW5lIGRiZ19pc29jKGZvcm1hdCwgYXJnLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZkZWYgVVNCX0RFQlVHX1RSQUNFCisjZGVmaW5lIERCRkVOVEVSIChwcmludGsoIjogRW50ZXJpbmc6ICVzXG4iLCBfX0ZVTkNUSU9OX18pKQorI2RlZmluZSBEQkZFWElUICAocHJpbnRrKCI6IEV4aXRpbmc6ICAlc1xuIiwgX19GVU5DVElPTl9fKSkKKyNlbHNlCisjZGVmaW5lIERCRkVOVEVSIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBEQkZFWElUICBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIHVzYl9waXBlc2xvdyhwaXBlKQkoKChwaXBlKSA+PiAyNikgJiAxKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBWaXJ0dWFsIFJvb3QgSHViCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBfX3U4IHJvb3RfaHViX2Rldl9kZXNbXSA9Cit7CisJMHgxMiwgIC8qICBfX3U4ICBiTGVuZ3RoOyAqLworCTB4MDEsICAvKiAgX191OCAgYkRlc2NyaXB0b3JUeXBlOyBEZXZpY2UgKi8KKwkweDAwLCAgLyogIF9fbGUxNiBiY2RVU0I7IHYxLjAgKi8KKwkweDAxLAorCTB4MDksICAvKiAgX191OCAgYkRldmljZUNsYXNzOyBIVUJfQ0xBU1NDT0RFICovCisJMHgwMCwgIC8qICBfX3U4ICBiRGV2aWNlU3ViQ2xhc3M7ICovCisJMHgwMCwgIC8qICBfX3U4ICBiRGV2aWNlUHJvdG9jb2w7ICovCisJMHgwOCwgIC8qICBfX3U4ICBiTWF4UGFja2V0U2l6ZTA7IDggQnl0ZXMgKi8KKwkweDAwLCAgLyogIF9fbGUxNiBpZFZlbmRvcjsgKi8KKwkweDAwLAorCTB4MDAsICAvKiAgX19sZTE2IGlkUHJvZHVjdDsgKi8KKwkweDAwLAorCTB4MDAsICAvKiAgX19sZTE2IGJjZERldmljZTsgKi8KKwkweDAwLAorCTB4MDAsICAvKiAgX191OCAgaU1hbnVmYWN0dXJlcjsgKi8KKwkweDAyLCAgLyogIF9fdTggIGlQcm9kdWN0OyAqLworCTB4MDEsICAvKiAgX191OCAgaVNlcmlhbE51bWJlcjsgKi8KKwkweDAxICAgLyogIF9fdTggIGJOdW1Db25maWd1cmF0aW9uczsgKi8KK307CisKKy8qIENvbmZpZ3VyYXRpb24gZGVzY3JpcHRvciAqLworc3RhdGljIF9fdTggcm9vdF9odWJfY29uZmlnX2Rlc1tdID0KK3sKKwkweDA5LCAgLyogIF9fdTggIGJMZW5ndGg7ICovCisJMHgwMiwgIC8qICBfX3U4ICBiRGVzY3JpcHRvclR5cGU7IENvbmZpZ3VyYXRpb24gKi8KKwkweDE5LCAgLyogIF9fbGUxNiB3VG90YWxMZW5ndGg7ICovCisJMHgwMCwKKwkweDAxLCAgLyogIF9fdTggIGJOdW1JbnRlcmZhY2VzOyAqLworCTB4MDEsICAvKiAgX191OCAgYkNvbmZpZ3VyYXRpb25WYWx1ZTsgKi8KKwkweDAwLCAgLyogIF9fdTggIGlDb25maWd1cmF0aW9uOyAqLworCTB4NDAsICAvKiAgX191OCAgYm1BdHRyaWJ1dGVzOyBCaXQgNzogQnVzLXBvd2VyZWQgKi8KKwkweDAwLCAgLyogIF9fdTggIE1heFBvd2VyOyAqLworCisgICAgIC8qIGludGVyZmFjZSAqLworCTB4MDksICAvKiAgX191OCAgaWZfYkxlbmd0aDsgKi8KKwkweDA0LCAgLyogIF9fdTggIGlmX2JEZXNjcmlwdG9yVHlwZTsgSW50ZXJmYWNlICovCisJMHgwMCwgIC8qICBfX3U4ICBpZl9iSW50ZXJmYWNlTnVtYmVyOyAqLworCTB4MDAsICAvKiAgX191OCAgaWZfYkFsdGVybmF0ZVNldHRpbmc7ICovCisJMHgwMSwgIC8qICBfX3U4ICBpZl9iTnVtRW5kcG9pbnRzOyAqLworCTB4MDksICAvKiAgX191OCAgaWZfYkludGVyZmFjZUNsYXNzOyBIVUJfQ0xBU1NDT0RFICovCisJMHgwMCwgIC8qICBfX3U4ICBpZl9iSW50ZXJmYWNlU3ViQ2xhc3M7ICovCisJMHgwMCwgIC8qICBfX3U4ICBpZl9iSW50ZXJmYWNlUHJvdG9jb2w7ICovCisJMHgwMCwgIC8qICBfX3U4ICBpZl9pSW50ZXJmYWNlOyAqLworCisgICAgIC8qIGVuZHBvaW50ICovCisJMHgwNywgIC8qICBfX3U4ICBlcF9iTGVuZ3RoOyAqLworCTB4MDUsICAvKiAgX191OCAgZXBfYkRlc2NyaXB0b3JUeXBlOyBFbmRwb2ludCAqLworCTB4ODEsICAvKiAgX191OCAgZXBfYkVuZHBvaW50QWRkcmVzczsgSU4gRW5kcG9pbnQgMSAqLworCTB4MDMsICAvKiAgX191OCAgZXBfYm1BdHRyaWJ1dGVzOyBJbnRlcnJ1cHQgKi8KKwkweDA4LCAgLyogIF9fbGUxNiBlcF93TWF4UGFja2V0U2l6ZTsgOCBCeXRlcyAqLworCTB4MDAsCisJMHhmZiAgIC8qICBfX3U4ICBlcF9iSW50ZXJ2YWw7IDI1NSBtcyAqLworfTsKKworc3RhdGljIF9fdTggcm9vdF9odWJfaHViX2Rlc1tdID0KK3sKKwkweDA5LCAgLyogIF9fdTggIGJMZW5ndGg7ICovCisJMHgyOSwgIC8qICBfX3U4ICBiRGVzY3JpcHRvclR5cGU7IEh1Yi1kZXNjcmlwdG9yICovCisJMHgwMiwgIC8qICBfX3U4ICBiTmJyUG9ydHM7ICovCisJMHgwMCwgIC8qIF9fdTE2ICB3SHViQ2hhcmFjdGVyaXN0aWNzOyAqLworCTB4MDAsCisJMHgwMSwgIC8qICBfX3U4ICBiUHdyT24ycHdyR29vZDsgMm1zICovCisJMHgwMCwgIC8qICBfX3U4ICBiSHViQ29udHJDdXJyZW50OyAwIG1BICovCisJMHgwMCwgIC8qICBfX3U4ICBEZXZpY2VSZW1vdmFibGU7ICoqKiA3IFBvcnRzIG1heCAqKiogKi8KKwkweGZmICAgLyogIF9fdTggIFBvcnRQd3JDdHJsTWFzazsgKioqIDcgcG9ydHMgbWF4ICoqKiAqLworfTsKKworc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IGJ1bGtfc3RhcnRfdGltZXIgPSBUSU1FUl9JTklUSUFMSVpFUihOVUxMLCAwLCAwKTsKK3N0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBidWxrX2VvdF90aW1lciA9IFRJTUVSX0lOSVRJQUxJWkVSKE5VTEwsIDAsIDApOworCisvKiBXZSB3YW50IHRoZSBzdGFydCB0aW1lciB0byBleHBpcmUgYmVmb3JlIHRoZSBlb3QgdGltZXIsIGJlY2F1c2UgdGhlIGZvcm1lciBtaWdodCBzdGFydAorICAgdHJhZmZpYywgdGh1cyBtYWtpbmcgaXQgdW5uZWNlc3NhcnkgZm9yIHRoZSBsYXR0ZXIgdG8gdGltZSBvdXQuICovCisjZGVmaW5lIEJVTEtfU1RBUlRfVElNRVJfSU5URVJWQUwgKEhaLzEwKSAvKiAxMDAgbXMgKi8KKyNkZWZpbmUgQlVMS19FT1RfVElNRVJfSU5URVJWQUwgKEhaLzEwKzIpIC8qIDEyMCBtcyAqLworCisjZGVmaW5lIE9LKHgpIGxlbiA9ICh4KTsgZGJnX3JoKCJPSyglZCk6IGxpbmU6ICVkIiwgeCwgX19MSU5FX18pOyBicmVhaworI2RlZmluZSBDSEVDS19BTElHTih4KSBpZiAoKChfX3UzMikoeCkpICYgMHgwMDAwMDAwMykgXAore3BhbmljKCJBbGlnbm1lbnQgY2hlY2sgKERXT1JEKSBmYWlsZWQgYXQgJXM6JXM6JWRcbiIsIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTt9CisKKyNkZWZpbmUgU0xBQl9GTEFHICAgICAoaW5faW50ZXJydXB0KCkgPyBTTEFCX0FUT01JQyA6IFNMQUJfS0VSTkVMKQorI2RlZmluZSBLTUFMTE9DX0ZMQUcgIChpbl9pbnRlcnJ1cHQoKSA/IEdGUF9BVE9NSUMgOiBHRlBfS0VSTkVMKQorCisvKiBNb3N0IGhlbHBmdWwgZGVidWdnaW5nIGFpZCAqLworI2RlZmluZSBhc3NlcnQoZXhwcikgKCh2b2lkKSAoKGV4cHIpID8gMCA6IChlcnIoImFzc2VydCBmYWlsZWQgYXQgbGluZSAlZCIsX19MSU5FX18pKSkpCisKKy8qIEFsdGVybmF0aXZlIGFzc2VydCBkZWZpbmUgd2hpY2ggc3RvcHMgYWZ0ZXIgYSBmYWlsZWQgYXNzZXJ0LiAqLworLyoKKyNkZWZpbmUgYXNzZXJ0KGV4cHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoIShleHByKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBlcnIoImFzc2VydCBmYWlsZWQgYXQgbGluZSAlZCIsX19MSU5FX18pOyBcCisgICAgICAgICAgICAgICAgd2hpbGUgKDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyovCisKKworLyogRklYTUU6IFNob3VsZCBSWF9CVUZfU0laRSBiZSBhIGNvbmZpZyBvcHRpb24sIG9yIG1heWJlIHdlIHNob3VsZCBhZGp1c3QgaXQgZHluYW1pY2FsbHk/CisgICBUbyBhZGp1c3QgaXQgZHluYW1pY2FsbHkgd2Ugd291bGQgaGF2ZSB0byBnZXQgYW4gaW50ZXJydXB0IHdoZW4gd2UgcmVhY2ggdGhlIGVuZAorICAgb2YgdGhlIHJ4IGRlc2NyaXB0b3IgbGlzdCwgb3Igd2hlbiB3ZSBnZXQgY2xvc2UgdG8gdGhlIGVuZCwgYW5kIHRoZW4gYWxsb2NhdGUgbW9yZQorICAgZGVzY3JpcHRvcnMuICovCisKKyNkZWZpbmUgTkJSX09GX1JYX0RFU0MgICAgIDUxMgorI2RlZmluZSBSWF9ERVNDX0JVRl9TSVpFICAgMTAyNAorI2RlZmluZSBSWF9CVUZfU0laRSAgICAgICAgKE5CUl9PRl9SWF9ERVNDICogUlhfREVTQ19CVUZfU0laRSkKKworLyogVGhlIG51bWJlciBvZiBlcGlkcyBpcywgYW1vbmcgb3RoZXIgdGhpbmdzLCB1c2VkIGZvciBwcmUtYWxsb2NhdGluZworICAgY3RybCwgYnVsayBhbmQgaXNvYyBFUCBkZXNjcmlwdG9ycyAob25lIGZvciBlYWNoIGVwaWQpLgorICAgQXNzdW1lZCB0byBiZSA+IDEgd2hlbiBpbml0aWF0aW5nIHRoZSBETUEgbGlzdHMuICovCisjZGVmaW5lIE5CUl9PRl9FUElEUyAgICAgICAzMgorCisvKiBTdXBwb3J0IGludGVycnVwdCB0cmFmZmljIGludGVydmFscyB1cCB0byAxMjggbXMuICovCisjZGVmaW5lIE1BWF9JTlRSX0lOVEVSVkFMIDEyOAorCisvKiBJZiBwZXJpb2RpYyB0cmFmZmljIChpbnRyIG9yIGlzb2MpIGlzIHRvIGJlIHVzZWQsIHRoZW4gb25lIGVudHJ5IGluIHRoZSBFUCB0YWJsZQorICAgbXVzdCBiZSAiaW52YWxpZCIuIEJ5IHRoaXMgd2UgbWVhbiB0aGF0IHdlIHNob3VsZG4ndCBjYXJlIGFib3V0IGVwaWQgYXR0ZW50aW9ucworICAgZm9yIHRoaXMgZXBpZCwgb3IgYXQgbGVhc3QgaGFuZGxlIHRoZW0gZGlmZmVyZW50bHkgZnJvbSBlcGlkIGF0dGVudGlvbnMgZm9yICJ2YWxpZCIKKyAgIGVwaWRzLiBUaGlzIGRlZmluZSBkZXRlcm1pbmVzIHdoaWNoIG9uZSB0byB1c2UgKGRvbid0IGNoYW5nZSBpdCkuICovCisjZGVmaW5lIElOVkFMSURfRVBJRCAgICAgMzEKKy8qIEEgc3BlY2lhbCBlcGlkIGZvciB0aGUgYnVsayBkdW1teXMuICovCisjZGVmaW5lIERVTU1ZX0VQSUQgICAgICAgMzAKKworLyogVGhpcyBpcyBqdXN0IGEgc29mdHdhcmUgY2FjaGUgZm9yIHRoZSB2YWxpZCBlbnRyaWVzIGluIFJfVVNCX0VQVF9EQVRBLiAqLworc3RhdGljIF9fdTMyIGVwaWRfdXNhZ2VfYml0bWFzazsKKworLyogQSBiaXRmaWVsZCB0byBrZWVwIGluZm9ybWF0aW9uIG9uIGluL291dCB0cmFmZmljIGlzIG5lZWRlZCB0byB1bmlxdWVseSBpZGVudGlmeQorICAgYW4gZW5kcG9pbnQgb24gYSBkZXZpY2UsIHNpbmNlIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCB3aGljaCBpbmRpY2F0ZXMgdHJhZmZpYworICAgZGlyZWN0aW9uIGlzIGxhY2tpbmcgaW4gdGhlIGVwX2lkIGZpZWxkIChFVFJBWCBlcGlkcyBjYW4gaGFuZGxlIGJvdGggaW4gYW5kCisgICBvdXQgdHJhZmZpYyBvbiBlbmRwb2ludHMgdGhhdCBhcmUgb3RoZXJ3aXNlIGlkZW50aWNhbCkuIFRoZSBVU0IgZnJhbWV3b3JrLCBob3dldmVyLAorICAgcmVsaWVzIG9uIHRoZW0gdG8gYmUgaGFuZGxlZCBzZXBhcmF0ZWx5LiAgRm9yIGV4YW1wbGUsIGJ1bGsgSU4gYW5kIE9VVCB1cmJzIGNhbm5vdAorICAgYmUgcXVldWVkIGluIHRoZSBzYW1lIGxpc3QsIHNpbmNlIHRoZXkgd291bGQgYmxvY2sgZWFjaCBvdGhlci4gKi8KK3N0YXRpYyBfX3UzMiBlcGlkX291dF90cmFmZmljOworCisvKiBETUEgSU4gY2FjaGUgYnVnLiBBbGlnbiB0aGUgRE1BIElOIGJ1ZmZlcnMgdG8gMzIgYnl0ZXMsIGkuZS4gYSBjYWNoZSBsaW5lLgorICAgU2luY2UgUlhfREVTQ19CVUZfU0laRSBpcyAxMDI0IGlzIGEgbXVsdGlwbGUgb2YgMzIsIGFsbCByeCBidWZmZXJzIHdpbGwgYmUgY2FjaGUgYWxpZ25lZC4gKi8KK3N0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIFJ4QnVmW1JYX0JVRl9TSVpFXSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMzIpKSk7CitzdGF0aWMgdm9sYXRpbGUgVVNCX0lOX0Rlc2NfdCBSeERlc2NMaXN0W05CUl9PRl9SWF9ERVNDXSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNCkpKTsKKworLyogUG9pbnRlcnMgaW50byBSeERlc2NMaXN0LiAqLworc3RhdGljIHZvbGF0aWxlIFVTQl9JTl9EZXNjX3QgKm15TmV4dFJ4RGVzYzsKK3N0YXRpYyB2b2xhdGlsZSBVU0JfSU5fRGVzY190ICpteUxhc3RSeERlc2M7CitzdGF0aWMgdm9sYXRpbGUgVVNCX0lOX0Rlc2NfdCAqbXlQcmV2UnhEZXNjOworCisvKiBFUCBkZXNjcmlwdG9ycyBtdXN0IGJlIDMyLWJpdCBhbGlnbmVkLiAqLworc3RhdGljIHZvbGF0aWxlIFVTQl9FUF9EZXNjX3QgVHhDdHJsRVBMaXN0W05CUl9PRl9FUElEU10gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDQpKSk7CitzdGF0aWMgdm9sYXRpbGUgVVNCX0VQX0Rlc2NfdCBUeEJ1bGtFUExpc3RbTkJSX09GX0VQSURTXSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNCkpKTsKKy8qIEFmdGVyIGVhY2ggZW5hYmxlZCBidWxrIEVQIChJTiBvciBPVVQpIHdlIHB1dCB0d28gZGlzYWJsZWQgRVAgZGVzY3JpcHRvcnMgd2l0aCB0aGUgZW9sIGZsYWcgc2V0LAorICAgY2F1c2luZyB0aGUgRE1BIHRvIHN0b3AgdGhlIERNQSBjaGFubmVsLiBUaGUgZmlyc3Qgb2YgdGhlc2UgdHdvIGhhcyB0aGUgaW50ciBmbGFnIHNldCwgd2hpY2gKKyAgIGdpdmVzIHVzIGEgZG1hOF9zdWIwX2Rlc2NyIGludGVycnVwdC4gV2hlbiB3ZSByZWNlaXZlIHRoaXMsIHdlIGFkdmFuY2UgdGhlIERNQSBvbmUgc3RlcCBpbiB0aGUKKyAgIEVQIGxpc3QgYW5kIHRoZW4gcmVzdGFydCB0aGUgYnVsayBjaGFubmVsLCB0aHVzIGZvcmNpbmcgYSBzd2l0Y2ggYmV0d2VlbiBidWxrIEVQIGRlc2NyaXB0b3JzCisgICBpbiBlYWNoIGZyYW1lLiAqLworc3RhdGljIHZvbGF0aWxlIFVTQl9FUF9EZXNjX3QgVHhCdWxrRHVtbXlFUExpc3RbTkJSX09GX0VQSURTXVsyXSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNCkpKTsKKworc3RhdGljIHZvbGF0aWxlIFVTQl9FUF9EZXNjX3QgVHhJc29jRVBMaXN0W05CUl9PRl9FUElEU10gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDQpKSk7CitzdGF0aWMgdm9sYXRpbGUgVVNCX1NCX0Rlc2NfdCBUeElzb2NTQl96b3V0IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg0KSkpOworCitzdGF0aWMgdm9sYXRpbGUgVVNCX0VQX0Rlc2NfdCBUeEludHJFUExpc3RbTUFYX0lOVFJfSU5URVJWQUxdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg0KSkpOworc3RhdGljIHZvbGF0aWxlIFVTQl9TQl9EZXNjX3QgVHhJbnRyU0Jfem91dCBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNCkpKTsKKworLyogQSB6b3V0IHRyYW5zZmVyIG1ha2VzIGEgbWVtb3J5IGFjY2VzcyBhdCB0aGUgYWRkcmVzcyBvZiBpdHMgYnVmIHBvaW50ZXIsIHdoaWNoIG1lYW5zIHRoYXQgc2V0dGluZworICAgdGhpcyBidWYgcG9pbnRlciB0byAwIHdpbGwgY2F1c2UgYW4gYWNjZXNzIHRvIHRoZSBmbGFzaC4gSW4gYWRkaXRpb24gdG8gdGhpcywgc2V0dGluZyBzd19sZW4gdG8gMAorICAgcmVzdWx0cyBpbiBhIDE2LzMyIGJ5dGVzIChkZXBlbmRpbmcgb24gRE1BIGJ1cnN0IHNpemUpIHRyYW5zZmVyLiBJbnN0ZWFkLCB3ZSBzZXQgaXQgdG8gMSwgYW5kIHBvaW50CisgICBpdCB0byB0aGlzIGJ1ZmZlci4gKi8KK3N0YXRpYyBpbnQgem91dF9idWZmZXJbNF0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDQpKSk7CisKKy8qIENhY2hlIGZvciBhbGxvY2F0aW5nIG5ldyBFUCBhbmQgU0IgZGVzY3JpcHRvcnMuICovCitzdGF0aWMga21lbV9jYWNoZV90ICp1c2JfZGVzY19jYWNoZTsKKworLyogQ2FjaGUgZm9yIHRoZSByZWdpc3RlcnMgYWxsb2NhdGVkIGluIHRoZSB0b3AgaGFsZi4gKi8KK3N0YXRpYyBrbWVtX2NhY2hlX3QgKnRvcF9oYWxmX3JlZ19jYWNoZTsKKworLyogQ2FjaGUgZm9yIHRoZSBkYXRhIGFsbG9jYXRlZCBpbiB0aGUgaXNvYyBkZXNjciB0b3AgaGFsZi4gKi8KK3N0YXRpYyBrbWVtX2NhY2hlX3QgKmlzb2NfY29tcGxfY2FjaGU7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2J1cyAqZXRyYXhfdXNiX2J1czsKKworLyogVGhpcyBpcyBhIGNpcmN1bGFyIChkb3VibGUtbGlua2VkKSBsaXN0IG9mIHRoZSBhY3RpdmUgdXJicyBmb3IgZWFjaCBlcGlkLgorICAgVGhlIGhlYWQgaXMgbmV2ZXIgcmVtb3ZlZCwgYW5kIG5ldyB1cmJzIGFyZSBsaW5rZWQgb250byB0aGUgbGlzdCBhcworICAgdXJiX2VudHJ5X3QgZWxlbWVudHMuIERvbid0IHJlZmVyZW5jZSB1cmJfbGlzdCBkaXJlY3RseTsgdXNlIHRoZSB3cmFwcGVyCisgICBmdW5jdGlvbnMgaW5zdGVhZC4gTm90ZSB0aGF0IHdvcmtpbmcgd2l0aCB0aGVzZSBsaXN0cyBtaWdodCByZXF1aXJlIHNwaW5sb2NrCisgICBwcm90ZWN0aW9uLiAqLworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgdXJiX2xpc3RbTkJSX09GX0VQSURTXTsKKworLyogUmVhZCBhYm91dCB0aGUgbmVlZCBhbmQgdXNhZ2Ugb2YgdGhpcyBsb2NrIGluIHN1Ym1pdF9jdHJsX3VyYi4gKi8KK3N0YXRpYyBzcGlubG9ja190IHVyYl9saXN0X2xvY2s7CisKKy8qIFVzZWQgd2hlbiB1bmxpbmtpbmcgYXN5bmNocm9ub3VzbHkuICovCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCB1cmJfdW5saW5rX2xpc3Q7CisKKy8qIGZvciByZXR1cm5pbmcgc3RyaW5nIGRlc2NyaXB0b3JzIGluIFVURi0xNkxFICovCitzdGF0aWMgaW50IGFzY2lpMnV0ZiAoY2hhciAqYXNjaWksIF9fdTggKnV0ZiwgaW50IHV0Zm1heCkKK3sKKwlpbnQgcmV0dmFsOworCisJZm9yIChyZXR2YWwgPSAwOyAqYXNjaWkgJiYgdXRmbWF4ID4gMTsgdXRmbWF4IC09IDIsIHJldHZhbCArPSAyKSB7CisJCSp1dGYrKyA9ICphc2NpaSsrICYgMHg3ZjsKKwkJKnV0ZisrID0gMDsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCB1c2Jfcm9vdF9odWJfc3RyaW5nIChpbnQgaWQsIGludCBzZXJpYWwsIGNoYXIgKnR5cGUsIF9fdTggKmRhdGEsIGludCBsZW4pCit7CisJY2hhciBidWYgWzMwXTsKKworCS8vIGFzc2VydCAobGVuID4gKDIgKiAoc2l6ZW9mIChidWYpICsgMSkpKTsKKwkvLyBhc3NlcnQgKHN0cmxlbiAodHlwZSkgPD0gOCk7CisKKwkvLyBsYW5ndWFnZSBpZHMKKwlpZiAoaWQgPT0gMCkgeworCQkqZGF0YSsrID0gNDsgKmRhdGErKyA9IDM7CS8qIDQgYnl0ZXMgZGF0YSAqLworCQkqZGF0YSsrID0gMDsgKmRhdGErKyA9IDA7CS8qIHNvbWUgbGFuZ3VhZ2UgaWQgKi8KKwkJcmV0dXJuIDQ7CisKKwkvLyBzZXJpYWwgbnVtYmVyCisJfSBlbHNlIGlmIChpZCA9PSAxKSB7CisJCXNwcmludGYgKGJ1ZiwgIiV4Iiwgc2VyaWFsKTsKKworCS8vIHByb2R1Y3QgZGVzY3JpcHRpb24KKwl9IGVsc2UgaWYgKGlkID09IDIpIHsKKwkJc3ByaW50ZiAoYnVmLCAiVVNCICVzIFJvb3QgSHViIiwgdHlwZSk7CisKKwkvLyBpZCAzID09IHZlbmRvciBkZXNjcmlwdGlvbgorCisJLy8gdW5zdXBwb3J0ZWQgSURzIC0tPiAic3RhbGwiCisJfSBlbHNlCisJICAgIHJldHVybiAwOworCisJZGF0YSBbMF0gPSAyICsgYXNjaWkydXRmIChidWYsIGRhdGEgKyAyLCBsZW4gLSAyKTsKKwlkYXRhIFsxXSA9IDM7CisJcmV0dXJuIGRhdGEgWzBdOworfQorCisvKiBXcmFwcGVycyBhcm91bmQgdGhlIGxpc3QgZnVuY3Rpb25zIChpbmNsdWRlL2xpbnV4L2xpc3QuaCkuICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHVyYl9saXN0X2VtcHR5KGludCBlcGlkKQoreworCXJldHVybiBsaXN0X2VtcHR5KCZ1cmJfbGlzdFtlcGlkXSk7Cit9CisKKy8qIFJldHVybnMgZmlyc3QgdXJiIGZvciB0aGlzIGVwaWQsIG9yIE5VTEwgaWYgbGlzdCBpcyBlbXB0eS4gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVyYiAqdXJiX2xpc3RfZmlyc3QoaW50IGVwaWQpCit7CisJc3RydWN0IHVyYiAqZmlyc3RfdXJiID0gMDsKKworCWlmICghdXJiX2xpc3RfZW1wdHkoZXBpZCkpIHsKKwkJLyogR2V0IHRoZSBmaXJzdCB1cmIgKGkuZS4gaGVhZC0+bmV4dCkuICovCisJCXVyYl9lbnRyeV90ICp1cmJfZW50cnkgPSBsaXN0X2VudHJ5KCgmdXJiX2xpc3RbZXBpZF0pLT5uZXh0LCB1cmJfZW50cnlfdCwgbGlzdCk7CisJCWZpcnN0X3VyYiA9IHVyYl9lbnRyeS0+dXJiOworCX0KKwlyZXR1cm4gZmlyc3RfdXJiOworfQorCisvKiBBZGRzIGFuIHVyYl9lbnRyeSBsYXN0IGluIHRoZSBsaXN0IGZvciB0aGlzIGVwaWQuICovCitzdGF0aWMgaW5saW5lIHZvaWQgdXJiX2xpc3RfYWRkKHN0cnVjdCB1cmIgKnVyYiwgaW50IGVwaWQpCit7CisJdXJiX2VudHJ5X3QgKnVyYl9lbnRyeSA9ICh1cmJfZW50cnlfdCAqKWttYWxsb2Moc2l6ZW9mKHVyYl9lbnRyeV90KSwgS01BTExPQ19GTEFHKTsKKwlhc3NlcnQodXJiX2VudHJ5KTsKKworCXVyYl9lbnRyeS0+dXJiID0gdXJiOworCWxpc3RfYWRkX3RhaWwoJnVyYl9lbnRyeS0+bGlzdCwgJnVyYl9saXN0W2VwaWRdKTsKK30KKworLyogU2VhcmNoIHRocm91Z2ggdGhlIGxpc3QgZm9yIGFuIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGlzIHVyYi4gKFRoZSBsaXN0CisgICBpcyBleHBlY3RlZCB0byBiZSBzaG9ydCBhbmQgdGhlIG9uZSB3ZSBhcmUgYWJvdXQgdG8gZGVsZXRlIHdpbGwgb2Z0ZW4gYmUKKyAgIHRoZSBmaXJzdCBpbiB0aGUgbGlzdC4pICovCitzdGF0aWMgaW5saW5lIHVyYl9lbnRyeV90ICpfX3VyYl9saXN0X2VudHJ5KHN0cnVjdCB1cmIgKnVyYiwgaW50IGVwaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCXVyYl9lbnRyeV90ICp1cmJfZW50cnk7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIHRtcCwgJnVyYl9saXN0W2VwaWRdKSB7CisJCXVyYl9lbnRyeSA9IGxpc3RfZW50cnkoZW50cnksIHVyYl9lbnRyeV90LCBsaXN0KTsKKwkJYXNzZXJ0KHVyYl9lbnRyeSk7CisJCWFzc2VydCh1cmJfZW50cnktPnVyYik7CisKKwkJaWYgKHVyYl9lbnRyeS0+dXJiID09IHVyYikgeworCQkJcmV0dXJuIHVyYl9lbnRyeTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyogRGVsZXRlIGFuIHVyYiBmcm9tIHRoZSBsaXN0LiAqLworc3RhdGljIGlubGluZSB2b2lkIHVyYl9saXN0X2RlbChzdHJ1Y3QgdXJiICp1cmIsIGludCBlcGlkKQoreworCXVyYl9lbnRyeV90ICp1cmJfZW50cnkgPSBfX3VyYl9saXN0X2VudHJ5KHVyYiwgZXBpZCk7CisJYXNzZXJ0KHVyYl9lbnRyeSk7CisKKwkvKiBEZWxldGUgZW50cnkgYW5kIGZyZWUuICovCisJbGlzdF9kZWwoJnVyYl9lbnRyeS0+bGlzdCk7CisJa2ZyZWUodXJiX2VudHJ5KTsKK30KKworLyogTW92ZSBhbiB1cmIgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1cmJfbGlzdF9tb3ZlX2xhc3Qoc3RydWN0IHVyYiAqdXJiLCBpbnQgZXBpZCkKK3sKKwl1cmJfZW50cnlfdCAqdXJiX2VudHJ5ID0gX191cmJfbGlzdF9lbnRyeSh1cmIsIGVwaWQpOworCWFzc2VydCh1cmJfZW50cnkpOworCisJbGlzdF9kZWwoJnVyYl9lbnRyeS0+bGlzdCk7CisJbGlzdF9hZGRfdGFpbCgmdXJiX2VudHJ5LT5saXN0LCAmdXJiX2xpc3RbZXBpZF0pOworfQorCisvKiBHZXQgdGhlIG5leHQgdXJiIGluIHRoZSBsaXN0LiAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdXJiICp1cmJfbGlzdF9uZXh0KHN0cnVjdCB1cmIgKnVyYiwgaW50IGVwaWQpCit7CisJdXJiX2VudHJ5X3QgKnVyYl9lbnRyeSA9IF9fdXJiX2xpc3RfZW50cnkodXJiLCBlcGlkKTsKKworCWFzc2VydCh1cmJfZW50cnkpOworCisJaWYgKHVyYl9lbnRyeS0+bGlzdC5uZXh0ICE9ICZ1cmJfbGlzdFtlcGlkXSkgeworCQlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtID0gdXJiX2VudHJ5LT5saXN0Lm5leHQ7CisJCXVyYl9lbnRyeSA9IGxpc3RfZW50cnkoZWxlbSwgdXJiX2VudHJ5X3QsIGxpc3QpOworCQlyZXR1cm4gdXJiX2VudHJ5LT51cmI7CisJfSBlbHNlIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCisKKworLyogRm9yIGRlYnVnIHB1cnBvc2VzIG9ubHkuICovCitzdGF0aWMgaW5saW5lIHZvaWQgdXJiX2xpc3RfZHVtcChpbnQgZXBpZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisJdXJiX2VudHJ5X3QgKnVyYl9lbnRyeTsKKwlpbnQgaSA9IDA7CisKKwlpbmZvKCJEdW1waW5nIHVyYiBsaXN0IGZvciBlcGlkICVkIiwgZXBpZCk7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIHRtcCwgJnVyYl9saXN0W2VwaWRdKSB7CisJCXVyYl9lbnRyeSA9IGxpc3RfZW50cnkoZW50cnksIHVyYl9lbnRyeV90LCBsaXN0KTsKKwkJaW5mbygiICAgZW50cnkgJWQsIHVyYiA9IDB4JWx4IiwgaSwgKHVuc2lnbmVkIGxvbmcpdXJiX2VudHJ5LT51cmIpOworCX0KK30KKworc3RhdGljIHZvaWQgaW5pdF9yeF9idWZmZXJzKHZvaWQpOworc3RhdGljIGludCBldHJheF9yaF91bmxpbmtfdXJiKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgdm9pZCBldHJheF9yaF9zZW5kX2lycShzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgZXRyYXhfcmhfaW5pdF9pbnRfdGltZXIoc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyB2b2lkIGV0cmF4X3JoX2ludF90aW1lcl9kbyh1bnNpZ25lZCBsb25nIHB0cik7CisKK3N0YXRpYyBpbnQgZXRyYXhfdXNiX3NldHVwX2VwaWQoc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyBpbnQgZXRyYXhfdXNiX2xvb2t1cF9lcGlkKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgaW50IGV0cmF4X3VzYl9hbGxvY2F0ZV9lcGlkKHZvaWQpOworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2ZyZWVfZXBpZChpbnQgZXBpZCk7CisKK3N0YXRpYyBpbnQgZXRyYXhfcmVtb3ZlX2Zyb21fc2JfbGlzdChzdHJ1Y3QgdXJiICp1cmIpOworCitzdGF0aWMgdm9pZCogZXRyYXhfdXNiX2J1ZmZlcl9hbGxvYyhzdHJ1Y3QgdXNiX2J1cyogYnVzLCBzaXplX3Qgc2l6ZSwgaW50IG1lbV9mbGFncywgZG1hX2FkZHJfdCAqZG1hKTsKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9idWZmZXJfZnJlZShzdHJ1Y3QgdXNiX2J1cyAqYnVzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqYWRkciwgZG1hX2FkZHJfdCBkbWEpOworCitzdGF0aWMgdm9pZCBldHJheF91c2JfYWRkX3RvX2J1bGtfc2JfbGlzdChzdHJ1Y3QgdXJiICp1cmIsIGludCBlcGlkKTsKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9hZGRfdG9fY3RybF9zYl9saXN0KHN0cnVjdCB1cmIgKnVyYiwgaW50IGVwaWQpOworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2FkZF90b19pbnRyX3NiX2xpc3Qoc3RydWN0IHVyYiAqdXJiLCBpbnQgZXBpZCk7CitzdGF0aWMgdm9pZCBldHJheF91c2JfYWRkX3RvX2lzb2Nfc2JfbGlzdChzdHJ1Y3QgdXJiICp1cmIsIGludCBlcGlkKTsKKworc3RhdGljIGludCBldHJheF91c2Jfc3VibWl0X2J1bGtfdXJiKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgaW50IGV0cmF4X3VzYl9zdWJtaXRfY3RybF91cmIoc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyBpbnQgZXRyYXhfdXNiX3N1Ym1pdF9pbnRyX3VyYihzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIGludCBldHJheF91c2Jfc3VibWl0X2lzb2NfdXJiKHN0cnVjdCB1cmIgKnVyYik7CisKK3N0YXRpYyBpbnQgZXRyYXhfdXNiX3N1Ym1pdF91cmIoc3RydWN0IHVyYiAqdXJiLCBpbnQgbWVtX2ZsYWdzKTsKK3N0YXRpYyBpbnQgZXRyYXhfdXNiX3VubGlua191cmIoc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKTsKK3N0YXRpYyBpbnQgZXRyYXhfdXNiX2dldF9mcmFtZV9udW1iZXIoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYpOworCitzdGF0aWMgaXJxcmV0dXJuX3QgZXRyYXhfdXNiX3R4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICp2aGMsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBldHJheF91c2JfcnhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnZoYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIGlycXJldHVybl90IGV0cmF4X3VzYl9oY19pbnRlcnJ1cHRfdG9wX2hhbGYoaW50IGlycSwgdm9pZCAqdmhjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBldHJheF91c2JfaGNfaW50ZXJydXB0X2JvdHRvbV9oYWxmKHZvaWQgKmRhdGEpOworCitzdGF0aWMgdm9pZCBldHJheF91c2JfaXNvY19kZXNjcl9pbnRlcnJ1cHRfYm90dG9tX2hhbGYodm9pZCAqZGF0YSk7CisKKworLyogVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgaW50ZXJydXB0IGhhbmRsZXJzIGZvciB0aGUgaG9zdCBjb250cm9sbGVyIGludGVycnVwdHMgd2UgdXNlLgorICAgVGhleSBhcmUgY2FsbGVkIGZyb20gZXRyYXhfdXNiX2hjX2ludGVycnVwdF9ib3R0b21faGFsZi4gKi8KK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9oY19pc29jX2VvZl9pbnRlcnJ1cHQodm9pZCk7CitzdGF0aWMgdm9pZCBldHJheF91c2JfaGNfYnVsa19lb3RfaW50ZXJydXB0KGludCB0aW1lcl9pbmR1Y2VkKTsKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9oY19lcGlkX2F0dG5faW50ZXJydXB0KHVzYl9pbnRlcnJ1cHRfcmVnaXN0ZXJzX3QgKnJlZyk7CitzdGF0aWMgdm9pZCBldHJheF91c2JfaGNfcG9ydF9zdGF0dXNfaW50ZXJydXB0KHVzYl9pbnRlcnJ1cHRfcmVnaXN0ZXJzX3QgKnJlZyk7CitzdGF0aWMgdm9pZCBldHJheF91c2JfaGNfY3RsX3N0YXR1c19pbnRlcnJ1cHQodXNiX2ludGVycnVwdF9yZWdpc3RlcnNfdCAqcmVnKTsKKworc3RhdGljIGludCBldHJheF9yaF9zdWJtaXRfdXJiIChzdHJ1Y3QgdXJiICp1cmIpOworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG5lZWRlZCBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgaW4gdGhlIHJ4IGludGVycnVwdCByb3V0aW5lLiAqLworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2NvbXBsZXRlX3VyYihzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpOworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2NvbXBsZXRlX2J1bGtfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cyk7CitzdGF0aWMgdm9pZCBldHJheF91c2JfY29tcGxldGVfY3RybF91cmIoc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKTsKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9jb21wbGV0ZV9pbnRyX3VyYihzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpOworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2NvbXBsZXRlX2lzb2NfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cyk7CisKK3N0YXRpYyBpbnQgZXRyYXhfdXNiX2hjX2luaXQodm9pZCk7CitzdGF0aWMgdm9pZCBldHJheF91c2JfaGNfY2xlYW51cCh2b2lkKTsKKworc3RhdGljIHN0cnVjdCB1c2Jfb3BlcmF0aW9ucyBldHJheF91c2JfZGV2aWNlX29wZXJhdGlvbnMgPQoreworCS5nZXRfZnJhbWVfbnVtYmVyID0gZXRyYXhfdXNiX2dldF9mcmFtZV9udW1iZXIsCisJLnN1Ym1pdF91cmIgPSBldHJheF91c2Jfc3VibWl0X3VyYiwKKwkudW5saW5rX3VyYiA9IGV0cmF4X3VzYl91bmxpbmtfdXJiLAorICAgICAgICAuYnVmZmVyX2FsbG9jID0gZXRyYXhfdXNiX2J1ZmZlcl9hbGxvYywKKyAgICAgICAgLmJ1ZmZlcl9mcmVlID0gZXRyYXhfdXNiX2J1ZmZlcl9mcmVlCit9OworCisvKiBOb3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbHdheXMgYXZhaWxhYmxlIGluIHRoZWlyICJfXyIgdmFyaWFudHMsIGZvciB1c2UgaW4KKyAgIGVycm9yIHNpdHVhdGlvbnMuIFRoZSAiX18iIG1pc3NpbmcgdmFyaWFudHMgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIFVTQl9ERUJVR19ERVNDLworICAgVVNCX0RFQlVHX1VSQiBtYWNyb3MuICovCitzdGF0aWMgdm9pZCBfX2R1bXBfdXJiKHN0cnVjdCB1cmIqIHB1cmIpCit7CisJcHJpbnRrKCJcbnVyYiAgICAgICAgICAgICAgICAgIDoweCUwOGx4XG4iLCAodW5zaWduZWQgbG9uZylwdXJiKTsKKwlwcmludGsoImRldiAgICAgICAgICAgICAgICAgICA6MHglMDhseFxuIiwgKHVuc2lnbmVkIGxvbmcpcHVyYi0+ZGV2KTsKKwlwcmludGsoInBpcGUgICAgICAgICAgICAgICAgICA6MHglMDh4XG4iLCBwdXJiLT5waXBlKTsKKwlwcmludGsoInN0YXR1cyAgICAgICAgICAgICAgICA6JWRcbiIsIHB1cmItPnN0YXR1cyk7CisJcHJpbnRrKCJ0cmFuc2Zlcl9mbGFncyAgICAgICAgOjB4JTA4eFxuIiwgcHVyYi0+dHJhbnNmZXJfZmxhZ3MpOworCXByaW50aygidHJhbnNmZXJfYnVmZmVyICAgICAgIDoweCUwOGx4XG4iLCAodW5zaWduZWQgbG9uZylwdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCXByaW50aygidHJhbnNmZXJfYnVmZmVyX2xlbmd0aDolZFxuIiwgcHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJcHJpbnRrKCJhY3R1YWxfbGVuZ3RoICAgICAgICAgOiVkXG4iLCBwdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwlwcmludGsoInNldHVwX3BhY2tldCAgICAgICAgICA6MHglMDhseFxuIiwgKHVuc2lnbmVkIGxvbmcpcHVyYi0+c2V0dXBfcGFja2V0KTsKKwlwcmludGsoInN0YXJ0X2ZyYW1lICAgICAgICAgICA6JWRcbiIsIHB1cmItPnN0YXJ0X2ZyYW1lKTsKKwlwcmludGsoIm51bWJlcl9vZl9wYWNrZXRzICAgICA6JWRcbiIsIHB1cmItPm51bWJlcl9vZl9wYWNrZXRzKTsKKwlwcmludGsoImludGVydmFsICAgICAgICAgICAgICA6JWRcbiIsIHB1cmItPmludGVydmFsKTsKKwlwcmludGsoImVycm9yX2NvdW50ICAgICAgICAgICA6JWRcbiIsIHB1cmItPmVycm9yX2NvdW50KTsKKwlwcmludGsoImNvbnRleHQgICAgICAgICAgICAgICA6MHglMDhseFxuIiwgKHVuc2lnbmVkIGxvbmcpcHVyYi0+Y29udGV4dCk7CisJcHJpbnRrKCJjb21wbGV0ZSAgICAgICAgICAgICAgOjB4JTA4bHhcblxuIiwgKHVuc2lnbmVkIGxvbmcpcHVyYi0+Y29tcGxldGUpOworfQorCitzdGF0aWMgdm9pZCBfX2R1bXBfaW5fZGVzYyh2b2xhdGlsZSBVU0JfSU5fRGVzY190ICppbikKK3sKKwlwcmludGsoIlxuVVNCX0lOX0Rlc2MgYXQgMHglMDhseFxuIiwgKHVuc2lnbmVkIGxvbmcpaW4pOworCXByaW50aygiICBzd19sZW4gIDogMHglMDR4ICglZClcbiIsIGluLT5zd19sZW4sIGluLT5zd19sZW4pOworCXByaW50aygiICBjb21tYW5kIDogMHglMDR4XG4iLCBpbi0+Y29tbWFuZCk7CisJcHJpbnRrKCIgIG5leHQgICAgOiAweCUwOGx4XG4iLCBpbi0+bmV4dCk7CisJcHJpbnRrKCIgIGJ1ZiAgICAgOiAweCUwOGx4XG4iLCBpbi0+YnVmKTsKKwlwcmludGsoIiAgaHdfbGVuICA6IDB4JTA0eCAoJWQpXG4iLCBpbi0+aHdfbGVuLCBpbi0+aHdfbGVuKTsKKwlwcmludGsoIiAgc3RhdHVzICA6IDB4JTA0eFxuXG4iLCBpbi0+c3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgX19kdW1wX3NiX2Rlc2Modm9sYXRpbGUgVVNCX1NCX0Rlc2NfdCAqc2IpCit7CisJY2hhciB0dCA9IChzYi0+Y29tbWFuZCAmIDB4MzApID4+IDQ7CisJY2hhciAqdHRfc3RyaW5nOworCisJc3dpdGNoICh0dCkgeworCWNhc2UgMDoKKwkJdHRfc3RyaW5nID0gInpvdXQiOworCQlicmVhazsKKwljYXNlIDE6CisJCXR0X3N0cmluZyA9ICJpbiI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdHRfc3RyaW5nID0gIm91dCI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJdHRfc3RyaW5nID0gInNldHVwIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdHRfc3RyaW5nID0gInVua25vd24gKHdlaXJkKSI7CisJfQorCisJcHJpbnRrKCJcbiAgIFVTQl9TQl9EZXNjIGF0IDB4JTA4bHhcbiIsICh1bnNpZ25lZCBsb25nKXNiKTsKKwlwcmludGsoIiAgICAgY29tbWFuZCA6IDB4JTA0eFxuIiwgc2ItPmNvbW1hbmQpOworCXByaW50aygiICAgICAgICByZW0gICAgIDogJWRcbiIsIChzYi0+Y29tbWFuZCAmIDB4M2YwMCkgPj4gOCk7CisJcHJpbnRrKCIgICAgICAgIGZ1bGwgICAgOiAlZFxuIiwgKHNiLT5jb21tYW5kICYgMHg0MCkgPj4gNik7CisJcHJpbnRrKCIgICAgICAgIHR0ICAgICAgOiAlZCAoJXMpXG4iLCB0dCwgdHRfc3RyaW5nKTsKKwlwcmludGsoIiAgICAgICAgaW50ciAgICA6ICVkXG4iLCAoc2ItPmNvbW1hbmQgJiAweDgpID4+IDMpOworCXByaW50aygiICAgICAgICBlb3QgICAgIDogJWRcbiIsIChzYi0+Y29tbWFuZCAmIDB4MikgPj4gMSk7CisJcHJpbnRrKCIgICAgICAgIGVvbCAgICAgOiAlZFxuIiwgc2ItPmNvbW1hbmQgJiAweDEpOworCXByaW50aygiICAgICBzd19sZW4gIDogMHglMDR4ICglZClcbiIsIHNiLT5zd19sZW4sIHNiLT5zd19sZW4pOworCXByaW50aygiICAgICBuZXh0ICAgIDogMHglMDhseFxuIiwgc2ItPm5leHQpOworCXByaW50aygiICAgICBidWYgICAgIDogMHglMDhseFxuXG4iLCBzYi0+YnVmKTsKK30KKworCitzdGF0aWMgdm9pZCBfX2R1bXBfZXBfZGVzYyh2b2xhdGlsZSBVU0JfRVBfRGVzY190ICplcCkKK3sKKwlwcmludGsoIlxuVVNCX0VQX0Rlc2MgYXQgMHglMDhseFxuIiwgKHVuc2lnbmVkIGxvbmcpZXApOworCXByaW50aygiICBjb21tYW5kIDogMHglMDR4XG4iLCBlcC0+Y29tbWFuZCk7CisJcHJpbnRrKCIgICAgIGVwX2lkICAgOiAlZFxuIiwgKGVwLT5jb21tYW5kICYgMHgxZjAwKSA+PiA4KTsKKwlwcmludGsoIiAgICAgZW5hYmxlICA6ICVkXG4iLCAoZXAtPmNvbW1hbmQgJiAweDEwKSA+PiA0KTsKKwlwcmludGsoIiAgICAgaW50ciAgICA6ICVkXG4iLCAoZXAtPmNvbW1hbmQgJiAweDgpID4+IDMpOworCXByaW50aygiICAgICBlb2YgICAgIDogJWRcbiIsIChlcC0+Y29tbWFuZCAmIDB4MikgPj4gMSk7CisJcHJpbnRrKCIgICAgIGVvbCAgICAgOiAlZFxuIiwgZXAtPmNvbW1hbmQgJiAweDEpOworCXByaW50aygiICBod19sZW4gIDogMHglMDR4ICglZClcbiIsIGVwLT5od19sZW4sIGVwLT5od19sZW4pOworCXByaW50aygiICBuZXh0ICAgIDogMHglMDhseFxuIiwgZXAtPm5leHQpOworCXByaW50aygiICBzdWIgICAgIDogMHglMDhseFxuXG4iLCBlcC0+c3ViKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZHVtcF9lcF9saXN0KGludCBwaXBlX3R5cGUpCit7CisJdm9sYXRpbGUgVVNCX0VQX0Rlc2NfdCAqZXA7CisJdm9sYXRpbGUgVVNCX0VQX0Rlc2NfdCAqZmlyc3RfZXA7CisJdm9sYXRpbGUgVVNCX1NCX0Rlc2NfdCAqc2I7CisKKwlzd2l0Y2ggKHBpcGVfdHlwZSkKKwl7CisJY2FzZSBQSVBFX0JVTEs6CisJCWZpcnN0X2VwID0gJlR4QnVsa0VQTGlzdFswXTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0NPTlRST0w6CisJCWZpcnN0X2VwID0gJlR4Q3RybEVQTGlzdFswXTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJZmlyc3RfZXAgPSAmVHhJbnRyRVBMaXN0WzBdOworCQlicmVhazsKKwljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJCWZpcnN0X2VwID0gJlR4SXNvY0VQTGlzdFswXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJd2FybigiQ2Fubm90IGR1bXAgdW5rbm93biB0cmFmZmljIHR5cGUiKTsKKwkJcmV0dXJuOworCX0KKwllcCA9IGZpcnN0X2VwOworCisJcHJpbnRrKCJcblxuRHVtcGluZyBFUCBsaXN0Li4uXG5cbiIpOworCisJZG8geworCQlfX2R1bXBfZXBfZGVzYyhlcCk7CisJCS8qIENhbm5vdCBwaHlzX3RvX3ZpcnQgb24gMCBhcyBpdCB0dXJucyBpbnRvIDgwMDAwMDAwLCB3aGljaCBpcyAhPSAwLiAqLworCQlzYiA9IGVwLT5zdWIgPyBwaHlzX3RvX3ZpcnQoZXAtPnN1YikgOiAwOworCQl3aGlsZSAoc2IpIHsKKwkJCV9fZHVtcF9zYl9kZXNjKHNiKTsKKwkJCXNiID0gc2ItPm5leHQgPyBwaHlzX3RvX3ZpcnQoc2ItPm5leHQpIDogMDsKKwkJfQorCQllcCA9ICh2b2xhdGlsZSBVU0JfRVBfRGVzY190ICopKHBoeXNfdG9fdmlydChlcC0+bmV4dCkpOworCisJfSB3aGlsZSAoZXAgIT0gZmlyc3RfZXApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19kdW1wX2VwdF9kYXRhKGludCBlcGlkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJX191MzIgcl91c2JfZXB0X2RhdGE7CisKKwlpZiAoZXBpZCA8IDAgfHwgZXBpZCA+IDMxKSB7CisJCXByaW50aygiQ2Fubm90IGR1bXAgZXB0IGRhdGEgZm9yIGludmFsaWQgZXBpZCAlZFxuIiwgZXBpZCk7CisJCXJldHVybjsKKwl9CisKKwlzYXZlX2ZsYWdzKGZsYWdzKTsKKwljbGkoKTsKKwkqUl9VU0JfRVBUX0lOREVYID0gSU9fRklFTEQoUl9VU0JfRVBUX0lOREVYLCB2YWx1ZSwgZXBpZCk7CisJbm9wKCk7CisJcl91c2JfZXB0X2RhdGEgPSAqUl9VU0JfRVBUX0RBVEE7CisJcmVzdG9yZV9mbGFncyhmbGFncyk7CisKKwlwcmludGsoIlxuUl9VU0JfRVBUX0RBVEEgPSAweCV4IGZvciBlcGlkICVkIDpcbiIsIHJfdXNiX2VwdF9kYXRhLCBlcGlkKTsKKwlpZiAocl91c2JfZXB0X2RhdGEgPT0gMCkgeworCQkvKiBObyBuZWVkIGZvciBtb3JlIGRldGFpbGVkIHByaW50aW5nLiAqLworCQlyZXR1cm47CisJfQorCXByaW50aygiICB2YWxpZCAgICAgICAgICAgOiAlZFxuIiwgKHJfdXNiX2VwdF9kYXRhICYgMHg4MDAwMDAwMCkgPj4gMzEpOworCXByaW50aygiICBob2xkICAgICAgICAgICAgOiAlZFxuIiwgKHJfdXNiX2VwdF9kYXRhICYgMHg0MDAwMDAwMCkgPj4gMzApOworCXByaW50aygiICBlcnJvcl9jb3VudF9pbiAgOiAlZFxuIiwgKHJfdXNiX2VwdF9kYXRhICYgMHgzMDAwMDAwMCkgPj4gMjgpOworCXByaW50aygiICB0X2luICAgICAgICAgICAgOiAlZFxuIiwgKHJfdXNiX2VwdF9kYXRhICYgMHgwODAwMDAwMCkgPj4gMjcpOworCXByaW50aygiICBsb3dfc3BlZWQgICAgICAgOiAlZFxuIiwgKHJfdXNiX2VwdF9kYXRhICYgMHgwNDAwMDAwMCkgPj4gMjYpOworCXByaW50aygiICBwb3J0ICAgICAgICAgICAgOiAlZFxuIiwgKHJfdXNiX2VwdF9kYXRhICYgMHgwMzAwMDAwMCkgPj4gMjQpOworCXByaW50aygiICBlcnJvcl9jb2RlICAgICAgOiAlZFxuIiwgKHJfdXNiX2VwdF9kYXRhICYgMHgwMGMwMDAwMCkgPj4gMjIpOworCXByaW50aygiICB0X291dCAgICAgICAgICAgOiAlZFxuIiwgKHJfdXNiX2VwdF9kYXRhICYgMHgwMDIwMDAwMCkgPj4gMjEpOworCXByaW50aygiICBlcnJvcl9jb3VudF9vdXQgOiAlZFxuIiwgKHJfdXNiX2VwdF9kYXRhICYgMHgwMDE4MDAwMCkgPj4gMTkpOworCXByaW50aygiICBtYXhfbGVuICAgICAgICAgOiAlZFxuIiwgKHJfdXNiX2VwdF9kYXRhICYgMHgwMDAzZjgwMCkgPj4gMTEpOworCXByaW50aygiICBlcCAgICAgICAgICAgICAgOiAlZFxuIiwgKHJfdXNiX2VwdF9kYXRhICYgMHgwMDAwMDc4MCkgPj4gNyk7CisJcHJpbnRrKCIgIGRldiAgICAgICAgICAgICA6ICVkXG4iLCAocl91c2JfZXB0X2RhdGEgJiAweDAwMDAwMDNmKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2R1bXBfZXB0X2RhdGFfbGlzdCh2b2lkKQoreworCWludCBpOworCisJcHJpbnRrKCJEdW1waW5nIHRoZSB3aG9sZSBSX1VTQl9FUFRfREFUQSBsaXN0XG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCV9fZHVtcF9lcHRfZGF0YShpKTsKKwl9Cit9CisjaWZkZWYgVVNCX0RFQlVHX0RFU0MKKyNkZWZpbmUgZHVtcF9pbl9kZXNjKC4uLikgX19kdW1wX2luX2Rlc2MoLi4uKQorI2RlZmluZSBkdW1wX3NiX2Rlc2MoLi4uKSBfX2R1bXBfc2JfZGVzYyguLi4pCisjZGVmaW5lIGR1bXBfZXBfZGVzYyguLi4pIF9fZHVtcF9lcF9kZXNjKC4uLikKKyNlbHNlCisjZGVmaW5lIGR1bXBfaW5fZGVzYyguLi4pIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBkdW1wX3NiX2Rlc2MoLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgZHVtcF9lcF9kZXNjKC4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworI2lmZGVmIFVTQl9ERUJVR19VUkIKKyNkZWZpbmUgZHVtcF91cmIoeCkgICAgIF9fZHVtcF91cmIoeCkKKyNlbHNlCisjZGVmaW5lIGR1bXBfdXJiKHgpICAgICBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBpbml0X3J4X2J1ZmZlcnModm9pZCkKK3sKKwlpbnQgaTsKKworCURCRkVOVEVSOworCisJZm9yIChpID0gMDsgaSA8IChOQlJfT0ZfUlhfREVTQyAtIDEpOyBpKyspIHsKKwkJUnhEZXNjTGlzdFtpXS5zd19sZW4gPSBSWF9ERVNDX0JVRl9TSVpFOworCQlSeERlc2NMaXN0W2ldLmNvbW1hbmQgPSAwOworCQlSeERlc2NMaXN0W2ldLm5leHQgPSB2aXJ0X3RvX3BoeXMoJlJ4RGVzY0xpc3RbaSArIDFdKTsKKwkJUnhEZXNjTGlzdFtpXS5idWYgPSB2aXJ0X3RvX3BoeXMoUnhCdWYgKyAoaSAqIFJYX0RFU0NfQlVGX1NJWkUpKTsKKwkJUnhEZXNjTGlzdFtpXS5od19sZW4gPSAwOworCQlSeERlc2NMaXN0W2ldLnN0YXR1cyA9IDA7CisKKwkJLyogRE1BIElOIGNhY2hlIGJ1Zy4gKHN0cnVjdCBldHJheF9kbWFfZGVzY3IgaGFzIHRoZSBzYW1lIGxheW91dCBhcyBVU0JfSU5fRGVzYworCQkgICBmb3IgdGhlIHJlbGV2YW50IGZpZWxkcy4pICovCisJCXByZXBhcmVfcnhfZGVzY3JpcHRvcigoc3RydWN0IGV0cmF4X2RtYV9kZXNjciopJlJ4RGVzY0xpc3RbaV0pOworCisJfQorCisJUnhEZXNjTGlzdFtpXS5zd19sZW4gPSBSWF9ERVNDX0JVRl9TSVpFOworCVJ4RGVzY0xpc3RbaV0uY29tbWFuZCA9IElPX1NUQVRFKFVTQl9JTl9jb21tYW5kLCBlb2wsIHllcyk7CisJUnhEZXNjTGlzdFtpXS5uZXh0ID0gdmlydF90b19waHlzKCZSeERlc2NMaXN0WzBdKTsKKwlSeERlc2NMaXN0W2ldLmJ1ZiA9IHZpcnRfdG9fcGh5cyhSeEJ1ZiArIChpICogUlhfREVTQ19CVUZfU0laRSkpOworCVJ4RGVzY0xpc3RbaV0uaHdfbGVuID0gMDsKKwlSeERlc2NMaXN0W2ldLnN0YXR1cyA9IDA7CisKKwlteU5leHRSeERlc2MgPSAmUnhEZXNjTGlzdFswXTsKKwlteUxhc3RSeERlc2MgPSAmUnhEZXNjTGlzdFtOQlJfT0ZfUlhfREVTQyAtIDFdOworCW15UHJldlJ4RGVzYyA9ICZSeERlc2NMaXN0W05CUl9PRl9SWF9ERVNDIC0gMV07CisKKwkqUl9ETUFfQ0g5X0ZJUlNUID0gdmlydF90b19waHlzKG15TmV4dFJ4RGVzYyk7CisJKlJfRE1BX0NIOV9DTUQgPSBJT19TVEFURShSX0RNQV9DSDlfQ01ELCBjbWQsIHN0YXJ0KTsKKworCURCRkVYSVQ7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfdHhfYnVsa19lcCh2b2lkKQoreworCWludCBpOworCisJREJGRU5URVI7CisKKwlmb3IgKGkgPSAwOyBpIDwgKE5CUl9PRl9FUElEUyAtIDEpOyBpKyspIHsKKwkJQ0hFQ0tfQUxJR04oJlR4QnVsa0VQTGlzdFtpXSk7CisJCVR4QnVsa0VQTGlzdFtpXS5od19sZW4gPSAwOworCQlUeEJ1bGtFUExpc3RbaV0uY29tbWFuZCA9IElPX0ZJRUxEKFVTQl9FUF9jb21tYW5kLCBlcGlkLCBpKTsKKwkJVHhCdWxrRVBMaXN0W2ldLnN1YiA9IDA7CisJCVR4QnVsa0VQTGlzdFtpXS5uZXh0ID0gdmlydF90b19waHlzKCZUeEJ1bGtFUExpc3RbaSArIDFdKTsKKworCQkvKiBJbml0aWF0ZSB0d28gRVBzLCBkaXNhYmxlZCBhbmQgd2l0aCB0aGUgZW9sIGZsYWcgc2V0LiBObyBuZWVkIGZvciBhbnkKKwkJICAgcHJlc2VydmVkIGVwaWQuICovCisKKwkJLyogVGhlIGZpcnN0IG9uZSBoYXMgdGhlIGludHIgZmxhZyBzZXQgc28gd2UgZ2V0IGFuIGludGVycnVwdCB3aGVuIHRoZSBETUEKKwkJICAgY2hhbm5lbCBpcyBhYm91dCB0byBiZWNvbWUgZGlzYWJsZWQuICovCisJCUNIRUNLX0FMSUdOKCZUeEJ1bGtEdW1teUVQTGlzdFtpXVswXSk7CisJCVR4QnVsa0R1bW15RVBMaXN0W2ldWzBdLmh3X2xlbiA9IDA7CisJCVR4QnVsa0R1bW15RVBMaXN0W2ldWzBdLmNvbW1hbmQgPSAoSU9fRklFTEQoVVNCX0VQX2NvbW1hbmQsIGVwaWQsIERVTU1ZX0VQSUQpIHwKKwkJCQkJCSAgIElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlb2wsIHllcykgfAorCQkJCQkJICAgSU9fU1RBVEUoVVNCX0VQX2NvbW1hbmQsIGludHIsIHllcykpOworCQlUeEJ1bGtEdW1teUVQTGlzdFtpXVswXS5zdWIgPSAwOworCQlUeEJ1bGtEdW1teUVQTGlzdFtpXVswXS5uZXh0ID0gdmlydF90b19waHlzKCZUeEJ1bGtEdW1teUVQTGlzdFtpXVsxXSk7CisKKwkJLyogVGhlIHNlY29uZCBvbmUuICovCisJCUNIRUNLX0FMSUdOKCZUeEJ1bGtEdW1teUVQTGlzdFtpXVsxXSk7CisJCVR4QnVsa0R1bW15RVBMaXN0W2ldWzFdLmh3X2xlbiA9IDA7CisJCVR4QnVsa0R1bW15RVBMaXN0W2ldWzFdLmNvbW1hbmQgPSAoSU9fRklFTEQoVVNCX0VQX2NvbW1hbmQsIGVwaWQsIERVTU1ZX0VQSUQpIHwKKwkJCQkJCSAgIElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlb2wsIHllcykpOworCQlUeEJ1bGtEdW1teUVQTGlzdFtpXVsxXS5zdWIgPSAwOworCQkvKiBUaGUgbGFzdCBkdW1teSdzIG5leHQgcG9pbnRlciBpcyB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBFUCdzIG5leHQgcG9pbnRlci4gKi8KKwkJVHhCdWxrRHVtbXlFUExpc3RbaV1bMV0ubmV4dCA9IHZpcnRfdG9fcGh5cygmVHhCdWxrRVBMaXN0W2kgKyAxXSk7CisJfQorCisJLyogQ29uZmlndXJlIHRoZSBsYXN0IG9uZS4gKi8KKwlDSEVDS19BTElHTigmVHhCdWxrRVBMaXN0W2ldKTsKKwlUeEJ1bGtFUExpc3RbaV0uaHdfbGVuID0gMDsKKwlUeEJ1bGtFUExpc3RbaV0uY29tbWFuZCA9IChJT19TVEFURShVU0JfRVBfY29tbWFuZCwgZW9sLCB5ZXMpIHwKKwkJCQkgICBJT19GSUVMRChVU0JfRVBfY29tbWFuZCwgZXBpZCwgaSkpOworCVR4QnVsa0VQTGlzdFtpXS5zdWIgPSAwOworCVR4QnVsa0VQTGlzdFtpXS5uZXh0ID0gdmlydF90b19waHlzKCZUeEJ1bGtFUExpc3RbMF0pOworCisJLyogTm8gbmVlZCBjb25maWd1cmluZyBkdW1teSBFUHMgZm9yIHRoZSBsYXN0IG9uZSBhcyBpdCB3aWxsIG5ldmVyIGJlIHVzZWQgZm9yCisJICAgYnVsayB0cmFmZmljIChpID09IElOVkFMRF9FUElEIGF0IHRoaXMgcG9pbnQpLiAqLworCisJLyogU2V0IHVwIHRvIHN0YXJ0IG9uIHRoZSBsYXN0IEVQIHNvIHdlIHdpbGwgZW5hYmxlIGl0IHdoZW4gaW5zZXJ0aW5nIHRyYWZmaWMKKwkgICBmb3IgdGhlIGZpcnN0IHRpbWUgKGltaXRhdGluZyB0aGUgc2l0dWF0aW9uIHdoZXJlIHRoZSBETUEgaGFzIHN0b3BwZWQKKwkgICBiZWNhdXNlIHRoZXJlIHdhcyBubyBtb3JlIHRyYWZmaWMpLiAqLworCSpSX0RNQV9DSDhfU1VCMF9FUCA9IHZpcnRfdG9fcGh5cygmVHhCdWxrRVBMaXN0W2ldKTsKKwkvKiBObyBwb2ludCBpbiBzdGFydGluZyB0aGUgYnVsayBjaGFubmVsIHlldC4KKwkgKlJfRE1BX0NIOF9TVUIwX0NNRCA9IElPX1NUQVRFKFJfRE1BX0NIOF9TVUIwX0NNRCwgY21kLCBzdGFydCk7ICovCisJREJGRVhJVDsKK30KKworc3RhdGljIHZvaWQgaW5pdF90eF9jdHJsX2VwKHZvaWQpCit7CisJaW50IGk7CisKKwlEQkZFTlRFUjsKKworCWZvciAoaSA9IDA7IGkgPCAoTkJSX09GX0VQSURTIC0gMSk7IGkrKykgeworCQlDSEVDS19BTElHTigmVHhDdHJsRVBMaXN0W2ldKTsKKwkJVHhDdHJsRVBMaXN0W2ldLmh3X2xlbiA9IDA7CisJCVR4Q3RybEVQTGlzdFtpXS5jb21tYW5kID0gSU9fRklFTEQoVVNCX0VQX2NvbW1hbmQsIGVwaWQsIGkpOworCQlUeEN0cmxFUExpc3RbaV0uc3ViID0gMDsKKwkJVHhDdHJsRVBMaXN0W2ldLm5leHQgPSB2aXJ0X3RvX3BoeXMoJlR4Q3RybEVQTGlzdFtpICsgMV0pOworCX0KKworCUNIRUNLX0FMSUdOKCZUeEN0cmxFUExpc3RbaV0pOworCVR4Q3RybEVQTGlzdFtpXS5od19sZW4gPSAwOworCVR4Q3RybEVQTGlzdFtpXS5jb21tYW5kID0gKElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlb2wsIHllcykgfAorCQkJCSAgIElPX0ZJRUxEKFVTQl9FUF9jb21tYW5kLCBlcGlkLCBpKSk7CisKKwlUeEN0cmxFUExpc3RbaV0uc3ViID0gMDsKKwlUeEN0cmxFUExpc3RbaV0ubmV4dCA9IHZpcnRfdG9fcGh5cygmVHhDdHJsRVBMaXN0WzBdKTsKKworCSpSX0RNQV9DSDhfU1VCMV9FUCA9IHZpcnRfdG9fcGh5cygmVHhDdHJsRVBMaXN0WzBdKTsKKwkqUl9ETUFfQ0g4X1NVQjFfQ01EID0gSU9fU1RBVEUoUl9ETUFfQ0g4X1NVQjFfQ01ELCBjbWQsIHN0YXJ0KTsKKworCURCRkVYSVQ7Cit9CisKKworc3RhdGljIHZvaWQgaW5pdF90eF9pbnRyX2VwKHZvaWQpCit7CisJaW50IGk7CisKKwlEQkZFTlRFUjsKKworCS8qIFJlYWQgY29tbWVudCBhdCB6b3V0X2J1ZmZlciBkZWNsYXJhdGlvbiBmb3IgYW4gZXhwbGFuYXRpb24gdG8gdGhpcy4gKi8KKwlUeEludHJTQl96b3V0LnN3X2xlbiA9IDE7CisJVHhJbnRyU0Jfem91dC5uZXh0ID0gMDsKKwlUeEludHJTQl96b3V0LmJ1ZiA9IHZpcnRfdG9fcGh5cygmem91dF9idWZmZXJbMF0pOworCVR4SW50clNCX3pvdXQuY29tbWFuZCA9IChJT19GSUVMRChVU0JfU0JfY29tbWFuZCwgcmVtLCAwKSB8CisJCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCB0dCwgem91dCkgfAorCQkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZnVsbCwgeWVzKSB8CisJCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb3QsIHllcykgfAorCQkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW9sLCB5ZXMpKTsKKworCWZvciAoaSA9IDA7IGkgPCAoTUFYX0lOVFJfSU5URVJWQUwgLSAxKTsgaSsrKSB7CisJCUNIRUNLX0FMSUdOKCZUeEludHJFUExpc3RbaV0pOworCQlUeEludHJFUExpc3RbaV0uaHdfbGVuID0gMDsKKwkJVHhJbnRyRVBMaXN0W2ldLmNvbW1hbmQgPQorCQkJKElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlb2YsIHllcykgfAorCQkJIElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlbmFibGUsIHllcykgfAorCQkJIElPX0ZJRUxEKFVTQl9FUF9jb21tYW5kLCBlcGlkLCBJTlZBTElEX0VQSUQpKTsKKwkJVHhJbnRyRVBMaXN0W2ldLnN1YiA9IHZpcnRfdG9fcGh5cygmVHhJbnRyU0Jfem91dCk7CisJCVR4SW50ckVQTGlzdFtpXS5uZXh0ID0gdmlydF90b19waHlzKCZUeEludHJFUExpc3RbaSArIDFdKTsKKwl9CisKKwlDSEVDS19BTElHTigmVHhJbnRyRVBMaXN0W2ldKTsKKwlUeEludHJFUExpc3RbaV0uaHdfbGVuID0gMDsKKwlUeEludHJFUExpc3RbaV0uY29tbWFuZCA9CisJCShJT19TVEFURShVU0JfRVBfY29tbWFuZCwgZW9mLCB5ZXMpIHwKKwkJIElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlb2wsIHllcykgfAorCQkgSU9fU1RBVEUoVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSwgeWVzKSB8CisJCSBJT19GSUVMRChVU0JfRVBfY29tbWFuZCwgZXBpZCwgSU5WQUxJRF9FUElEKSk7CisJVHhJbnRyRVBMaXN0W2ldLnN1YiA9IHZpcnRfdG9fcGh5cygmVHhJbnRyU0Jfem91dCk7CisJVHhJbnRyRVBMaXN0W2ldLm5leHQgPSB2aXJ0X3RvX3BoeXMoJlR4SW50ckVQTGlzdFswXSk7CisKKwkqUl9ETUFfQ0g4X1NVQjJfRVAgPSB2aXJ0X3RvX3BoeXMoJlR4SW50ckVQTGlzdFswXSk7CisJKlJfRE1BX0NIOF9TVUIyX0NNRCA9IElPX1NUQVRFKFJfRE1BX0NIOF9TVUIyX0NNRCwgY21kLCBzdGFydCk7CisJREJGRVhJVDsKK30KKworc3RhdGljIHZvaWQgaW5pdF90eF9pc29jX2VwKHZvaWQpCit7CisJaW50IGk7CisKKwlEQkZFTlRFUjsKKworCS8qIFJlYWQgY29tbWVudCBhdCB6b3V0X2J1ZmZlciBkZWNsYXJhdGlvbiBmb3IgYW4gZXhwbGFuYXRpb24gdG8gdGhpcy4gKi8KKwlUeElzb2NTQl96b3V0LnN3X2xlbiA9IDE7CisJVHhJc29jU0Jfem91dC5uZXh0ID0gMDsKKwlUeElzb2NTQl96b3V0LmJ1ZiA9IHZpcnRfdG9fcGh5cygmem91dF9idWZmZXJbMF0pOworCVR4SXNvY1NCX3pvdXQuY29tbWFuZCA9IChJT19GSUVMRChVU0JfU0JfY29tbWFuZCwgcmVtLCAwKSB8CisJCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCB0dCwgem91dCkgfAorCQkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZnVsbCwgeWVzKSB8CisJCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb3QsIHllcykgfAorCQkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW9sLCB5ZXMpKTsKKworCS8qIFRoZSBsYXN0IGlzb2Nocm9ub3VzIEVQIGRlc2NyaXB0b3IgaXMgYSBkdW1teS4gKi8KKworCWZvciAoaSA9IDA7IGkgPCAoTkJSX09GX0VQSURTIC0gMSk7IGkrKykgeworCQlDSEVDS19BTElHTigmVHhJc29jRVBMaXN0W2ldKTsKKwkJVHhJc29jRVBMaXN0W2ldLmh3X2xlbiA9IDA7CisJCVR4SXNvY0VQTGlzdFtpXS5jb21tYW5kID0gSU9fRklFTEQoVVNCX0VQX2NvbW1hbmQsIGVwaWQsIGkpOworCQlUeElzb2NFUExpc3RbaV0uc3ViID0gMDsKKwkJVHhJc29jRVBMaXN0W2ldLm5leHQgPSB2aXJ0X3RvX3BoeXMoJlR4SXNvY0VQTGlzdFtpICsgMV0pOworCX0KKworCUNIRUNLX0FMSUdOKCZUeElzb2NFUExpc3RbaV0pOworCVR4SXNvY0VQTGlzdFtpXS5od19sZW4gPSAwOworCisJLyogTXVzdCBlbmFibGUgdGhlIGxhc3QgRVAgZGVzY3IgdG8gZ2V0IGVvZiBpbnRlcnJ1cHQuICovCisJVHhJc29jRVBMaXN0W2ldLmNvbW1hbmQgPSAoSU9fU1RBVEUoVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSwgeWVzKSB8CisJCQkJICAgSU9fU1RBVEUoVVNCX0VQX2NvbW1hbmQsIGVvZiwgeWVzKSB8CisJCQkJICAgSU9fU1RBVEUoVVNCX0VQX2NvbW1hbmQsIGVvbCwgeWVzKSB8CisJCQkJICAgSU9fRklFTEQoVVNCX0VQX2NvbW1hbmQsIGVwaWQsIElOVkFMSURfRVBJRCkpOworCVR4SXNvY0VQTGlzdFtpXS5zdWIgPSB2aXJ0X3RvX3BoeXMoJlR4SXNvY1NCX3pvdXQpOworCVR4SXNvY0VQTGlzdFtpXS5uZXh0ID0gdmlydF90b19waHlzKCZUeElzb2NFUExpc3RbMF0pOworCisJKlJfRE1BX0NIOF9TVUIzX0VQID0gdmlydF90b19waHlzKCZUeElzb2NFUExpc3RbMF0pOworCSpSX0RNQV9DSDhfU1VCM19DTUQgPSBJT19TVEFURShSX0RNQV9DSDhfU1VCM19DTUQsIGNtZCwgc3RhcnQpOworCisJREJGRVhJVDsKK30KKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX3VubGlua19pbnRyX3VyYihzdHJ1Y3QgdXJiICp1cmIpCit7CisJdm9sYXRpbGUgVVNCX0VQX0Rlc2NfdCAqZmlyc3RfZXA7ICAvKiBGaXJzdCBFUCBpbiB0aGUgbGlzdC4gKi8KKwl2b2xhdGlsZSBVU0JfRVBfRGVzY190ICpjdXJyX2VwOyAgIC8qIEN1cnJlbnQgRVAsIHRoZSBpdGVyYXRvci4gKi8KKwl2b2xhdGlsZSBVU0JfRVBfRGVzY190ICpuZXh0X2VwOyAgIC8qIFRoZSBFUCBhZnRlciBjdXJyZW50LiAqLworCXZvbGF0aWxlIFVTQl9FUF9EZXNjX3QgKnVubGlua19lcDsgLyogVGhlIG9uZSB3ZSBzaG91bGQgcmVtb3ZlIGZyb20gdGhlIGxpc3QuICovCisKKwlpbnQgZXBpZDsKKworCS8qIFJlYWQgOC44LjQgaW4gRGVzaWduZXIncyBSZWZlcmVuY2UsICJSZW1vdmluZyBhbiBFUCBEZXNjcmlwdG9yIGZyb20gdGhlIExpc3QiLiAqLworCisJREJGRU5URVI7CisKKwllcGlkID0gKChldHJheF91cmJfcHJpdl90ICopdXJiLT5oY3ByaXYpLT5lcGlkOworCisJZmlyc3RfZXAgPSAmVHhJbnRyRVBMaXN0WzBdOworCWN1cnJfZXAgPSBmaXJzdF9lcDsKKworCisJLyogTm90ZSB0aGF0IHRoaXMgbG9vcCByZW1vdmVzIGFsbCBFUCBkZXNjcmlwdG9ycyB3aXRoIHRoaXMgZXBpZC4gVGhpcyBhc3N1bWVzCisJICAgdGhhdCBhbGwgRVAgZGVzY3JpcHRvcnMgYmVsb25nIHRvIHRoZSBvbmUgYW5kIG9ubHkgdXJiIGZvciB0aGlzIGVwaWQuICovCisKKwlkbyB7CisJCW5leHRfZXAgPSAoVVNCX0VQX0Rlc2NfdCAqKXBoeXNfdG9fdmlydChjdXJyX2VwLT5uZXh0KTsKKworCQlpZiAoSU9fRVhUUkFDVChVU0JfRVBfY29tbWFuZCwgZXBpZCwgbmV4dF9lcC0+Y29tbWFuZCkgPT0gZXBpZCkgeworCisJCQlkYmdfaW50cigiRm91bmQgRVAgdG8gdW5saW5rIGZvciBlcGlkICVkIiwgZXBpZCk7CisKKwkJCS8qIFRoaXMgaXMgdGhlIG9uZSB3ZSBzaG91bGQgdW5saW5rLiAqLworCQkJdW5saW5rX2VwID0gbmV4dF9lcDsKKworCQkJLyogQWN0dWFsbHkgdW5saW5rIHRoZSBFUCBmcm9tIHRoZSBETUEgbGlzdC4gKi8KKwkJCWN1cnJfZXAtPm5leHQgPSB1bmxpbmtfZXAtPm5leHQ7CisKKwkJCS8qIFdhaXQgdW50aWwgdGhlIERNQSBpcyBubyBsb25nZXIgYXQgdGhpcyBkZXNjcmlwdG9yLiAqLworCQkJd2hpbGUgKCpSX0RNQV9DSDhfU1VCMl9FUCA9PSB2aXJ0X3RvX3BoeXModW5saW5rX2VwKSk7CisKKwkJCS8qIE5vdyB3ZSBhcmUgZnJlZSB0byByZW1vdmUgaXQgYW5kIGl0cyBTQiBkZXNjcmlwdG9yLgorCQkJICAgTm90ZSB0aGF0IGl0IGlzIGFzc3VtZWQgaGVyZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIHNiIGluIHRoZQorCQkJICAgc2IgbGlzdCBmb3IgdGhpcyBlcC4gKi8KKwkJCWttZW1fY2FjaGVfZnJlZSh1c2JfZGVzY19jYWNoZSwgcGh5c190b192aXJ0KHVubGlua19lcC0+c3ViKSk7CisJCQlrbWVtX2NhY2hlX2ZyZWUodXNiX2Rlc2NfY2FjaGUsIChVU0JfRVBfRGVzY190ICopdW5saW5rX2VwKTsKKwkJfQorCisJCWN1cnJfZXAgPSBwaHlzX3RvX3ZpcnQoY3Vycl9lcC0+bmV4dCk7CisKKwl9IHdoaWxlIChjdXJyX2VwICE9IGZpcnN0X2VwKTsKKyAgICAgICAgdXJiLT5oY3ByaXYgPSBOVUxMOworfQorCit2b2lkIGV0cmF4X3VzYl9kb19pbnRyX3JlY292ZXIoaW50IGVwaWQpCit7CisJVVNCX0VQX0Rlc2NfdCAqZmlyc3RfZXAsICp0bXBfZXA7CisKKwlEQkZFTlRFUjsKKworCWZpcnN0X2VwID0gKFVTQl9FUF9EZXNjX3QgKilwaHlzX3RvX3ZpcnQoKlJfRE1BX0NIOF9TVUIyX0VQKTsKKwl0bXBfZXAgPSBmaXJzdF9lcDsKKworCS8qIFdoYXQgdGhpcyBkb2VzIGlzIHNpbXBseSB0byB3YWxrIHRoZSBsaXN0IG9mIGludGVycnVwdAorCSAgIGVwIGRlc2NyaXB0b3JzIGFuZCBlbmFibGUgdGhvc2UgdGhhdCBhcmUgZGlzYWJsZWQuICovCisKKwlkbyB7CisJCWlmIChJT19FWFRSQUNUKFVTQl9FUF9jb21tYW5kLCBlcGlkLCB0bXBfZXAtPmNvbW1hbmQpID09IGVwaWQgJiYKKwkJICAgICEodG1wX2VwLT5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkpIHsKKwkJCXRtcF9lcC0+Y29tbWFuZCB8PSBJT19TVEFURShVU0JfRVBfY29tbWFuZCwgZW5hYmxlLCB5ZXMpOworCQl9CisKKwkJdG1wX2VwID0gKFVTQl9FUF9EZXNjX3QgKilwaHlzX3RvX3ZpcnQodG1wX2VwLT5uZXh0KTsKKworCX0gd2hpbGUgKHRtcF9lcCAhPSBmaXJzdF9lcCk7CisKKworCURCRkVYSVQ7Cit9CisKK3N0YXRpYyBpbnQgZXRyYXhfcmhfdW5saW5rX3VyYiAoc3RydWN0IHVyYiAqdXJiKQoreworCWV0cmF4X2hjX3QgKmhjOworCisJREJGRU5URVI7CisKKwloYyA9IHVyYi0+ZGV2LT5idXMtPmhjcHJpdjsKKworCWlmIChoYy0+cmgudXJiID09IHVyYikgeworCQloYy0+cmguc2VuZCA9IDA7CisJCWRlbF90aW1lcigmaGMtPnJoLnJoX2ludF90aW1lcik7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXRyYXhfcmhfc2VuZF9pcnEoc3RydWN0IHVyYiAqdXJiKQoreworCV9fdTE2IGRhdGEgPSAwOworCWV0cmF4X2hjX3QgKmhjID0gdXJiLT5kZXYtPmJ1cy0+aGNwcml2OworCURCRkVOVEVSOworCisvKgorICBkYmdfcmgoIlJfVVNCX0ZNX05VTUJFUiAgIDogMHglMDhYIiwgKlJfVVNCX0ZNX05VTUJFUik7CisgIGRiZ19yaCgiUl9VU0JfRk1fUkVNQUlOSU5HOiAweCUwOFgiLCAqUl9VU0JfRk1fUkVNQUlOSU5HKTsKKyovCisKKwlkYXRhIHw9IChoYy0+cmgud1BvcnRDaGFuZ2VfMSkgPyAoMSA8PCAxKSA6IDA7CisJZGF0YSB8PSAoaGMtPnJoLndQb3J0Q2hhbmdlXzIpID8gKDEgPDwgMikgOiAwOworCisJKigoX191MTYgKil1cmItPnRyYW5zZmVyX2J1ZmZlcikgPSBjcHVfdG9fbGUxNihkYXRhKTsKKwkvKiBGSVhNRTogV2h5IGlzIGFjdHVhbF9sZW5ndGggc2V0IHRvIDEgd2hlbiBkYXRhIGlzIDIgYnl0ZXM/CisJICAgU2luY2Ugb25seSAxIGJ5dGUgaXMgdXNlZCwgd2h5IG5vdCBkZWNsYXJlIGRhdGEgYXMgX191OD8gKi8KKwl1cmItPmFjdHVhbF9sZW5ndGggPSAxOworCXVyYi0+c3RhdHVzID0gMDsKKworCWlmIChoYy0+cmguc2VuZCAmJiB1cmItPmNvbXBsZXRlKSB7CisJCWRiZ19yaCgid1BvcnRDaGFuZ2VfMTogMHglMDRYIiwgaGMtPnJoLndQb3J0Q2hhbmdlXzEpOworCQlkYmdfcmgoIndQb3J0Q2hhbmdlXzI6IDB4JTA0WCIsIGhjLT5yaC53UG9ydENoYW5nZV8yKTsKKworCQl1cmItPmNvbXBsZXRlKHVyYiwgTlVMTCk7CisJfQorCisJREJGRVhJVDsKK30KKworc3RhdGljIHZvaWQgZXRyYXhfcmhfaW5pdF9pbnRfdGltZXIoc3RydWN0IHVyYiAqdXJiKQoreworCWV0cmF4X2hjX3QgKmhjOworCisJREJGRU5URVI7CisKKwloYyA9IHVyYi0+ZGV2LT5idXMtPmhjcHJpdjsKKwloYy0+cmguaW50ZXJ2YWwgPSB1cmItPmludGVydmFsOworCWluaXRfdGltZXIoJmhjLT5yaC5yaF9pbnRfdGltZXIpOworCWhjLT5yaC5yaF9pbnRfdGltZXIuZnVuY3Rpb24gPSBldHJheF9yaF9pbnRfdGltZXJfZG87CisJaGMtPnJoLnJoX2ludF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpdXJiOworCS8qIEZJWE1FOiBJcyB0aGUgamlmZmllcyByZXNvbHV0aW9uIGVub3VnaD8gQWxsIGludGVydmFscyA8IDEwIG1zIHdpbGwgYmUgbWFwcGVkCisJICAgdG8gMCwgYW5kIHRoZSByZXN0IHRvIHRoZSBuZWFyZXN0IGxvd2VyIDEwIG1zLiAqLworCWhjLT5yaC5yaF9pbnRfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAoKEhaICogaGMtPnJoLmludGVydmFsKSAvIDEwMDApOworCWFkZF90aW1lcigmaGMtPnJoLnJoX2ludF90aW1lcik7CisKKwlEQkZFWElUOworfQorCitzdGF0aWMgdm9pZCBldHJheF9yaF9pbnRfdGltZXJfZG8odW5zaWduZWQgbG9uZyBwdHIpCit7CisJc3RydWN0IHVyYiAqdXJiOworCWV0cmF4X2hjX3QgKmhjOworCisJREJGRU5URVI7CisKKwl1cmIgPSAoc3RydWN0IHVyYiopcHRyOworCWhjID0gdXJiLT5kZXYtPmJ1cy0+aGNwcml2OworCisJaWYgKGhjLT5yaC5zZW5kKSB7CisJCWV0cmF4X3JoX3NlbmRfaXJxKHVyYik7CisJfQorCisJREJGRVhJVDsKK30KKworc3RhdGljIGludCBldHJheF91c2Jfc2V0dXBfZXBpZChzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50IGVwaWQ7CisJY2hhciBkZXZudW0sIGVuZHBvaW50LCBvdXRfdHJhZmZpYywgc2xvdzsKKwlpbnQgbWF4bGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlEQkZFTlRFUjsKKworCWVwaWQgPSBldHJheF91c2JfbG9va3VwX2VwaWQodXJiKTsKKwlpZiAoKGVwaWQgIT0gLTEpKXsKKwkJLyogQW4gZXBpZCB0aGF0IGZpdHMgdGhpcyB1cmIgaGFzIGJlZW4gZm91bmQuICovCisJCURCRkVYSVQ7CisJCXJldHVybiBlcGlkOworCX0KKworCS8qIFdlIG11c3QgZmluZCBhbmQgaW5pdGlhdGUgYSBuZXcgZXBpZCBmb3IgdGhpcyB1cmIuICovCisJZXBpZCA9IGV0cmF4X3VzYl9hbGxvY2F0ZV9lcGlkKCk7CisKKwlpZiAoZXBpZCA9PSAtMSkgeworCQkvKiBGYWlsZWQgdG8gYWxsb2NhdGUgYSBuZXcgZXBpZC4gKi8KKwkJREJGRVhJVDsKKwkJcmV0dXJuIGVwaWQ7CisJfQorCisJLyogV2Ugbm93IGhhdmUgYSBuZXcgZXBpZCB0byB1c2UuIEluaXRpYXRlIGl0LiAqLworCXNldF9iaXQoZXBpZCwgKHZvaWQgKikmZXBpZF91c2FnZV9iaXRtYXNrKTsKKworCWRldm51bSA9IHVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSk7CisJZW5kcG9pbnQgPSB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSk7CisJc2xvdyA9IHVzYl9waXBlc2xvdyh1cmItPnBpcGUpOworCW1heGxlbiA9IHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwgdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7CisJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQ09OVFJPTCkgeworCQkvKiBXZSB3YW50IGJvdGggSU4gYW5kIE9VVCBjb250cm9sIHRyYWZmaWMgdG8gYmUgcHV0IG9uIHRoZSBzYW1lIEVQL1NCIGxpc3QuICovCisJCW91dF90cmFmZmljID0gMTsKKwl9IGVsc2UgeworCQlvdXRfdHJhZmZpYyA9IHVzYl9waXBlb3V0KHVyYi0+cGlwZSk7CisJfQorCisJc2F2ZV9mbGFncyhmbGFncyk7CisJY2xpKCk7CisKKwkqUl9VU0JfRVBUX0lOREVYID0gSU9fRklFTEQoUl9VU0JfRVBUX0lOREVYLCB2YWx1ZSwgZXBpZCk7CisJbm9wKCk7CisKKwlpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JU09DSFJPTk9VUykgeworCQkqUl9VU0JfRVBUX0RBVEFfSVNPID0gSU9fU1RBVEUoUl9VU0JfRVBUX0RBVEFfSVNPLCB2YWxpZCwgeWVzKSB8CisJCQkvKiBGSVhNRTogQ2hhbmdlIGFueSB0byB0aGUgYWN0dWFsIHBvcnQ/ICovCisJCQlJT19TVEFURShSX1VTQl9FUFRfREFUQV9JU08sIHBvcnQsIGFueSkgfAorCQkJSU9fRklFTEQoUl9VU0JfRVBUX0RBVEFfSVNPLCBtYXhfbGVuLCBtYXhsZW4pIHwKKwkJCUlPX0ZJRUxEKFJfVVNCX0VQVF9EQVRBX0lTTywgZXAsIGVuZHBvaW50KSB8CisJCQlJT19GSUVMRChSX1VTQl9FUFRfREFUQV9JU08sIGRldiwgZGV2bnVtKTsKKwl9IGVsc2UgeworCQkqUl9VU0JfRVBUX0RBVEEgPSBJT19TVEFURShSX1VTQl9FUFRfREFUQSwgdmFsaWQsIHllcykgfAorCQkJSU9fRklFTEQoUl9VU0JfRVBUX0RBVEEsIGxvd19zcGVlZCwgc2xvdykgfAorCQkJLyogRklYTUU6IENoYW5nZSBhbnkgdG8gdGhlIGFjdHVhbCBwb3J0PyAqLworCQkJSU9fU1RBVEUoUl9VU0JfRVBUX0RBVEEsIHBvcnQsIGFueSkgfAorCQkJSU9fRklFTEQoUl9VU0JfRVBUX0RBVEEsIG1heF9sZW4sIG1heGxlbikgfAorCQkJSU9fRklFTEQoUl9VU0JfRVBUX0RBVEEsIGVwLCBlbmRwb2ludCkgfAorCQkJSU9fRklFTEQoUl9VU0JfRVBUX0RBVEEsIGRldiwgZGV2bnVtKTsKKwl9CisKKwlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKworCWlmIChvdXRfdHJhZmZpYykgeworCQlzZXRfYml0KGVwaWQsICh2b2lkICopJmVwaWRfb3V0X3RyYWZmaWMpOworCX0gZWxzZSB7CisJCWNsZWFyX2JpdChlcGlkLCAodm9pZCAqKSZlcGlkX291dF90cmFmZmljKTsKKwl9CisKKwlkYmdfZXBpZCgiU2V0dGluZyB1cCBlcGlkICVkIHdpdGggZGV2bnVtICVkLCBlbmRwb2ludCAlZCBhbmQgbWF4X2xlbiAlZCAoJXMpIiwKKwkJIGVwaWQsIGRldm51bSwgZW5kcG9pbnQsIG1heGxlbiwgb3V0X3RyYWZmaWMgPyAiT1VUIiA6ICJJTiIpOworCisJREJGRVhJVDsKKwlyZXR1cm4gZXBpZDsKK30KKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2ZyZWVfZXBpZChpbnQgZXBpZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJREJGRU5URVI7CisKKwlpZiAoIXRlc3RfYml0KGVwaWQsICh2b2lkICopJmVwaWRfdXNhZ2VfYml0bWFzaykpIHsKKwkJd2FybigiVHJ5aW5nIHRvIGZyZWUgdW51c2VkIGVwaWQgJWQiLCBlcGlkKTsKKwkJREJGRVhJVDsKKwkJcmV0dXJuOworCX0KKworCXNhdmVfZmxhZ3MoZmxhZ3MpOworCWNsaSgpOworCisJKlJfVVNCX0VQVF9JTkRFWCA9IElPX0ZJRUxEKFJfVVNCX0VQVF9JTkRFWCwgdmFsdWUsIGVwaWQpOworCW5vcCgpOworCXdoaWxlICgqUl9VU0JfRVBUX0RBVEEgJiBJT19NQVNLKFJfVVNCX0VQVF9EQVRBLCBob2xkKSk7CisJLyogVGhpcyB3aWxsLCBhbW9uZyBvdGhlciB0aGluZ3MsIHNldCB0aGUgdmFsaWQgZmllbGQgdG8gMC4gKi8KKwkqUl9VU0JfRVBUX0RBVEEgPSAwOworCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCisJY2xlYXJfYml0KGVwaWQsICh2b2lkICopJmVwaWRfdXNhZ2VfYml0bWFzayk7CisKKworCWRiZ19lcGlkKCJGcmVlZCBlcGlkICVkIiwgZXBpZCk7CisKKwlEQkZFWElUOworfQorCitzdGF0aWMgaW50IGV0cmF4X3VzYl9sb29rdXBfZXBpZChzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50IGk7CisJX191MzIgZGF0YTsKKwljaGFyIGRldm51bSwgZW5kcG9pbnQsIHNsb3csIG91dF90cmFmZmljOworCWludCBtYXhsZW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCURCRkVOVEVSOworCisJZGV2bnVtID0gdXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKTsKKwllbmRwb2ludCA9IHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKTsKKwlzbG93ID0gdXNiX3BpcGVzbG93KHVyYi0+cGlwZSk7CisJbWF4bGVuID0gdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLCB1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKKwlpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9DT05UUk9MKSB7CisJCS8qIFdlIHdhbnQgYm90aCBJTiBhbmQgT1VUIGNvbnRyb2wgdHJhZmZpYyB0byBiZSBwdXQgb24gdGhlIHNhbWUgRVAvU0IgbGlzdC4gKi8KKwkJb3V0X3RyYWZmaWMgPSAxOworCX0gZWxzZSB7CisJCW91dF90cmFmZmljID0gdXNiX3BpcGVvdXQodXJiLT5waXBlKTsKKwl9CisKKwkvKiBTdGVwIHRocm91Z2ggYXR0IGVwaWRzLiAqLworCWZvciAoaSA9IDA7IGkgPCBOQlJfT0ZfRVBJRFM7IGkrKykgeworCQlpZiAodGVzdF9iaXQoaSwgKHZvaWQgKikmZXBpZF91c2FnZV9iaXRtYXNrKSAmJgorCQkgICAgdGVzdF9iaXQoaSwgKHZvaWQgKikmZXBpZF9vdXRfdHJhZmZpYykgPT0gb3V0X3RyYWZmaWMpIHsKKworCQkJc2F2ZV9mbGFncyhmbGFncyk7CisJCQljbGkoKTsKKwkJCSpSX1VTQl9FUFRfSU5ERVggPSBJT19GSUVMRChSX1VTQl9FUFRfSU5ERVgsIHZhbHVlLCBpKTsKKwkJCW5vcCgpOworCisJCQlpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JU09DSFJPTk9VUykgeworCQkJCWRhdGEgPSAqUl9VU0JfRVBUX0RBVEFfSVNPOworCQkJCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCisJCQkJaWYgKChJT19NQVNLKFJfVVNCX0VQVF9EQVRBX0lTTywgdmFsaWQpICYgZGF0YSkgJiYKKwkJCQkgICAgKElPX0VYVFJBQ1QoUl9VU0JfRVBUX0RBVEFfSVNPLCBkZXYsIGRhdGEpID09IGRldm51bSkgJiYKKwkJCQkgICAgKElPX0VYVFJBQ1QoUl9VU0JfRVBUX0RBVEFfSVNPLCBlcCwgZGF0YSkgPT0gZW5kcG9pbnQpICYmCisJCQkJICAgIChJT19FWFRSQUNUKFJfVVNCX0VQVF9EQVRBX0lTTywgbWF4X2xlbiwgZGF0YSkgPT0gbWF4bGVuKSkgeworCQkJCQlkYmdfZXBpZCgiRm91bmQgZXBpZCAlZCBmb3IgZGV2bnVtICVkLCBlbmRwb2ludCAlZCAoJXMpIiwKKwkJCQkJCSBpLCBkZXZudW0sIGVuZHBvaW50LCBvdXRfdHJhZmZpYyA/ICJPVVQiIDogIklOIik7CisJCQkJCURCRkVYSVQ7CisJCQkJCXJldHVybiBpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJZGF0YSA9ICpSX1VTQl9FUFRfREFUQTsKKwkJCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKworCQkJCWlmICgoSU9fTUFTSyhSX1VTQl9FUFRfREFUQSwgdmFsaWQpICYgZGF0YSkgJiYKKwkJCQkgICAgKElPX0VYVFJBQ1QoUl9VU0JfRVBUX0RBVEEsIGRldiwgZGF0YSkgPT0gZGV2bnVtKSAmJgorCQkJCSAgICAoSU9fRVhUUkFDVChSX1VTQl9FUFRfREFUQSwgZXAsIGRhdGEpID09IGVuZHBvaW50KSAmJgorCQkJCSAgICAoSU9fRVhUUkFDVChSX1VTQl9FUFRfREFUQSwgbG93X3NwZWVkLCBkYXRhKSA9PSBzbG93KSAmJgorCQkJCSAgICAoSU9fRVhUUkFDVChSX1VTQl9FUFRfREFUQSwgbWF4X2xlbiwgZGF0YSkgPT0gbWF4bGVuKSkgeworCQkJCQlkYmdfZXBpZCgiRm91bmQgZXBpZCAlZCBmb3IgZGV2bnVtICVkLCBlbmRwb2ludCAlZCAoJXMpIiwKKwkJCQkJCSBpLCBkZXZudW0sIGVuZHBvaW50LCBvdXRfdHJhZmZpYyA/ICJPVVQiIDogIklOIik7CisJCQkJCURCRkVYSVQ7CisJCQkJCXJldHVybiBpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCURCRkVYSVQ7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGV0cmF4X3VzYl9hbGxvY2F0ZV9lcGlkKHZvaWQpCit7CisJaW50IGk7CisKKwlEQkZFTlRFUjsKKworCWZvciAoaSA9IDA7IGkgPCBOQlJfT0ZfRVBJRFM7IGkrKykgeworCQlpZiAoIXRlc3RfYml0KGksICh2b2lkICopJmVwaWRfdXNhZ2VfYml0bWFzaykpIHsKKwkJCWRiZ19lcGlkKCJGb3VuZCBmcmVlIGVwaWQgJWQiLCBpKTsKKwkJCURCRkVYSVQ7CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KKworCWRiZ19lcGlkKCJGb3VuZCBubyBmcmVlIGVwaWRzIik7CisJREJGRVhJVDsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgZXRyYXhfdXNiX3N1Ym1pdF91cmIoc3RydWN0IHVyYiAqdXJiLCBpbnQgbWVtX2ZsYWdzKQoreworCWV0cmF4X2hjX3QgKmhjOworCWludCByZXQgPSAtRUlOVkFMOworCisJREJGRU5URVI7CisKKwlpZiAoIXVyYi0+ZGV2IHx8ICF1cmItPmRldi0+YnVzKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpZiAodXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLCB1c2JfcGlwZW91dCh1cmItPnBpcGUpKSA8PSAwKSB7CisJCWluZm8oIlN1Ym1pdCB1cmIgdG8gcGlwZSB3aXRoIG1heHBhY2tldGxlbiAwLCBwaXBlIDB4JVhcbiIsIHVyYi0+cGlwZSk7CisJCXJldHVybiAtRU1TR1NJWkU7CisJfQorCisJaWYgKHVyYi0+dGltZW91dCkgeworCQkvKiBGSVhNRS4gKi8KKwkJd2FybigidXJiLT50aW1lb3V0IHNwZWNpZmllZCwgaWdub3JpbmcuIik7CisJfQorCisJaGMgPSAoZXRyYXhfaGNfdCopdXJiLT5kZXYtPmJ1cy0+aGNwcml2OworCisJaWYgKHVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSkgPT0gaGMtPnJoLmRldm51bSkgeworCQkvKiBUaGlzIHJlcXVlc3QgaXMgZm9yIHRoZSBWaXJ0dWFsIFJvb3QgSHViLiAqLworCQlyZXQgPSBldHJheF9yaF9zdWJtaXRfdXJiKHVyYik7CisKKwl9IGVsc2UgaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQlVMSykgeworCisJCXJldCA9IGV0cmF4X3VzYl9zdWJtaXRfYnVsa191cmIodXJiKTsKKworCX0gZWxzZSBpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9DT05UUk9MKSB7CisKKwkJcmV0ID0gZXRyYXhfdXNiX3N1Ym1pdF9jdHJsX3VyYih1cmIpOworCisJfSBlbHNlIGlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0lOVEVSUlVQVCkgeworCQlpbnQgYnVzdGltZTsKKworCQlpZiAodXJiLT5iYW5kd2lkdGggPT0gMCkgeworCQkJYnVzdGltZSA9IHVzYl9jaGVja19iYW5kd2lkdGgodXJiLT5kZXYsIHVyYik7CisJCQlpZiAoYnVzdGltZSA8IDApIHsKKwkJCQlyZXQgPSBidXN0aW1lOworCQkJfSBlbHNlIHsKKwkJCQlyZXQgPSBldHJheF91c2Jfc3VibWl0X2ludHJfdXJiKHVyYik7CisJCQkJaWYgKHJldCA9PSAwKQorCQkJCQl1c2JfY2xhaW1fYmFuZHdpZHRoKHVyYi0+ZGV2LCB1cmIsIGJ1c3RpbWUsIDApOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogQmFuZHdpZHRoIGFscmVhZHkgc2V0LiAqLworCQkJcmV0ID0gZXRyYXhfdXNiX3N1Ym1pdF9pbnRyX3VyYih1cmIpOworCQl9CisKKwl9IGVsc2UgaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJaW50IGJ1c3RpbWU7CisKKwkJaWYgKHVyYi0+YmFuZHdpZHRoID09IDApIHsKKwkJCWJ1c3RpbWUgPSB1c2JfY2hlY2tfYmFuZHdpZHRoKHVyYi0+ZGV2LCB1cmIpOworCQkJaWYgKGJ1c3RpbWUgPCAwKSB7CisJCQkJcmV0ID0gYnVzdGltZTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0ID0gZXRyYXhfdXNiX3N1Ym1pdF9pc29jX3VyYih1cmIpOworCQkJCWlmIChyZXQgPT0gMCkKKwkJCQkJdXNiX2NsYWltX2JhbmR3aWR0aCh1cmItPmRldiwgdXJiLCBidXN0aW1lLCAwKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIEJhbmR3aWR0aCBhbHJlYWR5IHNldC4gKi8KKwkJCXJldCA9IGV0cmF4X3VzYl9zdWJtaXRfaXNvY191cmIodXJiKTsKKwkJfQorCX0KKworCURCRkVYSVQ7CisKKyAgICAgICAgaWYgKHJldCAhPSAwKQorICAgICAgICAgIHByaW50aygiU3VibWl0IFVSQiBlcnJvciAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZXRyYXhfdXNiX3VubGlua191cmIoc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKQoreworCWV0cmF4X2hjX3QgKmhjOworCWV0cmF4X3VyYl9wcml2X3QgKnVyYl9wcml2OworCWludCBlcGlkOworCXVuc2lnbmVkIGludCBmbGFnczsKKworCURCRkVOVEVSOworCisJaWYgKCF1cmIpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGhlcmUgc2luY2UgYSBkZXNjcmlwdG9yIGludGVycnVwdCBmb3IgdGhlIGlzb2MgZXBpZAorCSAgIHdpbGwgbW9kaWZ5IHRoZSBzYiBsaXN0LiAgVGhpcyBjb3VsZCBwb3NzaWJseSBiZSBkb25lIG1vcmUgZ3JhbnVsYXIsIGJ1dAorCSAgIHVubGlua191cmIgc2hvdWxkIG5vdCBiZSB1c2VkIGZyZXF1ZW50bHkgYW55d2F5LgorCSovCisKKwlzYXZlX2ZsYWdzKGZsYWdzKTsKKwljbGkoKTsKKworCWlmICghdXJiLT5kZXYgfHwgIXVyYi0+ZGV2LT5idXMpIHsKKwkJcmVzdG9yZV9mbGFncyhmbGFncyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpZiAoIXVyYi0+aGNwcml2KSB7CisJCS8qIFRoaXMgaGFwcGVucyBpZiBhIGRldmljZSBkcml2ZXIgY2FsbHMgdW5saW5rIG9uIGFuIHVyYiB0aGF0CisJCSAgIHdhcyBuZXZlciBzdWJtaXR0ZWQgKGxhenkgZHJpdmVyKSBvciBpZiB0aGUgdXJiIHdhcyBjb21wbGV0ZWQKKwkJICAgd2hpbGUgdW5saW5rIHdhcyBiZWluZyBjYWxsZWQuICovCisJCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfQVNZTkNfVU5MSU5LKSB7CisJCS8qIEZJWE1FLiAqLworCQkvKiBJZiBVUkJfQVNZTkNfVU5MSU5LIGlzIHNldDoKKwkJICAgdW5saW5rCisJCSAgIG1vdmUgdG8gYSBzZXBhcmF0ZSB1cmIgbGlzdAorCQkgICBjYWxsIGNvbXBsZXRlIGF0IG5leHQgc29mIHdpdGggRUNPTk5SRVNFVAorCisJCSAgIElmIG5vdDoKKwkJICAgd2FpdCAxIG1zCisJCSAgIHVubGluaworCQkgICBjYWxsIGNvbXBsZXRlIHdpdGggRU5PRU5UCisJCSovCisJCXdhcm4oIlVSQl9BU1lOQ19VTkxJTksgc2V0LCBpZ25vcmluZy4iKTsKKwl9CisKKwkvKiBPbmUgbWlnaHQgdGhpbmsgdGhhdCB1cmItPnN0YXR1cyA9IC1FSU5QUk9HUkVTUyB3b3VsZCBiZSBhIHJlcXVpcmVtZW50IGZvciB1bmxpbmtpbmcsCisJICAgYnV0IHRoYXQgZG9lc24ndCB3b3JrIGZvciBpbnRlcnJ1cHQgYW5kIGlzb2Nocm9ub3VzIHRyYWZmaWMgc2luY2UgdGhleSBhcmUgY29tcGxldGVkCisJICAgcmVwZWF0ZWRseSwgYW5kIHVyYi0+c3RhdHVzIGlzIHNldCB0aGVuLiBUaGF0IG1heSBpbiBpdHNlbGYgYmUgYSBidWcgdGhvdWdoLiAqLworCisJaGMgPSB1cmItPmRldi0+YnVzLT5oY3ByaXY7CisJdXJiX3ByaXYgPSAoZXRyYXhfdXJiX3ByaXZfdCAqKXVyYi0+aGNwcml2OworCWVwaWQgPSB1cmJfcHJpdi0+ZXBpZDsKKworCS8qIFNldCB0aGUgdXJiIHN0YXR1cyAoc3luY2hyb25vdXMgdW5saW5rKS4gKi8KKwl1cmItPnN0YXR1cyA9IC1FTk9FTlQ7CisJdXJiX3ByaXYtPnVyYl9zdGF0ZSA9IFVOTElOSzsKKworCWlmICh1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpID09IGhjLT5yaC5kZXZudW0pIHsKKwkJaW50IHJldDsKKwkJcmV0ID0gZXRyYXhfcmhfdW5saW5rX3VyYih1cmIpOworCQlEQkZFWElUOworCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwkJcmV0dXJuIHJldDsKKworCX0gZWxzZSBpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9CVUxLKSB7CisKKwkJZGJnX2J1bGsoIlVubGluayBvZiBidWxrIHVyYiAoMHglbHgpIiwgKHVuc2lnbmVkIGxvbmcpdXJiKTsKKworCQlpZiAoVHhCdWxrRVBMaXN0W2VwaWRdLmNvbW1hbmQgJiBJT19NQVNLKFVTQl9FUF9jb21tYW5kLCBlbmFibGUpKSB7CisJCQkvKiBUaGUgRVAgd2FzIGVuYWJsZWQsIGRpc2FibGUgaXQgYW5kIHdhaXQuICovCisJCQlUeEJ1bGtFUExpc3RbZXBpZF0uY29tbWFuZCAmPSB+SU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKTsKKworCQkJLyogQWgsIHRoZSBsdXh1cnkgb2YgYnVzeS13YWl0LiAqLworCQkJd2hpbGUgKCpSX0RNQV9DSDhfU1VCMF9FUCA9PSB2aXJ0X3RvX3BoeXMoJlR4QnVsa0VQTGlzdFtlcGlkXSkpOworCQl9CisJCS8qIEtpY2tpbmcgZHVtbXkgbGlzdCBvdXQgb2YgdGhlIHBhcnR5LiAqLworCQlUeEJ1bGtFUExpc3RbZXBpZF0ubmV4dCA9IHZpcnRfdG9fcGh5cygmVHhCdWxrRVBMaXN0WyhlcGlkICsgMSkgJSBOQlJfT0ZfRVBJRFNdKTsKKworCX0gZWxzZSBpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9DT05UUk9MKSB7CisKKwkJZGJnX2N0cmwoIlVubGluayBvZiBjdHJsIHVyYiAoMHglbHgpIiwgKHVuc2lnbmVkIGxvbmcpdXJiKTsKKworCQlpZiAoVHhDdHJsRVBMaXN0W2VwaWRdLmNvbW1hbmQgJiBJT19NQVNLKFVTQl9FUF9jb21tYW5kLCBlbmFibGUpKSB7CisJCQkvKiBUaGUgRVAgd2FzIGVuYWJsZWQsIGRpc2FibGUgaXQgYW5kIHdhaXQuICovCisJCQlUeEN0cmxFUExpc3RbZXBpZF0uY29tbWFuZCAmPSB+SU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKTsKKworCQkJLyogQWgsIHRoZSBsdXh1cnkgb2YgYnVzeS13YWl0LiAqLworCQkJd2hpbGUgKCpSX0RNQV9DSDhfU1VCMV9FUCA9PSB2aXJ0X3RvX3BoeXMoJlR4Q3RybEVQTGlzdFtlcGlkXSkpOworCQl9CisKKwl9IGVsc2UgaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSU5URVJSVVBUKSB7CisKKwkJZGJnX2ludHIoIlVubGluayBvZiBpbnRyIHVyYiAoMHglbHgpIiwgKHVuc2lnbmVkIGxvbmcpdXJiKTsKKworCQkvKiBTZXBhcmF0ZSBmdW5jdGlvbiBiZWNhdXNlIGl0J3MgYSB0YWQgbW9yZSBjb21wbGljYXRlZC4gKi8KKwkJZXRyYXhfdXNiX3VubGlua19pbnRyX3VyYih1cmIpOworCisJfSBlbHNlIGlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0lTT0NIUk9OT1VTKSB7CisKKwkJZGJnX2lzb2MoIlVubGluayBvZiBpc29jIHVyYiAoMHglbHgpIiwgKHVuc2lnbmVkIGxvbmcpdXJiKTsKKworCQlpZiAoVHhJc29jRVBMaXN0W2VwaWRdLmNvbW1hbmQgJiBJT19NQVNLKFVTQl9FUF9jb21tYW5kLCBlbmFibGUpKSB7CisJCQkvKiBUaGUgRVAgd2FzIGVuYWJsZWQsIGRpc2FibGUgaXQgYW5kIHdhaXQuICovCisJCQlUeElzb2NFUExpc3RbZXBpZF0uY29tbWFuZCAmPSB+SU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKTsKKworCQkJLyogQWgsIHRoZSBsdXh1cnkgb2YgYnVzeS13YWl0LiAqLworCQkJd2hpbGUgKCpSX0RNQV9DSDhfU1VCM19FUCA9PSB2aXJ0X3RvX3BoeXMoJlR4SXNvY0VQTGlzdFtlcGlkXSkpOworCQl9CisJfQorCisJLyogTm90ZSB0aGF0IHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSB1cmIgZnJvbSB0aGUgdXJiIGxpc3QgKmJlZm9yZSogcmVtb3ZpbmcgaXRzIFNCCisJICAgZGVzY3JpcHRvcnMuIChUaGlzIG1lYW5zIHRoYXQgdGhlIGlzb2MgZW9mIGhhbmRsZXIgbWlnaHQgZ2V0IGEgbnVsbCB1cmIgd2hlbiB3ZQorCSAgIGFyZSB1bmxpbmtpbmcgdGhlIGxhc3QgdXJiLikgKi8KKworCWlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0JVTEspIHsKKworCQl1cmJfbGlzdF9kZWwodXJiLCBlcGlkKTsKKwkJVHhCdWxrRVBMaXN0W2VwaWRdLnN1YiA9IDA7CisJCWV0cmF4X3JlbW92ZV9mcm9tX3NiX2xpc3QodXJiKTsKKworCX0gZWxzZSBpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9DT05UUk9MKSB7CisKKwkJdXJiX2xpc3RfZGVsKHVyYiwgZXBpZCk7CisJCVR4Q3RybEVQTGlzdFtlcGlkXS5zdWIgPSAwOworCQlldHJheF9yZW1vdmVfZnJvbV9zYl9saXN0KHVyYik7CisKKwl9IGVsc2UgaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSU5URVJSVVBUKSB7CisKKwkJdXJiX2xpc3RfZGVsKHVyYiwgZXBpZCk7CisJCS8qIFNhbml0eSBjaGVjayAoc2hvdWxkIG5ldmVyIGhhcHBlbikuICovCisJCWFzc2VydCh1cmJfbGlzdF9lbXB0eShlcGlkKSk7CisKKwkJLyogUmVsZWFzZSBhbGxvY2F0ZWQgYmFuZHdpZHRoLiAqLworCQl1c2JfcmVsZWFzZV9iYW5kd2lkdGgodXJiLT5kZXYsIHVyYiwgMCk7CisKKwl9IGVsc2UgaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKworCQlpZiAodXNiX3BpcGVvdXQodXJiLT5waXBlKSkgeworCisJCQlVU0JfU0JfRGVzY190ICppdGVyX3NiLCAqcHJldl9zYiwgKm5leHRfc2I7CisKKwkJCWlmIChfX3VyYl9saXN0X2VudHJ5KHVyYiwgZXBpZCkpIHsKKworCQkJCXVyYl9saXN0X2RlbCh1cmIsIGVwaWQpOworCQkJCWl0ZXJfc2IgPSBUeElzb2NFUExpc3RbZXBpZF0uc3ViID8gcGh5c190b192aXJ0KFR4SXNvY0VQTGlzdFtlcGlkXS5zdWIpIDogMDsKKwkJCQlwcmV2X3NiID0gMDsKKwkJCQl3aGlsZSAoaXRlcl9zYiAmJiAoaXRlcl9zYiAhPSB1cmJfcHJpdi0+Zmlyc3Rfc2IpKSB7CisJCQkJCXByZXZfc2IgPSBpdGVyX3NiOworCQkJCQlpdGVyX3NiID0gaXRlcl9zYi0+bmV4dCA/IHBoeXNfdG9fdmlydChpdGVyX3NiLT5uZXh0KSA6IDA7CisJCQkJfQorCisJCQkJaWYgKGl0ZXJfc2IgPT0gMCkgeworCQkJCQkvKiBVbmxpbmsgb2YgdGhlIFVSQiBjdXJyZW50bHkgYmVpbmcgdHJhbnNtaXR0ZWQuICovCisJCQkJCXByZXZfc2IgPSAwOworCQkJCQlpdGVyX3NiID0gVHhJc29jRVBMaXN0W2VwaWRdLnN1YiA/IHBoeXNfdG9fdmlydChUeElzb2NFUExpc3RbZXBpZF0uc3ViKSA6IDA7CisJCQkJfQorCisJCQkJd2hpbGUgKGl0ZXJfc2IgJiYgKGl0ZXJfc2IgIT0gdXJiX3ByaXYtPmxhc3Rfc2IpKSB7CisJCQkJCWl0ZXJfc2IgPSBpdGVyX3NiLT5uZXh0ID8gcGh5c190b192aXJ0KGl0ZXJfc2ItPm5leHQpIDogMDsKKwkJCQl9CisJCQkJaWYgKGl0ZXJfc2IpIHsKKwkJCQkJbmV4dF9zYiA9IGl0ZXJfc2ItPm5leHQgPyBwaHlzX3RvX3ZpcnQoaXRlcl9zYi0+bmV4dCkgOiAwOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBETUEgaGFzIGNvbXBsZXRlZAorCQkJCQkgICBwcm9jZXNzaW5nIHRoZSBTQiBsaXN0IGZvciB0aGlzIEVQIHdoaWxlIGludGVycnVwdHMKKwkJCQkJICAgYXJlIGRpc2FibGVkLiAqLworCQkJCQlkYmdfaXNvYygiSXNvYyB1cmIgbm90IGZvdW5kLCBhbHJlYWR5IHNlbnQ/Iik7CisJCQkJCW5leHRfc2IgPSAwOworCQkJCX0KKwkJCQlpZiAocHJldl9zYikgeworCQkJCQlwcmV2X3NiLT5uZXh0ID0gbmV4dF9zYiA/IHZpcnRfdG9fcGh5cyhuZXh0X3NiKSA6IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJVHhJc29jRVBMaXN0W2VwaWRdLnN1YiA9IG5leHRfc2IgPyB2aXJ0X3RvX3BoeXMobmV4dF9zYikgOiAwOworCQkJCX0KKworCQkJCWV0cmF4X3JlbW92ZV9mcm9tX3NiX2xpc3QodXJiKTsKKwkJCQlpZiAodXJiX2xpc3RfZW1wdHkoZXBpZCkpIHsKKwkJCQkJVHhJc29jRVBMaXN0W2VwaWRdLnN1YiA9IDA7CisJCQkJCWRiZ19pc29jKCJMYXN0IGlzb2Mgb3V0IHVyYiBlcGlkICVkIiwgZXBpZCk7CisJCQkJfSBlbHNlIGlmIChuZXh0X3NiIHx8IHByZXZfc2IpIHsKKwkJCQkJZGJnX2lzb2MoIlJlLWVuYWJsZSBpc29jIG91dCBlcGlkICVkIiwgZXBpZCk7CisKKwkJCQkJVHhJc29jRVBMaXN0W2VwaWRdLmh3X2xlbiA9IDA7CisJCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5jb21tYW5kIHw9IElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlbmFibGUsIHllcyk7CisJCQkJfSBlbHNlIHsKKwkJCQkJVHhJc29jRVBMaXN0W2VwaWRdLnN1YiA9IDA7CisJCQkJCWRiZ19pc29jKCJVUkIgbGlzdCBub24tZW1wdHkgYW5kIG5vIFNCIGxpc3QsIEVQIGRpc2FibGVkIik7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlkYmdfaXNvYygiVXJiIDB4JXAgbm90IGZvdW5kLCBjb21wbGV0ZWQgYWxyZWFkeT8iLCB1cmIpOworCQkJfQorCQl9IGVsc2UgeworCisJCQl1cmJfbGlzdF9kZWwodXJiLCBlcGlkKTsKKworCQkJLyogRm9yIGluIHRyYWZmaWMgdGhlcmUgaXMgb25seSBvbmUgU0IgZGVzY3JpcHRvciBmb3IgZWFjaCBFUCBldmVuCisJCQkgICB0aG91Z2ggdGhlcmUgbWF5IGJlIHNldmVyYWwgdXJicyAoYWxsIHVyYnMgcG9pbnQgYXQgdGhlIHNhbWUgU0IpLiAqLworCQkJaWYgKHVyYl9saXN0X2VtcHR5KGVwaWQpKSB7CisJCQkJLyogTm8gbW9yZSB1cmJzLCByZW1vdmUgdGhlIFNCLiAqLworCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5zdWIgPSAwOworCQkJCWV0cmF4X3JlbW92ZV9mcm9tX3NiX2xpc3QodXJiKTsKKwkJCX0gZWxzZSB7CisJCQkJVHhJc29jRVBMaXN0W2VwaWRdLmh3X2xlbiA9IDA7CisJCQkJVHhJc29jRVBMaXN0W2VwaWRdLmNvbW1hbmQgfD0gSU9fU1RBVEUoVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSwgeWVzKTsKKwkJCX0KKwkJfQorCQkvKiBSZWxlYXNlIGFsbG9jYXRlZCBiYW5kd2lkdGguICovCisJCXVzYl9yZWxlYXNlX2JhbmR3aWR0aCh1cmItPmRldiwgdXJiLCAxKTsKKwl9CisJLyogRnJlZSB0aGUgZXBpZCBpZiB1cmIgbGlzdCBpcyBlbXB0eS4gKi8KKwlpZiAodXJiX2xpc3RfZW1wdHkoZXBpZCkpIHsKKwkJZXRyYXhfdXNiX2ZyZWVfZXBpZChlcGlkKTsKKwl9CisJcmVzdG9yZV9mbGFncyhmbGFncyk7CisKKwkvKiBNdXN0IGJlIGRvbmUgYmVmb3JlIGNhbGxpbmcgY29tcGxldGlvbiBoYW5kbGVyLiAqLworCWtmcmVlKHVyYl9wcml2KTsKKwl1cmItPmhjcHJpdiA9IDA7CisKKwlpZiAodXJiLT5jb21wbGV0ZSkgeworCQl1cmItPmNvbXBsZXRlKHVyYiwgTlVMTCk7CisJfQorCisJREJGRVhJVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBldHJheF91c2JfZ2V0X2ZyYW1lX251bWJlcihzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldikKK3sKKwlEQkZFTlRFUjsKKwlEQkZFWElUOworCXJldHVybiAoKlJfVVNCX0ZNX05VTUJFUiAmIDB4N2ZmKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGV0cmF4X3VzYl90eF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqdmhjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlEQkZFTlRFUjsKKworCS8qIFRoaXMgaW50ZXJydXB0IGhhbmRsZXIgY291bGQgYmUgdXNlZCB3aGVuIHVubGlua2luZyBFUCBkZXNjcmlwdG9ycy4gKi8KKworCWlmICgqUl9JUlFfUkVBRDIgJiBJT19NQVNLKFJfSVJRX1JFQUQyLCBkbWE4X3N1YjBfZGVzY3IpKSB7CisJCVVTQl9FUF9EZXNjX3QgKmVwOworCisJCS8vZGJnX2J1bGsoImRtYThfc3ViMF9kZXNjciAoQlVMSykgaW50ci4iKTsKKworCQkvKiBJdCBzaG91bGQgYmUgc2FmZSBjbGVhcmluZyB0aGUgaW50ZXJydXB0IGhlcmUsIHNpbmNlIHdlIGRvbid0IGV4cGVjdCB0byBnZXQgYSBuZXcKKwkJICAgb25lIHVudGlsIHdlIHJlc3RhcnQgdGhlIGJ1bGsgY2hhbm5lbC4gKi8KKwkJKlJfRE1BX0NIOF9TVUIwX0NMUl9JTlRSID0gSU9fU1RBVEUoUl9ETUFfQ0g4X1NVQjBfQ0xSX0lOVFIsIGNscl9kZXNjciwgZG8pOworCisJCS8qIFdhaXQgd2hpbGUgdGhlIERNQSBpcyBydW5uaW5nICh0aG91Z2ggd2UgZG9uJ3QgZXhwZWN0IGl0IHRvIGJlKS4gKi8KKwkJd2hpbGUgKCpSX0RNQV9DSDhfU1VCMF9DTUQgJiBJT19NQVNLKFJfRE1BX0NIOF9TVUIwX0NNRCwgY21kKSk7CisKKwkJLyogQWR2YW5jZSB0aGUgRE1BIHRvIHRoZSBuZXh0IEVQIGRlc2NyaXB0b3IuICovCisJCWVwID0gKFVTQl9FUF9EZXNjX3QgKilwaHlzX3RvX3ZpcnQoKlJfRE1BX0NIOF9TVUIwX0VQKTsKKworCQkvL2RiZ19idWxrKCJkZXNjciBpbnRyOiBETUEgaXMgYXQgMHglbHgiLCAodW5zaWduZWQgbG9uZyllcCk7CisKKwkJLyogZXAtPm5leHQgaXMgYWxyZWFkeSBhIHBoeXNpY2FsIGFkZHJlc3M7IG5vIG5lZWQgZm9yIGEgdmlydF90b19waHlzLiAqLworCQkqUl9ETUFfQ0g4X1NVQjBfRVAgPSBlcC0+bmV4dDsKKworCQkvKiBTdGFydCB0aGUgRE1BIGJ1bGsgY2hhbm5lbCBhZ2Fpbi4gKi8KKwkJKlJfRE1BX0NIOF9TVUIwX0NNRCA9IElPX1NUQVRFKFJfRE1BX0NIOF9TVUIwX0NNRCwgY21kLCBzdGFydCk7CisJfQorCWlmICgqUl9JUlFfUkVBRDIgJiBJT19NQVNLKFJfSVJRX1JFQUQyLCBkbWE4X3N1YjFfZGVzY3IpKSB7CisJCXN0cnVjdCB1cmIgKnVyYjsKKwkJaW50IGVwaWQ7CisJCWV0cmF4X3VyYl9wcml2X3QgKnVyYl9wcml2OworCQl1bnNpZ25lZCBsb25nIGludCBmbGFnczsKKworCQlkYmdfY3RybCgiZG1hOF9zdWIxX2Rlc2NyIChDVFJMKSBpbnRyLiIpOworCQkqUl9ETUFfQ0g4X1NVQjFfQ0xSX0lOVFIgPSBJT19TVEFURShSX0RNQV9DSDhfU1VCMV9DTFJfSU5UUiwgY2xyX2Rlc2NyLCBkbyk7CisKKwkJLyogVGhlIGNvbXBsZXRlIGNhbGxiYWNrIGdldHMgY2FsbGVkIHNvIHdlIGNsaS4gKi8KKwkJc2F2ZV9mbGFncyhmbGFncyk7CisJCWNsaSgpOworCisJCWZvciAoZXBpZCA9IDA7IGVwaWQgPCBOQlJfT0ZfRVBJRFMgLSAxOyBlcGlkKyspIHsKKwkJCWlmICgoVHhDdHJsRVBMaXN0W2VwaWRdLnN1YiA9PSAwKSB8fAorCQkJICAgIChlcGlkID09IERVTU1ZX0VQSUQpIHx8CisJCQkgICAgKGVwaWQgPT0gSU5WQUxJRF9FUElEKSkgeworCQkJCS8qIE5vdGhpbmcgaGVyZSB0byBzZWUuICovCisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIEdldCB0aGUgZmlyc3QgdXJiIChpZiBhbnkpLiAqLworCQkJdXJiID0gdXJiX2xpc3RfZmlyc3QoZXBpZCk7CisKKwkJCWlmICh1cmIpIHsKKworCQkJCS8qIFNhbml0eSBjaGVjay4gKi8KKwkJCQlhc3NlcnQodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9DT05UUk9MKTsKKworCQkJCXVyYl9wcml2ID0gKGV0cmF4X3VyYl9wcml2X3QgKil1cmItPmhjcHJpdjsKKwkJCQlhc3NlcnQodXJiX3ByaXYpOworCisJCQkJaWYgKHVyYl9wcml2LT51cmJfc3RhdGUgPT0gV0FJVElOR19GT1JfREVTQ1JfSU5UUikgeworCQkJCQlhc3NlcnQoIShUeEN0cmxFUExpc3RbdXJiX3ByaXYtPmVwaWRdLmNvbW1hbmQgJiBJT19NQVNLKFVTQl9FUF9jb21tYW5kLCBlbmFibGUpKSk7CisKKwkJCQkJZXRyYXhfdXNiX2NvbXBsZXRlX3VyYih1cmIsIDApOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwl9CisJaWYgKCpSX0lSUV9SRUFEMiAmIElPX01BU0soUl9JUlFfUkVBRDIsIGRtYThfc3ViMl9kZXNjcikpIHsKKwkJZGJnX2ludHIoImRtYThfc3ViMl9kZXNjciAoSU5UUikgaW50ci4iKTsKKwkJKlJfRE1BX0NIOF9TVUIyX0NMUl9JTlRSID0gSU9fU1RBVEUoUl9ETUFfQ0g4X1NVQjJfQ0xSX0lOVFIsIGNscl9kZXNjciwgZG8pOworCX0KKwlpZiAoKlJfSVJRX1JFQUQyICYgSU9fTUFTSyhSX0lSUV9SRUFEMiwgZG1hOF9zdWIzX2Rlc2NyKSkgeworCQlzdHJ1Y3QgdXJiICp1cmI7CisJCWludCBlcGlkOworCQlpbnQgZXBpZF9kb25lOworCQlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdjsKKwkJVVNCX1NCX0Rlc2NfdCAqc2JfZGVzYzsKKworCQl1c2JfaXNvY19jb21wbGV0ZV9kYXRhX3QgKmNvbXBfZGF0YSA9IE5VTEw7CisKKwkJLyogT25lIG9yIG1vcmUgaXNvYyBvdXQgdHJhbnNmZXJzIGFyZSBkb25lLiAqLworCQlkYmdfaXNvYygiZG1hOF9zdWIzX2Rlc2NyIChJU09DKSBpbnRyLiIpOworCisJCS8qIEZvciBlYWNoIGlzb2Mgb3V0IEVQIHNlYXJjaCBmb3IgdGhlIGZpcnN0IHNiX2Rlc2Mgd2l0aCB0aGUgaW50ciBmbGFnCisJCSAgIHNldC4gIFRoaXMgZGVzY3JpcHRvciBtdXN0IGJlIHRoZSBsYXN0IHBhY2tldCBmcm9tIGFuIFVSQi4gIFRoZW4KKwkJICAgdHJhdmVyc2UgdGhlIFVSQiBsaXN0IGZvciB0aGUgRVAgdW50aWwgdGhlIFVSQiB3aXRoIHVyYl9wcml2LT5sYXN0X3NiCisJCSAgIG1hdGNoaW5nIHRoZSBpbnRyLW1hcmtlZCBzYl9kZXNjIGlzIGZvdW5kLiAgQWxsIFVSQnMgYmVmb3JlIHRoaXMgaGF2ZQorCQkgICBiZWVuIHNlbnQuCisJCSovCisKKwkJZm9yIChlcGlkID0gMDsgZXBpZCA8IE5CUl9PRl9FUElEUyAtIDE7IGVwaWQrKykgeworCQkJLyogU2tpcCBwYXN0IGVwaWRzIHdpdGggbm8gU0IgbGlzdHMsIGVwaWRzIHVzZWQgZm9yIGluIHRyYWZmaWMsCisJCQkgICBhbmQgc3BlY2lhbCAoZHVtbXksIGludmFsaWQpIGVwaWRzLiAqLworCQkJaWYgKChUeElzb2NFUExpc3RbZXBpZF0uc3ViID09IDApIHx8CisJCQkgICAgKHRlc3RfYml0KGVwaWQsICh2b2lkICopJmVwaWRfb3V0X3RyYWZmaWMpID09IDApIHx8CisJCQkgICAgKGVwaWQgPT0gRFVNTVlfRVBJRCkgfHwKKwkJCSAgICAoZXBpZCA9PSBJTlZBTElEX0VQSUQpKSB7CisJCQkJLyogTm90aGluZyBoZXJlIHRvIHNlZS4gKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXNiX2Rlc2MgPSBwaHlzX3RvX3ZpcnQoVHhJc29jRVBMaXN0W2VwaWRdLnN1Yik7CisKKwkJCS8qIEZpbmQgdGhlIGxhc3QgZGVzY3JpcHRvciBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBVUkIgZm9yIHRoaXMgZXAuCisJCQkgICBUaGlzIGlzIHRoZSBmaXJzdCBkZXNjcmlwdG9yIGluIHRoZSBzdWIgbGlzdCBtYXJrZWQgZm9yIGEgZGVzY3JpcHRvcgorCQkJICAgaW50ZXJydXB0LiAqLworCQkJd2hpbGUgKHNiX2Rlc2MgJiYgIUlPX0VYVFJBQ1QoVVNCX1NCX2NvbW1hbmQsIGludHIsIHNiX2Rlc2MtPmNvbW1hbmQpKSB7CisJCQkJc2JfZGVzYyA9IHNiX2Rlc2MtPm5leHQgPyBwaHlzX3RvX3ZpcnQoc2JfZGVzYy0+bmV4dCkgOiAwOworCQkJfQorCQkJYXNzZXJ0KHNiX2Rlc2MpOworCisJCQlkYmdfaXNvYygiQ2hlY2sgZXBpZCAlZCwgc3ViIDB4JXAsIFNCIDB4JXAiLAorCQkJCSBlcGlkLAorCQkJCSBwaHlzX3RvX3ZpcnQoVHhJc29jRVBMaXN0W2VwaWRdLnN1YiksCisJCQkJIHNiX2Rlc2MpOworCisJCQllcGlkX2RvbmUgPSAwOworCisJCQkvKiBHZXQgdGhlIGZpcnN0IHVyYiAoaWYgYW55KS4gKi8KKwkJCXVyYiA9IHVyYl9saXN0X2ZpcnN0KGVwaWQpOworCQkJYXNzZXJ0KHVyYik7CisKKwkJCXdoaWxlICh1cmIgJiYgIWVwaWRfZG9uZSkgeworCisJCQkJLyogU2FuaXR5IGNoZWNrLiAqLworCQkJCWFzc2VydCh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0lTT0NIUk9OT1VTKTsKKworCQkJCWlmICghdXNiX3BpcGVvdXQodXJiLT5waXBlKSkgeworCQkJCQkvKiBkZXNjciBpbnRlcnJ1cHRzIGFyZSBnZW5lcmF0ZWQgb25seSBmb3Igb3V0IHBpcGVzLiAqLworCQkJCQllcGlkX2RvbmUgPSAxOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQl1cmJfcHJpdiA9IChldHJheF91cmJfcHJpdl90ICopdXJiLT5oY3ByaXY7CisJCQkJYXNzZXJ0KHVyYl9wcml2KTsKKworCQkJCWlmIChzYl9kZXNjICE9IHVyYl9wcml2LT5sYXN0X3NiKSB7CisKKwkJCQkJLyogVGhpcyB1cmIgaGFzIGJlZW4gc2VudC4gKi8KKwkJCQkJZGJnX2lzb2MoIm91dCBVUkIgMHglcCBzZW50IiwgdXJiKTsKKworCQkJCQl1cmJfcHJpdi0+dXJiX3N0YXRlID0gVFJBTlNGRVJfRE9ORTsKKworCQkJCX0gZWxzZSBpZiAoKHNiX2Rlc2MgPT0gdXJiX3ByaXYtPmxhc3Rfc2IpICYmCisJCQkJCSAgICEoVHhJc29jRVBMaXN0W2VwaWRdLmNvbW1hbmQgJiBJT19NQVNLKFVTQl9FUF9jb21tYW5kLCBlbmFibGUpKSkgeworCisJCQkJCWFzc2VydCgoc2JfZGVzYy0+Y29tbWFuZCAmIElPX01BU0soVVNCX1NCX2NvbW1hbmQsIGVvbCkpID09IElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb2wsIHllcykpOworCQkJCQlhc3NlcnQoc2JfZGVzYy0+bmV4dCA9PSAwKTsKKworCQkJCQlkYmdfaXNvYygib3V0IFVSQiAweCVwIGxhc3QgaW4gbGlzdCwgZXBpZCBkaXNhYmxlZCIsIHVyYik7CisJCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5zdWIgPSAwOworCQkJCQlUeElzb2NFUExpc3RbZXBpZF0uaHdfbGVuID0gMDsKKwkJCQkJdXJiX3ByaXYtPnVyYl9zdGF0ZSA9IFRSQU5TRkVSX0RPTkU7CisKKwkJCQkJZXBpZF9kb25lID0gMTsKKworCQkJCX0gZWxzZSB7CisJCQkJCWVwaWRfZG9uZSA9IDE7CisJCQkJfQorCQkJCWlmICghZXBpZF9kb25lKSB7CisJCQkJCXVyYiA9IHVyYl9saXN0X25leHQodXJiLCBlcGlkKTsKKwkJCQl9CisJCQl9CisKKwkJfQorCisJCSpSX0RNQV9DSDhfU1VCM19DTFJfSU5UUiA9IElPX1NUQVRFKFJfRE1BX0NIOF9TVUIzX0NMUl9JTlRSLCBjbHJfZGVzY3IsIGRvKTsKKworCQljb21wX2RhdGEgPSAodXNiX2lzb2NfY29tcGxldGVfZGF0YV90KilrbWVtX2NhY2hlX2FsbG9jKGlzb2NfY29tcGxfY2FjaGUsIFNMQUJfQVRPTUlDKTsKKwkJYXNzZXJ0KGNvbXBfZGF0YSAhPSBOVUxMKTsKKworICAgICAgICAgICAgICAgIElOSVRfV09SSygmY29tcF9kYXRhLT51c2JfYmgsIGV0cmF4X3VzYl9pc29jX2Rlc2NyX2ludGVycnVwdF9ib3R0b21faGFsZiwgY29tcF9kYXRhKTsKKyAgICAgICAgICAgICAgICBzY2hlZHVsZV93b3JrKCZjb21wX2RhdGEtPnVzYl9iaCk7CisJfQorCisJREJGRVhJVDsKKyAgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBldHJheF91c2JfaXNvY19kZXNjcl9pbnRlcnJ1cHRfYm90dG9tX2hhbGYodm9pZCAqZGF0YSkKK3sKKwl1c2JfaXNvY19jb21wbGV0ZV9kYXRhX3QgKmNvbXBfZGF0YSA9ICh1c2JfaXNvY19jb21wbGV0ZV9kYXRhX3QqKWRhdGE7CisKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGVwaWQ7CisJaW50IGVwaWRfZG9uZTsKKwlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdjsKKworCURCRkVOVEVSOworCisJZGJnX2lzb2MoImRtYThfc3ViM19kZXNjciAoSVNPQykgYm90dG9tIGhhbGYuIik7CisKKwlmb3IgKGVwaWQgPSAwOyBlcGlkIDwgTkJSX09GX0VQSURTIC0gMTsgZXBpZCsrKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJc2F2ZV9mbGFncyhmbGFncyk7CisJCWNsaSgpOworCisJCWVwaWRfZG9uZSA9IDA7CisKKwkJLyogVGhlIGRlc2NyaXB0b3IgaW50ZXJydXB0IGhhbmRsZXIgaGFzIG1hcmtlZCBhbGwgdHJhbnNtaXR0ZWQgaXNvY2guIG91dAorCQkgICBVUkJzIHdpdGggVFJBTlNGRVJfRE9ORS4gIE5vdyB3ZSB0cmF2ZXJzZSBhbGwgZXBpZHMgYW5kIGZvciBhbGwgdGhhdAorIAkJICAgaGF2ZSBpc29jaC4gb3V0IHRyYWZmaWMgdHJhdmVyc2UgaXRzIFVSQiBsaXN0IGFuZCBjb21wbGV0ZSB0aGUKKwkJICAgdHJhbnNtaXR0ZWQgVVJCLgorCQkqLworCisJCXdoaWxlICghZXBpZF9kb25lKSB7CisKKwkJCS8qIEdldCB0aGUgZmlyc3QgdXJiIChpZiBhbnkpLiAqLworCQkJdXJiID0gdXJiX2xpc3RfZmlyc3QoZXBpZCk7CisJCQlpZiAodXJiID09IDApIHsKKwkJCQllcGlkX2RvbmUgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgIT0gUElQRV9JU09DSFJPTk9VUykgeworCQkJCQllcGlkX2RvbmUgPSAxOworCQkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKCF1c2JfcGlwZW91dCh1cmItPnBpcGUpKSB7CisJCQkJLyogZGVzY3IgaW50ZXJydXB0cyBhcmUgZ2VuZXJhdGVkIG9ubHkgZm9yIG91dCBwaXBlcy4gKi8KKwkJCQllcGlkX2RvbmUgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlkYmdfaXNvYygiQ2hlY2sgZXBpZCAlZCwgU0IgMHglcCIsIGVwaWQsIChjaGFyKilUeElzb2NFUExpc3RbZXBpZF0uc3ViKTsKKworCQkJdXJiX3ByaXYgPSAoZXRyYXhfdXJiX3ByaXZfdCAqKXVyYi0+aGNwcml2OworCQkJYXNzZXJ0KHVyYl9wcml2KTsKKworCQkJaWYgKHVyYl9wcml2LT51cmJfc3RhdGUgPT0gVFJBTlNGRVJfRE9ORSkgeworCQkJCWludCBpOworCQkJCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICpwYWNrZXQ7CisKKwkJCQkvKiBUaGlzIHVyYiBoYXMgYmVlbiBzZW50LiAqLworCQkJCWRiZ19pc29jKCJDb21wbGV0aW5nIGlzb2Mgb3V0IFVSQiAweCVwIiwgdXJiKTsKKworCQkJCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJCQkJcGFja2V0ID0gJnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV07CisJCQkJCXBhY2tldC0+c3RhdHVzID0gMDsKKwkJCQkJcGFja2V0LT5hY3R1YWxfbGVuZ3RoID0gcGFja2V0LT5sZW5ndGg7CisJCQkJfQorCisJCQkJZXRyYXhfdXNiX2NvbXBsZXRlX2lzb2NfdXJiKHVyYiwgMCk7CisKKwkJCQlpZiAodXJiX2xpc3RfZW1wdHkoZXBpZCkpIHsKKwkJCQkJZXRyYXhfdXNiX2ZyZWVfZXBpZChlcGlkKTsKKwkJCQkJZXBpZF9kb25lID0gMTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWVwaWRfZG9uZSA9IDE7CisJCQl9CisJCX0KKwkJcmVzdG9yZV9mbGFncyhmbGFncyk7CisKKwl9CisJa21lbV9jYWNoZV9mcmVlKGlzb2NfY29tcGxfY2FjaGUsIGNvbXBfZGF0YSk7CisKKwlEQkZFWElUOworfQorCisKKworc3RhdGljIGlycXJldHVybl90IGV0cmF4X3VzYl9yeF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqdmhjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJZXRyYXhfdXJiX3ByaXZfdCAqdXJiX3ByaXY7CisJaW50IGVwaWQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBJc29jIGRpYWdub3N0aWNzLiAqLworCXN0YXRpYyBpbnQgY3Vycl9mbSA9IDA7CisJc3RhdGljIGludCBwcmV2X2ZtID0gMDsKKworCURCRkVOVEVSOworCisJLyogQ2xlYXIgdGhpcyBpbnRlcnJ1cHQuICovCisJKlJfRE1BX0NIOV9DTFJfSU5UUiA9IElPX1NUQVRFKFJfRE1BX0NIOV9DTFJfSU5UUiwgY2xyX2VvcCwgZG8pOworCisJLyogTm90ZSB0aGF0IHRoaXMgd2hpbGUgbG9vcCBhc3N1bWVzIHRoYXQgYWxsIHBhY2tldHMgc3BhbiBvbmx5CisJICAgb25lIHJ4IGRlc2NyaXB0b3IuICovCisKKwkvKiBUaGUgcmVhc29uIHdlIGNsaSBoZXJlIGlzIHRoYXQgd2UgY2FsbCB0aGUgZHJpdmVyJ3MgY2FsbGJhY2sgZnVuY3Rpb25zLiAqLworCXNhdmVfZmxhZ3MoZmxhZ3MpOworCWNsaSgpOworCisJd2hpbGUgKG15TmV4dFJ4RGVzYy0+c3RhdHVzICYgSU9fTUFTSyhVU0JfSU5fc3RhdHVzLCBlb3ApKSB7CisKKwkJZXBpZCA9IElPX0VYVFJBQ1QoVVNCX0lOX3N0YXR1cywgZXBpZCwgbXlOZXh0UnhEZXNjLT5zdGF0dXMpOworCQl1cmIgPSB1cmJfbGlzdF9maXJzdChlcGlkKTsKKworCQkvL3ByaW50aygiZW9wIGZvciBlcGlkICVkLCBmaXJzdCB1cmIgMHglbHhcbiIsIGVwaWQsICh1bnNpZ25lZCBsb25nKXVyYik7CisKKwkJaWYgKCF1cmIpIHsKKwkJCWVycigiTm8gdXJiIGZvciBlcGlkICVkIGluIHJ4IGludGVycnVwdCIsIGVwaWQpOworCQkJX19kdW1wX2VwdF9kYXRhKGVwaWQpOworCQkJZ290byBza2lwX291dDsKKwkJfQorCisJCS8qIE5vdGUgdGhhdCB3ZSBjYW5ub3QgaW5kZXNjcmltaW5hdGVseSBhc3NlcnQodXNiX3BpcGVpbih1cmItPnBpcGUpKSBzaW5jZQorCQkgICBjdHJsIHBpcGVzIGFyZSBub3QuICovCisKKwkJaWYgKG15TmV4dFJ4RGVzYy0+c3RhdHVzICYgSU9fTUFTSyhVU0JfSU5fc3RhdHVzLCBlcnJvcikpIHsKKwkJCV9fdTMyIHJfdXNiX2VwdF9kYXRhOworCQkJaW50IG5vX2Vycm9yID0gMDsKKworCQkJYXNzZXJ0KHRlc3RfYml0KGVwaWQsICh2b2lkICopJmVwaWRfdXNhZ2VfYml0bWFzaykpOworCisJCQkqUl9VU0JfRVBUX0lOREVYID0gSU9fRklFTEQoUl9VU0JfRVBUX0lOREVYLCB2YWx1ZSwgZXBpZCk7CisJCQlub3AoKTsKKwkJCWlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0lTT0NIUk9OT1VTKSB7CisJCQkJcl91c2JfZXB0X2RhdGEgPSAqUl9VU0JfRVBUX0RBVEFfSVNPOworCisJCQkJaWYgKChyX3VzYl9lcHRfZGF0YSAmIElPX01BU0soUl9VU0JfRVBUX0RBVEFfSVNPLCB2YWxpZCkpICYmCisJCQkJICAgIChJT19FWFRSQUNUKFJfVVNCX0VQVF9EQVRBX0lTTywgZXJyb3JfY29kZSwgcl91c2JfZXB0X2RhdGEpID09IDApICYmCisJCQkJICAgIChteU5leHRSeERlc2MtPnN0YXR1cyAmIElPX01BU0soVVNCX0lOX3N0YXR1cywgbm9kYXRhKSkpIHsKKwkJCQkJLyogTm90IGFuIGVycm9yLCBqdXN0IGEgZmFpbHVyZSB0byByZWNlaXZlIGFuIGV4cGVjdGVkIGlzbworCQkJCQkgICBpbiBwYWNrZXQgaW4gdGhpcyBmcmFtZS4gIFRoaXMgaXMgbm90IGRvY3VtZW50ZWQKKwkJCQkJICAgaW4gdGhlIGRlc2lnbmVycyByZWZlcmVuY2UuCisJCQkJCSovCisJCQkJCW5vX2Vycm9yKys7CisJCQkJfSBlbHNlIHsKKwkJCQkJd2FybigiUl9VU0JfRVBUX0RBVEFfSVNPIGZvciBlcGlkICVkID0gMHgleCIsIGVwaWQsIHJfdXNiX2VwdF9kYXRhKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXJfdXNiX2VwdF9kYXRhID0gKlJfVVNCX0VQVF9EQVRBOworCQkJCXdhcm4oIlJfVVNCX0VQVF9EQVRBIGZvciBlcGlkICVkID0gMHgleCIsIGVwaWQsIHJfdXNiX2VwdF9kYXRhKTsKKwkJCX0KKworCQkJaWYgKCFub19lcnJvcil7CisJCQkJd2FybigiZXJyb3IgaW4gcnggZGVzYy0+c3RhdHVzLCBlcGlkICVkLCBmaXJzdCB1cmIgPSAweCVseCIsCisJCQkJICAgICBlcGlkLCAodW5zaWduZWQgbG9uZyl1cmIpOworCQkJCV9fZHVtcF9pbl9kZXNjKG15TmV4dFJ4RGVzYyk7CisKKwkJCQl3YXJuKCJSX1VTQl9TVEFUVVMgPSAweCV4IiwgKlJfVVNCX1NUQVRVUyk7CisKKwkJCQkvKiBDaGVjayB0aGF0IGVwdCB3YXMgZGlzYWJsZWQgd2hlbiBlcnJvciBvY2N1cnJlZC4gKi8KKwkJCQlzd2l0Y2ggKHVzYl9waXBldHlwZSh1cmItPnBpcGUpKSB7CisJCQkJY2FzZSBQSVBFX0JVTEs6CisJCQkJCWFzc2VydCghKFR4QnVsa0VQTGlzdFtlcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFBJUEVfQ09OVFJPTDoKKwkJCQkJYXNzZXJ0KCEoVHhDdHJsRVBMaXN0W2VwaWRdLmNvbW1hbmQgJiBJT19NQVNLKFVTQl9FUF9jb21tYW5kLCBlbmFibGUpKSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgUElQRV9JTlRFUlJVUFQ6CisJCQkJCWFzc2VydCghKFR4SW50ckVQTGlzdFtlcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJCQkJCWFzc2VydCghKFR4SXNvY0VQTGlzdFtlcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkpOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQl3YXJuKCJldHJheF91c2JfcnhfaW50ZXJydXB0OiBiYWQgcGlwZXR5cGUgJWQgaW4gdXJiIDB4JXAiLAorCQkJCQkgICAgIHVzYl9waXBldHlwZSh1cmItPnBpcGUpLAorCQkJCQkgICAgIHVyYik7CisJCQkJfQorCQkJCWV0cmF4X3VzYl9jb21wbGV0ZV91cmIodXJiLCAtRVBST1RPKTsKKwkJCQlnb3RvIHNraXBfb3V0OworCQkJfQorCQl9CisKKwkJdXJiX3ByaXYgPSAoZXRyYXhfdXJiX3ByaXZfdCAqKXVyYi0+aGNwcml2OworCQlhc3NlcnQodXJiX3ByaXYpOworCisJCWlmICgodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9CVUxLKSB8fAorCQkgICAgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQ09OVFJPTCkgfHwKKwkJICAgICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0lOVEVSUlVQVCkpIHsKKworCQkJaWYgKG15TmV4dFJ4RGVzYy0+c3RhdHVzICYgSU9fTUFTSyhVU0JfSU5fc3RhdHVzLCBub2RhdGEpKSB7CisJCQkJLyogV2UgZ2V0IG5vZGF0YSBmb3IgZW1wdHkgZGF0YSB0cmFuc2FjdGlvbnMsIGFuZCB0aGUgcnggZGVzY3JpcHRvcidzCisJCQkJICAgaHdfbGVuIGZpZWxkIGlzIG5vdCB2YWxpZCBpbiB0aGF0IGNhc2UuIE5vIGRhdGEgdG8gY29weSBpbiBvdGhlcgorCQkJCSAgIHdvcmRzLiAqLworCQkJfSBlbHNlIHsKKwkJCQkvKiBNYWtlIHN1cmUgdGhlIGRhdGEgZml0cyBpbiB0aGUgYnVmZmVyLiAqLworCQkJCWFzc2VydCh1cmJfcHJpdi0+cnhfb2Zmc2V0ICsgbXlOZXh0UnhEZXNjLT5od19sZW4KKwkJCQkgICAgICAgPD0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKworCQkJCW1lbWNweSh1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYl9wcml2LT5yeF9vZmZzZXQsCisJCQkJICAgICAgIHBoeXNfdG9fdmlydChteU5leHRSeERlc2MtPmJ1ZiksIG15TmV4dFJ4RGVzYy0+aHdfbGVuKTsKKwkJCQl1cmJfcHJpdi0+cnhfb2Zmc2V0ICs9IG15TmV4dFJ4RGVzYy0+aHdfbGVuOworCQkJfQorCisJCQlpZiAobXlOZXh0UnhEZXNjLT5zdGF0dXMgJiBJT19NQVNLKFVTQl9JTl9zdGF0dXMsIGVvdCkpIHsKKwkJCQlpZiAoKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQ09OVFJPTCkgJiYKKwkJCQkgICAgKChUeEN0cmxFUExpc3RbdXJiX3ByaXYtPmVwaWRdLmNvbW1hbmQgJiBJT19NQVNLKFVTQl9FUF9jb21tYW5kLCBlbmFibGUpKSA9PQorCQkJCSAgICAgSU9fU1RBVEUoVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSwgeWVzKSkpIHsKKwkJCQkJLyogVGhlIEVQIGlzIHN0aWxsIGVuYWJsZWQsIHNvIHRoZSBPVVQgcGFja2V0IHVzZWQgdG8gYWNrCisJCQkJCSAgIHRoZSBpbiBkYXRhIGlzIHByb2JhYmx5IG5vdCBwcm9jZXNzZWQgeWV0LiAgSWYgdGhlIEVQCisJCQkJCSAgIHN1YiBwb2ludGVyIGhhcyBub3QgbW92ZWQgYmV5b25kIHVyYl9wcml2LT5sYXN0X3NiIG1hcmsKKwkJCQkJICAgaXQgZm9yIGEgZGVzY3JpcHRvciBpbnRlcnJ1cHQgYW5kIGNvbXBsZXRlIHRoZSB1cmIgaW4KKwkJCQkJICAgdGhlIGRlc2NyaXB0b3IgaW50ZXJydXB0IGhhbmRsZXIuCisJCQkJCSovCisJCQkJCVVTQl9TQl9EZXNjX3QgKnN1YiA9IFR4Q3RybEVQTGlzdFt1cmJfcHJpdi0+ZXBpZF0uc3ViID8gcGh5c190b192aXJ0KFR4Q3RybEVQTGlzdFt1cmJfcHJpdi0+ZXBpZF0uc3ViKSA6IDA7CisKKwkJCQkJd2hpbGUgKChzdWIgIT0gTlVMTCkgJiYgKHN1YiAhPSB1cmJfcHJpdi0+bGFzdF9zYikpIHsKKwkJCQkJCXN1YiA9IHN1Yi0+bmV4dCA/IHBoeXNfdG9fdmlydChzdWItPm5leHQpIDogMDsKKwkJCQkJfQorCQkJCQlpZiAoc3ViICE9IE5VTEwpIHsKKwkJCQkJCS8qIFRoZSB1cmIgaGFzIG5vdCBiZWVuIGZ1bGx5IHByb2Nlc3NlZC4gKi8KKwkJCQkJCXVyYl9wcml2LT51cmJfc3RhdGUgPSBXQUlUSU5HX0ZPUl9ERVNDUl9JTlRSOworCQkJCQl9IGVsc2UgeworCQkJCQkJd2FybigiKENUUkwpIGVwaWQgZW5hYmxlZCBhbmQgdXJiICgweCVwKSBwcm9jZXNzZWQsIGVwLT5zdWI9MHglcCIsIHVyYiwgKGNoYXIqKVR4Q3RybEVQTGlzdFt1cmJfcHJpdi0+ZXBpZF0uc3ViKTsKKwkJCQkJCWV0cmF4X3VzYl9jb21wbGV0ZV91cmIodXJiLCAwKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWV0cmF4X3VzYl9jb21wbGV0ZV91cmIodXJiLCAwKTsKKwkJCQl9CisJCQl9CisKKwkJfSBlbHNlIGlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0lTT0NIUk9OT1VTKSB7CisKKwkJCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICpwYWNrZXQ7CisKKwkJCWlmICh1cmJfcHJpdi0+dXJiX3N0YXRlID09IFVOTElOSykgeworCQkJCWluZm8oIklnbm9yaW5nIHJ4IGRhdGEgZm9yIHVyYiBiZWluZyB1bmxpbmtlZC4iKTsKKwkJCQlnb3RvIHNraXBfb3V0OworCQkJfSBlbHNlIGlmICh1cmJfcHJpdi0+dXJiX3N0YXRlID09IE5PVF9TVEFSVEVEKSB7CisJCQkJaW5mbygiV2hhdD8gR290IHJ4IGRhdGEgZm9yIHVyYiB0aGF0IGlzbid0IHN0YXJ0ZWQ/Iik7CisJCQkJZ290byBza2lwX291dDsKKwkJCX0KKworCQkJcGFja2V0ID0gJnVyYi0+aXNvX2ZyYW1lX2Rlc2NbdXJiX3ByaXYtPmlzb2NfcGFja2V0X2NvdW50ZXJdOworCQkJcGFja2V0LT5zdGF0dXMgPSAwOworCisJCQlpZiAobXlOZXh0UnhEZXNjLT5zdGF0dXMgJiBJT19NQVNLKFVTQl9JTl9zdGF0dXMsIG5vZGF0YSkpIHsKKwkJCQkvKiBXZSBnZXQgbm9kYXRhIGZvciBlbXB0eSBkYXRhIHRyYW5zYWN0aW9ucywgYW5kIHRoZSByeCBkZXNjcmlwdG9yJ3MKKwkJCQkgICBod19sZW4gZmllbGQgaXMgbm90IHZhbGlkIGluIHRoYXQgY2FzZS4gV2UgY29weSAwIGJ5dGVzIGhvd2V2ZXIgdG8KKwkJCQkgICBzdGF5IGluIHN5bmNoLiAqLworCQkJCXBhY2tldC0+YWN0dWFsX2xlbmd0aCA9IDA7CisJCQl9IGVsc2UgeworCQkJCXBhY2tldC0+YWN0dWFsX2xlbmd0aCA9IG15TmV4dFJ4RGVzYy0+aHdfbGVuOworCQkJCS8qIE1ha2Ugc3VyZSB0aGUgZGF0YSBmaXRzIGluIHRoZSBidWZmZXIuICovCisJCQkJYXNzZXJ0KHBhY2tldC0+YWN0dWFsX2xlbmd0aCA8PSBwYWNrZXQtPmxlbmd0aCk7CisJCQkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgcGFja2V0LT5vZmZzZXQsCisJCQkJICAgICAgIHBoeXNfdG9fdmlydChteU5leHRSeERlc2MtPmJ1ZiksIHBhY2tldC0+YWN0dWFsX2xlbmd0aCk7CisJCQl9CisKKwkJCS8qIEluY3JlbWVudCB0aGUgcGFja2V0IGNvdW50ZXIuICovCisJCQl1cmJfcHJpdi0+aXNvY19wYWNrZXRfY291bnRlcisrOworCisJCQkvKiBOb3RlIHRoYXQgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgZW90IGZpZWxkIGluIHRoZSByeCBkZXNjcmlwdG9yJ3Mgc3RhdHVzLgorCQkJICAgSXQgd2lsbCBhbHdheXMgYmUgc2V0IGZvciBpc29jIHRyYWZmaWMuICovCisJCQlpZiAodXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9PSB1cmJfcHJpdi0+aXNvY19wYWNrZXRfY291bnRlcikgeworCisJCQkJLyogT3V0LW9mLXN5bmNoIGRpYWdub3N0aWNzLiAqLworCQkJCWN1cnJfZm0gPSAoKlJfVVNCX0ZNX05VTUJFUiAmIDB4N2ZmKTsKKwkJCQlpZiAoKChwcmV2X2ZtICsgdXJiX3ByaXYtPmlzb2NfcGFja2V0X2NvdW50ZXIpICUgKDB4N2ZmICsgMSkpICE9IGN1cnJfZm0pIHsKKwkJCQkJLyogVGhpcyB0ZXN0IGlzIHdyb25nLCBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGlzb2MKKwkJCQkJICAgaW4gZW5kcG9pbnQgYWN0aXZlIGl0IHdpbGwgYWx3YXlzIGNhbGN1bGF0ZSB3cm9uZworCQkJCQkgICBzaW5jZSBwcmV2X2ZtIGlzIHNoYXJlZCBieSBhbGwgZW5kcG9pbnRzLgorCisJCQkJCSAgIEZJWE1FIE1ha2UgdGhpcyBjaGVjayBwZXIgVVJCIHVzaW5nIHVyYi0+c3RhcnRfZnJhbWUuCisJCQkJCSovCisJCQkJCWRiZ19pc29jKCJPdXQgb2Ygc3luY2g/IFByZXZpb3VzIGZyYW1lID0gJWQsIGN1cnJlbnQgZnJhbWUgPSAlZCIsCisJCQkJCQkgcHJldl9mbSwgY3Vycl9mbSk7CisKKwkJCQl9CisJCQkJcHJldl9mbSA9IGN1cnJfZm07CisKKwkJCQkvKiBDb21wbGV0ZSB0aGUgdXJiIHdpdGggc3RhdHVzIE9LLiAqLworCQkJCWV0cmF4X3VzYl9jb21wbGV0ZV9pc29jX3VyYih1cmIsIDApOworCQkJfQorCQl9CisKKwlza2lwX291dDoKKworCQkvKiBETUEgSU4gY2FjaGUgYnVnLiBGbHVzaCB0aGUgRE1BIElOIGJ1ZmZlciBmcm9tIHRoZSBjYWNoZS4gKHN0cnVjdCBldHJheF9kbWFfZGVzY3IKKwkJICAgaGFzIHRoZSBzYW1lIGxheW91dCBhcyBVU0JfSU5fRGVzYyBmb3IgdGhlIHJlbGV2YW50IGZpZWxkcy4pICovCisJCXByZXBhcmVfcnhfZGVzY3JpcHRvcigoc3RydWN0IGV0cmF4X2RtYV9kZXNjciopbXlOZXh0UnhEZXNjKTsKKworCQlteVByZXZSeERlc2MgPSBteU5leHRSeERlc2M7CisJCW15UHJldlJ4RGVzYy0+Y29tbWFuZCB8PSBJT19NQVNLKFVTQl9JTl9jb21tYW5kLCBlb2wpOworCQlteUxhc3RSeERlc2MtPmNvbW1hbmQgJj0gfklPX01BU0soVVNCX0lOX2NvbW1hbmQsIGVvbCk7CisJCW15TGFzdFJ4RGVzYyA9IG15UHJldlJ4RGVzYzsKKworCQlteU5leHRSeERlc2MtPnN0YXR1cyA9IDA7CisJCW15TmV4dFJ4RGVzYyA9IHBoeXNfdG9fdmlydChteU5leHRSeERlc2MtPm5leHQpOworCX0KKworCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCisJREJGRVhJVDsKKworICAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKworLyogVGhpcyBmdW5jdGlvbiB3aWxsIHVubGluayB0aGUgU0IgZGVzY3JpcHRvcnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdXJiLiAqLworc3RhdGljIGludCBldHJheF9yZW1vdmVfZnJvbV9zYl9saXN0KHN0cnVjdCB1cmIgKnVyYikKK3sKKwlVU0JfU0JfRGVzY190ICpuZXh0X3NiLCAqZmlyc3Rfc2IsICpsYXN0X3NiOworCWV0cmF4X3VyYl9wcml2X3QgKnVyYl9wcml2OworCWludCBpID0gMDsKKworCURCRkVOVEVSOworCisJdXJiX3ByaXYgPSAoZXRyYXhfdXJiX3ByaXZfdCAqKXVyYi0+aGNwcml2OworCWFzc2VydCh1cmJfcHJpdik7CisKKwkvKiBKdXN0IGEgc2FuaXR5IGNoZWNrLiBTaW5jZSB3ZSBkb24ndCBmaWRkbGUgd2l0aCB0aGUgRE1BIGxpc3QgdGhlIEVQIGRlc2NyaXB0b3IKKwkgICBkb2Vzbid0IHJlYWxseSBuZWVkIHRvIGJlIGRpc2FibGVkLCBpdCdzIGp1c3QgdGhhdCB3ZSBleHBlY3QgaXQgdG8gYmUuICovCisJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQlVMSykgeworCQlhc3NlcnQoIShUeEJ1bGtFUExpc3RbdXJiX3ByaXYtPmVwaWRdLmNvbW1hbmQgJiBJT19NQVNLKFVTQl9FUF9jb21tYW5kLCBlbmFibGUpKSk7CisJfSBlbHNlIGlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0NPTlRST0wpIHsKKwkJYXNzZXJ0KCEoVHhDdHJsRVBMaXN0W3VyYl9wcml2LT5lcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkpOworCX0KKworCWZpcnN0X3NiID0gdXJiX3ByaXYtPmZpcnN0X3NiOworCWxhc3Rfc2IgPSB1cmJfcHJpdi0+bGFzdF9zYjsKKworCWFzc2VydChmaXJzdF9zYik7CisJYXNzZXJ0KGxhc3Rfc2IpOworCisJd2hpbGUgKGZpcnN0X3NiICE9IGxhc3Rfc2IpIHsKKwkJbmV4dF9zYiA9IChVU0JfU0JfRGVzY190ICopcGh5c190b192aXJ0KGZpcnN0X3NiLT5uZXh0KTsKKwkJa21lbV9jYWNoZV9mcmVlKHVzYl9kZXNjX2NhY2hlLCBmaXJzdF9zYik7CisJCWZpcnN0X3NiID0gbmV4dF9zYjsKKwkJaSsrOworCX0KKwlrbWVtX2NhY2hlX2ZyZWUodXNiX2Rlc2NfY2FjaGUsIGxhc3Rfc2IpOworCWkrKzsKKwlkYmdfc2IoIiVkIFNCIGRlc2NyaXB0b3JzIGZyZWVkIiwgaSk7CisJLyogQ29tcGFyZSBpIHdpdGggdXJiLT5udW1iZXJfb2ZfcGFja2V0cyBmb3IgSXNvYyB0cmFmZmljLgorCSAgIFNob3VsZCBiZSBzYW1lIHdoZW4gY2FsbGluZyB1bmxpbmtfdXJiICovCisKKwlEQkZFWElUOworCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgZXRyYXhfdXNiX3N1Ym1pdF9idWxrX3VyYihzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50IGVwaWQ7CisJaW50IGVtcHR5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZXRyYXhfdXJiX3ByaXZfdCAqdXJiX3ByaXY7CisKKwlEQkZFTlRFUjsKKworCS8qIEVwaWQgYWxsb2NhdGlvbiwgZW1wdHkgY2hlY2sgYW5kIGxpc3QgYWRkIG11c3QgYmUgcHJvdGVjdGVkLgorCSAgIFJlYWQgYWJvdXQgdGhpcyBpbiBldHJheF91c2Jfc3VibWl0X2N0cmxfdXJiLiAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVyYl9saXN0X2xvY2ssIGZsYWdzKTsKKwllcGlkID0gZXRyYXhfdXNiX3NldHVwX2VwaWQodXJiKTsKKwlpZiAoZXBpZCA9PSAtMSkgeworCQlEQkZFWElUOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cmJfbGlzdF9sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwllbXB0eSA9IHVyYl9saXN0X2VtcHR5KGVwaWQpOworCXVyYl9saXN0X2FkZCh1cmIsIGVwaWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVyYl9saXN0X2xvY2ssIGZsYWdzKTsKKworCWRiZ19idWxrKCJBZGRpbmcgYnVsayAlcyB1cmIgMHglbHggdG8gJXMgbGlzdCwgZXBpZCAlZCIsCisJCSB1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyAiSU4iIDogIk9VVCIsICh1bnNpZ25lZCBsb25nKXVyYiwgZW1wdHkgPyAiZW1wdHkiIDogIiIsIGVwaWQpOworCisJLyogTWFyayB0aGUgdXJiIGFzIGJlaW5nIGluIHByb2dyZXNzLiAqLworCXVyYi0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCisJLyogU2V0dXAgdGhlIGhjcHJpdiBkYXRhLiAqLworCXVyYl9wcml2ID0ga21hbGxvYyhzaXplb2YoZXRyYXhfdXJiX3ByaXZfdCksIEtNQUxMT0NfRkxBRyk7CisJYXNzZXJ0KHVyYl9wcml2ICE9IE5VTEwpOworCS8qIFRoaXMgc2V0cyByeF9vZmZzZXQgdG8gMC4gKi8KKwltZW1zZXQodXJiX3ByaXYsIDAsIHNpemVvZihldHJheF91cmJfcHJpdl90KSk7CisJdXJiX3ByaXYtPnVyYl9zdGF0ZSA9IE5PVF9TVEFSVEVEOworCXVyYi0+aGNwcml2ID0gdXJiX3ByaXY7CisKKwlpZiAoZW1wdHkpIHsKKwkJZXRyYXhfdXNiX2FkZF90b19idWxrX3NiX2xpc3QodXJiLCBlcGlkKTsKKwl9CisKKwlEQkZFWElUOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9hZGRfdG9fYnVsa19zYl9saXN0KHN0cnVjdCB1cmIgKnVyYiwgaW50IGVwaWQpCit7CisJVVNCX1NCX0Rlc2NfdCAqc2JfZGVzYzsKKwlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdiA9IChldHJheF91cmJfcHJpdl90ICopdXJiLT5oY3ByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljaGFyIG1heGxlbjsKKworCURCRkVOVEVSOworCisJZGJnX2J1bGsoImV0cmF4X3VzYl9hZGRfdG9fYnVsa19zYl9saXN0LCB1cmIgMHglbHgiLCAodW5zaWduZWQgbG9uZyl1cmIpOworCisJbWF4bGVuID0gdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLCB1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKKworCXNiX2Rlc2MgPSAoVVNCX1NCX0Rlc2NfdCopa21lbV9jYWNoZV9hbGxvYyh1c2JfZGVzY19jYWNoZSwgU0xBQl9GTEFHKTsKKwlhc3NlcnQoc2JfZGVzYyAhPSBOVUxMKTsKKwltZW1zZXQoc2JfZGVzYywgMCwgc2l6ZW9mKFVTQl9TQl9EZXNjX3QpKTsKKworCisJaWYgKHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpIHsKKworCQlkYmdfYnVsaygiR3JhYmJpbmcgYnVsayBPVVQsIHVyYiAweCVseCwgZXBpZCAlZCIsICh1bnNpZ25lZCBsb25nKXVyYiwgZXBpZCk7CisKKwkJLyogVGhpcyBpcyBwcm9iYWJseSBhIHNhbml0eSBjaGVjayBvZiB0aGUgYnVsayB0cmFuc2FjdGlvbiBsZW5ndGgKKwkJICAgbm90IGJlaW5nIGxhcmdlciB0aGFuIDY0IGtCLiAqLworCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID4gMHhmZmZmKSB7CisJCQlwYW5pYygidXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID4gMHhmZmZmIik7CisJCX0KKworCQlzYl9kZXNjLT5zd19sZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisKKwkJLyogVGhlIHJlbSBmaWVsZCBpcyBkb24ndCBjYXJlIGlmIGl0J3Mgbm90IGEgZnVsbC1sZW5ndGggdHJhbnNmZXIsIHNvIHNldHRpbmcKKwkJICAgaXQgc2hvdWxkbid0IGh1cnQuIEFsc28sIHJlbSBpc24ndCB1c2VkIGZvciBPVVQgdHJhZmZpYy4gKi8KKwkJc2JfZGVzYy0+Y29tbWFuZCA9IChJT19GSUVMRChVU0JfU0JfY29tbWFuZCwgcmVtLCAwKSB8CisJCQkJICAgIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCB0dCwgb3V0KSB8CisJCQkJICAgIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb3QsIHllcykgfAorCQkJCSAgICBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW9sLCB5ZXMpKTsKKworCQkvKiBUaGUgZnVsbCBmaWVsZCBpcyBzZXQgdG8geWVzLCBldmVuIGlmIHdlIGRvbid0IGFjdHVhbGx5IGNoZWNrIHRoYXQgdGhpcyBpcworCQkgICBhIGZ1bGwtbGVuZ3RoIHRyYW5zZmVyIChpLmUuLCB0aGF0IHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggJSBtYXhsZW4gPSAwKS4KKwkJICAgU2V0dGluZyBmdWxsIHByZXZlbnRzIHRoZSBVU0IgY29udHJvbGxlciBmcm9tIHNlbmRpbmcgYW4gZW1wdHkgcGFja2V0IGluCisJCSAgIHRoYXQgY2FzZS4gIEhvd2V2ZXIsIGlmIFVSQl9aRVJPX1BBQ0tFVCB3YXMgc2V0IHdlIHdhbnQgdGhhdC4gKi8KKwkJaWYgKCEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9aRVJPX1BBQ0tFVCkpIHsKKwkJCXNiX2Rlc2MtPmNvbW1hbmQgfD0gSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGZ1bGwsIHllcyk7CisJCX0KKworCQlzYl9kZXNjLT5idWYgPSB2aXJ0X3RvX3BoeXModXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQlzYl9kZXNjLT5uZXh0ID0gMDsKKworCX0gZWxzZSBpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpKSB7CisKKwkJZGJnX2J1bGsoIkdyYWJiaW5nIGJ1bGsgSU4sIHVyYiAweCVseCwgZXBpZCAlZCIsICh1bnNpZ25lZCBsb25nKXVyYiwgZXBpZCk7CisKKwkJc2JfZGVzYy0+c3dfbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID8KKwkJCSh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLSAxKSAvIG1heGxlbiArIDEgOiAwOworCisJCS8qIFRoZSByZW0gZmllbGQgaXMgZG9uJ3QgY2FyZSBpZiBpdCdzIG5vdCBhIGZ1bGwtbGVuZ3RoIHRyYW5zZmVyLCBzbyBzZXR0aW5nCisJCSAgIGl0IHNob3VsZG4ndCBodXJ0LiAqLworCQlzYl9kZXNjLT5jb21tYW5kID0KKwkJCShJT19GSUVMRChVU0JfU0JfY29tbWFuZCwgcmVtLAorCQkJCSAgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoICUgbWF4bGVuKSB8CisJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIHR0LCBpbikgfAorCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb3QsIHllcykgfAorCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb2wsIHllcykpOworCisJCXNiX2Rlc2MtPmJ1ZiA9IDA7CisJCXNiX2Rlc2MtPm5leHQgPSAwOworCX0KKworCXVyYl9wcml2LT5maXJzdF9zYiA9IHNiX2Rlc2M7CisJdXJiX3ByaXYtPmxhc3Rfc2IgPSBzYl9kZXNjOworCXVyYl9wcml2LT5lcGlkID0gZXBpZDsKKworCXVyYi0+aGNwcml2ID0gdXJiX3ByaXY7CisKKwkvKiBSZXNldCB0b2dnbGUgYml0cyBhbmQgcmVzZXQgZXJyb3IgY291bnQuICovCisJc2F2ZV9mbGFncyhmbGFncyk7CisJY2xpKCk7CisKKwkqUl9VU0JfRVBUX0lOREVYID0gSU9fRklFTEQoUl9VU0JfRVBUX0lOREVYLCB2YWx1ZSwgZXBpZCk7CisJbm9wKCk7CisKKwkvKiBGSVhNRTogSXMgdGhpcyBhIHNwZWNpYWwgY2FzZSBzaW5jZSB0aGUgaG9sZCBmaWVsZCBpcyBjaGVja2VkLAorCSAgIG9yIHNob3VsZCB3ZSBjaGVjayBob2xkIGluIGEgbG90IG9mIG90aGVyIGNhc2VzIGFzIHdlbGw/ICovCisJaWYgKCpSX1VTQl9FUFRfREFUQSAmIElPX01BU0soUl9VU0JfRVBUX0RBVEEsIGhvbGQpKSB7CisJCXBhbmljKCJIb2xkIHdhcyBzZXQgaW4gJXMiLCBfX0ZVTkNUSU9OX18pOworCX0KKworCS8qIFJlc2V0IGVycm9yIGNvdW50ZXJzIChyZWdhcmRsZXNzIG9mIHdoaWNoIGRpcmVjdGlvbiB0aGlzIHRyYWZmaWMgaXMpLiAqLworCSpSX1VTQl9FUFRfREFUQSAmPQorCQl+KElPX01BU0soUl9VU0JfRVBUX0RBVEEsIGVycm9yX2NvdW50X2luKSB8CisJCSAgSU9fTUFTSyhSX1VTQl9FUFRfREFUQSwgZXJyb3JfY291bnRfb3V0KSk7CisKKwkvKiBTb2Z0d2FyZSBtdXN0IHByZXNldCB0aGUgdG9nZ2xlIGJpdHMuICovCisJaWYgKHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpIHsKKwkJY2hhciB0b2dnbGUgPQorCQkJdXNiX2dldHRvZ2dsZSh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLCB1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKKwkJKlJfVVNCX0VQVF9EQVRBICY9IH5JT19NQVNLKFJfVVNCX0VQVF9EQVRBLCB0X291dCk7CisJCSpSX1VTQl9FUFRfREFUQSB8PSBJT19GSUVMRChSX1VTQl9FUFRfREFUQSwgdF9vdXQsIHRvZ2dsZSk7CisJfSBlbHNlIHsKKwkJY2hhciB0b2dnbGUgPQorCQkJdXNiX2dldHRvZ2dsZSh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLCB1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKKwkJKlJfVVNCX0VQVF9EQVRBICY9IH5JT19NQVNLKFJfVVNCX0VQVF9EQVRBLCB0X2luKTsKKwkJKlJfVVNCX0VQVF9EQVRBIHw9IElPX0ZJRUxEKFJfVVNCX0VQVF9EQVRBLCB0X2luLCB0b2dnbGUpOworCX0KKworCS8qIEFzc2VydCB0aGF0IHRoZSBFUCBkZXNjcmlwdG9yIGlzIGRpc2FibGVkLiAqLworCWFzc2VydCghKFR4QnVsa0VQTGlzdFtlcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkpOworCisJLyogVGhlIHJlYXNvbiB3ZSBzZXQgdGhlIEVQJ3Mgc3ViIHBvaW50ZXIgZGlyZWN0bHkgaW5zdGVhZCBvZgorCSAgIHdhbGtpbmcgdGhlIFNCIGxpc3QgYW5kIGxpbmtpbmcgaXQgbGFzdCBpbiB0aGUgbGlzdCBpcyB0aGF0IHdlIG9ubHkKKwkgICBoYXZlIG9uZSBhY3RpdmUgdXJiIGF0IGEgdGltZSAodGhlIHJlc3QgYXJlIHF1ZXVlZCkuICovCisKKwkvKiBOb3RlIHRoYXQgd2UgY2Fubm90IGhhdmUgaW50ZXJydXB0cyBydW5uaW5nIHdoZW4gd2UgaGF2ZSBzZXQgdGhlIFNCIGRlc2NyaXB0b3IKKwkgICBidXQgdGhlIEVQIGlzIG5vdCB5ZXQgZW5hYmxlZC4gIElmIGEgYnVsayBlb3QgaGFwcGVucyBmb3IgYW5vdGhlciBFUCwgd2Ugd2lsbAorCSAgIGZpbmQgdGhpcyBFUCBkaXNhYmxlZCBhbmQgd2l0aCBhIFNCICE9IDAsIHdoaWNoIHdpbGwgbWFrZSB1cyB0aGluayB0aGF0IGl0J3MgZG9uZS4gKi8KKwlUeEJ1bGtFUExpc3RbZXBpZF0uc3ViID0gdmlydF90b19waHlzKHNiX2Rlc2MpOworCVR4QnVsa0VQTGlzdFtlcGlkXS5od19sZW4gPSAwOworCS8qIE5vdGUgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGZpbGwgaW4gdGhlIGVwX2lkIGZpZWxkIHNpbmNlIHRoaXMKKwkgICB3YXMgZG9uZSB3aGVuIHdlIGFsbG9jYXRlZCB0aGUgRVAgZGVzY3JpcHRvcnMgaW4gaW5pdF90eF9idWxrX2VwLiAqLworCisJLyogQ2hlY2sgaWYgdGhlIGR1bW15IGxpc3QgaXMgYWxyZWFkeSB3aXRoIHVzIChpZiBzZXZlcmFsIHVyYnMgd2VyZSBxdWV1ZWQpLiAqLworCWlmIChUeEJ1bGtFUExpc3RbZXBpZF0ubmV4dCAhPSB2aXJ0X3RvX3BoeXMoJlR4QnVsa0R1bW15RVBMaXN0W2VwaWRdWzBdKSkgeworCisJCWRiZ19idWxrKCJJbnZpdGluZyBkdW1teSBsaXN0IHRvIHRoZSBwYXJ0eSBmb3IgdXJiIDB4JWx4LCBlcGlkICVkIiwKKwkJCSAodW5zaWduZWQgbG9uZyl1cmIsIGVwaWQpOworCisJCS8qIFRoZSBsYXN0IEVQIGluIHRoZSBkdW1teSBsaXN0IGFscmVhZHkgaGFzIGl0cyBuZXh0IHBvaW50ZXIgc2V0IHRvCisJCSAgIFR4QnVsa0VQTGlzdFtlcGlkXS5uZXh0LiAqLworCisJCS8qIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgaWYgdGhlIERNQSBpcyBhdCB0aGlzIEVQIG9yIG5vdCBiZWZvcmUgY2hhbmdpbmcgdGhlCisJCSAgIG5leHQgcG9pbnRlciwgc2luY2Ugd2Ugd2lsbCBkbyBpdCBpbiBvbmUgMzItYml0IHdyaXRlIChFUCBkZXNjcmlwdG9ycyBhcmUKKwkJICAgMzItYml0IGFsaWduZWQpLiAqLworCQlUeEJ1bGtFUExpc3RbZXBpZF0ubmV4dCA9IHZpcnRfdG9fcGh5cygmVHhCdWxrRHVtbXlFUExpc3RbZXBpZF1bMF0pOworCX0KKwkvKiBFbmFibGUgdGhlIEVQIGRlc2NyLiAqLworCWRiZ19idWxrKCJFbmFibGluZyBidWxrIEVQIGZvciB1cmIgMHglbHgsIGVwaWQgJWQiLCAodW5zaWduZWQgbG9uZyl1cmIsIGVwaWQpOworCVR4QnVsa0VQTGlzdFtlcGlkXS5jb21tYW5kIHw9IElPX1NUQVRFKFVTQl9FUF9jb21tYW5kLCBlbmFibGUsIHllcyk7CisKKwkvKiBFdmVyeXRoaW5nIGlzIHNldCB1cCwgc2FmZSB0byBlbmFibGUgaW50ZXJydXB0cyBhZ2Fpbi4gKi8KKwlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKworCS8qIElmIHRoZSBETUEgYnVsayBjaGFubmVsIGlzbid0IHJ1bm5pbmcsIHdlIG5lZWQgdG8gcmVzdGFydCBpdCBpZiBpdAorCSAgIGhhcyBzdG9wcGVkIGF0IHRoZSBsYXN0IEVQIGRlc2NyaXB0b3IgKERNQSBzdG9wcGVkIGJlY2F1c2UgdGhlcmUgd2FzCisJICAgbm8gbW9yZSB0cmFmZmljKSBvciBpZiBpdCBoYXMgc3RvcHBlZCBhdCBhIGR1bW15IEVQIHdpdGggdGhlIGludHIgZmxhZworCSAgIHNldCAoRE1BIHN0b3BwZWQgYmVjYXVzZSB3ZSB3ZXJlIHRvbyBzbG93IGluIGluc2VydGluZyBuZXcgdHJhZmZpYykuICovCisJaWYgKCEoKlJfRE1BX0NIOF9TVUIwX0NNRCAmIElPX01BU0soUl9ETUFfQ0g4X1NVQjBfQ01ELCBjbWQpKSkgeworCisJCVVTQl9FUF9EZXNjX3QgKmVwOworCQllcCA9IChVU0JfRVBfRGVzY190ICopcGh5c190b192aXJ0KCpSX0RNQV9DSDhfU1VCMF9FUCk7CisJCWRiZ19idWxrKCJETUEgY2hhbm5lbCBub3QgcnVubmluZyBpbiBhZGQiKTsKKwkJZGJnX2J1bGsoIkRNQSBpcyBhdCAweCVseCIsICh1bnNpZ25lZCBsb25nKWVwKTsKKworCQlpZiAoKlJfRE1BX0NIOF9TVUIwX0VQID09IHZpcnRfdG9fcGh5cygmVHhCdWxrRVBMaXN0W05CUl9PRl9FUElEUyAtIDFdKSB8fAorCQkgICAgKGVwLT5jb21tYW5kICYgMHg4KSA+PiAzKSB7CisJCQkqUl9ETUFfQ0g4X1NVQjBfQ01EID0gSU9fU1RBVEUoUl9ETUFfQ0g4X1NVQjBfQ01ELCBjbWQsIHN0YXJ0KTsKKwkJCS8qIFVwZGF0ZS9yZXN0YXJ0IHRoZSBidWxrIHN0YXJ0IHRpbWVyIHNpbmNlIHdlIGp1c3Qgc3RhcnRlZCB0aGUgY2hhbm5lbC4gKi8KKwkJCW1vZF90aW1lcigmYnVsa19zdGFydF90aW1lciwgamlmZmllcyArIEJVTEtfU1RBUlRfVElNRVJfSU5URVJWQUwpOworCQkJLyogVXBkYXRlL3Jlc3RhcnQgdGhlIGJ1bGsgZW90IHRpbWVyIHNpbmNlIHdlIGp1c3QgaW5zZXJ0ZWQgdHJhZmZpYy4gKi8KKwkJCW1vZF90aW1lcigmYnVsa19lb3RfdGltZXIsIGppZmZpZXMgKyBCVUxLX0VPVF9USU1FUl9JTlRFUlZBTCk7CisJCX0KKwl9CisKKwlEQkZFWElUOworfQorCitzdGF0aWMgdm9pZCBldHJheF91c2JfY29tcGxldGVfYnVsa191cmIoc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKQoreworCWV0cmF4X3VyYl9wcml2X3QgKnVyYl9wcml2ID0gKGV0cmF4X3VyYl9wcml2X3QgKil1cmItPmhjcHJpdjsKKwlpbnQgZXBpZCA9IHVyYl9wcml2LT5lcGlkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlEQkZFTlRFUjsKKworCWlmIChzdGF0dXMpCisJCXdhcm4oIkNvbXBsZXRpbmcgYnVsayB1cmIgd2l0aCBzdGF0dXMgJWQuIiwgc3RhdHVzKTsKKworCWRiZ19idWxrKCJDb21wbGV0aW5nIGJ1bGsgdXJiIDB4JWx4IGZvciBlcGlkICVkIiwgKHVuc2lnbmVkIGxvbmcpdXJiLCBlcGlkKTsKKworCS8qIFVwZGF0ZSB0aGUgdXJiIGxpc3QuICovCisJdXJiX2xpc3RfZGVsKHVyYiwgZXBpZCk7CisKKwkvKiBGb3IgYW4gSU4gcGlwZSwgd2UgYWx3YXlzIHNldCB0aGUgYWN0dWFsIGxlbmd0aCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXJlIHdhcworCSAgIGFuIGVycm9yIG9yIG5vdCAod2hpY2ggbWVhbnMgdGhlIGRldmljZSBkcml2ZXIgY2FuIHVzZSB0aGUgZGF0YSBpZiBpdCB3YW50cyB0bykuICovCisJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSkgeworCQl1cmItPmFjdHVhbF9sZW5ndGggPSB1cmJfcHJpdi0+cnhfb2Zmc2V0OworCX0gZWxzZSB7CisJCS8qIFNldCBhY3R1YWxfbGVuZ3RoIGZvciBPVVQgdXJicyBhbHNvOyB0aGUgVVNCIG1hc3Mgc3RvcmFnZSBkcml2ZXIgc2VlbXMKKwkJICAgdG8gd2FudCB0aGF0LiBXZSB3b3VsZG4ndCBrbm93IG9mIGFueSBwYXJ0aWFsIHdyaXRlcyBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuICovCisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCQl9IGVsc2UgeworCQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwkJfQorCX0KKworCS8qIEZJWE1FOiBJcyB0aGVyZSBzb21ldGhpbmcgb2YgdGhlIHRoaW5ncyBiZWxvdyB3ZSBzaG91bGRuJ3QgZG8gaWYgdGhlcmUgd2FzIGFuIGVycm9yPworCSAgIExpa2UsIG1heWJlIHdlIHNob3VsZG4ndCB0b2dnbGUgdGhlIHRvZ2dsZSBiaXRzLCBvciBtYXliZSB3ZSBzaG91bGRuJ3QgaW5zZXJ0IG1vcmUgdHJhZmZpYy4gKi8KKworCXNhdmVfZmxhZ3MoZmxhZ3MpOworCWNsaSgpOworCisJKlJfVVNCX0VQVF9JTkRFWCA9IElPX0ZJRUxEKFJfVVNCX0VQVF9JTkRFWCwgdmFsdWUsIGVwaWQpOworCW5vcCgpOworCisJLyogV2UgbmVlZCB0byBmaWRkbGUgd2l0aCB0aGUgdG9nZ2xlIGJpdHMgYmVjYXVzZSB0aGUgaGFyZHdhcmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuICovCisJaWYgKHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpIHsKKwkJY2hhciB0b2dnbGUgPQorCQkJSU9fRVhUUkFDVChSX1VTQl9FUFRfREFUQSwgdF9vdXQsICpSX1VTQl9FUFRfREFUQSk7CisJCXVzYl9zZXR0b2dnbGUodXJiLT5kZXYsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKKwkJCSAgICAgIHVzYl9waXBlb3V0KHVyYi0+cGlwZSksIHRvZ2dsZSk7CisJfSBlbHNlIHsKKwkJY2hhciB0b2dnbGUgPQorCQkJSU9fRVhUUkFDVChSX1VTQl9FUFRfREFUQSwgdF9pbiwgKlJfVVNCX0VQVF9EQVRBKTsKKwkJdXNiX3NldHRvZ2dsZSh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLAorCQkJICAgICAgdXNiX3BpcGVvdXQodXJiLT5waXBlKSwgdG9nZ2xlKTsKKwl9CisJcmVzdG9yZV9mbGFncyhmbGFncyk7CisKKwkvKiBSZW1lbWJlciB0byBmcmVlIHRoZSBTQnMuICovCisJZXRyYXhfcmVtb3ZlX2Zyb21fc2JfbGlzdCh1cmIpOworCWtmcmVlKHVyYl9wcml2KTsKKwl1cmItPmhjcHJpdiA9IDA7CisKKwkvKiBJZiB0aGVyZSBhcmUgYW55IG1vcmUgdXJiJ3MgaW4gdGhlIGxpc3Qgd2UnZCBiZXR0ZXIgc3RhcnQgc2VuZGluZyAqLworCWlmICghdXJiX2xpc3RfZW1wdHkoZXBpZCkpIHsKKworCQlzdHJ1Y3QgdXJiICpuZXdfdXJiOworCisJCS8qIEdldCB0aGUgZmlyc3QgdXJiLiAqLworCQluZXdfdXJiID0gdXJiX2xpc3RfZmlyc3QoZXBpZCk7CisJCWFzc2VydChuZXdfdXJiKTsKKworCQlkYmdfYnVsaygiTW9yZSBidWxrIGZvciBlcGlkICVkIiwgZXBpZCk7CisKKwkJZXRyYXhfdXNiX2FkZF90b19idWxrX3NiX2xpc3QobmV3X3VyYiwgZXBpZCk7CisJfQorCisJdXJiLT5zdGF0dXMgPSBzdGF0dXM7CisKKwkvKiBXZSBsZXQgYW55IG5vbi16ZXJvIHN0YXR1cyBmcm9tIHRoZSBsYXllciBhYm92ZSBoYXZlIHByZWNlZGVuY2UuICovCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCS8qIFVSQl9TSE9SVF9OT1RfT0sgbWVhbnMgdGhhdCBzaG9ydCByZWFkcyAoc2hvcnRlciB0aGFuIHRoZSBlbmRwb2ludCdzIG1heCBsZW5ndGgpCisJCSAgIGlzIHRvIGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3IuICovCisJCWlmICh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykgeworCQkJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSAmJgorCQkJICAgICh1cmItPmFjdHVhbF9sZW5ndGggIT0KKwkJCSAgICAgdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLCB1c2JfcGlwZW91dCh1cmItPnBpcGUpKSkpIHsKKwkJCQl1cmItPnN0YXR1cyA9IC1FUkVNT1RFSU87CisJCQl9CisJCX0KKwl9CisKKwlpZiAodXJiLT5jb21wbGV0ZSkgeworCQl1cmItPmNvbXBsZXRlKHVyYiwgTlVMTCk7CisJfQorCisJaWYgKHVyYl9saXN0X2VtcHR5KGVwaWQpKSB7CisJCS8qIFRoaXMgbWVhbnMgdGhhdCB0aGlzIEVQIGlzIG5vdyBmcmVlLCBkZWNvbmZpZ3VyZSBpdC4gKi8KKwkJZXRyYXhfdXNiX2ZyZWVfZXBpZChlcGlkKTsKKworCQkvKiBObyBtb3JlIHRyYWZmaWM7IHRpbWUgdG8gY2xlYW4gdXAuCisJCSAgIE11c3Qgc2V0IHN1YiBwb2ludGVyIHRvIDAsIHNpbmNlIHdlIGxvb2sgYXQgdGhlIHN1YiBwb2ludGVyIHdoZW4gaGFuZGxpbmcKKwkJICAgdGhlIGJ1bGsgZW90IGludGVycnVwdC4gKi8KKworCQlkYmdfYnVsaygiTm8gYnVsayBmb3IgZXBpZCAlZCIsIGVwaWQpOworCisJCVR4QnVsa0VQTGlzdFtlcGlkXS5zdWIgPSAwOworCisJCS8qIFVubGluayB0aGUgZHVtbXkgbGlzdC4gKi8KKworCQlkYmdfYnVsaygiS2lja2luZyBkdW1teSBsaXN0IG91dCBvZiBwYXJ0eSBmb3IgdXJiIDB4JWx4LCBlcGlkICVkIiwKKwkJCSAodW5zaWduZWQgbG9uZyl1cmIsIGVwaWQpOworCisJCS8qIE5vIG5lZWQgdG8gd2FpdCBmb3IgdGhlIERNQSBiZWZvcmUgY2hhbmdpbmcgdGhlIG5leHQgcG9pbnRlci4KKwkJICAgVGhlIG1vZHVsbyBOQlJfT0ZfRVBJRFMgaXNuJ3QgYWN0dWFsbHkgbmVjZXNzYXJ5LCBzaW5jZSB3ZSB3aWxsIG5ldmVyIHVzZQorCQkgICB0aGUgbGFzdCBvbmUgKElOVkFMSURfRVBJRCkgZm9yIGFjdHVhbCB0cmFmZmljLiAqLworCQlUeEJ1bGtFUExpc3RbZXBpZF0ubmV4dCA9CisJCQl2aXJ0X3RvX3BoeXMoJlR4QnVsa0VQTGlzdFsoZXBpZCArIDEpICUgTkJSX09GX0VQSURTXSk7CisJfQorCisJREJGRVhJVDsKK30KKworc3RhdGljIGludCBldHJheF91c2Jfc3VibWl0X2N0cmxfdXJiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQgZXBpZDsKKwlpbnQgZW1wdHk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdjsKKworCURCRkVOVEVSOworCisJLyogRklYTUU6IFJldHVybiAtRU5YSU8gaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHF1ZXVlZCB1cmIgZm9yIHRoaXMgZW5kcG9pbnQ/ICovCisKKwkvKiBFcGlkIGFsbG9jYXRpb24sIGVtcHR5IGNoZWNrIGFuZCBsaXN0IGFkZCBtdXN0IGJlIHByb3RlY3RlZC4KKworCSAgIEVwaWQgYWxsb2NhdGlvbiBiZWNhdXNlIGlmIHdlIGZpbmQgYW4gZXhpc3RpbmcgZXBpZCBmb3IgdGhpcyBlbmRwb2ludCBhbiB1cmIgbWlnaHQgYmUKKwkgICBjb21wbGV0ZWQgKGVtcHR5aW5nIHRoZSBsaXN0KSBiZWZvcmUgd2UgYWRkIHRoZSBuZXcgdXJiIHRvIHRoZSBsaXN0LCBjYXVzaW5nIHRoZSBlcGlkCisJICAgdG8gYmUgZGUtYWxsb2NhdGVkLiBXZSB3b3VsZCB0aGVuIHN0YXJ0IHRoZSB0cmFuc2ZlciB3aXRoIGFuIGludmFsaWQgZXBpZCAtPiBlcGlkIGF0dG4uCisKKwkgICBFbXB0eSBjaGVjayBhbmQgYWRkIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIG1pZ2h0IGNvbmNsdWRlIHRoYXQgdGhlIGxpc3QgaXMgbm90IGVtcHR5LAorCSAgIGFmdGVyIHdoaWNoIGl0IGJlY29tZXMgZW1wdHkgYmVmb3JlIHdlIGFkZCB0aGUgbmV3IHVyYiB0byB0aGUgbGlzdCwgY2F1c2luZyB1cyBub3QgdG8KKwkgICBpbnNlcnQgdGhlIG5ldyB0cmFmZmljIGludG8gdGhlIFNCIGxpc3QuICovCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXJiX2xpc3RfbG9jaywgZmxhZ3MpOworCWVwaWQgPSBldHJheF91c2Jfc2V0dXBfZXBpZCh1cmIpOworCWlmIChlcGlkID09IC0xKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVyYl9saXN0X2xvY2ssIGZsYWdzKTsKKwkJREJGRVhJVDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWVtcHR5ID0gdXJiX2xpc3RfZW1wdHkoZXBpZCk7CisJdXJiX2xpc3RfYWRkKHVyYiwgZXBpZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXJiX2xpc3RfbG9jaywgZmxhZ3MpOworCisJZGJnX2N0cmwoIkFkZGluZyBjdHJsIHVyYiAweCVseCB0byAlcyBsaXN0LCBlcGlkICVkIiwKKwkJICh1bnNpZ25lZCBsb25nKXVyYiwgZW1wdHkgPyAiZW1wdHkiIDogIiIsIGVwaWQpOworCisJLyogTWFyayB0aGUgdXJiIGFzIGJlaW5nIGluIHByb2dyZXNzLiAqLworCXVyYi0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCisJLyogU2V0dXAgdGhlIGhjcHJpdiBkYXRhLiAqLworCXVyYl9wcml2ID0ga21hbGxvYyhzaXplb2YoZXRyYXhfdXJiX3ByaXZfdCksIEtNQUxMT0NfRkxBRyk7CisJYXNzZXJ0KHVyYl9wcml2ICE9IE5VTEwpOworCS8qIFRoaXMgc2V0cyByeF9vZmZzZXQgdG8gMC4gKi8KKwltZW1zZXQodXJiX3ByaXYsIDAsIHNpemVvZihldHJheF91cmJfcHJpdl90KSk7CisJdXJiX3ByaXYtPnVyYl9zdGF0ZSA9IE5PVF9TVEFSVEVEOworCXVyYi0+aGNwcml2ID0gdXJiX3ByaXY7CisKKwlpZiAoZW1wdHkpIHsKKwkJZXRyYXhfdXNiX2FkZF90b19jdHJsX3NiX2xpc3QodXJiLCBlcGlkKTsKKwl9CisKKwlEQkZFWElUOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9hZGRfdG9fY3RybF9zYl9saXN0KHN0cnVjdCB1cmIgKnVyYiwgaW50IGVwaWQpCit7CisJVVNCX1NCX0Rlc2NfdCAqc2JfZGVzY19zZXR1cDsKKwlVU0JfU0JfRGVzY190ICpzYl9kZXNjX2RhdGE7CisJVVNCX1NCX0Rlc2NfdCAqc2JfZGVzY19zdGF0dXM7CisKKwlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdiA9IChldHJheF91cmJfcHJpdl90ICopdXJiLT5oY3ByaXY7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNoYXIgbWF4bGVuOworCisJREJGRU5URVI7CisKKwltYXhsZW4gPSB1c2JfbWF4cGFja2V0KHVyYi0+ZGV2LCB1cmItPnBpcGUsIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOworCisJc2JfZGVzY19zZXR1cCA9IChVU0JfU0JfRGVzY190KilrbWVtX2NhY2hlX2FsbG9jKHVzYl9kZXNjX2NhY2hlLCBTTEFCX0ZMQUcpOworCWFzc2VydChzYl9kZXNjX3NldHVwICE9IE5VTEwpOworCXNiX2Rlc2Nfc3RhdHVzID0gKFVTQl9TQl9EZXNjX3QqKWttZW1fY2FjaGVfYWxsb2ModXNiX2Rlc2NfY2FjaGUsIFNMQUJfRkxBRyk7CisJYXNzZXJ0KHNiX2Rlc2Nfc3RhdHVzICE9IE5VTEwpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgbWFuZGF0b3J5IHNldHVwIFNCIGRlc2NyaXB0b3IgKHVzZWQgb25seSBpbiBjb250cm9sIHRyYW5zZmVycykgKi8KKwlzYl9kZXNjX3NldHVwLT5zd19sZW4gPSA4OworCXNiX2Rlc2Nfc2V0dXAtPmNvbW1hbmQgPSAoSU9fRklFTEQoVVNCX1NCX2NvbW1hbmQsIHJlbSwgMCkgfAorCQkJCSAgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIHR0LCBzZXR1cCkgfAorCQkJCSAgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGZ1bGwsIHllcykgfAorCQkJCSAgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGVvdCwgeWVzKSk7CisKKwlzYl9kZXNjX3NldHVwLT5idWYgPSB2aXJ0X3RvX3BoeXModXJiLT5zZXR1cF9wYWNrZXQpOworCisJaWYgKHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpIHsKKwkJZGJnX2N0cmwoIlRyYW5zZmVyIGZvciBlcGlkICVkIGlzIE9VVCIsIGVwaWQpOworCisJCS8qIElmIHRoaXMgQ29udHJvbCBPVVQgdHJhbnNmZXIgaGFzIGFuIG9wdGlvbmFsIGRhdGEgc3RhZ2Ugd2UgYWRkIGFuIE9VVCB0b2tlbgorCQkgICBiZWZvcmUgdGhlIG1hbmRhdG9yeSBJTiAoc3RhdHVzKSB0b2tlbiwgaGVuY2UgdGhlIHJlb3JkZXJlZCBTQiBsaXN0ICovCisKKwkJc2JfZGVzY19zZXR1cC0+bmV4dCA9IHZpcnRfdG9fcGh5cyhzYl9kZXNjX3N0YXR1cyk7CisJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcikgeworCisJCQlkYmdfY3RybCgiVGhpcyBPVVQgdHJhbnNmZXIgaGFzIGFuIGV4dHJhIGRhdGEgc3RhZ2UiKTsKKworCQkJc2JfZGVzY19kYXRhID0gKFVTQl9TQl9EZXNjX3QqKWttZW1fY2FjaGVfYWxsb2ModXNiX2Rlc2NfY2FjaGUsIFNMQUJfRkxBRyk7CisJCQlhc3NlcnQoc2JfZGVzY19kYXRhICE9IE5VTEwpOworCisJCQlzYl9kZXNjX3NldHVwLT5uZXh0ID0gdmlydF90b19waHlzKHNiX2Rlc2NfZGF0YSk7CisKKwkJCXNiX2Rlc2NfZGF0YS0+c3dfbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCQkJc2JfZGVzY19kYXRhLT5jb21tYW5kID0gKElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCB0dCwgb3V0KSB8CisJCQkJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGZ1bGwsIHllcykgfAorCQkJCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb3QsIHllcykpOworCQkJc2JfZGVzY19kYXRhLT5idWYgPSB2aXJ0X3RvX3BoeXModXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQkJc2JfZGVzY19kYXRhLT5uZXh0ID0gdmlydF90b19waHlzKHNiX2Rlc2Nfc3RhdHVzKTsKKwkJfQorCisJCXNiX2Rlc2Nfc3RhdHVzLT5zd19sZW4gPSAxOworCQlzYl9kZXNjX3N0YXR1cy0+Y29tbWFuZCA9IChJT19GSUVMRChVU0JfU0JfY29tbWFuZCwgcmVtLCAwKSB8CisJCQkJCSAgIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCB0dCwgaW4pIHwKKwkJCQkJICAgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGVvdCwgeWVzKSB8CisJCQkJCSAgIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBpbnRyLCB5ZXMpIHwKKwkJCQkJICAgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGVvbCwgeWVzKSk7CisKKwkJc2JfZGVzY19zdGF0dXMtPmJ1ZiA9IDA7CisJCXNiX2Rlc2Nfc3RhdHVzLT5uZXh0ID0gMDsKKworCX0gZWxzZSBpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpKSB7CisKKwkJZGJnX2N0cmwoIlRyYW5zZmVyIGZvciBlcGlkICVkIGlzIElOIiwgZXBpZCk7CisJCWRiZ19jdHJsKCJ0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gJWQiLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCQlkYmdfY3RybCgicmVtIGlzIGNhbGN1bGF0ZWQgdG8gJWQiLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggJSBtYXhsZW4pOworCisJCXNiX2Rlc2NfZGF0YSA9IChVU0JfU0JfRGVzY190KilrbWVtX2NhY2hlX2FsbG9jKHVzYl9kZXNjX2NhY2hlLCBTTEFCX0ZMQUcpOworCQlhc3NlcnQoc2JfZGVzY19kYXRhICE9IE5VTEwpOworCisJCXNiX2Rlc2Nfc2V0dXAtPm5leHQgPSB2aXJ0X3RvX3BoeXMoc2JfZGVzY19kYXRhKTsKKworCQlzYl9kZXNjX2RhdGEtPnN3X2xlbiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA/CisJCQkodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0gMSkgLyBtYXhsZW4gKyAxIDogMDsKKwkJZGJnX2N0cmwoInN3X2xlbiBnb3QgJWQiLCBzYl9kZXNjX2RhdGEtPnN3X2xlbik7CisKKwkJc2JfZGVzY19kYXRhLT5jb21tYW5kID0KKwkJCShJT19GSUVMRChVU0JfU0JfY29tbWFuZCwgcmVtLAorCQkJCSAgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoICUgbWF4bGVuKSB8CisJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIHR0LCBpbikgfAorCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb3QsIHllcykpOworCisJCXNiX2Rlc2NfZGF0YS0+YnVmID0gMDsKKwkJc2JfZGVzY19kYXRhLT5uZXh0ID0gdmlydF90b19waHlzKHNiX2Rlc2Nfc3RhdHVzKTsKKworCQkvKiBSZWFkIGNvbW1lbnQgYXQgem91dF9idWZmZXIgZGVjbGFyYXRpb24gZm9yIGFuIGV4cGxhbmF0aW9uIHRvIHRoaXMuICovCisJCXNiX2Rlc2Nfc3RhdHVzLT5zd19sZW4gPSAxOworCQlzYl9kZXNjX3N0YXR1cy0+Y29tbWFuZCA9IChJT19GSUVMRChVU0JfU0JfY29tbWFuZCwgcmVtLCAwKSB8CisJCQkJCSAgIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCB0dCwgem91dCkgfAorCQkJCQkgICBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZnVsbCwgeWVzKSB8CisJCQkJCSAgIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb3QsIHllcykgfAorCQkJCQkgICBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgaW50ciwgeWVzKSB8CisJCQkJCSAgIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBlb2wsIHllcykpOworCisJCXNiX2Rlc2Nfc3RhdHVzLT5idWYgPSB2aXJ0X3RvX3BoeXMoJnpvdXRfYnVmZmVyWzBdKTsKKwkJc2JfZGVzY19zdGF0dXMtPm5leHQgPSAwOworCX0KKworCXVyYl9wcml2LT5maXJzdF9zYiA9IHNiX2Rlc2Nfc2V0dXA7CisJdXJiX3ByaXYtPmxhc3Rfc2IgPSBzYl9kZXNjX3N0YXR1czsKKwl1cmJfcHJpdi0+ZXBpZCA9IGVwaWQ7CisKKwl1cmJfcHJpdi0+dXJiX3N0YXRlID0gU1RBUlRFRDsKKworCS8qIFJlc2V0IHRvZ2dsZSBiaXRzIGFuZCByZXNldCBlcnJvciBjb3VudCwgcmVtZW1iZXIgdG8gZGkgYW5kIGVpICovCisJLyogV2FybmluZzogaXQgaXMgcG9zc2libGUgdGhhdCB0aGlzIGxvY2tpbmcgZG9lc24ndCB3b3JrIHdpdGggYm90dG9tLWhhbHZlcyAqLworCisJc2F2ZV9mbGFncyhmbGFncyk7CisJY2xpKCk7CisKKwkqUl9VU0JfRVBUX0lOREVYID0gSU9fRklFTEQoUl9VU0JfRVBUX0lOREVYLCB2YWx1ZSwgZXBpZCk7CisJbm9wKCk7CisJaWYgKCpSX1VTQl9FUFRfREFUQSAmIElPX01BU0soUl9VU0JfRVBUX0RBVEEsIGhvbGQpKSB7CisJCXBhbmljKCJIb2xkIHdhcyBzZXQgaW4gJXMiLCBfX0ZVTkNUSU9OX18pOworCX0KKworCisJLyogRklYTUU6IENvbXBhcmUgd2l0aCBldHJheF91c2JfYWRkX3RvX2J1bGtfc2JfbGlzdCB3aGVyZSB0aGUgdG9nZ2xlIGJpdHMKKwkgICBhcmUgc2V0IHRvIGEgc3BlY2lmaWMgdmFsdWUuIFdoeSB0aGUgZGlmZmVyZW5jZT8gUmVhZCAiVHJhbnNmZXIgYW5kIFRvZ2dsZSBCaXRzCisJICAgaW4gRGVzaWduZXIncyBSZWZlcmVuY2UsIHAuIDggLSAxMS4gKi8KKwkqUl9VU0JfRVBUX0RBVEEgJj0KKwkJfihJT19NQVNLKFJfVVNCX0VQVF9EQVRBLCBlcnJvcl9jb3VudF9pbikgfAorCQkgIElPX01BU0soUl9VU0JfRVBUX0RBVEEsIGVycm9yX2NvdW50X291dCkgfAorCQkgIElPX01BU0soUl9VU0JfRVBUX0RBVEEsIHRfaW4pIHwKKwkJICBJT19NQVNLKFJfVVNCX0VQVF9EQVRBLCB0X291dCkpOworCisJLyogU2luY2Ugd2UgdXNlIHRoZSByeCBpbnRlcnJ1cHQgdG8gY29tcGxldGUgY3RybCB1cmJzLCB3ZSBjYW4gZW5hYmxlIGludGVycnVwdHMgbm93CisJICAgKGkuZS4gd2UgZG9uJ3QgY2hlY2sgdGhlIHN1YiBwb2ludGVyIG9uIGFuIGVvdCBpbnRlcnJ1cHQgbGlrZSB3ZSBkbyBmb3IgYnVsayB0cmFmZmljKS4gKi8KKwlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKworCS8qIEFzc2VydCB0aGF0IHRoZSBFUCBkZXNjcmlwdG9yIGlzIGRpc2FibGVkLiAqLworCWFzc2VydCghKFR4Q3RybEVQTGlzdFtlcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkpOworCisJLyogU2V0IHVwIGFuZCBlbmFibGUgdGhlIEVQIGRlc2NyaXB0b3IuICovCisJVHhDdHJsRVBMaXN0W2VwaWRdLnN1YiA9IHZpcnRfdG9fcGh5cyhzYl9kZXNjX3NldHVwKTsKKwlUeEN0cmxFUExpc3RbZXBpZF0uaHdfbGVuID0gMDsKKwlUeEN0cmxFUExpc3RbZXBpZF0uY29tbWFuZCB8PSBJT19TVEFURShVU0JfRVBfY29tbWFuZCwgZW5hYmxlLCB5ZXMpOworCisJLyogV2Ugc3RhcnQgdGhlIERNQSBzdWIgY2hhbm5lbCB3aXRob3V0IGNoZWNraW5nIGlmIGl0J3MgcnVubmluZyBvciBub3QsIGJlY2F1c2U6CisJICAgMSkgSWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcsIGlzc3VpbmcgdGhlIHN0YXJ0IGNvbW1hbmQgaXMgYSBub3AuCisJICAgMikgV2UgYXZvaWQgYSB0ZXN0LWFuZC1zZXQgcmFjZSBjb25kaXRpb24uICovCisJKlJfRE1BX0NIOF9TVUIxX0NNRCA9IElPX1NUQVRFKFJfRE1BX0NIOF9TVUIxX0NNRCwgY21kLCBzdGFydCk7CisKKwlEQkZFWElUOworfQorCitzdGF0aWMgdm9pZCBldHJheF91c2JfY29tcGxldGVfY3RybF91cmIoc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKQoreworCWV0cmF4X3VyYl9wcml2X3QgKnVyYl9wcml2ID0gKGV0cmF4X3VyYl9wcml2X3QgKil1cmItPmhjcHJpdjsKKwlpbnQgZXBpZCA9IHVyYl9wcml2LT5lcGlkOworCisJREJGRU5URVI7CisKKwlpZiAoc3RhdHVzKQorCQl3YXJuKCJDb21wbGV0aW5nIGN0cmwgdXJiIHdpdGggc3RhdHVzICVkLiIsIHN0YXR1cyk7CisKKwlkYmdfY3RybCgiQ29tcGxldGluZyBjdHJsIGVwaWQgJWQsIHVyYiAweCVseCIsIGVwaWQsICh1bnNpZ25lZCBsb25nKXVyYik7CisKKwkvKiBSZW1vdmUgdGhpcyB1cmIgZnJvbSB0aGUgbGlzdC4gKi8KKwl1cmJfbGlzdF9kZWwodXJiLCBlcGlkKTsKKworCS8qIEZvciBhbiBJTiBwaXBlLCB3ZSBhbHdheXMgc2V0IHRoZSBhY3R1YWwgbGVuZ3RoLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlcmUgd2FzCisJICAgYW4gZXJyb3Igb3Igbm90ICh3aGljaCBtZWFucyB0aGUgZGV2aWNlIGRyaXZlciBjYW4gdXNlIHRoZSBkYXRhIGlmIGl0IHdhbnRzIHRvKS4gKi8KKwlpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpKSB7CisJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IHVyYl9wcml2LT5yeF9vZmZzZXQ7CisJfQorCisJLyogRklYTUU6IElzIHRoZXJlIHNvbWV0aGluZyBvZiB0aGUgdGhpbmdzIGJlbG93IHdlIHNob3VsZG4ndCBkbyBpZiB0aGVyZSB3YXMgYW4gZXJyb3I/CisJICAgTGlrZSwgbWF5YmUgd2Ugc2hvdWxkbid0IGluc2VydCBtb3JlIHRyYWZmaWMuICovCisKKwkvKiBSZW1lbWJlciB0byBmcmVlIHRoZSBTQnMuICovCisJZXRyYXhfcmVtb3ZlX2Zyb21fc2JfbGlzdCh1cmIpOworCWtmcmVlKHVyYl9wcml2KTsKKwl1cmItPmhjcHJpdiA9IDA7CisKKwkvKiBJZiB0aGVyZSBhcmUgYW55IG1vcmUgdXJicyBpbiB0aGUgbGlzdCB3ZSdkIGJldHRlciBzdGFydCBzZW5kaW5nLiAqLworCWlmICghdXJiX2xpc3RfZW1wdHkoZXBpZCkpIHsKKwkJc3RydWN0IHVyYiAqbmV3X3VyYjsKKworCQkvKiBHZXQgdGhlIGZpcnN0IHVyYi4gKi8KKwkJbmV3X3VyYiA9IHVyYl9saXN0X2ZpcnN0KGVwaWQpOworCQlhc3NlcnQobmV3X3VyYik7CisKKwkJZGJnX2N0cmwoIk1vcmUgY3RybCBmb3IgZXBpZCAlZCwgZmlyc3QgdXJiID0gMHglbHgiLCBlcGlkLCAodW5zaWduZWQgbG9uZyluZXdfdXJiKTsKKworCQlldHJheF91c2JfYWRkX3RvX2N0cmxfc2JfbGlzdChuZXdfdXJiLCBlcGlkKTsKKwl9CisKKwl1cmItPnN0YXR1cyA9IHN0YXR1czsKKworCS8qIFdlIGxldCBhbnkgbm9uLXplcm8gc3RhdHVzIGZyb20gdGhlIGxheWVyIGFib3ZlIGhhdmUgcHJlY2VkZW5jZS4gKi8KKwlpZiAoc3RhdHVzID09IDApIHsKKwkJLyogVVJCX1NIT1JUX05PVF9PSyBtZWFucyB0aGF0IHNob3J0IHJlYWRzIChzaG9ydGVyIHRoYW4gdGhlIGVuZHBvaW50J3MgbWF4IGxlbmd0aCkKKwkJICAgaXMgdG8gYmUgdHJlYXRlZCBhcyBhbiBlcnJvci4gKi8KKwkJaWYgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKSB7CisJCQlpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpICYmCisJCQkgICAgKHVyYi0+YWN0dWFsX2xlbmd0aCAhPQorCQkJICAgICB1c2JfbWF4cGFja2V0KHVyYi0+ZGV2LCB1cmItPnBpcGUsIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpKSkgeworCQkJCXVyYi0+c3RhdHVzID0gLUVSRU1PVEVJTzsKKwkJCX0KKwkJfQorCX0KKworCWlmICh1cmItPmNvbXBsZXRlKSB7CisJCXVyYi0+Y29tcGxldGUodXJiLCBOVUxMKTsKKwl9CisKKwlpZiAodXJiX2xpc3RfZW1wdHkoZXBpZCkpIHsKKwkJLyogTm8gbW9yZSB0cmFmZmljLiBUaW1lIHRvIGNsZWFuIHVwLiAqLworCQlldHJheF91c2JfZnJlZV9lcGlkKGVwaWQpOworCQkvKiBNdXN0IHNldCBzdWIgcG9pbnRlciB0byAwLiAqLworCQlkYmdfY3RybCgiTm8gY3RybCBmb3IgZXBpZCAlZCIsIGVwaWQpOworCQlUeEN0cmxFUExpc3RbZXBpZF0uc3ViID0gMDsKKwl9CisKKwlEQkZFWElUOworfQorCitzdGF0aWMgaW50IGV0cmF4X3VzYl9zdWJtaXRfaW50cl91cmIoc3RydWN0IHVyYiAqdXJiKQoreworCisJaW50IGVwaWQ7CisKKwlEQkZFTlRFUjsKKworCWlmICh1c2JfcGlwZW91dCh1cmItPnBpcGUpKSB7CisJCS8qIFVuc3VwcG9ydGVkIHRyYW5zZmVyIHR5cGUuCisJCSAgIFdlIGRvbid0IHN1cHBvcnQgaW50ZXJydXB0IG91dCB0cmFmZmljLiAoSWYgd2UgZG8sIHdlIGNhbid0IHN1cHBvcnQKKwkJICAgaW50ZXJ2YWxzIGZvciBuZWl0aGVyIGluIG9yIG91dCB0cmFmZmljLCBidXQgYXJlIGZvcmNlZCB0byBzY2hlZHVsZSBhbGwKKwkJICAgaW50ZXJydXB0IHRyYWZmaWMgaW4gb25lIGZyYW1lLikgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZXBpZCA9IGV0cmF4X3VzYl9zZXR1cF9lcGlkKHVyYik7CisJaWYgKGVwaWQgPT0gLTEpIHsKKwkJREJGRVhJVDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKCF1cmJfbGlzdF9lbXB0eShlcGlkKSkgeworCQkvKiBUaGVyZSBpcyBhbHJlYWR5IGEgcXVldWVkIHVyYiBmb3IgdGhpcyBlbmRwb2ludC4gKi8KKwkJZXRyYXhfdXNiX2ZyZWVfZXBpZChlcGlkKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwl1cmItPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKworCWRiZ19pbnRyKCJBZGQgaW50ciB1cmIgMHglbHgsIHRvIGxpc3QsIGVwaWQgJWQiLCAodW5zaWduZWQgbG9uZyl1cmIsIGVwaWQpOworCisJdXJiX2xpc3RfYWRkKHVyYiwgZXBpZCk7CisJZXRyYXhfdXNiX2FkZF90b19pbnRyX3NiX2xpc3QodXJiLCBlcGlkKTsKKworCXJldHVybiAwOworCisJREJGRVhJVDsKK30KKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2FkZF90b19pbnRyX3NiX2xpc3Qoc3RydWN0IHVyYiAqdXJiLCBpbnQgZXBpZCkKK3sKKworCXZvbGF0aWxlIFVTQl9FUF9EZXNjX3QgKnRtcF9lcDsKKwl2b2xhdGlsZSBVU0JfRVBfRGVzY190ICpmaXJzdF9lcDsKKworCWNoYXIgbWF4bGVuOworCWludCBpbnRlcnZhbDsKKwlpbnQgaTsKKworCWV0cmF4X3VyYl9wcml2X3QgKnVyYl9wcml2OworCisJREJGRU5URVI7CisKKwltYXhsZW4gPSB1c2JfbWF4cGFja2V0KHVyYi0+ZGV2LCB1cmItPnBpcGUsIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOworCWludGVydmFsID0gdXJiLT5pbnRlcnZhbDsKKworCXVyYl9wcml2ID0ga21hbGxvYyhzaXplb2YoZXRyYXhfdXJiX3ByaXZfdCksIEtNQUxMT0NfRkxBRyk7CisJYXNzZXJ0KHVyYl9wcml2ICE9IE5VTEwpOworCW1lbXNldCh1cmJfcHJpdiwgMCwgc2l6ZW9mKGV0cmF4X3VyYl9wcml2X3QpKTsKKwl1cmItPmhjcHJpdiA9IHVyYl9wcml2OworCisJZmlyc3RfZXAgPSAmVHhJbnRyRVBMaXN0WzBdOworCisJLyogUm91bmQgb2YgdGhlIGludGVydmFsIHRvIDJebiwgaXQgaXMgb2J2aW91cyB0aGF0IHRoaXMgY29kZSBmYXZvdXJzCisJICAgc21hbGxlciBudW1iZXJzLCBidXQgdGhhdCBpcyBhY3R1YWxseSBhIGdvb2QgdGhpbmcgKi8KKwkvKiBGSVhNRTogVGhlICJyb3VuZGluZyBlcnJvciIgZm9yIGxhcmdlciBpbnRlcnZhbHMgd2lsbCBiZSBxdWl0ZQorCSAgIGxhcmdlLiBGb3IgaW4gdHJhZmZpYyB0aGlzIHNob3VsZG4ndCBiZSBhIHByb2JsZW0gc2luY2UgaXQgd2lsbCBvbmx5CisJICAgbWVhbiB0aGF0IHdlICJwb2xsIiBtb3JlIG9mdGVuLiAqLworCWZvciAoaSA9IDA7IGludGVydmFsOyBpKyspIHsKKwkJaW50ZXJ2YWwgPSBpbnRlcnZhbCA+PiAxOworCX0KKwlpbnRlcnZhbCA9IDEgPDwgKGkgLSAxKTsKKworCWRiZ19pbnRyKCJJbnRlcnZhbCByb3VuZGVkIHRvICVkIiwgaW50ZXJ2YWwpOworCisJdG1wX2VwID0gZmlyc3RfZXA7CisJaSA9IDA7CisJZG8geworCQlpZiAodG1wX2VwLT5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW9mKSkgeworCQkJaWYgKChpICUgaW50ZXJ2YWwpID09IDApIHsKKwkJCQkvKiBJbnNlcnQgdGhlIHRyYWZmaWMgZXAgYWZ0ZXIgdG1wX2VwICovCisJCQkJVVNCX0VQX0Rlc2NfdCAqZXBfZGVzYzsKKwkJCQlVU0JfU0JfRGVzY190ICpzYl9kZXNjOworCisJCQkJZGJnX2ludHIoIkluc2VydGluZyBFUCBmb3IgZXBpZCAlZCIsIGVwaWQpOworCisJCQkJZXBfZGVzYyA9IChVU0JfRVBfRGVzY190ICopCisJCQkJCWttZW1fY2FjaGVfYWxsb2ModXNiX2Rlc2NfY2FjaGUsIFNMQUJfRkxBRyk7CisJCQkJc2JfZGVzYyA9IChVU0JfU0JfRGVzY190ICopCisJCQkJCWttZW1fY2FjaGVfYWxsb2ModXNiX2Rlc2NfY2FjaGUsIFNMQUJfRkxBRyk7CisJCQkJYXNzZXJ0KGVwX2Rlc2MgIT0gTlVMTCk7CisJCQkJQ0hFQ0tfQUxJR04oZXBfZGVzYyk7CisJCQkJYXNzZXJ0KHNiX2Rlc2MgIT0gTlVMTCk7CisKKwkJCQllcF9kZXNjLT5zdWIgPSB2aXJ0X3RvX3BoeXMoc2JfZGVzYyk7CisJCQkJZXBfZGVzYy0+aHdfbGVuID0gMDsKKwkJCQllcF9kZXNjLT5jb21tYW5kID0gKElPX0ZJRUxEKFVTQl9FUF9jb21tYW5kLCBlcGlkLCBlcGlkKSB8CisJCQkJCQkgICAgSU9fU1RBVEUoVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSwgeWVzKSk7CisKKworCQkJCS8qIFJvdW5kIHVwd2FyZHMgdGhlIG51bWJlciBvZiBwYWNrZXRzIG9mIHNpemUgbWF4bGVuCisJCQkJICAgdGhhdCB0aGlzIFNCIGRlc2NyaXB0b3Igc2hvdWxkIHJlY2VpdmUuICovCisJCQkJc2JfZGVzYy0+c3dfbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID8KKwkJCQkJKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtIDEpIC8gbWF4bGVuICsgMSA6IDA7CisJCQkJc2JfZGVzYy0+bmV4dCA9IDA7CisJCQkJc2JfZGVzYy0+YnVmID0gMDsKKwkJCQlzYl9kZXNjLT5jb21tYW5kID0KKwkJCQkJKElPX0ZJRUxEKFVTQl9TQl9jb21tYW5kLCByZW0sIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAlIG1heGxlbikgfAorCQkJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIHR0LCBpbikgfAorCQkJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGVvdCwgeWVzKSB8CisJCQkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW9sLCB5ZXMpKTsKKworCQkJCWVwX2Rlc2MtPm5leHQgPSB0bXBfZXAtPm5leHQ7CisJCQkJdG1wX2VwLT5uZXh0ID0gdmlydF90b19waHlzKGVwX2Rlc2MpOworCQkJfQorCQkJaSsrOworCQl9CisJCXRtcF9lcCA9IChVU0JfRVBfRGVzY190ICopcGh5c190b192aXJ0KHRtcF9lcC0+bmV4dCk7CisJfSB3aGlsZSAodG1wX2VwICE9IGZpcnN0X2VwKTsKKworCisJLyogTm90ZSB0aGF0IGZpcnN0X3NiL2xhc3Rfc2IgZG9lc24ndCBhcHBseSB0byBpbnRlcnJ1cHQgdHJhZmZpYy4gKi8KKwl1cmJfcHJpdi0+ZXBpZCA9IGVwaWQ7CisKKwkvKiBXZSBzdGFydCB0aGUgRE1BIHN1YiBjaGFubmVsIHdpdGhvdXQgY2hlY2tpbmcgaWYgaXQncyBydW5uaW5nIG9yIG5vdCwgYmVjYXVzZToKKwkgICAxKSBJZiBpdCdzIGFscmVhZHkgcnVubmluZywgaXNzdWluZyB0aGUgc3RhcnQgY29tbWFuZCBpcyBhIG5vcC4KKwkgICAyKSBXZSBhdm9pZCBhIHRlc3QtYW5kLXNldCByYWNlIGNvbmRpdGlvbi4gKi8KKwkqUl9ETUFfQ0g4X1NVQjJfQ01EID0gSU9fU1RBVEUoUl9ETUFfQ0g4X1NVQjJfQ01ELCBjbWQsIHN0YXJ0KTsKKworCURCRkVYSVQ7Cit9CisKKworCitzdGF0aWMgdm9pZCBldHJheF91c2JfY29tcGxldGVfaW50cl91cmIoc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKQoreworCWV0cmF4X3VyYl9wcml2X3QgKnVyYl9wcml2ID0gKGV0cmF4X3VyYl9wcml2X3QgKil1cmItPmhjcHJpdjsKKwlpbnQgZXBpZCA9IHVyYl9wcml2LT5lcGlkOworCisJREJGRU5URVI7CisKKwlpZiAoc3RhdHVzKQorCQl3YXJuKCJDb21wbGV0aW5nIGludHIgdXJiIHdpdGggc3RhdHVzICVkLiIsIHN0YXR1cyk7CisKKwlkYmdfaW50cigiQ29tcGxldGluZyBpbnRyIGVwaWQgJWQsIHVyYiAweCVseCIsIGVwaWQsICh1bnNpZ25lZCBsb25nKXVyYik7CisKKwl1cmItPnN0YXR1cyA9IHN0YXR1czsKKwl1cmItPmFjdHVhbF9sZW5ndGggPSB1cmJfcHJpdi0+cnhfb2Zmc2V0OworCisJZGJnX2ludHIoImludGVycnVwdCB1cmItPmFjdHVhbF9sZW5ndGggPSAlZCIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisKKwkvKiBXZSBsZXQgYW55IG5vbi16ZXJvIHN0YXR1cyBmcm9tIHRoZSBsYXllciBhYm92ZSBoYXZlIHByZWNlZGVuY2UuICovCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCS8qIFVSQl9TSE9SVF9OT1RfT0sgbWVhbnMgdGhhdCBzaG9ydCByZWFkcyAoc2hvcnRlciB0aGFuIHRoZSBlbmRwb2ludCdzIG1heCBsZW5ndGgpCisJCSAgIGlzIHRvIGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3IuICovCisJCWlmICh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykgeworCQkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCAhPQorCQkJICAgIHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwgdXNiX3BpcGVvdXQodXJiLT5waXBlKSkpIHsKKwkJCQl1cmItPnN0YXR1cyA9IC1FUkVNT1RFSU87CisJCQl9CisJCX0KKwl9CisKKwkvKiBUaGUgZHJpdmVyIHdpbGwgcmVzdWJtaXQgdGhlIFVSQiBzbyB3ZSBuZWVkIHRvIHJlbW92ZSBpdCBmaXJzdCAqLworICAgICAgICBldHJheF91c2JfdW5saW5rX3VyYih1cmIsIDApOworCWlmICh1cmItPmNvbXBsZXRlKSB7CisJCXVyYi0+Y29tcGxldGUodXJiLCBOVUxMKTsKKwl9CisKKwlEQkZFWElUOworfQorCisKK3N0YXRpYyBpbnQgZXRyYXhfdXNiX3N1Ym1pdF9pc29jX3VyYihzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50IGVwaWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCURCRkVOVEVSOworCisJZGJnX2lzb2MoIlN1Ym1pdHRpbmcgaXNvYyB1cmIgPSAweCVseCIsICh1bnNpZ25lZCBsb25nKXVyYik7CisKKwkvKiBFcGlkIGFsbG9jYXRpb24sIGVtcHR5IGNoZWNrIGFuZCBsaXN0IGFkZCBtdXN0IGJlIHByb3RlY3RlZC4KKwkgICBSZWFkIGFib3V0IHRoaXMgaW4gZXRyYXhfdXNiX3N1Ym1pdF9jdHJsX3VyYi4gKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1cmJfbGlzdF9sb2NrLCBmbGFncyk7CisJLyogSXMgdGhlcmUgYW4gYWN0aXZlIGVwaWQgZm9yIHRoaXMgdXJiID8gKi8KKwllcGlkID0gZXRyYXhfdXNiX3NldHVwX2VwaWQodXJiKTsKKwlpZiAoZXBpZCA9PSAtMSkgeworCQlEQkZFWElUOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cmJfbGlzdF9sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIE9rLCBub3cgd2UgZ290IHZhbGlkIGVuZHBvaW50LCBsZXRzIGluc2VydCBzb21lIHRyYWZmaWMgKi8KKworCXVyYi0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCisJLyogRmluZCB0aGUgbGFzdCB1cmIgaW4gdGhlIFVSQl9MaXN0IGFuZCBhZGQgdGhpcyB1cmIgYWZ0ZXIgdGhhdCBvbmUuCisJICAgQWxzbyBhZGQgdGhlIHRyYWZmaWMsIHRoYXQgaXMgZG8gYW4gZXRyYXhfdXNiX2FkZF90b19pc29jX3NiX2xpc3QuICBUaGlzCisJICAgaXMgaW1wb3J0YW50IHRvIG1ha2UgdGhpcyBpbiAicmVhbCB0aW1lIiBzaW5jZSBpc29jaHJvbm91cyB0cmFmZmljIGlzCisJICAgdGltZSBzZW5zaXRpdmUuICovCisKKwlkYmdfaXNvYygiQWRkaW5nIGlzb2MgdXJiIHRvIChwb3NzaWJseSBlbXB0eSkgbGlzdCIpOworCXVyYl9saXN0X2FkZCh1cmIsIGVwaWQpOworCWV0cmF4X3VzYl9hZGRfdG9faXNvY19zYl9saXN0KHVyYiwgZXBpZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXJiX2xpc3RfbG9jaywgZmxhZ3MpOworCisJREJGRVhJVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBldHJheF91c2JfY2hlY2tfZXJyb3JfaXNvY19lcChjb25zdCBpbnQgZXBpZCkKK3sKKwl1bnNpZ25lZCBsb25nIGludCBmbGFnczsKKwlpbnQgZXJyb3JfY29kZTsKKwlfX3UzMiByX3VzYl9lcHRfZGF0YTsKKworCS8qIFdlIGNhbid0IHJlYWQgUl9VU0JfRVBJRF9BVFROIGhlcmUgc2luY2UgaXQgd291bGQgY2xlYXIgdGhlIGlzb19lb2YsCisJICAgYnVsa19lb3QgYW5kIGVwaWRfYXR0biBpbnRlcnJ1cHRzLiAgU28gd2UganVzdCBjaGVjayB0aGUgc3RhdHVzIG9mCisJICAgdGhlIGVwaWQgd2l0aG91dCB0ZXN0aW5nIGlmIGZvciBpdCBpbiBSX1VTQl9FUElEX0FUVE4uICovCisKKworCXNhdmVfZmxhZ3MoZmxhZ3MpOworCWNsaSgpOworCSpSX1VTQl9FUFRfSU5ERVggPSBJT19GSUVMRChSX1VTQl9FUFRfSU5ERVgsIHZhbHVlLCBlcGlkKTsKKwlub3AoKTsKKwkvKiBOb3RlIHRoYXQgYWx0aG91Z2ggdGhlcmUgYXJlIHNlcGFyYXRlIFJfVVNCX0VQVF9EQVRBIGFuZCBSX1VTQl9FUFRfREFUQV9JU08KKwkgICByZWdpc3RlcnMsIHRoZXkgYXJlIGxvY2F0ZWQgYXQgdGhlIHNhbWUgYWRkcmVzcyBhbmQgYXJlIG9mIHRoZSBzYW1lIHNpemUuCisJICAgSW4gb3RoZXIgd29yZHMsIHRoaXMgcmVhZCBzaG91bGQgYmUgb2sgZm9yIGlzb2MgYWxzby4gKi8KKwlyX3VzYl9lcHRfZGF0YSA9ICpSX1VTQl9FUFRfREFUQTsKKwlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKworCWVycm9yX2NvZGUgPSBJT19FWFRSQUNUKFJfVVNCX0VQVF9EQVRBX0lTTywgZXJyb3JfY29kZSwgcl91c2JfZXB0X2RhdGEpOworCisJaWYgKHJfdXNiX2VwdF9kYXRhICYgSU9fTUFTSyhSX1VTQl9FUFRfREFUQSwgaG9sZCkpIHsKKwkJd2FybigiSG9sZCB3YXMgc2V0IGZvciBlcGlkICVkLiIsIGVwaWQpOworCQlyZXR1cm47CisJfQorCisJaWYgKGVycm9yX2NvZGUgPT0gSU9fU1RBVEVfVkFMVUUoUl9VU0JfRVBUX0RBVEFfSVNPLCBlcnJvcl9jb2RlLCBub19lcnJvcikpIHsKKworCQkvKiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBTQiBsaXN0IG9mIHRoZSBlcHQgd2FzIGNvbXBsZXRlZCBiZWZvcmUKKwkJICAgbmV3IGRhdGEgd2FzIGFwcGVuZGVkIHRvIGl0LiAgVGhpcyBpcyBub3QgYW4gZXJyb3IsIGJ1dCBpbmRpY2F0ZXMKKwkJICAgbGFyZ2Ugc3lzdGVtIG9yIFVTQiBsb2FkIGFuZCBjb3VsZCBwb3NzaWJseSBjYXVzZSB0cm91YmxlIGZvcgorCQkgICB2ZXJ5IHRpbWluZyBzZW5zaXRpdmUgVVNCIGRldmljZSBkcml2ZXJzIHNvIHdlIGxvZyBpdC4KKwkJKi8KKwkJaW5mbygiSXNvYy4gZXBpZCAlZCBkaXNhYmxlZCB3aXRoIG5vIGVycm9yIiwgZXBpZCk7CisJCXJldHVybjsKKworCX0gZWxzZSBpZiAoZXJyb3JfY29kZSA9PSBJT19TVEFURV9WQUxVRShSX1VTQl9FUFRfREFUQV9JU08sIGVycm9yX2NvZGUsIHN0YWxsKSkgeworCQkvKiBOb3QgcmVhbGx5IGEgcHJvdG9jb2wgZXJyb3IsIGp1c3Qgc2F5cyB0aGF0IHRoZSBlbmRwb2ludCBnYXZlCisJCSAgIGEgc3RhbGwgcmVzcG9uc2UuIE5vdGUgdGhhdCBlcnJvcl9jb2RlIGNhbm5vdCBiZSBzdGFsbCBmb3IgaXNvYy4gKi8KKwkJcGFuaWMoIklzb2MgdHJhZmZpYyBjYW5ub3Qgc3RhbGwiKTsKKworCX0gZWxzZSBpZiAoZXJyb3JfY29kZSA9PSBJT19TVEFURV9WQUxVRShSX1VTQl9FUFRfREFUQV9JU08sIGVycm9yX2NvZGUsIGJ1c19lcnJvcikpIHsKKwkJLyogVHdvIGRldmljZXMgcmVzcG9uZGVkIHRvIGEgdHJhbnNhY3Rpb24gcmVxdWVzdC4gTXVzdCBiZSByZXNvbHZlZAorCQkgICBieSBzb2Z0d2FyZS4gRklYTUU6IFJlc2V0IHBvcnRzPyAqLworCQlwYW5pYygiQnVzIGVycm9yIGZvciBlcGlkICVkLiIKKwkJICAgICAgIiBUd28gZGV2aWNlcyByZXNwb25kZWQgdG8gdHJhbnNhY3Rpb24gcmVxdWVzdCIsCisJCSAgICAgIGVwaWQpOworCisJfSBlbHNlIGlmIChlcnJvcl9jb2RlID09IElPX1NUQVRFX1ZBTFVFKFJfVVNCX0VQVF9EQVRBLCBlcnJvcl9jb2RlLCBidWZmZXJfZXJyb3IpKSB7CisJCS8qIERNQSBvdmVycnVuIG9yIHVuZGVycnVuLiAqLworCQl3YXJuKCJCdWZmZXIgb3ZlcnJ1bi91bmRlcnJ1biBmb3IgZXBpZCAlZC4gRE1BIHRvbyBidXN5PyIsIGVwaWQpOworCisJCS8qIEl0IHNlZW1zIHRoYXQgZXJyb3JfY29kZSA9IGJ1ZmZlcl9lcnJvciBpbgorCQkgICBSX1VTQl9FUFRfREFUQS9SX1VTQl9FUFRfREFUQV9JU08gYW5kIG91cnVuID0geWVzIGluIFJfVVNCX1NUQVRVUworCQkgICBhcmUgdGhlIHNhbWUgZXJyb3IuICovCisJfQorfQorCisKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9hZGRfdG9faXNvY19zYl9saXN0KHN0cnVjdCB1cmIgKnVyYiwgaW50IGVwaWQpCit7CisKKwlpbnQgaSA9IDA7CisKKwlldHJheF91cmJfcHJpdl90ICp1cmJfcHJpdjsKKwlVU0JfU0JfRGVzY190ICpwcmV2X3NiX2Rlc2MsICAqbmV4dF9zYl9kZXNjLCAqdGVtcF9zYl9kZXNjOworCisJREJGRU5URVI7CisKKwlwcmV2X3NiX2Rlc2MgPSBuZXh0X3NiX2Rlc2MgPSB0ZW1wX3NiX2Rlc2MgPSBOVUxMOworCisJdXJiX3ByaXYgPSBrbWFsbG9jKHNpemVvZihldHJheF91cmJfcHJpdl90KSwgR0ZQX0FUT01JQyk7CisJYXNzZXJ0KHVyYl9wcml2ICE9IE5VTEwpOworCW1lbXNldCh1cmJfcHJpdiwgMCwgc2l6ZW9mKGV0cmF4X3VyYl9wcml2X3QpKTsKKworCXVyYi0+aGNwcml2ID0gdXJiX3ByaXY7CisJdXJiX3ByaXYtPmVwaWQgPSBlcGlkOworCisJaWYgKHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpIHsKKworCQlpZiAodXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9PSAwKSBwYW5pYygiZXRyYXhfdXNiX2FkZF90b19pc29jX3NiX2xpc3QgMCBwYWNrZXRzXG4iKTsKKworCQlkYmdfaXNvYygiVHJhbnNmZXIgZm9yIGVwaWQgJWQgaXMgT1VUIiwgZXBpZCk7CisJCWRiZ19pc29jKCIlZCBwYWNrZXRzIGluIFVSQiIsIHVyYi0+bnVtYmVyX29mX3BhY2tldHMpOworCisJCS8qIENyZWF0ZSBvbmUgU0IgZGVzY3JpcHRvciBmb3IgZWFjaCBwYWNrZXQgYW5kIGxpbmsgdGhlbSB0b2dldGhlci4gKi8KKwkJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQkJaWYgKCF1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCkKKwkJCQljb250aW51ZTsKKworCQkJbmV4dF9zYl9kZXNjID0gKFVTQl9TQl9EZXNjX3QqKWttZW1fY2FjaGVfYWxsb2ModXNiX2Rlc2NfY2FjaGUsIFNMQUJfQVRPTUlDKTsKKwkJCWFzc2VydChuZXh0X3NiX2Rlc2MgIT0gTlVMTCk7CisKKwkJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aCA+IDApIHsKKworCQkJCW5leHRfc2JfZGVzYy0+Y29tbWFuZCA9IChJT19TVEFURShVU0JfU0JfY29tbWFuZCwgdHQsIG91dCkgfAorCQkJCQkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW90LCB5ZXMpKTsKKworCQkJCW5leHRfc2JfZGVzYy0+c3dfbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGg7CisJCQkJbmV4dF9zYl9kZXNjLT5idWYgPSB2aXJ0X3RvX3BoeXMoKGNoYXIqKXVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQpOworCisJCQkJLyogQ2hlY2sgaWYgZnVsbCBsZW5ndGggdHJhbnNmZXIuICovCisJCQkJaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID09CisJCQkJICAgIHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwgdXNiX3BpcGVvdXQodXJiLT5waXBlKSkpIHsKKwkJCQkJbmV4dF9zYl9kZXNjLT5jb21tYW5kIHw9IElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCBmdWxsLCB5ZXMpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJZGJnX2lzb2MoInplcm8gbGVuIHBhY2tldCIpOworCQkJCW5leHRfc2JfZGVzYy0+Y29tbWFuZCA9IChJT19GSUVMRChVU0JfU0JfY29tbWFuZCwgcmVtLCAwKSB8CisJCQkJCQkJIElPX1NUQVRFKFVTQl9TQl9jb21tYW5kLCB0dCwgem91dCkgfAorCQkJCQkJCSBJT19TVEFURShVU0JfU0JfY29tbWFuZCwgZW90LCB5ZXMpIHwKKwkJCQkJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGZ1bGwsIHllcykpOworCisJCQkJbmV4dF9zYl9kZXNjLT5zd19sZW4gPSAxOworCQkJCW5leHRfc2JfZGVzYy0+YnVmID0gdmlydF90b19waHlzKCZ6b3V0X2J1ZmZlclswXSk7CisJCQl9CisKKwkJCS8qIEZpcnN0IFNCIGRlc2NyaXB0b3IgdGhhdCBiZWxvbmdzIHRvIHRoaXMgdXJiICovCisJCQlpZiAoaSA9PSAwKQorCQkJCXVyYl9wcml2LT5maXJzdF9zYiA9IG5leHRfc2JfZGVzYzsKKwkJCWVsc2UKKwkJCQlwcmV2X3NiX2Rlc2MtPm5leHQgPSB2aXJ0X3RvX3BoeXMobmV4dF9zYl9kZXNjKTsKKworCQkJcHJldl9zYl9kZXNjID0gbmV4dF9zYl9kZXNjOworCQl9CisKKwkJbmV4dF9zYl9kZXNjLT5jb21tYW5kIHw9IChJT19TVEFURShVU0JfU0JfY29tbWFuZCwgaW50ciwgeWVzKSB8CisJCQkJCSAgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGVvbCwgeWVzKSk7CisJCW5leHRfc2JfZGVzYy0+bmV4dCA9IDA7CisJCXVyYl9wcml2LT5sYXN0X3NiID0gbmV4dF9zYl9kZXNjOworCisJfSBlbHNlIGlmICh1c2JfcGlwZWluKHVyYi0+cGlwZSkpIHsKKworCQlkYmdfaXNvYygiVHJhbnNmZXIgZm9yIGVwaWQgJWQgaXMgSU4iLCBlcGlkKTsKKwkJZGJnX2lzb2MoInRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAlZCIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJCWRiZ19pc29jKCJyZW0gaXMgY2FsY3VsYXRlZCB0byAlZCIsIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbdXJiLT5udW1iZXJfb2ZfcGFja2V0cyAtIDFdLmxlbmd0aCk7CisKKwkJLyogTm90ZSB0aGF0IGluIGRlc2NyaXB0b3JzIGZvciBwZXJpb2RpYyB0cmFmZmljIGFyZSBub3QgY29uc3VtZWQuIFRoaXMgbWVhbnMgdGhhdAorCQkgICB0aGUgVVNCIGNvbnRyb2xsZXIgbmV2ZXIgcHJvcGFnYXRlcyBpbiB0aGUgU0IgbGlzdC4gSW4gb3RoZXIgd29yZHMsIGlmIHRoZXJlIGFscmVhZHkKKwkJICAgaXMgYW4gU0IgZGVzY3JpcHRvciBpbiB0aGUgbGlzdCBmb3IgdGhpcyBFUCB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLiAqLworCQlpZiAoVHhJc29jRVBMaXN0W2VwaWRdLnN1YiA9PSAwKSB7CisJCQlkYmdfaXNvYygiSXNvYyB0cmFmZmljIG5vdCBhbHJlYWR5IHJ1bm5pbmcsIGFsbG9jYXRpbmcgU0IiKTsKKworCQkJbmV4dF9zYl9kZXNjID0gKFVTQl9TQl9EZXNjX3QqKWttZW1fY2FjaGVfYWxsb2ModXNiX2Rlc2NfY2FjaGUsIFNMQUJfQVRPTUlDKTsKKwkJCWFzc2VydChuZXh0X3NiX2Rlc2MgIT0gTlVMTCk7CisKKwkJCW5leHRfc2JfZGVzYy0+Y29tbWFuZCA9IChJT19TVEFURShVU0JfU0JfY29tbWFuZCwgdHQsIGluKSB8CisJCQkJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGVvdCwgeWVzKSB8CisJCQkJCQkgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGVvbCwgeWVzKSk7CisKKwkJCW5leHRfc2JfZGVzYy0+bmV4dCA9IDA7CisJCQluZXh0X3NiX2Rlc2MtPnN3X2xlbiA9IDE7IC8qIEFjdHVhbCBudW1iZXIgb2YgcGFja2V0cyBpcyBub3QgcmVsZXZhbnQKKwkJCQkJCSAgICAgZm9yIHBlcmlvZGljIGluIHRyYWZmaWMgYXMgbG9uZyBhcyBpdCBpcyBtb3JlCisJCQkJCQkgICAgIHRoYW4gemVyby4gIFNldCB0byAxIGFsd2F5cy4gKi8KKwkJCW5leHRfc2JfZGVzYy0+YnVmID0gMDsKKworCQkJLyogVGhlIHJlbSBmaWVsZCBpcyBkb24ndCBjYXJlIGZvciBpc29jIHRyYWZmaWMsIHNvIHdlIGRvbid0IHNldCBpdC4gKi8KKworCQkJLyogT25seSBvbmUgU0IgZGVzY3JpcHRvciB0aGF0IGJlbG9uZ3MgdG8gdGhpcyB1cmIuICovCisJCQl1cmJfcHJpdi0+Zmlyc3Rfc2IgPSBuZXh0X3NiX2Rlc2M7CisJCQl1cmJfcHJpdi0+bGFzdF9zYiA9IG5leHRfc2JfZGVzYzsKKworCQl9IGVsc2UgeworCisJCQlkYmdfaXNvYygiSXNvYyB0cmFmZmljIGFscmVhZHkgcnVubmluZywganVzdCBzZXR0aW5nIGZpcnN0L2xhc3Rfc2IiKTsKKworCQkJLyogRWFjaCBFUCBmb3IgaXNvYyBpbiB3aWxsIGhhdmUgb25seSBvbmUgU0IgZGVzY3JpcHRvciwgc2V0dXAgd2hlbiBzdWJtaXR0aW5nIHRoZQorCQkJICAgYWxyZWFkeSBhY3RpdmUgdXJiLiBOb3RlIHRoYXQgZXZlbiB0aG91Z2ggd2UgbWF5IGhhdmUgc2V2ZXJhbCBmaXJzdF9zYi9sYXN0X3NiCisJCQkgICBwb2ludGluZyBhdCB0aGUgc2FtZSBTQiBkZXNjcmlwdG9yLCB0aGV5IGFyZSBmcmVlZCBvbmx5IG9uY2UgKHdoZW4gdGhlIGxpc3QgaGFzCisJCQkgICBiZWNvbWUgZW1wdHkpLiAqLworCQkJdXJiX3ByaXYtPmZpcnN0X3NiID0gcGh5c190b192aXJ0KFR4SXNvY0VQTGlzdFtlcGlkXS5zdWIpOworCQkJdXJiX3ByaXYtPmxhc3Rfc2IgPSBwaHlzX3RvX3ZpcnQoVHhJc29jRVBMaXN0W2VwaWRdLnN1Yik7CisJCQlyZXR1cm47CisJCX0KKworCX0KKworCS8qIEZpbmQgdGhlIHNwb3QgdG8gaW5zZXJ0IHRoaXMgdXJiIGFuZCBhZGQgaXQuICovCisJaWYgKFR4SXNvY0VQTGlzdFtlcGlkXS5zdWIgPT0gMCkgeworCQkvKiBGaXJzdCBTQiBkZXNjcmlwdG9yIGluc2VydGVkIGluIHRoaXMgbGlzdCAoaW4gb3Igb3V0KS4gKi8KKwkJZGJnX2lzb2MoIkluc2VydGluZyBTQiBkZXNjIGZpcnN0IGluIGxpc3QiKTsKKwkJVHhJc29jRVBMaXN0W2VwaWRdLmh3X2xlbiA9IDA7CisJCVR4SXNvY0VQTGlzdFtlcGlkXS5zdWIgPSB2aXJ0X3RvX3BoeXModXJiX3ByaXYtPmZpcnN0X3NiKTsKKworCX0gZWxzZSB7CisJCS8qIElzb2Nocm9ub3VzIHRyYWZmaWMgaXMgYWxyZWFkeSBydW5uaW5nLCBpbnNlcnQgbmV3IHRyYWZmaWMgbGFzdCAob25seSBvdXQpLiAqLworCQlkYmdfaXNvYygiSW5zZXJ0aW5nIFNCIGRlc2MgbGFzdCBpbiBsaXN0Iik7CisJCXRlbXBfc2JfZGVzYyA9IHBoeXNfdG9fdmlydChUeElzb2NFUExpc3RbZXBpZF0uc3ViKTsKKwkJd2hpbGUgKCh0ZW1wX3NiX2Rlc2MtPmNvbW1hbmQgJiBJT19NQVNLKFVTQl9TQl9jb21tYW5kLCBlb2wpKSAhPQorCQkgICAgICAgSU9fU1RBVEUoVVNCX1NCX2NvbW1hbmQsIGVvbCwgeWVzKSkgeworCQkJYXNzZXJ0KHRlbXBfc2JfZGVzYy0+bmV4dCk7CisJCQl0ZW1wX3NiX2Rlc2MgPSBwaHlzX3RvX3ZpcnQodGVtcF9zYl9kZXNjLT5uZXh0KTsKKwkJfQorCQlkYmdfaXNvYygiQXBwZW5kaW5nIGxpc3Qgb24gZGVzYyAweCVwIiwgdGVtcF9zYl9kZXNjKTsKKworCQkvKiBOZXh0IHBvaW50ZXIgbXVzdCBiZSBzZXQgYmVmb3JlIGVvbCBpcyByZW1vdmVkLiAqLworCQl0ZW1wX3NiX2Rlc2MtPm5leHQgPSB2aXJ0X3RvX3BoeXModXJiX3ByaXYtPmZpcnN0X3NiKTsKKwkJLyogQ2xlYXIgdGhlIHByZXZpb3VzIGVuZCBvZiBsaXN0IGZsYWcgc2luY2UgdGhlcmUgaXMgYSBuZXcgaW4gdGhlCisJCSAgIGFkZGVkIFNCIGRlc2NyaXB0b3IgbGlzdC4gKi8KKwkJdGVtcF9zYl9kZXNjLT5jb21tYW5kICY9IH5JT19NQVNLKFVTQl9TQl9jb21tYW5kLCBlb2wpOworCisJCWlmICghKFR4SXNvY0VQTGlzdFtlcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkpIHsKKwkJCS8qIDguOC41IGluIERlc2lnbmVyJ3MgUmVmZXJlbmNlIHNheXMgd2Ugc2hvdWxkIGNoZWNrIGZvciBhbmQgY29ycmVjdAorCQkJICAgYW55IGVycm9ycyBpbiB0aGUgRVAgaGVyZS4gIFRoYXQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgaWYgZXBpZF9hdHRuCisJCQkgICBpcyBoYW5kbGVkIGNvcnJlY3RseSwgc28gd2UgYXNzdW1lIGFsbCBpcyBvay4gKi8KKwkJCWRiZ19pc29jKCJFUCBkaXNhYmxlZCIpOworCQkJZXRyYXhfdXNiX2NoZWNrX2Vycm9yX2lzb2NfZXAoZXBpZCk7CisKKwkJCS8qIFRoZSBTQiBsaXN0IHdhcyBleGhhdXN0ZWQuICovCisJCQlpZiAodmlydF90b19waHlzKHVyYl9wcml2LT5sYXN0X3NiKSAhPSBUeElzb2NFUExpc3RbZXBpZF0uc3ViKSB7CisJCQkJLyogVGhlIG5ldyBzdWJsaXN0IGRpZCBub3QgZ2V0IHByb2Nlc3NlZCBiZWZvcmUgdGhlIEVQIHdhcworCQkJCSAgIGRpc2FibGVkLiAgU2V0dXAgdGhlIEVQIGFnYWluLiAqLworCQkJCWRiZ19pc29jKCJTZXQgRVAgc3ViIHRvIG5ldyBsaXN0Iik7CisJCQkJVHhJc29jRVBMaXN0W2VwaWRdLmh3X2xlbiA9IDA7CisJCQkJVHhJc29jRVBMaXN0W2VwaWRdLnN1YiA9IHZpcnRfdG9fcGh5cyh1cmJfcHJpdi0+Zmlyc3Rfc2IpOworCQkJfQorCQl9CisJfQorCisJaWYgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfSVNPX0FTQVApIHsKKwkJLyogVGhlIGlzb2MgdHJhbnNmZXIgc2hvdWxkIGJlIHN0YXJ0ZWQgYXMgc29vbiBhcyBwb3NzaWJsZS4gVGhlIHN0YXJ0X2ZyYW1lCisJCSAgIGZpZWxkIGlzIGEgcmV0dXJuIHZhbHVlIGlmIFVSQl9JU09fQVNBUCB3YXMgc2V0LiBDb21wYXJpbmcgUl9VU0JfRk1fTlVNQkVSCisJCSAgIHdpdGggYSBVU0IgQ2hpZWYgdHJhY2Ugc2hvd3MgdGhhdCB0aGUgZmlyc3QgaXNvYyBJTiB0b2tlbiBpcyBzZW50IDIgZnJhbWVzCisJCSAgIGxhdGVyLiBJJ20gbm90IHN1cmUgaG93IHRoaXMgYWZmZWN0cyB1c2FnZSBvZiB0aGUgc3RhcnRfZnJhbWUgZmllbGQgYnkgdGhlCisJCSAgIGRldmljZSBkcml2ZXIsIG9yIGhvdyBpdCBhZmZlY3RzIHRoaW5ncyB3aGVuIFVTQl9JU09fQVNBUCBpcyBub3Qgc2V0LCBzbworCQkgICB0aGVyZWZvcmUgdGhlcmUncyBubyBjb21wZW5zYXRpb24gZm9yIHRoZSAyIGZyYW1lICJsYWciIGhlcmUuICovCisJCXVyYi0+c3RhcnRfZnJhbWUgPSAoKlJfVVNCX0ZNX05VTUJFUiAmIDB4N2ZmKTsKKwkJVHhJc29jRVBMaXN0W2VwaWRdLmNvbW1hbmQgfD0gSU9fU1RBVEUoVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSwgeWVzKTsKKwkJdXJiX3ByaXYtPnVyYl9zdGF0ZSA9IFNUQVJURUQ7CisJCWRiZ19pc29jKCJVUkJfSVNPX0FTQVAgc2V0LCB1cmItPnN0YXJ0X2ZyYW1lIHNldCB0byAlZCIsIHVyYi0+c3RhcnRfZnJhbWUpOworCX0gZWxzZSB7CisJCS8qIE5vdCBzdGFydGVkIHlldC4gKi8KKwkJdXJiX3ByaXYtPnVyYl9zdGF0ZSA9IE5PVF9TVEFSVEVEOworCQlkYmdfaXNvYygidXJiX3ByaXYtPnVyYl9zdGF0ZSBzZXQgdG8gTk9UX1NUQVJURUQiKTsKKwl9CisKKyAgICAgICAvKiBXZSBzdGFydCB0aGUgRE1BIHN1YiBjaGFubmVsIHdpdGhvdXQgY2hlY2tpbmcgaWYgaXQncyBydW5uaW5nIG9yIG5vdCwgYmVjYXVzZToKKwkgIDEpIElmIGl0J3MgYWxyZWFkeSBydW5uaW5nLCBpc3N1aW5nIHRoZSBzdGFydCBjb21tYW5kIGlzIGEgbm9wLgorCSAgMikgV2UgYXZvaWQgYSB0ZXN0LWFuZC1zZXQgcmFjZSBjb25kaXRpb24uICovCisJKlJfRE1BX0NIOF9TVUIzX0NNRCA9IElPX1NUQVRFKFJfRE1BX0NIOF9TVUIzX0NNRCwgY21kLCBzdGFydCk7CisKKwlEQkZFWElUOworfQorCitzdGF0aWMgdm9pZCBldHJheF91c2JfY29tcGxldGVfaXNvY191cmIoc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKQoreworCWV0cmF4X3VyYl9wcml2X3QgKnVyYl9wcml2ID0gKGV0cmF4X3VyYl9wcml2X3QgKil1cmItPmhjcHJpdjsKKwlpbnQgZXBpZCA9IHVyYl9wcml2LT5lcGlkOworCWludCBhdXRvX3Jlc3VibWl0ID0gMDsKKworCURCRkVOVEVSOworCWRiZ19pc29jKCJjb21wbGV0ZSB1cmIgMHglcCwgc3RhdHVzICVkIiwgdXJiLCBzdGF0dXMpOworCisJaWYgKHN0YXR1cykKKwkJd2FybigiQ29tcGxldGluZyBpc29jIHVyYiB3aXRoIHN0YXR1cyAlZC4iLCBzdGF0dXMpOworCisJaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSkgeworCQlpbnQgaTsKKworCQkvKiBNYWtlIHRoYXQgYWxsIGlzb2MgcGFja2V0cyBoYXZlIHN0YXR1cyBhbmQgbGVuZ3RoIHNldCBiZWZvcmUKKwkJICAgY29tcGxldGluZyB0aGUgdXJiLiAqLworCQlmb3IgKGkgPSB1cmJfcHJpdi0+aXNvY19wYWNrZXRfY291bnRlcjsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoID0gMDsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzID0gLUVQUk9UTzsKKwkJfQorCisJCXVyYl9saXN0X2RlbCh1cmIsIGVwaWQpOworCisJCWlmICghbGlzdF9lbXB0eSgmdXJiX2xpc3RbZXBpZF0pKSB7CisJCQkoKGV0cmF4X3VyYl9wcml2X3QgKikodXJiX2xpc3RfZmlyc3QoZXBpZCktPmhjcHJpdikpLT51cmJfc3RhdGUgPSBTVEFSVEVEOworCQl9IGVsc2UgeworCQkJdW5zaWduZWQgbG9uZyBpbnQgZmxhZ3M7CisJCQlpZiAoVHhJc29jRVBMaXN0W2VwaWRdLmNvbW1hbmQgJiBJT19NQVNLKFVTQl9FUF9jb21tYW5kLCBlbmFibGUpKSB7CisJCQkJLyogVGhlIEVQIHdhcyBlbmFibGVkLCBkaXNhYmxlIGl0IGFuZCB3YWl0LiAqLworCQkJCVR4SXNvY0VQTGlzdFtlcGlkXS5jb21tYW5kICY9IH5JT19NQVNLKFVTQl9FUF9jb21tYW5kLCBlbmFibGUpOworCisJCQkJLyogQWgsIHRoZSBsdXh1cnkgb2YgYnVzeS13YWl0LiAqLworCQkJCXdoaWxlICgqUl9ETUFfQ0g4X1NVQjNfRVAgPT0gdmlydF90b19waHlzKCZUeElzb2NFUExpc3RbZXBpZF0pKTsKKwkJCX0KKworCQkJZXRyYXhfcmVtb3ZlX2Zyb21fc2JfbGlzdCh1cmIpOworCQkJVHhJc29jRVBMaXN0W2VwaWRdLnN1YiA9IDA7CisJCQlUeElzb2NFUExpc3RbZXBpZF0uaHdfbGVuID0gMDsKKworCQkJc2F2ZV9mbGFncyhmbGFncyk7CisJCQljbGkoKTsKKwkJCWV0cmF4X3VzYl9mcmVlX2VwaWQoZXBpZCk7CisJCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwkJfQorCisJCXVyYi0+aGNwcml2ID0gMDsKKwkJa2ZyZWUodXJiX3ByaXYpOworCisJCS8qIFJlbGVhc2UgYWxsb2NhdGVkIGJhbmR3aWR0aC4gKi8KKwkJdXNiX3JlbGVhc2VfYmFuZHdpZHRoKHVyYi0+ZGV2LCB1cmIsIDApOworCX0gZWxzZSBpZiAodXNiX3BpcGVvdXQodXJiLT5waXBlKSkgeworCQlpbnQgZnJlZWRfZGVzY3I7CisKKwkJZGJnX2lzb2MoIklzb2Mgb3V0IHVyYiBjb21wbGV0ZSAweCVwIiwgdXJiKTsKKworCQkvKiBVcGRhdGUgdGhlIHVyYiBsaXN0LiAqLworCQl1cmJfbGlzdF9kZWwodXJiLCBlcGlkKTsKKworCQlmcmVlZF9kZXNjciA9IGV0cmF4X3JlbW92ZV9mcm9tX3NiX2xpc3QodXJiKTsKKwkJZGJnX2lzb2MoImZyZWVkICVkIGRlc2NyaXB0b3JzIG9mICVkIHBhY2tldHMiLCBmcmVlZF9kZXNjciwgdXJiLT5udW1iZXJfb2ZfcGFja2V0cyk7CisJCWFzc2VydChmcmVlZF9kZXNjciA9PSB1cmItPm51bWJlcl9vZl9wYWNrZXRzKTsKKwkJdXJiLT5oY3ByaXYgPSAwOworCQlrZnJlZSh1cmJfcHJpdik7CisKKwkJLyogUmVsZWFzZSBhbGxvY2F0ZWQgYmFuZHdpZHRoLiAqLworCQl1c2JfcmVsZWFzZV9iYW5kd2lkdGgodXJiLT5kZXYsIHVyYiwgMCk7CisJfQorCisJdXJiLT5zdGF0dXMgPSBzdGF0dXM7CisJaWYgKHVyYi0+Y29tcGxldGUpIHsKKwkJdXJiLT5jb21wbGV0ZSh1cmIsIE5VTEwpOworCX0KKworCWlmIChhdXRvX3Jlc3VibWl0KSB7CisJCS8qIENoZWNrIHRoYXQgdXJiIHdhcyBub3QgdW5saW5rZWQgYnkgdGhlIGNvbXBsZXRlIGNhbGxiYWNrLiAqLworCQlpZiAoX191cmJfbGlzdF9lbnRyeSh1cmIsIGVwaWQpKSB7CisJCQkvKiBNb3ZlIHRoaXMgb25lIGRvd24gdGhlIGxpc3QuICovCisJCQl1cmJfbGlzdF9tb3ZlX2xhc3QodXJiLCBlcGlkKTsKKworCQkJLyogTWFyayB0aGUgbm93IGZpcnN0IHVyYiBhcyBzdGFydGVkIChtYXkgYWxyZWFkeSBiZSkuICovCisJCQkoKGV0cmF4X3VyYl9wcml2X3QgKikodXJiX2xpc3RfZmlyc3QoZXBpZCktPmhjcHJpdikpLT51cmJfc3RhdGUgPSBTVEFSVEVEOworCisJCQkvKiBNdXN0IHNldCB0aGlzIHRvIDAgc2luY2UgdGhpcyB1cmIgaXMgc3RpbGwgYWN0aXZlIGFmdGVyCisJCQkgICBjb21wbGV0aW9uLiAqLworCQkJdXJiX3ByaXYtPmlzb2NfcGFja2V0X2NvdW50ZXIgPSAwOworCQl9IGVsc2UgeworCQkJd2FybigiKElTT0MpIGF1dG9tYXRpYyByZXN1Ym1pdCB1cmIgMHglcCByZW1vdmVkIGJ5IGNvbXBsZXRlLiIsIHVyYik7CisJCX0KKwl9CisKKwlEQkZFWElUOworfQorCitzdGF0aWMgdm9pZCBldHJheF91c2JfY29tcGxldGVfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cykKK3sKKwlzd2l0Y2ggKHVzYl9waXBldHlwZSh1cmItPnBpcGUpKSB7CisJY2FzZSBQSVBFX0JVTEs6CisJCWV0cmF4X3VzYl9jb21wbGV0ZV9idWxrX3VyYih1cmIsIHN0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgUElQRV9DT05UUk9MOgorCQlldHJheF91c2JfY29tcGxldGVfY3RybF91cmIodXJiLCBzdGF0dXMpOworCQlicmVhazsKKwljYXNlIFBJUEVfSU5URVJSVVBUOgorCQlldHJheF91c2JfY29tcGxldGVfaW50cl91cmIodXJiLCBzdGF0dXMpOworCQlicmVhazsKKwljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJCWV0cmF4X3VzYl9jb21wbGV0ZV9pc29jX3VyYih1cmIsIHN0YXR1cyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycigiVW5rbm93biBwaXBldHlwZSIpOworCX0KK30KKworCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBldHJheF91c2JfaGNfaW50ZXJydXB0X3RvcF9oYWxmKGludCBpcnEsIHZvaWQgKnZoYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdXNiX2ludGVycnVwdF9yZWdpc3RlcnNfdCAqcmVnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJX191MzIgaXJxX21hc2s7CisJX191OCBzdGF0dXM7CisJX191MzIgZXBpZF9hdHRuOworCV9fdTE2IHBvcnRfc3RhdHVzXzE7CisJX191MTYgcG9ydF9zdGF0dXNfMjsKKwlfX3UzMiBmbV9udW1iZXI7CisKKwlEQkZFTlRFUjsKKworCS8qIFJlYWQgY3JpdGljYWwgcmVnaXN0ZXJzIGludG8gbG9jYWwgdmFyaWFibGVzLCBkbyBrbWFsbG9jIGFmdGVyd2FyZHMuICovCisJc2F2ZV9mbGFncyhmbGFncyk7CisJY2xpKCk7CisKKwlpcnFfbWFzayA9ICpSX1VTQl9JUlFfTUFTS19SRUFEOworCS8qIFJlYWRpbmcgUl9VU0JfU1RBVFVTIGNsZWFycyB0aGUgY3RsX3N0YXR1cyBpbnRlcnJ1cHQuIE5vdGUgdGhhdCBSX1VTQl9TVEFUVVMKKwkgICBtdXN0IGJlIHJlYWQgYmVmb3JlIFJfVVNCX0VQSURfQVRUTiBzaW5jZSByZWFkaW5nIHRoZSBsYXR0ZXIgY2xlYXJzIHRoZQorCSAgIG91cnVuIGFuZCBwZXJyb3IgZmllbGRzIG9mIFJfVVNCX1NUQVRVUy4gKi8KKwlzdGF0dXMgPSAqUl9VU0JfU1RBVFVTOworCisJLyogUmVhZGluZyBSX1VTQl9FUElEX0FUVE4gY2xlYXJzIHRoZSBpc29fZW9mLCBidWxrX2VvdCBhbmQgZXBpZF9hdHRuIGludGVycnVwdHMuICovCisJZXBpZF9hdHRuID0gKlJfVVNCX0VQSURfQVRUTjsKKworCS8qIFJlYWRpbmcgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMSBhbmQgUl9VU0JfUkhfUE9SVF9TVEFUVVNfMiBjbGVhcnMgdGhlCisJICAgcG9ydF9zdGF0dXMgaW50ZXJydXB0LiAqLworCXBvcnRfc3RhdHVzXzEgPSAqUl9VU0JfUkhfUE9SVF9TVEFUVVNfMTsKKwlwb3J0X3N0YXR1c18yID0gKlJfVVNCX1JIX1BPUlRfU1RBVFVTXzI7CisKKwkvKiBSZWFkaW5nIFJfVVNCX0ZNX05VTUJFUiBjbGVhcnMgdGhlIHNvZiBpbnRlcnJ1cHQuICovCisJLyogTm90ZTogdGhlIGxvd2VyIDExIGJpdHMgY29udGFpbiB0aGUgYWN0dWFsIGZyYW1lIG51bWJlciwgc2VudCB3aXRoIGVhY2ggc29mLiAqLworCWZtX251bWJlciA9ICpSX1VTQl9GTV9OVU1CRVI7CisKKwlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKworCXJlZyA9ICh1c2JfaW50ZXJydXB0X3JlZ2lzdGVyc190ICopa21lbV9jYWNoZV9hbGxvYyh0b3BfaGFsZl9yZWdfY2FjaGUsIFNMQUJfQVRPTUlDKTsKKworCWFzc2VydChyZWcgIT0gTlVMTCk7CisKKwlyZWctPmhjID0gKGV0cmF4X2hjX3QgKil2aGM7CisKKwkvKiBOb3cgcHV0IHJlZ2lzdGVyIHZhbHVlcyBpbnRvIGttYWxsb2MnZCBhcmVhLiAqLworCXJlZy0+cl91c2JfaXJxX21hc2tfcmVhZCA9IGlycV9tYXNrOworCXJlZy0+cl91c2Jfc3RhdHVzID0gc3RhdHVzOworCXJlZy0+cl91c2JfZXBpZF9hdHRuID0gZXBpZF9hdHRuOworCXJlZy0+cl91c2JfcmhfcG9ydF9zdGF0dXNfMSA9IHBvcnRfc3RhdHVzXzE7CisJcmVnLT5yX3VzYl9yaF9wb3J0X3N0YXR1c18yID0gcG9ydF9zdGF0dXNfMjsKKwlyZWctPnJfdXNiX2ZtX251bWJlciA9IGZtX251bWJlcjsKKworICAgICAgICBJTklUX1dPUksoJnJlZy0+dXNiX2JoLCBldHJheF91c2JfaGNfaW50ZXJydXB0X2JvdHRvbV9oYWxmLCByZWcpOworICAgICAgICBzY2hlZHVsZV93b3JrKCZyZWctPnVzYl9iaCk7CisKKwlEQkZFWElUOworCisgICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgZXRyYXhfdXNiX2hjX2ludGVycnVwdF9ib3R0b21faGFsZih2b2lkICpkYXRhKQoreworCXVzYl9pbnRlcnJ1cHRfcmVnaXN0ZXJzX3QgKnJlZyA9ICh1c2JfaW50ZXJydXB0X3JlZ2lzdGVyc190ICopZGF0YTsKKwlfX3UzMiBpcnFfbWFzayA9IHJlZy0+cl91c2JfaXJxX21hc2tfcmVhZDsKKworCURCRkVOVEVSOworCisJLyogSW50ZXJydXB0cyBhcmUgaGFuZGxlZCBpbiBvcmRlciBvZiBwcmlvcml0eS4gKi8KKwlpZiAoaXJxX21hc2sgJiBJT19NQVNLKFJfVVNCX0lSUV9NQVNLX1JFQUQsIGVwaWRfYXR0bikpIHsKKwkJZXRyYXhfdXNiX2hjX2VwaWRfYXR0bl9pbnRlcnJ1cHQocmVnKTsKKwl9CisJaWYgKGlycV9tYXNrICYgSU9fTUFTSyhSX1VTQl9JUlFfTUFTS19SRUFELCBwb3J0X3N0YXR1cykpIHsKKwkJZXRyYXhfdXNiX2hjX3BvcnRfc3RhdHVzX2ludGVycnVwdChyZWcpOworCX0KKwlpZiAoaXJxX21hc2sgJiBJT19NQVNLKFJfVVNCX0lSUV9NQVNLX1JFQUQsIGN0bF9zdGF0dXMpKSB7CisJCWV0cmF4X3VzYl9oY19jdGxfc3RhdHVzX2ludGVycnVwdChyZWcpOworCX0KKwlpZiAoaXJxX21hc2sgJiBJT19NQVNLKFJfVVNCX0lSUV9NQVNLX1JFQUQsIGlzb19lb2YpKSB7CisJCWV0cmF4X3VzYl9oY19pc29jX2VvZl9pbnRlcnJ1cHQoKTsKKwl9CisJaWYgKGlycV9tYXNrICYgSU9fTUFTSyhSX1VTQl9JUlFfTUFTS19SRUFELCBidWxrX2VvdCkpIHsKKwkJLyogVXBkYXRlL3Jlc3RhcnQgdGhlIGJ1bGsgc3RhcnQgdGltZXIgc2luY2Ugb2J2aW91c2x5IHRoZSBjaGFubmVsIGlzIHJ1bm5pbmcuICovCisJCW1vZF90aW1lcigmYnVsa19zdGFydF90aW1lciwgamlmZmllcyArIEJVTEtfU1RBUlRfVElNRVJfSU5URVJWQUwpOworCQkvKiBVcGRhdGUvcmVzdGFydCB0aGUgYnVsayBlb3QgdGltZXIgc2luY2Ugd2UganVzdCByZWNlaXZlZCBhbiBidWxrIGVvdCBpbnRlcnJ1cHQuICovCisJCW1vZF90aW1lcigmYnVsa19lb3RfdGltZXIsIGppZmZpZXMgKyBCVUxLX0VPVF9USU1FUl9JTlRFUlZBTCk7CisKKwkJZXRyYXhfdXNiX2hjX2J1bGtfZW90X2ludGVycnVwdCgwKTsKKwl9CisKKwlrbWVtX2NhY2hlX2ZyZWUodG9wX2hhbGZfcmVnX2NhY2hlLCByZWcpOworCisJREJGRVhJVDsKK30KKworCit2b2lkIGV0cmF4X3VzYl9oY19pc29jX2VvZl9pbnRlcnJ1cHQodm9pZCkKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJZXRyYXhfdXJiX3ByaXZfdCAqdXJiX3ByaXY7CisJaW50IGVwaWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCURCRkVOVEVSOworCisJLyogRG8gbm90IGNoZWNrIHRoZSBpbnZhbGlkIGVwaWQgKGl0IGhhcyBhIHZhbGlkIHN1YiBwb2ludGVyKS4gKi8KKwlmb3IgKGVwaWQgPSAwOyBlcGlkIDwgTkJSX09GX0VQSURTIC0gMTsgZXBpZCsrKSB7CisKKwkJLyogRG8gbm90IGNoZWNrIHRoZSBpbnZhbGlkIGVwaWQgKGl0IGhhcyBhIHZhbGlkIHN1YiBwb2ludGVyKS4gKi8KKwkJaWYgKChlcGlkID09IERVTU1ZX0VQSUQpIHx8IChlcGlkID09IElOVkFMSURfRVBJRCkpCisJCQljb250aW51ZTsKKworCQkvKiBEaXNhYmxlIGludGVycnVwdHMgdG8gYmxvY2sgdGhlIGlzb2Mgb3V0IGRlc2NyaXB0b3IgaW50ZXJydXB0IGhhbmRsZXIKKwkJICAgZnJvbSBiZWluZyBjYWxsZWQgd2hpbGUgdGhlIGlzb2MgRVBJRCBsaXN0IGlzIGJlaW5nIGNoZWNrZWQuCisJCSovCisJCXNhdmVfZmxhZ3MoZmxhZ3MpOworCQljbGkoKTsKKworCQlpZiAoVHhJc29jRVBMaXN0W2VwaWRdLnN1YiA9PSAwKSB7CisJCQkvKiBOb3RoaW5nIGhlcmUgdG8gc2VlLiAqLworCQkJcmVzdG9yZV9mbGFncyhmbGFncyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEdldCB0aGUgZmlyc3QgdXJiIChpZiBhbnkpLiAqLworCQl1cmIgPSB1cmJfbGlzdF9maXJzdChlcGlkKTsKKwkJaWYgKHVyYiA9PSAwKSB7CisJCQl3YXJuKCJJZ25vcmluZyBOVUxMIHVyYiIpOworCQkJcmVzdG9yZV9mbGFncyhmbGFncyk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpKSB7CisKKwkJCS8qIFNhbml0eSBjaGVjay4gKi8KKwkJCWFzc2VydCh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0lTT0NIUk9OT1VTKTsKKworCQkJdXJiX3ByaXYgPSAoZXRyYXhfdXJiX3ByaXZfdCAqKXVyYi0+aGNwcml2OworCQkJYXNzZXJ0KHVyYl9wcml2KTsKKworCQkJaWYgKHVyYl9wcml2LT51cmJfc3RhdGUgPT0gTk9UX1NUQVJURUQpIHsKKworCQkJCS8qIElmIEFTQVAgaXMgbm90IHNldCBhbmQgdXJiLT5zdGFydF9mcmFtZSBpcyB0aGUgY3VycmVudCBmcmFtZSwKKwkJCQkgICBzdGFydCB0aGUgdHJhbnNmZXIuICovCisJCQkJaWYgKCEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9JU09fQVNBUCkgJiYKKwkJCQkgICAgKHVyYi0+c3RhcnRfZnJhbWUgPT0gKCpSX1VTQl9GTV9OVU1CRVIgJiAweDdmZikpKSB7CisKKwkJCQkJZGJnX2lzb2MoIkVuYWJsaW5nIGlzb2MgSU4gRVAgZGVzY3IgZm9yIGVwaWQgJWQiLCBlcGlkKTsKKwkJCQkJVHhJc29jRVBMaXN0W2VwaWRdLmNvbW1hbmQgfD0gSU9fU1RBVEUoVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSwgeWVzKTsKKworCQkJCQkvKiBUaGlzIHVyYiBpcyBub3cgYWN0aXZlLiAqLworCQkJCQl1cmJfcHJpdi0+dXJiX3N0YXRlID0gU1RBUlRFRDsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQl9CisJCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCX0KKworCURCRkVYSVQ7CisKK30KKwordm9pZCBldHJheF91c2JfaGNfYnVsa19lb3RfaW50ZXJydXB0KGludCB0aW1lcl9pbmR1Y2VkKQoreworIAlpbnQgZXBpZDsKKworCS8qIFRoZSB0ZWNobmlxdWUgaXMgdG8gcnVuIG9uZSB1cmIgYXQgYSB0aW1lLCB3YWl0IGZvciB0aGUgZW90IGludGVycnVwdCBhdCB3aGljaAorCSAgIHBvaW50IHRoZSBFUCBkZXNjcmlwdG9yIGhhcyBiZWVuIGRpc2FibGVkLiAqLworCisJREJGRU5URVI7CisJZGJnX2J1bGsoImJ1bGsgZW90JXMiLCB0aW1lcl9pbmR1Y2VkID8gIiwgY2FsbGVkIGJ5IHRpbWVyIiA6ICIiKTsKKworCWZvciAoZXBpZCA9IDA7IGVwaWQgPCBOQlJfT0ZfRVBJRFM7IGVwaWQrKykgeworCisJCWlmICghKFR4QnVsa0VQTGlzdFtlcGlkXS5jb21tYW5kICYgSU9fTUFTSyhVU0JfRVBfY29tbWFuZCwgZW5hYmxlKSkgJiYKKwkJICAgIChUeEJ1bGtFUExpc3RbZXBpZF0uc3ViICE9IDApKSB7CisKKwkJCXN0cnVjdCB1cmIgKnVyYjsKKwkJCWV0cmF4X3VyYl9wcml2X3QgKnVyYl9wcml2OworCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJCV9fdTMyIHJfdXNiX2VwdF9kYXRhOworCisJCQkvKiBGb3VuZCBhIGRpc2FibGVkIEVQIGRlc2NyaXB0b3Igd2hpY2ggaGFzIGEgbm9uLW51bGwgc3ViIHBvaW50ZXIuCisJCQkgICBWZXJpZnkgdGhhdCB0aGlzIGN0cmwgRVAgZGVzY3JpcHRvciBnb3QgZGlzYWJsZWQgbm8gZXJyb3JzLgorCQkJICAgRklYTUU6IE5lY2Vzc2FyeSB0byBjaGVjayBlcnJvcl9jb2RlPyAqLworCQkJZGJnX2J1bGsoImZvciBlcGlkICVkPyIsIGVwaWQpOworCisJCQkvKiBHZXQgdGhlIGZpcnN0IHVyYi4gKi8KKwkJCXVyYiA9IHVyYl9saXN0X2ZpcnN0KGVwaWQpOworCisJCQkvKiBGSVhNRTogQ291bGQgdGhpcyBoYXBwZW4gZm9yIHZhbGlkIHJlYXNvbnM/IFdoeSBkaWQgaXQgZGlzYXBwZWFyPyBCZWNhdXNlIG9mCisJCQkgICB3cm9uZyB1bmxpbmtpbmc/ICovCisJCQlpZiAoIXVyYikgeworCQkJCXdhcm4oIk5VTEwgdXJiIGZvciBlcGlkICVkIiwgZXBpZCk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWFzc2VydCh1cmIpOworCQkJdXJiX3ByaXYgPSAoZXRyYXhfdXJiX3ByaXZfdCAqKXVyYi0+aGNwcml2OworCQkJYXNzZXJ0KHVyYl9wcml2KTsKKworCQkJLyogU2FuaXR5IGNoZWNrcy4gKi8KKwkJCWFzc2VydCh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSA9PSBQSVBFX0JVTEspOworCQkJaWYgKHBoeXNfdG9fdmlydChUeEJ1bGtFUExpc3RbZXBpZF0uc3ViKSAhPSB1cmJfcHJpdi0+bGFzdF9zYikgeworCQkJCWVycigiYnVsayBlbmRwb2ludCBnb3QgZGlzYWJsZWQgYmVmb3JlIHJlYWNoaW5nIGxhc3Qgc2IiKTsKKwkJCX0KKworCQkJLyogRm9yIGJ1bGsgSU4gdHJhZmZpYywgdGhlcmUgc2VlbXMgdG8gYmUgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuCisJCQkgICBiZXR3ZWVuIHRoZSBidWxrIGVvdCBhbmQgZW9wIGludGVycnVwdHMsIG9yIHJhdGhlciBhbiB1bmNlcnRhaW50eSByZWdhcmRpbmcKKwkJCSAgIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGhhcHBlbi4gTm9ybWFsbHkgd2UgZXhwZWN0IHRoZSBlb3AgaW50ZXJydXB0IGZyb20KKwkJCSAgIERNQSBjaGFubmVsIDkgdG8gaGFwcGVuIGJlZm9yZSB0aGUgZW90IGludGVycnVwdC4KKworCQkJICAgVGhlcmVmb3JlLCB3ZSBjb21wbGV0ZSB0aGUgYnVsayBJTiB1cmIgaW4gdGhlIHJ4IGludGVycnVwdCBoYW5kbGVyIGluc3RlYWQuICovCisKKwkJCWlmICh1c2JfcGlwZWluKHVyYi0+cGlwZSkpIHsKKwkJCQlkYmdfYnVsaygiaW4gdXJiLCBjb250aW51aW5nIik7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXNhdmVfZmxhZ3MoZmxhZ3MpOworCQkJY2xpKCk7CisJCQkqUl9VU0JfRVBUX0lOREVYID0gSU9fRklFTEQoUl9VU0JfRVBUX0lOREVYLCB2YWx1ZSwgZXBpZCk7CisJCQlub3AoKTsKKwkJCXJfdXNiX2VwdF9kYXRhID0gKlJfVVNCX0VQVF9EQVRBOworCQkJcmVzdG9yZV9mbGFncyhmbGFncyk7CisKKwkJCWlmIChJT19FWFRSQUNUKFJfVVNCX0VQVF9EQVRBLCBlcnJvcl9jb2RlLCByX3VzYl9lcHRfZGF0YSkgPT0KKwkJCSAgICBJT19TVEFURV9WQUxVRShSX1VTQl9FUFRfREFUQSwgZXJyb3JfY29kZSwgbm9fZXJyb3IpKSB7CisJCQkJLyogVGhpcyBtZWFucyB0aGF0IHRoZSBlbmRwb2ludCBoYXMgbm8gZXJyb3IsIGlzIGRpc2FibGVkCisJCQkJICAgYW5kIGhhZCBpbnNlcnRlZCB0cmFmZmljLCBpLmUuIHRyYW5zZmVyIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQuICovCisJCQkJZXRyYXhfdXNiX2NvbXBsZXRlX2J1bGtfdXJiKHVyYiwgMCk7CisJCQl9IGVsc2UgeworCQkJCS8qIFNob3VsZG4ndCBoYXBwZW4uIFdlIGV4cGVjdCBlcnJvcnMgdG8gYmUgY2F1Z2h0IGJ5IGVwaWQgYXR0ZW50aW9uLiAqLworCQkJCWVycigiRm91bmQgZGlzYWJsZWQgYnVsayBFUCBkZXNjLCBlcnJvcl9jb2RlICE9IG5vX2Vycm9yIik7CisJCQl9CisJCX0KKwl9CisKKwkvKiBOb3JtYWxseSwgd2Ugc2hvdWxkIGZpbmQgKGF0IGxlYXN0KSBvbmUgZGlzYWJsZWQgRVAgZGVzY3JpcHRvciB3aXRoIGEgdmFsaWQgc3ViIHBvaW50ZXIuCisJICAgSG93ZXZlciwgYmVjYXVzZSBvZiB0aGUgdW5jZXJ0YWludHkgaW4gdGhlIGRlbGl2ZXJhbmNlIG9mIHRoZSBlb3AvZW90IGludGVycnVwdHMsIHdlIG1heQorCSAgIG5vdC4gIEFsc28sIHdlIG1pZ2h0IGZpbmQgdHdvIGRpc2FibGVkIEVQcyB3aGVuIGhhbmRsaW5nIGFuIGVvdCBpbnRlcnJ1cHQsIGFuZCB0aGVuIGZpbmQKKwkgICBub25lIHRoZSBuZXh0IHRpbWUuICovCisKKwlEQkZFWElUOworCit9CisKK3ZvaWQgZXRyYXhfdXNiX2hjX2VwaWRfYXR0bl9pbnRlcnJ1cHQodXNiX2ludGVycnVwdF9yZWdpc3RlcnNfdCAqcmVnKQoreworCS8qIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgZXBpZCBhdHRlbnRpb24gaW50ZXJydXB0LiAgVGhlcmUgYXJlIGEgdmFyaWV0eSBvZiByZWFzb25zCisJICAgZm9yIHRoaXMgaW50ZXJydXB0IHRvIGhhcHBlbiAoRGVzaWduZXIncyBSZWZlcmVuY2UsIHAuIDggLSAyMiBmb3IgdGhlIGRldGFpbHMpOgorCisJICAgaW52YWxpZCBlcF9pZCAgLSBJbnZhbGlkIGVwaWQgaW4gYW4gRVAgKEVQIGRpc2FibGVkKS4KKwkgICBzdGFsbAkgIC0gTm90IHN0cmljdGx5IGFuIGVycm9yIGNvbmRpdGlvbiAoRVAgZGlzYWJsZWQpLgorCSAgIDNyZCBlcnJvciAgICAgIC0gVGhyZWUgc3VjY2Vzc2l2ZSB0cmFuc2FjdGlvbiBlcnJvcnMgIChFUCBkaXNhYmxlZCkuCisJICAgYnVmZmVyIG91cnVuICAgLSBCdWZmZXIgb3ZlcnJ1biBvciB1bmRlcnJ1biAoRVAgZGlzYWJsZWQpLgorCSAgIHBhc3QgZW9mMSAgICAgIC0gSW50ciBvciBpc29jIHRyYW5zYWN0aW9uIHByb2NlZWRzIHBhc3QgRU9GMS4KKwkgICBuZWFyIGVvZiAgICAgICAtIEludHIgb3IgaXNvYyB0cmFuc2FjdGlvbiB3b3VsZCBub3QgZml0IGluc2lkZSB0aGUgZnJhbWUuCisJICAgem91dCB0cmFuc2ZlciAgLSBJZiB6b3V0IHRyYW5zZmVyIGZvciBhIGJ1bGsgZW5kcG9pbnQgKEVQIGRpc2FibGVkKS4KKwkgICBzZXR1cCB0cmFuc2ZlciAtIElmIHNldHVwIHRyYW5zZmVyIGZvciBhIG5vbi1jdHJsIGVuZHBvaW50IChFUCBkaXNhYmxlZCkuICovCisKKwlpbnQgZXBpZDsKKworCisJREJGRU5URVI7CisKKwlhc3NlcnQocmVnICE9IE5VTEwpOworCisJLyogTm90ZSB0aGF0IHdlIGxvb3AgdGhyb3VnaCBhbGwgZXBpZHMuIFdlIHN0aWxsIHdhbnQgdG8gY2F0Y2ggZXJyb3JzIGZvcgorCSAgIHRoZSBpbnZhbGlkIG9uZSwgZXZlbiB0aG91Z2ggd2UgbWlnaHQgaGFuZGxlIHRoZW0gZGlmZmVyZW50bHkuICovCisJZm9yIChlcGlkID0gMDsgZXBpZCA8IE5CUl9PRl9FUElEUzsgZXBpZCsrKSB7CisKKwkJaWYgKHRlc3RfYml0KGVwaWQsICh2b2lkICopJnJlZy0+cl91c2JfZXBpZF9hdHRuKSkgeworCisJCQlzdHJ1Y3QgdXJiICp1cmI7CisJCQlfX3UzMiByX3VzYl9lcHRfZGF0YTsKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCQlpbnQgZXJyb3JfY29kZTsKKworCQkJc2F2ZV9mbGFncyhmbGFncyk7CisJCQljbGkoKTsKKwkJCSpSX1VTQl9FUFRfSU5ERVggPSBJT19GSUVMRChSX1VTQl9FUFRfSU5ERVgsIHZhbHVlLCBlcGlkKTsKKwkJCW5vcCgpOworCQkJLyogTm90ZSB0aGF0IGFsdGhvdWdoIHRoZXJlIGFyZSBzZXBhcmF0ZSBSX1VTQl9FUFRfREFUQSBhbmQgUl9VU0JfRVBUX0RBVEFfSVNPCisJCQkgICByZWdpc3RlcnMsIHRoZXkgYXJlIGxvY2F0ZWQgYXQgdGhlIHNhbWUgYWRkcmVzcyBhbmQgYXJlIG9mIHRoZSBzYW1lIHNpemUuCisJCQkgICBJbiBvdGhlciB3b3JkcywgdGhpcyByZWFkIHNob3VsZCBiZSBvayBmb3IgaXNvYyBhbHNvLiAqLworCQkJcl91c2JfZXB0X2RhdGEgPSAqUl9VU0JfRVBUX0RBVEE7CisJCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKworCQkJLyogRmlyc3Qgc29tZSBzYW5pdHkgY2hlY2tzLiAqLworCQkJaWYgKGVwaWQgPT0gSU5WQUxJRF9FUElEKSB7CisJCQkJLyogRklYTUU6IFdoYXQgaWYgaXQgYmVjYW1lIGRpc2FibGVkPyBDb3VsZCBzZXJpb3VzbHkgaHVydCBpbnRlcnJ1cHQKKwkJCQkgICB0cmFmZmljLiAoVXNlIGRvX2ludHJfcmVjb3Zlci4pICovCisJCQkJd2FybigiR290IGVwaWRfYXR0biBmb3IgSU5WQUxJRF9FUElEICglZCkuIiwgZXBpZCk7CisJCQkJZXJyKCJSX1VTQl9FUFRfREFUQSA9IDB4JXgiLCByX3VzYl9lcHRfZGF0YSk7CisJCQkJZXJyKCJSX1VTQl9TVEFUVVMgPSAweCV4IiwgcmVnLT5yX3VzYl9zdGF0dXMpOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIAlpZiAoZXBpZCA9PSBEVU1NWV9FUElEKSB7CisJCQkJLyogV2UgZGVmaW5pdGVseSBkb24ndCBjYXJlIGFib3V0IHRoZXNlIG9uZXMuIEJlc2lkZXMsIHRoZXkgYXJlCisJCQkJICAgYWx3YXlzIGRpc2FibGVkLCBzbyBhbnkgcG9zc2libGUgZGlzYWJsaW5nIGNhdXNlZCBieSB0aGUKKwkJCQkgICBlcGlkIGF0dGVudGlvbiBpbnRlcnJ1cHQgaXMgaXJyZWxldmFudC4gKi8KKwkJCQl3YXJuKCJHb3QgZXBpZF9hdHRuIGZvciBEVU1NWV9FUElEICglZCkuIiwgZXBpZCk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIEdldCB0aGUgZmlyc3QgdXJiIGluIHRoZSB1cmIgbGlzdCBmb3IgdGhpcyBlcGlkLiBXZSBibGF0YW50bHkgYXNzdW1lCisJCQkgICB0aGF0IG9ubHkgdGhlIGZpcnN0IHVyYiBjb3VsZCBoYXZlIGNhdXNlZCB0aGUgZXBpZCBhdHRlbnRpb24uCisJCQkgICAoRm9yIGJ1bGsgYW5kIGN0cmwsIG9ubHkgb25lIHVyYiBpcyBhY3RpdmUgYXQgYW55IG9uZSB0aW1lLiBGb3IgaW50cgorCQkJICAgYW5kIGlzb2Mgd2UgcmVtb3ZlIHRoZW0gb25jZSB0aGV5IGFyZSBjb21wbGV0ZWQuKSAqLworCQkJdXJiID0gdXJiX2xpc3RfZmlyc3QoZXBpZCk7CisKKwkJCWlmICh1cmIgPT0gTlVMTCkgeworCQkJCWVycigiR290IGVwaWRfYXR0biBmb3IgZXBpZCAlaSB3aXRoIG5vIHVyYi4iLCBlcGlkKTsKKwkJCQllcnIoIlJfVVNCX0VQVF9EQVRBID0gMHgleCIsIHJfdXNiX2VwdF9kYXRhKTsKKwkJCQllcnIoIlJfVVNCX1NUQVRVUyA9IDB4JXgiLCByZWctPnJfdXNiX3N0YXR1cyk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXN3aXRjaCAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkpIHsKKwkJCWNhc2UgUElQRV9CVUxLOgorCQkJCXdhcm4oIkdvdCBlcGlkIGF0dG4gZm9yIGJ1bGsgZW5kcG9pbnQsIGVwaWQgJWQiLCBlcGlkKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUElQRV9DT05UUk9MOgorCQkJCXdhcm4oIkdvdCBlcGlkIGF0dG4gZm9yIGNvbnRyb2wgZW5kcG9pbnQsIGVwaWQgJWQiLCBlcGlkKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUElQRV9JTlRFUlJVUFQ6CisJCQkJd2FybigiR290IGVwaWQgYXR0biBmb3IgaW50ZXJydXB0IGVuZHBvaW50LCBlcGlkICVkIiwgZXBpZCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJCQkJd2FybigiR290IGVwaWQgYXR0biBmb3IgaXNvY2hyb25vdXMgZW5kcG9pbnQsIGVwaWQgJWQiLCBlcGlkKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpICE9IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJCQlpZiAocl91c2JfZXB0X2RhdGEgJiBJT19NQVNLKFJfVVNCX0VQVF9EQVRBLCBob2xkKSkgeworCQkJCQl3YXJuKCJIb2xkIHdhcyBzZXQgZm9yIGVwaWQgJWQuIiwgZXBpZCk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKworCQkJLyogRXZlbiB0aG91Z2ggZXJyb3JfY29kZSBvY2N1cGllcyBiaXRzIDIyIC0gMjMgaW4gYm90aCBSX1VTQl9FUFRfREFUQSBhbmQKKwkJCSAgIFJfVVNCX0VQVF9EQVRBX0lTT0MsIHdlIHNlcGFyYXRlIHRoZW0gaGVyZSBzbyB3ZSBkb24ndCBmb3JnZXQgaW4gb3RoZXIgcGxhY2VzLiAqLworCQkJaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJCQllcnJvcl9jb2RlID0gSU9fRVhUUkFDVChSX1VTQl9FUFRfREFUQV9JU08sIGVycm9yX2NvZGUsIHJfdXNiX2VwdF9kYXRhKTsKKwkJCX0gZWxzZSB7CisJCQkJZXJyb3JfY29kZSA9IElPX0VYVFJBQ1QoUl9VU0JfRVBUX0RBVEEsIGVycm9yX2NvZGUsIHJfdXNiX2VwdF9kYXRhKTsKKwkJCX0KKworCQkJLyogVXNpbmcgSU9fU1RBVEVfVkFMVUUgb24gUl9VU0JfRVBUX0RBVEEgc2hvdWxkIGJlIG9rIGZvciBpc29jIGFsc28uICovCisJCQlpZiAoZXJyb3JfY29kZSA9PSBJT19TVEFURV9WQUxVRShSX1VTQl9FUFRfREFUQSwgZXJyb3JfY29kZSwgbm9fZXJyb3IpKSB7CisKKwkJCQkvKiBJc29jIHRyYWZmaWMgZG9lc24ndCBoYXZlIGVycm9yX2NvdW50X2luL2Vycm9yX2NvdW50X291dC4gKi8KKwkJCQlpZiAoKHVzYl9waXBldHlwZSh1cmItPnBpcGUpICE9IFBJUEVfSVNPQ0hST05PVVMpICYmCisJCQkJICAgIChJT19FWFRSQUNUKFJfVVNCX0VQVF9EQVRBLCBlcnJvcl9jb3VudF9pbiwgcl91c2JfZXB0X2RhdGEpID09IDMgfHwKKwkJCQkgICAgIElPX0VYVFJBQ1QoUl9VU0JfRVBUX0RBVEEsIGVycm9yX2NvdW50X291dCwgcl91c2JfZXB0X2RhdGEpID09IDMpKSB7CisJCQkJCS8qIDNyZCBlcnJvci4gKi8KKwkJCQkJd2FybigiM3JkIGVycm9yIGZvciBlcGlkICVpIiwgZXBpZCk7CisJCQkJCWV0cmF4X3VzYl9jb21wbGV0ZV91cmIodXJiLCAtRVBST1RPKTsKKworCQkJCX0gZWxzZSBpZiAocmVnLT5yX3VzYl9zdGF0dXMgJiBJT19NQVNLKFJfVVNCX1NUQVRVUywgcGVycm9yKSkgeworCisJCQkJCXdhcm4oIlBlcnJvciBmb3IgZXBpZCAlZCIsIGVwaWQpOworCisJCQkJCWlmICghKHJfdXNiX2VwdF9kYXRhICYgSU9fTUFTSyhSX1VTQl9FUFRfREFUQSwgdmFsaWQpKSkgeworCQkJCQkJLyogaW52YWxpZCBlcF9pZCAqLworCQkJCQkJcGFuaWMoIlBlcnJvciBiZWNhdXNlIG9mIGludmFsaWQgZXBpZC4iCisJCQkJCQkgICAgICAiIERlY29uZmlndXJlZCB0b28gZWFybHk/Iik7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvKiBwYXN0IGVvZjEsIG5lYXIgZW9mLCB6b3V0IHRyYW5zZmVyLCBzZXR1cCB0cmFuc2ZlciAqLworCisJCQkJCQkvKiBEdW1wIHRoZSB1cmIgYW5kIHRoZSByZWxldmFudCBFUCBkZXNjcmlwdG9yIGxpc3QuICovCisKKwkJCQkJCV9fZHVtcF91cmIodXJiKTsKKwkJCQkJCV9fZHVtcF9lcHRfZGF0YShlcGlkKTsKKwkJCQkJCV9fZHVtcF9lcF9saXN0KHVzYl9waXBldHlwZSh1cmItPnBpcGUpKTsKKworCQkJCQkJcGFuaWMoIlNvbWV0aGluZyB3cm9uZyB3aXRoIERNQSBkZXNjcmlwdG9yIGNvbnRlbnRzLiIKKwkJCQkJCSAgICAgICIgVG9vIG11Y2ggdHJhZmZpYyBpbnNlcnRlZD8iKTsKKwkJCQkJfQorCQkJCX0gZWxzZSBpZiAocmVnLT5yX3VzYl9zdGF0dXMgJiBJT19NQVNLKFJfVVNCX1NUQVRVUywgb3VydW4pKSB7CisJCQkJCS8qIGJ1ZmZlciBvdXJ1biAqLworCQkJCQlwYW5pYygiQnVmZmVyIG92ZXJydW4vdW5kZXJydW4gZm9yIGVwaWQgJWQuIERNQSB0b28gYnVzeT8iLCBlcGlkKTsKKwkJCQl9CisKKwkJCX0gZWxzZSBpZiAoZXJyb3JfY29kZSA9PSBJT19TVEFURV9WQUxVRShSX1VTQl9FUFRfREFUQSwgZXJyb3JfY29kZSwgc3RhbGwpKSB7CisJCQkJLyogTm90IHJlYWxseSBhIHByb3RvY29sIGVycm9yLCBqdXN0IHNheXMgdGhhdCB0aGUgZW5kcG9pbnQgZ2F2ZQorCQkJCSAgIGEgc3RhbGwgcmVzcG9uc2UuIE5vdGUgdGhhdCBlcnJvcl9jb2RlIGNhbm5vdCBiZSBzdGFsbCBmb3IgaXNvYy4gKi8KKwkJCQlpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JU09DSFJPTk9VUykgeworCQkJCQlwYW5pYygiSXNvYyB0cmFmZmljIGNhbm5vdCBzdGFsbCIpOworCQkJCX0KKworCQkJCXdhcm4oIlN0YWxsIGZvciBlcGlkICVkIiwgZXBpZCk7CisJCQkJZXRyYXhfdXNiX2NvbXBsZXRlX3VyYih1cmIsIC1FUElQRSk7CisKKwkJCX0gZWxzZSBpZiAoZXJyb3JfY29kZSA9PSBJT19TVEFURV9WQUxVRShSX1VTQl9FUFRfREFUQSwgZXJyb3JfY29kZSwgYnVzX2Vycm9yKSkgeworCQkJCS8qIFR3byBkZXZpY2VzIHJlc3BvbmRlZCB0byBhIHRyYW5zYWN0aW9uIHJlcXVlc3QuIE11c3QgYmUgcmVzb2x2ZWQKKwkJCQkgICBieSBzb2Z0d2FyZS4gRklYTUU6IFJlc2V0IHBvcnRzPyAqLworCQkJCXBhbmljKCJCdXMgZXJyb3IgZm9yIGVwaWQgJWQuIgorCQkJCSAgICAgICIgVHdvIGRldmljZXMgcmVzcG9uZGVkIHRvIHRyYW5zYWN0aW9uIHJlcXVlc3QiLAorCQkJCSAgICAgIGVwaWQpOworCisJCQl9IGVsc2UgaWYgKGVycm9yX2NvZGUgPT0gSU9fU1RBVEVfVkFMVUUoUl9VU0JfRVBUX0RBVEEsIGVycm9yX2NvZGUsIGJ1ZmZlcl9lcnJvcikpIHsKKwkJCQkvKiBETUEgb3ZlcnJ1biBvciB1bmRlcnJ1bi4gKi8KKwkJCQl3YXJuKCJCdWZmZXIgb3ZlcnJ1bi91bmRlcnJ1biBmb3IgZXBpZCAlZC4gRE1BIHRvbyBidXN5PyIsIGVwaWQpOworCisJCQkJLyogSXQgc2VlbXMgdGhhdCBlcnJvcl9jb2RlID0gYnVmZmVyX2Vycm9yIGluCisJCQkJICAgUl9VU0JfRVBUX0RBVEEvUl9VU0JfRVBUX0RBVEFfSVNPIGFuZCBvdXJ1biA9IHllcyBpbiBSX1VTQl9TVEFUVVMKKwkJCQkgICBhcmUgdGhlIHNhbWUgZXJyb3IuICovCisJCQkJZXRyYXhfdXNiX2NvbXBsZXRlX3VyYih1cmIsIC1FUFJPVE8pOworCQkJfQorCQl9CisJfQorCisJREJGRVhJVDsKKworfQorCit2b2lkIGV0cmF4X3VzYl9idWxrX3N0YXJ0X3RpbWVyX2Z1bmModW5zaWduZWQgbG9uZyBkdW1teSkKK3sKKworCS8qIFdlIG1pZ2h0IGVuYWJsZSBhbiBFUCBkZXNjcmlwdG9yIGJlaGluZCB0aGUgY3VycmVudCBETUEgcG9zaXRpb24gd2hlbiBpdCdzIGFib3V0CisJICAgdG8gZGVjaWRlIHRoYXQgdGhlcmUgYXJlIG5vIG1vcmUgYnVsayB0cmFmZmljIGFuZCBpdCBzaG91bGQgc3RvcCB0aGUgYnVsayBjaGFubmVsLgorCSAgIFRoZXJlZm9yZSB3ZSBwZXJpb2RpY2FsbHkgY2hlY2sgaWYgdGhlIGJ1bGsgY2hhbm5lbCBpcyBzdG9wcGVkIGFuZCB0aGVyZSBpcyBhbgorCSAgIGVuYWJsZWQgYnVsayBFUCBkZXNjcmlwdG9yLCBpbiB3aGljaCBjYXNlIHdlIHN0YXJ0IHRoZSBidWxrIGNoYW5uZWwuICovCisJZGJnX2J1bGsoImJ1bGtfc3RhcnRfdGltZXIgdGltZWQgb3V0LiIpOworCisJaWYgKCEoKlJfRE1BX0NIOF9TVUIwX0NNRCAmIElPX01BU0soUl9ETUFfQ0g4X1NVQjBfQ01ELCBjbWQpKSkgeworCQlpbnQgZXBpZDsKKworCQlkYmdfYnVsaygiQnVsayBETUEgY2hhbm5lbCBub3QgcnVubmluZy4iKTsKKworCQlmb3IgKGVwaWQgPSAwOyBlcGlkIDwgTkJSX09GX0VQSURTOyBlcGlkKyspIHsKKwkJCWlmIChUeEJ1bGtFUExpc3RbZXBpZF0uY29tbWFuZCAmIElPX01BU0soVVNCX0VQX2NvbW1hbmQsIGVuYWJsZSkpIHsKKwkJCQlkYmdfYnVsaygiRm91bmQgZW5hYmxlZCBFUCBmb3IgZXBpZCAlZCwgc3RhcnRpbmcgYnVsayBjaGFubmVsLlxuIiwKKwkJCQkJIGVwaWQpOworCQkJCSpSX0RNQV9DSDhfU1VCMF9DTUQgPSBJT19TVEFURShSX0RNQV9DSDhfU1VCMF9DTUQsIGNtZCwgc3RhcnQpOworCisJCQkJLyogUmVzdGFydCB0aGUgYnVsayBlb3QgdGltZXIgc2luY2Ugd2UganVzdCBzdGFydGVkIHRoZSBidWxrIGNoYW5uZWwuICovCisJCQkJbW9kX3RpbWVyKCZidWxrX2VvdF90aW1lciwgamlmZmllcyArIEJVTEtfRU9UX1RJTUVSX0lOVEVSVkFMKTsKKworCQkJCS8qIE5vIG5lZWQgdG8gc2VhcmNoIGFueSBmdXJ0aGVyLiAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJZGJnX2J1bGsoIkJ1bGsgRE1BIGNoYW5uZWwgcnVubmluZy4iKTsKKwl9Cit9CisKK3ZvaWQgZXRyYXhfdXNiX2hjX3BvcnRfc3RhdHVzX2ludGVycnVwdCh1c2JfaW50ZXJydXB0X3JlZ2lzdGVyc190ICpyZWcpCit7CisJZXRyYXhfaGNfdCAqaGMgPSByZWctPmhjOworCV9fdTE2IHJfdXNiX3JoX3BvcnRfc3RhdHVzXzEgPSByZWctPnJfdXNiX3JoX3BvcnRfc3RhdHVzXzE7CisJX191MTYgcl91c2JfcmhfcG9ydF9zdGF0dXNfMiA9IHJlZy0+cl91c2JfcmhfcG9ydF9zdGF0dXNfMjsKKworCURCRkVOVEVSOworCisJLyogVGhlIEV0cmF4IFJIIGRvZXMgbm90IGluY2x1ZGUgYSB3UG9ydENoYW5nZSByZWdpc3Rlciwgc28gdGhpcyBoYXMgdG8gYmUgaGFuZGxlZCBpbiBzb2Z0d2FyZQorCSAgIChieSBzYXZpbmcgdGhlIG9sZCBwb3J0IHN0YXR1cyB2YWx1ZSBmb3IgY29tcGFyaXNvbiB3aGVuIHRoZSBwb3J0IHN0YXR1cyBpbnRlcnJ1cHQgaGFwcGVucykuCisJICAgU2VlIHNlY3Rpb24gMTEuMTYuMi42LjIgaW4gdGhlIFVTQiAxLjEgc3BlYyBmb3IgZGV0YWlscy4gKi8KKworCWRiZ19yaCgiaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMSA9IDB4JXgiLCBoYy0+cmgucHJldl93UG9ydFN0YXR1c18xKTsKKwlkYmdfcmgoImhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzIgPSAweCV4IiwgaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMik7CisJZGJnX3JoKCJyX3VzYl9yaF9wb3J0X3N0YXR1c18xID0gMHgleCIsIHJfdXNiX3JoX3BvcnRfc3RhdHVzXzEpOworCWRiZ19yaCgicl91c2JfcmhfcG9ydF9zdGF0dXNfMiA9IDB4JXgiLCByX3VzYl9yaF9wb3J0X3N0YXR1c18yKTsKKworCS8qIENfUE9SVF9DT05ORUNUSU9OIGlzIHNldCBvbiBhbnkgdHJhbnNpdGlvbi4gKi8KKwloYy0+cmgud1BvcnRDaGFuZ2VfMSB8PQorCQkoKHJfdXNiX3JoX3BvcnRfc3RhdHVzXzEgJiAoMSA8PCBSSF9QT1JUX0NPTk5FQ1RJT04pKSAhPQorCQkgKGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzEgJiAoMSA8PCBSSF9QT1JUX0NPTk5FQ1RJT04pKSkgPworCQkoMSA8PCBSSF9QT1JUX0NPTk5FQ1RJT04pIDogMDsKKworCWhjLT5yaC53UG9ydENoYW5nZV8yIHw9CisJCSgocl91c2JfcmhfcG9ydF9zdGF0dXNfMiAmICgxIDw8IFJIX1BPUlRfQ09OTkVDVElPTikpICE9CisJCSAoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMiAmICgxIDw8IFJIX1BPUlRfQ09OTkVDVElPTikpKSA/CisJCSgxIDw8IFJIX1BPUlRfQ09OTkVDVElPTikgOiAwOworCisJLyogQ19QT1JUX0VOQUJMRSBpcyBfb25seV8gc2V0IG9uIGEgb25lIHRvIHplcm8gdHJhbnNpdGlvbiwgaS5lLiB3aGVuCisJICAgdGhlIHBvcnQgaXMgZGlzYWJsZWQsIG5vdCB3aGVuIGl0J3MgZW5hYmxlZC4gKi8KKwloYy0+cmgud1BvcnRDaGFuZ2VfMSB8PQorCQkoKGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzEgJiAoMSA8PCBSSF9QT1JUX0VOQUJMRSkpCisJCSAmJiAhKHJfdXNiX3JoX3BvcnRfc3RhdHVzXzEgJiAoMSA8PCBSSF9QT1JUX0VOQUJMRSkpKSA/CisJCSgxIDw8IFJIX1BPUlRfRU5BQkxFKSA6IDA7CisKKwloYy0+cmgud1BvcnRDaGFuZ2VfMiB8PQorCQkoKGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzIgJiAoMSA8PCBSSF9QT1JUX0VOQUJMRSkpCisJCSAmJiAhKHJfdXNiX3JoX3BvcnRfc3RhdHVzXzIgJiAoMSA8PCBSSF9QT1JUX0VOQUJMRSkpKSA/CisJCSgxIDw8IFJIX1BPUlRfRU5BQkxFKSA6IDA7CisKKwkvKiBDX1BPUlRfU1VTUEVORCBpcyBzZXQgdG8gb25lIHdoZW4gdGhlIGRldmljZSBoYXMgdHJhbnNpdGlvbmVkIG91dAorCSAgIG9mIHRoZSBzdXNwZW5kZWQgc3RhdGUsIGkuZS4gd2hlbiBzdXNwZW5kIGdvZXMgZnJvbSBvbmUgdG8gemVyby4gKi8KKwloYy0+cmgud1BvcnRDaGFuZ2VfMSB8PQorCQkoKGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzEgJiAoMSA8PCBSSF9QT1JUX1NVU1BFTkQpKQorCQkgJiYgIShyX3VzYl9yaF9wb3J0X3N0YXR1c18xICYgKDEgPDwgUkhfUE9SVF9TVVNQRU5EKSkpID8KKwkJKDEgPDwgUkhfUE9SVF9TVVNQRU5EKSA6IDA7CisKKwloYy0+cmgud1BvcnRDaGFuZ2VfMiB8PQorCQkoKGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzIgJiAoMSA8PCBSSF9QT1JUX1NVU1BFTkQpKQorCQkgJiYgIShyX3VzYl9yaF9wb3J0X3N0YXR1c18yICYgKDEgPDwgUkhfUE9SVF9TVVNQRU5EKSkpID8KKwkJKDEgPDwgUkhfUE9SVF9TVVNQRU5EKSA6IDA7CisKKworCS8qIENfUE9SVF9SRVNFVCBpcyBzZXQgd2hlbiByZXNldCBwcm9jZXNzaW5nIG9uIHRoaXMgcG9ydCBpcyBjb21wbGV0ZS4gKi8KKwloYy0+cmgud1BvcnRDaGFuZ2VfMSB8PQorCQkoKGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzEgJiAoMSA8PCBSSF9QT1JUX1JFU0VUKSkKKwkJICYmICEocl91c2JfcmhfcG9ydF9zdGF0dXNfMSAmICgxIDw8IFJIX1BPUlRfUkVTRVQpKSkgPworCQkoMSA8PCBSSF9QT1JUX1JFU0VUKSA6IDA7CisKKwloYy0+cmgud1BvcnRDaGFuZ2VfMiB8PQorCQkoKGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzIgJiAoMSA8PCBSSF9QT1JUX1JFU0VUKSkKKwkJICYmICEocl91c2JfcmhfcG9ydF9zdGF0dXNfMiAmICgxIDw8IFJIX1BPUlRfUkVTRVQpKSkgPworCQkoMSA8PCBSSF9QT1JUX1JFU0VUKSA6IDA7CisKKwkvKiBTYXZlIHRoZSBuZXcgdmFsdWVzIGZvciBuZXh0IHBvcnQgc3RhdHVzIGNoYW5nZS4gKi8KKwloYy0+cmgucHJldl93UG9ydFN0YXR1c18xID0gcl91c2JfcmhfcG9ydF9zdGF0dXNfMTsKKwloYy0+cmgucHJldl93UG9ydFN0YXR1c18yID0gcl91c2JfcmhfcG9ydF9zdGF0dXNfMjsKKworCWRiZ19yaCgiaGMtPnJoLndQb3J0Q2hhbmdlXzEgc2V0IHRvIDB4JXgiLCBoYy0+cmgud1BvcnRDaGFuZ2VfMSk7CisJZGJnX3JoKCJoYy0+cmgud1BvcnRDaGFuZ2VfMiBzZXQgdG8gMHgleCIsIGhjLT5yaC53UG9ydENoYW5nZV8yKTsKKworCURCRkVYSVQ7CisKK30KKwordm9pZCBldHJheF91c2JfaGNfY3RsX3N0YXR1c19pbnRlcnJ1cHQodXNiX2ludGVycnVwdF9yZWdpc3RlcnNfdCAqcmVnKQoreworCURCRkVOVEVSOworCisJLyogRklYTUU6IFdoYXQgc2hvdWxkIHdlIGRvIGlmIHdlIGdldCBvdXJ1biBvciBwZXJyb3I/IER1bXAgdGhlIEVQIGFuZCBTQgorCSAgIGxpc3QgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGVwaWQ/ICovCisJaWYgKHJlZy0+cl91c2Jfc3RhdHVzICYgSU9fTUFTSyhSX1VTQl9TVEFUVVMsIG91cnVuKSkgeworCQlwYW5pYygiVVNCIGNvbnRyb2xsZXIgZ290IG91cnVuLiIpOworCX0KKwlpZiAocmVnLT5yX3VzYl9zdGF0dXMgJiBJT19NQVNLKFJfVVNCX1NUQVRVUywgcGVycm9yKSkgeworCisJCS8qIEJlZm9yZSwgZXRyYXhfdXNiX2RvX2ludHJfcmVjb3ZlciB3YXMgY2FsbGVkIG9uIHRoaXMgZXBpZCBpZiBpdCB3YXMKKwkJICAgYW4gaW50ZXJydXB0IHBpcGUuIEkgZG9uJ3Qgc2VlIGhvdyByZS1lbmFibGluZyBhbGwgRVAgZGVzY3JpcHRvcnMKKwkJICAgd2lsbCBoZWxwIGlmIHRoZXJlIHdhcyBhIHByb2dyYW1taW5nIGVycm9yLiAqLworCQlwYW5pYygiVVNCIGNvbnRyb2xsZXIgZ290IHBlcnJvci4iKTsKKwl9CisKKwlpZiAocmVnLT5yX3VzYl9zdGF0dXMgJiBJT19NQVNLKFJfVVNCX1NUQVRVUywgZGV2aWNlX21vZGUpKSB7CisJCS8qIFdlIHNob3VsZCBuZXZlciBvcGVyYXRlIGluIGRldmljZSBtb2RlLiAqLworCQlwYW5pYygiVVNCIGNvbnRyb2xsZXIgaW4gZGV2aWNlIG1vZGUuIik7CisJfQorCisJLyogVGhlc2UgaWYtc3RhdGVtZW50cyBjb3VsZCBwcm9iYWJseSBiZSBuZXN0ZWQuICovCisJaWYgKHJlZy0+cl91c2Jfc3RhdHVzICYgSU9fTUFTSyhSX1VTQl9TVEFUVVMsIGhvc3RfbW9kZSkpIHsKKwkJaW5mbygiVVNCIGNvbnRyb2xsZXIgaW4gaG9zdCBtb2RlLiIpOworCX0KKwlpZiAocmVnLT5yX3VzYl9zdGF0dXMgJiBJT19NQVNLKFJfVVNCX1NUQVRVUywgc3RhcnRlZCkpIHsKKwkJaW5mbygiVVNCIGNvbnRyb2xsZXIgc3RhcnRlZC4iKTsKKwl9CisJaWYgKHJlZy0+cl91c2Jfc3RhdHVzICYgSU9fTUFTSyhSX1VTQl9TVEFUVVMsIHJ1bm5pbmcpKSB7CisJCWluZm8oIlVTQiBjb250cm9sbGVyIHJ1bm5pbmcuIik7CisJfQorCisJREJGRVhJVDsKKworfQorCisKK3N0YXRpYyBpbnQgZXRyYXhfcmhfc3VibWl0X3VyYihzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSB1cmItPmRldjsKKwlldHJheF9oY190ICpoYyA9IHVzYl9kZXYtPmJ1cy0+aGNwcml2OworCXVuc2lnbmVkIGludCBwaXBlID0gdXJiLT5waXBlOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNtZCA9IChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopIHVyYi0+c2V0dXBfcGFja2V0OworCXZvaWQgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgbGVuaSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwlpbnQgbGVuID0gMDsKKwlpbnQgc3RhdCA9IDA7CisKKwlfX3UxNiBibVJUeXBlX2JSZXE7CisJX191MTYgd1ZhbHVlOworCV9fdTE2IHdJbmRleDsKKwlfX3UxNiB3TGVuZ3RoOworCisJREJGRU5URVI7CisKKwkvKiBGSVhNRTogV2hhdCBpcyB0aGlzIGludGVycnVwdCB1cmIgdGhhdCBpcyBzZW50IHRvIHRoZSByb290IGh1Yj8gKi8KKwlpZiAodXNiX3BpcGV0eXBlIChwaXBlKSA9PSBQSVBFX0lOVEVSUlVQVCkgeworCQlkYmdfcmgoIlJvb3QtSHViIHN1Ym1pdCBJUlE6IGV2ZXJ5ICVkIG1zIiwgdXJiLT5pbnRlcnZhbCk7CisJCWhjLT5yaC51cmIgPSB1cmI7CisJCWhjLT5yaC5zZW5kID0gMTsKKwkJLyogRklYTUU6IFdlIGNvdWxkIHByb2JhYmx5IHJlbW92ZSB0aGlzIGxpbmUgc2luY2UgaXQncyBkb25lCisJCSAgIGluIGV0cmF4X3JoX2luaXRfaW50X3RpbWVyLiAoRG9uJ3QgcmVtb3ZlIGl0IGZyb20KKwkJICAgZXRyYXhfcmhfaW5pdF9pbnRfdGltZXIgdGhvdWdoLikgKi8KKwkJaGMtPnJoLmludGVydmFsID0gdXJiLT5pbnRlcnZhbDsKKwkJZXRyYXhfcmhfaW5pdF9pbnRfdGltZXIodXJiKTsKKwkJREJGRVhJVDsKKworCQlyZXR1cm4gMDsKKwl9CisKKwlibVJUeXBlX2JSZXEgPSBjbWQtPmJSZXF1ZXN0VHlwZSB8IChjbWQtPmJSZXF1ZXN0IDw8IDgpOworCXdWYWx1ZSA9IGxlMTZfdG9fY3B1KGNtZC0+d1ZhbHVlKTsKKwl3SW5kZXggPSBsZTE2X3RvX2NwdShjbWQtPndJbmRleCk7CisJd0xlbmd0aCA9IGxlMTZfdG9fY3B1KGNtZC0+d0xlbmd0aCk7CisKKwlkYmdfcmgoImJtUlR5cGVfYlJlcSA6IDB4JTA0eCAoJWQpIiwgYm1SVHlwZV9iUmVxLCBibVJUeXBlX2JSZXEpOworCWRiZ19yaCgid1ZhbHVlICAgICAgIDogMHglMDR4ICglZCkiLCB3VmFsdWUsIHdWYWx1ZSk7CisJZGJnX3JoKCJ3SW5kZXggICAgICAgOiAweCUwNHggKCVkKSIsIHdJbmRleCwgd0luZGV4KTsKKwlkYmdfcmgoIndMZW5ndGggICAgICA6IDB4JTA0eCAoJWQpIiwgd0xlbmd0aCwgd0xlbmd0aCk7CisKKwlzd2l0Y2ggKGJtUlR5cGVfYlJlcSkgeworCisJCS8qIFJlcXVlc3QgRGVzdGluYXRpb246CisJCSAgIHdpdGhvdXQgZmxhZ3M6IERldmljZSwKKwkJICAgUkhfSU5URVJGQUNFOiBpbnRlcmZhY2UsCisJCSAgIFJIX0VORFBPSU5UOiBlbmRwb2ludCwKKwkJICAgUkhfQ0xBU1MgbWVhbnMgSFVCIGhlcmUsCisJCSAgIFJIX09USEVSIHwgUkhfQ0xBU1MgIGFsbW9zdCBldmVyIG1lYW5zIEhVQl9QT1JUIGhlcmUKKwkJICovCisKKwljYXNlIFJIX0dFVF9TVEFUVVM6CisJCSooX191MTYgKikgZGF0YSA9IGNwdV90b19sZTE2ICgxKTsKKwkJT0sgKDIpOworCisJY2FzZSBSSF9HRVRfU1RBVFVTIHwgUkhfSU5URVJGQUNFOgorCQkqKF9fdTE2ICopIGRhdGEgPSBjcHVfdG9fbGUxNiAoMCk7CisJCU9LICgyKTsKKworCWNhc2UgUkhfR0VUX1NUQVRVUyB8IFJIX0VORFBPSU5UOgorCQkqKF9fdTE2ICopIGRhdGEgPSBjcHVfdG9fbGUxNiAoMCk7CisJCU9LICgyKTsKKworCWNhc2UgUkhfR0VUX1NUQVRVUyB8IFJIX0NMQVNTOgorCQkqKF9fdTMyICopIGRhdGEgPSBjcHVfdG9fbGUzMiAoMCk7CisJCU9LICg0KTsJCS8qIGh1YiBwb3dlciAqKiAqLworCisJY2FzZSBSSF9HRVRfU1RBVFVTIHwgUkhfT1RIRVIgfCBSSF9DTEFTUzoKKwkJaWYgKHdJbmRleCA9PSAxKSB7CisJCQkqKChfX3UxNiopZGF0YSkgPSBjcHVfdG9fbGUxNihoYy0+cmgucHJldl93UG9ydFN0YXR1c18xKTsKKwkJCSooKF9fdTE2KilkYXRhICsgMSkgPSBjcHVfdG9fbGUxNihoYy0+cmgud1BvcnRDaGFuZ2VfMSk7CisJCX0gZWxzZSBpZiAod0luZGV4ID09IDIpIHsKKwkJCSooKF9fdTE2KilkYXRhKSA9IGNwdV90b19sZTE2KGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzIpOworCQkJKigoX191MTYqKWRhdGEgKyAxKSA9IGNwdV90b19sZTE2KGhjLT5yaC53UG9ydENoYW5nZV8yKTsKKwkJfSBlbHNlIHsKKwkJCWRiZ19yaCgiUkhfR0VUX1NUQVRVUyB3aGl0aCBpbnZhbGlkIHdJbmRleCEiKTsKKwkJCU9LKDApOworCQl9CisKKwkJT0soNCk7CisKKwljYXNlIFJIX0NMRUFSX0ZFQVRVUkUgfCBSSF9FTkRQT0lOVDoKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSAoUkhfRU5EUE9JTlRfU1RBTEwpOgorCQkJT0sgKDApOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSSF9DTEVBUl9GRUFUVVJFIHwgUkhfQ0xBU1M6CisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgKFJIX0NfSFVCX09WRVJfQ1VSUkVOVCk6CisJCQlPSyAoMCk7CS8qIGh1YiBwb3dlciBvdmVyIGN1cnJlbnQgKiogKi8KKwkJfQorCQlicmVhazsKKworCWNhc2UgUkhfQ0xFQVJfRkVBVFVSRSB8IFJIX09USEVSIHwgUkhfQ0xBU1M6CisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgKFJIX1BPUlRfRU5BQkxFKToKKwkJCWlmICh3SW5kZXggPT0gMSkgeworCisJCQkJZGJnX3JoKCJ0cnlpbmcgdG8gZG8gZGlzYWJsZSBwb3J0IDEiKTsKKworCQkJCSpSX1VTQl9QT1JUMV9ESVNBQkxFID0gSU9fU1RBVEUoUl9VU0JfUE9SVDFfRElTQUJMRSwgZGlzYWJsZSwgeWVzKTsKKworCQkJCXdoaWxlIChoYy0+cmgucHJldl93UG9ydFN0YXR1c18xICYKKwkJCQkgICAgICAgSU9fU1RBVEUoUl9VU0JfUkhfUE9SVF9TVEFUVVNfMSwgZW5hYmxlZCwgeWVzKSk7CisJCQkJKlJfVVNCX1BPUlQxX0RJU0FCTEUgPSBJT19TVEFURShSX1VTQl9QT1JUMV9ESVNBQkxFLCBkaXNhYmxlLCBubyk7CisJCQkJZGJnX3JoKCJQb3J0IDEgaXMgZGlzYWJsZWQiKTsKKworCQkJfSBlbHNlIGlmICh3SW5kZXggPT0gMikgeworCisJCQkJZGJnX3JoKCJ0cnlpbmcgdG8gZG8gZGlzYWJsZSBwb3J0IDIiKTsKKworCQkJCSpSX1VTQl9QT1JUMl9ESVNBQkxFID0gSU9fU1RBVEUoUl9VU0JfUE9SVDJfRElTQUJMRSwgZGlzYWJsZSwgeWVzKTsKKworCQkJCXdoaWxlIChoYy0+cmgucHJldl93UG9ydFN0YXR1c18yICYKKwkJCQkgICAgICAgSU9fU1RBVEUoUl9VU0JfUkhfUE9SVF9TVEFUVVNfMiwgZW5hYmxlZCwgeWVzKSk7CisJCQkJKlJfVVNCX1BPUlQyX0RJU0FCTEUgPSBJT19TVEFURShSX1VTQl9QT1JUMl9ESVNBQkxFLCBkaXNhYmxlLCBubyk7CisJCQkJZGJnX3JoKCJQb3J0IDIgaXMgZGlzYWJsZWQiKTsKKworCQkJfSBlbHNlIHsKKwkJCQlkYmdfcmgoIlJIX0NMRUFSX0ZFQVRVUkUtPlJIX1BPUlRfRU5BQkxFICIKKwkJCQkgICAgICAgIndpdGggaW52YWxpZCB3SW5kZXggPT0gJWQhIiwgd0luZGV4KTsKKwkJCX0KKworCQkJT0sgKDApOworCQljYXNlIChSSF9QT1JUX1NVU1BFTkQpOgorCQkJLyogT3Bwb3NpdGUgdG8gc3VzcGVuZCBzaG91bGQgYmUgcmVzdW1lLCBzbyB3ZSdsbCBkbyBhIHJlc3VtZS4gKi8KKwkJCS8qIEZJWE1FOiBVU0IgMS4xLCAxMS4xNi4yLjIgc2F5czoKKwkJCSAgICJDbGVhcmluZyB0aGUgUE9SVF9TVVNQRU5EIGZlYXR1cmUgY2F1c2VzIGEgaG9zdC1pbml0aWF0ZWQgcmVzdW1lCisJCQkgICBvbiB0aGUgc3BlY2lmaWVkIHBvcnQuIElmIHRoZSBwb3J0IGlzIG5vdCBpbiB0aGUgU3VzcGVuZGVkIHN0YXRlLAorCQkJICAgdGhlIGh1YiBzaG91bGQgdHJlYXQgdGhpcyByZXF1ZXN0IGFzIGEgZnVuY3Rpb25hbCBuby1vcGVyYXRpb24uIgorCQkJICAgU2hvdWxkbid0IHdlIGNoZWNrIGlmIHRoZSBwb3J0IGlzIGluIGEgc3VzcGVuZGVkIHN0YXRlIGJlZm9yZQorCQkJICAgcmVzdW1pbmc/ICovCisKKwkJCS8qIE1ha2Ugc3VyZSB0aGUgY29udHJvbGxlciBpc24ndCBidXN5LiAqLworCQkJd2hpbGUgKCpSX1VTQl9DT01NQU5EICYgSU9fTUFTSyhSX1VTQl9DT01NQU5ELCBidXN5KSk7CisKKwkJCWlmICh3SW5kZXggPT0gMSkgeworCQkJCSpSX1VTQl9DT01NQU5EID0KKwkJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9zZWwsIHBvcnQxKSB8CisJCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfY21kLCByZXN1bWUpIHwKKwkJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgY3RybF9jbWQsIG5vcCk7CisJCQl9IGVsc2UgaWYgKHdJbmRleCA9PSAyKSB7CisJCQkJKlJfVVNCX0NPTU1BTkQgPQorCQkJCQlJT19TVEFURShSX1VTQl9DT01NQU5ELCBwb3J0X3NlbCwgcG9ydDIpIHwKKwkJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9jbWQsIHJlc3VtZSkgfAorCQkJCQlJT19TVEFURShSX1VTQl9DT01NQU5ELCBjdHJsX2NtZCwgbm9wKTsKKwkJCX0gZWxzZSB7CisJCQkJZGJnX3JoKCJSSF9DTEVBUl9GRUFUVVJFLT5SSF9QT1JUX1NVU1BFTkQgIgorCQkJCSAgICAgICAid2l0aCBpbnZhbGlkIHdJbmRleCA9PSAlZCEiLCB3SW5kZXgpOworCQkJfQorCisJCQlPSyAoMCk7CisJCWNhc2UgKFJIX1BPUlRfUE9XRVIpOgorCQkJT0sgKDApOwkvKiBwb3J0IHBvd2VyICoqICovCisJCWNhc2UgKFJIX0NfUE9SVF9DT05ORUNUSU9OKToKKwkJCWlmICh3SW5kZXggPT0gMSkgeworCQkJCWhjLT5yaC53UG9ydENoYW5nZV8xICY9IH4oMSA8PCBSSF9QT1JUX0NPTk5FQ1RJT04pOworCQkJfSBlbHNlIGlmICh3SW5kZXggPT0gMikgeworCQkJCWhjLT5yaC53UG9ydENoYW5nZV8yICY9IH4oMSA8PCBSSF9QT1JUX0NPTk5FQ1RJT04pOworCQkJfSBlbHNlIHsKKwkJCQlkYmdfcmgoIlJIX0NMRUFSX0ZFQVRVUkUtPlJIX0NfUE9SVF9DT05ORUNUSU9OICIKKwkJCQkgICAgICAgIndpdGggaW52YWxpZCB3SW5kZXggPT0gJWQhIiwgd0luZGV4KTsKKwkJCX0KKworCQkJT0sgKDApOworCQljYXNlIChSSF9DX1BPUlRfRU5BQkxFKToKKwkJCWlmICh3SW5kZXggPT0gMSkgeworCQkJCWhjLT5yaC53UG9ydENoYW5nZV8xICY9IH4oMSA8PCBSSF9QT1JUX0VOQUJMRSk7CisJCQl9IGVsc2UgaWYgKHdJbmRleCA9PSAyKSB7CisJCQkJaGMtPnJoLndQb3J0Q2hhbmdlXzIgJj0gfigxIDw8IFJIX1BPUlRfRU5BQkxFKTsKKwkJCX0gZWxzZSB7CisJCQkJZGJnX3JoKCJSSF9DTEVBUl9GRUFUVVJFLT5SSF9DX1BPUlRfRU5BQkxFICIKKwkJCQkgICAgICAgIndpdGggaW52YWxpZCB3SW5kZXggPT0gJWQhIiwgd0luZGV4KTsKKwkJCX0KKwkJCU9LICgwKTsKKwkJY2FzZSAoUkhfQ19QT1JUX1NVU1BFTkQpOgorLyoqKiBXUl9SSF9QT1JUU1RBVChSSF9QU19QU1NDKTsgKi8KKwkJCU9LICgwKTsKKwkJY2FzZSAoUkhfQ19QT1JUX09WRVJfQ1VSUkVOVCk6CisJCQlPSyAoMCk7CS8qIHBvcnQgcG93ZXIgb3ZlciBjdXJyZW50ICoqICovCisJCWNhc2UgKFJIX0NfUE9SVF9SRVNFVCk6CisJCQlpZiAod0luZGV4ID09IDEpIHsKKwkJCQloYy0+cmgud1BvcnRDaGFuZ2VfMSAmPSB+KDEgPDwgUkhfUE9SVF9SRVNFVCk7CisJCQl9IGVsc2UgaWYgKHdJbmRleCA9PSAyKSB7CisJCQkJaGMtPnJoLndQb3J0Q2hhbmdlXzIgJj0gfigxIDw8IFJIX1BPUlRfUkVTRVQpOworCQkJfSBlbHNlIHsKKwkJCQlkYmdfcmgoIlJIX0NMRUFSX0ZFQVRVUkUtPlJIX0NfUE9SVF9SRVNFVCAiCisJCQkJICAgICAgICJ3aXRoIGludmFsaWQgaW5kZXggPT0gJWQhIiwgd0luZGV4KTsKKwkJCX0KKworCQkJT0sgKDApOworCisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJIX1NFVF9GRUFUVVJFIHwgUkhfT1RIRVIgfCBSSF9DTEFTUzoKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSAoUkhfUE9SVF9TVVNQRU5EKToKKworCQkJLyogTWFrZSBzdXJlIHRoZSBjb250cm9sbGVyIGlzbid0IGJ1c3kuICovCisJCQl3aGlsZSAoKlJfVVNCX0NPTU1BTkQgJiBJT19NQVNLKFJfVVNCX0NPTU1BTkQsIGJ1c3kpKTsKKworCQkJaWYgKHdJbmRleCA9PSAxKSB7CisJCQkJKlJfVVNCX0NPTU1BTkQgPQorCQkJCQlJT19TVEFURShSX1VTQl9DT01NQU5ELCBwb3J0X3NlbCwgcG9ydDEpIHwKKwkJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9jbWQsIHN1c3BlbmQpIHwKKwkJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgY3RybF9jbWQsIG5vcCk7CisJCQl9IGVsc2UgaWYgKHdJbmRleCA9PSAyKSB7CisJCQkJKlJfVVNCX0NPTU1BTkQgPQorCQkJCQlJT19TVEFURShSX1VTQl9DT01NQU5ELCBwb3J0X3NlbCwgcG9ydDIpIHwKKwkJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9jbWQsIHN1c3BlbmQpIHwKKwkJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgY3RybF9jbWQsIG5vcCk7CisJCQl9IGVsc2UgeworCQkJCWRiZ19yaCgiUkhfU0VUX0ZFQVRVUkUtPlJIX1BPUlRfU1VTUEVORCAiCisJCQkJICAgICAgICJ3aXRoIGludmFsaWQgd0luZGV4ID09ICVkISIsIHdJbmRleCk7CisJCQl9CisKKwkJCU9LICgwKTsKKwkJY2FzZSAoUkhfUE9SVF9SRVNFVCk6CisJCQlpZiAod0luZGV4ID09IDEpIHsKKworCQkJcG9ydF8xX3Jlc2V0OgorCQkJCWRiZ19yaCgiRG9pbmcgcmVzZXQgb2YgcG9ydCAxIik7CisKKwkJCQkvKiBNYWtlIHN1cmUgdGhlIGNvbnRyb2xsZXIgaXNuJ3QgYnVzeS4gKi8KKwkJCQl3aGlsZSAoKlJfVVNCX0NPTU1BTkQgJiBJT19NQVNLKFJfVVNCX0NPTU1BTkQsIGJ1c3kpKTsKKworCQkJCSpSX1VTQl9DT01NQU5EID0KKwkJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9zZWwsIHBvcnQxKSB8CisJCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfY21kLCByZXNldCkgfAorCQkJCQlJT19TVEFURShSX1VTQl9DT01NQU5ELCBjdHJsX2NtZCwgbm9wKTsKKworCQkJCS8qIFdlIG11c3Qgd2FpdCBhdCBsZWFzdCAxMCBtcyBmb3IgdGhlIGRldmljZSB0byByZWNvdmVyLgorCQkJCSAgIDE1IG1zIHNob3VsZCBiZSBlbm91Z2guICovCisJCQkJdWRlbGF5KDE1MDAwKTsKKworCQkJCS8qIFdhaXQgZm9yIHJlc2V0IGJpdCB0byBnbyBsb3cgKHNob3VsZCBiZSBkb25lIGJ5IG5vdykuICovCisJCQkJd2hpbGUgKGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzEgJgorCQkJCSAgICAgICBJT19TVEFURShSX1VTQl9SSF9QT1JUX1NUQVRVU18xLCByZXNldCwgeWVzKSk7CisKKwkJCQkvKiBJZiB0aGUgcG9ydCBzdGF0dXMgaXMKKwkJCQkgICAxKSBjb25uZWN0ZWQgYW5kIGVuYWJsZWQgdGhlbiB0aGVyZSBpcyBhIGRldmljZSBhbmQgZXZlcnl0aGluZyBpcyBmaW5lCisJCQkJICAgMikgbmVpdGhlciBjb25uZWN0ZWQgbm9yIGVuYWJsZWQgdGhlbiB0aGVyZSBpcyBubyBkZXZpY2UsIGFsc28gZmluZQorCQkJCSAgIDMpIGNvbm5lY3RlZCBhbmQgbm90IGVuYWJsZWQgdGhlbiB3ZSB0cnkgYWdhaW4KKwkJCQkgICAoWWVzLCB0aGVyZSBhcmUgb3RoZXIgcG9ydCBzdGF0dXMgY29tYmluYXRpb25zIGJlc2lkZXMgdGhlc2UuKSAqLworCisJCQkJaWYgKChoYy0+cmgucHJldl93UG9ydFN0YXR1c18xICYKKwkJCQkgICAgIElPX1NUQVRFKFJfVVNCX1JIX1BPUlRfU1RBVFVTXzEsIGNvbm5lY3RlZCwgeWVzKSkgJiYKKwkJCQkgICAgKGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzEgJgorCQkJCSAgICAgSU9fU1RBVEUoUl9VU0JfUkhfUE9SVF9TVEFUVVNfMSwgZW5hYmxlZCwgbm8pKSkgeworCQkJCQlkYmdfcmgoIkNvbm5lY3RlZCBkZXZpY2Ugb24gcG9ydCAxLCBidXQgcG9ydCBub3QgZW5hYmxlZD8iCisJCQkJCSAgICAgICAiIFRyeWluZyByZXNldCBhZ2Fpbi4iKTsKKwkJCQkJZ290byBwb3J0XzJfcmVzZXQ7CisJCQkJfQorCisJCQkJLyogRGlhZ25vc3RpYyBwcmludG91dHMuICovCisJCQkJaWYgKChoYy0+cmgucHJldl93UG9ydFN0YXR1c18xICYKKwkJCQkgICAgIElPX1NUQVRFKFJfVVNCX1JIX1BPUlRfU1RBVFVTXzEsIGNvbm5lY3RlZCwgbm8pKSAmJgorCQkJCSAgICAoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMSAmCisJCQkJICAgICBJT19TVEFURShSX1VTQl9SSF9QT1JUX1NUQVRVU18xLCBlbmFibGVkLCBubykpKSB7CisJCQkJCWRiZ19yaCgiTm8gY29ubmVjdGVkIGRldmljZSBvbiBwb3J0IDEiKTsKKwkJCQl9IGVsc2UgaWYgKChoYy0+cmgucHJldl93UG9ydFN0YXR1c18xICYKKwkJCQkJICAgIElPX1NUQVRFKFJfVVNCX1JIX1BPUlRfU1RBVFVTXzEsIGNvbm5lY3RlZCwgeWVzKSkgJiYKKwkJCQkJICAgKGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzEgJgorCQkJCQkgICAgSU9fU1RBVEUoUl9VU0JfUkhfUE9SVF9TVEFUVVNfMSwgZW5hYmxlZCwgeWVzKSkpIHsKKwkJCQkJZGJnX3JoKCJDb25uZWN0ZWQgZGV2aWNlIG9uIHBvcnQgMSwgcG9ydCAxIGVuYWJsZWQiKTsKKwkJCQl9CisKKwkJCX0gZWxzZSBpZiAod0luZGV4ID09IDIpIHsKKworCQkJcG9ydF8yX3Jlc2V0OgorCQkJCWRiZ19yaCgiRG9pbmcgcmVzZXQgb2YgcG9ydCAyIik7CisKKwkJCQkvKiBNYWtlIHN1cmUgdGhlIGNvbnRyb2xsZXIgaXNuJ3QgYnVzeS4gKi8KKwkJCQl3aGlsZSAoKlJfVVNCX0NPTU1BTkQgJiBJT19NQVNLKFJfVVNCX0NPTU1BTkQsIGJ1c3kpKTsKKworCQkJCS8qIElzc3VlIHRoZSByZXNldCBjb21tYW5kLiAqLworCQkJCSpSX1VTQl9DT01NQU5EID0KKwkJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9zZWwsIHBvcnQyKSB8CisJCQkJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfY21kLCByZXNldCkgfAorCQkJCQlJT19TVEFURShSX1VTQl9DT01NQU5ELCBjdHJsX2NtZCwgbm9wKTsKKworCQkJCS8qIFdlIG11c3Qgd2FpdCBhdCBsZWFzdCAxMCBtcyBmb3IgdGhlIGRldmljZSB0byByZWNvdmVyLgorCQkJCSAgIDE1IG1zIHNob3VsZCBiZSBlbm91Z2guICovCisJCQkJdWRlbGF5KDE1MDAwKTsKKworCQkJCS8qIFdhaXQgZm9yIHJlc2V0IGJpdCB0byBnbyBsb3cgKHNob3VsZCBiZSBkb25lIGJ5IG5vdykuICovCisJCQkJd2hpbGUgKGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzIgJgorCQkJCSAgICAgICBJT19TVEFURShSX1VTQl9SSF9QT1JUX1NUQVRVU18yLCByZXNldCwgeWVzKSk7CisKKwkJCQkvKiBJZiB0aGUgcG9ydCBzdGF0dXMgaXMKKwkJCQkgICAxKSBjb25uZWN0ZWQgYW5kIGVuYWJsZWQgdGhlbiB0aGVyZSBpcyBhIGRldmljZSBhbmQgZXZlcnl0aGluZyBpcyBmaW5lCisJCQkJICAgMikgbmVpdGhlciBjb25uZWN0ZWQgbm9yIGVuYWJsZWQgdGhlbiB0aGVyZSBpcyBubyBkZXZpY2UsIGFsc28gZmluZQorCQkJCSAgIDMpIGNvbm5lY3RlZCBhbmQgbm90IGVuYWJsZWQgdGhlbiB3ZSB0cnkgYWdhaW4KKwkJCQkgICAoWWVzLCB0aGVyZSBhcmUgb3RoZXIgcG9ydCBzdGF0dXMgY29tYmluYXRpb25zIGJlc2lkZXMgdGhlc2UuKSAqLworCisJCQkJaWYgKChoYy0+cmgucHJldl93UG9ydFN0YXR1c18yICYKKwkJCQkgICAgIElPX1NUQVRFKFJfVVNCX1JIX1BPUlRfU1RBVFVTXzIsIGNvbm5lY3RlZCwgeWVzKSkgJiYKKwkJCQkgICAgKGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzIgJgorCQkJCSAgICAgSU9fU1RBVEUoUl9VU0JfUkhfUE9SVF9TVEFUVVNfMiwgZW5hYmxlZCwgbm8pKSkgeworCQkJCQlkYmdfcmgoIkNvbm5lY3RlZCBkZXZpY2Ugb24gcG9ydCAyLCBidXQgcG9ydCBub3QgZW5hYmxlZD8iCisJCQkJCSAgICAgICAiIFRyeWluZyByZXNldCBhZ2Fpbi4iKTsKKwkJCQkJZ290byBwb3J0XzJfcmVzZXQ7CisJCQkJfQorCisJCQkJLyogRGlhZ25vc3RpYyBwcmludG91dHMuICovCisJCQkJaWYgKChoYy0+cmgucHJldl93UG9ydFN0YXR1c18yICYKKwkJCQkgICAgIElPX1NUQVRFKFJfVVNCX1JIX1BPUlRfU1RBVFVTXzIsIGNvbm5lY3RlZCwgbm8pKSAmJgorCQkJCSAgICAoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMiAmCisJCQkJICAgICBJT19TVEFURShSX1VTQl9SSF9QT1JUX1NUQVRVU18yLCBlbmFibGVkLCBubykpKSB7CisJCQkJCWRiZ19yaCgiTm8gY29ubmVjdGVkIGRldmljZSBvbiBwb3J0IDIiKTsKKwkJCQl9IGVsc2UgaWYgKChoYy0+cmgucHJldl93UG9ydFN0YXR1c18yICYKKwkJCQkJICAgIElPX1NUQVRFKFJfVVNCX1JIX1BPUlRfU1RBVFVTXzIsIGNvbm5lY3RlZCwgeWVzKSkgJiYKKwkJCQkJICAgKGhjLT5yaC5wcmV2X3dQb3J0U3RhdHVzXzIgJgorCQkJCQkgICAgSU9fU1RBVEUoUl9VU0JfUkhfUE9SVF9TVEFUVVNfMiwgZW5hYmxlZCwgeWVzKSkpIHsKKwkJCQkJZGJnX3JoKCJDb25uZWN0ZWQgZGV2aWNlIG9uIHBvcnQgMiwgcG9ydCAyIGVuYWJsZWQiKTsKKwkJCQl9CisKKwkJCX0gZWxzZSB7CisJCQkJZGJnX3JoKCJSSF9TRVRfRkVBVFVSRS0+UkhfUE9SVF9SRVNFVCB3aXRoIGludmFsaWQgd0luZGV4ID0gJWQiLCB3SW5kZXgpOworCQkJfQorCisJCQkvKiBNYWtlIHN1cmUgdGhlIGNvbnRyb2xsZXIgaXNuJ3QgYnVzeS4gKi8KKwkJCXdoaWxlICgqUl9VU0JfQ09NTUFORCAmIElPX01BU0soUl9VU0JfQ09NTUFORCwgYnVzeSkpOworCisJCQkvKiBJZiBhbGwgZW5hYmxlZCBwb3J0cyB3ZXJlIGRpc2FibGVkIHRoZSBob3N0IGNvbnRyb2xsZXIgZ29lcyBkb3duIGludG8KKwkJCSAgIHN0YXJ0ZWQgbW9kZSwgc28gd2UgbmVlZCB0byBicmluZyBpdCBiYWNrIGludG8gdGhlIHJ1bm5pbmcgc3RhdGUuCisJCQkgICAoVGhpcyBpcyBzYWZlIGV2ZW4gaWYgaXQncyBhbHJlYWR5IGluIHRoZSBydW5uaW5nIHN0YXRlLikgKi8KKwkJCSpSX1VTQl9DT01NQU5EID0KKwkJCQlJT19TVEFURShSX1VTQl9DT01NQU5ELCBwb3J0X3NlbCwgbm9wKSB8CisJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9jbWQsIHJlc2V0KSB8CisJCQkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgY3RybF9jbWQsIGhvc3RfcnVuKTsKKworCQkJZGJnX3JoKCIuLi5Eb25lIik7CisJCQlPSygwKTsKKworCQljYXNlIChSSF9QT1JUX1BPV0VSKToKKwkJCU9LICgwKTsJLyogcG9ydCBwb3dlciAqKiAqLworCQljYXNlIChSSF9QT1JUX0VOQUJMRSk6CisJCQkvKiBUaGVyZSBpcyBubyBwb3J0IGVuYWJsZSBjb21tYW5kIGluIHRoZSBob3N0IGNvbnRyb2xsZXIsIHNvIGlmIHRoZQorCQkJICAgcG9ydCBpcyBhbHJlYWR5IGVuYWJsZWQsIHdlIGRvIG5vdGhpbmcuIElmIG5vdCwgd2UgcmVzZXQgdGhlIHBvcnQKKwkJCSAgICh3aXRoIGFuIHVnbHkgZ290bykuICovCisKKwkJCWlmICh3SW5kZXggPT0gMSkgeworCQkJCWlmIChoYy0+cmgucHJldl93UG9ydFN0YXR1c18xICYKKwkJCQkgICAgSU9fU1RBVEUoUl9VU0JfUkhfUE9SVF9TVEFUVVNfMSwgZW5hYmxlZCwgbm8pKSB7CisJCQkJCWdvdG8gcG9ydF8xX3Jlc2V0OworCQkJCX0KKwkJCX0gZWxzZSBpZiAod0luZGV4ID09IDIpIHsKKwkJCQlpZiAoaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMiAmCisJCQkJICAgIElPX1NUQVRFKFJfVVNCX1JIX1BPUlRfU1RBVFVTXzIsIGVuYWJsZWQsIG5vKSkgeworCQkJCQlnb3RvIHBvcnRfMl9yZXNldDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWRiZ19yaCgiUkhfU0VUX0ZFQVRVUkUtPlJIX0dFVF9TVEFUVVMgd2l0aCBpbnZhbGlkIHdJbmRleCA9ICVkIiwgd0luZGV4KTsKKwkJCX0KKwkJCU9LICgwKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUkhfU0VUX0FERFJFU1M6CisJCWhjLT5yaC5kZXZudW0gPSB3VmFsdWU7CisJCWRiZ19yaCgiUkggYWRkcmVzcyBzZXQgdG86ICVkIiwgaGMtPnJoLmRldm51bSk7CisJCU9LICgwKTsKKworCWNhc2UgUkhfR0VUX0RFU0NSSVBUT1I6CisJCXN3aXRjaCAoKHdWYWx1ZSAmIDB4ZmYwMCkgPj4gOCkgeworCQljYXNlICgweDAxKToJLyogZGV2aWNlIGRlc2NyaXB0b3IgKi8KKwkJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuaSwgbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YgKHJvb3RfaHViX2Rldl9kZXMpLCB3TGVuZ3RoKSk7CisJCQltZW1jcHkgKGRhdGEsIHJvb3RfaHViX2Rldl9kZXMsIGxlbik7CisJCQlPSyAobGVuKTsKKwkJY2FzZSAoMHgwMik6CS8qIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvciAqLworCQkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW5pLCBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZiAocm9vdF9odWJfY29uZmlnX2RlcyksIHdMZW5ndGgpKTsKKwkJCW1lbWNweSAoZGF0YSwgcm9vdF9odWJfY29uZmlnX2RlcywgbGVuKTsKKwkJCU9LIChsZW4pOworCQljYXNlICgweDAzKToJLyogc3RyaW5nIGRlc2NyaXB0b3JzICovCisJCQlsZW4gPSB1c2Jfcm9vdF9odWJfc3RyaW5nICh3VmFsdWUgJiAweGZmLAorCQkJCQkJICAgMHhmZiwgIkVUUkFYIDEwMExYIiwKKwkJCQkJCSAgIGRhdGEsIHdMZW5ndGgpOworCQkJaWYgKGxlbiA+IDApIHsKKwkJCQlPSyhtaW4obGVuaSwgbGVuKSk7CisJCQl9IGVsc2UgeworCQkJCXN0YXQgPSAtRVBJUEU7CisJCQl9CisKKwkJfQorCQlicmVhazsKKworCWNhc2UgUkhfR0VUX0RFU0NSSVBUT1IgfCBSSF9DTEFTUzoKKwkJcm9vdF9odWJfaHViX2Rlc1syXSA9IGhjLT5yaC5udW1wb3J0czsKKwkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW5pLCBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZiAocm9vdF9odWJfaHViX2RlcyksIHdMZW5ndGgpKTsKKwkJbWVtY3B5IChkYXRhLCByb290X2h1Yl9odWJfZGVzLCBsZW4pOworCQlPSyAobGVuKTsKKworCWNhc2UgUkhfR0VUX0NPTkZJR1VSQVRJT046CisJCSooX191OCAqKSBkYXRhID0gMHgwMTsKKwkJT0sgKDEpOworCisJY2FzZSBSSF9TRVRfQ09ORklHVVJBVElPTjoKKwkJT0sgKDApOworCisJZGVmYXVsdDoKKwkJc3RhdCA9IC1FUElQRTsKKwl9CisKKwl1cmItPmFjdHVhbF9sZW5ndGggPSBsZW47CisJdXJiLT5zdGF0dXMgPSBzdGF0OworCXVyYi0+ZGV2ID0gTlVMTDsKKwlpZiAodXJiLT5jb21wbGV0ZSkgeworCQl1cmItPmNvbXBsZXRlKHVyYiwgTlVMTCk7CisJfQorCURCRkVYSVQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2V0cmF4X3VzYl9idWxrX2VvdF90aW1lcl9mdW5jKHVuc2lnbmVkIGxvbmcgZHVtbXkpCit7CisJLyogQmVjYXVzZSBvZiBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSB0b3AgaGFsZiwgd2UgbWlnaHQgbWlzcyBhIGJ1bGsgZW90LgorCSAgIFRoaXMgdGltZXIgInNpbXVsYXRlcyIgYSBidWxrIGVvdCBpZiB3ZSBkb24ndCBnZXQgb25lIGZvciBhIHdoaWxlLCBob3BlZnVsbHkKKwkgICBjb3JyZWN0aW5nIHRoZSBzaXR1YXRpb24uICovCisJZGJnX2J1bGsoImJ1bGtfZW90X3RpbWVyIHRpbWVkIG91dC4iKTsKKwlldHJheF91c2JfaGNfYnVsa19lb3RfaW50ZXJydXB0KDEpOworfQorCitzdGF0aWMgdm9pZCoKK2V0cmF4X3VzYl9idWZmZXJfYWxsb2Moc3RydWN0IHVzYl9idXMqIGJ1cywgc2l6ZV90IHNpemUsIGludCBtZW1fZmxhZ3MsIGRtYV9hZGRyX3QgKmRtYSkKK3sKKyAgcmV0dXJuIGttYWxsb2Moc2l6ZSwgbWVtX2ZsYWdzKTsKK30KKworc3RhdGljIHZvaWQKK2V0cmF4X3VzYl9idWZmZXJfZnJlZShzdHJ1Y3QgdXNiX2J1cyAqYnVzLCBzaXplX3Qgc2l6ZSwgdm9pZCAqYWRkciwgZG1hX2FkZHJfdCBkbWEpCit7CisgIGtmcmVlKGFkZHIpOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlIGZha2VfZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCBldHJheF91c2JfaGNfaW5pdCh2b2lkKQoreworCXN0YXRpYyBldHJheF9oY190ICpoYzsKKwlzdHJ1Y3QgdXNiX2J1cyAqYnVzOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2Jfcmg7CisJaW50IGk7CisKKwlEQkZFTlRFUjsKKworCWluZm8oIkVUUkFYIDEwMExYIFVTQi1IQ0QgJXMgKGMpIDIwMDEtMjAwMyBBeGlzIENvbW11bmljYXRpb25zIEFCXG4iLCB1c2JfaGNkX3ZlcnNpb24pOworCisgCWhjID0ga21hbGxvYyhzaXplb2YoZXRyYXhfaGNfdCksIEdGUF9LRVJORUwpOworCWFzc2VydChoYyAhPSBOVUxMKTsKKworCS8qIFdlIHVzZSBrbWVtX2NhY2hlXyogdG8gbWFrZSBzdXJlIHRoYXQgYWxsIERNQSBkZXNjLiBhcmUgZHdvcmQgYWxpZ25lZCAqLworCS8qIE5vdGUgdGhhdCB3ZSBzcGVjaWZ5IHNpemVvZihVU0JfRVBfRGVzY190KSBhcyB0aGUgc2l6ZSwgYnV0IGFsc28gYWxsb2NhdGUKKwkgICBTQiBkZXNjcmlwdG9ycyBmcm9tIHRoaXMgY2FjaGUuIFRoaXMgaXMgb2sgc2luY2Ugc2l6ZW9mKFVTQl9FUF9EZXNjX3QpID09CisJICAgc2l6ZW9mKFVTQl9TQl9EZXNjX3QpLiAqLworCisJdXNiX2Rlc2NfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgidXNiX2Rlc2NfY2FjaGUiLCBzaXplb2YoVVNCX0VQX0Rlc2NfdCksIDAsCisJCQkJCSAgIFNMQUJfSFdDQUNIRV9BTElHTiwgMCwgMCk7CisJYXNzZXJ0KHVzYl9kZXNjX2NhY2hlICE9IE5VTEwpOworCisJdG9wX2hhbGZfcmVnX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInRvcF9oYWxmX3JlZ19jYWNoZSIsCisJCQkJCSAgICAgICBzaXplb2YodXNiX2ludGVycnVwdF9yZWdpc3RlcnNfdCksCisJCQkJCSAgICAgICAwLCBTTEFCX0hXQ0FDSEVfQUxJR04sIDAsIDApOworCWFzc2VydCh0b3BfaGFsZl9yZWdfY2FjaGUgIT0gTlVMTCk7CisKKwlpc29jX2NvbXBsX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImlzb2NfY29tcGxfY2FjaGUiLAorCQkJCQkJc2l6ZW9mKHVzYl9pc29jX2NvbXBsZXRlX2RhdGFfdCksCisJCQkJCQkwLCBTTEFCX0hXQ0FDSEVfQUxJR04sIDAsIDApOworCWFzc2VydChpc29jX2NvbXBsX2NhY2hlICE9IE5VTEwpOworCisJZXRyYXhfdXNiX2J1cyA9IGJ1cyA9IHVzYl9hbGxvY19idXMoJmV0cmF4X3VzYl9kZXZpY2Vfb3BlcmF0aW9ucyk7CisJaGMtPmJ1cyA9IGJ1czsKKwlidXMtPmJ1c19uYW1lPSJFVFJBWCAxMDBMWCI7CisJYnVzLT5oY3ByaXYgPSBoYzsKKworCS8qIEluaXRhbGl6ZSBSSCB0byB0aGUgZGVmYXVsdCBhZGRyZXNzLgorCSAgIEFuZCBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIG5vIHN0YXR1cyBjaGFuZ2UgaW5kaWNhdGlvbiAqLworCWhjLT5yaC5udW1wb3J0cyA9IDI7ICAvKiBUaGUgUkggaGFzIHR3byBwb3J0cyAqLworCWhjLT5yaC5kZXZudW0gPSAxOworCWhjLT5yaC53UG9ydENoYW5nZV8xID0gMDsKKwloYy0+cmgud1BvcnRDaGFuZ2VfMiA9IDA7CisKKwkvKiBBbHNvIGluaXRhdGUgdGhlIHByZXZpb3VzIHZhbHVlcyB0byB6ZXJvICovCisJaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMSA9IDA7CisJaGMtPnJoLnByZXZfd1BvcnRTdGF0dXNfMiA9IDA7CisKKwkvKiBJbml0aWFsaXplIHRoZSBpbnRyLXRyYWZmaWMgZmxhZ3MgKi8KKwkvKiBGSVhNRTogVGhpcyBpc24ndCB1c2VkLiAoQmVzaWRlcywgdGhlIGVycm9yIGZpZWxkIGlzbid0IGluaXRpYWxpemVkLikgKi8KKwloYy0+aW50ci5zbGVlcGluZyA9IDA7CisJaGMtPmludHIud3EgPSBOVUxMOworCisJZXBpZF91c2FnZV9iaXRtYXNrID0gMDsKKwllcGlkX291dF90cmFmZmljID0gMDsKKworCS8qIE1hcmsgdGhlIGludmFsaWQgZXBpZCBhcyBiZWluZyB1c2VkLiAqLworCXNldF9iaXQoSU5WQUxJRF9FUElELCAodm9pZCAqKSZlcGlkX3VzYWdlX2JpdG1hc2spOworCSpSX1VTQl9FUFRfSU5ERVggPSBJT19GSUVMRChSX1VTQl9FUFRfSU5ERVgsIHZhbHVlLCBJTlZBTElEX0VQSUQpOworCW5vcCgpOworCS8qIFRoZSB2YWxpZCBiaXQgc2hvdWxkIHN0aWxsIGJlIHNldCAoJ2ludmFsaWQnIGlzIGluIG91ciB3b3JsZDsgbm90IHRoZSBoYXJkd2FyZSdzKS4gKi8KKwkqUl9VU0JfRVBUX0RBVEEgPSAoSU9fU1RBVEUoUl9VU0JfRVBUX0RBVEEsIHZhbGlkLCB5ZXMpIHwKKwkJCSAgIElPX0ZJRUxEKFJfVVNCX0VQVF9EQVRBLCBtYXhfbGVuLCAxKSk7CisKKwkvKiBNYXJrIHRoZSBkdW1teSBlcGlkIGFzIGJlaW5nIHVzZWQuICovCisJc2V0X2JpdChEVU1NWV9FUElELCAodm9pZCAqKSZlcGlkX3VzYWdlX2JpdG1hc2spOworCSpSX1VTQl9FUFRfSU5ERVggPSBJT19GSUVMRChSX1VTQl9FUFRfSU5ERVgsIHZhbHVlLCBEVU1NWV9FUElEKTsKKwlub3AoKTsKKwkqUl9VU0JfRVBUX0RBVEEgPSAoSU9fU1RBVEUoUl9VU0JfRVBUX0RBVEEsIHZhbGlkLCBubykgfAorCQkJICAgSU9fRklFTEQoUl9VU0JfRVBUX0RBVEEsIG1heF9sZW4sIDEpKTsKKworCS8qIEluaXRpYWxpemUgdGhlIHVyYiBsaXN0IGJ5IGluaXRpYXRpbmcgYSBoZWFkIGZvciBlYWNoIGxpc3QuICovCisJZm9yIChpID0gMDsgaSA8IE5CUl9PRl9FUElEUzsgaSsrKSB7CisJCUlOSVRfTElTVF9IRUFEKCZ1cmJfbGlzdFtpXSk7CisJfQorCXNwaW5fbG9ja19pbml0KCZ1cmJfbGlzdF9sb2NrKTsKKworCUlOSVRfTElTVF9IRUFEKCZ1cmJfdW5saW5rX2xpc3QpOworCisKKwkvKiBJbml0aWF0ZSB0aGUgYnVsayBzdGFydCB0aW1lci4gKi8KKwlpbml0X3RpbWVyKCZidWxrX3N0YXJ0X3RpbWVyKTsKKwlidWxrX3N0YXJ0X3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgQlVMS19TVEFSVF9USU1FUl9JTlRFUlZBTDsKKwlidWxrX3N0YXJ0X3RpbWVyLmZ1bmN0aW9uID0gZXRyYXhfdXNiX2J1bGtfc3RhcnRfdGltZXJfZnVuYzsKKwlhZGRfdGltZXIoJmJ1bGtfc3RhcnRfdGltZXIpOworCisKKwkvKiBJbml0aWF0ZSB0aGUgYnVsayBlb3QgdGltZXIuICovCisJaW5pdF90aW1lcigmYnVsa19lb3RfdGltZXIpOworCWJ1bGtfZW90X3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgQlVMS19FT1RfVElNRVJfSU5URVJWQUw7CisJYnVsa19lb3RfdGltZXIuZnVuY3Rpb24gPSBldHJheF91c2JfYnVsa19lb3RfdGltZXJfZnVuYzsKKwlhZGRfdGltZXIoJmJ1bGtfZW90X3RpbWVyKTsKKworCS8qIFNldCB1cCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGZvciBVU0IgdHJhZmZpYy4gTm90ZSB0aGF0IHRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZQorCSAgIGFueSBpbnRlcnJ1cHQgdGhhdCByZWxpZXMgb24gc2FuZSBETUEgbGlzdCBvY2N1cnJzLiAqLworCWluaXRfcnhfYnVmZmVycygpOworCWluaXRfdHhfYnVsa19lcCgpOworCWluaXRfdHhfY3RybF9lcCgpOworCWluaXRfdHhfaW50cl9lcCgpOworCWluaXRfdHhfaXNvY19lcCgpOworCisgICAgICAgIGRldmljZV9pbml0aWFsaXplKCZmYWtlX2RldmljZSk7CisgICAgICAgIGtvYmplY3Rfc2V0X25hbWUoJmZha2VfZGV2aWNlLmtvYmosICJldHJheF91c2IiKTsKKyAgICAgICAga29iamVjdF9hZGQoJmZha2VfZGV2aWNlLmtvYmopOworICAgICAgICBoYy0+YnVzLT5jb250cm9sbGVyID0gJmZha2VfZGV2aWNlOworCXVzYl9yZWdpc3Rlcl9idXMoaGMtPmJ1cyk7CisKKwkqUl9JUlFfTUFTSzJfU0VUID0KKwkJLyogTm90ZSB0aGF0IHRoZXNlIGludGVycnVwdHMgYXJlIG5vdCB1c2VkLiAqLworCQlJT19TVEFURShSX0lSUV9NQVNLMl9TRVQsIGRtYThfc3ViMF9kZXNjciwgc2V0KSB8CisJCS8qIFN1YiBjaGFubmVsIDEgKGN0cmwpIGRlc2NyLiBpbnRlcnJ1cHRzIGFyZSB1c2VkLiAqLworCQlJT19TVEFURShSX0lSUV9NQVNLMl9TRVQsIGRtYThfc3ViMV9kZXNjciwgc2V0KSB8CisJCUlPX1NUQVRFKFJfSVJRX01BU0syX1NFVCwgZG1hOF9zdWIyX2Rlc2NyLCBzZXQpIHwKKwkJLyogU3ViIGNoYW5uZWwgMyAoaXNvYykgZGVzY3IuIGludGVycnVwdHMgYXJlIHVzZWQuICovCisJCUlPX1NUQVRFKFJfSVJRX01BU0syX1NFVCwgZG1hOF9zdWIzX2Rlc2NyLCBzZXQpOworCisJLyogTm90ZSB0aGF0IHRoZSBkbWE5X2Rlc2NyIGludGVycnVwdCBpcyBub3QgdXNlZC4gKi8KKwkqUl9JUlFfTUFTSzJfU0VUID0KKwkJSU9fU1RBVEUoUl9JUlFfTUFTSzJfU0VULCBkbWE5X2VvcCwgc2V0KSB8CisJCUlPX1NUQVRFKFJfSVJRX01BU0syX1NFVCwgZG1hOV9kZXNjciwgc2V0KTsKKworCS8qIEZJWE1FOiBFbmFibGUgaXNvX2VvZiBvbmx5IHdoZW4gaXNvYyB0cmFmZmljIGlzIHJ1bm5pbmcuICovCisJKlJfVVNCX0lSUV9NQVNLX1NFVCA9CisJCUlPX1NUQVRFKFJfVVNCX0lSUV9NQVNLX1NFVCwgaXNvX2VvZiwgc2V0KSB8CisJCUlPX1NUQVRFKFJfVVNCX0lSUV9NQVNLX1NFVCwgYnVsa19lb3QsIHNldCkgfAorCQlJT19TVEFURShSX1VTQl9JUlFfTUFTS19TRVQsIGVwaWRfYXR0biwgc2V0KSB8CisJCUlPX1NUQVRFKFJfVVNCX0lSUV9NQVNLX1NFVCwgcG9ydF9zdGF0dXMsIHNldCkgfAorCQlJT19TVEFURShSX1VTQl9JUlFfTUFTS19TRVQsIGN0bF9zdGF0dXMsIHNldCk7CisKKworCWlmIChyZXF1ZXN0X2lycShFVFJBWF9VU0JfSENfSVJRLCBldHJheF91c2JfaGNfaW50ZXJydXB0X3RvcF9oYWxmLCAwLAorCQkJIkVUUkFYIDEwMExYIGJ1aWx0LWluIFVTQiAoSEMpIiwgaGMpKSB7CisJCWVycigiQ291bGQgbm90IGFsbG9jYXRlIElSUSAlZCBmb3IgVVNCIiwgRVRSQVhfVVNCX0hDX0lSUSk7CisJCWV0cmF4X3VzYl9oY19jbGVhbnVwKCk7CisJCURCRkVYSVQ7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAocmVxdWVzdF9pcnEoRVRSQVhfVVNCX1JYX0lSUSwgZXRyYXhfdXNiX3J4X2ludGVycnVwdCwgMCwKKwkJCSJFVFJBWCAxMDBMWCBidWlsdC1pbiBVU0IgKFJ4KSIsIGhjKSkgeworCQllcnIoIkNvdWxkIG5vdCBhbGxvY2F0ZSBJUlEgJWQgZm9yIFVTQiIsIEVUUkFYX1VTQl9SWF9JUlEpOworCQlldHJheF91c2JfaGNfY2xlYW51cCgpOworCQlEQkZFWElUOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHJlcXVlc3RfaXJxKEVUUkFYX1VTQl9UWF9JUlEsIGV0cmF4X3VzYl90eF9pbnRlcnJ1cHQsIDAsCisJCQkiRVRSQVggMTAwTFggYnVpbHQtaW4gVVNCIChUeCkiLCBoYykpIHsKKwkJZXJyKCJDb3VsZCBub3QgYWxsb2NhdGUgSVJRICVkIGZvciBVU0IiLCBFVFJBWF9VU0JfVFhfSVJRKTsKKwkJZXRyYXhfdXNiX2hjX2NsZWFudXAoKTsKKwkJREJGRVhJVDsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFJfVVNCX0NPTU1BTkQ6CisJICAgVVNCIGNvbW1hbmRzIGluIGhvc3QgbW9kZS4gVGhlIGZpZWxkcyBpbiB0aGlzIHJlZ2lzdGVyIHNob3VsZCBhbGwgYmUKKwkgICB3cml0dGVuIHRvIGluIG9uZSB3cml0ZS4gRG8gbm90IHJlYWQtbW9kaWZ5LXdyaXRlIG9uZSBmaWVsZCBhdCBhIHRpbWUuIEEKKwkgICB3cml0ZSB0byB0aGlzIHJlZ2lzdGVyIHdpbGwgdHJpZ2dlciBldmVudHMgaW4gdGhlIFVTQiBjb250cm9sbGVyIGFuZCBhbgorCSAgIGluY29tcGxldGUgY29tbWFuZCBtYXkgbGVhZCB0byB1bnByZWRpY3RhYmxlIHJlc3VsdHMsIGFuZCBpbiB3b3JzdCBjYXNlCisJICAgZXZlbiB0byBhIGRlYWRsb2NrIGluIHRoZSBjb250cm9sbGVyLgorCSAgIChOb3RlIGhvd2V2ZXIgdGhhdCB0aGUgYnVzeSBmaWVsZCBpcyByZWFkLW9ubHksIHNvIG5vIG5lZWQgdG8gd3JpdGUgdG8gaXQuKSAqLworCisJLyogQ2hlY2sgdGhlIGJ1c3kgYml0IGJlZm9yZSB3cml0aW5nIHRvIFJfVVNCX0NPTU1BTkQuICovCisKKwl3aGlsZSAoKlJfVVNCX0NPTU1BTkQgJiBJT19NQVNLKFJfVVNCX0NPTU1BTkQsIGJ1c3kpKTsKKworCS8qIFJlc2V0IHRoZSBVU0IgaW50ZXJmYWNlLiAqLworCSpSX1VTQl9DT01NQU5EID0KKwkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9zZWwsIG5vcCkgfAorCQlJT19TVEFURShSX1VTQl9DT01NQU5ELCBwb3J0X2NtZCwgcmVzZXQpIHwKKwkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgY3RybF9jbWQsIHJlc2V0KTsKKworCS8qIERlc2lnbmVyJ3MgUmVmZXJlbmNlLCBwLiA4IC0gMTAgc2F5cyB3ZSBzaG91bGQgSW5pdGF0ZSBSX1VTQl9GTV9QU1RBUlQgdG8gMHgyQTMwICgxMDgwMCksCisJICAgdG8gZ3VhcmFudGVlIHRoYXQgY29udHJvbCB0cmFmZmljIGdldHMgMTAlIG9mIHRoZSBiYW5kd2lkdGgsIGFuZCBwZXJpb2RpYyB0cmFuc2ZlciBtYXkKKwkgICBhbGxvY2F0ZSB0aGUgcmVzdCAoOTAlKS4gVGhpcyBkb2Vzbid0IHdvcmsgdGhvdWdoLiBSZWFkIG9uIGZvciBhIGxlbmdodHkgZXhwbGFuYXRpb24uCisKKwkgICBXaGlsZSB0aGVyZSBpcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiByZXYuIDIgYW5kIHJldi4gMyBvZiB0aGUgRVRSQVggMTAwTFggcmVnYXJkaW5nIHRoZSBOQUsKKwkgICBiZWhhdmlvdXIsIGl0IGRvZXNuJ3Qgc29sdmUgdGhpcyBwcm9ibGVtLiBXaGF0IGhhcHBlbnMgaXMgdGhhdCBhIGNvbnRyb2wgdHJhbnNmZXIgd2lsbCBub3QKKwkgICBiZSBpbnRlcnJ1cHRlZCBpbiBpdHMgZGF0YSBzdGFnZSB3aGVuIFBTVEFSVCBoYXBwZW5zICh0aGUgcG9pbnQgYXQgd2hpY2ggcGVyaW9kaWMgdHJhZmZpYworCSAgIGlzIHN0YXJ0ZWQpLiBUaHVzLCBpZiBQU1RBUlQgaXMgc2V0IHRvIDEwODAwIGFuZCBpdHMgSU4gb3IgT1VUIHRva2VuIGlzIE5BS2VkIHVudGlsIGp1c3QgYmVmb3JlCisJICAgUFNUQVJUIGhhcHBlbnMsIGl0IHdpbGwgY29udGludWUgdGhlIElOL09VVCB0cmFuc2ZlciBhcyBsb25nIGFzIGl0J3MgQUNLZWQuIEFmdGVyIGl0J3MgZG9uZSwKKwkgICB0aGVyZSBtYXkgYmUgdG9vIGxpdHRsZSB0aW1lIGxlZnQgZm9yIGFuIGlzb2Nocm9ub3VzIHRyYW5zZmVyLCBjYXVzaW5nIGFuIGVwaWQgYXR0ZW50aW9uCisJICAgaW50ZXJydXB0IGR1ZSB0byBwZXJyb3IuIFRoZSB3b3JrLWFyb3VuZCBmb3IgdGhpcyBpcyB0byBsZXQgdGhlIGNvbnRyb2wgdHJhbnNmZXJzIHJ1biBhdCB0aGUKKwkgICBlbmQgb2YgdGhlIGZyYW1lIGluc3RlYWQgb2YgYXQgdGhlIGJlZ2lubmluZywgYW5kIHdpbGwgYmUgaW50ZXJydXB0ZWQganVzdCBmaW5lIGlmIGl0IGRvZXNuJ3QKKwkgICBmaXQgaW50byB0aGUgZnJhbWUuIEhvd2V2ZXIsIHNpbmNlIHRoZXJlIHdpbGwgKmFsd2F5cyogYmUgYSBjb250cm9sIHRyYW5zZmVyIGF0IHRoZSBiZWdpbm5pbmcKKwkgICBvZiB0aGUgZnJhbWUsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB3ZSBzZXQgUFNUQVJUIHRvLCB0aGF0IHRyYW5zZmVyIG1pZ2h0IGJlIGEgNjQtYnl0ZSB0cmFuc2ZlcgorCSAgIHdoaWNoIGNvbnN1bWVzIHVwIHRvIDE1JSBvZiB0aGUgZnJhbWUsIGxlYXZpbmcgb25seSA4NSUgZm9yIHBlcmlvZGljIHRyYWZmaWMuIFRoZSBzb2x1dGlvbiB0bworCSAgIHRoaXMgd291bGQgYmUgdG8gJ2R1bW15IGFsbG9jYXRlJyA1JSBvZiB0aGUgZnJhbWUgd2l0aCB0aGUgdXNiX2NsYWltX2JhbmR3aWR0aCBmdW5jdGlvbiB0byBtYWtlCisJICAgc3VyZSB0aGF0IHRoZSBwZXJpb2RpYyB0cmFuc2ZlcnMgdGhhdCBhcmUgaW5zZXJ0ZWQgd2lsbCBhbHdheXMgZml0IGluIHRoZSBmcmFtZS4KKworCSAgIFRoZSBpZGVhIHdhcyBzdWdnZXN0ZWQgdGhhdCBhIGNvbnRyb2wgdHJhbnNmZXIgY291bGQgYmUgc3BsaXQgdXAgaW50byBzZXZlcmFsIDggYnl0ZSB0cmFuc2ZlcnMsCisJICAgc28gdGhhdCBpdCB3b3VsZCBiZSBpbnRlcnJ1cHRlZCBieSBQU1RBUlQsIGJ1dCBzaW5jZSB0aGlzIGNhbid0IGJlIGRvbmUgZm9yIGFuIElOIHRyYW5zZmVyIHRoaXMKKwkgICBoYXNuJ3QgYmVlbiBpbXBsZW1lbnRlZC4KKworCSAgIFRoZSB2YWx1ZSAxMTk2MCBpcyBjaG9zZW4gdG8gYmUganVzdCBhZnRlciB0aGUgU09GIHRva2VuLCB3aXRoIGEgY291cGxlIG9mIGJpdCB0aW1lcyBleHRyYQorCSAgIGZvciBwb3NzaWJsZSBiaXQgc3R1ZmZpbmcuICovCisKKwkqUl9VU0JfRk1fUFNUQVJUID0gSU9fRklFTEQoUl9VU0JfRk1fUFNUQVJULCB2YWx1ZSwgMTE5NjApOworCisjaWZkZWYgQ09ORklHX0VUUkFYX1VTQl9IT1NUX1BPUlQxCisJKlJfVVNCX1BPUlQxX0RJU0FCTEUgPSBJT19TVEFURShSX1VTQl9QT1JUMV9ESVNBQkxFLCBkaXNhYmxlLCBubyk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19FVFJBWF9VU0JfSE9TVF9QT1JUMgorCSpSX1VTQl9QT1JUMl9ESVNBQkxFID0gSU9fU1RBVEUoUl9VU0JfUE9SVDJfRElTQUJMRSwgZGlzYWJsZSwgbm8pOworI2VuZGlmCisKKwl3aGlsZSAoKlJfVVNCX0NPTU1BTkQgJiBJT19NQVNLKFJfVVNCX0NPTU1BTkQsIGJ1c3kpKTsKKworCS8qIENvbmZpZ3VyZSB0aGUgVVNCIGludGVyZmFjZSBhcyBhIGhvc3QgY29udHJvbGxlci4gKi8KKwkqUl9VU0JfQ09NTUFORCA9CisJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIHBvcnRfc2VsLCBub3ApIHwKKwkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9jbWQsIHJlc2V0KSB8CisJCUlPX1NUQVRFKFJfVVNCX0NPTU1BTkQsIGN0cmxfY21kLCBob3N0X2NvbmZpZyk7CisKKwkvKiBOb3RlOiBEbyBub3QgcmVzZXQgYW55IHBvcnRzIGhlcmUuIEF3YWl0IHRoZSBwb3J0IHN0YXR1cyBpbnRlcnJ1cHRzLCB0byBoYXZlIGEgY29udHJvbGxlZAorCSAgIHNlcXVlbmNlIG9mIHJlc2V0dGluZyB0aGUgcG9ydHMuIElmIHdlIHJlc2V0IGJvdGggcG9ydHMgbm93LCBhbmQgdGhlcmUgYXJlIGRldmljZXMKKwkgICBvbiBib3RoIHBvcnRzLCB3ZSB3aWxsIGdldCBhIGJ1cyBlcnJvciBiZWNhdXNlIGJvdGggZGV2aWNlcyB3aWxsIGFuc3dlciB0aGUgc2V0IGFkZHJlc3MKKwkgICByZXF1ZXN0LiAqLworCisJd2hpbGUgKCpSX1VTQl9DT01NQU5EICYgSU9fTUFTSyhSX1VTQl9DT01NQU5ELCBidXN5KSk7CisKKwkvKiBTdGFydCBwcm9jZXNzaW5nIG9mIFVTQiB0cmFmZmljLiAqLworCSpSX1VTQl9DT01NQU5EID0KKwkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgcG9ydF9zZWwsIG5vcCkgfAorCQlJT19TVEFURShSX1VTQl9DT01NQU5ELCBwb3J0X2NtZCwgcmVzZXQpIHwKKwkJSU9fU1RBVEUoUl9VU0JfQ09NTUFORCwgY3RybF9jbWQsIGhvc3RfcnVuKTsKKworCXdoaWxlICgqUl9VU0JfQ09NTUFORCAmIElPX01BU0soUl9VU0JfQ09NTUFORCwgYnVzeSkpOworCisJdXNiX3JoID0gdXNiX2FsbG9jX2RldihOVUxMLCBoYy0+YnVzLCAwKTsKKwloYy0+YnVzLT5yb290X2h1YiA9IHVzYl9yaDsKKyAgICAgICAgdXNiX3JoLT5zdGF0ZSA9IFVTQl9TVEFURV9BRERSRVNTOworICAgICAgICB1c2JfcmgtPnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CisgICAgICAgIHVzYl9yaC0+ZGV2bnVtID0gMTsKKyAgICAgICAgaGMtPmJ1cy0+ZGV2bnVtX25leHQgPSAyOworICAgICAgICB1c2JfcmgtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gX19jb25zdF9jcHVfdG9fbGUxNig2NCk7CisgICAgICAgIHVzYl9nZXRfZGV2aWNlX2Rlc2NyaXB0b3IodXNiX3JoLCBVU0JfRFRfREVWSUNFX1NJWkUpOworCXVzYl9uZXdfZGV2aWNlKHVzYl9yaCk7CisKKwlEQkZFWElUOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGV0cmF4X3VzYl9oY19jbGVhbnVwKHZvaWQpCit7CisJREJGRU5URVI7CisKKwlmcmVlX2lycShFVFJBWF9VU0JfSENfSVJRLCBOVUxMKTsKKwlmcmVlX2lycShFVFJBWF9VU0JfUlhfSVJRLCBOVUxMKTsKKwlmcmVlX2lycShFVFJBWF9VU0JfVFhfSVJRLCBOVUxMKTsKKworCXVzYl9kZXJlZ2lzdGVyX2J1cyhldHJheF91c2JfYnVzKTsKKworCS8qIEZJWE1FOiBjYWxsIGttZW1fY2FjaGVfZGVzdHJveSBoZXJlPyAqLworCisJREJGRVhJVDsKK30KKworbW9kdWxlX2luaXQoZXRyYXhfdXNiX2hjX2luaXQpOworbW9kdWxlX2V4aXQoZXRyYXhfdXNiX2hjX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9oY19jcmlzdjEwLmggYi9kcml2ZXJzL3VzYi9ob3N0L2hjX2NyaXN2MTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmY3NzExCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9oY19jcmlzdjEwLmgKQEAgLTAsMCArMSwyODkgQEAKKyNpZm5kZWYgX19MSU5VWF9FVFJBWF9VU0JfSAorI2RlZmluZSBfX0xJTlVYX0VUUkFYX1VTQl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKwordHlwZWRlZiBzdHJ1Y3QgVVNCX0lOX0Rlc2MgeworCXZvbGF0aWxlIF9fdTE2IHN3X2xlbjsKKwl2b2xhdGlsZSBfX3UxNiBjb21tYW5kOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgbmV4dDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGJ1ZjsKKwl2b2xhdGlsZSBfX3UxNiBod19sZW47CisJdm9sYXRpbGUgX191MTYgc3RhdHVzOworfSBVU0JfSU5fRGVzY190OworCit0eXBlZGVmIHN0cnVjdCBVU0JfU0JfRGVzYyB7CisJdm9sYXRpbGUgX191MTYgc3dfbGVuOworCXZvbGF0aWxlIF9fdTE2IGNvbW1hbmQ7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBuZXh0OworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgYnVmOworCV9fdTMyIGR1bW15OworfSBVU0JfU0JfRGVzY190OworCit0eXBlZGVmIHN0cnVjdCBVU0JfRVBfRGVzYyB7CisJdm9sYXRpbGUgX191MTYgaHdfbGVuOworCXZvbGF0aWxlIF9fdTE2IGNvbW1hbmQ7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBzdWI7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBuZXh0OworCV9fdTMyIGR1bW15OworfSBVU0JfRVBfRGVzY190OworCitzdHJ1Y3QgdmlydF9yb290X2h1YiB7CisJaW50IGRldm51bTsKKwl2b2lkICp1cmI7CisJdm9pZCAqaW50X2FkZHI7CisJaW50IHNlbmQ7CisJaW50IGludGVydmFsOworCWludCBudW1wb3J0czsKKwlzdHJ1Y3QgdGltZXJfbGlzdCByaF9pbnRfdGltZXI7CisJdm9sYXRpbGUgX191MTYgd1BvcnRDaGFuZ2VfMTsKKwl2b2xhdGlsZSBfX3UxNiB3UG9ydENoYW5nZV8yOworCXZvbGF0aWxlIF9fdTE2IHByZXZfd1BvcnRTdGF0dXNfMTsKKwl2b2xhdGlsZSBfX3UxNiBwcmV2X3dQb3J0U3RhdHVzXzI7Cit9OworCitzdHJ1Y3QgZXRyYXhfdXNiX2ludHJfdHJhZmZpYyB7CisJaW50IHNsZWVwaW5nOworCWludCBlcnJvcjsKKwlzdHJ1Y3Qgd2FpdF9xdWV1ZSAqd3E7Cit9OworCit0eXBlZGVmIHN0cnVjdCBldHJheF91c2JfaGMgeworCXN0cnVjdCB1c2JfYnVzICpidXM7CisJc3RydWN0IHZpcnRfcm9vdF9odWIgcmg7CisJc3RydWN0IGV0cmF4X3VzYl9pbnRyX3RyYWZmaWMgaW50cjsKK30gZXRyYXhfaGNfdDsKKwordHlwZWRlZiBlbnVtIHsKKwlTVEFSVEVELAorCU5PVF9TVEFSVEVELAorCVVOTElOSywKKwlUUkFOU0ZFUl9ET05FLAorCVdBSVRJTkdfRk9SX0RFU0NSX0lOVFIKK30gZXRyYXhfdXNiX3VyYl9zdGF0ZV90OworCisKKwordHlwZWRlZiBzdHJ1Y3QgZXRyYXhfdXNiX3VyYl9wcml2IHsKKwkvKiBUaGUgZmlyc3Rfc2IgZmllbGQgaXMgdXNlZCBmb3IgZnJlZWluZyBhbGwgU0IgZGVzY3JpcHRvcnMgYmVsb25naW5nCisJICAgdG8gYW4gdXJiLiBUaGUgY29ycmVzcG9uZGluZyBlcCBkZXNjcmlwdG9yJ3Mgc3ViIHBvaW50ZXIgY2Fubm90IGJlCisJICAgdXNlZCBmb3IgdGhpcyBzaW5jZSB0aGUgRE1BIGFkdmFuY2VzIHRoZSBzdWIgcG9pbnRlciBhcyBpdCBwcm9jZXNzZXMKKwkgICB0aGUgc2IgbGlzdC4gKi8KKwlVU0JfU0JfRGVzY190ICpmaXJzdF9zYjsKKwkvKiBUaGUgbGFzdF9zYiBmaWVsZCByZWZlcmVzIHRvIHRoZSBsYXN0IFNCIGRlc2NyaXB0b3IgdGhhdCBiZWxvbmdzIHRvCisJICAgdGhpcyB1cmIuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGtub3cgc28gd2UgY2FuIGZyZWUgdGhlIFNCIGRlc2NyaXB0b3JzCisJICAgdGhhdCByYW5nZXMgYmV0d2VlbiBmaXJzdF9zYiBhbmQgbGFzdF9zYi4gKi8KKwlVU0JfU0JfRGVzY190ICpsYXN0X3NiOworCisJLyogVGhlIHJ4X29mZnNldCBmaWVsZCBpcyB1c2VkIGluIGN0cmwgYW5kIGJ1bGsgdHJhZmZpYyB0byBrZWVwIHRyYWNrCisJICAgb2YgdGhlIG9mZnNldCBpbiB0aGUgdXJiJ3MgdHJhbnNmZXJfYnVmZmVyIHdoZXJlIGluY29taW5nIGRhdGEgc2hvdWxkIGJlCisJICAgY29waWVkIHRvLiAqLworCV9fdTMyIHJ4X29mZnNldDsKKworCS8qIENvdW50ZXIgdXNlZCBpbiBpc29jaHJvbm91cyB0cmFuc2ZlcnMgdG8ga2VlcCB0cmFjayBvZiB0aGUKKwkgICBudW1iZXIgb2YgcGFja2V0cyByZWNlaXZlZC90cmFuc21pdHRlZC4gICovCisJX191MzIgaXNvY19wYWNrZXRfY291bnRlcjsKKworCS8qIFRoaXMgZmllbGQgaXMgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1cmIncyBjdXJyZW50IHN0YXRlIGJldHdlZW4KKwkgICB0aGUgdmFyaW91cyBpbnRlcnJ1cHQgaGFuZGxlcnMgKHRodXMgbWFya2VkIHZvbGF0aWxlKS4gKi8KKwl2b2xhdGlsZSBldHJheF91c2JfdXJiX3N0YXRlX3QgdXJiX3N0YXRlOworCisJLyogQ29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBzdWJtaXR0ZWQgdXJiIGFuZCBFVFJBWCBlcGlkIG51bWJlciAqLworCV9fdTggZXBpZDsKKworCS8qIFRoZSByeF9kYXRhX2xpc3QgZmllbGQgaXMgdXNlZCBmb3IgcGVyaW9kaWMgdHJhZmZpYywgdG8gaG9sZAorCSAgIHJlY2VpdmVkIGRhdGEgZm9yIGxhdGVyIHByb2Nlc3NpbmcgaW4gdGhlIHRoZSBjb21wbGV0ZV91cmIgZnVuY3Rpb25zLAorCSAgIHdoZXJlIHRoZSBkYXRhIHVzIGNvcGllZCB0byB0aGUgdXJiJ3MgdHJhbnNmZXJfYnVmZmVyLiBCYXNpY2FsbHksIHdlCisJICAgdXNlIHRoaXMgaW50ZXJtZWRpYXRlIHN0b3JhZ2UgYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoZW4gaXQncyBzYWZlIHRvCisJICAgcmV1c2UgdGhlIHRyYW5zZmVyX2J1ZmZlciAoRklYTUU/KS4gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHJ4X2RhdGFfbGlzdDsKK30gZXRyYXhfdXJiX3ByaXZfdDsKKworLyogVGhpcyBzdHJ1Y3QgaXMgZm9yIHBhc3NpbmcgZGF0YSBmcm9tIHRoZSB0b3AgaGFsZiB0byB0aGUgYm90dG9tIGhhbGYuICovCit0eXBlZGVmIHN0cnVjdCB1c2JfaW50ZXJydXB0X3JlZ2lzdGVycworeworCWV0cmF4X2hjX3QgKmhjOworCV9fdTMyIHJfdXNiX2VwaWRfYXR0bjsKKwlfX3U4IHJfdXNiX3N0YXR1czsKKwlfX3UxNiByX3VzYl9yaF9wb3J0X3N0YXR1c18xOworCV9fdTE2IHJfdXNiX3JoX3BvcnRfc3RhdHVzXzI7CisJX191MzIgcl91c2JfaXJxX21hc2tfcmVhZDsKKwlfX3UzMiByX3VzYl9mbV9udW1iZXI7CisJc3RydWN0IHdvcmtfc3RydWN0IHVzYl9iaDsKK30gdXNiX2ludGVycnVwdF9yZWdpc3RlcnNfdDsKKworLyogVGhpcyBzdHJ1Y3QgaXMgZm9yIHBhc3NpbmcgZGF0YSBmcm9tIHRoZSBpc29jIHRvcCBoYWxmIHRvIHRoZSBpc29jIGJvdHRvbSBoYWxmLiAqLwordHlwZWRlZiBzdHJ1Y3QgdXNiX2lzb2NfY29tcGxldGVfZGF0YQoreworCXN0cnVjdCB1cmIgKnVyYjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdXNiX2JoOworfSB1c2JfaXNvY19jb21wbGV0ZV9kYXRhX3Q7CisKKy8qIFRoaXMgc3RydWN0IGhvbGRzIGRhdGEgd2UgZ2V0IGZyb20gdGhlIHJ4IGRlc2NyaXB0b3JzIGZvciBETUEgY2hhbm5lbCA5CisgICBmb3IgcGVyaW9kaWMgdHJhZmZpYyAoaW50ciBhbmQgaXNvYykuICovCit0eXBlZGVmIHN0cnVjdCByeF9kYXRhCit7CisJdm9pZCAqZGF0YTsKKwlpbnQgbGVuZ3RoOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK30gcnhfZGF0YV90OworCit0eXBlZGVmIHN0cnVjdCB1cmJfZW50cnkKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfSB1cmJfZW50cnlfdDsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBWaXJ0dWFsIFJvb3QgSFVCCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBkZXN0aW5hdGlvbiBvZiByZXF1ZXN0ICovCisjZGVmaW5lIFJIX0lOVEVSRkFDRSAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgUkhfRU5EUE9JTlQgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBSSF9PVEhFUiAgICAgICAgICAgICAgICAgICAweDAzCisKKyNkZWZpbmUgUkhfQ0xBU1MgICAgICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBSSF9WRU5ET1IgICAgICAgICAgICAgICAgICAweDQwCisKKy8qIFJlcXVlc3RzOiBiUmVxdWVzdCA8PCA4IHwgYm1SZXF1ZXN0VHlwZSAqLworI2RlZmluZSBSSF9HRVRfU1RBVFVTICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgUkhfQ0xFQVJfRkVBVFVSRSAgICAgICAgMHgwMTAwCisjZGVmaW5lIFJIX1NFVF9GRUFUVVJFICAgICAgICAgIDB4MDMwMAorI2RlZmluZSBSSF9TRVRfQUREUkVTUwkJMHgwNTAwCisjZGVmaW5lIFJIX0dFVF9ERVNDUklQVE9SCTB4MDY4MAorI2RlZmluZSBSSF9TRVRfREVTQ1JJUFRPUiAgICAgICAweDA3MDAKKyNkZWZpbmUgUkhfR0VUX0NPTkZJR1VSQVRJT04JMHgwODgwCisjZGVmaW5lIFJIX1NFVF9DT05GSUdVUkFUSU9OCTB4MDkwMAorI2RlZmluZSBSSF9HRVRfU1RBVEUgICAgICAgICAgICAweDAyODAKKyNkZWZpbmUgUkhfR0VUX0lOVEVSRkFDRSAgICAgICAgMHgwQTgwCisjZGVmaW5lIFJIX1NFVF9JTlRFUkZBQ0UgICAgICAgIDB4MEIwMAorI2RlZmluZSBSSF9TWU5DX0ZSQU1FICAgICAgICAgICAweDBDODAKKy8qIE91ciBWZW5kb3IgU3BlY2lmaWMgUmVxdWVzdCAqLworI2RlZmluZSBSSF9TRVRfRVAgICAgICAgICAgICAgICAweDIwMDAKKworCisvKiBIdWIgcG9ydCBmZWF0dXJlcyAqLworI2RlZmluZSBSSF9QT1JUX0NPTk5FQ1RJT04gICAgICAgICAweDAwCisjZGVmaW5lIFJIX1BPUlRfRU5BQkxFICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgUkhfUE9SVF9TVVNQRU5EICAgICAgICAgICAgMHgwMgorI2RlZmluZSBSSF9QT1JUX09WRVJfQ1VSUkVOVCAgICAgICAweDAzCisjZGVmaW5lIFJIX1BPUlRfUkVTRVQgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgUkhfUE9SVF9QT1dFUiAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBSSF9QT1JUX0xPV19TUEVFRCAgICAgICAgICAweDA5CisjZGVmaW5lIFJIX0NfUE9SVF9DT05ORUNUSU9OICAgICAgIDB4MTAKKyNkZWZpbmUgUkhfQ19QT1JUX0VOQUJMRSAgICAgICAgICAgMHgxMQorI2RlZmluZSBSSF9DX1BPUlRfU1VTUEVORCAgICAgICAgICAweDEyCisjZGVmaW5lIFJIX0NfUE9SVF9PVkVSX0NVUlJFTlQgICAgIDB4MTMKKyNkZWZpbmUgUkhfQ19QT1JUX1JFU0VUICAgICAgICAgICAgMHgxNAorCisvKiBIdWIgZmVhdHVyZXMgKi8KKyNkZWZpbmUgUkhfQ19IVUJfTE9DQUxfUE9XRVIgICAgICAgMHgwMAorI2RlZmluZSBSSF9DX0hVQl9PVkVSX0NVUlJFTlQgICAgICAweDAxCisKKyNkZWZpbmUgUkhfREVWSUNFX1JFTU9URV9XQUtFVVAgICAgMHgwMAorI2RlZmluZSBSSF9FTkRQT0lOVF9TVEFMTCAgICAgICAgICAweDAxCisKKy8qIE91ciBWZW5kb3IgU3BlY2lmaWMgZmVhdHVyZSAqLworI2RlZmluZSBSSF9SRU1PVkVfRVAgICAgICAgICAgICAgICAweDAwCisKKworI2RlZmluZSBSSF9BQ0sgICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFJIX1JFUV9FUlIgICAgICAgICAgICAgICAgIC0xCisjZGVmaW5lIFJIX05BQ0sgICAgICAgICAgICAgICAgICAgIDB4MDAKKworLyogRmllbGQgZGVmaW5pdGlvbnMgZm9yICovCisKKyNkZWZpbmUgVVNCX0lOX2NvbW1hbmRfX2VvbF9fQklUTlIgICAgICAwIC8qIGNvbW1hbmQgbWFjcm9zICovCisjZGVmaW5lIFVTQl9JTl9jb21tYW5kX19lb2xfX1dJRFRIICAgICAgMQorI2RlZmluZSBVU0JfSU5fY29tbWFuZF9fZW9sX19ubyAgICAgICAgIDAKKyNkZWZpbmUgVVNCX0lOX2NvbW1hbmRfX2VvbF9feWVzICAgICAgICAxCisKKyNkZWZpbmUgVVNCX0lOX2NvbW1hbmRfX2ludHJfX0JJVE5SICAgICAzCisjZGVmaW5lIFVTQl9JTl9jb21tYW5kX19pbnRyX19XSURUSCAgICAgMQorI2RlZmluZSBVU0JfSU5fY29tbWFuZF9faW50cl9fbm8gICAgICAgIDAKKyNkZWZpbmUgVVNCX0lOX2NvbW1hbmRfX2ludHJfX3llcyAgICAgICAxCisKKyNkZWZpbmUgVVNCX0lOX3N0YXR1c19fZW9wX19CSVROUiAgICAgICAxIC8qIHN0YXR1cyBtYWNyb3MuICovCisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX2VvcF9fV0lEVEggICAgICAgMQorI2RlZmluZSBVU0JfSU5fc3RhdHVzX19lb3BfX25vICAgICAgICAgIDAKKyNkZWZpbmUgVVNCX0lOX3N0YXR1c19fZW9wX195ZXMgICAgICAgICAxCisKKyNkZWZpbmUgVVNCX0lOX3N0YXR1c19fZW90X19CSVROUiAgICAgICA1CisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX2VvdF9fV0lEVEggICAgICAgMQorI2RlZmluZSBVU0JfSU5fc3RhdHVzX19lb3RfX25vICAgICAgICAgIDAKKyNkZWZpbmUgVVNCX0lOX3N0YXR1c19fZW90X195ZXMgICAgICAgICAxCisKKyNkZWZpbmUgVVNCX0lOX3N0YXR1c19fZXJyb3JfX0JJVE5SICAgICA2CisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX2Vycm9yX19XSURUSCAgICAgMQorI2RlZmluZSBVU0JfSU5fc3RhdHVzX19lcnJvcl9fbm8gICAgICAgIDAKKyNkZWZpbmUgVVNCX0lOX3N0YXR1c19fZXJyb3JfX3llcyAgICAgICAxCisKKyNkZWZpbmUgVVNCX0lOX3N0YXR1c19fbm9kYXRhX19CSVROUiAgICA3CisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX25vZGF0YV9fV0lEVEggICAgMQorI2RlZmluZSBVU0JfSU5fc3RhdHVzX19ub2RhdGFfX25vICAgICAgIDAKKyNkZWZpbmUgVVNCX0lOX3N0YXR1c19fbm9kYXRhX195ZXMgICAgICAxCisKKyNkZWZpbmUgVVNCX0lOX3N0YXR1c19fZXBpZF9fQklUTlIgICAgICA4CisjZGVmaW5lIFVTQl9JTl9zdGF0dXNfX2VwaWRfX1dJRFRIICAgICAgNQorCisjZGVmaW5lIFVTQl9FUF9jb21tYW5kX19lb2xfX0JJVE5SICAgICAgMAorI2RlZmluZSBVU0JfRVBfY29tbWFuZF9fZW9sX19XSURUSCAgICAgIDEKKyNkZWZpbmUgVVNCX0VQX2NvbW1hbmRfX2VvbF9fbm8gICAgICAgICAwCisjZGVmaW5lIFVTQl9FUF9jb21tYW5kX19lb2xfX3llcyAgICAgICAgMQorCisjZGVmaW5lIFVTQl9FUF9jb21tYW5kX19lb2ZfX0JJVE5SICAgICAgMQorI2RlZmluZSBVU0JfRVBfY29tbWFuZF9fZW9mX19XSURUSCAgICAgIDEKKyNkZWZpbmUgVVNCX0VQX2NvbW1hbmRfX2VvZl9fbm8gICAgICAgICAwCisjZGVmaW5lIFVTQl9FUF9jb21tYW5kX19lb2ZfX3llcyAgICAgICAgMQorCisjZGVmaW5lIFVTQl9FUF9jb21tYW5kX19pbnRyX19CSVROUiAgICAgMworI2RlZmluZSBVU0JfRVBfY29tbWFuZF9faW50cl9fV0lEVEggICAgIDEKKyNkZWZpbmUgVVNCX0VQX2NvbW1hbmRfX2ludHJfX25vICAgICAgICAwCisjZGVmaW5lIFVTQl9FUF9jb21tYW5kX19pbnRyX195ZXMgICAgICAgMQorCisjZGVmaW5lIFVTQl9FUF9jb21tYW5kX19lbmFibGVfX0JJVE5SICAgNAorI2RlZmluZSBVU0JfRVBfY29tbWFuZF9fZW5hYmxlX19XSURUSCAgIDEKKyNkZWZpbmUgVVNCX0VQX2NvbW1hbmRfX2VuYWJsZV9fbm8gICAgICAwCisjZGVmaW5lIFVTQl9FUF9jb21tYW5kX19lbmFibGVfX3llcyAgICAgMQorCisjZGVmaW5lIFVTQl9FUF9jb21tYW5kX19od192YWxpZF9fQklUTlIgNQorI2RlZmluZSBVU0JfRVBfY29tbWFuZF9faHdfdmFsaWRfX1dJRFRIIDEKKyNkZWZpbmUgVVNCX0VQX2NvbW1hbmRfX2h3X3ZhbGlkX19ubyAgICAwCisjZGVmaW5lIFVTQl9FUF9jb21tYW5kX19od192YWxpZF9feWVzICAgMQorCisjZGVmaW5lIFVTQl9FUF9jb21tYW5kX19lcGlkX19CSVROUiAgICAgOAorI2RlZmluZSBVU0JfRVBfY29tbWFuZF9fZXBpZF9fV0lEVEggICAgIDUKKworI2RlZmluZSBVU0JfU0JfY29tbWFuZF9fZW9sX19CSVROUiAgICAgIDAgLyogY29tbWFuZCBtYWNyb3MuICovCisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX19lb2xfX1dJRFRIICAgICAgMQorI2RlZmluZSBVU0JfU0JfY29tbWFuZF9fZW9sX19ubyAgICAgICAgIDAKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX2VvbF9feWVzICAgICAgICAxCisKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX2VvdF9fQklUTlIgICAgICAxCisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX19lb3RfX1dJRFRIICAgICAgMQorI2RlZmluZSBVU0JfU0JfY29tbWFuZF9fZW90X19ubyAgICAgICAgIDAKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX2VvdF9feWVzICAgICAgICAxCisKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX2ludHJfX0JJVE5SICAgICAzCisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX19pbnRyX19XSURUSCAgICAgMQorI2RlZmluZSBVU0JfU0JfY29tbWFuZF9faW50cl9fbm8gICAgICAgIDAKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX2ludHJfX3llcyAgICAgICAxCisKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX3R0X19CSVROUiAgICAgICA0CisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX190dF9fV0lEVEggICAgICAgMgorI2RlZmluZSBVU0JfU0JfY29tbWFuZF9fdHRfX3pvdXQgICAgICAgIDAKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX3R0X19pbiAgICAgICAgICAxCisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX190dF9fb3V0ICAgICAgICAgMgorI2RlZmluZSBVU0JfU0JfY29tbWFuZF9fdHRfX3NldHVwICAgICAgIDMKKworCisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX19yZW1fX0JJVE5SICAgICAgOAorI2RlZmluZSBVU0JfU0JfY29tbWFuZF9fcmVtX19XSURUSCAgICAgIDYKKworI2RlZmluZSBVU0JfU0JfY29tbWFuZF9fZnVsbF9fQklUTlIgICAgIDYKKyNkZWZpbmUgVVNCX1NCX2NvbW1hbmRfX2Z1bGxfX1dJRFRIICAgICAxCisjZGVmaW5lIFVTQl9TQl9jb21tYW5kX19mdWxsX19ubyAgICAgICAgMAorI2RlZmluZSBVU0JfU0JfY29tbWFuZF9fZnVsbF9feWVzICAgICAgIDEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk4MWJmMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYwpAQCAtMCwwICsxLDI4NCBAQAorLyoKKyAqIE9IQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMiBEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIEJ1cyBHbHVlIGZvciBBTUQgQWxjaGVteSBBdTF4eHgKKyAqCisgKiBXcml0dGVuIGJ5IENocmlzdG9waGVyIEhvb3ZlciA8Y2hAaHBsLmhwLmNvbT4KKyAqIEJhc2VkIG9uIGZyYWdtZW50cyBvZiBwcmV2aW91cyBkcml2ZXIgYnkgUnVzZWxsIEtpbmcgZXQgYWwuCisgKgorICogTW9kaWZpZWQgZm9yIExIN0E0MDQgZnJvbSBvaGNpLXNhMTExMS5jCisgKiAgYnkgRHVyZ2VzaCBQYXR0YW1hdHRhIDxwYXR0YW1hdHRhZEBzaGFycHNlYy5jb20+CisgKiBNb2RpZmllZCBmb3IgQU1EIEFsY2hlbXkgQXUxeHh4CisgKiAgYnkgTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAa2VybmVsLmNyYXNoaW5nLm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC4KKyAqLworCisjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgorCisjZGVmaW5lIFVTQkhfRU5BQkxFX0JFICgxPDwwKQorI2RlZmluZSBVU0JIX0VOQUJMRV9DICAoMTw8MSkKKyNkZWZpbmUgVVNCSF9FTkFCTEVfRSAgKDE8PDIpCisjZGVmaW5lIFVTQkhfRU5BQkxFX0NFICgxPDwzKQorI2RlZmluZSBVU0JIX0VOQUJMRV9SRCAoMTw8NCkKKworI2lmZGVmIF9fTElUVExFX0VORElBTgorI2RlZmluZSBVU0JIX0VOQUJMRV9JTklUIChVU0JIX0VOQUJMRV9DRSB8IFVTQkhfRU5BQkxFX0UgfCBVU0JIX0VOQUJMRV9DKQorI2VsaWYgX19CSUdfRU5ESUFOCisjZGVmaW5lIFVTQkhfRU5BQkxFX0lOSVQgKFVTQkhfRU5BQkxFX0NFIHwgVVNCSF9FTkFCTEVfRSB8IFVTQkhfRU5BQkxFX0MgfCBVU0JIX0VOQUJMRV9CRSkKKyNlbHNlCisjZXJyb3Igbm90IGJ5dGUgb3JkZXIgZGVmaW5lZAorI2VuZGlmCisKK2V4dGVybiBpbnQgdXNiX2Rpc2FibGVkKHZvaWQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBhdTF4eHhfc3RhcnRfaGMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fCisJCSI6IHN0YXJ0aW5nIEF1MXh4eCBPSENJIFVTQiBDb250cm9sbGVyXG4iKTsKKworCS8qIGVuYWJsZSBob3N0IGNvbnRyb2xsZXIgKi8KKwlhdV93cml0ZWwoVVNCSF9FTkFCTEVfQ0UsIFVTQl9IT1NUX0NPTkZJRyk7CisJdWRlbGF5KDEwMDApOworCWF1X3dyaXRlbChVU0JIX0VOQUJMRV9JTklULCBVU0JfSE9TVF9DT05GSUcpOworCXVkZWxheSgxMDAwKTsKKworCS8qIHdhaXQgZm9yIHJlc2V0IGNvbXBsZXRlIChyZWFkIHJlZ2lzdGVyIHR3aWNlOyBzZWUgYXUxNTAwIGVycmF0YSkgKi8KKwl3aGlsZSAoYXVfcmVhZGwoVVNCX0hPU1RfQ09ORklHKSwKKwkJIShhdV9yZWFkbChVU0JfSE9TVF9DT05GSUcpICYgVVNCSF9FTkFCTEVfUkQpKQorCQl1ZGVsYXkoMTAwMCk7CisKKwlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXworCSI6IENsb2NrIHRvIFVTQiBob3N0IGhhcyBiZWVuIGVuYWJsZWQgXG4iKTsKK30KKworc3RhdGljIHZvaWQgYXUxeHh4X3N0b3BfaGMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fCisJICAgICAgICI6IHN0b3BwaW5nIEF1MXh4eCBPSENJIFVTQiBDb250cm9sbGVyXG4iKTsKKworCS8qIERpc2FibGUgY2xvY2sgKi8KKwlhdV93cml0ZWwocmVhZGwoKHZvaWQgKilVU0JfSE9TVF9DT05GSUcpICYgflVTQkhfRU5BQkxFX0NFLCBVU0JfSE9TVF9DT05GSUcpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGNvbmZpZ3VyZSBzbyBhbiBIQyBkZXZpY2UgYW5kIGlkIGFyZSBhbHdheXMgcHJvdmlkZWQgKi8KKy8qIGFsd2F5cyBjYWxsZWQgd2l0aCBwcm9jZXNzIGNvbnRleHQ7IHNsZWVwaW5nIGlzIE9LICovCisKKworLyoqCisgKiB1c2JfaGNkX2F1MXh4eF9wcm9iZSAtIGluaXRpYWxpemUgQXUxeHh4LWJhc2VkIEhDRHMKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIEFsbG9jYXRlcyBiYXNpYyByZXNvdXJjZXMgZm9yIHRoaXMgVVNCIGhvc3QgY29udHJvbGxlciwgYW5kCisgKiB0aGVuIGludm9rZXMgdGhlIHN0YXJ0KCkgbWV0aG9kIGZvciB0aGUgSENEIGFzc29jaWF0ZWQgd2l0aCBpdAorICogdGhyb3VnaCB0aGUgaG90cGx1ZyBlbnRyeSdzIGRyaXZlcl9kYXRhLgorICoKKyAqLworaW50IHVzYl9oY2RfYXUxeHh4X3Byb2JlIChjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIsCisJCQkgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisKKwlpZihkZXYtPnJlc291cmNlWzFdLmZsYWdzICE9IElPUkVTT1VSQ0VfSVJRKSB7CisJCXByX2RlYnVnICgicmVzb3VyY2VbMV0gaXMgbm90IElPUkVTT1VSQ0VfSVJRIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWhjZCA9IHVzYl9jcmVhdGVfaGNkKGRyaXZlciwgJmRldi0+ZGV2LCAiYXUxeHh4Iik7CisJaWYgKCFoY2QpCisJCXJldHVybiAtRU5PTUVNOworCWhjZC0+cnNyY19zdGFydCA9IGRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7CisJaGNkLT5yc3JjX2xlbiA9IGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDE7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4sIGhjZF9uYW1lKSkgeworCQlwcl9kZWJ1ZygicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZCIpOworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZXJyMTsKKwl9CisKKwloY2QtPnJlZ3MgPSBpb3JlbWFwKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJaWYgKCFoY2QtPnJlZ3MpIHsKKwkJcHJfZGVidWcoImlvcmVtYXAgZmFpbGVkIik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMjsKKwl9CisKKwlhdTF4eHhfc3RhcnRfaGMoZGV2KTsKKwlvaGNpX2hjZF9pbml0KGhjZF90b19vaGNpKGhjZCkpOworCisJcmV0dmFsID0gdXNiX2FkZF9oY2QoaGNkLCBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBTQV9JTlRFUlJVUFQpOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWF1MXh4eF9zdG9wX2hjKGRldik7CisJaW91bm1hcChoY2QtPnJlZ3MpOworIGVycjI6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisgZXJyMToKKwl1c2JfcHV0X2hjZChoY2QpOworCXJldHVybiByZXR2YWw7Cit9CisKKworLyogbWF5IGJlIGNhbGxlZCB3aXRob3V0IGNvbnRyb2xsZXIgZWxlY3RyaWNhbGx5IHByZXNlbnQgKi8KKy8qIG1heSBiZSBjYWxsZWQgd2l0aCBjb250cm9sbGVyLCBidXMsIGFuZCBkZXZpY2VzIGFjdGl2ZSAqLworCisvKioKKyAqIHVzYl9oY2RfYXUxeHh4X3JlbW92ZSAtIHNodXRkb3duIHByb2Nlc3NpbmcgZm9yIEF1MXh4eC1iYXNlZCBIQ0RzCisgKiBAZGV2OiBVU0IgSG9zdCBDb250cm9sbGVyIGJlaW5nIHJlbW92ZWQKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIFJldmVyc2VzIHRoZSBlZmZlY3Qgb2YgdXNiX2hjZF9hdTF4eHhfcHJvYmUoKSwgZmlyc3QgaW52b2tpbmcKKyAqIHRoZSBIQ0QncyBzdG9wKCkgbWV0aG9kLiAgSXQgaXMgYWx3YXlzIGNhbGxlZCBmcm9tIGEgdGhyZWFkCisgKiBjb250ZXh0LCBub3JtYWxseSAicm1tb2QiLCAiYXBtZCIsIG9yIHNvbWV0aGluZyBzaW1pbGFyLgorICoKKyAqLwordm9pZCB1c2JfaGNkX2F1MXh4eF9yZW1vdmUgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwl1c2JfcmVtb3ZlX2hjZChoY2QpOworCWF1MXh4eF9zdG9wX2hjKGRldik7CisJaW91bm1hcChoY2QtPnJlZ3MpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCXVzYl9wdXRfaGNkKGhjZCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitvaGNpX2F1MXh4eF9zdGFydCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKwlpbnQJCXJldDsKKworCW9oY2lfZGJnIChvaGNpLCAib2hjaV9hdTF4eHhfc3RhcnQsIG9oY2k6JXAiLCBvaGNpKTsKKworCWlmICgocmV0ID0gb2hjaV9pbml0IChvaGNpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKChyZXQgPSBvaGNpX3J1biAob2hjaSkpIDwgMCkgeworCQllcnIgKCJjYW4ndCBzdGFydCAlcyIsIGhjZC0+c2VsZi5idXNfbmFtZSk7CisJCW9oY2lfc3RvcCAoaGNkKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgb2hjaV9hdTF4eHhfaGNfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbiA9CQloY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjID0JCSJBdTF4eHggT0hDSSIsCisJLmhjZF9wcml2X3NpemUgPQlzaXplb2Yoc3RydWN0IG9oY2lfaGNkKSwKKworCS8qCisJICogZ2VuZXJpYyBoYXJkd2FyZSBsaW5rYWdlCisJICovCisJLmlycSA9CQkJb2hjaV9pcnEsCisJLmZsYWdzID0JCUhDRF9VU0IxMSB8IEhDRF9NRU1PUlksCisKKwkvKgorCSAqIGJhc2ljIGxpZmVjeWNsZSBvcGVyYXRpb25zCisJICovCisJLnN0YXJ0ID0JCW9oY2lfYXUxeHh4X3N0YXJ0LAorI2lmZGVmCUNPTkZJR19QTQorCS8qIHN1c3BlbmQ6CQlvaGNpX2F1MXh4eF9zdXNwZW5kLCAgLS0gdGJkICovCisJLyogcmVzdW1lOgkJb2hjaV9hdTF4eHhfcmVzdW1lLCAgIC0tIHRiZCAqLworI2VuZGlmIC8qQ09ORklHX1BNKi8KKwkuc3RvcCA9CQkJb2hjaV9zdG9wLAorCisJLyoKKwkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcworCSAqLworCS51cmJfZW5xdWV1ZSA9CQlvaGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZSA9CQlvaGNpX3VyYl9kZXF1ZXVlLAorCS5lbmRwb2ludF9kaXNhYmxlID0Jb2hjaV9lbmRwb2ludF9kaXNhYmxlLAorCisJLyoKKwkgKiBzY2hlZHVsaW5nIHN1cHBvcnQKKwkgKi8KKwkuZ2V0X2ZyYW1lX251bWJlciA9CW9oY2lfZ2V0X2ZyYW1lLAorCisJLyoKKwkgKiByb290IGh1YiBzdXBwb3J0CisJICovCisJLmh1Yl9zdGF0dXNfZGF0YSA9CW9oY2lfaHViX3N0YXR1c19kYXRhLAorCS5odWJfY29udHJvbCA9CQlvaGNpX2h1Yl9jb250cm9sLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJaW50IHJldDsKKworCXByX2RlYnVnICgiSW4gb2hjaV9oY2RfYXUxeHh4X2Rydl9wcm9iZSIpOworCisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IHVzYl9oY2RfYXUxeHh4X3Byb2JlKCZvaGNpX2F1MXh4eF9oY19kcml2ZXIsIHBkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9oY2RfYXUxeHh4X2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwl1c2JfaGNkX2F1MXh4eF9yZW1vdmUoaGNkLCBwZGV2KTsKKwlyZXR1cm4gMDsKK30KKwkvKlRCRCovCisvKnN0YXRpYyBpbnQgb2hjaV9oY2RfYXUxeHh4X2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IG9oY2lfaGNkX2F1MXh4eF9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIDA7Cit9CisqLworCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgb2hjaV9oY2RfYXUxeHh4X2RyaXZlciA9IHsKKwkubmFtZQkJPSAiYXUxeHh4LW9oY2kiLAorCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorCS5wcm9iZQkJPSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Byb2JlLAorCS5yZW1vdmUJCT0gb2hjaV9oY2RfYXUxeHh4X2Rydl9yZW1vdmUsCisJLyouc3VzcGVuZAk9IG9oY2lfaGNkX2F1MXh4eF9kcnZfc3VzcGVuZCwgKi8KKwkvKi5yZXN1bWUJPSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZSwgKi8KK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9oY2lfaGNkX2F1MXh4eF9pbml0ICh2b2lkKQoreworCXByX2RlYnVnIChEUklWRVJfSU5GTyAiIChBdTF4eHgpIik7CisJcHJfZGVidWcgKCJibG9jayBzaXplczogZWQgJWQgdGQgJWRcbiIsCisJCXNpemVvZiAoc3RydWN0IGVkKSwgc2l6ZW9mIChzdHJ1Y3QgdGQpKTsKKworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJm9oY2lfaGNkX2F1MXh4eF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgb2hjaV9oY2RfYXUxeHh4X2NsZWFudXAgKHZvaWQpCit7CisJZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX2F1MXh4eF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCAob2hjaV9oY2RfYXUxeHh4X2luaXQpOworbW9kdWxlX2V4aXQgKG9oY2lfaGNkX2F1MXh4eF9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmY1M2EyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jCkBAIC0wLDAgKzEsNzA3IEBACisvKgorICogT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCisgKgorICogKEMpIENvcHlyaWdodCAxOTk5IFJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAyIERhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMLgorICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBERUJVRworCisjZGVmaW5lIGVkc3RyaW5nKGVkX3R5cGUpICh7IGNoYXIgKnRlbXA7IFwKKwlzd2l0Y2ggKGVkX3R5cGUpIHsgXAorCWNhc2UgUElQRV9DT05UUk9MOgl0ZW1wID0gImN0cmwiOyBicmVhazsgXAorCWNhc2UgUElQRV9CVUxLOgkJdGVtcCA9ICJidWxrIjsgYnJlYWs7IFwKKwljYXNlIFBJUEVfSU5URVJSVVBUOgl0ZW1wID0gImludHIiOyBicmVhazsgXAorCWRlZmF1bHQ6IAkJdGVtcCA9ICJpc29jIjsgYnJlYWs7IFwKKwl9OyB0ZW1wO30pCisjZGVmaW5lIHBpcGVzdHJpbmcocGlwZSkgZWRzdHJpbmcodXNiX3BpcGV0eXBlKHBpcGUpKQorCisvKiBkZWJ1Z3wgcHJpbnQgdGhlIG1haW4gY29tcG9uZW50cyBvZiBhbiBVUkIKKyAqIHNtYWxsOiAwKSBoZWFkZXIgKyBkYXRhIHBhY2tldHMgMSkganVzdCBoZWFkZXIKKyAqLworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKK3VyYl9wcmludCAoc3RydWN0IHVyYiAqIHVyYiwgY2hhciAqIHN0ciwgaW50IHNtYWxsKQoreworCXVuc2lnbmVkIGludCBwaXBlPSB1cmItPnBpcGU7CisKKwlpZiAoIXVyYi0+ZGV2IHx8ICF1cmItPmRldi0+YnVzKSB7CisJCWRiZygiJXMgVVJCOiBubyBkZXYiLCBzdHIpOworCQlyZXR1cm47CisJfQorCisjaWZuZGVmCU9IQ0lfVkVSQk9TRV9ERUJVRworCWlmICh1cmItPnN0YXR1cyAhPSAwKQorI2VuZGlmCisJZGJnKCIlcyAlcCBkZXY9JWQgZXA9JWQlcy0lcyBmbGFncz0leCBsZW49JWQvJWQgc3RhdD0lZCIsCisJCSAgICBzdHIsCisJCSAgICB1cmIsCisJCSAgICB1c2JfcGlwZWRldmljZSAocGlwZSksCisJCSAgICB1c2JfcGlwZWVuZHBvaW50IChwaXBlKSwKKwkJICAgIHVzYl9waXBlb3V0IChwaXBlKT8gIm91dCIgOiAiaW4iLAorCQkgICAgcGlwZXN0cmluZyAocGlwZSksCisJCSAgICB1cmItPnRyYW5zZmVyX2ZsYWdzLAorCQkgICAgdXJiLT5hY3R1YWxfbGVuZ3RoLAorCQkgICAgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkgICAgdXJiLT5zdGF0dXMpOworCisjaWZkZWYJT0hDSV9WRVJCT1NFX0RFQlVHCisJaWYgKCFzbWFsbCkgeworCQlpbnQgaSwgbGVuOworCisJCWlmICh1c2JfcGlwZWNvbnRyb2wgKHBpcGUpKSB7CisJCQlwcmludGsgKEtFUk5fREVCVUcgX19GSUxFX18gIjogc2V0dXAoOCk6Iik7CisJCQlmb3IgKGkgPSAwOyBpIDwgOCA7IGkrKykKKwkJCQlwcmludGsgKCIgJTAyeCIsICgoX191OCAqKSB1cmItPnNldHVwX3BhY2tldCkgW2ldKTsKKwkJCXByaW50ayAoIlxuIik7CisJCX0KKwkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IDAgJiYgdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKKwkJCXByaW50ayAoS0VSTl9ERUJVRyBfX0ZJTEVfXyAiOiBkYXRhKCVkLyVkKToiLAorCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCQkJbGVuID0gdXNiX3BpcGVvdXQgKHBpcGUpPworCQkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOiB1cmItPmFjdHVhbF9sZW5ndGg7CisJCQlmb3IgKGkgPSAwOyBpIDwgMTYgJiYgaSA8IGxlbjsgaSsrKQorCQkJCXByaW50ayAoIiAlMDJ4IiwgKChfX3U4ICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyKSBbaV0pOworCQkJcHJpbnRrICgiJXMgc3RhdDolZFxuIiwgaSA8IGxlbj8gIi4uLiI6ICIiLCB1cmItPnN0YXR1cyk7CisJCX0KKwl9CisjZW5kaWYKK30KKworI2RlZmluZSBvaGNpX2RiZ19zdyhvaGNpLCBuZXh0LCBzaXplLCBmb3JtYXQsIGFyZy4uLikgXAorCWRvIHsgXAorCWlmIChuZXh0KSB7IFwKKwkJdW5zaWduZWQgc19sZW47IFwKKwkJc19sZW4gPSBzY25wcmludGYgKCpuZXh0LCAqc2l6ZSwgZm9ybWF0LCAjIyBhcmcgKTsgXAorCQkqc2l6ZSAtPSBzX2xlbjsgKm5leHQgKz0gc19sZW47IFwKKwl9IGVsc2UgXAorCQlvaGNpX2RiZyhvaGNpLGZvcm1hdCwgIyMgYXJnICk7IFwKKwl9IHdoaWxlICgwKTsKKworCitzdGF0aWMgdm9pZCBvaGNpX2R1bXBfaW50cl9tYXNrICgKKwlzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksCisJY2hhciAqbGFiZWwsCisJdTMyIG1hc2ssCisJY2hhciAqKm5leHQsCisJdW5zaWduZWQgKnNpemUpCit7CisJb2hjaV9kYmdfc3cgKG9oY2ksIG5leHQsIHNpemUsICIlcyAweCUwOHglcyVzJXMlcyVzJXMlcyVzJXNcbiIsCisJCWxhYmVsLAorCQltYXNrLAorCQkobWFzayAmIE9IQ0lfSU5UUl9NSUUpID8gIiBNSUUiIDogIiIsCisJCShtYXNrICYgT0hDSV9JTlRSX09DKSA/ICIgT0MiIDogIiIsCisJCShtYXNrICYgT0hDSV9JTlRSX1JIU0MpID8gIiBSSFNDIiA6ICIiLAorCQkobWFzayAmIE9IQ0lfSU5UUl9GTk8pID8gIiBGTk8iIDogIiIsCisJCShtYXNrICYgT0hDSV9JTlRSX1VFKSA/ICIgVUUiIDogIiIsCisJCShtYXNrICYgT0hDSV9JTlRSX1JEKSA/ICIgUkQiIDogIiIsCisJCShtYXNrICYgT0hDSV9JTlRSX1NGKSA/ICIgU0YiIDogIiIsCisJCShtYXNrICYgT0hDSV9JTlRSX1dESCkgPyAiIFdESCIgOiAiIiwKKwkJKG1hc2sgJiBPSENJX0lOVFJfU08pID8gIiBTTyIgOiAiIgorCQkpOworfQorCitzdGF0aWMgdm9pZCBtYXliZV9wcmludF9lZHMgKAorCXN0cnVjdCBvaGNpX2hjZCAqb2hjaSwKKwljaGFyICpsYWJlbCwKKwl1MzIgdmFsdWUsCisJY2hhciAqKm5leHQsCisJdW5zaWduZWQgKnNpemUpCit7CisJaWYgKHZhbHVlKQorCQlvaGNpX2RiZ19zdyAob2hjaSwgbmV4dCwgc2l6ZSwgIiVzICUwOHhcbiIsIGxhYmVsLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBjaGFyICpoY2ZzMnN0cmluZyAoaW50IHN0YXRlKQoreworCXN3aXRjaCAoc3RhdGUpIHsKKwkJY2FzZSBPSENJX1VTQl9SRVNFVDoJcmV0dXJuICJyZXNldCI7CisJCWNhc2UgT0hDSV9VU0JfUkVTVU1FOglyZXR1cm4gInJlc3VtZSI7CisJCWNhc2UgT0hDSV9VU0JfT1BFUjoJcmV0dXJuICJvcGVyYXRpb25hbCI7CisJCWNhc2UgT0hDSV9VU0JfU1VTUEVORDoJcmV0dXJuICJzdXNwZW5kIjsKKwl9CisJcmV0dXJuICI/IjsKK30KKworLy8gZHVtcCBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXJzCitzdGF0aWMgdm9pZAorb2hjaV9kdW1wX3N0YXR1cyAoc3RydWN0IG9oY2lfaGNkICpjb250cm9sbGVyLCBjaGFyICoqbmV4dCwgdW5zaWduZWQgKnNpemUpCit7CisJc3RydWN0IG9oY2lfcmVncyBfX2lvbWVtICpyZWdzID0gY29udHJvbGxlci0+cmVnczsKKwl1MzIJCQl0ZW1wOworCisJdGVtcCA9IG9oY2lfcmVhZGwgKGNvbnRyb2xsZXIsICZyZWdzLT5yZXZpc2lvbikgJiAweGZmOworCW9oY2lfZGJnX3N3IChjb250cm9sbGVyLCBuZXh0LCBzaXplLAorCQkiT0hDSSAlZC4lZCwgJXMgbGVnYWN5IHN1cHBvcnQgcmVnaXN0ZXJzXG4iLAorCQkweDAzICYgKHRlbXAgPj4gNCksICh0ZW1wICYgMHgwZiksCisJCSh0ZW1wICYgMHgwMTAwKSA/ICJ3aXRoIiA6ICJOTyIpOworCisJdGVtcCA9IG9oY2lfcmVhZGwgKGNvbnRyb2xsZXIsICZyZWdzLT5jb250cm9sKTsKKwlvaGNpX2RiZ19zdyAoY29udHJvbGxlciwgbmV4dCwgc2l6ZSwKKwkJImNvbnRyb2wgMHglMDN4JXMlcyVzIEhDRlM9JXMlcyVzJXMlcyBDQlNSPSVkXG4iLAorCQl0ZW1wLAorCQkodGVtcCAmIE9IQ0lfQ1RSTF9SV0UpID8gIiBSV0UiIDogIiIsCisJCSh0ZW1wICYgT0hDSV9DVFJMX1JXQykgPyAiIFJXQyIgOiAiIiwKKwkJKHRlbXAgJiBPSENJX0NUUkxfSVIpID8gIiBJUiIgOiAiIiwKKwkJaGNmczJzdHJpbmcgKHRlbXAgJiBPSENJX0NUUkxfSENGUyksCisJCSh0ZW1wICYgT0hDSV9DVFJMX0JMRSkgPyAiIEJMRSIgOiAiIiwKKwkJKHRlbXAgJiBPSENJX0NUUkxfQ0xFKSA/ICIgQ0xFIiA6ICIiLAorCQkodGVtcCAmIE9IQ0lfQ1RSTF9JRSkgPyAiIElFIiA6ICIiLAorCQkodGVtcCAmIE9IQ0lfQ1RSTF9QTEUpID8gIiBQTEUiIDogIiIsCisJCXRlbXAgJiBPSENJX0NUUkxfQ0JTUgorCQkpOworCisJdGVtcCA9IG9oY2lfcmVhZGwgKGNvbnRyb2xsZXIsICZyZWdzLT5jbWRzdGF0dXMpOworCW9oY2lfZGJnX3N3IChjb250cm9sbGVyLCBuZXh0LCBzaXplLAorCQkiY21kc3RhdHVzIDB4JTA1eCBTT0M9JWQlcyVzJXMlc1xuIiwgdGVtcCwKKwkJKHRlbXAgJiBPSENJX1NPQykgPj4gMTYsCisJCSh0ZW1wICYgT0hDSV9PQ1IpID8gIiBPQ1IiIDogIiIsCisJCSh0ZW1wICYgT0hDSV9CTEYpID8gIiBCTEYiIDogIiIsCisJCSh0ZW1wICYgT0hDSV9DTEYpID8gIiBDTEYiIDogIiIsCisJCSh0ZW1wICYgT0hDSV9IQ1IpID8gIiBIQ1IiIDogIiIKKwkJKTsKKworCW9oY2lfZHVtcF9pbnRyX21hc2sgKGNvbnRyb2xsZXIsICJpbnRyc3RhdHVzIiwKKwkJCW9oY2lfcmVhZGwgKGNvbnRyb2xsZXIsICZyZWdzLT5pbnRyc3RhdHVzKSwKKwkJCW5leHQsIHNpemUpOworCW9oY2lfZHVtcF9pbnRyX21hc2sgKGNvbnRyb2xsZXIsICJpbnRyZW5hYmxlIiwKKwkJCW9oY2lfcmVhZGwgKGNvbnRyb2xsZXIsICZyZWdzLT5pbnRyZW5hYmxlKSwKKwkJCW5leHQsIHNpemUpOworCS8vIGludHJkaXNhYmxlIGFsd2F5cyBzYW1lIGFzIGludHJlbmFibGUKKworCW1heWJlX3ByaW50X2VkcyAoY29udHJvbGxlciwgImVkX3BlcmlvZGN1cnJlbnQiLAorCQkJb2hjaV9yZWFkbCAoY29udHJvbGxlciwgJnJlZ3MtPmVkX3BlcmlvZGN1cnJlbnQpLAorCQkJbmV4dCwgc2l6ZSk7CisKKwltYXliZV9wcmludF9lZHMgKGNvbnRyb2xsZXIsICJlZF9jb250cm9saGVhZCIsCisJCQlvaGNpX3JlYWRsIChjb250cm9sbGVyLCAmcmVncy0+ZWRfY29udHJvbGhlYWQpLAorCQkJbmV4dCwgc2l6ZSk7CisJbWF5YmVfcHJpbnRfZWRzIChjb250cm9sbGVyLCAiZWRfY29udHJvbGN1cnJlbnQiLAorCQkJb2hjaV9yZWFkbCAoY29udHJvbGxlciwgJnJlZ3MtPmVkX2NvbnRyb2xjdXJyZW50KSwKKwkJCW5leHQsIHNpemUpOworCisJbWF5YmVfcHJpbnRfZWRzIChjb250cm9sbGVyLCAiZWRfYnVsa2hlYWQiLAorCQkJb2hjaV9yZWFkbCAoY29udHJvbGxlciwgJnJlZ3MtPmVkX2J1bGtoZWFkKSwKKwkJCW5leHQsIHNpemUpOworCW1heWJlX3ByaW50X2VkcyAoY29udHJvbGxlciwgImVkX2J1bGtjdXJyZW50IiwKKwkJCW9oY2lfcmVhZGwgKGNvbnRyb2xsZXIsICZyZWdzLT5lZF9idWxrY3VycmVudCksCisJCQluZXh0LCBzaXplKTsKKworCW1heWJlX3ByaW50X2VkcyAoY29udHJvbGxlciwgImRvbmVoZWFkIiwKKwkJCW9oY2lfcmVhZGwgKGNvbnRyb2xsZXIsICZyZWdzLT5kb25laGVhZCksIG5leHQsIHNpemUpOworCisJLyogYnJva2VuIGZtaW50ZXJ2YWwgbWVhbnMgdHJhZmZpYyB3b24ndCBmbG93ISAqLyAKKwlvaGNpX2RiZyAoY29udHJvbGxlciwgImZtaW50ZXJ2YWwgJTA4eFxuIiwgCisJCQlvaGNpX3JlYWRsIChjb250cm9sbGVyLCAmcmVncy0+Zm1pbnRlcnZhbCkpOworfQorCisjZGVmaW5lIGRiZ19wb3J0X3N3KGhjLG51bSx2YWx1ZSxuZXh0LHNpemUpIFwKKwlvaGNpX2RiZ19zdyAoaGMsIG5leHQsIHNpemUsIFwKKwkJInJvb3RodWIucG9ydHN0YXR1cyBbJWRdICIgXAorCQkiMHglMDh4JXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzXG4iLCBcCisJCW51bSwgdGVtcCwgXAorCQkodGVtcCAmIFJIX1BTX1BSU0MpID8gIiBQUlNDIiA6ICIiLCBcCisJCSh0ZW1wICYgUkhfUFNfT0NJQykgPyAiIE9DSUMiIDogIiIsIFwKKwkJKHRlbXAgJiBSSF9QU19QU1NDKSA/ICIgUFNTQyIgOiAiIiwgXAorCQkodGVtcCAmIFJIX1BTX1BFU0MpID8gIiBQRVNDIiA6ICIiLCBcCisJCSh0ZW1wICYgUkhfUFNfQ1NDKSA/ICIgQ1NDIiA6ICIiLCBcCisgCQlcCisJCSh0ZW1wICYgUkhfUFNfTFNEQSkgPyAiIExTREEiIDogIiIsIFwKKwkJKHRlbXAgJiBSSF9QU19QUFMpID8gIiBQUFMiIDogIiIsIFwKKwkJKHRlbXAgJiBSSF9QU19QUlMpID8gIiBQUlMiIDogIiIsIFwKKwkJKHRlbXAgJiBSSF9QU19QT0NJKSA/ICIgUE9DSSIgOiAiIiwgXAorCQkodGVtcCAmIFJIX1BTX1BTUykgPyAiIFBTUyIgOiAiIiwgXAorIAkJXAorCQkodGVtcCAmIFJIX1BTX1BFUykgPyAiIFBFUyIgOiAiIiwgXAorCQkodGVtcCAmIFJIX1BTX0NDUykgPyAiIENDUyIgOiAiIiBcCisJCSk7CisKKworc3RhdGljIHZvaWQKK29oY2lfZHVtcF9yb290aHViICgKKwlzdHJ1Y3Qgb2hjaV9oY2QgKmNvbnRyb2xsZXIsCisJaW50IHZlcmJvc2UsCisJY2hhciAqKm5leHQsCisJdW5zaWduZWQgKnNpemUpCit7CisJdTMyCQkJdGVtcCwgbmRwLCBpOworCisJdGVtcCA9IHJvb3RodWJfYSAoY29udHJvbGxlcik7CisJaWYgKHRlbXAgPT0gfih1MzIpMCkKKwkJcmV0dXJuOworCW5kcCA9ICh0ZW1wICYgUkhfQV9ORFApOworCisJaWYgKHZlcmJvc2UpIHsKKwkJb2hjaV9kYmdfc3cgKGNvbnRyb2xsZXIsIG5leHQsIHNpemUsCisJCQkicm9vdGh1Yi5hICUwOHggUE9UUEdUPSVkJXMlcyVzJXMlcyBORFA9JWRcbiIsIHRlbXAsCisJCQkoKHRlbXAgJiBSSF9BX1BPVFBHVCkgPj4gMjQpICYgMHhmZiwKKwkJCSh0ZW1wICYgUkhfQV9OT0NQKSA/ICIgTk9DUCIgOiAiIiwKKwkJCSh0ZW1wICYgUkhfQV9PQ1BNKSA/ICIgT0NQTSIgOiAiIiwKKwkJCSh0ZW1wICYgUkhfQV9EVCkgPyAiIERUIiA6ICIiLAorCQkJKHRlbXAgJiBSSF9BX05QUykgPyAiIE5QUyIgOiAiIiwKKwkJCSh0ZW1wICYgUkhfQV9QU00pID8gIiBQU00iIDogIiIsCisJCQluZHAKKwkJCSk7CisJCXRlbXAgPSByb290aHViX2IgKGNvbnRyb2xsZXIpOworCQlvaGNpX2RiZ19zdyAoY29udHJvbGxlciwgbmV4dCwgc2l6ZSwKKwkJCSJyb290aHViLmIgJTA4eCBQUENNPSUwNHggRFI9JTA0eFxuIiwKKwkJCXRlbXAsCisJCQkodGVtcCAmIFJIX0JfUFBDTSkgPj4gMTYsCisJCQkodGVtcCAmIFJIX0JfRFIpCisJCQkpOworCQl0ZW1wID0gcm9vdGh1Yl9zdGF0dXMgKGNvbnRyb2xsZXIpOworCQlvaGNpX2RiZ19zdyAoY29udHJvbGxlciwgbmV4dCwgc2l6ZSwKKwkJCSJyb290aHViLnN0YXR1cyAlMDh4JXMlcyVzJXMlcyVzXG4iLAorCQkJdGVtcCwKKwkJCSh0ZW1wICYgUkhfSFNfQ1JXRSkgPyAiIENSV0UiIDogIiIsCisJCQkodGVtcCAmIFJIX0hTX09DSUMpID8gIiBPQ0lDIiA6ICIiLAorCQkJKHRlbXAgJiBSSF9IU19MUFNDKSA/ICIgTFBTQyIgOiAiIiwKKwkJCSh0ZW1wICYgUkhfSFNfRFJXRSkgPyAiIERSV0UiIDogIiIsCisJCQkodGVtcCAmIFJIX0hTX09DSSkgPyAiIE9DSSIgOiAiIiwKKwkJCSh0ZW1wICYgUkhfSFNfTFBTKSA/ICIgTFBTIiA6ICIiCisJCQkpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBuZHA7IGkrKykgeworCQl0ZW1wID0gcm9vdGh1Yl9wb3J0c3RhdHVzIChjb250cm9sbGVyLCBpKTsKKwkJZGJnX3BvcnRfc3cgKGNvbnRyb2xsZXIsIGksIHRlbXAsIG5leHQsIHNpemUpOworCX0KK30KKworc3RhdGljIHZvaWQgb2hjaV9kdW1wIChzdHJ1Y3Qgb2hjaV9oY2QgKmNvbnRyb2xsZXIsIGludCB2ZXJib3NlKQoreworCW9oY2lfZGJnIChjb250cm9sbGVyLCAiT0hDSSBjb250cm9sbGVyIHN0YXRlXG4iKTsKKworCS8vIGR1bXBzIHNvbWUgb2YgdGhlIHN0YXRlIHdlIGtub3cgYWJvdXQKKwlvaGNpX2R1bXBfc3RhdHVzIChjb250cm9sbGVyLCBOVUxMLCBOVUxMKTsKKwlpZiAoY29udHJvbGxlci0+aGNjYSkKKwkJb2hjaV9kYmcgKGNvbnRyb2xsZXIsCisJCQkiaGNjYSBmcmFtZSAjJTA0eFxuIiwgb2hjaV9mcmFtZV9ubyhjb250cm9sbGVyKSk7CisJb2hjaV9kdW1wX3Jvb3RodWIgKGNvbnRyb2xsZXIsIDEsIE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgY29uc3QgY2hhciBkYXRhMCBbXSA9ICJEQVRBMCI7CitzdGF0aWMgY29uc3QgY2hhciBkYXRhMSBbXSA9ICJEQVRBMSI7CisKK3N0YXRpYyB2b2lkIG9oY2lfZHVtcF90ZCAoY29uc3Qgc3RydWN0IG9oY2lfaGNkICpvaGNpLCBjb25zdCBjaGFyICpsYWJlbCwKKwkJY29uc3Qgc3RydWN0IHRkICp0ZCkKK3sKKwl1MzIJdG1wID0gaGMzMl90b19jcHVwIChvaGNpLCAmdGQtPmh3SU5GTyk7CisKKwlvaGNpX2RiZyAob2hjaSwgIiVzIHRkICVwJXM7IHVyYiAlcCBpbmRleCAlZDsgaHcgbmV4dCB0ZCAlMDh4XG4iLAorCQlsYWJlbCwgdGQsCisJCSh0bXAgJiBURF9ET05FKSA/ICIgKERPTkUpIiA6ICIiLAorCQl0ZC0+dXJiLCB0ZC0+aW5kZXgsCisJCWhjMzJfdG9fY3B1cCAob2hjaSwgJnRkLT5od05leHRURCkpOworCWlmICgodG1wICYgVERfSVNPKSA9PSAwKSB7CisJCWNvbnN0IGNoYXIJKnRvZ2dsZSwgKnBpZDsKKwkJdTMyCWNicCwgYmU7CisKKwkJc3dpdGNoICh0bXAgJiBURF9UKSB7CisJCWNhc2UgVERfVF9EQVRBMDogdG9nZ2xlID0gZGF0YTA7IGJyZWFrOworCQljYXNlIFREX1RfREFUQTE6IHRvZ2dsZSA9IGRhdGExOyBicmVhazsKKwkJY2FzZSBURF9UX1RPR0dMRTogdG9nZ2xlID0gIihDQVJSWSkiOyBicmVhazsKKwkJZGVmYXVsdDogdG9nZ2xlID0gIig/KSI7IGJyZWFrOworCQl9CisJCXN3aXRjaCAodG1wICYgVERfRFApIHsKKwkJY2FzZSBURF9EUF9TRVRVUDogcGlkID0gIlNFVFVQIjsgYnJlYWs7CisJCWNhc2UgVERfRFBfSU46IHBpZCA9ICJJTiI7IGJyZWFrOworCQljYXNlIFREX0RQX09VVDogcGlkID0gIk9VVCI7IGJyZWFrOworCQlkZWZhdWx0OiBwaWQgPSAiKGJhZCBwaWQpIjsgYnJlYWs7CisJCX0KKwkJb2hjaV9kYmcgKG9oY2ksICIgICAgIGluZm8gJTA4eCBDQz0leCAlcyBEST0lZCAlcyAlc1xuIiwgdG1wLAorCQkJVERfQ0NfR0VUKHRtcCksIC8qIEVDLCAqLyB0b2dnbGUsCisJCQkodG1wICYgVERfREkpID4+IDIxLCBwaWQsCisJCQkodG1wICYgVERfUikgPyAiUiIgOiAiIik7CisJCWNicCA9IGhjMzJfdG9fY3B1cCAob2hjaSwgJnRkLT5od0NCUCk7CisJCWJlID0gaGMzMl90b19jcHVwIChvaGNpLCAmdGQtPmh3QkUpOworCQlvaGNpX2RiZyAob2hjaSwgIiAgICAgY2JwICUwOHggYmUgJTA4eCAobGVuICVkKVxuIiwgY2JwLCBiZSwKKwkJCWNicCA/IChiZSArIDEgLSBjYnApIDogMCk7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQJaTsKKwkJb2hjaV9kYmcgKG9oY2ksICIgIGluZm8gJTA4eCBDQz0leCBGQz0lZCBEST0lZCBTRj0lMDR4XG4iLCB0bXAsCisJCQlURF9DQ19HRVQodG1wKSwKKwkJCSh0bXAgPj4gMjQpICYgMHgwNywKKwkJCSh0bXAgJiBURF9ESSkgPj4gMjEsCisJCQl0bXAgJiAweDAwMDBmZmZmKTsKKwkJb2hjaV9kYmcgKG9oY2ksICIgIGJwMCAlMDh4IGJlICUwOHhcbiIsCisJCQloYzMyX3RvX2NwdXAgKG9oY2ksICZ0ZC0+aHdDQlApICYgfjB4MGZmZiwKKwkJCWhjMzJfdG9fY3B1cCAob2hjaSwgJnRkLT5od0JFKSk7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhQU1c7IGkrKykgeworCQkJdTE2CXBzdyA9IG9oY2lfaHdQU1cgKG9oY2ksIHRkLCBpKTsKKwkJCWludAljYyA9IChwc3cgPj4gMTIpICYgMHgwZjsKKwkJCW9oY2lfZGJnIChvaGNpLCAiICAgIHBzdyBbJWRdID0gJTJ4LCBDQz0leCAlcz0lZFxuIiwgaSwKKwkJCQlwc3csIGNjLAorCQkJCShjYyA+PSAweDBlKSA/ICJPRkZTRVQiIDogIlNJWkUiLAorCQkJCXBzdyAmIDB4MGZmZik7CisJCX0KKwl9Cit9CisKKy8qIGNhbGxlciBNVVNUIG93biBoY2Qgc3BpbmxvY2sgaWYgdmVyYm9zZSBpcyBzZXQhICovCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQorb2hjaV9kdW1wX2VkIChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGNvbnN0IGNoYXIgKmxhYmVsLAorCQljb25zdCBzdHJ1Y3QgZWQgKmVkLCBpbnQgdmVyYm9zZSkKK3sKKwl1MzIJdG1wID0gaGMzMl90b19jcHUgKG9oY2ksIGVkLT5od0lORk8pOworCWNoYXIJKnR5cGUgPSAiIjsKKworCW9oY2lfZGJnIChvaGNpLCAiJXMsIGVkICVwIHN0YXRlIDB4JXggdHlwZSAlczsgbmV4dCBlZCAlMDh4XG4iLAorCQlsYWJlbCwKKwkJZWQsIGVkLT5zdGF0ZSwgZWRzdHJpbmcgKGVkLT50eXBlKSwKKwkJaGMzMl90b19jcHVwIChvaGNpLCAmZWQtPmh3TmV4dEVEKSk7CisJc3dpdGNoICh0bXAgJiAoRURfSU58RURfT1VUKSkgeworCWNhc2UgRURfT1VUOiB0eXBlID0gIi1PVVQiOyBicmVhazsKKwljYXNlIEVEX0lOOiB0eXBlID0gIi1JTiI7IGJyZWFrOworCS8qIGVsc2UgZnJvbSBURHMgLi4uIGNvbnRyb2wgKi8KKwl9CisJb2hjaV9kYmcgKG9oY2ksCisJCSIgIGluZm8gJTA4eCBNQVg9JWQlcyVzJXMlcyBFUD0lZCVzIERFVj0lZFxuIiwgdG1wLAorCQkweDAzZmYgJiAodG1wID4+IDE2KSwKKwkJKHRtcCAmIEVEX0RFUVVFVUUpID8gIiBEUSIgOiAiIiwKKwkJKHRtcCAmIEVEX0lTTykgPyAiIElTTyIgOiAiIiwKKwkJKHRtcCAmIEVEX1NLSVApID8gIiBTS0lQIiA6ICIiLAorCQkodG1wICYgRURfTE9XU1BFRUQpID8gIiBMT1ciIDogIiIsCisJCTB4MDAwZiAmICh0bXAgPj4gNyksCisJCXR5cGUsCisJCTB4MDA3ZiAmIHRtcCk7CisJdG1wID0gaGMzMl90b19jcHVwIChvaGNpLCAmZWQtPmh3SGVhZFApOworCW9oY2lfZGJnIChvaGNpLCAiICB0ZHM6IGhlYWQgJTA4eCAlcyVzIHRhaWwgJTA4eCVzXG4iLAorCQl0bXAsCisJCSh0bXAgJiBFRF9DKSA/IGRhdGExIDogZGF0YTAsCisJCSh0bXAgJiBFRF9IKSA/ICIgSEFMVCIgOiAiIiwKKwkJaGMzMl90b19jcHVwIChvaGNpLCAmZWQtPmh3VGFpbFApLAorCQl2ZXJib3NlID8gIiIgOiAiIChub3QgbGlzdGluZykiKTsKKwlpZiAodmVyYm9zZSkgeworCQlzdHJ1Y3QgbGlzdF9oZWFkCSp0bXA7CisKKwkJLyogdXNlIGVkLT50ZF9saXN0IGJlY2F1c2UgSEMgY29uY3VycmVudGx5IG1vZGlmaWVzCisJCSAqIGh3TmV4dFREIGFzIGl0IGFjY3VtdWxhdGVzIGVkX2RvbmVsaXN0LgorCQkgKi8KKwkJbGlzdF9mb3JfZWFjaCAodG1wLCAmZWQtPnRkX2xpc3QpIHsKKwkJCXN0cnVjdCB0ZAkJKnRkOworCQkJdGQgPSBsaXN0X2VudHJ5ICh0bXAsIHN0cnVjdCB0ZCwgdGRfbGlzdCk7CisJCQlvaGNpX2R1bXBfdGQgKG9oY2ksICIgIC0+IiwgdGQpOworCQl9CisJfQorfQorCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9oY2lfZHVtcCAoc3RydWN0IG9oY2lfaGNkICpjb250cm9sbGVyLCBpbnQgdmVyYm9zZSkge30KKworI3VuZGVmIE9IQ0lfVkVSQk9TRV9ERUJVRworCisjZW5kaWYgLyogREVCVUcgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIFNUVUJfREVCVUdfRklMRVMKKworc3RhdGljIGlubGluZSB2b2lkIGNyZWF0ZV9kZWJ1Z19maWxlcyAoc3RydWN0IG9oY2lfaGNkICpidXMpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9kZWJ1Z19maWxlcyAoc3RydWN0IG9oY2lfaGNkICpidXMpIHsgfQorCisjZWxzZQorCitzdGF0aWMgc3NpemVfdAorc2hvd19saXN0IChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBzdHJ1Y3QgZWQgKmVkKQoreworCXVuc2lnbmVkCQl0ZW1wLCBzaXplID0gY291bnQ7CisKKwlpZiAoIWVkKQorCQlyZXR1cm4gMDsKKworCS8qIHByaW50IGZpcnN0IC0tPiBsYXN0ICovCisJd2hpbGUgKGVkLT5lZF9wcmV2KQorCQllZCA9IGVkLT5lZF9wcmV2OworCisJLyogZHVtcCBhIHNuYXBzaG90IG9mIHRoZSBidWxrIG9yIGNvbnRyb2wgc2NoZWR1bGUgKi8KKwl3aGlsZSAoZWQpIHsKKwkJdTMyCQlpbmZvID0gaGMzMl90b19jcHUgKG9oY2ksIGVkLT5od0lORk8pOworCQl1MzIJCWhlYWRwID0gaGMzMl90b19jcHUgKG9oY2ksIGVkLT5od0hlYWRQKTsKKwkJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CisJCXN0cnVjdCB0ZAkqdGQ7CisKKwkJdGVtcCA9IHNjbnByaW50ZiAoYnVmLCBzaXplLAorCQkJImVkLyVwICVjcyBkZXYlZCBlcCVkJXMgbWF4ICVkICUwOHglcyVzICVzIiwKKwkJCWVkLAorCQkJKGluZm8gJiBFRF9MT1dTUEVFRCkgPyAnbCcgOiAnZicsCisJCQlpbmZvICYgMHg3ZiwKKwkJCShpbmZvID4+IDcpICYgMHhmLAorCQkJKGluZm8gJiBFRF9JTikgPyAiaW4iIDogIm91dCIsCisJCQkweDAzZmYgJiAoaW5mbyA+PiAxNiksCisJCQlpbmZvLAorCQkJKGluZm8gJiBFRF9TS0lQKSA/ICIgcyIgOiAiIiwKKwkJCShoZWFkcCAmIEVEX0gpID8gIiBIIiA6ICIiLAorCQkJKGhlYWRwICYgRURfQykgPyBkYXRhMSA6IGRhdGEwKTsKKwkJc2l6ZSAtPSB0ZW1wOworCQlidWYgKz0gdGVtcDsKKworCQlsaXN0X2Zvcl9lYWNoIChlbnRyeSwgJmVkLT50ZF9saXN0KSB7CisJCQl1MzIJCWNicCwgYmU7CisKKwkJCXRkID0gbGlzdF9lbnRyeSAoZW50cnksIHN0cnVjdCB0ZCwgdGRfbGlzdCk7CisJCQlpbmZvID0gaGMzMl90b19jcHVwIChvaGNpLCAmdGQtPmh3SU5GTyk7CisJCQljYnAgPSBoYzMyX3RvX2NwdXAgKG9oY2ksICZ0ZC0+aHdDQlApOworCQkJYmUgPSBoYzMyX3RvX2NwdXAgKG9oY2ksICZ0ZC0+aHdCRSk7CisJCQl0ZW1wID0gc2NucHJpbnRmIChidWYsIHNpemUsCisJCQkJCSJcblx0dGQgJXAgJXMgJWQgY2M9JXggdXJiICVwICglMDh4KSIsCisJCQkJCXRkLAorCQkJCQkoeyBjaGFyICpwaWQ7CisJCQkJCXN3aXRjaCAoaW5mbyAmIFREX0RQKSB7CisJCQkJCWNhc2UgVERfRFBfU0VUVVA6IHBpZCA9ICJzZXR1cCI7IGJyZWFrOworCQkJCQljYXNlIFREX0RQX0lOOiBwaWQgPSAiaW4iOyBicmVhazsKKwkJCQkJY2FzZSBURF9EUF9PVVQ6IHBpZCA9ICJvdXQiOyBicmVhazsKKwkJCQkJZGVmYXVsdDogcGlkID0gIig/KSI7IGJyZWFrOworCQkJCQkgfSBwaWQ7fSksCisJCQkJCWNicCA/IChiZSArIDEgLSBjYnApIDogMCwKKwkJCQkJVERfQ0NfR0VUIChpbmZvKSwgdGQtPnVyYiwgaW5mbyk7CisJCQlzaXplIC09IHRlbXA7CisJCQlidWYgKz0gdGVtcDsKKwkJfQorCisJCXRlbXAgPSBzY25wcmludGYgKGJ1Ziwgc2l6ZSwgIlxuIik7CisJCXNpemUgLT0gdGVtcDsKKwkJYnVmICs9IHRlbXA7CisKKwkJZWQgPSBlZC0+ZWRfbmV4dDsKKwl9CisJcmV0dXJuIGNvdW50IC0gc2l6ZTsKK30KKworc3RhdGljIHNzaXplX3QKK3Nob3dfYXN5bmMgKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfYnVzCQkqYnVzOworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2k7CisJc2l6ZV90CQkJdGVtcDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKworCWJ1cyA9IHRvX3VzYl9idXMoY2xhc3NfZGV2KTsKKwloY2QgPSBidXMtPmhjcHJpdjsKKwlvaGNpID0gaGNkX3RvX29oY2koaGNkKTsKKworCS8qIGRpc3BsYXkgY29udHJvbCBhbmQgYnVsayBsaXN0cyB0b2dldGhlciwgZm9yIHNpbXBsaWNpdHkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKwl0ZW1wID0gc2hvd19saXN0IChvaGNpLCBidWYsIFBBR0VfU0laRSwgb2hjaS0+ZWRfY29udHJvbHRhaWwpOworCXRlbXAgKz0gc2hvd19saXN0IChvaGNpLCBidWYgKyB0ZW1wLCBQQUdFX1NJWkUgLSB0ZW1wLCBvaGNpLT5lZF9idWxrdGFpbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiB0ZW1wOworfQorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSIChhc3luYywgU19JUlVHTywgc2hvd19hc3luYywgTlVMTCk7CisKKworI2RlZmluZSBEQkdfU0NIRURfTElNSVQgNjQKKworc3RhdGljIHNzaXplX3QKK3Nob3dfcGVyaW9kaWMgKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfYnVzCQkqYnVzOworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2k7CisJc3RydWN0IGVkCQkqKnNlZW4sICplZDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwl1bnNpZ25lZAkJdGVtcCwgc2l6ZSwgc2Vlbl9jb3VudDsKKwljaGFyCQkJKm5leHQ7CisJdW5zaWduZWQJCWk7CisKKwlpZiAoIShzZWVuID0ga21hbGxvYyAoREJHX1NDSEVEX0xJTUlUICogc2l6ZW9mICpzZWVuLCBTTEFCX0FUT01JQykpKQorCQlyZXR1cm4gMDsKKwlzZWVuX2NvdW50ID0gMDsKKworCWJ1cyA9IHRvX3VzYl9idXMoY2xhc3NfZGV2KTsKKwloY2QgPSBidXMtPmhjcHJpdjsKKwlvaGNpID0gaGNkX3RvX29oY2koaGNkKTsKKwluZXh0ID0gYnVmOworCXNpemUgPSBQQUdFX1NJWkU7CisKKwl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAic2l6ZSA9ICVkXG4iLCBOVU1fSU5UUyk7CisJc2l6ZSAtPSB0ZW1wOworCW5leHQgKz0gdGVtcDsKKworCS8qIGR1bXAgYSBzbmFwc2hvdCBvZiB0aGUgcGVyaW9kaWMgc2NoZWR1bGUgKGFuZCBsb2FkKSAqLworCXNwaW5fbG9ja19pcnFzYXZlICgmb2hjaS0+bG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBOVU1fSU5UUzsgaSsrKSB7CisJCWlmICghKGVkID0gb2hjaS0+cGVyaW9kaWMgW2ldKSkKKwkJCWNvbnRpbnVlOworCisJCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsICIlMmQgWyUzZF06IiwgaSwgb2hjaS0+bG9hZCBbaV0pOworCQlzaXplIC09IHRlbXA7CisJCW5leHQgKz0gdGVtcDsKKworCQlkbyB7CisJCQl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAiIGVkJWQvJXAiLAorCQkJCWVkLT5pbnRlcnZhbCwgZWQpOworCQkJc2l6ZSAtPSB0ZW1wOworCQkJbmV4dCArPSB0ZW1wOworCQkJZm9yICh0ZW1wID0gMDsgdGVtcCA8IHNlZW5fY291bnQ7IHRlbXArKykgeworCQkJCWlmIChzZWVuIFt0ZW1wXSA9PSBlZCkKKwkJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIHNob3cgbW9yZSBpbmZvIHRoZSBmaXJzdCB0aW1lIGFyb3VuZCAqLworCQkJaWYgKHRlbXAgPT0gc2Vlbl9jb3VudCkgeworCQkJCXUzMglpbmZvID0gaGMzMl90b19jcHUgKG9oY2ksIGVkLT5od0lORk8pOworCQkJCXN0cnVjdCBsaXN0X2hlYWQJKmVudHJ5OworCQkJCXVuc2lnbmVkCQlxbGVuID0gMDsKKworCQkJCS8qIHFsZW4gbWVhc3VyZWQgaGVyZSBpbiBURHMsIG5vdCB1cmJzICovCisJCQkJbGlzdF9mb3JfZWFjaCAoZW50cnksICZlZC0+dGRfbGlzdCkKKwkJCQkJcWxlbisrOworCisJCQkJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJCQkJIiAoJWNzIGRldiVkIGVwJWQlcy0lcyBxbGVuICV1IgorCQkJCQkiIG1heCAlZCAlMDh4JXMlcykiLAorCQkJCQkoaW5mbyAmIEVEX0xPV1NQRUVEKSA/ICdsJyA6ICdmJywKKwkJCQkJaW5mbyAmIDB4N2YsCisJCQkJCShpbmZvID4+IDcpICYgMHhmLAorCQkJCQkoaW5mbyAmIEVEX0lOKSA/ICJpbiIgOiAib3V0IiwKKwkJCQkJKGluZm8gJiBFRF9JU08pID8gImlzbyIgOiAiaW50IiwKKwkJCQkJcWxlbiwKKwkJCQkJMHgwM2ZmICYgKGluZm8gPj4gMTYpLAorCQkJCQlpbmZvLAorCQkJCQkoaW5mbyAmIEVEX1NLSVApID8gIiBLIiA6ICIiLAorCQkJCQkoZWQtPmh3SGVhZFAgJgorCQkJCQkJY3B1X3RvX2hjMzIob2hjaSwgRURfSCkpID8KKyAJCQkJCQkJIiBIIiA6ICIiKTsKKwkJCQlzaXplIC09IHRlbXA7CisJCQkJbmV4dCArPSB0ZW1wOworCisJCQkJaWYgKHNlZW5fY291bnQgPCBEQkdfU0NIRURfTElNSVQpCisJCQkJCXNlZW4gW3NlZW5fY291bnQrK10gPSBlZDsKKworCQkJCWVkID0gZWQtPmVkX25leHQ7CisKKwkJCX0gZWxzZSB7CisJCQkJLyogd2UndmUgc2VlbiBpdCBhbmQgd2hhdCdzIGFmdGVyICovCisJCQkJdGVtcCA9IDA7CisJCQkJZWQgPSBOVUxMOworCQkJfQorCisJCX0gd2hpbGUgKGVkKTsKKworCQl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAiXG4iKTsKKwkJc2l6ZSAtPSB0ZW1wOworCQluZXh0ICs9IHRlbXA7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CisJa2ZyZWUgKHNlZW4pOworCisJcmV0dXJuIFBBR0VfU0laRSAtIHNpemU7Cit9CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIgKHBlcmlvZGljLCBTX0lSVUdPLCBzaG93X3BlcmlvZGljLCBOVUxMKTsKKworCisjdW5kZWYgREJHX1NDSEVEX0xJTUlUCisKK3N0YXRpYyBzc2l6ZV90CitzaG93X3JlZ2lzdGVycyAoc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9idXMJCSpidXM7CisJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CisJc3RydWN0IG9oY2lfaGNkCQkqb2hjaTsKKwlzdHJ1Y3Qgb2hjaV9yZWdzIF9faW9tZW0gKnJlZ3M7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJdW5zaWduZWQJCXRlbXAsIHNpemU7CisJY2hhcgkJCSpuZXh0OworCXUzMgkJCXJkYXRhOworCisJYnVzID0gdG9fdXNiX2J1cyhjbGFzc19kZXYpOworCWhjZCA9IGJ1cy0+aGNwcml2OworCW9oY2kgPSBoY2RfdG9fb2hjaShoY2QpOworCXJlZ3MgPSBvaGNpLT5yZWdzOworCW5leHQgPSBidWY7CisJc2l6ZSA9IFBBR0VfU0laRTsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmb2hjaS0+bG9jaywgZmxhZ3MpOworCisJLyogZHVtcCBkcml2ZXIgaW5mbywgdGhlbiByZWdpc3RlcnMgaW4gc3BlYyBvcmRlciAqLworCisJb2hjaV9kYmdfc3cgKG9oY2ksICZuZXh0LCAmc2l6ZSwKKwkJImJ1cyAlcywgZGV2aWNlICVzXG4iCisJCSIlc1xuIgorCQkiJXMgdmVyc2lvbiAiIERSSVZFUl9WRVJTSU9OICJcbiIsCisJCWhjZC0+c2VsZi5jb250cm9sbGVyLT5idXMtPm5hbWUsCisJCWhjZC0+c2VsZi5jb250cm9sbGVyLT5idXNfaWQsCisJCWhjZC0+cHJvZHVjdF9kZXNjLAorCQloY2RfbmFtZSk7CisKKwlpZiAoYnVzLT5jb250cm9sbGVyLT5wb3dlci5wb3dlcl9zdGF0ZSkgeworCQlzaXplIC09IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwKKwkJCSJTVVNQRU5ERUQgKG5vIHJlZ2lzdGVyIGFjY2VzcylcbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJb2hjaV9kdW1wX3N0YXR1cyhvaGNpLCAmbmV4dCwgJnNpemUpOworCisJLyogaGNjYSAqLworCWlmIChvaGNpLT5oY2NhKQorCQlvaGNpX2RiZ19zdyAob2hjaSwgJm5leHQsICZzaXplLAorCQkJImhjY2EgZnJhbWUgMHglMDR4XG4iLCBvaGNpX2ZyYW1lX25vKG9oY2kpKTsKKworCS8qIG90aGVyIHJlZ2lzdGVycyBtb3N0bHkgYWZmZWN0IGZyYW1lIHRpbWluZ3MgKi8KKwlyZGF0YSA9IG9oY2lfcmVhZGwgKG9oY2ksICZyZWdzLT5mbWludGVydmFsKTsKKwl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLAorCQkJImZtaW50dmwgMHglMDh4ICVzRlNNUFM9MHglMDR4IEZJPTB4JTA0eFxuIiwKKwkJCXJkYXRhLCAocmRhdGEgPj4gMzEpID8gIkZJVCAiIDogIiIsCisJCQkocmRhdGEgPj4gMTYpICYgMHhlZmZmLCByZGF0YSAmIDB4ZmZmZik7CisJc2l6ZSAtPSB0ZW1wOworCW5leHQgKz0gdGVtcDsKKworCXJkYXRhID0gb2hjaV9yZWFkbCAob2hjaSwgJnJlZ3MtPmZtcmVtYWluaW5nKTsKKwl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAiZm1yZW1haW5pbmcgMHglMDh4ICVzRlI9MHglMDR4XG4iLAorCQkJcmRhdGEsIChyZGF0YSA+PiAzMSkgPyAiRlJUICIgOiAiIiwKKwkJCXJkYXRhICYgMHgzZmZmKTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworCisJcmRhdGEgPSBvaGNpX3JlYWRsIChvaGNpLCAmcmVncy0+cGVyaW9kaWNzdGFydCk7CisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgInBlcmlvZGljc3RhcnQgMHglMDR4XG4iLAorCQkJcmRhdGEgJiAweDNmZmYpOworCXNpemUgLT0gdGVtcDsKKwluZXh0ICs9IHRlbXA7CisKKwlyZGF0YSA9IG9oY2lfcmVhZGwgKG9oY2ksICZyZWdzLT5sc3RocmVzaCk7CisJdGVtcCA9IHNjbnByaW50ZiAobmV4dCwgc2l6ZSwgImxzdGhyZXNoIDB4JTA0eFxuIiwKKwkJCXJkYXRhICYgMHgzZmZmKTsKKwlzaXplIC09IHRlbXA7CisJbmV4dCArPSB0ZW1wOworCisJLyogcm9vdGh1YiAqLworCW9oY2lfZHVtcF9yb290aHViIChvaGNpLCAxLCAmbmV4dCwgJnNpemUpOworCitkb25lOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIFBBR0VfU0laRSAtIHNpemU7Cit9CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIgKHJlZ2lzdGVycywgU19JUlVHTywgc2hvd19yZWdpc3RlcnMsIE5VTEwpOworCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcmVhdGVfZGVidWdfZmlsZXMgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSkKK3sKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGRldiA9ICZvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5jbGFzc19kZXY7CisKKwljbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoY2xkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9hc3luYyk7CisJY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKGNsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcGVyaW9kaWMpOworCWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShjbGRldiwgJmNsYXNzX2RldmljZV9hdHRyX3JlZ2lzdGVycyk7CisJb2hjaV9kYmcgKG9oY2ksICJjcmVhdGVkIGRlYnVnIGZpbGVzXG4iKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9kZWJ1Z19maWxlcyAoc3RydWN0IG9oY2lfaGNkICpvaGNpKQoreworCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsZGV2ID0gJm9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmNsYXNzX2RldjsKKworCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZShjbGRldiwgJmNsYXNzX2RldmljZV9hdHRyX2FzeW5jKTsKKwljbGFzc19kZXZpY2VfcmVtb3ZlX2ZpbGUoY2xkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9wZXJpb2RpYyk7CisJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKGNsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcmVnaXN0ZXJzKTsKK30KKworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTI3ZjEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCkBAIC0wLDAgKzEsOTI1IEBACisvKgorICogT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCisgKgorICogKEMpIENvcHlyaWdodCAxOTk5IFJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0IERhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogCisgKiBbIEluaXRpYWxpc2F0aW9uIGlzIGJhc2VkIG9uIExpbnVzJyAgXQorICogWyB1aGNpIGNvZGUgYW5kIGdyZWdzIG9oY2kgZnJhZ21lbnRzIF0KKyAqIFsgKEMpIENvcHlyaWdodCAxOTk5IExpbnVzIFRvcnZhbGRzICBdCisgKiBbIChDKSBDb3B5cmlnaHQgMTk5OSBHcmVnb3J5IFAuIFNtaXRoXQorICogCisgKiAKKyAqIE9IQ0kgaXMgdGhlIG1haW4gIm5vbi1JbnRlbC9WSUEiIHN0YW5kYXJkIGZvciBVU0IgMS4xIGhvc3QgY29udHJvbGxlcgorICogaW50ZXJmYWNlcyAodGhvdWdoIHNvbWUgbm9uLXg4NiBJbnRlbCBjaGlwcyB1c2UgaXQpLiAgSXQgc3VwcG9ydHMKKyAqIHNtYXJ0ZXIgaGFyZHdhcmUgdGhhbiBVSENJLiAgQSBkb3dubG9hZCBsaW5rIGZvciB0aGUgc3BlYyBhdmFpbGFibGUKKyAqIHRocm91Z2ggdGhlIGh0dHA6Ly93d3cudXNiLm9yZyB3ZWJzaXRlLgorICoKKyAqIEhpc3Rvcnk6CisgKiAKKyAqIDIwMDQvMDMvMjQgTEg3QTQwNCBzdXBwb3J0IChEdXJnZXNoIFBhdHRhbWF0dGEgJiBNYXJjIFNpbmdlcikKKyAqIDIwMDQvMDIvMDQgdXNlIGdlbmVyaWMgZG1hXyogZnVuY3Rpb25zIGluc3RlYWQgb2YgcGNpXyogKGRzYXhlbmFAcGxleGl0eS5uZXQpCisgKiAyMDAzLzAyLzI0IHNob3cgcmVnaXN0ZXJzIGluIHN5c2ZzIChLZXZpbiBCcm9zaXVzKQorICoKKyAqIDIwMDIvMDkvMDMgZ2V0IHJpZCBvZiBlZCBoYXNodGFibGVzLCByZXdvcmsgcGVyaW9kaWMgc2NoZWR1bGluZyBhbmQKKyAqIAliYW5kd2lkdGggYWNjb3VudGluZzsgaWYgZGVidWdnaW5nLCBzaG93IHNjaGVkdWxlcyBpbiBkcml2ZXJmcworICogMjAwMi8wNy8xOSBmaXhlcyB0byBtYW5hZ2VtZW50IG9mIEVEIGFuZCBzY2hlZHVsZSBzdGF0ZS4KKyAqIDIwMDIvMDYvMDkgU0EtMTExMSBzdXBwb3J0IChDaHJpc3RvcGhlciBIb292ZXIpCisgKiAyMDAyLzA2LzAxIHJlbWVtYmVyIGZyYW1lIHdoZW4gSEMgd29uJ3Qgc2VlIEVEcyBhbnkgbW9yZTsgdXNlIHRoYXQgaW5mbworICoJdG8gZml4IHVyYiB1bmxpbmsgcmFjZXMgY2F1c2VkIGJ5IGludGVycnVwdCBsYXRlbmN5IGFzc3VtcHRpb25zOworICoJbWlub3IgRUQgZmllbGQgYW5kIGZ1bmN0aW9uIG5hbWluZyB1cGRhdGVzCisgKiAyMDAyLzAxLzE4IHBhY2thZ2UgYXMgYSBwYXRjaCBmb3IgMi41LjM7IHRoaXMgc2hvdWxkIG1hdGNoIHRoZQorICoJMi40LjE3IGtlcm5lbCBtb2R1bG8gc29tZSBidWdzIGJlaW5nIGZpeGVkLgorICoKKyAqIDIwMDEvMTAvMTggbWVyZ2UgcG1hYyBjbGVhbnVwIChCZW5qYW1pbiBIZXJyZW5zY2htaWR0KSBhbmQgYnVnZml4ZXMKKyAqCWZyb20gcG9zdC0yLjQuNSBwYXRjaGVzLgorICogMjAwMS8wOS8yMCBVUkJfWkVST19QQUNLRVQgc3VwcG9ydDsgaGNjYV9kbWEgcG9ydGFiaWxpdHksIE9QVGkgd2FybmluZworICogMjAwMS8wOS8wNyBtYXRjaCBQQ0kgUE0gY2hhbmdlcywgZXJybm9zIGZyb20gTGludXMnIHRyZWUKKyAqIDIwMDEvMDUvMDUgZm9yayAyLjQuNSB2ZXJzaW9uIGludG8gImhjZCIgZnJhbWV3b3JrLCBjbGVhbnVwLCBzaW1wbGlmeTsKKyAqCXBib29rIHBjaSBxdWlya3MgZ29uZSAocGxlYXNlIGZpeCBwYm9vayBwY2kgc3chKSAoZGIpCisgKgorICogMjAwMS8wNC8wOCBJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkIChnYikKKyAqIDIwMDEvMDMvMjQgdGQvZWQgaGFzaGluZyB0byByZW1vdmUgYnVzX3RvX3ZpcnQgKFN0ZXZlIExvbmdlcmJlYW0pOworIAlwY2lfbWFwX3NpbmdsZSAoZGIpCisgKiAyMDAxLzAzLzIxIHRkIGFuZCBkZXYvZWQgYWxsb2NhdGlvbiB1c2VzIG5ldyBwY2lfcG9vbCBBUEkgKGRiKQorICogMjAwMS8wMy8wNyBoY2NhIGFsbG9jYXRpb24gdXNlcyBwY2lfYWxsb2NfY29uc2lzdGVudCAoU3RldmUgTG9uZ2VyYmVhbSkKKyAqCisgKiAyMDAwLzA5LzI2IGZpeGVkIHJhY2VzIGluIHJlbW92aW5nIHRoZSBwcml2YXRlIHBvcnRpb24gb2YgdGhlIHVyYgorICogMjAwMC8wOS8wNyBkaXNhYmxlIGJ1bGsgYW5kIGNvbnRyb2wgbGlzdHMgd2hlbiB1bmxpbmtpbmcgdGhlIGxhc3QKKyAqCWVuZHBvaW50IGRlc2NyaXB0b3IgaW4gb3JkZXIgdG8gYXZvaWQgdW5yZWNvdmVyYWJsZSBlcnJvcnMgb24KKyAqCXRoZSBMdWNlbnQgY2hpcHMuIChyd2NAc2dpKQorICogMjAwMC8wOC8yOSB1c2UgYmFuZHdpZHRoIGNsYWltaW5nIGhvb2tzICh0aGFua3MgUmFuZHkhKSwgZml4IHNvbWUKKyAqCXVyYiB1bmxpbmsgcHJvYnMsIGluZGVudGF0aW9uIGZpeGVzCisgKiAyMDAwLzA4LzExIHZhcmlvdXMgb29wcyBmaXhlcyBtb3N0bHkgYWZmZWN0aW5nIGlzbyBhbmQgY2xlYW51cCBmcm9tCisgKglkZXZpY2UgdW5wbHVncy4KKyAqIDIwMDAvMDYvMjggdXNlIFBDSSBob3RwbHVnIGZyYW1ld29yaywgZm9yIGJldHRlciBwb3dlciBtYW5hZ2VtZW50CisgKglhbmQgZm9yIENhcmRidXMgc3VwcG9ydCAoRGF2aWQgQnJvd25lbGwpCisgKiAyMDAwL2VhcmxpZXI6ICBmaXhlcyBmb3IgTkVDL0x1Y2VudCBjaGlwczsgc3VzcGVuZC9yZXN1bWUgaGFuZGxpbmcKKyAqCXdoZW4gdGhlIGNvbnRyb2xsZXIgbG9zZXMgcG93ZXI7IGhhbmRsZSBVRTsgY2xlYW51cDsgLi4uCisgKgorICogdjUuMiAxOTk5LzEyLzA3IFVSQiAzcmQgcHJldmlldywgCisgKiB2NS4xIDE5OTkvMTEvMzAgVVJCIDJuZCBwcmV2aWV3LCBjcGlhLCAodXNiLXNjc2kpCisgKiB2NS4wIDE5OTkvMTEvMjIgVVJCIFRlY2huaWNhbCBwcmV2aWV3LCBQYXVsIE1hY2tlcnJhcyBwb3dlcmJvb2sgc3VzcC9yZXN1bWUgCisgKiAJaTM4NjogSFVCLCBLZXlib2FyZCwgTW91c2UsIFByaW50ZXIgCisgKgorICogdjQuMyAxOTk5LzEwLzI3IG11bHRpcGxlIEhDcywgYnVsa19yZXF1ZXN0CisgKiB2NC4yIDE5OTkvMDkvMDUgSVNPIEFQSSBhbHBoYSwgbmV3IGRldiBhbGxvYywgbmVnIEVycm9yLWNvZGVzCisgKiB2NC4xIDE5OTkvMDgvMjcgUmFuZHkgRHVubGFwJ3MgLSBJU08gQVBJIGZpcnN0IGltcGwuCisgKiB2NC4wIDE5OTkvMDgvMTggCisgKiB2My4wIDE5OTkvMDYvMjUgCisgKiB2Mi4xIDE5OTkvMDUvMDkgIGNvZGUgY2xlYW4gdXAKKyAqIHYyLjAgMTk5OS8wNS8wNCAKKyAqIHYxLjAgMTk5OS8wNC8yNyBpbml0aWFsIHJlbGVhc2UKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC4KKyAqLworIAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworIwlkZWZpbmUgREVCVUcKKyNlbHNlCisjCXVuZGVmIERFQlVHCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPiAgLyogZm9yIGluX2ludGVycnVwdCAoKSAqLworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl9vdGcuaD4KKyNpbmNsdWRlICIuLi9jb3JlL2hjZC5oIgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+IAorI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4gICAgLyogbmVlZGVkIGJ5IG9oY2ktbWVtLmMgd2hlbiBubyBQQ0kgKi8KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIyMDA0IE5vdiAwOCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiUm9tYW4gV2Vpc3NnYWVyYmVyLCBEYXZpZCBCcm93bmVsbCIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiAxLjEgJ09wZW4nIEhvc3QgQ29udHJvbGxlciAoT0hDSSkgRHJpdmVyIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvLyAjZGVmaW5lIE9IQ0lfVkVSQk9TRV9ERUJVRwkvKiBub3QgYWx3YXlzIGhlbHBmdWwgKi8KKworLyogRm9yIGluaXRpYWxpemluZyBjb250cm9sbGVyIChtYXNrIGluIGFuIEhDRlMgbW9kZSB0b28pICovCisjZGVmaW5lCU9IQ0lfQ09OVFJPTF9JTklUIAlPSENJX0NUUkxfQ0JTUgorI2RlZmluZQlPSENJX0lOVFJfSU5JVCBcCisJKE9IQ0lfSU5UUl9NSUUgfCBPSENJX0lOVFJfVUUgfCBPSENJX0lOVFJfUkQgfCBPSENJX0lOVFJfV0RIKQorCisjaWZkZWYgX19ocHBhX18KKy8qIE9uIFBBLVJJU0MsIFBEQyBjYW4gbGVhdmUgSVIgc2V0IGluY29ycmVjdGx5OyBpZ25vcmUgaXQgdGhlcmUuICovCisjZGVmaW5lCUlSX0RJU0FCTEUKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUAorLyogT01BUCBkb2Vzbid0IHN1cHBvcnQgSVIgKG5vIFNNTTsgbm90IG5lZWRlZCkgKi8KKyNkZWZpbmUJSVJfRElTQUJMRQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBjb25zdCBjaGFyCWhjZF9uYW1lIFtdID0gIm9oY2lfaGNkIjsKKworI2luY2x1ZGUgIm9oY2kuaCIKKworc3RhdGljIHZvaWQgb2hjaV9kdW1wIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGludCB2ZXJib3NlKTsKK3N0YXRpYyBpbnQgb2hjaV9pbml0IChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpOworc3RhdGljIHZvaWQgb2hjaV9zdG9wIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKworI2luY2x1ZGUgIm9oY2ktaHViLmMiCisjaW5jbHVkZSAib2hjaS1kYmcuYyIKKyNpbmNsdWRlICJvaGNpLW1lbS5jIgorI2luY2x1ZGUgIm9oY2ktcS5jIgorCisKKy8qCisgKiBPbiBhcmNoaXRlY3R1cmVzIHdpdGggZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cyB3ZSBtdXN0IG5ldmVyIHJldHVybgorICogSVJRX05PTkUuCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19TQTExMTEpICAvKiAuLi4gb3Igb3RoZXIgZWRnZS10cmlnZ2VyZWQgc3lzdGVtcyAqLworI2RlZmluZSBJUlFfTk9UTUlORQlJUlFfSEFORExFRAorI2Vsc2UKKyNkZWZpbmUgSVJRX05PVE1JTkUJSVJRX05PTkUKKyNlbmRpZgorCisKKy8qIFNvbWUgYm9hcmRzIG1pc3JlcG9ydCBwb3dlciBzd2l0Y2hpbmcvb3ZlcmN1cnJlbnQgKi8KK3N0YXRpYyBpbnQgZGlzdHJ1c3RfZmlybXdhcmUgPSAxOworbW9kdWxlX3BhcmFtIChkaXN0cnVzdF9maXJtd2FyZSwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDIChkaXN0cnVzdF9maXJtd2FyZSwKKwkidHJ1ZSB0byBkaXN0cnVzdCBmaXJtd2FyZSBwb3dlci9vdmVyY3VycmVudCBzZXR1cCIpOworCisvKiBTb21lIGJvYXJkcyBsZWF2ZSBJUiBzZXQgd3JvbmdseSwgc2luY2UgdGhleSBmYWlsIEJJT1MvU01NIGhhbmRzaGFrZXMgKi8KK3N0YXRpYyBpbnQgbm9faGFuZHNoYWtlID0gMDsKK21vZHVsZV9wYXJhbSAobm9faGFuZHNoYWtlLCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MgKG5vX2hhbmRzaGFrZSwgInRydWUgKG5vdCBkZWZhdWx0KSBkaXNhYmxlcyBCSU9TIGhhbmRzaGFrZSIpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogcXVldWUgdXAgYW4gdXJiIGZvciBhbnl0aGluZyBleGNlcHQgdGhlIHJvb3QgaHViCisgKi8KK3N0YXRpYyBpbnQgb2hjaV91cmJfZW5xdWV1ZSAoCisJc3RydWN0IHVzYl9oY2QJKmhjZCwKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwLAorCXN0cnVjdCB1cmIJKnVyYiwKKwlpbnQJCW1lbV9mbGFncworKSB7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CisJc3RydWN0IGVkCSplZDsKKwl1cmJfcHJpdl90CSp1cmJfcHJpdjsKKwl1bnNpZ25lZCBpbnQJcGlwZSA9IHVyYi0+cGlwZTsKKwlpbnQJCWksIHNpemUgPSAwOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJaW50CQlyZXR2YWwgPSAwOworCQorI2lmZGVmIE9IQ0lfVkVSQk9TRV9ERUJVRworCXVyYl9wcmludCAodXJiLCAiU1VCIiwgdXNiX3BpcGVpbiAocGlwZSkpOworI2VuZGlmCisJCisJLyogZXZlcnkgZW5kcG9pbnQgaGFzIGEgZWQsIGxvY2F0ZSBhbmQgbWF5YmUgKHJlKWluaXRpYWxpemUgaXQgKi8KKwlpZiAoISAoZWQgPSBlZF9nZXQgKG9oY2ksIGVwLCB1cmItPmRldiwgcGlwZSwgdXJiLT5pbnRlcnZhbCkpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGZvciB0aGUgcHJpdmF0ZSBwYXJ0IG9mIHRoZSBVUkIgd2UgbmVlZCB0aGUgbnVtYmVyIG9mIFREcyAoc2l6ZSkgKi8KKwlzd2l0Y2ggKGVkLT50eXBlKSB7CisJCWNhc2UgUElQRV9DT05UUk9MOgorCQkJLyogdGRfc3VibWl0X3VyYigpIGRvZXNuJ3QgeWV0IGhhbmRsZSB0aGVzZSAqLworCQkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IDQwOTYpCisJCQkJcmV0dXJuIC1FTVNHU0laRTsKKworCQkJLyogMSBURCBmb3Igc2V0dXAsIDEgZm9yIEFDSywgcGx1cyAuLi4gKi8KKwkJCXNpemUgPSAyOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJLy8gY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJLy8gY2FzZSBQSVBFX0JVTEs6CisJCWRlZmF1bHQ6CisJCQkvKiBvbmUgVEQgZm9yIGV2ZXJ5IDQwOTYgQnl0ZXMgKGNhbiBiZSB1cHRvIDhLKSAqLworCQkJc2l6ZSArPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLyA0MDk2OworCQkJLyogLi4uIGFuZCBmb3IgYW55IHJlbWFpbmluZyBieXRlcyAuLi4gKi8KKwkJCWlmICgodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoICUgNDA5NikgIT0gMCkKKwkJCQlzaXplKys7CisJCQkvKiAuLi4gYW5kIG1heWJlIGEgemVybyBsZW5ndGggcGFja2V0IHRvIHdyYXAgaXQgdXAgKi8KKwkJCWlmIChzaXplID09IDApCisJCQkJc2l6ZSsrOworCQkJZWxzZSBpZiAoKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfWkVST19QQUNLRVQpICE9IDAKKwkJCQkmJiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoCisJCQkJCSUgdXNiX21heHBhY2tldCAodXJiLT5kZXYsIHBpcGUsCisJCQkJCQl1c2JfcGlwZW91dCAocGlwZSkpKSA9PSAwKQorCQkJCXNpemUrKzsKKwkJCWJyZWFrOworCQljYXNlIFBJUEVfSVNPQ0hST05PVVM6IC8qIG51bWJlciBvZiBwYWNrZXRzIGZyb20gVVJCICovCisJCQlzaXplID0gdXJiLT5udW1iZXJfb2ZfcGFja2V0czsKKwkJCWJyZWFrOworCX0KKworCS8qIGFsbG9jYXRlIHRoZSBwcml2YXRlIHBhcnQgb2YgdGhlIFVSQiAqLworCXVyYl9wcml2ID0ga21hbGxvYyAoc2l6ZW9mICh1cmJfcHJpdl90KSArIHNpemUgKiBzaXplb2YgKHN0cnVjdCB0ZCAqKSwKKwkJCW1lbV9mbGFncyk7CisJaWYgKCF1cmJfcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0ICh1cmJfcHJpdiwgMCwgc2l6ZW9mICh1cmJfcHJpdl90KSArIHNpemUgKiBzaXplb2YgKHN0cnVjdCB0ZCAqKSk7CisJSU5JVF9MSVNUX0hFQUQgKCZ1cmJfcHJpdi0+cGVuZGluZyk7CisJdXJiX3ByaXYtPmxlbmd0aCA9IHNpemU7CisJdXJiX3ByaXYtPmVkID0gZWQ7CQorCisJLyogYWxsb2NhdGUgdGhlIFREcyAoZGVmZXJyaW5nIGhhc2ggY2hhaW4gdXBkYXRlcykgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCXVyYl9wcml2LT50ZCBbaV0gPSB0ZF9hbGxvYyAob2hjaSwgbWVtX2ZsYWdzKTsKKwkJaWYgKCF1cmJfcHJpdi0+dGQgW2ldKSB7CisJCQl1cmJfcHJpdi0+bGVuZ3RoID0gaTsKKwkJCXVyYl9mcmVlX3ByaXYgKG9oY2ksIHVyYl9wcml2KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQkKKworCXNwaW5fbG9ja19pcnFzYXZlICgmb2hjaS0+bG9jaywgZmxhZ3MpOworCisJLyogZG9uJ3Qgc3VibWl0IHRvIGEgZGVhZCBIQyAqLworCWlmICghSENfSVNfUlVOTklORyhoY2QtPnN0YXRlKSkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogaW4gY2FzZSBvZiB1bmxpbmstZHVyaW5nLXN1Ym1pdCAqLworCXNwaW5fbG9jayAoJnVyYi0+bG9jayk7CisJaWYgKHVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQlzcGluX3VubG9jayAoJnVyYi0+bG9jayk7CisJCXVyYi0+aGNwcml2ID0gdXJiX3ByaXY7CisJCWZpbmlzaF91cmIgKG9oY2ksIHVyYiwgTlVMTCk7CisJCXJldHZhbCA9IDA7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBzY2hlZHVsZSB0aGUgZWQgaWYgbmVlZGVkICovCisJaWYgKGVkLT5zdGF0ZSA9PSBFRF9JRExFKSB7CisJCXJldHZhbCA9IGVkX3NjaGVkdWxlIChvaGNpLCBlZCk7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJZ290byBmYWlsMDsKKwkJaWYgKGVkLT50eXBlID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKwkJCXUxNglmcmFtZSA9IG9oY2lfZnJhbWVfbm8ob2hjaSk7CisKKwkJCS8qIGRlbGF5IGEgZmV3IGZyYW1lcyBiZWZvcmUgdGhlIGZpcnN0IFREICovCisJCQlmcmFtZSArPSBtYXhfdCAodTE2LCA4LCBlZC0+aW50ZXJ2YWwpOworCQkJZnJhbWUgJj0gfihlZC0+aW50ZXJ2YWwgLSAxKTsKKwkJCWZyYW1lIHw9IGVkLT5icmFuY2g7CisJCQl1cmItPnN0YXJ0X2ZyYW1lID0gZnJhbWU7CisKKwkJCS8qIHllcywgb25seSBVUkJfSVNPX0FTQVAgaXMgc3VwcG9ydGVkLCBhbmQKKwkJCSAqIHVyYi0+c3RhcnRfZnJhbWUgaXMgbmV2ZXIgdXNlZCBhcyBpbnB1dC4KKwkJCSAqLworCQl9CisJfSBlbHNlIGlmIChlZC0+dHlwZSA9PSBQSVBFX0lTT0NIUk9OT1VTKQorCQl1cmItPnN0YXJ0X2ZyYW1lID0gZWQtPmxhc3RfaXNvICsgZWQtPmludGVydmFsOworCisJLyogZmlsbCB0aGUgVERzIGFuZCBsaW5rIHRoZW0gdG8gdGhlIGVkOyBhbmQKKwkgKiBlbmFibGUgdGhhdCBwYXJ0IG9mIHRoZSBzY2hlZHVsZSwgaWYgbmVlZGVkCisJICogYW5kIHVwZGF0ZSBjb3VudCBvZiBxdWV1ZWQgcGVyaW9kaWMgdXJicworCSAqLworCXVyYi0+aGNwcml2ID0gdXJiX3ByaXY7CisJdGRfc3VibWl0X3VyYiAob2hjaSwgdXJiKTsKKworZmFpbDA6CisJc3Bpbl91bmxvY2sgKCZ1cmItPmxvY2spOworZmFpbDoKKwlpZiAocmV0dmFsKQorCQl1cmJfZnJlZV9wcml2IChvaGNpLCB1cmJfcHJpdik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICogZGVjb3VwbGUgdGhlIFVSQiBmcm9tIHRoZSBIQyBxdWV1ZXMgKFREcywgdXJiX3ByaXYpOyBpdCdzCisgKiBhbHJlYWR5IG1hcmtlZCB1c2luZyB1cmItPnN0YXR1cy4gIHJlcG9ydGluZyBpcyBhbHdheXMgZG9uZQorICogYXN5bmNocm9ub3VzbHksIGFuZCB3ZSBtaWdodCBiZSBkZWFsaW5nIHdpdGggYW4gdXJiIHRoYXQncworICogcGFydGlhbGx5IHRyYW5zZmVycmVkLCBvciBhbiBFRCB3aXRoIG90aGVyIHVyYnMgYmVpbmcgdW5saW5rZWQuCisgKi8KK3N0YXRpYyBpbnQgb2hjaV91cmJfZGVxdWV1ZSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwkKKyNpZmRlZiBPSENJX1ZFUkJPU0VfREVCVUcKKwl1cmJfcHJpbnQgKHVyYiwgIlVOTElOSyIsIDEpOworI2VuZGlmCQkgIAorCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CisgCWlmIChIQ19JU19SVU5OSU5HKGhjZC0+c3RhdGUpKSB7CisJCXVyYl9wcml2X3QgICp1cmJfcHJpdjsKKworCQkvKiBVbmxlc3MgYW4gSVJRIGNvbXBsZXRlZCB0aGUgdW5saW5rIHdoaWxlIGl0IHdhcyBiZWluZworCQkgKiBoYW5kZWQgdG8gdXMsIGZsYWcgaXQgZm9yIHVubGluayBhbmQgZ2l2ZWJhY2ssIGFuZCBmb3JjZQorCQkgKiBzb21lIHVwY29taW5nIElOVFJfU0YgdG8gY2FsbCBmaW5pc2hfdW5saW5rcygpCisJCSAqLworCQl1cmJfcHJpdiA9IHVyYi0+aGNwcml2OworCQlpZiAodXJiX3ByaXYpIHsKKwkJCWlmICh1cmJfcHJpdi0+ZWQtPnN0YXRlID09IEVEX09QRVIpCisJCQkJc3RhcnRfZWRfdW5saW5rIChvaGNpLCB1cmJfcHJpdi0+ZWQpOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogd2l0aCBIQyBkZWFkLCB3ZSB3b24ndCByZXNwZWN0IGhjIHF1ZXVlIHBvaW50ZXJzCisJCSAqIGFueSBtb3JlIC4uLiBqdXN0IGNsZWFuIHVwIGV2ZXJ5IHVyYidzIG1lbW9yeS4KKwkJICovCisJCWlmICh1cmItPmhjcHJpdikKKwkJCWZpbmlzaF91cmIgKG9oY2ksIHVyYiwgTlVMTCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGZyZWVzIGNvbmZpZy9hbHRzZXR0aW5nIHN0YXRlIGZvciBlbmRwb2ludHMsCisgKiBpbmNsdWRpbmcgRUQgbWVtb3J5LCBkdW1teSBURCwgYW5kIGJ1bGsvaW50ciBkYXRhIHRvZ2dsZQorICovCisKK3N0YXRpYyB2b2lkCitvaGNpX2VuZHBvaW50X2Rpc2FibGUgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApCit7CisJc3RydWN0IG9oY2lfaGNkCQkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXN0cnVjdCBlZAkJKmVkID0gZXAtPmhjcHJpdjsKKwl1bnNpZ25lZAkJbGltaXQgPSAxMDAwOworCisJLyogQVNTRVJUOiAgYW55IHJlcXVlc3RzL3VyYnMgYXJlIGJlaW5nIHVubGlua2VkICovCisJLyogQVNTRVJUOiAgbm9ib2R5IGNhbiBiZSBzdWJtaXR0aW5nIHVyYnMgZm9yIHRoaXMgYW55IG1vcmUgKi8KKworCWlmICghZWQpCisJCXJldHVybjsKKworcmVzY2FuOgorCXNwaW5fbG9ja19pcnFzYXZlICgmb2hjaS0+bG9jaywgZmxhZ3MpOworCisJaWYgKCFIQ19JU19SVU5OSU5HIChoY2QtPnN0YXRlKSkgeworc2FuaXRpemU6CisJCWVkLT5zdGF0ZSA9IEVEX0lETEU7CisJCWZpbmlzaF91bmxpbmtzIChvaGNpLCAwLCBOVUxMKTsKKwl9CisKKwlzd2l0Y2ggKGVkLT5zdGF0ZSkgeworCWNhc2UgRURfVU5MSU5LOgkJLyogd2FpdCBmb3IgaHcgdG8gZmluaXNoPyAqLworCQkvKiBtYWpvciBJUlEgZGVsaXZlcnkgdHJvdWJsZSBsb3NlcyBJTlRSX1NGIHRvby4uLiAqLworCQlpZiAobGltaXQtLSA9PSAwKSB7CisJCQlvaGNpX3dhcm4gKG9oY2ksICJJUlEgSU5UUl9TRiBsb3NzYWdlXG4iKTsKKwkJCWdvdG8gc2FuaXRpemU7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKwkJc2V0X2N1cnJlbnRfc3RhdGUgKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVfdGltZW91dCAoMSk7CisJCWdvdG8gcmVzY2FuOworCWNhc2UgRURfSURMRToJCS8qIGZ1bGx5IHVubGlua2VkICovCisJCWlmIChsaXN0X2VtcHR5ICgmZWQtPnRkX2xpc3QpKSB7CisJCQl0ZF9mcmVlIChvaGNpLCBlZC0+ZHVtbXkpOworCQkJZWRfZnJlZSAob2hjaSwgZWQpOworCQkJYnJlYWs7CisJCX0KKwkJLyogZWxzZSBGQUxMIFRIUk9VR0ggKi8KKwlkZWZhdWx0OgorCQkvKiBjYWxsZXIgd2FzIHN1cHBvc2VkIHRvIGhhdmUgdW5saW5rZWQgYW55IHJlcXVlc3RzOworCQkgKiB0aGF0J3Mgbm90IG91ciBqb2IuICBjYW4ndCByZWNvdmVyOyBtdXN0IGxlYWsgZWQuCisJCSAqLworCQlvaGNpX2VyciAob2hjaSwgImxlYWsgZWQgJXAgKCMlMDJ4KSBzdGF0ZSAlZCVzXG4iLAorCQkJZWQsIGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsIGVkLT5zdGF0ZSwKKwkJCWxpc3RfZW1wdHkgKCZlZC0+dGRfbGlzdCkgPyAiIiA6ICIgKGhhcyB0ZHMpIik7CisJCXRkX2ZyZWUgKG9oY2ksIGVkLT5kdW1teSk7CisJCWJyZWFrOworCX0KKwllcC0+aGNwcml2ID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmb2hjaS0+bG9jaywgZmxhZ3MpOworCXJldHVybjsKK30KKworc3RhdGljIGludCBvaGNpX2dldF9mcmFtZSAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QJCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CisKKwlyZXR1cm4gb2hjaV9mcmFtZV9ubyhvaGNpKTsKK30KKworc3RhdGljIHZvaWQgb2hjaV91c2JfcmVzZXQgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSkKK3sKKwlvaGNpLT5oY19jb250cm9sID0gb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCW9oY2ktPmhjX2NvbnRyb2wgJj0gT0hDSV9DVFJMX1JXQzsKKwlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaS0+aGNfY29udHJvbCwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBIQyBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGluaXQgbWVtb3J5LCBhbmQga2ljayBCSU9TL1NNTSBvZmYgKi8KKworc3RhdGljIGludCBvaGNpX2luaXQgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSkKK3sKKwlpbnQgcmV0OworCisJZGlzYWJsZSAob2hjaSk7CisJb2hjaS0+cmVncyA9IG9oY2lfdG9faGNkKG9oY2kpLT5yZWdzOworCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzOworCisjaWZuZGVmIElSX0RJU0FCTEUKKwkvKiBTTU0gb3ducyB0aGUgSEM/ICBub3QgZm9yIGxvbmchICovCisJaWYgKCFub19oYW5kc2hha2UgJiYgb2hjaV9yZWFkbCAob2hjaSwKKwkJCQkJJm9oY2ktPnJlZ3MtPmNvbnRyb2wpICYgT0hDSV9DVFJMX0lSKSB7CisJCXUzMiB0ZW1wOworCisJCW9oY2lfZGJnIChvaGNpLCAiVVNCIEhDIFRha2VPdmVyIGZyb20gQklPUy9TTU1cbiIpOworCisJCS8qIHRoaXMgdGltZW91dCBpcyBhcmJpdHJhcnkuICB3ZSBtYWtlIGl0IGxvbmcsIHNvIHN5c3RlbXMKKwkJICogZGVwZW5kaW5nIG9uIHVzYiBrZXlib2FyZHMgbWF5IGJlIHVzYWJsZSBldmVuIGlmIHRoZQorCQkgKiBCSU9TL1NNTSBjb2RlIHNlZW1zIHByZXR0eSBicm9rZW4uCisJCSAqLworCQl0ZW1wID0gNTAwOwkvKiBhcmJpdHJhcnk6IGZpdmUgc2Vjb25kcyAqLworCisJCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0lOVFJfT0MsICZvaGNpLT5yZWdzLT5pbnRyZW5hYmxlKTsKKwkJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfT0NSLCAmb2hjaS0+cmVncy0+Y21kc3RhdHVzKTsKKwkJd2hpbGUgKG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKSAmIE9IQ0lfQ1RSTF9JUikgeworCQkJbXNsZWVwICgxMCk7CisJCQlpZiAoLS10ZW1wID09IDApIHsKKwkJCQlvaGNpX2VyciAob2hjaSwgIlVTQiBIQyB0YWtlb3ZlciBmYWlsZWQhIgorCQkJCQkiICAoQklPUy9TTU0gYnVnKVxuIik7CisJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCX0KKwkJfQorCQlvaGNpX3VzYl9yZXNldCAob2hjaSk7CisJfQorI2VuZGlmCisKKwkvKiBEaXNhYmxlIEhDIGludGVycnVwdHMgKi8KKwlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX01JRSwgJm9oY2ktPnJlZ3MtPmludHJkaXNhYmxlKTsKKwkvLyBmbHVzaCB0aGUgd3JpdGVzCisJKHZvaWQpIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKworCWlmIChvaGNpLT5oY2NhKQorCQlyZXR1cm4gMDsKKworCW9oY2ktPmhjY2EgPSBkbWFfYWxsb2NfY29oZXJlbnQgKG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmNvbnRyb2xsZXIsCisJCQlzaXplb2YgKm9oY2ktPmhjY2EsICZvaGNpLT5oY2NhX2RtYSwgMCk7CisJaWYgKCFvaGNpLT5oY2NhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICgocmV0ID0gb2hjaV9tZW1faW5pdCAob2hjaSkpIDwgMCkKKwkJb2hjaV9zdG9wIChvaGNpX3RvX2hjZChvaGNpKSk7CisKKwlyZXR1cm4gcmV0OworCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFN0YXJ0IGFuIE9IQ0kgY29udHJvbGxlciwgc2V0IHRoZSBCVVMgb3BlcmF0aW9uYWwKKyAqIHJlc2V0cyBVU0IgYW5kIGNvbnRyb2xsZXIKKyAqIGVuYWJsZSBpbnRlcnJ1cHRzIAorICogY29ubmVjdCB0aGUgdmlydHVhbCByb290IGh1YgorICovCitzdGF0aWMgaW50IG9oY2lfcnVuIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCit7CisgIAl1MzIJCQltYXNrLCB0ZW1wOworICAJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CisgIAlzdHJ1Y3QgdXNiX2J1cwkJKmJ1czsKKwlpbnQJCQlmaXJzdCA9IG9oY2ktPmZtaW50ZXJ2YWwgPT0gMDsKKworCWRpc2FibGUgKG9oY2kpOworCisJLyogYm9vdCBmaXJtd2FyZSBzaG91bGQgaGF2ZSBzZXQgdGhpcyB1cCAoNS4xLjEuMy4xKSAqLworCWlmIChmaXJzdCkgeworCisJCXRlbXAgPSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Zm1pbnRlcnZhbCk7CisJCW9oY2ktPmZtaW50ZXJ2YWwgPSB0ZW1wICYgMHgzZmZmOworCQlpZiAob2hjaS0+Zm1pbnRlcnZhbCAhPSBGSSkKKwkJCW9oY2lfZGJnIChvaGNpLCAiZm1pbnRlcnZhbCBkZWx0YSAlZFxuIiwKKwkJCQlvaGNpLT5mbWludGVydmFsIC0gRkkpOworCQlvaGNpLT5mbWludGVydmFsIHw9IEZTTVAgKG9oY2ktPmZtaW50ZXJ2YWwpIDw8IDE2OworCQkvKiBhbHNvOiBwb3dlci9vdmVyY3VycmVudCBmbGFncyBpbiByb290aHViLmEgKi8KKwl9CisKKyAgCS8qIFJlc2V0IFVTQiBuZWFybHkgImJ5IHRoZSBib29rIi4gIFJlbW90ZVdha2V1cENvbm5lY3RlZAorCSAqIHNhdmVkIGlmIGJvb3QgZmlybXdhcmUgKEJJT1MvU01NLy4uLikgdG9sZCB1cyBpdCdzIGNvbm5lY3RlZAorCSAqIChmb3IgT0hDSSBpbnRlZ3JhdGVkIG9uIG1haW5ib2FyZCwgaXQgbm9ybWFsbHkgaXMpCisJICovCisJb2hjaS0+aGNfY29udHJvbCA9IG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwlvaGNpX2RiZyAob2hjaSwgInJlc2V0dGluZyBmcm9tIHN0YXRlICclcycsIGNvbnRyb2wgPSAweCV4XG4iLAorCQkJaGNmczJzdHJpbmcgKG9oY2ktPmhjX2NvbnRyb2wgJiBPSENJX0NUUkxfSENGUyksCisJCQlvaGNpLT5oY19jb250cm9sKTsKKworCWlmIChvaGNpLT5oY19jb250cm9sICYgT0hDSV9DVFJMX1JXQworCQkJJiYgIShvaGNpLT5mbGFncyAmIE9IQ0lfUVVJUktfQU1ENzU2KSkKKwkJb2hjaV90b19oY2Qob2hjaSktPmNhbl93YWtldXAgPSAxOworCisJc3dpdGNoIChvaGNpLT5oY19jb250cm9sICYgT0hDSV9DVFJMX0hDRlMpIHsKKwljYXNlIE9IQ0lfVVNCX09QRVI6CisJCXRlbXAgPSAwOworCQlicmVhazsKKwljYXNlIE9IQ0lfVVNCX1NVU1BFTkQ6CisJY2FzZSBPSENJX1VTQl9SRVNVTUU6CisJCW9oY2ktPmhjX2NvbnRyb2wgJj0gT0hDSV9DVFJMX1JXQzsKKwkJb2hjaS0+aGNfY29udHJvbCB8PSBPSENJX1VTQl9SRVNVTUU7CisJCXRlbXAgPSAxMCAvKiBtc2VjIHdhaXQgKi87CisJCWJyZWFrOworCS8vIGNhc2UgT0hDSV9VU0JfUkVTRVQ6CisJZGVmYXVsdDoKKwkJb2hjaS0+aGNfY29udHJvbCAmPSBPSENJX0NUUkxfUldDOworCQlvaGNpLT5oY19jb250cm9sIHw9IE9IQ0lfVVNCX1JFU0VUOworCQl0ZW1wID0gNTAgLyogbXNlYyB3YWl0ICovOworCQlicmVhazsKKwl9CisJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwkvLyBmbHVzaCB0aGUgd3JpdGVzCisJKHZvaWQpIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwltc2xlZXAodGVtcCk7CisJdGVtcCA9IHJvb3RodWJfYSAob2hjaSk7CisJaWYgKCEodGVtcCAmIFJIX0FfTlBTKSkgeworCQl1bnNpZ25lZCBwb3J0cyA9IHRlbXAgJiBSSF9BX05EUDsgCisKKwkJLyogcG93ZXIgZG93biBlYWNoIHBvcnQgKi8KKwkJZm9yICh0ZW1wID0gMDsgdGVtcCA8IHBvcnRzOyB0ZW1wKyspCisJCQlvaGNpX3dyaXRlbCAob2hjaSwgUkhfUFNfTFNEQSwKKwkJCQkmb2hjaS0+cmVncy0+cm9vdGh1Yi5wb3J0c3RhdHVzIFt0ZW1wXSk7CisJfQorCS8vIGZsdXNoIHRob3NlIHdyaXRlcworCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJbWVtc2V0IChvaGNpLT5oY2NhLCAwLCBzaXplb2YgKHN0cnVjdCBvaGNpX2hjY2EpKTsKKworCS8qIDJtc2VjIHRpbWVsaW1pdCBoZXJlIG1lYW5zIG5vIGlycXMvcHJlZW1wdCAqLworCXNwaW5fbG9ja19pcnEgKCZvaGNpLT5sb2NrKTsKKworcmV0cnk6CisJLyogSEMgUmVzZXQgcmVxdWlyZXMgbWF4IDEwIHVzIGRlbGF5ICovCisJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfSENSLCAgJm9oY2ktPnJlZ3MtPmNtZHN0YXR1cyk7CisJdGVtcCA9IDMwOwkvKiAuLi4gYWxsb3cgZXh0cmEgdGltZSAqLworCXdoaWxlICgob2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNtZHN0YXR1cykgJiBPSENJX0hDUikgIT0gMCkgeworCQlpZiAoLS10ZW1wID09IDApIHsKKwkJCXNwaW5fdW5sb2NrX2lycSAoJm9oY2ktPmxvY2spOworCQkJb2hjaV9lcnIgKG9oY2ksICJVU0IgSEMgcmVzZXQgdGltZWQgb3V0IVxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJdWRlbGF5ICgxKTsKKwl9CisKKwkvKiBub3cgd2UncmUgaW4gdGhlIFNVU1BFTkQgc3RhdGUgLi4uIG11c3QgZ28gT1BFUkFUSU9OQUwKKwkgKiB3aXRoaW4gMm1zZWMgZWxzZSBIQyBlbnRlcnMgUkVTVU1FCisJICoKKwkgKiAuLi4gYnV0IHNvbWUgaGFyZHdhcmUgd29uJ3QgaW5pdCBmbUludGVydmFsICJieSB0aGUgYm9vayIKKwkgKiAoU2lTLCBPUFRpIC4uLiksIHNvIHJlc2V0IGFnYWluIGluc3RlYWQuICBTaVMgZG9lc24ndCBuZWVkCisJICogdGhpcyBpZiB3ZSB3cml0ZSBmbUludGVydmFsIGFmdGVyIHdlJ3JlIE9QRVJBVElPTkFMLgorCSAqIFVuY2xlYXIgYWJvdXQgQUxpLCBTZXJ2ZXJXb3JrcywgYW5kIG90aGVycyAuLi4gdGhpcyBjb3VsZAorCSAqIGVhc2lseSBiZSBhIGxvbmdzdGFuZGluZyBidWcgaW4gY2hpcCBpbml0IG9uIExpbnV4LgorCSAqLworCWlmIChvaGNpLT5mbGFncyAmIE9IQ0lfUVVJUktfSU5JVFJFU0VUKSB7CisJCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJCS8vIGZsdXNoIHRob3NlIHdyaXRlcworCQkodm9pZCkgb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCX0KKworCS8qIFRlbGwgdGhlIGNvbnRyb2xsZXIgd2hlcmUgdGhlIGNvbnRyb2wgYW5kIGJ1bGsgbGlzdHMgYXJlCisJICogVGhlIGxpc3RzIGFyZSBlbXB0eSBub3cuICovCisJb2hjaV93cml0ZWwgKG9oY2ksIDAsICZvaGNpLT5yZWdzLT5lZF9jb250cm9saGVhZCk7CisJb2hjaV93cml0ZWwgKG9oY2ksIDAsICZvaGNpLT5yZWdzLT5lZF9idWxraGVhZCk7CisKKwkvKiBhIHJlc2V0IGNsZWFycyB0aGlzICovCisJb2hjaV93cml0ZWwgKG9oY2ksICh1MzIpIG9oY2ktPmhjY2FfZG1hLCAmb2hjaS0+cmVncy0+aGNjYSk7CisKKwlwZXJpb2RpY19yZWluaXQgKG9oY2kpOworCisJLyogc29tZSBPSENJIGltcGxlbWVudGF0aW9ucyBhcmUgZmluaWNreSBhYm91dCBob3cgdGhleSBpbml0LgorCSAqIGJvZ3VzIHZhbHVlcyBoZXJlIG1lYW4gbm90IGV2ZW4gZW51bWVyYXRpb24gY291bGQgd29yay4KKwkgKi8KKwlpZiAoKG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5mbWludGVydmFsKSAmIDB4M2ZmZjAwMDApID09IDAKKwkJCXx8ICFvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+cGVyaW9kaWNzdGFydCkpIHsKKwkJaWYgKCEob2hjaS0+ZmxhZ3MgJiBPSENJX1FVSVJLX0lOSVRSRVNFVCkpIHsKKwkJCW9oY2ktPmZsYWdzIHw9IE9IQ0lfUVVJUktfSU5JVFJFU0VUOworCQkJb2hjaV9kYmcgKG9oY2ksICJlbmFibGluZyBpbml0cmVzZXQgcXVpcmtcbiIpOworCQkJZ290byByZXRyeTsKKwkJfQorCQlzcGluX3VubG9ja19pcnEgKCZvaGNpLT5sb2NrKTsKKwkJb2hjaV9lcnIgKG9oY2ksICJpbml0IGVyciAoJTA4eCAlMDR4KVxuIiwKKwkJCW9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5mbWludGVydmFsKSwKKwkJCW9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5wZXJpb2RpY3N0YXJ0KSk7CisJCXJldHVybiAtRU9WRVJGTE9XOworCX0KKworIAkvKiBzdGFydCBjb250cm9sbGVyIG9wZXJhdGlvbnMgKi8KKwlvaGNpLT5oY19jb250cm9sICY9IE9IQ0lfQ1RSTF9SV0M7CisgCW9oY2ktPmhjX2NvbnRyb2wgfD0gT0hDSV9DT05UUk9MX0lOSVQgfCBPSENJX1VTQl9PUEVSOworIAlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaS0+aGNfY29udHJvbCwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCW9oY2lfdG9faGNkKG9oY2kpLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisKKwkvKiB3YWtlIG9uIENvbm5lY3RTdGF0dXNDaGFuZ2UsIG1hdGNoaW5nIGV4dGVybmFsIGh1YnMgKi8KKwlvaGNpX3dyaXRlbCAob2hjaSwgUkhfSFNfRFJXRSwgJm9oY2ktPnJlZ3MtPnJvb3RodWIuc3RhdHVzKTsKKworCS8qIENob29zZSB0aGUgaW50ZXJydXB0cyB3ZSBjYXJlIGFib3V0IG5vdywgb3RoZXJzIGxhdGVyIG9uIGRlbWFuZCAqLworCW1hc2sgPSBPSENJX0lOVFJfSU5JVDsKKwlvaGNpX3dyaXRlbCAob2hjaSwgbWFzaywgJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpOworCW9oY2lfd3JpdGVsIChvaGNpLCBtYXNrLCAmb2hjaS0+cmVncy0+aW50cmVuYWJsZSk7CisKKwkvKiBoYW5kbGUgcm9vdCBodWIgaW5pdCBxdWlya3MgLi4uICovCisJdGVtcCA9IHJvb3RodWJfYSAob2hjaSk7CisJdGVtcCAmPSB+KFJIX0FfUFNNIHwgUkhfQV9PQ1BNKTsKKwlpZiAob2hjaS0+ZmxhZ3MgJiBPSENJX1FVSVJLX1NVUEVSSU8pIHsKKwkJLyogTlNDIDg3NTYwIGFuZCBtYXliZSBvdGhlcnMgKi8KKwkJdGVtcCB8PSBSSF9BX05PQ1A7CisJCXRlbXAgJj0gfihSSF9BX1BPVFBHVCB8IFJIX0FfTlBTKTsKKwkJb2hjaV93cml0ZWwgKG9oY2ksIHRlbXAsICZvaGNpLT5yZWdzLT5yb290aHViLmEpOworCX0gZWxzZSBpZiAoKG9oY2ktPmZsYWdzICYgT0hDSV9RVUlSS19BTUQ3NTYpIHx8IGRpc3RydXN0X2Zpcm13YXJlKSB7CisJCS8qIGh1YiBwb3dlciBhbHdheXMgb247IHJlcXVpcmVkIGZvciBBTUQtNzU2IGFuZCBzb21lCisJCSAqIE1hYyBwbGF0Zm9ybXMuICBnYW5nZWQgb3ZlcmN1cnJlbnQgcmVwb3J0aW5nLCBpZiBhbnkuCisJCSAqLworCQl0ZW1wIHw9IFJIX0FfTlBTOworCQlvaGNpX3dyaXRlbCAob2hjaSwgdGVtcCwgJm9oY2ktPnJlZ3MtPnJvb3RodWIuYSk7CisJfQorCW9oY2lfd3JpdGVsIChvaGNpLCBSSF9IU19MUFNDLCAmb2hjaS0+cmVncy0+cm9vdGh1Yi5zdGF0dXMpOworCW9oY2lfd3JpdGVsIChvaGNpLCAodGVtcCAmIFJIX0FfTlBTKSA/IDAgOiBSSF9CX1BQQ00sCisJCQkJCQkmb2hjaS0+cmVncy0+cm9vdGh1Yi5iKTsKKwkvLyBmbHVzaCB0aG9zZSB3cml0ZXMKKwkodm9pZCkgb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCisJc3Bpbl91bmxvY2tfaXJxICgmb2hjaS0+bG9jayk7CisKKwkvLyBQT1RQR1QgZGVsYXkgaXMgYml0cyAyNC0zMSwgaW4gMiBtcyB1bml0cy4KKwltZGVsYXkgKCh0ZW1wID4+IDIzKSAmIDB4MWZlKTsKKwlidXMgPSAmb2hjaV90b19oY2Qob2hjaSktPnNlbGY7CisJb2hjaV90b19oY2Qob2hjaSktPnN0YXRlID0gSENfU1RBVEVfUlVOTklORzsKKworCW9oY2lfZHVtcCAob2hjaSwgMSk7CisKKwl1ZGV2ID0gYnVzLT5yb290X2h1YjsKKwlpZiAodWRldikgeworCQlyZXR1cm4gMDsKKwl9CisgCisJLyogY29ubmVjdCB0aGUgdmlydHVhbCByb290IGh1YiAqLworCXVkZXYgPSB1c2JfYWxsb2NfZGV2IChOVUxMLCBidXMsIDApOworCWlmICghdWRldikgeworCQlkaXNhYmxlIChvaGNpKTsKKwkJb2hjaS0+aGNfY29udHJvbCAmPSB+T0hDSV9DVFJMX0hDRlM7CisJCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXVkZXYtPnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CisJaWYgKHVzYl9oY2RfcmVnaXN0ZXJfcm9vdF9odWIgKHVkZXYsIG9oY2lfdG9faGNkKG9oY2kpKSAhPSAwKSB7CisJCXVzYl9wdXRfZGV2ICh1ZGV2KTsKKwkJZGlzYWJsZSAob2hjaSk7CisJCW9oY2ktPmhjX2NvbnRyb2wgJj0gfk9IQ0lfQ1RSTF9IQ0ZTOworCQlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaS0+aGNfY29udHJvbCwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKG9oY2ktPnBvd2VyX2J1ZGdldCkKKwkJaHViX3NldF9wb3dlcl9idWRnZXQodWRldiwgb2hjaS0+cG93ZXJfYnVkZ2V0KTsKKworCWNyZWF0ZV9kZWJ1Z19maWxlcyAob2hjaSk7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGFuIGludGVycnVwdCBoYXBwZW5zICovCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBvaGNpX2lycSAoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHB0X3JlZ3MgKnB0cmVncykKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QJCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CisJc3RydWN0IG9oY2lfcmVncyBfX2lvbWVtICpyZWdzID0gb2hjaS0+cmVnczsKKyAJaW50CQkJaW50czsgCisKKwkvKiB3ZSBjYW4gZWxpbWluYXRlIGEgKHNsb3cpIG9oY2lfcmVhZGwoKQorCSAgIGlmIF9vbmx5XyBXREggY2F1c2VkIHRoaXMgaXJxICovCisJaWYgKChvaGNpLT5oY2NhLT5kb25lX2hlYWQgIT0gMCkKKwkJCSYmICEgKGhjMzJfdG9fY3B1cCAob2hjaSwgJm9oY2ktPmhjY2EtPmRvbmVfaGVhZCkKKwkJCQkmIDB4MDEpKSB7CisJCWludHMgPSAgT0hDSV9JTlRSX1dESDsKKworCS8qIGNhcmRidXMvLi4uIGhhcmR3YXJlIGdvbmUgYmVmb3JlIHJlbW92ZSgpICovCisJfSBlbHNlIGlmICgoaW50cyA9IG9oY2lfcmVhZGwgKG9oY2ksICZyZWdzLT5pbnRyc3RhdHVzKSkgPT0gfih1MzIpMCkgeworCQlkaXNhYmxlIChvaGNpKTsKKwkJb2hjaV9kYmcgKG9oY2ksICJkZXZpY2UgcmVtb3ZlZCFcbiIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwkvKiBpbnRlcnJ1cHQgZm9yIHNvbWUgb3RoZXIgZGV2aWNlPyAqLworCX0gZWxzZSBpZiAoKGludHMgJj0gb2hjaV9yZWFkbCAob2hjaSwgJnJlZ3MtPmludHJlbmFibGUpKSA9PSAwKSB7CisJCXJldHVybiBJUlFfTk9UTUlORTsKKwl9IAorCisJaWYgKGludHMgJiBPSENJX0lOVFJfVUUpIHsKKwkJZGlzYWJsZSAob2hjaSk7CisJCW9oY2lfZXJyIChvaGNpLCAiT0hDSSBVbnJlY292ZXJhYmxlIEVycm9yLCBkaXNhYmxlZFxuIik7CisJCS8vIGUuZy4gZHVlIHRvIFBDSSBNYXN0ZXIvVGFyZ2V0IEFib3J0CisKKwkJb2hjaV9kdW1wIChvaGNpLCAxKTsKKwkJb2hjaV91c2JfcmVzZXQgKG9oY2kpOworCX0KKworCWlmIChpbnRzICYgT0hDSV9JTlRSX1JEKSB7CisJCW9oY2lfdmRiZyAob2hjaSwgInJlc3VtZSBkZXRlY3RcbiIpOworCQlpZiAoaGNkLT5zdGF0ZSAhPSBIQ19TVEFURV9RVUlFU0NJTkcpCisJCQlzY2hlZHVsZV93b3JrKCZvaGNpLT5yaF9yZXN1bWUpOworCX0KKworCWlmIChpbnRzICYgT0hDSV9JTlRSX1dESCkgeworCQlpZiAoSENfSVNfUlVOTklORyhoY2QtPnN0YXRlKSkKKwkJCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0lOVFJfV0RILCAmcmVncy0+aW50cmRpc2FibGUpOwkKKwkJc3Bpbl9sb2NrICgmb2hjaS0+bG9jayk7CisJCWRsX2RvbmVfbGlzdCAob2hjaSwgcHRyZWdzKTsKKwkJc3Bpbl91bmxvY2sgKCZvaGNpLT5sb2NrKTsKKwkJaWYgKEhDX0lTX1JVTk5JTkcoaGNkLT5zdGF0ZSkpCisJCQlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX1dESCwgJnJlZ3MtPmludHJlbmFibGUpOyAKKwl9CisgIAorCS8qIGNvdWxkIHRyYWNrIElOVFJfU08gdG8gcmVkdWNlIGF2YWlsYWJsZSBQQ0kvLi4uIGJhbmR3aWR0aCAqLworCisJLyogaGFuZGxlIGFueSBwZW5kaW5nIFVSQi9FRCB1bmxpbmtzLCBsZWF2aW5nIElOVFJfU0YgZW5hYmxlZAorCSAqIHdoZW4gdGhlcmUncyBzdGlsbCB1bmxpbmtpbmcgdG8gYmUgZG9uZSAobmV4dCBmcmFtZSkuCisJICovCisJc3Bpbl9sb2NrICgmb2hjaS0+bG9jayk7CisJaWYgKG9oY2ktPmVkX3JtX2xpc3QpCisJCWZpbmlzaF91bmxpbmtzIChvaGNpLCBvaGNpX2ZyYW1lX25vKG9oY2kpLCBwdHJlZ3MpOworCWlmICgoaW50cyAmIE9IQ0lfSU5UUl9TRikgIT0gMCAmJiAhb2hjaS0+ZWRfcm1fbGlzdAorCQkJJiYgSENfSVNfUlVOTklORyhoY2QtPnN0YXRlKSkKKwkJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfSU5UUl9TRiwgJnJlZ3MtPmludHJkaXNhYmxlKTsJCisJc3Bpbl91bmxvY2sgKCZvaGNpLT5sb2NrKTsKKworCWlmIChIQ19JU19SVU5OSU5HKGhjZC0+c3RhdGUpKSB7CisJCW9oY2lfd3JpdGVsIChvaGNpLCBpbnRzLCAmcmVncy0+aW50cnN0YXR1cyk7CisJCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0lOVFJfTUlFLCAmcmVncy0+aW50cmVuYWJsZSk7CQorCQkvLyBmbHVzaCB0aG9zZSB3cml0ZXMKKwkJKHZvaWQpIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIG9oY2lfc3RvcCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sJCisJc3RydWN0IG9oY2lfaGNkCQkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCisJb2hjaV9kYmcgKG9oY2ksICJzdG9wICVzIGNvbnRyb2xsZXIgKHN0YXRlIDB4JTAyeClcbiIsCisJCWhjZnMyc3RyaW5nIChvaGNpLT5oY19jb250cm9sICYgT0hDSV9DVFJMX0hDRlMpLAorCQloY2QtPnN0YXRlKTsKKwlvaGNpX2R1bXAgKG9oY2ksIDEpOworCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCW9oY2lfdXNiX3Jlc2V0IChvaGNpKTsKKwlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX01JRSwgJm9oY2ktPnJlZ3MtPmludHJkaXNhYmxlKTsKKwkKKwlyZW1vdmVfZGVidWdfZmlsZXMgKG9oY2kpOworCW9oY2lfbWVtX2NsZWFudXAgKG9oY2kpOworCWlmIChvaGNpLT5oY2NhKSB7CisJCWRtYV9mcmVlX2NvaGVyZW50IChoY2QtPnNlbGYuY29udHJvbGxlciwgCisJCQkJc2l6ZW9mICpvaGNpLT5oY2NhLCAKKwkJCQlvaGNpLT5oY2NhLCBvaGNpLT5oY2NhX2RtYSk7CisJCW9oY2ktPmhjY2EgPSBOVUxMOworCQlvaGNpLT5oY2NhX2RtYSA9IDA7CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBtdXN0IG5vdCBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCAqLworCisjaWYJZGVmaW5lZChDT05GSUdfVVNCX1NVU1BFTkQpIHx8IGRlZmluZWQoQ09ORklHX1BNKQorCitzdGF0aWMgaW50IG9oY2lfcmVzdGFydCAoc3RydWN0IG9oY2lfaGNkICpvaGNpKQoreworCWludCB0ZW1wOworCWludCBpOworCXN0cnVjdCB1cmJfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqcm9vdCA9IG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLnJvb3RfaHViOworCisJLyogbWFyayBhbnkgZGV2aWNlcyBnb25lLCBzbyB0aGV5IGRvIG5vdGhpbmcgdGlsbCBraHViZCBkaXNjb25uZWN0cy4KKwkgKiByZWN5Y2xlIGFueSAibGl2ZSIgZWRzL3RkcyAoYW5kIHVyYnMpIHJpZ2h0IGF3YXkuCisJICogbGF0ZXIsIGtodWJkIGRpc2Nvbm5lY3QgcHJvY2Vzc2luZyB3aWxsIHJlY3ljbGUgdGhlIG90aGVyIHN0YXRlLAorCSAqIChlaXRoZXIgYXMgZGlzY29ubmVjdC9yZWNvbm5lY3QsIG9yIG1heWJlIHNvbWVkYXkgYXMgYSByZXNldCkuCisJICovIAorCXNwaW5fbG9ja19pcnEoJm9oY2ktPmxvY2spOworCWRpc2FibGUgKG9oY2kpOworCWZvciAoaSA9IDA7IGkgPCByb290LT5tYXhjaGlsZDsgaSsrKSB7CisJCWlmIChyb290LT5jaGlsZHJlbiBbaV0pCisJCQl1c2Jfc2V0X2RldmljZV9zdGF0ZSAocm9vdC0+Y2hpbGRyZW5baV0sCisJCQkJVVNCX1NUQVRFX05PVEFUVEFDSEVEKTsKKwl9CisJaWYgKCFsaXN0X2VtcHR5ICgmb2hjaS0+cGVuZGluZykpCisJCW9oY2lfZGJnKG9oY2ksICJhYm9ydCBzY2hlZHVsZS4uLlxuIik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSAocHJpdiwgJm9oY2ktPnBlbmRpbmcsIHBlbmRpbmcpIHsKKwkJc3RydWN0IHVyYgkqdXJiID0gcHJpdi0+dGRbMF0tPnVyYjsKKwkJc3RydWN0IGVkCSplZCA9IHByaXYtPmVkOworCisJCXN3aXRjaCAoZWQtPnN0YXRlKSB7CisJCWNhc2UgRURfT1BFUjoKKwkJCWVkLT5zdGF0ZSA9IEVEX1VOTElOSzsKKwkJCWVkLT5od0lORk8gfD0gY3B1X3RvX2hjMzIob2hjaSwgRURfREVRVUVVRSk7CisJCQllZF9kZXNjaGVkdWxlIChvaGNpLCBlZCk7CisKKwkJCWVkLT5lZF9uZXh0ID0gb2hjaS0+ZWRfcm1fbGlzdDsKKwkJCWVkLT5lZF9wcmV2ID0gTlVMTDsKKwkJCW9oY2ktPmVkX3JtX2xpc3QgPSBlZDsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJCWNhc2UgRURfVU5MSU5LOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlvaGNpX2RiZyhvaGNpLCAiYm9ndXMgZWQgJXAgc3RhdGUgJWRcbiIsCisJCQkJCWVkLCBlZC0+c3RhdGUpOworCQl9CisKKwkJc3Bpbl9sb2NrICgmdXJiLT5sb2NrKTsKKwkJdXJiLT5zdGF0dXMgPSAtRVNIVVRET1dOOworCQlzcGluX3VubG9jayAoJnVyYi0+bG9jayk7CisJfQorCWZpbmlzaF91bmxpbmtzIChvaGNpLCAwLCBOVUxMKTsKKwlzcGluX3VubG9ja19pcnEoJm9oY2ktPmxvY2spOworCisJLyogcGFyYW5vaWEsIGluIGNhc2UgdGhhdCBkaWRuJ3Qgd29yazogKi8KKworCS8qIGVtcHR5IHRoZSBpbnRlcnJ1cHQgYnJhbmNoZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0lOVFM7IGkrKykgb2hjaS0+bG9hZCBbaV0gPSAwOworCWZvciAoaSA9IDA7IGkgPCBOVU1fSU5UUzsgaSsrKSBvaGNpLT5oY2NhLT5pbnRfdGFibGUgW2ldID0gMDsKKwkKKwkvKiBubyBFRHMgdG8gcmVtb3ZlICovCisJb2hjaS0+ZWRfcm1fbGlzdCA9IE5VTEw7CisKKwkvKiBlbXB0eSBjb250cm9sIGFuZCBidWxrIGxpc3RzICovCSAKKwlvaGNpLT5lZF9jb250cm9sdGFpbCA9IE5VTEw7CisJb2hjaS0+ZWRfYnVsa3RhaWwgICAgPSBOVUxMOworCisJaWYgKCh0ZW1wID0gb2hjaV9ydW4gKG9oY2kpKSA8IDApIHsKKwkJb2hjaV9lcnIgKG9oY2ksICJjYW4ndCByZXN0YXJ0LCAlZFxuIiwgdGVtcCk7CisJCXJldHVybiB0ZW1wOworCX0gZWxzZSB7CisJCS8qIGhlcmUgd2UgImtub3ciIHJvb3QgcG9ydHMgc2hvdWxkIGFsd2F5cyBzdGF5IHBvd2VyZWQsCisJCSAqIGFuZCB0aGF0IGlmIHdlIHRyeSB0byB0dXJuIHRoZW0gYmFjayBvbiB0aGUgcm9vdCBodWIKKwkJICogd2lsbCByZXNwb25kIHRvIENTQyBwcm9jZXNzaW5nLgorCQkgKi8KKwkJaSA9IHJvb3RodWJfYSAob2hjaSkgJiBSSF9BX05EUDsKKwkJd2hpbGUgKGktLSkKKwkJCW9oY2lfd3JpdGVsIChvaGNpLCBSSF9QU19QU1MsCisJCQkJJm9oY2ktPnJlZ3MtPnJvb3RodWIucG9ydHN0YXR1cyBbdGVtcF0pOworCQlvaGNpX2RiZyAob2hjaSwgInJlc3RhcnQgY29tcGxldGVcbiIpOworCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIERSSVZFUl9JTkZPIERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfREVTQworCitNT0RVTEVfQVVUSE9SIChEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTiAoRFJJVkVSX0lORk8pOworTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKKworI2lmZGVmIENPTkZJR19QQ0kKKyNpbmNsdWRlICJvaGNpLXBjaS5jIgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0ExMTExCisjaW5jbHVkZSAib2hjaS1zYTExMTEuYyIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUAorI2luY2x1ZGUgIm9oY2ktb21hcC5jIgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9MSDdBNDA0CisjaW5jbHVkZSAib2hjaS1saDdhNDA0LmMiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QWEEyN3gKKyNpbmNsdWRlICJvaGNpLXB4YTI3eC5jIgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU09DX0FVMVgwMAorI2luY2x1ZGUgIm9oY2ktYXUxeHh4LmMiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX1NPQworI2luY2x1ZGUgIm9oY2ktcHBjLXNvYy5jIgorI2VuZGlmCisKKyNpZiAhKGRlZmluZWQoQ09ORklHX1BDSSkgXAorICAgICAgfHwgZGVmaW5lZChDT05GSUdfU0ExMTExKSBcCisgICAgICB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVApIFwKKyAgICAgIHx8IGRlZmluZWQgKENPTkZJR19BUkNIX0xIN0E0MDQpIFwKKyAgICAgIHx8IGRlZmluZWQgKENPTkZJR19QWEEyN3gpIFwKKyAgICAgIHx8IGRlZmluZWQgKENPTkZJR19TT0NfQVUxWDAwKSBcCisgICAgICB8fCBkZWZpbmVkIChDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19TT0MpIFwKKwkpCisjZXJyb3IgIm1pc3NpbmcgYnVzIGdsdWUgZm9yIG9oY2ktaGNkIgorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaHViLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaHViLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmYzQxMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYwpAQCAtMCwwICsxLDY0MyBAQAorLyoKKyAqIE9IQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgorICogCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgorICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDQgRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiAKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbmNlZCB1bmRlciBHUEwKKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogT0hDSSBSb290IEh1YiAuLi4gdGhlIG5vbnNoYXJhYmxlIHN0dWZmCisgKi8KKworI2RlZmluZSBkYmdfcG9ydChoYyxsYWJlbCxudW0sdmFsdWUpIFwKKwlvaGNpX2RiZyAoaGMsIFwKKwkJIiVzIHJvb3RodWIucG9ydHN0YXR1cyBbJWRdICIgXAorCQkiPSAweCUwOHglcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXNcbiIsIFwKKwkJbGFiZWwsIG51bSwgdGVtcCwgXAorCQkodGVtcCAmIFJIX1BTX1BSU0MpID8gIiBQUlNDIiA6ICIiLCBcCisJCSh0ZW1wICYgUkhfUFNfT0NJQykgPyAiIE9DSUMiIDogIiIsIFwKKwkJKHRlbXAgJiBSSF9QU19QU1NDKSA/ICIgUFNTQyIgOiAiIiwgXAorCQkodGVtcCAmIFJIX1BTX1BFU0MpID8gIiBQRVNDIiA6ICIiLCBcCisJCSh0ZW1wICYgUkhfUFNfQ1NDKSA/ICIgQ1NDIiA6ICIiLCBcCisgCQlcCisJCSh0ZW1wICYgUkhfUFNfTFNEQSkgPyAiIExTREEiIDogIiIsIFwKKwkJKHRlbXAgJiBSSF9QU19QUFMpID8gIiBQUFMiIDogIiIsIFwKKwkJKHRlbXAgJiBSSF9QU19QUlMpID8gIiBQUlMiIDogIiIsIFwKKwkJKHRlbXAgJiBSSF9QU19QT0NJKSA/ICIgUE9DSSIgOiAiIiwgXAorCQkodGVtcCAmIFJIX1BTX1BTUykgPyAiIFBTUyIgOiAiIiwgXAorIAkJXAorCQkodGVtcCAmIFJIX1BTX1BFUykgPyAiIFBFUyIgOiAiIiwgXAorCQkodGVtcCAmIFJIX1BTX0NDUykgPyAiIENDUyIgOiAiIiBcCisJCSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZglkZWZpbmVkKENPTkZJR19VU0JfU1VTUEVORCkgfHwgZGVmaW5lZChDT05GSUdfUE0pCisKKyNkZWZpbmUgT0hDSV9TQ0hFRF9FTkFCTEVTIFwKKwkoT0hDSV9DVFJMX0NMRXxPSENJX0NUUkxfQkxFfE9IQ0lfQ1RSTF9QTEV8T0hDSV9DVFJMX0lFKQorCitzdGF0aWMgdm9pZCBkbF9kb25lX2xpc3QgKHN0cnVjdCBvaGNpX2hjZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK3N0YXRpYyB2b2lkIGZpbmlzaF91bmxpbmtzIChzdHJ1Y3Qgb2hjaV9oY2QgKiwgdTE2ICwgc3RydWN0IHB0X3JlZ3MgKik7CitzdGF0aWMgaW50IG9oY2lfcmVzdGFydCAoc3RydWN0IG9oY2lfaGNkICpvaGNpKTsKKworc3RhdGljIGludCBvaGNpX2h1Yl9zdXNwZW5kIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKwlpbnQJCQlzdGF0dXMgPSAwOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CisKKwlvaGNpLT5oY19jb250cm9sID0gb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCXN3aXRjaCAob2hjaS0+aGNfY29udHJvbCAmIE9IQ0lfQ1RSTF9IQ0ZTKSB7CisJY2FzZSBPSENJX1VTQl9SRVNVTUU6CisJCW9oY2lfZGJnIChvaGNpLCAicmVzdW1lL3N1c3BlbmQ/XG4iKTsKKwkJb2hjaS0+aGNfY29udHJvbCAmPSB+T0hDSV9DVFJMX0hDRlM7CisJCW9oY2ktPmhjX2NvbnRyb2wgfD0gT0hDSV9VU0JfUkVTRVQ7CisJCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJCS8qIEZBTEwgVEhST1VHSCAqLworCWNhc2UgT0hDSV9VU0JfUkVTRVQ6CisJCXN0YXR1cyA9IC1FQlVTWTsKKwkJb2hjaV9kYmcgKG9oY2ksICJuZWVkcyByZWluaXQhXG4iKTsKKwkJZ290byBkb25lOworCWNhc2UgT0hDSV9VU0JfU1VTUEVORDoKKwkJb2hjaV9kYmcgKG9oY2ksICJhbHJlYWR5IHN1c3BlbmRlZFxuIik7CisJCWdvdG8gZG9uZTsKKwl9CisJb2hjaV9kYmcgKG9oY2ksICJzdXNwZW5kIHJvb3QgaHViXG4iKTsKKworCS8qIEZpcnN0IHN0b3AgYW55IHByb2Nlc3NpbmcgKi8KKwloY2QtPnN0YXRlID0gSENfU1RBVEVfUVVJRVNDSU5HOworCWlmIChvaGNpLT5oY19jb250cm9sICYgT0hDSV9TQ0hFRF9FTkFCTEVTKSB7CisJCWludAkJbGltaXQ7CisKKwkJb2hjaS0+aGNfY29udHJvbCAmPSB+T0hDSV9TQ0hFRF9FTkFCTEVTOworCQlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaS0+aGNfY29udHJvbCwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCQlvaGNpLT5oY19jb250cm9sID0gb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCQlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX1NGLCAmb2hjaS0+cmVncy0+aW50cnN0YXR1cyk7CisKKwkJLyogc2NoZWQgZGlzYWJsZXMgdGFrZSBlZmZlY3Qgb24gdGhlIG5leHQgZnJhbWUsCisJCSAqIHRoZW4gdGhlIGxhc3QgV0RIIGNvdWxkIHRha2UgNisgbXNlYworCQkgKi8KKwkJb2hjaV9kYmcgKG9oY2ksICJzdG9wcGluZyBzY2hlZHVsZXMgLi4uXG4iKTsKKwkJbGltaXQgPSAyMDAwOworCQl3aGlsZSAobGltaXQgPiAwKSB7CisJCQl1ZGVsYXkgKDI1MCk7CisJCQlsaW1pdCA9LSAyNTA7CisJCQlpZiAob2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpCisJCQkJCSYgT0hDSV9JTlRSX1NGKQorCQkJCWJyZWFrOworCQl9CisJCWRsX2RvbmVfbGlzdCAob2hjaSwgTlVMTCk7CisJCW1kZWxheSAoNyk7CisJfQorCWRsX2RvbmVfbGlzdCAob2hjaSwgTlVMTCk7CisJZmluaXNoX3VubGlua3MgKG9oY2ksIG9oY2lfZnJhbWVfbm8ob2hjaSksIE5VTEwpOworCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+aW50cnN0YXR1cyksCisJCQkmb2hjaS0+cmVncy0+aW50cnN0YXR1cyk7CisKKwkvKiBtYXliZSByZXN1bWUgY2FuIHdha2Ugcm9vdCBodWIgKi8KKwlpZiAoaGNkLT5yZW1vdGVfd2FrZXVwKQorCQlvaGNpLT5oY19jb250cm9sIHw9IE9IQ0lfQ1RSTF9SV0U7CisJZWxzZQorCQlvaGNpLT5oY19jb250cm9sICY9IH5PSENJX0NUUkxfUldFOworCisJLyogU3VzcGVuZCBodWIgKi8KKwlvaGNpLT5oY19jb250cm9sICY9IH5PSENJX0NUUkxfSENGUzsKKwlvaGNpLT5oY19jb250cm9sIHw9IE9IQ0lfVVNCX1NVU1BFTkQ7CisJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwkodm9pZCkgb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCisJLyogbm8gcmVzdW1lcyB1bnRpbCBkZXZpY2VzIGZpbmlzaCBzdXNwZW5kaW5nICovCisJb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzICg1KTsKKworZG9uZToKKwlpZiAoc3RhdHVzID09IDApCisJCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9TVVNQRU5ERUQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBlZCAqZmluZF9oZWFkIChzdHJ1Y3QgZWQgKmVkKQoreworCS8qIGZvciBidWxrIGFuZCBjb250cm9sIGxpc3RzICovCisJd2hpbGUgKGVkLT5lZF9wcmV2KQorCQllZCA9IGVkLT5lZF9wcmV2OworCXJldHVybiBlZDsKK30KKworLyogY2FsbGVyIGhhcyBsb2NrZWQgdGhlIHJvb3QgaHViICovCitzdGF0aWMgaW50IG9oY2lfaHViX3Jlc3VtZSAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QJCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CisJdTMyCQkJdGVtcCwgZW5hYmxlczsKKwlpbnQJCQlzdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisKKwlpZiAodGltZV9iZWZvcmUgKGppZmZpZXMsIG9oY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQorCQltc2xlZXAoNSk7CisKKwlzcGluX2xvY2tfaXJxICgmb2hjaS0+bG9jayk7CisJb2hjaS0+aGNfY29udHJvbCA9IG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKworCWlmIChvaGNpLT5oY19jb250cm9sICYgKE9IQ0lfQ1RSTF9JUiB8IE9IQ0lfU0NIRURfRU5BQkxFUykpIHsKKwkJLyogdGhpcyBjYW4gaGFwcGVuIGFmdGVyIHN1c3BlbmQtdG8tZGlzayAqLworCQlpZiAoaGNkLT5zdGF0ZSA9PSBIQ19TVEFURV9SRVNVTUlORykgeworCQkJb2hjaV9kYmcgKG9oY2ksICJCSU9TL1NNTSBhY3RpdmUsIGNvbnRyb2wgJTAzeFxuIiwKKwkJCQkJb2hjaS0+aGNfY29udHJvbCk7CisJCQlzdGF0dXMgPSAtRUJVU1k7CisJCS8qIHRoaXMgaGFwcGVucyB3aGVuIHBtY29yZSByZXN1bWVzIEhDIHRoZW4gcm9vdCAqLworCQl9IGVsc2UgeworCQkJb2hjaV9kYmcgKG9oY2ksICJkdXBsaWNhdGUgcmVzdW1lXG4iKTsKKwkJCXN0YXR1cyA9IDA7CisJCX0KKwl9IGVsc2Ugc3dpdGNoIChvaGNpLT5oY19jb250cm9sICYgT0hDSV9DVFJMX0hDRlMpIHsKKwljYXNlIE9IQ0lfVVNCX1NVU1BFTkQ6CisJCW9oY2ktPmhjX2NvbnRyb2wgJj0gfihPSENJX0NUUkxfSENGU3xPSENJX1NDSEVEX0VOQUJMRVMpOworCQlvaGNpLT5oY19jb250cm9sIHw9IE9IQ0lfVVNCX1JFU1VNRTsKKwkJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwkJKHZvaWQpIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwkJb2hjaV9kYmcgKG9oY2ksICJyZXN1bWUgcm9vdCBodWJcbiIpOworCQlicmVhazsKKwljYXNlIE9IQ0lfVVNCX1JFU1VNRToKKwkJLyogSENGUyBjaGFuZ2VzIHNvbWV0aW1lIGFmdGVyIElOVFJfUkQgKi8KKwkJb2hjaV9pbmZvIChvaGNpLCAid2FrZXVwXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBPSENJX1VTQl9PUEVSOgorCQlvaGNpX2RiZyAob2hjaSwgImFscmVhZHkgcmVzdW1lZFxuIik7CisJCXN0YXR1cyA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CQkvKiBSRVNFVCwgd2UgbG9zdCBwb3dlciAqLworCQlvaGNpX2RiZyAob2hjaSwgInJvb3QgaHViIGhhcmR3YXJlIHJlc2V0XG4iKTsKKwkJc3RhdHVzID0gLUVCVVNZOworCX0KKwlzcGluX3VubG9ja19pcnEgKCZvaGNpLT5sb2NrKTsKKwlpZiAoc3RhdHVzID09IC1FQlVTWSkgeworCQkodm9pZCkgb2hjaV9pbml0IChvaGNpKTsKKwkJcmV0dXJuIG9oY2lfcmVzdGFydCAob2hjaSk7CisJfQorCWlmIChzdGF0dXMgIT0gLUVJTlBST0dSRVNTKQorCQlyZXR1cm4gc3RhdHVzOworCisJdGVtcCA9IHJvb3RodWJfYSAob2hjaSkgJiBSSF9BX05EUDsKKwllbmFibGVzID0gMDsKKwl3aGlsZSAodGVtcC0tKSB7CisJCXUzMiBzdGF0ID0gb2hjaV9yZWFkbCAob2hjaSwKKwkJCQkgICAgICAgJm9oY2ktPnJlZ3MtPnJvb3RodWIucG9ydHN0YXR1cyBbdGVtcF0pOworCisJCS8qIGZvcmNlIGdsb2JhbCwgbm90IHNlbGVjdGl2ZSwgcmVzdW1lICovCisJCWlmICghKHN0YXQgJiBSSF9QU19QU1MpKQorCQkJY29udGludWU7CisJCW9oY2lfd3JpdGVsIChvaGNpLCBSSF9QU19QT0NJLAorCQkJCSZvaGNpLT5yZWdzLT5yb290aHViLnBvcnRzdGF0dXMgW3RlbXBdKTsKKwl9CisKKwkvKiBTb21lIGNvbnRyb2xsZXJzIChsdWNlbnQgZXJyYXR1bSkgbmVlZCBleHRyYS1sb25nIGRlbGF5cyAqLworCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9SRVNVTUlORzsKKwltZGVsYXkgKDIwIC8qIHVzYiAxMS41LjEuMTAgKi8gKyAxNSk7CisKKwl0ZW1wID0gb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCXRlbXAgJj0gT0hDSV9DVFJMX0hDRlM7CisJaWYgKHRlbXAgIT0gT0hDSV9VU0JfUkVTVU1FKSB7CisJCW9oY2lfZXJyIChvaGNpLCAiY29udHJvbGxlciB3b24ndCByZXN1bWVcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIGRpc2FibGUgb2xkIHNjaGVkdWxlIHN0YXRlLCByZWluaXQgZnJvbSBzY3JhdGNoICovCisJb2hjaV93cml0ZWwgKG9oY2ksIDAsICZvaGNpLT5yZWdzLT5lZF9jb250cm9saGVhZCk7CisJb2hjaV93cml0ZWwgKG9oY2ksIDAsICZvaGNpLT5yZWdzLT5lZF9jb250cm9sY3VycmVudCk7CisJb2hjaV93cml0ZWwgKG9oY2ksIDAsICZvaGNpLT5yZWdzLT5lZF9idWxraGVhZCk7CisJb2hjaV93cml0ZWwgKG9oY2ksIDAsICZvaGNpLT5yZWdzLT5lZF9idWxrY3VycmVudCk7CisJb2hjaV93cml0ZWwgKG9oY2ksIDAsICZvaGNpLT5yZWdzLT5lZF9wZXJpb2RjdXJyZW50KTsKKwlvaGNpX3dyaXRlbCAob2hjaSwgKHUzMikgb2hjaS0+aGNjYV9kbWEsICZvaGNpLT5yZWdzLT5oY2NhKTsKKworCS8qIFNvbWV0aW1lcyBQQ0kgRDMgc3VzcGVuZCB0cmFzaGVzIGZyYW1lIHRpbWluZ3MgLi4uICovCisJcGVyaW9kaWNfcmVpbml0IChvaGNpKTsKKworCS8qIGludGVycnVwdHMgbWlnaHQgaGF2ZSBiZWVuIGRpc2FibGVkICovCisJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfSU5UUl9JTklULCAmb2hjaS0+cmVncy0+aW50cmVuYWJsZSk7CisJaWYgKG9oY2ktPmVkX3JtX2xpc3QpCisJCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0lOVFJfU0YsICZvaGNpLT5yZWdzLT5pbnRyZW5hYmxlKTsKKwlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpLAorCQkJJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpOworCisJLyogVGhlbiByZS1lbmFibGUgb3BlcmF0aW9ucyAqLworCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX1VTQl9PUEVSLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJKHZvaWQpIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwltc2xlZXAgKDMpOworCisJdGVtcCA9IE9IQ0lfQ09OVFJPTF9JTklUIHwgT0hDSV9VU0JfT1BFUjsKKwlpZiAoaGNkLT5jYW5fd2FrZXVwKQorCQl0ZW1wIHw9IE9IQ0lfQ1RSTF9SV0M7CisJb2hjaS0+aGNfY29udHJvbCA9IHRlbXA7CisJb2hjaV93cml0ZWwgKG9oY2ksIHRlbXAsICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwkodm9pZCkgb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCisJLyogVFJTTVJDWSAqLworCW1zbGVlcCAoMTApOworCisJLyoga2VlcCBpdCBhbGl2ZSBmb3IgfjV4IHN1c3BlbmQgKyByZXN1bWUgY29zdHMgKi8KKwlvaGNpLT5uZXh0X3N0YXRlY2hhbmdlID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMgKDI1MCk7CisKKwkvKiBtYXliZSB0dXJuIHNjaGVkdWxlcyBiYWNrIG9uICovCisJZW5hYmxlcyA9IDA7CisJdGVtcCA9IDA7CisJaWYgKCFvaGNpLT5lZF9ybV9saXN0KSB7CisJCWlmIChvaGNpLT5lZF9jb250cm9sdGFpbCkgeworCQkJb2hjaV93cml0ZWwgKG9oY2ksCisJCQkJCWZpbmRfaGVhZCAob2hjaS0+ZWRfY29udHJvbHRhaWwpLT5kbWEsCisJCQkJCSZvaGNpLT5yZWdzLT5lZF9jb250cm9saGVhZCk7CisJCQllbmFibGVzIHw9IE9IQ0lfQ1RSTF9DTEU7CisJCQl0ZW1wIHw9IE9IQ0lfQ0xGOworCQl9CisJCWlmIChvaGNpLT5lZF9idWxrdGFpbCkgeworCQkJb2hjaV93cml0ZWwgKG9oY2ksIGZpbmRfaGVhZCAob2hjaS0+ZWRfYnVsa3RhaWwpLT5kbWEsCisJCQkJJm9oY2ktPnJlZ3MtPmVkX2J1bGtoZWFkKTsKKwkJCWVuYWJsZXMgfD0gT0hDSV9DVFJMX0JMRTsKKwkJCXRlbXAgfD0gT0hDSV9CTEY7CisJCX0KKwl9CisJaWYgKGhjZC0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzIHx8IGhjZC0+c2VsZi5iYW5kd2lkdGhfaW50X3JlcXMpCisJCWVuYWJsZXMgfD0gT0hDSV9DVFJMX1BMRXxPSENJX0NUUkxfSUU7CisJaWYgKGVuYWJsZXMpIHsKKwkJb2hjaV9kYmcgKG9oY2ksICJyZXN0YXJ0aW5nIHNjaGVkdWxlcyAuLi4gJTA4eFxuIiwgZW5hYmxlcyk7CisJCW9oY2ktPmhjX2NvbnRyb2wgfD0gZW5hYmxlczsKKwkJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsICZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwkJaWYgKHRlbXApCisJCQlvaGNpX3dyaXRlbCAob2hjaSwgdGVtcCwgJm9oY2ktPnJlZ3MtPmNtZHN0YXR1cyk7CisJCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJfQorCisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9oY2lfcmhfcmVzdW1lICh2b2lkICpfaGNkKQoreworCXN0cnVjdCB1c2JfaGNkCSpoY2QgPSBfaGNkOworCisJdXNiX2xvY2tfZGV2aWNlIChoY2QtPnNlbGYucm9vdF9odWIpOworCSh2b2lkKSBvaGNpX2h1Yl9yZXN1bWUgKGhjZCk7CisJdXNiX3VubG9ja19kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yik7Cit9CisKKyNlbHNlCisKK3N0YXRpYyB2b2lkIG9oY2lfcmhfcmVzdW1lICh2b2lkICpfaGNkKQoreworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpIChfaGNkKTsKKwlvaGNpX2RiZyhvaGNpLCAicmhfcmVzdW1lID8/XG4iKTsKK30KKworI2VuZGlmCS8qIENPTkZJR19VU0JfU1VTUEVORCB8fCBDT05GSUdfUE0gKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogYnVpbGQgInN0YXR1cyBjaGFuZ2UiIHBhY2tldCAob25lIG9yIHR3byBieXRlcykgZnJvbSBIQyByZWdpc3RlcnMgKi8KKworc3RhdGljIGludAorb2hjaV9odWJfc3RhdHVzX2RhdGEgKHN0cnVjdCB1c2JfaGNkICpoY2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKwlpbnQJCXBvcnRzLCBpLCBjaGFuZ2VkID0gMCwgbGVuZ3RoID0gMTsKKwlpbnQJCWNhbl9zdXNwZW5kID0gaGNkLT5jYW5fd2FrZXVwOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKworCS8qIGhhbmRsZSBhdXRvc3VzcGVuZGVkIHJvb3Q6ICBmaW5pc2ggcmVzdW1pbmcgYmVmb3JlCisJICogbGV0dGluZyBraHViZCBvciByb290IGh1YiB0aW1lciBzZWUgc3RhdGUgY2hhbmdlcy4KKwkgKi8KKwlpZiAoKG9oY2ktPmhjX2NvbnRyb2wgJiBPSENJX0NUUkxfSENGUykgIT0gT0hDSV9VU0JfT1BFUgorCQkJfHwgIUhDX0lTX1JVTk5JTkcoaGNkLT5zdGF0ZSkpIHsKKwkJY2FuX3N1c3BlbmQgPSAwOworCQlnb3RvIGRvbmU7CisJfQorCisJcG9ydHMgPSByb290aHViX2EgKG9oY2kpICYgUkhfQV9ORFA7IAorCWlmIChwb3J0cyA+IE1BWF9ST09UX1BPUlRTKSB7CisJCW9oY2lfZXJyIChvaGNpLCAiYm9ndXMgTkRQPSVkLCByZXJlYWRzIGFzIE5EUD0lZFxuIiwgcG9ydHMsCisJCQkgIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5yb290aHViLmEpICYgUkhfQV9ORFApOworCQkvKiByZXRyeSBsYXRlcjsgInNob3VsZCBub3QgaGFwcGVuIiAqLworCQlnb3RvIGRvbmU7CisJfQorCisJLyogaW5pdCBzdGF0dXMgKi8KKwlpZiAocm9vdGh1Yl9zdGF0dXMgKG9oY2kpICYgKFJIX0hTX0xQU0MgfCBSSF9IU19PQ0lDKSkKKwkJYnVmIFswXSA9IGNoYW5nZWQgPSAxOworCWVsc2UKKwkJYnVmIFswXSA9IDA7CisJaWYgKHBvcnRzID4gNykgeworCQlidWYgWzFdID0gMDsKKwkJbGVuZ3RoKys7CisJfQorCisJLyogbG9vayBhdCBlYWNoIHBvcnQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcG9ydHM7IGkrKykgeworCQl1MzIJc3RhdHVzID0gcm9vdGh1Yl9wb3J0c3RhdHVzIChvaGNpLCBpKTsKKworCQlpZiAoc3RhdHVzICYgKFJIX1BTX0NTQyB8IFJIX1BTX1BFU0MgfCBSSF9QU19QU1NDCisJCQkJfCBSSF9QU19PQ0lDIHwgUkhfUFNfUFJTQykpIHsKKwkJCWNoYW5nZWQgPSAxOworCQkJaWYgKGkgPCA3KQorCQkJICAgIGJ1ZiBbMF0gfD0gMSA8PCAoaSArIDEpOworCQkJZWxzZQorCQkJICAgIGJ1ZiBbMV0gfD0gMSA8PCAoaSAtIDcpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBjYW4gc3VzcGVuZCBpZiBubyBwb3J0cyBhcmUgZW5hYmxlZDsgb3IgaWYgYWxsIGFsbAorCQkgKiBlbmFibGVkIHBvcnRzIGFyZSBzdXNwZW5kZWQgQU5EIHJlbW90ZSB3YWtldXAgaXMgb24uCisJCSAqLworCQlpZiAoIShzdGF0dXMgJiBSSF9QU19DQ1MpKQorCQkJY29udGludWU7CisJCWlmICgoc3RhdHVzICYgUkhfUFNfUFNTKSAmJiBoY2QtPnJlbW90ZV93YWtldXApCisJCQljb250aW51ZTsKKwkJY2FuX3N1c3BlbmQgPSAwOworCX0KK2RvbmU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKworI2lmZGVmIENPTkZJR19QTQorCS8qIHNhdmUgcG93ZXIgYnkgc3VzcGVuZGluZyBpZGxlIHJvb3QgaHViczsKKwkgKiBJTlRSX1JEIHdha2VzIHVzIHdoZW4gdGhlcmUncyB3b3JrCisJICogTk9URTogaWYgd2UgY2FuIGRvIHRoaXMsIHdlIGRvbid0IG5lZWQgYSByb290IGh1YiB0aW1lciEKKwkgKi8KKwlpZiAoY2FuX3N1c3BlbmQKKwkJCSYmICFjaGFuZ2VkCisJCQkmJiAhb2hjaS0+ZWRfcm1fbGlzdAorCQkJJiYgKChPSENJX0NUUkxfSENGUyB8IE9IQ0lfU0NIRURfRU5BQkxFUykKKwkJCQkJJiBvaGNpLT5oY19jb250cm9sKQorCQkJCT09IE9IQ0lfVVNCX09QRVIKKwkJCSYmIHRpbWVfYWZ0ZXIgKGppZmZpZXMsIG9oY2ktPm5leHRfc3RhdGVjaGFuZ2UpCisJCQkmJiB1c2JfdHJ5bG9ja19kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1YikKKwkJCSkgeworCQlvaGNpX3ZkYmcgKG9oY2ksICJhdXRvc3VzcGVuZFxuIik7CisJCSh2b2lkKSBvaGNpX2h1Yl9zdXNwZW5kIChoY2QpOworCQloY2QtPnN0YXRlID0gSENfU1RBVEVfUlVOTklORzsKKwkJdXNiX3VubG9ja19kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yik7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gY2hhbmdlZCA/IGxlbmd0aCA6IDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCitvaGNpX2h1Yl9kZXNjcmlwdG9yICgKKwlzdHJ1Y3Qgb2hjaV9oY2QJCQkqb2hjaSwKKwlzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yCSpkZXNjCispIHsKKwl1MzIJCXJoID0gcm9vdGh1Yl9hIChvaGNpKTsKKwlpbnQJCXBvcnRzID0gcmggJiBSSF9BX05EUDsgCisJdTE2CQl0ZW1wOworCisJZGVzYy0+YkRlc2NyaXB0b3JUeXBlID0gMHgyOTsKKwlkZXNjLT5iUHdyT24yUHdyR29vZCA9IChyaCAmIFJIX0FfUE9UUEdUKSA+PiAyNDsKKwlkZXNjLT5iSHViQ29udHJDdXJyZW50ID0gMDsKKworCWRlc2MtPmJOYnJQb3J0cyA9IHBvcnRzOworCXRlbXAgPSAxICsgKHBvcnRzIC8gOCk7CisJZGVzYy0+YkRlc2NMZW5ndGggPSA3ICsgMiAqIHRlbXA7CisKKwl0ZW1wID0gMDsKKwlpZiAocmggJiBSSF9BX05QUykJCS8qIG5vIHBvd2VyIHN3aXRjaGluZz8gKi8KKwkgICAgdGVtcCB8PSAweDAwMDI7CisJaWYgKHJoICYgUkhfQV9QU00pIAkJLyogcGVyLXBvcnQgcG93ZXIgc3dpdGNoaW5nPyAqLworCSAgICB0ZW1wIHw9IDB4MDAwMTsKKwlpZiAocmggJiBSSF9BX05PQ1ApCQkvKiBubyBvdmVyY3VycmVudCByZXBvcnRpbmc/ICovCisJICAgIHRlbXAgfD0gMHgwMDEwOworCWVsc2UgaWYgKHJoICYgUkhfQV9PQ1BNKQkvKiBwZXItcG9ydCBvdmVyY3VycmVudCByZXBvcnRpbmc/ICovCisJICAgIHRlbXAgfD0gMHgwMDA4OworCWRlc2MtPndIdWJDaGFyYWN0ZXJpc3RpY3MgPSAoX19mb3JjZSBfX3UxNiljcHVfdG9faGMxNihvaGNpLCB0ZW1wKTsKKworCS8qIHR3byBiaXRtYXBzOiAgcG9ydHMgcmVtb3ZhYmxlLCBhbmQgdXNiIDEuMCBsZWdhY3kgUG9ydFB3ckN0cmxNYXNrICovCisJcmggPSByb290aHViX2IgKG9oY2kpOworCWRlc2MtPmJpdG1hcCBbMF0gPSByaCAmIFJIX0JfRFI7CisJaWYgKHBvcnRzID4gNykgeworCQlkZXNjLT5iaXRtYXAgWzFdID0gKHJoICYgUkhfQl9EUikgPj4gODsKKwkJZGVzYy0+Yml0bWFwIFsyXSA9IGRlc2MtPmJpdG1hcCBbM10gPSAweGZmOworCX0gZWxzZQorCQlkZXNjLT5iaXRtYXAgWzFdID0gMHhmZjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmCUNPTkZJR19VU0JfT1RHCisKK3N0YXRpYyBpbnQgb2hjaV9zdGFydF9wb3J0X3Jlc2V0IChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCB1bnNpZ25lZCBwb3J0KQoreworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCXUzMgkJCXN0YXR1czsKKworCWlmICghcG9ydCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcG9ydC0tOworCisJLyogc3RhcnQgcG9ydCByZXNldCBiZWZvcmUgSE5QIHByb3RvY29sIHRpbWVzIG91dCAqLworCXN0YXR1cyA9IG9oY2lfcmVhZGwob2hjaSwgJm9oY2ktPnJlZ3MtPnJvb3RodWIucG9ydHN0YXR1cyBbcG9ydF0pOworCWlmICghKHN0YXR1cyAmIFJIX1BTX0NDUykpCisJCXJldHVybiAtRU5PREVWOworCisJLyoga2h1YmQgd2lsbCBmaW5pc2ggdGhlIHJlc2V0IGxhdGVyICovCisJb2hjaV93cml0ZWwob2hjaSwgUkhfUFNfUFJTLCAmb2hjaS0+cmVncy0+cm9vdGh1Yi5wb3J0c3RhdHVzIFtwb3J0XSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X2hucChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpOworCisjZWxzZQorCisjZGVmaW5lCW9oY2lfc3RhcnRfcG9ydF9yZXNldAkJTlVMTAorCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisvKiBTZWUgdXNiIDcuMS43LjU6ICByb290IGh1YnMgbXVzdCBpc3N1ZSBhdCBsZWFzdCA1MCBtc2VjIHJlc2V0IHNpZ25hbGluZywKKyAqIG5vdCBuZWNlc3NhcmlseSBjb250aW51b3VzIC4uLiB0byBndWFyZCBhZ2FpbnN0IHJlc3VtZSBzaWduYWxpbmcuCisgKiBUaGUgc2hvcnQgdGltZW91dCBpcyBzYWZlIGZvciBub24tcm9vdCBodWJzLCBhbmQgaXMgYmFja3dhcmQtY29tcGF0aWJsZQorICogd2l0aCBlYXJsaWVyIExpbnV4IGhvc3RzLgorICovCisjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECisjZGVmaW5lCVBPUlRfUkVTRVRfTVNFQwkJNTAKKyNlbHNlCisjZGVmaW5lCVBPUlRfUkVTRVRfTVNFQwkJMTAKKyNlbmRpZgorCisvKiB0aGlzIHRpbWVyIHZhbHVlIG1pZ2h0IGJlIHZlbmRvci1zcGVjaWZpYyAuLi4gKi8KKyNkZWZpbmUJUE9SVF9SRVNFVF9IV19NU0VDCTEwCisKKy8qIHdyYXAtYXdhcmUgbG9naWMgbW9ycGhlZCBmcm9tIDxsaW51eC9qaWZmaWVzLmg+ICovCisjZGVmaW5lIHRpY2tfYmVmb3JlKHQxLHQyKSAoKHMxNikoKChzMTYpKHQxKSktKChzMTYpKHQyKSkpIDwgMCkKKworLyogY2FsbGVkIGZyb20gc29tZSB0YXNrLCBub3JtYWxseSBraHViZCAqLworc3RhdGljIGlubGluZSB2b2lkIHJvb3RfcG9ydF9yZXNldCAoc3RydWN0IG9oY2lfaGNkICpvaGNpLCB1bnNpZ25lZCBwb3J0KQoreworCV9faGMzMiBfX2lvbWVtICpwb3J0c3RhdCA9ICZvaGNpLT5yZWdzLT5yb290aHViLnBvcnRzdGF0dXMgW3BvcnRdOworCXUzMgl0ZW1wOworCXUxNglub3cgPSBvaGNpX3JlYWRsKG9oY2ksICZvaGNpLT5yZWdzLT5mbW51bWJlcik7CisJdTE2CXJlc2V0X2RvbmUgPSBub3cgKyBQT1JUX1JFU0VUX01TRUM7CisKKwkvKiBidWlsZCBhICJjb250aW51b3VzIGVub3VnaCIgcmVzZXQgc2lnbmFsLCB3aXRoIHVwIHRvCisJICogM21zZWMgZ2FwIGJldHdlZW4gcHVsc2VzLiAgc2NoZWR1bGVyIEhaPT0xMDAgbXVzdCB3b3JrOworCSAqIHRoaXMgbWlnaHQgbmVlZCB0byBiZSBkZWFkbGluZS1zY2hlZHVsZWQuCisJICovCisJZG8geworCQkvKiBzcGluIHVudGlsIGFueSBjdXJyZW50IHJlc2V0IGZpbmlzaGVzICovCisJCWZvciAoOzspIHsKKwkJCXRlbXAgPSBvaGNpX3JlYWRsIChvaGNpLCBwb3J0c3RhdCk7CisJCQlpZiAoISh0ZW1wICYgUkhfUFNfUFJTKSkKKwkJCQlicmVhazsKKwkJCXVkZWxheSAoNTAwKTsKKwkJfSAKKworCQlpZiAoISh0ZW1wICYgUkhfUFNfQ0NTKSkKKwkJCWJyZWFrOworCQlpZiAodGVtcCAmIFJIX1BTX1BSU0MpCisJCQlvaGNpX3dyaXRlbCAob2hjaSwgUkhfUFNfUFJTQywgcG9ydHN0YXQpOworCisJCS8qIHN0YXJ0IHRoZSBuZXh0IHJlc2V0LCBzbGVlcCB0aWxsIGl0J3MgcHJvYmFibHkgZG9uZSAqLworCQlvaGNpX3dyaXRlbCAob2hjaSwgUkhfUFNfUFJTLCBwb3J0c3RhdCk7CisJCW1zbGVlcChQT1JUX1JFU0VUX0hXX01TRUMpOworCQlub3cgPSBvaGNpX3JlYWRsKG9oY2ksICZvaGNpLT5yZWdzLT5mbW51bWJlcik7CisJfSB3aGlsZSAodGlja19iZWZvcmUobm93LCByZXNldF9kb25lKSk7CisJLyogY2FsbGVyIHN5bmNocm9uaXplcyB1c2luZyBQUlNDICovCit9CisKK3N0YXRpYyBpbnQgb2hjaV9odWJfY29udHJvbCAoCisJc3RydWN0IHVzYl9oY2QJKmhjZCwKKwl1MTYJCXR5cGVSZXEsCisJdTE2CQl3VmFsdWUsCisJdTE2CQl3SW5kZXgsCisJY2hhcgkJKmJ1ZiwKKwl1MTYJCXdMZW5ndGgKKykgeworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCWludAkJcG9ydHMgPSBoY2RfdG9fYnVzIChoY2QpLT5yb290X2h1Yi0+bWF4Y2hpbGQ7CisJdTMyCQl0ZW1wOworCWludAkJcmV0dmFsID0gMDsKKworCXN3aXRjaCAodHlwZVJlcSkgeworCWNhc2UgQ2xlYXJIdWJGZWF0dXJlOgorCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIENfSFVCX09WRVJfQ1VSUkVOVDoKKwkJCW9oY2lfd3JpdGVsIChvaGNpLCBSSF9IU19PQ0lDLAorCQkJCQkmb2hjaS0+cmVncy0+cm9vdGh1Yi5zdGF0dXMpOworCQljYXNlIENfSFVCX0xPQ0FMX1BPV0VSOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQl9CisJCWJyZWFrOworCWNhc2UgQ2xlYXJQb3J0RmVhdHVyZToKKwkJaWYgKCF3SW5kZXggfHwgd0luZGV4ID4gcG9ydHMpCisJCQlnb3RvIGVycm9yOworCQl3SW5kZXgtLTsKKworCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIFVTQl9QT1JUX0ZFQVRfRU5BQkxFOgorCQkJdGVtcCA9IFJIX1BTX0NDUzsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19FTkFCTEU6CisJCQl0ZW1wID0gUkhfUFNfUEVTQzsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKKwkJCXRlbXAgPSBSSF9QU19QT0NJOworCQkJaWYgKChvaGNpLT5oY19jb250cm9sICYgT0hDSV9DVFJMX0hDRlMpCisJCQkJCSE9IE9IQ0lfVVNCX09QRVIpCisJCQkJc2NoZWR1bGVfd29yayAoJm9oY2ktPnJoX3Jlc3VtZSk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORDoKKwkJCXRlbXAgPSBSSF9QU19QU1NDOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKKwkJCXRlbXAgPSBSSF9QU19MU0RBOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT046CisJCQl0ZW1wID0gUkhfUFNfQ1NDOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX09WRVJfQ1VSUkVOVDoKKwkJCXRlbXAgPSBSSF9QU19PQ0lDOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX1JFU0VUOgorCQkJdGVtcCA9IFJIX1BTX1BSU0M7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJb2hjaV93cml0ZWwgKG9oY2ksIHRlbXAsCisJCQkJJm9oY2ktPnJlZ3MtPnJvb3RodWIucG9ydHN0YXR1cyBbd0luZGV4XSk7CisJCS8vIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5yb290aHViLnBvcnRzdGF0dXMgW3dJbmRleF0pOworCQlicmVhazsKKwljYXNlIEdldEh1YkRlc2NyaXB0b3I6CisJCW9oY2lfaHViX2Rlc2NyaXB0b3IgKG9oY2ksIChzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yICopIGJ1Zik7CisJCWJyZWFrOworCWNhc2UgR2V0SHViU3RhdHVzOgorCQl0ZW1wID0gcm9vdGh1Yl9zdGF0dXMgKG9oY2kpICYgfihSSF9IU19DUldFIHwgUkhfSFNfRFJXRSk7CisJCSooX19sZTMyICopIGJ1ZiA9IGNwdV90b19sZTMyICh0ZW1wKTsKKwkJYnJlYWs7CisJY2FzZSBHZXRQb3J0U3RhdHVzOgorCQlpZiAoIXdJbmRleCB8fCB3SW5kZXggPiBwb3J0cykKKwkJCWdvdG8gZXJyb3I7CisJCXdJbmRleC0tOworCQl0ZW1wID0gcm9vdGh1Yl9wb3J0c3RhdHVzIChvaGNpLCB3SW5kZXgpOworCQkqKF9fbGUzMiAqKSBidWYgPSBjcHVfdG9fbGUzMiAodGVtcCk7CisKKyNpZm5kZWYJT0hDSV9WRVJCT1NFX0RFQlVHCisJaWYgKCoodTE2KikoYnVmKzIpKQkvKiBvbmx5IGlmIHdQb3J0Q2hhbmdlIGlzIGludGVyZXN0aW5nICovCisjZW5kaWYKKwkJZGJnX3BvcnQgKG9oY2ksICJHZXRTdGF0dXMiLCB3SW5kZXgsIHRlbXApOworCQlicmVhazsKKwljYXNlIFNldEh1YkZlYXR1cmU6CisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgQ19IVUJfT1ZFUl9DVVJSRU5UOgorCQkJLy8gRklYTUU6ICB0aGlzIGNhbiBiZSBjbGVhcmVkLCB5ZXM/CisJCWNhc2UgQ19IVUJfTE9DQUxfUE9XRVI6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTZXRQb3J0RmVhdHVyZToKKwkJaWYgKCF3SW5kZXggfHwgd0luZGV4ID4gcG9ydHMpCisJCQlnb3RvIGVycm9yOworCQl3SW5kZXgtLTsKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisjaWZkZWYJQ09ORklHX1VTQl9PVEcKKwkJCWlmIChoY2QtPnNlbGYub3RnX3BvcnQgPT0gKHdJbmRleCArIDEpCisJCQkJCSYmIGhjZC0+c2VsZi5iX2hucF9lbmFibGUpCisJCQkJc3RhcnRfaG5wKG9oY2kpOworCQkJZWxzZQorI2VuZGlmCisJCQlvaGNpX3dyaXRlbCAob2hjaSwgUkhfUFNfUFNTLAorCQkJCSZvaGNpLT5yZWdzLT5yb290aHViLnBvcnRzdGF0dXMgW3dJbmRleF0pOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKKwkJCW9oY2lfd3JpdGVsIChvaGNpLCBSSF9QU19QUFMsCisJCQkJJm9oY2ktPnJlZ3MtPnJvb3RodWIucG9ydHN0YXR1cyBbd0luZGV4XSk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1JFU0VUOgorCQkJcm9vdF9wb3J0X3Jlc2V0IChvaGNpLCB3SW5kZXgpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKK2Vycm9yOgorCQkvKiAicHJvdG9jb2wgc3RhbGwiIG9uIGVycm9yICovCisJCXJldHZhbCA9IC1FUElQRTsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWxoN2E0MDQuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1saDdhNDA0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE3NjIwZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1saDdhNDA0LmMKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBPSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgorICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDIgRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiAoQykgQ29weXJpZ2h0IDIwMDIgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqCisgKiBCdXMgR2x1ZSBmb3IgU2hhcnAgTEg3QTQwNAorICoKKyAqIFdyaXR0ZW4gYnkgQ2hyaXN0b3BoZXIgSG9vdmVyIDxjaEBocGwuaHAuY29tPgorICogQmFzZWQgb24gZnJhZ21lbnRzIG9mIHByZXZpb3VzIGRyaXZlciBieSBSdXNlbGwgS2luZyBldCBhbC4KKyAqCisgKiBNb2RpZmllZCBmb3IgTEg3QTQwNCBmcm9tIG9oY2ktc2ExMTExLmMKKyAqICBieSBEdXJnZXNoIFBhdHRhbWF0dGEgPHBhdHRhbWF0dGFkQHNoYXJwc2VjLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC4KKyAqLworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCisKK2V4dGVybiBpbnQgdXNiX2Rpc2FibGVkKHZvaWQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBsaDdhNDA0X3N0YXJ0X2hjKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXworCSAgICAgICAiOiBzdGFydGluZyBMSDdBNDA0IE9IQ0kgVVNCIENvbnRyb2xsZXJcbiIpOworCisJLyoKKwkgKiBOb3csIGNhcmVmdWxseSBlbmFibGUgdGhlIFVTQiBjbG9jaywgYW5kIHRha2UKKwkgKiB0aGUgVVNCIGhvc3QgY29udHJvbGxlciBvdXQgb2YgcmVzZXQuCisJICovCisJQ1NDX1BXUkNOVCB8PSBDU0NfUFdSQ05UX1VTQkhfRU47IC8qIEVuYWJsZSBjbG9jayAqLworCXVkZWxheSgxMDAwKTsKKwlVU0JIX0NNRFNUQVRVUyA9IE9IQ0lfSENSOworCQorCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fCisJCSAgICI6IENsb2NrIHRvIFVTQiBob3N0IGhhcyBiZWVuIGVuYWJsZWQgXG4iKTsKK30KKworc3RhdGljIHZvaWQgbGg3YTQwNF9zdG9wX2hjKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXworCSAgICAgICAiOiBzdG9wcGluZyBMSDdBNDA0IE9IQ0kgVVNCIENvbnRyb2xsZXJcbiIpOworCisJQ1NDX1BXUkNOVCAmPSB+Q1NDX1BXUkNOVF9VU0JIX0VOOyAvKiBEaXNhYmxlIGNsb2NrICovCit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogY29uZmlndXJlIHNvIGFuIEhDIGRldmljZSBhbmQgaWQgYXJlIGFsd2F5cyBwcm92aWRlZCAqLworLyogYWx3YXlzIGNhbGxlZCB3aXRoIHByb2Nlc3MgY29udGV4dDsgc2xlZXBpbmcgaXMgT0sgKi8KKworCisvKioKKyAqIHVzYl9oY2RfbGg3YTQwNF9wcm9iZSAtIGluaXRpYWxpemUgTEg3QTQwNC1iYXNlZCBIQ0RzCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBBbGxvY2F0ZXMgYmFzaWMgcmVzb3VyY2VzIGZvciB0aGlzIFVTQiBob3N0IGNvbnRyb2xsZXIsIGFuZAorICogdGhlbiBpbnZva2VzIHRoZSBzdGFydCgpIG1ldGhvZCBmb3IgdGhlIEhDRCBhc3NvY2lhdGVkIHdpdGggaXQKKyAqIHRocm91Z2ggdGhlIGhvdHBsdWcgZW50cnkncyBkcml2ZXJfZGF0YS4KKyAqCisgKi8KK2ludCB1c2JfaGNkX2xoN2E0MDRfcHJvYmUgKGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciwKKwkJCSAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCWludCByZXR2YWw7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKKworCWlmIChkZXYtPnJlc291cmNlWzFdLmZsYWdzICE9IElPUkVTT1VSQ0VfSVJRKSB7CisJCXByX2RlYnVnKCJyZXNvdXJjZVsxXSBpcyBub3QgSU9SRVNPVVJDRV9JUlEiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoZHJpdmVyLCAmZGV2LT5kZXYsICJsaDdhNDA0Iik7CisJaWYgKCFoY2QpCisJCXJldHVybiAtRU5PTUVNOworCWhjZC0+cnNyY19zdGFydCA9IGRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7CisJaGNkLT5yc3JjX2xlbiA9IGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDE7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4sIGhjZF9uYW1lKSkgeworCQlwcl9kZWJ1ZygicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZCIpOworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZXJyMTsKKwl9CisJCisJaGNkLT5yZWdzID0gaW9yZW1hcChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCWlmICghaGNkLT5yZWdzKSB7CisJCXByX2RlYnVnKCJpb3JlbWFwIGZhaWxlZCIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjI7CisJfQorCisJbGg3YTQwNF9zdGFydF9oYyhkZXYpOworCW9oY2lfaGNkX2luaXQoaGNkX3RvX29oY2koaGNkKSk7CisKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsIFNBX0lOVEVSUlVQVCk7CisJaWYgKHJldHZhbCA9PSAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJbGg3YTQwNF9zdG9wX2hjKGRldik7CisJaW91bm1hcChoY2QtPnJlZ3MpOworIGVycjI6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisgZXJyMToKKwl1c2JfcHV0X2hjZChoY2QpOworCXJldHVybiByZXR2YWw7Cit9CisKKworLyogbWF5IGJlIGNhbGxlZCB3aXRob3V0IGNvbnRyb2xsZXIgZWxlY3RyaWNhbGx5IHByZXNlbnQgKi8KKy8qIG1heSBiZSBjYWxsZWQgd2l0aCBjb250cm9sbGVyLCBidXMsIGFuZCBkZXZpY2VzIGFjdGl2ZSAqLworCisvKioKKyAqIHVzYl9oY2RfbGg3YTQwNF9yZW1vdmUgLSBzaHV0ZG93biBwcm9jZXNzaW5nIGZvciBMSDdBNDA0LWJhc2VkIEhDRHMKKyAqIEBkZXY6IFVTQiBIb3N0IENvbnRyb2xsZXIgYmVpbmcgcmVtb3ZlZAorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogUmV2ZXJzZXMgdGhlIGVmZmVjdCBvZiB1c2JfaGNkX2xoN2E0MDRfcHJvYmUoKSwgZmlyc3QgaW52b2tpbmcKKyAqIHRoZSBIQ0QncyBzdG9wKCkgbWV0aG9kLiAgSXQgaXMgYWx3YXlzIGNhbGxlZCBmcm9tIGEgdGhyZWFkCisgKiBjb250ZXh0LCBub3JtYWxseSAicm1tb2QiLCAiYXBtZCIsIG9yIHNvbWV0aGluZyBzaW1pbGFyLgorICoKKyAqLwordm9pZCB1c2JfaGNkX2xoN2E0MDRfcmVtb3ZlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJdXNiX3JlbW92ZV9oY2QoaGNkKTsKKwlsaDdhNDA0X3N0b3BfaGMoZGV2KTsKKwlpb3VubWFwKGhjZC0+cmVncyk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJdXNiX3B1dF9oY2QoaGNkKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2RldmluaXQKK29oY2lfbGg3YTQwNF9zdGFydCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKwlpbnQJCXJldDsKKworCW9oY2lfZGJnIChvaGNpLCAib2hjaV9saDdhNDA0X3N0YXJ0LCBvaGNpOiVwIiwgb2hjaSk7CisJaWYgKChyZXQgPSBvaGNpX2luaXQob2hjaSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICgocmV0ID0gb2hjaV9ydW4gKG9oY2kpKSA8IDApIHsKKwkJZXJyICgiY2FuJ3Qgc3RhcnQgJXMiLCBoY2QtPnNlbGYuYnVzX25hbWUpOworCQlvaGNpX3N0b3AgKGhjZCk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZlciBvaGNpX2xoN2E0MDRfaGNfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbiA9CQloY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjID0JCSJMSDdBNDA0IE9IQ0kiLAorCS5oY2RfcHJpdl9zaXplID0Jc2l6ZW9mKHN0cnVjdCBvaGNpX2hjZCksCisKKwkvKgorCSAqIGdlbmVyaWMgaGFyZHdhcmUgbGlua2FnZQorCSAqLworCS5pcnEgPQkJCW9oY2lfaXJxLAorCS5mbGFncyA9CQlIQ0RfVVNCMTEgfCBIQ0RfTUVNT1JZLAorCisJLyoKKwkgKiBiYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucworCSAqLworCS5zdGFydCA9CQlvaGNpX2xoN2E0MDRfc3RhcnQsCisjaWZkZWYJQ09ORklHX1BNCisJLyogc3VzcGVuZDoJCW9oY2lfbGg3YTQwNF9zdXNwZW5kLCAgLS0gdGJkICovCisJLyogcmVzdW1lOgkJb2hjaV9saDdhNDA0X3Jlc3VtZSwgICAtLSB0YmQgKi8KKyNlbmRpZiAvKkNPTkZJR19QTSovCisJLnN0b3AgPQkJCW9oY2lfc3RvcCwKKworCS8qCisJICogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMKKwkgKi8KKwkudXJiX2VucXVldWUgPQkJb2hjaV91cmJfZW5xdWV1ZSwKKwkudXJiX2RlcXVldWUgPQkJb2hjaV91cmJfZGVxdWV1ZSwKKwkuZW5kcG9pbnRfZGlzYWJsZSA9CW9oY2lfZW5kcG9pbnRfZGlzYWJsZSwKKworCS8qCisJICogc2NoZWR1bGluZyBzdXBwb3J0CisJICovCisJLmdldF9mcmFtZV9udW1iZXIgPQlvaGNpX2dldF9mcmFtZSwKKworCS8qCisJICogcm9vdCBodWIgc3VwcG9ydAorCSAqLworCS5odWJfc3RhdHVzX2RhdGEgPQlvaGNpX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wgPQkJb2hjaV9odWJfY29udHJvbCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgb2hjaV9oY2RfbGg3YTQwNF9kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlpbnQgcmV0OworCisJcHJfZGVidWcgKCJJbiBvaGNpX2hjZF9saDdhNDA0X2Rydl9wcm9iZSIpOworCisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IHVzYl9oY2RfbGg3YTQwNF9wcm9iZSgmb2hjaV9saDdhNDA0X2hjX2RyaXZlciwgcGRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvaGNpX2hjZF9saDdhNDA0X2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwl1c2JfaGNkX2xoN2E0MDRfcmVtb3ZlKGhjZCwgcGRldik7CisJcmV0dXJuIDA7Cit9CisJLypUQkQqLworLypzdGF0aWMgaW50IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgb2hjaV9oY2RfbGg3YTQwNF9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisKKwlyZXR1cm4gMDsKK30KKyovCisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBvaGNpX2hjZF9saDdhNDA0X2RyaXZlciA9IHsKKwkubmFtZQkJPSAibGg3YTQwNC1vaGNpIiwKKwkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkucHJvYmUJCT0gb2hjaV9oY2RfbGg3YTQwNF9kcnZfcHJvYmUsCisJLnJlbW92ZQkJPSBvaGNpX2hjZF9saDdhNDA0X2Rydl9yZW1vdmUsCisJLyouc3VzcGVuZAk9IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3N1c3BlbmQsICovCisJLyoucmVzdW1lCT0gb2hjaV9oY2RfbGg3YTQwNF9kcnZfcmVzdW1lLCAqLworfTsKKworc3RhdGljIGludCBfX2luaXQgb2hjaV9oY2RfbGg3YTQwNF9pbml0ICh2b2lkKQoreworCXByX2RlYnVnIChEUklWRVJfSU5GTyAiIChMSDdBNDA0KSIpOworCXByX2RlYnVnICgiYmxvY2sgc2l6ZXM6IGVkICVkIHRkICVkXG4iLAorCQlzaXplb2YgKHN0cnVjdCBlZCksIHNpemVvZiAoc3RydWN0IHRkKSk7CisKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9saDdhNDA0X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvaGNpX2hjZF9saDdhNDA0X2NsZWFudXAgKHZvaWQpCit7CisJZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX2xoN2E0MDRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQgKG9oY2lfaGNkX2xoN2E0MDRfaW5pdCk7Cittb2R1bGVfZXhpdCAob2hjaV9oY2RfbGg3YTQwNF9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1tZW0uYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1tZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTU2ODJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLW1lbS5jCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCisgKiAKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMiBEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqIAorICogVGhpcyBmaWxlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFRoZXJlJ3MgYmFzaWNhbGx5IHRocmVlIHR5cGVzIG9mIG1lbW9yeToKKyAqCS0gZGF0YSB1c2VkIG9ubHkgYnkgdGhlIEhDRCAuLi4ga21hbGxvYyBpcyBmaW5lCisgKgktIGFzeW5jIGFuZCBwZXJpb2RpYyBzY2hlZHVsZXMsIHNoYXJlZCBieSBIQyBhbmQgSENEIC4uLiB0aGVzZQorICoJICBuZWVkIHRvIHVzZSBkbWFfcG9vbCBvciBkbWFfYWxsb2NfY29oZXJlbnQKKyAqCS0gZHJpdmVyIGJ1ZmZlcnMsIHJlYWQvd3JpdHRlbiBieSBIQyAuLi4gdGhlIGhjZCBnbHVlIG9yIHRoZQorICoJICBkZXZpY2UgZHJpdmVyIHByb3ZpZGVzIHVzIHdpdGggZG1hIGFkZHJlc3NlcworICoKKyAqIFRoZXJlJ3MgYWxzbyBQQ0kgInJlZ2lzdGVyIiBkYXRhLCB3aGljaCBpcyBtZW1vcnkgbWFwcGVkLgorICogTm8gbWVtb3J5IHNlZW4gYnkgdGhpcyBkcml2ZXIgaXMgcGFnYWJsZS4KKyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBvaGNpX2hjZF9pbml0IChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCit7CisJb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXM7CisJc3Bpbl9sb2NrX2luaXQgKCZvaGNpLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCAoJm9oY2ktPnBlbmRpbmcpOworCUlOSVRfV09SSyAoJm9oY2ktPnJoX3Jlc3VtZSwgb2hjaV9yaF9yZXN1bWUsIG9oY2lfdG9faGNkKG9oY2kpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBvaGNpX21lbV9pbml0IChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCit7CisJb2hjaS0+dGRfY2FjaGUgPSBkbWFfcG9vbF9jcmVhdGUgKCJvaGNpX3RkIiwKKwkJb2hjaV90b19oY2Qob2hjaSktPnNlbGYuY29udHJvbGxlciwKKwkJc2l6ZW9mIChzdHJ1Y3QgdGQpLAorCQkzMiAvKiBieXRlIGFsaWdubWVudCAqLywKKwkJMCAvKiBubyBwYWdlLWNyb3NzaW5nIGlzc3VlcyAqLyk7CisJaWYgKCFvaGNpLT50ZF9jYWNoZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJb2hjaS0+ZWRfY2FjaGUgPSBkbWFfcG9vbF9jcmVhdGUgKCJvaGNpX2VkIiwKKwkJb2hjaV90b19oY2Qob2hjaSktPnNlbGYuY29udHJvbGxlciwKKwkJc2l6ZW9mIChzdHJ1Y3QgZWQpLAorCQkxNiAvKiBieXRlIGFsaWdubWVudCAqLywKKwkJMCAvKiBubyBwYWdlLWNyb3NzaW5nIGlzc3VlcyAqLyk7CisJaWYgKCFvaGNpLT5lZF9jYWNoZSkgeworCQlkbWFfcG9vbF9kZXN0cm95IChvaGNpLT50ZF9jYWNoZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb2hjaV9tZW1fY2xlYW51cCAoc3RydWN0IG9oY2lfaGNkICpvaGNpKQoreworCWlmIChvaGNpLT50ZF9jYWNoZSkgeworCQlkbWFfcG9vbF9kZXN0cm95IChvaGNpLT50ZF9jYWNoZSk7CisJCW9oY2ktPnRkX2NhY2hlID0gTlVMTDsKKwl9CisJaWYgKG9oY2ktPmVkX2NhY2hlKSB7CisJCWRtYV9wb29sX2Rlc3Ryb3kgKG9oY2ktPmVkX2NhY2hlKTsKKwkJb2hjaS0+ZWRfY2FjaGUgPSBOVUxMOworCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogb2hjaSAiZG9uZSBsaXN0IiBwcm9jZXNzaW5nIG5lZWRzIHRoaXMgbWFwcGluZyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGQgKgorZG1hX3RvX3RkIChzdHJ1Y3Qgb2hjaV9oY2QgKmhjLCBkbWFfYWRkcl90IHRkX2RtYSkKK3sKKwlzdHJ1Y3QgdGQgKnRkOworCisJdGRfZG1hICY9IFREX01BU0s7CisJdGQgPSBoYy0+dGRfaGFzaCBbVERfSEFTSF9GVU5DKHRkX2RtYSldOworCXdoaWxlICh0ZCAmJiB0ZC0+dGRfZG1hICE9IHRkX2RtYSkKKwkJdGQgPSB0ZC0+dGRfaGFzaDsKKwlyZXR1cm4gdGQ7Cit9CisKKy8qIFREcyAuLi4gKi8KK3N0YXRpYyBzdHJ1Y3QgdGQgKgordGRfYWxsb2MgKHN0cnVjdCBvaGNpX2hjZCAqaGMsIGludCBtZW1fZmxhZ3MpCit7CisJZG1hX2FkZHJfdAlkbWE7CisJc3RydWN0IHRkCSp0ZDsKKworCXRkID0gZG1hX3Bvb2xfYWxsb2MgKGhjLT50ZF9jYWNoZSwgbWVtX2ZsYWdzLCAmZG1hKTsKKwlpZiAodGQpIHsKKwkJLyogaW4gY2FzZSBoYyBmZXRjaGVzIGl0LCBtYWtlIGl0IGxvb2sgZGVhZCAqLworCQltZW1zZXQgKHRkLCAwLCBzaXplb2YgKnRkKTsKKwkJdGQtPmh3TmV4dFREID0gY3B1X3RvX2hjMzIgKGhjLCBkbWEpOworCQl0ZC0+dGRfZG1hID0gZG1hOworCQkvKiBoYXNoZWQgaW4gdGRfZmlsbCAqLworCX0KKwlyZXR1cm4gdGQ7Cit9CisKK3N0YXRpYyB2b2lkCit0ZF9mcmVlIChzdHJ1Y3Qgb2hjaV9oY2QgKmhjLCBzdHJ1Y3QgdGQgKnRkKQoreworCXN0cnVjdCB0ZAkqKnByZXYgPSAmaGMtPnRkX2hhc2ggW1REX0hBU0hfRlVOQyAodGQtPnRkX2RtYSldOworCisJd2hpbGUgKCpwcmV2ICYmICpwcmV2ICE9IHRkKQorCQlwcmV2ID0gJigqcHJldiktPnRkX2hhc2g7CisJaWYgKCpwcmV2KQorCQkqcHJldiA9IHRkLT50ZF9oYXNoOworCWVsc2UgaWYgKCh0ZC0+aHdJTkZPICYgY3B1X3RvX2hjMzIoaGMsIFREX0RPTkUpKSAhPSAwKQorCQlvaGNpX2RiZyAoaGMsICJubyBoYXNoIGZvciB0ZCAlcFxuIiwgdGQpOworCWRtYV9wb29sX2ZyZWUgKGhjLT50ZF9jYWNoZSwgdGQsIHRkLT50ZF9kbWEpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBFRHMgLi4uICovCitzdGF0aWMgc3RydWN0IGVkICoKK2VkX2FsbG9jIChzdHJ1Y3Qgb2hjaV9oY2QgKmhjLCBpbnQgbWVtX2ZsYWdzKQoreworCWRtYV9hZGRyX3QJZG1hOworCXN0cnVjdCBlZAkqZWQ7CisKKwllZCA9IGRtYV9wb29sX2FsbG9jIChoYy0+ZWRfY2FjaGUsIG1lbV9mbGFncywgJmRtYSk7CisJaWYgKGVkKSB7CisJCW1lbXNldCAoZWQsIDAsIHNpemVvZiAoKmVkKSk7CisJCUlOSVRfTElTVF9IRUFEICgmZWQtPnRkX2xpc3QpOworCQllZC0+ZG1hID0gZG1hOworCX0KKwlyZXR1cm4gZWQ7Cit9CisKK3N0YXRpYyB2b2lkCitlZF9mcmVlIChzdHJ1Y3Qgb2hjaV9oY2QgKmhjLCBzdHJ1Y3QgZWQgKmVkKQoreworCWRtYV9wb29sX2ZyZWUgKGhjLT5lZF9jYWNoZSwgZWQsIGVkLT5kbWEpOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDI4NWYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYwpAQCAtMCwwICsxLDU2MCBAQAorLyoKKyAqIE9IQ0kgSENEIChIb3N0IENvbnRyb2xsZXIgRHJpdmVyKSBmb3IgVVNCLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNSBEYXZpZCBCcm93bmVsbAorICogKEMpIENvcHlyaWdodCAyMDAyIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKiAKKyAqIE9NQVAgQnVzIEdsdWUKKyAqCisgKiBNb2RpZmllZCBmb3IgT01BUCBieSBUb255IExpbmRncmVuIDx0b255QGF0b21pZGUuY29tPgorICogQmFzZWQgb24gdGhlIDIuNCBPTUFQIE9IQ0kgZHJpdmVyIG9yaWdpbmFsbHkgZG9uZSBieSBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqIGFuZCBvbiBvaGNpLXNhMTExMS5jIGJ5IENocmlzdG9waGVyIEhvb3ZlciA8Y2hAaHBsLmhwLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC4KKyAqLworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9mcGdhLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+CisKKworLyogT01BUC0xNTEwIE9IQ0kgaGFzIGl0cyBvd24gTU1VIGZvciBETUEgKi8KKyNkZWZpbmUgT01BUDE1MTBfTEJfTUVNU0laRQkzMgkvKiBTaG91bGQgYmUgc2FtZSBhcyBTRFJBTSBzaXplICovCisjZGVmaW5lIE9NQVAxNTEwX0xCX0NMT0NLX0RJVgkweGZmZmVjMTBjCisjZGVmaW5lIE9NQVAxNTEwX0xCX01NVV9DVEwJMHhmZmZlYzIwOAorI2RlZmluZSBPTUFQMTUxMF9MQl9NTVVfTENLCTB4ZmZmZWMyMjQKKyNkZWZpbmUgT01BUDE1MTBfTEJfTU1VX0xEX1RMQgkweGZmZmVjMjI4CisjZGVmaW5lIE9NQVAxNTEwX0xCX01NVV9DQU1fSAkweGZmZmVjMjJjCisjZGVmaW5lIE9NQVAxNTEwX0xCX01NVV9DQU1fTAkweGZmZmVjMjMwCisjZGVmaW5lIE9NQVAxNTEwX0xCX01NVV9SQU1fSAkweGZmZmVjMjM0CisjZGVmaW5lIE9NQVAxNTEwX0xCX01NVV9SQU1fTAkweGZmZmVjMjM4CisKKworI2lmbmRlZiBDT05GSUdfQVJDSF9PTUFQCisjZXJyb3IgIlRoaXMgZmlsZSBpcyBPTUFQIGJ1cyBnbHVlLiAgQ09ORklHX09NQVAgbXVzdCBiZSBkZWZpbmVkLiIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1RQUzY1MDEwCisjaW5jbHVkZSA8YXNtL2FyY2gvdHBzNjUwMTAuaD4KKyNlbHNlCisKKyNkZWZpbmUgTE9XCTAKKyNkZWZpbmUgSElHSAkxCisKKyNkZWZpbmUgR1BJTzEJMQorCitzdGF0aWMgaW5saW5lIGludCB0cHM2NTAxMF9zZXRfZ3Bpb19vdXRfdmFsdWUodW5zaWduZWQgZ3BpbywgdW5zaWduZWQgdmFsdWUpCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCitleHRlcm4gaW50IHVzYl9kaXNhYmxlZCh2b2lkKTsKK2V4dGVybiBpbnQgb2NwaV9lbmFibGUodm9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICp1c2JfaG9zdF9jazsKKworc3RhdGljIHZvaWQgb21hcF9vaGNpX2Nsb2NrX3Bvd2VyKGludCBvbikKK3sKKwlpZiAob24pIHsKKwkJY2xrX2VuYWJsZSh1c2JfaG9zdF9jayk7CisJCS8qIGd1ZXNzdGltYXRlIGZvciBUNSA9PSAxeCAzMksgY2xvY2sgKyBBUExMIGxvY2sgdGltZSAqLworCQl1ZGVsYXkoMTAwKTsKKwl9IGVsc2UgeworCQljbGtfZGlzYWJsZSh1c2JfaG9zdF9jayk7CisJfQorfQorCisvKgorICogQm9hcmQgc3BlY2lmaWMgZ2FuZy1zd2l0Y2hlZCB0cmFuc2NlaXZlciBwb3dlciBvbi9vZmYuCisgKiBOT1RFOiAgT1NLIHN1cHBsaWVzIHBvd2VyIGZyb20gREMsIG5vdCBiYXR0ZXJ5LgorICovCitzdGF0aWMgaW50IG9tYXBfb2hjaV90cmFuc2NlaXZlcl9wb3dlcihpbnQgb24pCit7CisJaWYgKG9uKSB7CisJCWlmIChtYWNoaW5lX2lzX29tYXBfaW5ub3ZhdG9yKCkgJiYgY3B1X2lzX29tYXAxNTEwKCkpCisJCQlmcGdhX3dyaXRlKGZwZ2FfcmVhZChJTk5PVkFUT1JfRlBHQV9DQU1fVVNCX0NPTlRST0wpCisJCQkJfCAoKDEgPDwgNS8qdXNiMSovKSB8ICgxIDw8IDMvKnVzYjIqLykpLCAKKwkJCSAgICAgICBJTk5PVkFUT1JfRlBHQV9DQU1fVVNCX0NPTlRST0wpOworCQllbHNlIGlmIChtYWNoaW5lX2lzX29tYXBfb3NrKCkpCisJCQl0cHM2NTAxMF9zZXRfZ3Bpb19vdXRfdmFsdWUoR1BJTzEsIExPVyk7CisJfSBlbHNlIHsKKwkJaWYgKG1hY2hpbmVfaXNfb21hcF9pbm5vdmF0b3IoKSAmJiBjcHVfaXNfb21hcDE1MTAoKSkKKwkJCWZwZ2Ffd3JpdGUoZnBnYV9yZWFkKElOTk9WQVRPUl9GUEdBX0NBTV9VU0JfQ09OVFJPTCkKKwkJCQkmIH4oKDEgPDwgNS8qdXNiMSovKSB8ICgxIDw8IDMvKnVzYjIqLykpLCAKKwkJCSAgICAgICBJTk5PVkFUT1JfRlBHQV9DQU1fVVNCX0NPTlRST0wpOworCQllbHNlIGlmIChtYWNoaW5lX2lzX29tYXBfb3NrKCkpCisJCQl0cHM2NTAxMF9zZXRfZ3Bpb19vdXRfdmFsdWUoR1BJTzEsIEhJR0gpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogT01BUC0xNTEwIHNwZWNpZmljIExvY2FsIEJ1cyBjbG9jayBvbi9vZmYKKyAqLworc3RhdGljIGludCBvbWFwXzE1MTBfbG9jYWxfYnVzX3Bvd2VyKGludCBvbikKK3sKKwlpZiAob24pIHsKKwkJb21hcF93cml0ZWwoKDEgPDwgMSkgfCAoMSA8PCAwKSwgT01BUDE1MTBfTEJfTU1VX0NUTCk7CisJCXVkZWxheSgyMDApOworCX0gZWxzZSB7CisJCW9tYXBfd3JpdGVsKDAsIE9NQVAxNTEwX0xCX01NVV9DVEwpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogT01BUC0xNTEwIHNwZWNpZmljIExvY2FsIEJ1cyBpbml0aWFsaXphdGlvbgorICogTk9URTogVGhpcyBhc3N1bWVzIDMyTUIgbWVtb3J5IHNpemUgaW4gT01BUDE1MTBMQl9NRU1TSVpFLgorICogICAgICAgU2VlIGFsc28gYXJjaC9tYWNoLW9tYXAvbWVtb3J5LmggZm9yIF9fdmlydF90b19kbWEoKSBhbmQgCisgKiAgICAgICBfX2RtYV90b192aXJ0KCkgd2hpY2ggbmVlZCB0byBtYXRjaCB3aXRoIHRoZSBwaHlzaWNhbCAKKyAqICAgICAgIExvY2FsIEJ1cyBhZGRyZXNzIGJlbG93LgorICovCitzdGF0aWMgaW50IG9tYXBfMTUxMF9sb2NhbF9idXNfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCB0bGI7CisJdW5zaWduZWQgbG9uZyBsYmFkZHIsIHBoeXNhZGRyOworCisJb21hcF93cml0ZWwoKG9tYXBfcmVhZGwoT01BUDE1MTBfTEJfQ0xPQ0tfRElWKSAmIDB4ZmZmZmZmZjgpIHwgMHg0LCAKKwkgICAgICAgT01BUDE1MTBfTEJfQ0xPQ0tfRElWKTsKKworCS8qIENvbmZpZ3VyZSB0aGUgTG9jYWwgQnVzIE1NVSB0YWJsZSAqLworCWZvciAodGxiID0gMDsgdGxiIDwgT01BUDE1MTBfTEJfTUVNU0laRTsgdGxiKyspIHsKKwkJbGJhZGRyID0gdGxiICogMHgwMDEwMDAwMCArIE9NQVAxNTEwX0xCX09GRlNFVDsKKwkJcGh5c2FkZHIgPSB0bGIgKiAweDAwMTAwMDAwICsgUEhZU19PRkZTRVQ7CisJCW9tYXBfd3JpdGVsKChsYmFkZHIgJiAweDBmZmZmZmZmKSA+PiAyMiwgT01BUDE1MTBfTEJfTU1VX0NBTV9IKTsKKwkJb21hcF93cml0ZWwoKChsYmFkZHIgJiAweDAwM2ZmYzAwKSA+PiA2KSB8IDB4YywgCisJCSAgICAgICBPTUFQMTUxMF9MQl9NTVVfQ0FNX0wpOworCQlvbWFwX3dyaXRlbChwaHlzYWRkciA+PiAxNiwgT01BUDE1MTBfTEJfTU1VX1JBTV9IKTsKKwkJb21hcF93cml0ZWwoKHBoeXNhZGRyICYgMHgwMDAwZmMwMCkgfCAweDMwMCwgT01BUDE1MTBfTEJfTU1VX1JBTV9MKTsKKwkJb21hcF93cml0ZWwodGxiIDw8IDQsIE9NQVAxNTEwX0xCX01NVV9MQ0spOworCQlvbWFwX3dyaXRlbCgweDEsIE9NQVAxNTEwX0xCX01NVV9MRF9UTEIpOworCX0KKworCS8qIEVuYWJsZSB0aGUgd2Fsa2luZyB0YWJsZSAqLworCW9tYXBfd3JpdGVsKG9tYXBfcmVhZGwoT01BUDE1MTBfTEJfTU1VX0NUTCkgfCAoMSA8PCAzKSwgT01BUDE1MTBfTEJfTU1VX0NUTCk7CisJdWRlbGF5KDIwMCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmCUNPTkZJR19VU0JfT1RHCisKK3N0YXRpYyB2b2lkIHN0YXJ0X2hucChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCit7CisJY29uc3QgdW5zaWduZWQJcG9ydCA9IG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLm90Z19wb3J0IC0gMTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJb3RnX3N0YXJ0X2hucChvaGNpLT50cmFuc2NlaXZlcik7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJb2hjaS0+dHJhbnNjZWl2ZXItPnN0YXRlID0gT1RHX1NUQVRFX0FfU1VTUEVORDsKKwl3cml0ZWwgKFJIX1BTX1BTUywgJm9oY2ktPnJlZ3MtPnJvb3RodWIucG9ydHN0YXR1cyBbcG9ydF0pOworCU9UR19DVFJMX1JFRyAmPSB+T1RHX0FfQlVTUkVROworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgb21hcF9zdGFydF9oYyhzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9tYXBfdXNiX2NvbmZpZwkqY29uZmlnID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50CQkJbmVlZF90cmFuc2NlaXZlciA9IChjb25maWctPm90ZyAhPSAwKTsKKwlpbnQJCQlyZXQ7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJzdGFydGluZyBVU0IgQ29udHJvbGxlclxuIik7CisKKwlpZiAoY29uZmlnLT5vdGcpIHsKKwkJb2hjaV90b19oY2Qob2hjaSktPnNlbGYub3RnX3BvcnQgPSBjb25maWctPm90ZzsKKwkJLyogZGVmYXVsdC9taW5pbXVtIE9URyBwb3dlciBidWRnZXQ6ICA4IG1BICovCisJCW9oY2ktPnBvd2VyX2J1ZGdldCA9IDg7CisJfQorCisJLyogYm9hcmRzIGNhbiB1c2UgT1RHIHRyYW5zY2VpdmVycyBpbiBub24tT1RHIG1vZGVzICovCisJbmVlZF90cmFuc2NlaXZlciA9IG5lZWRfdHJhbnNjZWl2ZXIKKwkJCXx8IG1hY2hpbmVfaXNfb21hcF9oMigpIHx8IG1hY2hpbmVfaXNfb21hcF9oMygpOworCisJaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQorCQlvY3BpX2VuYWJsZSgpOworCisjaWZkZWYJQ09ORklHX0FSQ0hfT01BUF9PVEcKKwlpZiAobmVlZF90cmFuc2NlaXZlcikgeworCQlvaGNpLT50cmFuc2NlaXZlciA9IG90Z19nZXRfdHJhbnNjZWl2ZXIoKTsKKwkJaWYgKG9oY2ktPnRyYW5zY2VpdmVyKSB7CisJCQlpbnQJc3RhdHVzID0gb3RnX3NldF9ob3N0KG9oY2ktPnRyYW5zY2VpdmVyLAorCQkJCQkJJm9oY2lfdG9faGNkKG9oY2kpLT5zZWxmKTsKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgImluaXQgJXMgdHJhbnNjZWl2ZXIsIHN0YXR1cyAlZFxuIiwKKwkJCQkJb2hjaS0+dHJhbnNjZWl2ZXItPmxhYmVsLCBzdGF0dXMpOworCQkJaWYgKHN0YXR1cykgeworCQkJCWlmIChvaGNpLT50cmFuc2NlaXZlcikKKwkJCQkJcHV0X2RldmljZShvaGNpLT50cmFuc2NlaXZlci0+ZGV2KTsKKwkJCQlyZXR1cm4gc3RhdHVzOworCQkJfQorCQl9IGVsc2UgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZmluZCB0cmFuc2NlaXZlclxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0KKyNlbmRpZgorCisJb21hcF9vaGNpX2Nsb2NrX3Bvd2VyKDEpOworCisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJCW9tYXBfMTUxMF9sb2NhbF9idXNfcG93ZXIoMSk7CisJCW9tYXBfMTUxMF9sb2NhbF9idXNfaW5pdCgpOworCX0KKworCWlmICgocmV0ID0gb2hjaV9pbml0KG9oY2kpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBib2FyZC1zcGVjaWZpYyBwb3dlciBzd2l0Y2hpbmcgYW5kIG92ZXJjdXJyZW50IHN1cHBvcnQgKi8KKwlpZiAobWFjaGluZV9pc19vbWFwX29zaygpIHx8IG1hY2hpbmVfaXNfb21hcF9pbm5vdmF0b3IoKSkgeworCQl1MzIJcmggPSByb290aHViX2EgKG9oY2kpOworCisJCS8qIHBvd2VyIHN3aXRjaGluZyAoZ2FuZ2VkIGJ5IGRlZmF1bHQpICovCisJCXJoICY9IH5SSF9BX05QUzsKKworCQkvKiBUUFMyMDQ1IHN3aXRjaCBmb3IgaW50ZXJuYWwgdHJhbnNjZWl2ZXIgKHBvcnQgMSkgKi8KKwkJaWYgKG1hY2hpbmVfaXNfb21hcF9vc2soKSkgeworCQkJb2hjaS0+cG93ZXJfYnVkZ2V0ID0gMjUwOworCisJCQlyaCAmPSB+UkhfQV9OT0NQOworCisJCQkvKiBncGlvOSBmb3Igb3ZlcmN1cnJlbnQgZGV0Y3Rpb24gKi8KKwkJCW9tYXBfY2ZnX3JlZyhXOF8xNjEwX0dQSU85KTsKKwkJCW9tYXBfcmVxdWVzdF9ncGlvKDkpOworCQkJb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oOSwgMSAvKiBJTiAqLyk7CisKKwkJCS8qIGZvciBwYXJhbm9pYSdzIHNha2U6ICBkaXNhYmxlIFVTQi5QVUVOICovCisJCQlvbWFwX2NmZ19yZWcoVzRfVVNCX0hJR0haKTsKKwkJfQorCQlvaGNpX3dyaXRlbChvaGNpLCByaCwgJm9oY2ktPnJlZ3MtPnJvb3RodWIuYSk7CisJCWRpc3RydXN0X2Zpcm13YXJlID0gMDsKKwl9CisKKwkvKiBGSVhNRSBraHViZCBodWIgcmVxdWVzdHMgc2hvdWxkIG1hbmFnZSBwb3dlciBzd2l0Y2hpbmcgKi8KKwlvbWFwX29oY2lfdHJhbnNjZWl2ZXJfcG93ZXIoMSk7CisKKwkvKiBib2FyZCBpbml0IHdpbGwgaGF2ZSBhbHJlYWR5IGhhbmRsZWQgSE1DIGFuZCBtdXggc2V0dXAuCisJICogYW55IGV4dGVybmFsIHRyYW5zY2VpdmVyIHNob3VsZCBhbHJlYWR5IGJlIGluaXRpYWxpemVkCisJICogdG9vLCBzbyBhbGwgY29uZmlndXJlZCBwb3J0cyB1c2UgdGhlIHJpZ2h0IHNpZ25hbGluZyBub3cuCisJICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb21hcF9zdG9wX2hjKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAic3RvcHBpbmcgVVNCIENvbnRyb2xsZXJcbiIpOworCW9tYXBfb2hjaV9jbG9ja19wb3dlcigwKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit2b2lkIHVzYl9oY2Rfb21hcF9yZW1vdmUgKHN0cnVjdCB1c2JfaGNkICosIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CisKKy8qIGNvbmZpZ3VyZSBzbyBhbiBIQyBkZXZpY2UgYW5kIGlkIGFyZSBhbHdheXMgcHJvdmlkZWQgKi8KKy8qIGFsd2F5cyBjYWxsZWQgd2l0aCBwcm9jZXNzIGNvbnRleHQ7IHNsZWVwaW5nIGlzIE9LICovCisKKworLyoqCisgKiB1c2JfaGNkX29tYXBfcHJvYmUgLSBpbml0aWFsaXplIE9NQVAtYmFzZWQgSENEcworICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogQWxsb2NhdGVzIGJhc2ljIHJlc291cmNlcyBmb3IgdGhpcyBVU0IgaG9zdCBjb250cm9sbGVyLCBhbmQKKyAqIHRoZW4gaW52b2tlcyB0aGUgc3RhcnQoKSBtZXRob2QgZm9yIHRoZSBIQ0QgYXNzb2NpYXRlZCB3aXRoIGl0CisgKiB0aHJvdWdoIHRoZSBob3RwbHVnIGVudHJ5J3MgZHJpdmVyX2RhdGEuCisgKi8KK2ludCB1c2JfaGNkX29tYXBfcHJvYmUgKGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciwKKwkJCSAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSAwOworCXN0cnVjdCBvaGNpX2hjZCAqb2hjaTsKKworCWlmIChwZGV2LT5udW1fcmVzb3VyY2VzICE9IDIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJoY2QgcHJvYmU6IGludmFsaWQgbnVtX3Jlc291cmNlczogJWlcbiIsIAorCQkgICAgICAgcGRldi0+bnVtX3Jlc291cmNlcyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChwZGV2LT5yZXNvdXJjZVswXS5mbGFncyAhPSBJT1JFU09VUkNFX01FTSAKKwkJCXx8IHBkZXYtPnJlc291cmNlWzFdLmZsYWdzICE9IElPUkVTT1VSQ0VfSVJRKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaGNkIHByb2JlOiBpbnZhbGlkIHJlc291cmNlIHR5cGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwl1c2JfaG9zdF9jayA9IGNsa19nZXQoMCwgInVzYl9oaGNfY2siKTsKKwlpZiAoSVNfRVJSKHVzYl9ob3N0X2NrKSkKKwkJcmV0dXJuIFBUUl9FUlIodXNiX2hvc3RfY2spOworCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QgKGRyaXZlciwgJnBkZXYtPmRldiwgcGRldi0+ZGV2LmJ1c19pZCk7CisJaWYgKCFoY2QpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnIwOworCX0KKwloY2QtPnJzcmNfc3RhcnQgPSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydDsKKwloY2QtPnJzcmNfbGVuID0gcGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBlcnIxOworCX0KKworCWhjZC0+cmVncyA9ICh2b2lkIF9faW9tZW0gKikgKGludCkgSU9fQUREUkVTUyhoY2QtPnJzcmNfc3RhcnQpOworCisJb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CisJb2hjaV9oY2RfaW5pdChvaGNpKTsKKworCXJldHZhbCA9IG9tYXBfc3RhcnRfaGMob2hjaSwgcGRldik7CisJaWYgKHJldHZhbCA8IDApCisJCWdvdG8gZXJyMjsKKworCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKSwgU0FfSU5URVJSVVBUKTsKKwlpZiAocmV0dmFsID09IDApCisJCXJldHVybiByZXR2YWw7CisKKwlvbWFwX3N0b3BfaGMocGRldik7CitlcnIyOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworZXJyMToKKwl1c2JfcHV0X2hjZChoY2QpOworZXJyMDoKKwljbGtfcHV0KHVzYl9ob3N0X2NrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qIG1heSBiZSBjYWxsZWQgd2l0aCBjb250cm9sbGVyLCBidXMsIGFuZCBkZXZpY2VzIGFjdGl2ZSAqLworCisvKioKKyAqIHVzYl9oY2Rfb21hcF9yZW1vdmUgLSBzaHV0ZG93biBwcm9jZXNzaW5nIGZvciBPTUFQLWJhc2VkIEhDRHMKKyAqIEBkZXY6IFVTQiBIb3N0IENvbnRyb2xsZXIgYmVpbmcgcmVtb3ZlZAorICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogUmV2ZXJzZXMgdGhlIGVmZmVjdCBvZiB1c2JfaGNkX29tYXBfcHJvYmUoKSwgZmlyc3QgaW52b2tpbmcKKyAqIHRoZSBIQ0QncyBzdG9wKCkgbWV0aG9kLiAgSXQgaXMgYWx3YXlzIGNhbGxlZCBmcm9tIGEgdGhyZWFkCisgKiBjb250ZXh0LCBub3JtYWxseSAicm1tb2QiLCAiYXBtZCIsIG9yIHNvbWV0aGluZyBzaW1pbGFyLgorICoKKyAqLwordm9pZCB1c2JfaGNkX29tYXBfcmVtb3ZlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisJaWYgKG1hY2hpbmVfaXNfb21hcF9vc2soKSkKKwkJb21hcF9mcmVlX2dwaW8oOSk7CisJb21hcF9zdG9wX2hjKHBkZXYpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCXVzYl9wdXRfaGNkKGhjZCk7CisJY2xrX3B1dCh1c2JfaG9zdF9jayk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitvaGNpX29tYXBfc3RhcnQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IG9tYXBfdXNiX2NvbmZpZyAqY29uZmlnOworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCWludAkJcmV0OworCisJY29uZmlnID0gaGNkLT5zZWxmLmNvbnRyb2xsZXItPnBsYXRmb3JtX2RhdGE7CisJaWYgKGNvbmZpZy0+b3RnIHx8IGNvbmZpZy0+cndjKQorCQl3cml0ZWwoT0hDSV9DVFJMX1JXQywgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCisJaWYgKChyZXQgPSBvaGNpX3J1biAob2hjaSkpIDwgMCkgeworCQlkZXZfZXJyKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiY2FuJ3Qgc3RhcnRcbiIpOworCQlvaGNpX3N0b3AgKGhjZCk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZlciBvaGNpX29tYXBfaGNfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbiA9CQloY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjID0JCSJPTUFQIE9IQ0kiLAorCS5oY2RfcHJpdl9zaXplID0Jc2l6ZW9mKHN0cnVjdCBvaGNpX2hjZCksCisKKwkvKgorCSAqIGdlbmVyaWMgaGFyZHdhcmUgbGlua2FnZQorCSAqLworCS5pcnEgPQkJCW9oY2lfaXJxLAorCS5mbGFncyA9CQlIQ0RfVVNCMTEgfCBIQ0RfTUVNT1JZLAorCisJLyoKKwkgKiBiYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucworCSAqLworCS5zdGFydCA9CQlvaGNpX29tYXBfc3RhcnQsCisJLnN0b3AgPQkJCW9oY2lfc3RvcCwKKworCS8qCisJICogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMKKwkgKi8KKwkudXJiX2VucXVldWUgPQkJb2hjaV91cmJfZW5xdWV1ZSwKKwkudXJiX2RlcXVldWUgPQkJb2hjaV91cmJfZGVxdWV1ZSwKKwkuZW5kcG9pbnRfZGlzYWJsZSA9CW9oY2lfZW5kcG9pbnRfZGlzYWJsZSwKKworCS8qCisJICogc2NoZWR1bGluZyBzdXBwb3J0CisJICovCisJLmdldF9mcmFtZV9udW1iZXIgPQlvaGNpX2dldF9mcmFtZSwKKworCS8qCisJICogcm9vdCBodWIgc3VwcG9ydAorCSAqLworCS5odWJfc3RhdHVzX2RhdGEgPQlvaGNpX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wgPQkJb2hjaV9odWJfY29udHJvbCwKKyNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKKwkuaHViX3N1c3BlbmQgPQkJb2hjaV9odWJfc3VzcGVuZCwKKwkuaHViX3Jlc3VtZSA9CQlvaGNpX2h1Yl9yZXN1bWUsCisjZW5kaWYKKwkuc3RhcnRfcG9ydF9yZXNldCA9CW9oY2lfc3RhcnRfcG9ydF9yZXNldCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgb2hjaV9oY2Rfb21hcF9kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiB1c2JfaGNkX29tYXBfcHJvYmUoJm9oY2lfb21hcF9oY19kcml2ZXIsCisJCQkJdG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOworfQorCitzdGF0aWMgaW50IG9oY2lfaGNkX29tYXBfZHJ2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG9oY2lfaGNkCQkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCisJdXNiX2hjZF9vbWFwX3JlbW92ZShoY2QsIHBkZXYpOworCWlmIChvaGNpLT50cmFuc2NlaXZlcikgeworCQkodm9pZCkgb3RnX3NldF9ob3N0KG9oY2ktPnRyYW5zY2VpdmVyLCAwKTsKKwkJcHV0X2RldmljZShvaGNpLT50cmFuc2NlaXZlci0+ZGV2KTsKKwl9CisJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmCUNPTkZJR19QTQorCisvKiBzdGF0ZXMgbWF0Y2ggUENJIHVzYWdlLCBhbHdheXMgc3VzcGVuZGluZyB0aGUgcm9vdCBodWIgZXhjZXB0IHRoYXQKKyAqIDQgfj0gRDNjb2xkIChBQ1BJIEQzKSB3aXRoIGNsb2NrIG9mZiAocmVzdW1lIHNlZXMgcmVzZXQpLgorICovCisKK3N0YXRpYyBpbnQgb2hjaV9vbWFwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgc3RhdGUsIHUzMiBsZXZlbCkKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CisJaW50CQlzdGF0dXMgPSAtRUlOVkFMOworCisJaWYgKGxldmVsICE9IFNVU1BFTkRfUE9XRVJfRE9XTikKKwkJcmV0dXJuIDA7CisJaWYgKHN0YXRlIDw9IGRldi0+cG93ZXIucG93ZXJfc3RhdGUpCisJCXJldHVybiAwOworCisJZGV2X2RiZyhkZXYsICJzdXNwZW5kIHRvICVkXG4iLCBzdGF0ZSk7CisJZG93bigmb2hjaV90b19oY2Qob2hjaSktPnNlbGYucm9vdF9odWItPnNlcmlhbGl6ZSk7CisJc3RhdHVzID0gb2hjaV9odWJfc3VzcGVuZChvaGNpX3RvX2hjZChvaGNpKSk7CisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCWlmIChzdGF0ZSA+PSA0KSB7CisJCQlvbWFwX29oY2lfY2xvY2tfcG93ZXIoMCk7CisJCQlvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5yb290X2h1Yi0+c3RhdGUgPQorCQkJCQlVU0JfU1RBVEVfU1VTUEVOREVEOworCQkJc3RhdGUgPSA0OworCQl9CisJCW9oY2lfdG9faGNkKG9oY2kpLT5zdGF0ZSA9IEhDX1NUQVRFX1NVU1BFTkRFRDsKKwkJZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOworCX0KKwl1cCgmb2hjaV90b19oY2Qob2hjaSktPnNlbGYucm9vdF9odWItPnNlcmlhbGl6ZSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBvaGNpX29tYXBfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGxldmVsKQoreworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKKwlpbnQJCXN0YXR1cyA9IDA7CisKKwlpZiAobGV2ZWwgIT0gUkVTVU1FX1BPV0VSX09OKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSkgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSkpCisJCQltc2xlZXAoNSk7CisJCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzOworCQlvbWFwX29oY2lfY2xvY2tfcG93ZXIoMSk7CisJCS8qIEZBTExUSFJPVUdIICovCisJZGVmYXVsdDoKKwkJZGV2X2RiZyhkZXYsICJyZXN1bWUgZnJvbSAlZFxuIiwgZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSk7CisjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECisJCS8qIGdldCBleHRyYSBjbGVhbnVwIGV2ZW4gaWYgcmVtb3RlIHdha2V1cCBpc24ndCBpbiB1c2UgKi8KKwkJc3RhdHVzID0gdXNiX3Jlc3VtZV9kZXZpY2Uob2hjaV90b19oY2Qob2hjaSktPnNlbGYucm9vdF9odWIpOworI2Vsc2UKKwkJZG93bigmb2hjaV90b19oY2Qob2hjaSktPnNlbGYucm9vdF9odWItPnNlcmlhbGl6ZSk7CisJCXN0YXR1cyA9IG9oY2lfaHViX3Jlc3VtZShvaGNpX3RvX2hjZChvaGNpKSk7CisJCXVwKCZvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5yb290X2h1Yi0+c2VyaWFsaXplKTsKKyNlbmRpZgorCQlpZiAoc3RhdHVzID09IDApCisJCQlkZXYtPnBvd2VyLnBvd2VyX3N0YXRlID0gMDsKKwkJYnJlYWs7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogRHJpdmVyIGRlZmluaXRpb24gdG8gcmVnaXN0ZXIgd2l0aCB0aGUgT01BUCBidXMKKyAqLworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG9oY2lfaGNkX29tYXBfZHJpdmVyID0geworCS5uYW1lCQk9ICJvaGNpIiwKKwkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkucHJvYmUJCT0gb2hjaV9oY2Rfb21hcF9kcnZfcHJvYmUsCisJLnJlbW92ZQkJPSBvaGNpX2hjZF9vbWFwX2Rydl9yZW1vdmUsCisjaWZkZWYJQ09ORklHX1BNCisJLnN1c3BlbmQJPSBvaGNpX29tYXBfc3VzcGVuZCwKKwkucmVzdW1lCQk9IG9oY2lfb21hcF9yZXN1bWUsCisjZW5kaWYKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9oY2lfaGNkX29tYXBfaW5pdCAodm9pZCkKK3sKKwlwcmludGsgKEtFUk5fREVCVUcgIiVzOiAiIERSSVZFUl9JTkZPICIgKE9NQVApXG4iLCBoY2RfbmFtZSk7CisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXByX2RlYnVnKCIlczogYmxvY2sgc2l6ZXM6IGVkICVaZCB0ZCAlWmRcbiIsIGhjZF9uYW1lLAorCQlzaXplb2YgKHN0cnVjdCBlZCksIHNpemVvZiAoc3RydWN0IHRkKSk7CisKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9vbWFwX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvaGNpX2hjZF9vbWFwX2NsZWFudXAgKHZvaWQpCit7CisJZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX29tYXBfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQgKG9oY2lfaGNkX29tYXBfaW5pdCk7Cittb2R1bGVfZXhpdCAob2hjaV9oY2Rfb21hcF9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjExNTgyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jCkBAIC0wLDAgKzEsMjY0IEBACisvKgorICogT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCisgKgorICogKEMpIENvcHlyaWdodCAxOTk5IFJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAyIERhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogCisgKiBbIEluaXRpYWxpc2F0aW9uIGlzIGJhc2VkIG9uIExpbnVzJyAgXQorICogWyB1aGNpIGNvZGUgYW5kIGdyZWdzIG9oY2kgZnJhZ21lbnRzIF0KKyAqIFsgKEMpIENvcHlyaWdodCAxOTk5IExpbnVzIFRvcnZhbGRzICBdCisgKiBbIChDKSBDb3B5cmlnaHQgMTk5OSBHcmVnb3J5IFAuIFNtaXRoXQorICogCisgKiBQQ0kgQnVzIEdsdWUKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC4KKyAqLworIAorI2lmZGVmIENPTkZJR19QTUFDX1BCT09LCisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vcG1hY19mZWF0dXJlLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2lmbmRlZiBDT05GSUdfUE0KKyMJZGVmaW5lIENPTkZJR19QTQorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfUENJCisjZXJyb3IgIlRoaXMgZmlsZSBpcyBQQ0kgYnVzIGdsdWUuICBDT05GSUdfUENJIG11c3QgYmUgZGVmaW5lZC4iCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludAorb2hjaV9wY2lfcmVzZXQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CisKKwlvaGNpX2hjZF9pbml0IChvaGNpKTsKKwlyZXR1cm4gb2hjaV9pbml0IChvaGNpKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQKK29oY2lfcGNpX3N0YXJ0IChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCWludAkJcmV0OworCisJaWYoaGNkLT5zZWxmLmNvbnRyb2xsZXIgJiYgaGNkLT5zZWxmLmNvbnRyb2xsZXItPmJ1cyA9PSAmcGNpX2J1c190eXBlKSB7CisJCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihoY2QtPnNlbGYuY29udHJvbGxlcik7CisKKwkJLyogQU1EIDc1NiwgZm9yIG1vc3QgY2hpcHMgKGVhcmx5IHJldnMpLCBjb3JydXB0cyByZWdpc3RlcgorCQkgKiB2YWx1ZXMgb24gcmVhZCAuLi4gc28gZW5hYmxlIHRoZSB2ZW5kb3Igd29ya2Fyb3VuZC4KKwkJICovCisJCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BTUQKKwkJCQkmJiBwZGV2LT5kZXZpY2UgPT0gMHg3NDBjKSB7CisJCQlvaGNpLT5mbGFncyA9IE9IQ0lfUVVJUktfQU1ENzU2OworCQkJb2hjaV9pbmZvIChvaGNpLCAiQU1ENzU2IGVycmF0dW0gNCB3b3JrYXJvdW5kXG4iKTsKKwkJCS8vIGFsc28gc29tZXdoYXQgZXJyYXR1bSAxMCAoc3VzcGVuZC9yZXN1bWUgaXNzdWVzKQorCQl9CisKKwkJLyogRklYTUUgZm9yIHNvbWUgb2YgdGhlIGVhcmx5IEFNRCA3NjAgc291dGhicmlkZ2VzLCBPSENJCisJCSAqIHdvbid0IHdvcmsgYXQgYWxsLiAgYmxhY2tsaXN0IHRoZW0uCisJCSAqLworCisJCS8qIEFwcGxlJ3MgT0hDSSBkcml2ZXIgaGFzIGEgbG90IG9mIGJpemFycmUgd29ya2Fyb3VuZHMKKwkJICogZm9yIHRoaXMgY2hpcC4gIEV2aWRlbnRseSBjb250cm9sIGFuZCBidWxrIGxpc3RzCisJCSAqIGNhbiBnZXQgY29uZnVzZWQuICAoQiZXIEczIG1vZGVscywgYW5kIC4uLikKKwkJICovCisJCWVsc2UgaWYgKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX09QVEkKKwkJCQkmJiBwZGV2LT5kZXZpY2UgPT0gMHhjODYxKSB7CisJCQlvaGNpX2luZm8gKG9oY2ksCisJCQkJIldBUk5JTkc6IE9QVGkgd29ya2Fyb3VuZHMgdW5hdmFpbGFibGVcbiIpOworCQl9CisKKwkJLyogQ2hlY2sgZm9yIE5TQzg3NTYwLiBXZSBoYXZlIHRvIGxvb2sgYXQgdGhlIGJyaWRnZSAoZm4xKSB0bworCQkgKiBpZGVudGlmeSB0aGUgVVNCIChmbjIpLiBUaGlzIHF1aXJrIG1pZ2h0IGFwcGx5IHRvIG1vcmUgb3IKKwkJICogZXZlbiBhbGwgTlNDIHN0dWZmLgorCQkgKi8KKwkJZWxzZSBpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfTlMpIHsKKwkJCXN0cnVjdCBwY2lfZGV2CSpiOworCisJCQliICA9IHBjaV9maW5kX3Nsb3QgKHBkZXYtPmJ1cy0+bnVtYmVyLAorCQkJCQlQQ0lfREVWRk4gKFBDSV9TTE9UIChwZGV2LT5kZXZmbiksIDEpKTsKKwkJCWlmIChiICYmIGItPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX05TXzg3NTYwX0xJTworCQkJCQkmJiBiLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9OUykgeworCQkJCW9oY2ktPmZsYWdzIHw9IE9IQ0lfUVVJUktfU1VQRVJJTzsKKwkJCQlvaGNpX2luZm8gKG9oY2ksICJVc2luZyBOU0MgU3VwZXJJTyBzZXR1cFxuIik7CisJCQl9CisJCX0KKwl9CisKKwkvKiBOT1RFOiB0aGVyZSBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gYSBmaXJzdCByZXNldCwgdG8KKwkgKiBrZWVwIGJpb3Mvc21tIGlycXMgZnJvbSBtYWtpbmcgdHJvdWJsZQorCSAqLworCWlmICgocmV0ID0gb2hjaV9ydW4gKG9oY2kpKSA8IDApIHsKKwkJb2hjaV9lcnIgKG9oY2ksICJjYW4ndCBzdGFydFxuIik7CisJCW9oY2lfc3RvcCAoaGNkKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZglDT05GSUdfUE0KKworc3RhdGljIGludCBvaGNpX3BjaV9zdXNwZW5kIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCB1MzIgc3RhdGUpCit7CisJc3RydWN0IG9oY2lfaGNkCQkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCisJLyogc3VzcGVuZCByb290IGh1YiwgaG9waW5nIGl0IGtlZXBzIHBvd2VyIGR1cmluZyBzdXNwZW5kICovCisJaWYgKHRpbWVfYmVmb3JlIChqaWZmaWVzLCBvaGNpLT5uZXh0X3N0YXRlY2hhbmdlKSkKKwkJbXNsZWVwICgxMDApOworCisjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECisJKHZvaWQpIHVzYl9zdXNwZW5kX2RldmljZSAoaGNkLT5zZWxmLnJvb3RfaHViLCBzdGF0ZSk7CisjZWxzZQorCXVzYl9sb2NrX2RldmljZSAoaGNkLT5zZWxmLnJvb3RfaHViKTsKKwkodm9pZCkgb2hjaV9odWJfc3VzcGVuZCAoaGNkKTsKKwl1c2JfdW5sb2NrX2RldmljZSAoaGNkLT5zZWxmLnJvb3RfaHViKTsKKyNlbmRpZgorCisJLyogbGV0IHRoaW5ncyBzZXR0bGUgZG93biBhIGJpdCAqLworCW1zbGVlcCAoMTAwKTsKKwkKKyNpZmRlZiBDT05GSUdfUE1BQ19QQk9PSworCWlmIChfbWFjaGluZSA9PSBfTUFDSF9QbWFjKSB7CisJICAgCXN0cnVjdCBkZXZpY2Vfbm9kZQkqb2Zfbm9kZTsKKyAKKwkJLyogRGlzYWJsZSBVU0IgUEFEICYgY2VsbCBjbG9jayAqLworCQlvZl9ub2RlID0gcGNpX2RldmljZV90b19PRl9ub2RlICh0b19wY2lfZGV2KGhjZC0+c2VsZi5jb250cm9sbGVyKSk7CisJCWlmIChvZl9ub2RlKQorCQkJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfVVNCX0VOQUJMRSwgb2Zfbm9kZSwgMCwgMCk7CisJfQorI2VuZGlmIC8qIENPTkZJR19QTUFDX1BCT09LICovCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBvaGNpX3BjaV9yZXN1bWUgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IG9oY2lfaGNkCQkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCWludAkJCXJldHZhbCA9IDA7CisKKyNpZmRlZiBDT05GSUdfUE1BQ19QQk9PSworCWlmIChfbWFjaGluZSA9PSBfTUFDSF9QbWFjKSB7CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZTsKKworCQkvKiBSZS1lbmFibGUgVVNCIFBBRCAmIGNlbGwgY2xvY2sgKi8KKwkJb2Zfbm9kZSA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZSAodG9fcGNpX2RldihoY2QtPnNlbGYuY29udHJvbGxlcikpOworCQlpZiAob2Zfbm9kZSkKKwkJCXBtYWNfY2FsbF9mZWF0dXJlIChQTUFDX0ZUUl9VU0JfRU5BQkxFLCBvZl9ub2RlLCAwLCAxKTsKKwl9CisjZW5kaWYgLyogQ09ORklHX1BNQUNfUEJPT0sgKi8KKworCS8qIHJlc3VtZSByb290IGh1YiAqLworCWlmICh0aW1lX2JlZm9yZSAoamlmZmllcywgb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSkpCisJCW1zbGVlcCAoMTAwKTsKKyNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKKwkvKiBnZXQgZXh0cmEgY2xlYW51cCBldmVuIGlmIHJlbW90ZSB3YWtldXAgaXNuJ3QgaW4gdXNlICovCisJcmV0dmFsID0gdXNiX3Jlc3VtZV9kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yik7CisjZWxzZQorCXVzYl9sb2NrX2RldmljZSAoaGNkLT5zZWxmLnJvb3RfaHViKTsKKwlyZXR2YWwgPSBvaGNpX2h1Yl9yZXN1bWUgKGhjZCk7CisJdXNiX3VubG9ja19kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yik7CisjZW5kaWYKKworCXJldHVybiByZXR2YWw7Cit9CisKKyNlbmRpZgkvKiBDT05GSUdfUE0gKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZlciBvaGNpX3BjaV9oY19kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uID0JCWhjZF9uYW1lLAorCS5wcm9kdWN0X2Rlc2MgPQkJIk9IQ0kgSG9zdCBDb250cm9sbGVyIiwKKwkuaGNkX3ByaXZfc2l6ZSA9CXNpemVvZihzdHJ1Y3Qgb2hjaV9oY2QpLAorCisJLyoKKwkgKiBnZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UKKwkgKi8KKwkuaXJxID0JCQlvaGNpX2lycSwKKwkuZmxhZ3MgPQkJSENEX01FTU9SWSB8IEhDRF9VU0IxMSwKKworCS8qCisJICogYmFzaWMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMKKwkgKi8KKwkucmVzZXQgPQkJb2hjaV9wY2lfcmVzZXQsCisJLnN0YXJ0ID0JCW9oY2lfcGNpX3N0YXJ0LAorI2lmZGVmCUNPTkZJR19QTQorCS5zdXNwZW5kID0JCW9oY2lfcGNpX3N1c3BlbmQsCisJLnJlc3VtZSA9CQlvaGNpX3BjaV9yZXN1bWUsCisjZW5kaWYKKwkuc3RvcCA9CQkJb2hjaV9zdG9wLAorCisJLyoKKwkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcworCSAqLworCS51cmJfZW5xdWV1ZSA9CQlvaGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZSA9CQlvaGNpX3VyYl9kZXF1ZXVlLAorCS5lbmRwb2ludF9kaXNhYmxlID0Jb2hjaV9lbmRwb2ludF9kaXNhYmxlLAorCisJLyoKKwkgKiBzY2hlZHVsaW5nIHN1cHBvcnQKKwkgKi8KKwkuZ2V0X2ZyYW1lX251bWJlciA9CW9oY2lfZ2V0X2ZyYW1lLAorCisJLyoKKwkgKiByb290IGh1YiBzdXBwb3J0CisJICovCisJLmh1Yl9zdGF0dXNfZGF0YSA9CW9oY2lfaHViX3N0YXR1c19kYXRhLAorCS5odWJfY29udHJvbCA9CQlvaGNpX2h1Yl9jb250cm9sLAorI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAorCS5odWJfc3VzcGVuZCA9CQlvaGNpX2h1Yl9zdXNwZW5kLAorCS5odWJfcmVzdW1lID0JCW9oY2lfaHViX3Jlc3VtZSwKKyNlbmRpZgorCS5zdGFydF9wb3J0X3Jlc2V0ID0Jb2hjaV9zdGFydF9wb3J0X3Jlc2V0LAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkcyBbXSA9IHsgeworCS8qIGhhbmRsZSBhbnkgVVNCIE9IQ0kgY29udHJvbGxlciAqLworCVBDSV9ERVZJQ0VfQ0xBU1MoKFBDSV9DTEFTU19TRVJJQUxfVVNCIDw8IDgpIHwgMHgxMCwgfjApLAorCS5kcml2ZXJfZGF0YSA9CSh1bnNpZ25lZCBsb25nKSAmb2hjaV9wY2lfaGNfZHJpdmVyLAorCX0sIHsgLyogZW5kOiBhbGwgemVyb2VzICovIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFIChwY2ksIHBjaV9pZHMpOworCisvKiBwY2kgZHJpdmVyIGdsdWU7IHRoaXMgaXMgYSAibmV3IHN0eWxlIiBQQ0kgZHJpdmVyIG1vZHVsZSAqLworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG9oY2lfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9CQkoY2hhciAqKSBoY2RfbmFtZSwKKwkuaWRfdGFibGUgPQlwY2lfaWRzLAorCisJLnByb2JlID0JdXNiX2hjZF9wY2lfcHJvYmUsCisJLnJlbW92ZSA9CXVzYl9oY2RfcGNpX3JlbW92ZSwKKworI2lmZGVmCUNPTkZJR19QTQorCS5zdXNwZW5kID0JdXNiX2hjZF9wY2lfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX2hjZF9wY2lfcmVzdW1lLAorI2VuZGlmCit9OworCisgCitzdGF0aWMgaW50IF9faW5pdCBvaGNpX2hjZF9wY2lfaW5pdCAodm9pZCkgCit7CisJcHJpbnRrIChLRVJOX0RFQlVHICIlczogIiBEUklWRVJfSU5GTyAiIChQQ0kpXG4iLCBoY2RfbmFtZSk7CisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXByX2RlYnVnICgiJXM6IGJsb2NrIHNpemVzOiBlZCAlWmQgdGQgJVpkXG4iLCBoY2RfbmFtZSwKKwkJc2l6ZW9mIChzdHJ1Y3QgZWQpLCBzaXplb2YgKHN0cnVjdCB0ZCkpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyICgmb2hjaV9wY2lfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0IChvaGNpX2hjZF9wY2lfaW5pdCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvaGNpX2hjZF9wY2lfY2xlYW51cCAodm9pZCkgCit7CQorCXBjaV91bnJlZ2lzdGVyX2RyaXZlciAoJm9oY2lfcGNpX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCAob2hjaV9oY2RfcGNpX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBwYy1zb2MuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtc29jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5NjRjMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtc29jLmMKQEAgLTAsMCArMSwyMzQgQEAKKy8qCisgKiBPSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgorICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDIgRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiAoQykgQ29weXJpZ2h0IDIwMDIgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA1IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICogCisgKiBCdXMgR2x1ZSBmb3IgUFBDIE9uLUNoaXAgT0hDSSBkcml2ZXIKKyAqIFRlc3RlZCBvbiBGcmVlc2NhbGUgTVBDNTIwMCBhbmQgSUJNIFNUQjA0eHh4CisgKgorICogTW9kaWZpZWQgYnkgRGFsZSBGYXJuc3dvcnRoIDxkYWxlQGZhcm5zd29ydGgub3JnPiBmcm9tIG9oY2ktc2ExMTExLmMKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC4KKyAqLworCisjaW5jbHVkZSA8YXNtL3VzYi5oPgorCisvKiBjb25maWd1cmUgc28gYW4gSEMgZGV2aWNlIGFuZCBpZCBhcmUgYWx3YXlzIHByb3ZpZGVkICovCisvKiBhbHdheXMgY2FsbGVkIHdpdGggcHJvY2VzcyBjb250ZXh0OyBzbGVlcGluZyBpcyBPSyAqLworCisvKioKKyAqIHVzYl9oY2RfcHBjX3NvY19wcm9iZSAtIGluaXRpYWxpemUgT24tQ2hpcCBIQ0RzCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBBbGxvY2F0ZXMgYmFzaWMgcmVzb3VyY2VzIGZvciB0aGlzIFVTQiBob3N0IGNvbnRyb2xsZXIsIGFuZAorICogdGhlbiBpbnZva2VzIHRoZSBzdGFydCgpIG1ldGhvZCBmb3IgdGhlIEhDRCBhc3NvY2lhdGVkIHdpdGggaXQKKyAqIHRocm91Z2ggdGhlIGhvdHBsdWcgZW50cnkncyBkcml2ZXJfZGF0YS4KKyAqCisgKiBTdG9yZSB0aGlzIGZ1bmN0aW9uIGluIHRoZSBIQ0QncyBzdHJ1Y3QgcGNpX2RyaXZlciBhcyBwcm9iZSgpLgorICovCitzdGF0aWMgaW50IHVzYl9oY2RfcHBjX3NvY19wcm9iZShjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIsCisJCQkgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaXJxOworCXN0cnVjdCB1c2JfaGNkX3BsYXRmb3JtX2RhdGEgKnBkID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlwcl9kZWJ1ZygiaW5pdGlhbGl6aW5nIFBQQy1TT0MgVVNCIENvbnRyb2xsZXJcbiIpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAoIXJlcykgeworCQlwcl9kZWJ1ZyhfX0ZJTEVfXyAiOiBubyBpcnFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaXJxID0gcmVzLT5zdGFydDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJcHJfZGVidWcoX19GSUxFX18gIjogbm8gcmVnIGFkZHJcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwloY2QgPSB1c2JfY3JlYXRlX2hjZChkcml2ZXIsICZwZGV2LT5kZXYsICJQUEMtU09DIFVTQiIpOworCWlmICghaGNkKQorCQlyZXR1cm4gLUVOT01FTTsKKwloY2QtPnJzcmNfc3RhcnQgPSByZXMtPnN0YXJ0OworCWhjZC0+cnNyY19sZW4gPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKKwkJcHJfZGVidWcoX19GSUxFX18gIjogcmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBlcnIxOworCX0KKworCWhjZC0+cmVncyA9IGlvcmVtYXAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwlpZiAoIWhjZC0+cmVncykgeworCQlwcl9kZWJ1ZyhfX0ZJTEVfXyAiOiBpb3JlbWFwIGZhaWxlZFxuIik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMjsKKwl9CisKKwlpZiAocGQtPnN0YXJ0ICYmIChyZXR2YWwgPSBwZC0+c3RhcnQocGRldikpKQorCQlnb3RvIGVycjM7CisKKwlvaGNpID0gaGNkX3RvX29oY2koaGNkKTsKKwlvaGNpLT5mbGFncyB8PSBPSENJX0JJR19FTkRJQU47CisJb2hjaV9oY2RfaW5pdChvaGNpKTsKKworCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBTQV9JTlRFUlJVUFQpOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXByX2RlYnVnKCJSZW1vdmluZyBQUEMtU09DIFVTQiBDb250cm9sbGVyXG4iKTsKKwlpZiAocGQgJiYgcGQtPnN0b3ApCisJCXBkLT5zdG9wKHBkZXYpOworIGVycjM6CisJaW91bm1hcChoY2QtPnJlZ3MpOworIGVycjI6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisgZXJyMToKKyAJdXNiX3B1dF9oY2QoaGNkKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qIG1heSBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sbGVyIGVsZWN0cmljYWxseSBwcmVzZW50ICovCisvKiBtYXkgYmUgY2FsbGVkIHdpdGggY29udHJvbGxlciwgYnVzLCBhbmQgZGV2aWNlcyBhY3RpdmUgKi8KKworLyoqCisgKiB1c2JfaGNkX3BwY19zb2NfcmVtb3ZlIC0gc2h1dGRvd24gcHJvY2Vzc2luZyBmb3IgT24tQ2hpcCBIQ0RzCisgKiBAcGRldjogVVNCIEhvc3QgQ29udHJvbGxlciBiZWluZyByZW1vdmVkCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBSZXZlcnNlcyB0aGUgZWZmZWN0IG9mIHVzYl9oY2RfcHBjX3NvY19wcm9iZSgpLCBmaXJzdCBpbnZva2luZworICogdGhlIEhDRCdzIHN0b3AoKSBtZXRob2QuICBJdCBpcyBhbHdheXMgY2FsbGVkIGZyb20gYSB0aHJlYWQKKyAqIGNvbnRleHQsIG5vcm1hbGx5ICJybW1vZCIsICJhcG1kIiwgb3Igc29tZXRoaW5nIHNpbWlsYXIuCisgKgorICovCitzdGF0aWMgdm9pZCB1c2JfaGNkX3BwY19zb2NfcmVtb3ZlKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHVzYl9oY2RfcGxhdGZvcm1fZGF0YSAqcGQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisKKwlwcl9kZWJ1Zygic3RvcHBpbmcgUFBDLVNPQyBVU0IgQ29udHJvbGxlclxuIik7CisJaWYgKHBkICYmIHBkLT5zdG9wKQorCQlwZC0+c3RvcChwZGV2KTsKKworCWlvdW5tYXAoaGNkLT5yZWdzKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwl1c2JfaGNkX3B1dChoY2QpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdAorb2hjaV9wcGNfc29jX3N0YXJ0KHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2koaGNkKTsKKwlpbnQJCXJldDsKKworCWlmICgocmV0ID0gb2hjaV9pbml0KG9oY2kpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoKHJldCA9IG9oY2lfcnVuKG9oY2kpKSA8IDApIHsKKwkJZXJyKCJjYW4ndCBzdGFydCAlcyIsIG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmJ1c19uYW1lKTsKKwkJb2hjaV9zdG9wKGhjZCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIG9oY2lfcHBjX3NvY19oY19kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uID0JCWhjZF9uYW1lLAorCS5oY2RfcHJpdl9zaXplID0Jc2l6ZW9mKHN0cnVjdCBvaGNpX2hjZCksCisKKwkvKgorCSAqIGdlbmVyaWMgaGFyZHdhcmUgbGlua2FnZQorCSAqLworCS5pcnEgPQkJCW9oY2lfaXJxLAorCS5mbGFncyA9CQlIQ0RfVVNCMTEgfCBIQ0RfTUVNT1JZLAorCisJLyoKKwkgKiBiYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucworCSAqLworCS5zdGFydCA9CQlvaGNpX3BwY19zb2Nfc3RhcnQsCisJLnN0b3AgPQkJCW9oY2lfc3RvcCwKKworCS8qCisJICogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMKKwkgKi8KKwkudXJiX2VucXVldWUgPQkJb2hjaV91cmJfZW5xdWV1ZSwKKwkudXJiX2RlcXVldWUgPQkJb2hjaV91cmJfZGVxdWV1ZSwKKwkuZW5kcG9pbnRfZGlzYWJsZSA9CW9oY2lfZW5kcG9pbnRfZGlzYWJsZSwKKworCS8qCisJICogc2NoZWR1bGluZyBzdXBwb3J0CisJICovCisJLmdldF9mcmFtZV9udW1iZXIgPQlvaGNpX2dldF9mcmFtZSwKKworCS8qCisJICogcm9vdCBodWIgc3VwcG9ydAorCSAqLworCS5odWJfc3RhdHVzX2RhdGEgPQlvaGNpX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wgPQkJb2hjaV9odWJfY29udHJvbCwKKyNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKKwkuaHViX3N1c3BlbmQgPQkJb2hjaV9odWJfc3VzcGVuZCwKKwkuaHViX3Jlc3VtZSA9CQlvaGNpX2h1Yl9yZXN1bWUsCisjZW5kaWYKKwkuc3RhcnRfcG9ydF9yZXNldCA9CW9oY2lfc3RhcnRfcG9ydF9yZXNldCwKK307CisKK3N0YXRpYyBpbnQgb2hjaV9oY2RfcHBjX3NvY19kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlpbnQgcmV0OworCisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IHVzYl9oY2RfcHBjX3NvY19wcm9iZSgmb2hjaV9wcGNfc29jX2hjX2RyaXZlciwgcGRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvaGNpX2hjZF9wcGNfc29jX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwl1c2JfaGNkX3BwY19zb2NfcmVtb3ZlKGhjZCwgcGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBvaGNpX2hjZF9wcGNfc29jX2RyaXZlciA9IHsKKwkubmFtZQkJPSAicHBjLXNvYy1vaGNpIiwKKwkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkucHJvYmUJCT0gb2hjaV9oY2RfcHBjX3NvY19kcnZfcHJvYmUsCisJLnJlbW92ZQkJPSBvaGNpX2hjZF9wcGNfc29jX2Rydl9yZW1vdmUsCisjaWYJZGVmaW5lZChDT05GSUdfVVNCX1NVU1BFTkQpIHx8IGRlZmluZWQoQ09ORklHX1BNKQorCS8qLnN1c3BlbmQJPSBvaGNpX2hjZF9wcGNfc29jX2Rydl9zdXNwZW5kLCovCisJLyoucmVzdW1lCT0gb2hjaV9oY2RfcHBjX3NvY19kcnZfcmVzdW1lLCovCisjZW5kaWYKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9oY2lfaGNkX3BwY19zb2NfaW5pdCh2b2lkKQoreworCXByX2RlYnVnKERSSVZFUl9JTkZPICIgKFBQQyBTT0MpXG4iKTsKKwlwcl9kZWJ1ZygiYmxvY2sgc2l6ZXM6IGVkICVkIHRkICVkXG4iLCBzaXplb2Yoc3RydWN0IGVkKSwKKwkJCQkJCQlzaXplb2Yoc3RydWN0IHRkKSk7CisKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9wcGNfc29jX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvaGNpX2hjZF9wcGNfc29jX2NsZWFudXAodm9pZCkKK3sKKwlkcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2RfcHBjX3NvY19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChvaGNpX2hjZF9wcGNfc29jX2luaXQpOworbW9kdWxlX2V4aXQob2hjaV9oY2RfcHBjX3NvY19jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjM0NjRhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCkBAIC0wLDAgKzEsMzgzIEBACisvKgorICogT0hDSSBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCisgKgorICogKEMpIENvcHlyaWdodCAxOTk5IFJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAyIERhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogKEMpIENvcHlyaWdodCAyMDAyIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKgorICogQnVzIEdsdWUgZm9yIHB4YTI3eAorICoKKyAqIFdyaXR0ZW4gYnkgQ2hyaXN0b3BoZXIgSG9vdmVyIDxjaEBocGwuaHAuY29tPgorICogQmFzZWQgb24gZnJhZ21lbnRzIG9mIHByZXZpb3VzIGRyaXZlciBieSBSdXNzZWxsIEtpbmcgZXQgYWwuCisgKgorICogTW9kaWZpZWQgZm9yIExIN0E0MDQgZnJvbSBvaGNpLXNhMTExMS5jCisgKiAgYnkgRHVyZ2VzaCBQYXR0YW1hdHRhIDxwYXR0YW1hdHRhZEBzaGFycHNlYy5jb20+CisgKgorICogTW9kaWZpZWQgZm9yIHB4YTI3eCBmcm9tIG9oY2ktbGg3YTQwNC5jCisgKiAgYnkgTmljayBCYW5lIDxuaWNrQGNlY29tcHV0aW5nLmNvLnVrPiAyNi04LTIwMDQKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorCisKKyNkZWZpbmUgUE1NX05QU19NT0RFICAgICAgICAgICAxCisjZGVmaW5lIFBNTV9HTE9CQUxfTU9ERSAgICAgICAgMgorI2RlZmluZSBQTU1fUEVSUE9SVF9NT0RFICAgICAgIDMKKworI2RlZmluZSBQWEFfVUhDX01BWF9QT1JUTlVNICAgIDMKKworI2RlZmluZSBVSENSSFBTKHgpICAgICAgICAgICAgICBfX1JFRzIoIDB4NEMwMDAwNTAsICh4KTw8MiApCisKK3N0YXRpYyBpbnQgcHhhMjd4X29oY2lfcG1tX3N0YXRlOworCisvKgorICBQTU1fTlBTX01PREUgLS0gUE1NIE5vbi1wb3dlciBzd2l0Y2hpbmcgbW9kZQorICAgICAgUG9ydHMgYXJlIHBvd2VyZWQgY29udGludW91c2x5LgorCisgIFBNTV9HTE9CQUxfTU9ERSAtLSBQTU0gZ2xvYmFsIHN3aXRjaGluZyBtb2RlCisgICAgICBBbGwgcG9ydHMgYXJlIHBvd2VyZWQgYXQgdGhlIHNhbWUgdGltZS4KKworICBQTU1fUEVSUE9SVF9NT0RFIC0tIFBNTSBwZXIgcG9ydCBzd2l0Y2hpbmcgbW9kZQorICAgICAgUG9ydHMgYXJlIHBvd2VyZWQgaW5kaXZpZHVhbGx5LgorICovCitzdGF0aWMgaW50IHB4YTI3eF9vaGNpX3NlbGVjdF9wbW0oIGludCBtb2RlICkKK3sKKwlweGEyN3hfb2hjaV9wbW1fc3RhdGUgPSBtb2RlOworCisJc3dpdGNoICggbW9kZSApIHsKKwljYXNlIFBNTV9OUFNfTU9ERToKKwkJVUhDUkhEQSB8PSBSSF9BX05QUzsKKwkJYnJlYWs7IAorCWNhc2UgUE1NX0dMT0JBTF9NT0RFOgorCQlVSENSSERBICY9IH4oUkhfQV9OUFMgJiBSSF9BX1BTTSk7CisJCWJyZWFrOworCWNhc2UgUE1NX1BFUlBPUlRfTU9ERToKKwkJVUhDUkhEQSAmPSB+KFJIX0FfTlBTKTsKKwkJVUhDUkhEQSB8PSBSSF9BX1BTTTsKKworCQkvKiBTZXQgcG9ydCBwb3dlciBjb250cm9sIG1hc2sgYml0cywgb25seSAzIHBvcnRzLiAqLworCQlVSENSSERCIHw9ICgweDc8PDE3KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCBLRVJOX0VSUgorCQkJIkludmFsaWQgbW9kZSAlZCwgc2V0IHRvIG5vbi1wb3dlciBzd2l0Y2ggbW9kZS5cbiIsIAorCQkJbW9kZSApOworCisJCXB4YTI3eF9vaGNpX3BtbV9zdGF0ZSA9IFBNTV9OUFNfTU9ERTsKKwkJVUhDUkhEQSB8PSBSSF9BX05QUzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgSWYgeW91IHNlbGVjdCBQTU1fUEVSUE9SVF9NT0RFLCB5b3Ugc2hvdWxkIHNldCB0aGUgcG9ydCBwb3dlcgorICovCitzdGF0aWMgaW50IHB4YTI3eF9vaGNpX3NldF9wb3J0X3Bvd2VyKCBpbnQgcG9ydCApCit7CisJaWYgKCAocHhhMjd4X29oY2lfcG1tX3N0YXRlPT1QTU1fUEVSUE9SVF9NT0RFKQorCSAgICAgJiYgKHBvcnQ+MCkgJiYgKHBvcnQ8UFhBX1VIQ19NQVhfUE9SVE5VTSkgKSB7CisJCVVIQ1JIUFMocG9ydCkgfD0gMHgxMDA7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgIElmIHlvdSBzZWxlY3QgUE1NX1BFUlBPUlRfTU9ERSwgeW91IHNob3VsZCBzZXQgdGhlIHBvcnQgcG93ZXIKKyAqLworc3RhdGljIGludCBweGEyN3hfb2hjaV9jbGVhcl9wb3J0X3Bvd2VyKCBpbnQgcG9ydCApCit7CisJaWYgKCAocHhhMjd4X29oY2lfcG1tX3N0YXRlPT1QTU1fUEVSUE9SVF9NT0RFKSAKKwkgICAgICYmIChwb3J0PjApICYmIChwb3J0PFBYQV9VSENfTUFYX1BPUlROVU0pICkgeworCQlVSENSSFBTKHBvcnQpIHw9IDB4MjAwOworCQlyZXR1cm4gMDsKKwl9CisJIAorCXJldHVybiAtMTsKK30KKworZXh0ZXJuIGludCB1c2JfZGlzYWJsZWQodm9pZCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHB4YTI3eF9zdGFydF9oYyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcHhhX3NldF9ja2VuKENLRU4xMF9VU0JIT1NULCAxKTsKKworCVVIQ0hSIHw9IFVIQ0hSX0ZIUjsKKwl1ZGVsYXkoMTEpOworCVVIQ0hSICY9IH5VSENIUl9GSFI7CisKKwlVSENIUiB8PSBVSENIUl9GU0JJUjsKKwl3aGlsZSAoVUhDSFIgJiBVSENIUl9GU0JJUikKKwkJY3B1X3JlbGF4KCk7CisKKwkvKiBUaGlzIGNvdWxkIGJlIHByb3Blcmx5IGFic3RyYWN0ZWQgYXdheSB0aHJvdWdoIHRoZQorCSAgIGRldmljZSBkYXRhIHRoZSBkYXkgbW9yZSBtYWNoaW5lcyBhcmUgc3VwcG9ydGVkIGFuZAorCSAgIHRoZWlyIGRpZmZlcmVuY2VzIGNhbiBiZSBmaWd1cmVkIG91dCBjb3JyZWN0bHkuICovCisJaWYgKG1hY2hpbmVfaXNfbWFpbnN0b25lKCkpIHsKKwkJLyogc2V0dXAgUG9ydDEgR1BJTyBwaW4uICovCisJCXB4YV9ncGlvX21vZGUoIDg4IHwgR1BJT19BTFRfRk5fMV9JTik7CS8qIFVTQkhQV1IxICovCisJCXB4YV9ncGlvX21vZGUoIDg5IHwgR1BJT19BTFRfRk5fMl9PVVQpOwkvKiBVU0JIUEVOMSAqLworCisJCS8qIFNldCB0aGUgUG93ZXIgQ29udHJvbCBQb2xhcml0eSBMb3cgYW5kIFBvd2VyIFNlbnNlCisJCSAgIFBvbGFyaXR5IExvdyB0byBhY3RpdmUgbG93LiBTdXBwbHkgcG93ZXIgdG8gVVNCIHBvcnRzLiAqLworCQlVSENIUiA9IChVSENIUiB8IFVIQ0hSX1BDUEwgfCBVSENIUl9QU1BMKSAmCisJCQl+KFVIQ0hSX1NTRVAxIHwgVUhDSFJfU1NFUDIgfCBVSENIUl9TU0VQMyB8IFVIQ0hSX1NTRSk7CisJfQorCisJVUhDSFIgJj0gflVIQ0hSX1NTRTsKKworCVVIQ0hJRSA9IChVSENISUVfVVBSSUUgfCBVSENISUVfUldJRSk7Cit9CisKK3N0YXRpYyB2b2lkIHB4YTI3eF9zdG9wX2hjKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlVSENIUiB8PSBVSENIUl9GSFI7CisJdWRlbGF5KDExKTsKKwlVSENIUiAmPSB+VUhDSFJfRkhSOworCisJVUhDQ09NUyB8PSAxOworCXVkZWxheSgxMCk7CisKKwlweGFfc2V0X2NrZW4oQ0tFTjEwX1VTQkhPU1QsIDApOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGNvbmZpZ3VyZSBzbyBhbiBIQyBkZXZpY2UgYW5kIGlkIGFyZSBhbHdheXMgcHJvdmlkZWQgKi8KKy8qIGFsd2F5cyBjYWxsZWQgd2l0aCBwcm9jZXNzIGNvbnRleHQ7IHNsZWVwaW5nIGlzIE9LICovCisKKworLyoqCisgKiB1c2JfaGNkX3B4YTI3eF9wcm9iZSAtIGluaXRpYWxpemUgcHhhMjd4LWJhc2VkIEhDRHMKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIEFsbG9jYXRlcyBiYXNpYyByZXNvdXJjZXMgZm9yIHRoaXMgVVNCIGhvc3QgY29udHJvbGxlciwgYW5kCisgKiB0aGVuIGludm9rZXMgdGhlIHN0YXJ0KCkgbWV0aG9kIGZvciB0aGUgSENEIGFzc29jaWF0ZWQgd2l0aCBpdAorICogdGhyb3VnaCB0aGUgaG90cGx1ZyBlbnRyeSdzIGRyaXZlcl9kYXRhLgorICoKKyAqLworaW50IHVzYl9oY2RfcHhhMjd4X3Byb2JlIChjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIsCisJCQkgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisKKwlpZiAoZGV2LT5yZXNvdXJjZVsxXS5mbGFncyAhPSBJT1JFU09VUkNFX0lSUSkgeworCQlwcl9kZWJ1ZyAoInJlc291cmNlWzFdIGlzIG5vdCBJT1JFU09VUkNFX0lSUSIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwloY2QgPSB1c2JfY3JlYXRlX2hjZCAoZHJpdmVyLCAmZGV2LT5kZXYsICJweGEyN3giKTsKKwlpZiAoIWhjZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJaGNkLT5yc3JjX3N0YXJ0ID0gZGV2LT5yZXNvdXJjZVswXS5zdGFydDsKKwloY2QtPnJzcmNfbGVuID0gZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBkZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwgaGNkX25hbWUpKSB7CisJCXByX2RlYnVnKCJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkIik7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBlcnIxOworCX0KKworCWhjZC0+cmVncyA9IGlvcmVtYXAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwlpZiAoIWhjZC0+cmVncykgeworCQlwcl9kZWJ1ZygiaW9yZW1hcCBmYWlsZWQiKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnIyOworCX0KKworCXB4YTI3eF9zdGFydF9oYyhkZXYpOworCisJLyogU2VsZWN0IFBvd2VyIE1hbmFnZW1lbnQgTW9kZSAqLworCXB4YTI3eF9vaGNpX3NlbGVjdF9wbW0oIFBNTV9QRVJQT1JUX01PREUgKTsKKworCS8qIElmIGNob29zaW5nIFBNTV9QRVJQT1JUX01PREUsIHdlIHNob3VsZCBzZXQgdGhlIHBvcnQgcG93ZXIgYmVmb3JlIHdlIHVzZSBpdC4gKi8KKwlpZiAocHhhMjd4X29oY2lfc2V0X3BvcnRfcG93ZXIoMSkgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIlNldHRpbmcgcG9ydCAxIHBvd2VyIGZhaWxlZC5cbiIpOworCisJaWYgKHB4YTI3eF9vaGNpX2NsZWFyX3BvcnRfcG93ZXIoMikgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIlNldHRpbmcgcG9ydCAyIHBvd2VyIGZhaWxlZC5cbiIpOworCisJaWYgKHB4YTI3eF9vaGNpX2NsZWFyX3BvcnRfcG93ZXIoMykgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIlNldHRpbmcgcG9ydCAzIHBvd2VyIGZhaWxlZC5cbiIpOworCisJb2hjaV9oY2RfaW5pdChoY2RfdG9fb2hjaShoY2QpKTsKKworCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgU0FfSU5URVJSVVBUKTsKKwlpZiAocmV0dmFsID09IDApCisJCXJldHVybiByZXR2YWw7CisKKwlweGEyN3hfc3RvcF9oYyhkZXYpOworCWlvdW5tYXAoaGNkLT5yZWdzKTsKKyBlcnIyOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworIGVycjE6CisJdXNiX3B1dF9oY2QoaGNkKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qIG1heSBiZSBjYWxsZWQgd2l0aG91dCBjb250cm9sbGVyIGVsZWN0cmljYWxseSBwcmVzZW50ICovCisvKiBtYXkgYmUgY2FsbGVkIHdpdGggY29udHJvbGxlciwgYnVzLCBhbmQgZGV2aWNlcyBhY3RpdmUgKi8KKworLyoqCisgKiB1c2JfaGNkX3B4YTI3eF9yZW1vdmUgLSBzaHV0ZG93biBwcm9jZXNzaW5nIGZvciBweGEyN3gtYmFzZWQgSENEcworICogQGRldjogVVNCIEhvc3QgQ29udHJvbGxlciBiZWluZyByZW1vdmVkCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBSZXZlcnNlcyB0aGUgZWZmZWN0IG9mIHVzYl9oY2RfcHhhMjd4X3Byb2JlKCksIGZpcnN0IGludm9raW5nCisgKiB0aGUgSENEJ3Mgc3RvcCgpIG1ldGhvZC4gIEl0IGlzIGFsd2F5cyBjYWxsZWQgZnJvbSBhIHRocmVhZAorICogY29udGV4dCwgbm9ybWFsbHkgInJtbW9kIiwgImFwbWQiLCBvciBzb21ldGhpbmcgc2ltaWxhci4KKyAqCisgKi8KK3ZvaWQgdXNiX2hjZF9weGEyN3hfcmVtb3ZlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJdXNiX3JlbW92ZV9oY2QoaGNkKTsKKwlweGEyN3hfc3RvcF9oYyhkZXYpOworCWlvdW5tYXAoaGNkLT5yZWdzKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwl1c2JfcHV0X2hjZChoY2QpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9fZGV2aW5pdAorb2hjaV9weGEyN3hfc3RhcnQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CisJaW50CQlyZXQ7CisKKwlvaGNpX2RiZyAob2hjaSwgIm9oY2lfcHhhMjd4X3N0YXJ0LCBvaGNpOiVwIiwgb2hjaSk7CisKKwlpZiAoKHJldCA9IG9oY2lfaW5pdChvaGNpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKChyZXQgPSBvaGNpX3J1biAob2hjaSkpIDwgMCkgeworCQllcnIgKCJjYW4ndCBzdGFydCAlcyIsIGhjZC0+c2VsZi5idXNfbmFtZSk7CisJCW9oY2lfc3RvcCAoaGNkKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgb2hjaV9weGEyN3hfaGNfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbiA9CQloY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjID0JCSJQWEEyN3ggT0hDSSIsCisJLmhjZF9wcml2X3NpemUgPQlzaXplb2Yoc3RydWN0IG9oY2lfaGNkKSwKKworCS8qCisJICogZ2VuZXJpYyBoYXJkd2FyZSBsaW5rYWdlCisJICovCisJLmlycSA9CQkJb2hjaV9pcnEsCisJLmZsYWdzID0JCUhDRF9VU0IxMSB8IEhDRF9NRU1PUlksCisKKwkvKgorCSAqIGJhc2ljIGxpZmVjeWNsZSBvcGVyYXRpb25zCisJICovCisJLnN0YXJ0ID0JCW9oY2lfcHhhMjd4X3N0YXJ0LAorCS5zdG9wID0JCQlvaGNpX3N0b3AsCisKKwkvKgorCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCisJICovCisJLnVyYl9lbnF1ZXVlID0JCW9oY2lfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlID0JCW9oY2lfdXJiX2RlcXVldWUsCisJLmVuZHBvaW50X2Rpc2FibGUgPQlvaGNpX2VuZHBvaW50X2Rpc2FibGUsCisKKwkvKgorCSAqIHNjaGVkdWxpbmcgc3VwcG9ydAorCSAqLworCS5nZXRfZnJhbWVfbnVtYmVyID0Jb2hjaV9nZXRfZnJhbWUsCisKKwkvKgorCSAqIHJvb3QgaHViIHN1cHBvcnQKKwkgKi8KKwkuaHViX3N0YXR1c19kYXRhID0Jb2hjaV9odWJfc3RhdHVzX2RhdGEsCisJLmh1Yl9jb250cm9sID0JCW9oY2lfaHViX2NvbnRyb2wsCisjaWZkZWYgIENPTkZJR19VU0JfU1VTUEVORAorCS5odWJfc3VzcGVuZCA9CQlvaGNpX2h1Yl9zdXNwZW5kLAorCS5odWJfcmVzdW1lID0JCW9oY2lfaHViX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBvaGNpX2hjZF9weGEyN3hfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJaW50IHJldDsKKworCXByX2RlYnVnICgiSW4gb2hjaV9oY2RfcHhhMjd4X2Rydl9wcm9iZSIpOworCisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IHVzYl9oY2RfcHhhMjd4X3Byb2JlKCZvaGNpX3B4YTI3eF9oY19kcml2ZXIsIHBkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwl1c2JfaGNkX3B4YTI3eF9yZW1vdmUoaGNkLCBwZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvaGNpX2hjZF9weGEyN3hfZHJ2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgc3RhdGUsIHUzMiBsZXZlbCkKK3sKKy8vCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKy8vCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlwcmludGsoIiVzOiBub3QgaW1wbGVtZW50ZWQgeWV0XG4iLCBfX0ZVTkNUSU9OX18pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgc3RhdGUpCit7CisvLwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisvLwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJcHJpbnRrKCIlczogbm90IGltcGxlbWVudGVkIHlldFxuIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBvaGNpX2hjZF9weGEyN3hfZHJpdmVyID0geworCS5uYW1lCQk9ICJweGEyN3gtb2hjaSIsCisJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJLnByb2JlCQk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfcHJvYmUsCisJLnJlbW92ZQkJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3JlbW92ZSwKKwkuc3VzcGVuZAk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfc3VzcGVuZCwgCisJLnJlc3VtZQkJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3Jlc3VtZSwgCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvaGNpX2hjZF9weGEyN3hfaW5pdCAodm9pZCkKK3sKKwlwcl9kZWJ1ZyAoRFJJVkVSX0lORk8gIiAocHhhMjd4KSIpOworCXByX2RlYnVnICgiYmxvY2sgc2l6ZXM6IGVkICVkIHRkICVkXG4iLAorCQlzaXplb2YgKHN0cnVjdCBlZCksIHNpemVvZiAoc3RydWN0IHRkKSk7CisKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9weGEyN3hfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9oY2lfaGNkX3B4YTI3eF9jbGVhbnVwICh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9weGEyN3hfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQgKG9oY2lfaGNkX3B4YTI3eF9pbml0KTsKK21vZHVsZV9leGl0IChvaGNpX2hjZF9weGEyN3hfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTAxMTRhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXEuYwpAQCAtMCwwICsxLDExMDcgQEAKKy8qCisgKiBPSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi4KKyAqIAorICogKEMpIENvcHlyaWdodCAxOTk5IFJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAyIERhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogCisgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC4KKyAqLworCitzdGF0aWMgdm9pZCB1cmJfZnJlZV9wcml2IChzdHJ1Y3Qgb2hjaV9oY2QgKmhjLCB1cmJfcHJpdl90ICp1cmJfcHJpdikKK3sKKwlpbnQJCWxhc3QgPSB1cmJfcHJpdi0+bGVuZ3RoIC0gMTsKKworCWlmIChsYXN0ID49IDApIHsKKwkJaW50CQlpOworCQlzdHJ1Y3QgdGQJKnRkOworCisJCWZvciAoaSA9IDA7IGkgPD0gbGFzdDsgaSsrKSB7CisJCQl0ZCA9IHVyYl9wcml2LT50ZCBbaV07CisJCQlpZiAodGQpCisJCQkJdGRfZnJlZSAoaGMsIHRkKTsKKwkJfQorCX0KKworCWxpc3RfZGVsICgmdXJiX3ByaXYtPnBlbmRpbmcpOworCWtmcmVlICh1cmJfcHJpdik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBVUkIgZ29lcyBiYWNrIHRvIGRyaXZlciwgYW5kIGlzbid0IHJlaXNzdWVkLgorICogSXQncyBjb21wbGV0ZWx5IGdvbmUgZnJvbSBIQyBkYXRhIHN0cnVjdHVyZXMuCisgKiBQUkVDT05ESVRJT046ICBvaGNpIGxvY2sgaGVsZCwgaXJxcyBibG9ja2VkLgorICovCitzdGF0aWMgdm9pZAorZmluaXNoX3VyYiAoc3RydWN0IG9oY2lfaGNkICpvaGNpLCBzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorX19yZWxlYXNlcyhvaGNpLT5sb2NrKQorX19hY3F1aXJlcyhvaGNpLT5sb2NrKQoreworCS8vIEFTU0VSVCAodXJiLT5oY3ByaXYgIT0gMCk7CisKKwl1cmJfZnJlZV9wcml2IChvaGNpLCB1cmItPmhjcHJpdik7CisJdXJiLT5oY3ByaXYgPSBOVUxMOworCisJc3Bpbl9sb2NrICgmdXJiLT5sb2NrKTsKKwlpZiAobGlrZWx5ICh1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpKQorCQl1cmItPnN0YXR1cyA9IDA7CisJLyogcmVwb3J0IHNob3J0IGNvbnRyb2wgcmVhZHMgcmlnaHQgZXZlbiB0aG91Z2ggdGhlIGRhdGEgVEQgYWx3YXlzCisJICogaGFzIFREX1Igc2V0LiAgKG11Y2ggc2ltcGxlciwgYnV0IGNyZWF0ZXMgdGhlIDEtdGQgbGltaXQuKQorCSAqLworCWlmICh1bmxpa2VseSAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spCisJCQkmJiB1bmxpa2VseSAodXNiX3BpcGVjb250cm9sICh1cmItPnBpcGUpKQorCQkJJiYgdXJiLT5hY3R1YWxfbGVuZ3RoIDwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoCisJCQkmJiB1c2JfcGlwZWluICh1cmItPnBpcGUpCisJCQkmJiB1cmItPnN0YXR1cyA9PSAwKSB7CisJCXVyYi0+c3RhdHVzID0gLUVSRU1PVEVJTzsKKwl9CisJc3Bpbl91bmxvY2sgKCZ1cmItPmxvY2spOworCisJc3dpdGNoICh1c2JfcGlwZXR5cGUgKHVyYi0+cGlwZSkpIHsKKwljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJCW9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMtLTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJb2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2ludF9yZXFzLS07CisJCWJyZWFrOworCX0KKworI2lmZGVmIE9IQ0lfVkVSQk9TRV9ERUJVRworCXVyYl9wcmludCAodXJiLCAiUkVUIiwgdXNiX3BpcGVvdXQgKHVyYi0+cGlwZSkpOworI2VuZGlmCisKKwkvKiB1cmItPmNvbXBsZXRlKCkgY2FuIHJlZW50ZXIgdGhpcyBIQ0QgKi8KKwlzcGluX3VubG9jayAoJm9oY2ktPmxvY2spOworCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiIChvaGNpX3RvX2hjZChvaGNpKSwgdXJiLCByZWdzKTsKKwlzcGluX2xvY2sgKCZvaGNpLT5sb2NrKTsKKworCS8qIHN0b3AgcGVyaW9kaWMgZG1hIGlmIGl0J3Mgbm90IG5lZWRlZCAqLworCWlmIChvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzID09IDAKKwkJCSYmIG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmJhbmR3aWR0aF9pbnRfcmVxcyA9PSAwKSB7CisJCW9oY2ktPmhjX2NvbnRyb2wgJj0gfihPSENJX0NUUkxfUExFfE9IQ0lfQ1RSTF9JRSk7CisJCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJfQorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEVEIGhhbmRsaW5nIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gIAorCisvKiBzZWFyY2ggZm9yIHRoZSByaWdodCBzY2hlZHVsZSBicmFuY2ggdG8gdXNlIGZvciBhIHBlcmlvZGljIGVkLgorICogZG9lcyBzb21lIGxvYWQgYmFsYW5jaW5nOyByZXR1cm5zIHRoZSBicmFuY2gsIG9yIG5lZ2F0aXZlIGVycm5vLgorICovCitzdGF0aWMgaW50IGJhbGFuY2UgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgaW50IGludGVydmFsLCBpbnQgbG9hZCkKK3sKKwlpbnQJaSwgYnJhbmNoID0gLUVOT1NQQzsKKworCS8qIGlzbyBwZXJpb2RzIGNhbiBiZSBodWdlOyBpc28gdGRzIHNwZWNpZnkgZnJhbWUgbnVtYmVycyAqLworCWlmIChpbnRlcnZhbCA+IE5VTV9JTlRTKQorCQlpbnRlcnZhbCA9IE5VTV9JTlRTOworCisJLyogc2VhcmNoIGZvciB0aGUgbGVhc3QgbG9hZGVkIHNjaGVkdWxlIGJyYW5jaCBvZiB0aGF0IHBlcmlvZAorCSAqIHRoYXQgaGFzIGVub3VnaCBiYW5kd2lkdGggbGVmdCB1bnJlc2VydmVkLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBpbnRlcnZhbCA7IGkrKykgeworCQlpZiAoYnJhbmNoIDwgMCB8fCBvaGNpLT5sb2FkIFticmFuY2hdID4gb2hjaS0+bG9hZCBbaV0pIHsKKyNpZiAxCS8qIENPTkZJR19VU0JfQkFORFdJRFRIICovCisJCQlpbnQJajsKKworCQkJLyogdXNiIDEuMSBzYXlzIDkwJSBvZiBvbmUgZnJhbWUgKi8KKwkJCWZvciAoaiA9IGk7IGogPCBOVU1fSU5UUzsgaiArPSBpbnRlcnZhbCkgeworCQkJCWlmICgob2hjaS0+bG9hZCBbal0gKyBsb2FkKSA+IDkwMCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaiA8IE5VTV9JTlRTKQorCQkJCWNvbnRpbnVlOworI2VuZGlmCisJCQlicmFuY2ggPSBpOyAKKwkJfQorCX0KKwlyZXR1cm4gYnJhbmNoOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBib3RoIGlzbyBhbmQgaW50ZXJydXB0IHJlcXVlc3RzIGhhdmUgcGVyaW9kczsgdGhpcyByb3V0aW5lIHB1dHMgdGhlbQorICogaW50byB0aGUgc2NoZWR1bGUgdHJlZSBpbiB0aGUgYXBwcHJvcHJpYXRlIHBsYWNlLiAgbW9zdCBpc28gZGV2aWNlcyB1c2UKKyAqIDFtc2VjIHBlcmlvZHMsIGJ1dCB0aGF0J3Mgbm90IHJlcXVpcmVkLgorICovCitzdGF0aWMgdm9pZCBwZXJpb2RpY19saW5rIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIHN0cnVjdCBlZCAqZWQpCit7CisJdW5zaWduZWQJaTsKKworCW9oY2lfdmRiZyAob2hjaSwgImxpbmsgJXNlZCAlcCBicmFuY2ggJWQgWyVkdXMuXSwgaW50ZXJ2YWwgJWRcbiIsCisJCShlZC0+aHdJTkZPICYgY3B1X3RvX2hjMzIgKG9oY2ksIEVEX0lTTykpID8gImlzbyAiIDogIiIsCisJCWVkLCBlZC0+YnJhbmNoLCBlZC0+bG9hZCwgZWQtPmludGVydmFsKTsKKworCWZvciAoaSA9IGVkLT5icmFuY2g7IGkgPCBOVU1fSU5UUzsgaSArPSBlZC0+aW50ZXJ2YWwpIHsKKwkJc3RydWN0IGVkCSoqcHJldiA9ICZvaGNpLT5wZXJpb2RpYyBbaV07CisJCV9faGMzMgkJKnByZXZfcCA9ICZvaGNpLT5oY2NhLT5pbnRfdGFibGUgW2ldOworCQlzdHJ1Y3QgZWQJKmhlcmUgPSAqcHJldjsKKworCQkvKiBzb3J0aW5nIGVhY2ggYnJhbmNoIGJ5IHBlcmlvZCAoc2xvdyBiZWZvcmUgZmFzdCkKKwkJICogbGV0cyB1cyBzaGFyZSB0aGUgZmFzdGVyIHBhcnRzIG9mIHRoZSB0cmVlLgorCQkgKiAocGx1cyBtYXliZTogcHV0IGludGVycnVwdCBlZHMgYmVmb3JlIGlzbykKKwkJICovCisJCXdoaWxlIChoZXJlICYmIGVkICE9IGhlcmUpIHsKKwkJCWlmIChlZC0+aW50ZXJ2YWwgPiBoZXJlLT5pbnRlcnZhbCkKKwkJCQlicmVhazsKKwkJCXByZXYgPSAmaGVyZS0+ZWRfbmV4dDsKKwkJCXByZXZfcCA9ICZoZXJlLT5od05leHRFRDsKKwkJCWhlcmUgPSAqcHJldjsKKwkJfQorCQlpZiAoZWQgIT0gaGVyZSkgeworCQkJZWQtPmVkX25leHQgPSBoZXJlOworCQkJaWYgKGhlcmUpCisJCQkJZWQtPmh3TmV4dEVEID0gKnByZXZfcDsKKwkJCXdtYiAoKTsKKwkJCSpwcmV2ID0gZWQ7CisJCQkqcHJldl9wID0gY3B1X3RvX2hjMzIob2hjaSwgZWQtPmRtYSk7CisJCQl3bWIoKTsKKwkJfQorCQlvaGNpLT5sb2FkIFtpXSArPSBlZC0+bG9hZDsKKwl9CisJb2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2FsbG9jYXRlZCArPSBlZC0+bG9hZCAvIGVkLT5pbnRlcnZhbDsKK30KKworLyogbGluayBhbiBlZCBpbnRvIG9uZSBvZiB0aGUgSEMgY2hhaW5zICovCisKK3N0YXRpYyBpbnQgZWRfc2NoZWR1bGUgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgc3RydWN0IGVkICplZCkKK3sJIAorCWludAlicmFuY2g7CisKKwlpZiAob2hjaV90b19oY2Qob2hjaSktPnN0YXRlID09IEhDX1NUQVRFX1FVSUVTQ0lORykKKwkJcmV0dXJuIC1FQUdBSU47CisKKwllZC0+c3RhdGUgPSBFRF9PUEVSOworCWVkLT5lZF9wcmV2ID0gTlVMTDsKKwllZC0+ZWRfbmV4dCA9IE5VTEw7CisJZWQtPmh3TmV4dEVEID0gMDsKKwl3bWIgKCk7CisKKwkvKiB3ZSBjYXJlIGFib3V0IHJtX2xpc3Qgd2hlbiBzZXR0aW5nIENMRS9CTEUgaW4gY2FzZSB0aGUgSEMgd2FzIGF0CisJICogd29yayBvbiBzb21lIFREIHdoZW4gQ0xFL0JMRSB3YXMgdHVybmVkIG9mZiwgYW5kIGlzbid0IHF1aWVzY2VkCisJICogeWV0LiAgZmluaXNoX3VubGlua3MoKSByZXN0YXJ0cyBhcyBuZWVkZWQsIHNvbWUgdXBjb21pbmcgSU5UUl9TRi4KKwkgKgorCSAqIGNvbnRyb2wgYW5kIGJ1bGsgRURzIGFyZSBkb3VibHkgbGlua2VkIChlZF9uZXh0LCBlZF9wcmV2KSwgYnV0CisJICogcGVyaW9kaWMgb25lcyBhcmUgc2luZ2x5IGxpbmtlZCAoZWRfbmV4dCkuIHRoYXQncyBiZWNhdXNlIHRoZQorCSAqIHBlcmlvZGljIHNjaGVkdWxlIGVuY29kZXMgYSB0cmVlIGxpa2UgZmlndXJlIDMtNSBpbiB0aGUgb2hjaQorCSAqIHNwZWM6ICBlYWNoIHFoIGNhbiBoYXZlIHNldmVyYWwgInByZXZpb3VzIiBub2RlcywgYW5kIHRoZSB0cmVlCisJICogZG9lc24ndCBoYXZlIHVudXNlZC9pZGxlIGRlc2NyaXB0b3JzLgorCSAqLworCXN3aXRjaCAoZWQtPnR5cGUpIHsKKwljYXNlIFBJUEVfQ09OVFJPTDoKKwkJaWYgKG9oY2ktPmVkX2NvbnRyb2x0YWlsID09IE5VTEwpIHsKKwkJCVdBUk5fT04gKG9oY2ktPmhjX2NvbnRyb2wgJiBPSENJX0NUUkxfQ0xFKTsKKwkJCW9oY2lfd3JpdGVsIChvaGNpLCBlZC0+ZG1hLAorCQkJCQkmb2hjaS0+cmVncy0+ZWRfY29udHJvbGhlYWQpOworCQl9IGVsc2UgeworCQkJb2hjaS0+ZWRfY29udHJvbHRhaWwtPmVkX25leHQgPSBlZDsKKwkJCW9oY2ktPmVkX2NvbnRyb2x0YWlsLT5od05leHRFRCA9IGNwdV90b19oYzMyIChvaGNpLAorCQkJCQkJCQllZC0+ZG1hKTsKKwkJfQorCQllZC0+ZWRfcHJldiA9IG9oY2ktPmVkX2NvbnRyb2x0YWlsOworCQlpZiAoIW9oY2ktPmVkX2NvbnRyb2x0YWlsICYmICFvaGNpLT5lZF9ybV9saXN0KSB7CisJCQl3bWIoKTsKKwkJCW9oY2ktPmhjX2NvbnRyb2wgfD0gT0hDSV9DVFJMX0NMRTsKKwkJCW9oY2lfd3JpdGVsIChvaGNpLCAwLCAmb2hjaS0+cmVncy0+ZWRfY29udHJvbGN1cnJlbnQpOworCQkJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsCisJCQkJCSZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwkJfQorCQlvaGNpLT5lZF9jb250cm9sdGFpbCA9IGVkOworCQlicmVhazsKKworCWNhc2UgUElQRV9CVUxLOgorCQlpZiAob2hjaS0+ZWRfYnVsa3RhaWwgPT0gTlVMTCkgeworCQkJV0FSTl9PTiAob2hjaS0+aGNfY29udHJvbCAmIE9IQ0lfQ1RSTF9CTEUpOworCQkJb2hjaV93cml0ZWwgKG9oY2ksIGVkLT5kbWEsICZvaGNpLT5yZWdzLT5lZF9idWxraGVhZCk7CisJCX0gZWxzZSB7CisJCQlvaGNpLT5lZF9idWxrdGFpbC0+ZWRfbmV4dCA9IGVkOworCQkJb2hjaS0+ZWRfYnVsa3RhaWwtPmh3TmV4dEVEID0gY3B1X3RvX2hjMzIgKG9oY2ksCisJCQkJCQkJCWVkLT5kbWEpOworCQl9CisJCWVkLT5lZF9wcmV2ID0gb2hjaS0+ZWRfYnVsa3RhaWw7CisJCWlmICghb2hjaS0+ZWRfYnVsa3RhaWwgJiYgIW9oY2ktPmVkX3JtX2xpc3QpIHsKKwkJCXdtYigpOworCQkJb2hjaS0+aGNfY29udHJvbCB8PSBPSENJX0NUUkxfQkxFOworCQkJb2hjaV93cml0ZWwgKG9oY2ksIDAsICZvaGNpLT5yZWdzLT5lZF9idWxrY3VycmVudCk7CisJCQlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaS0+aGNfY29udHJvbCwKKwkJCQkJJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCQl9CisJCW9oY2ktPmVkX2J1bGt0YWlsID0gZWQ7CisJCWJyZWFrOworCisJLy8gY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkvLyBjYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJZGVmYXVsdDoKKwkJYnJhbmNoID0gYmFsYW5jZSAob2hjaSwgZWQtPmludGVydmFsLCBlZC0+bG9hZCk7CisJCWlmIChicmFuY2ggPCAwKSB7CisJCQlvaGNpX2RiZyAob2hjaSwKKwkJCQkiRVJSICVkLCBpbnRlcnZhbCAlZCBtc2VjcywgbG9hZCAlZFxuIiwKKwkJCQlicmFuY2gsIGVkLT5pbnRlcnZhbCwgZWQtPmxvYWQpOworCQkJLy8gRklYTUUgaWYgdGhlcmUgYXJlIFREcyBxdWV1ZWQsIGZhaWwgdGhlbSEKKwkJCXJldHVybiBicmFuY2g7CisJCX0KKwkJZWQtPmJyYW5jaCA9IGJyYW5jaDsKKwkJcGVyaW9kaWNfbGluayAob2hjaSwgZWQpOworCX0JIAkKKworCS8qIHRoZSBIQyBtYXkgbm90IHNlZSB0aGUgc2NoZWR1bGUgdXBkYXRlcyB5ZXQsIGJ1dCBpZiBpdCBkb2VzCisJICogdGhlbiB0aGV5J2xsIGJlIHByb3Blcmx5IG9yZGVyZWQuCisJICovCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHNjYW4gdGhlIHBlcmlvZGljIHRhYmxlIHRvIGZpbmQgYW5kIHVubGluayB0aGlzIEVEICovCitzdGF0aWMgdm9pZCBwZXJpb2RpY191bmxpbmsgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgc3RydWN0IGVkICplZCkKK3sKKwlpbnQJaTsKKworCWZvciAoaSA9IGVkLT5icmFuY2g7IGkgPCBOVU1fSU5UUzsgaSArPSBlZC0+aW50ZXJ2YWwpIHsKKwkJc3RydWN0IGVkCSp0ZW1wOworCQlzdHJ1Y3QgZWQJKipwcmV2ID0gJm9oY2ktPnBlcmlvZGljIFtpXTsKKwkJX19oYzMyCQkqcHJldl9wID0gJm9oY2ktPmhjY2EtPmludF90YWJsZSBbaV07CisKKwkJd2hpbGUgKCpwcmV2ICYmICh0ZW1wID0gKnByZXYpICE9IGVkKSB7CisJCQlwcmV2X3AgPSAmdGVtcC0+aHdOZXh0RUQ7CisJCQlwcmV2ID0gJnRlbXAtPmVkX25leHQ7CisJCX0KKwkJaWYgKCpwcmV2KSB7CisJCQkqcHJldl9wID0gZWQtPmh3TmV4dEVEOworCQkJKnByZXYgPSBlZC0+ZWRfbmV4dDsKKwkJfQorCQlvaGNpLT5sb2FkIFtpXSAtPSBlZC0+bG9hZDsKKwl9CQorCW9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmJhbmR3aWR0aF9hbGxvY2F0ZWQgLT0gZWQtPmxvYWQgLyBlZC0+aW50ZXJ2YWw7CisKKwlvaGNpX3ZkYmcgKG9oY2ksICJ1bmxpbmsgJXNlZCAlcCBicmFuY2ggJWQgWyVkdXMuXSwgaW50ZXJ2YWwgJWRcbiIsCisJCShlZC0+aHdJTkZPICYgY3B1X3RvX2hjMzIgKG9oY2ksIEVEX0lTTykpID8gImlzbyAiIDogIiIsCisJCWVkLCBlZC0+YnJhbmNoLCBlZC0+bG9hZCwgZWQtPmludGVydmFsKTsKK30KKworLyogdW5saW5rIGFuIGVkIGZyb20gb25lIG9mIHRoZSBIQyBjaGFpbnMuIAorICoganVzdCB0aGUgbGluayB0byB0aGUgZWQgaXMgdW5saW5rZWQuCisgKiB0aGUgbGluayBmcm9tIHRoZSBlZCBzdGlsbCBwb2ludHMgdG8gYW5vdGhlciBvcGVyYXRpb25hbCBlZCBvciAwCisgKiBzbyB0aGUgSEMgY2FuIGV2ZW50dWFsbHkgZmluaXNoIHRoZSBwcm9jZXNzaW5nIG9mIHRoZSB1bmxpbmtlZCBlZAorICogKGFzc3VtaW5nIGl0IGFscmVhZHkgc3RhcnRlZCB0aGF0LCB3aGljaCBuZWVkbid0IGJlIHRydWUpLgorICoKKyAqIEVEX1VOTElOSyBpcyBhIHRyYW5zaWVudCBzdGF0ZTogdGhlIEhDIG1heSBzdGlsbCBzZWUgdGhpcyBFRCwgYnV0IHNvb24KKyAqIGl0IHdvbid0LiAgRURfU0tJUCBtZWFucyB0aGUgSEMgd2lsbCBmaW5pc2ggaXRzIGN1cnJlbnQgdHJhbnNhY3Rpb24sCisgKiBidXQgd29uJ3Qgc3RhcnQgYW55dGhpbmcgbmV3LiAgVGhlIFREIHF1ZXVlIG1heSBzdGlsbCBncm93OyBkZXZpY2UKKyAqIGRyaXZlcnMgZG9uJ3Qga25vdyBhYm91dCB0aGlzIEhDRC1pbnRlcm5hbCBzdGF0ZS4KKyAqCisgKiBXaGVuIHRoZSBIQyBjYW4ndCBzZWUgdGhlIEVELCBzb21ldGhpbmcgY2hhbmdlcyBFRF9VTkxJTksgdG8gb25lIG9mOgorICoKKyAqICAtIEVEX09QRVI6IHdoZW4gdGhlcmUncyBhbnkgcmVxdWVzdCBxdWV1ZWQsIHRoZSBFRCBnZXRzIHJlc2NoZWR1bGVkCisgKiAgICBpbW1lZGlhdGVseS4gIEhDIHNob3VsZCBiZSB3b3JraW5nIG9uIHRoZW0uCisgKgorICogIC0gRURfSURMRTogIHdoZW4gdGhlcmUncyBubyBURCBxdWV1ZS4gdGhlcmUncyBubyByZWFzb24gZm9yIHRoZSBIQworICogICAgdG8gY2FyZSBhYm91dCB0aGlzIEVEOyBzYWZlIHRvIGRpc2FibGUgdGhlIGVuZHBvaW50LgorICoKKyAqIFdoZW4gZmluaXNoX3VubGlua3MoKSBydW5zIGxhdGVyLCBhZnRlciBTT0YgaW50ZXJydXB0LCBpdCB3aWxsIG9mdGVuCisgKiBjb21wbGV0ZSBvbmUgb3IgbW9yZSBVUkIgdW5saW5rcyBiZWZvcmUgbWFraW5nIHRoYXQgc3RhdGUgY2hhbmdlLgorICovCitzdGF0aWMgdm9pZCBlZF9kZXNjaGVkdWxlIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIHN0cnVjdCBlZCAqZWQpIAoreworCWVkLT5od0lORk8gfD0gY3B1X3RvX2hjMzIgKG9oY2ksIEVEX1NLSVApOworCXdtYiAoKTsKKwllZC0+c3RhdGUgPSBFRF9VTkxJTks7CisKKwkvKiBUbyBkZXNjaGVkdWxlIHNvbWV0aGluZyBmcm9tIHRoZSBjb250cm9sIG9yIGJ1bGsgbGlzdCwganVzdAorCSAqIGNsZWFyIENMRS9CTEUgYW5kIHdhaXQuICBUaGVyZSdzIG5vIHNhZmUgd2F5IHRvIHNjcnViIG91dCBsaXN0CisJICogaGVhZC9jdXJyZW50IHJlZ2lzdGVycyB1bnRpbCBsYXRlciwgYW5kICJsYXRlciIgaXNuJ3QgdmVyeQorCSAqIHRpZ2h0bHkgc3BlY2lmaWVkLiAgRmlndXJlIDYtNSBhbmQgU2VjdGlvbiA2LjQuMi4yIHNob3cgaG93CisJICogdGhlIEhDIGlzIHJlYWRpbmcgdGhlIEVEIHF1ZXVlcyAod2hpbGUgd2UgbW9kaWZ5IHRoZW0pLgorCSAqCisJICogRm9yIG5vdywgZWRfc2NoZWR1bGUoKSBpcyAibGF0ZXIiLiAgSXQgbWlnaHQgYmUgZ29vZCBwYXJhbm9pYQorCSAqIHRvIHNjcnViIHRob3NlIHJlZ2lzdGVycyBpbiBmaW5pc2hfdW5saW5rcygpLCBpbiBjYXNlIG9mIGJ1Z3MKKwkgKiB0aGF0IG1ha2UgdGhlIEhDIHRyeSB0byB1c2UgdGhlbS4KKwkgKi8KKwlzd2l0Y2ggKGVkLT50eXBlKSB7CisJY2FzZSBQSVBFX0NPTlRST0w6CisJCS8qIHJlbW92ZSBFRCBmcm9tIHRoZSBIQydzIGxpc3Q6ICovCisJCWlmIChlZC0+ZWRfcHJldiA9PSBOVUxMKSB7CisJCQlpZiAoIWVkLT5od05leHRFRCkgeworCQkJCW9oY2ktPmhjX2NvbnRyb2wgJj0gfk9IQ0lfQ1RSTF9DTEU7CisJCQkJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsCisJCQkJCQkmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJCQkJLy8gYSBvaGNpX3JlYWRsKCkgbGF0ZXIgc3luY3MgQ0xFIHdpdGggdGhlIEhDCisJCQl9IGVsc2UKKwkJCQlvaGNpX3dyaXRlbCAob2hjaSwKKwkJCQkJaGMzMl90b19jcHVwIChvaGNpLCAmZWQtPmh3TmV4dEVEKSwKKwkJCQkJJm9oY2ktPnJlZ3MtPmVkX2NvbnRyb2xoZWFkKTsKKwkJfSBlbHNlIHsKKwkJCWVkLT5lZF9wcmV2LT5lZF9uZXh0ID0gZWQtPmVkX25leHQ7CisJCQllZC0+ZWRfcHJldi0+aHdOZXh0RUQgPSBlZC0+aHdOZXh0RUQ7CisJCX0KKwkJLyogcmVtb3ZlIEVEIGZyb20gdGhlIEhDRCdzIGxpc3Q6ICovCisJCWlmIChvaGNpLT5lZF9jb250cm9sdGFpbCA9PSBlZCkgeworCQkJb2hjaS0+ZWRfY29udHJvbHRhaWwgPSBlZC0+ZWRfcHJldjsKKwkJCWlmIChvaGNpLT5lZF9jb250cm9sdGFpbCkKKwkJCQlvaGNpLT5lZF9jb250cm9sdGFpbC0+ZWRfbmV4dCA9IE5VTEw7CisJCX0gZWxzZSBpZiAoZWQtPmVkX25leHQpIHsKKwkJCWVkLT5lZF9uZXh0LT5lZF9wcmV2ID0gZWQtPmVkX3ByZXY7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFBJUEVfQlVMSzoKKwkJLyogcmVtb3ZlIEVEIGZyb20gdGhlIEhDJ3MgbGlzdDogKi8KKwkJaWYgKGVkLT5lZF9wcmV2ID09IE5VTEwpIHsKKwkJCWlmICghZWQtPmh3TmV4dEVEKSB7CisJCQkJb2hjaS0+aGNfY29udHJvbCAmPSB+T0hDSV9DVFJMX0JMRTsKKwkJCQlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaS0+aGNfY29udHJvbCwKKwkJCQkJCSZvaGNpLT5yZWdzLT5jb250cm9sKTsKKwkJCQkvLyBhIG9oY2lfcmVhZGwoKSBsYXRlciBzeW5jcyBCTEUgd2l0aCB0aGUgSEMKKwkJCX0gZWxzZQorCQkJCW9oY2lfd3JpdGVsIChvaGNpLAorCQkJCQloYzMyX3RvX2NwdXAgKG9oY2ksICZlZC0+aHdOZXh0RUQpLAorCQkJCQkmb2hjaS0+cmVncy0+ZWRfYnVsa2hlYWQpOworCQl9IGVsc2UgeworCQkJZWQtPmVkX3ByZXYtPmVkX25leHQgPSBlZC0+ZWRfbmV4dDsKKwkJCWVkLT5lZF9wcmV2LT5od05leHRFRCA9IGVkLT5od05leHRFRDsKKwkJfQorCQkvKiByZW1vdmUgRUQgZnJvbSB0aGUgSENEJ3MgbGlzdDogKi8KKwkJaWYgKG9oY2ktPmVkX2J1bGt0YWlsID09IGVkKSB7CisJCQlvaGNpLT5lZF9idWxrdGFpbCA9IGVkLT5lZF9wcmV2OworCQkJaWYgKG9oY2ktPmVkX2J1bGt0YWlsKQorCQkJCW9oY2ktPmVkX2J1bGt0YWlsLT5lZF9uZXh0ID0gTlVMTDsKKwkJfSBlbHNlIGlmIChlZC0+ZWRfbmV4dCkgeworCQkJZWQtPmVkX25leHQtPmVkX3ByZXYgPSBlZC0+ZWRfcHJldjsKKwkJfQorCQlicmVhazsKKworCS8vIGNhc2UgUElQRV9JTlRFUlJVUFQ6CisJLy8gY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCWRlZmF1bHQ6CisJCXBlcmlvZGljX3VubGluayAob2hjaSwgZWQpOworCQlicmVhazsKKwl9Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogZ2V0IGFuZCBtYXliZSAocmUpaW5pdCBhbiBlbmRwb2ludC4gaW5pdCBfc2hvdWxkXyBiZSBkb25lIG9ubHkgYXMgcGFydAorICogb2YgZW51bWVyYXRpb24sIHVzYl9zZXRfY29uZmlndXJhdGlvbigpIG9yIHVzYl9zZXRfaW50ZXJmYWNlKCkuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZWQgKmVkX2dldCAoCisJc3RydWN0IG9oY2lfaGNkCQkqb2hjaSwKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwLAorCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2LAorCXVuc2lnbmVkIGludAkJcGlwZSwKKwlpbnQJCQlpbnRlcnZhbAorKSB7CisJc3RydWN0IGVkCQkqZWQ7IAorCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIShlZCA9IGVwLT5oY3ByaXYpKSB7CisJCXN0cnVjdCB0ZAkqdGQ7CisJCWludAkJaXNfb3V0OworCQl1MzIJCWluZm87CisKKwkJZWQgPSBlZF9hbGxvYyAob2hjaSwgR0ZQX0FUT01JQyk7CisJCWlmICghZWQpIHsKKwkJCS8qIG91dCBvZiBtZW1vcnkgKi8KKwkJCWdvdG8gZG9uZTsKKwkJfQorCisgIAkJLyogZHVtbXkgdGQ7IGVuZCBvZiB0ZCBsaXN0IGZvciBlZCAqLworCQl0ZCA9IHRkX2FsbG9jIChvaGNpLCBHRlBfQVRPTUlDKTsKKyAJCWlmICghdGQpIHsKKwkJCS8qIG91dCBvZiBtZW1vcnkgKi8KKwkJCWVkX2ZyZWUgKG9oY2ksIGVkKTsKKwkJCWVkID0gTlVMTDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQllZC0+ZHVtbXkgPSB0ZDsKKwkJZWQtPmh3VGFpbFAgPSBjcHVfdG9faGMzMiAob2hjaSwgdGQtPnRkX2RtYSk7CisJCWVkLT5od0hlYWRQID0gZWQtPmh3VGFpbFA7CS8qIEVEX0MsIEVEX0ggemVyb2VkICovCisJCWVkLT5zdGF0ZSA9IEVEX0lETEU7CisKKwkJaXNfb3V0ID0gIShlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTik7CisKKwkJLyogRklYTUUgdXNiY29yZSBjaGFuZ2VzIGRldi0+ZGV2bnVtIGJlZm9yZSBTRVRfQUREUkVTUworCQkgKiBzdWNlZWRzIC4uLiBvdGhlcndpc2Ugd2Ugd291bGRuJ3QgbmVlZCAicGlwZSIuCisJCSAqLworCQlpbmZvID0gdXNiX3BpcGVkZXZpY2UgKHBpcGUpOworCQllZC0+dHlwZSA9IHVzYl9waXBldHlwZShwaXBlKTsKKworCQlpbmZvIHw9IChlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgflVTQl9ESVJfSU4pIDw8IDc7CisJCWluZm8gfD0gbGUxNl90b19jcHUoZXAtPmRlc2Mud01heFBhY2tldFNpemUpIDw8IDE2OworCQlpZiAodWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0xPVykKKwkJCWluZm8gfD0gRURfTE9XU1BFRUQ7CisJCS8qIG9ubHkgY29udHJvbCB0cmFuc2ZlcnMgc3RvcmUgcGlkcyBpbiB0ZHMgKi8KKwkJaWYgKGVkLT50eXBlICE9IFBJUEVfQ09OVFJPTCkgeworCQkJaW5mbyB8PSBpc19vdXQgPyBFRF9PVVQgOiBFRF9JTjsKKwkJCWlmIChlZC0+dHlwZSAhPSBQSVBFX0JVTEspIHsKKwkJCQkvKiBwZXJpb2RpYyB0cmFuc2ZlcnMuLi4gKi8KKwkJCQlpZiAoZWQtPnR5cGUgPT0gUElQRV9JU09DSFJPTk9VUykKKwkJCQkJaW5mbyB8PSBFRF9JU087CisJCQkJZWxzZSBpZiAoaW50ZXJ2YWwgPiAzMikJLyogaXNvIGNhbiBiZSBiaWdnZXIgKi8KKwkJCQkJaW50ZXJ2YWwgPSAzMjsKKwkJCQllZC0+aW50ZXJ2YWwgPSBpbnRlcnZhbDsKKwkJCQllZC0+bG9hZCA9IHVzYl9jYWxjX2J1c190aW1lICgKKwkJCQkJdWRldi0+c3BlZWQsICFpc19vdXQsCisJCQkJCWVkLT50eXBlID09IFBJUEVfSVNPQ0hST05PVVMsCisJCQkJCWxlMTZfdG9fY3B1KGVwLT5kZXNjLndNYXhQYWNrZXRTaXplKSkKKwkJCQkJCS8gMTAwMDsKKwkJCX0KKwkJfQorCQllZC0+aHdJTkZPID0gY3B1X3RvX2hjMzIob2hjaSwgaW5mbyk7CisKKwkJZXAtPmhjcHJpdiA9IGVkOworCX0KKworZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmb2hjaS0+bG9jaywgZmxhZ3MpOworCXJldHVybiBlZDsgCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHJlcXVlc3QgdW5saW5raW5nIG9mIGFuIGVuZHBvaW50IGZyb20gYW4gb3BlcmF0aW9uYWwgSEMuCisgKiBwdXQgdGhlIGVwIG9uIHRoZSBybV9saXN0CisgKiByZWFsIHdvcmsgaXMgZG9uZSBhdCB0aGUgbmV4dCBzdGFydCBmcmFtZSAoU0YpIGhhcmR3YXJlIGludGVycnVwdAorICogY2FsbGVyIGd1YXJhbnRlZXMgSENEIGlzIHJ1bm5pbmcsIHNvIGhhcmR3YXJlIGFjY2VzcyBpcyBzYWZlLAorICogYW5kIHRoYXQgZWQtPnN0YXRlIGlzIEVEX09QRVIKKyAqLworc3RhdGljIHZvaWQgc3RhcnRfZWRfdW5saW5rIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIHN0cnVjdCBlZCAqZWQpCit7ICAgIAorCWVkLT5od0lORk8gfD0gY3B1X3RvX2hjMzIgKG9oY2ksIEVEX0RFUVVFVUUpOworCWVkX2Rlc2NoZWR1bGUgKG9oY2ksIGVkKTsKKworCS8qIHJtX2xpc3QgaXMganVzdCBzaW5nbHkgbGlua2VkLCBmb3Igc2ltcGxpY2l0eSAqLworCWVkLT5lZF9uZXh0ID0gb2hjaS0+ZWRfcm1fbGlzdDsKKwllZC0+ZWRfcHJldiA9IE5VTEw7CisJb2hjaS0+ZWRfcm1fbGlzdCA9IGVkOworCisJLyogZW5hYmxlIFNPRiBpbnRlcnJ1cHQgKi8KKwlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX1NGLCAmb2hjaS0+cmVncy0+aW50cnN0YXR1cyk7CisJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfSU5UUl9TRiwgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOworCS8vIGZsdXNoIHRob3NlIHdyaXRlcywgYW5kIGdldCBsYXRlc3QgSENDQSBjb250ZW50cworCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisKKwkvKiBTRiBpbnRlcnJ1cHQgbWlnaHQgZ2V0IGRlbGF5ZWQ7IHJlY29yZCB0aGUgZnJhbWUgY291bnRlciB2YWx1ZSB0aGF0CisJICogaW5kaWNhdGVzIHdoZW4gdGhlIEhDIGlzbid0IGxvb2tpbmcgYXQgaXQsIHNvIGNvbmN1cnJlbnQgdW5saW5rcworCSAqIGJlaGF2ZS4gIGZyYW1lX25vIHdyYXBzIGV2ZXJ5IDJeMTYgbXNlYywgYW5kIGNoYW5nZXMgcmlnaHQgYmVmb3JlCisJICogU0YgaXMgdHJpZ2dlcmVkLgorCSAqLworCWVkLT50aWNrID0gb2hjaV9mcmFtZV9ubyhvaGNpKSArIDE7CisKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogVEQgaGFuZGxpbmcgZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBlbnF1ZXVlIG5leHQgVEQgZm9yIHRoaXMgVVJCIChPSENJIHNwZWMgNS4yLjguMikgKi8KKworc3RhdGljIHZvaWQKK3RkX2ZpbGwgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgdTMyIGluZm8sCisJZG1hX2FkZHJfdCBkYXRhLCBpbnQgbGVuLAorCXN0cnVjdCB1cmIgKnVyYiwgaW50IGluZGV4KQoreworCXN0cnVjdCB0ZAkJKnRkLCAqdGRfcHQ7CisJc3RydWN0IHVyYl9wcml2CQkqdXJiX3ByaXYgPSB1cmItPmhjcHJpdjsKKwlpbnQJCQlpc19pc28gPSBpbmZvICYgVERfSVNPOworCWludAkJCWhhc2g7CisKKwkvLyBBU1NFUlQgKGluZGV4IDwgdXJiX3ByaXYtPmxlbmd0aCk7CisKKwkvKiBhaW0gZm9yIG9ubHkgb25lIGludGVycnVwdCBwZXIgdXJiLiAgbW9zdGx5IGFwcGxpZXMgdG8gY29udHJvbAorCSAqIGFuZCBpc287IG90aGVyIHVyYnMgcmFyZWx5IG5lZWQgbW9yZSB0aGFuIG9uZSBURCBwZXIgdXJiLgorCSAqIHRoaXMgd2F5LCBvbmx5IGZpbmFsIHRkcyAob3Igb25lcyB3aXRoIGFuIGVycm9yKSBjYXVzZSBJUlFzLgorCSAqIGF0IGxlYXN0IGltbWVkaWF0ZWx5OyB1c2UgREk9NiBpbiBjYXNlIGFueSBjb250cm9sIHJlcXVlc3QgaXMKKwkgKiB0ZW1wdGVkIHRvIGRpZSBwYXJ0IHdheSB0aHJvdWdoLiAgKGFuZCB0byBmb3JjZSB0aGUgaGMgdG8gZmx1c2gKKwkgKiBpdHMgZG9uZWxpc3Qgc29vbmlzaCwgZXZlbiBvbiB1bmxpbmsgcGF0aHMuKQorCSAqCisJICogTk9URTogY291bGQgZGVsYXkgaW50ZXJydXB0cyBldmVuIGZvciB0aGUgbGFzdCBURCwgYW5kIGdldCBmZXdlcgorCSAqIGludGVycnVwdHMgLi4uIGluY3JlYXNpbmcgcGVyLXVyYiBsYXRlbmN5IGJ5IHNoYXJpbmcgaW50ZXJydXB0cy4KKwkgKiBEcml2ZXJzIHRoYXQgcXVldWUgYnVsayB1cmJzIG1heSByZXF1ZXN0IHRoYXQgYmVoYXZpb3IuCisJICovCisJaWYgKGluZGV4ICE9ICh1cmJfcHJpdi0+bGVuZ3RoIC0gMSkKKwkJCXx8ICh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX05PX0lOVEVSUlVQVCkpCisJCWluZm8gfD0gVERfRElfU0VUICg2KTsKKworCS8qIHVzZSB0aGlzIHRkIGFzIHRoZSBuZXh0IGR1bW15ICovCisJdGRfcHQgPSB1cmJfcHJpdi0+dGQgW2luZGV4XTsKKworCS8qIGZpbGwgdGhlIG9sZCBkdW1teSBURCAqLworCXRkID0gdXJiX3ByaXYtPnRkIFtpbmRleF0gPSB1cmJfcHJpdi0+ZWQtPmR1bW15OworCXVyYl9wcml2LT5lZC0+ZHVtbXkgPSB0ZF9wdDsKKworCXRkLT5lZCA9IHVyYl9wcml2LT5lZDsKKwl0ZC0+bmV4dF9kbF90ZCA9IE5VTEw7CisJdGQtPmluZGV4ID0gaW5kZXg7CisJdGQtPnVyYiA9IHVyYjsgCisJdGQtPmRhdGFfZG1hID0gZGF0YTsKKwlpZiAoIWxlbikKKwkJZGF0YSA9IDA7CisKKwl0ZC0+aHdJTkZPID0gY3B1X3RvX2hjMzIgKG9oY2ksIGluZm8pOworCWlmIChpc19pc28pIHsKKwkJdGQtPmh3Q0JQID0gY3B1X3RvX2hjMzIgKG9oY2ksIGRhdGEgJiAweEZGRkZGMDAwKTsKKwkJKm9oY2lfaHdQU1dwKG9oY2ksIHRkLCAwKSA9IGNwdV90b19oYzE2IChvaGNpLAorCQkJCQkJKGRhdGEgJiAweDBGRkYpIHwgMHhFMDAwKTsKKwkJdGQtPmVkLT5sYXN0X2lzbyA9IGluZm8gJiAweGZmZmY7CisJfSBlbHNlIHsKKwkJdGQtPmh3Q0JQID0gY3B1X3RvX2hjMzIgKG9oY2ksIGRhdGEpOyAKKwl9CQkJCisJaWYgKGRhdGEpCisJCXRkLT5od0JFID0gY3B1X3RvX2hjMzIgKG9oY2ksIGRhdGEgKyBsZW4gLSAxKTsKKwllbHNlCisJCXRkLT5od0JFID0gMDsKKwl0ZC0+aHdOZXh0VEQgPSBjcHVfdG9faGMzMiAob2hjaSwgdGRfcHQtPnRkX2RtYSk7CisKKwkvKiBhcHBlbmQgdG8gcXVldWUgKi8KKwlsaXN0X2FkZF90YWlsICgmdGQtPnRkX2xpc3QsICZ0ZC0+ZWQtPnRkX2xpc3QpOworCisJLyogaGFzaCBpdCBmb3IgbGF0ZXIgcmV2ZXJzZSBtYXBwaW5nICovCisJaGFzaCA9IFREX0hBU0hfRlVOQyAodGQtPnRkX2RtYSk7CisJdGQtPnRkX2hhc2ggPSBvaGNpLT50ZF9oYXNoIFtoYXNoXTsKKwlvaGNpLT50ZF9oYXNoIFtoYXNoXSA9IHRkOworCisJLyogSEMgbWlnaHQgcmVhZCB0aGUgVEQgKG9yIGNhY2hlbGluZXMpIHJpZ2h0IGF3YXkgLi4uICovCisJd21iICgpOworCXRkLT5lZC0+aHdUYWlsUCA9IHRkLT5od05leHRURDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogUHJlcGFyZSBhbGwgVERzIG9mIGEgdHJhbnNmZXIsIGFuZCBxdWV1ZSB0aGVtIG9udG8gdGhlIEVELgorICogQ2FsbGVyIGd1YXJhbnRlZXMgSEMgaXMgYWN0aXZlLgorICogVXN1YWxseSB0aGUgRUQgaXMgYWxyZWFkeSBvbiB0aGUgc2NoZWR1bGUsIHNvIFREcyBtaWdodCBiZQorICogcHJvY2Vzc2VkIGFzIHNvb24gYXMgdGhleSdyZSBxdWV1ZWQuCisgKi8KK3N0YXRpYyB2b2lkIHRkX3N1Ym1pdF91cmIgKAorCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSwKKwlzdHJ1Y3QgdXJiCSp1cmIKKykgeworCXN0cnVjdCB1cmJfcHJpdgkqdXJiX3ByaXYgPSB1cmItPmhjcHJpdjsKKwlkbWFfYWRkcl90CWRhdGE7CisJaW50CQlkYXRhX2xlbiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwlpbnQJCWNudCA9IDA7CisJdTMyCQlpbmZvID0gMDsKKwlpbnQJCWlzX291dCA9IHVzYl9waXBlb3V0ICh1cmItPnBpcGUpOworCWludAkJcGVyaW9kaWMgPSAwOworCisJLyogT0hDSSBoYW5kbGVzIHRoZSBidWxrL2ludGVycnVwdCBkYXRhIHRvZ2dsZXMgaXRzZWxmLiAgV2UganVzdAorCSAqIHVzZSB0aGUgZGV2aWNlIHRvZ2dsZSBiaXRzIGZvciByZXNldHRpbmcsIGFuZCByZWx5IG9uIHRoZSBmYWN0CisJICogdGhhdCByZXNldHRpbmcgdG9nZ2xlIGlzIG1lYW5pbmdsZXNzIGlmIHRoZSBlbmRwb2ludCBpcyBhY3RpdmUuCisJICovCisgIAlpZiAoIXVzYl9nZXR0b2dnbGUgKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50ICh1cmItPnBpcGUpLCBpc19vdXQpKSB7CisJCXVzYl9zZXR0b2dnbGUgKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50ICh1cmItPnBpcGUpLAorCQkJaXNfb3V0LCAxKTsKKwkJdXJiX3ByaXYtPmVkLT5od0hlYWRQICY9IH5jcHVfdG9faGMzMiAob2hjaSwgRURfQyk7CisJfQorCisJdXJiX3ByaXYtPnRkX2NudCA9IDA7CisJbGlzdF9hZGQgKCZ1cmJfcHJpdi0+cGVuZGluZywgJm9oY2ktPnBlbmRpbmcpOworCisJaWYgKGRhdGFfbGVuKQorCQlkYXRhID0gdXJiLT50cmFuc2Zlcl9kbWE7CisJZWxzZQorCQlkYXRhID0gMDsKKworCS8qIE5PVEU6ICBURF9DQyBpcyBzZXQgc28gd2UgY2FuIHRlbGwgd2hpY2ggVERzIHRoZSBIQyBwcm9jZXNzZWQgYnkKKwkgKiB1c2luZyBURF9DQ19HRVQsIGFzIHdlbGwgYXMgYnkgc2VlaW5nIHRoZW0gb24gdGhlIGRvbmUgbGlzdC4KKwkgKiAoQ0MgPSBOb3RBY2Nlc3NlZCAuLi4gMHgwRiwgb3IgMHgwRSBpbiBQU1dzIGZvciBJU08uKQorCSAqLworCXN3aXRjaCAodXJiX3ByaXYtPmVkLT50eXBlKSB7CisKKwkvKiBCdWxrIGFuZCBpbnRlcnJ1cHQgYXJlIGlkZW50aWNhbCBleGNlcHQgZm9yIHdoZXJlIGluIHRoZSBzY2hlZHVsZQorCSAqIHRoZWlyIEVEcyBsaXZlLgorCSAqLworCWNhc2UgUElQRV9JTlRFUlJVUFQ6CisJCS8qIC4uLiBhbmQgcGVyaW9kaWMgdXJicyBoYXZlIGV4dHJhIGFjY291bnRpbmcgKi8KKwkJcGVyaW9kaWMgPSBvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaW50X3JlcXMrKyA9PSAwCisJCQkmJiBvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzID09IDA7CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBQSVBFX0JVTEs6CisJCWluZm8gPSBpc19vdXQKKwkJCT8gVERfVF9UT0dHTEUgfCBURF9DQyB8IFREX0RQX09VVAorCQkJOiBURF9UX1RPR0dMRSB8IFREX0NDIHwgVERfRFBfSU47CisJCS8qIFREcyBfY291bGRfIHRyYW5zZmVyIHVwIHRvIDhLIGVhY2ggKi8KKwkJd2hpbGUgKGRhdGFfbGVuID4gNDA5NikgeworCQkJdGRfZmlsbCAob2hjaSwgaW5mbywgZGF0YSwgNDA5NiwgdXJiLCBjbnQpOworCQkJZGF0YSArPSA0MDk2OworCQkJZGF0YV9sZW4gLT0gNDA5NjsKKwkJCWNudCsrOworCQl9CisJCS8qIG1heWJlIGF2b2lkIEVEIGhhbHQgb24gZmluYWwgVEQgc2hvcnQgcmVhZCAqLworCQlpZiAoISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykpCisJCQlpbmZvIHw9IFREX1I7CisJCXRkX2ZpbGwgKG9oY2ksIGluZm8sIGRhdGEsIGRhdGFfbGVuLCB1cmIsIGNudCk7CisJCWNudCsrOworCQlpZiAoKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfWkVST19QQUNLRVQpCisJCQkJJiYgY250IDwgdXJiX3ByaXYtPmxlbmd0aCkgeworCQkJdGRfZmlsbCAob2hjaSwgaW5mbywgMCwgMCwgdXJiLCBjbnQpOworCQkJY250Kys7CisJCX0KKwkJLyogbWF5YmUga2lja3N0YXJ0IGJ1bGsgbGlzdCAqLworCQlpZiAodXJiX3ByaXYtPmVkLT50eXBlID09IFBJUEVfQlVMSykgeworCQkJd21iICgpOworCQkJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfQkxGLCAmb2hjaS0+cmVncy0+Y21kc3RhdHVzKTsKKwkJfQorCQlicmVhazsKKworCS8qIGNvbnRyb2wgbWFuYWdlcyBEQVRBMC9EQVRBMSB0b2dnbGUgcGVyLXJlcXVlc3Q7IFNFVFVQIHJlc2V0cyBpdCwKKwkgKiBhbnkgREFUQSBwaGFzZSB3b3JrcyBub3JtYWxseSwgYW5kIHRoZSBTVEFUVVMgYWNrIGlzIHNwZWNpYWwuCisJICovCisJY2FzZSBQSVBFX0NPTlRST0w6CisJCWluZm8gPSBURF9DQyB8IFREX0RQX1NFVFVQIHwgVERfVF9EQVRBMDsKKwkJdGRfZmlsbCAob2hjaSwgaW5mbywgdXJiLT5zZXR1cF9kbWEsIDgsIHVyYiwgY250KyspOworCQlpZiAoZGF0YV9sZW4gPiAwKSB7CisJCQlpbmZvID0gVERfQ0MgfCBURF9SIHwgVERfVF9EQVRBMTsKKwkJCWluZm8gfD0gaXNfb3V0ID8gVERfRFBfT1VUIDogVERfRFBfSU47CisJCQkvKiBOT1RFOiAgbWlzaGFuZGxlcyB0cmFuc2ZlcnMgPjhLLCBzb21lID40SyAqLworCQkJdGRfZmlsbCAob2hjaSwgaW5mbywgZGF0YSwgZGF0YV9sZW4sIHVyYiwgY250KyspOworCQl9CisJCWluZm8gPSAoaXNfb3V0IHx8IGRhdGFfbGVuID09IDApCisJCQk/IFREX0NDIHwgVERfRFBfSU4gfCBURF9UX0RBVEExCisJCQk6IFREX0NDIHwgVERfRFBfT1VUIHwgVERfVF9EQVRBMTsKKwkJdGRfZmlsbCAob2hjaSwgaW5mbywgZGF0YSwgMCwgdXJiLCBjbnQrKyk7CisJCS8qIG1heWJlIGtpY2tzdGFydCBjb250cm9sIGxpc3QgKi8KKwkJd21iICgpOworCQlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9DTEYsICZvaGNpLT5yZWdzLT5jbWRzdGF0dXMpOworCQlicmVhazsKKworCS8qIElTTyBoYXMgbm8gcmV0cmFuc21pdCwgc28gbm8gdG9nZ2xlOyBhbmQgaXQgdXNlcyBzcGVjaWFsIFREcy4KKwkgKiBFYWNoIFREIGNvdWxkIGhhbmRsZSBtdWx0aXBsZSBjb25zZWN1dGl2ZSBmcmFtZXMgKGludGVydmFsIDEpOworCSAqIHdlIGNvdWxkIG9mdGVuIHJlZHVjZSB0aGUgbnVtYmVyIG9mIFREcyBoZXJlLgorCSAqLworCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKKwkJZm9yIChjbnQgPSAwOyBjbnQgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBjbnQrKykgeworCQkJaW50CWZyYW1lID0gdXJiLT5zdGFydF9mcmFtZTsKKworCQkJLy8gRklYTUUgc2NoZWR1bGluZyBzaG91bGQgaGFuZGxlIGZyYW1lIGNvdW50ZXIKKwkJCS8vIHJvbGwtYXJvdW5kIC4uLiBleG90aWMgY2FzZSAoYW5kIE9IQ0kgaGFzCisJCQkvLyBhIDJeMTYgaXNvIHJhbmdlLCB2cyBvdGhlciBIQ3MgbWF4IG9mIDJeMTApCisJCQlmcmFtZSArPSBjbnQgKiB1cmItPmludGVydmFsOworCQkJZnJhbWUgJj0gMHhmZmZmOworCQkJdGRfZmlsbCAob2hjaSwgVERfQ0MgfCBURF9JU08gfCBmcmFtZSwKKwkJCQlkYXRhICsgdXJiLT5pc29fZnJhbWVfZGVzYyBbY250XS5vZmZzZXQsCisJCQkJdXJiLT5pc29fZnJhbWVfZGVzYyBbY250XS5sZW5ndGgsIHVyYiwgY250KTsKKwkJfQorCQlwZXJpb2RpYyA9IG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMrKyA9PSAwCisJCQkmJiBvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaW50X3JlcXMgPT0gMDsKKwkJYnJlYWs7CisJfQorCisJLyogc3RhcnQgcGVyaW9kaWMgZG1hIGlmIG5lZWRlZCAqLworCWlmIChwZXJpb2RpYykgeworCQl3bWIgKCk7CisJCW9oY2ktPmhjX2NvbnRyb2wgfD0gT0hDSV9DVFJMX1BMRXxPSENJX0NUUkxfSUU7CisJCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJfQorCisJLy8gQVNTRVJUICh1cmJfcHJpdi0+bGVuZ3RoID09IGNudCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIERvbmUgTGlzdCBoYW5kbGluZyBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGNhbGN1bGF0ZSB0cmFuc2ZlciBsZW5ndGgvc3RhdHVzIGFuZCB1cGRhdGUgdGhlIHVyYgorICogUFJFQ09ORElUSU9OOiAgaXJxc2FmZSAob25seSBmb3IgdXJiLT5zdGF0dXMgbG9ja2luZykKKyAqLworc3RhdGljIHZvaWQgdGRfZG9uZSAoc3RydWN0IG9oY2lfaGNkICpvaGNpLCBzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCB0ZCAqdGQpCit7CisJdTMyCXRkSU5GTyA9IGhjMzJfdG9fY3B1cCAob2hjaSwgJnRkLT5od0lORk8pOworCWludAljYyA9IDA7CisKKwlsaXN0X2RlbCAoJnRkLT50ZF9saXN0KTsKKworCS8qIElTTyAuLi4gZHJpdmVycyBzZWUgcGVyLVREIGxlbmd0aC9zdGF0dXMgKi8KKyAgCWlmICh0ZElORk8gJiBURF9JU08pIHsKKyAJCXUxNgl0ZFBTVyA9IG9oY2lfaHdQU1cgKG9oY2ksIHRkLCAwKTsKKwkJaW50CWRsZW4gPSAwOworCisJCS8qIE5PVEU6ICBhc3N1bWVzIEZDIGluIHRkSU5GTyA9PSAwLCBhbmQgdGhhdAorCQkgKiBvbmx5IHRoZSBmaXJzdCBvZiAwLi5NQVhQU1cgcHN3cyBpcyB1c2VkLgorCQkgKi8KKworIAkJY2MgPSAodGRQU1cgPj4gMTIpICYgMHhGOworICAJCWlmICh0ZElORk8gJiBURF9DQykJLyogaGMgZGlkbid0IHRvdWNoPyAqLworCQkJcmV0dXJuOworCisJCWlmICh1c2JfcGlwZW91dCAodXJiLT5waXBlKSkKKwkJCWRsZW4gPSB1cmItPmlzb19mcmFtZV9kZXNjIFt0ZC0+aW5kZXhdLmxlbmd0aDsKKwkJZWxzZSB7CisJCQkvKiBzaG9ydCByZWFkcyBhcmUgYWx3YXlzIE9LIGZvciBJU08gKi8KKwkJCWlmIChjYyA9PSBURF9EQVRBVU5ERVJSVU4pCisJCQkJY2MgPSBURF9DQ19OT0VSUk9SOworCQkJZGxlbiA9IHRkUFNXICYgMHgzZmY7CisJCX0KKwkJdXJiLT5hY3R1YWxfbGVuZ3RoICs9IGRsZW47CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2MgW3RkLT5pbmRleF0uYWN0dWFsX2xlbmd0aCA9IGRsZW47CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2MgW3RkLT5pbmRleF0uc3RhdHVzID0gY2NfdG9fZXJyb3IgW2NjXTsKKworCQlpZiAoY2MgIT0gVERfQ0NfTk9FUlJPUikKKwkJCW9oY2lfdmRiZyAob2hjaSwKKwkJCQkidXJiICVwIGlzbyB0ZCAlcCAoJWQpIGxlbiAlZCBjYyAlZFxuIiwKKwkJCQl1cmIsIHRkLCAxICsgdGQtPmluZGV4LCBkbGVuLCBjYyk7CisKKwkvKiBCVUxLLCBJTlQsIENPTlRST0wgLi4uIGRyaXZlcnMgc2VlIGFnZ3JlZ2F0ZSBsZW5ndGgvc3RhdHVzLAorCSAqIGV4Y2VwdCB0aGF0ICJzZXR1cCIgYnl0ZXMgYXJlbid0IGNvdW50ZWQgYW5kICJzaG9ydCIgdHJhbnNmZXJzCisJICogbWlnaHQgbm90IGJlIHJlcG9ydGVkIGFzIGVycm9ycy4KKwkgKi8KKwl9IGVsc2UgeworCQlpbnQJdHlwZSA9IHVzYl9waXBldHlwZSAodXJiLT5waXBlKTsKKwkJdTMyCXRkQkUgPSBoYzMyX3RvX2NwdXAgKG9oY2ksICZ0ZC0+aHdCRSk7CisKKyAgCQljYyA9IFREX0NDX0dFVCAodGRJTkZPKTsKKworCQkvKiB1cGRhdGUgcGFja2V0IHN0YXR1cyBpZiBuZWVkZWQgKHNob3J0IGlzIG5vcm1hbGx5IG9rKSAqLworCQlpZiAoY2MgPT0gVERfREFUQVVOREVSUlVOCisJCQkJJiYgISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykpCisJCQljYyA9IFREX0NDX05PRVJST1I7CisJCWlmIChjYyAhPSBURF9DQ19OT0VSUk9SICYmIGNjIDwgMHgwRSkgeworCQkJc3Bpbl9sb2NrICgmdXJiLT5sb2NrKTsKKwkJCWlmICh1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCisJCQkJdXJiLT5zdGF0dXMgPSBjY190b19lcnJvciBbY2NdOworCQkJc3Bpbl91bmxvY2sgKCZ1cmItPmxvY2spOworCQl9CisKKwkJLyogY291bnQgYWxsIG5vbi1lbXB0eSBwYWNrZXRzIGV4Y2VwdCBjb250cm9sIFNFVFVQIHBhY2tldCAqLworCQlpZiAoKHR5cGUgIT0gUElQRV9DT05UUk9MIHx8IHRkLT5pbmRleCAhPSAwKSAmJiB0ZEJFICE9IDApIHsKKwkJCWlmICh0ZC0+aHdDQlAgPT0gMCkKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGggKz0gdGRCRSAtIHRkLT5kYXRhX2RtYSArIDE7CisJCQllbHNlCisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoICs9CisJCQkJCSAgaGMzMl90b19jcHVwIChvaGNpLCAmdGQtPmh3Q0JQKQorCQkJCQktIHRkLT5kYXRhX2RtYTsKKwkJfQorCisJCWlmIChjYyAhPSBURF9DQ19OT0VSUk9SICYmIGNjIDwgMHgwRSkKKwkJCW9oY2lfdmRiZyAob2hjaSwKKwkJCQkidXJiICVwIHRkICVwICglZCkgY2MgJWQsIGxlbj0lZC8lZFxuIiwKKwkJCQl1cmIsIHRkLCAxICsgdGQtPmluZGV4LCBjYywKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGgsCisJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKyAgCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGQgKgorZWRfaGFsdGVkIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIHN0cnVjdCB0ZCAqdGQsIGludCBjYywgc3RydWN0IHRkICpyZXYpCit7CisgIAlzdHJ1Y3QgdXJiCQkqdXJiID0gdGQtPnVyYjsKKwlzdHJ1Y3QgZWQJCSplZCA9IHRkLT5lZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCSp0bXAgPSB0ZC0+dGRfbGlzdC5uZXh0OworCV9faGMzMgkJCXRvZ2dsZSA9IGVkLT5od0hlYWRQICYgY3B1X3RvX2hjMzIgKG9oY2ksIEVEX0MpOworCisJLyogY2xlYXIgZWQgaGFsdDsgdGhpcyBpcyB0aGUgdGQgdGhhdCBjYXVzZWQgaXQsIGJ1dCBrZWVwIGl0IGluYWN0aXZlCisJICogdW50aWwgaXRzIHVyYi0+Y29tcGxldGUoKSBoYXMgYSBjaGFuY2UgdG8gY2xlYW4gdXAuCisJICovCisJZWQtPmh3SU5GTyB8PSBjcHVfdG9faGMzMiAob2hjaSwgRURfU0tJUCk7CisJd21iICgpOworCWVkLT5od0hlYWRQICY9IH5jcHVfdG9faGMzMiAob2hjaSwgRURfSCk7IAorCisJLyogcHV0IGFueSBsYXRlciB0ZHMgZnJvbSB0aGlzIHVyYiBvbnRvIHRoZSBkb25lbGlzdCwgYWZ0ZXIgJ3RkJywKKwkgKiBvcmRlciB3b24ndCBtYXR0ZXIgaGVyZTogbm8gZXJyb3JzLCBhbmQgbm90aGluZyB3YXMgdHJhbnNmZXJyZWQuCisJICogYWxzbyBwYXRjaCB0aGUgZWQgc28gaXQgbG9va3MgYXMgaWYgdGhvc2UgdGRzIGNvbXBsZXRlZCBub3JtYWxseS4KKwkgKi8KKwl3aGlsZSAodG1wICE9ICZlZC0+dGRfbGlzdCkgeworCQlzdHJ1Y3QgdGQJKm5leHQ7CisJCV9faGMzMgkJaW5mbzsKKworCQluZXh0ID0gbGlzdF9lbnRyeSAodG1wLCBzdHJ1Y3QgdGQsIHRkX2xpc3QpOworCQl0bXAgPSBuZXh0LT50ZF9saXN0Lm5leHQ7CisKKwkJaWYgKG5leHQtPnVyYiAhPSB1cmIpCisJCQlicmVhazsKKworCQkvKiBOT1RFOiBpZiBtdWx0aS10ZCBjb250cm9sIERBVEEgc2VnbWVudHMgZ2V0IHN1cHBvcnRlZCwKKwkJICogdGhpcyB1cmIgaGFkIG9uZSBvZiB0aGVtLCB0aGlzIHRkIHdhc24ndCB0aGUgbGFzdCB0ZAorCQkgKiBpbiB0aGF0IHNlZ21lbnQgKFREX1IgY2xlYXIpLCB0aGlzIGVkIGhhbHRlZCBiZWNhdXNlCisJCSAqIG9mIGEgc2hvcnQgcmVhZCwgX2FuZF8gVVJCX1NIT1JUX05PVF9PSyBpcyBjbGVhciAuLi4KKwkJICogdGhlbiB3ZSBuZWVkIHRvIGxlYXZlIHRoZSBjb250cm9sIFNUQVRVUyBwYWNrZXQgcXVldWVkCisJCSAqIGFuZCBjbGVhciBFRF9TS0lQLgorCQkgKi8KKwkJaW5mbyA9IG5leHQtPmh3SU5GTzsKKwkJaW5mbyB8PSBjcHVfdG9faGMzMiAob2hjaSwgVERfRE9ORSk7CisJCWluZm8gJj0gfmNwdV90b19oYzMyIChvaGNpLCBURF9DQyk7CisJCW5leHQtPmh3SU5GTyA9IGluZm87CisKKwkJbmV4dC0+bmV4dF9kbF90ZCA9IHJldjsJCisJCXJldiA9IG5leHQ7CisKKwkJZWQtPmh3SGVhZFAgPSBuZXh0LT5od05leHRURCB8IHRvZ2dsZTsKKwl9CisKKwkvKiBoZWxwIGZvciB0cm91Ymxlc2hvb3Rpbmc6ICByZXBvcnQgYW55dGhpbmcgdGhhdAorCSAqIGxvb2tzIG9kZCAuLi4gdGhhdCBkb2Vzbid0IGluY2x1ZGUgcHJvdG9jb2wgc3RhbGxzCisJICogKG9yIG1heWJlIHNvbWUgb3RoZXIgdGhpbmdzKQorCSAqLworCXN3aXRjaCAoY2MpIHsKKwljYXNlIFREX0RBVEFVTkRFUlJVTjoKKwkJaWYgKCh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykgPT0gMCkKKwkJCWJyZWFrOworCQkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgVERfQ0NfU1RBTEw6CisJCWlmICh1c2JfcGlwZWNvbnRyb2wgKHVyYi0+cGlwZSkpCisJCQlicmVhazsKKwkJLyogZmFsbHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQlvaGNpX2RiZyAob2hjaSwKKwkJCSJ1cmIgJXAgcGF0aCAlcyBlcCVkJXMgJTA4eCBjYyAlZCAtLT4gc3RhdHVzICVkXG4iLAorCQkJdXJiLCB1cmItPmRldi0+ZGV2cGF0aCwKKwkJCXVzYl9waXBlZW5kcG9pbnQgKHVyYi0+cGlwZSksCisJCQl1c2JfcGlwZWluICh1cmItPnBpcGUpID8gImluIiA6ICJvdXQiLAorCQkJaGMzMl90b19jcHUgKG9oY2ksIHRkLT5od0lORk8pLAorCQkJY2MsIGNjX3RvX2Vycm9yIFtjY10pOworCX0KKworCXJldHVybiByZXY7Cit9CisKKy8qIHJlcGxpZXMgdG8gdGhlIHJlcXVlc3QgaGF2ZSB0byBiZSBvbiBhIEZJRk8gYmFzaXMgc28KKyAqIHdlIHVucmV2ZXJzZSB0aGUgaGMtcmV2ZXJzZWQgZG9uZS1saXN0CisgKi8KK3N0YXRpYyBzdHJ1Y3QgdGQgKmRsX3JldmVyc2VfZG9uZV9saXN0IChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kpCit7CisJdTMyCQl0ZF9kbWE7CisJc3RydWN0IHRkCSp0ZF9yZXYgPSBOVUxMOworCXN0cnVjdCB0ZAkqdGQgPSBOVUxMOworCisJdGRfZG1hID0gaGMzMl90b19jcHVwIChvaGNpLCAmb2hjaS0+aGNjYS0+ZG9uZV9oZWFkKTsKKwlvaGNpLT5oY2NhLT5kb25lX2hlYWQgPSAwOworCXdtYigpOworCisJLyogZ2V0IFREIGZyb20gaGMncyBzaW5nbHkgbGlua2VkIGxpc3QsIGFuZAorCSAqIHByZXBlbmQgdG8gb3Vycy4gIGVkLT50ZF9saXN0IGNoYW5nZXMgbGF0ZXIuCisJICovCisJd2hpbGUgKHRkX2RtYSkgewkJCisJICAgIAlpbnQJCWNjOworCisJCXRkID0gZG1hX3RvX3RkIChvaGNpLCB0ZF9kbWEpOworCQlpZiAoIXRkKSB7CisJCQlvaGNpX2VyciAob2hjaSwgImJhZCBlbnRyeSAlOHhcbiIsIHRkX2RtYSk7CisJCQlicmVhazsKKwkJfQorCisJCXRkLT5od0lORk8gfD0gY3B1X3RvX2hjMzIgKG9oY2ksIFREX0RPTkUpOworCQljYyA9IFREX0NDX0dFVCAoaGMzMl90b19jcHVwIChvaGNpLCAmdGQtPmh3SU5GTykpOworCisJCS8qIE5vbi1pc28gZW5kcG9pbnRzIGNhbiBoYWx0IG9uIGVycm9yOyB1bi1oYWx0LAorCQkgKiBhbmQgZGVxdWV1ZSBhbnkgb3RoZXIgVERzIGZyb20gdGhpcyB1cmIuCisJCSAqIE5vIG90aGVyIFREIGNvdWxkIGhhdmUgY2F1c2VkIHRoZSBoYWx0LgorCQkgKi8KKwkJaWYgKGNjICE9IFREX0NDX05PRVJST1IKKwkJCQkmJiAodGQtPmVkLT5od0hlYWRQICYgY3B1X3RvX2hjMzIgKG9oY2ksIEVEX0gpKSkKKwkJCXRkX3JldiA9IGVkX2hhbHRlZCAob2hjaSwgdGQsIGNjLCB0ZF9yZXYpOworCisJCXRkLT5uZXh0X2RsX3RkID0gdGRfcmV2OwkKKwkJdGRfcmV2ID0gdGQ7CisJCXRkX2RtYSA9IGhjMzJfdG9fY3B1cCAob2hjaSwgJnRkLT5od05leHRURCk7CisJfQkKKwlyZXR1cm4gdGRfcmV2OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiB0aGVyZSBhcmUgc29tZSB1cmJzL2VkcyB0byB1bmxpbms7IGNhbGxlZCBpbl9pcnEoKSwgd2l0aCBIQ0QgbG9ja2VkICovCitzdGF0aWMgdm9pZAorZmluaXNoX3VubGlua3MgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgdTE2IHRpY2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBlZAkqZWQsICoqbGFzdDsKKworcmVzY2FuX2FsbDoKKwlmb3IgKGxhc3QgPSAmb2hjaS0+ZWRfcm1fbGlzdCwgZWQgPSAqbGFzdDsgZWQgIT0gTlVMTDsgZWQgPSAqbGFzdCkgeworCQlzdHJ1Y3QgbGlzdF9oZWFkCSplbnRyeSwgKnRtcDsKKwkJaW50CQkJY29tcGxldGVkLCBtb2RpZmllZDsKKwkJX19oYzMyCQkJKnByZXY7CisKKwkJLyogb25seSB0YWtlIG9mZiBFRHMgdGhhdCB0aGUgSEMgaXNuJ3QgdXNpbmcsIGFjY291bnRpbmcgZm9yCisJCSAqIGZyYW1lIGNvdW50ZXIgd3JhcHMgYW5kIEVEcyB3aXRoIHBhcnRpYWxseSByZXRpcmVkIFREcworCQkgKi8KKwkJaWYgKGxpa2VseSAocmVncyAmJiBIQ19JU19SVU5OSU5HKG9oY2lfdG9faGNkKG9oY2kpLT5zdGF0ZSkpKSB7CisJCQlpZiAodGlja19iZWZvcmUgKHRpY2ssIGVkLT50aWNrKSkgeworc2tpcF9lZDoKKwkJCQlsYXN0ID0gJmVkLT5lZF9uZXh0OworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoIWxpc3RfZW1wdHkgKCZlZC0+dGRfbGlzdCkpIHsKKwkJCQlzdHJ1Y3QgdGQJKnRkOworCQkJCXUzMgkJaGVhZDsKKworCQkJCXRkID0gbGlzdF9lbnRyeSAoZWQtPnRkX2xpc3QubmV4dCwgc3RydWN0IHRkLAorCQkJCQkJCXRkX2xpc3QpOworCQkJCWhlYWQgPSBoYzMyX3RvX2NwdSAob2hjaSwgZWQtPmh3SGVhZFApICYKKwkJCQkJCQkJVERfTUFTSzsKKworCQkJCS8qIElOVFJfV0RIIG1heSBuZWVkIHRvIGNsZWFuIHVwIGZpcnN0ICovCisJCQkJaWYgKHRkLT50ZF9kbWEgIT0gaGVhZCkKKwkJCQkJZ290byBza2lwX2VkOworCQkJfQorCQl9CisKKwkJLyogcmVlbnRyYW5jeTogIGlmIHdlIGRyb3AgdGhlIHNjaGVkdWxlIGxvY2ssIHNvbWVvbmUgbWlnaHQKKwkJICogaGF2ZSBtb2RpZmllZCB0aGlzIGxpc3QuICBub3JtYWxseSBpdCdzIGp1c3QgcHJlcGVuZGluZworCQkgKiBlbnRyaWVzICh3aGljaCB3ZSdkIGlnbm9yZSksIGJ1dCBwYXJhbm9pYSB3b24ndCBodXJ0LgorCQkgKi8KKwkJKmxhc3QgPSBlZC0+ZWRfbmV4dDsKKwkJZWQtPmVkX25leHQgPSBOVUxMOworCQltb2RpZmllZCA9IDA7CisKKwkJLyogdW5saW5rIHVyYnMgYXMgcmVxdWVzdGVkLCBidXQgcmVzY2FuIHRoZSBsaXN0IGFmdGVyCisJCSAqIHdlIGNhbGwgYSBjb21wbGV0aW9uIHNpbmNlIGl0IG1pZ2h0IGhhdmUgdW5saW5rZWQKKwkJICogYW5vdGhlciAoZWFybGllcikgdXJiCisJCSAqCisJCSAqIFdoZW4gd2UgZ2V0IGhlcmUsIHRoZSBIQyBkb2Vzbid0IHNlZSB0aGlzIGVkLiAgQnV0IGl0CisJCSAqIG11c3Qgbm90IGJlIHJlc2NoZWR1bGVkIHVudGlsIGFsbCBjb21wbGV0ZWQgVVJCcyBoYXZlCisJCSAqIGJlZW4gZ2l2ZW4gYmFjayB0byB0aGUgZHJpdmVyLgorCQkgKi8KK3Jlc2Nhbl90aGlzOgorCQljb21wbGV0ZWQgPSAwOworCQlwcmV2ID0gJmVkLT5od0hlYWRQOworCQlsaXN0X2Zvcl9lYWNoX3NhZmUgKGVudHJ5LCB0bXAsICZlZC0+dGRfbGlzdCkgeworCQkJc3RydWN0IHRkCSp0ZDsKKwkJCXN0cnVjdCB1cmIJKnVyYjsKKwkJCXVyYl9wcml2X3QJKnVyYl9wcml2OworCQkJX19oYzMyCQlzYXZlYml0czsKKworCQkJdGQgPSBsaXN0X2VudHJ5IChlbnRyeSwgc3RydWN0IHRkLCB0ZF9saXN0KTsKKwkJCXVyYiA9IHRkLT51cmI7CisJCQl1cmJfcHJpdiA9IHRkLT51cmItPmhjcHJpdjsKKworCQkJaWYgKHVyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQkJCXByZXYgPSAmdGQtPmh3TmV4dFREOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBwYXRjaCBwb2ludGVyIGhjIHVzZXMgKi8KKwkJCXNhdmViaXRzID0gKnByZXYgJiB+Y3B1X3RvX2hjMzIgKG9oY2ksIFREX01BU0spOworCQkJKnByZXYgPSB0ZC0+aHdOZXh0VEQgfCBzYXZlYml0czsKKworCQkJLyogSEMgbWF5IGhhdmUgcGFydGx5IHByb2Nlc3NlZCB0aGlzIFREICovCisJCQl0ZF9kb25lIChvaGNpLCB1cmIsIHRkKTsKKwkJCXVyYl9wcml2LT50ZF9jbnQrKzsKKworCQkJLyogaWYgVVJCIGlzIGRvbmUsIGNsZWFuIHVwICovCisJCQlpZiAodXJiX3ByaXYtPnRkX2NudCA9PSB1cmJfcHJpdi0+bGVuZ3RoKSB7CisJCQkJbW9kaWZpZWQgPSBjb21wbGV0ZWQgPSAxOworCQkJCWZpbmlzaF91cmIgKG9oY2ksIHVyYiwgcmVncyk7CisJCQl9CisJCX0KKwkJaWYgKGNvbXBsZXRlZCAmJiAhbGlzdF9lbXB0eSAoJmVkLT50ZF9saXN0KSkKKwkJCWdvdG8gcmVzY2FuX3RoaXM7CisKKwkJLyogRUQncyBub3cgb2ZmaWNpYWxseSB1bmxpbmtlZCwgaGMgZG9lc24ndCBzZWUgKi8KKwkJZWQtPnN0YXRlID0gRURfSURMRTsKKwkJZWQtPmh3SGVhZFAgJj0gfmNwdV90b19oYzMyKG9oY2ksIEVEX0gpOworCQllZC0+aHdOZXh0RUQgPSAwOworCQl3bWIgKCk7CisJCWVkLT5od0lORk8gJj0gfmNwdV90b19oYzMyIChvaGNpLCBFRF9TS0lQIHwgRURfREVRVUVVRSk7CisKKwkJLyogYnV0IGlmIHRoZXJlJ3Mgd29yayBxdWV1ZWQsIHJlc2NoZWR1bGUgKi8KKwkJaWYgKCFsaXN0X2VtcHR5ICgmZWQtPnRkX2xpc3QpKSB7CisJCQlpZiAoSENfSVNfUlVOTklORyhvaGNpX3RvX2hjZChvaGNpKS0+c3RhdGUpKQorCQkJCWVkX3NjaGVkdWxlIChvaGNpLCBlZCk7CisJCX0KKworCQlpZiAobW9kaWZpZWQpCisJCQlnb3RvIHJlc2Nhbl9hbGw7CisgICAJfQorCisJLyogbWF5YmUgcmVlbmFibGUgY29udHJvbCBhbmQgYnVsayBsaXN0cyAqLyAKKwlpZiAoSENfSVNfUlVOTklORyhvaGNpX3RvX2hjZChvaGNpKS0+c3RhdGUpCisJCQkmJiBvaGNpX3RvX2hjZChvaGNpKS0+c3RhdGUgIT0gSENfU1RBVEVfUVVJRVNDSU5HCisJCQkmJiAhb2hjaS0+ZWRfcm1fbGlzdCkgeworCQl1MzIJY29tbWFuZCA9IDAsIGNvbnRyb2wgPSAwOworCisJCWlmIChvaGNpLT5lZF9jb250cm9sdGFpbCkgeworCQkJY29tbWFuZCB8PSBPSENJX0NMRjsKKwkJCWlmICghKG9oY2ktPmhjX2NvbnRyb2wgJiBPSENJX0NUUkxfQ0xFKSkgeworCQkJCWNvbnRyb2wgfD0gT0hDSV9DVFJMX0NMRTsKKwkJCQlvaGNpX3dyaXRlbCAob2hjaSwgMCwKKwkJCQkJJm9oY2ktPnJlZ3MtPmVkX2NvbnRyb2xjdXJyZW50KTsKKwkJCX0KKwkJfQorCQlpZiAob2hjaS0+ZWRfYnVsa3RhaWwpIHsKKwkJCWNvbW1hbmQgfD0gT0hDSV9CTEY7CisJCQlpZiAoIShvaGNpLT5oY19jb250cm9sICYgT0hDSV9DVFJMX0JMRSkpIHsKKwkJCQljb250cm9sIHw9IE9IQ0lfQ1RSTF9CTEU7CisJCQkJb2hjaV93cml0ZWwgKG9oY2ksIDAsCisJCQkJCSZvaGNpLT5yZWdzLT5lZF9idWxrY3VycmVudCk7CisJCQl9CisJCX0KKwkJCisJCS8qIENMRS9CTEUgdG8gZW5hYmxlLCBDTEYvQkxGIHRvIChtYXliZSkga2lja3N0YXJ0ICovCisJCWlmIChjb250cm9sKSB7CisJCQlvaGNpLT5oY19jb250cm9sIHw9IGNvbnRyb2w7CisgCQkJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsCisJCQkJCSZvaGNpLT5yZWdzLT5jb250cm9sKTsgICAKKyAJCX0KKwkJaWYgKGNvbW1hbmQpCisJCQlvaGNpX3dyaXRlbCAob2hjaSwgY29tbWFuZCwgJm9oY2ktPnJlZ3MtPmNtZHN0YXR1cyk7ICAgCisgCX0KK30KKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBQcm9jZXNzIG5vcm1hbCBjb21wbGV0aW9ucyAoZXJyb3Igb3Igc3VjY2VzcykgYW5kIGNsZWFuIHRoZSBzY2hlZHVsZXMuCisgKgorICogVGhpcyBpcyB0aGUgbWFpbiBwYXRoIGZvciBoYW5kaW5nIHVyYnMgYmFjayB0byBkcml2ZXJzLiAgVGhlIG9ubHkgb3RoZXIKKyAqIHBhdGggaXMgZmluaXNoX3VubGlua3MoKSwgd2hpY2ggdW5saW5rcyBVUkJzIHVzaW5nIGVkX3JtX2xpc3QsIGluc3RlYWQgb2YKKyAqIHNjYW5uaW5nIHRoZSAocmUtcmV2ZXJzZWQpIGRvbmVsaXN0IGFzIHRoaXMgZG9lcy4KKyAqLworc3RhdGljIHZvaWQKK2RsX2RvbmVfbGlzdCAoc3RydWN0IG9oY2lfaGNkICpvaGNpLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdGQJKnRkID0gZGxfcmV2ZXJzZV9kb25lX2xpc3QgKG9oY2kpOworCisgIAl3aGlsZSAodGQpIHsKKwkJc3RydWN0IHRkCSp0ZF9uZXh0ID0gdGQtPm5leHRfZGxfdGQ7CisJCXN0cnVjdCB1cmIJKnVyYiA9IHRkLT51cmI7CisJCXVyYl9wcml2X3QJKnVyYl9wcml2ID0gdXJiLT5oY3ByaXY7CisJCXN0cnVjdCBlZAkqZWQgPSB0ZC0+ZWQ7CisKKwkJLyogdXBkYXRlIFVSQidzIGxlbmd0aCBhbmQgc3RhdHVzIGZyb20gVEQgKi8KKyAgIAkJdGRfZG9uZSAob2hjaSwgdXJiLCB0ZCk7CisgIAkJdXJiX3ByaXYtPnRkX2NudCsrOworCisJCS8qIElmIGFsbCB0aGlzIHVyYidzIFREcyBhcmUgZG9uZSwgY2FsbCBjb21wbGV0ZSgpICovCisgIAkJaWYgKHVyYl9wcml2LT50ZF9jbnQgPT0gdXJiX3ByaXYtPmxlbmd0aCkKKyAgCQkJZmluaXNoX3VyYiAob2hjaSwgdXJiLCByZWdzKTsKKworCQkvKiBjbGVhbiBzY2hlZHVsZTogIHVubGluayBFRHMgdGhhdCBhcmUgbm8gbG9uZ2VyIGJ1c3kgKi8KKwkJaWYgKGxpc3RfZW1wdHkgKCZlZC0+dGRfbGlzdCkpIHsKKwkJCWlmIChlZC0+c3RhdGUgPT0gRURfT1BFUikKKwkJCQlzdGFydF9lZF91bmxpbmsgKG9oY2ksIGVkKTsKKworCQkvKiAuLi4gcmVlbmFibGluZyBoYWx0ZWQgRURzIG9ubHkgYWZ0ZXIgZmF1bHQgY2xlYW51cCAqLworCQl9IGVsc2UgaWYgKChlZC0+aHdJTkZPICYgY3B1X3RvX2hjMzIgKG9oY2ksIEVEX1NLSVAgfCBFRF9ERVFVRVVFKSkKKwkJCQkJPT0gY3B1X3RvX2hjMzIgKG9oY2ksIEVEX1NLSVApKSB7CisJCQl0ZCA9IGxpc3RfZW50cnkgKGVkLT50ZF9saXN0Lm5leHQsIHN0cnVjdCB0ZCwgdGRfbGlzdCk7CisgCQkJaWYgKCEodGQtPmh3SU5GTyAmIGNwdV90b19oYzMyIChvaGNpLCBURF9ET05FKSkpIHsKKwkJCQllZC0+aHdJTkZPICY9IH5jcHVfdG9faGMzMiAob2hjaSwgRURfU0tJUCk7CisJCQkJLyogLi4uIGhjIG1heSBuZWVkIHdha2luZy11cCAqLworCQkJCXN3aXRjaCAoZWQtPnR5cGUpIHsKKwkJCQljYXNlIFBJUEVfQ09OVFJPTDoKKwkJCQkJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfQ0xGLAorCQkJCQkJJm9oY2ktPnJlZ3MtPmNtZHN0YXR1cyk7ICAgCisJCQkJCWJyZWFrOworCQkJCWNhc2UgUElQRV9CVUxLOgorCQkJCQlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9CTEYsCisJCQkJCQkmb2hjaS0+cmVncy0+Y21kc3RhdHVzKTsgICAKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKyAgICAJCXRkID0gdGRfbmV4dDsKKyAgCX0gIAorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNhMTExMS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNhMTExMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNGQyYmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktc2ExMTExLmMKQEAgLTAsMCArMSwyODkgQEAKKy8qCisgKiBPSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgorICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDIgRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiAoQykgQ29weXJpZ2h0IDIwMDIgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAqIAorICogU0ExMTExIEJ1cyBHbHVlCisgKgorICogV3JpdHRlbiBieSBDaHJpc3RvcGhlciBIb292ZXIgPGNoQGhwbC5ocC5jb20+CisgKiBCYXNlZCBvbiBmcmFnbWVudHMgb2YgcHJldmlvdXMgZHJpdmVyIGJ5IFJ1c2VsbCBLaW5nIGV0IGFsLgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMLgorICovCisgCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9hc3NhYmV0Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYmFkZ2U0Lmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3NhMTExMS5oPgorCisjaWZuZGVmIENPTkZJR19TQTExMTEKKyNlcnJvciAiVGhpcyBmaWxlIGlzIFNBLTExMTEgYnVzIGdsdWUuICBDT05GSUdfU0ExMTExIG11c3QgYmUgZGVmaW5lZC4iCisjZW5kaWYKKworZXh0ZXJuIGludCB1c2JfZGlzYWJsZWQodm9pZCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHNhMTExMV9zdGFydF9oYyhzdHJ1Y3Qgc2ExMTExX2RldiAqZGV2KQoreworCXVuc2lnbmVkIGludCB1c2JfcnN0ID0gMDsKKworCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fIAorCSAgICAgICAiOiBzdGFydGluZyBTQS0xMTExIE9IQ0kgVVNCIENvbnRyb2xsZXJcbiIpOworCisjaWZkZWYgQ09ORklHX1NBMTEwMF9CQURHRTQKKwlpZiAobWFjaGluZV9pc19iYWRnZTQoKSkgeworCQliYWRnZTRfc2V0XzVWKEJBREdFNF81Vl9VU0IsIDEpOworCX0KKyNlbmRpZgorCisJaWYgKG1hY2hpbmVfaXNfeHA4NjAoKSB8fAorCSAgICBtYWNoaW5lX2hhc19uZXBvbnNldCgpIHx8CisJICAgIG1hY2hpbmVfaXNfcGZzMTY4KCkgfHwKKwkgICAgbWFjaGluZV9pc19iYWRnZTQoKSkKKwkJdXNiX3JzdCA9IFVTQl9SRVNFVF9QV1JTRU5TRUxPVyB8IFVTQl9SRVNFVF9QV1JDVFJMTE9XOworCisJLyoKKwkgKiBDb25maWd1cmUgdGhlIHBvd2VyIHNlbnNlIGFuZCBjb250cm9sIGxpbmVzLiAgUGxhY2UgdGhlIFVTQgorCSAqIGhvc3QgY29udHJvbGxlciBpbiByZXNldC4KKwkgKi8KKwlzYTExMTFfd3JpdGVsKHVzYl9yc3QgfCBVU0JfUkVTRVRfRk9SQ0VJRlJFU0VUIHwgVVNCX1JFU0VUX0ZPUkNFSENSRVNFVCwKKwkJICAgICAgZGV2LT5tYXBiYXNlICsgU0ExMTExX1VTQl9SRVNFVCk7CisKKwkvKgorCSAqIE5vdywgY2FyZWZ1bGx5IGVuYWJsZSB0aGUgVVNCIGNsb2NrLCBhbmQgdGFrZQorCSAqIHRoZSBVU0IgaG9zdCBjb250cm9sbGVyIG91dCBvZiByZXNldC4KKwkgKi8KKwlzYTExMTFfZW5hYmxlX2RldmljZShkZXYpOworCXVkZWxheSgxMSk7CisJc2ExMTExX3dyaXRlbCh1c2JfcnN0LCBkZXYtPm1hcGJhc2UgKyBTQTExMTFfVVNCX1JFU0VUKTsKK30KKworc3RhdGljIHZvaWQgc2ExMTExX3N0b3BfaGMoc3RydWN0IHNhMTExMV9kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgdXNiX3JzdDsKKwlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXyAKKwkgICAgICAgIjogc3RvcHBpbmcgU0EtMTExMSBPSENJIFVTQiBDb250cm9sbGVyXG4iKTsKKworCS8qCisJICogUHV0IHRoZSBVU0IgaG9zdCBjb250cm9sbGVyIGludG8gcmVzZXQuCisJICovCisJdXNiX3JzdCA9IHNhMTExMV9yZWFkbChkZXYtPm1hcGJhc2UgKyBTQTExMTFfVVNCX1JFU0VUKTsKKwlzYTExMTFfd3JpdGVsKHVzYl9yc3QgfCBVU0JfUkVTRVRfRk9SQ0VJRlJFU0VUIHwgVVNCX1JFU0VUX0ZPUkNFSENSRVNFVCwKKwkJICAgICAgZGV2LT5tYXBiYXNlICsgU0ExMTExX1VTQl9SRVNFVCk7CisKKwkvKgorCSAqIFN0b3AgdGhlIFVTQiBjbG9jay4KKwkgKi8KKwlzYTExMTFfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKworI2lmZGVmIENPTkZJR19TQTExMDBfQkFER0U0CisJaWYgKG1hY2hpbmVfaXNfYmFkZ2U0KCkpIHsKKwkJLyogRGlzYWJsZSBwb3dlciB0byB0aGUgVVNCIGJ1cyAqLworCQliYWRnZTRfc2V0XzVWKEJBREdFNF81Vl9VU0IsIDApOworCX0KKyNlbmRpZgorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAwCitzdGF0aWMgdm9pZCBkdW1wX2hjaV9zdGF0dXMoc3RydWN0IHVzYl9oY2QgKmhjZCwgY29uc3QgY2hhciAqbGFiZWwpCit7CisJdW5zaWduZWQgbG9uZyBzdGF0dXMgPSBzYTExMTFfcmVhZGwoaGNkLT5yZWdzICsgU0ExMTExX1VTQl9TVEFUVVMpOworCisJZGJnICgiJXMgVVNCX1NUQVRVUyA9IHsgJXMlcyVzJXMlc30iLCBsYWJlbCwKKwkgICAgICgoc3RhdHVzICYgVVNCX1NUQVRVU19JUlFIQ0lSTVRXS1VQKSA/ICJJUlFIQ0lSTVRXS1VQICIgOiAiIiksCisJICAgICAoKHN0YXR1cyAmIFVTQl9TVEFUVVNfSVJRSENJQlVGRkFDQykgPyAiSVJRSENJQlVGRkFDQyAiIDogIiIpLAorCSAgICAgKChzdGF0dXMgJiBVU0JfU1RBVFVTX05JUlFIQ0lNKSA/ICIiIDogIklSUUhDSU0gIiksCisJICAgICAoKHN0YXR1cyAmIFVTQl9TVEFUVVNfTkhDSU1GQ0xSKSA/ICIiIDogIkhDSU1GQ0xSICIpLAorCSAgICAgKChzdGF0dXMgJiBVU0JfU1RBVFVTX1VTQlBXUlNFTlNFKSA/ICJVU0JQV1JTRU5TRSAiIDogIiIpKTsKK30KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBjb25maWd1cmUgc28gYW4gSEMgZGV2aWNlIGFuZCBpZCBhcmUgYWx3YXlzIHByb3ZpZGVkICovCisvKiBhbHdheXMgY2FsbGVkIHdpdGggcHJvY2VzcyBjb250ZXh0OyBzbGVlcGluZyBpcyBPSyAqLworCisKKy8qKgorICogdXNiX2hjZF9zYTExMTFfcHJvYmUgLSBpbml0aWFsaXplIFNBLTExMTEtYmFzZWQgSENEcworICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogQWxsb2NhdGVzIGJhc2ljIHJlc291cmNlcyBmb3IgdGhpcyBVU0IgaG9zdCBjb250cm9sbGVyLCBhbmQKKyAqIHRoZW4gaW52b2tlcyB0aGUgc3RhcnQoKSBtZXRob2QgZm9yIHRoZSBIQ0QgYXNzb2NpYXRlZCB3aXRoIGl0CisgKiB0aHJvdWdoIHRoZSBob3RwbHVnIGVudHJ5J3MgZHJpdmVyX2RhdGEuCisgKgorICogU3RvcmUgdGhpcyBmdW5jdGlvbiBpbiB0aGUgSENEJ3Mgc3RydWN0IHBjaV9kcml2ZXIgYXMgcHJvYmUoKS4KKyAqLworaW50IHVzYl9oY2Rfc2ExMTExX3Byb2JlIChjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIsCisJCQkgIHN0cnVjdCBzYTExMTFfZGV2ICpkZXYpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKKwlpbnQgcmV0dmFsOworCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QgKGRyaXZlciwgJmRldi0+ZGV2LCAic2ExMTExIik7CisJaWYgKCFoY2QpCisJCXJldHVybiAtRU5PTUVNOworCWhjZC0+cnNyY19zdGFydCA9IGRldi0+cmVzLnN0YXJ0OworCWhjZC0+cnNyY19sZW4gPSBkZXYtPnJlcy5lbmQgLSBkZXYtPnJlcy5zdGFydCArIDE7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4sIGhjZF9uYW1lKSkgeworCQlkYmcoInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWQiKTsKKwkJcmV0dmFsID0gLUVCVVNZOworCQlnb3RvIGVycjE7CisJfQorCWhjZC0+cmVncyA9IGRldi0+bWFwYmFzZTsKKworCXNhMTExMV9zdGFydF9oYyhkZXYpOworCW9oY2lfaGNkX2luaXQoaGNkX3RvX29oY2koaGNkKSk7CisKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGRldi0+aXJxWzFdLCBTQV9JTlRFUlJVUFQpOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXNhMTExMV9zdG9wX2hjKGRldik7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisgZXJyMToKKwl1c2JfcHV0X2hjZChoY2QpOworCXJldHVybiByZXR2YWw7Cit9CisKKworLyogbWF5IGJlIGNhbGxlZCB3aXRob3V0IGNvbnRyb2xsZXIgZWxlY3RyaWNhbGx5IHByZXNlbnQgKi8KKy8qIG1heSBiZSBjYWxsZWQgd2l0aCBjb250cm9sbGVyLCBidXMsIGFuZCBkZXZpY2VzIGFjdGl2ZSAqLworCisvKioKKyAqIHVzYl9oY2Rfc2ExMTExX3JlbW92ZSAtIHNodXRkb3duIHByb2Nlc3NpbmcgZm9yIFNBLTExMTEtYmFzZWQgSENEcworICogQGRldjogVVNCIEhvc3QgQ29udHJvbGxlciBiZWluZyByZW1vdmVkCisgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKKyAqCisgKiBSZXZlcnNlcyB0aGUgZWZmZWN0IG9mIHVzYl9oY2Rfc2ExMTExX3Byb2JlKCksIGZpcnN0IGludm9raW5nCisgKiB0aGUgSENEJ3Mgc3RvcCgpIG1ldGhvZC4gIEl0IGlzIGFsd2F5cyBjYWxsZWQgZnJvbSBhIHRocmVhZAorICogY29udGV4dCwgbm9ybWFsbHkgInJtbW9kIiwgImFwbWQiLCBvciBzb21ldGhpbmcgc2ltaWxhci4KKyAqCisgKi8KK3ZvaWQgdXNiX2hjZF9zYTExMTFfcmVtb3ZlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3Qgc2ExMTExX2RldiAqZGV2KQoreworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisJc2ExMTExX3N0b3BfaGMoZGV2KTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwl1c2JfcHV0X2hjZChoY2QpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9fZGV2aW5pdAorb2hjaV9zYTExMTFfc3RhcnQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CisJaW50CQlyZXQ7CisKKwlpZiAoKHJldCA9IG9oY2lfaW5pdChvaGNpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKChyZXQgPSBvaGNpX3J1biAob2hjaSkpIDwgMCkgeworCQllcnIgKCJjYW4ndCBzdGFydCAlcyIsIGhjZC0+c2VsZi5idXNfbmFtZSk7CisJCW9oY2lfc3RvcCAoaGNkKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIG9oY2lfc2ExMTExX2hjX2RyaXZlciA9IHsKKwkuZGVzY3JpcHRpb24gPQkJaGNkX25hbWUsCisJLnByb2R1Y3RfZGVzYyA9CQkiU0EtMTExMSBPSENJIiwKKwkuaGNkX3ByaXZfc2l6ZSA9CXNpemVvZihzdHJ1Y3Qgb2hjaV9oY2QpLAorCisJLyoKKwkgKiBnZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UKKwkgKi8KKwkuaXJxID0JCQlvaGNpX2lycSwKKwkuZmxhZ3MgPQkJSENEX1VTQjExIHwgSENEX01FTU9SWSwKKworCS8qCisJICogYmFzaWMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMKKwkgKi8KKwkuc3RhcnQgPQkJb2hjaV9zYTExMTFfc3RhcnQsCisjaWZkZWYJQ09ORklHX1BNCisJLyogc3VzcGVuZDoJCW9oY2lfc2ExMTExX3N1c3BlbmQsICAtLSB0YmQgKi8KKwkvKiByZXN1bWU6CQlvaGNpX3NhMTExMV9yZXN1bWUsICAgLS0gdGJkICovCisjZW5kaWYKKwkuc3RvcCA9CQkJb2hjaV9zdG9wLAorCisJLyoKKwkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcworCSAqLworCS51cmJfZW5xdWV1ZSA9CQlvaGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZSA9CQlvaGNpX3VyYl9kZXF1ZXVlLAorCS5lbmRwb2ludF9kaXNhYmxlID0Jb2hjaV9lbmRwb2ludF9kaXNhYmxlLAorCisJLyoKKwkgKiBzY2hlZHVsaW5nIHN1cHBvcnQKKwkgKi8KKwkuZ2V0X2ZyYW1lX251bWJlciA9CW9oY2lfZ2V0X2ZyYW1lLAorCisJLyoKKwkgKiByb290IGh1YiBzdXBwb3J0CisJICovCisJLmh1Yl9zdGF0dXNfZGF0YSA9CW9oY2lfaHViX3N0YXR1c19kYXRhLAorCS5odWJfY29udHJvbCA9CQlvaGNpX2h1Yl9jb250cm9sLAorI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAorCS5odWJfc3VzcGVuZCA9CQlvaGNpX2h1Yl9zdXNwZW5kLAorCS5odWJfcmVzdW1lID0JCW9oY2lfaHViX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBvaGNpX2hjZF9zYTExMTFfZHJ2X3Byb2JlKHN0cnVjdCBzYTExMTFfZGV2ICpkZXYpCit7CisJaW50IHJldDsKKworCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSB1c2JfaGNkX3NhMTExMV9wcm9iZSgmb2hjaV9zYTExMTFfaGNfZHJpdmVyLCBkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9oY2Rfc2ExMTExX2Rydl9yZW1vdmUoc3RydWN0IHNhMTExMV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gc2ExMTExX2dldF9kcnZkYXRhKGRldik7CisKKwl1c2JfaGNkX3NhMTExMV9yZW1vdmUoaGNkLCBkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNhMTExMV9kcml2ZXIgb2hjaV9oY2Rfc2ExMTExX2RyaXZlciA9IHsKKwkuZHJ2ID0geworCQkubmFtZQk9ICJzYTExMTEtb2hjaSIsCisJfSwKKwkuZGV2aWQJCT0gU0ExMTExX0RFVklEX1VTQiwKKwkucHJvYmUJCT0gb2hjaV9oY2Rfc2ExMTExX2Rydl9wcm9iZSwKKwkucmVtb3ZlCQk9IG9oY2lfaGNkX3NhMTExMV9kcnZfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgb2hjaV9oY2Rfc2ExMTExX2luaXQgKHZvaWQpCit7CisJZGJnIChEUklWRVJfSU5GTyAiIChTQS0xMTExKSIpOworCWRiZyAoImJsb2NrIHNpemVzOiBlZCAlZCB0ZCAlZCIsCisJCXNpemVvZiAoc3RydWN0IGVkKSwgc2l6ZW9mIChzdHJ1Y3QgdGQpKTsKKworCXJldHVybiBzYTExMTFfZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9zYTExMTFfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9oY2lfaGNkX3NhMTExMV9jbGVhbnVwICh2b2lkKQoreworCXNhMTExMV9kcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2Rfc2ExMTExX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0IChvaGNpX2hjZF9zYTExMTFfaW5pdCk7Cittb2R1bGVfZXhpdCAob2hjaV9oY2Rfc2ExMTExX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L29oY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmE2ZTJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLmgKQEAgLTAsMCArMSw2MzYgQEAKKy8qCisgKiBPSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi4KKyAqIAorICogKEMpIENvcHlyaWdodCAxOTk5IFJvbWFuIFdlaXNzZ2FlcmJlciA8d2Vpc3NnQHZpZW5uYS5hdD4KKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAyIERhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogCisgKiBUaGlzIGZpbGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC4KKyAqLworCisvKgorICogX19oYzMyIGFuZCBfX2hjMTYgYXJlICJIb3N0IENvbnRyb2xsZXIiIHR5cGVzLCB0aGV5IG1heSBiZSBlcXVpdmFsZW50IHRvCisgKiBfX2xlWFggKG5vcm1hbGx5KSBvciBfX2JlWFggKGdpdmVuIE9IQ0lfQklHX0VORElBTiksIGRlcGVuZGluZyBvbiB0aGUKKyAqIGhvc3QgY29udHJvbGxlciBpbXBsZW1lbnRhdGlvbi4KKyAqLwordHlwZWRlZiBfX3UzMiBfX2JpdHdpc2UgX19oYzMyOwordHlwZWRlZiBfX3UxNiBfX2JpdHdpc2UgX19oYzE2OworIAorLyoKKyAqIE9IQ0kgRW5kcG9pbnQgRGVzY3JpcHRvciAoRUQpIC4uLiBob2xkcyBURCBxdWV1ZQorICogU2VlIE9IQ0kgc3BlYywgc2VjdGlvbiA0LjIKKyAqCisgKiBUaGlzIGlzIGEgIlF1ZXVlIEhlYWQiIGZvciB0aG9zZSB0cmFuc2ZlcnMsIHdoaWNoIGlzIHdoeQorICogYm90aCBFSENJIGFuZCBVSENJIGNhbGwgc2ltaWxhciBzdHJ1Y3R1cmVzIGEgIlFIIi4KKyAqLworc3RydWN0IGVkIHsKKwkvKiBmaXJzdCBmaWVsZHMgYXJlIGhhcmR3YXJlLXNwZWNpZmllZCAqLworCV9faGMzMgkJCWh3SU5GTzsgICAgICAgCS8qIGVuZHBvaW50IGNvbmZpZyBiaXRtYXAgKi8KKwkvKiBpbmZvIGJpdHMgZGVmaW5lZCBieSBoY2QgKi8KKyNkZWZpbmUgRURfREVRVUVVRQkoMSA8PCAyNykKKwkvKiBpbmZvIGJpdHMgZGVmaW5lZCBieSB0aGUgaGFyZHdhcmUgKi8KKyNkZWZpbmUgRURfSVNPCQkoMSA8PCAxNSkKKyNkZWZpbmUgRURfU0tJUAkJKDEgPDwgMTQpCisjZGVmaW5lIEVEX0xPV1NQRUVECSgxIDw8IDEzKQorI2RlZmluZSBFRF9PVVQJCSgweDAxIDw8IDExKQorI2RlZmluZSBFRF9JTgkJKDB4MDIgPDwgMTEpCisJX19oYzMyCQkJaHdUYWlsUDsJLyogdGFpbCBvZiBURCBsaXN0ICovCisJX19oYzMyCQkJaHdIZWFkUDsJLyogaGVhZCBvZiBURCBsaXN0IChoYyByL3cpICovCisjZGVmaW5lIEVEX0MJCSgweDAyKQkJCS8qIHRvZ2dsZSBjYXJyeSAqLworI2RlZmluZSBFRF9ICQkoMHgwMSkJCQkvKiBoYWx0ZWQgKi8KKwlfX2hjMzIJCQlod05leHRFRDsJLyogbmV4dCBFRCBpbiBsaXN0ICovCisKKwkvKiByZXN0IGFyZSBwdXJlbHkgZm9yIHRoZSBkcml2ZXIncyB1c2UgKi8KKwlkbWFfYWRkcl90CQlkbWE7CQkvKiBhZGRyIG9mIEVEICovCisJc3RydWN0IHRkCQkqZHVtbXk7CQkvKiBuZXh0IFREIHRvIGFjdGl2YXRlICovCisKKwkvKiBob3N0J3MgdmlldyBvZiBzY2hlZHVsZSAqLworCXN0cnVjdCBlZAkJKmVkX25leHQ7CS8qIG9uIHNjaGVkdWxlIG9yIHJtX2xpc3QgKi8KKwlzdHJ1Y3QgZWQJCSplZF9wcmV2OwkvKiBmb3Igbm9uLWludGVycnVwdCBFRHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXRkX2xpc3Q7CS8qICJzaGFkb3cgbGlzdCIgb2Ygb3VyIFREcyAqLworCisJLyogY3JlYXRlIC0tPiBJRExFIC0tPiBPUEVSIC0tPiAuLi4gLS0+IElETEUgLS0+IGRlc3Ryb3kKKwkgKiB1c3VhbGx5OiAgT1BFUiAtLT4gVU5MSU5LIC0tPiAoSURMRSB8IE9QRVIpIC0tPiAuLi4KKwkgKi8KKwl1OAkJCXN0YXRlOwkJLyogRURfe0lETEUsVU5MSU5LLE9QRVJ9ICovCisjZGVmaW5lIEVEX0lETEUgCTB4MDAJCS8qIE5PVCBsaW5rZWQgdG8gSEMgKi8KKyNkZWZpbmUgRURfVU5MSU5LIAkweDAxCQkvKiBiZWluZyB1bmxpbmtlZCBmcm9tIGhjICovCisjZGVmaW5lIEVEX09QRVIJCTB4MDIJCS8qIElTIGxpbmtlZCB0byBoYyAqLworCisJdTgJCQl0eXBlOyAJCS8qIFBJUEVfe0JVTEssLi4ufSAqLworCisJLyogcGVyaW9kaWMgc2NoZWR1bGluZyBwYXJhbXMgKGZvciBpbnRyIGFuZCBpc28pICovCisJdTgJCQlicmFuY2g7CisJdTE2CQkJaW50ZXJ2YWw7CisJdTE2CQkJbG9hZDsKKwl1MTYJCQlsYXN0X2lzbzsJLyogaXNvIG9ubHkgKi8KKworCS8qIEhDIG1heSBzZWUgRURzIG9uIHJtX2xpc3QgdW50aWwgbmV4dCBmcmFtZSAoZnJhbWVfbm8gPT0gdGljaykgKi8KKwl1MTYJCQl0aWNrOworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgxNikpKTsKKworI2RlZmluZSBFRF9NQVNLCSgodTMyKX4weDBmKQkJLyogc3RyaXAgaHcgc3RhdHVzIGluIGxvdyBhZGRyIGJpdHMgKi8KKworIAorLyoKKyAqIE9IQ0kgVHJhbnNmZXIgRGVzY3JpcHRvciAoVEQpIC4uLiBvbmUgcGVyIHRyYW5zZmVyIHNlZ21lbnQKKyAqIFNlZSBPSENJIHNwZWMsIHNlY3Rpb25zIDQuMy4xIChnZW5lcmFsID0gY29udHJvbC9idWxrL2ludGVycnVwdCkKKyAqIGFuZCA0LjMuMiAoaXNvKQorICovCitzdHJ1Y3QgdGQgeworCS8qIGZpcnN0IGZpZWxkcyBhcmUgaGFyZHdhcmUtc3BlY2lmaWVkICovCisJX19oYzMyCQlod0lORk87CQkvKiB0cmFuc2ZlciBpbmZvIGJpdG1hc2sgKi8KKworCS8qIGh3SU5GTyBiaXRzIGZvciBib3RoIGdlbmVyYWwgYW5kIGlzbyB0ZHM6ICovCisjZGVmaW5lIFREX0NDICAgICAgIDB4ZjAwMDAwMDAJCQkvKiBjb25kaXRpb24gY29kZSAqLworI2RlZmluZSBURF9DQ19HRVQodGRfcCkgKCh0ZF9wID4+MjgpICYgMHgwZikKKy8vI2RlZmluZSBURF9DQ19TRVQodGRfcCwgY2MpICh0ZF9wKSA9ICgodGRfcCkgJiAweDBmZmZmZmZmKSB8ICgoKGNjKSAmIDB4MGYpIDw8IDI4KQorI2RlZmluZSBURF9ESSAgICAgICAweDAwRTAwMDAwCQkJLyogZnJhbWVzIGJlZm9yZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgVERfRElfU0VUKFgpICgoKFgpICYgMHgwNyk8PCAyMSkKKwkvKiB0aGVzZSB0d28gYml0cyBhcmUgYXZhaWxhYmxlIGZvciBkZWZpbml0aW9uL3VzZSBieSBIQ0RzIGluIGJvdGgKKwkgKiBnZW5lcmFsIGFuZCBpc28gdGRzIC4uLiBvdGhlcnMgYXJlIGF2YWlsYWJsZSBmb3Igb25seSBvbmUgdHlwZQorCSAqLworI2RlZmluZSBURF9ET05FICAgICAweDAwMDIwMDAwCQkJLyogcmV0aXJlZCB0byBkb25lbGlzdCAqLworI2RlZmluZSBURF9JU08gICAgICAweDAwMDEwMDAwCQkJLyogY29weSBvZiBFRF9JU08gKi8KKworCS8qIGh3SU5GTyBiaXRzIGZvciBnZW5lcmFsIHRkczogKi8KKyNkZWZpbmUgVERfRUMgICAgICAgMHgwQzAwMDAwMAkJCS8qIGVycm9yIGNvdW50ICovCisjZGVmaW5lIFREX1QgICAgICAgIDB4MDMwMDAwMDAJCQkvKiBkYXRhIHRvZ2dsZSBzdGF0ZSAqLworI2RlZmluZSBURF9UX0RBVEEwICAweDAyMDAwMDAwCQkJCS8qIERBVEEwICovCisjZGVmaW5lIFREX1RfREFUQTEgIDB4MDMwMDAwMDAJCQkJLyogREFUQTEgKi8KKyNkZWZpbmUgVERfVF9UT0dHTEUgMHgwMDAwMDAwMAkJCQkvKiB1c2VzIEVEX0MgKi8KKyNkZWZpbmUgVERfRFAgICAgICAgMHgwMDE4MDAwMAkJCS8qIGRpcmVjdGlvbi9waWQgKi8KKyNkZWZpbmUgVERfRFBfU0VUVVAgMHgwMDAwMDAwMAkJCS8qIFNFVFVQIHBpZCAqLworI2RlZmluZSBURF9EUF9JTiAgICAweDAwMTAwMDAwCQkJCS8qIElOIHBpZCAqLworI2RlZmluZSBURF9EUF9PVVQgICAweDAwMDgwMDAwCQkJCS8qIE9VVCBwaWQgKi8KKwkJCQkJCQkvKiAweDAwMTgwMDAwIHJzdmQgKi8KKyNkZWZpbmUgVERfUiAgICAgICAgMHgwMDA0MDAwMAkJCS8qIHJvdW5kOiBzaG9ydCBwYWNrZXRzIE9LPyAqLworCisJLyogKG5vIGh3SU5GTyAjZGVmaW5lcyB5ZXQgZm9yIGlzbyB0ZHMpICovCisKKyAgCV9faGMzMgkJaHdDQlA7CQkvKiBDdXJyZW50IEJ1ZmZlciBQb2ludGVyIChvciAwKSAqLworICAJX19oYzMyCQlod05leHRURDsJLyogTmV4dCBURCBQb2ludGVyICovCisgIAlfX2hjMzIJCWh3QkU7CQkvKiBNZW1vcnkgQnVmZmVyIEVuZCBQb2ludGVyICovCisKKwkvKiBQU1cgaXMgb25seSBmb3IgSVNPLiAgT25seSAxIFBTVyBlbnRyeSBpcyB1c2VkLCBidXQgb24KKwkgKiBiaWctZW5kaWFuIFBQQyBoYXJkd2FyZSB0aGF0J3MgdGhlIHNlY29uZCBlbnRyeS4KKwkgKi8KKyNkZWZpbmUgTUFYUFNXCTIKKyAgCV9faGMxNgkJaHdQU1cgW01BWFBTV107CisKKwkvKiByZXN0IGFyZSBwdXJlbHkgZm9yIHRoZSBkcml2ZXIncyB1c2UgKi8KKyAgCV9fdTgJCWluZGV4OworICAJc3RydWN0IGVkCSplZDsKKyAgCXN0cnVjdCB0ZAkqdGRfaGFzaDsJLyogZG1hLS0+dGQgaGFzaHRhYmxlICovCisgIAlzdHJ1Y3QgdGQJKm5leHRfZGxfdGQ7CisgIAlzdHJ1Y3QgdXJiCSp1cmI7CisKKwlkbWFfYWRkcl90CXRkX2RtYTsJCS8qIGFkZHIgb2YgdGhpcyBURCAqLworCWRtYV9hZGRyX3QJZGF0YV9kbWE7CS8qIGFkZHIgb2YgZGF0YSBpdCBwb2ludHMgdG8gKi8KKworCXN0cnVjdCBsaXN0X2hlYWQgdGRfbGlzdDsJLyogInNoYWRvdyBsaXN0IiwgVERzIG9uIHNhbWUgRUQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMzIpKSk7CS8qIGMvYi9pIG5lZWQgMTY7IG9ubHkgaXNvIG5lZWRzIDMyICovCisKKyNkZWZpbmUgVERfTUFTSwkoKHUzMil+MHgxZikJCS8qIHN0cmlwIGh3IHN0YXR1cyBpbiBsb3cgYWRkciBiaXRzICovCisKKy8qCisgKiBIYXJkd2FyZSB0cmFuc2ZlciBzdGF0dXMgY29kZXMgLS0gQ0MgZnJvbSB0ZC0+aHdJTkZPIG9yIHRkLT5od1BTVworICovCisjZGVmaW5lIFREX0NDX05PRVJST1IgICAgICAweDAwCisjZGVmaW5lIFREX0NDX0NSQyAgICAgICAgICAweDAxCisjZGVmaW5lIFREX0NDX0JJVFNUVUZGSU5HICAweDAyCisjZGVmaW5lIFREX0NDX0RBVEFUT0dHTEVNICAweDAzCisjZGVmaW5lIFREX0NDX1NUQUxMICAgICAgICAweDA0CisjZGVmaW5lIFREX0RFVk5PVFJFU1AgICAgICAweDA1CisjZGVmaW5lIFREX1BJRENIRUNLRkFJTCAgICAweDA2CisjZGVmaW5lIFREX1VORVhQRUNURURQSUQgICAweDA3CisjZGVmaW5lIFREX0RBVEFPVkVSUlVOICAgICAweDA4CisjZGVmaW5lIFREX0RBVEFVTkRFUlJVTiAgICAweDA5CisgICAgLyogMHgwQSwgMHgwQiByZXNlcnZlZCBmb3IgaGFyZHdhcmUgKi8KKyNkZWZpbmUgVERfQlVGRkVST1ZFUlJVTiAgIDB4MEMKKyNkZWZpbmUgVERfQlVGRkVSVU5ERVJSVU4gIDB4MEQKKyAgICAvKiAweDBFLCAweDBGIHJlc2VydmVkIGZvciBIQ0QgKi8KKyNkZWZpbmUgVERfTk9UQUNDRVNTRUQgICAgIDB4MEYKKworCisvKiBtYXAgT0hDSSBURCBzdGF0dXMgY29kZXMgKENDKSB0byBlcnJubyB2YWx1ZXMgKi8gCitzdGF0aWMgY29uc3QgaW50IGNjX3RvX2Vycm9yIFsxNl0gPSB7IAorCS8qIE5vICBFcnJvciAgKi8gICAgICAgICAgICAgICAwLAorCS8qIENSQyBFcnJvciAgKi8gICAgICAgICAgICAgICAtRUlMU0VRLAorCS8qIEJpdCBTdHVmZiAgKi8gICAgICAgICAgICAgICAtRVBST1RPLAorCS8qIERhdGEgVG9nZyAgKi8gICAgICAgICAgICAgICAtRUlMU0VRLAorCS8qIFN0YWxsICAgICAgKi8gICAgICAgICAgICAgICAtRVBJUEUsCisJLyogRGV2Tm90UmVzcCAqLyAgICAgICAgICAgICAgIC1FVElNRURPVVQsCisJLyogUElEQ2hlY2sgICAqLyAgICAgICAgICAgICAgIC1FUFJPVE8sCisJLyogVW5FeHBQSUQgICAqLyAgICAgICAgICAgICAgIC1FUFJPVE8sCisJLyogRGF0YU92ZXIgICAqLyAgICAgICAgICAgICAgIC1FT1ZFUkZMT1csCisJLyogRGF0YVVuZGVyICAqLyAgICAgICAgICAgICAgIC1FUkVNT1RFSU8sCisJLyogKGZvciBodykgICAqLyAgICAgICAgICAgICAgIC1FSU8sCisJLyogKGZvciBodykgICAqLyAgICAgICAgICAgICAgIC1FSU8sCisJLyogQnVmZmVyT3ZlciAqLyAgICAgICAgICAgICAgIC1FQ09NTSwKKwkvKiBCdWZmVW5kZXIgICovICAgICAgICAgICAgICAgLUVOT1NSLAorCS8qIChmb3IgSENEKSAgKi8gICAgICAgICAgICAgICAtRUFMUkVBRFksCisJLyogKGZvciBIQ0QpICAqLyAgICAgICAgICAgICAgIC1FQUxSRUFEWSAKK307CisKKworLyoKKyAqIFRoZSBIQ0NBIChIb3N0IENvbnRyb2xsZXIgQ29tbXVuaWNhdGlvbnMgQXJlYSkgaXMgYSAyNTYgYnl0ZQorICogc3RydWN0dXJlIGRlZmluZWQgc2VjdGlvbiA0LjQuMSBvZiB0aGUgT0hDSSBzcGVjLiBUaGUgSEMgaXMKKyAqIHRvbGQgdGhlIGJhc2UgYWRkcmVzcyBvZiBpdC4gIEl0IG11c3QgYmUgMjU2LWJ5dGUgYWxpZ25lZC4KKyAqLworc3RydWN0IG9oY2lfaGNjYSB7CisjZGVmaW5lIE5VTV9JTlRTIDMyCisJX19oYzMyCWludF90YWJsZSBbTlVNX0lOVFNdOwkvKiBwZXJpb2RpYyBzY2hlZHVsZSAqLworCisJLyogCisJICogT0hDSSBkZWZpbmVzIHUxNiBmcmFtZV9ubywgZm9sbG93ZWQgYnkgdTE2IHplcm8gcGFkLgorCSAqIFNpbmNlIHNvbWUgcHJvY2Vzc29ycyBjYW4ndCBkbyAxNiBiaXQgYnVzIGFjY2Vzc2VzLAorCSAqIHBvcnRhYmxlIGFjY2VzcyBtdXN0IGJlIGEgMzIgYml0cyB3aWRlLgorCSAqLworCV9faGMzMglmcmFtZV9ubzsJCS8qIGN1cnJlbnQgZnJhbWUgbnVtYmVyICovCisJX19oYzMyCWRvbmVfaGVhZDsJCS8qIGluZm8gcmV0dXJuZWQgZm9yIGFuIGludGVycnVwdCAqLworCXU4CXJlc2VydmVkX2Zvcl9oYyBbMTE2XTsKKwl1OAl3aGF0IFs0XTsJCS8qIHNwZWMgb25seSBpZGVudGlmaWVzIDI1MiBieXRlcyA6KSAqLworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgyNTYpKSk7CisKKy8qCisgKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIE9IQ0kgY29udHJvbGxlcidzIG1lbW9yeSBtYXBwZWQgSS9PIHJlZ2lvbi4KKyAqIFlvdSBtdXN0IHVzZSByZWFkbCgpIGFuZCB3cml0ZWwoKSAoaW4gPGFzbS9pby5oPikgdG8gYWNjZXNzIHRoZXNlIGZpZWxkcyEhCisgKiBMYXlvdXQgaXMgaW4gc2VjdGlvbiA3IChhbmQgYXBwZW5kaXggQikgb2YgdGhlIHNwZWMuCisgKi8KK3N0cnVjdCBvaGNpX3JlZ3MgeworCS8qIGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlcnMgKHNlY3Rpb24gNy4xKSAqLworCV9faGMzMglyZXZpc2lvbjsKKwlfX2hjMzIJY29udHJvbDsKKwlfX2hjMzIJY21kc3RhdHVzOworCV9faGMzMglpbnRyc3RhdHVzOworCV9faGMzMglpbnRyZW5hYmxlOworCV9faGMzMglpbnRyZGlzYWJsZTsKKworCS8qIG1lbW9yeSBwb2ludGVycyAoc2VjdGlvbiA3LjIpICovCisJX19oYzMyCWhjY2E7CisJX19oYzMyCWVkX3BlcmlvZGN1cnJlbnQ7CisJX19oYzMyCWVkX2NvbnRyb2xoZWFkOworCV9faGMzMgllZF9jb250cm9sY3VycmVudDsKKwlfX2hjMzIJZWRfYnVsa2hlYWQ7CisJX19oYzMyCWVkX2J1bGtjdXJyZW50OworCV9faGMzMglkb25laGVhZDsKKworCS8qIGZyYW1lIGNvdW50ZXJzIChzZWN0aW9uIDcuMykgKi8KKwlfX2hjMzIJZm1pbnRlcnZhbDsKKwlfX2hjMzIJZm1yZW1haW5pbmc7CisJX19oYzMyCWZtbnVtYmVyOworCV9faGMzMglwZXJpb2RpY3N0YXJ0OworCV9faGMzMglsc3RocmVzaDsKKworCS8qIFJvb3QgaHViIHBvcnRzIChzZWN0aW9uIDcuNCkgKi8KKwlzdHJ1Y3QJb2hjaV9yb290aHViX3JlZ3MgeworCQlfX2hjMzIJYTsKKwkJX19oYzMyCWI7CisJCV9faGMzMglzdGF0dXM7CisjZGVmaW5lIE1BWF9ST09UX1BPUlRTCTE1CS8qIG1heGltdW0gT0hDSSByb290IGh1YiBwb3J0cyAoUkhfQV9ORFApICovCisJCV9faGMzMglwb3J0c3RhdHVzIFtNQVhfUk9PVF9QT1JUU107CisJfSByb290aHViOworCisJLyogYW5kIG9wdGlvbmFsICJsZWdhY3kgc3VwcG9ydCIgcmVnaXN0ZXJzIChhcHBlbmRpeCBCKSBhdCAweDAxMDAgKi8KKworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgzMikpKTsKKworCisvKiBPSENJIENPTlRST0wgQU5EIFNUQVRVUyBSRUdJU1RFUiBNQVNLUyAqLworCisvKgorICogSGNDb250cm9sIChjb250cm9sKSByZWdpc3RlciBtYXNrcworICovCisjZGVmaW5lIE9IQ0lfQ1RSTF9DQlNSCSgzIDw8IDApCS8qIGNvbnRyb2wvYnVsayBzZXJ2aWNlIHJhdGlvICovCisjZGVmaW5lIE9IQ0lfQ1RSTF9QTEUJKDEgPDwgMikJLyogcGVyaW9kaWMgbGlzdCBlbmFibGUgKi8KKyNkZWZpbmUgT0hDSV9DVFJMX0lFCSgxIDw8IDMpCS8qIGlzb2Nocm9ub3VzIGVuYWJsZSAqLworI2RlZmluZSBPSENJX0NUUkxfQ0xFCSgxIDw8IDQpCS8qIGNvbnRyb2wgbGlzdCBlbmFibGUgKi8KKyNkZWZpbmUgT0hDSV9DVFJMX0JMRQkoMSA8PCA1KQkvKiBidWxrIGxpc3QgZW5hYmxlICovCisjZGVmaW5lIE9IQ0lfQ1RSTF9IQ0ZTCSgzIDw8IDYpCS8qIGhvc3QgY29udHJvbGxlciBmdW5jdGlvbmFsIHN0YXRlICovCisjZGVmaW5lIE9IQ0lfQ1RSTF9JUgkoMSA8PCA4KQkvKiBpbnRlcnJ1cHQgcm91dGluZyAqLworI2RlZmluZSBPSENJX0NUUkxfUldDCSgxIDw8IDkpCS8qIHJlbW90ZSB3YWtldXAgY29ubmVjdGVkICovCisjZGVmaW5lIE9IQ0lfQ1RSTF9SV0UJKDEgPDwgMTApCS8qIHJlbW90ZSB3YWtldXAgZW5hYmxlICovCisKKy8qIHByZS1zaGlmdGVkIHZhbHVlcyBmb3IgSENGUyAqLworIwlkZWZpbmUgT0hDSV9VU0JfUkVTRVQJKDAgPDwgNikKKyMJZGVmaW5lIE9IQ0lfVVNCX1JFU1VNRQkoMSA8PCA2KQorIwlkZWZpbmUgT0hDSV9VU0JfT1BFUgkoMiA8PCA2KQorIwlkZWZpbmUgT0hDSV9VU0JfU1VTUEVORAkoMyA8PCA2KQorCisvKgorICogSGNDb21tYW5kU3RhdHVzIChjbWRzdGF0dXMpIHJlZ2lzdGVyIG1hc2tzCisgKi8KKyNkZWZpbmUgT0hDSV9IQ1IJKDEgPDwgMCkJLyogaG9zdCBjb250cm9sbGVyIHJlc2V0ICovCisjZGVmaW5lIE9IQ0lfQ0xGICAJKDEgPDwgMSkJLyogY29udHJvbCBsaXN0IGZpbGxlZCAqLworI2RlZmluZSBPSENJX0JMRiAgCSgxIDw8IDIpCS8qIGJ1bGsgbGlzdCBmaWxsZWQgKi8KKyNkZWZpbmUgT0hDSV9PQ1IgIAkoMSA8PCAzKQkvKiBvd25lcnNoaXAgY2hhbmdlIHJlcXVlc3QgKi8KKyNkZWZpbmUgT0hDSV9TT0MgIAkoMyA8PCAxNikJLyogc2NoZWR1bGluZyBvdmVycnVuIGNvdW50ICovCisKKy8qCisgKiBtYXNrcyB1c2VkIHdpdGggaW50ZXJydXB0IHJlZ2lzdGVyczoKKyAqIEhjSW50ZXJydXB0U3RhdHVzIChpbnRyc3RhdHVzKQorICogSGNJbnRlcnJ1cHRFbmFibGUgKGludHJlbmFibGUpCisgKiBIY0ludGVycnVwdERpc2FibGUgKGludHJkaXNhYmxlKQorICovCisjZGVmaW5lIE9IQ0lfSU5UUl9TTwkoMSA8PCAwKQkvKiBzY2hlZHVsaW5nIG92ZXJydW4gKi8KKyNkZWZpbmUgT0hDSV9JTlRSX1dESAkoMSA8PCAxKQkvKiB3cml0ZWJhY2sgb2YgZG9uZV9oZWFkICovCisjZGVmaW5lIE9IQ0lfSU5UUl9TRgkoMSA8PCAyKQkvKiBzdGFydCBmcmFtZSAqLworI2RlZmluZSBPSENJX0lOVFJfUkQJKDEgPDwgMykJLyogcmVzdW1lIGRldGVjdCAqLworI2RlZmluZSBPSENJX0lOVFJfVUUJKDEgPDwgNCkJLyogdW5yZWNvdmVyYWJsZSBlcnJvciAqLworI2RlZmluZSBPSENJX0lOVFJfRk5PCSgxIDw8IDUpCS8qIGZyYW1lIG51bWJlciBvdmVyZmxvdyAqLworI2RlZmluZSBPSENJX0lOVFJfUkhTQwkoMSA8PCA2KQkvKiByb290IGh1YiBzdGF0dXMgY2hhbmdlICovCisjZGVmaW5lIE9IQ0lfSU5UUl9PQwkoMSA8PCAzMCkJLyogb3duZXJzaGlwIGNoYW5nZSAqLworI2RlZmluZSBPSENJX0lOVFJfTUlFCSgxIDw8IDMxKQkvKiBtYXN0ZXIgaW50ZXJydXB0IGVuYWJsZSAqLworCisKKy8qIE9IQ0kgUk9PVCBIVUIgUkVHSVNURVIgTUFTS1MgKi8KKyAKKy8qIHJvb3RodWIucG9ydHN0YXR1cyBbaV0gYml0cyAqLworI2RlZmluZSBSSF9QU19DQ1MgICAgICAgICAgICAweDAwMDAwMDAxICAgCS8qIGN1cnJlbnQgY29ubmVjdCBzdGF0dXMgKi8KKyNkZWZpbmUgUkhfUFNfUEVTICAgICAgICAgICAgMHgwMDAwMDAwMiAgIAkvKiBwb3J0IGVuYWJsZSBzdGF0dXMqLworI2RlZmluZSBSSF9QU19QU1MgICAgICAgICAgICAweDAwMDAwMDA0ICAgCS8qIHBvcnQgc3VzcGVuZCBzdGF0dXMgKi8KKyNkZWZpbmUgUkhfUFNfUE9DSSAgICAgICAgICAgMHgwMDAwMDAwOCAgIAkvKiBwb3J0IG92ZXIgY3VycmVudCBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgUkhfUFNfUFJTICAgICAgICAgICAgMHgwMDAwMDAxMCAgCS8qIHBvcnQgcmVzZXQgc3RhdHVzICovCisjZGVmaW5lIFJIX1BTX1BQUyAgICAgICAgICAgIDB4MDAwMDAxMDAgICAJLyogcG9ydCBwb3dlciBzdGF0dXMgKi8KKyNkZWZpbmUgUkhfUFNfTFNEQSAgICAgICAgICAgMHgwMDAwMDIwMCAgICAJLyogbG93IHNwZWVkIGRldmljZSBhdHRhY2hlZCAqLworI2RlZmluZSBSSF9QU19DU0MgICAgICAgICAgICAweDAwMDEwMDAwIAkvKiBjb25uZWN0IHN0YXR1cyBjaGFuZ2UgKi8KKyNkZWZpbmUgUkhfUFNfUEVTQyAgICAgICAgICAgMHgwMDAyMDAwMCAgIAkvKiBwb3J0IGVuYWJsZSBzdGF0dXMgY2hhbmdlICovCisjZGVmaW5lIFJIX1BTX1BTU0MgICAgICAgICAgIDB4MDAwNDAwMDAgICAgCS8qIHBvcnQgc3VzcGVuZCBzdGF0dXMgY2hhbmdlICovCisjZGVmaW5lIFJIX1BTX09DSUMgICAgICAgICAgIDB4MDAwODAwMDAgICAgCS8qIG92ZXIgY3VycmVudCBpbmRpY2F0b3IgY2hhbmdlICovCisjZGVmaW5lIFJIX1BTX1BSU0MgICAgICAgICAgIDB4MDAxMDAwMDAgICAJLyogcG9ydCByZXNldCBzdGF0dXMgY2hhbmdlICovCisKKy8qIHJvb3RodWIuc3RhdHVzIGJpdHMgKi8KKyNkZWZpbmUgUkhfSFNfTFBTCSAgICAgMHgwMDAwMDAwMQkJLyogbG9jYWwgcG93ZXIgc3RhdHVzICovCisjZGVmaW5lIFJIX0hTX09DSQkgICAgIDB4MDAwMDAwMDIJCS8qIG92ZXIgY3VycmVudCBpbmRpY2F0b3IgKi8KKyNkZWZpbmUgUkhfSFNfRFJXRQkgICAgIDB4MDAwMDgwMDAJCS8qIGRldmljZSByZW1vdGUgd2FrZXVwIGVuYWJsZSAqLworI2RlZmluZSBSSF9IU19MUFNDCSAgICAgMHgwMDAxMDAwMAkJLyogbG9jYWwgcG93ZXIgc3RhdHVzIGNoYW5nZSAqLworI2RlZmluZSBSSF9IU19PQ0lDCSAgICAgMHgwMDAyMDAwMAkJLyogb3ZlciBjdXJyZW50IGluZGljYXRvciBjaGFuZ2UgKi8KKyNkZWZpbmUgUkhfSFNfQ1JXRQkgICAgIDB4ODAwMDAwMDAJCS8qIGNsZWFyIHJlbW90ZSB3YWtldXAgZW5hYmxlICovCisKKy8qIHJvb3RodWIuYiBtYXNrcyAqLworI2RlZmluZSBSSF9CX0RSCQkweDAwMDBmZmZmCQkvKiBkZXZpY2UgcmVtb3ZhYmxlIGZsYWdzICovCisjZGVmaW5lIFJIX0JfUFBDTQkweGZmZmYwMDAwCQkvKiBwb3J0IHBvd2VyIGNvbnRyb2wgbWFzayAqLworCisvKiByb290aHViLmEgbWFza3MgKi8KKyNkZWZpbmUJUkhfQV9ORFAJKDB4ZmYgPDwgMCkJCS8qIG51bWJlciBvZiBkb3duc3RyZWFtIHBvcnRzICovCisjZGVmaW5lCVJIX0FfUFNNCSgxIDw8IDgpCQkvKiBwb3dlciBzd2l0Y2hpbmcgbW9kZSAqLworI2RlZmluZQlSSF9BX05QUwkoMSA8PCA5KQkJLyogbm8gcG93ZXIgc3dpdGNoaW5nICovCisjZGVmaW5lCVJIX0FfRFQJCSgxIDw8IDEwKQkJLyogZGV2aWNlIHR5cGUgKG1ieikgKi8KKyNkZWZpbmUJUkhfQV9PQ1BNCSgxIDw8IDExKQkJLyogb3ZlciBjdXJyZW50IHByb3RlY3Rpb24gbW9kZSAqLworI2RlZmluZQlSSF9BX05PQ1AJKDEgPDwgMTIpCQkvKiBubyBvdmVyIGN1cnJlbnQgcHJvdGVjdGlvbiAqLworI2RlZmluZQlSSF9BX1BPVFBHVAkoMHhmZiA8PCAyNCkJCS8qIHBvd2VyIG9uIHRvIHBvd2VyIGdvb2QgdGltZSAqLworCisKKy8qIGhjZC1wcml2YXRlIHBlci11cmIgc3RhdGUgKi8KK3R5cGVkZWYgc3RydWN0IHVyYl9wcml2IHsKKwlzdHJ1Y3QgZWQJCSplZDsKKwl1MTYJCQlsZW5ndGg7CQkvLyAjIHRkcyBpbiB0aGlzIHJlcXVlc3QKKwl1MTYJCQl0ZF9jbnQ7CQkvLyB0ZHMgYWxyZWFkeSBzZXJ2aWNlZAorCXN0cnVjdCBsaXN0X2hlYWQJcGVuZGluZzsKKwlzdHJ1Y3QgdGQJCSp0ZCBbMF07CS8vIGFsbCBURHMgaW4gdGhpcyByZXF1ZXN0CisKK30gdXJiX3ByaXZfdDsKKworI2RlZmluZSBURF9IQVNIX1NJWkUgICAgNjQgICAgLyogcG93ZXInbyd0d28gKi8KKy8vIHNpemVvZiAoc3RydWN0IHRkKSB+PSA2NCA9PSAyXjYgLi4uIAorI2RlZmluZSBURF9IQVNIX0ZVTkModGRfZG1hKSAoKHRkX2RtYSBeICh0ZF9kbWEgPj4gNikpICUgVERfSEFTSF9TSVpFKQorCisKKy8qCisgKiBUaGlzIGlzIHRoZSBmdWxsIG9oY2kgY29udHJvbGxlciBkZXNjcmlwdGlvbgorICoKKyAqIE5vdGUgaG93IHRoZSAicHJvcGVyIiBVU0IgaW5mb3JtYXRpb24gaXMganVzdAorICogYSBzdWJzZXQgb2Ygd2hhdCB0aGUgZnVsbCBpbXBsZW1lbnRhdGlvbiBuZWVkcy4gKExpbnVzKQorICovCisKK3N0cnVjdCBvaGNpX2hjZCB7CisJc3BpbmxvY2tfdAkJbG9jazsKKworCS8qCisJICogSS9PIG1lbW9yeSB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIEhDIChkbWEtY29uc2lzdGVudCkKKwkgKi8KKwlzdHJ1Y3Qgb2hjaV9yZWdzIF9faW9tZW0gKnJlZ3M7CisKKwkvKgorCSAqIG1haW4gbWVtb3J5IHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgSEMgKGRtYS1jb25zaXN0ZW50KS4KKwkgKiBoY2QgYWRkcyB0byBzY2hlZHVsZSBmb3IgYSBsaXZlIGhjIGFueSB0aW1lLCBidXQgcmVtb3ZhbHMgZmluaXNoCisJICogb25seSBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgZnJhbWUuCisJICovCisJc3RydWN0IG9oY2lfaGNjYQkqaGNjYTsKKwlkbWFfYWRkcl90CQloY2NhX2RtYTsKKworCXN0cnVjdCBlZAkJKmVkX3JtX2xpc3Q7CQkvKiB0byBiZSByZW1vdmVkICovCisKKwlzdHJ1Y3QgZWQJCSplZF9idWxrdGFpbDsJCS8qIGxhc3QgaW4gYnVsayBsaXN0ICovCisJc3RydWN0IGVkCQkqZWRfY29udHJvbHRhaWw7CS8qIGxhc3QgaW4gY3RybCBsaXN0ICovCisgCXN0cnVjdCBlZAkJKnBlcmlvZGljIFtOVU1fSU5UU107CS8qIHNoYWRvdyBpbnRfdGFibGUgKi8KKworCS8qCisJICogT1RHIGNvbnRyb2xsZXJzIGFuZCB0cmFuc2NlaXZlcnMgbmVlZCBzb2Z0d2FyZSBpbnRlcmFjdGlvbjsKKwkgKiBvdGhlciBleHRlcm5hbCB0cmFuc2NlaXZlcnMgc2hvdWxkIGJlIHNvZnR3YXJlLXRyYW5zcGFyZW50IAorCSAqLworCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIJKnRyYW5zY2VpdmVyOworCXVuc2lnbmVkCQlwb3dlcl9idWRnZXQ7CisKKwkvKgorCSAqIG1lbW9yeSBtYW5hZ2VtZW50IGZvciBxdWV1ZSBkYXRhIHN0cnVjdHVyZXMKKwkgKi8KKwlzdHJ1Y3QgZG1hX3Bvb2wJCSp0ZF9jYWNoZTsKKwlzdHJ1Y3QgZG1hX3Bvb2wJCSplZF9jYWNoZTsKKwlzdHJ1Y3QgdGQJCSp0ZF9oYXNoIFtURF9IQVNIX1NJWkVdOworCXN0cnVjdCBsaXN0X2hlYWQJcGVuZGluZzsKKworCS8qCisJICogZHJpdmVyIHN0YXRlCisJICovCisJaW50CQkJbG9hZCBbTlVNX0lOVFNdOworCXUzMiAJCQloY19jb250cm9sOwkvKiBjb3B5IG9mIGhjIGNvbnRyb2wgcmVnICovCisJdW5zaWduZWQgbG9uZwkJbmV4dF9zdGF0ZWNoYW5nZTsJLyogc3VzcGVuZC9yZXN1bWUgKi8KKwl1MzIJCQlmbWludGVydmFsOwkJLyogc2F2ZWQgcmVnaXN0ZXIgKi8KKworCXN0cnVjdCB3b3JrX3N0cnVjdAlyaF9yZXN1bWU7CisKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIGZvciBIQyBidWdzICovCisjZGVmaW5lCU9IQ0lfUVVJUktfQU1ENzU2CTB4MDEJCQkvKiBlcnJhdHVtICM0ICovCisjZGVmaW5lCU9IQ0lfUVVJUktfU1VQRVJJTwkweDAyCQkJLyogbmF0c2VtaSAqLworI2RlZmluZQlPSENJX1FVSVJLX0lOSVRSRVNFVAkweDA0CQkJLyogU2lTLCBPUFRpLCAuLi4gKi8KKyNkZWZpbmUJT0hDSV9CSUdfRU5ESUFOCQkweDA4CQkJLyogYmlnIGVuZGlhbiBIQyAqLworCS8vIHRoZXJlIGFyZSBhbHNvIGNoaXAgcXVpcmtzL2J1Z3MgaW4gaW5pdCBsb2dpYworCit9OworCisvKiBjb252ZXJ0IGJldHdlZW4gYW4gaGNkIHBvaW50ZXIgYW5kIHRoZSBjb3JyZXNwb25kaW5nIG9oY2lfaGNkICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBvaGNpX2hjZCAqaGNkX3RvX29oY2kgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJcmV0dXJuIChzdHJ1Y3Qgb2hjaV9oY2QgKikgKGhjZC0+aGNkX3ByaXYpOworfQorc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNiX2hjZCAqb2hjaV90b19oY2QgKGNvbnN0IHN0cnVjdCBvaGNpX2hjZCAqb2hjaSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mICgodm9pZCAqKSBvaGNpLCBzdHJ1Y3QgdXNiX2hjZCwgaGNkX3ByaXYpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZuZGVmIERFQlVHCisjZGVmaW5lIFNUVUJfREVCVUdfRklMRVMKKyNlbmRpZgkvKiBERUJVRyAqLworCisjZGVmaW5lIG9oY2lfZGJnKG9oY2ksIGZtdCwgYXJncy4uLikgXAorCWRldl9kYmcgKG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmNvbnRyb2xsZXIgLCBmbXQgLCAjIyBhcmdzICkKKyNkZWZpbmUgb2hjaV9lcnIob2hjaSwgZm10LCBhcmdzLi4uKSBcCisJZGV2X2VyciAob2hjaV90b19oY2Qob2hjaSktPnNlbGYuY29udHJvbGxlciAsIGZtdCAsICMjIGFyZ3MgKQorI2RlZmluZSBvaGNpX2luZm8ob2hjaSwgZm10LCBhcmdzLi4uKSBcCisJZGV2X2luZm8gKG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmNvbnRyb2xsZXIgLCBmbXQgLCAjIyBhcmdzICkKKyNkZWZpbmUgb2hjaV93YXJuKG9oY2ksIGZtdCwgYXJncy4uLikgXAorCWRldl93YXJuIChvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5jb250cm9sbGVyICwgZm10ICwgIyMgYXJncyApCisKKyNpZmRlZiBPSENJX1ZFUkJPU0VfREVCVUcKKyMJZGVmaW5lIG9oY2lfdmRiZyBvaGNpX2RiZworI2Vsc2UKKyMJZGVmaW5lIG9oY2lfdmRiZyhvaGNpLCBmbXQsIGFyZ3MuLi4pIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogV2hpbGUgbW9zdCBVU0IgaG9zdCBjb250cm9sbGVycyBpbXBsZW1lbnQgdGhlaXIgcmVnaXN0ZXJzIGFuZAorICogaW4tbWVtb3J5IGNvbW11bmljYXRpb24gZGVzY3JpcHRvcnMgaW4gbGl0dGxlLWVuZGlhbiBmb3JtYXQsCisgKiBhIG1pbm9yaXR5IChub3RhYmx5IHRoZSBJQk0gU1RCMDRYWFggYW5kIHRoZSBNb3Rvcm9sYSBNUEM1MjAwCisgKiBwcm9jZXNzb3JzKSBpbXBsZW1lbnQgdGhlbSBpbiBiaWcgZW5kaWFuIGZvcm1hdC4KKyAqCisgKiBUaGlzIGF0dGVtcHRzIHRvIHN1cHBvcnQgZWl0aGVyIGZvcm1hdCBhdCBjb21waWxlIHRpbWUgd2l0aG91dCBhCisgKiBydW50aW1lIHBlbmFsdHksIG9yIGJvdGggZm9ybWF0cyB3aXRoIHRoZSBhZGRpdGlvbmFsIG92ZXJoZWFkCisgKiBvZiBjaGVja2luZyBhIGZsYWcgYml0LgorICovCisKKyNpZmRlZiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTgorCisjaWZkZWYgQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgYmlnX2VuZGlhbihvaGNpKQkob2hjaS0+ZmxhZ3MgJiBPSENJX0JJR19FTkRJQU4pIC8qIGVpdGhlciAqLworI2Vsc2UKKyNkZWZpbmUgYmlnX2VuZGlhbihvaGNpKQkxCQkvKiBvbmx5IGJpZyBlbmRpYW4gKi8KKyNlbmRpZgorCisvKgorICogQmlnLWVuZGlhbiByZWFkL3dyaXRlIGZ1bmN0aW9ucyBhcmUgYXJjaC1zcGVjaWZpYy4KKyAqIE90aGVyIGFyY2hlcyBjYW4gYmUgYWRkZWQgaWYvd2hlbiB0aGV5J3JlIG5lZWRlZC4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX1BQQykKKyNkZWZpbmUgcmVhZGxfYmUoYWRkcikJCWluX2JlMzIoKF9fZm9yY2UgdW5zaWduZWQgKilhZGRyKQorI2RlZmluZSB3cml0ZWxfYmUodmFsLCBhZGRyKQlvdXRfYmUzMigoX19mb3JjZSB1bnNpZ25lZCAqKWFkZHIsIHZhbCkKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvaGNpX3JlYWRsIChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksCisJCQkJCQkJX19oYzMyIF9faW9tZW0gKiByZWdzKQoreworCXJldHVybiBiaWdfZW5kaWFuKG9oY2kpID8gcmVhZGxfYmUgKHJlZ3MpIDogcmVhZGwgKChfX2ZvcmNlIHUzMiAqKXJlZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb2hjaV93cml0ZWwgKGNvbnN0IHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwKKwkJCQljb25zdCB1bnNpZ25lZCBpbnQgdmFsLCBfX2hjMzIgX19pb21lbSAqcmVncykKK3sKKwliaWdfZW5kaWFuKG9oY2kpID8gd3JpdGVsX2JlICh2YWwsIHJlZ3MpIDoKKwkJCSAgIHdyaXRlbCAodmFsLCAoX19mb3JjZSB1MzIgKilyZWdzKTsKK30KKworI2Vsc2UJLyogIUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOICovCisKKyNkZWZpbmUgYmlnX2VuZGlhbihvaGNpKQkwCQkvKiBvbmx5IGxpdHRsZSBlbmRpYW4gKi8KKworI2lmZGVmIENPTkZJR19BUkNIX0xIN0E0MDQKKwkvKiBNYXJjIFNpbmdlcjogYXQgdGhlIHRpbWUgdGhpcyBjb2RlIHdhcyB3cml0dGVuLCB0aGUgTEg3QTQwNAorCSAqIGhhZCBhIHByb2JsZW0gcmVhZGluZyB0aGUgVVNCIGhvc3QgcmVnaXN0ZXJzLiAgVGhpcworCSAqIGltcGxlbWVudGF0aW9uIG9mIHRoZSBvaGNpX3JlYWRsIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSByZWFkCisJICogdHdpY2UgYXMgYSB3b3JrLWFyb3VuZC4KKwkgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitvaGNpX3JlYWRsIChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGNvbnN0IF9faGMzMiAqcmVncykKK3sKKwkqKHZvbGF0aWxlIF9fZm9yY2UgdW5zaWduZWQgaW50KikgcmVnczsKKwlyZXR1cm4gKih2b2xhdGlsZSBfX2ZvcmNlIHVuc2lnbmVkIGludCopIHJlZ3M7Cit9CisjZWxzZQorCS8qIFN0YW5kYXJkIHZlcnNpb24gb2Ygb2hjaV9yZWFkbCB1c2VzIHN0YW5kYXJkLCBwbGF0Zm9ybQorCSAqIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK29oY2lfcmVhZGwgKGNvbnN0IHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgX19oYzMyIF9faW9tZW0gKiByZWdzKQoreworCXJldHVybiByZWFkbChyZWdzKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgb2hjaV93cml0ZWwgKGNvbnN0IHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwKKwkJCQljb25zdCB1bnNpZ25lZCBpbnQgdmFsLCBfX2hjMzIgX19pb21lbSAqcmVncykKK3sKKwl3cml0ZWwgKHZhbCwgcmVncyk7Cit9CisKKyNlbmRpZgkvKiAhQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogY3B1IHRvIG9oY2kgKi8KK3N0YXRpYyBpbmxpbmUgX19oYzE2IGNwdV90b19oYzE2IChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGNvbnN0IHUxNiB4KQoreworCXJldHVybiBiaWdfZW5kaWFuKG9oY2kpID8gKF9fZm9yY2UgX19oYzE2KWNwdV90b19iZTE2KHgpIDogKF9fZm9yY2UgX19oYzE2KWNwdV90b19sZTE2KHgpOworfQorCitzdGF0aWMgaW5saW5lIF9faGMxNiBjcHVfdG9faGMxNnAgKGNvbnN0IHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgY29uc3QgdTE2ICp4KQoreworCXJldHVybiBiaWdfZW5kaWFuKG9oY2kpID8gY3B1X3RvX2JlMTZwKHgpIDogY3B1X3RvX2xlMTZwKHgpOworfQorCitzdGF0aWMgaW5saW5lIF9faGMzMiBjcHVfdG9faGMzMiAoY29uc3Qgc3RydWN0IG9oY2lfaGNkICpvaGNpLCBjb25zdCB1MzIgeCkKK3sKKwlyZXR1cm4gYmlnX2VuZGlhbihvaGNpKSA/IChfX2ZvcmNlIF9faGMzMiljcHVfdG9fYmUzMih4KSA6IChfX2ZvcmNlIF9faGMzMiljcHVfdG9fbGUzMih4KTsKK30KKworc3RhdGljIGlubGluZSBfX2hjMzIgY3B1X3RvX2hjMzJwIChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGNvbnN0IHUzMiAqeCkKK3sKKwlyZXR1cm4gYmlnX2VuZGlhbihvaGNpKSA/IGNwdV90b19iZTMycCh4KSA6IGNwdV90b19sZTMycCh4KTsKK30KKworLyogb2hjaSB0byBjcHUgKi8KK3N0YXRpYyBpbmxpbmUgdTE2IGhjMTZfdG9fY3B1IChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGNvbnN0IF9faGMxNiB4KQoreworCXJldHVybiBiaWdfZW5kaWFuKG9oY2kpID8gYmUxNl90b19jcHUoKF9fZm9yY2UgX19iZTE2KXgpIDogbGUxNl90b19jcHUoKF9fZm9yY2UgX19sZTE2KXgpOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBoYzE2X3RvX2NwdXAgKGNvbnN0IHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgY29uc3QgX19oYzE2ICp4KQoreworCXJldHVybiBiaWdfZW5kaWFuKG9oY2kpID8gYmUxNl90b19jcHVwKChfX2ZvcmNlIF9fYmUxNiAqKXgpIDogbGUxNl90b19jcHVwKChfX2ZvcmNlIF9fbGUxNiAqKXgpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBoYzMyX3RvX2NwdSAoY29uc3Qgc3RydWN0IG9oY2lfaGNkICpvaGNpLCBjb25zdCBfX2hjMzIgeCkKK3sKKwlyZXR1cm4gYmlnX2VuZGlhbihvaGNpKSA/IGJlMzJfdG9fY3B1KChfX2ZvcmNlIF9fYmUzMil4KSA6IGxlMzJfdG9fY3B1KChfX2ZvcmNlIF9fbGUzMil4KTsKK30KKworc3RhdGljIGlubGluZSB1MzIgaGMzMl90b19jcHVwIChjb25zdCBzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGNvbnN0IF9faGMzMiAqeCkKK3sKKwlyZXR1cm4gYmlnX2VuZGlhbihvaGNpKSA/IGJlMzJfdG9fY3B1cCgoX19mb3JjZSBfX2JlMzIgKil4KSA6IGxlMzJfdG9fY3B1cCgoX19mb3JjZSBfX2xlMzIgKil4KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogSENDQSBmcmFtZSBudW1iZXIgaXMgMTYgYml0cywgYnV0IGlzIGFjY2Vzc2VkIGFzIDMyIGJpdHMgc2luY2Ugbm90IGFsbAorICogaGFyZHdhcmUgaGFuZGxlcyAxNiBiaXQgcmVhZHMuICBUaGF0IGNyZWF0ZXMgYSBkaWZmZXJlbnQgY29uZnVzaW9uIG9uCisgKiBzb21lIGJpZy1lbmRpYW4gU09DIGltcGxlbWVudGF0aW9ucy4gIFNhbWUgdGhpbmcgaGFwcGVucyB3aXRoIFBTVyBhY2Nlc3MuCisgKi8KKworI2lmZGVmIENPTkZJR19TVEIwM3h4eAorI2RlZmluZSBPSENJX0JFX0ZSQU1FX05PX1NISUZUCTE2CisjZWxzZQorI2RlZmluZSBPSENJX0JFX0ZSQU1FX05PX1NISUZUCTAKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHUxNiBvaGNpX2ZyYW1lX25vKGNvbnN0IHN0cnVjdCBvaGNpX2hjZCAqb2hjaSkKK3sKKwl1MzIgdG1wOworCWlmIChiaWdfZW5kaWFuKG9oY2kpKSB7CisJCXRtcCA9IGJlMzJfdG9fY3B1cCgoX19mb3JjZSBfX2JlMzIgKikmb2hjaS0+aGNjYS0+ZnJhbWVfbm8pOworCQl0bXAgPj49IE9IQ0lfQkVfRlJBTUVfTk9fU0hJRlQ7CisJfSBlbHNlCisJCXRtcCA9IGxlMzJfdG9fY3B1cCgoX19mb3JjZSBfX2xlMzIgKikmb2hjaS0+aGNjYS0+ZnJhbWVfbm8pOworCisJcmV0dXJuICh1MTYpdG1wOworfQorCitzdGF0aWMgaW5saW5lIF9faGMxNiAqb2hjaV9od1BTV3AoY29uc3Qgc3RydWN0IG9oY2lfaGNkICpvaGNpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRkICp0ZCwgaW50IGluZGV4KQoreworCXJldHVybiAoX19oYzE2ICopKGJpZ19lbmRpYW4ob2hjaSkgPworCQkJJnRkLT5od1BTV1tpbmRleCBeIDFdIDogJnRkLT5od1BTV1tpbmRleF0pOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBvaGNpX2h3UFNXKGNvbnN0IHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGQgKnRkLCBpbnQgaW5kZXgpCit7CisJcmV0dXJuIGhjMTZfdG9fY3B1cChvaGNpLCBvaGNpX2h3UFNXcChvaGNpLCB0ZCwgaW5kZXgpKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGUgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSkKK3sKKwlvaGNpX3RvX2hjZChvaGNpKS0+c3RhdGUgPSBIQ19TVEFURV9IQUxUOworfQorCisjZGVmaW5lCUZJCQkJMHgyZWRmCQkvKiAxMjAwMCBiaXRzIHBlciBmcmFtZSAoLTEpICovCisjZGVmaW5lCUZTTVAoZmkpIAkJKDB4N2ZmZiAmICgoNiAqICgoZmkpIC0gMjEwKSkgLyA3KSkKKyNkZWZpbmUJRklUCQkJKDEgPDwgMzEpCisjZGVmaW5lIExTVEhSRVNICQkweDYyOAkJLyogbG93c3BlZWQgYml0IHRocmVzaG9sZCAqLworCitzdGF0aWMgdm9pZCBwZXJpb2RpY19yZWluaXQgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSkKK3sKKwl1MzIJZmkgPSBvaGNpLT5mbWludGVydmFsICYgMHgwM2ZmZjsKKwl1MzIJZml0ID0gb2hjaV9yZWFkbChvaGNpLCAmb2hjaS0+cmVncy0+Zm1pbnRlcnZhbCkgJiBGSVQ7CisKKwlvaGNpX3dyaXRlbCAob2hjaSwgKGZpdCBeIEZJVCkgfCBvaGNpLT5mbWludGVydmFsLAorCQkJCQkJJm9oY2ktPnJlZ3MtPmZtaW50ZXJ2YWwpOworCW9oY2lfd3JpdGVsIChvaGNpLCAoKDkgKiBmaSkgLyAxMCkgJiAweDNmZmYsCisJCQkJCQkmb2hjaS0+cmVncy0+cGVyaW9kaWNzdGFydCk7Cit9CisKKy8qIEFNRC03NTYgKEQyIHJldikgcmVwb3J0cyBjb3JydXB0IHJlZ2lzdGVyIGNvbnRlbnRzIGluIHNvbWUgY2FzZXMuCisgKiBUaGUgZXJyYXR1bSAoIzQpIGRlc2NyaXB0aW9uIGlzIGluY29ycmVjdC4gIEFNRCdzIHdvcmthcm91bmQgd2FpdHMKKyAqIHRpbGwgc29tZSBiaXRzIChtb3N0bHkgcmVzZXJ2ZWQpIGFyZSBjbGVhcjsgb2sgZm9yIGFsbCByZXZzLgorICovCisjZGVmaW5lIHJlYWRfcm9vdGh1YihoYywgcmVnaXN0ZXIsIG1hc2spICh7IFwKKwl1MzIgdGVtcCA9IG9oY2lfcmVhZGwgKGhjLCAmaGMtPnJlZ3MtPnJvb3RodWIucmVnaXN0ZXIpOyBcCisJaWYgKHRlbXAgPT0gLTEpIFwKKwkJZGlzYWJsZSAoaGMpOyBcCisJZWxzZSBpZiAoaGMtPmZsYWdzICYgT0hDSV9RVUlSS19BTUQ3NTYpIFwKKwkJd2hpbGUgKHRlbXAgJiBtYXNrKSBcCisJCQl0ZW1wID0gb2hjaV9yZWFkbCAoaGMsICZoYy0+cmVncy0+cm9vdGh1Yi5yZWdpc3Rlcik7IFwKKwl0ZW1wOyB9KQorCitzdGF0aWMgdTMyIHJvb3RodWJfYSAoc3RydWN0IG9oY2lfaGNkICpoYykKKwl7IHJldHVybiByZWFkX3Jvb3RodWIgKGhjLCBhLCAweGZjMGZlMDAwKTsgfQorc3RhdGljIGlubGluZSB1MzIgcm9vdGh1Yl9iIChzdHJ1Y3Qgb2hjaV9oY2QgKmhjKQorCXsgcmV0dXJuIG9oY2lfcmVhZGwgKGhjLCAmaGMtPnJlZ3MtPnJvb3RodWIuYik7IH0KK3N0YXRpYyBpbmxpbmUgdTMyIHJvb3RodWJfc3RhdHVzIChzdHJ1Y3Qgb2hjaV9oY2QgKmhjKQorCXsgcmV0dXJuIG9oY2lfcmVhZGwgKGhjLCAmaGMtPnJlZ3MtPnJvb3RodWIuc3RhdHVzKTsgfQorc3RhdGljIHUzMiByb290aHViX3BvcnRzdGF0dXMgKHN0cnVjdCBvaGNpX2hjZCAqaGMsIGludCBpKQorCXsgcmV0dXJuIHJlYWRfcm9vdGh1YiAoaGMsIHBvcnRzdGF0dXMgW2ldLCAweGZmZTBmY2UwKTsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwOWUyOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKQEAgLTAsMCArMSwxODUxIEBACisvKgorICogU0w4MTFIUyBIQ0QgKEhvc3QgQ29udHJvbGxlciBEcml2ZXIpIGZvciBVU0IuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFBzaW9uIFRla2xvZ2l4IChmb3IgTmV0Qm9vayBQUk8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgRGF2aWQgQnJvd25lbGwKKyAqIAorICogUGVyaW9kaWMgc2NoZWR1bGluZyBpcyBiYXNlZCBvbiBSb21hbidzIE9IQ0kgY29kZQorICogCUNvcHlyaWdodCAoQykgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIKKyAqCisgKiBUaGUgU0w4MTFIUyBjb250cm9sbGVyIGhhbmRsZXMgaG9zdCBzaWRlIFVTQiAobGlrZSB0aGUgU0wxMUgsIGJ1dCB3aXRoCisgKiBhbm90aGVyIHJlZ2lzdGVyIHNldCBhbmQgU09GIGdlbmVyYXRpb24pIGFzIHdlbGwgYXMgcGVyaXBoZXJhbCBzaWRlIFVTQgorICogKGxpa2UgdGhlIFNMODExUykuICBUaGlzIGRyaXZlciB2ZXJzaW9uIGRvZXNuJ3QgaW1wbGVtZW50IHRoZSBHYWRnZXQgQVBJCisgKiBmb3IgdGhlIHBlcmlwaGVyYWwgcm9sZTsgb3IgT1RHICh0aGF0J2QgbmVlZCBtdWNoIGV4dGVybmFsIGNpcmN1aXRyeSkuCisgKgorICogRm9yIGRvY3VtZW50YXRpb24sIHNlZSB0aGUgU0w4MTFIUyBzcGVjIGFuZCB0aGUgIlNMODExSFMgRW1iZWRkZWQgSG9zdCIKKyAqIGRvY3VtZW50IChwcm92aWRpbmcgc2lnbmlmaWNhbnQgcGllY2VzIG1pc3NpbmcgZnJvbSB0aGF0IHNwZWMpOyBwbHVzCisgKiB0aGUgU0w4MTFTIHNwZWMgaWYgeW91IHdhbnQgcGVyaXBoZXJhbCBzaWRlIGluZm8uCisgKi8gCisKKy8qCisgKiBTdGF0dXM6ICBQYXNzZWQgYmFzaWMgc3RyZXNzIHRlc3RpbmcsIHdvcmtzIHdpdGggaHVicywgbWljZSwga2V5Ym9hcmRzLAorICogYW5kIHVzYi1zdG9yYWdlLgorICoKKyAqIFRPRE86CisgKiAtIHVzYiBzdXNwZW5kL3Jlc3VtZSB0cmlnZ2VyZWQgYnkgc2w4MTEgKHdpdGggVVNCX1NVU1BFTkQpCisgKiAtIHZhcmlvdXMgaXNzdWVzIG5vdGVkIGluIHRoZSBjb2RlCisgKiAtIHBlcmZvcm1hbmNlIHdvcms7IHVzZSBib3RoIHJlZ2lzdGVyIGJhbmtzOyAuLi4KKyAqIC0gdXNlIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbXSB3aXRoIElTTyB0cmFuc2ZlcnMKKyAqLworCisjdW5kZWYJVkVSQk9TRQorI3VuZGVmCVBBQ0tFVF9UUkFDRQorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCisjCWRlZmluZSBERUJVRworI2Vsc2UKKyMJdW5kZWYgREVCVUcKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiX3NsODExLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2luY2x1ZGUgIi4uL2NvcmUvaGNkLmgiCisjaW5jbHVkZSAic2w4MTEuaCIKKworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNMODExSFMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMTUgRGVjIDIwMDQiCisKKworI2lmbmRlZiBERUJVRworIwlkZWZpbmUJU1RVQl9ERUJVR19GSUxFCisjZW5kaWYKKworLyogZm9yIG5vdywgdXNlIG9ubHkgb25lIHRyYW5zZmVyIHJlZ2lzdGVyIGJhbmsgKi8KKyN1bmRlZglVU0VfQgorCisvKiB0aGlzIGRvZXNuJ3QgdW5kZXJzdGFuZCB1cmItPmlzb19mcmFtZV9kZXNjW10sIGJ1dCBpZiB5b3UgaGFkIGEgZHJpdmVyCisgKiB0aGF0IGp1c3QgcXVldWVkIG9uZSBJU08gZnJhbWUgcGVyIFVSQiB0aGVuIGlzbyB0cmFuc2ZlcnMgInNob3VsZCIgd29yaworICogdXNpbmcgdGhlIG5vcm1hbCB1cmIgc3RhdHVzIGZpZWxkcy4KKyAqLworI2RlZmluZQlESVNBQkxFX0lTTworCisvLyAjZGVmaW5lCVFVSVJLMgorI2RlZmluZQlRVUlSSzMKKworc3RhdGljIGNvbnN0IGNoYXIgaGNkX25hbWVbXSA9ICJzbDgxMS1oY2QiOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBwb3J0X3Bvd2VyKHN0cnVjdCBzbDgxMSAqc2w4MTEsIGludCBpc19vbikKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkID0gc2w4MTFfdG9faGNkKHNsODExKTsKKworCS8qIGh1YiBpcyBpbmFjdGl2ZSB1bmxlc3MgdGhlIHBvcnQgaXMgcG93ZXJlZCAqLworCWlmIChpc19vbikgeworCQlpZiAoc2w4MTEtPnBvcnQxICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9QT1dFUikpCisJCQlyZXR1cm47CisKKwkJc2w4MTEtPnBvcnQxID0gKDEgPDwgVVNCX1BPUlRfRkVBVF9QT1dFUik7CisJCXNsODExLT5pcnFfZW5hYmxlID0gU0wxMUhfSU5UTUFTS19JTlNSTVY7CisJCWhjZC0+c2VsZi5jb250cm9sbGVyLT5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CisJfSBlbHNlIHsKKwkJc2w4MTEtPnBvcnQxID0gMDsKKwkJc2w4MTEtPmlycV9lbmFibGUgPSAwOworCQloY2QtPnN0YXRlID0gSENfU1RBVEVfSEFMVDsKKwkJaGNkLT5zZWxmLmNvbnRyb2xsZXItPnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19TVVNQRU5EOworCX0KKwlzbDgxMS0+Y3RybDEgPSAwOworCXNsODExX3dyaXRlKHNsODExLCBTTDExSF9JUlFfRU5BQkxFLCAwKTsKKwlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfSVJRX1NUQVRVUywgfjApOworCisJaWYgKHNsODExLT5ib2FyZCAmJiBzbDgxMS0+Ym9hcmQtPnBvcnRfcG93ZXIpIHsKKwkJLyogc3dpdGNoIFZCVVMsIGF0IDUwMG1BIHVubGVzcyBodWIgcG93ZXIgYnVkZ2V0IGdldHMgc2V0ICovCisJCURCRygicG93ZXIgJXNcbiIsIGlzX29uID8gIm9uIiA6ICJvZmYiKTsKKwkJc2w4MTEtPmJvYXJkLT5wb3J0X3Bvd2VyKGhjZC0+c2VsZi5jb250cm9sbGVyLCBpc19vbik7CisJfQorCisJLyogcmVzZXQgYXMgdGhvcm91Z2hseSBhcyB3ZSBjYW4gKi8KKwlpZiAoc2w4MTEtPmJvYXJkICYmIHNsODExLT5ib2FyZC0+cmVzZXQpCisJCXNsODExLT5ib2FyZC0+cmVzZXQoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOworCisJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0lSUV9FTkFCTEUsIDApOworCXNsODExX3dyaXRlKHNsODExLCBTTDExSF9DVExSRUcxLCBzbDgxMS0+Y3RybDEpOworCXNsODExX3dyaXRlKHNsODExLCBTTDgxMUhTX0NUTFJFRzIsIFNMODExSFNfQ1RMMl9JTklUKTsKKwlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfSVJRX0VOQUJMRSwgc2w4MTEtPmlycV9lbmFibGUpOworCisJLy8gaWYgIWlzX29uLCBwdXQgaW50byBsb3dwb3dlciBtb2RlIG5vdworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBUaGlzIGlzIGEgUElPLW9ubHkgSENELiAgUXVldWVpbmcgYXBwZW5kcyBVUkJzIHRvIHRoZSBlbmRwb2ludCdzIHF1ZXVlLAorICogYW5kIG1heSBzdGFydCBJL08uICBFbmRwb2ludCBxdWV1ZXMgYXJlIHNjYW5uZWQgZHVyaW5nIGNvbXBsZXRpb24gaXJxCisgKiBoYW5kbGVycyAob25lIHBlciBwYWNrZXQ6IEFDSywgTkFLLCBmYXVsdHMsIGV0YykgYW5kIHVyYiBjYW5jZWxhdGlvbi4KKyAqCisgKiBVc2luZyBhbiBleHRlcm5hbCBETUEgZW5naW5lIHRvIGNvcHkgYSBwYWNrZXQgYXQgYSB0aW1lIGNvdWxkIHdvcmssCisgKiB0aG91Z2ggc2V0dXAvdGVhcmRvd24gY29zdHMgbWF5IGJlIHRvbyBiaWcgdG8gbWFrZSBpdCB3b3J0aHdoaWxlLgorICovCisKKy8qIFNFVFVQIHN0YXJ0cyBhIG5ldyBjb250cm9sIHJlcXVlc3QuICBEZXZpY2VzIGFyZSBub3QgYWxsb3dlZCB0bworICogU1RBTEwgb3IgTkFLIHRoZXNlOyB0aGV5IG11c3QgY2FuY2VsIGFueSBwZW5kaW5nIGNvbnRyb2wgcmVxdWVzdHMuCisgKi8KK3N0YXRpYyB2b2lkIHNldHVwX3BhY2tldCgKKwlzdHJ1Y3Qgc2w4MTEJCSpzbDgxMSwKKwlzdHJ1Y3Qgc2w4MTFoX2VwCSplcCwKKwlzdHJ1Y3QgdXJiCQkqdXJiLAorCXU4CQkJYmFuaywKKwl1OAkJCWNvbnRyb2wKKykKK3sKKwl1OAkJCWFkZHI7CisJdTgJCQlsZW47CisJdm9pZCBfX2lvbWVtCQkqZGF0YV9yZWc7CisKKwlhZGRyID0gU0w4MTFIU19QQUNLRVRfQlVGKGJhbmsgPT0gMCk7CisJbGVuID0gc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpOworCWRhdGFfcmVnID0gc2w4MTEtPmRhdGFfcmVnOworCXNsODExX3dyaXRlX2J1ZihzbDgxMSwgYWRkciwgdXJiLT5zZXR1cF9wYWNrZXQsIGxlbik7CisKKwkvKiBhdXRvaW5jcmVtZW50aW5nICovCisJc2w4MTFfd3JpdGUoc2w4MTEsIGJhbmsgKyBTTDExSF9CVUZBRERSUkVHLCBhZGRyKTsKKwl3cml0ZWIobGVuLCBkYXRhX3JlZyk7CisJd3JpdGViKFNMX1NFVFVQIC8qIHwgZXAtPmVwbnVtICovLCBkYXRhX3JlZyk7CisJd3JpdGViKHVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSksIGRhdGFfcmVnKTsKKworCS8qIGFsd2F5cyBPVVQvZGF0YTAgKi8gOworCXNsODExX3dyaXRlKHNsODExLCBiYW5rICsgU0wxMUhfSE9TVENUTFJFRywKKwkJCWNvbnRyb2wgfCBTTDExSF9IQ1RMTUFTS19PVVQpOworCWVwLT5sZW5ndGggPSAwOworCVBBQ0tFVCgiU0VUVVAgcWglcFxuIiwgZXApOworfQorCisvKiBTVEFUVVMgZmluaXNoZXMgY29udHJvbCByZXF1ZXN0cywgb2Z0ZW4gYWZ0ZXIgSU4gb3IgT1VUIGRhdGEgcGFja2V0cyAqLworc3RhdGljIHZvaWQgc3RhdHVzX3BhY2tldCgKKwlzdHJ1Y3Qgc2w4MTEJCSpzbDgxMSwKKwlzdHJ1Y3Qgc2w4MTFoX2VwCSplcCwKKwlzdHJ1Y3QgdXJiCQkqdXJiLAorCXU4CQkJYmFuaywKKwl1OAkJCWNvbnRyb2wKKykKK3sKKwlpbnQJCQlkb19vdXQ7CisJdm9pZCBfX2lvbWVtCQkqZGF0YV9yZWc7CisKKwlkb19vdXQgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggJiYgdXNiX3BpcGVpbih1cmItPnBpcGUpOworCWRhdGFfcmVnID0gc2w4MTEtPmRhdGFfcmVnOworCisJLyogYXV0b2luY3JlbWVudGluZyAqLworCXNsODExX3dyaXRlKHNsODExLCBiYW5rICsgU0wxMUhfQlVGQUREUlJFRywgMCk7CisJd3JpdGViKDAsIGRhdGFfcmVnKTsKKwl3cml0ZWIoKGRvX291dCA/IFNMX09VVCA6IFNMX0lOKSAvKiB8IGVwLT5lcG51bSAqLywgZGF0YV9yZWcpOworCXdyaXRlYih1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpLCBkYXRhX3JlZyk7CisKKwkvKiBhbHdheXMgZGF0YTE7IHNvbWV0aW1lcyBJTiAqLworCWNvbnRyb2wgfD0gU0wxMUhfSENUTE1BU0tfVE9HR0xFOworCWlmIChkb19vdXQpCisJCWNvbnRyb2wgfD0gU0wxMUhfSENUTE1BU0tfT1VUOworCXNsODExX3dyaXRlKHNsODExLCBiYW5rICsgU0wxMUhfSE9TVENUTFJFRywgY29udHJvbCk7CisJZXAtPmxlbmd0aCA9IDA7CisJUEFDS0VUKCJTVEFUVVMlcy8lcyBxaCVwXG4iLCBlcC0+bmFrX2NvdW50ID8gIi9yZXRyeSIgOiAiIiwKKwkJCWRvX291dCA/ICJvdXQiIDogImluIiwgZXApOworfQorCisvKiBJTiBwYWNrZXRzIGNhbiBiZSB1c2VkIHdpdGggYW55IHR5cGUgb2YgZW5kcG9pbnQuIGhlcmUgd2UganVzdAorICogc3RhcnQgdGhlIHRyYW5zZmVyLCBkYXRhIGZyb20gdGhlIHBlcmlwaGVyYWwgbWF5IGFycml2ZSBsYXRlci4KKyAqIHVyYi0+aXNvX2ZyYW1lX2Rlc2MgaXMgY3VycmVudGx5IGlnbm9yZWQgaGVyZS4uLgorICovCitzdGF0aWMgdm9pZCBpbl9wYWNrZXQoCisJc3RydWN0IHNsODExCQkqc2w4MTEsCisJc3RydWN0IHNsODExaF9lcAkqZXAsCisJc3RydWN0IHVyYgkJKnVyYiwKKwl1OAkJCWJhbmssCisJdTgJCQljb250cm9sCispCit7CisJdTgJCQlhZGRyOworCXU4CQkJbGVuOworCXZvaWQgX19pb21lbQkJKmRhdGFfcmVnOworCisJLyogYXZvaWQgbG9zaW5nIGRhdGEgb24gb3ZlcmZsb3cgKi8KKwlsZW4gPSBlcC0+bWF4cGFja2V0OworCWFkZHIgPSBTTDgxMUhTX1BBQ0tFVF9CVUYoYmFuayA9PSAwKTsKKwlpZiAoIShjb250cm9sICYgU0wxMUhfSENUTE1BU0tfSVNPQ0gpCisJCQkmJiB1c2JfZ2V0dG9nZ2xlKHVyYi0+ZGV2LCBlcC0+ZXBudW0sIDApKQorCQljb250cm9sIHw9IFNMMTFIX0hDVExNQVNLX1RPR0dMRTsKKwlkYXRhX3JlZyA9IHNsODExLT5kYXRhX3JlZzsKKworCS8qIGF1dG9pbmNyZW1lbnRpbmcgKi8KKwlzbDgxMV93cml0ZShzbDgxMSwgYmFuayArIFNMMTFIX0JVRkFERFJSRUcsIGFkZHIpOworCXdyaXRlYihsZW4sIGRhdGFfcmVnKTsKKwl3cml0ZWIoU0xfSU4gfCBlcC0+ZXBudW0sIGRhdGFfcmVnKTsKKwl3cml0ZWIodXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSwgZGF0YV9yZWcpOworCisJc2w4MTFfd3JpdGUoc2w4MTEsIGJhbmsgKyBTTDExSF9IT1NUQ1RMUkVHLCBjb250cm9sKTsKKwllcC0+bGVuZ3RoID0gbWluKChpbnQpbGVuLAorCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0gdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwlQQUNLRVQoIklOJXMvJWQgcWglcCBsZW4lZFxuIiwgZXAtPm5ha19jb3VudCA/ICIvcmV0cnkiIDogIiIsCisJCQkhIXVzYl9nZXR0b2dnbGUodXJiLT5kZXYsIGVwLT5lcG51bSwgMCksIGVwLCBsZW4pOworfQorCisvKiBPVVQgcGFja2V0cyBjYW4gYmUgdXNlZCB3aXRoIGFueSB0eXBlIG9mIGVuZHBvaW50LgorICogdXJiLT5pc29fZnJhbWVfZGVzYyBpcyBjdXJyZW50bHkgaWdub3JlZCBoZXJlLi4uCisgKi8KK3N0YXRpYyB2b2lkIG91dF9wYWNrZXQoCisJc3RydWN0IHNsODExCQkqc2w4MTEsCisJc3RydWN0IHNsODExaF9lcAkqZXAsCisJc3RydWN0IHVyYgkJKnVyYiwKKwl1OAkJCWJhbmssCisJdTgJCQljb250cm9sCispCit7CisJdm9pZAkJCSpidWY7CisJdTgJCQlhZGRyOworCXU4CQkJbGVuOworCXZvaWQgX19pb21lbQkJKmRhdGFfcmVnOworCisJYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmFjdHVhbF9sZW5ndGg7CisJcHJlZmV0Y2goYnVmKTsKKworCWxlbiA9IG1pbigoaW50KWVwLT5tYXhwYWNrZXQsCisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLSB1cmItPmFjdHVhbF9sZW5ndGgpOworCisJaWYgKCEoY29udHJvbCAmIFNMMTFIX0hDVExNQVNLX0lTT0NIKQorCQkJJiYgdXNiX2dldHRvZ2dsZSh1cmItPmRldiwgZXAtPmVwbnVtLCAxKSkKKwkJY29udHJvbCB8PSBTTDExSF9IQ1RMTUFTS19UT0dHTEU7CisJYWRkciA9IFNMODExSFNfUEFDS0VUX0JVRihiYW5rID09IDApOworCWRhdGFfcmVnID0gc2w4MTEtPmRhdGFfcmVnOworCisJc2w4MTFfd3JpdGVfYnVmKHNsODExLCBhZGRyLCBidWYsIGxlbik7CisKKwkvKiBhdXRvaW5jcmVtZW50aW5nICovCisJc2w4MTFfd3JpdGUoc2w4MTEsIGJhbmsgKyBTTDExSF9CVUZBRERSUkVHLCBhZGRyKTsKKwl3cml0ZWIobGVuLCBkYXRhX3JlZyk7CisJd3JpdGViKFNMX09VVCB8IGVwLT5lcG51bSwgZGF0YV9yZWcpOworCXdyaXRlYih1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpLCBkYXRhX3JlZyk7CisKKwlzbDgxMV93cml0ZShzbDgxMSwgYmFuayArIFNMMTFIX0hPU1RDVExSRUcsCisJCQljb250cm9sIHwgU0wxMUhfSENUTE1BU0tfT1VUKTsKKwllcC0+bGVuZ3RoID0gbGVuOworCVBBQ0tFVCgiT1VUJXMvJWQgcWglcCBsZW4lZFxuIiwgZXAtPm5ha19jb3VudCA/ICIvcmV0cnkiIDogIiIsCisJCQkhIXVzYl9nZXR0b2dnbGUodXJiLT5kZXYsIGVwLT5lcG51bSwgMSksIGVwLCBsZW4pOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBjYWxsZXIgdXBkYXRlcyBvbi1jaGlwIGVuYWJsZXMgbGF0ZXIgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHNvZmlycV9vbihzdHJ1Y3Qgc2w4MTEgKnNsODExKQoreworCWlmIChzbDgxMS0+aXJxX2VuYWJsZSAmIFNMMTFIX0lOVE1BU0tfU09GSU5UUikKKwkJcmV0dXJuOworCVZEQkcoInNvZiBpcnEgb25cbiIpOworCXNsODExLT5pcnFfZW5hYmxlIHw9IFNMMTFIX0lOVE1BU0tfU09GSU5UUjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNvZmlycV9vZmYoc3RydWN0IHNsODExICpzbDgxMSkKK3sKKwlpZiAoIShzbDgxMS0+aXJxX2VuYWJsZSAmIFNMMTFIX0lOVE1BU0tfU09GSU5UUikpCisJCXJldHVybjsKKwlWREJHKCJzb2YgaXJxIG9mZlxuIik7CisJc2w4MTEtPmlycV9lbmFibGUgJj0gflNMMTFIX0lOVE1BU0tfU09GSU5UUjsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogcGljayB0aGUgbmV4dCBlbmRwb2ludCBmb3IgYSB0cmFuc2FjdGlvbiwgYW5kIGlzc3VlIGl0LgorICogZnJhbWVzIHN0YXJ0IHdpdGggcGVyaW9kaWMgdHJhbnNmZXJzIChhZnRlciB3aGF0ZXZlciBpcyBwZW5kaW5nCisgKiBmcm9tIHRoZSBwcmV2aW91cyBmcmFtZSksIGFuZCB0aGUgcmVzdCBvZiB0aGUgdGltZSBpcyBhc3luYworICogdHJhbnNmZXJzLCBzY2hlZHVsZWQgcm91bmQtcm9iaW4uCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2w4MTFoX2VwCSpzdGFydChzdHJ1Y3Qgc2w4MTEgKnNsODExLCB1OCBiYW5rKQoreworCXN0cnVjdCBzbDgxMWhfZXAJKmVwOworCXN0cnVjdCB1cmIJCSp1cmI7CisJaW50CQkJZmNsb2NrOworCXU4CQkJY29udHJvbDsKKworCS8qIHVzZSBlbmRwb2ludCBhdCBzY2hlZHVsZSBoZWFkICovCisJaWYgKHNsODExLT5uZXh0X3BlcmlvZGljKSB7CisJCWVwID0gc2w4MTEtPm5leHRfcGVyaW9kaWM7CisJCXNsODExLT5uZXh0X3BlcmlvZGljID0gZXAtPm5leHQ7CisJfSBlbHNlIHsKKwkJaWYgKHNsODExLT5uZXh0X2FzeW5jKQorCQkJZXAgPSBzbDgxMS0+bmV4dF9hc3luYzsKKwkJZWxzZSBpZiAoIWxpc3RfZW1wdHkoJnNsODExLT5hc3luYykpCisJCQllcCA9IGNvbnRhaW5lcl9vZihzbDgxMS0+YXN5bmMubmV4dCwKKwkJCQkJc3RydWN0IHNsODExaF9lcCwgc2NoZWR1bGUpOworCQllbHNlIHsKKwkJCS8qIGNvdWxkIHNldCB1cCB0aGUgZmlyc3QgZnVsbHNwZWVkIHBlcmlvZGljCisJCQkgKiB0cmFuc2ZlciBmb3IgdGhlIG5leHQgZnJhbWUgLi4uCisJCQkgKi8KKwkJCXJldHVybiBOVUxMOworCQl9CisKKyNpZmRlZiBVU0VfQgorCQlpZiAoKGJhbmsgJiYgc2w4MTEtPmFjdGl2ZV9iID09IGVwKSB8fCBzbDgxMS0+YWN0aXZlX2EgPT0gZXApCisJCQlyZXR1cm4gTlVMTDsKKyNlbmRpZgorCisJCWlmIChlcC0+c2NoZWR1bGUubmV4dCA9PSAmc2w4MTEtPmFzeW5jKQorCQkJc2w4MTEtPm5leHRfYXN5bmMgPSBOVUxMOworCQllbHNlCisJCQlzbDgxMS0+bmV4dF9hc3luYyA9IGNvbnRhaW5lcl9vZihlcC0+c2NoZWR1bGUubmV4dCwKKwkJCQkJc3RydWN0IHNsODExaF9lcCwgc2NoZWR1bGUpOworCX0KKworCWlmICh1bmxpa2VseShsaXN0X2VtcHR5KCZlcC0+aGVwLT51cmJfbGlzdCkpKSB7CisJCURCRygiZW1wdHkgJXAgcXVldWU/XG4iLCBlcCk7CisJCXJldHVybiBOVUxMOworCX0KKworCXVyYiA9IGNvbnRhaW5lcl9vZihlcC0+aGVwLT51cmJfbGlzdC5uZXh0LCBzdHJ1Y3QgdXJiLCB1cmJfbGlzdCk7CisJY29udHJvbCA9IGVwLT5kZWZjdHJsOworCisJLyogaWYgdGhpcyBmcmFtZSBkb2Vzbid0IGhhdmUgZW5vdWdoIHRpbWUgbGVmdCB0byB0cmFuc2ZlciB0aGlzCisJICogcGFja2V0LCB3YWl0IHRpbGwgdGhlIG5leHQgZnJhbWUuICB0b28tc2ltcGxlIGFsZ29yaXRobS4uLgorCSAqLworCWZjbG9jayA9IHNsODExX3JlYWQoc2w4MTEsIFNMMTFIX1NPRlRNUlJFRykgPDwgNjsKKwlmY2xvY2sgLT0gMTAwOwkJLyogc2V0dXAgdGFrZXMgbm90IG11Y2ggdGltZSAqLworCWlmICh1cmItPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0xPVykgeworCQlpZiAoY29udHJvbCAmIFNMMTFIX0hDVExNQVNLX1BSRUFNQkxFKSB7CisJCQkvKiBhbHNvIG5vdGUgZXJyYXR1bSAxOiBzb21lIGh1YnMgd29uJ3Qgd29yayAqLworCQkJZmNsb2NrIC09IDgwMDsKKwkJfQorCQlmY2xvY2sgLT0gZXAtPm1heHBhY2tldCA8PCA4OworCisJCS8qIGVycmF0dW0gMjogQUZURVJTT0Ygb25seSB3b3JrcyBmb3IgZnVsbHNwZWVkICovCisJCWlmIChmY2xvY2sgPCAwKSB7CisJCQlpZiAoZXAtPnBlcmlvZCkKKwkJCQlzbDgxMS0+c3RhdF9vdmVycnVuKys7CisJCQlzb2ZpcnFfb24oc2w4MTEpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9IGVsc2UgeworCQlmY2xvY2sgLT0gMTIwMDAgLyAxOTsJLyogMTkgNjRieXRlIHBhY2tldHMvbXNlYyAqLworCQlpZiAoZmNsb2NrIDwgMCkgeworCQkJaWYgKGVwLT5wZXJpb2QpCisJCQkJc2w4MTEtPnN0YXRfb3ZlcnJ1bisrOworCQkJY29udHJvbCB8PSBTTDExSF9IQ1RMTUFTS19BRlRFUlNPRjsKKworCQkvKiB0aHJvdHRsZSBidWxrL2NvbnRyb2wgaXJxIG5vaXNlICovCisJCX0gZWxzZSBpZiAoZXAtPm5ha19jb3VudCkKKwkJCWNvbnRyb2wgfD0gU0wxMUhfSENUTE1BU0tfQUZURVJTT0Y7CisJfQorCisKKwlzd2l0Y2ggKGVwLT5uZXh0cGlkKSB7CisJY2FzZSBVU0JfUElEX0lOOgorCQlpbl9wYWNrZXQoc2w4MTEsIGVwLCB1cmIsIGJhbmssIGNvbnRyb2wpOworCQlicmVhazsKKwljYXNlIFVTQl9QSURfT1VUOgorCQlvdXRfcGFja2V0KHNsODExLCBlcCwgdXJiLCBiYW5rLCBjb250cm9sKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUElEX1NFVFVQOgorCQlzZXR1cF9wYWNrZXQoc2w4MTEsIGVwLCB1cmIsIGJhbmssIGNvbnRyb2wpOworCQlicmVhazsKKwljYXNlIFVTQl9QSURfQUNLOgkJLyogZm9yIGNvbnRyb2wgc3RhdHVzICovCisJCXN0YXR1c19wYWNrZXQoc2w4MTEsIGVwLCB1cmIsIGJhbmssIGNvbnRyb2wpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEQkcoImJhZCBlcCVwIHBpZCAlMDJ4XG4iLCBlcCwgZXAtPm5leHRwaWQpOworCQllcCA9IE5VTEw7CisJfQorCXJldHVybiBlcDsKK30KKworI2RlZmluZSBNSU5fSklGRklFUwkoKG1zZWNzX3RvX2ppZmZpZXMoMikgPiAxKSA/IG1zZWNzX3RvX2ppZmZpZXMoMikgOiAyKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RhcnRfdHJhbnNmZXIoc3RydWN0IHNsODExICpzbDgxMSkKK3sKKwlpZiAoc2w4MTEtPnBvcnQxICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EKSkKKwkJcmV0dXJuOworCWlmIChzbDgxMS0+YWN0aXZlX2EgPT0gTlVMTCkgeworCQlzbDgxMS0+YWN0aXZlX2EgPSBzdGFydChzbDgxMSwgU0w4MTFfRVBfQShTTDgxMV9IT1NUX0JVRikpOworCQlpZiAoc2w4MTEtPmFjdGl2ZV9hICE9IE5VTEwpCisJCQlzbDgxMS0+amlmZmllc19hID0gamlmZmllcyArIE1JTl9KSUZGSUVTOworCX0KKyNpZmRlZiBVU0VfQgorCWlmIChzbDgxMS0+YWN0aXZlX2IgPT0gTlVMTCkgeworCQlzbDgxMS0+YWN0aXZlX2IgPSBzdGFydChzbDgxMSwgU0w4MTFfRVBfQihTTDgxMV9IT1NUX0JVRikpOworCQlpZiAoc2w4MTEtPmFjdGl2ZV9iICE9IE5VTEwpCisJCQlzbDgxMS0+amlmZmllc19iID0gamlmZmllcyArIE1JTl9KSUZGSUVTOworCX0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBmaW5pc2hfcmVxdWVzdCgKKwlzdHJ1Y3Qgc2w4MTEJCSpzbDgxMSwKKwlzdHJ1Y3Qgc2w4MTFoX2VwCSplcCwKKwlzdHJ1Y3QgdXJiCQkqdXJiLAorCXN0cnVjdCBwdF9yZWdzCQkqcmVncywKKwlpbnQJCQlzdGF0dXMKKykgX19yZWxlYXNlcyhzbDgxMS0+bG9jaykgX19hY3F1aXJlcyhzbDgxMS0+bG9jaykKK3sKKwl1bnNpZ25lZAkJaTsKKworCWlmICh1c2JfcGlwZWNvbnRyb2wodXJiLT5waXBlKSkKKwkJZXAtPm5leHRwaWQgPSBVU0JfUElEX1NFVFVQOworCisJc3Bpbl9sb2NrKCZ1cmItPmxvY2spOworCWlmICh1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCisJCXVyYi0+c3RhdHVzID0gc3RhdHVzOworCXNwaW5fdW5sb2NrKCZ1cmItPmxvY2spOworCisJc3Bpbl91bmxvY2soJnNsODExLT5sb2NrKTsKKwl1c2JfaGNkX2dpdmViYWNrX3VyYihzbDgxMV90b19oY2Qoc2w4MTEpLCB1cmIsIHJlZ3MpOworCXNwaW5fbG9jaygmc2w4MTEtPmxvY2spOworCisJLyogbGVhdmUgYWN0aXZlIGVuZHBvaW50cyBpbiB0aGUgc2NoZWR1bGUgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJmVwLT5oZXAtPnVyYl9saXN0KSkKKwkJcmV0dXJuOworCisJLyogYXN5bmMgZGVzY2hlZHVsZT8gKi8KKwlpZiAoIWxpc3RfZW1wdHkoJmVwLT5zY2hlZHVsZSkpIHsKKwkJbGlzdF9kZWxfaW5pdCgmZXAtPnNjaGVkdWxlKTsKKwkJaWYgKGVwID09IHNsODExLT5uZXh0X2FzeW5jKQorCQkJc2w4MTEtPm5leHRfYXN5bmMgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJLyogcGVyaW9kaWMgZGVzY2hlZHVsZSAqLworCURCRygiZGVzY2hlZHVsZSBxaCVkLyVwIGJyYW5jaCAlZFxuIiwgZXAtPnBlcmlvZCwgZXAsIGVwLT5icmFuY2gpOworCWZvciAoaSA9IGVwLT5icmFuY2g7IGkgPCBQRVJJT0RJQ19TSVpFOyBpICs9IGVwLT5wZXJpb2QpIHsKKwkJc3RydWN0IHNsODExaF9lcAkqdGVtcDsKKwkJc3RydWN0IHNsODExaF9lcAkqKnByZXYgPSAmc2w4MTEtPnBlcmlvZGljW2ldOworCisJCXdoaWxlICgqcHJldiAmJiAoKHRlbXAgPSAqcHJldikgIT0gZXApKQorCQkJcHJldiA9ICZ0ZW1wLT5uZXh0OworCQlpZiAoKnByZXYpCisJCQkqcHJldiA9IGVwLT5uZXh0OworCQlzbDgxMS0+bG9hZFtpXSAtPSBlcC0+bG9hZDsKKwl9CQorCWVwLT5icmFuY2ggPSBQRVJJT0RJQ19TSVpFOworCXNsODExLT5wZXJpb2RpY19jb3VudC0tOworCXNsODExX3RvX2hjZChzbDgxMSktPnNlbGYuYmFuZHdpZHRoX2FsbG9jYXRlZAorCQktPSBlcC0+bG9hZCAvIGVwLT5wZXJpb2Q7CisJaWYgKGVwID09IHNsODExLT5uZXh0X3BlcmlvZGljKQorCQlzbDgxMS0+bmV4dF9wZXJpb2RpYyA9IGVwLT5uZXh0OworCisJLyogd2UgbWlnaHQgdHVybiBTT0ZzIGJhY2sgb24gYWdhaW4gZm9yIHRoZSBhc3luYyBzY2hlZHVsZSAqLworCWlmIChzbDgxMS0+cGVyaW9kaWNfY291bnQgPT0gMCkKKwkJc29maXJxX29mZihzbDgxMSk7Cit9CisKK3N0YXRpYyB2b2lkCitkb25lKHN0cnVjdCBzbDgxMSAqc2w4MTEsIHN0cnVjdCBzbDgxMWhfZXAgKmVwLCB1OCBiYW5rLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1OAkJCXN0YXR1czsKKwlzdHJ1Y3QgdXJiCQkqdXJiOworCWludAkJCXVyYnN0YXQgPSAtRUlOUFJPR1JFU1M7CisKKwlpZiAodW5saWtlbHkoIWVwKSkKKwkJcmV0dXJuOworCisJc3RhdHVzID0gc2w4MTFfcmVhZChzbDgxMSwgYmFuayArIFNMMTFIX1BLVFNUQVRSRUcpOworCisJdXJiID0gY29udGFpbmVyX29mKGVwLT5oZXAtPnVyYl9saXN0Lm5leHQsIHN0cnVjdCB1cmIsIHVyYl9saXN0KTsKKworCS8qIHdlIGNhbiBzYWZlbHkgaWdub3JlIE5BS3MgKi8KKwlpZiAoc3RhdHVzICYgU0wxMUhfU1RBVE1BU0tfTkFLKSB7CisJCS8vIFBBQ0tFVCgiLi4uTkFLXyUwMnggcWglcFxuIiwgYmFuaywgZXApOworCQlpZiAoIWVwLT5wZXJpb2QpCisJCQllcC0+bmFrX2NvdW50Kys7CisJCWVwLT5lcnJvcl9jb3VudCA9IDA7CisKKwkvKiBBQ0sgYWR2YW5jZXMgdHJhbnNmZXIsIHRvZ2dsZSwgYW5kIG1heWJlIHF1ZXVlICovCisJfSBlbHNlIGlmIChzdGF0dXMgJiBTTDExSF9TVEFUTUFTS19BQ0spIHsKKwkJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYgPSB1cmItPmRldjsKKwkJaW50CQkJbGVuOworCQl1bnNpZ25lZCBjaGFyCQkqYnVmOworCisJCS8qIHVyYi0+aXNvX2ZyYW1lX2Rlc2MgaXMgY3VycmVudGx5IGlnbm9yZWQgaGVyZS4uLiAqLworCisJCWVwLT5uYWtfY291bnQgPSBlcC0+ZXJyb3JfY291bnQgPSAwOworCQlzd2l0Y2ggKGVwLT5uZXh0cGlkKSB7CisJCWNhc2UgVVNCX1BJRF9PVVQ6CisJCQkvLyBQQUNLRVQoIi4uLkFDSy9vdXRfJTAyeCBxaCVwXG4iLCBiYW5rLCBlcCk7CisJCQl1cmItPmFjdHVhbF9sZW5ndGggKz0gZXAtPmxlbmd0aDsKKwkJCXVzYl9kb3RvZ2dsZSh1ZGV2LCBlcC0+ZXBudW0sIDEpOworCQkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aAorCQkJCQk9PSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpIHsKKwkJCQlpZiAodXNiX3BpcGVjb250cm9sKHVyYi0+cGlwZSkpCisJCQkJCWVwLT5uZXh0cGlkID0gVVNCX1BJRF9BQ0s7CisKKwkJCQkvKiBzb21lIGJ1bGsgcHJvdG9jb2xzIHRlcm1pbmF0ZSBPVVQgdHJhbnNmZXJzCisJCQkJICogYnkgYSBzaG9ydCBwYWNrZXQsIHVzaW5nIFpMUHMgbm90IHBhZGRpbmcuCisJCQkJICovCisJCQkJZWxzZSBpZiAoZXAtPmxlbmd0aCA8IGVwLT5tYXhwYWNrZXQKKwkJCQkJCXx8ICEodXJiLT50cmFuc2Zlcl9mbGFncworCQkJCQkJCSYgVVJCX1pFUk9fUEFDS0VUKSkKKwkJCQkJdXJic3RhdCA9IDA7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUElEX0lOOgorCQkJLy8gUEFDS0VUKCIuLi5BQ0svaW5fJTAyeCBxaCVwXG4iLCBiYW5rLCBlcCk7CisJCQlidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJCXByZWZldGNodyhidWYpOworCQkJbGVuID0gZXAtPm1heHBhY2tldCAtIHNsODExX3JlYWQoc2w4MTEsCisJCQkJCQliYW5rICsgU0wxMUhfWEZFUkNOVFJFRyk7CisJCQlpZiAobGVuID4gZXAtPmxlbmd0aCkgeworCQkJCWxlbiA9IGVwLT5sZW5ndGg7CisJCQkJdXJiLT5zdGF0dXMgPSAtRU9WRVJGTE9XOworCQkJfQorCQkJdXJiLT5hY3R1YWxfbGVuZ3RoICs9IGxlbjsKKwkJCXNsODExX3JlYWRfYnVmKHNsODExLCBTTDgxMUhTX1BBQ0tFVF9CVUYoYmFuayA9PSAwKSwKKwkJCQkJYnVmLCBsZW4pOworCQkJdXNiX2RvdG9nZ2xlKHVkZXYsIGVwLT5lcG51bSwgMCk7CisJCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID09IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkKKwkJCQl1cmJzdGF0ID0gMDsKKwkJCWVsc2UgaWYgKGxlbiA8IGVwLT5tYXhwYWNrZXQpIHsKKwkJCQlpZiAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spCisJCQkJCXVyYnN0YXQgPSAtRVJFTU9URUlPOworCQkJCWVsc2UKKwkJCQkJdXJic3RhdCA9IDA7CisJCQl9CisJCQlpZiAodXNiX3BpcGVjb250cm9sKHVyYi0+cGlwZSkKKwkJCQkJJiYgKHVyYnN0YXQgPT0gLUVSRU1PVEVJTworCQkJCQkJfHwgdXJic3RhdCA9PSAwKSkgeworCisJCQkJLyogTk9URSBpZiB0aGUgc3RhdHVzIHN0YWdlIFNUQUxMcyAod2h5PyksCisJCQkJICogdGhpcyByZXBvcnRzIHRoZSB3cm9uZyB1cmIgc3RhdHVzLgorCQkJCSAqLworCQkJCXNwaW5fbG9jaygmdXJiLT5sb2NrKTsKKwkJCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKQorCQkJCQl1cmItPnN0YXR1cyA9IHVyYnN0YXQ7CisJCQkJc3Bpbl91bmxvY2soJnVyYi0+bG9jayk7CisKKwkJCQl1cmIgPSBOVUxMOworCQkJCWVwLT5uZXh0cGlkID0gVVNCX1BJRF9BQ0s7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUElEX1NFVFVQOgorCQkJLy8gUEFDS0VUKCIuLi5BQ0svc2V0dXBfJTAyeCBxaCVwXG4iLCBiYW5rLCBlcCk7CisJCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID09IHVyYi0+YWN0dWFsX2xlbmd0aCkKKwkJCQllcC0+bmV4dHBpZCA9IFVTQl9QSURfQUNLOworCQkJZWxzZSBpZiAodXNiX3BpcGVvdXQodXJiLT5waXBlKSkgeworCQkJCXVzYl9zZXR0b2dnbGUodWRldiwgMCwgMSwgMSk7CisJCQkJZXAtPm5leHRwaWQgPSBVU0JfUElEX09VVDsKKwkJCX0gZWxzZSB7CisJCQkJdXNiX3NldHRvZ2dsZSh1ZGV2LCAwLCAwLCAxKTsKKwkJCQllcC0+bmV4dHBpZCA9IFVTQl9QSURfSU47CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUElEX0FDSzoKKwkJCS8vIFBBQ0tFVCgiLi4uQUNLL3N0YXR1c18lMDJ4IHFoJXBcbiIsIGJhbmssIGVwKTsKKwkJCXVyYnN0YXQgPSAwOworCQkJYnJlYWs7CisJCX0KKworCS8qIFNUQUxMIHN0b3BzIGFsbCB0cmFuc2ZlcnMgKi8KKwl9IGVsc2UgaWYgKHN0YXR1cyAmIFNMMTFIX1NUQVRNQVNLX1NUQUxMKSB7CisJCVBBQ0tFVCgiLi4uU1RBTExfJTAyeCBxaCVwXG4iLCBiYW5rLCBlcCk7CisJCWVwLT5uYWtfY291bnQgPSBlcC0+ZXJyb3JfY291bnQgPSAwOworCQl1cmJzdGF0ID0gLUVQSVBFOworCisJLyogZXJyb3I/IHJldHJ5LCB1bnRpbCAiMyBzdHJpa2VzIiAqLworCX0gZWxzZSBpZiAoKytlcC0+ZXJyb3JfY291bnQgPj0gMykgeworCQlpZiAoc3RhdHVzICYgU0wxMUhfU1RBVE1BU0tfVE1PVVQpCisJCQl1cmJzdGF0ID0gLUVUSU1FRE9VVDsKKwkJZWxzZSBpZiAoc3RhdHVzICYgU0wxMUhfU1RBVE1BU0tfT1ZGKQorCQkJdXJic3RhdCA9IC1FT1ZFUkZMT1c7CisJCWVsc2UKKwkJCXVyYnN0YXQgPSAtRVBST1RPOworCQllcC0+ZXJyb3JfY291bnQgPSAwOworCQlQQUNLRVQoIi4uLjNTVFJJS0VTXyUwMnggJTAyeCBxaCVwIHN0YXQgJWRcbiIsCisJCQkJYmFuaywgc3RhdHVzLCBlcCwgdXJic3RhdCk7CisJfQorCisJaWYgKHVyYiAmJiAodXJic3RhdCAhPSAtRUlOUFJPR1JFU1MgfHwgdXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSkKKwkJZmluaXNoX3JlcXVlc3Qoc2w4MTEsIGVwLCB1cmIsIHJlZ3MsIHVyYnN0YXQpOworfQorCitzdGF0aWMgaW5saW5lIHU4IGNoZWNrZG9uZShzdHJ1Y3Qgc2w4MTEgKnNsODExKQoreworCXU4CWN0bDsKKwl1OAlpcnFzdGF0ID0gMDsKKworCWlmIChzbDgxMS0+YWN0aXZlX2EgJiYgdGltZV9iZWZvcmVfZXEoc2w4MTEtPmppZmZpZXNfYSwgamlmZmllcykpIHsKKwkJY3RsID0gc2w4MTFfcmVhZChzbDgxMSwgU0w4MTFfRVBfQShTTDExSF9IT1NUQ1RMUkVHKSk7CisJCWlmIChjdGwgJiBTTDExSF9IQ1RMTUFTS19BUk0pCisJCQlzbDgxMV93cml0ZShzbDgxMSwgU0w4MTFfRVBfQShTTDExSF9IT1NUQ1RMUkVHKSwgMCk7CisJCURCRygiJXMgRE9ORV9BOiBjdHJsICUwMnggc3RzICUwMnhcbiIsCisJCQkoY3RsICYgU0wxMUhfSENUTE1BU0tfQVJNKSA/ICJ0aW1lb3V0IiA6ICJsb3N0IiwKKwkJCWN0bCwKKwkJCXNsODExX3JlYWQoc2w4MTEsIFNMODExX0VQX0EoU0wxMUhfUEtUU1RBVFJFRykpKTsKKwkJaXJxc3RhdCB8PSBTTDExSF9JTlRNQVNLX0RPTkVfQTsKKwl9CisjaWZkZWYJVVNFX0IKKwlpZiAoc2w4MTEtPmFjdGl2ZV9iICYmIHRpbWVfYmVmb3JlX2VxKHNsODExLT5qaWZmaWVzX2IsIGppZmZpZXMpKSB7CisJCWN0bCA9IHNsODExX3JlYWQoc2w4MTEsIFNMODExX0VQX0IoU0wxMUhfSE9TVENUTFJFRykpOworCQlpZiAoY3RsICYgU0wxMUhfSENUTE1BU0tfQVJNKQorCQkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMODExX0VQX0IoU0wxMUhfSE9TVENUTFJFRyksIDApOworCQlEQkcoIiVzIERPTkVfQjogY3RybCAlMDJ4IHN0cyAlMDJ4XG4iLAorCQkJKGN0bCAmIFNMMTFIX0hDVExNQVNLX0FSTSkgPyAidGltZW91dCIgOiAibG9zdCIsCisJCQljdGwsCisJCQlzbDgxMV9yZWFkKHNsODExLCBTTDgxMV9FUF9CKFNMMTFIX1BLVFNUQVRSRUcpKSk7CisJCWlycXN0YXQgfD0gU0wxMUhfSU5UTUFTS19ET05FX0E7CisJfQorI2VuZGlmCisJcmV0dXJuIGlycXN0YXQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzbDgxMWhfaXJxKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBzbDgxMQkqc2w4MTEgPSBoY2RfdG9fc2w4MTEoaGNkKTsKKwl1OAkJaXJxc3RhdDsKKwlpcnFyZXR1cm5fdAlyZXQgPSBJUlFfTk9ORTsKKwl1bnNpZ25lZAlyZXRyaWVzID0gNTsKKworCXNwaW5fbG9jaygmc2w4MTEtPmxvY2spOworCityZXRyeToKKwlpcnFzdGF0ID0gc2w4MTFfcmVhZChzbDgxMSwgU0wxMUhfSVJRX1NUQVRVUykgJiB+U0wxMUhfSU5UTUFTS19EUDsKKwlpZiAoaXJxc3RhdCkgeworCQlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfSVJRX1NUQVRVUywgaXJxc3RhdCk7CisJCWlycXN0YXQgJj0gc2w4MTEtPmlycV9lbmFibGU7CisJfQorCisjaWZkZWYJUVVJUksyCisJLyogdGhpcyBtYXkgbm8gbG9uZ2VyIGJlIG5lY2Vzc2FyeSAuLi4gKi8KKwlpZiAoaXJxc3RhdCA9PSAwICYmIHJldCA9PSBJUlFfTk9ORSkgeworCQlpcnFzdGF0ID0gY2hlY2tkb25lKHNsODExKTsKKwkJaWYgKGlycXN0YXQgLyogJiYgaXJxICE9IH4wICovICkKKwkJCXNsODExLT5zdGF0X2xvc3QrKzsKKwl9CisjZW5kaWYKKworCS8qIFVTQiBwYWNrZXRzLCBub3QgbmVjZXNzYXJpbHkgaGFuZGxlZCBpbiB0aGUgb3JkZXIgdGhleSdyZQorCSAqIGlzc3VlZCAuLi4gdGhhdCdzIGZpbmUgaWYgdGhleSdyZSBkaWZmZXJlbnQgZW5kcG9pbnRzLgorCSAqLworCWlmIChpcnFzdGF0ICYgU0wxMUhfSU5UTUFTS19ET05FX0EpIHsKKwkJZG9uZShzbDgxMSwgc2w4MTEtPmFjdGl2ZV9hLCBTTDgxMV9FUF9BKFNMODExX0hPU1RfQlVGKSwgcmVncyk7CisJCXNsODExLT5hY3RpdmVfYSA9IE5VTEw7CisJCXNsODExLT5zdGF0X2ErKzsKKwl9CisjaWZkZWYgVVNFX0IKKwlpZiAoaXJxc3RhdCAmIFNMMTFIX0lOVE1BU0tfRE9ORV9CKSB7CisJCWRvbmUoc2w4MTEsIHNsODExLT5hY3RpdmVfYiwgU0w4MTFfRVBfQihTTDgxMV9IT1NUX0JVRiksIHJlZ3MpOworCQlzbDgxMS0+YWN0aXZlX2IgPSBOVUxMOworCQlzbDgxMS0+c3RhdF9iKys7CisJfQorI2VuZGlmCisJaWYgKGlycXN0YXQgJiBTTDExSF9JTlRNQVNLX1NPRklOVFIpIHsKKwkJdW5zaWduZWQgaW5kZXg7CisKKwkJaW5kZXggPSBzbDgxMS0+ZnJhbWUrKyAlIChQRVJJT0RJQ19TSVpFIC0gMSk7CisJCXNsODExLT5zdGF0X3NvZisrOworCisJCS8qIGJlIGdyYWNlZnVsIGFib3V0IGFsbW9zdC1pbmV2aXRhYmxlIHBlcmlvZGljIHNjaGVkdWxlCisJCSAqIG92ZXJydW5zOiAgY29udGludWUgdGhlIHByZXZpb3VzIGZyYW1lJ3MgdHJhbnNmZXJzIGlmZgorCQkgKiB0aGlzIG9uZSBoYXMgbm90aGluZyBzY2hlZHVsZWQuCisJCSAqLworCQlpZiAoc2w4MTEtPm5leHRfcGVyaW9kaWMpIHsKKwkJCS8vIEVSUigib3ZlcnJ1biB0byBzbG90ICVkXG4iLCBpbmRleCk7CisJCQlzbDgxMS0+c3RhdF9vdmVycnVuKys7CisJCX0KKwkJaWYgKHNsODExLT5wZXJpb2RpY1tpbmRleF0pCisJCQlzbDgxMS0+bmV4dF9wZXJpb2RpYyA9IHNsODExLT5wZXJpb2RpY1tpbmRleF07CisJfQorCisJLyoga2h1YmQgbWFuYWdlcyBkZWJvdW5jaW5nIGFuZCB3YWtldXAgKi8KKwlpZiAoaXJxc3RhdCAmIFNMMTFIX0lOVE1BU0tfSU5TUk1WKSB7CisJCXNsODExLT5zdGF0X2luc3JtdisrOworCisJCS8qIG1vc3Qgc3RhdHMgYXJlIHJlc2V0IGZvciBlYWNoIFZCVVMgc2Vzc2lvbiAqLworCQlzbDgxMS0+c3RhdF93YWtlID0gMDsKKwkJc2w4MTEtPnN0YXRfc29mID0gMDsKKwkJc2w4MTEtPnN0YXRfYSA9IDA7CisJCXNsODExLT5zdGF0X2IgPSAwOworCQlzbDgxMS0+c3RhdF9sb3N0ID0gMDsKKworCQlzbDgxMS0+Y3RybDEgPSAwOworCQlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfQ1RMUkVHMSwgc2w4MTEtPmN0cmwxKTsKKworCQlzbDgxMS0+aXJxX2VuYWJsZSA9IFNMMTFIX0lOVE1BU0tfSU5TUk1WOworCQlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfSVJRX0VOQUJMRSwgc2w4MTEtPmlycV9lbmFibGUpOworCisJCS8qIHVzYmNvcmUgbnVrZXMgb3RoZXIgcGVuZGluZyB0cmFuc2FjdGlvbnMgb24gZGlzY29ubmVjdCAqLworCQlpZiAoc2w4MTEtPmFjdGl2ZV9hKSB7CisJCQlzbDgxMV93cml0ZShzbDgxMSwgU0w4MTFfRVBfQShTTDExSF9IT1NUQ1RMUkVHKSwgMCk7CisJCQlmaW5pc2hfcmVxdWVzdChzbDgxMSwgc2w4MTEtPmFjdGl2ZV9hLAorCQkJCWNvbnRhaW5lcl9vZihzbDgxMS0+YWN0aXZlX2EtPmhlcC0+dXJiX2xpc3QubmV4dCwKKwkJCQkJc3RydWN0IHVyYiwgdXJiX2xpc3QpLAorCQkJCU5VTEwsIC1FU0hVVERPV04pOworCQkJc2w4MTEtPmFjdGl2ZV9hID0gTlVMTDsKKwkJfQorI2lmZGVmCVVTRV9CCisJCWlmIChzbDgxMS0+YWN0aXZlX2IpIHsKKwkJCXNsODExX3dyaXRlKHNsODExLCBTTDgxMV9FUF9CKFNMMTFIX0hPU1RDVExSRUcpLCAwKTsKKwkJCWZpbmlzaF9yZXF1ZXN0KHNsODExLCBzbDgxMS0+YWN0aXZlX2IsCisJCQkJY29udGFpbmVyX29mKHNsODExLT5hY3RpdmVfYi0+aGVwLT51cmJfbGlzdC5uZXh0LAorCQkJCQlzdHJ1Y3QgdXJiLCB1cmJfbGlzdCksCisJCQkJTlVMTCwgLUVTSFVURE9XTik7CisJCQlzbDgxMS0+YWN0aXZlX2IgPSBOVUxMOworCQl9CisjZW5kaWYKKworCQkvKiBwb3J0IHN0YXR1cyBzZWVtcyB3aWVyZCB1bnRpbCBhZnRlciByZXNldCwgc28KKwkJICogZm9yY2UgdGhlIHJlc2V0IGFuZCBtYWtlIGtodWJkIGNsZWFuIHVwIGxhdGVyLgorCQkgKi8KKwkJc2w4MTEtPnBvcnQxIHw9ICgxIDw8IFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OKQorCQkJCXwgKDEgPDwgVVNCX1BPUlRfRkVBVF9DT05ORUNUSU9OKTsKKworCX0gZWxzZSBpZiAoaXJxc3RhdCAmIFNMMTFIX0lOVE1BU0tfUkQpIHsKKwkJaWYgKHNsODExLT5wb3J0MSAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfU1VTUEVORCkpIHsKKwkJCURCRygid2FrZXVwXG4iKTsKKwkJCXNsODExLT5wb3J0MSB8PSAxIDw8IFVTQl9QT1JUX0ZFQVRfQ19TVVNQRU5EOworCQkJc2w4MTEtPnN0YXRfd2FrZSsrOworCQl9IGVsc2UKKwkJCWlycXN0YXQgJj0gflNMMTFIX0lOVE1BU0tfUkQ7CisJfQorCisJaWYgKGlycXN0YXQpIHsKKwkJaWYgKHNsODExLT5wb3J0MSAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfRU5BQkxFKSkKKwkJCXN0YXJ0X3RyYW5zZmVyKHNsODExKTsKKwkJcmV0ID0gSVJRX0hBTkRMRUQ7CisJCWlmIChyZXRyaWVzLS0pCisJCQlnb3RvIHJldHJ5OworCX0KKworCWlmIChzbDgxMS0+cGVyaW9kaWNfY291bnQgPT0gMCAmJiBsaXN0X2VtcHR5KCZzbDgxMS0+YXN5bmMpKSAKKwkJc29maXJxX29mZihzbDgxMSk7CisJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0lSUV9FTkFCTEUsIHNsODExLT5pcnFfZW5hYmxlKTsKKworCXNwaW5fdW5sb2NrKCZzbDgxMS0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiB1c2IgMS4xIHNheXMgbWF4IDkwJSBvZiBhIGZyYW1lIGlzIGF2YWlsYWJsZSBmb3IgcGVyaW9kaWMgdHJhbnNmZXJzLgorICogdGhpcyBkcml2ZXIgZG9lc24ndCBwcm9taXNlIHRoYXQgbXVjaCBzaW5jZSBpdCdzIGdvdCB0byBoYW5kbGUgYW4KKyAqIElSUSBwZXIgcGFja2V0OyBpcnEgaGFuZGxpbmcgbGF0ZW5jaWVzIGFsc28gdXNlIHVwIHRoYXQgdGltZS4KKyAqLworI2RlZmluZQlNQVhfUEVSSU9ESUNfTE9BRAk1MDAJLyogb3V0IG9mIDEwMDAgdXNlYyAqLworCitzdGF0aWMgaW50IGJhbGFuY2Uoc3RydWN0IHNsODExICpzbDgxMSwgdTE2IHBlcmlvZCwgdTE2IGxvYWQpCit7CisJaW50CWksIGJyYW5jaCA9IC1FTk9TUEM7CisKKwkvKiBzZWFyY2ggZm9yIHRoZSBsZWFzdCBsb2FkZWQgc2NoZWR1bGUgYnJhbmNoIG9mIHRoYXQgcGVyaW9kCisJICogd2hpY2ggaGFzIGVub3VnaCBiYW5kd2lkdGggbGVmdCB1bnJlc2VydmVkLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBwZXJpb2QgOyBpKyspIHsKKwkJaWYgKGJyYW5jaCA8IDAgfHwgc2w4MTEtPmxvYWRbYnJhbmNoXSA+IHNsODExLT5sb2FkW2ldKSB7CisJCQlpbnQJajsKKworCQkJZm9yIChqID0gaTsgaiA8IFBFUklPRElDX1NJWkU7IGogKz0gcGVyaW9kKSB7CisJCQkJaWYgKChzbDgxMS0+bG9hZFtqXSArIGxvYWQpCisJCQkJCQk+IE1BWF9QRVJJT0RJQ19MT0FEKQorCQkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChqIDwgUEVSSU9ESUNfU0laRSkKKwkJCQljb250aW51ZTsKKwkJCWJyYW5jaCA9IGk7IAorCQl9CisJfQorCXJldHVybiBicmFuY2g7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgc2w4MTFoX3VyYl9lbnF1ZXVlKAorCXN0cnVjdCB1c2JfaGNkCQkqaGNkLAorCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqaGVwLAorCXN0cnVjdCB1cmIJCSp1cmIsCisJaW50CQkJbWVtX2ZsYWdzCispIHsKKwlzdHJ1Y3Qgc2w4MTEJCSpzbDgxMSA9IGhjZF90b19zbDgxMShoY2QpOworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gdXJiLT5kZXY7CisJdW5zaWduZWQgaW50CQlwaXBlID0gdXJiLT5waXBlOworCWludAkJCWlzX291dCA9ICF1c2JfcGlwZWluKHBpcGUpOworCWludAkJCXR5cGUgPSB1c2JfcGlwZXR5cGUocGlwZSk7CisJaW50CQkJZXBudW0gPSB1c2JfcGlwZWVuZHBvaW50KHBpcGUpOworCXN0cnVjdCBzbDgxMWhfZXAJKmVwID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlpbnQJCQlpOworCWludAkJCXJldHZhbCA9IDA7CisKKyNpZmRlZglESVNBQkxFX0lTTworCWlmICh0eXBlID09IFBJUEVfSVNPQ0hST05PVVMpCisJCXJldHVybiAtRU5PU1BDOworI2VuZGlmCisKKwkvKiBhdm9pZCBhbGwgYWxsb2NhdGlvbnMgd2l0aGluIHNwaW5sb2NrcyAqLworCWlmICghaGVwLT5oY3ByaXYpCisJCWVwID0ga2NhbGxvYygxLCBzaXplb2YgKmVwLCBtZW1fZmxhZ3MpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNsODExLT5sb2NrLCBmbGFncyk7CisKKwkvKiBkb24ndCBzdWJtaXQgdG8gYSBkZWFkIG9yIGRpc2FibGVkIHBvcnQgKi8KKwlpZiAoIShzbDgxMS0+cG9ydDEgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX0VOQUJMRSkpCisJCQl8fCAhSENfSVNfUlVOTklORyhoY2QtPnN0YXRlKSkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKGhlcC0+aGNwcml2KSB7CisJCWtmcmVlKGVwKTsKKwkJZXAgPSBoZXAtPmhjcHJpdjsKKwl9IGVsc2UgaWYgKCFlcCkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisKKwl9IGVsc2UgeworCQlJTklUX0xJU1RfSEVBRCgmZXAtPnNjaGVkdWxlKTsKKwkJZXAtPnVkZXYgPSB1c2JfZ2V0X2Rldih1ZGV2KTsKKwkJZXAtPmVwbnVtID0gZXBudW07CisJCWVwLT5tYXhwYWNrZXQgPSB1c2JfbWF4cGFja2V0KHVkZXYsIHVyYi0+cGlwZSwgaXNfb3V0KTsKKwkJZXAtPmRlZmN0cmwgPSBTTDExSF9IQ1RMTUFTS19BUk0gfCBTTDExSF9IQ1RMTUFTS19FTkFCTEU7CisJCXVzYl9zZXR0b2dnbGUodWRldiwgZXBudW0sIGlzX291dCwgMCk7CisKKwkJaWYgKHR5cGUgPT0gUElQRV9DT05UUk9MKQorCQkJZXAtPm5leHRwaWQgPSBVU0JfUElEX1NFVFVQOworCQllbHNlIGlmIChpc19vdXQpCisJCQllcC0+bmV4dHBpZCA9IFVTQl9QSURfT1VUOworCQllbHNlCisJCQllcC0+bmV4dHBpZCA9IFVTQl9QSURfSU47CisKKwkJaWYgKGVwLT5tYXhwYWNrZXQgPiBIX01BWFBBQ0tFVCkgeworCQkJLyogaXNvIHBhY2tldHMgdXAgdG8gMjQwIGJ5dGVzIGNvdWxkIHdvcmsuLi4gKi8KKwkJCURCRygiZGV2ICVkIGVwJWQgbWF4cGFja2V0ICVkXG4iLAorCQkJCXVkZXYtPmRldm51bSwgZXBudW0sIGVwLT5tYXhwYWNrZXQpOworCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCWlmICh1ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfTE9XKSB7CisJCQkvKiBzZW5kIHByZWFtYmxlIGZvciBleHRlcm5hbCBodWI/ICovCisJCQlpZiAoIShzbDgxMS0+Y3RybDEgJiBTTDExSF9DVEwxTUFTS19MU1BEKSkKKwkJCQllcC0+ZGVmY3RybCB8PSBTTDExSF9IQ1RMTUFTS19QUkVBTUJMRTsKKwkJfQorCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQljYXNlIFBJUEVfSU5URVJSVVBUOgorCQkJaWYgKHVyYi0+aW50ZXJ2YWwgPiBQRVJJT0RJQ19TSVpFKQorCQkJCXVyYi0+aW50ZXJ2YWwgPSBQRVJJT0RJQ19TSVpFOworCQkJZXAtPnBlcmlvZCA9IHVyYi0+aW50ZXJ2YWw7CisJCQllcC0+YnJhbmNoID0gUEVSSU9ESUNfU0laRTsKKwkJCWlmICh0eXBlID09IFBJUEVfSVNPQ0hST05PVVMpCisJCQkJZXAtPmRlZmN0cmwgfD0gU0wxMUhfSENUTE1BU0tfSVNPQ0g7CisJCQllcC0+bG9hZCA9IHVzYl9jYWxjX2J1c190aW1lKHVkZXYtPnNwZWVkLCAhaXNfb3V0LAorCQkJCSh0eXBlID09IFBJUEVfSVNPQ0hST05PVVMpLAorCQkJCXVzYl9tYXhwYWNrZXQodWRldiwgcGlwZSwgaXNfb3V0KSkKKwkJCQkJLyAxMDAwOworCQkJYnJlYWs7CisJCX0KKworCQloZXAtPmhjcHJpdiA9IGVwOworCX0KKworCS8qIG1heWJlIHB1dCBlbmRwb2ludCBpbnRvIHNjaGVkdWxlICovCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBQSVBFX0NPTlRST0w6CisJY2FzZSBQSVBFX0JVTEs6CisJCWlmIChsaXN0X2VtcHR5KCZlcC0+c2NoZWR1bGUpKQorCQkJbGlzdF9hZGRfdGFpbCgmZXAtPnNjaGVkdWxlLCAmc2w4MTEtPmFzeW5jKTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCWNhc2UgUElQRV9JTlRFUlJVUFQ6CisJCXVyYi0+aW50ZXJ2YWwgPSBlcC0+cGVyaW9kOworCQlpZiAoZXAtPmJyYW5jaCA8IFBFUklPRElDX1NJWkUpCisJCQlicmVhazsKKworCQlyZXR2YWwgPSBiYWxhbmNlKHNsODExLCBlcC0+cGVyaW9kLCBlcC0+bG9hZCk7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJZ290byBmYWlsOworCQllcC0+YnJhbmNoID0gcmV0dmFsOworCQlyZXR2YWwgPSAwOworCQl1cmItPnN0YXJ0X2ZyYW1lID0gKHNsODExLT5mcmFtZSAmIChQRVJJT0RJQ19TSVpFIC0gMSkpCisJCQkJCSsgZXAtPmJyYW5jaDsKKworCQkvKiBzb3J0IGVhY2ggc2NoZWR1bGUgYnJhbmNoIGJ5IHBlcmlvZCAoc2xvdyBiZWZvcmUgZmFzdCkKKwkJICogdG8gc2hhcmUgdGhlIGZhc3RlciBwYXJ0cyBvZiB0aGUgdHJlZSB3aXRob3V0IG5lZWRpbmcKKwkJICogZHVtbXkvcGxhY2Vob2xkZXIgbm9kZXMKKwkJICovCisJCURCRygic2NoZWR1bGUgcWglZC8lcCBicmFuY2ggJWRcbiIsIGVwLT5wZXJpb2QsIGVwLCBlcC0+YnJhbmNoKTsKKwkJZm9yIChpID0gZXAtPmJyYW5jaDsgaSA8IFBFUklPRElDX1NJWkU7IGkgKz0gZXAtPnBlcmlvZCkgeworCQkJc3RydWN0IHNsODExaF9lcAkqKnByZXYgPSAmc2w4MTEtPnBlcmlvZGljW2ldOworCQkJc3RydWN0IHNsODExaF9lcAkqaGVyZSA9ICpwcmV2OworCisJCQl3aGlsZSAoaGVyZSAmJiBlcCAhPSBoZXJlKSB7CisJCQkJaWYgKGVwLT5wZXJpb2QgPiBoZXJlLT5wZXJpb2QpCisJCQkJCWJyZWFrOworCQkJCXByZXYgPSAmaGVyZS0+bmV4dDsKKwkJCQloZXJlID0gKnByZXY7CisJCQl9CisJCQlpZiAoZXAgIT0gaGVyZSkgeworCQkJCWVwLT5uZXh0ID0gaGVyZTsKKwkJCQkqcHJldiA9IGVwOworCQkJfQorCQkJc2w4MTEtPmxvYWRbaV0gKz0gZXAtPmxvYWQ7CisJCX0KKwkJc2w4MTEtPnBlcmlvZGljX2NvdW50Kys7CisJCWhjZC0+c2VsZi5iYW5kd2lkdGhfYWxsb2NhdGVkICs9IGVwLT5sb2FkIC8gZXAtPnBlcmlvZDsKKwkJc29maXJxX29uKHNsODExKTsKKwl9CisKKwkvKiBpbiBjYXNlIG9mIHVubGluay1kdXJpbmctc3VibWl0ICovCisJc3Bpbl9sb2NrKCZ1cmItPmxvY2spOworCWlmICh1cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJc3Bpbl91bmxvY2soJnVyYi0+bG9jayk7CisJCWZpbmlzaF9yZXF1ZXN0KHNsODExLCBlcCwgdXJiLCBOVUxMLCAwKTsKKwkJcmV0dmFsID0gMDsKKwkJZ290byBmYWlsOworCX0KKwl1cmItPmhjcHJpdiA9IGhlcDsKKwlzcGluX3VubG9jaygmdXJiLT5sb2NrKTsKKworCXN0YXJ0X3RyYW5zZmVyKHNsODExKTsKKwlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfSVJRX0VOQUJMRSwgc2w4MTEtPmlycV9lbmFibGUpOworZmFpbDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbDgxMS0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgc2w4MTFoX3VyYl9kZXF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgc2w4MTEJCSpzbDgxMSA9IGhjZF90b19zbDgxMShoY2QpOworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqaGVwID0gdXJiLT5oY3ByaXY7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJc3RydWN0IHNsODExaF9lcAkqZXA7CisJaW50CQkJcmV0dmFsID0gMDsKKworCWlmICghaGVwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzbDgxMS0+bG9jaywgZmxhZ3MpOworCWVwID0gaGVwLT5oY3ByaXY7CisJaWYgKGVwKSB7CisJCS8qIGZpbmlzaCByaWdodCBhd2F5IGlmIHRoaXMgdXJiIGNhbid0IGJlIGFjdGl2ZSAuLi4KKwkJICogbm90ZSB0aGF0IHNvbWUgZHJpdmVycyB3cm9uZ2x5IGV4cGVjdCBkZWxheXMKKwkJICovCisJCWlmIChlcC0+aGVwLT51cmJfbGlzdC5uZXh0ICE9ICZ1cmItPnVyYl9saXN0KSB7CisJCQkvKiBub3QgZnJvbnQgb2YgcXVldWU/ICBuZXZlciBhY3RpdmUgKi8KKworCQkvKiBmb3IgYWN0aXZlIHRyYW5zZmVycywgd2UgZXhwZWN0IGFuIElSUSAqLworCQl9IGVsc2UgaWYgKHNsODExLT5hY3RpdmVfYSA9PSBlcCkgeworCQkJaWYgKHRpbWVfYmVmb3JlX2VxKHNsODExLT5qaWZmaWVzX2EsIGppZmZpZXMpKSB7CisJCQkJLyogaGFwcGVucyBhIGxvdCB3aXRoIGxvd3NwZWVkPz8gKi8KKwkJCQlEQkcoImdpdmV1cCBvbiBET05FX0E6IGN0cmwgJTAyeCBzdHMgJTAyeFxuIiwKKwkJCQkJc2w4MTFfcmVhZChzbDgxMSwKKwkJCQkJCVNMODExX0VQX0EoU0wxMUhfSE9TVENUTFJFRykpLAorCQkJCQlzbDgxMV9yZWFkKHNsODExLAorCQkJCQkJU0w4MTFfRVBfQShTTDExSF9QS1RTVEFUUkVHKSkpOworCQkJCXNsODExX3dyaXRlKHNsODExLCBTTDgxMV9FUF9BKFNMMTFIX0hPU1RDVExSRUcpLAorCQkJCQkJMCk7CisJCQkJc2w4MTEtPmFjdGl2ZV9hID0gTlVMTDsKKwkJCX0gZWxzZQorCQkJCXVyYiA9IE5VTEw7CisjaWZkZWYJVVNFX0IKKwkJfSBlbHNlIGlmIChzbDgxMS0+YWN0aXZlX2IgPT0gZXApIHsKKwkJCWlmICh0aW1lX2JlZm9yZV9lcShzbDgxMS0+amlmZmllc19hLCBqaWZmaWVzKSkgeworCQkJCS8qIGhhcHBlbnMgYSBsb3Qgd2l0aCBsb3dzcGVlZD8/ICovCisJCQkJREJHKCJnaXZldXAgb24gRE9ORV9COiBjdHJsICUwMnggc3RzICUwMnhcbiIsCisJCQkJCXNsODExX3JlYWQoc2w4MTEsCisJCQkJCQlTTDgxMV9FUF9CKFNMMTFIX0hPU1RDVExSRUcpKSwKKwkJCQkJc2w4MTFfcmVhZChzbDgxMSwKKwkJCQkJCVNMODExX0VQX0IoU0wxMUhfUEtUU1RBVFJFRykpKTsKKwkJCQlzbDgxMV93cml0ZShzbDgxMSwgU0w4MTFfRVBfQihTTDExSF9IT1NUQ1RMUkVHKSwKKwkJCQkJCTApOworCQkJCXNsODExLT5hY3RpdmVfYiA9IE5VTEw7CisJCQl9IGVsc2UKKwkJCQl1cmIgPSBOVUxMOworI2VuZGlmCisJCX0gZWxzZSB7CisJCQkvKiBmcm9udCBvZiBxdWV1ZSBmb3IgaW5hY3RpdmUgZW5kcG9pbnQgKi8KKwkJfQorCisJCWlmICh1cmIpCisJCQlmaW5pc2hfcmVxdWVzdChzbDgxMSwgZXAsIHVyYiwgTlVMTCwgMCk7CisJCWVsc2UKKwkJCVZEQkcoImRlcXVldWUsIHVyYiAlcCBhY3RpdmUgJXM7IHdhaXQ0aXJxXG4iLCB1cmIsCisJCQkJKHNsODExLT5hY3RpdmVfYSA9PSBlcCkgPyAiQSIgOiAiQiIpOworCX0gZWxzZQorCQlyZXR2YWwgPSAtRUlOVkFMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsODExLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQKK3NsODExaF9lbmRwb2ludF9kaXNhYmxlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqaGVwKQoreworCXN0cnVjdCBzbDgxMWhfZXAJKmVwID0gaGVwLT5oY3ByaXY7CisKKwlpZiAoIWVwKQorCQlyZXR1cm47CisKKwkvKiBhc3N1bWUgd2UnZCBqdXN0IHdhaXQgZm9yIHRoZSBpcnEgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJmhlcC0+dXJiX2xpc3QpKQorCQltc2xlZXAoMyk7CisJaWYgKCFsaXN0X2VtcHR5KCZoZXAtPnVyYl9saXN0KSkKKwkJV0FSTigiZXAgJXAgbm90IGVtcHR5P1xuIiwgZXApOworCisJdXNiX3B1dF9kZXYoZXAtPnVkZXYpOworCWtmcmVlKGVwKTsKKwloZXAtPmhjcHJpdiA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK3NsODExaF9nZXRfZnJhbWUoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3Qgc2w4MTEgKnNsODExID0gaGNkX3RvX3NsODExKGhjZCk7CisKKwkvKiB3cm9uZyBleGNlcHQgd2hpbGUgcGVyaW9kaWMgdHJhbnNmZXJzIGFyZSBzY2hlZHVsZWQ7CisJICogbmV2ZXIgbWF0Y2hlcyB0aGUgb24tdGhlLXdpcmUgZnJhbWU7CisJICogc3ViamVjdCB0byBvdmVycnVucy4KKwkgKi8KKwlyZXR1cm4gc2w4MTEtPmZyYW1lOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHRoZSB2aXJ0dWFsIHJvb3QgaHViIHRpbWVyIElSUSBjaGVja3MgZm9yIGh1YiBzdGF0dXMgKi8KK3N0YXRpYyBpbnQKK3NsODExaF9odWJfc3RhdHVzX2RhdGEoc3RydWN0IHVzYl9oY2QgKmhjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzbDgxMSAqc2w4MTEgPSBoY2RfdG9fc2w4MTEoaGNkKTsKKyNpZmRlZglRVUlSSzMKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogbm9uLVNNUCBIQUNLOiB1c2Ugcm9vdCBodWIgdGltZXIgYXMgaS9vIHdhdGNoZG9nCisJICogdGhpcyBzZWVtcyBlc3NlbnRpYWwgd2hlbiBTT0YgSVJRcyBhcmVuJ3QgaW4gdXNlLi4uCisJICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWlmICghdGltZXJfcGVuZGluZygmc2w4MTEtPnRpbWVyKSkgeworCQlpZiAoc2w4MTFoX2lycSggLyogfjAsICovIGhjZCwgTlVMTCkgIT0gSVJRX05PTkUpCisJCQlzbDgxMS0+c3RhdF9sb3N0Kys7CisJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKyNlbmRpZgorCisJaWYgKCEoc2w4MTEtPnBvcnQxICYgKDB4ZmZmZiA8PCAxNikpKQorCQlyZXR1cm4gMDsKKworCS8qIHRlbGwga2h1YmQgcG9ydCAxIGNoYW5nZWQgKi8KKwkqYnVmID0gKDEgPDwgMSk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitzbDgxMWhfaHViX2Rlc2NyaXB0b3IgKAorCXN0cnVjdCBzbDgxMQkJCSpzbDgxMSwKKwlzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yCSpkZXNjCispIHsKKwl1MTYJCXRlbXAgPSAwOworCisJZGVzYy0+YkRlc2NyaXB0b3JUeXBlID0gMHgyOTsKKwlkZXNjLT5iSHViQ29udHJDdXJyZW50ID0gMDsKKworCWRlc2MtPmJOYnJQb3J0cyA9IDE7CisJZGVzYy0+YkRlc2NMZW5ndGggPSA5OworCisJLyogcGVyLXBvcnQgcG93ZXIgc3dpdGNoaW5nIChnYW5nIG9mIG9uZSEpLCBvciBub25lICovCisJZGVzYy0+YlB3ck9uMlB3ckdvb2QgPSAwOworCWlmIChzbDgxMS0+Ym9hcmQgJiYgc2w4MTEtPmJvYXJkLT5wb3J0X3Bvd2VyKSB7CisJCWRlc2MtPmJQd3JPbjJQd3JHb29kID0gc2w4MTEtPmJvYXJkLT5wb3RwZzsKKwkJaWYgKCFkZXNjLT5iUHdyT24yUHdyR29vZCkKKwkJCWRlc2MtPmJQd3JPbjJQd3JHb29kID0gMTA7CisJCXRlbXAgPSAweDAwMDE7CisJfSBlbHNlCisJCXRlbXAgPSAweDAwMDI7CisKKwkvKiBubyBvdmVyY3VycmVudCBlcnJvcnMgZGV0ZWN0aW9uL2hhbmRsaW5nICovCisJdGVtcCB8PSAweDAwMTA7CisKKwlkZXNjLT53SHViQ2hhcmFjdGVyaXN0aWNzID0gKF9fZm9yY2UgX191MTYpY3B1X3RvX2xlMTYodGVtcCk7CisKKwkvKiB0d28gYml0bWFwczogIHBvcnRzIHJlbW92YWJsZSwgYW5kIGxlZ2FjeSBQb3J0UHdyQ3RybE1hc2sgKi8KKwlkZXNjLT5iaXRtYXBbMF0gPSAxIDw8IDE7CisJZGVzYy0+Yml0bWFwWzFdID0gfjA7Cit9CisKK3N0YXRpYyB2b2lkCitzbDgxMWhfdGltZXIodW5zaWduZWQgbG9uZyBfc2w4MTEpCit7CisJc3RydWN0IHNsODExIAkqc2w4MTEgPSAodm9pZCAqKSBfc2w4MTE7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwl1OAkJaXJxc3RhdDsKKwl1OAkJc2lnbmFsaW5nID0gc2w4MTEtPmN0cmwxICYgU0wxMUhfQ1RMMU1BU0tfRk9SQ0U7CisJY29uc3QgdTMyCW1hc2sgPSAoMSA8PCBVU0JfUE9SVF9GRUFUX0NPTk5FQ1RJT04pCisJCQkJfCAoMSA8PCBVU0JfUE9SVF9GRUFUX0VOQUJMRSkKKwkJCQl8ICgxIDw8IFVTQl9QT1JUX0ZFQVRfTE9XU1BFRUQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNsODExLT5sb2NrLCBmbGFncyk7CisKKwkvKiBzdG9wIHNwZWNpYWwgc2lnbmFsaW5nICovCisJc2w4MTEtPmN0cmwxICY9IH5TTDExSF9DVEwxTUFTS19GT1JDRTsKKwlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfQ1RMUkVHMSwgc2w4MTEtPmN0cmwxKTsKKwl1ZGVsYXkoMyk7CisKKwlpcnFzdGF0ID0gc2w4MTFfcmVhZChzbDgxMSwgU0wxMUhfSVJRX1NUQVRVUyk7CisKKwlzd2l0Y2ggKHNpZ25hbGluZykgeworCWNhc2UgU0wxMUhfQ1RMMU1BU0tfU0UwOgorCQlEQkcoImVuZCByZXNldFxuIik7CisJCXNsODExLT5wb3J0MSA9ICgxIDw8IFVTQl9QT1JUX0ZFQVRfQ19SRVNFVCkKKwkJCQl8ICgxIDw8IFVTQl9QT1JUX0ZFQVRfUE9XRVIpOworCQlzbDgxMS0+Y3RybDEgPSAwOworCQkvKiBkb24ndCB3cm9uZ2x5IGFjayBSRCAqLworCQlpZiAoaXJxc3RhdCAmIFNMMTFIX0lOVE1BU0tfSU5TUk1WKQorCQkJaXJxc3RhdCAmPSB+U0wxMUhfSU5UTUFTS19SRDsKKwkJYnJlYWs7CisJY2FzZSBTTDExSF9DVEwxTUFTS19LOgorCQlEQkcoImVuZCByZXN1bWVcbiIpOworCQlzbDgxMS0+cG9ydDEgJj0gfigxIDw8IFVTQl9QT1JUX0ZFQVRfU1VTUEVORCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURCRygib2RkIHRpbWVyIHNpZ25hbGluZzogJTAyeFxuIiwgc2lnbmFsaW5nKTsKKwkJYnJlYWs7CisJfQorCXNsODExX3dyaXRlKHNsODExLCBTTDExSF9JUlFfU1RBVFVTLCBpcnFzdGF0KTsKKworCWlmIChpcnFzdGF0ICYgU0wxMUhfSU5UTUFTS19SRCkgeworCQkvKiB1c2Jjb3JlIG51a2VzIGFsbCBwZW5kaW5nIHRyYW5zYWN0aW9ucyBvbiBkaXNjb25uZWN0ICovCisJCWlmIChzbDgxMS0+cG9ydDEgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX0NPTk5FQ1RJT04pKQorCQkJc2w4MTEtPnBvcnQxIHw9ICgxIDw8IFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OKQorCQkJCQl8ICgxIDw8IFVTQl9QT1JUX0ZFQVRfQ19FTkFCTEUpOworCQlzbDgxMS0+cG9ydDEgJj0gfm1hc2s7CisJCXNsODExLT5pcnFfZW5hYmxlID0gU0wxMUhfSU5UTUFTS19JTlNSTVY7CisJfSBlbHNlIHsKKwkJc2w4MTEtPnBvcnQxIHw9IG1hc2s7CisJCWlmIChpcnFzdGF0ICYgU0wxMUhfSU5UTUFTS19EUCkKKwkJCXNsODExLT5wb3J0MSAmPSB+KDEgPDwgVVNCX1BPUlRfRkVBVF9MT1dTUEVFRCk7CisJCXNsODExLT5pcnFfZW5hYmxlID0gU0wxMUhfSU5UTUFTS19JTlNSTVYgfCBTTDExSF9JTlRNQVNLX1JEOworCX0KKworCWlmIChzbDgxMS0+cG9ydDEgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX0NPTk5FQ1RJT04pKSB7CisJCXU4CWN0cmwyID0gU0w4MTFIU19DVEwyX0lOSVQ7CisKKwkJc2w4MTEtPmlycV9lbmFibGUgfD0gU0wxMUhfSU5UTUFTS19ET05FX0E7CisjaWZkZWYgVVNFX0IKKwkJc2w4MTEtPmlycV9lbmFibGUgfD0gU0wxMUhfSU5UTUFTS19ET05FX0I7CisjZW5kaWYKKwkJaWYgKHNsODExLT5wb3J0MSAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfTE9XU1BFRUQpKSB7CisJCQlzbDgxMS0+Y3RybDEgfD0gU0wxMUhfQ1RMMU1BU0tfTFNQRDsKKwkJCWN0cmwyIHw9IFNMODExSFNfQ1RMMk1BU0tfRFNXQVA7CisJCX0KKworCQkvKiBzdGFydCBTT0ZzIGZsb3dpbmcsIGtpY2tzdGFydGluZyB3aXRoIEEgcmVnaXN0ZXJzICovCisJCXNsODExLT5jdHJsMSB8PSBTTDExSF9DVEwxTUFTS19TT0ZfRU5BOworCQlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfU09GTE9XUkVHLCAweGUwKTsKKwkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMODExSFNfQ1RMUkVHMiwgY3RybDIpOworCisJCS8qIGF1dG9pbmNyZW1lbnRpbmcgKi8KKwkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMODExX0VQX0EoU0wxMUhfQlVGTE5USFJFRyksIDApOworCQl3cml0ZWIoU0xfU09GLCBzbDgxMS0+ZGF0YV9yZWcpOworCQl3cml0ZWIoMCwgc2w4MTEtPmRhdGFfcmVnKTsKKwkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMODExX0VQX0EoU0wxMUhfSE9TVENUTFJFRyksCisJCQkJU0wxMUhfSENUTE1BU0tfQVJNKTsKKworCQkvKiBraHViZCBwcm92aWRlcyBkZWJvdW5jZSBkZWxheSAqLworCX0gZWxzZSB7CisJCXNsODExLT5jdHJsMSA9IDA7CisJfQorCXNsODExX3dyaXRlKHNsODExLCBTTDExSF9DVExSRUcxLCBzbDgxMS0+Y3RybDEpOworCisJLyogcmVlbmFibGUgaXJxcyAqLworCXNsODExX3dyaXRlKHNsODExLCBTTDExSF9JUlFfRU5BQkxFLCBzbDgxMS0+aXJxX2VuYWJsZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2w4MTEtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludAorc2w4MTFoX2h1Yl9jb250cm9sKAorCXN0cnVjdCB1c2JfaGNkCSpoY2QsCisJdTE2CQl0eXBlUmVxLAorCXUxNgkJd1ZhbHVlLAorCXUxNgkJd0luZGV4LAorCWNoYXIJCSpidWYsCisJdTE2CQl3TGVuZ3RoCispIHsKKwlzdHJ1Y3Qgc2w4MTEJKnNsODExID0gaGNkX3RvX3NsODExKGhjZCk7CisJaW50CQlyZXR2YWwgPSAwOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2w4MTEtPmxvY2ssIGZsYWdzKTsKKworCXN3aXRjaCAodHlwZVJlcSkgeworCWNhc2UgQ2xlYXJIdWJGZWF0dXJlOgorCWNhc2UgU2V0SHViRmVhdHVyZToKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBDX0hVQl9PVkVSX0NVUlJFTlQ6CisJCWNhc2UgQ19IVUJfTE9DQUxfUE9XRVI6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDbGVhclBvcnRGZWF0dXJlOgorCQlpZiAod0luZGV4ICE9IDEgfHwgd0xlbmd0aCAhPSAwKQorCQkJZ290byBlcnJvcjsKKworCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIFVTQl9QT1JUX0ZFQVRfRU5BQkxFOgorCQkJc2w4MTEtPnBvcnQxICY9ICgxIDw8IFVTQl9QT1JUX0ZFQVRfUE9XRVIpOworCQkJc2w4MTEtPmN0cmwxID0gMDsKKwkJCXNsODExX3dyaXRlKHNsODExLCBTTDExSF9DVExSRUcxLCBzbDgxMS0+Y3RybDEpOworCQkJc2w4MTEtPmlycV9lbmFibGUgPSBTTDExSF9JTlRNQVNLX0lOU1JNVjsKKwkJCXNsODExX3dyaXRlKHNsODExLCBTTDExSF9JUlFfRU5BQkxFLAorCQkJCQkJc2w4MTEtPmlycV9lbmFibGUpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9TVVNQRU5EOgorCQkJaWYgKCEoc2w4MTEtPnBvcnQxICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EKSkpCisJCQkJYnJlYWs7CisKKwkJCS8qIDIwIG1zZWMgb2YgcmVzdW1lL0sgc2lnbmFsaW5nLCBvdGhlciBpcnFzIGJsb2NrZWQgKi8KKwkJCURCRygic3RhcnQgcmVzdW1lLi4uXG4iKTsKKwkJCXNsODExLT5pcnFfZW5hYmxlID0gMDsKKwkJCXNsODExX3dyaXRlKHNsODExLCBTTDExSF9JUlFfRU5BQkxFLAorCQkJCQkJc2w4MTEtPmlycV9lbmFibGUpOworCQkJc2w4MTEtPmN0cmwxIHw9IFNMMTFIX0NUTDFNQVNLX0s7CisJCQlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfQ1RMUkVHMSwgc2w4MTEtPmN0cmwxKTsKKworCQkJbW9kX3RpbWVyKCZzbDgxMS0+dGltZXIsIGppZmZpZXMKKwkJCQkJKyBtc2Vjc190b19qaWZmaWVzKDIwKSk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1BPV0VSOgorCQkJcG9ydF9wb3dlcihzbDgxMSwgMCk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfRU5BQkxFOgorCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19TVVNQRU5EOgorCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OOgorCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19PVkVSX0NVUlJFTlQ6CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX1JFU0VUOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQl9CisJCXNsODExLT5wb3J0MSAmPSB+KDEgPDwgd1ZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBHZXRIdWJEZXNjcmlwdG9yOgorCQlzbDgxMWhfaHViX2Rlc2NyaXB0b3Ioc2w4MTEsIChzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yICopIGJ1Zik7CisJCWJyZWFrOworCWNhc2UgR2V0SHViU3RhdHVzOgorCQkqKF9fbGUzMiAqKSBidWYgPSBjcHVfdG9fbGUzMigwKTsKKwkJYnJlYWs7CisJY2FzZSBHZXRQb3J0U3RhdHVzOgorCQlpZiAod0luZGV4ICE9IDEpCisJCQlnb3RvIGVycm9yOworCQkqKF9fbGUzMiAqKSBidWYgPSBjcHVfdG9fbGUzMihzbDgxMS0+cG9ydDEpOworCisjaWZuZGVmCVZFUkJPU0UKKwlpZiAoKih1MTYqKShidWYrMikpCS8qIG9ubHkgaWYgd1BvcnRDaGFuZ2UgaXMgaW50ZXJlc3RpbmcgKi8KKyNlbmRpZgorCQlEQkcoIkdldFBvcnRTdGF0dXMgJTA4eFxuIiwgc2w4MTEtPnBvcnQxKTsKKwkJYnJlYWs7CisJY2FzZSBTZXRQb3J0RmVhdHVyZToKKwkJaWYgKHdJbmRleCAhPSAxIHx8IHdMZW5ndGggIT0gMCkKKwkJCWdvdG8gZXJyb3I7CisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9TVVNQRU5EOgorCQkJaWYgKHNsODExLT5wb3J0MSAmICgxIDw8IFVTQl9QT1JUX0ZFQVRfUkVTRVQpKQorCQkJCWdvdG8gZXJyb3I7CisJCQlpZiAoIShzbDgxMS0+cG9ydDEgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX0VOQUJMRSkpKQorCQkJCWdvdG8gZXJyb3I7CisKKwkJCURCRygic3VzcGVuZC4uLlxuIik7CisJCQlzbDgxMS0+Y3RybDEgJj0gflNMMTFIX0NUTDFNQVNLX1NPRl9FTkE7CisJCQlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfQ1RMUkVHMSwgc2w4MTEtPmN0cmwxKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUE9XRVI6CisJCQlwb3J0X3Bvd2VyKHNsODExLCAxKTsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUkVTRVQ6CisJCQlpZiAoc2w4MTEtPnBvcnQxICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EKSkKKwkJCQlnb3RvIGVycm9yOworCQkJaWYgKCEoc2w4MTEtPnBvcnQxICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9QT1dFUikpKQorCQkJCWJyZWFrOworCisJCQkvKiA1MCBtc2VjIG9mIHJlc2V0L1NFMCBzaWduYWxpbmcsIGlycXMgYmxvY2tlZCAqLworCQkJc2w4MTEtPmlycV9lbmFibGUgPSAwOworCQkJc2w4MTFfd3JpdGUoc2w4MTEsIFNMMTFIX0lSUV9FTkFCTEUsCisJCQkJCQlzbDgxMS0+aXJxX2VuYWJsZSk7CisJCQlzbDgxMS0+Y3RybDEgPSBTTDExSF9DVEwxTUFTS19TRTA7CisJCQlzbDgxMV93cml0ZShzbDgxMSwgU0wxMUhfQ1RMUkVHMSwgc2w4MTEtPmN0cmwxKTsKKwkJCXNsODExLT5wb3J0MSB8PSAoMSA8PCBVU0JfUE9SVF9GRUFUX1JFU0VUKTsKKwkJCW1vZF90aW1lcigmc2w4MTEtPnRpbWVyLCBqaWZmaWVzCisJCQkJCSsgbXNlY3NfdG9famlmZmllcyg1MCkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQl9CisJCXNsODExLT5wb3J0MSB8PSAxIDw8IHdWYWx1ZTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorZXJyb3I6CisJCS8qICJwcm90b2NvbCBzdGFsbCIgb24gZXJyb3IgKi8KKwkJcmV0dmFsID0gLUVQSVBFOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsODExLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworI2lmZGVmCUNPTkZJR19QTQorCitzdGF0aWMgaW50CitzbDgxMWhfaHViX3N1c3BlbmQoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwkvLyBTT0ZzIG9mZgorCURCRygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NsODExaF9odWJfcmVzdW1lKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJLy8gU09GcyBvbgorCURCRygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUJc2w4MTFoX2h1Yl9zdXNwZW5kCU5VTEwKKyNkZWZpbmUJc2w4MTFoX2h1Yl9yZXN1bWUJTlVMTAorCisjZW5kaWYKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgU1RVQl9ERUJVR19GSUxFCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcmVhdGVfZGVidWdfZmlsZShzdHJ1Y3Qgc2w4MTEgKnNsODExKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfZGVidWdfZmlsZShzdHJ1Y3Qgc2w4MTEgKnNsODExKSB7IH0KKworI2Vsc2UKKworI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCitzdGF0aWMgdm9pZCBkdW1wX2lycShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGNoYXIgKmxhYmVsLCB1OCBtYXNrKQoreworCXNlcV9wcmludGYocywgIiVzICUwMnglcyVzJXMlcyVzJXNcbiIsIGxhYmVsLCBtYXNrLAorCQkobWFzayAmIFNMMTFIX0lOVE1BU0tfRE9ORV9BKSA/ICIgZG9uZV9hIiA6ICIiLAorCQkobWFzayAmIFNMMTFIX0lOVE1BU0tfRE9ORV9CKSA/ICIgZG9uZV9iIiA6ICIiLAorCQkobWFzayAmIFNMMTFIX0lOVE1BU0tfU09GSU5UUikgPyAiIHNvZiIgOiAiIiwKKwkJKG1hc2sgJiBTTDExSF9JTlRNQVNLX0lOU1JNVikgPyAiIGlucy9ybXYiIDogIiIsCisJCShtYXNrICYgU0wxMUhfSU5UTUFTS19SRCkgPyAiIHJkIiA6ICIiLAorCQkobWFzayAmIFNMMTFIX0lOVE1BU0tfRFApID8gIiBkcCIgOiAiIik7Cit9CisKK3N0YXRpYyBpbnQgcHJvY19zbDgxMWhfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3Qgc2w4MTEJCSpzbDgxMSA9IHMtPnByaXZhdGU7CisJc3RydWN0IHNsODExaF9lcAkqZXA7CisJdW5zaWduZWQJCWk7CisKKwlzZXFfcHJpbnRmKHMsICIlc1xuJXMgdmVyc2lvbiAlc1xucG9ydHN0YXR1c1sxXSA9ICUwOHhcbiIsCisJCXNsODExX3RvX2hjZChzbDgxMSktPnByb2R1Y3RfZGVzYywKKwkJaGNkX25hbWUsIERSSVZFUl9WRVJTSU9OLAorCQlzbDgxMS0+cG9ydDEpOworCisJc2VxX3ByaW50ZihzLCAiaW5zZXJ0L3JlbW92ZTogJWxkXG4iLCBzbDgxMS0+c3RhdF9pbnNybXYpOworCXNlcV9wcmludGYocywgImN1cnJlbnQgc2Vzc2lvbjogIGRvbmVfYSAlbGQgZG9uZV9iICVsZCAiCisJCQkid2FrZSAlbGQgc29mICVsZCBvdmVycnVuICVsZCBsb3N0ICVsZFxuXG4iLAorCQlzbDgxMS0+c3RhdF9hLCBzbDgxMS0+c3RhdF9iLAorCQlzbDgxMS0+c3RhdF93YWtlLCBzbDgxMS0+c3RhdF9zb2YsCisJCXNsODExLT5zdGF0X292ZXJydW4sIHNsODExLT5zdGF0X2xvc3QpOworCisJc3Bpbl9sb2NrX2lycSgmc2w4MTEtPmxvY2spOworCisJaWYgKHNsODExLT5jdHJsMSAmIFNMMTFIX0NUTDFNQVNLX1NVU1BFTkQpCisJCXNlcV9wcmludGYocywgIihzdXNwZW5kZWQpXG5cbiIpOworCWVsc2UgeworCQl1OAl0ID0gc2w4MTFfcmVhZChzbDgxMSwgU0wxMUhfQ1RMUkVHMSk7CisKKwkJc2VxX3ByaW50ZihzLCAiY3RybDEgJTAyeCVzJXMlcyVzXG4iLCB0LAorCQkJKHQgJiBTTDExSF9DVEwxTUFTS19TT0ZfRU5BKSA/ICIgc29mZ2VuIiA6ICIiLAorCQkJKHtjaGFyICpzOyBzd2l0Y2ggKHQgJiBTTDExSF9DVEwxTUFTS19GT1JDRSkgeworCQkJY2FzZSBTTDExSF9DVEwxTUFTS19OT1JNQUw6IHMgPSAiIjsgYnJlYWs7CisJCQljYXNlIFNMMTFIX0NUTDFNQVNLX1NFMDogcyA9ICIgc2UwL3Jlc2V0IjsgYnJlYWs7CisJCQljYXNlIFNMMTFIX0NUTDFNQVNLX0s6IHMgPSAiIGsvcmVzdW1lIjsgYnJlYWs7CisJCQlkZWZhdWx0OiBzID0gImoiOyBicmVhazsKKwkJCX07IHM7IH0pLAorCQkJKHQgJiBTTDExSF9DVEwxTUFTS19MU1BEKSA/ICIgbG93c3BlZWQiIDogIiIsCisJCQkodCAmIFNMMTFIX0NUTDFNQVNLX1NVU1BFTkQpID8gIiBzdXNwZW5kIiA6ICIiKTsKKworCQlkdW1wX2lycShzLCAiaXJxX2VuYWJsZSIsCisJCQkJc2w4MTFfcmVhZChzbDgxMSwgU0wxMUhfSVJRX0VOQUJMRSkpOworCQlkdW1wX2lycShzLCAiaXJxX3N0YXR1cyIsCisJCQkJc2w4MTFfcmVhZChzbDgxMSwgU0wxMUhfSVJRX1NUQVRVUykpOworCQlzZXFfcHJpbnRmKHMsICJmcmFtZSBjbG9ja3MgcmVtYWluaW5nOiAgJWRcbiIsCisJCQkJc2w4MTFfcmVhZChzbDgxMSwgU0wxMUhfU09GVE1SUkVHKSA8PCA2KTsKKwl9CisKKwlzZXFfcHJpbnRmKHMsICJBOiBxaCVwIGN0bCAlMDJ4IHN0cyAlMDJ4XG4iLCBzbDgxMS0+YWN0aXZlX2EsCisJCXNsODExX3JlYWQoc2w4MTEsIFNMODExX0VQX0EoU0wxMUhfSE9TVENUTFJFRykpLAorCQlzbDgxMV9yZWFkKHNsODExLCBTTDgxMV9FUF9BKFNMMTFIX1BLVFNUQVRSRUcpKSk7CisJc2VxX3ByaW50ZihzLCAiQjogcWglcCBjdGwgJTAyeCBzdHMgJTAyeFxuIiwgc2w4MTEtPmFjdGl2ZV9iLAorCQlzbDgxMV9yZWFkKHNsODExLCBTTDgxMV9FUF9CKFNMMTFIX0hPU1RDVExSRUcpKSwKKwkJc2w4MTFfcmVhZChzbDgxMSwgU0w4MTFfRVBfQihTTDExSF9QS1RTVEFUUkVHKSkpOworCXNlcV9wcmludGYocywgIlxuIik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSAoZXAsICZzbDgxMS0+YXN5bmMsIHNjaGVkdWxlKSB7CisJCXN0cnVjdCB1cmIJCSp1cmI7CisKKwkJc2VxX3ByaW50ZihzLCAiJXMlc3FoJXAsIGVwJWQlcywgbWF4cGFja2V0ICVkIgorCQkJCQkiIG5hayAlZCBlcnIgJWRcbiIsCisJCQkoZXAgPT0gc2w4MTEtPmFjdGl2ZV9hKSA/ICIoQSkgIiA6ICIiLAorCQkJKGVwID09IHNsODExLT5hY3RpdmVfYikgPyAiKEIpICIgOiAiIiwKKwkJCWVwLCBlcC0+ZXBudW0sCisJCQkoeyBjaGFyICpzOyBzd2l0Y2ggKGVwLT5uZXh0cGlkKSB7CisJCQljYXNlIFVTQl9QSURfSU46IHMgPSAiaW4iOyBicmVhazsKKwkJCWNhc2UgVVNCX1BJRF9PVVQ6IHMgPSAib3V0IjsgYnJlYWs7CisJCQljYXNlIFVTQl9QSURfU0VUVVA6IHMgPSAic2V0dXAiOyBicmVhazsKKwkJCWNhc2UgVVNCX1BJRF9BQ0s6IHMgPSAic3RhdHVzIjsgYnJlYWs7CisJCQlkZWZhdWx0OiBzID0gIj8iOyBicmVhazsKKwkJCX07IHM7fSksCisJCQllcC0+bWF4cGFja2V0LAorCQkJZXAtPm5ha19jb3VudCwgZXAtPmVycm9yX2NvdW50KTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSAodXJiLCAmZXAtPmhlcC0+dXJiX2xpc3QsIHVyYl9saXN0KSB7CisJCQlzZXFfcHJpbnRmKHMsICIgIHVyYiVwLCAlZC8lZFxuIiwgdXJiLAorCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCQl9CisJfQorCWlmICghbGlzdF9lbXB0eSgmc2w4MTEtPmFzeW5jKSkKKwkJc2VxX3ByaW50ZihzLCAiXG4iKTsKKworCXNlcV9wcmludGYocywgInBlcmlvZGljIHNpemU9ICVkXG4iLCBQRVJJT0RJQ19TSVpFKTsKKworCWZvciAoaSA9IDA7IGkgPCBQRVJJT0RJQ19TSVpFOyBpKyspIHsKKwkJZXAgPSBzbDgxMS0+cGVyaW9kaWNbaV07CisJCWlmICghZXApCisJCQljb250aW51ZTsKKwkJc2VxX3ByaW50ZihzLCAiJTJkIFslM2RdOlxuIiwgaSwgc2w4MTEtPmxvYWRbaV0pOworCisJCS8qIERVTUI6IHByaW50cyBzaGFyZWQgZW50cmllcyBtdWx0aXBsZSB0aW1lcyAqLworCQlkbyB7CisJCQlzZXFfcHJpbnRmKHMsCisJCQkJIiAgICVzJXNxaCVkLyVwICglc2RldiVkIGVwJWQlcyBtYXggJWQpICIKKwkJCQkJImVyciAlZFxuIiwKKwkJCQkoZXAgPT0gc2w4MTEtPmFjdGl2ZV9hKSA/ICIoQSkgIiA6ICIiLAorCQkJCShlcCA9PSBzbDgxMS0+YWN0aXZlX2IpID8gIihCKSAiIDogIiIsCisJCQkJZXAtPnBlcmlvZCwgZXAsCisJCQkJKGVwLT51ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfRlVMTCkKKwkJCQkJPyAiIiA6ICJscyAiLAorCQkJCWVwLT51ZGV2LT5kZXZudW0sIGVwLT5lcG51bSwKKwkJCQkoZXAtPmVwbnVtID09IDApID8gIiIKKwkJCQkJOiAoKGVwLT5uZXh0cGlkID09IFVTQl9QSURfSU4pCisJCQkJCQk/ICJpbiIKKwkJCQkJCTogIm91dCIpLAorCQkJCWVwLT5tYXhwYWNrZXQsIGVwLT5lcnJvcl9jb3VudCk7CisJCQllcCA9IGVwLT5uZXh0OworCQl9IHdoaWxlIChlcCk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxKCZzbDgxMS0+bG9jayk7CisJc2VxX3ByaW50ZihzLCAiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2Nfc2w4MTFoX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHByb2Nfc2w4MTFoX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX29wcyA9IHsKKwkub3BlbgkJPSBwcm9jX3NsODExaF9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCisvKiBleHBlY3QganVzdCBvbmUgc2w4MTEgcGVyIHN5c3RlbSAqLworc3RhdGljIGNvbnN0IGNoYXIgcHJvY19maWxlbmFtZVtdID0gImRyaXZlci9zbDgxMWgiOworCitzdGF0aWMgdm9pZCBjcmVhdGVfZGVidWdfZmlsZShzdHJ1Y3Qgc2w4MTEgKnNsODExKQoreworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlOworCisJcGRlID0gY3JlYXRlX3Byb2NfZW50cnkocHJvY19maWxlbmFtZSwgMCwgTlVMTCk7CisJaWYgKHBkZSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlwZGUtPnByb2NfZm9wcyA9ICZwcm9jX29wczsKKwlwZGUtPmRhdGEgPSBzbDgxMTsKKwlzbDgxMS0+cGRlID0gcGRlOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfZGVidWdfZmlsZShzdHJ1Y3Qgc2w4MTEgKnNsODExKQoreworCWlmIChzbDgxMS0+cGRlKQorCQlyZW1vdmVfcHJvY19lbnRyeShwcm9jX2ZpbGVuYW1lLCBOVUxMKTsKK30KKworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCitzbDgxMWhfc3RvcChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBzbDgxMQkqc2w4MTEgPSBoY2RfdG9fc2w4MTEoaGNkKTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJZGVsX3RpbWVyX3N5bmMoJmhjZC0+cmhfdGltZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNsODExLT5sb2NrLCBmbGFncyk7CisJcG9ydF9wb3dlcihzbDgxMSwgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2w4MTEtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludAorc2w4MTFoX3N0YXJ0KHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IHNsODExCQkqc2w4MTEgPSBoY2RfdG9fc2w4MTEoaGNkKTsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKKworCS8qIGNoaXAgaGFzIGJlZW4gcmVzZXQsIFZCVVMgcG93ZXIgaXMgb2ZmICovCisKKwl1ZGV2ID0gdXNiX2FsbG9jX2RldihOVUxMLCAmaGNkLT5zZWxmLCAwKTsKKwlpZiAoIXVkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJdWRldi0+c3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKKwloY2QtPnN0YXRlID0gSENfU1RBVEVfUlVOTklORzsKKworCWlmIChzbDgxMS0+Ym9hcmQpCisJCWhjZC0+Y2FuX3dha2V1cCA9IHNsODExLT5ib2FyZC0+Y2FuX3dha2V1cDsKKworCWlmICh1c2JfaGNkX3JlZ2lzdGVyX3Jvb3RfaHViKHVkZXYsIGhjZCkgIT0gMCkgeworCQl1c2JfcHV0X2Rldih1ZGV2KTsKKwkJc2w4MTFoX3N0b3AoaGNkKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHNsODExLT5ib2FyZCAmJiBzbDgxMS0+Ym9hcmQtPnBvd2VyKQorCQlodWJfc2V0X3Bvd2VyX2J1ZGdldCh1ZGV2LCBzbDgxMS0+Ym9hcmQtPnBvd2VyICogMik7CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCBoY19kcml2ZXIgc2w4MTFoX2hjX2RyaXZlciA9IHsKKwkuZGVzY3JpcHRpb24gPQkJaGNkX25hbWUsCisJLmhjZF9wcml2X3NpemUgPQlzaXplb2Yoc3RydWN0IHNsODExKSwKKworCS8qCisJICogZ2VuZXJpYyBoYXJkd2FyZSBsaW5rYWdlCisJICovCisJLmlycSA9CQkJc2w4MTFoX2lycSwKKwkuZmxhZ3MgPQkJSENEX1VTQjExIHwgSENEX01FTU9SWSwKKworCS8qIEJhc2ljIGxpZmVjeWNsZSBvcGVyYXRpb25zICovCisJLnN0YXJ0ID0JCXNsODExaF9zdGFydCwKKwkuc3RvcCA9CQkJc2w4MTFoX3N0b3AsCisKKwkvKgorCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCisJICovCisJLnVyYl9lbnF1ZXVlID0JCXNsODExaF91cmJfZW5xdWV1ZSwKKwkudXJiX2RlcXVldWUgPQkJc2w4MTFoX3VyYl9kZXF1ZXVlLAorCS5lbmRwb2ludF9kaXNhYmxlID0Jc2w4MTFoX2VuZHBvaW50X2Rpc2FibGUsCisKKwkvKgorCSAqIHBlcmlvZGljIHNjaGVkdWxlIHN1cHBvcnQKKwkgKi8KKwkuZ2V0X2ZyYW1lX251bWJlciA9CXNsODExaF9nZXRfZnJhbWUsCisKKwkvKgorCSAqIHJvb3QgaHViIHN1cHBvcnQKKwkgKi8KKwkuaHViX3N0YXR1c19kYXRhID0Jc2w4MTFoX2h1Yl9zdGF0dXNfZGF0YSwKKwkuaHViX2NvbnRyb2wgPQkJc2w4MTFoX2h1Yl9jb250cm9sLAorCS5odWJfc3VzcGVuZCA9CQlzbDgxMWhfaHViX3N1c3BlbmQsCisJLmh1Yl9yZXN1bWUgPQkJc2w4MTFoX2h1Yl9yZXN1bWUsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IF9faW5pdF9vcl9tb2R1bGUKK3NsODExaF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNsODExCQkqc2w4MTEgPSBoY2RfdG9fc2w4MTEoaGNkKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2OworCXN0cnVjdCByZXNvdXJjZQkJKnJlczsKKworCXBkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCisJcmVtb3ZlX2RlYnVnX2ZpbGUoc2w4MTEpOworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisKKwlpb3VubWFwKHNsODExLT5kYXRhX3JlZyk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgMSk7CisKKwlpb3VubWFwKHNsODExLT5hZGRyX3JlZyk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgMSk7CisKKwl1c2JfcHV0X2hjZChoY2QpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIHJlc291cmNlX2xlbihyKSAoKChyKS0+ZW5kIC0gKHIpLT5zdGFydCkgKyAxKQorCitzdGF0aWMgaW50IF9faW5pdAorc2w4MTFoX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKKwlzdHJ1Y3Qgc2w4MTEJCSpzbDgxMTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2OworCXN0cnVjdCByZXNvdXJjZQkJKmFkZHIsICpkYXRhOworCWludAkJCWlycTsKKwl2b2lkIF9faW9tZW0JCSphZGRyX3JlZzsKKwl2b2lkIF9faW9tZW0JCSpkYXRhX3JlZzsKKwlpbnQJCQlyZXR2YWw7CisJdTgJCQl0bXA7CisKKwkvKiBiYXNpYyBzYW5pdHkgY2hlY2tzIGZpcnN0LiAgYm9hcmQtc3BlY2lmaWMgaW5pdCBsb2dpYyBzaG91bGQKKwkgKiBoYXZlIGluaXRpYWxpemVkIHRoZXNlIHRocmVlIHJlc291cmNlcyBhbmQgcHJvYmFibHkgYm9hcmQKKwkgKiBzcGVjaWZpYyBwbGF0Zm9ybV9kYXRhLiAgd2UgZG9uJ3QgcHJvYmUgZm9yIElSUXMsIGFuZCBkbyBvbmx5CisJICogbWluaW1hbCBzYW5pdHkgY2hlY2tpbmcuCisJICovCisJcGRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7CisJaWYgKHBkZXYtPm51bV9yZXNvdXJjZXMgPCAzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWFkZHIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWRhdGEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKCFhZGRyIHx8ICFkYXRhIHx8IGlycSA8IDApCisJCXJldHVybiAtRU5PREVWOworCisJLyogcmVmdXNlIHRvIGNvbmZ1c2UgdXNiY29yZSAqLworCWlmIChkZXYtPmRtYV9tYXNrKSB7CisJCURCRygibm8gd2Ugd29uJ3QgZG1hXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oYWRkci0+c3RhcnQsIDEsIGhjZF9uYW1lKSkgeworCQlyZXR2YWwgPSAtRUJVU1k7CisJCWdvdG8gZXJyMTsKKwl9CisJYWRkcl9yZWcgPSBpb3JlbWFwKGFkZHItPnN0YXJ0LCByZXNvdXJjZV9sZW4oYWRkcikpOworCWlmIChhZGRyX3JlZyA9PSBOVUxMKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMjsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihkYXRhLT5zdGFydCwgMSwgaGNkX25hbWUpKSB7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBlcnIzOworCX0KKwlkYXRhX3JlZyA9IGlvcmVtYXAoZGF0YS0+c3RhcnQsIHJlc291cmNlX2xlbihhZGRyKSk7CisJaWYgKGRhdGFfcmVnID09IE5VTEwpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnI0OworCX0KKworCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGhjZCAqLworCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZzbDgxMWhfaGNfZHJpdmVyLCBkZXYsIGRldi0+YnVzX2lkKTsKKwlpZiAoIWhjZCkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjU7CisJfQorCWhjZC0+cnNyY19zdGFydCA9IGFkZHItPnN0YXJ0OworCXNsODExID0gaGNkX3RvX3NsODExKGhjZCk7CisKKwlzcGluX2xvY2tfaW5pdCgmc2w4MTEtPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZzbDgxMS0+YXN5bmMpOworCXNsODExLT5ib2FyZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlpbml0X3RpbWVyKCZzbDgxMS0+dGltZXIpOworCXNsODExLT50aW1lci5mdW5jdGlvbiA9IHNsODExaF90aW1lcjsKKwlzbDgxMS0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBzbDgxMTsKKwlzbDgxMS0+YWRkcl9yZWcgPSBhZGRyX3JlZzsKKwlzbDgxMS0+ZGF0YV9yZWcgPSBkYXRhX3JlZzsKKworCXNwaW5fbG9ja19pcnEoJnNsODExLT5sb2NrKTsKKwlwb3J0X3Bvd2VyKHNsODExLCAwKTsKKwlzcGluX3VubG9ja19pcnEoJnNsODExLT5sb2NrKTsKKwltc2xlZXAoMjAwKTsKKworCXRtcCA9IHNsODExX3JlYWQoc2w4MTEsIFNMMTFIX0hXUkVWUkVHKTsKKwlzd2l0Y2ggKHRtcCA+PiA0KSB7CisJY2FzZSAxOgorCQloY2QtPnByb2R1Y3RfZGVzYyA9ICJTTDgxMUhTIHYxLjIiOworCQlicmVhazsKKwljYXNlIDI6CisJCWhjZC0+cHJvZHVjdF9kZXNjID0gIlNMODExSFMgdjEuNSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIHJlamVjdCBjYXNlIDAsIFNMMTFTIGlzIGxlc3MgZnVuY3Rpb25hbCAqLworCQlEQkcoImNoaXByZXYgJTAyeFxuIiwgdG1wKTsKKwkJcmV0dmFsID0gLUVOWElPOworCQlnb3RvIGVycjY7CisJfQorCisJLyogc2w4MTFzIHdvdWxkIG5lZWQgYSBkaWZmZXJlbnQgaGFuZGxlciBmb3IgdGhpcyBpcnEgKi8KKyNpZmRlZglDT05GSUdfQVJNCisJLyogQ3lwcmVzcyBkb2NzIHNheSB0aGUgSVJRIGlzIElSUVRfSElHSCAuLi4gKi8KKwlzZXRfaXJxX3R5cGUoaXJxLCBJUlFUX1JJU0lORyk7CisjZW5kaWYKKwlyZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgU0FfSU5URVJSVVBUKTsKKwlpZiAocmV0dmFsICE9IDApCisJCWdvdG8gZXJyNjsKKworCWNyZWF0ZV9kZWJ1Z19maWxlKHNsODExKTsKKwlyZXR1cm4gcmV0dmFsOworCisgZXJyNjoKKwl1c2JfcHV0X2hjZChoY2QpOworIGVycjU6CisJaW91bm1hcChkYXRhX3JlZyk7CisgZXJyNDoKKwlyZWxlYXNlX21lbV9yZWdpb24oZGF0YS0+c3RhcnQsIDEpOworIGVycjM6CisJaW91bm1hcChhZGRyX3JlZyk7CisgZXJyMjoKKwlyZWxlYXNlX21lbV9yZWdpb24oYWRkci0+c3RhcnQsIDEpOworIGVycjE6CisJREJHKCJpbml0IGVycm9yLCAlZFxuIiwgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisjaWZkZWYJQ09ORklHX1BNCisKKy8qIGZvciB0aGlzIGRldmljZSB0aGVyZSdzIG5vIHVzZWZ1bCBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBjb250cm9sbGVyCisgKiBhbmQgaXRzIHJvb3QgaHViLCBleGNlcHQgdGhhdCB0aGUgcm9vdCBodWIgb25seSBnZXRzIGRpcmVjdCBQTSBjYWxscyAKKyAqIHdoZW4gQ09ORklHX1VTQl9TVVNQRU5EIGlzIGVuYWJsZWQuCisgKi8KKworc3RhdGljIGludAorc2w4MTFoX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUsIHUzMiBwaGFzZSkKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNsODExCSpzbDgxMSA9IGhjZF90b19zbDgxMShoY2QpOworCWludAkJcmV0dmFsID0gMDsKKworCWlmIChwaGFzZSAhPSBTVVNQRU5EX1BPV0VSX0RPV04pCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAoc3RhdGUgPD0gUE1fU1VTUEVORF9NRU0pCisJCXJldHZhbCA9IHNsODExaF9odWJfc3VzcGVuZChoY2QpOworCWVsc2UKKwkJcG9ydF9wb3dlcihzbDgxMSwgMCk7CisJaWYgKHJldHZhbCA9PSAwKQorCQlkZXYtPnBvd2VyLnBvd2VyX3N0YXRlID0gc3RhdGU7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludAorc2w4MTFoX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBwaGFzZSkKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNsODExCSpzbDgxMSA9IGhjZF90b19zbDgxMShoY2QpOworCisJaWYgKHBoYXNlICE9IFJFU1VNRV9QT1dFUl9PTikKKwkJcmV0dXJuIDA7CisKKwkvKiB3aXRoIG5vICJjaGVjayB0byBzZWUgaWYgVkJVUyBpcyBzdGlsbCBwb3dlcmVkIiBib2FyZCBob29rLAorCSAqIGxldCdzIGFzc3VtZSBpdCdkIG9ubHkgYmUgcG93ZXJlZCB0byBlbmFibGUgcmVtb3RlIHdha2V1cC4KKwkgKi8KKwlpZiAoZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA+IFBNX1NVU1BFTkRfTUVNCisJCQl8fCAhaGNkLT5jYW5fd2FrZXVwKSB7CisJCXNsODExLT5wb3J0MSA9IDA7CisJCXBvcnRfcG93ZXIoc2w4MTEsIDEpOworCQlyZXR1cm4gMDsKKwl9CisKKwlkZXYtPnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKKwlyZXR1cm4gc2w4MTFoX2h1Yl9yZXN1bWUoaGNkKTsKK30KKworI2Vsc2UKKworI2RlZmluZQlzbDgxMWhfc3VzcGVuZAlOVUxMCisjZGVmaW5lCXNsODExaF9yZXN1bWUJTlVMTAorCisjZW5kaWYKKworCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2w4MTFoX2RyaXZlciA9IHsKKwkubmFtZSA9CQkoY2hhciAqKSBoY2RfbmFtZSwKKwkuYnVzID0JCSZwbGF0Zm9ybV9idXNfdHlwZSwKKworCS5wcm9iZSA9CXNsODExaF9wcm9iZSwKKwkucmVtb3ZlID0Jc2w4MTFoX3JlbW92ZSwKKworCS5zdXNwZW5kID0Jc2w4MTFoX3N1c3BlbmQsCisJLnJlc3VtZSA9CXNsODExaF9yZXN1bWUsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorc3RhdGljIGludCBfX2luaXQgc2w4MTFoX2luaXQodm9pZCkgCit7CisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCUlORk8oImRyaXZlciAlcywgJXNcbiIsIGhjZF9uYW1lLCBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmc2w4MTFoX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChzbDgxMWhfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzbDgxMWhfY2xlYW51cCh2b2lkKSAKK3sJCisJZHJpdmVyX3VucmVnaXN0ZXIoJnNsODExaF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoc2w4MTFoX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS5oIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2OTBkOTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLmgKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBTTDgxMUhTIHJlZ2lzdGVyIGRlY2xhcmF0aW9ucyBhbmQgSENEIGRhdGEgc3RydWN0dXJlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBQc2lvbiBUZWtsb2dpeAorICogQ29weXJpZ2h0IChDKSAyMDA0IERhdmlkIEJyb3duZWxsCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgQ3lwcmVzcyBTZW1pY29uZHVjdG9yIEluYy4gCisgKi8KKworLyoKKyAqIFNMODExSFMgaGFzIHRyYW5zZmVyIHJlZ2lzdGVycywgYW5kIGNvbnRyb2wgcmVnaXN0ZXJzLiAgSW4gaG9zdC9tYXN0ZXIKKyAqIG1vZGUgb25lIHNldCBvZiByZWdpc3RlcnMgaXMgdXNlZDsgaW4gcGVyaXBoZXJhbC9zbGF2ZSBtb2RlLCBhbm90aGVyLgorICogIC0gU0wxMUggb25seSBoYXMgc29tZSAiQSIgdHJhbnNmZXIgcmVnaXN0ZXJzIGZyb20gMHgwMC0weDA0CisgKiAgLSBTTDgxMUhTIGFsc28gaGFzICJCIiByZWdpc3RlcnMgZnJvbSAweDA4LTB4MGMKKyAqICAtIFNMODExUyAob3IgSFMgaW4gc2xhdmUgbW9kZSkgaGFzIGZvdXIgQStCIHNldHMsIGF0IDAwLCAxMCwgMjAsIDMwCisgKi8KKworI2RlZmluZSBTTDgxMV9FUF9BKGJhc2UpCSgoYmFzZSkgKyAwKQorI2RlZmluZSBTTDgxMV9FUF9CKGJhc2UpCSgoYmFzZSkgKyA4KQorCisjZGVmaW5lIFNMODExX0hPU1RfQlVGCQkweDAwCisjZGVmaW5lIFNMODExX1BFUklQSF9FUDAJMHgwMAorI2RlZmluZSBTTDgxMV9QRVJJUEhfRVAxCTB4MTAKKyNkZWZpbmUgU0w4MTFfUEVSSVBIX0VQMgkweDIwCisjZGVmaW5lIFNMODExX1BFUklQSF9FUDMJMHgzMAorCisKKy8qIFRSQU5TRkVSIFJFR0lTVEVSUzogIGhvc3QgYW5kIHBlcmlwaGVyYWwgc2lkZXMgYXJlIHNpbWlsYXIKKyAqIGV4Y2VwdCBmb3IgdGhlIGNvbnRyb2wgbW9kZWxzIChtYXN0ZXIgdnMgc2xhdmUpLgorICovCisjZGVmaW5lIFNMMTFIX0hPU1RDVExSRUcJMAorIwlkZWZpbmUgU0wxMUhfSENUTE1BU0tfQVJNCTB4MDEKKyMJZGVmaW5lIFNMMTFIX0hDVExNQVNLX0VOQUJMRQkweDAyCisjCWRlZmluZSBTTDExSF9IQ1RMTUFTS19JTgkweDAwCisjCWRlZmluZSBTTDExSF9IQ1RMTUFTS19PVVQJMHgwNAorIwlkZWZpbmUgU0wxMUhfSENUTE1BU0tfSVNPQ0gJMHgxMAorIwlkZWZpbmUgU0wxMUhfSENUTE1BU0tfQUZURVJTT0YJMHgyMAorIwlkZWZpbmUgU0wxMUhfSENUTE1BU0tfVE9HR0xFCTB4NDAKKyMJZGVmaW5lIFNMMTFIX0hDVExNQVNLX1BSRUFNQkxFCTB4ODAKKyNkZWZpbmUgU0wxMUhfQlVGQUREUlJFRwkxCisjZGVmaW5lIFNMMTFIX0JVRkxOVEhSRUcJMgorI2RlZmluZSBTTDExSF9QS1RTVEFUUkVHCTMJLyogcmVhZCAqLworIwlkZWZpbmUgU0wxMUhfU1RBVE1BU0tfQUNLCTB4MDEKKyMJZGVmaW5lIFNMMTFIX1NUQVRNQVNLX0VSUk9SCTB4MDIKKyMJZGVmaW5lIFNMMTFIX1NUQVRNQVNLX1RNT1VUCTB4MDQKKyMJZGVmaW5lIFNMMTFIX1NUQVRNQVNLX1NFUQkweDA4CisjCWRlZmluZSBTTDExSF9TVEFUTUFTS19TRVRVUAkweDEwCisjCWRlZmluZSBTTDExSF9TVEFUTUFTS19PVkYJMHgyMAorIwlkZWZpbmUgU0wxMUhfU1RBVE1BU0tfTkFLCTB4NDAKKyMJZGVmaW5lIFNMMTFIX1NUQVRNQVNLX1NUQUxMCTB4ODAKKyNkZWZpbmUgU0wxMUhfUElERVBSRUcJCTMJLyogd3JpdGUgKi8KKyMJZGVmaW5lCVNMX1NFVFVQCTB4ZDAKKyMJZGVmaW5lCVNMX0lOCQkweDkwCisjCWRlZmluZQlTTF9PVVQJCTB4MTAKKyMJZGVmaW5lCVNMX1NPRgkJMHg1MAorIwlkZWZpbmUJU0xfUFJFQU1CTEUJMHhjMAorIwlkZWZpbmUJU0xfTkFLCQkweGEwCisjCWRlZmluZQlTTF9TVEFMTAkweGUwCisjCWRlZmluZQlTTF9EQVRBMAkweDMwCisjCWRlZmluZQlTTF9EQVRBMQkweGIwCisjZGVmaW5lIFNMMTFIX1hGRVJDTlRSRUcJNAkvKiByZWFkICovCisjZGVmaW5lIFNMMTFIX0RFVkFERFJSRUcJNAkvKiB3cml0ZSAqLworCisKKy8qIENPTlRST0wgUkVHSVNURVJTOiAgaG9zdCBhbmQgcGVyaXBoZXJhbCBhcmUgdmVyeSBkaWZmZXJlbnQuCisgKi8KKyNkZWZpbmUgU0wxMUhfQ1RMUkVHMQkJNQorIwlkZWZpbmUgU0wxMUhfQ1RMMU1BU0tfU09GX0VOQQkweDAxCisjCWRlZmluZSBTTDExSF9DVEwxTUFTS19GT1JDRQkweDE4CisjCQlkZWZpbmUgU0wxMUhfQ1RMMU1BU0tfTk9STUFMCTB4MDAKKyMJCWRlZmluZSBTTDExSF9DVEwxTUFTS19TRTAJMHgwOAkvKiByZXNldCAqLworIwkJZGVmaW5lIFNMMTFIX0NUTDFNQVNLX0oJCTB4MTAKKyMJCWRlZmluZSBTTDExSF9DVEwxTUFTS19LCQkweDE4CS8qIHJlc3VtZSAqLworIwlkZWZpbmUgU0wxMUhfQ1RMMU1BU0tfTFNQRAkweDIwCisjCWRlZmluZSBTTDExSF9DVEwxTUFTS19TVVNQRU5ECTB4NDAKKyNkZWZpbmUgU0wxMUhfSVJRX0VOQUJMRQk2CisjCWRlZmluZSBTTDExSF9JTlRNQVNLX0RPTkVfQQkweDAxCisjCWRlZmluZSBTTDExSF9JTlRNQVNLX0RPTkVfQgkweDAyCisjCWRlZmluZSBTTDExSF9JTlRNQVNLX1NPRklOVFIJMHgxMAorIwlkZWZpbmUgU0wxMUhfSU5UTUFTS19JTlNSTVYJMHgyMAkvKiB0by9mcm9tIFNFMCAqLworIwlkZWZpbmUgU0wxMUhfSU5UTUFTS19SRAkJMHg0MAorIwlkZWZpbmUgU0wxMUhfSU5UTUFTS19EUAkJMHg4MAkvKiBvbmx5IGluIElOVFNUQVRSRUcgKi8KKyNkZWZpbmUgU0wxMVNfQUREUkVTUwkJNworCisvKiAweDA4LTB4MGMgYXJlIGZvciB0aGUgQiBidWZmZXIgKG5vdCBpbiBTTDExKSAqLworCisjZGVmaW5lIFNMMTFIX0lSUV9TVEFUVVMJMHgwRAkvKiB3cml0ZSB0byBhY2sgKi8KKyNkZWZpbmUgU0wxMUhfSFdSRVZSRUcJCTB4MEUJLyogcmVhZCAqLworIwlkZWZpbmUgU0wxMUhfSFdSTUFTS19IV1JFVgkweEYwCisjZGVmaW5lIFNMMTFIX1NPRkxPV1JFRwkJMHgwRQkvKiB3cml0ZSAqLworI2RlZmluZSBTTDExSF9TT0ZUTVJSRUcJCTB4MEYJLyogcmVhZCAqLworCisvKiBhIHdyaXRlIHRvIHRoaXMgcmVnaXN0ZXIgZW5hYmxlcyBTTDgxMUhTIGZlYXR1cmVzLgorICogSE9TVCBmbGFnIHByZXN1bWFibHkgb3ZlcnJpZGVzIHRoZSBjaGlwIGlucHV0IHNpZ25hbD8KKyAqLworI2RlZmluZSBTTDgxMUhTX0NUTFJFRzIJCTB4MEYKKyMJZGVmaW5lIFNMODExSFNfQ1RMMk1BU0tfU09GX01BU0sJMHgzRgorIwlkZWZpbmUgU0w4MTFIU19DVEwyTUFTS19EU1dBUAkJMHg0MAorIwlkZWZpbmUgU0w4MTFIU19DVEwyTUFTS19IT1NUCQkweDgwCisKKyNkZWZpbmUgU0w4MTFIU19DVEwyX0lOSVQJKFNMODExSFNfQ1RMMk1BU0tfSE9TVCB8IDB4MmUpCisKKworLyogREFUQSBCVUZGRVJTOiByZWdpc3RlcnMgZnJvbSAweDEwLi4weGZmIGFyZSBmb3IgZGF0YSBidWZmZXJzOworICogdGhhdCdzIDI0MCBieXRlcywgd2hpY2ggd2UnbGwgc3BsaXQgZXZlbmx5IGJldHdlZW4gQSBhbmQgQiBzaWRlcy4KKyAqIE9ubHkgSVNPIGNhbiB1c2UgbW9yZSB0aGFuIDY0IGJ5dGVzIHBlciBwYWNrZXQuCisgKiAoVGhlIFNMMTFTIGhhcyAweDQwLi4weGZmIGZvciBidWZmZXJzLikKKyAqLworI2RlZmluZSBIX01BWFBBQ0tFVAkxMjAJCS8qIGJ5dGVzIGluIEEgb3IgQiBmaWZvcyAqLworCisjZGVmaW5lIFNMMTFIX0RBVEFfU1RBUlQJMHgxMAorI2RlZmluZQlTTDgxMUhTX1BBQ0tFVF9CVUYoaXNfYSkJKChpc19hKSBcCisJCT8gU0wxMUhfREFUQV9TVEFSVCBcCisJCTogKFNMMTFIX0RBVEFfU1RBUlQgKyBIX01BWFBBQ0tFVCkpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUJTE9HMl9QRVJJT0RJQ19TSVpFCTUJLyogYXJiaXRyYXJ5OyB0aGlzIG1hdGNoZXMgT0hDSSAqLworI2RlZmluZQlQRVJJT0RJQ19TSVpFCQkoMSA8PCBMT0cyX1BFUklPRElDX1NJWkUpCisKK3N0cnVjdCBzbDgxMSB7CisJc3BpbmxvY2tfdAkJbG9jazsKKwl2b2lkIF9faW9tZW0JCSphZGRyX3JlZzsKKwl2b2lkIF9faW9tZW0JCSpkYXRhX3JlZzsKKwlzdHJ1Y3Qgc2w4MTFfcGxhdGZvcm1fZGF0YQkqYm9hcmQ7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5CSpwZGU7CisKKwl1bnNpZ25lZCBsb25nCQlzdGF0X2luc3JtdjsKKwl1bnNpZ25lZCBsb25nCQlzdGF0X3dha2U7CisJdW5zaWduZWQgbG9uZwkJc3RhdF9zb2Y7CisJdW5zaWduZWQgbG9uZwkJc3RhdF9hOworCXVuc2lnbmVkIGxvbmcJCXN0YXRfYjsKKwl1bnNpZ25lZCBsb25nCQlzdGF0X2xvc3Q7CisJdW5zaWduZWQgbG9uZwkJc3RhdF9vdmVycnVuOworCisJLyogc3cgbW9kZWwgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsKKwlzdHJ1Y3Qgc2w4MTFoX2VwCSpuZXh0X3BlcmlvZGljOworCXN0cnVjdCBzbDgxMWhfZXAJKm5leHRfYXN5bmM7CisKKwlzdHJ1Y3Qgc2w4MTFoX2VwCSphY3RpdmVfYTsKKwl1bnNpZ25lZCBsb25nCQlqaWZmaWVzX2E7CisJc3RydWN0IHNsODExaF9lcAkqYWN0aXZlX2I7CisJdW5zaWduZWQgbG9uZwkJamlmZmllc19iOworCisJdTMyCQkJcG9ydDE7CisJdTgJCQljdHJsMSwgY3RybDIsIGlycV9lbmFibGU7CisJdTE2CQkJZnJhbWU7CisKKwkvKiBhc3luYyBzY2hlZHVsZTogY29udHJvbCwgYnVsayAqLworCXN0cnVjdCBsaXN0X2hlYWQJYXN5bmM7CisKKwkvKiBwZXJpb2RpYyBzY2hlZHVsZTogaW50ZXJydXB0LCBpc28gKi8KKwl1MTYJCQlsb2FkW1BFUklPRElDX1NJWkVdOworCXN0cnVjdCBzbDgxMWhfZXAJKnBlcmlvZGljW1BFUklPRElDX1NJWkVdOworCXVuc2lnbmVkCQlwZXJpb2RpY19jb3VudDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNsODExICpoY2RfdG9fc2w4MTEoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlyZXR1cm4gKHN0cnVjdCBzbDgxMSAqKSAoaGNkLT5oY2RfcHJpdik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9oY2QgKnNsODExX3RvX2hjZChzdHJ1Y3Qgc2w4MTEgKnNsODExKQoreworCXJldHVybiBjb250YWluZXJfb2YoKHZvaWQgKikgc2w4MTEsIHN0cnVjdCB1c2JfaGNkLCBoY2RfcHJpdik7Cit9CisKK3N0cnVjdCBzbDgxMWhfZXAgeworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqaGVwOworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OworCisJdTgJCQlkZWZjdHJsOworCXU4CQkJbWF4cGFja2V0OworCXU4CQkJZXBudW07CisJdTgJCQluZXh0cGlkOworCisJdTE2CQkJZXJyb3JfY291bnQ7CisJdTE2CQkJbmFrX2NvdW50OworCXUxNgkJCWxlbmd0aDsJCS8qIG9mIGN1cnJlbnQgcGFja2V0ICovCisKKwkvKiBwZXJpb2RpYyBzY2hlZHVsZSAqLworCXUxNgkJCXBlcmlvZDsKKwl1MTYJCQlicmFuY2g7CisJdTE2CQkJbG9hZDsKKwlzdHJ1Y3Qgc2w4MTFoX2VwCSpuZXh0OworCisJLyogYXN5bmMgc2NoZWR1bGUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXNjaGVkdWxlOworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVGhlc2UgcmVnaXN0ZXIgdXRpbGl0aWVzIHNob3VsZCB3b3JrIGZvciB0aGUgU0w4MTFTIHJlZ2lzdGVyIEFQSSB0b28KKyAqIE5PVEU6ICBjYWxsZXIgbXVzdCBob2xkIHNsODExLT5sb2NrLgorICovCisKK3N0YXRpYyBpbmxpbmUgdTggc2w4MTFfcmVhZChzdHJ1Y3Qgc2w4MTEgKnNsODExLCBpbnQgcmVnKQoreworCXdyaXRlYihyZWcsIHNsODExLT5hZGRyX3JlZyk7CisJcmV0dXJuIHJlYWRiKHNsODExLT5kYXRhX3JlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbDgxMV93cml0ZShzdHJ1Y3Qgc2w4MTEgKnNsODExLCBpbnQgcmVnLCB1OCB2YWwpCit7CisJd3JpdGViKHJlZywgc2w4MTEtPmFkZHJfcmVnKTsKKwl3cml0ZWIodmFsLCBzbDgxMS0+ZGF0YV9yZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NsODExX3dyaXRlX2J1ZihzdHJ1Y3Qgc2w4MTEgKnNsODExLCBpbnQgYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCit7CisJY29uc3QgdTgJKmRhdGE7CisJdm9pZCBfX2lvbWVtCSpkYXRhX3JlZzsKKworCWlmICghY291bnQpCisJCXJldHVybjsKKwl3cml0ZWIoYWRkciwgc2w4MTEtPmFkZHJfcmVnKTsKKworCWRhdGEgPSBidWY7CisJZGF0YV9yZWcgPSBzbDgxMS0+ZGF0YV9yZWc7CisJZG8geworCQl3cml0ZWIoKmRhdGErKywgZGF0YV9yZWcpOworCX0gd2hpbGUgKC0tY291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NsODExX3JlYWRfYnVmKHN0cnVjdCBzbDgxMSAqc2w4MTEsIGludCBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1OCAJCSpkYXRhOworCXZvaWQgX19pb21lbQkqZGF0YV9yZWc7CisKKwlpZiAoIWNvdW50KQorCQlyZXR1cm47CisJd3JpdGViKGFkZHIsIHNsODExLT5hZGRyX3JlZyk7CisKKwlkYXRhID0gYnVmOworCWRhdGFfcmVnID0gc2w4MTEtPmRhdGFfcmVnOworCWRvIHsKKwkJKmRhdGErKyA9IHJlYWRiKGRhdGFfcmVnKTsKKwl9IHdoaWxlICgtLWNvdW50KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERCRyhzdHVmZi4uLikJCXByaW50ayhLRVJOX0RFQlVHICJzbDgxMTogIiBzdHVmZikKKyNlbHNlCisjZGVmaW5lIERCRyhzdHVmZi4uLikJCWRve313aGlsZSgwKQorI2VuZGlmCisKKyNpZmRlZiBWRVJCT1NFCisjICAgIGRlZmluZSBWREJHCQlEQkcKKyNlbHNlCisjICAgIGRlZmluZSBWREJHKHN0dWZmLi4uKQlkb3t9d2hpbGUoMCkKKyNlbmRpZgorCisjaWZkZWYgUEFDS0VUX1RSQUNFCisjICAgIGRlZmluZSBQQUNLRVQJCVZEQkcKKyNlbHNlCisjICAgIGRlZmluZSBQQUNLRVQoc3R1ZmYuLi4pCWRve313aGlsZSgwKQorI2VuZGlmCisKKyNkZWZpbmUgRVJSKHN0dWZmLi4uKQkJcHJpbnRrKEtFUk5fRVJSICJzbDgxMTogIiBzdHVmZikKKyNkZWZpbmUgV0FSTihzdHVmZi4uLikJCXByaW50ayhLRVJOX1dBUk5JTkcgInNsODExOiAiIHN0dWZmKQorI2RlZmluZSBJTkZPKHN0dWZmLi4uKQkJcHJpbnRrKEtFUk5fSU5GTyAic2w4MTE6ICIgc3R1ZmYpCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWRlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRjNzNjNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jCkBAIC0wLDAgKzEsNTg3IEBACisvKgorICogVUhDSS1zcGVjaWZpYyBkZWJ1Z2dpbmcgY29kZS4gSW52YWx1YWJsZSB3aGVuIHNvbWV0aGluZworICogZ29lcyB3cm9uZywgYnV0IGRvbid0IGdldCBpbiBteSBmYWNlLgorICoKKyAqIEtlcm5lbCB2aXNpYmxlIHBvaW50ZXJzIGFyZSBzdXJyb3VuZGVkIGluIFtdJ3MgYW5kIGJ1cworICogdmlzaWJsZSBwb2ludGVycyBhcmUgc3Vycm91bmRlZCBpbiAoKSdzCisgKgorICogKEMpIENvcHlyaWdodCAxOTk5IExpbnVzIFRvcnZhbGRzCisgKiAoQykgQ29weXJpZ2h0IDE5OTktMjAwMSBKb2hhbm5lcyBFcmRmZWx0CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSAidWhjaS1oY2QuaCIKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKnVoY2lfZGVidWdmc19yb290ID0gTlVMTDsKKworLyogSGFuZGxlIFJFQUxMWSBsYXJnZSBwcmludGsncyBzbyB3ZSBkb24ndCBvdmVyZmxvdyBidWZmZXJzICovCitzdGF0aWMgaW5saW5lIHZvaWQgbHByaW50ayhjaGFyICpidWYpCit7CisJY2hhciAqcDsKKworCS8qIEp1c3Qgd3JpdGUgb25lIGxpbmUgYXQgYSB0aW1lICovCisJd2hpbGUgKGJ1ZikgeworCQlwID0gc3RyY2hyKGJ1ZiwgJ1xuJyk7CisJCWlmIChwKQorCQkJKnAgPSAwOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXNcbiIsIGJ1Zik7CisJCWJ1ZiA9IHA7CisJCWlmIChidWYpCisJCQlidWYrKzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdWhjaV9zaG93X3RkKHN0cnVjdCB1aGNpX3RkICp0ZCwgY2hhciAqYnVmLCBpbnQgbGVuLCBpbnQgc3BhY2UpCit7CisJY2hhciAqb3V0ID0gYnVmOworCWNoYXIgKnNwaWQ7CisJdTMyIHN0YXR1cywgdG9rZW47CisKKwkvKiBUcnkgdG8gbWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIG1lbW9yeSAqLworCWlmIChsZW4gPCAxNjApCisJCXJldHVybiAwOworCisJc3RhdHVzID0gdGRfc3RhdHVzKHRkKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnNbJXBdIGxpbmsgKCUwOHgpICIsIHNwYWNlLCAiIiwgdGQsIGxlMzJfdG9fY3B1KHRkLT5saW5rKSk7CisJb3V0ICs9IHNwcmludGYob3V0LCAiZSVkICVzJXMlcyVzJXMlcyVzJXMlcyVzTGVuZ3RoPSV4ICIsCisJCSgoc3RhdHVzID4+IDI3KSAmIDMpLAorCQkoc3RhdHVzICYgVERfQ1RSTF9TUEQpID8gICAgICAiU1BEICIgOiAiIiwKKwkJKHN0YXR1cyAmIFREX0NUUkxfTFMpID8gICAgICAgIkxTICIgOiAiIiwKKwkJKHN0YXR1cyAmIFREX0NUUkxfSU9DKSA/ICAgICAgIklPQyAiIDogIiIsCisJCShzdGF0dXMgJiBURF9DVFJMX0FDVElWRSkgPyAgICJBY3RpdmUgIiA6ICIiLAorCQkoc3RhdHVzICYgVERfQ1RSTF9TVEFMTEVEKSA/ICAiU3RhbGxlZCAiIDogIiIsCisJCShzdGF0dXMgJiBURF9DVFJMX0RCVUZFUlIpID8gICJEYXRhQnVmRXJyICIgOiAiIiwKKwkJKHN0YXR1cyAmIFREX0NUUkxfQkFCQkxFKSA/ICAgIkJhYmJsZSAiIDogIiIsCisJCShzdGF0dXMgJiBURF9DVFJMX05BSykgPyAgICAgICJOQUsgIiA6ICIiLAorCQkoc3RhdHVzICYgVERfQ1RSTF9DUkNUSU1FTykgPyAiQ1JDL1RpbWVvICIgOiAiIiwKKwkJKHN0YXR1cyAmIFREX0NUUkxfQklUU1RVRkYpID8gIkJpdFN0dWZmICIgOiAiIiwKKwkJc3RhdHVzICYgMHg3ZmYpOworCisJdG9rZW4gPSB0ZF90b2tlbih0ZCk7CisJc3dpdGNoICh1aGNpX3BhY2tldGlkKHRva2VuKSkgeworCQljYXNlIFVTQl9QSURfU0VUVVA6CisJCQlzcGlkID0gIlNFVFVQIjsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QSURfT1VUOgorCQkJc3BpZCA9ICJPVVQiOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BJRF9JTjoKKwkJCXNwaWQgPSAiSU4iOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzcGlkID0gIj8iOworCQkJYnJlYWs7CisJfQorCisJb3V0ICs9IHNwcmludGYob3V0LCAiTWF4TGVuPSV4IERUJWQgRW5kUHQ9JXggRGV2PSV4LCBQSUQ9JXgoJXMpICIsCisJCXRva2VuID4+IDIxLAorCQkoKHRva2VuID4+IDE5KSAmIDEpLAorCQkodG9rZW4gPj4gMTUpICYgMTUsCisJCSh0b2tlbiA+PiA4KSAmIDEyNywKKwkJKHRva2VuICYgMHhmZiksCisJCXNwaWQpOworCW91dCArPSBzcHJpbnRmKG91dCwgIihidWY9JTA4eClcbiIsIGxlMzJfdG9fY3B1KHRkLT5idWZmZXIpKTsKKworCXJldHVybiBvdXQgLSBidWY7Cit9CisKK3N0YXRpYyBpbnQgdWhjaV9zaG93X3FoKHN0cnVjdCB1aGNpX3FoICpxaCwgY2hhciAqYnVmLCBpbnQgbGVuLCBpbnQgc3BhY2UpCit7CisJY2hhciAqb3V0ID0gYnVmOworCXN0cnVjdCB1cmJfcHJpdiAqdXJicDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCAqdG1wOworCXN0cnVjdCB1aGNpX3RkICp0ZDsKKwlpbnQgaSA9IDAsIGNoZWNrZWQgPSAwLCBwcmV2YWN0aXZlID0gMDsKKwlfX2xlMzIgZWxlbWVudCA9IHFoX2VsZW1lbnQocWgpOworCisJLyogVHJ5IHRvIG1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBtZW1vcnkgKi8KKwlpZiAobGVuIDwgODAgKiA2KQorCQlyZXR1cm4gMDsKKworCW91dCArPSBzcHJpbnRmKG91dCwgIiUqc1slcF0gbGluayAoJTA4eCkgZWxlbWVudCAoJTA4eClcbiIsIHNwYWNlLCAiIiwKKwkJCXFoLCBsZTMyX3RvX2NwdShxaC0+bGluayksIGxlMzJfdG9fY3B1KGVsZW1lbnQpKTsKKworCWlmIChlbGVtZW50ICYgVUhDSV9QVFJfUUgpCisJCW91dCArPSBzcHJpbnRmKG91dCwgIiUqcyAgRWxlbWVudCBwb2ludHMgdG8gUUggKGJ1Zz8pXG4iLCBzcGFjZSwgIiIpOworCisJaWYgKGVsZW1lbnQgJiBVSENJX1BUUl9ERVBUSCkKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzICBEZXB0aCB0cmF2ZXJzZVxuIiwgc3BhY2UsICIiKTsKKworCWlmIChlbGVtZW50ICYgY3B1X3RvX2xlMzIoOCkpCisJCW91dCArPSBzcHJpbnRmKG91dCwgIiUqcyAgQml0IDMgc2V0IChidWc/KVxuIiwgc3BhY2UsICIiKTsKKworCWlmICghKGVsZW1lbnQgJiB+KFVIQ0lfUFRSX1FIIHwgVUhDSV9QVFJfREVQVEgpKSkKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiJSpzICBFbGVtZW50IGlzIE5VTEwgKGJ1Zz8pXG4iLCBzcGFjZSwgIiIpOworCisJaWYgKCFxaC0+dXJicCkgeworCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnMgIHVyYnAgPT0gTlVMTFxuIiwgc3BhY2UsICIiKTsKKwkJZ290byBvdXQ7CisJfQorCisJdXJicCA9IHFoLT51cmJwOworCisJaGVhZCA9ICZ1cmJwLT50ZF9saXN0OworCXRtcCA9IGhlYWQtPm5leHQ7CisKKwl0ZCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgdWhjaV90ZCwgbGlzdCk7CisKKwlpZiAoY3B1X3RvX2xlMzIodGQtPmRtYV9oYW5kbGUpICE9IChlbGVtZW50ICYgflVIQ0lfUFRSX0JJVFMpKQorCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnMgRWxlbWVudCAhPSBGaXJzdCBURFxuIiwgc3BhY2UsICIiKTsKKworCXdoaWxlICh0bXAgIT0gaGVhZCkgeworCQlzdHJ1Y3QgdWhjaV90ZCAqdGQgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVoY2lfdGQsIGxpc3QpOworCisJCXRtcCA9IHRtcC0+bmV4dDsKKworCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnMlZDogIiwgc3BhY2UgKyAyLCAiIiwgaSsrKTsKKwkJb3V0ICs9IHVoY2lfc2hvd190ZCh0ZCwgb3V0LCBsZW4gLSAob3V0IC0gYnVmKSwgMCk7CisKKwkJaWYgKGkgPiAxMCAmJiAhY2hlY2tlZCAmJiBwcmV2YWN0aXZlICYmIHRtcCAhPSBoZWFkICYmCisJCSAgICBkZWJ1ZyA8PSAyKSB7CisJCQlzdHJ1Y3QgbGlzdF9oZWFkICpudG1wID0gdG1wOworCQkJc3RydWN0IHVoY2lfdGQgKm50ZCA9IHRkOworCQkJaW50IGFjdGl2ZSA9IDEsIG5pID0gaTsKKworCQkJY2hlY2tlZCA9IDE7CisKKwkJCXdoaWxlIChudG1wICE9IGhlYWQgJiYgbnRtcC0+bmV4dCAhPSBoZWFkICYmIGFjdGl2ZSkgeworCQkJCW50ZCA9IGxpc3RfZW50cnkobnRtcCwgc3RydWN0IHVoY2lfdGQsIGxpc3QpOworCisJCQkJbnRtcCA9IG50bXAtPm5leHQ7CisKKwkJCQlhY3RpdmUgPSB0ZF9zdGF0dXMobnRkKSAmIFREX0NUUkxfQUNUSVZFOworCisJCQkJbmkrKzsKKwkJCX0KKworCQkJaWYgKGFjdGl2ZSAmJiBuaSA+IGkpIHsKKwkJCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnNbc2tpcHBlZCAlZCBhY3RpdmUgVEQnc11cbiIsIHNwYWNlLCAiIiwgbmkgLSBpKTsKKwkJCQl0bXAgPSBudG1wOworCQkJCXRkID0gbnRkOworCQkJCWkgPSBuaTsKKwkJCX0KKwkJfQorCisJCXByZXZhY3RpdmUgPSB0ZF9zdGF0dXModGQpICYgVERfQ1RSTF9BQ1RJVkU7CisJfQorCisJaWYgKGxpc3RfZW1wdHkoJnVyYnAtPnF1ZXVlX2xpc3QpIHx8IHVyYnAtPnF1ZXVlZCkKKwkJZ290byBvdXQ7CisKKwlvdXQgKz0gc3ByaW50ZihvdXQsICIlKnNRdWV1ZWQgUUgnczpcbiIsIC1zcGFjZSwgIi0tIik7CisKKwloZWFkID0gJnVyYnAtPnF1ZXVlX2xpc3Q7CisJdG1wID0gaGVhZC0+bmV4dDsKKworCXdoaWxlICh0bXAgIT0gaGVhZCkgeworCQlzdHJ1Y3QgdXJiX3ByaXYgKm51cmJwID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB1cmJfcHJpdiwKKwkJCQkJCXF1ZXVlX2xpc3QpOworCQl0bXAgPSB0bXAtPm5leHQ7CisKKwkJb3V0ICs9IHVoY2lfc2hvd19xaChudXJicC0+cWgsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZiksIHNwYWNlKTsKKwl9CisKK291dDoKKwlyZXR1cm4gb3V0IC0gYnVmOworfQorCisjZGVmaW5lIHNob3dfZnJhbWVfbnVtKCkJXAorCWlmICghc2hvd24pIHsJCVwKKwkgIHNob3duID0gMTsJCVwKKwkgIG91dCArPSBzcHJpbnRmKG91dCwgIi0gRnJhbWUgJWRcbiIsIGkpOyBcCisJfQorCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK3N0YXRpYyBjb25zdCBjaGFyICpxaF9uYW1lc1tdID0geworICAic2tlbF9pbnQxMjhfcWgiLCAic2tlbF9pbnQ2NF9xaCIsCisgICJza2VsX2ludDMyX3FoIiwgInNrZWxfaW50MTZfcWgiLAorICAic2tlbF9pbnQ4X3FoIiwgInNrZWxfaW50NF9xaCIsCisgICJza2VsX2ludDJfcWgiLCAic2tlbF9pbnQxX3FoIiwKKyAgInNrZWxfbHNfY29udHJvbF9xaCIsICJza2VsX2ZzX2NvbnRyb2xfcWgiLAorICAic2tlbF9idWxrX3FoIiwgInNrZWxfdGVybV9xaCIKK307CisKKyNkZWZpbmUgc2hvd19xaF9uYW1lKCkJCVwKKwlpZiAoIXNob3duKSB7CQlcCisJICBzaG93biA9IDE7CQlcCisJICBvdXQgKz0gc3ByaW50ZihvdXQsICItICVzXG4iLCBxaF9uYW1lc1tpXSk7IFwKKwl9CisKK3N0YXRpYyBpbnQgdWhjaV9zaG93X3NjKGludCBwb3J0LCB1bnNpZ25lZCBzaG9ydCBzdGF0dXMsIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwljaGFyICpvdXQgPSBidWY7CisKKwkvKiBUcnkgdG8gbWFrZSBzdXJlIHRoZXJlJ3MgZW5vdWdoIG1lbW9yeSAqLworCWlmIChsZW4gPCAxNjApCisJCXJldHVybiAwOworCisJb3V0ICs9IHNwcmludGYob3V0LCAiICBzdGF0JWQgICAgID0gICAgICUwNHggICVzJXMlcyVzJXMlcyVzJXMlcyVzXG4iLAorCQlwb3J0LAorCQlzdGF0dXMsCisJCShzdGF0dXMgJiBVU0JQT1JUU0NfU1VTUCkgPwkiIFN1c3BlbmQiIDogIiIsCisJCShzdGF0dXMgJiBVU0JQT1JUU0NfT0NDKSA/CSIgT3ZlckN1cnJlbnRDaGFuZ2UiIDogIiIsCisJCShzdGF0dXMgJiBVU0JQT1JUU0NfT0MpID8JIiBPdmVyQ3VycmVudCIgOiAiIiwKKwkJKHN0YXR1cyAmIFVTQlBPUlRTQ19QUikgPwkiIFJlc2V0IiA6ICIiLAorCQkoc3RhdHVzICYgVVNCUE9SVFNDX0xTREEpID8JIiBMb3dTcGVlZCIgOiAiIiwKKwkJKHN0YXR1cyAmIFVTQlBPUlRTQ19SRCkgPwkiIFJlc3VtZURldGVjdCIgOiAiIiwKKwkJKHN0YXR1cyAmIFVTQlBPUlRTQ19QRUMpID8JIiBFbmFibGVDaGFuZ2UiIDogIiIsCisJCShzdGF0dXMgJiBVU0JQT1JUU0NfUEUpID8JIiBFbmFibGVkIiA6ICIiLAorCQkoc3RhdHVzICYgVVNCUE9SVFNDX0NTQykgPwkiIENvbm5lY3RDaGFuZ2UiIDogIiIsCisJCShzdGF0dXMgJiBVU0JQT1JUU0NfQ0NTKSA/CSIgQ29ubmVjdGVkIiA6ICIiKTsKKworCXJldHVybiBvdXQgLSBidWY7Cit9CisKK3N0YXRpYyBpbnQgdWhjaV9zaG93X3N0YXR1cyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwljaGFyICpvdXQgPSBidWY7CisJdW5zaWduZWQgbG9uZyBpb19hZGRyID0gdWhjaS0+aW9fYWRkcjsKKwl1bnNpZ25lZCBzaG9ydCB1c2JjbWQsIHVzYnN0YXQsIHVzYmludCwgdXNiZnJudW07CisJdW5zaWduZWQgaW50IGZsYmFzZWFkZDsKKwl1bnNpZ25lZCBjaGFyIHNvZjsKKwl1bnNpZ25lZCBzaG9ydCBwb3J0c2MxLCBwb3J0c2MyOworCisJLyogVHJ5IHRvIG1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBtZW1vcnkgKi8KKwlpZiAobGVuIDwgODAgKiA2KQorCQlyZXR1cm4gMDsKKworCXVzYmNtZCAgICA9IGludyhpb19hZGRyICsgMCk7CisJdXNic3RhdCAgID0gaW53KGlvX2FkZHIgKyAyKTsKKwl1c2JpbnQgICAgPSBpbncoaW9fYWRkciArIDQpOworCXVzYmZybnVtICA9IGludyhpb19hZGRyICsgNik7CisJZmxiYXNlYWRkID0gaW5sKGlvX2FkZHIgKyA4KTsKKwlzb2YgICAgICAgPSBpbmIoaW9fYWRkciArIDEyKTsKKwlwb3J0c2MxICAgPSBpbncoaW9fYWRkciArIDE2KTsKKwlwb3J0c2MyICAgPSBpbncoaW9fYWRkciArIDE4KTsKKworCW91dCArPSBzcHJpbnRmKG91dCwgIiAgdXNiY21kICAgID0gICAgICUwNHggICAlcyVzJXMlcyVzJXMlcyVzXG4iLAorCQl1c2JjbWQsCisJCSh1c2JjbWQgJiBVU0JDTURfTUFYUCkgPyAgICAiTWF4cDY0ICIgOiAiTWF4cDMyICIsCisJCSh1c2JjbWQgJiBVU0JDTURfQ0YpID8gICAgICAiQ0YgIiA6ICIiLAorCQkodXNiY21kICYgVVNCQ01EX1NXREJHKSA/ICAgIlNXREJHICIgOiAiIiwKKwkJKHVzYmNtZCAmIFVTQkNNRF9GR1IpID8gICAgICJGR1IgIiA6ICIiLAorCQkodXNiY21kICYgVVNCQ01EX0VHU00pID8gICAgIkVHU00gIiA6ICIiLAorCQkodXNiY21kICYgVVNCQ01EX0dSRVNFVCkgPyAgIkdSRVNFVCAiIDogIiIsCisJCSh1c2JjbWQgJiBVU0JDTURfSENSRVNFVCkgPyAiSENSRVNFVCAiIDogIiIsCisJCSh1c2JjbWQgJiBVU0JDTURfUlMpID8gICAgICAiUlMgIiA6ICIiKTsKKworCW91dCArPSBzcHJpbnRmKG91dCwgIiAgdXNic3RhdCAgID0gICAgICUwNHggICAlcyVzJXMlcyVzJXNcbiIsCisJCXVzYnN0YXQsCisJCSh1c2JzdGF0ICYgVVNCU1RTX0hDSCkgPyAgICAiSENIYWx0ZWQgIiA6ICIiLAorCQkodXNic3RhdCAmIFVTQlNUU19IQ1BFKSA/ICAgIkhvc3RDb250cm9sbGVyUHJvY2Vzc0Vycm9yICIgOiAiIiwKKwkJKHVzYnN0YXQgJiBVU0JTVFNfSFNFKSA/ICAgICJIb3N0U3lzdGVtRXJyb3IgIiA6ICIiLAorCQkodXNic3RhdCAmIFVTQlNUU19SRCkgPyAgICAgIlJlc3VtZURldGVjdCAiIDogIiIsCisJCSh1c2JzdGF0ICYgVVNCU1RTX0VSUk9SKSA/ICAiVVNCRXJyb3IgIiA6ICIiLAorCQkodXNic3RhdCAmIFVTQlNUU19VU0JJTlQpID8gIlVTQklOVCAiIDogIiIpOworCisJb3V0ICs9IHNwcmludGYob3V0LCAiICB1c2JpbnQgICAgPSAgICAgJTA0eFxuIiwgdXNiaW50KTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICIgIHVzYmZybnVtICA9ICAgKCVkKSUwM3hcbiIsICh1c2Jmcm51bSA+PiAxMCkgJiAxLAorCQkweGZmZiAmICg0Kih1bnNpZ25lZCBpbnQpdXNiZnJudW0pKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICIgIGZsYmFzZWFkZCA9ICUwOHhcbiIsIGZsYmFzZWFkZCk7CisJb3V0ICs9IHNwcmludGYob3V0LCAiICBzb2YgICAgICAgPSAgICAgICAlMDJ4XG4iLCBzb2YpOworCW91dCArPSB1aGNpX3Nob3dfc2MoMSwgcG9ydHNjMSwgb3V0LCBsZW4gLSAob3V0IC0gYnVmKSk7CisJb3V0ICs9IHVoY2lfc2hvd19zYygyLCBwb3J0c2MyLCBvdXQsIGxlbiAtIChvdXQgLSBidWYpKTsKKworCXJldHVybiBvdXQgLSBidWY7Cit9CisKK3N0YXRpYyBpbnQgdWhjaV9zaG93X3VyYnAoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAsIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisJY2hhciAqb3V0ID0gYnVmOworCWludCBjb3VudCA9IDA7CisKKwlpZiAobGVuIDwgMjAwKQorCQlyZXR1cm4gMDsKKworCW91dCArPSBzcHJpbnRmKG91dCwgInVyYl9wcml2IFslcF0gIiwgdXJicCk7CisJb3V0ICs9IHNwcmludGYob3V0LCAidXJiIFslcF0gIiwgdXJicC0+dXJiKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJxaCBbJXBdICIsIHVyYnAtPnFoKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJEZXY9JWQgIiwgdXNiX3BpcGVkZXZpY2UodXJicC0+dXJiLT5waXBlKSk7CisJb3V0ICs9IHNwcmludGYob3V0LCAiRVA9JXgoJXMpICIsIHVzYl9waXBlZW5kcG9pbnQodXJicC0+dXJiLT5waXBlKSwgKHVzYl9waXBlaW4odXJicC0+dXJiLT5waXBlKSA/ICJJTiIgOiAiT1VUIikpOworCisJc3dpdGNoICh1c2JfcGlwZXR5cGUodXJicC0+dXJiLT5waXBlKSkgeworCWNhc2UgUElQRV9JU09DSFJPTk9VUzogb3V0ICs9IHNwcmludGYob3V0LCAiSVNPICIpOyBicmVhazsKKwljYXNlIFBJUEVfSU5URVJSVVBUOiBvdXQgKz0gc3ByaW50ZihvdXQsICJJTlQgIik7IGJyZWFrOworCWNhc2UgUElQRV9CVUxLOiBvdXQgKz0gc3ByaW50ZihvdXQsICJCTEsgIik7IGJyZWFrOworCWNhc2UgUElQRV9DT05UUk9MOiBvdXQgKz0gc3ByaW50ZihvdXQsICJDVEwgIik7IGJyZWFrOworCX0KKworCW91dCArPSBzcHJpbnRmKG91dCwgIiVzIiwgKHVyYnAtPmZzYnIgPyAiRlNCUiAiIDogIiIpKTsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICIlcyIsICh1cmJwLT5mc2JyX3RpbWVvdXQgPyAiRlNCUl9UTyAiIDogIiIpKTsKKworCWlmICh1cmJwLT51cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpCisJCW91dCArPSBzcHJpbnRmKG91dCwgIlN0YXR1cz0lZCAiLCB1cmJwLT51cmItPnN0YXR1cyk7CisJLy9vdXQgKz0gc3ByaW50ZihvdXQsICJJbnNlcnR0aW1lPSVseCAiLHVyYnAtPmluc2VydHRpbWUpOworCS8vb3V0ICs9IHNwcmludGYob3V0LCAiRlNCUnRpbWU9JWx4ICIsdXJicC0+ZnNicnRpbWUpOworCisJY291bnQgPSAwOworCWxpc3RfZm9yX2VhY2godG1wLCAmdXJicC0+dGRfbGlzdCkKKwkJY291bnQrKzsKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJURHM9JWQgIixjb3VudCk7CisKKwlpZiAodXJicC0+cXVldWVkKQorCQlvdXQgKz0gc3ByaW50ZihvdXQsICJxdWV1ZWRcbiIpOworCWVsc2UgeworCQljb3VudCA9IDA7CisJCWxpc3RfZm9yX2VhY2godG1wLCAmdXJicC0+cXVldWVfbGlzdCkKKwkJCWNvdW50Kys7CisJCW91dCArPSBzcHJpbnRmKG91dCwgInF1ZXVlZCBVUkJzPSVkXG4iLCBjb3VudCk7CisJfQorCisJcmV0dXJuIG91dCAtIGJ1ZjsKK30KKworc3RhdGljIGludCB1aGNpX3Nob3dfbGlzdHMoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBjaGFyICpidWYsIGludCBsZW4pCit7CisJY2hhciAqb3V0ID0gYnVmOworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsICp0bXA7CisJaW50IGNvdW50OworCisJb3V0ICs9IHNwcmludGYob3V0LCAiTWFpbiBsaXN0IFVSQnM6Iik7CisJaWYgKGxpc3RfZW1wdHkoJnVoY2ktPnVyYl9saXN0KSkKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiIEVtcHR5XG4iKTsKKwllbHNlIHsKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiXG4iKTsKKwkJY291bnQgPSAwOworCQloZWFkID0gJnVoY2ktPnVyYl9saXN0OworCQl0bXAgPSBoZWFkLT5uZXh0OworCQl3aGlsZSAodG1wICE9IGhlYWQpIHsKKwkJCXN0cnVjdCB1cmJfcHJpdiAqdXJicCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgdXJiX3ByaXYsIHVyYl9saXN0KTsKKworCQkJb3V0ICs9IHNwcmludGYob3V0LCAiICAlZDogIiwgKytjb3VudCk7CisJCQlvdXQgKz0gdWhjaV9zaG93X3VyYnAodWhjaSwgdXJicCwgb3V0LCBsZW4gLSAob3V0IC0gYnVmKSk7CisJCQl0bXAgPSB0bXAtPm5leHQ7CisJCX0KKwl9CisKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJSZW1vdmUgbGlzdCBVUkJzOiIpOworCWlmIChsaXN0X2VtcHR5KCZ1aGNpLT51cmJfcmVtb3ZlX2xpc3QpKQorCQlvdXQgKz0gc3ByaW50ZihvdXQsICIgRW1wdHlcbiIpOworCWVsc2UgeworCQlvdXQgKz0gc3ByaW50ZihvdXQsICJcbiIpOworCQljb3VudCA9IDA7CisJCWhlYWQgPSAmdWhjaS0+dXJiX3JlbW92ZV9saXN0OworCQl0bXAgPSBoZWFkLT5uZXh0OworCQl3aGlsZSAodG1wICE9IGhlYWQpIHsKKwkJCXN0cnVjdCB1cmJfcHJpdiAqdXJicCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgdXJiX3ByaXYsIHVyYl9saXN0KTsKKworCQkJb3V0ICs9IHNwcmludGYob3V0LCAiICAlZDogIiwgKytjb3VudCk7CisJCQlvdXQgKz0gdWhjaV9zaG93X3VyYnAodWhjaSwgdXJicCwgb3V0LCBsZW4gLSAob3V0IC0gYnVmKSk7CisJCQl0bXAgPSB0bXAtPm5leHQ7CisJCX0KKwl9CisKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJDb21wbGV0ZSBsaXN0IFVSQnM6Iik7CisJaWYgKGxpc3RfZW1wdHkoJnVoY2ktPmNvbXBsZXRlX2xpc3QpKQorCQlvdXQgKz0gc3ByaW50ZihvdXQsICIgRW1wdHlcbiIpOworCWVsc2UgeworCQlvdXQgKz0gc3ByaW50ZihvdXQsICJcbiIpOworCQljb3VudCA9IDA7CisJCWhlYWQgPSAmdWhjaS0+Y29tcGxldGVfbGlzdDsKKwkJdG1wID0gaGVhZC0+bmV4dDsKKwkJd2hpbGUgKHRtcCAhPSBoZWFkKSB7CisJCQlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVyYl9wcml2LCB1cmJfbGlzdCk7CisKKwkJCW91dCArPSBzcHJpbnRmKG91dCwgIiAgJWQ6ICIsICsrY291bnQpOworCQkJb3V0ICs9IHVoY2lfc2hvd191cmJwKHVoY2ksIHVyYnAsIG91dCwgbGVuIC0gKG91dCAtIGJ1ZikpOworCQkJdG1wID0gdG1wLT5uZXh0OworCQl9CisJfQorCisJcmV0dXJuIG91dCAtIGJ1ZjsKK30KKworc3RhdGljIGludCB1aGNpX3NwcmludF9zY2hlZHVsZShzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNoYXIgKm91dCA9IGJ1ZjsKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgdWhjaV9xaCAqcWg7CisJc3RydWN0IHVoY2lfdGQgKnRkOworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcCwgKmhlYWQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWhjaS0+bG9jaywgZmxhZ3MpOworCisJb3V0ICs9IHNwcmludGYob3V0LCAiSEMgc3RhdHVzXG4iKTsKKwlvdXQgKz0gdWhjaV9zaG93X3N0YXR1cyh1aGNpLCBvdXQsIGxlbiAtIChvdXQgLSBidWYpKTsKKworCW91dCArPSBzcHJpbnRmKG91dCwgIkZyYW1lIExpc3RcbiIpOworCWZvciAoaSA9IDA7IGkgPCBVSENJX05VTUZSQU1FUzsgKytpKSB7CisJCWludCBzaG93biA9IDA7CisJCXRkID0gdWhjaS0+ZmwtPmZyYW1lX2NwdVtpXTsKKwkJaWYgKCF0ZCkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0ZC0+ZG1hX2hhbmRsZSAhPSAoZG1hX2FkZHJfdCl1aGNpLT5mbC0+ZnJhbWVbaV0pIHsKKwkJCXNob3dfZnJhbWVfbnVtKCk7CisJCQlvdXQgKz0gc3ByaW50ZihvdXQsICIgICAgZnJhbWUgbGlzdCBkb2VzIG5vdCBtYXRjaCB0ZC0+ZG1hX2hhbmRsZSFcbiIpOworCQl9CisJCXNob3dfZnJhbWVfbnVtKCk7CisKKwkJaGVhZCA9ICZ0ZC0+ZmxfbGlzdDsKKwkJdG1wID0gaGVhZDsKKwkJZG8geworCQkJdGQgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHVoY2lfdGQsIGZsX2xpc3QpOworCQkJdG1wID0gdG1wLT5uZXh0OworCQkJb3V0ICs9IHVoY2lfc2hvd190ZCh0ZCwgb3V0LCBsZW4gLSAob3V0IC0gYnVmKSwgNCk7CisJCX0gd2hpbGUgKHRtcCAhPSBoZWFkKTsKKwl9CisKKwlvdXQgKz0gc3ByaW50ZihvdXQsICJTa2VsZXRvbiBRSCdzXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBVSENJX05VTV9TS0VMUUg7ICsraSkgeworCQlpbnQgc2hvd24gPSAwOworCisJCXFoID0gdWhjaS0+c2tlbHFoW2ldOworCisJCWlmIChkZWJ1ZyA+IDEpIHsKKwkJCXNob3dfcWhfbmFtZSgpOworCQkJb3V0ICs9IHVoY2lfc2hvd19xaChxaCwgb3V0LCBsZW4gLSAob3V0IC0gYnVmKSwgNCk7CisJCX0KKworCQkvKiBMYXN0IFFIIGlzIHRoZSBUZXJtaW5hdGluZyBRSCwgaXQncyBkaWZmZXJlbnQgKi8KKwkJaWYgKGkgPT0gVUhDSV9OVU1fU0tFTFFIIC0gMSkgeworCQkJaWYgKHFoLT5saW5rICE9IFVIQ0lfUFRSX1RFUk0pCisJCQkJb3V0ICs9IHNwcmludGYob3V0LCAiICAgIGJhbmR3aWR0aCByZWNsYW1hdGlvbiBvbiFcbiIpOworCisJCQlpZiAocWhfZWxlbWVudChxaCkgIT0gY3B1X3RvX2xlMzIodWhjaS0+dGVybV90ZC0+ZG1hX2hhbmRsZSkpCisJCQkJb3V0ICs9IHNwcmludGYob3V0LCAiICAgIHNrZWxfdGVybV9xaCBlbGVtZW50IGlzIG5vdCBzZXQgdG8gdGVybV90ZCFcbiIpOworCisJCQljb250aW51ZTsKKwkJfQorCisJCWogPSAoaSA8IDcpID8gNyA6IGkrMTsJCS8qIE5leHQgc2tlbGV0b24gKi8KKwkJaWYgKGxpc3RfZW1wdHkoJnFoLT5saXN0KSkgeworCQkJaWYgKGkgPCBVSENJX05VTV9TS0VMUUggLSAxKSB7CisJCQkJaWYgKHFoLT5saW5rICE9CisJCQkJICAgIChjcHVfdG9fbGUzMih1aGNpLT5za2VscWhbal0tPmRtYV9oYW5kbGUpIHwgVUhDSV9QVFJfUUgpKSB7CisJCQkJCXNob3dfcWhfbmFtZSgpOworCQkJCQlvdXQgKz0gc3ByaW50ZihvdXQsICIgICAgc2tlbGV0b24gUUggbm90IGxpbmtlZCB0byBuZXh0IHNrZWxldG9uIFFIIVxuIik7CisJCQkJfQorCQkJfQorCisJCQljb250aW51ZTsKKwkJfQorCisJCXNob3dfcWhfbmFtZSgpOworCisJCWhlYWQgPSAmcWgtPmxpc3Q7CisJCXRtcCA9IGhlYWQtPm5leHQ7CisKKwkJd2hpbGUgKHRtcCAhPSBoZWFkKSB7CisJCQlxaCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgdWhjaV9xaCwgbGlzdCk7CisKKwkJCXRtcCA9IHRtcC0+bmV4dDsKKworCQkJb3V0ICs9IHVoY2lfc2hvd19xaChxaCwgb3V0LCBsZW4gLSAob3V0IC0gYnVmKSwgNCk7CisJCX0KKworCQlpZiAoaSA8IFVIQ0lfTlVNX1NLRUxRSCAtIDEpIHsKKwkJCWlmIChxaC0+bGluayAhPQorCQkJICAgIChjcHVfdG9fbGUzMih1aGNpLT5za2VscWhbal0tPmRtYV9oYW5kbGUpIHwgVUhDSV9QVFJfUUgpKQorCQkJCW91dCArPSBzcHJpbnRmKG91dCwgIiAgICBsYXN0IFFIIG5vdCBsaW5rZWQgdG8gbmV4dCBza2VsZXRvbiFcbiIpOworCQl9CisJfQorCisJaWYgKGRlYnVnID4gMikKKwkJb3V0ICs9IHVoY2lfc2hvd19saXN0cyh1aGNpLCBvdXQsIGxlbiAtIChvdXQgLSBidWYpKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVoY2ktPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBvdXQgLSBidWY7Cit9CisKKyNkZWZpbmUgTUFYX09VVFBVVAkoNjQgKiAxMDI0KQorCitzdHJ1Y3QgdWhjaV9kZWJ1ZyB7CisJaW50IHNpemU7CisJY2hhciAqZGF0YTsKKwlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2k7Cit9OworCitzdGF0aWMgaW50IHVoY2lfZGVidWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBpbm9kZS0+dS5nZW5lcmljX2lwOworCXN0cnVjdCB1aGNpX2RlYnVnICp1cDsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCWxvY2tfa2VybmVsKCk7CisJdXAgPSBrbWFsbG9jKHNpemVvZigqdXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVwKQorCQlnb3RvIG91dDsKKworCXVwLT5kYXRhID0ga21hbGxvYyhNQVhfT1VUUFVULCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVwLT5kYXRhKSB7CisJCWtmcmVlKHVwKTsKKwkJZ290byBvdXQ7CisJfQorCisJdXAtPnNpemUgPSB1aGNpX3NwcmludF9zY2hlZHVsZSh1aGNpLCB1cC0+ZGF0YSwgTUFYX09VVFBVVCk7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSB1cDsKKworCXJldCA9IDA7CitvdXQ6CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBsb2ZmX3QgdWhjaV9kZWJ1Z19sc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZiwgaW50IHdoZW5jZSkKK3sKKwlzdHJ1Y3QgdWhjaV9kZWJ1ZyAqdXA7CisJbG9mZl90IG5ldyA9IC0xOworCisJbG9ja19rZXJuZWwoKTsKKwl1cCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAod2hlbmNlKSB7CisJY2FzZSAwOgorCQluZXcgPSBvZmY7CisJCWJyZWFrOworCWNhc2UgMToKKwkJbmV3ID0gZmlsZS0+Zl9wb3MgKyBvZmY7CisJCWJyZWFrOworCX0KKwlpZiAobmV3IDwgMCB8fCBuZXcgPiB1cC0+c2l6ZSkgeworCQl1bmxvY2tfa2VybmVsKCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIChmaWxlLT5mX3BvcyA9IG5ldyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHVoY2lfZGVidWdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQlzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHVoY2lfZGVidWcgKnVwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIG5ieXRlcywgcHBvcywgdXAtPmRhdGEsIHVwLT5zaXplKTsKK30KKworc3RhdGljIGludCB1aGNpX2RlYnVnX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVoY2lfZGVidWcgKnVwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJa2ZyZWUodXAtPmRhdGEpOworCWtmcmVlKHVwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1aGNpX2RlYnVnX29wZXJhdGlvbnMgPSB7CisJLm9wZW4gPQkJdWhjaV9kZWJ1Z19vcGVuLAorCS5sbHNlZWsgPQl1aGNpX2RlYnVnX2xzZWVrLAorCS5yZWFkID0JCXVoY2lfZGVidWdfcmVhZCwKKwkucmVsZWFzZSA9CXVoY2lfZGVidWdfcmVsZWFzZSwKK307CisKKyNlbHNlCS8qIENPTkZJR19ERUJVR19GUyAqLworCisjZGVmaW5lIHVoY2lfZGVidWdfb3BlcmF0aW9ucyAoKiAoc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqKSBOVUxMKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjRhMWE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCkBAIC0wLDAgKzEsOTE5IEBACisvKgorICogVW5pdmVyc2FsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgZHJpdmVyIGZvciBVU0IuCisgKgorICogTWFpbnRhaW5lcjogQWxhbiBTdGVybiA8c3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgTGludXMgVG9ydmFsZHMKKyAqIChDKSBDb3B5cmlnaHQgMTk5OS0yMDAyIEpvaGFubmVzIEVyZGZlbHQsIGpvaGFubmVzQGVyZGZlbHQuY29tCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgUmFuZHkgRHVubGFwCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgR2VvcmcgQWNoZXIsIGFjaGVyQGluLnR1bS5kZQorICogKEMpIENvcHlyaWdodCAxOTk5IERldGkgRmxpZWdsLCBkZXRpQGZsaWVnbC5kZQorICogKEMpIENvcHlyaWdodCAxOTk5IFRob21hcyBTYWlsZXIsIHNhaWxlckBpZmUuZWUuZXRoei5jaAorICogKEMpIENvcHlyaWdodCAxOTk5IFJvbWFuIFdlaXNzZ2FlcmJlciwgd2Vpc3NnQHZpZW5uYS5hdAorICogKEMpIENvcHlyaWdodCAyMDAwIFlnZ2RyYXNpbCBDb21wdXRpbmcsIEluYy4gKHBvcnQgb2YgbmV3IFBDSSBpbnRlcmZhY2UKKyAqICAgICAgICAgICAgICAgc3VwcG9ydCBmcm9tIHVzYi1vaGNpLmMgYnkgQWRhbSBSaWNodGVyLCBhZGFtQHlnZ2RyYXNpbC5jb20pLgorICogKEMpIENvcHlyaWdodCAxOTk5IEdyZWdvcnkgUC4gU21pdGggKGZyb20gdXNiLW9oY2kuYykKKyAqIChDKSBDb3B5cmlnaHQgMjAwNCBBbGFuIFN0ZXJuLCBzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1CisgKgorICogSW50ZWwgZG9jdW1lbnRzIHRoaXMgZmFpcmx5IHdlbGwsIGFuZCBhcyBmYXIgYXMgSSBrbm93IHRoZXJlCisgKiBhcmUgbm8gcm95YWx0aWVzIG9yIGFueXRoaW5nIGxpa2UgdGhhdCwgYnV0IGV2ZW4gc28gdGhlcmUgYXJlCisgKiBwZW9wbGUgd2hvIGRlY2lkZWQgdGhhdCB0aGV5IHdhbnQgdG8gZG8gdGhlIHNhbWUgdGhpbmcgaW4gYQorICogY29tcGxldGVseSBkaWZmZXJlbnQgd2F5LgorICoKKyAqIFdBUk5JTkchIFRoZSBVU0IgZG9jdW1lbnRhdGlvbiBpcyBkb3ducmlnaHQgZXZpbC4gTW9zdCBvZiBpdAorICogaXMganVzdCBjcmFwLCB3cml0dGVuIGJ5IGEgY29tbWl0dGVlLiBZb3UncmUgYmV0dGVyIG9mZiBpZ25vcmluZworICogbW9zdCBvZiBpdCwgdGhlIGltcG9ydGFudCBzdHVmZiBpczoKKyAqICAtIHRoZSBsb3ctbGV2ZWwgcHJvdG9jb2wgKGZhaXJseSBzaW1wbGUgYnV0IGxvdHMgb2Ygc21hbGwgZGV0YWlscykKKyAqICAtIHdvcmtpbmcgYXJvdW5kIHRoZSBob3JyaWRuZXNzIG9mIHRoZSByZXN0CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKyNkZWZpbmUgREVCVUcKKyNlbHNlCisjdW5kZWYgREVCVUcKKyNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjaW5jbHVkZSAiLi4vY29yZS9oY2QuaCIKKyNpbmNsdWRlICJ1aGNpLWhjZC5oIgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2Mi4yIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJMaW51cyAnRnJvZG8gUmFiYml0JyBUb3J2YWxkcywgSm9oYW5uZXMgRXJkZmVsdCwgXAorUmFuZHkgRHVubGFwLCBHZW9yZyBBY2hlciwgRGV0aSBGbGllZ2wsIFRob21hcyBTYWlsZXIsIFJvbWFuIFdlaXNzZ2FlcmJlciwgXAorQWxhbiBTdGVybiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBVbml2ZXJzYWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBkcml2ZXIiCisKKy8qCisgKiBkZWJ1ZyA9IDAsIG5vIGRlYnVnZ2luZyBtZXNzYWdlcworICogZGVidWcgPSAxLCBkdW1wIGZhaWxlZCBVUkIncyBleGNlcHQgZm9yIHN0YWxscworICogZGVidWcgPSAyLCBkdW1wIGFsbCBmYWlsZWQgVVJCJ3MgKGluY2x1ZGluZyBzdGFsbHMpCisgKiAgICAgICAgICAgIHNob3cgYWxsIHF1ZXVlcyBpbiAvZGVidWcvdWhjaS9bcGNpX2FkZHJdCisgKiBkZWJ1ZyA9IDMsIHNob3cgYWxsIFREJ3MgaW4gVVJCJ3Mgd2hlbiBkdW1waW5nCisgKi8KKyNpZmRlZiBERUJVRworc3RhdGljIGludCBkZWJ1ZyA9IDE7CisjZWxzZQorc3RhdGljIGludCBkZWJ1ZyA9IDA7CisjZW5kaWYKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwiKTsKK3N0YXRpYyBjaGFyICplcnJidWY7CisjZGVmaW5lIEVSUkJVRl9MRU4gICAgKDMyICogMTAyNCkKKworc3RhdGljIGttZW1fY2FjaGVfdCAqdWhjaV91cF9jYWNoZXA7CS8qIHVyYl9wcml2ICovCisKK3N0YXRpYyB2b2lkIHVoY2lfZ2V0X2N1cnJlbnRfZnJhbWVfbnVtYmVyKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSk7CitzdGF0aWMgdm9pZCBoY19zdGF0ZV90cmFuc2l0aW9ucyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpOworCisvKiBJZiBhIHRyYW5zZmVyIGlzIHN0aWxsIGFjdGl2ZSBhZnRlciB0aGlzIG11Y2ggdGltZSwgdHVybiBvZmYgRlNCUiAqLworI2RlZmluZSBJRExFX1RJTUVPVVQJbXNlY3NfdG9famlmZmllcyg1MCkKKyNkZWZpbmUgRlNCUl9ERUxBWQltc2Vjc190b19qaWZmaWVzKDUwKQorCisvKiBXaGVuIHdlIHRpbWVvdXQgYW4gaWRsZSB0cmFuc2ZlciBmb3IgRlNCUiwgd2UnbGwgc3dpdGNoIGl0IG92ZXIgdG8gKi8KKy8qIGRlcHRoIGZpcnN0IHRyYXZlcnNhbC4gV2UnbGwgZG8gaXQgaW4gZ3JvdXBzIG9mIHRoaXMgbnVtYmVyIG9mIFREJ3MgKi8KKy8qIHRvIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGhvZyBhbGwgb2YgdGhlIGJhbmR3aWR0aCAqLworI2RlZmluZSBERVBUSF9JTlRFUlZBTCA1CisKKyNpbmNsdWRlICJ1aGNpLWh1Yi5jIgorI2luY2x1ZGUgInVoY2ktZGVidWcuYyIKKyNpbmNsdWRlICJ1aGNpLXEuYyIKKworc3RhdGljIGludCBpbml0X3N0YWxsX3RpbWVyKHN0cnVjdCB1c2JfaGNkICpoY2QpOworCitzdGF0aWMgdm9pZCBzdGFsbF9jYWxsYmFjayh1bnNpZ25lZCBsb25nIHB0cikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gKHN0cnVjdCB1c2JfaGNkICopcHRyOworCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CisJc3RydWN0IHVyYl9wcml2ICp1cDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVoY2ktPmxvY2ssIGZsYWdzKTsKKwl1aGNpX3NjYW5fc2NoZWR1bGUodWhjaSwgTlVMTCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHVwLCAmdWhjaS0+dXJiX2xpc3QsIHVyYl9saXN0KSB7CisJCXN0cnVjdCB1cmIgKnUgPSB1cC0+dXJiOworCisJCXNwaW5fbG9jaygmdS0+bG9jayk7CisKKwkJLyogQ2hlY2sgaWYgdGhlIEZTQlIgdGltZWQgb3V0ICovCisJCWlmICh1cC0+ZnNiciAmJiAhdXAtPmZzYnJfdGltZW91dCAmJiB0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHVwLT5mc2JydGltZSArIElETEVfVElNRU9VVCkpCisJCQl1aGNpX2ZzYnJfdGltZW91dCh1aGNpLCB1KTsKKworCQlzcGluX3VubG9jaygmdS0+bG9jayk7CisJfQorCisJLyogUmVhbGx5IGRpc2FibGUgRlNCUiAqLworCWlmICghdWhjaS0+ZnNiciAmJiB1aGNpLT5mc2JydGltZW91dCAmJiB0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHVoY2ktPmZzYnJ0aW1lb3V0KSkgeworCQl1aGNpLT5mc2JydGltZW91dCA9IDA7CisJCXVoY2ktPnNrZWxfdGVybV9xaC0+bGluayA9IFVIQ0lfUFRSX1RFUk07CisJfQorCisJLyogUG9sbCBmb3IgYW5kIHBlcmZvcm0gc3RhdGUgdHJhbnNpdGlvbnMgKi8KKwloY19zdGF0ZV90cmFuc2l0aW9ucyh1aGNpKTsKKwlpZiAodW5saWtlbHkodWhjaS0+c3VzcGVuZGVkX3BvcnRzICYmIHVoY2ktPnN0YXRlICE9IFVIQ0lfU1VTUEVOREVEKSkKKwkJdWhjaV9jaGVja19wb3J0cyh1aGNpKTsKKworCWluaXRfc3RhbGxfdGltZXIoaGNkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1aGNpLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9zdGFsbF90aW1lcihzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CisKKwlpbml0X3RpbWVyKCZ1aGNpLT5zdGFsbF90aW1lcik7CisJdWhjaS0+c3RhbGxfdGltZXIuZnVuY3Rpb24gPSBzdGFsbF9jYWxsYmFjazsKKwl1aGNpLT5zdGFsbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaGNkOworCXVoY2ktPnN0YWxsX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDApOworCWFkZF90aW1lcigmdWhjaS0+c3RhbGxfdGltZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB1aGNpX2lycShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBoY2RfdG9fdWhjaShoY2QpOworCXVuc2lnbmVkIGxvbmcgaW9fYWRkciA9IHVoY2ktPmlvX2FkZHI7CisJdW5zaWduZWQgc2hvcnQgc3RhdHVzOworCisJLyoKKwkgKiBSZWFkIHRoZSBpbnRlcnJ1cHQgc3RhdHVzLCBhbmQgd3JpdGUgaXQgYmFjayB0byBjbGVhciB0aGUKKwkgKiBpbnRlcnJ1cHQgY2F1c2UuICBDb250cmFyeSB0byB0aGUgVUhDSSBzcGVjaWZpY2F0aW9uLCB0aGUKKwkgKiAiSEMgSGFsdGVkIiBzdGF0dXMgYml0IGlzIHBlcnNpc3RlbnQ6IGl0IGlzIFJPLCBub3QgUi9XQy4KKwkgKi8KKwlzdGF0dXMgPSBpbncoaW9fYWRkciArIFVTQlNUUyk7CisJaWYgKCEoc3RhdHVzICYgflVTQlNUU19IQ0gpKQkvKiBzaGFyZWQgaW50ZXJydXB0LCBub3QgbWluZSAqLworCQlyZXR1cm4gSVJRX05PTkU7CisJb3V0dyhzdGF0dXMsIGlvX2FkZHIgKyBVU0JTVFMpOwkJLyogQ2xlYXIgaXQgKi8KKworCWlmIChzdGF0dXMgJiB+KFVTQlNUU19VU0JJTlQgfCBVU0JTVFNfRVJST1IgfCBVU0JTVFNfUkQpKSB7CisJCWlmIChzdGF0dXMgJiBVU0JTVFNfSFNFKQorCQkJZGV2X2Vycih1aGNpX2Rldih1aGNpKSwgImhvc3Qgc3lzdGVtIGVycm9yLCAiCisJCQkJCSJQQ0kgcHJvYmxlbXM/XG4iKTsKKwkJaWYgKHN0YXR1cyAmIFVTQlNUU19IQ1BFKQorCQkJZGV2X2Vycih1aGNpX2Rldih1aGNpKSwgImhvc3QgY29udHJvbGxlciBwcm9jZXNzICIKKwkJCQkJImVycm9yLCBzb21ldGhpbmcgYmFkIGhhcHBlbmVkIVxuIik7CisJCWlmICgoc3RhdHVzICYgVVNCU1RTX0hDSCkgJiYgdWhjaS0+c3RhdGUgPiAwKSB7CisJCQlkZXZfZXJyKHVoY2lfZGV2KHVoY2kpLCAiaG9zdCBjb250cm9sbGVyIGhhbHRlZCwgIgorCQkJCQkidmVyeSBiYWQhXG4iKTsKKwkJCS8qIEZJWE1FOiBSZXNldCB0aGUgY29udHJvbGxlciwgZml4IHRoZSBvZmZlbmRpbmcgVEQgKi8KKwkJfQorCX0KKworCWlmIChzdGF0dXMgJiBVU0JTVFNfUkQpCisJCXVoY2ktPnJlc3VtZV9kZXRlY3QgPSAxOworCisJc3Bpbl9sb2NrKCZ1aGNpLT5sb2NrKTsKKwl1aGNpX3NjYW5fc2NoZWR1bGUodWhjaSwgcmVncyk7CisJc3Bpbl91bmxvY2soJnVoY2ktPmxvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCByZXNldF9oYyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCit7CisJdW5zaWduZWQgbG9uZyBpb19hZGRyID0gdWhjaS0+aW9fYWRkcjsKKworCS8qIFR1cm4gb2ZmIFBJUlEsIFNNSSwgYW5kIGFsbCBpbnRlcnJ1cHRzLiAgVGhpcyBhbHNvIHR1cm5zIG9mZgorCSAqIHRoZSBCSU9TJ3MgVVNCIExlZ2FjeSBTdXBwb3J0LgorCSAqLworCXBjaV93cml0ZV9jb25maWdfd29yZCh0b19wY2lfZGV2KHVoY2lfZGV2KHVoY2kpKSwgVVNCTEVHU1VQLCAwKTsKKwlvdXR3KDAsIHVoY2ktPmlvX2FkZHIgKyBVU0JJTlRSKTsKKworCS8qIEdsb2JhbCByZXNldCBmb3IgNTBtcyAqLworCXVoY2ktPnN0YXRlID0gVUhDSV9SRVNFVDsKKwlvdXR3KFVTQkNNRF9HUkVTRVQsIGlvX2FkZHIgKyBVU0JDTUQpOworCW1zbGVlcCg1MCk7CisJb3V0dygwLCBpb19hZGRyICsgVVNCQ01EKTsKKworCS8qIEFub3RoZXIgMTBtcyBkZWxheSAqLworCW1zbGVlcCgxMCk7CisJdWhjaS0+cmVzdW1lX2RldGVjdCA9IDA7CisJdWhjaS0+aXNfc3RvcHBlZCA9IFVIQ0lfSVNfU1RPUFBFRDsKK30KKworc3RhdGljIHZvaWQgc3VzcGVuZF9oYyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCit7CisJdW5zaWduZWQgbG9uZyBpb19hZGRyID0gdWhjaS0+aW9fYWRkcjsKKworCWRldl9kYmcodWhjaV9kZXYodWhjaSksICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwl1aGNpLT5zdGF0ZSA9IFVIQ0lfU1VTUEVOREVEOworCXVoY2ktPnJlc3VtZV9kZXRlY3QgPSAwOworCW91dHcoVVNCQ01EX0VHU00sIGlvX2FkZHIgKyBVU0JDTUQpOworCisJLyogRklYTUU6IFdhaXQgZm9yIHRoZSBjb250cm9sbGVyIHRvIGFjdHVhbGx5IHN0b3AgKi8KKwl1aGNpX2dldF9jdXJyZW50X2ZyYW1lX251bWJlcih1aGNpKTsKKwl1aGNpLT5pc19zdG9wcGVkID0gVUhDSV9JU19TVE9QUEVEOworCisJdWhjaV9zY2FuX3NjaGVkdWxlKHVoY2ksIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCB3YWtldXBfaGMoc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCXVuc2lnbmVkIGxvbmcgaW9fYWRkciA9IHVoY2ktPmlvX2FkZHI7CisKKwlzd2l0Y2ggKHVoY2ktPnN0YXRlKSB7CisJCWNhc2UgVUhDSV9TVVNQRU5ERUQ6CQkvKiBTdGFydCB0aGUgcmVzdW1lICovCisJCQlkZXZfZGJnKHVoY2lfZGV2KHVoY2kpLCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkJCS8qIEdsb2JhbCByZXN1bWUgZm9yID49IDIwbXMgKi8KKwkJCW91dHcoVVNCQ01EX0ZHUiB8IFVTQkNNRF9FR1NNLCBpb19hZGRyICsgVVNCQ01EKTsKKwkJCXVoY2ktPnN0YXRlID0gVUhDSV9SRVNVTUlOR18xOworCQkJdWhjaS0+c3RhdGVfZW5kID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApOworCQkJdWhjaS0+aXNfc3RvcHBlZCA9IDA7CisJCQlicmVhazsKKworCQljYXNlIFVIQ0lfUkVTVU1JTkdfMToJCS8qIEVuZCBnbG9iYWwgcmVzdW1lICovCisJCQl1aGNpLT5zdGF0ZSA9IFVIQ0lfUkVTVU1JTkdfMjsKKwkJCW91dHcoMCwgaW9fYWRkciArIFVTQkNNRCk7CisJCQkvKiBGYWxscyB0aHJvdWdoICovCisKKwkJY2FzZSBVSENJX1JFU1VNSU5HXzI6CQkvKiBXYWl0IGZvciBFT1AgdG8gYmUgc2VudCAqLworCQkJaWYgKGludyhpb19hZGRyICsgVVNCQ01EKSAmIFVTQkNNRF9GR1IpCisJCQkJYnJlYWs7CisKKwkJCS8qIFJ1biBmb3IgYXQgbGVhc3QgMSBzZWNvbmQsIGFuZAorCQkJICogbWFyayBpdCBjb25maWd1cmVkIHdpdGggYSA2NC1ieXRlIG1heCBwYWNrZXQgKi8KKwkJCXVoY2ktPnN0YXRlID0gVUhDSV9SVU5OSU5HX0dSQUNFOworCQkJdWhjaS0+c3RhdGVfZW5kID0gamlmZmllcyArIEhaOworCQkJb3V0dyhVU0JDTURfUlMgfCBVU0JDTURfQ0YgfCBVU0JDTURfTUFYUCwKKwkJCQkJaW9fYWRkciArIFVTQkNNRCk7CisJCQlicmVhazsKKworCQljYXNlIFVIQ0lfUlVOTklOR19HUkFDRToJLyogTm93IGFsbG93ZWQgdG8gc3VzcGVuZCAqLworCQkJdWhjaS0+c3RhdGUgPSBVSENJX1JVTk5JTkc7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IHBvcnRzX2FjdGl2ZShzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCit7CisJdW5zaWduZWQgbG9uZyBpb19hZGRyID0gdWhjaS0+aW9fYWRkcjsKKwlpbnQgY29ubmVjdGlvbiA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdWhjaS0+cmhfbnVtcG9ydHM7IGkrKykKKwkJY29ubmVjdGlvbiB8PSAoaW53KGlvX2FkZHIgKyBVU0JQT1JUU0MxICsgaSAqIDIpICYgVVNCUE9SVFNDX0NDUyk7CisKKwlyZXR1cm4gY29ubmVjdGlvbjsKK30KKworc3RhdGljIGludCBzdXNwZW5kX2FsbG93ZWQoc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCXVuc2lnbmVkIGxvbmcgaW9fYWRkciA9IHVoY2ktPmlvX2FkZHI7CisJaW50IGk7CisKKwlpZiAodG9fcGNpX2Rldih1aGNpX2Rldih1aGNpKSktPnZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX0lOVEVMKQorCQlyZXR1cm4gMTsKKworCS8qIFNvbWUgb2YgSW50ZWwncyBVU0IgY29udHJvbGxlcnMgaGF2ZSBhIGJ1ZyB0aGF0IGNhdXNlcyBmYWxzZQorCSAqIHJlc3VtZSBpbmRpY2F0aW9ucyBpZiBhbnkgcG9ydCBoYXMgYW4gb3ZlciBjdXJyZW50IGNvbmRpdGlvbi4KKwkgKiBUbyBwcmV2ZW50IHByb2JsZW1zLCB3ZSB3aWxsIG5vdCBhbGxvdyBhIGdsb2JhbCBzdXNwZW5kIGlmCisJICogYW55IHBvcnRzIGFyZSBPQy4KKwkgKgorCSAqIFNvbWUgbW90aGVyYm9hcmRzIHVzaW5nIEludGVsJ3MgY2hpcHNldHMgKGJ1dCBub3QgdXNpbmcgYWxsCisJICogdGhlIFVTQiBwb3J0cykgYXBwZWFyIHRvIGhhcmR3aXJlIHRoZSBvdmVyIGN1cnJlbnQgaW5wdXRzIGFjdGl2ZQorCSAqIHRvIGRpc2FibGUgdGhlIFVTQiBwb3J0cy4KKwkgKi8KKworCS8qIGNoZWNrIGZvciBvdmVyIGN1cnJlbnQgY29uZGl0aW9uIG9uIGFueSBwb3J0ICovCisJZm9yIChpID0gMDsgaSA8IHVoY2ktPnJoX251bXBvcnRzOyBpKyspIHsKKwkJaWYgKGludyhpb19hZGRyICsgVVNCUE9SVFNDMSArIGkgKiAyKSAmIFVTQlBPUlRTQ19PQykKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBoY19zdGF0ZV90cmFuc2l0aW9ucyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCit7CisJc3dpdGNoICh1aGNpLT5zdGF0ZSkgeworCQljYXNlIFVIQ0lfUlVOTklORzoKKworCQkJLyogZ2xvYmFsIHN1c3BlbmQgaWYgbm90aGluZyBjb25uZWN0ZWQgZm9yIDEgc2Vjb25kICovCisJCQlpZiAoIXBvcnRzX2FjdGl2ZSh1aGNpKSAmJiBzdXNwZW5kX2FsbG93ZWQodWhjaSkpIHsKKwkJCQl1aGNpLT5zdGF0ZSA9IFVIQ0lfU1VTUEVORElOR19HUkFDRTsKKwkJCQl1aGNpLT5zdGF0ZV9lbmQgPSBqaWZmaWVzICsgSFo7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFVIQ0lfU1VTUEVORElOR19HUkFDRToKKwkJCWlmIChwb3J0c19hY3RpdmUodWhjaSkpCisJCQkJdWhjaS0+c3RhdGUgPSBVSENJX1JVTk5JTkc7CisJCQllbHNlIGlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHVoY2ktPnN0YXRlX2VuZCkpCisJCQkJc3VzcGVuZF9oYyh1aGNpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVUhDSV9TVVNQRU5ERUQ6CisKKwkJCS8qIHdha2V1cCBpZiByZXF1ZXN0ZWQgYnkgYSBkZXZpY2UgKi8KKwkJCWlmICh1aGNpLT5yZXN1bWVfZGV0ZWN0KQorCQkJCXdha2V1cF9oYyh1aGNpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVUhDSV9SRVNVTUlOR18xOgorCQljYXNlIFVIQ0lfUkVTVU1JTkdfMjoKKwkJY2FzZSBVSENJX1JVTk5JTkdfR1JBQ0U6CisJCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB1aGNpLT5zdGF0ZV9lbmQpKQorCQkJCXdha2V1cF9oYyh1aGNpKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBTdG9yZSB0aGUgY3VycmVudCBmcmFtZSBudW1iZXIgaW4gdWhjaS0+ZnJhbWVfbnVtYmVyIGlmIHRoZSBjb250cm9sbGVyCisgKiBpcyBydW5ubmluZworICovCitzdGF0aWMgdm9pZCB1aGNpX2dldF9jdXJyZW50X2ZyYW1lX251bWJlcihzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCit7CisJaWYgKCF1aGNpLT5pc19zdG9wcGVkKQorCQl1aGNpLT5mcmFtZV9udW1iZXIgPSBpbncodWhjaS0+aW9fYWRkciArIFVTQkZSTlVNKTsKK30KKworc3RhdGljIGludCBzdGFydF9oYyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCit7CisJdW5zaWduZWQgbG9uZyBpb19hZGRyID0gdWhjaS0+aW9fYWRkcjsKKwlpbnQgdGltZW91dCA9IDEwOworCisJLyoKKwkgKiBSZXNldCB0aGUgSEMgLSB0aGlzIHdpbGwgZm9yY2UgdXMgdG8gZ2V0IGEKKwkgKiBuZXcgbm90aWZpY2F0aW9uIG9mIGFueSBhbHJlYWR5IGNvbm5lY3RlZAorCSAqIHBvcnRzIGR1ZSB0byB0aGUgdmlydHVhbCBkaXNjb25uZWN0IHRoYXQgaXQKKwkgKiBpbXBsaWVzLgorCSAqLworCW91dHcoVVNCQ01EX0hDUkVTRVQsIGlvX2FkZHIgKyBVU0JDTUQpOworCXdoaWxlIChpbncoaW9fYWRkciArIFVTQkNNRCkgJiBVU0JDTURfSENSRVNFVCkgeworCQlpZiAoLS10aW1lb3V0IDwgMCkgeworCQkJZGV2X2Vycih1aGNpX2Rldih1aGNpKSwgIlVTQkNNRF9IQ1JFU0VUIHRpbWVkIG91dCFcbiIpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwkJbXNsZWVwKDEpOworCX0KKworCS8qIE1hcmsgY29udHJvbGxlciBhcyBydW5uaW5nIGJlZm9yZSB3ZSBlbmFibGUgaW50ZXJydXB0cyAqLworCXVoY2lfdG9faGNkKHVoY2kpLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisKKwkvKiBUdXJuIG9uIFBJUlEgYW5kIGFsbCBpbnRlcnJ1cHRzICovCisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHRvX3BjaV9kZXYodWhjaV9kZXYodWhjaSkpLCBVU0JMRUdTVVAsCisJCQlVU0JMRUdTVVBfREVGQVVMVCk7CisJb3V0dyhVU0JJTlRSX1RJTUVPVVQgfCBVU0JJTlRSX1JFU1VNRSB8IFVTQklOVFJfSU9DIHwgVVNCSU5UUl9TUCwKKwkJaW9fYWRkciArIFVTQklOVFIpOworCisJLyogU3RhcnQgYXQgZnJhbWUgMCAqLworCW91dHcoMCwgaW9fYWRkciArIFVTQkZSTlVNKTsKKwlvdXRsKHVoY2ktPmZsLT5kbWFfaGFuZGxlLCBpb19hZGRyICsgVVNCRkxCQVNFQUREKTsKKworCS8qIFJ1biBhbmQgbWFyayBpdCBjb25maWd1cmVkIHdpdGggYSA2NC1ieXRlIG1heCBwYWNrZXQgKi8KKwl1aGNpLT5zdGF0ZSA9IFVIQ0lfUlVOTklOR19HUkFDRTsKKwl1aGNpLT5zdGF0ZV9lbmQgPSBqaWZmaWVzICsgSFo7CisJb3V0dyhVU0JDTURfUlMgfCBVU0JDTURfQ0YgfCBVU0JDTURfTUFYUCwgaW9fYWRkciArIFVTQkNNRCk7CisJdWhjaS0+aXNfc3RvcHBlZCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERlLWFsbG9jYXRlIGFsbCByZXNvdXJjZXMKKyAqLworc3RhdGljIHZvaWQgcmVsZWFzZV91aGNpKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBVSENJX05VTV9TS0VMUUg7IGkrKykKKwkJaWYgKHVoY2ktPnNrZWxxaFtpXSkgeworCQkJdWhjaV9mcmVlX3FoKHVoY2ksIHVoY2ktPnNrZWxxaFtpXSk7CisJCQl1aGNpLT5za2VscWhbaV0gPSBOVUxMOworCQl9CisKKwlpZiAodWhjaS0+dGVybV90ZCkgeworCQl1aGNpX2ZyZWVfdGQodWhjaSwgdWhjaS0+dGVybV90ZCk7CisJCXVoY2ktPnRlcm1fdGQgPSBOVUxMOworCX0KKworCWlmICh1aGNpLT5xaF9wb29sKSB7CisJCWRtYV9wb29sX2Rlc3Ryb3kodWhjaS0+cWhfcG9vbCk7CisJCXVoY2ktPnFoX3Bvb2wgPSBOVUxMOworCX0KKworCWlmICh1aGNpLT50ZF9wb29sKSB7CisJCWRtYV9wb29sX2Rlc3Ryb3kodWhjaS0+dGRfcG9vbCk7CisJCXVoY2ktPnRkX3Bvb2wgPSBOVUxMOworCX0KKworCWlmICh1aGNpLT5mbCkgeworCQlkbWFfZnJlZV9jb2hlcmVudCh1aGNpX2Rldih1aGNpKSwgc2l6ZW9mKCp1aGNpLT5mbCksCisJCQkJdWhjaS0+ZmwsIHVoY2ktPmZsLT5kbWFfaGFuZGxlKTsKKwkJdWhjaS0+ZmwgPSBOVUxMOworCX0KKworCWlmICh1aGNpLT5kZW50cnkpIHsKKwkJZGVidWdmc19yZW1vdmUodWhjaS0+ZGVudHJ5KTsKKwkJdWhjaS0+ZGVudHJ5ID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdWhjaV9yZXNldChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CisKKwl1aGNpLT5pb19hZGRyID0gKHVuc2lnbmVkIGxvbmcpIGhjZC0+cnNyY19zdGFydDsKKworCS8qIEtpY2sgQklPUyBvZmYgdGhpcyBoYXJkd2FyZSBhbmQgcmVzZXQsIHNvIHdlIHdvbid0IGdldAorCSAqIGludGVycnVwdHMgZnJvbSBhbnkgcHJldmlvdXMgc2V0dXAuCisJICovCisJcmVzZXRfaGModWhjaSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIGZyYW1lIGxpc3QsIGFuZCB0aGVuIHNldHVwIHRoZSBza2VsZXRvbgorICoKKyAqIFRoZSBoYXJkd2FyZSBkb2Vzbid0IHJlYWxseSBrbm93IGFueSBkaWZmZXJlbmNlCisgKiBpbiB0aGUgcXVldWVzLCBidXQgdGhlIG9yZGVyIGRvZXMgbWF0dGVyIGZvciB0aGUKKyAqIHByb3RvY29scyBoaWdoZXIgdXAuIFRoZSBvcmRlciBpczoKKyAqCisgKiAgLSBhbnkgaXNvY2hyb25vdXMgZXZlbnRzIGhhbmRsZWQgYmVmb3JlIGFueQorICogICAgb2YgdGhlIHF1ZXVlcy4gV2UgZG9uJ3QgZG8gdGhhdCBoZXJlLCBiZWNhdXNlCisgKiAgICB3ZSdsbCBjcmVhdGUgdGhlIGFjdHVhbCBURCBlbnRyaWVzIG9uIGRlbWFuZC4KKyAqICAtIFRoZSBmaXJzdCBxdWV1ZSBpcyB0aGUgaW50ZXJydXB0IHF1ZXVlLgorICogIC0gVGhlIHNlY29uZCBxdWV1ZSBpcyB0aGUgY29udHJvbCBxdWV1ZSwgc3BsaXQgaW50byBsb3ctIGFuZCBmdWxsLXNwZWVkCisgKiAgLSBUaGUgdGhpcmQgcXVldWUgaXMgYnVsayBxdWV1ZS4KKyAqICAtIFRoZSBmb3VydGggcXVldWUgaXMgdGhlIGJhbmR3aWR0aCByZWNsYW1hdGlvbiBxdWV1ZSwgd2hpY2ggbG9vcHMgYmFjaworICogICAgdG8gdGhlIGZ1bGwtc3BlZWQgY29udHJvbCBxdWV1ZS4KKyAqLworc3RhdGljIGludCB1aGNpX3N0YXJ0KHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IHVoY2lfaGNkICp1aGNpID0gaGNkX3RvX3VoY2koaGNkKTsKKwlpbnQgcmV0dmFsID0gLUVCVVNZOworCWludCBpLCBwb3J0OworCXVuc2lnbmVkIGlvX3NpemU7CisJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKworCWlvX3NpemUgPSAodW5zaWduZWQpIGhjZC0+cnNyY19sZW47CisKKwlkZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGhjZC0+c2VsZi5idXNfbmFtZSwgU19JRlJFR3xTX0lSVUdPfFNfSVdVU1IsIHVoY2lfZGVidWdmc19yb290LCB1aGNpLCAmdWhjaV9kZWJ1Z19vcGVyYXRpb25zKTsKKwlpZiAoIWRlbnRyeSkgeworCQlkZXZfZXJyKHVoY2lfZGV2KHVoY2kpLCAiY291bGRuJ3QgY3JlYXRlIHVoY2kgZGVidWdmcyBlbnRyeVxuIik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2NyZWF0ZV9kZWJ1Z19lbnRyeTsKKwl9CisJdWhjaS0+ZGVudHJ5ID0gZGVudHJ5OworCisJdWhjaS0+ZnNiciA9IDA7CisJdWhjaS0+ZnNicnRpbWVvdXQgPSAwOworCisJc3Bpbl9sb2NrX2luaXQoJnVoY2ktPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZ1aGNpLT5xaF9yZW1vdmVfbGlzdCk7CisKKwlJTklUX0xJU1RfSEVBRCgmdWhjaS0+dGRfcmVtb3ZlX2xpc3QpOworCisJSU5JVF9MSVNUX0hFQUQoJnVoY2ktPnVyYl9yZW1vdmVfbGlzdCk7CisKKwlJTklUX0xJU1RfSEVBRCgmdWhjaS0+dXJiX2xpc3QpOworCisJSU5JVF9MSVNUX0hFQUQoJnVoY2ktPmNvbXBsZXRlX2xpc3QpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmdWhjaS0+d2FpdHFoKTsKKworCXVoY2ktPmZsID0gZG1hX2FsbG9jX2NvaGVyZW50KHVoY2lfZGV2KHVoY2kpLCBzaXplb2YoKnVoY2ktPmZsKSwKKwkJCSZkbWFfaGFuZGxlLCAwKTsKKwlpZiAoIXVoY2ktPmZsKSB7CisJCWRldl9lcnIodWhjaV9kZXYodWhjaSksICJ1bmFibGUgdG8gYWxsb2NhdGUgIgorCQkJCSJjb25zaXN0ZW50IG1lbW9yeSBmb3IgZnJhbWUgbGlzdFxuIik7CisJCWdvdG8gZXJyX2FsbG9jX2ZsOworCX0KKworCW1lbXNldCgodm9pZCAqKXVoY2ktPmZsLCAwLCBzaXplb2YoKnVoY2ktPmZsKSk7CisKKwl1aGNpLT5mbC0+ZG1hX2hhbmRsZSA9IGRtYV9oYW5kbGU7CisKKwl1aGNpLT50ZF9wb29sID0gZG1hX3Bvb2xfY3JlYXRlKCJ1aGNpX3RkIiwgdWhjaV9kZXYodWhjaSksCisJCQlzaXplb2Yoc3RydWN0IHVoY2lfdGQpLCAxNiwgMCk7CisJaWYgKCF1aGNpLT50ZF9wb29sKSB7CisJCWRldl9lcnIodWhjaV9kZXYodWhjaSksICJ1bmFibGUgdG8gY3JlYXRlIHRkIGRtYV9wb29sXG4iKTsKKwkJZ290byBlcnJfY3JlYXRlX3RkX3Bvb2w7CisJfQorCisJdWhjaS0+cWhfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZSgidWhjaV9xaCIsIHVoY2lfZGV2KHVoY2kpLAorCQkJc2l6ZW9mKHN0cnVjdCB1aGNpX3FoKSwgMTYsIDApOworCWlmICghdWhjaS0+cWhfcG9vbCkgeworCQlkZXZfZXJyKHVoY2lfZGV2KHVoY2kpLCAidW5hYmxlIHRvIGNyZWF0ZSBxaCBkbWFfcG9vbFxuIik7CisJCWdvdG8gZXJyX2NyZWF0ZV9xaF9wb29sOworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIHJvb3QgaHViICovCisKKwkvKiBVSENJIHNwZWNzIHNheXMgZGV2aWNlcyBtdXN0IGhhdmUgMiBwb3J0cywgYnV0IGdvZXMgb24gdG8gc2F5ICovCisJLyogIHRoZXkgbWF5IGhhdmUgbW9yZSBidXQgZ2l2ZSBubyB3YXkgdG8gZGV0ZXJtaW5lIGhvdyBtYW55IHRoZXkgKi8KKwkvKiAgaGF2ZS4gSG93ZXZlciwgYWNjb3JkaW5nIHRvIHRoZSBVSENJIHNwZWMsIEJpdCA3IGlzIGFsd2F5cyBzZXQgKi8KKwkvKiAgdG8gMS4gU28gd2UgdHJ5IHRvIHVzZSB0aGlzIHRvIG91ciBhZHZhbnRhZ2UgKi8KKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgKGlvX3NpemUgLSAweDEwKSAvIDI7IHBvcnQrKykgeworCQl1bnNpZ25lZCBpbnQgcG9ydHN0YXR1czsKKworCQlwb3J0c3RhdHVzID0gaW53KHVoY2ktPmlvX2FkZHIgKyAweDEwICsgKHBvcnQgKiAyKSk7CisJCWlmICghKHBvcnRzdGF0dXMgJiAweDAwODApKQorCQkJYnJlYWs7CisJfQorCWlmIChkZWJ1ZykKKwkJZGV2X2luZm8odWhjaV9kZXYodWhjaSksICJkZXRlY3RlZCAlZCBwb3J0c1xuIiwgcG9ydCk7CisKKwkvKiBUaGlzIGlzIGV4cGVyaW1lbnRhbCBzbyBhbnl0aGluZyBsZXNzIHRoYW4gMiBvciBncmVhdGVyIHRoYW4gOCBpcyAqLworCS8qICBzb21ldGhpbmcgd2VpcmQgYW5kIHdlJ2xsIGlnbm9yZSBpdCAqLworCWlmIChwb3J0IDwgMiB8fCBwb3J0ID4gVUhDSV9SSF9NQVhDSElMRCkgeworCQlkZXZfaW5mbyh1aGNpX2Rldih1aGNpKSwgInBvcnQgY291bnQgbWlzZGV0ZWN0ZWQ/ICIKKwkJCQkiZm9yY2luZyB0byAyIHBvcnRzXG4iKTsKKwkJcG9ydCA9IDI7CisJfQorCisJdWhjaS0+cmhfbnVtcG9ydHMgPSBwb3J0OworCisJdWRldiA9IHVzYl9hbGxvY19kZXYoTlVMTCwgJmhjZC0+c2VsZiwgMCk7CisJaWYgKCF1ZGV2KSB7CisJCWRldl9lcnIodWhjaV9kZXYodWhjaSksICJ1bmFibGUgdG8gYWxsb2NhdGUgcm9vdCBodWJcbiIpOworCQlnb3RvIGVycl9hbGxvY19yb290X2h1YjsKKwl9CisKKwl1aGNpLT50ZXJtX3RkID0gdWhjaV9hbGxvY190ZCh1aGNpLCB1ZGV2KTsKKwlpZiAoIXVoY2ktPnRlcm1fdGQpIHsKKwkJZGV2X2Vycih1aGNpX2Rldih1aGNpKSwgInVuYWJsZSB0byBhbGxvY2F0ZSB0ZXJtaW5hdGluZyBURFxuIik7CisJCWdvdG8gZXJyX2FsbG9jX3Rlcm1fdGQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFVIQ0lfTlVNX1NLRUxRSDsgaSsrKSB7CisJCXVoY2ktPnNrZWxxaFtpXSA9IHVoY2lfYWxsb2NfcWgodWhjaSwgdWRldik7CisJCWlmICghdWhjaS0+c2tlbHFoW2ldKSB7CisJCQlkZXZfZXJyKHVoY2lfZGV2KHVoY2kpLCAidW5hYmxlIHRvIGFsbG9jYXRlIFFIXG4iKTsKKwkJCWdvdG8gZXJyX2FsbG9jX3NrZWxxaDsKKwkJfQorCX0KKworCS8qCisJICogOCBJbnRlcnJ1cHQgcXVldWVzOyBsaW5rIGFsbCBoaWdoZXIgaW50IHF1ZXVlcyB0byBpbnQxLAorCSAqIHRoZW4gbGluayBpbnQxIHRvIGNvbnRyb2wgYW5kIGNvbnRyb2wgdG8gYnVsaworCSAqLworCXVoY2ktPnNrZWxfaW50MTI4X3FoLT5saW5rID0KKwkJCXVoY2ktPnNrZWxfaW50NjRfcWgtPmxpbmsgPQorCQkJdWhjaS0+c2tlbF9pbnQzMl9xaC0+bGluayA9CisJCQl1aGNpLT5za2VsX2ludDE2X3FoLT5saW5rID0KKwkJCXVoY2ktPnNrZWxfaW50OF9xaC0+bGluayA9CisJCQl1aGNpLT5za2VsX2ludDRfcWgtPmxpbmsgPQorCQkJdWhjaS0+c2tlbF9pbnQyX3FoLT5saW5rID0KKwkJCWNwdV90b19sZTMyKHVoY2ktPnNrZWxfaW50MV9xaC0+ZG1hX2hhbmRsZSkgfCBVSENJX1BUUl9RSDsKKwl1aGNpLT5za2VsX2ludDFfcWgtPmxpbmsgPSBjcHVfdG9fbGUzMih1aGNpLT5za2VsX2xzX2NvbnRyb2xfcWgtPmRtYV9oYW5kbGUpIHwgVUhDSV9QVFJfUUg7CisKKwl1aGNpLT5za2VsX2xzX2NvbnRyb2xfcWgtPmxpbmsgPSBjcHVfdG9fbGUzMih1aGNpLT5za2VsX2ZzX2NvbnRyb2xfcWgtPmRtYV9oYW5kbGUpIHwgVUhDSV9QVFJfUUg7CisJdWhjaS0+c2tlbF9mc19jb250cm9sX3FoLT5saW5rID0gY3B1X3RvX2xlMzIodWhjaS0+c2tlbF9idWxrX3FoLT5kbWFfaGFuZGxlKSB8IFVIQ0lfUFRSX1FIOworCXVoY2ktPnNrZWxfYnVsa19xaC0+bGluayA9IGNwdV90b19sZTMyKHVoY2ktPnNrZWxfdGVybV9xaC0+ZG1hX2hhbmRsZSkgfCBVSENJX1BUUl9RSDsKKworCS8qIFRoaXMgZHVtbXkgVEQgaXMgdG8gd29yayBhcm91bmQgYSBidWcgaW4gSW50ZWwgUElJWCBjb250cm9sbGVycyAqLworCXVoY2lfZmlsbF90ZCh1aGNpLT50ZXJtX3RkLCAwLCAoVUhDSV9OVUxMX0RBVEFfU0laRSA8PCAyMSkgfAorCQkoMHg3ZiA8PCBURF9UT0tFTl9ERVZBRERSX1NISUZUKSB8IFVTQl9QSURfSU4sIDApOworCXVoY2ktPnRlcm1fdGQtPmxpbmsgPSBjcHVfdG9fbGUzMih1aGNpLT50ZXJtX3RkLT5kbWFfaGFuZGxlKTsKKworCXVoY2ktPnNrZWxfdGVybV9xaC0+bGluayA9IFVIQ0lfUFRSX1RFUk07CisJdWhjaS0+c2tlbF90ZXJtX3FoLT5lbGVtZW50ID0gY3B1X3RvX2xlMzIodWhjaS0+dGVybV90ZC0+ZG1hX2hhbmRsZSk7CisKKwkvKgorCSAqIEZpbGwgdGhlIGZyYW1lIGxpc3Q6IG1ha2UgYWxsIGVudHJpZXMgcG9pbnQgdG8gdGhlIHByb3BlcgorCSAqIGludGVycnVwdCBxdWV1ZS4KKwkgKgorCSAqIFRoZSBpbnRlcnJ1cHQgcXVldWVzIHdpbGwgYmUgaW50ZXJsZWF2ZWQgYXMgZXZlbmx5IGFzIHBvc3NpYmxlLgorCSAqIFRoZXJlJ3Mgbm90IG11Y2ggdG8gYmUgZG9uZSBhYm91dCBwZXJpb2QtMSBpbnRlcnJ1cHRzOyB0aGV5IGhhdmUKKwkgKiB0byBvY2N1ciBpbiBldmVyeSBmcmFtZS4gIEJ1dCB3ZSBjYW4gc2NoZWR1bGUgcGVyaW9kLTIgaW50ZXJydXB0cworCSAqIGluIG9kZC1udW1iZXJlZCBmcmFtZXMsIHBlcmlvZC00IGludGVycnVwdHMgaW4gZnJhbWVzIGNvbmdydWVudAorCSAqIHRvIDIgKG1vZCA0KSwgYW5kIHNvIG9uLiAgVGhpcyB3YXkgZWFjaCBmcmFtZSBvbmx5IGhhcyB0d28KKwkgKiBpbnRlcnJ1cHQgUUhzLCB3aGljaCB3aWxsIGhlbHAgc3ByZWFkIG91dCBiYW5kd2lkdGggdXRpbGl6YXRpb24uCisJICovCisJZm9yIChpID0gMDsgaSA8IFVIQ0lfTlVNRlJBTUVTOyBpKyspIHsKKwkJaW50IGlycTsKKworCQkvKgorCQkgKiBmZnMgKEZpbmQgRmlyc3QgYml0IFNldCkgZG9lcyBleGFjdGx5IHdoYXQgd2UgbmVlZDoKKwkJICogMSwzLDUsLi4uICA9PiBmZnMgPSAwID0+IHVzZSBza2VsX2ludDJfcWggPSBza2VscWhbNl0sCisJCSAqIDIsNiwxMCwuLi4gPT4gZmZzID0gMSA9PiB1c2Ugc2tlbF9pbnQ0X3FoID0gc2tlbHFoWzVdLCBldGMuCisJCSAqIGZmcyA+IDYgPT4gbm90IG9uIGFueSBoaWdoLXBlcmlvZCBxdWV1ZSwgc28gdXNlCisJCSAqCXNrZWxfaW50MV9xaCA9IHNrZWxxaFs3XS4KKwkJICogQWRkIFVIQ0lfTlVNRlJBTUVTIHRvIGluc3VyZSBhdCBsZWFzdCBvbmUgYml0IGlzIHNldC4KKwkJICovCisJCWlycSA9IDYgLSAoaW50KSBfX2ZmcyhpICsgVUhDSV9OVU1GUkFNRVMpOworCQlpZiAoaXJxIDwgMCkKKwkJCWlycSA9IDc7CisKKwkJLyogT25seSBwbGFjZSB3ZSBkb24ndCB1c2UgdGhlIGZyYW1lIGxpc3Qgcm91dGluZXMgKi8KKwkJdWhjaS0+ZmwtPmZyYW1lW2ldID0gVUhDSV9QVFJfUUggfAorCQkJCWNwdV90b19sZTMyKHVoY2ktPnNrZWxxaFtpcnFdLT5kbWFfaGFuZGxlKTsKKwl9CisKKwkvKgorCSAqIFNvbWUgYXJjaGl0ZWN0dXJlcyByZXF1aXJlIGEgZnVsbCBtYigpIHRvIGVuZm9yY2UgY29tcGxldGlvbiBvZgorCSAqIHRoZSBtZW1vcnkgd3JpdGVzIGFib3ZlIGJlZm9yZSB0aGUgSS9PIHRyYW5zZmVycyBpbiBzdGFydF9oYygpLgorCSAqLworCW1iKCk7CisJaWYgKChyZXR2YWwgPSBzdGFydF9oYyh1aGNpKSkgIT0gMCkKKwkJZ290byBlcnJfYWxsb2Nfc2tlbHFoOworCisJaW5pdF9zdGFsbF90aW1lcihoY2QpOworCisJdWRldi0+c3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKKworCWlmICh1c2JfaGNkX3JlZ2lzdGVyX3Jvb3RfaHViKHVkZXYsIGhjZCkgIT0gMCkgeworCQlkZXZfZXJyKHVoY2lfZGV2KHVoY2kpLCAidW5hYmxlIHRvIHN0YXJ0IHJvb3QgaHViXG4iKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJfc3RhcnRfcm9vdF9odWI7CisJfQorCisJcmV0dXJuIDA7CisKKy8qCisgKiBlcnJvciBleGl0czoKKyAqLworZXJyX3N0YXJ0X3Jvb3RfaHViOgorCXJlc2V0X2hjKHVoY2kpOworCisJZGVsX3RpbWVyX3N5bmMoJnVoY2ktPnN0YWxsX3RpbWVyKTsKKworZXJyX2FsbG9jX3NrZWxxaDoKKwlmb3IgKGkgPSAwOyBpIDwgVUhDSV9OVU1fU0tFTFFIOyBpKyspCisJCWlmICh1aGNpLT5za2VscWhbaV0pIHsKKwkJCXVoY2lfZnJlZV9xaCh1aGNpLCB1aGNpLT5za2VscWhbaV0pOworCQkJdWhjaS0+c2tlbHFoW2ldID0gTlVMTDsKKwkJfQorCisJdWhjaV9mcmVlX3RkKHVoY2ksIHVoY2ktPnRlcm1fdGQpOworCXVoY2ktPnRlcm1fdGQgPSBOVUxMOworCitlcnJfYWxsb2NfdGVybV90ZDoKKwl1c2JfcHV0X2Rldih1ZGV2KTsKKworZXJyX2FsbG9jX3Jvb3RfaHViOgorCWRtYV9wb29sX2Rlc3Ryb3kodWhjaS0+cWhfcG9vbCk7CisJdWhjaS0+cWhfcG9vbCA9IE5VTEw7CisKK2Vycl9jcmVhdGVfcWhfcG9vbDoKKwlkbWFfcG9vbF9kZXN0cm95KHVoY2ktPnRkX3Bvb2wpOworCXVoY2ktPnRkX3Bvb2wgPSBOVUxMOworCitlcnJfY3JlYXRlX3RkX3Bvb2w6CisJZG1hX2ZyZWVfY29oZXJlbnQodWhjaV9kZXYodWhjaSksIHNpemVvZigqdWhjaS0+ZmwpLAorCQkJdWhjaS0+ZmwsIHVoY2ktPmZsLT5kbWFfaGFuZGxlKTsKKwl1aGNpLT5mbCA9IE5VTEw7CisKK2Vycl9hbGxvY19mbDoKKwlkZWJ1Z2ZzX3JlbW92ZSh1aGNpLT5kZW50cnkpOworCXVoY2ktPmRlbnRyeSA9IE5VTEw7CisKK2Vycl9jcmVhdGVfZGVidWdfZW50cnk6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgdWhjaV9zdG9wKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IHVoY2lfaGNkICp1aGNpID0gaGNkX3RvX3VoY2koaGNkKTsKKworCWRlbF90aW1lcl9zeW5jKCZ1aGNpLT5zdGFsbF90aW1lcik7CisJcmVzZXRfaGModWhjaSk7CisKKwlzcGluX2xvY2tfaXJxKCZ1aGNpLT5sb2NrKTsKKwl1aGNpX3NjYW5fc2NoZWR1bGUodWhjaSwgTlVMTCk7CisJc3Bpbl91bmxvY2tfaXJxKCZ1aGNpLT5sb2NrKTsKKwkKKwlyZWxlYXNlX3VoY2kodWhjaSk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgdWhjaV9zdXNwZW5kKHN0cnVjdCB1c2JfaGNkICpoY2QsIHUzMiBzdGF0ZSkKK3sKKwlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBoY2RfdG9fdWhjaShoY2QpOworCisJc3Bpbl9sb2NrX2lycSgmdWhjaS0+bG9jayk7CisKKwkvKiBEb24ndCB0cnkgdG8gc3VzcGVuZCBicm9rZW4gbW90aGVyYm9hcmRzLCByZXNldCBpbnN0ZWFkICovCisJaWYgKHN1c3BlbmRfYWxsb3dlZCh1aGNpKSkKKwkJc3VzcGVuZF9oYyh1aGNpKTsKKwllbHNlIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZ1aGNpLT5sb2NrKTsKKwkJcmVzZXRfaGModWhjaSk7CisJCXNwaW5fbG9ja19pcnEoJnVoY2ktPmxvY2spOworCQl1aGNpX3NjYW5fc2NoZWR1bGUodWhjaSwgTlVMTCk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxKCZ1aGNpLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1aGNpX3Jlc3VtZShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CisJaW50IHJjOworCisJcGNpX3NldF9tYXN0ZXIodG9fcGNpX2Rldih1aGNpX2Rldih1aGNpKSkpOworCisJc3Bpbl9sb2NrX2lycSgmdWhjaS0+bG9jayk7CisKKwlpZiAodWhjaS0+c3RhdGUgPT0gVUhDSV9TVVNQRU5ERUQpIHsKKworCQkvKgorCQkgKiBTb21lIHN5c3RlbXMgZG9uJ3QgbWFpbnRhaW4gdGhlIFVIQ0kgcmVnaXN0ZXIgdmFsdWVzCisJCSAqIGR1cmluZyBhIFBNIHN1c3BlbmQvcmVzdW1lIGN5Y2xlLCBzbyByZWluaXRpYWxpemUKKwkJICogdGhlIEZyYW1lIE51bWJlciwgRnJhbWVsaXN0IEJhc2UgQWRkcmVzcywgSW50ZXJydXB0CisJCSAqIEVuYWJsZSwgYW5kIExlZ2FjeSBTdXBwb3J0IHJlZ2lzdGVycy4KKwkJICovCisJCXBjaV93cml0ZV9jb25maWdfd29yZCh0b19wY2lfZGV2KHVoY2lfZGV2KHVoY2kpKSwgVVNCTEVHU1VQLAorCQkJCTApOworCQlvdXR3KHVoY2ktPmZyYW1lX251bWJlciwgdWhjaS0+aW9fYWRkciArIFVTQkZSTlVNKTsKKwkJb3V0bCh1aGNpLT5mbC0+ZG1hX2hhbmRsZSwgdWhjaS0+aW9fYWRkciArIFVTQkZMQkFTRUFERCk7CisJCW91dHcoVVNCSU5UUl9USU1FT1VUIHwgVVNCSU5UUl9SRVNVTUUgfCBVU0JJTlRSX0lPQyB8CisJCQkJVVNCSU5UUl9TUCwgdWhjaS0+aW9fYWRkciArIFVTQklOVFIpOworCQl1aGNpLT5yZXN1bWVfZGV0ZWN0ID0gMTsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHRvX3BjaV9kZXYodWhjaV9kZXYodWhjaSkpLCBVU0JMRUdTVVAsCisJCQkJVVNCTEVHU1VQX0RFRkFVTFQpOworCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrX2lycSgmdWhjaS0+bG9jayk7CisJCXJlc2V0X2hjKHVoY2kpOworCQlpZiAoKHJjID0gc3RhcnRfaGModWhjaSkpICE9IDApCisJCQlyZXR1cm4gcmM7CisJCXNwaW5fbG9ja19pcnEoJnVoY2ktPmxvY2spOworCX0KKwloY2QtPnN0YXRlID0gSENfU1RBVEVfUlVOTklORzsKKworCXNwaW5fdW5sb2NrX2lycSgmdWhjaS0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyogV2FpdCB1bnRpbCBhbGwgdGhlIFVSQnMgZm9yIGEgcGFydGljdWxhciBkZXZpY2UvZW5kcG9pbnQgYXJlIGdvbmUgKi8KK3N0YXRpYyB2b2lkIHVoY2lfaGNkX2VuZHBvaW50X2Rpc2FibGUoc3RydWN0IHVzYl9oY2QgKmhjZCwKKwkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCkKK3sKKwlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBoY2RfdG9fdWhjaShoY2QpOworCisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHVoY2ktPndhaXRxaCwgbGlzdF9lbXB0eSgmZXAtPnVyYl9saXN0KSk7Cit9CisKK3N0YXRpYyBpbnQgdWhjaV9oY2RfZ2V0X2ZyYW1lX251bWJlcihzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CisJaW50IGZyYW1lX251bWJlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogTWluaW1pemUgbGF0ZW5jeSBieSBhdm9pZGluZyB0aGUgc3BpbmxvY2sgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcm1iKCk7CisJZnJhbWVfbnVtYmVyID0gKHVoY2ktPmlzX3N0b3BwZWQgPyB1aGNpLT5mcmFtZV9udW1iZXIgOgorCQkJaW53KHVoY2ktPmlvX2FkZHIgKyBVU0JGUk5VTSkpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gZnJhbWVfbnVtYmVyOworfQorCitzdGF0aWMgY29uc3QgY2hhciBoY2RfbmFtZVtdID0gInVoY2lfaGNkIjsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgdWhjaV9kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uID0JCWhjZF9uYW1lLAorCS5wcm9kdWN0X2Rlc2MgPQkJIlVIQ0kgSG9zdCBDb250cm9sbGVyIiwKKwkuaGNkX3ByaXZfc2l6ZSA9CXNpemVvZihzdHJ1Y3QgdWhjaV9oY2QpLAorCisJLyogR2VuZXJpYyBoYXJkd2FyZSBsaW5rYWdlICovCisJLmlycSA9CQkJdWhjaV9pcnEsCisJLmZsYWdzID0JCUhDRF9VU0IxMSwKKworCS8qIEJhc2ljIGxpZmVjeWNsZSBvcGVyYXRpb25zICovCisJLnJlc2V0ID0JCXVoY2lfcmVzZXQsCisJLnN0YXJ0ID0JCXVoY2lfc3RhcnQsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPQkJdWhjaV9zdXNwZW5kLAorCS5yZXN1bWUgPQkJdWhjaV9yZXN1bWUsCisjZW5kaWYKKwkuc3RvcCA9CQkJdWhjaV9zdG9wLAorCisJLnVyYl9lbnF1ZXVlID0JCXVoY2lfdXJiX2VucXVldWUsCisJLnVyYl9kZXF1ZXVlID0JCXVoY2lfdXJiX2RlcXVldWUsCisKKwkuZW5kcG9pbnRfZGlzYWJsZSA9CXVoY2lfaGNkX2VuZHBvaW50X2Rpc2FibGUsCisJLmdldF9mcmFtZV9udW1iZXIgPQl1aGNpX2hjZF9nZXRfZnJhbWVfbnVtYmVyLAorCisJLmh1Yl9zdGF0dXNfZGF0YSA9CXVoY2lfaHViX3N0YXR1c19kYXRhLAorCS5odWJfY29udHJvbCA9CQl1aGNpX2h1Yl9jb250cm9sLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHVoY2lfcGNpX2lkc1tdID0geyB7CisJLyogaGFuZGxlIGFueSBVU0IgVUhDSSBjb250cm9sbGVyICovCisJUENJX0RFVklDRV9DTEFTUygoKFBDSV9DTEFTU19TRVJJQUxfVVNCIDw8IDgpIHwgMHgwMCksIH4wKSwKKwkuZHJpdmVyX2RhdGEgPQkodW5zaWduZWQgbG9uZykgJnVoY2lfZHJpdmVyLAorCX0sIHsgLyogZW5kOiBhbGwgemVyb2VzICovIH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB1aGNpX3BjaV9pZHMpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdWhjaV9wY2lfZHJpdmVyID0geworCS5uYW1lID0JCShjaGFyICopaGNkX25hbWUsCisJLmlkX3RhYmxlID0JdWhjaV9wY2lfaWRzLAorCisJLnByb2JlID0JdXNiX2hjZF9wY2lfcHJvYmUsCisJLnJlbW92ZSA9CXVzYl9oY2RfcGNpX3JlbW92ZSwKKworI2lmZGVmCUNPTkZJR19QTQorCS5zdXNwZW5kID0JdXNiX2hjZF9wY2lfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX2hjZF9wY2lfcmVzdW1lLAorI2VuZGlmCS8qIFBNICovCit9OworIAorc3RhdGljIGludCBfX2luaXQgdWhjaV9oY2RfaW5pdCh2b2lkKQoreworCWludCByZXR2YWwgPSAtRU5PTUVNOworCisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04gIlxuIik7CisKKwlpZiAodXNiX2Rpc2FibGVkKCkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGRlYnVnKSB7CisJCWVycmJ1ZiA9IGttYWxsb2MoRVJSQlVGX0xFTiwgR0ZQX0tFUk5FTCk7CisJCWlmICghZXJyYnVmKQorCQkJZ290byBlcnJidWZfZmFpbGVkOworCX0KKworCXVoY2lfZGVidWdmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKCJ1aGNpIiwgTlVMTCk7CisJaWYgKCF1aGNpX2RlYnVnZnNfcm9vdCkKKwkJZ290byBkZWJ1Z19mYWlsZWQ7CisKKwl1aGNpX3VwX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJ1aGNpX3VyYl9wcml2IiwKKwkJc2l6ZW9mKHN0cnVjdCB1cmJfcHJpdiksIDAsIDAsIE5VTEwsIE5VTEwpOworCWlmICghdWhjaV91cF9jYWNoZXApCisJCWdvdG8gdXBfZmFpbGVkOworCisJcmV0dmFsID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmdWhjaV9wY2lfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGluaXRfZmFpbGVkOworCisJcmV0dXJuIDA7CisKK2luaXRfZmFpbGVkOgorCWlmIChrbWVtX2NhY2hlX2Rlc3Ryb3kodWhjaV91cF9jYWNoZXApKQorCQl3YXJuKCJub3QgYWxsIHVyYl9wcml2J3Mgd2VyZSBmcmVlZCEiKTsKKwordXBfZmFpbGVkOgorCWRlYnVnZnNfcmVtb3ZlKHVoY2lfZGVidWdmc19yb290KTsKKworZGVidWdfZmFpbGVkOgorCWlmIChlcnJidWYpCisJCWtmcmVlKGVycmJ1Zik7CisKK2VycmJ1Zl9mYWlsZWQ6CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdWhjaV9oY2RfY2xlYW51cCh2b2lkKSAKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnVoY2lfcGNpX2RyaXZlcik7CisJCisJaWYgKGttZW1fY2FjaGVfZGVzdHJveSh1aGNpX3VwX2NhY2hlcCkpCisJCXdhcm4oIm5vdCBhbGwgdXJiX3ByaXYncyB3ZXJlIGZyZWVkISIpOworCisJZGVidWdmc19yZW1vdmUodWhjaV9kZWJ1Z2ZzX3Jvb3QpOworCisJaWYgKGVycmJ1ZikKKwkJa2ZyZWUoZXJyYnVmKTsKK30KKworbW9kdWxlX2luaXQodWhjaV9oY2RfaW5pdCk7Cittb2R1bGVfZXhpdCh1aGNpX2hjZF9jbGVhbnVwKTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmggYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIyNTVkNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuaApAQCAtMCwwICsxLDQ1NCBAQAorI2lmbmRlZiBfX0xJTlVYX1VIQ0lfSENEX0gKKyNkZWZpbmUgX19MSU5VWF9VSENJX0hDRF9ICisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNkZWZpbmUgdXNiX3BhY2tldGlkKHBpcGUpCSh1c2JfcGlwZWluKHBpcGUpID8gVVNCX1BJRF9JTiA6IFVTQl9QSURfT1VUKQorI2RlZmluZSBQSVBFX0RFVkVQX01BU0sJCTB4MDAwN2ZmMDAKKworLyoKKyAqIFVuaXZlcnNhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGRhdGEgc3RydWN0dXJlcyBhbmQgZGVmaW5lcworICovCisKKy8qIENvbW1hbmQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVNCQ01ECQkwCisjZGVmaW5lICAgVVNCQ01EX1JTCQkweDAwMDEJLyogUnVuL1N0b3AgKi8KKyNkZWZpbmUgICBVU0JDTURfSENSRVNFVAkweDAwMDIJLyogSG9zdCByZXNldCAqLworI2RlZmluZSAgIFVTQkNNRF9HUkVTRVQJCTB4MDAwNAkvKiBHbG9iYWwgcmVzZXQgKi8KKyNkZWZpbmUgICBVU0JDTURfRUdTTQkJMHgwMDA4CS8qIEdsb2JhbCBTdXNwZW5kIE1vZGUgKi8KKyNkZWZpbmUgICBVU0JDTURfRkdSCQkweDAwMTAJLyogRm9yY2UgR2xvYmFsIFJlc3VtZSAqLworI2RlZmluZSAgIFVTQkNNRF9TV0RCRwkJMHgwMDIwCS8qIFNXIERlYnVnIG1vZGUgKi8KKyNkZWZpbmUgICBVU0JDTURfQ0YJCTB4MDA0MAkvKiBDb25maWcgRmxhZyAoc3cgb25seSkgKi8KKyNkZWZpbmUgICBVU0JDTURfTUFYUAkJMHgwMDgwCS8qIE1heCBQYWNrZXQgKDAgPSAzMiwgMSA9IDY0KSAqLworCisvKiBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVNCU1RTCQkyCisjZGVmaW5lICAgVVNCU1RTX1VTQklOVAkJMHgwMDAxCS8qIEludGVycnVwdCBkdWUgdG8gSU9DICovCisjZGVmaW5lICAgVVNCU1RTX0VSUk9SCQkweDAwMDIJLyogSW50ZXJydXB0IGR1ZSB0byBlcnJvciAqLworI2RlZmluZSAgIFVTQlNUU19SRAkJMHgwMDA0CS8qIFJlc3VtZSBEZXRlY3QgKi8KKyNkZWZpbmUgICBVU0JTVFNfSFNFCQkweDAwMDgJLyogSG9zdCBTeXN0ZW0gRXJyb3IgLSBiYXNpY2FsbHkgUENJIHByb2JsZW1zICovCisjZGVmaW5lICAgVVNCU1RTX0hDUEUJCTB4MDAxMAkvKiBIb3N0IENvbnRyb2xsZXIgUHJvY2VzcyBFcnJvciAtIHRoZSBzY3JpcHRzIHdlcmUgYnVnZ3kgKi8KKyNkZWZpbmUgICBVU0JTVFNfSENICQkweDAwMjAJLyogSEMgSGFsdGVkICovCisKKy8qIEludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVNCSU5UUgkJNAorI2RlZmluZSAgIFVTQklOVFJfVElNRU9VVAkweDAwMDEJLyogVGltZW91dC9DUkMgZXJyb3IgZW5hYmxlICovCisjZGVmaW5lICAgVVNCSU5UUl9SRVNVTUUJMHgwMDAyCS8qIFJlc3VtZSBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lICAgVVNCSU5UUl9JT0MJCTB4MDAwNAkvKiBJbnRlcnJ1cHQgT24gQ29tcGxldGUgZW5hYmxlICovCisjZGVmaW5lICAgVVNCSU5UUl9TUAkJMHgwMDA4CS8qIFNob3J0IHBhY2tldCBpbnRlcnJ1cHQgZW5hYmxlICovCisKKyNkZWZpbmUgVVNCRlJOVU0JNgorI2RlZmluZSBVU0JGTEJBU0VBREQJOAorI2RlZmluZSBVU0JTT0YJCTEyCisKKy8qIFVTQiBwb3J0IHN0YXR1cyBhbmQgY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVVNCUE9SVFNDMQkxNgorI2RlZmluZSBVU0JQT1JUU0MyCTE4CisjZGVmaW5lICAgVVNCUE9SVFNDX0NDUwkJMHgwMDAxCS8qIEN1cnJlbnQgQ29ubmVjdCBTdGF0dXMgKCJkZXZpY2UgcHJlc2VudCIpICovCisjZGVmaW5lICAgVVNCUE9SVFNDX0NTQwkJMHgwMDAyCS8qIENvbm5lY3QgU3RhdHVzIENoYW5nZSAqLworI2RlZmluZSAgIFVTQlBPUlRTQ19QRQkJMHgwMDA0CS8qIFBvcnQgRW5hYmxlICovCisjZGVmaW5lICAgVVNCUE9SVFNDX1BFQwkJMHgwMDA4CS8qIFBvcnQgRW5hYmxlIENoYW5nZSAqLworI2RlZmluZSAgIFVTQlBPUlRTQ19EUExVUwkweDAwMTAJLyogRCsgaGlnaCAobGluZSBzdGF0dXMpICovCisjZGVmaW5lICAgVVNCUE9SVFNDX0RNSU5VUwkweDAwMjAJLyogRC0gaGlnaCAobGluZSBzdGF0dXMpICovCisjZGVmaW5lICAgVVNCUE9SVFNDX1JECQkweDAwNDAJLyogUmVzdW1lIERldGVjdCAqLworI2RlZmluZSAgIFVTQlBPUlRTQ19SRVMxCTB4MDA4MAkvKiByZXNlcnZlZCwgYWx3YXlzIDEgKi8KKyNkZWZpbmUgICBVU0JQT1JUU0NfTFNEQQkweDAxMDAJLyogTG93IFNwZWVkIERldmljZSBBdHRhY2hlZCAqLworI2RlZmluZSAgIFVTQlBPUlRTQ19QUgkJMHgwMjAwCS8qIFBvcnQgUmVzZXQgKi8KKy8qIE9DIGFuZCBPQ0MgZnJvbSBJbnRlbCA0MzBUWCBhbmQgbGF0ZXIgKG5vdCBVSENJIDEuMWQgc3BlYykgKi8KKyNkZWZpbmUgICBVU0JQT1JUU0NfT0MJCTB4MDQwMAkvKiBPdmVyIEN1cnJlbnQgY29uZGl0aW9uICovCisjZGVmaW5lICAgVVNCUE9SVFNDX09DQwkJMHgwODAwCS8qIE92ZXIgQ3VycmVudCBDaGFuZ2UgUi9XQyAqLworI2RlZmluZSAgIFVTQlBPUlRTQ19TVVNQCTB4MTAwMAkvKiBTdXNwZW5kICovCisjZGVmaW5lICAgVVNCUE9SVFNDX1JFUzIJMHgyMDAwCS8qIHJlc2VydmVkLCB3cml0ZSB6ZXJvZXMgKi8KKyNkZWZpbmUgICBVU0JQT1JUU0NfUkVTMwkweDQwMDAJLyogcmVzZXJ2ZWQsIHdyaXRlIHplcm9lcyAqLworI2RlZmluZSAgIFVTQlBPUlRTQ19SRVM0CTB4ODAwMAkvKiByZXNlcnZlZCwgd3JpdGUgemVyb2VzICovCisKKy8qIExlZ2FjeSBzdXBwb3J0IHJlZ2lzdGVyICovCisjZGVmaW5lIFVTQkxFR1NVUAkJMHhjMAorI2RlZmluZSAgIFVTQkxFR1NVUF9ERUZBVUxUCTB4MjAwMAkvKiBvbmx5IFBJUlEgZW5hYmxlIHNldCAqLworCisjZGVmaW5lIFVIQ0lfTlVMTF9EQVRBX1NJWkUJMHg3RkYJLyogZm9yIFVIQ0kgY29udHJvbGxlciBURCAqLworCisjZGVmaW5lIFVIQ0lfUFRSX0JJVFMJCWNwdV90b19sZTMyKDB4MDAwRikKKyNkZWZpbmUgVUhDSV9QVFJfVEVSTQkJY3B1X3RvX2xlMzIoMHgwMDAxKQorI2RlZmluZSBVSENJX1BUUl9RSAkJY3B1X3RvX2xlMzIoMHgwMDAyKQorI2RlZmluZSBVSENJX1BUUl9ERVBUSAkJY3B1X3RvX2xlMzIoMHgwMDA0KQorI2RlZmluZSBVSENJX1BUUl9CUkVBRFRICWNwdV90b19sZTMyKDB4MDAwMCkKKworI2RlZmluZSBVSENJX05VTUZSQU1FUwkJMTAyNAkvKiBpbiB0aGUgZnJhbWUgbGlzdCBbYXJyYXldICovCisjZGVmaW5lIFVIQ0lfTUFYX1NPRl9OVU1CRVIJMjA0NwkvKiBpbiBhbiBTT0YgcGFja2V0ICovCisjZGVmaW5lIENBTl9TQ0hFRFVMRV9GUkFNRVMJMTAwMAkvKiBob3cgZmFyIGZ1dHVyZSBmcmFtZXMgY2FuIGJlIHNjaGVkdWxlZCAqLworCitzdHJ1Y3QgdWhjaV9mcmFtZV9saXN0IHsKKwlfX2xlMzIgZnJhbWVbVUhDSV9OVU1GUkFNRVNdOworCisJdm9pZCAqZnJhbWVfY3B1W1VIQ0lfTlVNRlJBTUVTXTsKKworCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKK307CisKK3N0cnVjdCB1cmJfcHJpdjsKKworLyoKKyAqIE9uZSByb2xlIG9mIGEgUUggaXMgdG8gaG9sZCBhIHF1ZXVlIG9mIFREcyBmb3Igc29tZSBlbmRwb2ludC4gIEVhY2ggUUggaXMKKyAqIHVzZWQgd2l0aCBvbmUgVVJCLCBhbmQgcWgtPmVsZW1lbnQgKHVwZGF0ZWQgYnkgdGhlIEhDKSBpcyBlaXRoZXI6CisgKiAgIC0gdGhlIG5leHQgdW5wcm9jZXNzZWQgVEQgZm9yIHRoZSBVUkIsIG9yCisgKiAgIC0gVUhDSV9QVFJfVEVSTSAod2hlbiB0aGVyZSdzIG5vIG1vcmUgdHJhZmZpYyBmb3IgdGhpcyBlbmRwb2ludCksIG9yCisgKiAgIC0gdGhlIFFIIGZvciB0aGUgbmV4dCBVUkIgcXVldWVkIHRvIHRoZSBzYW1lIGVuZHBvaW50LgorICoKKyAqIFRoZSBvdGhlciByb2xlIG9mIGEgUUggaXMgdG8gc2VydmUgYXMgYSAic2tlbGV0b24iIGZyYW1lbGlzdCBlbnRyeSwgc28gd2UKKyAqIGNhbiBlYXNpbHkgc3BsaWNlIGEgUUggZm9yIHNvbWUgZW5kcG9pbnQgaW50byB0aGUgc2NoZWR1bGUgYXQgdGhlIHJpZ2h0CisgKiBwbGFjZS4gIFRoZW4gcWgtPmVsZW1lbnQgaXMgVUhDSV9QVFJfVEVSTS4KKyAqCisgKiBJbiB0aGUgZnJhbWUgbGlzdCwgcWgtPmxpbmsgbWFpbnRhaW5zIGEgbGlzdCBvZiBRSHMgc2VlbiBieSB0aGUgSEM6CisgKiAgICAgc2tlbDEgLS0+IGVwMS1xaCAtLT4gZXAyLXFoIC0tPiAuLi4gLS0+IHNrZWwyIC0tPiAuLi4KKyAqLworc3RydWN0IHVoY2lfcWggeworCS8qIEhhcmR3YXJlIGZpZWxkcyAqLworCV9fbGUzMiBsaW5rOwkJCS8qIE5leHQgcXVldWUgKi8KKwlfX2xlMzIgZWxlbWVudDsJCQkvKiBRdWV1ZSBlbGVtZW50IHBvaW50ZXIgKi8KKworCS8qIFNvZnR3YXJlIGZpZWxkcyAqLworCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKKworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwOworCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkJLyogUDogdWhjaS0+ZnJhbWVfbGlzdF9sb2NrICovCisJc3RydWN0IGxpc3RfaGVhZCByZW1vdmVfbGlzdDsJLyogUDogdWhjaS0+cmVtb3ZlX2xpc3RfbG9jayAqLworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDE2KSkpOworCisvKgorICogV2UgbmVlZCBhIHNwZWNpYWwgYWNjZXNzb3IgZm9yIHRoZSBlbGVtZW50IHBvaW50ZXIgYmVjYXVzZSBpdCBpcworICogc3ViamVjdCB0byBhc3luY2hyb25vdXMgdXBkYXRlcyBieSB0aGUgY29udHJvbGxlcgorICovCitzdGF0aWMgX19sZTMyIGlubGluZSBxaF9lbGVtZW50KHN0cnVjdCB1aGNpX3FoICpxaCkgeworCV9fbGUzMiBlbGVtZW50ID0gcWgtPmVsZW1lbnQ7CisKKwliYXJyaWVyKCk7CisJcmV0dXJuIGVsZW1lbnQ7Cit9CisKKy8qCisgKiBmb3IgVEQgPHN0YXR1cz46CisgKi8KKyNkZWZpbmUgVERfQ1RSTF9TUEQJCSgxIDw8IDI5KQkvKiBTaG9ydCBQYWNrZXQgRGV0ZWN0ICovCisjZGVmaW5lIFREX0NUUkxfQ19FUlJfTUFTSwkoMyA8PCAyNykJLyogRXJyb3IgQ291bnRlciBiaXRzICovCisjZGVmaW5lIFREX0NUUkxfQ19FUlJfU0hJRlQJMjcKKyNkZWZpbmUgVERfQ1RSTF9MUwkJKDEgPDwgMjYpCS8qIExvdyBTcGVlZCBEZXZpY2UgKi8KKyNkZWZpbmUgVERfQ1RSTF9JT1MJCSgxIDw8IDI1KQkvKiBJc29jaHJvbm91cyBTZWxlY3QgKi8KKyNkZWZpbmUgVERfQ1RSTF9JT0MJCSgxIDw8IDI0KQkvKiBJbnRlcnJ1cHQgb24gQ29tcGxldGUgKi8KKyNkZWZpbmUgVERfQ1RSTF9BQ1RJVkUJCSgxIDw8IDIzKQkvKiBURCBBY3RpdmUgKi8KKyNkZWZpbmUgVERfQ1RSTF9TVEFMTEVECQkoMSA8PCAyMikJLyogVEQgU3RhbGxlZCAqLworI2RlZmluZSBURF9DVFJMX0RCVUZFUlIJCSgxIDw8IDIxKQkvKiBEYXRhIEJ1ZmZlciBFcnJvciAqLworI2RlZmluZSBURF9DVFJMX0JBQkJMRQkJKDEgPDwgMjApCS8qIEJhYmJsZSBEZXRlY3RlZCAqLworI2RlZmluZSBURF9DVFJMX05BSwkJKDEgPDwgMTkpCS8qIE5BSyBSZWNlaXZlZCAqLworI2RlZmluZSBURF9DVFJMX0NSQ1RJTUVPCSgxIDw8IDE4KQkvKiBDUkMvVGltZSBPdXQgRXJyb3IgKi8KKyNkZWZpbmUgVERfQ1RSTF9CSVRTVFVGRgkoMSA8PCAxNykJLyogQml0IFN0dWZmIEVycm9yICovCisjZGVmaW5lIFREX0NUUkxfQUNUTEVOX01BU0sJMHg3RkYJLyogYWN0dWFsIGxlbmd0aCwgZW5jb2RlZCBhcyBuIC0gMSAqLworCisjZGVmaW5lIFREX0NUUkxfQU5ZX0VSUk9SCShURF9DVFJMX1NUQUxMRUQgfCBURF9DVFJMX0RCVUZFUlIgfCBcCisJCQkJIFREX0NUUkxfQkFCQkxFIHwgVERfQ1RSTF9DUkNUSU1FIHwgVERfQ1RSTF9CSVRTVFVGRikKKworI2RlZmluZSB1aGNpX21heGVycihlcnIpCQkoKGVycikgPDwgVERfQ1RSTF9DX0VSUl9TSElGVCkKKyNkZWZpbmUgdWhjaV9zdGF0dXNfYml0cyhjdHJsX3N0cykJKChjdHJsX3N0cykgJiAweEY2MDAwMCkKKyNkZWZpbmUgdWhjaV9hY3R1YWxfbGVuZ3RoKGN0cmxfc3RzKQkoKChjdHJsX3N0cykgKyAxKSAmIFREX0NUUkxfQUNUTEVOX01BU0spIC8qIDEtYmFzZWQgKi8KKworLyoKKyAqIGZvciBURCA8aW5mbz46IChhLmsuYS4gVG9rZW4pCisgKi8KKyNkZWZpbmUgdGRfdG9rZW4odGQpCQlsZTMyX3RvX2NwdSgodGQpLT50b2tlbikKKyNkZWZpbmUgVERfVE9LRU5fREVWQUREUl9TSElGVAk4CisjZGVmaW5lIFREX1RPS0VOX1RPR0dMRV9TSElGVAkxOQorI2RlZmluZSBURF9UT0tFTl9UT0dHTEUJCSgxIDw8IDE5KQorI2RlZmluZSBURF9UT0tFTl9FWFBMRU5fU0hJRlQJMjEKKyNkZWZpbmUgVERfVE9LRU5fRVhQTEVOX01BU0sJMHg3RkYJCS8qIGV4cGVjdGVkIGxlbmd0aCwgZW5jb2RlZCBhcyBuIC0gMSAqLworI2RlZmluZSBURF9UT0tFTl9QSURfTUFTSwkweEZGCisKKyNkZWZpbmUgdWhjaV9leHBsZW4obGVuKQkoKGxlbikgPDwgVERfVE9LRU5fRVhQTEVOX1NISUZUKQorCisjZGVmaW5lIHVoY2lfZXhwZWN0ZWRfbGVuZ3RoKHRva2VuKSAoKCgodG9rZW4pID4+IDIxKSArIDEpICYgVERfVE9LRU5fRVhQTEVOX01BU0spCisjZGVmaW5lIHVoY2lfdG9nZ2xlKHRva2VuKQkoKCh0b2tlbikgPj4gVERfVE9LRU5fVE9HR0xFX1NISUZUKSAmIDEpCisjZGVmaW5lIHVoY2lfZW5kcG9pbnQodG9rZW4pCSgoKHRva2VuKSA+PiAxNSkgJiAweGYpCisjZGVmaW5lIHVoY2lfZGV2YWRkcih0b2tlbikJKCgodG9rZW4pID4+IFREX1RPS0VOX0RFVkFERFJfU0hJRlQpICYgMHg3ZikKKyNkZWZpbmUgdWhjaV9kZXZlcCh0b2tlbikJKCgodG9rZW4pID4+IFREX1RPS0VOX0RFVkFERFJfU0hJRlQpICYgMHg3ZmYpCisjZGVmaW5lIHVoY2lfcGFja2V0aWQodG9rZW4pCSgodG9rZW4pICYgVERfVE9LRU5fUElEX01BU0spCisjZGVmaW5lIHVoY2lfcGFja2V0b3V0KHRva2VuKQkodWhjaV9wYWNrZXRpZCh0b2tlbikgIT0gVVNCX1BJRF9JTikKKyNkZWZpbmUgdWhjaV9wYWNrZXRpbih0b2tlbikJKHVoY2lfcGFja2V0aWQodG9rZW4pID09IFVTQl9QSURfSU4pCisKKy8qCisgKiBUaGUgZG9jdW1lbnRhdGlvbiBzYXlzICI0IHdvcmRzIGZvciBoYXJkd2FyZSwgNCB3b3JkcyBmb3Igc29mdHdhcmUiLgorICoKKyAqIFRoYXQncyBzaWxseSwgdGhlIGhhcmR3YXJlIGRvZXNuJ3QgY2FyZS4gVGhlIGhhcmR3YXJlIG9ubHkgY2FyZXMgdGhhdAorICogdGhlIGhhcmR3YXJlIHdvcmRzIGFyZSAxNi1ieXRlIGFsaWduZWQsIGFuZCB3ZSBjYW4gaGF2ZSBhbnkgYW1vdW50IG9mCisgKiBzdyBzcGFjZSBhZnRlciB0aGUgVEQgZW50cnkgYXMgZmFyIGFzIEkgY2FuIHRlbGwuCisgKgorICogQnV0IGxldCdzIGp1c3QgZ28gd2l0aCB0aGUgZG9jdW1lbnRhdGlvbiwgYXQgbGVhc3QgZm9yIDMyLWJpdCBtYWNoaW5lcy4KKyAqIE9uIDY0LWJpdCBtYWNoaW5lcyB3ZSBwcm9iYWJseSB3YW50IHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQKKyAqIGh3IGRvZXNuJ3QgcmVhbGx5IGNhcmUgYWJvdXQgdGhlIHNpemUgb2YgdGhlIHN3LW9ubHkgYXJlYS4KKyAqCisgKiBBbGFzLCBub3QgYW55bW9yZSwgd2UgaGF2ZSBtb3JlIHRoYW4gNCB3b3JkcyBmb3Igc29mdHdhcmUsIHdvb3BzLgorICogRXZlcnl0aGluZyBzdGlsbCB3b3JrcyB0aG8sIHN1cnByaXNlISAtamVyZGZlbHQKKyAqCisgKiB0ZC0+bGluayBwb2ludHMgdG8gZWl0aGVyIGFub3RoZXIgVEQgKG5vdCBuZWNlc3NhcmlseSBmb3IgdGhlIHNhbWUgdXJiIG9yCisgKiBldmVuIHRoZSBzYW1lIGVuZHBvaW50KSwgb3Igbm90aGluZyAoUFRSX1RFUk0pLCBvciBhIFFIIChmb3IgcXVldWVkIHVyYnMpCisgKi8KK3N0cnVjdCB1aGNpX3RkIHsKKwkvKiBIYXJkd2FyZSBmaWVsZHMgKi8KKwlfX2xlMzIgbGluazsKKwlfX2xlMzIgc3RhdHVzOworCV9fbGUzMiB0b2tlbjsKKwlfX2xlMzIgYnVmZmVyOworCisJLyogU29mdHdhcmUgZmllbGRzICovCisJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOworCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkvKiBQOiB1cmItPmxvY2sgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHJlbW92ZV9saXN0OwkvKiBQOiB1aGNpLT50ZF9yZW1vdmVfbGlzdF9sb2NrICovCisKKwlpbnQgZnJhbWU7CQkJLyogZm9yIGlzbzogd2hhdCBmcmFtZT8gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGZsX2xpc3Q7CS8qIFA6IHVoY2ktPmZyYW1lX2xpc3RfbG9jayAqLworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDE2KSkpOworCisvKgorICogV2UgbmVlZCBhIHNwZWNpYWwgYWNjZXNzb3IgZm9yIHRoZSBjb250cm9sL3N0YXR1cyB3b3JkIGJlY2F1c2UgaXQgaXMKKyAqIHN1YmplY3QgdG8gYXN5bmNocm9ub3VzIHVwZGF0ZXMgYnkgdGhlIGNvbnRyb2xsZXIKKyAqLworc3RhdGljIHUzMiBpbmxpbmUgdGRfc3RhdHVzKHN0cnVjdCB1aGNpX3RkICp0ZCkgeworCV9fbGUzMiBzdGF0dXMgPSB0ZC0+c3RhdHVzOworCisJYmFycmllcigpOworCXJldHVybiBsZTMyX3RvX2NwdShzdGF0dXMpOworfQorCisKKy8qCisgKiBUaGUgVUhDSSBkcml2ZXIgcGxhY2VzIEludGVycnVwdCwgQ29udHJvbCBhbmQgQnVsayBpbnRvIFFIJ3MgYm90aAorICogdG8gZ3JvdXAgdG9nZXRoZXIgVEQncyBmb3Igb25lIHRyYW5zZmVyLCBhbmQgYWxzbyB0byBmYWNpbGlhdGUgcXVldWluZworICogb2YgVVJCJ3MuIFRvIG1ha2UgaXQgZWFzeSB0byBpbnNlcnQgZW50cmllcyBpbnRvIHRoZSBzY2hlZHVsZSwgd2UgaGF2ZQorICogYSBza2VsZXRvbiBvZiBRSCdzIGZvciBlYWNoIHByZWRlZmluZWQgSW50ZXJydXB0IGxhdGVuY3ksIGxvdy1zcGVlZAorICogY29udHJvbCwgZnVsbC1zcGVlZCBjb250cm9sIGFuZCB0ZXJtaW5hdGluZyBRSCAoc2VlIGV4cGxhbmF0aW9uIGZvcgorICogdGhlIHRlcm1pbmF0aW5nIFFIIGJlbG93KS4KKyAqCisgKiBXaGVuIHdlIHdhbnQgdG8gYWRkIGEgbmV3IFFILCB3ZSBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCBmb3IgdGhlCisgKiBza2VsZXRvbiBRSC4KKyAqCisgKiBGb3IgaW5zdGFuY2UsIHRoZSBxdWV1ZSBjYW4gbG9vayBsaWtlIHRoaXM6CisgKgorICogc2tlbCBpbnQxMjggUUgKKyAqIGRldiAxIGludGVycnVwdCBRSAorICogZGV2IDUgaW50ZXJydXB0IFFICisgKiBza2VsIGludDY0IFFICisgKiBza2VsIGludDMyIFFICisgKiAuLi4KKyAqIHNrZWwgaW50MSBRSAorICogc2tlbCBsb3ctc3BlZWQgY29udHJvbCBRSAorICogZGV2IDUgY29udHJvbCBRSAorICogc2tlbCBmdWxsLXNwZWVkIGNvbnRyb2wgUUgKKyAqIHNrZWwgYnVsayBRSAorICogZGV2IDEgYnVsayBRSAorICogZGV2IDIgYnVsayBRSAorICogc2tlbCB0ZXJtaW5hdGluZyBRSAorICoKKyAqIFRoZSB0ZXJtaW5hdGluZyBRSCBpcyB1c2VkIGZvciAyIHJlYXNvbnM6CisgKiAtIFRvIHBsYWNlIGEgdGVybWluYXRpbmcgVEQgd2hpY2ggaXMgdXNlZCB0byB3b3JrYXJvdW5kIGEgUElJWCBidWcKKyAqICAgKHNlZSBJbnRlbCBlcnJhdGEgZm9yIGV4cGxhbmF0aW9uKQorICogLSBUbyBsb29wIGJhY2sgdG8gdGhlIGZ1bGwtc3BlZWQgY29udHJvbCBxdWV1ZSBmb3IgZnVsbC1zcGVlZCBiYW5kd2lkdGgKKyAqICAgcmVjbGFtYXRpb24KKyAqCisgKiBJc29jaHJvbm91cyB0cmFuc2ZlcnMgYXJlIHN0b3JlZCBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBza2VsZXRvbgorICogc2NoZWR1bGUgYW5kIGRvbid0IHVzZSBRSCdzLiBXaGlsZSB0aGUgVUhDSSBzcGVjIGRvZXNuJ3QgZm9yYmlkIHRoZQorICogdXNlIG9mIFFIJ3MgZm9yIElzb2Nocm9ub3VzLCBpdCBkb2Vzbid0IHVzZSB0aGVtIGVpdGhlci4gU2luY2Ugd2UgZG9uJ3QKKyAqIG5lZWQgdG8gdXNlIHRoZW0gZWl0aGVyLCB3ZSBmb2xsb3cgdGhlIHNwZWMgZGlhZ3JhbXMgaW4gaG9wZSB0aGF0IGl0J2xsCisgKiBiZSBtb3JlIGNvbXBhdGlibGUgd2l0aCBmdXR1cmUgVUhDSSBpbXBsZW1lbnRhdGlvbnMuCisgKi8KKworI2RlZmluZSBVSENJX05VTV9TS0VMUUgJCTEyCisjZGVmaW5lIHNrZWxfaW50MTI4X3FoCQlza2VscWhbMF0KKyNkZWZpbmUgc2tlbF9pbnQ2NF9xaAkJc2tlbHFoWzFdCisjZGVmaW5lIHNrZWxfaW50MzJfcWgJCXNrZWxxaFsyXQorI2RlZmluZSBza2VsX2ludDE2X3FoCQlza2VscWhbM10KKyNkZWZpbmUgc2tlbF9pbnQ4X3FoCQlza2VscWhbNF0KKyNkZWZpbmUgc2tlbF9pbnQ0X3FoCQlza2VscWhbNV0KKyNkZWZpbmUgc2tlbF9pbnQyX3FoCQlza2VscWhbNl0KKyNkZWZpbmUgc2tlbF9pbnQxX3FoCQlza2VscWhbN10KKyNkZWZpbmUgc2tlbF9sc19jb250cm9sX3FoCXNrZWxxaFs4XQorI2RlZmluZSBza2VsX2ZzX2NvbnRyb2xfcWgJc2tlbHFoWzldCisjZGVmaW5lIHNrZWxfYnVsa19xaAkJc2tlbHFoWzEwXQorI2RlZmluZSBza2VsX3Rlcm1fcWgJCXNrZWxxaFsxMV0KKworLyoKKyAqIFNlYXJjaCB0cmVlIGZvciBkZXRlcm1pbmluZyB3aGVyZSA8aW50ZXJ2YWw+IGZpdHMgaW4gdGhlIHNrZWxxaFtdCisgKiBza2VsZXRvbi4KKyAqCisgKiBBbiBpbnRlcnJ1cHQgcmVxdWVzdCBzaG91bGQgYmUgcGxhY2VkIGludG8gdGhlIHNsb3dlc3Qgc2tlbHFoW10KKyAqIHdoaWNoIG1lZXRzIHRoZSBpbnRlcnZhbC9wZXJpb2QvZnJlcXVlbmN5IHJlcXVpcmVtZW50LgorICogQW4gaW50ZXJydXB0IHJlcXVlc3QgaXMgYWxsb3dlZCB0byBiZSBmYXN0ZXIgdGhhbiA8aW50ZXJ2YWw+IGJ1dCBub3Qgc2xvd2VyLgorICoKKyAqIEZvciBhIGdpdmVuIDxpbnRlcnZhbD4sIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYXBwcm9wcmlhdGUvbWF0Y2hpbmcKKyAqIHNrZWxxaFtdIGluZGV4IHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIGludCBfX2ludGVydmFsX3RvX3NrZWwoaW50IGludGVydmFsKQoreworCWlmIChpbnRlcnZhbCA8IDE2KSB7CisJCWlmIChpbnRlcnZhbCA8IDQpIHsKKwkJCWlmIChpbnRlcnZhbCA8IDIpCisJCQkJcmV0dXJuIDc7CS8qIGludDEgZm9yIDAtMSBtcyAqLworCQkJcmV0dXJuIDY7CQkvKiBpbnQyIGZvciAyLTMgbXMgKi8KKwkJfQorCQlpZiAoaW50ZXJ2YWwgPCA4KQorCQkJcmV0dXJuIDU7CQkvKiBpbnQ0IGZvciA0LTcgbXMgKi8KKwkJcmV0dXJuIDQ7CQkJLyogaW50OCBmb3IgOC0xNSBtcyAqLworCX0KKwlpZiAoaW50ZXJ2YWwgPCA2NCkgeworCQlpZiAoaW50ZXJ2YWwgPCAzMikKKwkJCXJldHVybiAzOwkJLyogaW50MTYgZm9yIDE2LTMxIG1zICovCisJCXJldHVybiAyOwkJCS8qIGludDMyIGZvciAzMi02MyBtcyAqLworCX0KKwlpZiAoaW50ZXJ2YWwgPCAxMjgpCisJCXJldHVybiAxOwkJCS8qIGludDY0IGZvciA2NC0xMjcgbXMgKi8KKwlyZXR1cm4gMDsJCQkJLyogaW50MTI4IGZvciAxMjgtMjU1IG1zIChNYXguKSAqLworfQorCisvKgorICogRGV2aWNlIHN0YXRlcyBmb3IgdGhlIGhvc3QgY29udHJvbGxlci4KKyAqCisgKiBUbyBwcmV2ZW50ICJib3VuY2luZyIgaW4gdGhlIHByZXNlbmNlIG9mIGVsZWN0cmljYWwgbm9pc2UsCisgKiB3ZSBpbnNpc3Qgb24gYSAxLXNlY29uZCAiZ3JhY2UiIHBlcmlvZCwgYmVmb3JlIHN3aXRjaGluZyB0bworICogdGhlIFJVTk5JTkcgb3IgU1VTUEVOREVEIHN0YXRlcywgZHVyaW5nIHdoaWNoIHRoZSBzdGF0ZSBpcworICogbm90IGFsbG93ZWQgdG8gY2hhbmdlLgorICoKKyAqIFRoZSByZXN1bWUgcHJvY2VzcyBpcyBkaXZpZGVkIGludG8gc3Vic3RhdGVzIGluIG9yZGVyIHRvIGF2b2lkCisgKiBwb3RlbnRpYWxseSBsZW5ndGggZGVsYXlzIGR1cmluZyB0aGUgdGltZXIgaGFuZGxlci4KKyAqCisgKiBTdGF0ZXMgaW4gd2hpY2ggdGhlIGhvc3QgY29udHJvbGxlciBpcyBoYWx0ZWQgbXVzdCBoYXZlIHZhbHVlcyA8PSAwLgorICovCitlbnVtIHVoY2lfc3RhdGUgeworCVVIQ0lfUkVTRVQsCisJVUhDSV9SVU5OSU5HX0dSQUNFLAkJLyogQmVmb3JlIFJVTk5JTkcgKi8KKwlVSENJX1JVTk5JTkcsCQkJLyogVGhlIG5vcm1hbCBzdGF0ZSAqLworCVVIQ0lfU1VTUEVORElOR19HUkFDRSwJCS8qIEJlZm9yZSBTVVNQRU5ERUQgKi8KKwlVSENJX1NVU1BFTkRFRCA9IC0xMCwJCS8qIFdoZW4gbm8gZGV2aWNlcyBhcmUgYXR0YWNoZWQgKi8KKwlVSENJX1JFU1VNSU5HXzEsCisJVUhDSV9SRVNVTUlOR18yCit9OworCisvKgorICogVGhpcyBkZXNjcmliZXMgdGhlIGZ1bGwgdWhjaSBpbmZvcm1hdGlvbi4KKyAqCisgKiBOb3RlIGhvdyB0aGUgInByb3BlciIgVVNCIGluZm9ybWF0aW9uIGlzIGp1c3QKKyAqIGEgc3Vic2V0IG9mIHdoYXQgdGhlIGZ1bGwgaW1wbGVtZW50YXRpb24gbmVlZHMuCisgKi8KK3N0cnVjdCB1aGNpX2hjZCB7CisKKwkvKiBkZWJ1Z2ZzICovCisJc3RydWN0IGRlbnRyeSAqZGVudHJ5OworCisJLyogR3JhYmJlZCBmcm9tIFBDSSAqLworCXVuc2lnbmVkIGxvbmcgaW9fYWRkcjsKKworCXN0cnVjdCBkbWFfcG9vbCAqcWhfcG9vbDsKKwlzdHJ1Y3QgZG1hX3Bvb2wgKnRkX3Bvb2w7CisKKwlzdHJ1Y3QgdXNiX2J1cyAqYnVzOworCisJc3RydWN0IHVoY2lfdGQgKnRlcm1fdGQ7CS8qIFRlcm1pbmF0aW5nIFRELCBzZWUgVUhDSSBidWcgKi8KKwlzdHJ1Y3QgdWhjaV9xaCAqc2tlbHFoW1VIQ0lfTlVNX1NLRUxRSF07CS8qIFNrZWxldG9uIFFIJ3MgKi8KKworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgdWhjaV9mcmFtZV9saXN0ICpmbDsJCS8qIFA6IHVoY2ktPmxvY2sgKi8KKwlpbnQgZnNicjsJCQkJLyogRnVsbC1zcGVlZCBiYW5kd2lkdGggcmVjbGFtYXRpb24gKi8KKwl1bnNpZ25lZCBsb25nIGZzYnJ0aW1lb3V0OwkJLyogRlNCUiBkZWxheSAqLworCisJZW51bSB1aGNpX3N0YXRlIHN0YXRlOwkJCS8qIEZJWE1FOiBuZWVkcyBhIHNwaW5sb2NrICovCisJdW5zaWduZWQgbG9uZyBzdGF0ZV9lbmQ7CQkvKiBUaW1lIG9mIG5leHQgdHJhbnNpdGlvbiAqLworCXVuc2lnbmVkIGludCBmcmFtZV9udW1iZXI7CQkvKiBBcyBvZiBsYXN0IGNoZWNrICovCisJdW5zaWduZWQgaW50IGlzX3N0b3BwZWQ7CisjZGVmaW5lIFVIQ0lfSVNfU1RPUFBFRAkJOTk5OQkJLyogTGFyZ2VyIHRoYW4gYSBmcmFtZSAjICovCisKKwl1bnNpZ25lZCBpbnQgc2Nhbl9pbl9wcm9ncmVzczoxOwkvKiBTY2hlZHVsZSBzY2FuIGlzIHJ1bm5pbmcgKi8KKwl1bnNpZ25lZCBpbnQgbmVlZF9yZXNjYW46MTsJCS8qIFJlZG8gdGhlIHNjaGVkdWxlIHNjYW4gKi8KKwl1bnNpZ25lZCBpbnQgcmVzdW1lX2RldGVjdDoxOwkJLyogTmVlZCBhIEdsb2JhbCBSZXN1bWUgKi8KKworCS8qIFN1cHBvcnQgZm9yIHBvcnQgc3VzcGVuZC9yZXN1bWUvcmVzZXQgKi8KKwl1bnNpZ25lZCBsb25nIHBvcnRfY19zdXNwZW5kOwkJLyogQml0LWFycmF5cyBvZiBwb3J0cyAqLworCXVuc2lnbmVkIGxvbmcgc3VzcGVuZGVkX3BvcnRzOworCXVuc2lnbmVkIGxvbmcgcmVzdW1pbmdfcG9ydHM7CisJdW5zaWduZWQgbG9uZyBwb3J0c190aW1lb3V0OwkJLyogVGltZSB0byBzdG9wIHNpZ25hbGxpbmcgKi8KKworCS8qIE1haW4gbGlzdCBvZiBVUkIncyBjdXJyZW50bHkgY29udHJvbGxlZCBieSB0aGlzIEhDICovCisJc3RydWN0IGxpc3RfaGVhZCB1cmJfbGlzdDsJCS8qIFA6IHVoY2ktPmxvY2sgKi8KKworCS8qIExpc3Qgb2YgUUgncyB0aGF0IGFyZSBkb25lLCBidXQgd2FpdGluZyB0byBiZSB1bmxpbmtlZCAocmFjZSkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHFoX3JlbW92ZV9saXN0OwkvKiBQOiB1aGNpLT5sb2NrICovCisJdW5zaWduZWQgaW50IHFoX3JlbW92ZV9hZ2U7CQkvKiBBZ2UgaW4gZnJhbWVzICovCisKKwkvKiBMaXN0IG9mIFREJ3MgdGhhdCBhcmUgZG9uZSwgYnV0IHdhaXRpbmcgdG8gYmUgZnJlZWQgKHJhY2UpICovCisJc3RydWN0IGxpc3RfaGVhZCB0ZF9yZW1vdmVfbGlzdDsJLyogUDogdWhjaS0+bG9jayAqLworCXVuc2lnbmVkIGludCB0ZF9yZW1vdmVfYWdlOwkJLyogQWdlIGluIGZyYW1lcyAqLworCisJLyogTGlzdCBvZiBhc3luY2hyb25vdXNseSB1bmxpbmtlZCBVUkIncyAqLworCXN0cnVjdCBsaXN0X2hlYWQgdXJiX3JlbW92ZV9saXN0OwkvKiBQOiB1aGNpLT5sb2NrICovCisJdW5zaWduZWQgaW50IHVyYl9yZW1vdmVfYWdlOwkJLyogQWdlIGluIGZyYW1lcyAqLworCisJLyogTGlzdCBvZiBVUkIncyBhd2FpdGluZyBjb21wbGV0aW9uIGNhbGxiYWNrICovCisJc3RydWN0IGxpc3RfaGVhZCBjb21wbGV0ZV9saXN0OwkJLyogUDogdWhjaS0+bG9jayAqLworCisJaW50IHJoX251bXBvcnRzOworCisJc3RydWN0IHRpbWVyX2xpc3Qgc3RhbGxfdGltZXI7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0cWg7CQkvKiBlbmRwb2ludF9kaXNhYmxlIHdhaXRlcnMgKi8KK307CisKKy8qIENvbnZlcnQgYmV0d2VlbiBhIHVzYl9oY2QgcG9pbnRlciBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgdWhjaV9oY2QgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVoY2lfaGNkICpoY2RfdG9fdWhjaShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXJldHVybiAoc3RydWN0IHVoY2lfaGNkICopIChoY2QtPmhjZF9wcml2KTsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9oY2QgKnVoY2lfdG9faGNkKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKCh2b2lkICopIHVoY2ksIHN0cnVjdCB1c2JfaGNkLCBoY2RfcHJpdik7Cit9CisKKyNkZWZpbmUgdWhjaV9kZXYodSkJKHVoY2lfdG9faGNkKHUpLT5zZWxmLmNvbnRyb2xsZXIpCisKK3N0cnVjdCB1cmJfcHJpdiB7CisJc3RydWN0IGxpc3RfaGVhZCB1cmJfbGlzdDsKKworCXN0cnVjdCB1cmIgKnVyYjsKKworCXN0cnVjdCB1aGNpX3FoICpxaDsJCS8qIFFIIGZvciB0aGlzIFVSQiAqLworCXN0cnVjdCBsaXN0X2hlYWQgdGRfbGlzdDsJLyogUDogdXJiLT5sb2NrICovCisKKwl1bnNpZ25lZCBmc2JyIDogMTsJCS8qIFVSQiB0dXJuZWQgb24gRlNCUiAqLworCXVuc2lnbmVkIGZzYnJfdGltZW91dCA6IDE7CS8qIFVSQiB0aW1lZCBvdXQgb24gRlNCUiAqLworCXVuc2lnbmVkIHF1ZXVlZCA6IDE7CQkvKiBRSCB3YXMgcXVldWVkIChub3QgbGlua2VkIGluKSAqLworCXVuc2lnbmVkIHNob3J0X2NvbnRyb2xfcGFja2V0IDogMTsJLyogSWYgd2UgZ2V0IGEgc2hvcnQgcGFja2V0IGR1cmluZyAqLworCQkJCQkJLyogIGEgY29udHJvbCB0cmFuc2ZlciwgcmV0cmlnZ2VyICovCisJCQkJCQkvKiAgdGhlIHN0YXR1cyBwaGFzZSAqLworCisJdW5zaWduZWQgbG9uZyBpbnNlcnR0aW1lOwkvKiBJbiBqaWZmaWVzICovCisJdW5zaWduZWQgbG9uZyBmc2JydGltZTsJCS8qIEluIGppZmZpZXMgKi8KKworCXN0cnVjdCBsaXN0X2hlYWQgcXVldWVfbGlzdDsJLyogUDogdWhjaS0+ZnJhbWVfbGlzdF9sb2NrICovCit9OworCisvKgorICogTG9ja2luZyBpbiB1aGNpLmMKKyAqCisgKiBBbG1vc3QgZXZlcnl0aGluZyByZWxhdGluZyB0byB0aGUgaGFyZHdhcmUgc2NoZWR1bGUgYW5kIHByb2Nlc3NpbmcKKyAqIG9mIFVSQnMgaXMgcHJvdGVjdGVkIGJ5IHVoY2ktPmxvY2suICB1cmItPnN0YXR1cyBpcyBwcm90ZWN0ZWQgYnkKKyAqIHVyYi0+bG9jazsgdGhhdCdzIHRoZSBvbmUgZXhjZXB0aW9uLgorICoKKyAqIFRvIHByZXZlbnQgZGVhZGxvY2tzLCBuZXZlciBsb2NrIHVoY2ktPmxvY2sgd2hpbGUgaG9sZGluZyB1cmItPmxvY2suCisgKiBUaGUgc2FmZSBvcmRlciBvZiBsb2NraW5nIGlzOgorICoKKyAqICMxIHVoY2ktPmxvY2sKKyAqICMyIHVyYi0+bG9jaworICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWh1Yi5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWh1Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNDViYTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaHViLmMKQEAgLTAsMCArMSwyOTkgQEAKKy8qCisgKiBVbml2ZXJzYWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBkcml2ZXIgZm9yIFVTQi4KKyAqCisgKiBNYWludGFpbmVyOiBBbGFuIFN0ZXJuIDxzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1PgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBMaW51cyBUb3J2YWxkcworICogKEMpIENvcHlyaWdodCAxOTk5LTIwMDIgSm9oYW5uZXMgRXJkZmVsdCwgam9oYW5uZXNAZXJkZmVsdC5jb20KKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSYW5keSBEdW5sYXAKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBHZW9yZyBBY2hlciwgYWNoZXJAaW4udHVtLmRlCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgRGV0aSBGbGllZ2wsIGRldGlAZmxpZWdsLmRlCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgVGhvbWFzIFNhaWxlciwgc2FpbGVyQGlmZS5lZS5ldGh6LmNoCisgKiAoQykgQ29weXJpZ2h0IDIwMDQgQWxhbiBTdGVybiwgc3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdQorICovCisKK3N0YXRpYyBfX3U4IHJvb3RfaHViX2h1Yl9kZXNbXSA9Cit7CisJMHgwOSwJCQkvKiAgX191OCAgYkxlbmd0aDsgKi8KKwkweDI5LAkJCS8qICBfX3U4ICBiRGVzY3JpcHRvclR5cGU7IEh1Yi1kZXNjcmlwdG9yICovCisJMHgwMiwJCQkvKiAgX191OCAgYk5iclBvcnRzOyAqLworCTB4MGEsCQkJLyogX191MTYgIHdIdWJDaGFyYWN0ZXJpc3RpY3M7ICovCisJMHgwMCwJCQkvKiAgIChwZXItcG9ydCBPQywgbm8gcG93ZXIgc3dpdGNoaW5nKSAqLworCTB4MDEsCQkJLyogIF9fdTggIGJQd3JPbjJwd3JHb29kOyAybXMgKi8KKwkweDAwLAkJCS8qICBfX3U4ICBiSHViQ29udHJDdXJyZW50OyAwIG1BICovCisJMHgwMCwJCQkvKiAgX191OCAgRGV2aWNlUmVtb3ZhYmxlOyAqKiogNyBQb3J0cyBtYXggKioqICovCisJMHhmZgkJCS8qICBfX3U4ICBQb3J0UHdyQ3RybE1hc2s7ICoqKiA3IHBvcnRzIG1heCAqKiogKi8KK307CisKKyNkZWZpbmUJVUhDSV9SSF9NQVhDSElMRAk3CisKKy8qIG11c3Qgd3JpdGUgYXMgemVyb2VzICovCisjZGVmaW5lIFdaX0JJVFMJCShVU0JQT1JUU0NfUkVTMiB8IFVTQlBPUlRTQ19SRVMzIHwgVVNCUE9SVFNDX1JFUzQpCisKKy8qIHN0YXR1cyBjaGFuZ2UgYml0czogIG5vbnplcm8gd3JpdGVzIHdpbGwgY2xlYXIgKi8KKyNkZWZpbmUgUldDX0JJVFMJKFVTQlBPUlRTQ19PQ0MgfCBVU0JQT1JUU0NfUEVDIHwgVVNCUE9SVFNDX0NTQykKKworc3RhdGljIGludCB1aGNpX2h1Yl9zdGF0dXNfZGF0YShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVoY2lfaGNkICp1aGNpID0gaGNkX3RvX3VoY2koaGNkKTsKKwlpbnQgcG9ydDsKKworCSpidWYgPSAwOworCWZvciAocG9ydCA9IDA7IHBvcnQgPCB1aGNpLT5yaF9udW1wb3J0czsgKytwb3J0KSB7CisJCWlmICgoaW53KHVoY2ktPmlvX2FkZHIgKyBVU0JQT1JUU0MxICsgcG9ydCAqIDIpICYgUldDX0JJVFMpIHx8CisJCQkJdGVzdF9iaXQocG9ydCwgJnVoY2ktPnBvcnRfY19zdXNwZW5kKSkKKwkJCSpidWYgfD0gKDEgPDwgKHBvcnQgKyAxKSk7CisJfQorCWlmICgqYnVmICYmIHVoY2ktPnN0YXRlID09IFVIQ0lfU1VTUEVOREVEKQorCQl1aGNpLT5yZXN1bWVfZGV0ZWN0ID0gMTsKKwlyZXR1cm4gISEqYnVmOworfQorCisjZGVmaW5lIE9LKHgpCQkJbGVuID0gKHgpOyBicmVhaworCisjZGVmaW5lIENMUl9SSF9QT1JUU1RBVCh4KSBcCisJc3RhdHVzID0gaW53KHBvcnRfYWRkcik7IFwKKwlzdGF0dXMgJj0gfihSV0NfQklUU3xXWl9CSVRTKTsgXAorCXN0YXR1cyAmPSB+KHgpOyBcCisJc3RhdHVzIHw9IFJXQ19CSVRTICYgKHgpOyBcCisJb3V0dyhzdGF0dXMsIHBvcnRfYWRkcikKKworI2RlZmluZSBTRVRfUkhfUE9SVFNUQVQoeCkgXAorCXN0YXR1cyA9IGludyhwb3J0X2FkZHIpOyBcCisJc3RhdHVzIHw9ICh4KTsgXAorCXN0YXR1cyAmPSB+KFJXQ19CSVRTfFdaX0JJVFMpOyBcCisJb3V0dyhzdGF0dXMsIHBvcnRfYWRkcikKKworLyogVUhDSSBjb250cm9sbGVycyBkb24ndCBhdXRvbWF0aWNhbGx5IHN0b3AgcmVzdW1lIHNpZ25hbGxpbmcgYWZ0ZXIgMjAgbXNlYywKKyAqIHNvIHdlIGhhdmUgdG8gcG9sbCBhbmQgY2hlY2sgdGltZW91dHMgaW4gb3JkZXIgdG8gdGFrZSBjYXJlIG9mIGl0LgorICovCitzdGF0aWMgdm9pZCB1aGNpX2ZpbmlzaF9zdXNwZW5kKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgaW50IHBvcnQsCisJCXVuc2lnbmVkIGxvbmcgcG9ydF9hZGRyKQoreworCWludCBzdGF0dXM7CisKKwlpZiAodGVzdF9iaXQocG9ydCwgJnVoY2ktPnN1c3BlbmRlZF9wb3J0cykpIHsKKwkJQ0xSX1JIX1BPUlRTVEFUKFVTQlBPUlRTQ19TVVNQIHwgVVNCUE9SVFNDX1JEKTsKKwkJY2xlYXJfYml0KHBvcnQsICZ1aGNpLT5zdXNwZW5kZWRfcG9ydHMpOworCQljbGVhcl9iaXQocG9ydCwgJnVoY2ktPnJlc3VtaW5nX3BvcnRzKTsKKwkJc2V0X2JpdChwb3J0LCAmdWhjaS0+cG9ydF9jX3N1c3BlbmQpOworCisJCS8qIFRoZSBjb250cm9sbGVyIHdvbid0IGFjdHVhbGx5IHR1cm4gb2ZmIHRoZSBSRCBiaXQgdW50aWwKKwkJICogaXQgaGFzIGhhZCBhIGNoYW5jZSB0byBzZW5kIGEgbG93LXNwZWVkIEVPUCBzZXF1ZW5jZSwKKwkJICogd2hpY2ggdGFrZXMgMyBiaXQgdGltZXMgKD0gMiBtaWNyb3NlY29uZHMpLiAgV2UnbGwgZGVsYXkKKwkJICogc2xpZ2h0bHkgbG9uZ2VyIGZvciBnb29kIGx1Y2suICovCisJCXVkZWxheSg0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVoY2lfY2hlY2tfcG9ydHMoc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCXVuc2lnbmVkIGludCBwb3J0OworCXVuc2lnbmVkIGxvbmcgcG9ydF9hZGRyOworCWludCBzdGF0dXM7CisKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgdWhjaS0+cmhfbnVtcG9ydHM7ICsrcG9ydCkgeworCQlwb3J0X2FkZHIgPSB1aGNpLT5pb19hZGRyICsgVVNCUE9SVFNDMSArIDIgKiBwb3J0OworCQlzdGF0dXMgPSBpbncocG9ydF9hZGRyKTsKKwkJaWYgKHVubGlrZWx5KHN0YXR1cyAmIFVTQlBPUlRTQ19QUikpIHsKKwkJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHVoY2ktPnBvcnRzX3RpbWVvdXQpKSB7CisJCQkJQ0xSX1JIX1BPUlRTVEFUKFVTQlBPUlRTQ19QUik7CisJCQkJdWRlbGF5KDEwKTsKKworCQkJCS8qIElmIHRoZSBwb3J0IHdhcyBlbmFibGVkIGJlZm9yZSwgdHVybmluZworCQkJCSAqIHJlc2V0IG9uIGNhdXNlZCBhIHBvcnQgZW5hYmxlIGNoYW5nZS4KKwkJCQkgKiBUdXJuaW5nIHJlc2V0IG9mZiBjYXVzZXMgYSBwb3J0IGNvbm5lY3QKKwkJCQkgKiBzdGF0dXMgY2hhbmdlLiAgQ2xlYXIgdGhlc2UgY2hhbmdlcy4gKi8KKwkJCQlDTFJfUkhfUE9SVFNUQVQoVVNCUE9SVFNDX0NTQyB8IFVTQlBPUlRTQ19QRUMpOworCQkJCVNFVF9SSF9QT1JUU1RBVChVU0JQT1JUU0NfUEUpOworCQkJfQorCQl9CisJCWlmICh1bmxpa2VseShzdGF0dXMgJiBVU0JQT1JUU0NfUkQpKSB7CisJCQlpZiAoIXRlc3RfYml0KHBvcnQsICZ1aGNpLT5yZXN1bWluZ19wb3J0cykpIHsKKworCQkJCS8qIFBvcnQgcmVjZWl2ZWQgYSB3YWtldXAgcmVxdWVzdCAqLworCQkJCXNldF9iaXQocG9ydCwgJnVoY2ktPnJlc3VtaW5nX3BvcnRzKTsKKwkJCQl1aGNpLT5wb3J0c190aW1lb3V0ID0gamlmZmllcyArCisJCQkJCQltc2Vjc190b19qaWZmaWVzKDIwKTsKKwkJCX0gZWxzZSBpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLAorCQkJCQkJdWhjaS0+cG9ydHNfdGltZW91dCkpIHsKKwkJCQl1aGNpX2ZpbmlzaF9zdXNwZW5kKHVoY2ksIHBvcnQsIHBvcnRfYWRkcik7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qIHNpemUgb2YgcmV0dXJuZWQgYnVmZmVyIGlzIHBhcnQgb2YgVVNCIHNwZWMgKi8KK3N0YXRpYyBpbnQgdWhjaV9odWJfY29udHJvbChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCB1MTYgdHlwZVJlcSwgdTE2IHdWYWx1ZSwKKwkJCXUxNiB3SW5kZXgsIGNoYXIgKmJ1ZiwgdTE2IHdMZW5ndGgpCit7CisJc3RydWN0IHVoY2lfaGNkICp1aGNpID0gaGNkX3RvX3VoY2koaGNkKTsKKwlpbnQgc3RhdHVzLCBsc3RhdHVzLCByZXR2YWwgPSAwLCBsZW4gPSAwOworCXVuc2lnbmVkIGludCBwb3J0ID0gd0luZGV4IC0gMTsKKwl1bnNpZ25lZCBsb25nIHBvcnRfYWRkciA9IHVoY2ktPmlvX2FkZHIgKyBVU0JQT1JUU0MxICsgMiAqIHBvcnQ7CisJdTE2IHdQb3J0Q2hhbmdlLCB3UG9ydFN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVoY2ktPmxvY2ssIGZsYWdzKTsKKwlzd2l0Y2ggKHR5cGVSZXEpIHsKKworCWNhc2UgR2V0SHViU3RhdHVzOgorCQkqKF9fbGUzMiAqKWJ1ZiA9IGNwdV90b19sZTMyKDApOworCQlPSyg0KTsJCS8qIGh1YiBwb3dlciAqLworCWNhc2UgR2V0UG9ydFN0YXR1czoKKwkJaWYgKHBvcnQgPj0gdWhjaS0+cmhfbnVtcG9ydHMpCisJCQlnb3RvIGVycjsKKworCQl1aGNpX2NoZWNrX3BvcnRzKHVoY2kpOworCQlzdGF0dXMgPSBpbncocG9ydF9hZGRyKTsKKworCQkvKiBJbnRlbCBjb250cm9sbGVycyByZXBvcnQgdGhlIE92ZXJDdXJyZW50IGJpdCBhY3RpdmUgb24uCisJCSAqIFZJQSBjb250cm9sbGVycyByZXBvcnQgaXQgYWN0aXZlIG9mZiwgc28gd2UnbGwgYWRqdXN0IHRoZQorCQkgKiBiaXQgdmFsdWUuICAoSXQncyBub3Qgc3RhbmRhcmRpemVkIGluIHRoZSBVSENJIHNwZWMuKQorCQkgKi8KKwkJaWYgKHRvX3BjaV9kZXYoaGNkLT5zZWxmLmNvbnRyb2xsZXIpLT52ZW5kb3IgPT0KKwkJCQlQQ0lfVkVORE9SX0lEX1ZJQSkKKwkJCXN0YXR1cyBePSBVU0JQT1JUU0NfT0M7CisKKwkJLyogVUhDSSBkb2Vzbid0IHN1cHBvcnQgQ19SRVNFVCAoYWx3YXlzIGZhbHNlKSAqLworCQl3UG9ydENoYW5nZSA9IGxzdGF0dXMgPSAwOworCQlpZiAoc3RhdHVzICYgVVNCUE9SVFNDX0NTQykKKwkJCXdQb3J0Q2hhbmdlIHw9IFVTQl9QT1JUX1NUQVRfQ19DT05ORUNUSU9OOworCQlpZiAoc3RhdHVzICYgVVNCUE9SVFNDX1BFQykKKwkJCXdQb3J0Q2hhbmdlIHw9IFVTQl9QT1JUX1NUQVRfQ19FTkFCTEU7CisJCWlmIChzdGF0dXMgJiBVU0JQT1JUU0NfT0NDKQorCQkJd1BvcnRDaGFuZ2UgfD0gVVNCX1BPUlRfU1RBVF9DX09WRVJDVVJSRU5UOworCisJCWlmICh0ZXN0X2JpdChwb3J0LCAmdWhjaS0+cG9ydF9jX3N1c3BlbmQpKSB7CisJCQl3UG9ydENoYW5nZSB8PSBVU0JfUE9SVF9TVEFUX0NfU1VTUEVORDsKKwkJCWxzdGF0dXMgfD0gMTsKKwkJfQorCQlpZiAodGVzdF9iaXQocG9ydCwgJnVoY2ktPnN1c3BlbmRlZF9wb3J0cykpCisJCQlsc3RhdHVzIHw9IDI7CisJCWlmICh0ZXN0X2JpdChwb3J0LCAmdWhjaS0+cmVzdW1pbmdfcG9ydHMpKQorCQkJbHN0YXR1cyB8PSA0OworCisJCS8qIFVIQ0kgaGFzIG5vIHBvd2VyIHN3aXRjaGluZyAoYWx3YXlzIG9uKSAqLworCQl3UG9ydFN0YXR1cyA9IFVTQl9QT1JUX1NUQVRfUE9XRVI7CisJCWlmIChzdGF0dXMgJiBVU0JQT1JUU0NfQ0NTKQorCQkJd1BvcnRTdGF0dXMgfD0gVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OOworCQlpZiAoc3RhdHVzICYgVVNCUE9SVFNDX1BFKSB7CisJCQl3UG9ydFN0YXR1cyB8PSBVU0JfUE9SVF9TVEFUX0VOQUJMRTsKKwkJCWlmIChzdGF0dXMgJiAoVVNCUE9SVFNDX1NVU1AgfCBVU0JQT1JUU0NfUkQpKQorCQkJCXdQb3J0U3RhdHVzIHw9IFVTQl9QT1JUX1NUQVRfU1VTUEVORDsKKwkJfQorCQlpZiAoc3RhdHVzICYgVVNCUE9SVFNDX09DKQorCQkJd1BvcnRTdGF0dXMgfD0gVVNCX1BPUlRfU1RBVF9PVkVSQ1VSUkVOVDsKKwkJaWYgKHN0YXR1cyAmIFVTQlBPUlRTQ19QUikKKwkJCXdQb3J0U3RhdHVzIHw9IFVTQl9QT1JUX1NUQVRfUkVTRVQ7CisJCWlmIChzdGF0dXMgJiBVU0JQT1JUU0NfTFNEQSkKKwkJCXdQb3J0U3RhdHVzIHw9IFVTQl9QT1JUX1NUQVRfTE9XX1NQRUVEOworCisJCWlmICh3UG9ydENoYW5nZSkKKwkJCWRldl9kYmcodWhjaV9kZXYodWhjaSksICJwb3J0ICVkIHBvcnRzYyAlMDR4LCUwMnhcbiIsCisJCQkJCXdJbmRleCwgc3RhdHVzLCBsc3RhdHVzKTsKKworCQkqKF9fbGUxNiAqKWJ1ZiA9IGNwdV90b19sZTE2KHdQb3J0U3RhdHVzKTsKKwkJKihfX2xlMTYgKikoYnVmICsgMikgPSBjcHVfdG9fbGUxNih3UG9ydENoYW5nZSk7CisJCU9LKDQpOworCWNhc2UgU2V0SHViRmVhdHVyZToJCS8qIFdlIGRvbid0IGltcGxlbWVudCB0aGVzZSAqLworCWNhc2UgQ2xlYXJIdWJGZWF0dXJlOgorCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIENfSFVCX09WRVJfQ1VSUkVOVDoKKwkJY2FzZSBDX0hVQl9MT0NBTF9QT1dFUjoKKwkJCU9LKDApOworCQlkZWZhdWx0OgorCQkJZ290byBlcnI7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTZXRQb3J0RmVhdHVyZToKKwkJaWYgKHBvcnQgPj0gdWhjaS0+cmhfbnVtcG9ydHMpCisJCQlnb3RvIGVycjsKKworCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKKwkJCXNldF9iaXQocG9ydCwgJnVoY2ktPnN1c3BlbmRlZF9wb3J0cyk7CisJCQlTRVRfUkhfUE9SVFNUQVQoVVNCUE9SVFNDX1NVU1ApOworCQkJT0soMCk7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9SRVNFVDoKKwkJCVNFVF9SSF9QT1JUU1RBVChVU0JQT1JUU0NfUFIpOworCisJCQkvKiBSZXNldCB0ZXJtaW5hdGVzIFJlc3VtZSBzaWduYWxsaW5nICovCisJCQl1aGNpX2ZpbmlzaF9zdXNwZW5kKHVoY2ksIHBvcnQsIHBvcnRfYWRkcik7CisKKwkJCS8qIFVTQiB2Mi4wIDcuMS43LjUgKi8KKwkJCXVoY2ktPnBvcnRzX3RpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1MCk7CisJCQlPSygwKTsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1BPV0VSOgorCQkJLyogVUhDSSBoYXMgbm8gcG93ZXIgc3dpdGNoaW5nICovCisJCQlPSygwKTsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXJyOworCQl9CisJCWJyZWFrOworCWNhc2UgQ2xlYXJQb3J0RmVhdHVyZToKKwkJaWYgKHBvcnQgPj0gdWhjaS0+cmhfbnVtcG9ydHMpCisJCQlnb3RvIGVycjsKKworCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIFVTQl9QT1JUX0ZFQVRfRU5BQkxFOgorCQkJQ0xSX1JIX1BPUlRTVEFUKFVTQlBPUlRTQ19QRSk7CisKKwkJCS8qIERpc2FibGUgdGVybWluYXRlcyBSZXN1bWUgc2lnbmFsbGluZyAqLworCQkJdWhjaV9maW5pc2hfc3VzcGVuZCh1aGNpLCBwb3J0LCBwb3J0X2FkZHIpOworCQkJT0soMCk7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX0VOQUJMRToKKwkJCUNMUl9SSF9QT1JUU1RBVChVU0JQT1JUU0NfUEVDKTsKKwkJCU9LKDApOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKKwkJCWlmICh0ZXN0X2JpdChwb3J0LCAmdWhjaS0+c3VzcGVuZGVkX3BvcnRzKSAmJgorCQkJCQkhdGVzdF9hbmRfc2V0X2JpdChwb3J0LAorCQkJCQkJJnVoY2ktPnJlc3VtaW5nX3BvcnRzKSkgeworCQkJCVNFVF9SSF9QT1JUU1RBVChVU0JQT1JUU0NfUkQpOworCisJCQkJLyogVGhlIGNvbnRyb2xsZXIgd29uJ3QgYWxsb3cgUkQgdG8gYmUgc2V0CisJCQkJICogaWYgdGhlIHBvcnQgaXMgZGlzYWJsZWQuICBXaGVuIHRoaXMgaGFwcGVucworCQkJCSAqIGp1c3Qgc2tpcCB0aGUgUmVzdW1lIHNpZ25hbGxpbmcuCisJCQkJICovCisJCQkJaWYgKCEoaW53KHBvcnRfYWRkcikgJiBVU0JQT1JUU0NfUkQpKQorCQkJCQl1aGNpX2ZpbmlzaF9zdXNwZW5kKHVoY2ksIHBvcnQsCisJCQkJCQkJcG9ydF9hZGRyKTsKKwkJCQllbHNlCisJCQkJCS8qIFVTQiB2Mi4wIDcuMS43LjcgKi8KKwkJCQkJdWhjaS0+cG9ydHNfdGltZW91dCA9IGppZmZpZXMgKworCQkJCQkJbXNlY3NfdG9famlmZmllcygyMCk7CisJCQl9CisJCQlPSygwKTsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORDoKKwkJCWNsZWFyX2JpdChwb3J0LCAmdWhjaS0+cG9ydF9jX3N1c3BlbmQpOworCQkJT0soMCk7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKKwkJCS8qIFVIQ0kgaGFzIG5vIHBvd2VyIHN3aXRjaGluZyAqLworCQkJZ290byBlcnI7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT046CisJCQlDTFJfUkhfUE9SVFNUQVQoVVNCUE9SVFNDX0NTQyk7CisJCQlPSygwKTsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfT1ZFUl9DVVJSRU5UOgorCQkJQ0xSX1JIX1BPUlRTVEFUKFVTQlBPUlRTQ19PQ0MpOworCQkJT0soMCk7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX1JFU0VUOgorCQkJLyogdGhpcyBkcml2ZXIgd29uJ3QgcmVwb3J0IHRoZXNlICovCisJCQlPSygwKTsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXJyOworCQl9CisJCWJyZWFrOworCWNhc2UgR2V0SHViRGVzY3JpcHRvcjoKKwkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2Yocm9vdF9odWJfaHViX2RlcyksIHdMZW5ndGgpOworCQltZW1jcHkoYnVmLCByb290X2h1Yl9odWJfZGVzLCBsZW4pOworCQlpZiAobGVuID4gMikKKwkJCWJ1ZlsyXSA9IHVoY2ktPnJoX251bXBvcnRzOworCQlPSyhsZW4pOworCWRlZmF1bHQ6CitlcnI6CisJCXJldHZhbCA9IC1FUElQRTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWhjaS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhN2MxOTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jCkBAIC0wLDAgKzEsMTUzOSBAQAorLyoKKyAqIFVuaXZlcnNhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGRyaXZlciBmb3IgVVNCLgorICoKKyAqIE1haW50YWluZXI6IEFsYW4gU3Rlcm4gPHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHU+CisgKgorICogKEMpIENvcHlyaWdodCAxOTk5IExpbnVzIFRvcnZhbGRzCisgKiAoQykgQ29weXJpZ2h0IDE5OTktMjAwMiBKb2hhbm5lcyBFcmRmZWx0LCBqb2hhbm5lc0BlcmRmZWx0LmNvbQorICogKEMpIENvcHlyaWdodCAxOTk5IFJhbmR5IER1bmxhcAorICogKEMpIENvcHlyaWdodCAxOTk5IEdlb3JnIEFjaGVyLCBhY2hlckBpbi50dW0uZGUKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBEZXRpIEZsaWVnbCwgZGV0aUBmbGllZ2wuZGUKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBUaG9tYXMgU2FpbGVyLCBzYWlsZXJAaWZlLmVlLmV0aHouY2gKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIsIHdlaXNzZ0B2aWVubmEuYXQKKyAqIChDKSBDb3B5cmlnaHQgMjAwMCBZZ2dkcmFzaWwgQ29tcHV0aW5nLCBJbmMuIChwb3J0IG9mIG5ldyBQQ0kgaW50ZXJmYWNlCisgKiAgICAgICAgICAgICAgIHN1cHBvcnQgZnJvbSB1c2Itb2hjaS5jIGJ5IEFkYW0gUmljaHRlciwgYWRhbUB5Z2dkcmFzaWwuY29tKS4KKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBHcmVnb3J5IFAuIFNtaXRoIChmcm9tIHVzYi1vaGNpLmMpCisgKiAoQykgQ29weXJpZ2h0IDIwMDQgQWxhbiBTdGVybiwgc3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdQorICovCisKK3N0YXRpYyBpbnQgdWhjaV91cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgdWhjaV91bmxpbmtfZ2VuZXJpYyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgdm9pZCB1aGNpX3JlbW92ZV9wZW5kaW5nX3VyYnBzKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSk7CitzdGF0aWMgdm9pZCB1aGNpX2ZyZWVfcGVuZGluZ19xaHMoc3RydWN0IHVoY2lfaGNkICp1aGNpKTsKK3N0YXRpYyB2b2lkIHVoY2lfZnJlZV9wZW5kaW5nX3RkcyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpOworCisvKgorICogVGVjaG5pY2FsbHksIHVwZGF0aW5nIHRkLT5zdGF0dXMgaGVyZSBpcyBhIHJhY2UsIGJ1dCBpdCdzIG5vdCByZWFsbHkgYQorICogcHJvYmxlbS4gVGhlIHdvcnN0IHRoYXQgY2FuIGhhcHBlbiBpcyB0aGF0IHdlIHNldCB0aGUgSU9DIGJpdCBhZ2FpbgorICogZ2VuZXJhdGluZyBhIHNwdXJpb3VzIGludGVycnVwdC4gV2UgY291bGQgZml4IHRoaXMgYnkgY3JlYXRpbmcgYW5vdGhlcgorICogUUggYW5kIGxlYXZpbmcgdGhlIElPQyBiaXQgYWx3YXlzIHNldCwgYnV0IHRoZW4gd2Ugd291bGQgaGF2ZSB0byBwbGF5CisgKiBnYW1lcyB3aXRoIHRoZSBGU0JSIGNvZGUgdG8gbWFrZSBzdXJlIHdlIGdldCB0aGUgY29ycmVjdCBvcmRlciBpbiBhbGwKKyAqIHRoZSBjYXNlcy4gSSBkb24ndCB0aGluayBpdCdzIHdvcnRoIHRoZSBlZmZvcnQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVoY2lfc2V0X25leHRfaW50ZXJydXB0KHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKK3sKKwl1aGNpLT50ZXJtX3RkLT5zdGF0dXMgfD0gY3B1X3RvX2xlMzIoVERfQ1RSTF9JT0MpOyAKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVoY2lfY2xlYXJfbmV4dF9pbnRlcnJ1cHQoc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCXVoY2ktPnRlcm1fdGQtPnN0YXR1cyAmPSB+Y3B1X3RvX2xlMzIoVERfQ1RSTF9JT0MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWhjaV9tb3ZldG9fY29tcGxldGUoc3RydWN0IHVoY2lfaGNkICp1aGNpLCAKKwkJCQkJc3RydWN0IHVyYl9wcml2ICp1cmJwKQoreworCWxpc3RfbW92ZV90YWlsKCZ1cmJwLT51cmJfbGlzdCwgJnVoY2ktPmNvbXBsZXRlX2xpc3QpOworfQorCitzdGF0aWMgc3RydWN0IHVoY2lfdGQgKnVoY2lfYWxsb2NfdGQoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQoreworCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKKwlzdHJ1Y3QgdWhjaV90ZCAqdGQ7CisKKwl0ZCA9IGRtYV9wb29sX2FsbG9jKHVoY2ktPnRkX3Bvb2wsIEdGUF9BVE9NSUMsICZkbWFfaGFuZGxlKTsKKwlpZiAoIXRkKQorCQlyZXR1cm4gTlVMTDsKKworCXRkLT5kbWFfaGFuZGxlID0gZG1hX2hhbmRsZTsKKworCXRkLT5saW5rID0gVUhDSV9QVFJfVEVSTTsKKwl0ZC0+YnVmZmVyID0gMDsKKworCXRkLT5mcmFtZSA9IC0xOworCXRkLT5kZXYgPSBkZXY7CisKKwlJTklUX0xJU1RfSEVBRCgmdGQtPmxpc3QpOworCUlOSVRfTElTVF9IRUFEKCZ0ZC0+cmVtb3ZlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZ0ZC0+ZmxfbGlzdCk7CisKKwl1c2JfZ2V0X2RldihkZXYpOworCisJcmV0dXJuIHRkOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWhjaV9maWxsX3RkKHN0cnVjdCB1aGNpX3RkICp0ZCwgdTMyIHN0YXR1cywKKwkJdTMyIHRva2VuLCB1MzIgYnVmZmVyKQoreworCXRkLT5zdGF0dXMgPSBjcHVfdG9fbGUzMihzdGF0dXMpOworCXRkLT50b2tlbiA9IGNwdV90b19sZTMyKHRva2VuKTsKKwl0ZC0+YnVmZmVyID0gY3B1X3RvX2xlMzIoYnVmZmVyKTsKK30KKworLyoKKyAqIFdlIGluc2VydCBJc29jaHJvbm91cyBVUkIncyBkaXJlY3RseSBpbnRvIHRoZSBmcmFtZSBsaXN0IGF0IHRoZSBiZWdpbm5pbmcKKyAqLworc3RhdGljIHZvaWQgdWhjaV9pbnNlcnRfdGRfZnJhbWVfbGlzdChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1aGNpX3RkICp0ZCwgdW5zaWduZWQgZnJhbWVudW0pCit7CisJZnJhbWVudW0gJj0gKFVIQ0lfTlVNRlJBTUVTIC0gMSk7CisKKwl0ZC0+ZnJhbWUgPSBmcmFtZW51bTsKKworCS8qIElzIHRoZXJlIGEgVEQgYWxyZWFkeSBtYXBwZWQgdGhlcmU/ICovCisJaWYgKHVoY2ktPmZsLT5mcmFtZV9jcHVbZnJhbWVudW1dKSB7CisJCXN0cnVjdCB1aGNpX3RkICpmdGQsICpsdGQ7CisKKwkJZnRkID0gdWhjaS0+ZmwtPmZyYW1lX2NwdVtmcmFtZW51bV07CisJCWx0ZCA9IGxpc3RfZW50cnkoZnRkLT5mbF9saXN0LnByZXYsIHN0cnVjdCB1aGNpX3RkLCBmbF9saXN0KTsKKworCQlsaXN0X2FkZF90YWlsKCZ0ZC0+ZmxfbGlzdCwgJmZ0ZC0+ZmxfbGlzdCk7CisKKwkJdGQtPmxpbmsgPSBsdGQtPmxpbms7CisJCXdtYigpOworCQlsdGQtPmxpbmsgPSBjcHVfdG9fbGUzMih0ZC0+ZG1hX2hhbmRsZSk7CisJfSBlbHNlIHsKKwkJdGQtPmxpbmsgPSB1aGNpLT5mbC0+ZnJhbWVbZnJhbWVudW1dOworCQl3bWIoKTsKKwkJdWhjaS0+ZmwtPmZyYW1lW2ZyYW1lbnVtXSA9IGNwdV90b19sZTMyKHRkLT5kbWFfaGFuZGxlKTsKKwkJdWhjaS0+ZmwtPmZyYW1lX2NwdVtmcmFtZW51bV0gPSB0ZDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVoY2lfcmVtb3ZlX3RkKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVoY2lfdGQgKnRkKQoreworCS8qIElmIGl0J3Mgbm90IGluc2VydGVkLCBkb24ndCByZW1vdmUgaXQgKi8KKwlpZiAodGQtPmZyYW1lID09IC0xICYmIGxpc3RfZW1wdHkoJnRkLT5mbF9saXN0KSkKKwkJcmV0dXJuOworCisJaWYgKHRkLT5mcmFtZSAhPSAtMSAmJiB1aGNpLT5mbC0+ZnJhbWVfY3B1W3RkLT5mcmFtZV0gPT0gdGQpIHsKKwkJaWYgKGxpc3RfZW1wdHkoJnRkLT5mbF9saXN0KSkgeworCQkJdWhjaS0+ZmwtPmZyYW1lW3RkLT5mcmFtZV0gPSB0ZC0+bGluazsKKwkJCXVoY2ktPmZsLT5mcmFtZV9jcHVbdGQtPmZyYW1lXSA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgdWhjaV90ZCAqbnRkOworCisJCQludGQgPSBsaXN0X2VudHJ5KHRkLT5mbF9saXN0Lm5leHQsIHN0cnVjdCB1aGNpX3RkLCBmbF9saXN0KTsKKwkJCXVoY2ktPmZsLT5mcmFtZVt0ZC0+ZnJhbWVdID0gY3B1X3RvX2xlMzIobnRkLT5kbWFfaGFuZGxlKTsKKwkJCXVoY2ktPmZsLT5mcmFtZV9jcHVbdGQtPmZyYW1lXSA9IG50ZDsKKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCB1aGNpX3RkICpwdGQ7CisKKwkJcHRkID0gbGlzdF9lbnRyeSh0ZC0+ZmxfbGlzdC5wcmV2LCBzdHJ1Y3QgdWhjaV90ZCwgZmxfbGlzdCk7CisJCXB0ZC0+bGluayA9IHRkLT5saW5rOworCX0KKworCXdtYigpOworCXRkLT5saW5rID0gVUhDSV9QVFJfVEVSTTsKKworCWxpc3RfZGVsX2luaXQoJnRkLT5mbF9saXN0KTsKKwl0ZC0+ZnJhbWUgPSAtMTsKK30KKworLyoKKyAqIEluc2VydHMgYSB0ZCBsaXN0IGludG8gcWguCisgKi8KK3N0YXRpYyB2b2lkIHVoY2lfaW5zZXJ0X3Rkc19pbl9xaChzdHJ1Y3QgdWhjaV9xaCAqcWgsIHN0cnVjdCB1cmIgKnVyYiwgX19sZTMyIGJyZWFkdGgpCit7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OworCXN0cnVjdCB1aGNpX3RkICp0ZDsKKwlfX2xlMzIgKnBsaW5rOworCisJLyogT3JkZXJpbmcgaXNuJ3QgaW1wb3J0YW50IGhlcmUgeWV0IHNpbmNlIHRoZSBRSCBoYXNuJ3QgYmVlbiAqLworCS8qIGluc2VydGVkIGludG8gdGhlIHNjaGVkdWxlIHlldCAqLworCXBsaW5rID0gJnFoLT5lbGVtZW50OworCWxpc3RfZm9yX2VhY2hfZW50cnkodGQsICZ1cmJwLT50ZF9saXN0LCBsaXN0KSB7CisJCSpwbGluayA9IGNwdV90b19sZTMyKHRkLT5kbWFfaGFuZGxlKSB8IGJyZWFkdGg7CisJCXBsaW5rID0gJnRkLT5saW5rOworCX0KKwkqcGxpbmsgPSBVSENJX1BUUl9URVJNOworfQorCitzdGF0aWMgdm9pZCB1aGNpX2ZyZWVfdGQoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdWhjaV90ZCAqdGQpCit7CisJaWYgKCFsaXN0X2VtcHR5KCZ0ZC0+bGlzdCkpCisJCWRldl93YXJuKHVoY2lfZGV2KHVoY2kpLCAidGQgJXAgc3RpbGwgaW4gbGlzdCFcbiIsIHRkKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnRkLT5yZW1vdmVfbGlzdCkpCisJCWRldl93YXJuKHVoY2lfZGV2KHVoY2kpLCAidGQgJXAgc3RpbGwgaW4gcmVtb3ZlX2xpc3QhXG4iLCB0ZCk7CisJaWYgKCFsaXN0X2VtcHR5KCZ0ZC0+ZmxfbGlzdCkpCisJCWRldl93YXJuKHVoY2lfZGV2KHVoY2kpLCAidGQgJXAgc3RpbGwgaW4gZmxfbGlzdCFcbiIsIHRkKTsKKworCWlmICh0ZC0+ZGV2KQorCQl1c2JfcHV0X2Rldih0ZC0+ZGV2KTsKKworCWRtYV9wb29sX2ZyZWUodWhjaS0+dGRfcG9vbCwgdGQsIHRkLT5kbWFfaGFuZGxlKTsKK30KKworc3RhdGljIHN0cnVjdCB1aGNpX3FoICp1aGNpX2FsbG9jX3FoKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3sKKwlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CisJc3RydWN0IHVoY2lfcWggKnFoOworCisJcWggPSBkbWFfcG9vbF9hbGxvYyh1aGNpLT5xaF9wb29sLCBHRlBfQVRPTUlDLCAmZG1hX2hhbmRsZSk7CisJaWYgKCFxaCkKKwkJcmV0dXJuIE5VTEw7CisKKwlxaC0+ZG1hX2hhbmRsZSA9IGRtYV9oYW5kbGU7CisKKwlxaC0+ZWxlbWVudCA9IFVIQ0lfUFRSX1RFUk07CisJcWgtPmxpbmsgPSBVSENJX1BUUl9URVJNOworCisJcWgtPmRldiA9IGRldjsKKwlxaC0+dXJicCA9IE5VTEw7CisKKwlJTklUX0xJU1RfSEVBRCgmcWgtPmxpc3QpOworCUlOSVRfTElTVF9IRUFEKCZxaC0+cmVtb3ZlX2xpc3QpOworCisJdXNiX2dldF9kZXYoZGV2KTsKKworCXJldHVybiBxaDsKK30KKworc3RhdGljIHZvaWQgdWhjaV9mcmVlX3FoKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVoY2lfcWggKnFoKQoreworCWlmICghbGlzdF9lbXB0eSgmcWgtPmxpc3QpKQorCQlkZXZfd2Fybih1aGNpX2Rldih1aGNpKSwgInFoICVwIGxpc3Qgbm90IGVtcHR5IVxuIiwgcWgpOworCWlmICghbGlzdF9lbXB0eSgmcWgtPnJlbW92ZV9saXN0KSkKKwkJZGV2X3dhcm4odWhjaV9kZXYodWhjaSksICJxaCAlcCBzdGlsbCBpbiByZW1vdmVfbGlzdCFcbiIsIHFoKTsKKworCWlmIChxaC0+ZGV2KQorCQl1c2JfcHV0X2RldihxaC0+ZGV2KTsKKworCWRtYV9wb29sX2ZyZWUodWhjaS0+cWhfcG9vbCwgcWgsIHFoLT5kbWFfaGFuZGxlKTsKK30KKworLyoKKyAqIEFwcGVuZCB0aGlzIHVyYidzIHFoIGFmdGVyIHRoZSBsYXN0IHFoIGluIHNrZWxxaC0+bGlzdAorICoKKyAqIE5vdGUgdGhhdCB1cmJfcHJpdi5xdWV1ZV9saXN0IGRvZXNuJ3QgaGF2ZSBhIHNlcGFyYXRlIHF1ZXVlIGhlYWQ7CisgKiBpdCdzIGEgcmluZyB3aXRoIGV2ZXJ5IGVsZW1lbnQgImxpdmUiLgorICovCitzdGF0aWMgdm9pZCB1aGNpX2luc2VydF9xaChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1aGNpX3FoICpza2VscWgsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSAoc3RydWN0IHVyYl9wcml2ICopdXJiLT5oY3ByaXY7CisJc3RydWN0IHVyYl9wcml2ICp0dXJicDsKKwlzdHJ1Y3QgdWhjaV9xaCAqbHFoOworCisJLyogR3JhYiB0aGUgbGFzdCBRSCAqLworCWxxaCA9IGxpc3RfZW50cnkoc2tlbHFoLT5saXN0LnByZXYsIHN0cnVjdCB1aGNpX3FoLCBsaXN0KTsKKworCS8qIFBvaW50IHRvIHRoZSBuZXh0IHNrZWxxaCAqLworCXVyYnAtPnFoLT5saW5rID0gbHFoLT5saW5rOworCXdtYigpOwkJCQkvKiBPcmRlcmluZyBpcyBpbXBvcnRhbnQgKi8KKworCS8qCisJICogUGF0Y2ggUUhzIGZvciBwcmV2aW91cyBlbmRwb2ludCdzIHF1ZXVlZCBVUkJzPyAgSEMgZ29lcworCSAqIGhlcmUgbmV4dCwgbm90IHRvIHRoZSBuZXh0IHNrZWxxaCBpdCBub3cgcG9pbnRzIHRvLgorCSAqCisJICogICAgbHFoIC0tPiB0ZCAuLi4gLS0+IHFoIC4uLiAtLT4gdGQgLS0+IHFoIC4uLiAtLT4gdGQKKwkgKiAgICAgfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfAorCSAqICAgICB2ICAgICAgICAgICAgICAgICB2ICAgICAgICAgICAgICAgICB2CisJICogICAgICs8LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSsKKwkgKiAgICAgdgorCSAqICAgIG5ld3FoIC0tPiB0ZCAuLi4gLS0+IHRkCisJICogICAgIHwKKwkgKiAgICAgdgorCSAqICAgIC4uLgorCSAqCisJICogVGhlIEhDIGNvdWxkIHNlZSAoYW5kIHVzZSEpIGFueSBvZiB0aGVzZSBhcyB3ZSB3cml0ZSB0aGVtLgorCSAqLworCWxxaC0+bGluayA9IGNwdV90b19sZTMyKHVyYnAtPnFoLT5kbWFfaGFuZGxlKSB8IFVIQ0lfUFRSX1FIOworCWlmIChscWgtPnVyYnApIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0dXJicCwgJmxxaC0+dXJicC0+cXVldWVfbGlzdCwgcXVldWVfbGlzdCkKKwkJCXR1cmJwLT5xaC0+bGluayA9IGxxaC0+bGluazsKKwl9CisKKwlsaXN0X2FkZF90YWlsKCZ1cmJwLT5xaC0+bGlzdCwgJnNrZWxxaC0+bGlzdCk7Cit9CisKKy8qCisgKiBTdGFydCByZW1vdmFsIG9mIFFIIGZyb20gc2NoZWR1bGU7IGl0IGZpbmlzaGVzIG5leHQgZnJhbWUuCisgKiBURHMgc2hvdWxkIGJlIHVubGlua2VkIGJlZm9yZSB0aGlzIGlzIGNhbGxlZC4KKyAqLworc3RhdGljIHZvaWQgdWhjaV9yZW1vdmVfcWgoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdWhjaV9xaCAqcWgpCit7CisJc3RydWN0IHVoY2lfcWggKnBxaDsKKwlfX2xlMzIgbmV3bGluazsKKworCWlmICghcWgpCisJCXJldHVybjsKKworCS8qCisJICogT25seSBnbyB0aHJvdWdoIHRoZSBob29wcyBpZiBpdCdzIGFjdHVhbGx5IGxpbmtlZCBpbgorCSAqLworCWlmICghbGlzdF9lbXB0eSgmcWgtPmxpc3QpKSB7CisKKwkJLyogSWYgb3VyIHF1ZXVlIGlzIG5vbmVtcHR5LCBtYWtlIHRoZSBuZXh0IFVSQiB0aGUgaGVhZCAqLworCQlpZiAoIWxpc3RfZW1wdHkoJnFoLT51cmJwLT5xdWV1ZV9saXN0KSkgeworCQkJc3RydWN0IHVyYl9wcml2ICpudXJicDsKKworCQkJbnVyYnAgPSBsaXN0X2VudHJ5KHFoLT51cmJwLT5xdWV1ZV9saXN0Lm5leHQsCisJCQkJCXN0cnVjdCB1cmJfcHJpdiwgcXVldWVfbGlzdCk7CisJCQludXJicC0+cXVldWVkID0gMDsKKwkJCWxpc3RfYWRkKCZudXJicC0+cWgtPmxpc3QsICZxaC0+bGlzdCk7CisJCQluZXdsaW5rID0gY3B1X3RvX2xlMzIobnVyYnAtPnFoLT5kbWFfaGFuZGxlKSB8IFVIQ0lfUFRSX1FIOworCQl9IGVsc2UKKwkJCW5ld2xpbmsgPSBxaC0+bGluazsKKworCQkvKiBGaXggdXAgdGhlIHByZXZpb3VzIFFIJ3MgcXVldWUgdG8gbGluayB0byBlaXRoZXIKKwkJICogdGhlIG5ldyBoZWFkIG9mIHRoaXMgcXVldWUgb3IgdGhlIHN0YXJ0IG9mIHRoZQorCQkgKiBuZXh0IGVuZHBvaW50J3MgcXVldWUuICovCisJCXBxaCA9IGxpc3RfZW50cnkocWgtPmxpc3QucHJldiwgc3RydWN0IHVoY2lfcWgsIGxpc3QpOworCQlwcWgtPmxpbmsgPSBuZXdsaW5rOworCQlpZiAocHFoLT51cmJwKSB7CisJCQlzdHJ1Y3QgdXJiX3ByaXYgKnR1cmJwOworCisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR1cmJwLCAmcHFoLT51cmJwLT5xdWV1ZV9saXN0LAorCQkJCQlxdWV1ZV9saXN0KQorCQkJCXR1cmJwLT5xaC0+bGluayA9IG5ld2xpbms7CisJCX0KKwkJd21iKCk7CisKKwkJLyogTGVhdmUgcWgtPmxpbmsgaW4gY2FzZSB0aGUgSEMgaXMgb24gdGhlIFFIIG5vdywgaXQgd2lsbCAqLworCQkvKiBjb250aW51ZSB0aGUgcmVzdCBvZiB0aGUgc2NoZWR1bGUgKi8KKwkJcWgtPmVsZW1lbnQgPSBVSENJX1BUUl9URVJNOworCisJCWxpc3RfZGVsX2luaXQoJnFoLT5saXN0KTsKKwl9CisKKwlsaXN0X2RlbF9pbml0KCZxaC0+dXJicC0+cXVldWVfbGlzdCk7CisJcWgtPnVyYnAgPSBOVUxMOworCisJdWhjaV9nZXRfY3VycmVudF9mcmFtZV9udW1iZXIodWhjaSk7CisJaWYgKHVoY2ktPmZyYW1lX251bWJlciArIHVoY2ktPmlzX3N0b3BwZWQgIT0gdWhjaS0+cWhfcmVtb3ZlX2FnZSkgeworCQl1aGNpX2ZyZWVfcGVuZGluZ19xaHModWhjaSk7CisJCXVoY2ktPnFoX3JlbW92ZV9hZ2UgPSB1aGNpLT5mcmFtZV9udW1iZXI7CisJfQorCisJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSByZW1vdmUgbGlzdCBpcyBlbXB0eS4gU2V0IHRoZSBJT0MgYml0ICovCisJLyogdG8gZm9yY2UgYW4gaW50ZXJydXB0IHNvIHdlIGNhbiByZW1vdmUgdGhlIFFIICovCisJaWYgKGxpc3RfZW1wdHkoJnVoY2ktPnFoX3JlbW92ZV9saXN0KSkKKwkJdWhjaV9zZXRfbmV4dF9pbnRlcnJ1cHQodWhjaSk7CisKKwlsaXN0X2FkZCgmcWgtPnJlbW92ZV9saXN0LCAmdWhjaS0+cWhfcmVtb3ZlX2xpc3QpOworfQorCitzdGF0aWMgaW50IHVoY2lfZml4dXBfdG9nZ2xlKHN0cnVjdCB1cmIgKnVyYiwgdW5zaWduZWQgaW50IHRvZ2dsZSkKK3sKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSAoc3RydWN0IHVyYl9wcml2ICopdXJiLT5oY3ByaXY7CisJc3RydWN0IHVoY2lfdGQgKnRkOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZCwgJnVyYnAtPnRkX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHRvZ2dsZSkKKwkJCXRkLT50b2tlbiB8PSBjcHVfdG9fbGUzMihURF9UT0tFTl9UT0dHTEUpOworCQllbHNlCisJCQl0ZC0+dG9rZW4gJj0gfmNwdV90b19sZTMyKFREX1RPS0VOX1RPR0dMRSk7CisKKwkJdG9nZ2xlIF49IDE7CisJfQorCisJcmV0dXJuIHRvZ2dsZTsKK30KKworLyogVGhpcyBmdW5jdGlvbiB3aWxsIGFwcGVuZCBvbmUgVVJCJ3MgUUggdG8gYW5vdGhlciBVUkIncyBRSC4gVGhpcyBpcyBmb3IgKi8KKy8qIHF1ZXVpbmcgaW50ZXJydXB0LCBjb250cm9sIG9yIGJ1bGsgdHJhbnNmZXJzICovCitzdGF0aWMgdm9pZCB1aGNpX2FwcGVuZF9xdWV1ZWRfdXJiKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqZXVyYiwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1cmJfcHJpdiAqZXVyYnAsICp1cmJwLCAqZnVyYnAsICpsdXJicDsKKwlzdHJ1Y3QgdWhjaV90ZCAqbGx0ZDsKKworCWV1cmJwID0gZXVyYi0+aGNwcml2OworCXVyYnAgPSB1cmItPmhjcHJpdjsKKworCS8qIEZpbmQgdGhlIGZpcnN0IFVSQiBpbiB0aGUgcXVldWUgKi8KKwlmdXJicCA9IGV1cmJwOworCWlmIChldXJicC0+cXVldWVkKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZnVyYnAsICZldXJicC0+cXVldWVfbGlzdCwgcXVldWVfbGlzdCkKKwkJCWlmICghZnVyYnAtPnF1ZXVlZCkKKwkJCQlicmVhazsKKwl9CisKKwlsdXJicCA9IGxpc3RfZW50cnkoZnVyYnAtPnF1ZXVlX2xpc3QucHJldiwgc3RydWN0IHVyYl9wcml2LCBxdWV1ZV9saXN0KTsKKworCWxsdGQgPSBsaXN0X2VudHJ5KGx1cmJwLT50ZF9saXN0LnByZXYsIHN0cnVjdCB1aGNpX3RkLCBsaXN0KTsKKworCS8qIENvbnRyb2wgdHJhbnNmZXJzIGFsd2F5cyBzdGFydCB3aXRoIHRvZ2dsZSAwICovCisJaWYgKCF1c2JfcGlwZWNvbnRyb2wodXJiLT5waXBlKSkKKwkJdXNiX3NldHRvZ2dsZSh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLAorCQkJCXVzYl9waXBlb3V0KHVyYi0+cGlwZSksCisJCQkJdWhjaV9maXh1cF90b2dnbGUodXJiLAorCQkJCQl1aGNpX3RvZ2dsZSh0ZF90b2tlbihsbHRkKSkgXiAxKSk7CisKKwkvKiBBbGwgcWgncyBpbiB0aGUgcXVldWUgbmVlZCB0byBsaW5rIHRvIHRoZSBuZXh0IHF1ZXVlICovCisJdXJicC0+cWgtPmxpbmsgPSBldXJicC0+cWgtPmxpbms7CisKKwl3bWIoKTsJCQkvKiBNYWtlIHN1cmUgd2UgZmx1c2ggZXZlcnl0aGluZyAqLworCisJbGx0ZC0+bGluayA9IGNwdV90b19sZTMyKHVyYnAtPnFoLT5kbWFfaGFuZGxlKSB8IFVIQ0lfUFRSX1FIOworCisJbGlzdF9hZGRfdGFpbCgmdXJicC0+cXVldWVfbGlzdCwgJmZ1cmJwLT5xdWV1ZV9saXN0KTsKKworCXVyYnAtPnF1ZXVlZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHVoY2lfZGVsZXRlX3F1ZXVlZF91cmIoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwLCAqbnVyYnAsICpwdXJicCwgKnR1cmJwOworCXN0cnVjdCB1aGNpX3RkICpwbHRkOworCXVuc2lnbmVkIGludCB0b2dnbGU7CisKKwl1cmJwID0gdXJiLT5oY3ByaXY7CisKKwlpZiAobGlzdF9lbXB0eSgmdXJicC0+cXVldWVfbGlzdCkpCisJCXJldHVybjsKKworCW51cmJwID0gbGlzdF9lbnRyeSh1cmJwLT5xdWV1ZV9saXN0Lm5leHQsIHN0cnVjdCB1cmJfcHJpdiwgcXVldWVfbGlzdCk7CisKKwkvKgorCSAqIEZpeCB1cCB0aGUgdG9nZ2xlIGZvciB0aGUgZm9sbG93aW5nIFVSQnMgaW4gdGhlIHF1ZXVlLgorCSAqIE9ubHkgbmVlZGVkIGZvciBidWxrIGFuZCBpbnRlcnJ1cHQ6IGNvbnRyb2wgYW5kIGlzb2Nocm9ub3VzCisJICogZW5kcG9pbnRzIGRvbid0IHByb3BhZ2F0ZSB0b2dnbGVzIGJldHdlZW4gbWVzc2FnZXMuCisJICovCisJaWYgKHVzYl9waXBlYnVsayh1cmItPnBpcGUpIHx8IHVzYl9waXBlaW50KHVyYi0+cGlwZSkpIHsKKwkJaWYgKCF1cmJwLT5xdWV1ZWQpCisJCQkvKiBXZSBqdXN0IHNldCB0aGUgdG9nZ2xlIGluIHVoY2lfdW5saW5rX2dlbmVyaWMgKi8KKwkJCXRvZ2dsZSA9IHVzYl9nZXR0b2dnbGUodXJiLT5kZXYsCisJCQkJCXVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKKwkJCQkJdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7CisJCWVsc2UgeworCQkJLyogSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgcXVldWUsIGdyYWIgdGhlICovCisJCQkvKiB0b2dnbGUgZnJvbSB0aGUgVEQgcHJldmlvdXMgdG8gdXMgKi8KKwkJCXB1cmJwID0gbGlzdF9lbnRyeSh1cmJwLT5xdWV1ZV9saXN0LnByZXYsCisJCQkJCXN0cnVjdCB1cmJfcHJpdiwgcXVldWVfbGlzdCk7CisJCQlwbHRkID0gbGlzdF9lbnRyeShwdXJicC0+dGRfbGlzdC5wcmV2LAorCQkJCQlzdHJ1Y3QgdWhjaV90ZCwgbGlzdCk7CisJCQl0b2dnbGUgPSB1aGNpX3RvZ2dsZSh0ZF90b2tlbihwbHRkKSkgXiAxOworCQl9CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0dXJicCwgJnVyYnAtPnF1ZXVlX2xpc3QsIHF1ZXVlX2xpc3QpIHsKKwkJCWlmICghdHVyYnAtPnF1ZXVlZCkKKwkJCQlicmVhazsKKwkJCXRvZ2dsZSA9IHVoY2lfZml4dXBfdG9nZ2xlKHR1cmJwLT51cmIsIHRvZ2dsZSk7CisJCX0KKworCQl1c2Jfc2V0dG9nZ2xlKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCisJCQkJdXNiX3BpcGVvdXQodXJiLT5waXBlKSwgdG9nZ2xlKTsKKwl9CisKKwlpZiAodXJicC0+cXVldWVkKSB7CisJCS8qIFdlJ3JlIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIChvciBlbmQpLiAgVGhlIGNhc2Ugd2hlcmUKKwkJICogd2UncmUgYXQgdGhlIGhlYWQgaXMgaGFuZGxlZCBpbiB1aGNpX3JlbW92ZV9xaCgpLiAqLworCQlwdXJicCA9IGxpc3RfZW50cnkodXJicC0+cXVldWVfbGlzdC5wcmV2LCBzdHJ1Y3QgdXJiX3ByaXYsCisJCQkJcXVldWVfbGlzdCk7CisKKwkJcGx0ZCA9IGxpc3RfZW50cnkocHVyYnAtPnRkX2xpc3QucHJldiwgc3RydWN0IHVoY2lfdGQsIGxpc3QpOworCQlpZiAobnVyYnAtPnF1ZXVlZCkKKwkJCXBsdGQtPmxpbmsgPSBjcHVfdG9fbGUzMihudXJicC0+cWgtPmRtYV9oYW5kbGUpIHwgVUhDSV9QVFJfUUg7CisJCWVsc2UKKwkJCS8qIFRoZSBuZXh0IFVSQiBoYXBwZW5zIHRvIGJlIHRoZSBiZWdpbm5pbmcsIHNvICovCisJCQkvKiAgd2UncmUgdGhlIGxhc3QsIGVuZCB0aGUgY2hhaW4gKi8KKwkJCXBsdGQtPmxpbmsgPSBVSENJX1BUUl9URVJNOworCX0KKworCS8qIHVyYnAtPnF1ZXVlX2xpc3QgaXMgaGFuZGxlZCBpbiB1aGNpX3JlbW92ZV9xaCgpICovCit9CisKK3N0YXRpYyBzdHJ1Y3QgdXJiX3ByaXYgKnVoY2lfYWxsb2NfdXJiX3ByaXYoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwOworCisJdXJicCA9IGttZW1fY2FjaGVfYWxsb2ModWhjaV91cF9jYWNoZXAsIFNMQUJfQVRPTUlDKTsKKwlpZiAoIXVyYnApCisJCXJldHVybiBOVUxMOworCisJbWVtc2V0KCh2b2lkICopdXJicCwgMCwgc2l6ZW9mKCp1cmJwKSk7CisKKwl1cmJwLT5pbnNlcnR0aW1lID0gamlmZmllczsKKwl1cmJwLT5mc2JydGltZSA9IGppZmZpZXM7CisJdXJicC0+dXJiID0gdXJiOworCQorCUlOSVRfTElTVF9IRUFEKCZ1cmJwLT50ZF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmdXJicC0+cXVldWVfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnVyYnAtPnVyYl9saXN0KTsKKworCWxpc3RfYWRkX3RhaWwoJnVyYnAtPnVyYl9saXN0LCAmdWhjaS0+dXJiX2xpc3QpOworCisJdXJiLT5oY3ByaXYgPSB1cmJwOworCisJcmV0dXJuIHVyYnA7Cit9CisKK3N0YXRpYyB2b2lkIHVoY2lfYWRkX3RkX3RvX3VyYihzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCB1aGNpX3RkICp0ZCkKK3sKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSAoc3RydWN0IHVyYl9wcml2ICopdXJiLT5oY3ByaXY7CisKKwl0ZC0+dXJiID0gdXJiOworCisJbGlzdF9hZGRfdGFpbCgmdGQtPmxpc3QsICZ1cmJwLT50ZF9saXN0KTsKK30KKworc3RhdGljIHZvaWQgdWhjaV9yZW1vdmVfdGRfZnJvbV91cmIoc3RydWN0IHVoY2lfdGQgKnRkKQoreworCWlmIChsaXN0X2VtcHR5KCZ0ZC0+bGlzdCkpCisJCXJldHVybjsKKworCWxpc3RfZGVsX2luaXQoJnRkLT5saXN0KTsKKworCXRkLT51cmIgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCB1aGNpX2Rlc3Ryb3lfdXJiX3ByaXYoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVoY2lfdGQgKnRkLCAqdG1wOworCXN0cnVjdCB1cmJfcHJpdiAqdXJicDsKKworCXVyYnAgPSAoc3RydWN0IHVyYl9wcml2ICopdXJiLT5oY3ByaXY7CisJaWYgKCF1cmJwKQorCQlyZXR1cm47CisKKwlpZiAoIWxpc3RfZW1wdHkoJnVyYnAtPnVyYl9saXN0KSkKKwkJZGV2X3dhcm4odWhjaV9kZXYodWhjaSksICJ1cmIgJXAgc3RpbGwgb24gdWhjaS0+dXJiX2xpc3QgIgorCQkJCSJvciB1aGNpLT5yZW1vdmVfbGlzdCFcbiIsIHVyYik7CisKKwl1aGNpX2dldF9jdXJyZW50X2ZyYW1lX251bWJlcih1aGNpKTsKKwlpZiAodWhjaS0+ZnJhbWVfbnVtYmVyICsgdWhjaS0+aXNfc3RvcHBlZCAhPSB1aGNpLT50ZF9yZW1vdmVfYWdlKSB7CisJCXVoY2lfZnJlZV9wZW5kaW5nX3Rkcyh1aGNpKTsKKwkJdWhjaS0+dGRfcmVtb3ZlX2FnZSA9IHVoY2ktPmZyYW1lX251bWJlcjsKKwl9CisKKwkvKiBDaGVjayB0byBzZWUgaWYgdGhlIHJlbW92ZSBsaXN0IGlzIGVtcHR5LiBTZXQgdGhlIElPQyBiaXQgKi8KKwkvKiB0byBmb3JjZSBhbiBpbnRlcnJ1cHQgc28gd2UgY2FuIHJlbW92ZSB0aGUgVEQncyovCisJaWYgKGxpc3RfZW1wdHkoJnVoY2ktPnRkX3JlbW92ZV9saXN0KSkKKwkJdWhjaV9zZXRfbmV4dF9pbnRlcnJ1cHQodWhjaSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGQsIHRtcCwgJnVyYnAtPnRkX2xpc3QsIGxpc3QpIHsKKwkJdWhjaV9yZW1vdmVfdGRfZnJvbV91cmIodGQpOworCQl1aGNpX3JlbW92ZV90ZCh1aGNpLCB0ZCk7CisJCWxpc3RfYWRkKCZ0ZC0+cmVtb3ZlX2xpc3QsICZ1aGNpLT50ZF9yZW1vdmVfbGlzdCk7CisJfQorCisJdXJiLT5oY3ByaXYgPSBOVUxMOworCWttZW1fY2FjaGVfZnJlZSh1aGNpX3VwX2NhY2hlcCwgdXJicCk7Cit9CisKK3N0YXRpYyB2b2lkIHVoY2lfaW5jX2ZzYnIoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OworCisJaWYgKCghKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfTk9fRlNCUikpICYmICF1cmJwLT5mc2JyKSB7CisJCXVyYnAtPmZzYnIgPSAxOworCQlpZiAoIXVoY2ktPmZzYnIrKyAmJiAhdWhjaS0+ZnNicnRpbWVvdXQpCisJCQl1aGNpLT5za2VsX3Rlcm1fcWgtPmxpbmsgPSBjcHVfdG9fbGUzMih1aGNpLT5za2VsX2ZzX2NvbnRyb2xfcWgtPmRtYV9oYW5kbGUpIHwgVUhDSV9QVFJfUUg7CisJfQorfQorCitzdGF0aWMgdm9pZCB1aGNpX2RlY19mc2JyKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1cmJfcHJpdiAqdXJicCA9IChzdHJ1Y3QgdXJiX3ByaXYgKil1cmItPmhjcHJpdjsKKworCWlmICgoISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX05PX0ZTQlIpKSAmJiB1cmJwLT5mc2JyKSB7CisJCXVyYnAtPmZzYnIgPSAwOworCQlpZiAoIS0tdWhjaS0+ZnNicikKKwkJCXVoY2ktPmZzYnJ0aW1lb3V0ID0gamlmZmllcyArIEZTQlJfREVMQVk7CisJfQorfQorCisvKgorICogTWFwIHN0YXR1cyB0byBzdGFuZGFyZCByZXN1bHQgY29kZXMKKyAqCisgKiA8c3RhdHVzPiBpcyAodGRfc3RhdHVzKHRkKSAmIDB4RjYwMDAwKSwgYS5rLmEuCisgKiB1aGNpX3N0YXR1c19iaXRzKHRkX3N0YXR1cyh0ZCkpLgorICogTm90ZTogPHN0YXR1cz4gZG9lcyBub3QgaW5jbHVkZSB0aGUgVERfQ1RSTF9OQUsgYml0LgorICogPGRpcl9vdXQ+IGlzIFRydWUgZm9yIG91dHB1dCBURHMgYW5kIEZhbHNlIGZvciBpbnB1dCBURHMuCisgKi8KK3N0YXRpYyBpbnQgdWhjaV9tYXBfc3RhdHVzKGludCBzdGF0dXMsIGludCBkaXJfb3V0KQoreworCWlmICghc3RhdHVzKQorCQlyZXR1cm4gMDsKKwlpZiAoc3RhdHVzICYgVERfQ1RSTF9CSVRTVFVGRikJCQkvKiBCaXRzdHVmZiBlcnJvciAqLworCQlyZXR1cm4gLUVQUk9UTzsKKwlpZiAoc3RhdHVzICYgVERfQ1RSTF9DUkNUSU1FTykgewkJLyogQ1JDL1RpbWVvdXQgKi8KKwkJaWYgKGRpcl9vdXQpCisJCQlyZXR1cm4gLUVQUk9UTzsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSUxTRVE7CisJfQorCWlmIChzdGF0dXMgJiBURF9DVFJMX0JBQkJMRSkJCQkvKiBCYWJibGUgKi8KKwkJcmV0dXJuIC1FT1ZFUkZMT1c7CisJaWYgKHN0YXR1cyAmIFREX0NUUkxfREJVRkVSUikJCQkvKiBCdWZmZXIgZXJyb3IgKi8KKwkJcmV0dXJuIC1FTk9TUjsKKwlpZiAoc3RhdHVzICYgVERfQ1RSTF9TVEFMTEVEKQkJCS8qIFN0YWxsZWQgKi8KKwkJcmV0dXJuIC1FUElQRTsKKwlXQVJOX09OKHN0YXR1cyAmIFREX0NUUkxfQUNUSVZFKTsJCS8qIEFjdGl2ZSAqLworCXJldHVybiAwOworfQorCisvKgorICogQ29udHJvbCB0cmFuc2ZlcnMKKyAqLworc3RhdGljIGludCB1aGNpX3N1Ym1pdF9jb250cm9sKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgdXJiICpldXJiKQoreworCXN0cnVjdCB1cmJfcHJpdiAqdXJicCA9IChzdHJ1Y3QgdXJiX3ByaXYgKil1cmItPmhjcHJpdjsKKwlzdHJ1Y3QgdWhjaV90ZCAqdGQ7CisJc3RydWN0IHVoY2lfcWggKnFoLCAqc2tlbHFoOworCXVuc2lnbmVkIGxvbmcgZGVzdGluYXRpb24sIHN0YXR1czsKKwlpbnQgbWF4c3plID0gdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLCB1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKKwlpbnQgbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCWRtYV9hZGRyX3QgZGF0YSA9IHVyYi0+dHJhbnNmZXJfZG1hOworCisJLyogVGhlICJwaXBlIiB0aGluZyBjb250YWlucyB0aGUgZGVzdGluYXRpb24gaW4gYml0cyA4LS0xOCAqLworCWRlc3RpbmF0aW9uID0gKHVyYi0+cGlwZSAmIFBJUEVfREVWRVBfTUFTSykgfCBVU0JfUElEX1NFVFVQOworCisJLyogMyBlcnJvcnMgKi8KKwlzdGF0dXMgPSBURF9DVFJMX0FDVElWRSB8IHVoY2lfbWF4ZXJyKDMpOworCWlmICh1cmItPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0xPVykKKwkJc3RhdHVzIHw9IFREX0NUUkxfTFM7CisKKwkvKgorCSAqIEJ1aWxkIHRoZSBURCBmb3IgdGhlIGNvbnRyb2wgcmVxdWVzdCBzZXR1cCBwYWNrZXQKKwkgKi8KKwl0ZCA9IHVoY2lfYWxsb2NfdGQodWhjaSwgdXJiLT5kZXYpOworCWlmICghdGQpCisJCXJldHVybiAtRU5PTUVNOworCisJdWhjaV9hZGRfdGRfdG9fdXJiKHVyYiwgdGQpOworCXVoY2lfZmlsbF90ZCh0ZCwgc3RhdHVzLCBkZXN0aW5hdGlvbiB8IHVoY2lfZXhwbGVuKDcpLAorCQl1cmItPnNldHVwX2RtYSk7CisKKwkvKgorCSAqIElmIGRpcmVjdGlvbiBpcyAic2VuZCIsIGNoYW5nZSB0aGUgcGFja2V0IElEIGZyb20gU0VUVVAgKDB4MkQpCisJICogdG8gT1VUICgweEUxKS4gIEVsc2UgY2hhbmdlIGl0IGZyb20gU0VUVVAgdG8gSU4gKDB4NjkpIGFuZAorCSAqIHNldCBTaG9ydCBQYWNrZXQgRGV0ZWN0IChTUEQpIGZvciBhbGwgZGF0YSBwYWNrZXRzLgorCSAqLworCWlmICh1c2JfcGlwZW91dCh1cmItPnBpcGUpKQorCQlkZXN0aW5hdGlvbiBePSAoVVNCX1BJRF9TRVRVUCBeIFVTQl9QSURfT1VUKTsKKwllbHNlIHsKKwkJZGVzdGluYXRpb24gXj0gKFVTQl9QSURfU0VUVVAgXiBVU0JfUElEX0lOKTsKKwkJc3RhdHVzIHw9IFREX0NUUkxfU1BEOworCX0KKworCS8qCisJICogQnVpbGQgdGhlIERBVEEgVEQncworCSAqLworCXdoaWxlIChsZW4gPiAwKSB7CisJCWludCBwa3RzemUgPSBsZW47CisKKwkJaWYgKHBrdHN6ZSA+IG1heHN6ZSkKKwkJCXBrdHN6ZSA9IG1heHN6ZTsKKworCQl0ZCA9IHVoY2lfYWxsb2NfdGQodWhjaSwgdXJiLT5kZXYpOworCQlpZiAoIXRkKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJLyogQWx0ZXJuYXRlIERhdGEwLzEgKHN0YXJ0IHdpdGggRGF0YTEpICovCisJCWRlc3RpbmF0aW9uIF49IFREX1RPS0VOX1RPR0dMRTsKKwkKKwkJdWhjaV9hZGRfdGRfdG9fdXJiKHVyYiwgdGQpOworCQl1aGNpX2ZpbGxfdGQodGQsIHN0YXR1cywgZGVzdGluYXRpb24gfCB1aGNpX2V4cGxlbihwa3RzemUgLSAxKSwKKwkJCWRhdGEpOworCisJCWRhdGEgKz0gcGt0c3plOworCQlsZW4gLT0gcGt0c3plOworCX0KKworCS8qCisJICogQnVpbGQgdGhlIGZpbmFsIFREIGZvciBjb250cm9sIHN0YXR1cyAKKwkgKi8KKwl0ZCA9IHVoY2lfYWxsb2NfdGQodWhjaSwgdXJiLT5kZXYpOworCWlmICghdGQpCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBJdCdzIElOIGlmIHRoZSBwaXBlIGlzIGFuIG91dHB1dCBwaXBlIG9yIHdlJ3JlIG5vdCBleHBlY3RpbmcKKwkgKiBkYXRhIGJhY2suCisJICovCisJZGVzdGluYXRpb24gJj0gflREX1RPS0VOX1BJRF9NQVNLOworCWlmICh1c2JfcGlwZW91dCh1cmItPnBpcGUpIHx8ICF1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpCisJCWRlc3RpbmF0aW9uIHw9IFVTQl9QSURfSU47CisJZWxzZQorCQlkZXN0aW5hdGlvbiB8PSBVU0JfUElEX09VVDsKKworCWRlc3RpbmF0aW9uIHw9IFREX1RPS0VOX1RPR0dMRTsJCS8qIEVuZCBpbiBEYXRhMSAqLworCisJc3RhdHVzICY9IH5URF9DVFJMX1NQRDsKKworCXVoY2lfYWRkX3RkX3RvX3VyYih1cmIsIHRkKTsKKwl1aGNpX2ZpbGxfdGQodGQsIHN0YXR1cyB8IFREX0NUUkxfSU9DLAorCQlkZXN0aW5hdGlvbiB8IHVoY2lfZXhwbGVuKFVIQ0lfTlVMTF9EQVRBX1NJWkUpLCAwKTsKKworCXFoID0gdWhjaV9hbGxvY19xaCh1aGNpLCB1cmItPmRldik7CisJaWYgKCFxaCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl1cmJwLT5xaCA9IHFoOworCXFoLT51cmJwID0gdXJicDsKKworCXVoY2lfaW5zZXJ0X3Rkc19pbl9xaChxaCwgdXJiLCBVSENJX1BUUl9CUkVBRFRIKTsKKworCS8qIExvdy1zcGVlZCB0cmFuc2ZlcnMgZ2V0IGEgZGlmZmVyZW50IHF1ZXVlLCBhbmQgd29uJ3QgaG9nIHRoZSBidXMuCisJICogQWxzbywgc29tZSBkZXZpY2VzIGVudW1lcmF0ZSBiZXR0ZXIgd2l0aG91dCBGU0JSOyB0aGUgZWFzaWVzdCB3YXkKKwkgKiB0byBkbyB0aGF0IGlzIHRvIHB1dCBVUkJzIG9uIHRoZSBsb3ctc3BlZWQgcXVldWUgd2hpbGUgdGhlIGRldmljZQorCSAqIGlzIGluIHRoZSBERUZBVUxUIHN0YXRlLiAqLworCWlmICh1cmItPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0xPVyB8fAorCQkJdXJiLT5kZXYtPnN0YXRlID09IFVTQl9TVEFURV9ERUZBVUxUKQorCQlza2VscWggPSB1aGNpLT5za2VsX2xzX2NvbnRyb2xfcWg7CisJZWxzZSB7CisJCXNrZWxxaCA9IHVoY2ktPnNrZWxfZnNfY29udHJvbF9xaDsKKwkJdWhjaV9pbmNfZnNicih1aGNpLCB1cmIpOworCX0KKworCWlmIChldXJiKQorCQl1aGNpX2FwcGVuZF9xdWV1ZWRfdXJiKHVoY2ksIGV1cmIsIHVyYik7CisJZWxzZQorCQl1aGNpX2luc2VydF9xaCh1aGNpLCBza2VscWgsIHVyYik7CisKKwlyZXR1cm4gLUVJTlBST0dSRVNTOworfQorCisvKgorICogSWYgY29udHJvbC1JTiB0cmFuc2ZlciB3YXMgc2hvcnQsIHRoZSBzdGF0dXMgcGFja2V0IHdhc24ndCBzZW50LgorICogVGhpcyByb3V0aW5lIGNoYW5nZXMgdGhlIGVsZW1lbnQgcG9pbnRlciBpbiB0aGUgUUggdG8gcG9pbnQgYXQgdGhlCisgKiBzdGF0dXMgVEQuICBJdCdzIHNhZmUgdG8gZG8gdGhpcyBldmVuIHdoaWxlIHRoZSBRSCBpcyBsaXZlLCBiZWNhdXNlCisgKiB0aGUgaGFyZHdhcmUgb25seSB1cGRhdGVzIHRoZSBlbGVtZW50IHBvaW50ZXIgZm9sbG93aW5nIGEgc3VjY2Vzc2Z1bAorICogdHJhbnNmZXIuICBUaGUgaW5hY3RpdmUgVEQgZm9yIHRoZSBzaG9ydCBwYWNrZXQgd29uJ3QgY2F1c2UgYW4gdXBkYXRlLAorICogc28gdGhlIHBvaW50ZXIgd29uJ3QgZ2V0IG92ZXJ3cml0dGVuLiAgVGhlIG5leHQgdGltZSB0aGUgY29udHJvbGxlcgorICogc2VlcyB0aGlzIFFILCBpdCB3aWxsIHNlbmQgdGhlIHN0YXR1cyBwYWNrZXQuCisgKi8KK3N0YXRpYyBpbnQgdXNiX2NvbnRyb2xfcmV0cmlnZ2VyX3N0YXR1cyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSAoc3RydWN0IHVyYl9wcml2ICopdXJiLT5oY3ByaXY7CisJc3RydWN0IHVoY2lfdGQgKnRkOworCisJdXJicC0+c2hvcnRfY29udHJvbF9wYWNrZXQgPSAxOworCisJdGQgPSBsaXN0X2VudHJ5KHVyYnAtPnRkX2xpc3QucHJldiwgc3RydWN0IHVoY2lfdGQsIGxpc3QpOworCXVyYnAtPnFoLT5lbGVtZW50ID0gY3B1X3RvX2xlMzIodGQtPmRtYV9oYW5kbGUpOworCisJcmV0dXJuIC1FSU5QUk9HUkVTUzsKK30KKworCitzdGF0aWMgaW50IHVoY2lfcmVzdWx0X2NvbnRyb2woc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wLCAqaGVhZDsKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSB1cmItPmhjcHJpdjsKKwlzdHJ1Y3QgdWhjaV90ZCAqdGQ7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChsaXN0X2VtcHR5KCZ1cmJwLT50ZF9saXN0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloZWFkID0gJnVyYnAtPnRkX2xpc3Q7CisKKwlpZiAodXJicC0+c2hvcnRfY29udHJvbF9wYWNrZXQpIHsKKwkJdG1wID0gaGVhZC0+cHJldjsKKwkJZ290byBzdGF0dXNfc3RhZ2U7CisJfQorCisJdG1wID0gaGVhZC0+bmV4dDsKKwl0ZCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgdWhjaV90ZCwgbGlzdCk7CisKKwkvKiBUaGUgZmlyc3QgVEQgaXMgdGhlIFNFVFVQIHN0YWdlLCBjaGVjayB0aGUgc3RhdHVzLCBidXQgc2tpcCAqLworCS8qICB0aGUgY291bnQgKi8KKwlzdGF0dXMgPSB1aGNpX3N0YXR1c19iaXRzKHRkX3N0YXR1cyh0ZCkpOworCWlmIChzdGF0dXMgJiBURF9DVFJMX0FDVElWRSkKKwkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKKworCWlmIChzdGF0dXMpCisJCWdvdG8gdGRfZXJyb3I7CisKKwl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCisJLyogVGhlIHJlc3Qgb2YgdGhlIFREJ3MgKGJ1dCB0aGUgbGFzdCkgYXJlIGRhdGEgKi8KKwl0bXAgPSB0bXAtPm5leHQ7CisJd2hpbGUgKHRtcCAhPSBoZWFkICYmIHRtcC0+bmV4dCAhPSBoZWFkKSB7CisJCXVuc2lnbmVkIGludCBjdHJsc3RhdDsKKworCQl0ZCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgdWhjaV90ZCwgbGlzdCk7CisJCXRtcCA9IHRtcC0+bmV4dDsKKworCQljdHJsc3RhdCA9IHRkX3N0YXR1cyh0ZCk7CisJCXN0YXR1cyA9IHVoY2lfc3RhdHVzX2JpdHMoY3RybHN0YXQpOworCQlpZiAoc3RhdHVzICYgVERfQ1RSTF9BQ1RJVkUpCisJCQlyZXR1cm4gLUVJTlBST0dSRVNTOworCisJCXVyYi0+YWN0dWFsX2xlbmd0aCArPSB1aGNpX2FjdHVhbF9sZW5ndGgoY3RybHN0YXQpOworCisJCWlmIChzdGF0dXMpCisJCQlnb3RvIHRkX2Vycm9yOworCisJCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSByZWNlaXZlZCBhIHNob3J0IHBhY2tldCAqLworCQlpZiAodWhjaV9hY3R1YWxfbGVuZ3RoKGN0cmxzdGF0KSA8CisJCQkJdWhjaV9leHBlY3RlZF9sZW5ndGgodGRfdG9rZW4odGQpKSkgeworCQkJaWYgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKSB7CisJCQkJcmV0ID0gLUVSRU1PVEVJTzsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKworCQkJaWYgKHVoY2lfcGFja2V0aWQodGRfdG9rZW4odGQpKSA9PSBVU0JfUElEX0lOKQorCQkJCXJldHVybiB1c2JfY29udHJvbF9yZXRyaWdnZXJfc3RhdHVzKHVoY2ksIHVyYik7CisJCQllbHNlCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKK3N0YXR1c19zdGFnZToKKwl0ZCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgdWhjaV90ZCwgbGlzdCk7CisKKwkvKiBDb250cm9sIHN0YXR1cyBzdGFnZSAqLworCXN0YXR1cyA9IHRkX3N0YXR1cyh0ZCk7CisKKyNpZmRlZiBJX0hBVkVfQlVHR1lfQVBDX0JBQ0tVUFMKKwkvKiBBUEMgQmFja1VQUyBQcm8ga2x1ZGdlICovCisJLyogSXQgdHJpZXMgdG8gc2VuZCBhbGwgb2YgdGhlIGRlc2NyaXB0b3IgaW5zdGVhZCBvZiB0aGUgYW1vdW50ICovCisJLyogIHdlIHJlcXVlc3RlZCAqLworCWlmIChzdGF0dXMgJiBURF9DVFJMX0lPQyAmJgkvKiBJT0MgaXMgbWFza2VkIG91dCBieSB1aGNpX3N0YXR1c19iaXRzICovCisJICAgIHN0YXR1cyAmIFREX0NUUkxfQUNUSVZFICYmCisJICAgIHN0YXR1cyAmIFREX0NUUkxfTkFLKQorCQlyZXR1cm4gMDsKKyNlbmRpZgorCisJc3RhdHVzID0gdWhjaV9zdGF0dXNfYml0cyhzdGF0dXMpOworCWlmIChzdGF0dXMgJiBURF9DVFJMX0FDVElWRSkKKwkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKKworCWlmIChzdGF0dXMpCisJCWdvdG8gdGRfZXJyb3I7CisKKwlyZXR1cm4gMDsKKwordGRfZXJyb3I6CisJcmV0ID0gdWhjaV9tYXBfc3RhdHVzKHN0YXR1cywgdWhjaV9wYWNrZXRvdXQodGRfdG9rZW4odGQpKSk7CisKK2VycjoKKwlpZiAoKGRlYnVnID09IDEgJiYgcmV0ICE9IC1FUElQRSkgfHwgZGVidWcgPiAxKSB7CisJCS8qIFNvbWUgZGVidWdnaW5nIGNvZGUgKi8KKwkJZGV2X2RiZyh1aGNpX2Rldih1aGNpKSwgIiVzOiBmYWlsZWQgd2l0aCBzdGF0dXMgJXhcbiIsCisJCQkJX19GVU5DVElPTl9fLCBzdGF0dXMpOworCisJCWlmIChlcnJidWYpIHsKKwkJCS8qIFByaW50IHRoZSBjaGFpbiBmb3IgZGVidWdnaW5nIHB1cnBvc2VzICovCisJCQl1aGNpX3Nob3dfcWgodXJicC0+cWgsIGVycmJ1ZiwgRVJSQlVGX0xFTiwgMCk7CisKKwkJCWxwcmludGsoZXJyYnVmKTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBDb21tb24gc3VibWl0IGZvciBidWxrIGFuZCBpbnRlcnJ1cHQKKyAqLworc3RhdGljIGludCB1aGNpX3N1Ym1pdF9jb21tb24oc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCB1cmIgKmV1cmIsIHN0cnVjdCB1aGNpX3FoICpza2VscWgpCit7CisJc3RydWN0IHVoY2lfdGQgKnRkOworCXN0cnVjdCB1aGNpX3FoICpxaDsKKwl1bnNpZ25lZCBsb25nIGRlc3RpbmF0aW9uLCBzdGF0dXM7CisJaW50IG1heHN6ZSA9IHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwgdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7CisJaW50IGxlbiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSAoc3RydWN0IHVyYl9wcml2ICopdXJiLT5oY3ByaXY7CisJZG1hX2FkZHJfdCBkYXRhID0gdXJiLT50cmFuc2Zlcl9kbWE7CisKKwlpZiAobGVuIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBUaGUgInBpcGUiIHRoaW5nIGNvbnRhaW5zIHRoZSBkZXN0aW5hdGlvbiBpbiBiaXRzIDgtLTE4ICovCisJZGVzdGluYXRpb24gPSAodXJiLT5waXBlICYgUElQRV9ERVZFUF9NQVNLKSB8IHVzYl9wYWNrZXRpZCh1cmItPnBpcGUpOworCisJc3RhdHVzID0gdWhjaV9tYXhlcnIoMykgfCBURF9DVFJMX0FDVElWRTsKKwlpZiAodXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9MT1cpCisJCXN0YXR1cyB8PSBURF9DVFJMX0xTOworCWlmICh1c2JfcGlwZWluKHVyYi0+cGlwZSkpCisJCXN0YXR1cyB8PSBURF9DVFJMX1NQRDsKKworCS8qCisJICogQnVpbGQgdGhlIERBVEEgVEQncworCSAqLworCWRvIHsJLyogQWxsb3cgemVybyBsZW5ndGggcGFja2V0cyAqLworCQlpbnQgcGt0c3plID0gbWF4c3plOworCisJCWlmIChwa3RzemUgPj0gbGVuKSB7CisJCQlwa3RzemUgPSBsZW47CisJCQlpZiAoISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykpCisJCQkJc3RhdHVzICY9IH5URF9DVFJMX1NQRDsKKwkJfQorCisJCXRkID0gdWhjaV9hbGxvY190ZCh1aGNpLCB1cmItPmRldik7CisJCWlmICghdGQpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQl1aGNpX2FkZF90ZF90b191cmIodXJiLCB0ZCk7CisJCXVoY2lfZmlsbF90ZCh0ZCwgc3RhdHVzLCBkZXN0aW5hdGlvbiB8IHVoY2lfZXhwbGVuKHBrdHN6ZSAtIDEpIHwKKwkJCSh1c2JfZ2V0dG9nZ2xlKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCisJCQkgdXNiX3BpcGVvdXQodXJiLT5waXBlKSkgPDwgVERfVE9LRU5fVE9HR0xFX1NISUZUKSwKKwkJCWRhdGEpOworCisJCWRhdGEgKz0gcGt0c3plOworCQlsZW4gLT0gbWF4c3plOworCisJCXVzYl9kb3RvZ2dsZSh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLAorCQkJdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7CisJfSB3aGlsZSAobGVuID4gMCk7CisKKwkvKgorCSAqIFVSQl9aRVJPX1BBQ0tFVCBtZWFucyBhZGRpbmcgYSAwLWxlbmd0aCBwYWNrZXQsIGlmIGRpcmVjdGlvbgorCSAqIGlzIE9VVCBhbmQgdGhlIHRyYW5zZmVyX2xlbmd0aCB3YXMgYW4gZXhhY3QgbXVsdGlwbGUgb2YgbWF4c3plLAorCSAqIGhlbmNlIChsZW4gPSB0cmFuc2Zlcl9sZW5ndGggLSBOICogbWF4c3plKSA9PSAwCisJICogaG93ZXZlciwgaWYgdHJhbnNmZXJfbGVuZ3RoID09IDAsIHRoZSB6ZXJvIHBhY2tldCB3YXMgYWxyZWFkeQorCSAqIHByZXBhcmVkIGFib3ZlLgorCSAqLworCWlmICh1c2JfcGlwZW91dCh1cmItPnBpcGUpICYmICh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1pFUk9fUEFDS0VUKSAmJgorCSAgICAhbGVuICYmIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkgeworCQl0ZCA9IHVoY2lfYWxsb2NfdGQodWhjaSwgdXJiLT5kZXYpOworCQlpZiAoIXRkKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJdWhjaV9hZGRfdGRfdG9fdXJiKHVyYiwgdGQpOworCQl1aGNpX2ZpbGxfdGQodGQsIHN0YXR1cywgZGVzdGluYXRpb24gfCB1aGNpX2V4cGxlbihVSENJX05VTExfREFUQV9TSVpFKSB8CisJCQkodXNiX2dldHRvZ2dsZSh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLAorCQkJIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpIDw8IFREX1RPS0VOX1RPR0dMRV9TSElGVCksCisJCQlkYXRhKTsKKworCQl1c2JfZG90b2dnbGUodXJiLT5kZXYsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKKwkJCXVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOworCX0KKworCS8qIFNldCB0aGUgaW50ZXJydXB0LW9uLWNvbXBsZXRpb24gZmxhZyBvbiB0aGUgbGFzdCBwYWNrZXQuCisJICogQSBtb3JlLW9yLWxlc3MgdHlwaWNhbCA0IEtCIFVSQiAoPSBzaXplIG9mIG9uZSBtZW1vcnkgcGFnZSkKKwkgKiB3aWxsIHJlcXVpcmUgYWJvdXQgMyBtcyB0byB0cmFuc2ZlcjsgdGhhdCdzIGEgbGl0dGxlIG9uIHRoZQorCSAqIGZhc3Qgc2lkZSBidXQgbm90IGVub3VnaCB0byBqdXN0aWZ5IGRlbGF5aW5nIGFuIGludGVycnVwdAorCSAqIG1vcmUgdGhhbiAyIG9yIDMgVVJCcywgc28gd2Ugd2lsbCBpZ25vcmUgdGhlIFVSQl9OT19JTlRFUlJVUFQKKwkgKiBmbGFnIHNldHRpbmcuICovCisJdGQtPnN0YXR1cyB8PSBjcHVfdG9fbGUzMihURF9DVFJMX0lPQyk7CisKKwlxaCA9IHVoY2lfYWxsb2NfcWgodWhjaSwgdXJiLT5kZXYpOworCWlmICghcWgpCisJCXJldHVybiAtRU5PTUVNOworCisJdXJicC0+cWggPSBxaDsKKwlxaC0+dXJicCA9IHVyYnA7CisKKwkvKiBBbHdheXMgYnJlYWR0aCBmaXJzdCAqLworCXVoY2lfaW5zZXJ0X3Rkc19pbl9xaChxaCwgdXJiLCBVSENJX1BUUl9CUkVBRFRIKTsKKworCWlmIChldXJiKQorCQl1aGNpX2FwcGVuZF9xdWV1ZWRfdXJiKHVoY2ksIGV1cmIsIHVyYik7CisJZWxzZQorCQl1aGNpX2luc2VydF9xaCh1aGNpLCBza2VscWgsIHVyYik7CisKKwlyZXR1cm4gLUVJTlBST0dSRVNTOworfQorCisvKgorICogQ29tbW9uIHJlc3VsdCBmb3IgYnVsayBhbmQgaW50ZXJydXB0CisgKi8KK3N0YXRpYyBpbnQgdWhjaV9yZXN1bHRfY29tbW9uKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1cmJfcHJpdiAqdXJicCA9IHVyYi0+aGNwcml2OworCXN0cnVjdCB1aGNpX3RkICp0ZDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRkLCAmdXJicC0+dGRfbGlzdCwgbGlzdCkgeworCQl1bnNpZ25lZCBpbnQgY3RybHN0YXQgPSB0ZF9zdGF0dXModGQpOworCisJCXN0YXR1cyA9IHVoY2lfc3RhdHVzX2JpdHMoY3RybHN0YXQpOworCQlpZiAoc3RhdHVzICYgVERfQ1RSTF9BQ1RJVkUpCisJCQlyZXR1cm4gLUVJTlBST0dSRVNTOworCisJCXVyYi0+YWN0dWFsX2xlbmd0aCArPSB1aGNpX2FjdHVhbF9sZW5ndGgoY3RybHN0YXQpOworCisJCWlmIChzdGF0dXMpCisJCQlnb3RvIHRkX2Vycm9yOworCisJCWlmICh1aGNpX2FjdHVhbF9sZW5ndGgoY3RybHN0YXQpIDwKKwkJCQl1aGNpX2V4cGVjdGVkX2xlbmd0aCh0ZF90b2tlbih0ZCkpKSB7CisJCQlpZiAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spIHsKKwkJCQlyZXQgPSAtRVJFTU9URUlPOworCQkJCWdvdG8gZXJyOworCQkJfSBlbHNlCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKwordGRfZXJyb3I6CisJcmV0ID0gdWhjaV9tYXBfc3RhdHVzKHN0YXR1cywgdWhjaV9wYWNrZXRvdXQodGRfdG9rZW4odGQpKSk7CisKK2VycjoKKwkvKiAKKwkgKiBFbmFibGUgdGhpcyBjaHVuayBvZiBjb2RlIGlmIHlvdSB3YW50IHRvIHNlZSBzb21lIG1vcmUgZGVidWdnaW5nLgorCSAqIEJ1dCBiZSBjYXJlZnVsLCBpdCBoYXMgdGhlIHRlbmRhbmN5IHRvIHN0YXJ2ZSBvdXQga2h1YmQgYW5kIHByZXZlbnQKKwkgKiBkaXNjb25uZWN0cyBmcm9tIGhhcHBlbmluZyBzdWNjZXNzZnVsbHkgaWYgeW91IGhhdmUgYSBzbG93IGRlYnVnCisJICogbG9nIGludGVyZmFjZSAobGlrZSBhIHNlcmlhbCBjb25zb2xlLgorCSAqLworI2lmIDAKKwlpZiAoKGRlYnVnID09IDEgJiYgcmV0ICE9IC1FUElQRSkgfHwgZGVidWcgPiAxKSB7CisJCS8qIFNvbWUgZGVidWdnaW5nIGNvZGUgKi8KKwkJZGV2X2RiZyh1aGNpX2Rldih1aGNpKSwgIiVzOiBmYWlsZWQgd2l0aCBzdGF0dXMgJXhcbiIsCisJCQkJX19GVU5DVElPTl9fLCBzdGF0dXMpOworCisJCWlmIChlcnJidWYpIHsKKwkJCS8qIFByaW50IHRoZSBjaGFpbiBmb3IgZGVidWdnaW5nIHB1cnBvc2VzICovCisJCQl1aGNpX3Nob3dfcWgodXJicC0+cWgsIGVycmJ1ZiwgRVJSQlVGX0xFTiwgMCk7CisKKwkJCWxwcmludGsoZXJyYnVmKTsKKwkJfQorCX0KKyNlbmRpZgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHVoY2lfc3VibWl0X2J1bGsoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCB1cmIgKmV1cmIpCit7CisJaW50IHJldDsKKworCS8qIENhbid0IGhhdmUgbG93LXNwZWVkIGJ1bGsgdHJhbnNmZXJzICovCisJaWYgKHVyYi0+ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfTE9XKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IHVoY2lfc3VibWl0X2NvbW1vbih1aGNpLCB1cmIsIGV1cmIsIHVoY2ktPnNrZWxfYnVsa19xaCk7CisJaWYgKHJldCA9PSAtRUlOUFJPR1JFU1MpCisJCXVoY2lfaW5jX2ZzYnIodWhjaSwgdXJiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHVoY2lfc3VibWl0X2ludGVycnVwdChzdHJ1Y3QgdWhjaV9oY2QgKnVoY2ksIHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHVyYiAqZXVyYikKK3sKKwkvKiBVU0IgMS4xIGludGVycnVwdCB0cmFuc2ZlcnMgb25seSBpbnZvbHZlIG9uZSBwYWNrZXQgcGVyIGludGVydmFsOworCSAqIHRoYXQncyB0aGUgdWhjaV9zdWJtaXRfY29tbW9uKCkgImJyZWFkdGggZmlyc3QiIHBvbGljeS4gIERyaXZlcnMKKwkgKiBjYW4gc3VibWl0IHVyYnMgb2YgYW55IGxlbmd0aCwgYnV0IGxvbmdlciBvbmVzIG1pZ2h0IG5lZWQgbWFueQorCSAqIGludGVydmFscyB0byBjb21wbGV0ZS4KKwkgKi8KKwlyZXR1cm4gdWhjaV9zdWJtaXRfY29tbW9uKHVoY2ksIHVyYiwgZXVyYiwgdWhjaS0+c2tlbHFoW19faW50ZXJ2YWxfdG9fc2tlbCh1cmItPmludGVydmFsKV0pOworfQorCisvKgorICogSXNvY2hyb25vdXMgdHJhbnNmZXJzCisgKi8KK3N0YXRpYyBpbnQgaXNvY2hyb25vdXNfZmluZF9saW1pdHMoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIsIHVuc2lnbmVkIGludCAqc3RhcnQsIHVuc2lnbmVkIGludCAqZW5kKQoreworCXN0cnVjdCB1cmIgKmxhc3RfdXJiID0gTlVMTDsKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVwOworCWludCByZXQgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh1cCwgJnVoY2ktPnVyYl9saXN0LCB1cmJfbGlzdCkgeworCQlzdHJ1Y3QgdXJiICp1ID0gdXAtPnVyYjsKKworCQkvKiBsb29rIGZvciBwZW5kaW5nIFVSQidzIHdpdGggaWRlbnRpY2FsIHBpcGUgaGFuZGxlICovCisJCWlmICgodXJiLT5waXBlID09IHUtPnBpcGUpICYmICh1cmItPmRldiA9PSB1LT5kZXYpICYmCisJCSAgICAodS0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgJiYgKHUgIT0gdXJiKSkgeworCQkJaWYgKCFsYXN0X3VyYikKKwkJCQkqc3RhcnQgPSB1LT5zdGFydF9mcmFtZTsKKwkJCWxhc3RfdXJiID0gdTsKKwkJfQorCX0KKworCWlmIChsYXN0X3VyYikgeworCQkqZW5kID0gKGxhc3RfdXJiLT5zdGFydF9mcmFtZSArIGxhc3RfdXJiLT5udW1iZXJfb2ZfcGFja2V0cyAqCisJCQkJbGFzdF91cmItPmludGVydmFsKSAmIChVSENJX05VTUZSQU1FUy0xKTsKKwkJcmV0ID0gMDsKKwl9IGVsc2UKKwkJcmV0ID0gLTE7CS8qIG5vIHByZXZpb3VzIHVyYiBmb3VuZCAqLworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpc29jaHJvbm91c19maW5kX3N0YXJ0KHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCWludCBsaW1pdHM7CisJdW5zaWduZWQgaW50IHN0YXJ0ID0gMCwgZW5kID0gMDsKKworCWlmICh1cmItPm51bWJlcl9vZl9wYWNrZXRzID4gOTAwKQkvKiA5MDA/IFdoeT8gKi8KKwkJcmV0dXJuIC1FRkJJRzsKKworCWxpbWl0cyA9IGlzb2Nocm9ub3VzX2ZpbmRfbGltaXRzKHVoY2ksIHVyYiwgJnN0YXJ0LCAmZW5kKTsKKworCWlmICh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX0lTT19BU0FQKSB7CisJCWlmIChsaW1pdHMpIHsKKwkJCXVoY2lfZ2V0X2N1cnJlbnRfZnJhbWVfbnVtYmVyKHVoY2kpOworCQkJdXJiLT5zdGFydF9mcmFtZSA9ICh1aGNpLT5mcmFtZV9udW1iZXIgKyAxMCkKKwkJCQkJJiAoVUhDSV9OVU1GUkFNRVMgLSAxKTsKKwkJfSBlbHNlCisJCQl1cmItPnN0YXJ0X2ZyYW1lID0gZW5kOworCX0gZWxzZSB7CisJCXVyYi0+c3RhcnRfZnJhbWUgJj0gKFVIQ0lfTlVNRlJBTUVTIC0gMSk7CisJCS8qIEZJWE1FOiBTYW5pdHkgY2hlY2sgKi8KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElzb2Nocm9ub3VzIHRyYW5zZmVycworICovCitzdGF0aWMgaW50IHVoY2lfc3VibWl0X2lzb2Nocm9ub3VzKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1aGNpX3RkICp0ZDsKKwlpbnQgaSwgcmV0LCBmcmFtZTsKKwlpbnQgc3RhdHVzLCBkZXN0aW5hdGlvbjsKKworCXN0YXR1cyA9IFREX0NUUkxfQUNUSVZFIHwgVERfQ1RSTF9JT1M7CisJZGVzdGluYXRpb24gPSAodXJiLT5waXBlICYgUElQRV9ERVZFUF9NQVNLKSB8IHVzYl9wYWNrZXRpZCh1cmItPnBpcGUpOworCisJcmV0ID0gaXNvY2hyb25vdXNfZmluZF9zdGFydCh1aGNpLCB1cmIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmcmFtZSA9IHVyYi0+c3RhcnRfZnJhbWU7CisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKywgZnJhbWUgKz0gdXJiLT5pbnRlcnZhbCkgeworCQlpZiAoIXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoKQorCQkJY29udGludWU7CisKKwkJdGQgPSB1aGNpX2FsbG9jX3RkKHVoY2ksIHVyYi0+ZGV2KTsKKwkJaWYgKCF0ZCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXVoY2lfYWRkX3RkX3RvX3VyYih1cmIsIHRkKTsKKwkJdWhjaV9maWxsX3RkKHRkLCBzdGF0dXMsIGRlc3RpbmF0aW9uIHwgdWhjaV9leHBsZW4odXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGggLSAxKSwKKwkJCXVyYi0+dHJhbnNmZXJfZG1hICsgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQpOworCisJCWlmIChpICsgMSA+PSB1cmItPm51bWJlcl9vZl9wYWNrZXRzKQorCQkJdGQtPnN0YXR1cyB8PSBjcHVfdG9fbGUzMihURF9DVFJMX0lPQyk7CisKKwkJdWhjaV9pbnNlcnRfdGRfZnJhbWVfbGlzdCh1aGNpLCB0ZCwgZnJhbWUpOworCX0KKworCXJldHVybiAtRUlOUFJPR1JFU1M7Cit9CisKK3N0YXRpYyBpbnQgdWhjaV9yZXN1bHRfaXNvY2hyb25vdXMoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVoY2lfdGQgKnRkOworCXN0cnVjdCB1cmJfcHJpdiAqdXJicCA9IChzdHJ1Y3QgdXJiX3ByaXYgKil1cmItPmhjcHJpdjsKKwlpbnQgc3RhdHVzOworCWludCBpLCByZXQgPSAwOworCisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKworCWkgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkodGQsICZ1cmJwLT50ZF9saXN0LCBsaXN0KSB7CisJCWludCBhY3RsZW5ndGg7CisJCXVuc2lnbmVkIGludCBjdHJsc3RhdCA9IHRkX3N0YXR1cyh0ZCk7CisKKwkJaWYgKGN0cmxzdGF0ICYgVERfQ1RSTF9BQ1RJVkUpCisJCQlyZXR1cm4gLUVJTlBST0dSRVNTOworCisJCWFjdGxlbmd0aCA9IHVoY2lfYWN0dWFsX2xlbmd0aChjdHJsc3RhdCk7CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA9IGFjdGxlbmd0aDsKKwkJdXJiLT5hY3R1YWxfbGVuZ3RoICs9IGFjdGxlbmd0aDsKKworCQlzdGF0dXMgPSB1aGNpX21hcF9zdGF0dXModWhjaV9zdGF0dXNfYml0cyhjdHJsc3RhdCksCisJCQkJdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzID0gc3RhdHVzOworCQlpZiAoc3RhdHVzKSB7CisJCQl1cmItPmVycm9yX2NvdW50Kys7CisJCQlyZXQgPSBzdGF0dXM7CisJCX0KKworCQlpKys7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCB1cmIgKnVoY2lfZmluZF91cmJfZXAoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVyYl9wcml2ICp1cDsKKworCS8qIFdlIGRvbid0IG1hdGNoIElzb2MgdHJhbnNmZXJzIHNpbmNlIHRoZXkgYXJlIHNwZWNpYWwgKi8KKwlpZiAodXNiX3BpcGVpc29jKHVyYi0+cGlwZSkpCisJCXJldHVybiBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh1cCwgJnVoY2ktPnVyYl9saXN0LCB1cmJfbGlzdCkgeworCQlzdHJ1Y3QgdXJiICp1ID0gdXAtPnVyYjsKKworCQlpZiAodS0+ZGV2ID09IHVyYi0+ZGV2ICYmIHUtPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJCS8qIEZvciBjb250cm9sLCBpZ25vcmUgdGhlIGRpcmVjdGlvbiAqLworCQkJaWYgKHVzYl9waXBlY29udHJvbCh1cmItPnBpcGUpICYmCisJCQkgICAgKHUtPnBpcGUgJiB+VVNCX0RJUl9JTikgPT0gKHVyYi0+cGlwZSAmIH5VU0JfRElSX0lOKSkKKwkJCQlyZXR1cm4gdTsKKwkJCWVsc2UgaWYgKHUtPnBpcGUgPT0gdXJiLT5waXBlKQorCQkJCXJldHVybiB1OworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgdWhjaV91cmJfZW5xdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLAorCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwLAorCQlzdHJ1Y3QgdXJiICp1cmIsIGludCBtZW1fZmxhZ3MpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBoY2RfdG9fdWhjaShoY2QpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHVyYiAqZXVyYjsKKwlpbnQgYnVzdGltZTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1aGNpLT5sb2NrLCBmbGFncyk7CisKKwlyZXQgPSB1cmItPnN0YXR1czsKKwlpZiAocmV0ICE9IC1FSU5QUk9HUkVTUykJCS8qIFVSQiBhbHJlYWR5IHVubGlua2VkISAqLworCQlnb3RvIG91dDsKKworCWV1cmIgPSB1aGNpX2ZpbmRfdXJiX2VwKHVoY2ksIHVyYik7CisKKwlpZiAoIXVoY2lfYWxsb2NfdXJiX3ByaXYodWhjaSwgdXJiKSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlzd2l0Y2ggKHVzYl9waXBldHlwZSh1cmItPnBpcGUpKSB7CisJY2FzZSBQSVBFX0NPTlRST0w6CisJCXJldCA9IHVoY2lfc3VibWl0X2NvbnRyb2wodWhjaSwgdXJiLCBldXJiKTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0lOVEVSUlVQVDoKKwkJaWYgKCFldXJiKSB7CisJCQlidXN0aW1lID0gdXNiX2NoZWNrX2JhbmR3aWR0aCh1cmItPmRldiwgdXJiKTsKKwkJCWlmIChidXN0aW1lIDwgMCkKKwkJCQlyZXQgPSBidXN0aW1lOworCQkJZWxzZSB7CisJCQkJcmV0ID0gdWhjaV9zdWJtaXRfaW50ZXJydXB0KHVoY2ksIHVyYiwgZXVyYik7CisJCQkJaWYgKHJldCA9PSAtRUlOUFJPR1JFU1MpCisJCQkJCXVzYl9jbGFpbV9iYW5kd2lkdGgodXJiLT5kZXYsIHVyYiwgYnVzdGltZSwgMCk7CisJCQl9CisJCX0gZWxzZSB7CS8qIGluaGVyaXQgZnJvbSBwYXJlbnQgKi8KKwkJCXVyYi0+YmFuZHdpZHRoID0gZXVyYi0+YmFuZHdpZHRoOworCQkJcmV0ID0gdWhjaV9zdWJtaXRfaW50ZXJydXB0KHVoY2ksIHVyYiwgZXVyYik7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQSVBFX0JVTEs6CisJCXJldCA9IHVoY2lfc3VibWl0X2J1bGsodWhjaSwgdXJiLCBldXJiKTsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgorCQlidXN0aW1lID0gdXNiX2NoZWNrX2JhbmR3aWR0aCh1cmItPmRldiwgdXJiKTsKKwkJaWYgKGJ1c3RpbWUgPCAwKSB7CisJCQlyZXQgPSBidXN0aW1lOworCQkJYnJlYWs7CisJCX0KKworCQlyZXQgPSB1aGNpX3N1Ym1pdF9pc29jaHJvbm91cyh1aGNpLCB1cmIpOworCQlpZiAocmV0ID09IC1FSU5QUk9HUkVTUykKKwkJCXVzYl9jbGFpbV9iYW5kd2lkdGgodXJiLT5kZXYsIHVyYiwgYnVzdGltZSwgMSk7CisJCWJyZWFrOworCX0KKworCWlmIChyZXQgIT0gLUVJTlBST0dSRVNTKSB7CisJCS8qIFN1Ym1pdCBmYWlsZWQsIHNvIGRlbGV0ZSBpdCBmcm9tIHRoZSB1cmJfbGlzdCAqLworCQlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAgPSB1cmItPmhjcHJpdjsKKworCQlsaXN0X2RlbF9pbml0KCZ1cmJwLT51cmJfbGlzdCk7CisJCXVoY2lfZGVzdHJveV91cmJfcHJpdih1aGNpLCB1cmIpOworCX0gZWxzZQorCQlyZXQgPSAwOworCitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWhjaS0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBhIHRyYW5zZmVyCisgKi8KK3N0YXRpYyB2b2lkIHVoY2lfdHJhbnNmZXJfcmVzdWx0KHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCWludCByZXQgPSAtRUlOUFJPR1JFU1M7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwOworCisJc3Bpbl9sb2NrKCZ1cmItPmxvY2spOworCisJdXJicCA9IChzdHJ1Y3QgdXJiX3ByaXYgKil1cmItPmhjcHJpdjsKKworCWlmICh1cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpCS8qIFVSQiBhbHJlYWR5IGRlcXVldWVkICovCisJCWdvdG8gb3V0OworCisJc3dpdGNoICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSkgeworCWNhc2UgUElQRV9DT05UUk9MOgorCQlyZXQgPSB1aGNpX3Jlc3VsdF9jb250cm9sKHVoY2ksIHVyYik7CisJCWJyZWFrOworCWNhc2UgUElQRV9CVUxLOgorCWNhc2UgUElQRV9JTlRFUlJVUFQ6CisJCXJldCA9IHVoY2lfcmVzdWx0X2NvbW1vbih1aGNpLCB1cmIpOworCQlicmVhazsKKwljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJCXJldCA9IHVoY2lfcmVzdWx0X2lzb2Nocm9ub3VzKHVoY2ksIHVyYik7CisJCWJyZWFrOworCX0KKworCWlmIChyZXQgPT0gLUVJTlBST0dSRVNTKQorCQlnb3RvIG91dDsKKwl1cmItPnN0YXR1cyA9IHJldDsKKworCXN3aXRjaCAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkpIHsKKwljYXNlIFBJUEVfQ09OVFJPTDoKKwljYXNlIFBJUEVfQlVMSzoKKwljYXNlIFBJUEVfSVNPQ0hST05PVVM6CisJCS8qIFJlbGVhc2UgYmFuZHdpZHRoIGZvciBJbnRlcnJ1cHQgb3IgSXNvYy4gdHJhbnNmZXJzICovCisJCWlmICh1cmItPmJhbmR3aWR0aCkKKwkJCXVzYl9yZWxlYXNlX2JhbmR3aWR0aCh1cmItPmRldiwgdXJiLCAxKTsKKwkJdWhjaV91bmxpbmtfZ2VuZXJpYyh1aGNpLCB1cmIpOworCQlicmVhazsKKwljYXNlIFBJUEVfSU5URVJSVVBUOgorCQkvKiBSZWxlYXNlIGJhbmR3aWR0aCBmb3IgSW50ZXJydXB0IG9yIElzb2MuIHRyYW5zZmVycyAqLworCQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgcmVsZWFzZSBpZiB3ZSBoYXZlIGEgcXVldWVkIFVSQiAqLworCQlpZiAobGlzdF9lbXB0eSgmdXJicC0+cXVldWVfbGlzdCkgJiYgdXJiLT5iYW5kd2lkdGgpCisJCQl1c2JfcmVsZWFzZV9iYW5kd2lkdGgodXJiLT5kZXYsIHVyYiwgMCk7CisJCWVsc2UKKwkJCS8qIGJhbmR3aWR0aCB3YXMgcGFzc2VkIG9uIHRvIHF1ZXVlZCBVUkIsICovCisJCQkvKiBzbyBkb24ndCBsZXQgdXNiX3VubGlua191cmIoKSByZWxlYXNlIGl0ICovCisJCQl1cmItPmJhbmR3aWR0aCA9IDA7CisJCXVoY2lfdW5saW5rX2dlbmVyaWModWhjaSwgdXJiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2luZm8odWhjaV9kZXYodWhjaSksICIlczogdW5rbm93biBwaXBlIHR5cGUgJWQgIgorCQkJCSJmb3IgdXJiICVwXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgdXNiX3BpcGV0eXBlKHVyYi0+cGlwZSksIHVyYik7CisJfQorCisJLyogTW92ZSBpdCBmcm9tIHVoY2ktPnVyYl9saXN0IHRvIHVoY2ktPmNvbXBsZXRlX2xpc3QgKi8KKwl1aGNpX21vdmV0b19jb21wbGV0ZSh1aGNpLCB1cmJwKTsKKworb3V0OgorCXNwaW5fdW5sb2NrKCZ1cmItPmxvY2spOworfQorCitzdGF0aWMgdm9pZCB1aGNpX3VubGlua19nZW5lcmljKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IHVoY2lfdGQgKnRkOworCXN0cnVjdCB1cmJfcHJpdiAqdXJicCA9IChzdHJ1Y3QgdXJiX3ByaXYgKil1cmItPmhjcHJpdjsKKwlpbnQgcHJldmFjdGl2ZSA9IDA7CisKKwl1aGNpX2RlY19mc2JyKHVoY2ksIHVyYik7CS8qIFNhZmUgc2luY2UgaXQgY2hlY2tzICovCisKKwkvKgorCSAqIE5vdyB3ZSBuZWVkIHRvIGZpbmQgb3V0IHdoYXQgdGhlIGxhc3Qgc3VjY2Vzc2Z1bCB0b2dnbGUgd2FzCisJICogc28gd2UgY2FuIHVwZGF0ZSB0aGUgbG9jYWwgZGF0YSB0b2dnbGUgZm9yIHRoZSBuZXh0IHRyYW5zZmVyCisJICoKKwkgKiBUaGVyZSBhcmUgMiB3YXlzIHRoZSBsYXN0IHN1Y2Nlc3NmdWwgY29tcGxldGVkIFREIGlzIGZvdW5kOgorCSAqCisJICogMSkgVGhlIFREIGlzIE5PVCBhY3RpdmUgYW5kIHRoZSBhY3R1YWwgbGVuZ3RoIDwgZXhwZWN0ZWQgbGVuZ3RoCisJICogMikgVGhlIFREIGlzIE5PVCBhY3RpdmUgYW5kIGl0J3MgdGhlIGxhc3QgVEQgaW4gdGhlIGNoYWluCisJICoKKwkgKiBhbmQgYSB0aGlyZCB3YXkgdGhlIGZpcnN0IHVuY29tcGxldGVkIFREIGlzIGZvdW5kOgorCSAqCisJICogMykgVGhlIFREIGlzIGFjdGl2ZSBhbmQgdGhlIHByZXZpb3VzIFREIGlzIE5PVCBhY3RpdmUKKwkgKgorCSAqIENvbnRyb2wgYW5kIElzb2Nocm9ub3VzIGlnbm9yZSB0aGUgdG9nZ2xlLCBzbyB0aGlzIGlzIHNhZmUKKwkgKiBmb3IgYWxsIHR5cGVzCisJICoKKwkgKiBGSVhNRTogVGhlIHRvZ2dsZSBmaXh1cHMgd29uJ3QgYmUgMTAwJSByZWxpYWJsZSB1bnRpbCB3ZQorCSAqIGNoYW5nZSBvdmVyIHRvIHVzaW5nIGEgc2luZ2xlIHF1ZXVlIGZvciBlYWNoIGVuZHBvaW50IGFuZAorCSAqIHN0b3AgdGhlIHF1ZXVlIGJlZm9yZSB1bmxpbmtpbmcuCisJICovCisJaGVhZCA9ICZ1cmJwLT50ZF9saXN0OworCWxpc3RfZm9yX2VhY2hfZW50cnkodGQsIGhlYWQsIGxpc3QpIHsKKwkJdW5zaWduZWQgaW50IGN0cmxzdGF0ID0gdGRfc3RhdHVzKHRkKTsKKworCQlpZiAoIShjdHJsc3RhdCAmIFREX0NUUkxfQUNUSVZFKSAmJgorCQkJCSh1aGNpX2FjdHVhbF9sZW5ndGgoY3RybHN0YXQpIDwKKwkJCQkgdWhjaV9leHBlY3RlZF9sZW5ndGgodGRfdG9rZW4odGQpKSB8fAorCQkJCXRkLT5saXN0Lm5leHQgPT0gaGVhZCkpCisJCQl1c2Jfc2V0dG9nZ2xlKHVyYi0+ZGV2LCB1aGNpX2VuZHBvaW50KHRkX3Rva2VuKHRkKSksCisJCQkJdWhjaV9wYWNrZXRvdXQodGRfdG9rZW4odGQpKSwKKwkJCQl1aGNpX3RvZ2dsZSh0ZF90b2tlbih0ZCkpIF4gMSk7CisJCWVsc2UgaWYgKChjdHJsc3RhdCAmIFREX0NUUkxfQUNUSVZFKSAmJiAhcHJldmFjdGl2ZSkKKwkJCXVzYl9zZXR0b2dnbGUodXJiLT5kZXYsIHVoY2lfZW5kcG9pbnQodGRfdG9rZW4odGQpKSwKKwkJCQl1aGNpX3BhY2tldG91dCh0ZF90b2tlbih0ZCkpLAorCQkJCXVoY2lfdG9nZ2xlKHRkX3Rva2VuKHRkKSkpOworCisJCXByZXZhY3RpdmUgPSBjdHJsc3RhdCAmIFREX0NUUkxfQUNUSVZFOworCX0KKworCXVoY2lfZGVsZXRlX3F1ZXVlZF91cmIodWhjaSwgdXJiKTsKKworCS8qIFRoZSBpbnRlcnJ1cHQgbG9vcCB3aWxsIHJlY2xhaW0gdGhlIFFIJ3MgKi8KKwl1aGNpX3JlbW92ZV9xaCh1aGNpLCB1cmJwLT5xaCk7CisJdXJicC0+cWggPSBOVUxMOworfQorCitzdGF0aWMgaW50IHVoY2lfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdWhjaS0+bG9jaywgZmxhZ3MpOworCXVyYnAgPSB1cmItPmhjcHJpdjsKKwlpZiAoIXVyYnApCQkJLyogVVJCIHdhcyBuZXZlciBsaW5rZWQhICovCisJCWdvdG8gZG9uZTsKKwlsaXN0X2RlbF9pbml0KCZ1cmJwLT51cmJfbGlzdCk7CisKKwl1aGNpX3VubGlua19nZW5lcmljKHVoY2ksIHVyYik7CisKKwl1aGNpX2dldF9jdXJyZW50X2ZyYW1lX251bWJlcih1aGNpKTsKKwlpZiAodWhjaS0+ZnJhbWVfbnVtYmVyICsgdWhjaS0+aXNfc3RvcHBlZCAhPSB1aGNpLT51cmJfcmVtb3ZlX2FnZSkgeworCQl1aGNpX3JlbW92ZV9wZW5kaW5nX3VyYnBzKHVoY2kpOworCQl1aGNpLT51cmJfcmVtb3ZlX2FnZSA9IHVoY2ktPmZyYW1lX251bWJlcjsKKwl9CisKKwkvKiBJZiB3ZSdyZSB0aGUgZmlyc3QsIHNldCB0aGUgbmV4dCBpbnRlcnJ1cHQgYml0ICovCisJaWYgKGxpc3RfZW1wdHkoJnVoY2ktPnVyYl9yZW1vdmVfbGlzdCkpCisJCXVoY2lfc2V0X25leHRfaW50ZXJydXB0KHVoY2kpOworCWxpc3RfYWRkX3RhaWwoJnVyYnAtPnVyYl9saXN0LCAmdWhjaS0+dXJiX3JlbW92ZV9saXN0KTsKKworZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1aGNpLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWhjaV9mc2JyX3RpbWVvdXQoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwID0gKHN0cnVjdCB1cmJfcHJpdiAqKXVyYi0+aGNwcml2OworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IHVoY2lfdGQgKnRkOworCWludCBjb3VudCA9IDA7CisKKwl1aGNpX2RlY19mc2JyKHVoY2ksIHVyYik7CisKKwl1cmJwLT5mc2JyX3RpbWVvdXQgPSAxOworCisJLyoKKwkgKiBJZGVhbGx5IHdlIHdvdWxkIHdhbnQgdG8gZml4IHFoLT5lbGVtZW50IGFzIHdlbGwsIGJ1dCBpdCdzCisJICogcmVhZC93cml0ZSBieSB0aGUgSEMsIHNvIHRoYXQgY2FuIGludHJvZHVjZSBhIHJhY2UuIEl0J3Mgbm90CisJICogcmVhbGx5IHdvcnRoIHRoZSBoYXNzbGUKKwkgKi8KKworCWhlYWQgPSAmdXJicC0+dGRfbGlzdDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRkLCBoZWFkLCBsaXN0KSB7CisJCS8qCisJCSAqIE1ha2Ugc3VyZSB3ZSBkb24ndCBkbyB0aGUgbGFzdCBvbmUgKHNpbmNlIGl0J2xsIGhhdmUgdGhlCisJCSAqIFRFUk0gYml0IHNldCkgYXMgd2VsbCBhcyB3ZSBza2lwIGV2ZXJ5IHNvIG1hbnkgVEQncyB0bworCQkgKiBtYWtlIHN1cmUgaXQgZG9lc24ndCBob2cgdGhlIGJhbmR3aWR0aAorCQkgKi8KKwkJaWYgKHRkLT5saXN0Lm5leHQgIT0gaGVhZCAmJiAoY291bnQgJSBERVBUSF9JTlRFUlZBTCkgPT0KKwkJCQkoREVQVEhfSU5URVJWQUwgLSAxKSkKKwkJCXRkLT5saW5rIHw9IFVIQ0lfUFRSX0RFUFRIOworCisJCWNvdW50Kys7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVoY2lfZnJlZV9wZW5kaW5nX3FocyhzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kpCit7CisJc3RydWN0IHVoY2lfcWggKnFoLCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHFoLCB0bXAsICZ1aGNpLT5xaF9yZW1vdmVfbGlzdCwgcmVtb3ZlX2xpc3QpIHsKKwkJbGlzdF9kZWxfaW5pdCgmcWgtPnJlbW92ZV9saXN0KTsKKworCQl1aGNpX2ZyZWVfcWgodWhjaSwgcWgpOworCX0KK30KKworc3RhdGljIHZvaWQgdWhjaV9mcmVlX3BlbmRpbmdfdGRzKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKK3sKKwlzdHJ1Y3QgdWhjaV90ZCAqdGQsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGQsIHRtcCwgJnVoY2ktPnRkX3JlbW92ZV9saXN0LCByZW1vdmVfbGlzdCkgeworCQlsaXN0X2RlbF9pbml0KCZ0ZC0+cmVtb3ZlX2xpc3QpOworCisJCXVoY2lfZnJlZV90ZCh1aGNpLCB0ZCk7CisJfQorfQorCitzdGF0aWMgdm9pZAordWhjaV9maW5pc2hfdXJiKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitfX3JlbGVhc2VzKHVoY2ktPmxvY2spCitfX2FjcXVpcmVzKHVoY2ktPmxvY2spCit7CisJc3RydWN0IHVoY2lfaGNkICp1aGNpID0gaGNkX3RvX3VoY2koaGNkKTsKKworCXVoY2lfZGVzdHJveV91cmJfcHJpdih1aGNpLCB1cmIpOworCisJc3Bpbl91bmxvY2soJnVoY2ktPmxvY2spOworCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKGhjZCwgdXJiLCByZWdzKTsKKwlzcGluX2xvY2soJnVoY2ktPmxvY2spOworfQorCitzdGF0aWMgdm9pZCB1aGNpX2ZpbmlzaF9jb21wbGV0aW9uKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVyYl9wcml2ICp1cmJwLCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVyYnAsIHRtcCwgJnVoY2ktPmNvbXBsZXRlX2xpc3QsIHVyYl9saXN0KSB7CisJCXN0cnVjdCB1cmIgKnVyYiA9IHVyYnAtPnVyYjsKKworCQlsaXN0X2RlbF9pbml0KCZ1cmJwLT51cmJfbGlzdCk7CisJCXVoY2lfZmluaXNoX3VyYih1aGNpX3RvX2hjZCh1aGNpKSwgdXJiLCByZWdzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVoY2lfcmVtb3ZlX3BlbmRpbmdfdXJicHMoc3RydWN0IHVoY2lfaGNkICp1aGNpKQoreworCisJLyogU3BsaWNlIHRoZSB1cmJfcmVtb3ZlX2xpc3Qgb250byB0aGUgZW5kIG9mIHRoZSBjb21wbGV0ZV9saXN0ICovCisJbGlzdF9zcGxpY2VfaW5pdCgmdWhjaS0+dXJiX3JlbW92ZV9saXN0LCB1aGNpLT5jb21wbGV0ZV9saXN0LnByZXYpOworfQorCisvKiBQcm9jZXNzIGV2ZW50cyBpbiB0aGUgc2NoZWR1bGUsIGJ1dCBvbmx5IGluIG9uZSB0aHJlYWQgYXQgYSB0aW1lICovCitzdGF0aWMgdm9pZCB1aGNpX3NjYW5fc2NoZWR1bGUoc3RydWN0IHVoY2lfaGNkICp1aGNpLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYnAsICp0bXA7CisKKwkvKiBEb24ndCBhbGxvdyByZS1lbnRyYW50IGNhbGxzICovCisJaWYgKHVoY2ktPnNjYW5faW5fcHJvZ3Jlc3MpIHsKKwkJdWhjaS0+bmVlZF9yZXNjYW4gPSAxOworCQlyZXR1cm47CisJfQorCXVoY2ktPnNjYW5faW5fcHJvZ3Jlc3MgPSAxOworIHJlc2NhbjoKKwl1aGNpLT5uZWVkX3Jlc2NhbiA9IDA7CisKKwl1aGNpX2dldF9jdXJyZW50X2ZyYW1lX251bWJlcih1aGNpKTsKKworCWlmICh1aGNpLT5mcmFtZV9udW1iZXIgKyB1aGNpLT5pc19zdG9wcGVkICE9IHVoY2ktPnFoX3JlbW92ZV9hZ2UpCisJCXVoY2lfZnJlZV9wZW5kaW5nX3Focyh1aGNpKTsKKwlpZiAodWhjaS0+ZnJhbWVfbnVtYmVyICsgdWhjaS0+aXNfc3RvcHBlZCAhPSB1aGNpLT50ZF9yZW1vdmVfYWdlKQorCQl1aGNpX2ZyZWVfcGVuZGluZ190ZHModWhjaSk7CisJaWYgKHVoY2ktPmZyYW1lX251bWJlciArIHVoY2ktPmlzX3N0b3BwZWQgIT0gdWhjaS0+dXJiX3JlbW92ZV9hZ2UpCisJCXVoY2lfcmVtb3ZlX3BlbmRpbmdfdXJicHModWhjaSk7CisKKwkvKiBXYWxrIHRoZSBsaXN0IG9mIHBlbmRpbmcgVVJCcyB0byBzZWUgd2hpY2ggb25lcyBjb21wbGV0ZWQKKwkgKiAobXVzdCBiZSBfc2FmZSBiZWNhdXNlIHVoY2lfdHJhbnNmZXJfcmVzdWx0KCkgZGVxdWV1ZXMgVVJCcykgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodXJicCwgdG1wLCAmdWhjaS0+dXJiX2xpc3QsIHVyYl9saXN0KSB7CisJCXN0cnVjdCB1cmIgKnVyYiA9IHVyYnAtPnVyYjsKKworCQkvKiBDaGVja3MgdGhlIHN0YXR1cyBhbmQgZG9lcyBhbGwgb2YgdGhlIG1hZ2ljIG5lY2Vzc2FyeSAqLworCQl1aGNpX3RyYW5zZmVyX3Jlc3VsdCh1aGNpLCB1cmIpOworCX0KKwl1aGNpX2ZpbmlzaF9jb21wbGV0aW9uKHVoY2ksIHJlZ3MpOworCisJLyogSWYgdGhlIGNvbnRyb2xsZXIgaXMgc3RvcHBlZCwgd2UgY2FuIGZpbmlzaCB0aGVzZSBvZmYgcmlnaHQgbm93ICovCisJaWYgKHVoY2ktPmlzX3N0b3BwZWQpIHsKKwkJdWhjaV9mcmVlX3BlbmRpbmdfcWhzKHVoY2kpOworCQl1aGNpX2ZyZWVfcGVuZGluZ190ZHModWhjaSk7CisJCXVoY2lfcmVtb3ZlX3BlbmRpbmdfdXJicHModWhjaSk7CisJfQorCisJaWYgKHVoY2ktPm5lZWRfcmVzY2FuKQorCQlnb3RvIHJlc2NhbjsKKwl1aGNpLT5zY2FuX2luX3Byb2dyZXNzID0gMDsKKworCWlmIChsaXN0X2VtcHR5KCZ1aGNpLT51cmJfcmVtb3ZlX2xpc3QpICYmCisJICAgIGxpc3RfZW1wdHkoJnVoY2ktPnRkX3JlbW92ZV9saXN0KSAmJgorCSAgICBsaXN0X2VtcHR5KCZ1aGNpLT5xaF9yZW1vdmVfbGlzdCkpCisJCXVoY2lfY2xlYXJfbmV4dF9pbnRlcnJ1cHQodWhjaSk7CisJZWxzZQorCQl1aGNpX3NldF9uZXh0X2ludGVycnVwdCh1aGNpKTsKKworCS8qIFdha2UgdXAgYW55b25lIHdhaXRpbmcgZm9yIGFuIFVSQiB0byBjb21wbGV0ZSAqLworCXdha2VfdXBfYWxsKCZ1aGNpLT53YWl0cWgpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW1hZ2UvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2ltYWdlL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVjZTcwMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2ltYWdlL0tjb25maWcKQEAgLTAsMCArMSwzMCBAQAorIworIyBVU0IgSW1hZ2VpbmcgZGV2aWNlcyBjb25maWd1cmF0aW9uCisjCitjb21tZW50ICJVU0IgSW1hZ2luZyBkZXZpY2VzIgorCWRlcGVuZHMgb24gVVNCCisKK2NvbmZpZyBVU0JfTURDODAwCisJdHJpc3RhdGUgIlVTQiBNdXN0ZWsgTURDODAwIERpZ2l0YWwgQ2FtZXJhIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0IgJiYgRVhQRVJJTUVOVEFMCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRoaXMgdHlwZSBvZiBzdGlsbCBjYW1lcmEgdG8KKwkgIHlvdXIgY29tcHV0ZXIncyBVU0IgcG9ydC4gVGhpcyBkcml2ZXIgY2FuIGJlIHVzZWQgd2l0aCBncGhvdG8gMC40LjMKKwkgIGFuZCBoaWdoZXIgKGxvb2sgYXQgPGh0dHA6Ly93d3cuZ3Bob3RvLm9yZy8+KS4KKwkgIFRvIHVzZSBpdCBjcmVhdGUgYSBkZXZpY2Ugbm9kZSB3aXRoICJta25vZCAvZGV2L211c3RlayBjIDE4MCAzMiIgYW5kCisJICBjb25maWd1cmUgaXQgaW4geW91ciBzb2Z0d2FyZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWRjODAwLgorCitjb25maWcgVVNCX01JQ1JPVEVLCisJdHJpc3RhdGUgIk1pY3JvdGVrIFg2VVNCIHNjYW5uZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBTQ1NJCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgTWljcm90ZWsgWDZVU0IgYW5kCisJICBwb3NzaWJseSB0aGUgUGhhbnRvbSAzMzZDWCwgUGhhbnRvbSBDNiBhbmQgU2Nhbk1ha2VyIFY2VShTKUwuCisJICBTdXBwb3J0IGZvciBhbnl0aGluZyBidXQgdGhlIFg2IGlzIGV4cGVyaW1lbnRhbC4KKwkgIFBsZWFzZSByZXBvcnQgZmFpbHVyZXMgYW5kIHN1Y2Nlc3Nlcy4KKwkgIFRoZSBzY2FubmVyIHdpbGwgYXBwZWFyIGFzIGEgc2NzaSBnZW5lcmljIGRldmljZSB0byB0aGUgcmVzdAorCSAgb2YgdGhlIHN5c3RlbS4gU2NzaSBzdXBwb3J0IGlzIHJlcXVpcmVkLgorCSAgVGhpcyBkcml2ZXIgY2FuIGJlIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBjYWxsZWQgbWljcm90ZWsuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2ltYWdlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNDhhZTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbWFnZS9NYWtlZmlsZQpAQCAtMCwwICsxLDYgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIFVTQiBJbWFnZSBkcml2ZXJzCisjCisKK29iai0kKENPTkZJR19VU0JfTURDODAwKQkrPSBtZGM4MDAubworb2JqLSQoQ09ORklHX1VTQl9NSUNST1RFSykJKz0gbWljcm90ZWsubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMgYi9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzkxNzIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKQEAgLTAsMCArMSwxMDYzIEBACisvKgorICogY29weXJpZ2h0IChDKSAxOTk5LzIwMDAgYnkgSGVubmluZyBaYWJlbCA8aGVubmluZ0B1bmktcGFkZXJib3JuLmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKworLyoKKyAqCVVTQi1LZXJuZWwgRHJpdmVyIGZvciB0aGUgTXVzdGVrIE1EQzgwMCBEaWdpdGFsIENhbWVyYQorICoJKGMpIDE5OTkvMjAwMCBIZW5uaW5nIFphYmVsIDxoZW5uaW5nQHVuaS1wYWRlcmJvcm4uZGU+CisgKgorICoKKyAqIFRoZSBkcml2ZXIgYnJpbmdzIHRoZSBVU0IgZnVuY3Rpb25zIG9mIHRoZSBNREM4MDAgdG8gTGludXguCisgKiBUbyB1c2UgdGhlIENhbWVyYSB5b3UgbXVzdCBzdXBwb3J0IHRoZSBVU0IgUHJvdG9jb2xsIG9mIHRoZSBjYW1lcmEKKyAqIHRvIHRoZSBLZXJuZWwgTm9kZS4KKyAqIFRoZSBEcml2ZXIgdXNlcyBhIG1pc2MgZGV2aWNlIE5vZGUuIENyZWF0ZSBpdCB3aXRoIDoKKyAqIG1rbm9kIC9kZXYvbXVzdGVrIGMgMTgwIDMyCisgKgorICogVGhlIGRyaXZlciBzdXBwb3J0cyBvbmx5IG9uZSBjYW1lcmEuCisgKiAKKyAqIEZpeDogbWRjODAwIHVzZWQgc2xlZXBfb24gYW5kIHNsZXB0IHdpdGggaW9fbG9jayBoZWxkLgorICogQ29udmVydGVkIHNsZWVwX29uIHRvIHdhaXRxdWV1ZXMgd2l0aCBzY2hlZHVsZV90aW1lb3V0IGFuZCBtYWRlIGlvX2xvY2sKKyAqIGEgc2VtYXBob3JlIGZyb20gYSBzcGlubG9jay4KKyAqIGJ5IE9saXZlciBOZXVrdW0gPG9saXZlckBuZXVrdW0ubmFtZT4KKyAqICgwMi8xMi8yMDAxKQorICogCisgKiBJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgorICogKDA4LzA0LzIwMDEpIGdiCisgKgorICogdmVyc2lvbiAwLjcuNQorICogRml4ZWQgcG90ZW50aWFsIFNNUCByYWNlcyB3aXRoIFNwaW5sb2Nrcy4KKyAqIFRoYW5rcyB0byBPbGl2ZXIgTmV1a3VtIDxvbGl2ZXJAbmV1a3VtLm5hbWU+IHdobyAKKyAqIG5vdGljZWQgdGhlIHJhY2UgY29uZGl0aW9ucy4KKyAqICgzMC8xMC8yMDAwKQorICoKKyAqIEZpeGVkOiBTZXR0aW5nIHVyYi0+ZGV2IGJlZm9yZSBzdWJtaXR0aW5nIHVyYi4KKyAqIGJ5IEdyZWcgS0ggPGdyZWdAa3JvYWguY29tPgorICogKDEzLzEwLzIwMDApCisgKgorICogdmVyc2lvbiAwLjcuMworICogYnVnZml4IDogVGhlIG1kYzgwMC0+c3RhdGUgZmllbGQgZ2V0cyBzZXQgdG8gUkVBRFkgYWZ0ZXIgdGhlCisgKiB0aGUgZGljb25uZWN0IGZ1bmN0aW9uIHNldHMgaXQgdG8gTk9UX0NPTk5FQ1RFRC4gVGhpcyBtYWtlcyB0aGUKKyAqIGRyaXZlciBydW5uaW5nIGxpa2UgdGhlIGNhbWVyYSBpcyBjb25uZWN0ZWQgYW5kIGNhdXNlcyBzb21lCisgKiBoYW5nIHVwcy4KKyAqCisgKiB2ZXJzaW9uIDAuNy4xCisgKiBNT0RfSU5DIGFuZCBNT0RfREVDIGFyZSBjaGFuZ2VkIGluIHVzYl9wcm9iZSB0byBwcmV2ZW50IGxvYWQvdW5sb2FkCisgKiBwcm9ibGVtcyB3aGVuIGNvbXBpbGVkIGFzIE1vZHVsZS4KKyAqICgwNC8wNC8yMDAwKQorICoKKyAqIFRoZSBtZGM4MDAgZHJpdmVyIGdldHMgYXNzaWduZWQgdGhlIFVTQiBNaW5vciAzMi00Ny4gVGhlIFJlZ2lzdHJhdGlvbgorICogd2FzIHVwZGF0ZWQgdG8gdXNlIHRoZXNlIHZhbHVlcy4KKyAqICgyNi8wMy8yMDAwKQorICoKKyAqIFRoZSBJbml0IHVuZCBFeGl0IE1vZHVsZSBGdW5jdGlvbiBhcmUgdXBkYXRlZC4KKyAqICgwMS8wMy8yMDAwKQorICoKKyAqIHZlcnNpb24gMC43LjAKKyAqIFJld3JpdGUgb2YgdGhlIGRyaXZlciA6IFRoZSBkcml2ZXIgbm93IHVzZXMgVVJCJ3MuIFRoZSBvbGQgc3R1ZmYKKyAqIGhhcyBiZWVuIHJlbW92ZWQuCisgKgorICogdmVyc2lvbiAwLjYuMAorICogUmV3cml0ZSBvZiB0aGlzIGRyaXZlcjogVGhlIEVtdWxhdGlvbiBvZiB0aGUgcnMyMzIgcHJvdG9jb2xsCisgKiBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGRyaXZlci4gQSBzcGVjaWFsIGV4ZWN1dGVDb21tYW5kIGZ1bmN0aW9uCisgKiBmb3IgdGhpcyBkcml2ZXIgaXMgaW5jbHVkZWQgdG8gZ3Bob3RvLgorICogVGhlIGRyaXZlciBzdXBwb3J0cyB0d28ga2luZCBvZiBjb21tdW5pY2F0aW9uIHRvIGJ1bGsgZW5kcG9pbnRzLgorICogRWl0aGVyIHdpdGggdGhlIGRldi0+YnVzLT5vcHMtPmJ1bGsuLi4gb3Igd2l0aCBjYWxsYmFjayBmdW5jdGlvbi4KKyAqICgwOS8xMS8xOTk5KQorICoKKyAqIHZlcnNpb24gMC41LjA6CisgKiBmaXJzdCBWZXJzaW9uIHRoYXQgZ2V0cyBhIHZlcnNpb24gbnVtYmVyLiBNb3N0IG9mIHRoZSBuZWVkZWQKKyAqIGZ1bmN0aW9ucyB3b3JrLgorICogKDIwLzEwLzE5OTkpCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuNy41ICgzMC8xMC8yMDAwKSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiSGVubmluZyBaYWJlbCA8aGVubmluZ0B1bmktcGFkZXJib3JuLmRlPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBEcml2ZXIgZm9yIE11c3RlayBNREM4MDAgRGlnaXRhbCBDYW1lcmEiCisKKy8qIFZlbmRvciBhbmQgUHJvZHVjdCBJbmZvcm1hdGlvbiAqLworI2RlZmluZSBNREM4MDBfVkVORE9SX0lEIAkweDA1NWYKKyNkZWZpbmUgTURDODAwX1BST0RVQ1RfSUQJMHhhODAwCisKKy8qIFRpbWVvdXRzIChtc2VjKSAqLworI2RlZmluZSBUT19ET1dOTE9BRF9HRVRfUkVBRFkJCTE1MDAKKyNkZWZpbmUgVE9fRE9XTkxPQURfR0VUX0JVU1kJCTE1MDAKKyNkZWZpbmUgVE9fV1JJVEVfR0VUX1JFQURZCQkxMDAwCisjZGVmaW5lIFRPX0RFRkFVTFRfQ09NTUFORAkJNTAwMAorI2RlZmluZSBUT19SRUFEX0ZST01fSVJRIAkJVE9fREVGQVVMVF9DT01NQU5ECisjZGVmaW5lIFRPX0dFVF9SRUFEWQkJCVRPX0RFRkFVTFRfQ09NTUFORAorCisvKiBNaW5vciBOdW1iZXIgb2YgdGhlIGRldmljZSAoY3JlYXRlIHdpdGggbWtub2QgL2Rldi9tdXN0ZWsgYyAxODAgMzIpICovCisjZGVmaW5lIE1EQzgwMF9ERVZJQ0VfTUlOT1JfQkFTRSAzMgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCURhdGEgYW5kIHN0cnVjdHMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCit0eXBlZGVmIGVudW0geworCU5PVF9DT05ORUNURUQsIFJFQURZLCBXT1JLSU5HLCBET1dOTE9BRAorfSBtZGM4MDBfc3RhdGU7CisKKworLyogRGF0YSBmb3IgdGhlIGRyaXZlciAqLworc3RydWN0IG1kYzgwMF9kYXRhCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKglkZXY7CQkJLy8gRGV2aWNlIERhdGEKKwltZGM4MDBfc3RhdGUgCQlzdGF0ZTsKKworCXVuc2lnbmVkIGludAkJZW5kcG9pbnQgWzRdOworCisJc3RydWN0IHVyYiAqCQlpcnFfdXJiOworCXdhaXRfcXVldWVfaGVhZF90CWlycV93YWl0OworCWludAkJCWlycV93b2tlbjsKKwljaGFyKgkJCWlycV91cmJfYnVmZmVyOworCisJaW50CQkJY2FtZXJhX2J1c3k7ICAgICAgICAgIC8vIGlzIGNhbWVyYSBidXN5ID8KKwlpbnQgCQkJY2FtZXJhX3JlcXVlc3RfcmVhZHk7IC8vIFN0YXR1cyB0byBzeW5jaHJvbml6ZSB3aXRoIGlycQorCWNoYXIgCQkJY2FtZXJhX3Jlc3BvbnNlIFs4XTsgIC8vIGxhc3QgQnl0ZXMgc2VuZCBhZnRlciBidXN5CisKKwlzdHJ1Y3QgdXJiICogICAJCXdyaXRlX3VyYjsKKwljaGFyKgkJCXdyaXRlX3VyYl9idWZmZXI7CisJd2FpdF9xdWV1ZV9oZWFkX3QJd3JpdGVfd2FpdDsKKwlpbnQJCQl3cml0dGVuOworCisKKwlzdHJ1Y3QgdXJiICogICAJCWRvd25sb2FkX3VyYjsKKwljaGFyKgkJCWRvd25sb2FkX3VyYl9idWZmZXI7CisJd2FpdF9xdWV1ZV9oZWFkX3QJZG93bmxvYWRfd2FpdDsKKwlpbnQJCQlkb3dubG9hZGVkOworCWludAkJCWRvd25sb2FkX2xlZnQ7CQkvLyBCeXRlcyBsZWZ0IHRvIGRvd25sb2FkID8KKworCisJLyogRGV2aWNlIERhdGEgKi8KKwljaGFyCQkJb3V0IFs2NF07CS8vIEFuc3dlciBCdWZmZXIKKwlpbnQgCQkJb3V0X3B0cjsJLy8gSW5kZXggdG8gdGhlIGZpcnN0IG5vdCByZWFkZW4gYnl0ZQorCWludAkJCW91dF9jb3VudDsJLy8gQnl0ZXMgaW4gdGhlIGJ1ZmZlcgorCisJaW50CQkJb3BlbjsJCS8vIENhbWVyYSBkZXZpY2Ugb3BlbiA/CisJc3RydWN0IHNlbWFwaG9yZQlpb19sb2NrOwkvLyBJTyAtbG9jaworCisJY2hhciAJCQlpbiBbOF07CQkvLyBDb21tYW5kIElucHV0IEJ1ZmZlcgorCWludCAgCQkJaW5fY291bnQ7CisKKwlpbnQJCQlwaWNfaW5kZXg7CS8vIENhY2hlIGZvciB0aGUgSW1hZ2VzaXplICgtMSBmb3Igbm90aGluZyBjYWNoZWQgKQorCWludAkJCXBpY19sZW47CisJaW50CQkJbWlub3I7Cit9OworCisKKy8qIFNwZWNpZmljYXRpb24gb2YgdGhlIEVuZHBvaW50cyAqLworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBtZGM4MDBfZWQgWzRdID0KK3sKKwl7IAorCQkuYkxlbmd0aCA9IAkJMCwKKwkJLmJEZXNjcmlwdG9yVHlwZSA9CTAsCisJCS5iRW5kcG9pbnRBZGRyZXNzID0JMHgwMSwKKwkJLmJtQXR0cmlidXRlcyA9IAkweDAyLAorCQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDgpLAorCQkuYkludGVydmFsID0gCQkwLAorCQkuYlJlZnJlc2ggPSAJCTAsCisJCS5iU3luY2hBZGRyZXNzID0gCTAsCisJfSwKKwl7CisJCS5iTGVuZ3RoID0gCQkwLAorCQkuYkRlc2NyaXB0b3JUeXBlID0gCTAsCisJCS5iRW5kcG9pbnRBZGRyZXNzID0gCTB4ODIsCisJCS5ibUF0dHJpYnV0ZXMgPSAJMHgwMywKKwkJLndNYXhQYWNrZXRTaXplID0gCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoOCksCisJCS5iSW50ZXJ2YWwgPSAJCTAsCisJCS5iUmVmcmVzaCA9IAkJMCwKKwkJLmJTeW5jaEFkZHJlc3MgPSAJMCwKKwl9LAorCXsKKwkJLmJMZW5ndGggPSAJCTAsCisJCS5iRGVzY3JpcHRvclR5cGUgPSAJMCwKKwkJLmJFbmRwb2ludEFkZHJlc3MgPSAJMHgwMywKKwkJLmJtQXR0cmlidXRlcyA9IAkweDAyLAorCQkud01heFBhY2tldFNpemUgPSAJX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCksCisJCS5iSW50ZXJ2YWwgPSAJCTAsCisJCS5iUmVmcmVzaCA9IAkJMCwKKwkJLmJTeW5jaEFkZHJlc3MgPSAJMCwKKwl9LAorCXsKKwkJLmJMZW5ndGggPSAJCTAsCisJCS5iRGVzY3JpcHRvclR5cGUgPSAJMCwKKwkJLmJFbmRwb2ludEFkZHJlc3MgPSAJMHg4NCwKKwkJLmJtQXR0cmlidXRlcyA9IAkweDAyLAorCQkud01heFBhY2tldFNpemUgPSAJX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCksCisJCS5iSW50ZXJ2YWwgPSAJCTAsCisJCS5iUmVmcmVzaCA9IAkJMCwKKwkJLmJTeW5jaEFkZHJlc3MgPSAJMCwKKwl9LAorfTsKKworLyogVGhlIFZhcmlhYmxlIHVzZWQgYnkgdGhlIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCBtZGM4MDBfZGF0YSogbWRjODAwOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwlUaGUgVVNCIFBhcnQgb2YgdGhlIGRyaXZlcgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBtZGM4MDBfZW5kcG9pbnRfZXF1YWxzIChzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmEsc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpiKQoreworCXJldHVybiAoCisJCSAgICggYS0+YkVuZHBvaW50QWRkcmVzcyA9PSBiLT5iRW5kcG9pbnRBZGRyZXNzICkKKwkJJiYgKCBhLT5ibUF0dHJpYnV0ZXMgICAgID09IGItPmJtQXR0cmlidXRlcyAgICAgKQorCQkmJiAoIGEtPndNYXhQYWNrZXRTaXplICAgPT0gYi0+d01heFBhY2tldFNpemUgICApCisJKTsKK30KKworCisvKgorICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNhbWVyYSByZXNwb25kcyBidXN5CisgKi8KK3N0YXRpYyBpbnQgbWRjODAwX2lzQnVzeSAoY2hhciogY2gpCit7CisJaW50IGk9MDsKKwl3aGlsZSAoaTw4KQorCXsKKwkJaWYgKGNoIFtpXSAhPSAoY2hhcikweDk5KQorCQkJcmV0dXJuIDA7CisJCWkrKzsKKwl9CisJcmV0dXJuIDE7Cit9CisKKworLyoKKyAqIENoZWNrcyB3aGV0aGVyIHRoZSBDYW1lcmEgaXMgcmVhZHkKKyAqLworc3RhdGljIGludCBtZGM4MDBfaXNSZWFkeSAoY2hhciAqY2gpCit7CisJaW50IGk9MDsKKwl3aGlsZSAoaTw4KQorCXsKKwkJaWYgKGNoIFtpXSAhPSAoY2hhcikweGJiKQorCQkJcmV0dXJuIDA7CisJCWkrKzsKKwl9CisJcmV0dXJuIDE7Cit9CisKKworCisvKgorICogVVNCIElSUSBIYW5kbGVyIGZvciBJbnB1dExpbmUKKyAqLworc3RhdGljIHZvaWQgbWRjODAwX3VzYl9pcnEgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlcykKK3sKKwlpbnQgZGF0YV9yZWNlaXZlZD0wLCB3YWtlX3VwOworCXVuc2lnbmVkIGNoYXIqIGI9dXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IG1kYzgwMF9kYXRhKiBtZGM4MDA9dXJiLT5jb250ZXh0OworCisJaWYgKHVyYi0+c3RhdHVzID49IDApCisJeworCisJCS8vZGJnICgiJWkgJWkgJWkgJWkgJWkgJWkgJWkgJWkgXG4iLGJbMF0sYlsxXSxiWzJdLGJbM10sYls0XSxiWzVdLGJbNl0sYls3XSk7CisKKwkJaWYgKG1kYzgwMF9pc0J1c3kgKGIpKQorCQl7CisJCQlpZiAoIW1kYzgwMC0+Y2FtZXJhX2J1c3kpCisJCQl7CisJCQkJbWRjODAwLT5jYW1lcmFfYnVzeT0xOworCQkJCWRiZyAoImdldHMgYnVzeSIpOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKG1kYzgwMC0+Y2FtZXJhX2J1c3kgJiYgbWRjODAwX2lzUmVhZHkgKGIpKQorCQkJeworCQkJCW1kYzgwMC0+Y2FtZXJhX2J1c3k9MDsKKwkJCQlkYmcgKCJnZXRzIHJlYWR5Iik7CisJCQl9CisJCX0KKwkJaWYgKCEobWRjODAwX2lzQnVzeSAoYikgfHwgbWRjODAwX2lzUmVhZHkgKGIpKSkKKwkJeworCQkJLyogU3RvcmUgRGF0YSBpbiBjYW1lcmFfYW5zd2VyIGZpZWxkICovCisJCQlkYmcgKCIlaSAlaSAlaSAlaSAlaSAlaSAlaSAlaSAiLGJbMF0sYlsxXSxiWzJdLGJbM10sYls0XSxiWzVdLGJbNl0sYls3XSk7CisKKwkJCW1lbWNweSAobWRjODAwLT5jYW1lcmFfcmVzcG9uc2UsYiw4KTsKKwkJCWRhdGFfcmVjZWl2ZWQ9MTsKKwkJfQorCX0KKwl3YWtlX3VwPSAoIG1kYzgwMC0+Y2FtZXJhX3JlcXVlc3RfcmVhZHkgPiAwICkKKwkJJiYKKwkJKAorCQkJKChtZGM4MDAtPmNhbWVyYV9yZXF1ZXN0X3JlYWR5ID09IDEpICYmICghbWRjODAwLT5jYW1lcmFfYnVzeSkpCisJCXx8CisJCQkoKG1kYzgwMC0+Y2FtZXJhX3JlcXVlc3RfcmVhZHkgPT0gMikgJiYgZGF0YV9yZWNlaXZlZCkKKwkJfHwKKwkJCSgobWRjODAwLT5jYW1lcmFfcmVxdWVzdF9yZWFkeSA9PSAzKSAmJiAobWRjODAwLT5jYW1lcmFfYnVzeSkpCisJCXx8CisJCQkodXJiLT5zdGF0dXMgPCAwKQorCQkpOworCisJaWYgKHdha2VfdXApCisJeworCQltZGM4MDAtPmNhbWVyYV9yZXF1ZXN0X3JlYWR5PTA7CisJCW1kYzgwMC0+aXJxX3dva2VuPTE7CisJCXdha2VfdXAgKCZtZGM4MDAtPmlycV93YWl0KTsKKwl9Cit9CisKKworLyoKKyAqIFdhaXRzIGEgd2hpbGUgdW50aWwgdGhlIGlycSByZXNwb25kcyB0aGF0IGNhbWVyYSBpcyByZWFkeQorICoKKyAqICBtb2RlIDogMDogV2FpdCBmb3IgY2FtZXJhIGdldHMgcmVhZHkKKyAqICAgICAgICAgMTogV2FpdCBmb3IgcmVjZWl2aW5nIGRhdGEKKyAqICAgICAgICAgMjogV2FpdCBmb3IgY2FtZXJhIGdldHMgYnVzeQorICoKKyAqIG1zZWM6IFRpbWUgdG8gd2FpdAorICovCitzdGF0aWMgaW50IG1kYzgwMF91c2Jfd2FpdEZvcklSUSAoaW50IG1vZGUsIGludCBtc2VjKQoreworCW1kYzgwMC0+Y2FtZXJhX3JlcXVlc3RfcmVhZHk9MSttb2RlOworCisJd2FpdF9ldmVudF90aW1lb3V0KG1kYzgwMC0+aXJxX3dhaXQsIG1kYzgwMC0+aXJxX3dva2VuLCBtc2VjKkhaLzEwMDApOworCW1kYzgwMC0+aXJxX3dva2VuID0gMDsKKworCWlmIChtZGM4MDAtPmNhbWVyYV9yZXF1ZXN0X3JlYWR5PjApCisJeworCQltZGM4MDAtPmNhbWVyYV9yZXF1ZXN0X3JlYWR5PTA7CisJCWVyciAoInRpbWVvdXQgd2FpdGluZyBmb3IgY2FtZXJhLiIpOworCQlyZXR1cm4gLTE7CisJfQorCQorCWlmIChtZGM4MDAtPnN0YXRlID09IE5PVF9DT05ORUNURUQpCisJeworCQl3YXJuICgiQ2FtZXJhIGdldHMgZGlzY29ubmVjdGVkIGR1cmluZyB3YWl0aW5nIGZvciBpcnEuIik7CisJCW1kYzgwMC0+Y2FtZXJhX3JlcXVlc3RfcmVhZHk9MDsKKwkJcmV0dXJuIC0yOworCX0KKwkKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogVGhlIHdyaXRlX3VyYiBjYWxsYmFjayBmdW5jdGlvbgorICovCitzdGF0aWMgdm9pZCBtZGM4MDBfdXNiX3dyaXRlX25vdGlmeSAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVzKQoreworCXN0cnVjdCBtZGM4MDBfZGF0YSogbWRjODAwPXVyYi0+Y29udGV4dDsKKworCWlmICh1cmItPnN0YXR1cyAhPSAwKQorCXsKKwkJZXJyICgid3JpdGluZyBjb21tYW5kIGZhaWxzIChzdGF0dXM9JWkpIiwgdXJiLT5zdGF0dXMpOworCX0KKwllbHNlCisJewkKKwkJbWRjODAwLT5zdGF0ZT1SRUFEWTsKKwl9CisJbWRjODAwLT53cml0dGVuID0gMTsKKwl3YWtlX3VwICgmbWRjODAwLT53cml0ZV93YWl0KTsKK30KKworCisvKgorICogVGhlIGRvd25sb2FkX3VyYiBjYWxsYmFjayBmdW5jdGlvbgorICovCitzdGF0aWMgdm9pZCBtZGM4MDBfdXNiX2Rvd25sb2FkX25vdGlmeSAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVzKQoreworCXN0cnVjdCBtZGM4MDBfZGF0YSogbWRjODAwPXVyYi0+Y29udGV4dDsKKworCWlmICh1cmItPnN0YXR1cyA9PSAwKQorCXsKKwkJLyogRmlsbCBvdXRwdXQgYnVmZmVyIHdpdGggdGhlc2UgZGF0YSAqLworCQltZW1jcHkgKG1kYzgwMC0+b3V0LCAgdXJiLT50cmFuc2Zlcl9idWZmZXIsIDY0KTsKKwkJbWRjODAwLT5vdXRfY291bnQ9NjQ7CisJCW1kYzgwMC0+b3V0X3B0cj0wOworCQltZGM4MDAtPmRvd25sb2FkX2xlZnQtPTY0OworCQlpZiAobWRjODAwLT5kb3dubG9hZF9sZWZ0ID09IDApCisJCXsKKwkJCW1kYzgwMC0+c3RhdGU9UkVBRFk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJZXJyICgicmVxdWVzdCBieXRlcyBmYWlscyAoc3RhdHVzOiVpKSIsIHVyYi0+c3RhdHVzKTsKKwl9CisJbWRjODAwLT5kb3dubG9hZGVkID0gMTsKKwl3YWtlX3VwICgmbWRjODAwLT5kb3dubG9hZF93YWl0KTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJUHJvYmluZyBmb3IgdGhlIENhbWVyYQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1kYzgwMF91c2JfZHJpdmVyOworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWRjODAwX2RldmljZV9vcHM7CitzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgbWRjODAwX2NsYXNzID0geworCS5uYW1lID0JCSJ1c2IvbWRjODAwJWQiLAorCS5mb3BzID0JCSZtZGM4MDBfZGV2aWNlX29wcywKKwkubW9kZSA9CQlTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dSUCwKKwkubWlub3JfYmFzZSA9CU1EQzgwMF9ERVZJQ0VfTUlOT1JfQkFTRSwKK307CisKKworLyoKKyAqIENhbGxiYWNrIHRvIHNlYXJjaCB0aGUgTXVzdGVrIE1EQzgwMCBvbiB0aGUgVVNCIEJ1cworICovCitzdGF0aWMgaW50IG1kYzgwMF91c2JfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgaSxqOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGZfZGVzYzsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAoaW50Zik7CisJaW50IGlycV9pbnRlcnZhbD0wOworCWludCByZXR2YWw7CisKKwlkYmcgKCIobWRjODAwX3VzYl9wcm9iZSkgY2FsbGVkLiIpOworCisKKwlpZiAobWRjODAwLT5kZXYgIT0gTlVMTCkKKwl7CisJCXdhcm4gKCJvbmx5IG9uZSBNdXN0ZWsgTURDODAwIGlzIHN1cHBvcnRlZC4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkKKwl7CisJCWVyciAoInByb2JlIGZhaWxzIC0+IHdyb25nIE51bWJlciBvZiBDb25maWd1cmF0aW9uIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpbnRmX2Rlc2MgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKworCWlmICgKKwkJCSggaW50Zl9kZXNjLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyAhPSAweGZmICkKKwkJfHwJKCBpbnRmX2Rlc2MtPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzICE9IDAgKQorCQl8fCAoIGludGZfZGVzYy0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wgIT0gMCApCisJCXx8ICggaW50Zl9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHMgIT0gNCkKKwkpCisJeworCQllcnIgKCJwcm9iZSBmYWlscyAtPiB3cm9uZyBJbnRlcmZhY2UiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogQ2hlY2sgdGhlIEVuZHBvaW50cyAqLworCWZvciAoaT0wOyBpPDQ7IGkrKykKKwl7CisJCW1kYzgwMC0+ZW5kcG9pbnRbaV09LTE7CisJCWZvciAoaj0wOyBqPDQ7IGorKykKKwkJeworCQkJaWYgKG1kYzgwMF9lbmRwb2ludF9lcXVhbHMgKCZpbnRmX2Rlc2MtPmVuZHBvaW50IFtqXS5kZXNjLCZtZGM4MDBfZWQgW2ldKSkKKwkJCXsKKwkJCQltZGM4MDAtPmVuZHBvaW50W2ldPWludGZfZGVzYy0+ZW5kcG9pbnQgW2pdLmRlc2MuYkVuZHBvaW50QWRkcmVzcyA7CisJCQkJaWYgKGk9PTEpCisJCQkJeworCQkJCQlpcnFfaW50ZXJ2YWw9aW50Zl9kZXNjLT5lbmRwb2ludCBbal0uZGVzYy5iSW50ZXJ2YWw7CisJCQkJfQorCisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJaWYgKG1kYzgwMC0+ZW5kcG9pbnRbaV0gPT0gLTEpCisJCXsKKwkJCWVyciAoInByb2JlIGZhaWxzIC0+IFdyb25nIEVuZHBvaW50cy4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfQorCisKKwlpbmZvICgiRm91bmQgTXVzdGVrIE1EQzgwMCBvbiBVU0IuIik7CisKKwlkb3duICgmbWRjODAwLT5pb19sb2NrKTsKKworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJm1kYzgwMF9jbGFzcyk7CisJaWYgKHJldHZhbCkgeworCQllcnIgKCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW1kYzgwMC0+ZGV2PWRldjsKKwltZGM4MDAtPm9wZW49MDsKKworCS8qIFNldHVwIFVSQiBTdHJ1Y3RzICovCisJdXNiX2ZpbGxfaW50X3VyYiAoCisJCW1kYzgwMC0+aXJxX3VyYiwKKwkJbWRjODAwLT5kZXYsCisJCXVzYl9yY3ZpbnRwaXBlIChtZGM4MDAtPmRldixtZGM4MDAtPmVuZHBvaW50IFsxXSksCisJCW1kYzgwMC0+aXJxX3VyYl9idWZmZXIsCisJCTgsCisJCW1kYzgwMF91c2JfaXJxLAorCQltZGM4MDAsCisJCWlycV9pbnRlcnZhbAorCSk7CisKKwl1c2JfZmlsbF9idWxrX3VyYiAoCisJCW1kYzgwMC0+d3JpdGVfdXJiLAorCQltZGM4MDAtPmRldiwKKwkJdXNiX3NuZGJ1bGtwaXBlIChtZGM4MDAtPmRldiwgbWRjODAwLT5lbmRwb2ludFswXSksCisJCW1kYzgwMC0+d3JpdGVfdXJiX2J1ZmZlciwKKwkJOCwKKwkJbWRjODAwX3VzYl93cml0ZV9ub3RpZnksCisJCW1kYzgwMAorCSk7CisKKwl1c2JfZmlsbF9idWxrX3VyYiAoCisJCW1kYzgwMC0+ZG93bmxvYWRfdXJiLAorCQltZGM4MDAtPmRldiwKKwkJdXNiX3JjdmJ1bGtwaXBlIChtZGM4MDAtPmRldiwgbWRjODAwLT5lbmRwb2ludCBbM10pLAorCQltZGM4MDAtPmRvd25sb2FkX3VyYl9idWZmZXIsCisJCTY0LAorCQltZGM4MDBfdXNiX2Rvd25sb2FkX25vdGlmeSwKKwkJbWRjODAwCisJKTsKKworCW1kYzgwMC0+c3RhdGU9UkVBRFk7CisKKwl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBtZGM4MDApOworCXJldHVybiAwOworfQorCisKKy8qCisgKiBEaXNjb25uZWN0IFVTQiBkZXZpY2UgKG1heWJlIHRoZSBNREM4MDApCisgKi8KK3N0YXRpYyB2b2lkIG1kYzgwMF91c2JfZGlzY29ubmVjdCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IG1kYzgwMF9kYXRhKiBtZGM4MDAgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJZGJnICgiKG1kYzgwMF91c2JfZGlzY29ubmVjdCkgY2FsbGVkIik7CisKKwlpZiAobWRjODAwKSB7CisJCWlmIChtZGM4MDAtPnN0YXRlID09IE5PVF9DT05ORUNURUQpCisJCQlyZXR1cm47CisKKwkJdXNiX2RlcmVnaXN0ZXJfZGV2KGludGYsICZtZGM4MDBfY2xhc3MpOworCisJCW1kYzgwMC0+c3RhdGU9Tk9UX0NPTk5FQ1RFRDsKKworCQl1c2Jfa2lsbF91cmIobWRjODAwLT5pcnFfdXJiKTsKKwkJdXNiX2tpbGxfdXJiKG1kYzgwMC0+d3JpdGVfdXJiKTsKKwkJdXNiX2tpbGxfdXJiKG1kYzgwMC0+ZG93bmxvYWRfdXJiKTsKKworCQltZGM4MDAtPmRldiA9IE5VTEw7CisJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJfQorCWluZm8gKCJNdXN0ZWsgTURDODAwIGRpc2Nvbm5lY3RlZCBmcm9tIFVTQi4iKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJVGhlIE1pc2MgZGV2aWNlIFBhcnQgKGZpbGVfb3BlcmF0aW9ucykKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUaGlzIEZ1bmN0aW9uIGNhbGMgdGhlIEFuc3dlcnNpemUgZm9yIGEgY29tbWFuZC4KKyAqLworc3RhdGljIGludCBtZGM4MDBfZ2V0QW5zd2VyU2l6ZSAoY2hhciBjb21tYW5kKQoreworCXN3aXRjaCAoKHVuc2lnbmVkIGNoYXIpIGNvbW1hbmQpCisJeworCQljYXNlIDB4MmE6CisJCWNhc2UgMHg0OToKKwkJY2FzZSAweDUxOgorCQljYXNlIDB4MGQ6CisJCWNhc2UgMHgyMDoKKwkJY2FzZSAweDA3OgorCQljYXNlIDB4MDE6CisJCWNhc2UgMHgyNToKKwkJY2FzZSAweDAwOgorCQkJcmV0dXJuIDg7CisKKwkJY2FzZSAweDA1OgorCQljYXNlIDB4M2U6CisJCQlyZXR1cm4gbWRjODAwLT5waWNfbGVuOworCisJCWNhc2UgMHgwOToKKwkJCXJldHVybiA0MDk2OworCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwl9Cit9CisKKworLyoKKyAqIEluaXQgdGhlIGRldmljZTogKDEpIGFsbG9jIG1lbSAoMikgSW5jcmVhc2UgTU9EIENvdW50IC4uCisgKi8KK3N0YXRpYyBpbnQgbWRjODAwX2RldmljZV9vcGVuIChzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmV0dmFsPTA7CisJaW50IGVycm49MDsKKworCWRvd24gKCZtZGM4MDAtPmlvX2xvY2spOworCQorCWlmIChtZGM4MDAtPnN0YXRlID09IE5PVF9DT05ORUNURUQpCisJeworCQllcnJuPS1FQlVTWTsKKwkJZ290byBlcnJvcl9vdXQ7CisJfQorCWlmIChtZGM4MDAtPm9wZW4pCisJeworCQllcnJuPS1FQlVTWTsKKwkJZ290byBlcnJvcl9vdXQ7CisJfQorCisJbWRjODAwLT5pbl9jb3VudD0wOworCW1kYzgwMC0+b3V0X2NvdW50PTA7CisJbWRjODAwLT5vdXRfcHRyPTA7CisJbWRjODAwLT5waWNfaW5kZXg9MDsKKwltZGM4MDAtPnBpY19sZW49LTE7CisJbWRjODAwLT5kb3dubG9hZF9sZWZ0PTA7CisKKwltZGM4MDAtPmNhbWVyYV9idXN5PTA7CisJbWRjODAwLT5jYW1lcmFfcmVxdWVzdF9yZWFkeT0wOworCisJcmV0dmFsPTA7CisJbWRjODAwLT5pcnFfdXJiLT5kZXYgPSBtZGM4MDAtPmRldjsKKwlpZiAodXNiX3N1Ym1pdF91cmIgKG1kYzgwMC0+aXJxX3VyYiwgR0ZQX0tFUk5FTCkpCisJeworCQllcnIgKCJyZXF1ZXN0IFVTQiBpcnEgZmFpbHMgKHN1Ym1pdF9yZXR2YWw9JWkgdXJiX3N0YXR1cz0laSkuIixyZXR2YWwsIG1kYzgwMC0+aXJxX3VyYi0+c3RhdHVzKTsKKwkJZXJybiA9IC1FSU87CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKworCW1kYzgwMC0+b3Blbj0xOworCWRiZyAoIk11c3RlayBNREM4MDAgZGV2aWNlIG9wZW5lZC4iKTsKKworZXJyb3Jfb3V0OgorCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwlyZXR1cm4gZXJybjsKK30KKworCisvKgorICogQ2xvc2UgdGhlIENhbWVyYSBhbmQgcmVsZWFzZSBNZW1vcnkKKyAqLworc3RhdGljIGludCBtZGM4MDBfZGV2aWNlX3JlbGVhc2UgKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCByZXR2YWw9MDsKKwlkYmcgKCJNdXN0ZWsgTURDODAwIGRldmljZSBjbG9zZWQuIik7CisKKwlkb3duICgmbWRjODAwLT5pb19sb2NrKTsKKwlpZiAobWRjODAwLT5vcGVuICYmIChtZGM4MDAtPnN0YXRlICE9IE5PVF9DT05ORUNURUQpKQorCXsKKwkJdXNiX2tpbGxfdXJiKG1kYzgwMC0+aXJxX3VyYik7CisJCXVzYl9raWxsX3VyYihtZGM4MDAtPndyaXRlX3VyYik7CisJCXVzYl9raWxsX3VyYihtZGM4MDAtPmRvd25sb2FkX3VyYik7CisJCW1kYzgwMC0+b3Blbj0wOworCX0KKwllbHNlCisJeworCQlyZXR2YWw9LUVJTzsKKwl9CisKKwl1cCgmbWRjODAwLT5pb19sb2NrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qCisgKiBUaGUgRGV2aWNlIHJlYWQgY2FsbGJhY2sgRnVuY3Rpb24KKyAqLworc3RhdGljIHNzaXplX3QgbWRjODAwX2RldmljZV9yZWFkIChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpCit7CisJc2l6ZV90IGxlZnQ9bGVuLCBzdHM9bGVuOyAvKiBzaW5nbGUgdHJhbnNmZXIgc2l6ZSAqLworCWNoYXIgX191c2VyICpwdHIgPSBidWY7CisKKwlkb3duICgmbWRjODAwLT5pb19sb2NrKTsKKwlpZiAobWRjODAwLT5zdGF0ZSA9PSBOT1RfQ09OTkVDVEVEKQorCXsKKwkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlpZiAobWRjODAwLT5zdGF0ZSA9PSBXT1JLSU5HKQorCXsKKwkJd2FybiAoIklsbGVnYWwgU3RhdGUgXCJ3b3JraW5nXCIgcmVhY2hlZCBkdXJpbmcgcmVhZCA/ISIpOworCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWlmICghbWRjODAwLT5vcGVuKQorCXsKKwkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXdoaWxlIChsZWZ0KQorCXsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nIChjdXJyZW50KSkgCisJCXsKKwkJCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwkJCXJldHVybiAtRUlOVFI7CisJCX0KKworCQlzdHM9bGVmdCA+IChtZGM4MDAtPm91dF9jb3VudC1tZGM4MDAtPm91dF9wdHIpP21kYzgwMC0+b3V0X2NvdW50LW1kYzgwMC0+b3V0X3B0cjpsZWZ0OworCisJCWlmIChzdHMgPD0gMCkKKwkJeworCQkJLyogVG9vIGxlc3MgRGF0YSBpbiBidWZmZXIgKi8KKwkJCWlmIChtZGM4MDAtPnN0YXRlID09IERPV05MT0FEKQorCQkJeworCQkJCW1kYzgwMC0+b3V0X2NvdW50PTA7CisJCQkJbWRjODAwLT5vdXRfcHRyPTA7CisKKwkJCQkvKiBEb3dubG9hZCAtPiBSZXF1ZXN0IG5ldyBieXRlcyAqLworCQkJCW1kYzgwMC0+ZG93bmxvYWRfdXJiLT5kZXYgPSBtZGM4MDAtPmRldjsKKwkJCQlpZiAodXNiX3N1Ym1pdF91cmIgKG1kYzgwMC0+ZG93bmxvYWRfdXJiLCBHRlBfS0VSTkVMKSkKKwkJCQl7CisJCQkJCWVyciAoIkNhbid0IHN1Ym1pdCBkb3dubG9hZCB1cmIgKHN0YXR1cz0laSkiLG1kYzgwMC0+ZG93bmxvYWRfdXJiLT5zdGF0dXMpOworCQkJCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQkJCXJldHVybiBsZW4tbGVmdDsKKwkJCQl9CisJCQkJd2FpdF9ldmVudF90aW1lb3V0KG1kYzgwMC0+ZG93bmxvYWRfd2FpdCwgbWRjODAwLT5kb3dubG9hZGVkLAorCQkJCQkJCQkJCVRPX0RPV05MT0FEX0dFVF9SRUFEWSpIWi8xMDAwKTsKKwkJCQltZGM4MDAtPmRvd25sb2FkZWQgPSAwOworCQkJCWlmIChtZGM4MDAtPmRvd25sb2FkX3VyYi0+c3RhdHVzICE9IDApCisJCQkJeworCQkJCQllcnIgKCJyZXF1ZXN0IGRvd25sb2FkLWJ5dGVzIGZhaWxzIChzdGF0dXM9JWkpIixtZGM4MDAtPmRvd25sb2FkX3VyYi0+c3RhdHVzKTsKKwkJCQkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQkJCQlyZXR1cm4gbGVuLWxlZnQ7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qIE5vIG1vcmUgYnl0ZXMgLT4gdGhhdCdzIGFuIGVycm9yKi8KKwkJCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBDb3B5IEJ5dGVzICovCisJCQlpZiAoY29weV90b191c2VyKHB0ciwgJm1kYzgwMC0+b3V0IFttZGM4MDAtPm91dF9wdHJdLAorCQkJCQkJc3RzKSkgeworCQkJCXVwKCZtZGM4MDAtPmlvX2xvY2spOworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQkJcHRyKz1zdHM7CisJCQlsZWZ0LT1zdHM7CisJCQltZGM4MDAtPm91dF9wdHIrPXN0czsKKwkJfQorCX0KKworCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwlyZXR1cm4gbGVuLWxlZnQ7Cit9CisKKworLyoKKyAqIFRoZSBEZXZpY2Ugd3JpdGUgY2FsbGJhY2sgRnVuY3Rpb24KKyAqIElmIGEgOEJ5dGUgQ29tbWFuZCBpcyByZWNlaXZlZCwgaXQgd2lsbCBiZSBzZW5kIHRvIHRoZSBjYW1lcmEuCisgKiBBZnRlciB0aGlzIHRoZSBkcml2ZXIgaW5pdGlhdGVzIHRoZSByZXF1ZXN0IGZvciB0aGUgYW5zd2VyIG9yCisgKiBqdXN0IHdhaXRzIHVudGlsIHRoZSBjYW1lcmEgYmVjb21lcyByZWFkeS4KKyAqLworc3RhdGljIHNzaXplX3QgbWRjODAwX2RldmljZV93cml0ZSAoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKQoreworCXNpemVfdCBpPTA7CisKKwlkb3duICgmbWRjODAwLT5pb19sb2NrKTsKKwlpZiAobWRjODAwLT5zdGF0ZSAhPSBSRUFEWSkKKwl7CisJCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJaWYgKCFtZGM4MDAtPm9wZW4gKQorCXsKKwkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXdoaWxlIChpPGxlbikKKwl7CisJCXVuc2lnbmVkIGNoYXIgYzsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nIChjdXJyZW50KSkgCisJCXsKKwkJCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwkJCXJldHVybiAtRUlOVFI7CisJCX0KKwkJCisJCWlmKGdldF91c2VyKGMsIGJ1ZitpKSkKKwkJeworCQkJdXAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCisJCS8qIGNoZWNrIGZvciBjb21tYW5kIHN0YXJ0ICovCisJCWlmIChjID09IDB4NTUpCisJCXsKKwkJCW1kYzgwMC0+aW5fY291bnQ9MDsKKwkJCW1kYzgwMC0+b3V0X2NvdW50PTA7CisJCQltZGM4MDAtPm91dF9wdHI9MDsKKwkJCW1kYzgwMC0+ZG93bmxvYWRfbGVmdD0wOworCQl9CisKKwkJLyogc2F2ZSBjb21tYW5kIGJ5dGUgKi8KKwkJaWYgKG1kYzgwMC0+aW5fY291bnQgPCA4KQorCQl7CisJCQltZGM4MDAtPmluW21kYzgwMC0+aW5fY291bnRdID0gYzsKKwkJCW1kYzgwMC0+aW5fY291bnQrKzsKKwkJfQorCQllbHNlCisJCXsKKwkJCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJLyogQ29tbWFuZCBCdWZmZXIgZnVsbCA/IC0+IHNlbmQgaXQgdG8gY2FtZXJhICovCisJCWlmIChtZGM4MDAtPmluX2NvdW50ID09IDgpCisJCXsKKwkJCWludCBhbnN3ZXJzaXplOworCisJCQlpZiAobWRjODAwX3VzYl93YWl0Rm9ySVJRICgwLFRPX0dFVF9SRUFEWSkpCisJCQl7CisJCQkJZXJyICgiQ2FtZXJhIGRpZG4ndCBnZXQgcmVhZHkuXG4iKTsKKwkJCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisKKwkJCWFuc3dlcnNpemU9bWRjODAwX2dldEFuc3dlclNpemUgKG1kYzgwMC0+aW5bMV0pOworCisJCQltZGM4MDAtPnN0YXRlPVdPUktJTkc7CisJCQltZW1jcHkgKG1kYzgwMC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIG1kYzgwMC0+aW4sOCk7CisJCQltZGM4MDAtPndyaXRlX3VyYi0+ZGV2ID0gbWRjODAwLT5kZXY7CisJCQlpZiAodXNiX3N1Ym1pdF91cmIgKG1kYzgwMC0+d3JpdGVfdXJiLCBHRlBfS0VSTkVMKSkKKwkJCXsKKwkJCQllcnIgKCJzdWJtaXR0aW5nIHdyaXRlIHVyYiBmYWlscyAoc3RhdHVzPSVpKSIsIG1kYzgwMC0+d3JpdGVfdXJiLT5zdGF0dXMpOworCQkJCXVwICgmbWRjODAwLT5pb19sb2NrKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCXdhaXRfZXZlbnRfdGltZW91dChtZGM4MDAtPndyaXRlX3dhaXQsIG1kYzgwMC0+d3JpdHRlbiwgVE9fV1JJVEVfR0VUX1JFQURZKkhaLzEwMDApOworCQkJbWRjODAwLT53cml0dGVuID0gMDsKKwkJCWlmIChtZGM4MDAtPnN0YXRlID09IFdPUktJTkcpCisJCQl7CisJCQkJdXNiX2tpbGxfdXJiKG1kYzgwMC0+d3JpdGVfdXJiKTsKKwkJCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisKKwkJCXN3aXRjaCAoKHVuc2lnbmVkIGNoYXIpIG1kYzgwMC0+aW5bMV0pCisJCQl7CisJCQkJY2FzZSAweDA1OiAvKiBEb3dubG9hZCBJbWFnZSAqLworCQkJCWNhc2UgMHgzZTogLyogVGFrZSBzaG90IGluIEZpbmUgTW9kZSAoV0NhbSBNb2RlKSAqLworCQkJCQlpZiAobWRjODAwLT5waWNfbGVuIDwgMCkKKwkJCQkJeworCQkJCQkJZXJyICgiY2FsbCAweDA3IGJlZm9yZSAweDA1LDB4M2UiKTsKKwkJCQkJCW1kYzgwMC0+c3RhdGU9UkVBRFk7CisJCQkJCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQkJCQlyZXR1cm4gLUVJTzsKKwkJCQkJfQorCQkJCQltZGM4MDAtPnBpY19sZW49LTE7CisKKwkJCQljYXNlIDB4MDk6IC8qIERvd25sb2FkIFRodW1ibmFpbCAqLworCQkJCQltZGM4MDAtPmRvd25sb2FkX2xlZnQ9YW5zd2Vyc2l6ZSs2NDsKKwkJCQkJbWRjODAwLT5zdGF0ZT1ET1dOTE9BRDsKKwkJCQkJbWRjODAwX3VzYl93YWl0Rm9ySVJRICgwLFRPX0RPV05MT0FEX0dFVF9CVVNZKTsKKwkJCQkJYnJlYWs7CisKKworCQkJCWRlZmF1bHQ6CisJCQkJCWlmIChhbnN3ZXJzaXplKQorCQkJCQl7CisKKwkJCQkJCWlmIChtZGM4MDBfdXNiX3dhaXRGb3JJUlEgKDEsVE9fUkVBRF9GUk9NX0lSUSkpCisJCQkJCQl7CisJCQkJCQkJZXJyICgicmVxdWVzdGluZyBhbnN3ZXIgZnJvbSBpcnEgZmFpbHMiKTsKKwkJCQkJCQl1cCAoJm1kYzgwMC0+aW9fbG9jayk7CisJCQkJCQkJcmV0dXJuIC1FSU87CisJCQkJCQl9CisKKwkJCQkJCS8qIFdyaXRlIGR1bW15IGRhdGEsICh0aGlzIGlzIHVnbHkgYnV0IHBhcnQgb2YgdGhlIFVTQiBQcm90b2NvbCAqLworCQkJCQkJLyogaWYgeW91IHVzZSBlbmRwb2ludCAxIGFzIGJ1bGsgYW5kIG5vdCBhcyBpcnEpICovCisJCQkJCQltZW1jcHkgKG1kYzgwMC0+b3V0LCBtZGM4MDAtPmNhbWVyYV9yZXNwb25zZSw4KTsKKworCQkJCQkJLyogVGhpcyBpcyB0aGUgaW50ZXJwcmV0ZWQgYW5zd2VyICovCisJCQkJCQltZW1jcHkgKCZtZGM4MDAtPm91dFs4XSwgbWRjODAwLT5jYW1lcmFfcmVzcG9uc2UsOCk7CisKKwkJCQkJCW1kYzgwMC0+b3V0X3B0cj0wOworCQkJCQkJbWRjODAwLT5vdXRfY291bnQ9MTY7CisKKwkJCQkJCS8qIENhY2hlIHRoZSBJbWFnZXNpemUsIGlmIGNvbW1hbmQgd2FzIGdldEltYWdlU2l6ZSAqLworCQkJCQkJaWYgKG1kYzgwMC0+aW4gWzFdID09IChjaGFyKSAweDA3KQorCQkJCQkJeworCQkJCQkJCW1kYzgwMC0+cGljX2xlbj0oaW50KSA2NTUzNioodW5zaWduZWQgY2hhcikgbWRjODAwLT5jYW1lcmFfcmVzcG9uc2VbMF0rMjU2Kih1bnNpZ25lZCBjaGFyKSBtZGM4MDAtPmNhbWVyYV9yZXNwb25zZVsxXSsodW5zaWduZWQgY2hhcikgbWRjODAwLT5jYW1lcmFfcmVzcG9uc2VbMl07CisKKwkJCQkJCQlkYmcgKCJjYWNoZWQgaW1hZ2VzaXplID0gJWkiLG1kYzgwMC0+cGljX2xlbik7CisJCQkJCQl9CisKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCWlmIChtZGM4MDBfdXNiX3dhaXRGb3JJUlEgKDAsVE9fREVGQVVMVF9DT01NQU5EKSkKKwkJCQkJCXsKKwkJCQkJCQllcnIgKCJDb21tYW5kIFRpbWVvdXQuIik7CisJCQkJCQkJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCQkJCQkJCXJldHVybiAtRUlPOworCQkJCQkJfQorCQkJCQl9CisJCQkJCW1kYzgwMC0+c3RhdGU9UkVBRFk7CisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWkrKzsKKwl9CisJdXAgKCZtZGM4MDAtPmlvX2xvY2spOworCXJldHVybiBpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwlJbml0IGFuZCBDbGVhbnVwIHRoaXMgZHJpdmVyIChTdHJ1Y3RzIGFuZCB0eXBlcykKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEZpbGUgT3BlcmF0aW9ucyBvZiB0aGlzIGRyaXZlcnMgKi8KK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1kYzgwMF9kZXZpY2Vfb3BzID0KK3sKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkucmVhZCA9CQltZGM4MDBfZGV2aWNlX3JlYWQsCisJLndyaXRlID0JbWRjODAwX2RldmljZV93cml0ZSwKKwkub3BlbiA9CQltZGM4MDBfZGV2aWNlX29wZW4sCisJLnJlbGVhc2UgPQltZGM4MDBfZGV2aWNlX3JlbGVhc2UsCit9OworCisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG1kYzgwMF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoTURDODAwX1ZFTkRPUl9JRCwgTURDODAwX1BST0RVQ1RfSUQpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgbWRjODAwX3RhYmxlKTsKKy8qCisgKiBVU0IgRHJpdmVyIFN0cnVjdCBmb3IgdGhpcyBkZXZpY2UKKyAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1kYzgwMF91c2JfZHJpdmVyID0KK3sKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkibWRjODAwIiwKKwkucHJvYmUgPQltZGM4MDBfdXNiX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JbWRjODAwX3VzYl9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CW1kYzgwMF90YWJsZQorfTsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwlJbml0IGFuZCBDbGVhbnVwIHRoaXMgZHJpdmVyIChNYWluIEZ1bmN0aW9ucykKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgdHJ5KEEpICAgICAgICAgICBpZiAoIShBKSkgZ290byBjbGVhbnVwX29uX2ZhaWw7CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9tZGM4MDBfaW5pdCAodm9pZCkKK3sKKwlpbnQgcmV0dmFsID0gLUVOT0RFVjsKKwkvKiBBbGxvY2F0ZSBNZW1vcnkgKi8KKwl0cnkgKG1kYzgwMD1rbWFsbG9jIChzaXplb2YgKHN0cnVjdCBtZGM4MDBfZGF0YSksIEdGUF9LRVJORUwpKTsKKworCW1lbXNldChtZGM4MDAsIDAsIHNpemVvZihzdHJ1Y3QgbWRjODAwX2RhdGEpKTsKKwltZGM4MDAtPmRldiA9IE5VTEw7CisJbWRjODAwLT5vcGVuPTA7CisJbWRjODAwLT5zdGF0ZT1OT1RfQ09OTkVDVEVEOworCWluaXRfTVVURVggKCZtZGM4MDAtPmlvX2xvY2spOworCisJaW5pdF93YWl0cXVldWVfaGVhZCAoJm1kYzgwMC0+aXJxX3dhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZtZGM4MDAtPndyaXRlX3dhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZtZGM4MDAtPmRvd25sb2FkX3dhaXQpOworCisJbWRjODAwLT5pcnFfd29rZW4gPSAwOworCW1kYzgwMC0+ZG93bmxvYWRlZCA9IDA7CisJbWRjODAwLT53cml0dGVuID0gMDsKKworCXRyeSAobWRjODAwLT5pcnFfdXJiX2J1ZmZlcj1rbWFsbG9jICg4LCBHRlBfS0VSTkVMKSk7CisJdHJ5IChtZGM4MDAtPndyaXRlX3VyYl9idWZmZXI9a21hbGxvYyAoOCwgR0ZQX0tFUk5FTCkpOworCXRyeSAobWRjODAwLT5kb3dubG9hZF91cmJfYnVmZmVyPWttYWxsb2MgKDY0LCBHRlBfS0VSTkVMKSk7CisKKwl0cnkgKG1kYzgwMC0+aXJxX3VyYj11c2JfYWxsb2NfdXJiICgwLCBHRlBfS0VSTkVMKSk7CisJdHJ5IChtZGM4MDAtPmRvd25sb2FkX3VyYj11c2JfYWxsb2NfdXJiICgwLCBHRlBfS0VSTkVMKSk7CisJdHJ5IChtZGM4MDAtPndyaXRlX3VyYj11c2JfYWxsb2NfdXJiICgwLCBHRlBfS0VSTkVMKSk7CisKKwkvKiBSZWdpc3RlciB0aGUgZHJpdmVyICovCisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZtZGM4MDBfdXNiX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJZ290byBjbGVhbnVwX29uX2ZhaWw7CisKKwlpbmZvIChEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCisJcmV0dXJuIDA7CisKKwkvKiBDbGVhbiBkcml2ZXIgdXAsIHdoZW4gc29tZXRoaW5nIGZhaWxzICovCisKK2NsZWFudXBfb25fZmFpbDoKKworCWlmIChtZGM4MDAgIT0gTlVMTCkKKwl7CisJCWVyciAoImNhbid0IGFsbG9jIG1lbW9yeSEiKTsKKworCQlrZnJlZShtZGM4MDAtPmRvd25sb2FkX3VyYl9idWZmZXIpOworCQlrZnJlZShtZGM4MDAtPndyaXRlX3VyYl9idWZmZXIpOworCQlrZnJlZShtZGM4MDAtPmlycV91cmJfYnVmZmVyKTsKKworCQl1c2JfZnJlZV91cmIobWRjODAwLT53cml0ZV91cmIpOworCQl1c2JfZnJlZV91cmIobWRjODAwLT5kb3dubG9hZF91cmIpOworCQl1c2JfZnJlZV91cmIobWRjODAwLT5pcnFfdXJiKTsKKworCQlrZnJlZSAobWRjODAwKTsKKwl9CisJbWRjODAwID0gTlVMTDsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2JfbWRjODAwX2NsZWFudXAgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZtZGM4MDBfdXNiX2RyaXZlcik7CisKKwl1c2JfZnJlZV91cmIgKG1kYzgwMC0+aXJxX3VyYik7CisJdXNiX2ZyZWVfdXJiIChtZGM4MDAtPmRvd25sb2FkX3VyYik7CisJdXNiX2ZyZWVfdXJiIChtZGM4MDAtPndyaXRlX3VyYik7CisKKwlrZnJlZSAobWRjODAwLT5pcnFfdXJiX2J1ZmZlcik7CisJa2ZyZWUgKG1kYzgwMC0+d3JpdGVfdXJiX2J1ZmZlcik7CisJa2ZyZWUgKG1kYzgwMC0+ZG93bmxvYWRfdXJiX2J1ZmZlcik7CisKKwlrZnJlZSAobWRjODAwKTsKKwltZGM4MDAgPSBOVUxMOworfQorCittb2R1bGVfaW5pdCAodXNiX21kYzgwMF9pbml0KTsKK21vZHVsZV9leGl0ICh1c2JfbWRjODAwX2NsZWFudXApOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmMgYi9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMGQzMmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jCkBAIC0wLDAgKzEsODYyIEBACisvKiBEcml2ZXIgZm9yIE1pY3JvdGVrIFNjYW5tYWtlciBYNiBVU0Igc2Nhbm5lciwgYW5kIHBvc3NpYmx5IG90aGVycy4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDAgSm9obiBGcmVtbGluIDx2aWlAcGVuZ3VpbnBvd2VyZWQuY29tPgorICogKEMpIENvcHlyaWdodCAyMDAwIE9saXZlciBOZXVrdW0gPE9saXZlci5OZXVrdW1AbHJ6LnVuaS1tdWVuY2hlbi5kZT4KKyAqCisgKiBQYXJ0cyBzaGFtZWxlc3NseSBzdG9sZW4gZnJvbSB1c2Itc3RvcmFnZSBhbmQgY29weXJpZ2h0IGJ5IHRoZWlyCisgKiBhdXRob3JzLiBUaGFua3MgdG8gTWF0dCBEaGFybSBmb3IgZ2l2aW5nIHVzIHBlcm1pc3Npb24hCisgKgorICogVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBhIFNDU0kgaG9zdCBjb250cm9sbGVyIGRyaXZlciBhbmQgYSBVU0IKKyAqIGRldmljZSBkcml2ZXIuIFRvIGF2b2lkIGNvbmZ1c2lvbiwgYWxsIHRoZSBVU0IgcmVsYXRlZCBzdHVmZiBpcworICogcHJlZml4ZWQgYnkgbXRzX3VzYl8gYW5kIGFsbCB0aGUgU0NTSSBzdHVmZiBieSBtdHNfc2NzaV8uCisgKgorICogTWljcm90ZWsgKHd3dy5taWNyb3Rlay5jb20pIGRpZCBub3QgcmVsZWFzZSB0aGUgc3BlY2lmaWNhdGlvbnMgZm9yCisgKiB0aGVpciBVU0IgcHJvdG9jb2wgdG8gdXMsIHNvIHdlIGhhZCB0byByZXZlcnNlIGVuZ2luZWVyIHRoZW0uIFdlCisgKiBkb24ndCBrbm93IGZvciB3aGljaCBtb2RlbHMgdGhleSBhcmUgdmFsaWQuCisgKgorICogVGhlIFg2IFVTQiBoYXMgdGhyZWUgYnVsayBlbmRwb2ludHMsIG9uZSBvdXRwdXQgKDB4MSkgZG93biB3aGljaAorICogY29tbWFuZHMgYW5kIG91dGdvaW5nIGRhdGEgYXJlIHNlbnQsIGFuZCB0d28gaW5wdXQ6IDB4ODIgZnJvbSB3aGljaAorICogbm9ybWFsIGRhdGEgaXMgcmVhZCBmcm9tIHRoZSBzY2FubmVyIChpbiBwYWNrZXRzIG9mIG1heGltdW0gMzIKKyAqIGJ5dGVzKSBhbmQgZnJvbSB3aGljaCB0aGUgc3RhdHVzIGJ5dGUgaXMgcmVhZCwgYW5kIDB4ODMgZnJvbSB3aGljaAorICogdGhlIHJlc3VsdHMgb2YgYSBzY2FuIChvciBwcmV2aWV3KSBhcmUgcmVhZCBpbiB1cCB0byA2NCAqIDEwMjQgYnl0ZQorICogY2h1bmtzIGJ5IHRoZSBXaW5kb3dzIGRyaXZlci4gV2UgZG9uJ3Qga25vdyBob3cgbXVjaCBpdCBpcyBwb3NzaWJsZQorICogdG8gcmVhZCBhdCBhIHRpbWUgZnJvbSAweDgzLgorICoKKyAqIEl0IHNlZW1zIHBvc3NpYmxlIHRvIHJlYWQgKHdpdGggVVJCIHRyYW5zZmVycykgZXZlcnl0aGluZyBmcm9tIDB4ODIKKyAqIGluIG9uZSBnbywgd2l0aG91dCBib3RoZXJpbmcgdG8gcmVhZCBpbiAzMiBieXRlIGNodW5rcy4KKyAqCisgKiBUaGVyZSBzZWVtcyB0byBiZSBhbiBvcHRpbWlzYXRpb24gb2YgYSBmdXJ0aGVyIFJFQUQgaW1wbGljaXQgaWYKKyAqIHlvdSBzaW1wbHkgcmVhZCBmcm9tIDB4ODMuCisgKgorICogR3Vlc3NlZCBwcm90b2NvbDoKKyAqCisgKglTZW5kIHJhdyBTQ1NJIGNvbW1hbmQgdG8gRVAgMHgxCisgKgorICoJSWYgdGhlcmUgaXMgZGF0YSB0byByZWNlaXZlOgorICoJCUlmIHRoZSBjb21tYW5kIHdhcyBSRUFEIGRhdGF0eXBlPWltYWdlOgorICoJCQlSZWFkIGEgbG90IG9mIGRhdGEgZnJvbSBFUCAweDgzCisgKgkJRWxzZToKKyAqCQkJUmVhZCBkYXRhIGZyb20gRVAgMHg4MgorICoJRWxzZToKKyAqCQlJZiB0aGVyZSBpcyBkYXRhIHRvIHRyYW5zbWl0OgorICoJCQlXcml0ZSBpdCB0byBFUCAweDEKKyAqCisgKglSZWFkIHN0YXR1cyBieXRlIGZyb20gRVAgMHg4MgorICoKKyAqIFJlZmVyZW5jZXM6CisgKgorICogVGhlIFNDU0kgY29tbWFuZCBzZXQgZm9yIHRoZSBzY2FubmVyIGlzIGF2YWlsYWJsZSBmcm9tCisgKglmdHA6Ly9mdHAubWljcm90ZWsuY29tL21pY3JvdGVrL2RldnBhY2svCisgKgorICogTWljcm90ZWsgTlYgc2VudCB1cyBhIG1vcmUgdXAgdG8gZGF0ZSB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudC4gSWYKKyAqIHlvdSB3YW50IGl0LCBqdXN0IHNlbmQgbWFpbC4KKyAqCisgKiBTdGF0dXM6CisgKgorICoJVW50ZXN0ZWQgd2l0aCBtdWx0aXBsZSBzY2FubmVycy4KKyAqCVVudGVzdGVkIG9uIFNNUC4KKyAqCVVudGVzdGVkIG9uIGEgYmlnZW5kaWFuIG1hY2hpbmUuCisgKgorICogSGlzdG9yeToKKyAqCisgKgkyMDAwMDQxNyBzdGFydGluZyBoaXN0b3J5CisgKgkyMDAwMDQxNyBmaXhlZCBsb2FkIG9vcHMKKyAqCTIwMDAwNDE3IGZpeGVkIHVubG9hZCBvb3BzCisgKgkyMDAwMDQxOSBmaXhlZCBSRUFEIElNQUdFIGRldGVjdGlvbgorICoJMjAwMDA0MjQgc3RhcnRlZCBjb252ZXJzaW9uIHRvIHVzZSBVUkJzCisgKgkyMDAwMDUwMiBoYW5kbGVkIHNob3J0IHRyYW5zZmVycyBhcyBlcnJvcnMKKyAqCTIwMDAwNTEzIHJlbmFtZSBhbmQgb3JnYW5pc2F0aW9uIG9mIGZ1bmN0aW9ucyAoam9obikKKyAqCTIwMDAwNTEzIGFkZGVkIElEcyBmb3IgYWxsIHByb2R1Y3RzIHN1cHBvcnRlZCBieSBXaW5kb3dzIGRyaXZlciAoam9obikKKyAqCTIwMDAwNTE0IFJld3JvdGUgbXRzX3Njc2lfcXVldWVjb21tYW5kIHRvIHVzZSBVUkJzIChqb2huKQorICoJMjAwMDA1MTQgVmVyc2lvbiAwLjAuOGoKKyAqICAgICAgMjAwMDA1MTQgRml4IHJlcG9ydGluZyBvZiBub24tZXhpc3RhbnQgZGV2aWNlcyB0byBTQ1NJIGxheWVyIChqb2huKQorICoJMjAwMDA1MTQgQWRkZWQgTVRTX0RFQlVHX0lOVCAoam9obikKKyAqCTIwMDAwNTE0IENoYW5nZWQgInVzYi1taWNyb3RlayIgdG8gIm1pY3JvdGVrIiBmb3IgY29uc2lzdGVuY3kgKGpvaG4pCisgKgkyMDAwMDUxNCBTdHVwaWQgYnVnIGZpeGVzIChqb2huKQorICoJMjAwMDA1MTQgVmVyc2lvbiAwLjAuOWoKKyAqCTIwMDAwNTE1IFB1dCB0cmFuc2ZlciBjb250ZXh0IGFuZCBVUkIgaW4gbXRzX2Rlc2MgKGpvaG4pCisgKgkyMDAwMDUxNSBBZGRlZCBwcmVsaW0gdHVybiBvZmYgZGVidWdnaW5nIHN1cHBvcnQgKGpvaG4pCisgKgkyMDAwMDUxNSBWZXJzaW9uIDAuMC4xMGoKKyAqICAgICAgMjAwMDA1MTUgRml4ZWQgdXAgVVJCIGFsbG9jYXRpb24gKGNsZWFyIFVSQiBvbiBhbGxvYykgKGpvaG4pCisgKiAgICAgIDIwMDAwNTE1IFZlcnNpb24gMC4wLjExagorICoJMjAwMDA1MTYgUmVtb3ZlZCB1bm5lY2Vzc2FyeSBzcGlubG9jayBpbiBtdHNfdHJhbnNmZXJfY29udGV4dCAoam9obikKKyAqCTIwMDAwNTE2IFJlbW92ZWQgdW5uZWNlc3NhcnkgdXAgb24gaW5zdGFuY2UgbG9jayBpbiBtdHNfcmVtb3ZlX25vbG9jayAoam9obikKKyAqCTIwMDAwNTE2IEltcGxlbWVudGVkIChiYWRseSkgc2NzaV9hYm9ydCAoam9obikKKyAqCTIwMDAwNTE2IFZlcnNpb24gMC4wLjEyagorICogICAgICAyMDAwMDUxNyBIb3BlZnVsbHkgcmVtb3ZlZCBtdHNfcmVtb3ZlX25vbG9jayBxdWFzaWRlYWRsb2NrIChqb2huKQorICogICAgICAyMDAwMDUxNyBBZGRlZCBtdHNfZGVidWdfZHVtcCB0byBwcmludCBsbCBVU0IgaW5mbyAoam9obikKKyAqCTIwMDAwNTE4IFR3ZWFrcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIChqb2huKQorICoJMjAwMDA1MTggVmVyc2lvbiAwLjAuMTNqCisgKgkyMDAwMDUxOCBDbGVhbmVkIHVwIGFib3J0IGhhbmRsaW5nIChqb2huKQorICoJMjAwMDA1MjMgUmVtb3ZlZCBzY3NpX2NvbW1hbmQgYW5kIHZhcmlvdXMgc2NzaV8uLi5fcmVzZXRzIChqb2huKQorICoJMjAwMDA1MjMgQWRkZWQgdW5saW5rIFVSQiBvbiBzY3NpX2Fib3J0LCBub3cgT0hDSSBzdXBwb3J0cyBpdCAoam9obikKKyAqCTIwMDAwNTIzIEZpeGVkIGxhc3QgdGlyZXNvbWUgY29tcGlsZSB3YXJuaW5nIChqb2huKQorICoJMjAwMDA1MjMgVmVyc2lvbiAwLjAuMTRqICh0aG91Z2ggdmVyc2lvbiAwLjEgaGFzIGNvbWUgb3V0PykKKyAqCTIwMDAwNjAyIEFkZGVkIHByaW1pdGl2ZSByZXNldAorICoJMjAwMDA2MDIgVmVyc2lvbiAwLjIuMAorICoJMjAwMDA2MDMgdmFyaW91cyBjb3NtZXRpYyBjaGFuZ2VzCisgKgkyMDAwMDYwMyBWZXJzaW9uIDAuMi4xCisgKgkyMDAwMDYyMCBtaW5vciBjb3NtZXRpYyBjaGFuZ2VzCisgKgkyMDAwMDYyMCBWZXJzaW9uIDAuMi4yCisgKgkyMDAwMDgyMiBIb3BlZnVsbHkgZml4ZWQgZGVhZGxvY2sgaW4gbXRzX3JlbW92ZV9ub2xvY2soKQorICoJMjAwMDA4MjIgRml4ZWQgbWlub3IgcmFjZSBpbiBtdHNfdHJhbnNmZXJfY2xlYW51cCgpCisgKgkyMDAwMDgyMiBGaXhlZCBkZWFkbG9jayBvbiBzdWJtaXNzaW9uIGVycm9yIGluIHF1ZXVlY29tbWFuZAorICoJMjAwMDA4MjIgVmVyc2lvbiAwLjIuMworICoJMjAwMDA5MTMgUmVkdWNlZCBtb2R1bGUgc2l6ZSBpZiBkZWJ1Z2dpbmcgaXMgb2ZmCisgKgkyMDAwMDkxMyBWZXJzaW9uIDAuMi40CisgKiAgICAgIDIwMDEwMjEwIE5ldyBhYm9ydCBsb2dpYworICogICAgICAyMDAxMDIxMCBWZXJzaW9uIDAuMy4wCisgKgkyMDAxMDIxNyBNZXJnZWQgc2NhdHRlci9nYXRoZXIKKyAqCTIwMDEwMjE4IFZlcnNpb24gMC40LjAKKyAqCTIwMDEwMjE4IENvc21ldGljIGZpeGVzCisgKgkyMDAxMDIxOCBWZXJzaW9uIDAuNC4xCisgKiAgICAgIDIwMDEwMzA2IEFib3J0IHdoaWxlIHVzaW5nIHNjYXR0ZXIvZ2F0aGVyCisgKiAgICAgIDIwMDEwMzA2IFZlcnNpb24gMC40LjIKKyAqICAgICAgMjAwMTAzMTEgUmVtb3ZlIGFsbCB0aW1lb3V0cyBhbmQgdGlkeSB1cCBnZW5lcmFsbHkgKGpvaG4pCisgKgkyMDAxMDMyMCBjaGVjayByZXR1cm4gdmFsdWUgb2Ygc2NzaV9yZWdpc3RlcigpCisgKgkyMDAxMDMyMCBWZXJzaW9uIDAuNC4zCisgKgkyMDAxMDQwOCBJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgorICoJMjAwMTEwMDMgRml4IG11bHRpcGxlIHJlcXVlc3RzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgIi4uLy4uL3Njc2kvc2NzaS5oIgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisKKyNpbmNsdWRlICJtaWNyb3Rlay5oIgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC40LjMiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkpvaG4gRnJlbWxpbiA8dmlpQHBlbmd1aW5wb3dlcmVkLmNvbT4sIE9saXZlciBOZXVrdW0gPE9saXZlci5OZXVrdW1AbHJ6LnVuaS1tdWVuY2hlbi5kZT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJNaWNyb3RlayBTY2FubWFrZXIgWDYgVVNCIHNjYW5uZXIgZHJpdmVyIgorCisvKiBTaG91bGQgd2UgZG8gZGVidWdnaW5nPyAqLworCisvLyNkZWZpbmUgTVRTX0RPX0RFQlVHCisKKy8qIFVTQiBsYXllciBkcml2ZXIgaW50ZXJmYWNlICovCisKK3N0YXRpYyBpbnQgbXRzX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgbXRzX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG10c191c2JfaWRzIFtdOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbXRzX3VzYl9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJIm1pY3JvdGVrWDYiLAorCS5wcm9iZSA9CW10c191c2JfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQltdHNfdXNiX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JbXRzX3VzYl9pZHMsCit9OworCisKKy8qIEludGVybmFsIGRyaXZlciBzdHVmZiAqLworCisjZGVmaW5lIE1UU19WRVJTSU9OCSIwLjQuMyIKKyNkZWZpbmUgTVRTX05BTUUJIm1pY3JvdGVrIHVzYiAocmV2ICIgTVRTX1ZFUlNJT04gIik6ICIKKworI2RlZmluZSBNVFNfV0FSTklORyh4Li4uKSBcCisJcHJpbnRrKCBLRVJOX1dBUk5JTkcgTVRTX05BTUUgeCApCisjZGVmaW5lIE1UU19FUlJPUih4Li4uKSBcCisJcHJpbnRrKCBLRVJOX0VSUiBNVFNfTkFNRSB4ICkKKyNkZWZpbmUgTVRTX0lOVF9FUlJPUih4Li4uKSBcCisJTVRTX0VSUk9SKHgpCisjZGVmaW5lIE1UU19NRVNTQUdFKHguLi4pIFwKKwlwcmludGsoIEtFUk5fSU5GTyBNVFNfTkFNRSB4ICkKKworI2lmIGRlZmluZWQgTVRTX0RPX0RFQlVHCisKKyNkZWZpbmUgTVRTX0RFQlVHKHguLi4pIFwKKwlwcmludGsoIEtFUk5fREVCVUcgTVRTX05BTUUgeCApCisKKyNkZWZpbmUgTVRTX0RFQlVHX0dPVF9IRVJFKCkgXAorCU1UU19ERUJVRygiZ290IHRvICVzOiVkICglcylcbiIsIF9fRklMRV9fLCAoaW50KV9fTElORV9fLCBfX1BSRVRUWV9GVU5DVElPTl9fICkKKyNkZWZpbmUgTVRTX0RFQlVHX0lOVCgpIFwKKwlkbyB7IE1UU19ERUJVR19HT1RfSEVSRSgpOyBcCisJICAgICBNVFNfREVCVUcoInRyYW5zZmVyID0gMHgleCBjb250ZXh0ID0gMHgleFxuIiwoaW50KXRyYW5zZmVyLChpbnQpY29udGV4dCApOyBcCisJICAgICBNVFNfREVCVUcoInN0YXR1cyA9IDB4JXggZGF0YS1sZW5ndGggPSAweCV4IHNlbnQgPSAweCV4XG4iLChpbnQpdHJhbnNmZXItPnN0YXR1cywoaW50KWNvbnRleHQtPmRhdGFfbGVuZ3RoLCAoaW50KXRyYW5zZmVyLT5hY3R1YWxfbGVuZ3RoICk7IFwKKyAgICAgICAgICAgICBtdHNfZGVidWdfZHVtcChjb250ZXh0LT5pbnN0YW5jZSk7XAorCSAgIH0gd2hpbGUoMCkKKyNlbHNlCisKKyNkZWZpbmUgTVRTX05VTF9TVEFURU1FTlQgZG8geyB9IHdoaWxlKDApCisKKyNkZWZpbmUgTVRTX0RFQlVHKHguLi4pCU1UU19OVUxfU1RBVEVNRU5UCisjZGVmaW5lIE1UU19ERUJVR19HT1RfSEVSRSgpIE1UU19OVUxfU1RBVEVNRU5UCisjZGVmaW5lIE1UU19ERUJVR19JTlQoKSBNVFNfTlVMX1NUQVRFTUVOVAorCisjZW5kaWYKKworCisKKyNkZWZpbmUgTVRTX0lOVF9JTklUKClcCisJc3RydWN0IG10c190cmFuc2Zlcl9jb250ZXh0KiBjb250ZXh0ID0gKHN0cnVjdCBtdHNfdHJhbnNmZXJfY29udGV4dCopdHJhbnNmZXItPmNvbnRleHQ7IFwKKwlNVFNfREVCVUdfSU5UKCk7XAorCisjaWZkZWYgTVRTX0RPX0RFQlVHCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdHNfZGVidWdfZHVtcChzdHJ1Y3QgbXRzX2Rlc2MqIGRlc2MpIHsKKwlNVFNfREVCVUcoImRlc2MgYXQgMHgleDogdG9nZ2xlID0gJTAyeCUwMnhcbiIsCisJCSAgKGludClkZXNjLAorCQkgIChpbnQpZGVzYy0+dXNiX2Rldi0+dG9nZ2xlWzFdLChpbnQpZGVzYy0+dXNiX2Rldi0+dG9nZ2xlWzBdCisJCSk7CisJTVRTX0RFQlVHKCJlcF9vdXQ9JXggZXBfcmVzcG9uc2U9JXggZXBfaW1hZ2U9JXhcbiIsCisJCSAgdXNiX3NuZGJ1bGtwaXBlKGRlc2MtPnVzYl9kZXYsZGVzYy0+ZXBfb3V0KSwKKwkJICB1c2JfcmN2YnVsa3BpcGUoZGVzYy0+dXNiX2RldixkZXNjLT5lcF9yZXNwb25zZSksCisJCSAgdXNiX3JjdmJ1bGtwaXBlKGRlc2MtPnVzYl9kZXYsZGVzYy0+ZXBfaW1hZ2UpCisJCSk7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIG10c19zaG93X2NvbW1hbmQoU2NzaV9DbW5kICpzcmIpCit7CisJY2hhciAqd2hhdCA9IE5VTEw7CisKKwlzd2l0Y2ggKHNyYi0+Y21uZFswXSkgeworCWNhc2UgVEVTVF9VTklUX1JFQURZOiB3aGF0ID0gIlRFU1RfVU5JVF9SRUFEWSI7IGJyZWFrOworCWNhc2UgUkVaRVJPX1VOSVQ6IHdoYXQgPSAiUkVaRVJPX1VOSVQiOyBicmVhazsKKwljYXNlIFJFUVVFU1RfU0VOU0U6IHdoYXQgPSAiUkVRVUVTVF9TRU5TRSI7IGJyZWFrOworCWNhc2UgRk9STUFUX1VOSVQ6IHdoYXQgPSAiRk9STUFUX1VOSVQiOyBicmVhazsKKwljYXNlIFJFQURfQkxPQ0tfTElNSVRTOiB3aGF0ID0gIlJFQURfQkxPQ0tfTElNSVRTIjsgYnJlYWs7CisJY2FzZSBSRUFTU0lHTl9CTE9DS1M6IHdoYXQgPSAiUkVBU1NJR05fQkxPQ0tTIjsgYnJlYWs7CisJY2FzZSBSRUFEXzY6IHdoYXQgPSAiUkVBRF82IjsgYnJlYWs7CisJY2FzZSBXUklURV82OiB3aGF0ID0gIldSSVRFXzYiOyBicmVhazsKKwljYXNlIFNFRUtfNjogd2hhdCA9ICJTRUVLXzYiOyBicmVhazsKKwljYXNlIFJFQURfUkVWRVJTRTogd2hhdCA9ICJSRUFEX1JFVkVSU0UiOyBicmVhazsKKwljYXNlIFdSSVRFX0ZJTEVNQVJLUzogd2hhdCA9ICJXUklURV9GSUxFTUFSS1MiOyBicmVhazsKKwljYXNlIFNQQUNFOiB3aGF0ID0gIlNQQUNFIjsgYnJlYWs7CisJY2FzZSBJTlFVSVJZOiB3aGF0ID0gIklOUVVJUlkiOyBicmVhazsKKwljYXNlIFJFQ09WRVJfQlVGRkVSRURfREFUQTogd2hhdCA9ICJSRUNPVkVSX0JVRkZFUkVEX0RBVEEiOyBicmVhazsKKwljYXNlIE1PREVfU0VMRUNUOiB3aGF0ID0gIk1PREVfU0VMRUNUIjsgYnJlYWs7CisJY2FzZSBSRVNFUlZFOiB3aGF0ID0gIlJFU0VSVkUiOyBicmVhazsKKwljYXNlIFJFTEVBU0U6IHdoYXQgPSAiUkVMRUFTRSI7IGJyZWFrOworCWNhc2UgQ09QWTogd2hhdCA9ICJDT1BZIjsgYnJlYWs7CisJY2FzZSBFUkFTRTogd2hhdCA9ICJFUkFTRSI7IGJyZWFrOworCWNhc2UgTU9ERV9TRU5TRTogd2hhdCA9ICJNT0RFX1NFTlNFIjsgYnJlYWs7CisJY2FzZSBTVEFSVF9TVE9QOiB3aGF0ID0gIlNUQVJUX1NUT1AiOyBicmVhazsKKwljYXNlIFJFQ0VJVkVfRElBR05PU1RJQzogd2hhdCA9ICJSRUNFSVZFX0RJQUdOT1NUSUMiOyBicmVhazsKKwljYXNlIFNFTkRfRElBR05PU1RJQzogd2hhdCA9ICJTRU5EX0RJQUdOT1NUSUMiOyBicmVhazsKKwljYXNlIEFMTE9XX01FRElVTV9SRU1PVkFMOiB3aGF0ID0gIkFMTE9XX01FRElVTV9SRU1PVkFMIjsgYnJlYWs7CisJY2FzZSBTRVRfV0lORE9XOiB3aGF0ID0gIlNFVF9XSU5ET1ciOyBicmVhazsKKwljYXNlIFJFQURfQ0FQQUNJVFk6IHdoYXQgPSAiUkVBRF9DQVBBQ0lUWSI7IGJyZWFrOworCWNhc2UgUkVBRF8xMDogd2hhdCA9ICJSRUFEXzEwIjsgYnJlYWs7CisJY2FzZSBXUklURV8xMDogd2hhdCA9ICJXUklURV8xMCI7IGJyZWFrOworCWNhc2UgU0VFS18xMDogd2hhdCA9ICJTRUVLXzEwIjsgYnJlYWs7CisJY2FzZSBXUklURV9WRVJJRlk6IHdoYXQgPSAiV1JJVEVfVkVSSUZZIjsgYnJlYWs7CisJY2FzZSBWRVJJRlk6IHdoYXQgPSAiVkVSSUZZIjsgYnJlYWs7CisJY2FzZSBTRUFSQ0hfSElHSDogd2hhdCA9ICJTRUFSQ0hfSElHSCI7IGJyZWFrOworCWNhc2UgU0VBUkNIX0VRVUFMOiB3aGF0ID0gIlNFQVJDSF9FUVVBTCI7IGJyZWFrOworCWNhc2UgU0VBUkNIX0xPVzogd2hhdCA9ICJTRUFSQ0hfTE9XIjsgYnJlYWs7CisJY2FzZSBTRVRfTElNSVRTOiB3aGF0ID0gIlNFVF9MSU1JVFMiOyBicmVhazsKKwljYXNlIFJFQURfUE9TSVRJT046IHdoYXQgPSAiUkVBRF9QT1NJVElPTiI7IGJyZWFrOworCWNhc2UgU1lOQ0hST05JWkVfQ0FDSEU6IHdoYXQgPSAiU1lOQ0hST05JWkVfQ0FDSEUiOyBicmVhazsKKwljYXNlIExPQ0tfVU5MT0NLX0NBQ0hFOiB3aGF0ID0gIkxPQ0tfVU5MT0NLX0NBQ0hFIjsgYnJlYWs7CisJY2FzZSBSRUFEX0RFRkVDVF9EQVRBOiB3aGF0ID0gIlJFQURfREVGRUNUX0RBVEEiOyBicmVhazsKKwljYXNlIE1FRElVTV9TQ0FOOiB3aGF0ID0gIk1FRElVTV9TQ0FOIjsgYnJlYWs7CisJY2FzZSBDT01QQVJFOiB3aGF0ID0gIkNPTVBBUkUiOyBicmVhazsKKwljYXNlIENPUFlfVkVSSUZZOiB3aGF0ID0gIkNPUFlfVkVSSUZZIjsgYnJlYWs7CisJY2FzZSBXUklURV9CVUZGRVI6IHdoYXQgPSAiV1JJVEVfQlVGRkVSIjsgYnJlYWs7CisJY2FzZSBSRUFEX0JVRkZFUjogd2hhdCA9ICJSRUFEX0JVRkZFUiI7IGJyZWFrOworCWNhc2UgVVBEQVRFX0JMT0NLOiB3aGF0ID0gIlVQREFURV9CTE9DSyI7IGJyZWFrOworCWNhc2UgUkVBRF9MT05HOiB3aGF0ID0gIlJFQURfTE9ORyI7IGJyZWFrOworCWNhc2UgV1JJVEVfTE9ORzogd2hhdCA9ICJXUklURV9MT05HIjsgYnJlYWs7CisJY2FzZSBDSEFOR0VfREVGSU5JVElPTjogd2hhdCA9ICJDSEFOR0VfREVGSU5JVElPTiI7IGJyZWFrOworCWNhc2UgV1JJVEVfU0FNRTogd2hhdCA9ICJXUklURV9TQU1FIjsgYnJlYWs7CisJY2FzZSBSRUFEX1RPQzogd2hhdCA9ICJSRUFEX1RPQyI7IGJyZWFrOworCWNhc2UgTE9HX1NFTEVDVDogd2hhdCA9ICJMT0dfU0VMRUNUIjsgYnJlYWs7CisJY2FzZSBMT0dfU0VOU0U6IHdoYXQgPSAiTE9HX1NFTlNFIjsgYnJlYWs7CisJY2FzZSBNT0RFX1NFTEVDVF8xMDogd2hhdCA9ICJNT0RFX1NFTEVDVF8xMCI7IGJyZWFrOworCWNhc2UgTU9ERV9TRU5TRV8xMDogd2hhdCA9ICJNT0RFX1NFTlNFXzEwIjsgYnJlYWs7CisJY2FzZSBNT1ZFX01FRElVTTogd2hhdCA9ICJNT1ZFX01FRElVTSI7IGJyZWFrOworCWNhc2UgUkVBRF8xMjogd2hhdCA9ICJSRUFEXzEyIjsgYnJlYWs7CisJY2FzZSBXUklURV8xMjogd2hhdCA9ICJXUklURV8xMiI7IGJyZWFrOworCWNhc2UgV1JJVEVfVkVSSUZZXzEyOiB3aGF0ID0gIldSSVRFX1ZFUklGWV8xMiI7IGJyZWFrOworCWNhc2UgU0VBUkNIX0hJR0hfMTI6IHdoYXQgPSAiU0VBUkNIX0hJR0hfMTIiOyBicmVhazsKKwljYXNlIFNFQVJDSF9FUVVBTF8xMjogd2hhdCA9ICJTRUFSQ0hfRVFVQUxfMTIiOyBicmVhazsKKwljYXNlIFNFQVJDSF9MT1dfMTI6IHdoYXQgPSAiU0VBUkNIX0xPV18xMiI7IGJyZWFrOworCWNhc2UgUkVBRF9FTEVNRU5UX1NUQVRVUzogd2hhdCA9ICJSRUFEX0VMRU1FTlRfU1RBVFVTIjsgYnJlYWs7CisJY2FzZSBTRU5EX1ZPTFVNRV9UQUc6IHdoYXQgPSAiU0VORF9WT0xVTUVfVEFHIjsgYnJlYWs7CisJY2FzZSBXUklURV9MT05HXzI6IHdoYXQgPSAiV1JJVEVfTE9OR18yIjsgYnJlYWs7CisJZGVmYXVsdDoKKwkJTVRTX0RFQlVHKCJjYW4ndCBkZWNvZGUgY29tbWFuZFxuIik7CisJCWdvdG8gb3V0OworCQlicmVhazsKKwl9CisJTVRTX0RFQlVHKCAiQ29tbWFuZCAlcyAoJWQgYnl0ZXMpXG4iLCB3aGF0LCBzcmItPmNtZF9sZW4pOworCisgb3V0OgorCU1UU19ERUJVRyggIiAgJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkgICAgICAgc3JiLT5jbW5kWzBdLCBzcmItPmNtbmRbMV0sIHNyYi0+Y21uZFsyXSwgc3JiLT5jbW5kWzNdLCBzcmItPmNtbmRbNF0sIHNyYi0+Y21uZFs1XSwKKwkgICAgICAgc3JiLT5jbW5kWzZdLCBzcmItPmNtbmRbN10sIHNyYi0+Y21uZFs4XSwgc3JiLT5jbW5kWzldKTsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIG10c19zaG93X2NvbW1hbmQoU2NzaV9DbW5kICogZHVtbXkpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdHNfZGVidWdfZHVtcChzdHJ1Y3QgbXRzX2Rlc2MqIGR1bW15KQoreworfQorCisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIG10c191cmJfYWJvcnQoc3RydWN0IG10c19kZXNjKiBkZXNjKSB7CisJTVRTX0RFQlVHX0dPVF9IRVJFKCk7CisJbXRzX2RlYnVnX2R1bXAoZGVzYyk7CisKKwl1c2Jfa2lsbF91cmIoIGRlc2MtPnVyYiApOworfQorCitzdGF0aWMgaW50IG10c19zY3NpX2Fib3J0IChTY3NpX0NtbmQgKnNyYikKK3sKKwlzdHJ1Y3QgbXRzX2Rlc2MqIGRlc2MgPSAoc3RydWN0IG10c19kZXNjKikoc3JiLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdKTsKKworCU1UU19ERUJVR19HT1RfSEVSRSgpOworCisJbXRzX3VyYl9hYm9ydChkZXNjKTsKKworCXJldHVybiBTQ1NJX0FCT1JUX1BFTkRJTkc7Cit9CisKK3N0YXRpYyBpbnQgbXRzX3Njc2lfaG9zdF9yZXNldCAoU2NzaV9DbW5kICpzcmIpCit7CisJc3RydWN0IG10c19kZXNjKiBkZXNjID0gKHN0cnVjdCBtdHNfZGVzYyopKHNyYi0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXSk7CisJaW50IHJlc3VsdCwgcmM7CisKKwlNVFNfREVCVUdfR09UX0hFUkUoKTsKKwltdHNfZGVidWdfZHVtcChkZXNjKTsKKworCXJjID0gdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldChkZXNjLT51c2JfZGV2LCBkZXNjLT51c2JfaW50Zik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIEZBSUxFRDsKKwlyZXN1bHQgPSB1c2JfcmVzZXRfZGV2aWNlKGRlc2MtPnVzYl9kZXYpOzsKKwlpZiAocmMpCisJCXVzYl91bmxvY2tfZGV2aWNlKGRlc2MtPnVzYl9kZXYpOworCXJldHVybiByZXN1bHQgPyBGQUlMRUQgOiBTVUNDRVNTOworfQorCitzdGF0aWMKK2ludCBtdHNfc2NzaV9xdWV1ZWNvbW1hbmQgKFNjc2lfQ21uZCAqc3JiLCBtdHNfc2NzaV9jbW5kX2NhbGxiYWNrIGNhbGxiYWNrICk7CisKK3N0YXRpYyB2b2lkIG10c190cmFuc2Zlcl9jbGVhbnVwKCBzdHJ1Y3QgdXJiICp0cmFuc2ZlciApOworc3RhdGljIHZvaWQgbXRzX2RvX3NnKHN0cnVjdCB1cmIgKiB0cmFuc2Zlciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisKK2lubGluZSBzdGF0aWMKK3ZvaWQgbXRzX2ludF9zdWJtaXRfdXJiIChzdHJ1Y3QgdXJiKiB0cmFuc2ZlciwKKwkJCWludCBwaXBlLAorCQkJdm9pZCogZGF0YSwKKwkJCXVuc2lnbmVkIGxlbmd0aCwKKwkJCXVzYl9jb21wbGV0ZV90IGNhbGxiYWNrICkKKy8qIEludGVycnVwdCBjb250ZXh0ISAqLworCisvKiBIb2xkaW5nIHRyYW5zZmVyLT5jb250ZXh0LT5sb2NrISAqLworeworCWludCByZXM7CisKKwlNVFNfSU5UX0lOSVQoKTsKKworCXVzYl9maWxsX2J1bGtfdXJiKHRyYW5zZmVyLAorCQkgICAgICBjb250ZXh0LT5pbnN0YW5jZS0+dXNiX2RldiwKKwkJICAgICAgcGlwZSwKKwkJICAgICAgZGF0YSwKKwkJICAgICAgbGVuZ3RoLAorCQkgICAgICBjYWxsYmFjaywKKwkJICAgICAgY29udGV4dAorCQkpOworCisJdHJhbnNmZXItPnN0YXR1cyA9IDA7CisKKwlyZXMgPSB1c2Jfc3VibWl0X3VyYiggdHJhbnNmZXIsIEdGUF9BVE9NSUMgKTsKKwlpZiAoIHVubGlrZWx5KHJlcykgKSB7CisJCU1UU19JTlRfRVJST1IoICJjb3VsZCBub3Qgc3VibWl0IFVSQiEgRXJyb3Igd2FzICVkXG4iLChpbnQpcmVzICk7CisJCWNvbnRleHQtPnNyYi0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCQltdHNfdHJhbnNmZXJfY2xlYW51cCh0cmFuc2Zlcik7CisJfQorCXJldHVybjsKK30KKworCitzdGF0aWMgdm9pZCBtdHNfdHJhbnNmZXJfY2xlYW51cCggc3RydWN0IHVyYiAqdHJhbnNmZXIgKQorLyogSW50ZXJydXB0IGNvbnRleHQhICovCit7CisJTVRTX0lOVF9JTklUKCk7CisKKwlpZiAoIGxpa2VseShjb250ZXh0LT5maW5hbF9jYWxsYmFjayAhPSBOVUxMKSApCisJCWNvbnRleHQtPmZpbmFsX2NhbGxiYWNrKGNvbnRleHQtPnNyYik7CisKK30KKworc3RhdGljIHZvaWQgbXRzX3RyYW5zZmVyX2RvbmUoIHN0cnVjdCB1cmIgKnRyYW5zZmVyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyApCit7CisJTVRTX0lOVF9JTklUKCk7CisKKwljb250ZXh0LT5zcmItPnJlc3VsdCAmPSBNVFNfU0NTSV9FUlJfTUFTSzsKKwljb250ZXh0LT5zcmItPnJlc3VsdCB8PSAodW5zaWduZWQpY29udGV4dC0+c3RhdHVzPDwxOworCisJbXRzX3RyYW5zZmVyX2NsZWFudXAodHJhbnNmZXIpOworCisJcmV0dXJuOworfQorCisKK3N0YXRpYyB2b2lkIG10c19nZXRfc3RhdHVzKCBzdHJ1Y3QgdXJiICp0cmFuc2ZlciApCisvKiBJbnRlcnJ1cHQgY29udGV4dCEgKi8KK3sKKwlNVFNfSU5UX0lOSVQoKTsKKworCW10c19pbnRfc3VibWl0X3VyYih0cmFuc2ZlciwKKwkJCSAgIHVzYl9yY3ZidWxrcGlwZShjb250ZXh0LT5pbnN0YW5jZS0+dXNiX2RldiwKKwkJCQkJICAgY29udGV4dC0+aW5zdGFuY2UtPmVwX3Jlc3BvbnNlKSwKKwkJCSAgICZjb250ZXh0LT5zdGF0dXMsCisJCQkgICAxLAorCQkJICAgbXRzX3RyYW5zZmVyX2RvbmUgKTsKK30KKworc3RhdGljIHZvaWQgbXRzX2RhdGFfZG9uZSggc3RydWN0IHVyYiogdHJhbnNmZXIsIHN0cnVjdCBwdF9yZWdzICpyZWdzICkKKy8qIEludGVycnVwdCBjb250ZXh0ISAqLworeworCU1UU19JTlRfSU5JVCgpOworCisJaWYgKCBjb250ZXh0LT5kYXRhX2xlbmd0aCAhPSB0cmFuc2Zlci0+YWN0dWFsX2xlbmd0aCApIHsKKwkJY29udGV4dC0+c3JiLT5yZXNpZCA9IGNvbnRleHQtPmRhdGFfbGVuZ3RoIC0gdHJhbnNmZXItPmFjdHVhbF9sZW5ndGg7CisJfSBlbHNlIGlmICggdW5saWtlbHkodHJhbnNmZXItPnN0YXR1cykgKSB7CisJCWNvbnRleHQtPnNyYi0+cmVzdWx0ID0gKHRyYW5zZmVyLT5zdGF0dXMgPT0gLUVOT0VOVCA/IERJRF9BQk9SVCA6IERJRF9FUlJPUik8PDE2OworCX0KKworCW10c19nZXRfc3RhdHVzKHRyYW5zZmVyKTsKKworCXJldHVybjsKK30KKworCitzdGF0aWMgdm9pZCBtdHNfY29tbWFuZF9kb25lKCBzdHJ1Y3QgdXJiICp0cmFuc2Zlciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MgKQorLyogSW50ZXJydXB0IGNvbnRleHQhICovCit7CisJTVRTX0lOVF9JTklUKCk7CisKKwlpZiAoIHVubGlrZWx5KHRyYW5zZmVyLT5zdGF0dXMpICkgeworCSAgICAgICAgaWYgKHRyYW5zZmVyLT5zdGF0dXMgPT0gLUVOT0VOVCkgeworCQkgICAgICAgIC8qIFdlIGFyZSBiZWluZyBraWxsZWQgKi8KKwkJCU1UU19ERUJVR19HT1RfSEVSRSgpOworCQkJY29udGV4dC0+c3JiLT5yZXN1bHQgPSBESURfQUJPUlQ8PDE2OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisJCSAgICAgICAgLyogQSBnZW51aW5lIGVycm9yIGhhcyBvY2N1cnJlZCAqLworCQkJTVRTX0RFQlVHX0dPVF9IRVJFKCk7CisKKwkJICAgICAgICBjb250ZXh0LT5zcmItPnJlc3VsdCA9IERJRF9FUlJPUjw8MTY7CisgICAgICAgICAgICAgICAgfQorCQltdHNfdHJhbnNmZXJfY2xlYW51cCh0cmFuc2Zlcik7CisKKwkJcmV0dXJuOworCX0KKworCWlmIChjb250ZXh0LT5zcmItPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSkgeworCQltdHNfaW50X3N1Ym1pdF91cmIodHJhbnNmZXIsCisJCQkJICAgY29udGV4dC0+ZGF0YV9waXBlLAorCQkJCSAgIGNvbnRleHQtPnNyYi0+c2Vuc2VfYnVmZmVyLAorCQkJCSAgIGNvbnRleHQtPmRhdGFfbGVuZ3RoLAorCQkJCSAgIG10c19kYXRhX2RvbmUpOworCX0gZWxzZSB7IGlmICggY29udGV4dC0+ZGF0YSApIHsKKwkJCW10c19pbnRfc3VibWl0X3VyYih0cmFuc2ZlciwKKwkJCQkJICAgY29udGV4dC0+ZGF0YV9waXBlLAorCQkJCQkgICBjb250ZXh0LT5kYXRhLAorCQkJCQkgICBjb250ZXh0LT5kYXRhX2xlbmd0aCwKKwkJCQkJICAgY29udGV4dC0+c3JiLT51c2Vfc2cgPyBtdHNfZG9fc2cgOiBtdHNfZGF0YV9kb25lKTsKKwkJfSBlbHNlIHsKKwkJCW10c19nZXRfc3RhdHVzKHRyYW5zZmVyKTsKKwkJfQorCX0KKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgbXRzX2RvX3NnIChzdHJ1Y3QgdXJiKiB0cmFuc2Zlciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICogc2c7CisJTVRTX0lOVF9JTklUKCk7CisKKwlNVFNfREVCVUcoIlByb2Nlc3NpbmcgZnJhZ21lbnQgJWQgb2YgJWRcbiIsIGNvbnRleHQtPmZyYWdtZW50LGNvbnRleHQtPnNyYi0+dXNlX3NnKTsKKworCWlmICh1bmxpa2VseSh0cmFuc2Zlci0+c3RhdHVzKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNyYi0+cmVzdWx0ID0gKHRyYW5zZmVyLT5zdGF0dXMgPT0gLUVOT0VOVCA/IERJRF9BQk9SVCA6IERJRF9FUlJPUik8PDE2OworCQltdHNfdHJhbnNmZXJfY2xlYW51cCh0cmFuc2Zlcik7CisgICAgICAgIH0KKworCXNnID0gY29udGV4dC0+c3JiLT5idWZmZXI7CisJY29udGV4dC0+ZnJhZ21lbnQrKzsKKwltdHNfaW50X3N1Ym1pdF91cmIodHJhbnNmZXIsCisJCQkgICBjb250ZXh0LT5kYXRhX3BpcGUsCisJCQkgICBwYWdlX2FkZHJlc3Moc2dbY29udGV4dC0+ZnJhZ21lbnRdLnBhZ2UpICsKKwkJCSAgIHNnW2NvbnRleHQtPmZyYWdtZW50XS5vZmZzZXQsCisJCQkgICBzZ1tjb250ZXh0LT5mcmFnbWVudF0ubGVuZ3RoLAorCQkJICAgY29udGV4dC0+ZnJhZ21lbnQgKyAxID09IGNvbnRleHQtPnNyYi0+dXNlX3NnID8gbXRzX2RhdGFfZG9uZSA6IG10c19kb19zZyk7CisJcmV0dXJuOworfQorCitzdGF0aWMgY29uc3QgdTggbXRzX3JlYWRfaW1hZ2Vfc2lnW10gPSB7IDB4MjgsIDAwLCAwMCwgMDAgfTsKK3N0YXRpYyBjb25zdCB1OCBtdHNfcmVhZF9pbWFnZV9zaWdfbGVuID0gNDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG10c19kaXJlY3Rpb25bMjU2LzhdID0geworCTB4MjgsIDB4ODEsIDB4MTQsIDB4MTQsIDB4MjAsIDB4MDEsIDB4OTAsIDB4NzcsCisJMHgwQywgMHgyMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAxLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKK307CisKKworI2RlZmluZSBNVFNfRElSRUNUSU9OX0lTX0lOKHgpICgobXRzX2RpcmVjdGlvblt4Pj4zXSA+PiAoeCAmIDcpKSAmIDEpCisKK3N0YXRpYyB2b2lkCittdHNfYnVpbGRfdHJhbnNmZXJfY29udGV4dCggU2NzaV9DbW5kICpzcmIsIHN0cnVjdCBtdHNfZGVzYyogZGVzYyApCit7CisJaW50IHBpcGU7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICogc2c7CisJCisJTVRTX0RFQlVHX0dPVF9IRVJFKCk7CisKKwlkZXNjLT5jb250ZXh0Lmluc3RhbmNlID0gZGVzYzsKKwlkZXNjLT5jb250ZXh0LnNyYiA9IHNyYjsKKwlkZXNjLT5jb250ZXh0LmZyYWdtZW50ID0gMDsKKworCWlmICghc3JiLT51c2Vfc2cpIHsKKwkJaWYgKCAhc3JiLT5idWZmbGVuICl7CisJCQlkZXNjLT5jb250ZXh0LmRhdGEgPSBOVUxMOworCQkJZGVzYy0+Y29udGV4dC5kYXRhX2xlbmd0aCA9IDA7CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CisJCQlkZXNjLT5jb250ZXh0LmRhdGEgPSBzcmItPmJ1ZmZlcjsKKwkJCWRlc2MtPmNvbnRleHQuZGF0YV9sZW5ndGggPSBzcmItPmJ1ZmZsZW47CisJCQlNVFNfREVCVUcoImxlbmd0aCA9ICVkIG9yICVkXG4iLAorCQkJCSAgc3JiLT5yZXF1ZXN0X2J1ZmZsZW4sIHNyYi0+YnVmZmxlbik7CisJCX0KKwl9IGVsc2UgeworCQlNVFNfREVCVUcoIlVzaW5nIHNjYXR0ZXIvZ2F0aGVyXG4iKTsKKwkJc2cgPSBzcmItPmJ1ZmZlcjsKKwkJZGVzYy0+Y29udGV4dC5kYXRhID0gcGFnZV9hZGRyZXNzKHNnWzBdLnBhZ2UpICsgc2dbMF0ub2Zmc2V0OworCQlkZXNjLT5jb250ZXh0LmRhdGFfbGVuZ3RoID0gc2dbMF0ubGVuZ3RoOworCX0KKworCisJLyogY2FuJ3QgcmVseSBvbiBzcmItPnNjX2RhdGFfZGlyZWN0aW9uICovCisKKwkvKiBCcnV0YWxseSByaXBwZWQgZnJvbSB1c2Itc3RvcmFnZSAqLworCisJaWYgKCAhbWVtY21wKCBzcmItPmNtbmQsIG10c19yZWFkX2ltYWdlX3NpZywgbXRzX3JlYWRfaW1hZ2Vfc2lnX2xlbiApCispIHsgCQlwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKGRlc2MtPnVzYl9kZXYsZGVzYy0+ZXBfaW1hZ2UpOworCQlNVFNfREVCVUcoICJ0cmFuc2ZlcmluZyBmcm9tIGRlc2MtPmVwX2ltYWdlID09ICVkXG4iLAorCQkJICAgKGludClkZXNjLT5lcF9pbWFnZSApOworCX0gZWxzZSBpZiAoIE1UU19ESVJFQ1RJT05fSVNfSU4oc3JiLT5jbW5kWzBdKSApIHsKKwkJCXBpcGUgPSB1c2JfcmN2YnVsa3BpcGUoZGVzYy0+dXNiX2RldixkZXNjLT5lcF9yZXNwb25zZSk7CisJCQlNVFNfREVCVUcoICJ0cmFuc2ZlcmluZyBmcm9tIGRlc2MtPmVwX3Jlc3BvbnNlID09ICVkXG4iLAorCQkJCSAgIChpbnQpZGVzYy0+ZXBfcmVzcG9uc2UpOworCX0gZWxzZSB7CisJCU1UU19ERUJVRygidHJhbnNmZXJpbmcgdG8gZGVzYy0+ZXBfb3V0ID09ICVkXG4iLAorCQkJICAoaW50KWRlc2MtPmVwX291dCk7CisJCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUoZGVzYy0+dXNiX2RldixkZXNjLT5lcF9vdXQpOworCX0KKwlkZXNjLT5jb250ZXh0LmRhdGFfcGlwZSA9IHBpcGU7Cit9CisKKworc3RhdGljCitpbnQgbXRzX3Njc2lfcXVldWVjb21tYW5kKCBTY3NpX0NtbmQgKnNyYiwgbXRzX3Njc2lfY21uZF9jYWxsYmFjayBjYWxsYmFjayApCit7CisJc3RydWN0IG10c19kZXNjKiBkZXNjID0gKHN0cnVjdCBtdHNfZGVzYyopKHNyYi0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXSk7CisJaW50IGVyciA9IDA7CisJaW50IHJlczsKKworCU1UU19ERUJVR19HT1RfSEVSRSgpOworCW10c19zaG93X2NvbW1hbmQoc3JiKTsKKwltdHNfZGVidWdfZHVtcChkZXNjKTsKKworCWlmICggc3JiLT5kZXZpY2UtPmx1biB8fCBzcmItPmRldmljZS0+aWQgfHwgc3JiLT5kZXZpY2UtPmNoYW5uZWwgKSB7CisKKwkJTVRTX0RFQlVHKCJDb21tYW5kIHRvIExVTj0lZCBJRD0lZCBDSEFOTkVMPSVkIGZyb20gU0NTSSBsYXllclxuIiwoaW50KXNyYi0+ZGV2aWNlLT5sdW4sKGludClzcmItPmRldmljZS0+aWQsIChpbnQpc3JiLT5kZXZpY2UtPmNoYW5uZWwgKTsKKworCQlNVFNfREVCVUcoInRoaXMgZGV2aWNlIGRvZXNuJ3QgZXhpc3RcbiIpOworCisJCXNyYi0+cmVzdWx0ID0gRElEX0JBRF9UQVJHRVQgPDwgMTY7CisKKwkJaWYobGlrZWx5KGNhbGxiYWNrICE9IE5VTEwpKQorCQkJY2FsbGJhY2soc3JiKTsKKworCQlnb3RvIG91dDsKKwl9CisKKwkKKwl1c2JfZmlsbF9idWxrX3VyYihkZXNjLT51cmIsCisJCSAgICAgIGRlc2MtPnVzYl9kZXYsCisJCSAgICAgIHVzYl9zbmRidWxrcGlwZShkZXNjLT51c2JfZGV2LGRlc2MtPmVwX291dCksCisJCSAgICAgIHNyYi0+Y21uZCwKKwkJICAgICAgc3JiLT5jbWRfbGVuLAorCQkgICAgICBtdHNfY29tbWFuZF9kb25lLAorCQkgICAgICAmZGVzYy0+Y29udGV4dAorCQkgICAgICApOworCisKKwltdHNfYnVpbGRfdHJhbnNmZXJfY29udGV4dCggc3JiLCBkZXNjICk7CisJZGVzYy0+Y29udGV4dC5maW5hbF9jYWxsYmFjayA9IGNhbGxiYWNrOworCQorCS8qIGhlcmUgd2UgbmVlZCBBVE9NSUMgYXMgd2UgYXJlIGNhbGxlZCB3aXRoIHRoZSBpb2xvY2sgKi8KKwlyZXM9dXNiX3N1Ym1pdF91cmIoZGVzYy0+dXJiLCBHRlBfQVRPTUlDKTsKKworCWlmKHVubGlrZWx5KHJlcykpeworCQlNVFNfRVJST1IoImVycm9yICVkIHN1Ym1pdHRpbmcgVVJCXG4iLChpbnQpcmVzKTsKKwkJc3JiLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CisKKwkJaWYobGlrZWx5KGNhbGxiYWNrICE9IE5VTEwpKQorCQkJY2FsbGJhY2soc3JiKTsKKworCX0KKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBTY3NpX0hvc3RfVGVtcGxhdGUgbXRzX3Njc2lfaG9zdF90ZW1wbGF0ZSA9IHsKKwkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJCT0gIm1pY3JvdGVrWDYiLAorCS5wcm9jX25hbWUJCT0gIm1pY3JvdGVrWDYiLAorCS5xdWV1ZWNvbW1hbmQJCT0gbXRzX3Njc2lfcXVldWVjb21tYW5kLAorCS5laF9hYm9ydF9oYW5kbGVyCT0gbXRzX3Njc2lfYWJvcnQsCisJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgk9IG10c19zY3NpX2hvc3RfcmVzZXQsCisJLnNnX3RhYmxlc2l6ZSA9CQlTR19BTEwsCisJLmNhbl9xdWV1ZSA9CQkxLAorCS50aGlzX2lkID0JCS0xLAorCS5jbWRfcGVyX2x1biA9CQkxLAorCS51c2VfY2x1c3RlcmluZyA9CTEsCisJLmVtdWxhdGVkID0JCTEsCit9OworCitzdHJ1Y3QgdmVuZG9yX3Byb2R1Y3QKK3sKKwljaGFyKiBuYW1lOworCWVudW0KKwl7CisJCW10c19zdXBfdW5rbm93bj0wLAorCQltdHNfc3VwX2FscGhhLAorCQltdHNfc3VwX2Z1bGwKKwl9CisJc3VwcG9ydF9zdGF0dXM7Cit9IDsKKworCisvKiBUaGVzZSBhcmUgdGFrZW4gZnJvbSB0aGUgbXNtVVNCLmluZiBmaWxlIG9uIHRoZSBXaW5kb3dzIGRyaXZlciBDRCAqLworY29uc3Qgc3RhdGljIHN0cnVjdCB2ZW5kb3JfcHJvZHVjdCBtdHNfc3VwcG9ydGVkX3Byb2R1Y3RzW10gPQoreworCXsgIlBoYW50b20gMzM2Q1giLAltdHNfc3VwX3Vua25vd259LAorCXsgIlBoYW50b20gMzM2Q1giLAltdHNfc3VwX3Vua25vd259LAorCXsgIlNjYW5tYWtlciBYNiIsCW10c19zdXBfYWxwaGF9LAorCXsgIlBoYW50b20gQzYiLAkJbXRzX3N1cF91bmtub3dufSwKKwl7ICJQaGFudG9tIDMzNkNYIiwJbXRzX3N1cF91bmtub3dufSwKKwl7ICJTY2FuTWFrZXIgVjZVU0wiLAltdHNfc3VwX3Vua25vd259LAorCXsgIlNjYW5NYWtlciBWNlVTTCIsCW10c19zdXBfdW5rbm93bn0sCisJeyAiU2Nhbm1ha2VyIFY2VUwiLAltdHNfc3VwX3Vua25vd259LAorCXsgIlNjYW5tYWtlciBWNlVQTCIsCW10c19zdXBfYWxwaGF9LAorfTsKKworLyogVGhlIGVudHJpZXMgb2YgbWljcm90ZWtfdGFibGUgbXVzdCBjb3JyZXNwb25kLCBsaW5lLWJ5LWxpbmUgdG8KKyAgIHRoZSBlbnRyaWVzIG9mIG10c19zdXBwb3J0ZWRfcHJvZHVjdHNbXS4gKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG10c191c2JfaWRzIFtdID0KK3sKKwl7IFVTQl9ERVZJQ0UoMHg0Y2UsIDB4MDMwMCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHg1ZGEsIDB4MDA5NCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHg1ZGEsIDB4MDA5OSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHg1ZGEsIDB4MDA5YSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHg1ZGEsIDB4MDBhMCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHg1ZGEsIDB4MDBhMykgfSwKKwl7IFVTQl9ERVZJQ0UoMHg1ZGEsIDB4ODBhMykgfSwKKwl7IFVTQl9ERVZJQ0UoMHg1ZGEsIDB4ODBhYykgfSwKKwl7IFVTQl9ERVZJQ0UoMHg1ZGEsIDB4MDBiNikgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBtdHNfdXNiX2lkcyk7CisKKworc3RhdGljIGludCBtdHNfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgaTsKKwlpbnQgZXBfb3V0ID0gLTE7CisJaW50IGVwX2luX3NldFszXTsgLyogdGhpcyB3aWxsIGJyZWFrIGlmIHdlIGhhdmUgbW9yZSB0aGFuIHRocmVlIGVuZHBvaW50cworCQkJICAgd2hpY2ggaXMgd2h5IHdlIGNoZWNrICovCisJaW50ICplcF9pbl9jdXJyZW50ID0gZXBfaW5fc2V0OworCWludCBlcnJfcmV0dmFsID0gLUVOT01FTTsKKworCXN0cnVjdCBtdHNfZGVzYyAqIG5ld19kZXNjOworCXN0cnVjdCB2ZW5kb3JfcHJvZHVjdCBjb25zdCogcDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAoaW50Zik7CisKKwkvKiB0aGUgY3VycmVudCBhbHRzZXR0aW5nIG9uIHRoZSBpbnRlcmZhY2Ugd2UncmUgcHJvYmluZyAqLworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdHNldHRpbmc7CisKKwlNVFNfREVCVUdfR09UX0hFUkUoKTsKKwlNVFNfREVCVUcoICJ1c2ItZGV2aWNlIGRlc2NyaXB0b3IgYXQgJXhcbiIsIChpbnQpZGV2ICk7CisKKwlNVFNfREVCVUcoICJwcm9kdWN0IGlkID0gMHgleCwgdmVuZG9yIGlkID0gMHgleFxuIiwKKwkJICAgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksCisJCSAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgKTsKKworCU1UU19ERUJVR19HT1RfSEVSRSgpOworCisJcCA9ICZtdHNfc3VwcG9ydGVkX3Byb2R1Y3RzW2lkIC0gbXRzX3VzYl9pZHNdOworCisJTVRTX0RFQlVHX0dPVF9IRVJFKCk7CisKKwlNVFNfREVCVUcoICJmb3VuZCBtb2RlbCAlc1xuIiwgcC0+bmFtZSApOworCWlmICggcC0+c3VwcG9ydF9zdGF0dXMgIT0gbXRzX3N1cF9mdWxsICkKKwkJTVRTX01FU1NBR0UoICJtb2RlbCAlcyBpcyBub3Qga25vd24gdG8gYmUgZnVsbHkgc3VwcG9ydGVkLCByZXBvcnRzIHdlbGNvbWUhXG4iLAorCQkJICAgICBwLT5uYW1lICk7CisKKwkvKiB0aGUgY3VycmVudCBhbHRzZXR0aW5nIG9uIHRoZSBpbnRlcmZhY2Ugd2UncmUgcHJvYmluZyAqLworCWFsdHNldHRpbmcgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKworCisJLyogQ2hlY2sgaWYgdGhlIGNvbmZpZyBpcyBzYW5lICovCisKKwlpZiAoIGFsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50cyAhPSBNVFNfRVBfVE9UQUwgKSB7CisJCU1UU19XQVJOSU5HKCAiZXhwZWN0aW5nICVkIGdvdCAlZCBlbmRwb2ludHMhIEJhaWxpbmcgb3V0LlxuIiwKKwkJCSAgICAgKGludClNVFNfRVBfVE9UQUwsIChpbnQpYWx0c2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzICk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWZvciggaSA9IDA7IGkgPCBhbHRzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHM7IGkrKyApIHsKKwkJaWYgKChhbHRzZXR0aW5nLT5lbmRwb2ludFtpXS5kZXNjLmJtQXR0cmlidXRlcyAmCisJCSAgICAgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spICE9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspIHsKKworCQkJTVRTX1dBUk5JTkcoICJjYW4gb25seSBkZWFsIHdpdGggYnVsayBlbmRwb2ludHM7IGVuZHBvaW50ICVkIGlzIG5vdCBidWxrLlxuIiwKKwkJCSAgICAgKGludClhbHRzZXR0aW5nLT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChhbHRzZXR0aW5nLT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJgorCQkJICAgIFVTQl9ESVJfSU4pCisJCQkJKmVwX2luX2N1cnJlbnQrKworCQkJCQk9IGFsdHNldHRpbmctPmVuZHBvaW50W2ldLmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmCisJCQkJCVVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKKwkJCWVsc2UgeworCQkJCWlmICggZXBfb3V0ICE9IC0xICkgeworCQkJCQlNVFNfV0FSTklORyggImNhbiBvbmx5IGRlYWwgd2l0aCBvbmUgb3V0cHV0IGVuZHBvaW50cy4gQmFpbGluZyBvdXQuIiApOworCQkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCQl9CisKKwkJCQllcF9vdXQgPSBhbHRzZXR0aW5nLT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJgorCQkJCQlVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0s7CisJCQl9CisJCX0KKworCX0KKworCisJaWYgKCBlcF9vdXQgPT0gLTEgKSB7CisJCU1UU19XQVJOSU5HKCAiY291bGRuJ3QgZmluZCBhbiBvdXRwdXQgYnVsayBlbmRwb2ludC4gQmFpbGluZyBvdXQuXG4iICk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwkKKwkKKwluZXdfZGVzYyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdHNfZGVzYyksIEdGUF9LRVJORUwpOworCWlmICghbmV3X2Rlc2MpCisJCWdvdG8gb3V0OworCisJbWVtc2V0KG5ld19kZXNjLCAwLCBzaXplb2YoKm5ld19kZXNjKSk7CisJbmV3X2Rlc2MtPnVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXdfZGVzYy0+dXJiKQorCQlnb3RvIG91dF9rZnJlZTsKKworCW5ld19kZXNjLT51c2JfZGV2ID0gZGV2OworCW5ld19kZXNjLT51c2JfaW50ZiA9IGludGY7CisJaW5pdF9NVVRFWCgmbmV3X2Rlc2MtPmxvY2spOworCisJLyogZW5kcG9pbnRzICovCisJbmV3X2Rlc2MtPmVwX291dCA9IGVwX291dDsKKwluZXdfZGVzYy0+ZXBfcmVzcG9uc2UgPSBlcF9pbl9zZXRbMF07CisJbmV3X2Rlc2MtPmVwX2ltYWdlID0gZXBfaW5fc2V0WzFdOworCisJaWYgKCBuZXdfZGVzYy0+ZXBfb3V0ICE9IE1UU19FUF9PVVQgKQorCQlNVFNfV0FSTklORyggIndpbGwgdGhpcyB3b3JrPyBDb21tYW5kIEVQIGlzIG5vdCB1c3VhbGx5ICVkXG4iLAorCQkJICAgICAoaW50KW5ld19kZXNjLT5lcF9vdXQgKTsKKworCWlmICggbmV3X2Rlc2MtPmVwX3Jlc3BvbnNlICE9IE1UU19FUF9SRVNQT05TRSApCisJCU1UU19XQVJOSU5HKCAid2lsbCB0aGlzIHdvcms/IFJlc3BvbnNlIEVQIGlzIG5vdCB1c3VhbGx5ICVkXG4iLAorCQkJICAgICAoaW50KW5ld19kZXNjLT5lcF9yZXNwb25zZSApOworCisJaWYgKCBuZXdfZGVzYy0+ZXBfaW1hZ2UgIT0gTVRTX0VQX0lNQUdFICkKKwkJTVRTX1dBUk5JTkcoICJ3aWxsIHRoaXMgd29yaz8gSW1hZ2UgZGF0YSBFUCBpcyBub3QgdXN1YWxseSAlZFxuIiwKKwkJCSAgICAgKGludCluZXdfZGVzYy0+ZXBfaW1hZ2UgKTsKKworCW5ld19kZXNjLT5ob3N0ID0gc2NzaV9ob3N0X2FsbG9jKCZtdHNfc2NzaV9ob3N0X3RlbXBsYXRlLAorCQkJc2l6ZW9mKG5ld19kZXNjKSk7CisJaWYgKCFuZXdfZGVzYy0+aG9zdCkKKwkJZ290byBvdXRfZnJlZV91cmI7CisKKwluZXdfZGVzYy0+aG9zdC0+aG9zdGRhdGFbMF0gPSAodW5zaWduZWQgbG9uZyluZXdfZGVzYzsKKwlpZiAoc2NzaV9hZGRfaG9zdChuZXdfZGVzYy0+aG9zdCwgTlVMTCkpIHsKKwkJZXJyX3JldHZhbCA9IC1FSU87CisJCWdvdG8gb3V0X2ZyZWVfdXJiOworCX0KKwlzY3NpX3NjYW5faG9zdChuZXdfZGVzYy0+aG9zdCk7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIG5ld19kZXNjKTsKKwlyZXR1cm4gMDsKKworIG91dF9mcmVlX3VyYjoKKwl1c2JfZnJlZV91cmIobmV3X2Rlc2MtPnVyYik7Cisgb3V0X2tmcmVlOgorCWtmcmVlKG5ld19kZXNjKTsKKyBvdXQ6CisJcmV0dXJuIGVycl9yZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIG10c191c2JfZGlzY29ubmVjdCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IG10c19kZXNjICpkZXNjID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisKKwl1c2Jfa2lsbF91cmIoZGVzYy0+dXJiKTsKKwlzY3NpX3JlbW92ZV9ob3N0KGRlc2MtPmhvc3QpOworCisJc2NzaV9ob3N0X3B1dChkZXNjLT5ob3N0KTsKKwl1c2JfZnJlZV91cmIoZGVzYy0+dXJiKTsKKwlrZnJlZShkZXNjKTsKK30KKworCitzdGF0aWMgaW50IF9faW5pdCBtaWNyb3Rla19kcnZfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJm10c191c2JfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG1pY3JvdGVrX2Rydl9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJm10c191c2JfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobWljcm90ZWtfZHJ2X2luaXQpOworbW9kdWxlX2V4aXQobWljcm90ZWtfZHJ2X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuaCBiL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI3MWRlYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmgKQEAgLTAsMCArMSw1NSBAQAorIC8qCisgKiBEcml2ZXIgZm9yIE1pY3JvdGVrIFNjYW5tYWtlciBYNiBVU0Igc2Nhbm5lciBhbmQgcG9zc2libHkgb3RoZXJzLgorICogCisgKiAoQykgQ29weXJpZ2h0IDIwMDAgSm9obiBGcmVtbGluIDx2aWlAcGVuZ3VpbnBvd2VyZWQuY29tPgorICogKEMpIENvcHlyaWdodCAyMDAwIE9saXZlciBOZXVrdW0gPE9saXZlci5OZXVrdW1AbHJ6LnVuaS1tdWVuY2hlbi5kZT4KKyAqCisgKiBTZWUgbWljcm90ZWsuYyBmb3IgaGlzdG9yeQorICoKKyAqLworCit0eXBlZGVmIHZvaWQgKCptdHNfc2NzaV9jbW5kX2NhbGxiYWNrKShTY3NpX0NtbmQgKik7CisKKworc3RydWN0IG10c190cmFuc2Zlcl9jb250ZXh0Cit7CisJc3RydWN0IG10c19kZXNjKiBpbnN0YW5jZTsKKwltdHNfc2NzaV9jbW5kX2NhbGxiYWNrIGZpbmFsX2NhbGxiYWNrOworCVNjc2lfQ21uZCAqc3JiOworCQorCXZvaWQqIGRhdGE7CisJdW5zaWduZWQgZGF0YV9sZW5ndGg7CisJaW50IGRhdGFfcGlwZTsKKwlpbnQgZnJhZ21lbnQ7CisKKwl1OCBzdGF0dXM7IC8qIHN0YXR1cyByZXR1cm5lZCBmcm9tIGVwX3Jlc3BvbnNlIGFmdGVyIGNvbW1hbmQgY29tcGxldGlvbiAqLworfTsKKworCitzdHJ1Y3QgbXRzX2Rlc2MgeworCXN0cnVjdCBtdHNfZGVzYyAqbmV4dDsKKwlzdHJ1Y3QgbXRzX2Rlc2MgKnByZXY7CisKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdXNiX2ludGY7CisKKwkvKiBFbmRwb2ludCBhZGRyZXNzZXMgKi8KKwl1OCBlcF9vdXQ7CisJdTggZXBfcmVzcG9uc2U7CisJdTggZXBfaW1hZ2U7CisKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICogaG9zdDsKKwlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CisKKwlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IG10c190cmFuc2Zlcl9jb250ZXh0IGNvbnRleHQ7Cit9OworCisKKyNkZWZpbmUgTVRTX0VQX09VVAkweDEKKyNkZWZpbmUgTVRTX0VQX1JFU1BPTlNFCTB4MgorI2RlZmluZSBNVFNfRVBfSU1BR0UJMHgzCisjZGVmaW5lIE1UU19FUF9UT1RBTAkweDMKKworI2RlZmluZSBNVFNfU0NTSV9FUlJfTUFTSyB+MHgzZnUKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2lucHV0L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI4ZTdlYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L0tjb25maWcKQEAgLTAsMCArMSwyMzcgQEAKKyMKKyMgVVNCIElucHV0IGRyaXZlciBjb25maWd1cmF0aW9uCisjCitjb21tZW50ICJVU0IgSW5wdXQgRGV2aWNlcyIKKwlkZXBlbmRzIG9uIFVTQgorCitjb25maWcgVVNCX0hJRAorCXRyaXN0YXRlICJVU0IgSHVtYW4gSW50ZXJmYWNlIERldmljZSAoZnVsbCBISUQpIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGZ1bGwgSElEIHN1cHBvcnQgdG8gY29ubmVjdCBrZXlib2FyZHMsCisJICBtaWNlLCBqb3lzdGlja3MsIGdyYXBoaWMgdGFibGV0cywgb3IgYW55IG90aGVyIEhJRCBiYXNlZCBkZXZpY2VzCisJICB0byB5b3VyIGNvbXB1dGVyIHZpYSBVU0IuIFlvdSBhbHNvIG5lZWQgdG8gc2VsZWN0IEhJRCBJbnB1dCBsYXllcgorCSAgc3VwcG9ydCAoYmVsb3cpIGlmIHlvdSB3YW50IHRvIHVzZSBrZXlib2FyZHMsIG1pY2UsIGpveXN0aWNrcyBhbmQKKwkgIHRoZSBsaWtlIC4uLiBhcyB3ZWxsIGFzIFVuaW50ZXJydXB0aWJsZSBQb3dlciBTdXBwbHkgKFVQUykgYW5kCisJICBtb25pdG9yIGNvbnRyb2wgZGV2aWNlcy4KKworCSAgWW91IGNhbid0IHVzZSB0aGlzIGRyaXZlciBhbmQgdGhlIEhJREJQIChCb290IFByb3RvY29sKSBrZXlib2FyZAorCSAgYW5kIG1vdXNlIGRyaXZlcnMgYXQgdGhlIHNhbWUgdGltZS4gTW9yZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGU6CisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL2lucHV0L2lucHV0LnR4dD4uCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYmhpZC4KKworY29tbWVudCAiSW5wdXQgY29yZSBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIEhJRCBpbnB1dCBsYXllciBvciBISURCUCBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCX0hJRCAmJiBJTlBVVD1uCisKK2NvbmZpZyBVU0JfSElESU5QVVQKKwlib29sICJISUQgaW5wdXQgbGF5ZXIgc3VwcG9ydCIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIElOUFVUICYmIFVTQl9ISUQKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIFVTQiBrZXlib2FyZCwgbW91c2Ugb3Igam95c3RpY2ssCisJICBvciBhbnkgb3RoZXIgSElEIGlucHV0IGRldmljZS4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKworY29uZmlnIEhJRF9GRgorCWJvb2wgIkZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0JfSElESU5QVVQgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpcyB5b3Ugd2FudCBmb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBhIGZldyBISUQgZGV2aWNlcy4KKwkgIFNlZSBiZWxvdyBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCBkZXZpY2VzLgorCisJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9pbnB1dC9mZi50eHQ+IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBmb3JjZQorCSAgZmVlZGJhY2sgQVBJLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgSElEX1BJRAorCWJvb2wgIlBJRCBEZXZpY2VzIChNaWNyb3NvZnQgU2lkZXdpbmRlciBGb3JjZSBGZWVkYmFjayAyKSIKKwlkZXBlbmRzIG9uIEhJRF9GRgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBQSUQtY29tcGxpYW50IGpveXN0aWNrIGFuZCB3aXNoIHRvIGVuYWJsZSBmb3JjZQorCSAgZmVlZGJhY2sgZm9yIGl0LiBUaGUgTWljcm9zb2Z0IFNpZGV3aW5kZXIgRm9yY2UgRmVlZGJhY2sgMiBpcyBvbmUgc3VjaAorCSAgZGV2aWNlLgorCitjb25maWcgTE9HSVRFQ0hfRkYKKwlib29sICJMb2dpdGVjaCBXaW5nTWFuICozRCBzdXBwb3J0IgorCWRlcGVuZHMgb24gSElEX0ZGCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgZGV2aWNlczoKKwkgIC0gTG9naXRlY2ggV2luZ01hbiBDb3JkbGVzcyBSdW1ibGVQYWQKKwkgIC0gTG9naXRlY2ggV2luZ01hbiBGb3JjZSAzRAorCSAgYW5kIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBmb3JjZSBmZWVkYmFjayBmb3IgdGhlbS4KKwkgIE5vdGU6IGlmIHlvdSBzYXkgTiBoZXJlLCB0aGlzIGRldmljZSB3aWxsIHN0aWxsIGJlIHN1cHBvcnRlZCwgYnV0IHdpdGhvdXQKKwkgIGZvcmNlIGZlZWRiYWNrLgorCitjb25maWcgVEhSVVNUTUFTVEVSX0ZGCisJYm9vbCAiVGhydXN0TWFzdGVyIEZpcmVTdG9ybSBEdWFsIFBvd2VyIDIgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEhJRF9GRiAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgVEhSVVNUTUFTVEVSIEZpcmVTdG9yZSBEdWFsIFBvd2VyIDIsCisJICBhbmQgd2FudCB0byBlbmFibGUgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgaXQuCisJICBOb3RlOiBpZiB5b3Ugc2F5IE4gaGVyZSwgdGhpcyBkZXZpY2Ugd2lsbCBzdGlsbCBiZSBzdXBwb3J0ZWQsIGJ1dCB3aXRob3V0CisJICBmb3JjZSBmZWVkYmFjay4KKworY29uZmlnIFVTQl9ISURERVYKKwlib29sICIvZGV2L2hpZGRldiByYXcgSElEIGRldmljZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCX0hJRAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gc3VwcG9ydCBISUQgZGV2aWNlcyAoZnJvbSB0aGUgVVNCCisJICBzcGVjaWZpY2F0aW9uIHN0YW5kcG9pbnQpIHRoYXQgYXJlbid0IHN0cmljdGx5IHVzZXIgaW50ZXJmYWNlCisJICBkZXZpY2VzLCBsaWtlIG1vbml0b3IgY29udHJvbHMgYW5kIFVuaW50ZXJydXB0YWJsZSBQb3dlciBTdXBwbGllcy4KKworCSAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlc2UgZGV2aWNlcyBzZXBhcmF0ZWx5IHVzaW5nIGEgc2VwYXJhdGUKKwkgIGV2ZW50IGludGVyZmFjZSBvbiAvZGV2L3VzYi9oaWRkZXZYIChjaGFyIDE4MDo5NiB0byAxODA6MTExKS4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKworbWVudSAiVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMiCisJZGVwZW5kcyBvbiBVU0IhPW4gJiYgVVNCX0hJRCE9eQorCitjb25maWcgVVNCX0tCRAorCXRyaXN0YXRlICJVU0IgSElEQlAgS2V5Ym9hcmQgKHNpbXBsZSBCb290KSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIElOUFVUCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBvbmx5IGlmIHlvdSBhcmUgYWJzb2x1dGVseSBzdXJlIHRoYXQgeW91IGRvbid0IHdhbnQKKwkgIHRvIHVzZSB0aGUgZ2VuZXJpYyBISUQgZHJpdmVyIGZvciB5b3VyIFVTQiBrZXlib2FyZCBhbmQgcHJlZmVyCisJICB0byB1c2UgdGhlIGtleWJvYXJkIGluIGl0cyBsaW1pdGVkIEJvb3QgUHJvdG9jb2wgbW9kZSBpbnN0ZWFkLgorCisJICBUaGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgbm90IHdoYXQgeW91IHdhbnQuICBUaGlzIGlzIG1vc3RseQorCSAgdXNlZnVsIGZvciBlbWJlZGRlZCBhcHBsaWNhdGlvbnMgb3Igc2ltcGxlIGtleWJvYXJkcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNia2JkLgorCisJICBJZiBldmVuIHJlbW90ZWx5IHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBVU0JfTU9VU0UKKwl0cmlzdGF0ZSAiVVNCIEhJREJQIE1vdXNlIChzaW1wbGUgQm9vdCkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBJTlBVVAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgb25seSBpZiB5b3UgYXJlIGFic29sdXRlbHkgc3VyZSB0aGF0IHlvdSBkb24ndCB3YW50CisJICB0byB1c2UgdGhlIGdlbmVyaWMgSElEIGRyaXZlciBmb3IgeW91ciBVU0IgbW91c2UgYW5kIHByZWZlcgorCSAgdG8gdXNlIHRoZSBtb3VzZSBpbiBpdHMgbGltaXRlZCBCb290IFByb3RvY29sIG1vZGUgaW5zdGVhZC4KKworCSAgVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IG5vdCB3aGF0IHlvdSB3YW50LiAgVGhpcyBpcyBtb3N0bHkKKwkgIHVzZWZ1bCBmb3IgZW1iZWRkZWQgYXBwbGljYXRpb25zIG9yIHNpbXBsZSBtaWNlLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2Jtb3VzZS4KKworCSAgSWYgZXZlbiByZW1vdGVseSB1bnN1cmUsIHNheSBOLgorCitlbmRtZW51CisKK2NvbmZpZyBVU0JfQUlQVEVLCisJdHJpc3RhdGUgIkFpcHRlayA2MDAwVS84MDAwVSB0YWJsZXQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBJTlBVVAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBVU0IgdmVyc2lvbiBvZiB0aGUgQWlwdGVrIDYwMDBVCisJICBvciBBaXB0ZWsgODAwMFUgdGFibGV0LiAgTWFrZSBzdXJlIHRvIHNheSBZIHRvICJNb3VzZSBzdXBwb3J0IgorCSAgKENPTkZJR19JTlBVVF9NT1VTRURFVikgYW5kL29yICJFdmVudCBpbnRlcmZhY2Ugc3VwcG9ydCIKKwkgIChDT05GSUdfSU5QVVRfRVZERVYpIGFzIHdlbGwuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFpcHRlay4KKworY29uZmlnIFVTQl9XQUNPTQorCXRyaXN0YXRlICJXYWNvbSBJbnR1b3MvR3JhcGhpcmUgdGFibGV0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgSU5QVVQKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgVVNCIHZlcnNpb24gb2YgdGhlIFdhY29tIEludHVvcworCSAgb3IgR3JhcGhpcmUgdGFibGV0LiAgTWFrZSBzdXJlIHRvIHNheSBZIHRvICJNb3VzZSBzdXBwb3J0IgorCSAgKENPTkZJR19JTlBVVF9NT1VTRURFVikgYW5kL29yICJFdmVudCBpbnRlcmZhY2Ugc3VwcG9ydCIKKwkgIChDT05GSUdfSU5QVVRfRVZERVYpIGFzIHdlbGwuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHdhY29tLgorCitjb25maWcgVVNCX0tCVEFCCisJdHJpc3RhdGUgIktCIEdlYXIgSmFtU3R1ZGlvIHRhYmxldCBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIElOUFVUCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFVTQiB2ZXJzaW9uIG9mIHRoZSBLQiBHZWFyCisJICBKYW1TdHVkaW8gdGFibGV0LiAgTWFrZSBzdXJlIHRvIHNheSBZIHRvICJNb3VzZSBzdXBwb3J0IgorCSAgKENPTkZJR19JTlBVVF9NT1VTRURFVikgYW5kL29yICJFdmVudCBpbnRlcmZhY2Ugc3VwcG9ydCIKKwkgIChDT05GSUdfSU5QVVRfRVZERVYpIGFzIHdlbGwuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGtidGFiLgorCitjb25maWcgVVNCX1BPV0VSTUFURQorCXRyaXN0YXRlICJHcmlmZmluIFBvd2VyTWF0ZSBhbmQgQ29udG91ciBKb2cgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBJTlBVVAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIEdyaWZmaW4gUG93ZXJNYXRlIG9yIENvbnRvdXIgSm9nIGRldmljZXMuCisJICBUaGVzZSBhcmUgYWx1bWludW0gZGlhbHMgd2hpY2ggY2FuIG1lYXN1cmUgY2xvY2t3aXNlIGFuZCBhbnRpY2xvY2t3aXNlCisJICByb3RhdGlvbi4gIFRoZSBkaWFsIGFsc28gYWN0cyBhcyBhIHB1c2hidXR0b24uICBUaGUgYmFzZSBjb250YWlucyBhbiBMRUQKKwkgIHdoaWNoIGNhbiBiZSBpbnN0cnVjdGVkIHRvIHB1bHNlIG9yIHRvIHN3aXRjaCB0byBhIHBhcnRpY3VsYXIgaW50ZW5zaXR5LgorCisJICBZb3UgY2FuIGRvd25sb2FkIHVzZXJzcGFjZSB0b29scyBmcm9tCisJICA8aHR0cDovL3Nvd2VyYnV0dHMuY29tL3Bvd2VybWF0ZS8+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwb3dlcm1hdGUuCisKK2NvbmZpZyBVU0JfTVRPVUNICisJdHJpc3RhdGUgIk1pY3JvVG91Y2ggVVNCIFRvdWNoc2NyZWVuIERyaXZlciIKKwlkZXBlbmRzIG9uIFVTQiAmJiBJTlBVVAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgTWljcm9Ub3VjaCAoTm93IDNNKSBVU0IgCisJICBUb3VjaHNjcmVlbiBjb250cm9sbGVyLgorCisJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvbXRvdWNoLnR4dD4gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG10b3VjaHVzYi4KKworY29uZmlnIFVTQl9FR0FMQVgKKwl0cmlzdGF0ZSAiZUdhbGF4IFRvdWNoS2l0IFVTQiBUb3VjaHNjcmVlbiBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0IgJiYgSU5QVVQKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIGVHYWxheCBUb3VjaEtpdCBVU0IKKwkgIFRvdWNoc2NyZWVuIGNvbnRyb2xsZXIuCisKKwkgIFRoZSBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIG9uIGEgWGVuYXJjIDcwMFRTViBtb25pdG9yCisJICB3aXRoIGVHYWxheCB0b3VjaHNjcmVlbi4KKworCSAgSGF2ZSBhIGxvb2sgYXQgPGh0dHA6Ly9saW51eC5jaGFwdGVyNy5jaC90b3VjaGtpdC8+IGZvcgorCSAgYSB1c2FnZSBkZXNjcmlwdGlvbiBhbmQgdGhlIHJlcXVpcmVkIHVzZXItc3BhY2Ugc3R1ZmYuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRvdWNoa2l0dXNiLgorCitjb25maWcgVVNCX1hQQUQKKwl0cmlzdGF0ZSAiWC1Cb3ggZ2FtZXBhZCBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIElOUFVUCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFgtQm94IHBhZCB3aXRoIHlvdXIgY29tcHV0ZXIuCisJICBNYWtlIHN1cmUgdG8gc2F5IFkgdG8gIkpveXN0aWNrIHN1cHBvcnQiIChDT05GSUdfSU5QVVRfSk9ZREVWKQorCSAgYW5kL29yICJFdmVudCBpbnRlcmZhY2Ugc3VwcG9ydCIgKENPTkZJR19JTlBVVF9FVkRFVikgYXMgd2VsbC4KKworCSAgRm9yIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byBjb25uZWN0IHRoZSBYLUJveCBwYWQgdG8gVVNCLCBzZWUKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vaW5wdXQveHBhZC50eHQ+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB4cGFkLgorCSAgCitjb25maWcgVVNCX0FUSV9SRU1PVEUKKwl0cmlzdGF0ZSAiQVRJIC8gWDEwIFVTQiBSRiByZW1vdGUgY29udHJvbCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBJTlBVVAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGFuIEFUSSBvciBYMTAgIkxvbGEiIFVTQiByZW1vdGUgY29udHJvbC4KKwkgIFRoZXNlIGFyZSBSRiByZW1vdGVzIHdpdGggVVNCIHJlY2VpdmVycy4gCisJICBUaGUgQVRJIHJlbW90ZSBjb21lcyB3aXRoIG1hbnkgb2YgQVRJJ3MgQWxsLUluLVdvbmRlciB2aWRlbyBjYXJkcy4KKwkgIFRoZSBYMTAgIkxvbGEiIHJlbW90ZSBpcyBhdmFpbGFibGUgYXQ6CisJICAgICA8aHR0cDovL3d3dy54MTAuY29tL3Byb2R1Y3RzL2xvbGFfc2cxLmh0bT4KKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIG1vdXNlIHBvaW50ZXIsIGxlZnQgYW5kIHJpZ2h0IG1vdXNlIGJ1dHRvbnMsIAorCSAgYW5kIG1hcHMgYWxsIHRoZSBvdGhlciByZW1vdGUgYnV0dG9ucyB0byBrZXlwcmVzcyBldmVudHMuCisJICAKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQorCSAgY2FsbGVkIGF0aV9yZW1vdGUuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L01ha2VmaWxlIGIvZHJpdmVycy91c2IvaW5wdXQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJjZWRkMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L01ha2VmaWxlCkBAIC0wLDAgKzEsMzkgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBVU0IgaW5wdXQgZHJpdmVycworIworCisjIE11bHRpcGFydCBvYmplY3RzLgordXNiaGlkLW9ianMJOj0gaGlkLWNvcmUubworCisjIE9wdGlvbmFsIHBhcnRzIG9mIG11bHRpcGFydCBvYmplY3RzLgorCitpZmVxICgkKENPTkZJR19VU0JfSElEREVWKSx5KQorCXVzYmhpZC1vYmpzCSs9IGhpZGRldi5vCitlbmRpZgoraWZlcSAoJChDT05GSUdfVVNCX0hJRElOUFVUKSx5KQorCXVzYmhpZC1vYmpzCSs9IGhpZC1pbnB1dC5vCitlbmRpZgoraWZlcSAoJChDT05GSUdfSElEX1BJRCkseSkKKwl1c2JoaWQtb2JqcwkrPSBwaWQubworZW5kaWYKK2lmZXEgKCQoQ09ORklHX0xPR0lURUNIX0ZGKSx5KQorCXVzYmhpZC1vYmpzCSs9IGhpZC1sZ2ZmLm8KK2VuZGlmCitpZmVxICgkKENPTkZJR19USFJVU1RNQVNURVJfRkYpLHkpCisJdXNiaGlkLW9ianMJKz0gaGlkLXRtZmYubworZW5kaWYKK2lmZXEgKCQoQ09ORklHX0hJRF9GRikseSkKKwl1c2JoaWQtb2JqcwkrPSBoaWQtZmYubworZW5kaWYKKworb2JqLSQoQ09ORklHX1VTQl9BSVBURUspCSs9IGFpcHRlay5vCitvYmotJChDT05GSUdfVVNCX0FUSV9SRU1PVEUpCSs9IGF0aV9yZW1vdGUubworb2JqLSQoQ09ORklHX1VTQl9ISUQpCQkrPSB1c2JoaWQubworb2JqLSQoQ09ORklHX1VTQl9LQkQpCQkrPSB1c2JrYmQubworb2JqLSQoQ09ORklHX1VTQl9LQlRBQikJCSs9IGtidGFiLm8KK29iai0kKENPTkZJR19VU0JfTU9VU0UpCQkrPSB1c2Jtb3VzZS5vCitvYmotJChDT05GSUdfVVNCX01UT1VDSCkJKz0gbXRvdWNodXNiLm8KK29iai0kKENPTkZJR19VU0JfRUdBTEFYKQkrPSB0b3VjaGtpdHVzYi5vCitvYmotJChDT05GSUdfVVNCX1BPV0VSTUFURSkJKz0gcG93ZXJtYXRlLm8KK29iai0kKENPTkZJR19VU0JfV0FDT00pCQkrPSB3YWNvbS5vCitvYmotJChDT05GSUdfVVNCX1hQQUQpCQkrPSB4cGFkLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2FpcHRlay5jIGIvZHJpdmVycy91c2IvaW5wdXQvYWlwdGVrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdmZWE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2FpcHRlay5jCkBAIC0wLDAgKzEsMjI4MyBAQAorLyoKKyAqICBOYXRpdmUgc3VwcG9ydCBmb3IgdGhlIEFpcHRlayBIeXBlclBlbiBVU0IgVGFibGV0cworICogICg0MDAwVS81MDAwVS82MDAwVS84MDAwVS8xMjAwMFUpCisgKiAgCisgKiAgQ29weXJpZ2h0IChjKSAyMDAxICAgICAgQ2hyaXMgQXRlbmFzaW8gICA8Y2hyaXNAY3J1ZC5uZXQ+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgQnJ5YW4gVy4gSGVhZGxleSA8YndoZWFkbGV5QGVhcnRobGluay5uZXQ+CisgKgorICogIGJhc2VkIG9uIHdhY29tLmMgYnkKKyAqICAgICBWb2p0ZWNoIFBhdmxpayAgICAgIDx2b2p0ZWNoQHN1c2UuY3o+CisgKiAgICAgQW5kcmVhcyBCYWNoIEFhZW4gICA8YWJhY2hAc3RvZmFuZXQuZGs+CisgKiAgICAgQ2xpZmZvcmQgV29sZiAgICAgICA8Y2xpZmZvcmRAY2xpZmZvcmQuYXQ+CisgKiAgICAgU2FtIE1vc2VsICAgICAgICAgICA8c2FtLm1vc2VsQGNvbXB1dGVyLm9yZz4KKyAqICAgICBKYW1lcyBFLiBCbGFpciAgICAgIDxjb3J2dXNAZ251Lm9yZz4KKyAqICAgICBEYW5pZWwgRWdnZXIgICAgICAgIDxlZ2dlckBzdXNlLmRlPgorICoKKyAqICBNYW55IHRoYW5rcyB0byBPbGl2ZXIgS3VlY2hlbWFubiBmb3IgaGlzIHN1cHBvcnQuCisgKgorICogIENoYW5nZUxvZzoKKyAqICAgICAgdjAuMSAtIEluaXRpYWwgcmVsZWFzZQorICogICAgICB2MC4yIC0gSGFjayB0byBnZXQgYXJvdW5kIGZha2UgZXZlbnQgMjgncy4gKEJyeWFuIFcuIEhlYWRsZXkpCisgKiAgICAgIHYwLjMgLSBNYWtlIFVSQiBkeW5hbWljIChCcnlhbiBXLiBIZWFkbGV5LCBKdW4tOC0yMDAyKQorICogICAgICAgICAgICAgUmVsZWFzZWQgdG8gTGludXggMi40LjE5IGFuZCAyLjUueAorICogICAgICB2MC40IC0gUmV3cm90ZSBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgY29kZSB0byBkZWFsIHdpdGgKKyAqICAgICAgICAgICAgIGNvcnJlY3RlZCBjb250cm9sIHNlcXVlbmNlcywgdGltaW5nLCBkeW5hbWljIGNvbmZpZ3VyYXRpb24sCisgKiAgICAgICAgICAgICBzdXBwb3J0IG9mIDYwMDBVIC0gMTIwMDBVLCBwcm9jZnMsIGFuZCBtYWNybyBrZXkgc3VwcG9ydAorICogICAgICAgICAgICAgKEphbi0xLTIwMDMgLSBGZWItNS0yMDAzLCBCcnlhbiBXLiBIZWFkbGV5KQorICogICAgICB2MS4wIC0gQWRkZWQgc3VwcG9ydCBmb3IgZGlhZ25vc3RpYyBtZXNzYWdlcywgY291bnQgb2YgbWVzc2FnZXMKKyAqICAgICAgICAgICAgIHJlY2VpdmVkIGZyb20gVVJCIC0gTWFyLTgtMjAwMywgQnJ5YW4gVy4gSGVhZGxleQorICogICAgICB2MS4xIC0gYWRkZWQgc3VwcG9ydCBmb3IgdGFibGV0IHJlc29sdXRpb24sIGNoYW5nZWQgRFYgYW5kIHByb3hpbWl0eQorICogICAgICAgICAgICAgc29tZSBjb3JyZWN0aW9ucyAtIEp1bi0yMi0yMDAzLCBtYXJ0aW4gc2NobmVlYmFjaGVyCisgKiAgICAgICAgICAgLSBBZGRlZCBzdXBwb3J0IGZvciB0aGUgc3lzZnMgaW50ZXJmYWNlLCBkZXByZWNhdGluZyB0aGUKKyAqICAgICAgICAgICAgIHByb2NmcyBpbnRlcmZhY2UgZm9yIDIuNS54IGtlcm5lbC4gQWxzbyBhZGRlZCBzdXBwb3J0IGZvcgorICogICAgICAgICAgICAgV2hlZWwgY29tbWFuZC4gQnJ5YW4gVy4gSGVhZGxleSBKdWx5LTE1LTIwMDMuCisgKiAgICAgIHYxLjIgLSBSZXdvcmtlZCBqaXR0ZXIgdGltZXIgYXMgYSBrZXJuZWwgdGhyZWFkLiAKKyAqICAgICAgICAgICAgIEJyeWFuIFcuIEhlYWRsZXkgTm92ZW1iZXItMjgtMjAwMy9KYW4tMTAtMjAwNC4KKyAqICAgICAgdjEuMyAtIFJlcGFpcmVkIGlzc3VlIG9mIGtlcm5lbCB0aHJlYWQgZ29pbmcgbnV0cyBvbiBzaW5nbGUtcHJvY2Vzc29yCisgKiAgICAgICAgICAgICBtYWNoaW5lcywgaW50cm9kdWNlZCBwcm9ncmFtbWFibGVEZWxheSBhcyBhIGNvbW1hbmQgbGluZQorICogICAgICAgICAgICAgcGFyYW1ldGVyLiBGZWIgNyAyMDA0LCBCcnlhbiBXLiBIZWFkbGV5LgorICogICAgICB2MS40IC0gUmUtd2lyZSBqaXR0ZXIgc28gaXQgZG9lcyBub3QgcmVxdWlyZSBhIHRocmVhZC4gQ291cnRlc3kgb2YKKyAqICAgICAgICAgICAgIFJlbmUgdmFuIFBhYXNzZW4uIEFkZGVkIHJlcG9ydGluZyBvZiBwaHlzaWNhbCBwb2ludGVyIGRldmljZQorICogICAgICAgICAgICAgKGUuZy4sIHN0eWx1cywgbW91c2UgaW4gcmVwb3J0cyAyLCAzLCA0LCA1LiBXZSBkb24ndCBrbm93CisgKiAgICAgICAgICAgICBmb3IgcmVwb3J0cyAxLCA2LikKKyAqICAgICAgICAgICAgIHdoYXQgcGh5c2ljYWwgZGV2aWNlIHJlcG9ydHMgZm9yIHJlcG9ydHMgMSwgNi4pIEFsc28gZW5hYmxlZAorICogICAgICAgICAgICAgTU9VU0UgYW5kIExFTlMgdG9vbCBidXR0b24gbW9kZXMuIFJlbmFtZWQgInJ1YmJlciIgdG8gImVyYXNlciIuCisgKiAgICAgICAgICAgICBGZWIgMjAsIDIwMDQsIEJyeWFuIFcuIEhlYWRsZXkuCisgKiAgICAgIHYxLjUgLSBBZGRlZCBwcmV2aW91c0ppdHRlcmFibGUsIHNvIHdlIGRvbid0IGRvIGppdHRlciBkZWxheSB3aGVuIHRoZQorICogICAgICAgICAgICAgdXNlciBpcyBob2xkaW5nIGEgYnV0dG9uIGRvd24gZm9yIHBlcmlvZHMgb2YgdGltZS4KKyAqCisgKiBOT1RFOgorICogICAgICBUaGlzIGtlcm5lbCBkcml2ZXIgaXMgYXVnbWVudGVkIGJ5IHRoZSAiQWlwdGVrIiBYRnJlZTg2IGlucHV0CisgKiAgICAgIGRyaXZlciBmb3IgeW91ciBYIHNlcnZlciwgYXMgd2VsbCBhcyB0aGUgR2FpcHRlayBHVUkgRnJvbnQtZW5kCisgKiAgICAgICJUYWJsZXQgTWFuYWdlciIuIAorICogICAgICBUaGVzZSB0aHJlZSBwcm9kdWN0cyBhcmUgaGlnaGx5IGludGVyYWN0aXZlIHdpdGggb25lIGFub3RoZXIsIAorICogICAgICBzbyB0aGVyZWZvcmUgaXQncyBlYXNpZXIgdG8gZG9jdW1lbnQgdGhlbSBhbGwgYXMgb25lIHN1YnN5c3RlbS4KKyAqICAgICAgUGxlYXNlIHZpc2l0IHRoZSBwcm9qZWN0J3MgImhvbWUgcGFnZSIsIGxvY2F0ZWQgYXQsIAorICogICAgICBodHRwOi8vYWlwdGVrdGFibGV0LnNvdXJjZWZvcmdlLm5ldC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjUgKE1heS0xNS0yMDA0KSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAgIkJyeWFuIFcuIEhlYWRsZXkvQ2hyaXMgQXRlbmFzaW8iCisjZGVmaW5lIERSSVZFUl9ERVNDICAgICJBaXB0ZWsgSHlwZXJQZW4gVVNCIFRhYmxldCBEcml2ZXIgKExpbnV4IDIuNi54KSIKKworLyoKKyAqIEFpcHRlayBzdGF0dXMgcGFja2V0OgorICoKKyAqIChyZXR1cm5lZCBhcyBSZXBvcnQgMSAtIHJlbGF0aXZlIGNvb3JkaW5hdGVzIGZyb20gbW91c2UgYW5kIHN0eWx1cykKKyAqCisgKiAgICAgICAgYml0NyAgYml0NiAgYml0NSAgYml0NCAgYml0MyAgYml0MiAgYml0MSAgYml0MAorICogYnl0ZTAgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAxCisgKiBieXRlMSAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgQlMyICAgQlMgICAgVGlwCisgKiBieXRlMiAgWDcgICAgWDYgICAgWDUgICAgWDQgICAgWDMgICAgWDIgICAgWDEgICAgWDAKKyAqIGJ5dGUzICBZNyAgICBZNiAgICBZNSAgICBZNCAgICBZMyAgICBZMiAgICBZMSAgICBZMAorICoKKyAqIChyZXR1cm5lZCBhcyBSZXBvcnQgMiAtIGFic29sdXRlIGNvb3JkaW5hdGVzIGZyb20gdGhlIHN0eWx1cykKKyAqCisgKiAgICAgICAgYml0NyAgYml0NiAgYml0NSAgYml0NCAgYml0MyAgYml0MiAgYml0MSAgYml0MAorICogYnl0ZTAgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAxICAgICAwCisgKiBieXRlMSAgWDcgICAgWDYgICAgWDUgICAgWDQgICAgWDMgICAgWDIgICAgWDEgICAgWDAKKyAqIGJ5dGUyICBYMTUgICBYMTQgICBYMTMgICBYMTIgICBYMTEgICBYMTAgICBYOSAgICBYOAorICogYnl0ZTMgIFk3ICAgIFk2ICAgIFk1ICAgIFk0ICAgIFkzICAgIFkyICAgIFkxICAgIFkwCisgKiBieXRlNCAgWTE1ICAgWTE0ICAgWTEzICAgWTEyICAgWTExICAgWTEwICAgWTkgICAgWTgKKyAqIGJ5dGU1ICAgKiAgICAgKiAgICAgKiAgICBCUzIgICBCUzEgICBUaXAgICBJUiAgICBEVgorICogYnl0ZTYgIFA3ICAgIFA2ICAgIFA1ICAgIFA0ICAgIFAzICAgIFAyICAgIFAxICAgIFAwCisgKiBieXRlNyAgUDE1ICAgUDE0ICAgUDEzICAgUDEyICAgUDExICAgUDEwICAgUDkgICAgUDgKKyAqCisgKiAocmV0dXJuZWQgYXMgUmVwb3J0IDMgLSBhYnNvbHV0ZSBjb29yZGluYXRlcyBmcm9tIHRoZSBtb3VzZSkKKyAqCisgKiAgICAgICAgYml0NyAgYml0NiAgYml0NSAgYml0NCAgYml0MyAgYml0MiAgYml0MSAgYml0MAorICogYnl0ZTAgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAxICAgICAwCisgKiBieXRlMSAgWDcgICAgWDYgICAgWDUgICAgWDQgICAgWDMgICAgWDIgICAgWDEgICAgWDAKKyAqIGJ5dGUyICBYMTUgICBYMTQgICBYMTMgICBYMTIgICBYMTEgICBYMTAgICBYOSAgICBYOAorICogYnl0ZTMgIFk3ICAgIFk2ICAgIFk1ICAgIFk0ICAgIFkzICAgIFkyICAgIFkxICAgIFkwCisgKiBieXRlNCAgWTE1ICAgWTE0ICAgWTEzICAgWTEyICAgWTExICAgWTEwICAgWTkgICAgWTgKKyAqIGJ5dGU1ICAgKiAgICAgKiAgICAgKiAgICBCUzIgICBCUzEgICBUaXAgICBJUiAgICBEVgorICogYnl0ZTYgIFA3ICAgIFA2ICAgIFA1ICAgIFA0ICAgIFAzICAgIFAyICAgIFAxICAgIFAwCisgKiBieXRlNyAgUDE1ICAgUDE0ICAgUDEzICAgUDEyICAgUDExICAgUDEwICAgUDkgICAgUDgKKyAqCisgKiAocmV0dXJuZWQgYXMgUmVwb3J0IDQgLSBtYWNyb2tleXMgZnJvbSB0aGUgc3R5bHVzKQorICoKKyAqICAgICAgICBiaXQ3ICBiaXQ2ICBiaXQ1ICBiaXQ0ICBiaXQzICBiaXQyICBiaXQxICBiaXQwCisgKiBieXRlMCAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDEgICAgIDAgICAgIDAKKyAqIGJ5dGUxICAgMCAgICAgMCAgICAgMCAgICBCUzIgICBCUyAgICBUaXAgICBJUiAgICBEVgorICogYnl0ZTIgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAxICAgICAwCisgKiBieXRlMyAgIDAgICAgIDAgICAgIDAgICAgSzQgICAgSzMgICAgSzIgICAgSzEgICAgSzAKKyAqIGJ5dGU0ICBQNyAgICBQNiAgICBQNSAgICBQNCAgICBQMyAgICBQMiAgICBQMSAgICBQMAorICogYnl0ZTUgIFAxNSAgIFAxNCAgIFAxMyAgIFAxMiAgIFAxMSAgIFAxMCAgIFA5ICAgIFA4CisgKgorICogKHJldHVybmVkIGFzIFJlcG9ydCA1IC0gbWFjcm9rZXlzIGZyb20gdGhlIG1vdXNlKQorICoKKyAqICAgICAgICBiaXQ3ICBiaXQ2ICBiaXQ1ICBiaXQ0ICBiaXQzICBiaXQyICBiaXQxICBiaXQwCisgKiBieXRlMCAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDAgICAgIDEgICAgIDAgICAgIDAKKyAqIGJ5dGUxICAgMCAgICAgMCAgICAgMCAgICBCUzIgICBCUyAgICBUaXAgICBJUiAgICBEVgorICogYnl0ZTIgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAwICAgICAxICAgICAwCisgKiBieXRlMyAgIDAgICAgIDAgICAgIDAgICAgSzQgICAgSzMgICAgSzIgICAgSzEgICAgSzAKKyAqIGJ5dGU0ICBQNyAgICBQNiAgICBQNSAgICBQNCAgICBQMyAgICBQMiAgICBQMSAgICBQMAorICogYnl0ZTUgIFAxNSAgIFAxNCAgIFAxMyAgIFAxMiAgIFAxMSAgIFAxMCAgIFA5ICAgIFA4CisgKgorICogSVI6IEluIFJhbmdlID0gUHJveGltaXR5IG9uCisgKiBEViA9IERhdGEgVmFsaWQKKyAqIEJTID0gQmFycmVsIFN3aXRjaCAoYXMgaW4sIG1hY3JvIGtleXMpCisgKiBCUzIgYWxzbyByZWZlcnJlZCB0byBhcyBUYWJsZXQgUGljaworICoKKyAqIENvbW1hbmQgU3VtbWFyeToKKyAqCisgKiBVc2UgcmVwb3J0X3R5cGUgQ09OVFJPTCAoMykKKyAqIFVzZSByZXBvcnRfaWQgICAyCisgKgorICogQ29tbWFuZC9EYXRhICAgIERlc2NyaXB0aW9uICAgICBSZXR1cm4gQnl0ZXMgICAgUmV0dXJuIFZhbHVlCisgKiAweDEwLzB4MDAgICAgICAgU3dpdGNoVG9Nb3VzZSAgICAgICAwCisgKiAweDEwLzB4MDEgICAgICAgU3dpdGNoVG9UYWJsZXQgICAgICAwCisgKiAweDE4LzB4MDQgICAgICAgU2V0UmVzb2x1dGlvbiAgICAgICAwIAorICogMHgxMi8weEZGICAgICAgIEF1dG9HYWluT24gICAgICAgICAgMAorICogMHgxNy8weDAwICAgICAgIEZpbHRlck9uICAgICAgICAgICAgMAorICogMHgwMS8weDAwICAgICAgIEdldFhFeHRlbnNpb24gICAgICAgMiAgICAgICAgICAgTWF4WAorICogMHgwMS8weDAxICAgICAgIEdldFlFeHRlbnNpb24gICAgICAgMiAgICAgICAgICAgTWF4WQorICogMHgwMi8weDAwICAgICAgIEdldE1vZGVsQ29kZSAgICAgICAgMiAgICAgICAgICAgTW9kZWxDb2RlID0gTE9CWVRFCisgKiAweDAzLzB4MDAgICAgICAgR2V0T0RNQ29kZSAgICAgICAgICAyICAgICAgICAgICBPRE1Db2RlCisgKiAweDA4LzB4MDAgICAgICAgR2V0UHJlc3N1cmVMZXZlbHMgICAyICAgICAgICAgICA9NTEyCisgKiAweDA0LzB4MDAgICAgICAgR2V0RmlybXdhcmVWZXJzaW9uICAyICAgICAgICAgICBGaXJtd2FyZSBWZXJzaW9uCisgKiAweDExLzB4MDIgICAgICAgRW5hYmxlTWFjcm9LZXlzICAgICAwCisgKgorICogVG8gaW5pdGlhbGl6ZSB0aGUgdGFibGV0OgorICoKKyAqICgxKSBTZW5kIFJlc29sdXRpb241MDBMUEkgKENvbW1hbmQpCisgKiAoMikgUXVlcnkgZm9yIE1vZGVsIGNvZGUgKE9wdGlvbiBSZXBvcnQpCisgKiAoMykgUXVlcnkgZm9yIE9ETSBjb2RlIChPcHRpb24gUmVwb3J0KQorICogKDQpIFF1ZXJ5IGZvciBmaXJtd2FyZSAoT3B0aW9uIFJlcG9ydCkKKyAqICg1KSBRdWVyeSBmb3IgR2V0WEV4dGVuc2lvbiAoT3B0aW9uIFJlcG9ydCkKKyAqICg2KSBRdWVyeSBmb3IgR2V0WUV4dGVuc2lvbiAoT3B0aW9uIFJlcG9ydCkKKyAqICg3KSBRdWVyeSBmb3IgR2V0UHJlc3N1cmVMZXZlbHMgKE9wdGlvbiBSZXBvcnQpCisgKiAoOCkgU3dpdGNoVG9UYWJsZXQgZm9yIEFic29sdXRlIGNvb3JkaW5hdGVzLCBvcgorICogICAgIFN3aXRjaFRvTW91c2UgZm9yIFJlbGF0aXZlIGNvb3JkaW5hdGVzIChDb21tYW5kKQorICogKDkpIEVuYWJsZU1hY3JvS2V5cyAoQ29tbWFuZCkKKyAqICgxMCkgRmlsdGVyT24gKENvbW1hbmQpCisgKiAoMTEpIEF1dG9HYWluT24gKENvbW1hbmQpCisgKgorICogKFN0ZXAgOSBjYW4gYmUgb21pdHRlZCwgYnV0IHlvdSdsbCB0aGVuIGhhdmUgbm8gZnVuY3Rpb24ga2V5cy4pCisgKi8KKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0FJUFRFSwkJCQkweDA4Y2EKKyNkZWZpbmUgVVNCX1JFUV9HRVRfUkVQT1JUCQkJCTB4MDEKKyNkZWZpbmUgVVNCX1JFUV9TRVRfUkVQT1JUCQkJCTB4MDkKKworCS8qIFBvaW50ZXJNb2RlIGNvZGVzCisJICovCisjZGVmaW5lIEFJUFRFS19QT0lOVEVSX09OTFlfTU9VU0VfTU9ERQkJCTAKKyNkZWZpbmUgQUlQVEVLX1BPSU5URVJfT05MWV9TVFlMVVNfTU9ERQkJCTEKKyNkZWZpbmUgQUlQVEVLX1BPSU5URVJfRUlUSEVSX01PREUJCQkyCisKKyNkZWZpbmUgQUlQVEVLX1BPSU5URVJfQUxMT1dfTU9VU0VfTU9ERShhKQkJXAorCShhID09IEFJUFRFS19QT0lOVEVSX09OTFlfTU9VU0VfTU9ERSB8fAkJXAorCSBhID09IEFJUFRFS19QT0lOVEVSX0VJVEhFUl9NT0RFKQorI2RlZmluZSBBSVBURUtfUE9JTlRFUl9BTExPV19TVFlMVVNfTU9ERShhKQkJXAorCShhID09IEFJUFRFS19QT0lOVEVSX09OTFlfU1RZTFVTX01PREUgfHwJXAorCSBhID09IEFJUFRFS19QT0lOVEVSX0VJVEhFUl9NT0RFKQorCisJLyogQ29vcmRpbmF0ZU1vZGUgY29kZQorCSAqLworI2RlZmluZSBBSVBURUtfQ09PUkRJTkFURV9SRUxBVElWRV9NT0RFCQkJMAorI2RlZmluZSBBSVBURUtfQ09PUkRJTkFURV9BQlNPTFVURV9NT0RFCQkJMQorCisgICAgICAgLyogWFRpbHQgYW5kIFlUaWx0IHZhbHVlcworICAgICAgICAqLworI2RlZmluZSBBSVBURUtfVElMVF9NSU4JCQkJCSgtMTI4KQorI2RlZmluZSBBSVBURUtfVElMVF9NQVgJCQkJCTEyNworI2RlZmluZSBBSVBURUtfVElMVF9ESVNBQkxFCQkJCSgtMTAxMDEpCisKKwkvKiBXaGVlbCB2YWx1ZXMKKwkgKi8KKyNkZWZpbmUgQUlQVEVLX1dIRUVMX01JTgkJCQkwCisjZGVmaW5lIEFJUFRFS19XSEVFTF9NQVgJCQkJMTAyNAorI2RlZmluZSBBSVBURUtfV0hFRUxfRElTQUJMRQkJCQkoLTEwMTAxKQorCisJLyogVG9vbENvZGUgdmFsdWVzLCB3aGljaCBCVFcgYXJlIDB4MTQwIC4uIDB4MTRmCisJICogV2UgaGF2ZSB0aGluZ3Mgc2V0IHVwIHN1Y2ggdGhhdCBpZiBUT09MX0JVVFRPTl9GSVJFRF9CSVQgaXMKKwkgKiBub3Qgc2V0LCB3ZSdsbCBzZW5kIG9uZSBpbnN0YW5jZSBvZiBBSVBURUtfVE9PTF9CVVRUT05feHh4LgorCSAqCisJICogV2hlbmV2ZXIgdGhlIHVzZXIgcmVzZXRzIHRoZSB2YWx1ZSwgVE9PTF9CVVRUT05fRklSRURfQklUIHdpbGwKKwkgKiBnZXQgcmVzZXQuCisJICovCisjZGVmaW5lIFRPT0xfQlVUVE9OKHgpCQkJCQkoKHgpICYgMHgxNGYpCisjZGVmaW5lIFRPT0xfQlVUVE9OX0ZJUkVEKHgpCQkJCSgoeCkgJiAweDIwMCkKKyNkZWZpbmUgVE9PTF9CVVRUT05fRklSRURfQklUCQkJCTB4MjAwCisJLyogdG9vbE1vZGUgY29kZXMKKwkgKi8KKyNkZWZpbmUgQUlQVEVLX1RPT0xfQlVUVE9OX1BFTl9NT0RFCQkJQlROX1RPT0xfUEVOCisjZGVmaW5lIEFJUFRFS19UT09MX0JVVFRPTl9QRU5fTU9ERQkJCUJUTl9UT09MX1BFTgorI2RlZmluZSBBSVBURUtfVE9PTF9CVVRUT05fUEVOQ0lMX01PREUJCQlCVE5fVE9PTF9QRU5DSUwKKyNkZWZpbmUgQUlQVEVLX1RPT0xfQlVUVE9OX0JSVVNIX01PREUJCQlCVE5fVE9PTF9CUlVTSAorI2RlZmluZSBBSVBURUtfVE9PTF9CVVRUT05fQUlSQlJVU0hfTU9ERQkJQlROX1RPT0xfQUlSQlJVU0gKKyNkZWZpbmUgQUlQVEVLX1RPT0xfQlVUVE9OX0VSQVNFUl9NT0RFCQkJQlROX1RPT0xfUlVCQkVSCisjZGVmaW5lIEFJUFRFS19UT09MX0JVVFRPTl9NT1VTRV9NT0RFCQkJQlROX1RPT0xfTU9VU0UKKyNkZWZpbmUgQUlQVEVLX1RPT0xfQlVUVE9OX0xFTlNfTU9ERQkJCUJUTl9UT09MX0xFTlMKKworCS8qIERpYWdub3N0aWMgbWVzc2FnZSBjb2RlcworCSAqLworI2RlZmluZSBBSVBURUtfRElBR05PU1RJQ19OQQkJCQkwCisjZGVmaW5lIEFJUFRFS19ESUFHTk9TVElDX1NFTkRJTkdfUkVMQVRJVkVfSU5fQUJTT0xVVEUJMQorI2RlZmluZSBBSVBURUtfRElBR05PU1RJQ19TRU5ESU5HX0FCU09MVVRFX0lOX1JFTEFUSVZFCTIKKyNkZWZpbmUgQUlQVEVLX0RJQUdOT1NUSUNfVE9PTF9ESVNBTExPV0VECQkzCisKKwkvKiBUaW1lIHRvIHdhaXQgKGluIG1zKSB0byBoZWxwIG1hc2sgaGFuZCBqaXR0ZXJpbmcgCisJICogd2hlbiBwcmVzc2luZyB0aGUgc3R5bHVzIGJ1dHRvbnMuCisJICovCisjZGVmaW5lIEFJUFRFS19KSVRURVJfREVMQVlfREVGQVVMVAkJCTUwCisKKwkvKiBUaW1lIHRvIHdhaXQgKGluIG1zKSBpbi1iZXR3ZWVuIHNlbmRpbmcgdGhlIHRhYmxldAorCSAqIGEgY29tbWFuZCBhbmQgYmVnaW5uaW5nIHRoZSBwcm9jZXNzIG9mIHJlYWRpbmcgdGhlIHJldHVybgorCSAqIHNlcXVlbmNlIGZyb20gdGhlIHRhYmxldC4KKwkgKi8KKyNkZWZpbmUgQUlQVEVLX1BST0dSQU1NQUJMRV9ERUxBWV8yNQkJMjUKKyNkZWZpbmUgQUlQVEVLX1BST0dSQU1NQUJMRV9ERUxBWV81MAkJNTAKKyNkZWZpbmUgQUlQVEVLX1BST0dSQU1NQUJMRV9ERUxBWV8xMDAJCTEwMAorI2RlZmluZSBBSVBURUtfUFJPR1JBTU1BQkxFX0RFTEFZXzIwMAkJMjAwCisjZGVmaW5lIEFJUFRFS19QUk9HUkFNTUFCTEVfREVMQVlfMzAwCQkzMDAKKyNkZWZpbmUgQUlQVEVLX1BST0dSQU1NQUJMRV9ERUxBWV80MDAJCTQwMAorI2RlZmluZSBBSVBURUtfUFJPR1JBTU1BQkxFX0RFTEFZX0RFRkFVTFQJQUlQVEVLX1BST0dSQU1NQUJMRV9ERUxBWV80MDAKKworCS8qIE1vdXNlIGJ1dHRvbiBwcm9ncmFtbWluZworCSAqLworI2RlZmluZSBBSVBURUtfTU9VU0VfTEVGVF9CVVRUT04JCTB4MDEKKyNkZWZpbmUgQUlQVEVLX01PVVNFX1JJR0hUX0JVVFRPTgkJMHgwMgorI2RlZmluZSBBSVBURUtfTU9VU0VfTUlERExFX0JVVFRPTgkJMHgwNAorCisJLyogU3R5bHVzIGJ1dHRvbiBwcm9ncmFtbWluZworCSAqLworI2RlZmluZSBBSVBURUtfU1RZTFVTX0xPV0VSX0JVVFRPTgkJMHgwOAorI2RlZmluZSBBSVBURUtfU1RZTFVTX1VQUEVSX0JVVFRPTgkJMHgxMAorCisJLyogTGVuZ3RoIG9mIGluY29taW5nIHBhY2tldCBmcm9tIHRoZSB0YWJsZXQKKwkgKi8KKyNkZWZpbmUgQUlQVEVLX1BBQ0tFVF9MRU5HVEgJCQk4CisKKwkvKiBXZSByZXBvcnQgaW4gRVZfTUlTQyBib3RoIHRoZSBwcm94aW1pdHkgYW5kCisJICogd2hldGhlciB0aGUgcmVwb3J0IGNhbWUgZnJvbSB0aGUgc3R5bHVzLCB0YWJsZXQgbW91c2UKKwkgKiBvciAidW5rbm93biIgLS0gVW5rbm93biB3aGVuIHRoZSB0YWJsZXQgaXMgaW4gcmVsYXRpdmUKKwkgKiBtb2RlLCBiZWNhdXNlIHdlIG9ubHkgZ2V0IHJlcG9ydCAxJ3MuCisJICovCisjZGVmaW5lIEFJUFRFS19SRVBPUlRfVE9PTF9VTktOT1dOCQkweDEwCisjZGVmaW5lIEFJUFRFS19SRVBPUlRfVE9PTF9TVFlMVVMJCTB4MjAKKyNkZWZpbmUgQUlQVEVLX1JFUE9SVF9UT09MX01PVVNFCQkweDQwCisKK3N0YXRpYyBpbnQgcHJvZ3JhbW1hYmxlRGVsYXkgPSBBSVBURUtfUFJPR1JBTU1BQkxFX0RFTEFZX0RFRkFVTFQ7CitzdGF0aWMgaW50IGppdHRlckRlbGF5ID0gQUlQVEVLX0pJVFRFUl9ERUxBWV9ERUZBVUxUOworCitzdHJ1Y3QgYWlwdGVrX2ZlYXR1cmVzIHsKKwlpbnQgb2RtQ29kZTsJCS8qIFRhYmxldCBtYW51ZmFjdHVyZXIgY29kZSAgICAgICAqLworCWludCBtb2RlbENvZGU7CQkvKiBUYWJsZXQgbW9kZWwgY29kZSAobm90IHVuaXF1ZSkgKi8KKwlpbnQgZmlybXdhcmVDb2RlOwkvKiBwcm9tL2VlcHJvbSB2ZXJzaW9uICAgICAgICAgICAgKi8KKwljaGFyIHVzYlBhdGhbNjQgKyAxXTsJLyogZGV2aWNlJ3MgcGh5c2ljYWwgdXNiIHBhdGggICAgICovCisJY2hhciBpbnB1dFBhdGhbNjQgKyAxXTsJLyogaW5wdXQgZGV2aWNlIHBhdGggICAgICAgICAgICAgICovCit9OworCitzdHJ1Y3QgYWlwdGVrX3NldHRpbmdzIHsKKwlpbnQgcG9pbnRlck1vZGU7CS8qIHN0eWx1cy0sIG1vdXNlLW9ubHkgb3IgZWl0aGVyICovCisJaW50IGNvb3JkaW5hdGVNb2RlOwkvKiBhYnNvbHV0ZS9yZWxhdGl2ZSBjb29yZHMgICAgICAqLworCWludCB0b29sTW9kZTsJCS8qIHBlbiwgcGVuY2lsLCBicnVzaCwgZXRjLiB0b29sICovCisJaW50IHhUaWx0OwkJLyogc3ludGhldGljIHhUaWx0IGFtb3VudCAgICAgICAgKi8KKwlpbnQgeVRpbHQ7CQkvKiBzeW50aGV0aWMgeVRpbHQgYW1vdW50ICAgICAgICAqLworCWludCB3aGVlbDsJCS8qIHN5bnRoZXRpYyB3aGVlbCBhbW91bnQgICAgICAgICovCisJaW50IHN0eWx1c0J1dHRvblVwcGVyOwkvKiBzdHlsdXMgdXBwZXIgYnRuIGRlbGl2ZXJzLi4uICAqLworCWludCBzdHlsdXNCdXR0b25Mb3dlcjsJLyogc3R5bHVzIGxvd2VyIGJ0biBkZWxpdmVycy4uLiAgKi8KKwlpbnQgbW91c2VCdXR0b25MZWZ0OwkvKiBtb3VzZSBsZWZ0IGJ0biBkZWxpdmVycy4uLiAgICAqLworCWludCBtb3VzZUJ1dHRvbk1pZGRsZTsJLyogbW91c2UgbWlkZGxlIGJ0biBkZWxpdmVycy4uLiAgKi8KKwlpbnQgbW91c2VCdXR0b25SaWdodDsJLyogbW91c2UgcmlnaHQgYnRuIGRlbGl2ZXJzLi4uICAgKi8KKwlpbnQgcHJvZ3JhbW1hYmxlRGVsYXk7CS8qIGRlbGF5IGZvciB0YWJsZXQgcHJvZ3JhbW1pbmcgICovCisJaW50IGppdHRlckRlbGF5OwkvKiBkZWxheSBmb3IgaGFuZCBqaXR0ZXJpbmcgICAgICAqLworfTsKKworc3RydWN0IGFpcHRlayB7CisJc3RydWN0IGlucHV0X2RldiBpbnB1dGRldjsJCS8qIGlucHV0IGRldmljZSBzdHJ1Y3QgICAgICAgICAgICovCisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsJCS8qIHVzYiBkZXZpY2Ugc3RydWN0ICAgICAgICAgICAgICovCisJc3RydWN0IHVyYiAqdXJiOwkJCS8qIHVyYiBmb3IgaW5jb21pbmcgcmVwb3J0cyAgICAgICovCisJZG1hX2FkZHJfdCBkYXRhX2RtYTsJCQkvKiBvdXIgZG1hIHN0dWZmYWdlICAgICAgICAgICAgICAqLworCXN0cnVjdCBhaXB0ZWtfZmVhdHVyZXMgZmVhdHVyZXM7CS8qIHRhYmxldCdzIGFycmF5IG9mIGZlYXR1cmVzICAgICovCisJc3RydWN0IGFpcHRla19zZXR0aW5ncyBjdXJTZXR0aW5nOwkvKiB0YWJsZXQncyBjdXJyZW50IHByb2dyYW1tYWJsZSAqLworCXN0cnVjdCBhaXB0ZWtfc2V0dGluZ3MgbmV3U2V0dGluZzsJLyogLi4uIGFuZCBuZXcgcGFyYW0gc2V0dGluZ3MgICAgKi8KKwl1bnNpZ25lZCBpbnQgaWZudW07CQkJLyogaW50ZXJmYWNlIG51bWJlciBmb3IgSU8gICAgICAgKi8KKwlpbnQgb3BlbkNvdW50OwkJCQkvKiBtb2R1bGUgdXNlIGNvdW50ZXIgICAgICAgICAgICAqLworCWludCBkaWFnbm9zdGljOwkJCQkvKiB0YWJsZXQgZGlhZ25vc3RpYyBjb2RlcyAgICAgICAqLworCXVuc2lnbmVkIGxvbmcgZXZlbnRDb3VudDsJCS8qIGV2ZW50IGNvdW50ICAgICAgICAgICAgICAgICAgICovCisJaW50IGluRGVsYXk7CQkJCS8qIGppdHRlcjogaW4gaml0dGVyIGRlbGF5PyAgICAgICovCisJdW5zaWduZWQgbG9uZyBlbmREZWxheTsJCQkvKiBqaXR0ZXI6IHRpbWUgd2hlbiBkZWxheSBlbmRzICAqLworCWludCBwcmV2aW91c0ppdHRlcmFibGU7CQkJLyogaml0dGVyYWJsZSBwcmV2IHZhbHVlICAgICAqLworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CQkJLyogaW5jb21pbmcgcGFja2V0IGRhdGEgICAgICAgICAgKi8KK307CisKKy8qCisgKiBQZXJtaXQgZWFzeSBsb29rdXAgb2Yga2V5Ym9hcmQgZXZlbnRzIHRvIHNlbmQsIHZlcnN1cworICogdGhlIGJpdG1hcCB3aGljaCBjb21lcyBmcm9tIHRoZSB0YWJsZXQuIFRoaXMgaGlkZXMgdGhlCisgKiBpc3N1ZSB0aGF0IHRoZSBGX2tleXMgYXJlIG5vdCBzZXF1ZW50aWFsbHkgbnVtYmVyZWQuCisgKi8KK3N0YXRpYyBpbnQgbWFjcm9LZXlFdmVudHNbXSA9IHsKKwlLRVlfRVNDLCBLRVlfRjEsIEtFWV9GMiwgS0VZX0YzLCBLRVlfRjQsIEtFWV9GNSwKKwlLRVlfRjYsIEtFWV9GNywgS0VZX0Y4LCBLRVlfRjksIEtFWV9GMTAsIEtFWV9GMTEsCisJS0VZX0YxMiwgS0VZX0YxMywgS0VZX0YxNCwgS0VZX0YxNSwgS0VZX0YxNiwgS0VZX0YxNywKKwlLRVlfRjE4LCBLRVlfRjE5LCBLRVlfRjIwLCBLRVlfRjIxLCBLRVlfRjIyLCBLRVlfRjIzLAorCUtFWV9GMjQsIEtFWV9TVE9QLCBLRVlfQUdBSU4sIEtFWV9QUk9QUywgS0VZX1VORE8sCisJS0VZX0ZST05ULCBLRVlfQ09QWSwgS0VZX09QRU4sIEtFWV9QQVNURSwgMAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSZWxhdGl2ZSByZXBvcnRzIGRlbGl2ZXIgdmFsdWVzIGluIDIncyBjb21wbGVtZW50IGZvcm1hdCB0bworICogZGVhbCB3aXRoIG5lZ2F0aXZlIG9mZnNldHMuCisgKi8KK3N0YXRpYyBpbnQgYWlwdGVrX2NvbnZlcnRfZnJvbV8yc19jb21wbGVtZW50KHVuc2lnbmVkIGNoYXIgYykKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgYiA9IGM7CisJaW50IG5lZ2F0ZSA9IDA7CisKKwlpZiAoKGIgJiAweDgwKSAhPSAwKSB7CisJCWIgPSB+YjsKKwkJYi0tOworCQluZWdhdGUgPSAxOworCX0KKwlyZXQgPSBiOworCXJldCA9IChuZWdhdGUgPT0gMSkgPyAtcmV0IDogcmV0OworCXJldHVybiByZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogYWlwdGVrX2lycSBjYW4gcmVjZWl2ZSBvbmUgb2Ygc2l4IHBvdGVudGlhbCByZXBvcnRzLgorICogVGhlIGRvY3VtZW50YXRpb24gZm9yIGVhY2ggaXMgaW4gdGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uLgorICoKKyAqIFRoZSB0YWJsZXQgcmVwb3J0cyBvbiBzZXZlcmFsIGF0dHJpYnV0ZXMgcGVyIGludm9jYXRpb24gb2YKKyAqIGFpcHRla19pcnEuIEJlY2F1c2UgdGhlIExpbnV4IElucHV0IEV2ZW50IHN5c3RlbSBhbGxvd3MgdGhlCisgKiB0cmFuc21pc3Npb24gb2YgT05FIGF0dHJpYnV0ZSBwZXIgaW5wdXRfcmVwb3J0X3h4eCgpIGNhbGwsCisgKiBjb2xsYXRpb24gaGFzIHRvIGJlIGRvbmUgb24gdGhlIG90aGVyIGVuZCB0byByZWNvbnN0aXR1dGUKKyAqIGEgY29tcGxldGUgdGFibGV0IHJlcG9ydC4gRnVydGhlciwgdGhlIG51bWJlciBvZiBJbnB1dCBFdmVudCByZXBvcnRzCisgKiBzdWJtaXR0ZWQgdmFyaWVzLCBkZXBlbmRpbmcgb24gd2hhdCBVU0IgcmVwb3J0IHR5cGUsIGFuZCBjaXJjdW1zdGFuY2UuCisgKiBUbyBkZWFsIHdpdGggdGhpcywgRVZfTVNDIGlzIHVzZWQgdG8gaW5kaWNhdGUgYW4gJ2VuZC1vZi1yZXBvcnQnCisgKiBtZXNzYWdlLiBUaGlzIGhhcyBiZWVuIGFuIHVuZG9jdW1lbnRlZCBjb252ZW50aW9uIHVuZGVyc3Rvb2QgYnkgdGhlIGtlcm5lbAorICogdGFibGV0IGRyaXZlciBhbmQgY2xpZW50cyBzdWNoIGFzIGdwbSBhbmQgWEZyZWU4NidzIHRhYmxldCBkcml2ZXJzLgorICoKKyAqIE9mIHRoZSBpbmZvcm1hdGlvbiByZWNlaXZlZCBmcm9tIHRoZSB0YWJsZXQsIHRoZSBvbmUgcGllY2UgSQorICogY2Fubm90IHRyYW5zbWl0IGlzIHRoZSBwcm94aW1pdHkgYml0ICh3aXRob3V0IHJlc29ydGluZyB0byBhbiBFVl9NU0MKKyAqIGNvbnZlbnRpb24gYWJvdmUuKSBJIHRoZXJlZm9yZSBoYXZlIHRha2VuIG92ZXIgUkVMX01JU0MgYW5kIEFCU19NSVNDCisgKiAoZm9yIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSByZXBvcnRzLCByZXNwZWN0aXZlbHkpIGZvciBjb21tdW5pY2F0aW5nCisgKiBQcm94aW1pdHkuIFdoeSB0d28gZXZlbnRzPyBJIHRob3VnaHQgaXQgaW50ZXJlc3RpbmcgdG8ga25vdyBpZiB0aGUKKyAqIFByb3hpbWl0eSBldmVudCBvY2N1cmVkIHdoaWxlIHRoZSB0YWJsZXQgd2FzIGluIGFic29sdXRlIG9yIHJlbGF0aXZlCisgKiBtb2RlLgorICoKKyAqIE90aGVyIHRhYmxldHMgdXNlIHRoZSBub3Rpb24gb2YgYSBjZXJ0YWluIG1pbmltdW0gc3R5bHVzIHByZXNzdXJlCisgKiB0byBpbmZlciBwcm94aW1pdHkuIFdoaWxlIHRoYXQgY291bGQgaGF2ZSBiZWVuIGRvbmUsIHRoYXQgaXMgeWV0CisgKiBhbm90aGVyICdieSBjb252ZW50aW9uJyBiZWhhdmlvciwgdGhlIGRvY3VtZW50YXRpb24gZm9yIHdoaWNoCisgKiB3b3VsZCBiZSBzcHJlYWQgYmV0d2VlbiB0d28gKG9yIG1vcmUpIHBpZWNlcyBvZiBzb2Z0d2FyZS4KKyAqCisgKiBFVl9NU0MgdXNhZ2Ugd2FzIHRlcm1pbmF0ZWQgZm9yIHRoaXMgcHVycG9zZSBpbiBMaW51eCAyLjUueCwgYW5kCisgKiByZXBsYWNlZCB3aXRoIHRoZSBpbnB1dF9zeW5jKCkgbWV0aG9kICh3aGljaCBlbWl0cyBFVl9TWU4uKQorICovCisKK3N0YXRpYyB2b2lkIGFpcHRla19pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IGFpcHRlay0+ZGF0YTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldiA9ICZhaXB0ZWstPmlucHV0ZGV2OworCWludCBqaXR0ZXJhYmxlID0gMDsKKwlpbnQgcmV0dmFsLCBtYWNybywgeCwgeSwgeiwgbGVmdCwgcmlnaHQsIG1pZGRsZSwgcCwgZHYsIHRpcCwgYnMsIHBjazsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIFN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIFRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLAorCQkgICAgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogU2VlIGlmIHdlIGFyZSBpbiBhIGRlbGF5IGxvb3AgLS0gdGhyb3cgb3V0IHJlcG9ydCBpZiB0cnVlLgorCSAqLworCWlmIChhaXB0ZWstPmluRGVsYXkgPT0gMSAmJiB0aW1lX2FmdGVyKGFpcHRlay0+ZW5kRGVsYXksIGppZmZpZXMpKSB7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhaXB0ZWstPmluRGVsYXkgPSAwOworCWFpcHRlay0+ZXZlbnRDb3VudCsrOworCisJLyogUmVwb3J0IDEgZGVsaXZlcnMgcmVsYXRpdmUgY29vcmRpbmF0ZXMgd2l0aCBlaXRoZXIgYSBzdHlsdXMKKwkgKiBvciB0aGUgbW91c2UuIFlvdSBkbyBub3Qga25vdywgaG93ZXZlciwgd2hpY2ggaW5wdXQKKwkgKiB0b29sIGdlbmVyYXRlZCB0aGUgZXZlbnQuCisJICovCisJaWYgKGRhdGFbMF0gPT0gMSkgeworCQlpZiAoYWlwdGVrLT5jdXJTZXR0aW5nLmNvb3JkaW5hdGVNb2RlID09CisJCSAgICBBSVBURUtfQ09PUkRJTkFURV9BQlNPTFVURV9NT0RFKSB7CisJCQlhaXB0ZWstPmRpYWdub3N0aWMgPQorCQkJICAgIEFJUFRFS19ESUFHTk9TVElDX1NFTkRJTkdfUkVMQVRJVkVfSU5fQUJTT0xVVEU7CisJCX0gZWxzZSB7CisJCQlpbnB1dF9yZWdzKGlucHV0ZGV2LCByZWdzKTsKKworCQkJeCA9IGFpcHRla19jb252ZXJ0X2Zyb21fMnNfY29tcGxlbWVudChkYXRhWzJdKTsKKwkJCXkgPSBhaXB0ZWtfY29udmVydF9mcm9tXzJzX2NvbXBsZW1lbnQoZGF0YVszXSk7CisKKwkJCS8qIGppdHRlcmFibGUga2VlcHMgdHJhY2sgb2Ygd2hldGhlciBhbnkgYnV0dG9uIGhhcyBiZWVuIHByZXNzZWQuCisJCQkgKiBXZSdyZSBhbHNvIHVzaW5nIGl0IHRvIHJlbWFwIHRoZSBwaHlzaWNhbCBtb3VzZSBidXR0b24gbWFzaworCQkJICogdG8gcHNldWRvLXNldHRpbmdzLiAoV2UgZG9uJ3Qgc3BlY2lmaWNhbGx5IGNhcmUgYWJvdXQgaXQncworCQkJICogdmFsdWUgYWZ0ZXIgbW92aW5nL3RyYW5zcG9zaW5nIG1vdXNlIGJ1dHRvbiBiaXRtYXNrcywgZXhjZXB0CisJCQkgKiB0aGF0IGEgbm9uLXplcm8gdmFsdWUgaW5kaWNhdGVzIHRoYXQgb25lIG9yIG1vcmUKKwkJCSAqIG1vdXNlIGJ1dHRvbiB3YXMgcHJlc3NlZC4pCisJCQkgKi8KKwkJCWppdHRlcmFibGUgPSBkYXRhWzVdICYgMHgwNzsKKworCQkJbGVmdCA9IChkYXRhWzVdICYgYWlwdGVrLT5jdXJTZXR0aW5nLm1vdXNlQnV0dG9uTGVmdCkgIT0gMCA/IDEgOiAwOworCQkJcmlnaHQgPSAoZGF0YVs1XSAmIGFpcHRlay0+Y3VyU2V0dGluZy5tb3VzZUJ1dHRvblJpZ2h0KSAhPSAwID8gMSA6IDA7CisJCQltaWRkbGUgPSAoZGF0YVs1XSAmIGFpcHRlay0+Y3VyU2V0dGluZy5tb3VzZUJ1dHRvbk1pZGRsZSkgIT0gMCA/IDEgOiAwOworCisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBCVE5fTEVGVCwgbGVmdCk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBCVE5fTUlERExFLCBtaWRkbGUpOworCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwgQlROX1JJR0hULCByaWdodCk7CisJCQlpbnB1dF9yZXBvcnRfcmVsKGlucHV0ZGV2LCBSRUxfWCwgeCk7CisJCQlpbnB1dF9yZXBvcnRfcmVsKGlucHV0ZGV2LCBSRUxfWSwgeSk7CisJCQlpbnB1dF9yZXBvcnRfcmVsKGlucHV0ZGV2LCBSRUxfTUlTQywgMSB8IEFJUFRFS19SRVBPUlRfVE9PTF9VTktOT1dOKTsKKworCQkJLyogV2hlZWwgc3VwcG9ydCBpcyBpbiB0aGUgZm9ybSBvZiBhIHNpbmdsZS1ldmVudAorCQkJICogZmlyaW5nLgorCQkJICovCisJCQlpZiAoYWlwdGVrLT5jdXJTZXR0aW5nLndoZWVsICE9IEFJUFRFS19XSEVFTF9ESVNBQkxFKSB7CisJCQkJaW5wdXRfcmVwb3J0X3JlbChpbnB1dGRldiwgUkVMX1dIRUVMLAorCQkJCQkJIGFpcHRlay0+Y3VyU2V0dGluZy53aGVlbCk7CisJCQkJYWlwdGVrLT5jdXJTZXR0aW5nLndoZWVsID0gQUlQVEVLX1dIRUVMX0RJU0FCTEU7CisJCQl9CisJCQlpbnB1dF9zeW5jKGlucHV0ZGV2KTsKKwkJfQorCX0KKwkvKiBSZXBvcnQgMiBpcyBkZWxpdmVyZWQgb25seSBieSB0aGUgc3R5bHVzLCBhbmQgZGVsaXZlcnMKKwkgKiBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKwkgKi8KKwllbHNlIGlmIChkYXRhWzBdID09IDIpIHsKKwkJaWYgKGFpcHRlay0+Y3VyU2V0dGluZy5jb29yZGluYXRlTW9kZSA9PSBBSVBURUtfQ09PUkRJTkFURV9SRUxBVElWRV9NT0RFKSB7CisJCQlhaXB0ZWstPmRpYWdub3N0aWMgPSBBSVBURUtfRElBR05PU1RJQ19TRU5ESU5HX0FCU09MVVRFX0lOX1JFTEFUSVZFOworCQl9IGVsc2UgaWYgKCFBSVBURUtfUE9JTlRFUl9BTExPV19TVFlMVVNfTU9ERQorCQkJICAgIChhaXB0ZWstPmN1clNldHRpbmcucG9pbnRlck1vZGUpKSB7CisJCQkJYWlwdGVrLT5kaWFnbm9zdGljID0gQUlQVEVLX0RJQUdOT1NUSUNfVE9PTF9ESVNBTExPV0VEOworCQl9IGVsc2UgeworCQkJaW5wdXRfcmVncyhpbnB1dGRldiwgcmVncyk7CisKKwkJCXggPSBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYgKikgKGRhdGEgKyAxKSkpOworCQkJeSA9IGxlMTZfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fbGUxNiAqKSAoZGF0YSArIDMpKSk7CisJCQl6ID0gbGUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTE2ICopIChkYXRhICsgNikpKTsKKworCQkJcCA9IChkYXRhWzVdICYgMHgwMSkgIT0gMCA/IDEgOiAwOworCQkJZHYgPSAoZGF0YVs1XSAmIDB4MDIpICE9IDAgPyAxIDogMDsKKwkJCXRpcCA9IChkYXRhWzVdICYgMHgwNCkgIT0gMCA/IDEgOiAwOworCisJCQkvKiBVc2Ugaml0dGVyYWJsZSB0byByZS1hcnJhbmdlIGJ1dHRvbiBtYXNrcworCQkJICovCisJCQlqaXR0ZXJhYmxlID0gZGF0YVs1XSAmIDB4MTg7CisKKwkJCWJzID0gKGRhdGFbNV0gJiBhaXB0ZWstPmN1clNldHRpbmcuc3R5bHVzQnV0dG9uTG93ZXIpICE9IDAgPyAxIDogMDsKKwkJCXBjayA9IChkYXRhWzVdICYgYWlwdGVrLT5jdXJTZXR0aW5nLnN0eWx1c0J1dHRvblVwcGVyKSAhPSAwID8gMSA6IDA7CisKKwkJCS8qIGR2IGluZGljYXRlcyAnZGF0YSB2YWxpZCcgKGUuZy4sIHRoZSB0YWJsZXQgaXMgaW4gc3luYworCQkJICogYW5kIGhhcyBkZWxpdmVyZWQgYSAiY29ycmVjdCIgcmVwb3J0KSBXZSB3aWxsIGlnbm9yZQorCQkJICogYWxsICdiYWQnIHJlcG9ydHMuLi4KKwkJCSAqLworCQkJaWYgKGR2ICE9IDApIHsKKwkJCQkvKiBJZiB3ZSd2ZSBub3QgYWxyZWFkeSBzZW50IGEgdG9vbF9idXR0b25fPz8gY29kZSwgZG8KKwkJCQkgKiBzbyBub3cuIFRoZW4gc2V0IEZJUkVEX0JJVCBzbyBpdCB3b24ndCBiZSByZXNlbnQgdW5sZXNzCisJCQkJICogdGhlIHVzZXIgZm9yY2VzIEZJUkVEX0JJVCBvZmYuCisJCQkJICovCisJCQkJaWYgKFRPT0xfQlVUVE9OX0ZJUkVECisJCQkJICAgIChhaXB0ZWstPmN1clNldHRpbmcudG9vbE1vZGUpID09IDApIHsKKwkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwKKwkJCQkJCQkgVE9PTF9CVVRUT04oYWlwdGVrLT5jdXJTZXR0aW5nLnRvb2xNb2RlKSwKKwkJCQkJCQkgMSk7CisJCQkJCWFpcHRlay0+Y3VyU2V0dGluZy50b29sTW9kZSB8PSBUT09MX0JVVFRPTl9GSVJFRF9CSVQ7CisJCQkJfQorCisJCQkJaWYgKHAgIT0gMCkgeworCQkJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0ZGV2LCBBQlNfWCwgeCk7CisJCQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRkZXYsIEFCU19ZLCB5KTsKKwkJCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dGRldiwgQUJTX1BSRVNTVVJFLCB6KTsKKworCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBCVE5fVE9VQ0gsIHRpcCk7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsIEJUTl9TVFlMVVMsIGJzKTsKKwkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwgQlROX1NUWUxVUzIsIHBjayk7CisKKwkJCQkJaWYgKGFpcHRlay0+Y3VyU2V0dGluZy54VGlsdCAhPQorCQkJCQkgICAgQUlQVEVLX1RJTFRfRElTQUJMRSkgeworCQkJCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dGRldiwKKwkJCQkJCQkJIEFCU19USUxUX1gsCisJCQkJCQkJCSBhaXB0ZWstPmN1clNldHRpbmcueFRpbHQpOworCQkJCQl9CisJCQkJCWlmIChhaXB0ZWstPmN1clNldHRpbmcueVRpbHQgIT0gQUlQVEVLX1RJTFRfRElTQUJMRSkgeworCQkJCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dGRldiwKKwkJCQkJCQkJIEFCU19USUxUX1ksCisJCQkJCQkJCSBhaXB0ZWstPmN1clNldHRpbmcueVRpbHQpOworCQkJCQl9CisKKwkJCQkJLyogV2hlZWwgc3VwcG9ydCBpcyBpbiB0aGUgZm9ybSBvZiBhIHNpbmdsZS1ldmVudAorCQkJCQkgKiBmaXJpbmcuCisJCQkJCSAqLworCQkJCQlpZiAoYWlwdGVrLT5jdXJTZXR0aW5nLndoZWVsICE9CisJCQkJCSAgICBBSVBURUtfV0hFRUxfRElTQUJMRSkgeworCQkJCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dGRldiwKKwkJCQkJCQkJIEFCU19XSEVFTCwKKwkJCQkJCQkJIGFpcHRlay0+Y3VyU2V0dGluZy53aGVlbCk7CisJCQkJCQlhaXB0ZWstPmN1clNldHRpbmcud2hlZWwgPSBBSVBURUtfV0hFRUxfRElTQUJMRTsKKwkJCQkJfQorCQkJCX0KKwkJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0ZGV2LCBBQlNfTUlTQywgcCB8IEFJUFRFS19SRVBPUlRfVE9PTF9TVFlMVVMpOworCQkJCWlucHV0X3N5bmMoaW5wdXRkZXYpOworCQkJfQorCQl9CisJfQorCS8qIFJlcG9ydCAzJ3MgY29tZSBmcm9tIHRoZSBtb3VzZSBpbiBhYnNvbHV0ZSBtb2RlLgorCSAqLworCWVsc2UgaWYgKGRhdGFbMF0gPT0gMykgeworCQlpZiAoYWlwdGVrLT5jdXJTZXR0aW5nLmNvb3JkaW5hdGVNb2RlID09IEFJUFRFS19DT09SRElOQVRFX1JFTEFUSVZFX01PREUpIHsKKwkJCWFpcHRlay0+ZGlhZ25vc3RpYyA9IEFJUFRFS19ESUFHTk9TVElDX1NFTkRJTkdfQUJTT0xVVEVfSU5fUkVMQVRJVkU7CisJCX0gZWxzZSBpZiAoIUFJUFRFS19QT0lOVEVSX0FMTE9XX01PVVNFX01PREUKKwkJCShhaXB0ZWstPmN1clNldHRpbmcucG9pbnRlck1vZGUpKSB7CisJCQlhaXB0ZWstPmRpYWdub3N0aWMgPSBBSVBURUtfRElBR05PU1RJQ19UT09MX0RJU0FMTE9XRUQ7CisJCX0gZWxzZSB7CisJCQlpbnB1dF9yZWdzKGlucHV0ZGV2LCByZWdzKTsKKwkJCXggPSBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYgKikgKGRhdGEgKyAxKSkpOworCQkJeSA9IGxlMTZfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fbGUxNiAqKSAoZGF0YSArIDMpKSk7CisKKwkJCWppdHRlcmFibGUgPSBkYXRhWzVdICYgMHgxYzsKKworCQkJcCA9IChkYXRhWzVdICYgMHgwMSkgIT0gMCA/IDEgOiAwOworCQkJZHYgPSAoZGF0YVs1XSAmIDB4MDIpICE9IDAgPyAxIDogMDsKKwkJCWxlZnQgPSAoZGF0YVs1XSAmIGFpcHRlay0+Y3VyU2V0dGluZy5tb3VzZUJ1dHRvbkxlZnQpICE9IDAgPyAxIDogMDsKKwkJCXJpZ2h0ID0gKGRhdGFbNV0gJiBhaXB0ZWstPmN1clNldHRpbmcubW91c2VCdXR0b25SaWdodCkgIT0gMCA/IDEgOiAwOworCQkJbWlkZGxlID0gKGRhdGFbNV0gJiBhaXB0ZWstPmN1clNldHRpbmcubW91c2VCdXR0b25NaWRkbGUpICE9IDAgPyAxIDogMDsKKworCQkJaWYgKGR2ICE9IDApIHsKKwkJCQkvKiBJZiB3ZSd2ZSBub3QgYWxyZWFkeSBzZW50IGEgdG9vbF9idXR0b25fPz8gY29kZSwgZG8KKwkJCQkgKiBzbyBub3cuIFRoZW4gc2V0IEZJUkVEX0JJVCBzbyBpdCB3b24ndCBiZSByZXNlbnQgdW5sZXNzCisJCQkJICogdGhlIHVzZXIgZm9yY2VzIEZJUkVEX0JJVCBvZmYuCisJCQkJICovCisJCQkJaWYgKFRPT0xfQlVUVE9OX0ZJUkVECisJCQkJICAgIChhaXB0ZWstPmN1clNldHRpbmcudG9vbE1vZGUpID09IDApIHsKKwkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwKKwkJCQkJCQkgVE9PTF9CVVRUT04oYWlwdGVrLT5jdXJTZXR0aW5nLnRvb2xNb2RlKSwKKwkJCQkJCQkgMSk7CisJCQkJCWFpcHRlay0+Y3VyU2V0dGluZy50b29sTW9kZSB8PSBUT09MX0JVVFRPTl9GSVJFRF9CSVQ7CisJCQkJfQorCisJCQkJaWYgKHAgIT0gMCkgeworCQkJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0ZGV2LCBBQlNfWCwgeCk7CisJCQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXRkZXYsIEFCU19ZLCB5KTsKKworCQkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBCVE5fTEVGVCwgbGVmdCk7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsIEJUTl9NSURETEUsIG1pZGRsZSk7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsIEJUTl9SSUdIVCwgcmlnaHQpOworCisJCQkJCS8qIFdoZWVsIHN1cHBvcnQgaXMgaW4gdGhlIGZvcm0gb2YgYSBzaW5nbGUtZXZlbnQKKwkJCQkJICogZmlyaW5nLgorCQkJCQkgKi8KKwkJCQkJaWYgKGFpcHRlay0+Y3VyU2V0dGluZy53aGVlbCAhPSBBSVBURUtfV0hFRUxfRElTQUJMRSkgeworCQkJCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dGRldiwKKwkJCQkJCQkJIEFCU19XSEVFTCwKKwkJCQkJCQkJIGFpcHRlay0+Y3VyU2V0dGluZy53aGVlbCk7CisJCQkJCQlhaXB0ZWstPmN1clNldHRpbmcud2hlZWwgPSBBSVBURUtfV0hFRUxfRElTQUJMRTsKKwkJCQkJfQorCQkJCX0KKwkJCQlpbnB1dF9yZXBvcnRfcmVsKGlucHV0ZGV2LCBSRUxfTUlTQywgcCB8IEFJUFRFS19SRVBPUlRfVE9PTF9NT1VTRSk7CisJCQkJaW5wdXRfc3luYyhpbnB1dGRldik7CisJCQl9CisJCX0KKwl9CisJLyogUmVwb3J0IDRzIGNvbWUgZnJvbSB0aGUgbWFjcm8ga2V5cyB3aGVuIHByZXNzZWQgYnkgc3R5bHVzCisJICovCisJZWxzZSBpZiAoZGF0YVswXSA9PSA0KSB7CisJCWppdHRlcmFibGUgPSBkYXRhWzFdICYgMHgxODsKKworCQlwID0gKGRhdGFbMV0gJiAweDAxKSAhPSAwID8gMSA6IDA7CisJCWR2ID0gKGRhdGFbMV0gJiAweDAyKSAhPSAwID8gMSA6IDA7CisJCXRpcCA9IChkYXRhWzFdICYgMHgwNCkgIT0gMCA/IDEgOiAwOworCQlicyA9IChkYXRhWzFdICYgYWlwdGVrLT5jdXJTZXR0aW5nLnN0eWx1c0J1dHRvbkxvd2VyKSAhPSAwID8gMSA6IDA7CisJCXBjayA9IChkYXRhWzFdICYgYWlwdGVrLT5jdXJTZXR0aW5nLnN0eWx1c0J1dHRvblVwcGVyKSAhPSAwID8gMSA6IDA7CisKKwkJbWFjcm8gPSBkYXRhWzNdOworCQl6ID0gbGUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19sZTE2ICopIChkYXRhICsgNCkpKTsKKworCQlpZiAoZHYgIT0gMCkgeworCQkJaW5wdXRfcmVncyhpbnB1dGRldiwgcmVncyk7CisKKwkJCS8qIElmIHdlJ3ZlIG5vdCBhbHJlYWR5IHNlbnQgYSB0b29sX2J1dHRvbl8/PyBjb2RlLCBkbworCQkJICogc28gbm93LiBUaGVuIHNldCBGSVJFRF9CSVQgc28gaXQgd29uJ3QgYmUgcmVzZW50IHVubGVzcworCQkJICogdGhlIHVzZXIgZm9yY2VzIEZJUkVEX0JJVCBvZmYuCisJCQkgKi8KKwkJCWlmIChUT09MX0JVVFRPTl9GSVJFRChhaXB0ZWstPmN1clNldHRpbmcudG9vbE1vZGUpID09IDApIHsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LAorCQkJCQkJIFRPT0xfQlVUVE9OKGFpcHRlay0+Y3VyU2V0dGluZy50b29sTW9kZSksCisJCQkJCQkgMSk7CisJCQkJYWlwdGVrLT5jdXJTZXR0aW5nLnRvb2xNb2RlIHw9IFRPT0xfQlVUVE9OX0ZJUkVEX0JJVDsKKwkJCX0KKworCQkJaWYgKHAgIT0gMCkgeworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsIEJUTl9UT1VDSCwgdGlwKTsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBCVE5fU1RZTFVTLCBicyk7CisJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwgQlROX1NUWUxVUzIsIHBjayk7CisJCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dGRldiwgQUJTX1BSRVNTVVJFLCB6KTsKKwkJCX0KKworCQkJLyogRm9yIHNhZmV0eSwgd2UncmUgc2VuZGluZyBrZXkgJ2JyZWFrJyBjb2RlcyBmb3IgdGhlCisJCQkgKiBuZWlnaGJvcmluZyBtYWNybyBrZXlzLgorCQkJICovCisJCQlpZiAobWFjcm8gPiAwKSB7CisJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwKKwkJCQkJCSBtYWNyb0tleUV2ZW50c1ttYWNybyAtIDFdLCAwKTsKKwkJCX0KKwkJCWlmIChtYWNybyA8IDI1KSB7CisJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwKKwkJCQkJCSBtYWNyb0tleUV2ZW50c1ttYWNybyArIDFdLCAwKTsKKwkJCX0KKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsIG1hY3JvS2V5RXZlbnRzW21hY3JvXSwgcCk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0ZGV2LCBBQlNfTUlTQywKKwkJCQkJIHAgfCBBSVBURUtfUkVQT1JUX1RPT0xfU1RZTFVTKTsKKwkJCWlucHV0X3N5bmMoaW5wdXRkZXYpOworCQl9CisJfQorCS8qIFJlcG9ydCA1cyBjb21lIGZyb20gdGhlIG1hY3JvIGtleXMgd2hlbiBwcmVzc2VkIGJ5IG1vdXNlCisJICovCisJZWxzZSBpZiAoZGF0YVswXSA9PSA1KSB7CisJCWppdHRlcmFibGUgPSBkYXRhWzFdICYgMHgxYzsKKworCQlwID0gKGRhdGFbMV0gJiAweDAxKSAhPSAwID8gMSA6IDA7CisJCWR2ID0gKGRhdGFbMV0gJiAweDAyKSAhPSAwID8gMSA6IDA7CisJCWxlZnQgPSAoZGF0YVsxXSYgYWlwdGVrLT5jdXJTZXR0aW5nLm1vdXNlQnV0dG9uTGVmdCkgIT0gMCA/IDEgOiAwOworCQlyaWdodCA9IChkYXRhWzFdICYgYWlwdGVrLT5jdXJTZXR0aW5nLm1vdXNlQnV0dG9uUmlnaHQpICE9IDAgPyAxIDogMDsKKwkJbWlkZGxlID0gKGRhdGFbMV0gJiBhaXB0ZWstPmN1clNldHRpbmcubW91c2VCdXR0b25NaWRkbGUpICE9IDAgPyAxIDogMDsKKwkJbWFjcm8gPSBkYXRhWzNdOworCisJCWlmIChkdiAhPSAwKSB7CisJCQlpbnB1dF9yZWdzKGlucHV0ZGV2LCByZWdzKTsKKworCQkJLyogSWYgd2UndmUgbm90IGFscmVhZHkgc2VudCBhIHRvb2xfYnV0dG9uXz8/IGNvZGUsIGRvCisJCQkgKiBzbyBub3cuIFRoZW4gc2V0IEZJUkVEX0JJVCBzbyBpdCB3b24ndCBiZSByZXNlbnQgdW5sZXNzCisJCQkgKiB0aGUgdXNlciBmb3JjZXMgRklSRURfQklUIG9mZi4KKwkJCSAqLworCQkJaWYgKFRPT0xfQlVUVE9OX0ZJUkVEKGFpcHRlay0+Y3VyU2V0dGluZy50b29sTW9kZSkgPT0gMCkgeworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsCisJCQkJCQkgVE9PTF9CVVRUT04oYWlwdGVrLT5jdXJTZXR0aW5nLnRvb2xNb2RlKSwKKwkJCQkJCSAxKTsKKwkJCQlhaXB0ZWstPmN1clNldHRpbmcudG9vbE1vZGUgfD0gVE9PTF9CVVRUT05fRklSRURfQklUOworCQkJfQorCisJCQlpZiAocCAhPSAwKSB7CisJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwgQlROX0xFRlQsIGxlZnQpOworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsIEJUTl9NSURETEUsIG1pZGRsZSk7CisJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwgQlROX1JJR0hULCByaWdodCk7CisJCQl9CisKKwkJCS8qIEZvciBzYWZldHksIHdlJ3JlIHNlbmRpbmcga2V5ICdicmVhaycgY29kZXMgZm9yIHRoZQorCQkJICogbmVpZ2hib3JpbmcgbWFjcm8ga2V5cy4KKwkJCSAqLworCQkJaWYgKG1hY3JvID4gMCkgeworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsCisJCQkJCQkgbWFjcm9LZXlFdmVudHNbbWFjcm8gLSAxXSwgMCk7CisJCQl9CisJCQlpZiAobWFjcm8gPCAyNSkgeworCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsCisJCQkJCQkgbWFjcm9LZXlFdmVudHNbbWFjcm8gKyAxXSwgMCk7CisJCQl9CisKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsIG1hY3JvS2V5RXZlbnRzW21hY3JvXSwgMSk7CisJCQlpbnB1dF9yZXBvcnRfcmVsKGlucHV0ZGV2LCBBQlNfTUlTQywKKwkJCQkJIHAgfCBBSVBURUtfUkVQT1JUX1RPT0xfTU9VU0UpOworCQkJaW5wdXRfc3luYyhpbnB1dGRldik7CisJCX0KKwl9CisJLyogV2UgaGF2ZSBubyBpZGVhIHdoaWNoIHRvb2wgY2FuIGdlbmVyYXRlIGEgcmVwb3J0IDYuIFRoZW9yZXRpY2FsbHksCisJICogbmVpdGhlciBuZWVkIHRvLCBoYXZpbmcgYmVlbiBnaXZlbiByZXBvcnRzIDQgJiA1IGZvciBzdWNoIHVzZS4KKwkgKiBIb3dldmVyLCByZXBvcnQgNiBpcyB0aGUgJ29mZmljaWFsLWxvb2tpbmcnIHJlcG9ydCBmb3IgbWFjcm9LZXlzOworCSAqIHJlcG9ydHMgNCAmIDUgc3VwcG9zaXZlbHkgYXJlIHVzZWQgdG8gc3VwcG9ydCB1bm5hbWVkLCB1bmtub3duCisJICogaGF0IHN3aXRjaGVzICh3aGljaCBqdXN0IHNvIGhhcHBlbiB0byBiZSB0aGUgbWFjcm9LZXlzLikKKwkgKi8KKwllbHNlIGlmIChkYXRhWzBdID09IDYpIHsKKwkJbWFjcm8gPSBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYgKikgKGRhdGEgKyAxKSkpOworCQlpbnB1dF9yZWdzKGlucHV0ZGV2LCByZWdzKTsKKworCQlpZiAobWFjcm8gPiAwKSB7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBtYWNyb0tleUV2ZW50c1ttYWNybyAtIDFdLAorCQkJCQkgMCk7CisJCX0KKwkJaWYgKG1hY3JvIDwgMjUpIHsKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRkZXYsIG1hY3JvS2V5RXZlbnRzW21hY3JvICsgMV0sCisJCQkJCSAwKTsKKwkJfQorCisJCS8qIElmIHdlJ3ZlIG5vdCBhbHJlYWR5IHNlbnQgYSB0b29sX2J1dHRvbl8/PyBjb2RlLCBkbworCQkgKiBzbyBub3cuIFRoZW4gc2V0IEZJUkVEX0JJVCBzbyBpdCB3b24ndCBiZSByZXNlbnQgdW5sZXNzCisJCSAqIHRoZSB1c2VyIGZvcmNlcyBGSVJFRF9CSVQgb2ZmLgorCQkgKi8KKwkJaWYgKFRPT0xfQlVUVE9OX0ZJUkVEKGFpcHRlay0+Y3VyU2V0dGluZy50b29sTW9kZSkgPT0gMCkgeworCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dGRldiwKKwkJCQkJIFRPT0xfQlVUVE9OKGFpcHRlay0+Y3VyU2V0dGluZy4KKwkJCQkJCSAgICAgdG9vbE1vZGUpLCAxKTsKKwkJCWFpcHRlay0+Y3VyU2V0dGluZy50b29sTW9kZSB8PSBUT09MX0JVVFRPTl9GSVJFRF9CSVQ7CisJCX0KKworCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0ZGV2LCBtYWNyb0tleUV2ZW50c1ttYWNyb10sIDEpOworCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0ZGV2LCBBQlNfTUlTQywKKwkJCQkgMSB8IEFJUFRFS19SRVBPUlRfVE9PTF9VTktOT1dOKTsKKwkJaW5wdXRfc3luYyhpbnB1dGRldik7CisJfSBlbHNlIHsKKwkJZGJnKCJVbmtub3duIHJlcG9ydCAlZCIsIGRhdGFbMF0pOworCX0KKworCS8qIEppdHRlciBtYXkgb2NjdXIgd2hlbiB0aGUgdXNlciBwcmVzc2VzIGEgYnV0dG9uIG9uIHRoZSBzdGx5dXMKKwkgKiBvciB0aGUgbW91c2UuIFdoYXQgd2UgZG8gdG8gcHJldmVudCB0aGF0IGlzIHdhaXQgJ3gnIG1pbGxpc2Vjb25kcworCSAqIGZvbGxvd2luZyBhICdqaXR0ZXJhYmxlJyBldmVudCwgd2hpY2ggc2hvdWxkIGdpdmUgdGhlIGhhbmQgc29tZSB0aW1lCisJICogc3RhYmlsaXplIGl0c2VsZi4KKwkgKgorCSAqIFdlIGp1c3QgaW50cm9kdWNlZCBhaXB0ZWstPnByZXZpb3VzSml0dGVyYWJsZSB0byBjYXJyeSBmb3J0aCB0aGUKKwkgKiBub3Rpb24gdGhhdCBqaXR0ZXIgb2NjdXJzIHdoZW4gdGhlIGJ1dHRvbiBzdGF0ZSBjaGFuZ2VzIGZyb20gb24gdG8gb2ZmOgorCSAqIGEgcGVyc29uIGRyYXdpbmcsIGhvbGRpbmcgYSBidXR0b24gZG93biBpcyBub3Qgc3ViamVjdCB0byBqaXR0ZXJpbmcuCisJICogV2l0aCB0aGF0IGluIG1pbmQsIGNoYW5naW5nIGZyb20gdXBwZXIgYnV0dG9uIGRlcHJlc3NlZCB0byBsb3dlciBidXR0b24KKwkgKiBXSUxMIHRyYW5zaXRpb24gdGhyb3VnaCBhIGppdHRlciBkZWxheS4KKwkgKi8KKworCWlmIChhaXB0ZWstPnByZXZpb3VzSml0dGVyYWJsZSAhPSBqaXR0ZXJhYmxlICYmCisJICAgIGFpcHRlay0+Y3VyU2V0dGluZy5qaXR0ZXJEZWxheSAhPSAwICYmIGFpcHRlay0+aW5EZWxheSAhPSAxKSB7CisJCWFpcHRlay0+ZW5kRGVsYXkgPSBqaWZmaWVzICsKKwkJICAgICgoYWlwdGVrLT5jdXJTZXR0aW5nLmppdHRlckRlbGF5ICogSFopIC8gMTAwMCk7CisJCWFpcHRlay0+aW5EZWxheSA9IDE7CisJfQorCWFpcHRlay0+cHJldmlvdXNKaXR0ZXJhYmxlID0gaml0dGVyYWJsZTsKKworZXhpdDoKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXR2YWwgIT0gMCkgeworCQllcnIoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKKwkJICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhlc2UgYXJlIHRoZSBVU0IgaWQncyBrbm93biBzbyBmYXIuIFdlIGRvIG5vdCBpZGVudGlmeSB0aGVtIHRvCisgKiBzcGVjaWZpYyBBaXB0ZWsgbW9kZWwgbnVtYmVycywgYmVjYXVzZSB0aGVyZSBoYXMgYmVlbiBvdmVybGFwcywKKyAqIHVzZSwgYW5kIHJldXNlIG9mIGlkJ3MgaW4gZXhpc3RpbmcgbW9kZWxzLiBDZXJ0YWluIG1vZGVscyBoYXZlCisgKiBiZWVuIGtub3duIHRvIHVzZSBtb3JlIHRoYW4gb25lIElELCBpbmRpY2F0aXZlIHBlcmhhcHMgb2YKKyAqIG1hbnVmYWN0dXJpbmcgcmV2aXNpb25zLiBJbiBhbnkgZXZlbnQsIHdlIGNvbnNpZGVyIHRoZXNlIAorICogSURzIHRvIG5vdCBiZSBtb2RlbC1zcGVjaWZpYyBub3IgdW5pcXVlLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgYWlwdGVrX2lkc1tdID0geworCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQUlQVEVLLCAweDAxKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BSVBURUssIDB4MTApfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgMHgyMCl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQUlQVEVLLCAweDIxKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BSVBURUssIDB4MjIpfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FJUFRFSywgMHgyMyl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQUlQVEVLLCAweDI0KX0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBhaXB0ZWtfaWRzKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBPcGVuIGFuIGluc3RhbmNlIG9mIHRoZSB0YWJsZXQgZHJpdmVyLgorICovCitzdGF0aWMgaW50IGFpcHRla19vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2KQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGlucHV0ZGV2LT5wcml2YXRlOworCisJaWYgKGFpcHRlay0+b3BlbkNvdW50KysgPiAwKSB7CisJCXJldHVybiAwOworCX0KKworCWFpcHRlay0+dXJiLT5kZXYgPSBhaXB0ZWstPnVzYmRldjsKKwlpZiAodXNiX3N1Ym1pdF91cmIoYWlwdGVrLT51cmIsIEdGUF9LRVJORUwpICE9IDApIHsKKwkJYWlwdGVrLT5vcGVuQ291bnQtLTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ2xvc2UgYW4gaW5zdGFuY2Ugb2YgdGhlIHRhYmxldCBkcml2ZXIuCisgKi8KK3N0YXRpYyB2b2lkIGFpcHRla19jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBpbnB1dGRldi0+cHJpdmF0ZTsKKworCWlmICgtLWFpcHRlay0+b3BlbkNvdW50ID09IDApIHsKKwkJdXNiX2tpbGxfdXJiKGFpcHRlay0+dXJiKTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogYWlwdGVrX3NldF9yZXBvcnQgYW5kIGFpcHRla19nZXRfcmVwb3J0KCkgYXJlIGJvcnJvd2VkIGZyb20gTGludXggMi40LngsIAorICogd2hlcmUgdGhleSB3ZXJlIGtub3duIGFzIHVzYl9zZXRfcmVwb3J0IGFuZCB1c2JfZ2V0X3JlcG9ydC4KKyAqLworc3RhdGljIGludAorYWlwdGVrX3NldF9yZXBvcnQoc3RydWN0IGFpcHRlayAqYWlwdGVrLAorCQkgIHVuc2lnbmVkIGNoYXIgcmVwb3J0X3R5cGUsCisJCSAgdW5zaWduZWQgY2hhciByZXBvcnRfaWQsIHZvaWQgKmJ1ZmZlciwgaW50IHNpemUpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhhaXB0ZWstPnVzYmRldiwKKwkJCSAgICAgICB1c2Jfc25kY3RybHBpcGUoYWlwdGVrLT51c2JkZXYsIDApLAorCQkJICAgICAgIFVTQl9SRVFfU0VUX1JFUE9SVCwKKwkJCSAgICAgICBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfAorCQkJICAgICAgIFVTQl9ESVJfT1VULCAocmVwb3J0X3R5cGUgPDwgOCkgKyByZXBvcnRfaWQsCisJCQkgICAgICAgYWlwdGVrLT5pZm51bSwgYnVmZmVyLCBzaXplLCA1MDAwKTsKK30KKworc3RhdGljIGludAorYWlwdGVrX2dldF9yZXBvcnQoc3RydWN0IGFpcHRlayAqYWlwdGVrLAorCQkgIHVuc2lnbmVkIGNoYXIgcmVwb3J0X3R5cGUsCisJCSAgdW5zaWduZWQgY2hhciByZXBvcnRfaWQsIHZvaWQgKmJ1ZmZlciwgaW50IHNpemUpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhhaXB0ZWstPnVzYmRldiwKKwkJCSAgICAgICB1c2JfcmN2Y3RybHBpcGUoYWlwdGVrLT51c2JkZXYsIDApLAorCQkJICAgICAgIFVTQl9SRVFfR0VUX1JFUE9SVCwKKwkJCSAgICAgICBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfAorCQkJICAgICAgIFVTQl9ESVJfSU4sIChyZXBvcnRfdHlwZSA8PCA4KSArIHJlcG9ydF9pZCwKKwkJCSAgICAgICBhaXB0ZWstPmlmbnVtLCBidWZmZXIsIHNpemUsIDUwMDApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNlbmQgYSBjb21tYW5kIHRvIHRoZSB0YWJsZXQuCisgKi8KK3N0YXRpYyBpbnQKK2FpcHRla19jb21tYW5kKHN0cnVjdCBhaXB0ZWsgKmFpcHRlaywgdW5zaWduZWQgY2hhciBjb21tYW5kLCB1bnNpZ25lZCBjaGFyIGRhdGEpCit7CisJY29uc3QgaW50IHNpemVvZl9idWYgPSAzICogc2l6ZW9mKHU4KTsKKwlpbnQgcmV0OworCXU4ICpidWY7CisKKwlidWYgPSBrbWFsbG9jKHNpemVvZl9idWYsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWJ1ZlswXSA9IDI7CisJYnVmWzFdID0gY29tbWFuZDsKKwlidWZbMl0gPSBkYXRhOworCisJaWYgKChyZXQgPQorCSAgICAgYWlwdGVrX3NldF9yZXBvcnQoYWlwdGVrLCAzLCAyLCBidWYsIHNpemVvZl9idWYpKSAhPSBzaXplb2ZfYnVmKSB7CisJCWRiZygiYWlwdGVrX3Byb2dyYW06IGZhaWxlZCwgdHJpZWQgdG8gc2VuZDogMHglMDJ4IDB4JTAyeCIsCisJCSAgICBjb21tYW5kLCBkYXRhKTsKKwl9CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmV0cmlldmUgaW5mb3JtYXRpb24gZnJvbSB0aGUgdGFibGV0LiBRdWVyeWluZyBpbmZvIGlzIGRlZmluZWQgYXMgZmlyc3QKKyAqIHNlbmRpbmcgdGhlIHtjb21tYW5kLGRhdGF9IHNlcXVlbmNlIGFzIGEgY29tbWFuZCwgZm9sbG93ZWQgYnkgYSB3YWl0CisgKiAoYWthLCAicHJvZ3JhbW1hdGljRGVsYXkiKSBhbmQgdGhlbiBhICJyZWFkIiByZXF1ZXN0LgorICovCitzdGF0aWMgaW50CithaXB0ZWtfcXVlcnkoc3RydWN0IGFpcHRlayAqYWlwdGVrLCB1bnNpZ25lZCBjaGFyIGNvbW1hbmQsIHVuc2lnbmVkIGNoYXIgZGF0YSkKK3sKKwljb25zdCBpbnQgc2l6ZW9mX2J1ZiA9IDMgKiBzaXplb2YodTgpOworCWludCByZXQ7CisJdTggKmJ1ZjsKKworCWJ1ZiA9IGttYWxsb2Moc2l6ZW9mX2J1ZiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJYnVmWzBdID0gMjsKKwlidWZbMV0gPSBjb21tYW5kOworCWJ1ZlsyXSA9IGRhdGE7CisKKwlpZiAoYWlwdGVrX2NvbW1hbmQoYWlwdGVrLCBjb21tYW5kLCBkYXRhKSAhPSAwKSB7CisJCWtmcmVlKGJ1Zik7CisJCXJldHVybiAtRUlPOworCX0KKwltc2xlZXAoYWlwdGVrLT5jdXJTZXR0aW5nLnByb2dyYW1tYWJsZURlbGF5KTsKKworCWlmICgocmV0ID0KKwkgICAgIGFpcHRla19nZXRfcmVwb3J0KGFpcHRlaywgMywgMiwgYnVmLCBzaXplb2ZfYnVmKSkgIT0gc2l6ZW9mX2J1ZikgeworCQlkYmcoImFpcHRla19xdWVyeSBmYWlsZWQ6IHJldHVybmVkIDB4JTAyeCAweCUwMnggMHglMDJ4IiwKKwkJICAgIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0pOworCQlyZXQgPSAtRUlPOworCX0gZWxzZSB7CisJCXJldCA9IGxlMTZfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fbGUxNiAqKSAoYnVmICsgMSkpKTsKKwl9CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2dyYW0gdGhlIHRhYmxldCBpbnRvIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZSBtb2RlLgorICogV2UgYWxzbyBnZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhYmxldCdzIHNpemUuCisgKi8KK3N0YXRpYyBpbnQgYWlwdGVrX3Byb2dyYW1fdGFibGV0KHN0cnVjdCBhaXB0ZWsgKmFpcHRlaykKK3sKKwlpbnQgcmV0OworCS8qIEV4ZWN1dGUgUmVzb2x1dGlvbjUwMExQSSAqLworCWlmICgocmV0ID0gYWlwdGVrX2NvbW1hbmQoYWlwdGVrLCAweDE4LCAweDA0KSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogUXVlcnkgZ2V0TW9kZWxDb2RlICovCisJaWYgKChyZXQgPSBhaXB0ZWtfcXVlcnkoYWlwdGVrLCAweDAyLCAweDAwKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWFpcHRlay0+ZmVhdHVyZXMubW9kZWxDb2RlID0gcmV0ICYgMHhmZjsKKworCS8qIFF1ZXJ5IGdldE9ETUNvZGUgKi8KKwlpZiAoKHJldCA9IGFpcHRla19xdWVyeShhaXB0ZWssIDB4MDMsIDB4MDApKSA8IDApCisJCXJldHVybiByZXQ7CisJYWlwdGVrLT5mZWF0dXJlcy5vZG1Db2RlID0gcmV0OworCisJLyogUXVlcnkgZ2V0RmlybXdhcmVDb2RlICovCisJaWYgKChyZXQgPSBhaXB0ZWtfcXVlcnkoYWlwdGVrLCAweDA0LCAweDAwKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWFpcHRlay0+ZmVhdHVyZXMuZmlybXdhcmVDb2RlID0gcmV0OworCisJLyogUXVlcnkgZ2V0WGV4dGVuc2lvbiAqLworCWlmICgocmV0ID0gYWlwdGVrX3F1ZXJ5KGFpcHRlaywgMHgwMSwgMHgwMCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21pbltBQlNfWF0gPSAwOworCWFpcHRlay0+aW5wdXRkZXYuYWJzbWF4W0FCU19YXSA9IHJldCAtIDE7CisKKwkvKiBRdWVyeSBnZXRZZXh0ZW5zaW9uICovCisJaWYgKChyZXQgPSBhaXB0ZWtfcXVlcnkoYWlwdGVrLCAweDAxLCAweDAxKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWFpcHRlay0+aW5wdXRkZXYuYWJzbWluW0FCU19ZXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNtYXhbQUJTX1ldID0gcmV0IC0gMTsKKworCS8qIFF1ZXJ5IGdldFByZXNzdXJlTGV2ZWxzICovCisJaWYgKChyZXQgPSBhaXB0ZWtfcXVlcnkoYWlwdGVrLCAweDA4LCAweDAwKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWFpcHRlay0+aW5wdXRkZXYuYWJzbWluW0FCU19QUkVTU1VSRV0gPSAwOworCWFpcHRlay0+aW5wdXRkZXYuYWJzbWF4W0FCU19QUkVTU1VSRV0gPSByZXQgLSAxOworCisJLyogRGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UgYXJlIGluIGFic29sdXRlIG9yIHJlbGF0aXZlIG1vZGUsIHdlIHdpbGwKKwkgKiBkbyBhIHN3aXRjaFRvVGFibGV0KGFic29sdXRlKSBvciBzd2l0Y2hUb01vdXNlKHJlbGF0aXZlKSBjb21tYW5kLgorCSAqLworCWlmIChhaXB0ZWstPmN1clNldHRpbmcuY29vcmRpbmF0ZU1vZGUgPT0KKwkgICAgQUlQVEVLX0NPT1JESU5BVEVfQUJTT0xVVEVfTU9ERSkgeworCQkvKiBFeGVjdXRlIHN3aXRjaFRvVGFibGV0ICovCisJCWlmICgocmV0ID0gYWlwdGVrX2NvbW1hbmQoYWlwdGVrLCAweDEwLCAweDAxKSkgPCAwKSB7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfSBlbHNlIHsKKwkJLyogRXhlY3V0ZSBzd2l0Y2hUb01vdXNlICovCisJCWlmICgocmV0ID0gYWlwdGVrX2NvbW1hbmQoYWlwdGVrLCAweDEwLCAweDAwKSkgPCAwKSB7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJLyogRW5hYmxlIHRoZSBtYWNybyBrZXlzICovCisJaWYgKChyZXQgPSBhaXB0ZWtfY29tbWFuZChhaXB0ZWssIDB4MTEsIDB4MDIpKSA8IDApCisJCXJldHVybiByZXQ7CisjaWYgMAorCS8qIEV4ZWN1dGUgRmlsdGVyT24gKi8KKwlpZiAoKHJldCA9IGFpcHRla19jb21tYW5kKGFpcHRlaywgMHgxNywgMHgwMCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKyNlbmRpZgorCisJLyogRXhlY3V0ZSBBdXRvR2Fpbk9uICovCisJaWYgKChyZXQgPSBhaXB0ZWtfY29tbWFuZChhaXB0ZWssIDB4MTIsIDB4ZmYpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBSZXNldCB0aGUgZXZlbnRDb3VudCwgc28gd2UgdHJhY2sgZXZlbnRzIGZyb20gbGFzdCAocmUpcHJvZ3JhbW1pbmcKKwkgKi8KKwlhaXB0ZWstPmRpYWdub3N0aWMgPSBBSVBURUtfRElBR05PU1RJQ19OQTsKKwlhaXB0ZWstPmV2ZW50Q291bnQgPSAwOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU3lzZnMgZnVuY3Rpb25zLiBTeXNmcyBwcmVmZXJzIHRoYXQgaW5kaXZpZHVhbGx5LXR1bmFibGUgcGFyYW1ldGVycworICogZXhpc3QgaW4gdGhlaXIgc2VwYXJhdGUgcHNldWRvLWZpbGVzLiBTdW1tYXJ5IGRhdGEgdGhhdCBpcyBpbW11dGFibGUKKyAqIG1heSBleGlzdCBpbiBhIHNpbmd1bGFyIGZpbGUgc28gbG9uZyBhcyB5b3UgZG9uJ3QgZGVmaW5lIGEgd3JpdGVhYmxlCisgKiBpbnRlcmZhY2UuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHRoZSAnc2l6ZScgZmlsZSAtLSBkaXNwbGF5IHN1cHBvcnQKKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXRTaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkeCVkXG4iLAorCQkJYWlwdGVrLT5pbnB1dGRldi5hYnNtYXhbQUJTX1hdICsgMSwKKwkJCWFpcHRlay0+aW5wdXRkZXYuYWJzbWF4W0FCU19ZXSArIDEpOworfQorCisvKiBUaGVzZSBzdHJ1Y3RzIGRlZmluZSB0aGUgc3lzZnMgZmlsZXMsIHBhcmFtICMxIGlzIHRoZSBuYW1lIG9mIHRoZQorICogZmlsZSwgcGFyYW0gMiBpcyB0aGUgZmlsZSBwZXJtaXNzaW9ucywgcGFyYW0gMyAmIDQgYXJlIHRvIHRoZQorICogb3V0cHV0IGdlbmVyYXRvciBhbmQgaW5wdXQgcGFyc2VyIHJvdXRpbmVzLiBBYnNlbmNlIG9mIGEgcm91dGluZSBpcworICogcGVybWl0dGVkIC0tIGl0IG9ubHkgbWVhbnMgY2FuJ3QgZWl0aGVyICdjYXQnIHRoZSBmaWxlLCBvciBzZW5kIGRhdGEKKyAqIHRvIGl0LgorICovCitzdGF0aWMgREVWSUNFX0FUVFIoc2l6ZSwgU19JUlVHTywgc2hvd190YWJsZXRTaXplLCBOVUxMKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ3Byb2R1Y3RfaWQnIGZpbGUKKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXRQcm9kdWN0SWQoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMHglMDR4XG4iLAorCQkJYWlwdGVrLT5pbnB1dGRldi5pZC5wcm9kdWN0KTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHByb2R1Y3RfaWQsIFNfSVJVR08sIHNob3dfdGFibGV0UHJvZHVjdElkLCBOVUxMKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ3ZlbmRvcl9pZCcgZmlsZQorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldFZlbmRvcklkKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JTA0eFxuIiwgYWlwdGVrLT5pbnB1dGRldi5pZC52ZW5kb3IpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIodmVuZG9yX2lkLCBTX0lSVUdPLCBzaG93X3RhYmxldFZlbmRvcklkLCBOVUxMKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ3ZlbmRvcicgZmlsZQorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldE1hbnVmYWN0dXJlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0dmFsOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXJldHZhbCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGFpcHRlay0+dXNiZGV2LT5tYW51ZmFjdHVyZXIpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih2ZW5kb3IsIFNfSVJVR08sIHNob3dfdGFibGV0TWFudWZhY3R1cmVyLCBOVUxMKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ3Byb2R1Y3QnIGZpbGUKKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXRQcm9kdWN0KHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXR2YWw7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJcmV0dmFsID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgYWlwdGVrLT51c2JkZXYtPnByb2R1Y3QpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihwcm9kdWN0LCBTX0lSVUdPLCBzaG93X3RhYmxldFByb2R1Y3QsIE5VTEwpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAncG9pbnRlcl9tb2RlJyBmaWxlLiBOb3RlIHRoYXQgdGhpcyBmaWxlCisgKiBib3RoIGRpc3BsYXlzIGN1cnJlbnQgc2V0dGluZyBhbmQgYWxsb3dzIHJlcHJvZ3JhbW1pbmcuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGFibGV0UG9pbnRlck1vZGUoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJY2hhciAqczsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGFpcHRlay0+Y3VyU2V0dGluZy5wb2ludGVyTW9kZSkgeworCWNhc2UgQUlQVEVLX1BPSU5URVJfT05MWV9TVFlMVVNfTU9ERToKKwkJcyA9ICJzdHlsdXMiOworCQlicmVhazsKKworCWNhc2UgQUlQVEVLX1BPSU5URVJfT05MWV9NT1VTRV9NT0RFOgorCQlzID0gIm1vdXNlIjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19QT0lOVEVSX0VJVEhFUl9NT0RFOgorCQlzID0gImVpdGhlciI7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcyA9ICJ1bmtub3duIjsKKwkJYnJlYWs7CisJfQorCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBzKTsKK30KKworc3RhdGljIHNzaXplX3QKK3N0b3JlX3RhYmxldFBvaW50ZXJNb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChzdHJjbXAoYnVmLCAic3R5bHVzIikgPT0gMCkgeworCQlhaXB0ZWstPm5ld1NldHRpbmcucG9pbnRlck1vZGUgPQorCQkgICAgQUlQVEVLX1BPSU5URVJfT05MWV9TVFlMVVNfTU9ERTsKKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJtb3VzZSIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLnBvaW50ZXJNb2RlID0gQUlQVEVLX1BPSU5URVJfT05MWV9NT1VTRV9NT0RFOworCX0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwgImVpdGhlciIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLnBvaW50ZXJNb2RlID0gQUlQVEVLX1BPSU5URVJfRUlUSEVSX01PREU7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHBvaW50ZXJfbW9kZSwKKwkJICAgU19JUlVHTyB8IFNfSVdVR08sCisJCSAgIHNob3dfdGFibGV0UG9pbnRlck1vZGUsIHN0b3JlX3RhYmxldFBvaW50ZXJNb2RlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ2Nvb3JkaW5hdGVfbW9kZScgZmlsZS4gTm90ZSB0aGF0IHRoaXMgZmlsZQorICogYm90aCBkaXNwbGF5cyBjdXJyZW50IHNldHRpbmcgYW5kIGFsbG93cyByZXByb2dyYW1taW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldENvb3JkaW5hdGVNb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIgKnM7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJc3dpdGNoIChhaXB0ZWstPmN1clNldHRpbmcuY29vcmRpbmF0ZU1vZGUpIHsKKwljYXNlIEFJUFRFS19DT09SRElOQVRFX0FCU09MVVRFX01PREU6CisJCXMgPSAiYWJzb2x1dGUiOworCQlicmVhazsKKworCWNhc2UgQUlQVEVLX0NPT1JESU5BVEVfUkVMQVRJVkVfTU9ERToKKwkJcyA9ICJyZWxhdGl2ZSI7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcyA9ICJ1bmtub3duIjsKKwkJYnJlYWs7CisJfQorCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBzKTsKK30KKworc3RhdGljIHNzaXplX3QKK3N0b3JlX3RhYmxldENvb3JkaW5hdGVNb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChzdHJjbXAoYnVmLCAiYWJzb2x1dGUiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy5wb2ludGVyTW9kZSA9CisJCSAgICBBSVBURUtfQ09PUkRJTkFURV9BQlNPTFVURV9NT0RFOworCX0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwgInJlbGF0aXZlIikgPT0gMCkgeworCQlhaXB0ZWstPm5ld1NldHRpbmcucG9pbnRlck1vZGUgPQorCQkgICAgQUlQVEVLX0NPT1JESU5BVEVfUkVMQVRJVkVfTU9ERTsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoY29vcmRpbmF0ZV9tb2RlLAorCQkgICBTX0lSVUdPIHwgU19JV1VHTywKKwkJICAgc2hvd190YWJsZXRDb29yZGluYXRlTW9kZSwgc3RvcmVfdGFibGV0Q29vcmRpbmF0ZU1vZGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAndG9vbF9tb2RlJyBmaWxlLiBOb3RlIHRoYXQgdGhpcyBmaWxlCisgKiBib3RoIGRpc3BsYXlzIGN1cnJlbnQgc2V0dGluZyBhbmQgYWxsb3dzIHJlcHJvZ3JhbW1pbmcuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGFibGV0VG9vbE1vZGUoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJY2hhciAqczsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKFRPT0xfQlVUVE9OKGFpcHRlay0+Y3VyU2V0dGluZy50b29sTW9kZSkpIHsKKwljYXNlIEFJUFRFS19UT09MX0JVVFRPTl9NT1VTRV9NT0RFOgorCQlzID0gIm1vdXNlIjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19UT09MX0JVVFRPTl9FUkFTRVJfTU9ERToKKwkJcyA9ICJlcmFzZXIiOworCQlicmVhazsKKworCWNhc2UgQUlQVEVLX1RPT0xfQlVUVE9OX1BFTkNJTF9NT0RFOgorCQlzID0gInBlbmNpbCI7CisJCWJyZWFrOworCisJY2FzZSBBSVBURUtfVE9PTF9CVVRUT05fUEVOX01PREU6CisJCXMgPSAicGVuIjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19UT09MX0JVVFRPTl9CUlVTSF9NT0RFOgorCQlzID0gImJydXNoIjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19UT09MX0JVVFRPTl9BSVJCUlVTSF9NT0RFOgorCQlzID0gImFpcmJydXNoIjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19UT09MX0JVVFRPTl9MRU5TX01PREU6CisJCXMgPSAibGVucyI7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcyA9ICJ1bmtub3duIjsKKwkJYnJlYWs7CisJfQorCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBzKTsKK30KKworc3RhdGljIHNzaXplX3QKK3N0b3JlX3RhYmxldFRvb2xNb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChzdHJjbXAoYnVmLCAibW91c2UiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy50b29sTW9kZSA9IEFJUFRFS19UT09MX0JVVFRPTl9NT1VTRV9NT0RFOworCX0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwgImVyYXNlciIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLnRvb2xNb2RlID0gQUlQVEVLX1RPT0xfQlVUVE9OX0VSQVNFUl9NT0RFOworCX0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwgInBlbmNpbCIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLnRvb2xNb2RlID0gQUlQVEVLX1RPT0xfQlVUVE9OX1BFTkNJTF9NT0RFOworCX0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwgInBlbiIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLnRvb2xNb2RlID0gQUlQVEVLX1RPT0xfQlVUVE9OX1BFTl9NT0RFOworCX0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwgImJydXNoIikgPT0gMCkgeworCQlhaXB0ZWstPm5ld1NldHRpbmcudG9vbE1vZGUgPSBBSVBURUtfVE9PTF9CVVRUT05fQlJVU0hfTU9ERTsKKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJhaXJicnVzaCIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLnRvb2xNb2RlID0gQUlQVEVLX1RPT0xfQlVUVE9OX0FJUkJSVVNIX01PREU7CisJfSBlbHNlIGlmIChzdHJjbXAoYnVmLCAibGVucyIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLnRvb2xNb2RlID0gQUlQVEVLX1RPT0xfQlVUVE9OX0xFTlNfTU9ERTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih0b29sX21vZGUsCisJCSAgIFNfSVJVR08gfCBTX0lXVUdPLAorCQkgICBzaG93X3RhYmxldFRvb2xNb2RlLCBzdG9yZV90YWJsZXRUb29sTW9kZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICd4dGlsdCcgZmlsZS4gTm90ZSB0aGF0IHRoaXMgZmlsZQorICogYm90aCBkaXNwbGF5cyBjdXJyZW50IHNldHRpbmcgYW5kIGFsbG93cyByZXByb2dyYW1taW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldFh0aWx0KHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChhaXB0ZWstPmN1clNldHRpbmcueFRpbHQgPT0gQUlQVEVLX1RJTFRfRElTQUJMRSkgeworCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJkaXNhYmxlXG4iKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKKwkJCQlhaXB0ZWstPmN1clNldHRpbmcueFRpbHQpOworCX0KK30KKworc3RhdGljIHNzaXplX3QKK3N0b3JlX3RhYmxldFh0aWx0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHg7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJaWYgKHN0cmNtcChidWYsICJkaXNhYmxlIikgPT0gMCkgeworCQlhaXB0ZWstPm5ld1NldHRpbmcueFRpbHQgPSBBSVBURUtfVElMVF9ESVNBQkxFOworCX0gZWxzZSB7CisJCXggPSAoaW50KXNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisJCWlmICh4ID49IEFJUFRFS19USUxUX01JTiAmJiB4IDw9IEFJUFRFS19USUxUX01BWCkgeworCQkJYWlwdGVrLT5uZXdTZXR0aW5nLnhUaWx0ID0geDsKKwkJfQorCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih4dGlsdCwKKwkJICAgU19JUlVHTyB8IFNfSVdVR08sIHNob3dfdGFibGV0WHRpbHQsIHN0b3JlX3RhYmxldFh0aWx0KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ3l0aWx0JyBmaWxlLiBOb3RlIHRoYXQgdGhpcyBmaWxlCisgKiBib3RoIGRpc3BsYXlzIGN1cnJlbnQgc2V0dGluZyBhbmQgYWxsb3dzIHJlcHJvZ3JhbW1pbmcuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGFibGV0WXRpbHQoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJaWYgKGFpcHRlay0+Y3VyU2V0dGluZy55VGlsdCA9PSBBSVBURUtfVElMVF9ESVNBQkxFKSB7CisJCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgImRpc2FibGVcbiIpOworCX0gZWxzZSB7CisJCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLAorCQkJCWFpcHRlay0+Y3VyU2V0dGluZy55VGlsdCk7CisJfQorfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfdGFibGV0WXRpbHQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgeTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RyY21wKGJ1ZiwgImRpc2FibGUiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy55VGlsdCA9IEFJUFRFS19USUxUX0RJU0FCTEU7CisJfSBlbHNlIHsKKwkJeSA9IChpbnQpc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKwkJaWYgKHkgPj0gQUlQVEVLX1RJTFRfTUlOICYmIHkgPD0gQUlQVEVLX1RJTFRfTUFYKSB7CisJCQlhaXB0ZWstPm5ld1NldHRpbmcueVRpbHQgPSB5OworCQl9CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHl0aWx0LAorCQkgICBTX0lSVUdPIHwgU19JV1VHTywgc2hvd190YWJsZXRZdGlsdCwgc3RvcmVfdGFibGV0WXRpbHQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAnaml0dGVyJyBmaWxlLiBOb3RlIHRoYXQgdGhpcyBmaWxlCisgKiBib3RoIGRpc3BsYXlzIGN1cnJlbnQgc2V0dGluZyBhbmQgYWxsb3dzIHJlcHJvZ3JhbW1pbmcuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGFibGV0Sml0dGVyRGVsYXkoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGFpcHRlay0+Y3VyU2V0dGluZy5qaXR0ZXJEZWxheSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV90YWJsZXRKaXR0ZXJEZWxheShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWFpcHRlay0+bmV3U2V0dGluZy5qaXR0ZXJEZWxheSA9IChpbnQpc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihqaXR0ZXIsCisJCSAgIFNfSVJVR08gfCBTX0lXVUdPLAorCQkgICBzaG93X3RhYmxldEppdHRlckRlbGF5LCBzdG9yZV90YWJsZXRKaXR0ZXJEZWxheSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICdkZWxheScgZmlsZS4gTm90ZSB0aGF0IHRoaXMgZmlsZQorICogYm90aCBkaXNwbGF5cyBjdXJyZW50IHNldHRpbmcgYW5kIGFsbG93cyByZXByb2dyYW1taW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldFByb2dyYW1tYWJsZURlbGF5KHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLAorCQkJYWlwdGVrLT5jdXJTZXR0aW5nLnByb2dyYW1tYWJsZURlbGF5KTsKK30KKworc3RhdGljIHNzaXplX3QKK3N0b3JlX3RhYmxldFByb2dyYW1tYWJsZURlbGF5KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJYWlwdGVrLT5uZXdTZXR0aW5nLnByb2dyYW1tYWJsZURlbGF5ID0gKGludClzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGRlbGF5LAorCQkgICBTX0lSVUdPIHwgU19JV1VHTywKKwkJICAgc2hvd190YWJsZXRQcm9ncmFtbWFibGVEZWxheSwgc3RvcmVfdGFibGV0UHJvZ3JhbW1hYmxlRGVsYXkpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAnaW5wdXRfcGF0aCcgZmlsZS4gTm90ZSB0aGF0IHRoaXMgZmlsZQorICogb25seSBkaXNwbGF5cyBjdXJyZW50IHNldHRpbmcuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGFibGV0SW5wdXREZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiL2Rldi9pbnB1dC8lc1xuIiwKKwkJCWFpcHRlay0+ZmVhdHVyZXMuaW5wdXRQYXRoKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGlucHV0X3BhdGgsIFNfSVJVR08sIHNob3dfdGFibGV0SW5wdXREZXZpY2UsIE5VTEwpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAnZXZlbnRfY291bnQnIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGZpbGUKKyAqIG9ubHkgZGlzcGxheXMgY3VycmVudCBzZXR0aW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldEV2ZW50c1JlY2VpdmVkKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVsZFxuIiwgYWlwdGVrLT5ldmVudENvdW50KTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGV2ZW50X2NvdW50LCBTX0lSVUdPLCBzaG93X3RhYmxldEV2ZW50c1JlY2VpdmVkLCBOVUxMKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ2RpYWdub3N0aWMnIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGZpbGUKKyAqIG9ubHkgZGlzcGxheXMgY3VycmVudCBzZXR0aW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldERpYWdub3N0aWNNZXNzYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIgKnJldE1zZzsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGFpcHRlay0+ZGlhZ25vc3RpYykgeworCWNhc2UgQUlQVEVLX0RJQUdOT1NUSUNfTkE6CisJCXJldE1zZyA9ICJubyBlcnJvcnNcbiI7CisJCWJyZWFrOworCisJY2FzZSBBSVBURUtfRElBR05PU1RJQ19TRU5ESU5HX1JFTEFUSVZFX0lOX0FCU09MVVRFOgorCQlyZXRNc2cgPSAiRXJyb3I6IHJlY2VpdmluZyByZWxhdGl2ZSByZXBvcnRzXG4iOworCQlicmVhazsKKworCWNhc2UgQUlQVEVLX0RJQUdOT1NUSUNfU0VORElOR19BQlNPTFVURV9JTl9SRUxBVElWRToKKwkJcmV0TXNnID0gIkVycm9yOiByZWNlaXZpbmcgYWJzb2x1dGUgcmVwb3J0c1xuIjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19ESUFHTk9TVElDX1RPT0xfRElTQUxMT1dFRDoKKwkJaWYgKGFpcHRlay0+Y3VyU2V0dGluZy5wb2ludGVyTW9kZSA9PQorCQkgICAgQUlQVEVLX1BPSU5URVJfT05MWV9NT1VTRV9NT0RFKSB7CisJCQlyZXRNc2cgPSAiRXJyb3I6IHJlY2VpdmluZyBzdHlsdXMgcmVwb3J0c1xuIjsKKwkJfSBlbHNlIHsKKwkJCXJldE1zZyA9ICJFcnJvcjogcmVjZWl2aW5nIG1vdXNlIHJlcG9ydHNcbiI7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCByZXRNc2cpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoZGlhZ25vc3RpYywgU19JUlVHTywgc2hvd190YWJsZXREaWFnbm9zdGljTWVzc2FnZSwgTlVMTCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICdzdHlsdXNfdXBwZXInIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGZpbGUKKyAqIGJvdGggZGlzcGxheXMgY3VycmVudCBzZXR0aW5nIGFuZCBhbGxvd3MgZm9yIHNldHRpbmcgY2hhbmdpbmcuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGFibGV0U3R5bHVzVXBwZXIoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJY2hhciAqczsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGFpcHRlay0+Y3VyU2V0dGluZy5zdHlsdXNCdXR0b25VcHBlcikgeworCWNhc2UgQUlQVEVLX1NUWUxVU19VUFBFUl9CVVRUT046CisJCXMgPSAidXBwZXIiOworCQlicmVhazsKKworCWNhc2UgQUlQVEVLX1NUWUxVU19MT1dFUl9CVVRUT046CisJCXMgPSAibG93ZXIiOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXMgPSAidW5rbm93biI7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgcyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV90YWJsZXRTdHlsdXNVcHBlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChzdHJjbXAoYnVmLCAidXBwZXIiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy5zdHlsdXNCdXR0b25VcHBlciA9CisJCSAgICBBSVBURUtfU1RZTFVTX1VQUEVSX0JVVFRPTjsKKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJsb3dlciIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLnN0eWx1c0J1dHRvblVwcGVyID0KKwkJICAgIEFJUFRFS19TVFlMVVNfTE9XRVJfQlVUVE9OOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihzdHlsdXNfdXBwZXIsCisJCSAgIFNfSVJVR08gfCBTX0lXVUdPLAorCQkgICBzaG93X3RhYmxldFN0eWx1c1VwcGVyLCBzdG9yZV90YWJsZXRTdHlsdXNVcHBlcik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICdzdHlsdXNfbG93ZXInIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGZpbGUKKyAqIGJvdGggZGlzcGxheXMgY3VycmVudCBzZXR0aW5nIGFuZCBhbGxvd3MgZm9yIHNldHRpbmcgY2hhbmdpbmcuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGFibGV0U3R5bHVzTG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJY2hhciAqczsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGFpcHRlay0+Y3VyU2V0dGluZy5zdHlsdXNCdXR0b25Mb3dlcikgeworCWNhc2UgQUlQVEVLX1NUWUxVU19VUFBFUl9CVVRUT046CisJCXMgPSAidXBwZXIiOworCQlicmVhazsKKworCWNhc2UgQUlQVEVLX1NUWUxVU19MT1dFUl9CVVRUT046CisJCXMgPSAibG93ZXIiOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXMgPSAidW5rbm93biI7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgcyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV90YWJsZXRTdHlsdXNMb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChzdHJjbXAoYnVmLCAidXBwZXIiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy5zdHlsdXNCdXR0b25Mb3dlciA9CisJCSAgICBBSVBURUtfU1RZTFVTX1VQUEVSX0JVVFRPTjsKKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJsb3dlciIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLnN0eWx1c0J1dHRvbkxvd2VyID0KKwkJICAgIEFJUFRFS19TVFlMVVNfTE9XRVJfQlVUVE9OOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihzdHlsdXNfbG93ZXIsCisJCSAgIFNfSVJVR08gfCBTX0lXVUdPLAorCQkgICBzaG93X3RhYmxldFN0eWx1c0xvd2VyLCBzdG9yZV90YWJsZXRTdHlsdXNMb3dlcik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICdtb3VzZV9sZWZ0JyBmaWxlLiBOb3RlIHRoYXQgdGhpcyBmaWxlCisgKiBib3RoIGRpc3BsYXlzIGN1cnJlbnQgc2V0dGluZyBhbmQgYWxsb3dzIGZvciBzZXR0aW5nIGNoYW5naW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldE1vdXNlTGVmdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwljaGFyICpzOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoYWlwdGVrLT5jdXJTZXR0aW5nLm1vdXNlQnV0dG9uTGVmdCkgeworCWNhc2UgQUlQVEVLX01PVVNFX0xFRlRfQlVUVE9OOgorCQlzID0gImxlZnQiOworCQlicmVhazsKKworCWNhc2UgQUlQVEVLX01PVVNFX01JRERMRV9CVVRUT046CisJCXMgPSAibWlkZGxlIjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19NT1VTRV9SSUdIVF9CVVRUT046CisJCXMgPSAicmlnaHQiOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXMgPSAidW5rbm93biI7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgcyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV90YWJsZXRNb3VzZUxlZnQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RyY21wKGJ1ZiwgImxlZnQiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy5tb3VzZUJ1dHRvbkxlZnQgPSBBSVBURUtfTU9VU0VfTEVGVF9CVVRUT047CisJfSBlbHNlIGlmIChzdHJjbXAoYnVmLCAibWlkZGxlIikgPT0gMCkgeworCQlhaXB0ZWstPm5ld1NldHRpbmcubW91c2VCdXR0b25MZWZ0ID0gQUlQVEVLX01PVVNFX01JRERMRV9CVVRUT047CisJfSBlbHNlIGlmIChzdHJjbXAoYnVmLCAicmlnaHQiKSA9PSAwKSB7CisJCWFpcHRlay0+bmV3U2V0dGluZy5tb3VzZUJ1dHRvbkxlZnQgPSBBSVBURUtfTU9VU0VfUklHSFRfQlVUVE9OOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihtb3VzZV9sZWZ0LAorCQkgICBTX0lSVUdPIHwgU19JV1VHTywKKwkJICAgc2hvd190YWJsZXRNb3VzZUxlZnQsIHN0b3JlX3RhYmxldE1vdXNlTGVmdCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICdtb3VzZV9taWRkbGUnIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGZpbGUKKyAqIGJvdGggZGlzcGxheXMgY3VycmVudCBzZXR0aW5nIGFuZCBhbGxvd3MgZm9yIHNldHRpbmcgY2hhbmdpbmcuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGFibGV0TW91c2VNaWRkbGUoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJY2hhciAqczsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGFpcHRlay0+Y3VyU2V0dGluZy5tb3VzZUJ1dHRvbk1pZGRsZSkgeworCWNhc2UgQUlQVEVLX01PVVNFX0xFRlRfQlVUVE9OOgorCQlzID0gImxlZnQiOworCQlicmVhazsKKworCWNhc2UgQUlQVEVLX01PVVNFX01JRERMRV9CVVRUT046CisJCXMgPSAibWlkZGxlIjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19NT1VTRV9SSUdIVF9CVVRUT046CisJCXMgPSAicmlnaHQiOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXMgPSAidW5rbm93biI7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgcyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV90YWJsZXRNb3VzZU1pZGRsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChzdHJjbXAoYnVmLCAibGVmdCIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLm1vdXNlQnV0dG9uTWlkZGxlID0gQUlQVEVLX01PVVNFX0xFRlRfQlVUVE9OOworCX0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwgIm1pZGRsZSIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLm1vdXNlQnV0dG9uTWlkZGxlID0KKwkJICAgIEFJUFRFS19NT1VTRV9NSURETEVfQlVUVE9OOworCX0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwgInJpZ2h0IikgPT0gMCkgeworCQlhaXB0ZWstPm5ld1NldHRpbmcubW91c2VCdXR0b25NaWRkbGUgPQorCQkgICAgQUlQVEVLX01PVVNFX1JJR0hUX0JVVFRPTjsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIobW91c2VfbWlkZGxlLAorCQkgICBTX0lSVUdPIHwgU19JV1VHTywKKwkJICAgc2hvd190YWJsZXRNb3VzZU1pZGRsZSwgc3RvcmVfdGFibGV0TW91c2VNaWRkbGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAnbW91c2VfcmlnaHQnIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGZpbGUKKyAqIGJvdGggZGlzcGxheXMgY3VycmVudCBzZXR0aW5nIGFuZCBhbGxvd3MgZm9yIHNldHRpbmcgY2hhbmdpbmcuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGFibGV0TW91c2VSaWdodChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwljaGFyICpzOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoYWlwdGVrLT5jdXJTZXR0aW5nLm1vdXNlQnV0dG9uUmlnaHQpIHsKKwljYXNlIEFJUFRFS19NT1VTRV9MRUZUX0JVVFRPTjoKKwkJcyA9ICJsZWZ0IjsKKwkJYnJlYWs7CisKKwljYXNlIEFJUFRFS19NT1VTRV9NSURETEVfQlVUVE9OOgorCQlzID0gIm1pZGRsZSI7CisJCWJyZWFrOworCisJY2FzZSBBSVBURUtfTU9VU0VfUklHSFRfQlVUVE9OOgorCQlzID0gInJpZ2h0IjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzID0gInVua25vd24iOworCQlicmVhazsKKwl9CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIHMpOworfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfdGFibGV0TW91c2VSaWdodChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChzdHJjbXAoYnVmLCAibGVmdCIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLm1vdXNlQnV0dG9uUmlnaHQgPSBBSVBURUtfTU9VU0VfTEVGVF9CVVRUT047CisJfSBlbHNlIGlmIChzdHJjbXAoYnVmLCAibWlkZGxlIikgPT0gMCkgeworCQlhaXB0ZWstPm5ld1NldHRpbmcubW91c2VCdXR0b25SaWdodCA9CisJCSAgICBBSVBURUtfTU9VU0VfTUlERExFX0JVVFRPTjsKKwl9IGVsc2UgaWYgKHN0cmNtcChidWYsICJyaWdodCIpID09IDApIHsKKwkJYWlwdGVrLT5uZXdTZXR0aW5nLm1vdXNlQnV0dG9uUmlnaHQgPSBBSVBURUtfTU9VU0VfUklHSFRfQlVUVE9OOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihtb3VzZV9yaWdodCwKKwkJICAgU19JUlVHTyB8IFNfSVdVR08sCisJCSAgIHNob3dfdGFibGV0TW91c2VSaWdodCwgc3RvcmVfdGFibGV0TW91c2VSaWdodCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICd3aGVlbCcgZmlsZS4gTm90ZSB0aGF0IHRoaXMgZmlsZQorICogYm90aCBkaXNwbGF5cyBjdXJyZW50IHNldHRpbmcgYW5kIGFsbG93cyBmb3Igc2V0dGluZyBjaGFuZ2luZy4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXRXaGVlbChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoYWlwdGVrLT5jdXJTZXR0aW5nLndoZWVsID09IEFJUFRFS19XSEVFTF9ESVNBQkxFKSB7CisJCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgImRpc2FibGVcbiIpOworCX0gZWxzZSB7CisJCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLAorCQkJCWFpcHRlay0+Y3VyU2V0dGluZy53aGVlbCk7CisJfQorfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfdGFibGV0V2hlZWwoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhaXB0ZWsgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlhaXB0ZWstPm5ld1NldHRpbmcud2hlZWwgPSAoaW50KXNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIod2hlZWwsCisJCSAgIFNfSVJVR08gfCBTX0lXVUdPLCBzaG93X3RhYmxldFdoZWVsLCBzdG9yZV90YWJsZXRXaGVlbCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwcG9ydCByb3V0aW5lcyBmb3IgdGhlICdleGVjdXRlJyBmaWxlLiBOb3RlIHRoYXQgdGhpcyBmaWxlCisgKiBib3RoIGRpc3BsYXlzIGN1cnJlbnQgc2V0dGluZyBhbmQgYWxsb3dzIGZvciBzZXR0aW5nIGNoYW5naW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RhYmxldEV4ZWN1dGUoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGFpcHRlayAqYWlwdGVrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoYWlwdGVrID09IE5VTEwpCisJCXJldHVybiAwOworCisJLyogVGhlcmUgaXMgbm90aGluZyB1c2VmdWwgdG8gZGlzcGxheSwgc28gYSBvbmUtbGluZSBtYW51YWwKKwkgKiBpcyBpbiBvcmRlci4uLgorCSAqLworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwKKwkJCSJXcml0ZSBhbnl0aGluZyB0byB0aGlzIGZpbGUgdG8gcHJvZ3JhbSB5b3VyIHRhYmxldC5cbiIpOworfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfdGFibGV0RXhlY3V0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCS8qIFdlIGRvIG5vdCBjYXJlIHdoYXQgeW91IHdyaXRlIHRvIHRoaXMgZmlsZS4gTWVyZWx5IHRoZSBhY3Rpb24KKwkgKiBvZiB3cml0aW5nIHRvIHRoaXMgZmlsZSB0cmlnZ2VycyBhIHRhYmxldCByZXByb2dyYW1taW5nLgorCSAqLworCW1lbWNweSgmYWlwdGVrLT5jdXJTZXR0aW5nLCAmYWlwdGVrLT5uZXdTZXR0aW5nLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGFpcHRla19zZXR0aW5ncykpOworCisJaWYgKGFpcHRla19wcm9ncmFtX3RhYmxldChhaXB0ZWspIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihleGVjdXRlLAorCQkgICBTX0lSVUdPIHwgU19JV1VHTywgc2hvd190YWJsZXRFeGVjdXRlLCBzdG9yZV90YWJsZXRFeGVjdXRlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzdXBwb3J0IHJvdXRpbmVzIGZvciB0aGUgJ29kbV9jb2RlJyBmaWxlLiBOb3RlIHRoYXQgdGhpcyBmaWxlCisgKiBvbmx5IGRpc3BsYXlzIGN1cnJlbnQgc2V0dGluZy4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd190YWJsZXRPRE1Db2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JTA0eFxuIiwgYWlwdGVrLT5mZWF0dXJlcy5vZG1Db2RlKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKG9kbV9jb2RlLCBTX0lSVUdPLCBzaG93X3RhYmxldE9ETUNvZGUsIE5VTEwpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAnbW9kZWxfY29kZScgZmlsZS4gTm90ZSB0aGF0IHRoaXMgZmlsZQorICogb25seSBkaXNwbGF5cyBjdXJyZW50IHNldHRpbmcuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGFibGV0TW9kZWxDb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JTA0eFxuIiwgYWlwdGVrLT5mZWF0dXJlcy5tb2RlbENvZGUpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIobW9kZWxfY29kZSwgU19JUlVHTywgc2hvd190YWJsZXRNb2RlbENvZGUsIE5VTEwpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cHBvcnQgcm91dGluZXMgZm9yIHRoZSAnZmlybXdhcmVfY29kZScgZmlsZS4gTm90ZSB0aGF0IHRoaXMgZmlsZQorICogb25seSBkaXNwbGF5cyBjdXJyZW50IHNldHRpbmcuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfZmlybXdhcmVDb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGFpcHRlayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiUwNHhcbiIsCisJCQlhaXB0ZWstPmZlYXR1cmVzLmZpcm13YXJlQ29kZSk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihmaXJtd2FyZV9jb2RlLCBTX0lSVUdPLCBzaG93X2Zpcm13YXJlQ29kZSwgTlVMTCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyByb3V0aW5lIHJlbW92ZXMgYWxsIGV4aXN0aW5nIHN5c2ZzIGZpbGVzIG1hbmFnZWQgYnkgdGhpcyBkZXZpY2UKKyAqIGRyaXZlci4KKyAqLworc3RhdGljIHZvaWQgYWlwdGVrX2RlbGV0ZV9maWxlcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3NpemUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9wcm9kdWN0X2lkKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdmVuZG9yX2lkKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdmVuZG9yKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcHJvZHVjdCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3BvaW50ZXJfbW9kZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2Nvb3JkaW5hdGVfbW9kZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3Rvb2xfbW9kZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3h0aWx0KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfeXRpbHQpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9qaXR0ZXIpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2lucHV0X3BhdGgpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9ldmVudF9jb3VudCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RpYWdub3N0aWMpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9vZG1fY29kZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZGVsX2NvZGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9maXJtd2FyZV9jb2RlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3R5bHVzX2xvd2VyKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3R5bHVzX3VwcGVyKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW91c2VfbGVmdCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21vdXNlX21pZGRsZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21vdXNlX3JpZ2h0KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfd2hlZWwpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9leGVjdXRlKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIHJvdXRpbmUgY3JlYXRlcyB0aGUgc3lzZnMgZmlsZXMgbWFuYWdlZCBieSB0aGlzIGRldmljZQorICogZHJpdmVyLgorICovCitzdGF0aWMgaW50IGFpcHRla19hZGRfZmlsZXMoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwlpZiAoKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zaXplKSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9wcm9kdWN0X2lkKSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl92ZW5kb3JfaWQpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZlbmRvcikpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcHJvZHVjdCkpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcG9pbnRlcl9tb2RlKSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9jb29yZGluYXRlX21vZGUpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3Rvb2xfbW9kZSkpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfeHRpbHQpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3l0aWx0KSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9qaXR0ZXIpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5KSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9pbnB1dF9wYXRoKSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9ldmVudF9jb3VudCkpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGlhZ25vc3RpYykpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfb2RtX2NvZGUpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZGVsX2NvZGUpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2Zpcm13YXJlX2NvZGUpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0eWx1c19sb3dlcikpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3R5bHVzX3VwcGVyKSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb3VzZV9sZWZ0KSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb3VzZV9taWRkbGUpKSB8fAorCSAgICAocmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21vdXNlX3JpZ2h0KSkgfHwKKwkgICAgKHJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl93aGVlbCkpIHx8CisJICAgIChyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZXhlY3V0ZSkpKSB7CisJCWVycigiYWlwdGVrOiBraWxsaW5nIG93biBzeXNmcyBkZXZpY2UgZmlsZXNcbiIpOworCQlhaXB0ZWtfZGVsZXRlX2ZpbGVzKGRldik7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuIGEgdGFibGV0IGhhcyBiZWVuIGlkZW50aWZpZWQuIEl0IGJhc2ljYWxseQorICogc2V0cyB1cCB0aGUgdGFibGV0IGFuZCB0aGUgZHJpdmVyJ3MgaW50ZXJuYWwgc3RydWN0dXJlcy4KKyAqLworc3RhdGljIGludAorYWlwdGVrX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzdHJ1Y3QgYWlwdGVrICphaXB0ZWs7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXY7CisJc3RydWN0IGlucHV0X2hhbmRsZSAqaW5wdXRoYW5kbGU7CisJc3RydWN0IGxpc3RfaGVhZCAqbm9kZSwgKm5leHQ7CisJY2hhciBwYXRoWzY0ICsgMV07CisJaW50IGk7CisJaW50IHNwZWVkc1tdID0geyAwLAorCQlBSVBURUtfUFJPR1JBTU1BQkxFX0RFTEFZXzUwLAorCQlBSVBURUtfUFJPR1JBTU1BQkxFX0RFTEFZXzQwMCwKKwkJQUlQVEVLX1BST0dSQU1NQUJMRV9ERUxBWV8yNSwKKwkJQUlQVEVLX1BST0dSQU1NQUJMRV9ERUxBWV8xMDAsCisJCUFJUFRFS19QUk9HUkFNTUFCTEVfREVMQVlfMjAwLAorCQlBSVBURUtfUFJPR1JBTU1BQkxFX0RFTEFZXzMwMAorCX07CisKKwkvKiBwcm9ncmFtbWFibGVEZWxheSBpcyB3aGVyZSB0aGUgY29tbWFuZC1saW5lIHNwZWNpZmllZAorCSAqIGRlbGF5IGlzIGtlcHQuIFdlIG1ha2UgaXQgdGhlIGZpcnN0IGVsZW1lbnQgb2Ygc3BlZWRzW10sCisJICogc28gdGhlcmVmb3JlLCB5b3VyIG92ZXJyaWRlIHNwZWVkIGlzIHRyaWVkIGZpcnN0LCB0aGVuIHRoZQorCSAqIHJlbWFpbmRlci4gTm90ZSB0aGF0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIDQwMG1zIHdpbGwgYmUgdHJpZWQKKwkgKiBpZiB5b3UgZG8gbm90IHNwZWNpZnkgYW55IGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIuCisJICovCisJc3BlZWRzWzBdID0gcHJvZ3JhbW1hYmxlRGVsYXk7CisKKwlpZiAoKGFpcHRlayA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhaXB0ZWspLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KGFpcHRlaywgMCwgc2l6ZW9mKHN0cnVjdCBhaXB0ZWspKTsKKworCWFpcHRlay0+ZGF0YSA9IHVzYl9idWZmZXJfYWxsb2ModXNiZGV2LCBBSVBURUtfUEFDS0VUX0xFTkdUSCwKKwkJCQkJU0xBQl9BVE9NSUMsICZhaXB0ZWstPmRhdGFfZG1hKTsKKwlpZiAoYWlwdGVrLT5kYXRhID09IE5VTEwpIHsKKwkJa2ZyZWUoYWlwdGVrKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYWlwdGVrLT51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmIChhaXB0ZWstPnVyYiA9PSBOVUxMKSB7CisJCXVzYl9idWZmZXJfZnJlZSh1c2JkZXYsIEFJUFRFS19QQUNLRVRfTEVOR1RILCBhaXB0ZWstPmRhdGEsCisJCQkJYWlwdGVrLT5kYXRhX2RtYSk7CisJCWtmcmVlKGFpcHRlayk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIFNldCB1cCB0aGUgY3VyU2V0dGluZ3Mgc3RydWN0LiBTYWlkIHN0cnVjdCBjb250YWlucyB0aGUgY3VycmVudAorCSAqIHByb2dyYW1tYWJsZSBwYXJhbWV0ZXJzLiBUaGUgbmV3U2V0dGluZyBzdHJ1Y3QgY29udGFpbnMgY2hhbmdlcworCSAqIHRoZSB1c2VyIG1ha2VzIHRvIHRoZSBzZXR0aW5ncyB2aWEgdGhlIHN5c2ZzIGludGVyZmFjZS4gVGhvc2UKKwkgKiBjaGFuZ2VzIGFyZSBub3QgImNvbW1pdHRlZCIgdG8gY3VyU2V0dGluZ3MgdW50aWwgdGhlIHVzZXIKKwkgKiB3cml0ZXMgdG8gdGhlIHN5c2ZzLy4uLi9leGVjdXRlIGZpbGUuCisJICovCisJYWlwdGVrLT5jdXJTZXR0aW5nLnBvaW50ZXJNb2RlID0gQUlQVEVLX1BPSU5URVJfRUlUSEVSX01PREU7CisJYWlwdGVrLT5jdXJTZXR0aW5nLmNvb3JkaW5hdGVNb2RlID0gQUlQVEVLX0NPT1JESU5BVEVfQUJTT0xVVEVfTU9ERTsKKwlhaXB0ZWstPmN1clNldHRpbmcudG9vbE1vZGUgPSBBSVBURUtfVE9PTF9CVVRUT05fUEVOX01PREU7CisJYWlwdGVrLT5jdXJTZXR0aW5nLnhUaWx0ID0gQUlQVEVLX1RJTFRfRElTQUJMRTsKKwlhaXB0ZWstPmN1clNldHRpbmcueVRpbHQgPSBBSVBURUtfVElMVF9ESVNBQkxFOworCWFpcHRlay0+Y3VyU2V0dGluZy5tb3VzZUJ1dHRvbkxlZnQgPSBBSVBURUtfTU9VU0VfTEVGVF9CVVRUT047CisJYWlwdGVrLT5jdXJTZXR0aW5nLm1vdXNlQnV0dG9uTWlkZGxlID0gQUlQVEVLX01PVVNFX01JRERMRV9CVVRUT047CisJYWlwdGVrLT5jdXJTZXR0aW5nLm1vdXNlQnV0dG9uUmlnaHQgPSBBSVBURUtfTU9VU0VfUklHSFRfQlVUVE9OOworCWFpcHRlay0+Y3VyU2V0dGluZy5zdHlsdXNCdXR0b25VcHBlciA9IEFJUFRFS19TVFlMVVNfVVBQRVJfQlVUVE9OOworCWFpcHRlay0+Y3VyU2V0dGluZy5zdHlsdXNCdXR0b25Mb3dlciA9IEFJUFRFS19TVFlMVVNfTE9XRVJfQlVUVE9OOworCWFpcHRlay0+Y3VyU2V0dGluZy5qaXR0ZXJEZWxheSA9IGppdHRlckRlbGF5OworCWFpcHRlay0+Y3VyU2V0dGluZy5wcm9ncmFtbWFibGVEZWxheSA9IHByb2dyYW1tYWJsZURlbGF5OworCisJLyogQm90aCBzdHJ1Y3RzIHNob3VsZCBoYXZlIGVxdWl2YWxlbnQgc2V0dGluZ3MKKwkgKi8KKwltZW1jcHkoJmFpcHRlay0+bmV3U2V0dGluZywgJmFpcHRlay0+Y3VyU2V0dGluZywKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBhaXB0ZWtfc2V0dGluZ3MpKTsKKworCS8qIE5vdyBwcm9ncmFtIHRoZSBjYXBhY2l0aWVzIG9mIHRoZSB0YWJsZXQsIGluIHRlcm1zIG9mIGJlaW5nCisJICogYW4gaW5wdXQgZGV2aWNlLgorCSAqLworCWFpcHRlay0+aW5wdXRkZXYuZXZiaXRbMF0gfD0gQklUKEVWX0tFWSkKKwkgICAgfCBCSVQoRVZfQUJTKQorCSAgICB8IEJJVChFVl9SRUwpCisJICAgIHwgQklUKEVWX01TQyk7CisKKwlhaXB0ZWstPmlucHV0ZGV2LmFic2JpdFswXSB8PQorCSAgICAoQklUKEFCU19YKSB8CisJICAgICBCSVQoQUJTX1kpIHwKKwkgICAgIEJJVChBQlNfUFJFU1NVUkUpIHwKKwkgICAgIEJJVChBQlNfVElMVF9YKSB8CisJICAgICBCSVQoQUJTX1RJTFRfWSkgfCBCSVQoQUJTX1dIRUVMKSB8IEJJVChBQlNfTUlTQykpOworCisJYWlwdGVrLT5pbnB1dGRldi5yZWxiaXRbMF0gfD0KKwkgICAgKEJJVChSRUxfWCkgfCBCSVQoUkVMX1kpIHwgQklUKFJFTF9XSEVFTCkgfCBCSVQoUkVMX01JU0MpKTsKKworCWFpcHRlay0+aW5wdXRkZXYua2V5Yml0W0xPTkcoQlROX0xFRlQpXSB8PQorCSAgICAoQklUKEJUTl9MRUZUKSB8IEJJVChCVE5fUklHSFQpIHwgQklUKEJUTl9NSURETEUpKTsKKworCWFpcHRlay0+aW5wdXRkZXYua2V5Yml0W0xPTkcoQlROX0RJR0kpXSB8PQorCSAgICAoQklUKEJUTl9UT09MX1BFTikgfAorCSAgICAgQklUKEJUTl9UT09MX1JVQkJFUikgfAorCSAgICAgQklUKEJUTl9UT09MX1BFTkNJTCkgfAorCSAgICAgQklUKEJUTl9UT09MX0FJUkJSVVNIKSB8CisJICAgICBCSVQoQlROX1RPT0xfQlJVU0gpIHwKKwkgICAgIEJJVChCVE5fVE9PTF9NT1VTRSkgfAorCSAgICAgQklUKEJUTl9UT09MX0xFTlMpIHwKKwkgICAgIEJJVChCVE5fVE9VQ0gpIHwgQklUKEJUTl9TVFlMVVMpIHwgQklUKEJUTl9TVFlMVVMyKSk7CisKKwlhaXB0ZWstPmlucHV0ZGV2Lm1zY2JpdFswXSA9IEJJVChNU0NfU0VSSUFMKTsKKworCS8qIFByb2dyYW1taW5nIHRoZSB0YWJsZXQgbWFjcm8ga2V5cyBuZWVkcyB0byBiZSBkb25lIHdpdGggYSBmb3IgbG9vcAorCSAqIGFzIHRoZSBrZXljb2RlcyBhcmUgZGlzY29udGlndW91cy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKG1hY3JvS2V5RXZlbnRzKSAvIHNpemVvZihtYWNyb0tleUV2ZW50c1swXSk7ICsraSkKKwkJc2V0X2JpdChtYWNyb0tleUV2ZW50c1tpXSwgYWlwdGVrLT5pbnB1dGRldi5rZXliaXQpOworCisJLyogU2V0IHVwIGNsaWVudCBkYXRhLCBwb2ludGVycyB0byBvcGVuIGFuZCBjbG9zZSByb3V0aW5lcworCSAqIGZvciB0aGUgaW5wdXQgZGV2aWNlLgorCSAqLworCWFpcHRlay0+aW5wdXRkZXYucHJpdmF0ZSA9IGFpcHRlazsKKwlhaXB0ZWstPmlucHV0ZGV2Lm9wZW4gPSBhaXB0ZWtfb3BlbjsKKwlhaXB0ZWstPmlucHV0ZGV2LmNsb3NlID0gYWlwdGVrX2Nsb3NlOworCisJLyogRGV0ZXJtaW5lIHRoZSB1c2IgZGV2aWNlcycgcGh5c2ljYWwgcGF0aC4KKwkgKiBBc2tldGggbm90IHdoeSB3ZSBhbHdheXMgcHJldGVuZCB3ZSdyZSB1c2luZyAiLi4vaW5wdXQwIiwKKwkgKiBidXQgSSBzdXNwZWN0IHRoaXMgd2lsbCBoYXZlIHRvIGJlIHJlZmFjdG9yZWQgb25lCisJICogZGF5IGlmIGEgc2luZ2xlIFVTQiBkZXZpY2UgY2FuIGJlIGEga2V5Ym9hcmQgJiBhIG1vdXNlCisJICogJiBhIHRhYmxldCwgYW5kIHRoZSBpbnB1dFggbnVtYmVyIGFjdHVhbGx5IHdpbGwgdGVsbAorCSAqIHVzIHNvbWV0aGluZy4uLgorCSAqLworCWlmICh1c2JfbWFrZV9wYXRoKHVzYmRldiwgcGF0aCwgNjQpID4gMCkKKwkJc3ByaW50ZihhaXB0ZWstPmZlYXR1cmVzLnVzYlBhdGgsICIlcy9pbnB1dDAiLCBwYXRoKTsKKworCS8qIFByb2dyYW0gdGhlIGlucHV0IGRldmljZSBjb29yZGluYXRlIGNhcGFjaXRpZXMuIFdlIGRvIG5vdCB5ZXQKKwkgKiBrbm93IHdoYXQgbWF4aW11bSBYLCBZLCBhbmQgWiB2YWx1ZXMgYXJlLCBzbyB3ZSdyZSBwdXR0aW5nIGZha2UKKwkgKiB2YWx1ZXMgaW4uIExhdGVyLCB3ZSdsbCBhc2sgdGhlIHRhYmxldCB0byBwdXQgaW4gdGhlIGNvcnJlY3QKKwkgKiB2YWx1ZXMuCisJICovCisJYWlwdGVrLT5pbnB1dGRldi5hYnNtaW5bQUJTX1hdID0gMDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21heFtBQlNfWF0gPSAyOTk5OworCWFpcHRlay0+aW5wdXRkZXYuYWJzbWluW0FCU19ZXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNtYXhbQUJTX1ldID0gMjI0OTsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21pbltBQlNfUFJFU1NVUkVdID0gMDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic21heFtBQlNfUFJFU1NVUkVdID0gNTExOworCWFpcHRlay0+aW5wdXRkZXYuYWJzbWluW0FCU19USUxUX1hdID0gQUlQVEVLX1RJTFRfTUlOOworCWFpcHRlay0+aW5wdXRkZXYuYWJzbWF4W0FCU19USUxUX1hdID0gQUlQVEVLX1RJTFRfTUFYOworCWFpcHRlay0+aW5wdXRkZXYuYWJzbWluW0FCU19USUxUX1ldID0gQUlQVEVLX1RJTFRfTUlOOworCWFpcHRlay0+aW5wdXRkZXYuYWJzbWF4W0FCU19USUxUX1ldID0gQUlQVEVLX1RJTFRfTUFYOworCWFpcHRlay0+aW5wdXRkZXYuYWJzbWluW0FCU19XSEVFTF0gPSBBSVBURUtfV0hFRUxfTUlOOworCWFpcHRlay0+aW5wdXRkZXYuYWJzbWF4W0FCU19XSEVFTF0gPSBBSVBURUtfV0hFRUxfTUFYIC0gMTsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic2Z1enpbQUJTX1hdID0gMDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic2Z1enpbQUJTX1ldID0gMDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic2Z1enpbQUJTX1BSRVNTVVJFXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNmdXp6W0FCU19USUxUX1hdID0gMDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic2Z1enpbQUJTX1RJTFRfWV0gPSAwOworCWFpcHRlay0+aW5wdXRkZXYuYWJzZnV6eltBQlNfV0hFRUxdID0gMDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic2ZsYXRbQUJTX1hdID0gMDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic2ZsYXRbQUJTX1ldID0gMDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic2ZsYXRbQUJTX1BSRVNTVVJFXSA9IDA7CisJYWlwdGVrLT5pbnB1dGRldi5hYnNmbGF0W0FCU19USUxUX1hdID0gMDsKKwlhaXB0ZWstPmlucHV0ZGV2LmFic2ZsYXRbQUJTX1RJTFRfWV0gPSAwOworCWFpcHRlay0+aW5wdXRkZXYuYWJzZmxhdFtBQlNfV0hFRUxdID0gMDsKKwlhaXB0ZWstPmlucHV0ZGV2Lm5hbWUgPSAiQWlwdGVrIjsKKwlhaXB0ZWstPmlucHV0ZGV2LnBoeXMgPSBhaXB0ZWstPmZlYXR1cmVzLnVzYlBhdGg7CisJYWlwdGVrLT5pbnB1dGRldi5pZC5idXN0eXBlID0gQlVTX1VTQjsKKwlhaXB0ZWstPmlucHV0ZGV2LmlkLnZlbmRvciA9IGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJYWlwdGVrLT5pbnB1dGRldi5pZC5wcm9kdWN0ID0gbGUxNl90b19jcHUodXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJYWlwdGVrLT5pbnB1dGRldi5pZC52ZXJzaW9uID0gbGUxNl90b19jcHUodXNiZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisKKwlhaXB0ZWstPnVzYmRldiA9IHVzYmRldjsKKwlhaXB0ZWstPmlmbnVtID0gaW50Zi0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisJYWlwdGVrLT5pbkRlbGF5ID0gMDsKKwlhaXB0ZWstPmVuZERlbGF5ID0gMDsKKwlhaXB0ZWstPnByZXZpb3VzSml0dGVyYWJsZSA9IDA7CisKKwllbmRwb2ludCA9ICZpbnRmLT5hbHRzZXR0aW5nWzBdLmVuZHBvaW50WzBdLmRlc2M7CisKKwkvKiBHbyBzZXQgdXAgb3VyIFVSQiwgd2hpY2ggaXMgY2FsbGVkIHdoZW4gdGhlIHRhYmxldCByZWNlaXZlcworCSAqIGlucHV0LgorCSAqLworCXVzYl9maWxsX2ludF91cmIoYWlwdGVrLT51cmIsCisJCQkgYWlwdGVrLT51c2JkZXYsCisJCQkgdXNiX3JjdmludHBpcGUoYWlwdGVrLT51c2JkZXYsCisJCQkJCWVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCSBhaXB0ZWstPmRhdGEsIDgsIGFpcHRla19pcnEsIGFpcHRlaywKKwkJCSBlbmRwb2ludC0+YkludGVydmFsKTsKKworCWFpcHRlay0+dXJiLT50cmFuc2Zlcl9kbWEgPSBhaXB0ZWstPmRhdGFfZG1hOworCWFpcHRlay0+dXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCS8qIFJlZ2lzdGVyIHRoZSB0YWJsZXQgYXMgYW4gSW5wdXQgRGV2aWNlCisJICovCisJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKCZhaXB0ZWstPmlucHV0ZGV2KTsKKworCS8qIFdlIG5vdyB3aWxsIGxvb2sgZm9yIHRoZSBldmRldiBkZXZpY2Ugd2hpY2ggaXMgbWFwcGVkIHRvCisJICogdGhlIHRhYmxldC4gVGhlIHBhcnRpYWwgbmFtZSBpcyBrZXB0IGluIHRoZSBsaW5rIGxpc3Qgb2YKKwkgKiBpbnB1dF9oYW5kbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGlucHV0IGRldmljZS4KKwkgKiBXaGF0IGlkZW50aWZpZXMgYW4gZXZkZXYgaW5wdXRfaGFuZGxlciBpcyB0aGF0IGl0IGJlZ2lucworCSAqIHdpdGggJ2V2ZW50JywgY29udGludWVzIHdpdGggYSBkaWdpdCwgYW5kIHRoYXQgaW4gdHVybgorCSAqIGlzIG1hcHBlZCB0byAve2RldmZzfS9pbnB1dC9ldmVudE4uCisJICovCisJaW5wdXRkZXYgPSAmYWlwdGVrLT5pbnB1dGRldjsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgJmlucHV0ZGV2LT5oX2xpc3QpIHsKKwkJaW5wdXRoYW5kbGUgPSB0b19oYW5kbGUobm9kZSk7CisJCWlmIChzdHJuY21wKGlucHV0aGFuZGxlLT5uYW1lLCAiZXZlbnQiLCA1KSA9PSAwKSB7CisJCQlzdHJjcHkoYWlwdGVrLT5mZWF0dXJlcy5pbnB1dFBhdGgsIGlucHV0aGFuZGxlLT5uYW1lKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaW5mbygiaW5wdXQ6IEFpcHRlayBvbiAlcyAoJXMpXG4iLCBwYXRoLCBhaXB0ZWstPmZlYXR1cmVzLmlucHV0UGF0aCk7CisKKwkvKiBQcm9ncmFtIHRoZSB0YWJsZXQuIFRoaXMgc2V0cyB0aGUgdGFibGV0IHVwIGluIHRoZSBtb2RlCisJICogc3BlY2lmaWVkIGluIG5ld1NldHRpbmcsIGFuZCBhbHNvIHF1ZXJpZXMgdGhlIHRhYmxldCdzCisJICogcGh5c2ljYWwgY2FwYWNpdGllcy4KKwkgKgorCSAqIFNhbml0eSBjaGVjazogaWYgYSB0YWJsZXQgZG9lc24ndCBsaWtlIHRoZSBzbG93IHByb2dyYW1tYXRpYworCSAqIGRlbGF5LCB3ZSBvZnRlbiBnZXQgc2l6ZXMgb2YgMHgwLiBMZXQncyB1c2UgdGhhdCBhcyBhbiBpbmRpY2F0b3IKKwkgKiB0byB0cnkgZmFzdGVyIGRlbGF5cywgdXAgdG8gMjUgbXMuIElmIHRoYXQgbG9naWMgZmFpbHMsIHdlbGwsIHlvdSdsbAorCSAqIGhhdmUgdG8gZXhwbGFpbiB0byB1cyBob3cgeW91ciB0YWJsZXQgdGhpbmtzIGl0J3MgMHgwLCBhbmQgeWV0IHRoYXQncworCSAqIG5vdCBhbiBlcnJvciA6LSkKKwkgKi8KKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3BlZWRzKSAvIHNpemVvZihzcGVlZHNbMF0pOyArK2kpIHsKKwkJYWlwdGVrLT5jdXJTZXR0aW5nLnByb2dyYW1tYWJsZURlbGF5ID0gc3BlZWRzW2ldOworCQkodm9pZClhaXB0ZWtfcHJvZ3JhbV90YWJsZXQoYWlwdGVrKTsKKwkJaWYgKGFpcHRlay0+aW5wdXRkZXYuYWJzbWF4W0FCU19YXSA+IDApIHsKKwkJCWluZm8oImlucHV0OiBBaXB0ZWsgdXNpbmcgJWQgbXMgcHJvZ3JhbW1pbmcgc3BlZWRcbiIsCisJCQkgICAgIGFpcHRlay0+Y3VyU2V0dGluZy5wcm9ncmFtbWFibGVEZWxheSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIEFzc29jaWF0ZSB0aGlzIGRyaXZlcidzIHN0cnVjdCB3aXRoIHRoZSB1c2IgaW50ZXJmYWNlLgorCSAqLworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgYWlwdGVrKTsKKworCS8qIFNldCB1cCB0aGUgc3lzZnMgZmlsZXMKKwkgKi8KKwlhaXB0ZWtfYWRkX2ZpbGVzKCZpbnRmLT5kZXYpOworCisJLyogTWFrZSBzdXJlIHRoZSBldmRldiBtb2R1bGUgaXMgbG9hZGVkLiBBc3N1bWluZyBldmRldiBJUyBhIG1vZHVsZSA6LSkKKwkgKi8KKwlpZiAocmVxdWVzdF9tb2R1bGUoImV2ZGV2IikgIT0gMCkKKwkJaW5mbygiYWlwdGVrOiBlcnJvciBsb2FkaW5nICdldmRldicgbW9kdWxlIik7CisKKwlyZXR1cm4gMDsKK30KKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqLworc3RhdGljIHZvaWQgYWlwdGVrX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYWlwdGVrX2RyaXZlciA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9ICJhaXB0ZWsiLAorCS5wcm9iZSA9IGFpcHRla19wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGFpcHRla19kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9IGFpcHRla19pZHMsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlYWwgd2l0aCB0YWJsZXQgZGlzY29ubmVjdGluZyBmcm9tIHRoZSBzeXN0ZW0uCisgKi8KK3N0YXRpYyB2b2lkIGFpcHRla19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBhaXB0ZWsgKmFpcHRlayA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwkvKiBEaXNhc3NvY2lhdGUgZHJpdmVyJ3Mgc3RydWN0IHdpdGggdXNiIGludGVyZmFjZQorCSAqLworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJaWYgKGFpcHRlayAhPSBOVUxMKSB7CisJCS8qIEZyZWUgJiB1bmhvb2sgZXZlcnl0aGluZyBmcm9tIHRoZSBzeXN0ZW0uCisJCSAqLworCQl1c2Jfa2lsbF91cmIoYWlwdGVrLT51cmIpOworCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSgmYWlwdGVrLT5pbnB1dGRldik7CisJCWFpcHRla19kZWxldGVfZmlsZXMoJmludGYtPmRldik7CisJCXVzYl9mcmVlX3VyYihhaXB0ZWstPnVyYik7CisJCXVzYl9idWZmZXJfZnJlZShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLAorCQkJCUFJUFRFS19QQUNLRVRfTEVOR1RILAorCQkJCWFpcHRlay0+ZGF0YSwgYWlwdGVrLT5kYXRhX2RtYSk7CisJCWtmcmVlKGFpcHRlayk7CisJCWFpcHRlayA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBhaXB0ZWtfaW5pdCh2b2lkKQoreworCWludCByZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmFpcHRla19kcml2ZXIpOworCWlmIChyZXN1bHQgPT0gMCkgeworCQlpbmZvKERSSVZFUl9WRVJTSU9OICI6ICIgRFJJVkVSX0FVVEhPUik7CisJCWluZm8oRFJJVkVSX0RFU0MpOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWlwdGVrX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmYWlwdGVrX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0ocHJvZ3JhbW1hYmxlRGVsYXksIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHByb2dyYW1tYWJsZURlbGF5LCAiZGVsYXkgdXNlZCBkdXJpbmcgdGFibGV0IHByb2dyYW1taW5nIik7Cittb2R1bGVfcGFyYW0oaml0dGVyRGVsYXksIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGppdHRlckRlbGF5LCAic3R5bHVzL21vdXNlIHNldHRsZW1lbnQgZGVsYXkiKTsKKworbW9kdWxlX2luaXQoYWlwdGVrX2luaXQpOworbW9kdWxlX2V4aXQoYWlwdGVrX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvYXRpX3JlbW90ZS5jIGIvZHJpdmVycy91c2IvaW5wdXQvYXRpX3JlbW90ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NWFkZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9hdGlfcmVtb3RlLmMKQEAgLTAsMCArMSw4NTAgQEAKKy8qIAorICogIFVTQiBBVEkgUmVtb3RlIHN1cHBvcnQKKyAqCisgKiAgVmVyc2lvbiAyLjIuMCBDb3B5cmlnaHQgKGMpIDIwMDQgVG9ycmV5IEhvZmZtYW4gPHRob2ZmbWFuQGFybm9yLm5ldD4KKyAqICBWZXJzaW9uIDIuMS4xIENvcHlyaWdodCAoYykgMjAwMiBWbGFkaW1pciBEZXJnYWNoZXYKKyAqCisgKiAgVGhpcyAyLjIuMCB2ZXJzaW9uIGlzIGEgcmV3cml0ZSAvIGNsZWFudXAgb2YgdGhlIDIuMS4xIGRyaXZlciwgaW5jbHVkaW5nCisgKiAgcG9ydGluZyB0byB0aGUgMi42IGtlcm5lbCBpbnRlcmZhY2VzLCBhbG9uZyB3aXRoIG90aGVyIG1vZGlmaWNhdGlvbiAKKyAqICB0byBiZXR0ZXIgbWF0Y2ggdGhlIHN0eWxlIG9mIHRoZSBleGlzdGluZyB1c2IvaW5wdXQgZHJpdmVycy4gIEhvd2V2ZXIsIHRoZQorICogIHByb3RvY29sIGFuZCBoYXJkd2FyZSBoYW5kbGluZyBpcyBlc3NlbnRpYWxseSB1bmNoYW5nZWQgZnJvbSAyLjEuMS4KKyAqICAKKyAqICBUaGUgMi4xLjEgZHJpdmVyIHdhcyBkZXJpdmVkIGZyb20gdGhlIHVzYmF0aV9yZW1vdGUgYW5kIHVzYmtiZCBkcml2ZXJzIGJ5IAorICogIFZvanRlY2ggUGF2bGlrLgorICoKKyAqICBDaGFuZ2VzOgorICoKKyAqICBGZWIgMjAwNDogVG9ycmV5IEhvZmZtYW4gPHRob2ZmbWFuQGFybm9yLm5ldD4KKyAqICAgICAgICAgICAgVmVyc2lvbiAyLjIuMAorICogIEp1biAyMDA0OiBUb3JyZXkgSG9mZm1hbiA8dGhvZmZtYW5AYXJub3IubmV0PgorICogICAgICAgICAgICBWZXJzaW9uIDIuMi4xCisgKiAgICAgICAgICAgIEFkZGVkIGtleSByZXBlYXQgc3VwcG9ydCBjb250cmlidXRlZCBieToKKyAqICAgICAgICAgICAgICAgIFZpbmNlbnQgVmFuYWNrZXJlIDx2YW5hY2tlcmVAbGlmLnVuaXYtbXJzLmZyPgorICogICAgICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgIkxvbGEiIHJlbW90ZSBjb250cmlidXRlZCBieToKKyAqICAgICAgICAgICAgICAgIFNldGggQ29obiA8c2V0aGNvaG5AeWFob28uY29tPgorICoKKyAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqIAorICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAKKyAqCisgKiBIYXJkd2FyZSAmIHNvZnR3YXJlIG5vdGVzCisgKgorICogVGhlc2UgcmVtb3RlIGNvbnRyb2xzIGFyZSBkaXN0cmlidXRlZCBieSBBVEkgYXMgcGFydCBvZiB0aGVpciAKKyAqICJBbGwtSW4tV29uZGVyIiB2aWRlbyBjYXJkIHBhY2thZ2VzLiAgVGhlIHJlY2VpdmVyIHNlbGYtaWRlbnRpZmllcyBhcyBhIAorICogIlVTQiBSZWNlaXZlciIgd2l0aCBtYW51ZmFjdHVyZXIgIlgxMCBXaXJlbGVzcyBUZWNobm9sb2d5IEluYyIuCisgKgorICogVGhlICJMb2xhIiByZW1vdGUgaXMgYXZhaWxhYmxlIGZyb20gWDEwLiAgU2VlOiAKKyAqICAgIGh0dHA6Ly93d3cueDEwLmNvbS9wcm9kdWN0cy9sb2xhX3NnMS5odG0KKyAqIFRoZSBMb2xhIGlzIHNpbWlsYXIgdG8gdGhlIEFUSSByZW1vdGUgYnV0IGhhcyBubyBtb3VzZSBzdXBwb3J0LCBhbmQgc2xpZ2h0bHkKKyAqIGRpZmZlcmVudCBrZXlzLgorICoKKyAqIEl0IGlzIHBvc3NpYmxlIHRvIHVzZSBtdWx0aXBsZSByZWNlaXZlcnMgYW5kIHJlbW90ZXMgb24gbXVsdGlwbGUgY29tcHV0ZXJzIAorICogc2ltdWx0YW5lb3VzbHkgYnkgY29uZmlndXJpbmcgdGhlbSB0byB1c2Ugc3BlY2lmaWMgY2hhbm5lbHMuCisgKiAKKyAqIFRoZSBSRiBwcm90b2NvbCB1c2VkIGJ5IHRoZSByZW1vdGUgc3VwcG9ydHMgMTYgZGlzdGluY3QgY2hhbm5lbHMsIDEgdG8gMTYuICAKKyAqIEFjdHVhbGx5LCBpdCBtYXkgZXZlbiBzdXBwb3J0IG1vcmUsIGF0IGxlYXN0IGluIHNvbWUgcmV2aXNpb25zIG9mIHRoZSAKKyAqIGhhcmR3YXJlLgorICoKKyAqIEVhY2ggcmVtb3RlIGNhbiBiZSBjb25maWd1cmVkIHRvIHRyYW5zbWl0IG9uIG9uZSBjaGFubmVsIGFzIGZvbGxvd3M6CisgKiAgIC0gUHJlc3MgYW5kIGhvbGQgdGhlICJoYW5kIGljb24iIGJ1dHRvbi4gIAorICogICAtIFdoZW4gdGhlIHJlZCBMRUQgc3RhcnRzIHRvIGJsaW5rLCBsZXQgZ28gb2YgdGhlICJoYW5kIGljb24iIGJ1dHRvbi4gCisgKiAgIC0gV2hlbiBpdCBzdG9wcyBibGlua2luZywgaW5wdXQgdGhlIGNoYW5uZWwgY29kZSBhcyB0d28gZGlnaXRzLCBmcm9tIDAxIAorICogICAgIHRvIDE2LCBhbmQgcHJlc3MgdGhlIGhhbmQgaWNvbiBhZ2Fpbi4KKyAqIAorICogVGhlIHRpbWluZyBjYW4gYmUgYSBsaXR0bGUgdHJpY2t5LiAgVHJ5IGxvYWRpbmcgdGhlIG1vZHVsZSB3aXRoIGRlYnVnPTEKKyAqIHRvIGhhdmUgdGhlIGtlcm5lbCBwcmludCBvdXQgbWVzc2FnZXMgYWJvdXQgdGhlIHJlbW90ZSBjb250cm9sIG51bWJlcgorICogYW5kIG1hc2suICBOb3RlOiBkZWJ1Z2dpbmcgcHJpbnRzIHJlbW90ZSBudW1iZXJzIGFzIHplcm8tYmFzZWQgaGV4YWRlY2ltYWwuCisgKgorICogVGhlIGRyaXZlciBoYXMgYSAiY2hhbm5lbF9tYXNrIiBwYXJhbWV0ZXIuIFRoaXMgYml0bWFzayBzcGVjaWZpZXMgd2hpY2gKKyAqIGNoYW5uZWxzIHdpbGwgYmUgaWdub3JlZCBieSB0aGUgbW9kdWxlLiAgVG8gbWFzayBvdXQgY2hhbm5lbHMsIGp1c3QgYWRkIAorICogYWxsIHRoZSAyXmNoYW5uZWxfbnVtYmVyIHZhbHVlcyB0b2dldGhlci4KKyAqCisgKiBGb3IgaW5zdGFuY2UsIHNldCBjaGFubmVsX21hc2sgPSAyXjQgPSAxNiAoYmluYXJ5IDEwMDAwKSB0byBtYWtlIGF0aV9yZW1vdGUKKyAqIGlnbm9yZSBzaWduYWxzIGNvbWluZyBmcm9tIHJlbW90ZSBjb250cm9scyB0cmFuc21pdHRpbmcgb24gY2hhbm5lbCA0LCBidXQgCisgKiBhY2NlcHQgYWxsIG90aGVyIGNoYW5uZWxzLgorICoKKyAqIE9yLCBzZXQgY2hhbm5lbF9tYXNrID0gNjU1MzMsICgweEZGRkQpLCBhbmQgYWxsIGNoYW5uZWxzIGV4Y2VwdCAxIHdpbGwgYmUgCisgKiBpZ25vcmVkLgorICoKKyAqIFRoZSBkZWZhdWx0IGlzIDAgKHJlc3BvbmQgdG8gYWxsIGNoYW5uZWxzKS4gQml0IDAgYW5kIGJpdHMgMTctMzIgb2YgdGhpcyAKKyAqIHBhcmFtZXRlciBhcmUgdW51c2VkLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisKKy8qCisgKiBNb2R1bGUgYW5kIFZlcnNpb24gSW5mb3JtYXRpb24sIE1vZHVsZSBQYXJhbWV0ZXJzCisgKi8KKyAKKyNkZWZpbmUgQVRJX1JFTU9URV9WRU5ET1JfSUQgCTB4MGJjNworI2RlZmluZSBBVElfUkVNT1RFX1BST0RVQ1RfSUQgCTB4MDA0CisjZGVmaW5lIExPTEFfUkVNT1RFX1BST0RVQ1RfSUQgCTB4MDAyCisjZGVmaW5lIE1FRElPTl9SRU1PVEVfUFJPRFVDVF9JRCAweDAwNgorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OIAkgICAgICAgICIyLjIuMSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAgICAgICAgICAgIlRvcnJleSBIb2ZmbWFuIDx0aG9mZm1hbkBhcm5vci5uZXQ+IgorI2RlZmluZSBEUklWRVJfREVTQyAgICAgICAgICAgICAiQVRJL1gxMCBSRiBVU0IgUmVtb3RlIENvbnRyb2wiCisKKyNkZWZpbmUgTkFNRV9CVUZTSVpFICAgICAgODAgICAgLyogc2l6ZSBvZiBwcm9kdWN0IG5hbWUsIHBhdGggYnVmZmVycyAqLworI2RlZmluZSBEQVRBX0JVRlNJWkUgICAgICA2MyAgICAvKiBzaXplIG9mIFVSQiBkYXRhIGJ1ZmZlcnMgKi8KKyNkZWZpbmUgQVRJX0lOUFVUTlVNICAgICAgMSAgICAgLyogV2hpY2ggaW5wdXQgZGV2aWNlIHRvIHJlZ2lzdGVyIGFzICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNoYW5uZWxfbWFzayA9IDA7Cittb2R1bGVfcGFyYW0oY2hhbm5lbF9tYXNrLCB1bG9uZywgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGNoYW5uZWxfbWFzaywgIkJpdG1hc2sgb2YgcmVtb3RlIGNvbnRyb2wgY2hhbm5lbHMgdG8gaWdub3JlIik7CisKK3N0YXRpYyBpbnQgZGVidWcgPSAwOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSBleHRyYSBkZWJ1ZyBtZXNzYWdlcyBhbmQgaW5mb3JtYXRpb24iKTsKKworI2RlZmluZSBkYmdpbmZvKGRldiwgZm9ybWF0LCBhcmcuLi4pIGRvIHsgaWYgKGRlYnVnKSBkZXZfaW5mbyhkZXYgLCBmb3JtYXQgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQorI3VuZGVmIGVycgorI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0VSUiBmb3JtYXQgLCAjIyBhcmcpCisgCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgYXRpX3JlbW90ZV90YWJsZVtdID0geworCXsgVVNCX0RFVklDRShBVElfUkVNT1RFX1ZFTkRPUl9JRCwgQVRJX1JFTU9URV9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShBVElfUkVNT1RFX1ZFTkRPUl9JRCwgTE9MQV9SRU1PVEVfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoQVRJX1JFTU9URV9WRU5ET1JfSUQsIE1FRElPTl9SRU1PVEVfUFJPRFVDVF9JRCkgfSwKKwl7fQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGF0aV9yZW1vdGVfdGFibGUpOworCisvKiBHZXQgaGkgYW5kIGxvdyBieXRlcyBvZiBhIDE2LWJpdHMgaW50ICovCisjZGVmaW5lIEhJKGEpCSgodW5zaWduZWQgY2hhcikoKGEpID4+IDgpKQorI2RlZmluZSBMTyhhKQkoKHVuc2lnbmVkIGNoYXIpKChhKSAmIDB4ZmYpKQorCisjZGVmaW5lIFNFTkRfRkxBR19JTl9QUk9HUkVTUwkxCisjZGVmaW5lIFNFTkRfRkxBR19DT01QTEVURQkyCisKKy8qIERldmljZSBpbml0aWFsaXphdGlvbiBzdHJpbmdzICovCitzdGF0aWMgY2hhciBpbml0MVtdID0geyAweDAxLCAweDAwLCAweDIwLCAweDE0IH07CitzdGF0aWMgY2hhciBpbml0MltdID0geyAweDAxLCAweDAwLCAweDIwLCAweDE0LCAweDIwLCAweDIwLCAweDIwIH07CisKKy8qIEFjY2VsZXJhdGlvbiBjdXJ2ZSBmb3IgZGlyZWN0aW9uYWwgY29udHJvbCBwYWQgKi8KK3N0YXRpYyBjaGFyIGFjY2VsW10gPSB7IDEsIDIsIDQsIDYsIDksIDEzLCAyMCB9OworCisvKiBEdXBsaWNhdGUgZXZlbnQgZmlsdGVyaW5nIHRpbWUuIAorICogU2VxdWVudGlhbCwgaWRlbnRpY2FsIEtJTkRfRklMVEVSRUQgaW5wdXRzIHdpdGggbGVzcyB0aGFuCisgKiBGSUxURVJfVElNRSBqaWZmaWVzIGJldHdlZW4gdGhlbSBhcmUgY29uc2lkZXJlZCBhcyByZXBlYXQKKyAqIGV2ZW50cy4gVGhlIGhhcmR3YXJlIGdlbmVyYXRlcyA1IGV2ZW50cyBmb3IgdGhlIGZpcnN0IGtleXByZXNzCisgKiBhbmQgd2UgaGF2ZSB0byB0YWtlIHRoaXMgaW50byBhY2NvdW50IGZvciBhbiBhY2N1cmF0ZSByZXBlYXQKKyAqIGJlaGF2aW91ci4KKyAqIChIWiAvIDIwKSA9PSA1MCBtcyBhbmQgd29ya3Mgd2VsbCBmb3IgbWUuCisgKi8KKyNkZWZpbmUgRklMVEVSX1RJTUUgKEhaIC8gMjApCisKK3N0YXRpYyBERUNMQVJFX01VVEVYKGRpc2Nvbm5lY3Rfc2VtKTsKKworc3RydWN0IGF0aV9yZW1vdGUgeworCXN0cnVjdCBpbnB1dF9kZXYgaWRldjsJCQorCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJCQorCXN0cnVjdCB1cmIgKmlycV91cmI7CisJc3RydWN0IHVyYiAqb3V0X3VyYjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50X2luOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnRfb3V0OworCXVuc2lnbmVkIGNoYXIgKmluYnVmOworCXVuc2lnbmVkIGNoYXIgKm91dGJ1ZjsKKwlkbWFfYWRkcl90IGluYnVmX2RtYTsKKwlkbWFfYWRkcl90IG91dGJ1Zl9kbWE7CisKKwlpbnQgb3BlbjsgICAgICAgICAgICAgICAgICAgLyogb3BlbiBjb3VudGVyICovCisJCisJdW5zaWduZWQgY2hhciBvbGRfZGF0YVsyXTsgIC8qIERldGVjdCBkdXBsaWNhdGUgZXZlbnRzICovCisJdW5zaWduZWQgbG9uZyBvbGRfamlmZmllczsKKwl1bnNpZ25lZCBsb25nIGFjY19qaWZmaWVzOyAgLyogaGFuZGxlIGFjY2VsZXJhdGlvbiAqLworCXVuc2lnbmVkIGludCByZXBlYXRfY291bnQ7CisJCisJY2hhciBuYW1lW05BTUVfQlVGU0laRV07CisJY2hhciBwaHlzW05BTUVfQlVGU0laRV07CisKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCWludCBzZW5kX2ZsYWdzOworfTsKKworLyogIktpbmRzIiBvZiBtZXNzYWdlcyBzZW50IGZyb20gdGhlIGhhcmR3YXJlIHRvIHRoZSBkcml2ZXIuICovCisjZGVmaW5lIEtJTkRfRU5EICAgICAgICAwCisjZGVmaW5lIEtJTkRfTElURVJBTCAgICAxICAgLyogU2ltcGx5IHBhc3MgdG8gaW5wdXQgc3lzdGVtICovCisjZGVmaW5lIEtJTkRfRklMVEVSRUQgICAyICAgLyogQWRkIGFydGlmaWNpYWwga2V5LXVwIGV2ZW50cywgZHJvcCBrZXlyZXBlYXRzICovCisjZGVmaW5lIEtJTkRfTFUgICAgICAgICAzICAgLyogRGlyZWN0aW9uYWwga2V5cGFkIGRpYWdvbmFscyAtIGxlZnQgdXAsICovCisjZGVmaW5lIEtJTkRfUlUgICAgICAgICA0ICAgLyogICByaWdodCB1cCwgICovCisjZGVmaW5lIEtJTkRfTEQgICAgICAgICA1ICAgLyogICBsZWZ0IGRvd24sICovCisjZGVmaW5lIEtJTkRfUkQgICAgICAgICA2ICAgLyogICByaWdodCBkb3duICovCisjZGVmaW5lIEtJTkRfQUNDRUwgICAgICA3ICAgLyogRGlyZWN0aW9uYWwga2V5cGFkIC0gbGVmdCwgcmlnaHQsIHVwLCBkb3duLiovCisKKy8qIFRyYW5zbGF0aW9uIHRhYmxlIGZyb20gaGFyZHdhcmUgbWVzc2FnZXMgdG8gaW5wdXQgZXZlbnRzLiAqLworc3RhdGljIHN0cnVjdAoreworCXNob3J0IGtpbmQ7CisJdW5zaWduZWQgY2hhciBkYXRhMSwgZGF0YTI7CisJaW50IHR5cGU7CisJdW5zaWduZWQgaW50IGNvZGU7CisJaW50IHZhbHVlOworfSAgYXRpX3JlbW90ZV90YmxbXSA9IAoreworCS8qIERpcmVjdGlvbmFsIGNvbnRyb2wgcGFkIGF4ZXMgKi8KKwl7S0lORF9BQ0NFTCwgICAweDM1LCAweDcwLCBFVl9SRUwsIFJFTF9YLCAtMX0sCSAvKiBsZWZ0ICovCisJe0tJTkRfQUNDRUwsICAgMHgzNiwgMHg3MSwgRVZfUkVMLCBSRUxfWCwgMX0sICAgIC8qIHJpZ2h0ICovCisJe0tJTkRfQUNDRUwsICAgMHgzNywgMHg3MiwgRVZfUkVMLCBSRUxfWSwgLTF9LAkgLyogdXAgKi8KKwl7S0lORF9BQ0NFTCwgICAweDM4LCAweDczLCBFVl9SRUwsIFJFTF9ZLCAxfSwgICAgLyogZG93biAqLworCS8qIERpcmVjdGlvbmFsIGNvbnRyb2wgcGFkIGRpYWdvbmFscyAqLwkKKwl7S0lORF9MVSwgICAgICAweDM5LCAweDc0LCBFVl9SRUwsIDAsIDB9LCAgICAgICAgLyogbGVmdCB1cCAqLworCXtLSU5EX1JVLCAgICAgIDB4M2EsIDB4NzUsIEVWX1JFTCwgMCwgMH0sICAgICAgICAvKiByaWdodCB1cCAqLworCXtLSU5EX0xELCAgICAgIDB4M2MsIDB4NzcsIEVWX1JFTCwgMCwgMH0sICAgICAgICAvKiBsZWZ0IGRvd24gKi8KKwl7S0lORF9SRCwgICAgICAweDNiLCAweDc2LCBFVl9SRUwsIDAsIDB9LCAgICAgICAgLyogcmlnaHQgZG93biAqLworCisJLyogIk1vdXNlIGJ1dHRvbiIgYnV0dG9ucyAqLworCXtLSU5EX0xJVEVSQUwsIDB4M2QsIDB4NzgsIEVWX0tFWSwgQlROX0xFRlQsIDF9LCAvKiBsZWZ0IGJ0biBkb3duICovCisJe0tJTkRfTElURVJBTCwgMHgzZSwgMHg3OSwgRVZfS0VZLCBCVE5fTEVGVCwgMH0sIC8qIGxlZnQgYnRuIHVwICovCisJe0tJTkRfTElURVJBTCwgMHg0MSwgMHg3YywgRVZfS0VZLCBCVE5fUklHSFQsIDF9LC8qIHJpZ2h0IGJ0biBkb3duICovCisJe0tJTkRfTElURVJBTCwgMHg0MiwgMHg3ZCwgRVZfS0VZLCBCVE5fUklHSFQsIDB9LC8qIHJpZ2h0IGJ0biB1cCAqLworCisJLyogQXJ0aWZpY2lhbCAiZG91YmxlY2xpY2siIGV2ZW50cyBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBoYXJkd2FyZS4gCisJICogVGhleSBhcmUgbWFwcGVkIHRvIHRoZSAic2lkZSIgYW5kICJleHRyYSIgbW91c2UgYnV0dG9ucyBoZXJlLiAqLworCXtLSU5EX0ZJTFRFUkVELCAweDNmLCAweDdhLCBFVl9LRVksIEJUTl9TSURFLCAxfSwgLyogbGVmdCBkYmxjbGljayAqLworCXtLSU5EX0ZJTFRFUkVELCAweDQzLCAweDdlLCBFVl9LRVksIEJUTl9FWFRSQSwgMX0sLyogcmlnaHQgZGJsY2xpY2sgKi8KKworCS8qIGtleWJvYXJkLiAqLworCXtLSU5EX0ZJTFRFUkVELCAweGQyLCAweDBkLCBFVl9LRVksIEtFWV8xLCAxfSwKKwl7S0lORF9GSUxURVJFRCwgMHhkMywgMHgwZSwgRVZfS0VZLCBLRVlfMiwgMX0sCisJe0tJTkRfRklMVEVSRUQsIDB4ZDQsIDB4MGYsIEVWX0tFWSwgS0VZXzMsIDF9LAorCXtLSU5EX0ZJTFRFUkVELCAweGQ1LCAweDEwLCBFVl9LRVksIEtFWV80LCAxfSwKKwl7S0lORF9GSUxURVJFRCwgMHhkNiwgMHgxMSwgRVZfS0VZLCBLRVlfNSwgMX0sCisJe0tJTkRfRklMVEVSRUQsIDB4ZDcsIDB4MTIsIEVWX0tFWSwgS0VZXzYsIDF9LAorCXtLSU5EX0ZJTFRFUkVELCAweGQ4LCAweDEzLCBFVl9LRVksIEtFWV83LCAxfSwKKwl7S0lORF9GSUxURVJFRCwgMHhkOSwgMHgxNCwgRVZfS0VZLCBLRVlfOCwgMX0sCisJe0tJTkRfRklMVEVSRUQsIDB4ZGEsIDB4MTUsIEVWX0tFWSwgS0VZXzksIDF9LAorCXtLSU5EX0ZJTFRFUkVELCAweGRjLCAweDE3LCBFVl9LRVksIEtFWV8wLCAxfSwKKwl7S0lORF9GSUxURVJFRCwgMHhjNSwgMHgwMCwgRVZfS0VZLCBLRVlfQSwgMX0sCisJe0tJTkRfRklMVEVSRUQsIDB4YzYsIDB4MDEsIEVWX0tFWSwgS0VZX0IsIDF9LAorCXtLSU5EX0ZJTFRFUkVELCAweGRlLCAweDE5LCBFVl9LRVksIEtFWV9DLCAxfSwKKwl7S0lORF9GSUxURVJFRCwgMHhlMCwgMHgxYiwgRVZfS0VZLCBLRVlfRCwgMX0sCisJe0tJTkRfRklMVEVSRUQsIDB4ZTYsIDB4MjEsIEVWX0tFWSwgS0VZX0UsIDF9LAorCXtLSU5EX0ZJTFRFUkVELCAweGU4LCAweDIzLCBFVl9LRVksIEtFWV9GLCAxfSwKKworCS8qICJzcGVjaWFsIiBrZXlzICovCisJe0tJTkRfRklMVEVSRUQsIDB4ZGQsIDB4MTgsIEVWX0tFWSwgS0VZX0tQRU5URVIsIDF9LCAgICAvKiAiY2hlY2siICovCisJe0tJTkRfRklMVEVSRUQsIDB4ZGIsIDB4MTYsIEVWX0tFWSwgS0VZX01FTlUsIDF9LCAgICAgICAvKiAibWVudSIgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhjNywgMHgwMiwgRVZfS0VZLCBLRVlfUE9XRVIsIDF9LCAgICAgIC8qIFBvd2VyICovCisJe0tJTkRfRklMVEVSRUQsIDB4YzgsIDB4MDMsIEVWX0tFWSwgS0VZX1RWLCAxfSwgICAgICAgICAvKiBUViAqLworCXtLSU5EX0ZJTFRFUkVELCAweGM5LCAweDA0LCBFVl9LRVksIEtFWV9EVkQsIDF9LCAgICAgICAgLyogRFZEICovCisJe0tJTkRfRklMVEVSRUQsIDB4Y2EsIDB4MDUsIEVWX0tFWSwgS0VZX1dXVywgMX0sICAgICAgICAvKiBXRUIgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhjYiwgMHgwNiwgRVZfS0VZLCBLRVlfQk9PS01BUktTLCAxfSwgIC8qICJib29rIiAqLworCXtLSU5EX0ZJTFRFUkVELCAweGNjLCAweDA3LCBFVl9LRVksIEtFWV9FRElULCAxfSwgICAgICAgLyogImhhbmQiICovCisJe0tJTkRfRklMVEVSRUQsIDB4ZTEsIDB4MWMsIEVWX0tFWSwgS0VZX0NPRkZFRSwgMX0sICAgICAvKiAidGltZXIiICovCisJe0tJTkRfRklMVEVSRUQsIDB4ZTUsIDB4MjAsIEVWX0tFWSwgS0VZX0ZST05ULCAxfSwgICAgICAvKiAibWF4IiAqLworCXtLSU5EX0ZJTFRFUkVELCAweGUyLCAweDFkLCBFVl9LRVksIEtFWV9MRUZULCAxfSwgICAgICAgLyogbGVmdCAqLworCXtLSU5EX0ZJTFRFUkVELCAweGU0LCAweDFmLCBFVl9LRVksIEtFWV9SSUdIVCwgMX0sICAgICAgLyogcmlnaHQgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhlNywgMHgyMiwgRVZfS0VZLCBLRVlfRE9XTiwgMX0sICAgICAgIC8qIGRvd24gKi8KKwl7S0lORF9GSUxURVJFRCwgMHhkZiwgMHgxYSwgRVZfS0VZLCBLRVlfVVAsIDF9LCAgICAgICAgIC8qIHVwICovCisJe0tJTkRfRklMVEVSRUQsIDB4ZTMsIDB4MWUsIEVWX0tFWSwgS0VZX09LLCAxfSwgICAgICAgICAvKiAiT0siICovCisJe0tJTkRfRklMVEVSRUQsIDB4Y2UsIDB4MDksIEVWX0tFWSwgS0VZX1ZPTFVNRURPV04sIDF9LCAvKiBWT0wgKyAqLworCXtLSU5EX0ZJTFRFUkVELCAweGNkLCAweDA4LCBFVl9LRVksIEtFWV9WT0xVTUVVUCwgMX0sICAgLyogVk9MIC0gKi8KKwl7S0lORF9GSUxURVJFRCwgMHhjZiwgMHgwYSwgRVZfS0VZLCBLRVlfTVVURSwgMX0sICAgICAgIC8qIE1VVEUgICovCisJe0tJTkRfRklMVEVSRUQsIDB4ZDAsIDB4MGIsIEVWX0tFWSwgS0VZX0NIQU5ORUxVUCwgMX0sICAvKiBDSCArICovCisJe0tJTkRfRklMVEVSRUQsIDB4ZDEsIDB4MGMsIEVWX0tFWSwgS0VZX0NIQU5ORUxET1dOLCAxfSwvKiBDSCAtICovCisJe0tJTkRfRklMVEVSRUQsIDB4ZWMsIDB4MjcsIEVWX0tFWSwgS0VZX1JFQ09SRCwgMX0sICAgICAvKiAoIG8pIHJlZCAqLworCXtLSU5EX0ZJTFRFUkVELCAweGVhLCAweDI1LCBFVl9LRVksIEtFWV9QTEFZLCAxfSwgICAgICAgLyogKCA+KSAqLworCXtLSU5EX0ZJTFRFUkVELCAweGU5LCAweDI0LCBFVl9LRVksIEtFWV9SRVdJTkQsIDF9LCAgICAgLyogKDw8KSAqLworCXtLSU5EX0ZJTFRFUkVELCAweGViLCAweDI2LCBFVl9LRVksIEtFWV9GT1JXQVJELCAxfSwgICAgLyogKD4+KSAqLworCXtLSU5EX0ZJTFRFUkVELCAweGVkLCAweDI4LCBFVl9LRVksIEtFWV9TVE9QLCAxfSwgICAgICAgLyogKFtdKSAqLyAKKwl7S0lORF9GSUxURVJFRCwgMHhlZSwgMHgyOSwgRVZfS0VZLCBLRVlfUEFVU0UsIDF9LCAgICAgIC8qICgnJykgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhmMCwgMHgyYiwgRVZfS0VZLCBLRVlfUFJFVklPVVMsIDF9LCAgIC8qICg8LSkgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhlZiwgMHgyYSwgRVZfS0VZLCBLRVlfTkVYVCwgMX0sICAgICAgIC8qICg+KykgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhmMiwgMHgyRCwgRVZfS0VZLCBLRVlfSU5GTywgMX0sICAgICAgIC8qIFBMQVlJTkcgKi8KKwl7S0lORF9GSUxURVJFRCwgMHhmMywgMHgyRSwgRVZfS0VZLCBLRVlfSE9NRSwgMX0sICAgICAgIC8qIFRPUCAqLworCXtLSU5EX0ZJTFRFUkVELCAweGY0LCAweDJGLCBFVl9LRVksIEtFWV9FTkQsIDF9LCAgICAgICAgLyogRU5EICovCisJe0tJTkRfRklMVEVSRUQsIDB4ZjUsIDB4MzAsIEVWX0tFWSwgS0VZX1NFTEVDVCwgMX0sICAgICAvKiBTRUxFQ1QgKi8JCisJCisJe0tJTkRfRU5ELCAweDAwLCAweDAwLCBFVl9NQVggKyAxLCAwLCAwfQorfTsKKworLyogTG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLworc3RhdGljIHZvaWQgYXRpX3JlbW90ZV9kdW1wCQkodW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGFjdHVhbF9sZW5ndGgpOworc3RhdGljIHZvaWQgYXRpX3JlbW90ZV9kZWxldGUJCShzdHJ1Y3QgYXRpX3JlbW90ZSAqZGV2KTsKK3N0YXRpYyBpbnQgYXRpX3JlbW90ZV9vcGVuCQkoc3RydWN0IGlucHV0X2RldiAqaW5wdXRkZXYpOworc3RhdGljIHZvaWQgYXRpX3JlbW90ZV9jbG9zZQkJKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ZGV2KTsKK3N0YXRpYyBpbnQgYXRpX3JlbW90ZV9zZW5kcGFja2V0CShzdHJ1Y3QgYXRpX3JlbW90ZSAqYXRpX3JlbW90ZSwgdTE2IGNtZCwgdW5zaWduZWQgY2hhciAqZGF0YSk7CitzdGF0aWMgdm9pZCBhdGlfcmVtb3RlX2lycV9vdXQJCShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfaXJxX2luCQkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBhdGlfcmVtb3RlX2lucHV0X3JlcG9ydAkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgaW50IGF0aV9yZW1vdGVfaW5pdGlhbGl6ZQkoc3RydWN0IGF0aV9yZW1vdGUgKmF0aV9yZW1vdGUpOworc3RhdGljIGludCBhdGlfcmVtb3RlX3Byb2JlCQkoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfZGlzY29ubmVjdAkoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CisKKy8qIHVzYiBzcGVjaWZpYyBvYmplY3QgdG8gcmVnaXN0ZXIgd2l0aCB0aGUgdXNiIHN1YnN5c3RlbSAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGF0aV9yZW1vdGVfZHJpdmVyID0geworCS5vd25lciAgICAgICAgPSBUSElTX01PRFVMRSwKKwkubmFtZSAgICAgICAgID0gImF0aV9yZW1vdGUiLAorCS5wcm9iZSAgICAgICAgPSBhdGlfcmVtb3RlX3Byb2JlLAorCS5kaXNjb25uZWN0ICAgPSBhdGlfcmVtb3RlX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlICAgICA9IGF0aV9yZW1vdGVfdGFibGUsCit9OworCisvKgorICoJYXRpX3JlbW90ZV9kdW1wX2lucHV0CisgKi8KK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfZHVtcCh1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWlmICgobGVuID09IDEpICYmIChkYXRhWzBdICE9ICh1bnNpZ25lZCBjaGFyKTB4ZmYpICYmIChkYXRhWzBdICE9IDB4MDApKQorCQl3YXJuKCJXZWlyZCBieXRlIDB4JTAyeCIsIGRhdGFbMF0pOworCWVsc2UgaWYgKGxlbiA9PSA0KQorCQl3YXJuKCJXZWlyZCBrZXkgJTAyeCAlMDJ4ICUwMnggJTAyeCIsIAorCQkgICAgIGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10pOworCWVsc2UKKwkJd2FybigiV2VpcmQgZGF0YSwgbGVuPSVkICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IC4uLiIsCisJCSAgICAgbGVuLCBkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdLCBkYXRhWzRdLCBkYXRhWzVdKTsKK30KKworLyoKKyAqCWF0aV9yZW1vdGVfb3BlbgorICovCitzdGF0aWMgaW50IGF0aV9yZW1vdGVfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldikKK3sKKwlzdHJ1Y3QgYXRpX3JlbW90ZSAqYXRpX3JlbW90ZSA9IGlucHV0ZGV2LT5wcml2YXRlOworCWludCByZXR2YWwgPSAwOworCisJZG93bigmZGlzY29ubmVjdF9zZW0pOworCisJaWYgKGF0aV9yZW1vdGUtPm9wZW4rKykKKwkJZ290byBleGl0OworCisJLyogT24gZmlyc3Qgb3Blbiwgc3VibWl0IHRoZSByZWFkIHVyYiB3aGljaCB3YXMgc2V0IHVwIHByZXZpb3VzbHkuICovCisJYXRpX3JlbW90ZS0+aXJxX3VyYi0+ZGV2ID0gYXRpX3JlbW90ZS0+dWRldjsKKwlpZiAodXNiX3N1Ym1pdF91cmIoYXRpX3JlbW90ZS0+aXJxX3VyYiwgR0ZQX0tFUk5FTCkpIHsKKwkJZGV2X2VycigmYXRpX3JlbW90ZS0+aW50ZXJmYWNlLT5kZXYsIAorCQkJIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlhdGlfcmVtb3RlLT5vcGVuLS07CisJCXJldHZhbCA9IC1FSU87CisJfQorCitleGl0OgorCXVwKCZkaXNjb25uZWN0X3NlbSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqCWF0aV9yZW1vdGVfY2xvc2UKKyAqLworc3RhdGljIHZvaWQgYXRpX3JlbW90ZV9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldikKK3sKKwlzdHJ1Y3QgYXRpX3JlbW90ZSAqYXRpX3JlbW90ZSA9IGlucHV0ZGV2LT5wcml2YXRlOworCQorCWlmICghLS1hdGlfcmVtb3RlLT5vcGVuKQorCQl1c2Jfa2lsbF91cmIoYXRpX3JlbW90ZS0+aXJxX3VyYik7Cit9CisKKy8qCisgKgkJYXRpX3JlbW90ZV9pcnFfb3V0CisgKi8KK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfaXJxX291dChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBhdGlfcmVtb3RlICphdGlfcmVtb3RlID0gdXJiLT5jb250ZXh0OworCQorCWlmICh1cmItPnN0YXR1cykgeworCQlkZXZfZGJnKCZhdGlfcmVtb3RlLT5pbnRlcmZhY2UtPmRldiwgIiVzOiBzdGF0dXMgJWRcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKwkKKwlhdGlfcmVtb3RlLT5zZW5kX2ZsYWdzIHw9IFNFTkRfRkxBR19DT01QTEVURTsKKwl3bWIoKTsKKwl3YWtlX3VwKCZhdGlfcmVtb3RlLT53YWl0KTsKK30KKworLyoKKyAqCWF0aV9yZW1vdGVfc2VuZHBhY2tldAorICoJCQorICoJVXNlZCB0byBzZW5kIGRldmljZSBpbml0aWFsaXphdGlvbiBzdHJpbmdzCisgKi8KK3N0YXRpYyBpbnQgYXRpX3JlbW90ZV9zZW5kcGFja2V0KHN0cnVjdCBhdGlfcmVtb3RlICphdGlfcmVtb3RlLCB1MTYgY21kLCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworCWludCByZXR2YWwgPSAwOworCQorCS8qIFNldCB1cCBvdXRfdXJiICovCisJbWVtY3B5KGF0aV9yZW1vdGUtPm91dF91cmItPnRyYW5zZmVyX2J1ZmZlciArIDEsIGRhdGEsIExPKGNtZCkpOworCSgoY2hhciAqKSBhdGlfcmVtb3RlLT5vdXRfdXJiLT50cmFuc2Zlcl9idWZmZXIpWzBdID0gSEkoY21kKTsJCisKKwlhdGlfcmVtb3RlLT5vdXRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gTE8oY21kKSArIDE7CisJYXRpX3JlbW90ZS0+b3V0X3VyYi0+ZGV2ID0gYXRpX3JlbW90ZS0+dWRldjsKKwlhdGlfcmVtb3RlLT5zZW5kX2ZsYWdzID0gU0VORF9GTEFHX0lOX1BST0dSRVNTOworCisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIoYXRpX3JlbW90ZS0+b3V0X3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZhdGlfcmVtb3RlLT5pbnRlcmZhY2UtPmRldiwgCisJCQkgInNlbmRwYWNrZXQ6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZDogJWRcbiIsIHJldHZhbCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJd2FpdF9ldmVudF90aW1lb3V0KGF0aV9yZW1vdGUtPndhaXQsCisJCSgoYXRpX3JlbW90ZS0+b3V0X3VyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgfHwKKwkJIAkoYXRpX3JlbW90ZS0+c2VuZF9mbGFncyAmIFNFTkRfRkxBR19DT01QTEVURSkpLAorCQlIWik7CisJdXNiX2tpbGxfdXJiKGF0aV9yZW1vdGUtPm91dF91cmIpOworCQorCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKglhdGlfcmVtb3RlX2V2ZW50X2xvb2t1cAorICovCitzdGF0aWMgaW50IGF0aV9yZW1vdGVfZXZlbnRfbG9va3VwKGludCByZW0sIHVuc2lnbmVkIGNoYXIgZDEsIHVuc2lnbmVkIGNoYXIgZDIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBhdGlfcmVtb3RlX3RibFtpXS5raW5kICE9IEtJTkRfRU5EOyBpKyspIHsKKwkJLyogCisJCSAqIERlY2lkZSBpZiB0aGUgdGFibGUgZW50cnkgbWF0Y2hlcyB0aGUgcmVtb3RlIGlucHV0LiAKKwkJICovCisJCWlmICgoKChhdGlfcmVtb3RlX3RibFtpXS5kYXRhMSAmIDB4MGYpID09IChkMSAmIDB4MGYpKSkgJiYKKwkJICAgICgoKChhdGlfcmVtb3RlX3RibFtpXS5kYXRhMSA+PiA0KSAtIAorCQkgICAgICAgKGQxID4+IDQpICsgcmVtKSAmIDB4MGYpID09IDB4MGYpICYmIAorCQkgICAgKGF0aV9yZW1vdGVfdGJsW2ldLmRhdGEyID09IGQyKSkKKwkJCXJldHVybiBpOworCQkKKwl9CisJcmV0dXJuIC0xOworfQorCisvKgorICoJYXRpX3JlbW90ZV9yZXBvcnRfaW5wdXQKKyAqLworc3RhdGljIHZvaWQgYXRpX3JlbW90ZV9pbnB1dF9yZXBvcnQoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykJCit7CisJc3RydWN0IGF0aV9yZW1vdGUgKmF0aV9yZW1vdGUgPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YT0gYXRpX3JlbW90ZS0+aW5idWY7CisJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gJmF0aV9yZW1vdGUtPmlkZXY7IAorCWludCBpbmRleCwgYWNjOworCWludCByZW1vdGVfbnVtOworCQorCS8qIERlYWwgd2l0aCBzdHJhbmdlIGxvb2tpbmcgaW5wdXRzICovCisJaWYgKCAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IDQpIHx8IChkYXRhWzBdICE9IDB4MTQpIHx8IAorCQkoKGRhdGFbM10gJiAweDBmKSAhPSAweDAwKSApIHsKKwkJYXRpX3JlbW90ZV9kdW1wKGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBNYXNrIHVud2FudGVkIHJlbW90ZSBjaGFubmVscy4gICovCisJLyogbm90ZTogcmVtb3RlX251bSBpcyAwLWJhc2VkLCBjaGFubmVsIDEgb24gcmVtb3RlID09IDAgaGVyZSAqLworCXJlbW90ZV9udW0gPSAoZGF0YVszXSA+PiA0KSAmIDB4MGY7CisgICAgICAgIGlmIChjaGFubmVsX21hc2sgJiAoMSA8PCAocmVtb3RlX251bSArIDEpKSkgeyAKKwkJZGJnaW5mbygmYXRpX3JlbW90ZS0+aW50ZXJmYWNlLT5kZXYsCisJCQkiTWFza2VkIGlucHV0IGZyb20gY2hhbm5lbCAweCUwMng6IGRhdGEgJTAyeCwlMDJ4LCBtYXNrPSAweCUwMmx4XG4iLAorCQkJcmVtb3RlX251bSwgZGF0YVsxXSwgZGF0YVsyXSwgY2hhbm5lbF9tYXNrKTsKKwkJcmV0dXJuOworCX0KKworCS8qIExvb2sgdXAgZXZlbnQgY29kZSBpbmRleCBpbiB0cmFuc2xhdGlvbiB0YWJsZSAqLworCWluZGV4ID0gYXRpX3JlbW90ZV9ldmVudF9sb29rdXAocmVtb3RlX251bSwgZGF0YVsxXSwgZGF0YVsyXSk7CisJaWYgKGluZGV4IDwgMCkgeworCQlkZXZfd2FybigmYXRpX3JlbW90ZS0+aW50ZXJmYWNlLT5kZXYsIAorCQkJICJVbmtub3duIGlucHV0IGZyb20gY2hhbm5lbCAweCUwMng6IGRhdGEgJTAyeCwlMDJ4XG4iLCAKKwkJCSByZW1vdGVfbnVtLCBkYXRhWzFdLCBkYXRhWzJdKTsKKwkJcmV0dXJuOworCX0gCisJZGJnaW5mbygmYXRpX3JlbW90ZS0+aW50ZXJmYWNlLT5kZXYsIAorCQkiY2hhbm5lbCAweCUwMng7IGRhdGEgJTAyeCwlMDJ4OyBpbmRleCAlZDsga2V5Y29kZSAlZFxuIiwKKwkJcmVtb3RlX251bSwgZGF0YVsxXSwgZGF0YVsyXSwgaW5kZXgsIGF0aV9yZW1vdGVfdGJsW2luZGV4XS5jb2RlKTsKKwkKKwlpZiAoYXRpX3JlbW90ZV90YmxbaW5kZXhdLmtpbmQgPT0gS0lORF9MSVRFUkFMKSB7CisJCWlucHV0X3JlZ3MoZGV2LCByZWdzKTsKKwkJaW5wdXRfZXZlbnQoZGV2LCBhdGlfcmVtb3RlX3RibFtpbmRleF0udHlwZSwKKwkJCWF0aV9yZW1vdGVfdGJsW2luZGV4XS5jb2RlLAorCQkJYXRpX3JlbW90ZV90YmxbaW5kZXhdLnZhbHVlKTsKKwkJaW5wdXRfc3luYyhkZXYpOworCQkKKwkJYXRpX3JlbW90ZS0+b2xkX2ppZmZpZXMgPSBqaWZmaWVzOworCQlyZXR1cm47CisJfQorCQorCWlmIChhdGlfcmVtb3RlX3RibFtpbmRleF0ua2luZCA9PSBLSU5EX0ZJTFRFUkVEKSB7CisJCS8qIEZpbHRlciBkdXBsaWNhdGUgZXZlbnRzIHdoaWNoIGhhcHBlbiAidG9vIGNsb3NlIiB0b2dldGhlci4gKi8KKwkJaWYgKChhdGlfcmVtb3RlLT5vbGRfZGF0YVswXSA9PSBkYXRhWzFdKSAmJiAKKwkgCQkoYXRpX3JlbW90ZS0+b2xkX2RhdGFbMV0gPT0gZGF0YVsyXSkgJiYgCisJIAkJKChhdGlfcmVtb3RlLT5vbGRfamlmZmllcyArIEZJTFRFUl9USU1FKSA+IGppZmZpZXMpKSB7CisJCQlhdGlfcmVtb3RlLT5yZXBlYXRfY291bnQrKzsKKwkJfSAKKwkJZWxzZSB7CisJCQlhdGlfcmVtb3RlLT5yZXBlYXRfY291bnQgPSAwOworCQl9CisJCQorCQlhdGlfcmVtb3RlLT5vbGRfZGF0YVswXSA9IGRhdGFbMV07CisJCWF0aV9yZW1vdGUtPm9sZF9kYXRhWzFdID0gZGF0YVsyXTsKKwkJYXRpX3JlbW90ZS0+b2xkX2ppZmZpZXMgPSBqaWZmaWVzOworCisJCWlmICgoYXRpX3JlbW90ZS0+cmVwZWF0X2NvdW50ID4gMCkKKwkJICAgICYmIChhdGlfcmVtb3RlLT5yZXBlYXRfY291bnQgPCA1KSkKKwkJCXJldHVybjsKKwkJCisKKwkJaW5wdXRfcmVncyhkZXYsIHJlZ3MpOworCQlpbnB1dF9ldmVudChkZXYsIGF0aV9yZW1vdGVfdGJsW2luZGV4XS50eXBlLAorCQkJYXRpX3JlbW90ZV90YmxbaW5kZXhdLmNvZGUsIDEpOworCQlpbnB1dF9ldmVudChkZXYsIGF0aV9yZW1vdGVfdGJsW2luZGV4XS50eXBlLAorCQkJYXRpX3JlbW90ZV90YmxbaW5kZXhdLmNvZGUsIDApOworCQlpbnB1dF9zeW5jKGRldik7CisKKwkJcmV0dXJuOworCX0JCQkKKwkKKwkvKiAKKwkgKiBPdGhlciBldmVudCBraW5kcyBhcmUgZnJvbSB0aGUgZGlyZWN0aW9uYWwgY29udHJvbCBwYWQsIGFuZCBoYXZlIGFuCisJICogYWNjZWxlcmF0aW9uIGZhY3RvciBhcHBsaWVkIHRvIHRoZW0uICBXaXRob3V0IHRoaXMgYWNjZWxlcmF0aW9uLCB0aGUKKwkgKiBjb250cm9sIHBhZCBpcyBtb3N0bHkgdW51c2FibGUuCisJICogCisJICogSWYgZWxhcHNlZCB0aW1lIHNpbmNlIGxhc3QgZXZlbnQgaXMgPiAxLzQgc2Vjb25kLCB1c2VyICJzdG9wcGVkIiwKKwkgKiBzbyByZXNldCBhY2NlbGVyYXRpb24uIE90aGVyd2lzZSwgdXNlciBpcyBwcm9iYWJseSBob2xkaW5nIHRoZSBjb250cm9sCisJICogcGFkIGRvd24sIHNvIHdlIGluY3JlYXNlIGFjY2VsZXJhdGlvbiwgcmFtcGluZyB1cCBvdmVyIHR3byBzZWNvbmRzIHRvCisJICogYSBtYXhpbXVtIHNwZWVkLiAgVGhlIGFjY2VsZXJhdGlvbiBjdXJ2ZSBpcyAjZGVmaW5lZCBhYm92ZS4KKwkgKi8KKwlpZiAoKGppZmZpZXMgLSBhdGlfcmVtb3RlLT5vbGRfamlmZmllcykgPiAoSFogPj4gMikpIHsKKwkJYWNjID0gMTsKKwkJYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMgPSBqaWZmaWVzOworCX0KKwllbHNlIGlmICgoamlmZmllcyAtIGF0aV9yZW1vdGUtPmFjY19qaWZmaWVzKSA8IChIWiA+PiAzKSkgIGFjYyA9IGFjY2VsWzBdOworCWVsc2UgaWYgKChqaWZmaWVzIC0gYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMpIDwgKEhaID4+IDIpKSAgYWNjID0gYWNjZWxbMV07CisJZWxzZSBpZiAoKGppZmZpZXMgLSBhdGlfcmVtb3RlLT5hY2NfamlmZmllcykgPCAoSFogPj4gMSkpICBhY2MgPSBhY2NlbFsyXTsKKwllbHNlIGlmICgoamlmZmllcyAtIGF0aV9yZW1vdGUtPmFjY19qaWZmaWVzKSA8IEhaICkgICAgICAgIGFjYyA9IGFjY2VsWzNdOworCWVsc2UgaWYgKChqaWZmaWVzIC0gYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMpIDwgSForKEhaPj4xKSkgYWNjID0gYWNjZWxbNF07CisJZWxzZSBpZiAoKGppZmZpZXMgLSBhdGlfcmVtb3RlLT5hY2NfamlmZmllcykgPCAoSFogPDwgMSkpICBhY2MgPSBhY2NlbFs1XTsKKwllbHNlIGFjYyA9IGFjY2VsWzZdOworCisJaW5wdXRfcmVncyhkZXYsIHJlZ3MpOworCXN3aXRjaCAoYXRpX3JlbW90ZV90YmxbaW5kZXhdLmtpbmQpIHsKKwljYXNlIEtJTkRfQUNDRUw6CisJCWlucHV0X2V2ZW50KGRldiwgYXRpX3JlbW90ZV90YmxbaW5kZXhdLnR5cGUsCisJCQlhdGlfcmVtb3RlX3RibFtpbmRleF0uY29kZSwKKwkJCWF0aV9yZW1vdGVfdGJsW2luZGV4XS52YWx1ZSAqIGFjYyk7CisJCWJyZWFrOworCWNhc2UgS0lORF9MVToKKwkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9YLCAtYWNjKTsKKwkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9ZLCAtYWNjKTsKKwkJYnJlYWs7CisJY2FzZSBLSU5EX1JVOgorCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1gsIGFjYyk7CisJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWSwgLWFjYyk7CisJCWJyZWFrOworCWNhc2UgS0lORF9MRDoKKwkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9YLCAtYWNjKTsKKwkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9ZLCBhY2MpOworCQlicmVhazsKKwljYXNlIEtJTkRfUkQ6CisJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWCwgYWNjKTsKKwkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9ZLCBhY2MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZGJnKCZhdGlfcmVtb3RlLT5pbnRlcmZhY2UtPmRldiwgImF0aV9yZW1vdGUga2luZD0lZFxuIiwgCisJCQlhdGlfcmVtb3RlX3RibFtpbmRleF0ua2luZCk7CisJfQorCWlucHV0X3N5bmMoZGV2KTsKKworCWF0aV9yZW1vdGUtPm9sZF9qaWZmaWVzID0gamlmZmllczsKKwlhdGlfcmVtb3RlLT5vbGRfZGF0YVswXSA9IGRhdGFbMV07CisJYXRpX3JlbW90ZS0+b2xkX2RhdGFbMV0gPSBkYXRhWzJdOworfQorCisvKgorICoJYXRpX3JlbW90ZV9pcnFfaW4KKyAqLworc3RhdGljIHZvaWQgYXRpX3JlbW90ZV9pcnFfaW4oc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgYXRpX3JlbW90ZSAqYXRpX3JlbW90ZSA9IHVyYi0+Y29udGV4dDsKKwlpbnQgcmV0dmFsOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoJCQkvKiBzdWNjZXNzICovCisJCWF0aV9yZW1vdGVfaW5wdXRfcmVwb3J0KHVyYiwgcmVncyk7CisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CS8qIHVubGluayAqLworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCWRldl9kYmcoJmF0aV9yZW1vdGUtPmludGVyZmFjZS0+ZGV2LCAiJXM6IHVyYiBlcnJvciBzdGF0dXMsIHVubGluaz8gXG4iLAorCQkJX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOwkKKwlkZWZhdWx0OgkJLyogZXJyb3IgKi8KKwkJZGV2X2RiZygmYXRpX3JlbW90ZS0+aW50ZXJmYWNlLT5kZXYsICIlczogTm9uemVybyB1cmIgc3RhdHVzICVkXG4iLCAKKwkJCV9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCX0KKwkKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIFNMQUJfQVRPTUlDKTsKKwlpZiAocmV0dmFsKQorCQlkZXZfZXJyKCZhdGlfcmVtb3RlLT5pbnRlcmZhY2UtPmRldiwgIiVzOiB1c2Jfc3VibWl0X3VyYigpPSVkXG4iLAorCQkJX19GVU5DVElPTl9fLCByZXR2YWwpOworfQorCisvKgorICoJYXRpX3JlbW90ZV9kZWxldGUKKyAqLworc3RhdGljIHZvaWQgYXRpX3JlbW90ZV9kZWxldGUoc3RydWN0IGF0aV9yZW1vdGUgKmF0aV9yZW1vdGUpCit7CisJaWYgKCFhdGlfcmVtb3RlKSByZXR1cm47CisKKwlpZiAoYXRpX3JlbW90ZS0+aXJxX3VyYikKKwkJdXNiX2tpbGxfdXJiKGF0aV9yZW1vdGUtPmlycV91cmIpOworCisJaWYgKGF0aV9yZW1vdGUtPm91dF91cmIpCisJCXVzYl9raWxsX3VyYihhdGlfcmVtb3RlLT5vdXRfdXJiKTsKKworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKCZhdGlfcmVtb3RlLT5pZGV2KTsKKworCWlmIChhdGlfcmVtb3RlLT5pbmJ1ZikKKwkJdXNiX2J1ZmZlcl9mcmVlKGF0aV9yZW1vdGUtPnVkZXYsIERBVEFfQlVGU0laRSwgCisJCQkJYXRpX3JlbW90ZS0+aW5idWYsIGF0aV9yZW1vdGUtPmluYnVmX2RtYSk7CisJCQorCWlmIChhdGlfcmVtb3RlLT5vdXRidWYpCisJCXVzYl9idWZmZXJfZnJlZShhdGlfcmVtb3RlLT51ZGV2LCBEQVRBX0JVRlNJWkUsIAorCQkJCWF0aV9yZW1vdGUtPmluYnVmLCBhdGlfcmVtb3RlLT5vdXRidWZfZG1hKTsKKwkKKwlpZiAoYXRpX3JlbW90ZS0+aXJxX3VyYikKKwkJdXNiX2ZyZWVfdXJiKGF0aV9yZW1vdGUtPmlycV91cmIpOworCQorCWlmIChhdGlfcmVtb3RlLT5vdXRfdXJiKQorCQl1c2JfZnJlZV91cmIoYXRpX3JlbW90ZS0+b3V0X3VyYik7CisKKwlrZnJlZShhdGlfcmVtb3RlKTsKK30KKworc3RhdGljIHZvaWQgYXRpX3JlbW90ZV9pbnB1dF9pbml0KHN0cnVjdCBhdGlfcmVtb3RlICphdGlfcmVtb3RlKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXYgPSAmKGF0aV9yZW1vdGUtPmlkZXYpOworCWludCBpOworCisJaWRldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9SRUwpOworCWlkZXYtPmtleWJpdFtMT05HKEJUTl9NT1VTRSldID0gKCBCSVQoQlROX0xFRlQpIHwgQklUKEJUTl9SSUdIVCkgfCAKKwkJCQkJICBCSVQoQlROX1NJREUpIHwgQklUKEJUTl9FWFRSQSkgKTsKKwlpZGV2LT5yZWxiaXRbMF0gPSBCSVQoUkVMX1gpIHwgQklUKFJFTF9ZKTsKKwlmb3IgKGkgPSAwOyBhdGlfcmVtb3RlX3RibFtpXS5raW5kICE9IEtJTkRfRU5EOyBpKyspCisJCWlmIChhdGlfcmVtb3RlX3RibFtpXS50eXBlID09IEVWX0tFWSkKKwkJCXNldF9iaXQoYXRpX3JlbW90ZV90YmxbaV0uY29kZSwgaWRldi0+a2V5Yml0KTsKKwkKKwlpZGV2LT5wcml2YXRlID0gYXRpX3JlbW90ZTsKKwlpZGV2LT5vcGVuID0gYXRpX3JlbW90ZV9vcGVuOworCWlkZXYtPmNsb3NlID0gYXRpX3JlbW90ZV9jbG9zZTsKKwkKKwlpZGV2LT5uYW1lID0gYXRpX3JlbW90ZS0+bmFtZTsKKwlpZGV2LT5waHlzID0gYXRpX3JlbW90ZS0+cGh5czsKKwkKKwlpZGV2LT5pZC5idXN0eXBlID0gQlVTX1VTQjsJCQorCWlkZXYtPmlkLnZlbmRvciA9IGxlMTZfdG9fY3B1KGF0aV9yZW1vdGUtPnVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCWlkZXYtPmlkLnByb2R1Y3QgPSBsZTE2X3RvX2NwdShhdGlfcmVtb3RlLT51ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJaWRldi0+aWQudmVyc2lvbiA9IGxlMTZfdG9fY3B1KGF0aV9yZW1vdGUtPnVkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKK30KKworc3RhdGljIGludCBhdGlfcmVtb3RlX2luaXRpYWxpemUoc3RydWN0IGF0aV9yZW1vdGUgKmF0aV9yZW1vdGUpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBhdGlfcmVtb3RlLT51ZGV2OworCWludCBwaXBlLCBtYXhwOworCQkKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhdGlfcmVtb3RlLT53YWl0KTsKKworCS8qIFNldCB1cCBpcnFfdXJiICovCisJcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKHVkZXYsIGF0aV9yZW1vdGUtPmVuZHBvaW50X2luLT5iRW5kcG9pbnRBZGRyZXNzKTsKKwltYXhwID0gdXNiX21heHBhY2tldCh1ZGV2LCBwaXBlLCB1c2JfcGlwZW91dChwaXBlKSk7CisJbWF4cCA9IChtYXhwID4gREFUQV9CVUZTSVpFKSA/IERBVEFfQlVGU0laRSA6IG1heHA7CisJCisJdXNiX2ZpbGxfaW50X3VyYihhdGlfcmVtb3RlLT5pcnFfdXJiLCB1ZGV2LCBwaXBlLCBhdGlfcmVtb3RlLT5pbmJ1ZiwgCisJCQkgbWF4cCwgYXRpX3JlbW90ZV9pcnFfaW4sIGF0aV9yZW1vdGUsIAorCQkJIGF0aV9yZW1vdGUtPmVuZHBvaW50X2luLT5iSW50ZXJ2YWwpOworCWF0aV9yZW1vdGUtPmlycV91cmItPnRyYW5zZmVyX2RtYSA9IGF0aV9yZW1vdGUtPmluYnVmX2RtYTsKKwlhdGlfcmVtb3RlLT5pcnFfdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwkKKwkvKiBTZXQgdXAgb3V0X3VyYiAqLworCXBpcGUgPSB1c2Jfc25kaW50cGlwZSh1ZGV2LCBhdGlfcmVtb3RlLT5lbmRwb2ludF9vdXQtPmJFbmRwb2ludEFkZHJlc3MpOworCW1heHAgPSB1c2JfbWF4cGFja2V0KHVkZXYsIHBpcGUsIHVzYl9waXBlb3V0KHBpcGUpKTsKKwltYXhwID0gKG1heHAgPiBEQVRBX0JVRlNJWkUpID8gREFUQV9CVUZTSVpFIDogbWF4cDsKKworCXVzYl9maWxsX2ludF91cmIoYXRpX3JlbW90ZS0+b3V0X3VyYiwgdWRldiwgcGlwZSwgYXRpX3JlbW90ZS0+b3V0YnVmLCAKKwkJCSBtYXhwLCBhdGlfcmVtb3RlX2lycV9vdXQsIGF0aV9yZW1vdGUsIAorCQkJIGF0aV9yZW1vdGUtPmVuZHBvaW50X291dC0+YkludGVydmFsKTsKKwlhdGlfcmVtb3RlLT5vdXRfdXJiLT50cmFuc2Zlcl9kbWEgPSBhdGlfcmVtb3RlLT5vdXRidWZfZG1hOworCWF0aV9yZW1vdGUtPm91dF91cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCisJLyogc2VuZCBpbml0aWFsaXphdGlvbiBzdHJpbmdzICovCisJaWYgKChhdGlfcmVtb3RlX3NlbmRwYWNrZXQoYXRpX3JlbW90ZSwgMHg4MDA0LCBpbml0MSkpIHx8CisJICAgIChhdGlfcmVtb3RlX3NlbmRwYWNrZXQoYXRpX3JlbW90ZSwgMHg4MDA3LCBpbml0MikpKSB7CisJCWRldl9lcnIoJmF0aV9yZW1vdGUtPmludGVyZmFjZS0+ZGV2LCAKKwkJCSAiSW5pdGlhbGl6aW5nIGF0aV9yZW1vdGUgaGFyZHdhcmUgZmFpbGVkLlxuIik7CisJCXJldHVybiAxOworCX0KKwkKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqCWF0aV9yZW1vdGVfcHJvYmUKKyAqLworc3RhdGljIGludCBhdGlfcmVtb3RlX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgYXRpX3JlbW90ZSAqYXRpX3JlbW90ZSA9IE5VTEw7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfaG9zdDsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKwljaGFyIHBhdGhbNjRdOworCisJLyogQWxsb2NhdGUgYW5kIGNsZWFyIGFuIGF0aV9yZW1vdGUgc3RydWN0ICovCisJaWYgKCEoYXRpX3JlbW90ZSA9IGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgYXRpX3JlbW90ZSksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KGF0aV9yZW1vdGUsIDB4MDAsIHNpemVvZiAoc3RydWN0IGF0aV9yZW1vdGUpKTsKKworCWlmYWNlX2hvc3QgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworCWlmIChpZmFjZV9ob3N0LT5kZXNjLmJOdW1FbmRwb2ludHMgIT0gMikgeworCQllcnIoIiVzOiBVbmV4cGVjdGVkIGRlc2MuYk51bUVuZHBvaW50c1xuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlhdGlfcmVtb3RlLT5lbmRwb2ludF9pbiA9ICYoaWZhY2VfaG9zdC0+ZW5kcG9pbnRbMF0uZGVzYyk7CisJYXRpX3JlbW90ZS0+ZW5kcG9pbnRfb3V0ID0gJihpZmFjZV9ob3N0LT5lbmRwb2ludFsxXS5kZXNjKTsKKwlhdGlfcmVtb3RlLT51ZGV2ID0gdWRldjsKKwlhdGlfcmVtb3RlLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisKKwlpZiAoIShhdGlfcmVtb3RlLT5lbmRwb2ludF9pbi0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApKSB7CisJCWVycigiJXM6IFVuZXhwZWN0ZWQgZW5kcG9pbnRfaW4tPmJFbmRwb2ludEFkZHJlc3NcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3I7CisJfQorCWlmICgoYXRpX3JlbW90ZS0+ZW5kcG9pbnRfaW4tPmJtQXR0cmlidXRlcyAmIDMpICE9IDMpIHsKKwkJZXJyKCIlczogVW5leHBlY3RlZCBlbmRwb2ludF9pbi0+Ym1BdHRyaWJ1dGVzXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycm9yOworCX0KKwlpZiAobGUxNl90b19jcHUoYXRpX3JlbW90ZS0+ZW5kcG9pbnRfaW4tPndNYXhQYWNrZXRTaXplKSA9PSAwKSB7CisJCWVycigiJXM6IGVuZHBvaW50X2luIG1lc3NhZ2Ugc2l6ZT09MD8gXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIEFsbG9jYXRlIFVSQiBidWZmZXJzLCBVUkJzICovCisJYXRpX3JlbW90ZS0+aW5idWYgPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIERBVEFfQlVGU0laRSwgU0xBQl9BVE9NSUMsCisJCQkJCSAgICAgJmF0aV9yZW1vdGUtPmluYnVmX2RtYSk7CisJaWYgKCFhdGlfcmVtb3RlLT5pbmJ1ZikKKwkJZ290byBlcnJvcjsKKworCWF0aV9yZW1vdGUtPm91dGJ1ZiA9IHVzYl9idWZmZXJfYWxsb2ModWRldiwgREFUQV9CVUZTSVpFLCBTTEFCX0FUT01JQywKKwkJCQkJICAgICAgJmF0aV9yZW1vdGUtPm91dGJ1Zl9kbWEpOworCWlmICghYXRpX3JlbW90ZS0+b3V0YnVmKQorCQlnb3RvIGVycm9yOworCisJYXRpX3JlbW90ZS0+aXJxX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhdGlfcmVtb3RlLT5pcnFfdXJiKQorCQlnb3RvIGVycm9yOworCisJYXRpX3JlbW90ZS0+b3V0X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhdGlfcmVtb3RlLT5vdXRfdXJiKQorCQlnb3RvIGVycm9yOworCisJdXNiX21ha2VfcGF0aCh1ZGV2LCBwYXRoLCBOQU1FX0JVRlNJWkUpOworCXNwcmludGYoYXRpX3JlbW90ZS0+cGh5cywgIiVzL2lucHV0JWQiLCBwYXRoLCBBVElfSU5QVVROVU0pOworCWlmICh1ZGV2LT5tYW51ZmFjdHVyZXIpCisJCXN0cmNhdChhdGlfcmVtb3RlLT5uYW1lLCB1ZGV2LT5tYW51ZmFjdHVyZXIpOworCisJaWYgKHVkZXYtPnByb2R1Y3QpCisJCXNwcmludGYoYXRpX3JlbW90ZS0+bmFtZSwgIiVzICVzIiwgYXRpX3JlbW90ZS0+bmFtZSwgdWRldi0+cHJvZHVjdCk7CisKKwlpZiAoIXN0cmxlbihhdGlfcmVtb3RlLT5uYW1lKSkKKwkJc3ByaW50ZihhdGlfcmVtb3RlLT5uYW1lLCBEUklWRVJfREVTQyAiKCUwNHgsJTA0eCkiLAorCQkJbGUxNl90b19jcHUoYXRpX3JlbW90ZS0+dWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksIAorCQkJbGUxNl90b19jcHUoYXRpX3JlbW90ZS0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKKworCS8qIERldmljZSBIYXJkd2FyZSBJbml0aWFsaXphdGlvbiAtIGZpbGxzIGluIGF0aV9yZW1vdGUtPmlkZXYgZnJvbSB1ZGV2LiAqLworCXJldHZhbCA9IGF0aV9yZW1vdGVfaW5pdGlhbGl6ZShhdGlfcmVtb3RlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm9yOworCisJLyogU2V0IHVwIGFuZCByZWdpc3RlciBpbnB1dCBkZXZpY2UgKi8KKwlhdGlfcmVtb3RlX2lucHV0X2luaXQoYXRpX3JlbW90ZSk7CisJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKCZhdGlfcmVtb3RlLT5pZGV2KTsKKworCWRldl9pbmZvKCZhdGlfcmVtb3RlLT5pbnRlcmZhY2UtPmRldiwgIklucHV0IHJlZ2lzdGVyZWQ6ICVzIG9uICVzXG4iLCAKKwkJIGF0aV9yZW1vdGUtPm5hbWUsIHBhdGgpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGF0aV9yZW1vdGUpOworCQorZXJyb3I6CisJaWYgKHJldHZhbCkKKwkJYXRpX3JlbW90ZV9kZWxldGUoYXRpX3JlbW90ZSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorICoJYXRpX3JlbW90ZV9kaXNjb25uZWN0CisgKi8KK3N0YXRpYyB2b2lkIGF0aV9yZW1vdGVfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBhdGlfcmVtb3RlICphdGlfcmVtb3RlOworCisJZG93bigmZGlzY29ubmVjdF9zZW0pOworCisJYXRpX3JlbW90ZSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisJaWYgKCFhdGlfcmVtb3RlKSB7CisJCXdhcm4oIiVzIC0gbnVsbCBkZXZpY2U/XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCQorCWF0aV9yZW1vdGVfZGVsZXRlKGF0aV9yZW1vdGUpOworCisJdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKK30KKworLyoKKyAqCWF0aV9yZW1vdGVfaW5pdAorICovCitzdGF0aWMgaW50IF9faW5pdCBhdGlfcmVtb3RlX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCQorCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmYXRpX3JlbW90ZV9kcml2ZXIpOworCWlmIChyZXN1bHQpCisJCWVycigidXNiX3JlZ2lzdGVyIGVycm9yICMlZFxuIiwgcmVzdWx0KTsKKwllbHNlCisJCWluZm8oIlJlZ2lzdGVyZWQgVVNCIGRyaXZlciAiIERSSVZFUl9ERVNDICIgdi4gIiBEUklWRVJfVkVSU0lPTik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICoJYXRpX3JlbW90ZV9leGl0CisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBhdGlfcmVtb3RlX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmYXRpX3JlbW90ZV9kcml2ZXIpOworfQorCisvKiAKKyAqCW1vZHVsZSBzcGVjaWZpY2F0aW9uIAorICovCisKK21vZHVsZV9pbml0KGF0aV9yZW1vdGVfaW5pdCk7Cittb2R1bGVfZXhpdChhdGlfcmVtb3RlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2ZpeHAtYXJpdGguaCBiL2RyaXZlcnMvdXNiL2lucHV0L2ZpeHAtYXJpdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmNhNWI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvZml4cC1hcml0aC5oCkBAIC0wLDAgKzEsOTAgQEAKKyNpZm5kZWYgX0ZJWFBfQVJJVEhfSAorI2RlZmluZSBfRklYUF9BUklUSF9ICisKKy8qCisgKiAkJAorICoKKyAqIFNpbXBsaXN0aWMgZml4ZWQtcG9pbnQgYXJpdGhtZXRpY3MuCisgKiBIbW0sIEknbSBwcm9iYWJseSBkdXBsaWNhdGluZyBzb21lIGNvZGUgOigKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgSm9oYW5uIERlbmV1eAorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqIFNob3VsZCB5b3UgbmVlZCB0byBjb250YWN0IG1lLCB0aGUgYXV0aG9yLCB5b3UgY2FuIGRvIHNvIGJ5CisgKiBlLW1haWwgLSBtYWlsIHlvdXIgbWVzc2FnZSB0byA8ZGVuZXV4QGlmcmFuY2UuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvLyBUaGUgdHlwZSByZXByZXNlbnRpbmcgZml4ZWQtcG9pbnQgdmFsdWVzCit0eXBlZGVmIHMxNiBmaXhwX3Q7CisKKyNkZWZpbmUgRlJBQ19OIDgKKyNkZWZpbmUgRlJBQ19NQVNLICgoMTw8RlJBQ19OKS0xKQorCisvLyBOb3QgdG8gYmUgdXNlZCBkaXJlY3RseS4gVXNlIGZpeHBfe2NvcyxzaW59CitzdGF0aWMgZml4cF90IGNvc190YWJsZVs0NV0gPSB7CisJMHgwMTAwLAkweDAwRkYsCTB4MDBGRiwJMHgwMEZFLAkweDAwRkQsCTB4MDBGQywJMHgwMEZBLAkweDAwRjgsCisJMHgwMEY2LAkweDAwRjMsCTB4MDBGMCwJMHgwMEVELAkweDAwRTksCTB4MDBFNiwJMHgwMEUyLAkweDAwREQsCisJMHgwMEQ5LAkweDAwRDQsCTB4MDBDRiwJMHgwMEM5LAkweDAwQzQsCTB4MDBCRSwJMHgwMEI4LAkweDAwQjEsCisJMHgwMEFCLAkweDAwQTQsCTB4MDA5RCwJMHgwMDk2LAkweDAwOEYsCTB4MDA4NywJMHgwMDgwLAkweDAwNzgsCisJMHgwMDcwLAkweDAwNjgsCTB4MDA1RiwJMHgwMDU3LAkweDAwNEYsCTB4MDA0NiwJMHgwMDNELAkweDAwMzUsCisJMHgwMDJDLAkweDAwMjMsCTB4MDAxQSwJMHgwMDExLAkweDAwMDgKK307CisKKworLyogYTogMTIzIC0+IDEyMy4wICovCitzdGF0aWMgaW5saW5lIGZpeHBfdCBmaXhwX25ldyhzMTYgYSkKK3sKKwlyZXR1cm4gYTw8RlJBQ19OOworfQorCisvKiBhOiAweEZGRkYgLT4gLTEuMAorICAgICAgMHg4MDAwIC0+IDEuMAorICAgICAgMHgwMDAwIC0+IDAuMAorKi8KK3N0YXRpYyBpbmxpbmUgZml4cF90IGZpeHBfbmV3MTYoczE2IGEpCit7CisJcmV0dXJuICgoczMyKWEpPj4oMTYtRlJBQ19OKTsKK30KKworc3RhdGljIGlubGluZSBmaXhwX3QgZml4cF9jb3ModW5zaWduZWQgaW50IGRlZ3JlZXMpCit7CisJaW50IHF1YWRyYW50ID0gKGRlZ3JlZXMgLyA5MCkgJiAzOworCXVuc2lnbmVkIGludCBpID0gZGVncmVlcyAlIDkwOworCisJaWYgKHF1YWRyYW50ID09IDEgfHwgcXVhZHJhbnQgPT0gMykgeworCQlpID0gODkgLSBpOworCX0KKworCWkgPj49IDE7CisKKwlyZXR1cm4gKHF1YWRyYW50ID09IDEgfHwgcXVhZHJhbnQgPT0gMik/IC1jb3NfdGFibGVbaV0gOiBjb3NfdGFibGVbaV07Cit9CisKK3N0YXRpYyBpbmxpbmUgZml4cF90IGZpeHBfc2luKHVuc2lnbmVkIGludCBkZWdyZWVzKQoreworCXJldHVybiAtZml4cF9jb3MoZGVncmVlcyArIDkwKTsKK30KKworc3RhdGljIGlubGluZSBmaXhwX3QgZml4cF9tdWx0KGZpeHBfdCBhLCBmaXhwX3QgYikKK3sKKwlyZXR1cm4gKChzMzIpKGEqYikpPj5GUkFDX047Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY2MmNmNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1jb3JlLmMKQEAgLTAsMCArMSwxODY0IEBACisvKgorICogIFVTQiBISUQgc3VwcG9ydCBmb3IgTGludXgKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDEgVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCisjdW5kZWYgREVCVUcKKyN1bmRlZiBERUJVR19EQVRBCisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgImhpZC5oIgorI2luY2x1ZGUgPGxpbnV4L2hpZGRldi5oPgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYyLjAxIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJBbmRyZWFzIEdhbCwgVm9qdGVjaCBQYXZsaWsiCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgSElEIGNvcmUgZHJpdmVyIgorI2RlZmluZSBEUklWRVJfTElDRU5TRSAiR1BMIgorCitzdGF0aWMgY2hhciAqaGlkX3R5cGVzW10gPSB7IkRldmljZSIsICJQb2ludGVyIiwgIk1vdXNlIiwgIkRldmljZSIsICJKb3lzdGljayIsCisJCQkJIkdhbWVwYWQiLCAiS2V5Ym9hcmQiLCAiS2V5cGFkIiwgIk11bHRpLUF4aXMgQ29udHJvbGxlciJ9OworLyoKKyAqIE1vZHVsZSBwYXJhbWV0ZXJzLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGlkX21vdXNlcG9sbF9pbnRlcnZhbDsKK21vZHVsZV9wYXJhbV9uYW1lZChtb3VzZXBvbGwsIGhpZF9tb3VzZXBvbGxfaW50ZXJ2YWwsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhtb3VzZXBvbGwsICJQb2xsaW5nIGludGVydmFsIG9mIG1pY2UiKTsKKworLyoKKyAqIFJlZ2lzdGVyIGEgbmV3IHJlcG9ydCBmb3IgYSBkZXZpY2UuCisgKi8KKworc3RhdGljIHN0cnVjdCBoaWRfcmVwb3J0ICpoaWRfcmVnaXN0ZXJfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIHR5cGUsIHVuc2lnbmVkIGlkKQoreworCXN0cnVjdCBoaWRfcmVwb3J0X2VudW0gKnJlcG9ydF9lbnVtID0gZGV2aWNlLT5yZXBvcnRfZW51bSArIHR5cGU7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKworCWlmIChyZXBvcnRfZW51bS0+cmVwb3J0X2lkX2hhc2hbaWRdKQorCQlyZXR1cm4gcmVwb3J0X2VudW0tPnJlcG9ydF9pZF9oYXNoW2lkXTsKKworCWlmICghKHJlcG9ydCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfcmVwb3J0KSwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm4gTlVMTDsKKwltZW1zZXQocmVwb3J0LCAwLCBzaXplb2Yoc3RydWN0IGhpZF9yZXBvcnQpKTsKKworCWlmIChpZCAhPSAwKQorCQlyZXBvcnRfZW51bS0+bnVtYmVyZWQgPSAxOworCisJcmVwb3J0LT5pZCA9IGlkOworCXJlcG9ydC0+dHlwZSA9IHR5cGU7CisJcmVwb3J0LT5zaXplID0gMDsKKwlyZXBvcnQtPmRldmljZSA9IGRldmljZTsKKwlyZXBvcnRfZW51bS0+cmVwb3J0X2lkX2hhc2hbaWRdID0gcmVwb3J0OworCisJbGlzdF9hZGRfdGFpbCgmcmVwb3J0LT5saXN0LCAmcmVwb3J0X2VudW0tPnJlcG9ydF9saXN0KTsKKworCXJldHVybiByZXBvcnQ7Cit9CisKKy8qCisgKiBSZWdpc3RlciBhIG5ldyBmaWVsZCBmb3IgdGhpcyByZXBvcnQuCisgKi8KKworc3RhdGljIHN0cnVjdCBoaWRfZmllbGQgKmhpZF9yZWdpc3Rlcl9maWVsZChzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCB1bnNpZ25lZCB1c2FnZXMsIHVuc2lnbmVkIHZhbHVlcykKK3sKKwlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZDsKKworCWlmIChyZXBvcnQtPm1heGZpZWxkID09IEhJRF9NQVhfRklFTERTKSB7CisJCWRiZygidG9vIG1hbnkgZmllbGRzIGluIHJlcG9ydCIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoIShmaWVsZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfZmllbGQpICsgdXNhZ2VzICogc2l6ZW9mKHN0cnVjdCBoaWRfdXNhZ2UpCisJCSsgdmFsdWVzICogc2l6ZW9mKHVuc2lnbmVkKSwgR0ZQX0tFUk5FTCkpKSByZXR1cm4gTlVMTDsKKworCW1lbXNldChmaWVsZCwgMCwgc2l6ZW9mKHN0cnVjdCBoaWRfZmllbGQpICsgdXNhZ2VzICogc2l6ZW9mKHN0cnVjdCBoaWRfdXNhZ2UpCisJCSsgdmFsdWVzICogc2l6ZW9mKHVuc2lnbmVkKSk7CisKKwlmaWVsZC0+aW5kZXggPSByZXBvcnQtPm1heGZpZWxkKys7CisJcmVwb3J0LT5maWVsZFtmaWVsZC0+aW5kZXhdID0gZmllbGQ7CisJZmllbGQtPnVzYWdlID0gKHN0cnVjdCBoaWRfdXNhZ2UgKikoZmllbGQgKyAxKTsKKwlmaWVsZC0+dmFsdWUgPSAodW5zaWduZWQgKikoZmllbGQtPnVzYWdlICsgdXNhZ2VzKTsKKwlmaWVsZC0+cmVwb3J0ID0gcmVwb3J0OworCisJcmV0dXJuIGZpZWxkOworfQorCisvKgorICogT3BlbiBhIGNvbGxlY3Rpb24uIFRoZSB0eXBlL3VzYWdlIGlzIHB1c2hlZCBvbiB0aGUgc3RhY2suCisgKi8KKworc3RhdGljIGludCBvcGVuX2NvbGxlY3Rpb24oc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlciwgdW5zaWduZWQgdHlwZSkKK3sKKwlzdHJ1Y3QgaGlkX2NvbGxlY3Rpb24gKmNvbGxlY3Rpb247CisJdW5zaWduZWQgdXNhZ2U7CisKKwl1c2FnZSA9IHBhcnNlci0+bG9jYWwudXNhZ2VbMF07CisKKwlpZiAocGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrX3B0ciA9PSBISURfQ09MTEVDVElPTl9TVEFDS19TSVpFKSB7CisJCWRiZygiY29sbGVjdGlvbiBzdGFjayBvdmVyZmxvdyIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHBhcnNlci0+ZGV2aWNlLT5tYXhjb2xsZWN0aW9uID09IHBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uX3NpemUpIHsKKwkJY29sbGVjdGlvbiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfY29sbGVjdGlvbikgKgorCQkJCXBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uX3NpemUgKiAyLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGNvbGxlY3Rpb24gPT0gTlVMTCkgeworCQkJZGJnKCJmYWlsZWQgdG8gcmVhbGxvY2F0ZSBjb2xsZWN0aW9uIGFycmF5Iik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJbWVtY3B5KGNvbGxlY3Rpb24sIHBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uLAorCQkJc2l6ZW9mKHN0cnVjdCBoaWRfY29sbGVjdGlvbikgKgorCQkJcGFyc2VyLT5kZXZpY2UtPmNvbGxlY3Rpb25fc2l6ZSk7CisJCW1lbXNldChjb2xsZWN0aW9uICsgcGFyc2VyLT5kZXZpY2UtPmNvbGxlY3Rpb25fc2l6ZSwgMCwKKwkJCXNpemVvZihzdHJ1Y3QgaGlkX2NvbGxlY3Rpb24pICoKKwkJCXBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uX3NpemUpOworCQlrZnJlZShwYXJzZXItPmRldmljZS0+Y29sbGVjdGlvbik7CisJCXBhcnNlci0+ZGV2aWNlLT5jb2xsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJcGFyc2VyLT5kZXZpY2UtPmNvbGxlY3Rpb25fc2l6ZSAqPSAyOworCX0KKworCXBhcnNlci0+Y29sbGVjdGlvbl9zdGFja1twYXJzZXItPmNvbGxlY3Rpb25fc3RhY2tfcHRyKytdID0KKwkJcGFyc2VyLT5kZXZpY2UtPm1heGNvbGxlY3Rpb247CisKKwljb2xsZWN0aW9uID0gcGFyc2VyLT5kZXZpY2UtPmNvbGxlY3Rpb24gKworCQlwYXJzZXItPmRldmljZS0+bWF4Y29sbGVjdGlvbisrOworCWNvbGxlY3Rpb24tPnR5cGUgPSB0eXBlOworCWNvbGxlY3Rpb24tPnVzYWdlID0gdXNhZ2U7CisJY29sbGVjdGlvbi0+bGV2ZWwgPSBwYXJzZXItPmNvbGxlY3Rpb25fc3RhY2tfcHRyIC0gMTsKKworCWlmICh0eXBlID09IEhJRF9DT0xMRUNUSU9OX0FQUExJQ0FUSU9OKQorCQlwYXJzZXItPmRldmljZS0+bWF4YXBwbGljYXRpb24rKzsKKworCXJldHVybiAwOworfQorCisvKgorICogQ2xvc2UgYSBjb2xsZWN0aW9uLgorICovCisKK3N0YXRpYyBpbnQgY2xvc2VfY29sbGVjdGlvbihzdHJ1Y3QgaGlkX3BhcnNlciAqcGFyc2VyKQoreworCWlmICghcGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrX3B0cikgeworCQlkYmcoImNvbGxlY3Rpb24gc3RhY2sgdW5kZXJmbG93Iik7CisJCXJldHVybiAtMTsKKwl9CisJcGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrX3B0ci0tOworCXJldHVybiAwOworfQorCisvKgorICogQ2xpbWIgdXAgdGhlIHN0YWNrLCBzZWFyY2ggZm9yIHRoZSBzcGVjaWZpZWQgY29sbGVjdGlvbiB0eXBlCisgKiBhbmQgcmV0dXJuIHRoZSB1c2FnZS4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgaGlkX2xvb2t1cF9jb2xsZWN0aW9uKHN0cnVjdCBoaWRfcGFyc2VyICpwYXJzZXIsIHVuc2lnbmVkIHR5cGUpCit7CisJaW50IG47CisJZm9yIChuID0gcGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrX3B0ciAtIDE7IG4gPj0gMDsgbi0tKQorCQlpZiAocGFyc2VyLT5kZXZpY2UtPmNvbGxlY3Rpb25bcGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrW25dXS50eXBlID09IHR5cGUpCisJCQlyZXR1cm4gcGFyc2VyLT5kZXZpY2UtPmNvbGxlY3Rpb25bcGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrW25dXS51c2FnZTsKKwlyZXR1cm4gMDsgLyogd2Uga25vdyBub3RoaW5nIGFib3V0IHRoaXMgdXNhZ2UgdHlwZSAqLworfQorCisvKgorICogQWRkIGEgdXNhZ2UgdG8gdGhlIHRlbXBvcmFyeSBwYXJzZXIgdGFibGUuCisgKi8KKworc3RhdGljIGludCBoaWRfYWRkX3VzYWdlKHN0cnVjdCBoaWRfcGFyc2VyICpwYXJzZXIsIHVuc2lnbmVkIHVzYWdlKQoreworCWlmIChwYXJzZXItPmxvY2FsLnVzYWdlX2luZGV4ID49IEhJRF9NQVhfVVNBR0VTKSB7CisJCWRiZygidXNhZ2UgaW5kZXggZXhjZWVkZWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlwYXJzZXItPmxvY2FsLnVzYWdlW3BhcnNlci0+bG9jYWwudXNhZ2VfaW5kZXhdID0gdXNhZ2U7CisJcGFyc2VyLT5sb2NhbC5jb2xsZWN0aW9uX2luZGV4W3BhcnNlci0+bG9jYWwudXNhZ2VfaW5kZXhdID0KKwkJcGFyc2VyLT5jb2xsZWN0aW9uX3N0YWNrX3B0ciA/CisJCXBhcnNlci0+Y29sbGVjdGlvbl9zdGFja1twYXJzZXItPmNvbGxlY3Rpb25fc3RhY2tfcHRyIC0gMV0gOiAwOworCXBhcnNlci0+bG9jYWwudXNhZ2VfaW5kZXgrKzsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlZ2lzdGVyIGEgbmV3IGZpZWxkIGZvciB0aGlzIHJlcG9ydC4KKyAqLworCitzdGF0aWMgaW50IGhpZF9hZGRfZmllbGQoc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlciwgdW5zaWduZWQgcmVwb3J0X3R5cGUsIHVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJc3RydWN0IGhpZF9maWVsZCAqZmllbGQ7CisJaW50IHVzYWdlczsKKwl1bnNpZ25lZCBvZmZzZXQ7CisJaW50IGk7CisKKwlpZiAoIShyZXBvcnQgPSBoaWRfcmVnaXN0ZXJfcmVwb3J0KHBhcnNlci0+ZGV2aWNlLCByZXBvcnRfdHlwZSwgcGFyc2VyLT5nbG9iYWwucmVwb3J0X2lkKSkpIHsKKwkJZGJnKCJoaWRfcmVnaXN0ZXJfcmVwb3J0IGZhaWxlZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWF4aW11bSA8IHBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWluaW11bSkgeworCQlkYmcoImxvZ2ljYWwgcmFuZ2UgaW52YWxpZCAlZCAlZCIsIHBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWluaW11bSwgcGFyc2VyLT5nbG9iYWwubG9naWNhbF9tYXhpbXVtKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW9mZnNldCA9IHJlcG9ydC0+c2l6ZTsKKwlyZXBvcnQtPnNpemUgKz0gcGFyc2VyLT5nbG9iYWwucmVwb3J0X3NpemUgKiBwYXJzZXItPmdsb2JhbC5yZXBvcnRfY291bnQ7CisKKwlpZiAoIXBhcnNlci0+bG9jYWwudXNhZ2VfaW5kZXgpIC8qIElnbm9yZSBwYWRkaW5nIGZpZWxkcyAqLworCQlyZXR1cm4gMDsgCisKKwl1c2FnZXMgPSBtYXhfdChpbnQsIHBhcnNlci0+bG9jYWwudXNhZ2VfaW5kZXgsIHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9jb3VudCk7CisKKwlpZiAoKGZpZWxkID0gaGlkX3JlZ2lzdGVyX2ZpZWxkKHJlcG9ydCwgdXNhZ2VzLCBwYXJzZXItPmdsb2JhbC5yZXBvcnRfY291bnQpKSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWZpZWxkLT5waHlzaWNhbCA9IGhpZF9sb29rdXBfY29sbGVjdGlvbihwYXJzZXIsIEhJRF9DT0xMRUNUSU9OX1BIWVNJQ0FMKTsKKwlmaWVsZC0+bG9naWNhbCA9IGhpZF9sb29rdXBfY29sbGVjdGlvbihwYXJzZXIsIEhJRF9DT0xMRUNUSU9OX0xPR0lDQUwpOworCWZpZWxkLT5hcHBsaWNhdGlvbiA9IGhpZF9sb29rdXBfY29sbGVjdGlvbihwYXJzZXIsIEhJRF9DT0xMRUNUSU9OX0FQUExJQ0FUSU9OKTsKKworCWZvciAoaSA9IDA7IGkgPCB1c2FnZXM7IGkrKykgeworCQlpbnQgaiA9IGk7CisJCS8qIER1cGxpY2F0ZSB0aGUgbGFzdCB1c2FnZSB3ZSBwYXJzZWQgaWYgd2UgaGF2ZSBleGNlc3MgdmFsdWVzICovCisJCWlmIChpID49IHBhcnNlci0+bG9jYWwudXNhZ2VfaW5kZXgpCisJCQlqID0gcGFyc2VyLT5sb2NhbC51c2FnZV9pbmRleCAtIDE7CisJCWZpZWxkLT51c2FnZVtpXS5oaWQgPSBwYXJzZXItPmxvY2FsLnVzYWdlW2pdOworCQlmaWVsZC0+dXNhZ2VbaV0uY29sbGVjdGlvbl9pbmRleCA9CisJCQlwYXJzZXItPmxvY2FsLmNvbGxlY3Rpb25faW5kZXhbal07CisJfQorCisJZmllbGQtPm1heHVzYWdlID0gdXNhZ2VzOworCWZpZWxkLT5mbGFncyA9IGZsYWdzOworCWZpZWxkLT5yZXBvcnRfb2Zmc2V0ID0gb2Zmc2V0OworCWZpZWxkLT5yZXBvcnRfdHlwZSA9IHJlcG9ydF90eXBlOworCWZpZWxkLT5yZXBvcnRfc2l6ZSA9IHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9zaXplOworCWZpZWxkLT5yZXBvcnRfY291bnQgPSBwYXJzZXItPmdsb2JhbC5yZXBvcnRfY291bnQ7CisJZmllbGQtPmxvZ2ljYWxfbWluaW11bSA9IHBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWluaW11bTsKKwlmaWVsZC0+bG9naWNhbF9tYXhpbXVtID0gcGFyc2VyLT5nbG9iYWwubG9naWNhbF9tYXhpbXVtOworCWZpZWxkLT5waHlzaWNhbF9taW5pbXVtID0gcGFyc2VyLT5nbG9iYWwucGh5c2ljYWxfbWluaW11bTsKKwlmaWVsZC0+cGh5c2ljYWxfbWF4aW11bSA9IHBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21heGltdW07CisJZmllbGQtPnVuaXRfZXhwb25lbnQgPSBwYXJzZXItPmdsb2JhbC51bml0X2V4cG9uZW50OworCWZpZWxkLT51bml0ID0gcGFyc2VyLT5nbG9iYWwudW5pdDsKKworCXJldHVybiAwOworfQorCisvKgorICogUmVhZCBkYXRhIHZhbHVlIGZyb20gaXRlbS4KKyAqLworCitzdGF0aWMgX19pbmxpbmVfXyBfX3UzMiBpdGVtX3VkYXRhKHN0cnVjdCBoaWRfaXRlbSAqaXRlbSkKK3sKKwlzd2l0Y2ggKGl0ZW0tPnNpemUpIHsKKwkJY2FzZSAxOiByZXR1cm4gaXRlbS0+ZGF0YS51ODsKKwkJY2FzZSAyOiByZXR1cm4gaXRlbS0+ZGF0YS51MTY7CisJCWNhc2UgNDogcmV0dXJuIGl0ZW0tPmRhdGEudTMyOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5saW5lX18gX19zMzIgaXRlbV9zZGF0YShzdHJ1Y3QgaGlkX2l0ZW0gKml0ZW0pCit7CisJc3dpdGNoIChpdGVtLT5zaXplKSB7CisJCWNhc2UgMTogcmV0dXJuIGl0ZW0tPmRhdGEuczg7CisJCWNhc2UgMjogcmV0dXJuIGl0ZW0tPmRhdGEuczE2OworCQljYXNlIDQ6IHJldHVybiBpdGVtLT5kYXRhLnMzMjsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQcm9jZXNzIGEgZ2xvYmFsIGl0ZW0uCisgKi8KKworc3RhdGljIGludCBoaWRfcGFyc2VyX2dsb2JhbChzdHJ1Y3QgaGlkX3BhcnNlciAqcGFyc2VyLCBzdHJ1Y3QgaGlkX2l0ZW0gKml0ZW0pCit7CisJc3dpdGNoIChpdGVtLT50YWcpIHsKKworCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfUFVTSDoKKworCQkJaWYgKHBhcnNlci0+Z2xvYmFsX3N0YWNrX3B0ciA9PSBISURfR0xPQkFMX1NUQUNLX1NJWkUpIHsKKwkJCQlkYmcoImdsb2JhbCBlbnZpcm9tZW50IHN0YWNrIG92ZXJmbG93Iik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCisJCQltZW1jcHkocGFyc2VyLT5nbG9iYWxfc3RhY2sgKyBwYXJzZXItPmdsb2JhbF9zdGFja19wdHIrKywKKwkJCQkmcGFyc2VyLT5nbG9iYWwsIHNpemVvZihzdHJ1Y3QgaGlkX2dsb2JhbCkpOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1BPUDoKKworCQkJaWYgKCFwYXJzZXItPmdsb2JhbF9zdGFja19wdHIpIHsKKwkJCQlkYmcoImdsb2JhbCBlbnZpcm9tZW50IHN0YWNrIHVuZGVyZmxvdyIpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKworCQkJbWVtY3B5KCZwYXJzZXItPmdsb2JhbCwgcGFyc2VyLT5nbG9iYWxfc3RhY2sgKyAtLXBhcnNlci0+Z2xvYmFsX3N0YWNrX3B0ciwKKwkJCQlzaXplb2Yoc3RydWN0IGhpZF9nbG9iYWwpKTsKKwkJCXJldHVybiAwOworCisJCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19VU0FHRV9QQUdFOgorCQkJcGFyc2VyLT5nbG9iYWwudXNhZ2VfcGFnZSA9IGl0ZW1fdWRhdGEoaXRlbSk7CisJCQlyZXR1cm4gMDsKKworCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfTE9HSUNBTF9NSU5JTVVNOgorCQkJcGFyc2VyLT5nbG9iYWwubG9naWNhbF9taW5pbXVtID0gaXRlbV9zZGF0YShpdGVtKTsKKwkJCXJldHVybiAwOworCisJCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19MT0dJQ0FMX01BWElNVU06CisJCQlpZiAocGFyc2VyLT5nbG9iYWwubG9naWNhbF9taW5pbXVtIDwgMCkKKwkJCQlwYXJzZXItPmdsb2JhbC5sb2dpY2FsX21heGltdW0gPSBpdGVtX3NkYXRhKGl0ZW0pOworCQkJZWxzZQorCQkJCXBhcnNlci0+Z2xvYmFsLmxvZ2ljYWxfbWF4aW11bSA9IGl0ZW1fdWRhdGEoaXRlbSk7CisJCQlyZXR1cm4gMDsKKworCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfUEhZU0lDQUxfTUlOSU1VTToKKwkJCXBhcnNlci0+Z2xvYmFsLnBoeXNpY2FsX21pbmltdW0gPSBpdGVtX3NkYXRhKGl0ZW0pOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1BIWVNJQ0FMX01BWElNVU06CisJCQlpZiAocGFyc2VyLT5nbG9iYWwucGh5c2ljYWxfbWluaW11bSA8IDApCisJCQkJcGFyc2VyLT5nbG9iYWwucGh5c2ljYWxfbWF4aW11bSA9IGl0ZW1fc2RhdGEoaXRlbSk7CisJCQllbHNlCisJCQkJcGFyc2VyLT5nbG9iYWwucGh5c2ljYWxfbWF4aW11bSA9IGl0ZW1fdWRhdGEoaXRlbSk7CisJCQlyZXR1cm4gMDsKKworCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfVU5JVF9FWFBPTkVOVDoKKwkJCXBhcnNlci0+Z2xvYmFsLnVuaXRfZXhwb25lbnQgPSBpdGVtX3NkYXRhKGl0ZW0pOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBISURfR0xPQkFMX0lURU1fVEFHX1VOSVQ6CisJCQlwYXJzZXItPmdsb2JhbC51bml0ID0gaXRlbV91ZGF0YShpdGVtKTsKKwkJCXJldHVybiAwOworCisJCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19SRVBPUlRfU0laRToKKwkJCWlmICgocGFyc2VyLT5nbG9iYWwucmVwb3J0X3NpemUgPSBpdGVtX3VkYXRhKGl0ZW0pKSA+IDMyKSB7CisJCQkJZGJnKCJpbnZhbGlkIHJlcG9ydF9zaXplICVkIiwgcGFyc2VyLT5nbG9iYWwucmVwb3J0X3NpemUpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCXJldHVybiAwOworCisJCWNhc2UgSElEX0dMT0JBTF9JVEVNX1RBR19SRVBPUlRfQ09VTlQ6CisJCQlpZiAoKHBhcnNlci0+Z2xvYmFsLnJlcG9ydF9jb3VudCA9IGl0ZW1fdWRhdGEoaXRlbSkpID4gSElEX01BWF9VU0FHRVMpIHsKKwkJCQlkYmcoImludmFsaWQgcmVwb3J0X2NvdW50ICVkIiwgcGFyc2VyLT5nbG9iYWwucmVwb3J0X2NvdW50KTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQlyZXR1cm4gMDsKKworCQljYXNlIEhJRF9HTE9CQUxfSVRFTV9UQUdfUkVQT1JUX0lEOgorCQkJaWYgKChwYXJzZXItPmdsb2JhbC5yZXBvcnRfaWQgPSBpdGVtX3VkYXRhKGl0ZW0pKSA9PSAwKSB7CisJCQkJZGJnKCJyZXBvcnRfaWQgMCBpcyBpbnZhbGlkIik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJcmV0dXJuIDA7CisKKwkJZGVmYXVsdDoKKwkJCWRiZygidW5rbm93biBnbG9iYWwgdGFnIDB4JXgiLCBpdGVtLT50YWcpOworCQkJcmV0dXJuIC0xOworCX0KK30KKworLyoKKyAqIFByb2Nlc3MgYSBsb2NhbCBpdGVtLgorICovCisKK3N0YXRpYyBpbnQgaGlkX3BhcnNlcl9sb2NhbChzdHJ1Y3QgaGlkX3BhcnNlciAqcGFyc2VyLCBzdHJ1Y3QgaGlkX2l0ZW0gKml0ZW0pCit7CisJX191MzIgZGF0YTsKKwl1bnNpZ25lZCBuOworCisJaWYgKGl0ZW0tPnNpemUgPT0gMCkgeworCQlkYmcoIml0ZW0gZGF0YSBleHBlY3RlZCBmb3IgbG9jYWwgaXRlbSIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZGF0YSA9IGl0ZW1fdWRhdGEoaXRlbSk7CisKKwlzd2l0Y2ggKGl0ZW0tPnRhZykgeworCisJCWNhc2UgSElEX0xPQ0FMX0lURU1fVEFHX0RFTElNSVRFUjoKKworCQkJaWYgKGRhdGEpIHsKKwkJCQkvKgorCQkJCSAqIFdlIHRyZWF0IGl0ZW1zIGJlZm9yZSB0aGUgZmlyc3QgZGVsaW1pdGVyCisJCQkJICogYXMgZ2xvYmFsIHRvIGFsbCB1c2FnZSBzZXRzIChicmFuY2ggMCkuCisJCQkJICogSW4gdGhlIG1vbWVudCB3ZSBwcm9jZXNzIG9ubHkgdGhlc2UgZ2xvYmFsCisJCQkJICogaXRlbXMgYW5kIHRoZSBmaXJzdCBkZWxpbWl0ZXIgc2V0LgorCQkJCSAqLworCQkJCWlmIChwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9kZXB0aCAhPSAwKSB7CisJCQkJCWRiZygibmVzdGVkIGRlbGltaXRlcnMiKTsKKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKwkJCQlwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9kZXB0aCsrOworCQkJCXBhcnNlci0+bG9jYWwuZGVsaW1pdGVyX2JyYW5jaCsrOworCQkJfSBlbHNlIHsKKwkJCQlpZiAocGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfZGVwdGggPCAxKSB7CisJCQkJCWRiZygiYm9ndXMgY2xvc2UgZGVsaW1pdGVyIik7CisJCQkJCXJldHVybiAtMTsKKwkJCQl9CisJCQkJcGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfZGVwdGgtLTsKKwkJCX0KKwkJCXJldHVybiAxOworCisJCWNhc2UgSElEX0xPQ0FMX0lURU1fVEFHX1VTQUdFOgorCisJCQlpZiAocGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfYnJhbmNoID4gMSkgeworCQkJCWRiZygiYWx0ZXJuYXRpdmUgdXNhZ2UgaWdub3JlZCIpOworCQkJCXJldHVybiAwOworCQkJfQorCisJCQlpZiAoaXRlbS0+c2l6ZSA8PSAyKQorCQkJCWRhdGEgPSAocGFyc2VyLT5nbG9iYWwudXNhZ2VfcGFnZSA8PCAxNikgKyBkYXRhOworCisJCQlyZXR1cm4gaGlkX2FkZF91c2FnZShwYXJzZXIsIGRhdGEpOworCisJCWNhc2UgSElEX0xPQ0FMX0lURU1fVEFHX1VTQUdFX01JTklNVU06CisKKwkJCWlmIChwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9icmFuY2ggPiAxKSB7CisJCQkJZGJnKCJhbHRlcm5hdGl2ZSB1c2FnZSBpZ25vcmVkIik7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJCWlmIChpdGVtLT5zaXplIDw9IDIpCisJCQkJZGF0YSA9IChwYXJzZXItPmdsb2JhbC51c2FnZV9wYWdlIDw8IDE2KSArIGRhdGE7CisKKwkJCXBhcnNlci0+bG9jYWwudXNhZ2VfbWluaW11bSA9IGRhdGE7CisJCQlyZXR1cm4gMDsKKworCQljYXNlIEhJRF9MT0NBTF9JVEVNX1RBR19VU0FHRV9NQVhJTVVNOgorCisJCQlpZiAocGFyc2VyLT5sb2NhbC5kZWxpbWl0ZXJfYnJhbmNoID4gMSkgeworCQkJCWRiZygiYWx0ZXJuYXRpdmUgdXNhZ2UgaWdub3JlZCIpOworCQkJCXJldHVybiAwOworCQkJfQorCisJCQlpZiAoaXRlbS0+c2l6ZSA8PSAyKQorCQkJCWRhdGEgPSAocGFyc2VyLT5nbG9iYWwudXNhZ2VfcGFnZSA8PCAxNikgKyBkYXRhOworCisJCQlmb3IgKG4gPSBwYXJzZXItPmxvY2FsLnVzYWdlX21pbmltdW07IG4gPD0gZGF0YTsgbisrKQorCQkJCWlmIChoaWRfYWRkX3VzYWdlKHBhcnNlciwgbikpIHsKKwkJCQkJZGJnKCJoaWRfYWRkX3VzYWdlIGZhaWxlZFxuIik7CisJCQkJCXJldHVybiAtMTsKKwkJCQl9CisJCQlyZXR1cm4gMDsKKworCQlkZWZhdWx0OgorCisJCQlkYmcoInVua25vd24gbG9jYWwgaXRlbSB0YWcgMHgleCIsIGl0ZW0tPnRhZyk7CisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQcm9jZXNzIGEgbWFpbiBpdGVtLgorICovCisKK3N0YXRpYyBpbnQgaGlkX3BhcnNlcl9tYWluKHN0cnVjdCBoaWRfcGFyc2VyICpwYXJzZXIsIHN0cnVjdCBoaWRfaXRlbSAqaXRlbSkKK3sKKwlfX3UzMiBkYXRhOworCWludCByZXQ7CisKKwlkYXRhID0gaXRlbV91ZGF0YShpdGVtKTsKKworCXN3aXRjaCAoaXRlbS0+dGFnKSB7CisJCWNhc2UgSElEX01BSU5fSVRFTV9UQUdfQkVHSU5fQ09MTEVDVElPTjoKKwkJCXJldCA9IG9wZW5fY29sbGVjdGlvbihwYXJzZXIsIGRhdGEgJiAweGZmKTsKKwkJCWJyZWFrOworCQljYXNlIEhJRF9NQUlOX0lURU1fVEFHX0VORF9DT0xMRUNUSU9OOgorCQkJcmV0ID0gY2xvc2VfY29sbGVjdGlvbihwYXJzZXIpOworCQkJYnJlYWs7CisJCWNhc2UgSElEX01BSU5fSVRFTV9UQUdfSU5QVVQ6CisJCQlyZXQgPSBoaWRfYWRkX2ZpZWxkKHBhcnNlciwgSElEX0lOUFVUX1JFUE9SVCwgZGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSBISURfTUFJTl9JVEVNX1RBR19PVVRQVVQ6CisJCQlyZXQgPSBoaWRfYWRkX2ZpZWxkKHBhcnNlciwgSElEX09VVFBVVF9SRVBPUlQsIGRhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgSElEX01BSU5fSVRFTV9UQUdfRkVBVFVSRToKKwkJCXJldCA9IGhpZF9hZGRfZmllbGQocGFyc2VyLCBISURfRkVBVFVSRV9SRVBPUlQsIGRhdGEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkYmcoInVua25vd24gbWFpbiBpdGVtIHRhZyAweCV4IiwgaXRlbS0+dGFnKTsKKwkJCXJldCA9IDA7CisJfQorCisJbWVtc2V0KCZwYXJzZXItPmxvY2FsLCAwLCBzaXplb2YocGFyc2VyLT5sb2NhbCkpOwkvKiBSZXNldCB0aGUgbG9jYWwgcGFyc2VyIGVudmlyb25tZW50ICovCisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUHJvY2VzcyBhIHJlc2VydmVkIGl0ZW0uCisgKi8KKworc3RhdGljIGludCBoaWRfcGFyc2VyX3Jlc2VydmVkKHN0cnVjdCBoaWRfcGFyc2VyICpwYXJzZXIsIHN0cnVjdCBoaWRfaXRlbSAqaXRlbSkKK3sKKwlkYmcoInJlc2VydmVkIGl0ZW0gdHlwZSwgdGFnIDB4JXgiLCBpdGVtLT50YWcpOworCXJldHVybiAwOworfQorCisvKgorICogRnJlZSBhIHJlcG9ydCBhbmQgYWxsIHJlZ2lzdGVyZWQgZmllbGRzLiBUaGUgZmllbGQtPnVzYWdlIGFuZAorICogZmllbGQtPnZhbHVlIHRhYmxlJ3MgYXJlIGFsbG9jYXRlZCBiZWhpbmQgdGhlIGZpZWxkLCBzbyB3ZSBuZWVkCisgKiBvbmx5IHRvIGZyZWUoZmllbGQpIGl0c2VsZi4KKyAqLworCitzdGF0aWMgdm9pZCBoaWRfZnJlZV9yZXBvcnQoc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCkKK3sKKwl1bnNpZ25lZCBuOworCisJZm9yIChuID0gMDsgbiA8IHJlcG9ydC0+bWF4ZmllbGQ7IG4rKykKKwkJa2ZyZWUocmVwb3J0LT5maWVsZFtuXSk7CisJa2ZyZWUocmVwb3J0KTsKK30KKworLyoKKyAqIEZyZWUgYSBkZXZpY2Ugc3RydWN0dXJlLCBhbGwgcmVwb3J0cywgYW5kIGFsbCBmaWVsZHMuCisgKi8KKworc3RhdGljIHZvaWQgaGlkX2ZyZWVfZGV2aWNlKHN0cnVjdCBoaWRfZGV2aWNlICpkZXZpY2UpCit7CisJdW5zaWduZWQgaSxqOworCisJaGlkX2ZmX2V4aXQoZGV2aWNlKTsKKworCWZvciAoaSA9IDA7IGkgPCBISURfUkVQT1JUX1RZUEVTOyBpKyspIHsKKwkJc3RydWN0IGhpZF9yZXBvcnRfZW51bSAqcmVwb3J0X2VudW0gPSBkZXZpY2UtPnJlcG9ydF9lbnVtICsgaTsKKworCQlmb3IgKGogPSAwOyBqIDwgMjU2OyBqKyspIHsKKwkJCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQgPSByZXBvcnRfZW51bS0+cmVwb3J0X2lkX2hhc2hbal07CisJCQlpZiAocmVwb3J0KQorCQkJCWhpZF9mcmVlX3JlcG9ydChyZXBvcnQpOworCQl9CisJfQorCisJaWYgKGRldmljZS0+cmRlc2MpCisJCWtmcmVlKGRldmljZS0+cmRlc2MpOworCWtmcmVlKGRldmljZSk7Cit9CisKKy8qCisgKiBGZXRjaCBhIHJlcG9ydCBkZXNjcmlwdGlvbiBpdGVtIGZyb20gdGhlIGRhdGEgc3RyZWFtLiBXZSBzdXBwb3J0IGxvbmcKKyAqIGl0ZW1zLCB0aG91Z2ggdGhleSBhcmUgbm90IHVzZWQgeWV0LgorICovCisKK3N0YXRpYyB1OCAqZmV0Y2hfaXRlbShfX3U4ICpzdGFydCwgX191OCAqZW5kLCBzdHJ1Y3QgaGlkX2l0ZW0gKml0ZW0pCit7CisJdTggYjsKKworCWlmICgoZW5kIC0gc3RhcnQpIDw9IDApCisJCXJldHVybiBOVUxMOworCisJYiA9ICpzdGFydCsrOworCisJaXRlbS0+dHlwZSA9IChiID4+IDIpICYgMzsKKwlpdGVtLT50YWcgID0gKGIgPj4gNCkgJiAxNTsKKworCWlmIChpdGVtLT50YWcgPT0gSElEX0lURU1fVEFHX0xPTkcpIHsKKworCQlpdGVtLT5mb3JtYXQgPSBISURfSVRFTV9GT1JNQVRfTE9ORzsKKworCQlpZiAoKGVuZCAtIHN0YXJ0KSA8IDIpCisJCQlyZXR1cm4gTlVMTDsKKworCQlpdGVtLT5zaXplID0gKnN0YXJ0Kys7CisJCWl0ZW0tPnRhZyAgPSAqc3RhcnQrKzsKKworCQlpZiAoKGVuZCAtIHN0YXJ0KSA8IGl0ZW0tPnNpemUpCisJCQlyZXR1cm4gTlVMTDsKKworCQlpdGVtLT5kYXRhLmxvbmdkYXRhID0gc3RhcnQ7CisJCXN0YXJ0ICs9IGl0ZW0tPnNpemU7CisJCXJldHVybiBzdGFydDsKKwl9CisKKwlpdGVtLT5mb3JtYXQgPSBISURfSVRFTV9GT1JNQVRfU0hPUlQ7CisJaXRlbS0+c2l6ZSA9IGIgJiAzOworCisJc3dpdGNoIChpdGVtLT5zaXplKSB7CisKKwkJY2FzZSAwOgorCQkJcmV0dXJuIHN0YXJ0OworCisJCWNhc2UgMToKKwkJCWlmICgoZW5kIC0gc3RhcnQpIDwgMSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWl0ZW0tPmRhdGEudTggPSAqc3RhcnQrKzsKKwkJCXJldHVybiBzdGFydDsKKworCQljYXNlIDI6CisJCQlpZiAoKGVuZCAtIHN0YXJ0KSA8IDIpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlpdGVtLT5kYXRhLnUxNiA9IGxlMTZfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fbGUxNiopc3RhcnQpKTsKKwkJCXN0YXJ0ID0gKF9fdTggKikoKF9fbGUxNiAqKXN0YXJ0ICsgMSk7CisJCQlyZXR1cm4gc3RhcnQ7CisKKwkJY2FzZSAzOgorCQkJaXRlbS0+c2l6ZSsrOworCQkJaWYgKChlbmQgLSBzdGFydCkgPCA0KQorCQkJCXJldHVybiBOVUxMOworCQkJaXRlbS0+ZGF0YS51MzIgPSBsZTMyX3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMzIqKXN0YXJ0KSk7CisJCQlzdGFydCA9IChfX3U4ICopKChfX2xlMzIgKilzdGFydCArIDEpOworCQkJcmV0dXJuIHN0YXJ0OworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogUGFyc2UgYSByZXBvcnQgZGVzY3JpcHRpb24gaW50byBhIGhpZF9kZXZpY2Ugc3RydWN0dXJlLiBSZXBvcnRzIGFyZQorICogZW51bWVyYXRlZCwgZmllbGRzIGFyZSBhdHRhY2hlZCB0byB0aGVzZSByZXBvcnRzLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkX3BhcnNlX3JlcG9ydChfX3U4ICpzdGFydCwgdW5zaWduZWQgc2l6ZSkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlOworCXN0cnVjdCBoaWRfcGFyc2VyICpwYXJzZXI7CisJc3RydWN0IGhpZF9pdGVtIGl0ZW07CisJX191OCAqZW5kOworCXVuc2lnbmVkIGk7CisJc3RhdGljIGludCAoKmRpc3BhdGNoX3R5cGVbXSkoc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlciwKKwkJCQkgICAgICBzdHJ1Y3QgaGlkX2l0ZW0gKml0ZW0pID0geworCQloaWRfcGFyc2VyX21haW4sCisJCWhpZF9wYXJzZXJfZ2xvYmFsLAorCQloaWRfcGFyc2VyX2xvY2FsLAorCQloaWRfcGFyc2VyX3Jlc2VydmVkCisJfTsKKworCWlmICghKGRldmljZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfZGV2aWNlKSwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm4gTlVMTDsKKwltZW1zZXQoZGV2aWNlLCAwLCBzaXplb2Yoc3RydWN0IGhpZF9kZXZpY2UpKTsKKworCWlmICghKGRldmljZS0+Y29sbGVjdGlvbiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfY29sbGVjdGlvbikgKgorCQkJCSAgIEhJRF9ERUZBVUxUX05VTV9DT0xMRUNUSU9OUywgR0ZQX0tFUk5FTCkpKSB7CisJCWtmcmVlKGRldmljZSk7CisJCXJldHVybiBOVUxMOworCX0KKwltZW1zZXQoZGV2aWNlLT5jb2xsZWN0aW9uLCAwLCBzaXplb2Yoc3RydWN0IGhpZF9jb2xsZWN0aW9uKSAqCisJCUhJRF9ERUZBVUxUX05VTV9DT0xMRUNUSU9OUyk7CisJZGV2aWNlLT5jb2xsZWN0aW9uX3NpemUgPSBISURfREVGQVVMVF9OVU1fQ09MTEVDVElPTlM7CisKKwlmb3IgKGkgPSAwOyBpIDwgSElEX1JFUE9SVF9UWVBFUzsgaSsrKQorCQlJTklUX0xJU1RfSEVBRCgmZGV2aWNlLT5yZXBvcnRfZW51bVtpXS5yZXBvcnRfbGlzdCk7CisKKwlpZiAoIShkZXZpY2UtPnJkZXNjID0gKF9fdTggKilrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpKSkgeworCQlrZnJlZShkZXZpY2UtPmNvbGxlY3Rpb24pOworCQlrZnJlZShkZXZpY2UpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJbWVtY3B5KGRldmljZS0+cmRlc2MsIHN0YXJ0LCBzaXplKTsKKwlkZXZpY2UtPnJzaXplID0gc2l6ZTsKKworCWlmICghKHBhcnNlciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRfcGFyc2VyKSwgR0ZQX0tFUk5FTCkpKSB7CisJCWtmcmVlKGRldmljZS0+cmRlc2MpOworCQlrZnJlZShkZXZpY2UtPmNvbGxlY3Rpb24pOworCQlrZnJlZShkZXZpY2UpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJbWVtc2V0KHBhcnNlciwgMCwgc2l6ZW9mKHN0cnVjdCBoaWRfcGFyc2VyKSk7CisJcGFyc2VyLT5kZXZpY2UgPSBkZXZpY2U7CisKKwllbmQgPSBzdGFydCArIHNpemU7CisJd2hpbGUgKChzdGFydCA9IGZldGNoX2l0ZW0oc3RhcnQsIGVuZCwgJml0ZW0pKSAhPSBOVUxMKSB7CisKKwkJaWYgKGl0ZW0uZm9ybWF0ICE9IEhJRF9JVEVNX0ZPUk1BVF9TSE9SVCkgeworCQkJZGJnKCJ1bmV4cGVjdGVkIGxvbmcgZ2xvYmFsIGl0ZW0iKTsKKwkJCWtmcmVlKGRldmljZS0+Y29sbGVjdGlvbik7CisJCQloaWRfZnJlZV9kZXZpY2UoZGV2aWNlKTsKKwkJCWtmcmVlKHBhcnNlcik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCWlmIChkaXNwYXRjaF90eXBlW2l0ZW0udHlwZV0ocGFyc2VyLCAmaXRlbSkpIHsKKwkJCWRiZygiaXRlbSAldSAldSAldSAldSBwYXJzaW5nIGZhaWxlZFxuIiwKKwkJCQlpdGVtLmZvcm1hdCwgKHVuc2lnbmVkKWl0ZW0uc2l6ZSwgKHVuc2lnbmVkKWl0ZW0udHlwZSwgKHVuc2lnbmVkKWl0ZW0udGFnKTsKKwkJCWtmcmVlKGRldmljZS0+Y29sbGVjdGlvbik7CisJCQloaWRfZnJlZV9kZXZpY2UoZGV2aWNlKTsKKwkJCWtmcmVlKHBhcnNlcik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCWlmIChzdGFydCA9PSBlbmQpIHsKKwkJCWlmIChwYXJzZXItPmNvbGxlY3Rpb25fc3RhY2tfcHRyKSB7CisJCQkJZGJnKCJ1bmJhbGFuY2VkIGNvbGxlY3Rpb24gYXQgZW5kIG9mIHJlcG9ydCBkZXNjcmlwdGlvbiIpOworCQkJCWtmcmVlKGRldmljZS0+Y29sbGVjdGlvbik7CisJCQkJaGlkX2ZyZWVfZGV2aWNlKGRldmljZSk7CisJCQkJa2ZyZWUocGFyc2VyKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCWlmIChwYXJzZXItPmxvY2FsLmRlbGltaXRlcl9kZXB0aCkgeworCQkJCWRiZygidW5iYWxhbmNlZCBkZWxpbWl0ZXIgYXQgZW5kIG9mIHJlcG9ydCBkZXNjcmlwdGlvbiIpOworCQkJCWtmcmVlKGRldmljZS0+Y29sbGVjdGlvbik7CisJCQkJaGlkX2ZyZWVfZGV2aWNlKGRldmljZSk7CisJCQkJa2ZyZWUocGFyc2VyKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCWtmcmVlKHBhcnNlcik7CisJCQlyZXR1cm4gZGV2aWNlOworCQl9CisJfQorCisJZGJnKCJpdGVtIGZldGNoaW5nIGZhaWxlZCBhdCBvZmZzZXQgJWRcbiIsIChpbnQpKGVuZCAtIHN0YXJ0KSk7CisJa2ZyZWUoZGV2aWNlLT5jb2xsZWN0aW9uKTsKKwloaWRfZnJlZV9kZXZpY2UoZGV2aWNlKTsKKwlrZnJlZShwYXJzZXIpOworCXJldHVybiBOVUxMOworfQorCisvKgorICogQ29udmVydCBhIHNpZ25lZCBuLWJpdCBpbnRlZ2VyIHRvIHNpZ25lZCAzMi1iaXQgaW50ZWdlci4gQ29tbW9uCisgKiBjYXNlcyBhcmUgZG9uZSB0aHJvdWdoIHRoZSBjb21waWxlciwgdGhlIHNjcmV3ZWQgdGhpbmdzIGhhcyB0byBiZQorICogZG9uZSBieSBoYW5kLgorICovCisKK3N0YXRpYyBfX2lubGluZV9fIF9fczMyIHNudG8zMihfX3UzMiB2YWx1ZSwgdW5zaWduZWQgbikKK3sKKwlzd2l0Y2ggKG4pIHsKKwkJY2FzZSA4OiAgcmV0dXJuICgoX19zOCl2YWx1ZSk7CisJCWNhc2UgMTY6IHJldHVybiAoKF9fczE2KXZhbHVlKTsKKwkJY2FzZSAzMjogcmV0dXJuICgoX19zMzIpdmFsdWUpOworCX0KKwlyZXR1cm4gdmFsdWUgJiAoMSA8PCAobiAtIDEpKSA/IHZhbHVlIHwgKC0xIDw8IG4pIDogdmFsdWU7Cit9CisKKy8qCisgKiBDb252ZXJ0IGEgc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIHRvIGEgc2lnbmVkIG4tYml0IGludGVnZXIuCisgKi8KKworc3RhdGljIF9faW5saW5lX18gX191MzIgczMydG9uKF9fczMyIHZhbHVlLCB1bnNpZ25lZCBuKQoreworCV9fczMyIGEgPSB2YWx1ZSA+PiAobiAtIDEpOworCWlmIChhICYmIGEgIT0gLTEpCisJCXJldHVybiB2YWx1ZSA8IDAgPyAxIDw8IChuIC0gMSkgOiAoMSA8PCAobiAtIDEpKSAtIDE7CisJcmV0dXJuIHZhbHVlICYgKCgxIDw8IG4pIC0gMSk7Cit9CisKKy8qCisgKiBFeHRyYWN0L2ltcGxlbWVudCBhIGRhdGEgZmllbGQgZnJvbS90byBhIHJlcG9ydC4KKyAqLworCitzdGF0aWMgX19pbmxpbmVfXyBfX3UzMiBleHRyYWN0KF9fdTggKnJlcG9ydCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBuKQoreworCXJlcG9ydCArPSAob2Zmc2V0ID4+IDUpIDw8IDI7IG9mZnNldCAmPSAzMTsKKwlyZXR1cm4gKGxlNjRfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fbGU2NCopcmVwb3J0KSkgPj4gb2Zmc2V0KSAmICgoMSA8PCBuKSAtIDEpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGltcGxlbWVudChfX3U4ICpyZXBvcnQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbiwgX191MzIgdmFsdWUpCit7CisJcmVwb3J0ICs9IChvZmZzZXQgPj4gNSkgPDwgMjsgb2Zmc2V0ICY9IDMxOworCXB1dF91bmFsaWduZWQoKGdldF91bmFsaWduZWQoKF9fbGU2NCopcmVwb3J0KQorCQkmIGNwdV90b19sZTY0KH4oKCgoX191NjQpIDEgPDwgbikgLSAxKSA8PCBvZmZzZXQpKSkKKwkJfCBjcHVfdG9fbGU2NCgoX191NjQpdmFsdWUgPDwgb2Zmc2V0KSwgKF9fbGU2NCopcmVwb3J0KTsKK30KKworLyoKKyAqIFNlYXJjaCBhbiBhcnJheSBmb3IgYSB2YWx1ZS4KKyAqLworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgc2VhcmNoKF9fczMyICphcnJheSwgX19zMzIgdmFsdWUsIHVuc2lnbmVkIG4pCit7CisJd2hpbGUgKG4tLSkgeworCQlpZiAoKmFycmF5KysgPT0gdmFsdWUpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBoaWRfcHJvY2Vzc19ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwloaWRfZHVtcF9pbnB1dCh1c2FnZSwgdmFsdWUpOworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkKKwkJaGlkaW5wdXRfaGlkX2V2ZW50KGhpZCwgZmllbGQsIHVzYWdlLCB2YWx1ZSwgcmVncyk7CisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRERFVikKKwkJaGlkZGV2X2hpZF9ldmVudChoaWQsIGZpZWxkLCB1c2FnZSwgdmFsdWUsIHJlZ3MpOworfQorCisvKgorICogQW5hbHlzZSBhIHJlY2VpdmVkIGZpZWxkLCBhbmQgZmV0Y2ggdGhlIGRhdGEgZnJvbSBpdC4gVGhlIGZpZWxkCisgKiBjb250ZW50IGlzIHN0b3JlZCBmb3IgbmV4dCByZXBvcnQgcHJvY2Vzc2luZyAod2UgZG8gZGlmZmVyZW50aWFsCisgKiByZXBvcnRpbmcgdG8gdGhlIGxheWVyKS4KKyAqLworCitzdGF0aWMgdm9pZCBoaWRfaW5wdXRfZmllbGQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIF9fdTggKmRhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIG47CisJdW5zaWduZWQgY291bnQgPSBmaWVsZC0+cmVwb3J0X2NvdW50OworCXVuc2lnbmVkIG9mZnNldCA9IGZpZWxkLT5yZXBvcnRfb2Zmc2V0OworCXVuc2lnbmVkIHNpemUgPSBmaWVsZC0+cmVwb3J0X3NpemU7CisJX19zMzIgbWluID0gZmllbGQtPmxvZ2ljYWxfbWluaW11bTsKKwlfX3MzMiBtYXggPSBmaWVsZC0+bG9naWNhbF9tYXhpbXVtOworCV9fczMyICp2YWx1ZTsKKworCWlmICghKHZhbHVlID0ga21hbGxvYyhzaXplb2YoX19zMzIpICogY291bnQsIEdGUF9BVE9NSUMpKSkKKwkJcmV0dXJuOworCisJZm9yIChuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKKworCQkJdmFsdWVbbl0gPSBtaW4gPCAwID8gc250bzMyKGV4dHJhY3QoZGF0YSwgb2Zmc2V0ICsgbiAqIHNpemUsIHNpemUpLCBzaXplKSA6CisJCQkJCQkgICAgZXh0cmFjdChkYXRhLCBvZmZzZXQgKyBuICogc2l6ZSwgc2l6ZSk7CisKKwkJCWlmICghKGZpZWxkLT5mbGFncyAmIEhJRF9NQUlOX0lURU1fVkFSSUFCTEUpIC8qIElnbm9yZSByZXBvcnQgaWYgRXJyb3JSb2xsT3ZlciAqLworCQkJICAgICYmIHZhbHVlW25dID49IG1pbiAmJiB2YWx1ZVtuXSA8PSBtYXgKKwkJCSAgICAmJiBmaWVsZC0+dXNhZ2VbdmFsdWVbbl0gLSBtaW5dLmhpZCA9PSBISURfVVBfS0VZQk9BUkQgKyAxKQorCQkJCWdvdG8gZXhpdDsKKwl9CisKKwlmb3IgKG4gPSAwOyBuIDwgY291bnQ7IG4rKykgeworCisJCWlmIChISURfTUFJTl9JVEVNX1ZBUklBQkxFICYgZmllbGQtPmZsYWdzKSB7CisJCQloaWRfcHJvY2Vzc19ldmVudChoaWQsIGZpZWxkLCAmZmllbGQtPnVzYWdlW25dLCB2YWx1ZVtuXSwgcmVncyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChmaWVsZC0+dmFsdWVbbl0gPj0gbWluICYmIGZpZWxkLT52YWx1ZVtuXSA8PSBtYXgKKwkJCSYmIGZpZWxkLT51c2FnZVtmaWVsZC0+dmFsdWVbbl0gLSBtaW5dLmhpZAorCQkJJiYgc2VhcmNoKHZhbHVlLCBmaWVsZC0+dmFsdWVbbl0sIGNvdW50KSkKKwkJCQloaWRfcHJvY2Vzc19ldmVudChoaWQsIGZpZWxkLCAmZmllbGQtPnVzYWdlW2ZpZWxkLT52YWx1ZVtuXSAtIG1pbl0sIDAsIHJlZ3MpOworCisJCWlmICh2YWx1ZVtuXSA+PSBtaW4gJiYgdmFsdWVbbl0gPD0gbWF4CisJCQkmJiBmaWVsZC0+dXNhZ2VbdmFsdWVbbl0gLSBtaW5dLmhpZAorCQkJJiYgc2VhcmNoKGZpZWxkLT52YWx1ZSwgdmFsdWVbbl0sIGNvdW50KSkKKwkJCQloaWRfcHJvY2Vzc19ldmVudChoaWQsIGZpZWxkLCAmZmllbGQtPnVzYWdlW3ZhbHVlW25dIC0gbWluXSwgMSwgcmVncyk7CisJfQorCisJbWVtY3B5KGZpZWxkLT52YWx1ZSwgdmFsdWUsIGNvdW50ICogc2l6ZW9mKF9fczMyKSk7CitleGl0OgorCWtmcmVlKHZhbHVlKTsKK30KKworc3RhdGljIGludCBoaWRfaW5wdXRfcmVwb3J0KGludCB0eXBlLCBzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGhpZF9yZXBvcnRfZW51bSAqcmVwb3J0X2VudW0gPSBoaWQtPnJlcG9ydF9lbnVtICsgdHlwZTsKKwl1OCAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCBsZW4gPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlpbnQgbiwgc2l6ZTsKKworCWlmICghbGVuKSB7CisJCWRiZygiZW1wdHkgcmVwb3J0Iik7CisJCXJldHVybiAtMTsKKwl9CisKKyNpZmRlZiBERUJVR19EQVRBCisJcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18gIjogcmVwb3J0IChzaXplICV1KSAoJXNudW1iZXJlZClcbiIsIGxlbiwgcmVwb3J0X2VudW0tPm51bWJlcmVkID8gIiIgOiAidW4iKTsKKyNlbmRpZgorCisJbiA9IDA7CQkJCS8qIE5vcm1hbGx5IHJlcG9ydCBudW1iZXIgaXMgMCAqLworCWlmIChyZXBvcnRfZW51bS0+bnVtYmVyZWQpIHsJLyogRGV2aWNlIHVzZXMgbnVtYmVyZWQgcmVwb3J0cywgZGF0YVswXSBpcyByZXBvcnQgbnVtYmVyICovCisJCW4gPSAqZGF0YSsrOworCQlsZW4tLTsKKwl9CisKKyNpZmRlZiBERUJVR19EQVRBCisJeworCQlpbnQgaTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18gIjogcmVwb3J0ICVkIChzaXplICV1KSA9ICIsIG4sIGxlbik7CisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJCXByaW50aygiICUwMngiLCBkYXRhW2ldKTsKKwkJcHJpbnRrKCJcbiIpOworCX0KKyNlbmRpZgorCisJaWYgKCEocmVwb3J0ID0gcmVwb3J0X2VudW0tPnJlcG9ydF9pZF9oYXNoW25dKSkgeworCQlkYmcoInVuZGVmaW5lZCByZXBvcnRfaWQgJWQgcmVjZWl2ZWQiLCBuKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXNpemUgPSAoKHJlcG9ydC0+c2l6ZSAtIDEpID4+IDMpICsgMTsKKworCWlmIChsZW4gPCBzaXplKQorCQlkYmcoInJlcG9ydCAlZCBpcyB0b28gc2hvcnQsICglZCA8ICVkKSIsIHJlcG9ydC0+aWQsIGxlbiwgc2l6ZSk7CisKKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSElEREVWKQorCQloaWRkZXZfcmVwb3J0X2V2ZW50KGhpZCwgcmVwb3J0KTsKKworCWZvciAobiA9IDA7IG4gPCByZXBvcnQtPm1heGZpZWxkOyBuKyspCisJCWhpZF9pbnB1dF9maWVsZChoaWQsIHJlcG9ydC0+ZmllbGRbbl0sIGRhdGEsIHJlZ3MpOworCisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKQorCQloaWRpbnB1dF9yZXBvcnRfZXZlbnQoaGlkLCByZXBvcnQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbnB1dCBpbnRlcnJ1cHQgY29tcGxldGlvbiBoYW5kbGVyLgorICovCisKK3N0YXRpYyB2b2lkIGhpZF9pcnFfaW4oc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZQkqaGlkID0gdXJiLT5jb250ZXh0OworCWludAkJCXN0YXR1czsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwkJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KKwkJCWhpZF9pbnB1dF9yZXBvcnQoSElEX0lOUFVUX1JFUE9SVCwgdXJiLCByZWdzKTsKKwkJCWJyZWFrOworCQljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KKwkJY2FzZSAtRU5PRU5UOgorCQljYXNlIC1FUEVSTToKKwkJY2FzZSAtRVNIVVRET1dOOgkvKiB1bnBsdWcgKi8KKwkJY2FzZSAtRUlMU0VROgkJLyogdW5wbHVnIHRpbWVvdXQgb24gdWhjaSAqLworCQkJcmV0dXJuOworCQljYXNlIC1FVElNRURPVVQ6CS8qIE5BSyAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CQkvKiBlcnJvciAqLworCQkJd2FybigiaW5wdXQgaXJxIHN0YXR1cyAlZCByZWNlaXZlZCIsIHVyYi0+c3RhdHVzKTsKKwl9CisKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIFNMQUJfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKQorCQllcnIoImNhbid0IHJlc3VibWl0IGludHIsICVzLSVzL2lucHV0JWQsIHN0YXR1cyAlZCIsCisJCQkJaGlkLT5kZXYtPmJ1cy0+YnVzX25hbWUsIGhpZC0+ZGV2LT5kZXZwYXRoLAorCQkJCWhpZC0+aWZudW0sIHN0YXR1cyk7Cit9CisKKy8qCisgKiBPdXRwdXQgdGhlIGZpZWxkIGludG8gdGhlIHJlcG9ydC4KKyAqLworCitzdGF0aWMgdm9pZCBoaWRfb3V0cHV0X2ZpZWxkKHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBfX3U4ICpkYXRhKQoreworCXVuc2lnbmVkIGNvdW50ID0gZmllbGQtPnJlcG9ydF9jb3VudDsKKwl1bnNpZ25lZCBvZmZzZXQgPSBmaWVsZC0+cmVwb3J0X29mZnNldDsKKwl1bnNpZ25lZCBzaXplID0gZmllbGQtPnJlcG9ydF9zaXplOworCXVuc2lnbmVkIG47CisKKwlmb3IgKG4gPSAwOyBuIDwgY291bnQ7IG4rKykgeworCQlpZiAoZmllbGQtPmxvZ2ljYWxfbWluaW11bSA8IDApCS8qIHNpZ25lZCB2YWx1ZXMgKi8KKwkJCWltcGxlbWVudChkYXRhLCBvZmZzZXQgKyBuICogc2l6ZSwgc2l6ZSwgczMydG9uKGZpZWxkLT52YWx1ZVtuXSwgc2l6ZSkpOworCQllbHNlCQkJCS8qIHVuc2lnbmVkIHZhbHVlcyAqLworCQkJaW1wbGVtZW50KGRhdGEsIG9mZnNldCArIG4gKiBzaXplLCBzaXplLCBmaWVsZC0+dmFsdWVbbl0pOworCX0KK30KKworLyoKKyAqIENyZWF0ZSBhIHJlcG9ydC4KKyAqLworCitzdGF0aWMgdm9pZCBoaWRfb3V0cHV0X3JlcG9ydChzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCBfX3U4ICpkYXRhKQoreworCXVuc2lnbmVkIG47CisKKwlpZiAocmVwb3J0LT5pZCA+IDApCisJCSpkYXRhKysgPSByZXBvcnQtPmlkOworCisJZm9yIChuID0gMDsgbiA8IHJlcG9ydC0+bWF4ZmllbGQ7IG4rKykKKwkJaGlkX291dHB1dF9maWVsZChyZXBvcnQtPmZpZWxkW25dLCBkYXRhKTsKK30KKworLyoKKyAqIFNldCBhIGZpZWxkIHZhbHVlLiBUaGUgcmVwb3J0IHRoaXMgZmllbGQgYmVsb25ncyB0byBoYXMgdG8gYmUKKyAqIGNyZWF0ZWQgYW5kIHRyYW5zZmVycmVkIHRvIHRoZSBkZXZpY2UsIHRvIHNldCB0aGlzIHZhbHVlIGluIHRoZQorICogZGV2aWNlLgorICovCisKK2ludCBoaWRfc2V0X2ZpZWxkKHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCB1bnNpZ25lZCBvZmZzZXQsIF9fczMyIHZhbHVlKQoreworCXVuc2lnbmVkIHNpemUgPSBmaWVsZC0+cmVwb3J0X3NpemU7CisKKwloaWRfZHVtcF9pbnB1dChmaWVsZC0+dXNhZ2UgKyBvZmZzZXQsIHZhbHVlKTsKKworCWlmIChvZmZzZXQgPj0gZmllbGQtPnJlcG9ydF9jb3VudCkgeworCQlkYmcoIm9mZnNldCAoJWQpIGV4Y2VlZHMgcmVwb3J0X2NvdW50ICglZCkiLCBvZmZzZXQsIGZpZWxkLT5yZXBvcnRfY291bnQpOworCQloaWRfZHVtcF9maWVsZChmaWVsZCwgOCk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGZpZWxkLT5sb2dpY2FsX21pbmltdW0gPCAwKSB7CisJCWlmICh2YWx1ZSAhPSBzbnRvMzIoczMydG9uKHZhbHVlLCBzaXplKSwgc2l6ZSkpIHsKKwkJCWRiZygidmFsdWUgJWQgaXMgb3V0IG9mIHJhbmdlIiwgdmFsdWUpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCWZpZWxkLT52YWx1ZVtvZmZzZXRdID0gdmFsdWU7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGaW5kIGEgcmVwb3J0IGZpZWxkIHdpdGggYSBzcGVjaWZpZWQgSElEIHVzYWdlLgorICovCisKK3N0cnVjdCBoaWRfZmllbGQgKmhpZF9maW5kX2ZpZWxkX2J5X3VzYWdlKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIF9fdTMyIHdhbnRlZF91c2FnZSwgaW50IHR5cGUpCit7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlpbnQgaTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVwb3J0LCAmaGlkLT5yZXBvcnRfZW51bVt0eXBlXS5yZXBvcnRfbGlzdCwgbGlzdCkKKwkJZm9yIChpID0gMDsgaSA8IHJlcG9ydC0+bWF4ZmllbGQ7IGkrKykKKwkJCWlmIChyZXBvcnQtPmZpZWxkW2ldLT5sb2dpY2FsID09IHdhbnRlZF91c2FnZSkKKwkJCQlyZXR1cm4gcmVwb3J0LT5maWVsZFtpXTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBoaWRfc3VibWl0X291dChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisKKwlyZXBvcnQgPSBoaWQtPm91dFtoaWQtPm91dHRhaWxdOworCisJaGlkX291dHB1dF9yZXBvcnQocmVwb3J0LCBoaWQtPm91dGJ1Zik7CisJaGlkLT51cmJvdXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAoKHJlcG9ydC0+c2l6ZSAtIDEpID4+IDMpICsgMSArIChyZXBvcnQtPmlkID4gMCk7CisJaGlkLT51cmJvdXQtPmRldiA9IGhpZC0+ZGV2OworCisJZGJnKCJzdWJtaXR0aW5nIG91dCB1cmIiKTsKKworCWlmICh1c2Jfc3VibWl0X3VyYihoaWQtPnVyYm91dCwgR0ZQX0FUT01JQykpIHsKKwkJZXJyKCJ1c2Jfc3VibWl0X3VyYihvdXQpIGZhaWxlZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGlkX3N1Ym1pdF9jdHJsKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwl1bnNpZ25lZCBjaGFyIGRpcjsKKwlpbnQgbGVuOworCisJcmVwb3J0ID0gaGlkLT5jdHJsW2hpZC0+Y3RybHRhaWxdLnJlcG9ydDsKKwlkaXIgPSBoaWQtPmN0cmxbaGlkLT5jdHJsdGFpbF0uZGlyOworCisJbGVuID0gKChyZXBvcnQtPnNpemUgLSAxKSA+PiAzKSArIDEgKyAocmVwb3J0LT5pZCA+IDApOworCWlmIChkaXIgPT0gVVNCX0RJUl9PVVQpIHsKKwkJaGlkX291dHB1dF9yZXBvcnQocmVwb3J0LCBoaWQtPmN0cmxidWYpOworCQloaWQtPnVyYmN0cmwtPnBpcGUgPSB1c2Jfc25kY3RybHBpcGUoaGlkLT5kZXYsIDApOworCQloaWQtPnVyYmN0cmwtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBsZW47CisJfSBlbHNlIHsKKwkJaW50IG1heHBhY2tldCwgcGFkbGVuOworCisJCWhpZC0+dXJiY3RybC0+cGlwZSA9IHVzYl9yY3ZjdHJscGlwZShoaWQtPmRldiwgMCk7CisJCW1heHBhY2tldCA9IHVzYl9tYXhwYWNrZXQoaGlkLT5kZXYsIGhpZC0+dXJiY3RybC0+cGlwZSwgMCk7CisJCWlmIChtYXhwYWNrZXQgPiAwKSB7CisJCQlwYWRsZW4gPSAobGVuICsgbWF4cGFja2V0IC0gMSkgLyBtYXhwYWNrZXQ7CisJCQlwYWRsZW4gKj0gbWF4cGFja2V0OworCQkJaWYgKHBhZGxlbiA+IEhJRF9CVUZGRVJfU0laRSkKKwkJCQlwYWRsZW4gPSBISURfQlVGRkVSX1NJWkU7CisJCX0gZWxzZQorCQkJcGFkbGVuID0gMDsKKwkJaGlkLT51cmJjdHJsLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gcGFkbGVuOworCX0KKwloaWQtPnVyYmN0cmwtPmRldiA9IGhpZC0+ZGV2OworCisJaGlkLT5jci0+YlJlcXVlc3RUeXBlID0gVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgZGlyOworCWhpZC0+Y3ItPmJSZXF1ZXN0ID0gKGRpciA9PSBVU0JfRElSX09VVCkgPyBISURfUkVRX1NFVF9SRVBPUlQgOiBISURfUkVRX0dFVF9SRVBPUlQ7CisJaGlkLT5jci0+d1ZhbHVlID0gY3B1X3RvX2xlMTYoKChyZXBvcnQtPnR5cGUgKyAxKSA8PCA4KSB8IHJlcG9ydC0+aWQpOworCWhpZC0+Y3ItPndJbmRleCA9IGNwdV90b19sZTE2KGhpZC0+aWZudW0pOworCWhpZC0+Y3ItPndMZW5ndGggPSBjcHVfdG9fbGUxNihsZW4pOworCisJZGJnKCJzdWJtaXR0aW5nIGN0cmwgdXJiOiAlcyB3VmFsdWU9MHglMDR4IHdJbmRleD0weCUwNHggd0xlbmd0aD0ldSIsCisJCWhpZC0+Y3ItPmJSZXF1ZXN0ID09IEhJRF9SRVFfU0VUX1JFUE9SVCA/ICJTZXRfUmVwb3J0IiA6ICJHZXRfUmVwb3J0IiwKKwkJaGlkLT5jci0+d1ZhbHVlLCBoaWQtPmNyLT53SW5kZXgsIGhpZC0+Y3ItPndMZW5ndGgpOworCisJaWYgKHVzYl9zdWJtaXRfdXJiKGhpZC0+dXJiY3RybCwgR0ZQX0FUT01JQykpIHsKKwkJZXJyKCJ1c2Jfc3VibWl0X3VyYihjdHJsKSBmYWlsZWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogT3V0cHV0IGludGVycnVwdCBjb21wbGV0aW9uIGhhbmRsZXIuCisgKi8KKworc3RhdGljIHZvaWQgaGlkX2lycV9vdXQoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHVucGx1ZyA9IDA7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJCWNhc2UgMDoJCQkvKiBzdWNjZXNzICovCisJCWNhc2UgLUVTSFVURE9XTjoJLyogdW5wbHVnICovCisJCWNhc2UgLUVJTFNFUToJCS8qIHVucGx1ZyB0aW1lb3V0IG9uIHVoY2kgKi8KKwkJCXVucGx1ZyA9IDE7CisJCWNhc2UgLUVDT05OUkVTRVQ6CS8qIHVubGluayAqLworCQljYXNlIC1FTk9FTlQ6CisJCQlicmVhazsKKwkJZGVmYXVsdDoJCS8qIGVycm9yICovCisJCQl3YXJuKCJvdXRwdXQgaXJxIHN0YXR1cyAlZCByZWNlaXZlZCIsIHVyYi0+c3RhdHVzKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGlkLT5vdXRsb2NrLCBmbGFncyk7CisKKwlpZiAodW5wbHVnKQorCQloaWQtPm91dHRhaWwgPSBoaWQtPm91dGhlYWQ7CisJZWxzZQorCQloaWQtPm91dHRhaWwgPSAoaGlkLT5vdXR0YWlsICsgMSkgJiAoSElEX09VVFBVVF9GSUZPX1NJWkUgLSAxKTsKKworCWlmIChoaWQtPm91dGhlYWQgIT0gaGlkLT5vdXR0YWlsKSB7CisJCWlmIChoaWRfc3VibWl0X291dChoaWQpKSB7CisJCQljbGVhcl9iaXQoSElEX09VVF9SVU5OSU5HLCAmaGlkLT5pb2ZsKTs7CisJCQl3YWtlX3VwKCZoaWQtPndhaXQpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhpZC0+b3V0bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJY2xlYXJfYml0KEhJRF9PVVRfUlVOTklORywgJmhpZC0+aW9mbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGlkLT5vdXRsb2NrLCBmbGFncyk7CisJd2FrZV91cCgmaGlkLT53YWl0KTsKK30KKworLyoKKyAqIENvbnRyb2wgcGlwZSBjb21wbGV0aW9uIGhhbmRsZXIuCisgKi8KKworc3RhdGljIHZvaWQgaGlkX2N0cmwoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHVucGx1ZyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGlkLT5jdHJsbG9jaywgZmxhZ3MpOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCQljYXNlIDA6CQkJLyogc3VjY2VzcyAqLworCQkJaWYgKGhpZC0+Y3RybFtoaWQtPmN0cmx0YWlsXS5kaXIgPT0gVVNCX0RJUl9JTikKKwkJCQloaWRfaW5wdXRfcmVwb3J0KGhpZC0+Y3RybFtoaWQtPmN0cmx0YWlsXS5yZXBvcnQtPnR5cGUsIHVyYiwgcmVncyk7CisJCWNhc2UgLUVTSFVURE9XTjoJLyogdW5wbHVnICovCisJCWNhc2UgLUVJTFNFUToJCS8qIHVucGx1ZyB0aW1lY3RybCBvbiB1aGNpICovCisJCQl1bnBsdWcgPSAxOworCQljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KKwkJY2FzZSAtRU5PRU5UOgorCQljYXNlIC1FUElQRToJCS8qIHJlcG9ydCBub3QgYXZhaWxhYmxlICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoJCS8qIGVycm9yICovCisJCQl3YXJuKCJjdHJsIHVyYiBzdGF0dXMgJWQgcmVjZWl2ZWQiLCB1cmItPnN0YXR1cyk7CisJfQorCisJaWYgKHVucGx1ZykKKwkJaGlkLT5jdHJsdGFpbCA9IGhpZC0+Y3RybGhlYWQ7CisJZWxzZQorCQloaWQtPmN0cmx0YWlsID0gKGhpZC0+Y3RybHRhaWwgKyAxKSAmIChISURfQ09OVFJPTF9GSUZPX1NJWkUgLSAxKTsKKworCWlmIChoaWQtPmN0cmxoZWFkICE9IGhpZC0+Y3RybHRhaWwpIHsKKwkJaWYgKGhpZF9zdWJtaXRfY3RybChoaWQpKSB7CisJCQljbGVhcl9iaXQoSElEX0NUUkxfUlVOTklORywgJmhpZC0+aW9mbCk7CisJCQl3YWtlX3VwKCZoaWQtPndhaXQpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCWNsZWFyX2JpdChISURfQ1RSTF9SVU5OSU5HLCAmaGlkLT5pb2ZsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWQtPmN0cmxsb2NrLCBmbGFncyk7CisJd2FrZV91cCgmaGlkLT53YWl0KTsKK30KKwordm9pZCBoaWRfc3VibWl0X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCB1bnNpZ25lZCBjaGFyIGRpcikKK3sKKwlpbnQgaGVhZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS19OT0dFVCkgJiYgZGlyID09IFVTQl9ESVJfSU4pCisJCXJldHVybjsKKworCWlmIChoaWQtPnVyYm91dCAmJiBkaXIgPT0gVVNCX0RJUl9PVVQgJiYgcmVwb3J0LT50eXBlID09IEhJRF9PVVRQVVRfUkVQT1JUKSB7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmhpZC0+b3V0bG9jaywgZmxhZ3MpOworCisJCWlmICgoaGVhZCA9IChoaWQtPm91dGhlYWQgKyAxKSAmIChISURfT1VUUFVUX0ZJRk9fU0laRSAtIDEpKSA9PSBoaWQtPm91dHRhaWwpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhpZC0+b3V0bG9jaywgZmxhZ3MpOworCQkJd2Fybigib3V0cHV0IHF1ZXVlIGZ1bGwiKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWhpZC0+b3V0W2hpZC0+b3V0aGVhZF0gPSByZXBvcnQ7CisJCWhpZC0+b3V0aGVhZCA9IGhlYWQ7CisKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhJRF9PVVRfUlVOTklORywgJmhpZC0+aW9mbCkpCisJCQlpZiAoaGlkX3N1Ym1pdF9vdXQoaGlkKSkKKwkJCQljbGVhcl9iaXQoSElEX09VVF9SVU5OSU5HLCAmaGlkLT5pb2ZsKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWQtPm91dGxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZoaWQtPmN0cmxsb2NrLCBmbGFncyk7CisKKwlpZiAoKGhlYWQgPSAoaGlkLT5jdHJsaGVhZCArIDEpICYgKEhJRF9DT05UUk9MX0ZJRk9fU0laRSAtIDEpKSA9PSBoaWQtPmN0cmx0YWlsKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKKwkJd2FybigiY29udHJvbCBxdWV1ZSBmdWxsIik7CisJCXJldHVybjsKKwl9CisKKwloaWQtPmN0cmxbaGlkLT5jdHJsaGVhZF0ucmVwb3J0ID0gcmVwb3J0OworCWhpZC0+Y3RybFtoaWQtPmN0cmxoZWFkXS5kaXIgPSBkaXI7CisJaGlkLT5jdHJsaGVhZCA9IGhlYWQ7CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSElEX0NUUkxfUlVOTklORywgJmhpZC0+aW9mbCkpCisJCWlmIChoaWRfc3VibWl0X2N0cmwoaGlkKSkKKwkJCWNsZWFyX2JpdChISURfQ1RSTF9SVU5OSU5HLCAmaGlkLT5pb2ZsKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKK30KKworaW50IGhpZF93YWl0X2lvKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJaWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQoaGlkLT53YWl0LCAoIXRlc3RfYml0KEhJRF9DVFJMX1JVTk5JTkcsICZoaWQtPmlvZmwpICYmCisJCQkJCSF0ZXN0X2JpdChISURfT1VUX1JVTk5JTkcsICZoaWQtPmlvZmwpKSwKKwkJCQkJMTAqSFopKSB7CisJCWRiZygidGltZW91dCB3YWl0aW5nIGZvciBjdHJsIG9yIG91dCBxdWV1ZSB0byBjbGVhciIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGlkX2dldF9jbGFzc19kZXNjcmlwdG9yKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBpZm51bSwKKwkJdW5zaWduZWQgY2hhciB0eXBlLCB2b2lkICpidWYsIGludCBzaXplKQoreworCWludCByZXN1bHQsIHJldHJpZXMgPSA0OworCisJbWVtc2V0KGJ1ZiwwLHNpemUpOwkvLyBNYWtlIHN1cmUgd2UgcGFyc2UgcmVhbGx5IHJlY2VpdmVkIGRhdGEKKworCWRvIHsKKwkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCisJCQkJVVNCX1JFUV9HRVRfREVTQ1JJUFRPUiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfSU4sCisJCQkJKHR5cGUgPDwgOCksIGlmbnVtLCBidWYsIHNpemUsIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwkJcmV0cmllcy0tOworCX0gd2hpbGUgKHJlc3VsdCA8IHNpemUgJiYgcmV0cmllcyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworaW50IGhpZF9vcGVuKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJaWYgKGhpZC0+b3BlbisrKQorCQlyZXR1cm4gMDsKKworCWhpZC0+dXJiaW4tPmRldiA9IGhpZC0+ZGV2OworCisJaWYgKHVzYl9zdWJtaXRfdXJiKGhpZC0+dXJiaW4sIEdGUF9LRVJORUwpKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCit2b2lkIGhpZF9jbG9zZShzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCWlmICghLS1oaWQtPm9wZW4pCisJCXVzYl9raWxsX3VyYihoaWQtPnVyYmluKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgYWxsIHJlcG9ydHMKKyAqLworCit2b2lkIGhpZF9pbml0X3JlcG9ydHMoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCWludCBlcnIsIHJldDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVwb3J0LCAmaGlkLT5yZXBvcnRfZW51bVtISURfSU5QVVRfUkVQT1JUXS5yZXBvcnRfbGlzdCwgbGlzdCkgeworCQlpbnQgc2l6ZSA9ICgocmVwb3J0LT5zaXplIC0gMSkgPj4gMykgKyAxICsgaGlkLT5yZXBvcnRfZW51bVtISURfSU5QVVRfUkVQT1JUXS5udW1iZXJlZDsKKwkJaWYgKHNpemUgPiBISURfQlVGRkVSX1NJWkUpIHNpemUgPSBISURfQlVGRkVSX1NJWkU7CisJCWlmIChzaXplID4gaGlkLT51cmJpbi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkKKwkJCWhpZC0+dXJiaW4tPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBzaXplOworCQloaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9JTik7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXBvcnQsICZoaWQtPnJlcG9ydF9lbnVtW0hJRF9GRUFUVVJFX1JFUE9SVF0ucmVwb3J0X2xpc3QsIGxpc3QpCisJCWhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcmVwb3J0LCBVU0JfRElSX0lOKTsKKworCWVyciA9IDA7CisJcmV0ID0gaGlkX3dhaXRfaW8oaGlkKTsKKwl3aGlsZSAocmV0KSB7CisJCWVyciB8PSByZXQ7CisJCWlmICh0ZXN0X2JpdChISURfQ1RSTF9SVU5OSU5HLCAmaGlkLT5pb2ZsKSkKKwkJCXVzYl9raWxsX3VyYihoaWQtPnVyYmN0cmwpOworCQlpZiAodGVzdF9iaXQoSElEX09VVF9SVU5OSU5HLCAmaGlkLT5pb2ZsKSkKKwkJCXVzYl9raWxsX3VyYihoaWQtPnVyYm91dCk7CisJCXJldCA9IGhpZF93YWl0X2lvKGhpZCk7CisJfQorCisJaWYgKGVycikKKwkJd2FybigidGltZW91dCBpbml0aWFsaXppbmcgcmVwb3J0c1xuIik7CisKKwl1c2JfY29udHJvbF9tc2coaGlkLT5kZXYsIHVzYl9zbmRjdHJscGlwZShoaWQtPmRldiwgMCksCisJCUhJRF9SRVFfU0VUX0lETEUsIFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMCwKKwkJaGlkLT5pZm51bSwgTlVMTCwgMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworfQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfV0FDT00JCTB4MDU2YQorI2RlZmluZSBVU0JfREVWSUNFX0lEX1dBQ09NX1BFTlBBUlRORVIJMHgwMDAwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfV0FDT01fR1JBUEhJUkUJMHgwMDEwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TCTB4MDAyMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1dBQ09NX1BMCQkweDAwMzAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9XQUNPTV9JTlRVT1MyCTB4MDA0MAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1dBQ09NX1ZPTElUTwkweDAwNjAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9XQUNPTV9QVFUJCTB4MDAwMworCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfS0JHRUFSCQkweDA4NGUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9LQkdFQVJfSkFNU1RVRElPCTB4MTAwMQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQUlQVEVLCQkweDA4Y2EKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BSVBURUtfMDEJCTB4MDAwMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FJUFRFS18xMAkJMHgwMDEwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzIwCQkweDAwMjAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BSVBURUtfMjEJCTB4MDAyMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FJUFRFS18yMgkJMHgwMDIyCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzIzCQkweDAwMjMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BSVBURUtfMjQJCTB4MDAyNAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfR1JJRkZJTgkJMHgwNzdkCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUE9XRVJNQVRFCQkweDA0MTAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9TT1VOREtOT0IJCTB4MDRBQQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQVRFTgkJMHgwNTU3CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVRFTl9VQzEwMEtNCTB4MjAwNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FURU5fQ1MxMjRVCTB4MjIwMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FURU5fMlBPUlRLVk0JMHgyMjA0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVRFTl80UE9SVEtWTQkweDIyMDUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BVEVOXzRQT1JUS1ZNQwkweDIyMDgKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1RPUE1BWAkJMHgwNjYzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVE9QTUFYX0NPQlJBUEFECTB4MDEwMworCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfSEFQUAkJMHgwNzhiCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVUdDSV9EUklWSU5HCTB4MDAxMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1VHQ0lfRkxZSU5HCTB4MDAyMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1VHQ0lfRklHSFRJTkcJMHgwMDMwCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9NR0UJCTB4MDQ2MworI2RlZmluZSBVU0JfREVWSUNFX0lEX01HRV9VUFMJCTB4ZmZmZgorI2RlZmluZSBVU0JfREVWSUNFX0lEX01HRV9VUFMxCQkweDAwMDEKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX09OVFJBSwkJMHgwYTA3CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMAkweDAwNjQKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1RBTkdUT1AJCTB4MGQzZAorI2RlZmluZSBVU0JfREVWSUNFX0lEX1RBTkdUT1BfVVNCUFMyCTB4MDAwMQorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfRVNTRU5USUFMX1JFQUxJVFkJMHgwZDdmCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfRVNTRU5USUFMX1JFQUxJVFlfUDUgMHgwMTAwCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BNFRFQ0gJCTB4MDlkYQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0E0VEVDSF9XQ1AzMlBVCTB4MDAwNgorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQ1lQUkVTUwkJMHgwNGI0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19NT1VTRQkweDAwMDEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9DWVBSRVNTX0hJRENPTQkweDU1MDAKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0JFUktTSElSRQkJMHgwYzk4CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQkVSS1NISVJFX1BDV0QJMHgxMTQwCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9BTFBTCQkweDA0MzMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9JQk1fR0FNRVBBRAkweDExMDEKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1NBSVRFSwkJMHgwNmEzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfU0FJVEVLX1JVTUJMRVBBRAkweGZmMTcKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX05FQwkJMHgwNzNlCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTkVDX1VTQl9HQU1FX1BBRAkweDAzMDEKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0NISUMJCTB4MDVmZQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0NISUNfR0FNRVBBRAkweDAwMTQKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0dMQUIJCTB4MDZjMgorI2RlZmluZSBVU0JfREVWSUNFX0lEXzRfUEhJREdFVFNFUlZPXzMwCTB4MDAzOAorI2RlZmluZSBVU0JfREVWSUNFX0lEXzFfUEhJREdFVFNFUlZPXzMwCTB4MDAzOQorI2RlZmluZSBVU0JfREVWSUNFX0lEXzhfOF84X0lGX0tJVAkweDAwNDUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF8wXzBfNF9JRl9LSVQJMHgwMDQwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfMF84XzhfSUZfS0lUCTB4MDA1MworCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfV0lTRUdST1VQCQkweDA5MjUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF8xX1BISURHRVRTRVJWT18yMAkweDgxMDEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF80X1BISURHRVRTRVJWT18yMAkweDgxMDQKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0NPREVNRVJDUwkJMHgwN2MwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ09ERU1FUkNTX0lPVzQwCTB4MTUwMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0NPREVNRVJDU19JT1cyNAkweDE1MDEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9DT0RFTUVSQ1NfSU9XNDgJMHgxNTAyCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ09ERU1FUkNTX0lPVzI4CTB4MTUwMworCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfREVMT1JNRQkJMHgxMTYzCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfREVMT1JNRV9FQVJUSE1BVEUgMHgwMTAwCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9NQ0MJCTB4MDlkYgorI2RlZmluZSBVU0JfREVWSUNFX0lEX01DQ19QTUQxMDI0TFMJMHgwMDc2CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUNDX1BNRDEyMDhMUwkweDAwN2EKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0NISUNPTlkJCTB4MDRmMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0NISUNPTllfVVNCSFVCX0tCCTB4MDEwMAorCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQlRDCQkweDA0NmUKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9CVENfS0VZQk9BUkQJMHg1MzAzCisKKworLyoKKyAqIEFscGhhYmV0aWNhbGx5IHNvcnRlZCBibGFja2xpc3QgYnkgcXVpcmsgdHlwZS4KKyAqLworCitzdGF0aWMgc3RydWN0IGhpZF9ibGFja2xpc3QgeworCV9fdTE2IGlkVmVuZG9yOworCV9fdTE2IGlkUHJvZHVjdDsKKwl1bnNpZ25lZCBxdWlya3M7Cit9IGhpZF9ibGFja2xpc3RbXSA9IHsKKworCXsgVVNCX1ZFTkRPUl9JRF9BSVBURUssIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzAxLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMTAsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfQUlQVEVLLCBVU0JfREVWSUNFX0lEX0FJUFRFS18yMCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9BSVBURUssIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzIxLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjIsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfQUlQVEVLLCBVU0JfREVWSUNFX0lEX0FJUFRFS18yMywgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9BSVBURUssIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzI0LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0JFUktTSElSRSwgVVNCX0RFVklDRV9JRF9CRVJLU0hJUkVfUENXRCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9DT0RFTUVSQ1MsIFVTQl9ERVZJQ0VfSURfQ09ERU1FUkNTX0lPVzQwLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0NPREVNRVJDUywgVVNCX0RFVklDRV9JRF9DT0RFTUVSQ1NfSU9XMjQsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfQ09ERU1FUkNTLCBVU0JfREVWSUNFX0lEX0NPREVNRVJDU19JT1c0OCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9DT0RFTUVSQ1MsIFVTQl9ERVZJQ0VfSURfQ09ERU1FUkNTX0lPVzI4LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19ISURDT00sIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfREVMT1JNRSwgVVNCX0RFVklDRV9JRF9ERUxPUk1FX0VBUlRITUFURSwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9FU1NFTlRJQUxfUkVBTElUWSwgVVNCX0RFVklDRV9JRF9FU1NFTlRJQUxfUkVBTElUWV9QNSwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEXzRfUEhJREdFVFNFUlZPXzMwLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfMV9QSElER0VUU0VSVk9fMzAsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF84XzhfOF9JRl9LSVQsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF8wXzBfNF9JRl9LSVQsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF8wXzhfOF9JRl9LSVQsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR1JJRkZJTiwgVVNCX0RFVklDRV9JRF9QT1dFUk1BVEUsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR1JJRkZJTiwgVVNCX0RFVklDRV9JRF9TT1VOREtOT0IsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfS0JHRUFSLCBVU0JfREVWSUNFX0lEX0tCR0VBUl9KQU1TVFVESU8sIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfTUNDLCBVU0JfREVWSUNFX0lEX01DQ19QTUQxMDI0TFMsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfTUNDLCBVU0JfREVWSUNFX0lEX01DQ19QTUQxMjA4TFMsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfTUdFLCBVU0JfREVWSUNFX0lEX01HRV9VUFMsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfTUdFLCBVU0JfREVWSUNFX0lEX01HRV9VUFMxLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwICsgMTAwLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwICsgMjAwLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwICsgMzAwLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwICsgNDAwLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwICsgNTAwLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX1BFTlBBUlRORVIsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fR1JBUEhJUkUsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fR1JBUEhJUkUgKyAxLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0dSQVBISVJFICsgMiwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9HUkFQSElSRSArIDMsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fR1JBUEhJUkUgKyA0LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUywgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9JTlRVT1MgKyAxLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUyArIDIsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TICsgMywgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9JTlRVT1MgKyA0LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX1BMLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX1BMICsgMSwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9QTCArIDIsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fUEwgKyAzLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX1BMICsgNCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9QTCArIDUsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TMiArIDEsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TMiArIDIsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TMiArIDMsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TMiArIDQsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TMiArIDUsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TMiArIDcsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fVk9MSVRPLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX1BUVSwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVAsIFVTQl9ERVZJQ0VfSURfNF9QSElER0VUU0VSVk9fMjAsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfV0lTRUdST1VQLCBVU0JfREVWSUNFX0lEXzFfUEhJREdFVFNFUlZPXzIwLCBISURfUVVJUktfSUdOT1JFIH0sCisKKwl7IFVTQl9WRU5ET1JfSURfQVRFTiwgVVNCX0RFVklDRV9JRF9BVEVOX1VDMTAwS00sIEhJRF9RVUlSS19OT0dFVCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9BVEVOLCBVU0JfREVWSUNFX0lEX0FURU5fQ1MxMjRVLCBISURfUVVJUktfTk9HRVQgfSwKKwl7IFVTQl9WRU5ET1JfSURfQVRFTiwgVVNCX0RFVklDRV9JRF9BVEVOXzJQT1JUS1ZNLCBISURfUVVJUktfTk9HRVQgfSwKKwl7IFVTQl9WRU5ET1JfSURfQVRFTiwgVVNCX0RFVklDRV9JRF9BVEVOXzRQT1JUS1ZNLCBISURfUVVJUktfTk9HRVQgfSwKKwl7IFVTQl9WRU5ET1JfSURfQVRFTiwgVVNCX0RFVklDRV9JRF9BVEVOXzRQT1JUS1ZNQywgSElEX1FVSVJLX05PR0VUIH0sCisJeyBVU0JfVkVORE9SX0lEX0JUQywgVVNCX0RFVklDRV9JRF9CVENfS0VZQk9BUkQsIEhJRF9RVUlSS19OT0dFVH0sCisJeyBVU0JfVkVORE9SX0lEX0NISUNPTlksIFVTQl9ERVZJQ0VfSURfQ0hJQ09OWV9VU0JIVUJfS0IsIEhJRF9RVUlSS19OT0dFVH0sCisJeyBVU0JfVkVORE9SX0lEX1RBTkdUT1AsIFVTQl9ERVZJQ0VfSURfVEFOR1RPUF9VU0JQUzIsIEhJRF9RVUlSS19OT0dFVCB9LAorCisJeyBVU0JfVkVORE9SX0lEX0E0VEVDSCwgVVNCX0RFVklDRV9JRF9BNFRFQ0hfV0NQMzJQVSwgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzcgfSwKKwl7IFVTQl9WRU5ET1JfSURfQ1lQUkVTUywgVVNCX0RFVklDRV9JRF9DWVBSRVNTX01PVVNFLCBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfNSB9LAorCisJeyBVU0JfVkVORE9SX0lEX0FMUFMsIFVTQl9ERVZJQ0VfSURfSUJNX0dBTUVQQUQsIEhJRF9RVUlSS19CQURQQUQgfSwKKwl7IFVTQl9WRU5ET1JfSURfQ0hJQywgVVNCX0RFVklDRV9JRF9DSElDX0dBTUVQQUQsIEhJRF9RVUlSS19CQURQQUQgfSwKKwl7IFVTQl9WRU5ET1JfSURfSEFQUCwgVVNCX0RFVklDRV9JRF9VR0NJX0RSSVZJTkcsIEhJRF9RVUlSS19CQURQQUQgfCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKKwl7IFVTQl9WRU5ET1JfSURfSEFQUCwgVVNCX0RFVklDRV9JRF9VR0NJX0ZMWUlORywgSElEX1FVSVJLX0JBRFBBRCB8IEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAorCXsgVVNCX1ZFTkRPUl9JRF9IQVBQLCBVU0JfREVWSUNFX0lEX1VHQ0lfRklHSFRJTkcsIEhJRF9RVUlSS19CQURQQUQgfCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKKwl7IFVTQl9WRU5ET1JfSURfTkVDLCBVU0JfREVWSUNFX0lEX05FQ19VU0JfR0FNRV9QQUQsIEhJRF9RVUlSS19CQURQQUQgfSwKKwl7IFVTQl9WRU5ET1JfSURfU0FJVEVLLCBVU0JfREVWSUNFX0lEX1NBSVRFS19SVU1CTEVQQUQsIEhJRF9RVUlSS19CQURQQUQgfSwKKwl7IFVTQl9WRU5ET1JfSURfVE9QTUFYLCBVU0JfREVWSUNFX0lEX1RPUE1BWF9DT0JSQVBBRCwgSElEX1FVSVJLX0JBRFBBRCB9LAorCisJeyAwLCAwIH0KK307CisKK3N0YXRpYyBpbnQgaGlkX2FsbG9jX2J1ZmZlcnMoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlpZiAoIShoaWQtPmluYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIEhJRF9CVUZGRVJfU0laRSwgU0xBQl9BVE9NSUMsICZoaWQtPmluYnVmX2RtYSkpKQorCQlyZXR1cm4gLTE7CisJaWYgKCEoaGlkLT5vdXRidWYgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgSElEX0JVRkZFUl9TSVpFLCBTTEFCX0FUT01JQywgJmhpZC0+b3V0YnVmX2RtYSkpKQorCQlyZXR1cm4gLTE7CisJaWYgKCEoaGlkLT5jciA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCBzaXplb2YoKihoaWQtPmNyKSksIFNMQUJfQVRPTUlDLCAmaGlkLT5jcl9kbWEpKSkKKwkJcmV0dXJuIC0xOworCWlmICghKGhpZC0+Y3RybGJ1ZiA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCBISURfQlVGRkVSX1NJWkUsIFNMQUJfQVRPTUlDLCAmaGlkLT5jdHJsYnVmX2RtYSkpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGlkX2ZyZWVfYnVmZmVycyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCWlmIChoaWQtPmluYnVmKQorCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCBISURfQlVGRkVSX1NJWkUsIGhpZC0+aW5idWYsIGhpZC0+aW5idWZfZG1hKTsKKwlpZiAoaGlkLT5vdXRidWYpCisJCXVzYl9idWZmZXJfZnJlZShkZXYsIEhJRF9CVUZGRVJfU0laRSwgaGlkLT5vdXRidWYsIGhpZC0+b3V0YnVmX2RtYSk7CisJaWYgKGhpZC0+Y3IpCisJCXVzYl9idWZmZXJfZnJlZShkZXYsIHNpemVvZigqKGhpZC0+Y3IpKSwgaGlkLT5jciwgaGlkLT5jcl9kbWEpOworCWlmIChoaWQtPmN0cmxidWYpCisJCXVzYl9idWZmZXJfZnJlZShkZXYsIEhJRF9CVUZGRVJfU0laRSwgaGlkLT5jdHJsYnVmLCBoaWQtPmN0cmxidWZfZG1hKTsKK30KKworc3RhdGljIHN0cnVjdCBoaWRfZGV2aWNlICp1c2JfaGlkX2NvbmZpZ3VyZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAoaW50Zik7CisJc3RydWN0IGhpZF9kZXNjcmlwdG9yICpoZGVzYzsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkOworCXVuc2lnbmVkIHF1aXJrcyA9IDAsIHJzaXplID0gMDsKKwljaGFyICpidWYsICpyZGVzYzsKKwlpbnQgbjsKKworCWZvciAobiA9IDA7IGhpZF9ibGFja2xpc3Rbbl0uaWRWZW5kb3I7IG4rKykKKwkJaWYgKChoaWRfYmxhY2tsaXN0W25dLmlkVmVuZG9yID09IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikpICYmCisJCQkoaGlkX2JsYWNrbGlzdFtuXS5pZFByb2R1Y3QgPT0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpKQorCQkJCXF1aXJrcyA9IGhpZF9ibGFja2xpc3Rbbl0ucXVpcmtzOworCisJaWYgKHF1aXJrcyAmIEhJRF9RVUlSS19JR05PUkUpCisJCXJldHVybiBOVUxMOworCisJaWYgKHVzYl9nZXRfZXh0cmFfZGVzY3JpcHRvcihpbnRlcmZhY2UsIEhJRF9EVF9ISUQsICZoZGVzYykgJiYgKCghaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHMpIHx8CisJCXVzYl9nZXRfZXh0cmFfZGVzY3JpcHRvcigmaW50ZXJmYWNlLT5lbmRwb2ludFswXSwgSElEX0RUX0hJRCwgJmhkZXNjKSkpIHsKKwkJCWRiZygiY2xhc3MgZGVzY3JpcHRvciBub3QgcHJlc2VudFxuIik7CisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlmb3IgKG4gPSAwOyBuIDwgaGRlc2MtPmJOdW1EZXNjcmlwdG9yczsgbisrKQorCQlpZiAoaGRlc2MtPmRlc2Nbbl0uYkRlc2NyaXB0b3JUeXBlID09IEhJRF9EVF9SRVBPUlQpCisJCQlyc2l6ZSA9IGxlMTZfdG9fY3B1KGhkZXNjLT5kZXNjW25dLndEZXNjcmlwdG9yTGVuZ3RoKTsKKworCWlmICghcnNpemUgfHwgcnNpemUgPiBISURfTUFYX0RFU0NSSVBUT1JfU0laRSkgeworCQlkYmcoIndlaXJkIHNpemUgb2YgcmVwb3J0IGRlc2NyaXB0b3IgKCV1KSIsIHJzaXplKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKCEocmRlc2MgPSBrbWFsbG9jKHJzaXplLCBHRlBfS0VSTkVMKSkpIHsKKwkJZGJnKCJjb3VsZG4ndCBhbGxvY2F0ZSByZGVzYyBtZW1vcnkiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKChuID0gaGlkX2dldF9jbGFzc19kZXNjcmlwdG9yKGRldiwgaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsIEhJRF9EVF9SRVBPUlQsIHJkZXNjLCByc2l6ZSkpIDwgMCkgeworCQlkYmcoInJlYWRpbmcgcmVwb3J0IGRlc2NyaXB0b3IgZmFpbGVkIik7CisJCWtmcmVlKHJkZXNjKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisjaWZkZWYgREVCVUdfREFUQQorCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fICI6IHJlcG9ydCBkZXNjcmlwdG9yIChzaXplICV1LCByZWFkICVkKSA9ICIsIHJzaXplLCBuKTsKKwlmb3IgKG4gPSAwOyBuIDwgcnNpemU7IG4rKykKKwkJcHJpbnRrKCIgJTAyeCIsICh1bnNpZ25lZCBjaGFyKSByZGVzY1tuXSk7CisJcHJpbnRrKCJcbiIpOworI2VuZGlmCisKKwlpZiAoIShoaWQgPSBoaWRfcGFyc2VfcmVwb3J0KHJkZXNjLCBuKSkpIHsKKwkJZGJnKCJwYXJzaW5nIHJlcG9ydCBkZXNjcmlwdG9yIGZhaWxlZCIpOworCQlrZnJlZShyZGVzYyk7CisJCXJldHVybiBOVUxMOworCX0KKworCWtmcmVlKHJkZXNjKTsKKwloaWQtPnF1aXJrcyA9IHF1aXJrczsKKworCWlmIChoaWRfYWxsb2NfYnVmZmVycyhkZXYsIGhpZCkpIHsKKwkJaGlkX2ZyZWVfYnVmZmVycyhkZXYsIGhpZCk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlmb3IgKG4gPSAwOyBuIDwgaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHM7IG4rKykgeworCisJCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJCWludCBwaXBlOworCQlpbnQgaW50ZXJ2YWw7CisKKwkJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFtuXS5kZXNjOworCQlpZiAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSAhPSAzKQkJLyogTm90IGFuIGludGVycnVwdCBlbmRwb2ludCAqLworCQkJY29udGludWU7CisKKwkJLyogaGFuZGxlIHBvdGVudGlhbCBoaWdoc3BlZWQgSElEIGNvcnJlY3RseSAqLworCQlpbnRlcnZhbCA9IGVuZHBvaW50LT5iSW50ZXJ2YWw7CisJCWlmIChkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorCQkJaW50ZXJ2YWwgPSAxIDw8IChpbnRlcnZhbCAtIDEpOworCisJCS8qIENoYW5nZSB0aGUgcG9sbGluZyBpbnRlcnZhbCBvZiBtaWNlLiAqLworCQlpZiAoaGlkLT5jb2xsZWN0aW9uLT51c2FnZSA9PSBISURfR0RfTU9VU0UgJiYgaGlkX21vdXNlcG9sbF9pbnRlcnZhbCA+IDApCisJCQlpbnRlcnZhbCA9IGhpZF9tb3VzZXBvbGxfaW50ZXJ2YWw7CisJCQorCQlpZiAoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSB7CisJCQlpZiAoaGlkLT51cmJpbikKKwkJCQljb250aW51ZTsKKwkJCWlmICghKGhpZC0+dXJiaW4gPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpKSkKKwkJCQlnb3RvIGZhaWw7CisJCQlwaXBlID0gdXNiX3JjdmludHBpcGUoZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7CisJCQl1c2JfZmlsbF9pbnRfdXJiKGhpZC0+dXJiaW4sIGRldiwgcGlwZSwgaGlkLT5pbmJ1ZiwgMCwKKwkJCQkJIGhpZF9pcnFfaW4sIGhpZCwgaW50ZXJ2YWwpOworCQkJaGlkLT51cmJpbi0+dHJhbnNmZXJfZG1hID0gaGlkLT5pbmJ1Zl9kbWE7CisJCQloaWQtPnVyYmluLT50cmFuc2Zlcl9mbGFncyB8PShVUkJfTk9fVFJBTlNGRVJfRE1BX01BUCB8IFVSQl9BU1lOQ19VTkxJTkspOworCQl9IGVsc2UgeworCQkJaWYgKGhpZC0+dXJib3V0KQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCEoaGlkLT51cmJvdXQgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpKSkKKwkJCQlnb3RvIGZhaWw7CisJCQlwaXBlID0gdXNiX3NuZGludHBpcGUoZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7CisJCQl1c2JfZmlsbF9pbnRfdXJiKGhpZC0+dXJib3V0LCBkZXYsIHBpcGUsIGhpZC0+b3V0YnVmLCAwLAorCQkJCQkgaGlkX2lycV9vdXQsIGhpZCwgaW50ZXJ2YWwpOworCQkJaGlkLT51cmJvdXQtPnRyYW5zZmVyX2RtYSA9IGhpZC0+b3V0YnVmX2RtYTsKKwkJCWhpZC0+dXJib3V0LT50cmFuc2Zlcl9mbGFncyB8PSAoVVJCX05PX1RSQU5TRkVSX0RNQV9NQVAgfCBVUkJfQVNZTkNfVU5MSU5LKTsKKwkJfQorCX0KKworCWlmICghaGlkLT51cmJpbikgeworCQllcnIoImNvdWxkbid0IGZpbmQgYW4gaW5wdXQgaW50ZXJydXB0IGVuZHBvaW50Iik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZoaWQtPndhaXQpOworCisJc3Bpbl9sb2NrX2luaXQoJmhpZC0+b3V0bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmhpZC0+Y3RybGxvY2spOworCisJaGlkLT52ZXJzaW9uID0gbGUxNl90b19jcHUoaGRlc2MtPmJjZEhJRCk7CisJaGlkLT5jb3VudHJ5ID0gaGRlc2MtPmJDb3VudHJ5Q29kZTsKKwloaWQtPmRldiA9IGRldjsKKwloaWQtPmludGYgPSBpbnRmOworCWhpZC0+aWZudW0gPSBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKworCWhpZC0+bmFtZVswXSA9IDA7CisKKwlpZiAoIShidWYgPSBrbWFsbG9jKDY0LCBHRlBfS0VSTkVMKSkpCisJCWdvdG8gZmFpbDsKKworCWlmIChkZXYtPm1hbnVmYWN0dXJlcikgeworCQlzdHJjYXQoaGlkLT5uYW1lLCBkZXYtPm1hbnVmYWN0dXJlcik7CisJCWlmIChkZXYtPnByb2R1Y3QpCisJCQlzbnByaW50ZihoaWQtPm5hbWUsIDY0LCAiJXMgJXMiLCBoaWQtPm5hbWUsIGRldi0+cHJvZHVjdCk7CisJfSBlbHNlIGlmIChkZXYtPnByb2R1Y3QpIHsKKwkJCXNucHJpbnRmKGhpZC0+bmFtZSwgMTI4LCAiJXMiLCBkZXYtPnByb2R1Y3QpOworCX0gZWxzZQorCQlzbnByaW50ZihoaWQtPm5hbWUsIDEyOCwgIiUwNHg6JTA0eCIsCisJCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQkJbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOworCisJdXNiX21ha2VfcGF0aChkZXYsIGJ1ZiwgNjQpOworCXNucHJpbnRmKGhpZC0+cGh5cywgNjQsICIlcy9pbnB1dCVkIiwgYnVmLAorCQkJaW50Zi0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOworCisJaWYgKHVzYl9zdHJpbmcoZGV2LCBkZXYtPmRlc2NyaXB0b3IuaVNlcmlhbE51bWJlciwgaGlkLT51bmlxLCA2NCkgPD0gMCkKKwkJaGlkLT51bmlxWzBdID0gMDsKKworCWtmcmVlKGJ1Zik7CisKKwloaWQtPnVyYmN0cmwgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghaGlkLT51cmJjdHJsKQorCQlnb3RvIGZhaWw7CisJdXNiX2ZpbGxfY29udHJvbF91cmIoaGlkLT51cmJjdHJsLCBkZXYsIDAsICh2b2lkICopIGhpZC0+Y3IsCisJCQkgICAgIGhpZC0+Y3RybGJ1ZiwgMSwgaGlkX2N0cmwsIGhpZCk7CisJaGlkLT51cmJjdHJsLT5zZXR1cF9kbWEgPSBoaWQtPmNyX2RtYTsKKwloaWQtPnVyYmN0cmwtPnRyYW5zZmVyX2RtYSA9IGhpZC0+Y3RybGJ1Zl9kbWE7CisJaGlkLT51cmJjdHJsLT50cmFuc2Zlcl9mbGFncyB8PSAoVVJCX05PX1RSQU5TRkVSX0RNQV9NQVAgfCBVUkJfTk9fU0VUVVBfRE1BX01BUCB8IFVSQl9BU1lOQ19VTkxJTkspOworCisJcmV0dXJuIGhpZDsKKworZmFpbDoKKworCWlmIChoaWQtPnVyYmluKQorCQl1c2JfZnJlZV91cmIoaGlkLT51cmJpbik7CisJaWYgKGhpZC0+dXJib3V0KQorCQl1c2JfZnJlZV91cmIoaGlkLT51cmJvdXQpOworCWlmIChoaWQtPnVyYmN0cmwpCisJCXVzYl9mcmVlX3VyYihoaWQtPnVyYmN0cmwpOworCWhpZF9mcmVlX2J1ZmZlcnMoZGV2LCBoaWQpOworCWhpZF9mcmVlX2RldmljZShoaWQpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGhpZF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKworCWlmICghaGlkKQorCQlyZXR1cm47CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCXVzYl9raWxsX3VyYihoaWQtPnVyYmluKTsKKwl1c2Jfa2lsbF91cmIoaGlkLT51cmJvdXQpOworCXVzYl9raWxsX3VyYihoaWQtPnVyYmN0cmwpOworCisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKQorCQloaWRpbnB1dF9kaXNjb25uZWN0KGhpZCk7CisJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRERFVikKKwkJaGlkZGV2X2Rpc2Nvbm5lY3QoaGlkKTsKKworCXVzYl9mcmVlX3VyYihoaWQtPnVyYmluKTsKKwl1c2JfZnJlZV91cmIoaGlkLT51cmJjdHJsKTsKKwlpZiAoaGlkLT51cmJvdXQpCisJCXVzYl9mcmVlX3VyYihoaWQtPnVyYm91dCk7CisKKwloaWRfZnJlZV9idWZmZXJzKGhpZC0+ZGV2LCBoaWQpOworCWhpZF9mcmVlX2RldmljZShoaWQpOworfQorCitzdGF0aWMgaW50IGhpZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQ7CisJY2hhciBwYXRoWzY0XTsKKwlpbnQgaTsKKwljaGFyICpjOworCisJZGJnKCJISUQgcHJvYmUgY2FsbGVkIGZvciBpZm51bSAlZCIsCisJCQlpbnRmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOworCisJaWYgKCEoaGlkID0gdXNiX2hpZF9jb25maWd1cmUoaW50ZikpKQorCQlyZXR1cm4gLUVJTzsKKworCWhpZF9pbml0X3JlcG9ydHMoaGlkKTsKKwloaWRfZHVtcF9kZXZpY2UoaGlkKTsKKworCWlmICghaGlkaW5wdXRfY29ubmVjdChoaWQpKQorCQloaWQtPmNsYWltZWQgfD0gSElEX0NMQUlNRURfSU5QVVQ7CisJaWYgKCFoaWRkZXZfY29ubmVjdChoaWQpKQorCQloaWQtPmNsYWltZWQgfD0gSElEX0NMQUlNRURfSElEREVWOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBoaWQpOworCisJaWYgKCFoaWQtPmNsYWltZWQpIHsKKwkJcHJpbnRrICgiSElEIGRldmljZSBub3QgY2xhaW1lZCBieSBpbnB1dCBvciBoaWRkZXZcbiIpOworCQloaWRfZGlzY29ubmVjdChpbnRmKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyk7CisKKwlpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpCisJCXByaW50aygiaW5wdXQiKTsKKwlpZiAoaGlkLT5jbGFpbWVkID09IChISURfQ0xBSU1FRF9JTlBVVCB8IEhJRF9DTEFJTUVEX0hJRERFVikpCisJCXByaW50aygiLCIpOworCWlmIChoaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9ISURERVYpCisJCXByaW50aygiaGlkZGV2JWQiLCBoaWQtPm1pbm9yKTsKKworCWMgPSAiRGV2aWNlIjsKKwlmb3IgKGkgPSAwOyBpIDwgaGlkLT5tYXhjb2xsZWN0aW9uOyBpKyspIHsKKwkJaWYgKGhpZC0+Y29sbGVjdGlvbltpXS50eXBlID09IEhJRF9DT0xMRUNUSU9OX0FQUExJQ0FUSU9OICYmCisJCSAgICAoaGlkLT5jb2xsZWN0aW9uW2ldLnVzYWdlICYgSElEX1VTQUdFX1BBR0UpID09IEhJRF9VUF9HRU5ERVNLICYmCisJCSAgICAoaGlkLT5jb2xsZWN0aW9uW2ldLnVzYWdlICYgMHhmZmZmKSA8IEFSUkFZX1NJWkUoaGlkX3R5cGVzKSkgeworCQkJYyA9IGhpZF90eXBlc1toaWQtPmNvbGxlY3Rpb25baV0udXNhZ2UgJiAweGZmZmZdOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwl1c2JfbWFrZV9wYXRoKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIHBhdGgsIDYzKTsKKworCXByaW50aygiOiBVU0IgSElEIHYleC4lMDJ4ICVzIFslc10gb24gJXNcbiIsCisJCWhpZC0+dmVyc2lvbiA+PiA4LCBoaWQtPnZlcnNpb24gJiAweGZmLCBjLCBoaWQtPm5hbWUsIHBhdGgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGlkX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHUzMiBzdGF0ZSkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisKKwl1c2Jfa2lsbF91cmIoaGlkLT51cmJpbik7CisJaW50Zi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gc3RhdGU7CisJZGV2X2RiZygmaW50Zi0+ZGV2LCAic3VzcGVuZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGlkX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJaW50IHN0YXR1czsKKworCWludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNX1NVU1BFTkRfT047CisJaWYgKGhpZC0+b3BlbikKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIoaGlkLT51cmJpbiwgR0ZQX05PSU8pOworCWVsc2UKKwkJc3RhdHVzID0gMDsKKwlkZXZfZGJnKCZpbnRmLT5kZXYsICJyZXN1bWUgc3RhdHVzICVkXG4iLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBoaWRfdXNiX2lkcyBbXSA9IHsKKwl7IC5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTLAorCQkuYkludGVyZmFjZUNsYXNzID0gVVNCX0lOVEVSRkFDRV9DTEFTU19ISUQgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBoaWRfdXNiX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBoaWRfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJ1c2JoaWQiLAorCS5wcm9iZSA9CWhpZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CWhpZF9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JaGlkX3N1c3BlbmQsCisJLnJlc3VtZSA9CWhpZF9yZXN1bWUsCisJLmlkX3RhYmxlID0JaGlkX3VzYl9pZHMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBoaWRfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisJcmV0dmFsID0gaGlkZGV2X2luaXQoKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGhpZGRldl9pbml0X2ZhaWw7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZoaWRfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIHVzYl9yZWdpc3Rlcl9mYWlsOworCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKworCXJldHVybiAwOwordXNiX3JlZ2lzdGVyX2ZhaWw6CisJaGlkZGV2X2V4aXQoKTsKK2hpZGRldl9pbml0X2ZhaWw6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGhpZF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmhpZF9kcml2ZXIpOworCWhpZGRldl9leGl0KCk7Cit9CisKK21vZHVsZV9pbml0KGhpZF9pbml0KTsKK21vZHVsZV9leGl0KGhpZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRShEUklWRVJfTElDRU5TRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtZGVidWcuaCBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOTE3MDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtZGVidWcuaApAQCAtMCwwICsxLDcyMCBAQAorLyoKKyAqICRJZDogaGlkLWRlYnVnLmgsdiAxLjggMjAwMS8wOS8yNSAwOTozNzo1NyB2b2p0ZWNoIEV4cCAkCisgKgorICogIChjKSAxOTk5IEFuZHJlYXMgR2FsCQk8Z2FsQGNzLnVuaS1tYWdkZWJ1cmcuZGU+CisgKiAgKGMpIDIwMDAtMjAwMSBWb2p0ZWNoIFBhdmxpawk8dm9qdGVjaEB1Y3cuY3o+CisgKgorICogIFNvbWUgZGVidWcgc3R1ZmYgZm9yIHRoZSBISUQgcGFyc2VyLgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqIFNob3VsZCB5b3UgbmVlZCB0byBjb250YWN0IG1lLCB0aGUgYXV0aG9yLCB5b3UgY2FuIGRvIHNvIGVpdGhlciBieQorICogZS1tYWlsIC0gbWFpbCB5b3VyIG1lc3NhZ2UgdG8gPHZvanRlY2hAdWN3LmN6Piwgb3IgYnkgcGFwZXIgbWFpbDoKKyAqIFZvanRlY2ggUGF2bGlrLCBTaW11bmtvdmEgMTU5NCwgUHJhZ3VlIDgsIDE4MiAwMCBDemVjaCBSZXB1YmxpYworICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorCitzdHJ1Y3QgaGlkX3VzYWdlX2VudHJ5IHsKKwl1bnNpZ25lZCAgcGFnZTsKKwl1bnNpZ25lZCAgdXNhZ2U7CisJY2hhciAgICAgKmRlc2NyaXB0aW9uOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfdXNhZ2VfZW50cnkgaGlkX3VzYWdlX3RhYmxlW10gPSB7CisgIHsgIDAsICAgICAgMCwgIlVuZGVmaW5lZCIgfSwKKyAgeyAgMSwgICAgICAwLCAiR2VuZXJpY0Rlc2t0b3AiIH0sCisgICAgezAsIDB4MDEsICJQb2ludGVyIn0sCisgICAgezAsIDB4MDIsICJNb3VzZSJ9LAorICAgIHswLCAweDA0LCAiSm95c3RpY2sifSwKKyAgICB7MCwgMHgwNSwgIkdhbWVQYWQifSwKKyAgICB7MCwgMHgwNiwgIktleWJvYXJkIn0sCisgICAgezAsIDB4MDcsICJLZXlwYWQifSwKKyAgICB7MCwgMHgwOCwgIk11bHRpQXhpcyJ9LAorICAgICAgezAsIDB4MzAsICJYIn0sCisgICAgICB7MCwgMHgzMSwgIlkifSwKKyAgICAgIHswLCAweDMyLCAiWiJ9LAorICAgICAgezAsIDB4MzMsICJSeCJ9LAorICAgICAgezAsIDB4MzQsICJSeSJ9LAorICAgICAgezAsIDB4MzUsICJSeiJ9LAorICAgICAgezAsIDB4MzYsICJTbGlkZXIifSwKKyAgICAgIHswLCAweDM3LCAiRGlhbCJ9LAorICAgICAgezAsIDB4MzgsICJXaGVlbCJ9LAorICAgICAgezAsIDB4MzksICJIYXRTd2l0Y2gifSwKKyAgICB7MCwgMHgzYSwgIkNvdW50ZWRCdWZmZXIifSwKKyAgICAgIHswLCAweDNiLCAiQnl0ZUNvdW50In0sCisgICAgICB7MCwgMHgzYywgIk1vdGlvbldha2V1cCJ9LAorICAgICAgezAsIDB4M2QsICJTdGFydCJ9LAorICAgICAgezAsIDB4M2UsICJTZWxlY3QifSwKKyAgICAgIHswLCAweDQwLCAiVngifSwKKyAgICAgIHswLCAweDQxLCAiVnkifSwKKyAgICAgIHswLCAweDQyLCAiVnoifSwKKyAgICAgIHswLCAweDQzLCAiVmJyeCJ9LAorICAgICAgezAsIDB4NDQsICJWYnJ5In0sCisgICAgICB7MCwgMHg0NSwgIlZicnoifSwKKyAgICAgIHswLCAweDQ2LCAiVm5vIn0sCisgICAgezAsIDB4ODAsICJTeXN0ZW1Db250cm9sIn0sIAorICAgICAgezAsIDB4ODEsICJTeXN0ZW1Qb3dlckRvd24ifSwKKyAgICAgIHswLCAweDgyLCAiU3lzdGVtU2xlZXAifSwKKyAgICAgIHswLCAweDgzLCAiU3lzdGVtV2FrZVVwIn0sCisgICAgICB7MCwgMHg4NCwgIlN5c3RlbUNvbnRleHRNZW51In0sCisgICAgICB7MCwgMHg4NSwgIlN5c3RlbU1haW5NZW51In0sCisgICAgICB7MCwgMHg4NiwgIlN5c3RlbUFwcE1lbnUifSwKKyAgICAgIHswLCAweDg3LCAiU3lzdGVtTWVudUhlbHAifSwKKyAgICAgIHswLCAweDg4LCAiU3lzdGVtTWVudUV4aXQifSwKKyAgICAgIHswLCAweDg5LCAiU3lzdGVtTWVudVNlbGVjdCJ9LAorICAgICAgezAsIDB4OGEsICJTeXN0ZW1NZW51UmlnaHQifSwKKyAgICAgIHswLCAweDhiLCAiU3lzdGVtTWVudUxlZnQifSwKKyAgICAgIHswLCAweDhjLCAiU3lzdGVtTWVudVVwIn0sCisgICAgICB7MCwgMHg4ZCwgIlN5c3RlbU1lbnVEb3duIn0sCisgICAgICB7MCwgMHg5MCwgIkQtUGFkVXAifSwKKyAgICAgIHswLCAweDkxLCAiRC1QYWREb3duIn0sCisgICAgICB7MCwgMHg5MiwgIkQtUGFkUmlnaHQifSwKKyAgICAgIHswLCAweDkzLCAiRC1QYWRMZWZ0In0sCisgIHsgIDcsIDAsICJLZXlib2FyZCIgfSwKKyAgeyAgOCwgMCwgIkxFRCIgfSwKKyAgICAgIHswLCAweDAxLCAiTnVtTG9jayJ9LAorICAgICAgezAsIDB4MDIsICJDYXBzTG9jayJ9LAorICAgICAgezAsIDB4MDMsICJTY3JvbGxMb2NrIn0sCisgICAgICB7MCwgMHgwNCwgIkNvbXBvc2UifSwKKyAgICAgIHswLCAweDA1LCAiS2FuYSJ9LAorICB7ICA5LCAwLCAiQnV0dG9uIiB9LAorICB7IDEwLCAwLCAiT3JkaW5hbCIgfSwKKyAgeyAxMiwgMCwgIkNvbnN1bWVyIiB9LAorICAgICAgezAsIDB4MjM4LCAiSG9yaXpvbnRhbFdoZWVsIn0sCisgIHsgMTMsIDAsICJEaWdpdGl6ZXJzIiB9LAorICAgIHswLCAweDAxLCAiRGlnaXRpemVyIn0sCisgICAgezAsIDB4MDIsICJQZW4ifSwKKyAgICB7MCwgMHgwMywgIkxpZ2h0UGVuIn0sCisgICAgezAsIDB4MDQsICJUb3VjaFNjcmVlbiJ9LAorICAgIHswLCAweDA1LCAiVG91Y2hQYWQifSwKKyAgICB7MCwgMHgyMCwgIlN0eWx1cyJ9LAorICAgIHswLCAweDIxLCAiUHVjayJ9LAorICAgIHswLCAweDIyLCAiRmluZ2VyIn0sCisgICAgezAsIDB4MzAsICJUaXBQcmVzc3VyZSJ9LAorICAgIHswLCAweDMxLCAiQmFycmVsUHJlc3N1cmUifSwKKyAgICB7MCwgMHgzMiwgIkluUmFuZ2UifSwKKyAgICB7MCwgMHgzMywgIlRvdWNoIn0sCisgICAgezAsIDB4MzQsICJVblRvdWNoIn0sCisgICAgezAsIDB4MzUsICJUYXAifSwKKyAgICB7MCwgMHgzOSwgIlRhYmxldEZ1bmN0aW9uS2V5In0sCisgICAgezAsIDB4M2EsICJQcm9ncmFtQ2hhbmdlS2V5In0sCisgICAgezAsIDB4M2MsICJJbnZlcnQifSwKKyAgICB7MCwgMHg0MiwgIlRpcFN3aXRjaCJ9LAorICAgIHswLCAweDQzLCAiU2Vjb25kYXJ5VGlwU3dpdGNoIn0sCisgICAgezAsIDB4NDQsICJCYXJyZWxTd2l0Y2gifSwKKyAgICB7MCwgMHg0NSwgIkVyYXNlciJ9LAorICAgIHswLCAweDQ2LCAiVGFibGV0UGljayJ9LAorICB7IDE1LCAwLCAiUGh5c2ljYWxJbnRlcmZhY2VEZXZpY2UiIH0sCisgICAgezAsIDB4MDAsICJVbmRlZmluZWQifSwKKyAgICB7MCwgMHgwMSwgIlBoeXNpY2FsX0ludGVyZmFjZV9EZXZpY2UifSwKKyAgICAgIHswLCAweDIwLCAiTm9ybWFsIn0sCisgICAgezAsIDB4MjEsICJTZXRfRWZmZWN0X1JlcG9ydCJ9LAorICAgICAgezAsIDB4MjIsICJFZmZlY3RfQmxvY2tfSW5kZXgifSwKKyAgICAgIHswLCAweDIzLCAiUGFyYW1ldGVyX0Jsb2NrX09mZnNldCJ9LAorICAgICAgezAsIDB4MjQsICJST01fRmxhZyJ9LAorICAgICAgezAsIDB4MjUsICJFZmZlY3RfVHlwZSJ9LAorICAgICAgICB7MCwgMHgyNiwgIkVUX0NvbnN0YW50X0ZvcmNlIn0sCisgICAgICAgIHswLCAweDI3LCAiRVRfUmFtcCJ9LAorICAgICAgICB7MCwgMHgyOCwgIkVUX0N1c3RvbV9Gb3JjZV9EYXRhIn0sCisgICAgICAgIHswLCAweDMwLCAiRVRfU3F1YXJlIn0sCisgICAgICAgIHswLCAweDMxLCAiRVRfU2luZSJ9LAorICAgICAgICB7MCwgMHgzMiwgIkVUX1RyaWFuZ2xlIn0sCisgICAgICAgIHswLCAweDMzLCAiRVRfU2F3dG9vdGhfVXAifSwKKyAgICAgICAgezAsIDB4MzQsICJFVF9TYXd0b290aF9Eb3duIn0sCisgICAgICAgIHswLCAweDQwLCAiRVRfU3ByaW5nIn0sCisgICAgICAgIHswLCAweDQxLCAiRVRfRGFtcGVyIn0sCisgICAgICAgIHswLCAweDQyLCAiRVRfSW5lcnRpYSJ9LAorICAgICAgICB7MCwgMHg0MywgIkVUX0ZyaWN0aW9uIn0sCisgICAgICB7MCwgMHg1MCwgIkR1cmF0aW9uIn0sCisgICAgICB7MCwgMHg1MSwgIlNhbXBsZV9QZXJpb2QifSwKKyAgICAgIHswLCAweDUyLCAiR2FpbiJ9LAorICAgICAgezAsIDB4NTMsICJUcmlnZ2VyX0J1dHRvbiJ9LAorICAgICAgezAsIDB4NTQsICJUcmlnZ2VyX1JlcGVhdF9JbnRlcnZhbCJ9LAorICAgICAgezAsIDB4NTUsICJBeGVzX0VuYWJsZSJ9LAorICAgICAgICB7MCwgMHg1NiwgIkRpcmVjdGlvbl9FbmFibGUifSwKKyAgICAgIHswLCAweDU3LCAiRGlyZWN0aW9uIn0sCisgICAgICB7MCwgMHg1OCwgIlR5cGVfU3BlY2lmaWNfQmxvY2tfT2Zmc2V0In0sCisgICAgICAgIHswLCAweDU5LCAiQmxvY2tfVHlwZSJ9LAorICAgICAgICB7MCwgMHg1QSwgIlNldF9FbnZlbG9wZV9SZXBvcnQifSwKKyAgICAgICAgICB7MCwgMHg1QiwgIkF0dGFja19MZXZlbCJ9LAorICAgICAgICAgIHswLCAweDVDLCAiQXR0YWNrX1RpbWUifSwKKyAgICAgICAgICB7MCwgMHg1RCwgIkZhZGVfTGV2ZWwifSwKKyAgICAgICAgICB7MCwgMHg1RSwgIkZhZGVfVGltZSJ9LAorICAgICAgICB7MCwgMHg1RiwgIlNldF9Db25kaXRpb25fUmVwb3J0In0sCisgICAgICAgIHswLCAweDYwLCAiQ1BfT2Zmc2V0In0sCisgICAgICAgIHswLCAweDYxLCAiUG9zaXRpdmVfQ29lZmZpY2llbnQifSwKKyAgICAgICAgezAsIDB4NjIsICJOZWdhdGl2ZV9Db2VmZmljaWVudCJ9LAorICAgICAgICB7MCwgMHg2MywgIlBvc2l0aXZlX1NhdHVyYXRpb24ifSwKKyAgICAgICAgezAsIDB4NjQsICJOZWdhdGl2ZV9TYXR1cmF0aW9uIn0sCisgICAgICAgIHswLCAweDY1LCAiRGVhZF9CYW5kIn0sCisgICAgICB7MCwgMHg2NiwgIkRvd25sb2FkX0ZvcmNlX1NhbXBsZSJ9LAorICAgICAgezAsIDB4NjcsICJJc29jaF9DdXN0b21fRm9yY2VfRW5hYmxlIn0sCisgICAgICB7MCwgMHg2OCwgIkN1c3RvbV9Gb3JjZV9EYXRhX1JlcG9ydCJ9LAorICAgICAgICB7MCwgMHg2OSwgIkN1c3RvbV9Gb3JjZV9EYXRhIn0sCisgICAgICAgIHswLCAweDZBLCAiQ3VzdG9tX0ZvcmNlX1ZlbmRvcl9EZWZpbmVkX0RhdGEifSwKKyAgICAgIHswLCAweDZCLCAiU2V0X0N1c3RvbV9Gb3JjZV9SZXBvcnQifSwKKyAgICAgICAgezAsIDB4NkMsICJDdXN0b21fRm9yY2VfRGF0YV9PZmZzZXQifSwKKyAgICAgICAgezAsIDB4NkQsICJTYW1wbGVfQ291bnQifSwKKyAgICAgIHswLCAweDZFLCAiU2V0X1BlcmlvZGljX1JlcG9ydCJ9LAorICAgICAgICB7MCwgMHg2RiwgIk9mZnNldCJ9LAorICAgICAgICB7MCwgMHg3MCwgIk1hZ25pdHVkZSJ9LAorICAgICAgICB7MCwgMHg3MSwgIlBoYXNlIn0sCisgICAgICAgIHswLCAweDcyLCAiUGVyaW9kIn0sCisgICAgICB7MCwgMHg3MywgIlNldF9Db25zdGFudF9Gb3JjZV9SZXBvcnQifSwKKyAgICAgICAgezAsIDB4NzQsICJTZXRfUmFtcF9Gb3JjZV9SZXBvcnQifSwKKyAgICAgICAgezAsIDB4NzUsICJSYW1wX1N0YXJ0In0sCisgICAgICAgIHswLCAweDc2LCAiUmFtcF9FbmQifSwKKyAgICAgIHswLCAweDc3LCAiRWZmZWN0X09wZXJhdGlvbl9SZXBvcnQifSwKKyAgICAgICAgezAsIDB4NzgsICJFZmZlY3RfT3BlcmF0aW9uIn0sCisgICAgICAgICAgezAsIDB4NzksICJPcF9FZmZlY3RfU3RhcnQifSwKKyAgICAgICAgICB7MCwgMHg3QSwgIk9wX0VmZmVjdF9TdGFydF9Tb2xvIn0sCisgICAgICAgICAgezAsIDB4N0IsICJPcF9FZmZlY3RfU3RvcCJ9LAorICAgICAgICAgIHswLCAweDdDLCAiTG9vcF9Db3VudCJ9LAorICAgICAgezAsIDB4N0QsICJEZXZpY2VfR2Fpbl9SZXBvcnQifSwKKyAgICAgICAgezAsIDB4N0UsICJEZXZpY2VfR2FpbiJ9LAorICAgIHswLCAweDdGLCAiUElEX1Bvb2xfUmVwb3J0In0sCisgICAgICB7MCwgMHg4MCwgIlJBTV9Qb29sX1NpemUifSwKKyAgICAgIHswLCAweDgxLCAiUk9NX1Bvb2xfU2l6ZSJ9LAorICAgICAgezAsIDB4ODIsICJST01fRWZmZWN0X0Jsb2NrX0NvdW50In0sCisgICAgICB7MCwgMHg4MywgIlNpbXVsdGFuZW91c19FZmZlY3RzX01heCJ9LAorICAgICAgezAsIDB4ODQsICJQb29sX0FsaWdubWVudCJ9LAorICAgIHswLCAweDg1LCAiUElEX1Bvb2xfTW92ZV9SZXBvcnQifSwKKyAgICAgIHswLCAweDg2LCAiTW92ZV9Tb3VyY2UifSwKKyAgICAgIHswLCAweDg3LCAiTW92ZV9EZXN0aW5hdGlvbiJ9LAorICAgICAgezAsIDB4ODgsICJNb3ZlX0xlbmd0aCJ9LAorICAgIHswLCAweDg5LCAiUElEX0Jsb2NrX0xvYWRfUmVwb3J0In0sCisgICAgICB7MCwgMHg4QiwgIkJsb2NrX0xvYWRfU3RhdHVzIn0sCisgICAgICB7MCwgMHg4QywgIkJsb2NrX0xvYWRfU3VjY2VzcyJ9LAorICAgICAgezAsIDB4OEQsICJCbG9ja19Mb2FkX0Z1bGwifSwKKyAgICAgIHswLCAweDhFLCAiQmxvY2tfTG9hZF9FcnJvciJ9LAorICAgICAgezAsIDB4OEYsICJCbG9ja19IYW5kbGUifSwKKyAgICAgIHswLCAweDkwLCAiUElEX0Jsb2NrX0ZyZWVfUmVwb3J0In0sCisgICAgICB7MCwgMHg5MSwgIlR5cGVfU3BlY2lmaWNfQmxvY2tfSGFuZGxlIn0sCisgICAgezAsIDB4OTIsICJQSURfU3RhdGVfUmVwb3J0In0sCisgICAgICB7MCwgMHg5NCwgIkVmZmVjdF9QbGF5aW5nIn0sCisgICAgICB7MCwgMHg5NSwgIlBJRF9EZXZpY2VfQ29udHJvbF9SZXBvcnQifSwKKyAgICAgICAgezAsIDB4OTYsICJQSURfRGV2aWNlX0NvbnRyb2wifSwKKyAgICAgICAgezAsIDB4OTcsICJEQ19FbmFibGVfQWN0dWF0b3JzIn0sCisgICAgICAgIHswLCAweDk4LCAiRENfRGlzYWJsZV9BY3R1YXRvcnMifSwKKyAgICAgICAgezAsIDB4OTksICJEQ19TdG9wX0FsbF9FZmZlY3RzIn0sCisgICAgICAgIHswLCAweDlBLCAiRENfRGV2aWNlX1Jlc2V0In0sCisgICAgICAgIHswLCAweDlCLCAiRENfRGV2aWNlX1BhdXNlIn0sCisgICAgICAgIHswLCAweDlDLCAiRENfRGV2aWNlX0NvbnRpbnVlIn0sCisgICAgICB7MCwgMHg5RiwgIkRldmljZV9QYXVzZWQifSwKKyAgICAgIHswLCAweEEwLCAiQWN0dWF0b3JzX0VuYWJsZWQifSwKKyAgICAgIHswLCAweEE0LCAiU2FmZXR5X1N3aXRjaCJ9LAorICAgICAgezAsIDB4QTUsICJBY3R1YXRvcl9PdmVycmlkZV9Td2l0Y2gifSwKKyAgICAgIHswLCAweEE2LCAiQWN0dWF0b3JfUG93ZXIifSwKKyAgICB7MCwgMHhBNywgIlN0YXJ0X0RlbGF5In0sCisgICAgezAsIDB4QTgsICJQYXJhbWV0ZXJfQmxvY2tfU2l6ZSJ9LAorICAgIHswLCAweEE5LCAiRGV2aWNlX01hbmFnZWRfUG9vbCJ9LAorICAgIHswLCAweEFBLCAiU2hhcmVkX1BhcmFtZXRlcl9CbG9ja3MifSwKKyAgICB7MCwgMHhBQiwgIkNyZWF0ZV9OZXdfRWZmZWN0X1JlcG9ydCJ9LAorICAgIHswLCAweEFDLCAiUkFNX1Bvb2xfQXZhaWxhYmxlIn0sCisgIHsgMHg4NCwgMCwgIlBvd2VyIERldmljZSIgfSwKKyAgICB7IDB4ODQsIDB4MDIsICJQcmVzZW50U3RhdHVzIiB9LAorICAgIHsgMHg4NCwgMHgwMywgIkNoYW5nZVN0YXR1cyIgfSwKKyAgICB7IDB4ODQsIDB4MDQsICJVUFMiIH0sCisgICAgeyAweDg0LCAweDA1LCAiUG93ZXJTdXBwbHkiIH0sCisgICAgeyAweDg0LCAweDEwLCAiQmF0dGVyeVN5c3RlbSIgfSwKKyAgICB7IDB4ODQsIDB4MTEsICJCYXR0ZXJ5U3lzdGVtSUQiIH0sCisgICAgeyAweDg0LCAweDEyLCAiQmF0dGVyeSIgfSwKKyAgICB7IDB4ODQsIDB4MTMsICJCYXR0ZXJ5SUQiIH0sCisgICAgeyAweDg0LCAweDE0LCAiQ2hhcmdlciIgfSwKKyAgICB7IDB4ODQsIDB4MTUsICJDaGFyZ2VySUQiIH0sCisgICAgeyAweDg0LCAweDE2LCAiUG93ZXJDb252ZXJ0ZXIiIH0sCisgICAgeyAweDg0LCAweDE3LCAiUG93ZXJDb252ZXJ0ZXJJRCIgfSwKKyAgICB7IDB4ODQsIDB4MTgsICJPdXRsZXRTeXN0ZW0iIH0sCisgICAgeyAweDg0LCAweDE5LCAiT3V0bGV0U3lzdGVtSUQiIH0sCisgICAgeyAweDg0LCAweDFhLCAiSW5wdXQiIH0sCisgICAgeyAweDg0LCAweDFiLCAiSW5wdXRJRCIgfSwKKyAgICB7IDB4ODQsIDB4MWMsICJPdXRwdXQiIH0sCisgICAgeyAweDg0LCAweDFkLCAiT3V0cHV0SUQiIH0sCisgICAgeyAweDg0LCAweDFlLCAiRmxvdyIgfSwKKyAgICB7IDB4ODQsIDB4MWYsICJGbG93SUQiIH0sCisgICAgeyAweDg0LCAweDIwLCAiT3V0bGV0IiB9LAorICAgIHsgMHg4NCwgMHgyMSwgIk91dGxldElEIiB9LAorICAgIHsgMHg4NCwgMHgyMiwgIkdhbmciIH0sCisgICAgeyAweDg0LCAweDI0LCAiUG93ZXJTdW1tYXJ5IiB9LAorICAgIHsgMHg4NCwgMHgyNSwgIlBvd2VyU3VtbWFyeUlEIiB9LAorICAgIHsgMHg4NCwgMHgzMCwgIlZvbHRhZ2UiIH0sCisgICAgeyAweDg0LCAweDMxLCAiQ3VycmVudCIgfSwKKyAgICB7IDB4ODQsIDB4MzIsICJGcmVxdWVuY3kiIH0sCisgICAgeyAweDg0LCAweDMzLCAiQXBwYXJlbnRQb3dlciIgfSwKKyAgICB7IDB4ODQsIDB4MzUsICJQZXJjZW50TG9hZCIgfSwKKyAgICB7IDB4ODQsIDB4NDAsICJDb25maWdWb2x0YWdlIiB9LAorICAgIHsgMHg4NCwgMHg0MSwgIkNvbmZpZ0N1cnJlbnQiIH0sCisgICAgeyAweDg0LCAweDQzLCAiQ29uZmlnQXBwYXJlbnRQb3dlciIgfSwKKyAgICB7IDB4ODQsIDB4NTMsICJMb3dWb2x0YWdlVHJhbnNmZXIiIH0sCisgICAgeyAweDg0LCAweDU0LCAiSGlnaFZvbHRhZ2VUcmFuc2ZlciIgfSwKKyAgICB7IDB4ODQsIDB4NTYsICJEZWxheUJlZm9yZVN0YXJ0dXAiIH0sCisgICAgeyAweDg0LCAweDU3LCAiRGVsYXlCZWZvcmVTaHV0ZG93biIgfSwKKyAgICB7IDB4ODQsIDB4NTgsICJUZXN0IiB9LAorICAgIHsgMHg4NCwgMHg1YSwgIkF1ZGlibGVBbGFybUNvbnRyb2wiIH0sCisgICAgeyAweDg0LCAweDYwLCAiUHJlc2VudCIgfSwKKyAgICB7IDB4ODQsIDB4NjEsICJHb29kIiB9LAorICAgIHsgMHg4NCwgMHg2MiwgIkludGVybmFsRmFpbHVyZSIgfSwKKyAgICB7IDB4ODQsIDB4NjUsICJPdmVybG9hZCIgfSwKKyAgICB7IDB4ODQsIDB4NjYsICJPdmVyQ2hhcmdlZCIgfSwKKyAgICB7IDB4ODQsIDB4NjcsICJPdmVyVGVtcGVyYXR1cmUiIH0sCisgICAgeyAweDg0LCAweDY4LCAiU2h1dGRvd25SZXF1ZXN0ZWQiIH0sCisgICAgeyAweDg0LCAweDY5LCAiU2h1dGRvd25JbW1pbmVudCIgfSwKKyAgICB7IDB4ODQsIDB4NmIsICJTd2l0Y2hPbi9PZmYiIH0sCisgICAgeyAweDg0LCAweDZjLCAiU3dpdGNoYWJsZSIgfSwKKyAgICB7IDB4ODQsIDB4NmQsICJVc2VkIiB9LAorICAgIHsgMHg4NCwgMHg2ZSwgIkJvb3N0IiB9LAorICAgIHsgMHg4NCwgMHg3MywgIkNvbW11bmljYXRpb25Mb3N0IiB9LAorICAgIHsgMHg4NCwgMHhmZCwgImlNYW51ZmFjdHVyZXIiIH0sCisgICAgeyAweDg0LCAweGZlLCAiaVByb2R1Y3QiIH0sCisgICAgeyAweDg0LCAweGZmLCAiaVNlcmlhbE51bWJlciIgfSwKKyAgeyAweDg1LCAwLCAiQmF0dGVyeSBTeXN0ZW0iIH0sCisgICAgeyAweDg1LCAweDAxLCAiU01CQmF0dGVyeU1vZGUiIH0sCisgICAgeyAweDg1LCAweDAyLCAiU01CQmF0dGVyeVN0YXR1cyIgfSwKKyAgICB7IDB4ODUsIDB4MDMsICJTTUJBbGFybVdhcm5pbmciIH0sCisgICAgeyAweDg1LCAweDA0LCAiU01CQ2hhcmdlck1vZGUiIH0sCisgICAgeyAweDg1LCAweDA1LCAiU01CQ2hhcmdlclN0YXR1cyIgfSwKKyAgICB7IDB4ODUsIDB4MDYsICJTTUJDaGFyZ2VyU3BlY0luZm8iIH0sCisgICAgeyAweDg1LCAweDA3LCAiU01CU2VsZWN0b3JTdGF0ZSIgfSwKKyAgICB7IDB4ODUsIDB4MDgsICJTTUJTZWxlY3RvclByZXNldHMiIH0sCisgICAgeyAweDg1LCAweDA5LCAiU01CU2VsZWN0b3JJbmZvIiB9LAorICAgIHsgMHg4NSwgMHgyOSwgIlJlbWFpbmluZ0NhcGFjaXR5TGltaXQiIH0sCisgICAgeyAweDg1LCAweDJjLCAiQ2FwYWNpdHlNb2RlIiB9LAorICAgIHsgMHg4NSwgMHg0MiwgIkJlbG93UmVtYWluaW5nQ2FwYWNpdHlMaW1pdCIgfSwKKyAgICB7IDB4ODUsIDB4NDQsICJDaGFyZ2luZyIgfSwKKyAgICB7IDB4ODUsIDB4NDUsICJEaXNjaGFyZ2luZyIgfSwKKyAgICB7IDB4ODUsIDB4NGIsICJOZWVkUmVwbGFjZW1lbnQiIH0sCisgICAgeyAweDg1LCAweDY2LCAiUmVtYWluaW5nQ2FwYWNpdHkiIH0sCisgICAgeyAweDg1LCAweDY4LCAiUnVuVGltZVRvRW1wdHkiIH0sCisgICAgeyAweDg1LCAweDZhLCAiQXZlcmFnZVRpbWVUb0Z1bGwiIH0sCisgICAgeyAweDg1LCAweDgzLCAiRGVzaWduQ2FwYWNpdHkiIH0sCisgICAgeyAweDg1LCAweDg1LCAiTWFudWZhY3R1cmVyRGF0ZSIgfSwKKyAgICB7IDB4ODUsIDB4ODksICJpRGV2aWNlQ2hlbWlzdHJ5IiB9LAorICAgIHsgMHg4NSwgMHg4YiwgIlJlY2hhcmdhYmxlIiB9LAorICAgIHsgMHg4NSwgMHg4ZiwgImlPRU1JbmZvcm1hdGlvbiIgfSwKKyAgICB7IDB4ODUsIDB4OGQsICJDYXBhY2l0eUdyYW51bGFyaXR5MSIgfSwKKyAgICB7IDB4ODUsIDB4ZDAsICJBQ1ByZXNlbnQiIH0sCisgIC8qIHBhZ2VzIDB4ZmYwMCB0byAweGZmZmYgYXJlIHZlbmRvci1zcGVjaWZpYyAqLworICB7IDB4ZmZmZiwgMCwgIlZlbmRvci1zcGVjaWZpYy1GRiIgfSwKKyAgeyAwLCAwLCBOVUxMIH0KK307CisKK3N0YXRpYyB2b2lkIHJlc29sdl91c2FnZV9wYWdlKHVuc2lnbmVkIHBhZ2UpIHsKKwljb25zdCBzdHJ1Y3QgaGlkX3VzYWdlX2VudHJ5ICpwOworCisJZm9yIChwID0gaGlkX3VzYWdlX3RhYmxlOyBwLT5kZXNjcmlwdGlvbjsgcCsrKQorCQlpZiAocC0+cGFnZSA9PSBwYWdlKSB7CisJCQlwcmludGsoIiVzIiwgcC0+ZGVzY3JpcHRpb24pOworCQkJcmV0dXJuOworCQl9CisJcHJpbnRrKCIlMDR4IiwgcGFnZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc29sdl91c2FnZSh1bnNpZ25lZCB1c2FnZSkgeworCWNvbnN0IHN0cnVjdCBoaWRfdXNhZ2VfZW50cnkgKnA7CisKKwlyZXNvbHZfdXNhZ2VfcGFnZSh1c2FnZSA+PiAxNik7CisJcHJpbnRrKCIuIik7CisJZm9yIChwID0gaGlkX3VzYWdlX3RhYmxlOyBwLT5kZXNjcmlwdGlvbjsgcCsrKQorCQlpZiAocC0+cGFnZSA9PSAodXNhZ2UgPj4gMTYpKSB7CisJCQlmb3IoKytwOyBwLT5kZXNjcmlwdGlvbiAmJiBwLT51c2FnZSAhPSAwOyBwKyspCisJCQkJaWYgKHAtPnVzYWdlID09ICh1c2FnZSAmIDB4ZmZmZikpIHsKKwkJCQkJcHJpbnRrKCIlcyIsIHAtPmRlc2NyaXB0aW9uKTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCWJyZWFrOworCQl9CisJcHJpbnRrKCIlMDR4IiwgdXNhZ2UgJiAweGZmZmYpOworfQorCitfX2lubGluZV9fIHN0YXRpYyB2b2lkIHRhYihpbnQgbikgeworCXdoaWxlIChuLS0pIHByaW50aygiICIpOworfQorCitzdGF0aWMgdm9pZCBoaWRfZHVtcF9maWVsZChzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgaW50IG4pIHsKKwlpbnQgajsKKwkKKwlpZiAoZmllbGQtPnBoeXNpY2FsKSB7CisJCXRhYihuKTsKKwkJcHJpbnRrKCJQaHlzaWNhbCgiKTsKKwkJcmVzb2x2X3VzYWdlKGZpZWxkLT5waHlzaWNhbCk7IHByaW50aygiKVxuIik7CisJfQorCWlmIChmaWVsZC0+bG9naWNhbCkgeworCQl0YWIobik7CisJCXByaW50aygiTG9naWNhbCgiKTsKKwkJcmVzb2x2X3VzYWdlKGZpZWxkLT5sb2dpY2FsKTsgcHJpbnRrKCIpXG4iKTsKKwl9CisJdGFiKG4pOyBwcmludGsoIlVzYWdlKCVkKVxuIiwgZmllbGQtPm1heHVzYWdlKTsKKwlmb3IgKGogPSAwOyBqIDwgZmllbGQtPm1heHVzYWdlOyBqKyspIHsKKwkJdGFiKG4rMik7cmVzb2x2X3VzYWdlKGZpZWxkLT51c2FnZVtqXS5oaWQpOyBwcmludGsoIlxuIik7CisJfQorCWlmIChmaWVsZC0+bG9naWNhbF9taW5pbXVtICE9IGZpZWxkLT5sb2dpY2FsX21heGltdW0pIHsKKwkJdGFiKG4pOyBwcmludGsoIkxvZ2ljYWwgTWluaW11bSglZClcbiIsIGZpZWxkLT5sb2dpY2FsX21pbmltdW0pOworCQl0YWIobik7IHByaW50aygiTG9naWNhbCBNYXhpbXVtKCVkKVxuIiwgZmllbGQtPmxvZ2ljYWxfbWF4aW11bSk7CisJfQorCWlmIChmaWVsZC0+cGh5c2ljYWxfbWluaW11bSAhPSBmaWVsZC0+cGh5c2ljYWxfbWF4aW11bSkgeworCQl0YWIobik7IHByaW50aygiUGh5c2ljYWwgTWluaW11bSglZClcbiIsIGZpZWxkLT5waHlzaWNhbF9taW5pbXVtKTsKKwkJdGFiKG4pOyBwcmludGsoIlBoeXNpY2FsIE1heGltdW0oJWQpXG4iLCBmaWVsZC0+cGh5c2ljYWxfbWF4aW11bSk7CisJfQorCWlmIChmaWVsZC0+dW5pdF9leHBvbmVudCkgeworCQl0YWIobik7IHByaW50aygiVW5pdCBFeHBvbmVudCglZClcbiIsIGZpZWxkLT51bml0X2V4cG9uZW50KTsKKwl9CisJaWYgKGZpZWxkLT51bml0KSB7CisJCWNoYXIgKnN5c3RlbXNbNV0gPSB7ICJOb25lIiwgIlNJIExpbmVhciIsICJTSSBSb3RhdGlvbiIsICJFbmdsaXNoIExpbmVhciIsICJFbmdsaXNoIFJvdGF0aW9uIiB9OworCQljaGFyICp1bml0c1s1XVs4XSA9IHsKKwkJCXsgIk5vbmUiLCAiTm9uZSIsICJOb25lIiwgIk5vbmUiLCAiTm9uZSIsICJOb25lIiwgIk5vbmUiLCAiTm9uZSIgfSwKKwkJCXsgIk5vbmUiLCAiQ2VudGltZXRlciIsICJHcmFtIiwgIlNlY29uZHMiLCAiS2VsdmluIiwgICAgICJBbXBlcmUiLCAiQ2FuZGVsYSIsICJOb25lIiB9LAorCQkJeyAiTm9uZSIsICJSYWRpYW5zIiwgICAgIkdyYW0iLCAiU2Vjb25kcyIsICJLZWx2aW4iLCAgICAgIkFtcGVyZSIsICJDYW5kZWxhIiwgIk5vbmUiIH0sCisJCQl7ICJOb25lIiwgIkluY2giLCAgICAgICAiU2x1ZyIsICJTZWNvbmRzIiwgIkZhaHJlbmhlaXQiLCAiQW1wZXJlIiwgIkNhbmRlbGEiLCAiTm9uZSIgfSwKKwkJCXsgIk5vbmUiLCAiRGVncmVlcyIsICAgICJTbHVnIiwgIlNlY29uZHMiLCAiRmFocmVuaGVpdCIsICJBbXBlcmUiLCAiQ2FuZGVsYSIsICJOb25lIiB9CisJCX07CisKKwkJaW50IGk7CisJCWludCBzeXM7CisgICAgICAgICAgICAgICAgX191MzIgZGF0YSA9IGZpZWxkLT51bml0OworCisJCS8qIEZpcnN0IG5pYmJsZSB0ZWxscyB1cyB3aGljaCBzeXN0ZW0gd2UncmUgaW4uICovCisJCXN5cyA9IGRhdGEgJiAweGY7CisJCWRhdGEgPj49IDQ7CisKKwkJaWYoc3lzID4gNCkgeworCQkJdGFiKG4pOyBwcmludGsoIlVuaXQoSW52YWxpZClcbiIpOworCQl9CisJCWVsc2UgeworCQkJaW50IGVhcmxpZXJfdW5pdCA9IDA7CisKKwkJCXRhYihuKTsgcHJpbnRrKCJVbml0KCVzIDogIiwgc3lzdGVtc1tzeXNdKTsKKworCQkJZm9yIChpPTEgOyBpPHNpemVvZihfX3UzMikqMiA7IGkrKykgeworCQkJCWNoYXIgbmliYmxlID0gZGF0YSAmIDB4ZjsKKwkJCQlkYXRhID4+PSA0OworCQkJCWlmIChuaWJibGUgIT0gMCkgeworCQkJCQlpZihlYXJsaWVyX3VuaXQrKyA+IDApCisJCQkJCQlwcmludGsoIioiKTsKKwkJCQkJcHJpbnRrKCIlcyIsIHVuaXRzW3N5c11baV0pOworCQkJCQlpZihuaWJibGUgIT0gMSkgeworCQkJCQkJLyogVGhpcyBpcyBhIF9zaWduZWRfIG5pYmJsZSghKSAqLworCQorCQkJCQkJaW50IHZhbCA9IG5pYmJsZSAmIDB4NzsKKwkJCQkJCWlmKG5pYmJsZSAmIDB4MDgpCisJCQkJCQkJdmFsID0gLSgoMHg3ICYgfnZhbCkgKzEpOworCQkJCQkJcHJpbnRrKCJeJWQiLCB2YWwpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJcHJpbnRrKCIpXG4iKTsKKwkJfQorCX0KKwl0YWIobik7IHByaW50aygiUmVwb3J0IFNpemUoJXUpXG4iLCBmaWVsZC0+cmVwb3J0X3NpemUpOworCXRhYihuKTsgcHJpbnRrKCJSZXBvcnQgQ291bnQoJXUpXG4iLCBmaWVsZC0+cmVwb3J0X2NvdW50KTsKKwl0YWIobik7IHByaW50aygiUmVwb3J0IE9mZnNldCgldSlcbiIsIGZpZWxkLT5yZXBvcnRfb2Zmc2V0KTsKKworCXRhYihuKTsgcHJpbnRrKCJGbGFncyggIik7CisJaiA9IGZpZWxkLT5mbGFnczsKKwlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9DT05TVEFOVCAmIGogPyAiQ29uc3RhbnQgIiA6ICIiKTsKKwlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9WQVJJQUJMRSAmIGogPyAiVmFyaWFibGUgIiA6ICJBcnJheSAiKTsKKwlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9SRUxBVElWRSAmIGogPyAiUmVsYXRpdmUgIiA6ICJBYnNvbHV0ZSAiKTsKKwlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9XUkFQICYgaiA/ICJXcmFwICIgOiAiIik7CisJcHJpbnRrKCIlcyIsIEhJRF9NQUlOX0lURU1fTk9OTElORUFSICYgaiA/ICJOb25MaW5lYXIgIiA6ICIiKTsKKwlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9OT19QUkVGRVJSRUQgJiBqID8gIk5vUHJlZmZlcmVkU3RhdGUgIiA6ICIiKTsKKwlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9OVUxMX1NUQVRFICYgaiA/ICJOdWxsU3RhdGUgIiA6ICIiKTsKKwlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9WT0xBVElMRSAmIGogPyAiVm9sYXRpbGUgIiA6ICIiKTsKKwlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9CVUZGRVJFRF9CWVRFICYgaiA/ICJCdWZmZXJlZEJ5dGUgIiA6ICIiKTsKKwlwcmludGsoIilcbiIpOworfQorCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBoaWRfZHVtcF9kZXZpY2Uoc3RydWN0IGhpZF9kZXZpY2UgKmRldmljZSkgeworCXN0cnVjdCBoaWRfcmVwb3J0X2VudW0gKnJlcG9ydF9lbnVtOworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwl1bnNpZ25lZCBpLGs7CisJc3RhdGljIGNoYXIgKnRhYmxlW10gPSB7IklOUFVUIiwgIk9VVFBVVCIsICJGRUFUVVJFIn07CisJCisJZm9yIChpID0gMDsgaSA8IEhJRF9SRVBPUlRfVFlQRVM7IGkrKykgeworCQlyZXBvcnRfZW51bSA9IGRldmljZS0+cmVwb3J0X2VudW0gKyBpOworCQlsaXN0ID0gcmVwb3J0X2VudW0tPnJlcG9ydF9saXN0Lm5leHQ7CisJCXdoaWxlIChsaXN0ICE9ICZyZXBvcnRfZW51bS0+cmVwb3J0X2xpc3QpIHsKKwkJCXJlcG9ydCA9IChzdHJ1Y3QgaGlkX3JlcG9ydCAqKSBsaXN0OworCQkJdGFiKDIpOworCQkJcHJpbnRrKCIlcyIsIHRhYmxlW2ldKTsKKwkJCWlmIChyZXBvcnQtPmlkKQorCQkJCXByaW50aygiKCVkKSIsIHJlcG9ydC0+aWQpOworCQkJcHJpbnRrKCJbJXNdIiwgdGFibGVbcmVwb3J0LT50eXBlXSk7CisJCQlwcmludGsoIlxuIik7CisJCQlmb3IgKGsgPSAwOyBrIDwgcmVwb3J0LT5tYXhmaWVsZDsgaysrKSB7CisJCQkJdGFiKDQpOworCQkJCXByaW50aygiRmllbGQoJWQpXG4iLCBrKTsKKwkJCQloaWRfZHVtcF9maWVsZChyZXBvcnQtPmZpZWxkW2tdLCA2KTsKKwkJCX0KKwkJCWxpc3QgPSBsaXN0LT5uZXh0OworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBoaWRfZHVtcF9pbnB1dChzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpIHsKKwlwcmludGsoImhpZC1kZWJ1ZzogaW5wdXQgIik7CisJcmVzb2x2X3VzYWdlKHVzYWdlLT5oaWQpOworCXByaW50aygiID0gJWRcbiIsIHZhbHVlKTsKK30KKworCitzdGF0aWMgY2hhciAqZXZlbnRzW0VWX01BWCArIDFdID0geworCVtFVl9TWU5dID0gIlN5bmMiLAkJCVtFVl9LRVldID0gIktleSIsCisJW0VWX1JFTF0gPSAiUmVsYXRpdmUiLAkJCVtFVl9BQlNdID0gIkFic29sdXRlIiwKKwlbRVZfTVNDXSA9ICJNaXNjIiwJCQlbRVZfTEVEXSA9ICJMRUQiLAorCVtFVl9TTkRdID0gIlNvdW5kIiwJCQlbRVZfUkVQXSA9ICJSZXBlYXQiLAorCVtFVl9GRl0gPSAiRm9yY2VGZWVkYmFjayIsCQlbRVZfUFdSXSA9ICJQb3dlciIsCisJW0VWX0ZGX1NUQVRVU10gPSAiRm9yY2VGZWVkYmFja1N0YXR1cyIsCit9OworCitzdGF0aWMgY2hhciAqc3luY3NbMl0gPSB7CisJW1NZTl9SRVBPUlRdID0gIlJlcG9ydCIsCQlbU1lOX0NPTkZJR10gPSAiQ29uZmlnIiwKK307CitzdGF0aWMgY2hhciAqa2V5c1tLRVlfTUFYICsgMV0gPSB7CisJW0tFWV9SRVNFUlZFRF0gPSAiUmVzZXJ2ZWQiLAkJW0tFWV9FU0NdID0gIkVzYyIsCisJW0tFWV8xXSA9ICIxIiwJCQkJW0tFWV8yXSA9ICIyIiwKKwlbS0VZXzNdID0gIjMiLAkJCQlbS0VZXzRdID0gIjQiLAorCVtLRVlfNV0gPSAiNSIsCQkJCVtLRVlfNl0gPSAiNiIsCisJW0tFWV83XSA9ICI3IiwJCQkJW0tFWV84XSA9ICI4IiwKKwlbS0VZXzldID0gIjkiLAkJCQlbS0VZXzBdID0gIjAiLAorCVtLRVlfTUlOVVNdID0gIk1pbnVzIiwJCQlbS0VZX0VRVUFMXSA9ICJFcXVhbCIsCisJW0tFWV9CQUNLU1BBQ0VdID0gIkJhY2tzcGFjZSIsCQlbS0VZX1RBQl0gPSAiVGFiIiwKKwlbS0VZX1FdID0gIlEiLAkJCQlbS0VZX1ddID0gIlciLAorCVtLRVlfRV0gPSAiRSIsCQkJCVtLRVlfUl0gPSAiUiIsCisJW0tFWV9UXSA9ICJUIiwJCQkJW0tFWV9ZXSA9ICJZIiwKKwlbS0VZX1VdID0gIlUiLAkJCQlbS0VZX0ldID0gIkkiLAorCVtLRVlfT10gPSAiTyIsCQkJCVtLRVlfUF0gPSAiUCIsCisJW0tFWV9MRUZUQlJBQ0VdID0gIkxlZnRCcmFjZSIsCQlbS0VZX1JJR0hUQlJBQ0VdID0gIlJpZ2h0QnJhY2UiLAorCVtLRVlfRU5URVJdID0gIkVudGVyIiwJCQlbS0VZX0xFRlRDVFJMXSA9ICJMZWZ0Q29udHJvbCIsCisJW0tFWV9BXSA9ICJBIiwJCQkJW0tFWV9TXSA9ICJTIiwKKwlbS0VZX0RdID0gIkQiLAkJCQlbS0VZX0ZdID0gIkYiLAorCVtLRVlfR10gPSAiRyIsCQkJCVtLRVlfSF0gPSAiSCIsCisJW0tFWV9KXSA9ICJKIiwJCQkJW0tFWV9LXSA9ICJLIiwKKwlbS0VZX0xdID0gIkwiLAkJCQlbS0VZX1NFTUlDT0xPTl0gPSAiU2VtaWNvbG9uIiwKKwlbS0VZX0FQT1NUUk9QSEVdID0gIkFwb3N0cm9waGUiLAlbS0VZX0dSQVZFXSA9ICJHcmF2ZSIsCisJW0tFWV9MRUZUU0hJRlRdID0gIkxlZnRTaGlmdCIsCQlbS0VZX0JBQ0tTTEFTSF0gPSAiQmFja1NsYXNoIiwKKwlbS0VZX1pdID0gIloiLAkJCQlbS0VZX1hdID0gIlgiLAorCVtLRVlfQ10gPSAiQyIsCQkJCVtLRVlfVl0gPSAiViIsCisJW0tFWV9CXSA9ICJCIiwJCQkJW0tFWV9OXSA9ICJOIiwKKwlbS0VZX01dID0gIk0iLAkJCQlbS0VZX0NPTU1BXSA9ICJDb21tYSIsCisJW0tFWV9ET1RdID0gIkRvdCIsCQkJW0tFWV9TTEFTSF0gPSAiU2xhc2giLAorCVtLRVlfUklHSFRTSElGVF0gPSAiUmlnaHRTaGlmdCIsCVtLRVlfS1BBU1RFUklTS10gPSAiS1BBc3RlcmlzayIsCisJW0tFWV9MRUZUQUxUXSA9ICJMZWZ0QWx0IiwJCVtLRVlfU1BBQ0VdID0gIlNwYWNlIiwKKwlbS0VZX0NBUFNMT0NLXSA9ICJDYXBzTG9jayIsCQlbS0VZX0YxXSA9ICJGMSIsCisJW0tFWV9GMl0gPSAiRjIiLAkJCVtLRVlfRjNdID0gIkYzIiwKKwlbS0VZX0Y0XSA9ICJGNCIsCQkJW0tFWV9GNV0gPSAiRjUiLAorCVtLRVlfRjZdID0gIkY2IiwJCQlbS0VZX0Y3XSA9ICJGNyIsCisJW0tFWV9GOF0gPSAiRjgiLAkJCVtLRVlfRjldID0gIkY5IiwKKwlbS0VZX0YxMF0gPSAiRjEwIiwJCQlbS0VZX05VTUxPQ0tdID0gIk51bUxvY2siLAorCVtLRVlfU0NST0xMTE9DS10gPSAiU2Nyb2xsTG9jayIsCVtLRVlfS1A3XSA9ICJLUDciLAorCVtLRVlfS1A4XSA9ICJLUDgiLAkJCVtLRVlfS1A5XSA9ICJLUDkiLAorCVtLRVlfS1BNSU5VU10gPSAiS1BNaW51cyIsCQlbS0VZX0tQNF0gPSAiS1A0IiwKKwlbS0VZX0tQNV0gPSAiS1A1IiwJCQlbS0VZX0tQNl0gPSAiS1A2IiwKKwlbS0VZX0tQUExVU10gPSAiS1BQbHVzIiwJCVtLRVlfS1AxXSA9ICJLUDEiLAorCVtLRVlfS1AyXSA9ICJLUDIiLAkJCVtLRVlfS1AzXSA9ICJLUDMiLAorCVtLRVlfS1AwXSA9ICJLUDAiLAkJCVtLRVlfS1BET1RdID0gIktQRG90IiwKKwlbS0VZX1pFTktBS1VIQU5LQUtVXSA9ICJaZW5rYWt1L0hhbmtha3UiLCBbS0VZXzEwMk5EXSA9ICIxMDJuZCIsCisJW0tFWV9GMTFdID0gIkYxMSIsCQkJW0tFWV9GMTJdID0gIkYxMiIsCisJW0tFWV9ST10gPSAiUk8iLAkJCVtLRVlfS0FUQUtBTkFdID0gIkthdGFrYW5hIiwKKwlbS0VZX0hJUkFHQU5BXSA9ICJISVJBR0FOQSIsCQlbS0VZX0hFTktBTl0gPSAiSGVua2FuIiwKKwlbS0VZX0tBVEFLQU5BSElSQUdBTkFdID0gIkthdGFrYW5hL0hpcmFnYW5hIiwgW0tFWV9NVUhFTktBTl0gPSAiTXVoZW5rYW4iLAorCVtLRVlfS1BKUENPTU1BXSA9ICJLUEpwQ29tbWEiLAkJW0tFWV9LUEVOVEVSXSA9ICJLUEVudGVyIiwKKwlbS0VZX1JJR0hUQ1RSTF0gPSAiUmlnaHRDdHJsIiwJCVtLRVlfS1BTTEFTSF0gPSAiS1BTbGFzaCIsCisJW0tFWV9TWVNSUV0gPSAiU3lzUnEiLAkJCVtLRVlfUklHSFRBTFRdID0gIlJpZ2h0QWx0IiwKKwlbS0VZX0xJTkVGRUVEXSA9ICJMaW5lRmVlZCIsCQlbS0VZX0hPTUVdID0gIkhvbWUiLAorCVtLRVlfVVBdID0gIlVwIiwJCQlbS0VZX1BBR0VVUF0gPSAiUGFnZVVwIiwKKwlbS0VZX0xFRlRdID0gIkxlZnQiLAkJCVtLRVlfUklHSFRdID0gIlJpZ2h0IiwKKwlbS0VZX0VORF0gPSAiRW5kIiwJCQlbS0VZX0RPV05dID0gIkRvd24iLAorCVtLRVlfUEFHRURPV05dID0gIlBhZ2VEb3duIiwJCVtLRVlfSU5TRVJUXSA9ICJJbnNlcnQiLAorCVtLRVlfREVMRVRFXSA9ICJEZWxldGUiLAkJW0tFWV9NQUNST10gPSAiTWFjcm8iLAorCVtLRVlfTVVURV0gPSAiTXV0ZSIsCQkJW0tFWV9WT0xVTUVET1dOXSA9ICJWb2x1bWVEb3duIiwKKwlbS0VZX1ZPTFVNRVVQXSA9ICJWb2x1bWVVcCIsCQlbS0VZX1BPV0VSXSA9ICJQb3dlciIsCisJW0tFWV9LUEVRVUFMXSA9ICJLUEVxdWFsIiwJCVtLRVlfS1BQTFVTTUlOVVNdID0gIktQUGx1c01pbnVzIiwKKwlbS0VZX1BBVVNFXSA9ICJQYXVzZSIsCQkJW0tFWV9LUENPTU1BXSA9ICJLUENvbW1hIiwKKwlbS0VZX0hBTkdVRUxdID0gIkhhbmd1ZWwiLAkJW0tFWV9IQU5KQV0gPSAiSGFuamEiLAorCVtLRVlfWUVOXSA9ICJZZW4iLAkJCVtLRVlfTEVGVE1FVEFdID0gIkxlZnRNZXRhIiwKKwlbS0VZX1JJR0hUTUVUQV0gPSAiUmlnaHRNZXRhIiwJCVtLRVlfQ09NUE9TRV0gPSAiQ29tcG9zZSIsCisJW0tFWV9TVE9QXSA9ICJTdG9wIiwJCQlbS0VZX0FHQUlOXSA9ICJBZ2FpbiIsCisJW0tFWV9QUk9QU10gPSAiUHJvcHMiLAkJCVtLRVlfVU5ET10gPSAiVW5kbyIsCisJW0tFWV9GUk9OVF0gPSAiRnJvbnQiLAkJCVtLRVlfQ09QWV0gPSAiQ29weSIsCisJW0tFWV9PUEVOXSA9ICJPcGVuIiwJCQlbS0VZX1BBU1RFXSA9ICJQYXN0ZSIsCisJW0tFWV9GSU5EXSA9ICJGaW5kIiwJCQlbS0VZX0NVVF0gPSAiQ3V0IiwKKwlbS0VZX0hFTFBdID0gIkhlbHAiLAkJCVtLRVlfTUVOVV0gPSAiTWVudSIsCisJW0tFWV9DQUxDXSA9ICJDYWxjIiwJCQlbS0VZX1NFVFVQXSA9ICJTZXR1cCIsCisJW0tFWV9TTEVFUF0gPSAiU2xlZXAiLAkJCVtLRVlfV0FLRVVQXSA9ICJXYWtlVXAiLAorCVtLRVlfRklMRV0gPSAiRmlsZSIsCQkJW0tFWV9TRU5ERklMRV0gPSAiU2VuZEZpbGUiLAorCVtLRVlfREVMRVRFRklMRV0gPSAiRGVsZXRlRmlsZSIsCVtLRVlfWEZFUl0gPSAiWC1mZXIiLAorCVtLRVlfUFJPRzFdID0gIlByb2cxIiwJCQlbS0VZX1BST0cyXSA9ICJQcm9nMiIsCisJW0tFWV9XV1ddID0gIldXVyIsCQkJW0tFWV9NU0RPU10gPSAiTVNET1MiLAorCVtLRVlfQ09GRkVFXSA9ICJDb2ZmZWUiLAkJW0tFWV9ESVJFQ1RJT05dID0gIkRpcmVjdGlvbiIsCisJW0tFWV9DWUNMRVdJTkRPV1NdID0gIkN5Y2xlV2luZG93cyIsCVtLRVlfTUFJTF0gPSAiTWFpbCIsCisJW0tFWV9CT09LTUFSS1NdID0gIkJvb2ttYXJrcyIsCQlbS0VZX0NPTVBVVEVSXSA9ICJDb21wdXRlciIsCisJW0tFWV9CQUNLXSA9ICJCYWNrIiwJCQlbS0VZX0ZPUldBUkRdID0gIkZvcndhcmQiLAorCVtLRVlfQ0xPU0VDRF0gPSAiQ2xvc2VDRCIsCQlbS0VZX0VKRUNUQ0RdID0gIkVqZWN0Q0QiLAorCVtLRVlfRUpFQ1RDTE9TRUNEXSA9ICJFamVjdENsb3NlQ0QiLAlbS0VZX05FWFRTT05HXSA9ICJOZXh0U29uZyIsCisJW0tFWV9QTEFZUEFVU0VdID0gIlBsYXlQYXVzZSIsCQlbS0VZX1BSRVZJT1VTU09OR10gPSAiUHJldmlvdXNTb25nIiwKKwlbS0VZX1NUT1BDRF0gPSAiU3RvcENEIiwJCVtLRVlfUkVDT1JEXSA9ICJSZWNvcmQiLAorCVtLRVlfUkVXSU5EXSA9ICJSZXdpbmQiLAkJW0tFWV9QSE9ORV0gPSAiUGhvbmUiLAorCVtLRVlfSVNPXSA9ICJJU09LZXkiLAkJCVtLRVlfQ09ORklHXSA9ICJDb25maWciLAorCVtLRVlfSE9NRVBBR0VdID0gIkhvbWVQYWdlIiwJCVtLRVlfUkVGUkVTSF0gPSAiUmVmcmVzaCIsCisJW0tFWV9FWElUXSA9ICJFeGl0IiwJCQlbS0VZX01PVkVdID0gIk1vdmUiLAorCVtLRVlfRURJVF0gPSAiRWRpdCIsCQkJW0tFWV9TQ1JPTExVUF0gPSAiU2Nyb2xsVXAiLAorCVtLRVlfU0NST0xMRE9XTl0gPSAiU2Nyb2xsRG93biIsCVtLRVlfS1BMRUZUUEFSRU5dID0gIktQTGVmdFBhcmVudGhlc2lzIiwKKwlbS0VZX0tQUklHSFRQQVJFTl0gPSAiS1BSaWdodFBhcmVudGhlc2lzIiwgW0tFWV9GMTNdID0gIkYxMyIsCisJW0tFWV9GMTRdID0gIkYxNCIsCQkJW0tFWV9GMTVdID0gIkYxNSIsCisJW0tFWV9GMTZdID0gIkYxNiIsCQkJW0tFWV9GMTddID0gIkYxNyIsCisJW0tFWV9GMThdID0gIkYxOCIsCQkJW0tFWV9GMTldID0gIkYxOSIsCisJW0tFWV9GMjBdID0gIkYyMCIsCQkJW0tFWV9GMjFdID0gIkYyMSIsCisJW0tFWV9GMjJdID0gIkYyMiIsCQkJW0tFWV9GMjNdID0gIkYyMyIsCisJW0tFWV9GMjRdID0gIkYyNCIsCQkJW0tFWV9QTEFZQ0RdID0gIlBsYXlDRCIsCisJW0tFWV9QQVVTRUNEXSA9ICJQYXVzZUNEIiwJCVtLRVlfUFJPRzNdID0gIlByb2czIiwKKwlbS0VZX1BST0c0XSA9ICJQcm9nNCIsCQkJW0tFWV9TVVNQRU5EXSA9ICJTdXNwZW5kIiwKKwlbS0VZX0NMT1NFXSA9ICJDbG9zZSIsCQkJW0tFWV9QTEFZXSA9ICJQbGF5IiwKKwlbS0VZX0ZBU1RGT1JXQVJEXSA9ICJGYXN0IEZvcndhcmQiLAlbS0VZX0JBU1NCT09TVF0gPSAiQmFzcyBCb29zdCIsCisJW0tFWV9QUklOVF0gPSAiUHJpbnQiLAkJCVtLRVlfSFBdID0gIkhQIiwKKwlbS0VZX0NBTUVSQV0gPSAiQ2FtZXJhIiwJCVtLRVlfU09VTkRdID0gIlNvdW5kIiwKKwlbS0VZX1FVRVNUSU9OXSA9ICJRdWVzdGlvbiIsCQlbS0VZX0VNQUlMXSA9ICJFbWFpbCIsCisJW0tFWV9DSEFUXSA9ICJDaGF0IiwJCQlbS0VZX1NFQVJDSF0gPSAiU2VhcmNoIiwKKwlbS0VZX0NPTk5FQ1RdID0gIkNvbm5lY3QiLAkJW0tFWV9GSU5BTkNFXSA9ICJGaW5hbmNlIiwKKwlbS0VZX1NQT1JUXSA9ICJTcG9ydCIsCQkJW0tFWV9TSE9QXSA9ICJTaG9wIiwKKwlbS0VZX0FMVEVSQVNFXSA9ICJBbHRlcm5hdGUgRXJhc2UiLAlbS0VZX0NBTkNFTF0gPSAiQ2FuY2VsIiwKKwlbS0VZX0JSSUdIVE5FU1NET1dOXSA9ICJCcmlnaHRuZXNzIGRvd24iLCBbS0VZX0JSSUdIVE5FU1NVUF0gPSAiQnJpZ2h0bmVzcyB1cCIsCisJW0tFWV9NRURJQV0gPSAiTWVkaWEiLAkJCVtLRVlfVU5LTk9XTl0gPSAiVW5rbm93biIsCisJW0JUTl8wXSA9ICJCdG4wIiwJCQlbQlROXzFdID0gIkJ0bjEiLAorCVtCVE5fMl0gPSAiQnRuMiIsCQkJW0JUTl8zXSA9ICJCdG4zIiwKKwlbQlROXzRdID0gIkJ0bjQiLAkJCVtCVE5fNV0gPSAiQnRuNSIsCisJW0JUTl82XSA9ICJCdG42IiwJCQlbQlROXzddID0gIkJ0bjciLAorCVtCVE5fOF0gPSAiQnRuOCIsCQkJW0JUTl85XSA9ICJCdG45IiwKKwlbQlROX0xFRlRdID0gIkxlZnRCdG4iLAkJCVtCVE5fUklHSFRdID0gIlJpZ2h0QnRuIiwKKwlbQlROX01JRERMRV0gPSAiTWlkZGxlQnRuIiwJCVtCVE5fU0lERV0gPSAiU2lkZUJ0biIsCisJW0JUTl9FWFRSQV0gPSAiRXh0cmFCdG4iLAkJW0JUTl9GT1JXQVJEXSA9ICJGb3J3YXJkQnRuIiwKKwlbQlROX0JBQ0tdID0gIkJhY2tCdG4iLAkJCVtCVE5fVEFTS10gPSAiVGFza0J0biIsCisJW0JUTl9UUklHR0VSXSA9ICJUcmlnZ2VyIiwJCVtCVE5fVEhVTUJdID0gIlRodW1iQnRuIiwKKwlbQlROX1RIVU1CMl0gPSAiVGh1bWJCdG4yIiwJCVtCVE5fVE9QXSA9ICJUb3BCdG4iLAorCVtCVE5fVE9QMl0gPSAiVG9wQnRuMiIsCQkJW0JUTl9QSU5LSUVdID0gIlBpbmtpZUJ0biIsCisJW0JUTl9CQVNFXSA9ICJCYXNlQnRuIiwJCQlbQlROX0JBU0UyXSA9ICJCYXNlQnRuMiIsCisJW0JUTl9CQVNFM10gPSAiQmFzZUJ0bjMiLAkJW0JUTl9CQVNFNF0gPSAiQmFzZUJ0bjQiLAorCVtCVE5fQkFTRTVdID0gIkJhc2VCdG41IiwJCVtCVE5fQkFTRTZdID0gIkJhc2VCdG42IiwKKwlbQlROX0RFQURdID0gIkJ0bkRlYWQiLAkJCVtCVE5fQV0gPSAiQnRuQSIsCisJW0JUTl9CXSA9ICJCdG5CIiwJCQlbQlROX0NdID0gIkJ0bkMiLAorCVtCVE5fWF0gPSAiQnRuWCIsCQkJW0JUTl9ZXSA9ICJCdG5ZIiwKKwlbQlROX1pdID0gIkJ0bloiLAkJCVtCVE5fVExdID0gIkJ0blRMIiwKKwlbQlROX1RSXSA9ICJCdG5UUiIsCQkJW0JUTl9UTDJdID0gIkJ0blRMMiIsCisJW0JUTl9UUjJdID0gIkJ0blRSMiIsCQkJW0JUTl9TRUxFQ1RdID0gIkJ0blNlbGVjdCIsCisJW0JUTl9TVEFSVF0gPSAiQnRuU3RhcnQiLAkJW0JUTl9NT0RFXSA9ICJCdG5Nb2RlIiwKKwlbQlROX1RIVU1CTF0gPSAiQnRuVGh1bWJMIiwJCVtCVE5fVEhVTUJSXSA9ICJCdG5UaHVtYlIiLAorCVtCVE5fVE9PTF9QRU5dID0gIlRvb2xQZW4iLAkJW0JUTl9UT09MX1JVQkJFUl0gPSAiVG9vbFJ1YmJlciIsCisJW0JUTl9UT09MX0JSVVNIXSA9ICJUb29sQnJ1c2giLAkJW0JUTl9UT09MX1BFTkNJTF0gPSAiVG9vbFBlbmNpbCIsCisJW0JUTl9UT09MX0FJUkJSVVNIXSA9ICJUb29sQWlyYnJ1c2giLAlbQlROX1RPT0xfRklOR0VSXSA9ICJUb29sRmluZ2VyIiwKKwlbQlROX1RPT0xfTU9VU0VdID0gIlRvb2xNb3VzZSIsCQlbQlROX1RPT0xfTEVOU10gPSAiVG9vbExlbnMiLAorCVtCVE5fVE9VQ0hdID0gIlRvdWNoIiwJCQlbQlROX1NUWUxVU10gPSAiU3R5bHVzIiwKKwlbQlROX1NUWUxVUzJdID0gIlN0eWx1czIiLAkJW0JUTl9UT09MX0RPVUJMRVRBUF0gPSAiVG9vbCBEb3VibGV0YXAiLAorCVtCVE5fVE9PTF9UUklQTEVUQVBdID0gIlRvb2wgVHJpcGxldGFwIiwgW0JUTl9HRUFSX0RPV05dID0gIldoZWVsQnRuIiwKKwlbQlROX0dFQVJfVVBdID0gIkdlYXIgdXAiLAkJW0tFWV9PS10gPSAiT2siLAorCVtLRVlfU0VMRUNUXSA9ICJTZWxlY3QiLAkJW0tFWV9HT1RPXSA9ICJHb3RvIiwKKwlbS0VZX0NMRUFSXSA9ICJDbGVhciIsCQkJW0tFWV9QT1dFUjJdID0gIlBvd2VyMiIsCisJW0tFWV9PUFRJT05dID0gIk9wdGlvbiIsCQlbS0VZX0lORk9dID0gIkluZm8iLAorCVtLRVlfVElNRV0gPSAiVGltZSIsCQkJW0tFWV9WRU5ET1JdID0gIlZlbmRvciIsCisJW0tFWV9BUkNISVZFXSA9ICJBcmNoaXZlIiwJCVtLRVlfUFJPR1JBTV0gPSAiUHJvZ3JhbSIsCisJW0tFWV9DSEFOTkVMXSA9ICJDaGFubmVsIiwJCVtLRVlfRkFWT1JJVEVTXSA9ICJGYXZvcml0ZXMiLAorCVtLRVlfRVBHXSA9ICJFUEciLAkJCVtLRVlfUFZSXSA9ICJQVlIiLAorCVtLRVlfTUhQXSA9ICJNSFAiLAkJCVtLRVlfTEFOR1VBR0VdID0gIkxhbmd1YWdlIiwKKwlbS0VZX1RJVExFXSA9ICJUaXRsZSIsCQkJW0tFWV9TVUJUSVRMRV0gPSAiU3VidGl0bGUiLAorCVtLRVlfQU5HTEVdID0gIkFuZ2xlIiwJCQlbS0VZX1pPT01dID0gIlpvb20iLAorCVtLRVlfTU9ERV0gPSAiTW9kZSIsCQkJW0tFWV9LRVlCT0FSRF0gPSAiS2V5Ym9hcmQiLAorCVtLRVlfU0NSRUVOXSA9ICJTY3JlZW4iLAkJW0tFWV9QQ10gPSAiUEMiLAorCVtLRVlfVFZdID0gIlRWIiwJCQlbS0VZX1RWMl0gPSAiVFYyIiwKKwlbS0VZX1ZDUl0gPSAiVkNSIiwJCQlbS0VZX1ZDUjJdID0gIlZDUjIiLAorCVtLRVlfU0FUXSA9ICJTYXQiLAkJCVtLRVlfU0FUMl0gPSAiU2F0MiIsCisJW0tFWV9DRF0gPSAiQ0QiLAkJCVtLRVlfVEFQRV0gPSAiVGFwZSIsCisJW0tFWV9SQURJT10gPSAiUmFkaW8iLAkJCVtLRVlfVFVORVJdID0gIlR1bmVyIiwKKwlbS0VZX1BMQVlFUl0gPSAiUGxheWVyIiwJCVtLRVlfVEVYVF0gPSAiVGV4dCIsCisJW0tFWV9EVkRdID0gIkRWRCIsCQkJW0tFWV9BVVhdID0gIkF1eCIsCisJW0tFWV9NUDNdID0gIk1QMyIsCQkJW0tFWV9BVURJT10gPSAiQXVkaW8iLAorCVtLRVlfVklERU9dID0gIlZpZGVvIiwJCQlbS0VZX0RJUkVDVE9SWV0gPSAiRGlyZWN0b3J5IiwKKwlbS0VZX0xJU1RdID0gIkxpc3QiLAkJCVtLRVlfTUVNT10gPSAiTWVtbyIsCisJW0tFWV9DQUxFTkRBUl0gPSAiQ2FsZW5kYXIiLAkJW0tFWV9SRURdID0gIlJlZCIsCisJW0tFWV9HUkVFTl0gPSAiR3JlZW4iLAkJCVtLRVlfWUVMTE9XXSA9ICJZZWxsb3ciLAorCVtLRVlfQkxVRV0gPSAiQmx1ZSIsCQkJW0tFWV9DSEFOTkVMVVBdID0gIkNoYW5uZWxVcCIsCisJW0tFWV9DSEFOTkVMRE9XTl0gPSAiQ2hhbm5lbERvd24iLAlbS0VZX0ZJUlNUXSA9ICJGaXJzdCIsCisJW0tFWV9MQVNUXSA9ICJMYXN0IiwJCQlbS0VZX0FCXSA9ICJBQiIsCisJW0tFWV9ORVhUXSA9ICJOZXh0IiwJCQlbS0VZX1JFU1RBUlRdID0gIlJlc3RhcnQiLAorCVtLRVlfU0xPV10gPSAiU2xvdyIsCQkJW0tFWV9TSFVGRkxFXSA9ICJTaHVmZmxlIiwKKwlbS0VZX0JSRUFLXSA9ICJCcmVhayIsCQkJW0tFWV9QUkVWSU9VU10gPSAiUHJldmlvdXMiLAorCVtLRVlfRElHSVRTXSA9ICJEaWdpdHMiLAkJW0tFWV9URUVOXSA9ICJURUVOIiwKKwlbS0VZX1RXRU5dID0gIlRXRU4iLAkJCVtLRVlfREVMX0VPTF0gPSAiRGVsZXRlRU9MIiwKKwlbS0VZX0RFTF9FT1NdID0gIkRlbGV0ZUVPUyIsCQlbS0VZX0lOU19MSU5FXSA9ICJJbnNlcnRMaW5lIiwKKwlbS0VZX0RFTF9MSU5FXSA9ICJEZWxldGVMaW5lIiwKK307CisKK3N0YXRpYyBjaGFyICpyZWxhdGl2ZXNbUkVMX01BWCArIDFdID0geworCVtSRUxfWF0gPSAiWCIsCQkJW1JFTF9ZXSA9ICJZIiwKKwlbUkVMX1pdID0gIloiLAkJCVtSRUxfSFdIRUVMXSA9ICJIV2hlZWwiLAorCVtSRUxfRElBTF0gPSAiRGlhbCIsCQlbUkVMX1dIRUVMXSA9ICJXaGVlbCIsIAorCVtSRUxfTUlTQ10gPSAiTWlzYyIsCQorfTsKKworc3RhdGljIGNoYXIgKmFic29sdXRlc1tBQlNfTUFYICsgMV0gPSB7CisJW0FCU19YXSA9ICJYIiwJCQlbQUJTX1ldID0gIlkiLAorCVtBQlNfWl0gPSAiWiIsCQkJW0FCU19SWF0gPSAiUngiLAorCVtBQlNfUlldID0gIlJ5IiwJCVtBQlNfUlpdID0gIlJ6IiwKKwlbQUJTX1RIUk9UVExFXSA9ICJUaHJvdHRsZSIsCVtBQlNfUlVEREVSXSA9ICJSdWRkZXIiLAorCVtBQlNfV0hFRUxdID0gIldoZWVsIiwJCVtBQlNfR0FTXSA9ICJHYXMiLAorCVtBQlNfQlJBS0VdID0gIkJyYWtlIiwJCVtBQlNfSEFUMFhdID0gIkhhdDBYIiwKKwlbQUJTX0hBVDBZXSA9ICJIYXQwWSIsCQlbQUJTX0hBVDFYXSA9ICJIYXQxWCIsCisJW0FCU19IQVQxWV0gPSAiSGF0MVkiLAkJW0FCU19IQVQyWF0gPSAiSGF0MlgiLAorCVtBQlNfSEFUMlldID0gIkhhdDJZIiwJCVtBQlNfSEFUM1hdID0gIkhhdDNYIiwKKwlbQUJTX0hBVDNZXSA9ICJIYXQgM1kiLAkJW0FCU19QUkVTU1VSRV0gPSAiUHJlc3N1cmUiLAorCVtBQlNfRElTVEFOQ0VdID0gIkRpc3RhbmNlIiwJW0FCU19USUxUX1hdID0gIlhUaWx0IiwKKwlbQUJTX1RJTFRfWV0gPSAiWVRpbHQiLAkJW0FCU19UT09MX1dJRFRIXSA9ICJUb29sIFdpZHRoIiwKKwlbQUJTX1ZPTFVNRV0gPSAiVm9sdW1lIiwJW0FCU19NSVNDXSA9ICJNaXNjIiwKK307CisKK3N0YXRpYyBjaGFyICptaXNjW01TQ19NQVggKyAxXSA9IHsKKwlbTVNDX1NFUklBTF0gPSAiU2VyaWFsIiwJW01TQ19QVUxTRUxFRF0gPSAiUHVsc2VsZWQiLAorCVtNU0NfR0VTVFVSRV0gPSAiR2VzdHVyZSIsCVtNU0NfUkFXXSA9ICJSYXdEYXRhIgorfTsKKworc3RhdGljIGNoYXIgKmxlZHNbTEVEX01BWCArIDFdID0geworCVtMRURfTlVNTF0gPSAiTnVtTG9jayIsCQlbTEVEX0NBUFNMXSA9ICJDYXBzTG9jayIsIAorCVtMRURfU0NST0xMTF0gPSAiU2Nyb2xsTG9jayIsCVtMRURfQ09NUE9TRV0gPSAiQ29tcG9zZSIsCisJW0xFRF9LQU5BXSA9ICJLYW5hIiwJCVtMRURfU0xFRVBdID0gIlNsZWVwIiwgCisJW0xFRF9TVVNQRU5EXSA9ICJTdXNwZW5kIiwJW0xFRF9NVVRFXSA9ICJNdXRlIiwKKwlbTEVEX01JU0NdID0gIk1pc2MiLAorfTsKKworc3RhdGljIGNoYXIgKnJlcGVhdHNbUkVQX01BWCArIDFdID0geworCVtSRVBfREVMQVldID0gIkRlbGF5IiwJCVtSRVBfUEVSSU9EXSA9ICJQZXJpb2QiCit9OworCitzdGF0aWMgY2hhciAqc291bmRzW1NORF9NQVggKyAxXSA9IHsKKwlbU05EX0NMSUNLXSA9ICJDbGljayIsCQlbU05EX0JFTExdID0gIkJlbGwiLAorCVtTTkRfVE9ORV0gPSAiVG9uZSIKK307CisKK3N0YXRpYyBjaGFyICoqbmFtZXNbRVZfTUFYICsgMV0gPSB7CisJW0VWX1NZTl0gPSBzeW5jcywJCQlbRVZfS0VZXSA9IGtleXMsCisJW0VWX1JFTF0gPSByZWxhdGl2ZXMsCQkJW0VWX0FCU10gPSBhYnNvbHV0ZXMsCisJW0VWX01TQ10gPSBtaXNjLAkJCVtFVl9MRURdID0gbGVkcywKKwlbRVZfU05EXSA9IHNvdW5kcywJCQlbRVZfUkVQXSA9IHJlcGVhdHMsCit9OworCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSByZXNvbHZfZXZlbnQoX191OCB0eXBlLCBfX3UxNiBjb2RlKSB7CisKKwlwcmludGsoIiVzLiVzIiwgZXZlbnRzW3R5cGVdID8gZXZlbnRzW3R5cGVdIDogIj8iLAorCQluYW1lc1t0eXBlXSA/IChuYW1lc1t0eXBlXVtjb2RlXSA/IG5hbWVzW3R5cGVdW2NvZGVdIDogIj8iKSA6ICI/Iik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtZmYuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1mZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZTY5ODYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtZmYuYwpAQCAtMCwwICsxLDk0IEBACisvKgorICogJElkOiBoaWQtZmYuYyx2IDEuMiAyMDAyLzA0LzE4IDIyOjAyOjQ3IGpkZW5ldXggRXhwICQKKyAqCisgKiAgRm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgaGlkIGRldmljZXMuCisgKiAgTm90IGFsbCBoaWQgZGV2aWNlcyB1c2UgdGhlIHNhbWUgcHJvdG9jb2wuIEZvciBleGFtcGxlLCBzb21lIHVzZSBQSUQsCisgKiAgb3RoZXIgdXNlIHRoZWlyIG93biBwcm9wcmlldGFyeSBwcm9jb3RvbC4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgSm9oYW5uIERlbmV1eAorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqIFNob3VsZCB5b3UgbmVlZCB0byBjb250YWN0IG1lLCB0aGUgYXV0aG9yLCB5b3UgY2FuIGRvIHNvIGJ5CisgKiBlLW1haWwgLSBtYWlsIHlvdXIgbWVzc2FnZSB0byA8am9oYW5uLmRlbmV1eEBpdC51dS5zZT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKworI3VuZGVmIERFQlVHCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJoaWQuaCIKKworLyogRHJpdmVycycgaW5pdGlhbGl6aW5nIGZ1bmN0aW9ucyAqLworZXh0ZXJuIGludCBoaWRfbGdmZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpOworZXh0ZXJuIGludCBoaWRfbGczZF9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpOworZXh0ZXJuIGludCBoaWRfcGlkX2luaXQoc3RydWN0IGhpZF9kZXZpY2UqIGhpZCk7CitleHRlcm4gaW50IGhpZF90bWZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UqIGhpZCk7CisKKy8qCisgKiBUaGlzIHRhYmxlIGNvbnRhaW5zIHBvaW50ZXJzIHRvIGluaXRpYWxpemVycy4gVG8gYWRkIHN1cHBvcnQgZm9yIG5ldworICogZGV2aWNlcywgeW91IG5lZWQgdG8gYWRkIHRoZSBVU0IgdmVuZG9yIGFuZCBwcm9kdWN0IGlkcyBoZXJlLgorICovCitzdHJ1Y3QgaGlkX2ZmX2luaXRpYWxpemVyIHsKKwl1MTYgaWRWZW5kb3I7CisJdTE2IGlkUHJvZHVjdDsKKwlpbnQgKCppbml0KShzdHJ1Y3QgaGlkX2RldmljZSopOworfTsKKworc3RhdGljIHN0cnVjdCBoaWRfZmZfaW5pdGlhbGl6ZXIgaW5pdHNbXSA9IHsKKyNpZmRlZiBDT05GSUdfTE9HSVRFQ0hfRkYKKwl7MHg0NmQsIDB4YzIxMSwgaGlkX2xnZmZfaW5pdH0sIC8vIExvZ2l0ZWNoIENvcmRsZXNzIHJ1bWJsZSBwYWQKKwl7MHg0NmQsIDB4YzI4MywgaGlkX2xnZmZfaW5pdH0sIC8vIExvZ2l0ZWNoIFdpbmdtYW4gRm9yY2UgM2QKKwl7MHg0NmQsIDB4YzI5NSwgaGlkX2xnZmZfaW5pdH0sCS8vIExvZ2l0ZWNoIE1PTU8gZm9yY2Ugd2hlZWwKKwl7MHg0NmQsIDB4YzIxOSwgaGlkX2xnZmZfaW5pdH0sIC8vIExvZ2l0ZWNoIENvcmRsZXNzIHJ1bWJsZSBwYWQgMgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0hJRF9QSUQKKwl7MHg0NWUsIDB4MDAxYiwgaGlkX3BpZF9pbml0fSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19USFJVU1RNQVNURVJfRkYKKwl7MHg0NGYsIDB4YjMwNCwgaGlkX3RtZmZfaW5pdH0sCisjZW5kaWYKKwl7MCwgMCwgTlVMTH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX2ZmX2luaXRpYWxpemVyICpoaWRfZ2V0X2ZmX2luaXQoX191MTYgaWRWZW5kb3IsCisJCQkJCQkgIF9fdTE2IGlkUHJvZHVjdCkKK3sKKwlzdHJ1Y3QgaGlkX2ZmX2luaXRpYWxpemVyICppbml0OworCWZvciAoaW5pdCA9IGluaXRzOworCSAgICAgaW5pdC0+aWRWZW5kb3IKKwkgICAgICYmICEoaW5pdC0+aWRWZW5kb3IgPT0gaWRWZW5kb3IKKwkJICAmJiBpbml0LT5pZFByb2R1Y3QgPT0gaWRQcm9kdWN0KTsKKwkgICAgIGluaXQrKyk7CisKKwlyZXR1cm4gaW5pdC0+aWRWZW5kb3I/IGluaXQgOiBOVUxMOworfQorCitpbnQgaGlkX2ZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UqIGhpZCkKK3sKKwlzdHJ1Y3QgaGlkX2ZmX2luaXRpYWxpemVyICppbml0OworCisJaW5pdCA9IGhpZF9nZXRfZmZfaW5pdChsZTE2X3RvX2NwdShoaWQtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCQkgICAgICAgbGUxNl90b19jcHUoaGlkLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisKKwlpZiAoIWluaXQpIHsKKwkJZGJnKCJoaWRfZmZfaW5pdCBjb3VsZCBub3QgZmluZCBpbml0aWFsaXplciIpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisJcmV0dXJuIGluaXQtPmluaXQoaGlkKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1pbnB1dC5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWlucHV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU1M2MzNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1pbnB1dC5jCkBAIC0wLDAgKzEsNjMwIEBACisvKgorICogJElkOiBoaWQtaW5wdXQuYyx2IDEuMiAyMDAyLzA0LzIzIDAwOjU5OjI1IHJkYW1hemlvIEV4cCAkCisgKgorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDAxIFZvanRlY2ggUGF2bGlrCisgKgorICogIFVTQiBISUQgdG8gTGludXggSW5wdXQgbWFwcGluZworICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqIFNob3VsZCB5b3UgbmVlZCB0byBjb250YWN0IG1lLCB0aGUgYXV0aG9yLCB5b3UgY2FuIGRvIHNvIGVpdGhlciBieQorICogZS1tYWlsIC0gbWFpbCB5b3VyIG1lc3NhZ2UgdG8gPHZvanRlY2hAdWN3LmN6Piwgb3IgYnkgcGFwZXIgbWFpbDoKKyAqIFZvanRlY2ggUGF2bGlrLCBTaW11bmtvdmEgMTU5NCwgUHJhZ3VlIDgsIDE4MiAwMCBDemVjaCBSZXB1YmxpYworICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI3VuZGVmIERFQlVHCisKKyNpbmNsdWRlICJoaWQuaCIKKworI2RlZmluZSB1bmsJS0VZX1VOS05PV04KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgaGlkX2tleWJvYXJkWzI1Nl0gPSB7CisJICAwLCAgMCwgIDAsICAwLCAzMCwgNDgsIDQ2LCAzMiwgMTgsIDMzLCAzNCwgMzUsIDIzLCAzNiwgMzcsIDM4LAorCSA1MCwgNDksIDI0LCAyNSwgMTYsIDE5LCAzMSwgMjAsIDIyLCA0NywgMTcsIDQ1LCAyMSwgNDQsICAyLCAgMywKKwkgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgMTAsIDExLCAyOCwgIDEsIDE0LCAxNSwgNTcsIDEyLCAxMywgMjYsCisJIDI3LCA0MywgNDMsIDM5LCA0MCwgNDEsIDUxLCA1MiwgNTMsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LAorCSA2NSwgNjYsIDY3LCA2OCwgODcsIDg4LCA5OSwgNzAsMTE5LDExMCwxMDIsMTA0LDExMSwxMDcsMTA5LDEwNiwKKwkxMDUsMTA4LDEwMywgNjksIDk4LCA1NSwgNzQsIDc4LCA5NiwgNzksIDgwLCA4MSwgNzUsIDc2LCA3NywgNzEsCisJIDcyLCA3MywgODIsIDgzLCA4NiwxMjcsMTE2LDExNywxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLAorCTE5MSwxOTIsMTkzLDE5NCwxMzQsMTM4LDEzMCwxMzIsMTI4LDEyOSwxMzEsMTM3LDEzMywxMzUsMTM2LDExMywKKwkxMTUsMTE0LHVuayx1bmssdW5rLDEyMSx1bmssIDg5LCA5MywxMjQsIDkyLCA5NCwgOTUsdW5rLHVuayx1bmssCisJMTIyLDEyMywgOTAsIDkxLCA4NSx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLAorCXVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuaywKKwl1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssCisJdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLAorCXVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuayx1bmssdW5rLHVuaywKKwkgMjksIDQyLCA1NiwxMjUsIDk3LCA1NCwxMDAsMTI2LDE2NCwxNjYsMTY1LDE2MywxNjEsMTE1LDExNCwxMTMsCisJMTUwLDE1OCwxNTksMTI4LDEzNiwxNzcsMTc4LDE3NiwxNDIsMTUyLDE3MywxNDAsdW5rLHVuayx1bmssdW5rCit9OworCitzdGF0aWMgc3RydWN0IHsKKwlfX3MzMiB4OworCV9fczMyIHk7Cit9ICBoaWRfaGF0X3RvX2F4aXNbXSA9IHt7IDAsIDB9LCB7IDAsLTF9LCB7IDEsLTF9LCB7IDEsIDB9LCB7IDEsIDF9LCB7IDAsIDF9LCB7LTEsIDF9LCB7LTEsIDB9LCB7LTEsLTF9fTsKKworI2RlZmluZSBtYXBfYWJzKGMpCWRvIHsgdXNhZ2UtPmNvZGUgPSBjOyB1c2FnZS0+dHlwZSA9IEVWX0FCUzsgYml0ID0gaW5wdXQtPmFic2JpdDsgbWF4ID0gQUJTX01BWDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbWFwX3JlbChjKQlkbyB7IHVzYWdlLT5jb2RlID0gYzsgdXNhZ2UtPnR5cGUgPSBFVl9SRUw7IGJpdCA9IGlucHV0LT5yZWxiaXQ7IG1heCA9IFJFTF9NQVg7IH0gd2hpbGUgKDApCisjZGVmaW5lIG1hcF9rZXkoYykJZG8geyB1c2FnZS0+Y29kZSA9IGM7IHVzYWdlLT50eXBlID0gRVZfS0VZOyBiaXQgPSBpbnB1dC0+a2V5Yml0OyBtYXggPSBLRVlfTUFYOyB9IHdoaWxlICgwKQorI2RlZmluZSBtYXBfbGVkKGMpCWRvIHsgdXNhZ2UtPmNvZGUgPSBjOyB1c2FnZS0+dHlwZSA9IEVWX0xFRDsgYml0ID0gaW5wdXQtPmxlZGJpdDsgbWF4ID0gTEVEX01BWDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbWFwX2ZmKGMpCWRvIHsgdXNhZ2UtPmNvZGUgPSBjOyB1c2FnZS0+dHlwZSA9IEVWX0ZGOyAgYml0ID0gaW5wdXQtPmZmYml0OyAgbWF4ID0gIEZGX01BWDsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBtYXBfYWJzX2NsZWFyKGMpCWRvIHsgbWFwX2FicyhjKTsgY2xlYXJfYml0KGMsIGJpdCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIG1hcF9rZXlfY2xlYXIoYykJZG8geyBtYXBfa2V5KGMpOyBjbGVhcl9iaXQoYywgYml0KTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbWFwX2ZmX2VmZmVjdChjKQlkbyB7IHNldF9iaXQoYywgaW5wdXQtPmZmYml0KTsgfSB3aGlsZSAoMCkKKworc3RhdGljIHZvaWQgaGlkaW5wdXRfY29uZmlndXJlX3VzYWdlKHN0cnVjdCBoaWRfaW5wdXQgKmhpZGlucHV0LCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKKwkJCQkgICAgIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gJmhpZGlucHV0LT5pbnB1dDsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlID0gaGlkaW5wdXQtPmlucHV0LnByaXZhdGU7CisJaW50IG1heCwgY29kZTsKKwl1bnNpZ25lZCBsb25nICpiaXQ7CisKKwlmaWVsZC0+aGlkaW5wdXQgPSBoaWRpbnB1dDsKKworI2lmZGVmIERFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIk1hcHBpbmc6ICIpOworCXJlc29sdl91c2FnZSh1c2FnZS0+aGlkKTsKKwlwcmludGsoIiAtLS0+ICIpOworI2VuZGlmCisKKwlpZiAoZmllbGQtPmZsYWdzICYgSElEX01BSU5fSVRFTV9DT05TVEFOVCkKKwkJZ290byBpZ25vcmU7CisKKwlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgeworCisJCWNhc2UgSElEX1VQX1VOREVGSU5FRDoKKwkJCWdvdG8gaWdub3JlOworCisJCWNhc2UgSElEX1VQX0tFWUJPQVJEOgorCisJCQlzZXRfYml0KEVWX1JFUCwgaW5wdXQtPmV2Yml0KTsKKworCQkJaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSA8IDI1NikgeworCQkJCWlmICghaGlkX2tleWJvYXJkW3VzYWdlLT5oaWQgJiBISURfVVNBR0VdKSBnb3RvIGlnbm9yZTsKKwkJCQltYXBfa2V5X2NsZWFyKGhpZF9rZXlib2FyZFt1c2FnZS0+aGlkICYgSElEX1VTQUdFXSk7CisJCQl9IGVsc2UKKwkJCQltYXBfa2V5KEtFWV9VTktOT1dOKTsKKworCQkJYnJlYWs7CisKKwkJY2FzZSBISURfVVBfQlVUVE9OOgorCisJCQljb2RlID0gKCh1c2FnZS0+aGlkIC0gMSkgJiAweGYpOworCisJCQlzd2l0Y2ggKGZpZWxkLT5hcHBsaWNhdGlvbikgeworCQkJCWNhc2UgSElEX0dEX01PVVNFOgorCQkJCWNhc2UgSElEX0dEX1BPSU5URVI6ICBjb2RlICs9IDB4MTEwOyBicmVhazsKKwkJCQljYXNlIEhJRF9HRF9KT1lTVElDSzogY29kZSArPSAweDEyMDsgYnJlYWs7CisJCQkJY2FzZSBISURfR0RfR0FNRVBBRDogIGNvZGUgKz0gMHgxMzA7IGJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCXN3aXRjaCAoZmllbGQtPnBoeXNpY2FsKSB7CisJCQkJCQljYXNlIEhJRF9HRF9NT1VTRToKKwkJCQkJCWNhc2UgSElEX0dEX1BPSU5URVI6ICBjb2RlICs9IDB4MTEwOyBicmVhazsKKwkJCQkJCWNhc2UgSElEX0dEX0pPWVNUSUNLOiBjb2RlICs9IDB4MTIwOyBicmVhazsKKwkJCQkJCWNhc2UgSElEX0dEX0dBTUVQQUQ6ICBjb2RlICs9IDB4MTMwOyBicmVhazsKKwkJCQkJCWRlZmF1bHQ6ICAgICAgICAgICAgICBjb2RlICs9IDB4MTAwOworCQkJCQl9CisJCQl9CisKKwkJCW1hcF9rZXkoY29kZSk7CisJCQlicmVhazsKKworCQljYXNlIEhJRF9VUF9HRU5ERVNLOgorCisJCQlpZiAoKHVzYWdlLT5oaWQgJiAweGYwKSA9PSAweDgwKSB7CS8qIFN5c3RlbUNvbnRyb2wgKi8KKwkJCQlzd2l0Y2ggKHVzYWdlLT5oaWQgJiAweGYpIHsKKwkJCQkJY2FzZSAweDE6IG1hcF9rZXlfY2xlYXIoS0VZX1BPV0VSKTsgIGJyZWFrOworCQkJCQljYXNlIDB4MjogbWFwX2tleV9jbGVhcihLRVlfU0xFRVApOyAgYnJlYWs7CisJCQkJCWNhc2UgMHgzOiBtYXBfa2V5X2NsZWFyKEtFWV9XQUtFVVApOyBicmVhazsKKwkJCQkJZGVmYXVsdDogZ290byB1bmtub3duOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKCh1c2FnZS0+aGlkICYgMHhmMCkgPT0gMHg5MCkgewkvKiBELXBhZCAqLworCQkJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCQkJCQljYXNlIEhJRF9HRF9VUDoJICAgdXNhZ2UtPmhhdF9kaXIgPSAxOyBicmVhazsKKwkJCQkJY2FzZSBISURfR0RfRE9XTjogIHVzYWdlLT5oYXRfZGlyID0gNTsgYnJlYWs7CisJCQkJCWNhc2UgSElEX0dEX1JJR0hUOiB1c2FnZS0+aGF0X2RpciA9IDM7IGJyZWFrOworCQkJCQljYXNlIEhJRF9HRF9MRUZUOiAgdXNhZ2UtPmhhdF9kaXIgPSA3OyBicmVhazsKKwkJCQkJZGVmYXVsdDogZ290byB1bmtub3duOworCQkJCX0KKwkJCQlpZiAoZmllbGQtPmRwYWQpIHsKKwkJCQkJbWFwX2FicyhmaWVsZC0+ZHBhZCk7CisJCQkJCWdvdG8gaWdub3JlOworCQkJCX0KKwkJCQltYXBfYWJzKEFCU19IQVQwWCk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXN3aXRjaCAodXNhZ2UtPmhpZCkgeworCisJCQkJLyogVGhlc2UgdXNhZ2UgSURzIG1hcCBkaXJlY3RseSB0byB0aGUgdXNhZ2UgY29kZXMuICovCisJCQkJY2FzZSBISURfR0RfWDogY2FzZSBISURfR0RfWTogY2FzZSBISURfR0RfWjoKKwkJCQljYXNlIEhJRF9HRF9SWDogY2FzZSBISURfR0RfUlk6IGNhc2UgSElEX0dEX1JaOgorCQkJCWNhc2UgSElEX0dEX1NMSURFUjogY2FzZSBISURfR0RfRElBTDogY2FzZSBISURfR0RfV0hFRUw6CisJCQkJCWlmIChmaWVsZC0+ZmxhZ3MgJiBISURfTUFJTl9JVEVNX1JFTEFUSVZFKSAKKwkJCQkJCW1hcF9yZWwodXNhZ2UtPmhpZCAmIDB4Zik7CisJCQkJCWVsc2UKKwkJCQkJCW1hcF9hYnModXNhZ2UtPmhpZCAmIDB4Zik7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBISURfR0RfSEFUU1dJVENIOgorCQkJCQl1c2FnZS0+aGF0X21pbiA9IGZpZWxkLT5sb2dpY2FsX21pbmltdW07CisJCQkJCXVzYWdlLT5oYXRfbWF4ID0gZmllbGQtPmxvZ2ljYWxfbWF4aW11bTsKKwkJCQkJbWFwX2FicyhBQlNfSEFUMFgpOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgSElEX0dEX1NUQVJUOgltYXBfa2V5X2NsZWFyKEJUTl9TVEFSVCk7CWJyZWFrOworCQkJCWNhc2UgSElEX0dEX1NFTEVDVDoJbWFwX2tleV9jbGVhcihCVE5fU0VMRUNUKTsJYnJlYWs7CisKKwkJCQlkZWZhdWx0OiBnb3RvIHVua25vd247CisJCQl9CisKKwkJCWJyZWFrOworCisJCWNhc2UgSElEX1VQX0xFRDoKKwkJCWlmICgoKHVzYWdlLT5oaWQgLSAxKSAmIDB4ZmZmZikgPj0gTEVEX01BWCkKKwkJCQlnb3RvIGlnbm9yZTsKKwkJCW1hcF9sZWQoKHVzYWdlLT5oaWQgLSAxKSAmIDB4ZmZmZik7CisJCQlicmVhazsKKworCQljYXNlIEhJRF9VUF9ESUdJVElaRVI6CisKKwkJCXN3aXRjaCAodXNhZ2UtPmhpZCAmIDB4ZmYpIHsKKworCQkJCWNhc2UgMHgzMDogLyogVGlwUHJlc3N1cmUgKi8KKwkJCQkJaWYgKCF0ZXN0X2JpdChCVE5fVE9VQ0gsIGlucHV0LT5rZXliaXQpKSB7CisJCQkJCQlkZXZpY2UtPnF1aXJrcyB8PSBISURfUVVJUktfTk9UT1VDSDsKKwkJCQkJCXNldF9iaXQoRVZfS0VZLCBpbnB1dC0+ZXZiaXQpOworCQkJCQkJc2V0X2JpdChCVE5fVE9VQ0gsIGlucHV0LT5rZXliaXQpOworCQkJCQl9CisKKwkJCQkJbWFwX2Fic19jbGVhcihBQlNfUFJFU1NVUkUpOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgMHgzMjogLyogSW5SYW5nZSAqLworCQkJCQlzd2l0Y2ggKGZpZWxkLT5waHlzaWNhbCAmIDB4ZmYpIHsKKwkJCQkJCWNhc2UgMHgyMTogbWFwX2tleShCVE5fVE9PTF9NT1VTRSk7IGJyZWFrOworCQkJCQkJY2FzZSAweDIyOiBtYXBfa2V5KEJUTl9UT09MX0ZJTkdFUik7IGJyZWFrOworCQkJCQkJZGVmYXVsdDogbWFwX2tleShCVE5fVE9PTF9QRU4pOyBicmVhazsKKwkJCQkJfQorCQkJCQlicmVhazsKKworCQkJCWNhc2UgMHgzYzogLyogSW52ZXJ0ICovCisJCQkJCW1hcF9rZXlfY2xlYXIoQlROX1RPT0xfUlVCQkVSKTsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDB4MzM6IC8qIFRvdWNoICovCisJCQkJY2FzZSAweDQyOiAvKiBUaXBTd2l0Y2ggKi8KKwkJCQljYXNlIDB4NDM6IC8qIFRpcFN3aXRjaDIgKi8KKwkJCQkJZGV2aWNlLT5xdWlya3MgJj0gfkhJRF9RVUlSS19OT1RPVUNIOworCQkJCQltYXBfa2V5X2NsZWFyKEJUTl9UT1VDSCk7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSAweDQ0OiAvKiBCYXJyZWxTd2l0Y2ggKi8KKwkJCQkJbWFwX2tleV9jbGVhcihCVE5fU1RZTFVTKTsKKwkJCQkJYnJlYWs7CisKKwkJCQlkZWZhdWx0OiAgZ290byB1bmtub3duOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBISURfVVBfQ09OU1VNRVI6CS8qIFVTQiBIVVQgdjEuMSwgcGFnZXMgNTYtNjIgKi8KKworCQkJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7CisJCQkJY2FzZSAweDAwMDogZ290byBpZ25vcmU7CisJCQkJY2FzZSAweDAzNDogbWFwX2tleV9jbGVhcihLRVlfU0xFRVApOwkJYnJlYWs7CisJCQkJY2FzZSAweDAzNjogbWFwX2tleV9jbGVhcihCVE5fTUlTQyk7CQlicmVhazsKKwkJCQljYXNlIDB4MDhhOiBtYXBfa2V5X2NsZWFyKEtFWV9XV1cpOwkJYnJlYWs7CisJCQkJY2FzZSAweDA5NTogbWFwX2tleV9jbGVhcihLRVlfSEVMUCk7CQlicmVhazsKKwkJCQljYXNlIDB4MGIwOiBtYXBfa2V5X2NsZWFyKEtFWV9QTEFZKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwYjE6IG1hcF9rZXlfY2xlYXIoS0VZX1BBVVNFKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwYjI6IG1hcF9rZXlfY2xlYXIoS0VZX1JFQ09SRCk7CQlicmVhazsKKwkJCQljYXNlIDB4MGIzOiBtYXBfa2V5X2NsZWFyKEtFWV9GQVNURk9SV0FSRCk7CWJyZWFrOworCQkJCWNhc2UgMHgwYjQ6IG1hcF9rZXlfY2xlYXIoS0VZX1JFV0lORCk7CQlicmVhazsKKwkJCQljYXNlIDB4MGI1OiBtYXBfa2V5X2NsZWFyKEtFWV9ORVhUU09ORyk7CWJyZWFrOworCQkJCWNhc2UgMHgwYjY6IG1hcF9rZXlfY2xlYXIoS0VZX1BSRVZJT1VTU09ORyk7CWJyZWFrOworCQkJCWNhc2UgMHgwYjc6IG1hcF9rZXlfY2xlYXIoS0VZX1NUT1BDRCk7CQlicmVhazsKKwkJCQljYXNlIDB4MGI4OiBtYXBfa2V5X2NsZWFyKEtFWV9FSkVDVENEKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwY2Q6IG1hcF9rZXlfY2xlYXIoS0VZX1BMQVlQQVVTRSk7CWJyZWFrOworCQkJICAgICAgICBjYXNlIDB4MGUwOiBtYXBfYWJzX2NsZWFyKEFCU19WT0xVTUUpOwkJYnJlYWs7CisJCQkJY2FzZSAweDBlMjogbWFwX2tleV9jbGVhcihLRVlfTVVURSk7CQlicmVhazsKKwkJCQljYXNlIDB4MGU1OiBtYXBfa2V5X2NsZWFyKEtFWV9CQVNTQk9PU1QpOwlicmVhazsKKwkJCQljYXNlIDB4MGU5OiBtYXBfa2V5X2NsZWFyKEtFWV9WT0xVTUVVUCk7CWJyZWFrOworCQkJCWNhc2UgMHgwZWE6IG1hcF9rZXlfY2xlYXIoS0VZX1ZPTFVNRURPV04pOwlicmVhazsKKwkJCQljYXNlIDB4MTgzOiBtYXBfa2V5X2NsZWFyKEtFWV9DT05GSUcpOwkJYnJlYWs7CisJCQkJY2FzZSAweDE4YTogbWFwX2tleV9jbGVhcihLRVlfTUFJTCk7CQlicmVhazsKKwkJCQljYXNlIDB4MTkyOiBtYXBfa2V5X2NsZWFyKEtFWV9DQUxDKTsJCWJyZWFrOworCQkJCWNhc2UgMHgxOTQ6IG1hcF9rZXlfY2xlYXIoS0VZX0ZJTEUpOwkJYnJlYWs7CisJCQkJY2FzZSAweDIxYTogbWFwX2tleV9jbGVhcihLRVlfVU5ETyk7CQlicmVhazsKKwkJCQljYXNlIDB4MjFiOiBtYXBfa2V5X2NsZWFyKEtFWV9DT1BZKTsJCWJyZWFrOworCQkJCWNhc2UgMHgyMWM6IG1hcF9rZXlfY2xlYXIoS0VZX0NVVCk7CQlicmVhazsKKwkJCQljYXNlIDB4MjFkOiBtYXBfa2V5X2NsZWFyKEtFWV9QQVNURSk7CQlicmVhazsKKwkJCQljYXNlIDB4MjIxOiBtYXBfa2V5X2NsZWFyKEtFWV9GSU5EKTsJCWJyZWFrOworCQkJCWNhc2UgMHgyMjM6IG1hcF9rZXlfY2xlYXIoS0VZX0hPTUVQQUdFKTsJYnJlYWs7CisJCQkJY2FzZSAweDIyNDogbWFwX2tleV9jbGVhcihLRVlfQkFDSyk7CQlicmVhazsKKwkJCQljYXNlIDB4MjI1OiBtYXBfa2V5X2NsZWFyKEtFWV9GT1JXQVJEKTsJCWJyZWFrOworCQkJCWNhc2UgMHgyMjY6IG1hcF9rZXlfY2xlYXIoS0VZX1NUT1ApOwkJYnJlYWs7CisJCQkJY2FzZSAweDIyNzogbWFwX2tleV9jbGVhcihLRVlfUkVGUkVTSCk7CQlicmVhazsKKwkJCQljYXNlIDB4MjJhOiBtYXBfa2V5X2NsZWFyKEtFWV9CT09LTUFSS1MpOwlicmVhazsKKwkJCQljYXNlIDB4MjM4OiBtYXBfcmVsKFJFTF9IV0hFRUwpOwkJYnJlYWs7CisJCQkJZGVmYXVsdDogICAgZ290byB1bmtub3duOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBISURfVVBfSFBWRU5ET1I6CS8qIFJlcG9ydGVkIG9uIGEgRHV0Y2ggbGF5b3V0IEhQNTMwOCAqLworCisJCQlzZXRfYml0KEVWX1JFUCwgaW5wdXQtPmV2Yml0KTsKKwkJCXN3aXRjaCAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRSkgeworCQkJICAgICAgICBjYXNlIDB4MDIxOiBtYXBfa2V5X2NsZWFyKEtFWV9QUklOVCk7ICAgICAgICAgICBicmVhazsKKwkJCQljYXNlIDB4MDcwOiBtYXBfa2V5X2NsZWFyKEtFWV9IUCk7CQlicmVhazsKKwkJCQljYXNlIDB4MDcxOiBtYXBfa2V5X2NsZWFyKEtFWV9DQU1FUkEpOwkJYnJlYWs7CisJCQkJY2FzZSAweDA3MjogbWFwX2tleV9jbGVhcihLRVlfU09VTkQpOwkJYnJlYWs7CisJCQkJY2FzZSAweDA3MzogbWFwX2tleV9jbGVhcihLRVlfUVVFU1RJT04pOwlicmVhazsKKwkJCQljYXNlIDB4MDgwOiBtYXBfa2V5X2NsZWFyKEtFWV9FTUFJTCk7CQlicmVhazsKKwkJCQljYXNlIDB4MDgxOiBtYXBfa2V5X2NsZWFyKEtFWV9DSEFUKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwODI6IG1hcF9rZXlfY2xlYXIoS0VZX1NFQVJDSCk7CQlicmVhazsKKwkJCQljYXNlIDB4MDgzOiBtYXBfa2V5X2NsZWFyKEtFWV9DT05ORUNUKTsJICAgICAgICBicmVhazsKKwkJCQljYXNlIDB4MDg0OiBtYXBfa2V5X2NsZWFyKEtFWV9GSU5BTkNFKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwODU6IG1hcF9rZXlfY2xlYXIoS0VZX1NQT1JUKTsJCWJyZWFrOworCQkJCWNhc2UgMHgwODY6IG1hcF9rZXlfY2xlYXIoS0VZX1NIT1ApOwkgICAgICAgIGJyZWFrOworCQkJCWRlZmF1bHQ6ICAgIGdvdG8gaWdub3JlOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBISURfVVBfTVNWRU5ET1I6CisKKwkJCWdvdG8gaWdub3JlOworCQkJCisJCWNhc2UgSElEX1VQX1BJRDoKKworCQkJc2V0X2JpdChFVl9GRiwgaW5wdXQtPmV2Yml0KTsKKwkJCXN3aXRjaCh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7CisJCQkJY2FzZSAweDI2OiBtYXBfZmZfZWZmZWN0KEZGX0NPTlNUQU5UKTsJZ290byBpZ25vcmU7CisJCQkJY2FzZSAweDI3OiBtYXBfZmZfZWZmZWN0KEZGX1JBTVApOwlnb3RvIGlnbm9yZTsKKwkJCQljYXNlIDB4Mjg6IG1hcF9mZl9lZmZlY3QoRkZfQ1VTVE9NKTsJZ290byBpZ25vcmU7CisJCQkJY2FzZSAweDMwOiBtYXBfZmZfZWZmZWN0KEZGX1NRVUFSRSk7CW1hcF9mZl9lZmZlY3QoRkZfUEVSSU9ESUMpOyBnb3RvIGlnbm9yZTsKKwkJCQljYXNlIDB4MzE6IG1hcF9mZl9lZmZlY3QoRkZfU0lORSk7CW1hcF9mZl9lZmZlY3QoRkZfUEVSSU9ESUMpOyBnb3RvIGlnbm9yZTsKKwkJCQljYXNlIDB4MzI6IG1hcF9mZl9lZmZlY3QoRkZfVFJJQU5HTEUpOwltYXBfZmZfZWZmZWN0KEZGX1BFUklPRElDKTsgZ290byBpZ25vcmU7CisJCQkJY2FzZSAweDMzOiBtYXBfZmZfZWZmZWN0KEZGX1NBV19VUCk7CW1hcF9mZl9lZmZlY3QoRkZfUEVSSU9ESUMpOyBnb3RvIGlnbm9yZTsKKwkJCQljYXNlIDB4MzQ6IG1hcF9mZl9lZmZlY3QoRkZfU0FXX0RPV04pOwltYXBfZmZfZWZmZWN0KEZGX1BFUklPRElDKTsgZ290byBpZ25vcmU7CisJCQkJY2FzZSAweDQwOiBtYXBfZmZfZWZmZWN0KEZGX1NQUklORyk7CWdvdG8gaWdub3JlOworCQkJCWNhc2UgMHg0MTogbWFwX2ZmX2VmZmVjdChGRl9EQU1QRVIpOwlnb3RvIGlnbm9yZTsKKwkJCQljYXNlIDB4NDI6IG1hcF9mZl9lZmZlY3QoRkZfSU5FUlRJQSk7CWdvdG8gaWdub3JlOworCQkJCWNhc2UgMHg0MzogbWFwX2ZmX2VmZmVjdChGRl9GUklDVElPTik7CWdvdG8gaWdub3JlOworCQkJCWNhc2UgMHg3ZTogbWFwX2ZmKEZGX0dBSU4pOwkJYnJlYWs7CisJCQkJY2FzZSAweDgzOiBpbnB1dC0+ZmZfZWZmZWN0c19tYXggPSBmaWVsZC0+dmFsdWVbMF07IGdvdG8gaWdub3JlOworCQkJCWNhc2UgMHg5ODogbWFwX2ZmKEZGX0FVVE9DRU5URVIpOwlicmVhazsKKwkJCQljYXNlIDB4YTQ6IG1hcF9rZXlfY2xlYXIoQlROX0RFQUQpOwlicmVhazsKKwkJCQlkZWZhdWx0OiBnb3RvIGlnbm9yZTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCXVua25vd246CisJCQlpZiAoZmllbGQtPnJlcG9ydF9zaXplID09IDEpIHsKKwkJCQlpZiAoZmllbGQtPnJlcG9ydC0+dHlwZSA9PSBISURfT1VUUFVUX1JFUE9SVCkgeworCQkJCQltYXBfbGVkKExFRF9NSVNDKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCW1hcF9rZXkoQlROX01JU0MpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGZpZWxkLT5mbGFncyAmIEhJRF9NQUlOX0lURU1fUkVMQVRJVkUpIHsKKwkJCQltYXBfcmVsKFJFTF9NSVNDKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW1hcF9hYnMoQUJTX01JU0MpOworCQkJYnJlYWs7CisJfQorCisJc2V0X2JpdCh1c2FnZS0+dHlwZSwgaW5wdXQtPmV2Yml0KTsKKworCXdoaWxlICh1c2FnZS0+Y29kZSA8PSBtYXggJiYgdGVzdF9hbmRfc2V0X2JpdCh1c2FnZS0+Y29kZSwgYml0KSkKKwkJdXNhZ2UtPmNvZGUgPSBmaW5kX25leHRfemVyb19iaXQoYml0LCBtYXggKyAxLCB1c2FnZS0+Y29kZSk7CisKKwlpZiAodXNhZ2UtPmNvZGUgPiBtYXgpCisJCWdvdG8gaWdub3JlOworCisJaWYgKChkZXZpY2UtPnF1aXJrcyAmIChISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfNyB8IEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS181KSkgJiYKKwkJICh1c2FnZS0+dHlwZSA9PSBFVl9SRUwpICYmICh1c2FnZS0+Y29kZSA9PSBSRUxfV0hFRUwpKSAKKwkJCXNldF9iaXQoUkVMX0hXSEVFTCwgYml0KTsKKworCWlmICgoKGRldmljZS0+cXVpcmtzICYgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzUpICYmICh1c2FnZS0+aGlkID09IDB4MDAwOTAwMDUpKQorCQl8fCAoKGRldmljZS0+cXVpcmtzICYgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzcpICYmICh1c2FnZS0+aGlkID09IDB4MDAwOTAwMDcpKSkKKwkJZ290byBpZ25vcmU7CisKKwlpZiAodXNhZ2UtPnR5cGUgPT0gRVZfQUJTKSB7CisKKwkJaW50IGEgPSBmaWVsZC0+bG9naWNhbF9taW5pbXVtOworCQlpbnQgYiA9IGZpZWxkLT5sb2dpY2FsX21heGltdW07CisKKwkJaWYgKChkZXZpY2UtPnF1aXJrcyAmIEhJRF9RVUlSS19CQURQQUQpICYmICh1c2FnZS0+Y29kZSA9PSBBQlNfWCB8fCB1c2FnZS0+Y29kZSA9PSBBQlNfWSkpIHsKKwkJCWEgPSBmaWVsZC0+bG9naWNhbF9taW5pbXVtID0gMDsKKwkJCWIgPSBmaWVsZC0+bG9naWNhbF9tYXhpbXVtID0gMjU1OworCQl9CisJCQorCQlpZiAoZmllbGQtPmFwcGxpY2F0aW9uID09IEhJRF9HRF9HQU1FUEFEIHx8IGZpZWxkLT5hcHBsaWNhdGlvbiA9PSBISURfR0RfSk9ZU1RJQ0spCisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgdXNhZ2UtPmNvZGUsIGEsIGIsIChiIC0gYSkgPj4gOCwgKGIgLSBhKSA+PiA0KTsKKwkJZWxzZQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgdXNhZ2UtPmNvZGUsIGEsIGIsIDAsIDApOworCQkKKwl9CisKKwlpZiAodXNhZ2UtPmhhdF9taW4gPCB1c2FnZS0+aGF0X21heCB8fCB1c2FnZS0+aGF0X2RpcikgeworCQlpbnQgaTsKKwkJZm9yIChpID0gdXNhZ2UtPmNvZGU7IGkgPCB1c2FnZS0+Y29kZSArIDIgJiYgaSA8PSBtYXg7IGkrKykgeworCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIGksIC0xLCAxLCAwLCAwKTsKKwkJCXNldF9iaXQoaSwgaW5wdXQtPmFic2JpdCk7CisJCX0KKwkJaWYgKHVzYWdlLT5oYXRfZGlyICYmICFmaWVsZC0+ZHBhZCkKKwkJCWZpZWxkLT5kcGFkID0gdXNhZ2UtPmNvZGU7CisJfQorCisjaWZkZWYgREVCVUcKKwlyZXNvbHZfZXZlbnQodXNhZ2UtPnR5cGUsIHVzYWdlLT5jb2RlKTsKKwlwcmludGsoIlxuIik7CisjZW5kaWYKKwlyZXR1cm47CisKK2lnbm9yZToKKyNpZmRlZiBERUJVRworCXByaW50aygiSUdOT1JFRFxuIik7CisjZW5kaWYKKwlyZXR1cm47Cit9CisKK3ZvaWQgaGlkaW5wdXRfaGlkX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gJmZpZWxkLT5oaWRpbnB1dC0+aW5wdXQ7CisJaW50ICpxdWlya3MgPSAmaGlkLT5xdWlya3M7CisKKwlpZiAoIWlucHV0KQorCQlyZXR1cm47CisKKwlpbnB1dF9yZWdzKGlucHV0LCByZWdzKTsKKworCWlmICghdXNhZ2UtPnR5cGUpCisJCXJldHVybjsKKworCWlmICgoKGhpZC0+cXVpcmtzICYgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzUpICYmICh1c2FnZS0+aGlkID09IDB4MDAwOTAwMDUpKQorCQl8fCAoKGhpZC0+cXVpcmtzICYgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzcpICYmICh1c2FnZS0+aGlkID09IDB4MDAwOTAwMDcpKSkgeworCQlpZiAodmFsdWUpIGhpZC0+cXVpcmtzIHw9ICBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfT047CisJCWVsc2UgICAgICAgaGlkLT5xdWlya3MgJj0gfkhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS19PTjsKKwkJcmV0dXJuOworCX0KKworCWlmICgoaGlkLT5xdWlya3MgJiBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfT04pICYmICh1c2FnZS0+Y29kZSA9PSBSRUxfV0hFRUwpKSB7CisJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgUkVMX0hXSEVFTCwgdmFsdWUpOworCQlyZXR1cm47CisJfQorCisJaWYgKHVzYWdlLT5oYXRfbWluIDwgdXNhZ2UtPmhhdF9tYXggfHwgdXNhZ2UtPmhhdF9kaXIpIHsgCisJCWludCBoYXRfZGlyID0gdXNhZ2UtPmhhdF9kaXI7CisJCWlmICghaGF0X2RpcikKKwkJCWhhdF9kaXIgPSAodmFsdWUgLSB1c2FnZS0+aGF0X21pbikgKiA4IC8gKHVzYWdlLT5oYXRfbWF4IC0gdXNhZ2UtPmhhdF9taW4gKyAxKSArIDE7CisJCWlmIChoYXRfZGlyIDwgMCB8fCBoYXRfZGlyID4gOCkgaGF0X2RpciA9IDA7CisJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdXNhZ2UtPmNvZGUgICAgLCBoaWRfaGF0X3RvX2F4aXNbaGF0X2Rpcl0ueCk7CisgICAgICAgICAgICAgICAgaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCB1c2FnZS0+Y29kZSArIDEsIGhpZF9oYXRfdG9fYXhpc1toYXRfZGlyXS55KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworCWlmICh1c2FnZS0+aGlkID09IChISURfVVBfRElHSVRJWkVSIHwgMHgwMDNjKSkgeyAvKiBJbnZlcnQgKi8KKwkJKnF1aXJrcyA9IHZhbHVlID8gKCpxdWlya3MgfCBISURfUVVJUktfSU5WRVJUKSA6ICgqcXVpcmtzICYgfkhJRF9RVUlSS19JTlZFUlQpOworCQlyZXR1cm47CisJfQorCisJaWYgKHVzYWdlLT5oaWQgPT0gKEhJRF9VUF9ESUdJVElaRVIgfCAweDAwMzIpKSB7IC8qIEluUmFuZ2UgKi8KKwkJaWYgKHZhbHVlKSB7CisJCQlpbnB1dF9ldmVudChpbnB1dCwgdXNhZ2UtPnR5cGUsICgqcXVpcmtzICYgSElEX1FVSVJLX0lOVkVSVCkgPyBCVE5fVE9PTF9SVUJCRVIgOiB1c2FnZS0+Y29kZSwgMSk7CisJCQlyZXR1cm47CisJCX0KKwkJaW5wdXRfZXZlbnQoaW5wdXQsIHVzYWdlLT50eXBlLCB1c2FnZS0+Y29kZSwgMCk7CisJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgQlROX1RPT0xfUlVCQkVSLCAwKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1c2FnZS0+aGlkID09IChISURfVVBfRElHSVRJWkVSIHwgMHgwMDMwKSAmJiAoKnF1aXJrcyAmIEhJRF9RVUlSS19OT1RPVUNIKSkgeyAvKiBQcmVzc3VyZSAqLworCQlpbnQgYSA9IGZpZWxkLT5sb2dpY2FsX21pbmltdW07CisJCWludCBiID0gZmllbGQtPmxvZ2ljYWxfbWF4aW11bTsKKwkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0tFWSwgQlROX1RPVUNILCB2YWx1ZSA+IGEgKyAoKGIgLSBhKSA+PiAzKSk7CisJfQorCisJaWYgKHVzYWdlLT5oaWQgPT0gKEhJRF9VUF9QSUQgfCAweDgzVUwpKSB7IC8qIFNpbXVsdGFuZW91cyBFZmZlY3RzIE1heCAqLworCQlpbnB1dC0+ZmZfZWZmZWN0c19tYXggPSB2YWx1ZTsKKwkJZGJnKCJNYXhpbXVtIEVmZmVjdHMgLSAlZCIsaW5wdXQtPmZmX2VmZmVjdHNfbWF4KTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1c2FnZS0+aGlkID09IChISURfVVBfUElEIHwgMHg3ZlVMKSkgeworCQlkYmcoIlBJRCBQb29sIFJlcG9ydFxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZigodXNhZ2UtPnR5cGUgPT0gRVZfS0VZKSAmJiAodXNhZ2UtPmNvZGUgPT0gMCkpIC8qIEtleSAwIGlzICJ1bmFzc2lnbmVkIiwgbm90IEtFWV9VTktOT1dOICovCisJCXJldHVybjsKKworCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdXNhZ2UtPmNvZGUsIHZhbHVlKTsKKworCWlmICgoZmllbGQtPmZsYWdzICYgSElEX01BSU5fSVRFTV9SRUxBVElWRSkgJiYgKHVzYWdlLT50eXBlID09IEVWX0tFWSkpCisJCWlucHV0X2V2ZW50KGlucHV0LCB1c2FnZS0+dHlwZSwgdXNhZ2UtPmNvZGUsIDApOworfQorCit2b2lkIGhpZGlucHV0X3JlcG9ydF9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxoOworCXN0cnVjdCBoaWRfaW5wdXQgKmhpZGlucHV0OworCisJbGlzdF9mb3JfZWFjaCAobGgsICZoaWQtPmlucHV0cykgeworCQloaWRpbnB1dCA9IGxpc3RfZW50cnkobGgsIHN0cnVjdCBoaWRfaW5wdXQsIGxpc3QpOworCQlpbnB1dF9zeW5jKCZoaWRpbnB1dC0+aW5wdXQpOworCX0KK30KKworc3RhdGljIGludCBoaWRpbnB1dF9maW5kX2ZpZWxkKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgc3RydWN0IGhpZF9maWVsZCAqKmZpZWxkKQoreworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7CisJaW50IGksIGo7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcG9ydCwgJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0LCBsaXN0KSB7CisJCWZvciAoaSA9IDA7IGkgPCByZXBvcnQtPm1heGZpZWxkOyBpKyspIHsKKwkJCSpmaWVsZCA9IHJlcG9ydC0+ZmllbGRbaV07CisJCQlmb3IgKGogPSAwOyBqIDwgKCpmaWVsZCktPm1heHVzYWdlOyBqKyspCisJCQkJaWYgKCgqZmllbGQpLT51c2FnZVtqXS50eXBlID09IHR5cGUgJiYgKCpmaWVsZCktPnVzYWdlW2pdLmNvZGUgPT0gY29kZSkKKwkJCQkJcmV0dXJuIGo7CisJCX0KKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGhpZGlucHV0X2lucHV0X2V2ZW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZDsKKwlpbnQgb2Zmc2V0OworCisJaWYgKHR5cGUgPT0gRVZfRkYpCisJCXJldHVybiBoaWRfZmZfZXZlbnQoaGlkLCBkZXYsIHR5cGUsIGNvZGUsIHZhbHVlKTsKKworCWlmICh0eXBlICE9IEVWX0xFRCkKKwkJcmV0dXJuIC0xOworCisJaWYgKChvZmZzZXQgPSBoaWRpbnB1dF9maW5kX2ZpZWxkKGhpZCwgdHlwZSwgY29kZSwgJmZpZWxkKSkgPT0gLTEpIHsKKwkJd2FybigiZXZlbnQgZmllbGQgbm90IGZvdW5kIik7CisJCXJldHVybiAtMTsKKwl9CisKKwloaWRfc2V0X2ZpZWxkKGZpZWxkLCBvZmZzZXQsIHZhbHVlKTsKKwloaWRfc3VibWl0X3JlcG9ydChoaWQsIGZpZWxkLT5yZXBvcnQsIFVTQl9ESVJfT1VUKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpZGlucHV0X29wZW4oc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBkZXYtPnByaXZhdGU7CisJcmV0dXJuIGhpZF9vcGVuKGhpZCk7Cit9CisKK3N0YXRpYyB2b2lkIGhpZGlucHV0X2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gZGV2LT5wcml2YXRlOworCWhpZF9jbG9zZShoaWQpOworfQorCisvKgorICogUmVnaXN0ZXIgdGhlIGlucHV0IGRldmljZTsgcHJpbnQgYSBtZXNzYWdlLgorICogQ29uZmlndXJlIHRoZSBpbnB1dCBsYXllciBpbnRlcmZhY2UKKyAqIFJlYWQgYWxsIHJlcG9ydHMgYW5kIGluaXRpYWxpemUgdGhlIGFic29sdXRlIGZpZWxkIHZhbHVlcy4KKyAqLworCitpbnQgaGlkaW5wdXRfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBoaWQtPmRldjsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCXN0cnVjdCBoaWRfaW5wdXQgKmhpZGlucHV0ID0gTlVMTDsKKwlpbnQgaSwgaiwgazsKKworCUlOSVRfTElTVF9IRUFEKCZoaWQtPmlucHV0cyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaGlkLT5tYXhjb2xsZWN0aW9uOyBpKyspCisJCWlmIChoaWQtPmNvbGxlY3Rpb25baV0udHlwZSA9PSBISURfQ09MTEVDVElPTl9BUFBMSUNBVElPTiB8fAorCQkgICAgaGlkLT5jb2xsZWN0aW9uW2ldLnR5cGUgPT0gSElEX0NPTExFQ1RJT05fUEhZU0lDQUwpCisJCSAgICAJaWYgKElTX0lOUFVUX0FQUExJQ0FUSU9OKGhpZC0+Y29sbGVjdGlvbltpXS51c2FnZSkpCisJCQkJYnJlYWs7CisKKwlpZiAoaSA9PSBoaWQtPm1heGNvbGxlY3Rpb24pCisJCXJldHVybiAtMTsKKworCWZvciAoayA9IEhJRF9JTlBVVF9SRVBPUlQ7IGsgPD0gSElEX09VVFBVVF9SRVBPUlQ7IGsrKykKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXBvcnQsICZoaWQtPnJlcG9ydF9lbnVtW2tdLnJlcG9ydF9saXN0LCBsaXN0KSB7CisKKwkJCWlmICghcmVwb3J0LT5tYXhmaWVsZCkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKCFoaWRpbnB1dCkgeworCQkJCWhpZGlucHV0ID0ga21hbGxvYyhzaXplb2YoKmhpZGlucHV0KSwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKCFoaWRpbnB1dCkgeworCQkJCQllcnIoIk91dCBvZiBtZW1vcnkgZHVyaW5nIGhpZCBpbnB1dCBwcm9iZSIpOworCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJCW1lbXNldChoaWRpbnB1dCwgMCwgc2l6ZW9mKCpoaWRpbnB1dCkpOworCisJCQkJbGlzdF9hZGRfdGFpbCgmaGlkaW5wdXQtPmxpc3QsICZoaWQtPmlucHV0cyk7CisKKwkJCQloaWRpbnB1dC0+aW5wdXQucHJpdmF0ZSA9IGhpZDsKKwkJCQloaWRpbnB1dC0+aW5wdXQuZXZlbnQgPSBoaWRpbnB1dF9pbnB1dF9ldmVudDsKKwkJCQloaWRpbnB1dC0+aW5wdXQub3BlbiA9IGhpZGlucHV0X29wZW47CisJCQkJaGlkaW5wdXQtPmlucHV0LmNsb3NlID0gaGlkaW5wdXRfY2xvc2U7CisKKwkJCQloaWRpbnB1dC0+aW5wdXQubmFtZSA9IGhpZC0+bmFtZTsKKwkJCQloaWRpbnB1dC0+aW5wdXQucGh5cyA9IGhpZC0+cGh5czsKKwkJCQloaWRpbnB1dC0+aW5wdXQudW5pcSA9IGhpZC0+dW5pcTsKKwkJCQloaWRpbnB1dC0+aW5wdXQuaWQuYnVzdHlwZSA9IEJVU19VU0I7CisJCQkJaGlkaW5wdXQtPmlucHV0LmlkLnZlbmRvciA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJCQkJaGlkaW5wdXQtPmlucHV0LmlkLnByb2R1Y3QgPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwkJCQloaWRpbnB1dC0+aW5wdXQuaWQudmVyc2lvbiA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCQkJCWhpZGlucHV0LT5pbnB1dC5kZXYgPSAmaGlkLT5pbnRmLT5kZXY7CisJCQl9CisKKwkJCWZvciAoaSA9IDA7IGkgPCByZXBvcnQtPm1heGZpZWxkOyBpKyspCisJCQkJZm9yIChqID0gMDsgaiA8IHJlcG9ydC0+ZmllbGRbaV0tPm1heHVzYWdlOyBqKyspCisJCQkJCWhpZGlucHV0X2NvbmZpZ3VyZV91c2FnZShoaWRpbnB1dCwgcmVwb3J0LT5maWVsZFtpXSwKKwkJCQkJCQkJIHJlcG9ydC0+ZmllbGRbaV0tPnVzYWdlICsgaik7CisJCQkKKwkJCWlmIChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS19NVUxUSV9JTlBVVCkgeworCQkJCS8qIFRoaXMgd2lsbCBsZWF2ZSBoaWRpbnB1dCBOVUxMLCBzbyB0aGF0IGl0CisJCQkJICogYWxsb2NhdGVzIGFub3RoZXIgb25lIGlmIHdlIGhhdmUgbW9yZSBpbnB1dHMgb24KKwkJCQkgKiB0aGUgc2FtZSBpbnRlcmZhY2UuIFNvbWUgZGV2aWNlcyAoZS5nLiBIYXBwJ3MKKwkJCQkgKiBVR0NJKSBjcmFtIGEgbG90IG9mIHVucmVsYXRlZCBpbnB1dHMgaW50byB0aGUKKwkJCQkgKiBzYW1lIGludGVyZmFjZS4gKi8KKwkJCQloaWRpbnB1dC0+cmVwb3J0ID0gcmVwb3J0OworCQkJCWlucHV0X3JlZ2lzdGVyX2RldmljZSgmaGlkaW5wdXQtPmlucHV0KTsKKwkJCQloaWRpbnB1dCA9IE5VTEw7CisJCQl9CisJCX0KKworCS8qIFRoaXMgb25seSBnZXRzIGNhbGxlZCB3aGVuIHdlIGFyZSBhIHNpbmdsZS1pbnB1dCAobW9zdCBvZiB0aGUKKwkgKiB0aW1lKS4gSU9XLCBub3QgYSBISURfUVVJUktfTVVMVElfSU5QVVQuIFRoZSBoaWRfZmZfaW5pdCgpIGlzCisJICogb25seSB1c2VmdWwgaW4gdGhpcyBjYXNlLCBhbmQgbm90IGZvciBtdWx0aS1pbnB1dCBxdWlya3MuICovCisJaWYgKGhpZGlucHV0KSB7CisJCWhpZF9mZl9pbml0KGhpZCk7CisJCWlucHV0X3JlZ2lzdGVyX2RldmljZSgmaGlkaW5wdXQtPmlucHV0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBoaWRpbnB1dF9kaXNjb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbGgsICpuZXh0OworCXN0cnVjdCBoaWRfaW5wdXQgKmhpZGlucHV0OworCisJbGlzdF9mb3JfZWFjaF9zYWZlKGxoLCBuZXh0LCAmaGlkLT5pbnB1dHMpIHsKKwkJaGlkaW5wdXQgPSBsaXN0X2VudHJ5KGxoLCBzdHJ1Y3QgaGlkX2lucHV0LCBsaXN0KTsKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoJmhpZGlucHV0LT5pbnB1dCk7CisJCWxpc3RfZGVsKCZoaWRpbnB1dC0+bGlzdCk7CisJCWtmcmVlKGhpZGlucHV0KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtbGdmZi5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWxnZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDc0MDRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWxnZmYuYwpAQCAtMCwwICsxLDUyOCBAQAorLyoKKyAqICQkCisgKgorICogRm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgaGlkLWNvbXBsaWFudCBmb3Igc29tZSBvZiB0aGUgZGV2aWNlcyBmcm9tCisgKiBMb2dpdGVjaCwgbmFtZWx5OgorICogLSBXaW5nTWFuIENvcmRsZXNzIFJ1bWJsZVBhZAorICogLSBXaW5nTWFuIEZvcmNlIDNECisgKgorICogIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IEpvaGFubiBEZW5ldXgKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBieQorICogZS1tYWlsIC0gbWFpbCB5b3VyIG1lc3NhZ2UgdG8gPGpvaGFubi5kZW5ldXhAaXQudXUuc2U+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworLy8jZGVmaW5lIERFQlVHCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jaXJjX2J1Zi5oPgorCisjaW5jbHVkZSAiaGlkLmgiCisjaW5jbHVkZSAiZml4cC1hcml0aC5oIgorCisKKy8qIFBlcmlvZGljaXR5IG9mIHRoZSB1cGRhdGUgKi8KKyNkZWZpbmUgUEVSSU9EIChIWi8xMCkKKworI2RlZmluZSBSVU5fQVQodCkgKGppZmZpZXMgKyAodCkpCisKKy8qIEVmZmVjdCBzdGF0dXMgKi8KKyNkZWZpbmUgRUZGRUNUX1NUQVJURUQgMCAgICAgLyogRWZmZWN0IGlzIGdvaW5nIHRvIHBsYXkgYWZ0ZXIgc29tZSB0aW1lCisJCQkJKGZmX3JlcGxheS5kZWxheSkgKi8KKyNkZWZpbmUgRUZGRUNUX1BMQVlJTkcgMSAgICAgLyogRWZmZWN0IGlzIGJlaW5nIHBsYXllZCAqLworI2RlZmluZSBFRkZFQ1RfVVNFRCAgICAyCisKKy8vIEZvciBsZ2ZmX2RldmljZTo6ZmxhZ3MKKyNkZWZpbmUgREVWSUNFX0NMT1NJTkcgMCAgICAgLyogVGhlIGRyaXZlciBpcyBiZWluZyB1bml0aWFsaXNlZCAqLworCisvKiBDaGVjayB0aGF0IHRoZSBjdXJyZW50IHByb2Nlc3MgY2FuIGFjY2VzcyBhbiBlZmZlY3QgKi8KKyNkZWZpbmUgQ0hFQ0tfT1dORVJTSElQKGVmZmVjdCkgKGN1cnJlbnQtPnBpZCA9PSAwIFwKKyAgICAgICAgfHwgZWZmZWN0Lm93bmVyID09IGN1cnJlbnQtPnBpZCkKKworI2RlZmluZSBMR0ZGX0NIRUNLX09XTkVSU0hJUChpLCBsKSBcCisgICAgICAgIChpPj0wICYmIGk8TEdGRl9FRkZFQ1RTIFwKKyAgICAgICAgJiYgdGVzdF9iaXQoRUZGRUNUX1VTRUQsIGwtPmVmZmVjdHNbaV0uZmxhZ3MpIFwKKyAgICAgICAgJiYgQ0hFQ0tfT1dORVJTSElQKGwtPmVmZmVjdHNbaV0pKQorCisjZGVmaW5lIExHRkZfRUZGRUNUUyA4CisKK3N0cnVjdCBkZXZpY2VfdHlwZSB7CisJdTE2IGlkVmVuZG9yOworCXUxNiBpZFByb2R1Y3Q7CisJc2lnbmVkIHNob3J0ICpmZjsKK307CisKK3N0cnVjdCBsZ2ZmX2VmZmVjdCB7CisJcGlkX3Qgb3duZXI7CisKKwlzdHJ1Y3QgZmZfZWZmZWN0IGVmZmVjdDsKKworCXVuc2lnbmVkIGxvbmcgZmxhZ3NbMV07CisJdW5zaWduZWQgaW50IGNvdW50OyAgICAgICAgICAvKiBOdW1iZXIgb2YgdGltZXMgbGVmdCB0byBwbGF5ICovCisJdW5zaWduZWQgbG9uZyBzdGFydGVkX2F0OyAgICAvKiBXaGVuIHRoZSBlZmZlY3Qgc3RhcnRlZCB0byBwbGF5ICovCit9OworCitzdHJ1Y3QgbGdmZl9kZXZpY2UgeworCXN0cnVjdCBoaWRfZGV2aWNlKiBoaWQ7CisKKwlzdHJ1Y3QgaGlkX3JlcG9ydCogY29uc3RhbnQ7CisJc3RydWN0IGhpZF9yZXBvcnQqIHJ1bWJsZTsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCogY29uZGl0aW9uOworCisJc3RydWN0IGxnZmZfZWZmZWN0IGVmZmVjdHNbTEdGRl9FRkZFQ1RTXTsKKwlzcGlubG9ja190IGxvY2s7ICAgICAgICAgICAgIC8qIGRldmljZS1sZXZlbCBsb2NrLiBIYXZpbmcgbG9ja3Mgb24KKwkJCQkJYSBwZXItZWZmZWN0IGJhc2lzIGNvdWxkIGJlIG5pY2UsIGJ1dAorCQkJCQlpc24ndCByZWFsbHkgbmVjZXNzYXJ5ICovCisKKwl1bnNpZ25lZCBsb25nIGZsYWdzWzFdOyAgICAgIC8qIENvbnRhaW5zIHZhcmlvdXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisJCQkJICAgICAgICBzdGF0ZSBvZiB0aGUgZHJpdmVyIGZvciB0aGlzIGRldmljZSAqLwkKKworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworfTsKKworLyogQ2FsbGJhY2tzICovCitzdGF0aWMgdm9pZCBoaWRfbGdmZl9leGl0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpOworc3RhdGljIGludCBoaWRfbGdmZl9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKKwkJCSAgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpOworc3RhdGljIGludCBoaWRfbGdmZl9mbHVzaChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCBoaWRfbGdmZl91cGxvYWRfZWZmZWN0KHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LAorCQkJCSAgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KTsKK3N0YXRpYyBpbnQgaGlkX2xnZmZfZXJhc2Uoc3RydWN0IGlucHV0X2RldiAqaW5wdXQsIGludCBpZCk7CisKKy8qIExvY2FsIGZ1bmN0aW9ucyAqLworc3RhdGljIHZvaWQgaGlkX2xnZmZfaW5wdXRfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSogaGlkKTsKK3N0YXRpYyB2b2lkIGhpZF9sZ2ZmX3RpbWVyKHVuc2lnbmVkIGxvbmcgdGltZXJfZGF0YSk7CitzdGF0aWMgc3RydWN0IGhpZF9yZXBvcnQqIGhpZF9sZ2ZmX2R1cGxpY2F0ZV9yZXBvcnQoc3RydWN0IGhpZF9yZXBvcnQqKTsKK3N0YXRpYyB2b2lkIGhpZF9sZ2ZmX2RlbGV0ZV9yZXBvcnQoc3RydWN0IGhpZF9yZXBvcnQqKTsKKworc3RhdGljIHNpZ25lZCBzaG9ydCBmZl9ydW1ibGVbXSA9IHsKKwlGRl9SVU1CTEUsCisJLTEKK307CisKK3N0YXRpYyBzaWduZWQgc2hvcnQgZmZfam95c3RpY2tbXSA9IHsKKwlGRl9DT05TVEFOVCwKKwktMQorfTsKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBkZXZpY2VzW10gPSB7CisJezB4MDQ2ZCwgMHhjMjExLCBmZl9ydW1ibGV9LAorCXsweDA0NmQsIDB4YzIxOSwgZmZfcnVtYmxlfSwKKwl7MHgwNDZkLCAweGMyODMsIGZmX2pveXN0aWNrfSwKKwl7MHgwMDAwLCAweDAwMDAsIGZmX2pveXN0aWNrfQorfTsKKworaW50IGhpZF9sZ2ZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UqIGhpZCkKK3sKKwlzdHJ1Y3QgbGdmZl9kZXZpY2UgKnByaXZhdGU7CisJc3RydWN0IGhpZF9yZXBvcnQqIHJlcG9ydDsKKwlzdHJ1Y3QgaGlkX2ZpZWxkKiBmaWVsZDsKKworCS8qIEZpbmQgdGhlIHJlcG9ydCB0byB1c2UgKi8KKwlpZiAobGlzdF9lbXB0eSgmaGlkLT5yZXBvcnRfZW51bVtISURfT1VUUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3QpKSB7CisJCWVycigiTm8gb3V0cHV0IHJlcG9ydCBmb3VuZCIpOworCQlyZXR1cm4gLTE7CisJfQorCS8qIENoZWNrIHRoYXQgdGhlIHJlcG9ydCBsb29rcyBvayAqLworCXJlcG9ydCA9IChzdHJ1Y3QgaGlkX3JlcG9ydCopaGlkLT5yZXBvcnRfZW51bVtISURfT1VUUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3QubmV4dDsKKwlpZiAoIXJlcG9ydCkgeworCQllcnIoIk5VTEwgb3V0cHV0IHJlcG9ydCIpOworCQlyZXR1cm4gLTE7CisJfQorCWZpZWxkID0gcmVwb3J0LT5maWVsZFswXTsKKwlpZiAoIWZpZWxkKSB7CisJCWVycigiTlVMTCBmaWVsZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcHJpdmF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsZ2ZmX2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICghcHJpdmF0ZSkKKwkJcmV0dXJuIC0xOworCW1lbXNldChwcml2YXRlLCAwLCBzaXplb2Yoc3RydWN0IGxnZmZfZGV2aWNlKSk7CisJaGlkLT5mZl9wcml2YXRlID0gcHJpdmF0ZTsKKworCS8qIElucHV0IGluaXQgKi8KKwloaWRfbGdmZl9pbnB1dF9pbml0KGhpZCk7CisKKworCXByaXZhdGUtPmNvbnN0YW50ID0gaGlkX2xnZmZfZHVwbGljYXRlX3JlcG9ydChyZXBvcnQpOworCWlmICghcHJpdmF0ZS0+Y29uc3RhbnQpIHsKKwkJa2ZyZWUocHJpdmF0ZSk7CisJCXJldHVybiAtMTsKKwl9CisJcHJpdmF0ZS0+Y29uc3RhbnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4NTE7CisJcHJpdmF0ZS0+Y29uc3RhbnQtPmZpZWxkWzBdLT52YWx1ZVsxXSA9IDB4MDg7CisJcHJpdmF0ZS0+Y29uc3RhbnQtPmZpZWxkWzBdLT52YWx1ZVsyXSA9IDB4N2Y7CisJcHJpdmF0ZS0+Y29uc3RhbnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IDB4N2Y7CisKKwlwcml2YXRlLT5ydW1ibGUgPSBoaWRfbGdmZl9kdXBsaWNhdGVfcmVwb3J0KHJlcG9ydCk7CisJaWYgKCFwcml2YXRlLT5ydW1ibGUpIHsKKwkJaGlkX2xnZmZfZGVsZXRlX3JlcG9ydChwcml2YXRlLT5jb25zdGFudCk7CisJCWtmcmVlKHByaXZhdGUpOworCQlyZXR1cm4gLTE7CisJfQorCXByaXZhdGUtPnJ1bWJsZS0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHg0MjsKKworCisJcHJpdmF0ZS0+Y29uZGl0aW9uID0gaGlkX2xnZmZfZHVwbGljYXRlX3JlcG9ydChyZXBvcnQpOworCWlmICghcHJpdmF0ZS0+Y29uZGl0aW9uKSB7CisJCWhpZF9sZ2ZmX2RlbGV0ZV9yZXBvcnQocHJpdmF0ZS0+cnVtYmxlKTsKKwkJaGlkX2xnZmZfZGVsZXRlX3JlcG9ydChwcml2YXRlLT5jb25zdGFudCk7CisJCWtmcmVlKHByaXZhdGUpOworCQlyZXR1cm4gLTE7CisJfQorCisJcHJpdmF0ZS0+aGlkID0gaGlkOworCisJc3Bpbl9sb2NrX2luaXQoJnByaXZhdGUtPmxvY2spOworCWluaXRfdGltZXIoJnByaXZhdGUtPnRpbWVyKTsKKwlwcml2YXRlLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcHJpdmF0ZTsKKwlwcml2YXRlLT50aW1lci5mdW5jdGlvbiA9IGhpZF9sZ2ZmX3RpbWVyOworCisJLyogRXZlbnQgYW5kIGV4aXQgY2FsbGJhY2tzICovCisJaGlkLT5mZl9leGl0ID0gaGlkX2xnZmZfZXhpdDsKKwloaWQtPmZmX2V2ZW50ID0gaGlkX2xnZmZfZXZlbnQ7CisKKwkvKiBTdGFydCB0aGUgdXBkYXRlIHRhc2sgKi8KKwlwcml2YXRlLT50aW1lci5leHBpcmVzID0gUlVOX0FUKFBFUklPRCk7CisJYWRkX3RpbWVyKCZwcml2YXRlLT50aW1lcik7ICAvKlRPRE86IG9ubHkgcnVuIHRoZSB0aW1lciB3aGVuIGF0IGxlYXN0CisJCQkJICAgICAgIG9uZSBlZmZlY3QgaXMgcGxheWluZyAqLworCisJcHJpbnRrKEtFUk5fSU5GTyAiRm9yY2UgZmVlZGJhY2sgZm9yIExvZ2l0ZWNoIGZvcmNlIGZlZWRiYWNrIGRldmljZXMgYnkgSm9oYW5uIERlbmV1eCA8am9oYW5uLmRlbmV1eEBpdC51dS5zZT5cbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGlkX3JlcG9ydCogaGlkX2xnZmZfZHVwbGljYXRlX3JlcG9ydChzdHJ1Y3QgaGlkX3JlcG9ydCogcmVwb3J0KQoreworCXN0cnVjdCBoaWRfcmVwb3J0KiByZXQ7CisKKwlyZXQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGdmZl9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIE5VTEw7CisJKnJldCA9ICpyZXBvcnQ7CisKKwlyZXQtPmZpZWxkWzBdID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhpZF9maWVsZCksIEdGUF9LRVJORUwpOworCWlmICghcmV0LT5maWVsZFswXSkgeworCQlrZnJlZShyZXQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJKnJldC0+ZmllbGRbMF0gPSAqcmVwb3J0LT5maWVsZFswXTsKKworCXJldC0+ZmllbGRbMF0tPnZhbHVlID0ga21hbGxvYyhzaXplb2YoczMyWzhdKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXQtPmZpZWxkWzBdLT52YWx1ZSkgeworCQlrZnJlZShyZXQtPmZpZWxkWzBdKTsKKwkJa2ZyZWUocmV0KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCW1lbXNldChyZXQtPmZpZWxkWzBdLT52YWx1ZSwgMCwgc2l6ZW9mKHMzMls4XSkpOwkKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGhpZF9sZ2ZmX2RlbGV0ZV9yZXBvcnQoc3RydWN0IGhpZF9yZXBvcnQqIHJlcG9ydCkKK3sKKwlpZiAocmVwb3J0KSB7CisJCWtmcmVlKHJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlKTsKKwkJa2ZyZWUocmVwb3J0LT5maWVsZFswXSk7CisJCWtmcmVlKHJlcG9ydCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBoaWRfbGdmZl9pbnB1dF9pbml0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpCit7CisJc3RydWN0IGRldmljZV90eXBlKiBkZXYgPSBkZXZpY2VzOworCXNpZ25lZCBzaG9ydCogZmY7CisJdTE2IGlkVmVuZG9yID0gbGUxNl90b19jcHUoaGlkLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCXUxNiBpZFByb2R1Y3QgPSBsZTE2X3RvX2NwdShoaWQtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCXN0cnVjdCBoaWRfaW5wdXQgKmhpZGlucHV0ID0gbGlzdF9lbnRyeShoaWQtPmlucHV0cy5uZXh0LCBzdHJ1Y3QgaGlkX2lucHV0LCBsaXN0KTsKKworCXdoaWxlIChkZXYtPmlkVmVuZG9yICYmIChpZFZlbmRvciAhPSBkZXYtPmlkVmVuZG9yIHx8IGlkUHJvZHVjdCAhPSBkZXYtPmlkUHJvZHVjdCkpCisJCWRldisrOworCisJZmYgPSBkZXYtPmZmOworCisJd2hpbGUgKCpmZiA+PSAwKSB7CisJCXNldF9iaXQoKmZmLCBoaWRpbnB1dC0+aW5wdXQuZmZiaXQpOworCQkrK2ZmOworCX0KKworCWhpZGlucHV0LT5pbnB1dC51cGxvYWRfZWZmZWN0ID0gaGlkX2xnZmZfdXBsb2FkX2VmZmVjdDsKKwloaWRpbnB1dC0+aW5wdXQuZmx1c2ggPSBoaWRfbGdmZl9mbHVzaDsKKworCXNldF9iaXQoRVZfRkYsIGhpZGlucHV0LT5pbnB1dC5ldmJpdCk7CisJaGlkaW5wdXQtPmlucHV0LmZmX2VmZmVjdHNfbWF4ID0gTEdGRl9FRkZFQ1RTOworfQorCitzdGF0aWMgdm9pZCBoaWRfbGdmZl9leGl0KHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpCit7CisJc3RydWN0IGxnZmZfZGV2aWNlICpsZ2ZmID0gaGlkLT5mZl9wcml2YXRlOworCisJc2V0X2JpdChERVZJQ0VfQ0xPU0lORywgbGdmZi0+ZmxhZ3MpOworCWRlbF90aW1lcl9zeW5jKCZsZ2ZmLT50aW1lcik7CisKKwloaWRfbGdmZl9kZWxldGVfcmVwb3J0KGxnZmYtPmNvbmRpdGlvbik7CisJaGlkX2xnZmZfZGVsZXRlX3JlcG9ydChsZ2ZmLT5ydW1ibGUpOworCWhpZF9sZ2ZmX2RlbGV0ZV9yZXBvcnQobGdmZi0+Y29uc3RhbnQpOworCisJa2ZyZWUobGdmZik7Cit9CisKK3N0YXRpYyBpbnQgaGlkX2xnZmZfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGlucHV0X2RldiogaW5wdXQsCisJCQkgIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKQoreworCXN0cnVjdCBsZ2ZmX2RldmljZSAqbGdmZiA9IGhpZC0+ZmZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbGdmZl9lZmZlY3QgKmVmZmVjdCA9IGxnZmYtPmVmZmVjdHMgKyBjb2RlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodHlwZSAhPSBFVl9GRikgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAJaWYgKCFMR0ZGX0NIRUNLX09XTkVSU0hJUChjb2RlLCBsZ2ZmKSkgcmV0dXJuIC1FQUNDRVM7CisJaWYgKHZhbHVlIDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGdmZi0+bG9jaywgZmxhZ3MpOworCQorCWlmICh2YWx1ZSA+IDApIHsKKwkJaWYgKHRlc3RfYml0KEVGRkVDVF9TVEFSVEVELCBlZmZlY3QtPmZsYWdzKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGdmZi0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlpZiAodGVzdF9iaXQoRUZGRUNUX1BMQVlJTkcsIGVmZmVjdC0+ZmxhZ3MpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsZ2ZmLT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisKKwkJZWZmZWN0LT5jb3VudCA9IHZhbHVlOworCisJCWlmIChlZmZlY3QtPmVmZmVjdC5yZXBsYXkuZGVsYXkpIHsKKwkJCXNldF9iaXQoRUZGRUNUX1NUQVJURUQsIGVmZmVjdC0+ZmxhZ3MpOworCQl9IGVsc2UgeworCQkJc2V0X2JpdChFRkZFQ1RfUExBWUlORywgZWZmZWN0LT5mbGFncyk7CisJCX0KKwkJZWZmZWN0LT5zdGFydGVkX2F0ID0gamlmZmllczsKKwl9CisJZWxzZSB7IC8qIHZhbHVlID09IDAgKi8KKwkJY2xlYXJfYml0KEVGRkVDVF9TVEFSVEVELCBlZmZlY3QtPmZsYWdzKTsKKwkJY2xlYXJfYml0KEVGRkVDVF9QTEFZSU5HLCBlZmZlY3QtPmZsYWdzKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsZ2ZmLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKKworfQorCisvKiBFcmFzZSBhbGwgZWZmZWN0cyB0aGlzIHByb2Nlc3Mgb3ducyAqLworc3RhdGljIGludCBoaWRfbGdmZl9mbHVzaChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGxnZmZfZGV2aWNlICpsZ2ZmID0gaGlkLT5mZl9wcml2YXRlOworCWludCBpOworCisJZm9yIChpPTA7IGk8ZGV2LT5mZl9lZmZlY3RzX21heDsgKytpKSB7CisKKwkJLypOT1RFOiBubyBuZWVkIHRvIGxvY2sgaGVyZS4gVGhlIG9ubHkgdGltZXMgRUZGRUNUX1VTRUQgaXMKKwkJICBtb2RpZmllZCBpcyB3aGVuIGVmZmVjdHMgYXJlIHVwbG9hZGVkIG9yIHdoZW4gYW4gZWZmZWN0IGlzCisJCSAgZXJhc2VkLiBCdXQgYSBwcm9jZXNzIGNhbm5vdCBjbG9zZSBpdHMgZGV2L2lucHV0L2V2ZW50WCBmZAorCQkgIGFuZCBwZXJmb3JtIGlvY3RscyBvbiB0aGUgc2FtZSBmZCBhbGwgYXQgdGhlIHNhbWUgdGltZSAqLworCQlpZiAoIGN1cnJlbnQtPnBpZCA9PSBsZ2ZmLT5lZmZlY3RzW2ldLm93bmVyCisJCSAgICAgJiYgdGVzdF9iaXQoRUZGRUNUX1VTRUQsIGxnZmYtPmVmZmVjdHNbaV0uZmxhZ3MpKSB7CisJCQkKKwkJCWlmIChoaWRfbGdmZl9lcmFzZShkZXYsIGkpKQorCQkJCXdhcm4oImVyYXNlIGVmZmVjdCAlZCBmYWlsZWQiLCBpKTsKKwkJfQorCisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGlkX2xnZmZfZXJhc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgaWQpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbGdmZl9kZXZpY2UgKmxnZmYgPSBoaWQtPmZmX3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghTEdGRl9DSEVDS19PV05FUlNISVAoaWQsIGxnZmYpKSByZXR1cm4gLUVBQ0NFUzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsZ2ZmLT5sb2NrLCBmbGFncyk7CisJbGdmZi0+ZWZmZWN0c1tpZF0uZmxhZ3NbMF0gPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxnZmYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpZF9sZ2ZmX3VwbG9hZF9lZmZlY3Qoc3RydWN0IGlucHV0X2RldiogaW5wdXQsCisJCQkJICBzdHJ1Y3QgZmZfZWZmZWN0KiBlZmZlY3QpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGlucHV0LT5wcml2YXRlOworCXN0cnVjdCBsZ2ZmX2RldmljZSAqbGdmZiA9IGhpZC0+ZmZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbGdmZl9lZmZlY3QgbmV3OworCWludCBpZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQorCWRiZygiaW9jdGwgcnVtYmxlIik7CisKKwlpZiAoIXRlc3RfYml0KGVmZmVjdC0+dHlwZSwgaW5wdXQtPmZmYml0KSkgcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGdmZi0+bG9jaywgZmxhZ3MpOworCisJaWYgKGVmZmVjdC0+aWQgPT0gLTEpIHsKKwkJaW50IGk7CisKKwkJZm9yIChpPTA7IGk8TEdGRl9FRkZFQ1RTICYmIHRlc3RfYml0KEVGRkVDVF9VU0VELCBsZ2ZmLT5lZmZlY3RzW2ldLmZsYWdzKTsgKytpKTsKKwkJaWYgKGkgPj0gTEdGRl9FRkZFQ1RTKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsZ2ZmLT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLUVOT1NQQzsKKwkJfQorCisJCWVmZmVjdC0+aWQgPSBpOworCQlsZ2ZmLT5lZmZlY3RzW2ldLm93bmVyID0gY3VycmVudC0+cGlkOworCQlsZ2ZmLT5lZmZlY3RzW2ldLmZsYWdzWzBdID0gMDsKKwkJc2V0X2JpdChFRkZFQ1RfVVNFRCwgbGdmZi0+ZWZmZWN0c1tpXS5mbGFncyk7CisJfQorCWVsc2UgaWYgKCFMR0ZGX0NIRUNLX09XTkVSU0hJUChlZmZlY3QtPmlkLCBsZ2ZmKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsZ2ZmLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUFDQ0VTOworCX0KKworCWlkID0gZWZmZWN0LT5pZDsKKwluZXcgPSBsZ2ZmLT5lZmZlY3RzW2lkXTsKKworCW5ldy5lZmZlY3QgPSAqZWZmZWN0OworCisJaWYgKHRlc3RfYml0KEVGRkVDVF9TVEFSVEVELCBsZ2ZmLT5lZmZlY3RzW2lkXS5mbGFncykKKwkgICAgfHwgdGVzdF9iaXQoRUZGRUNUX1NUQVJURUQsIGxnZmYtPmVmZmVjdHNbaWRdLmZsYWdzKSkgeworCisJCS8qIENoYW5naW5nIHJlcGxheSBwYXJhbWV0ZXJzIGlzIG5vdCBhbGxvd2VkIChmb3IgdGhlIHRpbWUKKwkJICAgYmVpbmcpICovCisJCWlmIChuZXcuZWZmZWN0LnJlcGxheS5kZWxheSAhPSBsZ2ZmLT5lZmZlY3RzW2lkXS5lZmZlY3QucmVwbGF5LmRlbGF5CisJCSAgICB8fCBuZXcuZWZmZWN0LnJlcGxheS5sZW5ndGggIT0gbGdmZi0+ZWZmZWN0c1tpZF0uZWZmZWN0LnJlcGxheS5sZW5ndGgpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxnZmYtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAtRU5PU1lTOworCQl9CisKKwkJbGdmZi0+ZWZmZWN0c1tpZF0gPSBuZXc7CisKKwl9IGVsc2UgeworCQlsZ2ZmLT5lZmZlY3RzW2lkXSA9IG5ldzsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsZ2ZmLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhpZF9sZ2ZmX3RpbWVyKHVuc2lnbmVkIGxvbmcgdGltZXJfZGF0YSkKK3sKKwlzdHJ1Y3QgbGdmZl9kZXZpY2UgKmxnZmYgPSAoc3RydWN0IGxnZmZfZGV2aWNlKil0aW1lcl9kYXRhOworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBsZ2ZmLT5oaWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgeCA9IDB4N2YsIHkgPSAweDdmOyAgIC8vIENvb3JkaW5hdGVzIG9mIGNvbnN0YW50IGVmZmVjdHMKKwl1bnNpZ25lZCBpbnQgbGVmdCA9IDAsIHJpZ2h0ID0gMDsgICAvLyBSdW1ibGluZworCWludCBpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxnZmYtPmxvY2ssIGZsYWdzKTsKKworIAlmb3IgKGk9MDsgaTxMR0ZGX0VGRkVDVFM7ICsraSkgeworCQlzdHJ1Y3QgbGdmZl9lZmZlY3QqIGVmZmVjdCA9IGxnZmYtPmVmZmVjdHMgK2k7CisKKwkJaWYgKHRlc3RfYml0KEVGRkVDVF9QTEFZSU5HLCBlZmZlY3QtPmZsYWdzKSkgeworCisJCQlzd2l0Y2ggKGVmZmVjdC0+ZWZmZWN0LnR5cGUpIHsKKwkJCWNhc2UgRkZfQ09OU1RBTlQ6IHsKKwkJCQkvL1RPRE86IGhhbmRsZSBlbnZlbG9wZXMKKwkJCQlpbnQgZGVncmVlcyA9IGVmZmVjdC0+ZWZmZWN0LmRpcmVjdGlvbiAqIDM2MCA+PiAxNjsKKwkJCQl4ICs9IGZpeHBfbXVsdChmaXhwX3NpbihkZWdyZWVzKSwKKwkJCQkJICAgICAgIGZpeHBfbmV3MTYoZWZmZWN0LT5lZmZlY3QudS5jb25zdGFudC5sZXZlbCkpOworCQkJCXkgKz0gZml4cF9tdWx0KC1maXhwX2NvcyhkZWdyZWVzKSwKKwkJCQkJICAgICAgIGZpeHBfbmV3MTYoZWZmZWN0LT5lZmZlY3QudS5jb25zdGFudC5sZXZlbCkpOworCQkJfSAgICAgICBicmVhazsKKwkJCWNhc2UgRkZfUlVNQkxFOgorCQkJCXJpZ2h0ICs9IGVmZmVjdC0+ZWZmZWN0LnUucnVtYmxlLnN0cm9uZ19tYWduaXR1ZGU7CisJCQkJbGVmdCArPSBlZmZlY3QtPmVmZmVjdC51LnJ1bWJsZS53ZWFrX21hZ25pdHVkZTsKKwkJCQlicmVhazsKKwkJCX07CisKKwkJCS8qIE9uZSBydW4gb2YgdGhlIGVmZmVjdCBpcyBmaW5pc2hlZCBwbGF5aW5nICovCisJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLAorCQkJCQllZmZlY3QtPnN0YXJ0ZWRfYXQKKwkJCQkJKyBlZmZlY3QtPmVmZmVjdC5yZXBsYXkuZGVsYXkqSFovMTAwMAorCQkJCQkrIGVmZmVjdC0+ZWZmZWN0LnJlcGxheS5sZW5ndGgqSFovMTAwMCkpIHsKKwkJCQlkYmcoIkZpbmlzaGVkIHBsYXlpbmcgb25jZSAlZCIsIGkpOworCQkJCWlmICgtLWVmZmVjdC0+Y291bnQgPD0gMCkgeworCQkJCQlkYmcoIlN0b3BwZWQgJWQiLCBpKTsKKwkJCQkJY2xlYXJfYml0KEVGRkVDVF9QTEFZSU5HLCBlZmZlY3QtPmZsYWdzKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCWRiZygiU3RhcnQgYWdhaW4gJWQiLCBpKTsKKwkJCQkJaWYgKGVmZmVjdC0+ZWZmZWN0LnJlcGxheS5sZW5ndGggIT0gMCkgeworCQkJCQkJY2xlYXJfYml0KEVGRkVDVF9QTEFZSU5HLCBlZmZlY3QtPmZsYWdzKTsKKwkJCQkJCXNldF9iaXQoRUZGRUNUX1NUQVJURUQsIGVmZmVjdC0+ZmxhZ3MpOworCQkJCQl9CisJCQkJCWVmZmVjdC0+c3RhcnRlZF9hdCA9IGppZmZpZXM7CisJCQkJfQorCQkJfQorCisJCX0gZWxzZSBpZiAodGVzdF9iaXQoRUZGRUNUX1NUQVJURUQsIGxnZmYtPmVmZmVjdHNbaV0uZmxhZ3MpKSB7CisJCQkvKiBDaGVjayBpZiB3ZSBzaG91bGQgc3RhcnQgcGxheWluZyB0aGUgZWZmZWN0ICovCisJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLAorCQkJCQlsZ2ZmLT5lZmZlY3RzW2ldLnN0YXJ0ZWRfYXQKKwkJCQkJKyBsZ2ZmLT5lZmZlY3RzW2ldLmVmZmVjdC5yZXBsYXkuZGVsYXkqSFovMTAwMCkpIHsKKwkJCQlkYmcoIk5vdyBwbGF5aW5nICVkIiwgaSk7CisJCQkJY2xlYXJfYml0KEVGRkVDVF9TVEFSVEVELCBsZ2ZmLT5lZmZlY3RzW2ldLmZsYWdzKTsKKwkJCQlzZXRfYml0KEVGRkVDVF9QTEFZSU5HLCBsZ2ZmLT5lZmZlY3RzW2ldLmZsYWdzKTsKKwkJCX0KKwkJfQorIAl9CisKKyNkZWZpbmUgQ0xBTVAoeCkgaWYgKHggPCAwKSB4ID0gMDsgaWYgKHggPiAweGZmKSB4ID0gMHhmZgorCisJLy8gQ2xhbXAgdmFsdWVzCisJQ0xBTVAoeCk7CisJQ0xBTVAoeSk7CisJQ0xBTVAobGVmdCk7CisJQ0xBTVAocmlnaHQpOworCisjdW5kZWYgQ0xBTVAKKworCWlmICh4ICE9IGxnZmYtPmNvbnN0YW50LT5maWVsZFswXS0+dmFsdWVbMl0KKwkgICAgfHwgeSAhPSBsZ2ZmLT5jb25zdGFudC0+ZmllbGRbMF0tPnZhbHVlWzNdKSB7CisJCWxnZmYtPmNvbnN0YW50LT5maWVsZFswXS0+dmFsdWVbMl0gPSB4OworCQlsZ2ZmLT5jb25zdGFudC0+ZmllbGRbMF0tPnZhbHVlWzNdID0geTsKKwkJZGJnKCIoeCx5KT0oJTA0eCwgJTA0eCkiLCB4LCB5KTsKKwkJaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBsZ2ZmLT5jb25zdGFudCwgVVNCX0RJUl9PVVQpOworCX0KKworCWlmIChsZWZ0ICE9IGxnZmYtPnJ1bWJsZS0+ZmllbGRbMF0tPnZhbHVlWzJdCisJICAgIHx8IHJpZ2h0ICE9IGxnZmYtPnJ1bWJsZS0+ZmllbGRbMF0tPnZhbHVlWzNdKSB7CisJCWxnZmYtPnJ1bWJsZS0+ZmllbGRbMF0tPnZhbHVlWzJdID0gbGVmdDsKKwkJbGdmZi0+cnVtYmxlLT5maWVsZFswXS0+dmFsdWVbM10gPSByaWdodDsKKwkJZGJnKCIobGVmdCxyaWdodCk9KCUwNHgsICUwNHgpIiwgbGVmdCwgcmlnaHQpOworCQloaWRfc3VibWl0X3JlcG9ydChoaWQsIGxnZmYtPnJ1bWJsZSwgVVNCX0RJUl9PVVQpOworCX0KKworCWlmICghdGVzdF9iaXQoREVWSUNFX0NMT1NJTkcsIGxnZmYtPmZsYWdzKSkgeworCQlsZ2ZmLT50aW1lci5leHBpcmVzID0gUlVOX0FUKFBFUklPRCk7CisJCWFkZF90aW1lcigmbGdmZi0+dGltZXIpOworCX0KKworIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsZ2ZmLT5sb2NrLCBmbGFncyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtdG1mZi5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLXRtZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjZhMGE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLXRtZmYuYwpAQCAtMCwwICsxLDQ2MyBAQAorLyoKKyAqIEZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIHZhcmlvdXMgSElEIGNvbXBsaWFudCBkZXZpY2VzIGJ5IFRocnVzdE1hc3RlcjoKKyAqICAgIFRocnVzdE1hc3RlciBGaXJlU3Rvcm0gRHVhbCBQb3dlciAyCisgKiBhbmQgcG9zc2libHkgb3RoZXJzIHdob3NlIGRldmljZSBpZHMgaGF2ZW4ndCBiZWVuIGFkZGVkLgorICoKKyAqICBNb2RpZmllZCB0byBzdXBwb3J0IFRocnVzdE1hc3RlciBkZXZpY2VzIGJ5IFppbnggVmVyaXR1c2UKKyAqICBvbiAyMDAzLTAxLTI1IGZyb20gdGhlIExvZ2l0ZWNoIGZvcmNlIGZlZWRiYWNrIGRyaXZlciwKKyAqICB3aGljaCBpcyBieSBKb2hhbm4gRGVuZXV4LgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDMgWmlueCBWZXJpdHVzZSA8emlueEBlcGljc29sLm9yZz4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDIgSm9oYW5uIERlbmV1eAorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyN1bmRlZiBERUJVRworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSA8bGludXgvY2lyY19idWYuaD4KKworI2luY2x1ZGUgImhpZC5oIgorI2luY2x1ZGUgImZpeHAtYXJpdGguaCIKKworLyogVXNhZ2VzIGZvciB0aHJ1c3RtYXN0ZXIgZGV2aWNlcyBJIGtub3cgYWJvdXQgKi8KKyNkZWZpbmUgVEhSVVNUTUFTVEVSX1VTQUdFX1JVTUJMRV9MUgkoSElEX1VQX0dFTkRFU0sgfCAweGJiKQorI2RlZmluZSBERUxBWV9DQUxDKHQsZGVsYXkpCQkoKHQpICsgKGRlbGF5KSpIWi8xMDAwKQorCisvKiBFZmZlY3Qgc3RhdHVzICovCisjZGVmaW5lIEVGRkVDVF9TVEFSVEVEIDAJLyogRWZmZWN0IGlzIGdvaW5nIHRvIHBsYXkgYWZ0ZXIgc29tZSB0aW1lICovCisjZGVmaW5lIEVGRkVDVF9QTEFZSU5HIDEJLyogRWZmZWN0IGlzIHBsYXlpbmcgKi8KKyNkZWZpbmUgRUZGRUNUX1VTRUQgICAgMgorCisvKiBGb3IgdG1mZl9kZXZpY2U6OmZsYWdzICovCisjZGVmaW5lIERFVklDRV9DTE9TSU5HIDAJLyogVGhlIGRyaXZlciBpcyBiZWluZyB1bml0aWFsaXNlZCAqLworCisvKiBDaGVjayB0aGF0IHRoZSBjdXJyZW50IHByb2Nlc3MgY2FuIGFjY2VzcyBhbiBlZmZlY3QgKi8KKyNkZWZpbmUgQ0hFQ0tfT1dORVJTSElQKGVmZmVjdCkgKGN1cnJlbnQtPnBpZCA9PSAwIFwKKyAgICAgICAgfHwgZWZmZWN0Lm93bmVyID09IGN1cnJlbnQtPnBpZCkKKworI2RlZmluZSBUTUZGX0NIRUNLX0lEKGlkKQkoKGlkKSA+PSAwICYmIChpZCkgPCBUTUZGX0VGRkVDVFMpCisKKyNkZWZpbmUgVE1GRl9DSEVDS19PV05FUlNISVAoaSwgbCkgXAorICAgICAgICAodGVzdF9iaXQoRUZGRUNUX1VTRUQsIGwtPmVmZmVjdHNbaV0uZmxhZ3MpIFwKKyAgICAgICAgJiYgQ0hFQ0tfT1dORVJTSElQKGwtPmVmZmVjdHNbaV0pKQorCisjZGVmaW5lIFRNRkZfRUZGRUNUUyA4CisKK3N0cnVjdCB0bWZmX2VmZmVjdCB7CisJcGlkX3Qgb3duZXI7CisKKwlzdHJ1Y3QgZmZfZWZmZWN0IGVmZmVjdDsKKworCXVuc2lnbmVkIGxvbmcgZmxhZ3NbMV07CisJdW5zaWduZWQgaW50IGNvdW50OyAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgdGltZXMgbGVmdCB0byBwbGF5ICovCisKKwl1bnNpZ25lZCBsb25nIHBsYXlfYXQ7ICAgICAgICAgIC8qIFdoZW4gdGhlIGVmZmVjdCBzdGFydHMgdG8gcGxheSAqLworCXVuc2lnbmVkIGxvbmcgc3RvcF9hdDsJCS8qIFdoZW4gdGhlIGVmZmVjdCBlbmRzICovCit9OworCitzdHJ1Y3QgdG1mZl9kZXZpY2UgeworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQ7CisKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCisJc3RydWN0IGhpZF9maWVsZCAqcnVtYmxlOworCisJdW5zaWduZWQgaW50IGVmZmVjdHNfcGxheWluZzsKKwlzdHJ1Y3QgdG1mZl9lZmZlY3QgZWZmZWN0c1tUTUZGX0VGRkVDVFNdOworCXNwaW5sb2NrX3QgbG9jazsgICAgICAgICAgICAgLyogZGV2aWNlLWxldmVsIGxvY2suIEhhdmluZyBsb2NrcyBvbgorCQkJCQlhIHBlci1lZmZlY3QgYmFzaXMgY291bGQgYmUgbmljZSwgYnV0CisJCQkJCWlzbid0IHJlYWxseSBuZWNlc3NhcnkgKi8KKworCXVuc2lnbmVkIGxvbmcgZmxhZ3NbMV07ICAgICAgLyogQ29udGFpbnMgdmFyaW91cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKwkJCQkJc3RhdGUgb2YgdGhlIGRyaXZlciBmb3IgdGhpcyBkZXZpY2UgKi8KKworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworfTsKKworLyogQ2FsbGJhY2tzICovCitzdGF0aWMgdm9pZCBoaWRfdG1mZl9leGl0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpOworc3RhdGljIGludCBoaWRfdG1mZl9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKKwkJCSAgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpOworc3RhdGljIGludCBoaWRfdG1mZl9mbHVzaChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCBoaWRfdG1mZl91cGxvYWRfZWZmZWN0KHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LAorCQkJCSAgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KTsKK3N0YXRpYyBpbnQgaGlkX3RtZmZfZXJhc2Uoc3RydWN0IGlucHV0X2RldiAqaW5wdXQsIGludCBpZCk7CisKKy8qIExvY2FsIGZ1bmN0aW9ucyAqLworc3RhdGljIHZvaWQgaGlkX3RtZmZfcmVjYWxjdWxhdGVfdGltZXIoc3RydWN0IHRtZmZfZGV2aWNlICp0bWZmKTsKK3N0YXRpYyB2b2lkIGhpZF90bWZmX3RpbWVyKHVuc2lnbmVkIGxvbmcgdGltZXJfZGF0YSk7CisKK2ludCBoaWRfdG1mZl9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IHRtZmZfZGV2aWNlICpwcml2YXRlOworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9IGxpc3RfZW50cnkoaGlkLT5pbnB1dHMubmV4dCwgc3RydWN0IGhpZF9pbnB1dCwgbGlzdCk7CisKKwlwcml2YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHRtZmZfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2YXRlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChwcml2YXRlLCAwLCBzaXplb2Yoc3RydWN0IHRtZmZfZGV2aWNlKSk7CisJaGlkLT5mZl9wcml2YXRlID0gcHJpdmF0ZTsKKworCS8qIEZpbmQgdGhlIHJlcG9ydCB0byB1c2UgKi8KKwlfX2xpc3RfZm9yX2VhY2gocG9zLCAmaGlkLT5yZXBvcnRfZW51bVtISURfT1VUUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3QpIHsKKwkJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCA9IChzdHJ1Y3QgaGlkX3JlcG9ydCAqKXBvczsKKwkJaW50IGZpZWxkbnVtOworCisJCWZvciAoZmllbGRudW0gPSAwOyBmaWVsZG51bSA8IHJlcG9ydC0+bWF4ZmllbGQ7ICsrZmllbGRudW0pIHsKKwkJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkID0gcmVwb3J0LT5maWVsZFtmaWVsZG51bV07CisKKwkJCWlmIChmaWVsZC0+bWF4dXNhZ2UgPD0gMCkKKwkJCQljb250aW51ZTsKKworCQkJc3dpdGNoIChmaWVsZC0+dXNhZ2VbMF0uaGlkKSB7CisJCQkJY2FzZSBUSFJVU1RNQVNURVJfVVNBR0VfUlVNQkxFX0xSOgorCQkJCQlpZiAoZmllbGQtPnJlcG9ydF9jb3VudCA8IDIpIHsKKwkJCQkJCXdhcm4oImlnbm9yaW5nIFRIUlVTVE1BU1RFUl9VU0FHRV9SVU1CTEVfTFIgd2l0aCByZXBvcnRfY291bnQgPCAyIik7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCisJCQkJCWlmIChmaWVsZC0+bG9naWNhbF9tYXhpbXVtID09IGZpZWxkLT5sb2dpY2FsX21pbmltdW0pIHsKKwkJCQkJCXdhcm4oImlnbm9yaW5nIFRIUlVTVE1BU1RFUl9VU0FHRV9SVU1CTEVfTFIgd2l0aCBsb2dpY2FsX21heGltdW0gPT0gbG9naWNhbF9taW5pbXVtIik7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCisJCQkJCWlmIChwcml2YXRlLT5yZXBvcnQgJiYgcHJpdmF0ZS0+cmVwb3J0ICE9IHJlcG9ydCkgeworCQkJCQkJd2FybigiaWdub3JpbmcgVEhSVVNUTUFTVEVSX1VTQUdFX1JVTUJMRV9MUiBpbiBvdGhlciByZXBvcnQiKTsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisKKwkJCQkJaWYgKHByaXZhdGUtPnJ1bWJsZSAmJiBwcml2YXRlLT5ydW1ibGUgIT0gZmllbGQpIHsKKwkJCQkJCXdhcm4oImlnbm9yaW5nIGR1cGxpY2F0ZSBUSFJVU1RNQVNURVJfVVNBR0VfUlVNQkxFX0xSIik7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCisJCQkJCXByaXZhdGUtPnJlcG9ydCA9IHJlcG9ydDsKKwkJCQkJcHJpdmF0ZS0+cnVtYmxlID0gZmllbGQ7CisKKwkJCQkJc2V0X2JpdChGRl9SVU1CTEUsIGhpZGlucHV0LT5pbnB1dC5mZmJpdCk7CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoKKwkJCQkJd2FybigiaWdub3JpbmcgdW5rbm93biBvdXRwdXQgdXNhZ2UgJTA4eCIsIGZpZWxkLT51c2FnZVswXS5oaWQpOworCQkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogRmFsbHRocm91Z2ggdG8gaGVyZSBvbmx5IHdoZW4gYSB2YWxpZCB1c2FnZSBpcyBmb3VuZCAqLworCQkJaGlkaW5wdXQtPmlucHV0LnVwbG9hZF9lZmZlY3QgPSBoaWRfdG1mZl91cGxvYWRfZWZmZWN0OworCQkJaGlkaW5wdXQtPmlucHV0LmZsdXNoID0gaGlkX3RtZmZfZmx1c2g7CisKKwkJCXNldF9iaXQoRVZfRkYsIGhpZGlucHV0LT5pbnB1dC5ldmJpdCk7CisJCQloaWRpbnB1dC0+aW5wdXQuZmZfZWZmZWN0c19tYXggPSBUTUZGX0VGRkVDVFM7CisJCX0KKwl9CisKKwlwcml2YXRlLT5oaWQgPSBoaWQ7CisKKwlzcGluX2xvY2tfaW5pdCgmcHJpdmF0ZS0+bG9jayk7CisJaW5pdF90aW1lcigmcHJpdmF0ZS0+dGltZXIpOworCXByaXZhdGUtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylwcml2YXRlOworCXByaXZhdGUtPnRpbWVyLmZ1bmN0aW9uID0gaGlkX3RtZmZfdGltZXI7CisKKwkvKiBFdmVudCBhbmQgZXhpdCBjYWxsYmFja3MgKi8KKwloaWQtPmZmX2V4aXQgPSBoaWRfdG1mZl9leGl0OworCWhpZC0+ZmZfZXZlbnQgPSBoaWRfdG1mZl9ldmVudDsKKworCWluZm8oIkZvcmNlIGZlZWRiYWNrIGZvciBUaHJ1c3RNYXN0ZXIgcnVtYmxlIHBhZCBkZXZpY2VzIGJ5IFppbnggVmVyaXR1c2UgPHppbnhAZXBpY3NvbC5vcmc+Iik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGlkX3RtZmZfZXhpdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXN0cnVjdCB0bWZmX2RldmljZSAqdG1mZiA9IGhpZC0+ZmZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRtZmYtPmxvY2ssIGZsYWdzKTsKKworCXNldF9iaXQoREVWSUNFX0NMT1NJTkcsIHRtZmYtPmZsYWdzKTsKKwlkZWxfdGltZXJfc3luYygmdG1mZi0+dGltZXIpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdG1mZi0+bG9jaywgZmxhZ3MpOworCisJa2ZyZWUodG1mZik7Cit9CisKK3N0YXRpYyBpbnQgaGlkX3RtZmZfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCisJCQkgIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKQoreworCXN0cnVjdCB0bWZmX2RldmljZSAqdG1mZiA9IGhpZC0+ZmZfcHJpdmF0ZTsKKwlzdHJ1Y3QgdG1mZl9lZmZlY3QgKmVmZmVjdCA9ICZ0bWZmLT5lZmZlY3RzW2NvZGVdOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodHlwZSAhPSBFVl9GRikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFUTUZGX0NIRUNLX0lEKGNvZGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIVRNRkZfQ0hFQ0tfT1dORVJTSElQKGNvZGUsIHRtZmYpKQorCQlyZXR1cm4gLUVBQ0NFUzsKKwlpZiAodmFsdWUgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0bWZmLT5sb2NrLCBmbGFncyk7CisKKwlpZiAodmFsdWUgPiAwKSB7CisJCXNldF9iaXQoRUZGRUNUX1NUQVJURUQsIGVmZmVjdC0+ZmxhZ3MpOworCQljbGVhcl9iaXQoRUZGRUNUX1BMQVlJTkcsIGVmZmVjdC0+ZmxhZ3MpOworCQllZmZlY3QtPmNvdW50ID0gdmFsdWU7CisJCWVmZmVjdC0+cGxheV9hdCA9IERFTEFZX0NBTEMoamlmZmllcywgZWZmZWN0LT5lZmZlY3QucmVwbGF5LmRlbGF5KTsKKwl9IGVsc2UgeworCQljbGVhcl9iaXQoRUZGRUNUX1NUQVJURUQsIGVmZmVjdC0+ZmxhZ3MpOworCQljbGVhcl9iaXQoRUZGRUNUX1BMQVlJTkcsIGVmZmVjdC0+ZmxhZ3MpOworCX0KKworCWhpZF90bWZmX3JlY2FsY3VsYXRlX3RpbWVyKHRtZmYpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdG1mZi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7CisKK30KKworLyogRXJhc2UgYWxsIGVmZmVjdHMgdGhpcyBwcm9jZXNzIG93bnMgKi8KKworc3RhdGljIGludCBoaWRfdG1mZl9mbHVzaChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IHRtZmZfZGV2aWNlICp0bWZmID0gaGlkLT5mZl9wcml2YXRlOworCWludCBpOworCisJZm9yIChpPTA7IGk8ZGV2LT5mZl9lZmZlY3RzX21heDsgKytpKQorCisJICAgICAvKiBOT1RFOiBubyBuZWVkIHRvIGxvY2sgaGVyZS4gVGhlIG9ubHkgdGltZXMgRUZGRUNUX1VTRUQgaXMKKwkJbW9kaWZpZWQgaXMgd2hlbiBlZmZlY3RzIGFyZSB1cGxvYWRlZCBvciB3aGVuIGFuIGVmZmVjdCBpcworCQllcmFzZWQuIEJ1dCBhIHByb2Nlc3MgY2Fubm90IGNsb3NlIGl0cyBkZXYvaW5wdXQvZXZlbnRYIGZkCisJCWFuZCBwZXJmb3JtIGlvY3RscyBvbiB0aGUgc2FtZSBmZCBhbGwgYXQgdGhlIHNhbWUgdGltZSAqLworCisJCWlmIChjdXJyZW50LT5waWQgPT0gdG1mZi0+ZWZmZWN0c1tpXS5vd25lcgorCQkgICAgICYmIHRlc3RfYml0KEVGRkVDVF9VU0VELCB0bWZmLT5lZmZlY3RzW2ldLmZsYWdzKSkKKwkJCWlmIChoaWRfdG1mZl9lcmFzZShkZXYsIGkpKQorCQkJCXdhcm4oImVyYXNlIGVmZmVjdCAlZCBmYWlsZWQiLCBpKTsKKworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGlkX3RtZmZfZXJhc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgaWQpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgdG1mZl9kZXZpY2UgKnRtZmYgPSBoaWQtPmZmX3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghVE1GRl9DSEVDS19JRChpZCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghVE1GRl9DSEVDS19PV05FUlNISVAoaWQsIHRtZmYpKQorCQlyZXR1cm4gLUVBQ0NFUzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0bWZmLT5sb2NrLCBmbGFncyk7CisKKwl0bWZmLT5lZmZlY3RzW2lkXS5mbGFnc1swXSA9IDA7CisJaGlkX3RtZmZfcmVjYWxjdWxhdGVfdGltZXIodG1mZik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0bWZmLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoaWRfdG1mZl91cGxvYWRfZWZmZWN0KHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LAorCQkJCSAgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dC0+cHJpdmF0ZTsKKwlzdHJ1Y3QgdG1mZl9kZXZpY2UgKnRtZmYgPSBoaWQtPmZmX3ByaXZhdGU7CisJaW50IGlkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXRlc3RfYml0KGVmZmVjdC0+dHlwZSwgaW5wdXQtPmZmYml0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGVmZmVjdC0+aWQgIT0gLTEgJiYgIVRNRkZfQ0hFQ0tfSUQoZWZmZWN0LT5pZCkpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRtZmYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChlZmZlY3QtPmlkID09IC0xKSB7CisJCS8qIEZpbmQgYSBmcmVlIGVmZmVjdCAqLworCQlmb3IgKGlkID0gMDsgaWQgPCBUTUZGX0VGRkVDVFMgJiYgdGVzdF9iaXQoRUZGRUNUX1VTRUQsIHRtZmYtPmVmZmVjdHNbaWRdLmZsYWdzKTsgKytpZCk7CisKKwkJaWYgKGlkID49IFRNRkZfRUZGRUNUUykgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdG1mZi0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIC1FTk9TUEM7CisJCX0KKworCQllZmZlY3QtPmlkID0gaWQ7CisJCXRtZmYtPmVmZmVjdHNbaWRdLm93bmVyID0gY3VycmVudC0+cGlkOworCQl0bWZmLT5lZmZlY3RzW2lkXS5mbGFnc1swXSA9IDA7CisJCXNldF9iaXQoRUZGRUNUX1VTRUQsIHRtZmYtPmVmZmVjdHNbaWRdLmZsYWdzKTsKKworCX0gZWxzZSB7CisJCS8qIFJlLXVwbG9hZGluZyBhbiBvd25lZCBlZmZlY3QsIHRvIGNoYW5nZSBwYXJhbWV0ZXJzICovCisJCWlkID0gZWZmZWN0LT5pZDsKKwkJY2xlYXJfYml0KEVGRkVDVF9QTEFZSU5HLCB0bWZmLT5lZmZlY3RzW2lkXS5mbGFncyk7CisJfQorCisJdG1mZi0+ZWZmZWN0c1tpZF0uZWZmZWN0ID0gKmVmZmVjdDsKKworCWhpZF90bWZmX3JlY2FsY3VsYXRlX3RpbWVyKHRtZmYpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdG1mZi0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKiBTdGFydCB0aGUgdGltZXIgZm9yIHRoZSBuZXh0IHN0YXJ0L3N0b3AvZGVsYXkgKi8KKy8qIEFsd2F5cyBjYWxsIHRoaXMgd2hpbGUgdG1mZi0+bG9jayBpcyBsb2NrZWQgKi8KKworc3RhdGljIHZvaWQgaGlkX3RtZmZfcmVjYWxjdWxhdGVfdGltZXIoc3RydWN0IHRtZmZfZGV2aWNlICp0bWZmKQoreworCWludCBpOworCWludCBldmVudHMgPSAwOworCXVuc2lnbmVkIGxvbmcgbmV4dF90aW1lOworCisJbmV4dF90aW1lID0gMDsJLyogU2h1dCB1cCBjb21waWxlcidzIGluY29ycmVjdCB3YXJuaW5nICovCisKKwkvKiBGaW5kIHRoZSBuZXh0IGNoYW5nZSBpbiBhbiBlZmZlY3QncyBzdGF0dXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVE1GRl9FRkZFQ1RTOyArK2kpIHsKKwkJc3RydWN0IHRtZmZfZWZmZWN0ICplZmZlY3QgPSAmdG1mZi0+ZWZmZWN0c1tpXTsKKwkJdW5zaWduZWQgbG9uZyBwbGF5X3RpbWU7CisKKwkJaWYgKCF0ZXN0X2JpdChFRkZFQ1RfU1RBUlRFRCwgZWZmZWN0LT5mbGFncykpCisJCQljb250aW51ZTsKKworCQllZmZlY3QtPnN0b3BfYXQgPSBERUxBWV9DQUxDKGVmZmVjdC0+cGxheV9hdCwgZWZmZWN0LT5lZmZlY3QucmVwbGF5Lmxlbmd0aCk7CisKKwkJaWYgKCF0ZXN0X2JpdChFRkZFQ1RfUExBWUlORywgZWZmZWN0LT5mbGFncykpCisJCQlwbGF5X3RpbWUgPSBlZmZlY3QtPnBsYXlfYXQ7CisJCWVsc2UKKwkJCXBsYXlfdGltZSA9IGVmZmVjdC0+c3RvcF9hdDsKKworCQlldmVudHMrKzsKKworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBwbGF5X3RpbWUpKQorCQkJcGxheV90aW1lID0gamlmZmllczsKKworCQlpZiAoZXZlbnRzID09IDEpCisJCQluZXh0X3RpbWUgPSBwbGF5X3RpbWU7CisJCWVsc2UgeworCQkJaWYgKHRpbWVfYWZ0ZXIobmV4dF90aW1lLCBwbGF5X3RpbWUpKQorCQkJCW5leHRfdGltZSA9IHBsYXlfdGltZTsKKwkJfQorCX0KKworCWlmICghZXZlbnRzICYmIHRtZmYtPmVmZmVjdHNfcGxheWluZykgeworCQkvKiBUcmVhdCBhbGwgZWZmZWN0cyB0dXJuaW5nIG9mZiBhcyBhbiBldmVudCAqLworCQlldmVudHMgPSAxOworCQluZXh0X3RpbWUgPSBqaWZmaWVzOworCX0KKworCWlmICghZXZlbnRzKSB7CisJCS8qIE5vIGV2ZW50cywgbm8gdGltZSwgbm8gbmVlZCBmb3IgYSB0aW1lci4gKi8KKwkJZGVsX3RpbWVyX3N5bmMoJnRtZmYtPnRpbWVyKTsKKwkJcmV0dXJuOworCX0KKworCW1vZF90aW1lcigmdG1mZi0+dGltZXIsIG5leHRfdGltZSk7Cit9CisKKy8qIENoYW5nZXMgdmFsdWVzIGZyb20gMCB0byAweGZmZmYgaW50byB2YWx1ZXMgZnJvbSBtaW5pbXVtIHRvIG1heGltdW0gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGhpZF90bWZmX3NjYWxlKHVuc2lnbmVkIGludCBpbiwgaW50IG1pbmltdW0sIGludCBtYXhpbXVtKQoreworCWludCByZXQ7CisKKwlyZXQgPSAoaW4gKiAobWF4aW11bSAtIG1pbmltdW0pIC8gMHhmZmZmKSArIG1pbmltdW07CisJaWYgKHJldCA8IG1pbmltdW0pCisJCXJldHVybiBtaW5pbXVtOworCWlmIChyZXQgPiBtYXhpbXVtKQorCQlyZXR1cm4gbWF4aW11bTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBoaWRfdG1mZl90aW1lcih1bnNpZ25lZCBsb25nIHRpbWVyX2RhdGEpCit7CisJc3RydWN0IHRtZmZfZGV2aWNlICp0bWZmID0gKHN0cnVjdCB0bWZmX2RldmljZSAqKSB0aW1lcl9kYXRhOworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSB0bWZmLT5oaWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbGVmdCA9IDAsIHJpZ2h0ID0gMDsJLyogUnVtYmxpbmcgKi8KKwlpbnQgaTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0bWZmLT5sb2NrLCBmbGFncyk7CisKKwl0bWZmLT5lZmZlY3RzX3BsYXlpbmcgPSAwOworCisJZm9yIChpID0gMDsgaSA8IFRNRkZfRUZGRUNUUzsgKytpKSB7CisJCXN0cnVjdCB0bWZmX2VmZmVjdCAqZWZmZWN0ID0gJnRtZmYtPmVmZmVjdHNbaV07CisKKwkJaWYgKCF0ZXN0X2JpdChFRkZFQ1RfU1RBUlRFRCwgZWZmZWN0LT5mbGFncykpCisJCQljb250aW51ZTsKKworCQlpZiAoIXRpbWVfYWZ0ZXIoamlmZmllcywgZWZmZWN0LT5wbGF5X2F0KSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGVmZmVjdC0+c3RvcF9hdCkpIHsKKworCQkJZGJnKCJGaW5pc2hlZCBwbGF5aW5nIG9uY2UgJWQiLCBpKTsKKwkJCWNsZWFyX2JpdChFRkZFQ1RfUExBWUlORywgZWZmZWN0LT5mbGFncyk7CisKKwkJCWlmICgtLWVmZmVjdC0+Y291bnQgPD0gMCkgeworCQkJCWRiZygiU3RvcHBlZCAlZCIsIGkpOworCQkJCWNsZWFyX2JpdChFRkZFQ1RfU1RBUlRFRCwgZWZmZWN0LT5mbGFncyk7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCWRiZygiU3RhcnQgYWdhaW4gJWQiLCBpKTsKKwkJCQllZmZlY3QtPnBsYXlfYXQgPSBERUxBWV9DQUxDKGppZmZpZXMsIGVmZmVjdC0+ZWZmZWN0LnJlcGxheS5kZWxheSk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQkrK3RtZmYtPmVmZmVjdHNfcGxheWluZzsKKworCQlzZXRfYml0KEVGRkVDVF9QTEFZSU5HLCBlZmZlY3QtPmZsYWdzKTsKKworCQlzd2l0Y2ggKGVmZmVjdC0+ZWZmZWN0LnR5cGUpIHsKKwkJCWNhc2UgRkZfUlVNQkxFOgorCQkJCXJpZ2h0ICs9IGVmZmVjdC0+ZWZmZWN0LnUucnVtYmxlLnN0cm9uZ19tYWduaXR1ZGU7CisJCQkJbGVmdCArPSBlZmZlY3QtPmVmZmVjdC51LnJ1bWJsZS53ZWFrX21hZ25pdHVkZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJQlVHKCk7CisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlsZWZ0ID0gaGlkX3RtZmZfc2NhbGUobGVmdCwgdG1mZi0+cnVtYmxlLT5sb2dpY2FsX21pbmltdW0sIHRtZmYtPnJ1bWJsZS0+bG9naWNhbF9tYXhpbXVtKTsKKwlyaWdodCA9IGhpZF90bWZmX3NjYWxlKHJpZ2h0LCB0bWZmLT5ydW1ibGUtPmxvZ2ljYWxfbWluaW11bSwgdG1mZi0+cnVtYmxlLT5sb2dpY2FsX21heGltdW0pOworCisJaWYgKGxlZnQgIT0gdG1mZi0+cnVtYmxlLT52YWx1ZVswXSB8fCByaWdodCAhPSB0bWZmLT5ydW1ibGUtPnZhbHVlWzFdKSB7CisJCXRtZmYtPnJ1bWJsZS0+dmFsdWVbMF0gPSBsZWZ0OworCQl0bWZmLT5ydW1ibGUtPnZhbHVlWzFdID0gcmlnaHQ7CisJCWRiZygiKGxlZnQscmlnaHQpPSglMDh4LCAlMDh4KSIsIGxlZnQsIHJpZ2h0KTsKKwkJaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCB0bWZmLT5yZXBvcnQsIFVTQl9ESVJfT1VUKTsKKwl9CisKKwlpZiAoIXRlc3RfYml0KERFVklDRV9DTE9TSU5HLCB0bWZmLT5mbGFncykpCisJCWhpZF90bWZmX3JlY2FsY3VsYXRlX3RpbWVyKHRtZmYpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdG1mZi0+bG9jaywgZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLmggYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDkzMjljCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLmgKQEAgLTAsMCArMSw1MTAgQEAKKyNpZm5kZWYgX19ISURfSAorI2RlZmluZSBfX0hJRF9ICisKKy8qCisgKiAkSWQ6IGhpZC5oLHYgMS4yNCAyMDAxLzEyLzI3IDEwOjM3OjQxIHZvanRlY2ggRXhwICQKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5IEFuZHJlYXMgR2FsCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDEgVm9qdGVjaCBQYXZsaWsKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBlaXRoZXIgYnkKKyAqIGUtbWFpbCAtIG1haWwgeW91ciBtZXNzYWdlIHRvIDx2b2p0ZWNoQHVjdy5jej4sIG9yIGJ5IHBhcGVyIG1haWw6CisgKiBWb2p0ZWNoIFBhdmxpaywgU2ltdW5rb3ZhIDE1OTQsIFByYWd1ZSA4LCAxODIgMDAgQ3plY2ggUmVwdWJsaWMKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisvKgorICogVVNCIEhJRCAoSHVtYW4gSW50ZXJmYWNlIERldmljZSkgaW50ZXJmYWNlIGNsYXNzIGNvZGUKKyAqLworCisjZGVmaW5lIFVTQl9JTlRFUkZBQ0VfQ0xBU1NfSElECQkzCisKKy8qCisgKiBISUQgY2xhc3MgcmVxdWVzdHMKKyAqLworCisjZGVmaW5lIEhJRF9SRVFfR0VUX1JFUE9SVAkJMHgwMQorI2RlZmluZSBISURfUkVRX0dFVF9JRExFCQkweDAyCisjZGVmaW5lIEhJRF9SRVFfR0VUX1BST1RPQ09MCQkweDAzCisjZGVmaW5lIEhJRF9SRVFfU0VUX1JFUE9SVAkJMHgwOQorI2RlZmluZSBISURfUkVRX1NFVF9JRExFCQkweDBBCisjZGVmaW5lIEhJRF9SRVFfU0VUX1BST1RPQ09MCQkweDBCCisKKy8qCisgKiBISUQgY2xhc3MgZGVzY3JpcHRvciB0eXBlcworICovCisKKyNkZWZpbmUgSElEX0RUX0hJRAkJCShVU0JfVFlQRV9DTEFTUyB8IDB4MDEpCisjZGVmaW5lIEhJRF9EVF9SRVBPUlQJCQkoVVNCX1RZUEVfQ0xBU1MgfCAweDAyKQorI2RlZmluZSBISURfRFRfUEhZU0lDQUwJCQkoVVNCX1RZUEVfQ0xBU1MgfCAweDAzKQorCisvKgorICogV2UgcGFyc2UgZWFjaCBkZXNjcmlwdGlvbiBpdGVtIGludG8gdGhpcyBzdHJ1Y3R1cmUuIFNob3J0IGl0ZW1zIGRhdGEKKyAqIHZhbHVlcyBhcmUgZXhwYW5kZWQgdG8gMzItYml0IHNpZ25lZCBpbnQsIGxvbmcgaXRlbXMgY29udGFpbiBhIHBvaW50ZXIKKyAqIGludG8gdGhlIGRhdGEgYXJlYS4KKyAqLworCitzdHJ1Y3QgaGlkX2l0ZW0geworCXVuc2lnbmVkICBmb3JtYXQ7CisJX191OCAgICAgIHNpemU7CisJX191OCAgICAgIHR5cGU7CisJX191OCAgICAgIHRhZzsKKwl1bmlvbiB7CisJICAgIF9fdTggICB1ODsKKwkgICAgX19zOCAgIHM4OworCSAgICBfX3UxNiAgdTE2OworCSAgICBfX3MxNiAgczE2OworCSAgICBfX3UzMiAgdTMyOworCSAgICBfX3MzMiAgczMyOworCSAgICBfX3U4ICAqbG9uZ2RhdGE7CisJfSBkYXRhOworfTsKKworLyoKKyAqIEhJRCByZXBvcnQgaXRlbSBmb3JtYXQKKyAqLworCisjZGVmaW5lIEhJRF9JVEVNX0ZPUk1BVF9TSE9SVAkwCisjZGVmaW5lIEhJRF9JVEVNX0ZPUk1BVF9MT05HCTEKKworLyoKKyAqIFNwZWNpYWwgdGFnIGluZGljYXRpbmcgbG9uZyBpdGVtcworICovCisKKyNkZWZpbmUgSElEX0lURU1fVEFHX0xPTkcJMTUKKworLyoKKyAqIEhJRCByZXBvcnQgZGVzY3JpcHRvciBpdGVtIHR5cGUgKHByZWZpeCBiaXQgMiwzKQorICovCisKKyNkZWZpbmUgSElEX0lURU1fVFlQRV9NQUlOCQkwCisjZGVmaW5lIEhJRF9JVEVNX1RZUEVfR0xPQkFMCQkxCisjZGVmaW5lIEhJRF9JVEVNX1RZUEVfTE9DQUwJCTIKKyNkZWZpbmUgSElEX0lURU1fVFlQRV9SRVNFUlZFRAkJMworCisvKgorICogSElEIHJlcG9ydCBkZXNjcmlwdG9yIG1haW4gaXRlbSB0YWdzCisgKi8KKworI2RlZmluZSBISURfTUFJTl9JVEVNX1RBR19JTlBVVAkJCTgKKyNkZWZpbmUgSElEX01BSU5fSVRFTV9UQUdfT1VUUFVUCQk5CisjZGVmaW5lIEhJRF9NQUlOX0lURU1fVEFHX0ZFQVRVUkUJCTExCisjZGVmaW5lIEhJRF9NQUlOX0lURU1fVEFHX0JFR0lOX0NPTExFQ1RJT04JMTAKKyNkZWZpbmUgSElEX01BSU5fSVRFTV9UQUdfRU5EX0NPTExFQ1RJT04JMTIKKworLyoKKyAqIEhJRCByZXBvcnQgZGVzY3JpcHRvciBtYWluIGl0ZW0gY29udGVudHMKKyAqLworCisjZGVmaW5lIEhJRF9NQUlOX0lURU1fQ09OU1RBTlQJCTB4MDAxCisjZGVmaW5lIEhJRF9NQUlOX0lURU1fVkFSSUFCTEUJCTB4MDAyCisjZGVmaW5lIEhJRF9NQUlOX0lURU1fUkVMQVRJVkUJCTB4MDA0CisjZGVmaW5lIEhJRF9NQUlOX0lURU1fV1JBUAkJMHgwMDgJCisjZGVmaW5lIEhJRF9NQUlOX0lURU1fTk9OTElORUFSCQkweDAxMAorI2RlZmluZSBISURfTUFJTl9JVEVNX05PX1BSRUZFUlJFRAkweDAyMAorI2RlZmluZSBISURfTUFJTl9JVEVNX05VTExfU1RBVEUJMHgwNDAKKyNkZWZpbmUgSElEX01BSU5fSVRFTV9WT0xBVElMRQkJMHgwODAKKyNkZWZpbmUgSElEX01BSU5fSVRFTV9CVUZGRVJFRF9CWVRFCTB4MTAwCisKKy8qCisgKiBISUQgcmVwb3J0IGRlc2NyaXB0b3IgY29sbGVjdGlvbiBpdGVtIHR5cGVzCisgKi8KKworI2RlZmluZSBISURfQ09MTEVDVElPTl9QSFlTSUNBTAkJMAorI2RlZmluZSBISURfQ09MTEVDVElPTl9BUFBMSUNBVElPTgkxCisjZGVmaW5lIEhJRF9DT0xMRUNUSU9OX0xPR0lDQUwJCTIKKworLyoKKyAqIEhJRCByZXBvcnQgZGVzY3JpcHRvciBnbG9iYWwgaXRlbSB0YWdzCisgKi8KKworI2RlZmluZSBISURfR0xPQkFMX0lURU1fVEFHX1VTQUdFX1BBR0UJCTAKKyNkZWZpbmUgSElEX0dMT0JBTF9JVEVNX1RBR19MT0dJQ0FMX01JTklNVU0JMQorI2RlZmluZSBISURfR0xPQkFMX0lURU1fVEFHX0xPR0lDQUxfTUFYSU1VTQkyCisjZGVmaW5lIEhJRF9HTE9CQUxfSVRFTV9UQUdfUEhZU0lDQUxfTUlOSU1VTQkzCisjZGVmaW5lIEhJRF9HTE9CQUxfSVRFTV9UQUdfUEhZU0lDQUxfTUFYSU1VTQk0CisjZGVmaW5lIEhJRF9HTE9CQUxfSVRFTV9UQUdfVU5JVF9FWFBPTkVOVAk1CisjZGVmaW5lIEhJRF9HTE9CQUxfSVRFTV9UQUdfVU5JVAkJNgorI2RlZmluZSBISURfR0xPQkFMX0lURU1fVEFHX1JFUE9SVF9TSVpFCQk3CisjZGVmaW5lIEhJRF9HTE9CQUxfSVRFTV9UQUdfUkVQT1JUX0lECQk4CisjZGVmaW5lIEhJRF9HTE9CQUxfSVRFTV9UQUdfUkVQT1JUX0NPVU5UCTkKKyNkZWZpbmUgSElEX0dMT0JBTF9JVEVNX1RBR19QVVNICQkxMAorI2RlZmluZSBISURfR0xPQkFMX0lURU1fVEFHX1BPUAkJCTExCisKKy8qCisgKiBISUQgcmVwb3J0IGRlc2NyaXB0b3IgbG9jYWwgaXRlbSB0YWdzCisgKi8KKworI2RlZmluZSBISURfTE9DQUxfSVRFTV9UQUdfVVNBR0UJCTAKKyNkZWZpbmUgSElEX0xPQ0FMX0lURU1fVEFHX1VTQUdFX01JTklNVU0JMQorI2RlZmluZSBISURfTE9DQUxfSVRFTV9UQUdfVVNBR0VfTUFYSU1VTQkyCisjZGVmaW5lIEhJRF9MT0NBTF9JVEVNX1RBR19ERVNJR05BVE9SX0lOREVYCTMKKyNkZWZpbmUgSElEX0xPQ0FMX0lURU1fVEFHX0RFU0lHTkFUT1JfTUlOSU1VTQk0CisjZGVmaW5lIEhJRF9MT0NBTF9JVEVNX1RBR19ERVNJR05BVE9SX01BWElNVU0JNQorI2RlZmluZSBISURfTE9DQUxfSVRFTV9UQUdfU1RSSU5HX0lOREVYCQk3CisjZGVmaW5lIEhJRF9MT0NBTF9JVEVNX1RBR19TVFJJTkdfTUlOSU1VTQk4CisjZGVmaW5lIEhJRF9MT0NBTF9JVEVNX1RBR19TVFJJTkdfTUFYSU1VTQk5CisjZGVmaW5lIEhJRF9MT0NBTF9JVEVNX1RBR19ERUxJTUlURVIJCTEwCisKKy8qCisgKiBISUQgdXNhZ2UgdGFibGVzCisgKi8KKworI2RlZmluZSBISURfVVNBR0VfUEFHRQkJMHhmZmZmMDAwMAorCisjZGVmaW5lIEhJRF9VUF9VTkRFRklORUQJMHgwMDAwMDAwMAorI2RlZmluZSBISURfVVBfR0VOREVTSyAJCTB4MDAwMTAwMDAKKyNkZWZpbmUgSElEX1VQX0tFWUJPQVJEIAkweDAwMDcwMDAwCisjZGVmaW5lIEhJRF9VUF9MRUQgCQkweDAwMDgwMDAwCisjZGVmaW5lIEhJRF9VUF9CVVRUT04gCQkweDAwMDkwMDAwCisjZGVmaW5lIEhJRF9VUF9PUkRJTkFMIAkJMHgwMDBhMDAwMAorI2RlZmluZSBISURfVVBfQ09OU1VNRVIJCTB4MDAwYzAwMDAKKyNkZWZpbmUgSElEX1VQX0RJR0lUSVpFUiAJMHgwMDBkMDAwMAorI2RlZmluZSBISURfVVBfUElEIAkJMHgwMDBmMDAwMAorI2RlZmluZSBISURfVVBfSFBWRU5ET1IgICAgICAgICAweGZmN2YwMDAwCisjZGVmaW5lIEhJRF9VUF9NU1ZFTkRPUgkJMHhmZjAwMDAwMAorCisjZGVmaW5lIEhJRF9VU0FHRQkJMHgwMDAwZmZmZgorCisjZGVmaW5lIEhJRF9HRF9QT0lOVEVSCQkweDAwMDEwMDAxCisjZGVmaW5lIEhJRF9HRF9NT1VTRQkJMHgwMDAxMDAwMgorI2RlZmluZSBISURfR0RfSk9ZU1RJQ0sJCTB4MDAwMTAwMDQKKyNkZWZpbmUgSElEX0dEX0dBTUVQQUQJCTB4MDAwMTAwMDUKKyNkZWZpbmUgSElEX0dEX0tFWUJPQVJECQkweDAwMDEwMDA2CisjZGVmaW5lIEhJRF9HRF9LRVlQQUQJCTB4MDAwMTAwMDcKKyNkZWZpbmUgSElEX0dEX01VTFRJQVhJUwkweDAwMDEwMDA4CisjZGVmaW5lIEhJRF9HRF9YCQkweDAwMDEwMDMwCisjZGVmaW5lIEhJRF9HRF9ZCQkweDAwMDEwMDMxCisjZGVmaW5lIEhJRF9HRF9aCQkweDAwMDEwMDMyCisjZGVmaW5lIEhJRF9HRF9SWAkJMHgwMDAxMDAzMworI2RlZmluZSBISURfR0RfUlkJCTB4MDAwMTAwMzQKKyNkZWZpbmUgSElEX0dEX1JaCQkweDAwMDEwMDM1CisjZGVmaW5lIEhJRF9HRF9TTElERVIJCTB4MDAwMTAwMzYKKyNkZWZpbmUgSElEX0dEX0RJQUwJCTB4MDAwMTAwMzcKKyNkZWZpbmUgSElEX0dEX1dIRUVMCQkweDAwMDEwMDM4CisjZGVmaW5lIEhJRF9HRF9IQVRTV0lUQ0gJMHgwMDAxMDAzOQorI2RlZmluZSBISURfR0RfQlVGRkVSCQkweDAwMDEwMDNhCisjZGVmaW5lIEhJRF9HRF9CWVRFQ09VTlQJMHgwMDAxMDAzYgorI2RlZmluZSBISURfR0RfTU9USU9OCQkweDAwMDEwMDNjCisjZGVmaW5lIEhJRF9HRF9TVEFSVAkJMHgwMDAxMDAzZAorI2RlZmluZSBISURfR0RfU0VMRUNUCQkweDAwMDEwMDNlCisjZGVmaW5lIEhJRF9HRF9WWAkJMHgwMDAxMDA0MAorI2RlZmluZSBISURfR0RfVlkJCTB4MDAwMTAwNDEKKyNkZWZpbmUgSElEX0dEX1ZaCQkweDAwMDEwMDQyCisjZGVmaW5lIEhJRF9HRF9WQlJYCQkweDAwMDEwMDQzCisjZGVmaW5lIEhJRF9HRF9WQlJZCQkweDAwMDEwMDQ0CisjZGVmaW5lIEhJRF9HRF9WQlJaCQkweDAwMDEwMDQ1CisjZGVmaW5lIEhJRF9HRF9WTk8JCTB4MDAwMTAwNDYKKyNkZWZpbmUgSElEX0dEX0ZFQVRVUkUJCTB4MDAwMTAwNDcKKyNkZWZpbmUgSElEX0dEX1VQCQkweDAwMDEwMDkwCisjZGVmaW5lIEhJRF9HRF9ET1dOCQkweDAwMDEwMDkxCisjZGVmaW5lIEhJRF9HRF9SSUdIVAkJMHgwMDAxMDA5MgorI2RlZmluZSBISURfR0RfTEVGVAkJMHgwMDAxMDA5MworCisvKgorICogSElEIHJlcG9ydCB0eXBlcyAtLS0gT3VjaCEgSElEIHNwZWMgc2F5cyAxIDIgMyEKKyAqLworCisjZGVmaW5lIEhJRF9JTlBVVF9SRVBPUlQJMAorI2RlZmluZSBISURfT1VUUFVUX1JFUE9SVAkxCisjZGVmaW5lIEhJRF9GRUFUVVJFX1JFUE9SVAkyCisKKy8qCisgKiBISUQgZGV2aWNlIHF1aXJrcy4KKyAqLworCisjZGVmaW5lIEhJRF9RVUlSS19JTlZFUlQJCQkweDAwMQorI2RlZmluZSBISURfUVVJUktfTk9UT1VDSAkJCTB4MDAyCisjZGVmaW5lIEhJRF9RVUlSS19JR05PUkUJCQkweDAwNAorI2RlZmluZSBISURfUVVJUktfTk9HRVQJCQkJMHgwMDgKKyNkZWZpbmUgSElEX1FVSVJLX0hJRERFVgkJCTB4MDEwCisjZGVmaW5lIEhJRF9RVUlSS19CQURQQUQJCQkweDAyMAorI2RlZmluZSBISURfUVVJUktfTVVMVElfSU5QVVQJCQkweDA0MAorI2RlZmluZSBISURfUVVJUktfMldIRUVMX01PVVNFX0hBQ0tfNwkJMHgwODAKKyNkZWZpbmUgSElEX1FVSVJLXzJXSEVFTF9NT1VTRV9IQUNLXzUJCTB4MTAwCisjZGVmaW5lIEhJRF9RVUlSS18yV0hFRUxfTU9VU0VfSEFDS19PTgkJMHgyMDAKKworLyoKKyAqIFRoaXMgaXMgdGhlIGdsb2JhbCBlbnZpcm9ubWVudCBvZiB0aGUgcGFyc2VyLiBUaGlzIGluZm9ybWF0aW9uIGlzCisgKiBwZXJzaXN0ZW50IGZvciBtYWluLWl0ZW1zLiBUaGUgZ2xvYmFsIGVudmlyb25tZW50IGNhbiBiZSBzYXZlZCBhbmQKKyAqIHJlc3RvcmVkIHdpdGggUFVTSC9QT1Agc3RhdGVtZW50cy4KKyAqLworCitzdHJ1Y3QgaGlkX2dsb2JhbCB7CisJdW5zaWduZWQgdXNhZ2VfcGFnZTsKKwlfX3MzMiAgICBsb2dpY2FsX21pbmltdW07CisJX19zMzIgICAgbG9naWNhbF9tYXhpbXVtOworCV9fczMyICAgIHBoeXNpY2FsX21pbmltdW07CisJX19zMzIgICAgcGh5c2ljYWxfbWF4aW11bTsKKwlfX3MzMiAgICB1bml0X2V4cG9uZW50OworCXVuc2lnbmVkIHVuaXQ7CisJdW5zaWduZWQgcmVwb3J0X2lkOworCXVuc2lnbmVkIHJlcG9ydF9zaXplOworCXVuc2lnbmVkIHJlcG9ydF9jb3VudDsKK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSBsb2NhbCBlbnZpcm9ubWVudC4gSXQgaXMgcGVyc2lzdGVudCB1cCB0aGUgbmV4dCBtYWluLWl0ZW0uCisgKi8KKworI2RlZmluZSBISURfTUFYX0RFU0NSSVBUT1JfU0laRQkJNDA5NgorI2RlZmluZSBISURfTUFYX1VTQUdFUwkJCTEwMjQKKyNkZWZpbmUgSElEX0RFRkFVTFRfTlVNX0NPTExFQ1RJT05TCTE2CisKK3N0cnVjdCBoaWRfbG9jYWwgeworCXVuc2lnbmVkIHVzYWdlW0hJRF9NQVhfVVNBR0VTXTsgLyogdXNhZ2UgYXJyYXkgKi8KKwl1bnNpZ25lZCBjb2xsZWN0aW9uX2luZGV4W0hJRF9NQVhfVVNBR0VTXTsgLyogY29sbGVjdGlvbiBpbmRleCBhcnJheSAqLworCXVuc2lnbmVkIHVzYWdlX2luZGV4OworCXVuc2lnbmVkIHVzYWdlX21pbmltdW07CisJdW5zaWduZWQgZGVsaW1pdGVyX2RlcHRoOworCXVuc2lnbmVkIGRlbGltaXRlcl9icmFuY2g7Cit9OworCisvKgorICogVGhpcyBpcyB0aGUgY29sbGVjdGlvbiBzdGFjay4gV2UgY2xpbWIgdXAgdGhlIHN0YWNrIHRvIGRldGVybWluZQorICogYXBwbGljYXRpb24gYW5kIGZ1bmN0aW9uIG9mIGVhY2ggZmllbGQuCisgKi8KKworc3RydWN0IGhpZF9jb2xsZWN0aW9uIHsKKwl1bnNpZ25lZCB0eXBlOworCXVuc2lnbmVkIHVzYWdlOworCXVuc2lnbmVkIGxldmVsOworfTsKKworc3RydWN0IGhpZF91c2FnZSB7CisJdW5zaWduZWQgIGhpZDsJCQkvKiBoaWQgdXNhZ2UgY29kZSAqLworCXVuc2lnbmVkICBjb2xsZWN0aW9uX2luZGV4OwkvKiBpbmRleCBpbnRvIGNvbGxlY3Rpb24gYXJyYXkgKi8KKwkvKiBoaWRpbnB1dCBkYXRhICovCisJX191MTYgICAgIGNvZGU7CQkJLyogaW5wdXQgZHJpdmVyIGNvZGUgKi8KKwlfX3U4ICAgICAgdHlwZTsJCQkvKiBpbnB1dCBkcml2ZXIgdHlwZSAqLworCV9fczgJICBoYXRfbWluOwkJLyogaGF0IHN3aXRjaCBmdW4gKi8KKwlfX3M4CSAgaGF0X21heDsJCS8qIGRpdHRvICovCisJX19zOAkgIGhhdF9kaXI7CQkvKiBkaXR0byAqLworfTsKKworc3RydWN0IGhpZF9pbnB1dDsKKworc3RydWN0IGhpZF9maWVsZCB7CisJdW5zaWduZWQgIHBoeXNpY2FsOwkJLyogcGh5c2ljYWwgdXNhZ2UgZm9yIHRoaXMgZmllbGQgKi8KKwl1bnNpZ25lZCAgbG9naWNhbDsJCS8qIGxvZ2ljYWwgdXNhZ2UgZm9yIHRoaXMgZmllbGQgKi8KKwl1bnNpZ25lZCAgYXBwbGljYXRpb247CQkvKiBhcHBsaWNhdGlvbiB1c2FnZSBmb3IgdGhpcyBmaWVsZCAqLworCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlOwkvKiB1c2FnZSB0YWJsZSBmb3IgdGhpcyBmdW5jdGlvbiAqLworCXVuc2lnbmVkICBtYXh1c2FnZTsJCS8qIG1heGltdW0gdXNhZ2UgaW5kZXggKi8KKwl1bnNpZ25lZCAgZmxhZ3M7CQkvKiBtYWluLWl0ZW0gZmxhZ3MgKGkuZS4gdm9sYXRpbGUsYXJyYXksY29uc3RhbnQpICovCisJdW5zaWduZWQgIHJlcG9ydF9vZmZzZXQ7CS8qIGJpdCBvZmZzZXQgaW4gdGhlIHJlcG9ydCAqLworCXVuc2lnbmVkICByZXBvcnRfc2l6ZTsJCS8qIHNpemUgb2YgdGhpcyBmaWVsZCBpbiB0aGUgcmVwb3J0ICovCisJdW5zaWduZWQgIHJlcG9ydF9jb3VudDsJCS8qIG51bWJlciBvZiB0aGlzIGZpZWxkIGluIHRoZSByZXBvcnQgKi8KKwl1bnNpZ25lZCAgcmVwb3J0X3R5cGU7CQkvKiAoaW5wdXQsb3V0cHV0LGZlYXR1cmUpICovCisJX19zMzIgICAgKnZhbHVlOwkJLyogbGFzdCBrbm93biB2YWx1ZShzKSAqLworCV9fczMyICAgICBsb2dpY2FsX21pbmltdW07CisJX19zMzIgICAgIGxvZ2ljYWxfbWF4aW11bTsKKwlfX3MzMiAgICAgcGh5c2ljYWxfbWluaW11bTsKKwlfX3MzMiAgICAgcGh5c2ljYWxfbWF4aW11bTsKKwlfX3MzMiAgICAgdW5pdF9leHBvbmVudDsKKwl1bnNpZ25lZCAgdW5pdDsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OwkvKiBhc3NvY2lhdGVkIHJlcG9ydCAqLworCXVuc2lnbmVkIGluZGV4OwkJCS8qIGluZGV4IGludG8gcmVwb3J0LT5maWVsZFtdICovCisJLyogaGlkaW5wdXQgZGF0YSAqLworCXN0cnVjdCBoaWRfaW5wdXQgKmhpZGlucHV0OwkvKiBhc3NvY2lhdGVkIGlucHV0IHN0cnVjdHVyZSAqLworCV9fdTE2IGRwYWQ7CQkJLyogZHBhZCBpbnB1dCBjb2RlICovCit9OworCisjZGVmaW5lIEhJRF9NQVhfRklFTERTIDY0CisKK3N0cnVjdCBoaWRfcmVwb3J0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdW5zaWduZWQgaWQ7CQkJCQkvKiBpZCBvZiB0aGlzIHJlcG9ydCAqLworCXVuc2lnbmVkIHR5cGU7CQkJCQkvKiByZXBvcnQgdHlwZSAqLworCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkW0hJRF9NQVhfRklFTERTXTsJLyogZmllbGRzIG9mIHRoZSByZXBvcnQgKi8KKwl1bnNpZ25lZCBtYXhmaWVsZDsJCQkJLyogbWF4aW11bSB2YWxpZCBmaWVsZCBpbmRleCAqLworCXVuc2lnbmVkIHNpemU7CQkJCQkvKiBzaXplIG9mIHRoZSByZXBvcnQgKGJpdHMpICovCisJc3RydWN0IGhpZF9kZXZpY2UgKmRldmljZTsJCQkvKiBhc3NvY2lhdGVkIGRldmljZSAqLworfTsKKworc3RydWN0IGhpZF9yZXBvcnRfZW51bSB7CisJdW5zaWduZWQgbnVtYmVyZWQ7CisJc3RydWN0IGxpc3RfaGVhZCByZXBvcnRfbGlzdDsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0X2lkX2hhc2hbMjU2XTsKK307CisKKyNkZWZpbmUgSElEX1JFUE9SVF9UWVBFUyAzCisKKyNkZWZpbmUgSElEX0JVRkZFUl9TSVpFCQk2NAkJLyogdXNlIDY0IGZvciBjb21wYXRpYmlsaXR5IHdpdGggYWxsIHBvc3NpYmxlIHBhY2tldGxlbiAqLworI2RlZmluZSBISURfQ09OVFJPTF9GSUZPX1NJWkUJMjU2CQkvKiB0byBpbml0IGRldmljZXMgd2l0aCA+MTAwIHJlcG9ydHMgKi8KKyNkZWZpbmUgSElEX09VVFBVVF9GSUZPX1NJWkUJNjQKKworc3RydWN0IGhpZF9jb250cm9sX2ZpZm8geworCXVuc2lnbmVkIGNoYXIgZGlyOworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7Cit9OworCisjZGVmaW5lIEhJRF9DTEFJTUVEX0lOUFVUCTEKKyNkZWZpbmUgSElEX0NMQUlNRURfSElEREVWCTIKKworI2RlZmluZSBISURfQ1RSTF9SVU5OSU5HCTEKKyNkZWZpbmUgSElEX09VVF9SVU5OSU5HCQkyCisKK3N0cnVjdCBoaWRfaW5wdXQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCXN0cnVjdCBpbnB1dF9kZXYgaW5wdXQ7Cit9OworCitzdHJ1Y3QgaGlkX2RldmljZSB7CQkJCQkJCS8qIGRldmljZSByZXBvcnQgZGVzY3JpcHRvciAqLworCSBfX3U4ICpyZGVzYzsKKwl1bnNpZ25lZCByc2l6ZTsKKwlzdHJ1Y3QgaGlkX2NvbGxlY3Rpb24gKmNvbGxlY3Rpb247CQkJCS8qIExpc3Qgb2YgSElEIGNvbGxlY3Rpb25zICovCisJdW5zaWduZWQgY29sbGVjdGlvbl9zaXplOwkJCQkJLyogTnVtYmVyIG9mIGFsbG9jYXRlZCBoaWRfY29sbGVjdGlvbnMgKi8KKwl1bnNpZ25lZCBtYXhjb2xsZWN0aW9uOwkJCQkJCS8qIE51bWJlciBvZiBwYXJzZWQgY29sbGVjdGlvbnMgKi8KKwl1bnNpZ25lZCBtYXhhcHBsaWNhdGlvbjsJCQkJCS8qIE51bWJlciBvZiBhcHBsaWNhdGlvbnMgKi8KKwl1bnNpZ25lZCB2ZXJzaW9uOwkJCQkJCS8qIEhJRCB2ZXJzaW9uICovCisJdW5zaWduZWQgY291bnRyeTsJCQkJCQkvKiBISUQgY291bnRyeSAqLworCXN0cnVjdCBoaWRfcmVwb3J0X2VudW0gcmVwb3J0X2VudW1bSElEX1JFUE9SVF9UWVBFU107CisKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OwkJCQkJCS8qIFVTQiBkZXZpY2UgKi8KKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsJCQkJCS8qIFVTQiBpbnRlcmZhY2UgKi8KKwlpbnQgaWZudW07CQkJCQkJCS8qIFVTQiBpbnRlcmZhY2UgbnVtYmVyICovCisKKwl1bnNpZ25lZCBsb25nIGlvZmw7CQkJCQkJLyogSS9PIGZsYWdzIChDVFJMX1JVTk5JTkcsIE9VVF9SVU5OSU5HKSAqLworCisJc3RydWN0IHVyYiAqdXJiaW47CQkJCQkJLyogSW5wdXQgVVJCICovCisJY2hhciAqaW5idWY7CQkJCQkJCS8qIElucHV0IGJ1ZmZlciAqLworCWRtYV9hZGRyX3QgaW5idWZfZG1hOwkJCQkJCS8qIElucHV0IGJ1ZmZlciBkbWEgKi8KKworCXN0cnVjdCB1cmIgKnVyYmN0cmw7CQkJCQkJLyogQ29udHJvbCBVUkIgKi8KKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjcjsJCQkJCS8qIENvbnRyb2wgcmVxdWVzdCBzdHJ1Y3QgKi8KKwlkbWFfYWRkcl90IGNyX2RtYTsJCQkJCQkvKiBDb250cm9sIHJlcXVlc3Qgc3RydWN0IGRtYSAqLworCXN0cnVjdCBoaWRfY29udHJvbF9maWZvIGN0cmxbSElEX0NPTlRST0xfRklGT19TSVpFXTsJCS8qIENvbnRyb2wgZmlmbyAqLworCXVuc2lnbmVkIGNoYXIgY3RybGhlYWQsIGN0cmx0YWlsOwkJCQkvKiBDb250cm9sIGZpZm8gaGVhZCAmIHRhaWwgKi8KKwljaGFyICpjdHJsYnVmOwkJCQkJCQkvKiBDb250cm9sIGJ1ZmZlciAqLworCWRtYV9hZGRyX3QgY3RybGJ1Zl9kbWE7CQkJCQkJLyogQ29udHJvbCBidWZmZXIgZG1hICovCisJc3BpbmxvY2tfdCBjdHJsbG9jazsJCQkJCQkvKiBDb250cm9sIGZpZm8gc3BpbmxvY2sgKi8KKworCXN0cnVjdCB1cmIgKnVyYm91dDsJCQkJCQkvKiBPdXRwdXQgVVJCICovCisJc3RydWN0IGhpZF9yZXBvcnQgKm91dFtISURfQ09OVFJPTF9GSUZPX1NJWkVdOwkJCS8qIE91dHB1dCBwaXBlIGZpZm8gKi8KKwl1bnNpZ25lZCBjaGFyIG91dGhlYWQsIG91dHRhaWw7CQkJCQkvKiBPdXRwdXQgcGlwZSBmaWZvIGhlYWQgJiB0YWlsICovCisJY2hhciAqb3V0YnVmOwkJCQkJCQkvKiBPdXRwdXQgYnVmZmVyICovCisJZG1hX2FkZHJfdCBvdXRidWZfZG1hOwkJCQkJCS8qIE91dHB1dCBidWZmZXIgZG1hICovCisJc3BpbmxvY2tfdCBvdXRsb2NrOwkJCQkJCS8qIE91dHB1dCBmaWZvIHNwaW5sb2NrICovCisKKwl1bnNpZ25lZCBjbGFpbWVkOwkJCQkJCS8qIENsYWltZWQgYnkgaGlkaW5wdXQsIGhpZGRldj8gKi8JCisJdW5zaWduZWQgcXVpcmtzOwkJCQkJCS8qIFZhcmlvdXMgcXVpcmtzIHRoZSBkZXZpY2UgY2FuIHB1bGwgb24gdXMgKi8KKworCXN0cnVjdCBsaXN0X2hlYWQgaW5wdXRzOwkJCQkJLyogVGhlIGxpc3Qgb2YgaW5wdXRzICovCisJdm9pZCAqaGlkZGV2OwkJCQkJCQkvKiBUaGUgaGlkZGV2IHN0cnVjdHVyZSAqLworCWludCBtaW5vcjsJCQkJCQkJLyogSGlkZGV2IG1pbm9yIG51bWJlciAqLworCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsJCQkJCQkvKiBGb3Igc2xlZXBpbmcgKi8KKworCWludCBvcGVuOwkJCQkJCQkvKiBpcyB0aGUgZGV2aWNlIG9wZW4gYnkgYW55b25lPyAqLworCWNoYXIgbmFtZVsxMjhdOwkJCQkJCQkvKiBEZXZpY2UgbmFtZSAqLworCWNoYXIgcGh5c1s2NF07CQkJCQkJCS8qIERldmljZSBwaHlzaWNhbCBsb2NhdGlvbiAqLworCWNoYXIgdW5pcVs2NF07CQkJCQkJCS8qIERldmljZSB1bmlxdWUgaWRlbnRpZmllciAoc2VyaWFsICMpICovCisKKwl2b2lkICpmZl9wcml2YXRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJpdmF0ZSBkYXRhIGZvciB0aGUgZm9yY2UtZmVlZGJhY2sgZHJpdmVyICovCisJdm9pZCAoKmZmX2V4aXQpKHN0cnVjdCBoaWRfZGV2aWNlKik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhbGxlZCBieSBoaWRfZXhpdF9mZihoaWQpICovCisJaW50ICgqZmZfZXZlbnQpKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LAorCQkJdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpOworfTsKKworI2RlZmluZSBISURfR0xPQkFMX1NUQUNLX1NJWkUgNAorI2RlZmluZSBISURfQ09MTEVDVElPTl9TVEFDS19TSVpFIDQKKworc3RydWN0IGhpZF9wYXJzZXIgeworCXN0cnVjdCBoaWRfZ2xvYmFsICAgICBnbG9iYWw7CisJc3RydWN0IGhpZF9nbG9iYWwgICAgIGdsb2JhbF9zdGFja1tISURfR0xPQkFMX1NUQUNLX1NJWkVdOworCXVuc2lnbmVkICAgICAgICAgICAgICBnbG9iYWxfc3RhY2tfcHRyOworCXN0cnVjdCBoaWRfbG9jYWwgICAgICBsb2NhbDsKKwl1bnNpZ25lZCAgICAgICAgICAgICAgY29sbGVjdGlvbl9zdGFja1tISURfQ09MTEVDVElPTl9TVEFDS19TSVpFXTsKKwl1bnNpZ25lZCAgICAgICAgICAgICAgY29sbGVjdGlvbl9zdGFja19wdHI7CisJc3RydWN0IGhpZF9kZXZpY2UgICAgKmRldmljZTsKK307CisKK3N0cnVjdCBoaWRfY2xhc3NfZGVzY3JpcHRvciB7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOworCV9fdTE2IHdEZXNjcmlwdG9yTGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBoaWRfZGVzY3JpcHRvciB7CisJX191OCAgYkxlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CisJX191MTYgYmNkSElEOworCV9fdTggIGJDb3VudHJ5Q29kZTsKKwlfX3U4ICBiTnVtRGVzY3JpcHRvcnM7CisKKwlzdHJ1Y3QgaGlkX2NsYXNzX2Rlc2NyaXB0b3IgZGVzY1sxXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjaWZkZWYgREVCVUcKKyNpbmNsdWRlICJoaWQtZGVidWcuaCIKKyNlbHNlCisjZGVmaW5lIGhpZF9kdW1wX2lucHV0KGEsYikJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBoaWRfZHVtcF9kZXZpY2UoYykJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBoaWRfZHVtcF9maWVsZChhLGIpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcmVzb2x2X3VzYWdlKGEpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHJlc29sdl9ldmVudChhLGIpCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfSElESU5QVVQKKy8qIEFwcGxpY2F0aW9ucyBmcm9tIEhJRCBVc2FnZSBUYWJsZXMgNC84Lzk5IFZlcnNpb24gMS4xICovCisvKiBXZSBpZ25vcmUgYSBmZXcgaW5wdXQgYXBwbGljYXRpb25zIHRoYXQgYXJlIG5vdCB3aWRlbHkgdXNlZCAqLworI2RlZmluZSBJU19JTlBVVF9BUFBMSUNBVElPTihhKSAoKChhID49IDB4MDAwMTAwMDApICYmIChhIDw9IDB4MDAwMTAwMDgpKSB8fCAoYSA9PSAweDAwMDEwMDgwKSB8fCAoYSA9PSAweDAwMGMwMDAxKSkKK2V4dGVybiB2b2lkIGhpZGlucHV0X2hpZF9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqLCBzdHJ1Y3QgaGlkX2ZpZWxkICosIHN0cnVjdCBoaWRfdXNhZ2UgKiwgX19zMzIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIGhpZGlucHV0X3JlcG9ydF9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0KTsKK2V4dGVybiBpbnQgaGlkaW5wdXRfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqKTsKK2V4dGVybiB2b2lkIGhpZGlucHV0X2Rpc2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKik7CisjZWxzZQorI2RlZmluZSBJU19JTlBVVF9BUFBMSUNBVElPTihhKSAoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBoaWRpbnB1dF9oaWRfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGhpZGlucHV0X3JlcG9ydF9ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0KSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGhpZGlucHV0X2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkgeyByZXR1cm4gLUVOT0RFVjsgfQorc3RhdGljIGlubGluZSB2b2lkIGhpZGlucHV0X2Rpc2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkgeyB9CisjZW5kaWYKKworaW50IGhpZF9vcGVuKHN0cnVjdCBoaWRfZGV2aWNlICopOwordm9pZCBoaWRfY2xvc2Uoc3RydWN0IGhpZF9kZXZpY2UgKik7CitpbnQgaGlkX3NldF9maWVsZChzdHJ1Y3QgaGlkX2ZpZWxkICosIHVuc2lnbmVkLCBfX3MzMik7Cit2b2lkIGhpZF9zdWJtaXRfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICosIHN0cnVjdCBoaWRfcmVwb3J0ICosIHVuc2lnbmVkIGNoYXIgZGlyKTsKK3ZvaWQgaGlkX2luaXRfcmVwb3J0cyhzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKK3N0cnVjdCBoaWRfZmllbGQgKmhpZF9maW5kX2ZpZWxkX2J5X3VzYWdlKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIF9fdTMyIHdhbnRlZF91c2FnZSwgaW50IHR5cGUpOworaW50IGhpZF93YWl0X2lvKHN0cnVjdCBoaWRfZGV2aWNlKiBoaWQpOworCisKKyNpZmRlZiBDT05GSUdfSElEX0ZGCitpbnQgaGlkX2ZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgaGlkX2ZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkgeyByZXR1cm4gLTE7IH0KKyNlbmRpZgorc3RhdGljIGlubGluZSB2b2lkIGhpZF9mZl9leGl0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJaWYgKGhpZC0+ZmZfZXhpdCkKKwkJaGlkLT5mZl9leGl0KGhpZCk7Cit9CitzdGF0aWMgaW5saW5lIGludCBoaWRfZmZfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGlucHV0X2RldiAqaW5wdXQsCisJCQl1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKK3sKKwlpZiAoaGlkLT5mZl9ldmVudCkKKwkJcmV0dXJuIGhpZC0+ZmZfZXZlbnQoaGlkLCBpbnB1dCwgdHlwZSwgY29kZSwgdmFsdWUpOworCXJldHVybiAtRU5PU1lTOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkZGV2LmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWRkZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmI3YzkwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkZGV2LmMKQEAgLTAsMCArMSw4NDQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDAxIFBhdWwgU3Rld2FydAorICogIENvcHlyaWdodCAoYykgMjAwMSBWb2p0ZWNoIFBhdmxpaworICoKKyAqICBISUQgY2hhciBkZXZpY2VzLCBnaXZpbmcgYWNjZXNzIHRvIHJhdyBISUQgZGV2aWNlIGV2ZW50cy4KKyAqCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICogU2hvdWxkIHlvdSBuZWVkIHRvIGNvbnRhY3QgbWUsIHRoZSBhdXRob3IsIHlvdSBjYW4gZG8gc28gZWl0aGVyIGJ5CisgKiBlLW1haWwgLSBtYWlsIHlvdXIgbWVzc2FnZSB0byBQYXVsIFN0ZXdhcnQgPHN0ZXdhcnRAd2V0bG9naWMubmV0PgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAiaGlkLmgiCisjaW5jbHVkZSA8bGludXgvaGlkZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+CisKKyNpZmRlZiBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTCisjZGVmaW5lIEhJRERFVl9NSU5PUl9CQVNFCTAKKyNkZWZpbmUgSElEREVWX01JTk9SUwkJMjU2CisjZWxzZQorI2RlZmluZSBISURERVZfTUlOT1JfQkFTRQk5NgorI2RlZmluZSBISURERVZfTUlOT1JTCQkxNgorI2VuZGlmCisjZGVmaW5lIEhJRERFVl9CVUZGRVJfU0laRQk2NAorCitzdHJ1Y3QgaGlkZGV2IHsKKwlpbnQgZXhpc3Q7CisJaW50IG9wZW47CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkOworCXN0cnVjdCBoaWRkZXZfbGlzdCAqbGlzdDsKK307CisKK3N0cnVjdCBoaWRkZXZfbGlzdCB7CisJc3RydWN0IGhpZGRldl91c2FnZV9yZWYgYnVmZmVyW0hJRERFVl9CVUZGRVJfU0laRV07CisJaW50IGhlYWQ7CisJaW50IHRhaWw7CisJdW5zaWduZWQgZmxhZ3M7CisJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luYzsKKwlzdHJ1Y3QgaGlkZGV2ICpoaWRkZXY7CisJc3RydWN0IGhpZGRldl9saXN0ICpuZXh0OworfTsKKworc3RhdGljIHN0cnVjdCBoaWRkZXYgKmhpZGRldl90YWJsZVtISURERVZfTUlOT1JTXTsKKworLyoKKyAqIEZpbmQgYSByZXBvcnQsIGdpdmVuIHRoZSByZXBvcnQncyB0eXBlIGFuZCBJRC4gIFRoZSBJRCBjYW4gYmUgc3BlY2lmaWVkCisgKiBpbmRpcmVjdGx5IGJ5IFJFUE9SVF9JRF9GSVJTVCAod2hpY2ggcmV0dXJucyB0aGUgZmlyc3QgcmVwb3J0IG9mIHRoZSBnaXZlbgorICogdHlwZSkgb3IgYnkgKFJFUE9SVF9JRF9ORVhUIHwgb2xkX2lkKSwgd2hpY2ggcmV0dXJucyB0aGUgbmV4dCByZXBvcnQgb2YgdGhlCisgKiBnaXZlbiB0eXBlIHdoaWNoIGZvbGxvd3Mgb2xkX2lkLgorICovCitzdGF0aWMgc3RydWN0IGhpZF9yZXBvcnQgKgoraGlkZGV2X2xvb2t1cF9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZGRldl9yZXBvcnRfaW5mbyAqcmluZm8pCit7CisJdW5zaWduZWQgZmxhZ3MgPSByaW5mby0+cmVwb3J0X2lkICYgfkhJRF9SRVBPUlRfSURfTUFTSzsKKwlzdHJ1Y3QgaGlkX3JlcG9ydF9lbnVtICpyZXBvcnRfZW51bTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCisJaWYgKHJpbmZvLT5yZXBvcnRfdHlwZSA8IEhJRF9SRVBPUlRfVFlQRV9NSU4gfHwKKwkgICAgcmluZm8tPnJlcG9ydF90eXBlID4gSElEX1JFUE9SVF9UWVBFX01BWCkgcmV0dXJuIE5VTEw7CisKKwlyZXBvcnRfZW51bSA9IGhpZC0+cmVwb3J0X2VudW0gKworCQkocmluZm8tPnJlcG9ydF90eXBlIC0gSElEX1JFUE9SVF9UWVBFX01JTik7CisKKwlzd2l0Y2ggKGZsYWdzKSB7CisJY2FzZSAwOiAvKiBOb3RoaW5nIHRvIGRvIC0tIHJlcG9ydF9pZCBpcyBhbHJlYWR5IHNldCBjb3JyZWN0bHkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEhJRF9SRVBPUlRfSURfRklSU1Q6CisJCWxpc3QgPSByZXBvcnRfZW51bS0+cmVwb3J0X2xpc3QubmV4dDsKKwkJaWYgKGxpc3QgPT0gJnJlcG9ydF9lbnVtLT5yZXBvcnRfbGlzdCkKKwkJCXJldHVybiBOVUxMOworCQlyaW5mby0+cmVwb3J0X2lkID0gKChzdHJ1Y3QgaGlkX3JlcG9ydCAqKSBsaXN0KS0+aWQ7CisJCWJyZWFrOworCQkKKwljYXNlIEhJRF9SRVBPUlRfSURfTkVYVDoKKwkJbGlzdCA9IChzdHJ1Y3QgbGlzdF9oZWFkICopCisJCQlyZXBvcnRfZW51bS0+cmVwb3J0X2lkX2hhc2hbcmluZm8tPnJlcG9ydF9pZCAmIEhJRF9SRVBPUlRfSURfTUFTS107CisJCWlmIChsaXN0ID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJCWlmIChsaXN0ID09ICZyZXBvcnRfZW51bS0+cmVwb3J0X2xpc3QpCisJCQlyZXR1cm4gTlVMTDsKKwkJcmluZm8tPnJlcG9ydF9pZCA9ICgoc3RydWN0IGhpZF9yZXBvcnQgKikgbGlzdCktPmlkOworCQlicmVhazsKKwkJCisJZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHJlcG9ydF9lbnVtLT5yZXBvcnRfaWRfaGFzaFtyaW5mby0+cmVwb3J0X2lkXTsKK30KKworLyoKKyAqIFBlcmZvcm0gYW4gZXhoYXVzdGl2ZSBzZWFyY2ggb2YgdGhlIHJlcG9ydCB0YWJsZSBmb3IgYSB1c2FnZSwgZ2l2ZW4gaXRzCisgKiB0eXBlIGFuZCB1c2FnZSBpZC4KKyAqLworc3RhdGljIHN0cnVjdCBoaWRfZmllbGQgKgoraGlkZGV2X2xvb2t1cF91c2FnZShzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZiAqdXJlZikKK3sKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCXN0cnVjdCBoaWRfcmVwb3J0X2VudW0gKnJlcG9ydF9lbnVtOworCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkOworCisJaWYgKHVyZWYtPnJlcG9ydF90eXBlIDwgSElEX1JFUE9SVF9UWVBFX01JTiB8fAorCSAgICB1cmVmLT5yZXBvcnRfdHlwZSA+IEhJRF9SRVBPUlRfVFlQRV9NQVgpIHJldHVybiBOVUxMOworCisJcmVwb3J0X2VudW0gPSBoaWQtPnJlcG9ydF9lbnVtICsKKwkJKHVyZWYtPnJlcG9ydF90eXBlIC0gSElEX1JFUE9SVF9UWVBFX01JTik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcG9ydCwgJnJlcG9ydF9lbnVtLT5yZXBvcnRfbGlzdCwgbGlzdCkKKwkJZm9yIChpID0gMDsgaSA8IHJlcG9ydC0+bWF4ZmllbGQ7IGkrKykgeworCQkJZmllbGQgPSByZXBvcnQtPmZpZWxkW2ldOworCQkJZm9yIChqID0gMDsgaiA8IGZpZWxkLT5tYXh1c2FnZTsgaisrKSB7CisJCQkJaWYgKGZpZWxkLT51c2FnZVtqXS5oaWQgPT0gdXJlZi0+dXNhZ2VfY29kZSkgeworCQkJCQl1cmVmLT5yZXBvcnRfaWQgPSByZXBvcnQtPmlkOworCQkJCQl1cmVmLT5maWVsZF9pbmRleCA9IGk7CisJCQkJCXVyZWYtPnVzYWdlX2luZGV4ID0gajsKKwkJCQkJcmV0dXJuIGZpZWxkOworCQkJCX0KKwkJCX0KKwkJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGhpZGRldl9zZW5kX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsCisJCQkgICAgICBzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZiAqdXJlZikKK3sKKwlzdHJ1Y3QgaGlkZGV2ICpoaWRkZXYgPSBoaWQtPmhpZGRldjsKKwlzdHJ1Y3QgaGlkZGV2X2xpc3QgKmxpc3QgPSBoaWRkZXYtPmxpc3Q7CisKKwl3aGlsZSAobGlzdCkgeworCQlpZiAodXJlZi0+ZmllbGRfaW5kZXggIT0gSElEX0ZJRUxEX0lOREVYX05PTkUgfHwKKwkJICAgIChsaXN0LT5mbGFncyAmIEhJRERFVl9GTEFHX1JFUE9SVCkgIT0gMCkgeworCQkJbGlzdC0+YnVmZmVyW2xpc3QtPmhlYWRdID0gKnVyZWY7CisJCQlsaXN0LT5oZWFkID0gKGxpc3QtPmhlYWQgKyAxKSAmIAorCQkJCShISURERVZfQlVGRkVSX1NJWkUgLSAxKTsKKwkJCWtpbGxfZmFzeW5jKCZsaXN0LT5mYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKKwkJfQorCisJCWxpc3QgPSBsaXN0LT5uZXh0OworCX0KKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaGlkZGV2LT53YWl0KTsKK30KKworLyoKKyAqIFRoaXMgaXMgd2hlcmUgaGlkLmMgY2FsbHMgaW50byBoaWRkZXYgdG8gcGFzcyBhbiBldmVudCB0aGF0IG9jY3VycmVkIG92ZXIKKyAqIHRoZSBpbnRlcnJ1cHQgcGlwZQorICovCit2b2lkIGhpZGRldl9oaWRfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCisJCSAgICAgIHN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgdHlwZSA9IGZpZWxkLT5yZXBvcnRfdHlwZTsKKwlzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZiB1cmVmOworCisJdXJlZi5yZXBvcnRfdHlwZSA9IAorCSAgKHR5cGUgPT0gSElEX0lOUFVUX1JFUE9SVCkgPyBISURfUkVQT1JUX1RZUEVfSU5QVVQgOgorCSAgKCh0eXBlID09IEhJRF9PVVRQVVRfUkVQT1JUKSA/IEhJRF9SRVBPUlRfVFlQRV9PVVRQVVQgOiAKKwkgICAoKHR5cGUgPT0gSElEX0ZFQVRVUkVfUkVQT1JUKSA/IEhJRF9SRVBPUlRfVFlQRV9GRUFUVVJFOjApKTsKKwl1cmVmLnJlcG9ydF9pZCA9IGZpZWxkLT5yZXBvcnQtPmlkOworCXVyZWYuZmllbGRfaW5kZXggPSBmaWVsZC0+aW5kZXg7CisJdXJlZi51c2FnZV9pbmRleCA9ICh1c2FnZSAtIGZpZWxkLT51c2FnZSk7CisJdXJlZi51c2FnZV9jb2RlID0gdXNhZ2UtPmhpZDsKKwl1cmVmLnZhbHVlID0gdmFsdWU7CisKKwloaWRkZXZfc2VuZF9ldmVudChoaWQsICZ1cmVmKTsKK30KKworCit2b2lkIGhpZGRldl9yZXBvcnRfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCkKK3sKKwl1bnNpZ25lZCB0eXBlID0gcmVwb3J0LT50eXBlOworCXN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVmIHVyZWY7CisKKwltZW1zZXQoJnVyZWYsIDAsIHNpemVvZih1cmVmKSk7CisJdXJlZi5yZXBvcnRfdHlwZSA9IAorCSAgKHR5cGUgPT0gSElEX0lOUFVUX1JFUE9SVCkgPyBISURfUkVQT1JUX1RZUEVfSU5QVVQgOgorCSAgKCh0eXBlID09IEhJRF9PVVRQVVRfUkVQT1JUKSA/IEhJRF9SRVBPUlRfVFlQRV9PVVRQVVQgOiAKKwkgICAoKHR5cGUgPT0gSElEX0ZFQVRVUkVfUkVQT1JUKSA/IEhJRF9SRVBPUlRfVFlQRV9GRUFUVVJFOjApKTsKKwl1cmVmLnJlcG9ydF9pZCA9IHJlcG9ydC0+aWQ7CisJdXJlZi5maWVsZF9pbmRleCA9IEhJRF9GSUVMRF9JTkRFWF9OT05FOworCisJaGlkZGV2X3NlbmRfZXZlbnQoaGlkLCAmdXJlZik7Cit9CisvKgorICogZmFzeW5jIGZpbGUgb3AKKyAqLworc3RhdGljIGludCBoaWRkZXZfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBoaWRkZXZfbGlzdCAqbGlzdCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmxpc3QtPmZhc3luYyk7CisJcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOworfQorCisKKy8qCisgKiByZWxlYXNlIGZpbGUgb3AKKyAqLworc3RhdGljIGludCBoaWRkZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKQoreworCXN0cnVjdCBoaWRkZXZfbGlzdCAqbGlzdCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGlkZGV2X2xpc3QgKipsaXN0cHRyOworCisJbGlzdHB0ciA9ICZsaXN0LT5oaWRkZXYtPmxpc3Q7CisJaGlkZGV2X2Zhc3luYygtMSwgZmlsZSwgMCk7CisKKwl3aGlsZSAoKmxpc3RwdHIgJiYgKCpsaXN0cHRyICE9IGxpc3QpKQorCQlsaXN0cHRyID0gJigoKmxpc3RwdHIpLT5uZXh0KTsKKwkqbGlzdHB0ciA9ICgqbGlzdHB0ciktPm5leHQ7CisKKwlpZiAoIS0tbGlzdC0+aGlkZGV2LT5vcGVuKSB7CisJCWlmIChsaXN0LT5oaWRkZXYtPmV4aXN0KSAKKwkJCWhpZF9jbG9zZShsaXN0LT5oaWRkZXYtPmhpZCk7CisJCWVsc2UKKwkJCWtmcmVlKGxpc3QtPmhpZGRldik7CisJfQorCisJa2ZyZWUobGlzdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIG9wZW4gZmlsZSBvcAorICovCitzdGF0aWMgaW50IGhpZGRldl9vcGVuKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpIHsKKwlzdHJ1Y3QgaGlkZGV2X2xpc3QgKmxpc3Q7CisKKwlpbnQgaSA9IGltaW5vcihpbm9kZSkgLSBISURERVZfTUlOT1JfQkFTRTsKKworCWlmIChpID49IEhJRERFVl9NSU5PUlMgfHwgIWhpZGRldl90YWJsZVtpXSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIShsaXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhpZGRldl9saXN0KSwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQobGlzdCwgMCwgc2l6ZW9mKHN0cnVjdCBoaWRkZXZfbGlzdCkpOworCisJbGlzdC0+aGlkZGV2ID0gaGlkZGV2X3RhYmxlW2ldOworCWxpc3QtPm5leHQgPSBoaWRkZXZfdGFibGVbaV0tPmxpc3Q7CisJaGlkZGV2X3RhYmxlW2ldLT5saXN0ID0gbGlzdDsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGxpc3Q7CisKKwlpZiAoIWxpc3QtPmhpZGRldi0+b3BlbisrKQorCQlpZiAobGlzdC0+aGlkZGV2LT5leGlzdCkKKwkJCWhpZF9vcGVuKGhpZGRldl90YWJsZVtpXS0+aGlkKTsKKworCXJldHVybiAwOworfQorCisvKgorICogIndyaXRlIiBmaWxlIG9wCisgKi8KK3N0YXRpYyBzc2l6ZV90IGhpZGRldl93cml0ZShzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqICJyZWFkIiBmaWxlIG9wCisgKi8KK3N0YXRpYyBzc2l6ZV90IGhpZGRldl9yZWFkKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKiBidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCXN0cnVjdCBoaWRkZXZfbGlzdCAqbGlzdCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgZXZlbnRfc2l6ZTsKKwlpbnQgcmV0dmFsID0gMDsKKworCWV2ZW50X3NpemUgPSAoKGxpc3QtPmZsYWdzICYgSElEREVWX0ZMQUdfVVJFRikgIT0gMCkgPworCQlzaXplb2Yoc3RydWN0IGhpZGRldl91c2FnZV9yZWYpIDogc2l6ZW9mKHN0cnVjdCBoaWRkZXZfZXZlbnQpOworCisJaWYgKGNvdW50IDwgZXZlbnRfc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAocmV0dmFsID09IDApIHsKKwkJaWYgKGxpc3QtPmhlYWQgPT0gbGlzdC0+dGFpbCkgeworCQkJYWRkX3dhaXRfcXVldWUoJmxpc3QtPmhpZGRldi0+d2FpdCwgJndhaXQpOworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCQorCQkJd2hpbGUgKGxpc3QtPmhlYWQgPT0gbGlzdC0+dGFpbCkgeworCQkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJCQlyZXR2YWwgPSAtRUFHQUlOOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmICghbGlzdC0+aGlkZGV2LT5leGlzdCkgeworCQkJCQlyZXR2YWwgPSAtRUlPOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJCisJCQkJc2NoZWR1bGUoKTsKKwkJCX0KKworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJCXJlbW92ZV93YWl0X3F1ZXVlKCZsaXN0LT5oaWRkZXYtPndhaXQsICZ3YWl0KTsKKwkJfQorCisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCisKKwkJd2hpbGUgKGxpc3QtPmhlYWQgIT0gbGlzdC0+dGFpbCAmJiAKKwkJICAgICAgIHJldHZhbCArIGV2ZW50X3NpemUgPD0gY291bnQpIHsKKwkJCWlmICgobGlzdC0+ZmxhZ3MgJiBISURERVZfRkxBR19VUkVGKSA9PSAwKSB7CisJCQkJaWYgKGxpc3QtPmJ1ZmZlcltsaXN0LT50YWlsXS5maWVsZF9pbmRleCAhPQorCQkJCSAgICBISURfRklFTERfSU5ERVhfTk9ORSkgeworCQkJCQlzdHJ1Y3QgaGlkZGV2X2V2ZW50IGV2ZW50OworCQkJCQlldmVudC5oaWQgPSBsaXN0LT5idWZmZXJbbGlzdC0+dGFpbF0udXNhZ2VfY29kZTsKKwkJCQkJZXZlbnQudmFsdWUgPSBsaXN0LT5idWZmZXJbbGlzdC0+dGFpbF0udmFsdWU7CisJCQkJCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyICsgcmV0dmFsLCAmZXZlbnQsIHNpemVvZihzdHJ1Y3QgaGlkZGV2X2V2ZW50KSkpCisJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQkJcmV0dmFsICs9IHNpemVvZihzdHJ1Y3QgaGlkZGV2X2V2ZW50KTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChsaXN0LT5idWZmZXJbbGlzdC0+dGFpbF0uZmllbGRfaW5kZXggIT0gSElEX0ZJRUxEX0lOREVYX05PTkUgfHwKKwkJCQkgICAgKGxpc3QtPmZsYWdzICYgSElEREVWX0ZMQUdfUkVQT1JUKSAhPSAwKSB7CisJCQkJCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyICsgcmV0dmFsLCBsaXN0LT5idWZmZXIgKyBsaXN0LT50YWlsLCBzaXplb2Yoc3RydWN0IGhpZGRldl91c2FnZV9yZWYpKSkKKwkJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCQlyZXR2YWwgKz0gc2l6ZW9mKHN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVmKTsKKwkJCQl9CisJCQl9CisJCQlsaXN0LT50YWlsID0gKGxpc3QtPnRhaWwgKyAxKSAmIChISURERVZfQlVGRkVSX1NJWkUgLSAxKTsKKwkJfQorCisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqICJwb2xsIiBmaWxlIG9wCisgKiBObyBrZXJuZWwgbG9jayAtIGZpbmUKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBoaWRkZXZfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3QgaGlkZGV2X2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJcG9sbF93YWl0KGZpbGUsICZsaXN0LT5oaWRkZXYtPndhaXQsIHdhaXQpOworCWlmIChsaXN0LT5oZWFkICE9IGxpc3QtPnRhaWwpCisJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCWlmICghbGlzdC0+aGlkZGV2LT5leGlzdCkKKwkJcmV0dXJuIFBPTExFUlIgfCBQT0xMSFVQOworCXJldHVybiAwOworfQorCisvKgorICogImlvY3RsIiBmaWxlIG9wCisgKi8KK3N0YXRpYyBpbnQgaGlkZGV2X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgaGlkZGV2X2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhpZGRldiAqaGlkZGV2ID0gbGlzdC0+aGlkZGV2OworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBoaWRkZXYtPmhpZDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaGlkLT5kZXY7CisJc3RydWN0IGhpZGRldl9jb2xsZWN0aW9uX2luZm8gY2luZm87CisJc3RydWN0IGhpZGRldl9yZXBvcnRfaW5mbyByaW5mbzsKKwlzdHJ1Y3QgaGlkZGV2X2ZpZWxkX2luZm8gZmluZm87CisJc3RydWN0IGhpZGRldl91c2FnZV9yZWZfbXVsdGkgKnVyZWZfbXVsdGk9TlVMTDsKKwlzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZiAqdXJlZjsKKwlzdHJ1Y3QgaGlkZGV2X2RldmluZm8gZGluZm87CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZDsKKwl2b2lkIF9fdXNlciAqdXNlcl9hcmcgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJaW50IGk7CisKKwlpZiAoIWhpZGRldi0+ZXhpc3QpCisJCXJldHVybiAtRUlPOworCisJc3dpdGNoIChjbWQpIHsKKworCWNhc2UgSElESU9DR1ZFUlNJT046CisJCXJldHVybiBwdXRfdXNlcihISURfVkVSU0lPTiwgKGludCBfX3VzZXIgKilhcmcpOworCisJY2FzZSBISURJT0NBUFBMSUNBVElPTjoKKwkJaWYgKGFyZyA8IDAgfHwgYXJnID49IGhpZC0+bWF4YXBwbGljYXRpb24pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlmb3IgKGkgPSAwOyBpIDwgaGlkLT5tYXhjb2xsZWN0aW9uOyBpKyspCisJCQlpZiAoaGlkLT5jb2xsZWN0aW9uW2ldLnR5cGUgPT0gCisJCQkgICAgSElEX0NPTExFQ1RJT05fQVBQTElDQVRJT04gJiYgYXJnLS0gPT0gMCkKKwkJCQlicmVhazsKKwkJCisJCWlmIChpID09IGhpZC0+bWF4Y29sbGVjdGlvbikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXJldHVybiBoaWQtPmNvbGxlY3Rpb25baV0udXNhZ2U7CisKKwljYXNlIEhJRElPQ0dERVZJTkZPOgorCQlkaW5mby5idXN0eXBlID0gQlVTX1VTQjsKKwkJZGluZm8uYnVzbnVtID0gZGV2LT5idXMtPmJ1c251bTsKKwkJZGluZm8uZGV2bnVtID0gZGV2LT5kZXZudW07CisJCWRpbmZvLmlmbnVtID0gaGlkLT5pZm51bTsKKwkJZGluZm8udmVuZG9yID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwkJZGluZm8ucHJvZHVjdCA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCQlkaW5mby52ZXJzaW9uID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisJCWRpbmZvLm51bV9hcHBsaWNhdGlvbnMgPSBoaWQtPm1heGFwcGxpY2F0aW9uOworCQlpZiAoY29weV90b191c2VyKHVzZXJfYXJnLCAmZGluZm8sIHNpemVvZihkaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0dXJuIDA7CisKKwljYXNlIEhJRElPQ0dGTEFHOgorCQlpZiAocHV0X3VzZXIobGlzdC0+ZmxhZ3MsIChpbnQgX191c2VyICopYXJnKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCisJY2FzZSBISURJT0NTRkxBRzoKKwkJeworCQkJaW50IG5ld2ZsYWdzOworCQkJaWYgKGdldF91c2VyKG5ld2ZsYWdzLCAoaW50IF9fdXNlciAqKWFyZykpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJCWlmICgobmV3ZmxhZ3MgJiB+SElEREVWX0ZMQUdTKSAhPSAwIHx8CisJCQkgICAgKChuZXdmbGFncyAmIEhJRERFVl9GTEFHX1JFUE9SVCkgIT0gMCAmJgorCQkJICAgICAobmV3ZmxhZ3MgJiBISURERVZfRkxBR19VUkVGKSA9PSAwKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJbGlzdC0+ZmxhZ3MgPSBuZXdmbGFnczsKKworCQkJcmV0dXJuIDA7CisJCX0KKworCWNhc2UgSElESU9DR1NUUklORzoKKwkJeworCQkJaW50IGlkeCwgbGVuOworCQkJY2hhciAqYnVmOworCisJCQlpZiAoZ2V0X3VzZXIoaWR4LCAoaW50IF9fdXNlciAqKWFyZykpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJCWlmICgoYnVmID0ga21hbGxvYyhISURfU1RSSU5HX1NJWkUsIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCQkJCXJldHVybiAtRU5PTUVNOworCisJCQlpZiAoKGxlbiA9IHVzYl9zdHJpbmcoZGV2LCBpZHgsIGJ1ZiwgSElEX1NUUklOR19TSVpFLTEpKSA8IDApIHsKKwkJCQlrZnJlZShidWYpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJCQlpZiAoY29weV90b191c2VyKHVzZXJfYXJnK3NpemVvZihpbnQpLCBidWYsIGxlbisxKSkgeworCQkJCWtmcmVlKGJ1Zik7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisKKwkJCWtmcmVlKGJ1Zik7CisKKwkJCXJldHVybiBsZW47CisJCX0KKworCWNhc2UgSElESU9DSU5JVFJFUE9SVDoKKwkJaGlkX2luaXRfcmVwb3J0cyhoaWQpOworCisJCXJldHVybiAwOworCisJY2FzZSBISURJT0NHUkVQT1JUOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJnJpbmZvLCB1c2VyX2FyZywgc2l6ZW9mKHJpbmZvKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAocmluZm8ucmVwb3J0X3R5cGUgPT0gSElEX1JFUE9SVF9UWVBFX09VVFBVVCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICgocmVwb3J0ID0gaGlkZGV2X2xvb2t1cF9yZXBvcnQoaGlkLCAmcmluZm8pKSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCByZXBvcnQsIFVTQl9ESVJfSU4pOworCQloaWRfd2FpdF9pbyhoaWQpOworCisJCXJldHVybiAwOworCisJY2FzZSBISURJT0NTUkVQT1JUOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJnJpbmZvLCB1c2VyX2FyZywgc2l6ZW9mKHJpbmZvKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAocmluZm8ucmVwb3J0X3R5cGUgPT0gSElEX1JFUE9SVF9UWVBFX0lOUFVUKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKChyZXBvcnQgPSBoaWRkZXZfbG9va3VwX3JlcG9ydChoaWQsICZyaW5mbykpID09IE5VTEwpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQloaWRfc3VibWl0X3JlcG9ydChoaWQsIHJlcG9ydCwgVVNCX0RJUl9PVVQpOworCisJCXJldHVybiAwOworCisJY2FzZSBISURJT0NHUkVQT1JUSU5GTzoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZyaW5mbywgdXNlcl9hcmcsIHNpemVvZihyaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKChyZXBvcnQgPSBoaWRkZXZfbG9va3VwX3JlcG9ydChoaWQsICZyaW5mbykpID09IE5VTEwpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyaW5mby5udW1fZmllbGRzID0gcmVwb3J0LT5tYXhmaWVsZDsKKworCQlpZiAoY29weV90b191c2VyKHVzZXJfYXJnLCAmcmluZm8sIHNpemVvZihyaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0dXJuIDA7CisKKwljYXNlIEhJRElPQ0dGSUVMRElORk86CisJCWlmIChjb3B5X2Zyb21fdXNlcigmZmluZm8sIHVzZXJfYXJnLCBzaXplb2YoZmluZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyaW5mby5yZXBvcnRfdHlwZSA9IGZpbmZvLnJlcG9ydF90eXBlOworCQlyaW5mby5yZXBvcnRfaWQgPSBmaW5mby5yZXBvcnRfaWQ7CisJCWlmICgocmVwb3J0ID0gaGlkZGV2X2xvb2t1cF9yZXBvcnQoaGlkLCAmcmluZm8pKSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGZpbmZvLmZpZWxkX2luZGV4ID49IHJlcG9ydC0+bWF4ZmllbGQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlmaWVsZCA9IHJlcG9ydC0+ZmllbGRbZmluZm8uZmllbGRfaW5kZXhdOworCQltZW1zZXQoJmZpbmZvLCAwLCBzaXplb2YoZmluZm8pKTsKKwkJZmluZm8ucmVwb3J0X3R5cGUgPSByaW5mby5yZXBvcnRfdHlwZTsKKwkJZmluZm8ucmVwb3J0X2lkID0gcmluZm8ucmVwb3J0X2lkOworCQlmaW5mby5maWVsZF9pbmRleCA9IGZpZWxkLT5yZXBvcnRfY291bnQgLSAxOworCQlmaW5mby5tYXh1c2FnZSA9IGZpZWxkLT5tYXh1c2FnZTsKKwkJZmluZm8uZmxhZ3MgPSBmaWVsZC0+ZmxhZ3M7CisJCWZpbmZvLnBoeXNpY2FsID0gZmllbGQtPnBoeXNpY2FsOworCQlmaW5mby5sb2dpY2FsID0gZmllbGQtPmxvZ2ljYWw7CisJCWZpbmZvLmFwcGxpY2F0aW9uID0gZmllbGQtPmFwcGxpY2F0aW9uOworCQlmaW5mby5sb2dpY2FsX21pbmltdW0gPSBmaWVsZC0+bG9naWNhbF9taW5pbXVtOworCQlmaW5mby5sb2dpY2FsX21heGltdW0gPSBmaWVsZC0+bG9naWNhbF9tYXhpbXVtOworCQlmaW5mby5waHlzaWNhbF9taW5pbXVtID0gZmllbGQtPnBoeXNpY2FsX21pbmltdW07CisJCWZpbmZvLnBoeXNpY2FsX21heGltdW0gPSBmaWVsZC0+cGh5c2ljYWxfbWF4aW11bTsKKwkJZmluZm8udW5pdF9leHBvbmVudCA9IGZpZWxkLT51bml0X2V4cG9uZW50OworCQlmaW5mby51bml0ID0gZmllbGQtPnVuaXQ7CisKKwkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgJmZpbmZvLCBzaXplb2YoZmluZm8pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCisJY2FzZSBISURJT0NHVUNPREU6CisJCXVyZWZfbXVsdGkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZl9tdWx0aSksIEdGUF9LRVJORUwpOworCQlpZiAoIXVyZWZfbXVsdGkpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJdXJlZiA9ICZ1cmVmX211bHRpLT51cmVmOworCQlpZiAoY29weV9mcm9tX3VzZXIodXJlZiwgdXNlcl9hcmcsIHNpemVvZigqdXJlZikpKSAKKwkJCWdvdG8gZmF1bHQ7CisKKwkJcmluZm8ucmVwb3J0X3R5cGUgPSB1cmVmLT5yZXBvcnRfdHlwZTsKKwkJcmluZm8ucmVwb3J0X2lkID0gdXJlZi0+cmVwb3J0X2lkOworCQlpZiAoKHJlcG9ydCA9IGhpZGRldl9sb29rdXBfcmVwb3J0KGhpZCwgJnJpbmZvKSkgPT0gTlVMTCkKKwkJCWdvdG8gaW52YWw7CisKKwkJaWYgKHVyZWYtPmZpZWxkX2luZGV4ID49IHJlcG9ydC0+bWF4ZmllbGQpCisJCQlnb3RvIGludmFsOworCisJCWZpZWxkID0gcmVwb3J0LT5maWVsZFt1cmVmLT5maWVsZF9pbmRleF07CisJCWlmICh1cmVmLT51c2FnZV9pbmRleCA+PSBmaWVsZC0+bWF4dXNhZ2UpCisJCQlnb3RvIGludmFsOworCisJCXVyZWYtPnVzYWdlX2NvZGUgPSBmaWVsZC0+dXNhZ2VbdXJlZi0+dXNhZ2VfaW5kZXhdLmhpZDsKKworCQlpZiAoY29weV90b191c2VyKHVzZXJfYXJnLCB1cmVmLCBzaXplb2YoKnVyZWYpKSkKKwkJCWdvdG8gZmF1bHQ7CisKKwkJa2ZyZWUodXJlZl9tdWx0aSk7CisJCXJldHVybiAwOworCisJY2FzZSBISURJT0NHVVNBR0U6CisJY2FzZSBISURJT0NTVVNBR0U6CisJY2FzZSBISURJT0NHVVNBR0VTOgorCWNhc2UgSElESU9DU1VTQUdFUzoKKwljYXNlIEhJRElPQ0dDT0xMRUNUSU9OSU5ERVg6CisJCXVyZWZfbXVsdGkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZl9tdWx0aSksIEdGUF9LRVJORUwpOworCQlpZiAoIXVyZWZfbXVsdGkpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJdXJlZiA9ICZ1cmVmX211bHRpLT51cmVmOworCQlpZiAoY21kID09IEhJRElPQ0dVU0FHRVMgfHwgY21kID09IEhJRElPQ1NVU0FHRVMpIHsKKwkJCWlmIChjb3B5X2Zyb21fdXNlcih1cmVmX211bHRpLCB1c2VyX2FyZywgCisJCQkJCSAgIHNpemVvZigqdXJlZl9tdWx0aSkpKQorCQkJCWdvdG8gZmF1bHQ7CisJCX0gZWxzZSB7CisJCQlpZiAoY29weV9mcm9tX3VzZXIodXJlZiwgdXNlcl9hcmcsIHNpemVvZigqdXJlZikpKQorCQkJCWdvdG8gZmF1bHQ7CisJCX0KKworCQlpZiAoY21kICE9IEhJRElPQ0dVU0FHRSAmJiAKKwkJICAgIGNtZCAhPSBISURJT0NHVVNBR0VTICYmCisJCSAgICB1cmVmLT5yZXBvcnRfdHlwZSA9PSBISURfUkVQT1JUX1RZUEVfSU5QVVQpCisJCQlnb3RvIGludmFsOworCisJCWlmICh1cmVmLT5yZXBvcnRfaWQgPT0gSElEX1JFUE9SVF9JRF9VTktOT1dOKSB7CisJCQlmaWVsZCA9IGhpZGRldl9sb29rdXBfdXNhZ2UoaGlkLCB1cmVmKTsKKwkJCWlmIChmaWVsZCA9PSBOVUxMKQorCQkJCWdvdG8gaW52YWw7CisJCX0gZWxzZSB7CisJCQlyaW5mby5yZXBvcnRfdHlwZSA9IHVyZWYtPnJlcG9ydF90eXBlOworCQkJcmluZm8ucmVwb3J0X2lkID0gdXJlZi0+cmVwb3J0X2lkOworCQkJaWYgKChyZXBvcnQgPSBoaWRkZXZfbG9va3VwX3JlcG9ydChoaWQsICZyaW5mbykpID09IE5VTEwpCisJCQkJZ290byBpbnZhbDsKKworCQkJaWYgKHVyZWYtPmZpZWxkX2luZGV4ID49IHJlcG9ydC0+bWF4ZmllbGQpCisJCQkJZ290byBpbnZhbDsKKworCQkJZmllbGQgPSByZXBvcnQtPmZpZWxkW3VyZWYtPmZpZWxkX2luZGV4XTsKKworCQkJaWYgKGNtZCA9PSBISURJT0NHQ09MTEVDVElPTklOREVYKSB7CisJCQkJaWYgKHVyZWYtPnVzYWdlX2luZGV4ID49IGZpZWxkLT5tYXh1c2FnZSkKKwkJCQkJZ290byBpbnZhbDsKKwkJCX0gZWxzZSBpZiAodXJlZi0+dXNhZ2VfaW5kZXggPj0gZmllbGQtPnJlcG9ydF9jb3VudCkKKwkJCQlnb3RvIGludmFsOworCisJCQllbHNlIGlmICgoY21kID09IEhJRElPQ0dVU0FHRVMgfHwgY21kID09IEhJRElPQ1NVU0FHRVMpICYmCisJCQkJICh1cmVmX211bHRpLT5udW1fdmFsdWVzID4gSElEX01BWF9NVUxUSV9VU0FHRVMgfHwKKwkJCQkgIHVyZWYtPnVzYWdlX2luZGV4ICsgdXJlZl9tdWx0aS0+bnVtX3ZhbHVlcyA+PSBmaWVsZC0+cmVwb3J0X2NvdW50KSkKKwkJCQlnb3RvIGludmFsOworCQkJfQorCisJCXN3aXRjaCAoY21kKSB7CisJCQljYXNlIEhJRElPQ0dVU0FHRToKKwkJCQl1cmVmLT52YWx1ZSA9IGZpZWxkLT52YWx1ZVt1cmVmLT51c2FnZV9pbmRleF07CisJCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgdXJlZiwgc2l6ZW9mKCp1cmVmKSkpCisJCQkJCWdvdG8gZmF1bHQ7CisJCQkJZ290byBnb29kcmV0dXJuOworCisJCQljYXNlIEhJRElPQ1NVU0FHRToKKwkJCQlmaWVsZC0+dmFsdWVbdXJlZi0+dXNhZ2VfaW5kZXhdID0gdXJlZi0+dmFsdWU7CisJCQkJZ290byBnb29kcmV0dXJuOworCisJCQljYXNlIEhJRElPQ0dDT0xMRUNUSU9OSU5ERVg6CisJCQkJa2ZyZWUodXJlZl9tdWx0aSk7CisJCQkJcmV0dXJuIGZpZWxkLT51c2FnZVt1cmVmLT51c2FnZV9pbmRleF0uY29sbGVjdGlvbl9pbmRleDsKKwkJCWNhc2UgSElESU9DR1VTQUdFUzoKKwkJCQlmb3IgKGkgPSAwOyBpIDwgdXJlZl9tdWx0aS0+bnVtX3ZhbHVlczsgaSsrKQorCQkJCQl1cmVmX211bHRpLT52YWx1ZXNbaV0gPSAKKwkJCQkJICAgIGZpZWxkLT52YWx1ZVt1cmVmLT51c2FnZV9pbmRleCArIGldOworCQkJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9hcmcsIHVyZWZfbXVsdGksIAorCQkJCQkJIHNpemVvZigqdXJlZl9tdWx0aSkpKQorCQkJCQlnb3RvIGZhdWx0OworCQkJCWdvdG8gZ29vZHJldHVybjsKKwkJCWNhc2UgSElESU9DU1VTQUdFUzoKKwkJCQlmb3IgKGkgPSAwOyBpIDwgdXJlZl9tdWx0aS0+bnVtX3ZhbHVlczsgaSsrKQorCQkJCQlmaWVsZC0+dmFsdWVbdXJlZi0+dXNhZ2VfaW5kZXggKyBpXSA9IAorCQkJCSAgCSAgICB1cmVmX211bHRpLT52YWx1ZXNbaV07CisJCQkJZ290byBnb29kcmV0dXJuOworCQl9CisKK2dvb2RyZXR1cm46CisJCWtmcmVlKHVyZWZfbXVsdGkpOworCQlyZXR1cm4gMDsKK2ZhdWx0OgorCQlrZnJlZSh1cmVmX211bHRpKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CitpbnZhbDoJCQorCQlrZnJlZSh1cmVmX211bHRpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljYXNlIEhJRElPQ0dDT0xMRUNUSU9OSU5GTzoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZjaW5mbywgdXNlcl9hcmcsIHNpemVvZihjaW5mbykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKGNpbmZvLmluZGV4ID49IGhpZC0+bWF4Y29sbGVjdGlvbikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWNpbmZvLnR5cGUgPSBoaWQtPmNvbGxlY3Rpb25bY2luZm8uaW5kZXhdLnR5cGU7CisJCWNpbmZvLnVzYWdlID0gaGlkLT5jb2xsZWN0aW9uW2NpbmZvLmluZGV4XS51c2FnZTsKKwkJY2luZm8ubGV2ZWwgPSBoaWQtPmNvbGxlY3Rpb25bY2luZm8uaW5kZXhdLmxldmVsOworCisJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9hcmcsICZjaW5mbywgc2l6ZW9mKGNpbmZvKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisKKwlkZWZhdWx0OgorCisJCWlmIChfSU9DX1RZUEUoY21kKSAhPSAnSCcgfHwgX0lPQ19ESVIoY21kKSAhPSBfSU9DX1JFQUQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoX0lPQ19OUihjbWQpID09IF9JT0NfTlIoSElESU9DR05BTUUoMCkpKSB7CisJCQlpbnQgbGVuOworCQkJaWYgKCFoaWQtPm5hbWUpCisJCQkJcmV0dXJuIDA7CisJCQlsZW4gPSBzdHJsZW4oaGlkLT5uYW1lKSArIDE7CisJCQlpZiAobGVuID4gX0lPQ19TSVpFKGNtZCkpCisJCQkJIGxlbiA9IF9JT0NfU0laRShjbWQpOworCQkJcmV0dXJuIGNvcHlfdG9fdXNlcih1c2VyX2FyZywgaGlkLT5uYW1lLCBsZW4pID8KKwkJCQktRUZBVUxUIDogbGVuOworCQl9CisKKwkJaWYgKF9JT0NfTlIoY21kKSA9PSBfSU9DX05SKEhJRElPQ0dQSFlTKDApKSkgeworCQkJaW50IGxlbjsKKwkJCWlmICghaGlkLT5waHlzKQorCQkJCXJldHVybiAwOworCQkJbGVuID0gc3RybGVuKGhpZC0+cGh5cykgKyAxOworCQkJaWYgKGxlbiA+IF9JT0NfU0laRShjbWQpKQorCQkJCWxlbiA9IF9JT0NfU0laRShjbWQpOworCQkJcmV0dXJuIGNvcHlfdG9fdXNlcih1c2VyX2FyZywgaGlkLT5waHlzLCBsZW4pID8KKwkJCQktRUZBVUxUIDogbGVuOworCQl9CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoaWRkZXZfZm9wcyA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkucmVhZCA9CQloaWRkZXZfcmVhZCwKKwkud3JpdGUgPQloaWRkZXZfd3JpdGUsCisJLnBvbGwgPQkJaGlkZGV2X3BvbGwsCisJLm9wZW4gPQkJaGlkZGV2X29wZW4sCisJLnJlbGVhc2UgPQloaWRkZXZfcmVsZWFzZSwKKwkuaW9jdGwgPQloaWRkZXZfaW9jdGwsCisJLmZhc3luYyA9CWhpZGRldl9mYXN5bmMsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgaGlkZGV2X2NsYXNzID0geworCS5uYW1lID0JCSJ1c2IvaGlkL2hpZGRldiVkIiwKKwkuZm9wcyA9CQkmaGlkZGV2X2ZvcHMsCisJLm1vZGUgPQkJU19JRkNIUiB8IFNfSVJVR08gfCBTX0lXVVNSLAorICAgICAgIAkubWlub3JfYmFzZSA9CUhJRERFVl9NSU5PUl9CQVNFLAorfTsKKworLyoKKyAqIFRoaXMgaXMgd2hlcmUgaGlkLmMgY2FsbHMgdXMgdG8gY29ubmVjdCBhIGhpZCBkZXZpY2UgdG8gdGhlIGhpZGRldiBkcml2ZXIKKyAqLworaW50IGhpZGRldl9jb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IGhpZGRldiAqaGlkZGV2OworCWludCBpOworCWludCByZXR2YWw7CisKKwlmb3IgKGkgPSAwOyBpIDwgaGlkLT5tYXhjb2xsZWN0aW9uOyBpKyspCisJCWlmIChoaWQtPmNvbGxlY3Rpb25baV0udHlwZSA9PSAKKwkJICAgIEhJRF9DT0xMRUNUSU9OX0FQUExJQ0FUSU9OICYmCisJCSAgICAhSVNfSU5QVVRfQVBQTElDQVRJT04oaGlkLT5jb2xsZWN0aW9uW2ldLnVzYWdlKSkKKwkJCWJyZWFrOworCisJaWYgKGkgPT0gaGlkLT5tYXhjb2xsZWN0aW9uICYmIChoaWQtPnF1aXJrcyAmIEhJRF9RVUlSS19ISURERVYpID09IDApCisJCXJldHVybiAtMTsKKworIAlpZiAoIShoaWRkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGlkZGV2KSwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm4gLTE7CisJbWVtc2V0KGhpZGRldiwgMCwgc2l6ZW9mKHN0cnVjdCBoaWRkZXYpKTsKKworIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGhpZC0+aW50ZiwgJmhpZGRldl9jbGFzcyk7CisJaWYgKHJldHZhbCkgeworCQllcnIoIk5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS4iKTsKKwkJa2ZyZWUoaGlkZGV2KTsKKwkJcmV0dXJuIC0xOworCX0KKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmhpZGRldi0+d2FpdCk7CisKKyAJaGlkZGV2X3RhYmxlW2hpZC0+aW50Zi0+bWlub3IgLSBISURERVZfTUlOT1JfQkFTRV0gPSBoaWRkZXY7CisKKwloaWRkZXYtPmhpZCA9IGhpZDsKKwloaWRkZXYtPmV4aXN0ID0gMTsKKworIAloaWQtPm1pbm9yID0gaGlkLT5pbnRmLT5taW5vcjsKKwloaWQtPmhpZGRldiA9IGhpZGRldjsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBpcyB3aGVyZSBoaWQuYyBjYWxscyB1cyB0byBkaXNjb25uZWN0IGEgaGlkZGV2IGRldmljZSBmcm9tIHRoZQorICogY29ycmVzcG9uZGluZyBoaWQgZGV2aWNlICh1c3VhbGx5IGJlY2F1c2UgdGhlIHVzYiBkZXZpY2UgaGFzIGRpc2Nvbm5lY3RlZCkKKyAqLworc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIGhpZGRldl9jbGFzczsKK3ZvaWQgaGlkZGV2X2Rpc2Nvbm5lY3Qoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlzdHJ1Y3QgaGlkZGV2ICpoaWRkZXYgPSBoaWQtPmhpZGRldjsKKworCWhpZGRldi0+ZXhpc3QgPSAwOworCisJaGlkZGV2X3RhYmxlW2hpZGRldi0+aGlkLT5taW5vciAtIEhJRERFVl9NSU5PUl9CQVNFXSA9IE5VTEw7CisJdXNiX2RlcmVnaXN0ZXJfZGV2KGhpZGRldi0+aGlkLT5pbnRmLCAmaGlkZGV2X2NsYXNzKTsKKworCWlmIChoaWRkZXYtPm9wZW4pIHsKKwkJaGlkX2Nsb3NlKGhpZGRldi0+aGlkKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZoaWRkZXYtPndhaXQpOworCX0gZWxzZSB7CisJCWtmcmVlKGhpZGRldik7CisJfQorfQorCisvKiBDdXJyZW50bHkgdGhpcyBkcml2ZXIgaXMgYSBVU0IgZHJpdmVyLiAgSXQncyBub3QgYSBjb252ZW50aW9uYWwgb25lIGluCisgKiB0aGUgc2Vuc2UgdGhhdCBpdCBkb2Vzbid0IHByb2JlIGF0IHRoZSBVU0IgbGV2ZWwuICBJbnN0ZWFkIGl0IHdhaXRzIHRvCisgKiBiZSBjb25uZWN0ZWQgYnkgSElEIHRocm91Z2ggdGhlIGhpZGRldl9jb25uZWN0IC8gaGlkZGV2X2Rpc2Nvbm5lY3QKKyAqIHJvdXRpbmVzLiAgVGhlIHJlYXNvbiB0byByZWdpc3RlciBhcyBhIFVTQiBkZXZpY2UgaXMgdG8gZ2FpbiBwYXJ0IG9mIHRoZQorICogbWlub3IgbnVtYmVyIHNwYWNlIGZyb20gdGhlIFVTQiBtYWpvci4KKyAqCisgKiBJbiB0aGVvcnksIHNob3VsZCB0aGUgSElEIGNvZGUgYmUgZ2VuZXJhbGl6ZWQgdG8gbW9yZSB0aGFuIG9uZSBwaHlzaWNhbAorICogbWVkaXVtIChzYXksIElFRUUgMTM4NCksIHRoaXMgZHJpdmVyIHdpbGwgcHJvYmFibHkgbmVlZCB0byByZWdpc3RlciBpdHMKKyAqIG93biBtYWpvciBudW1iZXIsIGFuZCBpbiBkb2luZyBzbywgbm8gbG9uZ2VyIG5lZWQgdG8gcmVnaXN0ZXIgd2l0aCBVU0IuCisgKiBBdCB0aGF0IHBvaW50IHRoZSBwcm9iZSByb3V0aW5lIGFuZCBoaWRkZXZfZHJpdmVyIHN0cnVjdCBiZWxvdyB3aWxsIG5vCisgKiBsb25nZXIgYmUgdXNlZnVsLgorICovCisKKworLyogV2UgbmV2ZXIgYXR0YWNoIGluIHRoaXMgbWFubmVyLCBhbmQgcmVseSBvbiBISUQgdG8gY29ubmVjdCB1cy4gIFRoaXMKKyAqIGlzIHdoeSB0aGVyZSBpcyBubyBkaXNjb25uZWN0IHJvdXRpbmUgZGVmaW5lZCBpbiB0aGUgdXNiX2RyaXZlciBlaXRoZXIuCisgKi8KK3N0YXRpYyBpbnQgaGlkZGV2X3VzYmRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIAorCQkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaGlkZGV2X2luZm8pCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKKworc3RhdGljIC8qIGNvbnN0ICovIHN0cnVjdCB1c2JfZHJpdmVyIGhpZGRldl9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImhpZGRldiIsCisJLnByb2JlID0JaGlkZGV2X3VzYmRfcHJvYmUsCit9OworCitpbnQgX19pbml0IGhpZGRldl9pbml0KHZvaWQpCit7CisJZGV2ZnNfbWtfZGlyKCJ1c2IvaGlkIik7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmaGlkZGV2X2RyaXZlcik7Cit9CisKK3ZvaWQgaGlkZGV2X2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmaGlkZGV2X2RyaXZlcik7CisJZGV2ZnNfcmVtb3ZlKCJ1c2IvaGlkIik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9rYnRhYi5jIGIvZHJpdmVycy91c2IvaW5wdXQva2J0YWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjhjNWI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQva2J0YWIuYwpAQCAtMCwwICsxLDI0MSBAQAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICogdjAuMC4xIC0gT3JpZ2luYWwsIGV4dHJlbWVseSBiYXNpYyB2ZXJzaW9uLCAyLjQueHggb25seQorICogdjAuMC4yIC0gVXBkYXRlZCwgd29ya3Mgd2l0aCAyLjUuNjIgYW5kIDIuNC4yMDsKKyAqICAgICAgICAgICAtIGFkZGVkIHByZXNzdXJlLXRocmVzaG9sZCBtb2R1bGVzIHBhcmFtIGNvZGUgZnJvbQorICogICAgICAgICAgICAgIEFsZXggUGVycnkgPGFsZXgucGVycnlAaWVlZS5vcmc+CisgKi8KKworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMC4yIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJKb3NoIE15ZXIgPGpvc2hAam9zaGlzYW5lcmQuY29tPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBLQiBHZWFyIEphbVN0dWRpbyBUYWJsZXQgZHJpdmVyIgorI2RlZmluZSBEUklWRVJfTElDRU5TRSAiR1BMIgorCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKERSSVZFUl9MSUNFTlNFKTsKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0tCR0VBUgkweDA4NGUKKworc3RhdGljIGludCBrYl9wcmVzc3VyZV9jbGljayA9IDB4MTA7Cittb2R1bGVfcGFyYW0oa2JfcHJlc3N1cmVfY2xpY2ssIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGtiX3ByZXNzdXJlX2NsaWNrLCAicHJlc3N1cmUgdGhyZXNob2xkIGZvciBjbGlja3MiKTsKKworc3RydWN0IGtidGFiIHsKKwlzaWduZWQgY2hhciAqZGF0YTsKKwlkbWFfYWRkcl90IGRhdGFfZG1hOworCXN0cnVjdCBpbnB1dF9kZXYgZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CisJc3RydWN0IHVyYiAqaXJxOworCWludCBvcGVuOworCWludCB4LCB5OworCWludCBidXR0b247CisJaW50IHByZXNzdXJlOworCV9fdTMyIHNlcmlhbFsyXTsKKwljaGFyIHBoeXNbMzJdOworfTsKKworc3RhdGljIHZvaWQga2J0YWJfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGtidGFiICprYnRhYiA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0ga2J0YWItPmRhdGE7CisJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gJmtidGFiLT5kZXY7CisJaW50IHJldHZhbDsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJa2J0YWItPnggPSBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2xlMTYgKikgJmRhdGFbMV0pKTsKKwlrYnRhYi0+eSA9IGxlMTZfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fbGUxNiAqKSAmZGF0YVszXSkpOworCisJa2J0YWItPnByZXNzdXJlID0gKGRhdGFbNV0pOworCisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT09MX1BFTiwgMSk7CisKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIGtidGFiLT54KTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIGtidGFiLT55KTsKKworCS8qaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT1VDSCAsIGRhdGFbMF0gJiAweDAxKTsqLworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fUklHSFQsIGRhdGFbMF0gJiAweDAyKTsKKworCWlmKCAtMSA9PSBrYl9wcmVzc3VyZV9jbGljayl7IAorCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1BSRVNTVVJFLCBrYnRhYi0+cHJlc3N1cmUpOworCX0gZWxzZSB7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTEVGVCwgKGtidGFiLT5wcmVzc3VyZSA+IGtiX3ByZXNzdXJlX2NsaWNrKSA/IDEgOiAwKTsKKwl9OworCQorCWlucHV0X3N5bmMoZGV2KTsKKworIGV4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGtidGFiX2lkc1tdID0geworCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0tCR0VBUiwgMHgxMDAxKSwgLmRyaXZlcl9pbmZvID0gMCB9LAorCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGtidGFiX2lkcyk7CisKK3N0YXRpYyBpbnQga2J0YWJfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IGtidGFiICprYnRhYiA9IGRldi0+cHJpdmF0ZTsKKworCWlmIChrYnRhYi0+b3BlbisrKQorCQlyZXR1cm4gMDsKKworCWtidGFiLT5pcnEtPmRldiA9IGtidGFiLT51c2JkZXY7CisJaWYgKHVzYl9zdWJtaXRfdXJiKGtidGFiLT5pcnEsIEdGUF9LRVJORUwpKSB7CisJCWtidGFiLT5vcGVuLS07CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBrYnRhYl9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IGtidGFiICprYnRhYiA9IGRldi0+cHJpdmF0ZTsKKworCWlmICghLS1rYnRhYi0+b3BlbikKKwkJdXNiX2tpbGxfdXJiKGtidGFiLT5pcnEpOworfQorCitzdGF0aWMgaW50IGtidGFiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzdHJ1Y3Qga2J0YWIgKmtidGFiOworCWNoYXIgcGF0aFs2NF07CisKKwlpZiAoIShrYnRhYiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrYnRhYiksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KGtidGFiLCAwLCBzaXplb2Yoc3RydWN0IGtidGFiKSk7CisKKwlrYnRhYi0+ZGF0YSA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LCA4LCBHRlBfS0VSTkVMLCAma2J0YWItPmRhdGFfZG1hKTsKKwlpZiAoIWtidGFiLT5kYXRhKSB7CisJCWtmcmVlKGtidGFiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJa2J0YWItPmlycSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFrYnRhYi0+aXJxKSB7CisJCXVzYl9idWZmZXJfZnJlZShkZXYsIDEwLCBrYnRhYi0+ZGF0YSwga2J0YWItPmRhdGFfZG1hKTsKKwkJa2ZyZWUoa2J0YWIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlrYnRhYi0+ZGV2LmV2Yml0WzBdIHw9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUykgfCBCSVQoRVZfTVNDKTsKKwlrYnRhYi0+ZGV2LmFic2JpdFswXSB8PSBCSVQoQUJTX1gpIHwgQklUKEFCU19ZKSB8IEJJVChBQlNfUFJFU1NVUkUpOworCisJa2J0YWItPmRldi5rZXliaXRbTE9ORyhCVE5fTEVGVCldIHw9IEJJVChCVE5fTEVGVCkgfCBCSVQoQlROX1JJR0hUKSB8IEJJVChCVE5fTUlERExFKTsKKworCWtidGFiLT5kZXYua2V5Yml0W0xPTkcoQlROX0RJR0kpXSB8PSBCSVQoQlROX1RPT0xfUEVOKSB8IEJJVChCVE5fVE9VQ0gpOworCisJa2J0YWItPmRldi5tc2NiaXRbMF0gfD0gQklUKE1TQ19TRVJJQUwpOworCisJa2J0YWItPmRldi5hYnNtYXhbQUJTX1hdID0gMHgyMDAwOworCWtidGFiLT5kZXYuYWJzbWF4W0FCU19ZXSA9IDB4MTc1MDsKKwlrYnRhYi0+ZGV2LmFic21heFtBQlNfUFJFU1NVUkVdID0gMHhmZjsKKwkKKwlrYnRhYi0+ZGV2LmFic2Z1enpbQUJTX1hdID0gNDsKKwlrYnRhYi0+ZGV2LmFic2Z1enpbQUJTX1ldID0gNDsKKworCWtidGFiLT5kZXYucHJpdmF0ZSA9IGtidGFiOworCWtidGFiLT5kZXYub3BlbiA9IGtidGFiX29wZW47CisJa2J0YWItPmRldi5jbG9zZSA9IGtidGFiX2Nsb3NlOworCisJdXNiX21ha2VfcGF0aChkZXYsIHBhdGgsIDY0KTsKKwlzcHJpbnRmKGtidGFiLT5waHlzLCAiJXMvaW5wdXQwIiwgcGF0aCk7CisKKwlrYnRhYi0+ZGV2Lm5hbWUgPSAiS0IgR2VhciBUYWJsZXQiOworCWtidGFiLT5kZXYucGh5cyA9IGtidGFiLT5waHlzOworCWtidGFiLT5kZXYuaWQuYnVzdHlwZSA9IEJVU19VU0I7CisJa2J0YWItPmRldi5pZC52ZW5kb3IgPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCWtidGFiLT5kZXYuaWQucHJvZHVjdCA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCWtidGFiLT5kZXYuaWQudmVyc2lvbiA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCWtidGFiLT5kZXYuZGV2ID0gJmludGYtPmRldjsKKwlrYnRhYi0+dXNiZGV2ID0gZGV2OworCisJZW5kcG9pbnQgPSAmaW50Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzBdLmRlc2M7CisKKwl1c2JfZmlsbF9pbnRfdXJiKGtidGFiLT5pcnEsIGRldiwKKwkJCSB1c2JfcmN2aW50cGlwZShkZXYsIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCSBrYnRhYi0+ZGF0YSwgOCwKKwkJCSBrYnRhYl9pcnEsIGtidGFiLCBlbmRwb2ludC0+YkludGVydmFsKTsKKwlrYnRhYi0+aXJxLT50cmFuc2Zlcl9kbWEgPSBrYnRhYi0+ZGF0YV9kbWE7CisJa2J0YWItPmlycS0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoJmtidGFiLT5kZXYpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiaW5wdXQ6IEtCIEdlYXIgVGFibGV0IG9uICVzXG4iLCAgcGF0aCk7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGtidGFiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBrYnRhYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBrYnRhYiAqa2J0YWIgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJaWYgKGtidGFiKSB7CisJCXVzYl9raWxsX3VyYihrYnRhYi0+aXJxKTsKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoJmtidGFiLT5kZXYpOworCQl1c2JfZnJlZV91cmIoa2J0YWItPmlycSk7CisJCXVzYl9idWZmZXJfZnJlZShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCAxMCwga2J0YWItPmRhdGEsIGtidGFiLT5kYXRhX2RtYSk7CisJCWtmcmVlKGtidGFiKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBrYnRhYl9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImtidGFiIiwKKwkucHJvYmUgPQlrYnRhYl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CWtidGFiX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0Ja2J0YWJfaWRzLAorfTsKKworc3RhdGljIGludCBfX2luaXQga2J0YWJfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZrYnRhYl9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gb3V0OworCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQga2J0YWJfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZrYnRhYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChrYnRhYl9pbml0KTsKK21vZHVsZV9leGl0KGtidGFiX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvbXRvdWNodXNiLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9tdG91Y2h1c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjQ1YTY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvbXRvdWNodXNiLmMKQEAgLTAsMCArMSwzNjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIG10b3VjaHVzYi5jICAtLSAgRHJpdmVyIGZvciBNaWNyb3RvdWNoIChOb3cgM00pIFVTQiBUb3VjaHNjcmVlbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiBCYXNlZCB1cG9uIG9yaWdpbmFsIHdvcmsgYnkgUmFkb3NsYXcgR2FyYmFjeiAodXNiLXN1cHBvcnRAaXRlLnBsKQorICogIChodHRwOi8vZnJlc2htZWF0Lm5ldC9wcm9qZWN0cy8zbXRvdWNoc2NyZWVuZHJpdmVyKQorICoKKyAqIEhpc3RvcnkKKyAqCisgKiAgMC4zICYgMC40ICAyMDAyIChURUopIHRlam9obnNvbkB5YWhvby5jb20KKyAqICAgIFVwZGF0ZWQgdG8gMi40LjE4LCB0aGVuIDIuNC4xOQorICogICAgT2xkIHZlcnNpb24gc3RpbGwgcmVsaWVkIG9uIHN0ZWFsaW5nIGEgbWlub3IKKyAqCisgKiAgMC41ICAwMi8yNi8yMDA0IChURUopIHRlam9obnNvbkB5YWhvby5jb20KKyAqICAgIENvbXBsZXRlIHJld3JpdGUgdXNpbmcgTGludXggSW5wdXQgaW4gMi42LjMKKyAqICAgIFVuZm9ydHVuYXRlbHkgbm8gY2FsaWJyYXRpb24gc3VwcG9ydCBhdCB0aGlzIHRpbWUKKyAqCisgKiAgMS40IDA0LzI1LzIwMDQgKFRFSikgdGVqb2huc29uQHlhaG9vLmNvbQorICogICAgQ2hhbmdlZCByZXNldCBmcm9tIHN0YW5kYXJkIFVTQiBkZXYgcmVzZXQgdG8gdmVuZG9yIHJlc2V0CisgKiAgICBDaGFuZ2VkIGRhdGEgc2VudCB0byBob3N0IGZyb20gY29tcGVuc2F0ZWQgdG8gcmF3IGNvb3JkaW5hdGVzCisgKiAgICBFbGltaW5hdGVkIHZlbmRvci9wcm9kdWN0IG1vZHVsZSBwYXJhbXMKKyAqICAgIFBlcmZvcm1lZCBtdWx0aXBsZSBzdWNjZXNzZnVsbCB0ZXN0cyB3aXRoIGFuIEVYSUktNTAxMFVDCisgKgorICogIDEuNSAwMi8yNy8yMDA1IGRkc3RyZWV0QGllZWUub3JnCisgKiAgICBBZGRlZCBtb2R1bGUgcGFyYW1ldGVyIHRvIHNlbGVjdCByYXcgb3IgaHctY2FsaWJyYXRlZCBjb29yZGluYXRlIHJlcG9ydGluZworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworICAgICAgICAjZGVmaW5lIERFQlVHCisjZWxzZQorICAgICAgICAjdW5kZWYgREVCVUcKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjZGVmaW5lIE1UT1VDSFVTQl9NSU5fWEMgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lIE1UT1VDSFVTQl9NQVhfUkFXX1hDICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIE1UT1VDSFVTQl9NQVhfQ0FMSUJfWEMgICAgICAgICAgMHhmZmZmCisjZGVmaW5lIE1UT1VDSFVTQl9YQ19GVVpaICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lIE1UT1VDSFVTQl9YQ19GTEFUICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lIE1UT1VDSFVTQl9NSU5fWUMgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lIE1UT1VDSFVTQl9NQVhfUkFXX1lDICAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIE1UT1VDSFVTQl9NQVhfQ0FMSUJfWUMgICAgICAgICAgMHhmZmZmCisjZGVmaW5lIE1UT1VDSFVTQl9ZQ19GVVpaICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lIE1UT1VDSFVTQl9ZQ19GTEFUICAgICAgICAgICAgICAgMHgwCisKKyNkZWZpbmUgTVRPVUNIVVNCX0FTWU5DX1JFUE9SVCAgICAgICAgICAxCisjZGVmaW5lIE1UT1VDSFVTQl9SRVNFVCAgICAgICAgICAgICAgICAgNworI2RlZmluZSBNVE9VQ0hVU0JfUkVQT1JUX0RBVEFfU0laRSAgICAgIDExCisjZGVmaW5lIE1UT1VDSFVTQl9SRVFfQ1RSTExSX0lEICAgICAgICAgMTAKKworI2RlZmluZSBNVE9VQ0hVU0JfR0VUX1JBV19YQyhkYXRhKSAgICAgIChkYXRhWzhdPDw4IHwgZGF0YVs3XSkKKyNkZWZpbmUgTVRPVUNIVVNCX0dFVF9DQUxJQl9YQyhkYXRhKSAgICAoZGF0YVs0XTw8OCB8IGRhdGFbM10pCisjZGVmaW5lIE1UT1VDSFVTQl9HRVRfUkFXX1lDKGRhdGEpICAgICAgKGRhdGFbMTBdPDw4IHwgZGF0YVs5XSkKKyNkZWZpbmUgTVRPVUNIVVNCX0dFVF9DQUxJQl9ZQyhkYXRhKSAgICAoZGF0YVs2XTw8OCB8IGRhdGFbNV0pCisjZGVmaW5lIE1UT1VDSFVTQl9HRVRfWEMoZGF0YSkgICAgICAgICAgKHJhd19jb29yZGluYXRlcyA/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRPVUNIVVNCX0dFVF9SQVdfWEMoZGF0YSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UT1VDSFVTQl9HRVRfQ0FMSUJfWEMoZGF0YSkpCisjZGVmaW5lIE1UT1VDSFVTQl9HRVRfWUMoZGF0YSkgICAgICAgICAgKHJhd19jb29yZGluYXRlcyA/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRPVUNIVVNCX0dFVF9SQVdfWUMoZGF0YSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UT1VDSFVTQl9HRVRfQ0FMSUJfWUMoZGF0YSkpCisjZGVmaW5lIE1UT1VDSFVTQl9HRVRfVE9VQ0hFRChkYXRhKSAgICAgKChkYXRhWzJdICYgMHg0MCkgPyAxOjApCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjUiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlRvZGQgRS4gSm9obnNvbiwgdGVqb2huc29uQHlhaG9vLmNvbSIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIjNNIFVTQiBUb3VjaHNjcmVlbiBEcml2ZXIiCisjZGVmaW5lIERSSVZFUl9MSUNFTlNFICJHUEwiCisKK3N0YXRpYyBpbnQgcmF3X2Nvb3JkaW5hdGVzID0gMTsKKworbW9kdWxlX3BhcmFtKHJhd19jb29yZGluYXRlcywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhyYXdfY29vcmRpbmF0ZXMsICJyZXBvcnQgcmF3IGNvb3JkaW5hdGUgdmFsdWVzICh5LCBkZWZhdWx0KSBvciBoYXJkd2FyZS1jYWxpYnJhdGVkIGNvb3JkaW5hdGUgdmFsdWVzIChuKSIpOworCitzdHJ1Y3QgbXRvdWNoX3VzYiB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CisgICAgICAgIGRtYV9hZGRyX3QgZGF0YV9kbWE7CisgICAgICAgIHN0cnVjdCB1cmIgKmlycTsKKyAgICAgICAgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisgICAgICAgIHN0cnVjdCBpbnB1dF9kZXYgaW5wdXQ7CisgICAgICAgIGludCBvcGVuOworICAgICAgICBjaGFyIG5hbWVbMTI4XTsKKyAgICAgICAgY2hhciBwaHlzWzY0XTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtdG91Y2h1c2JfZGV2aWNlcyBbXSA9IHsKKyAgICAgICAgeyBVU0JfREVWSUNFKDB4MDU5NiwgMHgwMDAxKSB9LAorICAgICAgICB7IH0KK307CisKK3N0YXRpYyB2b2lkIG10b3VjaHVzYl9pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyAgICAgICAgc3RydWN0IG10b3VjaF91c2IgKm10b3VjaCA9IHVyYi0+Y29udGV4dDsKKyAgICAgICAgaW50IHJldHZhbDsKKworICAgICAgICBzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisgICAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgLyogc3VjY2VzcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAtRVRJTUVET1VUOgorICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhpcyB1cmIgaXMgdGltaW5nIG91dCAqLworICAgICAgICAgICAgICAgICAgICAgICAgZGJnKCIlcyAtIHVyYiB0aW1lZCBvdXQgLSB3YXMgdGhlIGRldmljZSB1bnBsdWdnZWQ/IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGNhc2UgLUVDT05OUkVTRVQ6CisgICAgICAgICAgICAgICAgY2FzZSAtRU5PRU5UOgorICAgICAgICAgICAgICAgIGNhc2UgLUVTSFVURE9XTjoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisgICAgICAgICAgICAgICAgICAgICAgICBkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgaW5wdXRfcmVncygmbXRvdWNoLT5pbnB1dCwgcmVncyk7CisgICAgICAgIGlucHV0X3JlcG9ydF9rZXkoJm10b3VjaC0+aW5wdXQsIEJUTl9UT1VDSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBNVE9VQ0hVU0JfR0VUX1RPVUNIRUQobXRvdWNoLT5kYXRhKSk7CisgICAgICAgIGlucHV0X3JlcG9ydF9hYnMoJm10b3VjaC0+aW5wdXQsIEFCU19YLAorICAgICAgICAgICAgICAgICAgICAgICAgIE1UT1VDSFVTQl9HRVRfWEMobXRvdWNoLT5kYXRhKSk7CisgICAgICAgIGlucHV0X3JlcG9ydF9hYnMoJm10b3VjaC0+aW5wdXQsIEFCU19ZLAorCQkJIChyYXdfY29vcmRpbmF0ZXMgPyBNVE9VQ0hVU0JfTUFYX1JBV19ZQyA6IE1UT1VDSFVTQl9NQVhfQ0FMSUJfWUMpCisgICAgICAgICAgICAgICAgICAgICAgICAgLSBNVE9VQ0hVU0JfR0VUX1lDKG10b3VjaC0+ZGF0YSkpOworICAgICAgICBpbnB1dF9zeW5jKCZtdG91Y2gtPmlucHV0KTsKKworZXhpdDoKKyAgICAgICAgcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQ6ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKworc3RhdGljIGludCBtdG91Y2h1c2Jfb3BlbiAoc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCit7CisgICAgICAgIHN0cnVjdCBtdG91Y2hfdXNiICptdG91Y2ggPSBpbnB1dC0+cHJpdmF0ZTsKKworICAgICAgICBpZiAobXRvdWNoLT5vcGVuKyspCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgbXRvdWNoLT5pcnEtPmRldiA9IG10b3VjaC0+dWRldjsKKworICAgICAgICBpZiAodXNiX3N1Ym1pdF91cmIgKG10b3VjaC0+aXJxLCBHRlBfQVRPTUlDKSkgeworICAgICAgICAgICAgICAgIG10b3VjaC0+b3Blbi0tOworICAgICAgICAgICAgICAgIHJldHVybiAtRUlPOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10b3VjaHVzYl9jbG9zZSAoc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCit7CisgICAgICAgIHN0cnVjdCBtdG91Y2hfdXNiICptdG91Y2ggPSBpbnB1dC0+cHJpdmF0ZTsKKworICAgICAgICBpZiAoIS0tbXRvdWNoLT5vcGVuKQorICAgICAgICAgICAgICAgIHVzYl9raWxsX3VyYiAobXRvdWNoLT5pcnEpOworfQorCitzdGF0aWMgaW50IG10b3VjaHVzYl9hbGxvY19idWZmZXJzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgbXRvdWNoX3VzYiAqbXRvdWNoKQoreworICAgICAgICBkYmcoIiVzIC0gY2FsbGVkIiwgX19GVU5DVElPTl9fKTsKKworICAgICAgICBtdG91Y2gtPmRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIE1UT1VDSFVTQl9SRVBPUlRfREFUQV9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNMQUJfQVRPTUlDLCAmbXRvdWNoLT5kYXRhX2RtYSk7CisKKyAgICAgICAgaWYgKCFtdG91Y2gtPmRhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdG91Y2h1c2JfZnJlZV9idWZmZXJzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgbXRvdWNoX3VzYiAqbXRvdWNoKQoreworICAgICAgICBkYmcoIiVzIC0gY2FsbGVkIiwgX19GVU5DVElPTl9fKTsKKworICAgICAgICBpZiAobXRvdWNoLT5kYXRhKQorICAgICAgICAgICAgICAgIHVzYl9idWZmZXJfZnJlZSh1ZGV2LCBNVE9VQ0hVU0JfUkVQT1JUX0RBVEFfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRvdWNoLT5kYXRhLCBtdG91Y2gtPmRhdGFfZG1hKTsKK30KKworc3RhdGljIGludCBtdG91Y2h1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKyAgICAgICAgc3RydWN0IG10b3VjaF91c2IgKm10b3VjaDsKKyAgICAgICAgc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOworICAgICAgICBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworICAgICAgICBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworICAgICAgICBjaGFyIHBhdGhbNjRdOworICAgICAgICBpbnQgblJldDsKKworICAgICAgICBkYmcoIiVzIC0gY2FsbGVkIiwgX19GVU5DVElPTl9fKTsKKworICAgICAgICBkYmcoIiVzIC0gc2V0dGluZyBpbnRlcmZhY2UiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICBpbnRlcmZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKworICAgICAgICBkYmcoIiVzIC0gc2V0dGluZyBlbmRwb2ludCIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIGVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbMF0uZGVzYzsKKworICAgICAgICBpZiAoIShtdG91Y2ggPSBrbWFsbG9jIChzaXplb2YgKHN0cnVjdCBtdG91Y2hfdXNiKSwgR0ZQX0tFUk5FTCkpKSB7CisgICAgICAgICAgICAgICAgZXJyKCIlcyAtIE91dCBvZiBtZW1vcnkuIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAgfQorCisgICAgICAgIG1lbXNldChtdG91Y2gsIDAsIHNpemVvZihzdHJ1Y3QgbXRvdWNoX3VzYikpOworICAgICAgICBtdG91Y2gtPnVkZXYgPSB1ZGV2OworCisgICAgICAgIGRiZygiJXMgLSBhbGxvY2F0aW5nIGJ1ZmZlcnMiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICBpZiAobXRvdWNodXNiX2FsbG9jX2J1ZmZlcnModWRldiwgbXRvdWNoKSkgeworICAgICAgICAgICAgICAgIG10b3VjaHVzYl9mcmVlX2J1ZmZlcnModWRldiwgbXRvdWNoKTsKKyAgICAgICAgICAgICAgICBrZnJlZShtdG91Y2gpOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgICAgICB9CisKKyAgICAgICAgbXRvdWNoLT5pbnB1dC5wcml2YXRlID0gbXRvdWNoOworICAgICAgICBtdG91Y2gtPmlucHV0Lm9wZW4gPSBtdG91Y2h1c2Jfb3BlbjsKKyAgICAgICAgbXRvdWNoLT5pbnB1dC5jbG9zZSA9IG10b3VjaHVzYl9jbG9zZTsKKworICAgICAgICB1c2JfbWFrZV9wYXRoKHVkZXYsIHBhdGgsIDY0KTsKKyAgICAgICAgc3ByaW50ZihtdG91Y2gtPnBoeXMsICIlcy9pbnB1dDAiLCBwYXRoKTsKKworICAgICAgICBtdG91Y2gtPmlucHV0Lm5hbWUgPSBtdG91Y2gtPm5hbWU7CisgICAgICAgIG10b3VjaC0+aW5wdXQucGh5cyA9IG10b3VjaC0+cGh5czsKKyAgICAgICAgbXRvdWNoLT5pbnB1dC5pZC5idXN0eXBlID0gQlVTX1VTQjsKKyAgICAgICAgbXRvdWNoLT5pbnB1dC5pZC52ZW5kb3IgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKyAgICAgICAgbXRvdWNoLT5pbnB1dC5pZC5wcm9kdWN0ID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworICAgICAgICBtdG91Y2gtPmlucHV0LmlkLnZlcnNpb24gPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisgICAgICAgIG10b3VjaC0+aW5wdXQuZGV2ID0gJmludGYtPmRldjsKKworICAgICAgICBtdG91Y2gtPmlucHV0LmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKKyAgICAgICAgbXRvdWNoLT5pbnB1dC5hYnNiaXRbMF0gPSBCSVQoQUJTX1gpIHwgQklUKEFCU19ZKTsKKyAgICAgICAgbXRvdWNoLT5pbnB1dC5rZXliaXRbTE9ORyhCVE5fVE9VQ0gpXSA9IEJJVChCVE5fVE9VQ0gpOworCisgICAgICAgIC8qIFVzZWQgdG8gU2NhbGUgQ29tcGVuc2F0ZWQgRGF0YSBhbmQgRmxpcCBZICovCisgICAgICAgIG10b3VjaC0+aW5wdXQuYWJzbWluW0FCU19YXSA9ICBNVE9VQ0hVU0JfTUlOX1hDOworICAgICAgICBtdG91Y2gtPmlucHV0LmFic21heFtBQlNfWF0gPSAgcmF3X2Nvb3JkaW5hdGVzID8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRPVUNIVVNCX01BWF9SQVdfWEMgOiBNVE9VQ0hVU0JfTUFYX0NBTElCX1hDOworICAgICAgICBtdG91Y2gtPmlucHV0LmFic2Z1enpbQUJTX1hdID0gTVRPVUNIVVNCX1hDX0ZVWlo7CisgICAgICAgIG10b3VjaC0+aW5wdXQuYWJzZmxhdFtBQlNfWF0gPSBNVE9VQ0hVU0JfWENfRkxBVDsKKyAgICAgICAgbXRvdWNoLT5pbnB1dC5hYnNtaW5bQUJTX1ldID0gIE1UT1VDSFVTQl9NSU5fWUM7CisgICAgICAgIG10b3VjaC0+aW5wdXQuYWJzbWF4W0FCU19ZXSA9ICByYXdfY29vcmRpbmF0ZXMgPyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVE9VQ0hVU0JfTUFYX1JBV19ZQyA6IE1UT1VDSFVTQl9NQVhfQ0FMSUJfWUM7CisgICAgICAgIG10b3VjaC0+aW5wdXQuYWJzZnV6eltBQlNfWV0gPSBNVE9VQ0hVU0JfWUNfRlVaWjsKKyAgICAgICAgbXRvdWNoLT5pbnB1dC5hYnNmbGF0W0FCU19ZXSA9IE1UT1VDSFVTQl9ZQ19GTEFUOworCisJaWYgKHVkZXYtPm1hbnVmYWN0dXJlcikKKwkJc3RyY2F0KG10b3VjaC0+bmFtZSwgdWRldi0+bWFudWZhY3R1cmVyKTsKKwlpZiAodWRldi0+cHJvZHVjdCkKKwkJc3ByaW50ZihtdG91Y2gtPm5hbWUsICIlcyAlcyIsIG10b3VjaC0+bmFtZSwgdWRldi0+cHJvZHVjdCk7CisKKyAgICAgICAgaWYgKCFzdHJsZW4obXRvdWNoLT5uYW1lKSkKKyAgICAgICAgICAgICAgICBzcHJpbnRmKG10b3VjaC0+bmFtZSwgIlVTQiBUb3VjaHNjcmVlbiAlMDR4OiUwNHgiLAorICAgICAgICAgICAgICAgICAgICAgICAgbXRvdWNoLT5pbnB1dC5pZC52ZW5kb3IsIG10b3VjaC0+aW5wdXQuaWQucHJvZHVjdCk7CisKKyAgICAgICAgblJldCA9IHVzYl9jb250cm9sX21zZyhtdG91Y2gtPnVkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UT1VDSFVTQl9SRVNFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisgICAgICAgIGRiZygiJXMgLSB1c2JfY29udHJvbF9tc2cgLSBNVE9VQ0hVU0JfUkVTRVQgLSBieXRlc3xlcnI6ICVkIiwKKyAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgblJldCk7CisKKyAgICAgICAgZGJnKCIlcyAtIHVzYl9hbGxvY191cmI6IG10b3VjaC0+aXJxIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgbXRvdWNoLT5pcnEgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworICAgICAgICBpZiAoIW10b3VjaC0+aXJxKSB7CisgICAgICAgICAgICAgICAgZGJnKCIlcyAtIHVzYl9hbGxvY191cmIgZmFpbGVkOiBtdG91Y2gtPmlycSIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICAgICAgbXRvdWNodXNiX2ZyZWVfYnVmZmVycyh1ZGV2LCBtdG91Y2gpOworICAgICAgICAgICAgICAgIGtmcmVlKG10b3VjaCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgIH0KKworICAgICAgICBkYmcoIiVzIC0gdXNiX2ZpbGxfaW50X3VyYiIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHVzYl9maWxsX2ludF91cmIobXRvdWNoLT5pcnEsCisgICAgICAgICAgICAgICAgICAgICAgICAgbXRvdWNoLT51ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9yY3ZpbnRwaXBlKG10b3VjaC0+dWRldiwgMHg4MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgbXRvdWNoLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgIE1UT1VDSFVTQl9SRVBPUlRfREFUQV9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgIG10b3VjaHVzYl9pcnEsCisgICAgICAgICAgICAgICAgICAgICAgICAgbXRvdWNoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LT5iSW50ZXJ2YWwpOworCisgICAgICAgIGRiZygiJXMgLSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoJm10b3VjaC0+aW5wdXQpOworCisgICAgICAgIG5SZXQgPSB1c2JfY29udHJvbF9tc2cobXRvdWNoLT51ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVE9VQ0hVU0JfQVNZTkNfUkVQT1JULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKyAgICAgICAgZGJnKCIlcyAtIHVzYl9jb250cm9sX21zZyAtIE1UT1VDSFVTQl9BU1lOQ19SRVBPUlQgLSBieXRlc3xlcnI6ICVkIiwKKyAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgblJldCk7CisKKyAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiaW5wdXQ6ICVzIG9uICVzXG4iLCBtdG91Y2gtPm5hbWUsIHBhdGgpOworICAgICAgICB1c2Jfc2V0X2ludGZkYXRhKGludGYsIG10b3VjaCk7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10b3VjaHVzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworICAgICAgICBzdHJ1Y3QgbXRvdWNoX3VzYiAqbXRvdWNoID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisKKyAgICAgICAgZGJnKCIlcyAtIGNhbGxlZCIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisgICAgICAgIGlmIChtdG91Y2gpIHsKKyAgICAgICAgICAgICAgICBkYmcoIiVzIC0gbXRvdWNoIGlzIGluaXRpYWxpemVkLCBjbGVhbmluZyB1cCIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICAgICAgdXNiX2tpbGxfdXJiKG10b3VjaC0+aXJxKTsKKyAgICAgICAgICAgICAgICBpbnB1dF91bnJlZ2lzdGVyX2RldmljZSgmbXRvdWNoLT5pbnB1dCk7CisgICAgICAgICAgICAgICAgdXNiX2ZyZWVfdXJiKG10b3VjaC0+aXJxKTsKKyAgICAgICAgICAgICAgICBtdG91Y2h1c2JfZnJlZV9idWZmZXJzKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIG10b3VjaCk7CisgICAgICAgICAgICAgICAga2ZyZWUobXRvdWNoKTsKKyAgICAgICAgfQorfQorCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIG10b3VjaHVzYl9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG10b3VjaHVzYl9kcml2ZXIgPSB7CisgICAgICAgIC5vd25lciA9ICAgICAgVEhJU19NT0RVTEUsCisgICAgICAgIC5uYW1lID0gICAgICAgIm10b3VjaHVzYiIsCisgICAgICAgIC5wcm9iZSA9ICAgICAgbXRvdWNodXNiX3Byb2JlLAorICAgICAgICAuZGlzY29ubmVjdCA9IG10b3VjaHVzYl9kaXNjb25uZWN0LAorICAgICAgICAuaWRfdGFibGUgPSAgIG10b3VjaHVzYl9kZXZpY2VzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXRvdWNodXNiX2luaXQodm9pZCkgeworICAgICAgICBkYmcoIiVzIC0gY2FsbGVkIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgcmV0dXJuIHVzYl9yZWdpc3RlcigmbXRvdWNodXNiX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtdG91Y2h1c2JfY2xlYW51cCh2b2lkKSB7CisgICAgICAgIGRiZygiJXMgLSBjYWxsZWQiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICB1c2JfZGVyZWdpc3RlcigmbXRvdWNodXNiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG10b3VjaHVzYl9pbml0KTsKK21vZHVsZV9leGl0KG10b3VjaHVzYl9jbGVhbnVwKTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvcGlkLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9waWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTY5NjM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvcGlkLmMKQEAgLTAsMCArMSwyOTUgQEAKKy8qCisgKiAgUElEIEZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIGhpZCBkZXZpY2VzLgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDIgUm9kcmlnbyBEYW1hemlvLgorICogIFBvcnRpb25zIGJ5IEpvaGFubiBEZW5ldXggYW5kIEJqb3JuIEF1Z3VzdHNvbgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqIFNob3VsZCB5b3UgbmVlZCB0byBjb250YWN0IG1lLCB0aGUgYXV0aG9yLCB5b3UgY2FuIGRvIHNvIGJ5CisgKiBlLW1haWwgLSBtYWlsIHlvdXIgbWVzc2FnZSB0byA8cmRhbWF6aW9AbHNpLnVzcC5icj4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgImhpZC5oIgorI2luY2x1ZGUgInBpZC5oIgorCisjZGVmaW5lIERFQlVHCisKKyNkZWZpbmUgQ0hFQ0tfT1dORVJTSElQKGksIGhpZF9waWQpCVwKKwkoKGkpIDwgRkZfRUZGRUNUU19NQVggJiYgaSA+PSAwICYmIFwKKwl0ZXN0X2JpdChGRl9QSURfRkxBR1NfVVNFRCwgJmhpZF9waWQtPmVmZmVjdHNbKGkpXS5mbGFncykgJiYgXAorCShjdXJyZW50LT5waWQgPT0gMCB8fCBcCisJKGhpZF9waWQpLT5lZmZlY3RzWyhpKV0ub3duZXIgPT0gY3VycmVudC0+cGlkKSkKKworLyogQ2FsbGVkIHdoZW4gYSB0cmFuc2ZlciBpcyBjb21wbGV0ZWQgKi8KK3N0YXRpYyB2b2lkIGhpZF9waWRfY3RybF9vdXQoc3RydWN0IHVyYiAqdSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJZGV2X2RiZygmdS0+ZGV2LT5kZXYsICJoaWRfcGlkX2N0cmxfb3V0IC0gVHJhbnNmZXIgQ29tcGxldGVkXG4iKTsKK30KKworc3RhdGljIHZvaWQgaGlkX3BpZF9leGl0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IGhpZF9mZl9waWQgKnByaXZhdGUgPSBoaWQtPmZmX3ByaXZhdGU7CisKKwlpZiAocHJpdmF0ZS0+dXJiZmZvdXQpIHsKKwkJdXNiX2tpbGxfdXJiKHByaXZhdGUtPnVyYmZmb3V0KTsKKwkJdXNiX2ZyZWVfdXJiKHByaXZhdGUtPnVyYmZmb3V0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGlkX3VwbG9hZF9wZXJpb2RpYyhzdHJ1Y3QgaGlkX2ZmX3BpZCAqcGlkLCBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QsIGludCBpc191cGRhdGUpCit7CisJZGV2X2luZm8oJnBpZC0+aGlkLT5kZXYtPmRldiwgInJlcXVlc3RlZCBwZXJpb2RpYyBmb3JjZSB1cGxvYWRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBpZF91cGxvYWRfY29uc3RhbnQoc3RydWN0IGhpZF9mZl9waWQgKnBpZCwgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0LCBpbnQgaXNfdXBkYXRlKQoreworCWRldl9pbmZvKCZwaWQtPmhpZC0+ZGV2LT5kZXYsICJyZXF1ZXN0ZWQgY29uc3RhbnQgZm9yY2UgdXBsb2FkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwaWRfdXBsb2FkX2NvbmRpdGlvbihzdHJ1Y3QgaGlkX2ZmX3BpZCAqcGlkLCBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QsIGludCBpc191cGRhdGUpCit7CisJZGV2X2luZm8oJnBpZC0+aGlkLT5kZXYtPmRldiwgInJlcXVlc3RlZCBDb25kaXRpb24gZm9yY2UgdXBsb2FkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwaWRfdXBsb2FkX3JhbXAoc3RydWN0IGhpZF9mZl9waWQgKnBpZCwgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0LCBpbnQgaXNfdXBkYXRlKQoreworCWRldl9pbmZvKCZwaWQtPmhpZC0+ZGV2LT5kZXYsICJyZXF1ZXN0IHJhbXAgZm9yY2UgdXBsb2FkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoaWRfcGlkX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0LAorCQkJIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKQoreworCWRldl9kYmcoJmhpZC0+ZGV2LT5kZXYsICJQSUQgZXZlbnQgcmVjZWl2ZWQ6IHR5cGU9JWQsY29kZT0lZCx2YWx1ZT0lZC5cbiIsIHR5cGUsIGNvZGUsIHZhbHVlKTsKKworCWlmICh0eXBlICE9IEVWX0ZGKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworLyogTG9jayBtdXN0IGJlIGhlbGQgYnkgY2FsbGVyICovCitzdGF0aWMgdm9pZCBoaWRfcGlkX2N0cmxfcGxheWJhY2soc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9waWRfZWZmZWN0ICplZmZlY3QsIGludCBwbGF5KQoreworCWlmIChwbGF5KQorCQlzZXRfYml0KEZGX1BJRF9GTEFHU19QTEFZSU5HLCAmZWZmZWN0LT5mbGFncyk7CisJZWxzZQorCQljbGVhcl9iaXQoRkZfUElEX0ZMQUdTX1BMQVlJTkcsICZlZmZlY3QtPmZsYWdzKTsKK30KKworc3RhdGljIGludCBoaWRfcGlkX2VyYXNlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IGlkKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBkZXYtPnByaXZhdGU7CisJc3RydWN0IGhpZF9mZl9waWQgKnBpZCA9IGhpZC0+ZmZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlpZiAoIUNIRUNLX09XTkVSU0hJUChpZCwgcGlkKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwkvKiBGaW5kIHJlcG9ydCAqLworCWZpZWxkID0gaGlkX2ZpbmRfZmllbGRfYnlfdXNhZ2UoaGlkLCBISURfVVBfUElEIHwgRkZfUElEX1VTQUdFX0JMT0NLX0ZSRUUsCisJCQkJCUhJRF9PVVRQVVRfUkVQT1JUKTsKKwlpZiAoIWZpZWxkKSB7CisJCWRldl9lcnIoJmhpZC0+ZGV2LT5kZXYsICJjb3VsZG4ndCBmaW5kIHJlcG9ydFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldCA9IGhpZF9zZXRfZmllbGQoZmllbGQsIDAsIHBpZC0+ZWZmZWN0c1tpZF0uZGV2aWNlX2lkKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhpZC0+ZGV2LT5kZXYsICJjb3VsZG4ndCBzZXQgZmllbGRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgZmllbGQtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBpZC0+bG9jaywgZmxhZ3MpOworCWhpZF9waWRfY3RybF9wbGF5YmFjayhoaWQsIHBpZC0+ZWZmZWN0cyArIGlkLCAwKTsKKwlwaWQtPmVmZmVjdHNbaWRdLmZsYWdzID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaWQtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKiBFcmFzZSBhbGwgZWZmZWN0cyB0aGlzIHByb2Nlc3Mgb3ducyAqLworc3RhdGljIGludCBoaWRfcGlkX2ZsdXNoKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaGlkX2ZmX3BpZCAqcGlkID0gaGlkLT5mZl9wcml2YXRlOworCWludCBpOworCisJLypOT1RFOiBubyBuZWVkIHRvIGxvY2sgaGVyZS4gVGhlIG9ubHkgdGltZXMgRUZGRUNUX1VTRUQgaXMKKwkgICBtb2RpZmllZCBpcyB3aGVuIGVmZmVjdHMgYXJlIHVwbG9hZGVkIG9yIHdoZW4gYW4gZWZmZWN0IGlzCisJICAgZXJhc2VkLiBCdXQgYSBwcm9jZXNzIGNhbm5vdCBjbG9zZSBpdHMgZGV2L2lucHV0L2V2ZW50WCBmZAorCSAgIGFuZCBwZXJmb3JtIGlvY3RscyBvbiB0aGUgc2FtZSBmZCBhbGwgYXQgdGhlIHNhbWUgdGltZSAqLworCS8qRklYTUU6IG11bHRpcGxlIHRocmVhZHMsIGFueW9uZT8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5mZl9lZmZlY3RzX21heDsgKytpKQorCQlpZiAoY3VycmVudC0+cGlkID09IHBpZC0+ZWZmZWN0c1tpXS5vd25lcgorCQkgICAgJiYgdGVzdF9iaXQoRkZfUElEX0ZMQUdTX1VTRUQsICZwaWQtPmVmZmVjdHNbaV0uZmxhZ3MpKQorCQkJaWYgKGhpZF9waWRfZXJhc2UoZGV2LCBpKSkKKwkJCQlkZXZfd2FybigmaGlkLT5kZXYtPmRldiwgImVyYXNlIGVmZmVjdCAlZCBmYWlsZWQiLCBpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpZF9waWRfdXBsb2FkX2VmZmVjdChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsCisJCQkJIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKK3sKKwlzdHJ1Y3QgaGlkX2ZmX3BpZCAqcGlkX3ByaXZhdGUgPSAoc3RydWN0IGhpZF9mZl9waWQgKikoZGV2LT5wcml2YXRlKTsKKwlpbnQgcmV0OworCWludCBpc191cGRhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRldl9kYmcoJnBpZF9wcml2YXRlLT5oaWQtPmRldi0+ZGV2LCAidXBsb2FkIGVmZmVjdCBjYWxsZWQ6IGVmZmVjdF90eXBlPSV4XG4iLCBlZmZlY3QtPnR5cGUpOworCS8qIENoZWNrIHRoaXMgZWZmZWN0IHR5cGUgaXMgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlICovCisJaWYgKCF0ZXN0X2JpdChlZmZlY3QtPnR5cGUsIGRldi0+ZmZiaXQpKSB7CisJCWRldl9kYmcoJnBpZF9wcml2YXRlLT5oaWQtPmRldi0+ZGV2LAorCQkJImludmFsaWQga2luZCBvZiBlZmZlY3QgcmVxdWVzdGVkLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogSWYgd2Ugd2FudCB0byBjcmVhdGUgYSBuZXcgZWZmZWN0LCBnZXQgYSBmcmVlIGlkCisJICovCisJaWYgKGVmZmVjdC0+aWQgPT0gLTEpIHsKKwkJaW50IGlkID0gMDsKKworCQkvLyBTcGlubG9jayBzbyB3ZSBkb25gdCBnZXQgYSByYWNlIGNvbmRpdGlvbiB3aGVuIGNob29zaW5nIElEcworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGlkX3ByaXZhdGUtPmxvY2ssIGZsYWdzKTsKKworCQl3aGlsZSAoaWQgPCBGRl9FRkZFQ1RTX01BWCkKKwkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChGRl9QSURfRkxBR1NfVVNFRCwgJnBpZF9wcml2YXRlLT5lZmZlY3RzW2lkKytdLmZsYWdzKSkKKwkJCQlicmVhazsKKworCQlpZiAoaWQgPT0gRkZfRUZGRUNUU19NQVgpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBpZF9wcml2YXRlLT5sb2NrLCBmbGFncyk7CisvLyBURU1QIC0gV2UgbmVlZCB0byBnZXQgZmZfZWZmZWN0c19tYXggY29ycmVjdGx5IGZpcnN0OiAgfHwgaWQgPj0gZGV2LT5mZl9lZmZlY3RzX21heCkgeworCQkJZGV2X2RiZygmcGlkX3ByaXZhdGUtPmhpZC0+ZGV2LT5kZXYsICJOb3QgZW5vdWdoIGRldmljZSBtZW1vcnlcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQllZmZlY3QtPmlkID0gaWQ7CisJCWRldl9kYmcoJnBpZF9wcml2YXRlLT5oaWQtPmRldi0+ZGV2LCAiZWZmZWN0IElEIGlzICVkXG4uIiwgaWQpOworCQlwaWRfcHJpdmF0ZS0+ZWZmZWN0c1tpZF0ub3duZXIgPSBjdXJyZW50LT5waWQ7CisJCXBpZF9wcml2YXRlLT5lZmZlY3RzW2lkXS5mbGFncyA9ICgxIDw8IEZGX1BJRF9GTEFHU19VU0VEKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGlkX3ByaXZhdGUtPmxvY2ssIGZsYWdzKTsKKworCQlpc191cGRhdGUgPSBGRl9QSURfRkFMU0U7CisJfSBlbHNlIHsKKwkJLyogV2Ugd2FudCB0byB1cGRhdGUgYW4gZWZmZWN0ICovCisJCWlmICghQ0hFQ0tfT1dORVJTSElQKGVmZmVjdC0+aWQsIHBpZF9wcml2YXRlKSkKKwkJCXJldHVybiAtRUFDQ0VTOworCisJCS8qIFBhcmFtZXRlciB0eXBlIGNhbm5vdCBiZSB1cGRhdGVkICovCisJCWlmIChlZmZlY3QtPnR5cGUgIT0gcGlkX3ByaXZhdGUtPmVmZmVjdHNbZWZmZWN0LT5pZF0uZWZmZWN0LnR5cGUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkvKiBDaGVjayB0aGUgZWZmZWN0IGlzIG5vdCBhbHJlYWR5IGJlaW5nIHVwZGF0ZWQgKi8KKwkJaWYgKHRlc3RfYml0KEZGX1BJRF9GTEFHU19VUERBVElORywgJnBpZF9wcml2YXRlLT5lZmZlY3RzW2VmZmVjdC0+aWRdLmZsYWdzKSkKKwkJCXJldHVybiAtRUFHQUlOOworCisJCWlzX3VwZGF0ZSA9IEZGX1BJRF9UUlVFOworCX0KKworCS8qCisJICogVXBsb2FkIHRoZSBlZmZlY3QKKwkgKi8KKwlzd2l0Y2ggKGVmZmVjdC0+dHlwZSkgeworCWNhc2UgRkZfUEVSSU9ESUM6CisJCXJldCA9IHBpZF91cGxvYWRfcGVyaW9kaWMocGlkX3ByaXZhdGUsIGVmZmVjdCwgaXNfdXBkYXRlKTsKKwkJYnJlYWs7CisKKwljYXNlIEZGX0NPTlNUQU5UOgorCQlyZXQgPSBwaWRfdXBsb2FkX2NvbnN0YW50KHBpZF9wcml2YXRlLCBlZmZlY3QsIGlzX3VwZGF0ZSk7CisJCWJyZWFrOworCisJY2FzZSBGRl9TUFJJTkc6CisJY2FzZSBGRl9GUklDVElPTjoKKwljYXNlIEZGX0RBTVBFUjoKKwljYXNlIEZGX0lORVJUSUE6CisJCXJldCA9IHBpZF91cGxvYWRfY29uZGl0aW9uKHBpZF9wcml2YXRlLCBlZmZlY3QsIGlzX3VwZGF0ZSk7CisJCWJyZWFrOworCisJY2FzZSBGRl9SQU1QOgorCQlyZXQgPSBwaWRfdXBsb2FkX3JhbXAocGlkX3ByaXZhdGUsIGVmZmVjdCwgaXNfdXBkYXRlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZGJnKCZwaWRfcHJpdmF0ZS0+aGlkLT5kZXYtPmRldiwKKwkJCSJpbnZhbGlkIHR5cGUgb2YgZWZmZWN0IHJlcXVlc3RlZCAtICV4LlxuIiwKKwkJCWVmZmVjdC0+dHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBJZiBhIHBhY2tldCB3YXMgc2VudCwgZm9yYmlkIG5ldyB1cGRhdGVzIHVudGlsIHdlIGFyZSBub3RpZmllZAorCSAqIHRoYXQgdGhlIHBhY2tldCB3YXMgdXBkYXRlZAorCSAqLworCWlmIChyZXQgPT0gMCkKKwkJc2V0X2JpdChGRl9QSURfRkxBR1NfVVBEQVRJTkcsICZwaWRfcHJpdmF0ZS0+ZWZmZWN0c1tlZmZlY3QtPmlkXS5mbGFncyk7CisJcGlkX3ByaXZhdGUtPmVmZmVjdHNbZWZmZWN0LT5pZF0uZWZmZWN0ID0gKmVmZmVjdDsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaGlkX3BpZF9pbml0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IGhpZF9mZl9waWQgKnByaXZhdGU7CisJc3RydWN0IGhpZF9pbnB1dCAqaGlkaW5wdXQgPSBsaXN0X2VudHJ5KCZoaWQtPmlucHV0cywgc3RydWN0IGhpZF9pbnB1dCwgbGlzdCk7CisKKwlwcml2YXRlID0gaGlkLT5mZl9wcml2YXRlID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IGhpZF9mZl9waWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXZhdGUpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdmF0ZS0+aGlkID0gaGlkOworCisJaGlkLT5mZl9leGl0ID0gaGlkX3BpZF9leGl0OworCWhpZC0+ZmZfZXZlbnQgPSBoaWRfcGlkX2V2ZW50OworCisJLyogT3BlbiBvdXRwdXQgVVJCICovCisJaWYgKCEocHJpdmF0ZS0+dXJiZmZvdXQgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpKSkgeworCQlrZnJlZShwcml2YXRlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXVzYl9maWxsX2NvbnRyb2xfdXJiKHByaXZhdGUtPnVyYmZmb3V0LCBoaWQtPmRldiwgMCwKKwkJCSAgICAgKHZvaWQgKikmcHJpdmF0ZS0+ZmZjciwgcHJpdmF0ZS0+Y3RybF9idWZmZXIsIDgsCisJCQkgICAgIGhpZF9waWRfY3RybF9vdXQsIGhpZCk7CisJaGlkaW5wdXQtPmlucHV0LnVwbG9hZF9lZmZlY3QgPSBoaWRfcGlkX3VwbG9hZF9lZmZlY3Q7CisJaGlkaW5wdXQtPmlucHV0LmZsdXNoID0gaGlkX3BpZF9mbHVzaDsKKwloaWRpbnB1dC0+aW5wdXQuZmZfZWZmZWN0c19tYXggPSA4OwkvLyBBIHJhbmRvbSBkZWZhdWx0CisJc2V0X2JpdChFVl9GRiwgaGlkaW5wdXQtPmlucHV0LmV2Yml0KTsKKwlzZXRfYml0KEVWX0ZGX1NUQVRVUywgaGlkaW5wdXQtPmlucHV0LmV2Yml0KTsKKworCXNwaW5fbG9ja19pbml0KCZwcml2YXRlLT5sb2NrKTsKKworCXByaW50ayhLRVJOX0lORk8gIkZvcmNlIGZlZWRiYWNrIGRyaXZlciBmb3IgUElEIGRldmljZXMgYnkgUm9kcmlnbyBEYW1hemlvIDxyZGFtYXppb0Bsc2kudXNwLmJyPi5cbiIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9waWQuaCBiL2RyaXZlcnMvdXNiL2lucHV0L3BpZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyY2I5NjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9waWQuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogIFBJRCBGb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBoaWQgZGV2aWNlcy4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDAyIFJvZHJpZ28gRGFtYXppby4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBieQorICogZS1tYWlsIC0gbWFpbCB5b3VyIG1lc3NhZ2UgdG8gPHJkYW1hemlvQGxzaS51c3AuYnI+CisgKi8KKworI2RlZmluZSBGRl9FRkZFQ1RTX01BWCA2NAorCisjZGVmaW5lIEZGX1BJRF9GTEFHU19VU0VECTEJLyogSWYgdGhlIGVmZmVjdCBleGlzdHMgKi8KKyNkZWZpbmUgRkZfUElEX0ZMQUdTX1VQREFUSU5HCTIJLyogSWYgdGhlIGVmZmVjdCBpcyBiZWluZyB1cGRhdGVkICovCisjZGVmaW5lIEZGX1BJRF9GTEFHU19QTEFZSU5HCTMJLyogSWYgdGhlIGVmZmVjdCBpcyBjdXJyZW50bHkgYmVpbmcgcGxheWVkICovCisKKyNkZWZpbmUgRkZfUElEX0ZBTFNFCTAKKyNkZWZpbmUgRkZfUElEX1RSVUUJMQorCitzdHJ1Y3QgaGlkX3BpZF9lZmZlY3QgeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJcGlkX3Qgb3duZXI7CisJdW5zaWduZWQgaW50IGRldmljZV9pZDsJLyogVGhlIGRldmljZS1hc3NpZ25lZCBJRCAqLworCXN0cnVjdCBmZl9lZmZlY3QgZWZmZWN0OworfTsKKworc3RydWN0IGhpZF9mZl9waWQgeworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQ7CisJdW5zaWduZWQgbG9uZyBnYWluOworCisJc3RydWN0IHVyYiAqdXJiZmZvdXQ7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCBmZmNyOworCXNwaW5sb2NrX3QgbG9jazsKKworCXVuc2lnbmVkIGNoYXIgY3RybF9idWZmZXJbOF07CisKKwlzdHJ1Y3QgaGlkX3BpZF9lZmZlY3QgZWZmZWN0c1tGRl9FRkZFQ1RTX01BWF07Cit9OworCisvKgorICogQ29uc3RhbnRzIGZyb20gdGhlIFBJRCB1c2FnZSB0YWJsZSAoc3RpbGwgZmFyIGZyb20gY29tcGxldGUpCisgKi8KKworI2RlZmluZSBGRl9QSURfVVNBR0VfQkxPQ0tfTE9BRCAJMHg4OVVMCisjZGVmaW5lIEZGX1BJRF9VU0FHRV9CTE9DS19GUkVFCQkweDkwVUwKKyNkZWZpbmUgRkZfUElEX1VTQUdFX05FV19FRkZFQ1QgCTB4QUJVTAorI2RlZmluZSBGRl9QSURfVVNBR0VfUE9PTF9SRVBPUlQJMHg3RlVMCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9wb3dlcm1hdGUuYyBiL2RyaXZlcnMvdXNiL2lucHV0L3Bvd2VybWF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYTJmOWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9wb3dlcm1hdGUuYwpAQCAtMCwwICsxLDQ2NCBAQAorLyoKKyAqIEEgZHJpdmVyIGZvciB0aGUgR3JpZmZpbiBUZWNobm9sb2d5LCBJbmMuICJQb3dlck1hdGUiIFVTQiBjb250cm9sbGVyIGRpYWwuCisgKgorICogdjEuMSwgKGMpMjAwMiBXaWxsaWFtIFIgU293ZXJidXR0cyA8d2lsbEBzb3dlcmJ1dHRzLmNvbT4KKyAqCisgKiBUaGlzIGRldmljZSBpcyBhIGFub2Rpc2VkIGFsdW1pbml1bSBrbm9iIHdoaWNoIGNvbm5lY3RzIG92ZXIgVVNCLiBJdCBjYW4gbWVhc3VyZQorICogY2xvY2t3aXNlIGFuZCBhbnRpY2xvY2t3aXNlIHJvdGF0aW9uLiBUaGUgZGlhbCBhbHNvIGFjdHMgYXMgYSBwdXNoYnV0dG9uIHdpdGgKKyAqIGEgc3ByaW5nIGZvciBhdXRvbWF0aWMgcmVsZWFzZS4gVGhlIGJhc2UgY29udGFpbnMgYSBwYWlyIG9mIExFRHMgd2hpY2ggaWxsdW1pbmF0ZQorICogdGhlIHRyYW5zbHVjZW50IGJhc2UuIEl0IHJvdGF0ZXMgd2l0aG91dCBsaW1pdCBhbmQgcmVwb3J0cyBpdHMgcmVsYXRpdmUgcm90YXRpb24KKyAqIGJhY2sgdG8gdGhlIGhvc3Qgd2hlbiBwb2xsZWQgYnkgdGhlIFVTQiBjb250cm9sbGVyLgorICoKKyAqIFRlc3Rpbmcgd2l0aCB0aGUga25vYiBJIGhhdmUgaGFzIHNob3duIHRoYXQgaXQgbWVhc3VyZXMgYXBwcm94aW1hdGVseSA5NCAiY2xpY2tzIgorICogZm9yIG9uZSBmdWxsIHJvdGF0aW9uLiBUZXN0aW5nIHdpdGggbXkgSGlnaCBTcGVlZCBSb3RhdGlvbiBBY3R1YXRvciAob2ssIGl0IHdhcyAKKyAqIGEgdmFyaWFibGUgc3BlZWQgY29yZGxlc3MgZWxlY3RyaWMgZHJpbGwpIGhhcyBzaG93biB0aGF0IHRoZSBkZXZpY2UgY2FuIG1lYXN1cmUKKyAqIHNwZWVkcyBvZiB1cCB0byA3IGNsaWNrcyBlaXRoZXIgY2xvY2t3aXNlIG9yIGFudGljbG9ja3dpc2UgYmV0d2VlbiBwb2xsaW5ncyBmcm9tCisgKiB0aGUgaG9zdC4gSWYgaXQgY291bnRzIG1vcmUgdGhhbiA3IGNsaWNrcyBiZWZvcmUgaXQgaXMgcG9sbGVkLCBpdCB3aWxsIHdyYXAgYmFjaworICogdG8gemVybyBhbmQgc3RhcnQgY291bnRpbmcgYWdhaW4uIFRoaXMgd2FzIGF0IHF1aXRlIGhpZ2ggc3BlZWQsIGhvd2V2ZXIsIGFsbW9zdAorICogY2VydGFpbmx5IGZhc3RlciB0aGFuIHRoZSBodW1hbiBoYW5kIGNvdWxkIHR1cm4gaXQuIEdyaWZmaW4gc2F5IHRoYXQgaXQgbG9zZXMgYQorICogcHVsc2Ugb3IgdHdvIG9uIGEgZGlyZWN0aW9uIGNoYW5nZTsgdGhlIGdyYW51bGFyaXR5IGlzIHNvIGZpbmUgdGhhdCBJIG5ldmVyCisgKiBub3RpY2VkIHRoaXMgaW4gcHJhY3RpY2UuCisgKgorICogVGhlIGRldmljZSdzIG1pY3JvY29udHJvbGxlciBjYW4gYmUgcHJvZ3JhbW1lZCB0byBzZXQgdGhlIExFRCB0byBlaXRoZXIgYSBjb25zdGFudAorICogaW50ZW5zaXR5LCBvciB0byBhIHJoeXRobWljIHB1bHNpbmcuIFNldmVyYWwgcGF0dGVybnMgYW5kIHNwZWVkcyBhcmUgYXZhaWxhYmxlLgorICoKKyAqIEdyaWZmaW4gd2VyZSB2ZXJ5IGhhcHB5IHRvIHByb3ZpZGUgZG9jdW1lbnRhdGlvbiBhbmQgZnJlZSBoYXJkd2FyZSBmb3IgZGV2ZWxvcG1lbnQuCisgKgorICogU29tZSB1c2Vyc3BhY2UgdG9vbHMgYXJlIGF2YWlsYWJsZSBvbiB0aGUgd2ViOiBodHRwOi8vc293ZXJidXR0cy5jb20vcG93ZXJtYXRlLworICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNkZWZpbmUgUE9XRVJNQVRFX1ZFTkRPUgkweDA3N2QJLyogR3JpZmZpbiBUZWNobm9sb2d5LCBJbmMuICovCisjZGVmaW5lIFBPV0VSTUFURV9QUk9EVUNUX05FVwkweDA0MTAJLyogR3JpZmZpbiBQb3dlck1hdGUgKi8KKyNkZWZpbmUgUE9XRVJNQVRFX1BST0RVQ1RfT0xECTB4MDRBQQkvKiBHcmlmZmluIHNvdW5kS25vYiAqLworCisjZGVmaW5lIENPTlRPVVJfVkVORE9SCQkweDA1ZjMJLyogQ29udG91ciBEZXNpZ24sIEluYy4gKi8KKyNkZWZpbmUgQ09OVE9VUl9KT0cJCTB4MDI0MAkvKiBKb2cgYW5kIFNodXR0bGUgKi8KKworLyogdGhlc2UgYXJlIHRoZSBjb21tYW5kIGNvZGVzIHdlIHNlbmQgdG8gdGhlIGRldmljZSAqLworI2RlZmluZSBTRVRfU1RBVElDX0JSSUdIVE5FU1MgIDB4MDEKKyNkZWZpbmUgU0VUX1BVTFNFX0FTTEVFUCAgICAgICAweDAyCisjZGVmaW5lIFNFVF9QVUxTRV9BV0FLRSAgICAgICAgMHgwMworI2RlZmluZSBTRVRfUFVMU0VfTU9ERSAgICAgICAgIDB4MDQKKworLyogdGhlc2UgcmVmZXIgdG8gYml0cyBpbiB0aGUgcG93ZXJtYXRlX2RldmljZSdzIHJlcXVpcmVzX3VwZGF0ZSBmaWVsZC4gKi8KKyNkZWZpbmUgVVBEQVRFX1NUQVRJQ19CUklHSFRORVNTICgxPDwwKQorI2RlZmluZSBVUERBVEVfUFVMU0VfQVNMRUVQICAgICAgKDE8PDEpCisjZGVmaW5lIFVQREFURV9QVUxTRV9BV0FLRSAgICAgICAoMTw8MikKKyNkZWZpbmUgVVBEQVRFX1BVTFNFX01PREUgICAgICAgICgxPDwzKQorCisvKiBhdCBsZWFzdCB0d28gdmVyc2lvbnMgb2YgdGhlIGhhcmR3YXJlIGV4aXN0LCB3aXRoIGRpZmZlcmluZyBwYXlsb2FkCisgICBzaXplcy4gdGhlIGZpcnN0IHRocmVlIGJ5dGVzIGFsd2F5cyBjb250YWluIHRoZSAiaW50ZXJlc3RpbmciIGRhdGEgaW4KKyAgIHRoZSByZWxldmFudCBmb3JtYXQuICovCisjZGVmaW5lIFBPV0VSTUFURV9QQVlMT0FEX1NJWkVfTUFYIDYKKyNkZWZpbmUgUE9XRVJNQVRFX1BBWUxPQURfU0laRV9NSU4gMworc3RydWN0IHBvd2VybWF0ZV9kZXZpY2UgeworCXNpZ25lZCBjaGFyICpkYXRhOworCWRtYV9hZGRyX3QgZGF0YV9kbWE7CisJc3RydWN0IHVyYiAqaXJxLCAqY29uZmlnOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNvbmZpZ2NyOworCWRtYV9hZGRyX3QgY29uZmlnY3JfZG1hOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCBpbnB1dF9kZXYgaW5wdXQ7CisJc3BpbmxvY2tfdCBsb2NrOworCWludCBzdGF0aWNfYnJpZ2h0bmVzczsKKwlpbnQgcHVsc2Vfc3BlZWQ7CisJaW50IHB1bHNlX3RhYmxlOworCWludCBwdWxzZV9hc2xlZXA7CisJaW50IHB1bHNlX2F3YWtlOworCWludCByZXF1aXJlc191cGRhdGU7IC8vIHBoeXNpY2FsIHNldHRpbmdzIHdoaWNoIGFyZSBvdXQgb2Ygc3luYworCWNoYXIgcGh5c1s2NF07Cit9OworCitzdGF0aWMgY2hhciBwbV9uYW1lX3Bvd2VybWF0ZVtdID0gIkdyaWZmaW4gUG93ZXJNYXRlIjsKK3N0YXRpYyBjaGFyIHBtX25hbWVfc291bmRrbm9iW10gPSAiR3JpZmZpbiBTb3VuZEtub2IiOworCitzdGF0aWMgdm9pZCBwb3dlcm1hdGVfY29uZmlnX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisvKiBDYWxsYmFjayBmb3IgZGF0YSBhcnJpdmluZyBmcm9tIHRoZSBQb3dlck1hdGUgb3ZlciB0aGUgVVNCIGludGVycnVwdCBwaXBlICovCitzdGF0aWMgdm9pZCBwb3dlcm1hdGVfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHBvd2VybWF0ZV9kZXZpY2UgKnBtID0gdXJiLT5jb250ZXh0OworCWludCByZXR2YWw7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIGhhbmRsZSB1cGRhdGVzIHRvIGRldmljZSBzdGF0ZSAqLworCWlucHV0X3JlZ3MoJnBtLT5pbnB1dCwgcmVncyk7CisJaW5wdXRfcmVwb3J0X2tleSgmcG0tPmlucHV0LCBCVE5fMCwgcG0tPmRhdGFbMF0gJiAweDAxKTsKKwlpbnB1dF9yZXBvcnRfcmVsKCZwbS0+aW5wdXQsIFJFTF9ESUFMLCBwbS0+ZGF0YVsxXSk7CisJaW5wdXRfc3luYygmcG0tPmlucHV0KTsKKworZXhpdDoKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0dmFsKQorCQllcnIgKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCSAgICAgX19GVU5DVElPTl9fLCByZXR2YWwpOworfQorCisvKiBEZWNpZGUgaWYgd2UgbmVlZCB0byBpc3N1ZSBhIGNvbnRyb2wgbWVzc2FnZSBhbmQgZG8gc28uIE11c3QgYmUgY2FsbGVkIHdpdGggcG0tPmxvY2sgdGFrZW4gKi8KK3N0YXRpYyB2b2lkIHBvd2VybWF0ZV9zeW5jX3N0YXRlKHN0cnVjdCBwb3dlcm1hdGVfZGV2aWNlICpwbSkKK3sKKwlpZiAocG0tPnJlcXVpcmVzX3VwZGF0ZSA9PSAwKSAKKwkJcmV0dXJuOyAvKiBubyB1cGRhdGVzIGFyZSByZXF1aXJlZCAqLworCWlmIChwbS0+Y29uZmlnLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSAKKwkJcmV0dXJuOyAvKiBhbiB1cGRhdGUgaXMgYWxyZWFkeSBpbiBwcm9ncmVzczsgaXQnbGwgaXNzdWUgdGhpcyB1cGRhdGUgd2hlbiBpdCBjb21wbGV0ZXMgKi8KKworCWlmIChwbS0+cmVxdWlyZXNfdXBkYXRlICYgVVBEQVRFX1BVTFNFX0FTTEVFUCl7CisJCXBtLT5jb25maWdjci0+d1ZhbHVlID0gY3B1X3RvX2xlMTYoIFNFVF9QVUxTRV9BU0xFRVAgKTsKKwkJcG0tPmNvbmZpZ2NyLT53SW5kZXggPSBjcHVfdG9fbGUxNiggcG0tPnB1bHNlX2FzbGVlcCA/IDEgOiAwICk7CisJCXBtLT5yZXF1aXJlc191cGRhdGUgJj0gflVQREFURV9QVUxTRV9BU0xFRVA7CisJfWVsc2UgaWYgKHBtLT5yZXF1aXJlc191cGRhdGUgJiBVUERBVEVfUFVMU0VfQVdBS0UpeworCQlwbS0+Y29uZmlnY3ItPndWYWx1ZSA9IGNwdV90b19sZTE2KCBTRVRfUFVMU0VfQVdBS0UgKTsKKwkJcG0tPmNvbmZpZ2NyLT53SW5kZXggPSBjcHVfdG9fbGUxNiggcG0tPnB1bHNlX2F3YWtlID8gMSA6IDAgKTsKKwkJcG0tPnJlcXVpcmVzX3VwZGF0ZSAmPSB+VVBEQVRFX1BVTFNFX0FXQUtFOworCX1lbHNlIGlmIChwbS0+cmVxdWlyZXNfdXBkYXRlICYgVVBEQVRFX1BVTFNFX01PREUpeworCQlpbnQgb3AsIGFyZzsKKwkJLyogdGhlIHBvd2VybWF0ZSB0YWtlcyBhbiBvcGVyYXRpb24gYW5kIGFuIGFyZ3VtZW50IGZvciBpdHMgcHVsc2UgYWxnb3JpdGhtLgorCQkgICB0aGUgb3BlcmF0aW9uIGNhbiBiZToKKwkJICAgMDogZGl2aWRlIHRoZSBzcGVlZAorCQkgICAxOiBwdWxzZSBhdCBub3JtYWwgc3BlZWQKKwkJICAgMjogbXVsdGlwbHkgdGhlIHNwZWVkCisJCSAgIHRoZSBhcmd1bWVudCBvbmx5IGhhcyBhbiBlZmZlY3QgZm9yIG9wZXJhdGlvbnMgMCBhbmQgMiwgYW5kIHJhbmdlcyBiZXR3ZWVuCisJCSAgIDEgKGxlYXN0IGVmZmVjdCkgdG8gMjU1IChtYXhpbXVtIGVmZmVjdCkuCisgICAgICAgCisJCSAgIHRodXMsIHNldmVyYWwgc3RhdGVzIGFyZSBlcXVpdmFsZW50IGFuZCBhcmUgY29hbGVzY2VkIGludG8gb25lIHN0YXRlLgorCisJCSAgIHdlIG1hcCB0aGlzIG9udG8gYSByYW5nZSBmcm9tIDAgdG8gNTEwLCB3aXRoOgorCQkgICAwIC0tIDI1NCAgICAtLSB1c2UgZGl2aWRlICgwID0gc2xvd2VzdCkKKwkJICAgMjU1ICAgICAgICAgLS0gdXNlIG5vcm1hbCBzcGVlZAorCQkgICAyNTYgLS0gNTEwICAtLSB1c2UgbXVsdGlwbGUgKDUxMCA9IGZhc3Rlc3QpLgorCisJCSAgIE9ubHkgdmFsdWVzIG9mICdhcmcnIHF1aXRlIGNsb3NlIHRvIDI1NSBhcmUgcGFydGljdWxhcmx5IHVzZWZ1bC9zcGVjdGFjdWxhci4KKwkJKi8gICAgCisJCWlmIChwbS0+cHVsc2Vfc3BlZWQgPCAyNTUpeworCQkJb3AgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBkaXZpZGUKKwkJCWFyZyA9IDI1NSAtIHBtLT5wdWxzZV9zcGVlZDsKKwkJfSBlbHNlIGlmIChwbS0+cHVsc2Vfc3BlZWQgPiAyNTUpeworCQkJb3AgPSAyOyAgICAgICAgICAgICAgICAgICAvLyBtdWx0aXBseQorCQkJYXJnID0gcG0tPnB1bHNlX3NwZWVkIC0gMjU1OworCQl9IGVsc2UgeworCQkJb3AgPSAxOyAgICAgICAgICAgICAgICAgICAvLyBub3JtYWwgc3BlZWQKKwkJCWFyZyA9IDA7ICAgICAgICAgICAgICAgICAgLy8gY2FuIGJlIGFueSB2YWx1ZQorCQl9CisJCXBtLT5jb25maWdjci0+d1ZhbHVlID0gY3B1X3RvX2xlMTYoIChwbS0+cHVsc2VfdGFibGUgPDwgOCkgfCBTRVRfUFVMU0VfTU9ERSApOworCQlwbS0+Y29uZmlnY3ItPndJbmRleCA9IGNwdV90b19sZTE2KCAoYXJnIDw8IDgpIHwgb3AgKTsKKwkJcG0tPnJlcXVpcmVzX3VwZGF0ZSAmPSB+VVBEQVRFX1BVTFNFX01PREU7CisJfWVsc2UgaWYgKHBtLT5yZXF1aXJlc191cGRhdGUgJiBVUERBVEVfU1RBVElDX0JSSUdIVE5FU1MpeworCQlwbS0+Y29uZmlnY3ItPndWYWx1ZSA9IGNwdV90b19sZTE2KCBTRVRfU1RBVElDX0JSSUdIVE5FU1MgKTsKKwkJcG0tPmNvbmZpZ2NyLT53SW5kZXggPSBjcHVfdG9fbGUxNiggcG0tPnN0YXRpY19icmlnaHRuZXNzICk7CisJCXBtLT5yZXF1aXJlc191cGRhdGUgJj0gflVQREFURV9TVEFUSUNfQlJJR0hUTkVTUzsKKwl9ZWxzZXsKKwkJcHJpbnRrKEtFUk5fRVJSICJwb3dlcm1hdGU6IHVua25vd24gdXBkYXRlIHJlcXVpcmVkIik7CisJCXBtLT5yZXF1aXJlc191cGRhdGUgPSAwOyAvKiBmdWRnZSB0aGUgYnVnICovCisJCXJldHVybjsKKwl9CisKKy8qCXByaW50aygicG93ZXJtYXRlOiAlMDR4ICUwNHhcbiIsIHBtLT5jb25maWdjci0+d1ZhbHVlLCBwbS0+Y29uZmlnY3ItPndJbmRleCk7ICovCisKKwlwbS0+Y29uZmlnY3ItPmJSZXF1ZXN0VHlwZSA9IDB4NDE7IC8qIHZlbmRvciByZXF1ZXN0ICovCisJcG0tPmNvbmZpZ2NyLT5iUmVxdWVzdCA9IDB4MDE7CisJcG0tPmNvbmZpZ2NyLT53TGVuZ3RoID0gMDsKKworCXVzYl9maWxsX2NvbnRyb2xfdXJiKHBtLT5jb25maWcsIHBtLT51ZGV2LCB1c2Jfc25kY3RybHBpcGUocG0tPnVkZXYsIDApLAorCQkJICAgICAodm9pZCAqKSBwbS0+Y29uZmlnY3IsIE5VTEwsIDAsCisJCQkgICAgIHBvd2VybWF0ZV9jb25maWdfY29tcGxldGUsIHBtKTsKKwlwbS0+Y29uZmlnLT5zZXR1cF9kbWEgPSBwbS0+Y29uZmlnY3JfZG1hOworCXBtLT5jb25maWctPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19TRVRVUF9ETUFfTUFQOworCisJaWYgKHVzYl9zdWJtaXRfdXJiKHBtLT5jb25maWcsIEdGUF9BVE9NSUMpKQorCQlwcmludGsoS0VSTl9FUlIgInBvd2VybWF0ZTogdXNiX3N1Ym1pdF91cmIoY29uZmlnKSBmYWlsZWQiKTsKK30KKworLyogQ2FsbGVkIHdoZW4gb3VyIGFzeW5jaHJvbm91cyBjb250cm9sIG1lc3NhZ2UgY29tcGxldGVzLiBXZSBtYXkgbmVlZCB0byBpc3N1ZSBhbm90aGVyIGltbWVkaWF0ZWx5ICovCitzdGF0aWMgdm9pZCBwb3dlcm1hdGVfY29uZmlnX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHBvd2VybWF0ZV9kZXZpY2UgKnBtID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodXJiLT5zdGF0dXMpCisJCXByaW50ayhLRVJOX0VSUiAicG93ZXJtYXRlOiBjb25maWcgdXJiIHJldHVybmVkICVkXG4iLCB1cmItPnN0YXR1cyk7CisJCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtLT5sb2NrLCBmbGFncyk7CisJcG93ZXJtYXRlX3N5bmNfc3RhdGUocG0pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qIFNldCB0aGUgTEVEIHVwIGFzIGRlc2NyaWJlZCBhbmQgYmVnaW4gdGhlIHN5bmMgd2l0aCB0aGUgaGFyZHdhcmUgaWYgcmVxdWlyZWQgKi8KK3N0YXRpYyB2b2lkIHBvd2VybWF0ZV9wdWxzZV9sZWQoc3RydWN0IHBvd2VybWF0ZV9kZXZpY2UgKnBtLCBpbnQgc3RhdGljX2JyaWdodG5lc3MsIGludCBwdWxzZV9zcGVlZCwgCisJCQkJaW50IHB1bHNlX3RhYmxlLCBpbnQgcHVsc2VfYXNsZWVwLCBpbnQgcHVsc2VfYXdha2UpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChwdWxzZV9zcGVlZCA8IDApCisJCXB1bHNlX3NwZWVkID0gMDsKKwlpZiAocHVsc2VfdGFibGUgPCAwKQorCQlwdWxzZV90YWJsZSA9IDA7CisJaWYgKHB1bHNlX3NwZWVkID4gNTEwKQorCQlwdWxzZV9zcGVlZCA9IDUxMDsKKwlpZiAocHVsc2VfdGFibGUgPiAyKQorCQlwdWxzZV90YWJsZSA9IDI7CisKKwlwdWxzZV9hc2xlZXAgPSAhIXB1bHNlX2FzbGVlcDsKKwlwdWxzZV9hd2FrZSA9ICEhcHVsc2VfYXdha2U7CisKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwbS0+bG9jaywgZmxhZ3MpOworCisJLyogbWFyayBzdGF0ZSB1cGRhdGVzIHdoaWNoIGFyZSByZXF1aXJlZCAqLworCWlmIChzdGF0aWNfYnJpZ2h0bmVzcyAhPSBwbS0+c3RhdGljX2JyaWdodG5lc3MpeworCQlwbS0+c3RhdGljX2JyaWdodG5lc3MgPSBzdGF0aWNfYnJpZ2h0bmVzczsKKwkJcG0tPnJlcXVpcmVzX3VwZGF0ZSB8PSBVUERBVEVfU1RBVElDX0JSSUdIVE5FU1M7CQkKKwl9CisJaWYgKHB1bHNlX2FzbGVlcCAhPSBwbS0+cHVsc2VfYXNsZWVwKXsKKwkJcG0tPnB1bHNlX2FzbGVlcCA9IHB1bHNlX2FzbGVlcDsKKwkJcG0tPnJlcXVpcmVzX3VwZGF0ZSB8PSAoVVBEQVRFX1BVTFNFX0FTTEVFUCB8IFVQREFURV9TVEFUSUNfQlJJR0hUTkVTUyk7CisJfQorCWlmIChwdWxzZV9hd2FrZSAhPSBwbS0+cHVsc2VfYXdha2UpeworCQlwbS0+cHVsc2VfYXdha2UgPSBwdWxzZV9hd2FrZTsKKwkJcG0tPnJlcXVpcmVzX3VwZGF0ZSB8PSAoVVBEQVRFX1BVTFNFX0FXQUtFIHwgVVBEQVRFX1NUQVRJQ19CUklHSFRORVNTKTsKKwl9CisJaWYgKHB1bHNlX3NwZWVkICE9IHBtLT5wdWxzZV9zcGVlZCB8fCBwdWxzZV90YWJsZSAhPSBwbS0+cHVsc2VfdGFibGUpeworCQlwbS0+cHVsc2Vfc3BlZWQgPSBwdWxzZV9zcGVlZDsKKwkJcG0tPnB1bHNlX3RhYmxlID0gcHVsc2VfdGFibGU7CisJCXBtLT5yZXF1aXJlc191cGRhdGUgfD0gVVBEQVRFX1BVTFNFX01PREU7CisJfQorCisJcG93ZXJtYXRlX3N5bmNfc3RhdGUocG0pOworICAgCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG0tPmxvY2ssIGZsYWdzKTsKK30KKworLyogQ2FsbGJhY2sgZnJvbSB0aGUgSW5wdXQgbGF5ZXIgd2hlbiBhbiBldmVudCBhcnJpdmVzIGZyb20gdXNlcnNwYWNlIHRvIGNvbmZpZ3VyZSB0aGUgTEVEICovCitzdGF0aWMgaW50IHBvd2VybWF0ZV9pbnB1dF9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IF92YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgY29tbWFuZCA9ICh1bnNpZ25lZCBpbnQpX3ZhbHVlOworCXN0cnVjdCBwb3dlcm1hdGVfZGV2aWNlICpwbSA9IGRldi0+cHJpdmF0ZTsKKworCWlmICh0eXBlID09IEVWX01TQyAmJiBjb2RlID09IE1TQ19QVUxTRUxFRCl7CisJCS8qICAKKwkJICAgIGJpdHMgIDAtIDc6IDggYml0czogTEVEIGJyaWdodG5lc3MKKwkJICAgIGJpdHMgIDgtMTY6IDkgYml0czogcHVsc2luZyBzcGVlZCBtb2RpZmllciAoMCAuLi4gNTEwKTsgMC0yNTQgPSBzbG93ZXIsIDI1NSA9IHN0YW5kYXJkLCAyNTYtNTEwID0gZmFzdGVyLgorCQkgICAgYml0cyAxNy0xODogMiBiaXRzOiBwdWxzZSB0YWJsZSAoMCwgMSwgMiB2YWxpZCkKKwkJICAgIGJpdCAgICAgMTk6IDEgYml0IDogcHVsc2Ugd2hpbHN0IGFzbGVlcD8KKwkJICAgIGJpdCAgICAgMjA6IDEgYml0IDogcHVsc2UgY29uc3RhbnRseT8KKwkJKi8gIAorCQlpbnQgc3RhdGljX2JyaWdodG5lc3MgPSBjb21tYW5kICYgMHhGRjsgICAvLyBiaXRzIDAtNworCQlpbnQgcHVsc2Vfc3BlZWQgPSAoY29tbWFuZCA+PiA4KSAmIDB4MUZGOyAvLyBiaXRzIDgtMTYKKwkJaW50IHB1bHNlX3RhYmxlID0gKGNvbW1hbmQgPj4gMTcpICYgMHgzOyAgLy8gYml0cyAxNy0xOAorCQlpbnQgcHVsc2VfYXNsZWVwID0gKGNvbW1hbmQgPj4gMTkpICYgMHgxOyAvLyBiaXQgMTkKKwkJaW50IHB1bHNlX2F3YWtlICA9IChjb21tYW5kID4+IDIwKSAmIDB4MTsgLy8gYml0IDIwCisgIAorCQlwb3dlcm1hdGVfcHVsc2VfbGVkKHBtLCBzdGF0aWNfYnJpZ2h0bmVzcywgcHVsc2Vfc3BlZWQsIHB1bHNlX3RhYmxlLCBwdWxzZV9hc2xlZXAsIHB1bHNlX2F3YWtlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwb3dlcm1hdGVfYWxsb2NfYnVmZmVycyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IHBvd2VybWF0ZV9kZXZpY2UgKnBtKQoreworCXBtLT5kYXRhID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCBQT1dFUk1BVEVfUEFZTE9BRF9TSVpFX01BWCwKKwkJCQkgICAgU0xBQl9BVE9NSUMsICZwbS0+ZGF0YV9kbWEpOworCWlmICghcG0tPmRhdGEpCisJCXJldHVybiAtMTsKKwlwbS0+Y29uZmlnY3IgPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIHNpemVvZigqKHBtLT5jb25maWdjcikpLAorCQkJCQlTTEFCX0FUT01JQywgJnBtLT5jb25maWdjcl9kbWEpOworCWlmICghcG0tPmNvbmZpZ2NyKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcG93ZXJtYXRlX2ZyZWVfYnVmZmVycyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IHBvd2VybWF0ZV9kZXZpY2UgKnBtKQoreworCWlmIChwbS0+ZGF0YSkKKwkJdXNiX2J1ZmZlcl9mcmVlKHVkZXYsIFBPV0VSTUFURV9QQVlMT0FEX1NJWkVfTUFYLAorCQkJCXBtLT5kYXRhLCBwbS0+ZGF0YV9kbWEpOworCWlmIChwbS0+Y29uZmlnY3IpCisJCXVzYl9idWZmZXJfZnJlZSh1ZGV2LCBzaXplb2YoKihwbS0+Y29uZmlnY3IpKSwKKwkJCQlwbS0+Y29uZmlnY3IsIHBtLT5jb25maWdjcl9kbWEpOworfQorCisvKiBDYWxsZWQgd2hlbmV2ZXIgYSBVU0IgZGV2aWNlIG1hdGNoaW5nIG9uZSBpbiBvdXIgc3VwcG9ydGVkIGRldmljZXMgdGFibGUgaXMgY29ubmVjdGVkICovCitzdGF0aWMgaW50IHBvd2VybWF0ZV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAoaW50Zik7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IHBvd2VybWF0ZV9kZXZpY2UgKnBtOworCWludCBwaXBlLCBtYXhwOworCWNoYXIgcGF0aFs2NF07CisKKwlpbnRlcmZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKwllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLmRlc2M7CisJaWYgKCEoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgIT0gMykKKwkJcmV0dXJuIC1FSU87CisKKwl1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLAorCQkweDBhLCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCTAsIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCBOVUxMLCAwLAorCQlVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisKKwlpZiAoIShwbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwb3dlcm1hdGVfZGV2aWNlKSwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChwbSwgMCwgc2l6ZW9mKHN0cnVjdCBwb3dlcm1hdGVfZGV2aWNlKSk7CisJcG0tPnVkZXYgPSB1ZGV2OworCisJaWYgKHBvd2VybWF0ZV9hbGxvY19idWZmZXJzKHVkZXYsIHBtKSkgeworCQlwb3dlcm1hdGVfZnJlZV9idWZmZXJzKHVkZXYsIHBtKTsKKwkJa2ZyZWUocG0pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwbS0+aXJxID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBtLT5pcnEpIHsKKwkJcG93ZXJtYXRlX2ZyZWVfYnVmZmVycyh1ZGV2LCBwbSk7CisJCWtmcmVlKHBtKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcG0tPmNvbmZpZyA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbS0+Y29uZmlnKSB7CisJCXVzYl9mcmVlX3VyYihwbS0+aXJxKTsKKwkJcG93ZXJtYXRlX2ZyZWVfYnVmZmVycyh1ZGV2LCBwbSk7CisJCWtmcmVlKHBtKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJnBtLT5sb2NrKTsKKwlpbml0X2lucHV0X2RldigmcG0tPmlucHV0KTsKKworCS8qIGdldCBhIGhhbmRsZSB0byB0aGUgaW50ZXJydXB0IGRhdGEgcGlwZSAqLworCXBpcGUgPSB1c2JfcmN2aW50cGlwZSh1ZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7CisJbWF4cCA9IHVzYl9tYXhwYWNrZXQodWRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOworCisJaWYobWF4cCA8IFBPV0VSTUFURV9QQVlMT0FEX1NJWkVfTUlOIHx8IG1heHAgPiBQT1dFUk1BVEVfUEFZTE9BRF9TSVpFX01BWCl7CisJCXByaW50aygicG93ZXJtYXRlOiBFeHBlY3RlZCBwYXlsb2FkIG9mICVkLS0lZCBieXRlcywgZm91bmQgJWQgYnl0ZXMhXG4iLAorCQkJUE9XRVJNQVRFX1BBWUxPQURfU0laRV9NSU4sIFBPV0VSTUFURV9QQVlMT0FEX1NJWkVfTUFYLCBtYXhwKTsKKwkJbWF4cCA9IFBPV0VSTUFURV9QQVlMT0FEX1NJWkVfTUFYOworCX0KKworCXVzYl9maWxsX2ludF91cmIocG0tPmlycSwgdWRldiwgcGlwZSwgcG0tPmRhdGEsCisJCQkgbWF4cCwgcG93ZXJtYXRlX2lycSwKKwkJCSBwbSwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisJcG0tPmlycS0+dHJhbnNmZXJfZG1hID0gcG0tPmRhdGFfZG1hOworCXBtLT5pcnEtPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCisJLyogcmVnaXN0ZXIgb3VyIGludGVycnVwdCBVUkIgd2l0aCB0aGUgVVNCIHN5c3RlbSAqLworCWlmICh1c2Jfc3VibWl0X3VyYihwbS0+aXJxLCBHRlBfS0VSTkVMKSkgeworCQlwb3dlcm1hdGVfZnJlZV9idWZmZXJzKHVkZXYsIHBtKTsKKwkJa2ZyZWUocG0pOworCQlyZXR1cm4gLUVJTzsgLyogZmFpbHVyZSAqLworCX0KKworCXN3aXRjaCAobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKSB7CisJY2FzZSBQT1dFUk1BVEVfUFJPRFVDVF9ORVc6IHBtLT5pbnB1dC5uYW1lID0gcG1fbmFtZV9wb3dlcm1hdGU7IGJyZWFrOworCWNhc2UgUE9XRVJNQVRFX1BST0RVQ1RfT0xEOiBwbS0+aW5wdXQubmFtZSA9IHBtX25hbWVfc291bmRrbm9iOyBicmVhazsKKwlkZWZhdWx0OiAKKwkJcG0tPmlucHV0Lm5hbWUgPSBwbV9uYW1lX3NvdW5ka25vYjsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAicG93ZXJtYXRlOiB1bmtub3duIHByb2R1Y3QgaWQgJTA0eFxuIiwKKwkJICAgICAgIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisJfQorCisJcG0tPmlucHV0LnByaXZhdGUgPSBwbTsKKwlwbS0+aW5wdXQuZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9SRUwpIHwgQklUKEVWX01TQyk7CisJcG0tPmlucHV0LmtleWJpdFtMT05HKEJUTl8wKV0gPSBCSVQoQlROXzApOworCXBtLT5pbnB1dC5yZWxiaXRbTE9ORyhSRUxfRElBTCldID0gQklUKFJFTF9ESUFMKTsKKwlwbS0+aW5wdXQubXNjYml0W0xPTkcoTVNDX1BVTFNFTEVEKV0gPSBCSVQoTVNDX1BVTFNFTEVEKTsKKwlwbS0+aW5wdXQuaWQuYnVzdHlwZSA9IEJVU19VU0I7CisJcG0tPmlucHV0LmlkLnZlbmRvciA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCXBtLT5pbnB1dC5pZC5wcm9kdWN0ID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCXBtLT5pbnB1dC5pZC52ZXJzaW9uID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCXBtLT5pbnB1dC5ldmVudCA9IHBvd2VybWF0ZV9pbnB1dF9ldmVudDsKKwlwbS0+aW5wdXQuZGV2ID0gJmludGYtPmRldjsKKwlwbS0+aW5wdXQucGh5cyA9IHBtLT5waHlzOworCisJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKCZwbS0+aW5wdXQpOworCisJdXNiX21ha2VfcGF0aCh1ZGV2LCBwYXRoLCA2NCk7CisJc25wcmludGYocG0tPnBoeXMsIDY0LCAiJXMvaW5wdXQwIiwgcGF0aCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiaW5wdXQ6ICVzIG9uICVzXG4iLCBwbS0+aW5wdXQubmFtZSwgcG0tPmlucHV0LnBoeXMpOworCQorCS8qIGZvcmNlIGFuIHVwZGF0ZSBvZiBldmVyeXRoaW5nICovCisJcG0tPnJlcXVpcmVzX3VwZGF0ZSA9IFVQREFURV9QVUxTRV9BU0xFRVAgfCBVUERBVEVfUFVMU0VfQVdBS0UgfCBVUERBVEVfUFVMU0VfTU9ERSB8IFVQREFURV9TVEFUSUNfQlJJR0hUTkVTUzsKKwlwb3dlcm1hdGVfcHVsc2VfbGVkKHBtLCAweDgwLCAyNTUsIDAsIDEsIDApOyAvLyBzZXQgZGVmYXVsdCBwdWxzZSBwYXJhbWV0ZXJzCisgIAorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgcG0pOworCXJldHVybiAwOworfQorCisvKiBDYWxsZWQgd2hlbiBhIFVTQiBkZXZpY2Ugd2UndmUgYWNjZXB0ZWQgb3duZXJzaGlwIG9mIGlzIHJlbW92ZWQgKi8KK3N0YXRpYyB2b2lkIHBvd2VybWF0ZV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBwb3dlcm1hdGVfZGV2aWNlICpwbSA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwlpZiAocG0pIHsKKwkJcG0tPnJlcXVpcmVzX3VwZGF0ZSA9IDA7CisJCXVzYl9raWxsX3VyYihwbS0+aXJxKTsKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoJnBtLT5pbnB1dCk7CisJCXVzYl9mcmVlX3VyYihwbS0+aXJxKTsKKwkJdXNiX2ZyZWVfdXJiKHBtLT5jb25maWcpOworCQlwb3dlcm1hdGVfZnJlZV9idWZmZXJzKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIHBtKTsKKworCQlrZnJlZShwbSk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcG93ZXJtYXRlX2RldmljZXMgW10gPSB7CisJeyBVU0JfREVWSUNFKFBPV0VSTUFURV9WRU5ET1IsIFBPV0VSTUFURV9QUk9EVUNUX05FVykgfSwKKwl7IFVTQl9ERVZJQ0UoUE9XRVJNQVRFX1ZFTkRPUiwgUE9XRVJNQVRFX1BST0RVQ1RfT0xEKSB9LAorCXsgVVNCX0RFVklDRShDT05UT1VSX1ZFTkRPUiwgQ09OVE9VUl9KT0cpIH0sCisJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHBvd2VybWF0ZV9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHBvd2VybWF0ZV9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisgICAgICAgIC5uYW1lID0gICAgICAgICAicG93ZXJtYXRlIiwKKyAgICAgICAgLnByb2JlID0gICAgICAgIHBvd2VybWF0ZV9wcm9iZSwKKyAgICAgICAgLmRpc2Nvbm5lY3QgPSAgIHBvd2VybWF0ZV9kaXNjb25uZWN0LAorICAgICAgICAuaWRfdGFibGUgPSAgICAgcG93ZXJtYXRlX2RldmljZXMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwb3dlcm1hdGVfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnBvd2VybWF0ZV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcG93ZXJtYXRlX2NsZWFudXAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmcG93ZXJtYXRlX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBvd2VybWF0ZV9pbml0KTsKK21vZHVsZV9leGl0KHBvd2VybWF0ZV9jbGVhbnVwKTsKKworTU9EVUxFX0FVVEhPUiggIldpbGxpYW0gUiBTb3dlcmJ1dHRzIiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCAiR3JpZmZpbiBUZWNobm9sb2d5LCBJbmMgUG93ZXJNYXRlIGRyaXZlciIgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L3RvdWNoa2l0dXNiLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC90b3VjaGtpdHVzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MWYxYmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC90b3VjaGtpdHVzYi5jCkBAIC0wLDAgKzEsMzEwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiB0b3VjaGtpdHVzYi5jICAtLSAgRHJpdmVyIGZvciBlR2FsYXggVG91Y2hLaXQgVVNCIFRvdWNoc2NyZWVucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBieSBEYW5pZWwgUml0egorICogQ29weXJpZ2h0IChDKSBieSBUb2RkIEUuIEpvaG5zb24gKG10b3VjaHVzYi5jKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIEJhc2VkIHVwb24gbXRvdWNodXNiLmMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vI2RlZmluZSBERUJVRworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaWYgIWRlZmluZWQoREVCVUcpICYmIGRlZmluZWQoQ09ORklHX1VTQl9ERUJVRykKKyNkZWZpbmUgREVCVUcKKyNlbmRpZgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisKKyNkZWZpbmUgVE9VQ0hLSVRfTUlOX1hDCQkJMHgwCisjZGVmaW5lIFRPVUNIS0lUX01BWF9YQwkJCTB4MDdmZgorI2RlZmluZSBUT1VDSEtJVF9YQ19GVVpaCQkweDAKKyNkZWZpbmUgVE9VQ0hLSVRfWENfRkxBVAkJMHgwCisjZGVmaW5lIFRPVUNIS0lUX01JTl9ZQwkJCTB4MAorI2RlZmluZSBUT1VDSEtJVF9NQVhfWUMJCQkweDA3ZmYKKyNkZWZpbmUgVE9VQ0hLSVRfWUNfRlVaWgkJMHgwCisjZGVmaW5lIFRPVUNIS0lUX1lDX0ZMQVQJCTB4MAorI2RlZmluZSBUT1VDSEtJVF9SRVBPUlRfREFUQV9TSVpFCTgKKworI2RlZmluZSBUT1VDSEtJVF9ET1dOCQkJMHgwMQorI2RlZmluZSBUT1VDSEtJVF9QT0lOVF9UT1VDSAkJMHg4MQorI2RlZmluZSBUT1VDSEtJVF9QT0lOVF9OT1RPVUNICQkweDgwCisKKyNkZWZpbmUgVE9VQ0hLSVRfR0VUX1RPVUNIRUQoZGF0KQkoKCgoZGF0KVswXSkgJiBUT1VDSEtJVF9ET1dOKSA/IDEgOiAwKQorI2RlZmluZSBUT1VDSEtJVF9HRVRfWChkYXQpCQkoKChkYXQpWzNdIDw8IDcpIHwgKGRhdClbNF0pCisjZGVmaW5lIFRPVUNIS0lUX0dFVF9ZKGRhdCkJCSgoKGRhdClbMV0gPDwgNykgfCAoZGF0KVsyXSkKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJCSJ2MC4xIgorI2RlZmluZSBEUklWRVJfQVVUSE9SCQkJIkRhbmllbCBSaXR6IDxkYW5pZWwucml0ekBnbXguY2g+IgorI2RlZmluZSBEUklWRVJfREVTQwkJCSJlR2FsYXggVG91Y2hLaXQgVVNCIEhJRCBUb3VjaHNjcmVlbiBEcml2ZXIiCisKK3N0YXRpYyBpbnQgc3dhcF94eTsKK21vZHVsZV9wYXJhbShzd2FwX3h5LCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc3dhcF94eSwgIklmIHNldCBYIGFuZCBZIGF4ZXMgYXJlIHN3YXBwZWQuIik7CisKK3N0cnVjdCB0b3VjaGtpdF91c2IgeworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisJZG1hX2FkZHJfdCBkYXRhX2RtYTsKKwlzdHJ1Y3QgdXJiICppcnE7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IGlucHV0X2RldiBpbnB1dDsKKwlpbnQgb3BlbjsKKwljaGFyIG5hbWVbMTI4XTsKKwljaGFyIHBoeXNbNjRdOworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHRvdWNoa2l0X2RldmljZXNbXSA9IHsKKwl7VVNCX0RFVklDRSgweDM4MjMsIDB4MDAwMSl9LAorCXtVU0JfREVWSUNFKDB4MGVlZiwgMHgwMDAxKX0sCisJe30KK307CisKK3N0YXRpYyB2b2lkIHRvdWNoa2l0X2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB0b3VjaGtpdF91c2IgKnRvdWNoa2l0ID0gdXJiLT5jb250ZXh0OworCWludCByZXR2YWw7CisJaW50IHgsIHk7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVUSU1FRE9VVDoKKwkJLyogdGhpcyB1cmIgaXMgdGltaW5nIG91dCAqLworCQlkYmcoIiVzIC0gdXJiIHRpbWVkIG91dCAtIHdhcyB0aGUgZGV2aWNlIHVucGx1Z2dlZD8iLAorCQkgICAgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHN3YXBfeHkpIHsKKwkJeSA9IFRPVUNIS0lUX0dFVF9YKHRvdWNoa2l0LT5kYXRhKTsKKwkJeCA9IFRPVUNIS0lUX0dFVF9ZKHRvdWNoa2l0LT5kYXRhKTsKKwl9IGVsc2UgeworCQl4ID0gVE9VQ0hLSVRfR0VUX1godG91Y2hraXQtPmRhdGEpOworCQl5ID0gVE9VQ0hLSVRfR0VUX1kodG91Y2hraXQtPmRhdGEpOworCX0KKworCWlucHV0X3JlZ3MoJnRvdWNoa2l0LT5pbnB1dCwgcmVncyk7CisJaW5wdXRfcmVwb3J0X2tleSgmdG91Y2hraXQtPmlucHV0LCBCVE5fVE9VQ0gsCisJICAgICAgICAgICAgICAgICBUT1VDSEtJVF9HRVRfVE9VQ0hFRCh0b3VjaGtpdC0+ZGF0YSkpOworCWlucHV0X3JlcG9ydF9hYnMoJnRvdWNoa2l0LT5pbnB1dCwgQUJTX1gsIHgpOworCWlucHV0X3JlcG9ydF9hYnMoJnRvdWNoa2l0LT5pbnB1dCwgQUJTX1ksIHkpOworCWlucHV0X3N5bmMoJnRvdWNoa2l0LT5pbnB1dCk7CisKK2V4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0dmFsKQorCQllcnIoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0OiAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHJldHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgdG91Y2hraXRfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwlzdHJ1Y3QgdG91Y2hraXRfdXNiICp0b3VjaGtpdCA9IGlucHV0LT5wcml2YXRlOworCisJaWYgKHRvdWNoa2l0LT5vcGVuKyspCisJCXJldHVybiAwOworCisJdG91Y2hraXQtPmlycS0+ZGV2ID0gdG91Y2hraXQtPnVkZXY7CisKKwlpZiAodXNiX3N1Ym1pdF91cmIodG91Y2hraXQtPmlycSwgR0ZQX0FUT01JQykpIHsKKwkJdG91Y2hraXQtPm9wZW4tLTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRvdWNoa2l0X2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQoreworCXN0cnVjdCB0b3VjaGtpdF91c2IgKnRvdWNoa2l0ID0gaW5wdXQtPnByaXZhdGU7CisKKwlpZiAoIS0tdG91Y2hraXQtPm9wZW4pCisJCXVzYl9raWxsX3VyYih0b3VjaGtpdC0+aXJxKTsKK30KKworc3RhdGljIGludCB0b3VjaGtpdF9hbGxvY19idWZmZXJzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJCSAgc3RydWN0IHRvdWNoa2l0X3VzYiAqdG91Y2hraXQpCit7CisJdG91Y2hraXQtPmRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIFRPVUNIS0lUX1JFUE9SVF9EQVRBX1NJWkUsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNMQUJfQVRPTUlDLCAmdG91Y2hraXQtPmRhdGFfZG1hKTsKKworCWlmICghdG91Y2hraXQtPmRhdGEpCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0b3VjaGtpdF9mcmVlX2J1ZmZlcnMoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCQkJICBzdHJ1Y3QgdG91Y2hraXRfdXNiICp0b3VjaGtpdCkKK3sKKwlpZiAodG91Y2hraXQtPmRhdGEpCisJCXVzYl9idWZmZXJfZnJlZSh1ZGV2LCBUT1VDSEtJVF9SRVBPUlRfREFUQV9TSVpFLAorCQkgICAgICAgICAgICAgICAgdG91Y2hraXQtPmRhdGEsIHRvdWNoa2l0LT5kYXRhX2RtYSk7Cit9CisKK3N0YXRpYyBpbnQgdG91Y2hraXRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB0b3VjaGtpdF91c2IgKnRvdWNoa2l0OworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwljaGFyIHBhdGhbNjRdOworCisJaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOworCisJdG91Y2hraXQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdG91Y2hraXRfdXNiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0b3VjaGtpdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQodG91Y2hraXQsIDAsIHNpemVvZihzdHJ1Y3QgdG91Y2hraXRfdXNiKSk7CisJdG91Y2hraXQtPnVkZXYgPSB1ZGV2OworCisJaWYgKHRvdWNoa2l0X2FsbG9jX2J1ZmZlcnModWRldiwgdG91Y2hraXQpKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJdG91Y2hraXQtPmlucHV0LnByaXZhdGUgPSB0b3VjaGtpdDsKKwl0b3VjaGtpdC0+aW5wdXQub3BlbiA9IHRvdWNoa2l0X29wZW47CisJdG91Y2hraXQtPmlucHV0LmNsb3NlID0gdG91Y2hraXRfY2xvc2U7CisKKwl1c2JfbWFrZV9wYXRoKHVkZXYsIHBhdGgsIDY0KTsKKwlzcHJpbnRmKHRvdWNoa2l0LT5waHlzLCAiJXMvaW5wdXQwIiwgcGF0aCk7CisKKwl0b3VjaGtpdC0+aW5wdXQubmFtZSA9IHRvdWNoa2l0LT5uYW1lOworCXRvdWNoa2l0LT5pbnB1dC5waHlzID0gdG91Y2hraXQtPnBoeXM7CisJdG91Y2hraXQtPmlucHV0LmlkLmJ1c3R5cGUgPSBCVVNfVVNCOworCXRvdWNoa2l0LT5pbnB1dC5pZC52ZW5kb3IgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwl0b3VjaGtpdC0+aW5wdXQuaWQucHJvZHVjdCA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwl0b3VjaGtpdC0+aW5wdXQuaWQudmVyc2lvbiA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKKwl0b3VjaGtpdC0+aW5wdXQuZGV2ID0gJmludGYtPmRldjsKKworCXRvdWNoa2l0LT5pbnB1dC5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUyk7CisJdG91Y2hraXQtPmlucHV0LmFic2JpdFswXSA9IEJJVChBQlNfWCkgfCBCSVQoQUJTX1kpOworCXRvdWNoa2l0LT5pbnB1dC5rZXliaXRbTE9ORyhCVE5fVE9VQ0gpXSA9IEJJVChCVE5fVE9VQ0gpOworCisJLyogVXNlZCB0byBTY2FsZSBDb21wZW5zYXRlZCBEYXRhICovCisJdG91Y2hraXQtPmlucHV0LmFic21pbltBQlNfWF0gPSBUT1VDSEtJVF9NSU5fWEM7CisJdG91Y2hraXQtPmlucHV0LmFic21heFtBQlNfWF0gPSBUT1VDSEtJVF9NQVhfWEM7CisJdG91Y2hraXQtPmlucHV0LmFic2Z1enpbQUJTX1hdID0gVE9VQ0hLSVRfWENfRlVaWjsKKwl0b3VjaGtpdC0+aW5wdXQuYWJzZmxhdFtBQlNfWF0gPSBUT1VDSEtJVF9YQ19GTEFUOworCXRvdWNoa2l0LT5pbnB1dC5hYnNtaW5bQUJTX1ldID0gVE9VQ0hLSVRfTUlOX1lDOworCXRvdWNoa2l0LT5pbnB1dC5hYnNtYXhbQUJTX1ldID0gVE9VQ0hLSVRfTUFYX1lDOworCXRvdWNoa2l0LT5pbnB1dC5hYnNmdXp6W0FCU19ZXSA9IFRPVUNIS0lUX1lDX0ZVWlo7CisJdG91Y2hraXQtPmlucHV0LmFic2ZsYXRbQUJTX1ldID0gVE9VQ0hLSVRfWUNfRkxBVDsKKworCWlmICh1ZGV2LT5tYW51ZmFjdHVyZXIpCisJCXN0cmNhdCh0b3VjaGtpdC0+bmFtZSwgdWRldi0+bWFudWZhY3R1cmVyKTsKKwlpZiAodWRldi0+cHJvZHVjdCkKKwkJc3ByaW50Zih0b3VjaGtpdC0+bmFtZSwgIiVzICVzIiwgdG91Y2hraXQtPm5hbWUsIHVkZXYtPnByb2R1Y3QpOworCisJaWYgKCFzdHJsZW4odG91Y2hraXQtPm5hbWUpKQorCQlzcHJpbnRmKHRvdWNoa2l0LT5uYW1lLCAiVVNCIFRvdWNoc2NyZWVuICUwNHg6JTA0eCIsCisJCSAgICAgICAgdG91Y2hraXQtPmlucHV0LmlkLnZlbmRvciwgdG91Y2hraXQtPmlucHV0LmlkLnByb2R1Y3QpOworCisJdG91Y2hraXQtPmlycSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0b3VjaGtpdC0+aXJxKSB7CisJCWRiZygiJXMgLSB1c2JfYWxsb2NfdXJiIGZhaWxlZDogdG91Y2hraXQtPmlycSIsIF9fRlVOQ1RJT05fXyk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyczsKKwl9CisKKwl1c2JfZmlsbF9pbnRfdXJiKHRvdWNoa2l0LT5pcnEsIHRvdWNoa2l0LT51ZGV2LAorCSAgICAgICAgICAgICAgICAgdXNiX3JjdmludHBpcGUodG91Y2hraXQtPnVkZXYsIDB4ODEpLAorCSAgICAgICAgICAgICAgICAgdG91Y2hraXQtPmRhdGEsIFRPVUNIS0lUX1JFUE9SVF9EQVRBX1NJWkUsCisJICAgICAgICAgICAgICAgICB0b3VjaGtpdF9pcnEsIHRvdWNoa2l0LCBlbmRwb2ludC0+YkludGVydmFsKTsKKworCWlucHV0X3JlZ2lzdGVyX2RldmljZSgmdG91Y2hraXQtPmlucHV0KTsKKworCXByaW50ayhLRVJOX0lORk8gImlucHV0OiAlcyBvbiAlc1xuIiwgdG91Y2hraXQtPm5hbWUsIHBhdGgpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgdG91Y2hraXQpOworCisJcmV0dXJuIDA7CisKK291dF9mcmVlX2J1ZmZlcnM6CisJdG91Y2hraXRfZnJlZV9idWZmZXJzKHVkZXYsIHRvdWNoa2l0KTsKK291dF9mcmVlOgorCWtmcmVlKHRvdWNoa2l0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB0b3VjaGtpdF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB0b3VjaGtpdF91c2IgKnRvdWNoa2l0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWRiZygiJXMgLSBjYWxsZWQiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKCF0b3VjaGtpdCkKKwkJcmV0dXJuOworCisJZGJnKCIlcyAtIHRvdWNoa2l0IGlzIGluaXRpYWxpemVkLCBjbGVhbmluZyB1cCIsIF9fRlVOQ1RJT05fXyk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSgmdG91Y2hraXQtPmlucHV0KTsKKwl1c2Jfa2lsbF91cmIodG91Y2hraXQtPmlycSk7CisJdXNiX2ZyZWVfdXJiKHRvdWNoa2l0LT5pcnEpOworCXRvdWNoa2l0X2ZyZWVfYnVmZmVycyhpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCB0b3VjaGtpdCk7CisJa2ZyZWUodG91Y2hraXQpOworfQorCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgdG91Y2hraXRfZGV2aWNlcyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB0b3VjaGtpdF9kcml2ZXIgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQk9ICJ0b3VjaGtpdHVzYiIsCisJLnByb2JlCQk9IHRvdWNoa2l0X3Byb2JlLAorCS5kaXNjb25uZWN0CT0gdG91Y2hraXRfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJPSB0b3VjaGtpdF9kZXZpY2VzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdG91Y2hraXRfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnRvdWNoa2l0X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0b3VjaGtpdF9jbGVhbnVwKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnRvdWNoa2l0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHRvdWNoa2l0X2luaXQpOworbW9kdWxlX2V4aXQodG91Y2hraXRfY2xlYW51cCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvdXNia2JkLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC91c2JrYmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTUxNGIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvdXNia2JkLmMKQEAgLTAsMCArMSwzNzAgQEAKKy8qCisgKiAkSWQ6IHVzYmtiZC5jLHYgMS4yNyAyMDAxLzEyLzI3IDEwOjM3OjQxIHZvanRlY2ggRXhwICQKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEgVm9qdGVjaCBQYXZsaWsKKyAqCisgKiAgVVNCIEhJREJQIEtleWJvYXJkIHN1cHBvcnQKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqIAorICogU2hvdWxkIHlvdSBuZWVkIHRvIGNvbnRhY3QgbWUsIHRoZSBhdXRob3IsIHlvdSBjYW4gZG8gc28gZWl0aGVyIGJ5CisgKiBlLW1haWwgLSBtYWlsIHlvdXIgbWVzc2FnZSB0byA8dm9qdGVjaEB1Y3cuY3o+LCBvciBieSBwYXBlciBtYWlsOgorICogVm9qdGVjaCBQYXZsaWssIFNpbXVua292YSAxNTk0LCBQcmFndWUgOCwgMTgyIDAwIEN6ZWNoIFJlcHVibGljCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEB1Y3cuY3o+IgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIEhJRCBCb290IFByb3RvY29sIGtleWJvYXJkIGRyaXZlciIKKyNkZWZpbmUgRFJJVkVSX0xJQ0VOU0UgIkdQTCIKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRShEUklWRVJfTElDRU5TRSk7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHVzYl9rYmRfa2V5Y29kZVsyNTZdID0geworCSAgMCwgIDAsICAwLCAgMCwgMzAsIDQ4LCA0NiwgMzIsIDE4LCAzMywgMzQsIDM1LCAyMywgMzYsIDM3LCAzOCwKKwkgNTAsIDQ5LCAyNCwgMjUsIDE2LCAxOSwgMzEsIDIwLCAyMiwgNDcsIDE3LCA0NSwgMjEsIDQ0LCAgMiwgIDMsCisJICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMjgsICAxLCAxNCwgMTUsIDU3LCAxMiwgMTMsIDI2LAorCSAyNywgNDMsIDQzLCAzOSwgNDAsIDQxLCA1MSwgNTIsIDUzLCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwKKwkgNjUsIDY2LCA2NywgNjgsIDg3LCA4OCwgOTksIDcwLDExOSwxMTAsMTAyLDEwNCwxMTEsMTA3LDEwOSwxMDYsCisJMTA1LDEwOCwxMDMsIDY5LCA5OCwgNTUsIDc0LCA3OCwgOTYsIDc5LCA4MCwgODEsIDc1LCA3NiwgNzcsIDcxLAorCSA3MiwgNzMsIDgyLCA4MywgODYsMTI3LDExNiwxMTcsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwKKwkxOTEsMTkyLDE5MywxOTQsMTM0LDEzOCwxMzAsMTMyLDEyOCwxMjksMTMxLDEzNywxMzMsMTM1LDEzNiwxMTMsCisJMTE1LDExNCwgIDAsICAwLCAgMCwxMjEsICAwLCA4OSwgOTMsMTI0LCA5MiwgOTQsIDk1LCAgMCwgIDAsICAwLAorCTEyMiwxMjMsIDkwLCA5MSwgODUsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKKwkgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCisJICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAorCSAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKKwkgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCisJIDI5LCA0MiwgNTYsMTI1LCA5NywgNTQsMTAwLDEyNiwxNjQsMTY2LDE2NSwxNjMsMTYxLDExNSwxMTQsMTEzLAorCTE1MCwxNTgsMTU5LDEyOCwxMzYsMTc3LDE3OCwxNzYsMTQyLDE1MiwxNzMsMTQwCit9OworCitzdHJ1Y3QgdXNiX2tiZCB7CisJc3RydWN0IGlucHV0X2RldiBkZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKKwl1bnNpZ25lZCBjaGFyIG9sZFs4XTsKKwlzdHJ1Y3QgdXJiICppcnEsICpsZWQ7CisJdW5zaWduZWQgY2hhciBuZXdsZWRzOworCWNoYXIgbmFtZVsxMjhdOworCWNoYXIgcGh5c1s2NF07CisJaW50IG9wZW47CisKKwl1bnNpZ25lZCBjaGFyICpuZXc7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3I7CisJdW5zaWduZWQgY2hhciAqbGVkczsKKwlkbWFfYWRkcl90IGNyX2RtYTsKKwlkbWFfYWRkcl90IG5ld19kbWE7CisJZG1hX2FkZHJfdCBsZWRzX2RtYTsKK307CisKK3N0YXRpYyB2b2lkIHVzYl9rYmRfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9rYmQgKmtiZCA9IHVyYi0+Y29udGV4dDsKKwlpbnQgaTsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CQkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQlyZXR1cm47CisJLyogLUVQSVBFOiAgc2hvdWxkIGNsZWFyIHRoZSBoYWx0ICovCisJZGVmYXVsdDoJCS8qIGVycm9yICovCisJCWdvdG8gcmVzdWJtaXQ7CisJfQorCisJaW5wdXRfcmVncygma2JkLT5kZXYsIHJlZ3MpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJaW5wdXRfcmVwb3J0X2tleSgma2JkLT5kZXYsIHVzYl9rYmRfa2V5Y29kZVtpICsgMjI0XSwgKGtiZC0+bmV3WzBdID4+IGkpICYgMSk7CisKKwlmb3IgKGkgPSAyOyBpIDwgODsgaSsrKSB7CisKKwkJaWYgKGtiZC0+b2xkW2ldID4gMyAmJiBtZW1zY2FuKGtiZC0+bmV3ICsgMiwga2JkLT5vbGRbaV0sIDYpID09IGtiZC0+bmV3ICsgOCkgeworCQkJaWYgKHVzYl9rYmRfa2V5Y29kZVtrYmQtPm9sZFtpXV0pCisJCQkJaW5wdXRfcmVwb3J0X2tleSgma2JkLT5kZXYsIHVzYl9rYmRfa2V5Y29kZVtrYmQtPm9sZFtpXV0sIDApOworCQkJZWxzZQorCQkJCWluZm8oIlVua25vd24ga2V5IChzY2FuY29kZSAlI3gpIHJlbGVhc2VkLiIsIGtiZC0+b2xkW2ldKTsKKwkJfQorCisJCWlmIChrYmQtPm5ld1tpXSA+IDMgJiYgbWVtc2NhbihrYmQtPm9sZCArIDIsIGtiZC0+bmV3W2ldLCA2KSA9PSBrYmQtPm9sZCArIDgpIHsKKwkJCWlmICh1c2Jfa2JkX2tleWNvZGVba2JkLT5uZXdbaV1dKQorCQkJCWlucHV0X3JlcG9ydF9rZXkoJmtiZC0+ZGV2LCB1c2Jfa2JkX2tleWNvZGVba2JkLT5uZXdbaV1dLCAxKTsKKwkJCWVsc2UKKwkJCQlpbmZvKCJVbmtub3duIGtleSAoc2NhbmNvZGUgJSN4KSBwcmVzc2VkLiIsIGtiZC0+bmV3W2ldKTsKKwkJfQorCX0KKworCWlucHV0X3N5bmMoJmtiZC0+ZGV2KTsKKworCW1lbWNweShrYmQtPm9sZCwga2JkLT5uZXcsIDgpOworCityZXN1Ym1pdDoKKwlpID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgU0xBQl9BVE9NSUMpOworCWlmIChpKQorCQllcnIgKCJjYW4ndCByZXN1Ym1pdCBpbnRyLCAlcy0lcy9pbnB1dDAsIHN0YXR1cyAlZCIsCisJCQkJa2JkLT51c2JkZXYtPmJ1cy0+YnVzX25hbWUsCisJCQkJa2JkLT51c2JkZXYtPmRldnBhdGgsIGkpOworfQorCitpbnQgdXNiX2tiZF9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKQoreworCXN0cnVjdCB1c2Jfa2JkICprYmQgPSBkZXYtPnByaXZhdGU7CisKKwlpZiAodHlwZSAhPSBFVl9MRUQpCisJCXJldHVybiAtMTsKKworCisJa2JkLT5uZXdsZWRzID0gKCEhdGVzdF9iaXQoTEVEX0tBTkEsICAgIGRldi0+bGVkKSA8PCAzKSB8ICghIXRlc3RfYml0KExFRF9DT01QT1NFLCBkZXYtPmxlZCkgPDwgMykgfAorCQkgICAgICAgKCEhdGVzdF9iaXQoTEVEX1NDUk9MTEwsIGRldi0+bGVkKSA8PCAyKSB8ICghIXRlc3RfYml0KExFRF9DQVBTTCwgICBkZXYtPmxlZCkgPDwgMSkgfAorCQkgICAgICAgKCEhdGVzdF9iaXQoTEVEX05VTUwsICAgIGRldi0+bGVkKSk7CisKKwlpZiAoa2JkLT5sZWQtPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCisJCXJldHVybiAwOworCisJaWYgKCooa2JkLT5sZWRzKSA9PSBrYmQtPm5ld2xlZHMpCisJCXJldHVybiAwOworCisJKihrYmQtPmxlZHMpID0ga2JkLT5uZXdsZWRzOworCWtiZC0+bGVkLT5kZXYgPSBrYmQtPnVzYmRldjsKKwlpZiAodXNiX3N1Ym1pdF91cmIoa2JkLT5sZWQsIEdGUF9BVE9NSUMpKQorCQllcnIoInVzYl9zdWJtaXRfdXJiKGxlZHMpIGZhaWxlZCIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYl9rYmRfbGVkKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9rYmQgKmtiZCA9IHVyYi0+Y29udGV4dDsKKworCWlmICh1cmItPnN0YXR1cykKKwkJd2FybigibGVkIHVyYiBzdGF0dXMgJWQgcmVjZWl2ZWQiLCB1cmItPnN0YXR1cyk7CisJCisJaWYgKCooa2JkLT5sZWRzKSA9PSBrYmQtPm5ld2xlZHMpCisJCXJldHVybjsKKworCSooa2JkLT5sZWRzKSA9IGtiZC0+bmV3bGVkczsKKwlrYmQtPmxlZC0+ZGV2ID0ga2JkLT51c2JkZXY7CisJaWYgKHVzYl9zdWJtaXRfdXJiKGtiZC0+bGVkLCBHRlBfQVRPTUlDKSkKKwkJZXJyKCJ1c2Jfc3VibWl0X3VyYihsZWRzKSBmYWlsZWQiKTsKK30KKworc3RhdGljIGludCB1c2Jfa2JkX29wZW4oc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXN0cnVjdCB1c2Jfa2JkICprYmQgPSBkZXYtPnByaXZhdGU7CisKKwlpZiAoa2JkLT5vcGVuKyspCisJCXJldHVybiAwOworCisJa2JkLT5pcnEtPmRldiA9IGtiZC0+dXNiZGV2OworCWlmICh1c2Jfc3VibWl0X3VyYihrYmQtPmlycSwgR0ZQX0tFUk5FTCkpIHsKKwkJa2JkLT5vcGVuLS07CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2Jfa2JkX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2tiZCAqa2JkID0gZGV2LT5wcml2YXRlOworCisJaWYgKCEtLWtiZC0+b3BlbikKKwkJdXNiX2tpbGxfdXJiKGtiZC0+aXJxKTsKK30KKworc3RhdGljIGludCB1c2Jfa2JkX2FsbG9jX21lbShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzdHJ1Y3QgdXNiX2tiZCAqa2JkKQoreworCWlmICghKGtiZC0+aXJxID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtMTsKKwlpZiAoIShrYmQtPmxlZCA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm4gLTE7CisJaWYgKCEoa2JkLT5uZXcgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgOCwgU0xBQl9BVE9NSUMsICZrYmQtPm5ld19kbWEpKSkKKwkJcmV0dXJuIC0xOworCWlmICghKGtiZC0+Y3IgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpLCBTTEFCX0FUT01JQywgJmtiZC0+Y3JfZG1hKSkpCisJCXJldHVybiAtMTsKKwlpZiAoIShrYmQtPmxlZHMgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgMSwgU0xBQl9BVE9NSUMsICZrYmQtPmxlZHNfZG1hKSkpCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2Jfa2JkX2ZyZWVfbWVtKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHN0cnVjdCB1c2Jfa2JkICprYmQpCit7CisJaWYgKGtiZC0+aXJxKQorCQl1c2JfZnJlZV91cmIoa2JkLT5pcnEpOworCWlmIChrYmQtPmxlZCkKKwkJdXNiX2ZyZWVfdXJiKGtiZC0+bGVkKTsKKwlpZiAoa2JkLT5uZXcpCisJCXVzYl9idWZmZXJfZnJlZShkZXYsIDgsIGtiZC0+bmV3LCBrYmQtPm5ld19kbWEpOworCWlmIChrYmQtPmNyKQorCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCBzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksIGtiZC0+Y3IsIGtiZC0+Y3JfZG1hKTsKKwlpZiAoa2JkLT5sZWRzKQorCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LCAxLCBrYmQtPmxlZHMsIGtiZC0+bGVkc19kbWEpOworfQorCitzdGF0aWMgaW50IHVzYl9rYmRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlLCAKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKiBkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGlmYWNlKTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzdHJ1Y3QgdXNiX2tiZCAqa2JkOworCWludCBpLCBwaXBlLCBtYXhwOworCWNoYXIgcGF0aFs2NF07CisKKwlpbnRlcmZhY2UgPSBpZmFjZS0+Y3VyX2FsdHNldHRpbmc7CisKKwlpZiAoaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHMgIT0gMSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLmRlc2M7CisJaWYgKCEoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgIT0gMykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwaXBlID0gdXNiX3JjdmludHBpcGUoZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7CisJbWF4cCA9IHVzYl9tYXhwYWNrZXQoZGV2LCBwaXBlLCB1c2JfcGlwZW91dChwaXBlKSk7CisKKwlpZiAoIShrYmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX2tiZCksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KGtiZCwgMCwgc2l6ZW9mKHN0cnVjdCB1c2Jfa2JkKSk7CisKKwlpZiAodXNiX2tiZF9hbGxvY19tZW0oZGV2LCBrYmQpKSB7CisJCXVzYl9rYmRfZnJlZV9tZW0oZGV2LCBrYmQpOworCQlrZnJlZShrYmQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlrYmQtPnVzYmRldiA9IGRldjsKKworCWtiZC0+ZGV2LmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfTEVEKSB8IEJJVChFVl9SRVApOworCWtiZC0+ZGV2LmxlZGJpdFswXSA9IEJJVChMRURfTlVNTCkgfCBCSVQoTEVEX0NBUFNMKSB8IEJJVChMRURfU0NST0xMTCkgfCBCSVQoTEVEX0NPTVBPU0UpIHwgQklUKExFRF9LQU5BKTsKKworCWZvciAoaSA9IDA7IGkgPCAyNTU7IGkrKykKKwkJc2V0X2JpdCh1c2Jfa2JkX2tleWNvZGVbaV0sIGtiZC0+ZGV2LmtleWJpdCk7CisJY2xlYXJfYml0KDAsIGtiZC0+ZGV2LmtleWJpdCk7CisJCisJa2JkLT5kZXYucHJpdmF0ZSA9IGtiZDsKKwlrYmQtPmRldi5ldmVudCA9IHVzYl9rYmRfZXZlbnQ7CisJa2JkLT5kZXYub3BlbiA9IHVzYl9rYmRfb3BlbjsKKwlrYmQtPmRldi5jbG9zZSA9IHVzYl9rYmRfY2xvc2U7CisKKwl1c2JfZmlsbF9pbnRfdXJiKGtiZC0+aXJxLCBkZXYsIHBpcGUsCisJCQkga2JkLT5uZXcsIChtYXhwID4gOCA/IDggOiBtYXhwKSwKKwkJCSB1c2Jfa2JkX2lycSwga2JkLCBlbmRwb2ludC0+YkludGVydmFsKTsKKwlrYmQtPmlycS0+dHJhbnNmZXJfZG1hID0ga2JkLT5uZXdfZG1hOworCWtiZC0+aXJxLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCWtiZC0+Y3ItPmJSZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRTsKKwlrYmQtPmNyLT5iUmVxdWVzdCA9IDB4MDk7CisJa2JkLT5jci0+d1ZhbHVlID0gY3B1X3RvX2xlMTYoMHgyMDApOworCWtiZC0+Y3ItPndJbmRleCA9IGNwdV90b19sZTE2KGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKwlrYmQtPmNyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYoMSk7CisKKwl1c2JfbWFrZV9wYXRoKGRldiwgcGF0aCwgNjQpOworCXNwcmludGYoa2JkLT5waHlzLCAiJXMvaW5wdXQwIiwgcGF0aCk7CisKKwlrYmQtPmRldi5uYW1lID0ga2JkLT5uYW1lOworCWtiZC0+ZGV2LnBoeXMgPSBrYmQtPnBoeXM7CQorCWtiZC0+ZGV2LmlkLmJ1c3R5cGUgPSBCVVNfVVNCOworCWtiZC0+ZGV2LmlkLnZlbmRvciA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJa2JkLT5kZXYuaWQucHJvZHVjdCA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCWtiZC0+ZGV2LmlkLnZlcnNpb24gPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKKwlrYmQtPmRldi5kZXYgPSAmaWZhY2UtPmRldjsKKworCWlmIChkZXYtPm1hbnVmYWN0dXJlcikKKwkJc3RyY2F0KGtiZC0+bmFtZSwgZGV2LT5tYW51ZmFjdHVyZXIpOworCWlmIChkZXYtPnByb2R1Y3QpCisJCXNwcmludGYoa2JkLT5uYW1lLCAiJXMgJXMiLCBrYmQtPm5hbWUsIGRldi0+cHJvZHVjdCk7CisKKwlpZiAoIXN0cmxlbihrYmQtPm5hbWUpKQorCQlzcHJpbnRmKGtiZC0+bmFtZSwgIlVTQiBISURCUCBLZXlib2FyZCAlMDR4OiUwNHgiLAorCQkJa2JkLT5kZXYuaWQudmVuZG9yLCBrYmQtPmRldi5pZC5wcm9kdWN0KTsKKworCXVzYl9maWxsX2NvbnRyb2xfdXJiKGtiZC0+bGVkLCBkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJICAgICAodm9pZCAqKSBrYmQtPmNyLCBrYmQtPmxlZHMsIDEsCisJCQkgICAgIHVzYl9rYmRfbGVkLCBrYmQpOworCWtiZC0+bGVkLT5zZXR1cF9kbWEgPSBrYmQtPmNyX2RtYTsKKwlrYmQtPmxlZC0+dHJhbnNmZXJfZG1hID0ga2JkLT5sZWRzX2RtYTsKKwlrYmQtPmxlZC0+dHJhbnNmZXJfZmxhZ3MgfD0gKFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQCisJCQkJfCBVUkJfTk9fU0VUVVBfRE1BX01BUCk7CisKKwlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoJmtiZC0+ZGV2KTsKKworCXByaW50ayhLRVJOX0lORk8gImlucHV0OiAlcyBvbiAlc1xuIiwga2JkLT5uYW1lLCBwYXRoKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaWZhY2UsIGtiZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYl9rYmRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX2tiZCAqa2JkID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwlpZiAoa2JkKSB7CisJCXVzYl9raWxsX3VyYihrYmQtPmlycSk7CisJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKCZrYmQtPmRldik7CisJCXVzYl9rYmRfZnJlZV9tZW0oaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwga2JkKTsKKwkJa2ZyZWUoa2JkKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2Jfa2JkX2lkX3RhYmxlIFtdID0geworCXsgVVNCX0lOVEVSRkFDRV9JTkZPKDMsIDEsIDEpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgdXNiX2tiZF9pZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2Jfa2JkX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkidXNia2JkIiwKKwkucHJvYmUgPQl1c2Jfa2JkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX2tiZF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CXVzYl9rYmRfaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1c2Jfa2JkX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZ1c2Jfa2JkX2RyaXZlcik7CisJaWYgKHJlc3VsdCA9PSAwKQorCQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYl9rYmRfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ1c2Jfa2JkX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHVzYl9rYmRfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2Jfa2JkX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvdXNibW91c2UuYyBiL2RyaXZlcnMvdXNiL2lucHV0L3VzYm1vdXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDExNTViYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L3VzYm1vdXNlLmMKQEAgLTAsMCArMSwyNTIgQEAKKy8qCisgKiAkSWQ6IHVzYm1vdXNlLmMsdiAxLjE1IDIwMDEvMTIvMjcgMTA6Mzc6NDEgdm9qdGVjaCBFeHAgJAorICoKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSBWb2p0ZWNoIFBhdmxpaworICoKKyAqICBVU0IgSElEQlAgTW91c2Ugc3VwcG9ydAorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIAorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIAorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICogCisgKiBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBlaXRoZXIgYnkKKyAqIGUtbWFpbCAtIG1haWwgeW91ciBtZXNzYWdlIHRvIDx2b2p0ZWNoQHVjdy5jej4sIG9yIGJ5IHBhcGVyIG1haWw6CisgKiBWb2p0ZWNoIFBhdmxpaywgU2ltdW5rb3ZhIDE1OTQsIFByYWd1ZSA4LCAxODIgMDAgQ3plY2ggUmVwdWJsaWMKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS42IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEB1Y3cuY3o+IgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIEhJRCBCb290IFByb3RvY29sIG1vdXNlIGRyaXZlciIKKyNkZWZpbmUgRFJJVkVSX0xJQ0VOU0UgIkdQTCIKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRShEUklWRVJfTElDRU5TRSk7CisKK3N0cnVjdCB1c2JfbW91c2UgeworCWNoYXIgbmFtZVsxMjhdOworCWNoYXIgcGh5c1s2NF07CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKKwlzdHJ1Y3QgaW5wdXRfZGV2IGRldjsKKwlzdHJ1Y3QgdXJiICppcnE7CisJaW50IG9wZW47CisKKwlzaWduZWQgY2hhciAqZGF0YTsKKwlkbWFfYWRkcl90IGRhdGFfZG1hOworfTsKKworc3RhdGljIHZvaWQgdXNiX21vdXNlX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2JfbW91c2UgKm1vdXNlID0gdXJiLT5jb250ZXh0OworCXNpZ25lZCBjaGFyICpkYXRhID0gbW91c2UtPmRhdGE7CisJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gJm1vdXNlLT5kZXY7CisJaW50IHN0YXR1czsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CQkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQlyZXR1cm47CisJLyogLUVQSVBFOiAgc2hvdWxkIGNsZWFyIHRoZSBoYWx0ICovCisJZGVmYXVsdDoJCS8qIGVycm9yICovCisJCWdvdG8gcmVzdWJtaXQ7CisJfQorCisJaW5wdXRfcmVncyhkZXYsIHJlZ3MpOworCisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9MRUZULCAgIGRhdGFbMF0gJiAweDAxKTsKKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1JJR0hULCAgZGF0YVswXSAmIDB4MDIpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTUlERExFLCBkYXRhWzBdICYgMHgwNCk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TSURFLCAgIGRhdGFbMF0gJiAweDA4KTsKKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0VYVFJBLCAgZGF0YVswXSAmIDB4MTApOworCisJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9YLCAgICAgZGF0YVsxXSk7CisJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9ZLCAgICAgZGF0YVsyXSk7CisJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9XSEVFTCwgZGF0YVszXSk7CisKKwlpbnB1dF9zeW5jKGRldik7CityZXN1Ym1pdDoKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBTTEFCX0FUT01JQyk7CisJaWYgKHN0YXR1cykKKwkJZXJyICgiY2FuJ3QgcmVzdWJtaXQgaW50ciwgJXMtJXMvaW5wdXQwLCBzdGF0dXMgJWQiLAorCQkJCW1vdXNlLT51c2JkZXYtPmJ1cy0+YnVzX25hbWUsCisJCQkJbW91c2UtPnVzYmRldi0+ZGV2cGF0aCwgc3RhdHVzKTsKK30KKworc3RhdGljIGludCB1c2JfbW91c2Vfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IHVzYl9tb3VzZSAqbW91c2UgPSBkZXYtPnByaXZhdGU7CisKKwlpZiAobW91c2UtPm9wZW4rKykKKwkJcmV0dXJuIDA7CisKKwltb3VzZS0+aXJxLT5kZXYgPSBtb3VzZS0+dXNiZGV2OworCWlmICh1c2Jfc3VibWl0X3VyYihtb3VzZS0+aXJxLCBHRlBfS0VSTkVMKSkgeworCQltb3VzZS0+b3Blbi0tOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXNiX21vdXNlX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX21vdXNlICptb3VzZSA9IGRldi0+cHJpdmF0ZTsKKworCWlmICghLS1tb3VzZS0+b3BlbikKKwkJdXNiX2tpbGxfdXJiKG1vdXNlLT5pcnEpOworfQorCitzdGF0aWMgaW50IHVzYl9tb3VzZV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqIGludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICogaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKiBkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCXN0cnVjdCB1c2JfbW91c2UgKm1vdXNlOworCWludCBwaXBlLCBtYXhwOworCWNoYXIgcGF0aFs2NF07CisKKwlpbnRlcmZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKworCWlmIChpbnRlcmZhY2UtPmRlc2MuYk51bUVuZHBvaW50cyAhPSAxKSAKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLmRlc2M7CisJaWYgKCEoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSkgCisJCXJldHVybiAtRU5PREVWOworCWlmICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDMpICE9IDMpIAorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBpcGUgPSB1c2JfcmN2aW50cGlwZShkZXYsIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKTsKKwltYXhwID0gdXNiX21heHBhY2tldChkZXYsIHBpcGUsIHVzYl9waXBlb3V0KHBpcGUpKTsKKworCWlmICghKG1vdXNlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9tb3VzZSksIEdGUF9LRVJORUwpKSkgCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChtb3VzZSwgMCwgc2l6ZW9mKHN0cnVjdCB1c2JfbW91c2UpKTsKKworCW1vdXNlLT5kYXRhID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIDgsIFNMQUJfQVRPTUlDLCAmbW91c2UtPmRhdGFfZG1hKTsKKwlpZiAoIW1vdXNlLT5kYXRhKSB7CisJCWtmcmVlKG1vdXNlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbW91c2UtPmlycSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtb3VzZS0+aXJxKSB7CisJCXVzYl9idWZmZXJfZnJlZShkZXYsIDgsIG1vdXNlLT5kYXRhLCBtb3VzZS0+ZGF0YV9kbWEpOworCQlrZnJlZShtb3VzZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW1vdXNlLT51c2JkZXYgPSBkZXY7CisKKwltb3VzZS0+ZGV2LmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfUkVMKTsKKwltb3VzZS0+ZGV2LmtleWJpdFtMT05HKEJUTl9NT1VTRSldID0gQklUKEJUTl9MRUZUKSB8IEJJVChCVE5fUklHSFQpIHwgQklUKEJUTl9NSURETEUpOworCW1vdXNlLT5kZXYucmVsYml0WzBdID0gQklUKFJFTF9YKSB8IEJJVChSRUxfWSk7CisJbW91c2UtPmRldi5rZXliaXRbTE9ORyhCVE5fTU9VU0UpXSB8PSBCSVQoQlROX1NJREUpIHwgQklUKEJUTl9FWFRSQSk7CisJbW91c2UtPmRldi5yZWxiaXRbMF0gfD0gQklUKFJFTF9XSEVFTCk7CisKKwltb3VzZS0+ZGV2LnByaXZhdGUgPSBtb3VzZTsKKwltb3VzZS0+ZGV2Lm9wZW4gPSB1c2JfbW91c2Vfb3BlbjsKKwltb3VzZS0+ZGV2LmNsb3NlID0gdXNiX21vdXNlX2Nsb3NlOworCisJdXNiX21ha2VfcGF0aChkZXYsIHBhdGgsIDY0KTsKKwlzcHJpbnRmKG1vdXNlLT5waHlzLCAiJXMvaW5wdXQwIiwgcGF0aCk7CisKKwltb3VzZS0+ZGV2Lm5hbWUgPSBtb3VzZS0+bmFtZTsKKwltb3VzZS0+ZGV2LnBoeXMgPSBtb3VzZS0+cGh5czsKKwltb3VzZS0+ZGV2LmlkLmJ1c3R5cGUgPSBCVVNfVVNCOworCW1vdXNlLT5kZXYuaWQudmVuZG9yID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwltb3VzZS0+ZGV2LmlkLnByb2R1Y3QgPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwltb3VzZS0+ZGV2LmlkLnZlcnNpb24gPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKKwltb3VzZS0+ZGV2LmRldiA9ICZpbnRmLT5kZXY7CisKKwlpZiAoZGV2LT5tYW51ZmFjdHVyZXIpCisJCXN0cmNhdChtb3VzZS0+bmFtZSwgZGV2LT5tYW51ZmFjdHVyZXIpOworCWlmIChkZXYtPnByb2R1Y3QpCisJCXNwcmludGYobW91c2UtPm5hbWUsICIlcyAlcyIsIG1vdXNlLT5uYW1lLCBkZXYtPnByb2R1Y3QpOworCisJaWYgKCFzdHJsZW4obW91c2UtPm5hbWUpKQorCQlzcHJpbnRmKG1vdXNlLT5uYW1lLCAiVVNCIEhJREJQIE1vdXNlICUwNHg6JTA0eCIsCisJCQltb3VzZS0+ZGV2LmlkLnZlbmRvciwgbW91c2UtPmRldi5pZC5wcm9kdWN0KTsKKworCXVzYl9maWxsX2ludF91cmIobW91c2UtPmlycSwgZGV2LCBwaXBlLCBtb3VzZS0+ZGF0YSwKKwkJCSAobWF4cCA+IDggPyA4IDogbWF4cCksCisJCQkgdXNiX21vdXNlX2lycSwgbW91c2UsIGVuZHBvaW50LT5iSW50ZXJ2YWwpOworCW1vdXNlLT5pcnEtPnRyYW5zZmVyX2RtYSA9IG1vdXNlLT5kYXRhX2RtYTsKKwltb3VzZS0+aXJxLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCWlucHV0X3JlZ2lzdGVyX2RldmljZSgmbW91c2UtPmRldik7CisJcHJpbnRrKEtFUk5fSU5GTyAiaW5wdXQ6ICVzIG9uICVzXG4iLCBtb3VzZS0+bmFtZSwgcGF0aCk7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIG1vdXNlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXNiX21vdXNlX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9tb3VzZSAqbW91c2UgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwkKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCWlmIChtb3VzZSkgeworCQl1c2Jfa2lsbF91cmIobW91c2UtPmlycSk7CisJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKCZtb3VzZS0+ZGV2KTsKKwkJdXNiX2ZyZWVfdXJiKG1vdXNlLT5pcnEpOworCQl1c2JfYnVmZmVyX2ZyZWUoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwgOCwgbW91c2UtPmRhdGEsIG1vdXNlLT5kYXRhX2RtYSk7CisJCWtmcmVlKG1vdXNlKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfbW91c2VfaWRfdGFibGUgW10gPSB7CisJeyBVU0JfSU5URVJGQUNFX0lORk8oMywgMSwgMikgfSwKKyAgICB7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCB1c2JfbW91c2VfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX21vdXNlX2RyaXZlciA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gInVzYm1vdXNlIiwKKwkucHJvYmUJCT0gdXNiX21vdXNlX3Byb2JlLAorCS5kaXNjb25uZWN0CT0gdXNiX21vdXNlX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlCT0gdXNiX21vdXNlX2lkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdXNiX21vdXNlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ1c2JfbW91c2VfZHJpdmVyKTsKKwlpZiAocmV0dmFsID09IDApIAorCQlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYl9tb3VzZV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnVzYl9tb3VzZV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1c2JfbW91c2VfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2JfbW91c2VfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC93YWNvbS5jIGIvZHJpdmVycy91c2IvaW5wdXQvd2Fjb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWMwNGRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvd2Fjb20uYwpAQCAtMCwwICsxLDk1MSBAQAorLyoKKyAqICBVU0IgV2Fjb20gR3JhcGhpcmUgYW5kIFdhY29tIEludHVvcyB0YWJsZXQgc3VwcG9ydAorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCBWb2p0ZWNoIFBhdmxpawk8dm9qdGVjaEB1Y3cuY3o+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAwIEFuZHJlYXMgQmFjaCBBYWVuCTxhYmFjaEBzdG9mYW5ldC5kaz4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAgQ2xpZmZvcmQgV29sZgkJPGNsaWZmb3JkQGNsaWZmb3JkLmF0PgorICogIENvcHlyaWdodCAoYykgMjAwMCBTYW0gTW9zZWwJCTxzYW0ubW9zZWxAY29tcHV0ZXIub3JnPgorICogIENvcHlyaWdodCAoYykgMjAwMCBKYW1lcyBFLiBCbGFpcgkJPGNvcnZ1c0BnbnUub3JnPgorICogIENvcHlyaWdodCAoYykgMjAwMCBEYW5pZWwgRWdnZXIJCTxlZ2dlckBzdXNlLmRlPgorICogIENvcHlyaWdodCAoYykgMjAwMSBGcmVkZXJpYyBMZXBpZWQJCTxmbGVwaWVkQG1hbmRyYWtlc29mdC5jb20+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA0IFBhbmFnaW90aXMgSXNzYXJpcwk8cGFuYWdpb3Rpcy5pc3NhcmlzQG1lY2gua3VsZXV2ZW4uYWMuYmU+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgUGluZyBDaGVuZwkJPHBpbmdjQHdhY29tLmNvbT4KKyAqCisgKiAgQ2hhbmdlTG9nOgorICogICAgICB2MC4xICh2cCkgIC0gSW5pdGlhbCByZWxlYXNlCisgKiAgICAgIHYwLjIgKGFiYSkgLSBTdXBwb3J0IGZvciBhbGwgYnV0dG9ucyAvIGNvbWJpbmF0aW9ucworICogICAgICB2MC4zICh2cCkgIC0gU3VwcG9ydCBmb3IgSW50dW9zIGFkZGVkCisgKgl2MC40IChzbSkgIC0gU3VwcG9ydCBmb3IgbW9yZSBJbnR1b3MgbW9kZWxzLCBtZW51c3RyaXAKKyAqCQkJcmVsYXRpdmUgbW9kZSwgcHJveGltaXR5LgorICoJdjAuNSAodnApICAtIEJpZyBjbGVhbnVwLCBuaWZ0eSBmZWF0dXJlcyByZW1vdmVkLAorICogCQkJdGhleSBiZWxvbmcgaW4gdXNlcnNwYWNlCisgKgl2MS44ICh2cCkgIC0gU3VibWl0IFVSQiBvbmx5IHdoZW4gb3BlcmF0aW5nLCBtb3ZlZCB0byBDVlMsCisgKgkJCXVzZSBpbnB1dF9yZXBvcnRfa2V5IGluc3RlYWQgb2YgcmVwb3J0X2J0biBhbmQKKyAqCQkJb3RoZXIgY2xlYW51cHMKKyAqCXYxLjExICh2cCkgLSBBZGQgVVJCIC0+ZGV2IHNldHRpbmcgZm9yIG5ldyBrZXJuZWxzCisgKgl2MS4xMSAoamIpIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSA0RCBNb3VzZSAmIExlbnMKKyAqCXYxLjEyIChkZSkgLSBBZGQgc3VwcG9ydCBmb3IgdHdvIG1vcmUgaW5raW5nIHBlbiBJRHMKKyAqCXYxLjE0ICh2cCkgLSBVc2UgbmV3IFVTQiBkZXZpY2UgaWQgcHJvYmluZyBzY2hlbWUuCisgKgkJICAgICBGaXggV2Fjb20gR3JhcGhpcmUgbW91c2Ugd2hlZWwKKyAqCXYxLjE4ICh2cCkgLSBGaXggbW91c2Ugd2hlZWwgZGlyZWN0aW9uCisgKgkJICAgICBNYWtlIG1vdXNlIHJlbGF0aXZlCisgKiAgICAgIHYxLjIwIChmbCkgLSBSZXBvcnQgdG9vbCBpZCBmb3IgSW50dW9zIGRldmljZXMKKyAqICAgICAgICAgICAgICAgICAtIE11bHRpIHRvb2xzIHN1cHBvcnQKKyAqICAgICAgICAgICAgICAgICAtIENvcnJlY3RlZCBJbnR1b3MgcHJvdG9jb2wgZGVjb2RpbmcgKGFpcmJydXNoLCA0RCBtb3VzZSwgbGVucyBjdXJzb3IuLi4pCisgKiAgICAgICAgICAgICAgICAgLSBBZGQgUEwgbW9kZWxzIHN1cHBvcnQKKyAqCQkgICAtIEZpeCBXYWNvbSBHcmFwaGlyZSBtb3VzZSB3aGVlbCBhZ2FpbgorICoJdjEuMjEgKHZwKSAtIFJlbW92ZWQgcHJvdG9jb2wgZGVzY3JpcHRpb25zCisgKgkJICAgLSBBZGRlZCBNSVNDX1NFUklBTCBmb3IgdG9vbCBzZXJpYWwgbnVtYmVycworICoJICAgICAgKGdiKSAtIElkZW50aWZ5IHZlcnNpb24gb24gbW9kdWxlIGxvYWQuCisgKiAgICB2MS4yMS4xIChmbCkgLSBhZGRlZCBHcmFwaGlyZTIgc3VwcG9ydAorICogICAgdjEuMjEuMiAoZmwpIC0gYWRkZWQgSW50dW9zMiBzdXBwb3J0CisgKiAgICAgICAgICAgICAgICAgLSBhZGRlZCBhbGwgdGhlIFBMIGlkcworICogICAgdjEuMjEuMyAoZmwpIC0gYWRkZWQgYW5vdGhlciBlcmFzZXIgaWQgZnJvbSBOZWlsIE9rYW1vdG8KKyAqICAgICAgICAgICAgICAgICAtIGFkZGVkIHNtb290aCBmaWx0ZXIgZm9yIEdyYXBoaXJlIGZyb20gUGVyaSBIYW5rZXkKKyAqICAgICAgICAgICAgICAgICAtIGFkZGVkIFBlblBhcnRuZXIgc3VwcG9ydCBmcm9tIE9sYWYgdmFuIEVzCisgKiAgICAgICAgICAgICAgICAgLSBuZXcgdG9vbCBpZHMgZnJvbSBPbGUgTWFydGluIEJqb2VybmRhbGVuCisgKgl2MS4yOSAocGMpIC0gQWRkIHN1cHBvcnQgZm9yIG1vcmUgdGFibGV0cworICoJCSAgIC0gRml4IHByZXNzdXJlIHJlcG9ydGluZworICoJdjEuMzAgKHZwKSAtIE1lcmdlIDIuNCBhbmQgMi41IGRyaXZlcnMKKyAqCQkgICAtIFNpbmNlIDIuNSBub3cgaGFzIGlucHV0X3N5bmMoKSwgcmVtb3ZlIE1TQ19TRVJJQUwgYWJ1c2UKKyAqCQkgICAtIENsZWFudXBzIGhlcmUgYW5kIHRoZXJlCisgKiAgICB2MS4zMC4xIChwaSkgLSBBZGRlZCBHcmFwaGlyZTMgc3VwcG9ydAorICoJdjEuNDAgKHBjKSAtIEFkZCBzdXBwb3J0IGZvciBzZXZlcmFsIG5ldyBkZXZpY2VzLCBmaXggZXJhc2VyIHJlcG9ydGluZywgLi4uCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS40MCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAdWN3LmN6PiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBXYWNvbSBHcmFwaGlyZSBhbmQgV2Fjb20gSW50dW9zIHRhYmxldCBkcml2ZXIiCisjZGVmaW5lIERSSVZFUl9MSUNFTlNFICJHUEwiCisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoRFJJVkVSX0xJQ0VOU0UpOworCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfV0FDT00JMHgwNTZhCisKK3N0cnVjdCB3YWNvbV9mZWF0dXJlcyB7CisJY2hhciAqbmFtZTsKKwlpbnQgcGt0bGVuOworCWludCB4X21heDsKKwlpbnQgeV9tYXg7CisJaW50IHByZXNzdXJlX21heDsKKwlpbnQgZGlzdGFuY2VfbWF4OworCWludCB0eXBlOworCXVzYl9jb21wbGV0ZV90IGlycTsKK307CisKK3N0cnVjdCB3YWNvbSB7CisJc2lnbmVkIGNoYXIgKmRhdGE7CisJZG1hX2FkZHJfdCBkYXRhX2RtYTsKKwlzdHJ1Y3QgaW5wdXRfZGV2IGRldjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCXN0cnVjdCB1cmIgKmlycTsKKwlzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgKmZlYXR1cmVzOworCWludCB0b29sWzJdOworCWludCBvcGVuOworCV9fdTMyIHNlcmlhbFsyXTsKKwljaGFyIHBoeXNbMzJdOworfTsKKworI2RlZmluZSBVU0JfUkVRX1NFVF9SRVBPUlQJMHgwOQorc3RhdGljIGludCB1c2Jfc2V0X3JlcG9ydChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgdW5zaWduZWQgY2hhciB0eXBlLAorCQkJCXVuc2lnbmVkIGNoYXIgaWQsIHZvaWQgKmJ1ZiwgaW50IHNpemUpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLAorCQl1c2Jfc25kY3RybHBpcGUoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwgMCksCisgICAgICAgICAgICAgICAgVVNCX1JFUV9TRVRfUkVQT1JULCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisgICAgICAgICAgICAgICAgKHR5cGUgPDwgOCkgKyBpZCwgaW50Zi0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsCisJCWJ1Ziwgc2l6ZSwgMTAwMCk7Cit9CisKK3N0YXRpYyB2b2lkIHdhY29tX3BsX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB3YWNvbSAqd2Fjb20gPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9ICZ3YWNvbS0+ZGV2OworCWludCBwcm94LCBwcmVzc3VyZTsKKwlpbnQgcmV0dmFsOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoZGF0YVswXSAhPSAyKSB7CisJCWRiZygid2Fjb21fcGxfaXJxOiByZWNlaXZlZCB1bmtub3duIHJlcG9ydCAjJWQiLCBkYXRhWzBdKTsKKwkJZ290byBleGl0OworCX0KKworCXByb3ggPSBkYXRhWzFdICYgMHg0MDsKKworCWlucHV0X3JlZ3MoZGV2LCByZWdzKTsKKwkKKwlpZiAocHJveCkgeworCisJCXByZXNzdXJlID0gKHNpZ25lZCBjaGFyKSgoZGF0YVs3XSA8PCAxKSB8ICgoZGF0YVs0XSA+PiAyKSAmIDEpKTsKKwkJaWYgKHdhY29tLT5mZWF0dXJlcy0+cHJlc3N1cmVfbWF4ID4gMjU1KQorCQkJcHJlc3N1cmUgPSAocHJlc3N1cmUgPDwgMSkgfCAoKGRhdGFbNF0gPj4gNikgJiAxKTsKKwkJcHJlc3N1cmUgKz0gKHdhY29tLT5mZWF0dXJlcy0+cHJlc3N1cmVfbWF4ICsgMSkgLyAyOworCisJCS8qCisJCSAqIGlmIGdvaW5nIGZyb20gb3V0IG9mIHByb3hpbWl0eSBpbnRvIHByb3hpbWl0eSBzZWxlY3QgYmV0d2VlbiB0aGUgZXJhc2VyCisJCSAqIGFuZCB0aGUgcGVuIGJhc2VkIG9uIHRoZSBzdGF0ZSBvZiB0aGUgc3R5bHVzMiBidXR0b24sIGNob29zZSBlcmFzZXIgaWYKKwkJICogcHJlc3NlZCBlbHNlIGNob29zZSBwZW4uIGlmIG5vdCBhIHByb3hpbWl0eSBjaGFuZ2UgZnJvbSBvdXQgdG8gaW4sIHNlbmQKKwkJICogYW4gb3V0IG9mIHByb3hpbWl0eSBmb3IgcHJldmlvdXMgdG9vbCB0aGVuIGEgaW4gZm9yIG5ldyB0b29sLgorCQkgKi8KKwkJaWYgKCF3YWNvbS0+dG9vbFswXSkgeworCQkJLyogR29pbmcgaW50byBwcm94aW1pdHkgc2VsZWN0IHRvb2wgKi8KKwkJCXdhY29tLT50b29sWzFdID0gKGRhdGFbNF0gJiAweDIwKT8gQlROX1RPT0xfUlVCQkVSIDogQlROX1RPT0xfUEVOOworCQl9CisJCWVsc2UgeworCQkJLyogd2FzIGVudGVyZWQgd2l0aCBzdHlsdXMyIHByZXNzZWQgKi8KKwkJCWlmICh3YWNvbS0+dG9vbFsxXSA9PSBCVE5fVE9PTF9SVUJCRVIgJiYgIShkYXRhWzRdICYgMHgyMCkgKSB7CisJCQkJLyogcmVwb3J0IG91dCBwcm94aW1pdHkgZm9yIHByZXZpb3VzIHRvb2wgKi8KKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbMV0sIDApOworCQkJCWlucHV0X3N5bmMoZGV2KTsKKwkJCQl3YWNvbS0+dG9vbFsxXSA9IEJUTl9UT09MX1BFTjsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisJCX0KKwkJaWYgKHdhY29tLT50b29sWzFdICE9IEJUTl9UT09MX1JVQkJFUikgeworCQkJLyogVW5rbm93biB0b29sIHNlbGVjdGVkIGRlZmF1bHQgdG8gcGVuIHRvb2wgKi8KKwkJCXdhY29tLT50b29sWzFdID0gQlROX1RPT0xfUEVOOworCQl9CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFsxXSwgcHJveCk7IC8qIHJlcG9ydCBpbiBwcm94aW1pdHkgZm9yIHRvb2wgKi8KKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCBkYXRhWzNdIHwgKChfX3UzMilkYXRhWzJdIDw8IDcpIHwgKChfX3UzMikoZGF0YVsxXSAmIDB4MDMpIDw8IDE0KSk7CisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgZGF0YVs2XSB8ICgoX191MzIpZGF0YVs1XSA8PCA3KSB8ICgoX191MzIpKGRhdGFbNF0gJiAweDAzKSA8PCAxNCkpOworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1BSRVNTVVJFLCBwcmVzc3VyZSk7CisKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT1VDSCwgZGF0YVs0XSAmIDB4MDgpOworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1NUWUxVUywgZGF0YVs0XSAmIDB4MTApOworCQkvKiBPbmx5IGFsbG93IHRoZSBzdHlsdXMyIGJ1dHRvbiB0byBiZSByZXBvcnRlZCBmb3IgdGhlIHBlbiB0b29sLiAqLworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1NUWUxVUzIsICh3YWNvbS0+dG9vbFsxXSA9PSBCVE5fVE9PTF9QRU4pICYmIChkYXRhWzRdICYgMHgyMCkpOworCX0KKwllbHNlIHsKKwkJLyogcmVwb3J0IHByb3hpbWl0eS1vdXQgb2YgYSAodmFsaWQpIHRvb2wgKi8KKwkJaWYgKHdhY29tLT50b29sWzFdICE9IEJUTl9UT09MX1JVQkJFUikgeworCQkJLyogVW5rbm93biB0b29sIHNlbGVjdGVkIGRlZmF1bHQgdG8gcGVuIHRvb2wgKi8KKwkJCXdhY29tLT50b29sWzFdID0gQlROX1RPT0xfUEVOOworCQl9CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFsxXSwgcHJveCk7CisJfQorCisJd2Fjb20tPnRvb2xbMF0gPSBwcm94OyAvKiBTYXZlIHByb3hpbWl0eSBzdGF0ZSAqLworCWlucHV0X3N5bmMoZGV2KTsKKworZXhpdDoKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0dmFsKQorCQllcnIgKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCSAgICAgX19GVU5DVElPTl9fLCByZXR2YWwpOworfQorCitzdGF0aWMgdm9pZCB3YWNvbV9wdHVfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHdhY29tICp3YWNvbSA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7CisJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gJndhY29tLT5kZXY7CisJaW50IHJldHZhbDsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGRhdGFbMF0gIT0gMikKKwl7CisJCXByaW50ayhLRVJOX0lORk8gIndhY29tX3B0dV9pcnE6IHJlY2VpdmVkIHVua25vd24gcmVwb3J0ICMlZFxuIiwgZGF0YVswXSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpbnB1dF9yZWdzKGRldiwgcmVncyk7CisJaWYgKGRhdGFbMV0gJiAweDA0KQorCXsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT09MX1JVQkJFUiwgZGF0YVsxXSAmIDB4MjApOworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPVUNILCBkYXRhWzFdICYgMHgwOCk7CisJfQorCWVsc2UKKwl7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9PTF9QRU4sIGRhdGFbMV0gJiAweDIwKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT1VDSCwgZGF0YVsxXSAmIDB4MDEpOworCX0KKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIGxlMTZfdG9fY3B1KCooX19sZTE2ICopICZkYXRhWzJdKSk7CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSAmZGF0YVs0XSkpOworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUFJFU1NVUkUsIGxlMTZfdG9fY3B1KCooX19sZTE2ICopICZkYXRhWzZdKSk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVFlMVVMsIGRhdGFbMV0gJiAweDAyKTsKKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1NUWUxVUzIsIGRhdGFbMV0gJiAweDEwKTsKKworCWlucHV0X3N5bmMoZGV2KTsKKworZXhpdDoKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0dmFsKQorCQllcnIgKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCSAgICAgX19GVU5DVElPTl9fLCByZXR2YWwpOworfQorCitzdGF0aWMgdm9pZCB3YWNvbV9wZW5wYXJ0bmVyX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB3YWNvbSAqd2Fjb20gPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9ICZ3YWNvbS0+ZGV2OworCWludCByZXR2YWw7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChkYXRhWzBdICE9IDIpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAid2Fjb21fcGVucGFydG5lcl9pcnE6IHJlY2VpdmVkIHVua25vd24gcmVwb3J0ICMlZFxuIiwgZGF0YVswXSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpbnB1dF9yZWdzKGRldiwgcmVncyk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT09MX1BFTiwgMSk7CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSAmZGF0YVsxXSkpOworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgbGUxNl90b19jcHUoKihfX2xlMTYgKikgJmRhdGFbM10pKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1BSRVNTVVJFLCAoc2lnbmVkIGNoYXIpZGF0YVs2XSArIDEyNyk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT1VDSCwgKChzaWduZWQgY2hhcilkYXRhWzZdID4gLTgwKSAmJiAhKGRhdGFbNV0gJiAweDIwKSk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVFlMVVMsIChkYXRhWzVdICYgMHg0MCkpOworCWlucHV0X3N5bmMoZGV2KTsKKworZXhpdDoKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0dmFsKQorCQllcnIgKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCSAgICAgX19GVU5DVElPTl9fLCByZXR2YWwpOworfQorCitzdGF0aWMgdm9pZCB3YWNvbV9ncmFwaGlyZV9pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgd2Fjb20gKndhY29tID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSAmd2Fjb20tPmRldjsKKwlpbnQgeCwgeTsKKwlpbnQgcmV0dmFsOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoZGF0YVswXSAhPSAyKSB7CisJCWRiZygid2Fjb21fZ3JhcGhpcmVfaXJxOiByZWNlaXZlZCB1bmtub3duIHJlcG9ydCAjJWQiLCBkYXRhWzBdKTsKKwkJZ290byBleGl0OworCX0KKworCXggPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSAmZGF0YVsyXSk7CisJeSA9IGxlMTZfdG9fY3B1KCooX19sZTE2ICopICZkYXRhWzRdKTsKKworCWlucHV0X3JlZ3MoZGV2LCByZWdzKTsKKworCXN3aXRjaCAoKGRhdGFbMV0gPj4gNSkgJiAzKSB7CisKKwkJY2FzZSAwOgkvKiBQZW4gKi8KKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9PTF9QRU4sIGRhdGFbMV0gJiAweDgwKTsKKwkJCWJyZWFrOworCisJCWNhc2UgMTogLyogUnViYmVyICovCisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPT0xfUlVCQkVSLCBkYXRhWzFdICYgMHg4MCk7CisJCQlicmVhazsKKworCQljYXNlIDI6IC8qIE1vdXNlIHdpdGggd2hlZWwgKi8KKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTUlERExFLCBkYXRhWzFdICYgMHgwNCk7CisJCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1dIRUVMLCAoc2lnbmVkIGNoYXIpIGRhdGFbNl0pOworCQkJLyogZmFsbCB0aHJvdWdoICovCisKKyAgICAgICAgICAgICAgICBjYXNlIDM6IC8qIE1vdXNlIHdpdGhvdXQgd2hlZWwgKi8KKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9PTF9NT1VTRSwgZGF0YVs3XSA+IDI0KTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTEVGVCwgZGF0YVsxXSAmIDB4MDEpOworCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9SSUdIVCwgZGF0YVsxXSAmIDB4MDIpOworCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ESVNUQU5DRSwgZGF0YVs3XSk7CisKKwkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgeCk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIHkpOworCisJCQlpbnB1dF9zeW5jKGRldik7CisJCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGRhdGFbMV0gJiAweDgwKSB7CisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgeCk7CisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgeSk7CisJfQorCisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19QUkVTU1VSRSwgbGUxNl90b19jcHUoKihfX2xlMTYgKikgJmRhdGFbNl0pKTsKKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPVUNILCBkYXRhWzFdICYgMHgwMSk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVFlMVVMsIGRhdGFbMV0gJiAweDAyKTsKKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1NUWUxVUzIsIGRhdGFbMV0gJiAweDA0KTsKKworCWlucHV0X3N5bmMoZGV2KTsKKworZXhpdDoKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0dmFsKQorCQllcnIgKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCSAgICAgX19GVU5DVElPTl9fLCByZXR2YWwpOworfQorCitzdGF0aWMgaW50IHdhY29tX2ludHVvc19pbm91dChzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHdhY29tICp3YWNvbSA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7CisJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gJndhY29tLT5kZXY7CisJaW50IGlkeDsKKworCS8qIHRvb2wgbnVtYmVyICovCisJaWR4ID0gZGF0YVsxXSAmIDB4MDE7CisKKwkvKiBFbnRlciByZXBvcnQgKi8KKwlpZiAoKGRhdGFbMV0gJiAweGZjKSA9PSAweGMwKQorCXsKKwkJLyogc2VyaWFsIG51bWJlciBvZiB0aGUgdG9vbCAqLworCQl3YWNvbS0+c2VyaWFsW2lkeF0gPSAoKF9fdTMyKShkYXRhWzNdICYgMHgwZikgPDwgMjgpICsKKwkJCSgoX191MzIpZGF0YVs0XSA8PCAyMCkgKyAoKF9fdTMyKWRhdGFbNV0gPDwgMTIpICsKKwkJCSgoX191MzIpZGF0YVs2XSA8PCA0KSArIChkYXRhWzddID4+IDQpOworCisJCXN3aXRjaCAoKChfX3UzMilkYXRhWzJdIDw8IDQpIHwgKGRhdGFbM10gPj4gNCkpIHsKKwkJCWNhc2UgMHg4MTI6IC8qIElua2luZyBwZW4gKi8KKwkJCWNhc2UgMHg4MDE6IC8qIEludHVvczMgSW5raW5nIHBlbiAqLworCQkJY2FzZSAweDAxMjoKKwkJCQl3YWNvbS0+dG9vbFtpZHhdID0gQlROX1RPT0xfUEVOQ0lMOworCQkJCWJyZWFrOworCQkJY2FzZSAweDgyMjogLyogUGVuICovCisJCQljYXNlIDB4ODQyOgorCQkJY2FzZSAweDg1MjoKKwkJCWNhc2UgMHg4MjM6IC8qIEludHVvczMgR3JpcCBQZW4gKi8KKwkJCWNhc2UgMHg4MTM6IC8qIEludHVvczMgQ2xhc3NpYyBQZW4gKi8KKwkJCWNhc2UgMHg4ODU6IC8qIEludHVvczMgTWFya2VyIFBlbiAqLworCQkJY2FzZSAweDAyMjoKKwkJCQl3YWNvbS0+dG9vbFtpZHhdID0gQlROX1RPT0xfUEVOOworCQkJCWJyZWFrOworCQkJY2FzZSAweDgzMjogLyogU3Ryb2tlIHBlbiAqLworCQkJY2FzZSAweDAzMjoKKwkJCQl3YWNvbS0+dG9vbFtpZHhdID0gQlROX1RPT0xfQlJVU0g7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4MDA3OiAvKiBNb3VzZSA0RCBhbmQgMkQgKi8KKwkJICAgICAgICBjYXNlIDB4MDljOgorCQkJY2FzZSAweDA5NDoKKwkJCWNhc2UgMHgwMTc6IC8qIEludHVvczMgMkQgTW91c2UgKi8KKwkJCQl3YWNvbS0+dG9vbFtpZHhdID0gQlROX1RPT0xfTU9VU0U7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4MDk2OiAvKiBMZW5zIGN1cnNvciAqLworCQkJY2FzZSAweDA5NzogLyogSW50dW9zMyBMZW5zIGN1cnNvciAqLworCQkJCXdhY29tLT50b29sW2lkeF0gPSBCVE5fVE9PTF9MRU5TOworCQkJCWJyZWFrOworCQkJY2FzZSAweDgyYTogLyogRXJhc2VyICovCisJCQljYXNlIDB4ODVhOgorCQkgICAgICAgIGNhc2UgMHg5MWE6CisJCQljYXNlIDB4ZDFhOgorCQkJY2FzZSAweDBmYToKKwkJCWNhc2UgMHg4MmI6IC8qIEludHVvczMgR3JpcCBQZW4gRXJhc2VyICovCisJCQljYXNlIDB4ODFiOiAvKiBJbnR1b3MzIENsYXNzaWMgUGVuIEVyYXNlciAqLworCQkJY2FzZSAweDkxYjogLyogSW50dW9zMyBBaXJicnVzaCBFcmFzZXIgKi8KKwkJCQl3YWNvbS0+dG9vbFtpZHhdID0gQlROX1RPT0xfUlVCQkVSOworCQkJCWJyZWFrOworCQkJY2FzZSAweGQxMjoKKwkJCWNhc2UgMHg5MTI6CisJCQljYXNlIDB4MTEyOgorCQkJY2FzZSAweDkxMzogLyogSW50dW9zMyBBaXJicnVzaCAqLworCQkJCXdhY29tLT50b29sW2lkeF0gPSBCVE5fVE9PTF9BSVJCUlVTSDsKKwkJCQlicmVhazsJLyogQWlyYnJ1c2ggKi8KKwkJCWRlZmF1bHQ6IC8qIFVua25vd24gdG9vbCAqLworCQkJCXdhY29tLT50b29sW2lkeF0gPSBCVE5fVE9PTF9QRU47CisJCX0KKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sW2lkeF0sIDEpOworCQlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NFUklBTCwgd2Fjb20tPnNlcmlhbFtpZHhdKTsKKwkJaW5wdXRfc3luYyhkZXYpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBFeGl0IHJlcG9ydCAqLworCWlmICgoZGF0YVsxXSAmIDB4ZmUpID09IDB4ODApIHsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sW2lkeF0sIDApOworCQlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NFUklBTCwgd2Fjb20tPnNlcmlhbFtpZHhdKTsKKwkJaW5wdXRfc3luYyhkZXYpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd2Fjb21faW50dW9zX2dlbmVyYWwoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB3YWNvbSAqd2Fjb20gPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9ICZ3YWNvbS0+ZGV2OworCXVuc2lnbmVkIGludCB0OworCisJLyogZ2VuZXJhbCBwZW4gcGFja2V0ICovCisJaWYgKChkYXRhWzFdICYgMHhiOCkgPT0gMHhhMCkKKwl7CisJCXQgPSAoKF9fdTMyKWRhdGFbNl0gPDwgMikgfCAoKGRhdGFbN10gPj4gNikgJiAzKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19QUkVTU1VSRSwgdCk7CisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfVElMVF9YLAorCQkJCSgoZGF0YVs3XSA8PCAxKSAmIDB4N2UpIHwgKGRhdGFbOF0gPj4gNykpOworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1RJTFRfWSwgZGF0YVs4XSAmIDB4N2YpOworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1NUWUxVUywgZGF0YVsxXSAmIDIpOworCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1NUWUxVUzIsIGRhdGFbMV0gJiA0KTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT1VDSCwgdCA+IDEwKTsKKwl9CisKKwkvKiBhaXJicnVzaCBzZWNvbmQgcGFja2V0ICovCisJaWYgKChkYXRhWzFdICYgMHhiYykgPT0gMHhiNCkKKwl7CisJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfV0hFRUwsCisJCQkJKChfX3UzMilkYXRhWzZdIDw8IDIpIHwgKChkYXRhWzddID4+IDYpICYgMykpOworCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1RJTFRfWCwKKwkJCQkoKGRhdGFbN10gPDwgMSkgJiAweDdlKSB8IChkYXRhWzhdID4+IDcpKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19USUxUX1ksIGRhdGFbOF0gJiAweDdmKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCB3YWNvbV9pbnR1b3NfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHdhY29tICp3YWNvbSA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7CisJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gJndhY29tLT5kZXY7CisJdW5zaWduZWQgaW50IHQ7CisJaW50IGlkeDsKKwlpbnQgcmV0dmFsOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoZGF0YVswXSAhPSAyICYmIGRhdGFbMF0gIT0gNSAmJiBkYXRhWzBdICE9IDYpIHsKKwkJZGJnKCJ3YWNvbV9pbnR1b3NfaXJxOiByZWNlaXZlZCB1bmtub3duIHJlcG9ydCAjJWQiLCBkYXRhWzBdKTsKKwkJZ290byBleGl0OworCX0KKworCWlucHV0X3JlZ3MoZGV2LCByZWdzKTsKKworCS8qIHRvb2wgbnVtYmVyICovCisJaWR4ID0gZGF0YVsxXSAmIDB4MDE7CisKKwkvKiBwcm9jZXNzIGluL291dCBwcm94IGV2ZW50cyAqLworCWlmICh3YWNvbV9pbnR1b3NfaW5vdXQodXJiKSkgZ290byBleGl0OworCisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCBiZTE2X3RvX2NwdSgqKF9fYmUxNiAqKSAmZGF0YVsyXSkpOworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgYmUxNl90b19jcHUoKihfX2JlMTYgKikgJmRhdGFbNF0pKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX0RJU1RBTkNFLCBkYXRhWzldKTsKKworCS8qIHByb2Nlc3MgZ2VuZXJhbCBwYWNrZXRzICovCisJd2Fjb21faW50dW9zX2dlbmVyYWwodXJiKTsKKwkKKwlpZiAoKGRhdGFbMV0gJiAweGJjKSA9PSAweGE4IHx8IChkYXRhWzFdICYgMHhiZSkgPT0gMHhiMCkgewkJLyogNEQgbW91c2Ugb3IgTGVucyBjdXJzb3IgcGFja2V0cyAqLworCisJCWlmIChkYXRhWzFdICYgMHgwMikgewkJCQkJCS8qIFJvdGF0aW9uIHBhY2tldCAqLworCisJCQl0ID0gKChfX3UzMilkYXRhWzZdIDw8IDMpIHwgKChkYXRhWzddID4+IDUpICYgNyk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1JaLCAoZGF0YVs3XSAmIDB4MjApID8gKCh0IC0gMSkgLyAyKSA6IC10IC8gMik7CisKKwkJfSBlbHNlIHsKKworCSAJCWlmICgoZGF0YVsxXSAmIDB4MTApID09IDApIHsJCQkJLyogNEQgbW91c2UgcGFja2V0cyAqLworCisJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9MRUZULCAgIGRhdGFbOF0gJiAweDAxKTsKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX01JRERMRSwgZGF0YVs4XSAmIDB4MDIpOworCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fUklHSFQsICBkYXRhWzhdICYgMHgwNCk7CisKKwkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1NJREUsICAgZGF0YVs4XSAmIDB4MjApOworCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fRVhUUkEsICBkYXRhWzhdICYgMHgxMCk7CisJCQkJdCA9ICgoX191MzIpZGF0YVs2XSA8PCAyKSB8ICgoZGF0YVs3XSA+PiA2KSAmIDMpOworCQkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfVEhST1RUTEUsIChkYXRhWzhdICYgMHgwOCkgPyAtdCA6IHQpOworCisJCQl9IGVsc2UgeworCQkJCWlmICh3YWNvbS0+dG9vbFtpZHhdID09IEJUTl9UT09MX01PVVNFKSB7CS8qIDJEIG1vdXNlIHBhY2tldHMgKi8JCisJCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTEVGVCwgICBkYXRhWzhdICYgMHgwNCk7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTUlERExFLCBkYXRhWzhdICYgMHgwOCk7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fUklHSFQsICBkYXRhWzhdICYgMHgxMCk7CisJCQkJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfV0hFRUwsIAorCQkJCQkgICAgKC0oX191MzIpKGRhdGFbOF0gJiAweDAxKSArIChfX3UzMikoKGRhdGFbOF0gJiAweDAyKSA+PiAxKSkpOworCQkJCX0KKwkJCQllbHNlIHsgICAgIC8qIExlbnMgY3Vyc29yIHBhY2tldHMgKi8KKwkJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9MRUZULCAgIGRhdGFbOF0gJiAweDAxKTsKKwkJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9NSURETEUsIGRhdGFbOF0gJiAweDAyKTsKKwkJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9SSUdIVCwgIGRhdGFbOF0gJiAweDA0KTsKKwkJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TSURFLCAgIGRhdGFbOF0gJiAweDEwKTsKKwkJCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9FWFRSQSwgIGRhdGFbOF0gJiAweDA4KTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCisJaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sW2lkeF0sIDEpOworCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0VSSUFMLCB3YWNvbS0+c2VyaWFsW2lkeF0pOworCWlucHV0X3N5bmMoZGV2KTsKKworZXhpdDoKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0dmFsKQorCQllcnIgKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCSAgICAgX19GVU5DVElPTl9fLCByZXR2YWwpOworfQorCitzdGF0aWMgdm9pZCB3YWNvbV9pbnR1b3MzX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB3YWNvbSAqd2Fjb20gPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9ICZ3YWNvbS0+ZGV2OworCXVuc2lnbmVkIGludCB0OworCWludCBpZHgsIHJldHZhbDsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogY2hlY2sgZm9yIHZhbGlkIHJlcG9ydCAqLworCWlmIChkYXRhWzBdICE9IDIgJiYgZGF0YVswXSAhPSA1ICYmIGRhdGFbMF0gIT0gMTIpCisJeworCQlwcmludGsoS0VSTl9JTkZPICJ3YWNvbV9pbnR1b3MzX2lycTogcmVjZWl2ZWQgdW5rbm93biByZXBvcnQgIyVkXG4iLCBkYXRhWzBdKTsKKwkJZ290byBleGl0OworCX0KKworCWlucHV0X3JlZ3MoZGV2LCByZWdzKTsKKworCS8qIHRvb2wgaW5kZXggaXMgYWx3YXlzIDAgaGVyZSBzaW5jZSB0aGVyZSBpcyBubyBkdWFsIGlucHV0IHRvb2wgKi8KKwlpZHggPSBkYXRhWzFdICYgMHgwMTsKKworCS8qIHBhZCBwYWNrZXRzLiBXb3JrcyBhcyBhIHNlY29uZCB0b29sIGFuZCBpcyBhbHdheXMgaW4gcHJveCAqLworCWlmIChkYXRhWzBdID09IDEyKQorCXsKKwkJLyogaW5pdGlhdGUgdGhlIHBhZCBhcyBhIGRldmljZSAqLworCQlpZiAod2Fjb20tPnRvb2xbMV0gIT0gQlROX1RPT0xfRklOR0VSKQorCQl7CisJCQl3YWNvbS0+dG9vbFsxXSA9IEJUTl9UT09MX0ZJTkdFUjsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFsxXSwgMSk7CisJCX0KKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl8wLCAoZGF0YVs1XSAmIDB4MDEpKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl8xLCAoZGF0YVs1XSAmIDB4MDIpKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl8yLCAoZGF0YVs1XSAmIDB4MDQpKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl8zLCAoZGF0YVs1XSAmIDB4MDgpKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl80LCAoZGF0YVs2XSAmIDB4MDEpKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl81LCAoZGF0YVs2XSAmIDB4MDIpKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl82LCAoZGF0YVs2XSAmIDB4MDQpKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl83LCAoZGF0YVs2XSAmIDB4MDgpKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWCwgKChkYXRhWzFdICYgMHgxZikgPDwgOCkgfCBkYXRhWzJdKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWSwgKChkYXRhWzNdICYgMHgxZikgPDwgOCkgfCBkYXRhWzRdKTsKKwkJaW5wdXRfZXZlbnQoZGV2LCBFVl9NU0MsIE1TQ19TRVJJQUwsIDB4ZmZmZmZmZmYpOworCQlpbnB1dF9zeW5jKGRldik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBwcm9jZXNzIGluL291dCBwcm94IGV2ZW50cyAqLworCWlmICh3YWNvbV9pbnR1b3NfaW5vdXQodXJiKSkgZ290byBleGl0OworCisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCAoKF9fdTMyKWRhdGFbMl0gPDwgOSkgfCAoKF9fdTMyKWRhdGFbM10gPDwgMSkgfCAoKGRhdGFbOV0gPj4gMSkgJiAxKSk7CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCAoKF9fdTMyKWRhdGFbNF0gPDwgOSkgfCAoKF9fdTMyKWRhdGFbNV0gPDwgMSkgfCAoZGF0YVs5XSAmIDEpKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX0RJU1RBTkNFLCAoKGRhdGFbOV0gPj4gMikgJiAweDNmKSk7CisKKwkvKiBwcm9jZXNzIGdlbmVyYWwgcGFja2V0cyAqLworCXdhY29tX2ludHVvc19nZW5lcmFsKHVyYik7CisKKwlpZiAoKGRhdGFbMV0gJiAweGJjKSA9PSAweGE4IHx8IChkYXRhWzFdICYgMHhiZSkgPT0gMHhiMCkKKwl7CisJCS8qIE1hcmtlciBwZW4gcm90YXRpb24gcGFja2V0LiBSZXBvcnRlZCBhcyB3aGVlbCBkdWUgdG8gdmFsdWF0b3IgbGltaXRhdGlvbiAqLworCQlpZiAoZGF0YVsxXSAmIDB4MDIpCisJCXsKKwkJCXQgPSAoKF9fdTMyKWRhdGFbNl0gPDwgMykgfCAoKGRhdGFbN10gPj4gNSkgJiA3KTsKKwkJCXQgPSAoZGF0YVs3XSAmIDB4MjApID8gKCh0ID4gOTAwKSA/ICgodC0xKSAvIDIgLSAxMzUwKSA6CisJCQkJKCh0LTEpIC8gMiArIDQ1MCkpIDogKDQ1MCAtIHQgLyAyKSA7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1dIRUVMLCB0KTsKKwkJfQorCisJCS8qIDJEIG1vdXNlIHBhY2tldHMgKi8KKwkJaWYgKHdhY29tLT50b29sW2lkeF0gPT0gQlROX1RPT0xfTU9VU0UpCisJCXsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTEVGVCwgICBkYXRhWzhdICYgMHgwNCk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX01JRERMRSwgZGF0YVs4XSAmIDB4MDgpOworCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9SSUdIVCwgIGRhdGFbOF0gJiAweDEwKTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU0lERSwgICBkYXRhWzhdICYgMHg0MCk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0VYVFJBLCAgZGF0YVs4XSAmIDB4MjApOworCQkJLyogbW91c2Ugd2hlZWwgaXMgcG9zaXRpdmUgd2hlbiByb2xsZWQgYmFja3dhcmRzICovCisJCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1dIRUVMLCAgKChfX3UzMikoKGRhdGFbOF0gJiAweDAyKSA+PiAxKQorCQkJCQkgLSAoX191MzIpKGRhdGFbOF0gJiAweDAxKSkpOworCQl9CisJfQorCisJaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sW2lkeF0sIDEpOworCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0VSSUFMLCB3YWNvbS0+c2VyaWFsW2lkeF0pOworCWlucHV0X3N5bmMoZGV2KTsKKworZXhpdDoKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0dmFsKQorCQllcnIgKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHJldHZhbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNbXSA9IHsKKwl7ICJXYWNvbSBQZW5wYXJ0bmVyIiwgICAgNywgICA1MDQwLCAgMzc4MCwgIDI1NSwgMzIsIDAsIHdhY29tX3BlbnBhcnRuZXJfaXJxIH0sCisgICAgICAgIHsgIldhY29tIEdyYXBoaXJlIiwgICAgICA4LCAgMTAyMDYsICA3NDIyLCAgNTExLCAzMiwgMSwgd2Fjb21fZ3JhcGhpcmVfaXJxIH0sCisJeyAiV2Fjb20gR3JhcGhpcmUyIDR4NSIsIDgsICAxMDIwNiwgIDc0MjIsICA1MTEsIDMyLCAxLCB3YWNvbV9ncmFwaGlyZV9pcnEgfSwKKyAJeyAiV2Fjb20gR3JhcGhpcmUyIDV4NyIsIDgsICAxMzkxOCwgMTAyMDYsICA1MTEsIDMyLCAxLCB3YWNvbV9ncmFwaGlyZV9pcnEgfSwKKwl7ICJXYWNvbSBHcmFwaGlyZTMiLCAgICAgOCwgIDEwMjA4LCAgNzQyNCwgIDUxMSwgMzIsIDEsIHdhY29tX2dyYXBoaXJlX2lycSB9LAorCXsgIldhY29tIEdyYXBoaXJlMyA2eDgiLCA4LCAgMTY3MDQsIDEyMDY0LCAgNTExLCAzMiwgMSwgd2Fjb21fZ3JhcGhpcmVfaXJxIH0sCisgIAl7ICJXYWNvbSBJbnR1b3MgNHg1IiwgICAxMCwgIDEyNzAwLCAxMDYwMCwgMTAyMywgMTUsIDIsIHdhY29tX2ludHVvc19pcnEgfSwKKyAJeyAiV2Fjb20gSW50dW9zIDZ4OCIsICAgMTAsICAyMDMyMCwgMTYyNDAsIDEwMjMsIDE1LCAyLCB3YWNvbV9pbnR1b3NfaXJxIH0sCisgCXsgIldhY29tIEludHVvcyA5eDEyIiwgIDEwLCAgMzA0ODAsIDI0MDYwLCAxMDIzLCAxNSwgMiwgd2Fjb21faW50dW9zX2lycSB9LAorIAl7ICJXYWNvbSBJbnR1b3MgMTJ4MTIiLCAxMCwgIDMwNDgwLCAzMTY4MCwgMTAyMywgMTUsIDIsIHdhY29tX2ludHVvc19pcnEgfSwKKyAJeyAiV2Fjb20gSW50dW9zIDEyeDE4IiwgMTAsICA0NTcyMCwgMzE2ODAsIDEwMjMsIDE1LCAyLCB3YWNvbV9pbnR1b3NfaXJxIH0sCisgCXsgIldhY29tIFBMNDAwIiwgICAgICAgICA4LCAgIDU0MDgsICA0MDU2LCAgMjU1LCAzMiwgMywgd2Fjb21fcGxfaXJxIH0sCisgCXsgIldhY29tIFBMNTAwIiwgICAgICAgICA4LCAgIDYxNDQsICA0NjA4LCAgMjU1LCAzMiwgMywgd2Fjb21fcGxfaXJxIH0sCisgCXsgIldhY29tIFBMNjAwIiwgICAgICAgICA4LCAgIDYxMjYsICA0NjA0LCAgMjU1LCAzMiwgMywgd2Fjb21fcGxfaXJxIH0sCisgCXsgIldhY29tIFBMNjAwU1giLCAgICAgICA4LCAgIDYyNjAsICA1MDE2LCAgMjU1LCAzMiwgMywgd2Fjb21fcGxfaXJxIH0sCisgCXsgIldhY29tIFBMNTUwIiwgICAgICAgICA4LCAgIDYxNDQsICA0NjA4LCAgNTExLCAzMiwgMywgd2Fjb21fcGxfaXJxIH0sCisgCXsgIldhY29tIFBMODAwIiwgICAgICAgICA4LCAgIDcyMjAsICA1NzgwLCAgNTExLCAzMiwgMywgd2Fjb21fcGxfaXJxIH0sCisJeyAiV2Fjb20gSW50dW9zMiA0eDUiLCAgIDEwLCAxMjcwMCwgMTA2MDAsIDEwMjMsIDE1LCAyLCB3YWNvbV9pbnR1b3NfaXJxIH0sCisJeyAiV2Fjb20gSW50dW9zMiA2eDgiLCAgIDEwLCAyMDMyMCwgMTYyNDAsIDEwMjMsIDE1LCAyLCB3YWNvbV9pbnR1b3NfaXJxIH0sCisJeyAiV2Fjb20gSW50dW9zMiA5eDEyIiwgIDEwLCAzMDQ4MCwgMjQwNjAsIDEwMjMsIDE1LCAyLCB3YWNvbV9pbnR1b3NfaXJxIH0sCisJeyAiV2Fjb20gSW50dW9zMiAxMngxMiIsIDEwLCAzMDQ4MCwgMzE2ODAsIDEwMjMsIDE1LCAyLCB3YWNvbV9pbnR1b3NfaXJxIH0sCisJeyAiV2Fjb20gSW50dW9zMiAxMngxOCIsIDEwLCA0NTcyMCwgMzE2ODAsIDEwMjMsIDE1LCAyLCB3YWNvbV9pbnR1b3NfaXJxIH0sCisJeyAiV2Fjb20gVm9saXRvIiwgICAgICAgIDgsICAgNTEwNCwgIDM3MTIsICA1MTEsIDMyLCAxLCB3YWNvbV9ncmFwaGlyZV9pcnEgfSwKKwl7ICJXYWNvbSBDaW50aXEgUGFydG5lciIsOCwgIDIwNDgwLCAxNTM2MCwgIDUxMSwgMzIsIDMsIHdhY29tX3B0dV9pcnEgfSwKKwl7ICJXYWNvbSBJbnR1b3MzIDR4NSIsICAgMTAsIDI1NDAwLCAyMDMyMCwgMTAyMywgMTUsIDQsIHdhY29tX2ludHVvczNfaXJxIH0sCisJeyAiV2Fjb20gSW50dW9zMyA2eDgiLCAgIDEwLCA0MDY0MCwgMzA0ODAsIDEwMjMsIDE1LCA0LCB3YWNvbV9pbnR1b3MzX2lycSB9LAorCXsgIldhY29tIEludHVvczMgOXgxMiIsICAxMCwgNjA5NjAsIDQ1NzIwLCAxMDIzLCAxNSwgNCwgd2Fjb21faW50dW9zM19pcnEgfSwKKwl7ICJXYWNvbSBJbnR1b3MyIDZ4OCIsICAgMTAsIDIwMzIwLCAxNjI0MCwgMTAyMywgMTUsIDIsIHdhY29tX2ludHVvc19pcnEgfSwKKyAJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgd2Fjb21faWRzW10gPSB7CisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MDApIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTApIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MjApIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MjEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MjIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MjMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MjQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzApIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzUpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDUpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NjApIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MDMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QjApIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QjEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QjIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDcpIH0sCisJeyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgd2Fjb21faWRzKTsKKworc3RhdGljIGludCB3YWNvbV9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3Qgd2Fjb20gKndhY29tID0gZGV2LT5wcml2YXRlOworCisJaWYgKHdhY29tLT5vcGVuKyspCisJCXJldHVybiAwOworCisJd2Fjb20tPmlycS0+ZGV2ID0gd2Fjb20tPnVzYmRldjsKKwlpZiAodXNiX3N1Ym1pdF91cmIod2Fjb20tPmlycSwgR0ZQX0tFUk5FTCkpIHsKKwkJd2Fjb20tPm9wZW4tLTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdhY29tX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3Qgd2Fjb20gKndhY29tID0gZGV2LT5wcml2YXRlOworCisJaWYgKCEtLXdhY29tLT5vcGVuKQorCQl1c2Jfa2lsbF91cmIod2Fjb20tPmlycSk7Cit9CisKK3N0YXRpYyBpbnQgd2Fjb21fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCWNoYXIgcmVwX2RhdGFbMl0gPSB7MHgwMiwgMHgwMn07CisJc3RydWN0IHdhY29tICp3YWNvbTsKKwljaGFyIHBhdGhbNjRdOworCisJaWYgKCEod2Fjb20gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2Fjb20pLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldCh3YWNvbSwgMCwgc2l6ZW9mKHN0cnVjdCB3YWNvbSkpOworCisJd2Fjb20tPmRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgMTAsIEdGUF9LRVJORUwsICZ3YWNvbS0+ZGF0YV9kbWEpOworCWlmICghd2Fjb20tPmRhdGEpIHsKKwkJa2ZyZWUod2Fjb20pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl3YWNvbS0+aXJxID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdhY29tLT5pcnEpIHsKKwkJdXNiX2J1ZmZlcl9mcmVlKGRldiwgMTAsIHdhY29tLT5kYXRhLCB3YWNvbS0+ZGF0YV9kbWEpOworCQlrZnJlZSh3YWNvbSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXdhY29tLT5mZWF0dXJlcyA9IHdhY29tX2ZlYXR1cmVzICsgKGlkIC0gd2Fjb21faWRzKTsKKworCXdhY29tLT5kZXYuZXZiaXRbMF0gfD0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKKwl3YWNvbS0+ZGV2LmFic2JpdFswXSB8PSBCSVQoQUJTX1gpIHwgQklUKEFCU19ZKSB8IEJJVChBQlNfUFJFU1NVUkUpOworCXdhY29tLT5kZXYua2V5Yml0W0xPTkcoQlROX0RJR0kpXSB8PSBCSVQoQlROX1RPT0xfUEVOKSB8IEJJVChCVE5fVE9VQ0gpIHwgQklUKEJUTl9TVFlMVVMpOworCisJc3dpdGNoICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUpIHsKKwkJY2FzZSAxOgorCQkJd2Fjb20tPmRldi5ldmJpdFswXSB8PSBCSVQoRVZfUkVMKTsKKwkJCXdhY29tLT5kZXYucmVsYml0WzBdIHw9IEJJVChSRUxfV0hFRUwpOworCQkJd2Fjb20tPmRldi5hYnNiaXRbMF0gfD0gQklUKEFCU19ESVNUQU5DRSk7CisJCQl3YWNvbS0+ZGV2LmtleWJpdFtMT05HKEJUTl9MRUZUKV0gfD0gQklUKEJUTl9MRUZUKSB8IEJJVChCVE5fUklHSFQpIHwgQklUKEJUTl9NSURETEUpOworIAkJCXdhY29tLT5kZXYua2V5Yml0W0xPTkcoQlROX0RJR0kpXSB8PSBCSVQoQlROX1RPT0xfUlVCQkVSKSB8IEJJVChCVE5fVE9PTF9NT1VTRSkgfCBCSVQoQlROX1NUWUxVUzIpOworCQkJYnJlYWs7CisKKwkJY2FzZSA0OiAvKiBuZXcgZnVuY3Rpb25zIGZvciBJbnR1b3MzICovCisJCQl3YWNvbS0+ZGV2LmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0gQklUKEJUTl9UT09MX0ZJTkdFUik7CisJCQl3YWNvbS0+ZGV2LmtleWJpdFtMT05HKEJUTl9MRUZUKV0gfD0gQklUKEJUTl8wKSB8IEJJVChCVE5fMSkgfCBCSVQoQlROXzIpIHwgQklUKEJUTl8zKSB8IEJJVChCVE5fNCkgfCBCSVQoQlROXzUpIHwgQklUKEJUTl82KSB8IEJJVChCVE5fNyk7CisJCQl3YWNvbS0+ZGV2LmFic2JpdFswXSB8PSBCSVQoQUJTX1JYKSB8IEJJVChBQlNfUlkpOworCQkJLyogZmFsbCB0aHJvdWdoICovCisKKwkJY2FzZSAyOgorCQkJd2Fjb20tPmRldi5ldmJpdFswXSB8PSBCSVQoRVZfTVNDKSB8IEJJVChFVl9SRUwpOworCQkJd2Fjb20tPmRldi5tc2NiaXRbMF0gfD0gQklUKE1TQ19TRVJJQUwpOworCQkJd2Fjb20tPmRldi5yZWxiaXRbMF0gfD0gQklUKFJFTF9XSEVFTCk7CisJCQl3YWNvbS0+ZGV2LmtleWJpdFtMT05HKEJUTl9MRUZUKV0gfD0gQklUKEJUTl9MRUZUKSB8IEJJVChCVE5fUklHSFQpIHwgQklUKEJUTl9NSURETEUpIHwgQklUKEJUTl9TSURFKSB8IEJJVChCVE5fRVhUUkEpOworIAkJCXdhY29tLT5kZXYua2V5Yml0W0xPTkcoQlROX0RJR0kpXSB8PSBCSVQoQlROX1RPT0xfUlVCQkVSKSB8IEJJVChCVE5fVE9PTF9NT1VTRSkJfCBCSVQoQlROX1RPT0xfQlJVU0gpCisJCQkJCQkJICB8IEJJVChCVE5fVE9PTF9QRU5DSUwpIHwgQklUKEJUTl9UT09MX0FJUkJSVVNIKSB8IEJJVChCVE5fVE9PTF9MRU5TKSB8IEJJVChCVE5fU1RZTFVTMik7CisJCQl3YWNvbS0+ZGV2LmFic2JpdFswXSB8PSBCSVQoQUJTX0RJU1RBTkNFKSB8IEJJVChBQlNfV0hFRUwpIHwgQklUKEFCU19USUxUX1gpIHwgQklUKEFCU19USUxUX1kpIHwgQklUKEFCU19SWikgfCBCSVQoQUJTX1RIUk9UVExFKTsKKwkJCWJyZWFrOworCisJCWNhc2UgMzoKKyAJCQl3YWNvbS0+ZGV2LmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0gQklUKEJUTl9TVFlMVVMyKSB8IEJJVChCVE5fVE9PTF9SVUJCRVIpOworCQkJYnJlYWs7CisJfQorCisJd2Fjb20tPmRldi5hYnNtYXhbQUJTX1hdID0gd2Fjb20tPmZlYXR1cmVzLT54X21heDsKKwl3YWNvbS0+ZGV2LmFic21heFtBQlNfWV0gPSB3YWNvbS0+ZmVhdHVyZXMtPnlfbWF4OworCXdhY29tLT5kZXYuYWJzbWF4W0FCU19QUkVTU1VSRV0gPSB3YWNvbS0+ZmVhdHVyZXMtPnByZXNzdXJlX21heDsKKwl3YWNvbS0+ZGV2LmFic21heFtBQlNfRElTVEFOQ0VdID0gd2Fjb20tPmZlYXR1cmVzLT5kaXN0YW5jZV9tYXg7CisJd2Fjb20tPmRldi5hYnNtYXhbQUJTX1RJTFRfWF0gPSAxMjc7CisJd2Fjb20tPmRldi5hYnNtYXhbQUJTX1RJTFRfWV0gPSAxMjc7CisJd2Fjb20tPmRldi5hYnNtYXhbQUJTX1dIRUVMXSA9IDEwMjM7CisKKwl3YWNvbS0+ZGV2LmFic21heFtBQlNfUlhdID0gNDA5NzsKKwl3YWNvbS0+ZGV2LmFic21heFtBQlNfUlldID0gNDA5NzsKKwl3YWNvbS0+ZGV2LmFic21pbltBQlNfUlpdID0gLTkwMDsKKwl3YWNvbS0+ZGV2LmFic21heFtBQlNfUlpdID0gODk5OworCXdhY29tLT5kZXYuYWJzbWluW0FCU19USFJPVFRMRV0gPSAtMTAyMzsKKwl3YWNvbS0+ZGV2LmFic21heFtBQlNfVEhST1RUTEVdID0gMTAyMzsKKworCXdhY29tLT5kZXYuYWJzZnV6eltBQlNfWF0gPSA0OworCXdhY29tLT5kZXYuYWJzZnV6eltBQlNfWV0gPSA0OworCisJd2Fjb20tPmRldi5wcml2YXRlID0gd2Fjb207CisJd2Fjb20tPmRldi5vcGVuID0gd2Fjb21fb3BlbjsKKwl3YWNvbS0+ZGV2LmNsb3NlID0gd2Fjb21fY2xvc2U7CisKKwl1c2JfbWFrZV9wYXRoKGRldiwgcGF0aCwgNjQpOworCXNwcmludGYod2Fjb20tPnBoeXMsICIlcy9pbnB1dDAiLCBwYXRoKTsKKworCXdhY29tLT5kZXYubmFtZSA9IHdhY29tLT5mZWF0dXJlcy0+bmFtZTsKKwl3YWNvbS0+ZGV2LnBoeXMgPSB3YWNvbS0+cGh5czsKKwl3YWNvbS0+ZGV2LmlkLmJ1c3R5cGUgPSBCVVNfVVNCOworCXdhY29tLT5kZXYuaWQudmVuZG9yID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwl3YWNvbS0+ZGV2LmlkLnByb2R1Y3QgPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwl3YWNvbS0+ZGV2LmlkLnZlcnNpb24gPSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKKwl3YWNvbS0+ZGV2LmRldiA9ICZpbnRmLT5kZXY7CisJd2Fjb20tPnVzYmRldiA9IGRldjsKKworCWVuZHBvaW50ID0gJmludGYtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFswXS5kZXNjOworCisJaWYgKHdhY29tLT5mZWF0dXJlcy0+cGt0bGVuID4gMTApCisJCUJVRygpOworCisJdXNiX2ZpbGxfaW50X3VyYih3YWNvbS0+aXJxLCBkZXYsCisJCQkgdXNiX3JjdmludHBpcGUoZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkgd2Fjb20tPmRhdGEsIHdhY29tLT5mZWF0dXJlcy0+cGt0bGVuLAorCQkJIHdhY29tLT5mZWF0dXJlcy0+aXJxLCB3YWNvbSwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisJd2Fjb20tPmlycS0+dHJhbnNmZXJfZG1hID0gd2Fjb20tPmRhdGFfZG1hOworCXdhY29tLT5pcnEtPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCisJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKCZ3YWNvbS0+ZGV2KTsKKworCS8qIGFzayB0aGUgdGFibGV0IHRvIHJlcG9ydCB0YWJsZXQgZGF0YSAqLworCXVzYl9zZXRfcmVwb3J0KGludGYsIDMsIDIsIHJlcF9kYXRhLCAyKTsKKwkvKiByZXBlYXQgb25jZSAobm90IHN1cmUgd2h5IHRoZSBmaXJzdCBjYWxsIG9mdGVuIGZhaWxzKSAqLworCXVzYl9zZXRfcmVwb3J0KGludGYsIDMsIDIsIHJlcF9kYXRhLCAyKTsKKworCXByaW50ayhLRVJOX0lORk8gImlucHV0OiAlcyBvbiAlc1xuIiwgd2Fjb20tPmZlYXR1cmVzLT5uYW1lLCBwYXRoKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50Ziwgd2Fjb20pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdhY29tX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHdhY29tICp3YWNvbSA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwlpZiAod2Fjb20pIHsKKwkJdXNiX2tpbGxfdXJiKHdhY29tLT5pcnEpOworCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSgmd2Fjb20tPmRldik7CisJCXVzYl9mcmVlX3VyYih3YWNvbS0+aXJxKTsKKwkJdXNiX2J1ZmZlcl9mcmVlKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIDEwLCB3YWNvbS0+ZGF0YSwgd2Fjb20tPmRhdGFfZG1hKTsKKwkJa2ZyZWUod2Fjb20pOworCX0KK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHdhY29tX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkid2Fjb20iLAorCS5wcm9iZSA9CXdhY29tX3Byb2JlLAorCS5kaXNjb25uZWN0ID0Jd2Fjb21fZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQl3YWNvbV9pZHMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3YWNvbV9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdCA9IHVzYl9yZWdpc3Rlcigmd2Fjb21fZHJpdmVyKTsKKwlpZiAocmVzdWx0ID09IDApCisJCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgd2Fjb21fZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ3YWNvbV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh3YWNvbV9pbml0KTsKK21vZHVsZV9leGl0KHdhY29tX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQveHBhZC5jIGIvZHJpdmVycy91c2IvaW5wdXQveHBhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NWVkYjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC94cGFkLmMKQEAgLTAsMCArMSwzNjIgQEAKKy8qCisgKiBYLUJveCBnYW1lcGFkIC0gdjAuMC41CisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyIE1hcmtvIEZyaWVkZW1hbm4gPG1mckBibXgtY2hlbW5pdHouZGU+CisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uOgorICogIC0gaW5mb3JtYXRpb24gZnJvbSAgICAgaHR0cDovL2V1Yy5qcC9wZXJpcGhzL3hib3gtY29udHJvbGxlci5qYS5odG1sCisgKiAgLSB0aGUgaUZvcmNlIGRyaXZlciAgICBkcml2ZXJzL2NoYXIvam95c3RpY2svaWZvcmNlLmMKKyAqICAtIHRoZSBza2VsZXRvbi1kcml2ZXIgIGRyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCisgKgorICogVGhhbmtzIHRvOgorICogIC0gSVRPIFRha2F5dWtpIGZvciBwcm92aWRpbmcgZXNzZW50aWFsIHhwYWQgaW5mb3JtYXRpb24gb24gaGlzIHdlYnNpdGUKKyAqICAtIFZvanRlY2ggUGF2bGlrICAgICAtIGlmb3JjZSBkcml2ZXIgLyBpbnB1dCBzdWJzeXN0ZW0KKyAqICAtIEdyZWcgS3JvYWgtSGFydG1hbiAtIHVzYi1za2VsZXRvbiBkcml2ZXIKKyAqCisgKiBUT0RPOgorICogIC0gZmluZSB0dW5lIGF4ZXMKKyAqICAtIGZpeCAiYW5hbG9nIiBidXR0b25zIChyZXBvcnRlZCBhcyBkaWdpdGFsIG5vdykKKyAqICAtIGdldCBydW1ibGUgd29ya2luZworICoKKyAqIEhpc3Rvcnk6CisgKgorICogMjAwMi0wNi0yNyAtIDAuMC4xIDogZmlyc3QgdmVyc2lvbiwganVzdCBzYWlkICJYQk9YIEhJRCBjb250cm9sbGVyIgorICoKKyAqIDIwMDItMDctMDIgLSAwLjAuMiA6IGJhc2ljIHdvcmtpbmcgdmVyc2lvbgorICogIC0gYWxsIGF4ZXMgYW5kIDkgb2YgdGhlIDEwIGJ1dHRvbnMgd29yayAoZ2VybWFuIEludGVyQWN0IGRldmljZSkKKyAqICAtIHRoZSBibGFjayBidXR0b24gZG9lcyBub3Qgd29yaworICoKKyAqIDIwMDItMDctMTQgLSAwLjAuMyA6IHJld29yayBieSBWb2p0ZWNoIFBhdmxpaworICogIC0gaW5kZW50YXRpb24gZml4ZXMKKyAqICAtIHVzYiArIGlucHV0IGluaXQgc2VxdWVuY2UgZml4ZXMKKyAqCisgKiAyMDAyLTA3LTE2IC0gMC4wLjQgOiBtaW5vciBjaGFuZ2VzLCBtZXJnZSB3aXRoIFZvanRlY2gncyB2MC4wLjMKKyAqICAtIHZlcmlmaWVkIHRoZSBsYWNrIG9mIEhJRCBhbmQgcmVwb3J0IGRlc2NyaXB0b3JzCisgKiAgLSB2ZXJpZmllZCB0aGF0IEFMTCBidXR0b25zIFdPUksKKyAqICAtIGZpeGVkIGQtcGFkIHRvIGF4ZXMgbWFwcGluZworICoKKyAqIDIwMDItMDctMTcgLSAwLjAuNSA6IHNpbXBsaWZpZWQgZC1wYWQgaGFuZGxpbmcKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjAuNSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTWFya28gRnJpZWRlbWFubiA8bWZyQGJteC1jaGVtbml0ei5kZT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJYLUJveCBwYWQgZHJpdmVyIgorCisjZGVmaW5lIFhQQURfUEtUX0xFTiAzMgorCitzdGF0aWMgc3RydWN0IHhwYWRfZGV2aWNlIHsKKwl1MTYgaWRWZW5kb3I7CisJdTE2IGlkUHJvZHVjdDsKKwljaGFyICpuYW1lOworfSB4cGFkX2RldmljZVtdID0geworCXsgMHgwNDVlLCAweDAyMDIsICJNaWNyb3NvZnQgWC1Cb3ggcGFkIChVUykiIH0sCisJeyAweDA0NWUsIDB4MDI4NSwgIk1pY3Jvc29mdCBYLUJveCBwYWQgKEphcGFuKSIgfSwKKwl7IDB4MDVmZCwgMHgxMDdhLCAiSW50ZXJBY3QgJ1Bvd2VyUGFkIFBybycgWC1Cb3ggcGFkIChHZXJtYW55KSIgfSwKKwl7IDB4MDAwMCwgMHgwMDAwLCAiWC1Cb3ggcGFkIiB9Cit9OworCitzdGF0aWMgc2lnbmVkIHNob3J0IHhwYWRfYnRuW10gPSB7CisJQlROX0EsIEJUTl9CLCBCVE5fQywgQlROX1gsIEJUTl9ZLCBCVE5fWiwJLyogImFuYWxvZyIgYnV0dG9ucyAqLworCUJUTl9TVEFSVCwgQlROX0JBQ0ssIEJUTl9USFVNQkwsIEJUTl9USFVNQlIsCS8qIHN0YXJ0L2JhY2svc3RpY2tzICovCisJLTEJCQkJCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworc3RhdGljIHNpZ25lZCBzaG9ydCB4cGFkX2Fic1tdID0geworCUFCU19YLCBBQlNfWSwJCS8qIGxlZnQgc3RpY2sgKi8KKwlBQlNfUlgsIEFCU19SWSwJCS8qIHJpZ2h0IHN0aWNrICovCisJQUJTX1osIEFCU19SWiwJCS8qIHRyaWdnZXJzIGxlZnQvcmlnaHQgKi8KKwlBQlNfSEFUMFgsIEFCU19IQVQwWSwJLyogZGlnaXRhbCBwYWQgKi8KKwktMQkJCS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgeHBhZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTygnWCcsICdCJywgMCkgfSwJLyogWC1Cb3ggVVNCLUlGIG5vdCBhcHByb3ZlZCBjbGFzcyAqLworCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCB4cGFkX3RhYmxlKTsKKworc3RydWN0IHVzYl94cGFkIHsKKwlzdHJ1Y3QgaW5wdXRfZGV2IGRldjsJCQkvKiBpbnB1dCBkZXZpY2UgaW50ZXJmYWNlICovCisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CQkvKiB1c2IgZGV2aWNlICovCisJCisJc3RydWN0IHVyYiAqaXJxX2luOwkJCS8qIHVyYiBmb3IgaW50ZXJydXB0IGluIHJlcG9ydCAqLworCXVuc2lnbmVkIGNoYXIgKmlkYXRhOwkJCS8qIGlucHV0IGRhdGEgKi8KKwlkbWFfYWRkcl90IGlkYXRhX2RtYTsKKwkKKwljaGFyIHBoeXNbNjVdOwkJCQkvKiBwaHlzaWNhbCBkZXZpY2UgcGF0aCAqLworCWludCBvcGVuX2NvdW50OwkJCQkvKiByZWZlcmVuY2UgY291bnQgKi8KK307CisKKy8qCisgKgl4cGFkX3Byb2Nlc3NfcGFja2V0CisgKgorICoJQ29tcGxldGVzIGEgcmVxdWVzdCBieSBjb252ZXJ0aW5nIHRoZSBkYXRhIGludG8gZXZlbnRzIGZvciB0aGUKKyAqCWlucHV0IHN1YnN5c3RlbS4KKyAqCisgKglUaGUgdXNlZCByZXBvcnQgZGVzY3JpcHRvciB3YXMgdGFrZW4gZnJvbSBJVE8gVGFrYXl1a2lzIHdlYnNpdGU6CisgKgkgaHR0cDovL2V1Yy5qcC9wZXJpcGhzL3hib3gtY29udHJvbGxlci5qYS5odG1sCisgKi8KKworc3RhdGljIHZvaWQgeHBhZF9wcm9jZXNzX3BhY2tldChzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQsIHUxNiBjbWQsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9ICZ4cGFkLT5kZXY7CisKKwlpbnB1dF9yZWdzKGRldiwgcmVncyk7CisJCisJLyogbGVmdCBzdGljayAqLworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgKF9fczE2KSAoKChfX3MxNilkYXRhWzEzXSA8PCA4KSB8IGRhdGFbMTJdKSk7CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCAoX19zMTYpICgoKF9fczE2KWRhdGFbMTVdIDw8IDgpIHwgZGF0YVsxNF0pKTsKKwkKKwkvKiByaWdodCBzdGljayAqLworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlgsIChfX3MxNikgKCgoX19zMTYpZGF0YVsxN10gPDwgOCkgfCBkYXRhWzE2XSkpOworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfUlksIChfX3MxNikgKCgoX19zMTYpZGF0YVsxOV0gPDwgOCkgfCBkYXRhWzE4XSkpOworCQorCS8qIHRyaWdnZXJzIGxlZnQvcmlnaHQgKi8KKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1osIGRhdGFbMTBdKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1JaLCBkYXRhWzExXSk7CisJCisJLyogZGlnaXRhbCBwYWQgKi8KKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX0hBVDBYLCAhIShkYXRhWzJdICYgMHgwOCkgLSAhIShkYXRhWzJdICYgMHgwNCkpOworCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfSEFUMFksICEhKGRhdGFbMl0gJiAweDAyKSAtICEhKGRhdGFbMl0gJiAweDAxKSk7CisJCisJLyogc3RhcnQvYmFjayBidXR0b25zIGFuZCBzdGljayBwcmVzcyBsZWZ0L3JpZ2h0ICovCisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVEFSVCwgKGRhdGFbMl0gJiAweDEwKSA+PiA0KTsKKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0JBQ0ssIChkYXRhWzJdICYgMHgyMCkgPj4gNSk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9USFVNQkwsIChkYXRhWzJdICYgMHg0MCkgPj4gNik7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9USFVNQlIsIGRhdGFbMl0gPj4gNyk7CisJCisJLyogImFuYWxvZyIgYnV0dG9ucyBBLCBCLCBYLCBZICovCisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9BLCBkYXRhWzRdKTsKKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0IsIGRhdGFbNV0pOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fWCwgZGF0YVs2XSk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9ZLCBkYXRhWzddKTsKKwkKKwkvKiAiYW5hbG9nIiBidXR0b25zIGJsYWNrLCB3aGl0ZSAqLworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fQywgZGF0YVs4XSk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9aLCBkYXRhWzldKTsKKworCWlucHV0X3N5bmMoZGV2KTsKK30KKworc3RhdGljIHZvaWQgeHBhZF9pcnFfaW4oc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQgPSB1cmItPmNvbnRleHQ7CisJaW50IHJldHZhbDsKKwkKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKwkKKwl4cGFkX3Byb2Nlc3NfcGFja2V0KHhwYWQsIDAsIHhwYWQtPmlkYXRhLCByZWdzKTsKKworZXhpdDoKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0dmFsKQorCQllcnIgKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCSAgICAgX19GVU5DVElPTl9fLCByZXR2YWwpOworfQorCitzdGF0aWMgaW50IHhwYWRfb3BlbiAoc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXN0cnVjdCB1c2JfeHBhZCAqeHBhZCA9IGRldi0+cHJpdmF0ZTsKKwkKKwlpZiAoeHBhZC0+b3Blbl9jb3VudCsrKQorCQlyZXR1cm4gMDsKKwkKKwl4cGFkLT5pcnFfaW4tPmRldiA9IHhwYWQtPnVkZXY7CisJaWYgKHVzYl9zdWJtaXRfdXJiKHhwYWQtPmlycV9pbiwgR0ZQX0tFUk5FTCkpIHsKKwkJeHBhZC0+b3Blbl9jb3VudC0tOworCQlyZXR1cm4gLUVJTzsKKwl9CisJCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHhwYWRfY2xvc2UgKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX3hwYWQgKnhwYWQgPSBkZXYtPnByaXZhdGU7CisJCisJaWYgKCEtLXhwYWQtPm9wZW5fY291bnQpCisJCXVzYl9raWxsX3VyYih4cGFkLT5pcnFfaW4pOworfQorCitzdGF0aWMgaW50IHhwYWRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCXN0cnVjdCB1c2JfeHBhZCAqeHBhZCA9IE5VTEw7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcF9pcnFfaW47CisJY2hhciBwYXRoWzY0XTsKKwlpbnQgaTsKKwkKKwlmb3IgKGkgPSAwOyB4cGFkX2RldmljZVtpXS5pZFZlbmRvcjsgaSsrKSB7CisJCWlmICgobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0geHBhZF9kZXZpY2VbaV0uaWRWZW5kb3IpICYmCisJCSAgICAobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IHhwYWRfZGV2aWNlW2ldLmlkUHJvZHVjdCkpCisJCQlicmVhazsKKwl9CisJCisJaWYgKCh4cGFkID0ga21hbGxvYyAoc2l6ZW9mKHN0cnVjdCB1c2JfeHBhZCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJCWVycigiY2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IHBhZCIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KHhwYWQsIDAsIHNpemVvZihzdHJ1Y3QgdXNiX3hwYWQpKTsKKwkKKwl4cGFkLT5pZGF0YSA9IHVzYl9idWZmZXJfYWxsb2ModWRldiwgWFBBRF9QS1RfTEVOLAorCQkJCSAgICAgICBTTEFCX0FUT01JQywgJnhwYWQtPmlkYXRhX2RtYSk7CisJaWYgKCF4cGFkLT5pZGF0YSkgeworCQlrZnJlZSh4cGFkKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJeHBhZC0+aXJxX2luID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgaWYgKCF4cGFkLT5pcnFfaW4pIHsKKwkJZXJyKCJjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgcGFkIGlycSB1cmIiKTsKKwkJdXNiX2J1ZmZlcl9mcmVlKHVkZXYsIFhQQURfUEtUX0xFTiwgeHBhZC0+aWRhdGEsIHhwYWQtPmlkYXRhX2RtYSk7CisgICAgICAgICAgICAgICAga2ZyZWUoeHBhZCk7CisJCXJldHVybiAtRU5PTUVNOworICAgICAgICB9CisJCisJZXBfaXJxX2luID0gJmludGYtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFswXS5kZXNjOworCQorCXVzYl9maWxsX2ludF91cmIoeHBhZC0+aXJxX2luLCB1ZGV2LAorCQkJIHVzYl9yY3ZpbnRwaXBlKHVkZXYsIGVwX2lycV9pbi0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkgeHBhZC0+aWRhdGEsIFhQQURfUEtUX0xFTiwgeHBhZF9pcnFfaW4sCisJCQkgeHBhZCwgZXBfaXJxX2luLT5iSW50ZXJ2YWwpOworCXhwYWQtPmlycV9pbi0+dHJhbnNmZXJfZG1hID0geHBhZC0+aWRhdGFfZG1hOworCXhwYWQtPmlycV9pbi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJCisJeHBhZC0+dWRldiA9IHVkZXY7CisJCisJeHBhZC0+ZGV2LmlkLmJ1c3R5cGUgPSBCVVNfVVNCOworCXhwYWQtPmRldi5pZC52ZW5kb3IgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwl4cGFkLT5kZXYuaWQucHJvZHVjdCA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwl4cGFkLT5kZXYuaWQudmVyc2lvbiA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKKwl4cGFkLT5kZXYuZGV2ID0gJmludGYtPmRldjsKKwl4cGFkLT5kZXYucHJpdmF0ZSA9IHhwYWQ7CisJeHBhZC0+ZGV2Lm5hbWUgPSB4cGFkX2RldmljZVtpXS5uYW1lOworCXhwYWQtPmRldi5waHlzID0geHBhZC0+cGh5czsKKwl4cGFkLT5kZXYub3BlbiA9IHhwYWRfb3BlbjsKKwl4cGFkLT5kZXYuY2xvc2UgPSB4cGFkX2Nsb3NlOworCQorCXVzYl9tYWtlX3BhdGgodWRldiwgcGF0aCwgNjQpOworCXNucHJpbnRmKHhwYWQtPnBoeXMsIDY0LCAgIiVzL2lucHV0MCIsIHBhdGgpOworCQorCXhwYWQtPmRldi5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUyk7CisJCisJZm9yIChpID0gMDsgeHBhZF9idG5baV0gPj0gMDsgaSsrKQorCQlzZXRfYml0KHhwYWRfYnRuW2ldLCB4cGFkLT5kZXYua2V5Yml0KTsKKwkKKwlmb3IgKGkgPSAwOyB4cGFkX2Fic1tpXSA+PSAwOyBpKyspIHsKKwkJCisJCXNpZ25lZCBzaG9ydCB0ID0geHBhZF9hYnNbaV07CisJCQorCQlzZXRfYml0KHQsIHhwYWQtPmRldi5hYnNiaXQpOworCQkKKwkJc3dpdGNoICh0KSB7CisJCQljYXNlIEFCU19YOgorCQkJY2FzZSBBQlNfWToKKwkJCWNhc2UgQUJTX1JYOgorCQkJY2FzZSBBQlNfUlk6CS8qIHRoZSB0d28gc3RpY2tzICovCisJCQkJeHBhZC0+ZGV2LmFic21heFt0XSA9ICAzMjc2NzsKKwkJCQl4cGFkLT5kZXYuYWJzbWluW3RdID0gLTMyNzY4OworCQkJCXhwYWQtPmRldi5hYnNmbGF0W3RdID0gMTI4OworCQkJCXhwYWQtPmRldi5hYnNmdXp6W3RdID0gMTY7CisJCQkJYnJlYWs7CisJCQljYXNlIEFCU19aOgorCQkJY2FzZSBBQlNfUlo6CS8qIHRoZSB0cmlnZ2VycyAqLworCQkJCXhwYWQtPmRldi5hYnNtYXhbdF0gPSAyNTU7CisJCQkJeHBhZC0+ZGV2LmFic21pblt0XSA9IDA7CisJCQkJYnJlYWs7CisJCQljYXNlIEFCU19IQVQwWDoKKwkJCWNhc2UgQUJTX0hBVDBZOgkvKiB0aGUgZC1wYWQgKi8KKwkJCQl4cGFkLT5kZXYuYWJzbWF4W3RdID0gIDE7CisJCQkJeHBhZC0+ZGV2LmFic21pblt0XSA9IC0xOworCQkJCWJyZWFrOworCQl9CisJfQorCQorCWlucHV0X3JlZ2lzdGVyX2RldmljZSgmeHBhZC0+ZGV2KTsKKwkKKwlwcmludGsoS0VSTl9JTkZPICJpbnB1dDogJXMgb24gJXMiLCB4cGFkLT5kZXYubmFtZSwgcGF0aCk7CisJCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCB4cGFkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgeHBhZF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfeHBhZCAqeHBhZCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCQorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJaWYgKHhwYWQpIHsKKwkJdXNiX2tpbGxfdXJiKHhwYWQtPmlycV9pbik7CisJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKCZ4cGFkLT5kZXYpOworCQl1c2JfZnJlZV91cmIoeHBhZC0+aXJxX2luKTsKKwkJdXNiX2J1ZmZlcl9mcmVlKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIFhQQURfUEtUX0xFTiwgeHBhZC0+aWRhdGEsIHhwYWQtPmlkYXRhX2RtYSk7CisJCWtmcmVlKHhwYWQpOworCX0KK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHhwYWRfZHJpdmVyID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJPSAieHBhZCIsCisJLnByb2JlCQk9IHhwYWRfcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSB4cGFkX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlCT0geHBhZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl94cGFkX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZ4cGFkX2RyaXZlcik7CisJaWYgKHJlc3VsdCA9PSAwKQorCQlpbmZvKERSSVZFUl9ERVNDICI6IiBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYl94cGFkX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmeHBhZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1c2JfeHBhZF9pbml0KTsKK21vZHVsZV9leGl0KHVzYl94cGFkX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL0tjb25maWcgYi9kcml2ZXJzL3VzYi9tZWRpYS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMjMyZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9LY29uZmlnCkBAIC0wLDAgKzEsMjEzIEBACisjCisjIFVTQiBNdWx0aW1lZGlhIGRldmljZSBjb25maWd1cmF0aW9uCisjCitjb21tZW50ICJVU0IgTXVsdGltZWRpYSBkZXZpY2VzIgorCWRlcGVuZHMgb24gVVNCCisKK2NvbmZpZyBVU0JfREFCVVNCCisJdHJpc3RhdGUgIkRBQlVTQiBkcml2ZXIiCisJZGVwZW5kcyBvbiBVU0IKKwktLS1oZWxwLS0tCisJICBBIERpZ2l0YWwgQXVkaW8gQnJvYWRjYXN0aW5nIChEQUIpIFJlY2VpdmVyIGZvciBVU0IgYW5kIExpbnV4CisJICBicm91Z2h0IHRvIHlvdSBieSB0aGUgREFCLVRlYW0KKwkgIDxodHRwOi8vd3d3Ym9kZS5jcy50dW0uZWR1L1Bhci9hcmNoL2RhYi8+LiAgVGhpcyBkcml2ZXIgY2FuIGJlIHRha2VuCisJICBhcyBhbiBleGFtcGxlIGZvciBVUkItYmFzZWQgYnVsaywgY29udHJvbCwgYW5kIGlzb2Nocm9ub3VzCisJICB0cmFuc2FjdGlvbnMuIFVSQidzIGFyZSBleHBsYWluZWQgaW4KKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL1VSQi50eHQ+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBkYWJ1c2IuCisKK2NvbW1lbnQgIlZpZGVvNExpbnV4IHN1cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTXVsdGltZWRpYSBkZXZpY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVY9bgorCitjb25maWcgVVNCX1ZJQ0FNCisJdHJpc3RhdGUgIlVTQiAzY29tIEhvbWVDb25uZWN0IChha2EgdmljYW0pIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgM2NvbSBob21lY29ubmVjdCBjYW1lcmEgKHZpY2FtKS4KKworCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gWW91IG11c3Qgc2F5IFkgb3IgTSB0bworCSAgIlZpZGVvIEZvciBMaW51eCIgKHVuZGVyIE11bHRpbWVkaWEgRGV2aWNlcykgdG8gdXNlIHRoaXMgZHJpdmVyLgorCSAgSW5mb3JtYXRpb24gb24gdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZAorCSAgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZpY2FtLgorCitjb25maWcgVVNCX0RTQlIKKwl0cmlzdGF0ZSAiRC1MaW5rIFVTQiBGTSByYWRpbyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFViAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdGhpcyB0eXBlIG9mIHJhZGlvIHRvIHlvdXIKKwkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIE5vdGUgdGhhdCB0aGUgYXVkaW8gaXMgbm90IGRpZ2l0YWwsIGFuZAorCSAgeW91IG11c3QgY29ubmVjdCB0aGUgbGluZSBvdXQgY29ubmVjdG9yIHRvIGEgc291bmQgY2FyZCBvciBhCisJICBzZXQgb2Ygc3BlYWtlcnMuCisKKwkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuICBZb3UgbXVzdCBlbmFibGUKKwkgIChZIG9yIE0gaW4gY29uZmlnKSBWaWRlbyBGb3IgTGludXggKHVuZGVyIENoYXJhY3RlciBEZXZpY2VzKQorCSAgdG8gdXNlIHRoaXMgZHJpdmVyLiAgSW5mb3JtYXRpb24gb24gdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvCisJICAidjRsIiBwcm9ncmFtcyBtYXkgYmUgZm91bmQgYXQKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWw+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBkc2JyMTAwLgorCitjb25maWcgVVNCX0lCTUNBTQorCXRyaXN0YXRlICJVU0IgSUJNIChYaXJsaW5rKSBDLWl0IENhbWVyYSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIElCTSAiQy1JdCIgY2FtZXJhLCBhbHNvIGtub3duIGFzCisJICAiWGlybGluayBQQyBDYW1lcmEiIHRvIHlvdXIgY29tcHV0ZXIncyBVU0IgcG9ydC4gIEZvciBtb3JlCisJICBpbmZvcm1hdGlvbiwgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9pYm1jYW0udHh0Pi4KKworCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gIFlvdSBtdXN0IGVuYWJsZQorCSAgKFkgb3IgTSBpbiBjb25maWcpIFZpZGVvIEZvciBMaW51eCAodW5kZXIgQ2hhcmFjdGVyIERldmljZXMpCisJICB0byB1c2UgdGhpcyBkcml2ZXIuICBJbmZvcm1hdGlvbiBvbiB0aGlzIEFQSSBhbmQgcG9pbnRlcnMgdG8KKwkgICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZCBhdAorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlibWNhbS4KKworCSAgVGhpcyBjYW1lcmEgaGFzIHNldmVyYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHdoaWNoCisJICBjYW4gYmUgc3BlY2lmaWVkIHdoZW4geW91IGxvYWQgdGhlIG1vZHVsZS4gUmVhZAorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvaWJtY2FtLnR4dD4gdG8gbGVhcm4gbW9yZS4KKworY29uZmlnIFVTQl9LT05JQ0FXQworCXRyaXN0YXRlICJVU0IgS29uaWNhIFdlYmNhbSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3Igd2ViY2FtcyBiYXNlZCBvbiBhIEtvbmljYQorCSAgY2hpcHNldC4gVGhpcyBpcyBrbm93biB0byB3b3JrIHdpdGggdGhlIEludGVsIFlDNzYgd2ViY2FtLgorCisJICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiAgWW91IG11c3QgZW5hYmxlCisJICAoWSBvciBNIGluIGNvbmZpZykgVmlkZW8gRm9yIExpbnV4ICh1bmRlciBDaGFyYWN0ZXIgRGV2aWNlcykKKwkgIHRvIHVzZSB0aGlzIGRyaXZlci4gIEluZm9ybWF0aW9uIG9uIHRoaXMgQVBJIGFuZCBwb2ludGVycyB0bworCSAgInY0bCIgcHJvZ3JhbXMgbWF5IGJlIGZvdW5kIGF0CisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sPi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQga29uaWNhd2MuCisKK2NvbmZpZyBVU0JfT1Y1MTEKKwl0cmlzdGF0ZSAiVVNCIE9WNTExIENhbWVyYSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0aGlzIHR5cGUgb2YgY2FtZXJhIHRvIHlvdXIKKwkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9vdjUxMS50eHQ+IGZvciBtb3JlCisJICBpbmZvcm1hdGlvbiBhbmQgZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgY2FtZXJhcy4KKworCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gWW91IG11c3Qgc2F5IFkgb3IgTSB0bworCSAgIlZpZGVvIEZvciBMaW51eCIgKHVuZGVyIENoYXJhY3RlciBEZXZpY2VzKSB0byB1c2UgdGhpcyBkcml2ZXIuCisJICBJbmZvcm1hdGlvbiBvbiB0aGlzIEFQSSBhbmQgcG9pbnRlcnMgdG8gInY0bCIgcHJvZ3JhbXMgbWF5IGJlIGZvdW5kCisJICBhdCA8ZmlsZTpEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sPi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgb3Y1MTEuCisKK2NvbmZpZyBVU0JfU0U0MDEKKwl0cmlzdGF0ZSAiVVNCIFNFNDAxIENhbWVyYSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0aGlzIHR5cGUgb2YgY2FtZXJhIHRvIHlvdXIKKwkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9zZTQwMS50eHQ+IGZvciBtb3JlCisJICBpbmZvcm1hdGlvbiBhbmQgZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgY2FtZXJhcy4KKworCSAgVGhpcyBkcml2ZXIgdXNlcyB0aGUgVmlkZW8gRm9yIExpbnV4IEFQSS4gWW91IG11c3Qgc2F5IFkgb3IgTSB0bworCSAgIlZpZGVvIEZvciBMaW51eCIgKHVuZGVyIE11bHRpbWVkaWEgRGV2aWNlcykgdG8gdXNlIHRoaXMgZHJpdmVyLgorCSAgSW5mb3JtYXRpb24gb24gdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZAorCSAgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNlNDAxLgorCitjb25maWcgVVNCX1NOOUMxMDIKKwl0cmlzdGF0ZSAiVVNCIFNOOUMxMHggUEMgQ2FtZXJhIENvbnRyb2xsZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIGNhbWVyYXMgYmFzZWQgb24gU09OaVggU045QzEwMSwKKwkgIFNOOUMxMDIgb3IgU045QzEwMyBQQyBDYW1lcmEgQ29udHJvbGxlcnMuCisKKwkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9zbjljMTAyLnR4dD4gZm9yIG1vcmUgaW5mb3JtYXRpb25zLgorCisJICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggQVBJLiBZb3UgbXVzdCBzYXkgWSBvciBNIHRvCisJICAiVmlkZW8gRm9yIExpbnV4IiB0byB1c2UgdGhpcyBkcml2ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNuOWMxMDIuCisKK2NvbmZpZyBVU0JfU1RWNjgwCisJdHJpc3RhdGUgIlVTQiBTVFY2ODAgKFBlbmNhbSkgQ2FtZXJhIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRoaXMgdHlwZSBvZiBjYW1lcmEgdG8geW91cgorCSAgY29tcHV0ZXIncyBVU0IgcG9ydC4gVGhpcyBpbmNsdWRlcyB0aGUgUGVuY2FtIGxpbmUgb2YgY2FtZXJhcy4KKwkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi9zdHY2ODAudHh0PiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZm9yCisJICBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGNhbWVyYXMuCisKKwkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KKwkgICJWaWRlbyBGb3IgTGludXgiICh1bmRlciBNdWx0aW1lZGlhIERldmljZXMpIHRvIHVzZSB0aGlzIGRyaXZlci4KKwkgIEluZm9ybWF0aW9uIG9uIHRoaXMgQVBJIGFuZCBwb2ludGVycyB0byAidjRsIiBwcm9ncmFtcyBtYXkgYmUgZm91bmQKKwkgIGF0IDxmaWxlOkRvY3VtZW50YXRpb24vdmlkZW80bGludXgvQVBJLmh0bWw+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzdHY2ODAuCisKK2NvbmZpZyBVU0JfVzk5NjhDRgorCXRyaXN0YXRlICJVU0IgVzk5Nls4N11DRiBKUEVHIER1YWwgTW9kZSBDYW1lcmEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYgJiYgSTJDICYmIFZJREVPX09WQ0FNQ0hJUAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiBPVjY4MSBvcgorCSAgV2luYm9uZCBXOTk2N0NGL1c5OTY4Q0YgSlBFRyBVU0IgRHVhbCBNb2RlIENhbWVyYSBDaGlwcy4KKwkKKwkgIFRoaXMgZHJpdmVyIGhhcyBhbiBvcHRpb25hbCBwbHVnaW4sIHdoaWNoIGlzIGRpc3RyaWJ1dGVkIGFzIGEKKwkgIHNlcGFyYXRlIG1vZHVsZSBvbmx5IChyZWxlYXNlZCB1bmRlciBHUEwpLiBJdCBhbGxvd3MgdG8gdXNlIGhpZ2hlciAKKwkgIHJlc29sdXRpb25zIGFuZCBmcmFtZXJhdGVzLCBidXQgY2Fubm90IGJlIGluY2x1ZGVkIGluIHRoZSBvZmZpY2lhbCAKKwkgIExpbnV4IGtlcm5lbCBmb3IgcGVyZm9ybWFuY2UgcHVycG9zZXMuCisKKwkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi93OTk2OGNmLnR4dD4gZm9yIG1vcmUgaW5mb3JtYXRpb25zLgorCisJICBUaGlzIGRyaXZlciB1c2VzIHRoZSBWaWRlbyBGb3IgTGludXggYW5kIHRoZSBJMkMgQVBJcy4gSXQgbmVlZHMgdGhlCisJICBPbW5pVmlzaW9uIENhbWVyYSBDaGlwIHN1cHBvcnQgYXMgd2VsbC4gWW91IG11c3Qgc2F5IFkgb3IgTSB0bworCSAgIlZpZGVvIEZvciBMaW51eCIsICJJMkMgU3VwcG9ydCIgYW5kICJPbW5pVmlzaW9uIENhbWVyYSBDaGlwIAorCSAgc3VwcG9ydCIgdG8gdXNlIHRoaXMgZHJpdmVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3OTk2OGNmLgorCitjb25maWcgVVNCX1BXQworCXRyaXN0YXRlICJVU0IgUGhpbGlwcyBDYW1lcmFzIgorCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX0RFVgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIG9yIE0gaGVyZSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZXNlIFBoaWxpcHMgJiBPRU0KKyAgICAgICAgICB3ZWJjYW1zOgorICAgICAgICAgICAqIFBoaWxpcHMgUENBNjQ1LCBQQ0E2NDYKKyAgICAgICAgICAgKiBQaGlsaXBzIFBDVkM2NzUsIFBDVkM2ODAsIFBDVkM2OTAKKyAgICAgICAgICAgKiBQaGlsaXBzIFBDVkM3MjAvNDAsIFBDVkM3MzAsIFBDVkM3NDAsIFBDVkM3NTAKKwkgICAqIEFza2V5IFZDMDEwCisJICAgKiBMb2dpdGVjaCBRdWlja0NhbSBQcm8gMzAwMCwgNDAwMCwgJ1pvb20nLCAnTm90ZWJvb2sgUHJvJyAKKyAgICAgICAgICAgICBhbmQgJ09yYml0Jy8nU3BoZXJlJworICAgICAgICAgICAqIFNhbXN1bmcgTVBDLUMxMCwgTVBDLUMzMAorCSAgICogQ3JlYXRpdmUgV2ViY2FtIDUsIFBybyBFeAorCSAgICogU09URUMgQWZpbmEgRXllCisJICAgKiBWaXNpb25pdGUgVkNTLVVDMzAwLCBWQ1MtVU0xMDAKKwkgICAKKwkgIFRoZSBQQ0E2MzUsIFBDVkM2NjUgYW5kIFBDVkM3MjAvMjAgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIKKwkgIGFuZCBuZXZlciB3aWxsIGJlLCBidXQgdGhlIDY2NSBhbmQgNzIwLzIwIGFyZSBzdXBwb3J0ZWQgYnkgb3RoZXIgCisJICBkcml2ZXJzLgorCisJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvcGhpbGlwcy50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZAorCSAgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucy4KKworCSAgVGhlIGJ1aWx0LWluIG1pY3JvcGhvbmUgaXMgZW5hYmxlZCBieSBzZWxlY3RpbmcgVVNCIEF1ZGlvIHN1cHBvcnQuCisKKwkgIFRoaXMgZHJpdmVyIHVzZXMgdGhlIFZpZGVvIEZvciBMaW51eCBBUEkuIFlvdSBtdXN0IHNheSBZIG9yIE0gdG8KKwkgICJWaWRlbyBGb3IgTGludXgiICh1bmRlciBDaGFyYWN0ZXIgRGV2aWNlcykgdG8gdXNlIHRoaXMgZHJpdmVyLgorCSAgSW5mb3JtYXRpb24gb24gdGhpcyBBUEkgYW5kIHBvaW50ZXJzIHRvICJ2NGwiIHByb2dyYW1zIG1heSBiZSBmb3VuZAorCSAgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9BUEkuaHRtbD4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHB3Yy4KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL21lZGlhL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNzZkZjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9NYWtlZmlsZQpAQCAtMCwwICsxLDE3IEBACisjCisjIE1ha2VmaWxlIGZvciBVU0IgTWVkaWEgZHJpdmVycworIworCitzbjljMTAyLW9ianMJOj0gc245YzEwMl9jb3JlLm8gc245YzEwMl9odjcxMzFkLm8gc245YzEwMl9taTAzNDMubyBzbjljMTAyX3BhczEwNmIubyBzbjljMTAyX3BhczIwMmJjYi5vIHNuOWMxMDJfdGFzNTExMGMxYi5vIHNuOWMxMDJfdGFzNTEzMGQxYi5vCisKK29iai0kKENPTkZJR19VU0JfREFCVVNCKQkrPSBkYWJ1c2Iubworb2JqLSQoQ09ORklHX1VTQl9EU0JSKQkJKz0gZHNicjEwMC5vCitvYmotJChDT05GSUdfVVNCX0lCTUNBTSkJKz0gaWJtY2FtLm8gdXNidmlkZW8ubyB1bHRyYWNhbS5vCitvYmotJChDT05GSUdfVVNCX0tPTklDQVdDKQkrPSBrb25pY2F3Yy5vIHVzYnZpZGVvLm8KK29iai0kKENPTkZJR19VU0JfT1Y1MTEpCQkrPSBvdjUxMS5vCitvYmotJChDT05GSUdfVVNCX1NFNDAxKQkJKz0gc2U0MDEubworb2JqLSQoQ09ORklHX1VTQl9TTjlDMTAyKQkrPSBzbjljMTAyLm8KK29iai0kKENPTkZJR19VU0JfU1RWNjgwKQkrPSBzdHY2ODAubworb2JqLSQoQ09ORklHX1VTQl9WSUNBTSkJCSs9IHZpY2FtLm8gdXNidmlkZW8ubworb2JqLSQoQ09ORklHX1VTQl9XOTk2OENGKQkrPSB3OTk2OGNmLm8KK29iai0kKENPTkZJR19VU0JfUFdDKSAgICAgICAgICAgKz0gcHdjLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvZGFiZmlybXdhcmUuaCBiL2RyaXZlcnMvdXNiL21lZGlhL2RhYmZpcm13YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE0ZDgwMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL2RhYmZpcm13YXJlLmgKQEAgLTAsMCArMSwxNDA4IEBACisvKgorICogZGFiZGF0YS5oIC0gZGFiIHVzYiBmaXJtd2FyZSBhbmQgYml0c3RyZWFtIGRhdGEKKyAqLworCitzdGF0aWMgSU5URUxfSEVYX1JFQ09SRCBmaXJtd2FyZVtdID0geworCit7ICAyLCAweDAwMDAsIDAsIHsweDIxLDB4NTd9IH0sCit7ICAzLCAweDAwMDMsIDAsIHsweDAyLDB4MDEsMHg2Nn0gfSwKK3sgIDMsIDB4MDAwYiwgMCwgezB4MDIsMHgwMSwweDY2fSB9LAoreyAgMywgMHgwMDEzLCAwLCB7MHgwMiwweDAxLDB4NjZ9IH0sCit7ICAzLCAweDAwMWIsIDAsIHsweDAyLDB4MDEsMHg2Nn0gfSwKK3sgIDMsIDB4MDAyMywgMCwgezB4MDIsMHgwMSwweDY2fSB9LAoreyAgMywgMHgwMDJiLCAwLCB7MHgwMiwweDAxLDB4NjZ9IH0sCit7ICAzLCAweDAwMzMsIDAsIHsweDAyLDB4MDMsMHgwZn0gfSwKK3sgIDMsIDB4MDAzYiwgMCwgezB4MDIsMHgwMSwweDY2fSB9LAoreyAgMywgMHgwMDQzLCAwLCB7MHgwMiwweDAxLDB4MDB9IH0sCit7ICAzLCAweDAwNGIsIDAsIHsweDAyLDB4MDEsMHg2Nn0gfSwKK3sgIDMsIDB4MDA1MywgMCwgezB4MDIsMHgwMSwweDY2fSB9LAoreyAgMywgMHgwMDViLCAwLCB7MHgwMiwweDA0LDB4YmR9IH0sCit7ICAzLCAweDAwNjMsIDAsIHsweDAyLDB4MDEsMHg2N30gfSwKK3sgIDMsIDB4MDEwMCwgMCwgezB4MDIsMHgwYywweDVhfSB9LAoreyAgMywgMHgwMTA0LCAwLCB7MHgwMiwweDAxLDB4ZWR9IH0sCit7ICAzLCAweDAxMDgsIDAsIHsweDAyLDB4MDIsMHg1MX0gfSwKK3sgIDMsIDB4MDEwYywgMCwgezB4MDIsMHgwMiwweDdjfSB9LAoreyAgMywgMHgwMTEwLCAwLCB7MHgwMiwweDAyLDB4ZTR9IH0sCit7ICAxLCAweDAxMTQsIDAsIHsweDMyfSB9LAoreyAgMSwgMHgwMTE4LCAwLCB7MHgzMn0gfSwKK3sgIDMsIDB4MDExYywgMCwgezB4MDIsMHgwNSwweGZkfSB9LAoreyAgMywgMHgwMTIwLCAwLCB7MHgwMiwweDAwLDB4MDB9IH0sCit7ICAzLCAweDAxMjQsIDAsIHsweDAyLDB4MDAsMHgwMH0gfSwKK3sgIDMsIDB4MDEyOCwgMCwgezB4MDIsMHgwNCwweDNjfSB9LAoreyAgMywgMHgwMTJjLCAwLCB7MHgwMiwweDA0LDB4NmF9IH0sCit7ICAzLCAweDAxMzAsIDAsIHsweDAyLDB4MDAsMHgwMH0gfSwKK3sgIDMsIDB4MDEzNCwgMCwgezB4MDIsMHgwMCwweDAwfSB9LAoreyAgMywgMHgwMTM4LCAwLCB7MHgwMiwweDAwLDB4MDB9IH0sCit7ICAzLCAweDAxM2MsIDAsIHsweDAyLDB4MDAsMHgwMH0gfSwKK3sgIDMsIDB4MDE0MCwgMCwgezB4MDIsMHgwMCwweDAwfSB9LAoreyAgMywgMHgwMTQ0LCAwLCB7MHgwMiwweDAwLDB4MDB9IH0sCit7ICAzLCAweDAxNDgsIDAsIHsweDAyLDB4MDAsMHgwMH0gfSwKK3sgIDMsIDB4MDE0YywgMCwgezB4MDIsMHgwMCwweDAwfSB9LAoreyAgMywgMHgwMTUwLCAwLCB7MHgwMiwweDAwLDB4MDB9IH0sCit7ICAzLCAweDAxNTQsIDAsIHsweDAyLDB4MDAsMHgwMH0gfSwKK3sgMTAsIDB4MDE1NywgMCwgezB4NzUsMHg4MSwweDdmLDB4ZTUsMHg4MiwweDYwLDB4MDMsMHgwMiwweDAxLDB4NjF9IH0sCit7ICA1LCAweDAxNjEsIDAsIHsweDEyLDB4MDcsMHg2ZiwweDIxLDB4NjR9IH0sCit7ICAxLCAweDAxNjYsIDAsIHsweDMyfSB9LAoreyAxNCwgMHgwMTY3LCAwLCB7MHhjMCwweGQwLDB4YzAsMHg4NiwweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHhlMCwweDkwLDB4N2YsMHg5NywweGUwfSB9LAoreyAxNCwgMHgwMTc1LCAwLCB7MHg0NCwweDgwLDB4ZjAsMHg5MCwweDdmLDB4NjksMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwfSB9LAoreyAxNCwgMHgwMTgzLCAwLCB7MHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwfSB9LAoreyAxNCwgMHgwMTkxLCAwLCB7MHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweDkwLDB4N2YsMHg5NywweGUwfSB9LAoreyAgMywgMHgwMTlmLCAwLCB7MHg1NSwweDdmLDB4ZjB9IH0sCit7IDE0LCAweDAxYTIsIDAsIHsweDkwLDB4N2YsMHg5YSwweGUwLDB4MzAsMHhlNCwweDIzLDB4OTAsMHg3ZiwweDY4LDB4ZjAsMHhmMCwweGYwLDB4ZjB9IH0sCit7IDE0LCAweDAxYjAsIDAsIHsweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjB9IH0sCit7IDE0LCAweDAxYmUsIDAsIHsweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjB9IH0sCit7IDE0LCAweDAxY2MsIDAsIHsweGU1LDB4ZDgsMHhjMiwweGUzLDB4ZjUsMHhkOCwweGQwLDB4ZTAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ODZ9IH0sCit7ICAzLCAweDAxZGEsIDAsIHsweGQwLDB4ZDAsMHgzMn0gfSwKK3sgIDgsIDB4MDFkZCwgMCwgezB4NzUsMHg4NiwweDAwLDB4OTAsMHhmZiwweGMzLDB4N2MsMHgwNX0gfSwKK3sgIDcsIDB4MDFlNSwgMCwgezB4YTMsMHhlNSwweDgyLDB4NDUsMHg4MywweDcwLDB4Zjl9IH0sCit7ICAxLCAweDAxZWMsIDAsIHsweDIyfSB9LAoreyAxNCwgMHgwMWVkLCAwLCB7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHgwMiwweGMwLDB4MDMsMHhjMCwweGQwfSB9LAoreyAxNCwgMHgwMWZiLCAwLCB7MHg3NSwweGQwLDB4MDAsMHhjMCwweDg2LDB4NzUsMHg4NiwweDAwLDB4ZTUsMHg5MSwweGMyLDB4ZTQsMHhmNSwweDkxfSB9LAoreyAxMywgMHgwMjA5LCAwLCB7MHg5MCwweDg4LDB4MDAsMHhlMCwweGY1LDB4NDEsMHg5MCwweDdmLDB4YWIsMHg3NCwweDAyLDB4ZjAsMHg5MH0gfSwKK3sgIDksIDB4MDIxNiwgMCwgezB4N2YsMHhhYiwweDc0LDB4MDIsMHhmMCwweGU1LDB4MzIsMHg2MCwweDIxfSB9LAoreyAgNCwgMHgwMjFmLCAwLCB7MHg3YSwweDAwLDB4N2IsMHgwMH0gfSwKK3sgMTEsIDB4MDIyMywgMCwgezB4YzMsMHhlYSwweDk0LDB4MTgsMHhlYiwweDY0LDB4ODAsMHg5NCwweDgwLDB4NTAsMHgxMn0gfSwKK3sgMTQsIDB4MDIyZSwgMCwgezB4OTAsMHg3ZiwweDY5LDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweDBhLDB4YmEsMHgwMH0gfSwKK3sgIDIsIDB4MDIzYywgMCwgezB4MDEsMHgwYn0gfSwKK3sgIDIsIDB4MDIzZSwgMCwgezB4ODAsMHhlM30gfSwKK3sgIDIsIDB4MDI0MCwgMCwgezB4ZDAsMHg4Nn0gfSwKK3sgMTQsIDB4MDI0MiwgMCwgezB4ZDAsMHhkMCwweGQwLDB4MDMsMHhkMCwweDAyLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLDB4ZDAsMHhlMH0gfSwKK3sgIDEsIDB4MDI1MCwgMCwgezB4MzJ9IH0sCit7IDE0LCAweDAyNTEsIDAsIHsweGMwLDB4ZTAsMHhjMCwweGYwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweGQwLDB4NzUsMHhkMCwweDAwLDB4YzB9IH0sCit7IDE0LCAweDAyNWYsIDAsIHsweDg2LDB4NzUsMHg4NiwweDAwLDB4ZTUsMHg5MSwweGMyLDB4ZTQsMHhmNSwweDkxLDB4OTAsMHg3ZiwweGFiLDB4NzR9IH0sCit7ICA0LCAweDAyNmQsIDAsIHsweDA0LDB4ZjAsMHhkMCwweDg2fSB9LAoreyAxMSwgMHgwMjcxLCAwLCB7MHhkMCwweGQwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAxNCwgMHgwMjdjLCAwLCB7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHgwMiwweGMwLDB4MDMsMHhjMCwweDA0fSB9LAoreyAxNCwgMHgwMjhhLCAwLCB7MHhjMCwweDA1LDB4YzAsMHgwNiwweGMwLDB4MDcsMHhjMCwweDAwLDB4YzAsMHgwMSwweGMwLDB4ZDAsMHg3NSwweGQwfSB9LAoreyAxMywgMHgwMjk4LCAwLCB7MHgwMCwweGMwLDB4ODYsMHg3NSwweDg2LDB4MDAsMHhlNSwweDkxLDB4YzIsMHhlNCwweGY1LDB4OTEsMHg5MH0gfSwKK3sgMTIsIDB4MDJhNSwgMCwgezB4N2YsMHhhYiwweDc0LDB4MDgsMHhmMCwweDc1LDB4NmUsMHgwMCwweDc1LDB4NmYsMHgwMiwweDEyfSB9LAoreyAgNiwgMHgwMmIxLCAwLCB7MHgxMSwweDQ0LDB4NzUsMHg3MCwweDM5LDB4NzV9IH0sCit7ICA2LCAweDAyYjcsIDAsIHsweDcxLDB4MGMsMHg3NSwweDcyLDB4MDIsMHgxMn0gfSwKK3sgMTIsIDB4MDJiZCwgMCwgezB4MTEsMHg3NSwweDkwLDB4N2YsMHhkNiwweGU0LDB4ZjAsMHg3NSwweGQ4LDB4MjAsMHhkMCwweDg2fSB9LAoreyAxNCwgMHgwMmM5LCAwLCB7MHhkMCwweGQwLDB4ZDAsMHgwMSwweGQwLDB4MDAsMHhkMCwweDA3LDB4ZDAsMHgwNiwweGQwLDB4MDUsMHhkMCwweDA0fSB9LAoreyAxMywgMHgwMmQ3LCAwLCB7MHhkMCwweDAzLDB4ZDAsMHgwMiwweGQwLDB4ODMsMHhkMCwweDgyLDB4ZDAsMHhmMCwweGQwLDB4ZTAsMHgzMn0gfSwKK3sgMTQsIDB4MDJlNCwgMCwgezB4YzAsMHhlMCwweGMwLDB4ZjAsMHhjMCwweDgyLDB4YzAsMHg4MywweGMwLDB4ZDAsMHg3NSwweGQwLDB4MDAsMHhjMH0gfSwKK3sgMTQsIDB4MDJmMiwgMCwgezB4ODYsMHg3NSwweDg2LDB4MDAsMHhlNSwweDkxLDB4YzIsMHhlNCwweGY1LDB4OTEsMHg5MCwweDdmLDB4YWIsMHg3NH0gfSwKK3sgIDQsIDB4MDMwMCwgMCwgezB4MTAsMHhmMCwweGQwLDB4ODZ9IH0sCit7IDExLCAweDAzMDQsIDAsIHsweGQwLDB4ZDAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZjAsMHhkMCwweGUwLDB4MzJ9IH0sCit7IDE0LCAweDAzMGYsIDAsIHsweGMwLDB4ZTAsMHhjMCwweGYwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweDAyLDB4YzAsMHgwMywweGMwLDB4MDR9IH0sCit7IDE0LCAweDAzMWQsIDAsIHsweGMwLDB4MDUsMHhjMCwweDA2LDB4YzAsMHgwNywweGMwLDB4MDAsMHhjMCwweDAxLDB4YzAsMHhkMCwweDc1LDB4ZDB9IH0sCit7IDEyLCAweDAzMmIsIDAsIHsweDAwLDB4YzAsMHg4NiwweDc1LDB4ODYsMHgwMCwweDc1LDB4NmUsMHgwMCwweDc1LDB4NmYsMHgwMn0gfSwKK3sgIDcsIDB4MDMzNywgMCwgezB4MTIsMHgxMSwweDQ0LDB4NzUsMHg3MCwweDQwLDB4NzV9IH0sCit7ICA2LCAweDAzM2UsIDAsIHsweDcxLDB4MGMsMHg3NSwweDcyLDB4MDIsMHgxMn0gfSwKK3sgMTQsIDB4MDM0NCwgMCwgezB4MTEsMHg3NSwweDkwLDB4N2YsMHhkNiwweDc0LDB4MDIsMHhmMCwweDkwLDB4N2YsMHhkNiwweDc0LDB4MDYsMHhmMH0gfSwKK3sgIDUsIDB4MDM1MiwgMCwgezB4NzUsMHhkOCwweDEwLDB4ZDAsMHg4Nn0gfSwKK3sgMTQsIDB4MDM1NywgMCwgezB4ZDAsMHhkMCwweGQwLDB4MDEsMHhkMCwweDAwLDB4ZDAsMHgwNywweGQwLDB4MDYsMHhkMCwweDA1LDB4ZDAsMHgwNH0gfSwKK3sgMTMsIDB4MDM2NSwgMCwgezB4ZDAsMHgwMywweGQwLDB4MDIsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZjAsMHhkMCwweGUwLDB4MzJ9IH0sCit7IDEzLCAweDAzNzIsIDAsIHsweDkwLDB4N2YsMHhhNSwweDc0LDB4ODAsMHhmMCwweDkwLDB4N2YsMHhhNiwweDc0LDB4OWEsMHhmMCwweDEyfSB9LAoreyAxMiwgMHgwMzdmLCAwLCB7MHgxMCwweDFiLDB4OTAsMHg3ZiwweGE2LDB4ZTUsMHg0MiwweGYwLDB4MTIsMHgxMCwweDFiLDB4OTB9IH0sCit7IDEzLCAweDAzOGIsIDAsIHsweDdmLDB4YTYsMHhlNSwweDQzLDB4ZjAsMHgxMiwweDEwLDB4MWIsMHg5MCwweDdmLDB4YTUsMHg3NCwweDQwfSB9LAoreyAgMSwgMHgwMzk4LCAwLCB7MHhmMH0gfSwKK3sgIDEsIDB4MDM5OSwgMCwgezB4MjJ9IH0sCit7IDEzLCAweDAzOWEsIDAsIHsweDkwLDB4N2YsMHhhNSwweDc0LDB4ODAsMHhmMCwweDkwLDB4N2YsMHhhNiwweDc0LDB4OWEsMHhmMCwweDEyfSB9LAoreyAxMiwgMHgwM2E3LCAwLCB7MHgxMCwweDFiLDB4OTAsMHg3ZiwweGE2LDB4ZTUsMHg0NCwweGYwLDB4MTIsMHgxMCwweDFiLDB4OTB9IH0sCit7IDEyLCAweDAzYjMsIDAsIHsweDdmLDB4YTYsMHhlNSwweDQ1LDB4ZjAsMHgxMiwweDEwLDB4MWIsMHg5MCwweDdmLDB4YTYsMHhlNX0gfSwKK3sgMTEsIDB4MDNiZiwgMCwgezB4NDYsMHhmMCwweDEyLDB4MTAsMHgxYiwweDkwLDB4N2YsMHhhNSwweDc0LDB4NDAsMHhmMH0gfSwKK3sgIDEsIDB4MDNjYSwgMCwgezB4MjJ9IH0sCit7IDEwLCAweDAzY2IsIDAsIHsweDc1LDB4NDQsMHgwMiwweDc1LDB4NDUsMHgwMCwweDc1LDB4NDYsMHgwMCwweDEyfSB9LAoreyAgOSwgMHgwM2Q1LCAwLCB7MHgwMywweDlhLDB4NzUsMHg0MiwweDAzLDB4NzUsMHg0MywweDAwLDB4MTJ9IH0sCit7ICAyLCAweDAzZGUsIDAsIHsweDAzLDB4NzJ9IH0sCit7ICAxLCAweDAzZTAsIDAsIHsweDIyfSB9LAoreyAxMiwgMHgwM2UxLCAwLCB7MHg5MCwweDg4LDB4MDAsMHhlNSwweDM2LDB4ZjAsMHg5MCwweDg4LDB4MDAsMHg3NCwweDEwLDB4MjV9IH0sCit7ICA5LCAweDAzZWQsIDAsIHsweDM2LDB4ZjAsMHgxMiwweDAxLDB4ZGQsMHg3NSwweDQyLDB4MDEsMHg3NX0gfSwKK3sgIDksIDB4MDNmNiwgMCwgezB4NDMsMHgxOCwweDEyLDB4MDMsMHg3MiwweDc1LDB4NDQsMHgwMiwweDc1fSB9LAoreyAgOSwgMHgwM2ZmLCAwLHsweDQ1LDB4MDAsMHg3NSwweDQ2LDB4MDAsMHgxMiwweDAzLDB4OWEsMHg3NX0gfSwKK3sgIDgsIDB4MDQwOCwgMCx7MHg0MiwweDAzLDB4NzUsMHg0MywweDQ0LDB4MTIsMHgwMywweDcyfSB9LAoreyAgMSwgMHgwNDEwLCAwLHsweDIyfSB9LAoreyAxNCwgMHgwNDExLCAwLCB7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHhkMCwweDc1LDB4ZDAsMHgwMCwweGMwfSB9LAoreyAxNCwgMHgwNDFmLCAwLCB7MHg4NiwweDc1LDB4ODYsMHgwMCwweGU1LDB4OTEsMHhjMiwweGU0LDB4ZjUsMHg5MSwweDkwLDB4N2YsMHhhYSwweDc0fSB9LAoreyAgNCwgMHgwNDJkLCAwLCB7MHgwMiwweGYwLDB4ZDAsMHg4Nn0gfSwKK3sgMTEsIDB4MDQzMSwgMCwgezB4ZDAsMHhkMCwweGQwLDB4ODMsMHhkMCwweDgyLDB4ZDAsMHhmMCwweGQwLDB4ZTAsMHgzMn0gfSwKK3sgMTQsIDB4MDQzYywgMCwgezB4YzAsMHhlMCwweGMwLDB4ZjAsMHhjMCwweDgyLDB4YzAsMHg4MywweGMwLDB4ZDAsMHg3NSwweGQwLDB4MDAsMHhjMH0gfSwKK3sgMTQsIDB4MDQ0YSwgMCwgezB4ODYsMHg3NSwweDg2LDB4MDAsMHhlNSwweDkxLDB4YzIsMHhlNCwweGY1LDB4OTEsMHg5MCwweDdmLDB4YTksMHg3NH0gfSwKK3sgIDcsIDB4MDQ1OCwgMCwgezB4MDQsMHhmMCwweDc1LDB4MzAsMHgwMSwweGQwLDB4ODZ9IH0sCit7IDExLCAweDA0NWYsIDAsIHsweGQwLDB4ZDAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZjAsMHhkMCwweGUwLDB4MzJ9IH0sCit7IDE0LCAweDA0NmEsIDAsIHsweGMwLDB4ZTAsMHhjMCwweGYwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweGQwLDB4NzUsMHhkMCwweDAwLDB4YzB9IH0sCit7IDE0LCAweDA0NzgsIDAsIHsweDg2LDB4NzUsMHg4NiwweDAwLDB4ZTUsMHg5MSwweGMyLDB4ZTQsMHhmNSwweDkxLDB4OTAsMHg3ZiwweGFhLDB4NzR9IH0sCit7ICA3LCAweDA0ODYsIDAsIHsweDA0LDB4ZjAsMHg3NSwweDMxLDB4MDEsMHhkMCwweDg2fSB9LAoreyAxMSwgMHgwNDhkLCAwLCB7MHhkMCwweGQwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAxNCwgMHgwNDk4LCAwLCB7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHhkMCwweDc1LDB4ZDAsMHgwMCwweGMwfSB9LAoreyAxMiwgMHgwNGE2LCAwLCB7MHg4NiwweDc1LDB4ODYsMHgwMCwweGU1LDB4OTEsMHhjMiwweGU1LDB4ZjUsMHg5MSwweGQwLDB4ODZ9IH0sCit7IDExLCAweDA0YjIsIDAsIHsweGQwLDB4ZDAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZjAsMHhkMCwweGUwLDB4MzJ9IH0sCit7IDE0LCAweDA0YmQsIDAsIHsweGMwLDB4ZTAsMHhjMCwweGYwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweGQwLDB4NzUsMHhkMCwweDAwLDB4YzB9IH0sCit7IDEyLCAweDA0Y2IsIDAsIHsweDg2LDB4NzUsMHg4NiwweDAwLDB4ZTUsMHg5MSwweGMyLDB4ZTcsMHhmNSwweDkxLDB4ZDAsMHg4Nn0gfSwKK3sgMTEsIDB4MDRkNywgMCwgezB4ZDAsMHhkMCwweGQwLDB4ODMsMHhkMCwweDgyLDB4ZDAsMHhmMCwweGQwLDB4ZTAsMHgzMn0gfSwKK3sgMTIsIDB4MDRlMiwgMCwgezB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmYSwweDhhLDB4MjAsMHg5MCwweDdmLDB4OTYsMHhlNCwweGYwfSB9LAoreyAgMSwgMHgwNGVlLCAwLCB7MHgyMn0gfSwKK3sgIDcsIDB4MDRlZiwgMCwgezB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmYSwweDhhLDB4MjF9IH0sCit7ICAxLCAweDA0ZjYsIDAsIHsweDIyfSB9LAoreyAxNCwgMHgwNGY3LCAwLCB7MHg5MCwweDE3LDB4MTMsMHhlMCwweGZhLDB4OTAsMHgxNywweDE1LDB4ZTAsMHhmYiwweDc0LDB4ODAsMHgyYSwweGZhfSB9LAoreyAxNCwgMHgwNTA1LCAwLCB7MHg3NCwweDgwLDB4MmIsMHhmYiwweGVhLDB4MDMsMHgwMywweDU0LDB4M2YsMHhmYywweGVhLDB4YzQsMHgyMywweDU0fSB9LAoreyAxNCwgMHgwNTEzLCAwLCB7MHgxZiwweGZhLDB4MmMsMHhmYSwweGViLDB4MDMsMHgwMywweDU0LDB4M2YsMHhmYywweGViLDB4YzQsMHgyMywweDU0fSB9LAoreyAxMSwgMHgwNTIxLCAwLCB7MHgxZiwweGZiLDB4MmMsMHhmYiwweDkwLDB4MTcsMHgwYSwweGUwLDB4ZmMsMHg2MCwweDAyfSB9LAoreyAgMiwgMHgwNTJjLCAwLCB7MHg3YSwweDAwfSB9LAoreyAgNywgMHgwNTJlLCAwLCB7MHg5MCwweDE3LDB4MGMsMHhlMCwweGZjLDB4NjAsMHgwMn0gfSwKK3sgIDIsIDB4MDUzNSwgMCwgezB4N2IsMHgwMH0gfSwKK3sgMTEsIDB4MDUzNywgMCwgezB4ZWEsMHgyYiwweGZjLDB4YzMsMHgxMywweGY1LDB4M2EsMHg3NSwweDQ0LDB4MDIsMHg4Yn0gfSwKK3sgIDcsIDB4MDU0MiwgMCwgezB4NDUsMHg4YSwweDQ2LDB4MTIsMHgwMywweDlhLDB4NzV9IH0sCit7ICA5LCAweDA1NDksIDAsIHsweDZlLDB4MDgsMHg3NSwweDZmLDB4MDAsMHgxMiwweDExLDB4NDQsMHg3NX0gfSwKK3sgIDQsIDB4MDU1MiwgMCwgezB4NzAsMHg0NywweDc1LDB4NzF9IH0sCit7ICA4LCAweDA1NTYsIDAsIHsweDBjLDB4NzUsMHg3MiwweDAyLDB4MTIsMHgxMSwweDc1LDB4ODV9IH0sCit7ICA1LCAweDA1NWUsIDAsIHsweDNhLDB4NzMsMHgxMiwweDExLDB4YTB9IH0sCit7ICAxLCAweDA1NjMsIDAsIHsweDIyfSB9LAoreyAxNCwgMHgwNTY0LCAwLCB7MHg5MCwweDdmLDB4OTYsMHhlMCwweGZhLDB4OTAsMHg3ZiwweDk2LDB4NzQsMHg4MCwweDY1LDB4MDIsMHhmMCwweDkwfSB9LAoreyAxNCwgMHgwNTcyLCAwLCB7MHg3ZiwweGViLDB4ZTAsMHhmYSwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmIsMHg5MCwweDdmLDB4ZWYsMHhlMCwweGZjfSB9LAoreyAxNCwgMHgwNTgwLCAwLCB7MHgzMywweDk1LDB4ZTAsMHhmZCwweDhjLDB4MDUsMHg3YywweDAwLDB4OTAsMHg3ZiwweGVlLDB4ZTAsMHhmZSwweDMzfSB9LAoreyAxNCwgMHgwNThlLCAwLCB7MHg5NSwweGUwLDB4ZmYsMHhlYywweDJlLDB4ZmMsMHhlZCwweDNmLDB4ZmQsMHg5MCwweDdmLDB4ZTksMHhlMCwweGZlfSB9LAoreyAgNSwgMHgwNTljLCAwLCB7MHhiZSwweDAxLDB4MDIsMHg4MCwweDAzfSB9LAoreyAgMywgMHgwNWExLCAwLCB7MHgwMiwweDA1LDB4Zjl9IH0sCit7ICA2LCAweDA1YTQsIDAsIHsweGJjLDB4MDEsMHgyMSwweGJkLDB4MDAsMHgxZX0gfSwKK3sgMTQsIDB4MDVhYSwgMCwgezB4ZWEsMHhjNCwweDAzLDB4NTQsMHhmOCwweGZjLDB4ZWIsMHgyNSwweGUwLDB4ZmQsMHgyYywweDI0LDB4MDAsMHhmY30gfSwKK3sgMTQsIDB4MDViOCwgMCwgezB4ZTQsMHgzNCwweDE3LDB4ZmQsMHg5MCwweDdlLDB4YzAsMHhlMCwweGZlLDB4OGMsMHg4MiwweDhkLDB4ODMsMHhmMH0gfSwKK3sgIDIsIDB4MDVjNiwgMCwgezB4ODAsMHgzMX0gfSwKK3sgMTQsIDB4MDVjOCwgMCwgezB4ZWEsMHhjNCwweDAzLDB4NTQsMHhmOCwweGZhLDB4ZWIsMHgyNSwweGUwLDB4ZmIsMHgyYSwweGZhLDB4MjQsMHgwMH0gfSwKK3sgMTQsIDB4MDVkNiwgMCwgezB4ZmIsMHhlNCwweDM0LDB4MTcsMHhmYywweDkwLDB4N2UsMHhjMCwweGUwLDB4ZmQsMHg4YiwweDgyLDB4OGMsMHg4M30gfSwKK3sgMTQsIDB4MDVlNCwgMCwgezB4ZjAsMHg3NCwweDAxLDB4MmEsMHgyNCwweDAwLDB4ZmEsMHhlNCwweDM0LDB4MTcsMHhmYiwweDkwLDB4N2UsMHhjMX0gfSwKK3sgIDcsIDB4MDVmMiwgMCwgezB4ZTAsMHhmYywweDhhLDB4ODIsMHg4YiwweDgzLDB4ZjB9IH0sCit7ICAzLCAweDA1ZjksIDAsIHsweDc1LDB4MzgsMHgwMX0gfSwKK3sgIDEsIDB4MDVmYywgMCwgezB4MjJ9IH0sCit7IDE0LCAweDA1ZmQsIDAsIHsweGMwLDB4ZTAsMHhjMCwweGYwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweDAyLDB4YzAsMHgwMywweGMwLDB4MDR9IH0sCit7IDE0LCAweDA2MGIsIDAsIHsweGMwLDB4MDUsMHhjMCwweDA2LDB4YzAsMHgwNywweGMwLDB4MDAsMHhjMCwweDAxLDB4YzAsMHhkMCwweDc1LDB4ZDB9IH0sCit7IDEzLCAweDA2MTksIDAsIHsweDAwLDB4YzAsMHg4NiwweDc1LDB4ODYsMHgwMCwweGU1LDB4OTEsMHhjMiwweGU0LDB4ZjUsMHg5MSwweDkwfSB9LAoreyAxMywgMHgwNjI2LCAwLCB7MHg3ZiwweGFhLDB4NzQsMHgwMSwweGYwLDB4MTIsMHgwNSwweDY0LDB4NzUsMHgzNywweDAwLDB4ZDAsMHg4Nn0gfSwKK3sgMTQsIDB4MDYzMywgMCwgezB4ZDAsMHhkMCwweGQwLDB4MDEsMHhkMCwweDAwLDB4ZDAsMHgwNywweGQwLDB4MDYsMHhkMCwweDA1LDB4ZDAsMHgwNH0gfSwKK3sgMTMsIDB4MDY0MSwgMCwgezB4ZDAsMHgwMywweGQwLDB4MDIsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZjAsMHhkMCwweGUwLDB4MzJ9IH0sCit7IDE0LCAweDA2NGUsIDAsIHsweDkwLDB4N2YsMHhlYiwweGUwLDB4ZmEsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGZiLDB4OTAsMHg3ZiwweGVlLDB4ZTB9IH0sCit7IDE0LCAweDA2NWMsIDAsIHsweGZjLDB4MzMsMHg5NSwweGUwLDB4ZmQsMHg5MCwweDdmLDB4OTYsMHhlMCwweGZlLDB4OTAsMHg3ZiwweDk2LDB4NzR9IH0sCit7IDE0LCAweDA2NmEsIDAsIHsweDgwLDB4NjUsMHgwNiwweGYwLDB4OTAsMHg3ZiwweDAwLDB4NzQsMHgwMSwweGYwLDB4ZWEsMHhjNCwweDAzLDB4NTR9IH0sCit7IDE0LCAweDA2NzgsIDAsIHsweGY4LDB4ZmUsMHhlYiwweDI1LDB4ZTAsMHhmYiwweDJlLDB4ZmUsMHgyNCwweDAwLDB4ZmIsMHhlNCwweDM0LDB4MTd9IH0sCit7IDE0LCAweDA2ODYsIDAsIHsweGZmLDB4OGIsMHg4MiwweDhmLDB4ODMsMHhlMCwweGZiLDB4NzQsMHgwMSwweDJlLDB4MjQsMHgwMCwweGZlLDB4ZTR9IH0sCit7IDE0LCAweDA2OTQsIDAsIHsweDM0LDB4MTcsMHhmZiwweDhlLDB4ODIsMHg4ZiwweDgzLDB4ZTAsMHhmZSwweDkwLDB4N2YsMHhlOSwweGUwLDB4ZmZ9IH0sCit7ICAzLCAweDA2YTIsIDAsIHsweGJmLDB4ODEsMHgwYX0gfSwKK3sgMTAsIDB4MDZhNSwgMCwgezB4OTAsMHg3ZiwweDAwLDB4ZWIsMHhmMCwweDkwLDB4N2YsMHgwMSwweGVlLDB4ZjB9IH0sCit7ICA4LCAweDA2YWYsIDAsIHsweDkwLDB4N2YsMHhlOSwweGUwLDB4ZmIsMHhiYiwweDgyLDB4MWF9IH0sCit7ICAzLCAweDA2YjcsIDAsIHsweGJhLDB4MDEsMHgwY30gfSwKK3sgMTIsIDB4MDZiYSwgMCwgezB4OTAsMHg3ZiwweDAwLDB4ZTQsMHhmMCwweDkwLDB4N2YsMHgwMSwweGU0LDB4ZjAsMHg4MCwweDBifSB9LAoreyAxMSwgMHgwNmM2LCAwLCB7MHg5MCwweDdmLDB4MDAsMHhlNCwweGYwLDB4OTAsMHg3ZiwweDAxLDB4NzQsMHhiNSwweGYwfSB9LAoreyAgOCwgMHgwNmQxLCAwLCB7MHg5MCwweDdmLDB4ZTksMHhlMCwweGZiLDB4YmIsMHg4MywweDFifSB9LAoreyAgMywgMHgwNmQ5LCAwLCB7MHhiYSwweDAxLDB4MGR9IH0sCit7IDEzLCAweDA2ZGMsIDAsIHsweDkwLDB4N2YsMHgwMCwweDc0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHgwMSwweGU0LDB4ZjAsMHg4MCwweDBifSB9LAoreyAxMSwgMHgwNmU5LCAwLCB7MHg5MCwweDdmLDB4MDAsMHhlNCwweGYwLDB4OTAsMHg3ZiwweDAxLDB4NzQsMHgxMiwweGYwfSB9LAoreyAgOCwgMHgwNmY0LCAwLCB7MHg5MCwweDdmLDB4ZTksMHhlMCwweGZiLDB4YmIsMHg4NCwweDFjfSB9LAoreyAgMywgMHgwNmZjLCAwLCB7MHhiYSwweDAxLDB4MGR9IH0sCit7IDEzLCAweDA2ZmYsIDAsIHsweDkwLDB4N2YsMHgwMCwweDc0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHgwMSwweGU0LDB4ZjAsMHg4MCwweDBjfSB9LAoreyAxMiwgMHgwNzBjLCAwLCB7MHg5MCwweDdmLDB4MDAsMHg3NCwweDgwLDB4ZjAsMHg5MCwweDdmLDB4MDEsMHg3NCwweDAxLDB4ZjB9IH0sCit7ICA1LCAweDA3MTgsIDAsIHsweDkwLDB4N2YsMHhiNSwweGVjLDB4ZjB9IH0sCit7ICAxLCAweDA3MWQsIDAsIHsweDIyfSB9LAoreyAxMiwgMHgwNzFlLCAwLCB7MHg3NSwweDM2LDB4MGQsMHg5MCwweDg4LDB4MDAsMHg3NCwweDFkLDB4ZjAsMHg3NSwweDZiLDB4ODB9IH0sCit7IDEwLCAweDA3MmEsIDAsIHsweDc1LDB4NmMsMHgzYywweDEyLDB4MTAsMHhlMiwweDc1LDB4NmIsMHg4MCwweDc1fSB9LAoreyAgOSwgMHgwNzM0LCAwLCB7MHg2YywweDBmLDB4MTIsMHgxMCwweGUyLDB4NzUsMHg2YiwweDgwLDB4NzV9IH0sCit7ICA5LCAweDA3M2QsIDAsIHsweDZjLDB4MDYsMHgxMiwweDEwLDB4ZTIsMHg3NSwweDZiLDB4ODAsMHg3NX0gfSwKK3sgIDcsIDB4MDc0NiwgMCwgezB4NmMsMHgwMSwweDEyLDB4MTAsMHhlMiwweDdhLDB4MDB9IH0sCit7ICAzLCAweDA3NGQsIDAsIHsweGJhLDB4ZmYsMHgwMH0gfSwKK3sgIDIsIDB4MDc1MCwgMCwgezB4NTAsMHgwYX0gfSwKK3sgMTAsIDB4MDc1MiwgMCwgezB4YzAsMHgwMiwweDEyLDB4MDEsMHhkZCwweGQwLDB4MDIsMHgwYSwweDgwLDB4ZjF9IH0sCit7IDEwLCAweDA3NWMsIDAsIHsweDc1LDB4NmIsMHg4MCwweDc1LDB4NmMsMHgzYywweDEyLDB4MTAsMHhlMiwweDc1fSB9LAoreyAgOCwgMHgwNzY2LCAwLCB7MHg2YiwweDgwLDB4NzUsMHg2YywweDBmLDB4MTIsMHgxMCwweGUyfSB9LAoreyAgMSwgMHgwNzZlLCAwLCB7MHgyMn0gfSwKK3sgMTQsIDB4MDc2ZiwgMCwgezB4OTAsMHg3ZiwweGExLDB4ZTQsMHhmMCwweDkwLDB4N2YsMHhhZiwweDc0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHg5Mn0gfSwKK3sgMTQsIDB4MDc3ZCwgMCwgezB4NzQsMHgwMiwweGYwLDB4NzUsMHg4ZSwweDMxLDB4NzUsMHg4OSwweDIxLDB4NzUsMHg4OCwweDAwLDB4NzUsMHhjOH0gfSwKK3sgMTQsIDB4MDc4YiwgMCwgezB4MDAsMHg3NSwweDhkLDB4NDAsMHg3NSwweDk4LDB4NDAsMHg3NSwweGMwLDB4NDAsMHg3NSwweDg3LDB4MDAsMHg3NX0gfSwKK3sgIDksIDB4MDc5OSwgMCwgezB4MjAsMHgwMCwweDc1LDB4MjEsMHgwMCwweDc1LDB4MjIsMHgwMCwweDc1fSB9LAoreyAgNSwgMHgwN2EyLCAwLCB7MHgyMywweDAwLDB4NzUsMHg0NywweDAwfSB9LAoreyAgNywgMHgwN2E3LCAwLCB7MHhjMywweGU1LDB4NDcsMHg5NCwweDIwLDB4NTAsMHgxMX0gfSwKK3sgMTMsIDB4MDdhZSwgMCwgezB4ZTUsMHg0NywweDI0LDB4MDAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDE3LDB4ZjUsMHg4MywweGU0LDB4ZjB9IH0sCit7ICA0LCAweDA3YmIsIDAsIHsweDA1LDB4NDcsMHg4MCwweGU4fSB9LAoreyAgOSwgMHgwN2JmLCAwLCB7MHhlNCwweGY1LDB4NDAsMHhmNSwweDNmLDB4ZTQsMHhmNSwweDNjLDB4ZjV9IH0sCit7ICA3LCAweDA3YzgsIDAsIHsweDNiLDB4ZTQsMHhmNSwweDNlLDB4ZjUsMHgzZCwweDc1fSB9LAoreyAxMSwgMHgwN2NmLCAwLCB7MHgzMiwweDAwLDB4NzUsMHgzNywweDAwLDB4NzUsMHgzOSwweDAwLDB4OTAsMHg3ZiwweDkzfSB9LAoreyAxNCwgMHgwN2RhLCAwLCB7MHg3NCwweDNjLDB4ZjAsMHg5MCwweDdmLDB4OWMsMHg3NCwweGZmLDB4ZjAsMHg5MCwweDdmLDB4OTYsMHg3NCwweDgwfSB9LAoreyAxNCwgMHgwN2U4LCAwLCB7MHhmMCwweDkwLDB4N2YsMHg5NCwweDc0LDB4NzAsMHhmMCwweDkwLDB4N2YsMHg5ZCwweDc0LDB4OGYsMHhmMCwweDkwfSB9LAoreyAxNCwgMHgwN2Y2LCAwLCB7MHg3ZiwweDk3LDB4ZTQsMHhmMCwweDkwLDB4N2YsMHg5NSwweDc0LDB4YzIsMHhmMCwweDkwLDB4N2YsMHg5OCwweDc0fSB9LAoreyAxNCwgMHgwODA0LCAwLCB7MHgyOCwweGYwLDB4OTAsMHg3ZiwweDllLDB4NzQsMHgyOCwweGYwLDB4OTAsMHg3ZiwweGYwLDB4ZTQsMHhmMCwweDkwfSB9LAoreyAxNCwgMHgwODEyLCAwLCB7MHg3ZiwweGYxLDB4ZTQsMHhmMCwweDkwLDB4N2YsMHhmMiwweGU0LDB4ZjAsMHg5MCwweDdmLDB4ZjMsMHhlNCwweGYwfSB9LAoreyAxNCwgMHgwODIwLCAwLCB7MHg5MCwweDdmLDB4ZjQsMHhlNCwweGYwLDB4OTAsMHg3ZiwweGY1LDB4ZTQsMHhmMCwweDkwLDB4N2YsMHhmNiwweGU0fSB9LAoreyAxNCwgMHgwODJlLCAwLCB7MHhmMCwweDkwLDB4N2YsMHhmNywweGU0LDB4ZjAsMHg5MCwweDdmLDB4ZjgsMHhlNCwweGYwLDB4OTAsMHg3ZiwweGY5fSB9LAoreyAxNCwgMHgwODNjLCAwLCB7MHg3NCwweDM4LDB4ZjAsMHg5MCwweDdmLDB4ZmEsMHg3NCwweGEwLDB4ZjAsMHg5MCwweDdmLDB4ZmIsMHg3NCwweGEwfSB9LAoreyAxNCwgMHgwODRhLCAwLCB7MHhmMCwweDkwLDB4N2YsMHhmYywweDc0LDB4YTAsMHhmMCwweDkwLDB4N2YsMHhmZCwweDc0LDB4YTAsMHhmMCwweDkwfSB9LAoreyAxNCwgMHgwODU4LCAwLCB7MHg3ZiwweGZlLDB4NzQsMHhhMCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhhMCwweGYwLDB4OTAsMHg3ZiwweGUwfSB9LAoreyAxNCwgMHgwODY2LCAwLCB7MHg3NCwweDAzLDB4ZjAsMHg5MCwweDdmLDB4ZTEsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4ZGQsMHg3NCwweDgwfSB9LAoreyAxMSwgMHgwODc0LCAwLCB7MHhmMCwweDEyLDB4MTIsMHg0MywweDEyLDB4MDcsMHgxZSwweDdhLDB4MDAsMHg3YiwweDAwfSB9LAoreyAgOSwgMHgwODdmLCAwLCB7MHhjMywweGVhLDB4OTQsMHgxZSwweGViLDB4OTQsMHgwMCwweDUwLDB4MTd9IH0sCit7IDEyLCAweDA4ODgsIDAsIHsweDkwLDB4ODgsMHgwMCwweGUwLDB4ZjUsMHg0NywweDkwLDB4ODgsMHgwYiwweGUwLDB4ZjUsMHg0N30gfSwKK3sgIDksIDB4MDg5NCwgMCwgezB4OTAsMHg3ZiwweDY4LDB4ZjAsMHgwYSwweGJhLDB4MDAsMHgwMSwweDBifSB9LAoreyAgMiwgMHgwODlkLCAwLCB7MHg4MCwweGUwfSB9LAoreyAxMiwgMHgwODlmLCAwLCB7MHgxMiwweDAzLDB4ZTEsMHg5MCwweDdmLDB4ZDYsMHhlNCwweGYwLDB4N2EsMHgwMCwweDdiLDB4MDB9IH0sCit7IDEzLCAweDA4YWIsIDAsIHsweDhhLDB4MDQsMHg4YiwweDA1LDB4YzMsMHhlYSwweDk0LDB4ZTAsMHhlYiwweDk0LDB4MmUsMHg1MCwweDFhfSB9LAoreyAxNCwgMHgwOGI4LCAwLCB7MHhjMCwweDAyLDB4YzAsMHgwMywweGMwLDB4MDQsMHhjMCwweDA1LDB4MTIsMHgwMSwweGRkLDB4ZDAsMHgwNSwweGQwfSB9LAoreyAxMCwgMHgwOGM2LCAwLCB7MHgwNCwweGQwLDB4MDMsMHhkMCwweDAyLDB4MGEsMHhiYSwweDAwLDB4MDEsMHgwYn0gfSwKK3sgIDIsIDB4MDhkMCwgMCwgezB4ODAsMHhkOX0gfSwKK3sgMTMsIDB4MDhkMiwgMCwgezB4OTAsMHg3ZiwweGQ2LDB4NzQsMHgwMiwweGYwLDB4OTAsMHg3ZiwweGQ2LDB4NzQsMHgwNiwweGYwLDB4OTB9IH0sCit7IDE0LCAweDA4ZGYsIDAsIHsweDdmLDB4ZGUsMHg3NCwweDA1LDB4ZjAsMHg5MCwweDdmLDB4ZGYsMHg3NCwweDA1LDB4ZjAsMHg5MCwweDdmLDB4YWN9IH0sCit7IDE0LCAweDA4ZWQsIDAsIHsweGU0LDB4ZjAsMHg5MCwweDdmLDB4YWQsMHg3NCwweDA1LDB4ZjAsMHg3NSwweGE4LDB4ODAsMHg3NSwweGY4LDB4MTB9IH0sCit7IDEzLCAweDA4ZmIsIDAsIHsweDkwLDB4N2YsMHhhZSwweDc0LDB4MGIsMHhmMCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODgsMHhmMCwweDkwfSB9LAoreyAxMiwgMHgwOTA4LCAwLCB7MHg3ZiwweGFiLDB4NzQsMHgwOCwweGYwLDB4NzUsMHhlOCwweDExLDB4NzUsMHgzMiwweDAxLDB4NzV9IH0sCit7IDEyLCAweDA5MTQsIDAsIHsweDMxLDB4MDAsMHg3NSwweDMwLDB4MDAsMHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MDQsMHhmN30gfSwKK3sgMTAsIDB4MDkyMCwgMCwgezB4ZDAsMHgwNSwweGQwLDB4MDQsMHg3NSwweDM0LDB4MDAsMHg3NSwweDM1LDB4MDF9IH0sCit7IDEzLCAweDA5MmEsIDAsIHsweDkwLDB4N2YsMHhhZSwweDc0LDB4MDMsMHhmMCwweDhjLDB4MDIsMHhiYSwweDAwLDB4MDIsMHg4MCwweDAzfSB9LAoreyAgMywgMHgwOTM3LCAwLCB7MHgwMiwweDBhLDB4M2Z9IH0sCit7IDEyLCAweDA5M2EsIDAsIHsweDg1LDB4MzMsMHgzNCwweDkwLDB4N2YsMHg5ZCwweDc0LDB4OGYsMHhmMCwweDkwLDB4N2YsMHg5N30gfSwKK3sgMTQsIDB4MDk0NiwgMCwgezB4NzQsMHgwOCwweGYwLDB4OTAsMHg3ZiwweDlkLDB4NzQsMHg4OCwweGYwLDB4OTAsMHg3ZiwweDlhLDB4ZTAsMHhmYX0gfSwKK3sgMTIsIDB4MDk1NCwgMCwgezB4NzQsMHgwNSwweDVhLDB4ZjUsMHgzMywweDkwLDB4N2YsMHg5ZCwweDc0LDB4OGYsMHhmMCwweDkwfSB9LAoreyAxMywgMHgwOTYwLCAwLCB7MHg3ZiwweDk3LDB4NzQsMHgwMiwweGYwLDB4OTAsMHg3ZiwweDlkLDB4NzQsMHg4MiwweGYwLDB4ZTUsMHgzM30gfSwKK3sgMTMsIDB4MDk2ZCwgMCwgezB4MjUsMHhlMCwweGZhLDB4OTAsMHg3ZiwweDlhLDB4ZTAsMHg1NCwweDA1LDB4ZmIsMHg0YSwweGY1LDB4MzN9IH0sCit7ICAyLCAweDA5N2EsIDAsIHsweDYwLDB4MGN9IH0sCit7IDEyLCAweDA5N2MsIDAsIHsweDkwLDB4N2YsMHg5NiwweGUwLDB4ZmEsMHg5MCwweDdmLDB4OTYsMHg3NCwweDgwLDB4NGEsMHhmMH0gfSwKK3sgMTEsIDB4MDk4OCwgMCwgezB4NzUsMHg2ZSwweDAwLDB4NzUsMHg2ZiwweDAwLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMn0gfSwKK3sgMTQsIDB4MDk5MywgMCwgezB4MTEsMHg0NCwweGQwLDB4MDUsMHhkMCwweDA0LDB4OTAsMHgxNywweDEzLDB4ZTAsMHhmYSwweDc0LDB4ODAsMHgyYX0gfSwKK3sgIDYsIDB4MDlhMSwgMCwgezB4ZmEsMHhlNSwweDMzLDB4YjQsMHgwNCwweDI5fSB9LAoreyAgMywgMHgwOWE3LCAwLCB7MHhiYSwweGEwLDB4MDB9IH0sCit7ICAyLCAweDA5YWEsIDAsIHsweDUwLDB4MjR9IH0sCit7IDEzLCAweDA5YWMsIDAsIHsweDkwLDB4MTcsMHgxMywweGUwLDB4MDQsMHhmYiwweDBiLDB4OTAsMHgxNywweDEzLDB4ZWIsMHhmMCwweDkwfSB9LAoreyAxNCwgMHgwOWI5LCAwLCB7MHgxNywweDEzLDB4ZTAsMHhmYiwweDkwLDB4MTcsMHgxNSwweGYwLDB4YzAsMHgwMiwweGMwLDB4MDQsMHhjMCwweDA1fSB9LAoreyAgOSwgMHgwOWM3LCAwLCB7MHgxMiwweDA0LDB4ZjcsMHhkMCwweDA1LDB4ZDAsMHgwNCwweGQwLDB4MDJ9IH0sCit7ICA1LCAweDA5ZDAsIDAsIHsweGU1LDB4MzMsMHhiNCwweDAyLDB4MjZ9IH0sCit7ICA2LCAweDA5ZDUsIDAsIHsweGMzLDB4NzQsMHgwNCwweDlhLDB4NTAsMHgyMH0gfSwKK3sgMTMsIDB4MDlkYiwgMCwgezB4OTAsMHgxNywweDEzLDB4ZTAsMHhmYSwweDFhLDB4MWEsMHg5MCwweDE3LDB4MTMsMHhlYSwweGYwLDB4OTB9IH0sCit7IDEzLCAweDA5ZTgsIDAsIHsweDE3LDB4MTMsMHhlMCwweGZhLDB4OTAsMHgxNywweDE1LDB4ZjAsMHhjMCwweDA0LDB4YzAsMHgwNSwweDEyfSB9LAoreyAgNiwgMHgwOWY1LCAwLCB7MHgwNCwweGY3LDB4ZDAsMHgwNSwweGQwLDB4MDR9IH0sCit7ICA1LCAweDA5ZmIsIDAsIHsweGU1LDB4MzMsMHhiNCwweDA4LDB4MWR9IH0sCit7ICA0LCAweDBhMDAsIDAsIHsweGU1LDB4MzQsMHg3MCwweDE5fSB9LAoreyAxMCwgMHgwYTA0LCAwLCB7MHg3NCwweDAxLDB4MjUsMHgzNSwweDU0LDB4MGYsMHhmNSwweDM1LDB4ODUsMHgzNX0gfSwKK3sgMTIsIDB4MGEwZSwgMCwgezB4NzUsMHg3NSwweDc2LDB4MDAsMHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MTMsMHhmZSwweGQwfSB9LAoreyAgMywgMHgwYTFhLCAwLCB7MHgwNSwweGQwLDB4MDR9IH0sCit7ICA1LCAweDBhMWQsIDAsIHsweGU1LDB4MzMsMHhiNCwweDAxLDB4MWR9IH0sCit7ICA0LCAweDBhMjIsIDAsIHsweGU1LDB4MzQsMHg3MCwweDE5fSB9LAoreyAxMCwgMHgwYTI2LCAwLCB7MHhlNSwweDM1LDB4MjQsMHhmZiwweDU0LDB4MGYsMHhmNSwweDM1LDB4ODUsMHgzNX0gfSwKK3sgMTIsIDB4MGEzMCwgMCwgezB4NzUsMHg3NSwweDc2LDB4MDAsMHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MTMsMHhmZSwweGQwfSB9LAoreyAgMywgMHgwYTNjLCAwLCB7MHgwNSwweGQwLDB4MDR9IH0sCit7IDE0LCAweDBhM2YsIDAsIHsweGMwLDB4MDQsMHhjMCwweDA1LDB4MTIsMHgwMSwweGRkLDB4ZDAsMHgwNSwweGQwLDB4MDQsMHg5MCwweDdmLDB4OTZ9IH0sCit7IDE0LCAweDBhNGQsIDAsIHsweGUwLDB4ZmEsMHg5MCwweDdmLDB4OTYsMHg3NCwweDdmLDB4NWEsMHhmMCwweDkwLDB4N2YsMHg5NywweDc0LDB4MDh9IH0sCit7IDEwLCAweDBhNWIsIDAsIHsweGYwLDB4YzMsMHhlYywweDk0LDB4MDAsMHhlZCwweDk0LDB4MDIsMHg0MCwweDA4fSB9LAoreyAgOCwgMHgwYTY1LCAwLCB7MHg5MCwweDdmLDB4OTYsMHhlMCwweGZhLDB4MjAsMHhlNiwweDA4fSB9LAoreyAgOCwgMHgwYTZkLCAwLCB7MHhjMywweGU0LDB4OWMsMHg3NCwweDA4LDB4OWQsMHg1MCwweDEzfSB9LAoreyAxNCwgMHgwYTc1LCAwLCB7MHg5MCwweDdmLDB4OTYsMHhlMCwweGZhLDB4OTAsMHg3ZiwweDk2LDB4NzQsMHg0MCwweDY1LDB4MDIsMHhmMCwweDdjfSB9LAoreyAgNSwgMHgwYTgzLCAwLCB7MHgwMCwweDdkLDB4MDAsMHg4MCwweDA1fSB9LAoreyAgNSwgMHgwYTg4LCAwLCB7MHgwYywweGJjLDB4MDAsMHgwMSwweDBkfSB9LAoreyAgNSwgMHgwYThkLCAwLCB7MHhlNSwweDM4LDB4YjQsMHgwMSwweDBlfSB9LAoreyAxMywgMHgwYTkyLCAwLCB7MHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MDQsMHhmNywweGQwLDB4MDUsMHhkMCwweDA0LDB4NzUsMHgzOH0gfSwKK3sgIDEsIDB4MGE5ZiwgMCwgezB4MDB9IH0sCit7ICA3LCAweDBhYTAsIDAsIHsweGU1LDB4MzEsMHg3MCwweDAzLDB4MDIsMHgwOSwweDJhfSB9LAoreyAxMCwgMHgwYWE3LCAwLCB7MHg5MCwweDdmLDB4YzksMHhlMCwweGZhLDB4NzAsMHgwMywweDAyLDB4MGMsMHgyZH0gfSwKK3sgMTQsIDB4MGFiMSwgMCwgezB4OTAsMHg3ZiwweDk2LDB4ZTAsMHhmYSwweDkwLDB4N2YsMHg5NiwweDc0LDB4ODAsMHg2NSwweDAyLDB4ZjAsMHg5MH0gfSwKK3sgIDksIDB4MGFiZiwgMCwgezB4N2QsMHhjMCwweGUwLDB4ZmEsMHhiYSwweDJjLDB4MDIsMHg4MCwweDAzfSB9LAoreyAgMywgMHgwYWM4LCAwLCB7MHgwMiwweDBiLDB4MzZ9IH0sCit7ICA1LCAweDBhY2IsIDAsIHsweDc1LDB4MzIsMHgwMCwweDdiLDB4MDB9IH0sCit7ICAzLCAweDBhZDAsIDAsIHsweGJiLDB4NjQsMHgwMH0gfSwKK3sgIDIsIDB4MGFkMywgMCwgezB4NTAsMHgxY30gfSwKK3sgMTQsIDB4MGFkNSwgMCwgezB4YzAsMHgwMiwweGMwLDB4MDMsMHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MDEsMHhkZCwweGQwLDB4MDUsMHhkMH0gfSwKK3sgMTMsIDB4MGFlMywgMCwgezB4MDQsMHhkMCwweDAzLDB4ZDAsMHgwMiwweDkwLDB4ODgsMHgwZiwweGUwLDB4ZjUsMHg0NywweDBiLDB4ODB9IH0sCit7ICAxLCAweDBhZjAsIDAsIHsweGRmfSB9LAoreyAxMywgMHgwYWYxLCAwLCB7MHhjMCwweDAyLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMiwweDA3LDB4MWUsMHgxMiwweDAzLDB4ZTEsMHgxMn0gfSwKK3sgMTIsIDB4MGFmZSwgMCwgezB4MDQsMHhmNywweGQwLDB4MDUsMHhkMCwweDA0LDB4ZDAsMHgwMiwweDc1LDB4NmUsMHgwMCwweDc1fSB9LAoreyAxMywgMHgwYjBhLCAwLCB7MHg2ZiwweDAxLDB4YzAsMHgwMiwweGMwLDB4MDQsMHhjMCwweDA1LDB4MTIsMHgxMSwweDQ0LDB4ZDAsMHgwNX0gfSwKK3sgIDksIDB4MGIxNywgMCwgezB4ZDAsMHgwNCwweGQwLDB4MDIsMHg3NSwweDcwLDB4NGQsMHg3NSwweDcxfSB9LAoreyAxMSwgMHgwYjIwLCAwLCB7MHgwYywweDc1LDB4NzIsMHgwMiwweGMwLDB4MDIsMHhjMCwweDA0LDB4YzAsMHgwNSwweDEyfSB9LAoreyAxMSwgMHgwYjJiLCAwLCB7MHgxMSwweDc1LDB4ZDAsMHgwNSwweGQwLDB4MDQsMHhkMCwweDAyLDB4MDIsMHgwYywweDJkfSB9LAoreyAgMywgMHgwYjM2LCAwLCB7MHhiYSwweDJhLDB4M2J9IH0sCit7IDEzLCAweDBiMzksIDAsIHsweDkwLDB4N2YsMHg5OCwweDc0LDB4MjAsMHhmMCwweGMwLDB4MDIsMHhjMCwweDA0LDB4YzAsMHgwNSwweDEyfSB9LAoreyAxNCwgMHgwYjQ2LCAwLCB7MHgwMSwweGRkLDB4ZDAsMHgwNSwweGQwLDB4MDQsMHhkMCwweDAyLDB4OTAsMHg3ZiwweDk4LDB4NzQsMHgyOCwweGYwfSB9LAoreyAgMiwgMHgwYjU0LCAwLCB7MHg3YiwweDAwfSB9LAoreyAgMywgMHgwYjU2LCAwLCB7MHhiYiwweDBhLDB4MDB9IH0sCit7ICA1LCAweDBiNTksIDAsIHsweDQwLDB4MDMsMHgwMiwweDBjLDB4MmR9IH0sCit7IDE0LCAweDBiNWUsIDAsIHsweGMwLDB4MDIsMHhjMCwweDAzLDB4YzAsMHgwNCwweGMwLDB4MDUsMHgxMiwweDAxLDB4ZGQsMHhkMCwweDA1LDB4ZDB9IH0sCit7ICA4LCAweDBiNmMsIDAsIHsweDA0LDB4ZDAsMHgwMywweGQwLDB4MDIsMHgwYiwweDgwLDB4ZTJ9IH0sCit7ICAzLCAweDBiNzQsIDAsIHsweGJhLDB4MmIsMHgxYX0gfSwKK3sgIDgsIDB4MGI3NywgMCwgezB4OTAsMHg3ZiwweGM5LDB4ZTAsMHhmYiwweGJiLDB4NDAsMHgxMn0gfSwKK3sgMTQsIDB4MGI3ZiwgMCwgezB4YzAsMHgwMiwweGMwLDB4MDQsMHhjMCwweDA1LDB4MTIsMHgxMiwweDA1LDB4ZDAsMHgwNSwweGQwLDB4MDQsMHhkMH0gfSwKK3sgIDQsIDB4MGI4ZCwgMCwgezB4MDIsMHgwMiwweDBjLDB4MmR9IH0sCit7ICAzLCAweDBiOTEsIDAsIHsweGJhLDB4MTAsMHgxZn0gfSwKK3sgMTQsIDB4MGI5NCwgMCwgezB4OTAsMHg3ZiwweDk2LDB4ZTAsMHhmYiwweDkwLDB4N2YsMHg5NiwweDc0LDB4ODAsMHg2NSwweDAzLDB4ZjAsMHhjMH0gfSwKK3sgMTQsIDB4MGJhMiwgMCwgezB4MDIsMHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MTAsMHgzZCwweGQwLDB4MDUsMHhkMCwweDA0LDB4ZDAsMHgwMn0gfSwKK3sgIDMsIDB4MGJiMCwgMCwgezB4MDIsMHgwYywweDJkfSB9LAoreyAgMywgMHgwYmIzLCAwLCB7MHhiYSwweDExLDB4MTJ9IH0sCit7IDE0LCAweDBiYjYsIDAsIHsweGMwLDB4MDIsMHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MTAsMHg2YSwweGQwLDB4MDUsMHhkMCwweDA0LDB4ZDB9IH0sCit7ICA0LCAweDBiYzQsIDAsIHsweDAyLDB4MDIsMHgwYywweDJkfSB9LAoreyAgMywgMHgwYmM4LCAwLCB7MHhiYSwweDEyLDB4MTJ9IH0sCit7IDE0LCAweDBiY2IsIDAsIHsweGMwLDB4MDIsMHhjMCwweDA0LDB4YzAsMHgwNSwweDEyLDB4MTAsMHg4ZiwweGQwLDB4MDUsMHhkMCwweDA0LDB4ZDB9IH0sCit7ICA0LCAweDBiZDksIDAsIHsweDAyLDB4MDIsMHgwYywweDJkfSB9LAoreyAgMywgMHgwYmRkLCAwLCB7MHhiYSwweDEzLDB4MGJ9IH0sCit7IDExLCAweDBiZTAsIDAsIHsweDkwLDB4N2QsMHhjMSwweGUwLDB4ZmIsMHg5MCwweDg4LDB4MDAsMHhmMCwweDgwLDB4NDJ9IH0sCit7ICAzLCAweDBiZWIsIDAsIHsweGJhLDB4MTQsMHgxMX0gfSwKK3sgMTQsIDB4MGJlZSwgMCwgezB4YzAsMHgwMiwweGMwLDB4MDQsMHhjMCwweDA1LDB4MTIsMHgxMSwweGRkLDB4ZDAsMHgwNSwweGQwLDB4MDQsMHhkMH0gfSwKK3sgIDMsIDB4MGJmYywgMCwgezB4MDIsMHg4MCwweDJlfSB9LAoreyAgMywgMHgwYmZmLCAwLCB7MHhiYSwweDE1LDB4MWR9IH0sCit7IDEyLCAweDBjMDIsIDAsIHsweDkwLDB4N2QsMHhjMSwweGUwLDB4ZjUsMHg3NSwweDkwLDB4N2QsMHhjMiwweGUwLDB4ZjUsMHg3Nn0gfSwKK3sgMTQsIDB4MGMwZSwgMCwgezB4YzAsMHgwMiwweGMwLDB4MDQsMHhjMCwweDA1LDB4MTIsMHgxMywweGZlLDB4ZDAsMHgwNSwweGQwLDB4MDQsMHhkMH0gfSwKK3sgIDMsIDB4MGMxYywgMCwgezB4MDIsMHg4MCwweDBlfSB9LAoreyAgMywgMHgwYzFmLCAwLCB7MHhiYSwweDE2LDB4MGJ9IH0sCit7IDExLCAweDBjMjIsIDAsIHsweGMwLDB4MDQsMHhjMCwweDA1LDB4MTIsMHgxMywweGEzLDB4ZDAsMHgwNSwweGQwLDB4MDR9IH0sCit7IDExLCAweDBjMmQsIDAsIHsweDkwLDB4N2YsMHhjOSwweGU0LDB4ZjAsMHg3NSwweDMxLDB4MDAsMHgwMiwweDA5LDB4MmF9IH0sCit7ICAxLCAweDBjMzgsIDAsIHsweDIyfSB9LAoreyAgNywgMHgwYzM5LCAwLCB7MHg1MywweDU1LDB4NTAsMHg0NSwweDRlLDB4NDQsMHgwMH0gfSwKK3sgIDcsIDB4MGM0MCwgMCwgezB4NTIsMHg0NSwweDUzLDB4NTUsMHg0ZCwweDQ1LDB4MDB9IH0sCit7ICA2LCAweDBjNDcsIDAsIHsweDIwLDB4NTYsMHg2ZiwweDZjLDB4MjAsMHgwMH0gfSwKK3sgMTMsIDB4MGM0ZCwgMCwgezB4NDQsMHg0MSwweDQyLDB4NTUsMHg1MywweDQyLDB4MjAsMHg3NiwweDMxLDB4MmUsMHgzMCwweDMwLDB4MDB9IH0sCit7IDE0LCAweDBjNWEsIDAsIHsweGMwLDB4ZTAsMHhjMCwweGYwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweDAyLDB4YzAsMHgwMywweGMwLDB4MDR9IH0sCit7IDE0LCAweDBjNjgsIDAsIHsweGMwLDB4MDUsMHhjMCwweDA2LDB4YzAsMHgwNywweGMwLDB4MDAsMHhjMCwweDAxLDB4YzAsMHhkMCwweDc1LDB4ZDB9IH0sCit7IDEzLCAweDBjNzYsIDAsIHsweDAwLDB4YzAsMHg4NiwweDc1LDB4ODYsMHgwMCwweGU1LDB4OTEsMHhjMiwweGU0LDB4ZjUsMHg5MSwweDkwfSB9LAoreyAxNCwgMHgwYzgzLCAwLCB7MHg3ZiwweGFiLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGU4LDB4ZTAsMHhmYSwweDkwLDB4N2YsMHhlOSwweGUwfSB9LAoreyAgNiwgMHgwYzkxLCAwLCB7MHhmYiwweGJiLDB4MDAsMHgwMiwweDgwLDB4MDN9IH0sCit7ICAzLCAweDBjOTcsIDAsIHsweDAyLDB4MGQsMHgzOH0gfSwKK3sgIDMsIDB4MGM5YSwgMCwgezB4YmEsMHg4MCwweDE0fSB9LAoreyAxNCwgMHgwYzlkLCAwLCB7MHg5MCwweDdmLDB4MDAsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4MDEsMHhlNCwweGYwLDB4OTAsMHg3ZiwweGI1fSB9LAoreyAgNiwgMHgwY2FiLCAwLCB7MHg3NCwweDAyLDB4ZjAsMHgwMiwweDBlLDB4Y2R9IH0sCit7ICA1LCAweDBjYjEsIDAsIHsweGJhLDB4ODIsMHgwMiwweDgwLDB4MDN9IH0sCit7ICAzLCAweDBjYjYsIDAsIHsweDAyLDB4MGQsMHgxZH0gfSwKK3sgIDgsIDB4MGNiOSwgMCwgezB4OTAsMHg3ZiwweGVjLDB4ZTAsMHhmYywweGJjLDB4MDEsMHgwMH0gfSwKK3sgIDIsIDB4MGNjMSwgMCwgezB4NDAsMHgyMX0gfSwKK3sgIDYsIDB4MGNjMywgMCwgezB4YzMsMHg3NCwweDA3LDB4OWMsMHg0MCwweDFifSB9LAoreyAxNCwgMHgwY2M5LCAwLCB7MHhlYywweDI0LDB4ZmYsMHgyNSwweGUwLDB4ZmQsMHgyNCwweGM2LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1fSB9LAoreyAxMywgMHgwY2Q3LCAwLCB7MHg4MywweGUwLDB4ZmQsMHg1MywweDA1LDB4MDEsMHg5MCwweDdmLDB4MDAsMHhlZCwweGYwLDB4ODAsMHgyYn0gfSwKK3sgIDMsIDB4MGNlNCwgMCwgezB4YmMsMHg4MSwweDAwfSB9LAoreyAgMiwgMHgwY2U3LCAwLCB7MHg0MCwweDIxfSB9LAoreyAgNiwgMHgwY2U5LCAwLCB7MHhjMywweDc0LDB4ODcsMHg5YywweDQwLDB4MWJ9IH0sCit7IDE0LCAweDBjZWYsIDAsIHsweGVjLDB4MjQsMHg3ZiwweDI1LDB4ZTAsMHhmYywweDI0LDB4YjYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjV9IH0sCit7IDEzLCAweDBjZmQsIDAsIHsweDgzLDB4ZTAsMHhmYywweDUzLDB4MDQsMHgwMSwweDkwLDB4N2YsMHgwMCwweGVjLDB4ZjAsMHg4MCwweDA1fSB9LAoreyAgNSwgMHgwZDBhLCAwLCB7MHg5MCwweDdmLDB4MDAsMHhlNCwweGYwfSB9LAoreyAxNCwgMHgwZDBmLCAwLCB7MHg5MCwweDdmLDB4MDEsMHhlNCwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMiwweGYwLDB4MDIsMHgwZSwweGNkfSB9LAoreyAgNSwgMHgwZDFkLCAwLCB7MHhiYSwweDgxLDB4MDIsMHg4MCwweDAzfSB9LAoreyAgMywgMHgwZDIyLCAwLCB7MHgwMiwweDBlLDB4YzV9IH0sCit7IDE0LCAweDBkMjUsIDAsIHsweDkwLDB4N2YsMHgwMCwweGU0LDB4ZjAsMHg5MCwweDdmLDB4MDEsMHhlNCwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzR9IH0sCit7ICA1LCAweDBkMzMsIDAsIHsweDAyLDB4ZjAsMHgwMiwweDBlLDB4Y2R9IH0sCit7ICAzLCAweDBkMzgsIDAsIHsweGJiLDB4MDEsMHgyZH0gfSwKK3sgIDYsIDB4MGQzYiwgMCwgezB4YmEsMHgwMCwweDAzLDB4MDIsMHgwZSwweGNkfSB9LAoreyAgMywgMHgwZDQxLCAwLCB7MHhiYSwweDAyLDB4MTF9IH0sCit7IDEzLCAweDBkNDQsIDAsIHsweDc1LDB4NTksMHgwMCwweGMwLDB4MDIsMHhjMCwweDAzLDB4MTIsMHgwZSwweGYwLDB4ZDAsMHgwMywweGQwfSB9LAoreyAgNCwgMHgwZDUxLCAwLCB7MHgwMiwweDAyLDB4MGUsMHhjZH0gfSwKK3sgIDUsIDB4MGQ1NSwgMCwgezB4YmEsMHgyMSwweDAyLDB4ODAsMHgwM30gfSwKK3sgIDMsIDB4MGQ1YSwgMCwgezB4MDIsMHgwZSwweGNkfSB9LAoreyAxMSwgMHgwZDVkLCAwLCB7MHg3NSwweDM3LDB4MDEsMHg5MCwweDdmLDB4YzUsMHhlNCwweGYwLDB4MDIsMHgwZSwweGNkfSB9LAoreyAgMywgMHgwZDY4LCAwLCB7MHhiYiwweDAzLDB4MWZ9IH0sCit7ICA2LCAweDBkNmIsIDAsIHsweGJhLDB4MDAsMHgwMywweDAyLDB4MGUsMHhjZH0gfSwKK3sgIDUsIDB4MGQ3MSwgMCwgezB4YmEsMHgwMiwweDAyLDB4ODAsMHgwM30gfSwKK3sgIDMsIDB4MGQ3NiwgMCwgezB4MDIsMHgwZSwweGNkfSB9LAoreyAxMywgMHgwZDc5LCAwLCB7MHg3NSwweDU5LDB4MDEsMHhjMCwweDAyLDB4YzAsMHgwMywweDEyLDB4MGUsMHhmMCwweGQwLDB4MDMsMHhkMH0gfSwKK3sgIDQsIDB4MGQ4NiwgMCwgezB4MDIsMHgwMiwweDBlLDB4Y2R9IH0sCit7ICAzLCAweDBkOGEsIDAsIHsweGJiLDB4MDYsMHg1NH0gfSwKK3sgIDUsIDB4MGQ4ZCwgMCwgezB4YmEsMHg4MCwweDAyLDB4ODAsMHgwM30gfSwKK3sgIDMsIDB4MGQ5MiwgMCwgezB4MDIsMHgwZSwweGM1fSB9LAoreyAgOCwgMHgwZDk1LCAwLCB7MHg5MCwweDdmLDB4ZWIsMHhlMCwweGZjLDB4YmMsMHgwMSwweDE1fSB9LAoreyAxMiwgMHgwZDlkLCAwLCB7MHg3YywweGZiLDB4N2QsMHgwZiwweDhkLDB4MDYsMHg3ZiwweDAwLDB4OTAsMHg3ZiwweGQ0LDB4ZWV9IH0sCit7ICA5LCAweDBkYTksIDAsIHsweGYwLDB4OTAsMHg3ZiwweGQ1LDB4ZWMsMHhmMCwweDAyLDB4MGUsMHhjZH0gfSwKK3sgMTAsIDB4MGRiMiwgMCwgezB4OTAsMHg3ZiwweGViLDB4ZTAsMHhmYywweGJjLDB4MDIsMHgwMiwweDgwLDB4MDN9IH0sCit7ICAzLCAweDBkYmMsIDAsIHsweDAyLDB4MGUsMHhjNX0gfSwKK3sgMTAsIDB4MGRiZiwgMCwgezB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmYywweGJjLDB4MDAsMHgwMiwweDgwLDB4MDN9IH0sCit7ICAzLCAweDBkYzksIDAsIHsweDAyLDB4MGUsMHhjNX0gfSwKK3sgMTIsIDB4MGRjYywgMCwgezB4N2MsMHgzYiwweDdkLDB4MGYsMHg4ZCwweDA2LDB4N2YsMHgwMCwweDkwLDB4N2YsMHhkNCwweGVlfSB9LAoreyAgOSwgMHgwZGQ4LCAwLCB7MHhmMCwweDkwLDB4N2YsMHhkNSwweGVjLDB4ZjAsMHgwMiwweDBlLDB4Y2R9IH0sCit7ICA2LCAweDBkZTEsIDAsIHsweGJiLDB4MDcsMHgwMywweDAyLDB4MGUsMHhjNX0gfSwKK3sgIDMsIDB4MGRlNywgMCwgezB4YmIsMHgwOCwweDEwfSB9LAoreyAxMywgMHgwZGVhLCAwLCB7MHhhYywweDQ4LDB4OTAsMHg3ZiwweDAwLDB4ZWMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDEsMHhmMH0gfSwKK3sgIDMsIDB4MGRmNywgMCwgezB4MDIsMHgwZSwweGNkfSB9LAoreyAgMywgMHgwZGZhLCAwLCB7MHhiYiwweDA5LDB4MzF9IH0sCit7ICA1LCAweDBkZmQsIDAsIHsweGJhLDB4MDAsMHgwMiwweDgwLDB4MDN9IH0sCit7ICAzLCAweDBlMDIsIDAsIHsweDAyLDB4MGUsMHhjNX0gfSwKK3sgMTQsIDB4MGUwNSwgMCwgezB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmYywweGMzLDB4NzQsMHgwMSwweDljLDB4NTAsMHgwMywweDAyLDB4MGUsMHhjNX0gfSwKK3sgIDgsIDB4MGUxMywgMCwgezB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmYywweGJjLDB4MDAsMHgwYX0gfSwKK3sgMTAsIDB4MGUxYiwgMCwgezB4OTAsMHgxNywweDIxLDB4ZTQsMHhmMCwweDkwLDB4MTcsMHgyMiwweGU0LDB4ZjB9IH0sCit7ICA5LCAweDBlMjUsIDAsIHsweDkwLDB4N2YsMHhlYSwweGUwLDB4ZjUsMHg0OCwweDAyLDB4MGUsMHhjZH0gfSwKK3sgIDMsIDB4MGUyZSwgMCwgezB4YmIsMHgwYSwweDI3fSB9LAoreyAgNSwgMHgwZTMxLCAwLCB7MHhiYSwweDgxLDB4MDIsMHg4MCwweDAzfSB9LAoreyAgMywgMHgwZTM2LCAwLCB7MHgwMiwweDBlLDB4YzV9IH0sCit7IDE0LCAweDBlMzksIDAsIHsweDkwLDB4N2YsMHhlYywweGUwLDB4ZmEsMHgyNCwweDIwLDB4ZmEsMHhlNCwweDM0LDB4MTcsMHhmYywweDhhLDB4ODJ9IH0sCit7IDE0LCAweDBlNDcsIDAsIHsweDhjLDB4ODMsMHhlMCwweGZhLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAxLDB4ZjB9IH0sCit7ICAzLCAweDBlNTUsIDAsIHsweDAyLDB4MGUsMHhjZH0gfSwKK3sgIDUsIDB4MGU1OCwgMCwgezB4YmIsMHgwYiwweDAyLDB4ODAsMHgwM30gfSwKK3sgIDMsIDB4MGU1ZCwgMCwgezB4MDIsMHgwZSwweGE5fSB9LAoreyAxMywgMHgwZTYwLCAwLCB7MHg5MCwweDE3LDB4MjAsMHhlNCwweGYwLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHhmYSwweGJhLDB4MDEsMHgxYX0gfSwKK3sgIDgsIDB4MGU2ZCwgMCwgezB4OTAsMHg3ZiwweGVkLDB4ZTAsMHhmYSwweGJhLDB4MDAsMHgxMn0gfSwKK3sgMTQsIDB4MGU3NSwgMCwgezB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmYSwweDkwLDB4MTcsMHgyMSwweGYwLDB4YzAsMHgwMywweDEyLDB4MDQsMHhlMn0gfSwKK3sgIDQsIDB4MGU4MywgMCwgezB4ZDAsMHgwMywweDgwLDB4NDZ9IH0sCit7ICA4LCAweDBlODcsIDAsIHsweDkwLDB4N2YsMHhlYywweGUwLDB4ZmEsMHhiYSwweDAyLDB4M2V9IH0sCit7ICA4LCAweDBlOGYsIDAsIHsweDkwLDB4N2YsMHhlZCwweGUwLDB4ZmEsMHhiYSwweDAwLDB4MzZ9IH0sCit7IDEzLCAweDBlOTcsIDAsIHsweGMwLDB4MDMsMHgxMiwweDA0LDB4ZWYsMHhkMCwweDAzLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmYSwweDkwfSB9LAoreyAgNSwgMHgwZWE0LCAwLCB7MHgxNywweDIyLDB4ZjAsMHg4MCwweDI0fSB9LAoreyAgNSwgMHgwZWE5LCAwLCB7MHhiYiwweDEyLDB4MDIsMHg4MCwweDE3fSB9LAoreyAgNSwgMHgwZWFlLCAwLCB7MHhiYiwweDgxLDB4MDIsMHg4MCwweDBkfSB9LAoreyAgNSwgMHgwZWIzLCAwLCB7MHhiYiwweDgzLDB4MDIsMHg4MCwweDA4fSB9LAoreyAgNSwgMHgwZWI4LCAwLCB7MHhiYiwweDgyLDB4MDIsMHg4MCwweDAzfSB9LAoreyAgMywgMHgwZWJkLCAwLCB7MHhiYiwweDg0LDB4MDV9IH0sCit7ICA1LCAweDBlYzAsIDAsIHsweDEyLDB4MDYsMHg0ZSwweDgwLDB4MDh9IH0sCit7ICA4LCAweDBlYzUsIDAsIHsweDkwLDB4N2YsMHhiNCwweDc0LDB4MDMsMHhmMCwweDgwLDB4MDZ9IH0sCit7ICA2LCAweDBlY2QsIDAsIHsweDkwLDB4N2YsMHhiNCwweDc0LDB4MDIsMHhmMH0gfSwKK3sgIDIsIDB4MGVkMywgMCwgezB4ZDAsMHg4Nn0gfSwKK3sgMTQsIDB4MGVkNSwgMCwgezB4ZDAsMHhkMCwweGQwLDB4MDEsMHhkMCwweDAwLDB4ZDAsMHgwNywweGQwLDB4MDYsMHhkMCwweDA1LDB4ZDAsMHgwNH0gfSwKK3sgMTMsIDB4MGVlMywgMCwgezB4ZDAsMHgwMywweGQwLDB4MDIsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZjAsMHhkMCwweGUwLDB4MzJ9IH0sCit7IDExLCAweDBlZjAsIDAsIHsweDkwLDB4N2YsMHhlYywweGUwLDB4ZjUsMHg1YSwweGMzLDB4OTQsMHgwMSwweDQwLDB4MWR9IH0sCit7ICA3LCAweDBlZmIsIDAsIHsweGMzLDB4NzQsMHgwNywweDk1LDB4NWEsMHg0MCwweDE2fSB9LAoreyAxMywgMHgwZjAyLCAwLCB7MHhlNSwweDVhLDB4MjQsMHhmZiwweDI1LDB4ZTAsMHhmYSwweDI0LDB4YzYsMHhmNSwweDgyLDB4ZTQsMHgzNH0gfSwKK3sgIDksIDB4MGYwZiwgMCwgezB4N2YsMHhmNSwweDgzLDB4YWEsMHg1OSwweGVhLDB4ZjAsMHg4MCwweDIyfSB9LAoreyAgNywgMHgwZjE4LCAwLCB7MHhjMywweGU1LDB4NWEsMHg5NCwweDgxLDB4NDAsMHgxYn0gfSwKK3sgIDcsIDB4MGYxZiwgMCwgezB4YzMsMHg3NCwweDg3LDB4OTUsMHg1YSwweDQwLDB4MTR9IH0sCit7IDEzLCAweDBmMjYsIDAsIHsweGU1LDB4NWEsMHgyNCwweGZmLDB4MjUsMHhlMCwweGZhLDB4MjQsMHhiNiwweGY1LDB4ODIsMHhlNCwweDM0fSB9LAoreyAgNywgMHgwZjMzLCAwLCB7MHg3ZiwweGY1LDB4ODMsMHhhYSwweDU5LDB4ZWEsMHhmMH0gfSwKK3sgIDEsIDB4MGYzYSwgMCwgezB4MjJ9IH0sCit7IDE0LCAweDBmM2IsIDAsIHsweDA5LDB4MDIsMHhiYSwweDAwLDB4MDMsMHgwMSwweDAwLDB4NDAsMHgwMCwweDA5LDB4MDQsMHgwMCwweDAwLDB4MDB9IH0sCit7IDE0LCAweDBmNDksIDAsIHsweDAxLDB4MDEsMHgwMCwweDAwLDB4MDksMHgyNCwweDAxLDB4MDAsMHgwMSwweDNkLDB4MDAsMHgwMSwweDAxLDB4MGN9IH0sCit7IDE0LCAweDBmNTcsIDAsIHsweDI0LDB4MDIsMHgwMSwweDEwLDB4MDcsMHgwMCwweDAyLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwZCwweDI0LDB4MDZ9IH0sCit7IDE0LCAweDBmNjUsIDAsIHsweDAzLDB4MDEsMHgwMiwweDE1LDB4MDAsMHgwMywweDAwLDB4MDMsMHgwMCwweDAwLDB4MDksMHgyNCwweDAzLDB4MDJ9IH0sCit7IDE0LCAweDBmNzMsIDAsIHsweDAxLDB4MDEsMHgwMCwweDAxLDB4MDAsMHgwOSwweDI0LDB4MDMsMHgwNCwweDAyLDB4MDMsMHgwMCwweDAzLDB4MDB9IH0sCit7IDE0LCAweDBmODEsIDAsIHsweDA5LDB4MjQsMHgwMywweDA1LDB4MDMsMHgwNiwweDAwLDB4MDEsMHgwMCwweDA5LDB4MDQsMHgwMSwweDAwLDB4MDB9IH0sCit7IDE0LCAweDBmOGYsIDAsIHsweDAxLDB4MDIsMHgwMCwweDAwLDB4MDksMHgwNCwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDd9IH0sCit7IDE0LCAweDBmOWQsIDAsIHsweDI0LDB4MDEsMHgwMiwweDAxLDB4MDEsMHgwMCwweDBiLDB4MjQsMHgwMiwweDAxLDB4MDIsMHgwMiwweDEwLDB4MDF9IH0sCit7IDE0LCAweDBmYWIsIDAsIHsweDgwLDB4YmIsMHgwMCwweDA5LDB4MDUsMHg4OCwweDA1LDB4MDAsMHgwMSwweDAxLDB4MDAsMHgwMCwweDA3LDB4MjV9IH0sCit7IDE0LCAweDBmYjksIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOSwweDA0LDB4MDIsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7IDE0LCAweDBmYzcsIDAsIHsweDA3LDB4MDUsMHg4MiwweDAyLDB4NDAsMHgwMCwweDAwLDB4MDcsMHgwNSwweDAyLDB4MDIsMHg0MCwweDAwLDB4MDB9IH0sCit7IDE0LCAweDBmZDUsIDAsIHsweDA5LDB4MDQsMHgwMiwweDAxLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA3LDB4MDUsMHg4MiwweDAyLDB4NDB9IH0sCit7IDE0LCAweDBmZTMsIDAsIHsweDAwLDB4MDAsMHgwNywweDA1LDB4MDIsMHgwMiwweDQwLDB4MDAsMHgwMCwweDA5LDB4MDUsMHg4OSwweDA1LDB4YTB9IH0sCit7IDEwLCAweDBmZjEsIDAsIHsweDAxLDB4MDEsMHgwMCwweDAwLDB4MDAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDAwfSB9LAoreyAxNCwgMHgwZmZiLCAwLCB7MHgxMiwweDAxLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDcsMHgwNSwweDk5LDB4OTksMHgwMCwweDAxfSB9LAoreyAxNCwgMHgxMDA5LCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDksMHgwMiwweGJhfSB9LAoreyAgNCwgMHgxMDE3LCAwLCB7MHgwMCwweDAzLDB4MDEsMHgwMH0gfSwKK3sgIDIsIDB4MTAxYiwgMCwgezB4N2EsMHgwMH0gfSwKK3sgIDMsIDB4MTAxZCwgMCwgezB4YmEsMHgwNSwweDAwfSB9LAoreyAgMiwgMHgxMDIwLCAwLCB7MHg1MCwweDE3fSB9LAoreyAgOCwgMHgxMDIyLCAwLCB7MHg5MCwweDdmLDB4YTUsMHhlMCwweGZiLDB4MzAsMHhlMCwweDA1fSB9LAoreyAgNSwgMHgxMDJhLCAwLCB7MHg5MCwweDAwLDB4MDEsMHg4MCwweDBkfSB9LAoreyAxMCwgMHgxMDJmLCAwLCB7MHhjMCwweDAyLDB4MTIsMHgwMSwweGRkLDB4ZDAsMHgwMiwweDBhLDB4ODAsMHhlNH0gfSwKK3sgIDMsIDB4MTAzOSwgMCwgezB4OTAsMHgwMCwweDAxfSB9LAoreyAgMSwgMHgxMDNjLCAwLCB7MHgyMn0gfSwKK3sgMTQsIDB4MTAzZCwgMCwgezB4OTAsMHg3ZCwweGMxLDB4ZTAsMHhmOSwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmYiwweDdjLDB4MDAsMHg3ZH0gfSwKK3sgIDQsIDB4MTA0YiwgMCwgezB4N2UsMHhlYiwweDYwLDB4MTJ9IH0sCit7IDE0LCAweDEwNGYsIDAsIHsweDg5LDB4ODIsMHg4YSwweDgzLDB4ZTAsMHhhMywweGE5LDB4ODIsMHhhYSwweDgzLDB4OGMsMHg4MiwweDhkLDB4ODN9IH0sCit7ICA0LCAweDEwNWQsIDAsIHsweGYwLDB4MGMsMHhkYiwweGVlfSB9LAoreyAgOCwgMHgxMDYxLCAwLCB7MHg5MCwweDdkLDB4YzMsMHhlMCwweDkwLDB4N2YsMHhiOSwweGYwfSB9LAoreyAgMSwgMHgxMDY5LCAwLCB7MHgyMn0gfSwKK3sgMTQsIDB4MTA2YSwgMCwgezB4OTAsMHg3ZCwweGMxLDB4ZTAsMHhmOSwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmYiwweDdjLDB4YzQsMHg3ZH0gfSwKK3sgIDQsIDB4MTA3OCwgMCwgezB4N2QsMHhlYiwweDYwLDB4ZTV9IH0sCit7IDE0LCAweDEwN2MsIDAsIHsweDhjLDB4ODIsMHg4ZCwweDgzLDB4ZTAsMHgwYywweDg5LDB4ODIsMHg4YSwweDgzLDB4ZjAsMHhhMywweGE5LDB4ODJ9IH0sCit7ICA0LCAweDEwOGEsIDAsIHsweGFhLDB4ODMsMHhkYiwweGVlfSB9LAoreyAgMSwgMHgxMDhlLCAwLCB7MHgyMn0gfSwKK3sgMTQsIDB4MTA4ZiwgMCwgezB4OTAsMHg3ZiwweGE1LDB4NzQsMHg4MCwweGYwLDB4MDUsMHg4NiwweDkwLDB4N2QsMHhjMSwweGUwLDB4MDUsMHg4Nn0gfSwKK3sgMTQsIDB4MTA5ZCwgMCwgezB4YTMsMHhmMCwweDEyLDB4MTAsMHgxYiwweDkwLDB4N2YsMHhhNiwweDA1LDB4ODYsMHhhMywweGEzLDB4ZTAsMHhmOX0gfSwKK3sgIDUsIDB4MTBhYiwgMCwgezB4NjAsMHgxNiwweGEzLDB4MDUsMHg4Nn0gfSwKK3sgMTMsIDB4MTBiMCwgMCwgezB4OTAsMHg3ZiwweGE2LDB4MDUsMHg4NiwweGUwLDB4YTMsMHgwNSwweDg2LDB4ZjAsMHhjMCwweDAxLDB4MTJ9IH0sCit7ICA2LCAweDEwYmQsIDAsIHsweDEwLDB4MWIsMHhkMCwweDAxLDB4ZDksMHhlZH0gfSwKK3sgIDYsIDB4MTBjMywgMCwgezB4OTAsMHg3ZiwweGE1LDB4NzQsMHg0MCwweGYwfSB9LAoreyAgMSwgMHgxMGM5LCAwLCB7MHgyMn0gfSwKK3sgIDgsIDB4MTBjYSwgMCwgezB4OTAsMHg4OCwweDAyLDB4NzQsMHgwMSwweGYwLDB4N2EsMHgwMH0gfSwKK3sgIDMsIDB4MTBkMiwgMCwgezB4YmEsMHhmZiwweDAwfSB9LAoreyAgMiwgMHgxMGQ1LCAwLCB7MHg1MCwweDBhfSB9LAoreyAxMCwgMHgxMGQ3LCAwLCB7MHhjMCwweDAyLDB4MTIsMHgwMSwweGRkLDB4ZDAsMHgwMiwweDBhLDB4ODAsMHhmMX0gfSwKK3sgIDEsIDB4MTBlMSwgMCwgezB4MjJ9IH0sCit7ICA1LCAweDEwZTIsIDAsIHsweGU1LDB4NmIsMHhiNCwweGMwLDB4MDh9IH0sCit7ICA4LCAweDEwZTcsIDAsIHsweDkwLDB4ODgsMHgwMywweGU1LDB4NmMsMHhmMCwweDgwLDB4MDZ9IH0sCit7ICA2LCAweDEwZWYsIDAsIHsweDkwLDB4ODgsMHgwMiwweGU1LDB4NmMsMHhmMH0gfSwKK3sgIDQsIDB4MTBmNSwgMCwgezB4N2EsMHgwMCwweDdiLDB4MDB9IH0sCit7IDExLCAweDEwZjksIDAsIHsweGMzLDB4ZWEsMHg5NCwweDMyLDB4ZWIsMHg2NCwweDgwLDB4OTQsMHg4MCwweDUwLDB4MDd9IH0sCit7ICA1LCAweDExMDQsIDAsIHsweDBhLDB4YmEsMHgwMCwweDAxLDB4MGJ9IH0sCit7ICAyLCAweDExMDksIDAsIHsweDgwLDB4ZWV9IH0sCit7ICAxLCAweDExMGIsIDAsIHsweDIyfSB9LAoreyAxMCwgMHgxMTBjLCAwLCB7MHg5MCwweDg4LDB4MDMsMHhlNSwweDZkLDB4ZjAsMHgwNSwweDM5LDB4N2EsMHgwMH0gfSwKK3sgIDMsIDB4MTExNiwgMCwgezB4YmEsMHgyOCwweDAwfSB9LAoreyAgMiwgMHgxMTE5LCAwLCB7MHg1MCwweDAzfSB9LAoreyAgMywgMHgxMTFiLCAwLCB7MHgwYSwweDgwLDB4Zjh9IH0sCit7ICA1LCAweDExMWUsIDAsIHsweGU1LDB4MzksMHhiNCwweDEwLDB4MDh9IH0sCit7ICA4LCAweDExMjMsIDAsIHsweDkwLDB4ODgsMHgwMiwweDc0LDB4YzAsMHhmMCwweDgwLDB4MGV9IH0sCit7ICA1LCAweDExMmIsIDAsIHsweGU1LDB4MzksMHhiNCwweDIwLDB4MDl9IH0sCit7ICA5LCAweDExMzAsIDAsIHsweDkwLDB4ODgsMHgwMiwweDc0LDB4ODAsMHhmMCwweDc1LDB4MzksMHgwMH0gfSwKK3sgIDIsIDB4MTEzOSwgMCwgezB4N2EsMHgwMH0gfSwKK3sgIDMsIDB4MTEzYiwgMCwgezB4YmEsMHgyOCwweDAwfSB9LAoreyAgMiwgMHgxMTNlLCAwLCB7MHg1MCwweDAzfSB9LAoreyAgMywgMHgxMTQwLCAwLCB7MHgwYSwweDgwLDB4Zjh9IH0sCit7ICAxLCAweDExNDMsIDAsIHsweDIyfSB9LAoreyAgNCwgMHgxMTQ0LCAwLCB7MHhlNSwweDZmLDB4NjAsMHgwMn0gfSwKK3sgIDIsIDB4MTE0OCwgMCwgezB4ODAsMHgwN30gfSwKK3sgIDcsIDB4MTE0YSwgMCwgezB4N2EsMHgwMCwweDc1LDB4MzksMHgwMCwweDgwLDB4MDV9IH0sCit7ICA1LCAweDExNTEsIDAsIHsweDdhLDB4NDAsMHg3NSwweDM5LDB4MTB9IH0sCit7ICA5LCAweDExNTYsIDAsIHsweGU1LDB4NmUsMHgyYSwweGZhLDB4ZTUsMHg2ZSwweDI1LDB4MzksMHhmNX0gfSwKK3sgMTAsIDB4MTE1ZiwgMCwgezB4MzksMHg5MCwweDg4LDB4MDIsMHg3NCwweDgwLDB4MmEsMHhmMCwweDdhLDB4MDB9IH0sCit7ICA4LCAweDExNjksIDAsIHsweGMzLDB4ZWEsMHg2NCwweDgwLDB4OTQsMHhhOCwweDUwLDB4MDN9IH0sCit7ICAzLCAweDExNzEsIDAsIHsweDBhLDB4ODAsMHhmNX0gfSwKK3sgIDEsIDB4MTE3NCwgMCwgezB4MjJ9IH0sCit7ICA2LCAweDExNzUsIDAsIHsweGFhLDB4NzAsMHhhYiwweDcxLDB4YWMsMHg3Mn0gfSwKK3sgMTIsIDB4MTE3YiwgMCwgezB4OGEsMHg4MiwweDhiLDB4ODMsMHg4YywweGYwLDB4MTIsMHgxNCwweGVlLDB4ZmQsMHg2MCwweDE4fSB9LAoreyAxMywgMHgxMTg3LCAwLCB7MHg4ZCwweDZkLDB4YzAsMHgwMiwweGMwLDB4MDMsMHhjMCwweDA0LDB4MTIsMHgxMSwweDBjLDB4ZDAsMHgwNH0gfSwKK3sgIDksIDB4MTE5NCwgMCwgezB4ZDAsMHgwMywweGQwLDB4MDIsMHgwYSwweGJhLDB4MDAsMHgwMSwweDBifSB9LAoreyAgMiwgMHgxMTlkLCAwLCB7MHg4MCwweGRjfSB9LAoreyAgMSwgMHgxMTlmLCAwLCB7MHgyMn0gfSwKK3sgMTMsIDB4MTFhMCwgMCwgezB4ZTUsMHg3MywweGM0LDB4NTQsMHgwZiwweGZhLDB4NTMsMHgwMiwweDBmLDB4YzMsMHg3NCwweDA5LDB4OWF9IH0sCit7ICAyLCAweDExYWQsIDAsIHsweDUwLDB4MDZ9IH0sCit7ICA2LCAweDExYWYsIDAsIHsweDc0LDB4MzcsMHgyYSwweGZiLDB4ODAsMHgwNH0gfSwKK3sgIDQsIDB4MTFiNSwgMCwgezB4NzQsMHgzMCwweDJhLDB4ZmJ9IH0sCit7IDEyLCAweDExYjksIDAsIHsweDhiLDB4NmQsMHhjMCwweDAzLDB4MTIsMHgxMSwweDBjLDB4ZDAsMHgwMywweGFhLDB4NzMsMHg1M30gfSwKK3sgIDgsIDB4MTFjNSwgMCwgezB4MDIsMHgwZiwweGMzLDB4NzQsMHgwOSwweDlhLDB4NTAsMHgwNn0gfSwKK3sgIDYsIDB4MTFjZCwgMCwgezB4NzQsMHgzNywweDJhLDB4ZmIsMHg4MCwweDA0fSB9LAoreyAgNCwgMHgxMWQzLCAwLCB7MHg3NCwweDMwLDB4MmEsMHhmYn0gfSwKK3sgIDUsIDB4MTFkNywgMCwgezB4OGIsMHg2ZCwweDEyLDB4MTEsMHgwY30gfSwKK3sgIDEsIDB4MTFkYywgMCwgezB4MjJ9IH0sCit7ICA3LCAweDExZGQsIDAsIHsweDkwLDB4N2QsMHhjMywweGUwLDB4ZmEsMHg2MCwweDBmfSB9LAoreyAxMiwgMHgxMWU0LCAwLCB7MHg5MCwweDdkLDB4YzEsMHhlMCwweGY1LDB4NmUsMHg5MCwweDdkLDB4YzIsMHhlMCwweGY1LDB4NmZ9IH0sCit7ICAzLCAweDExZjAsIDAsIHsweDEyLDB4MTEsMHg0NH0gfSwKK3sgMTIsIDB4MTFmMywgMCwgezB4OTAsMHg3ZCwweGZmLDB4ZTQsMHhmMCwweDc1LDB4NzAsMHhjNCwweDc1LDB4NzEsMHg3ZCwweDc1fSB9LAoreyAgNSwgMHgxMWZmLCAwLCB7MHg3MiwweDAxLDB4MTIsMHgxMSwweDc1fSB9LAoreyAgMSwgMHgxMjA0LCAwLCB7MHgyMn0gfSwKK3sgIDIsIDB4MTIwNSwgMCwgezB4N2EsMHgwNH0gfSwKK3sgIDMsIDB4MTIwNywgMCwgezB4YmEsMHg0MCwweDAwfSB9LAoreyAgMiwgMHgxMjBhLCAwLCB7MHg1MCwweDM2fSB9LAoreyAxNCwgMHgxMjBjLCAwLCB7MHhlYSwweDI0LDB4YzAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdkLDB4ZjUsMHg4MywweGUwLDB4ZmIsMHg3YywweDAwfSB9LAoreyAgMywgMHgxMjFhLCAwLCB7MHhiYywweDA4LDB4MDB9IH0sCit7ICAyLCAweDEyMWQsIDAsIHsweDUwLDB4MjB9IH0sCit7ICA2LCAweDEyMWYsIDAsIHsweDhiLDB4MDUsMHhlZCwweDMwLDB4ZTcsMHgwYn0gfSwKK3sgMTEsIDB4MTIyNSwgMCwgezB4OTAsMHg3ZiwweDk2LDB4NzQsMHg0MiwweGYwLDB4NzQsMHhjMywweGYwLDB4ODAsMHgwOH0gfSwKK3sgIDgsIDB4MTIzMCwgMCwgezB4OTAsMHg3ZiwweDk2LDB4ZTQsMHhmMCwweDc0LDB4ODEsMHhmMH0gfSwKK3sgIDcsIDB4MTIzOCwgMCwgezB4ZWIsMHgyNSwweGUwLDB4ZmIsMHgwYywweDgwLDB4ZGJ9IH0sCit7ICAzLCAweDEyM2YsIDAsIHsweDBhLDB4ODAsMHhjNX0gfSwKK3sgIDEsIDB4MTI0MiwgMCwgezB4MjJ9IH0sCit7ICA0LCAweDEyNDMsIDAsIHsweDdhLDB4MDAsMHg3YiwweGVmfSB9LAoreyAgMywgMHgxMjQ3LCAwLCB7MHhiYSwweDEwLDB4MDB9IH0sCit7ICAyLCAweDEyNGEsIDAsIHsweDUwLDB4MjB9IH0sCit7IDE0LCAweDEyNGMsIDAsIHsweDc0LDB4MTEsMHgyYiwweGZiLDB4MjQsMHgwMCwweGZjLDB4ZTQsMHgzNCwweDE4LDB4ZmQsMHg4YywweDgyLDB4OGR9IH0sCit7IDE0LCAweDEyNWEsIDAsIHsweDgzLDB4ZTQsMHhmMCwweGVhLDB4MjQsMHgwMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4MTksMHhmNSwweDgzLDB4ZTR9IH0sCit7ICA0LCAweDEyNjgsIDAsIHsweGYwLDB4MGEsMHg4MCwweGRifSB9LAoreyAgMSwgMHgxMjZjLCAwLCB7MHgyMn0gfSwKK3sgMTQsIDB4MTI2ZCwgMCwgezB4NzQsMHhmOCwweDI0LDB4MDAsMHhmNSwweDgyLDB4NzQsMHgwMywweDM0LDB4ODQsMHhmNSwweDgzLDB4ZTQsMHhmMH0gfSwKK3sgMTQsIDB4MTI3YiwgMCwgezB4NzQsMHhmOSwweDI0LDB4MDAsMHhmNSwweDgyLDB4NzQsMHgwMywweDM0LDB4ODQsMHhmNSwweDgzLDB4ZTQsMHhmMH0gfSwKK3sgMTQsIDB4MTI4OSwgMCwgezB4NzQsMHhmYSwweDI0LDB4MDAsMHhmNSwweDgyLDB4NzQsMHgwMywweDM0LDB4ODQsMHhmNSwweDgzLDB4ZTQsMHhmMH0gfSwKK3sgMTQsIDB4MTI5NywgMCwgezB4NzQsMHhmYiwweDI0LDB4MDAsMHhmNSwweDgyLDB4NzQsMHgwMywweDM0LDB4ODQsMHhmNSwweDgzLDB4ZTQsMHhmMH0gfSwKK3sgMTQsIDB4MTJhNSwgMCwgezB4NzQsMHhmZiwweDI0LDB4MDAsMHhmNSwweDgyLDB4NzQsMHgwMywweDM0LDB4ODQsMHhmNSwweDgzLDB4ZTQsMHhmMH0gfSwKK3sgIDEsIDB4MTJiMywgMCwgezB4MjJ9IH0sCit7IDE0LCAweDEyYjQsIDAsIHsweDEyLDB4MDMsMHhjYiwweDEyLDB4MTIsMHg2ZCwweDdhLDB4YzAsMHg3YiwweDg3LDB4N2MsMHgwMSwweDc0LDB4MDF9IH0sCit7IDE0LCAweDEyYzIsIDAsIHsweDJhLDB4ZmQsMHhlNCwweDNiLDB4ZmUsMHg4YywweDA3LDB4OGEsMHg4MiwweDhiLDB4ODMsMHg4YywweGYwLDB4NzR9IH0sCit7IDE0LCAweDEyZDAsIDAsIHsweDAxLDB4MTIsMHgxNCwweGJmLDB4MmQsMHhmYSwweGU0LDB4M2UsMHhmYiwweDhmLDB4MDQsMHg4ZCwweDgyLDB4OGV9IH0sCit7IDE0LCAweDEyZGUsIDAsIHsweDgzLDB4OGYsMHhmMCwweDc0LDB4MDYsMHgxMiwweDE0LDB4YmYsMHg3NCwweDAxLDB4MmEsMHhmZCwweGU0LDB4M2J9IH0sCit7IDE0LCAweDEyZWMsIDAsIHsweGZlLDB4OGMsMHgwNywweDhhLDB4ODIsMHg4YiwweDgzLDB4OGMsMHhmMCwweGU0LDB4MTIsMHgxNCwweGJmLDB4NzR9IH0sCit7IDE0LCAweDEyZmEsIDAsIHsweDAxLDB4MmQsMHhmYSwweGU0LDB4M2UsMHhmYiwweDhmLDB4MDQsMHg4ZCwweDgyLDB4OGUsMHg4MywweDhmLDB4ZjB9IH0sCit7IDE0LCAweDEzMDgsIDAsIHsweDc0LDB4MGIsMHgxMiwweDE0LDB4YmYsMHg3NCwweDAxLDB4MmEsMHhmZCwweGU0LDB4M2IsMHhmZSwweDhjLDB4MDd9IH0sCit7IDE0LCAweDEzMTYsIDAsIHsweDhhLDB4ODIsMHg4YiwweDgzLDB4OGMsMHhmMCwweDc0LDB4MDgsMHgxMiwweDE0LDB4YmYsMHg3NCwweDAxLDB4MmR9IH0sCit7IDE0LCAweDEzMjQsIDAsIHsweGZhLDB4ZTQsMHgzZSwweGZiLDB4OGYsMHgwNCwweDhkLDB4ODIsMHg4ZSwweDgzLDB4OGYsMHhmMCwweDc0LDB4MDF9IH0sCit7IDE0LCAweDEzMzIsIDAsIHsweDEyLDB4MTQsMHhiZiwweDJhLDB4ZmQsMHhlNCwweDNiLDB4ZmUsMHg4YywweDA3LDB4OGEsMHg4MiwweDhiLDB4ODN9IH0sCit7IDE0LCAweDEzNDAsIDAsIHsweDhjLDB4ZjAsMHhlNCwweDEyLDB4MTQsMHhiZiwweDc0LDB4MDEsMHgyZCwweGZhLDB4ZTQsMHgzZSwweGZiLDB4OGZ9IH0sCit7IDE0LCAweDEzNGUsIDAsIHsweDA0LDB4OGQsMHg4MiwweDhlLDB4ODMsMHg4ZiwweGYwLDB4NzQsMHgwMywweDEyLDB4MTQsMHhiZiwweDdkLDB4MDB9IH0sCit7ICAzLCAweDEzNWMsIDAsIHsweGJkLDB4MDYsMHgwMH0gfSwKK3sgIDIsIDB4MTM1ZiwgMCwgezB4NTAsMHgxMn0gfSwKK3sgMTEsIDB4MTM2MSwgMCwgezB4OGEsMHg4MiwweDhiLDB4ODMsMHg4YywweGYwLDB4MGEsMHhiYSwweDAwLDB4MDEsMHgwYn0gfSwKK3sgIDcsIDB4MTM2YywgMCwgezB4ZTQsMHgxMiwweDE0LDB4YmYsMHgwZCwweDgwLDB4ZTl9IH0sCit7IDEzLCAweDEzNzMsIDAsIHsweDhhLDB4ODIsMHg4YiwweDgzLDB4OGMsMHhmMCwweGU1LDB4NzQsMHgxMiwweDE0LDB4YmYsMHg3NCwweGY5fSB9LAoreyAxNCwgMHgxMzgwLCAwLCB7MHgyNCwweDAwLDB4ZjUsMHg4MiwweDc0LDB4MDMsMHgzNCwweDg0LDB4ZjUsMHg4MywweDc0LDB4MGYsMHhmMCwweDc0fSB9LAoreyAxNCwgMHgxMzhlLCAwLCB7MHhmZSwweDI0LDB4MDAsMHhmNSwweDgyLDB4NzQsMHgwMywweDM0LDB4ODQsMHhmNSwweDgzLDB4NzQsMHgwMSwweGYwfSB9LAoreyAgNiwgMHgxMzljLCAwLCB7MHgxMiwweDAzLDB4ZTEsMHgxMiwweDA0LDB4Zjd9IH0sCit7ICAxLCAweDEzYTIsIDAsIHsweDIyfSB9LAoreyAxMywgMHgxM2EzLCAwLCB7MHg5MCwweDdkLDB4YzEsMHhlMCwweGZhLDB4MjQsMHgwMCwweGZiLDB4ZTQsMHgzNCwweDE5LDB4ZmMsMHg5MH0gfSwKK3sgMTQsIDB4MTNiMCwgMCwgezB4N2QsMHhjMiwweGUwLDB4ZmQsMHg4YiwweDgyLDB4OGMsMHg4MywweGYwLDB4NzUsMHhmMCwweDExLDB4ZWEsMHhhNH0gfSwKK3sgIDMsIDB4MTNiZSwgMCwgezB4ZmEsMHg3YiwweDAwfSB9LAoreyAgMywgMHgxM2MxLCAwLCB7MHhiYiwweDEwLDB4MDB9IH0sCit7ICAyLCAweDEzYzQsIDAsIHsweDUwLDB4MjR9IH0sCit7IDE0LCAweDEzYzYsIDAsIHsweGVhLDB4MjQsMHgwMCwweGZjLDB4ZTQsMHgzNCwweDE4LDB4ZmQsMHhlYiwweDJjLDB4ZmMsMHhlNCwweDNkLDB4ZmR9IH0sCit7IDE0LCAweDEzZDQsIDAsIHsweDc0LDB4MDQsMHgyYiwweDI0LDB4YzAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdkLDB4ZjUsMHg4MywweGUwLDB4ZmV9IH0sCit7ICA4LCAweDEzZTIsIDAsIHsweDhjLDB4ODIsMHg4ZCwweDgzLDB4ZjAsMHgwYiwweDgwLDB4ZDd9IH0sCit7IDE0LCAweDEzZWEsIDAsIHsweGVhLDB4MjQsMHgwMCwweGZhLDB4ZTQsMHgzNCwweDE4LDB4ZmIsMHg3NCwweDEwLDB4MmEsMHhmNSwweDgyLDB4ZTR9IH0sCit7ICA1LCAweDEzZjgsIDAsIHsweDNiLDB4ZjUsMHg4MywweGU0LDB4ZjB9IH0sCit7ICAxLCAweDEzZmQsIDAsIHsweDIyfSB9LAoreyAgNCwgMHgxM2ZlLCAwLCB7MHhlNSwweDc2LDB4NjAsMHgwMn0gfSwKK3sgIDIsIDB4MTQwMiwgMCwgezB4ODAsMHgxNn0gfSwKK3sgMTIsIDB4MTQwNCwgMCwgezB4NzQsMHgwZiwweDU1LDB4NzUsMHhmYSwweDhhLDB4NzUsMHgyNCwweDAwLDB4ZjUsMHg4MiwweGU0fSB9LAoreyAxMCwgMHgxNDEwLCAwLCB7MHgzNCwweDE5LDB4ZjUsMHg4MywweGUwLDB4ZjUsMHg3NCwweDEyLDB4MTIsMHhiNH0gfSwKK3sgMTAsIDB4MTQxYSwgMCwgezB4MTIsMHgxMCwweGNhLDB4NzUsMHg2ZSwweDAwLDB4NzUsMHg2ZiwweDAwLDB4MTJ9IH0sCit7ICA2LCAweDE0MjQsIDAsIHsweDExLDB4NDQsMHg3NSwweDcwLDB4YjksMHg3NX0gfSwKK3sgIDYsIDB4MTQyYSwgMCwgezB4NzEsMHgxNCwweDc1LDB4NzIsMHgwMiwweDEyfSB9LAoreyAxMSwgMHgxNDMwLCAwLCB7MHgxMSwweDc1LDB4ZTUsMHg3NiwweGI0LDB4MDIsMHgwNCwweDc0LDB4MDEsMHg4MCwweDAxfSB9LAoreyAgMSwgMHgxNDNiLCAwLCB7MHhlNH0gfSwKK3sgIDMsIDB4MTQzYywgMCwgezB4ZmEsMHg3MCwweDBmfSB9LAoreyAxMiwgMHgxNDNmLCAwLCB7MHg3NCwweDAxLDB4MjUsMHg3NSwweGY1LDB4NzMsMHhjMCwweDAyLDB4MTIsMHgxMSwweGEwLDB4ZDB9IH0sCit7ICAzLCAweDE0NGIsIDAsIHsweDAyLDB4ODAsMHgwYX0gfSwKK3sgMTAsIDB4MTQ0ZSwgMCwgezB4ODUsMHg3NSwweDczLDB4YzAsMHgwMiwweDEyLDB4MTEsMHhhMCwweGQwLDB4MDJ9IH0sCit7IDEyLCAweDE0NTgsIDAsIHsweDc1LDB4NmUsMHgwMCwweDc1LDB4NmYsMHgwMSwweGMwLDB4MDIsMHgxMiwweDExLDB4NDQsMHhkMH0gfSwKK3sgIDQsIDB4MTQ2NCwgMCwgezB4MDIsMHhlYSwweDcwLDB4MWF9IH0sCit7IDEzLCAweDE0NjgsIDAsIHsweDc1LDB4ZjAsMHgxMSwweGU1LDB4NzUsMHhhNCwweGZhLDB4MjQsMHgwMCwweGZhLDB4ZTQsMHgzNCwweDE4fSB9LAoreyAgOSwgMHgxNDc1LCAwLCB7MHhmYiwweDhhLDB4NzAsMHg4YiwweDcxLDB4NzUsMHg3MiwweDAxLDB4MTJ9IH0sCit7ICA0LCAweDE0N2UsIDAsIHsweDExLDB4NzUsMHg4MCwweDM2fSB9LAoreyAgMiwgMHgxNDgyLCAwLCB7MHg3YSwweDAwfSB9LAoreyAgMywgMHgxNDg0LCAwLCB7MHhiYSwweDEwLDB4MDB9IH0sCit7ICAyLCAweDE0ODcsIDAsIHsweDUwLDB4MmZ9IH0sCit7IDEzLCAweDE0ODksIDAsIHsweGVhLDB4MjQsMHgwMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4MTksMHhmNSwweDgzLDB4ZTAsMHhmYiwweGU1fSB9LAoreyAgNCwgMHgxNDk2LCAwLCB7MHg3NSwweGI1LDB4MDMsMHgxYn0gfSwKK3sgMTQsIDB4MTQ5YSwgMCwgezB4NzUsMHhmMCwweDExLDB4ZWEsMHhhNCwweGZiLDB4MjQsMHgwMCwweGZiLDB4ZTQsMHgzNCwweDE4LDB4ZmMsMHg4Yn0gfSwKK3sgIDksIDB4MTRhOCwgMCwgezB4NzAsMHg4YywweDcxLDB4NzUsMHg3MiwweDAxLDB4YzAsMHgwMiwweDEyfSB9LAoreyAgNCwgMHgxNGIxLCAwLCB7MHgxMSwweDc1LDB4ZDAsMHgwMn0gfSwKK3sgIDMsIDB4MTRiNSwgMCwgezB4MGEsMHg4MCwweGNjfSB9LAoreyAgMSwgMHgxNGI4LCAwLCB7MHgyMn0gfSwKK3sgIDYsIDB4MTRiOSwgMCwgezB4NTAsMHg3MiwweDZmLDB4NjcsMHgyMCwweDAwfSB9LAoreyAxNCwgMHgxNGJmLCAwLCB7MHhjOCwweGMwLDB4ZTAsMHhjOCwweGMwLDB4ZTAsMHhlNSwweGYwLDB4NjAsMHgwYiwweDE0LDB4NjAsMHgwZiwweDE0fSB9LAoreyAgNywgMHgxNGNkLCAwLCB7MHg2MCwweDExLDB4MTQsMHg2MCwweDEyLDB4ODAsMHgxNX0gfSwKK3sgIDcsIDB4MTRkNCwgMCwgezB4ZDAsMHhlMCwweGE4LDB4ODIsMHhmNiwweDgwLDB4MGV9IH0sCit7ICA1LCAweDE0ZGIsIDAsIHsweGQwLDB4ZTAsMHhmMCwweDgwLDB4MDl9IH0sCit7ICA0LCAweDE0ZTAsIDAsIHsweGQwLDB4ZTAsMHg4MCwweDA1fSB9LAoreyAgNSwgMHgxNGU0LCAwLCB7MHhkMCwweGUwLDB4YTgsMHg4MiwweGYyfSB9LAoreyAgNCwgMHgxNGU5LCAwLCB7MHhjOCwweGQwLDB4ZTAsMHhjOH0gfSwKK3sgIDEsIDB4MTRlZCwgMCwgezB4MjJ9IH0sCit7IDE0LCAweDE0ZWUsIDAsIHsweGM4LDB4YzAsMHhlMCwweGU1LDB4ZjAsMHg2MCwweDBkLDB4MTQsMHg2MCwweDBmLDB4MTQsMHg2MCwweDBmLDB4MTR9IH0sCit7ICA2LCAweDE0ZmMsIDAsIHsweDYwLDB4MTAsMHg3NCwweGZmLDB4ODAsMHgwZn0gfSwKK3sgIDUsIDB4MTUwMiwgMCwgezB4YTgsMHg4MiwweGU2LDB4ODAsMHgwYX0gfSwKK3sgIDMsIDB4MTUwNywgMCwgezB4ZTAsMHg4MCwweDA3fSB9LAoreyAgNCwgMHgxNTBhLCAwLCB7MHhlNCwweDkzLDB4ODAsMHgwM30gfSwKK3sgIDMsIDB4MTUwZSwgMCwgezB4YTgsMHg4MiwweGUyfSB9LAoreyAgNCwgMHgxNTExLCAwLCB7MHhmOCwweGQwLDB4ZTAsMHhjOH0gfSwKK3sgIDEsIDB4MTUxNSwgMCwgezB4MjJ9IH0sCit7ICAwLCAweDAwMDAsIDEsIHswfSB9CisKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGJpdHN0cmVhbVtdID0geworCisweDAwLDB4MDksMHgwRiwweEYwLDB4MEYsMHhGMCwweDBGLDB4RjAsIDB4MEYsMHhGMCwweDAwLDB4MDAsMHgwMSwweDYxLDB4MDAsMHgwRCwKKzB4NjQsMHg2MSwweDYyLDB4NzUsMHg3MywweDYyLDB4NzQsMHg3MiwgMHgyRSwweDZFLDB4NjMsMHg2NCwweDAwLDB4NjIsMHgwMCwweDBCLAorMHg3MywweDMxLDB4MzAsMHg3OCwweDZDLDB4NzYsMHg3MSwweDMxLCAweDMwLDB4MzAsMHgwMCwweDYzLDB4MDAsMHgwQiwweDMxLDB4MzksCisweDM5LDB4MzksMHgyRiwweDMwLDB4MzksMHgyRiwweDMyLDB4MzQsIDB4MDAsMHg2NCwweDAwLDB4MDksMHgzMSwweDMwLDB4M0EsMHgzNCwKKzB4MzIsMHgzQSwweDM0LDB4MzYsMHgwMCwweDY1LDB4MDAsMHgwMCwgMHgyRSwweEMwLDB4RkYsMHgyMCwweDE3LDB4NUYsMHg5RiwweDVCLAorMHhGRSwweEZCLDB4QkIsMHhCNywweEJCLDB4QkIsMHhGQiwweEJGLCAweEFGLDB4RUYsMHhGQiwweERGLDB4QjcsMHhGQiwweEZCLDB4N0YsCisweEJGLDB4QjcsMHhFRiwweEYyLDB4RkYsMHhGQiwweEZFLDB4RkYsIDB4RkYsMHhFRiwweEZGLDB4RkUsMHhGRiwweEJGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEFGLDB4RkYsMHhGQSwweEZGLDB4RkYsMHhGRiwgMHhDOSwweEZGLDB4RkYsMHhGRiwweERGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZCLDB4RkYsMHhBMywweEZGLDB4RkIsCisweEZFLDB4RkYsMHhCRiwweEVGLDB4RTMsMHhGRSwweEZGLDB4QkYsIDB4RTMsMHhGRSwweEZGLDB4QkYsMHg2RiwweEZCLDB4RjYsMHhGRiwKKzB4QkYsMHhGRiwweDQ3LDB4RkYsMHhGRiwweDlGLDB4RUUsMHhGOSwgMHhGRSwweENGLDB4OUYsMHhFRiwweEZCLDB4Q0YsMHg5QiwweEVFLAorMHhGOCwweEZFLDB4RUYsMHg4RiwweEVFLDB4RkIsMHhGRSwweDBCLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhCRiwweEZGLDB4RkYsMHhGQiwweEZGLDB4RkYsIDB4QkYsMHhGRiwweEZGLDB4RkMsMHgxNywweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4N0YsMHhGRiwweEZGLDB4RkYsMHg3RiwgMHhGRiwweEZGLDB4RkIsMHhGRiwweEZGLDB4N0YsMHhGRiwweEZGLAorMHhGQywweDNGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZCLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRSwweDVGLDB4RkYsIDB4RkYsMHhGRCwweEZGLDB4RkYsMHhEQiwweEZGLDB4RkQsMHhGRiwKKzB4NzcsMHhGRiwweEZELDB4RkYsMHhGRiwweERGLDB4RkUsMHhGRCwgMHhGRiwweEZGLDB4RjIsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZELDB4RkYsMHhGRiwweEZGLDB4RkQsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RTEsCisweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDNGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhFMywweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEJGLAorMHhGRiwweEZFLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4NjcsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweDdGLDB4RkYsMHhGRiwweEZGLDB4N0YsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweERGLDB4RkYsMHhGRiwweEZGLDB4MkYsMHhGRiwKKzB4RjMsMHhGRCwweEZGLDB4N0YsMHhERSwweEY3LDB4RkQsMHhGRiwgMHg3RiwweEY3LDB4N0QsMHhGRiwweDdGLDB4REYsMHhGNywweEJELAorMHhGRiwweDdGLDB4RkYsMHgxRiwweEZGLDB4RUYsMHhGQiwweEZFLCAweEZGLDB4QkYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEVGLDB4RkIsCisweEZFLDB4RkYsMHhCRiwweEVGLDB4RkIsMHhGRSwweEZGLDB4RkYsIDB4M0YsMHhGRSwweDdGLDB4OUYsMHhFNywweEY5LDB4RkUsMHg3RiwKKzB4OUYsMHhFNywweEZBLDB4N0YsMHg5RiwweEU3LDB4RjksMHhGRSwgMHg3RiwweDlGLDB4RTcsMHhGRiwweEZDLDB4N0YsMHhCRiwweEJGLAorMHhFRiwweEZCLDB4RkUsMHhGRiwweEJGLDB4RUYsMHhGQiwweEI3LCAweEJGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhCRiwweEVGLDB4RkIsCisweEZGLDB4RTAsMHhGRCwweEY5LDB4RkUsMHg3RiwweDlGLDB4RTcsIDB4RjksMHhGRSwweDdGLDB4OUQsMHhGOSwweEZFLDB4N0QsMHg5RCwKKzB4RTcsMHhGOSwweEZFLDB4N0YsMHg5RiwweEVELDB4RUQsMHhGRiwgMHhGRCwweEZGLDB4N0YsMHhERiwweEY3LDB4RkQsMHhGRiwweDdGLAorMHhERiwweEZELDB4RkYsMHg3RiwweERGLDB4RjcsMHhGRCwweEZGLCAweDdGLDB4REYsMHhGRiwweDlCLDB4RkYsMHhFRiwweEZCLDB4RkUsCisweEZCLDB4QkYsMHhFRiwweEJCLDB4RkUsMHhGRiwweEFGLDB4QkIsIDB4QkUsMHhGRiwweEJGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhGRiwKKzB4QjcsMHhCRiwweERCLDB4RjYsMHhCRCwweEJGLDB4NkIsMHhEQiwgMHhGNiwweEY5LDB4QkYsMHg1QiwweEQ2LDB4RjksMHhCRiwweDZGLAorMHhEQiwweEY2LDB4RkQsMHhCRiwweEZGLDB4MEUsMHhGRiwweEZGLCAweEZGLDB4RkYsMHg1RiwweEZGLDB4RjcsMHhGRiwweEZGLDB4N0YsCisweEY3LDB4QkQsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhERiwweDlGLDB4RkYsMHhGRiwweEZGLDB4RkUsMHhGRiwKKzB4RkYsMHhFRiwweEZFLDB4RkUsMHhGRiwweEZGLDB4NzcsMHhGRiwgMHhGQiwweEZCLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGOCwweDNGLAorMHhGRiwweEZELDB4RkYsMHhGRiwweEZGLDB4RkQsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEY0LDB4N0YsMHhGRiwweEZFLDB4RkQsIDB4QkUsMHhGRiwweERGLDB4RkUsMHhGRiwweEZGLDB4RUYsMHg3RiwKKzB4RkYsMHhDRiwweEZGLDB4Q0YsMHhGRiwweEZGLDB4RkYsMHhERiwgMHhFNiwweEZGLDB4RkYsMHg3RiwweERGLDB4RjcsMHhERCwweDdGLAorMHg3RiwweERGLDB4RjcsMHhGRiwweDdGLDB4REYsMHhENywweEZELCAweEZGLDB4N0YsMHhERiwweEY3LDB4RkYsMHhDRCwweEZGLDB4RjIsCisweEZGLDB4RkYsMHg0RiwweDdGLDB4RjQsMHhGRiwweEZGLDB4RkYsIDB4RTcsMHhFRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEJCLDB4RkYsMHhFRiwweEZGLDB4RkUsMHhGRiwgMHhGRiwweEZGLDB4RUYsMHhGRiwweEZGLDB4RUYsMHhGRiwweEZCLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDY1LCAweEVGLDB4RkYsMHhGRiwweDdGLDB4RkYsMHhGRCwweEVGLDB4RkYsCisweEZGLDB4RkYsMHhGRSwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkUsMHhDRiwweERGLDB4RkUsMHhGRiwKKzB4RkYsMHhGQiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjMsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRSwweERGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRSwweEJGLDB4RkYsIDB4RkYsMHhGRiwweEUzLDB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEVGLDB4RUIsMHhGRiwweEZFLDB4QkYsMHhGRiwgMHhFQiwweEZGLDB4RkMsMHg3RiwweEZGLDB4RkYsMHhGRiwweEVFLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhERCwweEZGLCAweEQ2LDB4RkYsMHhGRCwweEJGLDB4RkYsMHhGQiwweEZGLDB4RkUsCisweEZELDB4RkYsMHhGRiwweEZELDB4RUYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4REUsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEJGLDB4RkYsMHhGRCwweEZGLDB4N0YsMHhCRiwgMHhGRiwweDVGLDB4REYsMHhGRiwweEZGLDB4QkYsMHg3NywweEZGLAorMHhGRiwweEZGLDB4N0YsMHhENywweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4QzMsMHhGRiwweEZGLDB4RkYsMHhGRiwweERGLDB4RUYsCisweEZGLDB4RkYsMHhGRSwweEZCLDB4RkYsMHhGRiwweERGLDB4QkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhFRCwweEZGLDB4QjcsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhBRiwweDdGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4REYsMHhCRiwweERGLDB4RjMsMHhGRCwweEZCLDB4RkYsMHg1QiwKKzB4RkQsMHhGRiwweEJGLDB4RUYsMHhGNywweEZGLDB4RkYsMHg3RCwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEY4LDB4M0IsMHhGRiwweEJGLAorMHg2RiwweEZGLDB4RkUsMHhGRiwweEJGLDB4RkYsMHhFQiwweDdELCAweEZGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RjIsMHg3RiwweEZDLDB4RkYsMHgzRiwweERGLDB4RUQsIDB4RkUsMHhGRiwweEZGLDB4RkYsMHhGRiwweEVGLDB4NUYsMHhGNywKKzB4QjUsMHhGRiwweEVGLDB4RkYsMHhGRiwweEZGLDB4RTAsMHgzRiwgMHg5RiwweDlFLDB4RkYsMHhGRiwweEVGLDB4RkYsMHhERiwweEZGLAorMHhCRiwweDVGLDB4QkYsMHhDRiwweEYzLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweDY5LDB4QUYsMHgzMywweEZELDB4RkYsCisweEZCLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGQywweEZGLDB4N0YsIDB4RDksMHhGRiwweERGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGNSwKKzB4QTMsMHhERiwweDZFLDB4REUsMHhGRiwweEZGLDB4QkQsMHhGRiwgMHhGRiwweEZFLDB4RkYsMHhGRiwweEZGLDB4RkUsMHhFNywweEZELAorMHhGRiwweEZGLDB4RkYsMHhGOSwweEVGLDB4QzYsMHhGRSwweEI3LCAweEFELDB4RTUsMHhGOSwweEZGLDB4RkYsMHhGRiwweENGLDB4RkYsCisweEZGLDB4RkYsMHhDRCwweEZCLDB4N0YsMHhGRiwweEZGLDB4RkYsIDB4RjksMHhGNiwweDBGLDB4REYsMHhFQywweENGLDB4N0YsMHhGRiwKKzB4RkIsMHg3RiwweEZGLDB4RkYsMHhGRiwweEZELDB4RkYsMHhGRSwgMHhGOSwweEZELDB4N0YsMHhGRiwweDdGLDB4RkYsMHhGOSwweDVCLAorMHhGRiwweDczLDB4REMsMHhGRCwweDdCLDB4REYsMHhGRiwweEZGLCAweEZGLDB4N0IsMHhGRiwweEZGLDB4RjcsMHg1MywweEQ2LDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEQ4LDB4OUYsMHhGRSwweEZGLDB4RUYsIDB4N0YsMHhFRSwweEZGLDB4RkYsMHhGRiwweEZCLDB4RUQsMHhFRCwKKzB4RkQsMHhGRiwweEZFLDB4RkYsMHhGRiwweEZCLDB4N0YsMHhGRiwgMHhFMiwweDdGLDB4RkYsMHg2RiwweEQ4LDB4NTcsMHhGNywweEZGLAorMHhGRiwweEZGLDB4REYsMHhGRiwweEU4LDB4RkYsMHhGRiwweEZELCAweEZGLDB4RkYsMHhGQywweDdGLDB4RkYsMHhFNCwweEZGLDB4RkIsCisweEVGLDB4RkIsMHhGRSwweERGLDB4QjcsMHhFRCwweEZGLDB4RkUsIDB4REYsMHg3RiwweEZGLDB4RkUsMHg3RiwweEI3LDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweDg5LDB4RkYsMHhGRiwweENGLDB4RjMsMHhGRSwgMHg3RiwweEZGLDB4RUYsMHhGRiwweEZFLDB4N0UsMHg3RiwweEZCLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEYxLCAweEZGLDB4RUIsMHg3QSwweEQ1LDB4QkYsMHg2RiwweERCLDB4QkUsCisweEZELDB4QjcsMHhEOCwweEY2LDB4RTUsMHhCRiwweDZGLDB4RkIsIDB4RkUsMHhGNSwweEJELDB4N0UsMHgwNiwweEZGLDB4REYsMHhGNywKKzB4RkIsMHhGNiwweEZGLDB4M0YsMHhGRiwweERCLDB4RkYsMHhGRiwgMHg2RiwweEZCLDB4RjcsMHhGRiwweEZGLDB4RkYsMHhGQiwweEZFLAorMHhGNywweEFGLDB4RkYsMHhCNywweEVELDB4RUYsMHhGNywweEZFLCAweEZGLDB4RkYsMHhERiwweEZGLDB4RkUsMHhGRiwweEVGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEJGLDB4RjcsMHhGQywweDFGLDB4RUUsIDB4RkIsMHhGRSwweEJELDB4RkYsMHg3RiwweDVGLDB4RDcsMHhGRCwKKzB4RkIsMHg0MywweEZGLDB4RkYsMHhGRCwweEZGLDB4NUYsMHhGRiwgMHhGNywweEZGLDB4RjksMHgzRiwweEZGLDB4Q0YsMHhGMywweEZELAorMHhGNywweDdFLDB4RUYsMHhBNywweEY5LDB4RkUsMHg4RiwweEE3LCAweEU5LDB4RjMsMHg3RSwweDlGLDB4RkIsMHhGOCwweEZGLDB4RkYsCisweDNGLDB4RkQsMHg3RiwweDVGLDB4REYsMHhGRCwweEZGLDB4RkYsIDB4NUYsMHhGRiwweEZELDB4NUYsMHhGRiwweEZGLDB4N0YsMHhGRCwKKzB4N0YsMHhGRCwweDlGLDB4RkYsMHhFMCwweEZGLDB4RkEsMHhGOCwgMHhCRSwweDZGLDB4OUYsMHhFNiwweEY4LDB4QkUsMHgzRiwweDlBLAorMHhGOSwweEJFLDB4NkYsMHg5RiwweEUyLDB4RjksMHhGRSwweDZGLCAweDlGLDB4RjksMHhGRiwweEY1LDB4RkQsMHg3RiwweENGLDB4REYsCisweEZELDB4RkQsMHg3RiwweEZGLDB4RjUsMHhGRiwweEZGLDB4RkYsIDB4RjcsMHhGNSwweEZELDB4MEYsMHhEQiwweEZGLDB4RDMsMHhGRiwKKzB4RUIsMHhGQSwweEZGLDB4RkYsMHhCRiwweEZGLDB4RkEsMHhGRiwgMHhGRiwweENCLDB4RkIsMHhGRSwweEZGLDB4RkYsMHhFQiwweEZBLAorMHhGRSwweEZGLDB4RkYsMHhCNywweEZGLDB4RkYsMHhGRiwweEZGLCAweEJGLDB4RkYsMHhERiwweEY1LDB4RkYsMHhGRiwweEQ3LDB4RkYsCisweEZGLDB4RkYsMHhERiwweEQ3LDB4RjUsMHhGRiwweDdGLDB4RkUsIDB4NEYsMHhGRiwweEZELDB4RkYsMHg3RiwweDdGLDB4RkYsMHhBRCwKKzB4RUIsMHhGQiwweEZGLDB4QUQsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhBRiwweEVCLDB4RkIsMHhGRiwweEZDLDB4MEQsMHhGRiwweEZGLAorMHhERiwweEQyLDB4RkQsMHhGRiwweEZGLDB4RkQsMHhGNiwweEZGLCAweEZGLDB4N0YsMHhGRiwweEZGLDB4MUYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkIsMHgzRiwweDdELDB4RUIsMHgzMiwweEZFLDB4QkYsIDB4MkYsMHhFQiwweEZBLDB4QUUsMHhCRCwweEUwLDB4RkEsMHg3RSwKKzB4QkYsMHhBRCwweEVCLDB4RkEsMHhGRSwweEJGLDB4RjUsMHg3RiwgMHhGRiwweERFLDB4RkUsMHhFMywweEZCLDB4RkYsMHhGRiwweEZGLAorMHhERiwweEVGLDB4NEYsMHhERiwweEZGLDB4N0YsMHhERiwweEZGLCAweEY3LDB4RkYsMHhGRiwweEY4LDB4N0YsMHhGRiwweEZGLDB4RUYsCisweEZCLDB4RkYsMHhGRiwweEZGLDB4RUYsMHhGRiwweEZGLDB4REYsIDB4RUQsMHhGQiwweERGLDB4RkYsMHhCRiwweEZGLDB4RkYsMHhGRiwKKzB4ODEsMHhGRiwweEZGLDB4RkYsMHhGRiwweDNGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkUsMHhERCwweEZFLDB4RUYsMHhGRCwweEZGLAorMHhGRiwweEZCLDB4RkUsMHhGNywweEZGLDB4OTMsMHhGRCwweEZCLCAweDdFLDB4RkYsMHhGRSwweDg3LDB4RTksMHhGRiwweDdGLDB4QjMsCisweDlGLDB4RkUsMHhGRSwweEZGLDB4QUYsMHhGRCwweEZFLDB4N0UsIDB4M0YsMHhGRSwweDY3LDB4RkYsMHhGRiwweEY3LDB4RkYsMHhGRiwKKzB4RkMsMHhGNywweERGLDB4RkQsMHhGRiwweDdGLDB4RkYsMHhGRiwgMHg3RiwweDZELDB4RkYsMHhGRiwweEZFLDB4RkYsMHhGRiwweDJGLAorMHhGRiwweEJGLDB4RkYsMHhGRiwweEVFLDB4RkYsMHhCRSwweEZGLCAweEZGLDB4RkUsMHhGRiwweEVGLDB4RkYsMHhGRiwweEZFLDB4RkYsCisweEVGLDB4RkYsMHhGRiwweEZBLDB4NUYsMHhGRiwweEZGLDB4RkIsIDB4RkYsMHhGRiwweEVGLDB4RkYsMHhGQiwweEZFLDB4RkQsMHhGRiwKKzB4RkUsMHhGRiwweEZCLDB4RkYsMHhGRiwweEZGLDB4N0YsMHhGRiwgMHhGRSwweEJGLDB4REYsMHhGRiwweEZCLDB4RkYsMHhGRiwweEY3LAorMHhGQywweEZELDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDdGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGMiwweDdGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RjMsMHhGRiwweEZGLDB4RkYsMHhFRiwweEZCLDB4RkYsMHhGRiwKKzB4RkYsMHhERiwweEUyLDB4RkYsMHhGRiwweEZCLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZCLDB4RTcsMHhGRiwweEZELAorMHhGRiwweEZGLDB4RkYsMHhCRiwweEZGLDB4RkYsMHhGRiwweEVELCAweEVGLDB4RkQsMHhGRiwweEZGLDB4REYsMHhENywweEY1LDB4RkQsCisweDdGLDB4NUQsMHhGRCwweEZGLDB4N0YsMHhERiwweDk3LDB4RjQsIDB4RkQsMHg3QiwweDVGLDB4RkYsMHhDOSwweEZGLDB4RkIsMHhGRSwKKzB4RkYsMHhCRiwweEZGLDB4NUYsMHhGRiwweEZGLDB4RjcsMHhGRiwgMHhFRiwweEZELDB4RkYsMHhFRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEY3LDB4RkYsMHhENywweEZELDB4N0QsMHg3RiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEVGLDB4REYsMHhGNywweEZELDB4RkYsCisweEJCLDB4RkYsMHhGRiwweDdGLDB4RkYsMHhGRSwweEUzLDB4RkYsIDB4RjksMHhGRSwweDdGLDB4QkYsMHhFRiwweEZCLDB4RkUsMHhGRiwKKzB4QkYsMHhGOSwweEZFLDB4RkYsMHg5RiwweEVGLDB4RjksMHhGRSwgMHhGRiwweEJGLDB4RjMsMHhEQSwweEZGLDB4MzcsMHhDRCwweEYzLAorMHg3QywweERGLDB4MzcsMHhDRCwweEYzLDB4N0YsMHgzNywweENELCAweEYzLDB4N0MsMHhERiwweDM3LDB4Q0MsMHhGMywweDdGLDB4NUEsCisweEJELDB4RjYsMHhGRCwweEJGLDB4NkYsMHhEQiwweEY2LDB4RkQsIDB4QkYsMHg2RiwweERFLDB4RkQsMHhCRiwweDZGLDB4REIsMHhGNiwKKzB4RkQsMHhCRiwweDZGLDB4RkUsMHhGMSwweDZGLDB4RUIsMHg3QSwgMHhERSwweEI3LDB4QUQsMHhFQiwweDdBLDB4REUsMHhCNywweEFGLAorMHg3QSwweERFLDB4QjcsMHhBRCwweEVCLDB4N0EsMHhERSwweEI3LCAweEZGLDB4N0UsMHhGRiwweEZFLDB4Q0QsMHhCMywweDZDLDB4REIsCisweDM2LDB4Q0QsMHhCMywweDZDLDB4REUsMHhDRCwweEIzLDB4NkMsIDB4REIsMHgzNiwweENELDB4QjMsMHg2QywweERGLDB4QzksMHhCRiwKKzB4RjcsMHhCRCwweEVGLDB4N0EsMHg5RSwweEE3LDB4QTksMHhFQSwgMHg3QSwweEI3LDB4QkQsMHhFQSwweDdCLDB4REUsMHhBNywweEJELAorMHhDQSwweDcyLDB4OEQsMHg5MSwweEZGLDB4RUYsMHhGQiwweEZFLCAweEZGLDB4QkYsMHhFRiwweEZCLDB4RkUsMHhGNywweEVGLDB4RkIsCisweEZFLDB4RkYsMHhCRiwweEVGLDB4RkIsMHhGRSwweEZGLDB4RkUsIDB4ODcsMHhGRiwweEY2LDB4RkQsMHhCRiwweDZGLDB4REIsMHhGNiwKKzB4RkQsMHhCRiwweDZGLDB4RjYsMHhGRCwweEJGLDB4NkYsMHhEQiwgMHhGNiwweEZELDB4QkYsMHg2RiwweEZFLDB4NEYsMHhGRiwweEJGLAorMHhFRiwweEJCLDB4RUUsMHhGQiwweEJFLDB4RUYsMHhCQiwweEVGLCAweEJFLDB4RUYsMHhCQiwweEVFLDB4RkIsMHhCRSwweEVGLDB4QkIsCisweEVGLDB4RkMsMHg1RiwweEZGLDB4RkYsMHhGRiwweDNGLDB4Q0YsIDB4RjMsMHhGQywweEZGLDB4M0YsMHhDRiwweEZDLDB4RkYsMHgzRiwKKzB4Q0YsMHhGMywweEZDLDB4RkYsMHgzRiwweENGLDB4RkQsMHg5RiwgMHhGRSwweEJGLDB4QUYsMHhFQiwweEZBLDB4RkUsMHhCRiwweEFGLAorMHhFQiwweEZFLDB4QkYsMHhBRiwweEVCLDB4RkEsMHhGRSwweEJGLCAweEFGLDB4RUIsMHhGRiwweEUxLDB4NkYsMHhGRCwweEZGLDB4N0YsCisweERGLDB4RjcsMHhGRCwweEZGLDB4N0YsMHhERiwweEZELDB4RkYsIDB4N0YsMHhERiwweEY3LDB4RkQsMHhGRiwweDdGLDB4REYsMHhGRiwKKzB4N0EsMHhCRiwweEZCLDB4RkUsMHhERiwweEI3LDB4RUQsMHhGQiwgMHg3RSwweERGLDB4QjcsMHhGQiwweDdFLDB4REYsMHhCNywweEVELAorMHhGQiwweDdFLDB4REYsMHhCNywweEZGLDB4QzksMHhGRiwweEZGLCAweEJGLDB4RUYsMHhGQiwweEZFLDB4RkYsMHhCRiwweEVGLDB4RkIsCisweEZGLDB4QkYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEJGLDB4RUUsIDB4RkIsMHhGRSwweEJCLDB4RkYsMHhGRSwweEZGLDB4QkYsMHhFRiwKKzB4RkIsMHhGRSwweEZGLDB4QkYsMHhFRiwweEZFLDB4RkYsMHhCRiwgMHhFRiwweEZCLDB4RkUsMHhGRiwweDNGLDB4Q0YsMHhGRiwweEU3LAorMHhGRSwweEZGLDB4RjUsMHhGRCwweDc3LDB4NUQsMHhENywweDM1LCAweERELDB4NzcsMHhENywweEY1LDB4Q0QsMHg3QiwweDVELDB4RDcsCisweEY1LDB4REQsMHg3NywweEZFLDB4MjcsMHhGRiwweEZGLDB4OEIsIDB4RTIsMHhGOCwweEJFLDB4MkYsMHg4QiwweEUyLDB4RjksMHhBRiwKKzB4OEIsMHhFMiwweEY4LDB4QkUsMHgyRiwweDhCLDB4RTIsMHhGOSwgMHhGRSwweDFGLDB4RkYsMHg1RiwweEQ3LDB4RjUsMHhGRCwweDdGLAorMHg1RiwweEQ3LDB4RjUsMHhGRiwweDVGLDB4RDcsMHhGNSwweEZELCAweDdGLDB4NUYsMHhENywweEY1LDB4RkYsMHhGQSwweDNGLDB4RkUsCisweEJGLDB4QUYsMHhFQiwweEZBLDB4RkUsMHhCRiwweEFGLDB4RUIsIDB4RUMsMHhCRiwweEFGLDB4RUIsMHhGQSwweEZFLDB4QkYsMHhBRiwKKzB4RUIsMHhGRiwweEZFLDB4N0YsMHhGRCwweDdGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEU2LCAweEZGLDB4RkEsMHhERiwweEY3LDB4RkQsMHhGRiwweDdGLDB4REYsCisweEY3LDB4RkMsMHhGRiwweERGLDB4RjcsMHhGRCwweEZGLDB4N0YsIDB4REYsMHhGNywweEZELDB4RkYsMHhGNSwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkIsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweDAyLDB4RkYsMHhGRSwweEJGLDB4QUIsMHhFQiwweEZBLCAweEJFLDB4QkYsMHgyMywweEVCLDB4REUsMHgxRiwweEFGLDB4RUEsCisweEZBLDB4RkUsMHhBRiwweEFGLDB4RUIsMHhGRCwweDk3LDB4RkYsIDB4RjMsMHhGQywweDdCLDB4MUYsMHhDRiwweEYxLDB4RkMsMHg3RiwKKzB4MUYsMHhGMSwweEZDLDB4NzcsMHgxRiwweENELDB4RjEsMHhGQywgMHhGRiwweDFGLDB4RkUsMHg4NywweEZGLDB4QUYsMHhFRiwweEZBLAorMHhGRSwweEZGLDB4QUYsMHhFRiwweEZBLDB4RkQsMHhCRiwweDJCLCAweEZCLDB4N0UsMHhCRiwweEJGLDB4RUIsMHhGQiwweEZCLDB4RkIsCisweERGLDB4RkYsMHhGQiwweEY3LDB4RkYsMHhGRiwweDdGLDB4RjcsIDB4RjcsMHhGRiwweEZELDB4REYsMHhGRSwweEZDLDB4REYsMHhGRiwKKzB4REYsMHhGRiwweEZELDB4RkYsMHhEQSwweEJGLDB4RkYsMHhCQiwgMHhFRiwweEZCLDB4RjksMHhGRiwweEJFLDB4RUYsMHhGQiwweEZCLAorMHhCRiwweEVGLDB4RkIsMHhGRSwweEZGLDB4QkYsMHhFRiwweEZCLCAweEZGLDB4RjcsMHg3RiwweEZELDB4RDcsMHhGRiwweEZGLDB4N0YsCisweEZGLDB4RkYsMHhGRiwweEZFLDB4RjcsMHhGRiwweEZFLDB4RkYsIDB4RjcsMHhGRiwweEZGLDB4N0YsMHhGRiwweEZGLDB4RUMsMHhGRiwKKzB4RkYsMHhGRSwweERGLDB4QkYsMHhGRiwweEZCLDB4RkUsMHhGRiwgMHhCQiwweDY4LDB4QUUsMHgxRiwweEFFLDB4RkIsMHhGQiwweEZGLAorMHhGRiwweEJGLDB4RkYsMHhENSwweEZGLDB4N0YsMHhGRiwweEZGLCAweEY3LDB4RkUsMHhGRSwweEZGLDB4QkYsMHhFRiwweDlGLDB4RkQsCisweDdGLDB4RkYsMHhDQiwweEZGLDB4RkYsMHhERiwweEZGLDB4RkYsIDB4QkIsMHhGNywweEJGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhERiwKKzB4RkYsMHhCRiwweEZCLDB4RkYsMHhGRiwweEZGLDB4REUsMHgzRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4QTcsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RUYsMHhGRiwweDdGLDB4RkIsMHhGRCwweEZCLCAweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhDRiwweEYzLDB4N0MsCisweEZGLDB4N0YsMHg4RCwweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkIsMHhGRiwweEY3LDB4RkIsMHhGRSwweEZELDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEY3LDB4RkQsMHhGRiwweDdGLDB4RkQsMHgxRiwgMHhGRCwweEZGLDB4RkYsMHhGRiwweEZGLDB4QkYsMHhERiwweEZGLAorMHhGRiwweEZFLDB4NUMsMHhGRiwweDZELDB4RkYsMHg3RiwweEFCLCAweEU3LDB4RjEsMHhGRiwweEZELDB4OUYsMHhGRiwweEZGLDB4QUQsCisweEVCLDB4N0EsMHgzRiwweDFGLDB4RkYsMHhGRiwweEZFLDB4QkYsIDB4QUYsMHhGMywweERFLDB4RjUsMHhGRiwweDhGLDB4RkIsMHhERiwKKzB4RTYsMHg3RiwweEZGLDB4REYsMHhGMywweEZELDB4RkYsMHg3RSwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkQsMHhGNywweEYzLAorMHg3RiwweERGLDB4RjcsMHhFRiwweEZGLDB4RjYsMHgzRiwweDlGLCAweERGLDB4RkYsMHhGRiwweEVFLDB4RkYsMHhGRiwweEVGLDB4RkIsCisweEZGLDB4RkYsMHhGOSwweEZCLDB4RkUsMHg0RiwweEJGLDB4RUYsIDB4QkIsMHhGRiwweDY5LDB4QUYsMHhBRiwweEZDLDB4RkYsMHgzRiwKKzB4REQsMHhGRiwweEZDLDB4QkYsMHg4RiwweEZGLDB4RkQsMHhGMywgMHhCRiwweEVELDB4OUUsMHhGQywweEJGLDB4NkYsMHhGNSwweEQzLAorMHhERiwweEZGLDB4REIsMHhENiwweEY1LDB4RUYsMHhGRCwweEZFLCAweEZGLDB4QjksMHhGRiwweDFGLDB4RDIsMHhBOSwweEFGLDB4RkYsCisweERCLDB4RjcsMHhCRiwweEVGLDB4NDYsMHhGRiwweEZGLDB4QUQsIDB4RUIsMHg3QSwweERGLDB4RUYsMHhGNywweEZGLDB4N0YsMHhGNywKKzB4OUYsMHhFRCwweEZGLDB4N0YsMHhGRiwweEFELDB4RUIsMHg3RiwgMHhGNSwweDZGLDB4RkYsMHhGRCwweEZCLDB4RDYsMHhGNCwweEY3LAorMHhGQiwweEY5LDB4N0UsMHg3RiwweEZGLDB4NUYsMHhDMiwweEZFLCAweEJGLDB4RkQsMHhGQiwweDMzLDB4REYsMHhGOSwweDVCLDB4RkYsCisweEZGLDB4REQsMHg2NywweDdELDB4Q0YsMHhFRiwweERCLDB4RUMsIDB4RkYsMHg3NywweERELDB4RjcsMHhGRCwweEZGLDB4RkYsMHhERSwKKzB4QTcsMHhCRiwweEQ0LDB4OUYsMHhGRiwweEZGLDB4QkYsMHhFRiwgMHhGRSwweEZGLDB4REYsMHhFRiwweEJCLDB4RkYsMHhGRiwweEVGLAorMHhFQiwweEZBLDB4RkYsMHhFRiwweEJELDB4RkIsMHhGRiwweEUyLCAweDdGLDB4RkYsMHhERiwweERGLDB4RjcsMHhGRCwweEJGLDB4QkIsCisweDczLDB4RjcsMHhGRCwweDdGLDB4REYsMHhERSwweEY3LDB4QkYsIDB4RUEsMHhEQiwweEY2LDB4RkYsMHhENiwweEZGLDB4RkYsMHg2NiwKKzB4RkYsMHhCRSwweEZGLDB4QkYsMHg2QiwweEQ5LDB4RjYsMHhERiwgMHhGRiwweEZCLDB4N0UsMHg3RiwweEI3LDB4N0UsMHhGRiwweEZFLAorMHhGRiwweENELDB4RkYsMHhGRSwweDdGLDB4RkYsMHhGQywweEZELCAweDNGLDB4RkIsMHhGQiwweEY3LDB4RkYsMHhGRiwweEZCLDB4RjYsCisweDdELDB4RkUsMHg3RiwweEZGLDB4RkMsMHhGRiwweEI5LDB4RkYsIDB4RjksMHhGQSwweEZFLDB4QkYsMHhBRiwweDVCLDB4RDYsMHhFRCwKKzB4QUQsMHg3QiwweEY2LDB4RjksMHhCRiwweEVGLDB4RjgsMHhGQSwgMHhGRSwweEJGLDB4RkUsMHhFNiwweEZGLDB4RkYsMHhGNywweEZELAorMHhGRiwweDdGLDB4QkYsMHhFRiwweEYzLDB4RkYsMHhGRiwweDZGLCAweEY3LDB4RkUsMHhGRiwweEZGLDB4RjcsMHhGRCwweEZFLDB4RjcsCisweEVGLDB4RkYsMHhGQiwweEVGLDB4RkIsMHg3RSwweERFLDB4RkUsIDB4RkYsMHhCRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkIsMHhGRiwKKzB4RkYsMHhFRiwweEZCLDB4NkYsMHhGQywweDFGLDB4RkUsMHhFNywgMHhGRiwweEZGLDB4RkYsMHhFRiwweEZGLDB4RDMsMHhCNCwweEJCLAorMHhGRiwweEZGLDB4RkQsMHhCRiwweDZGLDB4RTMsMHhGRSwweEZGLCAweEJGLDB4RkMsMHhCRiwweEY3LDB4Q0YsMHhGNywweEZELDB4RkYsCisweDJGLDB4REYsMHhBQiwweEVBLDB4RkYsMHhERiwweEU3LDB4RUEsIDB4OUEsMHhBRiwweEVGLDB4RkIsMHhGRSwweEZGLDB4RjUsMHgzRiwKKzB4RkQsMHg3RSwweEZGLDB4RDcsMHhGNSwweEZCLDB4RkYsMHhGRCwgMHhGNywweEZGLDB4N0YsMHhGRSwweEY3LDB4RkQsMHhGRiwweEQ3LAorMHhGRiwweEQ3LDB4N0YsMHhFRSwweDdGLDB4RkEsMHg3OSwweEZFLCAweDJGLDB4OEIsMHhFNiwweEY5LDB4RkUsMHgzRiwweDlFLDB4RjksCisweEJFLDB4MkYsMHgwQiwweEU3LDB4RjksMHhGRSwweDJGLDB4OUYsIDB4RkQsMHhGRiwweEZFLDB4N0QsMHg3RiwweDVGLDB4RDcsMHhGRiwKKzB4RkYsMHg3RiwweEZGLDB4RkQsMHhGRiwweDdGLDB4NUYsMHg5NywgMHhGRiwweEZELDB4N0YsMHg1RiwweEZGLDB4RTMsMHhGRiwweEZGLAorMHhGQSwweEZFLDB4QkYsMHhBRiwweEZCLDB4RkIsMHhGRiwweEZGLCAweENGLDB4RUIsMHhGRSwweEJGLDB4QUYsMHhGRiwweEZBLDB4RkUsCisweEJGLDB4RkYsMHg4NywweEZGLDB4RkYsMHhGNSwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZELDB4RkYsMHg3RiwweEZGLDB4RkYsMHhGRiwKKzB4RkIsMHhGRiwweEZGLDB4RjUsMHhGRiwweEZGLDB4RkUsMHgwRiwgMHhGRiwweEZELDB4RUIsMHhGRiwweEZGLDB4RjcsMHhGRiwweEVGLAorMHg3QiwweERGLDB4RkUsMHhGRiwweEZGLDB4REYsMHhGNywweEZELCAweEVCLDB4N0YsMHhERiwweEZGLDB4NUYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkQsMHhCRiwweEZGLDB4N0UsMHhGQSwweEJGLDB4QzcsIDB4REIsMHhGNywweEJELDB4M0YsMHhGQiwweEZGLDB4RjYsMHhGRiwKKzB4RkEsMHhBRiwweEZGLDB4RUIsMHhGQSwweEZFLDB4M0YsMHgyRiwgMHhFQSwweEZBLDB4M0UsMHhBRCwweEM5LDB4QkEsMHhGNiwweEFELAorMHhBRiwweEVCLDB4RkEsMHhGNiwweEJGLDB4RkUsMHg3RiwweEZGLCAweEZGLDB4RkQsMHhGRiwweEYxLDB4N0YsMHgzRiwweENGLDB4RjEsCisweEVGLDB4RkYsMHg3RiwweEZGLDB4QkMsMHhERiwweERGLDB4RjcsIDB4REQsMHhGRiwweEUwLDB4N0YsMHhGRiwweEZGLDB4RkUsMHhGRiwKKzB4RkEsMHhFQywweEJCLDB4N0YsMHg1RiwweEZGLDB4RkIsMHhFQywgMHhGRiwweEVGLDB4QjcsMHhGRiwweEY3LDB4RkYsMHhGRiwweEI1LAorMHhGRiwweEZGLDB4N0YsMHhGRiwweEZGLDB4RkYsMHhFRSwweERGLCAweDVGLDB4REYsMHhERSwweEZGLDB4QUUsMHhFNywweDc3LDB4RkYsCisweEZGLDB4REYsMHhGNywweEZGLDB4RTMsMHhGRiwweEZBLDB4QkIsIDB4RkUsMHhGRiwweEFGLDB4RkQsMHhGQiwweEZFLDB4QkYsMHhBQiwKKzB4RjksMHhGRSwweEZGLDB4QkYsMHg3RiwweEJGLDB4RkUsMHhCRCwgMHhGRSwweEQ3LDB4RkYsMHg5RiwweEZELDB4RkYsMHhCRSwweEVGLAorMHhGRiwweEVFLDB4RkQsMHhCQiwweDVCLDB4RUYsMHhGRiwweDdGLCAweEVGLDB4RkYsMHhFRiwweEZGLDB4N0YsMHhGRiwweDRGLDB4RkYsCisweEVGLDB4RkIsMHhCQywweEZDLDB4RkYsMHhGRiwweEZGLDB4RkUsIDB4RkUsMHhGRCwweEZBLDB4RkUsMHhGQiwweEZGLDB4RkQsMHhGMywKKzB4RkIsMHhGRiwweEY4LDB4NUYsMHhGRiwweEZGLDB4RDcsMHhGNSwgMHhGRCwweERGLDB4RUYsMHhGRiwweEYzLDB4REMsMHg1RiwweENFLAorMHhGNSwweEJELDB4RkYsMHhGRiwweEQ3LDB4RkYsMHhGRiwweEY5LCAweDNGLDB4RkYsMHhERiwweEY3LDB4RkYsMHhGRSwweEZGLDB4RkQsCisweEZGLDB4RkIsMHhGRiwweEY3LDB4QjksMHg3RCwweEZFLDB4REYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGOSwweDdGLDB4RkYsMHhGRSwKKzB4RkYsMHhGRiwweDdGLDB4RkYsMHhGRSwweEZGLDB4RkYsMHhGNywgMHhGNiwweEZGLDB4QkYsMHhGMSwweEY4LDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEUwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGOSwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RUYsMHhFRiwweEZGLDB4RkYsCisweDlCLDB4RkIsMHg3RiwweEZGLDB4RkYsMHhGRiwweEMxLDB4RkYsIDB4REYsMHhGRiwweDNGLDB4NUYsMHhENywweEJGLDB4RUYsMHhCQiwKKzB4REUsMHhFRSwweEZGLDB4N0YsMHhERiwweEZGLDB4RkUsMHhGNSwgMHg3RiwweERGLDB4RkYsMHg5OSwweEZGLDB4RkYsMHhGQSwweEZGLAorMHhCRiwweEZELDB4RUIsMHg3QSwweEZGLDB4QjcsMHhGRSwweEZFLCAweEZGLDB4RkYsMHhFRiwweEZGLDB4RkYsMHhGRCwweEJGLDB4RkYsCisweDk3LDB4RkYsMHhGRCwweEY3LDB4RkYsMHg3RiwweEY3LDB4RkYsIDB4RkYsMHhGRCwweDVGLDB4RkUsMHhGMywweEY5LDB4REYsMHhERiwKKzB4RkYsMHhGRiwweEZDLDB4RkYsMHhGRiwweDgzLDB4RkYsMHhGRiwgMHhGRSwweEZGLDB4OUUsMHhFQywweEZCLDB4RUUsMHhGRiwweDlGLAorMHhCRiwweEVGLDB4RkYsMHhGRSwweEVELDB4N0IsMHhGRiwweEZGLCAweEZGLDB4RjEsMHg1QSwweEZGLDB4RkYsMHhGRCwweEZGLDB4N0MsCisweDY5LDB4M0IsMHhERiwweEZGLDB4N0YsMHgxRiwweERGLDB4RkYsIDB4RkQsMHhCQSwweEZGLDB4RkYsMHhGQiwweEZGLDB4NUIsMHhCRCwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhENywweEI2LDB4RUQsMHhFOSwgMHhGRiwweEQ2LDB4QkQsMHg2RiwweDVGLDB4RkIsMHhGRiwweEVGLAorMHhGRiwweDVGLDB4RkUsMHhGNiwweDZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RjcsMHhFQiwweDdBLDB4REYsMHhGRiwweDlGLDB4N0YsCisweDdGLDB4RkYsMHhCNywweEZGLDB4RkYsMHhGRSwweERGLDB4RkYsIDB4NkMsMHhGRiwweEZCLDB4RkYsMHhCQiwweDZGLDB4RUIsMHhGRSwKKzB4Q0MsMHhGNywweEE1LDB4RkEsMHg1QywweEY1LDB4NzUsMHhCQiwgMHhCNywweERGLDB4RkUsMHg2RiwweDVGLDB4QzUsMHhCRiwweEZELAorMHg3QiwweEZFLDB4RkYsMHg5NSwweEU3LDB4MjksMHhDRiwweDRGLCAweEY1LDB4OTEsMHhFRSwweDZCLDB4REYsMHhFRiwweEZELDB4NTQsCisweEY1LDB4QkQsMHhCMSwweEZGLDB4RUYsMHhFRSwweEZCLDB4QkUsIDB4QkYsMHhBRiwweEZFLDB4REUsMHhCRCwweDZGLDB4REEsMHhGMiwKKzB4RkYsMHhBRiwweEJFLDB4RkYsMHhGRiwweEZELDB4N0UsMHhBNywgMHhGRiwweEY3LDB4RkYsMHhCRiwweEVGLDB4N0IsMHhGNiwweEZELAorMHhCRCwweDRBLDB4RjIsMHg4NSwweDg1LDB4QkYsMHg1QiwweEZFLCAweEI1LDB4RkQsMHhGQSwweEZGLDB4NEYsMHhGRiwweEZFLDB4REYsCisweEZGLDB4RUQsMHhGRiwweEJGLDB4RkYsMHhCRiwweDdGLDB4RkUsIDB4RkYsMHhCNywweDZELDB4RkYsMHhGNywweEJGLDB4QkYsMHhFRiwKKzB4RkQsMHgxRiwweEZGLDB4RkUsMHg3RCwweEZGLDB4NjcsMHhGRiwgMHhGRiwweEZGLDB4M0YsMHg3RiwweEZFLDB4QkYsMHhGRiwweEU3LAorMHhERiwweEU3LDB4RkYsMHhFRiwweDZCLDB4RkMsMHgxRiwweEZGLCAweEJGLDB4RUYsMHhGQiwweEZFLDB4REUsMHhCRiwweEFGLDB4RkEsCisweEZGLDB4QjYsMHhFRiwweEY5LDB4RkUsMHhGRiwweDhGLDB4RUYsIDB4REIsMHhFRiwweEFCLDB4NkYsMHhGQiwweEZFLDB4RkYsMHhGRiwKKzB4RUYsMHhGRCwweEZGLDB4N0YsMHhGRiwweEZGLDB4REUsMHhGRiwgMHhGRiwweEVGLDB4RkYsMHhGRiwweEZGLDB4M0YsMHhGRiwweDZDLAorMHhGRiwweEJGLDB4RkIsMHhGRiwweEZFLDB4RkYsMHhGQiwweEZFLCAweERGLDB4RkYsMHhGRiwweEVGLDB4RkYsMHhGRiwweEJGLDB4RkYsCisweEZGLDB4RkUsMHhGQiwweEZGLDB4RDUsMHg3RiwweEZGLDB4RkYsIDB4RUYsMHhGQiwweEZGLDB4RkYsMHhCRiwweEVGLDB4NDMsMHhCNSwKKzB4RkQsMHg2RiwweENGLDB4RDYsMHhCRSwweDNGLDB4N0YsMHhEQiwgMHhGRSwweEMzLDB4RkYsMHhGRCwweEZGLDB4QUYsMHhFQiwweEZCLAorMHhGQywweEZGLDB4M0UsMHhFRiwweEU4LDB4RkEsMHhCRCwweENELCAweEFBLDB4RkUsMHhGRSwweDdELDB4Q0YsMHhGRiwweEI3LDB4RkYsCisweEY3LDB4RkYsMHhGRiwweEZGLDB4RkQsMHhGRiwweDc1LDB4Q0QsIDB4NTIsMHhENywweEZELDB4RkIsMHhGNywweERELDB4RkIsMHhFRiwKKzB4RUIsMHhGRiwweEZGLDB4NEYsMHhGRiwweEJGLDB4OUYsMHhFNywgMHhGOSwweEZDLDB4N0YsMHg4QiwweEMzLDB4RjksMHhBRiwweDhGLAorMHhFNywweEU5LDB4QkUsMHg3RiwweDlGLDB4RTYsMHhGOSwweEZDLCAweDVGLDB4RkYsMHhGRiwweEY3LDB4RkQsMHhGRiwweDdBLDB4NUYsCisweEQ3LDB4RUQsMHhGRiwweEZGLDB4RDcsMHhGRiwweERELDB4N0YsIDB4RTcsMHhGRiwweEZDLDB4RkYsMHhGQywweDNGLDB4RkYsMHhGRiwKKzB4RkYsMHhGQiwweEZGLDB4RkUsMHhCRiwweEFGLDB4RkYsMHhGRCwgMHhGRiwweEVGLDB4RkYsMHhFQiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEY3LDB4N0YsMHhGRiwweDdGLDB4REYsMHhGRiwweEZELCAweEZELDB4N0YsMHhGRSwweEY3LDB4RkQsMHg3RiwweERGLDB4RkYsCisweEZELDB4RkYsMHhGRiwweERGLDB4RkIsMHhGRiwweEVFLDB4RkYsIDB4RkIsMHhGRiwweEY3LDB4RkQsMHhGRiwweDdBLDB4REYsMHhGNSwKKzB4RkQsMHhGQSwweERGLDB4RjcsMHhGQywweEZGLDB4N0YsMHhERiwgMHhCRiwweEVELDB4RkYsMHhDOSwweEZGLDB4REYsMHhGRiwweEJGLAorMHgyRiwweEZCLDB4RkYsMHhCQywweEFELDB4RkYsMHhGNywweEZGLCAweEZGLDB4RUYsMHhEMywweEZGLDB4N0QsMHhCRiwweDZGLDB4RkYsCisweEZBLDB4RkYsMHhGRSwweEJGLDB4QUUsMHhFQSwweEZBLDB4QkUsIDB4QUQsMHhBNSwweEVCLDB4Q0UsMHhCRiwweEE3LDB4RUIsMHg1QSwKKzB4REUsMHhCRCwweEFGLDB4NkIsMHhGRCwweDU3LDB4RkYsMHhGRiwgMHhGNCwweDdGLDB4MUYsMHg3RiwweEZELDB4RkYsMHg3RiwweDM2LAorMHhGMCwweERGLDB4NzksMHhGRiwweEZGLDB4RkYsMHhGNywweEZELCAweEJGLDB4RkYsMHg4NywweEZGLDB4RkIsMHhGMywweEZDLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweDdFLDB4RkYsMHhCRiwweERGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRCwweEJGLDB4RjgsMHg5RiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhCRiwweEZGLDB4RkYsMHhGRCwgMHhGNywweEZDLDB4QkQsMHhGRiwweEZFLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkIsMHhGOSwweEJGLDB4RkYsMHhGRiwweEVCLCAweEUyLDB4RkUsMHhGRiwweEJGLDB4RUYsMHhBOSwweEJBLDB4MkYsCisweEVCLDB4RjksMHhGRSwweDc3LDB4REYsMHhGNywweEZGLDB4RkYsIDB4RjksMHg3RiwweEZGLDB4RkYsMHg3RiwweEVGLDB4RDcsMHhGRiwKKzB4RkQsMHhGRiwweEZCLDB4RjUsMHhGRiwweEJGLDB4NkYsMHhERiwgMHhGRiwweEZGLDB4RkQsMHhGRiwweEZGLDB4RjAsMHhGRiwweEZGLAorMHhGRiwweDNGLDB4Q0YsMHhGRiwweEJBLDB4RUUsMHg5QiwweEJGLCAweEVFLDB4RDcsMHhGRSwweENELDB4RUYsMHhGRiwweERGLDB4QkYsCisweEZGLDB4RkYsMHhDNSwweEZGLDB4RkYsMHhGRCwweDdGLDB4NEYsIDB4RkQsMHhGNiwweEQ5LDB4RkYsMHg0RiwweEQ2LDB4RkQsMHhCRiwKKzB4NkUsMHhGRiwweEZGLDB4RjQsMHg3RiwweEZGLDB4N0YsMHg4QiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEY3LDB4RkYsMHhGOSwweEZFLAorMHgzNywweEZGLDB4RDksMHhGQiwweEY1LDB4QUYsMHhGRCwweEZGLCAweEZGLDB4RkIsMHhGRiwweEZGLDB4MDcsMHhGRiwweEZGLDB4RkYsCisweEZCLDB4RjcsMHhGRiwweEZELDB4RkYsMHg3QywweEZBLDB4N0UsIDB4NEYsMHhGQywweERGLDB4MUQsMHhDNywweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhBRSwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkQsMHhGQiwgMHhGRiwweEZGLDB4RkUsMHhGRSwweEZDLDB4RkYsMHg3RiwweDdGLAorMHhCRiwweEVGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHg1RiwweEZELCAweEZGLDB4RkYsMHhGRiwweEZELDB4NkYsMHg1QSwweEQ3LDB4N0IsCisweEJFLDB4NUYsMHhGRSwweDM5LDB4RkYsMHhGNywweEZGLDB4RjcsIDB4RkQsMHhGRSwweEFBLDB4MUYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkUsMHhGRSwweEFCLDB4QUYsMHhGRCwweEZFLDB4QkYsMHhGRiwgMHhGNywweEZGLDB4N0YsMHhGRSwweDhGLDB4RTMsMHhGQiwweEVFLAorMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RUIsMHhGQiwweEZGLCAweEZELDB4QkYsMHhFRiwweERGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZCLDB4RTQsMHgzRiwweEZGLDB4REYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGMywweEVGLDB4QkIsMHhGQiwKKzB4QkYsMHhFRiwweEJCLDB4RkYsMHhENywweEJGLDB4RkYsMHhGRiwgMHhGRiwweDI5LDB4QUYsMHhGNywweEZGLDB4RkYsMHhGQiwweEZGLAorMHhGQiwweEU2LDB4RkYsMHgwRiwweEZCLDB4M0YsMHhERiwweDBGLCAweEZGLDB4QUYsMHhGRiwweEZGLDB4RkYsMHhGNSwweEMzLDB4REYsCisweDVGLDB4RkYsMHhGRiwweEZGLDB4RkUsMHg2QiwweENBLDB4QkUsIDB4QkMsMHhGRiwweDlGLDB4RjIsMHhCRiwweEZGLDB4RkUsMHhGQSwKKzB4RkYsMHhGRiwweEVGLDB4MTYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZDLDB4REYsMHg5NywweEZELDB4NzksMHhGRiwweDM3LAorMHhFNywweDdGLDB4RkYsMHhGRiwweEI1LDB4RkYsMHhGRiwweEY2LCAweDJGLDB4RkYsMHhGRCwweEZCLDB4RkUsMHhGRiwweEZGLDB4RkQsCisweDVGLDB4NTcsMHg1RiwweEZGLDB4REIsMHg1MiwweERGLDB4RkYsIDB4RkQsMHhCRiwweEZGLDB4RkYsMHhGQywweERCLDB4RkYsMHg3QiwKKzB4QjUsMHhGRCwweDdGLDB4RkYsMHg3MSwweDlDLDB4NkUsMHhGRiwgMHhGNiwweDM1LDB4QTUsMHg5QiwweEZGLDB4RkYsMHhGRCwweEZGLAorMHhGRiwweERCLDB4OUUsMHg3RiwweEZFLDB4RUYsMHhGQiwweEZGLCAweEZGLDB4QkQsMHhFRiwweEZGLDB4REUsMHhCNywweEY5LDB4NEIsCisweEZGLDB4RjUsMHhFRiwweEZGLDB4RkYsMHhGRiwweEU4LDB4N0UsIDB4RkYsMHhFQSwweERGLDB4RjcsMHhGRiwweEZELDB4NjksMHg1QiwKKzB4RkMsMHg5RiwweEVGLDB4NzgsMHhENiwweEZGLDB4RUIsMHhFRiwgMHhGRiwweEZGLDB4RkYsMHhFOCwweEZGLDB4RkYsMHhFRCwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhFMywweEY5LDB4RjYsMHhCRiwweEZGLCAweEZGLDB4RkUsMHhERiwweEZGLDB4N0YsMHhGRiwweEZGLDB4RkYsCisweEQxLDB4RkYsMHhGRiwweEU3LDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RTcsMHhGOSwweEZGLDB4QkYsMHg3RiwweEQ5LDB4RkYsMHhGRCwKKzB4RkUsMHg3RiwweEZGLDB4RkUsMHhGRiwweEY5LDB4RkYsMHhGQiwgMHhENiwweERGLDB4QkYsMHhFRiwweDVCLDB4RDYsMHhGRiwweEJGLAorMHhGQiwweEY2LDB4RkYsMHhCRiwweEVGLDB4RjgsMHhGNiwweERELCAweEJFLDB4RkUsMHgxNiwweEZGLDB4QkYsMHhFRiwweEZGLDB4RkUsCisweEZGLDB4QkYsMHhFRiwweEZGLDB4RkYsMHhGRiwweDZGLDB4RkIsIDB4RkYsMHhGRiwweEZGLDB4NkYsMHhGMywweEZGLDB4RjcsMHhFRiwKKzB4RkIsMHhGRiwweEJGLDB4RkYsMHhFRiwweEZFLDB4RkYsMHhCRiwgMHhGRiwweEZGLDB4RkYsMHhCRSwweEJGLDB4RkYsMHhFRiwweEZGLAorMHg3RiwweEVGLDB4RkYsMHhGRCwweDE3LDB4RkIsMHg3QiwweEZGLCAweEZGLDB4RkQsMHg3RiwweERCLDB4RjYsMHhGNCwweDdGLDB4RkEsCisweEZFLDB4RjUsMHhCRiwweEVCLDB4RTMsMHhGNywweEZGLDB4RkYsIDB4RTksMHhCRiwweEZGLDB4QUYsMHhGNywweEZELDB4RjMsMHg3RSwKKzB4OEYsMHhBMywweEVBLDB4RkYsMHhDQiwweEYzLDB4RUUsMHhGRiwgMHhCRiwweEVGLDB4RjcsMHhGOSwweEZGLDB4RkUsMHg3RiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGNSwweEZCLDB4RjYsMHhGRiwweEY1LCAweDJGLDB4RkUsMHhGQiwweEQ3LDB4QkYsMHhGRiwweEJFLDB4REYsCisweDlGLDB4RkYsMHhGMCwweEZGLDB4RkYsMHhGOSwweEZFLDB4N0YsIDB4OEYsMHhBMywweEY4LDB4RkUsMHg2RiwweDlGLDB4RjksMHhGNiwKKzB4MkYsMHg5RiwweEU3LDB4RjksMHhGRSwweDJGLDB4OUYsMHhFMSwgMHhGRiwweEZGLDB4RkYsMHg3RiwweERGLDB4RjcsMHhGNSwweEZELAorMHg3RiwweDdGLDB4RjUsMHhGRiwweDlGLDB4NUYsMHhGQiwweEZFLCAweEZGLDB4N0YsMHhGRiwweEZGLDB4Q0IsMHhGRiwweEZGLDB4RkIsCisweEZFLDB4RkYsMHhCRiwweEFGLDB4RkIsMHhGRSwweEZGLDB4REYsIDB4RkUsMHhGRSwweEJGLDB4RjcsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhDNywweEZGLDB4RkYsMHhGRCwweEZGLDB4N0YsMHhERCwgMHhGNywweEZELDB4RkYsMHhGRiwweEQ3LDB4RkYsMHhGRCwweDdGLAorMHhGRiwweEZCLDB4RkQsMHhGRiwweEZGLDB4RkUsMHhFRiwweDdGLCAweEZELDB4RUYsMHhGQiwweEZFLDB4RkIsMHhGRCwweEZGLDB4N0YsCisweERGLDB4RkQsMHhGRiwweDdBLDB4REYsMHhGNywweEZELDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4MUYsMHhGRiwweEZGLDB4RDMsMHhGNywKKzB4RkYsMHhGRiwweDZGLDB4REIsMHhGRiwweEZGLDB4RUYsMHhDQiwgMHhGNCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZFLAorMHgyOSwweEZGLDB4RTgsMHhEQSwweDc2LDB4OUYsMHhBRiwweDZBLCAweERBLDB4RkUsMHgzNSwweEVCLDB4REEsMHhENiwweEJGLDB4QUIsCisweEVCLDB4N0EsMHhERSwweEJGLDB4RDcsMHg3RiwweEZGLDB4RkUsIDB4RkYsMHhCRiwweEVGLDB4RkQsMHhERiwweDc3LDB4QkYsMHhGRCwKKzB4MzcsMHhFRiwweEZGLDB4RUYsMHhGRiwweDNGLDB4RkYsMHhGRiwgMHhGRiwweEZFLDB4N0YsMHhGRiwweEZGLDB4RkYsMHhGNywweDdFLAorMHhERiwweEZGLDB4RkYsMHhGRiwweEZBLDB4QjcsMHg3RiwweEZGLCAweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHhGRiwweDg5LDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHg5RiwweEZCLDB4RkYsMHhGRiwweEZGLDB4RTcsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4QUEsMHhGRiwweEFCLDB4RkIsMHhGQSwgMHhFRiwweEJGLDB4RkYsMHhERiwweEZBLDB4N0IsMHhCOSwweEZFLAorMHhGRSwweEZGLDB4RkQsMHhGRiwweEY3LDB4RkUsMHgzRiwweEZGLCAweEI3LDB4RkYsMHhGNywweEVFLDB4RkYsMHg3RiwweEVGLDB4RkYsCisweEZGLDB4N0YsMHhGRiwweDFGLDB4RkIsMHhGRiwweEJGLDB4RkIsIDB4RkUsMHhGRiwweEJELDB4RkYsMHhGRiwweDJGLDB4RkYsMHhCRiwKKzB4RkYsMHg3RiwweERGLDB4RkEsMHhGRiwweEZGLDB4RkMsMHhFRSwgMHhGNSwweEYzLDB4QkUsMHhGQiwweDBGLDB4RUYsMHhGMywweEJFLAorMHhFRiwweEZDLDB4NUYsMHhGRiwweDVBLDB4RkYsMHhGNywweERGLCAweEZGLDB4RkYsMHhGRSwweEQ1LDB4RkMsMHg1RiwweEZCLDB4RjIsCisweEZGLDB4RkYsMHgyRiwweEJCLDB4RjMsMHhGRiwweEZGLDB4QkYsIDB4RkYsMHhFRiwweEZGLDB4RUYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4QkYsMHhGRiwweEZGLDB4RkQsMHg3QiwweEZGLDB4REYsMHhCOSwgMHhGRiwweEZCLDB4RkYsMHhEOCwweDdGLDB4RkYsMHhGRiwweEZGLAorMHhGQiwweEZGLDB4RkMsMHg3RiwweDFGLDB4QkYsMHhFMCwweERGLCAweEY3LDB4RUYsMHhGRiwweEZELDB4N0YsMHhGRSwweERGLDB4RkYsCisweEUwLDB4RkYsMHhGRiwweEZELDB4RUYsMHhGQiwweEZGLDB4RkUsIDB4RjcsMHhERiwweEZGLDB4RUIsMHg1RiwweEZGLDB4RjcsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4QkYsMHhGRiwweEZELDB4RkYsMHhGRCwgMHhGRiwweEZGLDB4RkYsMHhGNywweEZELDB4RkYsMHgzQiwweERDLAorMHhGRCwweDZELDB4N0IsMHg1RiwweDU3LDB4RjUsMHhGRCwweDdGLCAweDVGLDB4RkYsMHhCMSwweEZGLDB4RUIsMHhGRiwweEZGLDB4RkYsCisweEZCLDB4RkIsMHhGRSwweEZGLDB4QkYsMHhGQiwweEJFLDB4RkYsIDB4QkYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEFGLDB4RkUsMHhGNywKKzB4REYsMHhERiwweEZGLDB4RkYsMHhGRiwweDdGLDB4Q0YsMHhGMywgMHhGOCwweEZGLDB4RDcsMHhGQiwweEZGLDB4NUYsMHhCRiwweEY3LAorMHhGQiwweEZGLDB4N0YsMHhGRSwweDIzLDB4RkYsMHhGRiwweEZFLCAweDdGLDB4RjMsMHhGRiwweEZCLDB4RkUsMHhGRiwweEZGLDB4RjMsCisweEZGLDB4RkYsMHhGNSwweEY5LDB4RkYsMHgzRiwweEZGLDB4RkYsIDB4RjAsMHg5QSwweEZGLDB4QkUsMHg3RiwweEZGLDB4RkMsMHhGOSwKKzB4RkYsMHhGRCwweEFGLDB4RUIsMHhGRSwweEJGLDB4RkYsMHhDRiwgMHhGMywweEZFLDB4N0YsMHhGRiwweEZGLDB4NUIsMHhCRCwweEZGLAorMHhCQywweEVCLDB4RkYsMHhENywweEQ0LDB4QUYsMHhBRiwweEZELCAweEZGLDB4Q0YsMHhGNywweEZELDB4RkYsMHg3RiwweERGLDB4RjcsCisweEZELDB4RkUsMHhGRiwweDZGLDB4RkYsMHhGQiwweEZGLDB4RkYsIDB4RkYsMHhGRCwweDdGLDB4NUUsMHhGRCwweEJGLDB4REIsMHhGNiwKKzB4RkQsMHhCRiwweDZGLDB4RkIsMHhFRSwweEZELDB4RkYsMHg3QSwgMHhGRiwweEZBLDB4RkIsMHhGRiwweDNGLDB4RkIsMHhCNywweDVGLAorMHhENiwweEY3LDB4MUYsMHg3MSwweERDLDB4NzcsMHgxRCwweEM3LCAweDMxLDB4REMsMHg3NywweERGLDB4RjksMHhCRiwweEY1LDB4NUIsCisweEY0LDB4RDcsMHg5RCwweEFFLDB4RkYsMHhCRiwweEZELDB4QkYsIDB4REIsMHhGNiwweEZELDB4QkYsMHg2RiwweERCLDB4RjYsMHhGRSwKKzB4M0QsMHg4MSwweEZGLDB4RUIsMHhGRSwweEZFLDB4RkUsMHhGRiwgMHhFQiwweDdBLDB4REYsMHg3RCwweDc3LDB4N0QsMHhGNSwweDc5LAorMHhERiwweDU3LDB4REQsMHhGNSwweDdELDB4N0UsMHhFNiwweEZGLCAweEQ2LDB4M0YsMHhCRiwweDdGLDB4RkYsMHhENCwweEY1LDB4M0YsCisweEJGLDB4RkIsMHhCRSwweEVGLDB4QjMsMHhFRSwweEZCLDB4OUUsIDB4RUYsMHhCQiwweEZFLDB4OEIsMHhGRiwweEZFLDB4REYsMHhCNywKKzB4RUQsMHhGRiwweEY3LDB4RkQsMHhGRSwweEZGLDB4RUYsMHhCQiwgMHhFRSwweEZGLDB4QkUsMHhFRiwweEJCLDB4RUUsMHhFQiwweEZDLAorMHgxRiwweEZGLDB4RkYsMHhGRCwweEZGLDB4RTcsMHhGRiwweEY3LCAweEZELDB4RkYsMHhFRiwweEZFLDB4RkYsMHhCRiwweEVGLDB4RkIsCisweEZFLDB4RkYsMHhCRiwweEVCLDB4RkEsMHgxRiwweEZGLDB4QjcsIDB4RUYsMHg1QiwweEZFLDB4RkYsMHhBRiwweEVCLDB4REQsMHhFNywKKzB4REUsMHg3NywweDlELDB4RTcsMHg3OSwweERFLDB4NzcsMHg5RCwgMHhCRiwweEU2LDB4NkYsMHhGRiwweEZFLDB4RkYsMHhCRiwweEVGLAorMHhGQiwweEZFLDB4RkQsMHhCRiwweDZGLDB4RjYsMHhGRCwweEJGLCAweDZGLDB4REIsMHhGNiwweEZELDB4QkYsMHhGRiwweDdFLDB4RkYsCisweEZGLDB4RkIsMHhGRSwweEZFLDB4RkYsMHhFRiwweEZCLDB4RkQsIDB4RUYsMHg3RSwweEY3LDB4QkQsMHhFRiwweDdCLDB4REUsMHhGNywKKzB4QkQsMHhFRiwweEZGLDB4RDUsMHhGRiwweEJGLDB4RkYsMHhFRiwgMHhGRSwweEZGLDB4RkMsMHgzRiwweDBGLDB4RTcsMHhGRSwweDdGLAorMHg5RiwweEU3LDB4RjksMHhGRSwweDdGLDB4OUYsMHhFNywweEZFLCAweEYzLDB4RkYsMHhGRSwweERGLDB4QUQsMHhERiwweDY3LDB4RUUsCisweEZCLDB4QkYsMHhFRiwweEZFLDB4RkYsMHhCRiwweEVGLDB4RkIsIDB4RkUsMHhGRiwweEJGLDB4RUYsMHhGRiwweDIzLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweDdGLDB4RkYsMHhGMywweEJDLDB4REIsMHhGRSwgMHhGQiwweEZGLDB4RkIsMHhCRSwweEY3LDB4RkIsMHhGRiwweDdGLAorMHhERiwweEZGLDB4Q0YsMHhGQiwweEZGLDB4OUYsMHhFMywweEY5LCAweEJFLDB4M0YsMHg4RiwweEU3LDB4NzksMHhGRiwweDlELDB4RTcsCisweEY5LDB4RkUsMHg3RiwweDlGLDB4RTcsMHhGOSwweEZFLDB4NUYsIDB4RkYsMHhDRiwweEY3LDB4RkYsMHhGRiwweEZGLDB4REYsMHhGNywKKzB4RkUsMHg3RiwweEU3LDB4RjksMHhGRSwweDdGLDB4RkYsMHhGRiwgMHhGQiwweEZFLDB4RkYsMHhGRiwweEJGLDB4RkYsMHhCRiwweEJGLAorMHhGRiwweEZFLDB4RkYsMHhCRiwweEVGLDB4RkYsMHhGRCwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGNywweEZELDB4RkYsCisweEZGLDB4M0YsMHhGRiwweEJGLDB4RkYsMHhGNywweEZGLDB4RkYsIDB4N0YsMHhERiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEU4LDB4RUYsMHhGRiwgMHg1RiwweEY3LDB4QkYsMHhGOSwweEZFLDB4REYsMHhCNywweEZELAorMHhGRiwweERGLDB4RjcsMHhGRCwweEZGLDB4N0YsMHhERiwweEY3LCAweEZELDB4RkYsMHhERCwweEZGLDB4RjIsMHhGRiwweEJGLDB4RkYsCisweEZGLDB4QkYsMHhGRiwweEZGLDB4MkYsMHhGMiwweEZGLDB4QkYsIDB4MkYsMHg3QiwweEQyLDB4RjcsMHhCRiwweDJGLDB4RkYsMHhCQiwKKzB4RkYsMHhFRSwweDhGLDB4QUYsMHhFQiwweEZBLDB4RkUsMHgzRiwgMHhBNywweDY5LDB4Q0UsMHg4RiwweEE0LDB4RUEsMHhGQSwweEVFLAorMHhCNywweEFFLDB4RUIsMHhGRCwweEM3LDB4RkYsMHhGNywweEY3LCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHg3RiwweDNFLDB4RjMsCisweDc0LDB4RkYsMHgzRiwweDRGLDB4RkYsMHhFNywweEZGLDB4M0YsIDB4RkUsMHhBNywweEZGLDB4RkYsMHhERiwweEY3LDB4QjcsMHhGRiwKKzB4RjcsMHhGRiwweEJBLDB4RUYsMHgzNywweEVCLDB4RkIsMHhGRSwgMHhCRiwweEZCLDB4RkUsMHhGMywweEZGLDB4RjksMHhERiwweEZGLAorMHhCRiwweEZGLDB4RkYsMHhGRiwweEJGLDB4RkYsMHhGRiwweEZGLCAweEZELDB4REYsMHhGRiwweEZELDB4RkYsMHhGRiwweEZCLDB4RkUsCisweEZELDB4RkYsMHhGQiwweEJGLDB4RkUsMHgzRiwweEVELDB4RkYsIDB4REYsMHhCRSwweDNELDB4QTcsMHhGQiwweEZBLDB4M0YsMHhFNiwKKzB4RTEsMHhGRSwweEZFLDB4M0YsMHhFRiwweEUzLDB4REYsMHhGNSwgMHg3RiwweEZFLDB4RkYsMHg3RSwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhFRiwweDZGLDB4RjYsMHhGRiwweDdELDB4RUYsMHhENywweERFLCAweEZGLDB4N0QsMHhFRiwweEZGLDB4RjIsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweDdCLDB4REUsMHhGQiwweEU2LDB4RUUsIDB4RUYsMHgzNywweDZFLDB4RjMsMHg3RSwweEVCLDB4MzcsMHhFRiwKKzB4RkYsMHhDMSwweEZGLDB4RkUsMHhGRiwweEY3LDB4RUYsMHhGRiwgMHhGRiwweEZGLDB4QkYsMHgzRiwweEQyLDB4REYsMHhCRiwweDJGLAorMHg3QiwweEUyLDB4RkYsMHhGRSwweDNCLDB4QkQsMHhEQiwweEZGLCAweEZFLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEVGLDB4RkUsCisweEZGLDB4RkIsMHhGRiwweEZGLDB4QkYsMHhGRiwweEZCLDB4REYsIDB4RkYsMHhCRiwweEZGLDB4QjcsMHhGRiwweEZGLDB4QkYsMHhFRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4MEYsMHhGRiwgMHg3RiwweEZGLDB4MUYsMHhFRiwweEYxLDB4RkQsMHhGRiwweEY2LAorMHhBRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhFRiwweEZGLCAweEZGLDB4RkYsMHhGRSwweDlGLDB4RkYsMHhGRiwweEZGLDB4NzcsCisweEVGLDB4RjcsMHhGQiwweEZGLDB4RkUsMHg1RiwweEZGLDB4RkYsIDB4QkYsMHhDRiwweEZCLDB4RjcsMHhERCwweEY3LDB4RjUsMHhGRiwKKzB4NUYsMHhENSwweEY1LDB4RkQsMHg3RiwweDVGLDB4RDcsMHhGNSwgMHhGRiwweEZCLDB4MEYsMHhGRiwweEZGLDB4QTksMHhFQSwweDdBLAorMHhGRiwweEFGLDB4OEYsMHhGRSwweERGLDB4QUYsMHhFRiwweEZCLCAweEZFLDB4RkYsMHhCRiwweEVGLDB4RkIsMHhERiwweEU1LDB4NUYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhCRCwweDU3LDB4RkYsIDB4RkYsMHg2RiwweDc3LDB4QkYsMHhGNywweEZCLDB4RkYsMHg3RiwKKzB4QkYsMHhGNywweEZGLDB4RkMsMHhCRiwweEZGLDB4OUYsMHhGRiwgMHhGRiwweEVGLDB4RkYsMHhGRSwweEZGLDB4RkYsMHhGRiwweDFGLAorMHhDRiwweEZGLDB4RkMsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZCLCAweDY1LDB4QUYsMHhGMywweDdDLDB4RkYsMHgzRiwweERGLDB4RkYsCisweEZELDB4RTksMHhGRSwweDdGLDB4RTcsMHhGRiwweEZFLDB4N0YsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRCwweEUzLDB4REYsMHhGQiwKKzB4REIsMHhGNiwweEZELDB4RUYsMHg1QiwweEZCLDB4RkYsMHhERiwgMHhGQywweEZGLDB4M0YsMHhERiwweEYzLDB4RkQsMHhGRiwweDdGLAorMHhERiwweEVGLDB4NjYsMHhGRiwweERGLDB4QUQsMHhFQiwweDdBLCAweERFLDB4RjcsMHhGNywweEU3LDB4RDksMHhGRCwweDlGLDB4NjcsCisweEQ5LDB4RjYsMHg3RCwweDlGLDB4RTcsMHhERiwweEY1LDB4NDcsIDB4RkQsMHg2NSwweDVCLDB4RDYsMHhGNCwweEZFLDB4RkYsMHhFRiwKKzB4RkYsMHg2RCwweEY2LDB4REQsMHhCNywweDZELDB4REIsMHg3NiwgMHhEQywweEI3LDB4N0QsMHhGQSwweDlCLDB4RjYsMHg2RCwweDlELAorMHg2NywweDU5LDB4REYsMHhGNywweERELDB4RkYsMHhFQiwweEZFLCAweEJGLDB4QUYsMHhFQiwweEZBLDB4RkUsMHhCRiwweEFGLDB4RTMsCisweEQxLDB4OUYsMHhGRiwweEJELDB4QkYsMHhFRiwweEZFLDB4RjcsIDB4QkYsMHhCRiwweEY3LDB4RDcsMHg3RiwweERELDB4RjcsMHg5RCwKKzB4REYsMHg3RiwweERGLDB4RjcsMHhGRiwweEUwLDB4N0YsMHhGRCwgMHhDMSwweERGLDB4RjcsMHhGRCwweEM3LDB4N0YsMHg3RiwweEZCLAorMHhGRiwweEJCLDB4RUMsMHhGQiwweDNFLDB4RkYsMHhCRiwweEVDLCAweEZCLDB4RkYsMHhEOCwweDdGLDB4QkYsMHg2QywweEZGLDB4QkUsCisweEZGLDB4QkYsMHhFRCwweEZGLDB4RUYsMHhGRSwweEZCLDB4QkYsIDB4RUYsMHhGQiwweEZFLDB4RkYsMHhCRiwweEVFLDB4RkYsMHhDNSwKKzB4RkYsMHhBRiwweDZGLDB4RkYsMHhGQywweEZELDB4M0YsMHhFNywgMHhGRiwweEZFLDB4RkYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEJGLAorMHhFRiwweEZCLDB4RkUsMHhCRiwweDg5LDB4RkUsMHhGQSwweEJBLCAweEZFLDB4QkYsMHhBRiwweEZCLDB4RjYsMHhGNSwweEQ5LDB4N0QsCisweDk3LDB4NjUsMHhEOSwweDc0LDB4NUQsMHg5NywweDY1LDB4RDMsIDB4RkUsMHhENiwweEZGLDB4QkYsMHhGNywweEZELDB4RkYsMHg3RiwKKzB4QkYsMHhDRiwweEZCLDB4RkUsMHhGRiwweEVGLDB4RkIsMHhGRSwgMHhGRiwweEJGLDB4RUYsMHhGQiwweEZGLDB4RjYsMHg4RiwweEZCLAorMHhGRiwweEVGLDB4RkIsMHg3RSwweERCLDB4RkUsMHhGRiwweEJFLCAweEVGLDB4RUUsMHhGQiwweEJFLDB4RUYsMHhCQiwweEVFLDB4RkIsCisweEJFLDB4RkYsMHhGRiwweERGLDB4RkYsMHg0MywweEZGLDB4RkYsIDB4RkIsMHhFRiwweDVGLDB4QjcsMHhGRSwweDdGLDB4RTcsMHhGOSwKKzB4RkUsMHg3RiwweDlGLDB4RTcsMHhGOSwweEZFLDB4N0YsMHhGOSwgMHhCRiwweEZFLDB4QUYsMHg3NywweEZELDB4RkYsMHgyRiwweEFGLAorMHhBNywweEZFLDB4RkYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEJGLCAweEVGLDB4RkIsMHhGRSwweEZGLDB4RjEsMHg3RiwweEVGLDB4REYsCisweEZGLDB4OTcsMHhGNSwweEVGLDB4RkYsMHhERiwweEZGLDB4RkYsIDB4QkYsMHhGRiwweEJGLDB4RkYsMHhGRiwweEZFLDB4RkYsMHhGRiwKKzB4RkYsMHhFMCwweEZGLDB4RkYsMHhGOSwweEZFLDB4MkYsMHg4QiwgMHhFMywweEY4LDB4QkUsMHg3NywweDlGLDB4RjksMHhEQSwweDc3LAorMHg5RCwweEU3LDB4NzksMHhERSwweDc3LDB4OUYsMHhERCwweEZGLCAweEZELDB4RkQsMHg3RiwweDVGLDB4RDcsMHhGRCwweEZGLDB4N0YsCisweEU3LDB4RkUsMHg3RiwweDk3LDB4RTcsMHhGQiwweEZFLDB4RkYsIDB4QkYsMHhFRiwweEZGLDB4QUIsMHhGRiwweEVGLDB4RkEsMHhGRSwKKzB4QkYsMHhBRiwweEZGLDB4RkEsMHhGRiwweEZGLDB4REYsMHhGRiwgMHhGQiwweEZGLDB4RjcsMHhGRCwweEZGLDB4N0YsMHhERiwweEZGLAorMHg2NywweEZGLDB4RjcsMHhGNSwweEZGLDB4RkYsMHhGRiwweERGLCAweEZELDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhFRiwweEZGLDB4QkQsIDB4RUIsMHhGRiwweEZGLDB4RjcsMHhBRCwweEVCLDB4RkYsMHhERiwKKzB4RkQsMHhGRiwweDNGLDB4REYsMHhGNywweEZELDB4RkYsMHg3RiwgMHhERiwweEZGLDB4NUYsMHhGRiwweEY3LDB4RkYsMHhGRiwweEZELAorMHhCRiwweEZGLDB4Q0IsMHhGNCwweEZGLDB4N0YsMHhEMywweEY3LCAweEZELDB4M0YsMHg3RiwweEQzLDB4RjcsMHhGRiwweEZDLDB4M0YsCisweEZGLDB4RUEsMHhGQSwweEJFLDB4QUYsMHhBQiwweEVCLDB4QkEsIDB4RjQsMHg5NSwweDZCLDB4NTIsMHhENCwweEFELDB4MkYsMHg0QSwKKzB4RDIsMHhGNiwweEJGLDB4RDIsMHg3RiwweEY3LDB4M0YsMHhGRiwgMHhGRiwweEYzLDB4N0YsMHhGRiwweEZGLDB4RjcsMHhGRiwweEJBLAorMHhERiwweEZCLDB4RkQsMHhGRiwweEJGLDB4RkYsMHhGQiwweEZGLCAweEY4LDB4N0YsMHhFQSwweEZGLDB4RkUsMHhGRSwweERGLDB4RkYsCisweEY3LDB4RkYsMHg3RiwweEJCLDB4RkYsMHhGRiwweEJGLDB4REYsIDB4RkIsMHhGRiwweEZGLDB4QkYsMHhGRiwweEIxLDB4N0YsMHhGRiwKKzB4RkIsMHhFRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhCRiwgMHhDRiwweEZFLDB4RkYsMHhGRiwweEVGLDB4RkYsMHhGNywweEZGLAorMHhGRiwweEZGLDB4RjEsMHhGRiwweDY5LDB4QkUsMHhGQSwweEJGLCAweEFGLDB4RTIsMHhGRiwweEZFLDB4RkQsMHhBRiwweEYzLDB4RkUsCisweEZGLDB4QkYsMHhFRiwweEZCLDB4RkMsMHhGRiwweEZGLDB4MDcsIDB4RkQsMHg5NSwweERCLDB4REYsMHg3RiwweERGLDB4QUYsMHhGRiwKKzB4RjcsMHhBRiwweDM2LDB4RkUsMHhCRiwweDY1LDB4RUIsMHhGNiwgMHhGRSwweDlGLDB4NkYsMHhGRSwweDA3LDB4RkYsMHhDRiwweEZGLAorMHhGOCwweEZFLDB4RkYsMHhDRiwweEZGLDB4RjYsMHhGQSwweEU3LCAweEZCLDB4RkUsMHhGRiwweEJCLDB4RUQsMHhGOSwweEZGLDB4RkYsCisweEZGLDB4NUYsMHhGRiwweEZGLDB4RkYsMHg3NSwweEZGLDB4RUYsIDB4N0UsMHhGRCwweEUwLDB4RTgsMHg1RSwweEQzLDB4RTUsMHhGOSwKKzB4M0UsMHg1RiwweEQ3LDB4RjcsMHhGRiwweEZBLDB4MkYsMHhGQiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZFLDB4RkYsMHhGRiwweDdGLAorMHg3RiwweEQ3LDB4RjUsMHg3RCwweDVGLDB4NTcsMHhENSwweEY1LCAweEVGLDB4RkYsMHhGMywweDdGLDB4RkMsMHg3RiwweEZGLDB4QzcsCisweEYxLDB4RkYsMHhGRiwweDFGLDB4Q0YsMHhCMCwweEZGLDB4M0YsIDB4Q0YsMHhGMywweEZDLDB4RkYsMHgzRiwweENFLDB4RkYsMHhFNCwKKzB4RkYsMHhERiwweDdGLDB4RkUsMHhGNywweEJCLDB4RkYsMHhGRiwgMHhERiwweEVGLDB4RUUsMHhGRiwweEJGLDB4RUYsMHhGQiwweEZFLAorMHhCRiwweEJGLDB4RUYsMHhGRiwweEQxLDB4RkYsMHhGRiwweEZGLCAweEZELDB4RkIsMHhGRiwweEZELDB4RkYsMHhGQiwweDlGLDB4RTksCisweEZFLDB4N0YsMHg5RiwweEU3LDB4RjksMHhGRSwweDdGLDB4QkYsIDB4RkYsMHhCMywweEZGLDB4RkYsMHhGNywweEZGLDB4RkYsMHhBRiwKKzB4RjcsMHhGRiwweEI2LDB4M0YsMHhFQiwweEZBLDB4RkUsMHhCRiwgMHhBRiwweEVCLDB4RkEsMHhGRSwweEJGLDB4RkUsMHhBNywweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEY3LDB4RkYsMHhGRiwweEZGLCAweEZFLDB4OUYsMHhGNywweEY5LDB4RkYsMHg3RiwweDlGLDB4RTcsCisweEZGLDB4RkYsMHhGRSwweEFGLDB4NkYsMHhGRiwweEZGLDB4RkYsIDB4OUYsMHhGRiwweERGLDB4RkYsMHg3RCwweDVGLDB4REQsMHhGRiwKKzB4RkIsMHhCRiwweEU3LDB4QkIsMHhGRiwweEZCLDB4REYsMHg2RCwgMHg1RiwweDdFLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhFQiwweEY3LDB4RkYsMHhFNywweEVGLDB4RjcsMHhGRiwweEZGLCAweDdGLDB4RkYsMHhGNywweEZGLDB4RkMsMHg4RiwweEZGLDB4RUYsCisweEZELDB4RkUsMHhGRiwweEJFLDB4RjQsMHhGMiwweDdELDB4RDcsIDB4Q0YsMHhGRiwweDNGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhDRiwweDZCLDB4RkYsMHhCRiwweDNGLDB4RkIsMHhGMiwgMHhGQywweDdGLDB4RUIsMHhGRiwweDlGLDB4RkEsMHhGRiwweEZGLAorMHgzRiwweEZGLDB4RjMsMHhGRiwweEZGLDB4RkQsMHg3MCwweEY3LCAweEZGLDB4RkYsMHhCRiwweEZGLDB4RkIsMHhENywweEZFLDB4RjUsCisweDc3LDB4RkYsMHgxNSwweERELDB4NzcsMHhGRCwweEZGLDB4N0YsIDB4REYsMHhGNywweEZCLDB4Q0QsMHhCRiwweEZGLDB4RkQsMHhGRiwKKzB4RkYsMHhERiwweDM3LDB4Q0QsMHhGOSwweEVDLDB4RkUsMHhFRiwgMHhCQiwweEY0LDB4RkIsMHgzRiwweDRGLDB4QjMsMHhGRiwweEZELAorMHhDQiwweEZGLDB4RTksMHg3RSwweDU0LDB4OUYsMHhFNSwweDRCLCAweEI3LDB4RkYsMHhERCwweDdELDB4QzcsMHg3MSwweERELDB4NzcsCisweDVELDB4RDcsMHg3NSwweENELDB4N0YsMHhENiwweEZGLDB4RDMsIDB4RjYsMHhGOSwweDNGLDB4NkQsMHg5NSwweEFGLDB4N0YsMHhGRSwKKzB4RkYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEJGLDB4RUYsMHhGQiwgMHhGRSwweEY2LDB4QzcsMHhGRiwweEFELDB4N0IsMHhDQSwweEZGLAorMHhCRiwweEJGLDB4RUYsMHhGRCwweEUzLDB4REYsMHhCNywweEVELCAweEZCLDB4N0UsMHhERiwweDM3LDB4RUQsMHhFMywweEZCLDB4REYsCisweEZGLDB4NTIsMHg1QywweDE1LDB4RkQsMHhDRiwweDdGLDB4REYsIDB4RkUsMHhFRiwweEVGLDB4RkIsMHhGRSwweEZGLDB4QkYsMHhFQywKKzB4N0IsMHhGRSwweEZGLDB4RkUsMHgzRSwweDdGLDB4REEsMHhGNywgMHhGRCwweEZGLDB4N0YsMHhGRiwweEZGLDB4RkIsMHhFRiwweEJCLAorMHg2RiwweEZCLDB4RkUsMHhGRiwweEJGLDB4RUYsMHhGQiwweEZGLCAweEY3LDB4N0QsMHhGRiwweEQ4LDB4RkYsMHhGRCwweEJGLDB4N0YsCisweEZCLDB4RkYsMHhGRiwweDlGLDB4RkIsMHhGRSwweDdGLDB4OUYsIDB4RTcsMHhGOSwweEZFLDB4N0YsMHg5RiwweEVBLDB4N0YsMHhGNiwKKzB4QkYsMHhCRCwweDZBLDB4NUEsMHhGNiwweEU1LDB4QkYsMHg3NywgMHg1RiwweDZELDB4REQsMHg3NywweDVELDB4RDcsMHg3NSwweERELAorMHg3NywweEZGLDB4QTUsMHhCRiwweENGLDB4RkIsMHhGRiwweEZGLCAweEJGLDB4Q0YsMHhGQiwweEZELDB4RkYsMHhCRiwweEYzLDB4RkUsCisweEZGLDB4QkYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEZELDB4QUIsIDB4RkYsMHhCRiwweEJGLDB4RkYsMHhGQiwweEZGLDB4N0YsMHhFRiwKKzB4RkYsMHhCRSwweEZCLDB4RUUsMHhGQiwweEJFLDB4RUYsMHhCQiwgMHhFRSwweEZCLDB4QkYsMHhGRiwweEI1LDB4RkYsMHhEMCwweEJDLAorMHhGRCwweDJGLDB4NEIsMHhGNywweEZGLDB4RkYsMHg5RiwweEY5LCAweEZFLDB4N0YsMHg5RiwweEU3LDB4RjksMHhGRSwweDdGLDB4OUYsCisweEZBLDB4OEYsMHhGRCwweEFCLDB4RkEsMHhEQSwweEJGLDB4QUYsIDB4QjMsMHhGRCwweEZGLDB4QkYsMHhGQiwweEZFLDB4RkYsMHhCRiwKKzB4RUYsMHhGQiwweEZFLDB4RjcsMHhCRiwweEZGLDB4OUYsMHhGRiwgMHg3NywweEY3LDB4QkQsMHhGRCwweDc3LDB4REYsMHhGRiwweDdFLAorMHhERiwweEVELDB4QkIsMHhGRSwweEZGLDB4QkUsMHhFRiwweEZCLCAweEZFLDB4RkYsMHhGQSwweDNGLDB4RkYsMHhCRSwweDZGLDB4OEYsCisweEU2LDB4RjksMHhGRSwweDdGLDB4OUYsMHhDNywweEZFLDB4N0YsIDB4OUYsMHhFNywweEY5LDB4RkUsMHg3RiwweDlGLDB4RTcsMHhGQiwKKzB4N0YsMHhGRiwweDdGLDB4Q0YsMHhGRiwweEZELDB4RkYsMHhGRiwgMHhERiwweEZCLDB4QUYsMHhCRiwweEVGLDB4RkYsMHhGRSwweEZGLAorMHg5RiwweEVGLDB4RkIsMHhGRiwweEZDLDB4RkYsMHhGQiwweEZFLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RjcsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGNSwweEZGLDB4RkYsMHhGRiwweDNGLDB4REYsMHhGNywKKzB4RkYsMHhGRiwweDdGLDB4RUYsMHhGRSwweEZGLDB4QkYsMHhGRiwgMHhGQiwweEZGLDB4RkYsMHhCRiwweEVGLDB4RkYsMHhCMywweDdGLAorMHhGRiwweDdCLDB4NUUsMHhGNywweEZELDB4RkYsMHg3QiwweDdGLCAweEY3LDB4RkYsMHg3RiwweERGLDB4RjcsMHhGRCwweEZGLDB4N0YsCisweERGLDB4RjcsMHhGRiwweDE3LDB4RkYsMHhGRiwweEZGLDB4N0YsIDB4RkYsMHhGRiwweERELDB4RjYsMHhGQywweEJGLDB4Q0IsMHhGMiwKKzB4QkMsMHhCRiwweDJGLDB4Q0IsMHhGMiwweEZDLDB4QkYsMHhGRSwgMHg4RiwweEZGLDB4RkEsMHg3RSwweEJGLDB4QTcsMHhFQiwweERBLAorMHhGQywweEJGLDB4QUYsMHg3QSwweEZFLDB4QkYsMHhBRiwweEVBLCAweEZBLDB4RkUsMHhCRiwweEFGLDB4RjQsMHhERiwweEZFLDB4RkYsCisweEYzLDB4M0MsMHg3RiwweDNFLDB4RkYsMHhDRiwweEY4LDB4QkYsIDB4OEYsMHhFMywweEY4LDB4RkUsMHgzRiwweDhGLDB4RTcsMHhFOCwKKzB4RkYsMHhGQywweDlGLDB4RkYsMHhGRiwweENGLDB4RUIsMHhCMywgMHhFNywweEZCLDB4N0IsMHhGMywweEZFLDB4RkYsMHhDRiwweERCLAorMHhGQiwweEZCLDB4QkYsMHg2RiwweDZGLDB4REYsMHhFQywweDdGLCAweEZGLDB4RkYsMHhGNywweEZELDB4RkQsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4QjIsMHhCRiwweEZGLDB4REUsMHhGRCwweEJELDB4RUYsIDB4RkIsMHhGNiwweERGLDB4RUEsMHhFNywweERCLDB4RkUsMHhCQiwKKzB4RkYsMHhFQiwweEZCLDB4QkYsMHg5RiwweDhGLDB4RTgsMHhGRSwgMHgzRiwweDhGLDB4QTMsMHhGOCwweEZFLDB4M0YsMHg4RiwweEZGLAorMHhGOCwweDdFLDB4RkQsMHhGRCwweDdGLDB4RkYsMHhGQiwweENELCAweEZGLDB4RkQsMHhGRiwweDVGLDB4RUYsMHhGRCwweEZGLDB4RkYsCisweERGLDB4RjcsMHhGRCwweEZGLDB4QkUsMHg5MCwweEZGLDB4RkYsIDB4RUUsMHhGRiwweDNGLDB4QkYsMHhGMywweEJCLDB4RkUsMHhCNywKKzB4QUIsMHhGQSwweEZFLDB4QUYsMHhBRCwweEVBLDB4RkEsMHhERSwgMHhBQiwweEZGLDB4NjMsMHhGRiwweEZFLDB4RjIsMHhGRiwweEIzLAorMHhGRiwweERGLDB4RUUsMHg3RCwweEZGLDB4MDMsMHhGMSwweEY0LCAweDNGLDB4MUYsMHhDMywweEYxLDB4RUMsMHg3RiwweEZFLDB4NkYsCisweEZGLDB4RkIsMHhGQiwweEZGLDB4OUYsMHhGRiwweEJGLDB4RkYsIDB4N0IsMHg1RiwweEZELDB4RkYsMHhERiwweEY3LDB4RkQsMHhGRCwKKzB4N0YsMHg3RiwweERGLDB4RkUsMHhDRiwweEZCLDB4RkYsMHhGRiwgMHhBRiwweEZCLDB4RkYsMHgxRiwweEVGLDB4QTUsMHhGRCwweEJGLAorMHhERiwweEZCLDB4N0QsMHhGRiwweEJGLDB4REYsMHhGQiwweEZGLCAweEZELDB4M0IsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkQsCisweEFGLDB4RjMsMHhGRiwweEZCLDB4N0YsMHhCRiwweEQ3LDB4RkIsIDB4QkYsMHg3RiwweEJCLDB4RjcsMHhGRiwweEY4LDB4N0YsMHhGRiwKKzB4RkEsMHg1RiwweEQ3LDB4RkYsMHhERiwweDdGLDB4RUYsMHhGRiwgMHhGRiwweDdGLDB4REIsMHhGNywweEZELDB4RkYsMHg3RiwweERGLAorMHhCNywweEZCLDB4RUMsMHhGRiwweEZGLDB4RjcsMHhCRiwweEVGLCAweEZELDB4RkMsMHhGQiwweEZGLDB4RUYsMHhGMCwweEZFLDB4M0YsCisweDhGLDB4RTMsMHhGOCwweEZFLDB4M0YsMHg4RiwweEVGLDB4OEQsIDB4RkYsMHhGRiwweEVGLDB4N0YsMHhCRiwweEZGLDB4RkIsMHhGRiwKKzB4REIsMHhCRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhFRiwweEQ4LDB4RkYsMHgyRSwweDdGLAorMHhCRSwweEVGLDB4RkUsMHg2RSwweEZGLDB4QkYsMHhGOSwweEZGLCAweEZGLDB4RjMsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZDLDB4NjYsMHhCRSwweDQ3LDB4RjMsMHg3RiwweERGLDB4RkUsIDB4ODcsMHg5RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RTcsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEQ2LDB4NkYsMHg3QywgMHhGQiwweDRGLDB4RDIsMHhGRiwweEZELDB4MkIsMHhGRSwweEZGLAorMHhGRiwweEZELDB4NUYsMHhENywweEQ1LDB4RjUsMHg3RCwweEZGLCAweEZGLDB4RkYsMHhCRiwweDlCLDB4RkYsMHhGRiwweERGLDB4QjcsCisweEZGLDB4RkYsMHhERiwweEZGLDB4M0YsMHhDRiwweEZFLDB4N0YsIDB4QkYsMHhFRiwweEZCLDB4RkMsMHhGRiwweDNGLDB4RkYsMHhEOSwKKzB4QkYsMHhGRSwweDk3LDB4RUMsMHg4RiwweEI3LDB4RkUsMHg5QiwgMHg3RCwweEZELDB4QjcsMHhERCwweDc3LDB4MUQsMHhDNywweDcxLAorMHhERCwweDc3LDB4NUQsMHhENywweEYzLDB4NkYsMHhGRCwweDNGLCAweDczLDB4REQsMHhBRiwweEZELDB4N0EsMHhGRiwweEZGLDB4QUYsCisweEZFLDB4RkQsMHhCRiwweEVGLDB4RkIsMHhGRSwweEZGLDB4QkYsIDB4RUYsMHg2NiwweDdGLDB4RkYsMHhGRiwweEJGLDB4QkYsMHhGRiwKKzB4RkIsMHhGRiwweEY3LDB4REYsMHhGRCwweEZCLDB4N0QsMHhERiwgMHhCNywweENELDB4RjMsMHg3QywweDVGLDB4M0YsMHg5MSwweDNGLAorMHhGRiwweDNELDB4RUYsMHg3QiwweEZGLDB4RkMsMHhGRiwweENBLCAweEVGLDB4RkUsMHhGRiwweEJELDB4RUYsMHhGQiwweDFFLDB4RTcsCisweEJCLDB4RUMsMHg3RiwweEIzLDB4RkYsMHhGRCwweDlGLDB4RkYsIDB4RkYsMHhGRSwweEZGLDB4RkYsMHg3RiwweEJGLDB4RkIsMHhGRSwKKzB4RkYsMHhCRiwweEVGLDB4RkIsMHhFRSwweEZCLDB4QkYsMHhERiwgMHg2NywweEZGLDB4RkYsMHhCRiwweEVGLDB4REIsMHhGRiwweEJDLAorMHhGRSwweDdGLDB4RkIsMHhGRiwweDlGLDB4RUYsMHhGOSwweEZFLCAweDdGLDB4OUYsMHhFNywweEY5LDB4RkUsMHg4NywweEZGLDB4RUUsCisweEZCLDB4QkUsMHhFNSwweEJGLDB4RUYsMHhGOSwweEQ3LDB4NjUsIDB4RjcsMHhERCwweEU3LDB4N0QsMHhERiwweDc3LDB4NUQsMHhENywKKzB4N0YsMHhGOCwweDlCLDB4RkUsMHhGRiwweEJGLDB4RUYsMHhGQiwgMHhGRiwweEZGLDB4QkYsMHhFRiwweEZCLDB4RkYsMHg3RiwweENGLAorMHhGMywweEZDLDB4RkYsMHhCRiwweEVGLDB4RkYsMHhEQiwweDNGLCAweEVGLDB4RkIsMHhGRSwweEZGLDB4REYsMHhGRiwweEZFLDB4RkIsCisweEJCLDB4RUYsMHhCRiwweEVGLDB4QkIsMHhFRSwweEZCLDB4QkUsIDB4RUYsMHhCQiwweEZGLDB4RkMsMHg3RiwweEZELDB4M0IsMHg1QiwKKzB4RDYsMHhFNSwweEZELDB4NEYsMHhDMywweEZCLDB4RkYsMHhCRiwgMHhFRiwweEZCLDB4RkUsMHhGRiwweEJGLDB4RUYsMHhGQiwweEZGLAorMHhCNCwweEZGLDB4RkEsMHhCQywweDhGLDB4QjIsMHhFOSwweEQyLCAweDJFLDB4Q0YsMHhGQiwweEZGLDB4QkYsMHhFRiwweEZCLDB4RkUsCisweEZGLDB4QkYsMHhFRiwweEZCLDB4RkYsMHhFQywweEZGLDB4RkQsIDB4RkQsMHg3RiwweERGLDB4RjcsMHhFNCwweERGLDB4NUYsMHhGRiwKKzB4RkYsMHhGQiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4QzMsMHhGRiwweEVGLDB4RTYsMHhGOCwweEZFLAorMHgzRiwweDhCLDB4ODMsMHhGOSwweEZFLDB4N0YsMHhFNywweEY5LCAweEZFLDB4N0YsMHg5RiwweEU3LDB4RjksMHhGRSwweDdGLDB4MTcsCisweEZELDB4RkYsMHhGRiwweEZGLDB4N0YsMHg1RiwweEY3LDB4MkMsIDB4RkYsMHhGRiwweEZGLDB4RkUsMHg3RiwweEZGLDB4RTcsMHhGOSwKKzB4RkUsMHg3RiwweDlGLDB4RkUsMHgyRiwweEZGLDB4RkYsMHhFRiwgMHhGRiwweEZFLDB4QkYsMHhFRiwweEFELDB4RkYsMHhGRiwweDdGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZFLDB4REYsMHhGRiwweERGLDB4RkYsMHhGRCwweEZELDB4N0YsCisweERGLDB4RjcsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZBLDB4M0YsMHhGRSwKKzB4RjcsMHhGRCwweEVGLDB4N0EsMHhGRiwweEIxLDB4QkQsMHhGRiwgMHg3RiwweEY3LDB4RkQsMHhGRiwweDdGLDB4REYsMHhGNywweEZELAorMHhGRiwweDdGLDB4RjMsMHgyNywweEZGLDB4REYsMHhGRiwweERELCAweEZGLDB4RkMsMHg5QiwweEZGLDB4Q0IsMHhGQywweEJGLDB4MkYsCisweENCLDB4RjIsMHhGQywweEJGLDB4MkYsMHhDOSwweEZGLDB4REUsIDB4RkYsMHhERiwweEFGLDB4RUIsMHhEQSwweEZFLDB4QkIsMHhBRiwKKzB4RUIsMHhGOCwweEY3LDB4QUYsMHhFOCwweEZBLDB4RkUsMHhCRiwgMHhBRiwweEVCLDB4RjIsMHhGRiwweEZELDB4RkYsMHhGRiwweEVGLAorMHhCRCwweEQ3LDB4QkYsMHhGRiwweEZGLDB4REUsMHg4RiwweEI4LCAweERFLDB4MzcsMHg4RCwweEEzLDB4NzgsMHhEQSwweDNGLDB4OEYsCisweEZGLDB4QTEsMHhGRiwweEZGLDB4RkIsMHhGQiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEE3LDB4QkQsMHhGQiwweDc2LDB4RkQsMHhCRiwKKzB4RUYsMHhEQiwweEZFLDB4QkIsMHhCRiwweEZFLDB4MjcsMHg3RiwgMHhGRiwweEZFLDB4RkUsMHhGRCwweEY1LDB4RkYsMHhFRiwweEY1LAorMHhERiwweDFGLDB4RTcsMHhGRCwweEZGLDB4N0YsMHhERiwweEY3LCAweEZELDB4RkYsMHhGRiwweENELDB4RkQsMHhBRSwweEZGLDB4RkEsCisweDNFLDB4M0YsMHhBQiwweEZELDB4RjgsMHg3RSwweDhGLDB4RTMsIDB4RjgsMHhGRSwweDNFLDB4OEYsMHhFMywweEY4LDB4RkYsMHhGRSwKKzB4MUYsMHhFRiwweERGLDB4QkYsMHhGRSwweERFLDB4REYsMHhEOSwgMHhGRiwweERGLDB4QkMsMHhGRiwweEZGLDB4N0YsMHhGRiwweEVGLAorMHhGRCwweDdGLDB4REYsMHhGNywweEY5LDB4M0YsMHhGRSwweEZGLCAweEZGLDB4NkYsMHhGRSwweERFLDB4QkYsMHhGNywweEVELDB4RUEsCisweEZELDB4OEYsMHg4MywweEY4LDB4RUEsMHgzRiwweDhGLDB4RUYsIDB4RkYsMHhGNCwweDdGLDB4RkYsMHhFRiwweEVGLDB4N0IsMHhGMywKKzB4RjEsMHg1RiwweEZGLDB4RkYsMHhGMSwweDNCLDB4N0YsMHhERiwgMHhGNywweEZELDB4RkYsMHhGRiwweEZGLDB4RkYsMHhFMCwweEZGLAorMHhGRiwweEZGLDB4RjcsMHhGRiwweDZGLDB4RkYsMHg3RiwweEZGLCAweEZGLDB4RjcsMHhERSwweEY3LDB4QkYsMHhFRiwweEZCLDB4RjcsCisweEZELDB4RkYsMHhGRiwweEY1LDB4RkEsMHhGRiwweEZGLDB4RkIsIDB4RTcsMHhGRiwweEYzLDB4RjgsMHg3RiwweEYzLDB4REYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4MUYsMHhFRiwgMHhCQiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZELAorMHhGRiwweDdGLDB4RkYsMHg5RiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweENGLDB4RkYsMHgzNywweEZGLDB4RkYsCisweDdGLDB4REYsMHg3NywweDVELDB4RTcsMHhGQywweEZGLDB4QkYsIDB4RjcsMHhGNSwweEZCLDB4RkYsMHhGRiwweEQ3LDB4RjUsMHhGQiwKKzB4RkYsMHhGRiwweDQ1LDB4RkQsMHg3RiwweEVBLDB4RkQsMHhCRSwgMHhCRiwweERGLDB4RjcsMHhGRiwweEZGLDB4REIsMHhGQiwweEZFLAorMHhGRiwweEJGLDB4RUYsMHhGRiwweEZGLDB4RkYsMHhGQiwweDVGLCAweDdGLDB4RkYsMHhGRSwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkUsMHhGRiwweEVGLDB4RkQsMHhGRiwweDdGLDB4REYsIDB4RkYsMHhFRiwweEZCLDB4RjgsMHgwRiwweEYzLDB4RkYsMHhGOSwKKzB4MkUsMHhGQiwweEZFLDB4RkMsMHhGMywweEVGLDB4RkYsMHhGRiwgMHhCRiwweEZGLDB4RkIsMHhFNywweEZGLDB4RkUsMHg3RSwweEZGLAorMHhDMCwweDZCLDB4Q0YsMHhGRiwweDM0LDB4REYsMHhGMSwweEZELCAweEZGLDB4RUYsMHhGRiwweEZGLDB4RkYsMHhERiwweEY3LDB4RkQsCisweENGLDB4N0YsMHg5QywweEZELDB4RkQsMHg2QywweEY3LDB4RkYsIDB4RjYsMHhGRCwweEVCLDB4MkIsMHg5RiwweEZGLDB4RkMsMHhGRSwKKzB4N0UsMHhGRiwweEZGLDB4RkYsMHhGRiwweEQ3LDB4RjMsMHhGNywgMHhGRiwweEZCLDB4RTEsMHhCRiwweEZGLDB4RUIsMHg3QSwweERFLAorMHhENywweEZCLDB4RkYsMHhGOSwweEZFLDB4RkYsMHhGRiwweEYzLCAweERFLDB4N0YsMHhGRCwweEU3LDB4N0YsMHhGRiwweEZELDB4QkIsCisweEZGLDB4RkYsMHg3RSwweENDLDB4RjYsMHhBRiwweDVGLDB4N0YsIDB4RkUsMHhGNCwweDdELDB4RjcsMHhGRCwweEJCLDB4NkUsMHhEQiwKKzB4QjcsMHhGRiwweEY3LDB4REYsMHg2NiwweEZGLDB4RkYsMHhGNywgMHgzRCwweENGLDB4REUsMHhCRCwweEZGLDB4RkYsMHhERSwweERCLAorMHg4RCwweEY3LDB4N0UsMHhERiwweEI3LDB4RUYsMHg3RiwweEZGLCAweEY2LDB4ODcsMHhGRiwweEZGLDB4RUYsMHhGRSwweERFLDB4QkYsCisweEZGLDB4RkYsMHhGRiwweEJCLDB4RUYsMHhGRCwweEZGLDB4N0IsIDB4REUsMHhGNywweDNGLDB4RkYsMHhCRiwweEZCLDB4REIsMHhGRiwKKzB4RjIsMHhCNiwweEZELDB4QkQsMHg3RiwweEU3LDB4RkYsMHhGRiwgMHhGRiwweDZGLDB4RjcsMHhGRiwweEZGLDB4RkYsMHhGRSwweDc3LAorMHhGRiwweEJGLDB4RjgsMHhBRiwweEZGLDB4REYsMHhCRiwweEZGLCAweEJGLDB4N0YsMHhGQiwweEZGLDB4RkYsMHhGRiwweERCLDB4RkUsCisweEZGLDB4QkYsMHhGRiwweEZBLDB4RkYsMHhGRCwweEZGLDB4RjYsIDB4N0YsMHhGRiwweDlGLDB4RkYsMHhGRiwweDNGLDB4RUYsMHhGOCwKKzB4RUUsMHg3RSwweDlGLDB4QkEsMHhGRSwweEJGLDB4OEYsMHhFRiwgMHhGRSwweEZFLDB4RjksMHhGRiwweEZBLDB4N0YsMHhGRSwweDdFLAorMHhCRiwweEFGLDB4RkIsMHg5NiwweEZELDB4OUYsMHhFRiwweDVFLCAweDY1LDB4QkUsMHhFRiwweDVCLDB4QjYsMHhGRiwweEJFLDB4RTMsCisweEZGLDB4QjUsMHhCRiwweEZGLDB4RkQsMHhGRiwweDdGLDB4RkYsIDB4RUYsMHhERiwweEZFLDB4RkYsMHhCRiwweEZCLDB4RkUsMHhGRiwKKzB4QkYsMHhDRiwweEZGLDB4RkYsMHhGRiwweEZELDB4OUIsMHhGRiwgMHhGRSwweEZCLDB4RkUsMHhERiwweEZGLDB4N0YsMHhGRiwweEY3LAorMHhGRSwweEZGLDB4REYsMHhGQiwweEZCLDB4RkUsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEI3LDB4RkUsMHhGQSwweEZGLDB4QUIsCisweEVGLDB4RkYsMHhGRCwweEI1LDB4N0IsMHg3RiwweEZCLDB4RjcsIDB4RkQsMHhGRiwweEZGLDB4REQsMHhGRiwweEVGLDB4OEYsMHhGRiwKKzB4MkYsMHhGRiwweEZCLDB4N0MsMHhGRiwweDNGLDB4REYsMHg3MywgMHhFQiwweEZFLDB4M0YsMHhGRiwweEVGLDB4RkIsMHhGRSwweEZGLAorMHhFRiwweEZELDB4RkYsMHhCRiwweEZELDB4MEYsMHhGRiwweEZGLCAweEZGLDB4RjUsMHhGOSwweEZGLDB4N0YsMHhENywweEZELDB4RkYsCisweERGLDB4RkYsMHhGNywweEZCLDB4RkYsMHg3RiwweEJGLDB4RkYsIDB4RkYsMHhGMCwweDlGLDB4RkYsMHhGRSwweDdGLDB4OEIsMHhFMywKKzB4RjksMHhERSwweDI3LDB4OUIsMHhFNiwweEJFLDB4N0YsMHg5QiwgMHhDMywweEY4LDB4REUsMHg3RiwweDlELDB4RTcsMHhGRSwweDdGLAorMHhGRiwweEZGLDB4NUYsMHhENywweEZGLDB4RkYsMHhGRiwweDRGLCAweEZCLDB4RkYsMHhGRiwweDdGLDB4RkYsMHhBRiwweEZGLDB4OUYsCisweDdGLDB4RkIsMHhGRiwweEU4LDB4RkYsMHhGRiwweEZFLDB4QkYsIDB4QUYsMHhGRiwweEZGLDB4RkUsMHhCRiwweEVGLDB4RjcsMHhGRiwKKzB4QkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjcsMHhGRiwgMHhGQywweEZGLDB4RkYsMHhGRCwweDdGLDB4RkYsMHhGRiwweEZGLAorMHhGRCwweDNGLDB4Q0YsMHhGRiwweEZGLDB4RkYsMHhGRiwweEY3LCAweEZGLDB4RkQsMHg3RiwweEZGLDB4RkYsMHg5MywweEZGLDB4RkYsCisweDdBLDB4REYsMHhGNywweEZGLDB4RkYsMHg3QiwweDdGLDB4QjcsIDB4RUYsMHhGRiwweEZGLDB4RkQsMHhCRiwweEZELDB4RkIsMHhGRiwKKzB4RjcsMHhGRiwweEQ3LDB4RkYsMHhGRiwweEZGLDB4RkMsMHg5RiwgMHg2RiwweENCLDB4RkYsMHhGNCwweEJCLDB4REYsMHhENiwweEZELAorMHhCRiwweDJGLDB4RDMsMHhGNywweEZGLDB4REYsMHhGRiwweENGLCAweEZGLDB4RkEsMHhCRSwweEJELDB4QUYsMHg2QSwweERBLDB4QkUsCisweEJCLDB4QUIsMHgzQSwweEJFLDB4MkQsMHhBRSwweEVCLDB4REEsIDB4RjYsMHgzRiwweEFELDB4RjUsMHhERCwweEZGLDB4Q0YsMHhGMSwKKzB4RkYsMHhGOSwweDdGLDB4RkYsMHg3MywweEZFLDB4RkYsMHhDRiwgMHhDMywweEY0LDB4RjcsMHgyRiwweEYzLDB4RkYsMHhGQywweEZGLAorMHg3QywweDFGLDB4RkYsMHgzRiwweDRGLDB4RkYsMHg3RSwweEZGLCAweEVGLDB4QkQsMHhGNiwweEZFLDB4RkYsMHgyQiwweEVGLDB4REMsCisweEZCLDB4RkQsMHhGRiwweEZCLDB4RkYsMHhFQSwweDdCLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGQiwweEY3LDB4REYsMHhGRiwKKzB4RTMsMHg3RCwweEZGLDB4QjcsMHhGRiwweEJGLDB4RkYsMHhGRiwgMHhERiwweEZGLDB4RjgsMHhGRiwweEJGLDB4RkYsMHhCRiwweEVCLAorMHhFNywweEZBLDB4RkUsMHgzRCwweEJGLDB4RTksMHhGQywweEJGLCAweEZGLDB4RkEsMHhGQiwweEZFLDB4RkYsMHhGRiwweEZGLDB4RDksCisweEZGLDB4RkYsMHhGRiwweEY2LDB4N0YsMHhGRiwweEY2LDB4N0QsIDB4RkYsMHhERiwweENGLDB4RkQsMHhCRiwweEZCLDB4RUYsMHg3RSwKKzB4RkYsMHg3RiwweEZGLDB4RkYsMHhEMywweEZGLDB4RkQsMHhGQiwgMHhGRiwweEZCLDB4RkYsMHhGRiwweEZGLDB4RUYsMHhGRiwweEJGLAorMHhGRSwweEZGLDB4RjcsMHhFRiwweEZGLDB4RkYsMHhGRiwweEZCLCAweEZGLDB4ODcsMHhGRiwweEZELDB4RkYsMHhGRiwweEZGLDB4RkYsCisweDdCLDB4RkUsMHhGRiwweEZFLDB4M0IsMHhGNywweEY3LDB4RkYsIDB4M0YsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4MEYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkIsMHhGRiwweEZGLDB4RkYsMHhGNywgMHhGRiwweEZGLDB4QUQsMHhGRiwweEZFLDB4RjcsMHhGRiwweEZGLAorMHg1RiwweEZGLDB4RkYsMHhERiwweEZGLDB4RkQsMHhGRiwweEY1LCAweEZGLDB4REYsMHhGRiwweEJELDB4RkYsMHhFOSwweEZGLDB4QzcsCisweEYzLDB4RkYsMHhGRiwweEY3LDB4RkYsMHhGMywweEZGLDB4RjgsIDB4M0IsMHhGRiwweEZGLDB4N0IsMHhERiwweEJGLDB4RkIsMHhFRiwKKzB4RkIsMHhGRiwweEZCLDB4RjcsMHhGNywweEJCLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkIsMHhGRiwweEZFLDB4N0YsMHhGMywweDdGLAorMHg1RSwweEI3LDB4QkYsMHhGRCwweDdGLDB4RkYsMHhGOSwweDdGLCAweEZCLDB4RkYsMHhFQiwweEZELDB4N0YsMHg3RiwweEZGLDB4RUYsCisweEZCLDB4RTAsMHgzRiwweEZFLDB4QkYsMHhCRiwweERGLDB4RkYsIDB4N0UsMHhGRiwweEY3LDB4RkYsMHhGRiwweEZFLDB4QkYsMHhGRiwKKzB4REIsMHg3OCwweEZGLDB4RkYsMHhGRiwweEVFLDB4QTEsMHhCRiwgMHhGNSwweERFLDB4RkIsMHhGNywweEZGLDB4RkIsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkIsMHhGRiwweEZGLDB4RDcsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhFRiwweEYwLDB4RkYsMHhGRiwweEZGLDB4RjMsCisweEY3LDB4RkYsMHhFRiwweEZGLDB4RTcsMHhDRiwweEZGLDB4RkIsIDB4RkYsMHhFRiwweEZGLDB4RkYsMHg5RiwweDlGLDB4RUYsMHhGQywKKzB4MTYsMHhCRiwweEZFLDB4RjMsMHhFNCwweEZGLDB4RkYsMHhDNiwgMHhGRiwweEU3LDB4RkYsMHhGRiwweEZELDB4RkYsMHhCRiwweEZGLAorMHhGRiwweDNGLDB4RkYsMHhCRiwweEQ2LDB4QUYsMHg3RiwweEZFLCAweDZCLDB4N0UsMHg3RiwweEZGLDB4QUYsMHhGRiwweEZGLDB4QkYsCisweEZGLDB4NUYsMHhGRiwweEZFLDB4RkYsMHhGRiwweEZFLDB4RkYsIDB4RkYsMHhCRCwweERCLDB4RkYsMHhGRSwweDVGLDB4RjIsMHhGRiwKKzB4RkYsMHg1RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhFRiwweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhERSwweEJGLAorMHhGRiwweEZGLDB4RUYsMHhGQiwweDc3LDB4RkUsMHhCRCwweDdGLCAweDVGLDB4RkYsMHhGRiwweEZGLDB4REYsMHg2RiwweEVELDB4RkYsCisweEZELDB4RkYsMHg3RiwweEZELDB4NkYsMHhGRiwweEZGLDB4NzcsIDB4REEsMHhDRiwweEZELDB4NUYsMHhGRiwweEJGLDB4RkYsMHhGRiwKKzB4REYsMHg3RiwweEZGLDB4RkIsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHg2NiwweDdGLDB4RkYsMHhGRSwweEJGLDB4RTcsMHhCRiwweEZBLAorMHhGRiwweEZFLDB4RkYsMHhGRiwweEZGLDB4REYsMHhGRiwweDU5LCAweEVGLDB4RkYsMHhFRiwweEZCLDB4N0YsMHg4OSwweEZGLDB4RkYsCisweEU5LDB4RkYsMHg2RiwweEZGLDB4RjUsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweDdGLDB4RjIsMHhGNywweEZGLDB4RkYsMHhFRiwKKzB4RjgsMHg3RiwweEZCLDB4RkYsMHhGRCwweEZGLDB4RkYsMHhEOSwgMHhGRiwweEVGLDB4QkIsMHhGRiwweEZGLDB4RkYsMHhCRiwweEVGLAorMHhERSwweEZGLDB4RkYsMHg5RiwweDdGLDB4REYsMHhGRiwweEY3LCAweEZGLDB4RkYsMHhGRiwweEZGLDB4REYsMHhGRiwweEZGLDB4QUYsCisweEZGLDB4RkYsMHhGNywweDNGLDB4RUIsMHg5RiwweEZFLDB4N0YsIDB4OUUsMHg3RiwweDlGLDB4RkUsMHg4NywweEZGLDB4RUQsMHhEQiwKKzB4NTYsMHhGRiwweEJGLDB4QUYsMHgwQiwweEQyLDB4RkYsMHhFRiwgMHhEQiwweDZFLDB4N0QsMHhCRCwweDZGLDB4RjgsMHhGRSwweDNGLAorMHhGQSwweDVCLDB4RkYsMHhGRCwweEJGLDB4RUYsMHhGRiwweEJGLCAweDZGLDB4REIsMHhFNiwweEZGLDB4RkYsMHgzRiwweEZGLDB4REYsCisweEZFLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhEQSwweDNGLDB4RkYsIDB4RkIsMHhGRSwweEZFLDB4RkYsMHhGRiwweERGLDB4RjcsMHhCRCwKKzB4RkYsMHhGRCwweEZGLDB4RkUsMHhGRiwweEZCLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RjEsMHg1RiwweEZELDB4OUYsMHhERiwweEZELAorMHhGRiwweEZELDB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRiwweDc2LCAweEZBLDB4RkYsMHhGRiwweDdGLDB4RTMsMHhGOCwweEZGLDB4QUUsCisweEZGLDB4RkIsMHg3RSwweDlELDB4NzMsMHhGRiwweEZBLDB4N0YsIDB4REYsMHhGRiwweEZGLDB4N0YsMHhGRiwweEZCLDB4Q0QsMHhGRiwKKzB4N0YsMHhFRiwweEZCLDB4RkYsMHhGRCwweEZGLDB4RjcsMHg3RiwgMHg3RiwweEVGLDB4RkYsMHhFRCwweEZGLDB4RkYsMHhGRiwweEI1LAorMHhGRiwweEJGLDB4RkYsMHhCRiwweEZELDB4RUYsMHhEQiwweEY3LCAweEZGLDB4OTMsMHhGRiwweEVGLDB4RTIsMHhGOSwweEJFLDB4N0YsCisweDhCLDB4RTcsMHhGOSwweEZFLDB4NkIsMHhFNywweEY5LDB4RkUsIDB4N0YsMHg5RiwweEU3LDB4RjksMHhGRSwweDdGLDB4NDcsMHhGRiwKKzB4RkYsMHhGRCwweEZGLDB4OUYsMHhGRiwweEQ3LDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RjUsMHhGRiwweDlGLDB4RkYsMHhGNywweEZFLAorMHhGRiwweEJGLDB4RkUsMHg2RiwweEZGLDB4RkYsMHhGQiwweEZGLCAweEZGLDB4RkYsMHhBRiwweEZGLDB4RkYsMHhGRiwweDdGLDB4RkIsCisweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkQsIDB4REYsMHhGRiwweEZGLDB4RjcsMHhGRiwweEZGLDB4RkYsMHhERiwKKzB4RkYsMHhGRiwweEZGLDB4NUYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHg1RiwweEZCLDB4RkUsMHhGRiwweEY4LDB4MzcsMHhGRiwweEZGLAorMHhFRiwweEZGLDB4N0YsMHhGRSwweEJGLDB4RkYsMHhGRiwweEZFLCAweEJGLDB4RkYsMHhGRiwweDdGLDB4RkYsMHhCRiwweEZELDB4RkYsCisweDdGLDB4RkEsMHg3RiwweEZGLDB4RkYsMHg2RiwweEZGLDB4RkYsIDB4N0QsMHhGRiwweENGLDB4RkYsMHhGRiwweEZGLDB4NEYsMHhGRiwKKzB4RjIsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkEsMHhCRiwgMHhGRiwweEFFLDB4RUIsMHhGQSwweEZFLDB4QkIsMHhBRCwweEVCLAorMHhGQSwweEY3LDB4QUYsMHg2QiwweEZBLDB4RjYsMHhCRiwweDI1LCAweEU5LDB4RjIsMHg3RiwweDQ1LDB4RkYsMHhGRiwweEZELDB4RjcsCisweEY3LDB4QkYsMHhGRiwweERGLDB4RkYsMHhGRiwweEJGLDB4RkIsIDB4RkYsMHhERiwweEYzLDB4RkYsMHhGNywweDNGLDB4Q0YsMHhGRiwKKzB4QTEsMHhGRiwweEZGLDB4QkYsMHhFNywweEZGLDB4RkYsMHg3RiwgMHhGRiwweDNELDB4RkYsMHhGRiwweEZGLDB4RjcsMHhGRiwweDJGLAorMHhGRiwweEZCLDB4RjUsMHg3RiwweEZFLDB4NTcsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjcsCisweDNGLDB4RkYsMHhGRSwweEZGLDB4RkYsMHhGRiwweEZELDB4RkUsIDB4RjcsMHhFRSwweEFGLDB4RkUsMHhFRSwweEU3LDB4RkEsMHhGRiwKKzB4RkUsMHg5RCwweEY5LDB4NUUsMHhGRSwweEZGLDB4RUIsMHhGRiwgMHhGRiwweERGLDB4QTcsMHhGRiwweEZGLDB4RkYsMHhGQywweERCLAorMHhGRiwweEZGLDB4RkYsMHg3RSwweEZCLDB4RkYsMHhGRiwweEVGLCAweEZCLDB4RkQsMHhGRiwweERCLDB4RkYsMHhGRiwweEZGLDB4RUYsCisweEZGLDB4RkYsMHhGRiwweEZELDB4QkYsMHhGRSwweEJGLDB4RkYsIDB4NkYsMHg3RiwweEZGLDB4RjcsMHhGRiwweEZGLDB4RjksMHhGRiwKKzB4RjcsMHhGRiwweEJGLDB4REUsMHhGNywweEZGLDB4RkYsMHhGRiwgMHhGQSwweDdGLDB4RkQsMHhCRiwweDVGLDB4RkYsMHhGRiwweEJGLAorMHhGRiwweEVELDB4RkYsMHhGNywweEJGLDB4RkYsMHhGRiwweEVGLCAweEZGLDB4REYsMHhGRiwweEZGLDB4RkYsMHhFNiwweEZGLDB4RkIsCisweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEY3LDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RUIsMHhGRiwKKzB4RkQsMHhGRiwweEY1LDB4RkYsMHhGNiwweDdGLDB4REYsMHhCRCwgMHhDRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4REYsMHhGRiwweEZGLAorMHhGRiwweEY5LDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEUzLCAweEZGLDB4RUUsMHhCRiwweEZGLDB4N0QsMHhFRiwweEZFLDB4RkYsCisweEZGLDB4RkYsMHhCRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkUsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhFNywweEZGLDB4QjUsMHhBRSwKKzB4RkYsMHhGRiwweEI2LDB4RkUsMHhCRiwweEZGLDB4RkYsMHhCRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweDI3LDB4RkYsMHhFRiwweEZFLDB4N0YsMHhERiwweEZGLCAweDdFLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRCwweEZGLDB4RjcsMHhGOSwweDlGLDB4RkYsIDB4NUYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHg3RiwKKzB4RkYsMHhGRiwweEZFLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHgwRiwweEZGLDB4RTcsMHhCRiwweEZFLAorMHhGRiwweEJGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGQywweEJGLCAweEZGLDB4RkYsMHhGRSwweEZGLDB4RkYsMHhGRiwweEZGLDB4QzQsCisweDZCLDB4RkYsMHgyOSwweDFGLDB4RkIsMHhBRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RUYsMHgxQiwweEZFLDB4RkYsMHhGQywKKzB4NkYsMHhGRiwweEZGLDB4RkQsMHg2QSwweEY3LDB4RDcsMHhGNSwgMHhCRiwweEZGLDB4RkUsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRSwweEJGLDB4RkYsMHhGRiwweEZBLDB4RkYsMHhGRiwweEY3LCAweEZCLDB4REQsMHhCRiwweEZGLDB4RTcsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRCwweDdGLDB4RkYsIDB4RkYsMHhGNSwweEZGLDB4RkYsMHhGNywweEZELDB4QjMsMHhFRiwKKzB4RkQsMHg3RSwweDVELDB4RkYsMHhGRCwweEZGLDB4RkYsMHhGRiwgMHhGRCwweDdGLDB4RDIsMHhGNSwweEZCLDB4N0UsMHhDQiwweEI3LAorMHhGRiwweEZGLDB4RkYsMHhDNiwweEZGLDB4RkQsMHhFRSwweDYzLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGNiwweEZELDB4NjUsCisweDVCLDB4REYsMHhGRiwweEQ1LDB4RkYsMHhGRiwweEZGLDB4RjYsIDB4RTcsMHhCRiwweEY3LDB4QTksMHhGRiwweEZGLDB4RUQsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhFQiwweEZGLDB4RkYsMHhGRiwgMHhBRiwweEZGLDB4RkYsMHhGRiwweEY4LDB4MUIsMHhGRiwweEUzLAorMHhEMCwweEJGLDB4RkYsMHhFMSwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RDcsMHhGRiwweEZGLDB4RkYsMHg1RiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhBRiwweEZGLDB4REIsMHg3NiwweEJGLDB4RkYsIDB4N0YsMHhGRiwweEJGLDB4RUYsMHhGRSwweEZGLDB4QkYsMHhFRiwKKzB4RkIsMHhGRSwweEZGLDB4RkYsMHhGRiwweEJGLDB4RjIsMHg3RiwgMHhGRiwweDlGLDB4RkUsMHhCRCwweEZFLDB4N0YsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RjcsMHgzRiwweEVDLDB4N0YsMHhGNiwweDk1LDB4QkIsCisweEVGLDB4RjgsMHhGRSwweEZDLDB4QkYsMHgyRiwweERBLDB4RkMsIDB4QkYsMHgyRiwweENCLDB4RjIsMHhGQywweEJGLDB4RUYsMHhGRiwKKzB4QTksMHhCRiwweENGLDB4RkIsMHhGRiwweEZGLDB4RkYsMHhGRSwgMHhERCwweEI3LDB4NkQsMHhGNiwweEQ5LDB4QjYsMHg2RCwweDlCLAorMHg3NiwweEQ5LDB4QkYsMHhGQiwweEZELDB4QTMsMHhGRiwweEJGLCAweEVGLDB4RkYsMHhFRiwweEZGLDB4RkYsMHhGRiwweDdGLDB4REYsCisweEZELDB4RUYsMHg3QiwweERFLDB4RjcsMHhGRCwweEVGLDB4N0YsIDB4RkYsMHhGRiwweDA1LDB4RkYsMHhGQSwweEZFLDB4N0YsMHhFRiwKKzB4RTMsMHhGRiwweEZGLDB4RkQsMHg3RiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweDVGLDB4RkYsMHhGRiwweEZELDB4N0YsMHhGQiwweEFGLAorMHhGRiwweDYzLDB4QzgsMHhGRiwweEJGLDB4RUYsMHhGRiwweEZGLCAweEZBLDB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRSwweDlGLDB4RjcsCisweEZGLDB4RkEsMHhCRiwweEZFLDB4OUYsMHhGQiwweDdGLDB4RkYsIDB4RkYsMHhFRiwweEQ3LDB4RkYsMHhGRiwweEY1LDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZELDB4N0YsMHhGRiwweEZGLDB4QkYsMHhGRiwgMHhGOSwweEJGLDB4RkYsMHhCRSwweDI3LDB4OUYsMHhFNywweEY5LAorMHhGRSwweDdGLDB4OEIsMHhFNywweEZFLDB4N0YsMHg5RiwweEUyLCAweEY5LDB4RkUsMHg3RiwweDlGLDB4RTcsMHhGMSwweDdGLDB4RkYsCisweEZGLDB4RkYsMHhGQiwweEZFLDB4RkYsMHhGRiwweEZGLDB4RDcsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGNSwweEZGLDB4RkYsMHhGRiwKKzB4RDcsMHhGRiwweEZBLDB4RkYsMHhGRSwweEZGLDB4RkYsMHhGRiwgMHhGRCwweEZGLDB4RkYsMHhGRiwweEFGLDB4RjcsMHhGRiwweEZGLAorMHhGRiwweEVCLDB4RkYsMHhGRiwweEZGLDB4QUYsMHhGRiwweEM0LCAweEZGLDB4RjcsMHhGRiwweEZGLDB4RUYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4NUYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEQ3LDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhFQiwweEZGLDB4RkIsMHg3QSwKKzB4REYsMHhGNywweEZELDB4RkYsMHhGRiwweEZFLDB4QkYsMHhGRiwgMHhGRiwweDdGLDB4RkYsMHhBRiwweEZGLDB4RkYsMHhGRiwweEY3LAorMHhFRiwweEUzLDB4RkYsMHhERCwweEQyLDB4RkYsMHhERiwweEZGLCAweEZGLDB4RjIsMHhGQywweEJGLDB4Q0IsMHhGNiwweEZELDB4QkYsCisweDJGLDB4Q0IsMHhGRiwweDdGLDB4REYsMHhERSwweEFGLDB4RkYsIDB4REEsMHhFRSwweEJGLDB4QUYsMHhFOSwweEZBLDB4RjQsMHhCRCwKKzB4QUYsMHg1QSwweEFFLDB4QkIsMHhBQiwweDZCLDB4REEsMHhERSwgMHhCRiwweEFELDB4RDcsMHg1RSwweEZGLDB4RkYsMHhCRiwweEZDLAorMHhGRiwweERGLDB4RkQsMHhGRiwweEZGLDB4RkYsMHhGRiwweERGLCAweEY3LDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRCwweEZGLDB4RkEsCisweDFGLDB4RkYsMHhGRSwweEZCLDB4RUYsMHhCRiwweEZELDB4RkYsIDB4RkQsMHhCRCwweDc3LDB4RkYsMHhGRiwweEZGLDB4RkYsMHg5RCwKKzB4RUYsMHhGRiwweEZGLDB4RkYsMHhFRiwweDdELDB4RkYsMHhGQiwgMHhGRSwweEVGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEY3LAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEVFLCAweEJGLDB4RTQsMHhGQiwweEZGLDB4RkUsMHgzRiwweEZFLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEFGLDB4RUEsMHhGRSwweEJGLDB4QUYsIDB4RUIsMHhGQSwweEZFLDB4RkYsMHhGRiwweEZGLDB4NTUsMHhGNiwKKzB4RkYsMHhGRSwweEY3LDB4RkYsMHg3RiwweEZGLDB4RUIsMHhGNywgMHg1RiwweEM1LDB4RkQsMHg3RiwweDVGLDB4RDcsMHhGNSwweEZGLAorMHg2RiwweEZCLDB4RkYsMHg4QSwweEZGLDB4RkYsMHhGRiwweEZGLCAweEVCLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGQiwweEJGLDB4QkYsCisweEVGLDB4RkIsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZCLDB4RkYsIDB4NzcsMHhERiwweEZCLDB4RkYsMHhGRCwweDdGLDB4RUYsMHhGRiwKKzB4RkYsMHhGRiwweEJGLDB4N0YsMHhGRiwweERGLDB4QkYsMHhGRiwgMHhGQiwweEZGLDB4RkYsMHhGRiwweEZFLDB4RUYsMHhERiwweEZGLAorMHhGRSwweEZGLDB4OUYsMHhFRiwweDdELDB4RkYsMHhGNywweEZGLCAweDdGLDB4RkYsMHhGRiwweERGLDB4RjcsMHhGRCwweEZGLDB4RUYsCisweERGLDB4RkYsMHhERiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRCwweEZGLDB4RkYsMHhGQiwKKzB4RkQsMHhGRiwweEJGLDB4REYsMHhEMSwweEZGLDB4RjgsMHgzQiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHg3RSwweERCLDB4RkQsMHhGRiwweDc3LDB4REIsMHhCNywweDdELCAweEJGLDB4RkIsMHhGRiwweEY4LDB4N0YsMHhFRCwweDdCLDB4NUUsCisweEZGLDB4RkUsMHhGRiwweEZGLDB4NEYsMHhENywweEZELDB4N0YsIDB4REYsMHhENywweEY1LDB4RkYsMHg3RiwweEZGLDB4RkYsMHhGRiwKKzB4RjIsMHgzRiwweEZFLDB4RkYsMHhCRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEJGLDB4RUYsMHhGRSwweEZGLDB4M0IsMHhFRSwweEZGLAorMHhGQywweEVGLDB4RkYsMHhGRiwweEZGLDB4ODUsMHhGRiwweEZELCAweEZFLDB4RkYsMHhGNSwweEZGLDB4RkYsMHhGRSwweEZGLDB4REYsCisweEZCLDB4RkYsMHg1RiwweEJGLDB4RkYsMHhGRCwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEE4LDB4RkYsMHhGRiwweDlGLDB4OUUsMHhGRiwKKzB4RkYsMHhGRiwweDdGLDB4RjMsMHhGRiwweEZGLDB4Q0YsMHhGRiwgMHhGNywweEZELDB4RkYsMHg3RiwweEZGLDB4RkYsMHhGQywweDE2LAorMHhCRiwweENGLDB4QTMsMHhFNSwweEVGLDB4N0YsMHhGRiwweEYzLCAweEU0LDB4RkYsMHhDRiwweDkzLDB4RkMsMHhGRiwweDNGLDB4Q0YsCisweEZGLDB4RkYsMHhGRiwweEQ2LDB4MEYsMHg3RCwweEJGLDB4NkUsIDB4RkIsMHhGNCwweEZDLDB4QUYsMHg2RCwweERCLDB4NzcsMHhCNywKKzB4NkQsMHhEQiwweEY2LDB4RkQsMHhCRiwweEZGLDB4RkYsMHhGRiwgMHhCRiwweDlCLDB4RkEsMHhERSwweEI3LDB4QjcsMHhFRCwweEY5LAorMHg3RSwweEI3LDB4QUMsMHhFQiwweEQ2LDB4QjMsMHhBRCwweEVCLCAweDdBLDB4REYsMHhGRiwweEZGLDB4RkYsMHhEOCwweEJGLDB4RkYsCisweEI3LDB4RUQsMHg5RiwweDZGLDB4REQsMHhGNywweDY4LDB4REIsIDB4MzcsMHhCMywweDZDLDB4REIsMHgzNiwweENELDB4QjMsMHg3RiwKKzB4RkYsMHg3RiwweEY1LDB4NkYsMHhGRCwweEVGLDB4NzksMHgzRCwgMHhGNywweDkzLDB4RTQsMHg3QSwweDlFLDB4QUQsMHhFQSwweDdBLAorMHg5RSwweEY3LDB4QkQsMHhFRiwweEZGLDB4RkYsMHhGRiwweDc2LCAweDdGLDB4RkIsMHhDNiwweEZGLDB4QkIsMHhFRiwweERBLDB4RkUsCisweEZELDB4QkYsMHhGQiwweEZFLDB4RkYsMHhCRiwweEVGLDB4RkIsIDB4RkYsMHhGRiwweEZCLDB4RkYsMHhBNSwweEZGLDB4RkQsMHhBQiwKKzB4NkYsMHg3OCwweERFLDB4MTcsMHg4RiwweDc5LDB4REYsMHhGRCwgMHhGRiwweDdGLDB4REYsMHhGNywweEZELDB4RkYsMHhGRiwweEZCLAorMHhGRiwweEZCLDB4RkYsMHhFRiwweEZCLDB4RUYsMHhGQiwweEZFLCAweEZGLDB4QkIsMHhEQSwweEYzLDB4RUYsMHgzQiwweENFLDB4RjMsCisweEJDLDB4RUYsMHgzRiwweENGLDB4REYsMHhGRiwweEI3LDB4RkYsIDB4RkYsMHhGRiwweENGLDB4NzMsMHhGRiwweEJGLDB4RUYsMHhGRiwKKzB4RjMsMHhGRiwweDNGLDB4Q0YsMHhGMywweEZDLDB4RkYsMHgzRCwgMHhDRiwweDlGLDB4RkUsMHgwNywweEZGLDB4QUYsMHhFQiwweEZFLAorMHhGRCwweEJGLDB4RUYsMHhFQiwweEZBLDB4RkYsMHhBRiwweEVCLCAweEZBLDB4RkUsMHhCRiwweEFGLDB4RkIsMHhGRSwweDNGLDB4RkIsCisweDlCLDB4RkYsMHg3RiwweERGLDB4RkYsMHhGMywweEZFLDB4RkYsIDB4REUsMHhGNywweEJGLDB4N0IsMHhERSwweEY3LDB4QkQsMHhFRiwKKzB4N0IsMHhGRSwweEZGLDB4RkYsMHhERiwweDNGLDB4RkUsMHhGRiwgMHhCNywweEZGLDB4RUYsMHhGNywweEZGLDB4QkYsMHhFRCwweEZFLAorMHhERiwweEI3LDB4RUQsMHhGQiwweDdFLDB4REYsMHhGRiwweEZGLCAweEZGLDB4RkQsMHg1RiwweEVGLDB4RUIsMHhGQSwweEZFLDB4RjUsCisweEJGLDB4NkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkUsMHhGOCwweEZGLDB4QTgsMHhGRiwKKzB4RkYsMHhCRiwweEVGLDB4RkIsMHg2QSwweEZCLDB4QjcsMHhFRiwgMHhGQiwweEZGLDB4QkYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEJGLAorMHhFRiwweEZCLDB4RkYsMHhFMCwweEZGLDB4RkYsMHhGRCwweDdGLCAweDVDLDB4RDcsMHg3RCwweERGLDB4RjMsMHg1QywweEY1LDB4Q0QsCisweDczLDB4NUUsMHhENywweEI1LDB4RkQsMHg3RiwweEVGLDB4RkYsIDB4REIsMHhGRiwweEZGLDB4RTIsMHhGOCwweEJFLDB4MkYsMHg4RiwKKzB4RTcsMHhGOCwweEJFLDB4NkIsMHhFMiwweEY4LDB4QkUsMHgyRiwgMHg4QiwweEUyLDB4RjksMHhGRSwweDdGLDB4RTcsMHhGRiwweEQ3LAorMHhGNSwweEZELDB4N0YsMHhGRiwweEY3LDB4RjUsMHhGRCwweDdGLCAweEQ3LDB4RjUsMHhGRCwweDdGLDB4NUYsMHhENywweEY1LDB4RkYsCisweEZGLDB4RkYsMHg4RiwweEZGLDB4QUYsMHhFQiwweEZBLDB4RkYsIDB4RkYsMHhCRiwweEVCLDB4RkEsMHhGRiwweDJGLDB4RUIsMHhGQSwKKzB4RkUsMHhCRiwweEFGLDB4RUIsMHhGRiwweEZGLDB4RkUsMHg1RiwgMHhGRiwweDVGLDB4RkYsMHhGRiwweEZELDB4RkYsMHhGRiwweEQ3LAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4QkYsMHhGRSwweEI3LDB4RkQsCisweEZGLDB4N0UsMHhERiwweEY3LDB4QUQsMHhGRiwweDdGLDB4RjcsIDB4RkQsMHhGRiwweDdGLDB4REYsMHhGNywweEZELDB4RkYsMHg3RiwKKzB4RjYsMHg3RiwweEZGLDB4RkYsMHhGRiwweERCLDB4RjYsMHhGQywgMHhBRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjcsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RUMsMHhCRiwweEZGLCAweEFGLDB4RUIsMHhGQSwweEY2LDB4QUIsMHg4RiwweEVCLDB4RkEsCisweEY3LDB4QTUsMHhFQiwweEZBLDB4QkUsMHhCRiwweEFGLDB4RUIsIDB4RkEsMHhGRiwweDZELDB4RkYsMHhGRiwweDdGLDB4REYsMHgzMywKKzB4REQsMHhGRiwweDdGLDB4RkUsMHhGNywweEZDLDB4N0YsMHhGQiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEE5LAorMHhGRiwweEZELDB4RkYsMHhGRiwweEZFLDB4RkYsMHhGRiwweERGLCAweEZGLDB4RkYsMHhFRiwweEVGLDB4RkQsMHhGRiwweDdGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZFLDB4QTcsMHhGRiwweEZGLDB4RkYsIDB4NzcsMHhERiwweEY3LDB4RkQsMHg5RiwweDdGLDB4RkUsMHg3NywKKzB4RUYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEFGLDB4QkYsMHhBRiwweEZGLDB4RjksMHhCRSwweEJGLAorMHg4RiwweEZCLDB4RkUsMHhGRSwweEVGLDB4RkIsMHhGRSwweEZGLCAweEJGLDB4RUYsMHhGQiwweEZGLDB4RkYsMHhGRCwweERGLDB4NkYsCisweEVGLDB4RkYsMHg3RiwweEZGLDB4QkYsMHhCRiwweERGLDB4RkYsIDB4RkMsMHhGRiwweERGLDB4RjcsMHhGRCwweEVGLDB4N0YsMHhERiwKKzB4RkYsMHhGRiwweEZGLDB4M0YsMHhGNiwweEZGLDB4Q0YsMHhGRiwgMHhEQiwweEZCLDB4RjcsMHhGRiwweEVCLDB4N0EsMHhGRiwweEZGLAorMHhGRiwweEJGLDB4RUYsMHhGQiwweEZGLDB4RkYsMHhGRiwweEZFLCAweDZELDB4RkQsMHhGRiwweDVGLDB4RkIsMHhGRiwweEZGLDB4RjcsCisweEZGLDB4NUYsMHhGNSwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGOCwweEZGLDB4RkIsMHhGRiwKKzB4RkYsMHhGRCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RTcsMHhGNiwgMHhCRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkIsMHhGRiwweEZGLAorMHhGRiwweEM5LDB4RkYsMHhGRiwweEZGLDB4QkQsMHhGRiwweEJGLCAweEFGLDB4RUYsMHhFRiwweDNGLDB4RDEsMHhGQywweDdGLDB4RkIsCisweEM3LDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEUzLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkQsMHhGRiwweEZGLDB4NzcsMHhGRiwKKzB4REYsMHhCNywweEZELDB4RjcsMHhGRCwweEY3LDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHg1NywweEZGLDB4RjcsMHhBNSwweEZELAorMHgzRiwweERGLDB4QkYsMHhCRiwweEZFLDB4N0YsMHhGRiwweEZGLCAweEZGLDB4REYsMHhGQSwweEZELDB4RkYsMHhGRiwweEZGLDB4RkUsCisweDg3LDB4RkYsMHhFOSwweEZGLDB4RkUsMHhFRiwweEJGLDB4RUYsIDB4RkUsMHhGRSwweEZGLDB4RUYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGQSwweDlGLDB4RkYsMHgzRiwgMHhGRiwweEZELDB4RkQsMHg1NywweERGLDB4RkQsMHhGMywweEZGLAorMHhERiwweEZELDB4RkYsMHg1RiwweERGLDB4RjUsMHhGRCwweEZGLCAweEZGLDB4RjksMHg4RiwweEZGLDB4RkYsMHhGRiwweEVFLDB4N0YsCisweEZGLDB4RkYsMHhCRiwweDVFLDB4RkUsMHhFQywweEZCLDB4M0YsIDB4N0YsMHg5RiwweEVGLDB4RjksMHhGRiwweEZGLDB4Q0QsMHg2QiwKKzB4RkYsMHhGRiwweEZGLDB4QzUsMHhGMywweEZDLDB4RkEsMHgzOCwgMHhGRiwweEFGLDB4M0YsMHhFRSwweDdGLDB4OUYsMHhGRiwweEQ5LAorMHhGRiwweEZGLDB4RkQsMHg3QSwweEY3LDB4RkYsMHhGMywweEZGLCAweEFGLDB4NkYsMHhEQiwweEYyLDB4QjksMHhFOSwweEZCLDB4RkYsCisweEZGLDB4RkYsMHhGRSwweEZGLDB4RkYsMHhFRiwweEZGLDB4RkIsIDB4QzUsMHhCRiwweEZGLDB4RUYsMHhGRiwweDVFLDB4QjcsMHhBRCwKKzB4Q0QsMHg3OSwweDdDLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZELDB4OTMsMHhGRiwweEVGLAorMHhFQSwweEZFLDB4QkYsMHhFRiwweDVCLDB4RDIsMHhDRCwweEY1LCAweDZELDB4NzcsMHhERiwweEY3LDB4RkQsMHhGRiwweDdGLDB4REYsCisweEZGLDB4RkYsMHg2NiwweEZGLDB4RDUsMHg2NSwweDdELDB4NUYsIDB4NzUsMHg5RCwweDY1LDB4N0YsMHhENiwweEZCLDB4NEYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjYsMHhDNywgMHhGRiwweEJGLDB4RUYsMHhGQSwweEZFLDB4RkYsMHhCRiwweEVCLAorMHhGRiwweERGLDB4RkYsMHg3RSwweEZGLDB4RkYsMHhFRiwweEZELCAweDdFLDB4RDcsMHhGRiwweDc4LDB4REYsMHhGRiwweDVGLDB4REYsCisweEY1LDB4QkYsMHg3RiwweERGLDB4QzUsMHhGRiwweDNGLDB4RjYsIDB4N0UsMHhGRiwweDBGLDB4RUYsMHhGMiwweDNFLDB4QkYsMHhGRiwKKzB4RkIsMHgzRiwweEZGLDB4RkIsMHg3RiwweEZGLDB4QjMsMHhGRSwgMHhGQiwweEY2LDB4RkQsMHhGRiwweERBLDB4RjcsMHhGRCwweEZGLAorMHg3RiwweERGLDB4RjcsMHhCRiwweEZGLDB4RkEsMHg3RiwweEZGLCAweEZGLDB4RkYsMHhGRiwweDlGLDB4RkYsMHhGMywweERDLDB4RjksCisweEJGLDB4Q0UsMHhFNywweEY5LDB4RkUsMHg3RiwweDlGLDB4RTcsIDB4RkYsMHhGRiwweEUyLDB4N0YsMHhGRSwweEZGLDB4QkYsMHhFRiwKKzB4RUIsMHhGQSwweEZGLDB4OUYsMHg2NywweDFFLDB4RkYsMHg4RiwgMHhFNywweEY4LDB4RkUsMHg3RiwweDhGLDB4RUYsMHhGRiwweEJELAorMHhCRiwweEZGLDB4RkIsMHhGRiwweEZGLDB4REYsMHhGNywweEZGLCAweEZDLDB4RkYsMHhCRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhGRiwweEZELDB4QjMsMHhGRiwweEZGLDB4RUYsIDB4RkYsMHhGRiwweEJGLDB4RUQsMHhGRiwweEZCLDB4RUUsMHhGRSwKKzB4RkYsMHhGRiwweEVGLDB4RkYsMHhGRSwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEI1LDB4RkYsMHhCNywweEZELDB4RkQsMHg2RSwweEZGLAorMHhGRiwweEZFLDB4RkQsMHgyRiwweEQ4LDB4RkUsMHhCRiwweDhGLCAweEVCLDB4RjksMHhGRSwweDNGLDB4RkYsMHhGQSwweENGLDB4RkYsCisweEU3LDB4RDksMHhGQSwweEJGLDB4REYsMHg3NywweEZDLDB4RkIsIDB4M0YsMHhBQiwweEZFLDB4RkYsMHhCRiwweEVGLDB4RkIsMHhGRSwKKzB4RkYsMHhGRiwweEVFLDB4MUYsMHhGRiwweERGLDB4RjcsMHhGRiwgMHhGRiwweEZGLDB4NUYsMHg5NywweDM1LDB4QkYsMHg1RSwweEZFLAorMHhCRiwweEVGLDB4RkYsMHhGNywweEZELDB4RkYsMHhGRiwweEZBLCAweEJGLDB4RkYsMHhCRSwweDZGLDB4OUYsMHhFNywweEY4LDB4QkUsCisweDJGLDB4OEIsMHg2NiwweDk0LDB4N0QsMHg5RCwweEU3LDB4RjksIDB4RkUsMHg3RiwweDlGLDB4RTcsMHhGMSwweDdGLDB4RkYsMHhGRiwKKzB4RkYsMHhGNywweEY1LDB4RkQsMHg3RiwweDVGLDB4RkIsMHhGRCwgMHg5RSwweEZGLDB4RkIsMHhGRSwweEZGLDB4RkYsMHhFRiwweEZGLAorMHhGRiwweEEwLDB4RkYsMHhGRiwweEZGLDB4QkYsMHhFRiwweEVCLCAweEZBLDB4RkUsMHhCRiwweEI3LDB4RjcsMHhGNywweEZGLDB4RkYsCisweEZELDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweERELDB4RkYsIDB4RkQsMHhGRiwweEZGLDB4RkYsMHhENywweEZGLDB4RkYsMHhGRiwKKzB4N0YsMHhGNSwweEZGLDB4RkYsMHhFRiwweEZGLDB4RkYsMHhGRiwgMHhCRiwweEZGLDB4RkYsMHhBQiwweEZFLDB4RkIsMHhGRSwweEZGLAorMHhGNywweEFGLDB4RkYsMHhGRiwweERFLDB4RjcsMHhFQiwweDVGLCAweERGLDB4RjcsMHhGRCwweEZGLDB4N0YsMHhERiwweEZGLDB4RkYsCisweEIzLDB4RkYsMHhDOSwweEZFLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RDYsMHhGRiwweEZGLDB4Q0IsMHhGRiwweEZGLDB4REYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGQywweDhGLDB4RkYsMHhCQSwgMHhCRSwweEJGLDB4QUYsMHhFQiwweDc4LDB4RkUsMHhCNywweEFELAorMHgzQSwweEZFLDB4QjcsMHhBRiwweEVCLDB4N0EsMHhGRSwweEJGLCAweEFGLDB4RkYsMHg5RiwweEZGLDB4RkYsMHhERiwweEZDLDB4RkYsCisweEZGLDB4RkUsMHhDMywweEZFLDB4RkYsMHhGRiwweDMzLDB4RkMsIDB4RkYsMHhCRiwweERGLDB4RjMsMHhGRiwweEZGLDB4QkIsMHg5RiwKKzB4RkYsMHhGRiwweEZGLDB4RUIsMHhERiwweEZGLDB4RkYsMHhBRiwgMHhGNywweDZGLDB4RjksMHhCRiwweEVGLDB4RkQsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhFMywweDdGLDB4RkYsMHhGRiwweEZGLCAweEZCLDB4RkYsMHhGRiwweEJGLDB4RkQsMHhGQiwweEY3LDB4RkYsCisweERGLDB4RjcsMHhGRiwweEZFLDB4RUYsMHg1RiwweEJELDB4RkYsIDB4RkEsMHhGRiwweEY4LDB4RkYsMHhCRiwweEFGLDB4RkIsMHhGRSwKKzB4RkUsMHgzRiwweEVGLDB4RTgsMHhGRiwweERGLDB4RjMsMHhGRCwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RUQsMHhGRiwweEZCLAorMHhGRCwweEZGLDB4QUYsMHhGRiwweEZGLDB4RkUsMHhGRSwweEJGLCAweERCLDB4RkYsMHhGRiwweEZGLDB4QkYsMHhGRiwweERGLDB4RkYsCisweEZELDB4RkYsMHhDQiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4QkYsMHg2RiwweEZGLDB4N0YsMHhCNywweEIzLDB4RkYsMHhGRiwKKzB4REYsMHhGRiwweEZCLDB4RUYsMHhGRiwweEZGLDB4RkYsMHgwNywgMHhGRiwweEZCLDB4RkYsMHhGRiwweEZGLDB4RUQsMHhGRiwweEY1LAorMHg3QywweEZGLDB4N0YsMHhGRSwweEZGLDB4RkYsMHhFRiwweENGLCAweEZGLDB4RkIsMHhGRiwweEZGLDB4MkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RjMsMHhGRiwweEZCLDB4RkYsMHhGRSwweEZGLDB4RkYsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhCRiwweEZGLDB4RkYsMHhGRiwKKzB4RkQsMHgxQiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkUsMHg3QywweEZGLDB4RkYsMHhGRiwweEZGLAorMHhFRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkIsMHhCRiwweDdGLCAweEZELDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweERCLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkQsIDB4RkYsMHhGRiwweEYwLDB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZCLDB4RkYsMHhERiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkQsMHhCRiwweEZFLAorMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RUYsMHhGRSwweEZGLDB4QkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhFRiwweEZBLDB4QjUsMHhGRiwweEZGLDB4RkYsIDB4RjcsMHhGNywweEZGLDB4RkYsMHhGRiwweEZGLDB4REYsMHhGQiwKKzB4RkMsMHhGRiwweEZGLDB4RkUsMHhGRiwweDdGLDB4REYsMHhCRiwgMHhGRiwweENCLDB4QkYsMHhGOSwweEZFLDB4N0YsMHg5RiwweEU3LAorMHhGOSwweEZFLDB4N0YsMHg5NywweEUxLDB4RkUsMHg3OSwweDlGLCAweEU3LDB4RkQsMHhGRSwweDdGLDB4REYsMHhGRSwweDM3LDB4RkYsCisweEZCLDB4REUsMHhERSwweEJELDB4RUYsMHhGMywweEZFLDB4RkIsIDB4QUYsMHhFQiwweEZFLDB4RkYsMHhGRiwweENGLDB4RkYsMHhGRSwKKzB4RkYsMHhCRiwweEZGLDB4OEYsMHhGRiwweEVGLDB4RkIsMHhGRSwgMHhGRiwweEJGLDB4RTcsMHhGOSwweDVFLDB4N0YsMHhFRiwweEZCLAorMHhEQSwweEZGLDB4QkYsMHhFRiwweEZCLDB4RkUsMHhGRiwweEZELCAweDFGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4REYsCisweEZGLDB4RkYsMHg3RiwweEZGLDB4RkYsMHhGNywweEZCLDB4N0YsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGQywweDNGLDB4RkYsMHhCRiwKKzB4RUYsMHhGQiwweEZFLDB4RkYsMHhCRiwweEVGLDB4N0IsMHg3RiwgMHhCRiwweEVGLDB4RkIsMHhGRSwweEZGLDB4QjUsMHhFRiwweEZCLAorMHhCRiwweEZBLDB4N0YsMHhGQywweEZGLDB4M0YsMHhDRiwweEYzLCAweEZDLDB4RkYsMHgzRiwweENGLDB4QkMsMHhGRiwweDNGLDB4RUYsCisweEYzLDB4RkMsMHhGRSwweDNGLDB4Q0YsMHhGRiwweEVFLDB4RUYsIDB4RkIsMHhGRSwweEZGLDB4QkYsMHhFRiwweEZCLDB4NkEsMHhENywKKzB4QjcsMHhGQiwweEY4LDB4RkYsMHhCNywweEVGLDB4QkEsMHhGRSwgMHhGRiwweEJGLDB4N0YsMHhFOSwweEZGLDB4RjksMHg3RSwweDVGLAorMHg5NywweEU1LDB4RjksMHhGRSwweDdGLDB4QkYsMHhGOSwweDdFLCAweDVGLDB4OUYsMHhFNSwweEZCLDB4RkUsMHg1RiwweEI3LDB4RkYsCisweEEzLDB4RkYsMHhGNywweEZELDB4RkYsMHg3RiwweERGLDB4RjcsIDB4RkQsMHhGRiwweDVFLDB4RjcsMHg3RCwweEZGLDB4NzcsMHhERiwKKzB4RjcsMHhGRCwweEZGLDB4N0YsMHhGRiwweEQ3LDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZELDB4REYsMHhGQiwweDdGLAorMHhGRiwweEZGLDB4RUYsMHhGRiwweEZFLDB4RkIsMHhGRiwweEZGLCAweEJGLDB4RkUsMHg4RiwweEZGLDB4REYsMHhGNywweEZELDB4RkQsCisweDdGLDB4REYsMHhGNywweEZELDB4M0UsMHhERiwweEY1LDB4QkQsIDB4RkYsMHg3RiwweERGLDB4RjcsMHhGRCwweEY3LDB4RkYsMHg5RiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZELDB4RkYsMHhCRSwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRCwweDNGLDB4RkYsMHhERiwweEY3LCAweEZELDB4RkYsMHg3RiwweERGLDB4RjcsMHhGRCwweEZGLDB4Q0YsCisweDc3LDB4RkMsMHhGRiwweDVGLDB4REYsMHhGNywweEZELDB4RkYsIDB4RjQsMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZELDB4RkYsMHhGRiwweEZGLDB4RUUsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLCAweEVELDB4RkIsMHhGRiwweEZGLDB4QkYsMHhGRiwweEZGLDB4RkYsCisweEZGLDB4RkYsMHhFOSwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4RkYsMHhGQiwweEZGLDB4RkYsMHhGRiwweEQzLDB4RkYsMHhGRiwKKzB4QkYsMHgzRiwweEZCLDB4RkYsMHhGRiwweEZGLDB4RkIsMHhGMywgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkUsMHhGRiwweEY3LCAweEZGLDB4RkYsMHhGRiwweEZGLDB4MTcsMHhGRiwweEZGLDB4RkYsCisweERGLDB4RkYsMHhGRCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsIDB4REYsMHhERiwweEZGLDB4RkQsMHhGRiwweEZGLDB4REYsMHhGNywKKzB4RkYsMHg0RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRSwweEZGLDB4RkYsMHhGRiwweEZELAorMHhGRiwweEZGLDB4RkYsMHhGRiwweEZFLDB4RkYsMHg5RiwweEZGLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsCisweEZELDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDdGLDB4RkYsIDB4RkYsMHhGRiwweDdBLDB4M0YsMHhGRiwweEZGLDB4RkYsMHhGRiwKKzB4RkYsMHhGRiwweEZGLDB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEYyLAorMHg3RiwweEZGLDB4RkIsMHhGRSwweEZGLDB4QkYsMHhFRiwweEY4LCAweEZFLDB4RkYsMHhCRiwweEZCLDB4RkUsMHhGRiwweDhGLDB4RUMsCisweEZCLDB4RkUsMHhGRiwweEJGLDB4RjgsMHhGNywweEZFLDB4RkYsIDB4QkYsMHhFRiwweEZCLDB4RkUsMHhGRCwweEJGLDB4Q0YsMHhFQywKKzB4RkYsMHgzRiwweEVGLDB4REIsMHhGOCwweEZGLDB4QkYsMHhDRiwgMHhGRiwweEY5LDB4RkYsMHhGRiwweEJGLDB4RkYsMHhGQiwweEZGLAorMHhGRiwweEZGLDB4RUYsMHhGQiwweERGLDB4RkYsMHhGRiwweEZGLCAweEZGLDB4RkYsMHhCRiwweEZGLDB4RkYsMHhGRiwweEJCLDB4RkYsCisweEVGLDB4RkIsMHhGRSwweEVGLDB4QkYsMHhFRSwweEVCLDB4RkIsIDB4RkUsMHhGRiwweEVGLDB4RkUsMHhFRSwweEJGLDB4RkUsMHhFQiwKKzB4RkYsMHhFRiwweEZGLDB4MTcsMHhGRiwweDdFLDB4RUIsMHhCQiwgMHhGRSwweEJGLDB4QkUsMHhGQiwweEVGLDB4NUIsMHhGNywweEJELAorMHhGQiwweENGLDB4QkYsMHhCRiwweEJCLDB4RkIsMHg3RSwweENDLCAweEVGLDB4RkYKKworfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL2RhYnVzYi5jIGIvZHJpdmVycy91c2IvbWVkaWEvZGFidXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgyMzI5NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL2RhYnVzYi5jCkBAIC0wLDAgKzEsODc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiAgICAgIGRhYnVzYi5jICAtLSAgZGFiIHVzYiBkcml2ZXIuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTkgIERldGkgRmxpZWdsIChkZXRpQGZsaWVnbC5kZSkKKyAqCisgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoKKyAqCisgKiAgJElkOiBkYWJ1c2IuYyx2IDEuNTQgMjAwMC8wNy8yNCAyMTozOTozOSBkZXRpIEV4cCAkCisgKgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisKKyNpbmNsdWRlICJkYWJ1c2IuaCIKKyNpbmNsdWRlICJkYWJmaXJtd2FyZS5oIgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS41NCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiRGV0aSBGbGllZ2wsIGRldGlAZmxpZWdsLmRlIgorI2RlZmluZSBEUklWRVJfREVTQyAiREFCLVVTQiBJbnRlcmZhY2UgRHJpdmVyIGZvciBMaW51eCAoYykxOTk5IgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmZGVmIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMKKyNkZWZpbmUgTlJEQUJVU0IgMjU2CisjZWxzZQorI2RlZmluZSBOUkRBQlVTQiA0CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGRhYnVzYl90IGRhYnVzYltOUkRBQlVTQl07CitzdGF0aWMgaW50IGJ1ZmZlcnMgPSAyNTY7CitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZGFidXNiX2RyaXZlcjsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBkYWJ1c2JfYWRkX2J1Zl90YWlsIChwZGFidXNiX3Qgcywgc3RydWN0IGxpc3RfaGVhZCAqZHN0LCBzdHJ1Y3QgbGlzdF9oZWFkICpzcmMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJnMtPmxvY2ssIGZsYWdzKTsKKworCWlmIChsaXN0X2VtcHR5IChzcmMpKSB7CisJCS8vIG5vIGVsZW1lbnRzIGluIHNvdXJjZSBidWZmZXIKKwkJcmV0ID0gLTE7CisJCWdvdG8gZXJyOworCX0KKwl0bXAgPSBzcmMtPm5leHQ7CisJbGlzdF9tb3ZlX3RhaWwgKHRtcCwgZHN0KTsKKworICBlcnI6CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZzLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWZkZWYgREVCVUcgCitzdGF0aWMgdm9pZCBkdW1wX3VyYiAoc3RydWN0IHVyYiAqdXJiKQoreworCWRiZygidXJiICAgICAgICAgICAgICAgICAgIDolcCIsIHVyYik7CisJZGJnKCJkZXYgICAgICAgICAgICAgICAgICAgOiVwIiwgdXJiLT5kZXYpOworCWRiZygicGlwZSAgICAgICAgICAgICAgICAgIDolMDhYIiwgdXJiLT5waXBlKTsKKwlkYmcoInN0YXR1cyAgICAgICAgICAgICAgICA6JWQiLCB1cmItPnN0YXR1cyk7CisJZGJnKCJ0cmFuc2Zlcl9mbGFncyAgICAgICAgOiUwOFgiLCB1cmItPnRyYW5zZmVyX2ZsYWdzKTsKKwlkYmcoInRyYW5zZmVyX2J1ZmZlciAgICAgICA6JXAiLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJZGJnKCJ0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOiVkIiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwlkYmcoImFjdHVhbF9sZW5ndGggICAgICAgICA6JWQiLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCWRiZygic2V0dXBfcGFja2V0ICAgICAgICAgIDolcCIsIHVyYi0+c2V0dXBfcGFja2V0KTsKKwlkYmcoInN0YXJ0X2ZyYW1lICAgICAgICAgICA6JWQiLCB1cmItPnN0YXJ0X2ZyYW1lKTsKKwlkYmcoIm51bWJlcl9vZl9wYWNrZXRzICAgICA6JWQiLCB1cmItPm51bWJlcl9vZl9wYWNrZXRzKTsKKwlkYmcoImludGVydmFsICAgICAgICAgICAgICA6JWQiLCB1cmItPmludGVydmFsKTsKKwlkYmcoImVycm9yX2NvdW50ICAgICAgICAgICA6JWQiLCB1cmItPmVycm9yX2NvdW50KTsKKwlkYmcoImNvbnRleHQgICAgICAgICAgICAgICA6JXAiLCB1cmItPmNvbnRleHQpOworCWRiZygiY29tcGxldGUgICAgICAgICAgICAgIDolcCIsIHVyYi0+Y29tcGxldGUpOworfQorI2VuZGlmCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBkYWJ1c2JfY2FuY2VsX3F1ZXVlIChwZGFidXNiX3Qgcywgc3RydWN0IGxpc3RfaGVhZCAqcSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXBidWZmX3QgYjsKKworCWRiZygiZGFidXNiX2NhbmNlbF9xdWV1ZSIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZzLT5sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGIsIHEsIGJ1ZmZfbGlzdCkgeworI2lmZGVmIERFQlVHCisJCWR1bXBfdXJiKGItPnB1cmIpOworI2VuZGlmCisJCXVzYl91bmxpbmtfdXJiIChiLT5wdXJiKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnMtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IGRhYnVzYl9mcmVlX3F1ZXVlIChzdHJ1Y3QgbGlzdF9oZWFkICpxKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCXBidWZmX3QgYjsKKworCWRiZygiZGFidXNiX2ZyZWVfcXVldWUiKTsKKwlmb3IgKHAgPSBxLT5uZXh0OyBwICE9IHE7KSB7CisJCWIgPSBsaXN0X2VudHJ5IChwLCBidWZmX3QsIGJ1ZmZfbGlzdCk7CisKKyNpZmRlZiBERUJVRyAKKwkJZHVtcF91cmIoYi0+cHVyYik7CisjZW5kaWYKKwkJaWYgKGItPnB1cmItPnRyYW5zZmVyX2J1ZmZlcikKKwkJCWtmcmVlIChiLT5wdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQl1c2JfZnJlZV91cmIoYi0+cHVyYik7CisJCXRtcCA9IHAtPm5leHQ7CisJCWxpc3RfZGVsIChwKTsKKwkJa2ZyZWUgKGIpOworCQlwID0gdG1wOworCX0KKworCXJldHVybiAwOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgZGFidXNiX2ZyZWVfYnVmZmVycyAocGRhYnVzYl90IHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlkYmcoImRhYnVzYl9mcmVlX2J1ZmZlcnMiKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7CisKKwlkYWJ1c2JfZnJlZV9xdWV1ZSAoJnMtPmZyZWVfYnVmZl9saXN0KTsKKwlkYWJ1c2JfZnJlZV9xdWV1ZSAoJnMtPnJlY19idWZmX2xpc3QpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOworCisJcy0+Z290X21lbSA9IDA7CisJcmV0dXJuIDA7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgZGFidXNiX2lzb19jb21wbGV0ZSAoc3RydWN0IHVyYiAqcHVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcGJ1ZmZfdCBiID0gcHVyYi0+Y29udGV4dDsKKwlwZGFidXNiX3QgcyA9IGItPnM7CisJaW50IGk7CisJaW50IGxlbjsKKwlpbnQgZHN0ID0gMDsKKwl2b2lkICpidWYgPSBwdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwlkYmcoImRhYnVzYl9pc29fY29tcGxldGUiKTsKKworCS8vIHByb2Nlc3MgaWYgVVJCIHdhcyBub3Qga2lsbGVkCisJaWYgKHB1cmItPnN0YXR1cyAhPSAtRU5PRU5UKSB7CisJCXVuc2lnbmVkIGludCBwaXBlID0gdXNiX3Jjdmlzb2NwaXBlIChwdXJiLT5kZXYsIF9EQUJVU0JfSVNPUElQRSk7CisJCWludCBwaXBlc2l6ZSA9IHVzYl9tYXhwYWNrZXQgKHB1cmItPmRldiwgcGlwZSwgdXNiX3BpcGVvdXQgKHBpcGUpKTsKKwkJZm9yIChpID0gMDsgaSA8IHB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspCisJCQlpZiAoIXB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cykgeworCQkJCWxlbiA9IHB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGg7CisJCQkJaWYgKGxlbiA8PSBwaXBlc2l6ZSkgeworCQkJCQltZW1jcHkgKGJ1ZiArIGRzdCwgYnVmICsgcHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0LCBsZW4pOworCQkJCQlkc3QgKz0gbGVuOworCQkJCX0KKwkJCQllbHNlCisJCQkJCWVycigiZGFidXNiX2lzb19jb21wbGV0ZTogaW52YWxpZCBsZW4gJWQiLCBsZW4pOworCQkJfQorCQkJZWxzZQorCQkJCXdhcm4oImRhYnVzYl9pc29fY29tcGxldGU6IGNvcnJ1cHRlZCBwYWNrZXQgc3RhdHVzOiAlZCIsIHB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyk7CisJCWlmIChkc3QgIT0gcHVyYi0+YWN0dWFsX2xlbmd0aCkKKwkJCWVycigiZHN0IT1wdXJiLT5hY3R1YWxfbGVuZ3RoOiVkIT0lZCIsIGRzdCwgcHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJfQorCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QgKCZzLT5wZW5kaW5nX2lvKSAmJiAhcy0+cmVtb3ZlX3BlbmRpbmcgJiYgcy0+c3RhdGUgIT0gX3N0b3BwZWQpIHsKKwkJcy0+b3ZlcnJ1bnMrKzsKKwkJZXJyKCJvdmVycnVuICglZCkiLCBzLT5vdmVycnVucyk7CisJfQorCXdha2VfdXAgKCZzLT53YWl0KTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IGRhYnVzYl9hbGxvY19idWZmZXJzIChwZGFidXNiX3QgcykKK3sKKwlpbnQgYnVmZmVycyA9IDA7CisJcGJ1ZmZfdCBiOworCXVuc2lnbmVkIGludCBwaXBlID0gdXNiX3Jjdmlzb2NwaXBlIChzLT51c2JkZXYsIF9EQUJVU0JfSVNPUElQRSk7CisJaW50IHBpcGVzaXplID0gdXNiX21heHBhY2tldCAocy0+dXNiZGV2LCBwaXBlLCB1c2JfcGlwZW91dCAocGlwZSkpOworCWludCBwYWNrZXRzID0gX0lTT1BJUEVTSVpFIC8gcGlwZXNpemU7CisJaW50IHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBwYWNrZXRzICogcGlwZXNpemU7CisJaW50IGk7CisKKwlkYmcoImRhYnVzYl9hbGxvY19idWZmZXJzIHBpcGVzaXplOiVkIHBhY2tldHM6JWQgdHJhbnNmZXJfYnVmZmVyX2xlbjolZCIsCisJCSBwaXBlc2l6ZSwgcGFja2V0cywgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisKKwl3aGlsZSAoYnVmZmVycyA8IChzLT50b3RhbF9idWZmZXJfc2l6ZSA8PCAxMCkpIHsKKwkJYiA9IChwYnVmZl90KSBrbWFsbG9jIChzaXplb2YgKGJ1ZmZfdCksIEdGUF9LRVJORUwpOworCQlpZiAoIWIpIHsKKwkJCWVycigia21hbGxvYyhzaXplb2YoYnVmZl90KSk9PU5VTEwiKTsKKwkJCWdvdG8gZXJyOworCQl9CisJCW1lbXNldCAoYiwgMCwgc2l6ZW9mIChidWZmX3QpKTsKKwkJYi0+cyA9IHM7CisJCWItPnB1cmIgPSB1c2JfYWxsb2NfdXJiKHBhY2tldHMsIEdGUF9LRVJORUwpOworCQlpZiAoIWItPnB1cmIpIHsKKwkJCWVycigidXNiX2FsbG9jX3VyYiA9PSBOVUxMIik7CisJCQlrZnJlZSAoYik7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCWItPnB1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MgKHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIEdGUF9LRVJORUwpOworCQlpZiAoIWItPnB1cmItPnRyYW5zZmVyX2J1ZmZlcikgeworCQkJa2ZyZWUgKGItPnB1cmIpOworCQkJa2ZyZWUgKGIpOworCQkJZXJyKCJrbWFsbG9jKCVkKT09TlVMTCIsIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCQkJZ290byBlcnI7CisJCX0KKworCQliLT5wdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gdHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwkJYi0+cHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBwYWNrZXRzOworCQliLT5wdXJiLT5jb21wbGV0ZSA9IGRhYnVzYl9pc29fY29tcGxldGU7CisJCWItPnB1cmItPmNvbnRleHQgPSBiOworCQliLT5wdXJiLT5kZXYgPSBzLT51c2JkZXY7CisJCWItPnB1cmItPnBpcGUgPSBwaXBlOworCQliLT5wdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKworCQlmb3IgKGkgPSAwOyBpIDwgcGFja2V0czsgaSsrKSB7CisJCQliLT5wdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgPSBpICogcGlwZXNpemU7CisJCQliLT5wdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGggPSBwaXBlc2l6ZTsKKwkJfQorCisJCWJ1ZmZlcnMgKz0gdHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwkJbGlzdF9hZGRfdGFpbCAoJmItPmJ1ZmZfbGlzdCwgJnMtPmZyZWVfYnVmZl9saXN0KTsKKwl9CisJcy0+Z290X21lbSA9IGJ1ZmZlcnM7CisKKwlyZXR1cm4gMDsKKworCWVycjoKKwlkYWJ1c2JfZnJlZV9idWZmZXJzIChzKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IGRhYnVzYl9idWxrIChwZGFidXNiX3QgcywgcGJ1bGtfdHJhbnNmZXJfdCBwYikKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBwaXBlOworCWludCBhY3R1YWxfbGVuZ3RoOworCisJZGJnKCJkYWJ1c2JfYnVsayIpOworCisJaWYgKCFwYi0+cGlwZSkKKwkJcGlwZSA9IHVzYl9yY3ZidWxrcGlwZSAocy0+dXNiZGV2LCAyKTsKKwllbHNlCisJCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUgKHMtPnVzYmRldiwgMik7CisKKwlyZXQ9dXNiX2J1bGtfbXNnKHMtPnVzYmRldiwgcGlwZSwgcGItPmRhdGEsIHBiLT5zaXplLCAmYWN0dWFsX2xlbmd0aCwgMTAwKTsKKwlpZihyZXQ8MCkgeworCQllcnIoImRhYnVzYjogdXNiX2J1bGtfbXNnIGZhaWxlZCglZCkiLHJldCk7CisKKwkJaWYgKHVzYl9zZXRfaW50ZXJmYWNlIChzLT51c2JkZXYsIF9EQUJVU0JfSUYsIDEpIDwgMCkgeworCQkJZXJyKCJzZXRfaW50ZXJmYWNlIGZhaWxlZCIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCX0KKwkKKwlpZiggcmV0ID09IC1FUElQRSApIHsKKwkJd2FybigiQ0xFQVJfRkVBVFVSRSByZXF1ZXN0IHRvIHJlbW92ZSBTVEFMTCBjb25kaXRpb24uIik7CisJCWlmKHVzYl9jbGVhcl9oYWx0KHMtPnVzYmRldiwgdXNiX3BpcGVlbmRwb2ludChwaXBlKSkpCisJCQllcnIoInJlcXVlc3QgZmFpbGVkIik7CisJfQorCisJcGItPnNpemUgPSBhY3R1YWxfbGVuZ3RoOworCXJldHVybiByZXQ7Cit9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBpbnQgZGFidXNiX3dyaXRlbWVtIChwZGFidXNiX3QgcywgaW50IHBvcywgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbikKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlciA9ICBrbWFsbG9jIChsZW4sIEdGUF9LRVJORUwpOworCisJaWYgKCF0cmFuc2Zlcl9idWZmZXIpIHsKKwkJZXJyKCJkYWJ1c2Jfd3JpdGVtZW06IGttYWxsb2MoJWQpIGZhaWxlZC4iLCBsZW4pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1jcHkgKHRyYW5zZmVyX2J1ZmZlciwgZGF0YSwgbGVuKTsKKworCXJldD11c2JfY29udHJvbF9tc2cocy0+dXNiZGV2LCB1c2Jfc25kY3RybHBpcGUoIHMtPnVzYmRldiwgMCApLCAweGEwLCAweDQwLCBwb3MsIDAsIHRyYW5zZmVyX2J1ZmZlciwgbGVuLCAzMDApOworCisJa2ZyZWUgKHRyYW5zZmVyX2J1ZmZlcik7CisJcmV0dXJuIHJldDsKK30KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIGludCBkYWJ1c2JfODA1MV9yZXNldCAocGRhYnVzYl90IHMsIHVuc2lnbmVkIGNoYXIgcmVzZXRfYml0KQoreworCWRiZygiZGFidXNiXzgwNTFfcmVzZXQ6ICVkIixyZXNldF9iaXQpOworCXJldHVybiBkYWJ1c2Jfd3JpdGVtZW0gKHMsIENQVUNTX1JFRywgJnJlc2V0X2JpdCwgMSk7Cit9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBpbnQgZGFidXNiX2xvYWRtZW0gKHBkYWJ1c2JfdCBzLCBjb25zdCBjaGFyICpmbmFtZSkKK3sKKwlpbnQgcmV0OworCVBJTlRFTF9IRVhfUkVDT1JEIHB0ciA9IGZpcm13YXJlOworCisJZGJnKCJFbnRlciBkYWJ1c2JfbG9hZG1lbSAoaW50ZXJuYWwpIik7CisJCisJcmV0ID0gZGFidXNiXzgwNTFfcmVzZXQgKHMsIDEpOworCXdoaWxlIChwdHItPlR5cGUgPT0gMCkgeworCisJCWRiZygiZGFidXNiX3dyaXRlbWVtOiAlMDRYICVwICVkKSIsIHB0ci0+QWRkcmVzcywgcHRyLT5EYXRhLCBwdHItPkxlbmd0aCk7CisKKwkJcmV0ID0gZGFidXNiX3dyaXRlbWVtIChzLCBwdHItPkFkZHJlc3MsIHB0ci0+RGF0YSwgcHRyLT5MZW5ndGgpOworCQlpZiAocmV0IDwgMCkgeworCQkJZXJyKCJkYWJ1c2Jfd3JpdGVtZW0gZmFpbGVkICglZCAlMDRYICVwICVkKSIsIHJldCwgcHRyLT5BZGRyZXNzLCBwdHItPkRhdGEsIHB0ci0+TGVuZ3RoKTsKKwkJCWJyZWFrOworCQl9CisJCXB0cisrOworCX0KKwlyZXQgPSBkYWJ1c2JfODA1MV9yZXNldCAocywgMCk7CisKKwlkYmcoImRhYnVzYl9sb2FkbWVtOiBleGl0Iik7CisKKwlyZXR1cm4gcmV0OworfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgaW50IGRhYnVzYl9mcGdhX2NsZWFyIChwZGFidXNiX3QgcywgcGJ1bGtfdHJhbnNmZXJfdCBiKQoreworCWItPnNpemUgPSA0OworCWItPmRhdGFbMF0gPSAweDJhOworCWItPmRhdGFbMV0gPSAwOworCWItPmRhdGFbMl0gPSAwOworCWItPmRhdGFbM10gPSAwOworCisJZGJnKCJkYWJ1c2JfZnBnYV9jbGVhciIpOworCisJcmV0dXJuIGRhYnVzYl9idWxrIChzLCBiKTsKK30KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIGludCBkYWJ1c2JfZnBnYV9pbml0IChwZGFidXNiX3QgcywgcGJ1bGtfdHJhbnNmZXJfdCBiKQoreworCWItPnNpemUgPSA0OworCWItPmRhdGFbMF0gPSAweDJjOworCWItPmRhdGFbMV0gPSAwOworCWItPmRhdGFbMl0gPSAwOworCWItPmRhdGFbM10gPSAwOworCisJZGJnKCJkYWJ1c2JfZnBnYV9pbml0Iik7CisKKwlyZXR1cm4gZGFidXNiX2J1bGsgKHMsIGIpOworfQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgaW50IGRhYnVzYl9mcGdhX2Rvd25sb2FkIChwZGFidXNiX3QgcywgY29uc3QgY2hhciAqZm5hbWUpCit7CisJcGJ1bGtfdHJhbnNmZXJfdCBiID0ga21hbGxvYyAoc2l6ZW9mIChidWxrX3RyYW5zZmVyX3QpLCBHRlBfS0VSTkVMKTsKKwl1bnNpZ25lZCBpbnQgYmxlbiwgbjsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGJpdHN0cmVhbTsKKworCWRiZygiRW50ZXIgZGFidXNiX2ZwZ2FfZG93bmxvYWQgKGludGVybmFsKSIpOworCisJaWYgKCFiKSB7CisJCWVycigia21hbGxvYyhzaXplb2YoYnVsa190cmFuc2Zlcl90KSk9PU5VTEwiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYi0+cGlwZSA9IDE7CisJcmV0ID0gZGFidXNiX2ZwZ2FfY2xlYXIgKHMsIGIpOworCW1kZWxheSAoMTApOworCWJsZW4gPSBidWZbNzNdICsgKGJ1Zls3Ml0gPDwgOCk7CisKKwlkYmcoIkJpdHN0cmVhbSBsZW46ICVpIiwgYmxlbik7CisKKwliLT5kYXRhWzBdID0gMHgyYjsKKwliLT5kYXRhWzFdID0gMDsKKwliLT5kYXRhWzJdID0gMDsKKwliLT5kYXRhWzNdID0gNjA7CisKKwlmb3IgKG4gPSAwOyBuIDw9IGJsZW4gKyA2MDsgbiArPSA2MCkgeworCQkvLyBzb21lIGNjbGtzIGZvciBzdGFydHVwCisJCWItPnNpemUgPSA2NDsKKwkJbWVtY3B5IChiLT5kYXRhICsgNCwgYnVmICsgNzQgKyBuLCA2MCk7CisJCXJldCA9IGRhYnVzYl9idWxrIChzLCBiKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWVycigiZGFidXNiX2J1bGsgZmFpbGVkLiIpOworCQkJYnJlYWs7CisJCX0KKwkJbWRlbGF5ICgxKTsKKwl9CisKKwlyZXQgPSBkYWJ1c2JfZnBnYV9pbml0IChzLCBiKTsKKwlrZnJlZSAoYik7CisKKwlkYmcoImV4aXQgZGFidXNiX2ZwZ2FfZG93bmxvYWQiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGFidXNiX3N0b3AgKHBkYWJ1c2JfdCBzKQoreworCWRiZygiZGFidXNiX3N0b3AiKTsKKworCXMtPnN0YXRlID0gX3N0b3BwZWQ7CisJZGFidXNiX2NhbmNlbF9xdWV1ZSAocywgJnMtPnJlY19idWZmX2xpc3QpOworCisJZGJnKCJwZW5kaW5nX2lvOiAlZCIsIHMtPnBlbmRpbmdfaW8uY291bnRlcik7CisKKwlzLT5wZW5kaW5nX2lvLmNvdW50ZXIgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhYnVzYl9zdGFydHJlayAocGRhYnVzYl90IHMpCit7CisJaWYgKCFzLT5nb3RfbWVtICYmIHMtPnN0YXRlICE9IF9zdGFydGVkKSB7CisKKwkJZGJnKCJkYWJ1c2Jfc3RhcnRyZWsiKTsKKworCQlpZiAoZGFidXNiX2FsbG9jX2J1ZmZlcnMgKHMpIDwgMCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlkYWJ1c2Jfc3RvcCAocyk7CisJCXMtPnN0YXRlID0gX3N0YXJ0ZWQ7CisJCXMtPnJlYWRwdHIgPSAwOworCX0KKworCWlmICghbGlzdF9lbXB0eSAoJnMtPmZyZWVfYnVmZl9saXN0KSkgeworCQlwYnVmZl90IGVuZDsKKwkJaW50IHJldDsKKwkJCisJd2hpbGUgKCFkYWJ1c2JfYWRkX2J1Zl90YWlsIChzLCAmcy0+cmVjX2J1ZmZfbGlzdCwgJnMtPmZyZWVfYnVmZl9saXN0KSkgeworCisJCQlkYmcoInN1Ym1pdHRpbmc6IGVuZDolcCBzLT5yZWNfYnVmZl9saXN0OiVwIiwgcy0+cmVjX2J1ZmZfbGlzdC5wcmV2LCAmcy0+cmVjX2J1ZmZfbGlzdCk7CisKKwkJCWVuZCA9IGxpc3RfZW50cnkgKHMtPnJlY19idWZmX2xpc3QucHJldiwgYnVmZl90LCBidWZmX2xpc3QpOworCisJCQlyZXQgPSB1c2Jfc3VibWl0X3VyYiAoZW5kLT5wdXJiLCBHRlBfS0VSTkVMKTsKKwkJCWlmIChyZXQpIHsKKwkJCQllcnIoInVzYl9zdWJtaXRfdXJiIHJldHVybmVkOiVkIiwgcmV0KTsKKwkJCQlpZiAoZGFidXNiX2FkZF9idWZfdGFpbCAocywgJnMtPmZyZWVfYnVmZl9saXN0LCAmcy0+cmVjX2J1ZmZfbGlzdCkpCisJCQkJCWVycigic3RhcnRyZWs6IGRhYnVzYl9hZGRfYnVmX3RhaWwgZmFpbGVkIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQllbHNlCisJCQkJYXRvbWljX2luYyAoJnMtPnBlbmRpbmdfaW8pOworCQl9CisJCWRiZygicGVuZGluZ19pbzogJWQiLHMtPnBlbmRpbmdfaW8uY291bnRlcik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGRhYnVzYl9yZWFkIChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBwcG9zKQoreworCXBkYWJ1c2JfdCBzID0gKHBkYWJ1c2JfdCkgZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgcmV0ID0gMDsKKwlpbnQgcmVtOworCWludCBjbnQ7CisJcGJ1ZmZfdCBiOworCXN0cnVjdCB1cmIgKnB1cmIgPSBOVUxMOworCisJZGJnKCJkYWJ1c2JfcmVhZCIpOworCisJaWYgKCpwcG9zKQorCQlyZXR1cm4gLUVTUElQRTsKKworCWlmIChzLT5yZW1vdmVfcGVuZGluZykKKwkJcmV0dXJuIC1FSU87CisKKworCWlmICghcy0+dXNiZGV2KQorCQlyZXR1cm4gLUVJTzsKKworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJZGFidXNiX3N0YXJ0cmVrIChzKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSAoJnMtPmxvY2ssIGZsYWdzKTsKKworCQlpZiAobGlzdF9lbXB0eSAoJnMtPnJlY19idWZmX2xpc3QpKSB7CisKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKKworCQkJZXJyKCJlcnJvcjogcmVjX2J1Zl9saXN0IGlzIGVtcHR5Iik7CisJCQlnb3RvIGVycjsKKwkJfQorCQkKKwkJYiA9IGxpc3RfZW50cnkgKHMtPnJlY19idWZmX2xpc3QubmV4dCwgYnVmZl90LCBidWZmX2xpc3QpOworCQlwdXJiID0gYi0+cHVyYjsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CisKKwkJaWYgKHB1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykJCS8vIHJldHVybiBub25ibG9ja2luZworCQkJIHsKKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0ID0gLUVBR0FJTjsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKworCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbiAoJnMtPndhaXQpOworCisJCQlpZiAoc2lnbmFsX3BlbmRpbmcgKGN1cnJlbnQpKSB7CisJCQkJaWYgKCFyZXQpCisJCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKworCQkJc3Bpbl9sb2NrX2lycXNhdmUgKCZzLT5sb2NrLCBmbGFncyk7CisKKwkJCWlmIChsaXN0X2VtcHR5ICgmcy0+cmVjX2J1ZmZfbGlzdCkpIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CisJCQkJZXJyKCJlcnJvcjogc3RpbGwgbm8gYnVmZmVyIGF2YWlsYWJsZS4iKTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKKwkJCXMtPnJlYWRwdHIgPSAwOworCQl9CisJCWlmIChzLT5yZW1vdmVfcGVuZGluZykgeworCQkJcmV0ID0gLUVJTzsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJcmVtID0gcHVyYi0+YWN0dWFsX2xlbmd0aCAtIHMtPnJlYWRwdHI7CQkvLyBzZXQgcmVtYWluaW5nIGJ5dGVzIHRvIGNvcHkKKworCQlpZiAoY291bnQgPj0gcmVtKQorCQkJY250ID0gcmVtOworCQllbHNlCisJCQljbnQgPSBjb3VudDsKKworCQlkYmcoImNvcHlfdG9fdXNlcjolcCAlcCAlZCIsYnVmLCBwdXJiLT50cmFuc2Zlcl9idWZmZXIgKyBzLT5yZWFkcHRyLCBjbnQpOworCisJCWlmIChjb3B5X3RvX3VzZXIgKGJ1ZiwgcHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgcy0+cmVhZHB0ciwgY250KSkgeworCQkJZXJyKCJyZWFkOiBjb3B5X3RvX3VzZXIgZmFpbGVkIik7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBlcnI7CisJCX0KKworCQlzLT5yZWFkcHRyICs9IGNudDsKKwkJY291bnQgLT0gY250OworCQlidWYgKz0gY250OworCQlyZXQgKz0gY250OworCisJCWlmIChzLT5yZWFkcHRyID09IHB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJCS8vIGZpbmlzaGVkLCB0YWtlIG5leHQgYnVmZmVyCisJCQlpZiAoZGFidXNiX2FkZF9idWZfdGFpbCAocywgJnMtPmZyZWVfYnVmZl9saXN0LCAmcy0+cmVjX2J1ZmZfbGlzdCkpCisJCQkJZXJyKCJyZWFkOiBkYWJ1c2JfYWRkX2J1Zl90YWlsIGZhaWxlZCIpOworCQkJcy0+cmVhZHB0ciA9IDA7CisJCX0KKwl9CisgICAgICBlcnI6CQkJLy91cCgmcy0+bXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGFidXNiX29wZW4gKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCBkZXZudW0gPSBpbWlub3IoaW5vZGUpOworCXBkYWJ1c2JfdCBzOworCisJaWYgKGRldm51bSA8IERBQlVTQl9NSU5PUiB8fCBkZXZudW0gPj0gKERBQlVTQl9NSU5PUiArIE5SREFCVVNCKSkKKwkJcmV0dXJuIC1FSU87CisKKwlzID0gJmRhYnVzYltkZXZudW0gLSBEQUJVU0JfTUlOT1JdOworCisJZGJnKCJkYWJ1c2Jfb3BlbiIpOworCWRvd24gKCZzLT5tdXRleCk7CisKKwl3aGlsZSAoIXMtPnVzYmRldiB8fCBzLT5vcGVuZWQpIHsKKwkJdXAgKCZzLT5tdXRleCk7CisKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDUwMCk7CisKKwkJaWYgKHNpZ25hbF9wZW5kaW5nIChjdXJyZW50KSkgeworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwkJZG93biAoJnMtPm11dGV4KTsKKwl9CisJaWYgKHVzYl9zZXRfaW50ZXJmYWNlIChzLT51c2JkZXYsIF9EQUJVU0JfSUYsIDEpIDwgMCkgeworCQl1cCgmcy0+bXV0ZXgpOworCQllcnIoInNldF9pbnRlcmZhY2UgZmFpbGVkIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzLT5vcGVuZWQgPSAxOworCXVwICgmcy0+bXV0ZXgpOworCisJZmlsZS0+Zl9wb3MgPSAwOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IHM7CisKKwlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQgZGFidXNiX3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXBkYWJ1c2JfdCBzID0gKHBkYWJ1c2JfdCkgZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJZGJnKCJkYWJ1c2JfcmVsZWFzZSIpOworCisJZG93biAoJnMtPm11dGV4KTsKKwlkYWJ1c2Jfc3RvcCAocyk7CisJZGFidXNiX2ZyZWVfYnVmZmVycyAocyk7CisJdXAgKCZzLT5tdXRleCk7CisKKwlpZiAoIXMtPnJlbW92ZV9wZW5kaW5nKSB7CisJCWlmICh1c2Jfc2V0X2ludGVyZmFjZSAocy0+dXNiZGV2LCBfREFCVVNCX0lGLCAwKSA8IDApCisJCQllcnIoInNldF9pbnRlcmZhY2UgZmFpbGVkIik7CisJfQorCWVsc2UKKwkJd2FrZV91cCAoJnMtPnJlbW92ZV9vayk7CisKKwlzLT5vcGVuZWQgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhYnVzYl9pb2N0bCAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXBkYWJ1c2JfdCBzID0gKHBkYWJ1c2JfdCkgZmlsZS0+cHJpdmF0ZV9kYXRhOworCXBidWxrX3RyYW5zZmVyX3QgcGJ1bGs7CisJaW50IHJldCA9IDA7CisJaW50IHZlcnNpb24gPSBEQUJVU0JfVkVSU0lPTjsKKworCWRiZygiZGFidXNiX2lvY3RsIik7CisKKwlpZiAocy0+cmVtb3ZlX3BlbmRpbmcpCisJCXJldHVybiAtRUlPOworCisJZG93biAoJnMtPm11dGV4KTsKKworCWlmICghcy0+dXNiZGV2KSB7CisJCXVwICgmcy0+bXV0ZXgpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlzd2l0Y2ggKGNtZCkgeworCisJY2FzZSBJT0NUTF9EQUJfQlVMSzoKKwkJcGJ1bGsgPSAocGJ1bGtfdHJhbnNmZXJfdCkga21hbGxvYyAoc2l6ZW9mIChidWxrX3RyYW5zZmVyX3QpLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIXBidWxrKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoY29weV9mcm9tX3VzZXIgKHBidWxrLCAodm9pZCBfX3VzZXIgKikgYXJnLCBzaXplb2YgKGJ1bGtfdHJhbnNmZXJfdCkpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJa2ZyZWUgKHBidWxrKTsKKwkJCWJyZWFrOworCQl9CisKKwkJcmV0PWRhYnVzYl9idWxrIChzLCBwYnVsayk7CisJCWlmKHJldD09MCkKKwkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCBwYnVsaywKKwkJCQkJIHNpemVvZihidWxrX3RyYW5zZmVyX3QpKSkKKwkJCQlyZXQgPSAtRUZBVUxUOworCQlrZnJlZSAocGJ1bGspOworCQlicmVhazsKKworCWNhc2UgSU9DVExfREFCX09WRVJSVU5TOgorCQlyZXQgPSBwdXRfdXNlciAocy0+b3ZlcnJ1bnMsICh1bnNpZ25lZCBpbnQgX191c2VyICopIGFyZyk7CisJCWJyZWFrOworCisJY2FzZSBJT0NUTF9EQUJfVkVSU0lPTjoKKwkJcmV0ID0gcHV0X3VzZXIgKHZlcnNpb24sICh1bnNpZ25lZCBpbnQgX191c2VyICopIGFyZyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT0lPQ1RMQ01EOworCQlicmVhazsKKwl9CisJdXAgKCZzLT5tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGFidXNiX2ZvcHMgPQoreworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5sbHNlZWsgPQlub19sbHNlZWssCisJLnJlYWQgPQkJZGFidXNiX3JlYWQsCisJLmlvY3RsID0JZGFidXNiX2lvY3RsLAorCS5vcGVuID0JCWRhYnVzYl9vcGVuLAorCS5yZWxlYXNlID0JZGFidXNiX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgZGFidXNiX2NsYXNzID0geworCS5uYW1lID0JCSJ1c2IvZGFidXNiJWQiLAorCS5mb3BzID0JCSZkYWJ1c2JfZm9wcywKKwkubW9kZSA9CQlTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dSUCwKKwkubWlub3JfYmFzZSA9CURBQlVTQl9NSU5PUiwKK307CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgaW50IGRhYnVzYl9wcm9iZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCWludCByZXR2YWw7CisJcGRhYnVzYl90IHM7CisKKwlkYmcoImRhYnVzYjogcHJvYmU6IHZlbmRvciBpZCAweCV4LCBkZXZpY2UgaWQgMHgleCBpZm51bTolZCIsCisJICAgIGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJICAgIGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpLAorCSAgICBpbnRmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOworCisJLyogV2UgZG9uJ3QgaGFuZGxlIG11bHRpcGxlIGNvbmZpZ3VyYXRpb25zICovCisJaWYgKHVzYmRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyICE9IF9EQUJVU0JfSUYgJiYKKwkgICAgbGUxNl90b19jcHUodXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gMHg5OTk5KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCisKKwlzID0gJmRhYnVzYltpbnRmLT5taW5vcl07CisKKwlkb3duICgmcy0+bXV0ZXgpOworCXMtPnJlbW92ZV9wZW5kaW5nID0gMDsKKwlzLT51c2JkZXYgPSB1c2JkZXY7CisJcy0+ZGV2bnVtID0gaW50Zi0+bWlub3I7CisKKwlpZiAodXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24gKHVzYmRldikgPCAwKSB7CisJCWVycigicmVzZXRfY29uZmlndXJhdGlvbiBmYWlsZWQiKTsKKwkJZ290byByZWplY3Q7CisJfQorCWlmIChsZTE2X3RvX2NwdSh1c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSAweDIxMzEpIHsKKwkJZGFidXNiX2xvYWRtZW0gKHMsIE5VTEwpOworCQlnb3RvIHJlamVjdDsKKwl9CisJZWxzZSB7CisJCWRhYnVzYl9mcGdhX2Rvd25sb2FkIChzLCBOVUxMKTsKKworCQlpZiAodXNiX3NldF9pbnRlcmZhY2UgKHMtPnVzYmRldiwgX0RBQlVTQl9JRiwgMCkgPCAwKSB7CisJCQllcnIoInNldF9pbnRlcmZhY2UgZmFpbGVkIik7CisJCQlnb3RvIHJlamVjdDsKKwkJfQorCX0KKwlkYmcoImJvdW5kIHRvIGludGVyZmFjZTogJWQiLCBpbnRmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIHMpOworCXVwICgmcy0+bXV0ZXgpOworCisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCAmZGFidXNiX2NsYXNzKTsKKwlpZiAocmV0dmFsKSB7CisJCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKKworICAgICAgcmVqZWN0OgorCXVwICgmcy0+bXV0ZXgpOworCXMtPnVzYmRldiA9IE5VTEw7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyB2b2lkIGRhYnVzYl9kaXNjb25uZWN0IChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwl3YWl0X3F1ZXVlX3QgX193YWl0OworCXBkYWJ1c2JfdCBzID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisKKwlkYmcoImRhYnVzYl9kaXNjb25uZWN0Iik7CisJCisJaW5pdF93YWl0cXVldWVfZW50cnkoJl9fd2FpdCwgY3VycmVudCk7CisJCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisJaWYgKHMpIHsKKwkJdXNiX2RlcmVnaXN0ZXJfZGV2IChpbnRmLCAmZGFidXNiX2NsYXNzKTsKKwkJcy0+cmVtb3ZlX3BlbmRpbmcgPSAxOworCQl3YWtlX3VwICgmcy0+d2FpdCk7CisJCWFkZF93YWl0X3F1ZXVlKCZzLT5yZW1vdmVfb2ssICZfX3dhaXQpOworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCWlmIChzLT5zdGF0ZSA9PSBfc3RhcnRlZCkKKwkJCXNjaGVkdWxlKCk7CisJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOworCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcy0+cmVtb3ZlX29rLCAmX193YWl0KTsKKwkJCisJCXMtPnVzYmRldiA9IE5VTEw7CisJCXMtPm92ZXJydW5zID0gMDsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkYWJ1c2JfaWRzIFtdID0geworCS8vIHsgVVNCX0RFVklDRSgweDA1NDcsIDB4MjEzMSkgfSwJLyogQW4yMTMxIGNoaXAsIG5vIGJvb3QgUk9NICovCisJeyBVU0JfREVWSUNFKDB4MDU0NywgMHg5OTk5KSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGRhYnVzYl9pZHMpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZGFidXNiX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiZGFidXNiIiwKKwkucHJvYmUgPQlkYWJ1c2JfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQlkYWJ1c2JfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlkYWJ1c2JfaWRzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgX19pbml0IGRhYnVzYl9pbml0ICh2b2lkKQoreworCWludCByZXR2YWw7CisJdW5zaWduZWQgdTsKKworCS8qIGluaXRpYWxpemUgc3RydWN0ICovCisJZm9yICh1ID0gMDsgdSA8IE5SREFCVVNCOyB1KyspIHsKKwkJcGRhYnVzYl90IHMgPSAmZGFidXNiW3VdOworCQltZW1zZXQgKHMsIDAsIHNpemVvZiAoZGFidXNiX3QpKTsKKwkJaW5pdF9NVVRFWCAoJnMtPm11dGV4KTsKKwkJcy0+dXNiZGV2ID0gTlVMTDsKKwkJcy0+dG90YWxfYnVmZmVyX3NpemUgPSBidWZmZXJzOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkICgmcy0+d2FpdCk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZzLT5yZW1vdmVfb2spOworCQlzcGluX2xvY2tfaW5pdCAoJnMtPmxvY2spOworCQlJTklUX0xJU1RfSEVBRCAoJnMtPmZyZWVfYnVmZl9saXN0KTsKKwkJSU5JVF9MSVNUX0hFQUQgKCZzLT5yZWNfYnVmZl9saXN0KTsKKwl9CisKKwkvKiByZWdpc3RlciBtaXNjIGRldmljZSAqLworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmZGFidXNiX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJZ290byBvdXQ7CisKKwlkYmcoImRhYnVzYl9pbml0OiBkcml2ZXIgcmVnaXN0ZXJlZCIpOworCisJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRhYnVzYl9jbGVhbnVwICh2b2lkKQoreworCWRiZygiZGFidXNiX2NsZWFudXAiKTsKKworCXVzYl9kZXJlZ2lzdGVyICgmZGFidXNiX2RyaXZlcik7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShidWZmZXJzLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyAoYnVmZmVycywgIk51bWJlciBvZiBidWZmZXJzIChkZWZhdWx0PTI1NikiKTsKKworbW9kdWxlX2luaXQgKGRhYnVzYl9pbml0KTsKK21vZHVsZV9leGl0IChkYWJ1c2JfY2xlYW51cCk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvZGFidXNiLmggYi9kcml2ZXJzL3VzYi9tZWRpYS9kYWJ1c2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGI2NjZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvZGFidXNiLmgKQEAgLTAsMCArMSw4NSBAQAorI2RlZmluZSBfQlVMS19EQVRBX0xFTiA2NAordHlwZWRlZiBzdHJ1Y3QKK3sKKwl1bnNpZ25lZCBjaGFyIGRhdGFbX0JVTEtfREFUQV9MRU5dOworCXVuc2lnbmVkIGludCBzaXplOworCXVuc2lnbmVkIGludCBwaXBlOworfWJ1bGtfdHJhbnNmZXJfdCwqcGJ1bGtfdHJhbnNmZXJfdDsKKworI2RlZmluZSBEQUJVU0JfTUlOT1IgMjQwCQkvKiBzb21lIHVuYXNzaWduZWQgVVNCIG1pbm9yICovCisjZGVmaW5lIERBQlVTQl9WRVJTSU9OIDB4MTAwMAorI2RlZmluZSBJT0NUTF9EQUJfQlVMSyAgICAgICAgICAgICAgX0lPV1IoJ2QnLCAweDMwLCBidWxrX3RyYW5zZmVyX3QpCisjZGVmaW5lIElPQ1RMX0RBQl9PVkVSUlVOUwkgICAgX0lPUignZCcsICAweDE1LCBpbnQpCisjZGVmaW5lIElPQ1RMX0RBQl9WRVJTSU9OICAgICAgICAgICBfSU9SKCdkJywgMHgzZiwgaW50KSAKKworI2lmZGVmIF9fS0VSTkVMX18KKwordHlwZWRlZiBlbnVtIHsgX3N0b3BwZWQ9MCwgX3N0YXJ0ZWQgfSBkcml2ZXJfc3RhdGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlzdHJ1Y3Qgc2VtYXBob3JlIG11dGV4OworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCByZW1vdmVfb2s7CisJc3BpbmxvY2tfdCBsb2NrOworCWF0b21pY190IHBlbmRpbmdfaW87CisJZHJpdmVyX3N0YXRlX3Qgc3RhdGU7CisJaW50IHJlbW92ZV9wZW5kaW5nOworCWludCBnb3RfbWVtOworCWludCB0b3RhbF9idWZmZXJfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgb3ZlcnJ1bnM7CisJaW50IHJlYWRwdHI7CisJaW50IG9wZW5lZDsKKwlpbnQgZGV2bnVtOworCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9idWZmX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCByZWNfYnVmZl9saXN0OworfSBkYWJ1c2JfdCwqcGRhYnVzYl90OworCit0eXBlZGVmIHN0cnVjdCAKK3sKKwlwZGFidXNiX3QgczsKKwlzdHJ1Y3QgdXJiICpwdXJiOworCXN0cnVjdCBsaXN0X2hlYWQgYnVmZl9saXN0OworfSBidWZmX3QsKnBidWZmX3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKK30gYnVsa19jb21wbGV0aW9uX2NvbnRleHRfdCwgKnBidWxrX2NvbXBsZXRpb25fY29udGV4dF90OworCisKKyNkZWZpbmUgX0RBQlVTQl9JRiAyCisjZGVmaW5lIF9EQUJVU0JfSVNPUElQRSAweDA5CisjZGVmaW5lIF9JU09QSVBFU0laRQkxNjM4NAorCisjZGVmaW5lIF9CVUxLX0RBVEFfTEVOIDY0CisvLyBWZW5kb3Igc3BlY2lmaWMgcmVxdWVzdCBjb2RlIGZvciBBbmNob3IgVXBsb2FkL0Rvd25sb2FkCisvLyBUaGlzIG9uZSBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgY29yZQorI2RlZmluZSBBTkNIT1JfTE9BRF9JTlRFUk5BTCAgMHhBMAorCisvLyBFWi1VU0IgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyLiAgQml0IDAgY29udHJvbHMgODA1MSByZXNldAorI2RlZmluZSBDUFVDU19SRUcgICAgMHg3RjkyCisjZGVmaW5lIF9UT1RBTF9CVUZGRVJTIDM4NAorCisjZGVmaW5lIE1BWF9JTlRFTF9IRVhfUkVDT1JEX0xFTkdUSCAxNgorCisjaWZuZGVmIF9CWVRFX0RFRklORUQKKyNkZWZpbmUgX0JZVEVfREVGSU5FRAordHlwZWRlZiB1bnNpZ25lZCBjaGFyIEJZVEU7CisjZW5kaWYgLy8gIV9CWVRFX0RFRklORUQKKworI2lmbmRlZiBfV09SRF9ERUZJTkVECisjZGVmaW5lIF9XT1JEX0RFRklORUQKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgV09SRDsKKyNlbmRpZiAvLyAhX1dPUkRfREVGSU5FRAorCit0eXBlZGVmIHN0cnVjdCBfSU5URUxfSEVYX1JFQ09SRAoreworICAgQllURSAgTGVuZ3RoOworICAgV09SRCAgQWRkcmVzczsKKyAgIEJZVEUgIFR5cGU7CisgICBCWVRFICBEYXRhW01BWF9JTlRFTF9IRVhfUkVDT1JEX0xFTkdUSF07Cit9IElOVEVMX0hFWF9SRUNPUkQsICpQSU5URUxfSEVYX1JFQ09SRDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9kc2JyMTAwLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9kc2JyMTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUwM2Y1YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL2RzYnIxMDAuYwpAQCAtMCwwICsxLDQyOSBAQAorLyogQSBkcml2ZXIgZm9yIHRoZSBELUxpbmsgRFNCLVIxMDAgVVNCIHJhZGlvLiAgVGhlIFIxMDAgcGx1Z3MKKyBpbnRvIGJvdGggdGhlIFVTQiBhbmQgYW4gYW5hbG9nIGF1ZGlvIGlucHV0LCBzbyB0aGlzIHRoaW5nCisgb25seSBkZWFscyB3aXRoIGluaXRpYWxpc2F0aW9uIGFuZCBmcmVxdWVuY3kgc2V0dGluZywgdGhlCisgYXVkaW8gZGF0YSBoYXMgdG8gYmUgaGFuZGxlZCBieSBhIHNvdW5kIGRyaXZlci4KKworIE1ham9yIGlzc3VlOiBJIGNhbid0IGZpbmQgb3V0IHdoZXJlIHRoZSBkZXZpY2UgcmVwb3J0cyB0aGUgc2lnbmFsCisgc3RyZW5ndGgsIGFuZCBpbmRlZWQgdGhlIHdpbmRvd3Mgc29mdHdhcmUgYXBwZWFyYW50bHkganVzdCBsb29rcworIGF0IHRoZSBzdGVyZW8gaW5kaWNhdG9yIGFzIHdlbGwuICBTbywgc2Nhbm5pbmcgd2lsbCBvbmx5IGZpbmQKKyBzdGVyZW8gc3RhdGlvbnMuICBTYWQsIGJ1dCBJIGNhbid0IGhlbHAgaXQuCisKKyBBbHNvLCB0aGUgd2luZG93cyBwcm9ncmFtIHNlbmRzIG9vZGxlcyBvZiBtZXNzYWdlcyBvdmVyIHRvIHRoZQorIGRldmljZSwgYW5kIEkgY291bGRuJ3QgZmlndXJlIG91dCB0aGVpciBtZWFuaW5nLiAgTXkgc3VzcGljaW9uCisgaXMgdGhhdCB0aGV5IGRvbid0IGhhdmUgYW55Oi0pCisKKyBZb3UgbWlnaHQgZmluZCBzb21lIGludGVyZXN0aW5nIHN0dWZmIGFib3V0IHRoaXMgbW9kdWxlIGF0CisgaHR0cDovL3VuaW11dC5mc2sudW5pLWhlaWRlbGJlcmcuZGUvdW5pbXV0L2RlbWkvZHNicgorCisgQ29weXJpZ2h0IChjKSAyMDAwIE1hcmt1cyBEZW1sZWl0bmVyIDxtc2RlbWxlaUBjbC51bmktaGVpZGVsYmVyZy5kZT4KKworIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKKyBIaXN0b3J5OgorCisgVmVyc2lvbiAwLjQwOgorICBNYXJrdXM6IFVwZGF0ZXMgZm9yIDIuNi54IGtlcm5lbHMsIGNvZGUgbGF5b3V0IGNoYW5nZXMsIG5hbWUgc2FuaXRpemluZworCisgVmVyc2lvbiAwLjMwOgorIAlNYXJrdXM6IFVwZGF0ZXMgZm9yIDIuNS54IGtlcm5lbCBhbmQgbW9yZSBJU08gY29tcGxpYW50IHNvdXJjZQorCisgVmVyc2lvbiAwLjI1OgorICAgICAgICBQU0wgYW5kIE1hcmt1czogQ2xlYW51cCwgcmFkaW8gbm93IGRvZXNuJ3Qgc3RvcCBvbiBkZXZpY2UgY2xvc2UKKworIFZlcnNpb24gMC4yNDoKKyAJTWFya3VzOiBIb3BlIEkgZ290IHRoZXNlIHNpbGx5IFZJREVPX1RVTkVSX0xPVyBpc3N1ZXMgZmluYWxseQorCXJpZ2h0LiAgU29tZSBtaW5vciBjbGVhbnVwLCBpbXByb3ZlZCBzdGFuZGFsb25lIGNvbXBpbGF0aW9uCisKKyBWZXJzaW9uIDAuMjM6CisgCU1hcmt1czogU2lnbiBleHRlbnNpb24gYnVnIGZpeGVkIGJ5IGRlY2xhcmluZyB0cmFuc2Zlcl9idWZmZXIgdW5zaWduZWQKKworIFZlcnNpb24gMC4yMjoKKyAJTWFya3VzOiBTb21lIChicm93biBiYWcpIGNsZWFudXAgaW4gd2hhdCBWSURJT0NTVFVORVIgcmV0dXJucywgCisJdGhhbmtzIHRvIE1pa2UgQ294IGZvciBwb2ludGluZyB0aGUgcHJvYmxlbSBvdXQuCisKKyBWZXJzaW9uIDAuMjE6CisgCU1hcmt1czogTWlub3IgY2xlYW51cCwgd2FybmluZ3MgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcsIGxhbWUgYXR0ZW1wdAorCXRvIGFkaGVyZSB0byBEb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlCisKKyBWZXJzaW9uIDAuMjogCisgCUJyYWQgSGFyZHMgPGJyYWRoQGR5bmFtaXRlLmNvbS5hdT46IEZpeGVzIHRvIG1ha2UgaXQgd29yayBhcyBub24tbW9kdWxlCisJTWFya3VzOiBDb3B5cmlnaHQgY2xhcmlmaWNhdGlvbgorCisgVmVyc2lvbiAwLjAxOiBNYXJrdXM6IGluaXRpYWwgcmVsZWFzZQorCisqLworCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC40MCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTWFya3VzIERlbWxlaXRuZXIgPG1zZGVtbGVpQHR1Y2FuYS5oYXJ2YXJkLmVkdT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJELUxpbmsgRFNCLVIxMDAgVVNCIEZNIHJhZGlvIGRyaXZlciIKKworI2RlZmluZSBEU0IxMDBfVkVORE9SIDB4MDRiNAorI2RlZmluZSBEU0IxMDBfUFJPRFVDVCAweDEwMDIKKworLyogQ29tbWFuZHMgdGhlIGRldmljZSBhcHBlYXJzIHRvIHVuZGVyc3RhbmQgKi8KKyNkZWZpbmUgRFNCMTAwX1RVTkUgMQorI2RlZmluZSBEU0IxMDBfT05PRkYgMgorCisjZGVmaW5lIFRCX0xFTiAxNgorCisvKiBGcmVxdWVuY3kgbGltaXRzIGluIE1IeiAtLSB0aGVzZSBhcmUgRXVyb3BlYW4gdmFsdWVzLiAgRm9yIEphcGFuZXNlCitkZXZpY2VzLCB0aGF0IHdvdWxkIGJlIDc2IGFuZCA5MS4gICovCisjZGVmaW5lIEZSRVFfTUlOICA4Ny41CisjZGVmaW5lIEZSRVFfTUFYIDEwOC4wCisjZGVmaW5lIEZSRVFfTVVMIDE2MDAwCisKKworc3RhdGljIGludCB1c2JfZHNicjEwMF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIHVzYl9kc2JyMTAwX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworc3RhdGljIGludCB1c2JfZHNicjEwMF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIGludCB1c2JfZHNicjEwMF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgdXNiX2RzYnIxMDBfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOworCitzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CisKKy8qIERhdGEgZm9yIG9uZSAocGh5c2ljYWwpIGRldmljZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9kZXY7CisJdW5zaWduZWQgY2hhciB0cmFuc2Zlcl9idWZmZXJbVEJfTEVOXTsKKwlpbnQgY3VyZnJlcTsKKwlpbnQgc3RlcmVvOworCWludCB1c2VyczsKKwlpbnQgcmVtb3ZlZDsKK30gZHNicjEwMF9kZXZpY2U7CisKKworLyogRmlsZSBzeXN0ZW0gaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2JfZHNicjEwMF9mb3BzID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5vcGVuID0JCXVzYl9kc2JyMTAwX29wZW4sCisJLnJlbGVhc2UgPSAgICAgCXVzYl9kc2JyMTAwX2Nsb3NlLAorCS5pb2N0bCA9ICAgICAgICB1c2JfZHNicjEwMF9pb2N0bCwKKwkubGxzZWVrID0gICAgICAgbm9fbGxzZWVrLAorfTsKKworLyogVjRMIGludGVyZmFjZSAqLworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgZHNicjEwMF92aWRlb2Rldl90ZW1wbGF0ZT0KK3sKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiRC1MaW5rIERTQi1SIDEwMCIsCisJLnR5cGUgPQkJVklEX1RZUEVfVFVORVIsCisJLmhhcmR3YXJlID0JVklEX0hBUkRXQVJFX0FaVEVDSCwKKwkuZm9wcyA9ICAgICAgICAgJnVzYl9kc2JyMTAwX2ZvcHMsCisJLnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfZHNicjEwMF9kZXZpY2VfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKERTQjEwMF9WRU5ET1IsIERTQjEwMF9QUk9EVUNUKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHVzYl9kc2JyMTAwX2RldmljZV90YWJsZSk7CisKKy8qIFVTQiBzdWJzeXN0ZW0gaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX2RzYnIxMDBfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJkc2JyMTAwIiwKKwkucHJvYmUgPQl1c2JfZHNicjEwMF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9kc2JyMTAwX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JdXNiX2RzYnIxMDBfZGV2aWNlX3RhYmxlLAorfTsKKworLyogTG93LWxldmVsIGRldmljZSBpbnRlcmZhY2UgYmVnaW5zIGhlcmUgKi8KKworLyogc3dpdGNoIG9uIHJhZGlvICovCitzdGF0aWMgaW50IGRzYnIxMDBfc3RhcnQoZHNicjEwMF9kZXZpY2UgKnJhZGlvKQoreworCWlmICh1c2JfY29udHJvbF9tc2cocmFkaW8tPnVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKHJhZGlvLT51c2JkZXYsIDApLAorCQkJVVNCX1JFUV9HRVRfU1RBVFVTLCAKKwkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX0lOLAorCQkJMHgwMCwgMHhDNywgcmFkaW8tPnRyYW5zZmVyX2J1ZmZlciwgOCwgMzAwKTwwIHx8CisJdXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKKwkJCURTQjEwMF9PTk9GRiwgCisJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKKwkJCTB4MDEsIDB4MDAsIHJhZGlvLT50cmFuc2Zlcl9idWZmZXIsIDgsIDMwMCk8MCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAocmFkaW8tPnRyYW5zZmVyX2J1ZmZlcilbMF07Cit9CisKKworLyogc3dpdGNoIG9mZiByYWRpbyAqLworc3RhdGljIGludCBkc2JyMTAwX3N0b3AoZHNicjEwMF9kZXZpY2UgKnJhZGlvKQoreworCWlmICh1c2JfY29udHJvbF9tc2cocmFkaW8tPnVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKHJhZGlvLT51c2JkZXYsIDApLAorCQkJVVNCX1JFUV9HRVRfU1RBVFVTLCAKKwkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX0lOLAorCQkJMHgxNiwgMHgxQywgcmFkaW8tPnRyYW5zZmVyX2J1ZmZlciwgOCwgMzAwKTwwIHx8CisJdXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKKwkJCURTQjEwMF9PTk9GRiwgCisJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKKwkJCTB4MDAsIDB4MDAsIHJhZGlvLT50cmFuc2Zlcl9idWZmZXIsIDgsIDMwMCk8MCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAocmFkaW8tPnRyYW5zZmVyX2J1ZmZlcilbMF07Cit9CisKKy8qIHNldCBhIGZyZXF1ZW5jeSwgZnJlcSBpcyBkZWZpbmVkIGJ5IHY0bCdzIFRVTkVSX0xPVywgaS5lLiAxLzE2dGgga0h6ICovCitzdGF0aWMgaW50IGRzYnIxMDBfc2V0ZnJlcShkc2JyMTAwX2RldmljZSAqcmFkaW8sIGludCBmcmVxKQoreworCWZyZXEgPSAoZnJlcS8xNio4MCkvMTAwMCs4NTY7CisJaWYgKHVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCisJCQlEU0IxMDBfVFVORSwgCisJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKKwkJCShmcmVxPj44KSYweDAwZmYsIGZyZXEmMHhmZiwgCisJCQlyYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApPDAgfHwKKwkgICB1c2JfY29udHJvbF9tc2cocmFkaW8tPnVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKHJhZGlvLT51c2JkZXYsIDApLAorCQkgCVVTQl9SRVFfR0VUX1NUQVRVUywgCisJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKKwkJCTB4OTYsIDB4QjcsIHJhZGlvLT50cmFuc2Zlcl9idWZmZXIsIDgsIDMwMCk8MCB8fAorCXVzYl9jb250cm9sX21zZyhyYWRpby0+dXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUocmFkaW8tPnVzYmRldiwgMCksCisJCQlVU0JfUkVRX0dFVF9TVEFUVVMsIAorCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8ICBVU0JfRElSX0lOLAorCQkJMHgwMCwgMHgyNCwgcmFkaW8tPnRyYW5zZmVyX2J1ZmZlciwgOCwgMzAwKTwwKSB7CisJCXJhZGlvLT5zdGVyZW8gPSAtMTsKKwkJcmV0dXJuIC0xOworCX0KKwlyYWRpby0+c3RlcmVvID0gISAoKHJhZGlvLT50cmFuc2Zlcl9idWZmZXIpWzBdJjB4MDEpOworCXJldHVybiAocmFkaW8tPnRyYW5zZmVyX2J1ZmZlcilbMF07Cit9CisKKy8qIHJldHVybiB0aGUgZGV2aWNlIHN0YXR1cy4gIFRoaXMgaXMsIGluIGVmZmVjdCwganVzdCB3aGV0aGVyIGl0CitzZWVzIGEgc3RlcmVvIHNpZ25hbCBvciBub3QuICBQaXR5LiAqLworc3RhdGljIHZvaWQgZHNicjEwMF9nZXRzdGF0KGRzYnIxMDBfZGV2aWNlICpyYWRpbykKK3sKKwlpZiAodXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKKwkJVVNCX1JFUV9HRVRfU1RBVFVTLCAKKwkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCisJCTB4MDAgLCAweDI0LCByYWRpby0+dHJhbnNmZXJfYnVmZmVyLCA4LCAzMDApPDApCisJCXJhZGlvLT5zdGVyZW8gPSAtMTsKKwllbHNlCisJCXJhZGlvLT5zdGVyZW8gPSAhIChyYWRpby0+dHJhbnNmZXJfYnVmZmVyWzBdJjB4MDEpOworfQorCisKKy8qIFVTQiBzdWJzeXN0ZW0gaW50ZXJmYWNlIGJlZ2lucyBoZXJlICovCisKKy8qIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgcHJlc2VudCBhbmQgcmVnaXN0ZXIgd2l0aCB2NGwgYW5kCit1c2IgaWYgaXQgaXMgKi8KK3N0YXRpYyBpbnQgdXNiX2RzYnIxMDBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlkc2JyMTAwX2RldmljZSAqcmFkaW87CisKKwlpZiAoIShyYWRpbyA9IGttYWxsb2Moc2l6ZW9mKGRzYnIxMDBfZGV2aWNlKSwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoIShyYWRpby0+dmlkZW9kZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKSkpIHsKKwkJa2ZyZWUocmFkaW8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtY3B5KHJhZGlvLT52aWRlb2RldiwgJmRzYnIxMDBfdmlkZW9kZXZfdGVtcGxhdGUsIAorCQlzaXplb2YoZHNicjEwMF92aWRlb2Rldl90ZW1wbGF0ZSkpOworCXJhZGlvLT5yZW1vdmVkID0gMDsKKwlyYWRpby0+dXNlcnMgPSAwOworCXJhZGlvLT51c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXJhZGlvLT5jdXJmcmVxID0gRlJFUV9NSU4qRlJFUV9NVUw7CisJdmlkZW9fc2V0X2RydmRhdGEocmFkaW8tPnZpZGVvZGV2LCByYWRpbyk7CisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShyYWRpby0+dmlkZW9kZXYsIFZGTF9UWVBFX1JBRElPLAorCQlyYWRpb19ucikpIHsKKwkJd2FybigiQ291bGQgbm90IHJlZ2lzdGVyIHZpZGVvIGRldmljZSIpOworCQl2aWRlb19kZXZpY2VfcmVsZWFzZShyYWRpby0+dmlkZW9kZXYpOworCQlrZnJlZShyYWRpbyk7CisJCXJldHVybiAtRUlPOworCX0KKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHJhZGlvKTsKKwlyZXR1cm4gMDsKK30KKworLyogaGFuZGxlIHVucGx1Z2dpbmcgb2YgdGhlIGRldmljZSwgcmVsZWFzZSBkYXRhIHN0cnVjdHVyZXMKK2lmIG5vdGhpbmcga2VlcHMgdXMgZnJvbSBkb2luZyBpdC4gIElmIHNvbWV0aGluZyBpcyBzdGlsbAora2VlcGluZyB1cyBidXN5LCB0aGUgcmVsZWFzZSBjYWxsYmFjayBvZiB2NGwgd2lsbCB0YWtlIGNhcmUKK29mIHJlbGVhc2luZyBpdC4gIHN0djY4MC5jIGRvZXMgbm90IHJlbGFzZSBpdHMgcHJpdmF0ZQorZGF0YSwgc28gSSBkb24ndCBkbyB0aGlzIGhlcmUgZWl0aGVyLiAgQ2hlY2tpbmcgb3V0IHRoZQorY29kZSBJJ2QgZXhwZWN0IEkgYmV0dGVyIGRpZCB0aGF0LCBidXQgaWYgdGhlcmUncyBhIG1lbW9yeQorbGVhayBoZXJlIGl0J3MgdGlueSAofjUwIGJ5dGVzIHBlciBkaXNjb25uZWN0KSAqLworc3RhdGljIHZvaWQgdXNiX2RzYnIxMDBfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlkc2JyMTAwX2RldmljZSAqcmFkaW8gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisJaWYgKHJhZGlvKSB7CisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHJhZGlvLT52aWRlb2Rldik7CisJCXJhZGlvLT52aWRlb2RldiA9IE5VTEw7CisJCWlmIChyYWRpby0+dXNlcnMpIHsKKwkJCWtmcmVlKHJhZGlvKTsKKwkJfSBlbHNlIHsKKwkJCXJhZGlvLT5yZW1vdmVkID0gMTsKKwkJfQorCX0KK30KKworCisvKiBWaWRlbyBmb3IgTGludXggaW50ZXJmYWNlICovCisKK3N0YXRpYyBpbnQgdXNiX2RzYnIxMDBfZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCWRzYnIxMDBfZGV2aWNlICpyYWRpbz12aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKworCWlmICghcmFkaW8pCisJCXJldHVybiAtRUlPOworCisJc3dpdGNoKGNtZCkgeworCQljYXNlIFZJRElPQ0dDQVA6IHsKKwkJCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5ICp2ID0gYXJnOworCisJCQltZW1zZXQodiwgMCwgc2l6ZW9mKCp2KSk7CisJCQl2LT50eXBlID0gVklEX1RZUEVfVFVORVI7CisJCQl2LT5jaGFubmVscyA9IDE7CisJCQl2LT5hdWRpb3MgPSAxOworCQkJc3RyY3B5KHYtPm5hbWUsICJELUxpbmsgUi0xMDAgVVNCIEZNIFJhZGlvIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ0dUVU5FUjogeworCQkJc3RydWN0IHZpZGVvX3R1bmVyICp2ID0gYXJnOworCisJCQlkc2JyMTAwX2dldHN0YXQocmFkaW8pOworCQkJaWYodi0+dHVuZXIpCS8qIE9ubHkgMSB0dW5lciAqLyAKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXYtPnJhbmdlbG93ID0gRlJFUV9NSU4qRlJFUV9NVUw7CisJCQl2LT5yYW5nZWhpZ2ggPSBGUkVRX01BWCpGUkVRX01VTDsKKwkJCXYtPmZsYWdzID0gVklERU9fVFVORVJfTE9XOworCQkJdi0+bW9kZSA9IFZJREVPX01PREVfQVVUTzsKKwkJCXYtPnNpZ25hbCA9IHJhZGlvLT5zdGVyZW8qMHg3MDAwOworCQkJCS8qIERvbid0IGtub3cgaG93IHRvIGdldCBzaWduYWwgc3RyZW5ndGggKi8KKwkJCXYtPmZsYWdzIHw9IFZJREVPX1RVTkVSX1NURVJFT19PTipyYWRpby0+c3RlcmVvOworCQkJc3RyY3B5KHYtPm5hbWUsICJEU0IgUi0xMDAiKTsKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DU1RVTkVSOiB7CisJCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnYgPSBhcmc7CisKKwkJCWlmKHYtPnR1bmVyIT0wKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJLyogT25seSAxIHR1bmVyIHNvIG5vIHNldHRpbmcgbmVlZGVkICEgKi8KKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DR0ZSRVE6IHsKKwkJCWludCAqZnJlcSA9IGFyZzsKKworCQkJaWYgKHJhZGlvLT5jdXJmcmVxPT0tMSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCSpmcmVxID0gcmFkaW8tPmN1cmZyZXE7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ1NGUkVROiB7CisJCQlpbnQgKmZyZXEgPSBhcmc7CisKKwkJCXJhZGlvLT5jdXJmcmVxID0gKmZyZXE7CisJCQlpZiAoZHNicjEwMF9zZXRmcmVxKHJhZGlvLCByYWRpby0+Y3VyZnJlcSk9PS0xKQorCQkJCXdhcm4oIlNldCBmcmVxdWVuY3kgZmFpbGVkIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ0dBVURJTzogeworCQkJc3RydWN0IHZpZGVvX2F1ZGlvICp2ID0gYXJnOworCisJCQltZW1zZXQodiwgMCwgc2l6ZW9mKCp2KSk7CisJCQl2LT5mbGFncyB8PSBWSURFT19BVURJT19NVVRBQkxFOworCQkJdi0+bW9kZSA9IFZJREVPX1NPVU5EX1NURVJFTzsKKwkJCXYtPnZvbHVtZSA9IDE7CisJCQl2LT5zdGVwID0gMTsKKwkJCXN0cmNweSh2LT5uYW1lLCAiUmFkaW8iKTsKKwkJCXJldHVybiAwOwkJCQorCQl9CisJCWNhc2UgVklESU9DU0FVRElPOiB7CisJCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYgPSBhcmc7CisKKwkJCWlmICh2LT5hdWRpbykgCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAodi0+ZmxhZ3MmVklERU9fQVVESU9fTVVURSkgeworCQkJCWlmIChkc2JyMTAwX3N0b3AocmFkaW8pPT0tMSkKKwkJCQkJd2FybigiUmFkaW8gZGlkIG5vdCByZXNwb25kIHByb3Blcmx5Iik7CisJCQl9CisJCQllbHNlCisJCQkJaWYgKGRzYnIxMDBfc3RhcnQocmFkaW8pPT0tMSkKKwkJCQkJd2FybigiUmFkaW8gZGlkIG5vdCByZXNwb25kIHByb3Blcmx5Iik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdXNiX2RzYnIxMDBfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIHVzYl9kc2JyMTAwX2RvX2lvY3RsKTsKK30KKworc3RhdGljIGludCB1c2JfZHNicjEwMF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWRzYnIxMDBfZGV2aWNlICpyYWRpbz12aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKworCXJhZGlvLT51c2VycyA9IDE7CisJaWYgKGRzYnIxMDBfc3RhcnQocmFkaW8pPDApIHsKKwkJd2FybigiUmFkaW8gZGlkIG5vdCBzdGFydCB1cCBwcm9wZXJseSIpOworCQlyYWRpby0+dXNlcnMgPSAwOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZHNicjEwMF9zZXRmcmVxKHJhZGlvLCByYWRpby0+Y3VyZnJlcSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNiX2RzYnIxMDBfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJZHNicjEwMF9kZXZpY2UgKnJhZGlvPXZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCisJaWYgKCFyYWRpbykKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmFkaW8tPnVzZXJzID0gMDsKKwlpZiAocmFkaW8tPnJlbW92ZWQpIHsKKwkJa2ZyZWUocmFkaW8pOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgZHNicjEwMF9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbCA9IHVzYl9yZWdpc3RlcigmdXNiX2RzYnIxMDBfZHJpdmVyKTsKKwlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRzYnIxMDBfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ1c2JfZHNicjEwMF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCAoZHNicjEwMF9pbml0KTsKK21vZHVsZV9leGl0IChkc2JyMTAwX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9pYm1jYW0uYyBiL2RyaXZlcnMvdXNiL21lZGlhL2libWNhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNDFmYzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9pYm1jYW0uYwpAQCAtMCwwICsxLDM5MzIgQEAKKy8qCisgKiBVU0IgSUJNIEMtSXQgVmlkZW8gQ2FtZXJhIGRyaXZlcgorICoKKyAqIFN1cHBvcnRzIFhpcmxpbmsgQy1JdCBWaWRlbyBDYW1lcmEsIElCTSBQQyBDYW1lcmEsCisgKiBJQk0gTmV0Q2FtZXJhIGFuZCBWZW8gU3RpbmdyYXkuCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gZWFybGllciB3b3JrIG9mOgorICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBKb2hhbm5lcyBFcmRmZWx0CisgKiAoQykgQ29weXJpZ2h0IDE5OTkgUmFuZHkgRHVubGFwCisgKgorICogNS8yNC8wMCBSZW1vdmVkIG9wdGlvbmFsIChhbmQgdW5uZWNlc3NhcnkpIGxvY2tpbmcgb2YgdGhlIGRyaXZlciB3aGlsZQorICogdGhlIGRldmljZSByZW1haW5zIHBsdWdnZWQgaW4uIENvcnJlY3RlZCByYWNlIGNvbmRpdGlvbnMgaW4gaWJtY2FtX29wZW4KKyAqIGFuZCBpYm1jYW1fcHJvYmUoKSByb3V0aW5lcyB1c2luZyB0aGlzIGFzIGEgZ3VpZGVsaW5lOgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgInVzYnZpZGVvLmgiCisKKyNkZWZpbmUgSUJNQ0FNX1ZFTkRPUl9JRAkweDA1NDUKKyNkZWZpbmUgSUJNQ0FNX1BST0RVQ1RfSUQJMHg4MDgwCisjZGVmaW5lIE5FVENBTV9QUk9EVUNUX0lECTB4ODAwMgkvKiBJQk0gTmV0Q2FtZXJhLCBjbG9zZSB0byBtb2RlbCAyICovCisjZGVmaW5lIFZFT184MDBDX1BST0RVQ1RfSUQJMHg4MDBDCS8qIFZlbyBTdGluZ3JheSwgcmVwYWNrYWdlZCBNb2RlbCAyICovCisjZGVmaW5lIFZFT184MDBEX1BST0RVQ1RfSUQJMHg4MDBECS8qIFZlbyBTdGluZ3JheSwgcmVwYWNrYWdlZCBNb2RlbCA0ICovCisKKyNkZWZpbmUgTUFYX0lCTUNBTQkJNAkvKiBIb3cgbWFueSBkZXZpY2VzIHdlIGFsbG93IHRvIGNvbm5lY3QgKi8KKyNkZWZpbmUgVVNFU19JQk1DQU1fUFVUUElYRUwgICAgMCAgICAgICAvKiAwPUZhc3Qvb29wcyAxPVNsb3cvc2VjdXJlICovCisKKy8qIEhlYWRlciBzaWduYXR1cmVzICovCisKKy8qIE1vZGVsIDEgaGVhZGVyOiAwMCBGRiAwMCB4eCAqLworI2RlZmluZSBIRFJTSUdfTU9ERUwxXzEyOHg5NgkweDA2CS8qIFUgWSBWIFkgLi4uICovCisjZGVmaW5lIEhEUlNJR19NT0RFTDFfMTc2eDE0NAkweDBlCS8qIFUgWSBWIFkgLi4uICovCisjZGVmaW5lIEhEUlNJR19NT0RFTDFfMzUyeDI4OAkweDAwCS8qIFYgWSBVIFkgLi4uICovCisKKyNkZWZpbmUJSUJNQ0FNX01PREVMXzEJMQkvKiBYVlAtNTAxLCAzIGludGVyZmFjZXMsIHJldi4gMC4wMiAqLworI2RlZmluZSBJQk1DQU1fTU9ERUxfMgkyCS8qIEtTWC1YOTkwMywgMiBpbnRlcmZhY2VzLCByZXYuIDMuMGEgKi8KKyNkZWZpbmUgSUJNQ0FNX01PREVMXzMJMwkvKiBLU1gtWDk5MDIsIDIgaW50ZXJmYWNlcywgcmV2LiAzLjAxICovCisjZGVmaW5lCUlCTUNBTV9NT0RFTF80CTQJLyogSUJNIE5ldENhbWVyYSwgMDU0NS84MDAyLzMuMGEgKi8KKworLyogVmlkZW8gc2l6ZXMgc3VwcG9ydGVkICovCisjZGVmaW5lCVZJREVPU0laRV8xMjh4OTYJVklERU9TSVpFKDEyOCwgOTYpCisjZGVmaW5lCVZJREVPU0laRV8xNzZ4MTQ0CVZJREVPU0laRSgxNzYsMTQ0KQorI2RlZmluZQlWSURFT1NJWkVfMzUyeDI4OAlWSURFT1NJWkUoMzUyLDI4OCkKKyNkZWZpbmUJVklERU9TSVpFXzMyMHgyNDAJVklERU9TSVpFKDMyMCwyNDApCisjZGVmaW5lCVZJREVPU0laRV8zNTJ4MjQwCVZJREVPU0laRSgzNTIsMjQwKQorI2RlZmluZQlWSURFT1NJWkVfNjQweDQ4MAlWSURFT1NJWkUoNjQwLDQ4MCkKKyNkZWZpbmUJVklERU9TSVpFXzE2MHgxMjAJVklERU9TSVpFKDE2MCwxMjApCisKKy8qIFZpZGVvIHNpemVzIHN1cHBvcnRlZCAqLworZW51bSB7CisJU0laRV8xMjh4OTYgPSAwLAorCVNJWkVfMTYweDEyMCwKKwlTSVpFXzE3NngxNDQsCisJU0laRV8zMjB4MjQwLAorCVNJWkVfMzUyeDI0MCwKKwlTSVpFXzM1MngyODgsCisJU0laRV82NDB4NDgwLAorCS8qIEFkZC9yZW1vdmUvcmVhcnJhbmdlIGl0ZW1zIGJlZm9yZSB0aGlzIGxpbmUgKi8KKwlTSVpFX0xhc3RJdGVtCit9OworCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgbGl2ZXMgaW4gdXZkLT51c2VyIGZpZWxkLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IGluaXRpYWxpemVkOwkvKiBIYWQgd2UgYWxyZWFkeSBzZW50IGluaXQgc2VxdWVuY2U/ICovCisJaW50IGNhbWVyYV9tb2RlbDsJLyogV2hhdCB0eXBlIG9mIElCTSBjYW1lcmEgd2UgZ290PyAqLworCWludCBoYXNfaGRyOworfSBpYm1jYW1fdDsKKyNkZWZpbmUJSUJNQ0FNX1QodXZkKQkoKGlibWNhbV90ICopKCh1dmQpLT51c2VyX2RhdGEpKQorCitzdGF0aWMgc3RydWN0IHVzYnZpZGVvICpjYW1zOworCitzdGF0aWMgaW50IGRlYnVnOworCitzdGF0aWMgaW50IGZsYWdzOyAvKiA9IEZMQUdTX0RJU1BMQVlfSElOVFMgfCBGTEFHU19PVkVSTEFZX1NUQVRTOyAqLworCitzdGF0aWMgY29uc3QgaW50IG1pbl9jYW52YXNXaWR0aCAgPSA4Oworc3RhdGljIGNvbnN0IGludCBtaW5fY2FudmFzSGVpZ2h0ID0gNDsKKworc3RhdGljIGludCBsaWdodGluZyA9IDE7IC8qIE1lZGl1bSAqLworCisjZGVmaW5lIFNIQVJQTkVTU19NSU4JMAorI2RlZmluZSBTSEFSUE5FU1NfTUFYCTYKK3N0YXRpYyBpbnQgc2hhcnBuZXNzID0gNDsgLyogTG93IG5vaXNlLCBnb29kIGRldGFpbHMgKi8KKworI2RlZmluZSBGUkFNRVJBVEVfTUlOCTAKKyNkZWZpbmUgRlJBTUVSQVRFX01BWAk2CitzdGF0aWMgaW50IGZyYW1lcmF0ZSA9IC0xOworCitzdGF0aWMgaW50IHNpemUgPSBTSVpFXzM1MngyODg7CisKKy8qCisgKiBIZXJlIHdlIGRlZmluZSBzZXZlcmFsIGluaXRpYWxpemF0aW9uIHZhcmlhYmxlcy4gVGhleSBtYXkKKyAqIGJlIHVzZWQgdG8gYXV0b21hdGljYWxseSBzZXQgY29sb3IsIGh1ZSwgYnJpZ2h0bmVzcyBhbmQKKyAqIGNvbnRyYXN0IHRvIGRlc2lyZWQgdmFsdWVzLiBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgaW4KKyAqIGNhc2Ugb2Ygd2ViY2FtcyAod2hpY2ggaGF2ZSBubyBjb250cm9scyBhbmQgbm8gb24tc2NyZWVuCisgKiBvdXRwdXQpIGFuZCBhbHNvIHdoZW4gYSBjbGllbnQgVjRMIHNvZnR3YXJlIGlzIHVzZWQgdGhhdAorICogZG9lcyBub3QgaGF2ZSBzb21lIG9mIHRob3NlIGNvbnRyb2xzLiBJbiBhbnkgY2FzZSBpdCdzCisgKiBnb29kIHRvIGhhdmUgc3RhcnR1cCB2YWx1ZXMgYXMgb3B0aW9ucy4KKyAqCisgKiBUaGVzZSB2YWx1ZXMgYXJlIGFsbCBpbiBbMC4uMjU1XSByYW5nZS4gVGhpcyBzaW1wbGlmaWVzCisgKiBvcGVyYXRpb24uIE5vdGUgdGhhdCBhY3R1YWwgdmFsdWVzIG9mIFY0TCB2YXJpYWJsZXMgbWF5CisgKiBiZSBzY2FsZWQgdXAgKGFzIG11Y2ggYXMgPDwgOCkuIFVzZXIgY2FuIHNlZSB0aGF0IG9ubHkKKyAqIG9uIG92ZXJsYXkgb3V0cHV0LCBob3dldmVyLCBvciB0aHJvdWdoIGEgVjRMIGNsaWVudC4KKyAqLworc3RhdGljIGludCBpbml0X2JyaWdodG5lc3MgPSAxMjg7CitzdGF0aWMgaW50IGluaXRfY29udHJhc3QgPSAxOTI7CitzdGF0aWMgaW50IGluaXRfY29sb3IgPSAxMjg7CitzdGF0aWMgaW50IGluaXRfaHVlID0gMTI4Oworc3RhdGljIGludCBodWVfY29ycmVjdGlvbiA9IDEyODsKKworLyogU2V0dGluZ3MgZm9yIGNhbWVyYSBtb2RlbCAyICovCitzdGF0aWMgaW50IGluaXRfbW9kZWwyX3JnMiA9IC0xOworc3RhdGljIGludCBpbml0X21vZGVsMl9zYXQgPSAtMTsKK3N0YXRpYyBpbnQgaW5pdF9tb2RlbDJfeWIgPSAtMTsKKworLyogMDEuMDEuMDggLSBBZGRlZCBmb3IgUkNBIHZpZGVvIGluIHN1cHBvcnQgLUxPICovCisvKiBTZXR0aW5ncyBmb3IgY2FtZXJhIG1vZGVsIDMgKi8KK3N0YXRpYyBpbnQgaW5pdF9tb2RlbDNfaW5wdXQgPSAwOworCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWw6IDAtOSAoZGVmYXVsdD0wKSIpOworbW9kdWxlX3BhcmFtKGZsYWdzLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhmbGFncywgIkJpdGZpZWxkOiAwPVZJRElPQ1NZTkMsIDE9Qi9XLCAyPXNob3cgaGludHMsIDM9c2hvdyBzdGF0cywgND10ZXN0IHBhdHRlcm4sIDU9c2VwYXJhdGUgZnJhbWVzLCA2PWNsZWFuIGZyYW1lcyIpOworbW9kdWxlX3BhcmFtKGZyYW1lcmF0ZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZnJhbWVyYXRlLCAiRnJhbWVyYXRlIHNldHRpbmc6IDA9c2xvd2VzdCwgNj1mYXN0ZXN0IChkZWZhdWx0PTIpIik7Cittb2R1bGVfcGFyYW0obGlnaHRpbmcsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGxpZ2h0aW5nLCAiUGhvdG9zZW5zaXRpdml0eTogMD1icmlnaHQsIDE9bWVkaXVtIChkZWZhdWx0KSwgMj1sb3cgbGlnaHQiKTsKK21vZHVsZV9wYXJhbShzaGFycG5lc3MsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNoYXJwbmVzcywgIk1vZGVsMSBub2lzZSByZWR1Y3Rpb246IDA9c21vb3RoLCA2PXNoYXJwIChkZWZhdWx0PTQpIik7Cittb2R1bGVfcGFyYW0oc2l6ZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Moc2l6ZSwgIkltYWdlIHNpemU6IDA9MTI4eDk2IDE9MTYweDEyMCAyPTE3NngxNDQgMz0zMjB4MjQwIDQ9MzUyeDI0MCA1PTM1MngyODggNj02NDB4NDgwICAoZGVmYXVsdD01KSIpOworbW9kdWxlX3BhcmFtKGluaXRfYnJpZ2h0bmVzcywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5pdF9icmlnaHRuZXNzLCAiQnJpZ2h0bmVzcyBwcmVjb25maWd1cmF0aW9uOiAwLTI1NSAoZGVmYXVsdD0xMjgpIik7Cittb2R1bGVfcGFyYW0oaW5pdF9jb250cmFzdCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5pdF9jb250cmFzdCwgIkNvbnRyYXN0IHByZWNvbmZpZ3VyYXRpb246IDAtMjU1IChkZWZhdWx0PTE5MikiKTsKK21vZHVsZV9wYXJhbShpbml0X2NvbG9yLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbml0X2NvbG9yLCAiQ29sb3IgcHJlY29uZmlndXJhdGlvbjogMC0yNTUgKGRlZmF1bHQ9MTI4KSIpOworbW9kdWxlX3BhcmFtKGluaXRfaHVlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbml0X2h1ZSwgIkh1ZSBwcmVjb25maWd1cmF0aW9uOiAwLTI1NSAoZGVmYXVsdD0xMjgpIik7Cittb2R1bGVfcGFyYW0oaHVlX2NvcnJlY3Rpb24sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGh1ZV9jb3JyZWN0aW9uLCAiWVVWIGNvbG9yc3BhY2UgcmVndWxhdGlvbjogMC0yNTUgKGRlZmF1bHQ9MTI4KSIpOworCittb2R1bGVfcGFyYW0oaW5pdF9tb2RlbDJfcmcyLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbml0X21vZGVsMl9yZzIsICJNb2RlbDIgcHJlY29uZmlndXJhdGlvbjogMC0yNTUgKGRlZmF1bHQ9NDcpIik7Cittb2R1bGVfcGFyYW0oaW5pdF9tb2RlbDJfc2F0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbml0X21vZGVsMl9zYXQsICJNb2RlbDIgcHJlY29uZmlndXJhdGlvbjogMC0yNTUgKGRlZmF1bHQ9NTIpIik7Cittb2R1bGVfcGFyYW0oaW5pdF9tb2RlbDJfeWIsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGluaXRfbW9kZWwyX3liLCAiTW9kZWwyIHByZWNvbmZpZ3VyYXRpb246IDAtMjU1IChkZWZhdWx0PTE2MCkiKTsKKworLyogMDEuMDEuMDggLSBBZGRlZCBmb3IgUkNBIHZpZGVvIGluIHN1cHBvcnQgLUxPICovCittb2R1bGVfcGFyYW0oaW5pdF9tb2RlbDNfaW5wdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGluaXRfbW9kZWwzX2lucHV0LCAiTW9kZWwzIGlucHV0OiAwPUNDRCAxPVJDQSIpOworCitNT0RVTEVfQVVUSE9SICgiRG1pdHJpIik7CitNT0RVTEVfREVTQ1JJUFRJT04gKCJJQk0vWGlybGluayBDLWl0IFVTQiBDYW1lcmEgRHJpdmVyIGZvciBMaW51eCAoYykgMjAwMCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBTdGlsbCBteXN0ZXJpb3VzIGkyYyBjb21tYW5kcyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHVua25vd25fODggPSAweDAwODg7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgdW5rbm93bl84OSA9IDB4MDA4OTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBicmlnaHRfM3hbM10gPSB7IDB4MDAzMSwgMHgwMDMyLCAweDAwMzMgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBjb250cmFzdF8xNCA9IDB4MDAxNDsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBsaWdodF8yNyA9IDB4MDAyNzsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBzaGFycF8xMyA9IDB4MDAxMzsKKworLyogaTJjIGNvbW1hbmRzIGZvciBNb2RlbCAyIGNhbWVyYXMgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBtb2QyX2JyaWdodG5lc3MgPSAweDAwMWE7CQkvKiAkNWIgLi4gJGVlOyBkZWZhdWx0PSQ1YSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG1vZDJfc2V0X2ZyYW1lcmF0ZSA9IDB4MDAxYzsJLyogMCAoZmFzdCkuLiAkMUYgKHNsb3cpICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbW9kMl9jb2xvcl9iYWxhbmNlX3JnMiA9IDB4MDAxZTsJLyogMCAocmVkKSAuLiAkN0YgKGdyZWVuKSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG1vZDJfc2F0dXJhdGlvbiA9IDB4MDAyMDsJCS8qIDAgKGIvdykgLSAkN0YgKGZ1bGwgY29sb3IpICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbW9kMl9jb2xvcl9iYWxhbmNlX3liID0gMHgwMDIyOwkvKiAwLi4kN0YsICQ1MCBpcyBhYm91dCByaWdodCAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG1vZDJfaHVlID0gMHgwMDI0OwkJCS8qIDAuLiQ3RiwgJDcwIGlzIGFib3V0IHJpZ2h0ICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbW9kMl9zZW5zaXRpdml0eSA9IDB4MDAyODsJCS8qIDAgKG1pbikgLi4gJDFGIChtYXgpICovCisKK3N0cnVjdCBzdHJ1Y3RfaW5pdERhdGEgeworCXVuc2lnbmVkIGNoYXIgcmVxOworCXVuc2lnbmVkIHNob3J0IHZhbHVlOworCXVuc2lnbmVkIHNob3J0IGluZGV4OworfTsKKworLyoKKyAqIGlibWNhbV9zaXplX3RvX3ZpZGVvc2l6ZSgpCisgKgorICogVGhpcyBwcm9jZWR1cmUgY29udmVydHMgbW9kdWxlIG9wdGlvbiAnc2l6ZScgaW50byB0aGUgYWN0dWFsCisgKiB2aWRlb3NpemVfdCB0aGF0IGRlZmluZXMgdGhlIGltYWdlIHNpemUgaW4gcGl4ZWxzLiBXZSBuZWVkCisgKiBzaW1wbGlmaWVkICdzaXplJyBiZWNhdXNlIHVzZXIgd2FudHMgYSBzaW1wbGUgZW51bWVyYXRlZCBsaXN0CisgKiBvZiBjaG9pY2VzLCBub3QgYW4gaW5maW5pdGUgc2V0IG9mIHBvc3NpYmlsaXRpZXMuCisgKi8KK3N0YXRpYyB2aWRlb3NpemVfdCBpYm1jYW1fc2l6ZV90b192aWRlb3NpemUoaW50IHNpemUpCit7CisJdmlkZW9zaXplX3QgdnMgPSBWSURFT1NJWkVfMzUyeDI4ODsKKwlSRVNUUklDVF9UT19SQU5HRShzaXplLCAwLCAoU0laRV9MYXN0SXRlbS0xKSk7CisJc3dpdGNoIChzaXplKSB7CisJY2FzZSBTSVpFXzEyOHg5NjoKKwkJdnMgPSBWSURFT1NJWkVfMTI4eDk2OworCQlicmVhazsKKwljYXNlIFNJWkVfMTYweDEyMDoKKwkJdnMgPSBWSURFT1NJWkVfMTYweDEyMDsKKwkJYnJlYWs7CisJY2FzZSBTSVpFXzE3NngxNDQ6CisJCXZzID0gVklERU9TSVpFXzE3NngxNDQ7CisJCWJyZWFrOworCWNhc2UgU0laRV8zMjB4MjQwOgorCQl2cyA9IFZJREVPU0laRV8zMjB4MjQwOworCQlicmVhazsKKwljYXNlIFNJWkVfMzUyeDI0MDoKKwkJdnMgPSBWSURFT1NJWkVfMzUyeDI0MDsKKwkJYnJlYWs7CisJY2FzZSBTSVpFXzM1MngyODg6CisJCXZzID0gVklERU9TSVpFXzM1MngyODg7CisJCWJyZWFrOworCWNhc2UgU0laRV82NDB4NDgwOgorCQl2cyA9IFZJREVPU0laRV82NDB4NDgwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIoInNpemU9JWQuIGlzIG5vdCB2YWxpZCIsIHNpemUpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHZzOworfQorCisvKgorICogaWJtY2FtX2ZpbmRfaGVhZGVyKCkKKyAqCisgKiBMb2NhdGUgb25lIG9mIHN1cHBvcnRlZCBoZWFkZXIgbWFya2VycyBpbiB0aGUgcXVldWUuCisgKiBPbmNlIGZvdW5kLCByZW1vdmUgYWxsIHByZWNlZGluZyBieXRlcyBBTkQgdGhlIG1hcmtlciAoNCBieXRlcykKKyAqIGZyb20gdGhlIGRhdGEgcHVtcCBxdWV1ZS4gV2hhdGV2ZXIgZm9sbG93cyBtdXN0IGJlIHZpZGVvIGxpbmVzLgorICoKKyAqIEhpc3Rvcnk6CisgKiAxLzIxLzAwICBDcmVhdGVkLgorICovCitzdGF0aWMgZW51bSBQYXJzZVN0YXRlIGlibWNhbV9maW5kX2hlYWRlcihzdHJ1Y3QgdXZkICp1dmQpIC8qIEZJWE1FOiBBZGQgZnJhbWUgaGVyZSAqLworeworCXN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWU7CisJaWJtY2FtX3QgKmljYW07CisKKwlpZiAoKHV2ZC0+Y3VyZnJhbWUpIDwgMCB8fCAodXZkLT5jdXJmcmFtZSA+PSBVU0JWSURFT19OVU1GUkFNRVMpKSB7CisJCWVycigiaWJtY2FtX2ZpbmRfaGVhZGVyOiBJbGxlZ2FsIGZyYW1lICVkLiIsIHV2ZC0+Y3VyZnJhbWUpOworCQlyZXR1cm4gc2Nhbl9FbmRQYXJzZTsKKwl9CisJaWNhbSA9IElCTUNBTV9UKHV2ZCk7CisJYXNzZXJ0KGljYW0gIT0gTlVMTCk7CisJZnJhbWUgPSAmdXZkLT5mcmFtZVt1dmQtPmN1cmZyYW1lXTsKKwlpY2FtLT5oYXNfaGRyID0gMDsKKwlzd2l0Y2ggKGljYW0tPmNhbWVyYV9tb2RlbCkgeworCWNhc2UgSUJNQ0FNX01PREVMXzE6CisJeworCQljb25zdCBpbnQgbWFya2VyX2xlbiA9IDQ7CisJCXdoaWxlIChSaW5nUXVldWVfR2V0TGVuZ3RoKCZ1dmQtPmRwKSA+PSBtYXJrZXJfbGVuKSB7CisJCQlpZiAoKFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMCkgPT0gMHgwMCkgJiYKKwkJCSAgICAoUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAxKSA9PSAweEZGKSAmJgorCQkJICAgIChSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDIpID09IDB4MDApKQorCQkJeworI2lmIDAJCQkJLyogVGhpcyBjb2RlIGhlbHBzIHRvIGRldGVjdCBuZXcgZnJhbWUgbWFya2VycyAqLworCQkJCWluZm8oIkhlYWRlciBzaWc6IDAwIEZGIDAwICUwMlgiLCBSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDMpKTsKKyNlbmRpZgorCQkJCWZyYW1lLT5oZWFkZXIgPSBSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDMpOworCQkJCWlmICgoZnJhbWUtPmhlYWRlciA9PSBIRFJTSUdfTU9ERUwxXzEyOHg5NikgfHwKKwkJCQkgICAgKGZyYW1lLT5oZWFkZXIgPT0gSERSU0lHX01PREVMMV8xNzZ4MTQ0KSB8fAorCQkJCSAgICAoZnJhbWUtPmhlYWRlciA9PSBIRFJTSUdfTU9ERUwxXzM1MngyODgpKQorCQkJCXsKKyNpZiAwCisJCQkJCWluZm8oIkhlYWRlciBmb3VuZC4iKTsKKyNlbmRpZgorCQkJCQlSSU5HX1FVRVVFX0RFUVVFVUVfQllURVMoJnV2ZC0+ZHAsIG1hcmtlcl9sZW4pOworCQkJCQlpY2FtLT5oYXNfaGRyID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJLyogSWYgd2UgYXJlIHN0aWxsIGhlcmUgdGhlbiB0aGlzIGRvZXNuJ3QgbG9vayBsaWtlIGEgaGVhZGVyICovCisJCQlSSU5HX1FVRVVFX0RFUVVFVUVfQllURVMoJnV2ZC0+ZHAsIDEpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIElCTUNBTV9NT0RFTF8yOgorY2FzZSBJQk1DQU1fTU9ERUxfNDoKKwl7CisJCWludCBtYXJrZXJfbGVuID0gMDsKKwkJc3dpdGNoICh1dmQtPnZpZGVvc2l6ZSkgeworCQljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgorCQkJbWFya2VyX2xlbiA9IDEwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQltYXJrZXJfbGVuID0gMjsKKwkJCWJyZWFrOworCQl9CisJCXdoaWxlIChSaW5nUXVldWVfR2V0TGVuZ3RoKCZ1dmQtPmRwKSA+PSBtYXJrZXJfbGVuKSB7CisJCQlpZiAoKFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMCkgPT0gMHgwMCkgJiYKKwkJCSAgICAoUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAxKSA9PSAweEZGKSkKKwkJCXsKKyNpZiAwCisJCQkJaW5mbygiSGVhZGVyIGZvdW5kLiIpOworI2VuZGlmCisJCQkJUklOR19RVUVVRV9ERVFVRVVFX0JZVEVTKCZ1dmQtPmRwLCBtYXJrZXJfbGVuKTsKKwkJCQlpY2FtLT5oYXNfaGRyID0gMTsKKwkJCQlmcmFtZS0+aGVhZGVyID0gSERSU0lHX01PREVMMV8xNzZ4MTQ0OworCQkJCWJyZWFrOworCQkJfQorCQkJLyogSWYgd2UgYXJlIHN0aWxsIGhlcmUgdGhlbiB0aGlzIGRvZXNuJ3QgbG9vayBsaWtlIGEgaGVhZGVyICovCisJCQlSSU5HX1FVRVVFX0RFUVVFVUVfQllURVMoJnV2ZC0+ZHAsIDEpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIElCTUNBTV9NT0RFTF8zOgorCXsJLyoKKwkJICogSGVhZGVyczogKG9uZSBwcmVjZWRlcyBldmVyeSBmcmFtZSkuIG5jPW5vIGNvbXByZXNzaW9uLAorCQkgKiBicT1iZXN0IHF1YWxpdHkgYmY9YmVzdCBmcmFtZSByYXRlLgorCQkgKgorCQkgKiAxNzZ4MTQ0OiAwMCBGRiAwMiB7IDBBPW5jIENBPWJxIEVBPWJmIH0KKwkJICogMzIweDI0MDogMDAgRkYgMDIgeyAwOD1uYyAyOD1icSA2OD1iZiB9CisJCSAqIDY0MHg0ODA6IDAwIEZGIDAzIHsgMDg9bmMgMjg9YnEgNjg9YmYgfQorCQkgKgorCQkgKiBCeXRlcyAnMDAgRkYnIHNlZW0gdG8gaW5kaWNhdGUgaGVhZGVyLiBPdGhlciB0d28gYnl0ZXMKKwkJICogZW5jb2RlIHRoZSBmcmFtZSB0eXBlLiBUaGlzIGlzIGEgc2V0IG9mIGJpdCBmaWVsZHMgdGhhdAorCQkgKiBlbmNvZGUgaW1hZ2Ugc2l6ZSwgY29tcHJlc3Npb24gdHlwZSBldGMuIFRoZXNlIGZpZWxkcworCQkgKiBkbyBOT1QgY29udGFpbiBmcmFtZSBudW1iZXIgYmVjYXVzZSBhbGwgZnJhbWVzIGNhcnJ5CisJCSAqIHRoZSBzYW1lIGhlYWRlci4KKwkJICovCisJCWNvbnN0IGludCBtYXJrZXJfbGVuID0gNDsKKwkJd2hpbGUgKFJpbmdRdWV1ZV9HZXRMZW5ndGgoJnV2ZC0+ZHApID49IG1hcmtlcl9sZW4pIHsKKwkJCWlmICgoUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAwKSA9PSAweDAwKSAmJgorCQkJICAgIChSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDEpID09IDB4RkYpICYmCisJCQkgICAgKFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMikgIT0gMHhGRikpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBDb21iaW5lIDIgYnl0ZXMgb2YgZnJhbWUgdHlwZSBpbnRvIG9uZQorCQkJCSAqIGVhc3kgdG8gdXNlIHZhbHVlCisJCQkJICovCisJCQkJdW5zaWduZWQgbG9uZyBieXRlMywgYnl0ZTQ7CisKKwkJCQlieXRlMyA9IFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMik7CisJCQkJYnl0ZTQgPSBSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDMpOworCQkJCWZyYW1lLT5oZWFkZXIgPSAoYnl0ZTMgPDwgOCkgfCBieXRlNDsKKyNpZiAwCisJCQkJaW5mbygiSGVhZGVyIGZvdW5kLiIpOworI2VuZGlmCisJCQkJUklOR19RVUVVRV9ERVFVRVVFX0JZVEVTKCZ1dmQtPmRwLCBtYXJrZXJfbGVuKTsKKwkJCQlpY2FtLT5oYXNfaGRyID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIElmIHdlIGFyZSBzdGlsbCBoZXJlIHRoZW4gdGhpcyBkb2Vzbid0IGxvb2sgbGlrZSBhIGhlYWRlciAqLworCQkJUklOR19RVUVVRV9ERVFVRVVFX0JZVEVTKCZ1dmQtPmRwLCAxKTsKKwkJfQorCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWlmICghaWNhbS0+aGFzX2hkcikgeworCQlpZiAodXZkLT5kZWJ1ZyA+IDIpCisJCQlpbmZvKCJTa2lwcGluZyBmcmFtZSwgbm8gaGVhZGVyIik7CisJCXJldHVybiBzY2FuX0VuZFBhcnNlOworCX0KKworCS8qIEhlYWRlciBmb3VuZCAqLworCWljYW0tPmhhc19oZHIgPSAxOworCXV2ZC0+c3RhdHMuaGVhZGVyX2NvdW50Kys7CisJZnJhbWUtPnNjYW5zdGF0ZSA9IFNjYW5TdGF0ZV9MaW5lczsKKwlmcmFtZS0+Y3VybGluZSA9IDA7CisKKwlpZiAoZmxhZ3MgJiBGTEFHU19GT1JDRV9URVNUUEFUVEVSTikgeworCQl1c2J2aWRlb19UZXN0UGF0dGVybih1dmQsIDEsIDEpOworCQlyZXR1cm4gc2Nhbl9OZXh0RnJhbWU7CisJfQorCXJldHVybiBzY2FuX0NvbnRpbnVlOworfQorCisvKgorICogaWJtY2FtX3BhcnNlX2xpbmVzKCkKKyAqCisgKiBQYXJzZSBvbmUgbGluZSAoaW50ZXJsYWNlZCkgZnJvbSB0aGUgYnVmZmVyLCBwdXQKKyAqIGRlY29kZWQgUkdCIHZhbHVlIGludG8gdGhlIGN1cnJlbnQgZnJhbWUgYnVmZmVyCisgKiBhbmQgYWRkIHRoZSB3cml0dGVuIG51bWJlciBvZiBieXRlcyAoUkdCKSB0bworICogdGhlICpwY29weWxlbi4KKyAqCisgKiBIaXN0b3J5OgorICogMjEtSmFuLTIwMDAgQ3JlYXRlZC4KKyAqIDEyLU9jdC0yMDAwIFJld29ya2VkIHRvIHJlZmxlY3QgaW50ZXJsYWNlZCBuYXR1cmUgb2YgdGhlIGRhdGEuCisgKi8KK3N0YXRpYyBlbnVtIFBhcnNlU3RhdGUgaWJtY2FtX3BhcnNlX2xpbmVzKAorCXN0cnVjdCB1dmQgKnV2ZCwKKwlzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lLAorCWxvbmcgKnBjb3B5bGVuKQoreworCXVuc2lnbmVkIGNoYXIgKmY7CisJaWJtY2FtX3QgKmljYW07CisJdW5zaWduZWQgaW50IGxlbiwgc2Nhbkxlbmd0aCwgc2NhbkhlaWdodCwgb3JkZXJfdXYsIG9yZGVyX3ljOworCWludCB2NGxfbGluZXNpemU7IC8qIFY0TCBsaW5lIG9mZnNldCAqLworCWNvbnN0IGludCBodWVfY29yciAgPSAodXZkLT52cGljLmh1ZSAtIDB4ODAwMCkgPj4gMTA7CS8qIC0zMi4uKzMxICovCisJY29uc3QgaW50IGh1ZTJfY29yciA9IChodWVfY29ycmVjdGlvbiAtIDEyOCkgLyA0OwkJLyogLTMyLi4rMzEgKi8KKwljb25zdCBpbnQgY2NtID0gMTI4OyAvKiBDb2xvciBjb3JyZWN0aW9uIG1lZGlhbiAtIHNlZSBiZWxvdyAqLworCWludCB5LCB1LCB2LCBpLCBmcmFtZV9kb25lPTAsIGNvbG9yX2NvcnI7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgbGluZUJ1ZmZlcls2NDAqM107CisJdW5zaWduZWQgY29uc3QgY2hhciAqY2hyb21hTGluZSwgKmx1bWFMaW5lOworCisJYXNzZXJ0KHV2ZCAhPSBOVUxMKTsKKwlhc3NlcnQoZnJhbWUgIT0gTlVMTCk7CisJaWNhbSA9IElCTUNBTV9UKHV2ZCk7CisJYXNzZXJ0KGljYW0gIT0gTlVMTCk7CisJY29sb3JfY29yciA9ICh1dmQtPnZwaWMuY29sb3VyIC0gMHg4MDAwKSA+PiA4OyAvKiAtMTI4Li4rMTI3ID0gLWNjbS4uKyhjY20tMSkqLworCVJFU1RSSUNUX1RPX1JBTkdFKGNvbG9yX2NvcnIsIC1jY20sIGNjbSsxKTsKKworCXY0bF9saW5lc2l6ZSA9IFZJREVPU0laRV9YKGZyYW1lLT5yZXF1ZXN0KSAqIFY0TF9CWVRFU19QRVJfUElYRUw7CisKKwlpZiAoSUJNQ0FNX1QodXZkKS0+Y2FtZXJhX21vZGVsID09IElCTUNBTV9NT0RFTF80KSB7CisJCS8qIE1vZGVsIDQgZnJhbWUgbWFya2VycyBkbyBub3QgY2FycnkgaW1hZ2Ugc2l6ZSBpZGVudGlmaWNhdGlvbiAqLworCQlzd2l0Y2ggKHV2ZC0+dmlkZW9zaXplKSB7CisJCWNhc2UgVklERU9TSVpFXzEyOHg5NjoKKwkJY2FzZSBWSURFT1NJWkVfMTYweDEyMDoKKwkJY2FzZSBWSURFT1NJWkVfMTc2eDE0NDoKKwkJCXNjYW5MZW5ndGggPSBWSURFT1NJWkVfWCh1dmQtPnZpZGVvc2l6ZSk7CisJCQlzY2FuSGVpZ2h0ID0gVklERU9TSVpFX1kodXZkLT52aWRlb3NpemUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIoImlibWNhbV9wYXJzZV9saW5lczogV3JvbmcgbW9kZS4iKTsKKwkJCXJldHVybiBzY2FuX091dDsKKwkJfQorCQlvcmRlcl95YyA9IDE7CS8qIG9yZGVyX3ljOiB0cnVlPVljIGZhbHNlPWNZICgnYyc9ZWl0aGVyIFUgb3IgVikgKi8KKwkJb3JkZXJfdXYgPSAxOwkvKiBBbHdheXMgdHJ1ZSBpbiB0aGlzIGFsZ29yaXRobSAqLworCX0gZWxzZSB7CisJCXN3aXRjaCAoZnJhbWUtPmhlYWRlcikgeworCQljYXNlIEhEUlNJR19NT0RFTDFfMTI4eDk2OgorCQkJc2Nhbkxlbmd0aCA9IDEyODsKKwkJCXNjYW5IZWlnaHQgPSA5NjsKKwkJCW9yZGVyX3V2ID0gMTsJLyogVSBZIFYgWSAuLi4gKi8KKwkJCWJyZWFrOworCQljYXNlIEhEUlNJR19NT0RFTDFfMTc2eDE0NDoKKwkJCXNjYW5MZW5ndGggPSAxNzY7CisJCQlzY2FuSGVpZ2h0ID0gMTQ0OworCQkJb3JkZXJfdXYgPSAxOwkvKiBVIFkgViBZIC4uLiAqLworCQkJYnJlYWs7CisJCWNhc2UgSERSU0lHX01PREVMMV8zNTJ4Mjg4OgorCQkJc2Nhbkxlbmd0aCA9IDM1MjsKKwkJCXNjYW5IZWlnaHQgPSAyODg7CisJCQlvcmRlcl91diA9IDA7CS8qIFkgViBZIFYgLi4uICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVycigiVW5rbm93biBoZWFkZXIgc2lnbmF0dXJlIDAwIEZGIDAwICUwMmxYIiwgZnJhbWUtPmhlYWRlcik7CisJCQlyZXR1cm4gc2Nhbl9OZXh0RnJhbWU7CisJCX0KKwkJLyogb3JkZXJfeWM6IHRydWU9WWMgZmFsc2U9Y1kgKCdjJz1laXRoZXIgVSBvciBWKSAqLworCQlvcmRlcl95YyA9IChJQk1DQU1fVCh1dmQpLT5jYW1lcmFfbW9kZWwgPT0gSUJNQ0FNX01PREVMXzIpOworCX0KKworCWxlbiA9IHNjYW5MZW5ndGggKiAzOworCWFzc2VydChsZW4gPD0gc2l6ZW9mKGxpbmVCdWZmZXIpKTsKKworCS8qCisJICogTGluZXMgYXJlIG9yZ2FuaXplZCB0aGlzIHdheToKKwkgKgorCSAqIEk0MjA6CisJICogfn5+fgorCSAqIDxzY2FuTGVuZ3RoLT4KKwkgKiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCSAqIHwtLS0tLVktLS0tLXwtLS1VVlVWVVYuLi5VVlVWLS0tLS18IFwKKwkgKiB8LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgXAorCSAqIHw8LS0gMTc2IC0tPnw8LS0tLS0tIDE3NioyIC0tLS0tLT58ICBUb3RhbCA3Mi4gbGluZXMgKGludGVybGFjZWQpCisJICogfC4uLgkgICAuLi4gfCAgICAgICAgLi4uICAgICAgICAgIHwgIC8KKwkgKiB8PC0tIDM1MiAtLT58PC0tLS0tLSAzNTIqMiAtLS0tLS0+fCAgVG90YWwgMTQ0LiBsaW5lcyAoaW50ZXJsYWNlZCkKKwkgKiB8X19fX19fX19fX198X19fX19fX19fX19fX19fX19fX19ffCAvCisJICogIFwgICAgICAgICAgIFwKKwkgKiAgIGx1bWFMaW5lICAgIGNocm9tYUxpbmUKKwkgKi8KKworCS8qIE1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBkYXRhIGZvciB0aGUgZW50aXJlIGxpbmUgKi8KKwlpZiAoUmluZ1F1ZXVlX0dldExlbmd0aCgmdXZkLT5kcCkgPCBsZW4pCisJCXJldHVybiBzY2FuX091dDsKKworCS8qIFN1Y2sgb25lIGxpbmUgb3V0IG9mIHRoZSByaW5nIHF1ZXVlICovCisJUmluZ1F1ZXVlX0RlcXVldWUoJnV2ZC0+ZHAsIGxpbmVCdWZmZXIsIGxlbik7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGF0IG91ciB3cml0aW5nIGludG8gb3V0cHV0IGJ1ZmZlcgorCSAqIHdpbGwgbm90IGV4Y2VlZCB0aGUgYnVmZmVyLiBNaW5kIHRoYXQgd2UgbWF5IHdyaXRlCisJICogbm90IGludG8gY3VycmVudCBvdXRwdXQgc2NhbmxpbmUgYnV0IGluIHNldmVyYWwgYWZ0ZXIKKwkgKiBpdCBhcyB3ZWxsIChpZiB3ZSBlbmxhcmdlIGltYWdlIHZlcnRpY2FsbHkuKQorCSAqLworCWlmICgoZnJhbWUtPmN1cmxpbmUgKyAyKSA+PSBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkpCisJCXJldHVybiBzY2FuX05leHRGcmFtZTsKKworCS8qCisJICogTm93IHdlIGFyZSBzdXJlIHRoYXQgZW50aXJlIGxpbmUgKHJlcHJlc2VudGluZyBhbGwgJ3NjYW5MZW5ndGgnCisJICogcGl4ZWxzIGZyb20gdGhlIGNhbWVyYSkgaXMgYXZhaWxhYmxlIGluIHRoZSBidWZmZXIuIFdlCisJICogc3RhcnQgY29weWluZyB0aGUgbGluZSBsZWZ0LWFsaWduZWQgdG8gdGhlIFY0TCBidWZmZXIuCisJICogSWYgdGhlIGNhbWVyYSBsaW5lIGlzIHNob3J0ZXIgdGhlbiB3ZSBzaG91bGQgcGFkIHRoZSBWNEwKKwkgKiBidWZmZXIgd2l0aCBzb21ldGhpbmcgKGJsYWNrKSB0byBjb21wbGV0ZSB0aGUgbGluZS4KKwkgKi8KKwlhc3NlcnQoZnJhbWUtPmRhdGEgIT0gTlVMTCk7CisJZiA9IGZyYW1lLT5kYXRhICsgKHY0bF9saW5lc2l6ZSAqIGZyYW1lLT5jdXJsaW5lKTsKKworCS8qCisJICogVG8gb2J0YWluIGNocm9taW5hbmNlIGRhdGEgZnJvbSB0aGUgJ2Nocm9tYUxpbmUnIHVzZSB0aGlzOgorCSAqICAgdiA9IGNocm9tYUxpbmVbMF07IC8vIDAtMTpbMF0sIDItMzpbNF0sIDQtNTpbOF0uLi4KKwkgKiAgIHUgPSBjaHJvbWFMaW5lWzJdOyAvLyAwLTE6WzJdLCAyLTM6WzZdLCA0LTU6WzEwXS4uLgorCSAqCisJICogSW5kaWNlcyBtdXN0IGJlIGNhbGN1bGF0ZWQgdGhpcyB3YXk6CisJICogdl9pbmRleCA9IChpID4+IDEpIDw8IDI7CisJICogdV9pbmRleCA9IChpID4+IDEpIDw8IDIgKyAyOworCSAqCisJICogd2hlcmUgJ2knIGlzIHRoZSBjb2x1bW4gbnVtYmVyIFswLi5WSURFT1NJWkVfWChmcmFtZS0+cmVxdWVzdCktMV0KKwkgKi8KKwlsdW1hTGluZSA9IGxpbmVCdWZmZXI7CisJY2hyb21hTGluZSA9IGxpbmVCdWZmZXIgKyBzY2FuTGVuZ3RoOworCWZvciAoaSA9IDA7IGkgPCBWSURFT1NJWkVfWChmcmFtZS0+cmVxdWVzdCk7IGkrKykKKwl7CisJCXVuc2lnbmVkIGNoYXIgcnYsIGd2LCBidjsJLyogUkdCIGNvbXBvbmVudHMgKi8KKworCQkvKiBDaGVjayBmb3IgdmFyaW91cyB2aXN1YWwgZGVidWdnaW5nIGhpbnRzIChjb2xvcml6ZWQgcGl4ZWxzKSAqLworCQlpZiAoKGZsYWdzICYgRkxBR1NfRElTUExBWV9ISU5UUykgJiYgKGljYW0tPmhhc19oZHIpKSB7CisJCQkvKgorCQkJICogVGhpcyBpcyBiYWQgYW5kIHNob3VsZCBub3QgaGFwcGVuLiBUaGlzIG1lYW5zIHRoYXQKKwkJCSAqIHdlIHNvbWVob3cgb3ZlcnNob290IHRoZSBsaW5lIGFuZCBlbmNvdW50ZXJlZCBuZXcKKwkJCSAqIGZyYW1lISBPYnZpb3VzbHkgb3VyIGNhbWVyYS9WNEwgZnJhbWUgc2l6ZSBpcyBvdXQKKwkJCSAqIG9mIHdoYWNrLiBUaGlzIGN5YW4gZG90IHdpbGwgaGVscCB5b3UgdG8gZmlndXJlCisJCQkgKiBvdXQgd2hlcmUgZXhhY3RseSB0aGUgbmV3IGZyYW1lIGFycml2ZWQuCisJCQkgKi8KKwkJCWlmIChpY2FtLT5oYXNfaGRyID09IDEpIHsKKwkJCQlidiA9IDA7IC8qIFllbGxvdyBtYXJrZXIgKi8KKwkJCQlndiA9IDB4RkY7CisJCQkJcnYgPSAweEZGOworCQkJfSBlbHNlIHsKKwkJCQlidiA9IDB4RkY7IC8qIEN5YW4gbWFya2VyICovCisJCQkJZ3YgPSAweEZGOworCQkJCXJ2ID0gMDsKKwkJCX0KKwkJCWljYW0tPmhhc19oZHIgPSAwOworCQkJZ290byBtYWtlX3BpeGVsOworCQl9CisKKwkJLyoKKwkJICogQ2hlY2sgaWYgd2UgYXJlIHN0aWxsIGluIHJhbmdlLiBXZSBtYXkgYmUgb3V0IG9mIHJhbmdlIGlmIG91cgorCQkgKiBWNEwgY2FudmFzIGlzIHdpZGVyIG9yIHRhbGxlciB0aGFuIHRoZSBjYW1lcmEgIm5hdGl2ZSIgaW1hZ2UuCisJCSAqIFRoZW4gd2UgcXVpY2tseSBmaWxsIHRoZSByZW1haW5kZXIgb2YgdGhlIGxpbmUgd2l0aCB6ZXJvcyB0bworCQkgKiBtYWtlIGJsYWNrIGNvbG9yIGFuZCBxdWl0IHRoZSBob3Jpem9udGFsIHNjYW5uaW5nIGxvb3AuCisJCSAqLworCQlpZiAoKChmcmFtZS0+Y3VybGluZSArIDIpID49IHNjYW5IZWlnaHQpIHx8IChpID49IHNjYW5MZW5ndGgpKSB7CisJCQljb25zdCBpbnQgaiA9IGkgKiBWNExfQllURVNfUEVSX1BJWEVMOworI2lmIFVTRVNfSUJNQ0FNX1BVVFBJWEVMCisJCQkvKiBSZWZyZXNoICdmJyBiZWNhdXNlIHdlIGRvbid0IHVzZSBpdCBtdWNoIHdpdGggUFVUUElYRUwgKi8KKwkJCWYgPSBmcmFtZS0+ZGF0YSArICh2NGxfbGluZXNpemUgKiBmcmFtZS0+Y3VybGluZSkgKyBqOworI2VuZGlmCisJCQltZW1zZXQoZiwgMCwgdjRsX2xpbmVzaXplIC0gaik7CisJCQlicmVhazsKKwkJfQorCisJCXkgPSBsdW1hTGluZVtpXTsKKwkJaWYgKGZsYWdzICYgRkxBR1NfTU9OT0NIUk9NRSkgLyogVXNlIG1vbm9jaHJvbWUgZm9yIGRlYnVnZ2luZyAqLworCQkJcnYgPSBndiA9IGJ2ID0geTsKKwkJZWxzZSB7CisJCQlpbnQgb2ZmXzAsIG9mZl8yOworCisJCQlvZmZfMCA9IChpID4+IDEpIDw8IDI7CisJCQlvZmZfMiA9IG9mZl8wICsgMjsKKworCQkJaWYgKG9yZGVyX3ljKSB7CisJCQkJb2ZmXzArKzsKKwkJCQlvZmZfMisrOworCQkJfQorCQkJaWYgKCFvcmRlcl91dikgeworCQkJCW9mZl8wICs9IDI7CisJCQkJb2ZmXzIgLT0gMjsKKwkJCX0KKwkJCXUgPSBjaHJvbWFMaW5lW29mZl8wXSArIGh1ZV9jb3JyOworCQkJdiA9IGNocm9tYUxpbmVbb2ZmXzJdICsgaHVlMl9jb3JyOworCisJCQkvKiBBcHBseSBjb2xvciBjb3JyZWN0aW9uICovCisJCQlpZiAoY29sb3JfY29yciAhPSAwKSB7CisJCQkJLyogTWFnbmlmeSB1cCB0byAyIHRpbWVzLCByZWR1Y2UgZG93biB0byB6ZXJvIHNhdHVyYXRpb24gKi8KKwkJCQl1ID0gMTI4ICsgKChjY20gKyBjb2xvcl9jb3JyKSAqICh1IC0gMTI4KSkgLyBjY207CisJCQkJdiA9IDEyOCArICgoY2NtICsgY29sb3JfY29ycikgKiAodiAtIDEyOCkpIC8gY2NtOworCQkJfQorCQkJWVVWX1RPX1JHQl9CWV9USEVfQk9PSyh5LCB1LCB2LCBydiwgZ3YsIGJ2KTsKKwkJfQorCisJbWFrZV9waXhlbDoKKwkJLyoKKwkJICogVGhlIHB1cnBvc2Ugb2YgY3JlYXRpbmcgdGhlIHBpeGVsIGhlcmUsIGluIG9uZSwKKwkJICogZGVkaWNhdGVkIHBsYWNlIGlzIHRoYXQgd2UgbWF5IG5lZWQgdG8gbWFrZSB0aGUKKwkJICogcGl4ZWwgd2lkZXIgYW5kIHRhbGxlciB0aGFuIGl0IGFjdHVhbGx5IGlzLiBUaGlzCisJCSAqIG1heSBiZSB1c2VkIGlmIGNhbWVyYSBnZW5lcmF0ZXMgc21hbGwgZnJhbWVzIGZvcgorCQkgKiBzYWtlIG9mIGZyYW1lIHJhdGUgKG9yIGFueSBvdGhlciByZWFzb24uKQorCQkgKgorCQkgKiBUaGUgb3V0cHV0IGRhdGEgY29uc2lzdHMgb2YgQiwgRywgUiBieXRlcworCQkgKiAoaW4gdGhpcyBvcmRlcikuCisJCSAqLworI2lmIFVTRVNfSUJNQ0FNX1BVVFBJWEVMCisJCVJHQjI0X1BVVFBJWEVMKGZyYW1lLCBpLCBmcmFtZS0+Y3VybGluZSwgcnYsIGd2LCBidik7CisjZWxzZQorCQkqZisrID0gYnY7CisJCSpmKysgPSBndjsKKwkJKmYrKyA9IHJ2OworI2VuZGlmCisJCS8qCisJCSAqIFR5cGljYWxseSB3ZSBkbyBub3QgZGVjaWRlIHdpdGhpbiBhIGxlZ2l0aW1hdGUgZnJhbWUKKwkJICogdGhhdCB3ZSB3YW50IHRvIGVuZCB0aGUgZnJhbWUuIEhvd2V2ZXIgZGVidWdnaW5nIGNvZGUKKwkJICogbWF5IGRldGVjdCBtYXJrZXIgb2YgbmV3IGZyYW1lIHdpdGhpbiB0aGUgZGF0YS4gVGhlbgorCQkgKiB0aGlzIGNvbmRpdGlvbiBhY3RpdmF0ZXMuIFRoZSAnZGF0YScgcG9pbnRlciBpcyBhbHJlYWR5CisJCSAqIHBvaW50aW5nIGF0IHRoZSBuZXcgbWFya2VyLCBzbyB3ZSdkIGJldHRlciBsZWF2ZSBpdCBhcyBpcy4KKwkJICovCisJCWlmIChmcmFtZV9kb25lKQorCQkJYnJlYWs7CS8qIEVuZCBzY2FubmluZyBvZiBsaW5lcyAqLworCX0KKwkvKgorCSAqIEFjY291bnQgZm9yIG51bWJlciBvZiBieXRlcyB0aGF0IHdlIHdyb3RlIGludG8gb3V0cHV0IFY0TCBmcmFtZS4KKwkgKiBXZSBkbyBpdCBoZXJlLCBhZnRlciB3ZSBhcmUgZG9uZSB3aXRoIHRoZSBzY2FubGluZSwgYmVjYXVzZSB3ZQorCSAqIG1heSBmaWxsIG1vcmUgdGhhbiBvbmUgb3V0cHV0IHNjYW5saW5lIGlmIHdlIGRvIHZlcnRpY2FsCisJICogZW5sYXJnZW1lbnQuCisJICovCisJZnJhbWUtPmN1cmxpbmUgKz0gMjsKKwlpZiAocGNvcHlsZW4gIT0gTlVMTCkKKwkJKnBjb3B5bGVuICs9IDIgKiB2NGxfbGluZXNpemU7CisJZnJhbWUtPmRlaW50ZXJsYWNlID0gRGVpbnRlcmxhY2VfRmlsbE9kZExpbmVzOworCisJaWYgKGZyYW1lX2RvbmUgfHwgKGZyYW1lLT5jdXJsaW5lID49IFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KSkpCisJCXJldHVybiBzY2FuX05leHRGcmFtZTsKKwllbHNlCisJCXJldHVybiBzY2FuX0NvbnRpbnVlOworfQorCisvKgorICogaWJtY2FtX21vZGVsMl8zMjB4MjQwX3BhcnNlX2xpbmVzKCkKKyAqCisgKiBUaGlzIHByb2NlZHVyZSBkZWFscyB3aXRoIGEgd2VpcmQgUkdCIGZvcm1hdCB0aGF0IGlzIHByb2R1Y2VkIGJ5IElCTQorICogY2FtZXJhIG1vZGVsIDIgaW4gbW9kZXMgMzIweDI0MCBhbmQgYWJvdmU7ICd4JyBiZWxvdyBpcyAxNTkgb3IgMTc1LAorICogZGVwZW5kaW5nIG9uIGhvcml6b250YWwgc2l6ZSBvZiB0aGUgcGljdHVyZToKKyAqCisgKiA8LS0tIDE2MCBvciAxNzYgcGFpcnMgb2YgUkEsUkIgYnl0ZXMgLS0tLS0+CisgKiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qIFwKKyAqIHwgUkEwIHwgUkIwIHwgUkExIHwgUkIxIHwgLi4uIHwgUkF4IHwgUkJ4IHwgIFwgICBUaGlzIGlzIHBhaXIgb2YgaG9yaXpvbnRhbCBsaW5lcywKKyAqIHwtLS0tLSstLS0tLSstLS0tLSstLS0tLSsgLi4uICstLS0tLSstLS0tLXwgICAqLSBvciBvbmUgaW50ZXJsYWNlZCBsaW5lLCB0b3RhbAorICogfCBCMCAgfCBHMCAgfCBCMSAgfCBHMSAgfCAuLi4gfCBCeCAgfCBHeCAgfCAgLyAgIDEyMCBvciAxNDQgc3VjaCBwYWlycyB3aGljaCB5aWVsZAorICogfD09PT09Kz09PT09Kz09PT09Kz09PT09KyAuLi4gKz09PT09Kz09PT09fCAvICAgIDI0MCBvciAyODggbGluZXMgYWZ0ZXIgZGVpbnRlcmxhY2luZy4KKyAqCisgKiBFYWNoIGdyb3VwIG9mIEZPVVIgYnl0ZXMgKFJBaSwgUkJpLCBCaSwgR2kpIHdoZXJlIGk9MC4uZnJhbWVfd2lkdGgvMi0xCisgKiBkZWZpbmVzIE9ORSBwaXhlbC4gVGhlcmVmb3JlIHRoaXMgZm9ybWF0IHlpZWxkcyAxNzZ4MTQ0ICJkZWNvZGVkIgorICogcmVzb2x1dGlvbiBhdCBiZXN0LiBJIGRvIG5vdCBrbm93IHdoeSBjYW1lcmEgc2VuZHMgc3VjaCBmb3JtYXQgLSB0aGUKKyAqIHByZXZpb3VzIG1vZGVsICgxKSBqdXN0IHVzZWQgaW50ZXJsYWNlZCBJNDIwIGFuZCBldmVyeW9uZSB3YXMgaGFwcHkuCisgKgorICogSSBkbyBub3Qga25vdyB3aGF0IGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gUkFpIGFuZCBSQmkgYnl0ZXMuIEJvdGgKKyAqIHNlZW1pbmdseSByZXByZXNlbnQgUiBjb21wb25lbnQsIGJ1dCBzbGlnaHRseSB2YXJ5IGluIHZhbHVlIChzbyB0aGF0CisgKiB0aGUgcGljdHVyZSBsb29rcyBhIGJpdCBjb2xvcmVkIGlmIG9uZSBvciBhbm90aGVyIGlzIHVzZWQpLiBJIHVzZQorICogdGhlbSBib3RoIGFzIFIgY29tcG9uZW50IGluIGF0dGVtcHQgdG8gYXQgbGVhc3QgcGFydGlhbGx5IHJlY292ZXIgdGhlCisgKiBsb3N0IHJlc29sdXRpb24uCisgKi8KK3N0YXRpYyBlbnVtIFBhcnNlU3RhdGUgaWJtY2FtX21vZGVsMl8zMjB4MjQwX3BhcnNlX2xpbmVzKAorCXN0cnVjdCB1dmQgKnV2ZCwKKwlzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lLAorCWxvbmcgKnBjb3B5bGVuKQoreworCXVuc2lnbmVkIGNoYXIgKmYsICpsYSwgKmxiOworCXVuc2lnbmVkIGludCBsZW47CisJaW50IHY0bF9saW5lc2l6ZTsgLyogVjRMIGxpbmUgb2Zmc2V0ICovCisJaW50IGksIGosIGZyYW1lX2RvbmU9MCwgY29sb3JfY29ycjsKKwlpbnQgc2Nhbkxlbmd0aCwgc2NhbkhlaWdodDsKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBsaW5lQnVmZmVyWzM1MioyXTsKKworCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKKwljYXNlIFZJREVPU0laRV8zMjB4MjQwOgorCWNhc2UgVklERU9TSVpFXzM1MngyNDA6CisJY2FzZSBWSURFT1NJWkVfMzUyeDI4ODoKKwkJc2Nhbkxlbmd0aCA9IFZJREVPU0laRV9YKHV2ZC0+dmlkZW9zaXplKTsKKwkJc2NhbkhlaWdodCA9IFZJREVPU0laRV9ZKHV2ZC0+dmlkZW9zaXplKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyKCJpYm1jYW1fbW9kZWwyXzMyMHgyNDBfcGFyc2VfbGluZXM6IFdyb25nIG1vZGUuIik7CisJCXJldHVybiBzY2FuX091dDsKKwl9CisKKwljb2xvcl9jb3JyID0gKHV2ZC0+dnBpYy5jb2xvdXIpID4+IDg7IC8qIDAuLisyNTUgKi8KKwl2NGxfbGluZXNpemUgPSBWSURFT1NJWkVfWChmcmFtZS0+cmVxdWVzdCkgKiBWNExfQllURVNfUEVSX1BJWEVMOworCisJbGVuID0gc2Nhbkxlbmd0aCAqIDI7IC8qIFNlZSBleHBsYW5hdGlvbiBhYm92ZSAqLworCWFzc2VydChsZW4gPD0gc2l6ZW9mKGxpbmVCdWZmZXIpKTsKKworCS8qIE1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBkYXRhIGZvciB0aGUgZW50aXJlIGxpbmUgKi8KKwlpZiAoUmluZ1F1ZXVlX0dldExlbmd0aCgmdXZkLT5kcCkgPCBsZW4pCisJCXJldHVybiBzY2FuX091dDsKKworCS8qIFN1Y2sgb25lIGxpbmUgb3V0IG9mIHRoZSByaW5nIHF1ZXVlICovCisJUmluZ1F1ZXVlX0RlcXVldWUoJnV2ZC0+ZHAsIGxpbmVCdWZmZXIsIGxlbik7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGF0IG91ciB3cml0aW5nIGludG8gb3V0cHV0IGJ1ZmZlcgorCSAqIHdpbGwgbm90IGV4Y2VlZCB0aGUgYnVmZmVyLiBNaW5kIHRoYXQgd2UgbWF5IHdyaXRlCisJICogbm90IGludG8gY3VycmVudCBvdXRwdXQgc2NhbmxpbmUgYnV0IGluIHNldmVyYWwgYWZ0ZXIKKwkgKiBpdCBhcyB3ZWxsIChpZiB3ZSBlbmxhcmdlIGltYWdlIHZlcnRpY2FsbHkuKQorCSAqLworCWlmICgoZnJhbWUtPmN1cmxpbmUgKyAyKSA+PSBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkpCisJCXJldHVybiBzY2FuX05leHRGcmFtZTsKKworCWxhID0gbGluZUJ1ZmZlcjsKKwlsYiA9IGxpbmVCdWZmZXIgKyBzY2FuTGVuZ3RoOworCisJLyoKKwkgKiBOb3cgd2UgYXJlIHN1cmUgdGhhdCBlbnRpcmUgbGluZSAocmVwcmVzZW50aW5nIGFsbAorCSAqICAgICAgICAgVklERU9TSVpFX1goZnJhbWUtPnJlcXVlc3QpCisJICogcGl4ZWxzIGZyb20gdGhlIGNhbWVyYSkgaXMgYXZhaWxhYmxlIGluIHRoZSBzY3JhdGNoIGJ1ZmZlci4gV2UKKwkgKiBzdGFydCBjb3B5aW5nIHRoZSBsaW5lIGxlZnQtYWxpZ25lZCB0byB0aGUgVjRMIGJ1ZmZlciAod2hpY2gKKwkgKiBtaWdodCBiZSBsYXJnZXIgLSBub3Qgc21hbGxlciwgaG9wZWZ1bGx5KS4gSWYgdGhlIGNhbWVyYQorCSAqIGxpbmUgaXMgc2hvcnRlciB0aGVuIHdlIHNob3VsZCBwYWQgdGhlIFY0TCBidWZmZXIgd2l0aCBzb21ldGhpbmcKKwkgKiAoYmxhY2sgaW4gdGhpcyBjYXNlKSB0byBjb21wbGV0ZSB0aGUgbGluZS4KKwkgKi8KKwlmID0gZnJhbWUtPmRhdGEgKyAodjRsX2xpbmVzaXplICogZnJhbWUtPmN1cmxpbmUpOworCisJLyogRmlsbCB0aGUgMi1saW5lIHN0cmlwICovCisJZm9yIChpID0gMDsgaSA8IFZJREVPU0laRV9YKGZyYW1lLT5yZXF1ZXN0KTsgaSsrKSB7CisJCWludCB5LCBydiwgZ3YsIGJ2OwkvKiBSR0IgY29tcG9uZW50cyAqLworCisJCWogPSBpICYgKH4xKTsKKworCQkvKiBDaGVjayBmb3IgdmFyaW91cyB2aXN1YWwgZGVidWdnaW5nIGhpbnRzIChjb2xvcml6ZWQgcGl4ZWxzKSAqLworCQlpZiAoKGZsYWdzICYgRkxBR1NfRElTUExBWV9ISU5UUykgJiYgKElCTUNBTV9UKHV2ZCktPmhhc19oZHIpKSB7CisJCQlpZiAoSUJNQ0FNX1QodXZkKS0+aGFzX2hkciA9PSAxKSB7CisJCQkJYnYgPSAwOyAvKiBZZWxsb3cgbWFya2VyICovCisJCQkJZ3YgPSAweEZGOworCQkJCXJ2ID0gMHhGRjsKKwkJCX0gZWxzZSB7CisJCQkJYnYgPSAweEZGOyAvKiBDeWFuIG1hcmtlciAqLworCQkJCWd2ID0gMHhGRjsKKwkJCQlydiA9IDA7CisJCQl9CisJCQlJQk1DQU1fVCh1dmQpLT5oYXNfaGRyID0gMDsKKwkJCWdvdG8gbWFrZV9waXhlbDsKKwkJfQorCisJCS8qCisJCSAqIENoZWNrIGlmIHdlIGFyZSBzdGlsbCBpbiByYW5nZS4gV2UgbWF5IGJlIG91dCBvZiByYW5nZSBpZiBvdXIKKwkJICogVjRMIGNhbnZhcyBpcyB3aWRlciBvciB0YWxsZXIgdGhhbiB0aGUgY2FtZXJhICJuYXRpdmUiIGltYWdlLgorCQkgKiBUaGVuIHdlIHF1aWNrbHkgZmlsbCB0aGUgcmVtYWluZGVyIG9mIHRoZSBsaW5lIHdpdGggemVyb3MgdG8KKwkJICogbWFrZSBibGFjayBjb2xvciBhbmQgcXVpdCB0aGUgaG9yaXpvbnRhbCBzY2FubmluZyBsb29wLgorCQkgKi8KKwkJaWYgKCgoZnJhbWUtPmN1cmxpbmUgKyAyKSA+PSBzY2FuSGVpZ2h0KSB8fCAoaSA+PSBzY2FuTGVuZ3RoKSkgeworCQkJY29uc3QgaW50IGogPSBpICogVjRMX0JZVEVTX1BFUl9QSVhFTDsKKyNpZiBVU0VTX0lCTUNBTV9QVVRQSVhFTAorCQkJLyogUmVmcmVzaCAnZicgYmVjYXVzZSB3ZSBkb24ndCB1c2UgaXQgbXVjaCB3aXRoIFBVVFBJWEVMICovCisJCQlmID0gZnJhbWUtPmRhdGEgKyAodjRsX2xpbmVzaXplICogZnJhbWUtPmN1cmxpbmUpICsgajsKKyNlbmRpZgorCQkJbWVtc2V0KGYsIDAsIHY0bF9saW5lc2l6ZSAtIGopOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBIZXJlIEkgdXNlIFJBIGFuZCBSQiBjb21wb25lbnRzLCBvbmUgcGVyIHBoeXNpY2FsIHBpeGVsLgorCQkgKiBUaGlzIGNhdXNlcyBmaW5lIHZlcnRpY2FsIGdyaWQgb24gdGhlIHBpY3R1cmUgYnV0IG1heSBpbXByb3ZlCisJCSAqIGhvcml6b250YWwgcmVzb2x1dGlvbi4gSWYgeW91IHByZWZlciByZXBsaWNhdGluZywgdXNlIHRoaXM6CisJCSAqICAgcnYgPSBsYVtqICsgMF07ICAgLi4uIG9yIC4uLiBydiA9IGxhW2ogKyAxXTsKKwkJICogdGhlbiB0aGUgcGl4ZWwgd2lsbCBiZSByZXBsaWNhdGVkLgorCQkgKi8KKwkJcnYgPSBsYVtpXTsKKwkJZ3YgPSBsYltqICsgMV07CisJCWJ2ID0gbGJbaiArIDBdOworCisJCXkgPSAocnYgKyBndiArIGJ2KSAvIDM7IC8qIEJyaWdodG5lc3MgKGJhZGx5IGNhbGN1bGF0ZWQpICovCisKKwkJaWYgKGZsYWdzICYgRkxBR1NfTU9OT0NIUk9NRSkgLyogVXNlIG1vbm9jaHJvbWUgZm9yIGRlYnVnZ2luZyAqLworCQkJcnYgPSBndiA9IGJ2ID0geTsKKwkJZWxzZSBpZiAoY29sb3JfY29yciAhPSAxMjgpIHsKKworCQkJLyogQ2FsY3VsYXRlIGRpZmZlcmVuY2UgYmV0d2VlbiBjb2xvciBhbmQgYnJpZ2h0bmVzcyAqLworCQkJcnYgLT0geTsKKwkJCWd2IC09IHk7CisJCQlidiAtPSB5OworCisJCQkvKiBTY2FsZSBkaWZmZXJlbmNlcyAqLworCQkJcnYgPSAocnYgKiBjb2xvcl9jb3JyKSAvIDEyODsKKwkJCWd2ID0gKGd2ICogY29sb3JfY29ycikgLyAxMjg7CisJCQlidiA9IChidiAqIGNvbG9yX2NvcnIpIC8gMTI4OworCisJCQkvKiBSZWFwcGx5IGJyaWdodG5lc3MgKi8KKwkJCXJ2ICs9IHk7CisJCQlndiArPSB5OworCQkJYnYgKz0geTsKKworCQkJLyogV2F0Y2ggZm9yIG92ZXJmbG93cyAqLworCQkJUkVTVFJJQ1RfVE9fUkFOR0UocnYsIDAsIDI1NSk7CisJCQlSRVNUUklDVF9UT19SQU5HRShndiwgMCwgMjU1KTsKKwkJCVJFU1RSSUNUX1RPX1JBTkdFKGJ2LCAwLCAyNTUpOworCQl9CisKKwltYWtlX3BpeGVsOgorCQlSR0IyNF9QVVRQSVhFTChmcmFtZSwgaSwgZnJhbWUtPmN1cmxpbmUsIHJ2LCBndiwgYnYpOworCX0KKwkvKgorCSAqIEFjY291bnQgZm9yIG51bWJlciBvZiBieXRlcyB0aGF0IHdlIHdyb3RlIGludG8gb3V0cHV0IFY0TCBmcmFtZS4KKwkgKiBXZSBkbyBpdCBoZXJlLCBhZnRlciB3ZSBhcmUgZG9uZSB3aXRoIHRoZSBzY2FubGluZSwgYmVjYXVzZSB3ZQorCSAqIG1heSBmaWxsIG1vcmUgdGhhbiBvbmUgb3V0cHV0IHNjYW5saW5lIGlmIHdlIGRvIHZlcnRpY2FsCisJICogZW5sYXJnZW1lbnQuCisJICovCisJZnJhbWUtPmN1cmxpbmUgKz0gMjsKKwkqcGNvcHlsZW4gKz0gdjRsX2xpbmVzaXplICogMjsKKwlmcmFtZS0+ZGVpbnRlcmxhY2UgPSBEZWludGVybGFjZV9GaWxsT2RkTGluZXM7CisKKwlpZiAoZnJhbWVfZG9uZSB8fCAoZnJhbWUtPmN1cmxpbmUgPj0gVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpKSkKKwkJcmV0dXJuIHNjYW5fTmV4dEZyYW1lOworCWVsc2UKKwkJcmV0dXJuIHNjYW5fQ29udGludWU7Cit9CisKK3N0YXRpYyBlbnVtIFBhcnNlU3RhdGUgaWJtY2FtX21vZGVsM19wYXJzZV9saW5lcygKKwlzdHJ1Y3QgdXZkICp1dmQsCisJc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZSwKKwlsb25nICpwY29weWxlbikKK3sKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbG9yOworCXVuc2lnbmVkIGludCBsZW47CisJaW50IHY0bF9saW5lc2l6ZTsgLyogVjRMIGxpbmUgb2Zmc2V0ICovCisJY29uc3QgaW50IGh1ZV9jb3JyICA9ICh1dmQtPnZwaWMuaHVlIC0gMHg4MDAwKSA+PiAxMDsJLyogLTMyLi4rMzEgKi8KKwljb25zdCBpbnQgaHVlMl9jb3JyID0gKGh1ZV9jb3JyZWN0aW9uIC0gMTI4KSAvIDQ7CQkvKiAtMzIuLiszMSAqLworCWNvbnN0IGludCBjY20gPSAxMjg7IC8qIENvbG9yIGNvcnJlY3Rpb24gbWVkaWFuIC0gc2VlIGJlbG93ICovCisJaW50IGksIHUsIHYsIHJ3LCBkYXRhX3c9MCwgZGF0YV9oPTAsIGNvbG9yX2NvcnI7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgbGluZUJ1ZmZlcls2NDAqM107CisKKwljb2xvcl9jb3JyID0gKHV2ZC0+dnBpYy5jb2xvdXIgLSAweDgwMDApID4+IDg7IC8qIC0xMjguLisxMjcgPSAtY2NtLi4rKGNjbS0xKSovCisJUkVTVFJJQ1RfVE9fUkFOR0UoY29sb3JfY29yciwgLWNjbSwgY2NtKzEpOworCisJdjRsX2xpbmVzaXplID0gVklERU9TSVpFX1goZnJhbWUtPnJlcXVlc3QpICogVjRMX0JZVEVTX1BFUl9QSVhFTDsKKworCS8qIFRoZSBoZWFkZXIgdGVsbHMgdXMgd2hhdCBzb3J0IG9mIGRhdGEgaXMgaW4gdGhpcyBmcmFtZSAqLworCXN3aXRjaCAoZnJhbWUtPmhlYWRlcikgeworCQkvKgorCQkgKiBVbmNvbXByZXNzZWQgbW9kZXMgKHRoYXQgYXJlIGVhc3kgdG8gZGVjb2RlKS4KKwkJICovCisJY2FzZSAweDAzMDg6CisJCWRhdGFfdyA9IDY0MDsKKwkJZGF0YV9oID0gNDgwOworCQlicmVhazsKKwljYXNlIDB4MDIwODoKKwkJZGF0YV93ID0gMzIwOworCQlkYXRhX2ggPSAyNDA7CisJCWJyZWFrOworCWNhc2UgMHgwMjBBOgorCQlkYXRhX3cgPSAxNjA7CisJCWRhdGFfaCA9IDEyMDsKKwkJYnJlYWs7CisJCS8qCisJCSAqIENvbXByZXNzZWQgbW9kZXMgKFZpQ0UgLSB0aGF0IEkgZG9uJ3Qga25vdyBob3cgdG8gZGVjb2RlKS4KKwkJICovCisJY2FzZSAweDAzMjg6CS8qIDY0MHg0ODAsIGJlc3QgcXVhbGl0eSBjb21wcmVzc2lvbiAqLworCWNhc2UgMHgwMzY4OgkvKiA2NDB4NDgwLCBiZXN0IGZyYW1lIHJhdGUgY29tcHJlc3Npb24gKi8KKwljYXNlIDB4MDIyODoJLyogMzIweDI0MCwgYmVzdCBxdWFsaXR5IGNvbXByZXNzaW9uICovCisJY2FzZSAweDAyNjg6CS8qIDMyMHgyNDAsIGJlc3QgZnJhbWUgcmF0ZSBjb21wcmVzc2lvbiAqLworCWNhc2UgMHgwMkNBOgkvKiAxNjB4MTIwLCBiZXN0IHF1YWxpdHkgY29tcHJlc3Npb24gKi8KKwljYXNlIDB4MDJFQToJLyogMTYweDEyMCwgYmVzdCBmcmFtZSByYXRlIGNvbXByZXNzaW9uICovCisJCS8qIERvIG5vdGhpbmcgd2l0aCB0aGlzIC0gbm90IHN1cHBvcnRlZCAqLworCQllcnIoIlVuc3VwcG9ydGVkIG1vZGUgJCUwNGx4IiwgZnJhbWUtPmhlYWRlcik7CisJCXJldHVybiBzY2FuX05leHRGcmFtZTsKKwlkZWZhdWx0OgorCQkvKiBDYXRjaCB1bmtub3duIGhlYWRlcnMsIG1heSBoZWxwIGluIGxlYXJuaW5nIG5ldyBoZWFkZXJzICovCisJCWVycigiU3RyYW5nZSBmcmFtZS0+aGVhZGVyPSQlMDhseCIsIGZyYW1lLT5oZWFkZXIpOworCQlyZXR1cm4gc2Nhbl9OZXh0RnJhbWU7CisJfQorCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhhdCBvdXIgd3JpdGluZyBpbnRvIG91dHB1dCBidWZmZXIKKwkgKiB3aWxsIG5vdCBleGNlZWQgdGhlIGJ1ZmZlci4gTm90ZSB0aGF0IHdlIG1heSB3cml0ZQorCSAqIG5vdCBpbnRvIGN1cnJlbnQgb3V0cHV0IHNjYW5saW5lIGJ1dCBpbiBzZXZlcmFsIGFmdGVyCisJICogaXQgYXMgd2VsbCAoaWYgd2UgZW5sYXJnZSBpbWFnZSB2ZXJ0aWNhbGx5LikKKwkgKi8KKwlpZiAoKGZyYW1lLT5jdXJsaW5lICsgMSkgPj0gZGF0YV9oKSB7CisJCWlmICh1dmQtPmRlYnVnID49IDMpCisJCQlpbmZvKCJSZWFjaGVkIGxpbmUgJWQuIChmcmFtZSBpcyBkb25lKSIsIGZyYW1lLT5jdXJsaW5lKTsKKwkJcmV0dXJuIHNjYW5fTmV4dEZyYW1lOworCX0KKworCS8qIE1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBkYXRhIGZvciB0aGUgZW50aXJlIGxpbmUgKi8KKwlsZW4gPSAzICogZGF0YV93OyAvKiA8eS1kYXRhPiA8dXYtZGF0YT4gKi8KKwlhc3NlcnQobGVuIDw9IHNpemVvZihsaW5lQnVmZmVyKSk7CisKKwkvKiBNYWtlIHN1cmUgdGhlcmUncyBlbm91Z2ggZGF0YSBmb3IgdGhlIGVudGlyZSBsaW5lICovCisJaWYgKFJpbmdRdWV1ZV9HZXRMZW5ndGgoJnV2ZC0+ZHApIDwgbGVuKQorCQlyZXR1cm4gc2Nhbl9PdXQ7CisKKwkvKiBTdWNrIG9uZSBsaW5lIG91dCBvZiB0aGUgcmluZyBxdWV1ZSAqLworCVJpbmdRdWV1ZV9EZXF1ZXVlKCZ1dmQtPmRwLCBsaW5lQnVmZmVyLCBsZW4pOworCisJZGF0YSA9IGxpbmVCdWZmZXI7CisJY29sb3IgPSBkYXRhICsgZGF0YV93OwkJLyogUG9pbnQgdG8gd2hlcmUgY29sb3IgcGxhbmVzIGJlZ2luICovCisKKwkvKiBCb3R0b20tdG8tdG9wIHNjYW5uaW5nICovCisJcncgPSAoaW50KVZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KSAtIChpbnQpKGZyYW1lLT5jdXJsaW5lKSAtIDE7CisJUkVTVFJJQ1RfVE9fUkFOR0UocncsIDAsIFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KS0xKTsKKworCWZvciAoaSA9IDA7IGkgPCBWSURFT1NJWkVfWChmcmFtZS0+cmVxdWVzdCk7IGkrKykgeworCQlpbnQgeSwgcnYsIGd2LCBidjsJLyogUkdCIGNvbXBvbmVudHMgKi8KKworCQlpZiAoaSA8IGRhdGFfdykgeworCQkJeSA9IGRhdGFbaV07CS8qIEx1bWlub3NpdHkgaXMgdGhlIGZpcnN0IGxpbmUgKi8KKworCQkJLyogQXBwbHkgc3RhdGljIGNvbG9yIGNvcnJlY3Rpb24gKi8KKwkJCXUgPSBjb2xvcltpKjJdICsgaHVlX2NvcnI7CisJCQl2ID0gY29sb3JbaSoyICsgMV0gKyBodWUyX2NvcnI7CisKKwkJCS8qIEFwcGx5IGNvbG9yIGNvcnJlY3Rpb24gKi8KKwkJCWlmIChjb2xvcl9jb3JyICE9IDApIHsKKwkJCQkvKiBNYWduaWZ5IHVwIHRvIDIgdGltZXMsIHJlZHVjZSBkb3duIHRvIHplcm8gc2F0dXJhdGlvbiAqLworCQkJCXUgPSAxMjggKyAoKGNjbSArIGNvbG9yX2NvcnIpICogKHUgLSAxMjgpKSAvIGNjbTsKKwkJCQl2ID0gMTI4ICsgKChjY20gKyBjb2xvcl9jb3JyKSAqICh2IC0gMTI4KSkgLyBjY207CisJCQl9CisJCX0gZWxzZQorCQkJeSA9IDAsIHUgPSB2ID0gMTI4OworCisJCVlVVl9UT19SR0JfQllfVEhFX0JPT0soeSwgdSwgdiwgcnYsIGd2LCBidik7CisJCVJHQjI0X1BVVFBJWEVMKGZyYW1lLCBpLCBydywgcnYsIGd2LCBidik7IC8qIERvbmUgYnkgZGVpbnRlcmxhY2luZyBub3cgKi8KKwl9CisJZnJhbWUtPmRlaW50ZXJsYWNlID0gRGVpbnRlcmxhY2VfRmlsbEV2ZW5MaW5lczsKKworCS8qCisJICogQWNjb3VudCBmb3IgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2Ugd3JvdGUgaW50byBvdXRwdXQgVjRMIGZyYW1lLgorCSAqIFdlIGRvIGl0IGhlcmUsIGFmdGVyIHdlIGFyZSBkb25lIHdpdGggdGhlIHNjYW5saW5lLCBiZWNhdXNlIHdlCisJICogbWF5IGZpbGwgbW9yZSB0aGFuIG9uZSBvdXRwdXQgc2NhbmxpbmUgaWYgd2UgZG8gdmVydGljYWwKKwkgKiBlbmxhcmdlbWVudC4KKwkgKi8KKwlmcmFtZS0+Y3VybGluZSArPSAyOworCSpwY29weWxlbiArPSAyICogdjRsX2xpbmVzaXplOworCisJaWYgKGZyYW1lLT5jdXJsaW5lID49IFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KSkgeworCQlpZiAodXZkLT5kZWJ1ZyA+PSAzKSB7CisJCQlpbmZvKCJBbGwgcmVxdWVzdGVkIGxpbmVzICglbGQuKSBkb25lLiIsCisJCQkgICAgIFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KSk7CisJCX0KKwkJcmV0dXJuIHNjYW5fTmV4dEZyYW1lOworCX0gZWxzZQorCQlyZXR1cm4gc2Nhbl9Db250aW51ZTsKK30KKworLyoKKyAqIGlibWNhbV9tb2RlbDRfMTI4eDk2X3BhcnNlX2xpbmVzKCkKKyAqCisgKiBUaGlzIGRlY29kZXIgaXMgZm9yIG9uZSBzdHJhbmdlIGRhdGEgZm9ybWF0IHRoYXQgaXMgcHJvZHVjZWQgYnkgTW9kZWwgNAorICogY2FtZXJhIG9ubHkgaW4gMTI4eDk2IG1vZGUuIFRoaXMgaXMgUkdCIGZvcm1hdCBhbmQgaGVyZSBpcyBpdHMgZGVzY3JpcHRpb24uCisgKiBGaXJzdCBvZiBhbGwsIHRoaXMgaXMgbm9uLWludGVybGFjZWQgc3RyZWFtLCBtZWFuaW5nIHRoYXQgYWxsIHNjYW4gbGluZXMKKyAqIGFyZSBwcmVzZW50IGluIHRoZSBkYXRhc3RyZWFtLiBUaGVyZSBhcmUgOTYgY29uc2VjdXRpdmUgYmxvY2tzIG9mIGRhdGEKKyAqIHRoYXQgZGVzY3JpYmUgYWxsIDk2IGxpbmVzIG9mIHRoZSBpbWFnZS4gRWFjaCBibG9jayBpcyA1KjEyOCBieXRlcyBsb25nCisgKiBhbmQgY2FycmllcyBSLCBHLCBCIGNvbXBvbmVudHMuIFRoZSBmb3JtYXQgb2YgdGhlIGJsb2NrIGlzIHNob3duIGluIHRoZQorICogY29kZSBiZWxvdy4gRmlyc3QgMTI4KjIgYnl0ZXMgYXJlIGludGVybGVhdmVkIFIgYW5kIEcgY29tcG9uZW50cy4gVGhlbgorICogd2UgaGF2ZSBhIGdhcCAoanVuayBkYXRhKSA2NCBieXRlcyBsb25nLiBUaGVuIGZvbGxvdyBCIGFuZCBzb21ldGhpbmcKKyAqIGVsc2UsIGFsc28gaW50ZXJsZWF2ZWQgKHRoaXMgbWFrZXMgYW5vdGhlciAxMjgqMiBieXRlcykuIEFmdGVyIHRoYXQKKyAqIHByb2JhYmx5IGFub3RoZXIgNjQgYnl0ZXMgb2YganVuayBmb2xsb3cuCisgKgorICogSGlzdG9yeToKKyAqIDEwLUZlYi0yMDAxIENyZWF0ZWQuCisgKi8KK3N0YXRpYyBlbnVtIFBhcnNlU3RhdGUgaWJtY2FtX21vZGVsNF8xMjh4OTZfcGFyc2VfbGluZXMoCisJc3RydWN0IHV2ZCAqdXZkLAorCXN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUsCisJbG9uZyAqcGNvcHlsZW4pCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YV9ydiwgKmRhdGFfZ3YsICpkYXRhX2J2OworCXVuc2lnbmVkIGludCBsZW47CisJaW50IGksIHY0bF9saW5lc2l6ZTsgLyogVjRMIGxpbmUgb2Zmc2V0ICovCisJY29uc3QgaW50IGRhdGFfdz0xMjgsIGRhdGFfaD05NjsKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBsaW5lQnVmZmVyWzEyOCo1XTsKKworCXY0bF9saW5lc2l6ZSA9IFZJREVPU0laRV9YKGZyYW1lLT5yZXF1ZXN0KSAqIFY0TF9CWVRFU19QRVJfUElYRUw7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGF0IG91ciB3cml0aW5nIGludG8gb3V0cHV0IGJ1ZmZlcgorCSAqIHdpbGwgbm90IGV4Y2VlZCB0aGUgYnVmZmVyLiBOb3RlIHRoYXQgd2UgbWF5IHdyaXRlCisJICogbm90IGludG8gY3VycmVudCBvdXRwdXQgc2NhbmxpbmUgYnV0IGluIHNldmVyYWwgYWZ0ZXIKKwkgKiBpdCBhcyB3ZWxsIChpZiB3ZSBlbmxhcmdlIGltYWdlIHZlcnRpY2FsbHkuKQorCSAqLworCWlmICgoZnJhbWUtPmN1cmxpbmUgKyAxKSA+PSBkYXRhX2gpIHsKKwkJaWYgKHV2ZC0+ZGVidWcgPj0gMykKKwkJCWluZm8oIlJlYWNoZWQgbGluZSAlZC4gKGZyYW1lIGlzIGRvbmUpIiwgZnJhbWUtPmN1cmxpbmUpOworCQlyZXR1cm4gc2Nhbl9OZXh0RnJhbWU7CisJfQorCisJLyoKKwkgKiBSR1JHUkcgLi4uLiBSR1JHX19fX19fX19fX19fX0I/Qj9CPyAuLi4gQj9CP19fX19fX19fX19fXworCSAqIDwtLS0tIDEyOCoyIC0tLT48LS0tLSA2NCAtLS0+PC0tLSAxMjgqMiAtLS0+PC0tLSA2NCAtLS0+CisJICovCisKKwkvKiBNYWtlIHN1cmUgdGhlcmUncyBlbm91Z2ggZGF0YSBmb3IgdGhlIGVudGlyZSBsaW5lICovCisJbGVuID0gNSAqIGRhdGFfdzsKKwlhc3NlcnQobGVuIDw9IHNpemVvZihsaW5lQnVmZmVyKSk7CisKKwkvKiBNYWtlIHN1cmUgdGhlcmUncyBlbm91Z2ggZGF0YSBmb3IgdGhlIGVudGlyZSBsaW5lICovCisJaWYgKFJpbmdRdWV1ZV9HZXRMZW5ndGgoJnV2ZC0+ZHApIDwgbGVuKQorCQlyZXR1cm4gc2Nhbl9PdXQ7CisKKwkvKiBTdWNrIG9uZSBsaW5lIG91dCBvZiB0aGUgcmluZyBxdWV1ZSAqLworCVJpbmdRdWV1ZV9EZXF1ZXVlKCZ1dmQtPmRwLCBsaW5lQnVmZmVyLCBsZW4pOworCisJZGF0YV9ydiA9IGxpbmVCdWZmZXI7CisJZGF0YV9ndiA9IGxpbmVCdWZmZXIgKyAxOworCWRhdGFfYnYgPSBsaW5lQnVmZmVyICsgZGF0YV93KjIgKyBkYXRhX3cvMjsKKwlmb3IgKGkgPSAwOyBpIDwgVklERU9TSVpFX1goZnJhbWUtPnJlcXVlc3QpOyBpKyspIHsKKwkJaW50IHJ2LCBndiwgYnY7CS8qIFJHQiBjb21wb25lbnRzICovCisJCWlmIChpIDwgZGF0YV93KSB7CisJCQljb25zdCBpbnQgaiA9IGkgKiAyOworCQkJZ3YgPSBkYXRhX3J2W2pdOworCQkJcnYgPSBkYXRhX2d2W2pdOworCQkJYnYgPSBkYXRhX2J2W2pdOworCQkJaWYgKGZsYWdzICYgRkxBR1NfTU9OT0NIUk9NRSkgeworCQkJCXVuc2lnbmVkIGxvbmcgeTsKKwkJCQl5ID0gcnYgKyBndiArIGJ2OworCQkJCXkgLz0gMzsKKwkJCQlpZiAoeSA+IDB4RkYpCisJCQkJCXkgPSAweEZGOworCQkJCXJ2ID0gZ3YgPSBidiA9ICh1bnNpZ25lZCBjaGFyKSB5OworCQkJfQorCQl9IGVsc2UgeworCQkJcnYgPSBndiA9IGJ2ID0gMDsKKwkJfQorCQlSR0IyNF9QVVRQSVhFTChmcmFtZSwgaSwgZnJhbWUtPmN1cmxpbmUsIHJ2LCBndiwgYnYpOworCX0KKwlmcmFtZS0+ZGVpbnRlcmxhY2UgPSBEZWludGVybGFjZV9Ob25lOworCWZyYW1lLT5jdXJsaW5lKys7CisJKnBjb3B5bGVuICs9IHY0bF9saW5lc2l6ZTsKKworCWlmIChmcmFtZS0+Y3VybGluZSA+PSBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkpIHsKKwkJaWYgKHV2ZC0+ZGVidWcgPj0gMykgeworCQkJaW5mbygiQWxsIHJlcXVlc3RlZCBsaW5lcyAoJWxkLikgZG9uZS4iLAorCQkJICAgICBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkpOworCQl9CisJCXJldHVybiBzY2FuX05leHRGcmFtZTsKKwl9IGVsc2UKKwkJcmV0dXJuIHNjYW5fQ29udGludWU7Cit9CisKKy8qCisgKiBpYm1jYW1fUHJvY2Vzc0lzb2NEYXRhKCkKKyAqCisgKiBHZW5lcmljIHJvdXRpbmUgdG8gcGFyc2UgdGhlIHJpbmcgcXVldWUgZGF0YS4gSXQgZW1wbG95cyBlaXRoZXIKKyAqIGlibWNhbV9maW5kX2hlYWRlcigpIG9yIGlibWNhbV9wYXJzZV9saW5lcygpIHRvIGRvIG1vc3QKKyAqIG9mIHdvcmsuCisgKgorICogSGlzdG9yeToKKyAqIDEvMjEvMDAgIENyZWF0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIGlibWNhbV9Qcm9jZXNzSXNvY0RhdGEoc3RydWN0IHV2ZCAqdXZkLAorCQkJCSAgIHN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUpCit7CisJZW51bSBQYXJzZVN0YXRlIG5ld3N0YXRlOworCWxvbmcgY29weWxlbiA9IDA7CisJaW50IG1vZCA9IElCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbDsKKworCXdoaWxlICgxKSB7CisJCW5ld3N0YXRlID0gc2Nhbl9PdXQ7CisJCWlmIChSaW5nUXVldWVfR2V0TGVuZ3RoKCZ1dmQtPmRwKSA+IDApIHsKKwkJCWlmIChmcmFtZS0+c2NhbnN0YXRlID09IFNjYW5TdGF0ZV9TY2FubmluZykgeworCQkJCW5ld3N0YXRlID0gaWJtY2FtX2ZpbmRfaGVhZGVyKHV2ZCk7CisJCQl9IGVsc2UgaWYgKGZyYW1lLT5zY2Fuc3RhdGUgPT0gU2NhblN0YXRlX0xpbmVzKSB7CisJCQkJaWYgKChtb2QgPT0gSUJNQ0FNX01PREVMXzIpICYmCisJCQkJICAgICgodXZkLT52aWRlb3NpemUgPT0gVklERU9TSVpFXzM1MngyODgpIHx8CisJCQkJICAgICAodXZkLT52aWRlb3NpemUgPT0gVklERU9TSVpFXzMyMHgyNDApIHx8CisJCQkJICAgICAodXZkLT52aWRlb3NpemUgPT0gVklERU9TSVpFXzM1MngyNDApKSkKKwkJCQl7CisJCQkJCW5ld3N0YXRlID0gaWJtY2FtX21vZGVsMl8zMjB4MjQwX3BhcnNlX2xpbmVzKAorCQkJCQkJdXZkLCBmcmFtZSwgJmNvcHlsZW4pOworCQkJCX0gZWxzZSBpZiAobW9kID09IElCTUNBTV9NT0RFTF80KSB7CisJCQkJCS8qCisJCQkJCSAqIE1vZGVsIDQgY2FtZXJhcyAoSUJNIE5ldENhbWVyYSkgdXNlIE1vZGVsIDIgZGVjb2RlciAoUkdCKQorCQkJCQkgKiBmb3IgMzIweDI0MCBhbmQgYWJvdmU7IDE2MHgxMjAgYW5kIDE3NngxNDQgdXNlcyBNb2RlbCAxCisJCQkJCSAqIGRlY29kZXIgKFlVViksIGFuZCAxMjh4OTYgbW9kZSB1c2VzID8/PworCQkJCQkgKi8KKwkJCQkJaWYgKCh1dmQtPnZpZGVvc2l6ZSA9PSBWSURFT1NJWkVfMzUyeDI4OCkgfHwKKwkJCQkJICAgICh1dmQtPnZpZGVvc2l6ZSA9PSBWSURFT1NJWkVfMzIweDI0MCkgfHwKKwkJCQkJICAgICh1dmQtPnZpZGVvc2l6ZSA9PSBWSURFT1NJWkVfMzUyeDI0MCkpCisJCQkJCXsKKwkJCQkJCW5ld3N0YXRlID0gaWJtY2FtX21vZGVsMl8zMjB4MjQwX3BhcnNlX2xpbmVzKHV2ZCwgZnJhbWUsICZjb3B5bGVuKTsKKwkJCQkJfSBlbHNlIGlmICh1dmQtPnZpZGVvc2l6ZSA9PSBWSURFT1NJWkVfMTI4eDk2KSB7CisJCQkJCQluZXdzdGF0ZSA9IGlibWNhbV9tb2RlbDRfMTI4eDk2X3BhcnNlX2xpbmVzKHV2ZCwgZnJhbWUsICZjb3B5bGVuKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCW5ld3N0YXRlID0gaWJtY2FtX3BhcnNlX2xpbmVzKHV2ZCwgZnJhbWUsICZjb3B5bGVuKTsKKwkJCQkJfQorCQkJCX0gZWxzZSBpZiAobW9kID09IElCTUNBTV9NT0RFTF8zKSB7CisJCQkJCW5ld3N0YXRlID0gaWJtY2FtX21vZGVsM19wYXJzZV9saW5lcyh1dmQsIGZyYW1lLCAmY29weWxlbik7CisJCQkJfSBlbHNlIHsKKwkJCQkJbmV3c3RhdGUgPSBpYm1jYW1fcGFyc2VfbGluZXModXZkLCBmcmFtZSwgJmNvcHlsZW4pOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAobmV3c3RhdGUgPT0gc2Nhbl9Db250aW51ZSkKKwkJCWNvbnRpbnVlOworCQllbHNlIGlmICgobmV3c3RhdGUgPT0gc2Nhbl9OZXh0RnJhbWUpIHx8IChuZXdzdGF0ZSA9PSBzY2FuX091dCkpCisJCQlicmVhazsKKwkJZWxzZQorCQkJcmV0dXJuOyAvKiBzY2FuX0VuZFBhcnNlICovCisJfQorCisJaWYgKG5ld3N0YXRlID09IHNjYW5fTmV4dEZyYW1lKSB7CisJCWZyYW1lLT5mcmFtZVN0YXRlID0gRnJhbWVTdGF0ZV9Eb25lOworCQl1dmQtPmN1cmZyYW1lID0gLTE7CisJCXV2ZC0+c3RhdHMuZnJhbWVfbnVtKys7CisJCWlmICgobW9kID09IElCTUNBTV9NT0RFTF8yKSB8fCAobW9kID09IElCTUNBTV9NT0RFTF80KSkgeworCQkJLyogTmVlZCBzb2Z0d2FyZSBjb250cmFzdCBhZGp1c3RtZW50IGZvciB0aG9zZSBjYW1lcmFzICovCisJCQlmcmFtZS0+ZmxhZ3MgfD0gVVNCVklERU9fRlJBTUVfRkxBR19TT0ZUV0FSRV9DT05UUkFTVDsKKwkJfQorCX0KKworCS8qIFVwZGF0ZSB0aGUgZnJhbWUncyB1bmNvbXByZXNzZWQgbGVuZ3RoLiAqLworCWZyYW1lLT5zZXFSZWFkX0xlbmd0aCArPSBjb3B5bGVuOworCisjaWYgMAorCXsKKwkJc3RhdGljIHVuc2lnbmVkIGNoYXIgaj0wOworCQltZW1zZXQoZnJhbWUtPmRhdGEsIGorKywgdXZkLT5tYXhfZnJhbWVfc2l6ZSk7CisJCWZyYW1lLT5mcmFtZVN0YXRlID0gRnJhbWVTdGF0ZV9SZWFkeTsKKwl9CisjZW5kaWYKK30KKworLyoKKyAqIGlibWNhbV92ZWlvKCkKKyAqCisgKiBIaXN0b3J5OgorICogMS8yNy8wMCAgQWRkZWQgY2hlY2sgZm9yIGRldiA9PSBOVUxMOyB0aGlzIGhhcHBlbnMgaWYgY2FtZXJhIGlzIHVucGx1Z2dlZC4KKyAqLworc3RhdGljIGludCBpYm1jYW1fdmVpbygKKwlzdHJ1Y3QgdXZkICp1dmQsCisJdW5zaWduZWQgY2hhciByZXEsCisJdW5zaWduZWQgc2hvcnQgdmFsdWUsCisJdW5zaWduZWQgc2hvcnQgaW5kZXgpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgcHJvY1tdID0gImlibWNhbV92ZWlvIjsKKwl1bnNpZ25lZCBjaGFyIGNwWzhdIC8qID0geyAweGRlLCAweGFkLCAweGJlLCAweGVmLCAweGRlLCAweGFkLCAweGJlLCAweGVmIH0gKi87CisJaW50IGk7CisKKwlpZiAoIUNBTUVSQV9JU19PUEVSQVRJT05BTCh1dmQpKQorCQlyZXR1cm4gMDsKKworCWlmIChyZXEgPT0gMSkgeworCQlpID0gdXNiX2NvbnRyb2xfbXNnKAorCQkJdXZkLT5kZXYsCisJCQl1c2JfcmN2Y3RybHBpcGUodXZkLT5kZXYsIDApLAorCQkJcmVxLAorCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCwKKwkJCXZhbHVlLAorCQkJaW5kZXgsCisJCQljcCwKKwkJCXNpemVvZihjcCksCisJCQkxMDAwKTsKKyNpZiAwCisJCWluZm8oIlVTQiA9PiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAiCisJCSAgICAgICAiKHJlcT0kJTAyeCB2YWw9JCUwNHggaW5kPSQlMDR4KSIsCisJCSAgICAgICBjcFswXSxjcFsxXSxjcFsyXSxjcFszXSxjcFs0XSxjcFs1XSxjcFs2XSxjcFs3XSwKKwkJICAgICAgIHJlcSwgdmFsdWUsIGluZGV4KTsKKyNlbmRpZgorCX0gZWxzZSB7CisJCWkgPSB1c2JfY29udHJvbF9tc2coCisJCQl1dmQtPmRldiwKKwkJCXVzYl9zbmRjdHJscGlwZSh1dmQtPmRldiwgMCksCisJCQlyZXEsCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCwKKwkJCXZhbHVlLAorCQkJaW5kZXgsCisJCQlOVUxMLAorCQkJMCwKKwkJCTEwMDApOworCX0KKwlpZiAoaSA8IDApIHsKKwkJZXJyKCIlczogRVJST1I9JWQuIENhbWVyYSBzdG9wcGVkOyBSZWNvbm5lY3Qgb3IgcmVsb2FkIGRyaXZlci4iLAorCQkgICAgcHJvYywgaSk7CisJCXV2ZC0+bGFzdF9lcnJvciA9IGk7CisJfQorCXJldHVybiBpOworfQorCisvKgorICogaWJtY2FtX2NhbGN1bGF0ZV9mcHMoKQorICoKKyAqIFRoaXMgcHJvY2VkdXJlIHJvdWdobHkgY2FsY3VsYXRlcyB0aGUgcmVhbCBmcmFtZSByYXRlIGJhc2VkCisgKiBvbiBGUFMgY29kZSAoZnJhbWVyYXRlPU5OTiBvcHRpb24pLiBBY3R1YWwgRlBTIGRpZmZlcnMKKyAqIHNsaWdodGx5IGRlcGVuZGluZyBvbiBsaWdodGluZyBjb25kaXRpb25zLCBzbyB0aGF0IGFjdHVhbCBmcmFtZQorICogcmF0ZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBjYW1lcmEuIFNpbmNlIEkgZG9uJ3Qga25vdyBob3cgdG8gYXNrCisgKiB0aGUgY2FtZXJhIHdoYXQgRlBTIGlzIG5vdyBJIGhhdmUgdG8gdXNlIHRoZSBGUFMgY29kZSBpbnN0ZWFkLgorICoKKyAqIFRoZSBGUFMgY29kZSBpcyBpbiByYW5nZSBbMC4uNl0sIDAgaXMgc2xvd2VzdCwgNiBpcyBmYXN0ZXN0LgorICogQ29ycmVzcG9uZGluZyByZWFsIEZQUyBzaG91bGQgYmUgaW4gcmFuZ2UgWzMuLjMwXSBmcmFtZXMgcGVyIHNlY29uZC4KKyAqIFRoZSBjb252ZXJzaW9uIGZvcm11bGEgaXMgb2J2aW91czoKKyAqCisgKiByZWFsX2ZwcyA9IDMgKyAoZnBzX2NvZGUgKiA0LjUpCisgKgorICogSGlzdG9yeToKKyAqIDEvMTgvMDAgIENyZWF0ZWQuCisgKi8KK3N0YXRpYyBpbnQgaWJtY2FtX2NhbGN1bGF0ZV9mcHMoc3RydWN0IHV2ZCAqdXZkKQoreworCXJldHVybiAzICsgZnJhbWVyYXRlKjQgKyBmcmFtZXJhdGUvMjsKK30KKworLyoKKyAqIGlibWNhbV9zZW5kX0ZGXzA0XzAyKCkKKyAqCisgKiBUaGlzIHByb2NlZHVyZSBzZW5kcyBtYWdpYyAzLWNvbW1hbmQgcHJlZml4IHRvIHRoZSBjYW1lcmEuCisgKiBUaGUgcHVycG9zZSBvZiB0aGlzIHByZWZpeCBpcyBub3Qga25vd24uCisgKgorICogSGlzdG9yeToKKyAqIDEvMi8wMCAgIENyZWF0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIGlibWNhbV9zZW5kX0ZGXzA0XzAyKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBGRiwgMHgwMTI3KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTI0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMiwgMHgwMTI0KTsKK30KKworc3RhdGljIHZvaWQgaWJtY2FtX3NlbmRfMDBfMDRfMDYoc3RydWN0IHV2ZCAqdXZkKQoreworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMjQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA2LCAweDAxMjQpOworfQorCitzdGF0aWMgdm9pZCBpYm1jYW1fc2VuZF94XzAwKHN0cnVjdCB1dmQgKnV2ZCwgdW5zaWduZWQgc2hvcnQgeCkKK3sKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIHgsICAgICAgMHgwMTI3KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI0KTsKK30KKworc3RhdGljIHZvaWQgaWJtY2FtX3NlbmRfeF8wMF8wNShzdHJ1Y3QgdXZkICp1dmQsIHVuc2lnbmVkIHNob3J0IHgpCit7CisJaWJtY2FtX3NlbmRfeF8wMCh1dmQsIHgpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA1LCAweDAxMjQpOworfQorCitzdGF0aWMgdm9pZCBpYm1jYW1fc2VuZF94XzAwXzA1XzAyKHN0cnVjdCB1dmQgKnV2ZCwgdW5zaWduZWQgc2hvcnQgeCkKK3sKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIHgsICAgICAgMHgwMTI3KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNSwgMHgwMTI0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMiwgMHgwMTI0KTsKK30KKworc3RhdGljIHZvaWQgaWJtY2FtX3NlbmRfeF8wMV8wMF8wNShzdHJ1Y3QgdXZkICp1dmQsIHVuc2lnbmVkIHNob3J0IHgpCit7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCB4LCAgICAgIDB4MDEyNyk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEyNCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDUsIDB4MDEyNCk7Cit9CisKK3N0YXRpYyB2b2lkIGlibWNhbV9zZW5kX3hfMDBfMDVfMDJfMDEoc3RydWN0IHV2ZCAqdXZkLCB1bnNpZ25lZCBzaG9ydCB4KQoreworCWlibWNhbV92ZWlvKHV2ZCwgMCwgeCwgICAgICAweDAxMjcpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA1LCAweDAxMjQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAyLCAweDAxMjQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMjQpOworfQorCitzdGF0aWMgdm9pZCBpYm1jYW1fc2VuZF94XzAwXzA1XzAyXzA4XzAxKHN0cnVjdCB1dmQgKnV2ZCwgdW5zaWduZWQgc2hvcnQgeCkKK3sKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIHgsICAgICAgMHgwMTI3KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNSwgMHgwMTI0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMiwgMHgwMTI0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTI0KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTI0KTsKK30KKworc3RhdGljIHZvaWQgaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHN0cnVjdCB1dmQgKnV2ZCwgdW5zaWduZWQgY2hhciBma2V5LCB1bnNpZ25lZCBjaGFyIHZhbCkKK3sKKwlpYm1jYW1fc2VuZF94XzAxXzAwXzA1KHV2ZCwgdW5rbm93bl84OCk7CisJaWJtY2FtX3NlbmRfeF8wMF8wNSh1dmQsIGZrZXkpOworCWlibWNhbV9zZW5kX3hfMDBfMDVfMDJfMDhfMDEodXZkLCB2YWwpOworCWlibWNhbV9zZW5kX3hfMDBfMDUodXZkLCB1bmtub3duXzg4KTsKKwlpYm1jYW1fc2VuZF94XzAwXzA1XzAyXzAxKHV2ZCwgZmtleSk7CisJaWJtY2FtX3NlbmRfeF8wMF8wNSh1dmQsIHVua25vd25fODkpOworCWlibWNhbV9zZW5kX3hfMDAodXZkLCBma2V5KTsKKwlpYm1jYW1fc2VuZF8wMF8wNF8wNih1dmQpOworCWlibWNhbV92ZWlvKHV2ZCwgMSwgMHgwMDAwLCAweDAxMjYpOworCWlibWNhbV9zZW5kX0ZGXzA0XzAyKHV2ZCk7Cit9CisKK3N0YXRpYyB2b2lkIGlibWNhbV9QYWNrZXRGb3JtYXQyKHN0cnVjdCB1dmQgKnV2ZCwgdW5zaWduZWQgY2hhciBma2V5LCB1bnNpZ25lZCBjaGFyIHZhbCkKK3sKKwlpYm1jYW1fc2VuZF94XzAxXzAwXzA1CSh1dmQsIHVua25vd25fODgpOworCWlibWNhbV9zZW5kX3hfMDBfMDUJKHV2ZCwgZmtleSk7CisJaWJtY2FtX3NlbmRfeF8wMF8wNV8wMgkodXZkLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBpYm1jYW1fbW9kZWwyX1BhY2tldDIoc3RydWN0IHV2ZCAqdXZkKQoreworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGZmLCAweDAxMmQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWEzLCAweDAxMjQpOworfQorCitzdGF0aWMgdm9pZCBpYm1jYW1fbW9kZWwyX1BhY2tldDEoc3RydWN0IHV2ZCAqdXZkLCB1bnNpZ25lZCBzaG9ydCB2MSwgdW5zaWduZWQgc2hvcnQgdjIpCit7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZmYsIDB4MDEyZSk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCB2MSwgICAgIDB4MDEyZik7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZmYsIDB4MDEzMCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGM3MTksIDB4MDEyNCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCB2MiwgICAgIDB4MDEyNyk7CisKKwlpYm1jYW1fbW9kZWwyX1BhY2tldDIodXZkKTsKK30KKworLyoKKyAqIGlibWNhbV9tb2RlbDNfUGFja2V0MSgpCisgKgorICogMDBfMDA3OF8wMTJkCQorICogMDBfMDA5N18wMTJmCisgKiAwMF9kMTQxXzAxMjQJCisgKiAwMF8wMDk2XzAxMjcKKyAqIDAwX2ZlYThfMDEyNAkKKyovCitzdGF0aWMgdm9pZCBpYm1jYW1fbW9kZWwzX1BhY2tldDEoc3RydWN0IHV2ZCAqdXZkLCB1bnNpZ25lZCBzaG9ydCB2MSwgdW5zaWduZWQgc2hvcnQgdjIpCit7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNzgsIDB4MDEyZCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCB2MSwgICAgIDB4MDEyZik7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCB2MiwgICAgIDB4MDEyNyk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7Cit9CisKK3N0YXRpYyB2b2lkIGlibWNhbV9tb2RlbDRfQnJpZ2h0bmVzc1BhY2tldChzdHJ1Y3QgdXZkICp1dmQsIGludCBpKQoreworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI2LCAweDAxMmYpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgaSwgICAgICAweDAxMjcpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMzApOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM4LCAweDAxMmQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMmYpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZmZhLCAweDAxMjQpOworfQorCisvKgorICogaWJtY2FtX2FkanVzdF9jb250cmFzdCgpCisgKgorICogVGhlIGNvbnRyYXN0IHZhbHVlIGNoYW5nZXMgZnJvbSAwIChoaWdoIGNvbnRyYXN0KSB0byAxNSAobG93IGNvbnRyYXN0KS4KKyAqIFRoaXMgaXMgaW4gcmV2ZXJzZSB0byB1c3VhbCBvcmRlciBvZiB0aGluZ3MgKHN1Y2ggYXMgVFYgY29udHJvbHMpLCBzbworICogd2UgcmV2ZXJzZSBpdCBhZ2FpbiBoZXJlLgorICoKKyAqIFRPRE86IHdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gc2VuZCB0aGUgc2V0dXAgNSB0aW1lcy4uLgorICoKKyAqIEhpc3Rvcnk6CisgKiAxLzIvMDAgICBDcmVhdGVkLgorICovCitzdGF0aWMgdm9pZCBpYm1jYW1fYWRqdXN0X2NvbnRyYXN0KHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwl1bnNpZ25lZCBjaGFyIGFfY29udHJhc3QgPSB1dmQtPnZwaWMuY29udHJhc3QgPj4gMTI7CisJdW5zaWduZWQgY2hhciBuZXdfY29udHJhc3Q7CisKKwlpZiAoYV9jb250cmFzdCA+PSAxNikKKwkJYV9jb250cmFzdCA9IDE1OworCW5ld19jb250cmFzdCA9IDE1IC0gYV9jb250cmFzdDsKKwlpZiAobmV3X2NvbnRyYXN0ID09IHV2ZC0+dnBpY19vbGQuY29udHJhc3QpCisJCXJldHVybjsKKwl1dmQtPnZwaWNfb2xkLmNvbnRyYXN0ID0gbmV3X2NvbnRyYXN0OworCXN3aXRjaCAoSUJNQ0FNX1QodXZkKS0+Y2FtZXJhX21vZGVsKSB7CisJY2FzZSBJQk1DQU1fTU9ERUxfMToKKwl7CisJCWNvbnN0IGludCBudHJpZXMgPSA1OworCQlpbnQgaTsKKwkJZm9yIChpPTA7IGkgPCBudHJpZXM7IGkrKykgeworCQkJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgY29udHJhc3RfMTQsIG5ld19jb250cmFzdCk7CisJCQlpYm1jYW1fc2VuZF9GRl8wNF8wMih1dmQpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIElCTUNBTV9NT0RFTF8yOgorCWNhc2UgSUJNQ0FNX01PREVMXzQ6CisJCS8qIE1vZGVscyAyLCA0IGRvIG5vdCBoYXZlIHRoaXMgY29udHJvbDsgaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUuICovCisJCWJyZWFrOworCWNhc2UgSUJNQ0FNX01PREVMXzM6CisJewkvKiBQcmVzZXQgaGFyZHdhcmUgdmFsdWVzICovCisJCXN0YXRpYyBjb25zdCBzdHJ1Y3QgeworCQkJdW5zaWduZWQgc2hvcnQgY3YxOworCQkJdW5zaWduZWQgc2hvcnQgY3YyOworCQkJdW5zaWduZWQgc2hvcnQgY3YzOworCQl9IGN2WzddID0geworCQkJeyAweDA1LCAweDA1LCAweDBmIH0sCS8qIE1pbmltdW0gKi8KKwkJCXsgMHgwNCwgMHgwNCwgMHgxNiB9LAorCQkJeyAweDAyLCAweDAzLCAweDE2IH0sCisJCQl7IDB4MDIsIDB4MDgsIDB4MTYgfSwKKwkJCXsgMHgwMSwgMHgwYywgMHgxNiB9LAorCQkJeyAweDAxLCAweDBlLCAweDE2IH0sCisJCQl7IDB4MDEsIDB4MTAsIDB4MTYgfQkvKiBNYXhpbXVtICovCisJCX07CisJCWludCBpID0gYV9jb250cmFzdCAvIDI7CisJCVJFU1RSSUNUX1RPX1JBTkdFKGksIDAsIDYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTBjKTsJLyogU3RvcCAqLworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNjcsIGN2W2ldLmN2MSk7CisJCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1YiwgY3ZbaV0uY3YyKTsKKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDVjLCBjdltpXS5jdjMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTE0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDEwYyk7CS8qIEdvISAqLworCQl1c2JfY2xlYXJfaGFsdCh1dmQtPmRldiwgdXNiX3Jjdmlzb2NwaXBlKHV2ZC0+ZGV2LCB1dmQtPnZpZGVvX2VuZHApKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIGlibWNhbV9jaGFuZ2VfbGlnaHRpbmdfY29uZGl0aW9ucygpCisgKgorICogQ2FtZXJhIG1vZGVsIDE6CisgKiBXZSBoYXZlIDMgbGV2ZWxzIG9mIGxpZ2h0aW5nIGNvbmRpdGlvbnM6IDA9QnJpZ2h0LCAxPU1lZGl1bSwgMj1Mb3cuCisgKgorICogQ2FtZXJhIG1vZGVsIDI6CisgKiBXZSBoYXZlIDE2IGxldmVscyBvZiBsaWdodGluZywgMCBmb3IgYnJpZ2h0IGxpZ2h0IGFuZCB1cCB0byAxNSBmb3IKKyAqIGxvdyBsaWdodC4gQnV0IHZhbHVlcyBhYm92ZSA1IG9yIHNvIGFyZSB1c2VsZXNzIGJlY2F1c2UgY2FtZXJhIGlzCisgKiBub3QgcmVhbGx5IGNhcGFibGUgdG8gcHJvZHVjZSBhbnl0aGluZyB3b3J0aCB2aWV3aW5nIGF0IHN1Y2ggbGlnaHQuCisgKiBUaGlzIHNldHRpbmcgbWF5IGJlIGFsdGVyZWQgb25seSBpbiBjZXJ0YWluIGNhbWVyYSBzdGF0ZS4KKyAqCisgKiBMb3cgbGlnaHRpbmcgZm9yY2VzIHNsb3dlciBGUFMuIExpZ2h0aW5nIGlzIHNldCBhcyBhIG1vZHVsZSBwYXJhbWV0ZXIuCisgKgorICogSGlzdG9yeToKKyAqIDEvNS8wMCAgIENyZWF0ZWQuCisgKiAyLzIwLzAwICBBZGRlZCBzdXBwb3J0IGZvciBNb2RlbCAyIGNhbWVyYXMuCisgKi8KK3N0YXRpYyB2b2lkIGlibWNhbV9jaGFuZ2VfbGlnaHRpbmdfY29uZGl0aW9ucyhzdHJ1Y3QgdXZkICp1dmQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgcHJvY1tdID0gImlibWNhbV9jaGFuZ2VfbGlnaHRpbmdfY29uZGl0aW9ucyI7CisKKwlpZiAoZGVidWcgPiAwKQorCQlpbmZvKCIlczogU2V0IGxpZ2h0aW5nIHRvICVodS4iLCBwcm9jLCBsaWdodGluZyk7CisKKwlzd2l0Y2ggKElCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbCkgeworCWNhc2UgSUJNQ0FNX01PREVMXzE6CisJeworCQljb25zdCBpbnQgbnRyaWVzID0gNTsKKwkJaW50IGk7CisJCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCQlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCBsaWdodF8yNywgKHVuc2lnbmVkIHNob3J0KSBsaWdodGluZyk7CisJCWJyZWFrOworCX0KKwljYXNlIElCTUNBTV9NT0RFTF8yOgorI2lmIDAKKwkJLyoKKwkJICogVGhpcyBjb21tYW5kIGFwcGFyZW50bHkgcmVxdWlyZXMgY2FtZXJhIHRvIGJlIHN0b3BwZWQuIE15CisJCSAqIGV4cGVyaW1lbnRzIHNob3dlZCB0aGF0IGl0IC1pcy0gcG9zc2libGUgdG8gYWx0ZXIgdGhlIGxpZ2h0aW5nCisJCSAqIGNvbmRpdGlvbnMgc2V0dGluZyAib24gdGhlIGZseSIsIGJ1dCB3aHkgYm90aGVyPyBUaGlzIHNldHRpbmcgZG9lcworCQkgKiBub3Qgd29yayByZWxpYWJseSBpbiBhbGwgY2FzZXMsIHNvIEkgZGVjaWRlZCBzaW1wbHkgdG8gbGVhdmUgdGhlCisJCSAqIHNldHRpbmcgd2hlcmUgWGlybGluayBwdXQgaXQgLSBpbiB0aGUgY2FtZXJhIHNldHVwIHBoYXNlLiBUaGlzIGNvZGUKKwkJICogaXMgY29tbWVudGVkIG91dCBiZWNhdXNlIGl0IGRvZXMgbm90IHdvcmsgYXQgLWFueS0gbW9tZW50LCBzbyBpdHMKKwkJICogcHJlc2VuY2UgbWFrZXMgbm8gc2Vuc2UuIFlvdSBtYXkgdXNlIGl0IGZvciBleHBlcmltZW50cy4KKwkJICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMGMpOwkvKiBTdG9wIGNhbWVyYSAqLworCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCBtb2QyX3NlbnNpdGl2aXR5LCBsaWdodGluZyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMGMpOwkvKiBTdGFydCBjYW1lcmEgKi8KKyNlbmRpZgorCQlicmVhazsKKwljYXNlIElCTUNBTV9NT0RFTF8zOgorCWNhc2UgSUJNQ0FNX01PREVMXzQ6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogaWJtY2FtX3NldF9zaGFycG5lc3MoKQorICoKKyAqIENhbWVyYXMgbW9kZWwgMSBoYXZlIGludGVybmFsIHNtb290aGluZyBmZWF0dXJlLiBJdCBpcyBjb250cm9sbGVkIGJ5IHZhbHVlIGluCisgKiByYW5nZSBbMC4uNl0sIHdoZXJlIDAgaXMgbW9zdCBzbW9vdGggYW5kIDYgaXMgbW9zdCBzaGFycCAocmF3IGltYWdlLCBJIGd1ZXNzKS4KKyAqIFJlY29tbWVuZGVkIHZhbHVlIGlzIDQuIENhbWVyYXMgbW9kZWwgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUgYXQgYWxsLgorICovCitzdGF0aWMgdm9pZCBpYm1jYW1fc2V0X3NoYXJwbmVzcyhzdHJ1Y3QgdXZkICp1dmQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgcHJvY1tdID0gImlibWNhbV9zZXRfc2hhcnBuZXNzIjsKKworCXN3aXRjaCAoSUJNQ0FNX1QodXZkKS0+Y2FtZXJhX21vZGVsKSB7CisJY2FzZSBJQk1DQU1fTU9ERUxfMToKKwl7CisJCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBzYVtdID0geyAweDExLCAweDEzLCAweDE2LCAweDE4LCAweDFhLCAweDgsIDB4MGEgfTsKKwkJdW5zaWduZWQgc2hvcnQgaSwgc3Y7CisKKwkJUkVTVFJJQ1RfVE9fUkFOR0Uoc2hhcnBuZXNzLCBTSEFSUE5FU1NfTUlOLCBTSEFSUE5FU1NfTUFYKTsKKwkJaWYgKGRlYnVnID4gMCkKKwkJCWluZm8oIiVzOiBTZXQgc2hhcnBuZXNzIHRvICVodS4iLCBwcm9jLCBzaGFycG5lc3MpOworCisJCXN2ID0gc2Fbc2hhcnBuZXNzIC0gU0hBUlBORVNTX01JTl07CisJCWZvciAoaT0wOyBpIDwgMjsgaSsrKSB7CisJCQlpYm1jYW1fc2VuZF94XzAxXzAwXzA1CSh1dmQsIHVua25vd25fODgpOworCQkJaWJtY2FtX3NlbmRfeF8wMF8wNQkJKHV2ZCwgc2hhcnBfMTMpOworCQkJaWJtY2FtX3NlbmRfeF8wMF8wNV8wMgkodXZkLCBzdik7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgSUJNQ0FNX01PREVMXzI6CisJY2FzZSBJQk1DQU1fTU9ERUxfNDoKKwkJLyogTW9kZWxzIDIsIDQgZG8gbm90IGhhdmUgdGhpcyBjb250cm9sICovCisJCWJyZWFrOworCWNhc2UgSUJNQ0FNX01PREVMXzM6CisJewkvKgorCQkgKiAiVXNlIGEgdGFibGUgb2YgbWFnaWMgbnVtYmVycy4KKwkJICogIFRoaXMgc2V0dGluZyBkb2Vzbid0IHJlYWxseSBjaGFuZ2UgbXVjaC4KKwkJICogIEJ1dCB0aGF0J3MgaG93IFdpbmRvd3MgZG9lcyBpdC4iCisJCSAqLworCQlzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwkJCXVuc2lnbmVkIHNob3J0IHN2MTsKKwkJCXVuc2lnbmVkIHNob3J0IHN2MjsKKwkJCXVuc2lnbmVkIHNob3J0IHN2MzsKKwkJCXVuc2lnbmVkIHNob3J0IHN2NDsKKwkJfSBzdls3XSA9IHsKKwkJCXsgMHgwMCwgMHgwMCwgMHgwNSwgMHgxNCB9LAkvKiBTbW9vdGhlc3QgKi8KKwkJCXsgMHgwMSwgMHgwNCwgMHgwNSwgMHgxNCB9LAorCQkJeyAweDAyLCAweDA0LCAweDA1LCAweDE0IH0sCisJCQl7IDB4MDMsIDB4MDQsIDB4MDUsIDB4MTQgfSwKKwkJCXsgMHgwMywgMHgwNSwgMHgwNSwgMHgxNCB9LAorCQkJeyAweDAzLCAweDA2LCAweDA1LCAweDE0IH0sCisJCQl7IDB4MDMsIDB4MDcsIDB4MDUsIDB4MTQgfQkvKiBTaGFycGVzdCAqLworCQl9OworCQlSRVNUUklDVF9UT19SQU5HRShzaGFycG5lc3MsIFNIQVJQTkVTU19NSU4sIFNIQVJQTkVTU19NQVgpOworCQlSRVNUUklDVF9UT19SQU5HRShzaGFycG5lc3MsIDAsIDYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTBjKTsJLyogU3RvcCAqLworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNjAsIHN2W3NoYXJwbmVzc10uc3YxKTsKKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDYxLCBzdltzaGFycG5lc3NdLnN2Mik7CisJCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA2Miwgc3Zbc2hhcnBuZXNzXS5zdjMpOworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNjMsIHN2W3NoYXJwbmVzc10uc3Y0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDExNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMGMpOwkvKiBHbyEgKi8KKwkJdXNiX2NsZWFyX2hhbHQodXZkLT5kZXYsIHVzYl9yY3Zpc29jcGlwZSh1dmQtPmRldiwgdXZkLT52aWRlb19lbmRwKSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMTMpOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogaWJtY2FtX3NldF9icmlnaHRuZXNzKCkKKyAqCisgKiBUaGlzIHByb2NlZHVyZSBjaGFuZ2VzIGJyaWdodG5lc3Mgb2YgdGhlIHBpY3R1cmUuCisgKi8KK3N0YXRpYyB2b2lkIGlibWNhbV9zZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgdXZkICp1dmQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgcHJvY1tdID0gImlibWNhbV9zZXRfYnJpZ2h0bmVzcyI7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG4gPSAxOworCisJaWYgKGRlYnVnID4gMCkKKwkJaW5mbygiJXM6IFNldCBicmlnaHRuZXNzIHRvICVodS4iLCBwcm9jLCB1dmQtPnZwaWMuYnJpZ2h0bmVzcyk7CisKKwlzd2l0Y2ggKElCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbCkgeworCWNhc2UgSUJNQ0FNX01PREVMXzE6CisJeworCQl1bnNpZ25lZCBzaG9ydCBpLCBqLCBidlszXTsKKwkJYnZbMF0gPSBidlsxXSA9IGJ2WzJdID0gdXZkLT52cGljLmJyaWdodG5lc3MgPj4gMTA7CisJCWlmIChidlswXSA9PSAodXZkLT52cGljX29sZC5icmlnaHRuZXNzID4+IDEwKSkKKwkJCXJldHVybjsKKwkJdXZkLT52cGljX29sZC5icmlnaHRuZXNzID0gYnZbMF07CisJCWZvciAoaj0wOyBqIDwgMzsgaisrKQorCQkJZm9yIChpPTA7IGkgPCBuOyBpKyspCisJCQkJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgYnJpZ2h0XzN4W2pdLCBidltqXSk7CisJCWJyZWFrOworCX0KKwljYXNlIElCTUNBTV9NT0RFTF8yOgorCXsKKwkJdW5zaWduZWQgc2hvcnQgaSwgajsKKwkJaSA9IHV2ZC0+dnBpYy5icmlnaHRuZXNzID4+IDEyOwkvKiAwIC4uIDE1ICovCisJCWogPSAweDYwICsgaSAqICgoMHhlZSAtIDB4NjApIC8gMTYpOwkvKiAweDYwIC4uIDB4ZWUgb3Igc28gKi8KKwkJaWYgKHV2ZC0+dnBpY19vbGQuYnJpZ2h0bmVzcyA9PSBqKQorCQkJYnJlYWs7CisJCXV2ZC0+dnBpY19vbGQuYnJpZ2h0bmVzcyA9IGo7CisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIG1vZDJfYnJpZ2h0bmVzcywgaik7CisJCWJyZWFrOworCX0KKwljYXNlIElCTUNBTV9NT0RFTF8zOgorCXsKKwkJLyogTW9kZWwgMzogQnJpZ2h0bmVzcyByYW5nZSAnaScgaW4gWzB4MEMuLjB4M0ZdICovCisJCXVuc2lnbmVkIHNob3J0IGkgPQorCQkJMHgwQyArICh1dmQtPnZwaWMuYnJpZ2h0bmVzcyAvICgweEZGRkYgLyAoMHgzRiAtIDB4MEMgKyAxKSkpOworCQlSRVNUUklDVF9UT19SQU5HRShpLCAweDBDLCAweDNGKTsKKwkJaWYgKHV2ZC0+dnBpY19vbGQuYnJpZ2h0bmVzcyA9PSBpKQorCQkJYnJlYWs7CisJCXV2ZC0+dnBpY19vbGQuYnJpZ2h0bmVzcyA9IGk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMGMpOwkvKiBTdG9wICovCisJCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzNiwgaSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMTQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTBjKTsJLyogR28hICovCisJCXVzYl9jbGVhcl9oYWx0KHV2ZC0+ZGV2LCB1c2JfcmN2aXNvY3BpcGUodXZkLT5kZXYsIHV2ZC0+dmlkZW9fZW5kcCkpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTEzKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgSUJNQ0FNX01PREVMXzQ6CisJeworCQkvKiBNb2RlbCA0OiBCcmlnaHRuZXNzIHJhbmdlICdpJyBpbiBbMHgwNC4uMHhiNF0gKi8KKwkJdW5zaWduZWQgc2hvcnQgaSA9IDB4MDQgKyAodXZkLT52cGljLmJyaWdodG5lc3MgLyAoMHhGRkZGIC8gKDB4YjQgLSAweDA0ICsgMSkpKTsKKwkJUkVTVFJJQ1RfVE9fUkFOR0UoaSwgMHgwNCwgMHhiNCk7CisJCWlmICh1dmQtPnZwaWNfb2xkLmJyaWdodG5lc3MgPT0gaSkKKwkJCWJyZWFrOworCQl1dmQtPnZwaWNfb2xkLmJyaWdodG5lc3MgPSBpOworCQlpYm1jYW1fbW9kZWw0X0JyaWdodG5lc3NQYWNrZXQodXZkLCBpKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgaWJtY2FtX3NldF9odWUoc3RydWN0IHV2ZCAqdXZkKQoreworCXN3aXRjaCAoSUJNQ0FNX1QodXZkKS0+Y2FtZXJhX21vZGVsKSB7CisJY2FzZSBJQk1DQU1fTU9ERUxfMjoKKwl7CisJCXVuc2lnbmVkIHNob3J0IGh1ZSA9IHV2ZC0+dnBpYy5odWUgPj4gOTsgLyogMCAuLiA3RiAqLworCQlpZiAodXZkLT52cGljX29sZC5odWUgPT0gaHVlKQorCQkJcmV0dXJuOworCQl1dmQtPnZwaWNfb2xkLmh1ZSA9IGh1ZTsKKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgbW9kMl9odWUsIGh1ZSk7CisJCS8qIGlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIG1vZDJfc2F0dXJhdGlvbiwgc2F0KTsgKi8KKwkJYnJlYWs7CisJfQorCWNhc2UgSUJNQ0FNX01PREVMXzM6CisJeworI2lmIDAgLyogVGhpcyBzZWVtcyBub3QgdG8gd29yay4gTm8gcHJvYmxlbSwgd2lsbCBmaXggcHJvZ3JhbW1hdGljYWxseSAqLworCQl1bnNpZ25lZCBzaG9ydCBodWUgPSAweDA1ICsgKHV2ZC0+dnBpYy5odWUgLyAoMHhGRkZGIC8gKDB4MzcgLSAweDA1ICsgMSkpKTsKKwkJUkVTVFJJQ1RfVE9fUkFOR0UoaHVlLCAweDA1LCAweDM3KTsKKwkJaWYgKHV2ZC0+dnBpY19vbGQuaHVlID09IGh1ZSkKKwkJCXJldHVybjsKKwkJdXZkLT52cGljX29sZC5odWUgPSBodWU7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMGMpOwkvKiBTdG9wICovCisJCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA3ZSwgaHVlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDExNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMGMpOwkvKiBHbyEgKi8KKwkJdXNiX2NsZWFyX2hhbHQodXZkLT5kZXYsIHVzYl9yY3Zpc29jcGlwZSh1dmQtPmRldiwgdXZkLT52aWRlb19lbmRwKSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMTMpOworI2VuZGlmCisJCWJyZWFrOworCX0KKwljYXNlIElCTUNBTV9NT0RFTF80OgorCXsKKwkJdW5zaWduZWQgc2hvcnQgcl9nYWluLCBnX2dhaW4sIGJfZ2FpbiwgaHVlOworCisJCS8qCisJCSAqIEkgYW0gbm90IHN1cmUgci9nL2JfZ2FpbiB2YXJpYWJsZXMgZXhhY3RseSBjb250cm9sIGdhaW4KKwkJICogb2YgdGhvc2UgY2hhbm5lbHMuIE1vc3QgbGlrZWx5IHRoZXkgc3VidGx5IGNoYW5nZSBzb21lCisJCSAqIHZlcnkgaW50ZXJuYWwgaW1hZ2UgcHJvY2Vzc2luZyBzZXR0aW5ncyBpbiB0aGUgY2FtZXJhLgorCQkgKiBJbiBhbnkgY2FzZSwgaGVyZSBpcyB3aGF0IHRoZXkgZG8sIGFuZCBmZWVsIGZyZWUgdG8gdHdlYWs6CisJCSAqCisJCSAqIHJfZ2Fpbjogc2VyaW91c2x5IGFmZmVjdHMgcmVkIGdhaW4KKwkJICogZ19nYWluOiBzZXJpb3VzbHkgYWZmZWN0cyBncmVlbiBnYWluCisJCSAqIGJfZ2Fpbjogc2VyaW91c2x5IGFmZmVjdHMgYmx1ZSBnYWluCisJCSAqIGh1ZTogY2hhbmdlcyBhdmVyYWdlIGNvbG9yIGZyb20gdmlvbGV0ICgwKSB0byByZWQgKDB4RkYpCisJCSAqCisJCSAqIFRoZXNlIHNldHRpbmdzIGFyZSBwcmVzZXQgZm9yIGEgZGVjZW50IHdoaXRlIGJhbGFuY2UgaW4KKwkJICogMzIweDI0MCwgMzUyeDI4OCBtb2Rlcy4gTG93LXJlcyBtb2RlcyBleGhpYml0IGhpZ2hlciBjb250cmFzdAorCQkgKiBhbmQgdGhlcmVmb3JlIG1heSBuZWVkIGRpZmZlcmVudCB2YWx1ZXMgaGVyZS4KKwkJICovCisJCWh1ZSA9IDIwICsgKHV2ZC0+dnBpYy5odWUgPj4gOSk7CisJCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKKwkJY2FzZSBWSURFT1NJWkVfMTI4eDk2OgorCQkJcl9nYWluID0gOTA7CisJCQlnX2dhaW4gPSAxNjY7CisJCQliX2dhaW4gPSAxNzU7CisJCQlicmVhazsKKwkJY2FzZSBWSURFT1NJWkVfMTYweDEyMDoKKwkJCXJfZ2FpbiA9IDcwOworCQkJZ19nYWluID0gMTY2OworCQkJYl9nYWluID0gMTg1OworCQkJYnJlYWs7CisJCWNhc2UgVklERU9TSVpFXzE3NngxNDQ6CisJCQlyX2dhaW4gPSAxNjA7CisJCQlnX2dhaW4gPSAxNzU7CisJCQliX2dhaW4gPSAxODU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJfZ2FpbiA9IDEyMDsKKwkJCWdfZ2FpbiA9IDE2NjsKKwkJCWJfZ2FpbiA9IDE3NTsKKwkJCWJyZWFrOworCQl9CisJCVJFU1RSSUNUX1RPX1JBTkdFKGh1ZSwgMSwgMHg3Zik7CisKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFlLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCBnX2dhaW4sIDB4MDEyNyk7CS8qIEdyZWVuIGdhaW4gKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCByX2dhaW4sIDB4MDEyZSk7CS8qIFJlZCBnYWluICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgYl9nYWluLCAweDAxMzApOwkvKiBCbHVlIGdhaW4gKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgaHVlLCAgICAweDAxMmQpOwkvKiBIdWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGY1NDUsIDB4MDEyNCk7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBpYm1jYW1fYWRqdXN0X3BpY3R1cmUoKQorICoKKyAqIFRoaXMgcHJvY2VkdXJlIGdldHMgY2FsbGVkIGZyb20gVjRMIGludGVyZmFjZSB0byB1cGRhdGUgcGljdHVyZSBzZXR0aW5ncy4KKyAqIEhlcmUgd2UgY2hhbmdlIGJyaWdodG5lc3MgYW5kIGNvbnRyYXN0LgorICovCitzdGF0aWMgdm9pZCBpYm1jYW1fYWRqdXN0X3BpY3R1cmUoc3RydWN0IHV2ZCAqdXZkKQoreworCWlibWNhbV9hZGp1c3RfY29udHJhc3QodXZkKTsKKwlpYm1jYW1fc2V0X2JyaWdodG5lc3ModXZkKTsKKwlpYm1jYW1fc2V0X2h1ZSh1dmQpOworfQorCitzdGF0aWMgaW50IGlibWNhbV9tb2RlbDFfc2V0dXAoc3RydWN0IHV2ZCAqdXZkKQoreworCWNvbnN0IGludCBudHJpZXMgPSA1OworCWludCBpOworCisJaWJtY2FtX3ZlaW8odXZkLCAxLCAweDAwLCAweDAxMjgpOworCWlibWNhbV92ZWlvKHV2ZCwgMSwgMHgwMCwgMHgwMTAwKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDEsIDB4MDEwMCk7CS8qIExFRCBPbiAgKi8KKwlpYm1jYW1fdmVpbyh1dmQsIDEsIDB4MDAsIDB4MDEwMCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgxLCAweDAxMDApOwkvKiBMRUQgT2ZmICovCisJaWJtY2FtX3ZlaW8odXZkLCAxLCAweDAwLCAweDAxMDApOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMSwgMHgwMTAwKTsJLyogTEVEIE9uICAqLworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMSwgMHgwMTA4KTsKKworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMywgMHgwMTEyKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDEsIDB4MDAsIDB4MDExNSk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDA2LCAweDAxMTUpOworCWlibWNhbV92ZWlvKHV2ZCwgMSwgMHgwMCwgMHgwMTE2KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4NDQsIDB4MDExNik7CisJaWJtY2FtX3ZlaW8odXZkLCAxLCAweDAwLCAweDAxMTYpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg0MCwgMHgwMTE2KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDEsIDB4MDAsIDB4MDExNSk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDBlLCAweDAxMTUpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgxOSwgMHgwMTJjKTsKKworCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MDAsIDB4MWUpOworCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MzksIDB4MGQpOworCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MzksIDB4MDkpOworCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4M2IsIDB4MDApOworCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MjgsIDB4MjIpOworCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIGxpZ2h0XzI3LCAwKTsKKwlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDJiLCAweDFmKTsKKwlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCAweDM5LCAweDA4KTsKKworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MmMsIDB4MDApOworCisJZm9yIChpPTA7IGkgPCBudHJpZXM7IGkrKykKKwkJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgMHgzMCwgMHgxNCk7CisKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MzksIDB4MDIpOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgwMSwgMHhlMSk7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDAyLCAweGNkKTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MDMsIDB4Y2QpOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgwNCwgMHhmYSk7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDNmLCAweGZmKTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MzksIDB4MDApOworCisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDM5LCAweDAyKTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MGEsIDB4MzcpOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgwYiwgMHhiOCk7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDBjLCAweGYzKTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MGQsIDB4ZTMpOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgwZSwgMHgwZCk7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDBmLCAweGYyKTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MTAsIDB4ZDUpOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgxMSwgMHhiYSk7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDEyLCAweDUzKTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4M2YsIDB4ZmYpOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgzOSwgMHgwMCk7CisKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MzksIDB4MDIpOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgxNiwgMHgwMCk7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDE3LCAweDI4KTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MTgsIDB4N2QpOworCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgMHgxOSwgMHhiZSk7CisJaWJtY2FtX1BhY2tldEZvcm1hdDIodXZkLCAweDNmLCAweGZmKTsKKwlpYm1jYW1fUGFja2V0Rm9ybWF0Mih1dmQsIDB4MzksIDB4MDApOworCisJZm9yIChpPTA7IGkgPCBudHJpZXM7IGkrKykKKwkJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgMHgwMCwgMHgxOCk7CisJZm9yIChpPTA7IGkgPCBudHJpZXM7IGkrKykKKwkJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgMHgxMywgMHgxOCk7CisJZm9yIChpPTA7IGkgPCBudHJpZXM7IGkrKykKKwkJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgMHgxNCwgMHgwNik7CisKKwkvKiBUaGlzIGlzIGRlZmF1bHQgYnJpZ2h0bmVzcyAqLworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MzEsIDB4MzcpOworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MzIsIDB4NDYpOworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MzMsIDB4NTUpOworCisJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgMHgyZSwgMHgwNCk7CisJZm9yIChpPTA7IGkgPCBudHJpZXM7IGkrKykKKwkJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgMHgyZCwgMHgwNCk7CisJZm9yIChpPTA7IGkgPCBudHJpZXM7IGkrKykKKwkJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgMHgyOSwgMHg4MCk7CisJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgMHgyYywgMHgwMSk7CisJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgMHgzMCwgMHgxNyk7CisJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgMHgzOSwgMHgwOCk7CisJZm9yIChpPTA7IGkgPCBudHJpZXM7IGkrKykKKwkJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgMHgzNCwgMHgwMCk7CisKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAsIDB4MDEwMSk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwLCAweDAxMGEpOworCisJc3dpdGNoICh1dmQtPnZpZGVvc2l6ZSkgeworCWNhc2UgVklERU9TSVpFXzEyOHg5NjoKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgwLCAweDAxMDMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4NjAsIDB4MDEwNSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwYywgMHgwMTBiKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDA0LCAweDAxMWIpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDBiLCAweDAxMWQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAsIDB4MDExZSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAsIDB4MDEyOSk7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzE3NngxNDQ6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhiMCwgMHgwMTAzKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhmLCAweDAxMDUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDYsIDB4MDEwYik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwNCwgMHgwMTFiKTsJLyogU2FtZSBldmVyeXdoZXJlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwZCwgMHgwMTFkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwLCAweDAxMWUpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAzLCAweDAxMjkpOworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8zNTJ4Mjg4OgorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YjAsIDB4MDEwMyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg5MCwgMHgwMTA1KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAyLCAweDAxMGIpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDQsIDB4MDExYik7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDUsIDB4MDExZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMCwgMHgwMTFlKTsJLyogU2FtZSBldmVyeXdoZXJlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMCwgMHgwMTI5KTsKKwkJYnJlYWs7CisJfQorCisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZmLCAweDAxMmIpOworCisJLyogVGhpcyBpcyBhbm90aGVyIGJyaWdodG5lc3MgLSBkb24ndCBrbm93IHdoeSAqLworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MzEsIDB4YzMpOworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MzIsIDB4ZDIpOworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MzMsIDB4ZTEpOworCisJLyogRGVmYXVsdCBjb250cmFzdCAqLworCWZvciAoaT0wOyBpIDwgbnRyaWVzOyBpKyspCisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIGNvbnRyYXN0XzE0LCAweDBhKTsKKworCS8qIERlZmF1bHQgc2hhcnBuZXNzICovCisJZm9yIChpPTA7IGkgPCAyOyBpKyspCisJCWlibWNhbV9QYWNrZXRGb3JtYXQyKHV2ZCwgc2hhcnBfMTMsIDB4MWEpOwkvKiBMZXZlbCA0IEZJWE1FICovCisKKwkvKiBEZWZhdWx0IGxpZ2h0aW5nIGNvbmRpdGlvbnMgKi8KKwlpYm1jYW1fUGFja2V0X0Zvcm1hdDEodXZkLCBsaWdodF8yNywgbGlnaHRpbmcpOyAvKiAwPUJyaWdodCAyPUxvdyAqLworCisJLyogQXNzb3J0ZWQgaW5pdCAqLworCisJc3dpdGNoICh1dmQtPnZpZGVvc2l6ZSkgeworCWNhc2UgVklERU9TSVpFXzEyOHg5NjoKKwkJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgMHgyYiwgMHgxZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhjOSwgMHgwMTE5KTsJLyogU2FtZSBldmVyeXdoZXJlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MCwgMHgwMTA5KTsJLyogU2FtZSBldmVyeXdoZXJlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgzNiwgMHgwMTAyKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDFhLCAweDAxMDQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDQsIDB4MDExYSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MmIsIDB4MDExYyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgyMywgMHgwMTJhKTsJLyogU2FtZSBldmVyeXdoZXJlICovCisjaWYgMAorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAsIDB4MDEwNik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgzOCwgMHgwMTA3KTsKKyNlbHNlCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMiwgMHgwMTA2KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDJhLCAweDAxMDcpOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzE3NngxNDQ6CisJCWlibWNhbV9QYWNrZXRfRm9ybWF0MSh1dmQsIDB4MmIsIDB4MWUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YzksIDB4MDExOSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODAsIDB4MDEwOSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDQsIDB4MDEwMik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMiwgMHgwMTA0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDA0LCAweDAxMWEpOwkvKiBTYW1lIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDJiLCAweDAxMWMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MjMsIDB4MDEyYSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDEsIDB4MDEwNik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhjYSwgMHgwMTA3KTsKKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfMzUyeDI4ODoKKwkJaWJtY2FtX1BhY2tldF9Gb3JtYXQxKHV2ZCwgMHgyYiwgMHgxZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhjOSwgMHgwMTE5KTsJLyogU2FtZSBldmVyeXdoZXJlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MCwgMHgwMTA5KTsJLyogU2FtZSBldmVyeXdoZXJlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwOCwgMHgwMTAyKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAxLCAweDAxMDQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDQsIDB4MDExYSk7CS8qIFNhbWUgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MmYsIDB4MDExYyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgyMywgMHgwMTJhKTsJLyogU2FtZSBldmVyeXdoZXJlICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMywgMHgwMTA2KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGY2LCAweDAxMDcpOworCQlicmVhazsKKwl9CisJcmV0dXJuIChDQU1FUkFfSVNfT1BFUkFUSU9OQUwodXZkKSA/IDAgOiAtRUZBVUxUKTsKK30KKworc3RhdGljIGludCBpYm1jYW1fbW9kZWwyX3NldHVwKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTAwKTsJLyogTEVEIG9uICovCisJaWJtY2FtX3ZlaW8odXZkLCAxLCAweDAwMDAsIDB4MDExNik7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNjAsIDB4MDExNik7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDIsIDB4MDExMik7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYmMsIDB4MDEyYyk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDgsIDB4MDEyYik7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwOCk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEzMyk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEwMik7CisJc3dpdGNoICh1dmQtPnZpZGVvc2l6ZSkgeworCWNhc2UgVklERU9TSVpFXzE3NngxNDQ6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDJjLCAweDAxMDMpOwkvKiBBbGwgZXhjZXB0IDMyMHgyNDAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwNCk7CS8qIFNhbWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjQsIDB4MDEwNSk7CS8qIDE3NngxNDQsIDM1MngyODggKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYjksIDB4MDEwYSk7CS8qIFVuaXF1ZSB0byB0aGlzIG1vZGUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzgsIDB4MDExOSk7CS8qIFVuaXF1ZSB0byB0aGlzIG1vZGUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDMsIDB4MDEwNik7CS8qIFNhbWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwOTAsIDB4MDEwNyk7CS8qIFVuaXF1ZSB0byBldmVyeSBtb2RlKi8KKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfMzIweDI0MDoKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjgsIDB4MDEwMyk7CS8qIFVuaXF1ZSB0byB0aGlzIG1vZGUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwNCk7CS8qIFNhbWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWUsIDB4MDEwNSk7CS8qIDMyMHgyNDAsIDM1MngyNDAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzksIDB4MDEwYSk7CS8qIEFsbCBleGNlcHQgMTc2eDE0NCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA3MCwgMHgwMTE5KTsJLyogQWxsIGV4Y2VwdCAxNzZ4MTQ0ICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMDYpOwkvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDk4LCAweDAxMDcpOwkvKiBVbmlxdWUgdG8gZXZlcnkgbW9kZSovCisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzM1MngyNDA6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDJjLCAweDAxMDMpOwkvKiBBbGwgZXhjZXB0IDMyMHgyNDAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwNCk7CS8qIFNhbWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWUsIDB4MDEwNSk7CS8qIDMyMHgyNDAsIDM1MngyNDAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzksIDB4MDEwYSk7CS8qIEFsbCBleGNlcHQgMTc2eDE0NCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA3MCwgMHgwMTE5KTsJLyogQWxsIGV4Y2VwdCAxNzZ4MTQ0ICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMDYpOwkvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGRhLCAweDAxMDcpOwkvKiBVbmlxdWUgdG8gZXZlcnkgbW9kZSovCisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzM1MngyODg6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDJjLCAweDAxMDMpOwkvKiBBbGwgZXhjZXB0IDMyMHgyNDAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwNCk7CS8qIFNhbWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjQsIDB4MDEwNSk7CS8qIDE3NngxNDQsIDM1MngyODggKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzksIDB4MDEwYSk7CS8qIEFsbCBleGNlcHQgMTc2eDE0NCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA3MCwgMHgwMTE5KTsJLyogQWxsIGV4Y2VwdCAxNzZ4MTQ0ICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMDYpOwkvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGZlLCAweDAxMDcpOwkvKiBVbmlxdWUgdG8gZXZlcnkgbW9kZSovCisJCWJyZWFrOworCX0KKwlyZXR1cm4gKENBTUVSQV9JU19PUEVSQVRJT05BTCh1dmQpID8gMCA6IC1FRkFVTFQpOworfQorCisvKgorICogaWJtY2FtX21vZGVsMV9zZXR1cF9hZnRlcl92aWRlb19pZigpCisgKgorICogVGhpcyBjb2RlIGFkZHMgZmluaXNoaW5nIHRvdWNoZXMgdG8gdGhlIHZpZGVvIGRhdGEgaW50ZXJmYWNlLgorICogSGVyZSB3ZSBjb25maWd1cmUgdGhlIGZyYW1lIHJhdGUgYW5kIHR1cm4gb24gdGhlIExFRC4KKyAqLworc3RhdGljIHZvaWQgaWJtY2FtX21vZGVsMV9zZXR1cF9hZnRlcl92aWRlb19pZihzdHJ1Y3QgdXZkICp1dmQpCit7CisJdW5zaWduZWQgc2hvcnQgaW50ZXJuYWxfZnJhbWVfcmF0ZTsKKworCVJFU1RSSUNUX1RPX1JBTkdFKGZyYW1lcmF0ZSwgRlJBTUVSQVRFX01JTiwgRlJBTUVSQVRFX01BWCk7CisJaW50ZXJuYWxfZnJhbWVfcmF0ZSA9IEZSQU1FUkFURV9NQVggLSBmcmFtZXJhdGU7IC8qIDA9RmFzdCA2PVNsb3cgKi8KKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDEsIDB4MDEwMCk7CS8qIExFRCBPbiAgKi8KKwlpYm1jYW1fdmVpbyh1dmQsIDAsIGludGVybmFsX2ZyYW1lX3JhdGUsIDB4MDExMSk7CisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAxLCAweDAxMTQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhjMCwgMHgwMTBjKTsKK30KKworc3RhdGljIHZvaWQgaWJtY2FtX21vZGVsMl9zZXR1cF9hZnRlcl92aWRlb19pZihzdHJ1Y3QgdXZkICp1dmQpCit7CisJdW5zaWduZWQgc2hvcnQgc2V0dXBfbW9kZWwyX3JnMiwgc2V0dXBfbW9kZWwyX3NhdCwgc2V0dXBfbW9kZWwyX3liOworCisJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwMCk7CS8qIExFRCBvbiAqLworCisJc3dpdGNoICh1dmQtPnZpZGVvc2l6ZSkgeworCWNhc2UgVklERU9TSVpFXzE3NngxNDQ6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDUwLCAweDAxMTEpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBkMCwgMHgwMTExKTsKKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfMzIweDI0MDoKKwljYXNlIFZJREVPU0laRV8zNTJ4MjQwOgorCWNhc2UgVklERU9TSVpFXzM1MngyODg6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDQwLCAweDAxMTEpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTExKTsKKwkJYnJlYWs7CisJfQorCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDliLCAweDAxMGYpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGJiLCAweDAxMGYpOworCisJLyoKKwkgKiBIYXJkd2FyZSBzZXR0aW5ncywgbWF5IGFmZmVjdCBDTU9TIHNlbnNvcjsgbm90IHVzZXIgY29udHJvbHMhCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIDB4MDAwNDogbm8gZWZmZWN0CisJICogMHgwMDA2OiBoYXJkd2FyZSBlZmZlY3QKKwkgKiAweDAwMDg6IG5vIGVmZmVjdAorCSAqIDB4MDAwYTogc3RvcHMgdmlkZW8gc3RyZWFtLCBwcm9iYWJseSBpbXBvcnRhbnQgaC93IHNldHRpbmcKKwkgKiAweDAwMGM6IGNoYW5nZXMgY29sb3IgaW4gaGFyZHdhcmUgbWFubmVyIChub3QgdXNlciBzZXR0aW5nKQorCSAqIDB4MDAxMjogY2hhbmdlcyBudW1iZXIgb2YgY29sb3JzIChkb2VzIG5vdCBhZmZlY3Qgc3BlZWQpCisJICogMHgwMDJhOiBubyBlZmZlY3QKKwkgKiAweDAwMmM6IGhhcmR3YXJlIHNldHRpbmcgKHJlbGF0ZWQgdG8gc2NhbiBsaW5lcykKKwkgKiAweDAwMmU6IHN0b3BzIHZpZGVvIHN0cmVhbSwgcHJvYmFibHkgaW1wb3J0YW50IGgvdyBzZXR0aW5nCisJICovCisJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDBhLCAweDAwNWMpOworCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAwNCwgMHgwMDAwKTsKKwlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMDYsIDB4MDBmYik7CisJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDA4LCAweDAwMDApOworCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAwYywgMHgwMDA5KTsKKwlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMTIsIDB4MDAwYSk7CisJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDJhLCAweDAwMDApOworCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAyYywgMHgwMDAwKTsKKwlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMmUsIDB4MDAwOCk7CisKKwkvKgorCSAqIEZ1bmN0aW9uIDB4MDAzMCBwb3BzIHVwIGFsbCBvdmVyIHRoZSBwbGFjZS4gQXBwYXJlbnRseQorCSAqIGl0IGlzIGEgaGFyZHdhcmUgY29udHJvbCByZWdpc3Rlciwgd2l0aCBldmVyeSBiaXQgYXNzaWduZWQgdG8KKwkgKiBkbyBzb21ldGhpbmcuCisJICovCisJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDMwLCAweDAwMDApOworCisJLyoKKwkgKiBNYWdpYyBjb250cm9sIG9mIENNT1Mgc2Vuc29yLiBPbmx5IGxvd2VyIHZhbHVlcyBsaWtlCisJICogMC0zIHdvcmssIGFuZCBwaWN0dXJlIHNoaWZ0cyBsZWZ0IG9yIHJpZ2h0LiBEb24ndCBjaGFuZ2UuCisJICovCisJc3dpdGNoICh1dmQtPnZpZGVvc2l6ZSkgeworCWNhc2UgVklERU9TSVpFXzE3NngxNDQ6CisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAxNCwgMHgwMDAyKTsKKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDE2LCAweDAwMDIpOyAvKiBIb3Jpem9udGFsIHNoaWZ0ICovCisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAxOCwgMHgwMDRhKTsgLyogQW5vdGhlciBoYXJkd2FyZSBzZXR0aW5nICovCisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzMyMHgyNDA6CisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAxNCwgMHgwMDA5KTsKKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDE2LCAweDAwMDUpOyAvKiBIb3Jpem9udGFsIHNoaWZ0ICovCisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAxOCwgMHgwMDQ0KTsgLyogQW5vdGhlciBoYXJkd2FyZSBzZXR0aW5nICovCisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzM1MngyNDA6CisJCS8qIFRoaXMgbW9kZSBkb2Vzbid0IHdvcmsgYXMgV2luZG93cyBwcm9ncmFtcyBpdDsgY2hhbmdlZCB0byB3b3JrICovCisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAxNCwgMHgwMDA5KTsgLyogV2luZG93cyBzZXRzIHRoaXMgdG8gOCAqLworCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMTYsIDB4MDAwMyk7IC8qIEhvcml6b250YWwgc2hpZnQgKi8KKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDE4LCAweDAwNDQpOyAvKiBXaW5kb3dzIHNldHMgdGhpcyB0byAweDAwNDUgKi8KKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfMzUyeDI4ODoKKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDE0LCAweDAwMDMpOworCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMTYsIDB4MDAwMik7IC8qIEhvcml6b250YWwgc2hpZnQgKi8KKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDE4LCAweDAwNGEpOyAvKiBBbm90aGVyIGhhcmR3YXJlIHNldHRpbmcgKi8KKwkJYnJlYWs7CisJfQorCisJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgbW9kMl9icmlnaHRuZXNzLCAweDAwNWEpOworCisJLyoKKwkgKiBXZSBoYXZlIG91ciBvd24gZnJhbWUgcmF0ZSBzZXR0aW5nIHZhcnlpbmcgZnJvbSAwIChzbG93ZXN0KSB0byA2IChmYXN0ZXN0KS4KKwkgKiBUaGUgY2FtZXJhIG1vZGVsIDIgYWxsb3dzIGZyYW1lIHJhdGUgaW4gcmFuZ2UgWzAuLjB4MUZdIHdoZXJlIDAgaXMgYWxzbyB0aGUKKwkgKiBzbG93ZXN0IHNldHRpbmcuIEhvd2V2ZXIgZm9yIGFsbCBwcmFjdGljYWwgcmVhc29ucyBoaWdoIHNldHRpbmdzIG1ha2Ugbm8KKwkgKiBzZW5zZSBiZWNhdXNlIFVTQiBpcyBub3QgZmFzdCBlbm91Z2ggdG8gc3VwcG9ydCBoaWdoIEZQUy4gQmUgYXdhcmUgdGhhdAorCSAqIHRoZSBwaWN0dXJlIGRhdGFzdHJlYW0gd2lsbCBiZSBzZXZlcmVseSBkaXNydXB0ZWQgaWYgeW91IGFzayBmb3IKKwkgKiBmcmFtZSByYXRlIGZhc3RlciB0aGFuIGFsbG93ZWQgZm9yIHRoZSB2aWRlbyBzaXplIC0gc2VlIGJlbG93OgorCSAqCisJICogQWxsb3dhYmxlIHJhbmdlcyAob2J0YWluZWQgZXhwZXJpbWVudGFsbHkgb24gT0hDSSwgSzYtMywgNDUwIE1Ieik6CisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAxNzZ4MTQ0OiBbNi4uMzFdCisJICogMzIweDI0MDogWzguLjMxXQorCSAqIDM1MngyNDA6IFsxMC4uMzFdCisJICogMzUyeDI4ODogWzE2Li4zMV0gSSBoYXZlIHRvIHJhaXNlIGxvd2VyIHRocmVzaG9sZCBmb3Igc3RhYmlsaXR5Li4uCisJICoKKwkgKiBBcyB1c3VhbCwgc2xvd2VyIEZQUyBwcm92aWRlcyBiZXR0ZXIgc2Vuc2l0aXZpdHkuCisJICovCisJeworCQlzaG9ydCBod19mcHM9MzEsIGlfZnJhbWVyYXRlOworCisJCVJFU1RSSUNUX1RPX1JBTkdFKGZyYW1lcmF0ZSwgRlJBTUVSQVRFX01JTiwgRlJBTUVSQVRFX01BWCk7CisJCWlfZnJhbWVyYXRlID0gRlJBTUVSQVRFX01BWCAtIGZyYW1lcmF0ZSArIEZSQU1FUkFURV9NSU47CisJCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKKwkJY2FzZSBWSURFT1NJWkVfMTc2eDE0NDoKKwkJCWh3X2ZwcyA9IDYgKyBpX2ZyYW1lcmF0ZSo0OworCQkJYnJlYWs7CisJCWNhc2UgVklERU9TSVpFXzMyMHgyNDA6CisJCQlod19mcHMgPSA4ICsgaV9mcmFtZXJhdGUqMzsKKwkJCWJyZWFrOworCQljYXNlIFZJREVPU0laRV8zNTJ4MjQwOgorCQkJaHdfZnBzID0gMTAgKyBpX2ZyYW1lcmF0ZSoyOworCQkJYnJlYWs7CisJCWNhc2UgVklERU9TSVpFXzM1MngyODg6CisJCQlod19mcHMgPSAyOCArIGlfZnJhbWVyYXRlLzI7CisJCQlicmVhazsKKwkJfQorCQlpZiAodXZkLT5kZWJ1ZyA+IDApCisJCQlpbmZvKCJGcmFtZXJhdGUgKGhhcmR3YXJlKTogJWhkLiIsIGh3X2Zwcyk7CisJCVJFU1RSSUNUX1RPX1JBTkdFKGh3X2ZwcywgMCwgMzEpOworCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCBtb2QyX3NldF9mcmFtZXJhdGUsIGh3X2Zwcyk7CisJfQorCisJLyoKKwkgKiBUaGlzIHNldHRpbmcgZG9lcyBub3QgdmlzaWJseSBhZmZlY3QgcGljdHVyZXM7IGxlZnQgaXQgaGVyZQorCSAqIGJlY2F1c2UgaXQgd2FzIHByZXNlbnQgaW4gV2luZG93cyBVU0IgZGF0YSBzdHJlYW0uIFRoaXMgZnVuY3Rpb24KKwkgKiBkb2VzIG5vdCBhbGxvdyBhcmJpdHJhcnkgdmFsdWVzIGFuZCBhcHBhcmVudGx5IGlzIGEgYml0IG1hc2ssIHRvCisJICogYmUgYWN0aXZhdGVkIG9ubHkgYXQgYXBwcm9wcmlhdGUgdGltZS4gRG9uJ3QgY2hhbmdlIGl0IHJhbmRvbWx5IQorCSAqLworCXN3aXRjaCAodXZkLT52aWRlb3NpemUpIHsKKwljYXNlIFZJREVPU0laRV8xNzZ4MTQ0OgorCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMjYsIDB4MDBjMik7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzMyMHgyNDA6CisJCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAyNiwgMHgwMDQ0KTsKKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfMzUyeDI0MDoKKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDI2LCAweDAwNDYpOworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8zNTJ4Mjg4OgorCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMjYsIDB4MDA0OCk7CisJCWJyZWFrOworCX0KKworCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIG1vZDJfc2Vuc2l0aXZpdHksIGxpZ2h0aW5nKTsKKworCWlmIChpbml0X21vZGVsMl9yZzIgPj0gMCkgeworCQlSRVNUUklDVF9UT19SQU5HRShpbml0X21vZGVsMl9yZzIsIDAsIDI1NSk7CisJCXNldHVwX21vZGVsMl9yZzIgPSBpbml0X21vZGVsMl9yZzI7CisJfSBlbHNlCisJCXNldHVwX21vZGVsMl9yZzIgPSAweDAwMmY7CisKKwlpZiAoaW5pdF9tb2RlbDJfc2F0ID49IDApIHsKKwkJUkVTVFJJQ1RfVE9fUkFOR0UoaW5pdF9tb2RlbDJfc2F0LCAwLCAyNTUpOworCQlzZXR1cF9tb2RlbDJfc2F0ID0gaW5pdF9tb2RlbDJfc2F0OworCX0gZWxzZQorCQlzZXR1cF9tb2RlbDJfc2F0ID0gMHgwMDM0OworCisJaWYgKGluaXRfbW9kZWwyX3liID49IDApIHsKKwkJUkVTVFJJQ1RfVE9fUkFOR0UoaW5pdF9tb2RlbDJfeWIsIDAsIDI1NSk7CisJCXNldHVwX21vZGVsMl95YiA9IGluaXRfbW9kZWwyX3liOworCX0gZWxzZQorCQlzZXR1cF9tb2RlbDJfeWIgPSAweDAwYTA7CisKKwlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCBtb2QyX2NvbG9yX2JhbGFuY2VfcmcyLCBzZXR1cF9tb2RlbDJfcmcyKTsKKwlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCBtb2QyX3NhdHVyYXRpb24sIHNldHVwX21vZGVsMl9zYXQpOworCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIG1vZDJfY29sb3JfYmFsYW5jZV95Yiwgc2V0dXBfbW9kZWwyX3liKTsKKwlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCBtb2QyX2h1ZSwgdXZkLT52cGljLmh1ZSA+PiA5KTsgLyogMCAuLiA3RiAqLzsKKworCS8qIEhhcmR3YXJlIGNvbnRyb2wgY29tbWFuZCAqLworCWlibWNhbV9tb2RlbDJfUGFja2V0MSh1dmQsIDB4MDAzMCwgMHgwMDA0KTsKKworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMGMpOwkvKiBHbyBjYW1lcmEsIGdvISAqLworCXVzYl9jbGVhcl9oYWx0KHV2ZC0+ZGV2LCB1c2JfcmN2aXNvY3BpcGUodXZkLT5kZXYsIHV2ZC0+dmlkZW9fZW5kcCkpOworfQorCitzdGF0aWMgdm9pZCBpYm1jYW1fbW9kZWw0X3NldHVwX2FmdGVyX3ZpZGVvX2lmKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlzd2l0Y2ggKHV2ZC0+dmlkZW9zaXplKSB7CisJY2FzZSBWSURFT1NJWkVfMTI4eDk2OgorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTAwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDExMSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGJjLCAweDAxMmMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA4MCwgMHgwMTJiKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwOCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMzMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA5YiwgMHgwMTBmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYmIsIDB4MDEwZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDBhLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNWMsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDQsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZmIsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMDU1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwYywgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDksIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhhYTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTIsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmZmYSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM0LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA3MCwgMHgwMTE5KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZDIsIDB4MDEwNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMDYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA1ZSwgMHgwMTA3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDMsIDB4MDEwNik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGQwLCAweDAxMTEpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOSwgMHgwMTBhKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEwMik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI4LCAweDAxMDMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTA0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWUsIDB4MDEwNSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxNiwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDBhLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgyYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE0LCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMGEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDVhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OTU0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE4LCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA0MywgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDA1NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWMsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGViLCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YWEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDMyLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODJhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzYsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZmZmEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxZSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE3LCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxMywgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxNywgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNzgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDEwYyk7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzE2MHgxMjA6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTExKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYmMsIDB4MDEyYyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDgwLCAweDAxMmIpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTA4KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEzMyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDliLCAweDAxMGYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBiYiwgMHgwMTBmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM4LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMGEsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA1YywgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBmYiwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQwNTUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDBjLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOSwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGFhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxMiwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgyYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDJhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZmZhLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzQsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM4LCAweDAxMTkpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBkOCwgMHgwMTA3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDIsIDB4MDEwNik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGQwLCAweDAxMTEpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBiOSwgMHgwMTBhKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEwMik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDI4LCAweDAxMDMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTA0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWUsIDB4MDEwNSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxNiwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDBiLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgyYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE0LCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMGEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDVhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OTU0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE4LCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA0MywgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDA1NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWMsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGM3LCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YWEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDMyLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjUsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODJhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzYsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZmZmEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxZSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDQ4LCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzNSwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZDAsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA0OCwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwOTAsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDEwYyk7CisJCWJyZWFrOworCWNhc2UgVklERU9TSVpFXzE3NngxNDQ6CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTExKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYmMsIDB4MDEyYyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDgwLCAweDAxMmIpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTA4KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEzMyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDliLCAweDAxMGYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBiYiwgMHgwMTBmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM4LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMGEsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA1YywgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBmYiwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQwNTUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDBjLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOSwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGFhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxMiwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgyYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDJhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZmZhLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzQsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM4LCAweDAxMTkpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBkNiwgMHgwMTA3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDMsIDB4MDEwNik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE4LCAweDAxMDcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTA2KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZDAsIDB4MDExMSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGI5LCAweDAxMGEpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTAyKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMmMsIDB4MDEwMyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyNCwgMHgwMTA1KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE2LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDcsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODJhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTQsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFhLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEwYSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNWUsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg5NTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTgsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDQ5LCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMDU1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxYywgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzcsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhhYTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzIsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyOCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzNiwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmZmYSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFlLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDEzLCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDEwLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA2ZCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM4LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDQsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTBjKTsKKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfMzIweDI0MDoKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMTEpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBiYywgMHgwMTJjKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwODAsIDB4MDEyYik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMDgpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTMzKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwOWIsIDB4MDEwZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGJiLCAweDAxMGYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwYSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDVjLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGZiLCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDA1NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMGMsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA5LCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YWEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDEyLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDgsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODJhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMmEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZmZmEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzNCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNzAsIDB4MDExOSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGQyLCAweDAxMDcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTA2KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNWUsIDB4MDEwNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMDYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBkMCwgMHgwMTExKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzksIDB4MDEwYSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMDIpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyOCwgMHgwMTAzKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFlLCAweDAxMDUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTYsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwYSwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxNCwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTBhLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA1YSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDk1NDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxOCwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNDMsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQwNTUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFjLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBlYiwgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGFhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzMiwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgyYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM2LCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZmZhLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWUsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxNywgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTMsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDMxLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTcsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDc4LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMGMpOworCQlicmVhazsKKwljYXNlIFZJREVPU0laRV8zNTJ4Mjg4OgorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTAwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDExMSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGJjLCAweDAxMmMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA4MCwgMHgwMTJiKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwOCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMzMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA5YiwgMHgwMTBmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYmIsIDB4MDEwZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDBhLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNWMsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDQsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZmIsIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OGEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMDU1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwYywgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDksIDB4MDEyZSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhhYTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTIsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQxLCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwOCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4MmE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyYSwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmZmYSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM0LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhmZWE4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA3MCwgMHgwMTE5KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZjIsIDB4MDEwNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAzLCAweDAxMDYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA4YywgMHgwMTA3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDMsIDB4MDEwNik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMTEpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOSwgMHgwMTBhKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDEsIDB4MDEwMik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDJjLCAweDAxMDMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTA0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjQsIDB4MDEwNSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxNiwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA2LCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgyYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE0LCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMiwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDUsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxYSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMGEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDVlLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4OTU0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDE4LCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA0OSwgMHgwMTMwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDhhMjgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDA1NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMWMsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGNmLCAweDAxMmUpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4YWEyOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYWEsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDMyLCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0MSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyNyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMzApOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ODJhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMzYsIDB4MDEyZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMmYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZDE0NSwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZmZmEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxZSwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDEwLCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxMywgMHgwMTJlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjUsIDB4MDEzMCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHg4YTI4LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxMCwgMHgwMTJkKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNDgsIDB4MDEyZik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHhkMTQ1LCAweDAxMjQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGZlYTgsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGFhLCAweDAxMmQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAzOCwgMHgwMTJmKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGQxNDEsIDB4MDEyNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMjcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4ZmVhOCwgMHgwMTI0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwYzAsIDB4MDEwYyk7CisJCWJyZWFrOyAKKwl9CisJdXNiX2NsZWFyX2hhbHQodXZkLT5kZXYsIHVzYl9yY3Zpc29jcGlwZSh1dmQtPmRldiwgdXZkLT52aWRlb19lbmRwKSk7Cit9CisKK3N0YXRpYyB2b2lkIGlibWNhbV9tb2RlbDNfc2V0dXBfYWZ0ZXJfdmlkZW9faWYoc3RydWN0IHV2ZCAqdXZkKQoreworCWludCBpOworCS8qCisJICogMDEuMDEuMDggLSBBZGRlZCBmb3IgUkNBIHZpZGVvIGluIHN1cHBvcnQgLUxPCisJICogVGhpcyBzdHJ1Y3QgaXMgdXNlZCB0byBpbml0IHRoZSBNb2RlbDMgY2FtIHRvIHVzZSB0aGUgUkNBIHZpZGVvIGluIHBvcnQKKwkgKiBpbnN0ZWFkIG9mIHRoZSBDQ0Qgc2Vuc29yLgorCSAqLworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RydWN0X2luaXREYXRhIGluaXREYXRhW10gPSB7CisJCXswLCAweDAwMDAsIDB4MDEwY30sCisJCXswLCAweDAwMDYsIDB4MDEyY30sCisJCXswLCAweDAwNzgsIDB4MDEyZH0sCisJCXswLCAweDAwNDYsIDB4MDEyZn0sCisJCXswLCAweGQxNDEsIDB4MDEyNH0sCisJCXswLCAweDAwMDAsIDB4MDEyN30sCisJCXswLCAweGZlYTgsIDB4MDEyNH0sCisJCXsxLCAweDAwMDAsIDB4MDExNn0sCisJCXswLCAweDAwNjQsIDB4MDExNn0sCisJCXsxLCAweDAwMDAsIDB4MDExNX0sCisJCXswLCAweDAwMDMsIDB4MDExNX0sCisJCXswLCAweDAwMDgsIDB4MDEyM30sCisJCXswLCAweDAwMDAsIDB4MDExN30sCisJCXswLCAweDAwMDAsIDB4MDExMn0sCisJCXswLCAweDAwODAsIDB4MDEwMH0sCisJCXswLCAweDAwMDAsIDB4MDEwMH0sCisJCXsxLCAweDAwMDAsIDB4MDExNn0sCisJCXswLCAweDAwNjAsIDB4MDExNn0sCisJCXswLCAweDAwMDIsIDB4MDExMn0sCisJCXswLCAweDAwMDAsIDB4MDEyM30sCisJCXswLCAweDAwMDEsIDB4MDExN30sCisJCXswLCAweDAwNDAsIDB4MDEwOH0sCisJCXswLCAweDAwMTksIDB4MDEyY30sCisJCXswLCAweDAwNDAsIDB4MDExNn0sCisJCXswLCAweDAwMGEsIDB4MDExNX0sCisJCXswLCAweDAwMGIsIDB4MDExNX0sCisJCXswLCAweDAwNzgsIDB4MDEyZH0sCisJCXswLCAweDAwNDYsIDB4MDEyZn0sCisJCXswLCAweGQxNDEsIDB4MDEyNH0sCisJCXswLCAweDAwMDAsIDB4MDEyN30sCisJCXswLCAweGZlYTgsIDB4MDEyNH0sCisJCXswLCAweDAwNjQsIDB4MDExNn0sCisJCXswLCAweDAwMDAsIDB4MDExNX0sCisJCXswLCAweDAwMDEsIDB4MDExNX0sCisJCXswLCAweGZmZmYsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwYWEsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZmYsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwZjIsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMGYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZmYsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwZjgsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwZmMsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZmYsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwZjksIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwM2MsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZmYsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMjcsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMTksIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzcsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMjEsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzgsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwNDUsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzcsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDEsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMmEsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzgsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMGUsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzcsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDEsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMmIsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzgsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDEsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwZjQsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzcsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDEsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMmMsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzgsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDEsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDQsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzcsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDEsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMmQsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzgsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMTQsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzcsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDEsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMmUsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzgsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDMsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzcsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDEsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMmYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzgsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDMsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMTQsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzcsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDEsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwNDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzgsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwNDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzcsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDEsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwNTMsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzgsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzgsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweDAwMDAsIDB4MDEwMX0sCisJCXswLCAweDAwYTAsIDB4MDEwM30sCisJCXswLCAweDAwNzgsIDB4MDEwNX0sCisJCXswLCAweDAwMDAsIDB4MDEwYX0sCisJCXswLCAweDAwMjQsIDB4MDEwYn0sCisJCXswLCAweDAwMjgsIDB4MDExOX0sCisJCXswLCAweDAwODgsIDB4MDExYn0sCisJCXswLCAweDAwMDIsIDB4MDExZH0sCisJCXswLCAweDAwMDMsIDB4MDExZX0sCisJCXswLCAweDAwMDAsIDB4MDEyOX0sCisJCXswLCAweDAwZmMsIDB4MDEyYn0sCisJCXswLCAweDAwMDgsIDB4MDEwMn0sCisJCXswLCAweDAwMDAsIDB4MDEwNH0sCisJCXswLCAweDAwMDgsIDB4MDExYX0sCisJCXswLCAweDAwMjgsIDB4MDExY30sCisJCXswLCAweDAwMjEsIDB4MDEyYX0sCisJCXswLCAweDAwMDAsIDB4MDExOH0sCisJCXswLCAweDAwMDAsIDB4MDEzMn0sCisJCXswLCAweDAwMDAsIDB4MDEwOX0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzcsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDEsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzEsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzgsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzcsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDEsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwNDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzgsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwNDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzcsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwZGMsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzgsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzcsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDEsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzIsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzgsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDEsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMjAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzcsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDEsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwNDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzgsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwNDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzcsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweGZmZjksIDB4MDEyNH0sCisJCXswLCAweDAwODYsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMzgsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDgsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweDAwMDAsIDB4MDEyN30sCisJCXswLCAweGZmZjgsIDB4MDEyNH0sCisJCXswLCAweGZmZmQsIDB4MDEyNH0sCisJCXswLCAweGZmZmEsIDB4MDEyNH0sCisJCXswLCAweDAwMDMsIDB4MDEwNn0sCisJCXswLCAweDAwNjIsIDB4MDEwN30sCisJCXswLCAweDAwMDMsIDB4MDExMX0sCisJfTsKKyNkZWZpbmUgTlVNX0lOSVRfREFUQSAKKworCXVuc2lnbmVkIHNob3J0IGNvbXByZXNzaW9uID0gMDsJLyogMD1ub25lLCA3PWJlc3QgZnJhbWUgcmF0ZSAgKi8KKwlpbnQgZl9yYXRlOyAvKiAwPUZhc3Rlc3QgNz1zbG93ZXN0ICovCisKKwlpZiAoSUJNQ0FNX1QodXZkKS0+aW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKworCS8qIEludGVybmFsIGZyYW1lIHJhdGUgaXMgY29udHJvbGxlZCBieSBmX3JhdGUgdmFsdWUgKi8KKwlmX3JhdGUgPSA3IC0gZnJhbWVyYXRlOworCVJFU1RSSUNUX1RPX1JBTkdFKGZfcmF0ZSwgMCwgNyk7CisKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTAwKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDEsIDB4MDAwMCwgMHgwMTE2KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA2MCwgMHgwMTE2KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMiwgMHgwMTEyKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTIzKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMSwgMHgwMTE3KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA0MCwgMHgwMTA4KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxOSwgMHgwMTJjKTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA2MCwgMHgwMTE2KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMiwgMHgwMTE1KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTE1KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDEsIDB4MDAwMCwgMHgwMTE1KTsKKwlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwYiwgMHgwMTE1KTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMGEsIDB4MDA0MCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDBiLCAweDAwZjYpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAwYywgMHgwMDAyKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMGQsIDB4MDAyMCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDBlLCAweDAwMzMpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAwZiwgMHgwMDA3KTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMTAsIDB4MDAwMCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDExLCAweDAwNzApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAxMiwgMHgwMDMwKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMTMsIDB4MDAwMCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDE0LCAweDAwMDEpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAxNSwgMHgwMDAxKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMTYsIDB4MDAwMSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDE3LCAweDAwMDEpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAxOCwgMHgwMDAwKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMWUsIDB4MDBjMyk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDIwLCAweDAwMDApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAyOCwgMHgwMDEwKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMjksIDB4MDA1NCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDJhLCAweDAwMTMpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAyYiwgMHgwMDA3KTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMmQsIDB4MDAyOCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDJlLCAweDAwMDApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzMSwgMHgwMDAwKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMzIsIDB4MDAwMCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDMzLCAweDAwMDApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzNCwgMHgwMDAwKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMzUsIDB4MDAzOCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDNhLCAweDAwMDEpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzYywgMHgwMDFlKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwM2YsIDB4MDAwYSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDQxLCAweDAwMDApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA0NiwgMHgwMDNmKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNDcsIDB4MDAwMCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDUwLCAweDAwMDUpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1MiwgMHgwMDFhKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNTMsIDB4MDAwMyk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDVhLCAweDAwNmIpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1ZCwgMHgwMDFlKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNWUsIDB4MDAzMCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDVmLCAweDAwNDEpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA2NCwgMHgwMDA4KTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNjUsIDB4MDAxNSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDY4LCAweDAwMGYpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA3OSwgMHgwMDAwKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwN2EsIDB4MDAwMCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDdjLCAweDAwM2YpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA4MiwgMHgwMDBmKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwODUsIDB4MDAwMCk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDk5LCAweDAwMDApOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA5YiwgMHgwMDIzKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwOWMsIDB4MDAyMik7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDlkLCAweDAwOTYpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA5ZSwgMHgwMDk2KTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwOWYsIDB4MDAwYSk7CisKKwlzd2l0Y2ggKHV2ZC0+dmlkZW9zaXplKSB7CisJY2FzZSBWSURFT1NJWkVfMTYweDEyMDoKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwMSk7IC8qIFNhbWUgb24gMTc2eDE0NCwgMzIweDI0MCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhMCwgMHgwMTAzKTsgLyogU2FtZSBvbiAxNzZ4MTQ0LCAzMjB4MjQwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDc4LCAweDAxMDUpOyAvKiBTYW1lIG9uIDE3NngxNDQsIDMyMHgyNDAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwYSk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjQsIDB4MDEwYik7IC8qIERpZmZlcnMgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhOSwgMHgwMTE5KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTYsIDB4MDExYik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAyLCAweDAxMWQpOyAvKiBTYW1lIG9uIDE3NngxNDQsIDMyMHgyNDAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDMsIDB4MDExZSk7IC8qIFNhbWUgb24gMTc2eDE0NCwgNjQweDQ4MCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTI5KTsgLyogU2FtZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBmYywgMHgwMTJiKTsgLyogU2FtZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxOCwgMHgwMTAyKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDQsIDB4MDEwNCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMWEpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyOCwgMHgwMTFjKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjIsIDB4MDEyYSk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDExOCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMzIpOworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMjEsIDB4MDAwMSk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCBjb21wcmVzc2lvbiwgMHgwMTA5KTsKKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfMzIweDI0MDoKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwMSk7IC8qIFNhbWUgb24gMTc2eDE0NCwgMzIweDI0MCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhMCwgMHgwMTAzKTsgLyogU2FtZSBvbiAxNzZ4MTQ0LCAzMjB4MjQwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDc4LCAweDAxMDUpOyAvKiBTYW1lIG9uIDE3NngxNDQsIDMyMHgyNDAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwYSk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjgsIDB4MDEwYik7IC8qIERpZmZlcnMgZXZlcnl3aGVyZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMiwgMHgwMTFkKTsgLyogU2FtZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTFlKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEyOSk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZmMsIDB4MDEyYik7IC8qIFNhbWUgKi8KKwkJLyogNCBjb21tYW5kcyBmcm9tIDE2MHgxMjAgc2tpcHBlZCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyMiwgMHgwMTJhKTsgLyogU2FtZSAqLworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMjEsIDB4MDAwMSk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCBjb21wcmVzc2lvbiwgMHgwMTA5KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZDksIDB4MDExOSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA2LCAweDAxMWIpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyMSwgMHgwMTAyKTsgLyogU2FtZSBvbiAzMjB4MjQwLCA2NDB4NDgwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDEwLCAweDAxMDQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNCwgMHgwMTFhKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwM2YsIDB4MDExYyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDFjLCAweDAxMTgpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTMyKTsKKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfNjQweDQ4MDoKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZjAsIDB4MDEwNSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMGEpOyAvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDM4LCAweDAxMGIpOyAvKiBEaWZmZXJzIGV2ZXJ5d2hlcmUgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwZDksIDB4MDExOSk7IC8qIFNhbWUgb24gMzIweDI0MCwgNjQweDQ4MCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNiwgMHgwMTFiKTsgLyogU2FtZSBvbiAzMjB4MjQwLCA2NDB4NDgwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMWQpOyAvKiBOQyAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMywgMHgwMTFlKTsgLyogU2FtZSBvbiAxNzZ4MTQ0LCA2NDB4NDgwICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMjkpOyAvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGZjLCAweDAxMmIpOyAvKiBTYW1lICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDIxLCAweDAxMDIpOyAvKiBTYW1lIG9uIDMyMHgyNDAsIDY0MHg0ODAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMTYsIDB4MDEwNCk7IC8qIE5DICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA0LCAweDAxMWEpOyAvKiBTYW1lIG9uIDMyMHgyNDAsIDY0MHg0ODAgKi8KKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwM2YsIDB4MDExYyk7IC8qIFNhbWUgb24gMzIweDI0MCwgNjQweDQ4MCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAyMiwgMHgwMTJhKTsgLyogU2FtZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAxYywgMHgwMTE4KTsgLyogU2FtZSBvbiAzMjB4MjQwLCA2NDB4NDgwICovCisJCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAyMSwgMHgwMDAxKTsgLyogU2FtZSAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIGNvbXByZXNzaW9uLCAweDAxMDkpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDA0MCwgMHgwMTAxKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwNDAsIDB4MDEwMyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMzIpOyAvKiBTYW1lIG9uIDMyMHgyNDAsIDY0MHg0ODAgKi8KKwkJYnJlYWs7CisJfQorCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA3ZSwgMHgwMDBlKTsJLyogSHVlICovCisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDM2LCAweDAwMTEpOwkvKiBCcmlnaHRuZXNzICovCisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDYwLCAweDAwMDIpOwkvKiBTaGFycG5lc3MgKi8KKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNjEsIDB4MDAwNCk7CS8qIFNoYXJwbmVzcyAqLworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA2MiwgMHgwMDA1KTsJLyogU2hhcnBuZXNzICovCisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDYzLCAweDAwMTQpOwkvKiBTaGFycG5lc3MgKi8KKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwOTYsIDB4MDBhMCk7CS8qIFJlZCBnYWluICovCisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDk3LCAweDAwOTYpOwkvKiBCbHVlIGdhaW4gKi8KKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNjcsIDB4MDAwMSk7CS8qIENvbnRyYXN0ICovCisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDViLCAweDAwMGMpOwkvKiBDb250cmFzdCAqLworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1YywgMHgwMDE2KTsJLyogQ29udHJhc3QgKi8KKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwOTgsIDB4MDAwYik7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDJjLCAweDAwMDMpOwkvKiBXYXMgMSwgYnJva2UgNjQweDQ4MCAqLworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAyZiwgMHgwMDJhKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMzAsIDB4MDAyOSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDM3LCAweDAwMDIpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzOCwgMHgwMDU5KTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwM2QsIDB4MDAyZSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDNlLCAweDAwMjgpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA3OCwgMHgwMDA1KTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwN2IsIDB4MDAxMSk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDdkLCAweDAwNGIpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA3ZiwgMHgwMDIyKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwODAsIDB4MDAwYyk7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDgxLCAweDAwMGIpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA4MywgMHgwMGZkKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwODYsIDB4MDAwYik7CisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDg3LCAweDAwMGIpOworCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA3ZSwgMHgwMDBlKTsKKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwOTYsIDB4MDBhMCk7CS8qIFJlZCBnYWluICovCisJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDk3LCAweDAwOTYpOwkvKiBCbHVlIGdhaW4gKi8KKwlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwOTgsIDB4MDAwYik7CisKKwlzd2l0Y2ggKHV2ZC0+dmlkZW9zaXplKSB7CisJY2FzZSBWSURFT1NJWkVfMTYweDEyMDoKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDIsIDB4MDEwNik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMDcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIGZfcmF0ZSwgMHgwMTExKTsJLyogRnJhbWUgcmF0ZSAqLworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMWYsIDB4MDAwMCk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDM5LCAweDAwMWYpOyAvKiBTYW1lICovCisJCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzYiwgMHgwMDNjKTsgLyogU2FtZSAqLworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNDAsIDB4MDAwYSk7CisJCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1MSwgMHgwMDBhKTsKKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfMzIweDI0MDoKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDMsIDB4MDEwNik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDYyLCAweDAxMDcpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIGZfcmF0ZSwgMHgwMTExKTsJLyogRnJhbWUgcmF0ZSAqLworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMWYsIDB4MDAwMCk7IC8qIFNhbWUgKi8KKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDM5LCAweDAwMWYpOyAvKiBTYW1lICovCisJCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzYiwgMHgwMDNjKTsgLyogU2FtZSAqLworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNDAsIDB4MDAwOCk7CisJCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDA1MSwgMHgwMDBiKTsKKwkJYnJlYWs7CisJY2FzZSBWSURFT1NJWkVfNjQweDQ4MDoKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDIsIDB4MDEwNik7CS8qIEFkanVzdG1lbnRzICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGI0LCAweDAxMDcpOwkvKiBBZGp1c3RtZW50cyAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIGZfcmF0ZSwgMHgwMTExKTsJLyogRnJhbWUgcmF0ZSAqLworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwMWYsIDB4MDAwMik7IC8qICFTYW1lICovCisJCWlibWNhbV9tb2RlbDNfUGFja2V0MSh1dmQsIDB4MDAzOSwgMHgwMDNlKTsgLyogIVNhbWUgKi8KKwkJaWJtY2FtX21vZGVsM19QYWNrZXQxKHV2ZCwgMHgwMDQwLCAweDAwMDgpOworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNTEsIDB4MDAwYSk7CisJCWJyZWFrOworCX0KKworCS8qIDAxLjAxLjA4IC0gQWRkZWQgZm9yIFJDQSB2aWRlbyBpbiBzdXBwb3J0IC1MTyAqLworCWlmKGluaXRfbW9kZWwzX2lucHV0KSB7CisJCWlmIChkZWJ1ZyA+IDApCisJCQlpbmZvKCJTZXR0aW5nIGlucHV0IHRvIFJDQS4iKTsKKwkJZm9yIChpPTA7IGkgPCAoc2l6ZW9mKGluaXREYXRhKS9zaXplb2YoaW5pdERhdGFbMF0pKTsgaSsrKSB7CisJCQlpYm1jYW1fdmVpbyh1dmQsIGluaXREYXRhW2ldLnJlcSwgaW5pdERhdGFbaV0udmFsdWUsIGluaXREYXRhW2ldLmluZGV4KTsKKwkJfQorCX0KKworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMTQpOworCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMGMwLCAweDAxMGMpOworCXVzYl9jbGVhcl9oYWx0KHV2ZC0+ZGV2LCB1c2JfcmN2aXNvY3BpcGUodXZkLT5kZXYsIHV2ZC0+dmlkZW9fZW5kcCkpOworfQorCisvKgorICogaWJtY2FtX3ZpZGVvX3N0b3AoKQorICoKKyAqIFRoaXMgY29kZSB0ZWxscyBjYW1lcmEgdG8gc3RvcCBzdHJlYW1pbmcuIFRoZSBpbnRlcmZhY2UgcmVtYWlucworICogY29uZmlndXJlZCBhbmQgYmFuZHdpZHRoIC0gY2xhaW1lZC4KKyAqLworc3RhdGljIHZvaWQgaWJtY2FtX3ZpZGVvX3N0b3Aoc3RydWN0IHV2ZCAqdXZkKQoreworCXN3aXRjaCAoSUJNQ0FNX1QodXZkKS0+Y2FtZXJhX21vZGVsKSB7CisJY2FzZSBJQk1DQU1fTU9ERUxfMToKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwLCAweDAxMGMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAsIDB4MDEwYyk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMSwgMHgwMTE0KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweGMwLCAweDAxMGMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAsIDB4MDEwYyk7CisJCWlibWNhbV9zZW5kX0ZGXzA0XzAyKHV2ZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMSwgMHgwMCwgMHgwMTAwKTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDgxLCAweDAxMDApOwkvKiBMRUQgT2ZmICovCisJCWJyZWFrOworCWNhc2UgSUJNQ0FNX01PREVMXzI6CitjYXNlIElCTUNBTV9NT0RFTF80OgorCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTBjKTsJLyogU3RvcCB0aGUgY2FtZXJhICovCisKKwkJaWJtY2FtX21vZGVsMl9QYWNrZXQxKHV2ZCwgMHgwMDMwLCAweDAwMDQpOworCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDgwLCAweDAxMDApOwkvKiBMRUQgT2ZmICovCisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDIwLCAweDAxMTEpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBhMCwgMHgwMTExKTsKKworCQlpYm1jYW1fbW9kZWwyX1BhY2tldDEodXZkLCAweDAwMzAsIDB4MDAwMik7CisKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMjAsIDB4MDExMSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAwLCAweDAxMTIpOworCQlicmVhazsKKwljYXNlIElCTUNBTV9NT0RFTF8zOgorI2lmIDEKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDEwYyk7CisKKwkJLyogSGVyZSB3ZSBhcmUgc3VwcG9zZWQgdG8gc2VsZWN0IHZpZGVvIGludGVyZmFjZSBhbHQuIHNldHRpbmcgMCAqLworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwNiwgMHgwMTJjKTsKKworCQlpYm1jYW1fbW9kZWwzX1BhY2tldDEodXZkLCAweDAwNDYsIDB4MDAwMCk7CisKKwkJaWJtY2FtX3ZlaW8odXZkLCAxLCAweDAwMDAsIDB4MDExNik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDY0LCAweDAxMTYpOworCQlpYm1jYW1fdmVpbyh1dmQsIDEsIDB4MDAwMCwgMHgwMTE1KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDMsIDB4MDExNSk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDA4LCAweDAxMjMpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDAwMCwgMHgwMTE3KTsKKwkJaWJtY2FtX3ZlaW8odXZkLCAwLCAweDAwMDAsIDB4MDExMik7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDgwLCAweDAxMDApOworCQlJQk1DQU1fVCh1dmQpLT5pbml0aWFsaXplZCA9IDA7CisjZW5kaWYKKwkJYnJlYWs7CisJfSAvKiBzd2l0Y2ggKi8KK30KKworLyoKKyAqIGlibWNhbV9yZWluaXRfaXNvKCkKKyAqCisgKiBUaGlzIHByb2NlZHVyZSBzZW5kcyBjb3VwbGUgb2YgY29tbWFuZHMgdG8gdGhlIGNhbWVyYSBhbmQgdGhlbgorICogcmVzZXRzIHRoZSB2aWRlbyBwaXBlLiBUaGlzIHNlcXVlbmNlIHdhcyBvYnNlcnZlZCB0byByZWluaXQgdGhlCisgKiBjYW1lcmEgb3IsIGF0IGxlYXN0LCB0byBpbml0aWF0ZSBJU08gZGF0YSBzdHJlYW0uCisgKgorICogSGlzdG9yeToKKyAqIDEvMi8wMCAgIENyZWF0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIGlibWNhbV9yZWluaXRfaXNvKHN0cnVjdCB1dmQgKnV2ZCwgaW50IGRvX3N0b3ApCit7CisJc3dpdGNoIChJQk1DQU1fVCh1dmQpLT5jYW1lcmFfbW9kZWwpIHsKKwljYXNlIElCTUNBTV9NT0RFTF8xOgorCQlpZiAoZG9fc3RvcCkKKwkJCWlibWNhbV92aWRlb19zdG9wKHV2ZCk7CisJCWlibWNhbV92ZWlvKHV2ZCwgMCwgMHgwMDAxLCAweDAxMTQpOworCQlpYm1jYW1fdmVpbyh1dmQsIDAsIDB4MDBjMCwgMHgwMTBjKTsKKwkJdXNiX2NsZWFyX2hhbHQodXZkLT5kZXYsIHVzYl9yY3Zpc29jcGlwZSh1dmQtPmRldiwgdXZkLT52aWRlb19lbmRwKSk7CisJCWlibWNhbV9tb2RlbDFfc2V0dXBfYWZ0ZXJfdmlkZW9faWYodXZkKTsKKwkJYnJlYWs7CisJY2FzZSBJQk1DQU1fTU9ERUxfMjoKKwkJaWJtY2FtX21vZGVsMl9zZXR1cF9hZnRlcl92aWRlb19pZih1dmQpOworCQlicmVhazsKKwljYXNlIElCTUNBTV9NT0RFTF8zOgorCQlpYm1jYW1fdmlkZW9fc3RvcCh1dmQpOworCQlpYm1jYW1fbW9kZWwzX3NldHVwX2FmdGVyX3ZpZGVvX2lmKHV2ZCk7CisJCWJyZWFrOworCWNhc2UgSUJNQ0FNX01PREVMXzQ6CisJCWlibWNhbV9tb2RlbDRfc2V0dXBfYWZ0ZXJfdmlkZW9faWYodXZkKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBpYm1jYW1fdmlkZW9fc3RhcnQoc3RydWN0IHV2ZCAqdXZkKQoreworCWlibWNhbV9jaGFuZ2VfbGlnaHRpbmdfY29uZGl0aW9ucyh1dmQpOworCWlibWNhbV9zZXRfc2hhcnBuZXNzKHV2ZCk7CisJaWJtY2FtX3JlaW5pdF9pc28odXZkLCAwKTsKK30KKworLyoKKyAqIFJldHVybiBuZWdhdGl2ZSBjb2RlIG9uIGZhaWx1cmUsIDAgb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIGludCBpYm1jYW1fc2V0dXBfb25fb3BlbihzdHJ1Y3QgdXZkICp1dmQpCit7CisJaW50IHNldHVwX29rID0gMDsgLyogU3VjY2VzcyBieSBkZWZhdWx0ICovCisJLyogU2VuZCBpbml0IHNlcXVlbmNlIG9ubHkgb25jZSwgaXQncyBsYXJnZSEgKi8KKwlpZiAoIUlCTUNBTV9UKHV2ZCktPmluaXRpYWxpemVkKSB7IC8qIEZJWE1FIHJlbmFtZSAqLworCQlzd2l0Y2ggKElCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbCkgeworCQljYXNlIElCTUNBTV9NT0RFTF8xOgorCQkJc2V0dXBfb2sgPSBpYm1jYW1fbW9kZWwxX3NldHVwKHV2ZCk7CisJCQlicmVhazsKKwkJY2FzZSBJQk1DQU1fTU9ERUxfMjoKKwkJCXNldHVwX29rID0gaWJtY2FtX21vZGVsMl9zZXR1cCh1dmQpOworCQkJYnJlYWs7CisJCWNhc2UgSUJNQ0FNX01PREVMXzM6CisJCWNhc2UgSUJNQ0FNX01PREVMXzQ6CisJCQkvKiBXZSBkbyBhbGwgc2V0dXAgd2hlbiBJc29jIHN0cmVhbSBpcyByZXF1ZXN0ZWQgKi8KKwkJCWJyZWFrOworCQl9CisJCUlCTUNBTV9UKHV2ZCktPmluaXRpYWxpemVkID0gKHNldHVwX29rICE9IDApOworCX0KKwlyZXR1cm4gc2V0dXBfb2s7Cit9CisKK3N0YXRpYyB2b2lkIGlibWNhbV9jb25maWd1cmVfdmlkZW8oc3RydWN0IHV2ZCAqdXZkKQoreworCWlmICh1dmQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJUkVTVFJJQ1RfVE9fUkFOR0UoaW5pdF9icmlnaHRuZXNzLCAwLCAyNTUpOworCVJFU1RSSUNUX1RPX1JBTkdFKGluaXRfY29udHJhc3QsIDAsIDI1NSk7CisJUkVTVFJJQ1RfVE9fUkFOR0UoaW5pdF9jb2xvciwgMCwgMjU1KTsKKwlSRVNUUklDVF9UT19SQU5HRShpbml0X2h1ZSwgMCwgMjU1KTsKKwlSRVNUUklDVF9UT19SQU5HRShodWVfY29ycmVjdGlvbiwgMCwgMjU1KTsKKworCW1lbXNldCgmdXZkLT52cGljLCAwLCBzaXplb2YodXZkLT52cGljKSk7CisJbWVtc2V0KCZ1dmQtPnZwaWNfb2xkLCAweDU1LCBzaXplb2YodXZkLT52cGljX29sZCkpOworCisJdXZkLT52cGljLmNvbG91ciA9IGluaXRfY29sb3IgPDwgODsKKwl1dmQtPnZwaWMuaHVlID0gaW5pdF9odWUgPDwgODsKKwl1dmQtPnZwaWMuYnJpZ2h0bmVzcyA9IGluaXRfYnJpZ2h0bmVzcyA8PCA4OworCXV2ZC0+dnBpYy5jb250cmFzdCA9IGluaXRfY29udHJhc3QgPDwgODsKKwl1dmQtPnZwaWMud2hpdGVuZXNzID0gMTA1IDw8IDg7IC8qIFRoaXMgb25lIGlzbid0IHVzZWQgKi8KKwl1dmQtPnZwaWMuZGVwdGggPSAyNDsKKwl1dmQtPnZwaWMucGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfUkdCMjQ7CisKKwltZW1zZXQoJnV2ZC0+dmNhcCwgMCwgc2l6ZW9mKHV2ZC0+dmNhcCkpOworCXN0cmNweSh1dmQtPnZjYXAubmFtZSwgIklCTSBVU0IgQ2FtZXJhIik7CisJdXZkLT52Y2FwLnR5cGUgPSBWSURfVFlQRV9DQVBUVVJFOworCXV2ZC0+dmNhcC5jaGFubmVscyA9IDE7CisJdXZkLT52Y2FwLmF1ZGlvcyA9IDA7CisJdXZkLT52Y2FwLm1heHdpZHRoID0gVklERU9TSVpFX1godXZkLT5jYW52YXMpOworCXV2ZC0+dmNhcC5tYXhoZWlnaHQgPSBWSURFT1NJWkVfWSh1dmQtPmNhbnZhcyk7CisJdXZkLT52Y2FwLm1pbndpZHRoID0gbWluX2NhbnZhc1dpZHRoOworCXV2ZC0+dmNhcC5taW5oZWlnaHQgPSBtaW5fY2FudmFzSGVpZ2h0OworCisJbWVtc2V0KCZ1dmQtPnZjaGFuLCAwLCBzaXplb2YodXZkLT52Y2hhbikpOworCXV2ZC0+dmNoYW4uZmxhZ3MgPSAwOworCXV2ZC0+dmNoYW4udHVuZXJzID0gMDsKKwl1dmQtPnZjaGFuLmNoYW5uZWwgPSAwOworCXV2ZC0+dmNoYW4udHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOworCXN0cmNweSh1dmQtPnZjaGFuLm5hbWUsICJDYW1lcmEiKTsKK30KKworLyoKKyAqIGlibWNhbV9wcm9iZSgpCisgKgorICogVGhpcyBwcm9jZWR1cmUgcXVlcmllcyBkZXZpY2UgZGVzY3JpcHRvciBhbmQgYWNjZXB0cyB0aGUgaW50ZXJmYWNlCisgKiBpZiBpdCBsb29rcyBsaWtlIElCTSBDLWl0IGNhbWVyYS4KKyAqCisgKiBIaXN0b3J5OgorICogMjItSmFuLTIwMDAgTW92ZWQgY2FtZXJhIGluaXQgY29kZSB0byBpYm1jYW1fb3BlbigpCisgKiAyNz1KYW4tMjAwMCBDaGFuZ2VkIHRvIHVzZSBzdGF0aWMgc3RydWN0dXJlcywgYWRkZWQgbG9ja2luZy4KKyAqIDI0LU1heS0yMDAwIENvcnJlY3RlZCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uIChNT0RfeHh4X1VTRV9DT1VOVCkuCisgKiAwMy1KdWwtMjAwMCBGaXhlZCBlbmRpYW5uZXNzIGJ1Zy4KKyAqIDEyLU5vdi0yMDAwIFJld29ya2VkIHRvIGNvbXBseSB3aXRoIG5ldyBwcm9iZSgpIHNpZ25hdHVyZS4KKyAqIDIzLUphbi0yMDAxIEFkZGVkIGNvbXBhdGliaWxpdHkgd2l0aCAyLjIueCBrZXJuZWxzLgorICovCitzdGF0aWMgaW50IGlibWNhbV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmRldmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB1dmQgKnV2ZCA9IE5VTEw7CisJaW50IGl4LCBpLCBuYXMsIG1vZGVsPTAsIGNhbnZhc1g9MCwgY2FudmFzWT0wOworCWludCBhY3RJbnRlcmZhY2U9LTEsIGluYWN0SW50ZXJmYWNlPS0xLCBtYXhQUz0wOworCV9fdTggaWZudW0gPSBpbnRmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisJdW5zaWduZWQgY2hhciB2aWRlb19lcCA9IDA7CisKKwlpZiAoZGVidWcgPj0gMSkKKwkJaW5mbygiaWJtY2FtX3Byb2JlKCVwLCV1LikiLCBpbnRmLCBpZm51bSk7CisKKwkvKiBXZSBkb24ndCBoYW5kbGUgbXVsdGktY29uZmlnIGNhbWVyYXMgKi8KKwlpZiAoZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIENoZWNrIHRoZSB2ZXJzaW9uL3JldmlzaW9uICovCisJc3dpdGNoIChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSkgeworCWNhc2UgMHgwMDAyOgorCQlpZiAoaWZudW0gIT0gMikKKwkJCXJldHVybiAtRU5PREVWOworCQltb2RlbCA9IElCTUNBTV9NT0RFTF8xOworCQlicmVhazsKKwljYXNlIDB4MDMwQToKKwkJaWYgKGlmbnVtICE9IDApCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJaWYgKChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSBORVRDQU1fUFJPRFVDVF9JRCkgfHwKKwkJICAgIChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSBWRU9fODAwRF9QUk9EVUNUX0lEKSkKKwkJCW1vZGVsID0gSUJNQ0FNX01PREVMXzQ7CisJCWVsc2UKKwkJCW1vZGVsID0gSUJNQ0FNX01PREVMXzI7CisJCWJyZWFrOworCWNhc2UgMHgwMzAxOgorCQlpZiAoaWZudW0gIT0gMCkKKwkJCXJldHVybiAtRU5PREVWOworCQltb2RlbCA9IElCTUNBTV9NT0RFTF8zOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIoIklCTSBjYW1lcmEgd2l0aCByZXZpc2lvbiAweCUwNHggaXMgbm90IHN1cHBvcnRlZC4iLAorCQkJbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBQcmludCBkZXRhaWxlZCBpbmZvIG9uIHdoYXQgd2UgZm91bmQgc28gZmFyICovCisJZG8geworCQljaGFyICpicmFuZCA9IE5VTEw7CisJCXN3aXRjaCAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpIHsKKwkJY2FzZSBORVRDQU1fUFJPRFVDVF9JRDoKKwkJCWJyYW5kID0gIklCTSBOZXRDYW1lcmEiOworCQkJYnJlYWs7CisJCWNhc2UgVkVPXzgwMENfUFJPRFVDVF9JRDoKKwkJCWJyYW5kID0gIlZlbyBTdGluZ3JheSBbODAwQ10iOworCQkJYnJlYWs7CisJCWNhc2UgVkVPXzgwMERfUFJPRFVDVF9JRDoKKwkJCWJyYW5kID0gIlZlbyBTdGluZ3JheSBbODAwRF0iOworCQkJYnJlYWs7CisJCWNhc2UgSUJNQ0FNX1BST0RVQ1RfSUQ6CisJCWRlZmF1bHQ6CisJCQlicmFuZCA9ICJJQk0gUEMgQ2FtZXJhIjsgLyogYS5rLmEuIFhpcmxpbmsgQy1JdCAqLworCQkJYnJlYWs7CisJCX0KKwkJaW5mbygiJXMgVVNCIGNhbWVyYSBmb3VuZCAobW9kZWwgJWQsIHJldi4gMHglMDR4KSIsCisJCSAgICAgYnJhbmQsIG1vZGVsLCBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSk7CisJfSB3aGlsZSAoMCk7CisKKwkvKiBWYWxpZGF0ZSBmb3VuZCBpbnRlcmZhY2U6IG11c3QgaGF2ZSBvbmUgSVNPIGVuZHBvaW50ICovCisJbmFzID0gaW50Zi0+bnVtX2FsdHNldHRpbmc7CisJaWYgKGRlYnVnID4gMCkKKwkJaW5mbygiTnVtYmVyIG9mIGFsdGVybmF0ZSBzZXR0aW5ncz0lZC4iLCBuYXMpOworCWlmIChuYXMgPCAyKSB7CisJCWVycigiVG9vIGZldyBhbHRlcm5hdGUgc2V0dGluZ3MgZm9yIHRoaXMgY2FtZXJhISIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJLyogVmFsaWRhdGUgYWxsIGFsdGVybmF0ZSBzZXR0aW5ncyAqLworCWZvciAoaXg9MDsgaXggPCBuYXM7IGl4KyspIHsKKwkJY29uc3Qgc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOworCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCisJCWludGVyZmFjZSA9ICZpbnRmLT5hbHRzZXR0aW5nW2l4XTsKKwkJaSA9IGludGVyZmFjZS0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZzsKKwkJaWYgKGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDEpIHsKKwkJCWVycigiSW50ZXJmYWNlICVkLiBoYXMgJXUuIGVuZHBvaW50cyEiLAorCQkJICAgIGlmbnVtLCAodW5zaWduZWQpKGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzKSk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLmRlc2M7CisJCWlmICh2aWRlb19lcCA9PSAwKQorCQkJdmlkZW9fZXAgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJZWxzZSBpZiAodmlkZW9fZXAgIT0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpIHsKKwkJCWVycigiQWx0ZXJuYXRlIHNldHRpbmdzIGhhdmUgZGlmZmVyZW50IGVuZHBvaW50IGFkZHJlc3NlcyEiKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWlmICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDB4MDMpICE9IDB4MDEpIHsKKwkJCWVycigiSW50ZXJmYWNlICVkLiBoYXMgbm9uLUlTTyBlbmRwb2ludCEiLCBpZm51bSk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlpZiAoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkgPT0gMCkgeworCQkJZXJyKCJJbnRlcmZhY2UgJWQuIGhhcyBJU08gT1VUIGVuZHBvaW50ISIsIGlmbnVtKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWlmIChsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpID09IDApIHsKKwkJCWlmIChpbmFjdEludGVyZmFjZSA8IDApCisJCQkJaW5hY3RJbnRlcmZhY2UgPSBpOworCQkJZWxzZSB7CisJCQkJZXJyKCJNb3JlIHRoYW4gb25lIGluYWN0aXZlIGFsdC4gc2V0dGluZyEiKTsKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChhY3RJbnRlcmZhY2UgPCAwKSB7CisJCQkJYWN0SW50ZXJmYWNlID0gaTsKKwkJCQltYXhQUyA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7CisJCQkJaWYgKGRlYnVnID4gMCkKKwkJCQkJaW5mbygiQWN0aXZlIHNldHRpbmc9JWQuIG1heFBTPSVkLiIsIGksIG1heFBTKTsKKwkJCX0gZWxzZQorCQkJCWVycigiTW9yZSB0aGFuIG9uZSBhY3RpdmUgYWx0LiBzZXR0aW5nISBJZ25vcmluZyAjJWQuIiwgaSk7CisJCX0KKwl9CisJaWYgKChtYXhQUyA8PSAwKSB8fCAoYWN0SW50ZXJmYWNlIDwgMCkgfHwgKGluYWN0SW50ZXJmYWNlIDwgMCkpIHsKKwkJZXJyKCJGYWlsZWQgdG8gcmVjb2duaXplIHRoZSBjYW1lcmEhIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIFZhbGlkYXRlIG9wdGlvbnMgKi8KKwlzd2l0Y2ggKG1vZGVsKSB7CisJY2FzZSBJQk1DQU1fTU9ERUxfMToKKwkJUkVTVFJJQ1RfVE9fUkFOR0UobGlnaHRpbmcsIDAsIDIpOworCQlSRVNUUklDVF9UT19SQU5HRShzaXplLCBTSVpFXzEyOHg5NiwgU0laRV8zNTJ4Mjg4KTsKKwkJaWYgKGZyYW1lcmF0ZSA8IDApCisJCQlmcmFtZXJhdGUgPSAyOworCQljYW52YXNYID0gMzUyOworCQljYW52YXNZID0gMjg4OworCQlicmVhazsKKwljYXNlIElCTUNBTV9NT0RFTF8yOgorCQlSRVNUUklDVF9UT19SQU5HRShsaWdodGluZywgMCwgMTUpOworCQlSRVNUUklDVF9UT19SQU5HRShzaXplLCBTSVpFXzE3NngxNDQsIFNJWkVfMzUyeDI0MCk7CisJCWlmIChmcmFtZXJhdGUgPCAwKQorCQkJZnJhbWVyYXRlID0gMjsKKwkJY2FudmFzWCA9IDM1MjsKKwkJY2FudmFzWSA9IDI0MDsKKwkJYnJlYWs7CisJY2FzZSBJQk1DQU1fTU9ERUxfMzoKKwkJUkVTVFJJQ1RfVE9fUkFOR0UobGlnaHRpbmcsIDAsIDE1KTsgLyogRklYTUUgKi8KKwkJc3dpdGNoIChzaXplKSB7CisJCWNhc2UgU0laRV8xNjB4MTIwOgorCQkJY2FudmFzWCA9IDE2MDsKKwkJCWNhbnZhc1kgPSAxMjA7CisJCQlpZiAoZnJhbWVyYXRlIDwgMCkKKwkJCQlmcmFtZXJhdGUgPSAyOworCQkJUkVTVFJJQ1RfVE9fUkFOR0UoZnJhbWVyYXRlLCAwLCA1KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaW5mbygiSUJNIGNhbWVyYTogdXNpbmcgMzIweDI0MCIpOworCQkJc2l6ZSA9IFNJWkVfMzIweDI0MDsKKwkJCS8qIE5vIGJyZWFrIGhlcmUgKi8KKwkJY2FzZSBTSVpFXzMyMHgyNDA6CisJCQljYW52YXNYID0gMzIwOworCQkJY2FudmFzWSA9IDI0MDsKKwkJCWlmIChmcmFtZXJhdGUgPCAwKQorCQkJCWZyYW1lcmF0ZSA9IDM7CisJCQlSRVNUUklDVF9UT19SQU5HRShmcmFtZXJhdGUsIDAsIDUpOworCQkJYnJlYWs7CisJCWNhc2UgU0laRV82NDB4NDgwOgorCQkJY2FudmFzWCA9IDY0MDsKKwkJCWNhbnZhc1kgPSA0ODA7CisJCQlmcmFtZXJhdGUgPSAwOwkvKiBTbG93ZXN0LCBhbmQgbWF5YmUgZXZlbiB0aGF0IGlzIHRvbyBmYXN0ICovCisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIElCTUNBTV9NT0RFTF80OgorCQlSRVNUUklDVF9UT19SQU5HRShsaWdodGluZywgMCwgMik7CisJCXN3aXRjaCAoc2l6ZSkgeworCQljYXNlIFNJWkVfMTI4eDk2OgorCQkJY2FudmFzWCA9IDEyODsKKwkJCWNhbnZhc1kgPSA5NjsKKwkJCWJyZWFrOworCQljYXNlIFNJWkVfMTYweDEyMDoKKwkJCWNhbnZhc1ggPSAxNjA7CisJCQljYW52YXNZID0gMTIwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpbmZvKCJJQk0gTmV0Q2FtZXJhOiB1c2luZyAxNzZ4MTQ0Iik7CisJCQlzaXplID0gU0laRV8xNzZ4MTQ0OworCQkJLyogTm8gYnJlYWsgaGVyZSAqLworCQljYXNlIFNJWkVfMTc2eDE0NDoKKwkJCWNhbnZhc1ggPSAxNzY7CisJCQljYW52YXNZID0gMTQ0OworCQkJYnJlYWs7CisJCWNhc2UgU0laRV8zMjB4MjQwOgorCQkJY2FudmFzWCA9IDMyMDsKKwkJCWNhbnZhc1kgPSAyNDA7CisJCQlicmVhazsKKwkJY2FzZSBTSVpFXzM1MngyODg6CisJCQljYW52YXNYID0gMzUyOworCQkJY2FudmFzWSA9IDI4ODsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycigiSUJNIGNhbWVyYTogTW9kZWwgJWQuIG5vdCBzdXBwb3J0ZWQhIiwgbW9kZWwpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwl1dmQgPSB1c2J2aWRlb19BbGxvY2F0ZURldmljZShjYW1zKTsKKwlpZiAodXZkICE9IE5VTEwpIHsKKwkJLyogSGVyZSB1dmQgaXMgYSBmdWxseSBhbGxvY2F0ZWQgdXZkIG9iamVjdCAqLworCQl1dmQtPmZsYWdzID0gZmxhZ3M7CisJCXV2ZC0+ZGVidWcgPSBkZWJ1ZzsKKwkJdXZkLT5kZXYgPSBkZXY7CisJCXV2ZC0+aWZhY2UgPSBpZm51bTsKKwkJdXZkLT5pZmFjZUFsdEluYWN0aXZlID0gaW5hY3RJbnRlcmZhY2U7CisJCXV2ZC0+aWZhY2VBbHRBY3RpdmUgPSBhY3RJbnRlcmZhY2U7CisJCXV2ZC0+dmlkZW9fZW5kcCA9IHZpZGVvX2VwOworCQl1dmQtPmlzb19wYWNrZXRfbGVuID0gbWF4UFM7CisJCXV2ZC0+cGFsZXR0ZUJpdHMgPSAxTCA8PCBWSURFT19QQUxFVFRFX1JHQjI0OworCQl1dmQtPmRlZmF1bHRQYWxldHRlID0gVklERU9fUEFMRVRURV9SR0IyNDsKKwkJdXZkLT5jYW52YXMgPSBWSURFT1NJWkUoY2FudmFzWCwgY2FudmFzWSk7CisJCXV2ZC0+dmlkZW9zaXplID0gaWJtY2FtX3NpemVfdG9fdmlkZW9zaXplKHNpemUpOworCisJCS8qIEluaXRpYWxpemUgaWJtY2FtLXNwZWNpZmljIGRhdGEgKi8KKwkJYXNzZXJ0KElCTUNBTV9UKHV2ZCkgIT0gTlVMTCk7CisJCUlCTUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbCA9IG1vZGVsOworCQlJQk1DQU1fVCh1dmQpLT5pbml0aWFsaXplZCA9IDA7CisKKwkJaWJtY2FtX2NvbmZpZ3VyZV92aWRlbyh1dmQpOworCisJCWkgPSB1c2J2aWRlb19SZWdpc3RlclZpZGVvRGV2aWNlKHV2ZCk7CisJCWlmIChpICE9IDApIHsKKwkJCWVycigidXNidmlkZW9fUmVnaXN0ZXJWaWRlb0RldmljZSgpIGZhaWxlZC4iKTsKKwkJCXV2ZCA9IE5VTEw7CisJCX0KKwl9CisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgdXZkKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0VfVkVSKElCTUNBTV9WRU5ET1JfSUQsIElCTUNBTV9QUk9EVUNUX0lELCAweDAwMDIsIDB4MDAwMikgfSwJLyogTW9kZWwgMSAqLworCXsgVVNCX0RFVklDRV9WRVIoSUJNQ0FNX1ZFTkRPUl9JRCwgSUJNQ0FNX1BST0RVQ1RfSUQsIDB4MDMwYSwgMHgwMzBhKSB9LAkvKiBNb2RlbCAyICovCisJeyBVU0JfREVWSUNFX1ZFUihJQk1DQU1fVkVORE9SX0lELCBJQk1DQU1fUFJPRFVDVF9JRCwgMHgwMzAxLCAweDAzMDEpIH0sCS8qIE1vZGVsIDMgKi8KKwl7IFVTQl9ERVZJQ0VfVkVSKElCTUNBTV9WRU5ET1JfSUQsIE5FVENBTV9QUk9EVUNUX0lELCAweDAzMGEsIDB4MDMwYSkgfSwJLyogTW9kZWwgNCAqLworCXsgVVNCX0RFVklDRV9WRVIoSUJNQ0FNX1ZFTkRPUl9JRCwgVkVPXzgwMENfUFJPRFVDVF9JRCwgMHgwMzBhLCAweDAzMGEpIH0sCS8qIE1vZGVsIDIgKi8KKwl7IFVTQl9ERVZJQ0VfVkVSKElCTUNBTV9WRU5ET1JfSUQsIFZFT184MDBEX1BST0RVQ1RfSUQsIDB4MDMwYSwgMHgwMzBhKSB9LAkvKiBNb2RlbCA0ICovCisJeyB9ICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworLyoKKyAqIGlibWNhbV9pbml0KCkKKyAqCisgKiBUaGlzIGNvZGUgaXMgcnVuIHRvIGluaXRpYWxpemUgdGhlIGRyaXZlci4KKyAqCisgKiBIaXN0b3J5OgorICogMS8yNy8wMCAgUmV3b3JrZWQgdG8gdXNlIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGlibWNhbSBzdHJ1Y3R1cmVzLgorICogMjEvMTAvMDAgQ29tcGxldGVseSByZWRlc2lnbmVkIHRvIHVzZSB1c2J2aWRlbyBzZXJ2aWNlcy4KKyAqLworc3RhdGljIGludCBfX2luaXQgaWJtY2FtX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgdXNidmlkZW9fY2IgY2JUYmw7CisJbWVtc2V0KCZjYlRibCwgMCwgc2l6ZW9mKGNiVGJsKSk7CisJY2JUYmwucHJvYmUgPSBpYm1jYW1fcHJvYmU7CisJY2JUYmwuc2V0dXBPbk9wZW4gPSBpYm1jYW1fc2V0dXBfb25fb3BlbjsKKwljYlRibC52aWRlb1N0YXJ0ID0gaWJtY2FtX3ZpZGVvX3N0YXJ0OworCWNiVGJsLnZpZGVvU3RvcCA9IGlibWNhbV92aWRlb19zdG9wOworCWNiVGJsLnByb2Nlc3NEYXRhID0gaWJtY2FtX1Byb2Nlc3NJc29jRGF0YTsKKwljYlRibC5wb3N0UHJvY2VzcyA9IHVzYnZpZGVvX0RlaW50ZXJsYWNlRnJhbWU7CisJY2JUYmwuYWRqdXN0UGljdHVyZSA9IGlibWNhbV9hZGp1c3RfcGljdHVyZTsKKwljYlRibC5nZXRGUFMgPSBpYm1jYW1fY2FsY3VsYXRlX2ZwczsKKwlyZXR1cm4gdXNidmlkZW9fcmVnaXN0ZXIoCisJCSZjYW1zLAorCQlNQVhfSUJNQ0FNLAorCQlzaXplb2YoaWJtY2FtX3QpLAorCQkiaWJtY2FtIiwKKwkJJmNiVGJsLAorCQlUSElTX01PRFVMRSwKKwkJaWRfdGFibGUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaWJtY2FtX2NsZWFudXAodm9pZCkKK3sKKwl1c2J2aWRlb19EZXJlZ2lzdGVyKCZjYW1zKTsKK30KKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworbW9kdWxlX2luaXQoaWJtY2FtX2luaXQpOworbW9kdWxlX2V4aXQoaWJtY2FtX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEva29uaWNhd2MuYyBiL2RyaXZlcnMvdXNiL21lZGlhL2tvbmljYXdjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1MjFhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL2tvbmljYXdjLmMKQEAgLTAsMCArMSw5NDcgQEAKKy8qCisgKiBrb25pY2F3Yy5jIC0ga29uaWNhIHdlYmNhbSBkcml2ZXIKKyAqCisgKiBBdXRob3I6IFNpbW9uIEV2YW5zIDxzcHNlQHNlY3JldC5vcmcudWs+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFNpbW9uIEV2YW5zCisgKgorICogTGljZW5jZTogR1BMCisgKgorICogRHJpdmVyIGZvciBVU0Igd2ViY2FtcyBiYXNlZCBvbiBLb25pY2EgY2hpcHNldC4gVGhpcworICogY2hpcHNldCBpcyB1c2VkIGluIEludGVsIFlDNzYgY2FtZXJhLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisKKyNpbmNsdWRlICJ1c2J2aWRlby5oIgorCisjZGVmaW5lIE1BWF9CUklHSFRORVNTCTEwOAorI2RlZmluZSBNQVhfQ09OVFJBU1QJMTA4CisjZGVmaW5lIE1BWF9TQVRVUkFUSU9OCTEwOAorI2RlZmluZSBNQVhfU0hBUlBORVNTCTEwOAorI2RlZmluZSBNQVhfV0hJVEVCQUwJMzcyCisjZGVmaW5lIE1BWF9TUEVFRAk2CisKKworI2RlZmluZSBNQVhfQ0FNRVJBUwkxCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JInYxLjQiCisjZGVmaW5lIERSSVZFUl9ERVNDCSJLb25pY2EgV2ViY2FtIGRyaXZlciIKKworZW51bSBjdHJsX3JlcSB7CisJU2V0V2hpdGViYWwJPSAweDAxLAorCVNldEJyaWdodG5lc3MJPSAweDAyLAorICAgICAgICBTZXRTaGFycG5lc3MJPSAweDAzLAorCVNldENvbnRyYXN0CT0gMHgwNCwKKwlTZXRTYXR1cmF0aW9uCT0gMHgwNSwKK307CisKKworZW51bSBmcmFtZV9zaXplcyB7CisJU0laRV8xNjBYMTIwCT0gMCwKKwlTSVpFXzE2MFgxMzYJPSAxLAorCVNJWkVfMTc2WDE0NAk9IDIsCisJU0laRV8zMjBYMjQwCT0gMywKKwkKK307CisKKyNkZWZpbmUgTUFYX0ZSQU1FX1NJWkUJU0laRV8zMjBYMjQwCisKK3N0YXRpYyBzdHJ1Y3QgdXNidmlkZW8gKmNhbXM7CisKKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCitzdGF0aWMgaW50IGRlYnVnOworI2RlZmluZSBERUJVRyhuLCBmb3JtYXQsIGFyZy4uLikgXAorCWlmIChuIDw9IGRlYnVnKSB7CSBcCisJCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fICI6JXMoKTogIiBmb3JtYXQgIlxuIiwgX19GVU5DVElPTl9fICwgIyMgYXJnKTsgXAorCX0KKyNlbHNlCisjZGVmaW5lIERFQlVHKG4sIGFyZy4uLikKK3N0YXRpYyBjb25zdCBpbnQgZGVidWcgPSAwOworI2VuZGlmCisKKworLyogU29tZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5pdGlhbCBjYW1lcmEgc2V0dGluZ3MsCisgICBjYW4gYmUgc2V0IGJ5IG1vZHByb2JlICovCisKK3N0YXRpYyBpbnQgc2l6ZTsJCitzdGF0aWMgaW50IHNwZWVkID0gNjsJCS8qIFNwZWVkIChmcHMpIDAgKHNsb3dlc3QpIHRvIDYgKGZhc3Rlc3QpICovCitzdGF0aWMgaW50IGJyaWdodG5lc3MgPQlNQVhfQlJJR0hUTkVTUy8yOworc3RhdGljIGludCBjb250cmFzdCA9CU1BWF9DT05UUkFTVC8yOworc3RhdGljIGludCBzYXR1cmF0aW9uID0JTUFYX1NBVFVSQVRJT04vMjsKK3N0YXRpYyBpbnQgc2hhcnBuZXNzID0JTUFYX1NIQVJQTkVTUy8yOworc3RhdGljIGludCB3aGl0ZWJhbCA9CTMqKE1BWF9XSElURUJBTC80KTsKKworc3RhdGljIGludCBzcGRfdG9faWZhY2VbXSA9IHsgMSwgMCwgMywgMiwgNCwgNSwgNiB9OworCisvKiBUaGVzZSBGUFMgc3BlZWRzIGFyZSBmcm9tIHRoZSB3aW5kb3dzIGNvbmZpZyBib3guIFRoZXkgYXJlCisgKiBpbmRleGVkIG9uIHNpemUgKDAtMikgYW5kIHNwZWVkICgwLTYpLiBEaXZpZGUgYnkgMyB0byBnZXQgdGhlCisgKiByZWFsIGZwcy4KKyAqLworCitzdGF0aWMgaW50IHNwZF90b19mcHNbXVs3XSA9IHsgeyAyNCwgNDAsIDQ4LCA2MCwgNzIsIDgwLCAxMDAgfSwKKwkJCSAgICAgICB7IDI0LCA0MCwgNDgsIDYwLCA3MiwgODAsIDEwMCB9LAorCQkJICAgICAgIHsgMTgsIDMwLCAzNiwgNDUsIDU0LCA2MCwgNzUgIH0sCisJCQkgICAgICAgeyA2LCAgMTAsIDEyLCAxNSwgMTgsIDIxLCAyNSAgfSB9OworCitzdHJ1Y3QgY2FtX3NpemUgeworCXUxNgl3aWR0aDsKKwl1MTYJaGVpZ2h0OworCXU4CWNtZDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2FtX3NpemUgY2FtZXJhX3NpemVzW10gPSB7IHsgMTYwLCAxMjAsIDB4NyB9LAorCQkJCQkgIHsgMTYwLCAxMzYsIDB4YSB9LAorCQkJCQkgIHsgMTc2LCAxNDQsIDB4NCB9LAorCQkJCQkgIHsgMzIwLCAyNDAsIDB4NSB9IH07CisKK3N0cnVjdCBrb25pY2F3YyB7CisJdTggYnJpZ2h0bmVzczsJCS8qIGNhbWVyYSB1c2VzIDAgLSA5LCB4MTEgZm9yIHJlYWwgdmFsdWUgKi8KKwl1OCBjb250cmFzdDsJCS8qIGFzIGFib3ZlICovCisJdTggc2F0dXJhdGlvbjsJCS8qIGFzIGFib3ZlICovCisJdTggc2hhcnBuZXNzOwkJLyogYXMgYWJvdmUgKi8KKwl1OCB3aGl0ZV9iYWw7CQkvKiAwIC0gMzMsIHgxMSBmb3IgcmVhbCB2YWx1ZSAqLworCXU4IHNwZWVkOwkJLyogU3RvcmVkIGFzIDAgLSA2LCB1c2VkIGFzIGluZGV4IGluIHNwZF90b18qIChhYm92ZSkgKi8KKwl1OCBzaXplOwkJLyogRnJhbWUgU2l6ZSAqLworCWludCBoZWlnaHQ7CisJaW50IHdpZHRoOworCXN0cnVjdCB1cmIgKnN0c191cmJbVVNCVklERU9fTlVNU0JVRl07CisJdTggc3RzX2J1ZltVU0JWSURFT19OVU1TQlVGXVtGUkFNRVNfUEVSX0RFU0NdOworCXN0cnVjdCB1cmIgKmxhc3RfZGF0YV91cmI7CisJaW50IGxhc3RmcmFtZTsKKwlpbnQgY3VyX2ZyYW1lX3NpemU7CS8qIG51bWJlciBvZiBieXRlcyBpbiBjdXJyZW50IGZyYW1lIHNpemUgKi8KKwlpbnQgbWF4bGluZTsJCS8qIG51bWJlciBvZiBsaW5lcyBwZXIgZnJhbWUgKi8KKwlpbnQgeXBsYW5lc3o7CQkvKiBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhlIFkgcGxhbmUgKi8KKwl1bnNpZ25lZCBpbnQgYnV0dG9uc3RzOjE7CisjaWZkZWYgQ09ORklHX0lOUFVUCisJc3RydWN0IGlucHV0X2RldiBpbnB1dDsKKwljaGFyIGlucHV0X3BoeXNuYW1lWzY0XTsKKyNlbmRpZgorfTsKKworCisjZGVmaW5lIGtvbmljYXdjX3NldF9taXNjKHV2ZCwgcmVxLCB2YWx1ZSwgaW5kZXgpCQlrb25pY2F3Y19jdHJsX21zZyh1dmQsIFVTQl9ESVJfT1VULCByZXEsIHZhbHVlLCBpbmRleCwgTlVMTCwgMCkKKyNkZWZpbmUga29uaWNhd2NfZ2V0X21pc2ModXZkLCByZXEsIHZhbHVlLCBpbmRleCwgYnVmLCBzeikJa29uaWNhd2NfY3RybF9tc2codXZkLCBVU0JfRElSX0lOLCByZXEsIHZhbHVlLCBpbmRleCwgYnVmLCBzeikKKyNkZWZpbmUga29uaWNhd2Nfc2V0X3ZhbHVlKHV2ZCwgdmFsdWUsIGluZGV4KQkJCWtvbmljYXdjX2N0cmxfbXNnKHV2ZCwgVVNCX0RJUl9PVVQsIDIsIHZhbHVlLCBpbmRleCwgTlVMTCwgMCkKKworCitzdGF0aWMgaW50IGtvbmljYXdjX2N0cmxfbXNnKHN0cnVjdCB1dmQgKnV2ZCwgdTggZGlyLCB1OCByZXF1ZXN0LCB1MTYgdmFsdWUsIHUxNiBpbmRleCwgdm9pZCAqYnVmLCBpbnQgbGVuKQoreworICAgICAgICBpbnQgcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHV2ZC0+ZGV2LAorCQlkaXIgPyB1c2JfcmN2Y3RybHBpcGUodXZkLT5kZXYsIDApIDogdXNiX3NuZGN0cmxwaXBlKHV2ZC0+ZGV2LCAwKSwKKwkJICAgIHJlcXVlc3QsIDB4NDAgfCBkaXIsIHZhbHVlLCBpbmRleCwgYnVmLCBsZW4sIDEwMDApOworICAgICAgICByZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IDA7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIGtvbmljYXdjX2NhbWVyYV9vbihzdHJ1Y3QgdXZkICp1dmQpCit7CisgICAgICAgIERFQlVHKDAsICJjYW1lcmEgb24iKTsKKyAgICAgICAga29uaWNhd2Nfc2V0X21pc2ModXZkLCAweDIsIDEsIDB4MGIpOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrb25pY2F3Y19jYW1lcmFfb2ZmKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKyAgICAgICAgREVCVUcoMCwgImNhbWVyYSBvZmYiKTsKKyAgICAgICAga29uaWNhd2Nfc2V0X21pc2ModXZkLCAweDIsIDAsIDB4MGIpOworfQorCisKK3N0YXRpYyB2b2lkIGtvbmljYXdjX3NldF9jYW1lcmFfc2l6ZShzdHJ1Y3QgdXZkICp1dmQpCit7CisJc3RydWN0IGtvbmljYXdjICpjYW0gPSAoc3RydWN0IGtvbmljYXdjICopdXZkLT51c2VyX2RhdGE7CisKKwlrb25pY2F3Y19zZXRfbWlzYyh1dmQsIDB4MiwgY2FtZXJhX3NpemVzW2NhbS0+c2l6ZV0uY21kLCAweDA4KTsKKwljYW0tPndpZHRoID0gY2FtZXJhX3NpemVzW2NhbS0+c2l6ZV0ud2lkdGg7CisJY2FtLT5oZWlnaHQgPSBjYW1lcmFfc2l6ZXNbY2FtLT5zaXplXS5oZWlnaHQ7CisJY2FtLT55cGxhbmVzeiA9IGNhbS0+aGVpZ2h0ICogY2FtLT53aWR0aDsKKwljYW0tPmN1cl9mcmFtZV9zaXplID0gKGNhbS0+eXBsYW5lc3ogKiAzKSAvIDI7CisJY2FtLT5tYXhsaW5lID0gY2FtLT55cGxhbmVzeiAvIDI1NjsKKwl1dmQtPnZpZGVvc2l6ZSA9IFZJREVPU0laRShjYW0tPndpZHRoLCBjYW0tPmhlaWdodCk7Cit9CisKKworc3RhdGljIGludCBrb25pY2F3Y19zZXR1cF9vbl9vcGVuKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlzdHJ1Y3Qga29uaWNhd2MgKmNhbSA9IChzdHJ1Y3Qga29uaWNhd2MgKil1dmQtPnVzZXJfZGF0YTsKKworCURFQlVHKDEsICJzZXR0aW5nIGJyaWdodG5lc3MgdG8gJWQgKCVkKSIsIGNhbS0+YnJpZ2h0bmVzcywKKwkgICAgY2FtLT5icmlnaHRuZXNzICogMTEpOworCWtvbmljYXdjX3NldF92YWx1ZSh1dmQsIGNhbS0+YnJpZ2h0bmVzcywgU2V0QnJpZ2h0bmVzcyk7CisJREVCVUcoMSwgInNldHRpbmcgd2hpdGUgYmFsYW5jZSB0byAlZCAoJWQpIiwgY2FtLT53aGl0ZV9iYWwsCisJICAgIGNhbS0+d2hpdGVfYmFsICogMTEpOworCWtvbmljYXdjX3NldF92YWx1ZSh1dmQsIGNhbS0+d2hpdGVfYmFsLCBTZXRXaGl0ZWJhbCk7CisJREVCVUcoMSwgInNldHRpbmcgY29udHJhc3QgdG8gJWQgKCVkKSIsIGNhbS0+Y29udHJhc3QsCisJICAgIGNhbS0+Y29udHJhc3QgKiAxMSk7CisJa29uaWNhd2Nfc2V0X3ZhbHVlKHV2ZCwgY2FtLT5jb250cmFzdCwgU2V0Q29udHJhc3QpOworCURFQlVHKDEsICJzZXR0aW5nIHNhdHVyYXRpb24gdG8gJWQgKCVkKSIsIGNhbS0+c2F0dXJhdGlvbiwKKwkgICAgY2FtLT5zYXR1cmF0aW9uICogMTEpOworCWtvbmljYXdjX3NldF92YWx1ZSh1dmQsIGNhbS0+c2F0dXJhdGlvbiwgU2V0U2F0dXJhdGlvbik7CisJREVCVUcoMSwgInNldHRpbmcgc2hhcnBuZXNzIHRvICVkICglZCkiLCBjYW0tPnNoYXJwbmVzcywKKwkgICAgY2FtLT5zaGFycG5lc3MgKiAxMSk7CisJa29uaWNhd2Nfc2V0X3ZhbHVlKHV2ZCwgY2FtLT5zaGFycG5lc3MsIFNldFNoYXJwbmVzcyk7CisJa29uaWNhd2Nfc2V0X2NhbWVyYV9zaXplKHV2ZCk7CisJY2FtLT5sYXN0ZnJhbWUgPSAtMjsKKwljYW0tPmJ1dHRvbnN0cyA9IDA7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQga29uaWNhd2NfYWRqdXN0X3BpY3R1cmUoc3RydWN0IHV2ZCAqdXZkKQoreworCXN0cnVjdCBrb25pY2F3YyAqY2FtID0gKHN0cnVjdCBrb25pY2F3YyAqKXV2ZC0+dXNlcl9kYXRhOworCisJa29uaWNhd2NfY2FtZXJhX29mZih1dmQpOworCURFQlVHKDEsICJuZXcgYnJpZ2h0bmVzczogJWQiLCB1dmQtPnZwaWMuYnJpZ2h0bmVzcyk7CisJdXZkLT52cGljLmJyaWdodG5lc3MgPSAodXZkLT52cGljLmJyaWdodG5lc3MgPiBNQVhfQlJJR0hUTkVTUykgPyBNQVhfQlJJR0hUTkVTUyA6IHV2ZC0+dnBpYy5icmlnaHRuZXNzOworCWlmKGNhbS0+YnJpZ2h0bmVzcyAhPSB1dmQtPnZwaWMuYnJpZ2h0bmVzcyAvIDExKSB7CisJICAgY2FtLT5icmlnaHRuZXNzID0gdXZkLT52cGljLmJyaWdodG5lc3MgLyAxMTsKKwkgICBERUJVRygxLCAic2V0dGluZyBicmlnaHRuZXNzIHRvICVkICglZCkiLCBjYW0tPmJyaWdodG5lc3MsCisJICAgICAgIGNhbS0+YnJpZ2h0bmVzcyAqIDExKTsKKwkgICBrb25pY2F3Y19zZXRfdmFsdWUodXZkLCBjYW0tPmJyaWdodG5lc3MsIFNldEJyaWdodG5lc3MpOworCX0KKworCURFQlVHKDEsICJuZXcgY29udHJhc3Q6ICVkIiwgdXZkLT52cGljLmNvbnRyYXN0KTsKKwl1dmQtPnZwaWMuY29udHJhc3QgPSAodXZkLT52cGljLmNvbnRyYXN0ID4gTUFYX0NPTlRSQVNUKSA/IE1BWF9DT05UUkFTVCA6IHV2ZC0+dnBpYy5jb250cmFzdDsKKwlpZihjYW0tPmNvbnRyYXN0ICE9IHV2ZC0+dnBpYy5jb250cmFzdCAvIDExKSB7CisJCWNhbS0+Y29udHJhc3QgPSB1dmQtPnZwaWMuY29udHJhc3QgLyAxMTsKKwkJREVCVUcoMSwgInNldHRpbmcgY29udHJhc3QgdG8gJWQgKCVkKSIsIGNhbS0+Y29udHJhc3QsCisJCSAgICBjYW0tPmNvbnRyYXN0ICogMTEpOworCQlrb25pY2F3Y19zZXRfdmFsdWUodXZkLCBjYW0tPmNvbnRyYXN0LCBTZXRDb250cmFzdCk7CisJfQorCWtvbmljYXdjX2NhbWVyYV9vbih1dmQpOworfQorCisKK3N0YXRpYyBpbnQga29uaWNhd2NfY29tcHJlc3NfaXNvKHN0cnVjdCB1dmQgKnV2ZCwgc3RydWN0IHVyYiAqZGF0YXVyYiwgc3RydWN0IHVyYiAqc3RzdXJiKQoreworCWNoYXIgKmNkYXRhOworCWludCBpLCB0b3RsZW4gPSAwOworCXVuc2lnbmVkIGNoYXIgKnN0YXR1cyA9IHN0c3VyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCBrZWVwID0gMCwgZGlzY2FyZCA9IDAsIGJhZCA9IDA7CisJc3RydWN0IGtvbmljYXdjICpjYW0gPSAoc3RydWN0IGtvbmljYXdjICopdXZkLT51c2VyX2RhdGE7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YXVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQlpbnQgYnV0dG9uID0gY2FtLT5idXR0b25zdHM7CisJCXVuc2lnbmVkIGNoYXIgc3RzOworCQlpbnQgbiA9IGRhdGF1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGg7CisJCWludCBzdCA9IGRhdGF1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1czsKKwkJY2RhdGEgPSBkYXRhdXJiLT50cmFuc2Zlcl9idWZmZXIgKworCQkJZGF0YXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OworCisJCS8qIERldGVjdCBhbmQgaWdub3JlIGVycm9yZWQgcGFja2V0cyAqLworCQlpZiAoc3QgPCAwKSB7CisJCQlERUJVRygxLCAiRGF0YSBlcnJvcjogcGFja2V0PSVkLiBsZW49JWQuIHN0YXR1cz0lZC4iLAorCQkJICAgICAgaSwgbiwgc3QpOworCQkJdXZkLT5zdGF0cy5pc29fZXJyX2NvdW50Kys7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIERldGVjdCBhbmQgaWdub3JlIGVtcHR5IHBhY2tldHMgKi8KKwkJaWYgKG4gPD0gMCkgeworCQkJdXZkLT5zdGF0cy5pc29fc2tpcF9jb3VudCsrOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBTZWUgd2hhdCB0aGUgc3RhdHVzIGRhdGEgc2FpZCBhYm91dCB0aGUgcGFja2V0ICovCisJCXN0cyA9ICooc3RhdHVzK3N0c3VyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0KTsKKworCQkvKiBzdHM6IDB4ODAtMHhmZjogZnJhbWUgc3RhcnQgd2l0aCBmcmFtZSBudW1iZXIgKGllIDAtN2YpCisJCSAqIG90aGVyd2lzZToKKwkJICogYml0IDAgMDoga2VlcCBwYWNrZXQKKwkJICoJIDE6IGRyb3AgcGFja2V0IChwYWRkaW5nIGRhdGEpCisJCSAqCisJCSAqIGJpdCA0IDAgYnV0dG9uIG5vdCBjbGlja2VkCisJCSAqICAgICAgIDEgYnV0dG9uIGNsaWNrZWQKKwkJICogYnV0dG9uIGlzIHVzZWQgdG8gYHRha2UgYSBwaWN0dXJlJyAoaW4gc29mdHdhcmUpCisJCSAqLworCisJCWlmKHN0cyA8IDB4ODApIHsKKwkJCWJ1dHRvbiA9ICEhKHN0cyAmIDB4NDApOworCQkJc3RzICY9IH4weDQwOworCQl9CisJCQorCQkvKiB3b3JrIG91dCB0aGUgYnV0dG9uIHN0YXR1cywgYnV0IGRvbid0IGRvCisJCSAgIGFueXRoaW5nIHdpdGggaXQgZm9yIG5vdyAqLworCisJCWlmKGJ1dHRvbiAhPSBjYW0tPmJ1dHRvbnN0cykgeworCQkJREVCVUcoMiwgImJ1dHRvbjogJXNjbGlja2VkIiwgYnV0dG9uID8gIiIgOiAidW4iKTsKKwkJCWNhbS0+YnV0dG9uc3RzID0gYnV0dG9uOworI2lmZGVmIENPTkZJR19JTlBVVAorCQkJaW5wdXRfcmVwb3J0X2tleSgmY2FtLT5pbnB1dCwgQlROXzAsIGNhbS0+YnV0dG9uc3RzKTsKKwkJCWlucHV0X3N5bmMoJmNhbS0+aW5wdXQpOworI2VuZGlmCisJCX0KKworCQlpZihzdHMgPT0gMHgwMSkgeyAvKiBkcm9wIGZyYW1lICovCisJCQlkaXNjYXJkKys7CisJCQljb250aW51ZTsKKwkJfQorCQkKKwkJaWYoKHN0cyA+IDB4MDEpICYmIChzdHMgPCAweDgwKSkgeworCQkJaW5mbygidW5rbm93biBzdGF0dXMgJTIuMngiLCBzdHMpOworCQkJYmFkKys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZighc3RzICYmIGNhbS0+bGFzdGZyYW1lID09IC0yKSB7CisJCQlERUJVRygyLCAiZHJvcHBpbmcgZnJhbWUgbG9va2luZyBmb3IgaW1hZ2Ugc3RhcnQiKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJa2VlcCsrOworCQlpZihzdHMgJiAweDgwKSB7IC8qIGZyYW1lIHN0YXJ0ICovCisJCQl1bnNpZ25lZCBjaGFyIG1hcmtlcltdID0geyAwLCAweGZmLCAwLCAweDAwIH07CisKKwkJCWlmKGNhbS0+bGFzdGZyYW1lID09IC0yKSB7CisJCQkJREVCVUcoMiwgImZvdW5kIGluaXRpYWwgaW1hZ2UiKTsKKwkJCQljYW0tPmxhc3RmcmFtZSA9IC0xOworCQkJfQorCQkJCQorCQkJbWFya2VyWzNdID0gc3RzICYgMHg3RjsKKwkJCVJpbmdRdWV1ZV9FbnF1ZXVlKCZ1dmQtPmRwLCBtYXJrZXIsIDQpOworCQkJdG90bGVuICs9IDQ7CisJCX0KKworCQl0b3RsZW4gKz0gbjsJLyogTGl0dGxlIGxvY2FsIGFjY291bnRpbmcgKi8KKwkJUmluZ1F1ZXVlX0VucXVldWUoJnV2ZC0+ZHAsIGNkYXRhLCBuKTsKKwl9CisJREVCVUcoOCwgImZpbmlzaGVkOiBrZWVwID0gJWQgZGlzY2FyZCA9ICVkIGJhZCA9ICVkIGFkZGVkICVkIGJ5dGVzIiwKKwkJICAgIGtlZXAsIGRpc2NhcmQsIGJhZCwgdG90bGVuKTsKKwlyZXR1cm4gdG90bGVuOworfQorCisKK3N0YXRpYyB2b2lkIHJlc3VibWl0X3VyYihzdHJ1Y3QgdXZkICp1dmQsIHN0cnVjdCB1cmIgKnVyYikKK3sKKyAgICAgICAgaW50IGksIHJldDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IEZSQU1FU19QRVJfREVTQzsgaSsrKSB7CisgICAgICAgICAgICAgICAgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMgPSAwOworICAgICAgICB9CisgICAgICAgIHVyYi0+ZGV2ID0gdXZkLT5kZXY7CisgICAgICAgIHVyYi0+c3RhdHVzID0gMDsKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCURFQlVHKDMsICJzdWJtaXR0aW5nIHVyYiBvZiBsZW5ndGggJWQiLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworICAgICAgICBpZihyZXQpCisgICAgICAgICAgICAgICAgZXJyKCJ1c2Jfc3VibWl0X3VyYiBlcnJvciAoJWQpIiwgcmV0KTsKKworfQorCisKK3N0YXRpYyB2b2lkIGtvbmljYXdjX2lzb2NfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHV2ZCAqdXZkID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBrb25pY2F3YyAqY2FtID0gKHN0cnVjdCBrb25pY2F3YyAqKXV2ZC0+dXNlcl9kYXRhOworCisJLyogV2UgZG9uJ3Qgd2FudCB0byBkbyBhbnl0aGluZyBpZiB3ZSBhcmUgYWJvdXQgdG8gYmUgcmVtb3ZlZCEgKi8KKwlpZiAoIUNBTUVSQV9JU19PUEVSQVRJT05BTCh1dmQpKQorCQlyZXR1cm47CisKKwlpZiAoIXV2ZC0+c3RyZWFtaW5nKSB7CisJCURFQlVHKDEsICJOb3Qgc3RyZWFtaW5nLCBidXQgaW50ZXJydXB0ISIpOworCQlyZXR1cm47CisJfQorCisJREVCVUcoMywgImdvdCBmcmFtZSAlZCBsZW4gPSAlZCBidWZsZW4gPSVkIiwgdXJiLT5zdGFydF9mcmFtZSwgdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCisJdXZkLT5zdGF0cy51cmJfY291bnQrKzsKKworCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiAzMikgeworCQljYW0tPmxhc3RfZGF0YV91cmIgPSB1cmI7CisJCXJldHVybjsKKwl9CisJLyogQ29weSB0aGUgZGF0YSByZWNlaXZlZCBpbnRvIHJpbmcgcXVldWUgKi8KKwlpZihjYW0tPmxhc3RfZGF0YV91cmIpIHsKKwkJaW50IGxlbiA9IDA7CisJCWlmKHVyYi0+c3RhcnRfZnJhbWUgIT0gY2FtLT5sYXN0X2RhdGFfdXJiLT5zdGFydF9mcmFtZSkKKwkJCWVycigiTG9zdCBzeW5jIG9uIGZyYW1lcyIpOworCQllbHNlIGlmICghdXJiLT5zdGF0dXMgJiYgIWNhbS0+bGFzdF9kYXRhX3VyYi0+c3RhdHVzKQorCQkJbGVuID0ga29uaWNhd2NfY29tcHJlc3NfaXNvKHV2ZCwgY2FtLT5sYXN0X2RhdGFfdXJiLCB1cmIpOworCisJCXJlc3VibWl0X3VyYih1dmQsIGNhbS0+bGFzdF9kYXRhX3VyYik7CisJCXJlc3VibWl0X3VyYih1dmQsIHVyYik7CisJCWNhbS0+bGFzdF9kYXRhX3VyYiA9IE5VTEw7CisJCXV2ZC0+c3RhdHMudXJiX2xlbmd0aCA9IGxlbjsKKwkJdXZkLT5zdGF0cy5kYXRhX2NvdW50ICs9IGxlbjsKKwkJaWYobGVuKQorCQkJUmluZ1F1ZXVlX1dha2VVcEludGVycnVwdGlibGUoJnV2ZC0+ZHApOworCQlyZXR1cm47CisJfQorCXJldHVybjsKK30KKworCitzdGF0aWMgaW50IGtvbmljYXdjX3N0YXJ0X2RhdGEoc3RydWN0IHV2ZCAqdXZkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSB1dmQtPmRldjsKKwlpbnQgaSwgZXJyRmxhZzsKKwlzdHJ1Y3Qga29uaWNhd2MgKmNhbSA9IChzdHJ1Y3Qga29uaWNhd2MgKil1dmQtPnVzZXJfZGF0YTsKKwlpbnQgcGt0c3o7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlID0gTlVMTDsKKworCWludGYgPSB1c2JfaWZudW1fdG9faWYoZGV2LCB1dmQtPmlmYWNlKTsKKwlpZiAoaW50ZikKKwkJaW50ZXJmYWNlID0gdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKGludGYsCisJCQkJc3BkX3RvX2lmYWNlW2NhbS0+c3BlZWRdKTsKKwlpZiAoIWludGVyZmFjZSkKKwkJcmV0dXJuIC1FTlhJTzsKKwlwa3RzeiA9IGxlMTZfdG9fY3B1KGludGVyZmFjZS0+ZW5kcG9pbnRbMV0uZGVzYy53TWF4UGFja2V0U2l6ZSk7CisJREVCVUcoMSwgInBrdHN6ID0gJWQiLCBwa3Rzeik7CisJaWYgKCFDQU1FUkFfSVNfT1BFUkFUSU9OQUwodXZkKSkgeworCQllcnIoIkNhbWVyYSBpcyBub3Qgb3BlcmF0aW9uYWwiKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCXV2ZC0+Y3VyZnJhbWUgPSAtMTsKKwlrb25pY2F3Y19jYW1lcmFfb24odXZkKTsKKwkvKiBBbHRlcm5hdGUgaW50ZXJmYWNlIDEgaXMgaXMgdGhlIGJpZ2dlc3QgZnJhbWUgc2l6ZSAqLworCWkgPSB1c2Jfc2V0X2ludGVyZmFjZShkZXYsIHV2ZC0+aWZhY2UsIHV2ZC0+aWZhY2VBbHRBY3RpdmUpOworCWlmIChpIDwgMCkgeworCQllcnIoInVzYl9zZXRfaW50ZXJmYWNlIGVycm9yIik7CisJCXV2ZC0+bGFzdF9lcnJvciA9IGk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyogV2UgZG91YmxlIGJ1ZmZlciB0aGUgSXNvIGxpc3RzICovCisJZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspIHsKKwkJaW50IGosIGs7CisJCXN0cnVjdCB1cmIgKnVyYiA9IHV2ZC0+c2J1ZltpXS51cmI7CisJCXVyYi0+ZGV2ID0gZGV2OworCQl1cmItPmNvbnRleHQgPSB1dmQ7CisJCXVyYi0+cGlwZSA9IHVzYl9yY3Zpc29jcGlwZShkZXYsIHV2ZC0+dmlkZW9fZW5kcCk7CisJCXVyYi0+aW50ZXJ2YWwgPSAxOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHV2ZC0+c2J1ZltpXS5kYXRhOworCQl1cmItPmNvbXBsZXRlID0ga29uaWNhd2NfaXNvY19pcnE7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBGUkFNRVNfUEVSX0RFU0M7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHBrdHN6ICogRlJBTUVTX1BFUl9ERVNDOworCQlmb3IgKGo9az0wOyBqIDwgRlJBTUVTX1BFUl9ERVNDOyBqKyssIGsgKz0gcGt0c3opIHsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ub2Zmc2V0ID0gazsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0gcGt0c3o7CisJCX0KKworCQl1cmIgPSBjYW0tPnN0c191cmJbaV07CisJCXVyYi0+ZGV2ID0gZGV2OworCQl1cmItPmNvbnRleHQgPSB1dmQ7CisJCXVyYi0+cGlwZSA9IHVzYl9yY3Zpc29jcGlwZShkZXYsIHV2ZC0+dmlkZW9fZW5kcC0xKTsKKwkJdXJiLT5pbnRlcnZhbCA9IDE7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gY2FtLT5zdHNfYnVmW2ldOworCQl1cmItPmNvbXBsZXRlID0ga29uaWNhd2NfaXNvY19pcnE7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBGUkFNRVNfUEVSX0RFU0M7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IEZSQU1FU19QRVJfREVTQzsKKwkJZm9yIChqPTA7IGogPCBGUkFNRVNfUEVSX0RFU0M7IGorKykgeworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5vZmZzZXQgPSBqOworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5sZW5ndGggPSAxOworCQl9CisJfQorCisJY2FtLT5sYXN0X2RhdGFfdXJiID0gTlVMTDsKKwkKKwkvKiBTdWJtaXQgYWxsIFVSQnMgKi8KKwlmb3IgKGk9MDsgaSA8IFVTQlZJREVPX05VTVNCVUY7IGkrKykgeworCQllcnJGbGFnID0gdXNiX3N1Ym1pdF91cmIoY2FtLT5zdHNfdXJiW2ldLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVyckZsYWcpCisJCQllcnIoInVzYl9zdWJtaXRfaXNvYyglZCkgcmV0ICVkIiwgaSwgZXJyRmxhZyk7CisKKwkJZXJyRmxhZyA9IHVzYl9zdWJtaXRfdXJiKHV2ZC0+c2J1ZltpXS51cmIsIEdGUF9LRVJORUwpOworCQlpZiAoZXJyRmxhZykKKwkJCWVyciAoInVzYl9zdWJtaXRfaXNvYyglZCkgcmV0ICVkIiwgaSwgZXJyRmxhZyk7CisJfQorCisJdXZkLT5zdHJlYW1pbmcgPSAxOworCURFQlVHKDEsICJzdHJlYW1pbmc9MSB2aWRlb19lbmRwPSQlMDJ4IiwgdXZkLT52aWRlb19lbmRwKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBrb25pY2F3Y19zdG9wX2RhdGEoc3RydWN0IHV2ZCAqdXZkKQoreworCWludCBpLCBqOworCXN0cnVjdCBrb25pY2F3YyAqY2FtOworCisJaWYgKCh1dmQgPT0gTlVMTCkgfHwgKCF1dmQtPnN0cmVhbWluZykgfHwgKHV2ZC0+ZGV2ID09IE5VTEwpKQorCQlyZXR1cm47CisKKwlrb25pY2F3Y19jYW1lcmFfb2ZmKHV2ZCk7CisJdXZkLT5zdHJlYW1pbmcgPSAwOworCWNhbSA9IChzdHJ1Y3Qga29uaWNhd2MgKil1dmQtPnVzZXJfZGF0YTsKKwljYW0tPmxhc3RfZGF0YV91cmIgPSBOVUxMOworCisJLyogVW5zY2hlZHVsZSBhbGwgb2YgdGhlIGlzbyB0ZCdzICovCisJZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspIHsKKwkJdXNiX2tpbGxfdXJiKHV2ZC0+c2J1ZltpXS51cmIpOworCQl1c2Jfa2lsbF91cmIoY2FtLT5zdHNfdXJiW2ldKTsKKwl9CisKKwlpZiAoIXV2ZC0+cmVtb3ZlX3BlbmRpbmcpIHsKKwkJLyogU2V0IHBhY2tldCBzaXplIHRvIDAgKi8KKwkJaiA9IHVzYl9zZXRfaW50ZXJmYWNlKHV2ZC0+ZGV2LCB1dmQtPmlmYWNlLCB1dmQtPmlmYWNlQWx0SW5hY3RpdmUpOworCQlpZiAoaiA8IDApIHsKKwkJCWVycigidXNiX3NldF9pbnRlcmZhY2UoKSBlcnJvciAlZC4iLCBqKTsKKwkJCXV2ZC0+bGFzdF9lcnJvciA9IGo7CisJCX0KKwl9Cit9CisKKworc3RhdGljIHZvaWQga29uaWNhd2NfcHJvY2Vzc19pc29jKHN0cnVjdCB1dmQgKnV2ZCwgc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZSkKK3sJCisJc3RydWN0IGtvbmljYXdjICpjYW0gPSAoc3RydWN0IGtvbmljYXdjICopdXZkLT51c2VyX2RhdGE7CisJaW50IG1heGxpbmUgPSBjYW0tPm1heGxpbmU7CisJaW50IHlwbGFuZXN6ID0gY2FtLT55cGxhbmVzejsKKworCWFzc2VydChmcmFtZSAhPSBOVUxMKTsKKworCURFQlVHKDUsICJtYXhsaW5lID0gJWQgeXBsYW5lc3ogPSAlZCIsIG1heGxpbmUsIHlwbGFuZXN6KTsKKwlERUJVRygzLCAiRnJhbWUgc3RhdGUgPSAlZCIsIGZyYW1lLT5zY2Fuc3RhdGUpOworCisJaWYoZnJhbWUtPnNjYW5zdGF0ZSA9PSBTY2FuU3RhdGVfU2Nhbm5pbmcpIHsKKwkJaW50IGRyb3AgPSAwOworCQlpbnQgY3VyZnJhbWU7CisJCWludCBmZHJvcHMgPSAwOworCQlERUJVRygzLCAiU2VhcmNoaW5nIGZvciBtYXJrZXIsIHF1ZXVlIGxlbiA9ICVkIiwgUmluZ1F1ZXVlX0dldExlbmd0aCgmdXZkLT5kcCkpOworCQl3aGlsZShSaW5nUXVldWVfR2V0TGVuZ3RoKCZ1dmQtPmRwKSA+PSA0KSB7CisJCQlpZiAoKFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMCkgPT0gMHgwMCkgJiYKKwkJCSAgICAoUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAxKSA9PSAweGZmKSAmJgorCQkJICAgIChSSU5HX1FVRVVFX1BFRUsoJnV2ZC0+ZHAsIDIpID09IDB4MDApICYmCisJCQkgICAgKFJJTkdfUVVFVUVfUEVFSygmdXZkLT5kcCwgMykgPCAweDgwKSkgeworCQkJCWN1cmZyYW1lID0gUklOR19RVUVVRV9QRUVLKCZ1dmQtPmRwLCAzKTsKKwkJCQlpZihjYW0tPmxhc3RmcmFtZSA+PSAwKSB7CisJCQkJCWZkcm9wcyA9ICgweDgwICsgY3VyZnJhbWUgLSBjYW0tPmxhc3RmcmFtZSkgJiAweDdGOworCQkJCQlmZHJvcHMtLTsKKwkJCQkJaWYoZmRyb3BzKSB7CisJCQkJCQlpbmZvKCJEcm9wcGVkICVkIGZyYW1lcyAoJWQgLT4gJWQpIiwgZmRyb3BzLAorCQkJCQkJICAgICBjYW0tPmxhc3RmcmFtZSwgY3VyZnJhbWUpOworCQkJCQl9CisJCQkJfQorCQkJCWNhbS0+bGFzdGZyYW1lID0gY3VyZnJhbWU7CisJCQkJZnJhbWUtPmN1cmxpbmUgPSAwOworCQkJCWZyYW1lLT5zY2Fuc3RhdGUgPSBTY2FuU3RhdGVfTGluZXM7CisJCQkJUklOR19RVUVVRV9ERVFVRVVFX0JZVEVTKCZ1dmQtPmRwLCA0KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCVJJTkdfUVVFVUVfREVRVUVVRV9CWVRFUygmdXZkLT5kcCwgMSk7CisJCQlkcm9wKys7CisJCX0KKwkJaWYoZHJvcCkKKwkJCURFQlVHKDIsICJkcm9wcGVkICVkIGJ5dGVzIGxvb2tpbmcgZm9yIG5ldyBmcmFtZSIsIGRyb3ApOworCX0KKworCWlmKGZyYW1lLT5zY2Fuc3RhdGUgPT0gU2NhblN0YXRlX1NjYW5uaW5nKQorCQlyZXR1cm47CisJCQorCS8qIFRyeSB0byBtb3ZlIGRhdGEgZnJvbSBxdWV1ZSBpbnRvIGZyYW1lIGJ1ZmZlcgorCSAqIFdlIGdldCBkYXRhIGluIGJsb2NrcyBvZiAzODQgYnl0ZXMgbWFkZSB1cCBvZjoKKwkgKiAyNTYgWSwgNjQgVSwgNjQgVi4KKwkgKiBUaGlzIG5lZWRzIHRvIGJlIHdyaXR0ZW4gb3V0IGFzIGEgWSBwbGFuZSwgYSBVIHBsYW5lIGFuZCBhIFYgcGxhbmUuCisJICovCisJCQorCXdoaWxlICggZnJhbWUtPmN1cmxpbmUgPCBtYXhsaW5lICYmIChSaW5nUXVldWVfR2V0TGVuZ3RoKCZ1dmQtPmRwKSA+PSAzODQpKSB7CisJCS8qIFkgKi8KKwkJUmluZ1F1ZXVlX0RlcXVldWUoJnV2ZC0+ZHAsIGZyYW1lLT5kYXRhICsgKGZyYW1lLT5jdXJsaW5lICogMjU2KSwgMjU2KTsKKwkJLyogVSAqLworCQlSaW5nUXVldWVfRGVxdWV1ZSgmdXZkLT5kcCwgZnJhbWUtPmRhdGEgKyB5cGxhbmVzeiArIChmcmFtZS0+Y3VybGluZSAqIDY0KSwgNjQpOworCQkvKiBWICovCisJCVJpbmdRdWV1ZV9EZXF1ZXVlKCZ1dmQtPmRwLCBmcmFtZS0+ZGF0YSArICg1ICogeXBsYW5lc3opLzQgKyAoZnJhbWUtPmN1cmxpbmUgKiA2NCksIDY0KTsKKwkJZnJhbWUtPnNlcVJlYWRfTGVuZ3RoICs9IDM4NDsKKwkJZnJhbWUtPmN1cmxpbmUrKzsKKwl9CisJLyogU2VlIGlmIHdlIGZpbGxlZCB0aGUgZnJhbWUgKi8KKwlpZiAoZnJhbWUtPmN1cmxpbmUgPT0gbWF4bGluZSkgeworCQlERUJVRyg1LCAiZ290IHdob2xlIGZyYW1lIik7CisKKwkJZnJhbWUtPmZyYW1lU3RhdGUgPSBGcmFtZVN0YXRlX0RvbmVfSG9sZDsKKwkJZnJhbWUtPmN1cmxpbmUgPSAwOworCQl1dmQtPmN1cmZyYW1lID0gLTE7CisJCXV2ZC0+c3RhdHMuZnJhbWVfbnVtKys7CisJfQorfQorCisKK3N0YXRpYyBpbnQga29uaWNhd2NfZmluZF9mcHMoaW50IHNpemUsIGludCBmcHMpCit7CisJaW50IGk7CisKKwlmcHMgKj0gMzsKKwlERUJVRygxLCAia29uaWNhX2ZpbmRfZnBzOiBzaXplID0gJWQgZnBzID0gJWQiLCBzaXplLCBmcHMpOworCWlmKGZwcyA8PSBzcGRfdG9fZnBzW3NpemVdWzBdKQorCQlyZXR1cm4gMDsKKworCWlmKGZwcyA+PSBzcGRfdG9fZnBzW3NpemVdW01BWF9TUEVFRF0pCisJCXJldHVybiBNQVhfU1BFRUQ7CisKKwlmb3IoaSA9IDA7IGkgPCBNQVhfU1BFRUQ7IGkrKykgeworCQlpZigoZnBzID49IHNwZF90b19mcHNbc2l6ZV1baV0pICYmIChmcHMgPD0gc3BkX3RvX2Zwc1tzaXplXVtpKzFdKSkgeworCQkJREVCVUcoMiwgImZwcyAlZCBiZXR3ZWVuICVkIGFuZCAlZCIsIGZwcywgaSwgaSsxKTsKKwkJCWlmKCAoZnBzIC0gc3BkX3RvX2Zwc1tzaXplXVtpXSkgPCAoc3BkX3RvX2Zwc1tzaXplXVtpKzFdIC0gZnBzKSkKKwkJCQlyZXR1cm4gaTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gaSsxOworCQl9CisJfQorCXJldHVybiBNQVhfU1BFRUQrMTsKK30KKworCitzdGF0aWMgaW50IGtvbmljYXdjX3NldF92aWRlb19tb2RlKHN0cnVjdCB1dmQgKnV2ZCwgc3RydWN0IHZpZGVvX3dpbmRvdyAqdncpCit7CisJc3RydWN0IGtvbmljYXdjICpjYW0gPSAoc3RydWN0IGtvbmljYXdjICopdXZkLT51c2VyX2RhdGE7CisJaW50IG5ld3NwZWVkID0gY2FtLT5zcGVlZDsKKwlpbnQgbmV3c2l6ZTsKKwlpbnQgeCA9IHZ3LT53aWR0aDsKKwlpbnQgeSA9IHZ3LT5oZWlnaHQ7CisJaW50IGZwcyA9IHZ3LT5mbGFnczsKKworCWlmKHggPiAwICYmIHkgPiAwKSB7CisJCURFQlVHKDIsICJ0cnlpbmcgdG8gZmluZCBzaXplICVkLCVkIiwgeCwgeSk7CisJCWZvcihuZXdzaXplID0gMDsgbmV3c2l6ZSA8PSBNQVhfRlJBTUVfU0laRTsgbmV3c2l6ZSsrKSB7CisJCQlpZigoY2FtZXJhX3NpemVzW25ld3NpemVdLndpZHRoID09IHgpICYmIChjYW1lcmFfc2l6ZXNbbmV3c2l6ZV0uaGVpZ2h0ID09IHkpKQorCQkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJbmV3c2l6ZSA9IGNhbS0+c2l6ZTsKKwl9CisKKwlpZihuZXdzaXplID4gTUFYX0ZSQU1FX1NJWkUpIHsKKwkJREVCVUcoMSwgImNvdWxkbid0IGZpbmQgc2l6ZSAlZCwlZCIsIHgsIHkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZihmcHMgPiAwKSB7CisJCURFQlVHKDEsICJ0cnlpbmcgdG8gc2V0IGZwcyB0byAlZCIsIGZwcyk7CisJCW5ld3NwZWVkID0ga29uaWNhd2NfZmluZF9mcHMobmV3c2l6ZSwgZnBzKTsKKwkJREVCVUcoMSwgImZpbmRfZnBzIHJldHVybmVkICVkICglZCkiLCBuZXdzcGVlZCwgc3BkX3RvX2Zwc1tuZXdzaXplXVtuZXdzcGVlZF0pOworCX0KKworCWlmKG5ld3NwZWVkID4gTUFYX1NQRUVEKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCURFQlVHKDEsICJzZXR0aW5nIHNpemUgdG8gJWQgc3BlZWQgdG8gJWQiLCBuZXdzaXplLCBuZXdzcGVlZCk7CisJaWYoKG5ld3NpemUgPT0gY2FtLT5zaXplKSAmJiAobmV3c3BlZWQgPT0gY2FtLT5zcGVlZCkpIHsKKwkJREVCVUcoMSwgIk5vdGhpbmcgdG8gZG8iKTsKKwkJcmV0dXJuIDA7CisJfQorCURFQlVHKDAsICJzZXR0aW5nIHRvICAlZHglZCBAICVkIGZwcyIsIGNhbWVyYV9zaXplc1tuZXdzaXplXS53aWR0aCwKKwkgICAgIGNhbWVyYV9zaXplc1tuZXdzaXplXS5oZWlnaHQsIHNwZF90b19mcHNbbmV3c2l6ZV1bbmV3c3BlZWRdLzMpOworCisJa29uaWNhd2Nfc3RvcF9kYXRhKHV2ZCk7CisJdXZkLT5pZmFjZUFsdEFjdGl2ZSA9IHNwZF90b19pZmFjZVtuZXdzcGVlZF07CisJREVCVUcoMSwgIm5ldyBpbnRlcmZhY2UgPSAlZCIsIHV2ZC0+aWZhY2VBbHRBY3RpdmUpOworCWNhbS0+c3BlZWQgPSBuZXdzcGVlZDsKKworCWlmKGNhbS0+c2l6ZSAhPSBuZXdzaXplKSB7CisJCWNhbS0+c2l6ZSA9IG5ld3NpemU7CisJCWtvbmljYXdjX3NldF9jYW1lcmFfc2l6ZSh1dmQpOworCX0KKworCS8qIEZsdXNoIHRoZSBpbnB1dCBxdWV1ZSBhbmQgY2xlYXIgYW55IGN1cnJlbnQgZnJhbWUgaW4gcHJvZ3Jlc3MgKi8KKworCVJpbmdRdWV1ZV9GbHVzaCgmdXZkLT5kcCk7CisJY2FtLT5sYXN0ZnJhbWUgPSAtMjsKKwlpZih1dmQtPmN1cmZyYW1lICE9IC0xKSB7CisJICB1dmQtPmZyYW1lW3V2ZC0+Y3VyZnJhbWVdLmN1cmxpbmUgPSAwOworCSAgdXZkLT5mcmFtZVt1dmQtPmN1cmZyYW1lXS5zZXFSZWFkX0xlbmd0aCA9IDA7CisJICB1dmQtPmZyYW1lW3V2ZC0+Y3VyZnJhbWVdLnNlcVJlYWRfSW5kZXggPSAwOworCX0KKworCWtvbmljYXdjX3N0YXJ0X2RhdGEodXZkKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGtvbmljYXdjX2NhbGN1bGF0ZV9mcHMoc3RydWN0IHV2ZCAqdXZkKQoreworCXN0cnVjdCBrb25pY2F3YyAqY2FtID0gdXZkLT51c2VyX2RhdGE7CisJcmV0dXJuIHNwZF90b19mcHNbY2FtLT5zaXplXVtjYW0tPnNwZWVkXS8zOworfQorCisKK3N0YXRpYyB2b2lkIGtvbmljYXdjX2NvbmZpZ3VyZV92aWRlbyhzdHJ1Y3QgdXZkICp1dmQpCit7CisJc3RydWN0IGtvbmljYXdjICpjYW0gPSAoc3RydWN0IGtvbmljYXdjICopdXZkLT51c2VyX2RhdGE7CisJdTggYnVmWzJdOworCisJbWVtc2V0KCZ1dmQtPnZwaWMsIDAsIHNpemVvZih1dmQtPnZwaWMpKTsKKwltZW1zZXQoJnV2ZC0+dnBpY19vbGQsIDB4NTUsIHNpemVvZih1dmQtPnZwaWNfb2xkKSk7CisKKwlSRVNUUklDVF9UT19SQU5HRShicmlnaHRuZXNzLCAwLCBNQVhfQlJJR0hUTkVTUyk7CisJUkVTVFJJQ1RfVE9fUkFOR0UoY29udHJhc3QsIDAsIE1BWF9DT05UUkFTVCk7CisJUkVTVFJJQ1RfVE9fUkFOR0Uoc2F0dXJhdGlvbiwgMCwgTUFYX1NBVFVSQVRJT04pOworCVJFU1RSSUNUX1RPX1JBTkdFKHNoYXJwbmVzcywgMCwgTUFYX1NIQVJQTkVTUyk7CisJUkVTVFJJQ1RfVE9fUkFOR0Uod2hpdGViYWwsIDAsIE1BWF9XSElURUJBTCk7CisKKwljYW0tPmJyaWdodG5lc3MgPSBicmlnaHRuZXNzIC8gMTE7CisJY2FtLT5jb250cmFzdCA9IGNvbnRyYXN0IC8gMTE7CisJY2FtLT5zYXR1cmF0aW9uID0gc2F0dXJhdGlvbiAvIDExOworCWNhbS0+c2hhcnBuZXNzID0gc2hhcnBuZXNzIC8gMTE7CisJY2FtLT53aGl0ZV9iYWwgPSB3aGl0ZWJhbCAvIDExOworCisJdXZkLT52cGljLmNvbG91ciA9IDEwODsKKwl1dmQtPnZwaWMuaHVlID0gMTA4OworCXV2ZC0+dnBpYy5icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKKwl1dmQtPnZwaWMuY29udHJhc3QgPSBjb250cmFzdDsKKwl1dmQtPnZwaWMud2hpdGVuZXNzID0gd2hpdGViYWw7CisJdXZkLT52cGljLmRlcHRoID0gNjsKKwl1dmQtPnZwaWMucGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfWVVWNDIwUDsKKworCW1lbXNldCgmdXZkLT52Y2FwLCAwLCBzaXplb2YodXZkLT52Y2FwKSk7CisJc3RyY3B5KHV2ZC0+dmNhcC5uYW1lLCAiS29uaWNhIFdlYmNhbSIpOworCXV2ZC0+dmNhcC50eXBlID0gVklEX1RZUEVfQ0FQVFVSRTsKKwl1dmQtPnZjYXAuY2hhbm5lbHMgPSAxOworCXV2ZC0+dmNhcC5hdWRpb3MgPSAwOworCXV2ZC0+dmNhcC5taW53aWR0aCA9IGNhbWVyYV9zaXplc1tTSVpFXzE2MFgxMjBdLndpZHRoOworCXV2ZC0+dmNhcC5taW5oZWlnaHQgPSBjYW1lcmFfc2l6ZXNbU0laRV8xNjBYMTIwXS5oZWlnaHQ7CisJdXZkLT52Y2FwLm1heHdpZHRoID0gY2FtZXJhX3NpemVzW1NJWkVfMzIwWDI0MF0ud2lkdGg7CisJdXZkLT52Y2FwLm1heGhlaWdodCA9IGNhbWVyYV9zaXplc1tTSVpFXzMyMFgyNDBdLmhlaWdodDsKKworCW1lbXNldCgmdXZkLT52Y2hhbiwgMCwgc2l6ZW9mKHV2ZC0+dmNoYW4pKTsKKwl1dmQtPnZjaGFuLmZsYWdzID0gMCA7CisJdXZkLT52Y2hhbi50dW5lcnMgPSAwOworCXV2ZC0+dmNoYW4uY2hhbm5lbCA9IDA7CisJdXZkLT52Y2hhbi50eXBlID0gVklERU9fVFlQRV9DQU1FUkE7CisJc3RyY3B5KHV2ZC0+dmNoYW4ubmFtZSwgIkNhbWVyYSIpOworCisJLyogVGFsayB0byBkZXZpY2UgKi8KKwlERUJVRygxLCAiZGV2aWNlIGluaXQiKTsKKwlpZigha29uaWNhd2NfZ2V0X21pc2ModXZkLCAweDMsIDAsIDB4MTAsIGJ1ZiwgMikpCisJCURFQlVHKDIsICIzLDEwIC0+ICUyLjJ4ICUyLjJ4IiwgYnVmWzBdLCBidWZbMV0pOworCWlmKCFrb25pY2F3Y19nZXRfbWlzYyh1dmQsIDB4MywgMCwgMHgxMCwgYnVmLCAyKSkKKwkJREVCVUcoMiwgIjMsMTAgLT4gJTIuMnggJTIuMngiLCBidWZbMF0sIGJ1ZlsxXSk7CisJaWYoa29uaWNhd2Nfc2V0X21pc2ModXZkLCAweDIsIDAsIDB4ZCkpCisJCURFQlVHKDIsICIyLDAsZCBmYWlsZWQiKTsKKwlERUJVRygxLCAic2V0dGluZyBpbml0aWFsIHZhbHVlcyIpOworfQorCisKK3N0YXRpYyBpbnQga29uaWNhd2NfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpkZXZpZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgdXZkICp1dmQgPSBOVUxMOworCWludCBpeCwgaSwgbmFzOworCWludCBhY3RJbnRlcmZhY2U9LTEsIGluYWN0SW50ZXJmYWNlPS0xLCBtYXhQUz0wOworCXVuc2lnbmVkIGNoYXIgdmlkZW9fZXAgPSAwOworCisJREVCVUcoMSwgImtvbmljYXdjX3Byb2JlKCVwKSIsIGludGYpOworCisJLyogV2UgZG9uJ3QgaGFuZGxlIG11bHRpLWNvbmZpZyBjYW1lcmFzICovCisJaWYgKGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpbmZvKCJLb25pY2EgV2ViY2FtIChyZXYuIDB4JTA0eCkiLCBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSk7CisJUkVTVFJJQ1RfVE9fUkFOR0Uoc3BlZWQsIDAsIE1BWF9TUEVFRCk7CisKKwkvKiBWYWxpZGF0ZSBmb3VuZCBpbnRlcmZhY2U6IG11c3QgaGF2ZSBvbmUgSVNPIGVuZHBvaW50ICovCisJbmFzID0gaW50Zi0+bnVtX2FsdHNldHRpbmc7CisJaWYgKG5hcyAhPSA4KSB7CisJCWVycigiSW5jb3JyZWN0IG51bWJlciBvZiBhbHRlcm5hdGUgc2V0dGluZ3MgKCVkKSBmb3IgdGhpcyBjYW1lcmEhIiwgbmFzKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCS8qIFZhbGlkYXRlIGFsbCBhbHRlcm5hdGUgc2V0dGluZ3MgKi8KKwlmb3IgKGl4PTA7IGl4IDwgbmFzOyBpeCsrKSB7CisJCWNvbnN0IHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKworCQlpbnRlcmZhY2UgPSAmaW50Zi0+YWx0c2V0dGluZ1tpeF07CisJCWkgPSBpbnRlcmZhY2UtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmc7CisJCWlmIChpbnRlcmZhY2UtPmRlc2MuYk51bUVuZHBvaW50cyAhPSAyKSB7CisJCQllcnIoIkludGVyZmFjZSAlZC4gaGFzICV1LiBlbmRwb2ludHMhIiwKKwkJCSAgICBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJCSAgICAodW5zaWduZWQpKGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzKSk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzFdLmRlc2M7CisJCURFQlVHKDEsICJmb3VuZCBlbmRwb2ludDogYWRkcjogMHglMi4yeCBtYXhwcyA9IDB4JTQuNHgiLAorCQkgICAgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MsIGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkpOworCQlpZiAodmlkZW9fZXAgPT0gMCkKKwkJCXZpZGVvX2VwID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCWVsc2UgaWYgKHZpZGVvX2VwICE9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSB7CisJCQllcnIoIkFsdGVybmF0ZSBzZXR0aW5ncyBoYXZlIGRpZmZlcmVudCBlbmRwb2ludCBhZGRyZXNzZXMhIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlpZiAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAweDAzKSAhPSAweDAxKSB7CisJCQllcnIoIkludGVyZmFjZSAlZC4gaGFzIG5vbi1JU08gZW5kcG9pbnQhIiwKKwkJCSAgICBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlcik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlpZiAoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkgPT0gMCkgeworCQkJZXJyKCJJbnRlcmZhY2UgJWQuIGhhcyBJU08gT1VUIGVuZHBvaW50ISIsCisJCQkgICAgaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJaWYgKGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkgPT0gMCkgeworCQkJaWYgKGluYWN0SW50ZXJmYWNlIDwgMCkKKwkJCQlpbmFjdEludGVyZmFjZSA9IGk7CisJCQllbHNlIHsKKwkJCQllcnIoIk1vcmUgdGhhbiBvbmUgaW5hY3RpdmUgYWx0LiBzZXR0aW5nISIpOworCQkJCXJldHVybiAtRU5PREVWOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGkgPT0gc3BkX3RvX2lmYWNlW3NwZWVkXSkgeworCQkJCS8qIFRoaXMgb25lIGlzIHRoZSByZXF1ZXN0ZWQgb25lICovCisJCQkJYWN0SW50ZXJmYWNlID0gaTsKKwkJCX0KKwkJfQorCQlpZiAobGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSA+IG1heFBTKQorCQkJbWF4UFMgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOworCX0KKwlpZihhY3RJbnRlcmZhY2UgPT0gLTEpIHsKKwkJZXJyKCJDYW50IGZpbmQgcmVxdWlyZWQgZW5kcG9pbnQiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJREVCVUcoMSwgIlNlbGVjdGluZyByZXF1ZXN0ZWQgYWN0aXZlIHNldHRpbmc9JWQuIG1heFBTPSVkLiIsIGFjdEludGVyZmFjZSwgbWF4UFMpOworCisJdXZkID0gdXNidmlkZW9fQWxsb2NhdGVEZXZpY2UoY2Ftcyk7CisJaWYgKHV2ZCAhPSBOVUxMKSB7CisJCXN0cnVjdCBrb25pY2F3YyAqY2FtID0gKHN0cnVjdCBrb25pY2F3YyAqKSh1dmQtPnVzZXJfZGF0YSk7CisJCS8qIEhlcmUgdXZkIGlzIGEgZnVsbHkgYWxsb2NhdGVkIHV2ZCBvYmplY3QgKi8KKwkJZm9yKGkgPSAwOyBpIDwgVVNCVklERU9fTlVNU0JVRjsgaSsrKSB7CisJCQljYW0tPnN0c191cmJbaV0gPSB1c2JfYWxsb2NfdXJiKEZSQU1FU19QRVJfREVTQywgR0ZQX0tFUk5FTCk7CisJCQlpZihjYW0tPnN0c191cmJbaV0gPT0gTlVMTCkgeworCQkJCXdoaWxlKGktLSkgeworCQkJCQl1c2JfZnJlZV91cmIoY2FtLT5zdHNfdXJiW2ldKTsKKwkJCQl9CisJCQkJZXJyKCJjYW4ndCBhbGxvY2F0ZSB1cmJzIik7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCX0KKwkJY2FtLT5zcGVlZCA9IHNwZWVkOworCQlSRVNUUklDVF9UT19SQU5HRShzaXplLCBTSVpFXzE2MFgxMjAsIFNJWkVfMzIwWDI0MCk7CisJCWNhbS0+d2lkdGggPSBjYW1lcmFfc2l6ZXNbc2l6ZV0ud2lkdGg7CisJCWNhbS0+aGVpZ2h0ID0gY2FtZXJhX3NpemVzW3NpemVdLmhlaWdodDsKKwkJY2FtLT5zaXplID0gc2l6ZTsKKworCQl1dmQtPmZsYWdzID0gMDsKKwkJdXZkLT5kZWJ1ZyA9IGRlYnVnOworCQl1dmQtPmRldiA9IGRldjsKKwkJdXZkLT5pZmFjZSA9IGludGYtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKwkJdXZkLT5pZmFjZUFsdEluYWN0aXZlID0gaW5hY3RJbnRlcmZhY2U7CisJCXV2ZC0+aWZhY2VBbHRBY3RpdmUgPSBhY3RJbnRlcmZhY2U7CisJCXV2ZC0+dmlkZW9fZW5kcCA9IHZpZGVvX2VwOworCQl1dmQtPmlzb19wYWNrZXRfbGVuID0gbWF4UFM7CisJCXV2ZC0+cGFsZXR0ZUJpdHMgPSAxTCA8PCBWSURFT19QQUxFVFRFX1lVVjQyMFA7CisJCXV2ZC0+ZGVmYXVsdFBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1lVVjQyMFA7CisJCXV2ZC0+Y2FudmFzID0gVklERU9TSVpFKDMyMCwgMjQwKTsKKwkJdXZkLT52aWRlb3NpemUgPSBWSURFT1NJWkUoY2FtLT53aWR0aCwgY2FtLT5oZWlnaHQpOworCisJCS8qIEluaXRpYWxpemUga29uaWNhd2Mgc3BlY2lmaWMgZGF0YSAqLworCQlrb25pY2F3Y19jb25maWd1cmVfdmlkZW8odXZkKTsKKworCQlpID0gdXNidmlkZW9fUmVnaXN0ZXJWaWRlb0RldmljZSh1dmQpOworCQl1dmQtPm1heF9mcmFtZV9zaXplID0gKDMyMCAqIDI0MCAqIDMpLzI7CisJCWlmIChpICE9IDApIHsKKwkJCWVycigidXNidmlkZW9fUmVnaXN0ZXJWaWRlb0RldmljZSgpIGZhaWxlZC4iKTsKKwkJCXV2ZCA9IE5VTEw7CisJCX0KKyNpZmRlZiBDT05GSUdfSU5QVVQKKwkJLyogUmVnaXN0ZXIgaW5wdXQgZGV2aWNlIGZvciBidXR0b24gKi8KKwkJbWVtc2V0KCZjYW0tPmlucHV0LCAwLCBzaXplb2Yoc3RydWN0IGlucHV0X2RldikpOworCQljYW0tPmlucHV0Lm5hbWUgPSAiS29uaWNhd2Mgc25hcHNob3QgYnV0dG9uIjsKKwkJY2FtLT5pbnB1dC5wcml2YXRlID0gY2FtOworCQljYW0tPmlucHV0LmV2Yml0WzBdID0gQklUKEVWX0tFWSk7CisJCWNhbS0+aW5wdXQua2V5Yml0W0xPTkcoQlROXzApXSA9IEJJVChCVE5fMCk7CisJCWNhbS0+aW5wdXQuaWQuYnVzdHlwZSA9IEJVU19VU0I7CisJCWNhbS0+aW5wdXQuaWQudmVuZG9yID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKKwkJY2FtLT5pbnB1dC5pZC5wcm9kdWN0ID0gbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJCWNhbS0+aW5wdXQuaWQudmVyc2lvbiA9IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOworCQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoJmNhbS0+aW5wdXQpOworCQkKKwkJdXNiX21ha2VfcGF0aChkZXYsIGNhbS0+aW5wdXRfcGh5c25hbWUsIDU2KTsKKwkJc3RyY2F0KGNhbS0+aW5wdXRfcGh5c25hbWUsICIvaW5wdXQwIik7CisJCWNhbS0+aW5wdXQucGh5cyA9IGNhbS0+aW5wdXRfcGh5c25hbWU7CisJCWluZm8oImtvbmljYXdjOiAlcyBvbiAlc1xuIiwgY2FtLT5pbnB1dC5uYW1lLCBjYW0tPmlucHV0LnBoeXMpOworI2VuZGlmCisJfQorCisJaWYgKHV2ZCkgeworCQl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCB1dmQpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU87Cit9CisKKworc3RhdGljIHZvaWQga29uaWNhd2NfZnJlZV91dmQoc3RydWN0IHV2ZCAqdXZkKQoreworCWludCBpOworCXN0cnVjdCBrb25pY2F3YyAqY2FtID0gKHN0cnVjdCBrb25pY2F3YyAqKXV2ZC0+dXNlcl9kYXRhOworCisjaWZkZWYgQ09ORklHX0lOUFVUCisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoJmNhbS0+aW5wdXQpOworI2VuZGlmCisJZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspIHsKKwkJdXNiX2ZyZWVfdXJiKGNhbS0+c3RzX3VyYltpXSk7CisJCWNhbS0+c3RzX3VyYltpXSA9IE5VTEw7CisJfQorfQorCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworCXsgVVNCX0RFVklDRSgweDA0YzgsIDB4MDcyMCkgfSwgLyogSW50ZWwgWUMgNzYgKi8KKwl7IH0gIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisKK3N0YXRpYyBpbnQgX19pbml0IGtvbmljYXdjX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgdXNidmlkZW9fY2IgY2JUYmw7CisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCW1lbXNldCgmY2JUYmwsIDAsIHNpemVvZihjYlRibCkpOworCWNiVGJsLnByb2JlID0ga29uaWNhd2NfcHJvYmU7CisJY2JUYmwuc2V0dXBPbk9wZW4gPSBrb25pY2F3Y19zZXR1cF9vbl9vcGVuOworCWNiVGJsLnByb2Nlc3NEYXRhID0ga29uaWNhd2NfcHJvY2Vzc19pc29jOworCWNiVGJsLmdldEZQUyA9IGtvbmljYXdjX2NhbGN1bGF0ZV9mcHM7CisJY2JUYmwuc2V0VmlkZW9Nb2RlID0ga29uaWNhd2Nfc2V0X3ZpZGVvX21vZGU7CisJY2JUYmwuc3RhcnREYXRhUHVtcCA9IGtvbmljYXdjX3N0YXJ0X2RhdGE7CisJY2JUYmwuc3RvcERhdGFQdW1wID0ga29uaWNhd2Nfc3RvcF9kYXRhOworCWNiVGJsLmFkanVzdFBpY3R1cmUgPSBrb25pY2F3Y19hZGp1c3RfcGljdHVyZTsKKwljYlRibC51c2VyRnJlZSA9IGtvbmljYXdjX2ZyZWVfdXZkOworCXJldHVybiB1c2J2aWRlb19yZWdpc3RlcigKKwkJJmNhbXMsCisJCU1BWF9DQU1FUkFTLAorCQlzaXplb2Yoc3RydWN0IGtvbmljYXdjKSwKKwkJImtvbmljYXdjIiwKKwkJJmNiVGJsLAorCQlUSElTX01PRFVMRSwKKwkJaWRfdGFibGUpOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBrb25pY2F3Y19jbGVhbnVwKHZvaWQpCit7CisJdXNidmlkZW9fRGVyZWdpc3RlcigmY2Ftcyk7Cit9CisKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiU2ltb24gRXZhbnMgPHNwc2VAc2VjcmV0Lm9yZy51az4iKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7Cittb2R1bGVfcGFyYW0oc3BlZWQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNwZWVkLCAiSW5pdGlhbCBzcGVlZDogMCAoc2xvd2VzdCkgLSA2IChmYXN0ZXN0KSIpOworbW9kdWxlX3BhcmFtKHNpemUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNpemUsICJJbml0aWFsIFNpemUgMDogMTYweDEyMCAxOiAxNjB4MTM2IDI6IDE3NngxNDQgMzogMzIweDI0MCIpOworbW9kdWxlX3BhcmFtKGJyaWdodG5lc3MsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGJyaWdodG5lc3MsICJJbml0aWFsIGJyaWdodG5lc3MgMCAtIDEwOCIpOworbW9kdWxlX3BhcmFtKGNvbnRyYXN0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhjb250cmFzdCwgIkluaXRpYWwgY29udHJhc3QgMCAtIDEwOCIpOworbW9kdWxlX3BhcmFtKHNhdHVyYXRpb24sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNhdHVyYXRpb24sICJJbml0aWFsIHNhdHVyYXRpb24gMCAtIDEwOCIpOworbW9kdWxlX3BhcmFtKHNoYXJwbmVzcywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Moc2hhcnBuZXNzLCAiSW5pdGlhbCBicmlnaHRuZXNzIDAgLSAxMDgiKTsKK21vZHVsZV9wYXJhbSh3aGl0ZWJhbCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mod2hpdGViYWwsICJJbml0aWFsIHdoaXRlIGJhbGFuY2UgMCAtIDM2MyIpOworCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbDogMC05IChkZWZhdWx0PTApIik7CisjZW5kaWYKKworbW9kdWxlX2luaXQoa29uaWNhd2NfaW5pdCk7Cittb2R1bGVfZXhpdChrb25pY2F3Y19jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL292NTExLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9vdjUxMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZDdmZmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9vdjUxMS5jCkBAIC0wLDAgKzEsNjEzMSBAQAorLyoKKyAqIE9tbmlWaXNpb24gT1Y1MTEgQ2FtZXJhLXRvLVVTQiBCcmlkZ2UgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDMgTWFyayBXLiBNY0NsZWxsYW5kCisgKiBPcmlnaW5hbCBkZWNvbXByZXNzaW9uIGNvZGUgQ29weXJpZ2h0IDE5OTgtMjAwMCBPbW5pVmlzaW9uIFRlY2hub2xvZ2llcworICogTWFueSBpbXByb3ZlbWVudHMgYnkgQnJldCBXYWxsYWNoIDxid2FsbGFjMUBzYW4ucnIuY29tPgorICogQ29sb3IgZml4ZXMgYnkgYnkgT3Jpb24gU2t5IExhd2xvciA8b2xhd2xvckBhY20ub3JnPiAoMi8yNi8yMDAwKQorICogU25hcHNob3QgY29kZSBieSBLZXZpbiBNb29yZQorICogT1Y3NjIwIGZpeGVzIGJ5IENoYXJsIFAuIEJvdGhhIDxjcGJvdGhhQGllZWUub3JnPgorICogQ2hhbmdlcyBieSBDbGF1ZGlvIE1hdHN1b2thIDxjbGF1ZGlvQGNvbmVjdGl2YS5jb20+CisgKiBPcmlnaW5hbCBTQUE3MTExQSBjb2RlIGJ5IERhdmUgUGVya3MgPGRwZXJrc0BpYm0ubmV0PgorICogVVJCIGVycm9yIG1lc3NhZ2VzIGZyb20gcHdjIGRyaXZlciBieSBOZW1vc29mdAorICogZ2VuZXJpY19pb2N0bCgpIGNvZGUgZnJvbSB2aWRlb2Rldi5jIGJ5IEdlcmQgS25vcnIgYW5kIEFsYW4gQ294CisgKiBNZW1vcnkgbWFuYWdlbWVudCAocnZtYWxsb2MpIGNvZGUgZnJvbSBidHR2IGRyaXZlciwgYnkgR2VyZCBLbm9yciBhbmQgb3RoZXJzCisgKgorICogQmFzZWQgb24gdGhlIExpbnV4IENQaUEgZHJpdmVyIHdyaXR0ZW4gYnkgUGV0ZXIgUHJlZ2xlciwKKyAqIFNjb3R0IEouIEJlcnRpbiBhbmQgSm9oYW5uZXMgRXJkZmVsdC4KKyAqIAorICogUGxlYXNlIHNlZSB0aGUgZmlsZTogRG9jdW1lbnRhdGlvbi91c2Ivb3Y1MTEudHh0CisgKiBhbmQgdGhlIHdlYnNpdGUgYXQ6ICBodHRwOi8vYWxwaGEuZHluZG5zLm9yZy9vdjUxMQorICogZm9yIG1vcmUgaW5mby4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaWYgZGVmaW5lZCAoX19pMzg2X18pCisJI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIm92NTExLmgiCisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjY0IGZvciBMaW51eCAyLjUiCisjZGVmaW5lIEVNQUlMICJtYXJrQGFscGhhLmR5bmRucy5vcmciCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIk1hcmsgTWNDbGVsbGFuZCA8bWFya0BhbHBoYS5keW5kbnMub3JnPiAmIEJyZXQgV2FsbGFjaCBcCisJJiBPcmlvbiBTa3kgTGF3bG9yIDxvbGF3bG9yQGFjbS5vcmc+ICYgS2V2aW4gTW9vcmUgJiBDaGFybCBQLiBCb3RoYSBcCisJPGNwYm90aGFAaWVlZS5vcmc+ICYgQ2xhdWRpbyBNYXRzdW9rYSA8Y2xhdWRpb0Bjb25lY3RpdmEuY29tPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIm92NTExIFVTQiBDYW1lcmEgRHJpdmVyIgorCisjZGVmaW5lIE9WNTExX0kyQ19SRVRSSUVTIDMKKyNkZWZpbmUgRU5BQkxFX1lfUVVBTlRBQkxFIDEKKyNkZWZpbmUgRU5BQkxFX1VWX1FVQU5UQUJMRSAxCisKKyNkZWZpbmUgT1Y1MTFfTUFYX1VOSVRfVklERU8gMTYKKworLyogUGl4ZWwgY291bnQgKiBieXRlcyBwZXIgWVVWNDIwIHBpeGVsICgxLjUpICovCisjZGVmaW5lIE1BWF9GUkFNRV9TSVpFKHcsIGgpICgodykgKiAoaCkgKiAzIC8gMikKKworI2RlZmluZSBNQVhfREFUQV9TSVpFKHcsIGgpIChNQVhfRlJBTUVfU0laRSh3LCBoKSArIHNpemVvZihzdHJ1Y3QgdGltZXZhbCkpCisKKy8qIE1heCBzaXplICogYnl0ZXMgcGVyIFlVVjQyMCBwaXhlbCAoMS41KSArIG9uZSBleHRyYSBpc29jIGZyYW1lIGZvciBzYWZldHkgKi8KKyNkZWZpbmUgTUFYX1JBV19EQVRBX1NJWkUodywgaCkgKCh3KSAqIChoKSAqIDMgLyAyICsgMTAyNCkKKworI2RlZmluZSBGQVRBTF9FUlJPUihyYykgKChyYykgPCAwICYmIChyYykgIT0gLUVQRVJNKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTW9kdWxlIFBhcmFtZXRlcnMKKyAqIChTZWUgb3Y1MTEudHh0IGZvciBkZXRhaWxlZCBkZXNjcmlwdGlvbnMgb2YgdGhlc2UpCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhlc2UgdmFyaWFibGVzIChhbmQgYWxsIHN0YXRpYyBnbG9iYWxzKSBkZWZhdWx0IHRvIHplcm8gKi8KK3N0YXRpYyBpbnQgYXV0b2JyaWdodAkJPSAxOworc3RhdGljIGludCBhdXRvZ2FpbgkJPSAxOworc3RhdGljIGludCBhdXRvZXhwCQk9IDE7CitzdGF0aWMgaW50IGRlYnVnOworc3RhdGljIGludCBzbmFwc2hvdDsKK3N0YXRpYyBpbnQgY2FtcwkJCT0gMTsKK3N0YXRpYyBpbnQgY29tcHJlc3M7CitzdGF0aWMgaW50IHRlc3RwYXQ7CitzdGF0aWMgaW50IGR1bXBwaXg7CitzdGF0aWMgaW50IGxlZCAJCQk9IDE7CitzdGF0aWMgaW50IGR1bXBfYnJpZGdlOworc3RhdGljIGludCBkdW1wX3NlbnNvcjsKK3N0YXRpYyBpbnQgcHJpbnRwaDsKK3N0YXRpYyBpbnQgcGh5CQkJPSAweDFmOworc3RhdGljIGludCBwaHV2CQkJPSAweDA1Oworc3RhdGljIGludCBwdnkJCQk9IDB4MDY7CitzdGF0aWMgaW50IHB2dXYJCQk9IDB4MDY7CitzdGF0aWMgaW50IHFoeQkJCT0gMHgxNDsKK3N0YXRpYyBpbnQgcWh1dgkJCT0gMHgwMzsKK3N0YXRpYyBpbnQgcXZ5CQkJPSAweDA0Oworc3RhdGljIGludCBxdnV2CQkJPSAweDA0Oworc3RhdGljIGludCBsaWdodGZyZXE7CitzdGF0aWMgaW50IGJhbmRpbmdmaWx0ZXI7CitzdGF0aWMgaW50IGNsb2NrZGl2CQk9IC0xOworc3RhdGljIGludCBwYWNrZXRzaXplCQk9IC0xOworc3RhdGljIGludCBmcmFtZWRyb3AJCT0gLTE7CitzdGF0aWMgaW50IGZhc3RzZXQ7CitzdGF0aWMgaW50IGZvcmNlX3BhbGV0dGU7CitzdGF0aWMgaW50IGJhY2tsaWdodDsKK3N0YXRpYyBpbnQgdW5pdF92aWRlb1tPVjUxMV9NQVhfVU5JVF9WSURFT107CitzdGF0aWMgaW50IHJlbW92ZV96ZXJvczsKK3N0YXRpYyBpbnQgbWlycm9yOworc3RhdGljIGludCBvdjUxOF9jb2xvcjsKKworbW9kdWxlX3BhcmFtKGF1dG9icmlnaHQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGF1dG9icmlnaHQsICJTZW5zb3IgYXV0b21hdGljYWxseSBjaGFuZ2VzIGJyaWdodG5lc3MiKTsKK21vZHVsZV9wYXJhbShhdXRvZ2FpbiwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoYXV0b2dhaW4sICJTZW5zb3IgYXV0b21hdGljYWxseSBjaGFuZ2VzIGdhaW4iKTsKK21vZHVsZV9wYXJhbShhdXRvZXhwLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhhdXRvZXhwLCAiU2Vuc29yIGF1dG9tYXRpY2FsbHkgY2hhbmdlcyBleHBvc3VyZSIpOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywKKyAgIkRlYnVnIGxldmVsOiAwPW5vbmUsIDE9aW5pdHMsIDI9d2FybmluZywgMz1jb25maWcsIDQ9ZnVuY3Rpb25zLCA1PW1heCIpOworbW9kdWxlX3BhcmFtKHNuYXBzaG90LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhzbmFwc2hvdCwgIkVuYWJsZSBzbmFwc2hvdCBtb2RlIik7Cittb2R1bGVfcGFyYW0oY2FtcywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoY2FtcywgIk51bWJlciBvZiBzaW11bHRhbmVvdXMgY2FtZXJhcyIpOworbW9kdWxlX3BhcmFtKGNvbXByZXNzLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhjb21wcmVzcywgIlR1cm4gb24gY29tcHJlc3Npb24iKTsKK21vZHVsZV9wYXJhbSh0ZXN0cGF0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh0ZXN0cGF0LAorICAiUmVwbGFjZSBpbWFnZSB3aXRoIHZlcnRpY2FsIGJhciB0ZXN0cGF0dGVybiAob25seSBwYXJ0aWFsbHkgd29ya2luZykiKTsKK21vZHVsZV9wYXJhbShkdW1wcGl4LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkdW1wcGl4LCAiRHVtcCByYXcgcGl4ZWwgZGF0YSIpOworbW9kdWxlX3BhcmFtKGxlZCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobGVkLAorICAiTEVEIHBvbGljeSAoT1Y1MTErIG9yIGxhdGVyKS4gMD1vZmYsIDE9b24gKGRlZmF1bHQpLCAyPWF1dG8gKG9uIHdoZW4gb3BlbikiKTsKK21vZHVsZV9wYXJhbShkdW1wX2JyaWRnZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZHVtcF9icmlkZ2UsICJEdW1wIHRoZSBicmlkZ2UgcmVnaXN0ZXJzIik7Cittb2R1bGVfcGFyYW0oZHVtcF9zZW5zb3IsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGR1bXBfc2Vuc29yLCAiRHVtcCB0aGUgc2Vuc29yIHJlZ2lzdGVycyIpOworbW9kdWxlX3BhcmFtKHByaW50cGgsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHByaW50cGgsICJQcmludCBmcmFtZSBzdGFydC9lbmQgaGVhZGVycyIpOworbW9kdWxlX3BhcmFtKHBoeSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocGh5LCAiUHJlZGljdGlvbiByYW5nZSAoaG9yaXouIFkpIik7Cittb2R1bGVfcGFyYW0ocGh1diwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocGh1diwgIlByZWRpY3Rpb24gcmFuZ2UgKGhvcml6LiBVVikiKTsKK21vZHVsZV9wYXJhbShwdnksIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHB2eSwgIlByZWRpY3Rpb24gcmFuZ2UgKHZlcnQuIFkpIik7Cittb2R1bGVfcGFyYW0ocHZ1diwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocHZ1diwgIlByZWRpY3Rpb24gcmFuZ2UgKHZlcnQuIFVWKSIpOworbW9kdWxlX3BhcmFtKHFoeSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocWh5LCAiUXVhbnRpemF0aW9uIHRocmVzaG9sZCAoaG9yaXouIFkpIik7Cittb2R1bGVfcGFyYW0ocWh1diwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocWh1diwgIlF1YW50aXphdGlvbiB0aHJlc2hvbGQgKGhvcml6LiBVVikiKTsKK21vZHVsZV9wYXJhbShxdnksIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHF2eSwgIlF1YW50aXphdGlvbiB0aHJlc2hvbGQgKHZlcnQuIFkpIik7Cittb2R1bGVfcGFyYW0ocXZ1diwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocXZ1diwgIlF1YW50aXphdGlvbiB0aHJlc2hvbGQgKHZlcnQuIFVWKSIpOworbW9kdWxlX3BhcmFtKGxpZ2h0ZnJlcSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobGlnaHRmcmVxLAorICAiTGlnaHQgZnJlcXVlbmN5LiBTZXQgdG8gNTAgb3IgNjAgSHosIG9yIHplcm8gZm9yIGRlZmF1bHQgc2V0dGluZ3MiKTsKK21vZHVsZV9wYXJhbShiYW5kaW5nZmlsdGVyLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhiYW5kaW5nZmlsdGVyLAorICAiRW5hYmxlIGJhbmRpbmcgZmlsdGVyICh0byByZWR1Y2UgZWZmZWN0cyBvZiBmbHVvcmVzY2VudCBsaWdodGluZykiKTsKK21vZHVsZV9wYXJhbShjbG9ja2RpdiwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoY2xvY2tkaXYsICJGb3JjZSBwaXhlbCBjbG9jayBkaXZpc29yIHRvIGEgc3BlY2lmaWMgdmFsdWUiKTsKK21vZHVsZV9wYXJhbShwYWNrZXRzaXplLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhwYWNrZXRzaXplLCAiRm9yY2UgYSBzcGVjaWZpYyBpc29jIHBhY2tldCBzaXplIik7Cittb2R1bGVfcGFyYW0oZnJhbWVkcm9wLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhmcmFtZWRyb3AsICJGb3JjZSBhIHNwZWNpZmljIGZyYW1lIGRyb3AgcmVnaXN0ZXIgc2V0dGluZyIpOworbW9kdWxlX3BhcmFtKGZhc3RzZXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGZhc3RzZXQsICJBbGxvd3MgcGljdHVyZSBzZXR0aW5ncyB0byB0YWtlIGVmZmVjdCBpbW1lZGlhdGVseSIpOworbW9kdWxlX3BhcmFtKGZvcmNlX3BhbGV0dGUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGZvcmNlX3BhbGV0dGUsICJGb3JjZSB0aGUgcGFsZXR0ZSB0byBhIHNwZWNpZmljIHZhbHVlIik7Cittb2R1bGVfcGFyYW0oYmFja2xpZ2h0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhiYWNrbGlnaHQsICJGb3Igb2JqZWN0cyB0aGF0IGFyZSBsaXQgZnJvbSBiZWhpbmQiKTsKK3N0YXRpYyBpbnQgbnVtX3V2OworbW9kdWxlX3BhcmFtX2FycmF5KHVuaXRfdmlkZW8sIGludCwgJm51bV91diwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHVuaXRfdmlkZW8sCisgICJGb3JjZSB1c2Ugb2Ygc3BlY2lmaWMgbWlub3IgbnVtYmVyKHMpLiAwIGlzIG5vdCBhbGxvd2VkLiIpOworbW9kdWxlX3BhcmFtKHJlbW92ZV96ZXJvcywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocmVtb3ZlX3plcm9zLAorICAiUmVtb3ZlIHplcm8tcGFkZGluZyBmcm9tIHVuY29tcHJlc3NlZCBpbmNvbWluZyBkYXRhIik7Cittb2R1bGVfcGFyYW0obWlycm9yLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtaXJyb3IsICJSZXZlcnNlIGltYWdlIGhvcml6b250YWxseSIpOworbW9kdWxlX3BhcmFtKG92NTE4X2NvbG9yLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhvdjUxOF9jb2xvciwgIkVuYWJsZSBPVjUxOCBjb2xvciAoZXhwZXJpbWVudGFsKSIpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1pc2NlbGxhbmVvdXMgR2xvYmFscworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBvdjUxMV9kcml2ZXI7CisKK3N0YXRpYyBzdHJ1Y3Qgb3Y1MXhfZGVjb21wX29wcyAqb3Y1MTFfZGVjb21wX29wczsKK3N0YXRpYyBzdHJ1Y3Qgb3Y1MXhfZGVjb21wX29wcyAqb3Y1MTFfbW14X2RlY29tcF9vcHM7CitzdGF0aWMgc3RydWN0IG92NTF4X2RlY29tcF9vcHMgKm92NTE4X2RlY29tcF9vcHM7CitzdGF0aWMgc3RydWN0IG92NTF4X2RlY29tcF9vcHMgKm92NTE4X21teF9kZWNvbXBfb3BzOworCisvKiBOdW1iZXIgb2YgdGltZXMgdG8gcmV0cnkgYSBmYWlsZWQgSTJDIHRyYW5zYWN0aW9uLiBJbmNyZWFzZSB0aGlzIGlmIHlvdQorICogYXJlIGdldHRpbmcgIkZhaWxlZCB0byByZWFkIHNlbnNvciBJRC4uLiIgKi8KK3N0YXRpYyBpbnQgaTJjX2RldGVjdF90cmllcyA9IDU7CisKKy8qIE1NWCBzdXBwb3J0IGlzIHByZXNlbnQgaW4ga2VybmVsIGFuZCBDUFUuIENoZWNrZWQgdXBvbiBkZWNvbXAgbW9kdWxlIGxvYWQuICovCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorI2RlZmluZSBvdjUxeF9tbXhfYXZhaWxhYmxlIChjcHVfaGFzX21teCkKKyNlbHNlCisjZGVmaW5lIG92NTF4X21teF9hdmFpbGFibGUgKDApCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVkVORF9PTU5JVklTSU9OLCBQUk9EX09WNTExKSB9LAorCXsgVVNCX0RFVklDRShWRU5EX09NTklWSVNJT04sIFBST0RfT1Y1MTFQTFVTKSB9LAorCXsgVVNCX0RFVklDRShWRU5EX09NTklWSVNJT04sIFBST0RfT1Y1MTgpIH0sCisJeyBVU0JfREVWSUNFKFZFTkRfT01OSVZJU0lPTiwgUFJPRF9PVjUxOFBMVVMpIH0sCisJeyBVU0JfREVWSUNFKFZFTkRfTUFUVEVMLCBQUk9EX01FMkNBTSkgfSwKKwl7IH0gIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGRldmljZV90YWJsZSk7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHlRdWFuVGFibGU1MTFbXSA9IE9WNTExX1lRVUFOVEFCTEU7CitzdGF0aWMgdW5zaWduZWQgY2hhciB1dlF1YW5UYWJsZTUxMVtdID0gT1Y1MTFfVVZRVUFOVEFCTEU7CitzdGF0aWMgdW5zaWduZWQgY2hhciB5UXVhblRhYmxlNTE4W10gPSBPVjUxOF9ZUVVBTlRBQkxFOworc3RhdGljIHVuc2lnbmVkIGNoYXIgdXZRdWFuVGFibGU1MThbXSA9IE9WNTE4X1VWUVVBTlRBQkxFOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU3ltYm9saWMgTmFtZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBLbm93biBPVjUxMS1iYXNlZCBjYW1lcmFzICovCitzdGF0aWMgc3RydWN0IHN5bWJvbGljX2xpc3QgY2FtbGlzdFtdID0geworCXsgICAwLCAiR2VuZXJpYyBDYW1lcmEgKG5vIElEKSIgfSwKKwl7ICAgMSwgIk11c3RlayBXQ2FtIDNYIiB9LAorCXsgICAzLCAiRC1MaW5rIERTQi1DMzAwIiB9LAorCXsgICA0LCAiR2VuZXJpYyBPVjUxMS9PVjc2MTAiIH0sCisJeyAgIDUsICJQdXJldGVrIFBULTYwMDciIH0sCisJeyAgIDYsICJMaWZldmlldyBVU0IgTGlmZSBUViAoTlRTQykiIH0sCisJeyAgMjEsICJDcmVhdGl2ZSBMYWJzIFdlYkNhbSAzIiB9LAorCXsgIDIyLCAiTGlmZXZpZXcgVVNCIExpZmUgVFYgKFBBTCBEL0srQi9HKSIgfSwKKwl7ICAzNiwgIktvYWxhLUNhbSIgfSwKKwl7ICAzOCwgIkxpZmV2aWV3IFVTQiBMaWZlIFRWIChQQUwpIiB9LAorCXsgIDQxLCAiU2Ftc3VuZyBBbnljYW0gTVBDLU0xMCIgfSwKKwl7ICA0MywgIk10ZWt2aXNpb24gWmVjYSBNVjQwMiIgfSwKKwl7ICA0NiwgIlN1bWEgZU9OIiB9LAorCXsgIDcwLCAiTGlmZXZpZXcgVVNCIExpZmUgVFYgKFBBTC9TRUNBTSkiIH0sCisJeyAxMDAsICJMaWZldmlldyBSb2JvQ2FtIiB9LAorCXsgMTAyLCAiQXZlck1lZGlhIEludGVyQ2FtIEVsaXRlIiB9LAorCXsgMTEyLCAiTWVkaWFGb3J0ZSBNVjMwMCIgfSwJLyogb3IgT1Y3MTEwIGV2YWx1YXRpb24ga2l0ICovCisJeyAxMzQsICJFem9uaWNzIEVaQ2FtIElJIiB9LAorCXsgMTkyLCAiV2ViZXllIDIwMDBCIiB9LAorCXsgMjUzLCAiQWxwaGEgVmlzaW9uIFRlY2guIEFscGhhQ2FtIFNFIiB9LAorCXsgIC0xLCBOVUxMIH0KK307CisKKy8qIFZpZGVvNExpbnV4MSBQYWxldHRlcyAqLworc3RhdGljIHN0cnVjdCBzeW1ib2xpY19saXN0IHY0bDFfcGxpc3RbXSA9IHsKKwl7IFZJREVPX1BBTEVUVEVfR1JFWSwJIkdSRVkiIH0sCisJeyBWSURFT19QQUxFVFRFX0hJMjQwLAkiSEkyNDAiIH0sCisJeyBWSURFT19QQUxFVFRFX1JHQjU2NSwJIlJHQjU2NSIgfSwKKwl7IFZJREVPX1BBTEVUVEVfUkdCMjQsCSJSR0IyNCIgfSwKKwl7IFZJREVPX1BBTEVUVEVfUkdCMzIsCSJSR0IzMiIgfSwKKwl7IFZJREVPX1BBTEVUVEVfUkdCNTU1LAkiUkdCNTU1IiB9LAorCXsgVklERU9fUEFMRVRURV9ZVVY0MjIsCSJZVVY0MjIiIH0sCisJeyBWSURFT19QQUxFVFRFX1lVWVYsCSJZVVlWIiB9LAorCXsgVklERU9fUEFMRVRURV9VWVZZLAkiVVlWWSIgfSwKKwl7IFZJREVPX1BBTEVUVEVfWVVWNDIwLAkiWVVWNDIwIiB9LAorCXsgVklERU9fUEFMRVRURV9ZVVY0MTEsCSJZVVY0MTEiIH0sCisJeyBWSURFT19QQUxFVFRFX1JBVywJIlJBVyIgfSwKKwl7IFZJREVPX1BBTEVUVEVfWVVWNDIyUCwiWVVWNDIyUCIgfSwKKwl7IFZJREVPX1BBTEVUVEVfWVVWNDExUCwiWVVWNDExUCIgfSwKKwl7IFZJREVPX1BBTEVUVEVfWVVWNDIwUCwiWVVWNDIwUCIgfSwKKwl7IFZJREVPX1BBTEVUVEVfWVVWNDEwUCwiWVVWNDEwUCIgfSwKKwl7IC0xLCBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3ltYm9saWNfbGlzdCBicmdsaXN0W10gPSB7CisJeyBCUkdfT1Y1MTEsCQkiT1Y1MTEiIH0sCisJeyBCUkdfT1Y1MTFQTFVTLAkiT1Y1MTErIiB9LAorCXsgQlJHX09WNTE4LAkJIk9WNTE4IiB9LAorCXsgQlJHX09WNTE4UExVUywJIk9WNTE4KyIgfSwKKwl7IC0xLCBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3ltYm9saWNfbGlzdCBzZW5saXN0W10gPSB7CisJeyBTRU5fT1Y3NkJFLAkiT1Y3NkJFIiB9LAorCXsgU0VOX09WNzYxMCwJIk9WNzYxMCIgfSwKKwl7IFNFTl9PVjc2MjAsCSJPVjc2MjAiIH0sCisJeyBTRU5fT1Y3NjIwQUUsCSJPVjc2MjBBRSIgfSwKKwl7IFNFTl9PVjY2MjAsCSJPVjY2MjAiIH0sCisJeyBTRU5fT1Y2NjMwLAkiT1Y2NjMwIiB9LAorCXsgU0VOX09WNjYzMEFFLAkiT1Y2NjMwQUUiIH0sCisJeyBTRU5fT1Y2NjMwQUYsCSJPVjY2MzBBRiIgfSwKKwl7IFNFTl9PVjg2MDAsCSJPVjg2MDAiIH0sCisJeyBTRU5fS1MwMTI3LAkiS1MwMTI3IiB9LAorCXsgU0VOX0tTMDEyN0IsCSJLUzAxMjdCIiB9LAorCXsgU0VOX1NBQTcxMTFBLAkiU0FBNzExMUEiIH0sCisJeyAtMSwgTlVMTCB9Cit9OworCisvKiBVUkIgZXJyb3IgY29kZXM6ICovCitzdGF0aWMgc3RydWN0IHN5bWJvbGljX2xpc3QgdXJiX2Vycmxpc3RbXSA9IHsKKwl7IC1FTk9TUiwJIkJ1ZmZlciBlcnJvciAob3ZlcnJ1bikiIH0sCisJeyAtRVBJUEUsCSJTdGFsbGVkIChkZXZpY2Ugbm90IHJlc3BvbmRpbmcpIiB9LAorCXsgLUVPVkVSRkxPVywJIkJhYmJsZSAoYmFkIGNhYmxlPykiIH0sCisJeyAtRVBST1RPLAkiQml0LXN0dWZmIGVycm9yIChiYWQgY2FibGU/KSIgfSwKKwl7IC1FSUxTRVEsCSJDUkMvVGltZW91dCIgfSwKKwl7IC1FVElNRURPVVQsCSJOQUsgKGRldmljZSBkb2VzIG5vdCByZXNwb25kKSIgfSwKKwl7IC0xLCBOVUxMIH0KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNZW1vcnkgbWFuYWdlbWVudAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCAqCitydm1hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdm9pZCAqbWVtOworCXVuc2lnbmVkIGxvbmcgYWRyOworCisJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CisJbWVtID0gdm1hbGxvY18zMihzaXplKTsKKwlpZiAoIW1lbSkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQobWVtLCAwLCBzaXplKTsgLyogQ2xlYXIgdGhlIHJhbSBvdXQsIG5vIGp1bmsgdG8gdGhlIHVzZXIgKi8KKwlhZHIgPSAodW5zaWduZWQgbG9uZykgbWVtOworCXdoaWxlIChzaXplID4gMCkgeworCQlTZXRQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CisJCWFkciArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKworCXJldHVybiBtZW07Cit9CisKK3N0YXRpYyB2b2lkCitydmZyZWUodm9pZCAqbWVtLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlpZiAoIW1lbSkKKwkJcmV0dXJuOworCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKKwl3aGlsZSAoKGxvbmcpIHNpemUgPiAwKSB7CisJCUNsZWFyUGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOworCQlhZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisJdmZyZWUobWVtKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBSZWdpc3RlciBJL08KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogV3JpdGUgYW4gT1Y1MXggcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbnQKK3JlZ193KHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgY2hhciB2YWx1ZSkKK3sKKwlpbnQgcmM7CisKKwlQREVCVUcoNSwgIjB4JTAyWDoweCUwMlgiLCByZWcsIHZhbHVlKTsKKworCWRvd24oJm92LT5jYnVmX2xvY2spOworCW92LT5jYnVmWzBdID0gdmFsdWU7CisJcmMgPSB1c2JfY29udHJvbF9tc2cob3YtPmRldiwKKwkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKG92LT5kZXYsIDApLAorCQkJICAgICAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpPzE6MiAvKiBSRUdfSU8gKi8sCisJCQkgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgIDAsIChfX3UxNilyZWcsICZvdi0+Y2J1ZlswXSwgMSwgMTAwMCk7CisJdXAoJm92LT5jYnVmX2xvY2spOworCisJaWYgKHJjIDwgMCkKKwkJZXJyKCJyZWcgd3JpdGU6IGVycm9yICVkOiAlcyIsIHJjLCBzeW1ib2xpYyh1cmJfZXJybGlzdCwgcmMpKTsKKworCXJldHVybiByYzsKK30KKworLyogUmVhZCBmcm9tIGFuIE9WNTF4IHJlZ2lzdGVyICovCisvKiByZXR1cm5zOiBuZWdhdGl2ZSBpcyBlcnJvciwgcG9zIG9yIHplcm8gaXMgZGF0YSAqLworc3RhdGljIGludAorcmVnX3Ioc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIGNoYXIgcmVnKQoreworCWludCByYzsKKworCWRvd24oJm92LT5jYnVmX2xvY2spOworCXJjID0gdXNiX2NvbnRyb2xfbXNnKG92LT5kZXYsCisJCQkgICAgIHVzYl9yY3ZjdHJscGlwZShvdi0+ZGV2LCAwKSwKKwkJCSAgICAgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KT8xOjMgLyogUkVHX0lPICovLAorCQkJICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgMCwgKF9fdTE2KXJlZywgJm92LT5jYnVmWzBdLCAxLCAxMDAwKTsKKworCWlmIChyYyA8IDApIHsKKwkJZXJyKCJyZWcgcmVhZDogZXJyb3IgJWQ6ICVzIiwgcmMsIHN5bWJvbGljKHVyYl9lcnJsaXN0LCByYykpOworCX0gZWxzZSB7CisJCXJjID0gb3YtPmNidWZbMF07CisJCVBERUJVRyg1LCAiMHglMDJYOjB4JTAyWCIsIHJlZywgb3YtPmNidWZbMF0pOworCX0KKworCXVwKCZvdi0+Y2J1Zl9sb2NrKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIFdyaXRlcyBiaXRzIGF0IHBvc2l0aW9ucyBzcGVjaWZpZWQgYnkgbWFzayB0byBhbiBPVjUxeCByZWcuIEJpdHMgdGhhdCBhcmUgaW4KKyAqIHRoZSBzYW1lIHBvc2l0aW9uIGFzIDEncyBpbiAibWFzayIgYXJlIGNsZWFyZWQgYW5kIHNldCB0byAidmFsdWUiLiBCaXRzCisgKiB0aGF0IGFyZSBpbiB0aGUgc2FtZSBwb3NpdGlvbiBhcyAwJ3MgaW4gIm1hc2siIGFyZSBwcmVzZXJ2ZWQsIHJlZ2FyZGxlc3MKKyAqIG9mIHRoZWlyIHJlc3BlY3RpdmUgc3RhdGUgaW4gInZhbHVlIi4KKyAqLworc3RhdGljIGludAorcmVnX3dfbWFzayhzdHJ1Y3QgdXNiX292NTExICpvdiwKKwkgICB1bnNpZ25lZCBjaGFyIHJlZywKKwkgICB1bnNpZ25lZCBjaGFyIHZhbHVlLAorCSAgIHVuc2lnbmVkIGNoYXIgbWFzaykKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgb2xkdmFsLCBuZXd2YWw7CisKKwlyZXQgPSByZWdfcihvdiwgcmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW9sZHZhbCA9ICh1bnNpZ25lZCBjaGFyKSByZXQ7CisJb2xkdmFsICY9ICh+bWFzayk7CQkvKiBDbGVhciB0aGUgbWFza2VkIGJpdHMgKi8KKwl2YWx1ZSAmPSBtYXNrOwkJCS8qIEVuZm9yY2UgbWFzayBvbiB2YWx1ZSAqLworCW5ld3ZhbCA9IG9sZHZhbCB8IHZhbHVlOwkvKiBTZXQgdGhlIGRlc2lyZWQgYml0cyAqLworCisJcmV0dXJuIChyZWdfdyhvdiwgcmVnLCBuZXd2YWwpKTsKK30KKworLyogCisgKiBXcml0ZXMgbXVsdGlwbGUgKG4pIGJ5dGUgdmFsdWUgdG8gYSBzaW5nbGUgcmVnaXN0ZXIuIE9ubHkgdmFsaWQgd2l0aCBjZXJ0YWluCisgKiByZWdpc3RlcnMgKDB4MzAgYW5kIDB4YzQgLSAweGNlKS4KKyAqLworc3RhdGljIGludAorb3Y1MThfcmVnX3czMihzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgY2hhciByZWcsIHUzMiB2YWwsIGludCBuKQoreworCWludCByYzsKKworCVBERUJVRyg1LCAiMHglMDJYOiU3ZCwgbj0lZCIsIHJlZywgdmFsLCBuKTsKKworCWRvd24oJm92LT5jYnVmX2xvY2spOworCisJKigoX19sZTMyICopb3YtPmNidWYpID0gX19jcHVfdG9fbGUzMih2YWwpOworCisJcmMgPSB1c2JfY29udHJvbF9tc2cob3YtPmRldiwKKwkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKG92LT5kZXYsIDApLAorCQkJICAgICAxIC8qIFJFR19JTyAqLywKKwkJCSAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgMCwgKF9fdTE2KXJlZywgb3YtPmNidWYsIG4sIDEwMDApOworCXVwKCZvdi0+Y2J1Zl9sb2NrKTsKKworCWlmIChyYyA8IDApCisJCWVycigicmVnIHdyaXRlIG11bHRpcGxlOiBlcnJvciAlZDogJXMiLCByYywKKwkJICAgIHN5bWJvbGljKHVyYl9lcnJsaXN0LCByYykpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitvdjUxMV91cGxvYWRfcXVhbl90YWJsZXMoc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJdW5zaWduZWQgY2hhciAqcFlUYWJsZSA9IHlRdWFuVGFibGU1MTE7CisJdW5zaWduZWQgY2hhciAqcFVWVGFibGUgPSB1dlF1YW5UYWJsZTUxMTsKKwl1bnNpZ25lZCBjaGFyIHZhbDAsIHZhbDE7CisJaW50IGksIHJjLCByZWcgPSBSNTExX0NPTVBfTFVUX0JFR0lOOworCisJUERFQlVHKDQsICJVcGxvYWRpbmcgcXVhbnRpemF0aW9uIHRhYmxlcyIpOworCisJZm9yIChpID0gMDsgaSA8IE9WNTExX1FVQU5UQUJMRVNJWkUgLyAyOyBpKyspIHsKKwkJaWYgKEVOQUJMRV9ZX1FVQU5UQUJMRSkJeworCQkJdmFsMCA9ICpwWVRhYmxlKys7CisJCQl2YWwxID0gKnBZVGFibGUrKzsKKwkJCXZhbDAgJj0gMHgwZjsKKwkJCXZhbDEgJj0gMHgwZjsKKwkJCXZhbDAgfD0gdmFsMSA8PCA0OworCQkJcmMgPSByZWdfdyhvdiwgcmVnLCB2YWwwKTsKKwkJCWlmIChyYyA8IDApCisJCQkJcmV0dXJuIHJjOworCQl9CisKKwkJaWYgKEVOQUJMRV9VVl9RVUFOVEFCTEUpIHsKKwkJCXZhbDAgPSAqcFVWVGFibGUrKzsKKwkJCXZhbDEgPSAqcFVWVGFibGUrKzsKKwkJCXZhbDAgJj0gMHgwZjsKKwkJCXZhbDEgJj0gMHgwZjsKKwkJCXZhbDAgfD0gdmFsMSA8PCA0OworCQkJcmMgPSByZWdfdyhvdiwgcmVnICsgT1Y1MTFfUVVBTlRBQkxFU0laRS8yLCB2YWwwKTsKKwkJCWlmIChyYyA8IDApCisJCQkJcmV0dXJuIHJjOworCQl9CisKKwkJcmVnKys7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIE9WNTE4IHF1YW50aXphdGlvbiB0YWJsZXMgYXJlIDh4NCAoaW5zdGVhZCBvZiA4eDgpICovCitzdGF0aWMgaW50CitvdjUxOF91cGxvYWRfcXVhbl90YWJsZXMoc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJdW5zaWduZWQgY2hhciAqcFlUYWJsZSA9IHlRdWFuVGFibGU1MTg7CisJdW5zaWduZWQgY2hhciAqcFVWVGFibGUgPSB1dlF1YW5UYWJsZTUxODsKKwl1bnNpZ25lZCBjaGFyIHZhbDAsIHZhbDE7CisJaW50IGksIHJjLCByZWcgPSBSNTExX0NPTVBfTFVUX0JFR0lOOworCisJUERFQlVHKDQsICJVcGxvYWRpbmcgcXVhbnRpemF0aW9uIHRhYmxlcyIpOworCisJZm9yIChpID0gMDsgaSA8IE9WNTE4X1FVQU5UQUJMRVNJWkUgLyAyOyBpKyspIHsKKwkJaWYgKEVOQUJMRV9ZX1FVQU5UQUJMRSkgeworCQkJdmFsMCA9ICpwWVRhYmxlKys7CisJCQl2YWwxID0gKnBZVGFibGUrKzsKKwkJCXZhbDAgJj0gMHgwZjsKKwkJCXZhbDEgJj0gMHgwZjsKKwkJCXZhbDAgfD0gdmFsMSA8PCA0OworCQkJcmMgPSByZWdfdyhvdiwgcmVnLCB2YWwwKTsKKwkJCWlmIChyYyA8IDApCisJCQkJcmV0dXJuIHJjOworCQl9CisKKwkJaWYgKEVOQUJMRV9VVl9RVUFOVEFCTEUpIHsKKwkJCXZhbDAgPSAqcFVWVGFibGUrKzsKKwkJCXZhbDEgPSAqcFVWVGFibGUrKzsKKwkJCXZhbDAgJj0gMHgwZjsKKwkJCXZhbDEgJj0gMHgwZjsKKwkJCXZhbDAgfD0gdmFsMSA8PCA0OworCQkJcmMgPSByZWdfdyhvdiwgcmVnICsgT1Y1MThfUVVBTlRBQkxFU0laRS8yLCB2YWwwKTsKKwkJCWlmIChyYyA8IDApCisJCQkJcmV0dXJuIHJjOworCQl9CisKKwkJcmVnKys7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK292NTF4X3Jlc2V0KHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyIHJlc2V0X3R5cGUpCit7CisJaW50IHJjOworCisJLyogU2V0dGluZyBiaXQgMCBub3QgYWxsb3dlZCBvbiA1MTgvNTE4UGx1cyAqLworCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkKKwkJcmVzZXRfdHlwZSAmPSAweGZlOworCisJUERFQlVHKDQsICJSZXNldDogdHlwZT0weCUwMlgiLCByZXNldF90eXBlKTsKKworCXJjID0gcmVnX3cob3YsIFI1MXhfU1lTX1JFU0VULCByZXNldF90eXBlKTsKKwlyYyA9IHJlZ193KG92LCBSNTF4X1NZU19SRVNFVCwgMCk7CisKKwlpZiAocmMgPCAwKQorCQllcnIoInJlc2V0OiBjb21tYW5kIGZhaWxlZCIpOworCisJcmV0dXJuIHJjOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIExvdy1sZXZlbCBJMkMgSS9PIGZ1bmN0aW9ucworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBOT1RFOiBEbyBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IQorICogVGhlIE9WNTE4IEkyQyBJL08gcHJvY2VkdXJlIGlzIGRpZmZlcmVudCwgaGVuY2UsIHRoaXMgZnVuY3Rpb24uCisgKiBUaGlzIGlzIG5vcm1hbGx5IG9ubHkgY2FsbGVkIGZyb20gaTJjX3coKS4gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24KKyAqIGFsd2F5cyBzdWNjZWVkcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHNlbnNvciBpcyBwcmVzZW50IGFuZCB3b3JraW5nLgorICovCitzdGF0aWMgaW50CitvdjUxOF9pMmNfd3JpdGVfaW50ZXJuYWwoc3RydWN0IHVzYl9vdjUxMSAqb3YsCisJCQkgdW5zaWduZWQgY2hhciByZWcsCisJCQkgdW5zaWduZWQgY2hhciB2YWx1ZSkKK3sKKwlpbnQgcmM7CisKKwlQREVCVUcoNSwgIjB4JTAyWDoweCUwMlgiLCByZWcsIHZhbHVlKTsKKworCS8qIFNlbGVjdCBjYW1lcmEgcmVnaXN0ZXIgKi8KKwlyYyA9IHJlZ193KG92LCBSNTF4X0kyQ19TQUREUl8zLCByZWcpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCS8qIFdyaXRlICJ2YWx1ZSIgdG8gSTJDIGRhdGEgcG9ydCBvZiBPVjUxMSAqLworCXJjID0gcmVnX3cob3YsIFI1MXhfSTJDX0RBVEEsIHZhbHVlKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBJbml0aWF0ZSAzLWJ5dGUgd3JpdGUgY3ljbGUgKi8KKwlyYyA9IHJlZ193KG92LCBSNTE4X0kyQ19DVEwsIDB4MDEpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCXJldHVybiAwOworfQorCisvKiBOT1RFOiBEbyBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5ISAqLworc3RhdGljIGludAorb3Y1MTFfaTJjX3dyaXRlX2ludGVybmFsKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LAorCQkJIHVuc2lnbmVkIGNoYXIgcmVnLAorCQkJIHVuc2lnbmVkIGNoYXIgdmFsdWUpCit7CisJaW50IHJjLCByZXRyaWVzOworCisJUERFQlVHKDUsICIweCUwMlg6MHglMDJYIiwgcmVnLCB2YWx1ZSk7CisKKwkvKiBUaHJlZSBieXRlIHdyaXRlIGN5Y2xlICovCisJZm9yIChyZXRyaWVzID0gT1Y1MTFfSTJDX1JFVFJJRVM7IDsgKSB7CisJCS8qIFNlbGVjdCBjYW1lcmEgcmVnaXN0ZXIgKi8KKwkJcmMgPSByZWdfdyhvdiwgUjUxeF9JMkNfU0FERFJfMywgcmVnKTsKKwkJaWYgKHJjIDwgMCkKKwkJCWJyZWFrOworCisJCS8qIFdyaXRlICJ2YWx1ZSIgdG8gSTJDIGRhdGEgcG9ydCBvZiBPVjUxMSAqLworCQlyYyA9IHJlZ193KG92LCBSNTF4X0kyQ19EQVRBLCB2YWx1ZSk7CisJCWlmIChyYyA8IDApCisJCQlicmVhazsKKworCQkvKiBJbml0aWF0ZSAzLWJ5dGUgd3JpdGUgY3ljbGUgKi8KKwkJcmMgPSByZWdfdyhvdiwgUjUxMV9JMkNfQ1RMLCAweDAxKTsKKwkJaWYgKHJjIDwgMCkKKwkJCWJyZWFrOworCisJCS8qIFJldHJ5IHVudGlsIGlkbGUgKi8KKwkJZG8KKwkJCXJjID0gcmVnX3Iob3YsIFI1MTFfSTJDX0NUTCk7CisJCXdoaWxlIChyYyA+IDAgJiYgKChyYyYxKSA9PSAwKSk7IAorCQlpZiAocmMgPCAwKQorCQkJYnJlYWs7CisKKwkJLyogQWNrPyAqLworCQlpZiAoKHJjJjIpID09IDApIHsKKwkJCXJjID0gMDsKKwkJCWJyZWFrOworCQl9CisjaWYgMAorCQkvKiBJMkMgYWJvcnQgKi8KKwkJcmVnX3cob3YsIFI1MTFfSTJDX0NUTCwgMHgxMCk7CisjZW5kaWYKKwkJaWYgKC0tcmV0cmllcyA8IDApIHsKKwkJCWVycigiaTJjIHdyaXRlIHJldHJpZXMgZXhoYXVzdGVkIik7CisJCQlyYyA9IC0xOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qIE5PVEU6IERvIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkhCisgKiBUaGUgT1Y1MTggSTJDIEkvTyBwcm9jZWR1cmUgaXMgZGlmZmVyZW50LCBoZW5jZSwgdGhpcyBmdW5jdGlvbi4KKyAqIFRoaXMgaXMgbm9ybWFsbHkgb25seSBjYWxsZWQgZnJvbSBpMmNfcigpLiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbgorICogYWx3YXlzIHN1Y2NlZWRzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgc2Vuc29yIGlzIHByZXNlbnQgYW5kIHdvcmtpbmcuCisgKi8KK3N0YXRpYyBpbnQKK292NTE4X2kyY19yZWFkX2ludGVybmFsKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyIHJlZykKK3sKKwlpbnQgcmMsIHZhbHVlOworCisJLyogU2VsZWN0IGNhbWVyYSByZWdpc3RlciAqLworCXJjID0gcmVnX3cob3YsIFI1MXhfSTJDX1NBRERSXzIsIHJlZyk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJLyogSW5pdGlhdGUgMi1ieXRlIHdyaXRlIGN5Y2xlICovCisJcmMgPSByZWdfdyhvdiwgUjUxOF9JMkNfQ1RMLCAweDAzKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBJbml0aWF0ZSAyLWJ5dGUgcmVhZCBjeWNsZSAqLworCXJjID0gcmVnX3cob3YsIFI1MThfSTJDX0NUTCwgMHgwNSk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJdmFsdWUgPSByZWdfcihvdiwgUjUxeF9JMkNfREFUQSk7CisKKwlQREVCVUcoNSwgIjB4JTAyWDoweCUwMlgiLCByZWcsIHZhbHVlKTsKKworCXJldHVybiB2YWx1ZTsKK30KKworLyogTk9URTogRG8gbm90IGNhbGwgdGhpcyBmdW5jdGlvbiBkaXJlY3RseSEKKyAqIHJldHVybnM6IG5lZ2F0aXZlIGlzIGVycm9yLCBwb3Mgb3IgemVybyBpcyBkYXRhICovCitzdGF0aWMgaW50CitvdjUxMV9pMmNfcmVhZF9pbnRlcm5hbChzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgY2hhciByZWcpCit7CisJaW50IHJjLCB2YWx1ZSwgcmV0cmllczsKKworCS8qIFR3byBieXRlIHdyaXRlIGN5Y2xlICovCisJZm9yIChyZXRyaWVzID0gT1Y1MTFfSTJDX1JFVFJJRVM7IDsgKSB7CisJCS8qIFNlbGVjdCBjYW1lcmEgcmVnaXN0ZXIgKi8KKwkJcmMgPSByZWdfdyhvdiwgUjUxeF9JMkNfU0FERFJfMiwgcmVnKTsKKwkJaWYgKHJjIDwgMCkKKwkJCXJldHVybiByYzsKKworCQkvKiBJbml0aWF0ZSAyLWJ5dGUgd3JpdGUgY3ljbGUgKi8KKwkJcmMgPSByZWdfdyhvdiwgUjUxMV9JMkNfQ1RMLCAweDAzKTsKKwkJaWYgKHJjIDwgMCkKKwkJCXJldHVybiByYzsKKworCQkvKiBSZXRyeSB1bnRpbCBpZGxlICovCisJCWRvCisJCQkgcmMgPSByZWdfcihvdiwgUjUxMV9JMkNfQ1RMKTsKKwkJd2hpbGUgKHJjID4gMCAmJiAoKHJjJjEpID09IDApKTsKKwkJaWYgKHJjIDwgMCkKKwkJCXJldHVybiByYzsKKworCQlpZiAoKHJjJjIpID09IDApIC8qIEFjaz8gKi8KKwkJCWJyZWFrOworCisJCS8qIEkyQyBhYm9ydCAqLworCQlyZWdfdyhvdiwgUjUxMV9JMkNfQ1RMLCAweDEwKTsKKworCQlpZiAoLS1yZXRyaWVzIDwgMCkgeworCQkJZXJyKCJpMmMgd3JpdGUgcmV0cmllcyBleGhhdXN0ZWQiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCS8qIFR3byBieXRlIHJlYWQgY3ljbGUgKi8KKwlmb3IgKHJldHJpZXMgPSBPVjUxMV9JMkNfUkVUUklFUzsgOyApIHsKKwkJLyogSW5pdGlhdGUgMi1ieXRlIHJlYWQgY3ljbGUgKi8KKwkJcmMgPSByZWdfdyhvdiwgUjUxMV9JMkNfQ1RMLCAweDA1KTsKKwkJaWYgKHJjIDwgMCkKKwkJCXJldHVybiByYzsKKworCQkvKiBSZXRyeSB1bnRpbCBpZGxlICovCisJCWRvCisJCQlyYyA9IHJlZ19yKG92LCBSNTExX0kyQ19DVEwpOworCQl3aGlsZSAocmMgPiAwICYmICgocmMmMSkgPT0gMCkpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCisJCWlmICgocmMmMikgPT0gMCkgLyogQWNrPyAqLworCQkJYnJlYWs7CisKKwkJLyogSTJDIGFib3J0ICovCisJCXJjID0gcmVnX3cob3YsIFI1MTFfSTJDX0NUTCwgMHgxMCk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisKKwkJaWYgKC0tcmV0cmllcyA8IDApIHsKKwkJCWVycigiaTJjIHJlYWQgcmV0cmllcyBleGhhdXN0ZWQiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCXZhbHVlID0gcmVnX3Iob3YsIFI1MXhfSTJDX0RBVEEpOworCisJUERFQlVHKDUsICIweCUwMlg6MHglMDJYIiwgcmVnLCB2YWx1ZSk7CisKKwkvKiBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIGkyY193KCkgd29yayAqLworCXJjID0gcmVnX3cob3YsIFI1MTFfSTJDX0NUTCwgMHgwNSk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJcmV0dXJuIHZhbHVlOworfQorCisvKiByZXR1cm5zOiBuZWdhdGl2ZSBpcyBlcnJvciwgcG9zIG9yIHplcm8gaXMgZGF0YSAqLworc3RhdGljIGludAoraTJjX3Ioc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIGNoYXIgcmVnKQoreworCWludCByYzsKKworCWRvd24oJm92LT5pMmNfbG9jayk7CisKKwlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpCisJCXJjID0gb3Y1MThfaTJjX3JlYWRfaW50ZXJuYWwob3YsIHJlZyk7CisJZWxzZQorCQlyYyA9IG92NTExX2kyY19yZWFkX2ludGVybmFsKG92LCByZWcpOworCisJdXAoJm92LT5pMmNfbG9jayk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQKK2kyY193KHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgY2hhciB2YWx1ZSkKK3sKKwlpbnQgcmM7CisKKwlkb3duKCZvdi0+aTJjX2xvY2spOworCisJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KQorCQlyYyA9IG92NTE4X2kyY193cml0ZV9pbnRlcm5hbChvdiwgcmVnLCB2YWx1ZSk7CisJZWxzZQorCQlyYyA9IG92NTExX2kyY193cml0ZV9pbnRlcm5hbChvdiwgcmVnLCB2YWx1ZSk7CisKKwl1cCgmb3YtPmkyY19sb2NrKTsKKworCXJldHVybiByYzsKK30KKworLyogRG8gbm90IGNhbGwgdGhpcyBmdW5jdGlvbiBkaXJlY3RseSEgKi8KK3N0YXRpYyBpbnQKK292NTF4X2kyY193cml0ZV9tYXNrX2ludGVybmFsKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LAorCQkJICAgICAgdW5zaWduZWQgY2hhciByZWcsCisJCQkgICAgICB1bnNpZ25lZCBjaGFyIHZhbHVlLAorCQkJICAgICAgdW5zaWduZWQgY2hhciBtYXNrKQoreworCWludCByYzsKKwl1bnNpZ25lZCBjaGFyIG9sZHZhbCwgbmV3dmFsOworCisJaWYgKG1hc2sgPT0gMHhmZikgeworCQluZXd2YWwgPSB2YWx1ZTsKKwl9IGVsc2UgeworCQlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpCisJCQlyYyA9IG92NTE4X2kyY19yZWFkX2ludGVybmFsKG92LCByZWcpOworCQllbHNlCisJCQlyYyA9IG92NTExX2kyY19yZWFkX2ludGVybmFsKG92LCByZWcpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCisJCW9sZHZhbCA9ICh1bnNpZ25lZCBjaGFyKSByYzsKKwkJb2xkdmFsICY9ICh+bWFzayk7CQkvKiBDbGVhciB0aGUgbWFza2VkIGJpdHMgKi8KKwkJdmFsdWUgJj0gbWFzazsJCQkvKiBFbmZvcmNlIG1hc2sgb24gdmFsdWUgKi8KKwkJbmV3dmFsID0gb2xkdmFsIHwgdmFsdWU7CS8qIFNldCB0aGUgZGVzaXJlZCBiaXRzICovCisJfQorCisJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KQorCQlyZXR1cm4gKG92NTE4X2kyY193cml0ZV9pbnRlcm5hbChvdiwgcmVnLCBuZXd2YWwpKTsKKwllbHNlCisJCXJldHVybiAob3Y1MTFfaTJjX3dyaXRlX2ludGVybmFsKG92LCByZWcsIG5ld3ZhbCkpOworfQorCisvKiBXcml0ZXMgYml0cyBhdCBwb3NpdGlvbnMgc3BlY2lmaWVkIGJ5IG1hc2sgdG8gYW4gSTJDIHJlZy4gQml0cyB0aGF0IGFyZSBpbgorICogdGhlIHNhbWUgcG9zaXRpb24gYXMgMSdzIGluICJtYXNrIiBhcmUgY2xlYXJlZCBhbmQgc2V0IHRvICJ2YWx1ZSIuIEJpdHMKKyAqIHRoYXQgYXJlIGluIHRoZSBzYW1lIHBvc2l0aW9uIGFzIDAncyBpbiAibWFzayIgYXJlIHByZXNlcnZlZCwgcmVnYXJkbGVzcworICogb2YgdGhlaXIgcmVzcGVjdGl2ZSBzdGF0ZSBpbiAidmFsdWUiLgorICovCitzdGF0aWMgaW50CitpMmNfd19tYXNrKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LAorCSAgIHVuc2lnbmVkIGNoYXIgcmVnLAorCSAgIHVuc2lnbmVkIGNoYXIgdmFsdWUsCisJICAgdW5zaWduZWQgY2hhciBtYXNrKQoreworCWludCByYzsKKworCWRvd24oJm92LT5pMmNfbG9jayk7CisJcmMgPSBvdjUxeF9pMmNfd3JpdGVfbWFza19pbnRlcm5hbChvdiwgcmVnLCB2YWx1ZSwgbWFzayk7CisJdXAoJm92LT5pMmNfbG9jayk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qIFNldCB0aGUgcmVhZCBhbmQgd3JpdGUgc2xhdmUgSURzLiBUaGUgInNsYXZlIiBhcmd1bWVudCBpcyB0aGUgd3JpdGUgc2xhdmUsCisgKiBhbmQgdGhlIHJlYWQgc2xhdmUgd2lsbCBiZSBzZXQgdG8gKHNsYXZlICsgMSkuIG92LT5pMmNfbG9jayBzaG91bGQgYmUgaGVsZAorICogd2hlbiBjYWxsaW5nIHRoaXMuIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBpMmMgSS9PCisgKiBmdW5jdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQKK2kyY19zZXRfc2xhdmVfaW50ZXJuYWwoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIGNoYXIgc2xhdmUpCit7CisJaW50IHJjOworCisJcmMgPSByZWdfdyhvdiwgUjUxeF9JMkNfV19TSUQsIHNsYXZlKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IHJlZ193KG92LCBSNTF4X0kyQ19SX1NJRCwgc2xhdmUgKyAxKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gMDsKK30KKworLyogV3JpdGUgdG8gYSBzcGVjaWZpYyBJMkMgc2xhdmUgSUQgYW5kIHJlZ2lzdGVyLCB1c2luZyB0aGUgc3BlY2lmaWVkIG1hc2sgKi8KK3N0YXRpYyBpbnQKK2kyY193X3NsYXZlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LAorCSAgICB1bnNpZ25lZCBjaGFyIHNsYXZlLAorCSAgICB1bnNpZ25lZCBjaGFyIHJlZywKKwkgICAgdW5zaWduZWQgY2hhciB2YWx1ZSwKKwkgICAgdW5zaWduZWQgY2hhciBtYXNrKQoreworCWludCByYyA9IDA7CisKKwlkb3duKCZvdi0+aTJjX2xvY2spOworCisJLyogU2V0IG5ldyBzbGF2ZSBJRHMgKi8KKwlyYyA9IGkyY19zZXRfc2xhdmVfaW50ZXJuYWwob3YsIHNsYXZlKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIG91dDsKKworCXJjID0gb3Y1MXhfaTJjX3dyaXRlX21hc2tfaW50ZXJuYWwob3YsIHJlZywgdmFsdWUsIG1hc2spOworCitvdXQ6CisJLyogUmVzdG9yZSBwcmltYXJ5IElEcyAqLworCWlmIChpMmNfc2V0X3NsYXZlX2ludGVybmFsKG92LCBvdi0+cHJpbWFyeV9pMmNfc2xhdmUpIDwgMCkKKwkJZXJyKCJDb3VsZG4ndCByZXN0b3JlIHByaW1hcnkgSTJDIHNsYXZlIik7CisKKwl1cCgmb3YtPmkyY19sb2NrKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qIFJlYWQgZnJvbSBhIHNwZWNpZmljIEkyQyBzbGF2ZSBJRCBhbmQgcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbnQKK2kyY19yX3NsYXZlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LAorCSAgICB1bnNpZ25lZCBjaGFyIHNsYXZlLAorCSAgICB1bnNpZ25lZCBjaGFyIHJlZykKK3sKKwlpbnQgcmM7CisKKwlkb3duKCZvdi0+aTJjX2xvY2spOworCisJLyogU2V0IG5ldyBzbGF2ZSBJRHMgKi8KKwlyYyA9IGkyY19zZXRfc2xhdmVfaW50ZXJuYWwob3YsIHNsYXZlKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIG91dDsKKworCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkKKwkJcmMgPSBvdjUxOF9pMmNfcmVhZF9pbnRlcm5hbChvdiwgcmVnKTsKKwllbHNlCisJCXJjID0gb3Y1MTFfaTJjX3JlYWRfaW50ZXJuYWwob3YsIHJlZyk7CisKK291dDoKKwkvKiBSZXN0b3JlIHByaW1hcnkgSURzICovCisJaWYgKGkyY19zZXRfc2xhdmVfaW50ZXJuYWwob3YsIG92LT5wcmltYXJ5X2kyY19zbGF2ZSkgPCAwKQorCQllcnIoIkNvdWxkbid0IHJlc3RvcmUgcHJpbWFyeSBJMkMgc2xhdmUiKTsKKworCXVwKCZvdi0+aTJjX2xvY2spOworCXJldHVybiByYzsKK30KKworLyogU2V0cyBJMkMgcmVhZCBhbmQgd3JpdGUgc2xhdmUgSURzLiBSZXR1cm5zIDwwIGZvciBlcnJvciAqLworc3RhdGljIGludAorb3Y1MXhfc2V0X3NsYXZlX2lkcyhzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgY2hhciBzaWQpCit7CisJaW50IHJjOworCisJZG93bigmb3YtPmkyY19sb2NrKTsKKworCXJjID0gaTJjX3NldF9zbGF2ZV9pbnRlcm5hbChvdiwgc2lkKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIG91dDsKKworCS8vIEZJWE1FOiBJcyB0aGlzIGFjdHVhbGx5IG5lY2Vzc2FyeT8KKwlyYyA9IG92NTF4X3Jlc2V0KG92LCBPVjUxMV9SRVNFVF9OT1JFR1MpOworb3V0OgorCXVwKCZvdi0+aTJjX2xvY2spOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludAord3JpdGVfcmVndmFscyhzdHJ1Y3QgdXNiX292NTExICpvdiwgc3RydWN0IG92NTExX3JlZ3ZhbHMgKiBwUmVndmFscykKK3sKKwlpbnQgcmM7CisKKwl3aGlsZSAocFJlZ3ZhbHMtPmJ1cyAhPSBPVjUxMV9ET05FX0JVUykgeworCQlpZiAocFJlZ3ZhbHMtPmJ1cyA9PSBPVjUxMV9SRUdfQlVTKSB7CisJCQlpZiAoKHJjID0gcmVnX3cob3YsIHBSZWd2YWxzLT5yZWcsIHBSZWd2YWxzLT52YWwpKSA8IDApCisJCQkJcmV0dXJuIHJjOworCQl9IGVsc2UgaWYgKHBSZWd2YWxzLT5idXMgPT0gT1Y1MTFfSTJDX0JVUykgeworCQkJaWYgKChyYyA9IGkyY193KG92LCBwUmVndmFscy0+cmVnLCBwUmVndmFscy0+dmFsKSkgPCAwKQorCQkJCXJldHVybiByYzsKKwkJfSBlbHNlIHsKKwkJCWVycigiQmFkIHJlZ3ZhbCBhcnJheSIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCXBSZWd2YWxzKys7CisJfQorCXJldHVybiAwOworfQorCisjaWZkZWYgT1Y1MTFfREVCVUcKK3N0YXRpYyB2b2lkCitkdW1wX2kyY19yYW5nZShzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IHJlZzEsIGludCByZWduKQoreworCWludCBpLCByYzsKKworCWZvciAoaSA9IHJlZzE7IGkgPD0gcmVnbjsgaSsrKSB7CisJCXJjID0gaTJjX3Iob3YsIGkpOworCQlpbmZvKCJTZW5zb3JbMHglMDJYXSA9IDB4JTAyWCIsIGksIHJjKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitkdW1wX2kyY19yZWdzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCWluZm8oIkkyQyBSRUdTIik7CisJZHVtcF9pMmNfcmFuZ2Uob3YsIDB4MDAsIDB4N0MpOworfQorCitzdGF0aWMgdm9pZAorZHVtcF9yZWdfcmFuZ2Uoc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCByZWcxLCBpbnQgcmVnbikKK3sKKwlpbnQgaSwgcmM7CisKKwlmb3IgKGkgPSByZWcxOyBpIDw9IHJlZ247IGkrKykgeworCQlyYyA9IHJlZ19yKG92LCBpKTsKKwkJaW5mbygiT1Y1MTFbMHglMDJYXSA9IDB4JTAyWCIsIGksIHJjKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitvdjUxMV9kdW1wX3JlZ3Moc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaW5mbygiQ0FNRVJBIElOVEVSRkFDRSBSRUdTIik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4MTAsIDB4MWYpOworCWluZm8oIkRSQU0gSU5URVJGQUNFIFJFR1MiKTsKKwlkdW1wX3JlZ19yYW5nZShvdiwgMHgyMCwgMHgyMyk7CisJaW5mbygiSVNPIEZJRk8gUkVHUyIpOworCWR1bXBfcmVnX3JhbmdlKG92LCAweDMwLCAweDMxKTsKKwlpbmZvKCJQSU8gUkVHUyIpOworCWR1bXBfcmVnX3JhbmdlKG92LCAweDM4LCAweDM5KTsKKwlkdW1wX3JlZ19yYW5nZShvdiwgMHgzZSwgMHgzZSk7CisJaW5mbygiSTJDIFJFR1MiKTsKKwlkdW1wX3JlZ19yYW5nZShvdiwgMHg0MCwgMHg0OSk7CisJaW5mbygiU1lTVEVNIENPTlRST0wgUkVHUyIpOworCWR1bXBfcmVnX3JhbmdlKG92LCAweDUwLCAweDU1KTsKKwlkdW1wX3JlZ19yYW5nZShvdiwgMHg1ZSwgMHg1Zik7CisJaW5mbygiT21uaUNFIFJFR1MiKTsKKwlkdW1wX3JlZ19yYW5nZShvdiwgMHg3MCwgMHg3OSk7CisJLyogTk9URTogUXVhbnRpemF0aW9uIHRhYmxlcyBhcmUgbm90IHJlYWRhYmxlLiBZb3Ugd2lsbCBnZXQgdGhlIHZhbHVlCisJICogaW4gcmVnLiAweDc5IGZvciBldmVyeSB0YWJsZSByZWdpc3RlciAqLworCWR1bXBfcmVnX3JhbmdlKG92LCAweDgwLCAweDlmKTsKKwlkdW1wX3JlZ19yYW5nZShvdiwgMHhhMCwgMHhiZik7CisKK30KKworc3RhdGljIHZvaWQKK292NTE4X2R1bXBfcmVncyhzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlpbmZvKCJWSURFTyBNT0RFIFJFR1MiKTsKKwlkdW1wX3JlZ19yYW5nZShvdiwgMHgyMCwgMHgyZik7CisJaW5mbygiREFUQSBQVU1QIEFORCBTTkFQU0hPVCBSRUdTIik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4MzAsIDB4M2YpOworCWluZm8oIkkyQyBSRUdTIik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4NDAsIDB4NGYpOworCWluZm8oIlNZU1RFTSBDT05UUk9MIEFORCBWRU5ET1IgUkVHUyIpOworCWR1bXBfcmVnX3JhbmdlKG92LCAweDUwLCAweDVmKTsKKwlpbmZvKCI2MCAtIDZGIik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4NjAsIDB4NmYpOworCWluZm8oIjcwIC0gN0YiKTsKKwlkdW1wX3JlZ19yYW5nZShvdiwgMHg3MCwgMHg3Zik7CisJaW5mbygiWSBRVUFOVElaQVRJT04gVEFCTEUiKTsKKwlkdW1wX3JlZ19yYW5nZShvdiwgMHg4MCwgMHg4Zik7CisJaW5mbygiVVYgUVVBTlRJWkFUSU9OIFRBQkxFIik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4OTAsIDB4OWYpOworCWluZm8oIkEwIC0gQkYiKTsKKwlkdW1wX3JlZ19yYW5nZShvdiwgMHhhMCwgMHhiZik7CisJaW5mbygiQ0JSIik7CisJZHVtcF9yZWdfcmFuZ2Uob3YsIDB4YzAsIDB4Y2YpOworfQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGVtcG9yYXJpbHkgc3RvcHMgT1Y1MTEgZnJvbSBmdW5jdGlvbmluZy4gTXVzdCBkbyB0aGlzIGJlZm9yZSBjaGFuZ2luZworICogcmVnaXN0ZXJzIHdoaWxlIHRoZSBjYW1lcmEgaXMgc3RyZWFtaW5nICovCitzdGF0aWMgaW5saW5lIGludAorb3Y1MXhfc3RvcChzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlQREVCVUcoNCwgInN0b3BwaW5nIik7CisJb3YtPnN0b3BwZWQgPSAxOworCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkKKwkJcmV0dXJuIChyZWdfd19tYXNrKG92LCBSNTF4X1NZU19SRVNFVCwgMHgzYSwgMHgzYSkpOworCWVsc2UKKwkJcmV0dXJuIChyZWdfdyhvdiwgUjUxeF9TWVNfUkVTRVQsIDB4M2QpKTsKK30KKworLyogUmVzdGFydHMgT1Y1MTEgYWZ0ZXIgb3Y1MTFfc3RvcCgpIGlzIGNhbGxlZC4gSGFzIG5vIGVmZmVjdCBpZiBpdCBpcyBub3QKKyAqIGFjdHVhbGx5IHN0b3BwZWQgKGZvciBwZXJmb3JtYW5jZSkuICovCitzdGF0aWMgaW5saW5lIGludAorb3Y1MXhfcmVzdGFydChzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlpZiAob3YtPnN0b3BwZWQpIHsKKwkJUERFQlVHKDQsICJyZXN0YXJ0aW5nIik7CisJCW92LT5zdG9wcGVkID0gMDsKKworCQkvKiBSZWluaXRpYWxpemUgdGhlIHN0cmVhbSAqLworCQlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTgpCisJCQlyZWdfdyhvdiwgMHgyZiwgMHg4MCk7CisKKwkJcmV0dXJuIChyZWdfdyhvdiwgUjUxeF9TWVNfUkVTRVQsIDB4MDApKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogU2xlZXBzIHVudGlsIG5vIGZyYW1lcyBhcmUgYWN0aXZlLiBSZXR1cm5zICEwIGlmIGdvdCBzaWduYWwgKi8KK3N0YXRpYyBpbnQKK292NTF4X3dhaXRfZnJhbWVzX2luYWN0aXZlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCXJldHVybiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUob3YtPndxLCBvdi0+Y3VyZnJhbWUgPCAwKTsKK30KKworLyogUmVzZXRzIHRoZSBoYXJkd2FyZSBzbmFwc2hvdCBidXR0b24gKi8KK3N0YXRpYyB2b2lkCitvdjUxeF9jbGVhcl9zbmFwc2hvdChzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTEpIHsKKwkJcmVnX3cob3YsIFI1MXhfU1lTX1NOQVAsIDB4MDApOworCQlyZWdfdyhvdiwgUjUxeF9TWVNfU05BUCwgMHgwMik7CisJCXJlZ193KG92LCBSNTF4X1NZU19TTkFQLCAweDAwKTsKKwl9IGVsc2UgaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KSB7CisJCXdhcm4oInNuYXBzaG90IHJlc2V0IG5vdCBzdXBwb3J0ZWQgeWV0IG9uIE9WNTE4KCspIik7CisJfSBlbHNlIHsKKwkJZXJyKCJjbGVhciBzbmFwOiBpbnZhbGlkIGJyaWRnZSB0eXBlIik7CisJfQorfQorCisjaWYgMAorLyogQ2hlY2tzIHRoZSBzdGF0dXMgb2YgdGhlIHNuYXBzaG90IGJ1dHRvbi4gUmV0dXJucyAxIGlmIGl0IHdhcyBwcmVzc2VkIHNpbmNlCisgKiBpdCB3YXMgbGFzdCBjbGVhcmVkLCBhbmQgemVybyBpbiBhbGwgb3RoZXIgY2FzZXMgKGluY2x1ZGluZyBlcnJvcnMpICovCitzdGF0aWMgaW50CitvdjUxeF9jaGVja19zbmFwc2hvdChzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlpbnQgcmV0LCBzdGF0dXMgPSAwOworCisJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTExKSB7CisJCXJldCA9IHJlZ19yKG92LCBSNTF4X1NZU19TTkFQKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWVycigiRXJyb3IgY2hlY2tpbmcgc25zcHNob3Qgc3RhdHVzICglZCkiLCByZXQpOworCQl9IGVsc2UgaWYgKHJldCAmIDB4MDgpIHsKKwkJCXN0YXR1cyA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KSB7CisJCXdhcm4oInNuYXBzaG90IGNoZWNrIG5vdCBzdXBwb3J0ZWQgeWV0IG9uIE9WNTE4KCspIik7CisJfSBlbHNlIHsKKwkJZXJyKCJjaGVjayBzbmFwOiBpbnZhbGlkIGJyaWRnZSB0eXBlIik7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKyNlbmRpZgorCisvKiBUaGlzIGRvZXMgYW4gaW5pdGlhbCByZXNldCBvZiBhbiBPbW5pVmlzaW9uIHNlbnNvciBhbmQgZW5zdXJlcyB0aGF0IEkyQworICogaXMgc3luY2hyb25pemVkLiBSZXR1cm5zIDwwIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50Citpbml0X292X3NlbnNvcihzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlpbnQgaSwgc3VjY2VzczsKKworCS8qIFJlc2V0IHRoZSBzZW5zb3IgKi8KKwlpZiAoaTJjX3cob3YsIDB4MTIsIDB4ODApIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBXYWl0IGZvciBpdCB0byBpbml0aWFsaXplICovCisJbXNsZWVwKDE1MCk7CisKKwlmb3IgKGkgPSAwLCBzdWNjZXNzID0gMDsgaSA8IGkyY19kZXRlY3RfdHJpZXMgJiYgIXN1Y2Nlc3M7IGkrKykgeworCQlpZiAoKGkyY19yKG92LCBPVjc2MTBfUkVHX0lEX0hJR0gpID09IDB4N0YpICYmCisJCSAgICAoaTJjX3Iob3YsIE9WNzYxMF9SRUdfSURfTE9XKSA9PSAweEEyKSkgeworCQkJc3VjY2VzcyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFJlc2V0IHRoZSBzZW5zb3IgKi8KKwkJaWYgKGkyY193KG92LCAweDEyLCAweDgwKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJLyogV2FpdCBmb3IgaXQgdG8gaW5pdGlhbGl6ZSAqLworCQltc2xlZXAoMTUwKTsKKwkJLyogRHVtbXkgcmVhZCB0byBzeW5jIEkyQyAqLworCQlpZiAoaTJjX3Iob3YsIDB4MDApIDwgMCkKKwkJCXJldHVybiAtRUlPOworCX0KKworCWlmICghc3VjY2VzcykKKwkJcmV0dXJuIC1FSU87CisKKwlQREVCVUcoMSwgIkkyQyBzeW5jZWQgaW4gJWQgYXR0ZW1wdChzKSIsIGkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK292NTExX3NldF9wYWNrZXRfc2l6ZShzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IHNpemUpCit7CisJaW50IGFsdCwgbXVsdDsKKworCWlmIChvdjUxeF9zdG9wKG92KSA8IDApCisJCXJldHVybiAtRUlPOworCisJbXVsdCA9IHNpemUgPj4gNTsKKworCWlmIChvdi0+YnJpZGdlID09IEJSR19PVjUxMSkgeworCQlpZiAoc2l6ZSA9PSAwKQorCQkJYWx0ID0gT1Y1MTFfQUxUX1NJWkVfMDsKKwkJZWxzZSBpZiAoc2l6ZSA9PSAyNTcpCisJCQlhbHQgPSBPVjUxMV9BTFRfU0laRV8yNTc7CisJCWVsc2UgaWYgKHNpemUgPT0gNTEzKQorCQkJYWx0ID0gT1Y1MTFfQUxUX1NJWkVfNTEzOworCQllbHNlIGlmIChzaXplID09IDc2OSkKKwkJCWFsdCA9IE9WNTExX0FMVF9TSVpFXzc2OTsKKwkJZWxzZSBpZiAoc2l6ZSA9PSA5OTMpCisJCQlhbHQgPSBPVjUxMV9BTFRfU0laRV85OTM7CisJCWVsc2UgeworCQkJZXJyKCJTZXQgcGFja2V0IHNpemU6IGludmFsaWQgc2l6ZSAoJWQpIiwgc2l6ZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSBpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MTFQTFVTKSB7CisJCWlmIChzaXplID09IDApCisJCQlhbHQgPSBPVjUxMVBMVVNfQUxUX1NJWkVfMDsKKwkJZWxzZSBpZiAoc2l6ZSA9PSAzMykKKwkJCWFsdCA9IE9WNTExUExVU19BTFRfU0laRV8zMzsKKwkJZWxzZSBpZiAoc2l6ZSA9PSAxMjkpCisJCQlhbHQgPSBPVjUxMVBMVVNfQUxUX1NJWkVfMTI5OworCQllbHNlIGlmIChzaXplID09IDI1NykKKwkJCWFsdCA9IE9WNTExUExVU19BTFRfU0laRV8yNTc7CisJCWVsc2UgaWYgKHNpemUgPT0gMzg1KQorCQkJYWx0ID0gT1Y1MTFQTFVTX0FMVF9TSVpFXzM4NTsKKwkJZWxzZSBpZiAoc2l6ZSA9PSA1MTMpCisJCQlhbHQgPSBPVjUxMVBMVVNfQUxUX1NJWkVfNTEzOworCQllbHNlIGlmIChzaXplID09IDc2OSkKKwkJCWFsdCA9IE9WNTExUExVU19BTFRfU0laRV83Njk7CisJCWVsc2UgaWYgKHNpemUgPT0gOTYxKQorCQkJYWx0ID0gT1Y1MTFQTFVTX0FMVF9TSVpFXzk2MTsKKwkJZWxzZSB7CisJCQllcnIoIlNldCBwYWNrZXQgc2l6ZTogaW52YWxpZCBzaXplICglZCkiLCBzaXplKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIHsKKwkJZXJyKCJTZXQgcGFja2V0IHNpemU6IEludmFsaWQgYnJpZGdlIHR5cGUiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJUERFQlVHKDMsICIlZCwgbXVsdD0lZCwgYWx0PSVkIiwgc2l6ZSwgbXVsdCwgYWx0KTsKKworCWlmIChyZWdfdyhvdiwgUjUxeF9GSUZPX1BTSVpFLCBtdWx0KSA8IDApCisJCXJldHVybiAtRUlPOworCisJaWYgKHVzYl9zZXRfaW50ZXJmYWNlKG92LT5kZXYsIG92LT5pZmFjZSwgYWx0KSA8IDApIHsKKwkJZXJyKCJTZXQgcGFja2V0IHNpemU6IHNldCBpbnRlcmZhY2UgZXJyb3IiKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAob3Y1MXhfcmVzZXQob3YsIE9WNTExX1JFU0VUX05PUkVHUykgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCW92LT5wYWNrZXRfc2l6ZSA9IHNpemU7CisKKwlpZiAob3Y1MXhfcmVzdGFydChvdikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCisvKiBOb3RlOiBVbmxpa2UgdGhlIE9WNTExL09WNTExKywgdGhlIHNpemUgYXJndW1lbnQgZG9lcyBOT1QgaW5jbHVkZSB0aGUKKyAqIG9wdGlvbmFsIHBhY2tldCBudW1iZXIgYnl0ZS4gVGhlIGFjdHVhbCBzaXplICppcyogc3RvcmVkIGluIG92LT5wYWNrZXRfc2l6ZSwKKyAqIHRob3VnaC4gKi8KK3N0YXRpYyBpbnQKK292NTE4X3NldF9wYWNrZXRfc2l6ZShzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IHNpemUpCit7CisJaW50IGFsdDsKKworCWlmIChvdjUxeF9zdG9wKG92KSA8IDApCisJCXJldHVybiAtRUlPOworCisJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KSB7CisJCWlmIChzaXplID09IDApCisJCQlhbHQgPSBPVjUxOF9BTFRfU0laRV8wOworCQllbHNlIGlmIChzaXplID09IDEyOCkKKwkJCWFsdCA9IE9WNTE4X0FMVF9TSVpFXzEyODsKKwkJZWxzZSBpZiAoc2l6ZSA9PSAyNTYpCisJCQlhbHQgPSBPVjUxOF9BTFRfU0laRV8yNTY7CisJCWVsc2UgaWYgKHNpemUgPT0gMzg0KQorCQkJYWx0ID0gT1Y1MThfQUxUX1NJWkVfMzg0OworCQllbHNlIGlmIChzaXplID09IDUxMikKKwkJCWFsdCA9IE9WNTE4X0FMVF9TSVpFXzUxMjsKKwkJZWxzZSBpZiAoc2l6ZSA9PSA2NDApCisJCQlhbHQgPSBPVjUxOF9BTFRfU0laRV82NDA7CisJCWVsc2UgaWYgKHNpemUgPT0gNzY4KQorCQkJYWx0ID0gT1Y1MThfQUxUX1NJWkVfNzY4OworCQllbHNlIGlmIChzaXplID09IDg5NikKKwkJCWFsdCA9IE9WNTE4X0FMVF9TSVpFXzg5NjsKKwkJZWxzZSB7CisJCQllcnIoIlNldCBwYWNrZXQgc2l6ZTogaW52YWxpZCBzaXplICglZCkiLCBzaXplKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIHsKKwkJZXJyKCJTZXQgcGFja2V0IHNpemU6IEludmFsaWQgYnJpZGdlIHR5cGUiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJUERFQlVHKDMsICIlZCwgYWx0PSVkIiwgc2l6ZSwgYWx0KTsKKworCW92LT5wYWNrZXRfc2l6ZSA9IHNpemU7CisJaWYgKHNpemUgPiAwKSB7CisJCS8qIFByb2dyYW0gSVNPIEZJRk8gc2l6ZSByZWcgKHBhY2tldCBudW1iZXIgaXNuJ3QgaW5jbHVkZWQpICovCisJCW92NTE4X3JlZ193MzIob3YsIDB4MzAsIHNpemUsIDIpOworCisJCWlmIChvdi0+cGFja2V0X251bWJlcmluZykKKwkJCSsrb3YtPnBhY2tldF9zaXplOworCX0KKworCWlmICh1c2Jfc2V0X2ludGVyZmFjZShvdi0+ZGV2LCBvdi0+aWZhY2UsIGFsdCkgPCAwKSB7CisJCWVycigiU2V0IHBhY2tldCBzaXplOiBzZXQgaW50ZXJmYWNlIGVycm9yIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgc3RyZWFtICovCisJaWYgKHJlZ193KG92LCAweDJmLCAweDgwKSA8IDApCisJCXJldHVybiAtRUlPOworCisJaWYgKG92NTF4X3Jlc3RhcnQob3YpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAob3Y1MXhfcmVzZXQob3YsIE9WNTExX1JFU0VUX05PUkVHUykgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCisvKiBVcGxvYWQgY29tcHJlc3Npb24gcGFyYW1zIGFuZCBxdWFudGl6YXRpb24gdGFibGVzLiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MuICovCitzdGF0aWMgaW50CitvdjUxMV9pbml0X2NvbXByZXNzaW9uKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCWludCByYyA9IDA7CisKKwlpZiAoIW92LT5jb21wcmVzc19pbml0ZWQpIHsKKwkJcmVnX3cob3YsIDB4NzAsIHBoeSk7CisJCXJlZ193KG92LCAweDcxLCBwaHV2KTsKKwkJcmVnX3cob3YsIDB4NzIsIHB2eSk7CisJCXJlZ193KG92LCAweDczLCBwdnV2KTsKKwkJcmVnX3cob3YsIDB4NzQsIHFoeSk7CisJCXJlZ193KG92LCAweDc1LCBxaHV2KTsKKwkJcmVnX3cob3YsIDB4NzYsIHF2eSk7CisJCXJlZ193KG92LCAweDc3LCBxdnV2KTsKKworCQlpZiAob3Y1MTFfdXBsb2FkX3F1YW5fdGFibGVzKG92KSA8IDApIHsKKwkJCWVycigiRXJyb3IgdXBsb2FkaW5nIHF1YW50aXphdGlvbiB0YWJsZXMiKTsKKwkJCXJjID0gLUVJTzsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJb3YtPmNvbXByZXNzX2luaXRlZCA9IDE7CitvdXQ6CisJcmV0dXJuIHJjOworfQorCisvKiBVcGxvYWQgY29tcHJlc3Npb24gcGFyYW1zIGFuZCBxdWFudGl6YXRpb24gdGFibGVzLiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MuICovCitzdGF0aWMgaW50CitvdjUxOF9pbml0X2NvbXByZXNzaW9uKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCWludCByYyA9IDA7CisKKwlpZiAoIW92LT5jb21wcmVzc19pbml0ZWQpIHsKKwkJaWYgKG92NTE4X3VwbG9hZF9xdWFuX3RhYmxlcyhvdikgPCAwKSB7CisJCQllcnIoIkVycm9yIHVwbG9hZGluZyBxdWFudGl6YXRpb24gdGFibGVzIik7CisJCQlyYyA9IC1FSU87CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCW92LT5jb21wcmVzc19pbml0ZWQgPSAxOworb3V0OgorCXJldHVybiByYzsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogU2V0cyBzZW5zb3IncyBjb250cmFzdCBzZXR0aW5nIHRvICJ2YWwiICovCitzdGF0aWMgaW50CitzZW5zb3Jfc2V0X2NvbnRyYXN0KHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBzaG9ydCB2YWwpCit7CisJaW50IHJjOworCisJUERFQlVHKDMsICIlZCIsIHZhbCk7CisKKwlpZiAob3YtPnN0b3BfZHVyaW5nX3NldCkKKwkJaWYgKG92NTF4X3N0b3Aob3YpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCisJc3dpdGNoIChvdi0+c2Vuc29yKSB7CisJY2FzZSBTRU5fT1Y3NjEwOgorCWNhc2UgU0VOX09WNjYyMDoKKwl7CisJCXJjID0gaTJjX3cob3YsIE9WNzYxMF9SRUdfQ05ULCB2YWwgPj4gOCk7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJfQorCWNhc2UgU0VOX09WNjYzMDoKKwl7CisJCXJjID0gaTJjX3dfbWFzayhvdiwgT1Y3NjEwX1JFR19DTlQsIHZhbCA+PiAxMiwgMHgwZik7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJfQorCWNhc2UgU0VOX09WNzYyMDoKKwl7CisJCXVuc2lnbmVkIGNoYXIgY3RhYltdID0geworCQkJMHgwMSwgMHgwNSwgMHgwOSwgMHgxMSwgMHgxNSwgMHgzNSwgMHgzNywgMHg1NywKKwkJCTB4NWIsIDB4YTUsIDB4YTcsIDB4YzcsIDB4YzksIDB4Y2YsIDB4ZWYsIDB4ZmYKKwkJfTsKKworCQkvKiBVc2UgWSBnYW1tYSBjb250cm9sIGluc3RlYWQuIEJpdCAwIGVuYWJsZXMgaXQuICovCisJCXJjID0gaTJjX3cob3YsIDB4NjQsIGN0YWJbdmFsPj4xMl0pOworCQlpZiAocmMgPCAwKQorCQkJZ290byBvdXQ7CisJCWJyZWFrOworCX0KKwljYXNlIFNFTl9TQUE3MTExQToKKwl7CisJCXJjID0gaTJjX3cob3YsIDB4MGIsIHZhbCA+PiA5KTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gb3V0OworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwl7CisJCVBERUJVRygzLCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOworCQlyYyA9IC1FUEVSTTsKKwkJZ290byBvdXQ7CisJfQorCX0KKworCXJjID0gMDsJCS8qIFN1Y2Nlc3MgKi8KKwlvdi0+Y29udHJhc3QgPSB2YWw7CitvdXQ6CisJaWYgKG92NTF4X3Jlc3RhcnQob3YpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qIEdldHMgc2Vuc29yJ3MgY29udHJhc3Qgc2V0dGluZyAqLworc3RhdGljIGludAorc2Vuc29yX2dldF9jb250cmFzdChzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgc2hvcnQgKnZhbCkKK3sKKwlpbnQgcmM7CisKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9PVjc2MTA6CisJY2FzZSBTRU5fT1Y2NjIwOgorCQlyYyA9IGkyY19yKG92LCBPVjc2MTBfUkVHX0NOVCk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisJCWVsc2UKKwkJCSp2YWwgPSByYyA8PCA4OworCQlicmVhazsKKwljYXNlIFNFTl9PVjY2MzA6CisJCXJjID0gaTJjX3Iob3YsIE9WNzYxMF9SRUdfQ05UKTsKKwkJaWYgKHJjIDwgMCkKKwkJCXJldHVybiByYzsKKwkJZWxzZQorCQkJKnZhbCA9IHJjIDw8IDEyOworCQlicmVhazsKKwljYXNlIFNFTl9PVjc2MjA6CisJCS8qIFVzZSBZIGdhbW1hIHJlZyBpbnN0ZWFkLiBCaXQgMCBpcyB0aGUgZW5hYmxlIGJpdC4gKi8KKwkJcmMgPSBpMmNfcihvdiwgMHg2NCk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisJCWVsc2UKKwkJCSp2YWwgPSAocmMgJiAweGZlKSA8PCA4OworCQlicmVhazsKKwljYXNlIFNFTl9TQUE3MTExQToKKwkJKnZhbCA9IG92LT5jb250cmFzdDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUERFQlVHKDMsICJVbnN1cHBvcnRlZCB3aXRoIHRoaXMgc2Vuc29yIik7CisJCXJldHVybiAtRVBFUk07CisJfQorCisJUERFQlVHKDMsICIlZCIsICp2YWwpOworCW92LT5jb250cmFzdCA9ICp2YWw7CisKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogU2V0cyBzZW5zb3IncyBicmlnaHRuZXNzIHNldHRpbmcgdG8gInZhbCIgKi8KK3N0YXRpYyBpbnQKK3NlbnNvcl9zZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgc2hvcnQgdmFsKQoreworCWludCByYzsKKworCVBERUJVRyg0LCAiJWQiLCB2YWwpOworCisJaWYgKG92LT5zdG9wX2R1cmluZ19zZXQpCisJCWlmIChvdjUxeF9zdG9wKG92KSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKworCXN3aXRjaCAob3YtPnNlbnNvcikgeworCWNhc2UgU0VOX09WNzYxMDoKKwljYXNlIFNFTl9PVjc2QkU6CisJY2FzZSBTRU5fT1Y2NjIwOgorCWNhc2UgU0VOX09WNjYzMDoKKwkJcmMgPSBpMmNfdyhvdiwgT1Y3NjEwX1JFR19CUlQsIHZhbCA+PiA4KTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gb3V0OworCQlicmVhazsKKwljYXNlIFNFTl9PVjc2MjA6CisJCS8qIDc2MjAgZG9lc24ndCBsaWtlIG1hbnVhbCBjaGFuZ2VzIHdoZW4gaW4gYXV0byBtb2RlICovCisJCWlmICghb3YtPmF1dG9fYnJ0KSB7CisJCQlyYyA9IGkyY193KG92LCBPVjc2MTBfUkVHX0JSVCwgdmFsID4+IDgpOworCQkJaWYgKHJjIDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJfQorCQlicmVhazsKKwljYXNlIFNFTl9TQUE3MTExQToKKwkJcmMgPSBpMmNfdyhvdiwgMHgwYSwgdmFsID4+IDgpOworCQlpZiAocmMgPCAwKQorCQkJZ290byBvdXQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVBERUJVRygzLCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOworCQlyYyA9IC1FUEVSTTsKKwkJZ290byBvdXQ7CisJfQorCisJcmMgPSAwOwkJLyogU3VjY2VzcyAqLworCW92LT5icmlnaHRuZXNzID0gdmFsOworb3V0OgorCWlmIChvdjUxeF9yZXN0YXJ0KG92KSA8IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIHJjOworfQorCisvKiBHZXRzIHNlbnNvcidzIGJyaWdodG5lc3Mgc2V0dGluZyAqLworc3RhdGljIGludAorc2Vuc29yX2dldF9icmlnaHRuZXNzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCB1bnNpZ25lZCBzaG9ydCAqdmFsKQoreworCWludCByYzsKKworCXN3aXRjaCAob3YtPnNlbnNvcikgeworCWNhc2UgU0VOX09WNzYxMDoKKwljYXNlIFNFTl9PVjc2QkU6CisJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNjYyMDoKKwljYXNlIFNFTl9PVjY2MzA6CisJCXJjID0gaTJjX3Iob3YsIE9WNzYxMF9SRUdfQlJUKTsKKwkJaWYgKHJjIDwgMCkKKwkJCXJldHVybiByYzsKKwkJZWxzZQorCQkJKnZhbCA9IHJjIDw8IDg7CisJCWJyZWFrOworCWNhc2UgU0VOX1NBQTcxMTFBOgorCQkqdmFsID0gb3YtPmJyaWdodG5lc3M7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVBERUJVRygzLCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCVBERUJVRygzLCAiJWQiLCAqdmFsKTsKKwlvdi0+YnJpZ2h0bmVzcyA9ICp2YWw7CisKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogU2V0cyBzZW5zb3IncyBzYXR1cmF0aW9uIChjb2xvciBpbnRlbnNpdHkpIHNldHRpbmcgdG8gInZhbCIgKi8KK3N0YXRpYyBpbnQKK3NlbnNvcl9zZXRfc2F0dXJhdGlvbihzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgc2hvcnQgdmFsKQoreworCWludCByYzsKKworCVBERUJVRygzLCAiJWQiLCB2YWwpOworCisJaWYgKG92LT5zdG9wX2R1cmluZ19zZXQpCisJCWlmIChvdjUxeF9zdG9wKG92KSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKworCXN3aXRjaCAob3YtPnNlbnNvcikgeworCWNhc2UgU0VOX09WNzYxMDoKKwljYXNlIFNFTl9PVjc2QkU6CisJY2FzZSBTRU5fT1Y2NjIwOgorCWNhc2UgU0VOX09WNjYzMDoKKwkJcmMgPSBpMmNfdyhvdiwgT1Y3NjEwX1JFR19TQVQsIHZhbCA+PiA4KTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gb3V0OworCQlicmVhazsKKwljYXNlIFNFTl9PVjc2MjA6CisvLwkJLyogVXNlIFVWIGdhbW1hIGNvbnRyb2wgaW5zdGVhZC4gQml0cyAwICYgNyBhcmUgcmVzZXJ2ZWQuICovCisvLwkJcmMgPSBvdl9pMmNfd3JpdGUob3YtPmRldiwgMHg2MiwgKHZhbCA+PiA5KSAmIDB4N2UpOworLy8JCWlmIChyYyA8IDApCisvLwkJCWdvdG8gb3V0OworCQlyYyA9IGkyY193KG92LCBPVjc2MTBfUkVHX1NBVCwgdmFsID4+IDgpOworCQlpZiAocmMgPCAwKQorCQkJZ290byBvdXQ7CisJCWJyZWFrOworCWNhc2UgU0VOX1NBQTcxMTFBOgorCQlyYyA9IGkyY193KG92LCAweDBjLCB2YWwgPj4gOSk7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUERFQlVHKDMsICJVbnN1cHBvcnRlZCB3aXRoIHRoaXMgc2Vuc29yIik7CisJCXJjID0gLUVQRVJNOworCQlnb3RvIG91dDsKKwl9CisKKwlyYyA9IDA7CQkvKiBTdWNjZXNzICovCisJb3YtPmNvbG91ciA9IHZhbDsKK291dDoKKwlpZiAob3Y1MXhfcmVzdGFydChvdikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiByYzsKK30KKworLyogR2V0cyBzZW5zb3IncyBzYXR1cmF0aW9uIChjb2xvciBpbnRlbnNpdHkpIHNldHRpbmcgKi8KK3N0YXRpYyBpbnQKK3NlbnNvcl9nZXRfc2F0dXJhdGlvbihzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgc2hvcnQgKnZhbCkKK3sKKwlpbnQgcmM7CisKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9PVjc2MTA6CisJY2FzZSBTRU5fT1Y3NkJFOgorCWNhc2UgU0VOX09WNjYyMDoKKwljYXNlIFNFTl9PVjY2MzA6CisJCXJjID0gaTJjX3Iob3YsIE9WNzYxMF9SRUdfU0FUKTsKKwkJaWYgKHJjIDwgMCkKKwkJCXJldHVybiByYzsKKwkJZWxzZQorCQkJKnZhbCA9IHJjIDw8IDg7CisJCWJyZWFrOworCWNhc2UgU0VOX09WNzYyMDoKKy8vCQkvKiBVc2UgVVYgZ2FtbWEgcmVnIGluc3RlYWQuIEJpdHMgMCAmIDcgYXJlIHJlc2VydmVkLiAqLworLy8JCXJjID0gaTJjX3Iob3YsIDB4NjIpOworLy8JCWlmIChyYyA8IDApCisvLwkJCXJldHVybiByYzsKKy8vCQllbHNlCisvLwkJCSp2YWwgPSAocmMgJiAweDdlKSA8PCA5OworCQlyYyA9IGkyY19yKG92LCBPVjc2MTBfUkVHX1NBVCk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisJCWVsc2UKKwkJCSp2YWwgPSByYyA8PCA4OworCQlicmVhazsKKwljYXNlIFNFTl9TQUE3MTExQToKKwkJKnZhbCA9IG92LT5jb2xvdXI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVBERUJVRygzLCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCVBERUJVRygzLCAiJWQiLCAqdmFsKTsKKwlvdi0+Y29sb3VyID0gKnZhbDsKKworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBTZXRzIHNlbnNvcidzIGh1ZSAocmVkL2JsdWUgYmFsYW5jZSkgc2V0dGluZyB0byAidmFsIiAqLworc3RhdGljIGludAorc2Vuc29yX3NldF9odWUoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIHNob3J0IHZhbCkKK3sKKwlpbnQgcmM7CisKKwlQREVCVUcoMywgIiVkIiwgdmFsKTsKKworCWlmIChvdi0+c3RvcF9kdXJpbmdfc2V0KQorCQlpZiAob3Y1MXhfc3RvcChvdikgPCAwKQorCQkJcmV0dXJuIC1FSU87CisKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9PVjc2MTA6CisJY2FzZSBTRU5fT1Y2NjIwOgorCWNhc2UgU0VOX09WNjYzMDoKKwkJcmMgPSBpMmNfdyhvdiwgT1Y3NjEwX1JFR19SRUQsIDB4RkYgLSAodmFsID4+IDgpKTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gb3V0OworCisJCXJjID0gaTJjX3cob3YsIE9WNzYxMF9SRUdfQkxVRSwgdmFsID4+IDgpOworCQlpZiAocmMgPCAwKQorCQkJZ290byBvdXQ7CisJCWJyZWFrOworCWNhc2UgU0VOX09WNzYyMDoKKy8vIEh1ZSBjb250cm9sIGlzIGNhdXNpbmcgcHJvYmxlbXMuIEkgd2lsbCBlbmFibGUgaXQgb25jZSBpdCdzIGZpeGVkLgorI2lmIDAKKwkJcmMgPSBpMmNfdyhvdiwgMHg3YSwgKHVuc2lnbmVkIGNoYXIpKHZhbCA+PiA4KSArIDB4Yik7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIG91dDsKKworCQlyYyA9IGkyY193KG92LCAweDc5LCAodW5zaWduZWQgY2hhcikodmFsID4+IDgpICsgMHhiKTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gb3V0OworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgU0VOX1NBQTcxMTFBOgorCQlyYyA9IGkyY193KG92LCAweDBkLCAodmFsICsgMzI3NjgpID4+IDgpOworCQlpZiAocmMgPCAwKQorCQkJZ290byBvdXQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVBERUJVRygzLCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOworCQlyYyA9IC1FUEVSTTsKKwkJZ290byBvdXQ7CisJfQorCisJcmMgPSAwOwkJLyogU3VjY2VzcyAqLworCW92LT5odWUgPSB2YWw7CitvdXQ6CisJaWYgKG92NTF4X3Jlc3RhcnQob3YpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qIEdldHMgc2Vuc29yJ3MgaHVlIChyZWQvYmx1ZSBiYWxhbmNlKSBzZXR0aW5nICovCitzdGF0aWMgaW50CitzZW5zb3JfZ2V0X2h1ZShzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgc2hvcnQgKnZhbCkKK3sKKwlpbnQgcmM7CisKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9PVjc2MTA6CisJY2FzZSBTRU5fT1Y2NjIwOgorCWNhc2UgU0VOX09WNjYzMDoKKwkJcmMgPSBpMmNfcihvdiwgT1Y3NjEwX1JFR19CTFVFKTsKKwkJaWYgKHJjIDwgMCkKKwkJCXJldHVybiByYzsKKwkJZWxzZQorCQkJKnZhbCA9IHJjIDw8IDg7CisJCWJyZWFrOworCWNhc2UgU0VOX09WNzYyMDoKKwkJcmMgPSBpMmNfcihvdiwgMHg3YSk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisJCWVsc2UKKwkJCSp2YWwgPSByYyA8PCA4OworCQlicmVhazsKKwljYXNlIFNFTl9TQUE3MTExQToKKwkJKnZhbCA9IG92LT5odWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVBERUJVRygzLCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCVBERUJVRygzLCAiJWQiLCAqdmFsKTsKKwlvdi0+aHVlID0gKnZhbDsKKworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50CitzZW5zb3Jfc2V0X3BpY3R1cmUoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHN0cnVjdCB2aWRlb19waWN0dXJlICpwKQoreworCWludCByYzsKKworCVBERUJVRyg0LCAic2Vuc29yX3NldF9waWN0dXJlIik7CisKKwlvdi0+d2hpdGVuZXNzID0gcC0+d2hpdGVuZXNzOworCisJLyogRG9uJ3QgcmV0dXJuIGVycm9yIGlmIGEgc2V0dGluZyBpcyB1bnN1cHBvcnRlZCwgb3IgcmVzdCBvZiBzZXR0aW5ncworICAgICAgICAgKiB3aWxsIG5vdCBiZSBwZXJmb3JtZWQgKi8KKworCXJjID0gc2Vuc29yX3NldF9jb250cmFzdChvdiwgcC0+Y29udHJhc3QpOworCWlmIChGQVRBTF9FUlJPUihyYykpCisJCXJldHVybiByYzsKKworCXJjID0gc2Vuc29yX3NldF9icmlnaHRuZXNzKG92LCBwLT5icmlnaHRuZXNzKTsKKwlpZiAoRkFUQUxfRVJST1IocmMpKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IHNlbnNvcl9zZXRfc2F0dXJhdGlvbihvdiwgcC0+Y29sb3VyKTsKKwlpZiAoRkFUQUxfRVJST1IocmMpKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IHNlbnNvcl9zZXRfaHVlKG92LCBwLT5odWUpOworCWlmIChGQVRBTF9FUlJPUihyYykpCisJCXJldHVybiByYzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzZW5zb3JfZ2V0X3BpY3R1cmUoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHN0cnVjdCB2aWRlb19waWN0dXJlICpwKQoreworCWludCByYzsKKworCVBERUJVRyg0LCAic2Vuc29yX2dldF9waWN0dXJlIik7CisKKwkvKiBEb24ndCByZXR1cm4gZXJyb3IgaWYgYSBzZXR0aW5nIGlzIHVuc3VwcG9ydGVkLCBvciByZXN0IG9mIHNldHRpbmdzCisgICAgICAgICAqIHdpbGwgbm90IGJlIHBlcmZvcm1lZCAqLworCisJcmMgPSBzZW5zb3JfZ2V0X2NvbnRyYXN0KG92LCAmKHAtPmNvbnRyYXN0KSk7CisJaWYgKEZBVEFMX0VSUk9SKHJjKSkKKwkJcmV0dXJuIHJjOworCisJcmMgPSBzZW5zb3JfZ2V0X2JyaWdodG5lc3Mob3YsICYocC0+YnJpZ2h0bmVzcykpOworCWlmIChGQVRBTF9FUlJPUihyYykpCisJCXJldHVybiByYzsKKworCXJjID0gc2Vuc29yX2dldF9zYXR1cmF0aW9uKG92LCAmKHAtPmNvbG91cikpOworCWlmIChGQVRBTF9FUlJPUihyYykpCisJCXJldHVybiByYzsKKworCXJjID0gc2Vuc29yX2dldF9odWUob3YsICYocC0+aHVlKSk7CisJaWYgKEZBVEFMX0VSUk9SKHJjKSkKKwkJcmV0dXJuIHJjOworCisJcC0+d2hpdGVuZXNzID0gMTA1IDw8IDg7CisKKwlyZXR1cm4gMDsKK30KKworI2lmIDAKKy8vIEZJWE1FOiBFeHBvc3VyZSByYW5nZSBpcyBvbmx5IDB4MDAtMHg3ZiBpbiBpbnRlcmxhY2UgbW9kZQorLyogU2V0cyBjdXJyZW50IGV4cG9zdXJlIGZvciBzZW5zb3IuIFRoaXMgb25seSBoYXMgYW4gZWZmZWN0IGlmIGF1dG8tZXhwb3N1cmUKKyAqIGlzIG9mZiAqLworc3RhdGljIGlubGluZSBpbnQKK3NlbnNvcl9zZXRfZXhwb3N1cmUoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIGNoYXIgdmFsKQoreworCWludCByYzsKKworCVBERUJVRygzLCAiJWQiLCB2YWwpOworCisJaWYgKG92LT5zdG9wX2R1cmluZ19zZXQpCisJCWlmIChvdjUxeF9zdG9wKG92KSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKworCXN3aXRjaCAob3YtPnNlbnNvcikgeworCWNhc2UgU0VOX09WNjYyMDoKKwljYXNlIFNFTl9PVjY2MzA6CisJY2FzZSBTRU5fT1Y3NjEwOgorCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjc2QkU6CisJY2FzZSBTRU5fT1Y4NjAwOgorCQlyYyA9IGkyY193KG92LCAweDEwLCB2YWwpOworCQlpZiAocmMgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJYnJlYWs7CisJY2FzZSBTRU5fS1MwMTI3OgorCWNhc2UgU0VOX0tTMDEyN0I6CisJY2FzZSBTRU5fU0FBNzExMUE6CisJCVBERUJVRygzLCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOworCQlyZXR1cm4gLUVQRVJNOworCWRlZmF1bHQ6CisJCWVycigiU2Vuc29yIG5vdCBzdXBwb3J0ZWQgZm9yIHNldF9leHBvc3VyZSIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyYyA9IDA7CQkvKiBTdWNjZXNzICovCisJb3YtPmV4cG9zdXJlID0gdmFsOworb3V0OgorCWlmIChvdjUxeF9yZXN0YXJ0KG92KSA8IDApCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIHJjOworfQorI2VuZGlmCisKKy8qIEdldHMgY3VycmVudCBleHBvc3VyZSBsZXZlbCBmcm9tIHNlbnNvciwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIHVuZGVyCisgKiBtYW51YWwgY29udHJvbC4gKi8KK3N0YXRpYyBpbnQKK3NlbnNvcl9nZXRfZXhwb3N1cmUoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIGNoYXIgKnZhbCkKK3sKKwlpbnQgcmM7CisKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9PVjc2MTA6CisJY2FzZSBTRU5fT1Y2NjIwOgorCWNhc2UgU0VOX09WNjYzMDoKKwljYXNlIFNFTl9PVjc2MjA6CisJY2FzZSBTRU5fT1Y3NkJFOgorCWNhc2UgU0VOX09WODYwMDoKKwkJcmMgPSBpMmNfcihvdiwgMHgxMCk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisJCWVsc2UKKwkJCSp2YWwgPSByYzsKKwkJYnJlYWs7CisJY2FzZSBTRU5fS1MwMTI3OgorCWNhc2UgU0VOX0tTMDEyN0I6CisJY2FzZSBTRU5fU0FBNzExMUE6CisJCXZhbCA9IE5VTEw7CisJCVBERUJVRygzLCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOworCQlyZXR1cm4gLUVQRVJNOworCWRlZmF1bHQ6CisJCWVycigiU2Vuc29yIG5vdCBzdXBwb3J0ZWQgZm9yIGdldF9leHBvc3VyZSIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlQREVCVUcoMywgIiVkIiwgKnZhbCk7CisJb3YtPmV4cG9zdXJlID0gKnZhbDsKKworCXJldHVybiAwOworfQorCisvKiBUdXJucyBvbiBvciBvZmYgdGhlIExFRC4gT25seSBoYXMgYW4gZWZmZWN0IHdpdGggT1Y1MTErL09WNTE4KCspICovCitzdGF0aWMgdm9pZAorb3Y1MXhfbGVkX2NvbnRyb2woc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCBlbmFibGUpCit7CisJUERFQlVHKDQsICIgKCVzKSIsIGVuYWJsZSA/ICJ0dXJuIG9uIiA6ICJ0dXJuIG9mZiIpOworCisJaWYgKG92LT5icmlkZ2UgPT0gQlJHX09WNTExUExVUykKKwkJcmVnX3cob3YsIFI1MTFfU1lTX0xFRF9DVEwsIGVuYWJsZSA/IDEgOiAwKTsKKwllbHNlIGlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkKKwkJcmVnX3dfbWFzayhvdiwgUjUxOF9HUElPX09VVCwgZW5hYmxlID8gMHgwMiA6IDB4MDAsIDB4MDIpOworCisJcmV0dXJuOworfQorCisvKiBNYXRjaGVzIHRoZSBzZW5zb3IncyBpbnRlcm5hbCBmcmFtZSByYXRlIHRvIHRoZSBsaWdodGluZyBmcmVxdWVuY3kuCisgKiBWYWxpZCBmcmVxdWVuY2llcyBhcmU6CisgKgk1MCAtIDUwSHosIGZvciBFdXJvcGVhbiBhbmQgQXNpYW4gbGlnaHRpbmcKKyAqCTYwIC0gNjBIeiwgZm9yIEFtZXJpY2FuIGxpZ2h0aW5nCisgKgorICogVGVzdGVkIHdpdGg6IE9WNzYxMCwgT1Y3NjIwLCBPVjc2QkUsIE9WNjYyMAorICogVW5zdXBwb3J0ZWQ6IEtTMDEyNywgS1MwMTI3QiwgU0FBNzExMUEKKyAqIFJldHVybnM6IDAgZm9yIHN1Y2Nlc3MKKyAqLworc3RhdGljIGludAorc2Vuc29yX3NldF9saWdodF9mcmVxKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBpbnQgZnJlcSkKK3sKKwlpbnQgc2l4dHk7CisKKwlQREVCVUcoNCwgIiVkIEh6IiwgZnJlcSk7CisKKwlpZiAoZnJlcSA9PSA2MCkKKwkJc2l4dHkgPSAxOworCWVsc2UgaWYgKGZyZXEgPT0gNTApCisJCXNpeHR5ID0gMDsKKwllbHNlIHsKKwkJZXJyKCJJbnZhbGlkIGxpZ2h0IGZyZXEgKCVkIEh6KSIsIGZyZXEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9PVjc2MTA6CisJCWkyY193X21hc2sob3YsIDB4MmEsIHNpeHR5PzB4MDA6MHg4MCwgMHg4MCk7CisJCWkyY193KG92LCAweDJiLCBzaXh0eT8weDAwOjB4YWMpOworCQlpMmNfd19tYXNrKG92LCAweDEzLCAweDEwLCAweDEwKTsKKwkJaTJjX3dfbWFzayhvdiwgMHgxMywgMHgwMCwgMHgxMCk7CisJCWJyZWFrOworCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjc2QkU6CisJY2FzZSBTRU5fT1Y4NjAwOgorCQlpMmNfd19tYXNrKG92LCAweDJhLCBzaXh0eT8weDAwOjB4ODAsIDB4ODApOworCQlpMmNfdyhvdiwgMHgyYiwgc2l4dHk/MHgwMDoweGFjKTsKKwkJaTJjX3dfbWFzayhvdiwgMHg3NiwgMHgwMSwgMHgwMSk7CisJCWJyZWFrOworCWNhc2UgU0VOX09WNjYyMDoKKwljYXNlIFNFTl9PVjY2MzA6CisJCWkyY193KG92LCAweDJiLCBzaXh0eT8weGE4OjB4MjgpOworCQlpMmNfdyhvdiwgMHgyYSwgc2l4dHk/MHg4NDoweGE0KTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fS1MwMTI3OgorCWNhc2UgU0VOX0tTMDEyN0I6CisJY2FzZSBTRU5fU0FBNzExMUE6CisJCVBERUJVRyg1LCAiVW5zdXBwb3J0ZWQgd2l0aCB0aGlzIHNlbnNvciIpOworCQlyZXR1cm4gLUVQRVJNOworCWRlZmF1bHQ6CisJCWVycigiU2Vuc29yIG5vdCBzdXBwb3J0ZWQgZm9yIHNldF9saWdodF9mcmVxIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW92LT5saWdodGZyZXEgPSBmcmVxOworCisJcmV0dXJuIDA7Cit9CisKKy8qIElmIGVuYWJsZSBpcyB0cnVlLCB0dXJuIG9uIHRoZSBzZW5zb3IncyBiYW5kaW5nIGZpbHRlciwgb3RoZXJ3aXNlIHR1cm4gaXQKKyAqIG9mZi4gVGhpcyBmaWx0ZXIgdHJpZXMgdG8gcmVkdWNlIHRoZSBwYXR0ZXJuIG9mIGhvcml6b250YWwgbGlnaHQvZGFyayBiYW5kcworICogY2F1c2VkIGJ5IHNvbWUgKHVzdWFsbHkgZmx1b3Jlc2NlbnQpIGxpZ2h0aW5nLiBUaGUgbGlnaHQgZnJlcXVlbmN5IG11c3QgYmUKKyAqIHNldCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIGVuYWJsaW5nIGl0IHdpdGggb3Y1MXhfc2V0X2xpZ2h0X2ZyZXEoKS4KKyAqCisgKiBUZXN0ZWQgd2l0aDogT1Y3NjEwLCBPVjc2MjAsIE9WNzZCRSwgT1Y2NjIwLgorICogVW5zdXBwb3J0ZWQ6IEtTMDEyNywgS1MwMTI3QiwgU0FBNzExMUEKKyAqIFJldHVybnM6IDAgZm9yIHN1Y2Nlc3MKKyAqLworc3RhdGljIGludAorc2Vuc29yX3NldF9iYW5kaW5nX2ZpbHRlcihzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IGVuYWJsZSkKK3sKKwlpbnQgcmM7CisKKwlQREVCVUcoNCwgIiAoJXMpIiwgZW5hYmxlID8gInR1cm4gb24iIDogInR1cm4gb2ZmIik7CisKKwlpZiAob3YtPnNlbnNvciA9PSBTRU5fS1MwMTI3IHx8IG92LT5zZW5zb3IgPT0gU0VOX0tTMDEyN0IKKwkJfHwgb3YtPnNlbnNvciA9PSBTRU5fU0FBNzExMUEpIHsKKwkJUERFQlVHKDUsICJVbnN1cHBvcnRlZCB3aXRoIHRoaXMgc2Vuc29yIik7CisJCXJldHVybiAtRVBFUk07CisJfQorCisJcmMgPSBpMmNfd19tYXNrKG92LCAweDJkLCBlbmFibGU/MHgwNDoweDAwLCAweDA0KTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlvdi0+YmFuZGZpbHQgPSBlbmFibGU7CisKKwlyZXR1cm4gMDsKK30KKworLyogSWYgZW5hYmxlIGlzIHRydWUsIHR1cm4gb24gdGhlIHNlbnNvcidzIGF1dG8gYnJpZ2h0bmVzcyBjb250cm9sLCBvdGhlcndpc2UKKyAqIHR1cm4gaXQgb2ZmLgorICoKKyAqIFVuc3VwcG9ydGVkOiBLUzAxMjcsIEtTMDEyN0IsIFNBQTcxMTFBCisgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCisgKi8KK3N0YXRpYyBpbnQKK3NlbnNvcl9zZXRfYXV0b19icmlnaHRuZXNzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBpbnQgZW5hYmxlKQoreworCWludCByYzsKKworCVBERUJVRyg0LCAiICglcykiLCBlbmFibGUgPyAidHVybiBvbiIgOiAidHVybiBvZmYiKTsKKworCWlmIChvdi0+c2Vuc29yID09IFNFTl9LUzAxMjcgfHwgb3YtPnNlbnNvciA9PSBTRU5fS1MwMTI3QgorCQl8fCBvdi0+c2Vuc29yID09IFNFTl9TQUE3MTExQSkgeworCQlQREVCVUcoNSwgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlyYyA9IGkyY193X21hc2sob3YsIDB4MmQsIGVuYWJsZT8weDEwOjB4MDAsIDB4MTApOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCW92LT5hdXRvX2JydCA9IGVuYWJsZTsKKworCXJldHVybiAwOworfQorCisvKiBJZiBlbmFibGUgaXMgdHJ1ZSwgdHVybiBvbiB0aGUgc2Vuc29yJ3MgYXV0byBleHBvc3VyZSBjb250cm9sLCBvdGhlcndpc2UKKyAqIHR1cm4gaXQgb2ZmLgorICoKKyAqIFVuc3VwcG9ydGVkOiBLUzAxMjcsIEtTMDEyN0IsIFNBQTcxMTFBCisgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCisgKi8KK3N0YXRpYyBpbnQKK3NlbnNvcl9zZXRfYXV0b19leHBvc3VyZShzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IGVuYWJsZSkKK3sKKwlQREVCVUcoNCwgIiAoJXMpIiwgZW5hYmxlID8gInR1cm4gb24iIDogInR1cm4gb2ZmIik7CisKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9PVjc2MTA6CisJCWkyY193X21hc2sob3YsIDB4MjksIGVuYWJsZT8weDAwOjB4ODAsIDB4ODApOworCQlicmVhazsKKwljYXNlIFNFTl9PVjY2MjA6CisJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNzZCRToKKwljYXNlIFNFTl9PVjg2MDA6CisJCWkyY193X21hc2sob3YsIDB4MTMsIGVuYWJsZT8weDAxOjB4MDAsIDB4MDEpOworCQlicmVhazsKKwljYXNlIFNFTl9PVjY2MzA6CisJCWkyY193X21hc2sob3YsIDB4MjgsIGVuYWJsZT8weDAwOjB4MTAsIDB4MTApOworCQlicmVhazsKKwljYXNlIFNFTl9LUzAxMjc6CisJY2FzZSBTRU5fS1MwMTI3QjoKKwljYXNlIFNFTl9TQUE3MTExQToKKwkJUERFQlVHKDUsICJVbnN1cHBvcnRlZCB3aXRoIHRoaXMgc2Vuc29yIik7CisJCXJldHVybiAtRVBFUk07CisJZGVmYXVsdDoKKwkJZXJyKCJTZW5zb3Igbm90IHN1cHBvcnRlZCBmb3Igc2V0X2F1dG9fZXhwb3N1cmUiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJb3YtPmF1dG9fZXhwID0gZW5hYmxlOworCisJcmV0dXJuIDA7Cit9CisKKy8qIE1vZGlmaWVzIHRoZSBzZW5zb3IncyBleHBvc3VyZSBhbGdvcml0aG0gdG8gYWxsb3cgcHJvcGVyIGV4cG9zdXJlIG9mIG9iamVjdHMKKyAqIHRoYXQgYXJlIGlsbHVtaW5hdGVkIGZyb20gYmVoaW5kLgorICoKKyAqIFRlc3RlZCB3aXRoOiBPVjY2MjAsIE9WNzYyMAorICogVW5zdXBwb3J0ZWQ6IE9WNzYxMCwgT1Y3NkJFLCBLUzAxMjcsIEtTMDEyN0IsIFNBQTcxMTFBCisgKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCisgKi8KK3N0YXRpYyBpbnQKK3NlbnNvcl9zZXRfYmFja2xpZ2h0KHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBpbnQgZW5hYmxlKQoreworCVBERUJVRyg0LCAiICglcykiLCBlbmFibGUgPyAidHVybiBvbiIgOiAidHVybiBvZmYiKTsKKworCXN3aXRjaCAob3YtPnNlbnNvcikgeworCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjg2MDA6CisJCWkyY193X21hc2sob3YsIDB4NjgsIGVuYWJsZT8weGUwOjB4YzAsIDB4ZTApOworCQlpMmNfd19tYXNrKG92LCAweDI5LCBlbmFibGU/MHgwODoweDAwLCAweDA4KTsKKwkJaTJjX3dfbWFzayhvdiwgMHgyOCwgZW5hYmxlPzB4MDI6MHgwMCwgMHgwMik7CisJCWJyZWFrOworCWNhc2UgU0VOX09WNjYyMDoKKwkJaTJjX3dfbWFzayhvdiwgMHg0ZSwgZW5hYmxlPzB4ZTA6MHhjMCwgMHhlMCk7CisJCWkyY193X21hc2sob3YsIDB4MjksIGVuYWJsZT8weDA4OjB4MDAsIDB4MDgpOworCQlpMmNfd19tYXNrKG92LCAweDBlLCBlbmFibGU/MHg4MDoweDAwLCAweDgwKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y2NjMwOgorCQlpMmNfd19tYXNrKG92LCAweDRlLCBlbmFibGU/MHg4MDoweDYwLCAweGUwKTsKKwkJaTJjX3dfbWFzayhvdiwgMHgyOSwgZW5hYmxlPzB4MDg6MHgwMCwgMHgwOCk7CisJCWkyY193X21hc2sob3YsIDB4MjgsIGVuYWJsZT8weDAyOjB4MDAsIDB4MDIpOworCQlicmVhazsKKwljYXNlIFNFTl9PVjc2MTA6CisJY2FzZSBTRU5fT1Y3NkJFOgorCWNhc2UgU0VOX0tTMDEyNzoKKwljYXNlIFNFTl9LUzAxMjdCOgorCWNhc2UgU0VOX1NBQTcxMTFBOgorCQlQREVCVUcoNSwgIlVuc3VwcG9ydGVkIHdpdGggdGhpcyBzZW5zb3IiKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwlkZWZhdWx0OgorCQllcnIoIlNlbnNvciBub3Qgc3VwcG9ydGVkIGZvciBzZXRfYmFja2xpZ2h0Iik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW92LT5iYWNrbGlnaHQgPSBlbmFibGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc2Vuc29yX3NldF9taXJyb3Ioc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCBlbmFibGUpCit7CisJUERFQlVHKDQsICIgKCVzKSIsIGVuYWJsZSA/ICJ0dXJuIG9uIiA6ICJ0dXJuIG9mZiIpOworCisJc3dpdGNoIChvdi0+c2Vuc29yKSB7CisJY2FzZSBTRU5fT1Y2NjIwOgorCWNhc2UgU0VOX09WNjYzMDoKKwljYXNlIFNFTl9PVjc2MTA6CisJY2FzZSBTRU5fT1Y3NjIwOgorCWNhc2UgU0VOX09WNzZCRToKKwljYXNlIFNFTl9PVjg2MDA6CisJCWkyY193X21hc2sob3YsIDB4MTIsIGVuYWJsZT8weDQwOjB4MDAsIDB4NDApOworCQlicmVhazsKKwljYXNlIFNFTl9LUzAxMjc6CisJY2FzZSBTRU5fS1MwMTI3QjoKKwljYXNlIFNFTl9TQUE3MTExQToKKwkJUERFQlVHKDUsICJVbnN1cHBvcnRlZCB3aXRoIHRoaXMgc2Vuc29yIik7CisJCXJldHVybiAtRVBFUk07CisJZGVmYXVsdDoKKwkJZXJyKCJTZW5zb3Igbm90IHN1cHBvcnRlZCBmb3Igc2V0X21pcnJvciIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlvdi0+bWlycm9yID0gZW5hYmxlOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFJldHVybnMgbnVtYmVyIG9mIGJpdHMgcGVyIHBpeGVsIChyZWdhcmRsZXNzIG9mIHdoZXJlIHRoZXkgYXJlIGxvY2F0ZWQ7CisgKiBwbGFuYXIgb3Igbm90KSwgb3IgemVybyBmb3IgdW5zdXBwb3J0ZWQgZm9ybWF0LgorICovCitzdGF0aWMgaW5saW5lIGludAorZ2V0X2RlcHRoKGludCBwYWxldHRlKQoreworCXN3aXRjaCAocGFsZXR0ZSkgeworCWNhc2UgVklERU9fUEFMRVRURV9HUkVZOiAgICByZXR1cm4gODsKKwljYXNlIFZJREVPX1BBTEVUVEVfWVVWNDIwOiAgcmV0dXJuIDEyOworCWNhc2UgVklERU9fUEFMRVRURV9ZVVY0MjBQOiByZXR1cm4gMTI7IC8qIFBsYW5hciAqLworCWRlZmF1bHQ6CQkgICAgcmV0dXJuIDA7ICAvKiBJbnZhbGlkIGZvcm1hdCAqLworCX0KK30KKworLyogQnl0ZXMgcGVyIGZyYW1lLiBVc2VkIGJ5IHJlYWQoKS4gUmV0dXJuIG9mIDAgaW5kaWNhdGVzIGVycm9yICovCitzdGF0aWMgaW5saW5lIGxvbmcgaW50CitnZXRfZnJhbWVfbGVuZ3RoKHN0cnVjdCBvdjUxMV9mcmFtZSAqZnJhbWUpCit7CisJaWYgKCFmcmFtZSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gKChmcmFtZS0+d2lkdGggKiBmcmFtZS0+aGVpZ2h0CisJCQkgKiBnZXRfZGVwdGgoZnJhbWUtPmZvcm1hdCkpID4+IDMpOworfQorCitzdGF0aWMgaW50Cittb2RlX2luaXRfb3Zfc2Vuc29yX3JlZ3Moc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKwkJCSBpbnQgbW9kZSwgaW50IHN1Yl9mbGFnLCBpbnQgcXZnYSkKK3sKKwlpbnQgY2xvY2s7CisKKwkvKioqKioqKiogTW9kZSAoVkdBL1FWR0EpIGFuZCBzZW5zb3Igc3BlY2lmaWMgcmVncyAqKioqKioqKi8KKworCXN3aXRjaCAob3YtPnNlbnNvcikgeworCWNhc2UgU0VOX09WNzYxMDoKKwkJaTJjX3cob3YsIDB4MTQsIHF2Z2E/MHgyNDoweDA0KTsKKy8vIEZJWE1FOiBEb2VzIHRoaXMgaW1wcm92ZSB0aGUgaW1hZ2UgcXVhbGl0eSBvciBmcmFtZSByYXRlPworI2lmIDAKKwkJaTJjX3dfbWFzayhvdiwgMHgyOCwgcXZnYT8weDAwOjB4MjAsIDB4MjApOworCQlpMmNfdyhvdiwgMHgyNCwgMHgxMCk7CisJCWkyY193KG92LCAweDI1LCBxdmdhPzB4NDA6MHg4YSk7CisJCWkyY193KG92LCAweDJmLCBxdmdhPzB4MzA6MHhiMCk7CisJCWkyY193KG92LCAweDM1LCBxdmdhPzB4MWM6MHg5Yyk7CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y3NjIwOgorLy8JCWkyY193KG92LCAweDJiLCAweDAwKTsKKwkJaTJjX3cob3YsIDB4MTQsIHF2Z2E/MHhhNDoweDg0KTsKKwkJaTJjX3dfbWFzayhvdiwgMHgyOCwgcXZnYT8weDAwOjB4MjAsIDB4MjApOworCQlpMmNfdyhvdiwgMHgyNCwgcXZnYT8weDIwOjB4M2EpOworCQlpMmNfdyhvdiwgMHgyNSwgcXZnYT8weDMwOjB4NjApOworCQlpMmNfd19tYXNrKG92LCAweDJkLCBxdmdhPzB4NDA6MHgwMCwgMHg0MCk7CisJCWkyY193X21hc2sob3YsIDB4NjcsIHF2Z2E/MHhmMDoweDkwLCAweGYwKTsKKwkJaTJjX3dfbWFzayhvdiwgMHg3NCwgcXZnYT8weDIwOjB4MDAsIDB4MjApOworCQlicmVhazsKKwljYXNlIFNFTl9PVjc2QkU6CisvLwkJaTJjX3cob3YsIDB4MmIsIDB4MDApOworCQlpMmNfdyhvdiwgMHgxNCwgcXZnYT8weGE0OjB4ODQpOworLy8gRklYTUU6IEVuYWJsZSB0aGlzIG9uY2UgNzYyMEFFIHVzZXMgNzYyMCBpbml0aWFsIHNldHRpbmdzCisjaWYgMAorCQlpMmNfd19tYXNrKG92LCAweDI4LCBxdmdhPzB4MDA6MHgyMCwgMHgyMCk7CisJCWkyY193KG92LCAweDI0LCBxdmdhPzB4MjA6MHgzYSk7CisJCWkyY193KG92LCAweDI1LCBxdmdhPzB4MzA6MHg2MCk7CisJCWkyY193X21hc2sob3YsIDB4MmQsIHF2Z2E/MHg0MDoweDAwLCAweDQwKTsKKwkJaTJjX3dfbWFzayhvdiwgMHg2NywgcXZnYT8weGIwOjB4OTAsIDB4ZjApOworCQlpMmNfd19tYXNrKG92LCAweDc0LCBxdmdhPzB4MjA6MHgwMCwgMHgyMCk7CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSBTRU5fT1Y2NjIwOgorCQlpMmNfdyhvdiwgMHgxNCwgcXZnYT8weDI0OjB4MDQpOworCQlicmVhazsKKwljYXNlIFNFTl9PVjY2MzA6CisJCWkyY193KG92LCAweDE0LCBxdmdhPzB4YTA6MHg4MCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycigiSW52YWxpZCBzZW5zb3IiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoqKioqKioqIFBhbGV0dGUtc3BlY2lmaWMgcmVncyAqKioqKioqKi8KKworCWlmIChtb2RlID09IFZJREVPX1BBTEVUVEVfR1JFWSkgeworCQlpZiAob3YtPnNlbnNvciA9PSBTRU5fT1Y3NjEwIHx8IG92LT5zZW5zb3IgPT0gU0VOX09WNzZCRSkgeworCQkJLyogdGhlc2UgYXJlbid0IHZhbGlkIG9uIHRoZSBPVjY2MjAvT1Y3NjIwLzY2MzA/ICovCisJCQlpMmNfd19tYXNrKG92LCAweDBlLCAweDQwLCAweDQwKTsKKwkJfQorCisJCWlmIChvdi0+c2Vuc29yID09IFNFTl9PVjY2MzAgJiYgb3YtPmJyaWRnZSA9PSBCUkdfT1Y1MTgKKwkJICAgICYmIG92NTE4X2NvbG9yKSB7CisJCQlpMmNfd19tYXNrKG92LCAweDEyLCAweDAwLCAweDEwKTsKKwkJCWkyY193X21hc2sob3YsIDB4MTMsIDB4MDAsIDB4MjApOworCQl9IGVsc2UgeworCQkJaTJjX3dfbWFzayhvdiwgMHgxMywgMHgyMCwgMHgyMCk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAob3YtPnNlbnNvciA9PSBTRU5fT1Y3NjEwIHx8IG92LT5zZW5zb3IgPT0gU0VOX09WNzZCRSkgeworCQkJLyogbm90IHZhbGlkIG9uIHRoZSBPVjY2MjAvT1Y3NjIwLzY2MzA/ICovCisJCQlpMmNfd19tYXNrKG92LCAweDBlLCAweDAwLCAweDQwKTsKKwkJfQorCisJCS8qIFRoZSBPVjUxOCBuZWVkcyBzcGVjaWFsIHRyZWF0bWVudC4gQWx0aG91Z2ggYm90aCB0aGUgT1Y1MTgKKwkJICogYW5kIHRoZSBPVjY2MzAgc3VwcG9ydCBhIDE2LWJpdCB2aWRlbyBidXMsIG9ubHkgdGhlIDggYml0IFkKKwkJICogYnVzIGlzIGFjdHVhbGx5IHVzZWQuIFRoZSBVViBidXMgaXMgdGllZCB0byBncm91bmQuCisJCSAqIFRoZXJlZm9yZSwgdGhlIE9WNjYzMCBuZWVkcyB0byBiZSBpbiA4LWJpdCBtdWx0aXBsZXhlZAorCQkgKiBvdXRwdXQgbW9kZSAqLworCisJCWlmIChvdi0+c2Vuc29yID09IFNFTl9PVjY2MzAgJiYgb3YtPmJyaWRnZSA9PSBCUkdfT1Y1MTgKKwkJICAgICYmIG92NTE4X2NvbG9yKSB7CisJCQlpMmNfd19tYXNrKG92LCAweDEyLCAweDEwLCAweDEwKTsKKwkJCWkyY193X21hc2sob3YsIDB4MTMsIDB4MjAsIDB4MjApOworCQl9IGVsc2UgeworCQkJaTJjX3dfbWFzayhvdiwgMHgxMywgMHgwMCwgMHgyMCk7CisJCX0KKwl9CisKKwkvKioqKioqKiogQ2xvY2sgcHJvZ3JhbW1pbmcgKioqKioqKiovCisKKwkvKiBUaGUgT1Y2NjIwIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcuIFRoaXMgcHJldmVudHMgdGhlIAorCSAqIHNldmVyZSBiYW5kaW5nIHRoYXQgbm9ybWFsbHkgb2NjdXJzICovCisJaWYgKG92LT5zZW5zb3IgPT0gU0VOX09WNjYyMCB8fCBvdi0+c2Vuc29yID09IFNFTl9PVjY2MzApCisJeworCQkvKiBDbG9jayBkb3duICovCisKKwkJaTJjX3cob3YsIDB4MmEsIDB4MDQpOworCisJCWlmIChvdi0+Y29tcHJlc3MpIHsKKy8vCQkJY2xvY2sgPSAwOyAgICAvKiBUaGlzIGVuc3VyZXMgdGhlIGhpZ2hlc3QgZnJhbWUgcmF0ZSAqLworCQkJY2xvY2sgPSAzOworCQl9IGVsc2UgaWYgKGNsb2NrZGl2ID09IC0xKSB7ICAgLyogSWYgdXNlciBkaWRuJ3Qgb3ZlcnJpZGUgaXQgKi8KKwkJCWNsb2NrID0gMzsgICAgLyogR2l2ZXMgYmV0dGVyIGV4cG9zdXJlIHRpbWUgKi8KKwkJfSBlbHNlIHsKKwkJCWNsb2NrID0gY2xvY2tkaXY7CisJCX0KKworCQlQREVCVUcoNCwgIlNldHRpbmcgY2xvY2sgZGl2aXNvciB0byAlZCIsIGNsb2NrKTsKKworCQlpMmNfdyhvdiwgMHgxMSwgY2xvY2spOworCisJCWkyY193KG92LCAweDJhLCAweDg0KTsKKwkJLyogVGhpcyBuZXh0IHNldHRpbmcgaXMgY3JpdGljYWwuIEl0IHNlZW1zIHRvIGltcHJvdmUKKwkJICogdGhlIGdhaW4gb3IgdGhlIGNvbnRyYXN0LiBUaGUgInJlc2VydmVkIiBiaXRzIHNlZW0KKwkJICogdG8gaGF2ZSBzb21lIGVmZmVjdCBpbiB0aGlzIGNhc2UuICovCisJCWkyY193KG92LCAweDJkLCAweDg1KTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKG92LT5jb21wcmVzcykgeworCQkJY2xvY2sgPSAxOyAgICAvKiBUaGlzIGVuc3VyZXMgdGhlIGhpZ2hlc3QgZnJhbWUgcmF0ZSAqLworCQl9IGVsc2UgaWYgKGNsb2NrZGl2ID09IC0xKSB7ICAgLyogSWYgdXNlciBkaWRuJ3Qgb3ZlcnJpZGUgaXQgKi8KKwkJCS8qIENhbGN1bGF0ZSBhbmQgc2V0IHRoZSBjbG9jayBkaXZpc29yICovCisJCQljbG9jayA9ICgoc3ViX2ZsYWcgPyBvdi0+c3VidyAqIG92LT5zdWJoCisJCQkJICA6IHdpZHRoICogaGVpZ2h0KQorCQkJCSAqIChtb2RlID09IFZJREVPX1BBTEVUVEVfR1JFWSA/IDIgOiAzKSAvIDIpCisJCQkJIC8gNjYwMDA7CisJCX0gZWxzZSB7CisJCQljbG9jayA9IGNsb2NrZGl2OworCQl9CisKKwkJUERFQlVHKDQsICJTZXR0aW5nIGNsb2NrIGRpdmlzb3IgdG8gJWQiLCBjbG9jayk7CisKKwkJaTJjX3cob3YsIDB4MTEsIGNsb2NrKTsKKwl9CisKKwkvKioqKioqKiogU3BlY2lhbCBGZWF0dXJlcyAqKioqKioqKi8KKworCWlmIChmcmFtZWRyb3AgPj0gMCkKKwkJaTJjX3cob3YsIDB4MTYsIGZyYW1lZHJvcCk7CisKKwkvKiBUZXN0IFBhdHRlcm4gKi8KKwlpMmNfd19tYXNrKG92LCAweDEyLCAodGVzdHBhdD8weDAyOjB4MDApLCAweDAyKTsKKworCS8qIEVuYWJsZSBhdXRvIHdoaXRlIGJhbGFuY2UgKi8KKwlpMmNfd19tYXNrKG92LCAweDEyLCAweDA0LCAweDA0KTsKKworCS8vIFRoaXMgd2lsbCBnbyBhd2F5IGFzIHNvb24gYXMgb3Y1MXhfbW9kZV9pbml0X3NlbnNvcl9yZWdzKCkKKwkvLyBpcyBmdWxseSB0ZXN0ZWQuCisJLyogNzYyMC82NjIwLzY2MzA/IGRvbid0IGhhdmUgcmVnaXN0ZXIgMHgzNSwgc28gcGxheSBpdCBzYWZlICovCisJaWYgKG92LT5zZW5zb3IgPT0gU0VOX09WNzYxMCB8fCBvdi0+c2Vuc29yID09IFNFTl9PVjc2QkUpIHsKKwkJaWYgKHdpZHRoID09IDY0MCAmJiBoZWlnaHQgPT0gNDgwKQorCQkJaTJjX3cob3YsIDB4MzUsIDB4OWUpOworCQllbHNlCisJCQlpMmNfdyhvdiwgMHgzNSwgMHgxZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NldF9vdl9zZW5zb3Jfd2luZG93KHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtb2RlLAorCQkgICAgIGludCBzdWJfZmxhZykKK3sKKwlpbnQgcmV0OworCWludCBod3NiYXNlLCBod2ViYXNlLCB2d3NiYXNlLCB2d2ViYXNlLCBod3NpemUsIHZ3c2l6ZTsgCisJaW50IGhvZmZzZXQsIHZvZmZzZXQsIGh3c2NhbGUgPSAwLCB2d3NjYWxlID0gMDsKKworCS8qIFRoZSBkaWZmZXJlbnQgc2Vuc29yIElDcyBoYW5kbGUgc2V0dGluZyB1cCBvZiB3aW5kb3cgZGlmZmVyZW50bHkuCisJICogSUYgWU9VIFNFVCBJVCBXUk9ORywgWU9VIFdJTEwgR0VUIEFMTCBaRVJPIElTT0MgREFUQSBGUk9NIE9WNTF4ISEhICovCisJc3dpdGNoIChvdi0+c2Vuc29yKSB7CisJY2FzZSBTRU5fT1Y3NjEwOgorCWNhc2UgU0VOX09WNzZCRToKKwkJaHdzYmFzZSA9IDB4Mzg7CisJCWh3ZWJhc2UgPSAweDNhOworCQl2d3NiYXNlID0gdndlYmFzZSA9IDB4MDU7CisJCWJyZWFrOworCWNhc2UgU0VOX09WNjYyMDoKKwljYXNlIFNFTl9PVjY2MzA6CisJCWh3c2Jhc2UgPSAweDM4OworCQlod2ViYXNlID0gMHgzYTsKKwkJdndzYmFzZSA9IDB4MDU7CisJCXZ3ZWJhc2UgPSAweDA2OworCQlicmVhazsKKwljYXNlIFNFTl9PVjc2MjA6CisJCWh3c2Jhc2UgPSAweDJmOwkJLyogRnJvbSA3NjIwLlNFVCAoc3BlYyBpcyB3cm9uZykgKi8KKwkJaHdlYmFzZSA9IDB4MmY7CisJCXZ3c2Jhc2UgPSB2d2ViYXNlID0gMHgwNTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyKCJJbnZhbGlkIHNlbnNvciIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAob3YtPnNlbnNvciA9PSBTRU5fT1Y2NjIwIHx8IG92LT5zZW5zb3IgPT0gU0VOX09WNjYzMCkgeworCQkvKiBOb3RlOiBPVjUxOCgrKSBkb2VzIGRvd25zYW1wbGUgb24gaXRzIG93bikgKi8KKwkJaWYgKCh3aWR0aCA+IDE3NiAmJiBoZWlnaHQgPiAxNDQpCisJCSAgICB8fCBvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgeyAgLyogQ0lGICovCisJCQlyZXQgPSBtb2RlX2luaXRfb3Zfc2Vuc29yX3JlZ3Mob3YsIHdpZHRoLCBoZWlnaHQsCisJCQkJbW9kZSwgc3ViX2ZsYWcsIDApOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJCWh3c2NhbGUgPSAxOworCQkJdndzY2FsZSA9IDE7ICAvKiBUaGUgZGF0YXNoZWV0IHNheXMgMDsgaXQncyB3cm9uZyAqLworCQkJaHdzaXplID0gMzUyOworCQkJdndzaXplID0gMjg4OworCQl9IGVsc2UgaWYgKHdpZHRoID4gMTc2IHx8IGhlaWdodCA+IDE0NCkgeworCQkJZXJyKCJJbGxlZ2FsIGRpbWVuc2lvbnMiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UgewkJCSAgICAvKiBRQ0lGICovCisJCQlyZXQgPSBtb2RlX2luaXRfb3Zfc2Vuc29yX3JlZ3Mob3YsIHdpZHRoLCBoZWlnaHQsCisJCQkJbW9kZSwgc3ViX2ZsYWcsIDEpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJCWh3c2l6ZSA9IDE3NjsKKwkJCXZ3c2l6ZSA9IDE0NDsKKwkJfQorCX0gZWxzZSB7CisJCWlmICh3aWR0aCA+IDMyMCAmJiBoZWlnaHQgPiAyNDApIHsgIC8qIFZHQSAqLworCQkJcmV0ID0gbW9kZV9pbml0X292X3NlbnNvcl9yZWdzKG92LCB3aWR0aCwgaGVpZ2h0LAorCQkJCW1vZGUsIHN1Yl9mbGFnLCAwKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCQlod3NjYWxlID0gMjsKKwkJCXZ3c2NhbGUgPSAxOworCQkJaHdzaXplID0gNjQwOworCQkJdndzaXplID0gNDgwOworCQl9IGVsc2UgaWYgKHdpZHRoID4gMzIwIHx8IGhlaWdodCA+IDI0MCkgeworCQkJZXJyKCJJbGxlZ2FsIGRpbWVuc2lvbnMiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UgewkJCSAgICAvKiBRVkdBICovCisJCQlyZXQgPSBtb2RlX2luaXRfb3Zfc2Vuc29yX3JlZ3Mob3YsIHdpZHRoLCBoZWlnaHQsCisJCQkJbW9kZSwgc3ViX2ZsYWcsIDEpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJCWh3c2NhbGUgPSAxOworCQkJaHdzaXplID0gMzIwOworCQkJdndzaXplID0gMjQwOworCQl9CisJfQorCisJLyogQ2VudGVyIHRoZSB3aW5kb3cgKi8KKwlob2Zmc2V0ID0gKChod3NpemUgLSB3aWR0aCkgLyAyKSA+PiBod3NjYWxlOworCXZvZmZzZXQgPSAoKHZ3c2l6ZSAtIGhlaWdodCkgLyAyKSA+PiB2d3NjYWxlOworCisJLyogRklYTUUhIC0gVGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIHN1cHBvcnQgMTYweDEyMCBhbmQgNjYyMCEhISAqLworCWlmIChzdWJfZmxhZykgeworCQlpMmNfdyhvdiwgMHgxNywgaHdzYmFzZSsob3YtPnN1Yng+Pmh3c2NhbGUpKTsKKwkJaTJjX3cob3YsIDB4MTgsCWh3ZWJhc2UrKChvdi0+c3VieCtvdi0+c3Vidyk+Pmh3c2NhbGUpKTsKKwkJaTJjX3cob3YsIDB4MTksIHZ3c2Jhc2UrKG92LT5zdWJ5Pj52d3NjYWxlKSk7CisJCWkyY193KG92LCAweDFhLCB2d2ViYXNlKygob3YtPnN1Ynkrb3YtPnN1YmgpPj52d3NjYWxlKSk7CisJfSBlbHNlIHsKKwkJaTJjX3cob3YsIDB4MTcsIGh3c2Jhc2UgKyBob2Zmc2V0KTsKKwkJaTJjX3cob3YsIDB4MTgsIGh3ZWJhc2UgKyBob2Zmc2V0ICsgKGh3c2l6ZT4+aHdzY2FsZSkpOworCQlpMmNfdyhvdiwgMHgxOSwgdndzYmFzZSArIHZvZmZzZXQpOworCQlpMmNfdyhvdiwgMHgxYSwgdndlYmFzZSArIHZvZmZzZXQgKyAodndzaXplPj52d3NjYWxlKSk7CisJfQorCisjaWZkZWYgT1Y1MTFfREVCVUcKKwlpZiAoZHVtcF9zZW5zb3IpCisJCWR1bXBfaTJjX3JlZ3Mob3YpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworLyogU2V0IHVwIHRoZSBPVjUxMS9PVjUxMSsgd2l0aCB0aGUgZ2l2ZW4gaW1hZ2UgcGFyYW1ldGVycy4KKyAqCisgKiBEbyBub3QgcHV0IGFueSBzZW5zb3Itc3BlY2lmaWMgY29kZSBpbiBoZXJlIChpbmNsdWRpbmcgSTJDIEkvTyBmdW5jdGlvbnMpCisgKi8KK3N0YXRpYyBpbnQKK292NTExX21vZGVfaW5pdF9yZWdzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LAorCQkgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1vZGUsIGludCBzdWJfZmxhZykKK3sKKwlpbnQgaHNlZ3MsIHZzZWdzOworCisJaWYgKHN1Yl9mbGFnKSB7CisJCXdpZHRoID0gb3YtPnN1Ync7CisJCWhlaWdodCA9IG92LT5zdWJoOworCX0KKworCVBERUJVRygzLCAid2lkdGg6JWQsIGhlaWdodDolZCwgbW9kZTolZCwgc3ViOiVkIiwKKwkgICAgICAgd2lkdGgsIGhlaWdodCwgbW9kZSwgc3ViX2ZsYWcpOworCisJLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIG1vdmVkIHRvIGEgNzExMWEtc3BlY2lmaWMgZnVuY3Rpb24gb25jZQorCS8vIHN1YmNhcHR1cmUgaXMgZGVhbHQgd2l0aCBwcm9wZXJseQorCWlmIChvdi0+c2Vuc29yID09IFNFTl9TQUE3MTExQSkgeworCQlpZiAod2lkdGggPT0gMzIwICYmIGhlaWdodCA9PSAyNDApIHsKKwkJCS8qIE5vIG5lZWQgdG8gZG8gYW55dGhpbmcgc3BlY2lhbCAqLworCQl9IGVsc2UgaWYgKHdpZHRoID09IDY0MCAmJiBoZWlnaHQgPT0gNDgwKSB7CisJCQkvKiBTZXQgdGhlIE9WNTExIHVwIGFzIDMyMHg0ODAsIGJ1dCBrZWVwIHRoZQorCQkJICogVjRMIHJlc29sdXRpb24gYXMgNjQweDQ4MCAqLworCQkJd2lkdGggPSAzMjA7CisJCX0gZWxzZSB7CisJCQllcnIoIlNBQTcxMTFBIG9ubHkgYWxsb3dzIDMyMHgyNDAgb3IgNjQweDQ4MCIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwkvKiBNYWtlIHN1cmUgd2lkdGggYW5kIGhlaWdodCBhcmUgYSBtdWx0aXBsZSBvZiA4ICovCisJaWYgKHdpZHRoICUgOCB8fCBoZWlnaHQgJSA4KSB7CisJCWVycigiSW52YWxpZCBzaXplICglZCwgJWQpIChtb2RlID0gJWQpIiwgd2lkdGgsIGhlaWdodCwgbW9kZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh3aWR0aCA8IG92LT5taW53aWR0aCB8fCBoZWlnaHQgPCBvdi0+bWluaGVpZ2h0KSB7CisJCWVycigiUmVxdWVzdGVkIGRpbWVuc2lvbnMgYXJlIHRvbyBzbWFsbCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAob3Y1MXhfc3RvcChvdikgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChtb2RlID09IFZJREVPX1BBTEVUVEVfR1JFWSkgeworCQlyZWdfdyhvdiwgUjUxMV9DQU1fVVZfRU4sIDB4MDApOworCQlyZWdfdyhvdiwgUjUxMV9TTkFQX1VWX0VOLCAweDAwKTsKKwkJcmVnX3cob3YsIFI1MTFfU05BUF9PUFRTLCAweDAxKTsKKwl9IGVsc2UgeworCQlyZWdfdyhvdiwgUjUxMV9DQU1fVVZfRU4sIDB4MDEpOworCQlyZWdfdyhvdiwgUjUxMV9TTkFQX1VWX0VOLCAweDAxKTsKKwkJcmVnX3cob3YsIFI1MTFfU05BUF9PUFRTLCAweDAzKTsKKwl9CisKKwkvKiBIZXJlIEknbSBhc3N1bWluZyB0aGF0IHNuYXBzaG90IHNpemUgPT0gaW1hZ2Ugc2l6ZS4KKwkgKiBJIGhvcGUgdGhhdCdzIGFsd2F5cyB0cnVlLiAtLWNsYXVkaW8KKwkgKi8KKwloc2VncyA9ICh3aWR0aCA+PiAzKSAtIDE7CisJdnNlZ3MgPSAoaGVpZ2h0ID4+IDMpIC0gMTsKKworCXJlZ193KG92LCBSNTExX0NBTV9QWENOVCwgaHNlZ3MpOworCXJlZ193KG92LCBSNTExX0NBTV9MTkNOVCwgdnNlZ3MpOworCXJlZ193KG92LCBSNTExX0NBTV9QWERJViwgMHgwMCk7CisJcmVnX3cob3YsIFI1MTFfQ0FNX0xORElWLCAweDAwKTsKKworCS8qIFlVVjQyMCwgbG93IHBhc3MgZmlsdGVyIG9uICovCisJcmVnX3cob3YsIFI1MTFfQ0FNX09QVFMsIDB4MDMpOworCisJLyogU25hcHNob3QgYWRkaXRpb25zICovCisJcmVnX3cob3YsIFI1MTFfU05BUF9QWENOVCwgaHNlZ3MpOworCXJlZ193KG92LCBSNTExX1NOQVBfTE5DTlQsIHZzZWdzKTsKKwlyZWdfdyhvdiwgUjUxMV9TTkFQX1BYRElWLCAweDAwKTsKKwlyZWdfdyhvdiwgUjUxMV9TTkFQX0xORElWLCAweDAwKTsKKworCWlmIChvdi0+Y29tcHJlc3MpIHsKKwkJLyogRW5hYmxlIFkgYW5kIFVWIHF1YW50aXphdGlvbiBhbmQgY29tcHJlc3Npb24gKi8KKwkJcmVnX3cob3YsIFI1MTFfQ09NUF9FTiwgMHgwNyk7CisJCXJlZ193KG92LCBSNTExX0NPTVBfTFVUX0VOLCAweDAzKTsKKwkJb3Y1MXhfcmVzZXQob3YsIE9WNTExX1JFU0VUX09NTklDRSk7CisJfQorCisJaWYgKG92NTF4X3Jlc3RhcnQob3YpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworLyogU2V0cyB1cCB0aGUgT1Y1MTgvT1Y1MTgrIHdpdGggdGhlIGdpdmVuIGltYWdlIHBhcmFtZXRlcnMKKyAqCisgKiBPVjUxOCBuZWVkcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGFwcHJvYWNoLCB1bnRpbCB3ZSBjYW4gZmlndXJlIG91dCB3aGF0CisgKiB0aGUgaW5kaXZpZHVhbCByZWdpc3RlcnMgZG8uIEFsc28sIG9ubHkgMTUgRlBTIGlzIHN1cHBvcnRlZCBub3cuCisgKgorICogRG8gbm90IHB1dCBhbnkgc2Vuc29yLXNwZWNpZmljIGNvZGUgaW4gaGVyZSAoaW5jbHVkaW5nIEkyQyBJL08gZnVuY3Rpb25zKQorICovCitzdGF0aWMgaW50CitvdjUxOF9tb2RlX2luaXRfcmVncyhzdHJ1Y3QgdXNiX292NTExICpvdiwKKwkJICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtb2RlLCBpbnQgc3ViX2ZsYWcpCit7CisJaW50IGhzZWdzLCB2c2VncywgaGlfcmVzOworCisJaWYgKHN1Yl9mbGFnKSB7CisJCXdpZHRoID0gb3YtPnN1Ync7CisJCWhlaWdodCA9IG92LT5zdWJoOworCX0KKworCVBERUJVRygzLCAid2lkdGg6JWQsIGhlaWdodDolZCwgbW9kZTolZCwgc3ViOiVkIiwKKwkgICAgICAgd2lkdGgsIGhlaWdodCwgbW9kZSwgc3ViX2ZsYWcpOworCisJaWYgKHdpZHRoICUgMTYgfHwgaGVpZ2h0ICUgOCkgeworCQllcnIoIkludmFsaWQgc2l6ZSAoJWQsICVkKSIsIHdpZHRoLCBoZWlnaHQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAod2lkdGggPCBvdi0+bWlud2lkdGggfHwgaGVpZ2h0IDwgb3YtPm1pbmhlaWdodCkgeworCQllcnIoIlJlcXVlc3RlZCBkaW1lbnNpb25zIGFyZSB0b28gc21hbGwiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHdpZHRoID49IDMyMCAmJiBoZWlnaHQgPj0gMjQwKSB7CisJCWhpX3JlcyA9IDE7CisJfSBlbHNlIGlmICh3aWR0aCA+PSAzMjAgfHwgaGVpZ2h0ID49IDI0MCkgeworCQllcnIoIkludmFsaWQgd2lkdGgvaGVpZ2h0IGNvbWJpbmF0aW9uICglZCwgJWQpIiwgd2lkdGgsIGhlaWdodCk7CisJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSB7CisJCWhpX3JlcyA9IDA7CisJfQorCisJaWYgKG92NTF4X3N0b3Aob3YpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwkvKioqKioqKiogU2V0IHRoZSBtb2RlICoqKioqKioqLworCisJcmVnX3cob3YsIDB4MmIsIDApOworCXJlZ193KG92LCAweDJjLCAwKTsKKwlyZWdfdyhvdiwgMHgyZCwgMCk7CisJcmVnX3cob3YsIDB4MmUsIDApOworCXJlZ193KG92LCAweDNiLCAwKTsKKwlyZWdfdyhvdiwgMHgzYywgMCk7CisJcmVnX3cob3YsIDB4M2QsIDApOworCXJlZ193KG92LCAweDNlLCAwKTsKKworCWlmIChvdi0+YnJpZGdlID09IEJSR19PVjUxOCAmJiBvdjUxOF9jb2xvcikgeworCQkvKiBPVjUxOCBuZWVkcyBVIGFuZCBWIHN3YXBwZWQgKi8KKwkJaTJjX3dfbWFzayhvdiwgMHgxNSwgMHgwMCwgMHgwMSk7CisKKwkgCWlmIChtb2RlID09IFZJREVPX1BBTEVUVEVfR1JFWSkgeworCQkJLyogU2V0IDE2LWJpdCBpbnB1dCBmb3JtYXQgKFVWIGRhdGEgYXJlIGlnbm9yZWQpICovCisJCQlyZWdfd19tYXNrKG92LCAweDIwLCAweDAwLCAweDA4KTsKKworCQkJLyogU2V0IDgtYml0ICg0OjA6MCkgb3V0cHV0IGZvcm1hdCAqLworCQkJcmVnX3dfbWFzayhvdiwgMHgyOCwgMHgwMCwgMHhmMCk7CisJCQlyZWdfd19tYXNrKG92LCAweDM4LCAweDAwLCAweGYwKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFNldCA4LWJpdCAoWVZZVSkgaW5wdXQgZm9ybWF0ICovCisJCQlyZWdfd19tYXNrKG92LCAweDIwLCAweDA4LCAweDA4KTsKKworCQkJLyogU2V0IDEyLWJpdCAoNDoyOjApIG91dHB1dCBmb3JtYXQgKi8KKwkJCXJlZ193X21hc2sob3YsIDB4MjgsIDB4ODAsIDB4ZjApOworCQkJcmVnX3dfbWFzayhvdiwgMHgzOCwgMHg4MCwgMHhmMCk7CisJCX0KKwl9IGVsc2UgeworCQlyZWdfdyhvdiwgMHgyOCwgKG1vZGUgPT0gVklERU9fUEFMRVRURV9HUkVZKSA/IDB4MDA6MHg4MCk7CisJCXJlZ193KG92LCAweDM4LCAobW9kZSA9PSBWSURFT19QQUxFVFRFX0dSRVkpID8gMHgwMDoweDgwKTsKKwl9CisKKwloc2VncyA9IHdpZHRoIC8gMTY7CisJdnNlZ3MgPSBoZWlnaHQgLyA0OworCisJcmVnX3cob3YsIDB4MjksIGhzZWdzKTsKKwlyZWdfdyhvdiwgMHgyYSwgdnNlZ3MpOworCisJcmVnX3cob3YsIDB4MzksIGhzZWdzKTsKKwlyZWdfdyhvdiwgMHgzYSwgdnNlZ3MpOworCisJLyogV2luZG93cyBkcml2ZXIgZG9lcyB0aGlzIGhlcmU7IHdobyBrbm93cyB3aHkgKi8KKwlyZWdfdyhvdiwgMHgyZiwgMHg4MCk7CisKKwkvKioqKioqKiogU2V0IHRoZSBmcmFtZXJhdGUgKHRvIDE1IEZQUykgKioqKioqKiovCisKKwkvKiBNb2RlIGluZGVwZW5kZW50LCBidXQgZnJhbWVyYXRlIGRlcGVuZGVudCwgcmVncyAqLworCXJlZ193KG92LCAweDUxLCAweDAyKTsJLyogQ2xvY2sgZGl2aWRlcjsgbG93ZXI9PWZhc3RlciAqLworCXJlZ193KG92LCAweDIyLCAweDE4KTsKKwlyZWdfdyhvdiwgMHgyMywgMHhmZik7CisKKwlpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MThQTFVTKQorCQlyZWdfdyhvdiwgMHgyMSwgMHgxOSk7CisJZWxzZQorCQlyZWdfdyhvdiwgMHg3MSwgMHgxOSk7CS8qIENvbXByZXNzaW9uLXJlbGF0ZWQ/ICovCisKKwkvLyBGSVhNRTogU2Vuc29yLXNwZWNpZmljCisJLyogQml0IDUgaXMgd2hhdCBtYXR0ZXJzIGhlcmUuIE9mIGNvdXJzZSwgaXQgaXMgInJlc2VydmVkIiAqLworCWkyY193KG92LCAweDU0LCAweDIzKTsKKworCXJlZ193KG92LCAweDJmLCAweDgwKTsKKworCWlmIChvdi0+YnJpZGdlID09IEJSR19PVjUxOFBMVVMpIHsKKwkJcmVnX3cob3YsIDB4MjQsIDB4OTQpOworCQlyZWdfdyhvdiwgMHgyNSwgMHg5MCk7CisJCW92NTE4X3JlZ193MzIob3YsIDB4YzQsICAgIDQwMCwgMik7CS8qIDE5MGggICAqLworCQlvdjUxOF9yZWdfdzMyKG92LCAweGM2LCAgICA1NDAsIDIpOwkvKiAyMWNoICAgKi8KKwkJb3Y1MThfcmVnX3czMihvdiwgMHhjNywgICAgNTQwLCAyKTsJLyogMjFjaCAgICovCisJCW92NTE4X3JlZ193MzIob3YsIDB4YzgsICAgIDEwOCwgMik7CS8qIDZjaCAgICAqLworCQlvdjUxOF9yZWdfdzMyKG92LCAweGNhLCAxMzEwOTgsIDMpOwkvKiAyMDAxYWggKi8KKwkJb3Y1MThfcmVnX3czMihvdiwgMHhjYiwgICAgNTMyLCAyKTsJLyogMjE0aCAgICovCisJCW92NTE4X3JlZ193MzIob3YsIDB4Y2MsICAgMjQwMCwgMik7CS8qIDk2MGggICAqLworCQlvdjUxOF9yZWdfdzMyKG92LCAweGNkLCAgICAgMzIsIDIpOwkvKiAyMGggICAgKi8KKwkJb3Y1MThfcmVnX3czMihvdiwgMHhjZSwgICAgNjA4LCAyKTsJLyogMjYwaCAgICovCisJfSBlbHNlIHsKKwkJcmVnX3cob3YsIDB4MjQsIDB4OWYpOworCQlyZWdfdyhvdiwgMHgyNSwgMHg5MCk7CisJCW92NTE4X3JlZ193MzIob3YsIDB4YzQsICAgIDQwMCwgMik7CS8qIDE5MGggICAqLworCQlvdjUxOF9yZWdfdzMyKG92LCAweGM2LCAgICA1MDAsIDIpOwkvKiAxZjRoICAgKi8KKwkJb3Y1MThfcmVnX3czMihvdiwgMHhjNywgICAgNTAwLCAyKTsJLyogMWY0aCAgICovCisJCW92NTE4X3JlZ193MzIob3YsIDB4YzgsICAgIDE0MiwgMik7CS8qIDhlaCAgICAqLworCQlvdjUxOF9yZWdfdzMyKG92LCAweGNhLCAxMzEwOTgsIDMpOwkvKiAyMDAxYWggKi8KKwkJb3Y1MThfcmVnX3czMihvdiwgMHhjYiwgICAgNTMyLCAyKTsJLyogMjE0aCAgICovCisJCW92NTE4X3JlZ193MzIob3YsIDB4Y2MsICAgMjAwMCwgMik7CS8qIDdkMGggICAqLworCQlvdjUxOF9yZWdfdzMyKG92LCAweGNkLCAgICAgMzIsIDIpOwkvKiAyMGggICAgKi8KKwkJb3Y1MThfcmVnX3czMihvdiwgMHhjZSwgICAgNjA4LCAyKTsJLyogMjYwaCAgICovCisJfQorCisJcmVnX3cob3YsIDB4MmYsIDB4ODApOworCisJaWYgKG92NTF4X3Jlc3RhcnQob3YpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBSZXNldCBpdCBqdXN0IGZvciBnb29kIG1lYXN1cmUgKi8KKwlpZiAob3Y1MXhfcmVzZXQob3YsIE9WNTExX1JFU0VUX05PUkVHUykgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCisvKiBUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIE9WNTExLCBPVjUxOCwgYW5kIHNlbnNvciBzcGVjaWZpYyBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQKK21vZGVfaW5pdF9yZWdzKHN0cnVjdCB1c2Jfb3Y1MTEgKm92LAorCSAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtb2RlLCBpbnQgc3ViX2ZsYWcpCit7CisJaW50IHJjID0gMDsKKworCWlmICghb3YgfHwgIW92LT5kZXYpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KSB7CisJCXJjID0gb3Y1MThfbW9kZV9pbml0X3JlZ3Mob3YsIHdpZHRoLCBoZWlnaHQsIG1vZGUsIHN1Yl9mbGFnKTsKKwl9IGVsc2UgeworCQlyYyA9IG92NTExX21vZGVfaW5pdF9yZWdzKG92LCB3aWR0aCwgaGVpZ2h0LCBtb2RlLCBzdWJfZmxhZyk7CisJfQorCisJaWYgKEZBVEFMX0VSUk9SKHJjKSkKKwkJcmV0dXJuIHJjOworCisJc3dpdGNoIChvdi0+c2Vuc29yKSB7CisJY2FzZSBTRU5fT1Y3NjEwOgorCWNhc2UgU0VOX09WNzYyMDoKKwljYXNlIFNFTl9PVjc2QkU6CisJY2FzZSBTRU5fT1Y4NjAwOgorCWNhc2UgU0VOX09WNjYyMDoKKwljYXNlIFNFTl9PVjY2MzA6CisJCXJjID0gc2V0X292X3NlbnNvcl93aW5kb3cob3YsIHdpZHRoLCBoZWlnaHQsIG1vZGUsIHN1Yl9mbGFnKTsKKwkJYnJlYWs7CisJY2FzZSBTRU5fS1MwMTI3OgorCWNhc2UgU0VOX0tTMDEyN0I6CisJCWVycigiS1MwMTI3LXNlcmllcyBkZWNvZGVycyBub3Qgc3VwcG9ydGVkIHlldCIpOworCQlyYyA9IC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgU0VOX1NBQTcxMTFBOgorLy8JCXJjID0gbW9kZV9pbml0X3NhYV9zZW5zb3JfcmVncyhvdiwgd2lkdGgsIGhlaWdodCwgbW9kZSwKKy8vCQkJCQkgICAgICAgc3ViX2ZsYWcpOworCisJCVBERUJVRygxLCAiU0FBIHN0YXR1cyA9IDB4JTAyWCIsIGkyY19yKG92LCAweDFmKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycigiVW5rbm93biBzZW5zb3IiKTsKKwkJcmMgPSAtRUlOVkFMOworCX0KKworCWlmIChGQVRBTF9FUlJPUihyYykpCisJCXJldHVybiByYzsKKworCS8qIFNlbnNvci1pbmRlcGVuZGVudCBzZXR0aW5ncyAqLworCXJjID0gc2Vuc29yX3NldF9hdXRvX2JyaWdodG5lc3Mob3YsIG92LT5hdXRvX2JydCk7CisJaWYgKEZBVEFMX0VSUk9SKHJjKSkKKwkJcmV0dXJuIHJjOworCisJcmMgPSBzZW5zb3Jfc2V0X2F1dG9fZXhwb3N1cmUob3YsIG92LT5hdXRvX2V4cCk7CisJaWYgKEZBVEFMX0VSUk9SKHJjKSkKKwkJcmV0dXJuIHJjOworCisJcmMgPSBzZW5zb3Jfc2V0X2JhbmRpbmdfZmlsdGVyKG92LCBiYW5kaW5nZmlsdGVyKTsKKwlpZiAoRkFUQUxfRVJST1IocmMpKQorCQlyZXR1cm4gcmM7CisKKwlpZiAob3YtPmxpZ2h0ZnJlcSkgeworCQlyYyA9IHNlbnNvcl9zZXRfbGlnaHRfZnJlcShvdiwgbGlnaHRmcmVxKTsKKwkJaWYgKEZBVEFMX0VSUk9SKHJjKSkKKwkJCXJldHVybiByYzsKKwl9CisKKwlyYyA9IHNlbnNvcl9zZXRfYmFja2xpZ2h0KG92LCBvdi0+YmFja2xpZ2h0KTsKKwlpZiAoRkFUQUxfRVJST1IocmMpKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IHNlbnNvcl9zZXRfbWlycm9yKG92LCBvdi0+bWlycm9yKTsKKwlpZiAoRkFUQUxfRVJST1IocmMpKQorCQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBzZXRzIHRoZSBkZWZhdWx0IGltYWdlIHBhcmFtZXRlcnMuIFRoaXMgaXMgdXNlZnVsIGZvciBhcHBzIHRoYXQgdXNlCisgKiByZWFkKCkgYW5kIGRvIG5vdCBzZXQgdGhlc2UuCisgKi8KK3N0YXRpYyBpbnQKK292NTF4X3NldF9kZWZhdWx0X3BhcmFtcyhzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlpbnQgaTsKKworCS8qIFNldCBkZWZhdWx0IHNpemVzIGluIGNhc2UgSU9DVEwgKFZJRElPQ01DQVBUVVJFKSBpcyBub3QgdXNlZAorCSAqICh1c2luZyByZWFkKCkgaW5zdGVhZCkuICovCisJZm9yIChpID0gMDsgaSA8IE9WNTExX05VTUZSQU1FUzsgaSsrKSB7CisJCW92LT5mcmFtZVtpXS53aWR0aCA9IG92LT5tYXh3aWR0aDsKKwkJb3YtPmZyYW1lW2ldLmhlaWdodCA9IG92LT5tYXhoZWlnaHQ7CisJCW92LT5mcmFtZVtpXS5ieXRlc19yZWFkID0gMDsKKwkJaWYgKGZvcmNlX3BhbGV0dGUpCisJCQlvdi0+ZnJhbWVbaV0uZm9ybWF0ID0gZm9yY2VfcGFsZXR0ZTsKKwkJZWxzZQorCQkJb3YtPmZyYW1lW2ldLmZvcm1hdCA9IFZJREVPX1BBTEVUVEVfWVVWNDIwOworCisJCW92LT5mcmFtZVtpXS5kZXB0aCA9IGdldF9kZXB0aChvdi0+ZnJhbWVbaV0uZm9ybWF0KTsKKwl9CisKKwlQREVCVUcoMywgIiVkeCVkLCAlcyIsIG92LT5tYXh3aWR0aCwgb3YtPm1heGhlaWdodCwKKwkgICAgICAgc3ltYm9saWModjRsMV9wbGlzdCwgb3YtPmZyYW1lWzBdLmZvcm1hdCkpOworCisJLyogSW5pdGlhbGl6ZSB0byBtYXggd2lkdGgvaGVpZ2h0LCBZVVY0MjAgb3IgUkdCMjQgKGlmIHN1cHBvcnRlZCkgKi8KKwlpZiAobW9kZV9pbml0X3JlZ3Mob3YsIG92LT5tYXh3aWR0aCwgb3YtPm1heGhlaWdodCwKKwkJCSAgIG92LT5mcmFtZVswXS5mb3JtYXQsIDApIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBWaWRlbyBkZWNvZGVyIHN0dWZmCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFNldCBhbmFsb2cgaW5wdXQgcG9ydCBvZiBkZWNvZGVyICovCitzdGF0aWMgaW50CitkZWNvZGVyX3NldF9pbnB1dChzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IGlucHV0KQoreworCVBERUJVRyg0LCAicG9ydCAlZCIsIGlucHV0KTsKKworCXN3aXRjaCAob3YtPnNlbnNvcikgeworCWNhc2UgU0VOX1NBQTcxMTFBOgorCXsKKwkJLyogU2VsZWN0IG1vZGUgKi8KKwkJaTJjX3dfbWFzayhvdiwgMHgwMiwgaW5wdXQsIDB4MDcpOworCQkvKiBCeXBhc3MgY2hyb21pbmFuY2UgdHJhcCBmb3IgbW9kZXMgNC4uNyAqLworCQlpMmNfd19tYXNrKG92LCAweDA5LCAoaW5wdXQgPiAzKSA/IDB4ODA6MHgwMCwgMHg4MCk7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogR2V0IEFTQ0lJIG5hbWUgb2YgdmlkZW8gaW5wdXQgKi8KK3N0YXRpYyBpbnQKK2RlY29kZXJfZ2V0X2lucHV0X25hbWUoc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCBpbnB1dCwgY2hhciAqbmFtZSkKK3sKKwlzd2l0Y2ggKG92LT5zZW5zb3IpIHsKKwljYXNlIFNFTl9TQUE3MTExQToKKwl7CisJCWlmIChpbnB1dCA8IDAgfHwgaW5wdXQgPiA3KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWVsc2UgaWYgKGlucHV0IDwgNCkKKwkJCXNwcmludGYobmFtZSwgIkNWQlMtJWQiLCBpbnB1dCk7CisJCWVsc2UgLy8gaWYgKGlucHV0IDwgOCkKKwkJCXNwcmludGYobmFtZSwgIlMtVmlkZW8tJWQiLCBpbnB1dCAtIDQpOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJc3ByaW50ZihuYW1lLCAiJXMiLCAiQ2FtZXJhIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFNldCBub3JtIChOVFNDLCBQQUwsIFNFQ0FNLCBBVVRPKSAqLworc3RhdGljIGludAorZGVjb2Rlcl9zZXRfbm9ybShzdHJ1Y3QgdXNiX292NTExICpvdiwgaW50IG5vcm0pCit7CisJUERFQlVHKDQsICIlZCIsIG5vcm0pOworCisJc3dpdGNoIChvdi0+c2Vuc29yKSB7CisJY2FzZSBTRU5fU0FBNzExMUE6CisJeworCQlpbnQgcmVnXzgsIHJlZ19lOworCisJCWlmIChub3JtID09IFZJREVPX01PREVfTlRTQykgeworCQkJcmVnXzggPSAweDQwOwkvKiA2MCBIeiAqLworCQkJcmVnX2UgPSAweDAwOwkvKiBOVFNDIE0gLyBQQUwgQkdISSAqLworCQl9IGVsc2UgaWYgKG5vcm0gPT0gVklERU9fTU9ERV9QQUwpIHsKKwkJCXJlZ184ID0gMHgwMDsJLyogNTAgSHogKi8KKwkJCXJlZ19lID0gMHgwMDsJLyogTlRTQyBNIC8gUEFMIEJHSEkgKi8KKwkJfSBlbHNlIGlmIChub3JtID09IFZJREVPX01PREVfQVVUTykgeworCQkJcmVnXzggPSAweDgwOwkvKiBBdXRvIGZpZWxkIGRldGVjdCAqLworCQkJcmVnX2UgPSAweDAwOwkvKiBOVFNDIE0gLyBQQUwgQkdISSAqLworCQl9IGVsc2UgaWYgKG5vcm0gPT0gVklERU9fTU9ERV9TRUNBTSkgeworCQkJcmVnXzggPSAweDAwOwkvKiA1MCBIeiAqLworCQkJcmVnX2UgPSAweDUwOwkvKiBTRUNBTSAvIFBBTCA0LjQzICovCisJCX0gZWxzZSB7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWkyY193X21hc2sob3YsIDB4MDgsIHJlZ184LCAweGMwKTsKKwkJaTJjX3dfbWFzayhvdiwgMHgwZSwgcmVnX2UsIDB4NzApOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUmF3IGRhdGEgcGFyc2luZworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBDb3BpZXMgYSA2NC1ieXRlIHNlZ21lbnQgYXQgcEluIHRvIGFuIDh4OCBibG9jayBhdCBwT3V0LiBUaGUgd2lkdGggb2YgdGhlCisgKiBpbWFnZSBhdCBwT3V0IGlzIHNwZWNpZmllZCBieSB3LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK21ha2VfOHg4KHVuc2lnbmVkIGNoYXIgKnBJbiwgdW5zaWduZWQgY2hhciAqcE91dCwgaW50IHcpCit7CisJdW5zaWduZWQgY2hhciAqcE91dDEgPSBwT3V0OworCWludCB4LCB5OworCisJZm9yICh5ID0gMDsgeSA8IDg7IHkrKykgeworCQlwT3V0MSA9IHBPdXQ7CisJCWZvciAoeCA9IDA7IHggPCA4OyB4KyspIHsKKwkJCSpwT3V0MSsrID0gKnBJbisrOworCQl9CisJCXBPdXQgKz0gdzsKKwl9Cit9CisKKy8qCisgKiBGb3IgUkFXIEJXIChZVVYgNDowOjApIGltYWdlcywgZGF0YSBzaG93IHVwIGluIDI1NiBieXRlIHNlZ21lbnRzLgorICogVGhlIHNlZ21lbnRzIHJlcHJlc2VudCA0IHNxdWFyZXMgb2YgOHg4IHBpeGVscyBhcyBmb2xsb3dzOgorICoKKyAqICAgICAgMCAgMSAuLi4gIDcgICAgNjQgIDY1IC4uLiAgNzEgICAuLi4gIDE5MiAxOTMgLi4uIDE5OQorICogICAgICA4ICA5IC4uLiAxNSAgICA3MiAgNzMgLi4uICA3OSAgICAgICAgMjAwIDIwMSAuLi4gMjA3CisgKiAgICAgICAgICAgLi4uICAgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgIC4uLgorICogICAgIDU2IDU3IC4uLiA2MyAgIDEyMCAxMjEgLi4uIDEyNyAgICAgICAgMjQ4IDI0OSAuLi4gMjU1CisgKgorICovIAorc3RhdGljIHZvaWQKK3l1djQwMHJhd190b195dXY0MDBwKHN0cnVjdCBvdjUxMV9mcmFtZSAqZnJhbWUsCisJCSAgICAgdW5zaWduZWQgY2hhciAqcEluMCwgdW5zaWduZWQgY2hhciAqcE91dDApCit7CisJaW50IHgsIHk7CisJdW5zaWduZWQgY2hhciAqcEluLCAqcE91dCwgKnBPdXRMaW5lOworCisJLyogQ29weSBZICovCisJcEluID0gcEluMDsKKwlwT3V0TGluZSA9IHBPdXQwOworCWZvciAoeSA9IDA7IHkgPCBmcmFtZS0+cmF3aGVpZ2h0IC0gMTsgeSArPSA4KSB7CisJCXBPdXQgPSBwT3V0TGluZTsKKwkJZm9yICh4ID0gMDsgeCA8IGZyYW1lLT5yYXd3aWR0aCAtIDE7IHggKz0gOCkgeworCQkJbWFrZV84eDgocEluLCBwT3V0LCBmcmFtZS0+cmF3d2lkdGgpOworCQkJcEluICs9IDY0OworCQkJcE91dCArPSA4OworCQl9CisJCXBPdXRMaW5lICs9IDggKiBmcmFtZS0+cmF3d2lkdGg7CisJfQorfQorCisvKgorICogRm9yIFlVViA0OjI6MCBpbWFnZXMsIHRoZSBkYXRhIHNob3cgdXAgaW4gMzg0IGJ5dGUgc2VnbWVudHMuCisgKiBUaGUgZmlyc3QgNjQgYnl0ZXMgb2YgZWFjaCBzZWdtZW50IGFyZSBVLCB0aGUgbmV4dCA2NCBhcmUgVi4gIFRoZSBVIGFuZAorICogViBhcmUgYXJyYW5nZWQgYXMgZm9sbG93czoKKyAqCisgKiAgICAgIDAgIDEgLi4uICA3CisgKiAgICAgIDggIDkgLi4uIDE1CisgKiAgICAgICAgICAgLi4uICAgCisgKiAgICAgNTYgNTcgLi4uIDYzCisgKgorICogVSBhbmQgViBhcmUgc2hpcHBlZCBhdCBoYWxmIHJlc29sdXRpb24gKDEgVSxWIHNhbXBsZSAtPiBvbmUgMngyIGJsb2NrKS4KKyAqCisgKiBUaGUgbmV4dCAyNTYgYnl0ZXMgYXJlIGZ1bGwgcmVzb2x1dGlvbiBZIGRhdGEgYW5kIHJlcHJlc2VudCA0IHNxdWFyZXMKKyAqIG9mIDh4OCBwaXhlbHMgYXMgZm9sbG93czoKKyAqCisgKiAgICAgIDAgIDEgLi4uICA3ICAgIDY0ICA2NSAuLi4gIDcxICAgLi4uICAxOTIgMTkzIC4uLiAxOTkKKyAqICAgICAgOCAgOSAuLi4gMTUgICAgNzIgIDczIC4uLiAgNzkgICAgICAgIDIwMCAyMDEgLi4uIDIwNworICogICAgICAgICAgIC4uLiAgICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAuLi4KKyAqICAgICA1NiA1NyAuLi4gNjMgICAxMjAgMTIxIC4uLiAxMjcgICAuLi4gIDI0OCAyNDkgLi4uIDI1NQorICoKKyAqIE5vdGUgdGhhdCB0aGUgVSBhbmQgViBkYXRhIGluIG9uZSBzZWdtZW50IHJlcHJlc2VudCBhIDE2IHggMTYgcGl4ZWwKKyAqIGFyZWEsIGJ1dCB0aGUgWSBkYXRhIHJlcHJlc2VudCBhIDMyIHggOCBwaXhlbCBhcmVhLiBJZiB0aGUgd2lkdGggaXMgbm90IGFuCisgKiBldmVuIG11bHRpcGxlIG9mIDMyLCB0aGUgZXh0cmEgOHg4IGJsb2NrcyB3aXRoaW4gYSAzMng4IGJsb2NrIGJlbG9uZyB0byB0aGUKKyAqIG5leHQgaG9yaXpvbnRhbCBzdHJpcGUuCisgKgorICogSWYgZHVtcHBpeCBtb2R1bGUgcGFyYW0gaXMgc2V0LCBfcGFyc2VfZGF0YSBqdXN0IGR1bXBzIHRoZSBpbmNvbWluZyBzZWdtZW50cywKKyAqIHZlcmJhdGltLCBpbiBvcmRlciwgaW50byB0aGUgZnJhbWUuIFdoZW4gdXNlZCB3aXRoIHZpZGNhdCAtZiBwcG0gLXMgNjQweDQ4MAorICogdGhpcyBwdXRzIHRoZSBkYXRhIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQgYW5kIGNhbiBiZSBhbmFseXplZCB3aXRoIHRoZQorICogcGFyc2VwcG0uYyB1dGlsaXR5IEkgd3JvdGUuICBUaGF0J3MgYSBtdWNoIGZhc3RlciB3YXkgZm9yIGZpZ3VyaW5nIG91dCBob3cKKyAqIHRoZXNlIGRhdGEgYXJlIHNjcmFtYmxlZC4KKyAqLworCisvKiBDb252ZXJ0cyBmcm9tIHJhdywgdW5jb21wcmVzc2VkIHNlZ21lbnRzIGF0IHBJbjAgdG8gYSBZVVY0MjBQIGZyYW1lIGF0IHBPdXQwLgorICoKKyAqIEZJWE1FOiBDdXJyZW50bHkgb25seSBoYW5kbGVzIHdpZHRoIGFuZCBoZWlnaHQgdGhhdCBhcmUgbXVsdGlwbGVzIG9mIDE2CisgKi8KK3N0YXRpYyB2b2lkCit5dXY0MjByYXdfdG9feXV2NDIwcChzdHJ1Y3Qgb3Y1MTFfZnJhbWUgKmZyYW1lLAorCQkgICAgIHVuc2lnbmVkIGNoYXIgKnBJbjAsIHVuc2lnbmVkIGNoYXIgKnBPdXQwKQoreworCWludCBrLCB4LCB5OworCXVuc2lnbmVkIGNoYXIgKnBJbiwgKnBPdXQsICpwT3V0TGluZTsKKwljb25zdCB1bnNpZ25lZCBpbnQgYSA9IGZyYW1lLT5yYXd3aWR0aCAqIGZyYW1lLT5yYXdoZWlnaHQ7CisJY29uc3QgdW5zaWduZWQgaW50IHcgPSBmcmFtZS0+cmF3d2lkdGggLyAyOworCisJLyogQ29weSBVIGFuZCBWICovCisJcEluID0gcEluMDsKKwlwT3V0TGluZSA9IHBPdXQwICsgYTsKKwlmb3IgKHkgPSAwOyB5IDwgZnJhbWUtPnJhd2hlaWdodCAtIDE7IHkgKz0gMTYpIHsKKwkJcE91dCA9IHBPdXRMaW5lOworCQlmb3IgKHggPSAwOyB4IDwgZnJhbWUtPnJhd3dpZHRoIC0gMTsgeCArPSAxNikgeworCQkJbWFrZV84eDgocEluLCBwT3V0LCB3KTsKKwkJCW1ha2VfOHg4KHBJbiArIDY0LCBwT3V0ICsgYS80LCB3KTsKKwkJCXBJbiArPSAzODQ7CisJCQlwT3V0ICs9IDg7CisJCX0KKwkJcE91dExpbmUgKz0gOCAqIHc7CisJfQorCisJLyogQ29weSBZICovCisJcEluID0gcEluMCArIDEyODsKKwlwT3V0TGluZSA9IHBPdXQwOworCWsgPSAwOworCWZvciAoeSA9IDA7IHkgPCBmcmFtZS0+cmF3aGVpZ2h0IC0gMTsgeSArPSA4KSB7CisJCXBPdXQgPSBwT3V0TGluZTsKKwkJZm9yICh4ID0gMDsgeCA8IGZyYW1lLT5yYXd3aWR0aCAtIDE7IHggKz0gOCkgeworCQkJbWFrZV84eDgocEluLCBwT3V0LCBmcmFtZS0+cmF3d2lkdGgpOworCQkJcEluICs9IDY0OworCQkJcE91dCArPSA4OworCQkJaWYgKCgrK2spID4gMykgeworCQkJCWsgPSAwOworCQkJCXBJbiArPSAxMjg7CisJCQl9CisJCX0KKwkJcE91dExpbmUgKz0gOCAqIGZyYW1lLT5yYXd3aWR0aDsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRGVjb21wcmVzc2lvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBDaG9vc2VzIGEgZGVjb21wcmVzc2lvbiBtb2R1bGUsIGxvY2tzIGl0LCBhbmQgc2V0cyBvdi0+ZGVjb21wX29wcworICogYWNjb3JkaW5nbHkuIFJldHVybnMgLUVOWElPIGlmIGRlY29tcHJlc3NvciBpcyBub3QgYXZhaWxhYmxlLCBvdGhlcndpc2UKKyAqIHJldHVybnMgMCBpZiBubyBvdGhlciBlcnJvci4KKyAqLworc3RhdGljIGludAorcmVxdWVzdF9kZWNvbXByZXNzb3Ioc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaWYgKCFvdikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAob3YtPmRlY29tcF9vcHMpIHsKKwkJZXJyKCJFUlJPUjogRGVjb21wcmVzc29yIGFscmVhZHkgcmVxdWVzdGVkISIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsb2NrX2tlcm5lbCgpOworCisJLyogVHJ5IHRvIGdldCBNTVgsIGFuZCBmYWxsIGJhY2sgb24gbm8tTU1YIGlmIG5lY2Vzc2FyeSAqLworCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxMSkgeworCQlpZiAob3Y1MTFfbW14X2RlY29tcF9vcHMpIHsKKwkJCVBERUJVRygzLCAiVXNpbmcgT1Y1MTEgTU1YIGRlY29tcHJlc3NvciIpOworCQkJb3YtPmRlY29tcF9vcHMgPSBvdjUxMV9tbXhfZGVjb21wX29wczsKKwkJfSBlbHNlIGlmIChvdjUxMV9kZWNvbXBfb3BzKSB7CisJCQlQREVCVUcoMywgIlVzaW5nIE9WNTExIGRlY29tcHJlc3NvciIpOworCQkJb3YtPmRlY29tcF9vcHMgPSBvdjUxMV9kZWNvbXBfb3BzOworCQl9IGVsc2UgeworCQkJZXJyKCJObyBkZWNvbXByZXNzb3IgYXZhaWxhYmxlIik7CisJCX0KKwl9IGVsc2UgaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KSB7CisJCWlmIChvdjUxOF9tbXhfZGVjb21wX29wcykgeworCQkJUERFQlVHKDMsICJVc2luZyBPVjUxOCBNTVggZGVjb21wcmVzc29yIik7CisJCQlvdi0+ZGVjb21wX29wcyA9IG92NTE4X21teF9kZWNvbXBfb3BzOworCQl9IGVsc2UgaWYgKG92NTE4X2RlY29tcF9vcHMpIHsKKwkJCVBERUJVRygzLCAiVXNpbmcgT1Y1MTggZGVjb21wcmVzc29yIik7CisJCQlvdi0+ZGVjb21wX29wcyA9IG92NTE4X2RlY29tcF9vcHM7CisJCX0gZWxzZSB7CisJCQllcnIoIk5vIGRlY29tcHJlc3NvciBhdmFpbGFibGUiKTsKKwkJfQorCX0gZWxzZSB7CisJCWVycigiVW5rbm93biBicmlkZ2UiKTsKKwl9CisKKwlpZiAoIW92LT5kZWNvbXBfb3BzKQorCQlnb3RvIG5vc3lzOworCisJaWYgKCFvdi0+ZGVjb21wX29wcy0+b3duZXIpIHsKKwkJb3YtPmRlY29tcF9vcHMgPSBOVUxMOworCQlnb3RvIG5vc3lzOworCX0KKwkKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KG92LT5kZWNvbXBfb3BzLT5vd25lcikpCisJCWdvdG8gbm9zeXM7CisKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIDA7CisKKyBub3N5czoKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKKy8qIFVubG9ja3MgZGVjb21wcmVzc2lvbiBtb2R1bGUgYW5kIG51bGxzIG92LT5kZWNvbXBfb3BzLiBTYWZlIHRvIGNhbGwgZXZlbgorICogaWYgb3YtPmRlY29tcF9vcHMgaXMgTlVMTC4KKyAqLworc3RhdGljIHZvaWQKK3JlbGVhc2VfZGVjb21wcmVzc29yKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCWludCByZWxlYXNlZCA9IDA7CS8qIERpZCB3ZSBhY3R1YWxseSBkbyBhbnl0aGluZz8gKi8KKworCWlmICghb3YpCisJCXJldHVybjsKKworCWxvY2tfa2VybmVsKCk7CisKKwlpZiAob3YtPmRlY29tcF9vcHMpIHsKKwkJbW9kdWxlX3B1dChvdi0+ZGVjb21wX29wcy0+b3duZXIpOworCQlyZWxlYXNlZCA9IDE7CisJfQorCisJb3YtPmRlY29tcF9vcHMgPSBOVUxMOworCisJdW5sb2NrX2tlcm5lbCgpOworCisJaWYgKHJlbGVhc2VkKQorCQlQREVCVUcoMywgIkRlY29tcHJlc3NvciByZWxlYXNlZCIpOworfQorCitzdGF0aWMgdm9pZAorZGVjb21wcmVzcyhzdHJ1Y3QgdXNiX292NTExICpvdiwgc3RydWN0IG92NTExX2ZyYW1lICpmcmFtZSwKKwkgICB1bnNpZ25lZCBjaGFyICpwSW4wLCB1bnNpZ25lZCBjaGFyICpwT3V0MCkKK3sKKwlpZiAoIW92LT5kZWNvbXBfb3BzKQorCQlpZiAocmVxdWVzdF9kZWNvbXByZXNzb3Iob3YpKQorCQkJcmV0dXJuOworCisJUERFQlVHKDQsICJEZWNvbXByZXNzaW5nICVkIGJ5dGVzIiwgZnJhbWUtPmJ5dGVzX3JlY3ZkKTsKKworCWlmIChmcmFtZS0+Zm9ybWF0ID09IFZJREVPX1BBTEVUVEVfR1JFWQorCSAgICAmJiBvdi0+ZGVjb21wX29wcy0+ZGVjb21wXzQwMCkgeworCQlpbnQgcmV0ID0gb3YtPmRlY29tcF9vcHMtPmRlY29tcF80MDAoCisJCQlwSW4wLAorCQkJcE91dDAsCisJCQlmcmFtZS0+Y29tcGJ1ZiwKKwkJCWZyYW1lLT5yYXd3aWR0aCwKKwkJCWZyYW1lLT5yYXdoZWlnaHQsCisJCQlmcmFtZS0+Ynl0ZXNfcmVjdmQpOworCQlQREVCVUcoNCwgIkRFQlVHOiBkZWNvbXBfNDAwIHJldHVybmVkICVkIiwgcmV0KTsKKwl9IGVsc2UgaWYgKGZyYW1lLT5mb3JtYXQgIT0gVklERU9fUEFMRVRURV9HUkVZCisJCSAgICYmIG92LT5kZWNvbXBfb3BzLT5kZWNvbXBfNDIwKSB7CisJCWludCByZXQgPSBvdi0+ZGVjb21wX29wcy0+ZGVjb21wXzQyMCgKKwkJCXBJbjAsCisJCQlwT3V0MCwKKwkJCWZyYW1lLT5jb21wYnVmLAorCQkJZnJhbWUtPnJhd3dpZHRoLAorCQkJZnJhbWUtPnJhd2hlaWdodCwKKwkJCWZyYW1lLT5ieXRlc19yZWN2ZCk7CisJCVBERUJVRyg0LCAiREVCVUc6IGRlY29tcF80MjAgcmV0dXJuZWQgJWQiLCByZXQpOworCX0gZWxzZSB7CisJCWVycigiRGVjb21wcmVzc29yIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmb3JtYXQiKTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRm9ybWF0IGNvbnZlcnNpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRnVzZXMgZXZlbiBhbmQgb2RkIGZpZWxkcyB0b2dldGhlciwgYW5kIGRvdWJsZXMgd2lkdGguCisgKiBJTlBVVDogYW4gb2RkIGZpZWxkIGZvbGxvd2VkIGJ5IGFuIGV2ZW4gZmllbGQgYXQgcEluMCwgaW4gWVVWIHBsYW5hciBmb3JtYXQKKyAqIE9VVFBVVDogYSBub3JtYWwgWVVWIHBsYW5hciBpbWFnZSwgd2l0aCBjb3JyZWN0IGFzcGVjdCByYXRpbworICovCitzdGF0aWMgdm9pZAorZGVpbnRlcmxhY2Uoc3RydWN0IG92NTExX2ZyYW1lICpmcmFtZSwgaW50IHJhd2Zvcm1hdCwKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnBJbjAsIHVuc2lnbmVkIGNoYXIgKnBPdXQwKQoreworCWNvbnN0IGludCBmaWVsZGhlaWdodCA9IGZyYW1lLT5yYXdoZWlnaHQgLyAyOworCWNvbnN0IGludCBmaWVsZHBpeCA9IGZpZWxkaGVpZ2h0ICogZnJhbWUtPnJhd3dpZHRoOworCWNvbnN0IGludCB3ID0gZnJhbWUtPndpZHRoOworCWludCB4LCB5OworCXVuc2lnbmVkIGNoYXIgKnBJbkV2ZW4sICpwSW5PZGQsICpwT3V0OworCisJUERFQlVHKDUsICJmaWVsZGhlaWdodD0lZCIsIGZpZWxkaGVpZ2h0KTsKKworCWlmIChmcmFtZS0+cmF3aGVpZ2h0ICE9IGZyYW1lLT5oZWlnaHQpIHsKKwkJZXJyKCJpbnZhbGlkIGhlaWdodCIpOworCQlyZXR1cm47CisJfQorCisJaWYgKChmcmFtZS0+cmF3d2lkdGggKiAyKSAhPSBmcmFtZS0+d2lkdGgpIHsKKwkJZXJyKCJpbnZhbGlkIHdpZHRoIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBZICovCisJcEluT2RkID0gcEluMDsKKwlwSW5FdmVuID0gcEluT2RkICsgZmllbGRwaXg7CisJcE91dCA9IHBPdXQwOworCWZvciAoeSA9IDA7IHkgPCBmaWVsZGhlaWdodDsgeSsrKSB7CisJCWZvciAoeCA9IDA7IHggPCBmcmFtZS0+cmF3d2lkdGg7IHgrKykgeworCQkJKnBPdXQgPSAqcEluRXZlbjsKKwkJCSoocE91dCsxKSA9ICpwSW5FdmVuKys7CisJCQkqKHBPdXQrdykgPSAqcEluT2RkOworCQkJKihwT3V0K3crMSkgPSAqcEluT2RkKys7CisJCQlwT3V0ICs9IDI7CisJCX0KKwkJcE91dCArPSB3OworCX0KKworCWlmIChyYXdmb3JtYXQgPT0gUkFXRk1UX1lVVjQyMCkgeworCS8qIFUgKi8KKwkJcEluT2RkID0gcEluMCArIGZpZWxkcGl4ICogMjsKKwkJcEluRXZlbiA9IHBJbk9kZCArIGZpZWxkcGl4IC8gNDsKKwkJZm9yICh5ID0gMDsgeSA8IGZpZWxkaGVpZ2h0IC8gMjsgeSsrKSB7CisJCQlmb3IgKHggPSAwOyB4IDwgZnJhbWUtPnJhd3dpZHRoIC8gMjsgeCsrKSB7CisJCQkJKnBPdXQgPSAqcEluRXZlbjsKKwkJCQkqKHBPdXQrMSkgPSAqcEluRXZlbisrOworCQkJCSoocE91dCt3LzIpID0gKnBJbk9kZDsKKwkJCQkqKHBPdXQrdy8yKzEpID0gKnBJbk9kZCsrOworCQkJCXBPdXQgKz0gMjsKKwkJCX0KKwkJCXBPdXQgKz0gdy8yOworCQl9CisJLyogViAqLworCQlwSW5PZGQgPSBwSW4wICsgZmllbGRwaXggKiAyICsgZmllbGRwaXggLyAyOworCQlwSW5FdmVuID0gcEluT2RkICsgZmllbGRwaXggLyA0OworCQlmb3IgKHkgPSAwOyB5IDwgZmllbGRoZWlnaHQgLyAyOyB5KyspIHsKKwkJCWZvciAoeCA9IDA7IHggPCBmcmFtZS0+cmF3d2lkdGggLyAyOyB4KyspIHsKKwkJCQkqcE91dCA9ICpwSW5FdmVuOworCQkJCSoocE91dCsxKSA9ICpwSW5FdmVuKys7CisJCQkJKihwT3V0K3cvMikgPSAqcEluT2RkOworCQkJCSoocE91dCt3LzIrMSkgPSAqcEluT2RkKys7CisJCQkJcE91dCArPSAyOworCQkJfQorCQkJcE91dCArPSB3LzI7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitvdjUxeF9wb3N0cHJvY2Vzc19ncmV5KHN0cnVjdCB1c2Jfb3Y1MTEgKm92LCBzdHJ1Y3Qgb3Y1MTFfZnJhbWUgKmZyYW1lKQoreworCQkvKiBEZWludGVybGFjZSBmcmFtZSwgaWYgbmVjZXNzYXJ5ICovCisJCWlmIChvdi0+c2Vuc29yID09IFNFTl9TQUE3MTExQSAmJiBmcmFtZS0+cmF3aGVpZ2h0ID49IDQ4MCkgeworCQkJaWYgKGZyYW1lLT5jb21wcmVzc2VkKQorCQkJCWRlY29tcHJlc3Mob3YsIGZyYW1lLCBmcmFtZS0+cmF3ZGF0YSwKKwkJCQkJCSBmcmFtZS0+dGVtcGRhdGEpOworCQkJZWxzZQorCQkJCXl1djQwMHJhd190b195dXY0MDBwKGZyYW1lLCBmcmFtZS0+cmF3ZGF0YSwKKwkJCQkJCSAgICAgZnJhbWUtPnRlbXBkYXRhKTsKKworCQkJZGVpbnRlcmxhY2UoZnJhbWUsIFJBV0ZNVF9ZVVY0MDAsIGZyYW1lLT50ZW1wZGF0YSwKKwkJCSAgICAgICAgICAgIGZyYW1lLT5kYXRhKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChmcmFtZS0+Y29tcHJlc3NlZCkKKwkJCQlkZWNvbXByZXNzKG92LCBmcmFtZSwgZnJhbWUtPnJhd2RhdGEsCisJCQkJCQkgZnJhbWUtPmRhdGEpOworCQkJZWxzZQorCQkJCXl1djQwMHJhd190b195dXY0MDBwKGZyYW1lLCBmcmFtZS0+cmF3ZGF0YSwKKwkJCQkJCSAgICAgZnJhbWUtPmRhdGEpOworCQl9Cit9CisKKy8qIFByb2Nlc3MgcmF3IFlVVjQyMCBkYXRhIGludG8gc3RhbmRhcmQgWVVWNDIwUCAqLworc3RhdGljIHZvaWQKK292NTF4X3Bvc3Rwcm9jZXNzX3l1djQyMChzdHJ1Y3QgdXNiX292NTExICpvdiwgc3RydWN0IG92NTExX2ZyYW1lICpmcmFtZSkKK3sKKwkvKiBEZWludGVybGFjZSBmcmFtZSwgaWYgbmVjZXNzYXJ5ICovCisJaWYgKG92LT5zZW5zb3IgPT0gU0VOX1NBQTcxMTFBICYmIGZyYW1lLT5yYXdoZWlnaHQgPj0gNDgwKSB7CisJCWlmIChmcmFtZS0+Y29tcHJlc3NlZCkKKwkJCWRlY29tcHJlc3Mob3YsIGZyYW1lLCBmcmFtZS0+cmF3ZGF0YSwgZnJhbWUtPnRlbXBkYXRhKTsKKwkJZWxzZQorCQkJeXV2NDIwcmF3X3RvX3l1djQyMHAoZnJhbWUsIGZyYW1lLT5yYXdkYXRhLAorCQkJCQkgICAgIGZyYW1lLT50ZW1wZGF0YSk7CisKKwkJZGVpbnRlcmxhY2UoZnJhbWUsIFJBV0ZNVF9ZVVY0MjAsIGZyYW1lLT50ZW1wZGF0YSwKKwkJICAgICAgICAgICAgZnJhbWUtPmRhdGEpOworCX0gZWxzZSB7CisJCWlmIChmcmFtZS0+Y29tcHJlc3NlZCkKKwkJCWRlY29tcHJlc3Mob3YsIGZyYW1lLCBmcmFtZS0+cmF3ZGF0YSwgZnJhbWUtPmRhdGEpOworCQllbHNlCisJCQl5dXY0MjByYXdfdG9feXV2NDIwcChmcmFtZSwgZnJhbWUtPnJhd2RhdGEsCisJCQkJCSAgICAgZnJhbWUtPmRhdGEpOworCX0KK30KKworLyogUG9zdC1wcm9jZXNzZXMgdGhlIHNwZWNpZmllZCBmcmFtZS4gVGhpcyBjb25zaXN0cyBvZjoKKyAqIAkxLiBEZWNvbXByZXNzIGZyYW1lLCBpZiBuZWNlc3NhcnkKKyAqCTIuIERlaW50ZXJsYWNlIGZyYW1lIGFuZCBzY2FsZSB0byBwcm9wZXIgc2l6ZSwgaWYgbmVjZXNzYXJ5CisgKiAJMy4gQ29udmVydCBmcm9tIFlVViBwbGFuYXIgdG8gZGVzdGluYXRpb24gZm9ybWF0LCBpZiBuZWNlc3NhcnkKKyAqIAk0LiBGaXggdGhlIFJHQiBvZmZzZXQsIGlmIG5lY2Vzc2FyeQorICovCitzdGF0aWMgdm9pZAorb3Y1MXhfcG9zdHByb2Nlc3Moc3RydWN0IHVzYl9vdjUxMSAqb3YsIHN0cnVjdCBvdjUxMV9mcmFtZSAqZnJhbWUpCit7CisJaWYgKGR1bXBwaXgpIHsKKwkJbWVtc2V0KGZyYW1lLT5kYXRhLCAwLAorCQkJTUFYX0RBVEFfU0laRShvdi0+bWF4d2lkdGgsIG92LT5tYXhoZWlnaHQpKTsKKwkJUERFQlVHKDQsICJEdW1waW5nICVkIGJ5dGVzIiwgZnJhbWUtPmJ5dGVzX3JlY3ZkKTsKKwkJbWVtY3B5KGZyYW1lLT5kYXRhLCBmcmFtZS0+cmF3ZGF0YSwgZnJhbWUtPmJ5dGVzX3JlY3ZkKTsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGZyYW1lLT5mb3JtYXQpIHsKKwkJY2FzZSBWSURFT19QQUxFVFRFX0dSRVk6CisJCQlvdjUxeF9wb3N0cHJvY2Vzc19ncmV5KG92LCBmcmFtZSk7CisJCQlicmVhazsKKwkJY2FzZSBWSURFT19QQUxFVFRFX1lVVjQyMDoKKwkJY2FzZSBWSURFT19QQUxFVFRFX1lVVjQyMFA6CisJCQlvdjUxeF9wb3N0cHJvY2Vzc195dXY0MjAob3YsIGZyYW1lKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZXJyKCJDYW5ub3QgY29udmVydCBkYXRhIHRvICVzIiwKKwkJCSAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBmcmFtZS0+Zm9ybWF0KSk7CisJCX0KKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogT1Y1MXggZGF0YSB0cmFuc2ZlciwgSVJRIGhhbmRsZXIKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGlubGluZSB2b2lkCitvdjUxMV9tb3ZlX2RhdGEoc3RydWN0IHVzYl9vdjUxMSAqb3YsIHVuc2lnbmVkIGNoYXIgKmluLCBpbnQgbikKK3sKKwlpbnQgbnVtLCBvZmZzZXQ7CisJaW50IHBudW0gPSBpbltvdi0+cGFja2V0X3NpemUgLSAxXTsJCS8qIEdldCBwYWNrZXQgbnVtYmVyICovCisJaW50IG1heF9yYXcgPSBNQVhfUkFXX0RBVEFfU0laRShvdi0+bWF4d2lkdGgsIG92LT5tYXhoZWlnaHQpOworCXN0cnVjdCBvdjUxMV9mcmFtZSAqZnJhbWUgPSAmb3YtPmZyYW1lW292LT5jdXJmcmFtZV07CisJc3RydWN0IHRpbWV2YWwgKnRzOworCisJLyogU09GL0VPRiBwYWNrZXRzIGhhdmUgMXN0IHRvIDh0aCBieXRlcyB6ZXJvZWQgYW5kIHRoZSA5dGgKKwkgKiBieXRlIG5vbi16ZXJvLiBUaGUgRU9GIHBhY2tldCBoYXMgaW1hZ2Ugd2lkdGgvaGVpZ2h0IGluIHRoZQorCSAqIDEwdGggYW5kIDExdGggYnl0ZXMuIFRoZSA5dGggYnl0ZSBpcyBnaXZlbiBhcyBmb2xsb3dzOgorCSAqCisJICogYml0IDc6IEVPRgorCSAqICAgICA2OiBjb21wcmVzc2lvbiBlbmFibGVkCisJICogICAgIDU6IDQyMi80MjAvNDAwIG1vZGVzCisJICogICAgIDQ6IDQyMi80MjAvNDAwIG1vZGVzCisJICogICAgIDM6IDEKKwkgKiAgICAgMjogc25hcHNob3QgYnV0dG9uIG9uCisJICogICAgIDE6IHNuYXBzaG90IGZyYW1lCisJICogICAgIDA6IGV2ZW4vb2RkIGZpZWxkCisJICovCisKKwlpZiAocHJpbnRwaCkgeworCQlpbmZvKCJwaCglM2QpOiAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCIsCisJCSAgICAgcG51bSwgaW5bMF0sIGluWzFdLCBpblsyXSwgaW5bM10sIGluWzRdLCBpbls1XSwgaW5bNl0sCisJCSAgICAgaW5bN10sIGluWzhdLCBpbls5XSwgaW5bMTBdLCBpblsxMV0pOworCX0KKworCS8qIENoZWNrIGZvciBTT0YvRU9GIHBhY2tldCAqLworCWlmICgoaW5bMF0gfCBpblsxXSB8IGluWzJdIHwgaW5bM10gfCBpbls0XSB8IGluWzVdIHwgaW5bNl0gfCBpbls3XSkgfHwKKwkgICAgKH5pbls4XSAmIDB4MDgpKQorCQlnb3RvIGNoZWNrX21pZGRsZTsKKworCS8qIEZyYW1lIGVuZCAqLworCWlmIChpbls4XSAmIDB4ODApIHsKKwkJdHMgPSAoc3RydWN0IHRpbWV2YWwgKikoZnJhbWUtPmRhdGEKKwkJICAgICAgKyBNQVhfRlJBTUVfU0laRShvdi0+bWF4d2lkdGgsIG92LT5tYXhoZWlnaHQpKTsKKwkJZG9fZ2V0dGltZW9mZGF5KHRzKTsKKworCQkvKiBHZXQgdGhlIGFjdHVhbCBmcmFtZSBzaXplIGZyb20gdGhlIEVPRiBoZWFkZXIgKi8KKwkJZnJhbWUtPnJhd3dpZHRoID0gKChpbnQpKGluWzldKSArIDEpICogODsKKwkJZnJhbWUtPnJhd2hlaWdodCA9ICgoaW50KShpblsxMF0pICsgMSkgKiA4OworCisgCQlQREVCVUcoNCwgIkZyYW1lIGVuZCwgZnJhbWU9JWQsIHBudW09JWQsIHc9JWQsIGg9JWQsIHJlY3ZkPSVkIiwKKwkJCW92LT5jdXJmcmFtZSwgcG51bSwgZnJhbWUtPnJhd3dpZHRoLCBmcmFtZS0+cmF3aGVpZ2h0LAorCQkJZnJhbWUtPmJ5dGVzX3JlY3ZkKTsKKworCQkvKiBWYWxpZGF0ZSB0aGUgaGVhZGVyIGRhdGEgKi8KKwkJUkVTVFJJQ1RfVE9fUkFOR0UoZnJhbWUtPnJhd3dpZHRoLCBvdi0+bWlud2lkdGgsIG92LT5tYXh3aWR0aCk7CisJCVJFU1RSSUNUX1RPX1JBTkdFKGZyYW1lLT5yYXdoZWlnaHQsIG92LT5taW5oZWlnaHQsCisJCQkJICBvdi0+bWF4aGVpZ2h0KTsKKworCQkvKiBEb24ndCBhbGxvdyBieXRlIGNvdW50IHRvIGV4Y2VlZCBidWZmZXIgc2l6ZSAqLworCQlSRVNUUklDVF9UT19SQU5HRShmcmFtZS0+Ynl0ZXNfcmVjdmQsIDgsIG1heF9yYXcpOworCisJCWlmIChmcmFtZS0+c2NhbnN0YXRlID09IFNUQVRFX0xJTkVTKSB7CisJICAgIAkJaW50IG5leHRmOworCisJCQlmcmFtZS0+Z3JhYnN0YXRlID0gRlJBTUVfRE9ORTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZnJhbWUtPndxKTsKKworCQkJLyogSWYgbmV4dCBmcmFtZSBpcyByZWFkeSBvciBncmFiYmluZywKKwkJCSAqIHBvaW50IHRvIGl0ICovCisJCQluZXh0ZiA9IChvdi0+Y3VyZnJhbWUgKyAxKSAlIE9WNTExX05VTUZSQU1FUzsKKwkJCWlmIChvdi0+ZnJhbWVbbmV4dGZdLmdyYWJzdGF0ZSA9PSBGUkFNRV9SRUFEWQorCQkJICAgIHx8IG92LT5mcmFtZVtuZXh0Zl0uZ3JhYnN0YXRlID09IEZSQU1FX0dSQUJCSU5HKSB7CisJCQkJb3YtPmN1cmZyYW1lID0gbmV4dGY7CisJCQkJb3YtPmZyYW1lW25leHRmXS5zY2Fuc3RhdGUgPSBTVEFURV9TQ0FOTklORzsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGZyYW1lLT5ncmFic3RhdGUgPT0gRlJBTUVfRE9ORSkgeworCQkJCQlQREVCVUcoNCwgIioqIEZyYW1lIGRvbmUgKioiKTsKKwkJCQl9IGVsc2UgeworCQkJCQlQREVCVUcoNCwgIkZyYW1lIG5vdCByZWFkeT8gc3RhdGUgPSAlZCIsCisJCQkJCQlvdi0+ZnJhbWVbbmV4dGZdLmdyYWJzdGF0ZSk7CisJCQkJfQorCisJCQkJb3YtPmN1cmZyYW1lID0gLTE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlQREVCVUcoNSwgIkZyYW1lIGRvbmUsIGJ1dCBub3Qgc2Nhbm5pbmciKTsKKwkJfQorCQkvKiBJbWFnZSBjb3JydXB0aW9uIGNhdXNlZCBieSBtaXNwbGFjZWQgZnJhbWUtPnNlZ21lbnQgPSAwCisJCSAqIGZpeGVkIGJ5IGNhcmxvc2ZAY29uZWN0aXZhLmNvbS5icgorCQkgKi8KKwl9IGVsc2UgeworCQkvKiBGcmFtZSBzdGFydCAqLworCQlQREVCVUcoNCwgIkZyYW1lIHN0YXJ0LCBmcmFtZW51bSA9ICVkIiwgb3YtPmN1cmZyYW1lKTsKKworCQkvKiBDaGVjayB0byBzZWUgaWYgaXQncyBhIHNuYXBzaG90IGZyYW1lICovCisJCS8qIEZJWE1FPz8gU2hvdWxkIHRoZSBzbmFwc2hvdCByZXNldCBnbyBoZXJlPyBQZXJmb3JtYW5jZT8gKi8KKwkJaWYgKGluWzhdICYgMHgwMikgeworCQkJZnJhbWUtPnNuYXBzaG90ID0gMTsKKwkJCVBERUJVRygzLCAic25hcHNob3QgZGV0ZWN0ZWQiKTsKKwkJfQorCisJCWZyYW1lLT5zY2Fuc3RhdGUgPSBTVEFURV9MSU5FUzsKKwkJZnJhbWUtPmJ5dGVzX3JlY3ZkID0gMDsKKwkJZnJhbWUtPmNvbXByZXNzZWQgPSBpbls4XSAmIDB4NDA7CisJfQorCitjaGVja19taWRkbGU6CisJLyogQXJlIHdlIGluIGEgZnJhbWU/ICovCisJaWYgKGZyYW1lLT5zY2Fuc3RhdGUgIT0gU1RBVEVfTElORVMpIHsKKwkJUERFQlVHKDUsICJOb3QgaW4gYSBmcmFtZTsgcGFja2V0IHNraXBwZWQiKTsKKwkJcmV0dXJuOworCX0KKworCS8qIElmIGZyYW1lIHN0YXJ0LCBza2lwIGhlYWRlciAqLworCWlmIChmcmFtZS0+Ynl0ZXNfcmVjdmQgPT0gMCkKKwkJb2Zmc2V0ID0gOTsKKwllbHNlCisJCW9mZnNldCA9IDA7CisKKwludW0gPSBuIC0gb2Zmc2V0IC0gMTsKKworCS8qIER1bXAgYWxsIGRhdGEgZXhhY3RseSBhcyByZWNlaXZlZCAqLworCWlmIChkdW1wcGl4ID09IDIpIHsKKwkJZnJhbWUtPmJ5dGVzX3JlY3ZkICs9IG4gLSAxOworCQlpZiAoZnJhbWUtPmJ5dGVzX3JlY3ZkIDw9IG1heF9yYXcpCisJCQltZW1jcHkoZnJhbWUtPnJhd2RhdGEgKyBmcmFtZS0+Ynl0ZXNfcmVjdmQgLSAobiAtIDEpLAorCQkJCWluLCBuIC0gMSk7CisJCWVsc2UKKwkJCVBERUJVRygzLCAiUmF3IGRhdGEgYnVmZmVyIG92ZXJydW4hISAoJWQpIiwKKwkJCQlmcmFtZS0+Ynl0ZXNfcmVjdmQgLSBtYXhfcmF3KTsKKwl9IGVsc2UgaWYgKCFmcmFtZS0+Y29tcHJlc3NlZCAmJiAhcmVtb3ZlX3plcm9zKSB7CisJCWZyYW1lLT5ieXRlc19yZWN2ZCArPSBudW07CisJCWlmIChmcmFtZS0+Ynl0ZXNfcmVjdmQgPD0gbWF4X3JhdykKKwkJCW1lbWNweShmcmFtZS0+cmF3ZGF0YSArIGZyYW1lLT5ieXRlc19yZWN2ZCAtIG51bSwKKwkJCQlpbiArIG9mZnNldCwgbnVtKTsKKwkJZWxzZQorCQkJUERFQlVHKDMsICJSYXcgZGF0YSBidWZmZXIgb3ZlcnJ1biEhICglZCkiLAorCQkJCWZyYW1lLT5ieXRlc19yZWN2ZCAtIG1heF9yYXcpOworCX0gZWxzZSB7IC8qIFJlbW92ZSBhbGwtemVybyBGSUZPIGxpbmVzIChhbGlnbmVkIDMyLWJ5dGUgYmxvY2tzKSAqLworCQlpbnQgYiwgcmVhZCA9IDAsIGFsbHplcm8sIGNvcGllZCA9IDA7CisJCWlmIChvZmZzZXQpIHsKKwkJCWZyYW1lLT5ieXRlc19yZWN2ZCArPSAzMiAtIG9mZnNldDsJLy8gQnl0ZXMgb3V0CisJCQltZW1jcHkoZnJhbWUtPnJhd2RhdGEsCWluICsgb2Zmc2V0LCAzMiAtIG9mZnNldCk7CisJCQlyZWFkICs9IDMyOworCQl9CisKKwkJd2hpbGUgKHJlYWQgPCBuIC0gMSkgeworCQkJYWxsemVybyA9IDE7CisJCQlmb3IgKGIgPSAwOyBiIDwgMzI7IGIrKykgeworCQkJCWlmIChpbltyZWFkICsgYl0pIHsKKwkJCQkJYWxsemVybyA9IDA7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGFsbHplcm8pIHsKKwkJCQkvKiBEb24ndCBjb3B5IGl0ICovCisJCQl9IGVsc2UgeworCQkJCWlmIChmcmFtZS0+Ynl0ZXNfcmVjdmQgKyBjb3BpZWQgKyAzMiA8PSBtYXhfcmF3KQorCQkJCXsKKwkJCQkJbWVtY3B5KGZyYW1lLT5yYXdkYXRhCisJCQkJCQkrIGZyYW1lLT5ieXRlc19yZWN2ZCArIGNvcGllZCwKKwkJCQkJCWluICsgcmVhZCwgMzIpOworCQkJCQljb3BpZWQgKz0gMzI7CisJCQkJfSBlbHNlIHsKKwkJCQkJUERFQlVHKDMsICJSYXcgZGF0YSBidWZmZXIgb3ZlcnJ1biEhIik7CisJCQkJfQorCQkJfQorCQkJcmVhZCArPSAzMjsKKwkJfQorCisJCWZyYW1lLT5ieXRlc19yZWN2ZCArPSBjb3BpZWQ7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK292NTE4X21vdmVfZGF0YShzdHJ1Y3QgdXNiX292NTExICpvdiwgdW5zaWduZWQgY2hhciAqaW4sIGludCBuKQoreworCWludCBtYXhfcmF3ID0gTUFYX1JBV19EQVRBX1NJWkUob3YtPm1heHdpZHRoLCBvdi0+bWF4aGVpZ2h0KTsKKwlzdHJ1Y3Qgb3Y1MTFfZnJhbWUgKmZyYW1lID0gJm92LT5mcmFtZVtvdi0+Y3VyZnJhbWVdOworCXN0cnVjdCB0aW1ldmFsICp0czsKKworCS8qIERvbid0IGNvcHkgdGhlIHBhY2tldCBudW1iZXIgYnl0ZSAqLworCWlmIChvdi0+cGFja2V0X251bWJlcmluZykKKwkJLS1uOworCisJLyogQSBmYWxzZSBwb3NpdGl2ZSBoZXJlIGlzIGxpa2VseSwgdW50aWwgT1ZUIGdpdmVzIG1lCisJICogdGhlIGRlZmluaXRpdmUgU09GL0VPRiBmb3JtYXQgKi8KKwlpZiAoKCEoaW5bMF0gfCBpblsxXSB8IGluWzJdIHwgaW5bM10gfCBpbls1XSkpICYmIGluWzZdKSB7CisJCWlmIChwcmludHBoKSB7CisJCQlpbmZvKCJwaDogJTJ4ICUyeCAlMnggJTJ4ICUyeCAlMnggJTJ4ICUyeCIsIGluWzBdLAorCQkJICAgICBpblsxXSwgaW5bMl0sIGluWzNdLCBpbls0XSwgaW5bNV0sIGluWzZdLCBpbls3XSk7CisJCX0KKworCQlpZiAoZnJhbWUtPnNjYW5zdGF0ZSA9PSBTVEFURV9MSU5FUykgeworCQkJUERFQlVHKDQsICJEZXRlY3RlZCBmcmFtZSBlbmQvc3RhcnQiKTsKKwkJCWdvdG8gZW9mOworCQl9IGVsc2UgeyAvL3NjYW5zdGF0ZSA9PSBTVEFURV9TQ0FOTklORworCQkJLyogRnJhbWUgc3RhcnQgKi8KKwkJCVBERUJVRyg0LCAiRnJhbWUgc3RhcnQsIGZyYW1lbnVtID0gJWQiLCBvdi0+Y3VyZnJhbWUpOworCQkJZ290byBzb2Y7CisJCX0KKwl9IGVsc2UgeworCQlnb3RvIGNoZWNrX21pZGRsZTsKKwl9CisKK2VvZjoKKwl0cyA9IChzdHJ1Y3QgdGltZXZhbCAqKShmcmFtZS0+ZGF0YQorCSAgICAgICsgTUFYX0ZSQU1FX1NJWkUob3YtPm1heHdpZHRoLCBvdi0+bWF4aGVpZ2h0KSk7CisJZG9fZ2V0dGltZW9mZGF5KHRzKTsKKworCVBERUJVRyg0LCAiRnJhbWUgZW5kLCBjdXJmcmFtZSA9ICVkLCBodz0lZCwgdnc9JWQsIHJlY3ZkPSVkIiwKKwkJb3YtPmN1cmZyYW1lLAorCQkoaW50KShpbls5XSksIChpbnQpKGluWzEwXSksIGZyYW1lLT5ieXRlc19yZWN2ZCk7CisKKwkvLyBGSVhNRTogU2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUgaGVhZGVyIGZvcm1hdHMgeWV0LAorCS8vIHRoZXJlIGlzIG5vIHdheSB0byBrbm93IHdoYXQgdGhlIGFjdHVhbCBpbWFnZSBzaXplIGlzCisJZnJhbWUtPnJhd3dpZHRoID0gZnJhbWUtPndpZHRoOworCWZyYW1lLT5yYXdoZWlnaHQgPSBmcmFtZS0+aGVpZ2h0OworCisJLyogVmFsaWRhdGUgdGhlIGhlYWRlciBkYXRhICovCisJUkVTVFJJQ1RfVE9fUkFOR0UoZnJhbWUtPnJhd3dpZHRoLCBvdi0+bWlud2lkdGgsIG92LT5tYXh3aWR0aCk7CisJUkVTVFJJQ1RfVE9fUkFOR0UoZnJhbWUtPnJhd2hlaWdodCwgb3YtPm1pbmhlaWdodCwgb3YtPm1heGhlaWdodCk7CisKKwkvKiBEb24ndCBhbGxvdyBieXRlIGNvdW50IHRvIGV4Y2VlZCBidWZmZXIgc2l6ZSAqLworCVJFU1RSSUNUX1RPX1JBTkdFKGZyYW1lLT5ieXRlc19yZWN2ZCwgOCwgbWF4X3Jhdyk7CisKKwlpZiAoZnJhbWUtPnNjYW5zdGF0ZSA9PSBTVEFURV9MSU5FUykgeworICAgIAkJaW50IG5leHRmOworCisJCWZyYW1lLT5ncmFic3RhdGUgPSBGUkFNRV9ET05FOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmZyYW1lLT53cSk7CisKKwkJLyogSWYgbmV4dCBmcmFtZSBpcyByZWFkeSBvciBncmFiYmluZywKKwkJICogcG9pbnQgdG8gaXQgKi8KKwkJbmV4dGYgPSAob3YtPmN1cmZyYW1lICsgMSkgJSBPVjUxMV9OVU1GUkFNRVM7CisJCWlmIChvdi0+ZnJhbWVbbmV4dGZdLmdyYWJzdGF0ZSA9PSBGUkFNRV9SRUFEWQorCQkgICAgfHwgb3YtPmZyYW1lW25leHRmXS5ncmFic3RhdGUgPT0gRlJBTUVfR1JBQkJJTkcpIHsKKwkJCW92LT5jdXJmcmFtZSA9IG5leHRmOworCQkJb3YtPmZyYW1lW25leHRmXS5zY2Fuc3RhdGUgPSBTVEFURV9TQ0FOTklORzsKKwkJCWZyYW1lID0gJm92LT5mcmFtZVtuZXh0Zl07CisJCX0gZWxzZSB7CisJCQlpZiAoZnJhbWUtPmdyYWJzdGF0ZSA9PSBGUkFNRV9ET05FKSB7CisJCQkJUERFQlVHKDQsICIqKiBGcmFtZSBkb25lICoqIik7CisJCQl9IGVsc2UgeworCQkJCVBERUJVRyg0LCAiRnJhbWUgbm90IHJlYWR5PyBzdGF0ZSA9ICVkIiwKKwkJCQkgICAgICAgb3YtPmZyYW1lW25leHRmXS5ncmFic3RhdGUpOworCQkJfQorCisJCQlvdi0+Y3VyZnJhbWUgPSAtMTsKKwkJCVBERUJVRyg0LCAiU09GIGRyb3BwZWQgKG5vIGFjdGl2ZSBmcmFtZSkiKTsKKwkJCXJldHVybjsgIC8qIE5vd2hlcmUgdG8gc3RvcmUgdGhpcyBmcmFtZSAqLworCQl9CisJfQorc29mOgorCVBERUJVRyg0LCAiU3RhcnRpbmcgY2FwdHVyZSBvbiBmcmFtZSAlZCIsIGZyYW1lLT5mcmFtZW51bSk7CisKKy8vIFNuYXBzaG90IG5vdCByZXZlcnNlLWVuZ2luZWVyZWQgeWV0LgorI2lmIDAKKwkvKiBDaGVjayB0byBzZWUgaWYgaXQncyBhIHNuYXBzaG90IGZyYW1lICovCisJLyogRklYTUU/PyBTaG91bGQgdGhlIHNuYXBzaG90IHJlc2V0IGdvIGhlcmU/IFBlcmZvcm1hbmNlPyAqLworCWlmIChpbls4XSAmIDB4MDIpIHsKKwkJZnJhbWUtPnNuYXBzaG90ID0gMTsKKwkJUERFQlVHKDMsICJzbmFwc2hvdCBkZXRlY3RlZCIpOworCX0KKyNlbmRpZgorCWZyYW1lLT5zY2Fuc3RhdGUgPSBTVEFURV9MSU5FUzsKKwlmcmFtZS0+Ynl0ZXNfcmVjdmQgPSAwOworCWZyYW1lLT5jb21wcmVzc2VkID0gMTsKKworY2hlY2tfbWlkZGxlOgorCS8qIEFyZSB3ZSBpbiBhIGZyYW1lPyAqLworCWlmIChmcmFtZS0+c2NhbnN0YXRlICE9IFNUQVRFX0xJTkVTKSB7CisJCVBERUJVRyg0LCAic2NhbnN0YXRlOiBubyBTT0YgeWV0Iik7CisJCXJldHVybjsKKwl9CisKKwkvKiBEdW1wIGFsbCBkYXRhIGV4YWN0bHkgYXMgcmVjZWl2ZWQgKi8KKwlpZiAoZHVtcHBpeCA9PSAyKSB7CisJCWZyYW1lLT5ieXRlc19yZWN2ZCArPSBuOworCQlpZiAoZnJhbWUtPmJ5dGVzX3JlY3ZkIDw9IG1heF9yYXcpCisJCQltZW1jcHkoZnJhbWUtPnJhd2RhdGEgKyBmcmFtZS0+Ynl0ZXNfcmVjdmQgLSBuLCBpbiwgbik7CisJCWVsc2UKKwkJCVBERUJVRygzLCAiUmF3IGRhdGEgYnVmZmVyIG92ZXJydW4hISAoJWQpIiwKKwkJCQlmcmFtZS0+Ynl0ZXNfcmVjdmQgLSBtYXhfcmF3KTsKKwl9IGVsc2UgeworCQkvKiBBbGwgaW5jb21pbmcgZGF0YSBhcmUgZGl2aWRlZCBpbnRvIDgtYnl0ZSBzZWdtZW50cy4gSWYgdGhlCisJCSAqIHNlZ21lbnQgY29udGFpbnMgYWxsIHplcm8gYnl0ZXMsIGl0IG11c3QgYmUgc2tpcHBlZC4gVGhlc2UKKwkJICogemVyby1zZWdtZW50cyBhbGxvdyB0aGUgT1Y1MTggdG8gbWFpbmFpbiBhIGNvbnN0YW50IGRhdGEgcmF0ZQorCQkgKiByZWdhcmRsZXNzIG9mIHRoZSBlZmZlY3RpdmVuZXNzIG9mIHRoZSBjb21wcmVzc2lvbi4gU2VnbWVudHMKKwkJICogYXJlIGFsaWduZWQgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiBlYWNoIGlzb2Nocm9ub3VzCisJCSAqIHBhY2tldC4gVGhlIGZpcnN0IHNlZ21lbnQgaW4gZWFjaCBpbWFnZSBpcyBhIGhlYWRlciAodGhlCisJCSAqIGRlY29tcHJlc3NvciBza2lwcyBpdCBsYXRlcikuCisJCSAqLworCisJCWludCBiLCByZWFkID0gMCwgYWxsemVybywgY29waWVkID0gMDsKKworCQl3aGlsZSAocmVhZCA8IG4pIHsKKwkJCWFsbHplcm8gPSAxOworCQkJZm9yIChiID0gMDsgYiA8IDg7IGIrKykgeworCQkJCWlmIChpbltyZWFkICsgYl0pIHsKKwkJCQkJYWxsemVybyA9IDA7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGFsbHplcm8pIHsKKwkJCS8qIERvbid0IGNvcHkgaXQgKi8KKwkJCX0gZWxzZSB7CisJCQkJaWYgKGZyYW1lLT5ieXRlc19yZWN2ZCArIGNvcGllZCArIDggPD0gbWF4X3JhdykKKwkJCQl7CisJCQkJCW1lbWNweShmcmFtZS0+cmF3ZGF0YQorCQkJCQkJKyBmcmFtZS0+Ynl0ZXNfcmVjdmQgKyBjb3BpZWQsCisJCQkJCQlpbiArIHJlYWQsIDgpOworCQkJCQljb3BpZWQgKz0gODsKKwkJCQl9IGVsc2UgeworCQkJCQlQREVCVUcoMywgIlJhdyBkYXRhIGJ1ZmZlciBvdmVycnVuISEiKTsKKwkJCQl9CisJCQl9CisJCQlyZWFkICs9IDg7CisJCX0KKwkJZnJhbWUtPmJ5dGVzX3JlY3ZkICs9IGNvcGllZDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitvdjUxeF9pc29jX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBpOworCXN0cnVjdCB1c2Jfb3Y1MTEgKm92OworCXN0cnVjdCBvdjUxMV9zYnVmICpzYnVmOworCisJaWYgKCF1cmItPmNvbnRleHQpIHsKKwkJUERFQlVHKDQsICJubyBjb250ZXh0Iik7CisJCXJldHVybjsKKwl9CisKKwlzYnVmID0gdXJiLT5jb250ZXh0OworCW92ID0gc2J1Zi0+b3Y7CisKKwlpZiAoIW92IHx8ICFvdi0+ZGV2IHx8ICFvdi0+dXNlcikgeworCQlQREVCVUcoNCwgIm5vIGRldmljZSwgb3Igbm90IG9wZW4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghb3YtPnN0cmVhbWluZykgeworCQlQREVCVUcoNCwgImhtbW0uLi4gbm90IHN0cmVhbWluZywgYnV0IGdvdCBpbnRlcnJ1cHQiKTsKKwkJcmV0dXJuOworCX0KKworICAgICAgICBpZiAodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fCB1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCkgeworICAgICAgICAgICAgICAgIFBERUJVRyg0LCAiVVJCIHVubGlua2VkIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKwlpZiAodXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTICYmIHVyYi0+c3RhdHVzICE9IDApIHsKKwkJZXJyKCJFUlJPUjogdXJiLT5zdGF0dXM9JWQ6ICVzIiwgdXJiLT5zdGF0dXMsCisJCSAgICBzeW1ib2xpYyh1cmJfZXJybGlzdCwgdXJiLT5zdGF0dXMpKTsKKwl9CisKKwkvKiBDb3B5IHRoZSBkYXRhIHJlY2VpdmVkIGludG8gb3VyIGZyYW1lIGJ1ZmZlciAqLworCVBERUJVRyg1LCAic2J1ZlslZF06IE1vdmluZyAlZCBwYWNrZXRzIiwgc2J1Zi0+biwKKwkgICAgICAgdXJiLT5udW1iZXJfb2ZfcGFja2V0cyk7CisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQkvKiBXYXJuaW5nOiBEb24ndCBjYWxsICpfbW92ZV9kYXRhKCkgaWYgbm8gZnJhbWUgYWN0aXZlISAqLworCQlpZiAob3YtPmN1cmZyYW1lID49IDApIHsKKwkJCWludCBuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOworCQkJaW50IHN0ID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7CisJCQl1bnNpZ25lZCBjaGFyICpjZGF0YTsKKworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoID0gMDsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzID0gMDsKKworCQkJY2RhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcgorCQkJCSsgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7CisKKwkJCWlmICghbikgeworCQkJCVBERUJVRyg0LCAiWmVyby1sZW5ndGggcGFja2V0Iik7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChzdCkKKwkJCQlQREVCVUcoMiwgImRhdGEgZXJyb3I6IFslZF0gbGVuPSVkLCBzdGF0dXM9JWQiLAorCQkJCSAgICAgICBpLCBuLCBzdCk7CisKKwkJCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxMSkKKwkJCQlvdjUxMV9tb3ZlX2RhdGEob3YsIGNkYXRhLCBuKTsKKwkJCWVsc2UgaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KQorCQkJCW92NTE4X21vdmVfZGF0YShvdiwgY2RhdGEsIG4pOworCQkJZWxzZQorCQkJCWVycigiVW5rbm93biBicmlkZ2UgZGV2aWNlICglZCkiLCBvdi0+YnJpZGdlKTsKKworCQl9IGVsc2UgaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJm92LT53cSkpIHsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmb3YtPndxKTsKKwkJfQorCX0KKworCS8qIFJlc3VibWl0IHRoaXMgVVJCICovCisJdXJiLT5kZXYgPSBvdi0+ZGV2OworCWlmICgoaSA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpICE9IDApCisJCWVycigidXNiX3N1Ym1pdF91cmIoKSByZXQgJWQiLCBpKTsKKworCXJldHVybjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTdHJlYW0gaW5pdGlhbGl6YXRpb24gYW5kIHRlcm1pbmF0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludAorb3Y1MXhfaW5pdF9pc29jKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgZngsIGVyciwgbiwgc2l6ZTsKKworCVBERUJVRygzLCAiKioqIEluaXRpYWxpemluZyBjYXB0dXJlICoqKiIpOworCisJb3YtPmN1cmZyYW1lID0gLTE7CisKKwlpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MTEpIHsKKwkJaWYgKGNhbXMgPT0gMSkKKwkJCXNpemUgPSA5OTM7CisJCWVsc2UgaWYgKGNhbXMgPT0gMikKKwkJCXNpemUgPSA1MTM7CisJCWVsc2UgaWYgKGNhbXMgPT0gMyB8fCBjYW1zID09IDQpCisJCQlzaXplID0gMjU3OworCQllbHNlIHsKKwkJCWVycigiXCJjYW1zXCIgcGFyYW1ldGVyIHRvbyBoaWdoISIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfSBlbHNlIGlmIChvdi0+YnJpZGdlID09IEJSR19PVjUxMVBMVVMpIHsKKwkJaWYgKGNhbXMgPT0gMSkKKwkJCXNpemUgPSA5NjE7CisJCWVsc2UgaWYgKGNhbXMgPT0gMikKKwkJCXNpemUgPSA1MTM7CisJCWVsc2UgaWYgKGNhbXMgPT0gMyB8fCBjYW1zID09IDQpCisJCQlzaXplID0gMjU3OworCQllbHNlIGlmIChjYW1zID49IDUgJiYgY2FtcyA8PSA4KQorCQkJc2l6ZSA9IDEyOTsKKwkJZWxzZSBpZiAoY2FtcyA+PSA5ICYmIGNhbXMgPD0gMzEpCisJCQlzaXplID0gMzM7CisJCWVsc2UgeworCQkJZXJyKCJcImNhbXNcIiBwYXJhbWV0ZXIgdG9vIGhpZ2ghIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9IGVsc2UgaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KSB7CisJCWlmIChjYW1zID09IDEpCisJCQlzaXplID0gODk2OworCQllbHNlIGlmIChjYW1zID09IDIpCisJCQlzaXplID0gNTEyOworCQllbHNlIGlmIChjYW1zID09IDMgfHwgY2FtcyA9PSA0KQorCQkJc2l6ZSA9IDI1NjsKKwkJZWxzZSBpZiAoY2FtcyA+PSA1ICYmIGNhbXMgPD0gOCkKKwkJCXNpemUgPSAxMjg7CisJCWVsc2UgeworCQkJZXJyKCJcImNhbXNcIiBwYXJhbWV0ZXIgdG9vIGhpZ2ghIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9IGVsc2UgeworCQllcnIoImludmFsaWQgYnJpZGdlIHR5cGUiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8vIEZJWE1FOiBPVjUxOCBpcyBoYXJkY29kZWQgdG8gMTUgRlBTIChhbHRlcm5hdGUgNSkgZm9yIG5vdworCWlmIChvdi0+YmNsYXNzID09IEJDTF9PVjUxOCkgeworCQlpZiAocGFja2V0c2l6ZSA9PSAtMSkgeworCQkJb3Y1MThfc2V0X3BhY2tldF9zaXplKG92LCA2NDApOworCQl9IGVsc2UgeworCQkJaW5mbygiRm9yY2luZyBwYWNrZXQgc2l6ZSB0byAlZCIsIHBhY2tldHNpemUpOworCQkJb3Y1MThfc2V0X3BhY2tldF9zaXplKG92LCBwYWNrZXRzaXplKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChwYWNrZXRzaXplID09IC0xKSB7CisJCQlvdjUxMV9zZXRfcGFja2V0X3NpemUob3YsIHNpemUpOworCQl9IGVsc2UgeworCQkJaW5mbygiRm9yY2luZyBwYWNrZXQgc2l6ZSB0byAlZCIsIHBhY2tldHNpemUpOworCQkJb3Y1MTFfc2V0X3BhY2tldF9zaXplKG92LCBwYWNrZXRzaXplKTsKKwkJfQorCX0KKworCWZvciAobiA9IDA7IG4gPCBPVjUxMV9OVU1TQlVGOyBuKyspIHsKKwkJdXJiID0gdXNiX2FsbG9jX3VyYihGUkFNRVNfUEVSX0RFU0MsIEdGUF9LRVJORUwpOworCQlpZiAoIXVyYikgeworCQkJZXJyKCJpbml0IGlzb2M6IHVzYl9hbGxvY191cmIgcmV0LiBOVUxMIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlvdi0+c2J1ZltuXS51cmIgPSB1cmI7CisJCXVyYi0+ZGV2ID0gb3YtPmRldjsKKwkJdXJiLT5jb250ZXh0ID0gJm92LT5zYnVmW25dOworCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUob3YtPmRldiwgT1Y1MTFfRU5EUE9JTlRfQUREUkVTUyk7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gb3YtPnNidWZbbl0uZGF0YTsKKwkJdXJiLT5jb21wbGV0ZSA9IG92NTF4X2lzb2NfaXJxOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gRlJBTUVTX1BFUl9ERVNDOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBvdi0+cGFja2V0X3NpemUgKiBGUkFNRVNfUEVSX0RFU0M7CisJCXVyYi0+aW50ZXJ2YWwgPSAxOworCQlmb3IgKGZ4ID0gMDsgZnggPCBGUkFNRVNfUEVSX0RFU0M7IGZ4KyspIHsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbZnhdLm9mZnNldCA9IG92LT5wYWNrZXRfc2l6ZSAqIGZ4OworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tmeF0ubGVuZ3RoID0gb3YtPnBhY2tldF9zaXplOworCQl9CisJfQorCisJb3YtPnN0cmVhbWluZyA9IDE7CisKKwlmb3IgKG4gPSAwOyBuIDwgT1Y1MTFfTlVNU0JVRjsgbisrKSB7CisJCW92LT5zYnVmW25dLnVyYi0+ZGV2ID0gb3YtPmRldjsKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIob3YtPnNidWZbbl0udXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVycikgeworCQkJZXJyKCJpbml0IGlzb2M6IHVzYl9zdWJtaXRfdXJiKCVkKSByZXQgJWQiLCBuLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorb3Y1MXhfdW5saW5rX2lzb2Moc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaW50IG47CisKKwkvKiBVbnNjaGVkdWxlIGFsbCBvZiB0aGUgaXNvIHRkJ3MgKi8KKwlmb3IgKG4gPSBPVjUxMV9OVU1TQlVGIC0gMTsgbiA+PSAwOyBuLS0pIHsKKwkJaWYgKG92LT5zYnVmW25dLnVyYikgeworCQkJdXNiX2tpbGxfdXJiKG92LT5zYnVmW25dLnVyYik7CisJCQl1c2JfZnJlZV91cmIob3YtPnNidWZbbl0udXJiKTsKKwkJCW92LT5zYnVmW25dLnVyYiA9IE5VTEw7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitvdjUxeF9zdG9wX2lzb2Moc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaWYgKCFvdi0+c3RyZWFtaW5nIHx8ICFvdi0+ZGV2KQorCQlyZXR1cm47CisKKwlQREVCVUcoMywgIioqKiBTdG9wcGluZyBjYXB0dXJlICoqKiIpOworCisJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KQorCQlvdjUxOF9zZXRfcGFja2V0X3NpemUob3YsIDApOworCWVsc2UKKwkJb3Y1MTFfc2V0X3BhY2tldF9zaXplKG92LCAwKTsKKworCW92LT5zdHJlYW1pbmcgPSAwOworCisJb3Y1MXhfdW5saW5rX2lzb2Mob3YpOworfQorCitzdGF0aWMgaW50CitvdjUxeF9uZXdfZnJhbWUoc3RydWN0IHVzYl9vdjUxMSAqb3YsIGludCBmcmFtZW51bSkKK3sKKwlzdHJ1Y3Qgb3Y1MTFfZnJhbWUgKmZyYW1lOworCWludCBuZXdudW07CisKKwlQREVCVUcoNCwgIm92LT5jdXJmcmFtZSA9ICVkLCBmcmFtZW51bSA9ICVkIiwgb3YtPmN1cmZyYW1lLCBmcmFtZW51bSk7CisKKwlpZiAoIW92LT5kZXYpCisJCXJldHVybiAtMTsKKworCS8qIElmIHdlJ3JlIG5vdCBncmFiYmluZyBhIGZyYW1lIHJpZ2h0IG5vdyBhbmQgdGhlIG90aGVyIGZyYW1lIGlzICovCisJLyogcmVhZHkgdG8gYmUgZ3JhYmJlZCBpbnRvLCB0aGVuIHVzZSBpdCBpbnN0ZWFkICovCisJaWYgKG92LT5jdXJmcmFtZSA9PSAtMSkgeworCQluZXdudW0gPSAoZnJhbWVudW0gLSAxICsgT1Y1MTFfTlVNRlJBTUVTKSAlIE9WNTExX05VTUZSQU1FUzsKKwkJaWYgKG92LT5mcmFtZVtuZXdudW1dLmdyYWJzdGF0ZSA9PSBGUkFNRV9SRUFEWSkKKwkJCWZyYW1lbnVtID0gbmV3bnVtOworCX0gZWxzZQorCQlyZXR1cm4gMDsKKworCWZyYW1lID0gJm92LT5mcmFtZVtmcmFtZW51bV07CisKKwlQREVCVUcoNCwgImZyYW1lbnVtID0gJWQsIHdpZHRoID0gJWQsIGhlaWdodCA9ICVkIiwgZnJhbWVudW0sCisJICAgICAgIGZyYW1lLT53aWR0aCwgZnJhbWUtPmhlaWdodCk7CisKKwlmcmFtZS0+Z3JhYnN0YXRlID0gRlJBTUVfR1JBQkJJTkc7CisJZnJhbWUtPnNjYW5zdGF0ZSA9IFNUQVRFX1NDQU5OSU5HOworCWZyYW1lLT5zbmFwc2hvdCA9IDA7CisKKwlvdi0+Y3VyZnJhbWUgPSBmcmFtZW51bTsKKworCS8qIE1ha2Ugc3VyZSBpdCdzIG5vdCB0b28gYmlnICovCisJaWYgKGZyYW1lLT53aWR0aCA+IG92LT5tYXh3aWR0aCkKKwkJZnJhbWUtPndpZHRoID0gb3YtPm1heHdpZHRoOworCisJZnJhbWUtPndpZHRoICY9IH43TDsJCS8qIE11bHRpcGxlIG9mIDggKi8KKworCWlmIChmcmFtZS0+aGVpZ2h0ID4gb3YtPm1heGhlaWdodCkKKwkJZnJhbWUtPmhlaWdodCA9IG92LT5tYXhoZWlnaHQ7CisKKwlmcmFtZS0+aGVpZ2h0ICY9IH4zTDsJCS8qIE11bHRpcGxlIG9mIDQgKi8KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEJ1ZmZlciBtYW5hZ2VtZW50CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIC0gWW91IG11c3QgYWNxdWlyZSBidWZfbG9jayBiZWZvcmUgZW50ZXJpbmcgdGhpcyBmdW5jdGlvbi4KKyAqIC0gQmVjYXVzZSB0aGlzIGNvZGUgd2lsbCBmcmVlIGFueSBub24tbnVsbCBwb2ludGVyLCB5b3UgbXVzdCBiZSBzdXJlIHRvIG51bGwKKyAqICAgdGhlbSBpZiB5b3UgZXhwbGljaXRseSBmcmVlIHRoZW0gc29tZXdoZXJlIGVsc2UhCisgKi8KK3N0YXRpYyB2b2lkCitvdjUxeF9kb19kZWFsbG9jKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCWludCBpOworCVBERUJVRyg0LCAiZW50ZXJlZCIpOworCisJaWYgKG92LT5mYnVmKSB7CisJCXJ2ZnJlZShvdi0+ZmJ1ZiwgT1Y1MTFfTlVNRlJBTUVTCisJCSAgICAgICAqIE1BWF9EQVRBX1NJWkUob3YtPm1heHdpZHRoLCBvdi0+bWF4aGVpZ2h0KSk7CisJCW92LT5mYnVmID0gTlVMTDsKKwl9CisKKwl2ZnJlZShvdi0+cmF3ZmJ1Zik7CisJb3YtPnJhd2ZidWYgPSBOVUxMOworCisJdmZyZWUob3YtPnRlbXBmYnVmKTsKKwlvdi0+dGVtcGZidWYgPSBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IE9WNTExX05VTVNCVUY7IGkrKykgeworCQlpZiAob3YtPnNidWZbaV0uZGF0YSkgeworCQkJa2ZyZWUob3YtPnNidWZbaV0uZGF0YSk7CisJCQlvdi0+c2J1ZltpXS5kYXRhID0gTlVMTDsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBPVjUxMV9OVU1GUkFNRVM7IGkrKykgeworCQlvdi0+ZnJhbWVbaV0uZGF0YSA9IE5VTEw7CisJCW92LT5mcmFtZVtpXS5yYXdkYXRhID0gTlVMTDsKKwkJb3YtPmZyYW1lW2ldLnRlbXBkYXRhID0gTlVMTDsKKwkJaWYgKG92LT5mcmFtZVtpXS5jb21wYnVmKSB7CisJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIG92LT5mcmFtZVtpXS5jb21wYnVmKTsKKwkJCW92LT5mcmFtZVtpXS5jb21wYnVmID0gTlVMTDsKKwkJfQorCX0KKworCVBERUJVRyg0LCAiYnVmZmVyIG1lbW9yeSBkZWFsbG9jYXRlZCIpOworCW92LT5idWZfc3RhdGUgPSBCVUZfTk9UX0FMTE9DQVRFRDsKKwlQREVCVUcoNCwgImxlYXZpbmciKTsKK30KKworc3RhdGljIGludAorb3Y1MXhfYWxsb2Moc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaW50IGk7CisJY29uc3QgaW50IHcgPSBvdi0+bWF4d2lkdGg7CisJY29uc3QgaW50IGggPSBvdi0+bWF4aGVpZ2h0OworCWNvbnN0IGludCBkYXRhX2J1ZnNpemUgPSBPVjUxMV9OVU1GUkFNRVMgKiBNQVhfREFUQV9TSVpFKHcsIGgpOworCWNvbnN0IGludCByYXdfYnVmc2l6ZSA9IE9WNTExX05VTUZSQU1FUyAqIE1BWF9SQVdfREFUQV9TSVpFKHcsIGgpOworCisJUERFQlVHKDQsICJlbnRlcmVkIik7CisJZG93bigmb3YtPmJ1Zl9sb2NrKTsKKworCWlmIChvdi0+YnVmX3N0YXRlID09IEJVRl9BTExPQ0FURUQpCisJCWdvdG8gb3V0OworCisJb3YtPmZidWYgPSBydm1hbGxvYyhkYXRhX2J1ZnNpemUpOworCWlmICghb3YtPmZidWYpCisJCWdvdG8gZXJyb3I7CisKKwlvdi0+cmF3ZmJ1ZiA9IHZtYWxsb2MocmF3X2J1ZnNpemUpOworCWlmICghb3YtPnJhd2ZidWYpCisJCWdvdG8gZXJyb3I7CisKKwltZW1zZXQob3YtPnJhd2ZidWYsIDAsIHJhd19idWZzaXplKTsKKworCW92LT50ZW1wZmJ1ZiA9IHZtYWxsb2MocmF3X2J1ZnNpemUpOworCWlmICghb3YtPnRlbXBmYnVmKQorCQlnb3RvIGVycm9yOworCisJbWVtc2V0KG92LT50ZW1wZmJ1ZiwgMCwgcmF3X2J1ZnNpemUpOworCisJZm9yIChpID0gMDsgaSA8IE9WNTExX05VTVNCVUY7IGkrKykgeworCQlvdi0+c2J1ZltpXS5kYXRhID0ga21hbGxvYyhGUkFNRVNfUEVSX0RFU0MgKgorCQkJTUFYX0ZSQU1FX1NJWkVfUEVSX0RFU0MsIEdGUF9LRVJORUwpOworCQlpZiAoIW92LT5zYnVmW2ldLmRhdGEpCisJCQlnb3RvIGVycm9yOworCisJCVBERUJVRyg0LCAic2J1ZlslZF0gQCAlcCIsIGksIG92LT5zYnVmW2ldLmRhdGEpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBPVjUxMV9OVU1GUkFNRVM7IGkrKykgeworCQlvdi0+ZnJhbWVbaV0uZGF0YSA9IG92LT5mYnVmICsgaSAqIE1BWF9EQVRBX1NJWkUodywgaCk7CisJCW92LT5mcmFtZVtpXS5yYXdkYXRhID0gb3YtPnJhd2ZidWYKKwkJICsgaSAqIE1BWF9SQVdfREFUQV9TSVpFKHcsIGgpOworCQlvdi0+ZnJhbWVbaV0udGVtcGRhdGEgPSBvdi0+dGVtcGZidWYKKwkJICsgaSAqIE1BWF9SQVdfREFUQV9TSVpFKHcsIGgpOworCisJCW92LT5mcmFtZVtpXS5jb21wYnVmID0KKwkJICh1bnNpZ25lZCBjaGFyICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKCFvdi0+ZnJhbWVbaV0uY29tcGJ1ZikKKwkJCWdvdG8gZXJyb3I7CisKKwkJUERFQlVHKDQsICJmcmFtZVslZF0gQCAlcCIsIGksIG92LT5mcmFtZVtpXS5kYXRhKTsKKwl9CisKKwlvdi0+YnVmX3N0YXRlID0gQlVGX0FMTE9DQVRFRDsKK291dDoKKwl1cCgmb3YtPmJ1Zl9sb2NrKTsKKwlQREVCVUcoNCwgImxlYXZpbmciKTsKKwlyZXR1cm4gMDsKK2Vycm9yOgorCW92NTF4X2RvX2RlYWxsb2Mob3YpOworCXVwKCZvdi0+YnVmX2xvY2spOworCVBERUJVRyg0LCAiZXJyb3JlZCIpOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZAorb3Y1MXhfZGVhbGxvYyhzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlQREVCVUcoNCwgImVudGVyZWQiKTsKKwlkb3duKCZvdi0+YnVmX2xvY2spOworCW92NTF4X2RvX2RlYWxsb2Mob3YpOworCXVwKCZvdi0+YnVmX2xvY2spOworCVBERUJVRyg0LCAibGVhdmluZyIpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFY0TCAxIEFQSQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQKK292NTF4X3Y0bDFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdXNiX292NTExICpvdiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCWludCBlcnIsIGk7CisKKwlQREVCVUcoNCwgIm9wZW5pbmciKTsKKworCWRvd24oJm92LT5sb2NrKTsKKworCWVyciA9IC1FQlVTWTsKKwlpZiAob3YtPnVzZXIpCisJCWdvdG8gb3V0OworCisJb3YtPnN1Yl9mbGFnID0gMDsKKworCS8qIEluIGNhc2UgYXBwIGRvZXNuJ3Qgc2V0IHRoZW0uLi4gKi8KKwllcnIgPSBvdjUxeF9zZXRfZGVmYXVsdF9wYXJhbXMob3YpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIE1ha2Ugc3VyZSBmcmFtZXMgYXJlIHJlc2V0ICovCisJZm9yIChpID0gMDsgaSA8IE9WNTExX05VTUZSQU1FUzsgaSsrKSB7CisJCW92LT5mcmFtZVtpXS5ncmFic3RhdGUgPSBGUkFNRV9VTlVTRUQ7CisJCW92LT5mcmFtZVtpXS5ieXRlc19yZWFkID0gMDsKKwl9CisKKwkvKiBJZiBjb21wcmVzc2lvbiBpcyBvbiwgbWFrZSBzdXJlIG5vdyB0aGF0IGEKKwkgKiBkZWNvbXByZXNzb3IgY2FuIGJlIGxvYWRlZCAqLworCWlmIChvdi0+Y29tcHJlc3MgJiYgIW92LT5kZWNvbXBfb3BzKSB7CisJCWVyciA9IHJlcXVlc3RfZGVjb21wcmVzc29yKG92KTsKKwkJaWYgKGVyciAmJiAhZHVtcHBpeCkKKwkJCWdvdG8gb3V0OworCX0KKworCWVyciA9IG92NTF4X2FsbG9jKG92KTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBvdjUxeF9pbml0X2lzb2Mob3YpOworCWlmIChlcnIpIHsKKwkJb3Y1MXhfZGVhbGxvYyhvdik7CisJCWdvdG8gb3V0OworCX0KKworCW92LT51c2VyKys7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gdmRldjsKKworCWlmIChvdi0+bGVkX3BvbGljeSA9PSBMRURfQVVUTykKKwkJb3Y1MXhfbGVkX2NvbnRyb2wob3YsIDEpOworCitvdXQ6CisJdXAoJm92LT5sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50CitvdjUxeF92NGwxX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9vdjUxMSAqb3YgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKKworCVBERUJVRyg0LCAib3Y1MTFfY2xvc2UiKTsKKworCWRvd24oJm92LT5sb2NrKTsKKworCW92LT51c2VyLS07CisJb3Y1MXhfc3RvcF9pc29jKG92KTsKKworCXJlbGVhc2VfZGVjb21wcmVzc29yKG92KTsKKworCWlmIChvdi0+bGVkX3BvbGljeSA9PSBMRURfQVVUTykKKwkJb3Y1MXhfbGVkX2NvbnRyb2wob3YsIDApOworCisJaWYgKG92LT5kZXYpCisJCW92NTF4X2RlYWxsb2Mob3YpOworCisJdXAoJm92LT5sb2NrKTsKKworCS8qIERldmljZSB1bnBsdWdnZWQgd2hpbGUgb3Blbi4gT25seSBhIG1pbmltdW0gb2YgdW5yZWdpc3RyYXRpb24gaXMgZG9uZQorCSAqIGhlcmU7IHRoZSBkaXNjb25uZWN0IGNhbGxiYWNrIGFscmVhZHkgZGlkIHRoZSByZXN0LiAqLworCWlmICghb3YtPmRldikgeworCQlkb3duKCZvdi0+Y2J1Zl9sb2NrKTsKKwkJa2ZyZWUob3YtPmNidWYpOworCQlvdi0+Y2J1ZiA9IE5VTEw7CisJCXVwKCZvdi0+Y2J1Zl9sb2NrKTsKKworCQlvdjUxeF9kZWFsbG9jKG92KTsKKwkJa2ZyZWUob3YpOworCQlvdiA9IE5VTEw7CisJfQorCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworLyogRG8gbm90IGNhbGwgdGhpcyBmdW5jdGlvbiBkaXJlY3RseSEgKi8KK3N0YXRpYyBpbnQKK292NTF4X3Y0bDFfaW9jdGxfaW50ZXJuYWwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB1c2Jfb3Y1MTEgKm92ID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CisJUERFQlVHKDUsICJJT0N0bDogMHglWCIsIGNtZCk7CisKKwlpZiAoIW92LT5kZXYpCisJCXJldHVybiAtRUlPOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFZJRElPQ0dDQVA6CisJeworCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSAqYiA9IGFyZzsKKworCQlQREVCVUcoNCwgIlZJRElPQ0dDQVAiKTsKKworCQltZW1zZXQoYiwgMCwgc2l6ZW9mKHN0cnVjdCB2aWRlb19jYXBhYmlsaXR5KSk7CisJCXNwcmludGYoYi0+bmFtZSwgIiVzIFVTQiBDYW1lcmEiLAorCQkJc3ltYm9saWMoYnJnbGlzdCwgb3YtPmJyaWRnZSkpOworCQliLT50eXBlID0gVklEX1RZUEVfQ0FQVFVSRSB8IFZJRF9UWVBFX1NVQkNBUFRVUkU7CisJCWItPmNoYW5uZWxzID0gb3YtPm51bV9pbnB1dHM7CisJCWItPmF1ZGlvcyA9IDA7CisJCWItPm1heHdpZHRoID0gb3YtPm1heHdpZHRoOworCQliLT5tYXhoZWlnaHQgPSBvdi0+bWF4aGVpZ2h0OworCQliLT5taW53aWR0aCA9IG92LT5taW53aWR0aDsKKwkJYi0+bWluaGVpZ2h0ID0gb3YtPm1pbmhlaWdodDsKKworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NHQ0hBTjoKKwl7CisJCXN0cnVjdCB2aWRlb19jaGFubmVsICp2ID0gYXJnOworCisJCVBERUJVRyg0LCAiVklESU9DR0NIQU4iKTsKKworCQlpZiAoKHVuc2lnbmVkKSh2LT5jaGFubmVsKSA+PSBvdi0+bnVtX2lucHV0cykgeworCQkJZXJyKCJJbnZhbGlkIGNoYW5uZWwgKCVkKSIsIHYtPmNoYW5uZWwpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQl2LT5ub3JtID0gb3YtPm5vcm07CisJCXYtPnR5cGUgPSBWSURFT19UWVBFX0NBTUVSQTsKKwkJdi0+ZmxhZ3MgPSAwOworLy8JCXYtPmZsYWdzIHw9IChvdi0+aGFzX2RlY29kZXIpID8gVklERU9fVkNfTk9STSA6IDA7CisJCXYtPnR1bmVycyA9IDA7CisJCWRlY29kZXJfZ2V0X2lucHV0X25hbWUob3YsIHYtPmNoYW5uZWwsIHYtPm5hbWUpOworCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ1NDSEFOOgorCXsKKwkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnYgPSBhcmc7CisJCWludCBlcnI7CisKKwkJUERFQlVHKDQsICJWSURJT0NTQ0hBTiIpOworCisJCS8qIE1ha2Ugc3VyZSBpdCdzIG5vdCBhIGNhbWVyYSAqLworCQlpZiAoIW92LT5oYXNfZGVjb2RlcikgeworCQkJaWYgKHYtPmNoYW5uZWwgPT0gMCkKKwkJCQlyZXR1cm4gMDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmICh2LT5ub3JtICE9IFZJREVPX01PREVfUEFMICYmCisJCSAgICB2LT5ub3JtICE9IFZJREVPX01PREVfTlRTQyAmJgorCQkgICAgdi0+bm9ybSAhPSBWSURFT19NT0RFX1NFQ0FNICYmCisJCSAgICB2LT5ub3JtICE9IFZJREVPX01PREVfQVVUTykgeworCQkJZXJyKCJJbnZhbGlkIG5vcm0gKCVkKSIsIHYtPm5vcm0pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoKHVuc2lnbmVkKSh2LT5jaGFubmVsKSA+PSBvdi0+bnVtX2lucHV0cykgeworCQkJZXJyKCJJbnZhbGlkIGNoYW5uZWwgKCVkKSIsIHYtPmNoYW5uZWwpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQllcnIgPSBkZWNvZGVyX3NldF9pbnB1dChvdiwgdi0+Y2hhbm5lbCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWVyciA9IGRlY29kZXJfc2V0X25vcm0ob3YsIHYtPm5vcm0pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NHUElDVDoKKwl7CisJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwID0gYXJnOworCisJCVBERUJVRyg0LCAiVklESU9DR1BJQ1QiKTsKKworCQltZW1zZXQocCwgMCwgc2l6ZW9mKHN0cnVjdCB2aWRlb19waWN0dXJlKSk7CisJCWlmIChzZW5zb3JfZ2V0X3BpY3R1cmUob3YsIHApKQorCQkJcmV0dXJuIC1FSU87CisKKwkJLyogQ2FuIHdlIGdldCB0aGVzZSBmcm9tIGZyYW1lWzBdPyAtY2xhdWRpbz8gKi8KKwkJcC0+ZGVwdGggPSBvdi0+ZnJhbWVbMF0uZGVwdGg7CisJCXAtPnBhbGV0dGUgPSBvdi0+ZnJhbWVbMF0uZm9ybWF0OworCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ1NQSUNUOgorCXsKKwkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnAgPSBhcmc7CisJCWludCBpLCByYzsKKworCQlQREVCVUcoNCwgIlZJRElPQ1NQSUNUIik7CisKKwkJaWYgKCFnZXRfZGVwdGgocC0+cGFsZXR0ZSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoc2Vuc29yX3NldF9waWN0dXJlKG92LCBwKSkKKwkJCXJldHVybiAtRUlPOworCisJCWlmIChmb3JjZV9wYWxldHRlICYmIHAtPnBhbGV0dGUgIT0gZm9yY2VfcGFsZXR0ZSkgeworCQkJaW5mbygiUGFsZXR0ZSByZWplY3RlZCAoJXMpIiwKKwkJCSAgICAgc3ltYm9saWModjRsMV9wbGlzdCwgcC0+cGFsZXR0ZSkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQkvLyBGSVhNRTogRm9ybWF0IHNob3VsZCBiZSBpbmRlcGVuZGVudCBvZiBmcmFtZXMKKwkJaWYgKHAtPnBhbGV0dGUgIT0gb3YtPmZyYW1lWzBdLmZvcm1hdCkgeworCQkJUERFQlVHKDQsICJEZXRlY3RlZCBmb3JtYXQgY2hhbmdlIik7CisKKwkJCXJjID0gb3Y1MXhfd2FpdF9mcmFtZXNfaW5hY3RpdmUob3YpOworCQkJaWYgKHJjKQorCQkJCXJldHVybiByYzsKKworCQkJbW9kZV9pbml0X3JlZ3Mob3YsIG92LT5mcmFtZVswXS53aWR0aCwKKwkJCQlvdi0+ZnJhbWVbMF0uaGVpZ2h0LCBwLT5wYWxldHRlLCBvdi0+c3ViX2ZsYWcpOworCQl9CisKKwkJUERFQlVHKDQsICJTZXR0aW5nIGRlcHRoPSVkLCBwYWxldHRlPSVzIiwKKwkJICAgICAgIHAtPmRlcHRoLCBzeW1ib2xpYyh2NGwxX3BsaXN0LCBwLT5wYWxldHRlKSk7CisKKwkJZm9yIChpID0gMDsgaSA8IE9WNTExX05VTUZSQU1FUzsgaSsrKSB7CisJCQlvdi0+ZnJhbWVbaV0uZGVwdGggPSBwLT5kZXB0aDsKKwkJCW92LT5mcmFtZVtpXS5mb3JtYXQgPSBwLT5wYWxldHRlOworCQl9CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DR0NBUFRVUkU6CisJeworCQlpbnQgKnZmID0gYXJnOworCisJCVBERUJVRyg0LCAiVklESU9DR0NBUFRVUkUiKTsKKworCQlvdi0+c3ViX2ZsYWcgPSAqdmY7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ1NDQVBUVVJFOgorCXsKKwkJc3RydWN0IHZpZGVvX2NhcHR1cmUgKnZjID0gYXJnOworCisJCVBERUJVRyg0LCAiVklESU9DU0NBUFRVUkUiKTsKKworCQlpZiAodmMtPmZsYWdzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICh2Yy0+ZGVjaW1hdGlvbikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXZjLT54ICY9IH4zTDsKKwkJdmMtPnkgJj0gfjFMOworCQl2Yy0+eSAmPSB+MzFMOworCisJCWlmICh2Yy0+d2lkdGggPT0gMCkKKwkJCXZjLT53aWR0aCA9IDMyOworCisJCXZjLT5oZWlnaHQgLz0gMTY7CisJCXZjLT5oZWlnaHQgKj0gMTY7CisJCWlmICh2Yy0+aGVpZ2h0ID09IDApCisJCQl2Yy0+aGVpZ2h0ID0gMTY7CisKKwkJb3YtPnN1YnggPSB2Yy0+eDsKKwkJb3YtPnN1YnkgPSB2Yy0+eTsKKwkJb3YtPnN1YncgPSB2Yy0+d2lkdGg7CisJCW92LT5zdWJoID0gdmMtPmhlaWdodDsKKworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NTV0lOOgorCXsKKwkJc3RydWN0IHZpZGVvX3dpbmRvdyAqdncgPSBhcmc7CisJCWludCBpLCByYzsKKworCQlQREVCVUcoNCwgIlZJRElPQ1NXSU46ICVkeCVkIiwgdnctPndpZHRoLCB2dy0+aGVpZ2h0KTsKKworI2lmIDAKKwkJaWYgKHZ3LT5mbGFncykKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAodnctPmNsaXBjb3VudCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAodnctPmhlaWdodCAhPSBvdi0+bWF4aGVpZ2h0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICh2dy0+d2lkdGggIT0gb3YtPm1heHdpZHRoKQorCQkJcmV0dXJuIC1FSU5WQUw7CisjZW5kaWYKKworCQlyYyA9IG92NTF4X3dhaXRfZnJhbWVzX2luYWN0aXZlKG92KTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCisJCXJjID0gbW9kZV9pbml0X3JlZ3Mob3YsIHZ3LT53aWR0aCwgdnctPmhlaWdodCwKKwkJCW92LT5mcmFtZVswXS5mb3JtYXQsIG92LT5zdWJfZmxhZyk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisKKwkJZm9yIChpID0gMDsgaSA8IE9WNTExX05VTUZSQU1FUzsgaSsrKSB7CisJCQlvdi0+ZnJhbWVbaV0ud2lkdGggPSB2dy0+d2lkdGg7CisJCQlvdi0+ZnJhbWVbaV0uaGVpZ2h0ID0gdnctPmhlaWdodDsKKwkJfQorCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ0dXSU46CisJeworCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICp2dyA9IGFyZzsKKworCQltZW1zZXQodncsIDAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fd2luZG93KSk7CisJCXZ3LT54ID0gMDsJCS8qIEZJWE1FICovCisJCXZ3LT55ID0gMDsKKwkJdnctPndpZHRoID0gb3YtPmZyYW1lWzBdLndpZHRoOworCQl2dy0+aGVpZ2h0ID0gb3YtPmZyYW1lWzBdLmhlaWdodDsKKwkJdnctPmZsYWdzID0gMzA7CisKKwkJUERFQlVHKDQsICJWSURJT0NHV0lOOiAlZHglZCIsIHZ3LT53aWR0aCwgdnctPmhlaWdodCk7CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DR01CVUY6CisJeworCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiAqdm0gPSBhcmc7CisJCWludCBpOworCisJCVBERUJVRyg0LCAiVklESU9DR01CVUYiKTsKKworCQltZW1zZXQodm0sIDAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fbWJ1ZikpOworCQl2bS0+c2l6ZSA9IE9WNTExX05VTUZSQU1FUworCQkJICAgKiBNQVhfREFUQV9TSVpFKG92LT5tYXh3aWR0aCwgb3YtPm1heGhlaWdodCk7CisJCXZtLT5mcmFtZXMgPSBPVjUxMV9OVU1GUkFNRVM7CisKKwkJdm0tPm9mZnNldHNbMF0gPSAwOworCQlmb3IgKGkgPSAxOyBpIDwgT1Y1MTFfTlVNRlJBTUVTOyBpKyspIHsKKwkJCXZtLT5vZmZzZXRzW2ldID0gdm0tPm9mZnNldHNbaS0xXQorCQkJICAgKyBNQVhfREFUQV9TSVpFKG92LT5tYXh3aWR0aCwgb3YtPm1heGhlaWdodCk7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NNQ0FQVFVSRToKKwl7CisJCXN0cnVjdCB2aWRlb19tbWFwICp2bSA9IGFyZzsKKwkJaW50IHJjLCBkZXB0aDsKKwkJdW5zaWduZWQgaW50IGYgPSB2bS0+ZnJhbWU7CisKKwkJUERFQlVHKDQsICJWSURJT0NNQ0FQVFVSRTogZnJhbWU6ICVkLCAlZHglZCwgJXMiLCBmLCB2bS0+d2lkdGgsCisJCQl2bS0+aGVpZ2h0LCBzeW1ib2xpYyh2NGwxX3BsaXN0LCB2bS0+Zm9ybWF0KSk7CisKKwkJZGVwdGggPSBnZXRfZGVwdGgodm0tPmZvcm1hdCk7CisJCWlmICghZGVwdGgpIHsKKwkJCVBERUJVRygyLCAiVklESU9DTUNBUFRVUkU6IGludmFsaWQgZm9ybWF0ICglcykiLAorCQkJICAgICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIHZtLT5mb3JtYXQpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKGYgPj0gT1Y1MTFfTlVNRlJBTUVTKSB7CisJCQllcnIoIlZJRElPQ01DQVBUVVJFOiBpbnZhbGlkIGZyYW1lICglZCkiLCBmKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKHZtLT53aWR0aCA+IG92LT5tYXh3aWR0aAorCQkgICAgfHwgdm0tPmhlaWdodCA+IG92LT5tYXhoZWlnaHQpIHsKKwkJCWVycigiVklESU9DTUNBUFRVUkU6IHJlcXVlc3RlZCBkaW1lbnNpb25zIHRvbyBiaWciKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKG92LT5mcmFtZVtmXS5ncmFic3RhdGUgPT0gRlJBTUVfR1JBQkJJTkcpIHsKKwkJCVBERUJVRyg0LCAiVklESU9DTUNBUFRVUkU6IGFscmVhZHkgZ3JhYmJpbmciKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKworCQlpZiAoZm9yY2VfcGFsZXR0ZSAmJiAodm0tPmZvcm1hdCAhPSBmb3JjZV9wYWxldHRlKSkgeworCQkJUERFQlVHKDIsICJwYWxldHRlIHJlamVjdGVkICglcykiLAorCQkJICAgICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIHZtLT5mb3JtYXQpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKChvdi0+ZnJhbWVbZl0ud2lkdGggIT0gdm0tPndpZHRoKSB8fAorCQkgICAgKG92LT5mcmFtZVtmXS5oZWlnaHQgIT0gdm0tPmhlaWdodCkgfHwKKwkJICAgIChvdi0+ZnJhbWVbZl0uZm9ybWF0ICE9IHZtLT5mb3JtYXQpIHx8CisJCSAgICAob3YtPmZyYW1lW2ZdLnN1Yl9mbGFnICE9IG92LT5zdWJfZmxhZykgfHwKKwkJICAgIChvdi0+ZnJhbWVbZl0uZGVwdGggIT0gZGVwdGgpKSB7CisJCQlQREVCVUcoNCwgIlZJRElPQ01DQVBUVVJFOiBjaGFuZ2UgaW4gaW1hZ2UgcGFyYW1ldGVycyIpOworCisJCQlyYyA9IG92NTF4X3dhaXRfZnJhbWVzX2luYWN0aXZlKG92KTsKKwkJCWlmIChyYykKKwkJCQlyZXR1cm4gcmM7CisKKwkJCXJjID0gbW9kZV9pbml0X3JlZ3Mob3YsIHZtLT53aWR0aCwgdm0tPmhlaWdodCwKKwkJCQl2bS0+Zm9ybWF0LCBvdi0+c3ViX2ZsYWcpOworI2lmIDAKKwkJCWlmIChyYyA8IDApIHsKKwkJCQlQREVCVUcoMSwgIkdvdCBlcnJvciB3aGlsZSBpbml0aWFsaXppbmcgcmVncyAiKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorI2VuZGlmCisJCQlvdi0+ZnJhbWVbZl0ud2lkdGggPSB2bS0+d2lkdGg7CisJCQlvdi0+ZnJhbWVbZl0uaGVpZ2h0ID0gdm0tPmhlaWdodDsKKwkJCW92LT5mcmFtZVtmXS5mb3JtYXQgPSB2bS0+Zm9ybWF0OworCQkJb3YtPmZyYW1lW2ZdLnN1Yl9mbGFnID0gb3YtPnN1Yl9mbGFnOworCQkJb3YtPmZyYW1lW2ZdLmRlcHRoID0gZGVwdGg7CisJCX0KKworCQkvKiBNYXJrIGl0IGFzIHJlYWR5ICovCisJCW92LT5mcmFtZVtmXS5ncmFic3RhdGUgPSBGUkFNRV9SRUFEWTsKKworCQlQREVCVUcoNCwgIlZJRElPQ01DQVBUVVJFOiByZW5ld2luZyBmcmFtZSAlZCIsIGYpOworCisJCXJldHVybiBvdjUxeF9uZXdfZnJhbWUob3YsIGYpOworCX0KKwljYXNlIFZJRElPQ1NZTkM6CisJeworCQl1bnNpZ25lZCBpbnQgZm51bSA9ICooKHVuc2lnbmVkIGludCAqKSBhcmcpOworCQlzdHJ1Y3Qgb3Y1MTFfZnJhbWUgKmZyYW1lOworCQlpbnQgcmM7CisKKwkJaWYgKGZudW0gPj0gT1Y1MTFfTlVNRlJBTUVTKSB7CisJCQllcnIoIlZJRElPQ1NZTkM6IGludmFsaWQgZnJhbWUgKCVkKSIsIGZudW0pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlmcmFtZSA9ICZvdi0+ZnJhbWVbZm51bV07CisKKwkJUERFQlVHKDQsICJzeW5jaW5nIHRvIGZyYW1lICVkLCBncmFic3RhdGUgPSAlZCIsIGZudW0sCisJCSAgICAgICBmcmFtZS0+Z3JhYnN0YXRlKTsKKworCQlzd2l0Y2ggKGZyYW1lLT5ncmFic3RhdGUpIHsKKwkJY2FzZSBGUkFNRV9VTlVTRUQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY2FzZSBGUkFNRV9SRUFEWToKKwkJY2FzZSBGUkFNRV9HUkFCQklORzoKKwkJY2FzZSBGUkFNRV9FUlJPUjoKK3JlZG86CisJCQlpZiAoIW92LT5kZXYpCisJCQkJcmV0dXJuIC1FSU87CisKKwkJCXJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGZyYW1lLT53cSwKKwkJCSAgICAoZnJhbWUtPmdyYWJzdGF0ZSA9PSBGUkFNRV9ET05FKQorCQkJICAgIHx8IChmcmFtZS0+Z3JhYnN0YXRlID09IEZSQU1FX0VSUk9SKSk7CisKKwkJCWlmIChyYykKKwkJCQlyZXR1cm4gcmM7CisKKwkJCWlmIChmcmFtZS0+Z3JhYnN0YXRlID09IEZSQU1FX0VSUk9SKSB7CisJCQkJaWYgKChyYyA9IG92NTF4X25ld19mcmFtZShvdiwgZm51bSkpIDwgMCkKKwkJCQkJcmV0dXJuIHJjOworCQkJCWdvdG8gcmVkbzsKKwkJCX0KKwkJCS8qIEZhbGwgdGhyb3VnaCAqLworCQljYXNlIEZSQU1FX0RPTkU6CisJCQlpZiAob3YtPnNuYXBfZW5hYmxlZCAmJiAhZnJhbWUtPnNuYXBzaG90KSB7CisJCQkJaWYgKChyYyA9IG92NTF4X25ld19mcmFtZShvdiwgZm51bSkpIDwgMCkKKwkJCQkJcmV0dXJuIHJjOworCQkJCWdvdG8gcmVkbzsKKwkJCX0KKworCQkJZnJhbWUtPmdyYWJzdGF0ZSA9IEZSQU1FX1VOVVNFRDsKKworCQkJLyogUmVzZXQgdGhlIGhhcmR3YXJlIHNuYXBzaG90IGJ1dHRvbiAqLworCQkJLyogRklYTUUgLSBJcyB0aGlzIHRoZSBiZXN0IHBsYWNlIGZvciB0aGlzPyAqLworCQkJaWYgKChvdi0+c25hcF9lbmFibGVkKSAmJiAoZnJhbWUtPnNuYXBzaG90KSkgeworCQkJCWZyYW1lLT5zbmFwc2hvdCA9IDA7CisJCQkJb3Y1MXhfY2xlYXJfc25hcHNob3Qob3YpOworCQkJfQorCisJCQkvKiBEZWNvbXByZXNzaW9uLCBmb3JtYXQgY29udmVyc2lvbiwgZXRjLi4uICovCisJCQlvdjUxeF9wb3N0cHJvY2VzcyhvdiwgZnJhbWUpOworCisJCQlicmVhazsKKwkJfSAvKiBlbmQgc3dpdGNoICovCisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DR0ZCVUY6CisJeworCQlzdHJ1Y3QgdmlkZW9fYnVmZmVyICp2YiA9IGFyZzsKKworCQlQREVCVUcoNCwgIlZJRElPQ0dGQlVGIik7CisKKwkJbWVtc2V0KHZiLCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX2J1ZmZlcikpOworCisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ0dVTklUOgorCXsKKwkJc3RydWN0IHZpZGVvX3VuaXQgKnZ1ID0gYXJnOworCisJCVBERUJVRyg0LCAiVklESU9DR1VOSVQiKTsKKworCQltZW1zZXQodnUsIDAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fdW5pdCkpOworCisJCXZ1LT52aWRlbyA9IG92LT52ZGV2LT5taW5vcjsKKwkJdnUtPnZiaSA9IFZJREVPX05PX1VOSVQ7CisJCXZ1LT5yYWRpbyA9IFZJREVPX05PX1VOSVQ7CisJCXZ1LT5hdWRpbyA9IFZJREVPX05PX1VOSVQ7CisJCXZ1LT50ZWxldGV4dCA9IFZJREVPX05PX1VOSVQ7CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgT1Y1MTFJT0NfV0kyQzoKKwl7CisJCXN0cnVjdCBvdjUxMV9pMmNfc3RydWN0ICp3ID0gYXJnOworCisJCXJldHVybiBpMmNfd19zbGF2ZShvdiwgdy0+c2xhdmUsIHctPnJlZywgdy0+dmFsdWUsIHctPm1hc2spOworCX0KKwljYXNlIE9WNTExSU9DX1JJMkM6CisJeworCQlzdHJ1Y3Qgb3Y1MTFfaTJjX3N0cnVjdCAqciA9IGFyZzsKKwkJaW50IHJjOworCisJCXJjID0gaTJjX3Jfc2xhdmUob3YsIHItPnNsYXZlLCByLT5yZWcpOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCisJCXItPnZhbHVlID0gcmM7CisJCXJldHVybiAwOworCX0KKwlkZWZhdWx0OgorCQlQREVCVUcoMywgIlVuc3VwcG9ydGVkIElPQ3RsOiAweCVYIiwgY21kKTsKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9IC8qIGVuZCBzd2l0Y2ggKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitvdjUxeF92NGwxX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXNiX292NTExICpvdiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCWludCByYzsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJm92LT5sb2NrKSkKKwkJcmV0dXJuIC1FSU5UUjsKKworCXJjID0gdmlkZW9fdXNlcmNvcHkoaW5vZGUsIGZpbGUsIGNtZCwgYXJnLCBvdjUxeF92NGwxX2lvY3RsX2ludGVybmFsKTsKKworCXVwKCZvdi0+bG9jayk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgc3NpemVfdAorb3Y1MXhfdjRsMV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgbm9ibG9jayA9IGZpbGUtPmZfZmxhZ3MmT19OT05CTE9DSzsKKwl1bnNpZ25lZCBsb25nIGNvdW50ID0gY250OworCXN0cnVjdCB1c2Jfb3Y1MTEgKm92ID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CisJaW50IGksIHJjID0gMCwgZnJteCA9IC0xOworCXN0cnVjdCBvdjUxMV9mcmFtZSAqZnJhbWU7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZvdi0+bG9jaykpCisJCXJldHVybiAtRUlOVFI7CisKKwlQREVCVUcoNCwgIiVsZCBieXRlcywgbm9ibG9jaz0lZCIsIGNvdW50LCBub2Jsb2NrKTsKKworCWlmICghdmRldiB8fCAhYnVmKSB7CisJCXJjID0gLUVGQVVMVDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAoIW92LT5kZXYpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIGVycm9yOworCX0KKworLy8gRklYTUU6IE9ubHkgc3VwcG9ydHMgdHdvIGZyYW1lcworCS8qIFNlZSBpZiBhIGZyYW1lIGlzIGNvbXBsZXRlZCwgdGhlbiB1c2UgaXQuICovCisJaWYgKG92LT5mcmFtZVswXS5ncmFic3RhdGUgPj0gRlJBTUVfRE9ORSkJLyogX0RPTkUgb3IgX0VSUk9SICovCisJCWZybXggPSAwOworCWVsc2UgaWYgKG92LT5mcmFtZVsxXS5ncmFic3RhdGUgPj0gRlJBTUVfRE9ORSkvKiBfRE9ORSBvciBfRVJST1IgKi8KKwkJZnJteCA9IDE7CisKKwkvKiBJZiBub25ibG9ja2luZyB3ZSByZXR1cm4gaW1tZWRpYXRlbHkgKi8KKwlpZiAobm9ibG9jayAmJiAoZnJteCA9PSAtMSkpIHsKKwkJcmMgPSAtRUFHQUlOOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIElmIG5vIEZSQU1FX0RPTkUsIGxvb2sgZm9yIGEgRlJBTUVfR1JBQkJJTkcgc3RhdGUuICovCisJLyogU2VlIGlmIGEgZnJhbWUgaXMgaW4gcHJvY2VzcyAoZ3JhYmJpbmcpLCB0aGVuIHVzZSBpdC4gKi8KKwlpZiAoZnJteCA9PSAtMSkgeworCQlpZiAob3YtPmZyYW1lWzBdLmdyYWJzdGF0ZSA9PSBGUkFNRV9HUkFCQklORykKKwkJCWZybXggPSAwOworCQllbHNlIGlmIChvdi0+ZnJhbWVbMV0uZ3JhYnN0YXRlID09IEZSQU1FX0dSQUJCSU5HKQorCQkJZnJteCA9IDE7CisJfQorCisJLyogSWYgbm8gZnJhbWUgaXMgYWN0aXZlLCBzdGFydCBvbmUuICovCisJaWYgKGZybXggPT0gLTEpIHsKKwkJaWYgKChyYyA9IG92NTF4X25ld19mcmFtZShvdiwgZnJteCA9IDApKSkgeworCQkJZXJyKCJyZWFkOiBvdjUxeF9uZXdfZnJhbWUgZXJyb3IiKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKKwlmcmFtZSA9ICZvdi0+ZnJhbWVbZnJteF07CisKK3Jlc3RhcnQ6CisJaWYgKCFvdi0+ZGV2KSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBXYWl0IHdoaWxlIHdlJ3JlIGdyYWJiaW5nIHRoZSBpbWFnZSAqLworCVBERUJVRyg0LCAiV2FpdGluZyBpbWFnZSBncmFiYmluZyIpOworCXJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGZyYW1lLT53cSwKKwkJKGZyYW1lLT5ncmFic3RhdGUgPT0gRlJBTUVfRE9ORSkKKwkJfHwgKGZyYW1lLT5ncmFic3RhdGUgPT0gRlJBTUVfRVJST1IpKTsKKworCWlmIChyYykKKwkJZ290byBlcnJvcjsKKworCVBERUJVRyg0LCAiR290IGltYWdlLCBmcmFtZS0+Z3JhYnN0YXRlID0gJWQiLCBmcmFtZS0+Z3JhYnN0YXRlKTsKKwlQREVCVUcoNCwgImJ5dGVzX3JlY3ZkID0gJWQiLCBmcmFtZS0+Ynl0ZXNfcmVjdmQpOworCisJaWYgKGZyYW1lLT5ncmFic3RhdGUgPT0gRlJBTUVfRVJST1IpIHsKKwkJZnJhbWUtPmJ5dGVzX3JlYWQgPSAwOworCQllcnIoIioqIGljayEgKiogRXJyb3JlZCBmcmFtZSAlZCIsIG92LT5jdXJmcmFtZSk7CisJCWlmIChvdjUxeF9uZXdfZnJhbWUob3YsIGZybXgpKSB7CisJCQllcnIoInJlYWQ6IG92NTF4X25ld19mcmFtZSBlcnJvciIpOworCQkJZ290byBlcnJvcjsKKwkJfQorCQlnb3RvIHJlc3RhcnQ7CisJfQorCisKKwkvKiBSZXBlYXQgdW50aWwgd2UgZ2V0IGEgc25hcHNob3QgZnJhbWUgKi8KKwlpZiAob3YtPnNuYXBfZW5hYmxlZCkKKwkJUERFQlVHKDQsICJXYWl0aW5nIHNuYXBzaG90IGZyYW1lIik7CisJaWYgKG92LT5zbmFwX2VuYWJsZWQgJiYgIWZyYW1lLT5zbmFwc2hvdCkgeworCQlmcmFtZS0+Ynl0ZXNfcmVhZCA9IDA7CisJCWlmICgocmMgPSBvdjUxeF9uZXdfZnJhbWUob3YsIGZybXgpKSkgeworCQkJZXJyKCJyZWFkOiBvdjUxeF9uZXdfZnJhbWUgZXJyb3IiKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJZ290byByZXN0YXJ0OworCX0KKworCS8qIENsZWFyIHRoZSBzbmFwc2hvdCAqLworCWlmIChvdi0+c25hcF9lbmFibGVkICYmIGZyYW1lLT5zbmFwc2hvdCkgeworCQlmcmFtZS0+c25hcHNob3QgPSAwOworCQlvdjUxeF9jbGVhcl9zbmFwc2hvdChvdik7CisJfQorCisJLyogRGVjb21wcmVzc2lvbiwgZm9ybWF0IGNvbnZlcnNpb24sIGV0Yy4uLiAqLworCW92NTF4X3Bvc3Rwcm9jZXNzKG92LCBmcmFtZSk7CisKKwlQREVCVUcoNCwgImZybXg9JWQsIGJ5dGVzX3JlYWQ9JWxkLCBsZW5ndGg9JWxkIiwgZnJteCwKKwkJZnJhbWUtPmJ5dGVzX3JlYWQsCisJCWdldF9mcmFtZV9sZW5ndGgoZnJhbWUpKTsKKworCS8qIGNvcHkgYnl0ZXMgdG8gdXNlciBzcGFjZTsgd2UgYWxsb3cgZm9yIHBhcnRpYWxzIHJlYWRzICovCisvLwlpZiAoKGNvdW50ICsgZnJhbWUtPmJ5dGVzX3JlYWQpCisvLwkgICAgPiBnZXRfZnJhbWVfbGVuZ3RoKChzdHJ1Y3Qgb3Y1MTFfZnJhbWUgKilmcmFtZSkpCisvLwkJY291bnQgPSBmcmFtZS0+c2Nhbmxlbmd0aCAtIGZyYW1lLT5ieXRlc19yZWFkOworCisJLyogRklYTUUgLSBjb3VudCBoYXJkd2lyZWQgdG8gYmUgb25lIGZyYW1lLi4uICovCisJY291bnQgPSBnZXRfZnJhbWVfbGVuZ3RoKGZyYW1lKTsKKworCVBERUJVRyg0LCAiQ29weSB0byB1c2VyIHNwYWNlOiAlbGQgYnl0ZXMiLCBjb3VudCk7CisJaWYgKChpID0gY29weV90b191c2VyKGJ1ZiwgZnJhbWUtPmRhdGEgKyBmcmFtZS0+Ynl0ZXNfcmVhZCwgY291bnQpKSkgeworCQlQREVCVUcoNCwgIkNvcHkgZmFpbGVkISAlZCBieXRlcyBub3QgY29waWVkIiwgaSk7CisJCXJjID0gLUVGQVVMVDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlmcmFtZS0+Ynl0ZXNfcmVhZCArPSBjb3VudDsKKwlQREVCVUcoNCwgIntjb3B5fSBjb3VudCB1c2VkPSVsZCwgbmV3IGJ5dGVzX3JlYWQ9JWxkIiwKKwkJY291bnQsIGZyYW1lLT5ieXRlc19yZWFkKTsKKworCS8qIElmIGFsbCBkYXRhIGhhdmUgYmVlbiByZWFkLi4uICovCisJaWYgKGZyYW1lLT5ieXRlc19yZWFkCisJICAgID49IGdldF9mcmFtZV9sZW5ndGgoZnJhbWUpKSB7CisJCWZyYW1lLT5ieXRlc19yZWFkID0gMDsKKworLy8gRklYTUU6IE9ubHkgc3VwcG9ydHMgdHdvIGZyYW1lcworCQkvKiBNYXJrIGl0IGFzIGF2YWlsYWJsZSB0byBiZSB1c2VkIGFnYWluLiAqLworCQlvdi0+ZnJhbWVbZnJteF0uZ3JhYnN0YXRlID0gRlJBTUVfVU5VU0VEOworCQlpZiAoKHJjID0gb3Y1MXhfbmV3X2ZyYW1lKG92LCAhZnJteCkpKSB7CisJCQllcnIoIm92NTF4X25ld19mcmFtZSByZXR1cm5lZCBlcnJvciIpOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0KKworCVBERUJVRyg0LCAicmVhZCBmaW5pc2hlZCwgcmV0dXJuaW5nICVsZCAoc3dlZXQpIiwgY291bnQpOworCisJdXAoJm92LT5sb2NrKTsKKwlyZXR1cm4gY291bnQ7CisKK2Vycm9yOgorCXVwKCZvdi0+bG9jayk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitvdjUxeF92NGwxX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzaXplICA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKKwlzdHJ1Y3QgdXNiX292NTExICpvdiA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworCXVuc2lnbmVkIGxvbmcgcGFnZSwgcG9zOworCisJaWYgKG92LT5kZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU87CisKKwlQREVCVUcoNCwgIm1tYXA6ICVsZCAoJWxYKSBieXRlcyIsIHNpemUsIHNpemUpOworCisJaWYgKHNpemUgPiAoKChPVjUxMV9OVU1GUkFNRVMKKwkgICAgICAgICAgICAgICogTUFYX0RBVEFfU0laRShvdi0+bWF4d2lkdGgsIG92LT5tYXhoZWlnaHQpCisJICAgICAgICAgICAgICArIFBBR0VfU0laRSAtIDEpICYgfihQQUdFX1NJWkUgLSAxKSkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJm92LT5sb2NrKSkKKwkJcmV0dXJuIC1FSU5UUjsKKworCXBvcyA9ICh1bnNpZ25lZCBsb25nKW92LT5mYnVmOworCXdoaWxlIChzaXplID4gMCkgeworCQlwYWdlID0gdm1hbGxvY190b19wZm4oKHZvaWQgKilwb3MpOworCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UsIFBBR0VfU0laRSwgUEFHRV9TSEFSRUQpKSB7CisJCQl1cCgmb3YtPmxvY2spOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwkJc3RhcnQgKz0gUEFHRV9TSVpFOworCQlwb3MgKz0gUEFHRV9TSVpFOworCQlpZiAoc2l6ZSA+IFBBR0VfU0laRSkKKwkJCXNpemUgLT0gUEFHRV9TSVpFOworCQllbHNlCisJCQlzaXplID0gMDsKKwl9CisKKwl1cCgmb3YtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvdjUxMV9mb3BzID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5vcGVuID0JCW92NTF4X3Y0bDFfb3BlbiwKKwkucmVsZWFzZSA9CW92NTF4X3Y0bDFfY2xvc2UsCisJLnJlYWQgPQkJb3Y1MXhfdjRsMV9yZWFkLAorCS5tbWFwID0JCW92NTF4X3Y0bDFfbW1hcCwKKwkuaW9jdGwgPQlvdjUxeF92NGwxX2lvY3RsLAorCS5sbHNlZWsgPQlub19sbHNlZWssCit9OworCitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2X3RlbXBsYXRlID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJPVjUxMSBVU0IgQ2FtZXJhIiwKKwkudHlwZSA9CQlWSURfVFlQRV9DQVBUVVJFLAorCS5oYXJkd2FyZSA9CVZJRF9IQVJEV0FSRV9PVjUxMSwKKwkuZm9wcyA9CQkmb3Y1MTFfZm9wcywKKwkucmVsZWFzZSA9CXZpZGVvX2RldmljZV9yZWxlYXNlLAorCS5taW5vciA9CS0xLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBPVjUxMSBhbmQgc2Vuc29yIGNvbmZpZ3VyYXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGluaXRpYWxpemVzIHRoZSBPVjc2MTAsIE9WNzYyMCwgb3IgT1Y3NkJFIHNlbnNvci4gVGhlIE9WNzZCRSB1c2VzCisgKiB0aGUgc2FtZSByZWdpc3RlciBzZXR0aW5ncyBhcyB0aGUgT1Y3NjEwLCBzaW5jZSB0aGV5IGFyZSB2ZXJ5IHNpbWlsYXIuCisgKi8KK3N0YXRpYyBpbnQKK292N3h4MF9jb25maWd1cmUoc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJaW50IGksIHN1Y2Nlc3M7CisJaW50IHJjOworCisJLyogTGF3cmVuY2UgR2xhaXN0ZXIgPGxnQGpmbS5iYy5jYT4gcmVwb3J0czoKKwkgKgorCSAqIFJlZ2lzdGVyIDB4MGYgaW4gdGhlIDc2MTAgaGFzIHRoZSBmb2xsb3dpbmcgZWZmZWN0czoKKwkgKgorCSAqIDB4ODUgKEFFQyBtZXRob2QgMSk6IEJlc3Qgb3ZlcmFsbCwgZ29vZCBjb250cmFzdCByYW5nZQorCSAqIDB4NDUgKEFFQyBtZXRob2QgMik6IFZlcnkgb3ZlcmV4cG9zZWQKKwkgKiAweGE1IChzcGVjIHNoZWV0IGRlZmF1bHQpOiBPaywgYnV0IHRoZSBibGFjayBsZXZlbCBpcworCSAqCXNoaWZ0ZWQgcmVzdWx0aW5nIGluIGxvc3Mgb2YgY29udHJhc3QKKwkgKiAweDA1IChvbGQgZHJpdmVyIHNldHRpbmcpOiB2ZXJ5IG92ZXJleHBvc2VkLCB0b28gbXVjaAorCSAqCWNvbnRyYXN0CisJICovCisJc3RhdGljIHN0cnVjdCBvdjUxMV9yZWd2YWxzIGFSZWd2YWxzTm9ybTc2MTBbXSA9IHsKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDEwLCAweGZmIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxNiwgMHgwNiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MjgsIDB4MjQgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDJiLCAweGFjIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxMiwgMHgwMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MzgsIDB4ODEgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDI4LCAweDI0IH0sCS8qIDBjICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwZiwgMHg4NSB9LAkvKiBsZydzIHNldHRpbmcgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDE1LCAweDAxIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyMCwgMHgxYyB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MjMsIDB4MmEgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDI0LCAweDEwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyNSwgMHg4YSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MjYsIDB4YTIgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDI3LCAweGMyIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyYSwgMHgwNCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MmMsIDB4ZmUgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDJkLCAweDkzIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgzMCwgMHg3MSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MzEsIDB4NjAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDMyLCAweDI2IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgzMywgMHgyMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MzQsIDB4NDggfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDEyLCAweDI0IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxMSwgMHgwMSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MGMsIDB4MjQgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDBkLCAweDI0IH0sCisJCXsgT1Y1MTFfRE9ORV9CVVMsIDB4MCwgMHgwMCB9LAorCX07CisKKwlzdGF0aWMgc3RydWN0IG92NTExX3JlZ3ZhbHMgYVJlZ3ZhbHNOb3JtNzYyMFtdID0geworCQl7IE9WNTExX0kyQ19CVVMsIDB4MDAsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDAxLCAweDgwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwMiwgMHg4MCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MDMsIDB4YzAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDA2LCAweDYwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwNywgMHgwMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MGMsIDB4MjQgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDBjLCAweDI0IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwZCwgMHgyNCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTEsIDB4MDEgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDEyLCAweDI0IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxMywgMHgwMSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTQsIDB4ODQgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDE1LCAweDAxIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxNiwgMHgwMyB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTcsIDB4MmYgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDE4LCAweGNmIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxOSwgMHgwNiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MWEsIDB4ZjUgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDFiLCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyMCwgMHgxOCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MjEsIDB4ODAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDIyLCAweDgwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyMywgMHgwMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MjYsIDB4YTIgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDI3LCAweGVhIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyOCwgMHgyMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MjksIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDJhLCAweDEwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyYiwgMHgwMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MmMsIDB4ODggfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDJkLCAweDkxIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyZSwgMHg4MCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MmYsIDB4NDQgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDYwLCAweDI3IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg2MSwgMHgwMiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NjIsIDB4NWYgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDYzLCAweGQ1IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg2NCwgMHg1NyB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NjUsIDB4ODMgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDY2LCAweDU1IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg2NywgMHg5MiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NjgsIDB4Y2YgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDY5LCAweDc2IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg2YSwgMHgyMiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NmIsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDZjLCAweDAyIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg2ZCwgMHg0NCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NmUsIDB4ODAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDZmLCAweDFkIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg3MCwgMHg4YiB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NzEsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDcyLCAweDE0IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg3MywgMHg1NCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NzQsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDc1LCAweDhlIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg3NiwgMHgwMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4NzcsIDB4ZmYgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDc4LCAweDgwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg3OSwgMHg4MCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4N2EsIDB4ODAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDdiLCAweGUyIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg3YywgMHgwMCB9LAorCQl7IE9WNTExX0RPTkVfQlVTLCAweDAsIDB4MDAgfSwKKwl9OworCisJUERFQlVHKDQsICJzdGFydGluZyBjb25maWd1cmF0aW9uIik7CisKKwkvKiBUaGlzIGxvb2tzIHJlZHVuZGFudCwgYnV0IGlzIG5lY2Vzc2FyeSBmb3IgV2ViQ2FtIDMgKi8KKwlvdi0+cHJpbWFyeV9pMmNfc2xhdmUgPSBPVjd4eDBfU0lEOworCWlmIChvdjUxeF9zZXRfc2xhdmVfaWRzKG92LCBPVjd4eDBfU0lEKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChpbml0X292X3NlbnNvcihvdikgPj0gMCkgeworCQlQREVCVUcoMSwgIk9WN3h4MCBzZW5zb3IgaW5pdGFsaXplZCAobWV0aG9kIDEpIik7CisJfSBlbHNlIHsKKwkJLyogUmVzZXQgdGhlIDc2eHggKi8KKwkJaWYgKGkyY193KG92LCAweDEyLCAweDgwKSA8IDApCisJCQlyZXR1cm4gLTE7CisKKwkJLyogV2FpdCBmb3IgaXQgdG8gaW5pdGlhbGl6ZSAqLworCQltc2xlZXAoMTUwKTsKKworCQlpID0gMDsKKwkJc3VjY2VzcyA9IDA7CisJCXdoaWxlIChpIDw9IGkyY19kZXRlY3RfdHJpZXMpIHsKKwkJCWlmICgoaTJjX3Iob3YsIE9WNzYxMF9SRUdfSURfSElHSCkgPT0gMHg3RikgJiYKKwkJCSAgICAoaTJjX3Iob3YsIE9WNzYxMF9SRUdfSURfTE9XKSA9PSAweEEyKSkgeworCQkJCXN1Y2Nlc3MgPSAxOworCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQlpKys7CisJCQl9CisJCX0KKworLy8gV2FzIChpID09IGkyY19kZXRlY3RfdHJpZXMpIHByZXZpb3VzbHkuIFRoaXMgb2J2aW91c2x5IHVzZWQgdG8gYWx3YXlzIHJlcG9ydAorLy8gc3VjY2Vzcy4gV2hldGhlciBhbnlvbmUgYWN0dWFsbHkgZGVwZW5kZWQgb24gdGhhdCBidWcgaXMgdW5rbm93bgorCQlpZiAoKGkgPj0gaTJjX2RldGVjdF90cmllcykgJiYgKHN1Y2Nlc3MgPT0gMCkpIHsKKwkJCWVycigiRmFpbGVkIHRvIHJlYWQgc2Vuc29yIElELiBZb3UgbWlnaHQgbm90IGhhdmUgYW4iKTsKKwkJCWVycigiT1Y3NjEwLzIwLCBvciBpdCBtYXkgYmUgbm90IHJlc3BvbmRpbmcuIFJlcG9ydCIpOworCQkJZXJyKCJ0aGlzIHRvICIgRU1BSUwpOworCQkJZXJyKCJUaGlzIGlzIG9ubHkgYSB3YXJuaW5nLiBZb3UgY2FuIGF0dGVtcHQgdG8gdXNlIik7CisJCQllcnIoInlvdXIgY2FtZXJhIGFueXdheSIpOworLy8gT25seSBpc3N1ZSBhIHdhcm5pbmcgZm9yIG5vdworLy8JCQlyZXR1cm4gLTE7CisJCX0gZWxzZSB7CisJCQlQREVCVUcoMSwgIk9WN3h4MCBpbml0aWFsaXplZCAobWV0aG9kIDIsICVkeCkiLCBpKzEpOworCQl9CisJfQorCisJLyogRGV0ZWN0IHNlbnNvciAoc3ViKXR5cGUgKi8KKwlyYyA9IGkyY19yKG92LCBPVjc2MTBfUkVHX0NPTV9JKTsKKworCWlmIChyYyA8IDApIHsKKwkJZXJyKCJFcnJvciBkZXRlY3Rpbmcgc2Vuc29yIHR5cGUiKTsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSBpZiAoKHJjICYgMykgPT0gMykgeworCQlpbmZvKCJTZW5zb3IgaXMgYW4gT1Y3NjEwIik7CisJCW92LT5zZW5zb3IgPSBTRU5fT1Y3NjEwOworCX0gZWxzZSBpZiAoKHJjICYgMykgPT0gMSkgeworCQkvKiBJIGRvbid0IGtub3cgd2hhdCdzIGRpZmZlcmVudCBhYm91dCB0aGUgNzZCRSB5ZXQuICovCisJCWlmIChpMmNfcihvdiwgMHgxNSkgJiAxKQorCQkJaW5mbygiU2Vuc29yIGlzIGFuIE9WNzYyMEFFIik7CisJCWVsc2UKKwkJCWluZm8oIlNlbnNvciBpcyBhbiBPVjc2QkUiKTsKKworCQkvKiBPVjUxMSsgd2lsbCByZXR1cm4gYWxsIHplcm8gaXNvYyBkYXRhIHVubGVzcyB3ZQorCQkgKiBjb25maWd1cmUgdGhlIHNlbnNvciBhcyBhIDc2MjAuIFNvbWVvbmUgbmVlZHMgdG8KKwkJICogZmluZCB0aGUgZXhhY3QgcmVnLiBzZXR0aW5nIHRoYXQgY2F1c2VzIHRoaXMuICovCisJCWlmIChvdi0+YnJpZGdlID09IEJSR19PVjUxMVBMVVMpIHsKKwkJCWluZm8oIkVuYWJsaW5nIDUxMSsvNzYyMEFFIHdvcmthcm91bmQiKTsKKwkJCW92LT5zZW5zb3IgPSBTRU5fT1Y3NjIwOworCQl9IGVsc2UgeworCQkJb3YtPnNlbnNvciA9IFNFTl9PVjc2QkU7CisJCX0KKwl9IGVsc2UgaWYgKChyYyAmIDMpID09IDApIHsKKwkJaW5mbygiU2Vuc29yIGlzIGFuIE9WNzYyMCIpOworCQlvdi0+c2Vuc29yID0gU0VOX09WNzYyMDsKKwl9IGVsc2UgeworCQllcnIoIlVua25vd24gaW1hZ2Ugc2Vuc29yIHZlcnNpb246ICVkIiwgcmMgJiAzKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChvdi0+c2Vuc29yID09IFNFTl9PVjc2MjApIHsKKwkJUERFQlVHKDQsICJXcml0aW5nIDc2MjAgcmVnaXN0ZXJzIik7CisJCWlmICh3cml0ZV9yZWd2YWxzKG92LCBhUmVndmFsc05vcm03NjIwKSkKKwkJCXJldHVybiAtMTsKKwl9IGVsc2UgeworCQlQREVCVUcoNCwgIldyaXRpbmcgNzYxMCByZWdpc3RlcnMiKTsKKwkJaWYgKHdyaXRlX3JlZ3ZhbHMob3YsIGFSZWd2YWxzTm9ybTc2MTApKQorCQkJcmV0dXJuIC0xOworCX0KKworCS8qIFNldCBzZW5zb3Itc3BlY2lmaWMgdmFycyAqLworCW92LT5tYXh3aWR0aCA9IDY0MDsKKwlvdi0+bWF4aGVpZ2h0ID0gNDgwOworCW92LT5taW53aWR0aCA9IDY0OworCW92LT5taW5oZWlnaHQgPSA0ODsKKworCS8vIEZJWE1FOiBUaGVzZSBkbyBub3QgbWF0Y2ggdGhlIGFjdHVhbCBzZXR0aW5ncyB5ZXQKKwlvdi0+YnJpZ2h0bmVzcyA9IDB4ODAgPDwgODsKKwlvdi0+Y29udHJhc3QgPSAweDgwIDw8IDg7CisJb3YtPmNvbG91ciA9IDB4ODAgPDwgODsKKwlvdi0+aHVlID0gMHg4MCA8PCA4OworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgaW5pdGlhbGl6ZXMgdGhlIE9WNjYyMCwgT1Y2NjMwLCBPVjY2MzBBRSwgb3IgT1Y2NjMwQUYgc2Vuc29yLiAqLworc3RhdGljIGludAorb3Y2eHgwX2NvbmZpZ3VyZShzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlpbnQgcmM7CisKKwlzdGF0aWMgc3RydWN0IG92NTExX3JlZ3ZhbHMgYVJlZ3ZhbHNOb3JtNngyMFtdID0geworCQl7IE9WNTExX0kyQ19CVVMsIDB4MTIsIDB4ODAgfSwgLyogcmVzZXQgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDExLCAweDAxIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwMywgMHg2MCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MDUsIDB4N2YgfSwgLyogRm9yIHdoZW4gYXV0b2FkanVzdCBpcyBvZmYgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDA3LCAweGE4IH0sCisJCS8qIFRoZSByYXRpbyBvZiAweDBjIGFuZCAweDBkICBjb250cm9scyB0aGUgd2hpdGUgcG9pbnQgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDBjLCAweDI0IH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwZCwgMHgyNCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MGYsIDB4MTUgfSwgLyogQ09NUyAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4MTAsIDB4NzUgfSwgLyogQUVDIEV4cG9zdXJlIHRpbWUgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDEyLCAweDI0IH0sIC8qIEVuYWJsZSBBR0MgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDE0LCAweDA0IH0sCisJCS8qIDB4MTY6IDB4MDYgaGVscHMgZnJhbWUgc3RhYmlsaXR5IHdpdGggbW92aW5nIG9iamVjdHMgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDE2LCAweDA2IH0sCisvLwkJeyBPVjUxMV9JMkNfQlVTLCAweDIwLCAweDMwIH0sIC8qIEFwZXJ0dXJlIGNvcnJlY3Rpb24gZW5hYmxlICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyNiwgMHhiMiB9LCAvKiBCTEMgZW5hYmxlICovCisJCS8qIDB4Mjg6IDB4MDUgU2VsZWN0cyBSR0IgZm9ybWF0IGlmIFJHQiBvbiAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4MjgsIDB4MDUgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDJhLCAweDA0IH0sIC8qIERpc2FibGUgZnJhbWVyYXRlIGFkanVzdCAqLworLy8JCXsgT1Y1MTFfSTJDX0JVUywgMHgyYiwgMHhhYyB9LCAvKiBGcmFtZXJhdGU7IFNldCAyYVs3XSBmaXJzdCAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4MmQsIDB4OTkgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDMzLCAweGEwIH0sIC8qIENvbG9yIFByb2Nlc2luZyBQYXJhbWV0ZXIgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDM0LCAweGQyIH0sIC8qIE1heCBBL0QgcmFuZ2UgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDM4LCAweDhiIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgzOSwgMHg0MCB9LAorCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgzYywgMHgzOSB9LCAvKiBFbmFibGUgQUVDIG1vZGUgY2hhbmdpbmcgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDNjLCAweDNjIH0sIC8qIENoYW5nZSBBRUMgbW9kZSAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4M2MsIDB4MjQgfSwgLyogRGlzYWJsZSBBRUMgbW9kZSBjaGFuZ2luZyAqLworCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgzZCwgMHg4MCB9LAorCQkvKiBUaGVzZSBuZXh0IHR3byByZWdpc3RlcnMgKDB4NGEsIDB4NGIpIGFyZSB1bmRvY3VtZW50ZWQuIFRoZXkKKwkJICogY29udHJvbCB0aGUgY29sb3IgYmFsYW5jZSAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4NGEsIDB4ODAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDRiLCAweDgwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg0ZCwgMHhkMiB9LCAvKiBUaGlzIHJlZHVjZXMgbm9pc2UgYSBiaXQgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDRlLCAweGMxIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg0ZiwgMHgwNCB9LAorLy8gRG8gNTAtNTMgaGF2ZSBhbnkgZWZmZWN0PworLy8gVG9nZ2xlIDB4MTJbMl0gb2ZmIGFuZCBvbiBoZXJlPworCQl7IE9WNTExX0RPTkVfQlVTLCAweDAsIDB4MDAgfSwJLyogRU5EIE1BUktFUiAqLworCX07CisKKwlzdGF0aWMgc3RydWN0IG92NTExX3JlZ3ZhbHMgYVJlZ3ZhbHNOb3JtNngzMFtdID0geworCS8qT0sqLwl7IE9WNTExX0kyQ19CVVMsIDB4MTIsIDB4ODAgfSwgLyogcmVzZXQgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDExLCAweDAwIH0sCisJLypPSyovCXsgT1Y1MTFfSTJDX0JVUywgMHgwMywgMHg2MCB9LAorCS8qMEE/Ki8JeyBPVjUxMV9JMkNfQlVTLCAweDA1LCAweDdmIH0sIC8qIEZvciB3aGVuIGF1dG9hZGp1c3QgaXMgb2ZmICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwNywgMHhhOCB9LAorCQkvKiBUaGUgcmF0aW8gb2YgMHgwYyBhbmQgMHgwZCAgY29udHJvbHMgdGhlIHdoaXRlIHBvaW50ICovCisJLypPSyovCXsgT1Y1MTFfSTJDX0JVUywgMHgwYywgMHgyNCB9LAorCS8qT0sqLwl7IE9WNTExX0kyQ19CVVMsIDB4MGQsIDB4MjQgfSwKKwkvKkEqLwl7IE9WNTExX0kyQ19CVVMsIDB4MGUsIDB4MjAgfSwKKy8vCS8qMDQ/Ki8JeyBPVjUxMV9JMkNfQlVTLCAweDE0LCAweDgwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxNiwgMHgwMyB9LAorLy8JLypPSyovCXsgT1Y1MTFfSTJDX0JVUywgMHgyMCwgMHgzMCB9LCAvKiBBcGVydHVyZSBjb3JyZWN0aW9uIGVuYWJsZSAqLworCQkvLyAyMSAmIDIyPyBUaGUgc3VnZ2VzdGVkIHZhbHVlcyBsb29rIHdyb25nLiBHbyB3aXRoIGRlZmF1bHQKKwkvKkEqLwl7IE9WNTExX0kyQ19CVVMsIDB4MjMsIDB4YzAgfSwKKwkvKkEqLwl7IE9WNTExX0kyQ19CVVMsIDB4MjUsIDB4OWEgfSwgLy8gQ2hlY2sgdGhpcyBhZ2FpbnN0IGRlZmF1bHQKKy8vCS8qT0sqLwl7IE9WNTExX0kyQ19CVVMsIDB4MjYsIDB4YjIgfSwgLyogQkxDIGVuYWJsZSAqLworCisJCS8qIDB4Mjg6IDB4MDUgU2VsZWN0cyBSR0IgZm9ybWF0IGlmIFJHQiBvbiAqLworLy8JLyowND8qLwl7IE9WNTExX0kyQ19CVVMsIDB4MjgsIDB4MDUgfSwKKy8vCS8qMDQ/Ki8JeyBPVjUxMV9JMkNfQlVTLCAweDI4LCAweDQ1IH0sIC8vIERFQlVHOiBUcmlzdGF0ZSBVViBidXMKKworCS8qT0sqLwl7IE9WNTExX0kyQ19CVVMsIDB4MmEsIDB4MDQgfSwgLyogRGlzYWJsZSBmcmFtZXJhdGUgYWRqdXN0ICovCisvLwkvKk9LKi8JeyBPVjUxMV9JMkNfQlVTLCAweDJiLCAweGFjIH0sIC8qIEZyYW1lcmF0ZTsgU2V0IDJhWzddIGZpcnN0ICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgyZCwgMHg5OSB9LAorLy8JLypBKi8JeyBPVjUxMV9JMkNfQlVTLCAweDMzLCAweDI2IH0sIC8vIFJlc2VydmVkIGJpdHMgb24gNjYyMAorLy8JLypkMj8qLwl7IE9WNTExX0kyQ19CVVMsIDB4MzQsIDB4MDMgfSwgLyogTWF4IEEvRCByYW5nZSAqLworLy8JLyo4Yj8qLwl7IE9WNTExX0kyQ19CVVMsIDB4MzgsIDB4ODMgfSwKKy8vCS8qNDA/Ki8JeyBPVjUxMV9JMkNfQlVTLCAweDM5LCAweGMwIH0sIC8vIDY2MzAgYWRkcyBiaXQgNworLy8JCXsgT1Y1MTFfSTJDX0JVUywgMHgzYywgMHgzOSB9LCAvKiBFbmFibGUgQUVDIG1vZGUgY2hhbmdpbmcgKi8KKy8vCQl7IE9WNTExX0kyQ19CVVMsIDB4M2MsIDB4M2MgfSwgLyogQ2hhbmdlIEFFQyBtb2RlICovCisvLwkJeyBPVjUxMV9JMkNfQlVTLCAweDNjLCAweDI0IH0sIC8qIERpc2FibGUgQUVDIG1vZGUgY2hhbmdpbmcgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDNkLCAweDgwIH0sCisvLwkvKkEqLwl7IE9WNTExX0kyQ19CVVMsIDB4M2YsIDB4MGUgfSwKKworCQkvKiBUaGVzZSBuZXh0IHR3byByZWdpc3RlcnMgKDB4NGEsIDB4NGIpIGFyZSB1bmRvY3VtZW50ZWQuIFRoZXkKKwkJICogY29udHJvbCB0aGUgY29sb3IgYmFsYW5jZSAqLworLy8JLypPSz8qLwl7IE9WNTExX0kyQ19CVVMsIDB4NGEsIDB4ODAgfSwgLy8gQ2hlY2sgdGhlc2UKKy8vCS8qT0s/Ki8JeyBPVjUxMV9JMkNfQlVTLCAweDRiLCAweDgwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg0ZCwgMHgxMCB9LCAvKiBVID0gMC41NjN1LCBWID0gMC43MTR2ICovCisJLypjMT8qLwl7IE9WNTExX0kyQ19CVVMsIDB4NGUsIDB4NDAgfSwKKworCQkvKiBVViBhdmVyYWdlIG1vZGUsIGNvbG9yIGtpbGxlcjogc3Ryb25nZXN0ICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg0ZiwgMHgwNyB9LAorCisJCXsgT1Y1MTFfSTJDX0JVUywgMHg1NCwgMHgyMyB9LCAvKiBNYXggQUdDIGdhaW46IDE4ZEIgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDU3LCAweDgxIH0sIC8qIChkZWZhdWx0KSAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4NTksIDB4MDEgfSwgLyogQUdDIGRhcmsgY3VycmVudCBjb21wOiArMSAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4NWEsIDB4MmMgfSwgLyogKHVuZG9jdW1lbnRlZCkgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDViLCAweDBmIH0sIC8qIEFXQiBjaHJvbWluYW5jZSBsZXZlbHMgKi8KKy8vCQl7IE9WNTExX0kyQ19CVVMsIDB4NWMsIDB4MTAgfSwKKwkJeyBPVjUxMV9ET05FX0JVUywgMHgwLCAweDAwIH0sCS8qIEVORCBNQVJLRVIgKi8KKwl9OworCisJUERFQlVHKDQsICJzdGFydGluZyBzZW5zb3IgY29uZmlndXJhdGlvbiIpOworCisJaWYgKGluaXRfb3Zfc2Vuc29yKG92KSA8IDApIHsKKwkJZXJyKCJGYWlsZWQgdG8gcmVhZCBzZW5zb3IgSUQuIFlvdSBtaWdodCBub3QgaGF2ZSBhbiBPVjZ4eDAsIik7CisJCWVycigib3IgaXQgbWF5IGJlIG5vdCByZXNwb25kaW5nLiBSZXBvcnQgdGhpcyB0byAiIEVNQUlMKTsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCVBERUJVRygxLCAiT1Y2eHgwIHNlbnNvciBkZXRlY3RlZCIpOworCX0KKworCS8qIERldGVjdCBzZW5zb3IgKHN1Yil0eXBlICovCisJcmMgPSBpMmNfcihvdiwgT1Y3NjEwX1JFR19DT01fSSk7CisKKwlpZiAocmMgPCAwKSB7CisJCWVycigiRXJyb3IgZGV0ZWN0aW5nIHNlbnNvciB0eXBlIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoKHJjICYgMykgPT0gMCkgeworCQlvdi0+c2Vuc29yID0gU0VOX09WNjYzMDsKKwkJaW5mbygiU2Vuc29yIGlzIGFuIE9WNjYzMCIpOworCX0gZWxzZSBpZiAoKHJjICYgMykgPT0gMSkgeworCQlvdi0+c2Vuc29yID0gU0VOX09WNjYyMDsKKwkJaW5mbygiU2Vuc29yIGlzIGFuIE9WNjYyMCIpOworCX0gZWxzZSBpZiAoKHJjICYgMykgPT0gMikgeworCQlvdi0+c2Vuc29yID0gU0VOX09WNjYzMDsKKwkJaW5mbygiU2Vuc29yIGlzIGFuIE9WNjYzMEFFIik7CisJfSBlbHNlIGlmICgocmMgJiAzKSA9PSAzKSB7CisJCW92LT5zZW5zb3IgPSBTRU5fT1Y2NjMwOworCQlpbmZvKCJTZW5zb3IgaXMgYW4gT1Y2NjMwQUYiKTsKKwl9CisKKwkvKiBTZXQgc2Vuc29yLXNwZWNpZmljIHZhcnMgKi8KKwlvdi0+bWF4d2lkdGggPSAzNTI7CisJb3YtPm1heGhlaWdodCA9IDI4ODsKKwlvdi0+bWlud2lkdGggPSA2NDsKKwlvdi0+bWluaGVpZ2h0ID0gNDg7CisKKwkvLyBGSVhNRTogVGhlc2UgZG8gbm90IG1hdGNoIHRoZSBhY3R1YWwgc2V0dGluZ3MgeWV0CisJb3YtPmJyaWdodG5lc3MgPSAweDgwIDw8IDg7CisJb3YtPmNvbnRyYXN0ID0gMHg4MCA8PCA4OworCW92LT5jb2xvdXIgPSAweDgwIDw8IDg7CisJb3YtPmh1ZSA9IDB4ODAgPDwgODsKKworCWlmIChvdi0+c2Vuc29yID09IFNFTl9PVjY2MjApIHsKKwkJUERFQlVHKDQsICJXcml0aW5nIDZ4MjAgcmVnaXN0ZXJzIik7CisJCWlmICh3cml0ZV9yZWd2YWxzKG92LCBhUmVndmFsc05vcm02eDIwKSkKKwkJCXJldHVybiAtMTsKKwl9IGVsc2UgeworCQlQREVCVUcoNCwgIldyaXRpbmcgNngzMCByZWdpc3RlcnMiKTsKKwkJaWYgKHdyaXRlX3JlZ3ZhbHMob3YsIGFSZWd2YWxzTm9ybTZ4MzApKQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKiBUaGlzIGluaXRpYWxpemVzIHRoZSBLUzAxMjcgYW5kIEtTMDEyN0IgdmlkZW8gZGVjb2RlcnMuICovCitzdGF0aWMgaW50IAora3MwMTI3X2NvbmZpZ3VyZShzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlpbnQgcmM7CisKKy8vIEZJWE1FOiBJIGRvbid0IGtub3cgaG93IHRvIHN5bmMgb3IgcmVzZXQgaXQgeWV0CisjaWYgMAorCWlmIChvdjUxeF9pbml0X2tzX3NlbnNvcihvdikgPCAwKSB7CisJCWVycigiRmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIEtTMDEyNyIpOworCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJUERFQlVHKDEsICJLUzAxMngoQikgc2Vuc29yIGRldGVjdGVkIik7CisJfQorI2VuZGlmCisKKwkvKiBEZXRlY3QgZGVjb2RlciBzdWJ0eXBlICovCisJcmMgPSBpMmNfcihvdiwgMHgwMCk7CisJaWYgKHJjIDwgMCkgeworCQllcnIoIkVycm9yIGRldGVjdGluZyBzZW5zb3IgdHlwZSIpOworCQlyZXR1cm4gLTE7CisJfSBlbHNlIGlmIChyYyAmIDB4MDgpIHsKKwkJcmMgPSBpMmNfcihvdiwgMHgzZCk7CisJCWlmIChyYyA8IDApIHsKKwkJCWVycigiRXJyb3IgZGV0ZWN0aW5nIHNlbnNvciB0eXBlIik7CisJCQlyZXR1cm4gLTE7CisJCX0gZWxzZSBpZiAoKHJjICYgMHgwZikgPT0gMCkgeworCQkJaW5mbygiU2Vuc29yIGlzIGEgS1MwMTI3Iik7CisJCQlvdi0+c2Vuc29yID0gU0VOX0tTMDEyNzsKKwkJfSBlbHNlIGlmICgocmMgJiAweDBmKSA9PSA5KSB7CisJCQlpbmZvKCJTZW5zb3IgaXMgYSBLUzAxMjdCIFJldi4gQSIpOworCQkJb3YtPnNlbnNvciA9IFNFTl9LUzAxMjdCOworCQl9CisJfSBlbHNlIHsKKwkJZXJyKCJFcnJvcjogU2Vuc29yIGlzIGFuIHVuc3VwcG9ydGVkIEtTMDEyMiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogU2V0IHNlbnNvci1zcGVjaWZpYyB2YXJzICovCisJb3YtPm1heHdpZHRoID0gNjQwOworCW92LT5tYXhoZWlnaHQgPSA0ODA7CisJb3YtPm1pbndpZHRoID0gNjQ7CisJb3YtPm1pbmhlaWdodCA9IDQ4OworCisJLy8gRklYTUU6IFRoZXNlIGRvIG5vdCBtYXRjaCB0aGUgYWN0dWFsIHNldHRpbmdzIHlldAorCW92LT5icmlnaHRuZXNzID0gMHg4MCA8PCA4OworCW92LT5jb250cmFzdCA9IDB4ODAgPDwgODsKKwlvdi0+Y29sb3VyID0gMHg4MCA8PCA4OworCW92LT5odWUgPSAweDgwIDw8IDg7CisKKwkvKiBUaGlzIGRldmljZSBpcyBub3Qgc3VwcG9ydGVkIHlldC4gQmFpbCBvdXQgbm93Li4uICovCisJZXJyKCJUaGlzIHNlbnNvciBpcyBub3Qgc3VwcG9ydGVkIHlldC4iKTsKKwlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBpbml0aWFsaXplcyB0aGUgU0FBNzExMUEgdmlkZW8gZGVjb2Rlci4gKi8KK3N0YXRpYyBpbnQKK3NhYTcxMTFhX2NvbmZpZ3VyZShzdHJ1Y3QgdXNiX292NTExICpvdikKK3sKKwlpbnQgcmM7CisKKwkvKiBTaW5jZSB0aGVyZSBpcyBubyByZWdpc3RlciByZXNldCBjb21tYW5kLCBhbGwgcmVnaXN0ZXJzIG11c3QgYmUKKwkgKiB3cml0dGVuLCBvdGhlcndpc2UgZ2l2ZXMgZXJyYXRpYyByZXN1bHRzICovCisJc3RhdGljIHN0cnVjdCBvdjUxMV9yZWd2YWxzIGFSZWd2YWxzTm9ybVNBQTcxMTFBW10gPSB7CisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwNiwgMHhjZSB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MDcsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDEwLCAweDQ0IH0sIC8qIFlVVjQyMiwgMjQwLzI4NiBsaW5lcyAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4MGUsIDB4MDEgfSwgLyogTlRTQyBNIG9yIFBBTCBCR0hJICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwMCwgMHgwMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MDEsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDAzLCAweDIzIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwNCwgMHgwMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MDUsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDA4LCAweGM4IH0sIC8qIEF1dG8gZmllbGQgZnJlcSAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4MDksIDB4MDEgfSwgLyogQ2hyb20uIHRyYXAgb2ZmLCBBUEVSPTAuMjUgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDBhLCAweDgwIH0sIC8qIEJSSUc9MTI4ICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwYiwgMHg0MCB9LCAvKiBDT05UPTEuMCAqLworCQl7IE9WNTExX0kyQ19CVVMsIDB4MGMsIDB4NDAgfSwgLyogU0FUTj0xLjAgKi8KKwkJeyBPVjUxMV9JMkNfQlVTLCAweDBkLCAweDAwIH0sIC8qIEhVRT0wICovCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgwZiwgMHgwMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTEsIDB4MGMgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDEyLCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxMywgMHgwMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTQsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDE1LCAweDAwIH0sCisJCXsgT1Y1MTFfSTJDX0JVUywgMHgxNiwgMHgwMCB9LAorCQl7IE9WNTExX0kyQ19CVVMsIDB4MTcsIDB4MDAgfSwKKwkJeyBPVjUxMV9JMkNfQlVTLCAweDAyLCAweGMwIH0sCS8qIENvbXBvc2l0ZSBpbnB1dCAwICovCisJCXsgT1Y1MTFfRE9ORV9CVVMsIDB4MCwgMHgwMCB9LAorCX07CisKKy8vIEZJWE1FOiBJIGRvbid0IGtub3cgaG93IHRvIHN5bmMgb3IgcmVzZXQgaXQgeWV0CisjaWYgMAorCWlmIChvdjUxeF9pbml0X3NhYV9zZW5zb3Iob3YpIDwgMCkgeworCQllcnIoIkZhaWxlZCB0byBpbml0aWFsaXplIHRoZSBTQUE3MTExQSIpOworCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJUERFQlVHKDEsICJTQUE3MTExQSBzZW5zb3IgZGV0ZWN0ZWQiKTsKKwl9CisjZW5kaWYKKworCS8qIDY0MHg0ODAgbm90IHN1cHBvcnRlZCB3aXRoIFBBTCAqLworCWlmIChvdi0+cGFsKSB7CisJCW92LT5tYXh3aWR0aCA9IDMyMDsKKwkJb3YtPm1heGhlaWdodCA9IDI0MDsJCS8qIEV2ZW4gZmllbGQgb25seSAqLworCX0gZWxzZSB7CisJCW92LT5tYXh3aWR0aCA9IDY0MDsKKwkJb3YtPm1heGhlaWdodCA9IDQ4MDsJCS8qIEV2ZW4vT2RkIGZpZWxkcyAqLworCX0KKworCW92LT5taW53aWR0aCA9IDMyMDsKKwlvdi0+bWluaGVpZ2h0ID0gMjQwOwkJLyogRXZlbiBmaWVsZCBvbmx5ICovCisKKwlvdi0+aGFzX2RlY29kZXIgPSAxOworCW92LT5udW1faW5wdXRzID0gODsKKwlvdi0+bm9ybSA9IFZJREVPX01PREVfQVVUTzsKKwlvdi0+c3RvcF9kdXJpbmdfc2V0ID0gMDsJLyogRGVjb2RlciBndWFyYW50ZWVzIHN0YWJsZSBpbWFnZSAqLworCisJLyogRGVjb2RlciBkb2Vzbid0IGNoYW5nZSB0aGVzZSB2YWx1ZXMsIHNvIHdlIHVzZSB0aGVzZSBpbnN0ZWFkIG9mCisJICogYWN1dGFsbHkgcmVhZGluZyB0aGUgcmVnaXN0ZXJzICh3aGljaCBkb2Vzbid0IHdvcmspICovCisJb3YtPmJyaWdodG5lc3MgPSAweDgwIDw8IDg7CisJb3YtPmNvbnRyYXN0ID0gMHg0MCA8PCA5OworCW92LT5jb2xvdXIgPSAweDQwIDw8IDk7CisJb3YtPmh1ZSA9IDMyNzY4OworCisJUERFQlVHKDQsICJXcml0aW5nIFNBQTcxMTFBIHJlZ2lzdGVycyIpOworCWlmICh3cml0ZV9yZWd2YWxzKG92LCBhUmVndmFsc05vcm1TQUE3MTExQSkpCisJCXJldHVybiAtMTsKKworCS8qIERldGVjdCB2ZXJzaW9uIG9mIGRlY29kZXIuIFRoaXMgbXVzdCBiZSBkb25lIGFmdGVyIHdyaXRpbmcgdGhlCisgICAgICAgICAqIGluaXRpYWwgcmVncyBvciB0aGUgZGVjb2RlciB3aWxsIGxvY2sgdXAuICovCisJcmMgPSBpMmNfcihvdiwgMHgwMCk7CisKKwlpZiAocmMgPCAwKSB7CisJCWVycigiRXJyb3IgZGV0ZWN0aW5nIHNlbnNvciB2ZXJzaW9uIik7CisJCXJldHVybiAtMTsKKwl9IGVsc2UgeworCQlpbmZvKCJTZW5zb3IgaXMgYW4gU0FBNzExMUEgKHZlcnNpb24gMHgleCkiLCByYyk7CisJCW92LT5zZW5zb3IgPSBTRU5fU0FBNzExMUE7CisJfQorCisJLy8gRklYTUU6IEZpeCB0aGlzIGZvciBPVjUxOCgrKQorCS8qIExhdGNoIHRvIG5lZ2F0aXZlIGVkZ2Ugb2YgY2xvY2suIE90aGVyd2lzZSwgd2UgZ2V0IGluY29ycmVjdAorCSAqIGNvbG9ycyBhbmQgaml0dGVyIGluIHRoZSBkaWdpdGFsIHNpZ25hbC4gKi8KKwlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTEpCisJCXJlZ193KG92LCAweDExLCAweDAwKTsKKwllbHNlCisJCXdhcm4oIlNBQTcxMTFBIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggT1Y1MTgvT1Y1MTgrIik7CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBpbml0aWFsaXplcyB0aGUgT1Y1MTEvT1Y1MTErIGFuZCB0aGUgc2Vuc29yICovCitzdGF0aWMgaW50IAorb3Y1MTFfY29uZmlndXJlKHN0cnVjdCB1c2Jfb3Y1MTEgKm92KQoreworCXN0YXRpYyBzdHJ1Y3Qgb3Y1MTFfcmVndmFscyBhUmVndmFsc0luaXQ1MTFbXSA9IHsKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19SRVNFVCwJMHg3ZiB9LAorCSAJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19JTklULAkJMHgwMSB9LAorCSAJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19SRVNFVCwJMHg3ZiB9LAorCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX0lOSVQsCQkweDAxIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfUkVTRVQsCTB4M2YgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19JTklULAkJMHgwMSB9LAorCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1JFU0VULAkweDNkIH0sCisJCXsgT1Y1MTFfRE9ORV9CVVMsIDB4MCwgMHgwMH0sCisJfTsKKworCXN0YXRpYyBzdHJ1Y3Qgb3Y1MTFfcmVndmFscyBhUmVndmFsc05vcm01MTFbXSA9IHsKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTExX0RSQU1fRkxPV19DVEwsIAkweDAxIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfU05BUCwJCTB4MDAgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19TTkFQLAkJMHgwMiB9LAorCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1NOQVAsCQkweDAwIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxMV9GSUZPX09QVFMsCTB4MWYgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTExX0NPTVBfRU4sCQkweDAwIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxMV9DT01QX0xVVF9FTiwJMHgwMyB9LAorCQl7IE9WNTExX0RPTkVfQlVTLCAweDAsIDB4MDAgfSwKKwl9OworCisJc3RhdGljIHN0cnVjdCBvdjUxMV9yZWd2YWxzIGFSZWd2YWxzTm9ybTUxMVBsdXNbXSA9IHsKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTExX0RSQU1fRkxPV19DVEwsCTB4ZmYgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19TTkFQLAkJMHgwMCB9LAorCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1NOQVAsCQkweDAyIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfU05BUCwJCTB4MDAgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTExX0ZJRk9fT1BUUywJMHhmZiB9LAorCQl7IE9WNTExX1JFR19CVVMsIFI1MTFfQ09NUF9FTiwJCTB4MDAgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTExX0NPTVBfTFVUX0VOLAkweDAzIH0sCisJCXsgT1Y1MTFfRE9ORV9CVVMsIDB4MCwgMHgwMCB9LAorCX07CisKKwlQREVCVUcoNCwgIiIpOworCisJb3YtPmN1c3RvbWlkID0gcmVnX3Iob3YsIFI1MTFfU1lTX0NVU1RfSUQpOworCWlmIChvdi0+Y3VzdG9taWQgPCAwKSB7CisJCWVycigiVW5hYmxlIHRvIHJlYWQgY2FtZXJhIGJyaWRnZSByZWdpc3RlcnMiKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlQREVCVUcgKDEsICJDdXN0b21JRCA9ICVkIiwgb3YtPmN1c3RvbWlkKTsKKwlvdi0+ZGVzYyA9IHN5bWJvbGljKGNhbWxpc3QsIG92LT5jdXN0b21pZCk7CisJaW5mbygibW9kZWw6ICVzIiwgb3YtPmRlc2MpOworCisJaWYgKDAgPT0gc3RyY21wKG92LT5kZXNjLCBOT1RfREVGSU5FRF9TVFIpKSB7CisJCWVycigiQ2FtZXJhIHR5cGUgKCVkKSBub3QgcmVjb2duaXplZCIsIG92LT5jdXN0b21pZCk7CisJCWVycigiUGxlYXNlIG5vdGlmeSAiIEVNQUlMICIgb2YgdGhlIG5hbWUsIik7CisJCWVycigibWFudWZhY3R1cmVyLCBtb2RlbCwgYW5kIHRoaXMgbnVtYmVyIG9mIHlvdXIgY2FtZXJhLiIpOworCQllcnIoIkFsc28gaW5jbHVkZSB0aGUgb3V0cHV0IG9mIHRoZSBkZXRlY3Rpb24gcHJvY2Vzcy4iKTsKKwl9IAorCisJaWYgKG92LT5jdXN0b21pZCA9PSA3MCkJCS8qIFVTQiBMaWZlIFRWIChQQUwvU0VDQU0pICovCisJCW92LT5wYWwgPSAxOworCisJaWYgKHdyaXRlX3JlZ3ZhbHMob3YsIGFSZWd2YWxzSW5pdDUxMSkpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAob3YtPmxlZF9wb2xpY3kgPT0gTEVEX09GRiB8fCBvdi0+bGVkX3BvbGljeSA9PSBMRURfQVVUTykKKwkJb3Y1MXhfbGVkX2NvbnRyb2wob3YsIDApOworCisJLyogVGhlIE9WNTExKyBoYXMgdW5kb2N1bWVudGVkIGJpdHMgaW4gdGhlIGZsb3cgY29udHJvbCByZWdpc3Rlci4KKwkgKiBTZXR0aW5nIGl0IHRvIDB4ZmYgZml4ZXMgdGhlIGNvcnJ1cHRpb24gd2l0aCBtb3Zpbmcgb2JqZWN0cy4gKi8KKwlpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MTEpIHsKKwkJaWYgKHdyaXRlX3JlZ3ZhbHMob3YsIGFSZWd2YWxzTm9ybTUxMSkpCisJCQlnb3RvIGVycm9yOworCX0gZWxzZSBpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MTFQTFVTKSB7CisJCWlmICh3cml0ZV9yZWd2YWxzKG92LCBhUmVndmFsc05vcm01MTFQbHVzKSkKKwkJCWdvdG8gZXJyb3I7CisJfSBlbHNlIHsKKwkJZXJyKCJJbnZhbGlkIGJyaWRnZSIpOworCX0KKworCWlmIChvdjUxMV9pbml0X2NvbXByZXNzaW9uKG92KSkKKwkJZ290byBlcnJvcjsKKworCW92LT5wYWNrZXRfbnVtYmVyaW5nID0gMTsKKwlvdjUxMV9zZXRfcGFja2V0X3NpemUob3YsIDApOworCisJb3YtPnNuYXBfZW5hYmxlZCA9IHNuYXBzaG90OworCisJLyogVGVzdCBmb3IgN3h4MCAqLworCVBERUJVRygzLCAiVGVzdGluZyBmb3IgMFY3eHgwIik7CisJb3YtPnByaW1hcnlfaTJjX3NsYXZlID0gT1Y3eHgwX1NJRDsKKwlpZiAob3Y1MXhfc2V0X3NsYXZlX2lkcyhvdiwgT1Y3eHgwX1NJRCkgPCAwKQorCQlnb3RvIGVycm9yOworCisJaWYgKGkyY193KG92LCAweDEyLCAweDgwKSA8IDApIHsKKwkJLyogVGVzdCBmb3IgNnh4MCAqLworCQlQREVCVUcoMywgIlRlc3RpbmcgZm9yIDBWNnh4MCIpOworCQlvdi0+cHJpbWFyeV9pMmNfc2xhdmUgPSBPVjZ4eDBfU0lEOworCQlpZiAob3Y1MXhfc2V0X3NsYXZlX2lkcyhvdiwgT1Y2eHgwX1NJRCkgPCAwKQorCQkJZ290byBlcnJvcjsKKworCQlpZiAoaTJjX3cob3YsIDB4MTIsIDB4ODApIDwgMCkgeworCQkJLyogVGVzdCBmb3IgOHh4MCAqLworCQkJUERFQlVHKDMsICJUZXN0aW5nIGZvciAwVjh4eDAiKTsKKwkJCW92LT5wcmltYXJ5X2kyY19zbGF2ZSA9IE9WOHh4MF9TSUQ7CisJCQlpZiAob3Y1MXhfc2V0X3NsYXZlX2lkcyhvdiwgT1Y4eHgwX1NJRCkgPCAwKQorCQkJCWdvdG8gZXJyb3I7CisKKwkJCWlmIChpMmNfdyhvdiwgMHgxMiwgMHg4MCkgPCAwKSB7CisJCQkJLyogVGVzdCBmb3IgU0FBNzExMUEgKi8KKwkJCQlQREVCVUcoMywgIlRlc3RpbmcgZm9yIFNBQTcxMTFBIik7CisJCQkJb3YtPnByaW1hcnlfaTJjX3NsYXZlID0gU0FBNzExMUFfU0lEOworCQkJCWlmIChvdjUxeF9zZXRfc2xhdmVfaWRzKG92LCBTQUE3MTExQV9TSUQpIDwgMCkKKwkJCQkJZ290byBlcnJvcjsKKworCQkJCWlmIChpMmNfdyhvdiwgMHgwZCwgMHgwMCkgPCAwKSB7CisJCQkJCS8qIFRlc3QgZm9yIEtTMDEyNyAqLworCQkJCQlQREVCVUcoMywgIlRlc3RpbmcgZm9yIEtTMDEyNyIpOworCQkJCQlvdi0+cHJpbWFyeV9pMmNfc2xhdmUgPSBLUzAxMjdfU0lEOworCQkJCQlpZiAob3Y1MXhfc2V0X3NsYXZlX2lkcyhvdiwgS1MwMTI3X1NJRCkgPCAwKQorCQkJCQkJZ290byBlcnJvcjsKKworCQkJCQlpZiAoaTJjX3cob3YsIDB4MTAsIDB4MDApIDwgMCkgeworCQkJCQkJZXJyKCJDYW4ndCBkZXRlcm1pbmUgc2Vuc29yIHNsYXZlIElEcyIpOworCQkgCQkJCWdvdG8gZXJyb3I7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlpZiAoa3MwMTI3X2NvbmZpZ3VyZShvdikgPCAwKSB7CisJCQkJCQkJZXJyKCJGYWlsZWQgdG8gY29uZmlndXJlIEtTMDEyNyIpOworCSAJCQkJCQlnb3RvIGVycm9yOworCQkJCQkJfQorCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHNhYTcxMTFhX2NvbmZpZ3VyZShvdikgPCAwKSB7CisJCQkJCQllcnIoIkZhaWxlZCB0byBjb25maWd1cmUgU0FBNzExMUEiKTsKKwkgCQkJCQlnb3RvIGVycm9yOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQllcnIoIkRldGVjdGVkIHVuc3VwcG9ydGVkIE9WOHh4MCBzZW5zb3IiKTsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKG92Nnh4MF9jb25maWd1cmUob3YpIDwgMCkgeworCQkJCWVycigiRmFpbGVkIHRvIGNvbmZpZ3VyZSBPVjZ4eDAiKTsKKyAJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWlmIChvdjd4eDBfY29uZmlndXJlKG92KSA8IDApIHsKKwkJCWVycigiRmFpbGVkIHRvIGNvbmZpZ3VyZSBPVjd4eDAiKTsKKwkgCQlnb3RvIGVycm9yOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWVycigiT1Y1MTEgQ29uZmlnIGZhaWxlZCIpOworCisJcmV0dXJuIC1FQlVTWTsKK30KKworLyogVGhpcyBpbml0aWFsaXplcyB0aGUgT1Y1MTgvT1Y1MTgrIGFuZCB0aGUgc2Vuc29yICovCitzdGF0aWMgaW50CitvdjUxOF9jb25maWd1cmUoc3RydWN0IHVzYl9vdjUxMSAqb3YpCit7CisJLyogRm9yIDUxOCBhbmQgNTE4KyAqLworCXN0YXRpYyBzdHJ1Y3Qgb3Y1MTFfcmVndmFscyBhUmVndmFsc0luaXQ1MThbXSA9IHsKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19SRVNFVCwJMHg0MCB9LAorCSAJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19JTklULAkJMHhlMSB9LAorCSAJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19SRVNFVCwJMHgzZSB9LAorCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX0lOSVQsCQkweGUxIH0sCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfUkVTRVQsCTB4MDAgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19JTklULAkJMHhlMSB9LAorCQl7IE9WNTExX1JFR19CVVMsIDB4NDYsCQkJMHgwMCB9LCAKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDVkLAkJCTB4MDMgfSwKKwkJeyBPVjUxMV9ET05FX0JVUywgMHgwLCAweDAwfSwKKwl9OworCisJc3RhdGljIHN0cnVjdCBvdjUxMV9yZWd2YWxzIGFSZWd2YWxzTm9ybTUxOFtdID0geworCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1NOQVAsCQkweDAyIH0sIC8qIFJlc2V0ICovCisJCXsgT1Y1MTFfUkVHX0JVUywgUjUxeF9TWVNfU05BUCwJCTB4MDEgfSwgLyogRW5hYmxlICovCisJCXsgT1Y1MTFfUkVHX0JVUywgMHgzMSwgCQkJMHgwZiB9LAorCQl7IE9WNTExX1JFR19CVVMsIDB4NWQsCQkJMHgwMyB9LAorCQl7IE9WNTExX1JFR19CVVMsIDB4MjQsCQkJMHg5ZiB9LAorCQl7IE9WNTExX1JFR19CVVMsIDB4MjUsCQkJMHg5MCB9LAorCQl7IE9WNTExX1JFR19CVVMsIDB4MjAsCQkJMHgwMCB9LAorCQl7IE9WNTExX1JFR19CVVMsIDB4NTEsCQkJMHgwNCB9LAorCQl7IE9WNTExX1JFR19CVVMsIDB4NzEsCQkJMHgxOSB9LAorCQl7IE9WNTExX0RPTkVfQlVTLCAweDAsIDB4MDAgfSwKKwl9OworCisJc3RhdGljIHN0cnVjdCBvdjUxMV9yZWd2YWxzIGFSZWd2YWxzTm9ybTUxOFBsdXNbXSA9IHsKKwkJeyBPVjUxMV9SRUdfQlVTLCBSNTF4X1NZU19TTkFQLAkJMHgwMiB9LCAvKiBSZXNldCAqLworCQl7IE9WNTExX1JFR19CVVMsIFI1MXhfU1lTX1NOQVAsCQkweDAxIH0sIC8qIEVuYWJsZSAqLworCQl7IE9WNTExX1JFR19CVVMsIDB4MzEsIAkJCTB4MGYgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDVkLAkJCTB4MDMgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDI0LAkJCTB4OWYgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDI1LAkJCTB4OTAgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDIwLAkJCTB4NjAgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDUxLAkJCTB4MDIgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDcxLAkJCTB4MTkgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDQwLAkJCTB4ZmYgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDQxLAkJCTB4NDIgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDQ2LAkJCTB4MDAgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDMzLAkJCTB4MDQgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDIxLAkJCTB4MTkgfSwKKwkJeyBPVjUxMV9SRUdfQlVTLCAweDNmLAkJCTB4MTAgfSwKKwkJeyBPVjUxMV9ET05FX0JVUywgMHgwLCAweDAwIH0sCisJfTsKKworCVBERUJVRyg0LCAiIik7CisKKwkvKiBGaXJzdCA1IGJpdHMgb2YgY3VzdG9tIElEIHJlZyBhcmUgYSByZXZpc2lvbiBJRCBvbiBPVjUxOCAqLworCWluZm8oIkRldmljZSByZXZpc2lvbiAlZCIsIDB4MUYgJiByZWdfcihvdiwgUjUxMV9TWVNfQ1VTVF9JRCkpOworCisJLyogR2l2ZSBpdCB0aGUgZGVmYXVsdCBkZXNjcmlwdGlvbiAqLworCW92LT5kZXNjID0gc3ltYm9saWMoY2FtbGlzdCwgMCk7CisKKwlpZiAod3JpdGVfcmVndmFscyhvdiwgYVJlZ3ZhbHNJbml0NTE4KSkKKwkJZ290byBlcnJvcjsKKworCS8qIFNldCBMRUQgR1BJTyBwaW4gdG8gb3V0cHV0IG1vZGUgKi8KKwlpZiAocmVnX3dfbWFzayhvdiwgMHg1NywgMHgwMCwgMHgwMikgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogTEVEIGlzIG9mZiBieSBkZWZhdWx0IHdpdGggT1Y1MTg7IGhhdmUgdG8gZXhwbGljaXRseSB0dXJuIGl0IG9uICovCisJaWYgKG92LT5sZWRfcG9saWN5ID09IExFRF9PRkYgfHwgb3YtPmxlZF9wb2xpY3kgPT0gTEVEX0FVVE8pCisJCW92NTF4X2xlZF9jb250cm9sKG92LCAwKTsKKwllbHNlCisJCW92NTF4X2xlZF9jb250cm9sKG92LCAxKTsKKworCS8qIERvbid0IHJlcXVpcmUgY29tcHJlc3Npb24gaWYgZHVtcHBpeCBpcyBlbmFibGVkOyBvdGhlcndpc2UgaXQncworCSAqIHJlcXVpcmVkLiBPVjUxOCBoYXMgbm8gdW5jb21wcmVzc2VkIG1vZGUsIHRvIHNhdmUgUkFNLiAqLworCWlmICghZHVtcHBpeCAmJiAhb3YtPmNvbXByZXNzKSB7CisJCW92LT5jb21wcmVzcyA9IDE7CisJCXdhcm4oIkNvbXByZXNzaW9uIHJlcXVpcmVkIHdpdGggT1Y1MTguLi5lbmFibGluZyIpOworCX0KKworCWlmIChvdi0+YnJpZGdlID09IEJSR19PVjUxOCkgeworCQlpZiAod3JpdGVfcmVndmFscyhvdiwgYVJlZ3ZhbHNOb3JtNTE4KSkKKwkJCWdvdG8gZXJyb3I7CisJfSBlbHNlIGlmIChvdi0+YnJpZGdlID09IEJSR19PVjUxOFBMVVMpIHsKKwkJaWYgKHdyaXRlX3JlZ3ZhbHMob3YsIGFSZWd2YWxzTm9ybTUxOFBsdXMpKQorCQkJZ290byBlcnJvcjsKKwl9IGVsc2UgeworCQllcnIoIkludmFsaWQgYnJpZGdlIik7CisJfQorCisJaWYgKHJlZ193KG92LCAweDJmLCAweDgwKSA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlpZiAob3Y1MThfaW5pdF9jb21wcmVzc2lvbihvdikpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAob3YtPmJyaWRnZSA9PSBCUkdfT1Y1MTgpCisJeworCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZwOworCQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQ7CisJCV9fdTE2IG14cHMgPSAwOworCisJCWlmcCA9IHVzYl9pZm51bV90b19pZihvdi0+ZGV2LCAwKTsKKwkJaWYgKGlmcCkgeworCQkJYWx0ID0gdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKGlmcCwgNyk7CisJCQlpZiAoYWx0KQorCQkJCW14cHMgPSBsZTE2X3RvX2NwdShhbHQtPmVuZHBvaW50WzBdLmRlc2Mud01heFBhY2tldFNpemUpOworCQl9CisKKwkJLyogU29tZSBPVjUxOHMgaGF2ZSBwYWNrZXQgbnVtYmVyaW5nIGJ5IGRlZmF1bHQsIHNvbWUgZG9uJ3QgKi8KKwkJaWYgKG14cHMgPT0gODk3KQorCQkJb3YtPnBhY2tldF9udW1iZXJpbmcgPSAxOworCQllbHNlCisJCQlvdi0+cGFja2V0X251bWJlcmluZyA9IDA7CisJfSBlbHNlIHsKKwkJLyogT1Y1MTgrIGhhcyBwYWNrZXQgbnVtYmVyaW5nIHR1cm5lZCBvbiBieSBkZWZhdWx0ICovCisJCW92LT5wYWNrZXRfbnVtYmVyaW5nID0gMTsKKwl9CisKKwlvdjUxOF9zZXRfcGFja2V0X3NpemUob3YsIDApOworCisJb3YtPnNuYXBfZW5hYmxlZCA9IHNuYXBzaG90OworCisJLyogVGVzdCBmb3IgNzZ4eCAqLworCW92LT5wcmltYXJ5X2kyY19zbGF2ZSA9IE9WN3h4MF9TSUQ7CisJaWYgKG92NTF4X3NldF9zbGF2ZV9pZHMob3YsIE9WN3h4MF9TSUQpIDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIFRoZSBPVjUxOCBtdXN0IGJlIG1vcmUgYWdncmVzc2l2ZSBhYm91dCBzZW5zb3IgZGV0ZWN0aW9uIHNpbmNlCisJICogSTJDIHdyaXRlIHdpbGwgbmV2ZXIgZmFpbCBpZiB0aGUgc2Vuc29yIGlzIG5vdCBwcmVzZW50LiBXZSBoYXZlCisJICogdG8gdHJ5IHRvIGluaXRpYWxpemUgdGhlIHNlbnNvciB0byBkZXRlY3QgaXRzIHByZXNlbmNlICovCisKKwlpZiAoaW5pdF9vdl9zZW5zb3Iob3YpIDwgMCkgeworCQkvKiBUZXN0IGZvciA2eHgwICovCisJCW92LT5wcmltYXJ5X2kyY19zbGF2ZSA9IE9WNnh4MF9TSUQ7CisJCWlmIChvdjUxeF9zZXRfc2xhdmVfaWRzKG92LCBPVjZ4eDBfU0lEKSA8IDApCisJCQlnb3RvIGVycm9yOworCisJCWlmIChpbml0X292X3NlbnNvcihvdikgPCAwKSB7CisJCQkvKiBUZXN0IGZvciA4eHgwICovCisJCQlvdi0+cHJpbWFyeV9pMmNfc2xhdmUgPSBPVjh4eDBfU0lEOworCQkJaWYgKG92NTF4X3NldF9zbGF2ZV9pZHMob3YsIE9WOHh4MF9TSUQpIDwgMCkKKwkJCQlnb3RvIGVycm9yOworCisJCQlpZiAoaW5pdF9vdl9zZW5zb3Iob3YpIDwgMCkgeworCQkJCWVycigiQ2FuJ3QgZGV0ZXJtaW5lIHNlbnNvciBzbGF2ZSBJRHMiKTsKKyAJCQkJZ290byBlcnJvcjsKKwkJCX0gZWxzZSB7CisJCQkJZXJyKCJEZXRlY3RlZCB1bnN1cHBvcnRlZCBPVjh4eDAgc2Vuc29yIik7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChvdjZ4eDBfY29uZmlndXJlKG92KSA8IDApIHsKKwkJCQllcnIoIkZhaWxlZCB0byBjb25maWd1cmUgT1Y2eHgwIik7CisgCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlpZiAob3Y3eHgwX2NvbmZpZ3VyZShvdikgPCAwKSB7CisJCQllcnIoIkZhaWxlZCB0byBjb25maWd1cmUgT1Y3eHgwIik7CisJIAkJZ290byBlcnJvcjsKKwkJfQorCX0KKworCW92LT5tYXh3aWR0aCA9IDM1MjsKKwlvdi0+bWF4aGVpZ2h0ID0gMjg4OworCisJLy8gVGhlIE9WNTE4IGNhbm5vdCBnbyBhcyBsb3cgYXMgdGhlIHNlbnNvciBjYW4KKwlvdi0+bWlud2lkdGggPSAxNjA7CisJb3YtPm1pbmhlaWdodCA9IDEyMDsKKworCXJldHVybiAwOworCitlcnJvcjoKKwllcnIoIk9WNTE4IENvbmZpZyBmYWlsZWQiKTsKKworCXJldHVybiAtRUJVU1k7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgc3lzZnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9vdjUxMSAqY2RfdG9fb3Yoc3RydWN0IGNsYXNzX2RldmljZSAqY2QpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHRvX3ZpZGVvX2RldmljZShjZCk7CisJcmV0dXJuIHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2N1c3RvbV9pZChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2Jfb3Y1MTEgKm92ID0gY2RfdG9fb3YoY2QpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBvdi0+Y3VzdG9taWQpOworfSAKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihjdXN0b21faWQsIFNfSVJVR08sIHNob3dfY3VzdG9tX2lkLCBOVUxMKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19tb2RlbChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2Jfb3Y1MTEgKm92ID0gY2RfdG9fb3YoY2QpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBvdi0+ZGVzYyk7Cit9IAorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKG1vZGVsLCBTX0lSVUdPLCBzaG93X21vZGVsLCBOVUxMKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19icmlkZ2Uoc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX292NTExICpvdiA9IGNkX3RvX292KGNkKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgc3ltYm9saWMoYnJnbGlzdCwgb3YtPmJyaWRnZSkpOworfSAKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihicmlkZ2UsIFNfSVJVR08sIHNob3dfYnJpZGdlLCBOVUxMKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19zZW5zb3Ioc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX292NTExICpvdiA9IGNkX3RvX292KGNkKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgc3ltYm9saWMoc2VubGlzdCwgb3YtPnNlbnNvcikpOworfSAKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihzZW5zb3IsIFNfSVJVR08sIHNob3dfc2Vuc29yLCBOVUxMKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19icmlnaHRuZXNzKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9vdjUxMSAqb3YgPSBjZF90b19vdihjZCk7CisJdW5zaWduZWQgc2hvcnQgeDsKKworCWlmICghb3YtPmRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisJc2Vuc29yX2dldF9icmlnaHRuZXNzKG92LCAmeCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHggPj4gOCk7Cit9IAorc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGJyaWdodG5lc3MsIFNfSVJVR08sIHNob3dfYnJpZ2h0bmVzcywgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfc2F0dXJhdGlvbihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2Jfb3Y1MTEgKm92ID0gY2RfdG9fb3YoY2QpOworCXVuc2lnbmVkIHNob3J0IHg7CisKKwlpZiAoIW92LT5kZXYpCisJCXJldHVybiAtRU5PREVWOworCXNlbnNvcl9nZXRfc2F0dXJhdGlvbihvdiwgJngpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB4ID4+IDgpOworfSAKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihzYXR1cmF0aW9uLCBTX0lSVUdPLCBzaG93X3NhdHVyYXRpb24sIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBzaG93X2NvbnRyYXN0KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9vdjUxMSAqb3YgPSBjZF90b19vdihjZCk7CisJdW5zaWduZWQgc2hvcnQgeDsKKworCWlmICghb3YtPmRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisJc2Vuc29yX2dldF9jb250cmFzdChvdiwgJngpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB4ID4+IDgpOworfSAKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihjb250cmFzdCwgU19JUlVHTywgc2hvd19jb250cmFzdCwgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfaHVlKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9vdjUxMSAqb3YgPSBjZF90b19vdihjZCk7CisJdW5zaWduZWQgc2hvcnQgeDsKKworCWlmICghb3YtPmRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisJc2Vuc29yX2dldF9odWUob3YsICZ4KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgeCA+PiA4KTsKK30gCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoaHVlLCBTX0lSVUdPLCBzaG93X2h1ZSwgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfZXhwb3N1cmUoc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX292NTExICpvdiA9IGNkX3RvX292KGNkKTsKKwl1bnNpZ25lZCBjaGFyIGV4cDsKKworCWlmICghb3YtPmRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisJc2Vuc29yX2dldF9leHBvc3VyZShvdiwgJmV4cCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGV4cCA+PiA4KTsKK30gCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoZXhwb3N1cmUsIFNfSVJVR08sIHNob3dfZXhwb3N1cmUsIE5VTEwpOworCitzdGF0aWMgdm9pZCBvdl9jcmVhdGVfc3lzZnMoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKK3sKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX2N1c3RvbV9pZCk7CisJdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9tb2RlbCk7CisJdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9icmlkZ2UpOworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfc2Vuc29yKTsKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX2JyaWdodG5lc3MpOworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfc2F0dXJhdGlvbik7CisJdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9jb250cmFzdCk7CisJdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9odWUpOworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfZXhwb3N1cmUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIFVTQiByb3V0aW5lcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludAorb3Y1MXhfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICppZGVzYzsKKwlzdHJ1Y3QgdXNiX292NTExICpvdjsKKwlpbnQgaTsKKworCVBERUJVRygxLCAicHJvYmluZyBmb3IgZGV2aWNlLi4uIik7CisKKwkvKiBXZSBkb24ndCBoYW5kbGUgbXVsdGktY29uZmlnIGNhbWVyYXMgKi8KKwlpZiAoZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlkZXNjID0gJmludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjOworCisJaWYgKGlkZXNjLT5iSW50ZXJmYWNlQ2xhc3MgIT0gMHhGRikKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKGlkZXNjLT5iSW50ZXJmYWNlU3ViQ2xhc3MgIT0gMHgwMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoKG92ID0ga21hbGxvYyhzaXplb2YoKm92KSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwkJZXJyKCJjb3VsZG4ndCBrbWFsbG9jIG92IHN0cnVjdCIpOworCQlnb3RvIGVycm9yX291dDsKKwl9CisKKwltZW1zZXQob3YsIDAsIHNpemVvZigqb3YpKTsKKworCW92LT5kZXYgPSBkZXY7CisJb3YtPmlmYWNlID0gaWRlc2MtPmJJbnRlcmZhY2VOdW1iZXI7CisJb3YtPmxlZF9wb2xpY3kgPSBsZWQ7CisJb3YtPmNvbXByZXNzID0gY29tcHJlc3M7CisJb3YtPmxpZ2h0ZnJlcSA9IGxpZ2h0ZnJlcTsKKwlvdi0+bnVtX2lucHV0cyA9IDE7CSAgIC8qIFZpZGVvIGRlY29kZXIgaW5pdCBmdW5jdHMuIGNoYW5nZSB0aGlzICovCisJb3YtPnN0b3BfZHVyaW5nX3NldCA9ICFmYXN0c2V0OworCW92LT5iYWNrbGlnaHQgPSBiYWNrbGlnaHQ7CisJb3YtPm1pcnJvciA9IG1pcnJvcjsKKwlvdi0+YXV0b19icnQgPSBhdXRvYnJpZ2h0OworCW92LT5hdXRvX2dhaW4gPSBhdXRvZ2FpbjsKKwlvdi0+YXV0b19leHAgPSBhdXRvZXhwOworCisJc3dpdGNoIChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSkgeworCWNhc2UgUFJPRF9PVjUxMToKKwkJb3YtPmJyaWRnZSA9IEJSR19PVjUxMTsKKwkJb3YtPmJjbGFzcyA9IEJDTF9PVjUxMTsKKwkJYnJlYWs7CisJY2FzZSBQUk9EX09WNTExUExVUzoKKwkJb3YtPmJyaWRnZSA9IEJSR19PVjUxMVBMVVM7CisJCW92LT5iY2xhc3MgPSBCQ0xfT1Y1MTE7CisJCWJyZWFrOworCWNhc2UgUFJPRF9PVjUxODoKKwkJb3YtPmJyaWRnZSA9IEJSR19PVjUxODsKKwkJb3YtPmJjbGFzcyA9IEJDTF9PVjUxODsKKwkJYnJlYWs7CisJY2FzZSBQUk9EX09WNTE4UExVUzoKKwkJb3YtPmJyaWRnZSA9IEJSR19PVjUxOFBMVVM7CisJCW92LT5iY2xhc3MgPSBCQ0xfT1Y1MTg7CisJCWJyZWFrOworCWNhc2UgUFJPRF9NRTJDQU06CisJCWlmIChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICE9IFZFTkRfTUFUVEVMKQorCQkJZ290byBlcnJvcjsKKwkJb3YtPmJyaWRnZSA9IEJSR19PVjUxMVBMVVM7CisJCW92LT5iY2xhc3MgPSBCQ0xfT1Y1MTE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycigiVW5rbm93biBwcm9kdWN0IElEIDB4JTA0eCIsIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpbmZvKCJVU0IgJXMgdmlkZW8gZGV2aWNlIGZvdW5kIiwgc3ltYm9saWMoYnJnbGlzdCwgb3YtPmJyaWRnZSkpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmb3YtPndxKTsKKworCWluaXRfTVVURVgoJm92LT5sb2NrKTsJLyogdG8gMSA9PSBhdmFpbGFibGUgKi8KKwlpbml0X01VVEVYKCZvdi0+YnVmX2xvY2spOworCWluaXRfTVVURVgoJm92LT5wYXJhbV9sb2NrKTsKKwlpbml0X01VVEVYKCZvdi0+aTJjX2xvY2spOworCWluaXRfTVVURVgoJm92LT5jYnVmX2xvY2spOworCisJb3YtPmJ1Zl9zdGF0ZSA9IEJVRl9OT1RfQUxMT0NBVEVEOworCisJaWYgKHVzYl9tYWtlX3BhdGgoZGV2LCBvdi0+dXNiX3BhdGgsIE9WNTExX1VTQl9QQVRIX0xFTikgPCAwKSB7CisJCWVycigidXNiX21ha2VfcGF0aCBlcnJvciIpOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIEFsbG9jYXRlIGNvbnRyb2wgdHJhbnNmZXIgYnVmZmVyLiAqLworCS8qIE11c3QgYmUga21hbGxvYygpJ2VkLCBmb3IgRE1BIGNvbXBhdGliaWxpdHkgKi8KKwlvdi0+Y2J1ZiA9IGttYWxsb2MoT1Y1MTFfQ0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW92LT5jYnVmKQorCQlnb3RvIGVycm9yOworCisJaWYgKG92LT5iY2xhc3MgPT0gQkNMX09WNTE4KSB7CisJCWlmIChvdjUxOF9jb25maWd1cmUob3YpIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJfSBlbHNlIHsKKwkJaWYgKG92NTExX2NvbmZpZ3VyZShvdikgPCAwKQorCQkJZ290byBlcnJvcjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgT1Y1MTFfTlVNRlJBTUVTOyBpKyspIHsKKwkJb3YtPmZyYW1lW2ldLmZyYW1lbnVtID0gaTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmb3YtPmZyYW1lW2ldLndxKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgT1Y1MTFfTlVNU0JVRjsgaSsrKSB7CisJCW92LT5zYnVmW2ldLm92ID0gb3Y7CisJCXNwaW5fbG9ja19pbml0KCZvdi0+c2J1ZltpXS5sb2NrKTsKKwkJb3YtPnNidWZbaV0ubiA9IGk7CisJfQorCisJLyogVW5uZWNlc3Nhcnk/IChUaGlzIGlzIGRvbmUgb24gb3BlbigpLiBOZWVkIHRvIG1ha2Ugc3VyZSB2YXJpYWJsZXMKKwkgKiBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aG91dCB0aGlzIGJlZm9yZSByZW1vdmluZyBpdCwgdGhvdWdoKS4gKi8KKwlpZiAob3Y1MXhfc2V0X2RlZmF1bHRfcGFyYW1zKG92KSA8IDApCisJCWdvdG8gZXJyb3I7CisKKyNpZmRlZiBPVjUxMV9ERUJVRworCWlmIChkdW1wX2JyaWRnZSkgeworCQlpZiAob3YtPmJjbGFzcyA9PSBCQ0xfT1Y1MTEpCisJCQlvdjUxMV9kdW1wX3JlZ3Mob3YpOworCQllbHNlCisJCQlvdjUxOF9kdW1wX3JlZ3Mob3YpOworCX0KKyNlbmRpZgorCisJb3YtPnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAoIW92LT52ZGV2KQorCQlnb3RvIGVycm9yOworCisJbWVtY3B5KG92LT52ZGV2LCAmdmRldl90ZW1wbGF0ZSwgc2l6ZW9mKCpvdi0+dmRldikpOworCW92LT52ZGV2LT5kZXYgPSAmZGV2LT5kZXY7CisJdmlkZW9fc2V0X2RydmRhdGEob3YtPnZkZXYsIG92KTsKKworCWZvciAoaSA9IDA7IGkgPCBPVjUxMV9NQVhfVU5JVF9WSURFTzsgaSsrKSB7CisJCS8qIE1pbm9yIDAgY2Fubm90IGJlIHNwZWNpZmllZDsgYXNzdW1lIHVzZXIgd2FudHMgYXV0b2RldGVjdCAqLworCQlpZiAodW5pdF92aWRlb1tpXSA9PSAwKQorCQkJYnJlYWs7CisKKwkJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShvdi0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwKKwkJCXVuaXRfdmlkZW9baV0pID49IDApIHsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogVXNlIHRoZSBuZXh0IGF2YWlsYWJsZSBvbmUgKi8KKwlpZiAoKG92LT52ZGV2LT5taW5vciA9PSAtMSkgJiYKKwkgICAgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKG92LT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSkgPCAwKSB7CisJCWVycigidmlkZW9fcmVnaXN0ZXJfZGV2aWNlIGZhaWxlZCIpOworCQlnb3RvIGVycm9yOworCX0KKworCWluZm8oIkRldmljZSBhdCAlcyByZWdpc3RlcmVkIHRvIG1pbm9yICVkIiwgb3YtPnVzYl9wYXRoLAorCSAgICAgb3YtPnZkZXYtPm1pbm9yKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50Ziwgb3YpOworCW92X2NyZWF0ZV9zeXNmcyhvdi0+dmRldik7CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWlmIChvdi0+dmRldikgeworCQlpZiAoLTEgPT0gb3YtPnZkZXYtPm1pbm9yKQorCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2Uob3YtPnZkZXYpOworCQllbHNlCisJCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShvdi0+dmRldik7CisJCW92LT52ZGV2ID0gTlVMTDsKKwl9CisKKwlpZiAob3YtPmNidWYpIHsKKwkJZG93bigmb3YtPmNidWZfbG9jayk7CisJCWtmcmVlKG92LT5jYnVmKTsKKwkJb3YtPmNidWYgPSBOVUxMOworCQl1cCgmb3YtPmNidWZfbG9jayk7CisJfQorCisJaWYgKG92KSB7CisJCWtmcmVlKG92KTsKKwkJb3YgPSBOVUxMOworCX0KKworZXJyb3Jfb3V0OgorCWVycigiQ2FtZXJhIGluaXRpYWxpemF0aW9uIGZhaWxlZCIpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgdm9pZAorb3Y1MXhfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX292NTExICpvdiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJaW50IG47CisKKwlQREVCVUcoMywgIiIpOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisKKwlpZiAoIW92KQorCQlyZXR1cm47CisKKwlpZiAob3YtPnZkZXYpCisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKG92LT52ZGV2KTsKKworCWZvciAobiA9IDA7IG4gPCBPVjUxMV9OVU1GUkFNRVM7IG4rKykKKwkJb3YtPmZyYW1lW25dLmdyYWJzdGF0ZSA9IEZSQU1FX0VSUk9SOworCisJb3YtPmN1cmZyYW1lID0gLTE7CisKKwkvKiBUaGlzIHdpbGwgY2F1c2UgdGhlIHByb2Nlc3MgdG8gcmVxdWVzdCBhbm90aGVyIGZyYW1lICovCisJZm9yIChuID0gMDsgbiA8IE9WNTExX05VTUZSQU1FUzsgbisrKQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm92LT5mcmFtZVtuXS53cSk7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJm92LT53cSk7CisKKwlvdi0+c3RyZWFtaW5nID0gMDsKKwlvdjUxeF91bmxpbmtfaXNvYyhvdik7CisKKwlvdi0+ZGV2ID0gTlVMTDsKKworCS8qIEZyZWUgdGhlIG1lbW9yeSAqLworCWlmIChvdiAmJiAhb3YtPnVzZXIpIHsKKwkJZG93bigmb3YtPmNidWZfbG9jayk7CisJCWtmcmVlKG92LT5jYnVmKTsKKwkJb3YtPmNidWYgPSBOVUxMOworCQl1cCgmb3YtPmNidWZfbG9jayk7CisKKwkJb3Y1MXhfZGVhbGxvYyhvdik7CisJCWtmcmVlKG92KTsKKwkJb3YgPSBOVUxMOworCX0KKworCVBERUJVRygzLCAiRGlzY29ubmVjdCBjb21wbGV0ZSIpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgb3Y1MTFfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJvdjUxMSIsCisJLmlkX3RhYmxlID0JZGV2aWNlX3RhYmxlLAorCS5wcm9iZSA9CW92NTF4X3Byb2JlLAorCS5kaXNjb25uZWN0ID0Jb3Y1MXhfZGlzY29ubmVjdAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgTW9kdWxlIHJvdXRpbmVzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUmV0dXJucyAwIGZvciBzdWNjZXNzICovCitpbnQKK292NTExX3JlZ2lzdGVyX2RlY29tcF9tb2R1bGUoaW50IHZlciwgc3RydWN0IG92NTF4X2RlY29tcF9vcHMgKm9wcywgaW50IG92NTE4LAorCQkJICAgICBpbnQgbW14KQoreworCWlmICh2ZXIgIT0gREVDT01QX0lOVEVSRkFDRV9WRVIpIHsKKwkJZXJyKCJEZWNvbXByZXNzaW9uIG1vZHVsZSBoYXMgaW5jb21wYXRpYmxlIik7CisJCWVycigiaW50ZXJmYWNlIHZlcnNpb24gJWQiLCB2ZXIpOworCQllcnIoIkludGVyZmFjZSB2ZXJzaW9uICVkIGlzIHJlcXVpcmVkIiwgREVDT01QX0lOVEVSRkFDRV9WRVIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIW9wcykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAobW14ICYmICFvdjUxeF9tbXhfYXZhaWxhYmxlKSB7CisJCWVycigiTU1YIG5vdCBhdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0gb3Iga2VybmVsIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxvY2tfa2VybmVsKCk7CisKKwlpZiAob3Y1MTgpIHsKKwkJaWYgKG1teCkgeworCQkJaWYgKG92NTE4X21teF9kZWNvbXBfb3BzKQorCQkJCWdvdG8gZXJyX2luX3VzZTsKKwkJCWVsc2UKKwkJCQlvdjUxOF9tbXhfZGVjb21wX29wcyA9IG9wczsKKwkJfSBlbHNlIHsKKwkJCWlmIChvdjUxOF9kZWNvbXBfb3BzKQorCQkJCWdvdG8gZXJyX2luX3VzZTsKKwkJCWVsc2UKKwkJCQlvdjUxOF9kZWNvbXBfb3BzID0gb3BzOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG1teCkgeworCQkJaWYgKG92NTExX21teF9kZWNvbXBfb3BzKQorCQkJCWdvdG8gZXJyX2luX3VzZTsKKwkJCWVsc2UKKwkJCQlvdjUxMV9tbXhfZGVjb21wX29wcyA9IG9wczsKKwkJfSBlbHNlIHsKKwkJCWlmIChvdjUxMV9kZWNvbXBfb3BzKQorCQkJCWdvdG8gZXJyX2luX3VzZTsKKwkJCWVsc2UKKwkJCQlvdjUxMV9kZWNvbXBfb3BzID0gb3BzOworCQl9CisJfQorCisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiAwOworCitlcnJfaW5fdXNlOgorCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gLUVCVVNZOworfQorCit2b2lkCitvdjUxMV9kZXJlZ2lzdGVyX2RlY29tcF9tb2R1bGUoaW50IG92NTE4LCBpbnQgbW14KQoreworCWxvY2tfa2VybmVsKCk7CisKKwlpZiAob3Y1MTgpIHsKKwkJaWYgKG1teCkKKwkJCW92NTE4X21teF9kZWNvbXBfb3BzID0gTlVMTDsKKwkJZWxzZQorCQkJb3Y1MThfZGVjb21wX29wcyA9IE5VTEw7CisJfSBlbHNlIHsKKwkJaWYgKG1teCkKKwkJCW92NTExX21teF9kZWNvbXBfb3BzID0gTlVMTDsKKwkJZWxzZQorCQkJb3Y1MTFfZGVjb21wX29wcyA9IE5VTEw7CisJfQorCisJdW5sb2NrX2tlcm5lbCgpOworfQorCitzdGF0aWMgaW50IF9faW5pdAordXNiX292NTExX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZvdjUxMV9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gb3V0OworCisJaW5mbyhEUklWRVJfVkVSU0lPTiAiIDogIiBEUklWRVJfREVTQyk7CisKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQKK3VzYl9vdjUxMV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJm92NTExX2RyaXZlcik7CisJaW5mbygiZHJpdmVyIGRlcmVnaXN0ZXJlZCIpOworCit9CisKK21vZHVsZV9pbml0KHVzYl9vdjUxMV9pbml0KTsKK21vZHVsZV9leGl0KHVzYl9vdjUxMV9leGl0KTsKKworRVhQT1JUX1NZTUJPTChvdjUxMV9yZWdpc3Rlcl9kZWNvbXBfbW9kdWxlKTsKK0VYUE9SVF9TWU1CT0wob3Y1MTFfZGVyZWdpc3Rlcl9kZWNvbXBfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL292NTExLmggYi9kcml2ZXJzL3VzYi9tZWRpYS9vdjUxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NjUwOWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9vdjUxMS5oCkBAIC0wLDAgKzEsNTY5IEBACisjaWZuZGVmIF9fTElOVVhfT1Y1MTFfSAorI2RlZmluZSBfX0xJTlVYX09WNTExX0gKKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjZGVmaW5lIE9WNTExX0RFQlVHCS8qIFR1cm4gb24gZGVidWcgbWVzc2FnZXMgKi8KKworI2lmZGVmIE9WNTExX0RFQlVHCisJI2RlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAorCQlpZiAoZGVidWcgPj0gKGxldmVsKSkgaW5mbygiWyVzOiVkXSAiIGZtdCwgXAorCQlfX0ZVTkNUSU9OX18sIF9fTElORV9fICwgIyMgYXJncykKKyNlbHNlCisJI2RlZmluZSBQREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUoMCkKKyNlbmRpZgorCisvKiBUaGlzIG1hY3JvIHJlc3RyaWN0cyBhbiBpbnQgdmFyaWFibGUgdG8gYW4gaW5jbHVzaXZlIHJhbmdlICovCisjZGVmaW5lIFJFU1RSSUNUX1RPX1JBTkdFKHYsbWksbWEpIHsgXAorCWlmICgodikgPCAobWkpKSAodikgPSAobWkpOyBcCisJZWxzZSBpZiAoKHYpID4gKG1hKSkgKHYpID0gKG1hKTsgXAorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIERFRklORVMgRk9SIE9WNTExIEFORCBPVEhFUiBDSElQUyAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFVTQiBJRHMgKi8KKyNkZWZpbmUgVkVORF9PTU5JVklTSU9OCTB4MDVBOQorI2RlZmluZSBQUk9EX09WNTExCTB4MDUxMQorI2RlZmluZSBQUk9EX09WNTExUExVUwkweEE1MTEKKyNkZWZpbmUgUFJPRF9PVjUxOAkweDA1MTgKKyNkZWZpbmUgUFJPRF9PVjUxOFBMVVMJMHhBNTE4CisKKyNkZWZpbmUgVkVORF9NQVRURUwJMHgwODEzCisjZGVmaW5lIFBST0RfTUUyQ0FNCTB4MDAwMgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICBPVjUxeCBSRUdJU1RFUiBNTkVNT05JQ1MgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIENhbWVyYSBpbnRlcmZhY2UgcmVnaXN0ZXIgbnVtYmVycyAqLworI2RlZmluZSBSNTExX0NBTV9ERUxBWQkJMHgxMAorI2RlZmluZSBSNTExX0NBTV9FREdFCQkweDExCisjZGVmaW5lIFI1MTFfQ0FNX1BYQ05UCQkweDEyCisjZGVmaW5lIFI1MTFfQ0FNX0xOQ05UCQkweDEzCisjZGVmaW5lIFI1MTFfQ0FNX1BYRElWCQkweDE0CisjZGVmaW5lIFI1MTFfQ0FNX0xORElWCQkweDE1CisjZGVmaW5lIFI1MTFfQ0FNX1VWX0VOCQkweDE2CisjZGVmaW5lIFI1MTFfQ0FNX0xJTkVfTU9ERQkweDE3CisjZGVmaW5lIFI1MTFfQ0FNX09QVFMJCTB4MTgKKworLyogU25hcHNob3QgbW9kZSBjYW1lcmEgaW50ZXJmYWNlIHJlZ2lzdGVyIG51bWJlcnMgKi8KKyNkZWZpbmUgUjUxMV9TTkFQX0ZSQU1FCQkweDE5CisjZGVmaW5lIFI1MTFfU05BUF9QWENOVAkJMHgxQQorI2RlZmluZSBSNTExX1NOQVBfTE5DTlQJCTB4MUIKKyNkZWZpbmUgUjUxMV9TTkFQX1BYRElWCQkweDFDCisjZGVmaW5lIFI1MTFfU05BUF9MTkRJVgkJMHgxRAorI2RlZmluZSBSNTExX1NOQVBfVVZfRU4JCTB4MUUKKyNkZWZpbmUgUjUxMV9TTkFQX09QVFMJCTB4MUYKKworLyogRFJBTSByZWdpc3RlciBudW1iZXJzICovCisjZGVmaW5lIFI1MTFfRFJBTV9GTE9XX0NUTAkweDIwCisjZGVmaW5lIFI1MTFfRFJBTV9BUkNQCQkweDIxCisjZGVmaW5lIFI1MTFfRFJBTV9NUkMJCTB4MjIKKyNkZWZpbmUgUjUxMV9EUkFNX1JGQwkJMHgyMworCisvKiBJU08gRklGTyByZWdpc3RlciBudW1iZXJzICovCisjZGVmaW5lIFI1MXhfRklGT19QU0laRQkJMHgzMAkvKiAyIGJ5dGVzIHdpZGUgdy8gT1Y1MTgoKykgKi8KKyNkZWZpbmUgUjUxMV9GSUZPX09QVFMJCTB4MzEKKworLyogUGFyYWxsZWwgSU8gcmVnaXN0ZXIgbnVtYmVycyAqLworI2RlZmluZSBSNTExX1BJT19PUFRTCQkweDM4CisjZGVmaW5lIFI1MTFfUElPX0RBVEEJCTB4MzkKKyNkZWZpbmUgUjUxMV9QSU9fQklTVAkJMHgzRQorI2RlZmluZSBSNTE4X0dQSU9fSU4JCTB4NTUJLyogT1Y1MTgoKykgb25seSAqLworI2RlZmluZSBSNTE4X0dQSU9fT1VUCQkweDU2CS8qIE9WNTE4KCspIG9ubHkgKi8KKyNkZWZpbmUgUjUxOF9HUElPX0NUTAkJMHg1NwkvKiBPVjUxOCgrKSBvbmx5ICovCisjZGVmaW5lIFI1MThfR1BJT19QVUxTRV9JTgkweDU4CS8qIE9WNTE4KCspIG9ubHkgKi8KKyNkZWZpbmUgUjUxOF9HUElPX1BVTFNFX0NMRUFSCTB4NTkJLyogT1Y1MTgoKykgb25seSAqLworI2RlZmluZSBSNTE4X0dQSU9fUFVMU0VfUE9MCTB4NWEJLyogT1Y1MTgoKykgb25seSAqLworI2RlZmluZSBSNTE4X0dQSU9fUFVMU0VfRU4JMHg1YgkvKiBPVjUxOCgrKSBvbmx5ICovCisjZGVmaW5lIFI1MThfR1BJT19SRVNFVAkJMHg1YwkvKiBPVjUxOCgrKSBvbmx5ICovCisKKy8qIEkyQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUjUxMV9JMkNfQ1RMCQkweDQwCisjZGVmaW5lIFI1MThfSTJDX0NUTAkJMHg0NwkvKiBPVjUxOCgrKSBvbmx5ICovCisjZGVmaW5lIFI1MXhfSTJDX1dfU0lECQkweDQxCisjZGVmaW5lIFI1MXhfSTJDX1NBRERSXzMJMHg0MgorI2RlZmluZSBSNTF4X0kyQ19TQUREUl8yCTB4NDMKKyNkZWZpbmUgUjUxeF9JMkNfUl9TSUQJCTB4NDQKKyNkZWZpbmUgUjUxeF9JMkNfREFUQQkJMHg0NQorI2RlZmluZSBSNTF4X0kyQ19DTE9DSwkJMHg0NgorI2RlZmluZSBSNTF4X0kyQ19USU1FT1VUCTB4NDcKKworLyogSTJDIHNuYXBzaG90IHJlZ2lzdGVycyAqLworI2RlZmluZSBSNTExX1NJMkNfU0FERFJfMwkweDQ4CisjZGVmaW5lIFI1MTFfU0kyQ19EQVRBCQkweDQ5CisKKy8qIFN5c3RlbSBjb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBSNTF4X1NZU19SRVNFVAkJMHg1MAorCQkvKiBSZXNldCB0eXBlIGRlZmluaXRpb25zICovCisjZGVmaW5lIAlPVjUxMV9SRVNFVF9VREMJCTB4MDEKKyNkZWZpbmUgCU9WNTExX1JFU0VUX0kyQwkJMHgwMgorI2RlZmluZSAJT1Y1MTFfUkVTRVRfRklGTwkweDA0CisjZGVmaW5lIAlPVjUxMV9SRVNFVF9PTU5JQ0UJMHgwOAorI2RlZmluZSAJT1Y1MTFfUkVTRVRfRFJBTQkweDEwCisjZGVmaW5lIAlPVjUxMV9SRVNFVF9DQU1fSU5UCTB4MjAKKyNkZWZpbmUgCU9WNTExX1JFU0VUX09WNTExCTB4NDAKKyNkZWZpbmUgCU9WNTExX1JFU0VUX05PUkVHUwkweDNGIC8qIEFsbCBidXQgT1Y1MTEgJiByZWdzICovCisjZGVmaW5lIAlPVjUxMV9SRVNFVF9BTEwJCTB4N0YKKworI2RlZmluZSBSNTExX1NZU19DTE9DS19ESVYJMHg1MQorI2RlZmluZSBSNTF4X1NZU19TTkFQCQkweDUyCisjZGVmaW5lIFI1MXhfU1lTX0lOSVQgICAgICAgICAJMHg1MworI2RlZmluZSBSNTExX1NZU19QV1JfQ0xLCTB4NTQgLyogT1Y1MTErL09WNTE4KCspIG9ubHkgKi8KKyNkZWZpbmUgUjUxMV9TWVNfTEVEX0NUTAkweDU1IC8qIE9WNTExKyBvbmx5ICovCisjZGVmaW5lIFI1MTFfU1lTX1VTRVIJCTB4NUUKKyNkZWZpbmUgUjUxMV9TWVNfQ1VTVF9JRAkweDVGCisKKy8qIE9tbmlDRSAoY29tcHJlc3Npb24pIHJlZ2lzdGVycyAqLworI2RlZmluZSBSNTExX0NPTVBfUEhZCQkweDcwCisjZGVmaW5lIFI1MTFfQ09NUF9QSFVWCQkweDcxCisjZGVmaW5lIFI1MTFfQ09NUF9QVlkJCTB4NzIKKyNkZWZpbmUgUjUxMV9DT01QX1BWVVYJCTB4NzMKKyNkZWZpbmUgUjUxMV9DT01QX1FIWQkJMHg3NAorI2RlZmluZSBSNTExX0NPTVBfUUhVVgkJMHg3NQorI2RlZmluZSBSNTExX0NPTVBfUVZZCQkweDc2CisjZGVmaW5lIFI1MTFfQ09NUF9RVlVWCQkweDc3CisjZGVmaW5lIFI1MTFfQ09NUF9FTgkJMHg3OAorI2RlZmluZSBSNTExX0NPTVBfTFVUX0VOCTB4NzkJCQorI2RlZmluZSBSNTExX0NPTVBfTFVUX0JFR0lOCTB4ODAKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgIEFMVEVSTkFURSBOVU1CRVJTICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBBbHRlcm5hdGUgbnVtYmVycyBmb3IgdmFyaW91cyBtYXggcGFja2V0IHNpemVzIChPVjUxMSBvbmx5KSAqLworI2RlZmluZSBPVjUxMV9BTFRfU0laRV85OTIJMAorI2RlZmluZSBPVjUxMV9BTFRfU0laRV85OTMJMQorI2RlZmluZSBPVjUxMV9BTFRfU0laRV83NjgJMgorI2RlZmluZSBPVjUxMV9BTFRfU0laRV83NjkJMworI2RlZmluZSBPVjUxMV9BTFRfU0laRV81MTIJNAorI2RlZmluZSBPVjUxMV9BTFRfU0laRV81MTMJNQorI2RlZmluZSBPVjUxMV9BTFRfU0laRV8yNTcJNgorI2RlZmluZSBPVjUxMV9BTFRfU0laRV8wCTcKKworLyogQWx0ZXJuYXRlIG51bWJlcnMgZm9yIHZhcmlvdXMgbWF4IHBhY2tldCBzaXplcyAoT1Y1MTErIG9ubHkpICovCisjZGVmaW5lIE9WNTExUExVU19BTFRfU0laRV8wCTAKKyNkZWZpbmUgT1Y1MTFQTFVTX0FMVF9TSVpFXzMzCTEKKyNkZWZpbmUgT1Y1MTFQTFVTX0FMVF9TSVpFXzEyOQkyCisjZGVmaW5lIE9WNTExUExVU19BTFRfU0laRV8yNTcJMworI2RlZmluZSBPVjUxMVBMVVNfQUxUX1NJWkVfMzg1CTQKKyNkZWZpbmUgT1Y1MTFQTFVTX0FMVF9TSVpFXzUxMwk1CisjZGVmaW5lIE9WNTExUExVU19BTFRfU0laRV83NjkJNgorI2RlZmluZSBPVjUxMVBMVVNfQUxUX1NJWkVfOTYxCTcKKworLyogQWx0ZXJuYXRlIG51bWJlcnMgZm9yIHZhcmlvdXMgbWF4IHBhY2tldCBzaXplcyAoT1Y1MTgoKykgb25seSkgKi8KKyNkZWZpbmUgT1Y1MThfQUxUX1NJWkVfMAkwCisjZGVmaW5lIE9WNTE4X0FMVF9TSVpFXzEyOAkxCisjZGVmaW5lIE9WNTE4X0FMVF9TSVpFXzI1NgkyCisjZGVmaW5lIE9WNTE4X0FMVF9TSVpFXzM4NAkzCisjZGVmaW5lIE9WNTE4X0FMVF9TSVpFXzUxMgk0CisjZGVmaW5lIE9WNTE4X0FMVF9TSVpFXzY0MAk1CisjZGVmaW5lIE9WNTE4X0FMVF9TSVpFXzc2OAk2CisjZGVmaW5lIE9WNTE4X0FMVF9TSVpFXzg5Ngk3CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgIE9WNzYxMCBSRUdJU1RFUiBNTkVNT05JQ1MgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogT1Y3NjEwIHJlZ2lzdGVycyAqLworI2RlZmluZSBPVjc2MTBfUkVHX0dBSU4gICAgICAgICAgMHgwMAkvKiBnYWluIHNldHRpbmcgKDU6MCkgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19CTFVFICAgICAgICAgIDB4MDEJLyogYmx1ZSBjaGFubmVsIGJhbGFuY2UgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19SRUQgICAgICAgICAgIDB4MDIJLyogcmVkIGNoYW5uZWwgYmFsYW5jZSAqLworI2RlZmluZSBPVjc2MTBfUkVHX1NBVCAgICAgICAgICAgMHgwMwkvKiBzYXR1cmF0aW9uICovCisJCQkJCS8qIDA0IHJlc2VydmVkICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQ05UICAgICAgICAgICAweDA1CS8qIFkgY29udHJhc3QgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19CUlQgICAgICAgICAgIDB4MDYJLyogWSBicmlnaHRuZXNzICovCisJCQkJCS8qIDA4LTBiIHJlc2VydmVkICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQkxVRV9CSUFTICAgICAweDBDCS8qIGJsdWUgY2hhbm5lbCBiaWFzICg1OjApICovCisjZGVmaW5lIE9WNzYxMF9SRUdfUkVEX0JJQVMgICAgICAweDBECS8qIHJlYWQgY2hhbm5lbCBiaWFzICg1OjApICovCisjZGVmaW5lIE9WNzYxMF9SRUdfR0FNTUFfQ09FRkYgICAweDBFCS8qIGdhbW1hIHNldHRpbmdzICovCisjZGVmaW5lIE9WNzYxMF9SRUdfV0JfUkFOR0UgICAgICAweDBGCS8qIEFFQy9BTEMvUy1BV0Igc2V0dGluZ3MgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19FWFAgICAgICAgICAgIDB4MTAJLyogbWFudWFsIGV4cG9zdXJlIHNldHRpbmcgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19DTE9DSyAgICAgICAgIDB4MTEJLyogcG9sYXJpdHkvY2xvY2sgcHJlc2NhbGVyICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQ09NX0EgICAgICAgICAweDEyCS8qIG1pc2MgY29tbW9uIHJlZ3MgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19DT01fQiAgICAgICAgIDB4MTMJLyogbWlzYyBjb21tb24gcmVncyAqLworI2RlZmluZSBPVjc2MTBfUkVHX0NPTV9DICAgICAgICAgMHgxNAkvKiBtaXNjIGNvbW1vbiByZWdzICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQ09NX0QgICAgICAgICAweDE1CS8qIG1pc2MgY29tbW9uIHJlZ3MgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19GSUVMRF9ESVZJREUgIDB4MTYJLyogZmllbGQgaW50ZXJ2YWwvbW9kZSBzZXR0aW5ncyAqLworI2RlZmluZSBPVjc2MTBfUkVHX0hXSU5fU1RBUlQgICAgMHgxNwkvKiBob3Jpem9udGFsIHdpbmRvdyBzdGFydCAqLworI2RlZmluZSBPVjc2MTBfUkVHX0hXSU5fRU5EICAgICAgMHgxOAkvKiBob3Jpem9udGFsIHdpbmRvdyBlbmQgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19WV0lOX1NUQVJUICAgIDB4MTkJLyogdmVydGljYWwgd2luZG93IHN0YXJ0ICovCisjZGVmaW5lIE9WNzYxMF9SRUdfVldJTl9FTkQgICAgICAweDFBCS8qIHZlcnRpY2FsIHdpbmRvdyBlbmQgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19QSVhFTF9TSElGVCAgIDB4MUIJLyogcGl4ZWwgc2hpZnQgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19JRF9ISUdIICAgICAgIDB4MUMJLyogbWFudWZhY3R1cmVyIElEIE1TQiAqLworI2RlZmluZSBPVjc2MTBfUkVHX0lEX0xPVyAgICAgICAgMHgxRAkvKiBtYW51ZmFjdHVyZXIgSUQgTFNCICovCisJCQkJCS8qIDBlLTBmIHJlc2VydmVkICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQ09NX0UgICAgICAgICAweDIwCS8qIG1pc2MgY29tbW9uIHJlZ3MgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19ZT0ZGU0VUICAgICAgIDB4MjEJLyogWSBjaGFubmVsIG9mZnNldCAqLworI2RlZmluZSBPVjc2MTBfUkVHX1VPRkZTRVQgICAgICAgMHgyMgkvKiBVIGNoYW5uZWwgb2Zmc2V0ICovCisJCQkJCS8qIDIzIHJlc2VydmVkICovCisjZGVmaW5lIE9WNzYxMF9SRUdfRUNXICAgICAgICAgICAweDI0CS8qIEV4cG9zdXJlIHdoaXRlIGxldmVsIGZvciBBRUMgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19FQ0IgICAgICAgICAgIDB4MjUJLyogRXhwb3N1cmUgYmxhY2sgbGV2ZWwgZm9yIEFFQyAqLworI2RlZmluZSBPVjc2MTBfUkVHX0NPTV9GICAgICAgICAgMHgyNgkvKiBtaXNjIHNldHRpbmdzICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQ09NX0cgICAgICAgICAweDI3CS8qIG1pc2Mgc2V0dGluZ3MgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19DT01fSCAgICAgICAgIDB4MjgJLyogbWlzYyBzZXR0aW5ncyAqLworI2RlZmluZSBPVjc2MTBfUkVHX0NPTV9JICAgICAgICAgMHgyOQkvKiBtaXNjIHNldHRpbmdzICovCisjZGVmaW5lIE9WNzYxMF9SRUdfRlJBTUVSQVRFX0ggICAweDJBCS8qIGZyYW1lIHJhdGUgTVNCICsgbWlzYyAqLworI2RlZmluZSBPVjc2MTBfUkVHX0ZSQU1FUkFURV9MICAgMHgyQgkvKiBmcmFtZSByYXRlIExTQiAqLworI2RlZmluZSBPVjc2MTBfUkVHX0FMQyAgICAgICAgICAgMHgyQwkvKiBBdXRvIExldmVsIENvbnRyb2wgc2V0dGluZ3MgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19DT01fSiAgICAgICAgIDB4MkQJLyogbWlzYyBzZXR0aW5ncyAqLworI2RlZmluZSBPVjc2MTBfUkVHX1ZPRkZTRVQgICAgICAgMHgyRQkvKiBWIGNoYW5uZWwgb2Zmc2V0IGFkanVzdG1lbnQgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19BUlJBWV9CSUFTCSAweDJGCS8qIEFycmF5IGJpYXMgLS0gZG9uJ3QgY2hhbmdlICovCisJCQkJCS8qIDMwLTMyIHJlc2VydmVkICovCisjZGVmaW5lIE9WNzYxMF9SRUdfWUdBTU1BICAgICAgICAweDMzCS8qIG1pc2MgZ2FtbWEgc2V0dGluZ3MgKDc6NikgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19CSUFTX0FESlVTVCAgIDB4MzQJLyogbWlzYyBiaWFzIHNldHRpbmdzICovCisjZGVmaW5lIE9WNzYxMF9SRUdfQ09NX0wgICAgICAgICAweDM1CS8qIG1pc2Mgc2V0dGluZ3MgKi8KKwkJCQkJLyogMzYtMzcgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgT1Y3NjEwX1JFR19DT01fSyAgICAgICAgIDB4MzgJLyogbWlzYyByZWdpc3RlcnMgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICAgICAgICAgSTJDIEFERFJFU1NFUyAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIE9WN3h4MF9TSUQgICAweDQyCisjZGVmaW5lIE9WNnh4MF9TSUQgICAweEMwCisjZGVmaW5lIE9WOHh4MF9TSUQgICAweEEwCisjZGVmaW5lIEtTMDEyN19TSUQgICAweEQ4CisjZGVmaW5lIFNBQTcxMTFBX1NJRCAweDQ4CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogICAgICAgTUlTQ0VMTEFORU9VUyBERUZJTkVTICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBJMkNfQ0xPQ0tfUFJFU0NBTEVSIAkweDAzCisKKyNkZWZpbmUgRlJBTUVTX1BFUl9ERVNDCQkxMAkvKiBGSVhNRSAtIFdoYXQgc2hvdWxkIHRoaXMgYmU/ICovCisjZGVmaW5lIE1BWF9GUkFNRV9TSVpFX1BFUl9ERVNDCTk5MwkvKiBGb3Igc3RhdGljYWxseSBhbGxvY2F0ZWQgc3R1ZmYgKi8KKyNkZWZpbmUgUElYRUxTX1BFUl9TRUcJCTI1NgkvKiBQaXhlbHMgcGVyIHNlZ21lbnQgKi8KKworI2RlZmluZSBPVjUxMV9FTkRQT0lOVF9BRERSRVNTCTEJLyogSXNvYyBlbmRwb2ludCBudW1iZXIgKi8KKworI2RlZmluZSBPVjUxMV9OVU1GUkFNRVMJMgorI2lmIE9WNTExX05VTUZSQU1FUyA+IFZJREVPX01BWF9GUkFNRQorCSNlcnJvciAiT1Y1MTFfTlVNRlJBTUVTIGlzIHRvbyBoaWdoIgorI2VuZGlmCisKKyNkZWZpbmUgT1Y1MTFfTlVNU0JVRgkJMgorCisvKiBDb250cm9sIHRyYW5zZmVycyB1c2UgdXAgdG8gNCBieXRlcyAqLworI2RlZmluZSBPVjUxMV9DQlVGX1NJWkUJCTQKKworLyogU2l6ZSBvZiB1c2JfbWFrZV9wYXRoKCkgYnVmZmVyICovCisjZGVmaW5lIE9WNTExX1VTQl9QQVRIX0xFTgk2NAorCisvKiBCcmlkZ2UgdHlwZXMgKi8KK2VudW0geworCUJSR19VTktOT1dOLAorCUJSR19PVjUxMSwKKwlCUkdfT1Y1MTFQTFVTLAorCUJSR19PVjUxOCwKKwlCUkdfT1Y1MThQTFVTLAorfTsKKworLyogQnJpZGdlIGNsYXNzZXMgKi8KK2VudW0geworCUJDTF9VTktOT1dOLAorCUJDTF9PVjUxMSwKKwlCQ0xfT1Y1MTgsCit9OworCisvKiBTZW5zb3IgdHlwZXMgKi8KK2VudW0geworCVNFTl9VTktOT1dOLAorCVNFTl9PVjc2QkUsCisJU0VOX09WNzYxMCwKKwlTRU5fT1Y3NjIwLAorCVNFTl9PVjc2MjBBRSwKKwlTRU5fT1Y2NjIwLAorCVNFTl9PVjY2MzAsCisJU0VOX09WNjYzMEFFLAorCVNFTl9PVjY2MzBBRiwKKwlTRU5fT1Y4NjAwLAorCVNFTl9LUzAxMjcsCisJU0VOX0tTMDEyN0IsCisJU0VOX1NBQTcxMTFBLAorfTsKKworZW51bSB7CisJU1RBVEVfU0NBTk5JTkcsCQkvKiBTY2FubmluZyBmb3Igc3RhcnQgKi8KKwlTVEFURV9IRUFERVIsCQkvKiBQYXJzaW5nIGhlYWRlciAqLworCVNUQVRFX0xJTkVTLAkJLyogUGFyc2luZyBsaW5lcyAqLworfTsKKworLyogQnVmZmVyIHN0YXRlcyAqLworZW51bSB7CisJQlVGX05PVF9BTExPQ0FURUQsCisJQlVGX0FMTE9DQVRFRCwKK307CisKKy8qIC0tLS0tLS0tLSBEZWZpbml0aW9uIG9mIGlvY3RsIGludGVyZmFjZSAtLS0tLS0tLS0gKi8KKworI2RlZmluZSBPVjUxMV9JTlRFUkZBQ0VfVkVSIDEwMQorCisvKiBMRUQgb3B0aW9ucyAqLworZW51bSB7CisJTEVEX09GRiwKKwlMRURfT04sCisJTEVEX0FVVE8sCit9OworCisvKiBSYXcgZnJhbWUgZm9ybWF0cyAqLworZW51bSB7CisJUkFXRk1UX0lOVkFMSUQsCisJUkFXRk1UX1lVVjQwMCwKKwlSQVdGTVRfWVVWNDIwLAorCVJBV0ZNVF9ZVVY0MjIsCisJUkFXRk1UX0dCUjQyMiwKK307CisKK3N0cnVjdCBvdjUxMV9pMmNfc3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyIHNsYXZlOyAvKiBXcml0ZSBzbGF2ZSBJRCAocmVhZCBJRCAtIDEpICovCisJdW5zaWduZWQgY2hhciByZWc7ICAgLyogSW5kZXggb2YgcmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBjaGFyIHZhbHVlOyAvKiBVc2VyIHNldHMgdGhpcyB3LyB3cml0ZSwgZHJpdmVyIGRvZXMgdy8gcmVhZCAqLworCXVuc2lnbmVkIGNoYXIgbWFzazsgIC8qIEJpdHMgdG8gYmUgY2hhbmdlZC4gTm90IHVzZWQgd2l0aCByZWFkIG9wcyAqLworfTsKKworLyogaW9jdGxzICovCisjZGVmaW5lIE9WNTExSU9DX1dJMkMgICAgIF9JT1coJ3YnLCBCQVNFX1ZJRElPQ1BSSVZBVEUgKyA1LCBcCisJCQkgICAgICAgc3RydWN0IG92NTExX2kyY19zdHJ1Y3QpCisjZGVmaW5lIE9WNTExSU9DX1JJMkMgICAgX0lPV1IoJ3YnLCBCQVNFX1ZJRElPQ1BSSVZBVEUgKyA2LCBcCisJCQkgICAgICAgc3RydWN0IG92NTExX2kyY19zdHJ1Y3QpCisvKiAtLS0tLS0tLS0tLS0tIEVuZCBJT0NUTCBpbnRlcmZhY2UgLS0tLS0tLS0tLS0tLS0gKi8KKworc3RydWN0IHVzYl9vdjUxMTsJCS8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KKworc3RydWN0IG92NTExX3NidWYgeworCXN0cnVjdCB1c2Jfb3Y1MTEgKm92OworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisJc3RydWN0IHVyYiAqdXJiOworCXNwaW5sb2NrX3QgbG9jazsKKwlpbnQgbjsKK307CisKK2VudW0geworCUZSQU1FX1VOVVNFRCwJCS8qIFVudXNlZCAobm8gTUNBUFRVUkUpICovCisJRlJBTUVfUkVBRFksCQkvKiBSZWFkeSB0byBzdGFydCBncmFiYmluZyAqLworCUZSQU1FX0dSQUJCSU5HLAkJLyogSW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZ3JhYmJlZCBpbnRvICovCisJRlJBTUVfRE9ORSwJCS8qIEZpbmlzaGVkIGdyYWJiaW5nLCBidXQgbm90IGJlZW4gc3luY2VkIHlldCAqLworCUZSQU1FX0VSUk9SLAkJLyogU29tZXRoaW5nIGJhZCBoYXBwZW5lZCB3aGlsZSBwcm9jZXNzaW5nICovCit9OworCitzdHJ1Y3Qgb3Y1MTFfcmVndmFscyB7CisJZW51bSB7CisJCU9WNTExX0RPTkVfQlVTLAorCQlPVjUxMV9SRUdfQlVTLAorCQlPVjUxMV9JMkNfQlVTLAorCX0gYnVzOworCXVuc2lnbmVkIGNoYXIgcmVnOworCXVuc2lnbmVkIGNoYXIgdmFsOworfTsKKworc3RydWN0IG92NTExX2ZyYW1lIHsKKwlpbnQgZnJhbWVudW07CQkvKiBJbmRleCBvZiB0aGlzIGZyYW1lICovCisJdW5zaWduZWQgY2hhciAqZGF0YTsJLyogRnJhbWUgYnVmZmVyICovCisJdW5zaWduZWQgY2hhciAqdGVtcGRhdGE7IC8qIFRlbXAgYnVmZmVyIGZvciBtdWx0aS1zdGFnZSBjb252ZXJzaW9ucyAqLworCXVuc2lnbmVkIGNoYXIgKnJhd2RhdGE7CS8qIFJhdyBjYW1lcmEgZGF0YSBidWZmZXIgKi8KKwl1bnNpZ25lZCBjaGFyICpjb21wYnVmOwkvKiBUZW1wIGJ1ZmZlciBmb3IgZGVjb21wcmVzc29yICovCisKKwlpbnQgZGVwdGg7CQkvKiBCeXRlcyBwZXIgcGl4ZWwgKi8KKwlpbnQgd2lkdGg7CQkvKiBXaWR0aCBhcHBsaWNhdGlvbiBpcyBleHBlY3RpbmcgKi8KKwlpbnQgaGVpZ2h0OwkJLyogSGVpZ2h0IGFwcGxpY2F0aW9uIGlzIGV4cGVjdGluZyAqLworCisJaW50IHJhd3dpZHRoOwkJLyogQWN0dWFsIHdpZHRoIG9mIGZyYW1lIHNlbnQgZnJvbSBjYW1lcmEgKi8KKwlpbnQgcmF3aGVpZ2h0OwkJLyogQWN0dWFsIGhlaWdodCBvZiBmcmFtZSBzZW50IGZyb20gY2FtZXJhICovCisKKwlpbnQgc3ViX2ZsYWc7CQkvKiBTdWItY2FwdHVyZSBtb2RlIGZvciB0aGlzIGZyYW1lPyAqLworCXVuc2lnbmVkIGludCBmb3JtYXQ7CS8qIEZvcm1hdCBmb3IgdGhpcyBmcmFtZSAqLworCWludCBjb21wcmVzc2VkOwkJLyogSXMgZnJhbWUgY29tcHJlc3NlZD8gKi8KKworCXZvbGF0aWxlIGludCBncmFic3RhdGU7CS8qIFN0YXRlIG9mIGdyYWJiaW5nICovCisJaW50IHNjYW5zdGF0ZTsJCS8qIFN0YXRlIG9mIHNjYW5uaW5nICovCisKKwlpbnQgYnl0ZXNfcmVjdmQ7CS8qIE51bWJlciBvZiBpbWFnZSBieXRlcyByZWNlaXZlZCBmcm9tIGNhbWVyYSAqLworCisJbG9uZyBieXRlc19yZWFkOwkvKiBBbW91bnQgdGhhdCBoYXMgYmVlbiByZWFkKCkgKi8KKworCXdhaXRfcXVldWVfaGVhZF90IHdxOwkvKiBQcm9jZXNzZXMgd2FpdGluZyAqLworCisJaW50IHNuYXBzaG90OwkJLyogVHJ1ZSBpZiBmcmFtZSB3YXMgYSBzbmFwc2hvdCAqLworfTsKKworI2RlZmluZSBERUNPTVBfSU5URVJGQUNFX1ZFUiA0CisKKy8qIENvbXByZXNzaW9uIG1vZHVsZSBvcGVyYXRpb25zICovCitzdHJ1Y3Qgb3Y1MXhfZGVjb21wX29wcyB7CisJaW50ICgqZGVjb21wXzQwMCkodW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwKKwkJCSAgaW50LCBpbnQsIGludCk7CisJaW50ICgqZGVjb21wXzQyMCkodW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwKKwkJCSAgaW50LCBpbnQsIGludCk7CisJaW50ICgqZGVjb21wXzQyMikodW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwKKwkJCSAgaW50LCBpbnQsIGludCk7CisJc3RydWN0IG1vZHVsZSAqb3duZXI7Cit9OworCitzdHJ1Y3QgdXNiX292NTExIHsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisKKwlpbnQgY3VzdG9taWQ7CisJY2hhciAqZGVzYzsKKwl1bnNpZ25lZCBjaGFyIGlmYWNlOworCWNoYXIgdXNiX3BhdGhbT1Y1MTFfVVNCX1BBVEhfTEVOXTsKKworCS8qIERldGVybWluZWQgYnkgc2Vuc29yIHR5cGUgKi8KKwlpbnQgbWF4d2lkdGg7CisJaW50IG1heGhlaWdodDsKKwlpbnQgbWlud2lkdGg7CisJaW50IG1pbmhlaWdodDsKKworCWludCBicmlnaHRuZXNzOworCWludCBjb2xvdXI7CisJaW50IGNvbnRyYXN0OworCWludCBodWU7CisJaW50IHdoaXRlbmVzczsKKwlpbnQgZXhwb3N1cmU7CisJaW50IGF1dG9fYnJ0OwkJLyogQXV0byBicmlnaHRuZXNzIGVuYWJsZWQgZmxhZyAqLworCWludCBhdXRvX2dhaW47CQkvKiBBdXRvIGdhaW4gY29udHJvbCBlbmFibGVkIGZsYWcgKi8KKwlpbnQgYXV0b19leHA7CQkvKiBBdXRvIGV4cG9zdXJlIGVuYWJsZWQgZmxhZyAqLworCWludCBiYWNrbGlnaHQ7CQkvKiBCYWNrbGlnaHQgZXhwb3N1cmUgYWxnb3JpdGhtIGZsYWcgKi8KKwlpbnQgbWlycm9yOwkJLyogSW1hZ2UgaXMgcmV2ZXJzZWQgaG9yaXpvbnRhbGx5ICovCisKKwlpbnQgbGVkX3BvbGljeTsJCS8qIExFRDogb2ZmfG9ufGF1dG87IE9WNTExKyBvbmx5ICovCisKKwlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CS8qIFNlcmlhbGl6ZXMgdXNlci1hY2Nlc3NpYmxlIG9wZXJhdGlvbnMgKi8KKwlpbnQgdXNlcjsJCS8qIHVzZXIgY291bnQgZm9yIGV4Y2x1c2l2ZSB1c2UgKi8KKworCWludCBzdHJlYW1pbmc7CQkvKiBBcmUgd2Ugc3RyZWFtaW5nIElzb2Nocm9ub3VzPyAqLworCWludCBncmFiYmluZzsJCS8qIEFyZSB3ZSBncmFiYmluZz8gKi8KKworCWludCBjb21wcmVzczsJCS8qIFNob3VsZCB0aGUgbmV4dCBmcmFtZSBiZSBjb21wcmVzc2VkPyAqLworCWludCBjb21wcmVzc19pbml0ZWQ7CS8qIEFyZSBjb21wcmVzc2lvbiBwYXJhbXMgdXBsb2FkZWQ/ICovCisKKwlpbnQgbGlnaHRmcmVxOwkJLyogUG93ZXIgKGxpZ2h0aW5nKSBmcmVxdWVuY3kgKi8KKwlpbnQgYmFuZGZpbHQ7CQkvKiBCYW5kaW5nIGZpbHRlciBlbmFibGVkIGZsYWcgKi8KKworCXVuc2lnbmVkIGNoYXIgKmZidWY7CS8qIFZpZGVvZGV2IGJ1ZmZlciBhcmVhICovCisJdW5zaWduZWQgY2hhciAqdGVtcGZidWY7IC8qIFRlbXBvcmFyeSAoaW50ZXJtZWRpYXRlKSBidWZmZXIgYXJlYSAqLworCXVuc2lnbmVkIGNoYXIgKnJhd2ZidWY7CS8qIFJhdyBjYW1lcmEgZGF0YSBidWZmZXIgYXJlYSAqLworCisJaW50IHN1Yl9mbGFnOwkJLyogUGl4IEFycmF5IHN1YmNhcHR1cmUgb24gZmxhZyAqLworCWludCBzdWJ4OwkJLyogUGl4IEFycmF5IHN1YmNhcHR1cmUgeCBvZmZzZXQgKi8KKwlpbnQgc3VieTsJCS8qIFBpeCBBcnJheSBzdWJjYXB0dXJlIHkgb2Zmc2V0ICovCisJaW50IHN1Ync7CQkvKiBQaXggQXJyYXkgc3ViY2FwdHVyZSB3aWR0aCAqLworCWludCBzdWJoOwkJLyogUGl4IEFycmF5IHN1YmNhcHR1cmUgaGVpZ2h0ICovCisKKwlpbnQgY3VyZnJhbWU7CQkvKiBDdXJyZW50IHJlY2VpdmluZyBzYnVmICovCisJc3RydWN0IG92NTExX2ZyYW1lIGZyYW1lW09WNTExX05VTUZSQU1FU107CQorCisJc3RydWN0IG92NTExX3NidWYgc2J1ZltPVjUxMV9OVU1TQlVGXTsKKworCXdhaXRfcXVldWVfaGVhZF90IHdxOwkvKiBQcm9jZXNzZXMgd2FpdGluZyAqLworCisJaW50IHNuYXBfZW5hYmxlZDsJLyogU25hcHNob3QgbW9kZSBlbmFibGVkICovCisJCisJaW50IGJyaWRnZTsJCS8qIFR5cGUgb2YgYnJpZGdlIChCUkdfKikgKi8KKwlpbnQgYmNsYXNzOwkJLyogQ2xhc3Mgb2YgYnJpZGdlIChCQ0xfKikgKi8KKwlpbnQgc2Vuc29yOwkJLyogVHlwZSBvZiBpbWFnZSBzZW5zb3IgY2hpcCAoU0VOXyopICovCisKKwlpbnQgcGFja2V0X3NpemU7CS8qIEZyYW1lIHNpemUgcGVyIGlzb2MgZGVzYyAqLworCWludCBwYWNrZXRfbnVtYmVyaW5nOwkvKiBJcyBJU08gZnJhbWUgbnVtYmVyaW5nIGVuYWJsZWQ/ICovCisKKwlzdHJ1Y3Qgc2VtYXBob3JlIHBhcmFtX2xvY2s7CS8qIHBhcmFtcyBsb2NrIGZvciB0aGlzIGNhbWVyYSAqLworCisJLyogRnJhbWVidWZmZXIvc2J1ZiBtYW5hZ2VtZW50ICovCisJaW50IGJ1Zl9zdGF0ZTsKKwlzdHJ1Y3Qgc2VtYXBob3JlIGJ1Zl9sb2NrOworCisJc3RydWN0IG92NTF4X2RlY29tcF9vcHMgKmRlY29tcF9vcHM7CisKKwkvKiBTdG9wIHN0cmVhbWluZyB3aGlsZSBjaGFuZ2luZyBwaWN0dXJlIHNldHRpbmdzICovCisJaW50IHN0b3BfZHVyaW5nX3NldDsKKworCWludCBzdG9wcGVkOwkJLyogU3RyZWFtaW5nIGlzIHRlbXBvcmFyaWx5IHBhdXNlZCAqLworCisJLyogVmlkZW8gZGVjb2RlciBzdHVmZiAqLworCWludCBpbnB1dDsJCS8qIENvbXBvc2l0ZSwgUy1WSURFTywgZXRjLi4uICovCisJaW50IG51bV9pbnB1dHM7CQkvKiBOdW1iZXIgb2YgaW5wdXRzICovCisJaW50IG5vcm07IAkJLyogTlRTQyAvIFBBTCAvIFNFQ0FNICovCisJaW50IGhhc19kZWNvZGVyOwkvKiBEZXZpY2UgaGFzIGEgdmlkZW8gZGVjb2RlciAqLworCWludCBwYWw7CQkvKiBEZXZpY2UgaXMgZGVzaWduZWQgZm9yIFBBTCByZXNvbHV0aW9uICovCisKKwkvKiBJMkMgaW50ZXJmYWNlICovCisJc3RydWN0IHNlbWFwaG9yZSBpMmNfbG9jazsJICAvKiBQcm90ZWN0IEkyQyBjb250cm9sbGVyIHJlZ3MgKi8KKwl1bnNpZ25lZCBjaGFyIHByaW1hcnlfaTJjX3NsYXZlOyAgLyogSTJDIHdyaXRlIGlkIG9mIHNlbnNvciAqLworCisJLyogQ29udHJvbCB0cmFuc2FjdGlvbiBzdHVmZiAqLworCXVuc2lnbmVkIGNoYXIgKmNidWY7CQkvKiBCdWZmZXIgZm9yIHBheWxvYWQgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIGNidWZfbG9jazsKK307CisKKy8qIFVzZWQgdG8gcmVwcmVzZW50IGEgbGlzdCBvZiB2YWx1ZXMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgc3ltYm9saWMgbmFtZXMgKi8KK3N0cnVjdCBzeW1ib2xpY19saXN0IHsKKwlpbnQgbnVtOworCWNoYXIgKm5hbWU7Cit9OworCisjZGVmaW5lIE5PVF9ERUZJTkVEX1NUUiAiVW5rbm93biIKKworLyogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgbWF0Y2hpbmcgZWxlbWVudCBpbiB0aGUgc3ltYm9saWNfbGlzdCBhcnJheS4gVGhlCisgKiBlbmQgb2YgdGhlIGxpc3QgbXVzdCBiZSBtYXJrZWQgd2l0aCBhbiBlbGVtZW50IHRoYXQgaGFzIGEgTlVMTCBuYW1lLgorICovCitzdGF0aWMgaW5saW5lIGNoYXIgKiAKK3N5bWJvbGljKHN0cnVjdCBzeW1ib2xpY19saXN0IGxpc3RbXSwgaW50IG51bSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGxpc3RbaV0ubmFtZSAhPSBOVUxMOyBpKyspCisJCQlpZiAobGlzdFtpXS5udW0gPT0gbnVtKQorCQkJCXJldHVybiAobGlzdFtpXS5uYW1lKTsKKworCXJldHVybiAoTk9UX0RFRklORURfU1RSKTsKK30KKworLyogQ29tcHJlc3Npb24gc3R1ZmYgKi8KKworI2RlZmluZSBPVjUxMV9RVUFOVEFCTEVTSVpFCTY0CisjZGVmaW5lIE9WNTE4X1FVQU5UQUJMRVNJWkUJMzIKKworI2RlZmluZSBPVjUxMV9ZUVVBTlRBQkxFIHsgXAorCTAsIDEsIDEsIDIsIDIsIDMsIDMsIDQsIFwKKwkxLCAxLCAxLCAyLCAyLCAzLCA0LCA0LCBcCisJMSwgMSwgMiwgMiwgMywgNCwgNCwgNCwgXAorCTIsIDIsIDIsIDMsIDQsIDQsIDQsIDQsIFwKKwkyLCAyLCAzLCA0LCA0LCA1LCA1LCA1LCBcCisJMywgMywgNCwgNCwgNSwgNSwgNSwgNSwgXAorCTMsIDQsIDQsIDQsIDUsIDUsIDUsIDUsIFwKKwk0LCA0LCA0LCA0LCA1LCA1LCA1LCA1ICBcCit9CisKKyNkZWZpbmUgT1Y1MTFfVVZRVUFOVEFCTEUgeyBcCisJMCwgMiwgMiwgMywgNCwgNCwgNCwgNCwgXAorCTIsIDIsIDIsIDQsIDQsIDQsIDQsIDQsIFwKKwkyLCAyLCAzLCA0LCA0LCA0LCA0LCA0LCBcCisJMywgNCwgNCwgNCwgNCwgNCwgNCwgNCwgXAorCTQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIFwKKwk0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCBcCisJNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgXAorCTQsIDQsIDQsIDQsIDQsIDQsIDQsIDQgIFwKK30KKworI2RlZmluZSBPVjUxOF9ZUVVBTlRBQkxFIHsgXAorCTUsIDQsIDUsIDYsIDYsIDcsIDcsIDcsIFwKKwk1LCA1LCA1LCA1LCA2LCA3LCA3LCA3LCBcCisJNiwgNiwgNiwgNiwgNywgNywgNywgOCwgXAorCTcsIDcsIDYsIDcsIDcsIDcsIDgsIDggIFwKK30KKworI2RlZmluZSBPVjUxOF9VVlFVQU5UQUJMRSB7IFwKKwk2LCA2LCA2LCA3LCA3LCA3LCA3LCA3LCBcCisJNiwgNiwgNiwgNywgNywgNywgNywgNywgXAorCTYsIDYsIDYsIDcsIDcsIDcsIDcsIDgsIFwKKwk3LCA3LCA3LCA3LCA3LCA3LCA4LCA4ICBcCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL0NoYW5nZUxvZyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9DaGFuZ2VMb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJlYjcxYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9DaGFuZ2VMb2cKQEAgLTAsMCArMSwxNDMgQEAKKzkuMC4yCisKKyogQWRkaW5nICNpZmRlZiB0byBjb21waWxlIFBXQyBiZWZvcmUgYW5kIGFmdGVyIDIuNi41CisKKzkuMC4xCisKKzkuMAorCisKKzguMTIKKworKiBJbXBsZW1lbnQgbW90b3JpemVkIHBhbi90aWx0IGZlYXR1cmUgZm9yIExvZ2l0ZWNoIFF1aWNrQ2FtIE9yYml0L1NwZXJlLgorCis4LjExLjEKKworKiBGaXggZm9yIFBDVkM3MjAvNDAsIHdvdWxkIG5vdCBiZSBhYmxlIHRvIHNldCB2aWRlb21vZGUKKyogRml4IGZvciBTYW1zdW5nIE1QQyBtb2RlbHMsIGFwcGVhcmFudGx5IHRoZXkgYXJlIGJhc2VkIG9uIGEgbmV3ZXIgY2hpcHNldAorCis4LjExCisKKyogMjAgZGV2X2hpbnRzIChwZXIgcmVxdWVzdCkKKyogSG90IHVucGx1Z2dpbmcgc2hvdWxkIGJlIGJldHRlciwgbm8gbW9yZSBkYW5nbGluZyBwb2ludGVycyBvciBtZW1vcnkgbGVha3MKKyogQWRkZWQgcmVzZXJ2ZWQgTG9naXRlY2ggd2ViY2FtIElEcworKiBEZXZpY2Ugbm93IHJlbWVtYmVycyBzaXplICYgZnBzIGJldHdlZW4gY2xvc2UoKS9vcGVuKCkKKyogUmVtb3ZlZCBwYWxldHRlIHN0dWZmIGFsdG9nZXRoZXIKKworOC4xMC4xCisKKyogQWRkZWQgSURzIGZvciBQQ1ZDNzIwSy80MCBhbmQgQ3JlYXRpdmUgTGFicyBXZWJjYW0gUHJvCisKKzguMTAKKworKiBGaXhlZCBJRCBmb3IgUXVpY2tDYW0gTm90ZWJvb2sgcHJvCisqIEFkZGVkIEdSRUFMU0laRSBpb2N0bCgpIGNhbGwKKyogRml4ZWQgYnVnIGluIGNhc2UgUFdDWCB3YXMgbm90IGxvYWRlZCBhbmQgaW52YWxpZCBzaXplIHdhcyBzZXQKKworOC45CisKKyogTWVyZ2luZyB3aXRoIGtlcm5lbCAyLjUuNDkKKyogQWRkaW5nIElEcyBmb3IgUXVpY2tDYW0gWm9vbSAmIFF1aWNrQ2FtIE5vdGVib29rCisKKzguOAorCisqIEZpeGluZyAnbGVkcycgcGFyYW1ldGVyCisqIEFkZGluZyBJRHMgZm9yIExvZ2l0ZWNoIFF1aWNrQ2FtIFBybyA0MDAwCisqIE1ha2luZyBVUkIgaW5pdC9jbGVhbnVwIGEgbGl0dGxlIG5pY2VyCisKKzguNworCisqIEluY29ycG9yYXRpbmcgY2hhbmdlcyBpbiBpb2N0bCgpIHBhcmFtZXRlciBwYXNzaW5nCisqIEFsc28gY2hhbmdlcyB0byBVUkIgbWVjaGFuaXNtCisKKzguNgorCisqIEFkZGVkIElEJ3MgZm9yIFZpc2lvbml0ZSBWQ1MgVU0xMDAgYW5kIFVDMzAwCisqIFJlbW92ZWQgWVVWNDIwLWludGVybGFjZWQgcGFsZXR0ZSBhbHRvZ2V0aGVyICh3YXMgY29uZnVzaW5nKQorKiBSZW1vdmVkIE1JUlJPUiBzdHVmZiBhcyBpdCBkaWRuJ3Qgd29yayBhbnl3YXkKKyogRml4ZWQgYSBwcm9ibGVtIHdpdGggdGhlICdsZWRzJyBwYXJhbWV0ZXIgKHdvdWxkbid0IGJsaW5rKQorKiBBZGRlZCBpb2N0bCgpcyBmb3IgYWR2YW5jZWQgZmVhdHVyZXM6ICdleHRlbmRlZCcgd2hpdGViYWxhbmNlIGlvY3RsKClzLAorICBDT05UT1VSLCBCQUNLTElHSFQsIEZMSUNLRVIsIERZTk5PSVNFLgorKiBWSURJT0NHQ0FQLm5hbWUgbm93IGNvbnRhaW5zIHJlYWwgY2FtZXJhIG1vZGVsIG5hbWUgaW5zdGVhZCBvZgorICAnUGhpbGlwcyB4eHggd2ViY2FtJworKiBBZGRlZCBQUk9CRSBpb2N0bCAoc2VlIHByZXZpb3VzIHBvaW50ICYgQVBJIGRvYykKKworOC41CisKKyogQWRkaW5nIElEcyBmb3IgQ3JlYXRpdmUgTGFicyBXZWJjYW0gNQorKiBBZGRpbmcgSURzIGZvciBTT1RFQyBDTVMtMDAxIHdlYmNhbQorKiBTb2x2aW5nIHBvc3NpYmxlIGhhbmcgaW4gVklESU9DU1lOQyB3aGVuIHVucGx1Z2dpbmcgdGhlIGNhbSAKKyogRm9yZ290IHRvIHJldHVybiBzdHJ1Y3R1cmUgaW4gVklESU9DUFdDR0FXQiwgb29wcworKiBUaW1lIGludGVydmFsIGZvciB0aGUgTEVEcyBhcmUgbm93IGluIG1pbGxpc2Vjb25kcworCis4LjQKKworKiBGaXhpbmcgcG93ZXJfc2F2ZSBvcHRpb24gZm9yIFZlc3RhIHJhbmdlCisqIEhhbmRsaW5nIG5ldyBlcnJvciBjb2RlcyBpbiBJU09DIGNhbGxiYWNrCisqIEFkZGluZyBkZXZfaGludCBtb2R1bGUgcGFyYW1ldGVyLCB0byBzcGVjaWZ5IC9kZXYvdmlkZW9YIGRldmljZSBub2RlcworCis4LjMKKworKiBBZGRpbmcgU2Ftc3VuZyBDMTAgYW5kIEMzMCBjYW1lcmFzCisqIFJlbW92aW5nIHBhbGV0dGUgbW9kdWxlIHBhcmFtZXRlcgorKiBGaXhlZCB0eXBvIGluIElEIG9mIFF1aWNrQ2FtIDMwMDAgUHJvCisqIEFkZGluZyBMRUQgc2V0dGluZ3MgKGJsaW5raW5nIHdoaWxlIGluIHVzZSkgZm9yIFRvVUNhbSBjYW1lcmFzLgorKiBUdXJucyBMRUQgb2ZmIHdoZW4gY2FtZXJhIGlzIG5vdCBpbiB1c2UuCisKKzguMgorCisqIE1ha2luZyBtb2R1bGUgbW9yZSBzaWxlbnQgd2hlbiB0cmFjZSA9IDAgCisqIEFkZGluZyBRdWlja0NhbSAzMDAwIFBybyBJRHMKKyogQ2hyb21pbmFuY2UgY29udHJvbCBmb3IgdGhlIFZlc3RhIGNhbWVyYXMKKyogSG9wZWZ1bGx5IGZpeGVkIHByb2JsZW1zIG9uIG1hY2hpbmVzIHdpdGggQklHTUVNIGFuZCA+IDFHQiBvZiBSQU0KKyogSW5jbHVkZWQgT2xpdmVyIE5ldWtlbSdzIGxvY2tfa2VybmVsKCkgcGF0Y2gKKyogQWxsb2NhdGVzIGxlc3MgbWVtb3J5IGZvciBpbWFnZSBidWZmZXJzCisqIEFkZHMgaW9jdGwoKXMgZm9yIHRoZSB3aGl0ZWJhbGFuY2luZworCis4LjEKKworKiBBZGRpbmcgc3VwcG9ydCBmb3IgNzUwCisqIEFkZGluZyBWNEwgR0FVRElPL1NBVURJTy9VTklUIGlvY3RsKCkgY2FsbHMKKworOC4wCisqICdkYW1hZ2UgY29udHJvbCcgYWZ0ZXIgaW5jbHVzaW9uIGluIDIuNC41LgorKiBDaGFuZ2VkIHdhaXQtcXVldWUgbWVjaGFuaXNtIGluIHJlYWQvbW1hcC9wb2xsIGFjY29yZGluZyB0byB0aGUgYm9vay4KKyogSW5jbHVkZWQgWVVWNDIwUCBwYWxldHRlLgorKiBDaGFuZ2VkIGludGVyZmFjZSB0byBkZWNvbXByZXNzb3IgbW9kdWxlLgorKiBDbGVhbmVkIHVwIHB3YyBzdHJ1Y3R1cmUgYSBiaXQuCisKKzcuMAorCisqIEZpeGVkIGJ1ZyBpbiB2Y3Z0XzQyMGlfeXV5djsgZXh0cmEgdmFyaWFibGVzIG9uIHN0YWNrIHdlcmUgbWlzYWxpZ25lZC4KKyogVGhlcmUgaXMgbm93IGEgY2xlYXIgZXJyb3IgbWVzc2FnZSB3aGVuIGFuIGltYWdlIHNpemUgaXMgc2VsZWN0ZWQgdGhhdAorICBpcyBvbmx5IHN1cHBvcnRlZCB1c2luZyB0aGUgZGVjb21wcmVzc29yLCBhbmQgdGhlIGRlY29tcHJlc3NvciBpc24ndAorICBsb2FkZWQuCisqIFdoZW4gdGhlIGRlY29tcHJlc3NvciB3YXNuJ3QgbG9hZGVkLCBzZWxlY3RpbmcgbGFyZ2UgaW1hZ2Ugc2l6ZQorICB3b3VsZCBjcmVhdGUgc2tld2VkIG9yIGRvdWJsZSBpbWFnZXMuCisKKzYuMworCisqIEludHJvZHVjZWQgc3BpbmxvY2tzIGZvciB0aGUgYnVmZmVyIHBvaW50ZXIgbWFuaXB1bGF0aW9uOyBhIG51bWJlciBvZgorICByZXBvcnRzIHNlZW0gdG8gc3VnZ2VzdCB0aGUgZG93bigpL3VwKCkgc2VtYXBob3JlcyB3ZXJlIHRoZSBjYXVzZSBvZgorICBsb2NrdXBzLCBzaW5jZSB0aGV5IGFyZSBub3Qgc3VpdGFibGUgZm9yIGludGVycnVwdC91c2VyIGxvY2tpbmcuCisqIFNlcGFyYXRlZCBkZWNvbXByZXNzb3IgYW5kIGNvcmUgY29kZSBpbnRvIDIgbW9kdWxlcy4KKworNi4yCisKKyogTm9uLWludGVncmFsIGltYWdlIHNpemVzIGFyZSBub3cgcGFkZGVkIHdpdGggZ3JheSBvciBibGFjay4KKyogQWRkZWQgU0hVVFRFUlNQRUVEIGlvY3RsKCkuCisqIEZpeGVkIGJ1Z2xldCBpbiBWSURJT0NQV0NTQUdDOyB0aGUgZnVuY3Rpb24gd291bGQgYWx3YXlzIHJldHVybiBhbiBlcnJvciwKKyAgZXZlbiB0aG91Z2ggdGhlIGNhbGwgc3VjY2VlZGVkLgorKiBBZGRlZCBob3RwbHVnIHN1cHBvcnQgZm9yIDIuNC4qLgorKiBNZW1vcnk6IHRoZSA2NDUvNjQ2IHVzZXMgbGVzcyBtZW1vcnkgbm93LgorCis2LjEKKworKiBWSURJT0NTUElDVCByZXR1cm5zIC1FSU5WQUwgd2l0aCBpbnZhbGlkIHBhbGV0dGVzLgorKiBBZGRlZCBzYXR1cmF0aW9uIGNvbnRyb2wuCisqIFNwbGl0IGRlY29tcHJlc3NvcnMgZnJvbSByZXN0LgorKiBGaXhlZCBidWcgdGhhdCB3b3VsZCByZXNldCB0aGUgZnJhbWVyYXRlIHRvIHRoZSBkZWZhdWx0IGZyYW1lcmF0ZSBpZiAKKyAgdGhlIHJhdGUgZmllbGQgd2FzIHNldCB0byAwICh3aGljaCBpcyBub3Qgd2hhdCBJIGludGVuZGVkLCBubC4gZG8gbm90IAorICBjaGFuZ2UgdGhlIGZyYW1lcmF0ZSEpLgorKiBWSURJT0NQV0NTQ1FVQUwgKHNldHRpbmcgY29tcHJlc3Npb24gcXVhbGl0eSkgbm93IHRha2VzIGVmZmVjdCBpbW1lZGlhdGVseS4KKyogV29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gdGhlIDczMCBzZW5zb3IuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBiNDFlZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9NYWtlZmlsZQpAQCAtMCwwICsxLDIwIEBACitpZm5lcSAoJChLRVJORUxSRUxFQVNFKSwpCisKK3B3Yy1vYmpzCTo9IHB3Yy1pZi5vIHB3Yy1taXNjLm8gcHdjLWN0cmwubyBwd2MtdW5jb21wcmVzcy5vIHB3Yy1kZWMxLm8gcHdjLWRlYzIzLm8gcHdjLWtpYXJhLm8gcHdjLXRpbW9uLm8KKworb2JqLSQoQ09ORklHX1VTQl9QV0MpICs9IHB3Yy5vCisKK2Vsc2UKKworS0RJUiA6PSAvbGliL21vZHVsZXMvJChzaGVsbCB1bmFtZSAtcikvYnVpbGQKK1BXRCA6PSAkKHNoZWxsIHB3ZCkKKworZGVmYXVsdDoKKwkkKE1BS0UpIC1DICQoS0RJUikgU1VCRElSUz0kKFBXRCkgbW9kdWxlcworCitlbmRpZgorCitjbGVhbjoKKwlybSAtZiAqLltvYXNdIC4qLmZsYWdzICoua28gLiouY21kIC4qLmQgLioudG1wICoubW9kLmMgCisJcm0gLXJmIC50bXBfdmVyc2lvbnMKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3BoaWxpcHMudHh0IGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3BoaWxpcHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YTY0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcGhpbGlwcy50eHQKQEAgLTAsMCArMSwyMzYgQEAKK1RoaXMgZmlsZSBjb250YWlucyBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIHRoZSBQaGlsaXBzIGFuZCBPRU0gd2ViY2Ftcy4KK0UtbWFpbDogd2ViY2FtQHNtY2MuZGVtb24ubmwgICAgICAgICAgICAgICAgICAgICAgICBMYXN0IHVwZGF0ZWQ6IDIwMDQtMDEtMTkKK1NpdGU6IGh0dHA6Ly93d3cuc21jYy5kZW1vbi5ubC93ZWJjYW0vCisKK0FzIG9mIHRoaXMgbW9tZW50LCB0aGUgZm9sbG93aW5nIGNhbWVyYXMgYXJlIHN1cHBvcnRlZDoKKyAqIFBoaWxpcHMgUENBNjQ1CisgKiBQaGlsaXBzIFBDQTY0NgorICogUGhpbGlwcyBQQ1ZDNjc1CisgKiBQaGlsaXBzIFBDVkM2ODAKKyAqIFBoaWxpcHMgUENWQzY5MAorICogUGhpbGlwcyBQQ1ZDNzIwLzQwCisgKiBQaGlsaXBzIFBDVkM3MzAKKyAqIFBoaWxpcHMgUENWQzc0MAorICogUGhpbGlwcyBQQ1ZDNzUwCisgKiBBc2tleSBWQzAxMAorICogQ3JlYXRpdmUgTGFicyBXZWJjYW0gNQorICogQ3JlYXRpdmUgTGFicyBXZWJjYW0gUHJvIEV4CisgKiBMb2dpdGVjaCBRdWlja0NhbSAzMDAwIFBybworICogTG9naXRlY2ggUXVpY2tDYW0gNDAwMCBQcm8KKyAqIExvZ2l0ZWNoIFF1aWNrQ2FtIE5vdGVib29rIFBybworICogTG9naXRlY2ggUXVpY2tDYW0gWm9vbQorICogTG9naXRlY2ggUXVpY2tDYW0gT3JiaXQKKyAqIExvZ2l0ZWNoIFF1aWNrQ2FtIFNwaGVyZQorICogU2Ftc3VuZyBNUEMtQzEwCisgKiBTYW1zdW5nIE1QQy1DMzAKKyAqIFNvdGVjIEFmaW5hIEV5ZQorICogQU1FIENVLTAwMQorICogVmlzaW9uaXRlIFZDUy1VTTEwMAorICogVmlzaW9uaXRlIFZDUy1VQzMwMAorCitUaGUgbWFpbiB3ZWJwYWdlIGZvciB0aGUgUGhpbGlwcyBkcml2ZXIgaXMgYXQgdGhlIGFkZHJlc3MgYWJvdmUuIEl0IGNvbnRhaW5zCithIGxvdCBvZiBleHRyYSBpbmZvcm1hdGlvbiwgYSBGQVEsIGFuZCB0aGUgYmluYXJ5IHBsdWdpbiAnUFdDWCcuIFRoaXMgcGx1Z2luCitjb250YWlucyBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIHRoYXQgYWxsb3cgeW91IHRvIHVzZSBoaWdoZXIgaW1hZ2Ugc2l6ZXMgYW5kCitmcmFtZXJhdGVzOyBpbiBhZGRpdGlvbiB0aGUgd2ViY2FtIHVzZXMgbGVzcyBiYW5kd2lkdGggb24gdGhlIFVTQiBidXMgKGhhbmR5CitpZiB5b3Ugd2FudCB0byBydW4gbW9yZSB0aGFuIDEgY2FtZXJhIHNpbXVsdGFuZW91c2x5KS4gVGhlc2Ugcm91dGluZXMgZmFsbAordW5kZXIgYSBOREEsIGFuZCBtYXkgdGhlcmVmb3Igbm90IGJlIGRpc3RyaWJ1dGVkIGFzIHNvdXJjZTsgaG93ZXZlciwgaXRzIHVzZQoraXMgY29tcGxldGVseSBvcHRpb25hbC4KKworWW91IGNhbiBidWlsZCB0aGlzIGNvZGUgZWl0aGVyIGludG8geW91ciBrZXJuZWwsIG9yIGFzIGEgbW9kdWxlLiBJIHJlY29tbWVuZAordGhlIGxhdHRlciwgc2luY2UgaXQgbWFrZXMgdHJvdWJsZXNob290aW5nIGEgbG90IGVhc2llci4gVGhlIGJ1aWx0LWluCittaWNyb3Bob25lIGlzIHN1cHBvcnRlZCB0aHJvdWdoIHRoZSBVU0IgQXVkaW8gY2xhc3MuCisKK1doZW4geW91IGxvYWQgdGhlIG1vZHVsZSB5b3UgY2FuIHNldCBzb21lIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZQorY2FtZXJhOyBzb21lIHByb2dyYW1zIGRlcGVuZCBvbiBhIHBhcnRpY3VsYXIgaW1hZ2Utc2l6ZSBvciAtZm9ybWF0IGFuZAorZG9uJ3Qga25vdyBob3cgdG8gc2V0IGl0IHByb3Blcmx5IGluIHRoZSBkcml2ZXIuIFRoZSBvcHRpb25zIGFyZToKKworc2l6ZQorICAgQ2FuIGJlIG9uZSBvZiAnc3FjaWYnLCAncXNpZicsICdxY2lmJywgJ3NpZicsICdjaWYnIG9yCisgICAndmdhJywgZm9yIGFuIGltYWdlIHNpemUgb2YgcmVzcC4gMTI4eDk2LCAxNjB4MTIwLCAxNzZ4MTQ0LAorICAgMzIweDI0MCwgMzUyeDI4OCBhbmQgNjQweDQ4MCAob2YgY291cnNlLCBvbmx5IGZvciB0aG9zZSBjYW1lcmFzIHRoYXQgCisgICBzdXBwb3J0IHRoZXNlIHJlc29sdXRpb25zKS4KKworZnBzCisgICBTcGVjaWZpZXMgdGhlIGRlc2lyZWQgZnJhbWVyYXRlLiBJcyBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBvZiA0LTMwLgorCitmYnVmcworICAgVGhpcyBwYXJhbXRlciBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBpbnRlcm5hbCBidWZmZXJzIHRvIHVzZSBmb3Igc3RvcmluZyAKKyAgIGZyYW1lcyBmcm9tIHRoZSBjYW0uIFRoaXMgd2lsbCBoZWxwIGlmIHRoZSBwcm9jZXNzIHRoYXQgcmVhZHMgaW1hZ2VzIGZyb20gCisgICB0aGUgY2FtIGlzIGEgYml0IHNsb3cgb3IgbW9tZW50YXJlbHkgYnVzeS4gSG93ZXZlciwgb24gc2xvdyBtYWNoaW5lcyBpdCAKKyAgIG9ubHkgaW50cm9kdWNlcyBsYWcsIHNvIGNob29zZSBjYXJlZnVsbHkuIFRoZSBkZWZhdWx0IGlzIDMsIHdoaWNoIGlzIAorICAgcmVhc29uYWJsZS4gWW91IGNhbiBzZXQgaXQgYmV0d2VlbiAyIGFuZCA1LgorCittYnVmcworICAgVGhpcyBpcyBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMTAuIEl0IHdpbGwgdGVsbCB0aGUgbW9kdWxlIHRoZSBudW1iZXIgb2YKKyAgIGJ1ZmZlcnMgdG8gcmVzZXJ2ZSBmb3IgbW1hcCgpLCBWSURJT0NDR01CVUYsIFZJRElPQ01DQVBUVVJFIGFuZCBmcmllbmRzLgorICAgVGhlIGRlZmF1bHQgaXMgMiwgd2hpY2ggaXMgYWRlcXVhdGUgZm9yIG1vc3QgYXBwbGljYXRpb25zIChkb3VibGUKKyAgIGJ1ZmZlcmluZykuCisgICAgICAKKyAgIFNob3VsZCB5b3UgZXhwZXJpZW5jZSBhIGxvdCBvZiAnRHVtcGluZyBmcmFtZS4uLicgbWVzc2FnZXMgZHVyaW5nCisgICBncmFiYmluZyB3aXRoIGEgdG9vbCB0aGF0IHVzZXMgbW1hcCgpLCB5b3UgbWlnaHQgd2FudCB0byBpbmNyZWFzZSBpZi4gCisgICBIb3dldmVyLCBpdCBkb2Vzbid0IHJlYWxseSBidWZmZXIgaW1hZ2VzLCBpdCBqdXN0IGdpdmVzIHlvdSBhIGJpdCBtb3JlCisgICBzbGFjayB3aGVuIHlvdXIgcHJvZ3JhbSBpcyBiZWhpbmQuIEJ1dCB5b3UgbmVlZCBhIG11bHRpLXRocmVhZGVkIG9yCisgICBmb3JrZWQgcHJvZ3JhbSB0byByZWFsbHkgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlc2UgYnVmZmVycy4KKworICAgVGhlIGFic29sdXRlIG1heGltdW0gaXMgMTAsIGJ1dCBkb24ndCBzZXQgaXQgdG9vIGhpZ2ghICBFdmVyeSBidWZmZXIgdGFrZXMKKyAgIHVwIDQ2MCBLQiBvZiBSQU0sIHNvIHVubGVzcyB5b3UgaGF2ZSBhIGxvdCBvZiBtZW1vcnkgc2V0dGluZyB0aGlzIHRvCisgICBzb21ldGhpbmcgbW9yZSB0aGFuIDQgaXMgYW4gYWJzb2x1dGUgd2FzdGUuICBUaGlzIG1lbW9yeSBpcyBvbmx5CisgICBhbGxvY2F0ZWQgZHVyaW5nIG9wZW4oKSwgc28gbm90aGluZyBpcyB3YXN0ZWQgd2hlbiB0aGUgY2FtZXJhIGlzIG5vdCBpbgorICAgdXNlLgorCitwb3dlcl9zYXZlCisgICBXaGVuIHBvd2VyX3NhdmUgaXMgZW5hYmxlZCAoc2V0IHRvIDEpLCB0aGUgbW9kdWxlIHdpbGwgdHJ5IHRvIHNodXQgZG93bgorICAgdGhlIGNhbSBvbiBjbG9zZSgpIGFuZCByZS1hY3RpdmF0ZSBvbiBvcGVuKCkuIFRoaXMgd2lsbCBzYXZlIHBvd2VyIGFuZAorICAgdHVybiBvZmYgdGhlIExFRC4gTm90IGFsbCBjYW1lcmFzIHN1cHBvcnQgdGhpcyB0aG91Z2ggKHRoZSA2NDUgYW5kIDY0NgorICAgZG9uJ3QgaGF2ZSBwb3dlciBzYXZpbmcgYXQgYWxsKSwgYW5kIHNvbWUgbW9kZWxzIGRvbid0IHdvcmsgZWl0aGVyICh0aGV5CisgICB3aWxsIHNodXQgZG93biwgYnV0IG5ldmVyIHdha2UgdXApLiBDb25zaWRlciB0aGlzIGV4cGVyaW1lbnRhbC4gQnkKKyAgIGRlZmF1bHQgdGhpcyBvcHRpb24gaXMgZGlzYWJsZWQuCisKK2NvbXByZXNzaW9uIChvbmx5IHVzZWZ1bCB3aXRoIHRoZSBwbHVnaW4pCisgICBXaXRoIHRoaXMgb3B0aW9uIHlvdSBjYW4gY29udHJvbCB0aGUgY29tcHJlc3Npb24gZmFjdG9yIHRoYXQgdGhlIGNhbWVyYQorICAgdXNlcyB0byBzcXVlZXplIHRoZSBpbWFnZSB0aHJvdWdoIHRoZSBVU0IgYnVzLiBZb3UgY2FuIHNldCB0aGUgCisgICBwYXJhbWV0ZXIgYmV0d2VlbiAwIGFuZCAzOgorICAgICAwID0gcHJlZmVyIHVuY29tcHJlc3NlZCBpbWFnZXM7IGlmIHRoZSByZXF1ZXN0ZWQgbW9kZSBpcyBub3QgYXZhaWxhYmxlCisgICAgICAgICBpbiBhbiB1bmNvbXByZXNzZWQgZm9ybWF0LCB0aGUgZHJpdmVyIHdpbGwgc2lsZW50bHkgc3dpdGNoIHRvIGxvdworICAgICAgICAgY29tcHJlc3Npb24uCisgICAgIDEgPSBsb3cgY29tcHJlc3Npb24uCisgICAgIDIgPSBtZWRpdW0gY29tcHJlc3Npb24uCisgICAgIDMgPSBoaWdoIGNvbXByZXNzaW9uLgorICAgICAgCisgICBIaWdoIGNvbXByZXNzaW9uIHRha2VzIGxlc3MgYmFuZHdpZHRoIG9mIGNvdXJzZSwgYnV0IGl0IGNvdWxkIGFsc28KKyAgIGludHJvZHVjZSBzb21lIHVud2FudGVkIGFydGVmYWN0cy4gVGhlIGRlZmF1bHQgaXMgMiwgbWVkaXVtIGNvbXByZXNzaW9uLgorICAgU2VlIHRoZSBGQVEgb24gdGhlIHdlYnNpdGUgZm9yIGFuIG92ZXJ2aWV3IG9mIHdoaWNoIG1vZGVzIHJlcXVpcmUKKyAgIGNvbXByZXNzaW9uLgorCisgICBUaGUgY29tcHJlc3Npb24gcGFyYW1ldGVyIGRvZXMgbm90IGFwcGx5IHRvIHRoZSA2NDUgYW5kIDY0NiBjYW1lcmFzCisgICBhbmQgT0VNIG1vZGVscyBkZXJpdmVkIGZyb20gdGhvc2UgKG9ubHkgYSBmZXcpLiBNb3N0IGNhbXMgaG9ub3VyIHRoaXMKKyAgIHBhcmFtZXRlci4KKworbGVkcworICAgVGhpcyBzZXR0aW5ncyB0YWtlcyAyIGludGVnZXJzLCB0aGF0IGRlZmluZSB0aGUgb24vb2ZmIHRpbWUgZm9yIHRoZSBMRUQKKyAgIChpbiBtaWxsaXNlY29uZHMpLiBPbmUgb2YgdGhlIGludGVyZXN0aW5nIHRoaW5ncyB0aGF0IHlvdSBjYW4gZG8gd2l0aAorICAgdGhpcyBpcyBsZXQgdGhlIExFRCBibGluayB3aGlsZSB0aGUgY2FtZXJhIGlzIGluIHVzZS4gVGhpczoKKworICAgICBsZWRzPTUwMCw1MDAKKyAgICAgIAorICAgd2lsbCBibGluayB0aGUgTEVEIG9uY2UgZXZlcnkgc2Vjb25kLiBCdXQgd2l0aDoKKworICAgICBsZWRzPTAsMAorCisgICB0aGUgTEVEIG5ldmVyIGdvZXMgb24sIG1ha2luZyBpdCBzdWl0YWJsZSBmb3Igc2lsZW50IHN1cnZlaWxsYW5jZS4KKworICAgQnkgZGVmYXVsdCB0aGUgY2FtZXJhJ3MgTEVEIGlzIG9uIHNvbGlkIHdoaWxlIGluIHVzZSwgYW5kIHR1cm5lZCBvZmYKKyAgIHdoZW4gdGhlIGNhbWVyYSBpcyBub3QgdXNlZCBhbnltb3JlLgorCisgICBUaGlzIHBhcmFtZXRlciB3b3JrcyBvbmx5IHdpdGggdGhlIFRvVUNhbSByYW5nZSBvZiBjYW1lcmFzICg3MjAsIDczMCwgNzQwLAorICAgNzUwKSBhbmQgT0VNcy4gRm9yIG90aGVyIGNhbWVyYXMgdGhpcyBjb21tYW5kIGlzIHNpbGVudGx5IGlnbm9yZWQsIGFuZCAKKyAgIHRoZSBMRUQgY2Fubm90IGJlIGNvbnRyb2xsZWQuCisKKyAgIEZpbmFsbHk6IHRoaXMgcGFyYW1ldGVycyBkb2VzIG5vdCB0YWtlIGVmZmVjdCBVTlRJTCB0aGUgZmlyc3QgdGltZSB5b3UKKyAgIG9wZW4gdGhlIGNhbWVyYSBkZXZpY2UuIFVudGlsIHRoZW4sIHRoZSBMRUQgcmVtYWlucyBvbi4KKworZGV2X2hpbnQKKyAgIEEgbG9uZyBzdGFuZGluZyBwcm9ibGVtIHdpdGggVVNCIGRldmljZXMgaXMgdGhlaXIgZHluYW1pYyBuYXR1cmU6IHlvdQorICAgbmV2ZXIga25vdyB3aGF0IGRldmljZSBhIGNhbWVyYSBnZXRzIGFzc2lnbmVkOyBpdCBkZXBlbmRzIG9uIG1vZHVsZSBsb2FkCisgICBvcmRlciwgdGhlIGh1YiBjb25maWd1cmF0aW9uLCB0aGUgb3JkZXIgaW4gd2hpY2ggZGV2aWNlcyBhcmUgcGx1Z2dlZCBpbiwKKyAgIGFuZCB0aGUgcGhhc2Ugb2YgdGhlIG1vb24gKGkuZS4gaXQgY2FuIGJlIHJhbmRvbSkuIFdpdGggdGhpcyBvcHRpb24geW91CisgICBjYW4gZ2l2ZSB0aGUgZHJpdmVyIGEgaGludCBhcyB0byB3aGF0IHZpZGVvIGRldmljZSBub2RlICgvZGV2L3ZpZGVvWCkgaXQKKyAgIHNob3VsZCB1c2Ugd2l0aCBhIHNwZWNpZmljIGNhbWVyYS4gVGhpcyBpcyBhbHNvIGhhbmR5IGlmIHlvdSBoYXZlIHR3bworICAgY2FtZXJhcyBvZiB0aGUgc2FtZSBtb2RlbC4KKworICAgQSBjYW1lcmEgaXMgc3BlY2lmaWVkIGJ5IGl0cyB0eXBlICh0aGUgbnVtYmVyIGZyb20gdGhlIGNhbWVyYSBtb2RlbCwKKyAgIGxpa2UgUENBNjQ1LCBQQ1ZDNzUwVkMsIGV0YykgYW5kIG9wdGlvbmFsbHkgdGhlIHNlcmlhbCBudW1iZXIgKHZpc2libGUKKyAgIGluIC9wcm9jL2J1cy91c2IvZGV2aWNlcykuIEEgaGludCBjb25zaXN0cyBvZiBhIHN0cmluZyB3aXRoIHRoZSBmb2xsb3dpbmcKKyAgIGZvcm1hdDoKKworICAgICAgW3R5cGVbLnNlcmlhbG51bWJlcl06XW5vZGUKKyAgICAgIAorICAgVGhlIHNxdWFyZSBicmFja2V0cyBtZWFuIHRoYXQgYm90aCB0aGUgdHlwZSBhbmQgdGhlIHNlcmlhbG51bWJlciBhcmUKKyAgIG9wdGlvbmFsLCBidXQgYSBzZXJpYWxudW1iZXIgY2Fubm90IGJlIHNwZWNpZmllZCB3aXRob3V0IGEgdHlwZSAod2hpY2gKKyAgIHdvdWxkIGJlIHJhdGhlciBwb2ludGxlc3MpLiBUaGUgc2VyaWFsbnVtYmVyIGlzIHNlcGFyYXRlZCBmcm9tIHRoZSB0eXBlCisgICBieSBhICcuJzsgdGhlIG5vZGUgbnVtYmVyIGJ5IGEgJzonLgorICAgCisgICBUaGlzIHNvbWV3aGF0IGNyeXB0aWMgc3ludGF4IGlzIGJlc3QgZXhwbGFpbmVkIGJ5IGEgZmV3IGV4YW1wbGVzOgorCisgICAgIGRldl9oaW50PTMsNSAgICAgICAgICAgICAgVGhlIGZpcnN0IGRldGVjdGVkIGNhbSBnZXRzIGFzc2lnbmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL2Rldi92aWRlbzMsIHRoZSBzZWNvbmQgL2Rldi92aWRlbzUuIEFueQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyIGNhbWVyYXMgd2lsbCBnZXQgdGhlIGZpcnN0IGZyZWUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIHNsb3QgKHNlZSBiZWxvdykuCisKKyAgICAgZGV2X2hpbnQ9NjQ1OjEsNjgwOjIgICAgICBUaGUgUENBNjQ1IGNhbWVyYSB3aWxsIGdldCAvZGV2L3ZpZGVvMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYSBQQ1ZDNjgwIC9kZXYvdmlkZW8yLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICBkZXZfaGludD02NDUuMDEyMzozLDY0NS40NTY3OjAJVGhlIFBDQTY0NSBjYW1lcmEgd2l0aCBzZXJpYWxudW1iZXIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDEyMyBnb2VzIHRvIC9kZXYvdmlkZW8zLCB0aGUgc2FtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVyYSBtb2RlbCB3aXRoIHRoZSA0NTY3IHNlcmlhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHMgL2Rldi92aWRlbzAuCisKKyAgICAgZGV2X2hpbnQ9NzUwOjEsNCw1LDYgICAgICAgVGhlIFBDVkM3NTAgY2FtZXJhIHdpbGwgZ2V0IC9kZXYvdmlkZW8xLCB0aGUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgMyBQaGlsaXBzIGNhbXMgd2lsbCB1c2UgL2Rldi92aWRlbzQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggL2Rldi92aWRlbzYuCisKKyAgIFNvbWUgcG9pbnRzIHdvcnRoIGtub3dpbmc6CisgICAtIFNlcmlhbG51bWJlcnMgYXJlIGNhc2Ugc2Vuc2l0aXZlIGFuZCBtdXN0IGJlIHdyaXR0ZW4gZnVsbCwgaW5jbHVkaW5nIAorICAgICBsZWFkaW5nIHplcm9lcyAoaXQncyB0cmVhdGVkIGFzIGEgc3RyaW5nKS4KKyAgIC0gSWYgYSBkZXZpY2Ugbm9kZSBpcyBhbHJlYWR5IG9jY3VwaWVkLCByZWdpc3RyYXRpb24gd2lsbCBmYWlsIGFuZCAKKyAgICAgdGhlIHdlYmNhbSBpcyBub3QgYXZhaWxhYmxlLgorICAgLSBZb3UgY2FuIGhhdmUgdXAgdG8gNjQgdmlkZW8gZGV2aWNlczsgYmUgc3VyZSB0byBtYWtlIGVub3VnaCBkZXZpY2UKKyAgICAgbm9kZXMgaW4gL2RldiBpZiB5b3Ugd2FudCB0byBzcHJlYWQgdGhlIG51bWJlcnMgKHRoaXMgZG9lcyBub3QgYXBwbHkKKyAgICAgdG8gZGV2ZnMpLiBBZnRlciAvZGV2L3ZpZGVvOSBjb21lcyAvZGV2L3ZpZGVvMTAgKG5vdCAvZGV2L3ZpZGVvQSkuCisgICAtIElmIGEgY2FtZXJhIGRvZXMgbm90IG1hdGNoIGFueSBkZXZfaGludCwgaXQgd2lsbCBzaW1wbHkgZ2V0IGFzc2lnbmVkCisgICAgIHRoZSBmaXJzdCBhdmFpbGFibGUgZGV2aWNlIG5vZGUsIGp1c3QgYXMgaXQgdXNlZCB0byBiZS4KKwordHJhY2UKKyAgIEluIG9yZGVyIHRvIGJldHRlciBkZXRlY3QgcHJvYmxlbXMsIGl0IGlzIG5vdyBwb3NzaWJsZSB0byB0dXJuIG9uIGEKKyAgICd0cmFjZScgb2Ygc29tZSBvZiB0aGUgY2FsbHMgdGhlIG1vZHVsZSBtYWtlczsgaXQgbG9ncyBhbGwgaXRlbXMgaW4geW91cgorICAga2VybmVsIGxvZyBhdCBkZWJ1ZyBsZXZlbC4KKworICAgVGhlIHRyYWNlIHZhcmlhYmxlIGlzIGEgYml0bWFzazsgZWFjaCBiaXQgcmVwcmVzZW50cyBhIGNlcnRhaW4gZmVhdHVyZS4KKyAgIElmIHlvdSB3YW50IHRvIHRyYWNlIHNvbWV0aGluZywgbG9vayB1cCB0aGUgYml0IHZhbHVlKHMpIGluIHRoZSB0YWJsZSAKKyAgIGJlbG93LCBhZGQgdGhlIHZhbHVlcyB0b2dldGhlciBhbmQgc3VwcGx5IHRoYXQgdG8gdGhlIHRyYWNlIHZhcmlhYmxlLgorCisgICBWYWx1ZSAgVmFsdWUgICBEZXNjcmlwdGlvbgkJCQkJICAgRGVmYXVsdAorICAgKGRlYykgIChoZXgpCisgICAgICAgMSAgICAweDEgICBNb2R1bGUgaW5pdGlhbGl6YXRpb247IHRoaXMgd2lsbCBsb2cgbWVzc2FnZXMgICAgICAgT24KKyAgICAgICAgICAgICAgICAgIHdoaWxlIGxvYWRpbmcgYW5kIHVubG9hZGluZyB0aGUgbW9kdWxlCisKKyAgICAgICAyICAgIDB4MiAgIHByb2JlKCkgYW5kIGRpc2Nvbm5lY3QoKSB0cmFjZXMgICAgICAgICAgICAgICAgICAgICBPbgorCisgICAgICAgNCAgICAweDQgICBUcmFjZSBvcGVuKCkgYW5kIGNsb3NlKCkgY2FsbHMgICAgICAgICAgICAgICAgICAgICAgT2ZmCisKKyAgICAgICA4ICAgIDB4OCAgIHJlYWQoKSwgbW1hcCgpIGFuZCBhc3NvY2lhdGVkIGlvY3RsKCkgY2FsbHMgICAgICAgICBPZmYKKworICAgICAgMTYgICAweDEwICAgTWVtb3J5IGFsbG9jYXRpb24gb2YgYnVmZmVycywgZXRjLiAgICAgICAgICAgICAgICAgIE9mZgorCisgICAgICAzMiAgIDB4MjAgICBTaG93aW5nIHVuZGVyZmxvdywgb3ZlcmZsb3cgYW5kIER1bXBpbmcgZnJhbWUgICAgICAgT24KKyAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzCisKKyAgICAgIDY0ICAgMHg0MCAgIFNob3cgdmlld3BvcnQgYW5kIGltYWdlIHNpemVzICAgICAgICAgICAgICAgICAgICAgICBPZmYKKworICAgICAxMjggICAweDgwICAgUFdDWCBkZWJ1Z2dpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9mZgorCisgICBGb3IgZXhhbXBsZSwgdG8gdHJhY2UgdGhlIG9wZW4oKSAmIHJlYWQoKSBmdWN0aW9ucywgc3VtIDggKyA0ID0gMTIsCisgICBzbyB5b3Ugd291bGQgc3VwcGx5IHRyYWNlPTEyIGR1cmluZyBpbnNtb2Qgb3IgbW9kcHJvYmUuIElmCisgICB5b3Ugd2FudCB0byB0dXJuIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgcHJvYmluZyB0cmFjaW5nIG9mZiwgc2V0IHRyYWNlPTAuCisgICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdHJhY2UgaXMgMzUgKDB4MjMpLgorCisKKworRXhhbXBsZToKKyAgICAgCisgICAgICMgbW9kcHJvYmUgcHdjIHNpemU9Y2lmIGZwcz0xNSBwb3dlcl9zYXZlPTEKKworVGhlIGZidWZzLCBtYnVmcyBhbmQgdHJhY2UgcGFyYW1ldGVycyBhcmUgZ2xvYmFsIGFuZCBhcHBseSB0byBhbGwgY29ubmVjdGVkCitjYW1lcmFzLiBFYWNoIGNhbWVyYSBoYXMgaXRzIG93biBzZXQgb2YgYnVmZmVycy4KKworc2l6ZSBhbmQgZnBzIG9ubHkgc3BlY2lmeSBkZWZhdWx0cyB3aGVuIHlvdSBvcGVuKCkgdGhlIGRldmljZTsgdGhpcyBpcyB0bworYWNjb21tb2RhdGUgc29tZSB0b29scyB0aGF0IGRvbid0IHNldCB0aGUgc2l6ZS4gWW91IGNhbiBjaGFuZ2UgdGhlc2UKK3NldHRpbmdzIGFmdGVyIG9wZW4oKSB3aXRoIHRoZSBWaWRlbzRMaW51eCBpb2N0bCgpIGNhbGxzLiBUaGUgZGVmYXVsdCBvZgorZGVmYXVsdHMgaXMgUUNJRiBzaXplIGF0IDEwIGZwcy4KKworVGhlIGNvbXByZXNzaW9uIHBhcmFtZXRlciBpcyBzZW1pZ2xvYmFsOyBpdCBzZXRzIHRoZSBpbml0aWFsIGNvbXByZXNzaW9uCitwcmVmZXJlbmNlIGZvciBhbGwgY2FtZXJhJ3MsIGJ1dCB0aGlzIHBhcmFtZXRlciBjYW4gYmUgc2V0IHBlciBjYW1lcmEgd2l0aAordGhlIFZJRElPQ1BXQ1NDUVVBTCBpb2N0bCgpIGNhbGwuCisKK0FsbCBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbC4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1jdHJsLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWN0cmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmFhOTE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1jdHJsLmMKQEAgLTAsMCArMSwxNjMwIEBACisvKiBEcml2ZXIgZm9yIFBoaWxpcHMgd2ViY2FtCisgICBGdW5jdGlvbnMgdGhhdCBzZW5kIHZhcmlvdXMgY29udHJvbCBtZXNzYWdlcyB0byB0aGUgd2ViY2FtLCBpbmNsdWRpbmcKKyAgIHZpZGVvIG1vZGVzLgorICAgKEMpIDE5OTktMjAwMyBOZW1vc29mdCBVbnYuCisgICAoQykgMjAwNCAgICAgIEx1YyBTYWlsbGFyZCAobHVjQHNhaWxsYXJkLm9yZykKKworICAgTk9URTogdGhpcyB2ZXJzaW9uIG9mIHB3YyBpcyBhbiB1bm9mZmljaWFsIChtb2RpZmllZCkgcmVsZWFzZSBvZiBwd2MgJiBwY3d4CisgICBkcml2ZXIgYW5kIHRodXMgbWF5IGhhdmUgYnVncyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgb3JpZ2luYWwgdmVyc2lvbi4KKyAgIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIGFuZCBzdXBwb3J0IHJlcXVlc3RzIHRvIDxsdWNAc2FpbGxhcmQub3JnPi4KKworICAgTk9URTogdGhpcyB2ZXJzaW9uIG9mIHB3YyBpcyBhbiB1bm9mZmljaWFsIChtb2RpZmllZCkgcmVsZWFzZSBvZiBwd2MgJiBwY3d4CisgICBkcml2ZXIgYW5kIHRodXMgbWF5IGhhdmUgYnVncyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgb3JpZ2luYWwgdmVyc2lvbi4KKyAgIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIGFuZCBzdXBwb3J0IHJlcXVlc3RzIHRvIDxsdWNAc2FpbGxhcmQub3JnPi4KKyAgIFRoZSBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBieSByZXZlcnNlLWVuZ2luZWVyaW5nIHRoZQorICAgTmVtb3NvZnQgYmluYXJ5IHB3Y3ggbW9kdWxlLiBDYXZlYXQgZW1wdG9yLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisKKy8qCisgICBDaGFuZ2VzCisgICAyMDAxLzA4LzAzICBBbHZhcmFkbyAgIEFkZGVkIG1ldGhvZHMgZm9yIGNoYW5naW5nIHdoaXRlIGJhbGFuY2UgYW5kIAorICAgICAgICAgICAgICAgICAgICAgICAgICByZWQvZ3JlZW4gZ2FpbnMKKyAqLworCisvKiBDb250cm9sIGZ1bmN0aW9ucyBmb3IgdGhlIGNhbTsgYnJpZ2h0bmVzcywgY29udHJhc3QsIHZpZGVvIG1vZGUsIGV0Yy4gKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPiAKKyNlbmRpZgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyAKKyNpbmNsdWRlICJwd2MuaCIKKyNpbmNsdWRlICJwd2MtaW9jdGwuaCIKKyNpbmNsdWRlICJwd2MtdW5jb21wcmVzcy5oIgorI2luY2x1ZGUgInB3Yy1raWFyYS5oIgorI2luY2x1ZGUgInB3Yy10aW1vbi5oIgorI2luY2x1ZGUgInB3Yy1kZWMxLmgiCisjaW5jbHVkZSAicHdjLWRlYzIzLmgiCisKKy8qIFJlcXVlc3QgdHlwZXM6IHZpZGVvICovCisjZGVmaW5lIFNFVF9MVU1fQ1RMCQkJMHgwMQorI2RlZmluZSBHRVRfTFVNX0NUTAkJCTB4MDIKKyNkZWZpbmUgU0VUX0NIUk9NX0NUTAkJCTB4MDMKKyNkZWZpbmUgR0VUX0NIUk9NX0NUTAkJCTB4MDQKKyNkZWZpbmUgU0VUX1NUQVRVU19DVEwJCQkweDA1CisjZGVmaW5lIEdFVF9TVEFUVVNfQ1RMCQkJMHgwNgorI2RlZmluZSBTRVRfRVBfU1RSRUFNX0NUTAkJMHgwNworI2RlZmluZSBHRVRfRVBfU1RSRUFNX0NUTAkJMHgwOAorI2RlZmluZSBTRVRfTVBUX0NUTAkJCTB4MEQKKyNkZWZpbmUgR0VUX01QVF9DVEwJCQkweDBFCisKKy8qIFNlbGVjdG9ycyBmb3IgdGhlIEx1bWluYW5jZSBjb250cm9scyBbR1NdRVRfTFVNX0NUTCAqLworI2RlZmluZSBBR0NfTU9ERV9GT1JNQVRURVIJCQkweDIwMDAKKyNkZWZpbmUgUFJFU0VUX0FHQ19GT1JNQVRURVIJCQkweDIxMDAKKyNkZWZpbmUgU0hVVFRFUl9NT0RFX0ZPUk1BVFRFUgkJCTB4MjIwMAorI2RlZmluZSBQUkVTRVRfU0hVVFRFUl9GT1JNQVRURVIJCTB4MjMwMAorI2RlZmluZSBQUkVTRVRfQ09OVE9VUl9GT1JNQVRURVIJCTB4MjQwMAorI2RlZmluZSBBVVRPX0NPTlRPVVJfRk9STUFUVEVSCQkJMHgyNTAwCisjZGVmaW5lIEJBQ0tfTElHSFRfQ09NUEVOU0FUSU9OX0ZPUk1BVFRFUgkweDI2MDAKKyNkZWZpbmUgQ09OVFJBU1RfRk9STUFUVEVSCQkJMHgyNzAwCisjZGVmaW5lIERZTkFNSUNfTk9JU0VfQ09OVFJPTF9GT1JNQVRURVIJCTB4MjgwMAorI2RlZmluZSBGTElDS0VSTEVTU19NT0RFX0ZPUk1BVFRFUgkJMHgyOTAwCisjZGVmaW5lIEFFX0NPTlRST0xfU1BFRUQJCQkweDJBMDAKKyNkZWZpbmUgQlJJR0hUTkVTU19GT1JNQVRURVIJCQkweDJCMDAKKyNkZWZpbmUgR0FNTUFfRk9STUFUVEVSCQkJCTB4MkMwMAorCisvKiBTZWxlY3RvcnMgZm9yIHRoZSBDaHJvbWluYW5jZSBjb250cm9scyBbR1NdRVRfQ0hST01fQ1RMICovCisjZGVmaW5lIFdCX01PREVfRk9STUFUVEVSCQkJMHgxMDAwCisjZGVmaW5lIEFXQl9DT05UUk9MX1NQRUVEX0ZPUk1BVFRFUgkJMHgxMTAwCisjZGVmaW5lIEFXQl9DT05UUk9MX0RFTEFZX0ZPUk1BVFRFUgkJMHgxMjAwCisjZGVmaW5lIFBSRVNFVF9NQU5VQUxfUkVEX0dBSU5fRk9STUFUVEVSCTB4MTMwMAorI2RlZmluZSBQUkVTRVRfTUFOVUFMX0JMVUVfR0FJTl9GT1JNQVRURVIJMHgxNDAwCisjZGVmaW5lIENPTE9VUl9NT0RFX0ZPUk1BVFRFUgkJCTB4MTUwMAorI2RlZmluZSBTQVRVUkFUSU9OX01PREVfRk9STUFUVEVSMQkJMHgxNjAwCisjZGVmaW5lIFNBVFVSQVRJT05fTU9ERV9GT1JNQVRURVIyCQkweDE3MDAKKworLyogU2VsZWN0b3JzIGZvciB0aGUgU3RhdHVzIGNvbnRyb2xzIFtHU11FVF9TVEFUVVNfQ1RMICovCisjZGVmaW5lIFNBVkVfVVNFUl9ERUZBVUxUU19GT1JNQVRURVIJCTB4MDIwMAorI2RlZmluZSBSRVNUT1JFX1VTRVJfREVGQVVMVFNfRk9STUFUVEVSCQkweDAzMDAKKyNkZWZpbmUgUkVTVE9SRV9GQUNUT1JZX0RFRkFVTFRTX0ZPUk1BVFRFUgkweDA0MDAKKyNkZWZpbmUgUkVBRF9BR0NfRk9STUFUVEVSCQkJMHgwNTAwCisjZGVmaW5lIFJFQURfU0hVVFRFUl9GT1JNQVRURVIJCQkweDA2MDAKKyNkZWZpbmUgUkVBRF9SRURfR0FJTl9GT1JNQVRURVIJCQkweDA3MDAKKyNkZWZpbmUgUkVBRF9CTFVFX0dBSU5fRk9STUFUVEVSCQkweDA4MDAKKyNkZWZpbmUgU0VOU09SX1RZUEVfRk9STUFUVEVSMQkJCTB4MEMwMAorI2RlZmluZSBSRUFEX1JBV19ZX01FQU5fRk9STUFUVEVSCQkweDMxMDAKKyNkZWZpbmUgU0VUX1BPV0VSX1NBVkVfTU9ERV9GT1JNQVRURVIJCTB4MzIwMAorI2RlZmluZSBNSVJST1JfSU1BR0VfRk9STUFUVEVSCQkJMHgzMzAwCisjZGVmaW5lIExFRF9GT1JNQVRURVIJCQkJMHgzNDAwCisjZGVmaW5lIFNFTlNPUl9UWVBFX0ZPUk1BVFRFUjIJCQkweDM3MDAKKworLyogRm9ybWF0dGVycyBmb3IgdGhlIFZpZGVvIEVuZHBvaW50IGNvbnRyb2xzIFtHU11FVF9FUF9TVFJFQU1fQ1RMICovCisjZGVmaW5lIFZJREVPX09VVFBVVF9DT05UUk9MX0ZPUk1BVFRFUgkJMHgwMTAwCisKKy8qIEZvcm1hdHRlcnMgZm9yIHRoZSBtb3Rvcml6ZWQgcGFuICYgdGlsdCBbR1NdRVRfTVBUX0NUTCAqLworI2RlZmluZSBQVF9SRUxBVElWRV9DT05UUk9MX0ZPUk1BVFRFUgkJMHgwMQorI2RlZmluZSBQVF9SRVNFVF9DT05UUk9MX0ZPUk1BVFRFUgkJMHgwMgorI2RlZmluZSBQVF9TVEFUVVNfRk9STUFUVEVSCQkJMHgwMworCitzdGF0aWMgY2hhciAqc2l6ZTJuYW1lW1BTWl9NQVhdID0KK3sKKwkic3ViUUNJRiIsCisJIlFTSUYiLAorCSJRQ0lGIiwKKwkiU0lGIiwKKwkiQ0lGIiwKKwkiVkdBIiwKK307ICAKKworLyoqKioqKioqLworCisvKiBFbnRyaWVzIGZvciB0aGUgTmFsYSAoNjQ1LzY0NikgY2FtZXJhOyB0aGUgTmFsYSBkb2Vzbid0IGhhdmUgY29tcHJlc3Npb24gCisgICBwcmVmZXJlbmNlcywgc28geW91IGVpdGhlciBnZXQgY29tcHJlc3NlZCBvciBub24tY29tcHJlc3NlZCBzdHJlYW1zLgorICAgCisgICBBbiBhbHRlcm5hdGUgdmFsdWUgb2YgMCBtZWFucyB0aGlzIG1vZGUgaXMgbm90IGF2YWlsYWJsZSBhdCBhbGwuCisgKi8KKworc3RydWN0IE5hbGFfdGFibGVfZW50cnkgeworCWNoYXIgYWx0ZXJuYXRlOwkJCS8qIFVTQiBhbHRlcm5hdGUgc2V0dGluZyAqLworCWludCBjb21wcmVzc2VkOwkJCS8qIENvbXByZXNzZWQgeWVzL25vICovCisKKwl1bnNpZ25lZCBjaGFyIG1vZGVbM107CQkvKiBwcmVjb21wdXRlZCBtb2RlIHRhYmxlICovCit9OworCitzdGF0aWMgc3RydWN0IE5hbGFfdGFibGVfZW50cnkgTmFsYV90YWJsZVtQU1pfTUFYXVs4XSA9Cit7CisjaW5jbHVkZSAicHdjLW5hbGEuaCIKK307CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2RlZmluZSBTZW5kQ29udHJvbE1zZyhyZXF1ZXN0LCB2YWx1ZSwgYnVmbGVuKSBcCisJdXNiX2NvbnRyb2xfbXNnKHBkZXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShwZGV2LT51ZGV2LCAwKSwgXAorCQlyZXF1ZXN0LCBcCisJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwgXAorCQl2YWx1ZSwgXAorCQlwZGV2LT52Y2ludGVyZmFjZSwgXAorCQkmYnVmLCBidWZsZW4sIDUwMCkKKworI2RlZmluZSBSZWN2Q29udHJvbE1zZyhyZXF1ZXN0LCB2YWx1ZSwgYnVmbGVuKSBcCisJdXNiX2NvbnRyb2xfbXNnKHBkZXYtPnVkZXYsIHVzYl9yY3ZjdHJscGlwZShwZGV2LT51ZGV2LCAwKSwgXAorCQlyZXF1ZXN0LCBcCisJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLCBcCisJCXZhbHVlLCBcCisJCXBkZXYtPnZjaW50ZXJmYWNlLCBcCisJCSZidWYsIGJ1ZmxlbiwgNTAwKQorCisKKyNpZiBQV0NfREVCVUcKK3ZvaWQgcHdjX2hleGR1bXAodm9pZCAqcCwgaW50IGxlbikKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyICpzOworCWNoYXIgYnVmWzEwMF0sICpkOworCisJcyA9ICh1bnNpZ25lZCBjaGFyICopcDsKKwlkID0gYnVmOworCSpkID0gJ1wwJzsKKwlEZWJ1ZygiRG9pbmcgaGV4ZHVtcCBAICVwLCAlZCBieXRlcy5cbiIsIHAsIGxlbik7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWQgKz0gc3ByaW50ZihkLCAiJTAyWCAiLCAqcysrKTsKKwkJaWYgKChpICYgMHhGKSA9PSAweEYpIHsKKwkJCURlYnVnKCIlc1xuIiwgYnVmKTsKKwkJCWQgPSBidWY7CisJCQkqZCA9ICdcMCc7CisJCX0KKwl9CisJaWYgKChpICYgMHhGKSAhPSAwKQorCQlEZWJ1ZygiJXNcbiIsIGJ1Zik7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQgc2VuZF92aWRlb19jb21tYW5kKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgaW5kZXgsIHZvaWQgKmJ1ZiwgaW50IGJ1ZmxlbikKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCXVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJU0VUX0VQX1NUUkVBTV9DVEwsCisJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJVklERU9fT1VUUFVUX0NPTlRST0xfRk9STUFUVEVSLAorCQlpbmRleCwKKwkJYnVmLCBidWZsZW4sIDEwMDApOworfQorCisKKworc3RhdGljIGlubGluZSBpbnQgc2V0X3ZpZGVvX21vZGVfTmFsYShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHNpemUsIGludCBmcmFtZXMpCit7CisJdW5zaWduZWQgY2hhciBidWZbM107CisJaW50IHJldCwgZnBzOworCXN0cnVjdCBOYWxhX3RhYmxlX2VudHJ5ICpwRW50cnk7CisJaW50IGZyYW1lczJmcmFtZXNbMzFdID0KKwl7IC8qIGNsb3Nlc3QgbWF0Y2ggb2YgZnJhbWVyYXRlICovCisJICAgMCwgIDAsICAwLCAgMCwgIDQsICAvKiAgMC00ICAqLworCSAgIDUsICA1LCAgNywgIDcsIDEwLCAgLyogIDUtOSAgKi8KKyAgICAgICAgICAxMCwgMTAsIDEyLCAxMiwgMTUsICAvKiAxMC0xNCAqLworICAgICAgICAgIDE1LCAxNSwgMTUsIDIwLCAyMCwgIC8qIDE1LTE5ICovCisgICAgICAgICAgMjAsIDIwLCAyMCwgMjQsIDI0LCAgLyogMjAtMjQgKi8KKyAgICAgICAgICAyNCwgMjQsIDI0LCAyNCwgMjQsICAvKiAyNS0yOSAqLworICAgICAgICAgIDI0ICAgICAgICAgICAgICAgICAgIC8qIDMwICAgICovCisJfTsKKwlpbnQgZnJhbWVzMnRhYmxlWzMxXSA9IAorCXsgMCwgMCwgMCwgMCwgMCwgLyogIDAtNCAgKi8KKwkgIDEsIDEsIDEsIDIsIDIsIC8qICA1LTkgICovCisJICAzLCAzLCA0LCA0LCA0LCAvKiAxMC0xNCAqLworCSAgNSwgNSwgNSwgNSwgNSwgLyogMTUtMTkgKi8KKwkgIDYsIDYsIDYsIDYsIDcsIC8qIDIwLTI0ICovCisJICA3LCA3LCA3LCA3LCA3LCAvKiAyNS0yOSAqLworCSAgNyAgICAgICAgICAgICAgLyogMzAgICAgKi8KKwl9OworCQorCWlmIChzaXplIDwgMCB8fCBzaXplID4gUFNaX0NJRiB8fCBmcmFtZXMgPCA0IHx8IGZyYW1lcyA+IDI1KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlmcmFtZXMgPSBmcmFtZXMyZnJhbWVzW2ZyYW1lc107CisJZnBzID0gZnJhbWVzMnRhYmxlW2ZyYW1lc107CisJcEVudHJ5ID0gJk5hbGFfdGFibGVbc2l6ZV1bZnBzXTsKKwlpZiAocEVudHJ5LT5hbHRlcm5hdGUgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocEVudHJ5LT5jb21wcmVzc2VkKQorCQlyZXR1cm4gLUVOT0VOVDsgLyogTm90IHN1cHBvcnRlZC4gKi8KKworCW1lbWNweShidWYsIHBFbnRyeS0+bW9kZSwgMyk7CQorCXJldCA9IHNlbmRfdmlkZW9fY29tbWFuZChwZGV2LT51ZGV2LCBwZGV2LT52ZW5kcG9pbnQsIGJ1ZiwgMyk7CisJaWYgKHJldCA8IDApIHsKKwkJRGVidWcoIkZhaWxlZCB0byBzZW5kIHZpZGVvIGNvbW1hbmQuLi4gJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCWlmIChwRW50cnktPmNvbXByZXNzZWQgJiYgcGRldi0+dnBhbGV0dGUgIT0gVklERU9fUEFMRVRURV9SQVcpCisJIHsKKwkgICBzd2l0Y2gocGRldi0+dHlwZSkgeworCSAgICAgY2FzZSA2NDU6CisJICAgICBjYXNlIDY0NjoKKwkgICAgICAgcHdjX2RlYzFfaW5pdChwZGV2LT50eXBlLCBwZGV2LT5yZWxlYXNlLCBidWYsIHBkZXYtPmRlY29tcHJlc3NfZGF0YSk7CisJICAgICAgIGJyZWFrOworCisJICAgICBjYXNlIDY3NToKKwkgICAgIGNhc2UgNjgwOgorCSAgICAgY2FzZSA2OTA6CisJICAgICBjYXNlIDcyMDoKKwkgICAgIGNhc2UgNzMwOgorCSAgICAgY2FzZSA3NDA6CisJICAgICBjYXNlIDc1MDoKKwkgICAgICAgcHdjX2RlYzIzX2luaXQocGRldi0+dHlwZSwgcGRldi0+cmVsZWFzZSwgYnVmLCBwZGV2LT5kZWNvbXByZXNzX2RhdGEpOworCSAgICAgICBicmVhazsKKwkgICB9CisJfQorIAorCXBkZXYtPmNtZF9sZW4gPSAzOworCW1lbWNweShwZGV2LT5jbWRfYnVmLCBidWYsIDMpOworCisJLyogU2V0IHZhcmlvdXMgcGFyYW1ldGVycyAqLworCXBkZXYtPnZmcmFtZXMgPSBmcmFtZXM7CisJcGRldi0+dnNpemUgPSBzaXplOworCXBkZXYtPnZhbHRlcm5hdGUgPSBwRW50cnktPmFsdGVybmF0ZTsKKwlwZGV2LT5pbWFnZSA9IHB3Y19pbWFnZV9zaXplc1tzaXplXTsKKwlwZGV2LT5mcmFtZV9zaXplID0gKHBkZXYtPmltYWdlLnggKiBwZGV2LT5pbWFnZS55ICogMykgLyAyOworCWlmIChwRW50cnktPmNvbXByZXNzZWQpIHsKKwkJaWYgKHBkZXYtPnJlbGVhc2UgPCA1KSB7IC8qIDQgZm9sZCBjb21wcmVzc2lvbiAqLworCQkJcGRldi0+dmJhbmRsZW5ndGggPSA1Mjg7CisJCQlwZGV2LT5mcmFtZV9zaXplIC89IDQ7CisJCX0KKwkJZWxzZSB7CisJCQlwZGV2LT52YmFuZGxlbmd0aCA9IDcwNDsKKwkJCXBkZXYtPmZyYW1lX3NpemUgLz0gMzsKKwkJfQorCX0KKwllbHNlCisJCXBkZXYtPnZiYW5kbGVuZ3RoID0gMDsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW5saW5lIGludCBzZXRfdmlkZW9fbW9kZV9UaW1vbihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHNpemUsIGludCBmcmFtZXMsIGludCBjb21wcmVzc2lvbiwgaW50IHNuYXBzaG90KQoreworCXVuc2lnbmVkIGNoYXIgYnVmWzEzXTsKKwljb25zdCBzdHJ1Y3QgVGltb25fdGFibGVfZW50cnkgKnBDaG9vc2U7CisJaW50IHJldCwgZnBzOworCisJaWYgKHNpemUgPj0gUFNaX01BWCB8fCBmcmFtZXMgPCA1IHx8IGZyYW1lcyA+IDMwIHx8IGNvbXByZXNzaW9uIDwgMCB8fCBjb21wcmVzc2lvbiA+IDMpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChzaXplID09IFBTWl9WR0EgJiYgZnJhbWVzID4gMTUpCisJCXJldHVybiAtRUlOVkFMOworCWZwcyA9IChmcmFtZXMgLyA1KSAtIDE7CisKKwkvKiBGaW5kIGEgc3VwcG9ydGVkIGZyYW1lcmF0ZSB3aXRoIHByb2dyZXNzaXZlbHkgaGlnaGVyIGNvbXByZXNzaW9uIHJhdGlvcworCSAgIGlmIHRoZSBwcmVmZXJyZWQgcmF0aW8gaXMgbm90IGF2YWlsYWJsZS4KKwkqLworCXBDaG9vc2UgPSBOVUxMOworCXdoaWxlIChjb21wcmVzc2lvbiA8PSAzKSB7CisJICAgcENob29zZSA9ICZUaW1vbl90YWJsZVtzaXplXVtmcHNdW2NvbXByZXNzaW9uXTsKKwkgICBpZiAocENob29zZS0+YWx0ZXJuYXRlICE9IDApCisJICAgICBicmVhazsKKwkgICBjb21wcmVzc2lvbisrOworCX0KKwlpZiAocENob29zZSA9PSBOVUxMIHx8IHBDaG9vc2UtPmFsdGVybmF0ZSA9PSAwKQorCQlyZXR1cm4gLUVOT0VOVDsgLyogTm90IHN1cHBvcnRlZC4gKi8KKworCW1lbWNweShidWYsIHBDaG9vc2UtPm1vZGUsIDEzKTsKKwlpZiAoc25hcHNob3QpCisJCWJ1ZlswXSB8PSAweDgwOworCXJldCA9IHNlbmRfdmlkZW9fY29tbWFuZChwZGV2LT51ZGV2LCBwZGV2LT52ZW5kcG9pbnQsIGJ1ZiwgMTMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHBDaG9vc2UtPmJhbmRsZW5ndGggPiAwICYmIHBkZXYtPnZwYWxldHRlICE9IFZJREVPX1BBTEVUVEVfUkFXKQorCSAgIHB3Y19kZWMyM19pbml0KHBkZXYtPnR5cGUsIHBkZXYtPnJlbGVhc2UsIGJ1ZiwgcGRldi0+ZGVjb21wcmVzc19kYXRhKTsKKworCXBkZXYtPmNtZF9sZW4gPSAxMzsKKwltZW1jcHkocGRldi0+Y21kX2J1ZiwgYnVmLCAxMyk7CisKKwkvKiBTZXQgdmFyaW91cyBwYXJhbWV0ZXJzICovCisJcGRldi0+dmZyYW1lcyA9IGZyYW1lczsKKwlwZGV2LT52c2l6ZSA9IHNpemU7CisJcGRldi0+dnNuYXBzaG90ID0gc25hcHNob3Q7CisJcGRldi0+dmFsdGVybmF0ZSA9IHBDaG9vc2UtPmFsdGVybmF0ZTsKKwlwZGV2LT5pbWFnZSA9IHB3Y19pbWFnZV9zaXplc1tzaXplXTsKKwlwZGV2LT52YmFuZGxlbmd0aCA9IHBDaG9vc2UtPmJhbmRsZW5ndGg7CisJaWYgKHBDaG9vc2UtPmJhbmRsZW5ndGggPiAwKQorCQlwZGV2LT5mcmFtZV9zaXplID0gKHBDaG9vc2UtPmJhbmRsZW5ndGggKiBwZGV2LT5pbWFnZS55KSAvIDQ7CisJZWxzZQorCQlwZGV2LT5mcmFtZV9zaXplID0gKHBkZXYtPmltYWdlLnggKiBwZGV2LT5pbWFnZS55ICogMTIpIC8gODsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW5saW5lIGludCBzZXRfdmlkZW9fbW9kZV9LaWFyYShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHNpemUsIGludCBmcmFtZXMsIGludCBjb21wcmVzc2lvbiwgaW50IHNuYXBzaG90KQoreworCWNvbnN0IHN0cnVjdCBLaWFyYV90YWJsZV9lbnRyeSAqcENob29zZSA9IE5VTEw7CisJaW50IGZwcywgcmV0OworCXVuc2lnbmVkIGNoYXIgYnVmWzEyXTsKKwlzdHJ1Y3QgS2lhcmFfdGFibGVfZW50cnkgUmF3RW50cnkgPSB7NiwgNzczLCAxMjcyLCB7MHhBRCwgMHhGNCwgMHgxMCwgMHgyNywgMHhCNiwgMHgyNCwgMHg5NiwgMHgwMiwgMHgzMCwgMHgwNSwgMHgwMywgMHg4MH19OworCisJaWYgKHNpemUgPj0gUFNaX01BWCB8fCBmcmFtZXMgPCA1IHx8IGZyYW1lcyA+IDMwIHx8IGNvbXByZXNzaW9uIDwgMCB8fCBjb21wcmVzc2lvbiA+IDMpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChzaXplID09IFBTWl9WR0EgJiYgZnJhbWVzID4gMTUpCisJCXJldHVybiAtRUlOVkFMOworCWZwcyA9IChmcmFtZXMgLyA1KSAtIDE7CisKKwkvKiBzcGVjaWFsIGNhc2U6IFZHQSBAIDUgZnBzIGFuZCBzbmFwc2hvdCBpcyByYXcgYmF5ZXIgbW9kZSAqLworCWlmIChzaXplID09IFBTWl9WR0EgJiYgZnJhbWVzID09IDUgJiYgc25hcHNob3QpCisJeworCQkvKiBPbmx5IGF2YWlsYWJsZSBpbiBjYXNlIHRoZSByYXcgcGFsZXR0ZSBpcyBzZWxlY3RlZCBvciAKKwkJICAgd2UgaGF2ZSB0aGUgZGVjb21wcmVzc29yIGF2YWlsYWJsZS4gVGhpcyBtb2RlIGlzIAorCQkgICBvbmx5IGF2YWlsYWJsZSBpbiBjb21wcmVzc2VkIGZvcm0gCisJCSovCisJCWlmIChwZGV2LT52cGFsZXR0ZSA9PSBWSURFT19QQUxFVFRFX1JBVykKKwkJeworCSAgICAgICAgICAgICAgICBJbmZvKCJDaG9vc2luZyBWR0EvNSBCQVlFUiBtb2RlICglZCkuXG4iLCBwZGV2LT52cGFsZXR0ZSk7CisJCQlwQ2hvb3NlID0gJlJhd0VudHJ5OworCQl9CisJCWVsc2UKKwkJeworCQkJSW5mbygiVkdBLzUgQkFZRVIgbW9kZSBfbXVzdF8gaGF2ZSBhIGRlY29tcHJlc3NvciBhdmFpbGFibGUsIG9yIHVzZSBSQVcgcGFsZXR0ZS5cbiIpOworCQl9CisJfQorCWVsc2UKKwl7CisgICAgICAgIAkvKiBGaW5kIGEgc3VwcG9ydGVkIGZyYW1lcmF0ZSB3aXRoIHByb2dyZXNzaXZlbHkgaGlnaGVyIGNvbXByZXNzaW9uIHJhdGlvcworCQkgICBpZiB0aGUgcHJlZmVycmVkIHJhdGlvIGlzIG5vdCBhdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgU2tpcCB0aGlzIHN0ZXAgd2hlbiB1c2luZyBSQVcgbW9kZXMuCisJCSovCisJCXdoaWxlIChjb21wcmVzc2lvbiA8PSAzKSB7CisJCQlwQ2hvb3NlID0gJktpYXJhX3RhYmxlW3NpemVdW2Zwc11bY29tcHJlc3Npb25dOworCQkJaWYgKHBDaG9vc2UtPmFsdGVybmF0ZSAhPSAwKQorCQkJCWJyZWFrOworCQkJY29tcHJlc3Npb24rKzsKKwkJfQorCX0KKwlpZiAocENob29zZSA9PSBOVUxMIHx8IHBDaG9vc2UtPmFsdGVybmF0ZSA9PSAwKQorCQlyZXR1cm4gLUVOT0VOVDsgLyogTm90IHN1cHBvcnRlZC4gKi8KKworCURlYnVnKCJVc2luZyBhbHRlcm5hdGUgc2V0dGluZyAlZC5cbiIsIHBDaG9vc2UtPmFsdGVybmF0ZSk7CisJCisJLyogdXNiX2NvbnRyb2xfbXNnIHdvbid0IHRha2Ugc3RhdGljbHkgYWxsb2NhdGVkIGFycmF5cyBhcyBhcmd1bWVudD8/ICovCisJbWVtY3B5KGJ1ZiwgcENob29zZS0+bW9kZSwgMTIpOworCWlmIChzbmFwc2hvdCkKKwkJYnVmWzBdIHw9IDB4ODA7CisKKwkvKiBGaXJtd2FyZSBidWc6IHZpZGVvIGVuZHBvaW50IGlzIDUsIGJ1dCBjb21tYW5kcyBhcmUgc2VudCB0byBlbmRwb2ludCA0ICovCisJcmV0ID0gc2VuZF92aWRlb19jb21tYW5kKHBkZXYtPnVkZXYsIDQgLyogcGRldi0+dmVuZHBvaW50ICovLCBidWYsIDEyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChwQ2hvb3NlLT5iYW5kbGVuZ3RoID4gMCAmJiBwZGV2LT52cGFsZXR0ZSAhPSBWSURFT19QQUxFVFRFX1JBVykKKwkgIHB3Y19kZWMyM19pbml0KHBkZXYtPnR5cGUsIHBkZXYtPnJlbGVhc2UsIGJ1ZiwgcGRldi0+ZGVjb21wcmVzc19kYXRhKTsKKworCXBkZXYtPmNtZF9sZW4gPSAxMjsKKwltZW1jcHkocGRldi0+Y21kX2J1ZiwgYnVmLCAxMik7CisJLyogQWxsIHNldCBhbmQgZ28gKi8KKwlwZGV2LT52ZnJhbWVzID0gZnJhbWVzOworCXBkZXYtPnZzaXplID0gc2l6ZTsKKwlwZGV2LT52c25hcHNob3QgPSBzbmFwc2hvdDsKKwlwZGV2LT52YWx0ZXJuYXRlID0gcENob29zZS0+YWx0ZXJuYXRlOworCXBkZXYtPmltYWdlID0gcHdjX2ltYWdlX3NpemVzW3NpemVdOworCXBkZXYtPnZiYW5kbGVuZ3RoID0gcENob29zZS0+YmFuZGxlbmd0aDsKKwlpZiAocGRldi0+dmJhbmRsZW5ndGggPiAwKQorCQlwZGV2LT5mcmFtZV9zaXplID0gKHBkZXYtPnZiYW5kbGVuZ3RoICogcGRldi0+aW1hZ2UueSkgLyA0OworCWVsc2UKKwkJcGRldi0+ZnJhbWVfc2l6ZSA9IChwZGV2LT5pbWFnZS54ICogcGRldi0+aW1hZ2UueSAqIDEyKSAvIDg7CisJcmV0dXJuIDA7Cit9CisKKworCisvKioKKyAgIEBwZGV2OiBkZXZpY2Ugc3RydWN0dXJlCisgICBAd2lkdGg6IHZpZXdwb3J0IHdpZHRoCisgICBAaGVpZ2h0OiB2aWV3cG9ydCBoZWlnaHQKKyAgIEBmcmFtZTogZnJhbWVyYXRlLCBpbiBmcHMKKyAgIEBjb21wcmVzc2lvbjogcHJlZmVycmVkIGNvbXByZXNzaW9uIHJhdGlvCisgICBAc25hcHNob3Q6IHNuYXBzaG90IG1vZGUgb3Igc3RyZWFtaW5nCisgKi8KK2ludCBwd2Nfc2V0X3ZpZGVvX21vZGUoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZyYW1lcywgaW50IGNvbXByZXNzaW9uLCBpbnQgc25hcHNob3QpCit7CisgICAgICAgIGludCByZXQsIHNpemU7CisKKyAgICAgICAgVHJhY2UoVFJBQ0VfRkxPVywgInNldF92aWRlb19tb2RlKCVkeCVkIEAgJWQsIHBhbGV0dGUgJWQpLlxuIiwgd2lkdGgsIGhlaWdodCwgZnJhbWVzLCBwZGV2LT52cGFsZXR0ZSk7CisJc2l6ZSA9IHB3Y19kZWNvZGVfc2l6ZShwZGV2LCB3aWR0aCwgaGVpZ2h0KTsKKwlpZiAoc2l6ZSA8IDApIHsKKwkJRGVidWcoIkNvdWxkIG5vdCBmaW5kIHN1aXRhYmxlIHNpemUuXG4iKTsKKwkJcmV0dXJuIC1FUkFOR0U7CisJfQorCURlYnVnKCJkZWNvZGVfc2l6ZSA9ICVkLlxuIiwgc2l6ZSk7CisKKyAgICAgICAgcmV0ID0gLUVJTlZBTDsKKwlzd2l0Y2gocGRldi0+dHlwZSkgeworCWNhc2UgNjQ1OgorCWNhc2UgNjQ2OgorCQlyZXQgPSBzZXRfdmlkZW9fbW9kZV9OYWxhKHBkZXYsIHNpemUsIGZyYW1lcyk7CisJCWJyZWFrOworCisJY2FzZSA2NzU6CisJY2FzZSA2ODA6CisJY2FzZSA2OTA6CisJCXJldCA9IHNldF92aWRlb19tb2RlX1RpbW9uKHBkZXYsIHNpemUsIGZyYW1lcywgY29tcHJlc3Npb24sIHNuYXBzaG90KTsKKwkJYnJlYWs7CisJCisJY2FzZSA3MjA6CisJY2FzZSA3MzA6CisJY2FzZSA3NDA6CisJY2FzZSA3NTA6CisJCXJldCA9IHNldF92aWRlb19tb2RlX0tpYXJhKHBkZXYsIHNpemUsIGZyYW1lcywgY29tcHJlc3Npb24sIHNuYXBzaG90KTsKKwkJYnJlYWs7CisJfQorCWlmIChyZXQgPCAwKSB7CisJCWlmIChyZXQgPT0gLUVOT0VOVCkKKwkJCUluZm8oIlZpZGVvIG1vZGUgJXNAJWQgZnBzIGlzIG9ubHkgc3VwcG9ydGVkIHdpdGggdGhlIGRlY29tcHJlc3NvciBtb2R1bGUgKHB3Y3gpLlxuIiwgc2l6ZTJuYW1lW3NpemVdLCBmcmFtZXMpOworCQllbHNlIHsKKwkJCUVycigiRmFpbGVkIHRvIHNldCB2aWRlbyBtb2RlICVzQCVkIGZwczsgcmV0dXJuIGNvZGUgPSAlZFxuIiwgc2l6ZTJuYW1lW3NpemVdLCBmcmFtZXMsIHJldCk7CisJCX0KKwkJcmV0dXJuIHJldDsKKwl9CisJcGRldi0+dmlldy54ID0gd2lkdGg7CisJcGRldi0+dmlldy55ID0gaGVpZ2h0OworCXBkZXYtPmZyYW1lX3RvdGFsX3NpemUgPSBwZGV2LT5mcmFtZV9zaXplICsgcGRldi0+ZnJhbWVfaGVhZGVyX3NpemUgKyBwZGV2LT5mcmFtZV90cmFpbGVyX3NpemU7CisJcHdjX3NldF9pbWFnZV9idWZmZXJfc2l6ZShwZGV2KTsKKwlUcmFjZShUUkFDRV9TSVpFLCAiU2V0IHZpZXdwb3J0IHRvICVkeCVkLCBpbWFnZSBzaXplIGlzICVkeCVkLlxuIiwgd2lkdGgsIGhlaWdodCwgcHdjX2ltYWdlX3NpemVzW3NpemVdLngsIHB3Y19pbWFnZV9zaXplc1tzaXplXS55KTsKKwlyZXR1cm4gMDsKK30KKworCit2b2lkIHB3Y19zZXRfaW1hZ2VfYnVmZmVyX3NpemUoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCit7CisJaW50IGksIGZhY3RvciA9IDAsIGZpbGxlciA9IDA7CisKKwkvKiBmb3IgUEFMRVRURV9ZVVY0MjBQICovCisJc3dpdGNoKHBkZXYtPnZwYWxldHRlKQorCXsKKwljYXNlIFZJREVPX1BBTEVUVEVfWVVWNDIwUDoKKwkJZmFjdG9yID0gNjsKKwkJZmlsbGVyID0gMTI4OworCQlicmVhazsKKwljYXNlIFZJREVPX1BBTEVUVEVfUkFXOgorCQlmYWN0b3IgPSA2OyAvKiBjYW4gYmUgdW5jb21wcmVzc2VkIFlVVjQyMFAgKi8KKwkJZmlsbGVyID0gMDsKKwkJYnJlYWs7CisJfQorCisJLyogU2V0IHNpemVzIGluIGJ5dGVzICovCisJcGRldi0+aW1hZ2Uuc2l6ZSA9IHBkZXYtPmltYWdlLnggKiBwZGV2LT5pbWFnZS55ICogZmFjdG9yIC8gNDsKKwlwZGV2LT52aWV3LnNpemUgID0gcGRldi0+dmlldy54ICAqIHBkZXYtPnZpZXcueSAgKiBmYWN0b3IgLyA0OworCisJLyogQWxpZ24gb2Zmc2V0LCBvciB5b3UnbGwgZ2V0IHNvbWUgdmVyeSB3ZWlyZCByZXN1bHRzIGluCisJICAgWVVWNDIwIG1vZGUuLi4geCBtdXN0IGJlIG11bHRpcGxlIG9mIDQgKHRvIGdldCB0aGUgWSdzIGluCisJICAgcGxhY2UpLCBhbmQgeSBldmVuIChvciB5b3UnbGwgbWl4dXAgVSAmIFYpLiBUaGlzIGlzIGxlc3Mgb2YgYQorCSAgIHByb2JsZW0gZm9yIFlVVjQyMFAuCisJICovCisJcGRldi0+b2Zmc2V0LnggPSAoKHBkZXYtPnZpZXcueCAtIHBkZXYtPmltYWdlLngpIC8gMikgJiAweEZGRkM7CisJcGRldi0+b2Zmc2V0LnkgPSAoKHBkZXYtPnZpZXcueSAtIHBkZXYtPmltYWdlLnkpIC8gMikgJiAweEZGRkU7CisKKwkvKiBGaWxsIGJ1ZmZlcnMgd2l0aCBncmF5IG9yIGJsYWNrICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9JTUFHRVM7IGkrKykgeworCQlpZiAocGRldi0+aW1hZ2VfcHRyW2ldICE9IE5VTEwpCisJCQltZW1zZXQocGRldi0+aW1hZ2VfcHRyW2ldLCBmaWxsZXIsIHBkZXYtPnZpZXcuc2l6ZSk7CisJfQorfQorCisKKworLyogQlJJR0hUTkVTUyAqLworCitpbnQgcHdjX2dldF9icmlnaHRuZXNzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoreworCWNoYXIgYnVmOworCWludCByZXQ7CisKKwlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfTFVNX0NUTCwgQlJJR0hUTkVTU19GT1JNQVRURVIsIDEpOwkKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gYnVmIDw8IDk7Cit9CisKK2ludCBwd2Nfc2V0X2JyaWdodG5lc3Moc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCB2YWx1ZSkKK3sKKwljaGFyIGJ1ZjsKKworCWlmICh2YWx1ZSA8IDApCisJCXZhbHVlID0gMDsKKwlpZiAodmFsdWUgPiAweGZmZmYpCisJCXZhbHVlID0gMHhmZmZmOworCWJ1ZiA9ICh2YWx1ZSA+PiA5KSAmIDB4N2Y7CisJcmV0dXJuIFNlbmRDb250cm9sTXNnKFNFVF9MVU1fQ1RMLCBCUklHSFRORVNTX0ZPUk1BVFRFUiwgMSk7Cit9CisKKy8qIENPTlRSQVNUICovCisKK2ludCBwd2NfZ2V0X2NvbnRyYXN0KHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoreworCWNoYXIgYnVmOworCWludCByZXQ7CisKKwlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfTFVNX0NUTCwgQ09OVFJBU1RfRk9STUFUVEVSLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gYnVmIDw8IDEwOworfQorCitpbnQgcHdjX3NldF9jb250cmFzdChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHZhbHVlKQoreworCWNoYXIgYnVmOworCisJaWYgKHZhbHVlIDwgMCkKKwkJdmFsdWUgPSAwOworCWlmICh2YWx1ZSA+IDB4ZmZmZikKKwkJdmFsdWUgPSAweGZmZmY7CisJYnVmID0gKHZhbHVlID4+IDEwKSAmIDB4M2Y7CisJcmV0dXJuIFNlbmRDb250cm9sTXNnKFNFVF9MVU1fQ1RMLCBDT05UUkFTVF9GT1JNQVRURVIsIDEpOworfQorCisvKiBHQU1NQSAqLworCitpbnQgcHdjX2dldF9nYW1tYShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwljaGFyIGJ1ZjsKKwlpbnQgcmV0OworCQorCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9MVU1fQ1RMLCBHQU1NQV9GT1JNQVRURVIsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiBidWYgPDwgMTE7Cit9CisKK2ludCBwd2Nfc2V0X2dhbW1hKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpCit7CisJY2hhciBidWY7CisKKwlpZiAodmFsdWUgPCAwKQorCQl2YWx1ZSA9IDA7CisJaWYgKHZhbHVlID4gMHhmZmZmKQorCQl2YWx1ZSA9IDB4ZmZmZjsKKwlidWYgPSAodmFsdWUgPj4gMTEpICYgMHgxZjsKKwlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX0xVTV9DVEwsIEdBTU1BX0ZPUk1BVFRFUiwgMSk7Cit9CisKKworLyogU0FUVVJBVElPTiAqLworCitpbnQgcHdjX2dldF9zYXR1cmF0aW9uKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoreworCWNoYXIgYnVmOworCWludCByZXQ7CisKKwlpZiAocGRldi0+dHlwZSA8IDY3NSkKKwkJcmV0dXJuIC0xOworCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9DSFJPTV9DVEwsIHBkZXYtPnR5cGUgPCA3MzAgPyBTQVRVUkFUSU9OX01PREVfRk9STUFUVEVSMiA6IFNBVFVSQVRJT05fTU9ERV9GT1JNQVRURVIxLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMzI3NjggKyBidWYgKiAzMjc7Cit9CisKK2ludCBwd2Nfc2V0X3NhdHVyYXRpb24oc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCB2YWx1ZSkKK3sKKwljaGFyIGJ1ZjsKKworCWlmIChwZGV2LT50eXBlIDwgNjc1KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAodmFsdWUgPCAwKQorCQl2YWx1ZSA9IDA7CisJaWYgKHZhbHVlID4gMHhmZmZmKQorCQl2YWx1ZSA9IDB4ZmZmZjsKKwkvKiBzYXR1cmF0aW9uIHJhbmdlcyBmcm9tIC0xMDAgdG8gKzEwMCAqLworCWJ1ZiA9ICh2YWx1ZSAtIDMyNzY4KSAvIDMyNzsKKwlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX0NIUk9NX0NUTCwgcGRldi0+dHlwZSA8IDczMCA/IFNBVFVSQVRJT05fTU9ERV9GT1JNQVRURVIyIDogU0FUVVJBVElPTl9NT0RFX0ZPUk1BVFRFUjEsIDEpOworfQorCisvKiBBR0MgKi8KKworc3RhdGljIGlubGluZSBpbnQgcHdjX3NldF9hZ2Moc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBtb2RlLCBpbnQgdmFsdWUpCit7CisJY2hhciBidWY7CisJaW50IHJldDsKKwkKKwlpZiAobW9kZSkKKwkJYnVmID0gMHgwOyAvKiBhdXRvICovCisJZWxzZQorCQlidWYgPSAweGZmOyAvKiBmaXhlZCAqLworCisJcmV0ID0gU2VuZENvbnRyb2xNc2coU0VUX0xVTV9DVEwsIEFHQ19NT0RFX0ZPUk1BVFRFUiwgMSk7CisJCisJaWYgKCFtb2RlICYmIHJldCA+PSAwKSB7CisJCWlmICh2YWx1ZSA8IDApCisJCQl2YWx1ZSA9IDA7CisJCWlmICh2YWx1ZSA+IDB4ZmZmZikKKwkJCXZhbHVlID0gMHhmZmZmOworCQlidWYgPSAodmFsdWUgPj4gMTApICYgMHgzRjsKKwkJcmV0ID0gU2VuZENvbnRyb2xNc2coU0VUX0xVTV9DVEwsIFBSRVNFVF9BR0NfRk9STUFUVEVSLCAxKTsKKwl9CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19nZXRfYWdjKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKnZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCWludCByZXQ7CisJCisJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX0xVTV9DVEwsIEFHQ19NT0RFX0ZPUk1BVFRFUiwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoYnVmICE9IDApIHsgLyogZml4ZWQgKi8KKwkJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX0xVTV9DVEwsIFBSRVNFVF9BR0NfRk9STUFUVEVSLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlpZiAoYnVmID4gMHgzRikKKwkJCWJ1ZiA9IDB4M0Y7CisJCSp2YWx1ZSA9IChidWYgPDwgMTApOwkJCisJfQorCWVsc2UgeyAvKiBhdXRvICovCisJCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9TVEFUVVNfQ1RMLCBSRUFEX0FHQ19GT1JNQVRURVIsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCS8qIEdhaC4uLiB0aGlzIHZhbHVlIHJhbmdlcyBmcm9tIDB4MDAgLi4uIDB4OUYgKi8KKwkJaWYgKGJ1ZiA+IDB4OUYpCisJCQlidWYgPSAweDlGOworCQkqdmFsdWUgPSAtKDQ4ICsgYnVmICogNDA5KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX3NldF9zaHV0dGVyX3NwZWVkKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgbW9kZSwgaW50IHZhbHVlKQoreworCWNoYXIgYnVmWzJdOworCWludCBzcGVlZCwgcmV0OworCisKKwlpZiAobW9kZSkKKwkJYnVmWzBdID0gMHgwOwkvKiBhdXRvICovCisJZWxzZQorCQlidWZbMF0gPSAweGZmOyAvKiBmaXhlZCAqLworCQorCXJldCA9IFNlbmRDb250cm9sTXNnKFNFVF9MVU1fQ1RMLCBTSFVUVEVSX01PREVfRk9STUFUVEVSLCAxKTsKKworCWlmICghbW9kZSAmJiByZXQgPj0gMCkgeworCQlpZiAodmFsdWUgPCAwKQorCQkJdmFsdWUgPSAwOworCQlpZiAodmFsdWUgPiAweGZmZmYpCisJCQl2YWx1ZSA9IDB4ZmZmZjsKKwkJc3dpdGNoKHBkZXYtPnR5cGUpIHsKKwkJY2FzZSA2NzU6CisJCWNhc2UgNjgwOgorCQljYXNlIDY5MDoKKwkJCS8qIHNwZWVkIHJhbmdlcyBmcm9tIDB4MCB0byAweDI5MCAoNjU2KSAqLworCQkJc3BlZWQgPSAodmFsdWUgLyAxMDApOworCQkJYnVmWzFdID0gc3BlZWQgPj4gODsKKwkJCWJ1ZlswXSA9IHNwZWVkICYgMHhmZjsKKwkJCWJyZWFrOworCQljYXNlIDcyMDoKKwkJY2FzZSA3MzA6CisJCWNhc2UgNzQwOgorCQljYXNlIDc1MDoKKwkJCS8qIHNwZWVkIHNlZW1zIHRvIHJhbmdlIGZyb20gMHgwIHRvIDB4ZmYgKi8KKwkJCWJ1ZlsxXSA9IDA7CisJCQlidWZbMF0gPSB2YWx1ZSA+PiA4OworCQkJYnJlYWs7CisJCX0KKworCQlyZXQgPSBTZW5kQ29udHJvbE1zZyhTRVRfTFVNX0NUTCwgUFJFU0VUX1NIVVRURVJfRk9STUFUVEVSLCAyKTsKKwl9CisJcmV0dXJuIHJldDsKK30JCisKKworLyogUE9XRVIgKi8KKworaW50IHB3Y19jYW1lcmFfcG93ZXIoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBwb3dlcikKK3sKKwljaGFyIGJ1ZjsKKworCWlmIChwZGV2LT50eXBlIDwgNjc1IHx8IChwZGV2LT50eXBlIDwgNzMwICYmIHBkZXYtPnJlbGVhc2UgPCA2KSkKKwkJcmV0dXJuIDA7CS8qIE5vdCBzdXBwb3J0ZWQgYnkgTmFsYSBvciBUaW1vbiA8IHJlbGVhc2UgNiAqLworCisJaWYgKHBvd2VyKQorCQlidWYgPSAweDAwOyAvKiBhY3RpdmUgKi8KKwllbHNlCisJCWJ1ZiA9IDB4RkY7IC8qIHBvd2VyIHNhdmUgKi8KKwlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX1NUQVRVU19DVEwsIFNFVF9QT1dFUl9TQVZFX01PREVfRk9STUFUVEVSLCAxKTsKK30KKworCisKKy8qIHByaXZhdGUgY2FsbHMgKi8KKworc3RhdGljIGlubGluZSBpbnQgcHdjX3Jlc3RvcmVfdXNlcihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwljaGFyIGJ1ZjsgLyogZHVtbXkgKi8KKwlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX1NUQVRVU19DVEwsIFJFU1RPUkVfVVNFUl9ERUZBVUxUU19GT1JNQVRURVIsIDApOworfQorCitzdGF0aWMgaW5saW5lIGludCBwd2Nfc2F2ZV91c2VyKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoreworCWNoYXIgYnVmOyAvKiBkdW1teSAqLworCXJldHVybiBTZW5kQ29udHJvbE1zZyhTRVRfU1RBVFVTX0NUTCwgU0FWRV9VU0VSX0RFRkFVTFRTX0ZPUk1BVFRFUiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19yZXN0b3JlX2ZhY3Rvcnkoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCit7CisJY2hhciBidWY7IC8qIGR1bW15ICovCisJcmV0dXJuIFNlbmRDb250cm9sTXNnKFNFVF9TVEFUVVNfQ1RMLCBSRVNUT1JFX0ZBQ1RPUllfREVGQVVMVFNfRk9STUFUVEVSLCAwKTsKK30KKworIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyAvKiBQYXRjaCBieSBBbHZhcmFkbzogKG5vdCBpbiB0aGUgb3JpZ2luYWwgdmVyc2lvbiAgICovCisKKyAvKgorICAqIHRoZSBjYW1lcmEgcmVjb2duaXplcyBtb2RlcyBmcm9tIDAgdG8gNDoKKyAgKgorICAqIDAwOiBpbmRvb3IgKGluY2FuZGVzY2FudCBsaWdodGluZykKKyAgKiAwMTogb3V0ZG9vciAoc3VubGlnaHQpCisgICogMDI6IGZsdW9yZXNjZW50IGxpZ2h0aW5nCisgICogMDM6IG1hbnVhbAorICAqIDA0OiBhdXRvCisgICovIAorc3RhdGljIGlubGluZSBpbnQgcHdjX3NldF9hd2Ioc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBtb2RlKQoreworCWNoYXIgYnVmOworCWludCByZXQ7CisJCisJaWYgKG1vZGUgPCAwKQorCSAgICBtb2RlID0gMDsKKwkKKwlpZiAobW9kZSA+IDQpCisJICAgIG1vZGUgPSA0OworCQorCWJ1ZiA9IG1vZGUgJiAweDA3OyAvKiBqdXN0IHRoZSBsb3dlc3QgdGhyZWUgYml0cyAqLworCQorCXJldCA9IFNlbmRDb250cm9sTXNnKFNFVF9DSFJPTV9DVEwsIFdCX01PREVfRk9STUFUVEVSLCAxKTsKKwkKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX2dldF9hd2Ioc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCit7CisJdW5zaWduZWQgY2hhciBidWY7CisJaW50IHJldDsKKwkKKwlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfQ0hST01fQ1RMLCBXQl9NT0RFX0ZPUk1BVFRFUiwgMSk7CisKKwlpZiAocmV0IDwgMCkgCisJCXJldHVybiByZXQ7CisJcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX3NldF9yZWRfZ2FpbihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHZhbHVlKQoreworICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1ZjsKKworCWlmICh2YWx1ZSA8IDApCisJCXZhbHVlID0gMDsKKwlpZiAodmFsdWUgPiAweGZmZmYpCisJCXZhbHVlID0gMHhmZmZmOworCS8qIG9ubHkgdGhlIG1zYiBpcyBjb25zaWRlcmVkICovCisJYnVmID0gdmFsdWUgPj4gODsKKwlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX0NIUk9NX0NUTCwgUFJFU0VUX01BTlVBTF9SRURfR0FJTl9GT1JNQVRURVIsIDEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwd2NfZ2V0X3JlZF9nYWluKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKnZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCWludCByZXQ7CisJCisJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX0NIUk9NX0NUTCwgUFJFU0VUX01BTlVBTF9SRURfR0FJTl9GT1JNQVRURVIsIDEpOworCWlmIChyZXQgPCAwKQorCSAgICByZXR1cm4gcmV0OworCSp2YWx1ZSA9IGJ1ZiA8PCA4OworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19zZXRfYmx1ZV9nYWluKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpCit7CisJdW5zaWduZWQgY2hhciBidWY7CisKKwlpZiAodmFsdWUgPCAwKQorCQl2YWx1ZSA9IDA7CisJaWYgKHZhbHVlID4gMHhmZmZmKQorCQl2YWx1ZSA9IDB4ZmZmZjsKKwkvKiBvbmx5IHRoZSBtc2IgaXMgY29uc2lkZXJlZCAqLworCWJ1ZiA9IHZhbHVlID4+IDg7CisJcmV0dXJuIFNlbmRDb250cm9sTXNnKFNFVF9DSFJPTV9DVEwsIFBSRVNFVF9NQU5VQUxfQkxVRV9HQUlOX0ZPUk1BVFRFUiwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19nZXRfYmx1ZV9nYWluKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKnZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCWludCByZXQ7CisJCisJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX0NIUk9NX0NUTCwgUFJFU0VUX01BTlVBTF9CTFVFX0dBSU5fRk9STUFUVEVSLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkgICAgcmV0dXJuIHJldDsKKwkqdmFsdWUgPSBidWYgPDwgODsKKwlyZXR1cm4gMDsKK30KKworCisvKiBUaGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgYXJlIGRpZmZlcmVudCwgc2luY2UgdGhleSBvbmx5IHJlYWQgdGhlCisgICBpbnRlcm5hbCByZWQvYmx1ZSBnYWlucywgd2hpY2ggbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBtYW51YWwgCisgICBnYWlucyBzZXQgb3IgcmVhZCBhYm92ZS4KKyAqLyAgIAorc3RhdGljIGlubGluZSBpbnQgcHdjX3JlYWRfcmVkX2dhaW4oc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCAqdmFsdWUpCit7CisJdW5zaWduZWQgY2hhciBidWY7CisJaW50IHJldDsKKwkKKwlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfU1RBVFVTX0NUTCwgUkVBRF9SRURfR0FJTl9GT1JNQVRURVIsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCSp2YWx1ZSA9IGJ1ZiA8PCA4OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBwd2NfcmVhZF9ibHVlX2dhaW4oc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCAqdmFsdWUpCit7CisJdW5zaWduZWQgY2hhciBidWY7CisJaW50IHJldDsKKwkKKwlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfU1RBVFVTX0NUTCwgUkVBRF9CTFVFX0dBSU5fRk9STUFUVEVSLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwkqdmFsdWUgPSBidWYgPDwgODsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW5saW5lIGludCBwd2Nfc2V0X3diX3NwZWVkKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgc3BlZWQpCit7CisJdW5zaWduZWQgY2hhciBidWY7CisJCisJLyogdXNlZnVsIHJhbmdlIGlzIDB4MDEuLjB4MjAgKi8KKwlidWYgPSBzcGVlZCAvIDB4N2YwOworCXJldHVybiBTZW5kQ29udHJvbE1zZyhTRVRfQ0hST01fQ1RMLCBBV0JfQ09OVFJPTF9TUEVFRF9GT1JNQVRURVIsIDEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwd2NfZ2V0X3diX3NwZWVkKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKnZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCWludCByZXQ7CisJCisJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX0NIUk9NX0NUTCwgQVdCX0NPTlRST0xfU1BFRURfRk9STUFUVEVSLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwkqdmFsdWUgPSBidWYgKiAweDdmMDsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW5saW5lIGludCBwd2Nfc2V0X3diX2RlbGF5KHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgZGVsYXkpCit7CisJdW5zaWduZWQgY2hhciBidWY7CisJCisJLyogdXNlZnVsIHJhbmdlIGlzIDB4MDEuLjB4M0YgKi8KKwlidWYgPSAoZGVsYXkgPj4gMTApOworCXJldHVybiBTZW5kQ29udHJvbE1zZyhTRVRfQ0hST01fQ1RMLCBBV0JfQ09OVFJPTF9ERUxBWV9GT1JNQVRURVIsIDEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwd2NfZ2V0X3diX2RlbGF5KHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKnZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCWludCByZXQ7CisJCisJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX0NIUk9NX0NUTCwgQVdCX0NPTlRST0xfREVMQVlfRk9STUFUVEVSLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwkqdmFsdWUgPSBidWYgPDwgMTA7CisJcmV0dXJuIDA7Cit9CisKKworaW50IHB3Y19zZXRfbGVkcyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IG9uX3ZhbHVlLCBpbnQgb2ZmX3ZhbHVlKQoreworCXVuc2lnbmVkIGNoYXIgYnVmWzJdOworCisJaWYgKHBkZXYtPnR5cGUgPCA3MzApCisJCXJldHVybiAwOworCW9uX3ZhbHVlIC89IDEwMDsKKwlvZmZfdmFsdWUgLz0gMTAwOworCWlmIChvbl92YWx1ZSA8IDApCisJCW9uX3ZhbHVlID0gMDsKKwlpZiAob25fdmFsdWUgPiAweGZmKQorCQlvbl92YWx1ZSA9IDB4ZmY7CisJaWYgKG9mZl92YWx1ZSA8IDApCisJCW9mZl92YWx1ZSA9IDA7CisJaWYgKG9mZl92YWx1ZSA+IDB4ZmYpCisJCW9mZl92YWx1ZSA9IDB4ZmY7CisKKwlidWZbMF0gPSBvbl92YWx1ZTsKKwlidWZbMV0gPSBvZmZfdmFsdWU7CisKKwlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX1NUQVRVU19DVEwsIExFRF9GT1JNQVRURVIsIDIpOworfQorCitpbnQgcHdjX2dldF9sZWRzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKm9uX3ZhbHVlLCBpbnQgKm9mZl92YWx1ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZlsyXTsKKwlpbnQgcmV0OworCQorCWlmIChwZGV2LT50eXBlIDwgNzMwKSB7CisJCSpvbl92YWx1ZSA9IC0xOworCQkqb2ZmX3ZhbHVlID0gLTE7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9TVEFUVVNfQ1RMLCBMRURfRk9STUFUVEVSLCAyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwkqb25fdmFsdWUgPSBidWZbMF0gKiAxMDA7CisJKm9mZl92YWx1ZSA9IGJ1ZlsxXSAqIDEwMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX3NldF9jb250b3VyKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgY29udG91cikKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwlpbnQgcmV0OworCQorCWlmIChjb250b3VyIDwgMCkKKwkJYnVmID0gMHhmZjsgLyogYXV0byBjb250b3VyIG9uICovCisJZWxzZQorCQlidWYgPSAweDA7IC8qIGF1dG8gY29udG91ciBvZmYgKi8KKwlyZXQgPSBTZW5kQ29udHJvbE1zZyhTRVRfTFVNX0NUTCwgQVVUT19DT05UT1VSX0ZPUk1BVFRFUiwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJCisJaWYgKGNvbnRvdXIgPCAwKQorCQlyZXR1cm4gMDsKKwlpZiAoY29udG91ciA+IDB4ZmZmZikKKwkJY29udG91ciA9IDB4ZmZmZjsKKwkKKwlidWYgPSAoY29udG91ciA+PiAxMCk7IC8qIGNvbnRvdXIgcHJlc2V0IGlzIFswLi4zZl0gKi8KKwlyZXQgPSBTZW5kQ29udHJvbE1zZyhTRVRfTFVNX0NUTCwgUFJFU0VUX0NPTlRPVVJfRk9STUFUVEVSLCAxKTsKKwlpZiAocmV0IDwgMCkJCisJCXJldHVybiByZXQ7CQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBwd2NfZ2V0X2NvbnRvdXIoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCAqY29udG91cikKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwlpbnQgcmV0OworCQorCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9MVU1fQ1RMLCBBVVRPX0NPTlRPVVJfRk9STUFUVEVSLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChidWYgPT0gMCkgeworCQkvKiBhdXRvIG1vZGUgb2ZmLCBxdWVyeSBjdXJyZW50IHByZXNldCB2YWx1ZSAqLworCQlyZXQgPSBSZWN2Q29udHJvbE1zZyhHRVRfTFVNX0NUTCwgUFJFU0VUX0NPTlRPVVJfRk9STUFUVEVSLCAxKTsKKwkJaWYgKHJldCA8IDApCQorCQkJcmV0dXJuIHJldDsKKwkJKmNvbnRvdXIgPSBidWYgPDwgMTA7CisJfQorCWVsc2UKKwkJKmNvbnRvdXIgPSAtMTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW5saW5lIGludCBwd2Nfc2V0X2JhY2tsaWdodChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IGJhY2tsaWdodCkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZjsKKwkKKwlpZiAoYmFja2xpZ2h0KQorCQlidWYgPSAweGZmOworCWVsc2UKKwkJYnVmID0gMHgwOworCXJldHVybiBTZW5kQ29udHJvbE1zZyhTRVRfTFVNX0NUTCwgQkFDS19MSUdIVF9DT01QRU5TQVRJT05fRk9STUFUVEVSLCAxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX2dldF9iYWNrbGlnaHQoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCAqYmFja2xpZ2h0KQoreworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciBidWY7CisJCisJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX0xVTV9DVEwsIEJBQ0tfTElHSFRfQ09NUEVOU0FUSU9OX0ZPUk1BVFRFUiwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJKmJhY2tsaWdodCA9IGJ1ZjsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW5saW5lIGludCBwd2Nfc2V0X2ZsaWNrZXIoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBmbGlja2VyKQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCQorCWlmIChmbGlja2VyKQorCQlidWYgPSAweGZmOworCWVsc2UKKwkJYnVmID0gMHgwOworCXJldHVybiBTZW5kQ29udHJvbE1zZyhTRVRfTFVNX0NUTCwgRkxJQ0tFUkxFU1NfTU9ERV9GT1JNQVRURVIsIDEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwd2NfZ2V0X2ZsaWNrZXIoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCAqZmxpY2tlcikKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgYnVmOworCQorCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9MVU1fQ1RMLCBGTElDS0VSTEVTU19NT0RFX0ZPUk1BVFRFUiwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJKmZsaWNrZXIgPSBidWY7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSBpbnQgcHdjX3NldF9keW5hbWljX25vaXNlKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgbm9pc2UpCit7CisJdW5zaWduZWQgY2hhciBidWY7CisKKwlpZiAobm9pc2UgPCAwKQorCQlub2lzZSA9IDA7CisJaWYgKG5vaXNlID4gMykKKwkJbm9pc2UgPSAzOworCWJ1ZiA9IG5vaXNlOworCXJldHVybiBTZW5kQ29udHJvbE1zZyhTRVRfTFVNX0NUTCwgRFlOQU1JQ19OT0lTRV9DT05UUk9MX0ZPUk1BVFRFUiwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB3Y19nZXRfZHluYW1pY19ub2lzZShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICpub2lzZSkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgYnVmOworCQorCXJldCA9IFJlY3ZDb250cm9sTXNnKEdFVF9MVU1fQ1RMLCBEWU5BTUlDX05PSVNFX0NPTlRST0xfRk9STUFUVEVSLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwkqbm9pc2UgPSBidWY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHdjX21wdF9yZXNldChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IGZsYWdzKQoreworCXVuc2lnbmVkIGNoYXIgYnVmOworCQorCWJ1ZiA9IGZsYWdzICYgMHgwMzsgLy8gb25seSBsb3dlciB0d28gYml0cyBhcmUgY3VycmVudGx5IHVzZWQKKwlyZXR1cm4gU2VuZENvbnRyb2xNc2coU0VUX01QVF9DVEwsIFBUX1JFU0VUX0NPTlRST0xfRk9STUFUVEVSLCAxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHdjX21wdF9zZXRfYW5nbGUoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCBwYW4sIGludCB0aWx0KQoreworCXVuc2lnbmVkIGNoYXIgYnVmWzRdOworCQorCS8qIHNldCBuZXcgcmVsYXRpdmUgYW5nbGU7IGFuZ2xlcyBhcmUgZXhwcmVzc2VkIGluIGRlZ3JlZXMgKiAxMDAsCisJICAgYnV0IGNhbSBhcyAuNSBkZWdyZWUgcmVzb2x1dGlvbiwgaGVuY2UgZGV2aWRlIGJ5IDIwMC4gQWxzbworCSAgIHRoZSBhbmdsZSBtdXN0IGJlIG11bHRpcGxpZWQgYnkgNjQgYmVmb3JlIGl0J3Mgc2VuZCB0bworCSAgIHRoZSBjYW0gKD8/KQorCSAqLworCXBhbiAgPSAgNjQgKiBwYW4gIC8gMTAwOworCXRpbHQgPSAtNjQgKiB0aWx0IC8gMTAwOyAvKiBwb3NpdGl2ZSB0aWx0IGlzIGRvd24sIHdoaWNoIGlzIG5vdCB3aGF0IHRoZSB1c2VyIHdvdWxkIGV4cGVjdCAqLworCWJ1ZlswXSA9IHBhbiAmIDB4RkY7CisJYnVmWzFdID0gKHBhbiA+PiA4KSAmIDB4RkY7CisJYnVmWzJdID0gdGlsdCAmIDB4RkY7CisJYnVmWzNdID0gKHRpbHQgPj4gOCkgJiAweEZGOworCXJldHVybiBTZW5kQ29udHJvbE1zZyhTRVRfTVBUX0NUTCwgUFRfUkVMQVRJVkVfQ09OVFJPTF9GT1JNQVRURVIsIDQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwd2NfbXB0X2dldF9zdGF0dXMoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIHN0cnVjdCBwd2NfbXB0X3N0YXR1cyAqc3RhdHVzKQoreworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciBidWZbNV07CisJCisJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX01QVF9DVEwsIFBUX1NUQVRVU19GT1JNQVRURVIsIDUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXN0YXR1cy0+c3RhdHVzID0gYnVmWzBdICYgMHg3OyAvLyAzIGJpdHMgYXJlIHVzZWQgZm9yIHJlcG9ydGluZworCXN0YXR1cy0+dGltZV9wYW4gPSAoYnVmWzFdIDw8IDgpICsgYnVmWzJdOworCXN0YXR1cy0+dGltZV90aWx0ID0gKGJ1ZlszXSA8PCA4KSArIGJ1Zls0XTsKKwlyZXR1cm4gMDsKK30KKworCitpbnQgcHdjX2dldF9jbW9zX3NlbnNvcihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50ICpzZW5zb3IpCit7CisJdW5zaWduZWQgY2hhciBidWY7CisJaW50IHJldCA9IC0xLCByZXF1ZXN0OworCQorCWlmIChwZGV2LT50eXBlIDwgNjc1KQorCQlyZXF1ZXN0ID0gU0VOU09SX1RZUEVfRk9STUFUVEVSMTsKKwllbHNlIGlmIChwZGV2LT50eXBlIDwgNzMwKQorCQlyZXR1cm4gLTE7IC8qIFRoZSBWZXN0YSBzZXJpZXMgZG9lc24ndCBoYXZlIHRoaXMgY2FsbCAqLworCWVsc2UKKwkJcmVxdWVzdCA9IFNFTlNPUl9UWVBFX0ZPUk1BVFRFUjI7CisJCisJcmV0ID0gUmVjdkNvbnRyb2xNc2coR0VUX1NUQVRVU19DVEwsIHJlcXVlc3QsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmIChwZGV2LT50eXBlIDwgNjc1KQorCQkqc2Vuc29yID0gYnVmIHwgMHgxMDA7CisJZWxzZQorCQkqc2Vuc29yID0gYnVmOworCXJldHVybiAwOworfQorCisKKyAvKiBFbmQgb2YgQWRkLU9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvKiBMaW51eCAyLjUuc29tZXRoaW5nIGFuZCAyLjYgcGFzcyBkaXJlY3QgcG9pbnRlcnMgdG8gYXJndW1lbnRzIG9mCisgICBpb2N0bCgpIGNhbGxzLiBXaXRoIDIuNCwgeW91IGhhdmUgdG8gZG8gdGVkaW91cyBjb3B5X2Zyb21fdXNlcigpCisgICBhbmQgY29weV90b191c2VyKCkgY2FsbHMuIFdpdGggdGhlc2UgbWFjcm9zIHdlIGNpcmN1bXZlbnQgdGhpcywKKyAgIGFuZCBsZXQgbWUgbWFpbnRhaW4gb25seSBvbmUgc291cmNlIGZpbGUuIFRoZSBmdW5jdGlvbmFsaXR5IGlzCisgICBleGFjdGx5IHRoZSBzYW1lIG90aGVyd2lzZS4KKyAqLyAgIAorCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDApCisKKy8qIGRlZmluZSBsb2NhbCB2YXJpYWJsZSBmb3IgYXJnICovCisjZGVmaW5lIEFSR19ERUYoQVJHX3R5cGUsIEFSR19uYW1lKVwKKwlBUkdfdHlwZSAqQVJHX25hbWUgPSBhcmc7CisvKiBjb3B5IGFyZyB0byBsb2NhbCB2YXJpYWJsZSAqLwkKKyNkZWZpbmUgQVJHX0lOKEFSR19uYW1lKSAvKiBub3RoaW5nICovCisvKiBhcmd1bWVudCBpdHNlbGYgKHJlZmVyZW5jZWQpICovCisjZGVmaW5lIEFSR1IoQVJHX25hbWUpICgqQVJHX25hbWUpCisvKiBhcmd1bWVudCBhZGRyZXNzICovCisjZGVmaW5lIEFSR0EoQVJHX25hbWUpIEFSR19uYW1lCisvKiBjb3B5IGxvY2FsIHZhcmlhYmxlIHRvIGFyZyAqLworI2RlZmluZSBBUkdfT1VUKEFSR19uYW1lKSAvKiBub3RoaW5nICovCisKKyNlbHNlCisKKyNkZWZpbmUgQVJHX0RFRihBUkdfdHlwZSwgQVJHX25hbWUpXAorCUFSR190eXBlIEFSR19uYW1lOworI2RlZmluZSBBUkdfSU4oQVJHX25hbWUpXAorCWlmIChjb3B5X2Zyb21fdXNlcigmQVJHX25hbWUsIGFyZywgc2l6ZW9mKEFSR19uYW1lKSkpIHtcCisJCXJldCA9IC1FRkFVTFQ7XAorCQlicmVhaztcCisJfQorI2RlZmluZSBBUkdSKEFSR19uYW1lKSBBUkdfbmFtZQorI2RlZmluZSBBUkdBKEFSR19uYW1lKSAmQVJHX25hbWUKKyNkZWZpbmUgQVJHX09VVChBUkdfbmFtZSlcCisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZBUkdfbmFtZSwgc2l6ZW9mKEFSR19uYW1lKSkpIHtcCisJCXJldCA9IC1FRkFVTFQ7XAorCQlicmVhaztcCisJfQorCisjZW5kaWYKKworaW50IHB3Y19pb2N0bChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCWludCByZXQgPSAwOworCisJc3dpdGNoKGNtZCkgeworCWNhc2UgVklESU9DUFdDUlVTRVI6CisJeworCQlpZiAocHdjX3Jlc3RvcmVfdXNlcihwZGV2KSkKKwkJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwkKKwljYXNlIFZJRElPQ1BXQ1NVU0VSOgorCXsKKwkJaWYgKHB3Y19zYXZlX3VzZXIocGRldikpCisJCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJCQorCWNhc2UgVklESU9DUFdDRkFDVE9SWToKKwl7CisJCWlmIChwd2NfcmVzdG9yZV9mYWN0b3J5KHBkZXYpKQorCQkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCQorCWNhc2UgVklESU9DUFdDU0NRVUFMOgorCXsJCisJCUFSR19ERUYoaW50LCBxdWFsKQorCisJCUFSR19JTihxdWFsKQorCQlpZiAoQVJHUihxdWFsKSA8IDAgfHwgQVJHUihxdWFsKSA+IDMpCisJCQlyZXQgPSAtRUlOVkFMOworCQllbHNlCisJCQlyZXQgPSBwd2NfdHJ5X3ZpZGVvX21vZGUocGRldiwgcGRldi0+dmlldy54LCBwZGV2LT52aWV3LnksIHBkZXYtPnZmcmFtZXMsIEFSR1IocXVhbCksIHBkZXYtPnZzbmFwc2hvdCk7CisJCWlmIChyZXQgPj0gMCkKKwkJCXBkZXYtPnZjb21wcmVzc2lvbiA9IEFSR1IocXVhbCk7CisJCWJyZWFrOworCX0KKwkKKwljYXNlIFZJRElPQ1BXQ0dDUVVBTDoKKwl7CisJCUFSR19ERUYoaW50LCBxdWFsKQorCQkKKwkJQVJHUihxdWFsKSA9IHBkZXYtPnZjb21wcmVzc2lvbjsKKwkJQVJHX09VVChxdWFsKQorCQlicmVhazsKKwl9CisJCisJY2FzZSBWSURJT0NQV0NQUk9CRToKKwl7CisJCUFSR19ERUYoc3RydWN0IHB3Y19wcm9iZSwgcHJvYmUpCisJCQorCQlzdHJjcHkoQVJHUihwcm9iZSkubmFtZSwgcGRldi0+dmRldi0+bmFtZSk7CisJCUFSR1IocHJvYmUpLnR5cGUgPSBwZGV2LT50eXBlOworCQlBUkdfT1VUKHByb2JlKQorCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ1BXQ0dTRVJJQUw6CisJeworCQlBUkdfREVGKHN0cnVjdCBwd2Nfc2VyaWFsLCBzZXJpYWwpCisJCQorCQlzdHJjcHkoQVJHUihzZXJpYWwpLnNlcmlhbCwgcGRldi0+c2VyaWFsKTsKKwkJQVJHX09VVChzZXJpYWwpCisJCWJyZWFrOworCX0KKworCWNhc2UgVklESU9DUFdDU0FHQzoKKwl7CisJCUFSR19ERUYoaW50LCBhZ2MpCisKKwkJQVJHX0lOKGFnYykKKwkJaWYgKHB3Y19zZXRfYWdjKHBkZXYsIEFSR1IoYWdjKSA8IDAgPyAxIDogMCwgQVJHUihhZ2MpKSkKKwkJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwkKKwljYXNlIFZJRElPQ1BXQ0dBR0M6CisJeworCQlBUkdfREVGKGludCwgYWdjKQorCQkKKwkJaWYgKHB3Y19nZXRfYWdjKHBkZXYsIEFSR0EoYWdjKSkpCisJCQlyZXQgPSAtRUlOVkFMOworCQlBUkdfT1VUKGFnYykKKwkJYnJlYWs7CisJfQorCQorCWNhc2UgVklESU9DUFdDU1NIVVRURVI6CisJeworCQlBUkdfREVGKGludCwgc2h1dHRlcl9zcGVlZCkKKworCQlBUkdfSU4oc2h1dHRlcl9zcGVlZCkKKwkJcmV0ID0gcHdjX3NldF9zaHV0dGVyX3NwZWVkKHBkZXYsIEFSR1Ioc2h1dHRlcl9zcGVlZCkgPCAwID8gMSA6IDAsIEFSR1Ioc2h1dHRlcl9zcGVlZCkpOworCQlicmVhazsKKwl9CisJCisgICAgICAgIGNhc2UgVklESU9DUFdDU0FXQjoKKwl7CisJCUFSR19ERUYoc3RydWN0IHB3Y193aGl0ZWJhbGFuY2UsIHdiKQorCQkKKwkJQVJHX0lOKHdiKQorCQlyZXQgPSBwd2Nfc2V0X2F3YihwZGV2LCBBUkdSKHdiKS5tb2RlKTsKKwkJaWYgKHJldCA+PSAwICYmIEFSR1Iod2IpLm1vZGUgPT0gUFdDX1dCX01BTlVBTCkgeworCQkJcHdjX3NldF9yZWRfZ2FpbihwZGV2LCBBUkdSKHdiKS5tYW51YWxfcmVkKTsKKwkJCXB3Y19zZXRfYmx1ZV9nYWluKHBkZXYsIEFSR1Iod2IpLm1hbnVhbF9ibHVlKTsKKwkJfQorCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ1BXQ0dBV0I6CisJeworCQlBUkdfREVGKHN0cnVjdCBwd2Nfd2hpdGViYWxhbmNlLCB3YikKKworCQltZW1zZXQoQVJHQSh3YiksIDAsIHNpemVvZihzdHJ1Y3QgcHdjX3doaXRlYmFsYW5jZSkpOworCQlBUkdSKHdiKS5tb2RlID0gcHdjX2dldF9hd2IocGRldik7CisJCWlmIChBUkdSKHdiKS5tb2RlIDwgMCkKKwkJCXJldCA9IC1FSU5WQUw7CisJCWVsc2UgeworCQkJaWYgKEFSR1Iod2IpLm1vZGUgPT0gUFdDX1dCX01BTlVBTCkgeworCQkJCXJldCA9IHB3Y19nZXRfcmVkX2dhaW4ocGRldiwgJkFSR1Iod2IpLm1hbnVhbF9yZWQpOworCQkJCWlmIChyZXQgPCAwKQorCQkJCQlicmVhazsKKwkJCQlyZXQgPSBwd2NfZ2V0X2JsdWVfZ2FpbihwZGV2LCAmQVJHUih3YikubWFudWFsX2JsdWUpOworCQkJCWlmIChyZXQgPCAwKQorCQkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChBUkdSKHdiKS5tb2RlID09IFBXQ19XQl9BVVRPKSB7CisJCQkJcmV0ID0gcHdjX3JlYWRfcmVkX2dhaW4ocGRldiwgJkFSR1Iod2IpLnJlYWRfcmVkKTsKKwkJCQlpZiAocmV0IDwgMCkKKwkJCQkJYnJlYWs7CisgCQkJCXJldCA9cHdjX3JlYWRfYmx1ZV9nYWluKHBkZXYsICZBUkdSKHdiKS5yZWFkX2JsdWUpOworIAkJCQlpZiAocmV0IDwgMCkKKyAJCQkJCWJyZWFrOworCQkJfQorCQl9CisJCUFSR19PVVQod2IpCisJCWJyZWFrOworCX0KKwkKKwljYXNlIFZJRElPQ1BXQ1NBV0JTUEVFRDoKKwl7CisJCUFSR19ERUYoc3RydWN0IHB3Y193Yl9zcGVlZCwgd2JzKQorCQkKKwkJaWYgKEFSR1Iod2JzKS5jb250cm9sX3NwZWVkID4gMCkgeworCQkJcmV0ID0gcHdjX3NldF93Yl9zcGVlZChwZGV2LCBBUkdSKHdicykuY29udHJvbF9zcGVlZCk7CisJCX0KKwkJaWYgKEFSR1Iod2JzKS5jb250cm9sX2RlbGF5ID4gMCkgeworCQkJcmV0ID0gcHdjX3NldF93Yl9kZWxheShwZGV2LCBBUkdSKHdicykuY29udHJvbF9kZWxheSk7CisJCX0KKwkJYnJlYWs7CisJfQorCQorCWNhc2UgVklESU9DUFdDR0FXQlNQRUVEOgorCXsKKwkJQVJHX0RFRihzdHJ1Y3QgcHdjX3diX3NwZWVkLCB3YnMpCisJCQorCQlyZXQgPSBwd2NfZ2V0X3diX3NwZWVkKHBkZXYsICZBUkdSKHdicykuY29udHJvbF9zcGVlZCk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisJCXJldCA9IHB3Y19nZXRfd2JfZGVsYXkocGRldiwgJkFSR1Iod2JzKS5jb250cm9sX2RlbGF5KTsKKwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKKwkJQVJHX09VVCh3YnMpCisJCWJyZWFrOworCX0KKworICAgICAgICBjYXNlIFZJRElPQ1BXQ1NMRUQ6CisJeworCQlBUkdfREVGKHN0cnVjdCBwd2NfbGVkcywgbGVkcykKKworCQlBUkdfSU4obGVkcykKKwkJcmV0ID0gcHdjX3NldF9sZWRzKHBkZXYsIEFSR1IobGVkcykubGVkX29uLCBBUkdSKGxlZHMpLmxlZF9vZmYpOworCSAgICAJYnJlYWs7CisJfQorCisKKwljYXNlIFZJRElPQ1BXQ0dMRUQ6CisJeworCQlBUkdfREVGKHN0cnVjdCBwd2NfbGVkcywgbGVkcykKKwkJCisJCXJldCA9IHB3Y19nZXRfbGVkcyhwZGV2LCAmQVJHUihsZWRzKS5sZWRfb24sICZBUkdSKGxlZHMpLmxlZF9vZmYpOworCQlBUkdfT1VUKGxlZHMpCisJCWJyZWFrOworCX0KKworCWNhc2UgVklESU9DUFdDU0NPTlRPVVI6CisJeworCQlBUkdfREVGKGludCwgY29udG91cikKKworCQlBUkdfSU4oY29udG91cikKKwkJcmV0ID0gcHdjX3NldF9jb250b3VyKHBkZXYsIEFSR1IoY29udG91cikpOworCQlicmVhazsKKwl9CisJCQkKKwljYXNlIFZJRElPQ1BXQ0dDT05UT1VSOgorCXsKKwkJQVJHX0RFRihpbnQsIGNvbnRvdXIpCisJCQorCQlyZXQgPSBwd2NfZ2V0X2NvbnRvdXIocGRldiwgQVJHQShjb250b3VyKSk7CisJCUFSR19PVVQoY29udG91cikKKwkJYnJlYWs7CisJfQorCQorCWNhc2UgVklESU9DUFdDU0JBQ0tMSUdIVDoKKwl7CisJCUFSR19ERUYoaW50LCBiYWNrbGlnaHQpCisJCQorCQlBUkdfSU4oYmFja2xpZ2h0KQorCQlyZXQgPSBwd2Nfc2V0X2JhY2tsaWdodChwZGV2LCBBUkdSKGJhY2tsaWdodCkpOworCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ1BXQ0dCQUNLTElHSFQ6CisJeworCQlBUkdfREVGKGludCwgYmFja2xpZ2h0KQorCQkKKwkJcmV0ID0gcHdjX2dldF9iYWNrbGlnaHQocGRldiwgQVJHQShiYWNrbGlnaHQpKTsKKwkJQVJHX09VVChiYWNrbGlnaHQpCisJCWJyZWFrOworCX0KKwkKKwljYXNlIFZJRElPQ1BXQ1NGTElDS0VSOgorCXsKKwkJQVJHX0RFRihpbnQsIGZsaWNrZXIpCisJCQorCQlBUkdfSU4oZmxpY2tlcikKKwkJcmV0ID0gcHdjX3NldF9mbGlja2VyKHBkZXYsIEFSR1IoZmxpY2tlcikpOworCQlicmVhazsKKwl9CisKKwljYXNlIFZJRElPQ1BXQ0dGTElDS0VSOgorCXsKKwkJQVJHX0RFRihpbnQsIGZsaWNrZXIpCisJCQorCQlyZXQgPSBwd2NfZ2V0X2ZsaWNrZXIocGRldiwgQVJHQShmbGlja2VyKSk7CisJCUFSR19PVVQoZmxpY2tlcikKKwkJYnJlYWs7CisJfQorCQorCWNhc2UgVklESU9DUFdDU0RZTk5PSVNFOgorCXsKKwkJQVJHX0RFRihpbnQsIGR5bm5vaXNlKQorCQkKKwkJQVJHX0lOKGR5bm5vaXNlKQorCQlyZXQgPSBwd2Nfc2V0X2R5bmFtaWNfbm9pc2UocGRldiwgQVJHUihkeW5ub2lzZSkpOworCQlicmVhazsKKwl9CisJCisJY2FzZSBWSURJT0NQV0NHRFlOTk9JU0U6CisJeworCQlBUkdfREVGKGludCwgZHlubm9pc2UpCisKKwkJcmV0ID0gcHdjX2dldF9keW5hbWljX25vaXNlKHBkZXYsIEFSR0EoZHlubm9pc2UpKTsKKwkJQVJHX09VVChkeW5ub2lzZSk7CisJCWJyZWFrOworCX0KKworCWNhc2UgVklESU9DUFdDR1JFQUxTSVpFOgorCXsKKwkJQVJHX0RFRihzdHJ1Y3QgcHdjX2ltYWdlc2l6ZSwgc2l6ZSkKKwkJCisJCUFSR1Ioc2l6ZSkud2lkdGggPSBwZGV2LT5pbWFnZS54OworCQlBUkdSKHNpemUpLmhlaWdodCA9IHBkZXYtPmltYWdlLnk7CisJCUFSR19PVVQoc2l6ZSkKKwkJYnJlYWs7CisgCX0KKyAJCisgCWNhc2UgVklESU9DUFdDTVBUUkVTRVQ6CisgCXsKKyAJCWlmIChwZGV2LT5mZWF0dXJlcyAmIEZFQVRVUkVfTU9UT1JfUEFOVElMVCkKKyAJCXsKKwkgCQlBUkdfREVGKGludCwgZmxhZ3MpCisKKyAJCQlBUkdfSU4oZmxhZ3MpCisJCQlyZXQgPSBwd2NfbXB0X3Jlc2V0KHBkZXYsIEFSR1IoZmxhZ3MpKTsKKyAJCQlpZiAocmV0ID49IDApCisgCQkJeworIAkJCQlwZGV2LT5wYW5fYW5nbGUgPSAwOworIAkJCQlwZGV2LT50aWx0X2FuZ2xlID0gMDsKKyAJCQl9CisgCQl9CisgCQllbHNlCisgCQl7CisgCQkJcmV0ID0gLUVOWElPOworIAkJfQorIAkJYnJlYWs7CQkKKyAJfQorIAkKKyAJY2FzZSBWSURJT0NQV0NNUFRHUkFOR0U6CisgCXsKKyAJCWlmIChwZGV2LT5mZWF0dXJlcyAmIEZFQVRVUkVfTU9UT1JfUEFOVElMVCkKKyAJCXsKKyAJCQlBUkdfREVGKHN0cnVjdCBwd2NfbXB0X3JhbmdlLCByYW5nZSkKKyAJCQkKKyAJCQlBUkdSKHJhbmdlKSA9IHBkZXYtPmFuZ2xlX3JhbmdlOworIAkJCUFSR19PVVQocmFuZ2UpCisgCQl9CisgCQllbHNlCisgCQl7CQorIAkJCXJldCA9IC1FTlhJTzsKKyAJCX0KKyAJCWJyZWFrOworIAl9CisgCQorIAljYXNlIFZJRElPQ1BXQ01QVFNBTkdMRToKKyAJeworIAkJaW50IG5ld19wYW4sIG5ld190aWx0OworIAkJCisgCQlpZiAocGRldi0+ZmVhdHVyZXMgJiBGRUFUVVJFX01PVE9SX1BBTlRJTFQpCisgCQl7CisJIAkJQVJHX0RFRihzdHJ1Y3QgcHdjX21wdF9hbmdsZXMsIGFuZ2xlcykKKworCSAJCUFSR19JTihhbmdsZXMpCisJCQkvKiBUaGUgY2FtZXJhIGNhbiBvbmx5IHNldCByZWxhdGl2ZSBhbmdsZXMsIHNvCisJCQkgICBkbyBzb21lIGNhbGN1bGF0aW9ucyB3aGVuIGdldHRpbmcgYW4gYWJzb2x1dGUgYW5nbGUgLgorCQkJICovCisJCQlpZiAoQVJHUihhbmdsZXMpLmFic29sdXRlKQorCQkJeworIAkJCQluZXdfcGFuICA9IEFSR1IoYW5nbGVzKS5wYW47IAorIAkJCQluZXdfdGlsdCA9IEFSR1IoYW5nbGVzKS50aWx0OworIAkJCX0KKyAJCQllbHNlCisgCQkJeworIAkJCQluZXdfcGFuICA9IHBkZXYtPnBhbl9hbmdsZSAgKyBBUkdSKGFuZ2xlcykucGFuOworIAkJCQluZXdfdGlsdCA9IHBkZXYtPnRpbHRfYW5nbGUgKyBBUkdSKGFuZ2xlcykudGlsdDsKKwkJCX0KKwkJCS8qIGNoZWNrIGFic29sdXRlIHJhbmdlcyAqLworCQkJaWYgKG5ld19wYW4gIDwgcGRldi0+YW5nbGVfcmFuZ2UucGFuX21pbiAgfHwKKwkJCSAgICBuZXdfcGFuICA+IHBkZXYtPmFuZ2xlX3JhbmdlLnBhbl9tYXggIHx8CisJCQkgICAgbmV3X3RpbHQgPCBwZGV2LT5hbmdsZV9yYW5nZS50aWx0X21pbiB8fAorCQkJICAgIG5ld190aWx0ID4gcGRldi0+YW5nbGVfcmFuZ2UudGlsdF9tYXgpCisJCQl7CisJCQkJcmV0ID0gLUVSQU5HRTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBnbyB0byByZWxhdGl2ZSByYW5nZSwgY2hlY2sgYWdhaW4gKi8KKwkJCQluZXdfcGFuICAtPSBwZGV2LT5wYW5fYW5nbGU7CisJCQkJbmV3X3RpbHQgLT0gcGRldi0+dGlsdF9hbmdsZTsKKwkJCQkvKiBhbmdsZXMgYXJlIHNwZWNpZmllZCBpbiBkZWdyZWVzICogMTAwLCB0aHVzIHRoZSBsaW1pdCA9IDM2MDAwICovCisJCQkJaWYgKG5ld19wYW4gPCAtMzYwMDAgfHwgbmV3X3BhbiA+IDM2MDAwIHx8IG5ld190aWx0IDwgLTM2MDAwIHx8IG5ld190aWx0ID4gMzYwMDApCisJCQkJCXJldCA9IC1FUkFOR0U7CisJCQl9CisJCQlpZiAocmV0ID09IDApIC8qIG5vIGVycm9ycyBzbyBmYXIgKi8KKwkJCXsKKwkJCQlyZXQgPSBwd2NfbXB0X3NldF9hbmdsZShwZGV2LCBuZXdfcGFuLCBuZXdfdGlsdCk7CisJCQkJaWYgKHJldCA+PSAwKQorCQkJCXsKKwkJCQkJcGRldi0+cGFuX2FuZ2xlICArPSBuZXdfcGFuOworCQkJCQlwZGV2LT50aWx0X2FuZ2xlICs9IG5ld190aWx0OworCQkJCX0KKwkJCQlpZiAocmV0ID09IC1FUElQRSkgLyogc3RhbGwgLT4gb3V0IG9mIHJhbmdlICovCisJCQkJCXJldCA9IC1FUkFOR0U7CQkJCQorCQkJfQorIAkJfQorIAkJZWxzZQorIAkJeworIAkJCXJldCA9IC1FTlhJTzsKKyAJCX0KKyAJCWJyZWFrOworIAl9CisKKyAJY2FzZSBWSURJT0NQV0NNUFRHQU5HTEU6CisgCXsKKyAJCQorIAkJaWYgKHBkZXYtPmZlYXR1cmVzICYgRkVBVFVSRV9NT1RPUl9QQU5USUxUKQorIAkJeworCSAJCUFSR19ERUYoc3RydWN0IHB3Y19tcHRfYW5nbGVzLCBhbmdsZXMpCisKKyAJCQlBUkdSKGFuZ2xlcykuYWJzb2x1dGUgPSAxOworIAkJCUFSR1IoYW5nbGVzKS5wYW4gID0gcGRldi0+cGFuX2FuZ2xlOworIAkJCUFSR1IoYW5nbGVzKS50aWx0ID0gcGRldi0+dGlsdF9hbmdsZTsKKyAJCQlBUkdfT1VUKGFuZ2xlcykKKyAJCX0KKyAJCWVsc2UKKyAJCXsKKyAJCQlyZXQgPSAtRU5YSU87CisgCQl9CisgCQlicmVhazsKKyAJfQorIAorIAljYXNlIFZJRElPQ1BXQ01QVFNUQVRVUzoKKyAJeworIAkJaWYgKHBkZXYtPmZlYXR1cmVzICYgRkVBVFVSRV9NT1RPUl9QQU5USUxUKQorIAkJeworIAkJCUFSR19ERUYoc3RydWN0IHB3Y19tcHRfc3RhdHVzLCBzdGF0dXMpCisgCQkJCisgCQkJcmV0ID0gcHdjX21wdF9nZXRfc3RhdHVzKHBkZXYsIEFSR0Eoc3RhdHVzKSk7CisgCQkJQVJHX09VVChzdGF0dXMpCisgCQl9CisgCQllbHNlCisgCQl7CisgCQkJcmV0ID0gLUVOWElPOworIAkJfQorIAkJYnJlYWs7CisJfQorCisJY2FzZSBWSURJT0NQV0NHVklEQ01EOgorCXsKKwkJQVJHX0RFRihzdHJ1Y3QgcHdjX3ZpZGVvX2NvbW1hbmQsIGNtZCk7CisJCQorICAgICAgICAgICAgICAgIEFSR1IoY21kKS50eXBlID0gcGRldi0+dHlwZTsKKwkJQVJHUihjbWQpLnJlbGVhc2UgPSBwZGV2LT5yZWxlYXNlOworCQlBUkdSKGNtZCkuY29tbWFuZF9sZW4gPSBwZGV2LT5jbWRfbGVuOworCQltZW1jcHkoJkFSR1IoY21kKS5jb21tYW5kX2J1ZiwgcGRldi0+Y21kX2J1ZiwgcGRldi0+Y21kX2xlbik7CisJCUFSR1IoY21kKS5iYW5kbGVuZ3RoID0gcGRldi0+dmJhbmRsZW5ndGg7CisJCUFSR1IoY21kKS5mcmFtZV9zaXplID0gcGRldi0+ZnJhbWVfc2l6ZTsKKwkJQVJHX09VVChjbWQpCisJCWJyZWFrOworCX0KKyAgICAgICAvKgorCWNhc2UgVklESU9DUFdDR1ZJRFRBQkxFOgorCXsKKwkJQVJHX0RFRihzdHJ1Y3QgcHdjX3RhYmxlX2luaXRfYnVmZmVyLCB0YWJsZSk7CisJCUFSR1IodGFibGUpLmxlbiA9IHBkZXYtPmNtZF9sZW47CisJCW1lbWNweSgmQVJHUih0YWJsZSkuYnVmZmVyLCBwZGV2LT5kZWNvbXByZXNzX2RhdGEsIHBkZXYtPmRlY29tcHJlc3Nvci0+dGFibGVfc2l6ZSk7CisJCUFSR19PVVQodGFibGUpCisJCWJyZWFrOworCX0KKwkqLworCisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT0lPQ1RMQ01EOworCQlicmVhazsKKwl9CisJCisJaWYgKHJldCA+IDApCisJCXJldHVybiAwOworCXJldHVybiByZXQ7Cit9CisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWRlYzEuYyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtZGVjMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZDAzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWRlYzEuYwpAQCAtMCwwICsxLDQyIEBACisvKiBMaW51eCBkcml2ZXIgZm9yIFBoaWxpcHMgd2ViY2FtCisgICBEZWNvbXByZXNzaW9uIGZvciBjaGlwc2V0IHZlcnNpb24gMQorICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisgICBUaGUgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUKKyAgIE5lbW9zb2Z0IGJpbmFyeSBwd2N4IG1vZHVsZS4gQ2F2ZWF0IGVtcHRvci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisKKworI2luY2x1ZGUgInB3Yy1kZWMxLmgiCisKKwordm9pZCBwd2NfZGVjMV9pbml0KGludCB0eXBlLCBpbnQgcmVsZWFzZSwgdm9pZCAqYnVmZmVyLCB2b2lkICp0YWJsZSkKK3sKKworfQorCit2b2lkIHB3Y19kZWMxX2V4aXQodm9pZCkKK3sKKworCisKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1kZWMxLmggYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWRlYzEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2ZmZDljCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1kZWMxLmgKQEAgLTAsMCArMSwzNiBAQAorLyogTGludXggZHJpdmVyIGZvciBQaGlsaXBzIHdlYmNhbQorICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisgICBUaGUgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUKKyAgIE5lbW9zb2Z0IGJpbmFyeSBwd2N4IG1vZHVsZS4gQ2F2ZWF0IGVtcHRvci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisKKworI2lmbmRlZiBQV0NfREVDMV9ICisjZGVmaW5lIFBXQ19ERUMxX0gKKwordm9pZCBwd2NfZGVjMV9pbml0KGludCB0eXBlLCBpbnQgcmVsZWFzZSwgdm9pZCAqYnVmZmVyLCB2b2lkICpwcml2YXRlX2RhdGEpOwordm9pZCBwd2NfZGVjMV9leGl0KHZvaWQpOworCisjZW5kaWYKKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtZGVjMjMuYyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtZGVjMjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGZhM2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1kZWMyMy5jCkBAIC0wLDAgKzEsNjIzIEBACisvKiBMaW51eCBkcml2ZXIgZm9yIFBoaWxpcHMgd2ViY2FtCisgICBEZWNvbXByZXNzaW9uIGZvciBjaGlwc2V0IHZlcnNpb24gMiBldCAzCisgICAoQykgMjAwNCAgICAgIEx1YyBTYWlsbGFyZCAobHVjQHNhaWxsYXJkLm9yZykKKworICAgTk9URTogdGhpcyB2ZXJzaW9uIG9mIHB3YyBpcyBhbiB1bm9mZmljaWFsIChtb2RpZmllZCkgcmVsZWFzZSBvZiBwd2MgJiBwY3d4CisgICBkcml2ZXIgYW5kIHRodXMgbWF5IGhhdmUgYnVncyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgb3JpZ2luYWwgdmVyc2lvbi4KKyAgIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIGFuZCBzdXBwb3J0IHJlcXVlc3RzIHRvIDxsdWNAc2FpbGxhcmQub3JnPi4KKyAgIFRoZSBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBieSByZXZlcnNlLWVuZ2luZWVyaW5nIHRoZQorICAgTmVtb3NvZnQgYmluYXJ5IHB3Y3ggbW9kdWxlLiBDYXZlYXQgZW1wdG9yLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisKKyNpbmNsdWRlICJwd2MtdGltb24uaCIKKyNpbmNsdWRlICJwd2Mta2lhcmEuaCIKKyNpbmNsdWRlICJwd2MtZGVjMjMuaCIKKyNpbmNsdWRlICJwd2MtaW9jdGwuaCIKKworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisvKioqKgorICoKKyAqCisgKgorICovCisKKworc3RhdGljIHZvaWQgZmlsbF90YWJsZV9hMDAwKHVuc2lnbmVkIGludCAqcCkKK3sKKyAgc3RhdGljIHVuc2lnbmVkIGludCBpbml0aWFsX3ZhbHVlc1sxMl0gPSB7CisgICAgIDB4RkZBRDlCMDAsIDB4RkZEREVFMDAsIDB4MDAyMjEyMDAsIDB4MDA1MjY1MDAsCisgICAgIDB4RkZDMjFFMDAsIDB4MDAzREUyMDAsIDB4RkY5MjRCODAsIDB4RkZEMkEzMDAsCisgICAgIDB4MDAyRDVEMDAsIDB4MDA2REI0ODAsIDB4RkZFRDNFMDAsIDB4MDAxMkMyMDAKKyAgfTsKKyAgc3RhdGljIHVuc2lnbmVkIGludCB2YWx1ZXNfZGVyaXZhdGVkWzEyXSA9IHsKKyAgICAgMHgwMDAwQTRDQSwgMHgwMDAwNDQyNCwgMHhGRkZGQkJEQywgMHhGRkZGNUIzNiwKKyAgICAgMHgwMDAwN0JDNCwgMHhGRkZGODQzQywgMHgwMDAwREI2OSwgMHgwMDAwNUFCQSwKKyAgICAgMHhGRkZGQTU0NiwgMHhGRkZGMjQ5NywgMHgwMDAwMjU4NCwgMHhGRkZGREE3QworICB9OworICB1bnNpZ25lZCBpbnQgdGVtcF92YWx1ZXNbMTJdOworICBpbnQgaSxqOworCisgIG1lbWNweSh0ZW1wX3ZhbHVlcyxpbml0aWFsX3ZhbHVlcyxzaXplb2YoaW5pdGlhbF92YWx1ZXMpKTsKKyAgZm9yIChpPTA7aTwyNTY7aSsrKQorICAgeworICAgICBmb3IgKGo9MDtqPDEyO2orKykKKyAgICAgIHsKKwkqcCsrID0gdGVtcF92YWx1ZXNbal07CisJdGVtcF92YWx1ZXNbal0gKz0gdmFsdWVzX2Rlcml2YXRlZFtqXTsKKyAgICAgIH0KKyAgIH0KK30KKworc3RhdGljIHZvaWQgZmlsbF90YWJsZV9kMDAwKHVuc2lnbmVkIGNoYXIgKnApCit7CisgIGludCBiaXQsYnl0ZTsKKworICBmb3IgKGJpdD0wOyBiaXQ8ODsgYml0KyspCisgICB7CisgICAgIHVuc2lnbmVkIGNoYXIgYml0cG93ZXIgPSAxPDxiaXQ7CisgICAgIHVuc2lnbmVkIGNoYXIgbWFzayA9IGJpdHBvd2VyLTE7CisgICAgIGZvciAoYnl0ZT0wOyBieXRlPDI1NjsgYnl0ZSsrKQorICAgICAgeworCWlmIChieXRlICYgYml0cG93ZXIpCisJICAqcCsrID0gLShieXRlICYgbWFzayk7CisJZWxzZQorCSAgKnArKyA9IChieXRlICYgbWFzayk7CisgICAgICB9CisgICB9Cit9CisKKy8qCisgKgorICogS2lhcmE6IDAgPD0gdmVyIDw9IDcKKyAqIFRpbW9uOiAwIDw9IHZlciA8PSAxNQorICoKKyAqLworc3RhdGljIHZvaWQgZmlsbF90YWJsZV9jb2xvcih1bnNpZ25lZCBpbnQgdmVyc2lvbiwgY29uc3QgdW5zaWduZWQgaW50ICpyb210YWJsZSwgCisgICAgdW5zaWduZWQgY2hhciAqcDAwMDQsIAorICAgIHVuc2lnbmVkIGNoYXIgKnA4MDA0KQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgKnRhYmxlOworICB1bnNpZ25lZCBjaGFyICpwMCwgKnA4OworICBpbnQgaSxqLGs7CisgIGludCBkbCxiaXQscHc7CisKKyAgcm9tdGFibGUgKz0gdmVyc2lvbioyNTY7CisKKyAgZm9yIChpPTA7IGk8MjsgaSsrKQorICAgeworICAgICB0YWJsZSA9IHJvbXRhYmxlICsgaSoxMjg7CisKKyAgICAgZm9yIChkbD0wOyBkbDwxNjsgZGwrKykKKyAgICAgIHsKKwlwMCA9IHAwMDA0ICsgKGk8PDE0KSArIChkbDw8MTApOworCXA4ID0gcDgwMDQgKyAoaTw8MTIpICsgKGRsPDw4KTsKKworCWZvciAoaj0wOyBqPDg7IGorKyAsIHRhYmxlKyssIHAwKz0xMjgpCisJIHsKKwkgICBmb3IgKGs9MDsgazwxNjsgaysrKQorCSAgICB7CisJICAgICAgaWYgKGs9PTApCisJCWJpdD0xOworCSAgICAgIGVsc2UgaWYgKGs+PTEgJiYgazwzKQorCQliaXQ9KHRhYmxlWzBdPj4xNSkmNzsKKwkgICAgICBlbHNlIGlmIChrPj0zICYmIGs8NikKKwkJYml0PSh0YWJsZVswXT4+MTIpJjc7CisJICAgICAgZWxzZSBpZiAoaz49NiAmJiBrPDEwKQorCQliaXQ9KHRhYmxlWzBdPj45KSY3OworCSAgICAgIGVsc2UgaWYgKGs+PTEwICYmIGs8MTMpCisJCWJpdD0odGFibGVbMF0+PjYpJjc7CisJICAgICAgZWxzZSBpZiAoaz49MTMgJiYgazwxNSkKKwkJYml0PSh0YWJsZVswXT4+MykmNzsKKwkgICAgICBlbHNlCisJCWJpdD0odGFibGVbMF0pJjc7CisJICAgICAgaWYgKGsgPT0gMCkKKwkJKih1bnNpZ25lZCBjaGFyICopcDgrKyA9IDg7CisJICAgICAgZWxzZQorCQkqKHVuc2lnbmVkIGNoYXIgKilwOCsrID0gaiAtIGJpdDsKKwkgICAgICAqKHVuc2lnbmVkIGNoYXIgKilwOCsrID0gYml0OworCisJICAgICAgcHcgPSAxPDxiaXQ7CisJICAgICAgcDBbaysweDAwXSA9ICgxKnB3KSAgKyAweDgwOworCSAgICAgIHAwW2srMHgxMF0gPSAoMipwdykgICsgMHg4MDsKKwkgICAgICBwMFtrKzB4MjBdID0gKDMqcHcpICArIDB4ODA7CisJICAgICAgcDBbaysweDMwXSA9ICg0KnB3KSAgKyAweDgwOworCSAgICAgIHAwW2srMHg0MF0gPSAoLXB3KSAgICsgMHg4MDsKKwkgICAgICBwMFtrKzB4NTBdID0gKDIqLXB3KSArIDB4ODA7CisJICAgICAgcDBbaysweDYwXSA9ICgzKi1wdykgKyAweDgwOworCSAgICAgIHAwW2srMHg3MF0gPSAoNCotcHcpICsgMHg4MDsKKwkgICAgfSAvKiBlbmQgb2YgZm9yIChrPTA7IGs8MTY7IGsrKywgcDgrKykgKi8KKwkgfSAvKiBlbmQgb2YgZm9yIChqPTA7IGo8ODsgaisrICwgdGFibGUrKykgKi8KKyAgICAgIH0gLyogZW5kIG9mIGZvciAoZGw9MDsgZGw8MTY7IGRsKyspICovCisgICB9IC8qIGVuZCBvZiBmb3IgKGk9MDsgaTwyOyBpKyspICovCit9CisKKy8qCisgKiBwcmVjaXNpb24gPSAocGRldi0+eHggKyBwZGV2LT55eSkKKyAqCisgKi8KK3N0YXRpYyB2b2lkIGZpbGxfdGFibGVfZGMwMF9kODAwKHVuc2lnbmVkIGludCBwcmVjaXNpb24sIHVuc2lnbmVkIGludCAqcGRjMDAsIHVuc2lnbmVkIGludCAqcGQ4MDApCit7CisgIGludCBpOworICB1bnNpZ25lZCBpbnQgb2Zmc2V0MSwgb2Zmc2V0MjsKKyAKKyAgZm9yKGk9MCxvZmZzZXQxPTB4NDAwMCwgb2Zmc2V0Mj0wOyBpPDI1NiA7IGkrKyxvZmZzZXQxKz0weDdCQzQsIG9mZnNldDIrPTB4N0JDNCkKKyAgIHsKKyAgICAgdW5zaWduZWQgaW50IG1zYiA9IG9mZnNldDEgPj4gMTU7CisKKyAgICAgaWYgKCBtc2IgPiAyNTUpCisgICAgICB7CisJaWYgKG1zYikKKwkgIG1zYj0wOworCWVsc2UKKwkgIG1zYj0yNTU7CisgICAgICB9CisKKyAgICAgKnBkYzAwKysgPSBtc2IgPDwgcHJlY2lzaW9uOworICAgICAqcGQ4MDArKyA9IG9mZnNldDI7CisgICB9CisKK30KKworLyoKKyAqIHN0cnVjdCB7CisgKiAgIHVuc2lnbmVkIGNoYXIgb3A7CSAgICAvLyBvcGVyYXRpb24gdG8gZXhlY3V0ZQorICogICB1bnNpZ25lZCBjaGFyIGJpdHM7ICAgIC8vIGJpdHMgdXNlIHRvIHBlcmZvcm0gb3BlcmF0aW9uCisgKiAgIHVuc2lnbmVkIGNoYXIgb2Zmc2V0MTsgLy8gb2Zmc2V0IHRvIGFkZCB0byBhY2Nlc3MgaW4gdGhlIHRhYmxlXzAwMDQgJSAxNgorICogICB1bnNpZ25lZCBjaGFyIG9mZnNldDI7IC8vIG9mZnNldCB0byBhZGQgdG8gYWNjZXNzIGluIHRoZSB0YWJsZV8wMDA0CisgKiB9CisgKgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRhYmxlX29wc1tdID0geworMHgwMiwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAzLDB4MDEsMHgwMCwgMHgwMCwweDA0LDB4MDEsMHgxMCwgMHgwMCwweDA2LDB4MDEsMHgzMCwKKzB4MDIsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMywweDAxLDB4NDAsIDB4MDAsMHgwNSwweDAxLDB4MjAsIDB4MDEsMHgwMCwweDAwLDB4MDAsCisweDAyLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDMsMHgwMSwweDAwLCAweDAwLDB4MDQsMHgwMSwweDUwLCAweDAwLDB4MDUsMHgwMiwweDAwLAorMHgwMiwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAzLDB4MDEsMHg0MCwgMHgwMCwweDA1LDB4MDMsMHgwMCwgMHgwMSwweDAwLDB4MDAsMHgwMCwKKzB4MDIsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMywweDAxLDB4MDAsIDB4MDAsMHgwNCwweDAxLDB4MTAsIDB4MDAsMHgwNiwweDAyLDB4MTAsCisweDAyLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDMsMHgwMSwweDQwLCAweDAwLDB4MDUsMHgwMSwweDYwLCAweDAxLDB4MDAsMHgwMCwweDAwLAorMHgwMiwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAzLDB4MDEsMHgwMCwgMHgwMCwweDA0LDB4MDEsMHg1MCwgMHgwMCwweDA1LDB4MDIsMHg0MCwKKzB4MDIsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMywweDAxLDB4NDAsIDB4MDAsMHgwNSwweDAzLDB4NDAsIDB4MDEsMHgwMCwweDAwLDB4MDAsCisweDAyLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDMsMHgwMSwweDAwLCAweDAwLDB4MDQsMHgwMSwweDEwLCAweDAwLDB4MDYsMHgwMSwweDcwLAorMHgwMiwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAzLDB4MDEsMHg0MCwgMHgwMCwweDA1LDB4MDEsMHgyMCwgMHgwMSwweDAwLDB4MDAsMHgwMCwKKzB4MDIsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMywweDAxLDB4MDAsIDB4MDAsMHgwNCwweDAxLDB4NTAsIDB4MDAsMHgwNSwweDAyLDB4MDAsCisweDAyLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDMsMHgwMSwweDQwLCAweDAwLDB4MDUsMHgwMywweDAwLCAweDAxLDB4MDAsMHgwMCwweDAwLAorMHgwMiwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAzLDB4MDEsMHgwMCwgMHgwMCwweDA0LDB4MDEsMHgxMCwgMHgwMCwweDA2LDB4MDIsMHg1MCwKKzB4MDIsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMywweDAxLDB4NDAsIDB4MDAsMHgwNSwweDAxLDB4NjAsIDB4MDEsMHgwMCwweDAwLDB4MDAsCisweDAyLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDMsMHgwMSwweDAwLCAweDAwLDB4MDQsMHgwMSwweDUwLCAweDAwLDB4MDUsMHgwMiwweDQwLAorMHgwMiwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAzLDB4MDEsMHg0MCwgMHgwMCwweDA1LDB4MDMsMHg0MCwgMHgwMSwweDAwLDB4MDAsMHgwMAorfTsKKworLyoKKyAqIFRPRE86IG11bHRpcGx5IGJ5IDQgYWxsIHZhbHVlcworICoKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBNdWxJZHhbMjU2XSA9IHsKKyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorIDAsIDEsIDIsIDMsIDAsIDEsIDIsIDMsIDAsIDEsIDIsIDMsIDAsIDEsIDIsIDMsCisgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMiwgMiwgMiwgMiwgMywgMywgMywgMywKKyA0LCA0LCA0LCA0LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA0LCA0LCA0LCA0LAorIDYsIDcsIDgsIDksIDcsMTAsMTEsIDgsIDgsMTEsMTAsIDcsIDksIDgsIDcsIDYsCisgNCwgNSwgNSwgNCwgNCwgNSwgNSwgNCwgNCwgNSwgNSwgNCwgNCwgNSwgNSwgNCwKKyAxLCAzLCAwLCAyLCAxLCAzLCAwLCAyLCAxLCAzLCAwLCAyLCAxLCAzLCAwLCAyLAorIDAsIDMsIDMsIDAsIDEsIDIsIDIsIDEsIDIsIDEsIDEsIDIsIDMsIDAsIDAsIDMsCisgMCwgMSwgMiwgMywgMywgMiwgMSwgMCwgMywgMiwgMSwgMCwgMCwgMSwgMiwgMywKKyAxLCAxLCAxLCAxLCAzLCAzLCAzLCAzLCAwLCAwLCAwLCAwLCAyLCAyLCAyLCAyLAorIDcsMTAsMTEsIDgsIDksIDgsIDcsIDYsIDYsIDcsIDgsIDksIDgsMTEsMTAsIDcsCisgNCwgNSwgNSwgNCwgNSwgNCwgNCwgNSwgNSwgNCwgNCwgNSwgNCwgNSwgNSwgNCwKKyA3LCA5LCA2LCA4LDEwLCA4LCA3LDExLDExLCA3LCA4LDEwLCA4LCA2LCA5LCA3LAorIDEsIDMsIDAsIDIsIDIsIDAsIDMsIDEsIDIsIDAsIDMsIDEsIDEsIDMsIDAsIDIsCisgMSwgMiwgMiwgMSwgMywgMCwgMCwgMywgMCwgMywgMywgMCwgMiwgMSwgMSwgMiwKKzEwLCA4LCA3LDExLCA4LCA2LCA5LCA3LCA3LCA5LCA2LCA4LDExLCA3LCA4LDEwCit9OworCisKKwordm9pZCBwd2NfZGVjMjNfaW5pdChpbnQgdHlwZSwgaW50IHJlbGVhc2UsIHVuc2lnbmVkIGNoYXIgKm1vZGUsIHZvaWQgKmRhdGEpCit7CisgIGludCBmbGFnczsKKyAgc3RydWN0IHB3Y19kZWMyM19wcml2YXRlICpwZGV2ID0gZGF0YTsKKyAgcmVsZWFzZSA9IHJlbGVhc2U7CisKKyAgc3dpdGNoICh0eXBlKQorICAgeworICAgIGNhc2UgNzIwOgorICAgIGNhc2UgNzMwOgorICAgIGNhc2UgNzQwOgorICAgIGNhc2UgNzUwOgorICAgICAgZmxhZ3MgPSBtb2RlWzJdJjB4MTg7CS8qIG91cjogZmxhZ3MgPSA4LCBtb2RlWzJdPT1lOCAqLworICAgICAgaWYgKGZsYWdzPT04KQorCXBkZXYtPnp6ID0gNzsKKyAgICAgIGVsc2UgaWYgKGZsYWdzPT0weDEwKQorCXBkZXYtPnp6ID0gODsKKyAgICAgIGVsc2UKKwlwZGV2LT56eiA9IDY7CisgICAgICBmbGFncyA9IG1vZGVbMl0+PjU7CS8qIG91cjogNyAqLworCisgICAgICBmaWxsX3RhYmxlX2NvbG9yKGZsYWdzLCAodW5zaWduZWQgaW50ICopS2lhcmFSb21UYWJsZSwgcGRldi0+dGFibGVfMDAwNCwgcGRldi0+dGFibGVfODAwNCk7CisgICAgICBicmVhazsKKworCisgICAgY2FzZSA2NzU6CisgICAgY2FzZSA2ODA6CisgICAgY2FzZSA2OTA6CisgICAgICBmbGFncyA9IG1vZGVbMl0mNjsKKyAgICAgIGlmIChmbGFncz09MikKKwlwZGV2LT56eiA9IDc7CisgICAgICBlbHNlIGlmIChmbGFncz09NCkKKwlwZGV2LT56eiA9IDg7CisgICAgICBlbHNlCisJcGRldi0+enogPSA2OworICAgICAgZmxhZ3MgPSBtb2RlWzJdPj4zOworCisgICAgICBmaWxsX3RhYmxlX2NvbG9yKGZsYWdzLCAodW5zaWduZWQgaW50ICopVGltb25Sb21UYWJsZSwgcGRldi0+dGFibGVfMDAwNCwgcGRldi0+dGFibGVfODAwNCk7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAvKiBOb3Qgc3VwcG9ydGVkICovCisgICAgICByZXR1cm47CisgICB9CisKKyAgLyogKiAqICogKiogKi8KKyAgcGRldi0+eHggPSA4IC0gcGRldi0+eno7CisgIHBkZXYtPnl5ID0gMTUgLSBwZGV2LT54eDsKKyAgcGRldi0+enptYXNrID0gMHhGRj4+cGRldi0+eHg7CisgIC8vcGRldi0+enptYXNrID0gKDFVPDxwZGV2LT56eiktMTsKKworCisgIGZpbGxfdGFibGVfZGMwMF9kODAwKHBkZXYtPnh4ICsgcGRldi0+eXksIHBkZXYtPnRhYmxlX2RjMDAsIHBkZXYtPnRhYmxlX2Q4MDApOworICBmaWxsX3RhYmxlX2EwMDAocGRldi0+dGFibGVfYTAwNCk7CisgIGZpbGxfdGFibGVfZDAwMChwZGV2LT50YWJsZV9kMDA0KTsKK30KKworCisvKgorICogVG8gbWFuYWdlIHRoZSBzdHJlYW0sIHdlIGtlZXAgaW4gYSAzMiBiaXRzIHZhcmlhYmxlcywKKyAqIHRoZSBuZXh0IGJpdHMgaW4gdGhlIHN0cmVhbS4gZmlsbF9yZXNlcnZvaXIoKSBhZGQgdG8KKyAqIHRoZSByZXNlcnZvaXIgYXQgbGVhc3Qgd2FudGVkIG5iaXRzLgorICoKKyAqCisgKi8KKyNkZWZpbmUgZmlsbF9uYml0cyhyZXNlcnZvaXIsbmJpdHNfaW5fcmVzZXJ2b2lyLHN0cmVhbSxuYml0c193YW50ZWQpIGRvIHsgXAorICAgd2hpbGUgKG5iaXRzX2luX3Jlc2Vydm9pcjxuYml0c193YW50ZWQpIFwKKyAgICB7IFwKKyAgICAgIHJlc2Vydm9pciB8PSAoKihzdHJlYW0pKyspIDw8IG5iaXRzX2luX3Jlc2Vydm9pcjsgXAorICAgICAgbmJpdHNfaW5fcmVzZXJ2b2lyKz04OyBcCisgICAgfSBcCit9ICB3aGlsZSgwKTsKKworI2RlZmluZSBnZXRfbmJpdHMocmVzZXJ2b2lyLG5iaXRzX2luX3Jlc2Vydm9pcixzdHJlYW0sbmJpdHNfd2FudGVkLHJlc3VsdCkgZG8geyBcCisgICBmaWxsX25iaXRzKHJlc2Vydm9pcixuYml0c19pbl9yZXNlcnZvaXIsc3RyZWFtLG5iaXRzX3dhbnRlZCk7IFwKKyAgIHJlc3VsdCA9IChyZXNlcnZvaXIpICYgKCgxVTw8bmJpdHNfd2FudGVkKS0xKTsgXAorICAgcmVzZXJ2b2lyID4+PSBuYml0c193YW50ZWQ7IFwKKyAgIG5iaXRzX2luX3Jlc2Vydm9pciAtPSBuYml0c193YW50ZWQ7IFwKK30gIHdoaWxlKDApOworCisKKworc3RhdGljIHZvaWQgRGVjb21wcmVzc0JhbmQyMyhjb25zdCBzdHJ1Y3QgcHdjX2RlYzIzX3ByaXZhdGUgKnBkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJhd3l1diwKKwkJCSAgICAgdW5zaWduZWQgY2hhciAqcGxhbmFyX3ksCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgKnBsYW5hcl91LAorCQkJICAgICB1bnNpZ25lZCBjaGFyICpwbGFuYXJfdiwKKwkJCSAgICAgdW5zaWduZWQgaW50IGltYWdlX3gsCQkvKiBha2EgbnVtYmVyIG9mIHBpeGVscyB3YW50ZWQgPz8/ICovCisJCQkgICAgIHVuc2lnbmVkIGludCBwaXhlbHNfcGVyX2xpbmUsCS8qIGFrYSBudW1iZXIgb2YgcGl4ZWxzIHBlciBsaW5lICovCisJCQkgICAgIGludCBmbGFncykKK3sKKworCisgIHVuc2lnbmVkIGludCByZXNlcnZvaXIsIG5iaXRzX2luX3Jlc2Vydm9pcjsKKyAgaW50IGZpcnN0XzRfYml0czsKKyAgdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9jaGFubmVsOworICBpbnQgbGluZV9zaXplOwkvKiBzaXplIG9mIHRoZSBsaW5lICg0WStVK1YpICovCisgIGludCBwYXNzZXM7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0YWJsZTAwMDQsICpwdGFibGU4MDA0OworCisgIGludCBldmVuX2xpbmU7CisgIHVuc2lnbmVkIGludCB0ZW1wX2NvbG9yc1sxNl07CisgIGludCBuYmxvY2tzOworCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0cmVhbTsKKyAgdW5zaWduZWQgY2hhciAqZGVzdF95LCAqZGVzdF91PU5VTEwsICpkZXN0X3Y9TlVMTDsKKyAgdW5zaWduZWQgaW50IG9mZnNldF90b19wbGFuZV91LCBvZmZzZXRfdG9fcGxhbmVfdjsKKworICBpbnQgaTsKKworCisgIHJlc2Vydm9pciA9IDA7CisgIG5iaXRzX2luX3Jlc2Vydm9pciA9IDA7CisgIHN0cmVhbSA9IHJhd3l1disxOwkvKiBUaGUgZmlyc3QgYnl0ZSBvZiB0aGUgc3RyZWFtIGlzIHNraXBwZWQgKi8KKyAgZXZlbl9saW5lID0gMTsKKworICBnZXRfbmJpdHMocmVzZXJ2b2lyLG5iaXRzX2luX3Jlc2Vydm9pcixzdHJlYW0sNCxmaXJzdF80X2JpdHMpOworCisgIGxpbmVfc2l6ZSA9IHBpeGVsc19wZXJfbGluZSozOworCisgIGZvciAocGFzc2VzPTA7cGFzc2VzPDI7cGFzc2VzKyspCisgICB7CisgICAgIGlmIChwYXNzZXM9PTApCisgICAgICB7CisJYnl0ZXNfcGVyX2NoYW5uZWwgPSBwaXhlbHNfcGVyX2xpbmU7CisJZGVzdF95ID0gcGxhbmFyX3k7CisJbmJsb2NrcyA9IGltYWdlX3gvNDsKKyAgICAgIH0KKyAgICAgZWxzZQorICAgICAgeworCS8qIEZvcm1hdCBwbGFuYXI6IEFsbCBZLCB0aGVuIGFsbCBVLCB0aGVuIGFsbCBWICovCisJYnl0ZXNfcGVyX2NoYW5uZWwgPSBwaXhlbHNfcGVyX2xpbmUvMjsKKwlkZXN0X3UgPSBwbGFuYXJfdTsKKwlkZXN0X3YgPSBwbGFuYXJfdjsKKwlkZXN0X3kgPSBkZXN0X3U7CisJbmJsb2NrcyA9IGltYWdlX3gvODsKKyAgICAgIH0KKworICAgICBvZmZzZXRfdG9fcGxhbmVfdSA9IGJ5dGVzX3Blcl9jaGFubmVsKjI7CisgICAgIG9mZnNldF90b19wbGFuZV92ID0gYnl0ZXNfcGVyX2NoYW5uZWwqMzsKKyAgICAgLyoKKyAgICAgcHJpbnRmKCJieXRlc19wZXJfY2hhbm5lbCA9ICVkXG4iLGJ5dGVzX3Blcl9jaGFubmVsKTsKKyAgICAgcHJpbnRmKCJvZmZzZXRfdG9fcGxhbmVfdSA9ICVkXG4iLG9mZnNldF90b19wbGFuZV91KTsKKyAgICAgcHJpbnRmKCJvZmZzZXRfdG9fcGxhbmVfdiA9ICVkXG4iLG9mZnNldF90b19wbGFuZV92KTsKKyAgICAgKi8KKworICAgICB3aGlsZSAobmJsb2Nrcy0tPjApCisgICAgICB7CisJdW5zaWduZWQgaW50IGdyYXlfaW5kZXg7CisKKwlmaWxsX25iaXRzKHJlc2Vydm9pcixuYml0c19pbl9yZXNlcnZvaXIsc3RyZWFtLDE2KTsKKwlncmF5X2luZGV4ID0gcmVzZXJ2b2lyICYgcGRldi0+enptYXNrOworCXJlc2Vydm9pciA+Pj0gcGRldi0+eno7CisJbmJpdHNfaW5fcmVzZXJ2b2lyIC09IHBkZXYtPnp6OworCisJZmlsbF9uYml0cyhyZXNlcnZvaXIsbmJpdHNfaW5fcmVzZXJ2b2lyLHN0cmVhbSwyKTsKKworCWlmICggKHJlc2Vydm9pciAmIDMpID09IDApCisJIHsKKwkgICByZXNlcnZvaXI+Pj0yOworCSAgIG5iaXRzX2luX3Jlc2Vydm9pci09MjsKKwkgICBmb3IgKGk9MDtpPDE2O2krKykKKwkgICAgIHRlbXBfY29sb3JzW2ldID0gcGRldi0+dGFibGVfZGMwMFtncmF5X2luZGV4XTsKKworCSB9CisJZWxzZQorCSB7CisJICAgdW5zaWduZWQgaW50IGNoYW5uZWxfdiwgb2Zmc2V0MTsKKworCSAgIC8qIHN3YXAgYml0IDAgYW5kIDIgb2Ygb2Zmc2V0X09SICovCisJICAgY2hhbm5lbF92ID0gKChyZXNlcnZvaXIgJiAxKSA8PCAyKSB8IChyZXNlcnZvaXIgJiAyKSB8ICgocmVzZXJ2b2lyICYgNCk+PjIpOworCSAgIHJlc2Vydm9pcj4+PTM7CisJICAgbmJpdHNfaW5fcmVzZXJ2b2lyLT0zOworCisJICAgZm9yIChpPTA7aTwxNjtpKyspCisJICAgICB0ZW1wX2NvbG9yc1tpXSA9IHBkZXYtPnRhYmxlX2Q4MDBbZ3JheV9pbmRleF07CisKKwkgICBwdGFibGUwMDA0ID0gcGRldi0+dGFibGVfMDAwNCArIChwYXNzZXMqMTYzODQpICsgKGZpcnN0XzRfYml0cyoxMDI0KSArIChjaGFubmVsX3YqMTI4KTsKKwkgICBwdGFibGU4MDA0ID0gcGRldi0+dGFibGVfODAwNCArIChwYXNzZXMqNDA5NikgICsgKGZpcnN0XzRfYml0cyoyNTYpICArIChjaGFubmVsX3YqMzIpOworCisJICAgb2Zmc2V0MSA9IDA7CisJICAgd2hpbGUoMSkgCisJICAgIHsKKwkgICAgICB1bnNpZ25lZCBpbnQgaW5kZXhfaW5fdGFibGVfb3BzLCBvcCwgcm93cz0wOworCSAgICAgIGZpbGxfbmJpdHMocmVzZXJ2b2lyLG5iaXRzX2luX3Jlc2Vydm9pcixzdHJlYW0sMTYpOworCisJICAgICAgLyogbW9kZSBpcyAwLDEgb3IgMiAqLworCSAgICAgIGluZGV4X2luX3RhYmxlX29wcyA9IChyZXNlcnZvaXImMHgzRik7CisJICAgICAgb3AgPSB0YWJsZV9vcHNbIGluZGV4X2luX3RhYmxlX29wcyo0IF07CisJICAgICAgaWYgKG9wID09IDIpCisJICAgICAgIHsKKwkJIHJlc2Vydm9pciA+Pj0gMjsKKwkJIG5iaXRzX2luX3Jlc2Vydm9pciAtPSAyOworCQkgYnJlYWs7CS8qIGV4aXQgdGhlIHdoaWxlKDEpICovCisJICAgICAgIH0KKwkgICAgICBpZiAob3AgPT0gMCkKKwkgICAgICAgeworCQkgdW5zaWduZWQgaW50IHNoaWZ0OworCisJCSBvZmZzZXQxID0gKG9mZnNldDEgKyB0YWJsZV9vcHNbaW5kZXhfaW5fdGFibGVfb3BzKjQrMl0pICYgMHgwRjsKKwkJIHNoaWZ0ID0gdGFibGVfb3BzWyBpbmRleF9pbl90YWJsZV9vcHMqNCsxIF07CisJCSByZXNlcnZvaXIgPj49IHNoaWZ0OworCQkgbmJpdHNfaW5fcmVzZXJ2b2lyIC09IHNoaWZ0OworCQkgcm93cyA9IHB0YWJsZTAwMDRbIG9mZnNldDEgKyB0YWJsZV9vcHNbaW5kZXhfaW5fdGFibGVfb3BzKjQrM10gXTsKKwkgICAgICAgfQorCSAgICAgIGlmIChvcCA9PSAxKQorCSAgICAgICB7CisJCSAgLyogMTBiaXRzIFsgeHh4eCB4eHh4IHl5eXkgMDAwIF0KKwkJICAgKiB5eXkgPT4gb2Zmc2V0IGluIHRoZSB0YWJsZTgwMDQKKwkJICAgKiB4eHggPT4gb2Zmc2V0IGluIHRoZSB0YWJsZWQwMDQKKwkJICAgKi8KKwkJIHVuc2lnbmVkIGludCBtYXNrLCBzaGlmdDsKKwkJIHVuc2lnbmVkIGludCBjb2wxLCByb3cxLCB0b3RhbF9iaXRzOworCisJCSBvZmZzZXQxID0gKG9mZnNldDEgKyAoKHJlc2Vydm9pcj4+MykmMHgwRikrMSkgJiAweDBGOworCisJCSBjb2wxID0gKHJlc2Vydm9pcj4+NykgJiAweEZGOworCQkgcm93MSA9IHB0YWJsZTgwMDQgWyBvZmZzZXQxKjIgXTsKKworCQkgLyogQml0IG1hc2sgdGFibGUgKi8KKwkJIG1hc2sgPSBwZGV2LT50YWJsZV9kMDA0WyAocm93MTw8OCkgKyBjb2wxIF07CisJCSBzaGlmdCA9IHB0YWJsZTgwMDQgWyBvZmZzZXQxKjIgKyAxXTsKKwkJIHJvd3MgPSAoKG1hc2sgPDwgc2hpZnQpICsgMHg4MCkgJiAweEZGOworCisJCSB0b3RhbF9iaXRzID0gcm93MSArIDg7CisJCSByZXNlcnZvaXIgPj49IHRvdGFsX2JpdHM7CisJCSBuYml0c19pbl9yZXNlcnZvaXIgLT0gdG90YWxfYml0czsKKwkgICAgICAgfQorCSAgICAgICB7CisJCSBjb25zdCB1bnNpZ25lZCBpbnQgKnRhYmxlX2EwMDQgPSBwZGV2LT50YWJsZV9hMDA0ICsgcm93cyoxMjsKKwkJIHVuc2lnbmVkIGludCAqcG9mZnNldCA9IE11bElkeCArIG9mZnNldDEqMTY7CS8qIDY0LzQgKGludCkgKi8KKwkJIGZvciAoaT0wO2k8MTY7aSsrKQorCQkgIHsKKwkJICAgIHRlbXBfY29sb3JzW2ldICs9IHRhYmxlX2EwMDRbICpwb2Zmc2V0IF07CisJCSAgICBwb2Zmc2V0Kys7CisJCSAgfQorCSAgICAgICB9CisJICAgfQorCSB9CisjZGVmaW5lIFVTRV9TSUdORURfSU5UX0ZPUl9DT0xPUgorI2lmZGVmIFVTRV9TSUdORURfSU5UX0ZPUl9DT0xPUgorIyAgZGVmaW5lIENMQU1QKHgpICgoeCk+MjU1PzI1NTooKHgpPDA/MDp4KSkKKyNlbHNlCisjICBkZWZpbmUgQ0xBTVAoeCkgKCh4KT4yNTU/MjU1OngpCisjZW5kaWYKKworCWlmIChwYXNzZXMgPT0gMCkKKwkgeworI2lmZGVmIFVTRV9TSUdORURfSU5UX0ZPUl9DT0xPUgorCSAgIGNvbnN0IGludCAqYyA9IHRlbXBfY29sb3JzOworI2Vsc2UKKwkgICBjb25zdCB1bnNpZ25lZCBpbnQgKmMgPSB0ZW1wX2NvbG9yczsKKyNlbmRpZgorCSAgIHVuc2lnbmVkIGNoYXIgKmQ7CisKKwkgICBkID0gZGVzdF95OworCSAgIGZvciAoaT0wO2k8NDtpKyssYysrKQorCSAgICAgKmQrKyA9IENMQU1QKCgqYykgPj4gcGRldi0+eXkpOworCisJICAgZCA9IGRlc3RfeSArIGJ5dGVzX3Blcl9jaGFubmVsOworCSAgIGZvciAoaT0wO2k8NDtpKyssYysrKQorCSAgICAgKmQrKyA9IENMQU1QKCgqYykgPj4gcGRldi0+eXkpOworCisJICAgZCA9IGRlc3RfeSArIG9mZnNldF90b19wbGFuZV91OworCSAgIGZvciAoaT0wO2k8NDtpKyssYysrKQorCSAgICAgKmQrKyA9IENMQU1QKCgqYykgPj4gcGRldi0+eXkpOworCisJICAgZCA9IGRlc3RfeSArIG9mZnNldF90b19wbGFuZV92OworCSAgIGZvciAoaT0wO2k8NDtpKyssYysrKQorCSAgICAgKmQrKyA9IENMQU1QKCgqYykgPj4gcGRldi0+eXkpOworCisJICAgZGVzdF95ICs9IDQ7CisJIH0KKwllbHNlIGlmIChwYXNzZXMgPT0gMSkKKwkgeworI2lmZGVmIFVTRV9TSUdORURfSU5UX0ZPUl9DT0xPUgorCSAgIGludCAqYzEgPSB0ZW1wX2NvbG9yczsKKwkgICBpbnQgKmMyID0gdGVtcF9jb2xvcnMrNDsKKyNlbHNlCisJICAgdW5zaWduZWQgaW50ICpjMSA9IHRlbXBfY29sb3JzOworCSAgIHVuc2lnbmVkIGludCAqYzIgPSB0ZW1wX2NvbG9ycys0OworI2VuZGlmCisJICAgdW5zaWduZWQgY2hhciAqZDsKKworCSAgIGQgPSBkZXN0X3k7CisJICAgZm9yIChpPTA7aTw0O2krKyxjMSsrLGMyKyspCisJICAgIHsKKwkgICAgICAqZCsrID0gQ0xBTVAoKCpjMSkgPj4gcGRldi0+eXkpOworCSAgICAgICpkKysgPSBDTEFNUCgoKmMyKSA+PiBwZGV2LT55eSk7CisJICAgIH0KKwkgICBjMSA9IHRlbXBfY29sb3JzKzEyOworCSAgIC8vYzIgPSB0ZW1wX2NvbG9ycys4OworCSAgIGQgPSBkZXN0X3kgKyBieXRlc19wZXJfY2hhbm5lbDsKKwkgICBmb3IgKGk9MDtpPDQ7aSsrLGMxKyssYzIrKykKKwkgICAgeworCSAgICAgICpkKysgPSBDTEFNUCgoKmMxKSA+PiBwZGV2LT55eSk7CisJICAgICAgKmQrKyA9IENMQU1QKCgqYzIpID4+IHBkZXYtPnl5KTsKKwkgICAgfQorCisJICAgaWYgKGV2ZW5fbGluZSkJLyogRWFjaCBsaW5lLCBzd2FwIHUvdiAqLworCSAgICB7CisJICAgICAgZXZlbl9saW5lPTA7CisJICAgICAgZGVzdF95ID0gZGVzdF92OworCSAgICAgIGRlc3RfdSArPSA4OworCSAgICB9CisJICAgZWxzZQorCSAgICB7CisJICAgICAgZXZlbl9saW5lPTE7CisJICAgICAgZGVzdF95ID0gZGVzdF91OworCSAgICAgIGRlc3RfdiArPSA4OworCSAgICB9CisJIH0KKworICAgICAgfSAvKiBlbmQgb2Ygd2hpbGUgKG5ibG9ja3MtLT4wKSAqLworCisgICB9IC8qIGVuZCBvZiBmb3IgKHBhc3Nlcz0wO3Bhc3NlczwyO3Bhc3NlcysrKSAqLworCit9CisKKworLyoqCisgKgorICogaW1hZ2U6IHNpemUgb2YgdGhlIGltYWdlIHdhbnRlZAorICogdmlldyA6IHNpemUgb2YgdGhlIGltYWdlIHJldHVybmVkIGJ5IHRoZSBjYW1lcmEKKyAqIG9mZnNldDogKHgseSkgdG8gZGlzcGxheWVyIGltYWdlIGluIHRoZSB2aWV3CisgKgorICogc3JjOiByYXcgZGF0YQorICogZHN0OiBpbWFnZSBvdXRwdXQKKyAqIGZsYWdzOiBQV0NYX0ZMQUdfUExBTkFSCisgKiBwZGV2OiBwcml2YXRlIGJ1ZmZlcgorICogYmFuZGxlbmd0aDoKKyAqCisgKi8KK3ZvaWQgcHdjX2RlYzIzX2RlY29tcHJlc3MoY29uc3Qgc3RydWN0IHB3Y19jb29yZCAqaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHB3Y19jb29yZCAqdmlldywKKwkJCSAgICBjb25zdCBzdHJ1Y3QgcHdjX2Nvb3JkICpvZmZzZXQsCisJCQkgICAgY29uc3Qgdm9pZCAqc3JjLAorCQkJICAgIHZvaWQgKmRzdCwKKwkJCSAgICBpbnQgZmxhZ3MsCisJCQkgICAgY29uc3Qgdm9pZCAqZGF0YSwKKwkJCSAgICBpbnQgYmFuZGxlbmd0aCkKK3sKKyAgY29uc3Qgc3RydWN0IHB3Y19kZWMyM19wcml2YXRlICpwZGV2ID0gZGF0YTsKKyAgdW5zaWduZWQgY2hhciAqcG91dCwgKnBvdXRfcGxhbmFyX3k9TlVMTCwgKnBvdXRfcGxhbmFyX3U9TlVMTCwgKnBvdXRfcGxhbmFyX3Y9TlVMTDsKKyAgaW50IGksbixzdHJpZGUscGl4ZWxfc2l6ZTsKKworCisgIGlmIChmbGFncyAmIFBXQ1hfRkxBR19CQVlFUikKKyAgIHsKKyAgICAgcG91dCA9IGRzdCArICh2aWV3LT54ICogb2Zmc2V0LT55KSArIG9mZnNldC0+eDsKKyAgICAgcGl4ZWxfc2l6ZSA9IHZpZXctPnggKiA0OworICAgfQorICBlbHNlCisgICB7CisgICAgIG4gPSB2aWV3LT54ICogdmlldy0+eTsKKworICAgICAvKiBvZmZzZXQgaW4gWSBwbGFuZSAqLworICAgICBzdHJpZGUgPSB2aWV3LT54ICogb2Zmc2V0LT55OworICAgICBwb3V0X3BsYW5hcl95ID0gZHN0ICsgc3RyaWRlICsgb2Zmc2V0LT54OworCisgICAgIC8qIG9mZnNldHMgaW4gVS9WIHBsYW5lcyAqLworICAgICBzdHJpZGUgPSAodmlldy0+eCAqIG9mZnNldC0+eSkvNCArIG9mZnNldC0+eC8yOworICAgICBwb3V0X3BsYW5hcl91ID0gZHN0ICsgbiArICAgICArIHN0cmlkZTsKKyAgICAgcG91dF9wbGFuYXJfdiA9IGRzdCArIG4gKyBuLzQgKyBzdHJpZGU7CisKKyAgICAgcGl4ZWxfc2l6ZSA9IHZpZXctPnggKiA0OworICAgfQorCisKKyAgZm9yIChpPTA7aTxpbWFnZS0+eTtpKz00KQorICAgeworICAgICBpZiAoZmxhZ3MgJiBQV0NYX0ZMQUdfQkFZRVIpCisgICAgICB7CisJLy9UT0RPOgorCS8vRGVjb21wcmVzc0JhbmRCYXllcihwZGV2LHNyYyxwb3V0LGltYWdlLngsdmlldy0+eCxmbGFncyk7CisJc3JjICs9IGJhbmRsZW5ndGg7CisJcG91dCArPSBwaXhlbF9zaXplOworICAgICAgfQorICAgICBlbHNlCisgICAgICB7CisJRGVjb21wcmVzc0JhbmQyMyhwZGV2LHNyYyxwb3V0X3BsYW5hcl95LHBvdXRfcGxhbmFyX3UscG91dF9wbGFuYXJfdixpbWFnZS0+eCx2aWV3LT54LGZsYWdzKTsKKwlzcmMgKz0gYmFuZGxlbmd0aDsKKwlwb3V0X3BsYW5hcl95ICs9IHBpeGVsX3NpemU7CisJcG91dF9wbGFuYXJfdSArPSB2aWV3LT54OworCXBvdXRfcGxhbmFyX3YgKz0gdmlldy0+eDsKKyAgICAgIH0KKyAgIH0KK30KKwordm9pZCBwd2NfZGVjMjNfZXhpdCh2b2lkKQoreworICAvKiBEbyBub3RoaW5nICovCisKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1kZWMyMy5oIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1kZWMyMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMmFhY2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWRlYzIzLmgKQEAgLTAsMCArMSw1OCBAQAorLyogTGludXggZHJpdmVyIGZvciBQaGlsaXBzIHdlYmNhbQorICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisgICBUaGUgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUKKyAgIE5lbW9zb2Z0IGJpbmFyeSBwd2N4IG1vZHVsZS4gQ2F2ZWF0IGVtcHRvci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisjaWZuZGVmIFBXQ19ERUMyM19ICisjZGVmaW5lIFBXQ19ERUMyM19ICisKK3N0cnVjdCBwd2NfZGVjMjNfcHJpdmF0ZQoreworICB1bnNpZ25lZCBjaGFyIHh4LHl5LHp6LHp6bWFzazsKKworICB1bnNpZ25lZCBjaGFyIHRhYmxlXzAwMDRbMioweDQwMDBdOworICB1bnNpZ25lZCBjaGFyIHRhYmxlXzgwMDRbMioweDEwMDBdOworICB1bnNpZ25lZCBpbnQgIHRhYmxlX2EwMDRbMjU2KjEyXTsKKworICB1bnNpZ25lZCBjaGFyIHRhYmxlX2QwMDRbOCoyNTZdOworICB1bnNpZ25lZCBpbnQgIHRhYmxlX2Q4MDBbMjU2XTsKKyAgdW5zaWduZWQgaW50ICB0YWJsZV9kYzAwWzI1Nl07Cit9OworCisKK3ZvaWQgcHdjX2RlYzIzX2luaXQoaW50IHR5cGUsIGludCByZWxlYXNlLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHZvaWQgKnByaXZhdGVfZGF0YSk7Cit2b2lkIHB3Y19kZWMyM19leGl0KHZvaWQpOwordm9pZCBwd2NfZGVjMjNfZGVjb21wcmVzcyhjb25zdCBzdHJ1Y3QgcHdjX2Nvb3JkICppbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcHdjX2Nvb3JkICp2aWV3LAorCQkJICAgIGNvbnN0IHN0cnVjdCBwd2NfY29vcmQgKm9mZnNldCwKKwkJCSAgICBjb25zdCB2b2lkICpzcmMsCisJCQkgICAgdm9pZCAqZHN0LAorCQkJICAgIGludCBmbGFncywKKwkJCSAgICBjb25zdCB2b2lkICpkYXRhLAorCQkJICAgIGludCBiYW5kbGVuZ3RoKTsKKworCisKKyNlbmRpZgorCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1pZi5jIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1pZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMGE1YTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWlmLmMKQEAgLTAsMCArMSwyMjEyIEBACisvKiBMaW51eCBkcml2ZXIgZm9yIFBoaWxpcHMgd2ViY2FtCisgICBVU0IgYW5kIFZpZGVvNExpbnV4IGludGVyZmFjZSBwYXJ0LgorICAgKEMpIDE5OTktMjAwNCBOZW1vc29mdCBVbnYuCisgICAoQykgMjAwNCAgICAgIEx1YyBTYWlsbGFyZCAobHVjQHNhaWxsYXJkLm9yZykKKworICAgTk9URTogdGhpcyB2ZXJzaW9uIG9mIHB3YyBpcyBhbiB1bm9mZmljaWFsIChtb2RpZmllZCkgcmVsZWFzZSBvZiBwd2MgJiBwY3d4CisgICBkcml2ZXIgYW5kIHRodXMgbWF5IGhhdmUgYnVncyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgb3JpZ2luYWwgdmVyc2lvbi4KKyAgIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIGFuZCBzdXBwb3J0IHJlcXVlc3RzIHRvIDxsdWNAc2FpbGxhcmQub3JnPi4KKyAgIFRoZSBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBieSByZXZlcnNlLWVuZ2luZWVyaW5nIHRoZQorICAgTmVtb3NvZnQgYmluYXJ5IHB3Y3ggbW9kdWxlLiBDYXZlYXQgZW1wdG9yLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworKi8KKworLyogIAorICAgVGhpcyBjb2RlIGZvcm1zIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgVVNCIGxheWVycyBhbmQgdGhlIFBoaWxpcHMKKyAgIHNwZWNpZmljIHN0dWZmLiBTb21lIGFkYW52ZWQgc3R1ZmYgb2YgdGhlIGRyaXZlciBmYWxscyB1bmRlciBhbgorICAgTkRBLCBzaWduZWQgYmV0d2VlbiBtZSBhbmQgUGhpbGlwcyBCLlYuLCBFaW5kaG92ZW4sIHRoZSBOZXRoZXJsYW5kcywgYW5kCisgICBpcyB0aHVzIG5vdCBkaXN0cmlidXRlZCBpbiBzb3VyY2UgZm9ybS4gVGhlIGJpbmFyeSBwd2N4Lm8gbW9kdWxlIAorICAgY29udGFpbnMgdGhlIGNvZGUgdGhhdCBmYWxscyB1bmRlciB0aGUgTkRBLgorICAgCisgICBJbiBjYXNlIHlvdSdyZSB3b25kZXJpbmc6ICdwd2MnIHN0YW5kcyBmb3IgIlBoaWxpcHMgV2ViQ2FtIiwgYnV0IAorICAgSSByZWFsbHkgZGlkbid0IHdhbnQgdG8gdHlwZSAncGhpbGlwc193ZWJfY2FtJyBldmVyeSB0aW1lIChJJ20gbGF6eSBhcworICAgYW55IExpbnV4IGtlcm5lbCBoYWNrZXIsIGJ1dCBJIGRvbid0IGxpa2UgdW5jb21wcmVoZW5zaWJsZSBhYmJyZXZpYXRpb25zCisgICB3aXRob3V0IGV4cGxhbmF0aW9uKS4KKyAgIAorICAgT2ggeWVzLCBjb252ZW50aW9uOiB0byBkaXNjdGluZ3Vpc2ggYmV0d2VlbiBhbGwgdGhlIHZhcmlvdXMgcG9pbnRlcnMgdG8KKyAgIGRldmljZS1zdHJ1Y3R1cmVzLCBJIHVzZSB0aGVzZSBuYW1lcyBmb3IgdGhlIHBvaW50ZXIgdmFyaWFibGVzOgorICAgdWRldjogc3RydWN0IHVzYl9kZXZpY2UgKgorICAgdmRldjogc3RydWN0IHZpZGVvX2RldmljZSAqCisgICBwZGV2OiBzdHJ1Y3QgcHdjX2Rldml2ZSAqCisqLworCisvKiBDb250cmlidXRvcnM6CisgICAtIEFsdmFyYWRvOiBhZGRpbmcgd2hpdGViYWxhbmNlIGNvZGUKKyAgIC0gQWxpc3RhciBNb2lyZTogUXVpY2tDYW0gMzAwMCBQcm8gZGV2aWNlL3Byb2R1Y3QgSUQKKyAgIC0gVG9ueSBIb3lsZTogQ3JlYXRpdmUgTGFicyBXZWJjYW0gNSBkZXZpY2UvcHJvZHVjdCBJRAorICAgLSBNYXJrIEJ1cmF6aW46IHNvbHZpbmcgaGFuZyBpbiBWSURJT0NTWU5DIHdoZW4gY2FtZXJhIGdldHMgdW5wbHVnZ2VkCisgICAtIEprIEZhbmc6IFNvdGVjIEFmaW5hIEV5ZSBJRAorICAgLSBYYXZpZXIgUm9jaGU6IFF1aWNrQ2FtIFBybyA0MDAwIElECisgICAtIEplbnMgS251ZHNlbjogUXVpY2tDYW0gWm9vbSBJRAorICAgLSBKLiBEZWJlcnQ6IFF1aWNrQ2FtIGZvciBOb3RlYm9va3MgSUQKKyovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSAicHdjLmgiCisjaW5jbHVkZSAicHdjLWlvY3RsLmgiCisjaW5jbHVkZSAicHdjLWtpYXJhLmgiCisjaW5jbHVkZSAicHdjLXRpbW9uLmgiCisjaW5jbHVkZSAicHdjLWRlYzIzLmgiCisjaW5jbHVkZSAicHdjLWRlYzEuaCIKKyNpbmNsdWRlICJwd2MtdW5jb21wcmVzcy5oIgorCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBkcml2ZXIgdGVtcGxhdGVzICovCisKKy8qIGhvdHBsdWcgZGV2aWNlIHRhYmxlIHN1cHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBwd2NfZGV2aWNlX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MDMwMikgfSwgLyogUGhpbGlwcyBtb2RlbHMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDAzMDMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzA0KSB9LAorCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MDMwNykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDAzMDgpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzBDKSB9LAorCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MDMxMCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDAzMTEpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzEyKSB9LAorCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MDMxMykgfSwgLyogdGhlICduZXcnIDcyMEsgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNjlBLCAweDAwMDEpIH0sIC8qIEFza2V5ICovCisJeyBVU0JfREVWSUNFKDB4MDQ2RCwgMHgwOEIwKSB9LCAvKiBMb2dpdGVjaCBRdWlja0NhbSBQcm8gMzAwMCAqLworCXsgVVNCX0RFVklDRSgweDA0NkQsIDB4MDhCMSkgfSwgLyogTG9naXRlY2ggUXVpY2tDYW0gTm90ZWJvb2sgUHJvICovCisJeyBVU0JfREVWSUNFKDB4MDQ2RCwgMHgwOEIyKSB9LCAvKiBMb2dpdGVjaCBRdWlja0NhbSBQcm8gNDAwMCAqLworCXsgVVNCX0RFVklDRSgweDA0NkQsIDB4MDhCMykgfSwgLyogTG9naXRlY2ggUXVpY2tDYW0gWm9vbSAob2xkIG1vZGVsKSAqLworCXsgVVNCX0RFVklDRSgweDA0NkQsIDB4MDhCNCkgfSwgLyogTG9naXRlY2ggUXVpY2tDYW0gWm9vbSAobmV3IG1vZGVsKSAqLworCXsgVVNCX0RFVklDRSgweDA0NkQsIDB4MDhCNSkgfSwgLyogTG9naXRlY2ggUXVpY2tDYW0gT3JiaXQvU3BoZXJlICovCisJeyBVU0JfREVWSUNFKDB4MDQ2RCwgMHgwOEI2KSB9LCAvKiBMb2dpdGVjaCAocmVzZXJ2ZWQpICovCisJeyBVU0JfREVWSUNFKDB4MDQ2RCwgMHgwOEI3KSB9LCAvKiBMb2dpdGVjaCAocmVzZXJ2ZWQpICovCisJeyBVU0JfREVWSUNFKDB4MDQ2RCwgMHgwOEI4KSB9LCAvKiBMb2dpdGVjaCAocmVzZXJ2ZWQpICovCisJeyBVU0JfREVWSUNFKDB4MDU1RCwgMHg5MDAwKSB9LCAvKiBTYW1zdW5nICovCisJeyBVU0JfREVWSUNFKDB4MDU1RCwgMHg5MDAxKSB9LAorCXsgVVNCX0RFVklDRSgweDA0MUUsIDB4NDAwQykgfSwgLyogQ3JlYXRpdmUgV2ViY2FtIDUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDFFLCAweDQwMTEpIH0sIC8qIENyZWF0aXZlIFdlYmNhbSBQcm8gRXggKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNENDLCAweDgxMTYpIH0sIC8qIEFmaW5hIEV5ZSAqLworCXsgVVNCX0RFVklDRSgweDA2QkUsIDB4ODExNikgfSwgLyogbmV3IEFmaW5hIEV5ZSAqLworCXsgVVNCX0RFVklDRSgweDBkODEsIDB4MTkxMCkgfSwgLyogVmlzaW9uaXRlICovCisJeyBVU0JfREVWSUNFKDB4MGQ4MSwgMHgxOTAwKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBwd2NfZGV2aWNlX3RhYmxlKTsKKworc3RhdGljIGludCB1c2JfcHdjX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgdXNiX3B3Y19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHB3Y19kcml2ZXIgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiUGhpbGlwcyB3ZWJjYW0iLAkvKiBuYW1lICovCisJLmlkX3RhYmxlID0JCXB3Y19kZXZpY2VfdGFibGUsCisJLnByb2JlID0JCXVzYl9wd2NfcHJvYmUsCQkvKiBwcm9iZSgpICovCisJLmRpc2Nvbm5lY3QgPQkJdXNiX3B3Y19kaXNjb25uZWN0LAkvKiBkaXNjb25uZWN0KCkgKi8KK307CisKKyNkZWZpbmUgTUFYX0RFVl9ISU5UUwkyMAorI2RlZmluZSBNQVhfSVNPQ19FUlJPUlMJMjAKKworc3RhdGljIGludCBkZWZhdWx0X3NpemUgPSBQU1pfUUNJRjsKK3N0YXRpYyBpbnQgZGVmYXVsdF9mcHMgPSAxMDsKK3N0YXRpYyBpbnQgZGVmYXVsdF9mYnVmcyA9IDM7ICAgLyogRGVmYXVsdCBudW1iZXIgb2YgZnJhbWUgYnVmZmVycyAqLworc3RhdGljIGludCBkZWZhdWx0X21idWZzID0gMjsJLyogRGVmYXVsdCBudW1iZXIgb2YgbW1hcCgpIGJ1ZmZlcnMgKi8KKyAgICAgICBpbnQgcHdjX3RyYWNlID0gVFJBQ0VfTU9EVUxFIHwgVFJBQ0VfRkxPVyB8IFRSQUNFX1BXQ1g7CitzdGF0aWMgaW50IHBvd2VyX3NhdmUgPSAwOworc3RhdGljIGludCBsZWRfb24gPSAxMDAsIGxlZF9vZmYgPSAwOyAvKiBkZWZhdWx0cyB0byBMRUQgdGhhdCBpcyBvbiB3aGlsZSBpbiB1c2UgKi8KKyAgICAgICBpbnQgcHdjX3ByZWZlcnJlZF9jb21wcmVzc2lvbiA9IDI7IC8qIDAuLjMgPSB1bmNvbXByZXNzZWQuLmhpZ2ggKi8KK3N0YXRpYyBzdHJ1Y3QgeworCWludCB0eXBlOworCWNoYXIgc2VyaWFsX251bWJlclszMF07CisJaW50IGRldmljZV9ub2RlOworCXN0cnVjdCBwd2NfZGV2aWNlICpwZGV2OworfSBkZXZpY2VfaGludFtNQVhfREVWX0hJTlRTXTsKKworLyoqKi8KKworc3RhdGljIGludCBwd2NfdmlkZW9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IHB3Y192aWRlb19jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgc3NpemVfdCBwd2NfdmlkZW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsCisJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcHdjX3ZpZGVvX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpOworc3RhdGljIGludCAgcHdjX3ZpZGVvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgIHVuc2lnbmVkIGludCBpb2N0bG5yLCB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgaW50ICBwd2NfdmlkZW9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwd2NfZm9wcyA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkub3BlbiA9CQlwd2NfdmlkZW9fb3BlbiwKKwkucmVsZWFzZSA9ICAgICAJcHdjX3ZpZGVvX2Nsb3NlLAorCS5yZWFkID0JCXB3Y192aWRlb19yZWFkLAorCS5wb2xsID0JCXB3Y192aWRlb19wb2xsLAorCS5tbWFwID0JCXB3Y192aWRlb19tbWFwLAorCS5pb2N0bCA9ICAgICAgICBwd2NfdmlkZW9faW9jdGwsCisJLmxsc2VlayA9ICAgICAgIG5vX2xsc2VlaywKK307CitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBwd2NfdGVtcGxhdGUgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJIlBoaWxpcHMgV2ViY2FtIiwJLyogRmlsbGVkIGluIGxhdGVyICovCisJLnR5cGUgPQkJVklEX1RZUEVfQ0FQVFVSRSwKKwkuaGFyZHdhcmUgPQlWSURfSEFSRFdBUkVfUFdDLAorCS5yZWxlYXNlID0JdmlkZW9fZGV2aWNlX3JlbGVhc2UsCisJLmZvcHMgPSAgICAgICAgICZwd2NfZm9wcywKKwkubWlub3IgPSAgICAgICAgLTEsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBPa2F5LCB0aGlzIGlzIHNvbWUgbWFnaWMgdGhhdCBJIHdvcmtlZCBvdXQgYW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIGl0Li4uCisKKyAgIFRoZSBiaWdnZXN0IHByb2JsZW0gd2l0aCBhbnkgVVNCIGRldmljZSBpcyBvZiBjb3Vyc2U6ICJ3aGF0IHRvIGRvIAorICAgd2hlbiB0aGUgdXNlciB1bnBsdWdzIHRoZSBkZXZpY2Ugd2hpbGUgaXQgaXMgaW4gdXNlIGJ5IGFuIGFwcGxpY2F0aW9uPyIKKyAgIFdlIGhhdmUgc2V2ZXJhbCBvcHRpb25zOgorICAgMSkgQ3Vyc2UgdGhlbSB3aXRoIHRoZSA3IHBsYWd1ZXMgd2hlbiB0aGV5IGRvIChyZXF1aXJlcyBkaXZpbmUgaW50ZXJ2ZW50aW9uKQorICAgMikgVGVsbCB0aGVtIG5vdCB0byAod29uJ3Qgd29yazogdGhleSdsbCBkbyBpdCBhbnl3YXkpCisgICAzKSBPb3BzIHRoZSBrZXJuZWwgKHRoaXMgd2lsbCBoYXZlIGEgbmVnYXRpdmUgZWZmZWN0IG9uIGEgdXNlcidzIHVwdGltZSkKKyAgIDQpIERvIHNvbWV0aGluZyBzZW5zaWJsZS4KKyAgIAorICAgT2YgY291cnNlLCB3ZSBnbyBmb3Igb3B0aW9uIDQuCisKKyAgIEl0IGhhcHBlbnMgdGhhdCB0aGlzIGRldmljZSB3aWxsIGJlIGxpbmtlZCB0byB0d28gdGltZXMsIG9uY2UgZnJvbQorICAgdXNiX2RldmljZSBhbmQgb25jZSBmcm9tIHRoZSB2aWRlb19kZXZpY2UgaW4gdGhlaXIgcmVzcGVjdGl2ZSAncHJpdmF0ZScKKyAgIHBvaW50ZXJzLiBUaGlzIGlzIGRvbmUgd2hlbiB0aGUgZGV2aWNlIGlzIHByb2JlZCgpIGFuZCBhbGwgaW5pdGlhbGl6YXRpb24KKyAgIHN1Y2NlZWRlZC4gVGhlIHB3Y19kZXZpY2Ugc3RydWN0IGxpbmtzIGJhY2sgdG8gYm90aCBzdHJ1Y3R1cmVzLgorCisgICBXaGVuIGEgZGV2aWNlIGlzIHVucGx1Z2dlZCB3aGlsZSBpbiB1c2UgaXQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIAorICAgbGlzdCBvZiBrbm93biBVU0IgZGV2aWNlczsgSSBhbHNvIGRlLXJlZ2lzdGVyIGl0IGFzIGEgVjRMIGRldmljZSwgYnV0IAorICAgdW5mb3J0dW5hdGVseSBJIGNhbid0IGZyZWUgdGhlIG1lbW9yeSBzaW5jZSB0aGUgc3RydWN0IGlzIHN0aWxsIGluIHVzZQorICAgYnkgdGhlIGZpbGUgZGVzY3JpcHRvci4gVGhpcyBmcmVlLWluZyBpcyB0aGVuIGRlZmVyZW5kIHVudGlsIHRoZSBmaXJzdAorICAgb3Bwb3J0dW5pdHkuIENydWRlLCBidXQgaXQgd29ya3MuCisgICAKKyAgIEEgc21hbGwgJ2FkdmFudGFnZScgaXMgdGhhdCBpZiBhIHVzZXIgdW5wbHVncyB0aGUgY2FtIGFuZCBwbHVncyBpdCBiYWNrCisgICBpbiwgaXQgc2hvdWxkIGdldCBhc3NpZ25lZCB0aGUgc2FtZSB2aWRlbyBkZXZpY2UgbWlub3IsIGJ1dCB1bmZvcnR1bmF0ZWx5CisgICBpdCdzIG5vbi10cml2aWFsIHRvIHJlLWxpbmsgdGhlIGNhbSBiYWNrIHRvIHRoZSB2aWRlbyBkZXZpY2UuLi4gKHRoYXQgCisgICB3b3VsZCBzdXJlbHkgYmUgbWFnaWMhIDopKQorKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFByaXZhdGUgZnVuY3Rpb25zICovCisKKy8qIEhlcmUgd2Ugd2FudCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbWVtb3J5LgorICogVGhpcyBpcyB1c2VkIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgYXJlYS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGt2aXJ0X3RvX3BhKHVuc2lnbmVkIGxvbmcgYWRyKSAKK3sKKyAgICAgICAgdW5zaWduZWQgbG9uZyBrdmEsIHJldDsKKworCWt2YSA9ICh1bnNpZ25lZCBsb25nKSBwYWdlX2FkZHJlc3Modm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CisJa3ZhIHw9IGFkciAmIChQQUdFX1NJWkUtMSk7IC8qIHJlc3RvcmUgdGhlIG9mZnNldCAqLworCXJldCA9IF9fcGEoa3ZhKTsKKyAgICAgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgKiBydm1hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdm9pZCAqIG1lbTsKKwl1bnNpZ25lZCBsb25nIGFkcjsKKworCXNpemU9UEFHRV9BTElHTihzaXplKTsKKyAgICAgICAgbWVtPXZtYWxsb2NfMzIoc2l6ZSk7CisJaWYgKG1lbSkgCisJeworCQltZW1zZXQobWVtLCAwLCBzaXplKTsgLyogQ2xlYXIgdGhlIHJhbSBvdXQsIG5vIGp1bmsgdG8gdGhlIHVzZXIgKi8KKwkgICAgICAgIGFkcj0odW5zaWduZWQgbG9uZykgbWVtOworCQl3aGlsZSAoc2l6ZSA+IDApIAorICAgICAgICAgICAgICAgIHsKKwkJCVNldFBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJCWFkcis9UEFHRV9TSVpFOworCQkJc2l6ZS09UEFHRV9TSVpFOworCQl9CisJfQorCXJldHVybiBtZW07Cit9CisKK3N0YXRpYyB2b2lkIHJ2ZnJlZSh2b2lkICogbWVtLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgYWRyOworCisJaWYgKG1lbSkgCisJeworCSAgICAgICAgYWRyPSh1bnNpZ25lZCBsb25nKSBtZW07CisJCXdoaWxlICgobG9uZykgc2l6ZSA+IDApIAorICAgICAgICAgICAgICAgIHsKKwkJCUNsZWFyUGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOworCQkJYWRyKz1QQUdFX1NJWkU7CisJCQlzaXplLT1QQUdFX1NJWkU7CisJCX0KKwkJdmZyZWUobWVtKTsKKwl9Cit9CisKKworCisKK3N0YXRpYyBpbnQgcHdjX2FsbG9jYXRlX2J1ZmZlcnMoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCit7CisJaW50IGk7CisJdm9pZCAqa2J1ZjsKKworCVRyYWNlKFRSQUNFX01FTU9SWSwgIj4+IHB3Y19hbGxvY2F0ZV9idWZmZXJzKHBkZXYgPSAweCVwKVxuIiwgcGRldik7CisKKwlpZiAocGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOWElPOworCQkKKyNpZmRlZiBQV0NfTUFHSUMKKwlpZiAocGRldi0+bWFnaWMgIT0gUFdDX01BR0lDKSB7CisJCUVycigiYWxsb2NhdGVfYnVmZmVycygpOiBtYWdpYyBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisjZW5kaWYJCisJLyogQWxsb2NhdGUgSXNvY2hyb251b3VzIHBpcGUgYnVmZmVycyAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfSVNPX0JVRlM7IGkrKykgeworCQlpZiAocGRldi0+c2J1ZltpXS5kYXRhID09IE5VTEwpIHsKKwkJCWtidWYgPSBrbWFsbG9jKElTT19CVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoa2J1ZiA9PSBOVUxMKSB7CisJCQkJRXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgaXNvIGJ1ZmZlciAlZC5cbiIsIGkpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQkJVHJhY2UoVFJBQ0VfTUVNT1JZLCAiQWxsb2NhdGVkIGlzbyBidWZmZXIgYXQgJXAuXG4iLCBrYnVmKTsKKwkJCXBkZXYtPnNidWZbaV0uZGF0YSA9IGtidWY7CisJCQltZW1zZXQoa2J1ZiwgMCwgSVNPX0JVRkZFUl9TSVpFKTsKKwkJfQorCX0KKworCS8qIEFsbG9jYXRlIGZyYW1lIGJ1ZmZlciBzdHJ1Y3R1cmUgKi8KKwlpZiAocGRldi0+ZmJ1ZiA9PSBOVUxMKSB7CisJCWtidWYgPSBrbWFsbG9jKGRlZmF1bHRfZmJ1ZnMgKiBzaXplb2Yoc3RydWN0IHB3Y19mcmFtZV9idWYpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGtidWYgPT0gTlVMTCkgeworCQkJRXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgZnJhbWUgYnVmZmVyIHN0cnVjdHVyZS5cbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJVHJhY2UoVFJBQ0VfTUVNT1JZLCAiQWxsb2NhdGVkIGZyYW1lIGJ1ZmZlciBzdHJ1Y3R1cmUgYXQgJXAuXG4iLCBrYnVmKTsKKwkJcGRldi0+ZmJ1ZiA9IGtidWY7CisJCW1lbXNldChrYnVmLCAwLCBkZWZhdWx0X2ZidWZzICogc2l6ZW9mKHN0cnVjdCBwd2NfZnJhbWVfYnVmKSk7CisJfQorCS8qIGNyZWF0ZSBmcmFtZSBidWZmZXJzLCBhbmQgbWFrZSBjaXJjdWxhciByaW5nICovCisJZm9yIChpID0gMDsgaSA8IGRlZmF1bHRfZmJ1ZnM7IGkrKykgeworCQlpZiAocGRldi0+ZmJ1ZltpXS5kYXRhID09IE5VTEwpIHsKKwkJCWtidWYgPSB2bWFsbG9jKFBXQ19GUkFNRV9TSVpFKTsgLyogbmVlZCB2bWFsbG9jIHNpbmNlIGZyYW1lIGJ1ZmZlciA+IDEyOEsgKi8KKwkJCWlmIChrYnVmID09IE5VTEwpIHsKKwkJCQlFcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBmcmFtZSBidWZmZXIgJWQuXG4iLCBpKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCVRyYWNlKFRSQUNFX01FTU9SWSwgIkFsbG9jYXRlZCBmcmFtZSBidWZmZXIgJWQgYXQgJXAuXG4iLCBpLCBrYnVmKTsKKwkJCXBkZXYtPmZidWZbaV0uZGF0YSA9IGtidWY7CisJCQltZW1zZXQoa2J1ZiwgMTI4LCBQV0NfRlJBTUVfU0laRSk7CisJCX0KKwl9CisJCisJLyogQWxsb2NhdGUgZGVjb21wcmVzc29yIHRhYmxlIHNwYWNlICovCisJa2J1ZiA9IE5VTEw7CisJc3dpdGNoIChwZGV2LT50eXBlKQorCSB7CisJICBjYXNlIDY3NToKKwkgIGNhc2UgNjgwOgorCSAgY2FzZSA2OTA6CisJICBjYXNlIDcyMDoKKwkgIGNhc2UgNzMwOgorCSAgY2FzZSA3NDA6CisJICBjYXNlIDc1MDoKKwkgICAgVHJhY2UoVFJBQ0VfTUVNT1JZLCJwcml2YXRlX2RhdGEoJVpkKVxuIixzaXplb2Yoc3RydWN0IHB3Y19kZWMyM19wcml2YXRlKSk7CisJICAgIGtidWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcHdjX2RlYzIzX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsJLyogVGltb24gJiBLaWFyYSAqLworCSAgICBicmVhazsKKwkgIGNhc2UgNjQ1OgorCSAgY2FzZSA2NDY6CisJICAgIC8qIFRPRE8gJiBGSVhNRSAqLworCSAgICBrYnVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHB3Y19kZWMyM19wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJICAgIGJyZWFrOworCSB9CisJaWYgKGtidWYgPT0gTlVMTCkgeworCSAgIEVycigiRmFpbGVkIHRvIGFsbG9jYXRlIGRlY29tcHJlc3MgdGFibGUuXG4iKTsKKwkgICByZXR1cm4gLUVOT01FTTsKKwl9CisJcGRldi0+ZGVjb21wcmVzc19kYXRhID0ga2J1ZjsKKwkKKwkvKiBBbGxvY2F0ZSBpbWFnZSBidWZmZXI7IGRvdWJsZSBidWZmZXIgZm9yIG1tYXAoKSAqLworCWtidWYgPSBydm1hbGxvYyhkZWZhdWx0X21idWZzICogcGRldi0+bGVuX3Blcl9pbWFnZSk7CisJaWYgKGtidWYgPT0gTlVMTCkgeworCQlFcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBpbWFnZSBidWZmZXIocykuIG5lZWRlZCAoJWQpXG4iLGRlZmF1bHRfbWJ1ZnMgKiBwZGV2LT5sZW5fcGVyX2ltYWdlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCVRyYWNlKFRSQUNFX01FTU9SWSwgIkFsbG9jYXRlZCBpbWFnZSBidWZmZXIgYXQgJXAuXG4iLCBrYnVmKTsKKwlwZGV2LT5pbWFnZV9kYXRhID0ga2J1ZjsKKwlmb3IgKGkgPSAwOyBpIDwgZGVmYXVsdF9tYnVmczsgaSsrKQorCQlwZGV2LT5pbWFnZV9wdHJbaV0gPSBrYnVmICsgaSAqIHBkZXYtPmxlbl9wZXJfaW1hZ2U7CisJZm9yICg7IGkgPCBNQVhfSU1BR0VTOyBpKyspCisJCXBkZXYtPmltYWdlX3B0cltpXSA9IE5VTEw7CisKKwlrYnVmID0gTlVMTDsKKwkgIAorCVRyYWNlKFRSQUNFX01FTU9SWSwgIjw8IHB3Y19hbGxvY2F0ZV9idWZmZXJzKClcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwd2NfZnJlZV9idWZmZXJzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoreworCWludCBpOworCisJVHJhY2UoVFJBQ0VfTUVNT1JZLCAiRW50ZXJpbmcgZnJlZV9idWZmZXJzKCVwKS5cbiIsIHBkZXYpOworCisJaWYgKHBkZXYgPT0gTlVMTCkKKwkJcmV0dXJuOworI2lmZGVmIFBXQ19NQUdJQworCWlmIChwZGV2LT5tYWdpYyAhPSBQV0NfTUFHSUMpIHsKKwkJRXJyKCJmcmVlX2J1ZmZlcnMoKTogbWFnaWMgZmFpbGVkLlxuIik7CisJCXJldHVybjsKKwl9CisjZW5kaWYJCisKKwkvKiBSZWxlYXNlIElzby1waXBlIGJ1ZmZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0lTT19CVUZTOyBpKyspCisJCWlmIChwZGV2LT5zYnVmW2ldLmRhdGEgIT0gTlVMTCkgeworCQkJVHJhY2UoVFJBQ0VfTUVNT1JZLCAiRnJlZWluZyBJU08gYnVmZmVyIGF0ICVwLlxuIiwgcGRldi0+c2J1ZltpXS5kYXRhKTsKKwkJCWtmcmVlKHBkZXYtPnNidWZbaV0uZGF0YSk7CisJCQlwZGV2LT5zYnVmW2ldLmRhdGEgPSBOVUxMOworCQl9CisKKwkvKiBUaGUgc2FtZSBmb3IgZnJhbWUgYnVmZmVycyAqLworCWlmIChwZGV2LT5mYnVmICE9IE5VTEwpIHsKKwkJZm9yIChpID0gMDsgaSA8IGRlZmF1bHRfZmJ1ZnM7IGkrKykgeworCQkJaWYgKHBkZXYtPmZidWZbaV0uZGF0YSAhPSBOVUxMKSB7CisJCQkJVHJhY2UoVFJBQ0VfTUVNT1JZLCAiRnJlZWluZyBmcmFtZSBidWZmZXIgJWQgYXQgJXAuXG4iLCBpLCBwZGV2LT5mYnVmW2ldLmRhdGEpOworCQkJCXZmcmVlKHBkZXYtPmZidWZbaV0uZGF0YSk7CisJCQkJcGRldi0+ZmJ1ZltpXS5kYXRhID0gTlVMTDsKKwkJCX0KKwkJfQorCQlrZnJlZShwZGV2LT5mYnVmKTsKKwkJcGRldi0+ZmJ1ZiA9IE5VTEw7CisJfQorCisJLyogSW50ZXJtZWRpYXRlIGRlY29tcHJlc3Npb24gYnVmZmVyICYgdGFibGVzICovCisJaWYgKHBkZXYtPmRlY29tcHJlc3NfZGF0YSAhPSBOVUxMKSB7CisJCVRyYWNlKFRSQUNFX01FTU9SWSwgIkZyZWVpbmcgZGVjb21wcmVzc2lvbiBidWZmZXIgYXQgJXAuXG4iLCBwZGV2LT5kZWNvbXByZXNzX2RhdGEpOworCQlrZnJlZShwZGV2LT5kZWNvbXByZXNzX2RhdGEpOworCQlwZGV2LT5kZWNvbXByZXNzX2RhdGEgPSBOVUxMOworCX0KKwlwZGV2LT5kZWNvbXByZXNzb3IgPSBOVUxMOworCisJLyogUmVsZWFzZSBpbWFnZSBidWZmZXJzICovCisJaWYgKHBkZXYtPmltYWdlX2RhdGEgIT0gTlVMTCkgeworCQlUcmFjZShUUkFDRV9NRU1PUlksICJGcmVlaW5nIGltYWdlIGJ1ZmZlciBhdCAlcC5cbiIsIHBkZXYtPmltYWdlX2RhdGEpOworCQlydmZyZWUocGRldi0+aW1hZ2VfZGF0YSwgZGVmYXVsdF9tYnVmcyAqIHBkZXYtPmxlbl9wZXJfaW1hZ2UpOworCX0KKwlwZGV2LT5pbWFnZV9kYXRhID0gTlVMTDsKKwkKKwlUcmFjZShUUkFDRV9NRU1PUlksICJMZWF2aW5nIGZyZWVfYnVmZmVycygpLlxuIik7Cit9CisKKy8qIFRoZSBmcmFtZSAmIGltYWdlIGJ1ZmZlciBtZXNzLiAKKworICAgWWVzLCB0aGlzIGlzIGEgbWVzcy4gV2VsbCwgaXQgdXNlZCB0byBiZSBzaW1wbGUsIGJ1dCBhbGFzLi4uICBJbiB0aGlzCisgICBtb2R1bGUsIDMgYnVmZmVycyBzY2hlbWVzIGFyZSB1c2VkIHRvIGdldCB0aGUgZGF0YSBmcm9tIHRoZSBVU0IgYnVzIHRvCisgICB0aGUgdXNlciBwcm9ncmFtLiBUaGUgZmlyc3Qgc2NoZW1lIGludm9sdmVzIHRoZSBJU08gYnVmZmVycyAoY2FsbGVkIHRodXMKKyAgIHNpbmNlIHRoZXkgdHJhbnNwb3J0IElTTyBkYXRhIGZyb20gdGhlIFVTQiBjb250cm9sbGVyKSwgYW5kIG5vdCByZWFsbHkKKyAgIGludGVyZXN0aW5nLiBTdWZmaWNlcyB0byBzYXkgdGhlIGRhdGEgZnJvbSB0aGlzIGJ1ZmZlciBpcyBxdWlja2x5IAorICAgZ2F0aGVyZWQgaW4gYW4gaW50ZXJydXB0IGhhbmRsZXIgKHB3Y19pc29jX2hhbmRsZXIpIGFuZCBwbGFjZWQgaW50byB0aGUKKyAgIGZyYW1lIGJ1ZmZlci4KKworICAgVGhlIGZyYW1lIGJ1ZmZlciBpcyB0aGUgc2Vjb25kIHNjaGVtZSwgYW5kIGlzIHRoZSBjZW50cmFsIGVsZW1lbnQgaGVyZS4KKyAgIEl0IGNvbGxlY3RzIHRoZSBkYXRhIGZyb20gYSBzaW5nbGUgZnJhbWUgZnJvbSB0aGUgY2FtZXJhIChoZW5jZSwgdGhlCisgICBuYW1lKS4gRnJhbWVzIGFyZSBkZWxpbWl0ZWQgYnkgdGhlIFVTQiBjYW1lcmEgd2l0aCBhIHNob3J0IFVTQiBwYWNrZXQsCisgICBzbyB0aGF0J3MgZWFzeSB0byBkZXRlY3QuIFRoZSBmcmFtZSBidWZmZXJzIGZvcm0gYSBsaXN0IHRoYXQgaXMgZmlsbGVkCisgICBieSB0aGUgY2FtZXJhK1VTQiBjb250cm9sbGVyIGFuZCBkcmFpbmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgdGhyb3VnaAorICAgZWl0aGVyIHJlYWQoKSBvciBtbWFwKCkuCisKKyAgIFRoZSBpbWFnZSBidWZmZXIgaXMgdGhlIHRoaXJkIHNjaGVtZSwgaW4gd2hpY2ggZnJhbWVzIGFyZSBkZWNvbXByZXNzZWQKKyAgIGFuZCBjb252ZXJ0ZWQgaW50byBwbGFuYXIgZm9ybWF0LiBGb3IgbW1hcCgpIHRoZXJlIGlzIG1vcmUgdGhhbgorICAgb25lIGltYWdlIGJ1ZmZlciBhdmFpbGFibGUuCisKKyAgIFRoZSBmcmFtZSBidWZmZXJzIHByb3ZpZGUgdGhlIGltYWdlIGJ1ZmZlcmluZy4gSW4gY2FzZSB0aGUgdXNlciBwcm9jZXNzCisgICBpcyBhIGJpdCBzbG93LCB0aGlzIGludHJvZHVjZXMgbGFnIGFuZCBzb21lIHVuZGVzaXJlZCBzaWRlLWVmZmVjdHMuCisgICBUaGUgcHJvYmxlbSBhcmlzZXMgd2hlbiB0aGUgZnJhbWUgYnVmZmVyIGlzIGZ1bGwuIEkgdXNlZCB0byBkcm9wIHRoZSBsYXN0CisgICBmcmFtZSwgd2hpY2ggbWFrZXMgdGhlIGRhdGEgaW4gdGhlIHF1ZXVlIHN0YWxlIHZlcnkgcXVpY2tseS4gQnV0IGRyb3BwaW5nCisgICB0aGUgZnJhbWUgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlIHByb3ZlZCB0byBiZSBhIGxpdHRlIGJpdCBtb3JlIGRpZmZpY3VsdC4KKyAgIEkgdHJpZWQgYSBjaXJjdWxhciBsaW5rZWQgc2NoZW1lLCBidXQgdGhpcyBpbnRyb2R1Y2VkIG1vcmUgcHJvYmxlbXMgdGhhbgorICAgaXQgc29sdmVkLgorCisgICBCZWNhdXNlIGZpbGxpbmcgYW5kIGRyYWluaW5nIGFyZSBjb21wbGV0ZWx5IGFzeW5jaHJvbm91cyBwcm9jZXNzZXMsIHRoaXMKKyAgIHJlcXVpcmVzIHNvbWUgZmlkZGxpbmcgd2l0aCBwb2ludGVycyBhbmQgbXV0ZXhlcy4KKworICAgRXZlbnR1YWxseSwgSSBjYW1lIHVwIHdpdGggYSBzeXN0ZW0gd2l0aCAyIGxpc3RzOiBhbiAnZW1wdHknIGZyYW1lIGxpc3QKKyAgIGFuZCBhICdmdWxsJyBmcmFtZSBsaXN0OgorICAgICAqIEluaXRpYWxseSwgYWxsIGZyYW1lIGJ1ZmZlcnMgYnV0IG9uZSBhcmUgb24gdGhlICdlbXB0eScgbGlzdDsgdGhlIG9uZQorICAgICAgIHJlbWFpbmluZyBidWZmZXIgaXMgb3VyIGluaXRpYWwgZmlsbCBmcmFtZS4KKyAgICAgKiBJZiBhIGZyYW1lIGlzIG5lZWRlZCBmb3IgZmlsbGluZywgd2UgdHJ5IHRvIHRha2UgaXQgZnJvbSB0aGUgJ2VtcHR5JyAKKyAgICAgICBsaXN0LCB1bmxlc3MgdGhhdCBsaXN0IGlzIGVtcHR5LCBpbiB3aGljaCBjYXNlIHdlIHRha2UgdGhlIGJ1ZmZlciBhdCAKKyAgICAgICB0aGUgaGVhZCBvZiB0aGUgJ2Z1bGwnIGxpc3QuCisgICAgICogV2hlbiBvdXIgZmlsbCBidWZmZXIgaGFzIGJlZW4gZmlsbGVkLCBpdCBpcyBhcHBlbmRlZCB0byB0aGUgJ2Z1bGwnCisgICAgICAgbGlzdC4KKyAgICAgKiBJZiBhIGZyYW1lIGlzIG5lZWRlZCBieSByZWFkKCkgb3IgbW1hcCgpLCBpdCBpcyB0YWtlbiBmcm9tIHRoZSBoZWFkIG9mCisgICAgICAgdGhlICdmdWxsJyBsaXN0LCBoYW5kbGVkLCBhbmQgdGhlbiBhcHBlbmRlZCB0byB0aGUgJ2VtcHR5JyBsaXN0LiBJZiBubworICAgICAgIGJ1ZmZlciBpcyBwcmVzZW50IG9uIHRoZSAnZnVsbCcgbGlzdCwgd2Ugd2FpdC4KKyAgIFRoZSBhZHZhbnRhZ2UgaXMgdGhhdCB0aGUgYnVmZmVyIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGRlY29tcHJlc3NlZC8KKyAgIGNvbnZlcnRlZCwgaXMgb24gbmVpdGhlciBsaXN0LCBhbmQgdGh1cyBub3QgaW4gb3VyIHdheSAoYW55IG90aGVyIHNjaGVtZQorICAgSSB0cmllZCBoYWQgdGhlIHByb2JsZW0gb2Ygb2xkIGRhdGEgbGluZ2VyaW5nIGluIHRoZSBxdWV1ZSkuCisKKyAgIFdoYXRldmVyIHN0cmF0ZWd5IHlvdSBjaG9vc2UsIGl0IGFsd2F5cyByZW1haW5zIGEgdHJhZGVvZmY6IHdpdGggbW9yZQorICAgZnJhbWUgYnVmZmVycyB0aGUgY2hhbmNlcyBvZiBhIG1pc3NlZCBmcmFtZSBhcmUgcmVkdWNlZC4gT24gdGhlIG90aGVyCisgICBoYW5kLCBvbiBzbG93ZXIgbWFjaGluZXMgaXQgaW50cm9kdWNlcyBsYWcgYmVjYXVzZSB0aGUgcXVldWUgd2lsbAorICAgYWx3YXlzIGJlIGZ1bGwuCisgKi8KKworLyoqCisgIFxicmllZiBGaW5kIG5leHQgZnJhbWUgYnVmZmVyIHRvIGZpbGwuIFRha2UgZnJvbSBlbXB0eSBvciBmdWxsIGxpc3QsIHdoaWNoZXZlciBjb21lcyBmaXJzdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcHdjX25leHRfZmlsbF9mcmFtZShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyZXQgPSAwOworCXNwaW5fbG9ja19pcnFzYXZlKCZwZGV2LT5wdHJsb2NrLCBmbGFncyk7CisJaWYgKHBkZXYtPmZpbGxfZnJhbWUgIT0gTlVMTCkgeworCQkvKiBhcHBlbmQgdG8gJ2Z1bGwnIGxpc3QgKi8KKwkJaWYgKHBkZXYtPmZ1bGxfZnJhbWVzID09IE5VTEwpIHsKKwkJCXBkZXYtPmZ1bGxfZnJhbWVzID0gcGRldi0+ZmlsbF9mcmFtZTsKKwkJCXBkZXYtPmZ1bGxfZnJhbWVzX3RhaWwgPSBwZGV2LT5mdWxsX2ZyYW1lczsKKwkJfQorCQllbHNlIHsKKwkJCXBkZXYtPmZ1bGxfZnJhbWVzX3RhaWwtPm5leHQgPSBwZGV2LT5maWxsX2ZyYW1lOworCQkJcGRldi0+ZnVsbF9mcmFtZXNfdGFpbCA9IHBkZXYtPmZpbGxfZnJhbWU7CisJCX0KKwl9CisJaWYgKHBkZXYtPmVtcHR5X2ZyYW1lcyAhPSBOVUxMKSB7CisJCS8qIFdlIGhhdmUgZW1wdHkgZnJhbWVzIGF2YWlsYWJsZS4gVGhhdCdzIGVhc3kgKi8KKwkJcGRldi0+ZmlsbF9mcmFtZSA9IHBkZXYtPmVtcHR5X2ZyYW1lczsKKwkJcGRldi0+ZW1wdHlfZnJhbWVzID0gcGRldi0+ZW1wdHlfZnJhbWVzLT5uZXh0OworCX0KKwllbHNlIHsKKwkJLyogSG1tLiBUYWtlIGl0IGZyb20gdGhlIGZ1bGwgbGlzdCAqLworI2lmIFBXQ19ERUJVRworCQkvKiBzYW5pdHkgY2hlY2sgKi8KKwkJaWYgKHBkZXYtPmZ1bGxfZnJhbWVzID09IE5VTEwpIHsKKwkJCUVycigiTmVpdGhlciBlbXB0eSBvciBmdWxsIGZyYW1lcyBhdmFpbGFibGUhXG4iKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkZXYtPnB0cmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisjZW5kaWYKKwkJcGRldi0+ZmlsbF9mcmFtZSA9IHBkZXYtPmZ1bGxfZnJhbWVzOworCQlwZGV2LT5mdWxsX2ZyYW1lcyA9IHBkZXYtPmZ1bGxfZnJhbWVzLT5uZXh0OworCQlyZXQgPSAxOworCX0KKwlwZGV2LT5maWxsX2ZyYW1lLT5uZXh0ID0gTlVMTDsKKyNpZiBQV0NfREVCVUcKKwlUcmFjZShUUkFDRV9TRVFVRU5DRSwgIkFzc2lnbmluZyBzZXF1ZW5jZSBudW1iZXIgJWQuXG4iLCBwZGV2LT5zZXF1ZW5jZSk7CisJcGRldi0+ZmlsbF9mcmFtZS0+c2VxdWVuY2UgPSBwZGV2LT5zZXF1ZW5jZSsrOworI2VuZGlmCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRldi0+cHRybG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKworLyoqCisgIFxicmllZiBSZXNldCBhbGwgYnVmZmVycywgcG9pbnRlcnMgYW5kIGxpc3RzLCBleGNlcHQgZm9yIHRoZSBpbWFnZV91c2VkW10gYnVmZmVyLgorCisgIElmIHRoZSBpbWFnZV91c2VkW10gYnVmZmVyIGlzIGNsZWFyZWQgdG9vLCBtbWFwKCkvVklESU9DU1lOQyB3aWxsIHJ1biBpbnRvIHRyb3VibGUuCisgKi8KK3N0YXRpYyB2b2lkIHB3Y19yZXNldF9idWZmZXJzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGRldi0+cHRybG9jaywgZmxhZ3MpOworCXBkZXYtPmZ1bGxfZnJhbWVzID0gTlVMTDsKKwlwZGV2LT5mdWxsX2ZyYW1lc190YWlsID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgZGVmYXVsdF9mYnVmczsgaSsrKSB7CisJCXBkZXYtPmZidWZbaV0uZmlsbGVkID0gMDsKKwkJaWYgKGkgPiAwKQorCQkJcGRldi0+ZmJ1ZltpXS5uZXh0ID0gJnBkZXYtPmZidWZbaSAtIDFdOworCQllbHNlCisJCQlwZGV2LT5mYnVmLT5uZXh0ID0gTlVMTDsKKwl9CisJcGRldi0+ZW1wdHlfZnJhbWVzID0gJnBkZXYtPmZidWZbZGVmYXVsdF9mYnVmcyAtIDFdOworCXBkZXYtPmVtcHR5X2ZyYW1lc190YWlsID0gcGRldi0+ZmJ1ZjsKKwlwZGV2LT5yZWFkX2ZyYW1lID0gTlVMTDsKKwlwZGV2LT5maWxsX2ZyYW1lID0gcGRldi0+ZW1wdHlfZnJhbWVzOworCXBkZXYtPmVtcHR5X2ZyYW1lcyA9IHBkZXYtPmVtcHR5X2ZyYW1lcy0+bmV4dDsKKworCXBkZXYtPmltYWdlX3JlYWRfcG9zID0gMDsKKwlwZGV2LT5maWxsX2ltYWdlID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGV2LT5wdHJsb2NrLCBmbGFncyk7Cit9CisKKworLyoqCisgIFxicmllZiBEbyBhbGwgdGhlIGhhbmRsaW5nIGZvciBnZXR0aW5nIG9uZSBmcmFtZTogZ2V0IHBvaW50ZXIsIGRlY29tcHJlc3MsIGFkdmFuY2UgcG9pbnRlcnMuCisgKi8KK3N0YXRpYyBpbnQgcHdjX2hhbmRsZV9mcmFtZShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBkZXYtPnB0cmxvY2ssIGZsYWdzKTsKKwkvKiBGaXJzdCBncmFiIG91ciByZWFkX2ZyYW1lOyB0aGlzIGlzIHJlbW92ZWQgZnJvbSBhbGwgbGlzdHMsIHNvCisJICAgd2UgY2FuIHJlbGVhc2UgdGhlIGxvY2sgYWZ0ZXIgdGhpcyB3aXRob3V0IHByb2JsZW1zICovCisJaWYgKHBkZXYtPnJlYWRfZnJhbWUgIT0gTlVMTCkgeworCQkvKiBUaGlzIGNhbid0IHRoZW9yZXRpY2FsbHkgaGFwcGVuICovCisJCUVycigiSHVoPyBSZWFkIGZyYW1lIHN0aWxsIGluIHVzZT9cbiIpOworCX0KKwllbHNlIHsKKwkJaWYgKHBkZXYtPmZ1bGxfZnJhbWVzID09IE5VTEwpIHsKKwkJCUVycigiV29vcHMuIE5vIGZyYW1lcyByZWFkeS5cbiIpOworCQl9CisJCWVsc2UgeworCQkJcGRldi0+cmVhZF9mcmFtZSA9IHBkZXYtPmZ1bGxfZnJhbWVzOworCQkJcGRldi0+ZnVsbF9mcmFtZXMgPSBwZGV2LT5mdWxsX2ZyYW1lcy0+bmV4dDsKKwkJCXBkZXYtPnJlYWRfZnJhbWUtPm5leHQgPSBOVUxMOworCQl9CisKKwkJaWYgKHBkZXYtPnJlYWRfZnJhbWUgIT0gTlVMTCkgeworI2lmIFBXQ19ERUJVRworCQkJVHJhY2UoVFJBQ0VfU0VRVUVOQ0UsICJEZWNvbXByZXNzaW5nIGZyYW1lICVkXG4iLCBwZGV2LT5yZWFkX2ZyYW1lLT5zZXF1ZW5jZSk7CisjZW5kaWYKKwkJCS8qIERlY29tcHJlc3Npb24gaXMgYSBsZW5naHR5IHByb2Nlc3MsIHNvIGl0J3Mgb3V0c2lkZSBvZiB0aGUgbG9jay4KKwkJCSAgIFRoaXMgZ2l2ZXMgdGhlIGlzb2NfaGFuZGxlciB0aGUgb3Bwb3J0dW5pdHkgdG8gZmlsbCBtb3JlIGZyYW1lcworCQkJICAgaW4gdGhlIG1lYW4gdGltZS4KKwkJCSovCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGV2LT5wdHJsb2NrLCBmbGFncyk7CisJCQlyZXQgPSBwd2NfZGVjb21wcmVzcyhwZGV2KTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwZGV2LT5wdHJsb2NrLCBmbGFncyk7CisKKwkJCS8qIFdlJ3JlIGRvbmUgd2l0aCByZWFkX2J1ZmZlciwgdGFjayBpdCB0byB0aGUgZW5kIG9mIHRoZSBlbXB0eSBidWZmZXIgbGlzdCAqLworCQkJaWYgKHBkZXYtPmVtcHR5X2ZyYW1lcyA9PSBOVUxMKSB7CisJCQkJcGRldi0+ZW1wdHlfZnJhbWVzID0gcGRldi0+cmVhZF9mcmFtZTsKKwkJCQlwZGV2LT5lbXB0eV9mcmFtZXNfdGFpbCA9IHBkZXYtPmVtcHR5X2ZyYW1lczsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXBkZXYtPmVtcHR5X2ZyYW1lc190YWlsLT5uZXh0ID0gcGRldi0+cmVhZF9mcmFtZTsKKwkJCQlwZGV2LT5lbXB0eV9mcmFtZXNfdGFpbCA9IHBkZXYtPnJlYWRfZnJhbWU7CisJCQl9CisJCQlwZGV2LT5yZWFkX2ZyYW1lID0gTlVMTDsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGV2LT5wdHJsb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgIFxicmllZiBBZHZhbmNlIHBvaW50ZXJzIG9mIGltYWdlIGJ1ZmZlciAoYWZ0ZXIgZWFjaCB1c2VyIHJlcXVlc3QpCisqLworc3RhdGljIGlubGluZSB2b2lkIHB3Y19uZXh0X2ltYWdlKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQoreworCXBkZXYtPmltYWdlX3VzZWRbcGRldi0+ZmlsbF9pbWFnZV0gPSAwOworCXBkZXYtPmZpbGxfaW1hZ2UgPSAocGRldi0+ZmlsbF9pbWFnZSArIDEpICUgZGVmYXVsdF9tYnVmczsKK30KKworCisvKiBUaGlzIGdldHMgY2FsbGVkIGZvciB0aGUgSXNvY2hyb25vdXMgcGlwZSAodmlkZW8pLiBUaGlzIGlzIGRvbmUgaW4KKyAqIGludGVycnVwdCB0aW1lLCBzbyBpdCBoYXMgdG8gYmUgZmFzdCwgbm90IGNyYXNoLCBhbmQgbm90IHN0YWxsLiBOZWF0LgorICovCitzdGF0aWMgdm9pZCBwd2NfaXNvY19oYW5kbGVyKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHB3Y19kZXZpY2UgKnBkZXY7CisJaW50IGksIGZzdCwgZmxlbjsKKwlpbnQgYXdha2U7CisJc3RydWN0IHB3Y19mcmFtZV9idWYgKmZidWY7CisJdW5zaWduZWQgY2hhciAqZmlsbHB0ciA9IE5VTEwsICppc29fYnVmID0gTlVMTDsKKworCWF3YWtlID0gMDsKKwlwZGV2ID0gKHN0cnVjdCBwd2NfZGV2aWNlICopdXJiLT5jb250ZXh0OworCWlmIChwZGV2ID09IE5VTEwpIHsKKwkJRXJyKCJpc29jX2hhbmRsZXIoKSBjYWxsZWQgd2l0aCBOVUxMIGRldmljZT8hXG4iKTsKKwkJcmV0dXJuOworCX0KKyNpZmRlZiBQV0NfTUFHSUMKKwlpZiAocGRldi0+bWFnaWMgIT0gUFdDX01BR0lDKSB7CisJCUVycigiaXNvY19oYW5kbGVyKCkgY2FsbGVkIHdpdGggYmFkIG1hZ2ljIVxuIik7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKwlpZiAodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fCB1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCkgeworCQlUcmFjZShUUkFDRV9PUEVOLCAicHdjX2lzb2NfaGFuZGxlcigpOiBVUkIgKCVwKSB1bmxpbmtlZCAlc3N5bmNocm9udW91c2x5LlxuIiwgdXJiLCB1cmItPnN0YXR1cyA9PSAtRU5PRU5UID8gIiIgOiAiYSIpOworCQlyZXR1cm47CisJfQorCWlmICh1cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MgJiYgdXJiLT5zdGF0dXMgIT0gMCkgeworCQljb25zdCBjaGFyICplcnJtc2c7CisKKwkJZXJybXNnID0gIlVua25vd24iOworCQlzd2l0Y2godXJiLT5zdGF0dXMpIHsKKwkJCWNhc2UgLUVOT1NSOgkJZXJybXNnID0gIkJ1ZmZlciBlcnJvciAob3ZlcnJ1bikiOyBicmVhazsKKwkJCWNhc2UgLUVQSVBFOgkJZXJybXNnID0gIlN0YWxsZWQgKGRldmljZSBub3QgcmVzcG9uZGluZykiOyBicmVhazsKKwkJCWNhc2UgLUVPVkVSRkxPVzoJZXJybXNnID0gIkJhYmJsZSAoYmFkIGNhYmxlPykiOyBicmVhazsKKwkJCWNhc2UgLUVQUk9UTzoJCWVycm1zZyA9ICJCaXQtc3R1ZmYgZXJyb3IgKGJhZCBjYWJsZT8pIjsgYnJlYWs7CisJCQljYXNlIC1FSUxTRVE6CQllcnJtc2cgPSAiQ1JDL1RpbWVvdXQgKGNvdWxkIGJlIGFueXRoaW5nKSI7IGJyZWFrOworCQkJY2FzZSAtRVRJTUVET1VUOgllcnJtc2cgPSAiTkFLIChkZXZpY2UgZG9lcyBub3QgcmVzcG9uZCkiOyBicmVhazsKKwkJfQorCQlUcmFjZShUUkFDRV9GTE9XLCAicHdjX2lzb2NfaGFuZGxlcigpIGNhbGxlZCB3aXRoIHN0YXR1cyAlZCBbJXNdLlxuIiwgdXJiLT5zdGF0dXMsIGVycm1zZyk7CisJCS8qIEdpdmUgdXAgYWZ0ZXIgYSBudW1iZXIgb2YgY29udGlndW91cyBlcnJvcnMgb24gdGhlIFVTQiBidXMuIAorCQkgICBBcHBlYXJhbnRseSBzb21ldGhpbmcgaXMgd3Jvbmcgc28gd2Ugc2ltdWxhdGUgYW4gdW5wbHVnIGV2ZW50LgorCQkgKi8KKwkJaWYgKCsrcGRldi0+dmlzb2NfZXJyb3JzID4gTUFYX0lTT0NfRVJST1JTKQorCQl7CisJCQlJbmZvKCJUb28gbWFueSBJU09DIGVycm9ycywgYmFpbGluZyBvdXQuXG4iKTsKKwkJCXBkZXYtPmVycm9yX3N0YXR1cyA9IEVJTzsKKwkJCWF3YWtlID0gMTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcGRldi0+ZnJhbWVxKTsKKwkJfQorCQlnb3RvIGhhbmRsZXJfZW5kOyAvLyB1Z2x5LCBidXQgcHJhY3RpY2FsCisJfQorCisJZmJ1ZiA9IHBkZXYtPmZpbGxfZnJhbWU7CisJaWYgKGZidWYgPT0gTlVMTCkgeworCQlFcnIoInB3Y19pc29jX2hhbmRsZXIgd2l0aG91dCB2YWxpZCBmaWxsIGZyYW1lLlxuIik7CisJCWF3YWtlID0gMTsKKwkJZ290byBoYW5kbGVyX2VuZDsKKwl9CisJZWxzZSB7CisJCWZpbGxwdHIgPSBmYnVmLT5kYXRhICsgZmJ1Zi0+ZmlsbGVkOworCX0KKworCS8qIFJlc2V0IElTT0MgZXJyb3IgY291bnRlci4gV2UgZGlkIGdldCBoZXJlLCBhZnRlciBhbGwuICovCisJcGRldi0+dmlzb2NfZXJyb3JzID0gMDsKKworCS8qIHZzeW5jOiAwID0gZG9uJ3QgY29weSBkYXRhCisJICAgICAgICAgIDEgPSBzeW5jLWh1bnQKKwkgICAgICAgICAgMiA9IHN5bmNoZWQKKwkgKi8KKwkvKiBDb21wYWN0IGRhdGEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CisJCWZzdCAgPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1czsKKwkJZmxlbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKKwkJaXNvX2J1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7CisJCWlmIChmc3QgPT0gMCkgeworCQkJaWYgKGZsZW4gPiAwKSB7IC8qIGlmIHZhbGlkIGRhdGEuLi4gKi8KKwkJCQlpZiAocGRldi0+dnN5bmMgPiAwKSB7IC8qIC4uLmFuZCB3ZSBhcmUgbm90IHN5bmMtaHVudGluZy4uLiAqLworCQkJCQlwZGV2LT52c3luYyA9IDI7CisKKwkJCQkJLyogLi4uY29weSBkYXRhIHRvIGZyYW1lIGJ1ZmZlciwgaWYgcG9zc2libGUgKi8KKwkJCQkJaWYgKGZsZW4gKyBmYnVmLT5maWxsZWQgPiBwZGV2LT5mcmFtZV90b3RhbF9zaXplKSB7CisJCQkJCQlUcmFjZShUUkFDRV9GTE9XLCAiRnJhbWUgYnVmZmVyIG92ZXJmbG93IChmbGVuID0gJWQsIGZyYW1lX3RvdGFsX3NpemUgPSAlZCkuXG4iLCBmbGVuLCBwZGV2LT5mcmFtZV90b3RhbF9zaXplKTsKKwkJCQkJCXBkZXYtPnZzeW5jID0gMDsgLyogSG1tLCBsZXQncyB3YWl0IGZvciBhbiBFT0YgKGVuZC1vZi1mcmFtZSkgKi8KKwkJCQkJCXBkZXYtPnZmcmFtZXNfZXJyb3IrKzsKKwkJCQkJfQorCQkJCQllbHNlIHsKKwkJCQkJCW1lbW1vdmUoZmlsbHB0ciwgaXNvX2J1ZiwgZmxlbik7CisJCQkJCQlmaWxscHRyICs9IGZsZW47CisJCQkJCX0KKwkJCQl9CisJCQkJZmJ1Zi0+ZmlsbGVkICs9IGZsZW47CisJCQl9IC8qIC4uZmxlbiA+IDAgKi8KKworCQkJaWYgKGZsZW4gPCBwZGV2LT52bGFzdF9wYWNrZXRfc2l6ZSkgeworCQkJCS8qIFNob3J0ZXIgcGFja2V0Li4uIFdlIHByb2JhYmx5IGhhdmUgdGhlIGVuZCBvZiBhbiBpbWFnZS1mcmFtZTsgCisJCQkJICAgd2FrZSB1cCByZWFkKCkgcHJvY2VzcyBhbmQgbGV0IHNlbGVjdCgpL3BvbGwoKSBkbyBzb21ldGhpbmcuCisJCQkJICAgRGVjb21wcmVzc2lvbiBpcyBkb25lIGluIHVzZXIgdGltZSBvdmVyIHRoZXJlLgorCQkJCSAqLworCQkJCWlmIChwZGV2LT52c3luYyA9PSAyKSB7CisJCQkJCS8qIFRoZSBUb1VDYW0gRnVuIENNT1Mgc2Vuc29yIGNhdXNlcyB0aGUgZmlybXdhcmUgdG8gc2VuZCAyIG9yIDMgYm9ndXMgCisJCQkJCSAgIGZyYW1lcyBvbiB0aGUgVVNCIHdpcmUgYWZ0ZXIgYW4gZXhwb3N1cmUgY2hhbmdlLiBUaGlzIGNvbmRpdGl0aW9uIGlzIAorCQkJCQkgICBob3dldmVyIGRldGVjdGVkICBpbiB0aGUgY2FtIGFuZCBhIGJpdCBpcyBzZXQgaW4gdGhlIGhlYWRlci4KKwkJCQkJICovCisJCQkJCWlmIChwZGV2LT50eXBlID09IDczMCkgeworCQkJCQkJdW5zaWduZWQgY2hhciAqcHRyID0gKHVuc2lnbmVkIGNoYXIgKilmYnVmLT5kYXRhOworCQkJCQkJCisJCQkJCQlpZiAocHRyWzFdID09IDEgJiYgcHRyWzBdICYgMHgxMCkgeworI2lmIFBXQ19ERUJVRworCQkJCQkJCURlYnVnKCJIeXVuZGFpIENNT1Mgc2Vuc29yIGJ1Zy4gRHJvcHBpbmcgZnJhbWUgJWQuXG4iLCBmYnVmLT5zZXF1ZW5jZSk7CisjZW5kaWYKKwkJCQkJCQlwZGV2LT5kcm9wX2ZyYW1lcyArPSAyOworCQkJCQkJCXBkZXYtPnZmcmFtZXNfZXJyb3IrKzsKKwkJCQkJCX0KKwkJCQkJCWlmICgocHRyWzBdIF4gcGRldi0+dm1pcnJvcikgJiAweDAxKSB7CisJCQkJCQkJaWYgKHB0clswXSAmIDB4MDEpCisJCQkJCQkJCUluZm8oIlNuYXBzaG90IGJ1dHRvbiBwcmVzc2VkLlxuIik7CisJCQkJCQkJZWxzZQorCQkJCQkJCQlJbmZvKCJTbmFwc2hvdCBidXR0b24gcmVsZWFzZWQuXG4iKTsKKwkJCQkJCX0KKwkJCQkJCWlmICgocHRyWzBdIF4gcGRldi0+dm1pcnJvcikgJiAweDAyKSB7CisJCQkJCQkJaWYgKHB0clswXSAmIDB4MDIpCisJCQkJCQkJCUluZm8oIkltYWdlIGlzIG1pcnJvcmVkLlxuIik7CisJCQkJCQkJZWxzZQorCQkJCQkJCQlJbmZvKCJJbWFnZSBpcyBub3JtYWwuXG4iKTsKKwkJCQkJCX0KKwkJCQkJCXBkZXYtPnZtaXJyb3IgPSBwdHJbMF0gJiAweDAzOworCQkJCQkJLyogU29tZXRpbWVzIHRoZSB0cmFpbGVyIG9mIHRoZSA3MzAgaXMgc3RpbGwgc2VudCBhcyBhIDQgYnl0ZSBwYWNrZXQgCisJCQkJCQkgICBhZnRlciBhIHNob3J0IGZyYW1lOyB0aGlzIGNvbmRpdGlvbiBpcyBmaWx0ZXJlZCBvdXQgc3BlY2lmaWNhbGx5LiBBIDQgYnl0ZQorCQkJCQkJICAgZnJhbWUgZG9lc24ndCBtYWtlIHNlbnNlIGFueXdheS4KKwkJCQkJCSAgIFNvIHdlIGdldCBlaXRoZXIgdGhpcyBzZXF1ZW5jZTogCisJCQkJCQkgICAJZHJvcF9iaXQgc2V0IC0+IDQgYnl0ZSBmcmFtZSAtPiBzaG9ydCBmcmFtZSAtPiBnb29kIGZyYW1lCisJCQkJCQkgICBPciB0aGlzIG9uZToKKwkJCQkJCSAgIAlkcm9wX2JpdCBzZXQgLT4gc2hvcnQgZnJhbWUgLT4gZ29vZCBmcmFtZQorCQkJCQkJICAgU28gd2UgZHJvcCBlaXRoZXIgMyBvciAyIGZyYW1lcyBpbiBhbGwhCisJCQkJCQkgKi8KKwkJCQkJCWlmIChmYnVmLT5maWxsZWQgPT0gNCkKKwkJCQkJCQlwZGV2LT5kcm9wX2ZyYW1lcysrOworCQkJCQl9CisKKwkJCQkJLyogSW4gY2FzZSB3ZSB3ZXJlIGluc3RydWN0ZWQgdG8gZHJvcCB0aGUgZnJhbWUsIGRvIHNvIHNpbGVudGx5LgorCQkJCQkgICBUaGUgYnVmZmVyIHBvaW50ZXJzIGFyZSBub3QgdXBkYXRlZCBlaXRoZXIgKGJ1dCB0aGUgY291bnRlcnMgYXJlIHJlc2V0IGJlbG93KS4KKwkJCQkJICovCisJCQkJCWlmIChwZGV2LT5kcm9wX2ZyYW1lcyA+IDApCisJCQkJCQlwZGV2LT5kcm9wX2ZyYW1lcy0tOworCQkJCQllbHNlIHsKKwkJCQkJCS8qIENoZWNrIGZvciB1bmRlcmZsb3cgZmlyc3QgKi8KKwkJCQkJCWlmIChmYnVmLT5maWxsZWQgPCBwZGV2LT5mcmFtZV90b3RhbF9zaXplKSB7CisJCQkJCQkJVHJhY2UoVFJBQ0VfRkxPVywgIkZyYW1lIGJ1ZmZlciB1bmRlcmZsb3cgKCVkIGJ5dGVzKTsgZGlzY2FyZGVkLlxuIiwgZmJ1Zi0+ZmlsbGVkKTsKKwkJCQkJCQlwZGV2LT52ZnJhbWVzX2Vycm9yKys7CisJCQkJCQl9CisJCQkJCQllbHNlIHsKKwkJCQkJCQkvKiBTZW5kIG9ubHkgb25jZSBwZXIgRU9GICovCisJCQkJCQkJYXdha2UgPSAxOyAvKiBkZWxheSB3YWtlX3VwcyAqLworCisJCQkJCQkJLyogRmluZCBvdXIgbmV4dCBmcmFtZSB0byBmaWxsLiBUaGlzIHdpbGwgYWx3YXlzIHN1Y2NlZWQsIHNpbmNlIHdlCisJCQkJCQkJICogbmljayBhIGZyYW1lIGZyb20gZWl0aGVyIGVtcHR5IG9yIGZ1bGwgbGlzdCwgYnV0IGlmIHdlIGhhZCB0bworCQkJCQkJCSAqIHRha2UgaXQgZnJvbSB0aGUgZnVsbCBsaXN0LCBpdCBtZWFucyBhIGZyYW1lIGdvdCBkcm9wcGVkLgorCQkJCQkJCSAqLworCQkJCQkJCWlmIChwd2NfbmV4dF9maWxsX2ZyYW1lKHBkZXYpKSB7CisJCQkJCQkJCXBkZXYtPnZmcmFtZXNfZHVtcGVkKys7CisJCQkJCQkJCWlmICgocGRldi0+dmZyYW1lX2NvdW50ID4gRlJBTUVfTE9XTUFSSykgJiYgKHB3Y190cmFjZSAmIFRSQUNFX0ZMT1cpKSB7CisJCQkJCQkJCQlpZiAocGRldi0+dmZyYW1lc19kdW1wZWQgPCAyMCkKKwkJCQkJCQkJCQlUcmFjZShUUkFDRV9GTE9XLCAiRHVtcGluZyBmcmFtZSAlZC5cbiIsIHBkZXYtPnZmcmFtZV9jb3VudCk7CisJCQkJCQkJCQlpZiAocGRldi0+dmZyYW1lc19kdW1wZWQgPT0gMjApCisJCQkJCQkJCQkJVHJhY2UoVFJBQ0VfRkxPVywgIkR1bXBpbmcgZnJhbWUgJWQgKGxhc3QgbWVzc2FnZSkuXG4iLCBwZGV2LT52ZnJhbWVfY291bnQpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWZidWYgPSBwZGV2LT5maWxsX2ZyYW1lOworCQkJCQkJfQorCQkJCQl9IC8qICFkcm9wX2ZyYW1lcyAqLworCQkJCQlwZGV2LT52ZnJhbWVfY291bnQrKzsKKwkJCQl9CisJCQkJZmJ1Zi0+ZmlsbGVkID0gMDsKKwkJCQlmaWxscHRyID0gZmJ1Zi0+ZGF0YTsKKwkJCQlwZGV2LT52c3luYyA9IDE7CisJCQl9IC8qIC4uIGZsZW4gPCBsYXN0X3BhY2tldF9zaXplICovCisJCQlwZGV2LT52bGFzdF9wYWNrZXRfc2l6ZSA9IGZsZW47CisJCX0gLyogLi5zdGF0dXMgPT0gMCAqLworI2lmIFBXQ19ERUJVRworCQkvKiBUaGlzIGlzIG5vcm1hbGx5IG5vdCBpbnRlcmVzdGluZyB0byB0aGUgdXNlciwgdW5sZXNzIHlvdSBhcmUgcmVhbGx5IGRlYnVnZ2luZyBzb21ldGhpbmcgKi8KKwkJZWxzZSB7CisJCQlzdGF0aWMgaW50IGlzb19lcnJvciA9IDA7CisJCQlpc29fZXJyb3IrKzsKKwkJCWlmIChpc29fZXJyb3IgPCAyMCkKKwkJCQlUcmFjZShUUkFDRV9GTE9XLCAiSXNvIGZyYW1lICVkIG9mIFVTQiBoYXMgZXJyb3IgJWRcbiIsIGksIGZzdCk7CisJCX0KKyNlbmRpZgorCX0KKworaGFuZGxlcl9lbmQ6CisJaWYgKGF3YWtlKQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBkZXYtPmZyYW1lcSk7CisKKwl1cmItPmRldiA9IHBkZXYtPnVkZXY7CisJaSA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKGkgIT0gMCkKKwkJRXJyKCJFcnJvciAoJWQpIHJlLXN1Ym1pdHRpbmcgdXJiIGluIHB3Y19pc29jX2hhbmRsZXIuXG4iLCBpKTsKK30KKworCitzdGF0aWMgaW50IHB3Y19pc29jX2luaXQoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBpLCBqLCByZXQ7CisKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZGVzYyA9IE5VTEw7CisKKwlpZiAocGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAocGRldi0+aXNvX2luaXQpCisJCXJldHVybiAwOworCXBkZXYtPnZzeW5jID0gMDsKKwl1ZGV2ID0gcGRldi0+dWRldjsKKworCS8qIEdldCB0aGUgY3VycmVudCBhbHRlcm5hdGUgaW50ZXJmYWNlLCBhZGp1c3QgcGFja2V0IHNpemUgKi8KKwlpZiAoIXVkZXYtPmFjdGNvbmZpZykKKwkJcmV0dXJuIC1FRkFVTFQ7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDUpCisJaWRlc2MgPSAmdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbMF0tPmFsdHNldHRpbmdbcGRldi0+dmFsdGVybmF0ZV07CisjZWxzZQorCWludGYgPSB1c2JfaWZudW1fdG9faWYodWRldiwgMCk7CisJaWYgKGludGYpCisJCWlkZXNjID0gdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKGludGYsIHBkZXYtPnZhbHRlcm5hdGUpOworI2VuZGlmCisJCQorCWlmICghaWRlc2MpCisJCXJldHVybiAtRUZBVUxUOworCisJLyogU2VhcmNoIHZpZGVvIGVuZHBvaW50ICovCisJcGRldi0+dm1heF9wYWNrZXRfc2l6ZSA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBpZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBpKyspCisJCWlmICgoaWRlc2MtPmVuZHBvaW50W2ldLmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIDB4RikgPT0gcGRldi0+dmVuZHBvaW50KSB7CisJCQlwZGV2LT52bWF4X3BhY2tldF9zaXplID0gbGUxNl90b19jcHUoaWRlc2MtPmVuZHBvaW50W2ldLmRlc2Mud01heFBhY2tldFNpemUpOworCQkJYnJlYWs7CisJCX0KKwkKKwlpZiAocGRldi0+dm1heF9wYWNrZXRfc2l6ZSA8IDAgfHwgcGRldi0+dm1heF9wYWNrZXRfc2l6ZSA+IElTT19NQVhfRlJBTUVfU0laRSkgeworCQlFcnIoIkZhaWxlZCB0byBmaW5kIHBhY2tldCBzaXplIGZvciB2aWRlbyBlbmRwb2ludCBpbiBjdXJyZW50IGFsdGVybmF0ZSBzZXR0aW5nLlxuIik7CisJCXJldHVybiAtRU5GSUxFOyAvKiBPZGQgZXJyb3IsIHRoYXQgc2hvdWxkIGJlIG5vdGljYWJsZSAqLworCX0KKworCS8qIFNldCBhbHRlcm5hdGUgaW50ZXJmYWNlICovCisJcmV0ID0gMDsKKwlUcmFjZShUUkFDRV9PUEVOLCAiU2V0dGluZyBhbHRlcm5hdGUgaW50ZXJmYWNlICVkXG4iLCBwZGV2LT52YWx0ZXJuYXRlKTsKKwlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShwZGV2LT51ZGV2LCAwLCBwZGV2LT52YWx0ZXJuYXRlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfSVNPX0JVRlM7IGkrKykgeworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKElTT19GUkFNRVNfUEVSX0RFU0MsIEdGUF9LRVJORUwpOworCQlpZiAodXJiID09IE5VTEwpIHsKKwkJCUVycigiRmFpbGVkIHRvIGFsbG9jYXRlIHVyYiAlZFxuIiwgaSk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKwkJcGRldi0+c2J1ZltpXS51cmIgPSB1cmI7CisJCVRyYWNlKFRSQUNFX01FTU9SWSwgIkFsbG9jYXRlZCBVUkIgYXQgMHglcFxuIiwgdXJiKTsKKwl9CisJaWYgKHJldCkgeworCQkvKiBEZS1hbGxvY2F0ZSBpbiByZXZlcnNlIG9yZGVyICovCisJCXdoaWxlIChpID49IDApIHsKKwkJCWlmIChwZGV2LT5zYnVmW2ldLnVyYiAhPSBOVUxMKQorCQkJCXVzYl9mcmVlX3VyYihwZGV2LT5zYnVmW2ldLnVyYik7CisJCQlwZGV2LT5zYnVmW2ldLnVyYiA9IE5VTEw7CisJCQlpLS07CisJCX0KKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBpbml0IFVSQiBzdHJ1Y3R1cmUgKi8JCisJZm9yIChpID0gMDsgaSA8IE1BWF9JU09fQlVGUzsgaSsrKSB7CisJCXVyYiA9IHBkZXYtPnNidWZbaV0udXJiOworCisJCXVyYi0+aW50ZXJ2YWwgPSAxOyAvLyBkZXZpaworCQl1cmItPmRldiA9IHVkZXY7CisJICAgICAgICB1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUodWRldiwgcGRldi0+dmVuZHBvaW50KTsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkgICAgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyID0gcGRldi0+c2J1ZltpXS5kYXRhOworCSAgICAgICAgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gSVNPX0JVRkZFUl9TSVpFOworCSAgICAgICAgdXJiLT5jb21wbGV0ZSA9IHB3Y19pc29jX2hhbmRsZXI7CisJICAgICAgICB1cmItPmNvbnRleHQgPSBwZGV2OworCQl1cmItPnN0YXJ0X2ZyYW1lID0gMDsKKwkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IElTT19GUkFNRVNfUEVSX0RFU0M7CisJCWZvciAoaiA9IDA7IGogPCBJU09fRlJBTUVTX1BFUl9ERVNDOyBqKyspIHsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ub2Zmc2V0ID0gaiAqIElTT19NQVhfRlJBTUVfU0laRTsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0gcGRldi0+dm1heF9wYWNrZXRfc2l6ZTsKKwkJfQorCX0KKworCS8qIGxpbmsgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0lTT19CVUZTOyBpKyspIHsKKwkJcmV0ID0gdXNiX3N1Ym1pdF91cmIocGRldi0+c2J1ZltpXS51cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmV0KQorCQkJRXJyKCJpc29jX2luaXQoKSBzdWJtaXRfdXJiICVkIGZhaWxlZCB3aXRoIGVycm9yICVkXG4iLCBpLCByZXQpOworCQllbHNlCisJCQlUcmFjZShUUkFDRV9NRU1PUlksICJVUkIgMHglcCBzdWJtaXR0ZWQuXG4iLCBwZGV2LT5zYnVmW2ldLnVyYik7CisJfQorCisJLyogQWxsIGlzIGRvbmUuLi4gKi8KKwlwZGV2LT5pc29faW5pdCA9IDE7CisJVHJhY2UoVFJBQ0VfT1BFTiwgIjw8IHB3Y19pc29jX2luaXQoKVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHB3Y19pc29jX2NsZWFudXAoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpCit7CisJaW50IGk7CisKKwlUcmFjZShUUkFDRV9PUEVOLCAiPj4gcHdjX2lzb2NfY2xlYW51cCgpXG4iKTsKKwlpZiAocGRldiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBVbmxpbmtpbmcgSVNPQyBidWZmZXJzIG9uZSBieSBvbmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0lTT19CVUZTOyBpKyspIHsKKwkJc3RydWN0IHVyYiAqdXJiOworCisJCXVyYiA9IHBkZXYtPnNidWZbaV0udXJiOworCQlpZiAodXJiICE9IDApIHsKKwkJCWlmIChwZGV2LT5pc29faW5pdCkgeworCQkJCVRyYWNlKFRSQUNFX01FTU9SWSwgIlVubGlua2luZyBVUkIgJXBcbiIsIHVyYik7CisJCQkJdXNiX2tpbGxfdXJiKHVyYik7CisJCQl9CisJCQlUcmFjZShUUkFDRV9NRU1PUlksICJGcmVlaW5nIFVSQlxuIik7CisJCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJCXBkZXYtPnNidWZbaV0udXJiID0gTlVMTDsKKwkJfQorCX0KKworCS8qIFN0b3AgY2FtZXJhLCBidXQgb25seSBpZiB3ZSBhcmUgc3VyZSB0aGUgY2FtZXJhIGlzIHN0aWxsIHRoZXJlICh1bnBsdWcKKwkgICBpcyBzaWduYWxsZWQgYnkgRVBJUEUpIAorCSAqLworCWlmIChwZGV2LT5lcnJvcl9zdGF0dXMgJiYgcGRldi0+ZXJyb3Jfc3RhdHVzICE9IEVQSVBFKSB7CisJCVRyYWNlKFRSQUNFX09QRU4sICJTZXR0aW5nIGFsdGVybmF0ZSBpbnRlcmZhY2UgMC5cbiIpOworCQl1c2Jfc2V0X2ludGVyZmFjZShwZGV2LT51ZGV2LCAwLCAwKTsKKwl9CisKKwlwZGV2LT5pc29faW5pdCA9IDA7CisJVHJhY2UoVFJBQ0VfT1BFTiwgIjw8IHB3Y19pc29jX2NsZWFudXAoKVxuIik7Cit9CisKK2ludCBwd2NfdHJ5X3ZpZGVvX21vZGUoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG5ld19mcHMsIGludCBuZXdfY29tcHJlc3Npb24sIGludCBuZXdfc25hcHNob3QpCit7CisJaW50IHJldCwgc3RhcnQ7CisKKwkvKiBTdG9wIGlzb2Mgc3R1ZmYgKi8KKwlwd2NfaXNvY19jbGVhbnVwKHBkZXYpOworCS8qIFJlc2V0IHBhcmFtZXRlcnMgKi8KKwlwd2NfcmVzZXRfYnVmZmVycyhwZGV2KTsKKwkvKiBUcnkgdG8gc2V0IHZpZGVvIG1vZGUuLi4gKi8KKwlzdGFydCA9IHJldCA9IHB3Y19zZXRfdmlkZW9fbW9kZShwZGV2LCB3aWR0aCwgaGVpZ2h0LCBuZXdfZnBzLCBuZXdfY29tcHJlc3Npb24sIG5ld19zbmFwc2hvdCk7CisJaWYgKHJldCkgeyAKKwkgICAgICAgIFRyYWNlKFRSQUNFX0ZMT1csICJwd2Nfc2V0X3ZpZGVvX21vZGUgYXR0ZW1wdCAxIGZhaWxlZC5cbiIpOworCQkvKiBUaGF0IGZhaWxlZC4uLiByZXN0b3JlIG9sZCBtb2RlICh3ZSBrbm93IHRoYXQgd29ya2VkKSAqLworCQlzdGFydCA9IHB3Y19zZXRfdmlkZW9fbW9kZShwZGV2LCBwZGV2LT52aWV3LngsIHBkZXYtPnZpZXcueSwgcGRldi0+dmZyYW1lcywgcGRldi0+dmNvbXByZXNzaW9uLCBwZGV2LT52c25hcHNob3QpOworCQlpZiAoc3RhcnQpIHsKKwkJICAgICAgICBUcmFjZShUUkFDRV9GTE9XLCAicHdjX3NldF92aWRlb19tb2RlIGF0dGVtcHQgMiBmYWlsZWQuXG4iKTsKKwkJfQorCX0KKwlpZiAoc3RhcnQgPT0gMCkKKwl7CisJCWlmIChwd2NfaXNvY19pbml0KHBkZXYpIDwgMCkKKwkJeworCQkJSW5mbygiRmFpbGVkIHRvIHJlc3RhcnQgSVNPQyB0cmFuc2ZlcnMgaW4gcHdjX3RyeV92aWRlb19tb2RlLlxuIik7CisJCQlyZXQgPSAtRUFHQUlOOyAvKiBsZXQncyB0cnkgYWdhaW4sIHdobyBrbm93cyBpZiBpdCB3b3JrcyBhIHNlY29uZCB0aW1lICovCisJCX0KKwl9CisJcGRldi0+ZHJvcF9mcmFtZXMrKzsgLyogdHJ5IHRvIGF2b2lkIGdhcmJhZ2UgZHVyaW5nIHN3aXRjaCAqLworCXJldHVybiByZXQ7IC8qIFJldHVybiBvcmlnaW5hbCBlcnJvciBjb2RlICovCit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFZpZGVvNExpbnV4IGZ1bmN0aW9ucyAqLworCitzdGF0aWMgaW50IHB3Y192aWRlb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCBpOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOworCXN0cnVjdCBwd2NfZGV2aWNlICpwZGV2OworCisJVHJhY2UoVFJBQ0VfT1BFTiwgIj4+IHZpZGVvX29wZW4gY2FsbGVkKHZkZXYgPSAweCVwKS5cbiIsIHZkZXYpOworCQorCXBkZXYgPSAoc3RydWN0IHB3Y19kZXZpY2UgKil2ZGV2LT5wcml2OworCWlmIChwZGV2ID09IE5VTEwpCisJCUJVRygpOworCWlmIChwZGV2LT52b3BlbikKKwkJcmV0dXJuIC1FQlVTWTsKKwkKKwlkb3duKCZwZGV2LT5tb2Rsb2NrKTsKKwlpZiAoIXBkZXYtPnVzYl9pbml0KSB7CisJCVRyYWNlKFRSQUNFX09QRU4sICJEb2luZyBmaXJzdCB0aW1lIGluaXRpYWxpemF0aW9uLlxuIik7CisJCXBkZXYtPnVzYl9pbml0ID0gMTsKKwkJCisJCWlmIChwd2NfdHJhY2UgJiBUUkFDRV9PUEVOKQorCQl7CisJCQkvKiBRdWVyeSBzZW5zb3IgdHlwZSAqLworCQkJY29uc3QgY2hhciAqc2Vuc29yX3R5cGUgPSBOVUxMOworCQkJaW50IHJldDsKKworCQkJcmV0ID0gcHdjX2dldF9jbW9zX3NlbnNvcihwZGV2LCAmaSk7CisJCQlpZiAocmV0ID49IDApCisJCQl7CisJCQkJc3dpdGNoKGkpIHsKKwkJCQljYXNlIDB4MDA6ICBzZW5zb3JfdHlwZSA9ICJIeXVuZGFpIENNT1Mgc2Vuc29yIjsgYnJlYWs7CisJCQkJY2FzZSAweDIwOiAgc2Vuc29yX3R5cGUgPSAiU29ueSBDQ0Qgc2Vuc29yICsgVERBODc4NyI7IGJyZWFrOworCQkJCWNhc2UgMHgyRTogIHNlbnNvcl90eXBlID0gIlNvbnkgQ0NEIHNlbnNvciArIEV4YXMgOThMNTkiOyBicmVhazsKKwkJCQljYXNlIDB4MkY6ICBzZW5zb3JfdHlwZSA9ICJTb255IENDRCBzZW5zb3IgKyBBREkgOTgwNCI7IGJyZWFrOworCQkJCWNhc2UgMHgzMDogIHNlbnNvcl90eXBlID0gIlNoYXJwIENDRCBzZW5zb3IgKyBUREE4Nzg3IjsgYnJlYWs7CisJCQkJY2FzZSAweDNFOiAgc2Vuc29yX3R5cGUgPSAiU2hhcnAgQ0NEIHNlbnNvciArIEV4YXMgOThMNTkiOyBicmVhazsKKwkJCQljYXNlIDB4M0Y6ICBzZW5zb3JfdHlwZSA9ICJTaGFycCBDQ0Qgc2Vuc29yICsgQURJIDk4MDQiOyBicmVhazsKKwkJCQljYXNlIDB4NDA6ICBzZW5zb3JfdHlwZSA9ICJVUEEgMTAyMSBzZW5zb3IiOyBicmVhazsKKwkJCQljYXNlIDB4MTAwOiBzZW5zb3JfdHlwZSA9ICJWR0Egc2Vuc29yIjsgYnJlYWs7CisJCQkJY2FzZSAweDEwMTogc2Vuc29yX3R5cGUgPSAiUEFMIE1SIHNlbnNvciI7IGJyZWFrOworCQkJCWRlZmF1bHQ6ICAgIHNlbnNvcl90eXBlID0gInVua25vd24gdHlwZSBvZiBzZW5zb3IiOyBicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoc2Vuc29yX3R5cGUgIT0gTlVMTCkKKwkJCQlJbmZvKCJUaGlzICVzIGNhbWVyYSBpcyBlcXVpcHBlZCB3aXRoIGEgJXMgKCVkKS5cbiIsIHBkZXYtPnZkZXYtPm5hbWUsIHNlbnNvcl90eXBlLCBpKTsKKwkJfQorCX0KKworCS8qIFR1cm4gb24gY2FtZXJhICovCisJaWYgKHBvd2VyX3NhdmUpIHsKKwkJaSA9IHB3Y19jYW1lcmFfcG93ZXIocGRldiwgMSk7CisJCWlmIChpIDwgMCkKKwkJCUluZm8oIkZhaWxlZCB0byByZXN0b3JlIHBvd2VyIHRvIHRoZSBjYW1lcmEhICglZClcbiIsIGkpOworCX0KKwkvKiBTZXQgTEVEIG9uL29mZiB0aW1lICovCisJaWYgKHB3Y19zZXRfbGVkcyhwZGV2LCBsZWRfb24sIGxlZF9vZmYpIDwgMCkKKwkJSW5mbygiRmFpbGVkIHRvIHNldCBMRUQgb24vb2ZmIHRpbWUuXG4iKTsKKwkKKwlwd2NfY29uc3RydWN0KHBkZXYpOyAvKiBzZXQgbWluL21heCBzaXplcyBjb3JyZWN0ICovCisKKwkvKiBTbyBmYXIsIHNvIGdvb2QuIEFsbG9jYXRlIG1lbW9yeS4gKi8KKwlpID0gcHdjX2FsbG9jYXRlX2J1ZmZlcnMocGRldik7CisJaWYgKGkgPCAwKSB7CisJCVRyYWNlKFRSQUNFX09QRU4sICJGYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIG1lbW9yeS5cbiIpOworCQl1cCgmcGRldi0+bW9kbG9jayk7CisJCXJldHVybiBpOworCX0KKwkKKwkvKiBSZXNldCBidWZmZXJzICYgcGFyYW1ldGVycyAqLworCXB3Y19yZXNldF9idWZmZXJzKHBkZXYpOworCWZvciAoaSA9IDA7IGkgPCBkZWZhdWx0X21idWZzOyBpKyspCisJCXBkZXYtPmltYWdlX3VzZWRbaV0gPSAwOworCXBkZXYtPnZmcmFtZV9jb3VudCA9IDA7CisJcGRldi0+dmZyYW1lc19kdW1wZWQgPSAwOworCXBkZXYtPnZmcmFtZXNfZXJyb3IgPSAwOworCXBkZXYtPnZpc29jX2Vycm9ycyA9IDA7CisJcGRldi0+ZXJyb3Jfc3RhdHVzID0gMDsKKyNpZiBQV0NfREVCVUcKKwlwZGV2LT5zZXF1ZW5jZSA9IDA7CisjZW5kaWYKKwlwd2NfY29uc3RydWN0KHBkZXYpOyAvKiBzZXQgbWluL21heCBzaXplcyBjb3JyZWN0ICovCisKKwkvKiBTZXQgc29tZSBkZWZhdWx0cyAqLworCXBkZXYtPnZzbmFwc2hvdCA9IDA7CisKKwkvKiBTdGFydCBpc28gcGlwZSBmb3IgdmlkZW87IGZpcnN0IHRyeSB0aGUgbGFzdCB1c2VkIHZpZGVvIHNpemUKKwkgICAob3IgdGhlIGRlZmF1bHQgb25lKTsgaWYgdGhhdCBmYWlscyB0cnkgUUNJRi8xMCBvciBRU0lGLzEwOworCSAgIGl0IHRoYXQgZmFpbHMgdG9vLCBnaXZlIHVwLgorCSAqLworCWkgPSBwd2Nfc2V0X3ZpZGVvX21vZGUocGRldiwgcHdjX2ltYWdlX3NpemVzW3BkZXYtPnZzaXplXS54LCBwd2NfaW1hZ2Vfc2l6ZXNbcGRldi0+dnNpemVdLnksIHBkZXYtPnZmcmFtZXMsIHBkZXYtPnZjb21wcmVzc2lvbiwgMCk7CisJaWYgKGkpCXsKKwkJVHJhY2UoVFJBQ0VfT1BFTiwgIkZpcnN0IGF0dGVtcHQgYXQgc2V0X3ZpZGVvX21vZGUgZmFpbGVkLlxuIik7CisJCWlmIChwZGV2LT50eXBlID09IDczMCB8fCBwZGV2LT50eXBlID09IDc0MCB8fCBwZGV2LT50eXBlID09IDc1MCkKKwkJCWkgPSBwd2Nfc2V0X3ZpZGVvX21vZGUocGRldiwgcHdjX2ltYWdlX3NpemVzW1BTWl9RU0lGXS54LCBwd2NfaW1hZ2Vfc2l6ZXNbUFNaX1FTSUZdLnksIDEwLCBwZGV2LT52Y29tcHJlc3Npb24sIDApOworCQllbHNlCisJCQlpID0gcHdjX3NldF92aWRlb19tb2RlKHBkZXYsIHB3Y19pbWFnZV9zaXplc1tQU1pfUUNJRl0ueCwgcHdjX2ltYWdlX3NpemVzW1BTWl9RQ0lGXS55LCAxMCwgcGRldi0+dmNvbXByZXNzaW9uLCAwKTsKKwl9CisJaWYgKGkpIHsKKwkJVHJhY2UoVFJBQ0VfT1BFTiwgIlNlY29uZCBhdHRlbXB0IGF0IHNldF92aWRlb19tb2RlIGZhaWxlZC5cbiIpOworCQl1cCgmcGRldi0+bW9kbG9jayk7CisJCXJldHVybiBpOworCX0KKwkKKwlpID0gcHdjX2lzb2NfaW5pdChwZGV2KTsKKwlpZiAoaSkgeworCQlUcmFjZShUUkFDRV9PUEVOLCAiRmFpbGVkIHRvIGluaXQgSVNPQyBzdHVmZiA9ICVkLlxuIiwgaSk7CisJCXVwKCZwZGV2LT5tb2Rsb2NrKTsKKwkJcmV0dXJuIGk7CisJfQorCisJcGRldi0+dm9wZW4rKzsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSB2ZGV2OworCXVwKCZwZGV2LT5tb2Rsb2NrKTsKKwlUcmFjZShUUkFDRV9PUEVOLCAiPDwgdmlkZW9fb3BlbigpIHJldHVybnMgMC5cbiIpOworCXJldHVybiAwOworfQorCisvKiBOb3RlIHRoYXQgYWxsIGNsZWFudXAgaXMgZG9uZSBpbiB0aGUgcmV2ZXJzZSBvcmRlciBhcyBpbiBfb3BlbiAqLworc3RhdGljIGludCBwd2NfdmlkZW9fY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldjsKKwlpbnQgaTsKKworCVRyYWNlKFRSQUNFX09QRU4sICI+PiB2aWRlb19jbG9zZSBjYWxsZWQodmRldiA9IDB4JXApLlxuIiwgdmRldik7CisKKwlwZGV2ID0gKHN0cnVjdCBwd2NfZGV2aWNlICopdmRldi0+cHJpdjsKKwlpZiAocGRldi0+dm9wZW4gPT0gMCkKKwkJSW5mbygidmlkZW9fY2xvc2UoKSBjYWxsZWQgb24gY2xvc2VkIGRldmljZT9cbiIpOworCisJLyogRHVtcCBzdGF0aXN0aWNzLCBidXQgb25seSBpZiBhIHJlYXNvbmFibGUgYW1vdW50IG9mIGZyYW1lcyB3ZXJlCisJICAgcHJvY2Vzc2VkICh0byBwcmV2ZW50IGVuZGxlc3MgbG9nLWVudHJpZXMgaW4gY2FzZSBvZiBzbmFwLXNob3QKKwkgICBwcm9ncmFtcykKKwkgKi8KKwlpZiAocGRldi0+dmZyYW1lX2NvdW50ID4gMjApCisJCUluZm8oIkNsb3NpbmcgdmlkZW8gZGV2aWNlOiAlZCBmcmFtZXMgcmVjZWl2ZWQsIGR1bXBlZCAlZCBmcmFtZXMsICVkIGZyYW1lcyB3aXRoIGVycm9ycy5cbiIsIHBkZXYtPnZmcmFtZV9jb3VudCwgcGRldi0+dmZyYW1lc19kdW1wZWQsIHBkZXYtPnZmcmFtZXNfZXJyb3IpOworCisJc3dpdGNoIChwZGV2LT50eXBlKQorCSB7CisJICBjYXNlIDY3NToKKwkgIGNhc2UgNjgwOgorCSAgY2FzZSA2OTA6CisJICBjYXNlIDcyMDoKKwkgIGNhc2UgNzMwOgorCSAgY2FzZSA3NDA6CisJICBjYXNlIDc1MDoKKwkgICAgcHdjX2RlYzIzX2V4aXQoKTsJLyogVGltb24gJiBLaWFyYSAqLworCSAgICBicmVhazsKKwkgIGNhc2UgNjQ1OgorCSAgY2FzZSA2NDY6CisJICAgIHB3Y19kZWMxX2V4aXQoKTsKKwkgICAgYnJlYWs7CisJIH0KKworCXB3Y19pc29jX2NsZWFudXAocGRldik7CisJcHdjX2ZyZWVfYnVmZmVycyhwZGV2KTsKKworCS8qIFR1cm4gb2ZmIExFRFMgYW5kIHBvd2VyIGRvd24gY2FtZXJhLCBidXQgb25seSB3aGVuIG5vdCB1bnBsdWdnZWQgKi8KKwlpZiAocGRldi0+ZXJyb3Jfc3RhdHVzICE9IEVQSVBFKSB7CisJCS8qIFR1cm4gTEVEcyBvZmYgKi8KKwkJaWYgKHB3Y19zZXRfbGVkcyhwZGV2LCAwLCAwKSA8IDApCisJCQlJbmZvKCJGYWlsZWQgdG8gc2V0IExFRCBvbi9vZmYgdGltZS5cbiIpOworCQlpZiAocG93ZXJfc2F2ZSkgeworCQkJaSA9IHB3Y19jYW1lcmFfcG93ZXIocGRldiwgMCk7CisJCQlpZiAoaSA8IDApCisJCQkJRXJyKCJGYWlsZWQgdG8gcG93ZXIgZG93biBjYW1lcmEgKCVkKVxuIiwgaSk7CisJCX0KKwl9CisJcGRldi0+dm9wZW4gPSAwOworCVRyYWNlKFRSQUNFX09QRU4sICI8PCB2aWRlb19jbG9zZSgpXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqCUZJWE1FOiB3aGF0IGFib3V0IHR3byBwYXJhbGxlbCByZWFkcyA/Pz8/CisgKiAgICAgIEFOU1dFUjogTm90IHN1cHBvcnRlZC4gWW91IGNhbid0IG9wZW4gdGhlIGRldmljZSBtb3JlIHRoYW4gb25jZSwKKyAgICAgICAgICAgICAgICBkZXNwaXRlIHdoYXQgdGhlIFY0TDEgaW50ZXJmYWNlIHNheXMuIEZpcnN0LCBJIGRvbid0IHNlZQorICAgICAgICAgICAgICAgIHRoZSBuZWVkLCBzZWNvbmQgdGhlcmUncyBubyBtZWNoYW5pc20gb2YgYWxlcnRpbmcgdGhlCisgICAgICAgICAgICAgICAgMm5kLzNyZC8uLi4gcHJvY2VzcyBvZiBldmVudHMgbGlrZSBjaGFuZ2luZyBpbWFnZSBzaXplLgorICAgICAgICAgICAgICAgIEFuZCBJIGRvbid0IHNlZSB0aGUgcG9pbnQgb2YgYmxvY2tpbmcgdGhhdCBmb3IgdGhlCisgICAgICAgICAgICAgICAgMm5kLzNyZC8uLi4gcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICBJbiBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudHMgcmVhZGluZyBwYXJhbGxlbCBmcm9tIGFueQorICAgICAgICAgICAgICAgIGRldmljZSBpcyB0cmlja3kgYW55aG93LgorICovCisKK3N0YXRpYyBzc2l6ZV90IHB3Y192aWRlb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqIGJ1ZiwKKwkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldjsKKwlpbnQgbm9ibG9jayA9IGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworICAgICAgICBpbnQgYnl0ZXNfdG9fcmVhZDsKKworCVRyYWNlKFRSQUNFX1JFQUQsICJ2aWRlb19yZWFkKDB4JXAsICVwLCAlWmQpIGNhbGxlZC5cbiIsIHZkZXYsIGJ1ZiwgY291bnQpOworCWlmICh2ZGV2ID09IE5VTEwpCisJCXJldHVybiAtRUZBVUxUOworCXBkZXYgPSB2ZGV2LT5wcml2OworCWlmIChwZGV2ID09IE5VTEwpCisJCXJldHVybiAtRUZBVUxUOworCWlmIChwZGV2LT5lcnJvcl9zdGF0dXMpCisJCXJldHVybiAtcGRldi0+ZXJyb3Jfc3RhdHVzOyAvKiBTb21ldGhpbmcgaGFwcGVuZWQsIHJlcG9ydCB3aGF0LiAqLworCisJLyogSW4gY2FzZSB3ZSdyZSBkb2luZyBwYXJ0aWFsIHJlYWRzLCB3ZSBkb24ndCBoYXZlIHRvIHdhaXQgZm9yIGEgZnJhbWUgKi8KKwlpZiAocGRldi0+aW1hZ2VfcmVhZF9wb3MgPT0gMCkgeworCQkvKiBEbyB3YWl0IHF1ZXVlaW5nIGFjY29yZGluZyB0byB0aGUgKGRvYylib29rICovCisJCWFkZF93YWl0X3F1ZXVlKCZwZGV2LT5mcmFtZXEsICZ3YWl0KTsKKwkJd2hpbGUgKHBkZXYtPmZ1bGxfZnJhbWVzID09IE5VTEwpIHsKKwkJCS8qIENoZWNrIGZvciB1bnBsdWdnZWQvZXRjLiBoZXJlICovCisJCQlpZiAocGRldi0+ZXJyb3Jfc3RhdHVzKSB7CisJCQkJcmVtb3ZlX3dhaXRfcXVldWUoJnBkZXYtPmZyYW1lcSwgJndhaXQpOworCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQkJcmV0dXJuIC1wZGV2LT5lcnJvcl9zdGF0dXMgOworCQkJfQorCSAgICAgICAgICAgICAgICBpZiAobm9ibG9jaykgeworCSAgICAgICAgICAgICAgICAJcmVtb3ZlX3dhaXRfcXVldWUoJnBkZXYtPmZyYW1lcSwgJndhaXQpOworCSAgICAgICAgICAgICAgICAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkgICAgICAgICAgICAgICAgCXJldHVybiAtRVdPVUxEQkxPQ0s7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJICAgICAgICAgICAgICAgIAlyZW1vdmVfd2FpdF9xdWV1ZSgmcGRldi0+ZnJhbWVxLCAmd2FpdCk7CisJICAgICAgICAgICAgICAgIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCSAgICAgICAgICAgICAgICAJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBzY2hlZHVsZSgpOworCSAgICAgICAgICAgICAgIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQl9CisJCXJlbW92ZV93YWl0X3F1ZXVlKCZwZGV2LT5mcmFtZXEsICZ3YWl0KTsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJCS8qIERlY29tcHJlc3MgYW5kIHJlbGVhc2UgZnJhbWUgKi8KKwkJaWYgKHB3Y19oYW5kbGVfZnJhbWUocGRldikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlUcmFjZShUUkFDRV9SRUFELCAiQ29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UuXG4iKTsKKwlpZiAocGRldi0+dnBhbGV0dGUgPT0gVklERU9fUEFMRVRURV9SQVcpCisJCWJ5dGVzX3RvX3JlYWQgPSBwZGV2LT5mcmFtZV9zaXplOworCWVsc2UKKyAJCWJ5dGVzX3RvX3JlYWQgPSBwZGV2LT52aWV3LnNpemU7CisKKwkvKiBjb3B5IGJ5dGVzIHRvIHVzZXIgc3BhY2U7IHdlIGFsbG93IGZvciBwYXJ0aWFsIHJlYWRzICovCisJaWYgKGNvdW50ICsgcGRldi0+aW1hZ2VfcmVhZF9wb3MgPiBieXRlc190b19yZWFkKQorCQljb3VudCA9IGJ5dGVzX3RvX3JlYWQgLSBwZGV2LT5pbWFnZV9yZWFkX3BvczsKKwlpZiAoY29weV90b191c2VyKGJ1ZiwgcGRldi0+aW1hZ2VfcHRyW3BkZXYtPmZpbGxfaW1hZ2VdICsgcGRldi0+aW1hZ2VfcmVhZF9wb3MsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcGRldi0+aW1hZ2VfcmVhZF9wb3MgKz0gY291bnQ7CisJaWYgKHBkZXYtPmltYWdlX3JlYWRfcG9zID49IGJ5dGVzX3RvX3JlYWQpIHsgLyogQWxsIGRhdGEgaGFzIGJlZW4gcmVhZCAqLworCQlwZGV2LT5pbWFnZV9yZWFkX3BvcyA9IDA7CisJCXB3Y19uZXh0X2ltYWdlKHBkZXYpOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcHdjX3ZpZGVvX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldjsKKworCWlmICh2ZGV2ID09IE5VTEwpCisJCXJldHVybiAtRUZBVUxUOworCXBkZXYgPSB2ZGV2LT5wcml2OworCWlmIChwZGV2ID09IE5VTEwpCisJCXJldHVybiAtRUZBVUxUOworCisJcG9sbF93YWl0KGZpbGUsICZwZGV2LT5mcmFtZXEsIHdhaXQpOworCWlmIChwZGV2LT5lcnJvcl9zdGF0dXMpCisJCXJldHVybiBQT0xMRVJSOworCWlmIChwZGV2LT5mdWxsX2ZyYW1lcyAhPSBOVUxMKSAvKiB3ZSBoYXZlIGZyYW1lcyB3YWl0aW5nICovCisJCXJldHVybiAoUE9MTElOIHwgUE9MTFJETk9STSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwd2NfdmlkZW9fZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldjsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworCWlmICh2ZGV2ID09IE5VTEwpCisJCXJldHVybiAtRUZBVUxUOworCXBkZXYgPSB2ZGV2LT5wcml2OworCWlmIChwZGV2ID09IE5VTEwpCisJCXJldHVybiAtRUZBVUxUOworCisJc3dpdGNoIChjbWQpIHsKKwkJLyogUXVlcnkgY2FiYXBpbGl0aWVzICovCisJCWNhc2UgVklESU9DR0NBUDoKKwkJeworCQkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKmNhcHMgPSBhcmc7CisKKwkJCXN0cmNweShjYXBzLT5uYW1lLCB2ZGV2LT5uYW1lKTsKKwkJCWNhcHMtPnR5cGUgPSBWSURfVFlQRV9DQVBUVVJFOworCQkJY2Fwcy0+Y2hhbm5lbHMgPSAxOworCQkJY2Fwcy0+YXVkaW9zID0gMTsKKwkJCWNhcHMtPm1pbndpZHRoICA9IHBkZXYtPnZpZXdfbWluLng7CisJCQljYXBzLT5taW5oZWlnaHQgPSBwZGV2LT52aWV3X21pbi55OworCQkJY2Fwcy0+bWF4d2lkdGggID0gcGRldi0+dmlld19tYXgueDsKKwkJCWNhcHMtPm1heGhlaWdodCA9IHBkZXYtPnZpZXdfbWF4Lnk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIENoYW5uZWwgZnVuY3Rpb25zIChzaW11bGF0ZSAxIGNoYW5uZWwpICovCisJCWNhc2UgVklESU9DR0NIQU46CisJCXsKKwkJCXN0cnVjdCB2aWRlb19jaGFubmVsICp2ID0gYXJnOworCisJCQlpZiAodi0+Y2hhbm5lbCAhPSAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJdi0+ZmxhZ3MgPSAwOworCQkJdi0+dHVuZXJzID0gMDsKKwkJCXYtPnR5cGUgPSBWSURFT19UWVBFX0NBTUVSQTsKKwkJCXN0cmNweSh2LT5uYW1lLCAiV2ViY2FtIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWNhc2UgVklESU9DU0NIQU46CisJCXsKKwkJCS8qIFRoZSBzcGVjIHNheXMgdGhlIGFyZ3VtZW50IGlzIGFuIGludGVnZXIsIGJ1dAorCQkJICAgdGhlIGJ0dHYgZHJpdmVyIHVzZXMgYSB2aWRlb19jaGFubmVsIGFyZywgd2hpY2gKKwkJCSAgIG1ha2VzIHNlbnNlIGJlY2FzdWUgaXQgYWxzbyBoYXMgdGhlIG5vcm0gZmxhZy4KKwkJCSAqLworCQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnYgPSBhcmc7CisJCQlpZiAodi0+Y2hhbm5lbCAhPSAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIDA7CisJCX0KKworCisJCS8qIFBpY3R1cmUgZnVuY3Rpb25zOyBjb250cmFzdCBldGMuICovCisJCWNhc2UgVklESU9DR1BJQ1Q6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwID0gYXJnOworCQkJaW50IHZhbDsKKworCQkJdmFsID0gcHdjX2dldF9icmlnaHRuZXNzKHBkZXYpOworCQkJaWYgKHZhbCA+PSAwKQorCQkJCXAtPmJyaWdodG5lc3MgPSB2YWw7CisJCQllbHNlCisJCQkJcC0+YnJpZ2h0bmVzcyA9IDB4ZmZmZjsKKwkJCXZhbCA9IHB3Y19nZXRfY29udHJhc3QocGRldik7CisJCQlpZiAodmFsID49IDApCisJCQkJcC0+Y29udHJhc3QgPSB2YWw7CisJCQllbHNlCisJCQkJcC0+Y29udHJhc3QgPSAweGZmZmY7CisJCQkvKiBHYW1tYSwgV2hpdGVuZXNzLCB3aGF0J3MgdGhlIGRpZmZlcmVuY2U/IDopICovCisJCQl2YWwgPSBwd2NfZ2V0X2dhbW1hKHBkZXYpOworCQkJaWYgKHZhbCA+PSAwKQorCQkJCXAtPndoaXRlbmVzcyA9IHZhbDsKKwkJCWVsc2UKKwkJCQlwLT53aGl0ZW5lc3MgPSAweGZmZmY7CisJCQl2YWwgPSBwd2NfZ2V0X3NhdHVyYXRpb24ocGRldik7CisJCQlpZiAodmFsID49IDApCisJCQkJcC0+Y29sb3VyID0gdmFsOworCQkJZWxzZQorCQkJCXAtPmNvbG91ciA9IDB4ZmZmZjsKKwkJCXAtPmRlcHRoID0gMjQ7CisJCQlwLT5wYWxldHRlID0gcGRldi0+dnBhbGV0dGU7CisJCQlwLT5odWUgPSAweEZGRkY7IC8qIE4vQSAqLworCQkJYnJlYWs7CisJCX0KKworCQljYXNlIFZJRElPQ1NQSUNUOgorCQl7CisJCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcCA9IGFyZzsKKwkJCS8qCisJCQkgKglGSVhNRToJU3VwcG9zZSB3ZSBhcmUgbWlkIHJlYWQKKwkJCSAgICAgICAgQU5TV0VSOiBObyBwcm9ibGVtOiB0aGUgZmlybXdhcmUgb2YgdGhlIGNhbWVyYQorCQkJICAgICAgICAgICAgICAgIGNhbiBoYW5kbGUgYnJpZ2h0bmVzcy9jb250cmFzdC9ldGMKKwkJCSAgICAgICAgICAgICAgICBjaGFuZ2VzIGF0IF9hbnlfIHRpbWUsIGFuZCB0aGUgcGFsZXR0ZQorCQkJICAgICAgICAgICAgICAgIGlzIHVzZWQgZXhhY3RseSBvbmNlIGluIHRoZSB1bmNvbXByZXNzCisJCQkgICAgICAgICAgICAgICAgcm91dGluZS4KKwkJCSAqLworCQkJcHdjX3NldF9icmlnaHRuZXNzKHBkZXYsIHAtPmJyaWdodG5lc3MpOworCQkJcHdjX3NldF9jb250cmFzdChwZGV2LCBwLT5jb250cmFzdCk7CisJCQlwd2Nfc2V0X2dhbW1hKHBkZXYsIHAtPndoaXRlbmVzcyk7CisJCQlwd2Nfc2V0X3NhdHVyYXRpb24ocGRldiwgcC0+Y29sb3VyKTsKKwkJCWlmIChwLT5wYWxldHRlICYmIHAtPnBhbGV0dGUgIT0gcGRldi0+dnBhbGV0dGUpIHsKKwkJCQlzd2l0Y2ggKHAtPnBhbGV0dGUpIHsKKwkJCQkJY2FzZSBWSURFT19QQUxFVFRFX1lVVjQyMFA6CisJCQkJCWNhc2UgVklERU9fUEFMRVRURV9SQVc6CisJCQkJCQlwZGV2LT52cGFsZXR0ZSA9IHAtPnBhbGV0dGU7CisJCQkJCQlyZXR1cm4gcHdjX3RyeV92aWRlb19tb2RlKHBkZXYsIHBkZXYtPmltYWdlLngsIHBkZXYtPmltYWdlLnksIHBkZXYtPnZmcmFtZXMsIHBkZXYtPnZjb21wcmVzc2lvbiwgcGRldi0+dnNuYXBzaG90KTsKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJfQorCisJCS8qIFdpbmRvdy9zaXplIHBhcmFtZXRlcnMgKi8JCQorCQljYXNlIFZJRElPQ0dXSU46CisJCXsKKwkJCXN0cnVjdCB2aWRlb193aW5kb3cgKnZ3ID0gYXJnOworCQkJCisJCQl2dy0+eCA9IDA7CisJCQl2dy0+eSA9IDA7CisJCQl2dy0+d2lkdGggPSBwZGV2LT52aWV3Lng7CisJCQl2dy0+aGVpZ2h0ID0gcGRldi0+dmlldy55OworCQkJdnctPmNocm9tYWtleSA9IDA7CisJCQl2dy0+ZmxhZ3MgPSAocGRldi0+dmZyYW1lcyA8PCBQV0NfRlBTX1NISUZUKSB8IAorCQkJICAgICAgICAgICAocGRldi0+dnNuYXBzaG90ID8gUFdDX0ZQU19TTkFQU0hPVCA6IDApOworCQkJYnJlYWs7CisJCX0KKwkJCisJCWNhc2UgVklESU9DU1dJTjoKKwkJeworCQkJc3RydWN0IHZpZGVvX3dpbmRvdyAqdncgPSBhcmc7CisJCQlpbnQgZnBzLCBzbmFwc2hvdCwgcmV0OworCisJCQlmcHMgPSAodnctPmZsYWdzICYgUFdDX0ZQU19GUk1BU0spID4+IFBXQ19GUFNfU0hJRlQ7CisJCQlzbmFwc2hvdCA9IHZ3LT5mbGFncyAmIFBXQ19GUFNfU05BUFNIT1Q7CisJCQlpZiAoZnBzID09IDApCisJCQkJZnBzID0gcGRldi0+dmZyYW1lczsKKwkJCWlmIChwZGV2LT52aWV3LnggPT0gdnctPndpZHRoICYmIHBkZXYtPnZpZXcueSAmJiBmcHMgPT0gcGRldi0+dmZyYW1lcyAmJiBzbmFwc2hvdCA9PSBwZGV2LT52c25hcHNob3QpCisJCQkJcmV0dXJuIDA7CisJCQlyZXQgPSBwd2NfdHJ5X3ZpZGVvX21vZGUocGRldiwgdnctPndpZHRoLCB2dy0+aGVpZ2h0LCBmcHMsIHBkZXYtPnZjb21wcmVzc2lvbiwgc25hcHNob3QpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQkJYnJlYWs7CQkKKwkJfQorCQkKKwkJLyogV2UgZG9uJ3QgaGF2ZSBvdmVybGF5IHN1cHBvcnQgKHlldCkgKi8KKwkJY2FzZSBWSURJT0NHRkJVRjoKKwkJeworCQkJc3RydWN0IHZpZGVvX2J1ZmZlciAqdmIgPSBhcmc7CisKKwkJCW1lbXNldCh2YiwwLHNpemVvZigqdmIpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogbW1hcCgpIGZ1bmN0aW9ucyAqLworCQljYXNlIFZJRElPQ0dNQlVGOgorCQl7CisJCQkvKiBUZWxsIHRoZSB1c2VyIHByb2dyYW0gaG93IG11Y2ggbWVtb3J5IGlzIG5lZWRlZCBmb3IgYSBtbWFwKCkgKi8KKwkJCXN0cnVjdCB2aWRlb19tYnVmICp2bSA9IGFyZzsKKwkJCWludCBpOworCisJCQltZW1zZXQodm0sIDAsIHNpemVvZigqdm0pKTsKKwkJCXZtLT5zaXplID0gZGVmYXVsdF9tYnVmcyAqIHBkZXYtPmxlbl9wZXJfaW1hZ2U7CisJCQl2bS0+ZnJhbWVzID0gZGVmYXVsdF9tYnVmczsgLyogZG91YmxlIGJ1ZmZlcmluZyBzaG91bGQgYmUgZW5vdWdoIGZvciBtb3N0IGFwcGxpY2F0aW9ucyAqLworCQkJZm9yIChpID0gMDsgaSA8IGRlZmF1bHRfbWJ1ZnM7IGkrKykKKwkJCQl2bS0+b2Zmc2V0c1tpXSA9IGkgKiBwZGV2LT5sZW5fcGVyX2ltYWdlOworCQkJYnJlYWs7CisJCX0KKworCQljYXNlIFZJRElPQ01DQVBUVVJFOgorCQl7CisJCQkvKiBTdGFydCBjYXB0dXJlIGludG8gYSBnaXZlbiBpbWFnZSBidWZmZXIgKGNhbGxlZCAnZnJhbWUnIGluIHZpZGVvX21tYXAgc3RydWN0dXJlKSAqLworCQkJc3RydWN0IHZpZGVvX21tYXAgKnZtID0gYXJnOworCisJCQlUcmFjZShUUkFDRV9SRUFELCAiVklESU9DTUNBUFRVUkU6ICVkeCVkLCBmcmFtZSAlZCwgZm9ybWF0ICVkXG4iLCB2bS0+d2lkdGgsIHZtLT5oZWlnaHQsIHZtLT5mcmFtZSwgdm0tPmZvcm1hdCk7CisJCQlpZiAodm0tPmZyYW1lIDwgMCB8fCB2bS0+ZnJhbWUgPj0gZGVmYXVsdF9tYnVmcykKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJLyogeGF3dHYgaXMgbmFzdHkuIEl0IHByb2JlcyB0aGUgYXZhaWxhYmxlIHBhbGV0dGVzCisJCQkgICBieSBzZXR0aW5nIGEgdmVyeSBzbWFsbCBpbWFnZSBzaXplIGFuZCB0cnlpbmcKKwkJCSAgIHZhcmlvdXMgcGFsZXR0ZXMuLi4gVGhlIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQKKwkJCSAgIHN1Y2ggc21hbGwgaW1hZ2VzLCBzbyBJJ20gd29ya2luZyBhcm91bmQgaXQuCisJCQkgKi8KKwkJCWlmICh2bS0+Zm9ybWF0KQorCQkJeworCQkJCXN3aXRjaCAodm0tPmZvcm1hdCkKKwkJCQl7CisJCQkJCWNhc2UgVklERU9fUEFMRVRURV9ZVVY0MjBQOgorCQkJCQljYXNlIFZJREVPX1BBTEVUVEVfUkFXOgorCQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKCh2bS0+d2lkdGggIT0gcGRldi0+dmlldy54IHx8IHZtLT5oZWlnaHQgIT0gcGRldi0+dmlldy55KSAmJgorCQkJICAgICh2bS0+d2lkdGggPj0gcGRldi0+dmlld19taW4ueCAmJiB2bS0+aGVpZ2h0ID49IHBkZXYtPnZpZXdfbWluLnkpKSB7CisJCQkJaW50IHJldDsKKworCQkJCVRyYWNlKFRSQUNFX09QRU4sICJWSURJT0NNQ0FQVFVSRTogY2hhbmdpbmcgc2l6ZSB0byBwbGVhc2UgeGF3dHYgOi0oLlxuIik7CisJCQkJcmV0ID0gcHdjX3RyeV92aWRlb19tb2RlKHBkZXYsIHZtLT53aWR0aCwgdm0tPmhlaWdodCwgcGRldi0+dmZyYW1lcywgcGRldi0+dmNvbXByZXNzaW9uLCBwZGV2LT52c25hcHNob3QpOworCQkJCWlmIChyZXQpCisJCQkJCXJldHVybiByZXQ7CisJCQl9IC8qIC4uLiBzaXplIG1pc21hdGNoICovCisKKwkJCS8qIEZJWE1FOiBzaG91bGQgd2UgbG9jayBoZXJlPyAqLworCQkJaWYgKHBkZXYtPmltYWdlX3VzZWRbdm0tPmZyYW1lXSkKKwkJCQlyZXR1cm4gLUVCVVNZOwkvKiBidWZmZXIgd2Fzbid0IGF2YWlsYWJsZS4gQnVtbWVyICovCisJCQlwZGV2LT5pbWFnZV91c2VkW3ZtLT5mcmFtZV0gPSAxOworCisJCQkvKiBPa2F5LCB3ZSdyZSBkb25lIGhlcmUuIEluIHRoZSBTWU5DIGNhbGwgd2Ugd2FpdCB1bnRpbCBhIAorCQkJICAgZnJhbWUgY29tZXMgYXZhaWxhYmxlLCB0aGVuIGV4cGFuZCBpbWFnZSBpbnRvIHRoZSBnaXZlbiAKKwkJCSAgIGJ1ZmZlci4KKwkJCSAgIEluIGNvbnRyYXN0IHRvIHRoZSBDUGlBIGNhbSB0aGUgUGhpbGlwcyBjYW1zIGRlbGl2ZXIgYQorCQkJICAgY29uc3RhbnQgc3RyZWFtLCBhbG1vc3QgbGlrZSBhIGdyYWJiZXIgY2FyZC4gQWxzbywKKwkJCSAgIHdlIGhhdmUgc2VwYXJhdGUgYnVmZmVycyBmb3IgdGhlIHJhd2RhdGEgYW5kIHRoZSBpbWFnZSwKKwkJCSAgIG1lYW5pbmcgd2UgY2FuIG5lYXJseSBhbHdheXMgZXhwYW5kIGludG8gdGhlIHJlcXVlc3RlZCBidWZmZXIuCisJCQkgKi8KKwkJCVRyYWNlKFRSQUNFX1JFQUQsICJWSURJT0NNQ0FQVFVSRSBkb25lLlxuIik7CisJCQlicmVhazsKKwkJfQorCisJCWNhc2UgVklESU9DU1lOQzoKKwkJeworCQkJLyogVGhlIGRvYyBzYXlzOiAiV2hlbmV2ZXIgYSBidWZmZXIgaXMgdXNlZCBpdCBzaG91bGQKKwkJCSAgIGNhbGwgVklESU9DU1lOQyB0byBmcmVlIHRoaXMgZnJhbWUgdXAgYW5kIGNvbnRpbnVlLiIKKwkJCSAgIAorCQkJICAgVGhlIG9ubHkgb2RkIHRoaW5nIGFib3V0IHRoaXMgd2hvbGUgcHJvY2VkdXJlIGlzIAorCQkJICAgdGhhdCBNQ0FQVFVSRSBmbGFncyB0aGUgYnVmZmVyIGFzICJpbiB1c2UiLCBhbmQKKwkJCSAgIFNZTkMgaW1tZWRpYXRlbHkgdW5tYXJrcyBpdCwgd2hpbGUgaXQgaXNuJ3QgCisJCQkgICBhZnRlciBTWU5DIHRoYXQgeW91IGtub3cgdGhhdCB0aGUgYnVmZmVyIGFjdHVhbGx5CisJCQkgICBnb3QgZmlsbGVkISBTbyB5b3UgYmV0dGVyIG5vdCBzdGFydCBhIENBUFRVUkUgaW4KKwkJCSAgIHRoZSBzYW1lIGZyYW1lIGltbWVkaWF0ZWx5ICh1c2UgZG91YmxlIGJ1ZmZlcmluZykuIAorCQkJICAgVGhpcyBpcyBub3QgYSBwcm9ibGVtIGZvciB0aGlzIGNhbSwgc2luY2UgaXQgaGFzIAorCQkJICAgZXh0cmEgaW50ZXJtZWRpYXRlIGJ1ZmZlcnMsIGJ1dCBhIGhhcmR3YXJlIAorCQkJICAgZ3JhYmJlciBjYXJkIHdpbGwgdGhlbiBvdmVyd3JpdGUgdGhlIGJ1ZmZlciAKKwkJCSAgIHlvdSdyZSB3b3JraW5nIG9uLgorCQkJICovCisJCQlpbnQgKm1idWYgPSBhcmc7CisJCQlpbnQgcmV0OworCisJCQlUcmFjZShUUkFDRV9SRUFELCAiVklESU9DU1lOQyBjYWxsZWQgKCVkKS5cbiIsICptYnVmKTsKKworCQkJLyogYm91bmRzIGNoZWNrICovCisJCQlpZiAoKm1idWYgPCAwIHx8ICptYnVmID49IGRlZmF1bHRfbWJ1ZnMpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkvKiBjaGVjayBpZiB0aGlzIGJ1ZmZlciB3YXMgcmVxdWVzdGVkIGFueXdheSAqLworCQkJaWYgKHBkZXYtPmltYWdlX3VzZWRbKm1idWZdID09IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCS8qIEFkZCBvdXJzZWx2ZXMgdG8gdGhlIGZyYW1lIHdhaXQtcXVldWUuCisJCQkgICAKKwkJCSAgIEZJWE1FOiBuZWVkcyBhdWRpdGluZyBmb3Igc2FmZXR5LgorCQkJICAgUVVFU1RJT046IEluIHdoYXQgcmVzcGVjdD8gSSB0aGluayB0aGF0IHVzaW5nIHRoZQorCQkJICAgICAgICAgICAgIGZyYW1lcSBpcyBzYWZlIG5vdy4KKwkJCSAqLworCQkJYWRkX3dhaXRfcXVldWUoJnBkZXYtPmZyYW1lcSwgJndhaXQpOworCQkJd2hpbGUgKHBkZXYtPmZ1bGxfZnJhbWVzID09IE5VTEwpIHsKKwkJCQlpZiAocGRldi0+ZXJyb3Jfc3RhdHVzKSB7CisJCQkJCXJlbW92ZV93YWl0X3F1ZXVlKCZwZGV2LT5mcmFtZXEsICZ3YWl0KTsKKwkJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJCQkJcmV0dXJuIC1wZGV2LT5lcnJvcl9zdGF0dXM7CisJCQkJfQorCQkJCisJICAgICAgICAgICAgICAgIAlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkgICAgICAgICAgICAgICAgCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcGRldi0+ZnJhbWVxLCAmd2FpdCk7CisJCSAgICAgICAgICAgICAgICAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJICAgICAgICAgICAgICAgIAlyZXR1cm4gLUVSRVNUQVJUU1lTOworCSAgICAgICAgCSAgICAgICAgfQorCSAgICAgICAgICAgICAgICAJc2NoZWR1bGUoKTsKKwkJICAgICAgICAgICAgICAgIHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQl9CisJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcGRldi0+ZnJhbWVxLCAmd2FpdCk7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJCQorCQkJLyogVGhlIGZyYW1lIGlzIHJlYWR5LiBFeHBhbmQgaW4gdGhlIGltYWdlIGJ1ZmZlciAKKwkJCSAgIHJlcXVlc3RlZCBieSB0aGUgdXNlci4gSSBkb24ndCBjYXJlIGlmIHlvdSAKKwkJCSAgIG1tYXAoKSA1IGJ1ZmZlcnMgYW5kIHJlcXVlc3QgZGF0YSBpbiB0aGlzIG9yZGVyOiAKKwkJCSAgIGJ1ZmZlciA0IDIgMyAwIDEgMiAzIDAgNCAzIDEgLiAuIC4KKwkJCSAgIEdyYWJiZXIgaGFyZHdhcmUgbWF5IG5vdCBiZSBzbyBmb3JnaXZpbmcuCisJCQkgKi8KKwkJCVRyYWNlKFRSQUNFX1JFQUQsICJWSURJT0NTWU5DOiBmcmFtZSByZWFkeS5cbiIpOworCQkJcGRldi0+ZmlsbF9pbWFnZSA9ICptYnVmOyAvKiB0ZWxsIGluIHdoaWNoIGJ1ZmZlciB3ZSB3YW50IHRoZSBpbWFnZSB0byBiZSBleHBhbmRlZCAqLworCQkJLyogRGVjb21wcmVzcywgZXRjICovCisJCQlyZXQgPSBwd2NfaGFuZGxlX2ZyYW1lKHBkZXYpOworCQkJcGRldi0+aW1hZ2VfdXNlZFsqbWJ1Zl0gPSAwOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisJCQorCQljYXNlIFZJRElPQ0dBVURJTzoKKwkJeworCQkJc3RydWN0IHZpZGVvX2F1ZGlvICp2ID0gYXJnOworCQkJCisJCQlzdHJjcHkodi0+bmFtZSwgIk1pY3JvcGhvbmUiKTsKKwkJCXYtPmF1ZGlvID0gLTE7IC8qIHVua25vd24gYXVkaW8gbWlub3IgKi8KKwkJCXYtPmZsYWdzID0gMDsKKwkJCXYtPm1vZGUgPSBWSURFT19TT1VORF9NT05POworCQkJdi0+dm9sdW1lID0gMDsKKwkJCXYtPmJhc3MgPSAwOworCQkJdi0+dHJlYmxlID0gMDsKKwkJCXYtPmJhbGFuY2UgPSAweDgwMDA7CisJCQl2LT5zdGVwID0gMTsKKwkJCWJyZWFrOwkKKwkJfQorCQkKKwkJY2FzZSBWSURJT0NTQVVESU86CisJCXsKKwkJCS8qIER1bW15OiBub3RoaW5nIGNhbiBiZSBzZXQgKi8KKwkJCWJyZWFrOworCQl9CisJCQorCQljYXNlIFZJRElPQ0dVTklUOgorCQl7CisJCQlzdHJ1Y3QgdmlkZW9fdW5pdCAqdnUgPSBhcmc7CisJCQkKKwkJCXZ1LT52aWRlbyA9IHBkZXYtPnZkZXYtPm1pbm9yICYgMHgzRjsKKwkJCXZ1LT5hdWRpbyA9IC0xOyAvKiBub3Qga25vd24geWV0ICovCisJCQl2dS0+dmJpID0gLTE7CisJCQl2dS0+cmFkaW8gPSAtMTsKKwkJCXZ1LT50ZWxldGV4dCA9IC0xOworCQkJYnJlYWs7CisJCX0KKwkJZGVmYXVsdDoKKwkJCXJldHVybiBwd2NfaW9jdGwocGRldiwgY21kLCBhcmcpOworCX0gLyogLi5zd2l0Y2ggKi8KKwlyZXR1cm4gMDsKK30JCisKK3N0YXRpYyBpbnQgcHdjX3ZpZGVvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgcHdjX3ZpZGVvX2RvX2lvY3RsKTsKK30KKworCitzdGF0aWMgaW50IHB3Y192aWRlb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBwd2NfZGV2aWNlICpwZGV2OworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgc2l6ZSAgPSB2bWEtPnZtX2VuZC12bWEtPnZtX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgcGFnZSwgcG9zOworCQorCVRyYWNlKFRSQUNFX01FTU9SWSwgIm1tYXAoMHglcCwgMHglbHgsICVsdSkgY2FsbGVkLlxuIiwgdmRldiwgc3RhcnQsIHNpemUpOworCXBkZXYgPSB2ZGV2LT5wcml2OworCQorCXZtYS0+dm1fZmxhZ3MgfD0gVk1fSU87CisKKwlwb3MgPSAodW5zaWduZWQgbG9uZylwZGV2LT5pbWFnZV9kYXRhOworCXdoaWxlIChzaXplID4gMCkgeworCQlwYWdlID0gdm1hbGxvY190b19wZm4oKHZvaWQgKilwb3MpOworCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UsIFBBR0VfU0laRSwgUEFHRV9TSEFSRUQpKQorCQkJcmV0dXJuIC1FQUdBSU47CisKKwkJc3RhcnQgKz0gUEFHRV9TSVpFOworCQlwb3MgKz0gUEFHRV9TSVpFOworCQlpZiAoc2l6ZSA+IFBBR0VfU0laRSkKKwkJCXNpemUgLT0gUEFHRV9TSVpFOworCQllbHNlCisJCQlzaXplID0gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFVTQiBmdW5jdGlvbnMgKi8KKworLyogVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aGVuIGEgbmV3IGRldmljZSBpcyBwbHVnZ2VkIGluIG9yIHRoZSB1c2IgY29yZQorICogaXMgbG9hZGVkLgorICovCisKK3N0YXRpYyBpbnQgdXNiX3B3Y19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiA9IE5VTEw7CisJaW50IHZlbmRvcl9pZCwgcHJvZHVjdF9pZCwgdHlwZV9pZDsKKwlpbnQgaSwgaGludDsKKwlpbnQgZmVhdHVyZXMgPSAwOworCWludCB2aWRlb19uciA9IC0xOyAvKiBkZWZhdWx0OiB1c2UgbmV4dCBhdmFpbGFibGUgZGV2aWNlICovCisJY2hhciBzZXJpYWxfbnVtYmVyWzMwXSwgKm5hbWU7CisKKwkvKiBDaGVjayBpZiB3ZSBjYW4gaGFuZGxlIHRoaXMgZGV2aWNlICovCisJVHJhY2UoVFJBQ0VfUFJPQkUsICJwcm9iZSgpIGNhbGxlZCBbJTA0WCAlMDRYXSwgaWYgJWRcbiIsIAorCQlsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpLAorCQlpbnRmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOworCisJLyogdGhlIGludGVyZmFjZXMgYXJlIHByb2JlZCBvbmUgYnkgb25lLiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZQorCSAgIHZpZGVvIGludGVyZmFjZSAoMCkgbm93LgorCSAgIEludGVyZmFjZSAxIGlzIHRoZSBBdWRpbyBDb250cm9sLCBhbmQgaW50ZXJmYWNlIDIgQXVkaW8gaXRzZWxmLgorCSAqLworCWlmIChpbnRmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIgPiAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXZlbmRvcl9pZCA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCXByb2R1Y3RfaWQgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisKKwlpZiAodmVuZG9yX2lkID09IDB4MDQ3MSkgeworCQlzd2l0Y2ggKHByb2R1Y3RfaWQpIHsKKwkJY2FzZSAweDAzMDI6CisJCQlJbmZvKCJQaGlsaXBzIFBDQTY0NVZDIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiUGhpbGlwcyA2NDUgd2ViY2FtIjsKKwkJCXR5cGVfaWQgPSA2NDU7CisJCQlicmVhazsKKwkJY2FzZSAweDAzMDM6CisJCQlJbmZvKCJQaGlsaXBzIFBDQTY0NlZDIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiUGhpbGlwcyA2NDYgd2ViY2FtIjsKKwkJCXR5cGVfaWQgPSA2NDY7CisJCQlicmVhazsKKwkJY2FzZSAweDAzMDQ6CisJCQlJbmZvKCJBc2tleSBWQzAxMCB0eXBlIDIgVVNCIHdlYmNhbSBkZXRlY3RlZC5cbiIpOworCQkJbmFtZSA9ICJBc2tleSBWQzAxMCB3ZWJjYW0iOworCQkJdHlwZV9pZCA9IDY0NjsKKwkJCWJyZWFrOworCQljYXNlIDB4MDMwNzoKKwkJCUluZm8oIlBoaWxpcHMgUENWQzY3NUsgKFZlc3RhKSBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIlBoaWxpcHMgNjc1IHdlYmNhbSI7CisJCQl0eXBlX2lkID0gNjc1OworCQkJYnJlYWs7CisJCWNhc2UgMHgwMzA4OgorCQkJSW5mbygiUGhpbGlwcyBQQ1ZDNjgwSyAoVmVzdGEgUHJvKSBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIlBoaWxpcHMgNjgwIHdlYmNhbSI7CisJCQl0eXBlX2lkID0gNjgwOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMzBDOgorCQkJSW5mbygiUGhpbGlwcyBQQ1ZDNjkwSyAoVmVzdGEgUHJvIFNjYW4pIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiUGhpbGlwcyA2OTAgd2ViY2FtIjsKKwkJCXR5cGVfaWQgPSA2OTA7CisJCQlicmVhazsKKwkJY2FzZSAweDAzMTA6CisJCQlJbmZvKCJQaGlsaXBzIFBDVkM3MzBLIChUb1VDYW0gRnVuKS9QQ1ZDODMwIChUb1VDYW0gSUkpIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiUGhpbGlwcyA3MzAgd2ViY2FtIjsKKwkJCXR5cGVfaWQgPSA3MzA7CisJCQlicmVhazsKKwkJY2FzZSAweDAzMTE6CisJCQlJbmZvKCJQaGlsaXBzIFBDVkM3NDBLIChUb1VDYW0gUHJvKS9QQ1ZDODQwIChUb1VDYW0gSUkpIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiUGhpbGlwcyA3NDAgd2ViY2FtIjsKKwkJCXR5cGVfaWQgPSA3NDA7CisJCQlicmVhazsKKwkJY2FzZSAweDAzMTI6CisJCQlJbmZvKCJQaGlsaXBzIFBDVkM3NTBLIChUb1VDYW0gUHJvIFNjYW4pIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiUGhpbGlwcyA3NTAgd2ViY2FtIjsKKwkJCXR5cGVfaWQgPSA3NTA7CisJCQlicmVhazsKKwkJY2FzZSAweDAzMTM6CisJCQlJbmZvKCJQaGlsaXBzIFBDVkM3MjBLLzQwIChUb1VDYW0gWFMpIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiUGhpbGlwcyA3MjBLLzQwIHdlYmNhbSI7CisJCQl0eXBlX2lkID0gNzIwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCWJyZWFrOworCQl9CisJfQorCWVsc2UgaWYgKHZlbmRvcl9pZCA9PSAweDA2OUEpIHsKKwkJc3dpdGNoKHByb2R1Y3RfaWQpIHsKKwkJY2FzZSAweDAwMDE6CisJCQlJbmZvKCJBc2tleSBWQzAxMCB0eXBlIDEgVVNCIHdlYmNhbSBkZXRlY3RlZC5cbiIpOworCQkJbmFtZSA9ICJBc2tleSBWQzAxMCB3ZWJjYW0iOworCQkJdHlwZV9pZCA9IDY0NTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FTk9ERVY7CisJCQlicmVhazsKKwkJfQorCX0KKwllbHNlIGlmICh2ZW5kb3JfaWQgPT0gMHgwNDZkKSB7CisJCXN3aXRjaChwcm9kdWN0X2lkKSB7CisJCWNhc2UgMHgwOGIwOgorCQkJSW5mbygiTG9naXRlY2ggUXVpY2tDYW0gUHJvIDMwMDAgVVNCIHdlYmNhbSBkZXRlY3RlZC5cbiIpOworCQkJbmFtZSA9ICJMb2dpdGVjaCBRdWlja0NhbSBQcm8gMzAwMCI7CisJCQl0eXBlX2lkID0gNzQwOyAvKiBDQ0Qgc2Vuc29yICovCisJCQlicmVhazsKKwkJY2FzZSAweDA4YjE6CisJCQlJbmZvKCJMb2dpdGVjaCBRdWlja0NhbSBOb3RlYm9vayBQcm8gVVNCIHdlYmNhbSBkZXRlY3RlZC5cbiIpOworCQkJbmFtZSA9ICJMb2dpdGVjaCBRdWlja0NhbSBOb3RlYm9vayBQcm8iOworCQkJdHlwZV9pZCA9IDc0MDsgLyogQ0NEIHNlbnNvciAqLworCQkJYnJlYWs7CisJCWNhc2UgMHgwOGIyOgorCQkJSW5mbygiTG9naXRlY2ggUXVpY2tDYW0gNDAwMCBQcm8gVVNCIHdlYmNhbSBkZXRlY3RlZC5cbiIpOworCQkJbmFtZSA9ICJMb2dpdGVjaCBRdWlja0NhbSBQcm8gNDAwMCI7CisJCQl0eXBlX2lkID0gNzQwOyAvKiBDQ0Qgc2Vuc29yICovCisJCQlicmVhazsKKwkJY2FzZSAweDA4YjM6CisJCQlJbmZvKCJMb2dpdGVjaCBRdWlja0NhbSBab29tIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiTG9naXRlY2ggUXVpY2tDYW0gWm9vbSI7CisJCQl0eXBlX2lkID0gNzQwOyAvKiBDQ0Qgc2Vuc29yICovCisJCQlicmVhazsKKwkJY2FzZSAweDA4QjQ6CisJCQlJbmZvKCJMb2dpdGVjaCBRdWlja0NhbSBab29tIChuZXcgbW9kZWwpIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiTG9naXRlY2ggUXVpY2tDYW0gWm9vbSI7CisJCQl0eXBlX2lkID0gNzQwOyAvKiBDQ0Qgc2Vuc29yICovCisJCQlicmVhazsKKwkJY2FzZSAweDA4YjU6CisJCQlJbmZvKCJMb2dpdGVjaCBRdWlja0NhbSBPcmJpdC9TcGhlcmUgVVNCIHdlYmNhbSBkZXRlY3RlZC5cbiIpOworCQkJbmFtZSA9ICJMb2dpdGVjaCBRdWlja0NhbSBPcmJpdCI7CisJCQl0eXBlX2lkID0gNzQwOyAvKiBDQ0Qgc2Vuc29yICovCisJCQlmZWF0dXJlcyB8PSBGRUFUVVJFX01PVE9SX1BBTlRJTFQ7CisJCQlicmVhazsKKwkJY2FzZSAweDA4YjY6CisJCWNhc2UgMHgwOGI3OgorCQljYXNlIDB4MDhiODoKKwkJCUluZm8oIkxvZ2l0ZWNoIFF1aWNrQ2FtIGRldGVjdGVkIChyZXNlcnZlZCBJRCkuXG4iKTsKKwkJCW5hbWUgPSAiTG9naXRlY2ggUXVpY2tDYW0gKHJlcy4pIjsKKwkJCXR5cGVfaWQgPSA3MzA7IC8qIEFzc3VtaW5nIENNT1MgKi8KKwkJCWJyZWFrOworICAgICAgICAJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PREVWOworICAgICAgICAJCWJyZWFrOworICAgICAgICAJfQorICAgICAgICB9CisJZWxzZSBpZiAodmVuZG9yX2lkID09IDB4MDU1ZCkgeworCQkvKiBJIGRvbid0IGtub3cgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgQzEwIGFuZCB0aGUgQzMwOworCQkgICBJIHN1cHBvc2UgdGhlIGRpZmZlcmVuY2UgaXMgdGhlIHNlbnNvciwgYnV0IGJvdGggY2FtZXJhcworCQkgICB3b3JrIGVxdWFsbHkgd2VsbCB3aXRoIGEgdHlwZV9pZCBvZiA2NzUKKwkJICovCisJCXN3aXRjaChwcm9kdWN0X2lkKSB7CisJCWNhc2UgMHg5MDAwOgorCQkJSW5mbygiU2Ftc3VuZyBNUEMtQzEwIFVTQiB3ZWJjYW0gZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiU2Ftc3VuZyBNUEMtQzEwIjsKKwkJCXR5cGVfaWQgPSA2NzU7CisJCQlicmVhazsKKwkJY2FzZSAweDkwMDE6CisJCQlJbmZvKCJTYW1zdW5nIE1QQy1DMzAgVVNCIHdlYmNhbSBkZXRlY3RlZC5cbiIpOworCQkJbmFtZSA9ICJTYW1zdW5nIE1QQy1DMzAiOworCQkJdHlwZV9pZCA9IDY3NTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FTk9ERVY7CisJCQlicmVhazsKKwkJfQorCX0KKwllbHNlIGlmICh2ZW5kb3JfaWQgPT0gMHgwNDFlKSB7CisJCXN3aXRjaChwcm9kdWN0X2lkKSB7CisJCWNhc2UgMHg0MDBjOgorCQkJSW5mbygiQ3JlYXRpdmUgTGFicyBXZWJjYW0gNSBkZXRlY3RlZC5cbiIpOworCQkJbmFtZSA9ICJDcmVhdGl2ZSBMYWJzIFdlYmNhbSA1IjsKKwkJCXR5cGVfaWQgPSA3MzA7CisJCQlicmVhazsKKwkJY2FzZSAweDQwMTE6CisJCQlJbmZvKCJDcmVhdGl2ZSBMYWJzIFdlYmNhbSBQcm8gRXggZGV0ZWN0ZWQuXG4iKTsKKwkJCW5hbWUgPSAiQ3JlYXRpdmUgTGFicyBXZWJjYW0gUHJvIEV4IjsKKwkJCXR5cGVfaWQgPSA3NDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PREVWOworCQkJYnJlYWs7CisJCX0KKwl9CisJZWxzZSBpZiAodmVuZG9yX2lkID09IDB4MDRjYykgeworCQlzd2l0Y2gocHJvZHVjdF9pZCkgeworCQljYXNlIDB4ODExNjoKKwkJCUluZm8oIlNvdGVjIEFmaW5hIEV5ZSBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIlNvdGVjIEFmaW5hIEV5ZSI7CisJCQl0eXBlX2lkID0gNzMwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCWJyZWFrOworCQl9CisJfQorCWVsc2UgaWYgKHZlbmRvcl9pZCA9PSAweDA2YmUpIHsKKwkJc3dpdGNoKHByb2R1Y3RfaWQpIHsKKwkJY2FzZSAweDgxMTY6CisJCQkvKiBUaGlzIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGNhbSBhcyB0aGUgU290ZWMgQWZpbmEgRXllICovCisJCQlJbmZvKCJBTUUgQ28uIEFmaW5hIEV5ZSBVU0Igd2ViY2FtIGRldGVjdGVkLlxuIik7CisJCQluYW1lID0gIkFNRSBDby4gQWZpbmEgRXllIjsKKwkJCXR5cGVfaWQgPSA3NTA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PREVWOworCQkJYnJlYWs7CisJCX0KKwkKKwl9CisJZWxzZSBpZiAodmVuZG9yX2lkID09IDB4MGQ4MSkgeworCQlzd2l0Y2gocHJvZHVjdF9pZCkgeworCQljYXNlIDB4MTkwMDoKKwkJCUluZm8oIlZpc2lvbml0ZSBWQ1MtVUMzMDAgVVNCIHdlYmNhbSBkZXRlY3RlZC5cbiIpOworCQkJbmFtZSA9ICJWaXNpb25pdGUgVkNTLVVDMzAwIjsKKwkJCXR5cGVfaWQgPSA3NDA7IC8qIENDRCBzZW5zb3IgKi8KKwkJCWJyZWFrOworCQljYXNlIDB4MTkxMDoKKwkJCUluZm8oIlZpc2lvbml0ZSBWQ1MtVU0xMDAgVVNCIHdlYmNhbSBkZXRlY3RlZC5cbiIpOworCQkJbmFtZSA9ICJWaXNpb25pdGUgVkNTLVVNMTAwIjsKKwkJCXR5cGVfaWQgPSA3MzA7IC8qIENNT1Mgc2Vuc29yICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PREVWOworCQkJYnJlYWs7CisJCX0KKwl9CisJZWxzZSAKKwkJcmV0dXJuIC1FTk9ERVY7IC8qIE5vdCBhbnkgb2YgdGhlIGtub3cgdHlwZXM7IGJ1dCB0aGUgbGlzdCBrZWVwcyBncm93aW5nLiAqLworCisJbWVtc2V0KHNlcmlhbF9udW1iZXIsIDAsIDMwKTsKKwl1c2Jfc3RyaW5nKHVkZXYsIHVkZXYtPmRlc2NyaXB0b3IuaVNlcmlhbE51bWJlciwgc2VyaWFsX251bWJlciwgMjkpOworCVRyYWNlKFRSQUNFX1BST0JFLCAiRGV2aWNlIHNlcmlhbCBudW1iZXIgaXMgJXNcbiIsIHNlcmlhbF9udW1iZXIpOworCisJaWYgKHVkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zID4gMSkKKwkJSW5mbygiV2FybmluZzogbW9yZSB0aGFuIDEgY29uZmlndXJhdGlvbiBhdmFpbGFibGUuXG4iKTsKKworCS8qIEFsbG9jYXRlIHN0cnVjdHVyZSwgaW5pdGlhbGl6ZSBwb2ludGVycywgbXV0ZXhlcywgZXRjLiBhbmQgbGluayBpdCB0byB0aGUgdXNiX2RldmljZSAqLworCXBkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcHdjX2RldmljZSksIEdGUF9LRVJORUwpOworCWlmIChwZGV2ID09IE5VTEwpIHsKKwkJRXJyKCJPb3BzLCBjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBwd2NfZGV2aWNlLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQocGRldiwgMCwgc2l6ZW9mKHN0cnVjdCBwd2NfZGV2aWNlKSk7CisJcGRldi0+dHlwZSA9IHR5cGVfaWQ7CisJcGRldi0+dnNpemUgPSBkZWZhdWx0X3NpemU7CisJcGRldi0+dmZyYW1lcyA9IGRlZmF1bHRfZnBzOworCXN0cmNweShwZGV2LT5zZXJpYWwsIHNlcmlhbF9udW1iZXIpOworCXBkZXYtPmZlYXR1cmVzID0gZmVhdHVyZXM7CisJaWYgKHZlbmRvcl9pZCA9PSAweDA0NkQgJiYgcHJvZHVjdF9pZCA9PSAweDA4QjUpCisJeworCQkvKiBMb2dpdGVjaCBRdWlja0NhbSBPcmJpdAorCSAgICAgICAgICAgVGhlIHJhbmdlcyBoYXZlIGJlZW4gZGV0ZXJtaW5lZCBleHBlcmltZW50YWxseTsgdGhleSBtYXkgZGlmZmVyIGZyb20gY2FtIHRvIGNhbS4KKwkgICAgICAgICAgIEFsc28sIHRoZSBleGFjdCByYW5nZXMgbGVmdC1yaWdodCBhbmQgdXAtZG93biBhcmUgZGlmZmVyZW50IGZvciBteSBjYW0KKwkgICAgICAgICAgKi8KKwkJcGRldi0+YW5nbGVfcmFuZ2UucGFuX21pbiAgPSAtNzAwMDsKKwkJcGRldi0+YW5nbGVfcmFuZ2UucGFuX21heCAgPSAgNzAwMDsKKwkJcGRldi0+YW5nbGVfcmFuZ2UudGlsdF9taW4gPSAtMzAwMDsKKwkJcGRldi0+YW5nbGVfcmFuZ2UudGlsdF9tYXggPSAgMjUwMDsKKwl9CisKKwlpbml0X01VVEVYKCZwZGV2LT5tb2Rsb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcGRldi0+cHRybG9jayk7CisKKwlwZGV2LT51ZGV2ID0gdWRldjsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwZGV2LT5mcmFtZXEpOworCXBkZXYtPnZjb21wcmVzc2lvbiA9IHB3Y19wcmVmZXJyZWRfY29tcHJlc3Npb247CisKKwkvKiBBbGxvY2F0ZSB2aWRlb19kZXZpY2Ugc3RydWN0dXJlICovCisJcGRldi0+dmRldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmIChwZGV2LT52ZGV2ID09IDApCisJeworCQlFcnIoIkVyciwgY2Fubm90IGFsbG9jYXRlIHZpZGVvX2RldmljZSBzdHJ1dHVyZS4gRmFpbGluZyBwcm9iZS4iKTsKKwkJa2ZyZWUocGRldik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1jcHkocGRldi0+dmRldiwgJnB3Y190ZW1wbGF0ZSwgc2l6ZW9mKHB3Y190ZW1wbGF0ZSkpOworCXN0cmNweShwZGV2LT52ZGV2LT5uYW1lLCBuYW1lKTsKKwlwZGV2LT52ZGV2LT5vd25lciA9IFRISVNfTU9EVUxFOworCXZpZGVvX3NldF9kcnZkYXRhKHBkZXYtPnZkZXYsIHBkZXYpOworCisJcGRldi0+cmVsZWFzZSA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKKwlUcmFjZShUUkFDRV9QUk9CRSwgIlJlbGVhc2U6ICUwNHhcbiIsIHBkZXYtPnJlbGVhc2UpOworCisJLyogTm93IHNlYXJjaCBkZXZpY2VfaGludFtdIHRhYmxlIGZvciBhIG1hdGNoLCBzbyB3ZSBjYW4gaGludCBhIG5vZGUgbnVtYmVyLiAqLworCWZvciAoaGludCA9IDA7IGhpbnQgPCBNQVhfREVWX0hJTlRTOyBoaW50KyspIHsKKwkJaWYgKCgoZGV2aWNlX2hpbnRbaGludF0udHlwZSA9PSAtMSkgfHwgKGRldmljZV9oaW50W2hpbnRdLnR5cGUgPT0gcGRldi0+dHlwZSkpICYmCisJCSAgICAgKGRldmljZV9oaW50W2hpbnRdLnBkZXYgPT0gTlVMTCkpIHsKKwkJCS8qIHNvIGZhciwgc28gZ29vZC4uLiB0cnkgc2VyaWFsIG51bWJlciAqLworCQkJaWYgKChkZXZpY2VfaGludFtoaW50XS5zZXJpYWxfbnVtYmVyWzBdID09ICcqJykgfHwgIXN0cmNtcChkZXZpY2VfaGludFtoaW50XS5zZXJpYWxfbnVtYmVyLCBzZXJpYWxfbnVtYmVyKSkgeworCQkJICAgIAkvKiBtYXRjaCEgKi8KKwkJCSAgICAJdmlkZW9fbnIgPSBkZXZpY2VfaGludFtoaW50XS5kZXZpY2Vfbm9kZTsKKwkJCSAgICAJVHJhY2UoVFJBQ0VfUFJPQkUsICJGb3VuZCBoaW50LCB3aWxsIHRyeSB0byByZWdpc3RlciBhcyAvZGV2L3ZpZGVvJWRcbiIsIHZpZGVvX25yKTsKKwkJCSAgICAJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlwZGV2LT52ZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CisJaSA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShwZGV2LT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19ucik7CisJaWYgKGkgPCAwKSB7CisJCUVycigiRmFpbGVkIHRvIHJlZ2lzdGVyIGFzIHZpZGVvIGRldmljZSAoJWQpLlxuIiwgaSk7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKHBkZXYtPnZkZXYpOyAvKiBEcmlwLi4uIGRyaXAuLi4gZHJpcC4uLiAqLworCQlrZnJlZShwZGV2KTsgLyogT29wcywgbm8gbWVtb3J5IGxlYWtzIHBsZWFzZSAqLworCQlyZXR1cm4gLUVJTzsKKwl9CisJZWxzZSB7CisJCUluZm8oIlJlZ2lzdGVyZWQgYXMgL2Rldi92aWRlbyVkLlxuIiwgcGRldi0+dmRldi0+bWlub3IgJiAweDNGKTsKKwl9CisKKwkvKiBvY2N1cHkgc2xvdCAqLworCWlmIChoaW50IDwgTUFYX0RFVl9ISU5UUykgCisJCWRldmljZV9oaW50W2hpbnRdLnBkZXYgPSBwZGV2OworCisJVHJhY2UoVFJBQ0VfUFJPQkUsICJwcm9iZSgpIGZ1bmN0aW9uIHJldHVybmluZyBzdHJ1Y3QgYXQgMHglcC5cbiIsIHBkZXYpOworCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIHBkZXYpOworCXJldHVybiAwOworfQorCisvKiBUaGUgdXNlciBqYW5rZWQgb3V0IHRoZSBjYWJsZS4uLiAqLworc3RhdGljIHZvaWQgdXNiX3B3Y19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBwd2NfZGV2aWNlICpwZGV2OworCWludCBoaW50OworCisJbG9ja19rZXJuZWwoKTsKKwlwZGV2ID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisJaWYgKHBkZXYgPT0gTlVMTCkgeworCQlFcnIoInB3Y19kaXNjb25uZWN0KCkgQ2FsbGVkIHdpdGhvdXQgcHJpdmF0ZSBwb2ludGVyLlxuIik7CisJCWdvdG8gZGlzY29ubmVjdF9vdXQ7CisJfQorCWlmIChwZGV2LT51ZGV2ID09IE5VTEwpIHsKKwkJRXJyKCJwd2NfZGlzY29ubmVjdCgpIGFscmVhZHkgY2FsbGVkIGZvciAlcFxuIiwgcGRldik7CisJCWdvdG8gZGlzY29ubmVjdF9vdXQ7CisJfQorCWlmIChwZGV2LT51ZGV2ICE9IGludGVyZmFjZV90b191c2JkZXYoaW50ZikpIHsKKwkJRXJyKCJwd2NfZGlzY29ubmVjdCgpIFdvb3BzOiBwb2ludGVyIG1pc21hdGNoIHVkZXYvcGRldi5cbiIpOworCQlnb3RvIGRpc2Nvbm5lY3Rfb3V0OworCX0KKyNpZmRlZiBQV0NfTUFHSUMJCisJaWYgKHBkZXYtPm1hZ2ljICE9IFBXQ19NQUdJQykgeworCQlFcnIoInB3Y19kaXNjb25uZWN0KCkgTWFnaWMgbnVtYmVyIGZhaWxlZC4gQ29uc3VsdCB5b3VyIHNjcm9sbHMgYW5kIHRyeSBhZ2Fpbi5cbiIpOworCQlnb3RvIGRpc2Nvbm5lY3Rfb3V0OworCX0KKyNlbmRpZgorCQorCS8qIFdlIGdvdCB1bnBsdWdnZWQ7IHRoaXMgaXMgc2lnbmFsbGVkIGJ5IGFuIEVQSVBFIGVycm9yIGNvZGUgKi8KKwlpZiAocGRldi0+dm9wZW4pIHsKKwkJSW5mbygiRGlzY29ubmVjdGVkIHdoaWxlIHdlYmNhbSBpcyBpbiB1c2UhXG4iKTsKKwkJcGRldi0+ZXJyb3Jfc3RhdHVzID0gRVBJUEU7CisJfQorCisJLyogQWxlcnQgd2FpdGluZyBwcm9jZXNzZXMgKi8KKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBkZXYtPmZyYW1lcSk7CisJLyogV2FpdCB1bnRpbCBkZXZpY2UgaXMgY2xvc2VkICovCisJd2hpbGUgKHBkZXYtPnZvcGVuKQorCQlzY2hlZHVsZSgpOworCS8qIERldmljZSBpcyBub3cgY2xvc2VkLCBzbyB3ZSBjYW4gc2FmZWx5IHVucmVnaXN0ZXIgaXQgKi8KKwlUcmFjZShUUkFDRV9QUk9CRSwgIlVucmVnaXN0ZXJpbmcgdmlkZW8gZGV2aWNlIGluIGRpc2Nvbm5lY3QoKS5cbiIpOworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHBkZXYtPnZkZXYpOworCisJLyogRnJlZSBtZW1vcnkgKGRvbid0IHNldCBwZGV2IHRvIDAganVzdCB5ZXQpICovCisJa2ZyZWUocGRldik7CisKK2Rpc2Nvbm5lY3Rfb3V0OgorCS8qIHNlYXJjaCBkZXZpY2VfaGludFtdIHRhYmxlIGlmIHdlIG9jY3VweSBhIHNsb3QsIGJ5IGFueSBjaGFuY2UgKi8KKwlmb3IgKGhpbnQgPSAwOyBoaW50IDwgTUFYX0RFVl9ISU5UUzsgaGludCsrKQorCQlpZiAoZGV2aWNlX2hpbnRbaGludF0ucGRldiA9PSBwZGV2KQorCQkJZGV2aWNlX2hpbnRbaGludF0ucGRldiA9IE5VTEw7CisKKwl1bmxvY2tfa2VybmVsKCk7Cit9CisKKworLyogKmdydW50KiBXZSBoYXZlIHRvIGRvIGF0b2kgb3Vyc2VsdmVzIDotKCAqLworc3RhdGljIGludCBwd2NfYXRvaShjb25zdCBjaGFyICpzKQoreworCWludCBrID0gMDsKKworCWsgPSAwOworCXdoaWxlICgqcyAhPSAnXDAnICYmICpzID49ICcwJyAmJiAqcyA8PSAnOScpIHsKKwkJayA9IDEwICogayArICgqcyAtICcwJyk7CisJCXMrKzsKKwl9CisJcmV0dXJuIGs7Cit9CisKKworLyogCisgKiBJbml0aWFsaXphdGlvbiBjb2RlICYgbW9kdWxlIHN0dWZmIAorICovCisKK3N0YXRpYyBjaGFyIHNpemVbMTBdOworc3RhdGljIGludCBmcHMgPSAwOworc3RhdGljIGludCBmYnVmcyA9IDA7CitzdGF0aWMgaW50IG1idWZzID0gMDsKK3N0YXRpYyBpbnQgdHJhY2UgPSAtMTsKK3N0YXRpYyBpbnQgY29tcHJlc3Npb24gPSAtMTsKK3N0YXRpYyBpbnQgbGVkc1syXSA9IHsgLTEsIC0xIH07CitzdGF0aWMgY2hhciAqZGV2X2hpbnRbTUFYX0RFVl9ISU5UU10gPSB7IH07CisKK21vZHVsZV9wYXJhbV9zdHJpbmcoc2l6ZSwgc2l6ZSwgc2l6ZW9mKHNpemUpLCAwKTsKK01PRFVMRV9QQVJNX0RFU0Moc2l6ZSwgIkluaXRpYWwgaW1hZ2Ugc2l6ZS4gT25lIG9mIHNxY2lmLCBxc2lmLCBxY2lmLCBzaWYsIGNpZiwgdmdhIik7Cittb2R1bGVfcGFyYW0oZnBzLCBpbnQsIDAwMDApOworTU9EVUxFX1BBUk1fREVTQyhmcHMsICJJbml0aWFsIGZyYW1lcyBwZXIgc2Vjb25kLiBWYXJpZXMgd2l0aCBtb2RlbCwgdXNlZnVsIHJhbmdlIDUtMzAiKTsKK21vZHVsZV9wYXJhbShmYnVmcywgaW50LCAwMDAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZmJ1ZnMsICJOdW1iZXIgb2YgaW50ZXJuYWwgZnJhbWUgYnVmZmVycyB0byByZXNlcnZlIik7Cittb2R1bGVfcGFyYW0obWJ1ZnMsIGludCwgMDAwMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1idWZzLCAiTnVtYmVyIG9mIGV4dGVybmFsIChtbWFwKCllZCkgaW1hZ2UgYnVmZmVycyIpOworbW9kdWxlX3BhcmFtKHRyYWNlLCBpbnQsIDAwMDApOworTU9EVUxFX1BBUk1fREVTQyh0cmFjZSwgIkZvciBkZWJ1Z2dpbmcgcHVycG9zZXMiKTsKK21vZHVsZV9wYXJhbShwb3dlcl9zYXZlLCBib29sLCAwMDAwKTsKK01PRFVMRV9QQVJNX0RFU0MocG93ZXJfc2F2ZSwgIlR1cm4gcG93ZXIgc2F2ZSBmZWF0dXJlIGluIGNhbWVyYSBvbiBvciBvZmYiKTsKK21vZHVsZV9wYXJhbShjb21wcmVzc2lvbiwgaW50LCAwMDAwKTsKK01PRFVMRV9QQVJNX0RFU0MoY29tcHJlc3Npb24sICJQcmVmZXJyZWQgY29tcHJlc3Npb24gcXVhbGl0eS4gUmFuZ2UgMCAodW5jb21wcmVzc2VkKSB0byAzIChoaWdoIGNvbXByZXNzaW9uKSIpOworbW9kdWxlX3BhcmFtX2FycmF5KGxlZHMsIGludCwgTlVMTCwgMDAwMCk7CitNT0RVTEVfUEFSTV9ERVNDKGxlZHMsICJMRUQgb24sb2ZmIHRpbWUgaW4gbWlsbGlzZWNvbmRzIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoZGV2X2hpbnQsIGNoYXJwLCBOVUxMLCAwMDAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGV2X2hpbnQsICJEZXZpY2Ugbm9kZSBoaW50cyIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgJiBPRU0gVVNCIHdlYmNhbSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkx1YyBTYWlsbGFyZCA8bHVjQHNhaWxsYXJkLm9yZz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBfX2luaXQgdXNiX3B3Y19pbml0KHZvaWQpCit7CisJaW50IGksIHN6OworCWNoYXIgKnNpemVuYW1lc1tQU1pfTUFYXSA9IHsgInNxY2lmIiwgInFzaWYiLCAicWNpZiIsICJzaWYiLCAiY2lmIiwgInZnYSIgfTsKKworCUluZm8oIlBoaWxpcHMgd2ViY2FtIG1vZHVsZSB2ZXJzaW9uICIgUFdDX1ZFUlNJT04gIiBsb2FkZWQuXG4iKTsKKwlJbmZvKCJTdXBwb3J0cyBQaGlsaXBzIFBDQTY0NS82NDYsIFBDVkM2NzUvNjgwLzY5MCwgUENWQzcyMFs0MF0vNzMwLzc0MC83NTAgJiBQQ1ZDODMwLzg0MC5cbiIpOworCUluZm8oIkFsc28gc3VwcG9ydHMgdGhlIEFza2V5IFZDMDEwLCB2YXJpb3VzIExvZ2l0ZWNoIFF1aWNrY2FtcywgU2Ftc3VuZyBNUEMtQzEwIGFuZCBNUEMtQzMwLFxuIik7CisJSW5mbygidGhlIENyZWF0aXZlIFdlYkNhbSA1ICYgUHJvIEV4LCBTT1RFQyBBZmluYSBFeWUgYW5kIFZpc2lvbml0ZSBWQ1MtVUMzMDAgYW5kIFZDUy1VTTEwMC5cbiIpOworCisJaWYgKGZwcykgeworCQlpZiAoZnBzIDwgNCB8fCBmcHMgPiAzMCkgeworCQkJRXJyKCJGcmFtZXJhdGUgb3V0IG9mIGJvdW5kcyAoNC0zMCkuXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWRlZmF1bHRfZnBzID0gZnBzOworCQlJbmZvKCJEZWZhdWx0IGZyYW1lcmF0ZSBzZXQgdG8gJWQuXG4iLCBkZWZhdWx0X2Zwcyk7CisJfQorCisJaWYgKHNpemVbMF0pIHsKKwkJLyogc3RyaW5nOyB0cnkgbWF0Y2hpbmcgd2l0aCBhcnJheSAqLworCQlmb3IgKHN6ID0gMDsgc3ogPCBQU1pfTUFYOyBzeisrKSB7CisJCQlpZiAoIXN0cmNtcChzaXplbmFtZXNbc3pdLCBzaXplKSkgeyAvKiBGb3VuZCEgKi8KKwkJCQlkZWZhdWx0X3NpemUgPSBzejsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoc3ogPT0gUFNaX01BWCkgeworCQkJRXJyKCJTaXplIG5vdCByZWNvZ25pemVkOyB0cnkgc2l6ZT1bc3FjaWYgfCBxc2lmIHwgcWNpZiB8IHNpZiB8IGNpZiB8IHZnYV0uXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCUluZm8oIkRlZmF1bHQgaW1hZ2Ugc2l6ZSBzZXQgdG8gJXMgWyVkeCVkXS5cbiIsIHNpemVuYW1lc1tkZWZhdWx0X3NpemVdLCBwd2NfaW1hZ2Vfc2l6ZXNbZGVmYXVsdF9zaXplXS54LCBwd2NfaW1hZ2Vfc2l6ZXNbZGVmYXVsdF9zaXplXS55KTsKKwl9CisJaWYgKG1idWZzKSB7CisJCWlmIChtYnVmcyA8IDEgfHwgbWJ1ZnMgPiBNQVhfSU1BR0VTKSB7CisJCQlFcnIoIklsbGVnYWwgbnVtYmVyIG9mIG1tYXAoKSBidWZmZXJzOyB1c2UgYSBudW1iZXIgYmV0d2VlbiAxIGFuZCAlZC5cbiIsIE1BWF9JTUFHRVMpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJZGVmYXVsdF9tYnVmcyA9IG1idWZzOworCQlJbmZvKCJOdW1iZXIgb2YgaW1hZ2UgYnVmZmVycyBzZXQgdG8gJWQuXG4iLCBkZWZhdWx0X21idWZzKTsKKwl9CisJaWYgKGZidWZzKSB7CisJCWlmIChmYnVmcyA8IDIgfHwgZmJ1ZnMgPiBNQVhfRlJBTUVTKSB7CisJCQlFcnIoIklsbGVnYWwgbnVtYmVyIG9mIGZyYW1lIGJ1ZmZlcnM7IHVzZSBhIG51bWJlciBiZXR3ZWVuIDIgYW5kICVkLlxuIiwgTUFYX0ZSQU1FUyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlkZWZhdWx0X2ZidWZzID0gZmJ1ZnM7CisJCUluZm8oIk51bWJlciBvZiBmcmFtZSBidWZmZXJzIHNldCB0byAlZC5cbiIsIGRlZmF1bHRfZmJ1ZnMpOworCX0KKwlpZiAodHJhY2UgPj0gMCkgeworCQlJbmZvKCJUcmFjZSBvcHRpb25zOiAweCUwNHhcbiIsIHRyYWNlKTsKKwkJcHdjX3RyYWNlID0gdHJhY2U7CisJfQorCWlmIChjb21wcmVzc2lvbiA+PSAwKSB7CisJCWlmIChjb21wcmVzc2lvbiA+IDMpIHsKKwkJCUVycigiSW52YWxpZCBjb21wcmVzc2lvbiBzZXR0aW5nOyB1c2UgYSBudW1iZXIgYmV0d2VlbiAwICh1bmNvbXByZXNzZWQpIGFuZCAzIChoaWdoKS5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJcHdjX3ByZWZlcnJlZF9jb21wcmVzc2lvbiA9IGNvbXByZXNzaW9uOworCQlJbmZvKCJQcmVmZXJyZWQgY29tcHJlc3Npb24gc2V0IHRvICVkLlxuIiwgcHdjX3ByZWZlcnJlZF9jb21wcmVzc2lvbik7CisJfQorCWlmIChwb3dlcl9zYXZlKQorCQlJbmZvKCJFbmFibGluZyBwb3dlciBzYXZlIG9uIG9wZW4vY2xvc2UuXG4iKTsKKwlpZiAobGVkc1swXSA+PSAwKQorCQlsZWRfb24gPSBsZWRzWzBdOworCWlmIChsZWRzWzFdID49IDApCisJCWxlZF9vZmYgPSBsZWRzWzFdOworCisJLyogQmlnIGRldmljZSBub2RlIHdob29wbGEuIEJhc2ljbHksIGl0IGFsbG93cyB5b3UgdG8gYXNzaWduIGEKKwkgICBkZXZpY2Ugbm9kZSAoL2Rldi92aWRlb1gpIHRvIGEgY2FtZXJhLCBiYXNlZCBvbiBpdHMgdHlwZQorCSAgICYgc2VyaWFsIG51bWJlci4gVGhlIGZvcm1hdCBpcyBbdHlwZVsuc2VyaWFsbnVtYmVyXTpdbm9kZS4KKworCSAgIEFueSBjYW1lcmEgdGhhdCBpc24ndCBtYXRjaGVkIGJ5IHRoZXNlIHJ1bGVzIGdldHMgdGhlIG5leHQKKwkgICBhdmFpbGFibGUgZnJlZSBkZXZpY2Ugbm9kZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0RFVl9ISU5UUzsgaSsrKSB7CisJCWNoYXIgKnMsICpjb2xvbiwgKmRvdDsKKworCQkvKiBUaGlzIGxvb3AgYWxzbyBpbml0aWFsaXplcyB0aGUgYXJyYXkgKi8KKwkJZGV2aWNlX2hpbnRbaV0ucGRldiA9IE5VTEw7CisJCXMgPSBkZXZfaGludFtpXTsKKwkJaWYgKHMgIT0gTlVMTCAmJiAqcyAhPSAnXDAnKSB7CisJCQlkZXZpY2VfaGludFtpXS50eXBlID0gLTE7IC8qIHdpbGRjYXJkICovCisJCQlzdHJjcHkoZGV2aWNlX2hpbnRbaV0uc2VyaWFsX251bWJlciwgIioiKTsKKworCQkJLyogcGFyc2Ugc3RyaW5nOiBjaG9wIGF0ICc6JyAmICcvJyAqLworCQkJY29sb24gPSBkb3QgPSBzOworCQkJd2hpbGUgKCpjb2xvbiAhPSAnXDAnICYmICpjb2xvbiAhPSAnOicpCisJCQkJY29sb24rKzsKKwkJCXdoaWxlICgqZG90ICE9ICdcMCcgJiYgKmRvdCAhPSAnLicpCisJCQkJZG90Kys7CisJCQkvKiBGZXcgc2FuaXR5IGNoZWNrcyAqLworCQkJaWYgKCpkb3QgIT0gJ1wwJyAmJiBkb3QgPiBjb2xvbikgeworCQkJCUVycigiTWFsZm9ybWVkIGNhbWVyYSBoaW50OiB0aGUgY29sb24gbXVzdCBiZSBhZnRlciB0aGUgZG90LlxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCWlmICgqY29sb24gPT0gJ1wwJykgeworCQkJCS8qIE5vIGNvbG9uICovCisJCQkJaWYgKCpkb3QgIT0gJ1wwJykgeworCQkJCQlFcnIoIk1hbGZvcm1lZCBjYW1lcmEgaGludDogbm8gY29sb24gKyBkZXZpY2Ugbm9kZSBnaXZlbi5cbiIpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCS8qIE5vIHR5cGUgb3Igc2VyaWFsIG51bWJlciBzcGVjaWZpZWQsIGp1c3QgYSBudW1iZXIuICovCisJCQkJCWRldmljZV9oaW50W2ldLmRldmljZV9ub2RlID0gcHdjX2F0b2kocyk7CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJLyogVGhlcmUncyBhIGNvbG9uLCBzbyB3ZSBoYXZlIGF0IGxlYXN0IGEgdHlwZSBhbmQgYSBkZXZpY2Ugbm9kZSAqLworCQkJCWRldmljZV9oaW50W2ldLnR5cGUgPSBwd2NfYXRvaShzKTsKKwkJCQlkZXZpY2VfaGludFtpXS5kZXZpY2Vfbm9kZSA9IHB3Y19hdG9pKGNvbG9uICsgMSk7CisJCQkJaWYgKCpkb3QgIT0gJ1wwJykgeworCQkJCQkvKiBUaGVyZSdzIGEgc2VyaWFsIG51bWJlciBhcyB3ZWxsICovCisJCQkJCWludCBrOworCQkJCQkKKwkJCQkJZG90Kys7CisJCQkJCWsgPSAwOworCQkJCQl3aGlsZSAoKmRvdCAhPSAnOicgJiYgayA8IDI5KSB7CisJCQkJCQlkZXZpY2VfaGludFtpXS5zZXJpYWxfbnVtYmVyW2srK10gPSAqZG90OworCQkJCQkJZG90Kys7CisJCQkJCX0KKwkJCQkJZGV2aWNlX2hpbnRbaV0uc2VyaWFsX251bWJlcltrXSA9ICdcMCc7CisJCQkJfQorCQkJfQorI2lmIFBXQ19ERUJVRwkJCisJCQlEZWJ1ZygiZGV2aWNlX2hpbnRbJWRdOlxuIiwgaSk7CisJCQlEZWJ1ZygiICB0eXBlICAgIDogJWRcbiIsIGRldmljZV9oaW50W2ldLnR5cGUpOworCQkJRGVidWcoIiAgc2VyaWFsIyA6ICVzXG4iLCBkZXZpY2VfaGludFtpXS5zZXJpYWxfbnVtYmVyKTsKKwkJCURlYnVnKCIgIG5vZGUgICAgOiAlZFxuIiwgZGV2aWNlX2hpbnRbaV0uZGV2aWNlX25vZGUpOworI2VuZGlmCQkJCisJCX0KKwkJZWxzZQorCQkJZGV2aWNlX2hpbnRbaV0udHlwZSA9IDA7IC8qIG5vdCBmaWxsZWQgKi8KKwl9IC8qIC4uZm9yIE1BWF9ERVZfSElOVFMgKi8KKworIAlUcmFjZShUUkFDRV9QUk9CRSwgIlJlZ2lzdGVyaW5nIGRyaXZlciBhdCBhZGRyZXNzIDB4JXAuXG4iLCAmcHdjX2RyaXZlcik7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmcHdjX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2JfcHdjX2V4aXQodm9pZCkKK3sKKwlUcmFjZShUUkFDRV9NT0RVTEUsICJEZXJlZ2lzdGVyaW5nIGRyaXZlci5cbiIpOworCXVzYl9kZXJlZ2lzdGVyKCZwd2NfZHJpdmVyKTsKKwlJbmZvKCJQaGlsaXBzIHdlYmNhbSBtb2R1bGUgcmVtb3ZlZC5cbiIpOworfQorCittb2R1bGVfaW5pdCh1c2JfcHdjX2luaXQpOworbW9kdWxlX2V4aXQodXNiX3B3Y19leGl0KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1pb2N0bC5oIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ODA1ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLWlvY3RsLmgKQEAgLTAsMCArMSwyOTIgQEAKKyNpZm5kZWYgUFdDX0lPQ1RMX0gKKyNkZWZpbmUgUFdDX0lPQ1RMX0gKKworLyogKEMpIDIwMDEtMjAwNCBOZW1vc29mdCBVbnYuCisgICAoQykgMjAwNCAgICAgIEx1YyBTYWlsbGFyZCAobHVjQHNhaWxsYXJkLm9yZykKKworICAgTk9URTogdGhpcyB2ZXJzaW9uIG9mIHB3YyBpcyBhbiB1bm9mZmljaWFsIChtb2RpZmllZCkgcmVsZWFzZSBvZiBwd2MgJiBwY3d4CisgICBkcml2ZXIgYW5kIHRodXMgbWF5IGhhdmUgYnVncyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgb3JpZ2luYWwgdmVyc2lvbi4KKyAgIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIGFuZCBzdXBwb3J0IHJlcXVlc3RzIHRvIDxsdWNAc2FpbGxhcmQub3JnPi4KKyAgIFRoZSBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBieSByZXZlcnNlLWVuZ2luZWVyaW5nIHRoZQorICAgTmVtb3NvZnQgYmluYXJ5IHB3Y3ggbW9kdWxlLiBDYXZlYXQgZW1wdG9yLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisKKy8qIFRoaXMgaXMgcHdjLWlvY3RsLmggYmVsb25naW5nIHRvIFBXQyA4LjEyLjEKKyAgIEl0IGNvbnRhaW5zIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMgdG8gY29tbXVuaWNhdGUgZnJvbSB1c2VyIHNwYWNlCisgICBkaXJlY3RseSB0byB0aGUgZHJpdmVyLgorICovCisKKy8qCisgICBDaGFuZ2VzCisgICAyMDAxLzA4LzAzICBBbHZhcmFkbyAgIEFkZGVkIGlvY3RsIGNvbnN0YW50cyB0byBhY2Nlc3MgbWV0aG9kcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdpbmcgd2hpdGUgYmFsYW5jZSBhbmQgcmVkL2JsdWUgZ2FpbnMKKyAgIDIwMDIvMTIvMTUgIEcuIEguIEZlcm5hbmRlei1Ub3JpYmlvICAgVklESU9DR1JFQUxTSVpFCisgICAyMDAzLzEyLzEzICBOZW1vc2Z0IFVudi4gU29tZSBtb2RpZmljYXRpb25zIHRvIG1ha2UgaW50ZXJmYWNpbmcgdG8KKyAgICAgICAgICAgICAgIFBXQ1ggZWFzaWVyCisgKi8KKworLyogVGhlc2UgYXJlIHByaXZhdGUgaW9jdGwoKSBjb21tYW5kcywgc3BlY2lmaWMgZm9yIHRoZSBQaGlsaXBzIHdlYmNhbXMuCisgICBUaGV5IGNvbnRhaW4gZnVuY3Rpb25zIG5vdCBmb3VuZCBpbiBvdGhlciB3ZWJjYW1zLCBhbmQgc2V0dGluZ3Mgbm90CisgICBzcGVjaWZpZWQgaW4gdGhlIFZpZGVvNExpbnV4IEFQSS4KKworICAgVGhlICNkZWZpbmUgbmFtZXMgYXJlIGJ1aWx0IHVwIGxpa2UgZm9sbG93czoKKyAgIFZJRElPQwkJVklEZW8gSU9DdGwgcHJlZml4CisgICAgICAgICBQV0MJCVBoaWxwcyBXZWJDYW0KKyAgICAgICAgICAgIEcgICAgICAgICAgIG9wdGlvbmFsOiBHZXQKKyAgICAgICAgICAgIFMgICAgICAgICAgIG9wdGlvbmFsOiBTZXQKKyAgICAgICAgICAgICAuLi4gCXRoZSBmdW5jdGlvbgorICovCisKKworIC8qIEVudW1lcmF0aW9uIG9mIGltYWdlIHNpemVzICovCisjZGVmaW5lIFBTWl9TUUNJRgkweDAwCisjZGVmaW5lIFBTWl9RU0lGCTB4MDEKKyNkZWZpbmUgUFNaX1FDSUYJMHgwMgorI2RlZmluZSBQU1pfU0lGCQkweDAzCisjZGVmaW5lIFBTWl9DSUYJCTB4MDQKKyNkZWZpbmUgUFNaX1ZHQQkJMHgwNQorI2RlZmluZSBQU1pfTUFYCQk2CisKKworLyogVGhlIGZyYW1lIHJhdGUgaXMgZW5jb2RlZCBpbiB0aGUgdmlkZW9fd2luZG93LmZsYWdzIHBhcmFtZXRlciB1c2luZworICAgdGhlIHVwcGVyIDE2IGJpdHMsIHNpbmNlIHNvbWUgZmxhZ3MgYXJlIGRlZmluZWQgbm93YWRheXMuIFRoZSBmb2xsb3dpbmcKKyAgIGRlZmluZXMgcHJvdmlkZSBhIG1hc2sgYW5kIHNoaWZ0IHRvIGZpbHRlciBvdXQgdGhpcyB2YWx1ZS4KKworICAgSW4gJ1NuYXBzaG90JyBtb2RlIHRoZSBjYW1lcmEgZnJlZXplcyBpdHMgYXV0b21hdGljIGV4cG9zdXJlIGFuZCBjb2xvdXIKKyAgIGJhbGFuY2UgY29udHJvbHMuCisgKi8KKyNkZWZpbmUgUFdDX0ZQU19TSElGVAkJMTYKKyNkZWZpbmUgUFdDX0ZQU19NQVNLCQkweDAwRkYwMDAwCisjZGVmaW5lIFBXQ19GUFNfRlJNQVNLCQkweDAwM0YwMDAwCisjZGVmaW5lIFBXQ19GUFNfU05BUFNIT1QJMHgwMDQwMDAwMAorCisKKy8qIHN0cnVjdHVyZSBmb3IgdHJhbnNmZXJpbmcgeCAmIHkgY29vcmRpbmF0ZXMgKi8KK3N0cnVjdCBwd2NfY29vcmQKK3sKKwlpbnQgeCwgeTsJCS8qIGd1ZXNzIHdoYXQgKi8KKwlpbnQgc2l6ZTsJCS8qIHNpemUsIG9yIG9mZnNldCAqLworfTsKKworCisvKiBVc2VkIHdpdGggVklESU9DUFdDUFJPQkUgKi8KK3N0cnVjdCBwd2NfcHJvYmUKK3sKKwljaGFyIG5hbWVbMzJdOworCWludCB0eXBlOworfTsKKworc3RydWN0IHB3Y19zZXJpYWwKK3sKKwljaGFyIHNlcmlhbFszMF07CS8qIFN0cmluZyB3aXRoIHNlcmlhbCBudW1iZXIuIENvbnRhaW5zIHRlcm1pbmF0aW5nIDAgKi8KK307CisJCisvKiBwd2Nfd2hpdGViYWxhbmNlLm1vZGUgdmFsdWVzICovCisjZGVmaW5lIFBXQ19XQl9JTkRPT1IJCTAKKyNkZWZpbmUgUFdDX1dCX09VVERPT1IJCTEKKyNkZWZpbmUgUFdDX1dCX0ZMCQkyCisjZGVmaW5lIFBXQ19XQl9NQU5VQUwJCTMKKyNkZWZpbmUgUFdDX1dCX0FVVE8JCTQKKworLyogVXNlZCB3aXRoIFZJRElPQ1BXQ1tTR11BV0IgKEF1dG8gV2hpdGUgQmFsYW5jZSkuIAorICAgU2V0IG1vZGUgdG8gb25lIG9mIHRoZSBQV0NfV0JfKiB2YWx1ZXMgYWJvdmUuCisgICAqcmVkIGFuZCAqYmx1ZSBhcmUgdGhlIHJlc3BlY3RpdmUgZ2FpbnMgb2YgdGhlc2UgY29sb3VyIGNvbXBvbmVudHMgaW5zaWRlIAorICAgdGhlIGNhbWVyYTsgcmFuZ2UgMC4uNjU1MzUKKyAgIFdoZW4gJ21vZGUnID09IFBXQ19XQl9NQU5VQUwsICdtYW51YWxfcmVkJyBhbmQgJ21hbnVhbF9ibHVlJyBhcmUgc2V0IG9yIHJlYWQ7IAorICAgb3RoZXJ3aXNlIHVuZGVmaW5lZC4KKyAgICdyZWFkX3JlZCcgYW5kICdyZWFkX2JsdWUnIGFyZSByZWFkLW9ubHkuCisqLyAgIAorc3RydWN0IHB3Y193aGl0ZWJhbGFuY2UKK3sKKwlpbnQgbW9kZTsKKwlpbnQgbWFudWFsX3JlZCwgbWFudWFsX2JsdWU7CS8qIFIvVyAqLworCWludCByZWFkX3JlZCwgcmVhZF9ibHVlOwkvKiBSL08gKi8KK307CisKKy8qIAorICAgJ2NvbnRyb2xfc3BlZWQnIGFuZCAnY29udHJvbF9kZWxheScgYXJlIHVzZWQgaW4gYXV0b21hdGljIHdoaXRlYmFsYW5jZSBtb2RlLAorICAgYW5kIHRlbGwgdGhlIGNhbWVyYSBob3cgZmFzdCBpdCBzaG91bGQgcmVhY3QgdG8gY2hhbmdlcyBpbiBsaWdodGluZywgYW5kIAorICAgd2l0aCBob3cgbXVjaCBkZWxheS4gVmFsaWQgdmFsdWVzIGFyZSAwLi42NTUzNS4KKyovCitzdHJ1Y3QgcHdjX3diX3NwZWVkCit7CisJaW50IGNvbnRyb2xfc3BlZWQ7CisJaW50IGNvbnRyb2xfZGVsYXk7CisKK307CisKKy8qIFVzZWQgd2l0aCBWSURJT0NQV0NbU0ddTEVEICovCitzdHJ1Y3QgcHdjX2xlZHMKK3sKKwlpbnQgbGVkX29uOwkJCS8qIExlZCBvbi10aW1lOyByYW5nZSA9IDAuLjI1MDAwICovCisJaW50IGxlZF9vZmY7CQkJLyogTGVkIG9mZi10aW1lOyByYW5nZSA9IDAuLjI1MDAwICAqLworfTsKKworLyogSW1hZ2Ugc2l6ZSAodXNlZCB3aXRoIEdSRUFMU0laRSkgKi8KK3N0cnVjdCBwd2NfaW1hZ2VzaXplCit7CisJaW50IHdpZHRoOworCWludCBoZWlnaHQ7Cit9OworCisvKiBEZWZpbmVzIGFuZCBzdHJ1Y3R1cmVzIGZvciBNb3Rvcml6ZWQgUGFuICYgVGlsdCAqLworI2RlZmluZSBQV0NfTVBUX1BBTgkJMHgwMQorI2RlZmluZSBQV0NfTVBUX1RJTFQJCTB4MDIKKyNkZWZpbmUgUFdDX01QVF9USU1FT1VUCQkweDA0IC8qIGZvciBzdGF0dXMgKi8KKworLyogU2V0IGFuZ2xlczsgd2hlbiBhYnNvbHV0ZSAhPSAwLCB0aGUgYW5nbGUgaXMgYWJzb2x1dGUgYW5kIHRoZSAKKyAgIGRyaXZlciBjYWxjdWxhdGVzIHRoZSByZWxhdGl2ZSBvZmZzZXQgZm9yIHlvdS4gVGhpcyBjYW4gb25seQorICAgYmUgdXNlZCB3aXRoIFZJRElPQ1BXQ1NBTkdMRTsgVklESU9DUFdDR0FOR0xFIGFsd2F5cyByZXR1cm5zCisgICBhYnNvbHV0ZSBhbmdsZXMuCisgKi8gICAKK3N0cnVjdCBwd2NfbXB0X2FuZ2xlcworeworCWludCBhYnNvbHV0ZTsJCS8qIHdyaXRlLW9ubHkgKi8KKwlpbnQgcGFuOwkJLyogZGVncmVlcyAqIDEwMCAqLworCWludCB0aWx0OwkJLyogZGVncmVzcyAqIDEwMCAqLworfTsKKworLyogUmFuZ2Ugb2YgYW5nbGVzIG9mIHRoZSBjYW1lcmEsIGJvdGggaG9yaXpvbnRhbGx5IGFuZCB2ZXJ0aWNhbGx5LgorICovCitzdHJ1Y3QgcHdjX21wdF9yYW5nZQoreworCWludCBwYW5fbWluLCBwYW5fbWF4OwkJLyogZGVncmVlcyAqIDEwMCAqLworCWludCB0aWx0X21pbiwgdGlsdF9tYXg7Cit9OworCitzdHJ1Y3QgcHdjX21wdF9zdGF0dXMKK3sKKwlpbnQgc3RhdHVzOworCWludCB0aW1lX3BhbjsKKwlpbnQgdGltZV90aWx0OworfTsKKworCisvKiBUaGlzIGlzIHVzZWQgZm9yIG91dC1vZi1rZXJuZWwgZGVjb21wcmVzc2lvbi4gV2l0aCBpdCwgeW91IGNhbiBnZXQKKyAgIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGluaXRpYWxpemUgYW5kIHVzZSB0aGUgZGVjb21wcmVzc29yCisgICByb3V0aW5lcyBpbiBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucy4KKyAqLyAgIAorc3RydWN0IHB3Y192aWRlb19jb21tYW5kCit7CisJaW50IHR5cGU7CQkvKiBjYW1lcmEgdHlwZSAoNjQ1LCA2NzUsIDczMCwgZXRjLikgKi8KKwlpbnQgcmVsZWFzZTsJCS8qIHJlbGVhc2UgbnVtYmVyICovCisKKyAgICAgICAgaW50IHNpemU7CQkvKiBvbmUgb2YgUFNaXyogKi8KKyAgICAgICAgaW50IGFsdGVybmF0ZTsKKwlpbnQgY29tbWFuZF9sZW47CS8qIGxlbmd0aCBvZiBVU0IgdmlkZW8gY29tbWFuZCAqLworCXVuc2lnbmVkIGNoYXIgY29tbWFuZF9idWZbMTNdOwkvKiBBY3R1YWwgVVNCIHZpZGVvIGNvbW1hbmQgKi8KKwlpbnQgYmFuZGxlbmd0aDsJCS8qID4wID0gY29tcHJlc3NlZCAqLworCWludCBmcmFtZV9zaXplOwkJLyogU2l6ZSBvZiBvbmUgKHVuKWNvbXByZXNzZWQgZnJhbWUgKi8KK307CisKKy8qIEZsYWdzIGZvciBQV0NYIHN1YnJvdXRpbmVzLiBOb3QgYWxsIG1vZHVsZXMgaG9ub3VyIGFsbCBmbGFncy4gKi8KKyNkZWZpbmUgUFdDWF9GTEFHX1BMQU5BUgkweDAwMDEKKyNkZWZpbmUgUFdDWF9GTEFHX0JBWUVSCQkweDAwMDgKKworCisvKiBJT0NUTCBkZWZpbml0aW9ucyAqLworCisgLyogUmVzdG9yZSB1c2VyIHNldHRpbmdzICovCisjZGVmaW5lIFZJRElPQ1BXQ1JVU0VSCQlfSU8oJ3YnLCAxOTIpCisgLyogU2F2ZSB1c2VyIHNldHRpbmdzICovCisjZGVmaW5lIFZJRElPQ1BXQ1NVU0VSCQlfSU8oJ3YnLCAxOTMpCisgLyogUmVzdG9yZSBmYWN0b3J5IHNldHRpbmdzICovCisjZGVmaW5lIFZJRElPQ1BXQ0ZBQ1RPUlkJX0lPKCd2JywgMTk0KQorCisgLyogWW91IGNhbiBtYW5pcHVsYXRlIHRoZSBjb21wcmVzc2lvbiBmYWN0b3IuIEEgY29tcHJlc3Npb24gcHJlZmVyZW5jZSBvZiAwCisgICAgbWVhbnMgdXNlIHVuY29tcHJlc3NlZCBtb2RlcyB3aGVuIGF2YWlsYWJsZTsgMSBpcyBsb3cgY29tcHJlc3Npb24sIDIgaXMKKyAgICBtZWRpdW0gYW5kIDMgaXMgaGlnaCBjb21wcmVzc2lvbiBwcmVmZXJyZWQuIE9mIGNvdXJzZSwgdGhlIGhpZ2hlciB0aGUKKyAgICBjb21wcmVzc2lvbiwgdGhlIGxvd2VyIHRoZSBiYW5kd2lkdGggdXNlZCBidXQgbW9yZSBjaGFuY2Ugb2YgYXJ0ZWZhY3RzCisgICAgaW4gdGhlIGltYWdlLiBUaGUgZHJpdmVyIGF1dG9tYXRpY2FsbHkgY2hvb3NlcyBhIGhpZ2hlciBjb21wcmVzc2lvbiB3aGVuCisgICAgdGhlIHByZWZlcnJlZCBtb2RlIGlzIG5vdCBhdmFpbGFibGUuCisgICovCisgLyogU2V0IHByZWZlcnJlZCBjb21wcmVzc2lvbiBxdWFsaXR5ICgwID0gdW5jb21wcmVzc2VkLCAzID0gaGlnaGVzdCBjb21wcmVzc2lvbikgKi8KKyNkZWZpbmUgVklESU9DUFdDU0NRVUFMCQlfSU9XKCd2JywgMTk1LCBpbnQpCisgLyogR2V0IHByZWZlcnJlZCBjb21wcmVzc2lvbiBxdWFsaXR5ICovCisjZGVmaW5lIFZJRElPQ1BXQ0dDUVVBTAkJX0lPUigndicsIDE5NSwgaW50KQorCisKKy8qIFJldHJpZXZlIHNlcmlhbCBudW1iZXIgb2YgY2FtZXJhICovCisjZGVmaW5lIFZJRElPQ1BXQ0dTRVJJQUwJX0lPUigndicsIDE5OCwgc3RydWN0IHB3Y19zZXJpYWwpCisKKyAvKiBUaGlzIGlzIGEgcHJvYmUgZnVuY3Rpb247IHNpbmNlIHNvIG1hbnkgZGV2aWNlcyBhcmUgc3VwcG9ydGVkLCBpdAorICAgIGJlY29tZXMgZGlmZmljdWx0IHRvIGluY2x1ZGUgYWxsIHRoZSBuYW1lcyBpbiBwcm9ncmFtcyB0aGF0IHdhbnQgdG8KKyAgICBjaGVjayBmb3IgdGhlIGVuaGFuY2VkIFBoaWxpcHMgc3R1ZmYuIFNvIGluIHN0ZWFkLCB0cnkgdGhpcyBQUk9CRTsKKyAgICBpdCByZXR1cm5zIGEgc3RydWN0dXJlIHdpdGggdGhlIG9yaWdpbmFsIG5hbWUsIGFuZCB0aGUgY29ycmVzcG9uZGluZworICAgIFBoaWxpcHMgdHlwZS4KKyAgICBUbyB1c2UsIGZpbGwgdGhlIHN0cnVjdHVyZSB3aXRoIHplcm9lcywgY2FsbCBQUk9CRSBhbmQgaWYgdGhhdCBzdWNjZWVkcywKKyAgICBjb21wYXJlIHRoZSBuYW1lIHdpdGggdGhhdCByZXR1cm5lZCBmcm9tIFZJRElPQ0dDQVA7IHRoZXkgc2hvdWxkIGJlIHRoZQorICAgIHNhbWUuIElmIHNvLCB5b3UgY2FuIGJlIGFzc3VyZWQgaXQgaXMgYSBQaGlsaXBzIChPRU0pIGNhbSBhbmQgdGhlIHR5cGUKKyAgICBpcyB2YWxpZC4KKyAqLworI2RlZmluZSBWSURJT0NQV0NQUk9CRQkJX0lPUigndicsIDE5OSwgc3RydWN0IHB3Y19wcm9iZSkKKworIC8qIFNldCBBR0MgKEF1dG9tYXRpYyBHYWluIENvbnRyb2wpOyBpbnQgPCAwID0gYXV0bywgMC4uNjU1MzUgPSBmaXhlZCAqLworI2RlZmluZSBWSURJT0NQV0NTQUdDCQlfSU9XKCd2JywgMjAwLCBpbnQpCisgLyogR2V0IEFHQzsgaW50IDwgMCA9IGF1dG87ID49IDAgPSBmaXhlZCwgcmFuZ2UgMC4uNjU1MzUgKi8KKyNkZWZpbmUgVklESU9DUFdDR0FHQwkJX0lPUigndicsIDIwMCwgaW50KQorIC8qIFNldCBzaHV0dGVyIHNwZWVkOyBpbnQgPCAwID0gYXV0bzsgPj0gMCA9IGZpeGVkLCByYW5nZSAwLi42NTUzNSAqLworI2RlZmluZSBWSURJT0NQV0NTU0hVVFRFUglfSU9XKCd2JywgMjAxLCBpbnQpCisKKyAvKiBDb2xvciBjb21wZW5zYXRpb24gKEF1dG8gV2hpdGUgQmFsYW5jZSkgKi8KKyNkZWZpbmUgVklESU9DUFdDU0FXQiAgICAgICAgICAgX0lPVygndicsIDIwMiwgc3RydWN0IHB3Y193aGl0ZWJhbGFuY2UpCisjZGVmaW5lIFZJRElPQ1BXQ0dBV0IgICAgICAgICAgIF9JT1IoJ3YnLCAyMDIsIHN0cnVjdCBwd2Nfd2hpdGViYWxhbmNlKQorCisgLyogQXV0byBXQiBzcGVlZCAqLworI2RlZmluZSBWSURJT0NQV0NTQVdCU1BFRUQJX0lPVygndicsIDIwMywgc3RydWN0IHB3Y193Yl9zcGVlZCkKKyNkZWZpbmUgVklESU9DUFdDR0FXQlNQRUVECV9JT1IoJ3YnLCAyMDMsIHN0cnVjdCBwd2Nfd2Jfc3BlZWQpCisKKyAvKiBMRURzIG9uL29mZi9ibGluazsgaW50IHJhbmdlIDAuLjY1NTM1ICovCisjZGVmaW5lIFZJRElPQ1BXQ1NMRUQgICAgICAgICAgIF9JT1coJ3YnLCAyMDUsIHN0cnVjdCBwd2NfbGVkcykKKyNkZWZpbmUgVklESU9DUFdDR0xFRCAgICAgICAgICAgX0lPUigndicsIDIwNSwgc3RydWN0IHB3Y19sZWRzKQorCisgIC8qIENvbnRvdXIgKHNoYXJwbmVzcyk7IGludCA8IDAgPSBhdXRvLCAwLi42NTUzNiA9IGZpeGVkICovCisjZGVmaW5lIFZJRElPQ1BXQ1NDT05UT1VSCV9JT1coJ3YnLCAyMDYsIGludCkKKyNkZWZpbmUgVklESU9DUFdDR0NPTlRPVVIJX0lPUigndicsIDIwNiwgaW50KQorCisgIC8qIEJhY2tsaWdodCBjb21wZW5zYXRpb247IDAgPSBvZmYsIG90aGVyd2lzZSBvbiAqLworI2RlZmluZSBWSURJT0NQV0NTQkFDS0xJR0hUCV9JT1coJ3YnLCAyMDcsIGludCkKKyNkZWZpbmUgVklESU9DUFdDR0JBQ0tMSUdIVAlfSU9SKCd2JywgMjA3LCBpbnQpCisKKyAgLyogRmxpY2tlcmxlc3MgbW9kZTsgPSAwIG9mZiwgb3RoZXJ3aXNlIG9uICovCisjZGVmaW5lIFZJRElPQ1BXQ1NGTElDS0VSCV9JT1coJ3YnLCAyMDgsIGludCkKKyNkZWZpbmUgVklESU9DUFdDR0ZMSUNLRVIJX0lPUigndicsIDIwOCwgaW50KSAgCisKKyAgLyogRHluYW1pYyBub2lzZSByZWR1Y3Rpb247IDAgb2ZmLCAzID0gaGlnaCBub2lzZSByZWR1Y3Rpb24gKi8KKyNkZWZpbmUgVklESU9DUFdDU0RZTk5PSVNFCV9JT1coJ3YnLCAyMDksIGludCkKKyNkZWZpbmUgVklESU9DUFdDR0RZTk5PSVNFCV9JT1IoJ3YnLCAyMDksIGludCkKKworIC8qIFJlYWwgaW1hZ2Ugc2l6ZSBhcyB1c2VkIGJ5IHRoZSBjYW1lcmE7IHRlbGxzIHlvdSB3aGV0aGVyIG9yIG5vdCB0aGVyZSdzIGEgZ3JheSBib3JkZXIgYXJvdW5kIHRoZSBpbWFnZSAqLworI2RlZmluZSBWSURJT0NQV0NHUkVBTFNJWkUJX0lPUigndicsIDIxMCwgc3RydWN0IHB3Y19pbWFnZXNpemUpCisKKyAvKiBNb3Rvcml6ZWQgcGFuICYgdGlsdCBmdW5jdGlvbnMgKi8gCisjZGVmaW5lIFZJRElPQ1BXQ01QVFJFU0VUCV9JT1coJ3YnLCAyMTEsIGludCkKKyNkZWZpbmUgVklESU9DUFdDTVBUR1JBTkdFCV9JT1IoJ3YnLCAyMTEsIHN0cnVjdCBwd2NfbXB0X3JhbmdlKQorI2RlZmluZSBWSURJT0NQV0NNUFRTQU5HTEUJX0lPVygndicsIDIxMiwgc3RydWN0IHB3Y19tcHRfYW5nbGVzKQorI2RlZmluZSBWSURJT0NQV0NNUFRHQU5HTEUJX0lPUigndicsIDIxMiwgc3RydWN0IHB3Y19tcHRfYW5nbGVzKQorI2RlZmluZSBWSURJT0NQV0NNUFRTVEFUVVMJX0lPUigndicsIDIxMywgc3RydWN0IHB3Y19tcHRfc3RhdHVzKQorCisgLyogR2V0IHRoZSBVU0Igc2V0LXZpZGVvIGNvbW1hbmQ7IG5lZWRlZCBmb3IgaW5pdGlhbGl6aW5nIGxpYnB3Y3ggKi8KKyNkZWZpbmUgVklESU9DUFdDR1ZJRENNRAlfSU9SKCd2JywgMjE1LCBzdHJ1Y3QgcHdjX3ZpZGVvX2NvbW1hbmQpCitzdHJ1Y3QgcHdjX3RhYmxlX2luaXRfYnVmZmVyIHsKKyAgIGludCBsZW47CisgICBjaGFyICpidWZmZXI7CisKK307CisjZGVmaW5lIFZJRElPQ1BXQ0dWSURUQUJMRQlfSU9SKCd2JywgMjE2LCBzdHJ1Y3QgcHdjX3RhYmxlX2luaXRfYnVmZmVyKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2Mta2lhcmEuYyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2Mta2lhcmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDg1ODAwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1raWFyYS5jCkBAIC0wLDAgKzEsODkxIEBACisvKiBMaW51eCBkcml2ZXIgZm9yIFBoaWxpcHMgd2ViY2FtCisgICAoQykgMjAwNCAgICAgIEx1YyBTYWlsbGFyZCAobHVjQHNhaWxsYXJkLm9yZykKKworICAgTk9URTogdGhpcyB2ZXJzaW9uIG9mIHB3YyBpcyBhbiB1bm9mZmljaWFsIChtb2RpZmllZCkgcmVsZWFzZSBvZiBwd2MgJiBwY3d4CisgICBkcml2ZXIgYW5kIHRodXMgbWF5IGhhdmUgYnVncyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgb3JpZ2luYWwgdmVyc2lvbi4KKyAgIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIGFuZCBzdXBwb3J0IHJlcXVlc3RzIHRvIDxsdWNAc2FpbGxhcmQub3JnPi4KKyAgIFRoZSBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBieSByZXZlcnNlLWVuZ2luZWVyaW5nIHRoZQorICAgTmVtb3NvZnQgYmluYXJ5IHB3Y3ggbW9kdWxlLiBDYXZlYXQgZW1wdG9yLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisKKworLyogVGhpcyB0YWJsZXMgY29udGFpbnMgZW50cmllcyBmb3IgdGhlIDczMC83NDAvNzUwIChLaWFyYSkgY2FtZXJhLCB3aXRoCisgICA0IGRpZmZlcmVudCBxdWFsaXRpZXMgKG5vIGNvbXByZXNzaW9uLCBsb3csIG1lZGl1bSwgaGlnaCkuCisgICBJdCBsaXN0cyB0aGUgYmFuZHdpZHRoIHJlcXVpcmVtZW50cyBmb3Igc2FpZCBtb2RlIGJ5IGl0cyBhbHRlcm5hdGUgaW50ZXJmYWNlCisgICBudW1iZXIuIEFuIGFsdGVybmF0ZSBvZiAwIG1lYW5zIHRoYXQgdGhlIG1vZGUgaXMgdW5hdmFpbGFibGUuCisKKyAgIFRoZXJlIGFyZSA2ICogNCAqIDQgZW50cmllczoKKyAgICAgNiBkaWZmZXJlbnQgcmVzb2x1dGlvbnMgc3VicWNpZiwgcXNpZiwgcWNpZiwgc2lmLCBjaWYsIHZnYQorICAgICA2IGZyYW1lcmF0ZXM6IDUsIDEwLCAxNSwgMjAsIDI1LCAzMAorICAgICA0IGNvbXByZXNzaW9uIG1vZGk6IG5vbmUsIGxvdywgbWVkaXVtLCBoaWdoCisKKyAgIFdoZW4gYW4gdW5jb21wcmVzc2VkIG1vZGUgaXMgbm90IGF2YWlsYWJsZSwgdGhlIG5leHQgYXZhaWxhYmxlIGNvbXByZXNzZWQgbW9kZQorICAgd2lsbCBiZSBjaG9zZW4gKHVubGVzcyB0aGUgZGVjb21wcmVzc29yIGlzIGFic2VudCkuIFNvbWV0aW1lcyB0aGVyZSBhcmUgb25seQorICAgMSBvciAyIGNvbXByZXNzZWQgbW9kZXMgYXZhaWxhYmxlOyBpbiB0aGF0IGNhc2UgZW50cmllcyBhcmUgZHVwbGljYXRlZC4KKyovCisKKworI2luY2x1ZGUgInB3Yy1raWFyYS5oIgorI2luY2x1ZGUgInB3Yy11bmNvbXByZXNzLmgiCisKK2NvbnN0IHN0cnVjdCBLaWFyYV90YWJsZV9lbnRyeSBLaWFyYV90YWJsZVtQU1pfTUFYXVs2XVs0XSA9Cit7CisgICAvKiBTUUNJRiAqLworICAgeworICAgICAgLyogNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMTUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAyMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMzAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICB9LAorICAgLyogUVNJRiAqLworICAgeworICAgICAgLyogNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHsxLCAxNDYsICAgIDAsIHsweDFELCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDkyLCAweDAwLCAweDgwfX0sCisgICAgICAgICB7MSwgMTQ2LCAgICAwLCB7MHgxRCwgMHhGNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg5MiwgMHgwMCwgMHg4MH19LAorICAgICAgICAgezEsIDE0NiwgICAgMCwgezB4MUQsIDB4RjQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4OTIsIDB4MDAsIDB4ODB9fSwKKyAgICAgICAgIHsxLCAxNDYsICAgIDAsIHsweDFELCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDkyLCAweDAwLCAweDgwfX0sCisgICAgICB9LAorICAgICAgLyogMTAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MiwgMjkxLCAgICAwLCB7MHgxQywgMHhGNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyMywgMHgwMSwgMHg4MH19LAorICAgICAgICAgezEsIDE5MiwgIDYzMCwgezB4MTQsIDB4RjQsIDB4MzAsIDB4MTMsIDB4QTksIDB4MTIsIDB4RTEsIDB4MTcsIDB4MDgsIDB4QzAsIDB4MDAsIDB4ODB9fSwKKyAgICAgICAgIHsxLCAxOTIsICA2MzAsIHsweDE0LCAweEY0LCAweDMwLCAweDEzLCAweEE5LCAweDEyLCAweEUxLCAweDE3LCAweDA4LCAweEMwLCAweDAwLCAweDgwfX0sCisgICAgICAgICB7MSwgMTkyLCAgNjMwLCB7MHgxNCwgMHhGNCwgMHgzMCwgMHgxMywgMHhBOSwgMHgxMiwgMHhFMSwgMHgxNywgMHgwOCwgMHhDMCwgMHgwMCwgMHg4MH19LAorICAgICAgfSwKKyAgICAgIC8qIDE1IGZwcyAqLworICAgICAgeworICAgICAgICAgezMsIDQzNywgICAgMCwgezB4MUIsIDB4RjQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4QjUsIDB4MDEsIDB4ODB9fSwKKyAgICAgICAgIHsyLCAyOTIsICA2NDAsIHsweDEzLCAweEY0LCAweDMwLCAweDEzLCAweEY3LCAweDEzLCAweDJGLCAweDEzLCAweDIwLCAweDI0LCAweDAxLCAweDgwfX0sCisgICAgICAgICB7MiwgMjkyLCAgNjQwLCB7MHgxMywgMHhGNCwgMHgzMCwgMHgxMywgMHhGNywgMHgxMywgMHgyRiwgMHgxMywgMHgyMCwgMHgyNCwgMHgwMSwgMHg4MH19LAorICAgICAgICAgezEsIDE5MiwgIDQyMCwgezB4MTMsIDB4RjQsIDB4MzAsIDB4MEQsIDB4MUIsIDB4MEMsIDB4NTMsIDB4MUUsIDB4MTgsIDB4QzAsIDB4MDAsIDB4ODB9fSwKKyAgICAgIH0sCisgICAgICAvKiAyMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHs0LCA1ODksICAgIDAsIHsweDFBLCAweEY0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDRELCAweDAyLCAweDgwfX0sCisgICAgICAgICB7MywgNDQ4LCAgNzMwLCB7MHgxMiwgMHhGNCwgMHgzMCwgMHgxNiwgMHhDOSwgMHgxNiwgMHgwMSwgMHgwRSwgMHgxOCwgMHhDMCwgMHgwMSwgMHg4MH19LAorICAgICAgICAgezIsIDI5MiwgIDQ3NiwgezB4MTIsIDB4RjQsIDB4MzAsIDB4MEUsIDB4RDgsIDB4MEUsIDB4MTAsIDB4MTksIDB4MTgsIDB4MjQsIDB4MDEsIDB4ODB9fSwKKyAgICAgICAgIHsxLCAxOTIsICAzMTIsIHsweDEyLCAweEY0LCAweDUwLCAweDA5LCAweEIzLCAweDA4LCAweEVCLCAweDFFLCAweDE4LCAweEMwLCAweDAwLCAweDgwfX0sCisgICAgICB9LAorICAgICAgLyogMjUgZnBzICovCisgICAgICB7CisgICAgICAgICB7NSwgNzAzLCAgICAwLCB7MHgxOSwgMHhGNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHhCRiwgMHgwMiwgMHg4MH19LAorICAgICAgICAgezMsIDQ0NywgIDYxMCwgezB4MTEsIDB4RjQsIDB4MzAsIDB4MTMsIDB4MEIsIDB4MTIsIDB4NDMsIDB4MTQsIDB4MjgsIDB4QkYsIDB4MDEsIDB4ODB9fSwKKyAgICAgICAgIHsyLCAyOTIsICAzOTgsIHsweDExLCAweEY0LCAweDUwLCAweDBDLCAweDZDLCAweDBCLCAweEE0LCAweDFFLCAweDI4LCAweDI0LCAweDAxLCAweDgwfX0sCisgICAgICAgICB7MSwgMTkzLCAgMjYyLCB7MHgxMSwgMHhGNCwgMHg1MCwgMHgwOCwgMHgyMywgMHgwNywgMHg1QiwgMHgxRSwgMHgyOCwgMHhDMSwgMHgwMCwgMHg4MH19LAorICAgICAgfSwKKyAgICAgIC8qIDMwIGZwcyAqLworICAgICAgeworICAgICAgICAgezgsIDg3NCwgICAgMCwgezB4MTgsIDB4RjQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NkEsIDB4MDMsIDB4ODB9fSwKKyAgICAgICAgIHs1LCA3MDQsICA3MzAsIHsweDEwLCAweEY0LCAweDMwLCAweDE2LCAweEM5LCAweDE2LCAweDAxLCAweDBFLCAweDI4LCAweEMwLCAweDAyLCAweDgwfX0sCisgICAgICAgICB7MywgNDQ4LCAgNDkyLCB7MHgxMCwgMHhGNCwgMHgzMCwgMHgwRiwgMHg1RCwgMHgwRSwgMHg5NSwgMHgxNSwgMHgyOCwgMHhDMCwgMHgwMSwgMHg4MH19LAorICAgICAgICAgezIsIDI5MiwgIDMyMCwgezB4MTAsIDB4RjQsIDB4NTAsIDB4MDksIDB4RkIsIDB4MDksIDB4MzMsIDB4MUUsIDB4MjgsIDB4MjQsIDB4MDEsIDB4ODB9fSwKKyAgICAgIH0sCisgICB9LAorICAgLyogUUNJRiAqLworICAgeworICAgICAgLyogNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMTUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAyMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMzAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICB9LAorICAgLyogU0lGICovCisgICB7CisgICAgICAvKiA1IGZwcyAqLworICAgICAgeworICAgICAgICAgezQsIDU4MiwgICAgMCwgezB4MEQsIDB4RjQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDYsIDB4MDIsIDB4ODB9fSwKKyAgICAgICAgIHszLCAzODcsIDEyNzYsIHsweDA1LCAweEY0LCAweDMwLCAweDI3LCAweEQ4LCAweDI2LCAweDQ4LCAweDAzLCAweDEwLCAweDgzLCAweDAxLCAweDgwfX0sCisgICAgICAgICB7MiwgMjkxLCAgOTYwLCB7MHgwNSwgMHhGNCwgMHgzMCwgMHgxRCwgMHhGMiwgMHgxQywgMHg2MiwgMHgwNCwgMHgxMCwgMHgyMywgMHgwMSwgMHg4MH19LAorICAgICAgICAgezEsIDE5MSwgIDYzMCwgezB4MDUsIDB4RjQsIDB4NTAsIDB4MTMsIDB4QTksIDB4MTIsIDB4MTksIDB4MDUsIDB4MTgsIDB4QkYsIDB4MDAsIDB4ODB9fSwKKyAgICAgIH0sCisgICAgICAvKiAxMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezYsIDc3NSwgMTI3OCwgezB4MDQsIDB4RjQsIDB4MzAsIDB4MjcsIDB4RTgsIDB4MjYsIDB4NTgsIDB4MDUsIDB4MzAsIDB4MDcsIDB4MDMsIDB4ODB9fSwKKyAgICAgICAgIHszLCA0NDcsICA3MzYsIHsweDA0LCAweEY0LCAweDMwLCAweDE2LCAweEZCLCAweDE1LCAweDZCLCAweDA1LCAweDI4LCAweEJGLCAweDAxLCAweDgwfX0sCisgICAgICAgICB7MiwgMjkyLCAgNDgwLCB7MHgwNCwgMHhGNCwgMHg3MCwgMHgwRSwgMHhGOSwgMHgwRCwgMHg2OSwgMHgwOSwgMHgyOCwgMHgyNCwgMHgwMSwgMHg4MH19LAorICAgICAgfSwKKyAgICAgIC8qIDE1IGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7OSwgOTU1LCAxMDUwLCB7MHgwMywgMHhGNCwgMHgzMCwgMHgyMCwgMHhDRiwgMHgxRiwgMHgzRiwgMHgwNiwgMHg0OCwgMHhCQiwgMHgwMywgMHg4MH19LAorICAgICAgICAgezQsIDU5MiwgIDY1MCwgezB4MDMsIDB4RjQsIDB4MzAsIDB4MTQsIDB4NDQsIDB4MTIsIDB4QjQsIDB4MDgsIDB4MzAsIDB4NTAsIDB4MDIsIDB4ODB9fSwKKyAgICAgICAgIHszLCA0NDgsICA0OTIsIHsweDAzLCAweEY0LCAweDUwLCAweDBGLCAweDUyLCAweDBELCAweEMyLCAweDA5LCAweDM4LCAweEMwLCAweDAxLCAweDgwfX0sCisgICAgICB9LAorICAgICAgLyogMjAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHs5LCA5NTgsICA3ODIsIHsweDAyLCAweEY0LCAweDMwLCAweDE4LCAweDZBLCAweDE2LCAweERBLCAweDBCLCAweDU4LCAweEJFLCAweDAzLCAweDgwfX0sCisgICAgICAgICB7NSwgNzAzLCAgNTc0LCB7MHgwMiwgMHhGNCwgMHg1MCwgMHgxMSwgMHhFNywgMHgxMCwgMHg1NywgMHgwQiwgMHg0MCwgMHhCRiwgMHgwMiwgMHg4MH19LAorICAgICAgICAgezMsIDQ0NiwgIDM2NCwgezB4MDIsIDB4RjQsIDB4OTAsIDB4MEIsIDB4NUMsIDB4MDksIDB4Q0MsIDB4MEUsIDB4MzgsIDB4QkUsIDB4MDEsIDB4ODB9fSwKKyAgICAgIH0sCisgICAgICAvKiAyNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezksIDk1OCwgIDY1NCwgezB4MDEsIDB4RjQsIDB4MzAsIDB4MTQsIDB4NjYsIDB4MTIsIDB4RDYsIDB4MEIsIDB4NTAsIDB4QkUsIDB4MDMsIDB4ODB9fSwKKyAgICAgICAgIHs2LCA3NzYsICA1MzAsIHsweDAxLCAweEY0LCAweDUwLCAweDEwLCAweDhDLCAweDBFLCAweEZDLCAweDBDLCAweDQ4LCAweDA4LCAweDAzLCAweDgwfX0sCisgICAgICAgICB7NCwgNTkyLCAgNDA0LCB7MHgwMSwgMHhGNCwgMHg3MCwgMHgwQywgMHg5NiwgMHgwQiwgMHgwNiwgMHgwQiwgMHg0OCwgMHg1MCwgMHgwMiwgMHg4MH19LAorICAgICAgfSwKKyAgICAgIC8qIDMwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7OSwgOTU3LCAgNTI2LCB7MHgwMCwgMHhGNCwgMHg1MCwgMHgxMCwgMHg2OCwgMHgwRSwgMHhEOCwgMHgwRCwgMHg1OCwgMHhCRCwgMHgwMywgMHg4MH19LAorICAgICAgICAgezYsIDc3NSwgIDQyNiwgezB4MDAsIDB4RjQsIDB4NzAsIDB4MEQsIDB4NDgsIDB4MEIsIDB4QjgsIDB4MEYsIDB4NTAsIDB4MDcsIDB4MDMsIDB4ODB9fSwKKyAgICAgICAgIHs0LCA1OTAsICAzMjQsIHsweDAwLCAweDdBLCAweDg4LCAweDBBLCAweDFDLCAweDA4LCAweEI0LCAweDBFLCAweDUwLCAweDRFLCAweDAyLCAweDgwfX0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIENJRiAqLworICAgeworICAgICAgLyogNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMTUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAyMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMzAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICB9LAorICAgLyogVkdBICovCisgICB7CisgICAgICAvKiA1IGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7NiwgNzczLCAxMjcyLCB7MHgyNSwgMHhGNCwgMHgzMCwgMHgyNywgMHhCNiwgMHgyNCwgMHg5NiwgMHgwMiwgMHgzMCwgMHgwNSwgMHgwMywgMHg4MH19LAorICAgICAgICAgezQsIDU5MiwgIDk3NiwgezB4MjUsIDB4RjQsIDB4NTAsIDB4MUUsIDB4NzgsIDB4MUIsIDB4NTgsIDB4MDMsIDB4MzAsIDB4NTAsIDB4MDIsIDB4ODB9fSwKKyAgICAgICAgIHszLCA0NDgsICA3MzgsIHsweDI1LCAweEY0LCAweDkwLCAweDE3LCAweDBDLCAweDEzLCAweEVDLCAweDA0LCAweDMwLCAweEMwLCAweDAxLCAweDgwfX0sCisgICAgICB9LAorICAgICAgLyogMTAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHs5LCA5NTYsICA3ODgsIHsweDI0LCAweEY0LCAweDcwLCAweDE4LCAweDlDLCAweDE1LCAweDdDLCAweDAzLCAweDQ4LCAweEJDLCAweDAzLCAweDgwfX0sCisgICAgICAgICB7NiwgNzc2LCAgNjQwLCB7MHgyNCwgMHhGNCwgMHhCMCwgMHgxMywgMHhGQywgMHgxMSwgMHgyQywgMHgwNCwgMHg0OCwgMHgwOCwgMHgwMywgMHg4MH19LAorICAgICAgICAgezQsIDU5MiwgIDQ4OCwgezB4MjQsIDB4N0EsIDB4RTgsIDB4MEYsIDB4M0MsIDB4MEMsIDB4NkMsIDB4MDYsIDB4NDgsIDB4NTAsIDB4MDIsIDB4ODB9fSwKKyAgICAgIH0sCisgICAgICAvKiAxNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezksIDk1NywgIDUyNiwgezB4MjMsIDB4N0EsIDB4RTgsIDB4MTAsIDB4NjgsIDB4MEQsIDB4OTgsIDB4MDYsIDB4NTgsIDB4QkQsIDB4MDMsIDB4ODB9fSwKKyAgICAgICAgIHs5LCA5NTcsICA1MjYsIHsweDIzLCAweDdBLCAweEU4LCAweDEwLCAweDY4LCAweDBELCAweDk4LCAweDA2LCAweDU4LCAweEJELCAweDAzLCAweDgwfX0sCisgICAgICAgICB7OCwgODk1LCAgNDkyLCB7MHgyMywgMHg3QSwgMHhFOCwgMHgwRiwgMHg1RCwgMHgwQywgMHg4RCwgMHgwNiwgMHg1OCwgMHg3RiwgMHgwMywgMHg4MH19LAorICAgICAgfSwKKyAgICAgIC8qIDIwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMjUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAzMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgIH0sCit9OworCisKKy8qCisgKiBSb20gdGFibGUgZm9yIGtpYXJhIGNoaXBzCisgKgorICogMzIgcm9tcyB0YWJsZXMgKG9uZSBmb3IgZWFjaCByZXNvbHV0aW9uID8pCisgKiAgMiB0YWJsZXMgcGVyIHJvbXMgKG9uZSBmb3IgZWFjaCBwYXNzZXMpIChZLCBhbmQgVSZWKQorICogMTI4IGJ5dGVzIHBlciBwYXNzZXMKKyAqLworCitjb25zdCB1bnNpZ25lZCBpbnQgS2lhcmFSb21UYWJsZSBbOF1bMl1bMTZdWzhdID0gIAoreworIHsgLyogdmVyc2lvbiAwICovCisgIHsgLyogdmVyc2lvbiAwLCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDksMHgwMDAwMDAwOSwKKyAgICAweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDAwOSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwOSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMTI0YSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjUyLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI1MiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMWI3MjQsMHgwMDAxYjkyZCwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjkyNSwweDAwMDFjOTZlLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDAsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMDksCisgICAgMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDksMHgwMDAwMDAwOSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAxMjUyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI1MiwweDAwMDA5NDkzLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMWI3MjUsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gMSAqLworICB7IC8qIHZlcnNpb24gMSwgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA5LDB4MDAwMDAwMDksCisgICAgMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI1MiwweDAwMDA5NDkzLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDA5MjUyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI2ZGMsMHgwMDAxMjZkYywweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiAxLCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDAwOSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwMDksMHgwMDAwMDAwMSwweDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMDQ5LDB4MDAwMDAyNGEsMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMDAxfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwMDI0YSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAwMjRhLDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjUyLDB4MDAwMDEyNTIsMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyOTIsMHgwMDAwMTI1MiwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwOTI5MiwweDAwMDAxMjUyLDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDEyNTIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwMTI1MiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwOTQ5MywweDAwMDA5MjkyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDIgKi8KKyAgeyAvKiB2ZXJzaW9uIDIsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMTI0YSwweDAwMDAxMjUyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwYTQ5YiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjUyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjUyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWI3MjUsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gMiwgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDA5MjkyLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjUyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9LAorIHsgLyogdmVyc2lvbiAzICovCisgIHsgLyogdmVyc2lvbiAzLCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwYTQ5YiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEzNmU0LDB4MDAwMWI3MjUsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNGRiLDB4MDAwMTM2ZTQsMHgwMDAxYjcyNSwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDFiOTJkLDB4MDAwMWI5MjV9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWI5MmQsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMWI3MjQsMHgwMDAxYzk2ZSwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjkyNSwweDAwMDI1YmI2LDB4MDAwMjRiNzd9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDMsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI1MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMTI2ZGMsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAxMjZkYywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDEyNmRjLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNGRiLDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gNCAqLworICB7IC8qIHZlcnNpb24gNCwgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyNTIsMHgwMDAwMTI1MiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTMsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjUyLDB4MDAwMDk0OTMsCisgICAgMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNGRiLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWI3MjUsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAxYjkyZCwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiA0LCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDAwOSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMDI0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDAwNDksMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDEyNGEsMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDkyNTIsMHgwMDAwMTI0YSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5MjUyLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDA5NDkzLDB4MDAwMDk0OTMsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNGRiLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI1MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDUgKi8KKyAgeyAvKiB2ZXJzaW9uIDUsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAxMjRkYiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNmRjLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMWI3MjQsMHgwMDAxYjcyNSwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWI5MmQsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAxYzk2ZSwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYjkyNSwweDAwMDFjOTZlLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxYzkyNCwweDAwMDI0OTZkLDB4MDAwMjViYjYsMHgwMDAyNGI3N30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gNSwgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyNTIsMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwOTI5MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDk0OTMsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI0ZGIsMHgwMDAwOTQ5MywweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjRkYiwweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9LAorIHsgLyogdmVyc2lvbiA2ICovCisgIHsgLyogdmVyc2lvbiA2LCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNmRjLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWI3MjUsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAxYjkyZCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWI5MmQsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAxYjkyZCwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYjkyNSwweDAwMDFjOTZlLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFjOTJkLDB4MDAwMWM5NmUsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMWM5MmQsMHgwMDAyNGI3NiwweDAwMDI0OTZlfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAxMjQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMWM5MjQsMHgwMDAyNGI2ZCwweDAwMDJkZGI2LDB4MDAwMjViYmZ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDYsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwOTI1MiwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDA5MjkyLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDBhNDliLDB4MDAwMDk0OTMsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5YiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYzkyNCwweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gNyAqLworICB7IC8qIHZlcnNpb24gNywgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMjZkYywweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMWI3MjUsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAxYjcyNSwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjcyNCwweDAwMDFiNzI1LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWM5NmUsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWM5MmQsMHgwMDAxYzk2ZSwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYzkyZCwweDAwMDFjOTZlLDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFjOTJkLDB4MDAwMWM5NmUsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMWM5MmQsMHgwMDAyNGI3NiwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMWI5MjQsMHgwMDAxYzkyZCwweDAwMDI0Yjc2LDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxYjkyNCwweDAwMDFjOTJkLDB4MDAwMjRiNzYsMHgwMDAyNDk2ZX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMTI0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDI0OTI0LDB4MDAwMjRiNmQsMHgwMDAyZGRiNiwweDAwMDI1YmJmfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiA3LCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDA5NDkyLDB4MDAwMDkyOTIsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAwYTQ5YiwweDAwMDA5NDkzLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMTI0ZGIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMjRkYiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEyNmRjLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAxMjQ5MiwweDAwMDFiNmRiLAorICAgIDB4MDAwMWM5MjQsMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0KK307CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2Mta2lhcmEuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2Mta2lhcmEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjkyOWFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1raWFyYS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qIExpbnV4IGRyaXZlciBmb3IgUGhpbGlwcyB3ZWJjYW0KKyAgIChDKSAyMDA0ICAgICAgTHVjIFNhaWxsYXJkIChsdWNAc2FpbGxhcmQub3JnKQorCisgICBOT1RFOiB0aGlzIHZlcnNpb24gb2YgcHdjIGlzIGFuIHVub2ZmaWNpYWwgKG1vZGlmaWVkKSByZWxlYXNlIG9mIHB3YyAmIHBjd3gKKyAgIGRyaXZlciBhbmQgdGh1cyBtYXkgaGF2ZSBidWdzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLgorICAgUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgYW5kIHN1cHBvcnQgcmVxdWVzdHMgdG8gPGx1Y0BzYWlsbGFyZC5vcmc+LgorICAgVGhlIGRlY29tcHJlc3Npb24gcm91dGluZXMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGJ5IHJldmVyc2UtZW5naW5lZXJpbmcgdGhlCisgICBOZW1vc29mdCBiaW5hcnkgcHdjeCBtb2R1bGUuIENhdmVhdCBlbXB0b3IuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworLyogRW50cmllcyBmb3IgdGhlIEtpYXJhICg3MzAvNzQwLzc1MCkgY2FtZXJhICovCisKKyNpZm5kZWYgUFdDX0tJQVJBX0gKKyNkZWZpbmUgUFdDX0tJQVJBX0gKKworI2luY2x1ZGUgInB3Yy1pb2N0bC5oIgorCitzdHJ1Y3QgS2lhcmFfdGFibGVfZW50cnkKK3sKKwljaGFyIGFsdGVybmF0ZTsJCQkvKiBVU0IgYWx0ZXJuYXRlIGludGVyZmFjZSAqLworCXVuc2lnbmVkIHNob3J0IHBhY2tldHNpemU7CS8qIE5vcm1hbCBwYWNrZXQgc2l6ZSAqLworCXVuc2lnbmVkIHNob3J0IGJhbmRsZW5ndGg7CS8qIEJhbmRsZW5ndGggd2hlbiBkZWNvbXByZXNzaW5nICovCisJdW5zaWduZWQgY2hhciBtb2RlWzEyXTsJCS8qIHByZWNvbXB1dGVkIG1vZGUgc2V0dGluZ3MgZm9yIGNhbSAqLworfTsKKworY29uc3QgZXh0ZXJuIHN0cnVjdCBLaWFyYV90YWJsZV9lbnRyeSBLaWFyYV90YWJsZVtQU1pfTUFYXVs2XVs0XTsKK2NvbnN0IGV4dGVybiB1bnNpZ25lZCBpbnQgS2lhcmFSb21UYWJsZVs4XVsyXVsxNl1bOF07CisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtbWlzYy5jIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy1taXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdhNGJkMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtbWlzYy5jCkBAIC0wLDAgKzEsMTQwIEBACisvKiBMaW51eCBkcml2ZXIgZm9yIFBoaWxpcHMgd2ViY2FtIAorICAgVmFyaW91cyBtaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucyBhbmQgdGFibGVzLgorICAgKEMpIDE5OTktMjAwMyBOZW1vc29mdCBVbnYuCisgICAoQykgMjAwNCAgICAgIEx1YyBTYWlsbGFyZCAobHVjQHNhaWxsYXJkLm9yZykKKworICAgTk9URTogdGhpcyB2ZXJzaW9uIG9mIHB3YyBpcyBhbiB1bm9mZmljaWFsIChtb2RpZmllZCkgcmVsZWFzZSBvZiBwd2MgJiBwY3d4CisgICBkcml2ZXIgYW5kIHRodXMgbWF5IGhhdmUgYnVncyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgb3JpZ2luYWwgdmVyc2lvbi4KKyAgIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIGFuZCBzdXBwb3J0IHJlcXVlc3RzIHRvIDxsdWNAc2FpbGxhcmQub3JnPi4KKyAgIFRoZSBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBieSByZXZlcnNlLWVuZ2luZWVyaW5nIHRoZQorICAgTmVtb3NvZnQgYmluYXJ5IHB3Y3ggbW9kdWxlLiBDYXZlYXQgZW1wdG9yLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJwd2MuaCIKKworc3RydWN0IHB3Y19jb29yZCBwd2NfaW1hZ2Vfc2l6ZXNbUFNaX01BWF0gPQoreworCXsgMTI4LCAgOTYsIDAgfSwKKwl7IDE2MCwgMTIwLCAwIH0sCisJeyAxNzYsIDE0NCwgMCB9LAorCXsgMzIwLCAyNDAsIDAgfSwKKwl7IDM1MiwgMjg4LCAwIH0sCisJeyA2NDAsIDQ4MCwgMCB9LAorfTsKKworLyogeCx5IC0+IFBTWl8gKi8KK2ludCBwd2NfZGVjb2RlX3NpemUoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKwlpbnQgaSwgZmluZDsKKworCS8qIE1ha2Ugc3VyZSB3ZSBkb24ndCBnbyBiZXlvbmQgb3VyIG1heCBzaXplLgorICAgICAgICAgICBOQjogd2UgaGF2ZSBkaWZmZXJlbnQgbGltaXRzIGZvciBSQVcgYW5kIG5vcm1hbCBtb2Rlcy4gSW4gY2FzZQorICAgICAgICAgICB5b3UgZG9uJ3QgaGF2ZSB0aGUgZGVjb21wcmVzc29yIGxvYWRlZCBvciB1c2UgUkFXIG1vZGUsIAorICAgICAgICAgICB0aGUgbWF4aW11bSB2aWV3YWJsZSBzaXplIGlzIHNtYWxsZXIuCisgICAgICAgICovCisJaWYgKHBkZXYtPnZwYWxldHRlID09IFZJREVPX1BBTEVUVEVfUkFXKQorCXsKKwkJaWYgKHdpZHRoID4gcGRldi0+YWJzX21heC54IHx8IGhlaWdodCA+IHBkZXYtPmFic19tYXgueSkKKwkJeworCQkJRGVidWcoIlZJREVPX1BBTEVUVEVfUkFXOiBnb2luZyBiZXlvbmQgYWJzX21heC5cbiIpOworICAgICAgICAgICAgICAgIAlyZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorCX0KKwllbHNlCisJeworCQlpZiAod2lkdGggPiBwZGV2LT52aWV3X21heC54IHx8IGhlaWdodCA+IHBkZXYtPnZpZXdfbWF4LnkpCisJCXsKKwkJCURlYnVnKCJWSURFT19QQUxFVFRFXyBub3QgUkFXOiBnb2luZyBiZXlvbmQgdmlld19tYXguXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCS8qIEZpbmQgdGhlIGxhcmdlc3Qgc2l6ZSBzdXBwb3J0ZWQgYnkgdGhlIGNhbWVyYSB0aGF0IGZpdHMgaW50byB0aGUKKwkgICByZXF1ZXN0ZWQgc2l6ZS4KKwkgKi8KKwlmaW5kID0gLTE7CisJZm9yIChpID0gMDsgaSA8IFBTWl9NQVg7IGkrKykgeworCQlpZiAocGRldi0+aW1hZ2VfbWFzayAmICgxIDw8IGkpKSB7CisJCQlpZiAocHdjX2ltYWdlX3NpemVzW2ldLnggPD0gd2lkdGggJiYgcHdjX2ltYWdlX3NpemVzW2ldLnkgPD0gaGVpZ2h0KQorCQkJCWZpbmQgPSBpOworCQl9CisJfQorCXJldHVybiBmaW5kOworfQorCisvKiBpbml0aWFsaXplIHZhcmlhYmxlcyBkZXBlbmRpbmcgb24gdHlwZSBhbmQgZGVjb21wcmVzc29yKi8KK3ZvaWQgcHdjX2NvbnN0cnVjdChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwlzd2l0Y2gocGRldi0+dHlwZSkgeworCWNhc2UgNjQ1OgorCWNhc2UgNjQ2OgorCQlwZGV2LT52aWV3X21pbi54ID0gMTI4OworCQlwZGV2LT52aWV3X21pbi55ID0gIDk2OworCQlwZGV2LT52aWV3X21heC54ID0gMzUyOworCQlwZGV2LT52aWV3X21heC55ID0gMjg4OworICAgICAgICAgICAgICAgIHBkZXYtPmFic19tYXgueCAgPSAzNTI7CisgICAgICAgICAgICAgICAgcGRldi0+YWJzX21heC55ICA9IDI4ODsKKwkJcGRldi0+aW1hZ2VfbWFzayA9IDEgPDwgUFNaX1NRQ0lGIHwgMSA8PCBQU1pfUUNJRiB8IDEgPDwgUFNaX0NJRjsKKwkJcGRldi0+dmNpbnRlcmZhY2UgPSAyOworCQlwZGV2LT52ZW5kcG9pbnQgPSA0OworCQlwZGV2LT5mcmFtZV9oZWFkZXJfc2l6ZSA9IDA7CisJCXBkZXYtPmZyYW1lX3RyYWlsZXJfc2l6ZSA9IDA7CisJCWJyZWFrOworCWNhc2UgNjc1OgorCWNhc2UgNjgwOgorCWNhc2UgNjkwOgorCQlwZGV2LT52aWV3X21pbi54ID0gMTI4OworCQlwZGV2LT52aWV3X21pbi55ID0gIDk2OworCQkvKiBBbnRoaWxsIGJ1ZyAjMzg6IFBXQyBhbHdheXMgcmVwb3J0cyBtYXggc2l6ZSwgZXZlbiB3aXRob3V0IFBXQ1ggKi8KKwkJcGRldi0+dmlld19tYXgueCA9IDY0MDsKKwkJcGRldi0+dmlld19tYXgueSA9IDQ4MDsKKwkJcGRldi0+aW1hZ2VfbWFzayA9IDEgPDwgUFNaX1NRQ0lGIHwgMSA8PCBQU1pfUVNJRiB8IDEgPDwgUFNaX1FDSUYgfCAxIDw8IFBTWl9TSUYgfCAxIDw8IFBTWl9DSUYgfCAxIDw8IFBTWl9WR0E7CisgICAgICAgICAgICAgICAgcGRldi0+YWJzX21heC54ID0gNjQwOworICAgICAgICAgICAgICAgIHBkZXYtPmFic19tYXgueSA9IDQ4MDsKKwkJcGRldi0+dmNpbnRlcmZhY2UgPSAzOworCQlwZGV2LT52ZW5kcG9pbnQgPSA0OworCQlwZGV2LT5mcmFtZV9oZWFkZXJfc2l6ZSA9IDA7CisJCXBkZXYtPmZyYW1lX3RyYWlsZXJfc2l6ZSA9IDA7CisJCWJyZWFrOworCWNhc2UgNzIwOgorCWNhc2UgNzMwOgorCWNhc2UgNzQwOgorCWNhc2UgNzUwOgorCQlwZGV2LT52aWV3X21pbi54ID0gMTYwOworCQlwZGV2LT52aWV3X21pbi55ID0gMTIwOworCQlwZGV2LT52aWV3X21heC54ID0gNjQwOworCQlwZGV2LT52aWV3X21heC55ID0gNDgwOworCQlwZGV2LT5pbWFnZV9tYXNrID0gMSA8PCBQU1pfUVNJRiB8IDEgPDwgUFNaX1NJRiB8IDEgPDwgUFNaX1ZHQTsKKyAgICAgICAgICAgICAgICBwZGV2LT5hYnNfbWF4LnggPSA2NDA7CisgICAgICAgICAgICAgICAgcGRldi0+YWJzX21heC55ID0gNDgwOworCQlwZGV2LT52Y2ludGVyZmFjZSA9IDM7CisJCXBkZXYtPnZlbmRwb2ludCA9IDU7CisJCXBkZXYtPmZyYW1lX2hlYWRlcl9zaXplID0gVE9VQ0FNX0hFQURFUl9TSVpFOworCQlwZGV2LT5mcmFtZV90cmFpbGVyX3NpemUgPSBUT1VDQU1fVFJBSUxFUl9TSVpFOworCQlicmVhazsKKwl9CisJRGVidWcoInR5cGUgPSAlZFxuIixwZGV2LT50eXBlKTsKKwlwZGV2LT52cGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfWVVWNDIwUDsgLyogZGVmYXVsdCAqLworCXBkZXYtPnZpZXdfbWluLnNpemUgPSBwZGV2LT52aWV3X21pbi54ICogcGRldi0+dmlld19taW4ueTsKKwlwZGV2LT52aWV3X21heC5zaXplID0gcGRldi0+dmlld19tYXgueCAqIHBkZXYtPnZpZXdfbWF4Lnk7CisJLyogbGVuZ3RoIG9mIGltYWdlLCBpbiBZVVYgZm9ybWF0OyBhbHdheXMgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeS4gKi8KKwlwZGV2LT5sZW5fcGVyX2ltYWdlID0gKHBkZXYtPmFic19tYXgueCAqIHBkZXYtPmFic19tYXgueSAqIDMpIC8gMjsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLW5hbGEuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtbmFsYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YzVjYjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLW5hbGEuaApAQCAtMCwwICsxLDY2IEBACisgICAvKiBTUUNJRiAqLworICAgeworICAgICAgezAsIDAsIHsweDA0LCAweDAxLCAweDAzfX0sCisgICAgICB7OCwgMCwgezB4MDUsIDB4MDEsIDB4MDN9fSwKKyAgICAgIHs3LCAwLCB7MHgwOCwgMHgwMSwgMHgwM319LAorICAgICAgezcsIDAsIHsweDBBLCAweDAxLCAweDAzfX0sCisgICAgICB7NiwgMCwgezB4MEMsIDB4MDEsIDB4MDN9fSwKKyAgICAgIHs1LCAwLCB7MHgwRiwgMHgwMSwgMHgwM319LAorICAgICAgezQsIDAsIHsweDE0LCAweDAxLCAweDAzfX0sCisgICAgICB7MywgMCwgezB4MTgsIDB4MDEsIDB4MDN9fSwKKyAgIH0sCisgICAvKiBRU0lGICovCisgICB7CisgICAgICB7MH0sCisgICAgICB7MH0sCisgICAgICB7MH0sCisgICAgICB7MH0sCisgICAgICB7MH0sCisgICAgICB7MH0sCisgICAgICB7MH0sCisgICAgICB7MH0sCisgICB9LAorICAgLyogUUNJRiAqLworICAgeworICAgICAgezAsIDAsIHsweDA0LCAweDAxLCAweDAyfX0sCisgICAgICB7OCwgMCwgezB4MDUsIDB4MDEsIDB4MDJ9fSwKKyAgICAgIHs3LCAwLCB7MHgwOCwgMHgwMSwgMHgwMn19LAorICAgICAgezYsIDAsIHsweDBBLCAweDAxLCAweDAyfX0sCisgICAgICB7NSwgMCwgezB4MEMsIDB4MDEsIDB4MDJ9fSwKKyAgICAgIHs0LCAwLCB7MHgwRiwgMHgwMSwgMHgwMn19LAorICAgICAgezEsIDAsIHsweDE0LCAweDAxLCAweDAyfX0sCisgICAgICB7MSwgMCwgezB4MTgsIDB4MDEsIDB4MDJ9fSwKKyAgIH0sCisgICAvKiBTSUYgKi8KKyAgIHsKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgIH0sCisgICAvKiBDSUYgKi8KKyAgIHsKKyAgICAgIHs0LCAwLCB7MHgwNCwgMHgwMSwgMHgwMX19LAorICAgICAgezcsIDEsIHsweDA1LCAweDAzLCAweDAxfX0sCisgICAgICB7NiwgMSwgezB4MDgsIDB4MDMsIDB4MDF9fSwKKyAgICAgIHs0LCAxLCB7MHgwQSwgMHgwMywgMHgwMX19LAorICAgICAgezMsIDEsIHsweDBDLCAweDAzLCAweDAxfX0sCisgICAgICB7MiwgMSwgezB4MEYsIDB4MDMsIDB4MDF9fSwKKyAgICAgIHswfSwKKyAgICAgIHswfSwKKyAgIH0sCisgICAvKiBWR0EgKi8KKyAgIHsgIAorICAgICAgezB9LAorICAgICAgezB9LAorICAgICAgezB9LAorICAgICAgezB9LAorICAgICAgezB9LAorICAgICAgezB9LAorICAgICAgezB9LAorICAgICAgezB9LAorICAgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtdGltb24uYyBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtdGltb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTUwYTRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy10aW1vbi5jCkBAIC0wLDAgKzEsMTQ0NiBAQAorLyogTGludXggZHJpdmVyIGZvciBQaGlsaXBzIHdlYmNhbQorICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisgICBUaGUgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUKKyAgIE5lbW9zb2Z0IGJpbmFyeSBwd2N4IG1vZHVsZS4gQ2F2ZWF0IGVtcHRvci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisKKy8qIFRoaXMgdGFibGVzIGNvbnRhaW5zIGVudHJpZXMgZm9yIHRoZSA2NzUvNjgwLzY5MCAoVGltb24pIGNhbWVyYSwgd2l0aAorICAgNCBkaWZmZXJlbnQgcXVhbGl0aWVzIChubyBjb21wcmVzc2lvbiwgbG93LCBtZWRpdW0sIGhpZ2gpLgorICAgSXQgbGlzdHMgdGhlIGJhbmR3aWR0aCByZXF1aXJlbWVudHMgZm9yIHNhaWQgbW9kZSBieSBpdHMgYWx0ZXJuYXRlIGludGVyZmFjZQorICAgbnVtYmVyLiBBbiBhbHRlcm5hdGUgb2YgMCBtZWFucyB0aGF0IHRoZSBtb2RlIGlzIHVuYXZhaWxhYmxlLgorCisgICBUaGVyZSBhcmUgNiAqIDQgKiA0IGVudHJpZXM6CisgICAgIDYgZGlmZmVyZW50IHJlc29sdXRpb25zIHN1YnFjaWYsIHFzaWYsIHFjaWYsIHNpZiwgY2lmLCB2Z2EKKyAgICAgNiBmcmFtZXJhdGVzOiA1LCAxMCwgMTUsIDIwLCAyNSwgMzAKKyAgICAgNCBjb21wcmVzc2lvbiBtb2RpOiBub25lLCBsb3csIG1lZGl1bSwgaGlnaAorCisgICBXaGVuIGFuIHVuY29tcHJlc3NlZCBtb2RlIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBuZXh0IGF2YWlsYWJsZSBjb21wcmVzc2VkIG1vZGUKKyAgIHdpbGwgYmUgY2hvc2VuICh1bmxlc3MgdGhlIGRlY29tcHJlc3NvciBpcyBhYnNlbnQpLiBTb21ldGltZXMgdGhlcmUgYXJlIG9ubHkKKyAgIDEgb3IgMiBjb21wcmVzc2VkIG1vZGVzIGF2YWlsYWJsZTsgaW4gdGhhdCBjYXNlIGVudHJpZXMgYXJlIGR1cGxpY2F0ZWQuCisqLworCisjaW5jbHVkZSAicHdjLXRpbW9uLmgiCisKK2NvbnN0IHN0cnVjdCBUaW1vbl90YWJsZV9lbnRyeSBUaW1vbl90YWJsZVtQU1pfTUFYXVs2XVs0XSA9Cit7CisgICAvKiBTUUNJRiAqLworICAgeworICAgICAgLyogNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHsxLCAxNDAsICAgIDAsIHsweDA1LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDhDLCAweEZDLCAweDgwLCAweDAyfX0sCisgICAgICAgICB7MSwgMTQwLCAgICAwLCB7MHgwNSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHg4QywgMHhGQywgMHg4MCwgMHgwMn19LAorICAgICAgICAgezEsIDE0MCwgICAgMCwgezB4MDUsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4OEMsIDB4RkMsIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHsxLCAxNDAsICAgIDAsIHsweDA1LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDhDLCAweEZDLCAweDgwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMTAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MiwgMjgwLCAgICAwLCB7MHgwNCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgxOCwgMHhBOSwgMHg4MCwgMHgwMn19LAorICAgICAgICAgezIsIDI4MCwgICAgMCwgezB4MDQsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MTgsIDB4QTksIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHsyLCAyODAsICAgIDAsIHsweDA0LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDE4LCAweEE5LCAweDgwLCAweDAyfX0sCisgICAgICAgICB7MiwgMjgwLCAgICAwLCB7MHgwNCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgxOCwgMHhBOSwgMHg4MCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDE1IGZwcyAqLworICAgICAgeworICAgICAgICAgezMsIDQxMCwgICAgMCwgezB4MDMsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4OUEsIDB4NzEsIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHszLCA0MTAsICAgIDAsIHsweDAzLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDlBLCAweDcxLCAweDgwLCAweDAyfX0sCisgICAgICAgICB7MywgNDEwLCAgICAwLCB7MHgwMywgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHg5QSwgMHg3MSwgMHg4MCwgMHgwMn19LAorICAgICAgICAgezMsIDQxMCwgICAgMCwgezB4MDMsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4OUEsIDB4NzEsIDB4ODAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAyMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHs0LCA1NTksICAgIDAsIHsweDAyLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDJGLCAweDU2LCAweDgwLCAweDAyfX0sCisgICAgICAgICB7NCwgNTU5LCAgICAwLCB7MHgwMiwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgyRiwgMHg1NiwgMHg4MCwgMHgwMn19LAorICAgICAgICAgezQsIDU1OSwgICAgMCwgezB4MDIsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MkYsIDB4NTYsIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHs0LCA1NTksICAgIDAsIHsweDAyLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDJGLCAweDU2LCAweDgwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMjUgZnBzICovCisgICAgICB7CisgICAgICAgICB7NSwgNjU5LCAgICAwLCB7MHgwMSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHg5MywgMHg0NiwgMHg4MCwgMHgwMn19LAorICAgICAgICAgezUsIDY1OSwgICAgMCwgezB4MDEsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4OTMsIDB4NDYsIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHs1LCA2NTksICAgIDAsIHsweDAxLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDkzLCAweDQ2LCAweDgwLCAweDAyfX0sCisgICAgICAgICB7NSwgNjU5LCAgICAwLCB7MHgwMSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHg5MywgMHg0NiwgMHg4MCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDMwIGZwcyAqLworICAgICAgeworICAgICAgICAgezcsIDgzOCwgICAgMCwgezB4MDAsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NDYsIDB4M0IsIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHs3LCA4MzgsICAgIDAsIHsweDAwLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDQ2LCAweDNCLCAweDgwLCAweDAyfX0sCisgICAgICAgICB7NywgODM4LCAgICAwLCB7MHgwMCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHg0NiwgMHgzQiwgMHg4MCwgMHgwMn19LAorICAgICAgICAgezcsIDgzOCwgICAgMCwgezB4MDAsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4NDYsIDB4M0IsIDB4ODAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICB9LAorICAgLyogUVNJRiAqLworICAgeworICAgICAgLyogNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHsxLCAxNDYsICAgIDAsIHsweDJELCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDkyLCAweEZDLCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MSwgMTQ2LCAgICAwLCB7MHgyRCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg5MiwgMHhGQywgMHhDMCwgMHgwMn19LAorICAgICAgICAgezEsIDE0NiwgICAgMCwgezB4MkQsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4OTIsIDB4RkMsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsxLCAxNDYsICAgIDAsIHsweDJELCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDkyLCAweEZDLCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMTAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MiwgMjkxLCAgICAwLCB7MHgyQywgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyMywgMHhBMSwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezEsIDE5MSwgIDYzMCwgezB4MkMsIDB4RjQsIDB4MDUsIDB4MTMsIDB4QTksIDB4MTIsIDB4RTEsIDB4MTcsIDB4MDgsIDB4QkYsIDB4RjQsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsxLCAxOTEsICA2MzAsIHsweDJDLCAweEY0LCAweDA1LCAweDEzLCAweEE5LCAweDEyLCAweEUxLCAweDE3LCAweDA4LCAweEJGLCAweEY0LCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MSwgMTkxLCAgNjMwLCB7MHgyQywgMHhGNCwgMHgwNSwgMHgxMywgMHhBOSwgMHgxMiwgMHhFMSwgMHgxNywgMHgwOCwgMHhCRiwgMHhGNCwgMHhDMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDE1IGZwcyAqLworICAgICAgeworICAgICAgICAgezMsIDQzNywgICAgMCwgezB4MkIsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4QjUsIDB4NkQsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsyLCAyOTEsICA2NDAsIHsweDJCLCAweEY0LCAweDA1LCAweDEzLCAweEY3LCAweDEzLCAweDJGLCAweDEzLCAweDA4LCAweDIzLCAweEExLCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MiwgMjkxLCAgNjQwLCB7MHgyQiwgMHhGNCwgMHgwNSwgMHgxMywgMHhGNywgMHgxMywgMHgyRiwgMHgxMywgMHgwOCwgMHgyMywgMHhBMSwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezEsIDE5MSwgIDQyMCwgezB4MkIsIDB4RjQsIDB4MEQsIDB4MEQsIDB4MUIsIDB4MEMsIDB4NTMsIDB4MUUsIDB4MDgsIDB4QkYsIDB4RjQsIDB4QzAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAyMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHs0LCA1ODgsICAgIDAsIHsweDJBLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDRDLCAweDUyLCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MywgNDQ3LCAgNzMwLCB7MHgyQSwgMHhGNCwgMHgwNSwgMHgxNiwgMHhDOSwgMHgxNiwgMHgwMSwgMHgwRSwgMHgxOCwgMHhCRiwgMHg2OSwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezIsIDI5MiwgIDQ3NiwgezB4MkEsIDB4RjQsIDB4MEQsIDB4MEUsIDB4RDgsIDB4MEUsIDB4MTAsIDB4MTksIDB4MTgsIDB4MjQsIDB4QTEsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsxLCAxOTIsICAzMTIsIHsweDJBLCAweEY0LCAweDFELCAweDA5LCAweEIzLCAweDA4LCAweEVCLCAweDFFLCAweDE4LCAweEMwLCAweEY0LCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMjUgZnBzICovCisgICAgICB7CisgICAgICAgICB7NSwgNzAzLCAgICAwLCB7MHgyOSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHhCRiwgMHg0MiwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezMsIDQ0NywgIDYxMCwgezB4MjksIDB4RjQsIDB4MDUsIDB4MTMsIDB4MEIsIDB4MTIsIDB4NDMsIDB4MTQsIDB4MTgsIDB4QkYsIDB4NjksIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsyLCAyOTIsICAzOTgsIHsweDI5LCAweEY0LCAweDBELCAweDBDLCAweDZDLCAweDBCLCAweEE0LCAweDFFLCAweDE4LCAweDI0LCAweEExLCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MSwgMTkyLCAgMjYyLCB7MHgyOSwgMHhGNCwgMHgyNSwgMHgwOCwgMHgyMywgMHgwNywgMHg1QiwgMHgxRSwgMHgxOCwgMHhDMCwgMHhGNCwgMHhDMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDMwIGZwcyAqLworICAgICAgeworICAgICAgICAgezgsIDg3MywgICAgMCwgezB4MjgsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NjksIDB4MzcsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHs1LCA3MDQsICA3NzQsIHsweDI4LCAweEY0LCAweDA1LCAweDE4LCAweDIxLCAweDE3LCAweDU5LCAweDBGLCAweDE4LCAweEMwLCAweDQyLCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MywgNDQ4LCAgNDkyLCB7MHgyOCwgMHhGNCwgMHgwNSwgMHgwRiwgMHg1RCwgMHgwRSwgMHg5NSwgMHgxNSwgMHgxOCwgMHhDMCwgMHg2OSwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezIsIDI5MSwgIDMyMCwgezB4MjgsIDB4RjQsIDB4MUQsIDB4MDksIDB4RkIsIDB4MDksIDB4MzMsIDB4MUUsIDB4MTgsIDB4MjMsIDB4QTEsIDB4QzAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICB9LAorICAgLyogUUNJRiAqLworICAgeworICAgICAgLyogNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHsxLCAxOTMsICAgIDAsIHsweDBELCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweEMxLCAweEY0LCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MSwgMTkzLCAgICAwLCB7MHgwRCwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHhDMSwgMHhGNCwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezEsIDE5MywgICAgMCwgezB4MEQsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4QzEsIDB4RjQsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsxLCAxOTMsICAgIDAsIHsweDBELCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweEMxLCAweEY0LCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMTAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MywgMzg1LCAgICAwLCB7MHgwQywgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHg4MSwgMHg3OSwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezIsIDI5MSwgIDgwMCwgezB4MEMsIDB4RjQsIDB4MDUsIDB4MTgsIDB4RjQsIDB4MTgsIDB4MTgsIDB4MTEsIDB4MDgsIDB4MjMsIDB4QTEsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsyLCAyOTEsICA4MDAsIHsweDBDLCAweEY0LCAweDA1LCAweDE4LCAweEY0LCAweDE4LCAweDE4LCAweDExLCAweDA4LCAweDIzLCAweEExLCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MSwgMTk0LCAgNTMyLCB7MHgwQywgMHhGNCwgMHgwNSwgMHgxMCwgMHg5QSwgMHgwRiwgMHhCRSwgMHgxQiwgMHgwOCwgMHhDMiwgMHhGMCwgMHhDMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDE1IGZwcyAqLworICAgICAgeworICAgICAgICAgezQsIDU3NywgICAgMCwgezB4MEIsIDB4RjQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4NDEsIDB4NTIsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHszLCA0NDcsICA4MTgsIHsweDBCLCAweEY0LCAweDA1LCAweDE5LCAweDg5LCAweDE4LCAweEFELCAweDBGLCAweDEwLCAweEJGLCAweDY5LCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MiwgMjkyLCAgNTM0LCB7MHgwQiwgMHhGNCwgMHgwNSwgMHgxMCwgMHhBMywgMHgwRiwgMHhDNywgMHgxOSwgMHgxMCwgMHgyNCwgMHhBMSwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezEsIDE5NSwgIDM1NiwgezB4MEIsIDB4RjQsIDB4MTUsIDB4MEIsIDB4MTEsIDB4MEEsIDB4MzUsIDB4MUUsIDB4MTAsIDB4QzMsIDB4RjAsIDB4QzAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAyMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHs2LCA3NzYsICAgIDAsIHsweDBBLCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDA4LCAweDNGLCAweEMwLCAweDAyfX0sCisgICAgICAgICB7NCwgNTkxLCAgODA0LCB7MHgwQSwgMHhGNCwgMHgwNSwgMHgxOSwgMHgxRSwgMHgxOCwgMHg0MiwgMHgwRiwgMHgxOCwgMHg0RiwgMHg0RSwgMHhDMCwgMHgwMn19LAorICAgICAgICAgezMsIDQ0NywgIDYwOCwgezB4MEEsIDB4RjQsIDB4MDUsIDB4MTIsIDB4RkQsIDB4MTIsIDB4MjEsIDB4MTUsIDB4MTgsIDB4QkYsIDB4NjksIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHsyLCAyOTEsICAzOTYsIHsweDBBLCAweEY0LCAweDE1LCAweDBDLCAweDVFLCAweDBCLCAweDgyLCAweDFFLCAweDE4LCAweDIzLCAweEExLCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMjUgZnBzICovCisgICAgICB7CisgICAgICAgICB7OSwgOTI4LCAgICAwLCB7MHgwOSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHhBMCwgMHgzMywgMHhDMCwgMHgwMn19LAorICAgICAgICAgezUsIDcwMywgIDgwMCwgezB4MDksIDB4RjQsIDB4MDUsIDB4MTgsIDB4RjQsIDB4MTgsIDB4MTgsIDB4MTAsIDB4MTgsIDB4QkYsIDB4NDIsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHszLCA0NDcsICA1MDgsIHsweDA5LCAweEY0LCAweDBELCAweDBGLCAweEQyLCAweDBFLCAweEY2LCAweDFCLCAweDE4LCAweEJGLCAweDY5LCAweEMwLCAweDAyfX0sCisgICAgICAgICB7MiwgMjkyLCAgMzMyLCB7MHgwOSwgMHhGNCwgMHgxRCwgMHgwQSwgMHg1QSwgMHgwOSwgMHg3RSwgMHgxRSwgMHgxOCwgMHgyNCwgMHhBMSwgMHhDMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDMwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7OSwgOTU2LCAgODc2LCB7MHgwOCwgMHhGNCwgMHgwNSwgMHgxQiwgMHg1OCwgMHgxQSwgMHg3QywgMHgwRSwgMHgyMCwgMHhCQywgMHgzMywgMHgxMCwgMHgwMn19LAorICAgICAgICAgezQsIDU5MiwgIDU0MiwgezB4MDgsIDB4RjQsIDB4MDUsIDB4MTAsIDB4RTQsIDB4MTAsIDB4MDgsIDB4MTcsIDB4MjAsIDB4NTAsIDB4NEUsIDB4MTAsIDB4MDJ9fSwKKyAgICAgICAgIHsyLCAyOTEsICAyNjYsIHsweDA4LCAweEY0LCAweDI1LCAweDA4LCAweDQ4LCAweDA3LCAweDZDLCAweDFFLCAweDIwLCAweDIzLCAweEExLCAweDEwLCAweDAyfX0sCisgICAgICB9LAorICAgfSwKKyAgIC8qIFNJRiAqLworICAgeworICAgICAgLyogNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHs0LCA1ODIsICAgIDAsIHsweDM1LCAweEY0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQ2LCAweDUyLCAweDYwLCAweDAyfX0sCisgICAgICAgICB7MywgMzg3LCAxMjc2LCB7MHgzNSwgMHhGNCwgMHgwNSwgMHgyNywgMHhEOCwgMHgyNiwgMHg0OCwgMHgwMywgMHgxMCwgMHg4MywgMHg3OSwgMHg2MCwgMHgwMn19LAorICAgICAgICAgezIsIDI5MSwgIDk2MCwgezB4MzUsIDB4RjQsIDB4MEQsIDB4MUQsIDB4RjIsIDB4MUMsIDB4NjIsIDB4MDQsIDB4MTAsIDB4MjMsIDB4QTEsIDB4NjAsIDB4MDJ9fSwKKyAgICAgICAgIHsxLCAxOTEsICA2MzAsIHsweDM1LCAweEY0LCAweDFELCAweDEzLCAweEE5LCAweDEyLCAweDE5LCAweDA1LCAweDA4LCAweEJGLCAweEY0LCAweDYwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMTAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHs2LCA3NzUsIDEyNzgsIHsweDM0LCAweEY0LCAweDA1LCAweDI3LCAweEU4LCAweDI2LCAweDU4LCAweDA1LCAweDMwLCAweDA3LCAweDNGLCAweDEwLCAweDAyfX0sCisgICAgICAgICB7MywgNDQ3LCAgNzM2LCB7MHgzNCwgMHhGNCwgMHgxNSwgMHgxNiwgMHhGQiwgMHgxNSwgMHg2QiwgMHgwNSwgMHgxOCwgMHhCRiwgMHg2OSwgMHgxMCwgMHgwMn19LAorICAgICAgICAgezIsIDI5MSwgIDQ4MCwgezB4MzQsIDB4RjQsIDB4MkQsIDB4MEUsIDB4RjksIDB4MEQsIDB4NjksIDB4MDksIDB4MTgsIDB4MjMsIDB4QTEsIDB4MTAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAxNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezksIDk1NSwgMTA1MCwgezB4MzMsIDB4RjQsIDB4MDUsIDB4MjAsIDB4Q0YsIDB4MUYsIDB4M0YsIDB4MDYsIDB4NDgsIDB4QkIsIDB4MzMsIDB4MTAsIDB4MDJ9fSwKKyAgICAgICAgIHs0LCA1OTEsICA2NTAsIHsweDMzLCAweEY0LCAweDE1LCAweDE0LCAweDQ0LCAweDEyLCAweEI0LCAweDA4LCAweDMwLCAweDRGLCAweDRFLCAweDEwLCAweDAyfX0sCisgICAgICAgICB7MywgNDQ4LCAgNDkyLCB7MHgzMywgMHhGNCwgMHgyNSwgMHgwRiwgMHg1MiwgMHgwRCwgMHhDMiwgMHgwOSwgMHgyOCwgMHhDMCwgMHg2OSwgMHgxMCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDIwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7OSwgOTU4LCAgNzgyLCB7MHgzMiwgMHhGNCwgMHgwRCwgMHgxOCwgMHg2QSwgMHgxNiwgMHhEQSwgMHgwQiwgMHg1OCwgMHhCRSwgMHgzMywgMHhEMCwgMHgwMn19LAorICAgICAgICAgezUsIDcwMywgIDU3NCwgezB4MzIsIDB4RjQsIDB4MUQsIDB4MTEsIDB4RTcsIDB4MTAsIDB4NTcsIDB4MEIsIDB4NDAsIDB4QkYsIDB4NDIsIDB4RDAsIDB4MDJ9fSwKKyAgICAgICAgIHszLCA0NDYsICAzNjQsIHsweDMyLCAweEY0LCAweDNELCAweDBCLCAweDVDLCAweDA5LCAweENDLCAweDBFLCAweDMwLCAweEJFLCAweDY5LCAweEQwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMjUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHs5LCA5NTgsICA2NTQsIHsweDMxLCAweEY0LCAweDE1LCAweDE0LCAweDY2LCAweDEyLCAweEQ2LCAweDBCLCAweDUwLCAweEJFLCAweDMzLCAweDkwLCAweDAyfX0sCisgICAgICAgICB7NiwgNzc2LCAgNTMwLCB7MHgzMSwgMHhGNCwgMHgyNSwgMHgxMCwgMHg4QywgMHgwRSwgMHhGQywgMHgwQywgMHg0OCwgMHgwOCwgMHgzRiwgMHg5MCwgMHgwMn19LAorICAgICAgICAgezQsIDU5MiwgIDQwNCwgezB4MzEsIDB4RjQsIDB4MzUsIDB4MEMsIDB4OTYsIDB4MEIsIDB4MDYsIDB4MEIsIDB4MzgsIDB4NTAsIDB4NEUsIDB4OTAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAzMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezksIDk1NywgIDUyNiwgezB4MzAsIDB4RjQsIDB4MjUsIDB4MTAsIDB4NjgsIDB4MEUsIDB4RDgsIDB4MEQsIDB4NTgsIDB4QkQsIDB4MzMsIDB4NjAsIDB4MDJ9fSwKKyAgICAgICAgIHs2LCA3NzUsICA0MjYsIHsweDMwLCAweEY0LCAweDM1LCAweDBELCAweDQ4LCAweDBCLCAweEI4LCAweDBGLCAweDUwLCAweDA3LCAweDNGLCAweDYwLCAweDAyfX0sCisgICAgICAgICB7NCwgNTkwLCAgMzI0LCB7MHgzMCwgMHg3QSwgMHg0QiwgMHgwQSwgMHgxQywgMHgwOCwgMHhCNCwgMHgwRSwgMHg0MCwgMHg0RSwgMHg1MiwgMHg2MCwgMHgwMn19LAorICAgICAgfSwKKyAgIH0sCisgICAvKiBDSUYgKi8KKyAgIHsKKyAgICAgIC8qIDUgZnBzICovCisgICAgICB7CisgICAgICAgICB7NiwgNzcxLCAgICAwLCB7MHgxNSwgMHhGNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMywgMHgzRiwgMHg4MCwgMHgwMn19LAorICAgICAgICAgezQsIDQ2NSwgMTI3OCwgezB4MTUsIDB4RjQsIDB4MDUsIDB4MjcsIDB4RUUsIDB4MjYsIDB4MzYsIDB4MDMsIDB4MTgsIDB4RDEsIDB4NjUsIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHsyLCAyOTEsICA4MDAsIHsweDE1LCAweEY0LCAweDE1LCAweDE4LCAweEY0LCAweDE3LCAweDNDLCAweDA1LCAweDE4LCAweDIzLCAweEExLCAweDgwLCAweDAyfX0sCisgICAgICAgICB7MSwgMTkzLCAgNTI4LCB7MHgxNSwgMHhGNCwgMHgyRCwgMHgxMCwgMHg3RSwgMHgwRSwgMHhDNiwgMHgwQSwgMHgxOCwgMHhDMSwgMHhGNCwgMHg4MCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDEwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7OSwgOTMyLCAxMjc4LCB7MHgxNCwgMHhGNCwgMHgwNSwgMHgyNywgMHhFRSwgMHgyNiwgMHgzNiwgMHgwNCwgMHgzMCwgMHhBNCwgMHgzMywgMHgxMCwgMHgwMn19LAorICAgICAgICAgezQsIDU5MSwgIDgxMiwgezB4MTQsIDB4RjQsIDB4MTUsIDB4MTksIDB4NTYsIDB4MTcsIDB4OUUsIDB4MDYsIDB4MjgsIDB4NEYsIDB4NEUsIDB4MTAsIDB4MDJ9fSwKKyAgICAgICAgIHsyLCAyOTEsICA0MDAsIHsweDE0LCAweEY0LCAweDNELCAweDBDLCAweDdBLCAweDBBLCAweEMyLCAweDBFLCAweDI4LCAweDIzLCAweEExLCAweDEwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMTUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHs5LCA5NTYsICA4NzYsIHsweDEzLCAweEY0LCAweDBELCAweDFCLCAweDU4LCAweDE5LCAweEEwLCAweDA1LCAweDM4LCAweEJDLCAweDMzLCAweDYwLCAweDAyfX0sCisgICAgICAgICB7NSwgNzAzLCAgNjQ0LCB7MHgxMywgMHhGNCwgMHgxRCwgMHgxNCwgMHgxQywgMHgxMiwgMHg2NCwgMHgwOCwgMHgzOCwgMHhCRiwgMHg0MiwgMHg2MCwgMHgwMn19LAorICAgICAgICAgezMsIDQ0OCwgIDQxMCwgezB4MTMsIDB4RjQsIDB4M0QsIDB4MEMsIDB4QzQsIDB4MEIsIDB4MEMsIDB4MEUsIDB4MzgsIDB4QzAsIDB4NjksIDB4NjAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAyMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezksIDk1NiwgIDY1MCwgezB4MTIsIDB4RjQsIDB4MUQsIDB4MTQsIDB4NEEsIDB4MTIsIDB4OTIsIDB4MDksIDB4NDgsIDB4QkMsIDB4MzMsIDB4MTAsIDB4MDN9fSwKKyAgICAgICAgIHs2LCA3NzYsICA1MjgsIHsweDEyLCAweEY0LCAweDJELCAweDEwLCAweDdFLCAweDBFLCAweEM2LCAweDBBLCAweDQwLCAweDA4LCAweDNGLCAweDEwLCAweDAzfX0sCisgICAgICAgICB7NCwgNTkxLCAgNDAyLCB7MHgxMiwgMHhGNCwgMHgzRCwgMHgwQywgMHg4RiwgMHgwQSwgMHhENywgMHgwRSwgMHg0MCwgMHg0RiwgMHg0RSwgMHgxMCwgMHgwM319LAorICAgICAgfSwKKyAgICAgIC8qIDI1IGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7OSwgOTU2LCAgNTQ0LCB7MHgxMSwgMHhGNCwgMHgyNSwgMHgxMCwgMHhGNCwgMHgwRiwgMHgzQywgMHgwQSwgMHg0OCwgMHhCQywgMHgzMywgMHhDMCwgMHgwMn19LAorICAgICAgICAgezcsIDg0MCwgIDQ3OCwgezB4MTEsIDB4RjQsIDB4MkQsIDB4MEUsIDB4RUIsIDB4MEQsIDB4MzMsIDB4MEIsIDB4NDgsIDB4NDgsIDB4M0IsIDB4QzAsIDB4MDJ9fSwKKyAgICAgICAgIHs1LCA3MDMsICA0MDAsIHsweDExLCAweEY0LCAweDNELCAweDBDLCAweDdBLCAweDBBLCAweEMyLCAweDBFLCAweDQ4LCAweEJGLCAweDQyLCAweEMwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMzAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHs5LCA5NTYsICA0MzgsIHsweDEwLCAweEY0LCAweDM1LCAweDBELCAweEFDLCAweDBCLCAweEY0LCAweDBELCAweDUwLCAweEJDLCAweDMzLCAweDEwLCAweDAyfX0sCisgICAgICAgICB7NywgODM4LCAgMzg0LCB7MHgxMCwgMHhGNCwgMHg0NSwgMHgwQiwgMHhGRCwgMHgwQSwgMHg0NSwgMHgwRiwgMHg1MCwgMHg0NiwgMHgzQiwgMHgxMCwgMHgwMn19LAorICAgICAgICAgezYsIDc3MywgIDM1NCwgezB4MTAsIDB4N0EsIDB4NEIsIDB4MEIsIDB4MEMsIDB4MDksIDB4ODAsIDB4MTAsIDB4NTAsIDB4MDUsIDB4M0YsIDB4MTAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICB9LAorICAgLyogVkdBICovCisgICB7CisgICAgICAvKiA1IGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7NiwgNzczLCAxMjcyLCB7MHgxRCwgMHhGNCwgMHgxNSwgMHgyNywgMHhCNiwgMHgyNCwgMHg5NiwgMHgwMiwgMHgzMCwgMHgwNSwgMHgzRiwgMHgxMCwgMHgwMn19LAorICAgICAgICAgezQsIDU5MiwgIDk3NiwgezB4MUQsIDB4RjQsIDB4MjUsIDB4MUUsIDB4NzgsIDB4MUIsIDB4NTgsIDB4MDMsIDB4MzAsIDB4NTAsIDB4NEUsIDB4MTAsIDB4MDJ9fSwKKyAgICAgICAgIHszLCA0NDgsICA3MzgsIHsweDFELCAweEY0LCAweDNELCAweDE3LCAweDBDLCAweDEzLCAweEVDLCAweDA0LCAweDMwLCAweEMwLCAweDY5LCAweDEwLCAweDAyfX0sCisgICAgICB9LAorICAgICAgLyogMTAgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHs5LCA5NTYsICA3ODgsIHsweDFDLCAweEY0LCAweDM1LCAweDE4LCAweDlDLCAweDE1LCAweDdDLCAweDAzLCAweDQ4LCAweEJDLCAweDMzLCAweDEwLCAweDAyfX0sCisgICAgICAgICB7NiwgNzc2LCAgNjQwLCB7MHgxQywgMHg3QSwgMHg1MywgMHgxMywgMHhGQywgMHgxMSwgMHgyQywgMHgwNCwgMHg0OCwgMHgwOCwgMHgzRiwgMHgxMCwgMHgwMn19LAorICAgICAgICAgezQsIDU5MiwgIDQ4OCwgezB4MUMsIDB4N0EsIDB4NkIsIDB4MEYsIDB4M0MsIDB4MEMsIDB4NkMsIDB4MDYsIDB4NDgsIDB4NTAsIDB4NEUsIDB4MTAsIDB4MDJ9fSwKKyAgICAgIH0sCisgICAgICAvKiAxNSBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezksIDk1NywgIDUyNiwgezB4MUIsIDB4N0EsIDB4NjMsIDB4MTAsIDB4NjgsIDB4MEQsIDB4OTgsIDB4MDYsIDB4NTgsIDB4QkQsIDB4MzMsIDB4ODAsIDB4MDJ9fSwKKyAgICAgICAgIHs5LCA5NTcsICA1MjYsIHsweDFCLCAweDdBLCAweDYzLCAweDEwLCAweDY4LCAweDBELCAweDk4LCAweDA2LCAweDU4LCAweEJELCAweDMzLCAweDgwLCAweDAyfX0sCisgICAgICAgICB7OCwgODk1LCAgNDkyLCB7MHgxQiwgMHg3QSwgMHg2QiwgMHgwRiwgMHg1RCwgMHgwQywgMHg4RCwgMHgwNiwgMHg1OCwgMHg3RiwgMHgzNywgMHg4MCwgMHgwMn19LAorICAgICAgfSwKKyAgICAgIC8qIDIwIGZwcyAqLworICAgICAgeworICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICB9LAorICAgICAgLyogMjUgZnBzICovCisgICAgICB7CisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgIH0sCisgICAgICAvKiAzMCBmcHMgKi8KKyAgICAgIHsKKyAgICAgICAgIHswLCB9LAorICAgICAgICAgezAsIH0sCisgICAgICAgICB7MCwgfSwKKyAgICAgICAgIHswLCB9LAorICAgICAgfSwKKyAgIH0sCit9OworCisvKgorICogMTYgdmVyc2lvbnM6CisgKiAgIDIgdGFibGVzICAob25lIGZvciBZLCBhbmQgb25lIGZvciBVJlYpCisgKiAgIDE2IGxldmVscyBvZiBkZXRhaWxzIHBlciB0YWJsZXMKKyAqICAgOCBibG9jcworICovCisKK2NvbnN0IHVuc2lnbmVkIGludCBUaW1vblJvbVRhYmxlIFsxNl1bMl1bMTZdWzhdID0gIAoreworIHsgLyogdmVyc2lvbiAwICovCisgIHsgLyogdmVyc2lvbiAwLCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDEsMHgwMDAwMDAwMSwKKyAgICAweDAwMDAwMDAxLDB4MDAwMDAwMDEsMHgwMDAwMDAwMSwweDAwMDAwMDAxfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDAxLAorICAgIDB4MDAwMDAwMDEsMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA5LDB4MDAwMDAwMDEsCisgICAgMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDksMHgwMDAwMDAwOSwKKyAgICAweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDA0OSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwOSwweDAwMDAwMDA5LAorICAgIDB4MDAwMDAwMDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA5LDB4MDAwMDAwMDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAxMjUyLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDAsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDAxLAorICAgIDB4MDAwMDAwMDEsMHgwMDAwMDAwMSwweDAwMDAwMDAwLDB4MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA5LDB4MDAwMDAwMDEsCisgICAgMHgwMDAwMDAwMSwweDAwMDAwMDA5LDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDksMHgwMDAwMDAwOSwKKyAgICAweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDAwMCwweDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwOSwweDAwMDAwMDA5LAorICAgIDB4MDAwMDAwMDksMHgwMDAwMDAwOSwweDAwMDAwMDAxLDB4MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwMDksCisgICAgMHgwMDAwMDAwOSwweDAwMDAwMDQ5LDB4MDAwMDAwMDEsMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDAwOSwKKyAgICAweDAwMDAwMDA5LDB4MDAwMDAwNDksMHgwMDAwMDAwMSwweDAwMDAwMDAxfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDA5LDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwMDksMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDAwOSwweDAwMDAwMDAxfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDA5LDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMjQ5LDB4MDAwMDAwNDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAyNDksMHgwMDAwMDA0OSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMDQ5LDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDAyNGEsMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gMSAqLworICB7IC8qIHZlcnNpb24gMSwgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMDEsCisgICAgMHgwMDAwMDAwMSwweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDksMHgwMDAwMDAwOSwKKyAgICAweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDAwOSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwOSwweDAwMDAwMDA5LAorICAgIDB4MDAwMDAwMDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDA5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI1MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiAxLCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDksMHgwMDAwMDAwOSwKKyAgICAweDAwMDAwMDA5LDB4MDAwMDAwMDEsMHgwMDAwMDAwMSwweDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwOSwweDAwMDAwMDA5LAorICAgIDB4MDAwMDAwMDksMHgwMDAwMDAwOSwweDAwMDAwMDAxLDB4MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDA5LDB4MDAwMDAwMDEsMHgwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDAwMSwweDAwMDAwMDAxfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDA5LDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMjQ5LDB4MDAwMDAwMDksMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDAwOSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMDQ5LDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAxMjRhLDB4MDAwMDAwNDksMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDEyNGEsMHgwMDAwMDA0OSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMTI0YSwweDAwMDAwMjRhLDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDAyNGEsMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwMDI0YSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI1MiwweDAwMDAxMjUyLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDIgKi8KKyAgeyAvKiB2ZXJzaW9uIDIsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwOSwweDAwMDAwMDA5LAorICAgIDB4MDAwMDAwMDksMHgwMDAwMDAwOSwweDAwMDAwMDA5LDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwOTI1MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMDk0OTMsMHgwMDAwYTQ5YiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNmRjLDB4MDAwMTI2ZGMsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gMiwgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwMDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDA5LDB4MDAwMDAwMDEsMHgwMDAwMDAwMH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDA0OSwweDAwMDAwMjRhLDB4MDAwMDAwMDF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMDAxfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDAyNGEsMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwMDI0YSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwOTI1MiwweDAwMDAxMjUyLDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjkyLDB4MDAwMDEyNTIsMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyOTIsMHgwMDAwMTI1MiwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDAxMjUyLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDEyNTIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5NDkyLDB4MDAwMDk0OTMsMHgwMDAwOTI5MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9LAorIHsgLyogdmVyc2lvbiAzICovCisgIHsgLyogdmVyc2lvbiAzLCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAxMjUyLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDA5MjUyLAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNTIsCisgICAgMHgwMDAwOTI5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI1MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDEyNGRiLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMzZlNCwweDAwMDFiNzI1LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDMsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDAxLDB4MDAwMDAwMDB9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAwNDksMHgwMDAwMDAwMX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDAwMDAxfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAxMjUyLDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwMDAwOX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5NDkzLDB4MDAwMDkyOTIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDk0OTMsMHgwMDAwOTI5MiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTMsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5NDkyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5MywweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjUyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDkyOTIsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gNCAqLworICB7IC8qIHZlcnNpb24gNCwgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDA0OSwweDAwMDAwMDQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5NDkzLDB4MDAwMDk0OTMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwYTQ5YiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMWI3MjQsMHgwMDAxYjcyNSwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiA0LCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAxMjUyLDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDkyOTIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDBhNDliLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwYTQ5YiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI1MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDUgKi8KKyAgeyAvKiB2ZXJzaW9uIDUsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwYTQ5YiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMWI3MjUsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAxYjcyNSwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDFiOTJkLDB4MDAwMWI5MjV9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWM5NmUsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gNSwgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5MywweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5NDkyLDB4MDAwMDk0OTMsMHgwMDAxMjRkYiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwOTQ5MywweDAwMDEyNGRiLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDBhNDliLDB4MDAwMTI0ZGIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAxMjRkYiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9LAorIHsgLyogdmVyc2lvbiA2ICovCisgIHsgLyogdmVyc2lvbiA2LCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwYTQ5YiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwOTQ5MiwweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEzNmU0LDB4MDAwMWI3MjUsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNGRiLDB4MDAwMTM2ZTQsMHgwMDAxYjcyNSwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDFiOTJkLDB4MDAwMWI5MjV9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWI5MmQsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMWI3MjQsMHgwMDAxYzk2ZSwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjkyNSwweDAwMDI1YmI2LDB4MDAwMjRiNzd9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDYsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMDI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI1MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMTI2ZGMsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAxMjZkYywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDEyNmRjLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNGRiLDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gNyAqLworICB7IC8qIHZlcnNpb24gNywgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDBhNDliLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMTI0ZGIsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMWI3MjUsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxYjcyNSwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMWI5MjV9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWM5NmUsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMWI3MjQsMHgwMDAxYzk2ZSwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjcyNCwweDAwMDFjOTZlLDB4MDAwMjQ5NmV9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiOTI1LDB4MDAwMWM5NmUsMHgwMDAyNDk2ZX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMjQ5NmQsMHgwMDAyNWJiNiwweDAwMDI1YmJmfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiA3LCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5NDkyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5MywweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMTI0ZGIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTM2ZTQsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI0ZGIsMHgwMDAxMzZlNCwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAxMjQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYjkyNSwweDAwMDFiNzI1LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDggKi8KKyAgeyAvKiB2ZXJzaW9uIDgsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwYTQ5YiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEzNmU0LDB4MDAwMWI3MjUsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxYjcyNSwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjUyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWI5MmQsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMWI5MjUsMHgwMDAxYzk2ZSwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjkyNSwweDAwMDFjOTZlLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiOTI1LDB4MDAwMjRiNzYsMHgwMDAyNGI3N30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI5MjUsMHgwMDAyNGI3NiwweDAwMDI1YmJmfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYzkyZCwweDAwMDI0Yjc2LDB4MDAwMjViYmZ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDEyNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDI0YjZkLDB4MDAwMmRkYjYsMHgwMDAyZWZmZn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gOCwgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyOTIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAxMjRkYiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMzZlNCwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAxYjcyNSwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjkyNSwweDAwMDFiNzI1LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiOTI1LDB4MDAwMWI3MjUsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMjQ5NmQsMHgwMDAxYjkyZCwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9LAorIHsgLyogdmVyc2lvbiA5ICovCisgIHsgLyogdmVyc2lvbiA5LCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDQ5LDB4MDAwMDAwNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMjQ5LDB4MDAwMDAyNDksMHgwMDAwMDI0YSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwOTI1MiwweDAwMDAxMjUyLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5MywweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNTIsMHgwMDAwOTQ5MywKKyAgICAweDAwMDEyNGRiLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI1MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMWI3MjQsMHgwMDAxYjcyNSwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjkyNSwweDAwMDFiOTJkLDB4MDAwMWI5MjV9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDksIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMDA0OSwKKyAgICAweDAwMDAwMDA5LDB4MDAwMDAwMDksMHgwMDAwMDAwOSwweDAwMDAwMDA5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAwNDksMHgwMDAwMDA0OSwweDAwMDAwMDA5LDB4MDAwMDAwMDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAwMjQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwMDA0OSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwMTI0YSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTI1MiwweDAwMDAxMjRhLDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMDkyNTIsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMDk0OTMsMHgwMDAwOTQ5MywweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5YiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjUyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gMTAgKi8KKyAgeyAvKiB2ZXJzaW9uIDEwLCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDI0OSwweDAwMDAwMjQ5LDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDkyNTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDkyNGEsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5NDkzLDB4MDAwMGE0OWIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI5MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNGRiLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWI5MmQsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMWI5MjUsMHgwMDAxYjkyZCwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAyNDk2ZCwweDAwMDFjOTZlLDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDEwLCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMjQ5LDB4MDAwMDAyNDksCisgICAgMHgwMDAwMDA0OSwweDAwMDAwMDQ5LDB4MDAwMDAwNDksMHgwMDAwMDA0OX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDAyNDksMHgwMDAwMDA0OSwweDAwMDAwMDQ5fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwOTI1MiwweDAwMDAwMjRhLDB4MDAwMDAwNDl9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5NDkzLDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI1MiwKKyAgICAweDAwMDA5NDkyLDB4MDAwMDk0OTMsMHgwMDAwMTI1MiwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwOTQ5MywweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwOTQ5MiwweDAwMDA5NDkzLDB4MDAwMDkyOTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMDk0OTMsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDA5NDkzLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDk0OTMsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI1MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDExICovCisgIHsgLyogdmVyc2lvbiAxMSwgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5NDkyLDB4MDAwMGE0OWIsMHgwMDAwYTQ5YiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5NDkzLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDEyNGRiLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI2ZGMsMHgwMDAxMjZkYywweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxMzZlNCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxYjcyNCwweDAwMDFiNzI1LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWI5MmQsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAxYjkyZCwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjkyNSwweDAwMDFjOTZlLDB4MDAwMWI5MjV9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFiOTI1LDB4MDAwMWM5NmUsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFjOTI0LDB4MDAwMjQ5NmQsMHgwMDAyNWJiNiwweDAwMDI0Yjc3fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiAxMSwgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAwMjQ5LAorICAgIDB4MDAwMDAyNDksMHgwMDAwMDI0OSwweDAwMDAwMjRhLDB4MDAwMDAyNGF9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDAyNGEsMHgwMDAwMDI0YX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyNTIsMHgwMDAwMDI0YSwweDAwMDAwMjRhfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwYTQ5YiwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwOTI5MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDk0OTMsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI0ZGIsMHgwMDAwOTQ5MywweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjRkYiwweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjRkYiwweDAwMDEyNGRiLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9LAorIHsgLyogdmVyc2lvbiAxMiAqLworICB7IC8qIHZlcnNpb24gMTIsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDA5MjUyLDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI2ZGMsMHgwMDAxMjZkYywweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMWI3MjQsMHgwMDAxYjcyNSwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjcyNCwweDAwMDFiOTJkLDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWI5MmQsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAxYjkyZCwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjkyNSwweDAwMDFiOTJkLDB4MDAwMWI5MjV9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFiOTI1LDB4MDAwMWM5NmUsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMWM5MmQsMHgwMDAxYzk2ZSwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYzkyZCwweDAwMDI0Yjc2LDB4MDAwMjQ5NmV9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDEyNDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxYzkyNCwweDAwMDI0YjZkLDB4MDAwMmRkYjYsMHgwMDAyNWJiZn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gMTIsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwMTI0OSwKKyAgICAweDAwMDAxMjRhLDB4MDAwMDEyNGEsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjkyLAorICAgIDB4MDAwMDk0OTIsMHgwMDAwOTI1MiwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDA5MjkyLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDBhNDliLDB4MDAwMDk0OTMsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNGRiLDB4MDAwMTI0ZGIsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0ZGIsMHgwMDAxMjRkYiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTI2ZGMsMHgwMDAwYTQ5YiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYzkyNCwweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfSwKKyB7IC8qIHZlcnNpb24gMTMgKi8KKyAgeyAvKiB2ZXJzaW9uIDEzLCBwYXNzZXMgMCAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwOTI1MiwweDAwMDA5MjkyLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMTI0ZGIsMHgwMDAxMjZkYywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEyNmRjLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMTM2ZTQsMHgwMDAxYjcyNSwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI5MiwweDAwMDBhNDliLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjcyNCwweDAwMDFiNzI1LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFiNzI0LDB4MDAwMWI3MjUsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAxYzk2ZSwweDAwMDEzNmU0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYzkyZCwweDAwMDFjOTZlLDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMzZlNCwweDAwMDFjOTJkLDB4MDAwMWM5NmUsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMWM5MmQsMHgwMDAxYzk2ZSwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYzkyZCwweDAwMDI0Yjc2LDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxYjkyNCwweDAwMDFjOTJkLDB4MDAwMjRiNzYsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjZkYiwKKyAgICAweDAwMDFiOTI0LDB4MDAwMWM5MmQsMHgwMDAyNGI3NiwweDAwMDI0OTZlfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAxMjQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMjQ5MjQsMHgwMDAyNGI2ZCwweDAwMDJkZGI2LDB4MDAwMjViYmZ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfSwKKyAgeyAvKiB2ZXJzaW9uIDEzLCBwYXNzZXMgMSAqLworICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMDEyNDksCisgICAgMHgwMDAwMTI0YSwweDAwMDAxMjRhLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTQ5MywKKyAgICAweDAwMDA5NDkyLDB4MDAwMDkyOTIsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAwYTQ5YiwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDBhNDliLDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAwYTQ5YiwweDAwMDA5NDkzLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMTI0ZGIsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMjRkYiwweDAwMDBhNDliLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEyNmRjLDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyOTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMjZkYywweDAwMDEyNGRiLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjZkYywweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAxMjQ5MiwweDAwMDFiNmRiLAorICAgIDB4MDAwMWM5MjQsMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsCisgICAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMH0KKyAgfQorIH0sCisgeyAvKiB2ZXJzaW9uIDE0ICovCisgIHsgLyogdmVyc2lvbiAxNCwgcGFzc2VzIDAgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDA5MjRhLAorICAgIDB4MDAwMDkyOTIsMHgwMDAwOTQ5MywweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMjQ5LDB4MDAwMGE0OWIsCisgICAgMHgwMDAwYTQ5MywweDAwMDEyNGRiLDB4MDAwMTI2ZGMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDEyNDliLDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTI2ZGMsMHgwMDAxMzZlNCwweDAwMDFiNzI1LDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWI5MmQsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAxYjkyZCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYzkyZCwweDAwMDFjOTZlLDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFjOTJkLDB4MDAwMWM5NmUsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMWM5MmQsMHgwMDAyNGI3NiwweDAwMDFiOTI1fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYzkyZCwweDAwMDI0Yjc2LDB4MDAwMWM5MmR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFjOTJkLDB4MDAwMjRiNzYsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMWM5MmQsMHgwMDAyNGI3NiwweDAwMDI0OTZlfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI5MjQsMHgwMDAyNDk2ZCwweDAwMDI0Yjc2LDB4MDAwMjRiNzd9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjkyNCwweDAwMDI0YjZkLDB4MDAwMmRkYjYsMHgwMDAyNWJiZn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMTI0OTIsMHgwMDAxYjZkYiwKKyAgICAweDAwMDI0OTI0LDB4MDAwMmRiNmQsMHgwMDAzNmRiNiwweDAwMDJlZmZmfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0sCisgIHsgLyogdmVyc2lvbiAxNCwgcGFzc2VzIDEgKi8KKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMTI0OSwweDAwMDAxMjQ5LAorICAgIDB4MDAwMDEyNGEsMHgwMDAwMTI0YSwweDAwMDAxMjUyLDB4MDAwMDEyNTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMDk0OTMsCisgICAgMHgwMDAwYTQ5MywweDAwMDA5MjkyLDB4MDAwMDEyNTIsMHgwMDAwMTI1Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwYTQ5YiwKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAwMTI1MiwweDAwMDAxMjUyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMzZlNCwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjQ5YiwweDAwMDEzNmU0LDB4MDAwMDkyOTIsMHgwMDAwOTI5Mn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMTM2ZTQsMHgwMDAwOTQ5MywweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDA5NDkzLDB4MDAwMDk0OTN9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMGE0OWIsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAwYTQ5YiwweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDBhNDliLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI0ZGIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMTM2ZTQsMHgwMDAxMjRkYiwweDAwMDBhNDlifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDEyNmRjLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDEzNmU0LDB4MDAwMTI2ZGMsMHgwMDAxMjRkYn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMTI0OTIsMHgwMDAxYjZkYiwKKyAgICAweDAwMDFjOTI0LDB4MDAwMWI3MjQsMHgwMDAxMzZlNCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLAorICAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDB9CisgIH0KKyB9LAorIHsgLyogdmVyc2lvbiAxNSAqLworICB7IC8qIHZlcnNpb24gMTUsIHBhc3NlcyAwICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDEyNDksMHgwMDAwOTQ5MywKKyAgICAweDAwMDBhNDkzLDB4MDAwMGE0OWIsMHgwMDAxMjRkYiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMTI0OWIsMHgwMDAxMjZkYywweDAwMDEzNmU0LDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMGE0OWIsCisgICAgMHgwMDAxMjZkYywweDAwMDFiNzI0LDB4MDAwMWI3MjUsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEzNmU0LDB4MDAwMWI3MjQsMHgwMDAxYjkyZCwweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjkyNSwweDAwMDFjOTZlLDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5NDkyLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFjOTJkLDB4MDAwMWM5NmUsMHgwMDAxYjcyNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMjRkYiwKKyAgICAweDAwMDFiNzI0LDB4MDAwMWM5MmQsMHgwMDAxYzk2ZSwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEyNmRiLAorICAgIDB4MDAwMWI3MjQsMHgwMDAxYzkyZCwweDAwMDFjOTZlLDB4MDAwMWI5MjV9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTI2ZGIsCisgICAgMHgwMDAxYjkyNCwweDAwMDFjOTJkLDB4MDAwMjRiNzYsMHgwMDAxYzkyZH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFiOTI0LDB4MDAwMWM5MmQsMHgwMDAyNGI3NiwweDAwMDFjOTJkfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWI5MjQsMHgwMDAyNDk2ZCwweDAwMDI0Yjc2LDB4MDAwMjQ5NmV9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYzkyNCwweDAwMDI0OTZkLDB4MDAwMjViYjYsMHgwMDAyNGI3N30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFjOTI0LDB4MDAwMjRiNmQsMHgwMDAyNWJiNiwweDAwMDI0Yjc3fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAxMjQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWM5MjQsMHgwMDAyNGI2ZCwweDAwMDJkZGI2LDB4MDAwMjViYmZ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDEyNDkyLDB4MDAwMWI2ZGIsCisgICAgMHgwMDAyNDkyNCwweDAwMDJkYjZkLDB4MDAwMzZkYjYsMHgwMDAyZWZmZn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9LAorICB7IC8qIHZlcnNpb24gMTUsIHBhc3NlcyAxICovCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAwOTI0YSwKKyAgICAweDAwMDA5MjkyLDB4MDAwMDkyOTIsMHgwMDAwOTI5MiwweDAwMDA5MjkyfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDBhNDliLAorICAgIDB4MDAwMGE0OTMsMHgwMDAxMjRkYiwweDAwMDA5MjkyLDB4MDAwMDkyOTJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjRhLDB4MDAwMTI0ZGIsCisgICAgMHgwMDAxMjRkYiwweDAwMDFiNzI0LDB4MDAwMDk0OTMsMHgwMDAwOTQ5M30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDkyNGEsMHgwMDAxMjRkYiwKKyAgICAweDAwMDEyNmRjLDB4MDAwMWI3MjQsMHgwMDAwOTQ5MywweDAwMDA5NDkzfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTI0YSwweDAwMDEyNGRiLAorICAgIDB4MDAwMTM2ZTQsMHgwMDAxYjcyNCwweDAwMDBhNDliLDB4MDAwMGE0OWJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA5MjkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYjcyNCwweDAwMDFiNzI0LDB4MDAwMGE0OWIsMHgwMDAwYTQ5Yn0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDk0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFjOTI0LDB4MDAwMWI3MjQsMHgwMDAxMjRkYiwweDAwMDEyNGRifSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwOTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWM5MjQsMHgwMDAxYjcyNCwweDAwMDEyNGRiLDB4MDAwMTI0ZGJ9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYzkyNCwweDAwMDFiNzI0LDB4MDAwMTI2ZGMsMHgwMDAxMjZkY30sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFjOTI0LDB4MDAwMWI5MjUsMHgwMDAxMjZkYywweDAwMDEyNmRjfSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYTQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWM5MjQsMHgwMDAxYjkyNSwweDAwMDEzNmU0LDB4MDAwMTM2ZTR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBhNDkyLDB4MDAwMTM2ZGIsCisgICAgMHgwMDAxYzkyNCwweDAwMDFiOTI1LDB4MDAwMTM2ZTQsMHgwMDAxMzZlNH0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGE0OTIsMHgwMDAxMzZkYiwKKyAgICAweDAwMDFjOTI0LDB4MDAwMWI5MjUsMHgwMDAxYjcyNSwweDAwMDFiNzI0fSwKKyAgIHsweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAxMjQ5MiwweDAwMDEzNmRiLAorICAgIDB4MDAwMWM5MjQsMHgwMDAxYjkyNSwweDAwMDFiNzI1LDB4MDAwMWI3MjR9LAorICAgezB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDEyNDkyLDB4MDAwMWI2ZGIsCisgICAgMHgwMDAyNDkyNCwweDAwMDI0OTZkLDB4MDAwMWI5MmQsMHgwMDAxYjkyNX0sCisgICB7MHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwKKyAgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwfQorICB9CisgfQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtdGltb24uaCBiL2RyaXZlcnMvdXNiL21lZGlhL3B3Yy9wd2MtdGltb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODZiMzc4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy10aW1vbi5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qIExpbnV4IGRyaXZlciBmb3IgUGhpbGlwcyB3ZWJjYW0KKyAgIChDKSAyMDA0ICAgICAgTHVjIFNhaWxsYXJkIChsdWNAc2FpbGxhcmQub3JnKQorCisgICBOT1RFOiB0aGlzIHZlcnNpb24gb2YgcHdjIGlzIGFuIHVub2ZmaWNpYWwgKG1vZGlmaWVkKSByZWxlYXNlIG9mIHB3YyAmIHBjd3gKKyAgIGRyaXZlciBhbmQgdGh1cyBtYXkgaGF2ZSBidWdzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLgorICAgUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgYW5kIHN1cHBvcnQgcmVxdWVzdHMgdG8gPGx1Y0BzYWlsbGFyZC5vcmc+LgorICAgVGhlIGRlY29tcHJlc3Npb24gcm91dGluZXMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGJ5IHJldmVyc2UtZW5naW5lZXJpbmcgdGhlCisgICBOZW1vc29mdCBiaW5hcnkgcHdjeCBtb2R1bGUuIENhdmVhdCBlbXB0b3IuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworCisKKy8qIFRoaXMgdGFibGVzIGNvbnRhaW5zIGVudHJpZXMgZm9yIHRoZSA2NzUvNjgwLzY5MCAoVGltb24pIGNhbWVyYSwgd2l0aAorICAgNCBkaWZmZXJlbnQgcXVhbGl0aWVzIChubyBjb21wcmVzc2lvbiwgbG93LCBtZWRpdW0sIGhpZ2gpLgorICAgSXQgbGlzdHMgdGhlIGJhbmR3aWR0aCByZXF1aXJlbWVudHMgZm9yIHNhaWQgbW9kZSBieSBpdHMgYWx0ZXJuYXRlIGludGVyZmFjZQorICAgbnVtYmVyLiBBbiBhbHRlcm5hdGUgb2YgMCBtZWFucyB0aGF0IHRoZSBtb2RlIGlzIHVuYXZhaWxhYmxlLgorCisgICBUaGVyZSBhcmUgNiAqIDQgKiA0IGVudHJpZXM6CisgICAgIDYgZGlmZmVyZW50IHJlc29sdXRpb25zIHN1YnFjaWYsIHFzaWYsIHFjaWYsIHNpZiwgY2lmLCB2Z2EKKyAgICAgNiBmcmFtZXJhdGVzOiA1LCAxMCwgMTUsIDIwLCAyNSwgMzAKKyAgICAgNCBjb21wcmVzc2lvbiBtb2RpOiBub25lLCBsb3csIG1lZGl1bSwgaGlnaAorCisgICBXaGVuIGFuIHVuY29tcHJlc3NlZCBtb2RlIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBuZXh0IGF2YWlsYWJsZSBjb21wcmVzc2VkIG1vZGUKKyAgIHdpbGwgYmUgY2hvc2VuICh1bmxlc3MgdGhlIGRlY29tcHJlc3NvciBpcyBhYnNlbnQpLiBTb21ldGltZXMgdGhlcmUgYXJlIG9ubHkKKyAgIDEgb3IgMiBjb21wcmVzc2VkIG1vZGVzIGF2YWlsYWJsZTsgaW4gdGhhdCBjYXNlIGVudHJpZXMgYXJlIGR1cGxpY2F0ZWQuCisqLworCisjaWZuZGVmIFBXQ19USU1PTl9ICisjZGVmaW5lIFBXQ19USU1PTl9ICisKKyNpbmNsdWRlICJwd2MtaW9jdGwuaCIKKworc3RydWN0IFRpbW9uX3RhYmxlX2VudHJ5Cit7CisJY2hhciBhbHRlcm5hdGU7CQkJLyogVVNCIGFsdGVybmF0ZSBpbnRlcmZhY2UgKi8KKwl1bnNpZ25lZCBzaG9ydCBwYWNrZXRzaXplOwkvKiBOb3JtYWwgcGFja2V0IHNpemUgKi8KKwl1bnNpZ25lZCBzaG9ydCBiYW5kbGVuZ3RoOwkvKiBCYW5kbGVuZ3RoIHdoZW4gZGVjb21wcmVzc2luZyAqLworCXVuc2lnbmVkIGNoYXIgbW9kZVsxM107CQkvKiBwcmVjb21wdXRlZCBtb2RlIHNldHRpbmdzIGZvciBjYW0gKi8KK307CisKK2NvbnN0IGV4dGVybiBzdHJ1Y3QgVGltb25fdGFibGVfZW50cnkgVGltb25fdGFibGVbUFNaX01BWF1bNl1bNF07Citjb25zdCBleHRlcm4gdW5zaWduZWQgaW50IFRpbW9uUm9tVGFibGUgWzE2XVsyXVsxNl1bOF07CisKKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy11bmNvbXByZXNzLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLXVuY29tcHJlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDYyZTQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy11bmNvbXByZXNzLmMKQEAgLTAsMCArMSwxNDcgQEAKKy8qIExpbnV4IGRyaXZlciBmb3IgUGhpbGlwcyB3ZWJjYW0KKyAgIERlY29tcHJlc3Npb24gZnJvbnRlbmQuCisgICAoQykgMTk5OS0yMDAzIE5lbW9zb2Z0IFVudi4KKyAgIChDKSAyMDA0ICAgICAgTHVjIFNhaWxsYXJkIChsdWNAc2FpbGxhcmQub3JnKQorCisgICBOT1RFOiB0aGlzIHZlcnNpb24gb2YgcHdjIGlzIGFuIHVub2ZmaWNpYWwgKG1vZGlmaWVkKSByZWxlYXNlIG9mIHB3YyAmIHBjd3gKKyAgIGRyaXZlciBhbmQgdGh1cyBtYXkgaGF2ZSBidWdzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLgorICAgUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgYW5kIHN1cHBvcnQgcmVxdWVzdHMgdG8gPGx1Y0BzYWlsbGFyZC5vcmc+LgorICAgVGhlIGRlY29tcHJlc3Npb24gcm91dGluZXMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGJ5IHJldmVyc2UtZW5naW5lZXJpbmcgdGhlCisgICBOZW1vc29mdCBiaW5hcnkgcHdjeCBtb2R1bGUuIENhdmVhdCBlbXB0b3IuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNpbmNsdWRlICJwd2MuaCIKKyNpbmNsdWRlICJwd2MtdW5jb21wcmVzcy5oIgorI2luY2x1ZGUgInB3Yy1kZWMxLmgiCisjaW5jbHVkZSAicHdjLWRlYzIzLmgiCisKK2ludCBwd2NfZGVjb21wcmVzcyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcHdjX2ZyYW1lX2J1ZiAqZmJ1ZjsKKwlpbnQgbiwgbGluZSwgY29sLCBzdHJpZGU7CisJdm9pZCAqeXV2LCAqaW1hZ2U7CisJdTE2ICpzcmM7CisJdTE2ICpkc3R5LCAqZHN0dSwgKmRzdHY7CisKKwlpZiAocGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVGQVVMVDsKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmIGRlZmluZWQoUFdDX01BR0lDKQorCWlmIChwZGV2LT5tYWdpYyAhPSBQV0NfTUFHSUMpIHsKKwkJRXJyKCJwd2NfZGVjb21wcmVzcygpOiBtYWdpYyBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorI2VuZGlmCisKKwlmYnVmID0gcGRldi0+cmVhZF9mcmFtZTsKKwlpZiAoZmJ1ZiA9PSBOVUxMKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpbWFnZSA9IHBkZXYtPmltYWdlX3B0cltwZGV2LT5maWxsX2ltYWdlXTsKKwlpZiAoIWltYWdlKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXl1diA9IGZidWYtPmRhdGEgKyBwZGV2LT5mcmFtZV9oZWFkZXJfc2l6ZTsgIC8qIFNraXAgaGVhZGVyICovCisKKwkvKiBSYXcgZm9ybWF0OyB0aGF0J3MgZWFzeS4uLiAqLworCWlmIChwZGV2LT52cGFsZXR0ZSA9PSBWSURFT19QQUxFVFRFX1JBVykKKwl7CisJCW1lbWNweShpbWFnZSwgeXV2LCBwZGV2LT5mcmFtZV9zaXplKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHBkZXYtPnZiYW5kbGVuZ3RoID09IDApIHsKKwkJLyogVW5jb21wcmVzc2VkIG1vZGUuIFdlIGNvcHkgdGhlIGRhdGEgaW50byB0aGUgb3V0cHV0IGJ1ZmZlciwKKwkJICAgdXNpbmcgdGhlIHZpZXdwb3J0IHNpemUgKHdoaWNoIG1heSBiZSBsYXJnZXIgdGhhbiB0aGUgaW1hZ2UKKwkJICAgc2l6ZSkuIFVuZm9ydHVuYXRlbHkgd2UgaGF2ZSB0byBkbyBhIGJpdCBvZiBieXRlIHN0dWZmaW5nCisJCSAgIHRvIGdldCB0aGUgZGVzaXJlZCBvdXRwdXQgZm9ybWF0L3NpemUuCisJCSAqLworCQkJLyoKKwkJCSAqIFdlIGRvIHNvbWUgYnl0ZSBzaHVmZmxpbmcgaGVyZSB0byBnbyBmcm9tIHRoZQorCQkJICogbmF0aXZlIGZvcm1hdCB0byBZVVY0MjBQLgorCQkJICovCisJCQlzcmMgPSAodTE2ICopeXV2OworCQkJbiA9IHBkZXYtPnZpZXcueCAqIHBkZXYtPnZpZXcueTsKKworCQkJLyogb2Zmc2V0IGluIFkgcGxhbmUgKi8KKwkJCXN0cmlkZSA9IHBkZXYtPnZpZXcueCAqIHBkZXYtPm9mZnNldC55ICsgcGRldi0+b2Zmc2V0Lng7CisJCQlkc3R5ID0gKHUxNiAqKShpbWFnZSArIHN0cmlkZSk7CisKKwkJCS8qIG9mZnNldHMgaW4gVS9WIHBsYW5lcyAqLworCQkJc3RyaWRlID0gcGRldi0+dmlldy54ICogcGRldi0+b2Zmc2V0LnkgLyA0ICsgcGRldi0+b2Zmc2V0LnggLyAyOworCQkJZHN0dSA9ICh1MTYgKikoaW1hZ2UgKyBuICsgICAgICAgICBzdHJpZGUpOworCQkJZHN0diA9ICh1MTYgKikoaW1hZ2UgKyBuICsgbiAvIDQgKyBzdHJpZGUpOworCisJCQkvKiBpbmNyZW1lbnQgYWZ0ZXIgZWFjaCBsaW5lICovCisJCQlzdHJpZGUgPSAocGRldi0+dmlldy54IC0gcGRldi0+aW1hZ2UueCkgLyAyOyAvKiB1MTYgaXMgMiBieXRlcyAqLworCisJCQlmb3IgKGxpbmUgPSAwOyBsaW5lIDwgcGRldi0+aW1hZ2UueTsgbGluZSsrKSB7CisJCQkJZm9yIChjb2wgPSAwOyBjb2wgPCBwZGV2LT5pbWFnZS54OyBjb2wgKz0gNCkgeworCQkJCQkqZHN0eSsrID0gKnNyYysrOworCQkJCQkqZHN0eSsrID0gKnNyYysrOworCQkJCQlpZiAobGluZSAmIDEpCisJCQkJCQkqZHN0disrID0gKnNyYysrOworCQkJCQllbHNlCisJCQkJCQkqZHN0dSsrID0gKnNyYysrOworCQkJCX0KKwkJCQlkc3R5ICs9IHN0cmlkZTsKKwkJCQlpZiAobGluZSAmIDEpCisJCQkJCWRzdHYgKz0gKHN0cmlkZSA+PiAxKTsKKwkJCQllbHNlCisJCQkJCWRzdHUgKz0gKHN0cmlkZSA+PiAxKTsKKwkJCX0KKwl9CisJZWxzZSB7CisJCS8qIENvbXByZXNzZWQ7IHRoZSBkZWNvbXByZXNzb3Igcm91dGluZXMgd2lsbCB3cml0ZSB0aGUgZGF0YQorCQkgICBpbiBwbGFuYXIgZm9ybWF0IGltbWVkaWF0ZWx5LgorCQkgKi8KKwkJaW50IGZsYWdzOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZsYWdzID0gUFdDWF9GTEFHX1BMQU5BUjsKKyAgICAgICAgICAgICAgICBpZiAocGRldi0+dnNpemUgPT0gUFNaX1ZHQSAmJiBwZGV2LT52ZnJhbWVzID09IDUgJiYgcGRldi0+dnNuYXBzaG90KQorCQkgeworCQkgICBwcmludGsoS0VSTl9FUlIgInB3YzogTW9kZSBCYXllciBpcyBub3Qgc3VwcG9ydGVkIGZvciBub3dcbiIpOworCQkgICBmbGFncyB8PSBQV0NYX0ZMQUdfQkFZRVI7CisJCSAgIHJldHVybiAtRU5YSU87IC8qIE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3M6IG1pc3NpbmcgZGVjb21wcmVzc29yICovCisJCSB9CisKKwkJc3dpdGNoIChwZGV2LT50eXBlKQorCQkgeworCQkgIGNhc2UgNjc1OgorCQkgIGNhc2UgNjgwOgorCQkgIGNhc2UgNjkwOgorCQkgIGNhc2UgNzIwOgorCQkgIGNhc2UgNzMwOgorCQkgIGNhc2UgNzQwOgorCQkgIGNhc2UgNzUwOgorCQkgICAgcHdjX2RlYzIzX2RlY29tcHJlc3MoJnBkZXYtPmltYWdlLCAmcGRldi0+dmlldywgJnBkZXYtPm9mZnNldCwKKwkJCQl5dXYsIGltYWdlLAorCQkJCWZsYWdzLAorCQkJCXBkZXYtPmRlY29tcHJlc3NfZGF0YSwgcGRldi0+dmJhbmRsZW5ndGgpOworCQkgICAgYnJlYWs7CisJCSAgY2FzZSA2NDU6CisJCSAgY2FzZSA2NDY6CisJCSAgICAvKiBUT0RPICYgRklYTUUgKi8KKwkJICAgIHJldHVybiAtRU5YSU87IC8qIE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3M6IG1pc3NpbmcgZGVjb21wcmVzc29yICovCisJCSAgICBicmVhazsKKwkJIH0KKwl9CisJcmV0dXJuIDA7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy11bmNvbXByZXNzLmggYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLXVuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2I5MjUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy11bmNvbXByZXNzLmgKQEAgLTAsMCArMSw0MSBAQAorLyogKEMpIDE5OTktMjAwMyBOZW1vc29mdCBVbnYuCisgICAoQykgMjAwNCAgICAgIEx1YyBTYWlsbGFyZCAobHVjQHNhaWxsYXJkLm9yZykKKworICAgTk9URTogdGhpcyB2ZXJzaW9uIG9mIHB3YyBpcyBhbiB1bm9mZmljaWFsIChtb2RpZmllZCkgcmVsZWFzZSBvZiBwd2MgJiBwY3d4CisgICBkcml2ZXIgYW5kIHRodXMgbWF5IGhhdmUgYnVncyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgb3JpZ2luYWwgdmVyc2lvbi4KKyAgIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIGFuZCBzdXBwb3J0IHJlcXVlc3RzIHRvIDxsdWNAc2FpbGxhcmQub3JnPi4KKyAgIFRoZSBkZWNvbXByZXNzaW9uIHJvdXRpbmVzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBieSByZXZlcnNlLWVuZ2luZWVyaW5nIHRoZQorICAgTmVtb3NvZnQgYmluYXJ5IHB3Y3ggbW9kdWxlLiBDYXZlYXQgZW1wdG9yLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisKKy8qIFRoaXMgZmlsZSBpcyB0aGUgYnJpZGdlIGJldHdlZW4gdGhlIGtlcm5lbCBtb2R1bGUgYW5kIHRoZSBwbHVnaW47IGl0CisgICBkZXNjcmliZXMgdGhlIHN0cnVjdHVyZXMgYW5kIGRhdGF0eXBlcyB1c2VkIGluIGJvdGggbW9kdWxlcy4gQW55CisgICBzaWduaWZpY2FudCBjaGFuZ2Ugc2hvdWxkIGJlIHJlZmxlY3RlZCBieSBpbmNyZWFzaW5nIHRoZSAKKyAgIHB3Y19kZWNvbXByZXNzb3JfdmVyc2lvbiBtYWpvciBudW1iZXIuCisgKi8KKyNpZm5kZWYgUFdDX1VOQ09NUFJFU1NfSAorI2RlZmluZSBQV0NfVU5DT01QUkVTU19ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2luY2x1ZGUgInB3Yy1pb2N0bC5oIgorCisvKiBmcm9tIHB3Yy1kZWMuaCAqLworI2RlZmluZSBQV0NYX0ZMQUdfUExBTkFSICAgICAgICAweDAwMDEKKy8qICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy5oIGIvZHJpdmVycy91c2IvbWVkaWEvcHdjL3B3Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYjUxNmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9wd2MvcHdjLmgKQEAgLTAsMCArMSwyNzggQEAKKy8qIChDKSAxOTk5LTIwMDMgTmVtb3NvZnQgVW52LgorICAgKEMpIDIwMDQgICAgICBMdWMgU2FpbGxhcmQgKGx1Y0BzYWlsbGFyZC5vcmcpCisKKyAgIE5PVEU6IHRoaXMgdmVyc2lvbiBvZiBwd2MgaXMgYW4gdW5vZmZpY2lhbCAobW9kaWZpZWQpIHJlbGVhc2Ugb2YgcHdjICYgcGN3eAorICAgZHJpdmVyIGFuZCB0aHVzIG1heSBoYXZlIGJ1Z3MgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHZlcnNpb24uCisgICBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyBhbmQgc3VwcG9ydCByZXF1ZXN0cyB0byA8bHVjQHNhaWxsYXJkLm9yZz4uCisgICBUaGUgZGVjb21wcmVzc2lvbiByb3V0aW5lcyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgYnkgcmV2ZXJzZS1lbmdpbmVlcmluZyB0aGUKKyAgIE5lbW9zb2Z0IGJpbmFyeSBwd2N4IG1vZHVsZS4gQ2F2ZWF0IGVtcHRvci4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisjaWZuZGVmIFBXQ19ICisjZGVmaW5lIFBXQ19ICisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorCisjaW5jbHVkZSAicHdjLXVuY29tcHJlc3MuaCIKKyNpbmNsdWRlICJwd2MtaW9jdGwuaCIKKworLyogRGVmaW5lcyBhbmQgc3RydWN0dXJlcyBmb3IgdGhlIFBoaWxpcHMgd2ViY2FtICovCisvKiBVc2VkIGZvciBjaGVja2luZyBtZW1vcnkgY29ycnVwdGlvbi9wb2ludGVyIHZhbGlkYXRpb24gKi8KKyNkZWZpbmUgUFdDX01BR0lDIDB4ODlEQzEwQUJVTAorI3VuZGVmIFBXQ19NQUdJQworCisvKiBUdXJuIHNvbWUgZGVidWdnaW5nIG9wdGlvbnMgb24vb2ZmICovCisjZGVmaW5lIFBXQ19ERUJVRyAwCisKKy8qIFRyYWNlIGNlcnRhaW4gYWN0aW9ucyBpbiB0aGUgZHJpdmVyICovCisjZGVmaW5lIFRSQUNFX01PRFVMRQkweDAwMDEKKyNkZWZpbmUgVFJBQ0VfUFJPQkUJMHgwMDAyCisjZGVmaW5lIFRSQUNFX09QRU4JMHgwMDA0CisjZGVmaW5lIFRSQUNFX1JFQUQJMHgwMDA4CisjZGVmaW5lIFRSQUNFX01FTU9SWQkweDAwMTAKKyNkZWZpbmUgVFJBQ0VfRkxPVwkweDAwMjAKKyNkZWZpbmUgVFJBQ0VfU0laRQkweDAwNDAKKyNkZWZpbmUgVFJBQ0VfUFdDWAkweDAwODAKKyNkZWZpbmUgVFJBQ0VfU0VRVUVOQ0UJMHgxMDAwCisKKyNkZWZpbmUgVHJhY2UoUiwgQS4uLikgaWYgKHB3Y190cmFjZSAmIFIpIHByaW50ayhLRVJOX0RFQlVHIFBXQ19OQU1FICIgIiBBKQorI2RlZmluZSBEZWJ1ZyhBLi4uKSBwcmludGsoS0VSTl9ERUJVRyBQV0NfTkFNRSAiICIgQSkKKyNkZWZpbmUgSW5mbyhBLi4uKSAgcHJpbnRrKEtFUk5fSU5GTyAgUFdDX05BTUUgIiAiIEEpCisjZGVmaW5lIEVycihBLi4uKSAgIHByaW50ayhLRVJOX0VSUiAgIFBXQ19OQU1FICIgIiBBKQorCisKKy8qIERlZmluZXMgZm9yIFRvVUNhbSBjYW1lcmFzICovCisjZGVmaW5lIFRPVUNBTV9IRUFERVJfU0laRQkJOAorI2RlZmluZSBUT1VDQU1fVFJBSUxFUl9TSVpFCQk0CisKKyNkZWZpbmUgRkVBVFVSRV9NT1RPUl9QQU5USUxUCQkweDAwMDEKKworLyogVmVyc2lvbiBibG9jayAqLworI2RlZmluZSBQV0NfTUFKT1IJOQorI2RlZmluZSBQV0NfTUlOT1IJMAorI2RlZmluZSBQV0NfVkVSU0lPTiAJIjkuMC4yLXVub2ZmaWNpYWwiCisjZGVmaW5lIFBXQ19OQU1FIAkicHdjIgorCisvKiBUdXJuIGNlcnRhaW4gZmVhdHVyZXMgb24vb2ZmICovCisjZGVmaW5lIFBXQ19JTlRfUElQRSAwCisKKy8qIElnbm9yZSBlcnJvcnMgaW4gdGhlIGZpcnN0IE4gZnJhbWVzLCB0byBhbGxvdyBmb3Igc3RhcnR1cCBkZWxheXMgKi8KKyNkZWZpbmUgRlJBTUVfTE9XTUFSSyA1CisKKy8qIFNpemUgYW5kIG51bWJlciBvZiBidWZmZXJzIGZvciB0aGUgSVNPIHBpcGUuICovCisjZGVmaW5lIE1BWF9JU09fQlVGUwkJMgorI2RlZmluZSBJU09fRlJBTUVTX1BFUl9ERVNDCTEwCisjZGVmaW5lIElTT19NQVhfRlJBTUVfU0laRQk5NjAKKyNkZWZpbmUgSVNPX0JVRkZFUl9TSVpFIAkoSVNPX0ZSQU1FU19QRVJfREVTQyAqIElTT19NQVhfRlJBTUVfU0laRSkKKworLyogRnJhbWUgYnVmZmVyczogY29udGFpbnMgY29tcHJlc3NlZCBvciB1bmNvbXByZXNzZWQgdmlkZW8gZGF0YS4gKi8KKyNkZWZpbmUgTUFYX0ZSQU1FUwkJNQorLyogTWF4aW11bSBzaXplIGFmdGVyIGRlY29tcHJlc3Npb24gaXMgNjQweDQ4MCBZVVYgZGF0YSwgMS41ICogNjQwICogNDgwICovCisjZGVmaW5lIFBXQ19GUkFNRV9TSVpFIAkJKDQ2MDgwMCArIFRPVUNBTV9IRUFERVJfU0laRSArIFRPVUNBTV9UUkFJTEVSX1NJWkUpCisKKy8qIEFic29sdXRlIG1heGltdW0gbnVtYmVyIG9mIGJ1ZmZlcnMgYXZhaWxhYmxlIGZvciBtbWFwKCkgKi8KKyNkZWZpbmUgTUFYX0lNQUdFUyAJCTEwCisKKy8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlcyB3ZXJlIGJhc2VkIG9uIGNwaWEuaC4gV2h5IHJlaW52ZW50IHRoZSB3aGVlbD8gOi0pICovCitzdHJ1Y3QgcHdjX2lzb19idWYKK3sKKwl2b2lkICpkYXRhOworCWludCAgbGVuZ3RoOworCWludCAgcmVhZDsKKwlzdHJ1Y3QgdXJiICp1cmI7Cit9OworCisvKiBpbnRlcm1lZGlhdGUgYnVmZmVycyB3aXRoIHJhdyBkYXRhIGZyb20gdGhlIFVTQiBjYW0gKi8KK3N0cnVjdCBwd2NfZnJhbWVfYnVmCit7CisgICB2b2lkICpkYXRhOworICAgdm9sYXRpbGUgaW50IGZpbGxlZDsJCS8qIG51bWJlciBvZiBieXRlcyBmaWxsZWQgKi8KKyAgIHN0cnVjdCBwd2NfZnJhbWVfYnVmICpuZXh0OwkvKiBsaXN0ICovCisjaWYgUFdDX0RFQlVHCisgICBpbnQgc2VxdWVuY2U7CQkvKiBTZXF1ZW5jZSBudW1iZXIgKi8KKyNlbmRpZgorfTsKKworc3RydWN0IHB3Y19kZXZpY2UKK3sKKyAgIHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7CisjaWZkZWYgUFdDX01BR0lDCisgICBpbnQgbWFnaWM7CisjZW5kaWYKKyAgIC8qIFBvaW50ZXIgdG8gb3VyIHVzYl9kZXZpY2UgKi8KKyAgIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworICAgCisgICBpbnQgdHlwZTsgICAgICAgICAgICAgICAgICAgIC8qIHR5cGUgb2YgY2FtICg2NDUsIDY0NiwgNjc1LCA2ODAsIDY5MCwgNzIwLCA3MzAsIDc0MCwgNzUwKSAqLworICAgaW50IHJlbGVhc2U7CQkJLyogcmVsZWFzZSBudW1iZXIgKi8KKyAgIGludCBmZWF0dXJlczsJCS8qIGZlYXR1cmUgYml0cyAqLworICAgY2hhciBzZXJpYWxbMzBdOwkJLyogc2VyaWFsIG51bWJlciAoc3RyaW5nKSAqLworICAgaW50IGVycm9yX3N0YXR1czsJCS8qIHNldCB3aGVuIHNvbWV0aGluZyBnb2VzIHdyb25nIHdpdGggdGhlIGNhbSAodW5wbHVnZ2VkLCBVU0IgZXJyb3JzKSAqLworICAgaW50IHVzYl9pbml0OwkJLyogc2V0IHdoZW4gdGhlIGNhbSBoYXMgYmVlbiBpbml0aWFsaXplZCBvdmVyIFVTQiAqLworCisgICAvKioqIFZpZGVvIGRhdGEgKioqLworICAgaW50IHZvcGVuOwkJCS8qIGZsYWcgKi8KKyAgIGludCB2ZW5kcG9pbnQ7CQkvKiB2aWRlbyBpc29jIGVuZHBvaW50ICovCisgICBpbnQgdmNpbnRlcmZhY2U7CQkvKiB2aWRlbyBjb250cm9sIGludGVyZmFjZSAqLworICAgaW50IHZhbHRlcm5hdGU7CQkvKiBhbHRlcm5hdGUgaW50ZXJmYWNlIG5lZWRlZCAqLworICAgaW50IHZmcmFtZXMsIHZzaXplOwkJLyogZnJhbWVzLXBlci1zZWNvbmQgJiBzaXplIChzZWUgUFNaXyopICovCisgICBpbnQgdnBhbGV0dGU7CQkvKiBwYWxldHRlOiA0MjBQLCBSQVcgb3IgUkdCQkFZRVIgKi8KKyAgIGludCB2ZnJhbWVfY291bnQ7CQkvKiByZWNlaXZlZCBmcmFtZXMgKi8KKyAgIGludCB2ZnJhbWVzX2R1bXBlZDsgCQkvKiBjb3VudGVyIGZvciBkdW1wZWQgZnJhbWVzICovCisgICBpbnQgdmZyYW1lc19lcnJvcjsJCS8qIGZyYW1lcyByZWNlaXZlZCBpbiBlcnJvciAqLworICAgaW50IHZtYXhfcGFja2V0X3NpemU7CS8qIFVTQiBtYXhwYWNrZXQgc2l6ZSAqLworICAgaW50IHZsYXN0X3BhY2tldF9zaXplOwkvKiBmb3IgZnJhbWUgc3luY2hyb25pc2F0aW9uICovCisgICBpbnQgdmlzb2NfZXJyb3JzOwkJLyogbnVtYmVyIG9mIGNvbnRpZ3VvdXMgSVNPQyBlcnJvcnMgKi8KKyAgIGludCB2Y29tcHJlc3Npb247CQkvKiBkZXNpcmVkIGNvbXByZXNzaW9uIGZhY3RvciAqLworICAgaW50IHZiYW5kbGVuZ3RoOwkJLyogY29tcHJlc3NlZCBiYW5kIGxlbmd0aDsgMCBpcyB1bmNvbXByZXNzZWQgKi8KKyAgIGNoYXIgdnNuYXBzaG90OwkJLyogc25hcHNob3QgbW9kZSAqLworICAgY2hhciB2c3luYzsJCQkvKiB1c2VkIGJ5IGlzb2MgaGFuZGxlciAqLworICAgY2hhciB2bWlycm9yOwkJLyogZm9yIFRvVUNhTSBzZXJpZXMgKi8KKyAgIAorICAgaW50IGNtZF9sZW47CisgICB1bnNpZ25lZCBjaGFyIGNtZF9idWZbMTNdOworCisgICAvKiBUaGUgaW1hZ2UgYWNxdWlzaXRpb24gcmVxdWlyZXMgMyB0byA0IHN0ZXBzOgorICAgICAgMS4gZGF0YSBpcyBnYXRoZXJlZCBpbiBzaG9ydCBwYWNrZXRzIGZyb20gdGhlIFVTQiBjb250cm9sbGVyCisgICAgICAyLiBkYXRhIGlzIHN5bmNocm9uaXplZCBhbmQgcGFja2VkIGludG8gYSBmcmFtZSBidWZmZXIKKyAgICAgIDNhLiBpbiBjYXNlIGRhdGEgaXMgY29tcHJlc3NlZCwgZGVjb21wcmVzcyBpdCBkaXJlY3RseSBpbnRvIGltYWdlIGJ1ZmZlcgorICAgICAgM2IuIGluIGNhc2UgZGF0YSBpcyB1bmNvbXByZXNzZWQsIGNvcHkgaW50byBpbWFnZSBidWZmZXIgd2l0aCB2aWV3cG9ydAorICAgICAgNC4gZGF0YSBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgdXNlciBwcm9jZXNzCisKKyAgICAgIE5vdGUgdGhhdCBNQVhfSVNPX0JVRlMgIT0gTUFYX0ZSQU1FUyAhPSBNQVhfSU1BR0VTLi4uLgorICAgICAgV2UgaGF2ZSBpbiBlZmZlY3QgYSBiYWNrLXRvLWJhY2stZG91YmxlLWJ1ZmZlciBzeXN0ZW0uCisgICAgKi8KKyAgIC8qIDE6IGlzb2MgKi8KKyAgIHN0cnVjdCBwd2NfaXNvX2J1ZiBzYnVmW01BWF9JU09fQlVGU107CisgICBjaGFyIGlzb19pbml0OworCisgICAvKiAyOiBmcmFtZSAqLworICAgc3RydWN0IHB3Y19mcmFtZV9idWYgKmZidWY7CS8qIGFsbCBmcmFtZXMgKi8KKyAgIHN0cnVjdCBwd2NfZnJhbWVfYnVmICplbXB0eV9mcmFtZXMsICplbXB0eV9mcmFtZXNfdGFpbDsJLyogYWxsIGVtcHR5IGZyYW1lcyAqLworICAgc3RydWN0IHB3Y19mcmFtZV9idWYgKmZ1bGxfZnJhbWVzLCAqZnVsbF9mcmFtZXNfdGFpbDsJLyogYWxsIGZpbGxlZCBmcmFtZXMgKi8KKyAgIHN0cnVjdCBwd2NfZnJhbWVfYnVmICpmaWxsX2ZyYW1lOwkvKiBmcmFtZSBjdXJyZW50bHkgYmVpbmcgZmlsbGVkICovCisgICBzdHJ1Y3QgcHdjX2ZyYW1lX2J1ZiAqcmVhZF9mcmFtZTsJLyogZnJhbWUgY3VycmVudGx5IHJlYWQgYnkgdXNlciBwcm9jZXNzICovCisgICBpbnQgZnJhbWVfaGVhZGVyX3NpemUsIGZyYW1lX3RyYWlsZXJfc2l6ZTsKKyAgIGludCBmcmFtZV9zaXplOworICAgaW50IGZyYW1lX3RvdGFsX3NpemU7IC8qIGluY2x1ZGluZyBoZWFkZXIgJiB0cmFpbGVyICovCisgICBpbnQgZHJvcF9mcmFtZXM7CisjaWYgUFdDX0RFQlVHCisgICBpbnQgc2VxdWVuY2U7CQkJLyogRGVidWdnaW5nIGFpZCAqLworI2VuZGlmCisKKyAgIC8qIDM6IGRlY29tcHJlc3Npb24gKi8KKyAgIHN0cnVjdCBwd2NfZGVjb21wcmVzc29yICpkZWNvbXByZXNzb3I7CS8qIGZ1bmN0aW9uIGJsb2NrIHdpdGggZGVjb21wcmVzc2lvbiByb3V0aW5lcyAqLworICAgdm9pZCAqZGVjb21wcmVzc19kYXRhOwkJLyogcHJpdmF0ZSBkYXRhIGZvciBkZWNvbXByZXNzaW9uIGVuZ2luZSAqLworCisgICAvKiA0OiBpbWFnZSAqLworICAgLyogV2UgaGF2ZSBhbiAnaW1hZ2UnIGFuZCBhICd2aWV3Jywgd2hlcmUgJ2ltYWdlJyBpcyB0aGUgZml4ZWQtc2l6ZSBpbWFnZQorICAgICAgYXMgZGVsaXZlcmVkIGJ5IHRoZSBjYW1lcmEsIGFuZCAndmlldycgaXMgdGhlIHNpemUgcmVxdWVzdGVkIGJ5IHRoZQorICAgICAgcHJvZ3JhbS4gVGhlIGNhbWVyYSBpbWFnZSBpcyBjZW50ZXJlZCBpbiB0aGlzIHZpZXdwb3J0LCBsYWNlZCB3aXRoCisgICAgICBhIGdyYXkgb3IgYmxhY2sgYm9yZGVyLiB2aWV3X21pbiA8PSBpbWFnZSA8PSB2aWV3IDw9IHZpZXdfbWF4OworICAgICovCisgICBpbnQgaW1hZ2VfbWFzazsJCQkvKiBiaXRtYXNrIG9mIHN1cHBvcnRlZCBzaXplcyAqLworICAgc3RydWN0IHB3Y19jb29yZCB2aWV3X21pbiwgdmlld19tYXg7CS8qIG1pbmltdW0gYW5kIG1heGltdW0gdmlld2FibGUgc2l6ZXMgKi8KKyAgIHN0cnVjdCBwd2NfY29vcmQgYWJzX21heDsgICAgICAgICAgICAvKiBtYXhpbXVtIHN1cHBvcnRlZCBzaXplIHdpdGggY29tcHJlc3Npb24gKi8KKyAgIHN0cnVjdCBwd2NfY29vcmQgaW1hZ2UsIHZpZXc7CS8qIGltYWdlIGFuZCB2aWV3cG9ydCBzaXplICovCisgICBzdHJ1Y3QgcHdjX2Nvb3JkIG9mZnNldDsJCS8qIG9mZnNldCB3aXRoaW4gdGhlIHZpZXdwb3J0ICovCisKKyAgIHZvaWQgKmltYWdlX2RhdGE7CQkJLyogdG90YWwgYnVmZmVyLCB3aGljaCBpcyBzdWJkaXZpZGVkIGludG8gLi4uICovCisgICB2b2lkICppbWFnZV9wdHJbTUFYX0lNQUdFU107CQkvKiAuLi5zZXZlcmFsIGltYWdlcy4uLiAqLworICAgaW50IGZpbGxfaW1hZ2U7CQkJLyogLi4ud2hpY2ggYXJlIHJvdGF0ZWQuICovCisgICBpbnQgbGVuX3Blcl9pbWFnZTsJCQkvKiBsZW5ndGggcGVyIGltYWdlICovCisgICBpbnQgaW1hZ2VfcmVhZF9wb3M7CQkJLyogSW4gY2FzZSB3ZSByZWFkIGRhdGEgaW4gcGllY2VzLCBrZWVwIHRyYWNrIG9mIHdlcmUgd2UgYXJlIGluIHRoZSBpbWFnZWJ1ZmZlciAqLworICAgaW50IGltYWdlX3VzZWRbTUFYX0lNQUdFU107CQkvKiBGb3IgTUNBUFRVUkUgYW5kIFNZTkMgKi8KKworICAgc3RydWN0IHNlbWFwaG9yZSBtb2Rsb2NrOwkJLyogdG8gcHJldmVudCByYWNlcyBpbiB2aWRlb19vcGVuKCksIGV0YyAqLworICAgc3BpbmxvY2tfdCBwdHJsb2NrOwkJCS8qIGZvciBtYW5pcHVsYXRpbmcgdGhlIGJ1ZmZlciBwb2ludGVycyAqLworCisgICAvKioqIG1vdG9yaXplZCBwYW4vdGlsdCBmZWF0dXJlICovCisgICBzdHJ1Y3QgcHdjX21wdF9yYW5nZSBhbmdsZV9yYW5nZTsKKyAgIGludCBwYW5fYW5nbGU7CQkJLyogaW4gZGVncmVlcyAqIDEwMCAqLworICAgaW50IHRpbHRfYW5nbGU7CQkJLyogYWJzb2x1dGUgYW5nbGU7IDAsMCBpcyBob21lIHBvc2l0aW9uICovCisKKyAgIC8qKiogTWlzYy4gZGF0YSAqKiovCisgICB3YWl0X3F1ZXVlX2hlYWRfdCBmcmFtZXE7CQkvKiBXaGVuIHdhaXRpbmcgZm9yIGEgZnJhbWUgdG8gZmluaXNoLi4uICovCisjaWYgUFdDX0lOVF9QSVBFCisgICB2b2lkICp1c2JfaW50X2hhbmRsZXI7CQkvKiBmb3IgdGhlIGludGVycnVwdCBlbmRwb2ludCAqLworI2VuZGlmCit9OworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogR2xvYmFsIHZhcmlhYmxlcyAqLworZXh0ZXJuIGludCBwd2NfdHJhY2U7CitleHRlcm4gaW50IHB3Y19wcmVmZXJyZWRfY29tcHJlc3Npb247CisKKy8qKiBmdW5jdGlvbnMgaW4gcHdjLWlmLmMgKi8KK2ludCBwd2NfdHJ5X3ZpZGVvX21vZGUoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG5ld19mcHMsIGludCBuZXdfY29tcHJlc3Npb24sIGludCBuZXdfc25hcHNob3QpOworCisvKiogRnVuY3Rpb25zIGluIHB3Yy1taXNjLmMgKi8KKy8qIHNpemVzIGluIHBpeGVscyAqLworZXh0ZXJuIHN0cnVjdCBwd2NfY29vcmQgcHdjX2ltYWdlX3NpemVzW1BTWl9NQVhdOworCitpbnQgcHdjX2RlY29kZV9zaXplKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwordm9pZCBwd2NfY29uc3RydWN0KHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KTsKKworLyoqIEZ1bmN0aW9ucyBpbiBwd2MtY3RybC5jICovCisvKiBSZXF1ZXN0IGEgY2VydGFpbiB2aWRlbyBtb2RlLiBSZXR1cm5zIDwgMCBpZiBub3QgcG9zc2libGUgKi8KK2V4dGVybiBpbnQgcHdjX3NldF92aWRlb19tb2RlKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXMsIGludCBjb21wcmVzc2lvbiwgaW50IHNuYXBzaG90KTsKKy8qIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHBlciBpbWFnZSAobm90IGZyYW1lKSAqLworZXh0ZXJuIHZvaWQgcHdjX3NldF9pbWFnZV9idWZmZXJfc2l6ZShzdHJ1Y3QgcHdjX2RldmljZSAqcGRldik7CisKKy8qIFZhcmlvdXMgY29udHJvbHM7IHNob3VsZCBiZSBvYnZpb3VzLiBWYWx1ZSAwLi42NTUzNSwgb3IgPCAwIG9uIGVycm9yICovCitleHRlcm4gaW50IHB3Y19nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldik7CitleHRlcm4gaW50IHB3Y19zZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHZhbHVlKTsKK2V4dGVybiBpbnQgcHdjX2dldF9jb250cmFzdChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldik7CitleHRlcm4gaW50IHB3Y19zZXRfY29udHJhc3Qoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCB2YWx1ZSk7CitleHRlcm4gaW50IHB3Y19nZXRfZ2FtbWEoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpOworZXh0ZXJuIGludCBwd2Nfc2V0X2dhbW1hKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpOworZXh0ZXJuIGludCBwd2NfZ2V0X3NhdHVyYXRpb24oc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYpOworZXh0ZXJuIGludCBwd2Nfc2V0X3NhdHVyYXRpb24oc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCB2YWx1ZSk7CitleHRlcm4gaW50IHB3Y19zZXRfbGVkcyhzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IG9uX3ZhbHVlLCBpbnQgb2ZmX3ZhbHVlKTsKK2V4dGVybiBpbnQgcHdjX2dldF9sZWRzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgKm9uX3ZhbHVlLCBpbnQgKm9mZl92YWx1ZSk7CitleHRlcm4gaW50IHB3Y19nZXRfY21vc19zZW5zb3Ioc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGludCAqc2Vuc29yKTsKKworLyogUG93ZXIgZG93biBvciB1cCB0aGUgY2FtZXJhOyBub3Qgc3VwcG9ydGVkIGJ5IGFsbCBtb2RlbHMgKi8KK2V4dGVybiBpbnQgcHdjX2NhbWVyYV9wb3dlcihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IHBvd2VyKTsKKworLyogUHJpdmF0ZSBpb2N0bCgpczsgc2VlIHB3Yy1pb2N0bC5oICovCitleHRlcm4gaW50IHB3Y19pb2N0bChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKKworCisvKiogcHdjLXVuY29tcHJlc3MuYyAqLworLyogRXhwYW5kIGZyYW1lIHRvIGltYWdlLCBwb3NzaWJseSBpbmNsdWRpbmcgZGVjb21wcmVzc2lvbi4gVXNlcyByZWFkX2ZyYW1lIGFuZCBmaWxsX2ltYWdlICovCitleHRlcm4gaW50IHB3Y19kZWNvbXByZXNzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3NlNDAxLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9zZTQwMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NWJkYWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9zZTQwMS5jCkBAIC0wLDAgKzEsMTQzNiBAQAorLyoKKyAqIEVuZHBvaW50cyAoZm9ybWVybHkga25vd24gYXMgQU9YKSBzZTQwMSBVU0IgQ2FtZXJhIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMCBKZXJvZW4gQi4gVnJlZWtlbiAocGUxcnhxQGFtc2F0Lm9yZykKKyAqCisgKiBTdGlsbCBzb21ld2hhdCBiYXNlZCBvbiB0aGUgTGludXggb3Y1MTEgZHJpdmVyLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKgorICogVGhhbmtzIHRvIEVuZHBvaW50cyBJbmMuICh3d3cuZW5kcG9pbnRzLmNvbSkgZm9yIG1ha2luZyBkb2N1bWVudGF0aW9uIG9uCisgKiB0aGVpciBjaGlwc2V0IGF2YWlsYWJsZSBhbmQgc3VwcG9ydGluZyBtZSB3aGlsZSB3cml0aW5nIHRoaXMgZHJpdmVyLgorICogCS0gSmVyb2VuIFZyZWVrZW4KKyAqLworCitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gPSAiMC4yNCI7CisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAic2U0MDEuaCIKKworc3RhdGljIGludCBmbGlja2VybGVzcz0wOworc3RhdGljIGludCB2aWRlb19uciA9IC0xOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRSgweDAzZTgsIDB4MDAwNCkgfSwvKiBFbmRwb2ludHMvQW94IFNFNDAxICovCisJeyBVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzBiKSB9LC8qIFBoaWxpcHMgUENWQzY2NUsgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDdkLCAweDUwMDEpIH0sLyogS2Vuc2luZ3RvbiA2NzAxNCAqLworCXsgVVNCX0RFVklDRSgweDA0N2QsIDB4NTAwMikgfSwvKiBLZW5zaW5ndG9uIDY3MDEoNS83KSAqLworCXsgVVNCX0RFVklDRSgweDA0N2QsIDB4NTAwMykgfSwvKiBLZW5zaW5ndG9uIDY3MDE2ICovCisJeyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKKworTU9EVUxFX0FVVEhPUigiSmVyb2VuIFZyZWVrZW4gPHBlMXJ4cUBhbXNhdC5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNFNDAxIFVTQiBDYW1lcmEgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7Cittb2R1bGVfcGFyYW0oZmxpY2tlcmxlc3MsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGZsaWNrZXJsZXNzLCAiTmV0IGZyZXF1ZW5jeSB0byBhZGp1c3QgZXhwb3N1cmUgdGltZSB0byAoMC81MC82MCkiKTsKK21vZHVsZV9wYXJhbSh2aWRlb19uciwgaW50LCAwKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNlNDAxX2RyaXZlcjsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1lbW9yeSBtYW5hZ2VtZW50CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCAqcnZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQoreworCXZvaWQgKm1lbTsKKwl1bnNpZ25lZCBsb25nIGFkcjsKKworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCW1lbSA9IHZtYWxsb2NfMzIoc2l6ZSk7CisJaWYgKCFtZW0pCisJCXJldHVybiBOVUxMOworCisJbWVtc2V0KG1lbSwgMCwgc2l6ZSk7IC8qIENsZWFyIHRoZSByYW0gb3V0LCBubyBqdW5rIHRvIHRoZSB1c2VyICovCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJU2V0UGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOworCQlhZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisKKwlyZXR1cm4gbWVtOworfQorCitzdGF0aWMgdm9pZCBydmZyZWUodm9pZCAqbWVtLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlpZiAoIW1lbSkKKwkJcmV0dXJuOworCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKKwl3aGlsZSAoKGxvbmcpIHNpemUgPiAwKSB7CisJCUNsZWFyUGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOworCQlhZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisJdmZyZWUobWVtKTsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogc2U0MDEgcmVnaXN0ZXIgcmVhZC93cml0ZSBmdW5jdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHNlNDAxX3NuZGN0cmwoaW50IHNldCwgc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEsIHVuc2lnbmVkIHNob3J0IHJlcSwKKwkJCSB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgY2hhciAqY3AsIGludCBzaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2cgKAorICAgICAgICAgICAgICAgIHNlNDAxLT5kZXYsCisgICAgICAgICAgICAgICAgc2V0ID8gdXNiX3NuZGN0cmxwaXBlKHNlNDAxLT5kZXYsIDApIDogdXNiX3JjdmN0cmxwaXBlKHNlNDAxLT5kZXYsIDApLAorICAgICAgICAgICAgICAgIHJlcSwKKyAgICAgICAgICAgICAgICAoc2V0ID8gVVNCX0RJUl9PVVQgOiBVU0JfRElSX0lOKSB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisgICAgICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICBjcCwKKyAgICAgICAgICAgICAgICBzaXplLAorICAgICAgICAgICAgICAgIDEwMDAKKyAgICAgICAgKTsKK30KKworc3RhdGljIGludCBzZTQwMV9zZXRfZmVhdHVyZShzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSwgdW5zaWduZWQgc2hvcnQgc2VsZWN0b3IsCisJCQkgICAgIHVuc2lnbmVkIHNob3J0IHBhcmFtKQoreworCS8qIHNwZWNzIHNheSB0aGF0IHRoZSBzZWxlY3RvciAoYWRkcmVzcykgc2hvdWxkIGdvIGluIHRoZSB2YWx1ZSBmaWVsZAorCSAgIGFuZCB0aGUgcGFyYW0gaW4gaW5kZXgsIGJ1dCBpbiB0aGUgbG9ncyBvZiB0aGUgd2luZG93cyBkcml2ZXIgdGhleSBkbworCSAgIHRoaXMgdGhlIG90aGVyIHdheSBhcm91bmQuLi4KKwkgKi8KKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnICgKKwkJc2U0MDEtPmRldiwKKwkJdXNiX3NuZGN0cmxwaXBlKHNlNDAxLT5kZXYsIDApLAorCQlTRTQwMV9SRVFfU0VUX0VYVF9GRUFUVVJFLAorCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCXBhcmFtLAorCQlzZWxlY3RvciwKKyAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgMTAwMAorICAgICAgICApOworfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2U0MDFfZ2V0X2ZlYXR1cmUoc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEsIAorCQkJCSAgICAgICAgdW5zaWduZWQgc2hvcnQgc2VsZWN0b3IpCit7CisJLyogRm9yICdzZXQnIHRoZSBzZWxlY2V0b3Igc2hvdWxkIGJlIGluIGluZGV4LCBub3Qgc3VyZSBpZiB0aGUgc3BlYyBpcworCSAgIHdyb25nIGhlcmUgdG8uLi4uCisJICovCisJdW5zaWduZWQgY2hhciBjcFsyXTsKKyAgICAgICAgdXNiX2NvbnRyb2xfbXNnICgKKyAgICAgICAgICAgICAgICBzZTQwMS0+ZGV2LAorICAgICAgICAgICAgICAgIHVzYl9yY3ZjdHJscGlwZShzZTQwMS0+ZGV2LCAwKSwKKyAgICAgICAgICAgICAgICBTRTQwMV9SRVFfR0VUX0VYVF9GRUFUVVJFLAorICAgICAgICAgICAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKyAgICAgICAgCTAsCisgICAgICAgICAgICAgICAgc2VsZWN0b3IsCisgICAgICAgICAgICAgICAgY3AsCisgICAgICAgICAgICAgICAgMiwKKyAgICAgICAgICAgICAgICAxMDAwCisgICAgICAgICk7CisJcmV0dXJuIGNwWzBdK2NwWzFdKjI1NjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDYW1lcmEgY29udHJvbAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworc3RhdGljIGludCBzZTQwMV9zZW5kX3BpY3Qoc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEpCit7CisJc2U0MDFfc2V0X2ZlYXR1cmUoc2U0MDEsIEhWNzEzMV9SRUdfVElUTCwgc2U0MDEtPmV4cG9zZV9sKTsvKiBpbnRlZ3JhdGlvbiB0aW1lIGxvdyAqLworCXNlNDAxX3NldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX1RJVE0sIHNlNDAxLT5leHBvc2VfbSk7LyogaW50ZWdyYXRpb24gdGltZSBtaWQgKi8KKwlzZTQwMV9zZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19USVRVLCBzZTQwMS0+ZXhwb3NlX2gpOy8qIGludGVncmF0aW9uIHRpbWUgbWlkICovCisJc2U0MDFfc2V0X2ZlYXR1cmUoc2U0MDEsIEhWNzEzMV9SRUdfQVJMViwgc2U0MDEtPnJlc2V0bGV2ZWwpOy8qIHJlc2V0IGxldmVsIHZhbHVlICovCisJc2U0MDFfc2V0X2ZlYXR1cmUoc2U0MDEsIEhWNzEzMV9SRUdfQVJDRywgc2U0MDEtPnJnYWluKTsvKiByZWQgY29sb3IgZ2FpbiAqLworCXNlNDAxX3NldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX0FHQ0csIHNlNDAxLT5nZ2Fpbik7LyogZ3JlZW4gY29sb3IgZ2FpbiAqLworCXNlNDAxX3NldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX0FCQ0csIHNlNDAxLT5iZ2Fpbik7LyogYmx1ZSBjb2xvciBnYWluICovCisJICAgIAkKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2U0MDFfc2V0X2V4cG9zdXJlKHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxLCBpbnQgYnJpZ2h0bmVzcykKK3sKKwlpbnQgaW50ZWdyYXRpb249YnJpZ2h0bmVzczw8NTsKKwkKKwlpZiAoZmxpY2tlcmxlc3M9PTUwKSB7CisJCWludGVncmF0aW9uPWludGVncmF0aW9uLWludGVncmF0aW9uJTEwNjY2NzsKKwl9CisJaWYgKGZsaWNrZXJsZXNzPT02MCkgeworCQlpbnRlZ3JhdGlvbj1pbnRlZ3JhdGlvbi1pbnRlZ3JhdGlvbiU4ODg4OTsKKwl9CisJc2U0MDEtPmJyaWdodG5lc3M9aW50ZWdyYXRpb24+PjU7CisJc2U0MDEtPmV4cG9zZV9oPShpbnRlZ3JhdGlvbj4+MTYpJjB4ZmY7CisJc2U0MDEtPmV4cG9zZV9tPShpbnRlZ3JhdGlvbj4+OCkmMHhmZjsKKwlzZTQwMS0+ZXhwb3NlX2w9aW50ZWdyYXRpb24mMHhmZjsKK30KKworc3RhdGljIGludCBzZTQwMV9nZXRfcGljdChzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSwgc3RydWN0IHZpZGVvX3BpY3R1cmUgKnApCit7CisJcC0+YnJpZ2h0bmVzcz1zZTQwMS0+YnJpZ2h0bmVzczsKKwlpZiAoc2U0MDEtPmVuaGFuY2UpIHsKKwkJcC0+d2hpdGVuZXNzPTMyNzY4OworCX0gZWxzZSB7CisJCXAtPndoaXRlbmVzcz0wOworCX0KKwlwLT5jb2xvdXI9NjU1MzU7CisJcC0+Y29udHJhc3Q9NjU1MzU7CisJcC0+aHVlPXNlNDAxLT5yZ2Fpbjw8MTA7CisJcC0+cGFsZXR0ZT1zZTQwMS0+cGFsZXR0ZTsKKwlwLT5kZXB0aD0zOyAvKiByZ2IyNCAqLworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc2U0MDFfc2V0X3BpY3Qoc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEsIHN0cnVjdCB2aWRlb19waWN0dXJlICpwKQoreworCWlmIChwLT5wYWxldHRlICE9IFZJREVPX1BBTEVUVEVfUkdCMjQpCisJCXJldHVybiAxOworCXNlNDAxLT5wYWxldHRlPXAtPnBhbGV0dGU7CisJaWYgKHAtPmh1ZSE9c2U0MDEtPmh1ZSkgeworCQlzZTQwMS0+cmdhaW49IHAtPmh1ZT4+MTA7CisJCXNlNDAxLT5iZ2Fpbj0gMHg0MC0ocC0+aHVlPj4xMCk7CisJCXNlNDAxLT5odWU9cC0+aHVlOworCX0KKwlpZiAocC0+YnJpZ2h0bmVzcyE9c2U0MDEtPmJyaWdodG5lc3MpIHsKKwkJc2U0MDFfc2V0X2V4cG9zdXJlKHNlNDAxLCBwLT5icmlnaHRuZXNzKTsKKwl9CisJaWYgKHAtPndoaXRlbmVzcz49MzI3NjgpIHsKKwkJc2U0MDEtPmVuaGFuY2U9MTsKKwl9IGVsc2UgeworCQlzZTQwMS0+ZW5oYW5jZT0wOworCX0KKwlzZTQwMV9zZW5kX3BpY3Qoc2U0MDEpOworCXNlNDAxX3NlbmRfcGljdChzZTQwMSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisJSHl1bmRhaSBoYXZlIHNvbWUgcmVhbGx5IG5pY2UgZG9jcyBhYm91dCB0aGlzIGFuZCBvdGhlciBzZW5zb3IgcmVsYXRlZAorCXN0dWZmIG9uIHRoZWlyIGhvbWVwYWdlOiB3d3cuaGVpLmNvLmtyCisqLworc3RhdGljIHZvaWQgc2U0MDFfYXV0b19yZXNldGxldmVsKHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxKQoreworCXVuc2lnbmVkIGludCBhaHJjLCBhbHJjOworCWludCBvbGRyZXNldD1zZTQwMS0+cmVzZXRsZXZlbDsKKworCS8qIEZvciBzb21lIHJlYXNvbiB0aGlzIG5vcm1hbGx5IHJlYWQtb25seSByZWdpc3RlciBkb2Vzbid0IGdldCByZXNldAorCSAgIHRvIHplcm8gYWZ0ZXIgcmVhZGluZyB0aGVtIGp1c3Qgb25jZS4uLgorCSAqLworCXNlNDAxX2dldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX0hJUkVGTk9IKTsgCisJc2U0MDFfZ2V0X2ZlYXR1cmUoc2U0MDEsIEhWNzEzMV9SRUdfSElSRUZOT0wpOworCXNlNDAxX2dldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX0xPUkVGTk9IKTsKKwlzZTQwMV9nZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19MT1JFRk5PTCk7CisJYWhyYz0yNTYqc2U0MDFfZ2V0X2ZlYXR1cmUoc2U0MDEsIEhWNzEzMV9SRUdfSElSRUZOT0gpICsgCisJICAgIHNlNDAxX2dldF9mZWF0dXJlKHNlNDAxLCBIVjcxMzFfUkVHX0hJUkVGTk9MKTsKKwlhbHJjPTI1NipzZTQwMV9nZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19MT1JFRk5PSCkgKworCSAgICBzZTQwMV9nZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19MT1JFRk5PTCk7CisKKwkvKiBOb3QgYW4gZXhhY3Qgc2NpZW5jZSwgYnV0IGl0IHNlZW1zIHRvIHdvcmsgcHJldHR5IHdlbGwuLi4gKi8KKwlpZiAoYWxyYyA+IDEwKSB7CisJCXdoaWxlIChhbHJjPj0xMCAmJiBzZTQwMS0+cmVzZXRsZXZlbCA8IDYzKSB7CisJCQlzZTQwMS0+cmVzZXRsZXZlbCsrOworCQkJYWxyYyAvPTI7CisJCX0KKwl9IGVsc2UgaWYgKGFocmMgPiAyMCkgeworCQl3aGlsZSAoYWhyYz49MjAgJiYgc2U0MDEtPnJlc2V0bGV2ZWwgPiAwKSB7CisJCQlzZTQwMS0+cmVzZXRsZXZlbC0tOworCQkJYWhyYyAvPTI7CisJCX0KKwl9CisJaWYgKHNlNDAxLT5yZXNldGxldmVsIT1vbGRyZXNldCkKKwkJc2U0MDFfc2V0X2ZlYXR1cmUoc2U0MDEsIEhWNzEzMV9SRUdfQVJMViwgc2U0MDEtPnJlc2V0bGV2ZWwpOworCisJcmV0dXJuOworfQorCisvKiBpcnEgaGFuZGxlciBmb3Igc25hcHNob3QgYnV0dG9uICovCitzdGF0aWMgdm9pZCBzZTQwMV9idXR0b25faXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEgPSB1cmItPmNvbnRleHQ7CisJaW50IHN0YXR1czsKKwkKKwlpZiAoIXNlNDAxLT5kZXYpIHsKKwkJaW5mbygib2hvaDogZGV2aWNlIHZhcG91cmlzaGVkIik7CisJCXJldHVybjsKKwl9CisJCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID49MikgeworCQlpZiAoc2U0MDEtPmJ1dHRvbikKKwkJCXNlNDAxLT5idXR0b25wcmVzc2VkPTE7CisJfQorZXhpdDoKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKQorCQllcnIgKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCSAgICAgX19GVU5DVElPTl9fLCBzdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCBzZTQwMV92aWRlb19pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSA9IHVyYi0+Y29udGV4dDsKKwlpbnQgbGVuZ3RoID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCisJLyogb2hvaC4uLiAqLworCWlmICghc2U0MDEtPnN0cmVhbWluZykKKwkJcmV0dXJuOworCisJaWYgKCFzZTQwMS0+ZGV2KSB7CisJCWluZm8gKCJvaG9oOiBkZXZpY2UgdmFwb3VyaXNoZWQiKTsKKwkJcmV0dXJuOworCX0KKworCS8qIDAgc2l6ZWQgcGFja2V0cyBoYXBwZW4gaWYgd2UgYXJlIHRvIGZhc3QsIGJ1dCBzb21ldGltZXMgdGhlIGNhbWVyYQorCSAgIGtlZXBzIHNlbmRpbmcgdGhlbSBmb3JldmVyLi4uCisJICovCisJaWYgKGxlbmd0aCAmJiAhdXJiLT5zdGF0dXMpIHsKKwkJc2U0MDEtPm51bGxwYWNrZXRzPTA7CisJCXN3aXRjaChzZTQwMS0+c2NyYXRjaFtzZTQwMS0+c2NyYXRjaF9uZXh0XS5zdGF0ZSkgeworCQkJY2FzZSBCVUZGRVJfUkVBRFk6CisJCQljYXNlIEJVRkZFUl9CVVNZOiB7CisJCQkJc2U0MDEtPmRyb3BwZWQrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgQlVGRkVSX1VOVVNFRDogeworCQkJCW1lbWNweShzZTQwMS0+c2NyYXRjaFtzZTQwMS0+c2NyYXRjaF9uZXh0XS5kYXRhLCAodW5zaWduZWQgY2hhciAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyLCBsZW5ndGgpOworCQkJCXNlNDAxLT5zY3JhdGNoW3NlNDAxLT5zY3JhdGNoX25leHRdLnN0YXRlPUJVRkZFUl9SRUFEWTsKKwkJCQlzZTQwMS0+c2NyYXRjaFtzZTQwMS0+c2NyYXRjaF9uZXh0XS5vZmZzZXQ9c2U0MDEtPmJheWVyb2Zmc2V0OworCQkJCXNlNDAxLT5zY3JhdGNoW3NlNDAxLT5zY3JhdGNoX25leHRdLmxlbmd0aD1sZW5ndGg7CisJCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnNlNDAxLT53cSkpIHsKKwkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzZTQwMS0+d3EpOworCQkJCX0KKwkJCQlzZTQwMS0+c2NyYXRjaF9vdmVyZmxvdz0wOworCQkJCXNlNDAxLT5zY3JhdGNoX25leHQrKzsKKwkJCQlpZiAoc2U0MDEtPnNjcmF0Y2hfbmV4dD49U0U0MDFfTlVNU0NSQVRDSCkKKwkJCQkJc2U0MDEtPnNjcmF0Y2hfbmV4dD0wOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXNlNDAxLT5iYXllcm9mZnNldCs9bGVuZ3RoOworCQlpZiAoc2U0MDEtPmJheWVyb2Zmc2V0Pj1zZTQwMS0+Y2hlaWdodCpzZTQwMS0+Y3dpZHRoKSB7CisJCQlzZTQwMS0+YmF5ZXJvZmZzZXQ9MDsKKwkJfQorCX0gZWxzZSB7CisJCXNlNDAxLT5udWxscGFja2V0cysrOworCQlpZiAoc2U0MDEtPm51bGxwYWNrZXRzID4gU0U0MDFfTUFYX05VTExQQUNLRVRTKSB7CisJCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmc2U0MDEtPndxKSkgeworCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc2U0MDEtPndxKTsKKwkJCX0JCQorCQl9CisJfQorCisJLyogUmVzdWJtaXQgdXJiIGZvciBuZXcgZGF0YSAqLworCXVyYi0+c3RhdHVzPTA7CisJdXJiLT5kZXY9c2U0MDEtPmRldjsKKwlpZih1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpKQorCQlpbmZvKCJ1cmIgYnVybmVkIGRvd24iKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHNlNDAxX3NlbmRfc2l6ZShzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworCWludCBpPTA7CisJaW50IG1vZGU9MHgwMzsgLyogTm8gY29tcHJlc3Npb24gKi8KKwlpbnQgc2VuZGhlaWdodD1oZWlnaHQ7CisJaW50IHNlbmR3aWR0aD13aWR0aDsKKworCS8qIEphbmdHdSBjb21wcmVzc2lvbiBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIGNhbWVyYSBzdXBwb3J0ZWQgc2l6ZXMsCisJICAgYnV0IGJheWVyIHNlZW1zIHRvIHdvcmsgd2l0aCBhbnkgc2l6ZSB0aGF0IGZpdHMgb24gdGhlIHNlbnNvci4KKwkgICBXZSBjaGVjayBpZiB3ZSBjYW4gdXNlIGNvbXByZXNzaW9uIHdpdGggdGhlIGN1cnJlbnQgc2l6ZSB3aXRoIGVpdGhlcgorCSAgIDQgb3IgMTYgdGltZXMgc3ViY2FwdHVyaW5nLCBpZiBub3Qgd2UgdXNlIHVuY29tcHJlc3NlZCBiYXllciBkYXRhCisJICAgYnV0IHRoaXMgd2lsbCByZXN1bHQgaW4gY3V0b3V0cyBvZiB0aGUgbWF4aW11bSBzaXplLi4uLgorCSAqLworCXdoaWxlIChpPHNlNDAxLT5zaXplcyAmJiAhKHNlNDAxLT53aWR0aFtpXT09d2lkdGggJiYgc2U0MDEtPmhlaWdodFtpXT09aGVpZ2h0KSkKKwkJaSsrOworCXdoaWxlIChpPHNlNDAxLT5zaXplcykgeworCQlpZiAoc2U0MDEtPndpZHRoW2ldPT13aWR0aCoyICYmIHNlNDAxLT5oZWlnaHRbaV09PWhlaWdodCoyKSB7CisJCQlzZW5kaGVpZ2h0PXNlNDAxLT5oZWlnaHRbaV07CisJCQlzZW5kd2lkdGg9c2U0MDEtPndpZHRoW2ldOworCQkJbW9kZT0weDQwOworCQl9CisJCWlmIChzZTQwMS0+d2lkdGhbaV09PXdpZHRoKjQgJiYgc2U0MDEtPmhlaWdodFtpXT09aGVpZ2h0KjQpIHsKKwkJCXNlbmRoZWlnaHQ9c2U0MDEtPmhlaWdodFtpXTsKKwkJCXNlbmR3aWR0aD1zZTQwMS0+d2lkdGhbaV07CisJCQltb2RlPTB4NDI7CisJCX0KKwkJaSsrOworCX0KKworCXNlNDAxX3NuZGN0cmwoMSwgc2U0MDEsIFNFNDAxX1JFUV9TRVRfV0lEVEgsIHNlbmR3aWR0aCwgTlVMTCwgMCk7CisJc2U0MDFfc25kY3RybCgxLCBzZTQwMSwgU0U0MDFfUkVRX1NFVF9IRUlHSFQsIHNlbmRoZWlnaHQsIE5VTEwsIDApOworCXNlNDAxX3NldF9mZWF0dXJlKHNlNDAxLCBTRTQwMV9PUEVSQVRJTkdNT0RFLCBtb2RlKTsKKworCWlmIChtb2RlPT0weDAzKSB7CisJCXNlNDAxLT5mb3JtYXQ9Rk1UX0JBWUVSOworCX0gZWxzZSB7CisJCXNlNDAxLT5mb3JtYXQ9Rk1UX0pBTkdHVTsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qCisJSW4gdGhpcyBmdW5jdGlvbiBzZTQwMV9zZW5kX3BpY3QgaXMgY2FsbGVkIHNldmVyYWwgdGltZXMsCisJZm9yIHNvbWUgcmVhc29uIChkZXBlbmRpbmcgb24gdGhlIHN0YXRlIG9mIHRoZSBzZW5zb3IgYW5kIHRoZSBwaGFzZSBvZgorCXRoZSBtb29uIDopIGRvaW5nIHRoaXMgb25seSBpbiBlaXRoZXIgcGxhY2UgZG9lc24ndCBhbHdheXMgd29yay4uLgorKi8KK3N0YXRpYyBpbnQgc2U0MDFfc3RhcnRfc3RyZWFtKHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxKQoreworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgZXJyPTAsIGk7CisJc2U0MDEtPnN0cmVhbWluZz0xOworCisgICAgICAgIHNlNDAxX3NuZGN0cmwoMSwgc2U0MDEsIFNFNDAxX1JFUV9DQU1FUkFfUE9XRVIsIDEsIE5VTEwsIDApOworICAgICAgICBzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfTEVEX0NPTlRST0wsIDEsIE5VTEwsIDApOworCisJLyogU2V0IHBpY3R1cmUgc2V0dGluZ3MgKi8KKwlzZTQwMV9zZXRfZmVhdHVyZShzZTQwMSwgSFY3MTMxX1JFR19NT0RFX0IsIDB4MDUpOy8qd2luZG93ZWQgKyBwaXggaW50ZyAqLworCXNlNDAxX3NlbmRfcGljdChzZTQwMSk7CisKKwlzZTQwMV9zZW5kX3NpemUoc2U0MDEsIHNlNDAxLT5jd2lkdGgsIHNlNDAxLT5jaGVpZ2h0KTsKKworCXNlNDAxX3NuZGN0cmwoMSwgc2U0MDEsIFNFNDAxX1JFUV9TVEFSVF9DT05USU5VT1VTX0NBUFRVUkUsIDAsIE5VTEwsIDApOworCisJLyogRG8gc29tZSBtZW1vcnkgYWxsb2NhdGlvbiAqLworCWZvciAoaT0wOyBpPFNFNDAxX05VTUZSQU1FUzsgaSsrKSB7CisJCXNlNDAxLT5mcmFtZVtpXS5kYXRhPXNlNDAxLT5mYnVmICsgaSAqIHNlNDAxLT5tYXhmcmFtZXNpemU7CisJCXNlNDAxLT5mcmFtZVtpXS5jdXJwaXg9MDsKKwl9CisJZm9yIChpPTA7IGk8U0U0MDFfTlVNU0JVRjsgaSsrKSB7CisJCXNlNDAxLT5zYnVmW2ldLmRhdGE9a21hbGxvYyhTRTQwMV9QQUNLRVRTSVpFLCBHRlBfS0VSTkVMKTsKKwl9CisKKwlzZTQwMS0+YmF5ZXJvZmZzZXQ9MDsKKwlzZTQwMS0+c2NyYXRjaF9uZXh0PTA7CisJc2U0MDEtPnNjcmF0Y2hfdXNlPTA7CisJc2U0MDEtPnNjcmF0Y2hfb3ZlcmZsb3c9MDsKKwlmb3IgKGk9MDsgaTxTRTQwMV9OVU1TQ1JBVENIOyBpKyspIHsKKwkJc2U0MDEtPnNjcmF0Y2hbaV0uZGF0YT1rbWFsbG9jKFNFNDAxX1BBQ0tFVFNJWkUsIEdGUF9LRVJORUwpOworCQlzZTQwMS0+c2NyYXRjaFtpXS5zdGF0ZT1CVUZGRVJfVU5VU0VEOworCX0KKworCWZvciAoaT0wOyBpPFNFNDAxX05VTVNCVUY7IGkrKykgeworCQl1cmI9dXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYoIXVyYikKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgc2U0MDEtPmRldiwKKwkJCXVzYl9yY3ZidWxrcGlwZShzZTQwMS0+ZGV2LCBTRTQwMV9WSURFT19FTkRQT0lOVCksCisJCQlzZTQwMS0+c2J1ZltpXS5kYXRhLCBTRTQwMV9QQUNLRVRTSVpFLAorCQkJc2U0MDFfdmlkZW9faXJxLAorCQkJc2U0MDEpOworCisJCXNlNDAxLT51cmJbaV09dXJiOworCisJCWVycj11c2Jfc3VibWl0X3VyYihzZTQwMS0+dXJiW2ldLCBHRlBfS0VSTkVMKTsKKwkJaWYoZXJyKQorCQkJZXJyKCJ1cmIgYnVybmVkIGRvd24iKTsKKwl9CisKKwlzZTQwMS0+ZnJhbWVjb3VudD0wOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2U0MDFfc3RvcF9zdHJlYW0oc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEpCit7CisJaW50IGk7CisKKwlpZiAoIXNlNDAxLT5zdHJlYW1pbmcgfHwgIXNlNDAxLT5kZXYpCisJCXJldHVybiAxOworCisJc2U0MDEtPnN0cmVhbWluZz0wOworCisJc2U0MDFfc25kY3RybCgxLCBzZTQwMSwgU0U0MDFfUkVRX1NUT1BfQ09OVElOVU9VU19DQVBUVVJFLCAwLCBOVUxMLCAwKTsKKworCXNlNDAxX3NuZGN0cmwoMSwgc2U0MDEsIFNFNDAxX1JFUV9MRURfQ09OVFJPTCwgMCwgTlVMTCwgMCk7CisJc2U0MDFfc25kY3RybCgxLCBzZTQwMSwgU0U0MDFfUkVRX0NBTUVSQV9QT1dFUiwgMCwgTlVMTCwgMCk7CisKKwlmb3IgKGk9MDsgaTxTRTQwMV9OVU1TQlVGOyBpKyspIGlmIChzZTQwMS0+dXJiW2ldKSB7CisJCXVzYl9raWxsX3VyYihzZTQwMS0+dXJiW2ldKTsKKwkJdXNiX2ZyZWVfdXJiKHNlNDAxLT51cmJbaV0pOworCQlzZTQwMS0+dXJiW2ldPU5VTEw7CisJCWtmcmVlKHNlNDAxLT5zYnVmW2ldLmRhdGEpOworCX0KKwlmb3IgKGk9MDsgaTxTRTQwMV9OVU1TQ1JBVENIOyBpKyspIHsKKwkJa2ZyZWUoc2U0MDEtPnNjcmF0Y2hbaV0uZGF0YSk7CisJCXNlNDAxLT5zY3JhdGNoW2ldLmRhdGE9TlVMTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZTQwMV9zZXRfc2l6ZShzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworCWludCB3YXNzdHJlYW1pbmc9c2U0MDEtPnN0cmVhbWluZzsKKwkvKiBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBjaGFuZ2UgKi8KKwlpZiAoc2U0MDEtPmN3aWR0aD09d2lkdGggJiYgc2U0MDEtPmNoZWlnaHQ9PWhlaWdodCkKKwkJcmV0dXJuIDA7CisKKwkvKiBDaGVjayBmb3IgYSB2YWxpZCBtb2RlICovCisJaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KQorCQlyZXR1cm4gMTsKKwlpZiAoKHdpZHRoICYgMSkgfHwgKGhlaWdodCAmIDEpKQorCQlyZXR1cm4gMTsKKwlpZiAod2lkdGg+c2U0MDEtPndpZHRoW3NlNDAxLT5zaXplcy0xXSkKKwkJcmV0dXJuIDE7CisJaWYgKGhlaWdodD5zZTQwMS0+aGVpZ2h0W3NlNDAxLT5zaXplcy0xXSkKKwkJcmV0dXJuIDE7CisKKwkvKiBTdG9wIGEgY3VycmVudCBzdHJlYW0gYW5kIHN0YXJ0IGl0IGFnYWluIGF0IHRoZSBuZXcgc2l6ZSAqLworCWlmICh3YXNzdHJlYW1pbmcpCisJCXNlNDAxX3N0b3Bfc3RyZWFtKHNlNDAxKTsKKwlzZTQwMS0+Y3dpZHRoPXdpZHRoOworCXNlNDAxLT5jaGVpZ2h0PWhlaWdodDsKKwlpZiAod2Fzc3RyZWFtaW5nKQorCQlzZTQwMV9zdGFydF9zdHJlYW0oc2U0MDEpOworCXJldHVybiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVmlkZW8gRGVjb2RpbmcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorCVRoaXMgc2hvdWxkbid0IHJlYWxseSBiZSBkb25lIGluIGEgdjRsIGRyaXZlci4uLi4KKwlCdXQgaXQgZG9lcyBtYWtlIHRoZSBpbWFnZSBsb29rIGEgbG90IG1vcmUgdXNhYmxlLgorCUJhc2ljYWxseSBpdCBsaWZ0cyB0aGUgZGFyayBwaXhlbHMgbW9yZSB0aGFuIHRoZSBsaWdodCBwaXhlbHMuCisqLworc3RhdGljIGlubGluZSB2b2lkIGVuaGFuY2VfcGljdHVyZSh1bnNpZ25lZCBjaGFyICpmcmFtZSwgaW50IGxlbikKK3sKKwl3aGlsZSAobGVuLS0pIHsKKwkJKmZyYW1lPSgoKCpmcmFtZV4yNTUpKigqZnJhbWVeMjU1KSkvMjU1KV4yNTU7CisJCWZyYW1lKys7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVjb2RlX0phbmdHdV9pbnRlZ3JhdGUoc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEsIGludCBkYXRhKQoreworCXN0cnVjdCBzZTQwMV9mcmFtZSAqZnJhbWU9JnNlNDAxLT5mcmFtZVtzZTQwMS0+Y3VyZnJhbWVdOworCWludCBsaW5lbGVuZ3RoPXNlNDAxLT5jd2lkdGgqMzsKKworCWlmIChmcmFtZS0+Y3VybGluZXBpeCA+PSBsaW5lbGVuZ3RoKSB7CisJCWZyYW1lLT5jdXJsaW5lcGl4PTA7CisJCWZyYW1lLT5jdXJsaW5lKz1saW5lbGVuZ3RoOworCX0KKworCS8qIEZpcnN0IHRocmVlIGFyZSBhYnNvbHV0ZSwgYWxsIG90aGVycyByZWxhdGl2ZS4KKwkgKiBGb3JtYXQgaXMgcmdiIGZyb20gcmlnaHQgdG8gbGVmdCAobWlycm9ycmVkIGltYWdlKSwgCisJICogd2UgZmxpcCBpdCB0byBnZXQgYmdyIGZyb20gbGVmdCB0byByaWdodC4gKi8KKwlpZiAoZnJhbWUtPmN1cmxpbmVwaXggPCAzKSB7CisJCSooZnJhbWUtPmN1cmxpbmUtZnJhbWUtPmN1cmxpbmVwaXgpPTErZGF0YSo0OworCX0gZWxzZSB7CisJCSooZnJhbWUtPmN1cmxpbmUtZnJhbWUtPmN1cmxpbmVwaXgpPQorCQkgICAgKihmcmFtZS0+Y3VybGluZS1mcmFtZS0+Y3VybGluZXBpeCszKStkYXRhKjQ7CisJfQorCWZyYW1lLT5jdXJsaW5lcGl4Kys7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWNvZGVfSmFuZ0d1X3ZsYyAoc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBiaXRfZXhwLCBpbnQgcGFja2V0bGVuZ3RoKQoreworCWludCBwb3M9MDsKKwlpbnQgdmxjX2NvZD0wOworCWludCB2bGNfc2l6ZT0wOworCWludCB2bGNfZGF0YT0wOworCWludCBiaXRfY3VyOworCWludCBiaXQ7CisJZGF0YSs9NDsKKwl3aGlsZSAocG9zIDwgcGFja2V0bGVuZ3RoKSB7CisJCWJpdF9jdXI9ODsKKwkJd2hpbGUgKGJpdF9jdXIgJiYgYml0X2V4cCkgeworCQkJYml0PSgoKmRhdGEpPj4oYml0X2N1ci0xKSkmMTsKKwkJCWlmICghdmxjX2NvZCkgeworCQkJCWlmIChiaXQpIHsKKwkJCQkJdmxjX3NpemUrKzsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoIXZsY19zaXplKSB7CisJCQkJCQlkZWNvZGVfSmFuZ0d1X2ludGVncmF0ZShzZTQwMSwgMCk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQl2bGNfY29kPTI7CisJCQkJCQl2bGNfZGF0YT0wOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAodmxjX2NvZD09MikgeworCQkJCQlpZiAoIWJpdCkKKwkJCQkJCXZsY19kYXRhID0gIC0oMTw8dmxjX3NpemUpICsgMTsKKwkJCQkJdmxjX2NvZC0tOworCQkJCX0KKwkJCQl2bGNfc2l6ZS0tOworCQkJCXZsY19kYXRhKz1iaXQ8PHZsY19zaXplOworCQkJCWlmICghdmxjX3NpemUpIHsKKwkJCQkJZGVjb2RlX0phbmdHdV9pbnRlZ3JhdGUoc2U0MDEsIHZsY19kYXRhKTsKKwkJCQkJdmxjX2NvZD0wOworCQkJCX0KKwkJCX0KKwkJCWJpdF9jdXItLTsKKwkJCWJpdF9leHAtLTsKKwkJfQorCQlwb3MrKzsKKwkJZGF0YSsrOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlY29kZV9KYW5nR3UgKHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxLCBzdHJ1Y3Qgc2U0MDFfc2NyYXRjaCAqYnVmZmVyKQoreworCXVuc2lnbmVkIGNoYXIgKmRhdGE9YnVmZmVyLT5kYXRhOworCWludCBsZW49YnVmZmVyLT5sZW5ndGg7CisJaW50IGJpdF9leHA9MCwgcGl4X2V4cD0wLCBmcmFtZWluZm89MCwgcGFja2V0bGVuZ3RoPTAsIHNpemU7CisJaW50IGRhdGFwb3M9MDsKKworCS8qIE5ldyBpbWFnZT8gKi8KKwlpZiAoIXNlNDAxLT5mcmFtZVtzZTQwMS0+Y3VyZnJhbWVdLmN1cnBpeCkgeworCQlzZTQwMS0+ZnJhbWVbc2U0MDEtPmN1cmZyYW1lXS5jdXJsaW5lcGl4PTA7CisJCXNlNDAxLT5mcmFtZVtzZTQwMS0+Y3VyZnJhbWVdLmN1cmxpbmU9CisJCSAgICBzZTQwMS0+ZnJhbWVbc2U0MDEtPmN1cmZyYW1lXS5kYXRhKworCQkgICAgc2U0MDEtPmN3aWR0aCozLTE7CisJCWlmIChzZTQwMS0+ZnJhbWVbc2U0MDEtPmN1cmZyYW1lXS5ncmFic3RhdGU9PUZSQU1FX1JFQURZKQorCQkJc2U0MDEtPmZyYW1lW3NlNDAxLT5jdXJmcmFtZV0uZ3JhYnN0YXRlPUZSQU1FX0dSQUJCSU5HOworCQlzZTQwMS0+dmxjZGF0YXBvcz0wOworCX0KKwl3aGlsZSAoZGF0YXBvcyA8IGxlbikgeworCQlzaXplPTEwMjQtc2U0MDEtPnZsY2RhdGFwb3M7CisJCWlmIChzaXplK2RhdGFwb3MgPiBsZW4pCisJCQlzaXplPWxlbi1kYXRhcG9zOworCQltZW1jcHkoc2U0MDEtPnZsY2RhdGErc2U0MDEtPnZsY2RhdGFwb3MsIGRhdGErZGF0YXBvcywgc2l6ZSk7CisJCXNlNDAxLT52bGNkYXRhcG9zKz1zaXplOworCQlwYWNrZXRsZW5ndGg9MDsKKwkJaWYgKHNlNDAxLT52bGNkYXRhcG9zID49IDQpIHsKKwkJCWJpdF9leHA9c2U0MDEtPnZsY2RhdGFbM10rKHNlNDAxLT52bGNkYXRhWzJdPDw4KTsKKwkJCXBpeF9leHA9c2U0MDEtPnZsY2RhdGFbMV0rKChzZTQwMS0+dmxjZGF0YVswXSYweDNmKTw8OCk7CisJCQlmcmFtZWluZm89c2U0MDEtPnZsY2RhdGFbMF0mMHhjMDsKKwkJCXBhY2tldGxlbmd0aD0oKGJpdF9leHArNDcpPj40KTw8MTsKKwkJCWlmIChwYWNrZXRsZW5ndGggPiAxMDI0KSB7CisJCQkJc2U0MDEtPnZsY2RhdGFwb3M9MDsKKwkJCQlkYXRhcG9zPWxlbjsKKwkJCQlwYWNrZXRsZW5ndGg9MDsKKwkJCQlzZTQwMS0+ZXJyb3IrKzsKKwkJCQlzZTQwMS0+ZnJhbWVbc2U0MDEtPmN1cmZyYW1lXS5jdXJwaXg9MDsKKwkJCX0KKwkJfQorCQlpZiAocGFja2V0bGVuZ3RoICYmIHNlNDAxLT52bGNkYXRhcG9zID49IHBhY2tldGxlbmd0aCkgeworCQkJZGVjb2RlX0phbmdHdV92bGMoc2U0MDEsIHNlNDAxLT52bGNkYXRhLCBiaXRfZXhwLCBwYWNrZXRsZW5ndGgpOworCQkJc2U0MDEtPmZyYW1lW3NlNDAxLT5jdXJmcmFtZV0uY3VycGl4Kz1waXhfZXhwKjM7CisJCQlkYXRhcG9zKz1zaXplLShzZTQwMS0+dmxjZGF0YXBvcy1wYWNrZXRsZW5ndGgpOworCQkJc2U0MDEtPnZsY2RhdGFwb3M9MDsKKwkJCWlmIChzZTQwMS0+ZnJhbWVbc2U0MDEtPmN1cmZyYW1lXS5jdXJwaXg+PXNlNDAxLT5jd2lkdGgqc2U0MDEtPmNoZWlnaHQqMykgeworCQkJCWlmIChzZTQwMS0+ZnJhbWVbc2U0MDEtPmN1cmZyYW1lXS5jdXJwaXg9PXNlNDAxLT5jd2lkdGgqc2U0MDEtPmNoZWlnaHQqMykgeworCQkJCQlpZiAoc2U0MDEtPmZyYW1lW3NlNDAxLT5jdXJmcmFtZV0uZ3JhYnN0YXRlPT1GUkFNRV9HUkFCQklORykgeworCQkJCQkJc2U0MDEtPmZyYW1lW3NlNDAxLT5jdXJmcmFtZV0uZ3JhYnN0YXRlPUZSQU1FX0RPTkU7CisJCQkJCQlzZTQwMS0+ZnJhbWVjb3VudCsrOworCQkJCQkJc2U0MDEtPnJlYWRjb3VudCsrOworCQkJCQl9CisJCQkJCWlmIChzZTQwMS0+ZnJhbWVbKHNlNDAxLT5jdXJmcmFtZSsxKSYoU0U0MDFfTlVNRlJBTUVTLTEpXS5ncmFic3RhdGU9PUZSQU1FX1JFQURZKSB7CisJCQkJCQlzZTQwMS0+Y3VyZnJhbWU9KHNlNDAxLT5jdXJmcmFtZSsxKSAmIChTRTQwMV9OVU1GUkFNRVMtMSk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlzZTQwMS0+ZXJyb3IrKzsKKwkJCQl9CisJCQkJc2U0MDEtPmZyYW1lW3NlNDAxLT5jdXJmcmFtZV0uY3VycGl4PTA7CisJCQkJZGF0YXBvcz1sZW47CisJCQl9CisJCX0gZWxzZSB7CisJCQlkYXRhcG9zKz1zaXplOworCQl9CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVjb2RlX2JheWVyIChzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSwgc3RydWN0IHNlNDAxX3NjcmF0Y2ggKmJ1ZmZlcikKK3sKKwl1bnNpZ25lZCBjaGFyICpkYXRhPWJ1ZmZlci0+ZGF0YTsKKwlpbnQgbGVuPWJ1ZmZlci0+bGVuZ3RoOworCWludCBvZmZzZXQ9YnVmZmVyLT5vZmZzZXQ7CisJaW50IGRhdGFzaXplPXNlNDAxLT5jd2lkdGgqc2U0MDEtPmNoZWlnaHQ7CisJc3RydWN0IHNlNDAxX2ZyYW1lICpmcmFtZT0mc2U0MDEtPmZyYW1lW3NlNDAxLT5jdXJmcmFtZV07CisKKwl1bnNpZ25lZCBjaGFyICpmcmFtZWRhdGE9ZnJhbWUtPmRhdGEsICpjdXJsaW5lLCAqbmV4dGxpbmU7CisJaW50IHdpZHRoPXNlNDAxLT5jd2lkdGg7CisJaW50IGJsaW5lb2Zmc2V0PTAsIGJsaW5lOworCWludCBsaW5lbGVuZ3RoPXdpZHRoKjMsIGk7CisJCisKKwlpZiAoZnJhbWUtPmN1cnBpeD09MCkgeworCQlpZiAoZnJhbWUtPmdyYWJzdGF0ZT09RlJBTUVfUkVBRFkpIHsKKwkJCWZyYW1lLT5ncmFic3RhdGU9RlJBTUVfR1JBQkJJTkc7CisJCX0KKwkJZnJhbWUtPmN1cmxpbmU9ZnJhbWVkYXRhK2xpbmVsZW5ndGg7CisJCWZyYW1lLT5jdXJsaW5lcGl4PTA7CisJfQorCisJaWYgKG9mZnNldCE9ZnJhbWUtPmN1cnBpeCkgeworCQkvKiBSZWdhcmQgZnJhbWUgYXMgbG9zdCA6KCAqLworCQlmcmFtZS0+Y3VycGl4PTA7CisJCXNlNDAxLT5lcnJvcisrOworCQlyZXR1cm47CisJfQorCisJLyogQ2hlY2sgaWYgd2UgaGF2ZSB0byBtdWNoIGRhdGEgKi8KKwlpZiAoZnJhbWUtPmN1cnBpeCtsZW4gPiBkYXRhc2l6ZSkgeworCQlsZW49ZGF0YXNpemUtZnJhbWUtPmN1cnBpeDsKKwl9CisJaWYgKHNlNDAxLT5jaGVpZ2h0JTQpCisJCWJsaW5lb2Zmc2V0PTE7CisJYmxpbmU9ZnJhbWUtPmN1cnBpeC9zZTQwMS0+Y3dpZHRoK2JsaW5lb2Zmc2V0OworCisJY3VybGluZT1mcmFtZS0+Y3VybGluZTsKKwluZXh0bGluZT1jdXJsaW5lK2xpbmVsZW5ndGg7CisJaWYgKG5leHRsaW5lID49IGZyYW1lZGF0YStkYXRhc2l6ZSozKQorCQluZXh0bGluZT1jdXJsaW5lOworCXdoaWxlIChsZW4pIHsKKwkJaWYgKGZyYW1lLT5jdXJsaW5lcGl4Pj13aWR0aCkgeworCQkJZnJhbWUtPmN1cmxpbmVwaXgtPXdpZHRoOworCQkJYmxpbmU9ZnJhbWUtPmN1cnBpeC93aWR0aCtibGluZW9mZnNldDsKKwkJCWN1cmxpbmUrPWxpbmVsZW5ndGgqMjsKKwkJCW5leHRsaW5lKz1saW5lbGVuZ3RoKjI7CisJCQlpZiAoY3VybGluZSA+PSBmcmFtZWRhdGErZGF0YXNpemUqMykgeworCQkJCWZyYW1lLT5jdXJsaW5lcGl4Kys7CisJCQkJY3VybGluZS09MzsKKwkJCQluZXh0bGluZS09MzsKKwkJCQlsZW4tLTsKKwkJCQlkYXRhKys7CisJCQkJZnJhbWUtPmN1cnBpeCsrOworCQkJfQorCQkJaWYgKG5leHRsaW5lID49IGZyYW1lZGF0YStkYXRhc2l6ZSozKQorCQkJCW5leHRsaW5lPWN1cmxpbmU7CisJCX0KKwkJaWYgKChibGluZSYxKSkgeworCQkJaWYgKChmcmFtZS0+Y3VybGluZXBpeCYxKSkgeworCQkJCSooY3VybGluZSsyKT0qZGF0YTsKKwkJCQkqKGN1cmxpbmUtMSk9KmRhdGE7CisJCQkJKihuZXh0bGluZSsyKT0qZGF0YTsKKwkJCQkqKG5leHRsaW5lLTEpPSpkYXRhOworCQkJfSBlbHNlIHsKKwkJCQkqKGN1cmxpbmUrMSk9CisJCQkJCSgqKGN1cmxpbmUrMSkrKmRhdGEpLzI7CisJCQkJKihjdXJsaW5lLTIpPQorCQkJCQkoKihjdXJsaW5lLTIpKypkYXRhKS8yOworCQkJCSoobmV4dGxpbmUrMSk9KmRhdGE7CisJCQkJKihuZXh0bGluZS0yKT0qZGF0YTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICgoZnJhbWUtPmN1cmxpbmVwaXgmMSkpIHsKKwkJCQkqKGN1cmxpbmUrMSk9CisJCQkJCSgqKGN1cmxpbmUrMSkrKmRhdGEpLzI7CisJCQkJKihjdXJsaW5lLTIpPQorCQkJCQkoKihjdXJsaW5lLTIpKypkYXRhKS8yOworCQkJCSoobmV4dGxpbmUrMSk9KmRhdGE7CisJCQkJKihuZXh0bGluZS0yKT0qZGF0YTsKKwkJCX0gZWxzZSB7CisJCQkJKmN1cmxpbmU9KmRhdGE7CisJCQkJKihjdXJsaW5lLTMpPSpkYXRhOworCQkJCSpuZXh0bGluZT0qZGF0YTsKKwkJCQkqKG5leHRsaW5lLTMpPSpkYXRhOworCQkJfQorCQl9CisJCWZyYW1lLT5jdXJsaW5lcGl4Kys7CisJCWN1cmxpbmUtPTM7CisJCW5leHRsaW5lLT0zOworCQlsZW4tLTsKKwkJZGF0YSsrOworCQlmcmFtZS0+Y3VycGl4Kys7CisJfQorCWZyYW1lLT5jdXJsaW5lPWN1cmxpbmU7CisKKwlpZiAoZnJhbWUtPmN1cnBpeD49ZGF0YXNpemUpIHsKKwkJLyogRml4IHRoZSB0b3AgbGluZSAqLworCQlmcmFtZWRhdGErPWxpbmVsZW5ndGg7CisJCWZvciAoaT0wOyBpPGxpbmVsZW5ndGg7IGkrKykgeworCQkJZnJhbWVkYXRhLS07CisJCQkqZnJhbWVkYXRhPSooZnJhbWVkYXRhK2xpbmVsZW5ndGgpOworCQl9CisJCS8qIEZpeCB0aGUgbGVmdCBzaWRlIChncmVlbiBpcyBhbHJlYWR5IHByZXNlbnQpICovCisJCWZvciAoaT0wOyBpPHNlNDAxLT5jaGVpZ2h0OyBpKyspIHsKKwkJCSpmcmFtZWRhdGE9KihmcmFtZWRhdGErMyk7CisJCQkqKGZyYW1lZGF0YSsxKT0qKGZyYW1lZGF0YSs0KTsKKwkJCSooZnJhbWVkYXRhKzIpPSooZnJhbWVkYXRhKzUpOworCQkJZnJhbWVkYXRhKz1saW5lbGVuZ3RoOworCQl9CisJCWZyYW1lLT5jdXJwaXg9MDsKKwkJZnJhbWUtPmdyYWJzdGF0ZT1GUkFNRV9ET05FOworCQlzZTQwMS0+ZnJhbWVjb3VudCsrOworCQlzZTQwMS0+cmVhZGNvdW50Kys7CisJCWlmIChzZTQwMS0+ZnJhbWVbKHNlNDAxLT5jdXJmcmFtZSsxKSYoU0U0MDFfTlVNRlJBTUVTLTEpXS5ncmFic3RhdGU9PUZSQU1FX1JFQURZKSB7CisJCQlzZTQwMS0+Y3VyZnJhbWU9KHNlNDAxLT5jdXJmcmFtZSsxKSAmIChTRTQwMV9OVU1GUkFNRVMtMSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgc2U0MDFfbmV3ZnJhbWUoc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEsIGludCBmcmFtZW5yKQoreworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCWludCBlcnJvcnM9MDsKKworCXdoaWxlIChzZTQwMS0+c3RyZWFtaW5nICYmCisJICAgIChzZTQwMS0+ZnJhbWVbZnJhbWVucl0uZ3JhYnN0YXRlPT1GUkFNRV9SRUFEWSB8fAorCSAgICAgc2U0MDEtPmZyYW1lW2ZyYW1lbnJdLmdyYWJzdGF0ZT09RlJBTUVfR1JBQkJJTkcpICkgeworCQlpZighc2U0MDEtPmZyYW1lW2ZyYW1lbnJdLmN1cnBpeCkgeworCQkJZXJyb3JzKys7CisJCX0KKwkJd2FpdF9pbnRlcnJ1cHRpYmxlKAorCQkgICAgc2U0MDEtPnNjcmF0Y2hbc2U0MDEtPnNjcmF0Y2hfdXNlXS5zdGF0ZSE9QlVGRkVSX1JFQURZLAorCQkgICAgJnNlNDAxLT53cSwKKwkJICAgICZ3YWl0CisJCSk7CisJCWlmIChzZTQwMS0+bnVsbHBhY2tldHMgPiBTRTQwMV9NQVhfTlVMTFBBQ0tFVFMpIHsKKwkJCXNlNDAxLT5udWxscGFja2V0cz0wOworCQkJaW5mbygidG8gbWFueSBudWxsIGxlbmd0aCBwYWNrZXRzLCByZXN0YXJ0aW5nIGNhcHR1cmUiKTsKKwkJCXNlNDAxX3N0b3Bfc3RyZWFtKHNlNDAxKTsKKwkJCXNlNDAxX3N0YXJ0X3N0cmVhbShzZTQwMSk7CQkJCisJCX0gZWxzZSB7CisJCQlpZiAoc2U0MDEtPnNjcmF0Y2hbc2U0MDEtPnNjcmF0Y2hfdXNlXS5zdGF0ZSE9QlVGRkVSX1JFQURZKSB7CisJCQkJc2U0MDEtPmZyYW1lW2ZyYW1lbnJdLmdyYWJzdGF0ZT1GUkFNRV9FUlJPUjsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCXNlNDAxLT5zY3JhdGNoW3NlNDAxLT5zY3JhdGNoX3VzZV0uc3RhdGU9QlVGRkVSX0JVU1k7CisJCQlpZiAoc2U0MDEtPmZvcm1hdD09Rk1UX0pBTkdHVSkgeworCQkJCWRlY29kZV9KYW5nR3Uoc2U0MDEsICZzZTQwMS0+c2NyYXRjaFtzZTQwMS0+c2NyYXRjaF91c2VdKTsKKwkJCX0gZWxzZSB7CisJCQkJZGVjb2RlX2JheWVyKHNlNDAxLCAmc2U0MDEtPnNjcmF0Y2hbc2U0MDEtPnNjcmF0Y2hfdXNlXSk7CisJCQl9CisJCQlzZTQwMS0+c2NyYXRjaFtzZTQwMS0+c2NyYXRjaF91c2VdLnN0YXRlPUJVRkZFUl9VTlVTRUQ7CisJCQlzZTQwMS0+c2NyYXRjaF91c2UrKzsKKwkJCWlmIChzZTQwMS0+c2NyYXRjaF91c2U+PVNFNDAxX05VTVNDUkFUQ0gpCisJCQkJc2U0MDEtPnNjcmF0Y2hfdXNlPTA7CisJCQlpZiAoZXJyb3JzID4gU0U0MDFfTUFYX0VSUk9SUykgeworCQkJCWVycm9ycz0wOworCQkJCWluZm8oInRvIG11Y2ggZXJyb3JzLCByZXN0YXJ0aW5nIGNhcHR1cmUiKTsKKwkJCQlzZTQwMV9zdG9wX3N0cmVhbShzZTQwMSk7CisJCQkJc2U0MDFfc3RhcnRfc3RyZWFtKHNlNDAxKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChzZTQwMS0+ZnJhbWVbZnJhbWVucl0uZ3JhYnN0YXRlPT1GUkFNRV9ET05FKQorCQlpZiAoc2U0MDEtPmVuaGFuY2UpCisJCQllbmhhbmNlX3BpY3R1cmUoc2U0MDEtPmZyYW1lW2ZyYW1lbnJdLmRhdGEsIHNlNDAxLT5jaGVpZ2h0KnNlNDAxLT5jd2lkdGgqMyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVzYl9zZTQwMV9yZW1vdmVfZGlzY29ubmVjdGVkIChzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSkKK3sKKwlpbnQgaTsKKworICAgICAgICBzZTQwMS0+ZGV2ID0gTlVMTDsKKworCWZvciAoaT0wOyBpPFNFNDAxX05VTVNCVUY7IGkrKykgaWYgKHNlNDAxLT51cmJbaV0pIHsKKwkJdXNiX2tpbGxfdXJiKHNlNDAxLT51cmJbaV0pOworCQl1c2JfZnJlZV91cmIoc2U0MDEtPnVyYltpXSk7CisJCXNlNDAxLT51cmJbaV0gPSBOVUxMOworCQlrZnJlZShzZTQwMS0+c2J1ZltpXS5kYXRhKTsKKwl9CisJZm9yIChpPTA7IGk8U0U0MDFfTlVNU0NSQVRDSDsgaSsrKSBpZiAoc2U0MDEtPnNjcmF0Y2hbaV0uZGF0YSkgeworCQlrZnJlZShzZTQwMS0+c2NyYXRjaFtpXS5kYXRhKTsKKwl9CisJaWYgKHNlNDAxLT5pbnR1cmIpIHsKKwkJdXNiX2tpbGxfdXJiKHNlNDAxLT5pbnR1cmIpOworCQl1c2JfZnJlZV91cmIoc2U0MDEtPmludHVyYik7CisJfQorICAgICAgICBpbmZvKCIlcyBkaXNjb25uZWN0ZWQiLCBzZTQwMS0+Y2FtZXJhX25hbWUpOworCisgICAgICAgIC8qIEZyZWUgdGhlIG1lbW9yeSAqLworCWtmcmVlKHNlNDAxLT53aWR0aCk7CisJa2ZyZWUoc2U0MDEtPmhlaWdodCk7CisJa2ZyZWUoc2U0MDEpOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBWaWRlbzRMaW51eAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworc3RhdGljIGludCBzZTQwMV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEgPSAoc3RydWN0IHVzYl9zZTQwMSAqKWRldjsKKwlpbnQgZXJyID0gMDsKKworCWlmIChzZTQwMS0+dXNlcikKKwkJcmV0dXJuIC1FQlVTWTsKKwlzZTQwMS0+ZmJ1ZiA9IHJ2bWFsbG9jKHNlNDAxLT5tYXhmcmFtZXNpemUgKiBTRTQwMV9OVU1GUkFNRVMpOworCWlmIChzZTQwMS0+ZmJ1ZikKKwkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGV2OworCWVsc2UgCisJCWVyciA9IC1FTk9NRU07CisJc2U0MDEtPnVzZXIgPSAhZXJyOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzZTQwMV9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisgICAgICAgIHN0cnVjdCB1c2Jfc2U0MDEgKnNlNDAxID0gKHN0cnVjdCB1c2Jfc2U0MDEgKilkZXY7CisJaW50IGk7CisKKwlydmZyZWUoc2U0MDEtPmZidWYsIHNlNDAxLT5tYXhmcmFtZXNpemUgKiBTRTQwMV9OVU1GUkFNRVMpOworICAgICAgICBpZiAoc2U0MDEtPnJlbW92ZWQpIHsKKwkJdXNiX3NlNDAxX3JlbW92ZV9kaXNjb25uZWN0ZWQoc2U0MDEpOworCQlpbmZvKCJkZXZpY2UgdW5yZWdpc3RlcmVkIik7CisJfSBlbHNlIHsKKwkJZm9yIChpPTA7IGk8U0U0MDFfTlVNRlJBTUVTOyBpKyspCisJCQlzZTQwMS0+ZnJhbWVbaV0uZ3JhYnN0YXRlPUZSQU1FX1VOVVNFRDsKKwkJaWYgKHNlNDAxLT5zdHJlYW1pbmcpCisJCQlzZTQwMV9zdG9wX3N0cmVhbShzZTQwMSk7CisJCXNlNDAxLT51c2VyPTA7CisJfQorCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2U0MDFfZG9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworICAgICAgICBzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSA9IChzdHJ1Y3QgdXNiX3NlNDAxICopdmRldjsKKworICAgICAgICBpZiAoIXNlNDAxLT5kZXYpCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU87CisKKyAgICAgICAgc3dpdGNoIChjbWQpIHsKKwljYXNlIFZJRElPQ0dDQVA6CisJeworCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSAqYiA9IGFyZzsKKwkJc3RyY3B5KGItPm5hbWUsIHNlNDAxLT5jYW1lcmFfbmFtZSk7CisJCWItPnR5cGUgPSBWSURfVFlQRV9DQVBUVVJFOworCQliLT5jaGFubmVscyA9IDE7CisJCWItPmF1ZGlvcyA9IDA7CisJCWItPm1heHdpZHRoID0gc2U0MDEtPndpZHRoW3NlNDAxLT5zaXplcy0xXTsKKwkJYi0+bWF4aGVpZ2h0ID0gc2U0MDEtPmhlaWdodFtzZTQwMS0+c2l6ZXMtMV07CisJCWItPm1pbndpZHRoID0gc2U0MDEtPndpZHRoWzBdOworCQliLT5taW5oZWlnaHQgPSBzZTQwMS0+aGVpZ2h0WzBdOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NHQ0hBTjoKKwl7CisJCXN0cnVjdCB2aWRlb19jaGFubmVsICp2ID0gYXJnOworCisJCWlmICh2LT5jaGFubmVsICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJdi0+ZmxhZ3MgPSAwOworCQl2LT50dW5lcnMgPSAwOworCQl2LT50eXBlID0gVklERU9fVFlQRV9DQU1FUkE7CisJCXN0cmNweSh2LT5uYW1lLCAiQ2FtZXJhIik7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ1NDSEFOOgorCXsKKwkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnYgPSBhcmc7CisKKwkJaWYgKHYtPmNoYW5uZWwgIT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gMDsKKwl9CisgICAgICAgIGNhc2UgVklESU9DR1BJQ1Q6CisgICAgICAgIHsKKwkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnAgPSBhcmc7CisKKwkJc2U0MDFfZ2V0X3BpY3Qoc2U0MDEsIHApOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NTUElDVDoKKwl7CisJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwID0gYXJnOworCisJCWlmIChzZTQwMV9zZXRfcGljdChzZTQwMSwgcCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DU1dJTjoKKwl7CisJCXN0cnVjdCB2aWRlb193aW5kb3cgKnZ3ID0gYXJnOworCisJCWlmICh2dy0+ZmxhZ3MpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHZ3LT5jbGlwY291bnQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHNlNDAxX3NldF9zaXplKHNlNDAxLCB2dy0+d2lkdGgsIHZ3LT5oZWlnaHQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAwOworICAgICAgICB9CisJY2FzZSBWSURJT0NHV0lOOgorCXsKKwkJc3RydWN0IHZpZGVvX3dpbmRvdyAqdncgPSBhcmc7CisKKwkJdnctPnggPSAwOyAgICAgICAgICAgICAgIC8qIEZJWE1FICovCisJCXZ3LT55ID0gMDsKKwkJdnctPmNocm9tYWtleSA9IDA7CisJCXZ3LT5mbGFncyA9IDA7CisJCXZ3LT5jbGlwY291bnQgPSAwOworCQl2dy0+d2lkdGggPSBzZTQwMS0+Y3dpZHRoOworCQl2dy0+aGVpZ2h0ID0gc2U0MDEtPmNoZWlnaHQ7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ0dNQlVGOgorCXsKKwkJc3RydWN0IHZpZGVvX21idWYgKnZtID0gYXJnOworCQlpbnQgaTsKKworCQltZW1zZXQodm0sIDAsIHNpemVvZigqdm0pKTsKKwkJdm0tPnNpemUgPSBTRTQwMV9OVU1GUkFNRVMgKiBzZTQwMS0+bWF4ZnJhbWVzaXplOworCQl2bS0+ZnJhbWVzID0gU0U0MDFfTlVNRlJBTUVTOworCQlmb3IgKGk9MDsgaTxTRTQwMV9OVU1GUkFNRVM7IGkrKykKKwkJCXZtLT5vZmZzZXRzW2ldID0gc2U0MDEtPm1heGZyYW1lc2l6ZSAqIGk7CisJCXJldHVybiAwOworCX0KKwljYXNlIFZJRElPQ01DQVBUVVJFOgorCXsKKwkJc3RydWN0IHZpZGVvX21tYXAgKnZtID0gYXJnOworCisJCWlmICh2bS0+Zm9ybWF0ICE9IFZJREVPX1BBTEVUVEVfUkdCMjQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHZtLT5mcmFtZSA+PSBTRTQwMV9OVU1GUkFNRVMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHNlNDAxLT5mcmFtZVt2bS0+ZnJhbWVdLmdyYWJzdGF0ZSAhPSBGUkFNRV9VTlVTRUQpCisJCQlyZXR1cm4gLUVCVVNZOworCisJCS8qIElzIHRoaXMgYWNjb3JkaW5nIHRvIHRoZSB2NGwgc3BlYz8/PyAqLworCQlpZiAoc2U0MDFfc2V0X3NpemUoc2U0MDEsIHZtLT53aWR0aCwgdm0tPmhlaWdodCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc2U0MDEtPmZyYW1lW3ZtLT5mcmFtZV0uZ3JhYnN0YXRlPUZSQU1FX1JFQURZOworCisJCWlmICghc2U0MDEtPnN0cmVhbWluZykKKwkJCXNlNDAxX3N0YXJ0X3N0cmVhbShzZTQwMSk7CisKKwkJLyogU2V0IHRoZSBwaWN0dXJlIHByb3BlcnRpZXMgKi8KKwkJaWYgKHNlNDAxLT5mcmFtZWNvdW50PT0wKQorCQkJc2U0MDFfc2VuZF9waWN0KHNlNDAxKTsKKwkJLyogQ2FsaWJyYXRlIHRoZSByZXNldCBsZXZlbCBhZnRlciBhIGZldyBmcmFtZXMuICovCisJCWlmIChzZTQwMS0+ZnJhbWVjb3VudCUyMD09MSkKKwkJCXNlNDAxX2F1dG9fcmVzZXRsZXZlbChzZTQwMSk7CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgVklESU9DU1lOQzoKKwl7CisJCWludCAqZnJhbWUgPSBhcmc7CisJCWludCByZXQ9MDsKKworCQlpZigqZnJhbWUgPDAgfHwgKmZyYW1lID49IFNFNDAxX05VTUZSQU1FUykKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXJldD1zZTQwMV9uZXdmcmFtZShzZTQwMSwgKmZyYW1lKTsKKwkJc2U0MDEtPmZyYW1lWypmcmFtZV0uZ3JhYnN0YXRlPUZSQU1FX1VOVVNFRDsKKwkJcmV0dXJuIHJldDsKKwl9CisJY2FzZSBWSURJT0NHRkJVRjoKKwl7CisJCXN0cnVjdCB2aWRlb19idWZmZXIgKnZiID0gYXJnOworCisJCW1lbXNldCh2YiwgMCwgc2l6ZW9mKCp2YikpOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBWSURJT0NLRVk6CisJCXJldHVybiAwOworCWNhc2UgVklESU9DQ0FQVFVSRToKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBWSURJT0NTRkJVRjoKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBWSURJT0NHVFVORVI6CisJY2FzZSBWSURJT0NTVFVORVI6CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgVklESU9DR0ZSRVE6CisJY2FzZSBWSURJT0NTRlJFUToKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBWSURJT0NHQVVESU86CisJY2FzZSBWSURJT0NTQVVESU86CisJCXJldHVybiAtRUlOVkFMOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAtRU5PSU9DVExDTUQ7CisgICAgICAgIH0gLyogZW5kIHN3aXRjaCAqLworCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlNDAxX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGlub2RlLCBmaWxlLCBjbWQsIGFyZywgc2U0MDFfZG9faW9jdGwpOworfQorCitzdGF0aWMgc3NpemVfdCBzZTQwMV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCWludCByZWFsY291bnQ9Y291bnQsIHJldD0wOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSA9IChzdHJ1Y3QgdXNiX3NlNDAxICopZGV2OworCisKKwlpZiAoc2U0MDEtPmRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAocmVhbGNvdW50ID4gc2U0MDEtPmN3aWR0aCpzZTQwMS0+Y2hlaWdodCozKQorCQlyZWFsY291bnQ9c2U0MDEtPmN3aWR0aCpzZTQwMS0+Y2hlaWdodCozOworCisJLyogU2hvdWxkbid0IGhhcHBlbjogKi8KKwlpZiAoc2U0MDEtPmZyYW1lWzBdLmdyYWJzdGF0ZT09RlJBTUVfR1JBQkJJTkcpCisJCXJldHVybiAtRUJVU1k7CisJc2U0MDEtPmZyYW1lWzBdLmdyYWJzdGF0ZT1GUkFNRV9SRUFEWTsKKwlzZTQwMS0+ZnJhbWVbMV0uZ3JhYnN0YXRlPUZSQU1FX1VOVVNFRDsKKwlzZTQwMS0+Y3VyZnJhbWU9MDsKKworCWlmICghc2U0MDEtPnN0cmVhbWluZykKKwkJc2U0MDFfc3RhcnRfc3RyZWFtKHNlNDAxKTsKKworCS8qIFNldCB0aGUgcGljdHVyZSBwcm9wZXJ0aWVzICovCisJaWYgKHNlNDAxLT5mcmFtZWNvdW50PT0wKQorCQlzZTQwMV9zZW5kX3BpY3Qoc2U0MDEpOworCS8qIENhbGlicmF0ZSB0aGUgcmVzZXQgbGV2ZWwgYWZ0ZXIgYSBmZXcgZnJhbWVzLiAqLworCWlmIChzZTQwMS0+ZnJhbWVjb3VudCUyMD09MSkKKwkJc2U0MDFfYXV0b19yZXNldGxldmVsKHNlNDAxKTsKKworCXJldD1zZTQwMV9uZXdmcmFtZShzZTQwMSwgMCk7CisKKwlzZTQwMS0+ZnJhbWVbMF0uZ3JhYnN0YXRlPUZSQU1FX1VOVVNFRDsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwkKKwlpZiAoY29weV90b191c2VyKGJ1Ziwgc2U0MDEtPmZyYW1lWzBdLmRhdGEsIHJlYWxjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIHJlYWxjb3VudDsKK30KKworc3RhdGljIGludCBzZTQwMV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEgPSAoc3RydWN0IHVzYl9zZTQwMSAqKWRldjsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gdm1hLT52bV9zdGFydDsKKwl1bnNpZ25lZCBsb25nIHNpemUgID0gdm1hLT52bV9lbmQtdm1hLT52bV9zdGFydDsKKwl1bnNpZ25lZCBsb25nIHBhZ2UsIHBvczsKKworCWRvd24oJnNlNDAxLT5sb2NrKTsKKworCWlmIChzZTQwMS0+ZGV2ID09IE5VTEwpIHsKKwkJdXAoJnNlNDAxLT5sb2NrKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmIChzaXplID4gKCgoU0U0MDFfTlVNRlJBTUVTICogc2U0MDEtPm1heGZyYW1lc2l6ZSkgKyBQQUdFX1NJWkUgLSAxKSAmIH4oUEFHRV9TSVpFIC0gMSkpKSB7CisJCXVwKCZzZTQwMS0+bG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlwb3MgPSAodW5zaWduZWQgbG9uZylzZTQwMS0+ZmJ1ZjsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJcGFnZSA9IHZtYWxsb2NfdG9fcGZuKCh2b2lkICopcG9zKTsKKwkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwYWdlLCBQQUdFX1NJWkUsIFBBR0VfU0hBUkVEKSkgeworCQkJdXAoJnNlNDAxLT5sb2NrKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJCXN0YXJ0ICs9IFBBR0VfU0laRTsKKwkJcG9zICs9IFBBR0VfU0laRTsKKwkJaWYgKHNpemUgPiBQQUdFX1NJWkUpCisJCQlzaXplIC09IFBBR0VfU0laRTsKKwkJZWxzZQorCQkJc2l6ZSA9IDA7CisJfQorCXVwKCZzZTQwMS0+bG9jayk7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNlNDAxX2ZvcHMgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisgICAgICAgIC5vcGVuID0gICAgICAgICBzZTQwMV9vcGVuLAorICAgICAgICAucmVsZWFzZSA9ICAgICAgc2U0MDFfY2xvc2UsCisgICAgICAgIC5yZWFkID0gICAgICAgICBzZTQwMV9yZWFkLAorICAgICAgICAubW1hcCA9ICAgICAgICAgc2U0MDFfbW1hcCwKKwkuaW9jdGwgPSAgICAgICAgc2U0MDFfaW9jdGwsCisJLmxsc2VlayA9ICAgICAgIG5vX2xsc2VlaywKK307CitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBzZTQwMV90ZW1wbGF0ZSA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKyAgICAgICAgLm5hbWUgPSAgICAgICAgICJzZTQwMSBVU0IgY2FtZXJhIiwKKyAgICAgICAgLnR5cGUgPSAgICAgICAgIFZJRF9UWVBFX0NBUFRVUkUsCisgICAgICAgIC5oYXJkd2FyZSA9ICAgICBWSURfSEFSRFdBUkVfU0U0MDEsCisJLmZvcHMgPSAgICAgICAgICZzZTQwMV9mb3BzLAorfTsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHNlNDAxX2luaXQoc3RydWN0IHVzYl9zZTQwMSAqc2U0MDEsIGludCBidXR0b24pCit7CisgICAgICAgIGludCBpPTAsIHJjOworICAgICAgICB1bnNpZ25lZCBjaGFyIGNwWzB4NDBdOworCWNoYXIgdGVtcFsyMDBdOworCisJLyogbGVkIG9uICovCisgICAgICAgIHNlNDAxX3NuZGN0cmwoMSwgc2U0MDEsIFNFNDAxX1JFUV9MRURfQ09OVFJPTCwgMSwgTlVMTCwgMCk7CisKKwkvKiBnZXQgY2FtZXJhIGRlc2NyaXB0b3IgKi8KKwlyYz1zZTQwMV9zbmRjdHJsKDAsIHNlNDAxLCBTRTQwMV9SRVFfR0VUX0NBTUVSQV9ERVNDUklQVE9SLCAwLCBjcCwgc2l6ZW9mKGNwKSk7CisJaWYgKGNwWzFdIT0weDQxKSB7CisJCWVycigiV3JvbmcgZGVzY3JpcHRvciB0eXBlIik7CisJCXJldHVybiAxOworCX0KKwlzcHJpbnRmICh0ZW1wLCAiRXh0cmFGZWF0dXJlczogJWQiLCBjcFszXSk7CisKKwlzZTQwMS0+c2l6ZXM9Y3BbNF0rY3BbNV0qMjU2OworCXNlNDAxLT53aWR0aD1rbWFsbG9jKHNlNDAxLT5zaXplcypzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZTQwMS0+d2lkdGgpCisJCXJldHVybiAxOworCXNlNDAxLT5oZWlnaHQ9a21hbGxvYyhzZTQwMS0+c2l6ZXMqc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOworCWlmICghc2U0MDEtPmhlaWdodCkgeworCQlrZnJlZShzZTQwMS0+d2lkdGgpOworCQlyZXR1cm4gMTsKKwl9CisJZm9yIChpPTA7IGk8c2U0MDEtPnNpemVzOyBpKyspIHsKKwkJICAgIHNlNDAxLT53aWR0aFtpXT1jcFs2K2kqNCswXStjcFs2K2kqNCsxXSoyNTY7CisJCSAgICBzZTQwMS0+aGVpZ2h0W2ldPWNwWzYraSo0KzJdK2NwWzYraSo0KzNdKjI1NjsKKwl9CisJc3ByaW50ZiAodGVtcCwgIiVzIFNpemVzOiIsIHRlbXApOworCWZvciAoaT0wOyBpPHNlNDAxLT5zaXplczsgaSsrKSB7CisJCXNwcmludGYodGVtcCwgIiVzICVkeCVkIiwgdGVtcCwgc2U0MDEtPndpZHRoW2ldLCBzZTQwMS0+aGVpZ2h0W2ldKTsKKwl9CisJaW5mbygiJXMiLCB0ZW1wKTsKKwlzZTQwMS0+bWF4ZnJhbWVzaXplPXNlNDAxLT53aWR0aFtzZTQwMS0+c2l6ZXMtMV0qc2U0MDEtPmhlaWdodFtzZTQwMS0+c2l6ZXMtMV0qMzsKKworCXJjPXNlNDAxX3NuZGN0cmwoMCwgc2U0MDEsIFNFNDAxX1JFUV9HRVRfV0lEVEgsIDAsIGNwLCBzaXplb2YoY3ApKTsKKwlzZTQwMS0+Y3dpZHRoPWNwWzBdK2NwWzFdKjI1NjsKKwlyYz1zZTQwMV9zbmRjdHJsKDAsIHNlNDAxLCBTRTQwMV9SRVFfR0VUX0hFSUdIVCwgMCwgY3AsIHNpemVvZihjcCkpOworCXNlNDAxLT5jaGVpZ2h0PWNwWzBdK2NwWzFdKjI1NjsKKworCWlmICghY3BbMl0gJiYgU0U0MDFfRk9STUFUX0JBWUVSKSB7CisJCWVycigiQmF5ZXIgZm9ybWF0IG5vdCBzdXBwb3J0ZWQhIik7CisJCXJldHVybiAxOworCX0KKwkvKiBzZXQgb3V0cHV0IG1vZGUgKEJBWUVSKSAqLworICAgICAgICBzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfU0VUX09VVFBVVF9NT0RFLCBTRTQwMV9GT1JNQVRfQkFZRVIsIE5VTEwsIDApOworCisJcmM9c2U0MDFfc25kY3RybCgwLCBzZTQwMSwgU0U0MDFfUkVRX0dFVF9CUlQsIDAsIGNwLCBzaXplb2YoY3ApKTsKKwlzZTQwMS0+YnJpZ2h0bmVzcz1jcFswXStjcFsxXSoyNTY7CisJLyogc29tZSBkZWZhdWx0IHZhbHVlcyAqLworCXNlNDAxLT5yZXNldGxldmVsPTB4MmQ7CisJc2U0MDEtPnJnYWluPTB4MjA7CisJc2U0MDEtPmdnYWluPTB4MjA7CisJc2U0MDEtPmJnYWluPTB4MjA7CisJc2U0MDFfc2V0X2V4cG9zdXJlKHNlNDAxLCAyMDAwMCk7CisJc2U0MDEtPnBhbGV0dGU9VklERU9fUEFMRVRURV9SR0IyNDsKKwlzZTQwMS0+ZW5oYW5jZT0xOworCXNlNDAxLT5kcm9wcGVkPTA7CisJc2U0MDEtPmVycm9yPTA7CisJc2U0MDEtPmZyYW1lY291bnQ9MDsKKwlzZTQwMS0+cmVhZGNvdW50PTA7CisKKwkvKiBTdGFydCBpbnRlcnJ1cHQgdHJhbnNmZXJzIGZvciBzbmFwc2hvdCBidXR0b24gKi8KKwlpZiAoYnV0dG9uKSB7CisJCXNlNDAxLT5pbnR1cmI9dXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzZTQwMS0+aW50dXJiKSB7CisJCQlpbmZvKCJBbGxvY2F0aW9uIG9mIGludHVyYiBmYWlsZWQiKTsKKwkJCXJldHVybiAxOworCQl9CisJCXVzYl9maWxsX2ludF91cmIoc2U0MDEtPmludHVyYiwgc2U0MDEtPmRldiwKKwkJICAgIHVzYl9yY3ZpbnRwaXBlKHNlNDAxLT5kZXYsIFNFNDAxX0JVVFRPTl9FTkRQT0lOVCksCisJCSAgICAmc2U0MDEtPmJ1dHRvbiwgc2l6ZW9mKHNlNDAxLT5idXR0b24pLAorCQkgICAgc2U0MDFfYnV0dG9uX2lycSwKKwkJICAgIHNlNDAxLAorCQkgICAgOAorCQkpOworCQlpZiAodXNiX3N1Ym1pdF91cmIoc2U0MDEtPmludHVyYiwgR0ZQX0tFUk5FTCkpIHsKKwkJCWluZm8oImludCB1cmIgYnVybmVkIGRvd24iKTsKKwkJCXJldHVybiAxOworCQl9CisJfSBlbHNlCisJCXNlNDAxLT5pbnR1cmI9TlVMTDsKKworICAgICAgICAvKiBGbGFzaCB0aGUgbGVkICovCisgICAgICAgIHNlNDAxX3NuZGN0cmwoMSwgc2U0MDEsIFNFNDAxX1JFUV9DQU1FUkFfUE9XRVIsIDEsIE5VTEwsIDApOworICAgICAgICBzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfTEVEX0NPTlRST0wsIDEsIE5VTEwsIDApOworICAgICAgICBzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfQ0FNRVJBX1BPV0VSLCAwLCBOVUxMLCAwKTsKKwlzZTQwMV9zbmRjdHJsKDEsIHNlNDAxLCBTRTQwMV9SRVFfTEVEX0NPTlRST0wsIDAsIE5VTEwsIDApOworCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlNDAxX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKyAgICAgICAgc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqaW50ZXJmYWNlOworICAgICAgICBzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMTsKKyAgICAgICAgY2hhciAqY2FtZXJhX25hbWU9TlVMTDsKKwlpbnQgYnV0dG9uPTE7CisKKyAgICAgICAgLyogV2UgZG9uJ3QgaGFuZGxlIG11bHRpLWNvbmZpZyBjYW1lcmFzICovCisgICAgICAgIGlmIChkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisKKyAgICAgICAgaW50ZXJmYWNlID0gJmludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjOworCisgICAgICAgIC8qIElzIGl0IGFuIHNlNDAxPyAqLworICAgICAgICBpZiAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSAweDAzZTggJiYKKyAgICAgICAgICAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4MDAwNCkgeworICAgICAgICAgICAgICAgIGNhbWVyYV9uYW1lPSJFbmRwb2ludHMvQW94IFNFNDAxIjsKKyAgICAgICAgfSBlbHNlIGlmIChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IDB4MDQ3MSAmJgorICAgICAgICAgICAgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gMHgwMzBiKSB7CisgICAgICAgICAgICAgICAgY2FtZXJhX25hbWU9IlBoaWxpcHMgUENWQzY2NUsiOworICAgICAgICB9IGVsc2UgaWYgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gMHgwNDdkICYmCisJICAgIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4NTAwMSkgeworCQljYW1lcmFfbmFtZT0iS2Vuc2luZ3RvbiBWaWRlb0NBTSA2NzAxNCI7CisgICAgICAgIH0gZWxzZSBpZiAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSAweDA0N2QgJiYKKwkgICAgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gMHg1MDAyKSB7CisJCWNhbWVyYV9uYW1lPSJLZW5zaW5ndG9uIFZpZGVvQ0FNIDY3MDEoNS83KSI7CisgICAgICAgIH0gZWxzZSBpZiAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSAweDA0N2QgJiYKKwkgICAgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gMHg1MDAzKSB7CisJCWNhbWVyYV9uYW1lPSJLZW5zaW5ndG9uIFZpZGVvQ0FNIDY3MDE2IjsKKwkJYnV0dG9uPTA7CisJfSBlbHNlCisJCXJldHVybiAtRU5PREVWOworCisgICAgICAgIC8qIENoZWNraW5nIHZlbmRvci9wcm9kdWN0IHNob3VsZCBiZSBlbm91Z2gsIGJ1dCB3aGF0IHRoZSBoZWxsICovCisgICAgICAgIGlmIChpbnRlcmZhY2UtPmJJbnRlcmZhY2VDbGFzcyAhPSAweDAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgaWYgKGludGVyZmFjZS0+YkludGVyZmFjZVN1YkNsYXNzICE9IDB4MDApCisJCXJldHVybiAtRU5PREVWOworCisgICAgICAgIC8qIFdlIGZvdW5kIG9uZSAqLworICAgICAgICBpbmZvKCJTRTQwMSBjYW1lcmEgZm91bmQ6ICVzIiwgY2FtZXJhX25hbWUpOworCisgICAgICAgIGlmICgoc2U0MDEgPSBrbWFsbG9jKHNpemVvZigqc2U0MDEpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGVycigiY291bGRuJ3Qga21hbGxvYyBzZTQwMSBzdHJ1Y3QiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisgICAgICAgIH0KKworICAgICAgICBtZW1zZXQoc2U0MDEsIDAsIHNpemVvZigqc2U0MDEpKTsKKworICAgICAgICBzZTQwMS0+ZGV2ID0gZGV2OworICAgICAgICBzZTQwMS0+aWZhY2UgPSBpbnRlcmZhY2UtPmJJbnRlcmZhY2VOdW1iZXI7CisgICAgICAgIHNlNDAxLT5jYW1lcmFfbmFtZSA9IGNhbWVyYV9uYW1lOworCisJaW5mbygiZmlybXdhcmUgdmVyc2lvbjogJTAyeCIsIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpICYgMjU1KTsKKworICAgICAgICBpZiAoc2U0MDFfaW5pdChzZTQwMSwgYnV0dG9uKSkgeworCQlrZnJlZShzZTQwMSk7CisJCXJldHVybiAtRUlPOworCX0KKworCW1lbWNweSgmc2U0MDEtPnZkZXYsICZzZTQwMV90ZW1wbGF0ZSwgc2l6ZW9mKHNlNDAxX3RlbXBsYXRlKSk7CisJbWVtY3B5KHNlNDAxLT52ZGV2Lm5hbWUsIHNlNDAxLT5jYW1lcmFfbmFtZSwgc3RybGVuKHNlNDAxLT5jYW1lcmFfbmFtZSkpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNlNDAxLT53cSk7CisJaW5pdF9NVVRFWCgmc2U0MDEtPmxvY2spOworCXdtYigpOworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmc2U0MDEtPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKSA9PSAtMSkgeworCQlrZnJlZShzZTQwMSk7CisJCWVycigidmlkZW9fcmVnaXN0ZXJfZGV2aWNlIGZhaWxlZCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJaW5mbygicmVnaXN0ZXJlZCBuZXcgdmlkZW8gZGV2aWNlOiB2aWRlbyVkIiwgc2U0MDEtPnZkZXYubWlub3IpOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50Ziwgc2U0MDEpOworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2U0MDFfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX3NlNDAxICpzZTQwMSA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisJaWYgKHNlNDAxKSB7CisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZzZTQwMS0+dmRldik7CisJCWlmICghc2U0MDEtPnVzZXIpeworCQkJdXNiX3NlNDAxX3JlbW92ZV9kaXNjb25uZWN0ZWQoc2U0MDEpOworCQl9IGVsc2UgeworCQkJc2U0MDEtPmZyYW1lWzBdLmdyYWJzdGF0ZSA9IEZSQU1FX0VSUk9SOworCQkJc2U0MDEtPmZyYW1lWzBdLmdyYWJzdGF0ZSA9IEZSQU1FX0VSUk9SOworCisJCQlzZTQwMS0+c3RyZWFtaW5nID0gMDsKKworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzZTQwMS0+d3EpOworCQkJc2U0MDEtPnJlbW92ZWQgPSAxOworCQl9CisJfQorfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2U0MDFfZHJpdmVyID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKyAgICAgICAgLm5hbWUJCT0gInNlNDAxIiwKKyAgICAgICAgLmlkX3RhYmxlCT0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZQkJPSBzZTQwMV9wcm9iZSwKKyAgICAgICAgLmRpc2Nvbm5lY3QJPSBzZTQwMV9kaXNjb25uZWN0LAorfTsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIE1vZHVsZSByb3V0aW5lcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9zZTQwMV9pbml0KHZvaWQpCit7CisJaW5mbygiU0U0MDEgdXNiIGNhbWVyYSBkcml2ZXIgdmVyc2lvbiAlcyByZWdpc3RlcmluZyIsIHZlcnNpb24pOworCWlmIChmbGlja2VybGVzcykKKwkJaWYgKGZsaWNrZXJsZXNzIT01MCAmJiBmbGlja2VybGVzcyE9NjApIHsKKwkJCWluZm8oIkludmFsbGlkIGZsaWNrZXJsZXNzIHZhbHVlLCB1c2UgMCwgNTAgb3IgNjAuIik7CisJCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiB1c2JfcmVnaXN0ZXIoJnNlNDAxX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2Jfc2U0MDFfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZTQwMV9kcml2ZXIpOworCWluZm8oIlNFNDAxIGRyaXZlciBkZXJlZ2lzdGVyZWQiKTsKK30KKworbW9kdWxlX2luaXQodXNiX3NlNDAxX2luaXQpOworbW9kdWxlX2V4aXQodXNiX3NlNDAxX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvc2U0MDEuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3NlNDAxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU1ODQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3NlNDAxLmgKQEAgLTAsMCArMSwyMzMgQEAKKworI2lmbmRlZiBfX0xJTlVYX3NlNDAxX0gKKyNkZWZpbmUgX19MSU5VWF9zZTQwMV9ICisKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKworI2RlZmluZSBzZTQwMV9ERUJVRwkvKiBUdXJuIG9uIGRlYnVnIG1lc3NhZ2VzICovCisKKyNpZmRlZiBzZTQwMV9ERUJVRworIyAgZGVmaW5lIFBERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCitpZiAoZGVidWcgPj0gbGV2ZWwpIGluZm8oIlsiIF9fUFJFVFRZX0ZVTkNUSU9OX18gIjolZF0gIiBmbXQsIF9fTElORV9fICwgIyMgYXJncykKKyNlbHNlCisjICBkZWZpbmUgUERFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlKDApCisjZW5kaWYKKworLyogQW4gYWxtb3N0IGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHNsZWVwX29uX2ludGVycnVwdGlibGUgKi8KKyNkZWZpbmUgd2FpdF9pbnRlcnJ1cHRpYmxlKHRlc3QsIHF1ZXVlLCB3YWl0KSBcCit7IFwKKwlhZGRfd2FpdF9xdWV1ZShxdWV1ZSwgd2FpdCk7IFwKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOyBcCisJaWYgKHRlc3QpIFwKKwkJc2NoZWR1bGUoKTsgXAorCXJlbW92ZV93YWl0X3F1ZXVlKHF1ZXVlLCB3YWl0KTsgXAorCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7IFwKKwlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIFwKKwkJYnJlYWs7IFwKK30KKworI2RlZmluZSBTRTQwMV9SRVFfR0VUX0NBTUVSQV9ERVNDUklQVE9SCQkweDA2CisjZGVmaW5lIFNFNDAxX1JFUV9TVEFSVF9DT05USU5VT1VTX0NBUFRVUkUJMHg0MQorI2RlZmluZSBTRTQwMV9SRVFfU1RPUF9DT05USU5VT1VTX0NBUFRVUkUJMHg0MgorI2RlZmluZSBTRTQwMV9SRVFfQ0FQVFVSRV9GUkFNRQkJCTB4NDMKKyNkZWZpbmUgU0U0MDFfUkVRX0dFVF9CUlQJCQkweDQ0CisjZGVmaW5lIFNFNDAxX1JFUV9TRVRfQlJUCQkJMHg0NQorI2RlZmluZSBTRTQwMV9SRVFfR0VUX1dJRFRICQkJMHg0YworI2RlZmluZSBTRTQwMV9SRVFfU0VUX1dJRFRICQkJMHg0ZAorI2RlZmluZSBTRTQwMV9SRVFfR0VUX0hFSUdIVAkJCTB4NGUKKyNkZWZpbmUgU0U0MDFfUkVRX1NFVF9IRUlHSFQJCQkweDRmCisjZGVmaW5lIFNFNDAxX1JFUV9HRVRfT1VUUFVUX01PREUJCTB4NTAKKyNkZWZpbmUgU0U0MDFfUkVRX1NFVF9PVVRQVVRfTU9ERQkJMHg1MQorI2RlZmluZSBTRTQwMV9SRVFfR0VUX0VYVF9GRUFUVVJFCQkweDUyCisjZGVmaW5lIFNFNDAxX1JFUV9TRVRfRVhUX0ZFQVRVUkUJCTB4NTMKKyNkZWZpbmUgU0U0MDFfUkVRX0NBTUVSQV9QT1dFUgkJCTB4NTYKKyNkZWZpbmUgU0U0MDFfUkVRX0xFRF9DT05UUk9MCQkJMHg1NworI2RlZmluZSBTRTQwMV9SRVFfQklPUwkJCQkweGZmCisKKyNkZWZpbmUgU0U0MDFfQklPU19SRUFECQkJCTB4MDcKKworI2RlZmluZSBTRTQwMV9GT1JNQVRfQkFZRVIJMHg0MAorCisvKiBIeXVuZGFpIGh2NzEzMWIgcmVnaXN0ZXJzCisgICA3MTIxIGFuZCA3MTQxIHNob3VsZCBiZSB0aGUgc2FtZSAoaGF2ZW4ndCByZWFsbHkgY2hlY2tlZC4uLikgKi8KKy8qIE1vZGUgcmVnaXN0ZXJzOiAqLworI2RlZmluZSBIVjcxMzFfUkVHX01PREVfQQkJMHgwMAorI2RlZmluZSBIVjcxMzFfUkVHX01PREVfQgkJMHgwMQorI2RlZmluZSBIVjcxMzFfUkVHX01PREVfQwkJMHgwMgorLyogRnJhbWUgcmVnaXN0ZXJzOiAqLworI2RlZmluZSBIVjcxMzFfUkVHX0ZSU1UJCTB4MTAKKyNkZWZpbmUgSFY3MTMxX1JFR19GUlNMCQkweDExCisjZGVmaW5lIEhWNzEzMV9SRUdfRkNTVQkJMHgxMgorI2RlZmluZSBIVjcxMzFfUkVHX0ZDU0wJCTB4MTMKKyNkZWZpbmUgSFY3MTMxX1JFR19GV0hVCQkweDE0CisjZGVmaW5lIEhWNzEzMV9SRUdfRldITAkJMHgxNQorI2RlZmluZSBIVjcxMzFfUkVHX0ZXV1UJCTB4MTYKKyNkZWZpbmUgSFY3MTMxX1JFR19GV1dMCQkweDE3CisvKiBUaW1pbmcgcmVnaXN0ZXJzOiAqLworI2RlZmluZSBIVjcxMzFfUkVHX1RIQlUJCTB4MjAKKyNkZWZpbmUgSFY3MTMxX1JFR19USEJMCQkweDIxCisjZGVmaW5lIEhWNzEzMV9SRUdfVFZCVQkJMHgyMgorI2RlZmluZSBIVjcxMzFfUkVHX1RWQkwJCTB4MjMKKyNkZWZpbmUgSFY3MTMxX1JFR19USVRVCQkweDI1CisjZGVmaW5lIEhWNzEzMV9SRUdfVElUTQkJMHgyNgorI2RlZmluZSBIVjcxMzFfUkVHX1RJVEwJCTB4MjcKKyNkZWZpbmUgSFY3MTMxX1JFR19UTUNECQkweDI4CisvKiBBZGp1c3QgUmVnaXN0ZXJzOiAqLworI2RlZmluZSBIVjcxMzFfUkVHX0FSTFYJCTB4MzAKKyNkZWZpbmUgSFY3MTMxX1JFR19BUkNHCQkweDMxCisjZGVmaW5lIEhWNzEzMV9SRUdfQUdDRwkJMHgzMgorI2RlZmluZSBIVjcxMzFfUkVHX0FCQ0cJCTB4MzMKKyNkZWZpbmUgSFY3MTMxX1JFR19BUEJWCQkweDM0CisjZGVmaW5lIEhWNzEzMV9SRUdfQVNMUAkJMHg1NAorLyogT2Zmc2V0IFJlZ2lzdGVyczogKi8KKyNkZWZpbmUgSFY3MTMxX1JFR19PRlNSCQkweDUwCisjZGVmaW5lIEhWNzEzMV9SRUdfT0ZTRwkJMHg1MQorI2RlZmluZSBIVjcxMzFfUkVHX09GU0IJCTB4NTIKKy8qIFJFc2V0IGxldmVsIHN0YXRpc3RpY3MgcmVnaXN0ZXJzOiAqLworI2RlZmluZSBIVjcxMzFfUkVHX0xPUkVGTk9ICTB4NTcKKyNkZWZpbmUgSFY3MTMxX1JFR19MT1JFRk5PTAkweDU4CisjZGVmaW5lIEhWNzEzMV9SRUdfSElSRUZOT0gJMHg1OQorI2RlZmluZSBIVjcxMzFfUkVHX0hJUkVGTk9MCTB4NWEKKworLyogc2U0MDEgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNFNDAxX09QRVJBVElOR01PREUJMHgyMDAwCisKKworLyogc2l6ZSBvZiB1c2IgdHJhbnNmZXJzICovCisjZGVmaW5lIFNFNDAxX1BBQ0tFVFNJWkUJNDA5NgorLyogbnVtYmVyIG9mIHF1ZXVlZCBidWxrIHRyYW5zZmVycyB0byB1c2UsIHNob3VsZCBiZSBhYm91dCA4ICovCisjZGVmaW5lIFNFNDAxX05VTVNCVUYJCTEKKy8qIHJlYWQgdGhlIHVzYiBzcGVjcyBmb3IgdGhpcyBvbmUgOikgKi8KKyNkZWZpbmUgU0U0MDFfVklERU9fRU5EUE9JTlQJMQorI2RlZmluZSBTRTQwMV9CVVRUT05fRU5EUE9JTlQJMgorLyogbnVtYmVyIG9mIGZyYW1lcyBzdXBwb3J0ZWQgYnkgdGhlIHY0bCBwYXJ0ICovCisjZGVmaW5lIFNFNDAxX05VTUZSQU1FUwkJMgorLyogc2NyYXRjaCBidWZmZXJzIGZvciBwYXNzaW5nIGRhdGEgdG8gdGhlIGRlY29kZXJzICovCisjZGVmaW5lIFNFNDAxX05VTVNDUkFUQ0gJMzIKKy8qIG1heGltdW0gYW1vdW50IG9mIGRhdGEgaW4gYSBKYW5nR3UgcGFja2V0ICovCisjZGVmaW5lIFNFNDAxX1ZMQ0RBVEFMRU4JMTAyNAorLyogbnVtYmVyIG9mIG51bCBzaXplZCBwYWNrZXRzIHRvIHJlY2VpdmUgYmVmb3JlIGtpY2tpbmcgdGhlIGNhbWVyYSAqLworI2RlZmluZSBTRTQwMV9NQVhfTlVMTFBBQ0tFVFMJNDAwMAorLyogbnVtYmVyIG9mIGRlY29kaW5nIGVycm9ycyBiZWZvcmUga2lja2luZyB0aGUgY2FtZXJhICovCisjZGVmaW5lIFNFNDAxX01BWF9FUlJPUlMJMjAwCisKK3N0cnVjdCB1c2JfZGV2aWNlOworCitzdHJ1Y3Qgc2U0MDFfc2J1ZiB7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKK307CisKK2VudW0geworCUZSQU1FX1VOVVNFRCwJCS8qIFVudXNlZCAobm8gTUNBUFRVUkUpICovCisJRlJBTUVfUkVBRFksCQkvKiBSZWFkeSB0byBzdGFydCBncmFiYmluZyAqLworCUZSQU1FX0dSQUJCSU5HLAkJLyogSW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZ3JhYmJlZCBpbnRvICovCisJRlJBTUVfRE9ORSwJCS8qIEZpbmlzaGVkIGdyYWJiaW5nLCBidXQgbm90IGJlZW4gc3luY2VkIHlldCAqLworCUZSQU1FX0VSUk9SLAkJLyogU29tZXRoaW5nIGJhZCBoYXBwZW5lZCB3aGlsZSBwcm9jZXNzaW5nICovCit9OworCitlbnVtIHsKKwlGTVRfQkFZRVIsCisJRk1UX0pBTkdHVSwKK307CisKK2VudW0geworCUJVRkZFUl9VTlVTRUQsCisJQlVGRkVSX1JFQURZLAorCUJVRkZFUl9CVVNZLAorCUJVRkZFUl9ET05FLAorfTsKKworc3RydWN0IHNlNDAxX3NjcmF0Y2ggeworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisJdm9sYXRpbGUgaW50IHN0YXRlOworCWludCBvZmZzZXQ7CisJaW50IGxlbmd0aDsKK307CisKK3N0cnVjdCBzZTQwMV9mcmFtZSB7CisJdW5zaWduZWQgY2hhciAqZGF0YTsJCS8qIEZyYW1lIGJ1ZmZlciAqLworCisJdm9sYXRpbGUgaW50IGdyYWJzdGF0ZTsJLyogU3RhdGUgb2YgZ3JhYmJpbmcgKi8KKworCXVuc2lnbmVkIGNoYXIgKmN1cmxpbmU7CisJaW50IGN1cmxpbmVwaXg7CisJaW50IGN1cnBpeDsKK307CisKK3N0cnVjdCB1c2Jfc2U0MDEgeworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKKworCS8qIERldmljZSBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCisJdW5zaWduZWQgY2hhciBpZmFjZTsKKworCWNoYXIgKmNhbWVyYV9uYW1lOworCisJaW50IGNoYW5nZTsKKwlpbnQgYnJpZ2h0bmVzczsKKwlpbnQgaHVlOworCWludCByZ2FpbjsKKwlpbnQgZ2dhaW47CisJaW50IGJnYWluOworCWludCBleHBvc2VfaDsKKwlpbnQgZXhwb3NlX207CisJaW50IGV4cG9zZV9sOworCWludCByZXNldGxldmVsOworCQorCWludCBlbmhhbmNlOworCisJaW50IGZvcm1hdDsKKwlpbnQgc2l6ZXM7CisJaW50ICp3aWR0aDsKKwlpbnQgKmhlaWdodDsKKwlpbnQgY3dpZHRoOwkJLyogY3VycmVudCB3aWR0aCAqLworCWludCBjaGVpZ2h0OwkJLyogY3VycmVudCBoZWlnaHQgKi8KKwlpbnQgcGFsZXR0ZTsKKwlpbnQgbWF4ZnJhbWVzaXplOworCWludCBjZnJhbWVzaXplOwkJLyogY3VycmVudCBmcmFtZXNpemUgKi8KKworCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsKKwlpbnQgdXNlcjsJCS8qIHVzZXIgY291bnQgZm9yIGV4Y2x1c2l2ZSB1c2UgKi8KKwlpbnQgcmVtb3ZlZDsJCS8qIGRldmljZSBkaXNjb25uZWN0ZWQgKi8KKworCWludCBzdHJlYW1pbmc7CQkvKiBBcmUgd2Ugc3RyZWFtaW5nIHZpZGVvPyAqLworCisJY2hhciAqZmJ1ZjsJCS8qIFZpZGVvZGV2IGJ1ZmZlciBhcmVhICovCisKKwlzdHJ1Y3QgdXJiICp1cmJbU0U0MDFfTlVNU0JVRl07CisJc3RydWN0IHVyYiAqaW50dXJiOworCQorCWludCBidXR0b247CisJaW50IGJ1dHRvbnByZXNzZWQ7CisKKwlpbnQgY3VyZnJhbWU7CQkvKiBDdXJyZW50IHJlY2VpdmluZyBmcmFtZSAqLworCXN0cnVjdCBzZTQwMV9mcmFtZSBmcmFtZVtTRTQwMV9OVU1GUkFNRVNdOwkKKwlpbnQgcmVhZGNvdW50OworCWludCBmcmFtZWNvdW50OworCWludCBlcnJvcjsKKwlpbnQgZHJvcHBlZDsKKworCWludCBzY3JhdGNoX25leHQ7CisJaW50IHNjcmF0Y2hfdXNlOworCWludCBzY3JhdGNoX292ZXJmbG93OworCXN0cnVjdCBzZTQwMV9zY3JhdGNoIHNjcmF0Y2hbU0U0MDFfTlVNU0NSQVRDSF07CisKKwkvKiBEZWNvZGVyIHNwZWNpZmljIGRhdGE6ICovCisJdW5zaWduZWQgY2hhciB2bGNkYXRhW1NFNDAxX1ZMQ0RBVEFMRU5dOworCWludCB2bGNkYXRhcG9zOworCWludCBiYXllcm9mZnNldDsKKworCXN0cnVjdCBzZTQwMV9zYnVmIHNidWZbU0U0MDFfTlVNU0JVRl07CisKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsJLyogUHJvY2Vzc2VzIHdhaXRpbmcgKi8KKworCWludCBudWxscGFja2V0czsKK307CisKKworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMi5oIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOGE0YzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyLmgKQEAgLTAsMCArMSwyMDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFY0TDIgZHJpdmVyIGZvciBTTjlDMTB4IFBDIENhbWVyYSBDb250cm9sbGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICoKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1NOOUMxMDJfSF8KKyNkZWZpbmUgX1NOOUMxMDJfSF8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorCisjaW5jbHVkZSAic245YzEwMl9zZW5zb3IuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFNOOUMxMDJfREVCVUcKKyNkZWZpbmUgU045QzEwMl9ERUJVR19MRVZFTCAgICAgICAyCisjZGVmaW5lIFNOOUMxMDJfTUFYX0RFVklDRVMgICAgICAgNjQKKyNkZWZpbmUgU045QzEwMl9QUkVTRVJWRV9JTUdTQ0FMRSAwCisjZGVmaW5lIFNOOUMxMDJfRk9SQ0VfTVVOTUFQICAgICAgMAorI2RlZmluZSBTTjlDMTAyX01BWF9GUkFNRVMgICAgICAgIDMyCisjZGVmaW5lIFNOOUMxMDJfVVJCUyAgICAgICAgICAgICAgMgorI2RlZmluZSBTTjlDMTAyX0lTT19QQUNLRVRTICAgICAgIDcKKyNkZWZpbmUgU045QzEwMl9BTFRFUk5BVEVfU0VUVElORyA4CisjZGVmaW5lIFNOOUMxMDJfVVJCX1RJTUVPVVQgICAgICAgbXNlY3NfdG9famlmZmllcygyICogU045QzEwMl9JU09fUEFDS0VUUykKKyNkZWZpbmUgU045QzEwMl9DVFJMX1RJTUVPVVQgICAgICAzMDAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFNOOUMxMDJfTU9EVUxFX05BTUUgICAgICJWNEwyIGRyaXZlciBmb3IgU045QzEweCBQQyBDYW1lcmEgQ29udHJvbGxlcnMiCisjZGVmaW5lIFNOOUMxMDJfTU9EVUxFX0FVVEhPUiAgICIoQykgMjAwNC0yMDA1IEx1Y2EgUmlzb2xpYSIKKyNkZWZpbmUgU045QzEwMl9BVVRIT1JfRU1BSUwgICAgIjxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiIKKyNkZWZpbmUgU045QzEwMl9NT0RVTEVfTElDRU5TRSAgIkdQTCIKKyNkZWZpbmUgU045QzEwMl9NT0RVTEVfVkVSU0lPTiAgIjE6MS4yNCIKKyNkZWZpbmUgU045QzEwMl9NT0RVTEVfVkVSU0lPTl9DT0RFICBLRVJORUxfVkVSU0lPTigxLCAwLCAyNCkKKworZW51bSBzbjljMTAyX2JyaWRnZSB7CisJQlJJREdFX1NOOUMxMDEgPSAweDAxLAorCUJSSURHRV9TTjlDMTAyID0gMHgwMiwKKwlCUklER0VfU045QzEwMyA9IDB4MDQsCit9OworCitTTjlDMTAyX0lEX1RBQkxFCitTTjlDMTAyX1NFTlNPUl9UQUJMRQorCitlbnVtIHNuOWMxMDJfZnJhbWVfc3RhdGUgeworCUZfVU5VU0VELAorCUZfUVVFVUVELAorCUZfR1JBQkJJTkcsCisJRl9ET05FLAorCUZfRVJST1IsCit9OworCitzdHJ1Y3Qgc245YzEwMl9mcmFtZV90IHsKKwl2b2lkKiBidWZtZW07CisJc3RydWN0IHY0bDJfYnVmZmVyIGJ1ZjsKKwllbnVtIHNuOWMxMDJfZnJhbWVfc3RhdGUgc3RhdGU7CisJc3RydWN0IGxpc3RfaGVhZCBmcmFtZTsKKwl1bnNpZ25lZCBsb25nIHZtYV91c2VfY291bnQ7Cit9OworCitlbnVtIHNuOWMxMDJfZGV2X3N0YXRlIHsKKwlERVZfSU5JVElBTElaRUQgPSAweDAxLAorCURFVl9ESVNDT05ORUNURUQgPSAweDAyLAorCURFVl9NSVNDT05GSUdVUkVEID0gMHgwNCwKK307CisKK2VudW0gc245YzEwMl9pb19tZXRob2QgeworCUlPX05PTkUsCisJSU9fUkVBRCwKKwlJT19NTUFQLAorfTsKKworZW51bSBzbjljMTAyX3N0cmVhbV9zdGF0ZSB7CisJU1RSRUFNX09GRiwKKwlTVFJFQU1fSU5URVJSVVBULAorCVNUUkVBTV9PTiwKK307CisKK3R5cGVkZWYgY2hhciBzbjljMTAyX3NvZl9oZWFkZXJfdFsxMl07Cit0eXBlZGVmIGNoYXIgc245YzEwMl9lb2ZfaGVhZGVyX3RbNF07CisKK3N0cnVjdCBzbjljMTAyX3N5c2ZzX2F0dHIgeworCXU4IHJlZywgaTJjX3JlZzsKKwlzbjljMTAyX3NvZl9oZWFkZXJfdCBmcmFtZV9oZWFkZXI7Cit9OworCitzdHJ1Y3Qgc245YzEwMl9tb2R1bGVfcGFyYW0geworCXU4IGZvcmNlX211bm1hcDsKK307CisKK3N0YXRpYyBERUNMQVJFX01VVEVYKHNuOWMxMDJfc3lzZnNfbG9jayk7CitzdGF0aWMgREVDTEFSRV9SV1NFTShzbjljMTAyX2Rpc2Nvbm5lY3QpOworCitzdHJ1Y3Qgc245YzEwMl9kZXZpY2UgeworCXN0cnVjdCBkZXZpY2UgZGV2OworCisJc3RydWN0IHZpZGVvX2RldmljZSogdjRsZGV2OworCisJZW51bSBzbjljMTAyX2JyaWRnZSBicmlkZ2U7CisJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzZW5zb3I7CisKKwlzdHJ1Y3QgdXNiX2RldmljZSogdXNiZGV2OworCXN0cnVjdCB1cmIqIHVyYltTTjlDMTAyX1VSQlNdOworCXZvaWQqIHRyYW5zZmVyX2J1ZmZlcltTTjlDMTAyX1VSQlNdOworCXU4KiBjb250cm9sX2J1ZmZlcjsKKworCXN0cnVjdCBzbjljMTAyX2ZyYW1lX3QgKmZyYW1lX2N1cnJlbnQsIGZyYW1lW1NOOUMxMDJfTUFYX0ZSQU1FU107CisJc3RydWN0IGxpc3RfaGVhZCBpbnF1ZXVlLCBvdXRxdWV1ZTsKKwl1MzIgZnJhbWVfY291bnQsIG5idWZmZXJzLCBucmVhZGJ1ZmZlcnM7CisKKwllbnVtIHNuOWMxMDJfaW9fbWV0aG9kIGlvOworCWVudW0gc245YzEwMl9zdHJlYW1fc3RhdGUgc3RyZWFtOworCisJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uIGNvbXByZXNzaW9uOworCisJc3RydWN0IHNuOWMxMDJfc3lzZnNfYXR0ciBzeXNmczsKKwlzbjljMTAyX3NvZl9oZWFkZXJfdCBzb2ZfaGVhZGVyOworCXUxNiByZWdbMzJdOworCisJc3RydWN0IHNuOWMxMDJfbW9kdWxlX3BhcmFtIG1vZHVsZV9wYXJhbTsKKworCWVudW0gc245YzEwMl9kZXZfc3RhdGUgc3RhdGU7CisJdTggdXNlcnM7CisKKwlzdHJ1Y3Qgc2VtYXBob3JlIGRldl9zZW0sIGZpbGVvcF9zZW07CisJc3BpbmxvY2tfdCBxdWV1ZV9sb2NrOworCXdhaXRfcXVldWVfaGVhZF90IG9wZW4sIHdhaXRfZnJhbWUsIHdhaXRfc3RyZWFtOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkCitzbjljMTAyX2F0dGFjaF9zZW5zb3Ioc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzZW5zb3IpCit7CisJY2FtLT5zZW5zb3IgPSBzZW5zb3I7CisJY2FtLT5zZW5zb3ItPmRldiA9ICZjYW0tPmRldjsKKwljYW0tPnNlbnNvci0+dXNiZGV2ID0gY2FtLT51c2JkZXY7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI3VuZGVmIERCRworI3VuZGVmIEtEQkcKKyNpZmRlZiBTTjlDMTAyX0RFQlVHCisjCWRlZmluZSBEQkcobGV2ZWwsIGZtdCwgYXJncy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKGRlYnVnID49IChsZXZlbCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKChsZXZlbCkgPT0gMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlkZXZfZXJyKCZjYW0tPmRldiwgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICAgICAgICAgICBcCisJCWVsc2UgaWYgKChsZXZlbCkgPT0gMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJZGV2X2luZm8oJmNhbS0+ZGV2LCBmbXQgIlxuIiwgIyMgYXJncyk7ICAgICAgICAgICAgICAgXAorCQllbHNlIGlmICgobGV2ZWwpID49IDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCWRldl9pbmZvKCZjYW0tPmRldiwgIlslczolZF0gIiBmbXQgIlxuIiwgICAgICAgICAgICAgIFwKKwkJCSAgICAgICAgIF9fRlVOQ1RJT05fXywgX19MSU5FX18gLCAjIyBhcmdzKTsgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorIwlkZWZpbmUgS0RCRyhsZXZlbCwgZm10LCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChkZWJ1ZyA+PSAobGV2ZWwpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmICgobGV2ZWwpID09IDEgfHwgKGxldmVsKSA9PSAyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJcHJfaW5mbygic245YzEwMjogIiBmbXQgIlxuIiwgIyMgYXJncyk7ICAgICAgICAgICAgICAgXAorCQllbHNlIGlmICgobGV2ZWwpID09IDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXByX2RlYnVnKCJzbjljMTAyOiBbJXM6JWRdICIgZm10ICJcbiIsIF9fRlVOQ1RJT05fXywgIFwKKwkJCSAgICAgICAgIF9fTElORV9fICwgIyMgYXJncyk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorI2Vsc2UKKyMJZGVmaW5lIEtEQkcobGV2ZWwsIGZtdCwgYXJncy4uLikgZG8gezt9IHdoaWxlKDApOworIwlkZWZpbmUgREJHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIGRvIHs7fSB3aGlsZSgwKTsKKyNlbmRpZgorCisjdW5kZWYgUERCRworI2RlZmluZSBQREJHKGZtdCwgYXJncy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZGV2X2luZm8oJmNhbS0+ZGV2LCAiWyVzOiVkXSAiIGZtdCAiXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fICwgIyMgYXJncyk7CisKKyN1bmRlZiBQREJHRworI2RlZmluZSBQREJHRyhmbXQsIGFyZ3MuLi4pIGRvIHs7fSB3aGlsZSgwKTsgLyogcGxhY2Vob2xkZXIgKi8KKworI2VuZGlmIC8qIF9TTjlDMTAyX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX2NvcmUuYyBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ODQwMWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX2NvcmUuYwpAQCAtMCwwICsxLDI3NDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFY0TDIgZHJpdmVyIGZvciBTTjlDMTB4IFBDIENhbWVyYSBDb250cm9sbGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICoKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlLWZsYWdzLmg+CisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJzbjljMTAyLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHNuOWMxMDJfaWRfdGFibGUpOworCitNT0RVTEVfQVVUSE9SKFNOOUMxMDJfTU9EVUxFX0FVVEhPUiAiICIgU045QzEwMl9BVVRIT1JfRU1BSUwpOworTU9EVUxFX0RFU0NSSVBUSU9OKFNOOUMxMDJfTU9EVUxFX05BTUUpOworTU9EVUxFX1ZFUlNJT04oU045QzEwMl9NT0RVTEVfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRShTTjlDMTAyX01PRFVMRV9MSUNFTlNFKTsKKworc3RhdGljIHNob3J0IHZpZGVvX25yW10gPSB7WzAgLi4uIFNOOUMxMDJfTUFYX0RFVklDRVMtMV0gPSAtMX07Cittb2R1bGVfcGFyYW1fYXJyYXkodmlkZW9fbnIsIHNob3J0LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModmlkZW9fbnIsCisgICAgICAgICAgICAgICAgICJcbjwtMXxuWywuLi5dPiBTcGVjaWZ5IFY0TDIgbWlub3IgbW9kZSBudW1iZXIuIgorICAgICAgICAgICAgICAgICAiXG4gLTEgPSB1c2UgbmV4dCBhdmFpbGFibGUgKGRlZmF1bHQpIgorICAgICAgICAgICAgICAgICAiXG4gIG4gPSB1c2UgbWlub3IgbnVtYmVyIG4gKGludGVnZXIgPj0gMCkiCisgICAgICAgICAgICAgICAgICJcbllvdSBjYW4gc3BlY2lmeSB1cCB0byAiX19NT0RVTEVfU1RSSU5HKFNOOUMxMDJfTUFYX0RFVklDRVMpCisgICAgICAgICAgICAgICAgICIgY2FtZXJhcyB0aGlzIHdheS4iCisgICAgICAgICAgICAgICAgICJcbkZvciBleGFtcGxlOiIKKyAgICAgICAgICAgICAgICAgIlxudmlkZW9fbnI9LTEsMiwtMSB3b3VsZCBhc3NpZ24gbWlub3IgbnVtYmVyIDIgdG8iCisgICAgICAgICAgICAgICAgICJcbnRoZSBzZWNvbmQgY2FtZXJhIGFuZCB1c2UgYXV0byBmb3IgdGhlIGZpcnN0IgorICAgICAgICAgICAgICAgICAiXG5vbmUgYW5kIGZvciBldmVyeSBvdGhlciBjYW1lcmEuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKKworc3RhdGljIHNob3J0IGZvcmNlX211bm1hcFtdID0ge1swIC4uLiBTTjlDMTAyX01BWF9ERVZJQ0VTLTFdID0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU045QzEwMl9GT1JDRV9NVU5NQVB9OworbW9kdWxlX3BhcmFtX2FycmF5KGZvcmNlX211bm1hcCwgYm9vbCwgTlVMTCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZvcmNlX211bm1hcCwKKyAgICAgICAgICAgICAgICAgIlxuPDB8MVssLi4uXT4gRm9yY2UgdGhlIGFwcGxpY2F0aW9uIHRvIHVubWFwIHByZXZpb3VzbHkgIgorICAgICAgICAgICAgICAgICAiXG5tYXBwZWQgYnVmZmVyIG1lbW9yeSBiZWZvcmUgY2FsbGluZyBhbnkgVklESU9DX1NfQ1JPUCBvciAiCisgICAgICAgICAgICAgICAgICJcblZJRElPQ19TX0ZNVCBpb2N0bCdzLiBOb3QgYWxsIHRoZSBhcHBsaWNhdGlvbnMgc3VwcG9ydCAiCisgICAgICAgICAgICAgICAgICJcbnRoaXMgZmVhdHVyZS4gVGhpcyBwYXJhbWV0ZXIgaXMgc3BlY2lmaWMgZm9yIGVhY2ggIgorICAgICAgICAgICAgICAgICAiXG5kZXRlY3RlZCBjYW1lcmEuIgorICAgICAgICAgICAgICAgICAiXG4gMCA9IGRvIG5vdCBmb3JjZSBtZW1vcnkgdW5tYXBwaW5nIgorICAgICAgICAgICAgICAgICAiXG4gMSA9IGZvcmNlIG1lbW9yeSB1bm1hcHBpbmcgKHNhdmUgbWVtb3J5KSIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFNOOUMxMDJfRk9SQ0VfTVVOTUFQKSIuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKKworI2lmZGVmIFNOOUMxMDJfREVCVUcKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBkZWJ1ZyA9IFNOOUMxMDJfREVCVUdfTEVWRUw7Cittb2R1bGVfcGFyYW0oZGVidWcsIHVzaG9ydCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLAorICAgICAgICAgICAgICAgICAiXG48bj4gRGVidWdnaW5nIGluZm9ybWF0aW9uIGxldmVsLCBmcm9tIDAgdG8gMzoiCisgICAgICAgICAgICAgICAgICJcbjAgPSBub25lICh1c2UgY2FyZWZ1bGx5KSIKKyAgICAgICAgICAgICAgICAgIlxuMSA9IGNyaXRpY2FsIGVycm9ycyIKKyAgICAgICAgICAgICAgICAgIlxuMiA9IHNpZ25pZmljYW50IGluZm9ybWF0aW9ucyIKKyAgICAgICAgICAgICAgICAgIlxuMyA9IG1vcmUgdmVyYm9zZSBtZXNzYWdlcyIKKyAgICAgICAgICAgICAgICAgIlxuTGV2ZWwgMyBpcyB1c2VmdWwgZm9yIHRlc3Rpbmcgb25seSwgd2hlbiBvbmx5ICIKKyAgICAgICAgICAgICAgICAgIm9uZSBkZXZpY2UgaXMgdXNlZC4iCisgICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhTTjlDMTAyX0RFQlVHX0xFVkVMKSIuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzbjljMTAyX3NvZl9oZWFkZXJfdCBzbjljMTAyX3NvZl9oZWFkZXJbXSA9IHsKKwl7MHhmZiwgMHhmZiwgMHgwMCwgMHhjNCwgMHhjNCwgMHg5NiwgMHgwMH0sCisJezB4ZmYsIDB4ZmYsIDB4MDAsIDB4YzQsIDB4YzQsIDB4OTYsIDB4MDF9LAorfTsKKworCitzdGF0aWMgc245YzEwMl9lb2ZfaGVhZGVyX3Qgc245YzEwMl9lb2ZfaGVhZGVyW10gPSB7CisJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorCXsweDQwLCAweDAwLCAweDAwLCAweDAwfSwKKwl7MHg4MCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJezB4YzAsIDB4MDAsIDB4MDAsIDB4MDB9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCogcnZtYWxsb2Moc2l6ZV90IHNpemUpCit7CisJdm9pZCogbWVtOworCXVuc2lnbmVkIGxvbmcgYWRyOworCisJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CisKKwltZW0gPSB2bWFsbG9jXzMyKCh1bnNpZ25lZCBsb25nKXNpemUpOworCWlmICghbWVtKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldChtZW0sIDAsIHNpemUpOworCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpbWVtOworCXdoaWxlIChzaXplID4gMCkgeworCQlTZXRQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CisJCWFkciArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKworCXJldHVybiBtZW07Cit9CisKKworc3RhdGljIHZvaWQgcnZmcmVlKHZvaWQqIG1lbSwgc2l6ZV90IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlpZiAoIW1lbSkKKwkJcmV0dXJuOworCisJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CisKKwlhZHIgPSAodW5zaWduZWQgbG9uZyltZW07CisJd2hpbGUgKHNpemUgPiAwKSB7CisJCUNsZWFyUGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOworCQlhZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisKKwl2ZnJlZShtZW0pOworfQorCisKK3N0YXRpYyB1MzIgCitzbjljMTAyX3JlcXVlc3RfYnVmZmVycyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgdTMyIGNvdW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gc245YzEwMl9pb19tZXRob2QgaW8pCit7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcCA9ICYoY2FtLT5zZW5zb3ItPnBpeF9mb3JtYXQpOworCXN0cnVjdCB2NGwyX3JlY3QqIHIgPSAmKGNhbS0+c2Vuc29yLT5jcm9wY2FwLmJvdW5kcyk7CisJY29uc3Qgc2l6ZV90IGltYWdlc2l6ZSA9IGNhbS0+bW9kdWxlX3BhcmFtLmZvcmNlX211bm1hcCB8fAorCSAgICAgICAgICAgICAgICAgICAgICAgICBpbyA9PSBJT19SRUFEID8KKwkgICAgICAgICAgICAgICAgICAgICAgICAgKHAtPndpZHRoICogcC0+aGVpZ2h0ICogcC0+cHJpdikgLyA4IDoKKwkgICAgICAgICAgICAgICAgICAgICAgICAgKHItPndpZHRoICogci0+aGVpZ2h0ICogcC0+cHJpdikgLyA4OworCXZvaWQqIGJ1ZmYgPSBOVUxMOworCXUzMiBpOworCisJaWYgKGNvdW50ID4gU045QzEwMl9NQVhfRlJBTUVTKQorCQljb3VudCA9IFNOOUMxMDJfTUFYX0ZSQU1FUzsKKworCWNhbS0+bmJ1ZmZlcnMgPSBjb3VudDsKKwl3aGlsZSAoY2FtLT5uYnVmZmVycyA+IDApIHsKKwkJaWYgKChidWZmID0gcnZtYWxsb2MoY2FtLT5uYnVmZmVycyAqIFBBR0VfQUxJR04oaW1hZ2VzaXplKSkpKQorCQkJYnJlYWs7CisJCWNhbS0+bmJ1ZmZlcnMtLTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY2FtLT5uYnVmZmVyczsgaSsrKSB7CisJCWNhbS0+ZnJhbWVbaV0uYnVmbWVtID0gYnVmZiArIGkqUEFHRV9BTElHTihpbWFnZXNpemUpOworCQljYW0tPmZyYW1lW2ldLmJ1Zi5pbmRleCA9IGk7CisJCWNhbS0+ZnJhbWVbaV0uYnVmLm0ub2Zmc2V0ID0gaSpQQUdFX0FMSUdOKGltYWdlc2l6ZSk7CisJCWNhbS0+ZnJhbWVbaV0uYnVmLmxlbmd0aCA9IGltYWdlc2l6ZTsKKwkJY2FtLT5mcmFtZVtpXS5idWYudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJY2FtLT5mcmFtZVtpXS5idWYuc2VxdWVuY2UgPSAwOworCQljYW0tPmZyYW1lW2ldLmJ1Zi5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKwkJY2FtLT5mcmFtZVtpXS5idWYubWVtb3J5ID0gVjRMMl9NRU1PUllfTU1BUDsKKwkJY2FtLT5mcmFtZVtpXS5idWYuZmxhZ3MgPSAwOworCX0KKworCXJldHVybiBjYW0tPm5idWZmZXJzOworfQorCisKK3N0YXRpYyB2b2lkIHNuOWMxMDJfcmVsZWFzZV9idWZmZXJzKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQoreworCWlmIChjYW0tPm5idWZmZXJzKSB7CisJCXJ2ZnJlZShjYW0tPmZyYW1lWzBdLmJ1Zm1lbSwKKwkJICAgICAgIGNhbS0+bmJ1ZmZlcnMgKiBjYW0tPmZyYW1lWzBdLmJ1Zi5sZW5ndGgpOworCQljYW0tPm5idWZmZXJzID0gMDsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgc245YzEwMl9lbXB0eV9mcmFtZXF1ZXVlcyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwl1MzIgaTsKKworCUlOSVRfTElTVF9IRUFEKCZjYW0tPmlucXVldWUpOworCUlOSVRfTElTVF9IRUFEKCZjYW0tPm91dHF1ZXVlKTsKKworCWZvciAoaSA9IDA7IGkgPCBTTjlDMTAyX01BWF9GUkFNRVM7IGkrKykgeworCQljYW0tPmZyYW1lW2ldLnN0YXRlID0gRl9VTlVTRUQ7CisJCWNhbS0+ZnJhbWVbaV0uYnVmLmJ5dGVzdXNlZCA9IDA7CisJfQorfQorCisKK3N0YXRpYyB2b2lkIHNuOWMxMDJfcXVldWVfdW51c2VkZnJhbWVzKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQoreworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5idWZmZXJzOyBpKyspCisJCWlmIChjYW0tPmZyYW1lW2ldLnN0YXRlID09IEZfVU5VU0VEKSB7CisJCQljYW0tPmZyYW1lW2ldLnN0YXRlID0gRl9RVUVVRUQ7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmNhbS0+ZnJhbWVbaV0uZnJhbWUsICZjYW0tPmlucXVldWUpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBzbjljMTAyX3dyaXRlX3JlZyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgdTggdmFsdWUsIHUxNiBpbmRleCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSogdWRldiA9IGNhbS0+dXNiZGV2OworCXU4KiBidWZmID0gY2FtLT5jb250cm9sX2J1ZmZlcjsKKwlpbnQgcmVzOworCisJKmJ1ZmYgPSB2YWx1ZTsKKworCXJlcyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDB4MDgsIDB4NDEsCisJICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCAwLCBidWZmLCAxLCBTTjlDMTAyX0NUUkxfVElNRU9VVCk7CisJaWYgKHJlcyA8IDApIHsKKwkJREJHKDMsICJGYWlsZWQgdG8gd3JpdGUgYSByZWdpc3RlciAodmFsdWUgMHglMDJYLCBpbmRleCAiCisJCSAgICAgICAiMHglMDJYLCBlcnJvciAlZCkiLCB2YWx1ZSwgaW5kZXgsIHJlcykKKwkJcmV0dXJuIC0xOworCX0KKworCWNhbS0+cmVnW2luZGV4XSA9IHZhbHVlOworCisJcmV0dXJuIDA7Cit9CisKKworLyogTk9URTogcmVhZGluZyBzb21lIHJlZ2lzdGVycyBhbHdheXMgcmV0dXJucyAwICovCitzdGF0aWMgaW50IHNuOWMxMDJfcmVhZF9yZWcoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHUxNiBpbmRleCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSogdWRldiA9IGNhbS0+dXNiZGV2OworCXU4KiBidWZmID0gY2FtLT5jb250cm9sX2J1ZmZlcjsKKwlpbnQgcmVzOworCisJcmVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwgMHgwMCwgMHhjMSwKKwkgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIDAsIGJ1ZmYsIDEsIFNOOUMxMDJfQ1RSTF9USU1FT1VUKTsKKwlpZiAocmVzIDwgMCkKKwkJREJHKDMsICJGYWlsZWQgdG8gcmVhZCBhIHJlZ2lzdGVyIChpbmRleCAweCUwMlgsIGVycm9yICVkKSIsCisJCSAgICBpbmRleCwgcmVzKQorCisJcmV0dXJuIChyZXMgPj0gMCkgPyAoaW50KSgqYnVmZikgOiAtMTsKK30KKworCitpbnQgc245YzEwMl9wcmVhZF9yZWcoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHUxNiBpbmRleCkKK3sKKwlpZiAoaW5kZXggPiAweDFmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBjYW0tPnJlZ1tpbmRleF07Cit9CisKKworc3RhdGljIGludAorc245YzEwMl9pMmNfd2FpdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzZW5zb3IpCit7CisJaW50IGksIHI7CisKKwlmb3IgKGkgPSAxOyBpIDw9IDU7IGkrKykgeworCQlyID0gc245YzEwMl9yZWFkX3JlZyhjYW0sIDB4MDgpOworCQlpZiAociA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJaWYgKHIgJiAweDA0KQorCQkJcmV0dXJuIDA7CisJCWlmIChzZW5zb3ItPmZyZXF1ZW5jeSAmIFNOOUMxMDJfSTJDXzQwMEtIWikKKwkJCXVkZWxheSg1KjE2KTsKKwkJZWxzZQorCQkJdWRlbGF5KDE2KjE2KTsKKwl9CisJcmV0dXJuIC1FQlVTWTsKK30KKworCitzdGF0aWMgaW50CitzbjljMTAyX2kyY19kZXRlY3RfcmVhZF9lcnJvcihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvcikKK3sKKwlpbnQgcjsKKwlyID0gc245YzEwMl9yZWFkX3JlZyhjYW0sIDB4MDgpOworCXJldHVybiAociA8IDAgfHwgKHIgPj0gMCAmJiAhKHIgJiAweDA4KSkpID8gLUVJTyA6IDA7Cit9CisKKworc3RhdGljIGludAorc245YzEwMl9pMmNfZGV0ZWN0X3dyaXRlX2Vycm9yKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvcikKK3sKKwlpbnQgcjsKKwlyID0gc245YzEwMl9yZWFkX3JlZyhjYW0sIDB4MDgpOworCXJldHVybiAociA8IDAgfHwgKHIgPj0gMCAmJiAociAmIDB4MDgpKSkgPyAtRUlPIDogMDsKK30KKworCitpbnQgCitzbjljMTAyX2kyY190cnlfcmF3X3JlYWQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzZW5zb3IsIHU4IGRhdGEwLCB1OCBkYXRhMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1OCBuLCB1OCBidWZmZXJbXSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSogdWRldiA9IGNhbS0+dXNiZGV2OworCXU4KiBkYXRhID0gY2FtLT5jb250cm9sX2J1ZmZlcjsKKwlpbnQgZXJyID0gMCwgcmVzOworCisJLyogV3JpdGUgY3ljbGUgKi8KKwlkYXRhWzBdID0gKChzZW5zb3ItPmludGVyZmFjZSA9PSBTTjlDMTAyX0kyQ18yV0lSRVMpID8gMHg4MCA6IDApIHwKKwkgICAgICAgICAgKChzZW5zb3ItPmZyZXF1ZW5jeSAmIFNOOUMxMDJfSTJDXzQwMEtIWikgPyAweDAxIDogMCkgfCAweDEwOworCWRhdGFbMV0gPSBkYXRhMDsgLyogSTJDIHNsYXZlIGlkICovCisJZGF0YVsyXSA9IGRhdGExOyAvKiBhZGRyZXNzICovCisJZGF0YVs3XSA9IDB4MTA7CisJcmVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgwOCwgMHg0MSwKKwkgICAgICAgICAgICAgICAgICAgICAgMHgwOCwgMCwgZGF0YSwgOCwgU045QzEwMl9DVFJMX1RJTUVPVVQpOworCWlmIChyZXMgPCAwKQorCQllcnIgKz0gcmVzOworCisJZXJyICs9IHNuOWMxMDJfaTJjX3dhaXQoY2FtLCBzZW5zb3IpOworCisJLyogUmVhZCBjeWNsZSAtIG4gYnl0ZXMgKi8KKwlkYXRhWzBdID0gKChzZW5zb3ItPmludGVyZmFjZSA9PSBTTjlDMTAyX0kyQ18yV0lSRVMpID8gMHg4MCA6IDApIHwKKwkgICAgICAgICAgKChzZW5zb3ItPmZyZXF1ZW5jeSAmIFNOOUMxMDJfSTJDXzQwMEtIWikgPyAweDAxIDogMCkgfAorCSAgICAgICAgICAobiA8PCA0KSB8IDB4MDI7CisJZGF0YVsxXSA9IGRhdGEwOworCWRhdGFbN10gPSAweDEwOworCXJlcyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksIDB4MDgsIDB4NDEsCisJICAgICAgICAgICAgICAgICAgICAgIDB4MDgsIDAsIGRhdGEsIDgsIFNOOUMxMDJfQ1RSTF9USU1FT1VUKTsKKwlpZiAocmVzIDwgMCkKKwkJZXJyICs9IHJlczsKKworCWVyciArPSBzbjljMTAyX2kyY193YWl0KGNhbSwgc2Vuc29yKTsKKworCS8qIFRoZSBmaXJzdCByZWFkIGJ5dGUgd2lsbCBiZSBwbGFjZWQgaW4gZGF0YVs0XSAqLworCXJlcyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDB4MDAsIDB4YzEsCisJICAgICAgICAgICAgICAgICAgICAgIDB4MGEsIDAsIGRhdGEsIDUsIFNOOUMxMDJfQ1RSTF9USU1FT1VUKTsKKwlpZiAocmVzIDwgMCkKKwkJZXJyICs9IHJlczsKKworCWVyciArPSBzbjljMTAyX2kyY19kZXRlY3RfcmVhZF9lcnJvcihjYW0sIHNlbnNvcik7CisKKwlQREJHRygiSTJDIHJlYWQ6IGFkZHJlc3MgMHglMDJYLCBmaXJzdCByZWFkIGJ5dGU6IDB4JTAyWCIsIGRhdGExLAorCSAgICAgIGRhdGFbNF0pCisKKwlpZiAoZXJyKSB7CisJCURCRygzLCAiSTJDIHJlYWQgZmFpbGVkIGZvciAlcyBpbWFnZSBzZW5zb3IiLCBzZW5zb3ItPm5hbWUpCisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoYnVmZmVyKQorCQltZW1jcHkoYnVmZmVyLCBkYXRhLCBzaXplb2YoYnVmZmVyKSk7CisKKwlyZXR1cm4gKGludClkYXRhWzRdOworfQorCisKK2ludCAKK3NuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yLCB1OCBuLCB1OCBkYXRhMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZGF0YTEsIHU4IGRhdGEyLCB1OCBkYXRhMywgdTggZGF0YTQsIHU4IGRhdGE1KQoreworCXN0cnVjdCB1c2JfZGV2aWNlKiB1ZGV2ID0gY2FtLT51c2JkZXY7CisJdTgqIGRhdGEgPSBjYW0tPmNvbnRyb2xfYnVmZmVyOworCWludCBlcnIgPSAwLCByZXM7CisKKwkvKiBXcml0ZSBjeWNsZS4gSXQgdXN1YWxseSBpcyBhZGRyZXNzICsgdmFsdWUgKi8KKwlkYXRhWzBdID0gKChzZW5zb3ItPmludGVyZmFjZSA9PSBTTjlDMTAyX0kyQ18yV0lSRVMpID8gMHg4MCA6IDApIHwKKwkgICAgICAgICAgKChzZW5zb3ItPmZyZXF1ZW5jeSAmIFNOOUMxMDJfSTJDXzQwMEtIWikgPyAweDAxIDogMCkKKwkgICAgICAgICAgfCAoKG4gLSAxKSA8PCA0KTsKKwlkYXRhWzFdID0gZGF0YTA7CisJZGF0YVsyXSA9IGRhdGExOworCWRhdGFbM10gPSBkYXRhMjsKKwlkYXRhWzRdID0gZGF0YTM7CisJZGF0YVs1XSA9IGRhdGE0OworCWRhdGFbNl0gPSBkYXRhNTsKKwlkYXRhWzddID0gMHgxNDsKKwlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDA4LCAweDQxLAorCSAgICAgICAgICAgICAgICAgICAgICAweDA4LCAwLCBkYXRhLCA4LCBTTjlDMTAyX0NUUkxfVElNRU9VVCk7CisJaWYgKHJlcyA8IDApCisJCWVyciArPSByZXM7CisKKwllcnIgKz0gc245YzEwMl9pMmNfd2FpdChjYW0sIHNlbnNvcik7CisJZXJyICs9IHNuOWMxMDJfaTJjX2RldGVjdF93cml0ZV9lcnJvcihjYW0sIHNlbnNvcik7CisKKwlpZiAoZXJyKQorCQlEQkcoMywgIkkyQyB3cml0ZSBmYWlsZWQgZm9yICVzIGltYWdlIHNlbnNvciIsIHNlbnNvci0+bmFtZSkKKworCVBEQkdHKCJJMkMgcmF3IHdyaXRlOiAldSBieXRlcywgZGF0YTAgPSAweCUwMlgsIGRhdGExID0gMHglMDJYLCAiCisJICAgICAgImRhdGEyID0gMHglMDJYLCBkYXRhMyA9IDB4JTAyWCwgZGF0YTQgPSAweCUwMlgsIGRhdGE1ID0gMHglMDJYIiwKKwkgICAgICBuLCBkYXRhMCwgZGF0YTEsIGRhdGEyLCBkYXRhMywgZGF0YTQsIGRhdGE1KQorCisJcmV0dXJuIGVyciA/IC0xIDogMDsKK30KKworCitpbnQKK3NuOWMxMDJfaTJjX3RyeV9yZWFkKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzZW5zb3IsIHU4IGFkZHJlc3MpCit7CisJcmV0dXJuIHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sIHNlbnNvciwgc2Vuc29yLT5pMmNfc2xhdmVfaWQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLCAxLCBOVUxMKTsKK30KKworCitpbnQgCitzbjljMTAyX2kyY190cnlfd3JpdGUoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzZW5zb3IsIHU4IGFkZHJlc3MsIHU4IHZhbHVlKQoreworCXJldHVybiBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKGNhbSwgc2Vuc29yLCAzLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5zb3ItPmkyY19zbGF2ZV9pZCwgYWRkcmVzcywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgMCwgMCwgMCk7Cit9CisKKworaW50IHNuOWMxMDJfaTJjX3JlYWQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHU4IGFkZHJlc3MpCit7CisJaWYgKCFjYW0tPnNlbnNvcikKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIHNuOWMxMDJfaTJjX3RyeV9yZWFkKGNhbSwgY2FtLT5zZW5zb3IsIGFkZHJlc3MpOworfQorCisKK2ludCBzbjljMTAyX2kyY193cml0ZShzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgdTggYWRkcmVzcywgdTggdmFsdWUpCit7CisJaWYgKCFjYW0tPnNlbnNvcikKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIHNuOWMxMDJfaTJjX3RyeV93cml0ZShjYW0sIGNhbS0+c2Vuc29yLCBhZGRyZXNzLCB2YWx1ZSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQqCitzbjljMTAyX2ZpbmRfc29mX2hlYWRlcihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgdm9pZCogbWVtLCBzaXplX3QgbGVuKQoreworCXNpemVfdCBzb2ZsZW4gPSBzaXplb2Yoc245YzEwMl9zb2ZfaGVhZGVyX3QpLCBpOworCXU4IGosIG4gPSBzaXplb2Yoc245YzEwMl9zb2ZfaGVhZGVyKSAvIHNvZmxlbjsKKworCWZvciAoaSA9IDA7IChsZW4gPj0gc29mbGVuKSAmJiAoaSA8PSBsZW4gLSBzb2ZsZW4pOyBpKyspCisJCWZvciAoaiA9IDA7IGogPCBuOyBqKyspCisJCQkvKiBJdCdzIGVub3VnaCB0byBjb21wYXJlIDcgYnl0ZXMgKi8KKwkJCWlmICghbWVtY21wKG1lbSArIGksIHNuOWMxMDJfc29mX2hlYWRlcltqXSwgNykpIHsKKwkJCQltZW1jcHkoY2FtLT5zb2ZfaGVhZGVyLCBtZW0gKyBpLCBzb2ZsZW4pOworCQkJCS8qIFNraXAgdGhlIGhlYWRlciAqLworCQkJCXJldHVybiBtZW0gKyBpICsgc29mbGVuOworCQkJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGljIHZvaWQqCitzbjljMTAyX2ZpbmRfZW9mX2hlYWRlcihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgdm9pZCogbWVtLCBzaXplX3QgbGVuKQoreworCXNpemVfdCBlb2ZsZW4gPSBzaXplb2Yoc245YzEwMl9lb2ZfaGVhZGVyX3QpLCBpOworCXVuc2lnbmVkIGosIG4gPSBzaXplb2Yoc245YzEwMl9lb2ZfaGVhZGVyKSAvIGVvZmxlbjsKKworCWlmIChjYW0tPnNlbnNvci0+cGl4X2Zvcm1hdC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU045QzEwWCkKKwkJcmV0dXJuIE5VTEw7IC8qIEVPRiBoZWFkZXIgZG9lcyBub3QgZXhpc3QgaW4gY29tcHJlc3NlZCBkYXRhICovCisKKwlmb3IgKGkgPSAwOyAobGVuID49IGVvZmxlbikgJiYgKGkgPD0gbGVuIC0gZW9mbGVuKTsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgbjsgaisrKQorCQkJaWYgKCFtZW1jbXAobWVtICsgaSwgc245YzEwMl9lb2ZfaGVhZGVyW2pdLCBlb2ZsZW4pKQorCQkJCXJldHVybiBtZW0gKyBpOworCisJcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGljIHZvaWQgc245YzEwMl91cmJfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyogcmVncykKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgc245YzEwMl9mcmFtZV90KiogZjsKKwlzaXplX3QgaW1hZ2VzaXplOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwl1OCBpOworCWludCBlcnIgPSAwOworCisJaWYgKHVyYi0+c3RhdHVzID09IC1FTk9FTlQpCisJCXJldHVybjsKKworCWYgPSAmY2FtLT5mcmFtZV9jdXJyZW50OworCisJaWYgKGNhbS0+c3RyZWFtID09IFNUUkVBTV9JTlRFUlJVUFQpIHsKKwkJY2FtLT5zdHJlYW0gPSBTVFJFQU1fT0ZGOworCQlpZiAoKCpmKSkKKwkJCSgqZiktPnN0YXRlID0gRl9RVUVVRUQ7CisJCURCRygzLCAiU3RyZWFtIGludGVycnVwdGVkIikKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjYW0tPndhaXRfc3RyZWFtKTsKKwl9CisKKwlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpCisJCXJldHVybjsKKworCWlmIChjYW0tPnN0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpIHsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjYW0tPndhaXRfZnJhbWUpOworCQlyZXR1cm47CisJfQorCisJaWYgKGNhbS0+c3RyZWFtID09IFNUUkVBTV9PRkYgfHwgbGlzdF9lbXB0eSgmY2FtLT5pbnF1ZXVlKSkKKwkJZ290byByZXN1Ym1pdF91cmI7CisKKwlpZiAoISgqZikpCisJCSgqZikgPSBsaXN0X2VudHJ5KGNhbS0+aW5xdWV1ZS5uZXh0LCBzdHJ1Y3Qgc245YzEwMl9mcmFtZV90LAorCQkgICAgICAgICAgICAgICAgICBmcmFtZSk7CisKKwlpbWFnZXNpemUgPSAoY2FtLT5zZW5zb3ItPnBpeF9mb3JtYXQud2lkdGggKgorCSAgICAgICAgICAgICBjYW0tPnNlbnNvci0+cGl4X2Zvcm1hdC5oZWlnaHQgKgorCSAgICAgICAgICAgICBjYW0tPnNlbnNvci0+cGl4X2Zvcm1hdC5wcml2KSAvIDg7CisKKwlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBpbWcsIGxlbiwgc3RhdHVzOworCQl2b2lkICpwb3MsICpzb2YsICplb2Y7CisKKwkJbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOworCQlzdGF0dXMgPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1czsKKwkJcG9zID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgKyB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCQlpZiAoc3RhdHVzKSB7CisJCQlEQkcoMywgIkVycm9yIGluIGlzb2Nocm9ub3VzIGZyYW1lIikKKwkJCSgqZiktPnN0YXRlID0gRl9FUlJPUjsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJUERCR0coIklzb2Nocm5vdXMgZnJhbWU6IGxlbmd0aCAldSwgIyV1IGkiLCBsZW4sIGkpCisKKwkJLyoKKwkJICAgTk9URTogSXQgaXMgcHJvYmFibHkgY29ycmVjdCB0byBhc3N1bWUgdGhhdCBTT0YgYW5kIEVPRgorCQkgICAgICAgICBoZWFkZXJzIGRvIG5vdCBvY2N1ciBiZXR3ZWVuIHR3byBjb25zZWN1dGl2ZSBwYWNrZXRzLAorCQkgICAgICAgICBidXQgd2hvIGtub3dzLi5XaGF0ZXZlciBpcyB0aGUgdHJ1dGgsIHRoaXMgYXNzdW1wdGlvbgorCQkgICAgICAgICBkb2Vzbid0IGludHJvZHVjZSBidWdzLgorCQkqLworCityZWRvOgorCQlzb2YgPSBzbjljMTAyX2ZpbmRfc29mX2hlYWRlcihjYW0sIHBvcywgbGVuKTsKKwkJaWYgKCFzb2YpIHsKKwkJCWVvZiA9IHNuOWMxMDJfZmluZF9lb2ZfaGVhZGVyKGNhbSwgcG9zLCBsZW4pOworCQkJaWYgKCgqZiktPnN0YXRlID09IEZfR1JBQkJJTkcpIHsKK2VuZF9vZl9mcmFtZToKKwkJCQlpbWcgPSBsZW47CisKKwkJCQlpZiAoZW9mKQorCQkJCQlpbWcgPSAoZW9mID4gcG9zKSA/IGVvZiAtIHBvcyAtIDEgOiAwOworCisJCQkJaWYgKCgqZiktPmJ1Zi5ieXRlc3VzZWQraW1nID4gaW1hZ2VzaXplKSB7CisJCQkJCXUzMiBiID0gKCpmKS0+YnVmLmJ5dGVzdXNlZCArIGltZyAtCisJCQkJCSAgICAgICAgaW1hZ2VzaXplOworCQkJCQlpbWcgPSBpbWFnZXNpemUgLSAoKmYpLT5idWYuYnl0ZXN1c2VkOworCQkJCQlEQkcoMywgIkV4cGVjdGVkIEVPRiBub3QgZm91bmQ6ICIKKwkJCQkJICAgICAgICJ2aWRlbyBmcmFtZSBjdXQiKQorCQkJCQlpZiAoZW9mKQorCQkJCQkJREJHKDMsICJFeGNlZWRlZCBsaW1pdDogKyV1ICIKKwkJCQkJCSAgICAgICAiYnl0ZXMiLCAodW5zaWduZWQpKGIpKQorCQkJCX0KKworCQkJCW1lbWNweSgoKmYpLT5idWZtZW0gKyAoKmYpLT5idWYuYnl0ZXN1c2VkLCBwb3MsCisJCQkJICAgICAgIGltZyk7CisKKwkJCQlpZiAoKCpmKS0+YnVmLmJ5dGVzdXNlZCA9PSAwKQorCQkJCQlkb19nZXR0aW1lb2ZkYXkoJigqZiktPmJ1Zi50aW1lc3RhbXApOworCisJCQkJKCpmKS0+YnVmLmJ5dGVzdXNlZCArPSBpbWc7CisKKwkJCQlpZiAoKCpmKS0+YnVmLmJ5dGVzdXNlZCA9PSBpbWFnZXNpemUgfHwKKwkJCQkgICAgKGNhbS0+c2Vuc29yLT5waXhfZm9ybWF0LnBpeGVsZm9ybWF0ID09CisJCQkJICAgICAgICAgICAgICAgIFY0TDJfUElYX0ZNVF9TTjlDMTBYICYmIGVvZikpIHsKKwkJCQkJdTMyIGIgPSAoKmYpLT5idWYuYnl0ZXN1c2VkOworCQkJCQkoKmYpLT5zdGF0ZSA9IEZfRE9ORTsKKwkJCQkJKCpmKS0+YnVmLnNlcXVlbmNlPSArK2NhbS0+ZnJhbWVfY291bnQ7CisJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPnF1ZXVlX2xvY2ssCisJCQkJCSAgICAgICAgICAgICAgICAgIGxvY2tfZmxhZ3MpOworCQkJCQlsaXN0X21vdmVfdGFpbCgmKCpmKS0+ZnJhbWUsCisJCQkJCSAgICAgICAgICAgICAgICZjYW0tPm91dHF1ZXVlKTsKKwkJCQkJaWYgKCFsaXN0X2VtcHR5KCZjYW0tPmlucXVldWUpKQorCQkJCQkJKCpmKSA9IGxpc3RfZW50cnkoCisJCQkJCQkgICAgICAgIGNhbS0+aW5xdWV1ZS5uZXh0LAorCQkJCQkJICAgICAgICBzdHJ1Y3Qgc245YzEwMl9mcmFtZV90LAorCQkJCQkJICAgICAgICBmcmFtZSApOworCQkJCQllbHNlCisJCQkJCQkoKmYpID0gTlVMTDsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5xdWV1ZV9sb2NrCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgLCBsb2NrX2ZsYWdzKTsKKwkJCQkJbWVtY3B5KGNhbS0+c3lzZnMuZnJhbWVfaGVhZGVyLAorCQkJCQkgICAgICAgY2FtLT5zb2ZfaGVhZGVyLAorCQkJCQkgICAgICAgc2l6ZW9mKHNuOWMxMDJfc29mX2hlYWRlcl90KSk7CisJCQkJCURCRygzLCAiVmlkZW8gZnJhbWUgY2FwdHVyZWQ6ICIKKwkJCQkJICAgICAgICIlbHUgYnl0ZXMiLCAodW5zaWduZWQgbG9uZykoYikpCisKKwkJCQkJaWYgKCEoKmYpKQorCQkJCQkJZ290byByZXN1Ym1pdF91cmI7CisKKwkJCQl9IGVsc2UgaWYgKGVvZikgeworCQkJCQkoKmYpLT5zdGF0ZSA9IEZfRVJST1I7CisJCQkJCURCRygzLCAiTm90IGV4cGVjdGVkIEVPRiBhZnRlciAlbHUgIgorCQkJCQkgICAgICAgImJ5dGVzIG9mIGltYWdlIGRhdGEiLCAKKwkJCQkJICAodW5zaWduZWQgbG9uZykoKCpmKS0+YnVmLmJ5dGVzdXNlZCkpCisJCQkJfQorCisJCQkJaWYgKHNvZikgLyogKDEpICovCisJCQkJCWdvdG8gc3RhcnRfb2ZfZnJhbWU7CisKKwkJCX0gZWxzZSBpZiAoZW9mKSB7CisJCQkJREJHKDMsICJFT0Ygd2l0aG91dCBTT0YiKQorCQkJCWNvbnRpbnVlOworCisJCQl9IGVsc2UgeworCQkJCVBEQkdHKCJJZ25vcmluZyBwb2ludGxlc3MgaXNvY2hyb25vdXMgZnJhbWUiKQorCQkJCWNvbnRpbnVlOworCQkJfQorCisJCX0gZWxzZSBpZiAoKCpmKS0+c3RhdGUgPT0gRl9RVUVVRUQgfHwgKCpmKS0+c3RhdGUgPT0gRl9FUlJPUikgeworc3RhcnRfb2ZfZnJhbWU6CisJCQkoKmYpLT5zdGF0ZSA9IEZfR1JBQkJJTkc7CisJCQkoKmYpLT5idWYuYnl0ZXN1c2VkID0gMDsKKwkJCWxlbiAtPSAoc29mIC0gcG9zKTsKKwkJCXBvcyA9IHNvZjsKKwkJCURCRygzLCAiU09GIGRldGVjdGVkOiBuZXcgdmlkZW8gZnJhbWUiKQorCQkJaWYgKGxlbikKKwkJCQlnb3RvIHJlZG87CisKKwkJfSBlbHNlIGlmICgoKmYpLT5zdGF0ZSA9PSBGX0dSQUJCSU5HKSB7CisJCQllb2YgPSBzbjljMTAyX2ZpbmRfZW9mX2hlYWRlcihjYW0sIHBvcywgbGVuKTsKKwkJCWlmIChlb2YgJiYgZW9mIDwgc29mKQorCQkJCWdvdG8gZW5kX29mX2ZyYW1lOyAvKiAoMSkgKi8KKwkJCWVsc2UgeworCQkJCWlmIChjYW0tPnNlbnNvci0+cGl4X2Zvcm1hdC5waXhlbGZvcm1hdCA9PQorCQkJCSAgICBWNEwyX1BJWF9GTVRfU045QzEwWCkgeworCQkJCQllb2YgPSBzb2Ytc2l6ZW9mKHNuOWMxMDJfc29mX2hlYWRlcl90KTsKKwkJCQkJZ290byBlbmRfb2ZfZnJhbWU7CisJCQkJfSBlbHNlIHsKKwkJCQkJREJHKDMsICJTT0YgYmVmb3JlIGV4cGVjdGVkIEVPRiBhZnRlciAiCisJCQkJCSAgICAgICAiJWx1IGJ5dGVzIG9mIGltYWdlIGRhdGEiLCAKKwkJCQkJICAodW5zaWduZWQgbG9uZykoKCpmKS0+YnVmLmJ5dGVzdXNlZCkpCisJCQkJCWdvdG8gc3RhcnRfb2ZfZnJhbWU7CisJCQkJfQorCQkJfQorCQl9CisJfQorCityZXN1Ym1pdF91cmI6CisJdXJiLT5kZXYgPSBjYW0tPnVzYmRldjsKKwllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChlcnIgPCAwICYmIGVyciAhPSAtRVBFUk0pIHsKKwkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKKwkJREJHKDEsICJ1c2Jfc3VibWl0X3VyYigpIGZhaWxlZCIpCisJfQorCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjYW0tPndhaXRfZnJhbWUpOworfQorCisKK3N0YXRpYyBpbnQgc245YzEwMl9zdGFydF90cmFuc2ZlcihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGNhbS0+dXNiZGV2OworCXN0cnVjdCB1cmIqIHVyYjsKKwljb25zdCB1bnNpZ25lZCBpbnQgd01heFBhY2tldFNpemVbXSA9IHswLCAxMjgsIDI1NiwgMzg0LCA1MTIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjgwLCA4MDAsIDkwMCwgMTAyM307CisJY29uc3QgdW5zaWduZWQgaW50IHBzeiA9IHdNYXhQYWNrZXRTaXplW1NOOUMxMDJfQUxURVJOQVRFX1NFVFRJTkddOworCXM4IGksIGo7CisJaW50IGVyciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgU045QzEwMl9VUkJTOyBpKyspIHsKKwkJY2FtLT50cmFuc2Zlcl9idWZmZXJbaV0gPSBrbWFsbG9jKFNOOUMxMDJfSVNPX1BBQ0tFVFMgKiBwc3osCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjYW0tPnRyYW5zZmVyX2J1ZmZlcltpXSkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCURCRygxLCAiTm90IGVub3VnaCBtZW1vcnkiKQorCQkJZ290byBmcmVlX2J1ZmZlcnM7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgU045QzEwMl9VUkJTOyBpKyspIHsKKwkJdXJiID0gdXNiX2FsbG9jX3VyYihTTjlDMTAyX0lTT19QQUNLRVRTLCBHRlBfS0VSTkVMKTsKKwkJY2FtLT51cmJbaV0gPSB1cmI7CisJCWlmICghdXJiKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJREJHKDEsICJ1c2JfYWxsb2NfdXJiKCkgZmFpbGVkIikKKwkJCWdvdG8gZnJlZV91cmJzOworCQl9CisJCXVyYi0+ZGV2ID0gdWRldjsKKwkJdXJiLT5jb250ZXh0ID0gY2FtOworCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUodWRldiwgMSk7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBTTjlDMTAyX0lTT19QQUNLRVRTOworCQl1cmItPmNvbXBsZXRlID0gc245YzEwMl91cmJfY29tcGxldGU7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gY2FtLT50cmFuc2Zlcl9idWZmZXJbaV07CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHBzeiAqIFNOOUMxMDJfSVNPX1BBQ0tFVFM7CisJCXVyYi0+aW50ZXJ2YWwgPSAxOworCQlmb3IgKGogPSAwOyBqIDwgU045QzEwMl9JU09fUEFDS0VUUzsgaisrKSB7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLm9mZnNldCA9IHBzeiAqIGo7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLmxlbmd0aCA9IHBzejsKKwkJfQorCX0KKworCS8qIEVuYWJsZSB2aWRlbyAqLworCWlmICghKGNhbS0+cmVnWzB4MDFdICYgMHgwNCkpIHsKKwkJZXJyID0gc245YzEwMl93cml0ZV9yZWcoY2FtLCBjYW0tPnJlZ1sweDAxXSB8IDB4MDQsIDB4MDEpOworCQlpZiAoZXJyKSB7CisJCQllcnIgPSAtRUlPOworCQkJREJHKDEsICJJL08gaGFyZHdhcmUgZXJyb3IiKQorCQkJZ290byBmcmVlX3VyYnM7CisJCX0KKwl9CisKKwllcnIgPSB1c2Jfc2V0X2ludGVyZmFjZSh1ZGV2LCAwLCBTTjlDMTAyX0FMVEVSTkFURV9TRVRUSU5HKTsKKwlpZiAoZXJyKSB7CisJCURCRygxLCAidXNiX3NldF9pbnRlcmZhY2UoKSBmYWlsZWQiKQorCQlnb3RvIGZyZWVfdXJiczsKKwl9CisKKwljYW0tPmZyYW1lX2N1cnJlbnQgPSBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IFNOOUMxMDJfVVJCUzsgaSsrKSB7CisJCWVyciA9IHVzYl9zdWJtaXRfdXJiKGNhbS0+dXJiW2ldLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVycikgeworCQkJZm9yIChqID0gaS0xOyBqID49IDA7IGotLSkKKwkJCQl1c2Jfa2lsbF91cmIoY2FtLT51cmJbal0pOworCQkJREJHKDEsICJ1c2Jfc3VibWl0X3VyYigpIGZhaWxlZCwgZXJyb3IgJWQiLCBlcnIpCisJCQlnb3RvIGZyZWVfdXJiczsKKwkJfQorCX0KKworCXJldHVybiAwOworCitmcmVlX3VyYnM6CisJZm9yIChpID0gMDsgKGkgPCBTTjlDMTAyX1VSQlMpICYmICBjYW0tPnVyYltpXTsgaSsrKQorCQl1c2JfZnJlZV91cmIoY2FtLT51cmJbaV0pOworCitmcmVlX2J1ZmZlcnM6CisJZm9yIChpID0gMDsgKGkgPCBTTjlDMTAyX1VSQlMpICYmIGNhbS0+dHJhbnNmZXJfYnVmZmVyW2ldOyBpKyspCisJCWtmcmVlKGNhbS0+dHJhbnNmZXJfYnVmZmVyW2ldKTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBzbjljMTAyX3N0b3BfdHJhbnNmZXIoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBjYW0tPnVzYmRldjsKKwlzOCBpOworCWludCBlcnIgPSAwOworCisJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IFNOOUMxMDJfVVJCUy0xOyBpID49IDA7IGktLSkgeworCQl1c2Jfa2lsbF91cmIoY2FtLT51cmJbaV0pOworCQl1c2JfZnJlZV91cmIoY2FtLT51cmJbaV0pOworCQlrZnJlZShjYW0tPnRyYW5zZmVyX2J1ZmZlcltpXSk7CisJfQorCisJZXJyID0gdXNiX3NldF9pbnRlcmZhY2UodWRldiwgMCwgMCk7IC8qIDAgTWIvcyAqLworCWlmIChlcnIpCisJCURCRygzLCAidXNiX3NldF9pbnRlcmZhY2UoKSBmYWlsZWQiKQorCisJcmV0dXJuIGVycjsKK30KKworCitpbnQgc245YzEwMl9zdHJlYW1faW50ZXJydXB0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQoreworCWludCBlcnIgPSAwOworCisJY2FtLT5zdHJlYW0gPSBTVFJFQU1fSU5URVJSVVBUOworCWVyciA9IHdhaXRfZXZlbnRfdGltZW91dChjYW0tPndhaXRfc3RyZWFtLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAoY2FtLT5zdHJlYW0gPT0gU1RSRUFNX09GRikgfHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgU045QzEwMl9VUkJfVElNRU9VVCk7CisJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKQorCQlyZXR1cm4gLUVOT0RFVjsKKwllbHNlIGlmIChlcnIpIHsKKwkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKKwkJREJHKDEsICJUaGUgY2FtZXJhIGlzIG1pc2NvbmZpZ3VyZWQuIFRvIHVzZSBpdCwgY2xvc2UgYW5kICIKKwkJICAgICAgICJvcGVuIC9kZXYvdmlkZW8lZCBhZ2Fpbi4iLCBjYW0tPnY0bGRldi0+bWlub3IpCisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHU4IHNuOWMxMDJfc3RydG91OChjb25zdCBjaGFyKiBidWZmLCBzaXplX3QgbGVuLCBzc2l6ZV90KiBjb3VudCkKK3sKKwljaGFyIHN0cls1XTsKKwljaGFyKiBlbmRwOworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJaWYgKGxlbiA8IDQpIHsKKwkJc3RybmNweShzdHIsIGJ1ZmYsIGxlbik7CisJCXN0cltsZW4rMV0gPSAnXDAnOworCX0gZWxzZSB7CisJCXN0cm5jcHkoc3RyLCBidWZmLCA0KTsKKwkJc3RyWzRdID0gJ1wwJzsKKwl9CisKKwl2YWwgPSBzaW1wbGVfc3RydG91bChzdHIsICZlbmRwLCAwKTsKKworCSpjb3VudCA9IDA7CisJaWYgKHZhbCA8PSAweGZmKQorCQkqY291bnQgPSAoc3NpemVfdCkoZW5kcCAtIHN0cik7CisJaWYgKCgqY291bnQpICYmIChsZW4gPT0gKmNvdW50KzEpICYmIChidWZmWypjb3VudF0gPT0gJ1xuJykpCisJCSpjb3VudCArPSAxOworCisJcmV0dXJuICh1OCl2YWw7Cit9CisKKy8qCisgICBOT1RFIDE6IGJlaW5nIGluc2lkZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzIGltcGxpZXMgdGhhdCB0aGUgdjRsCisgICAgICAgICAgIGRldmljZSBleGlzdHMgZm9yIHN1cmUgKHNlZSBrb2JqZWN0cyBhbmQgcmVmZXJlbmNlIGNvdW50ZXJzKQorICAgTk9URSAyOiBidWZmZXJzIGFyZSBQQUdFX1NJWkUgbG9uZworKi8KKworc3RhdGljIHNzaXplX3Qgc245YzEwMl9zaG93X3JlZyhzdHJ1Y3QgY2xhc3NfZGV2aWNlKiBjZCwgY2hhciogYnVmKQoreworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtOworCXNzaXplX3QgY291bnQ7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZzbjljMTAyX3N5c2ZzX2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodG9fdmlkZW9fZGV2aWNlKGNkKSk7CisJaWYgKCFjYW0pIHsKKwkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWNvdW50ID0gc3ByaW50ZihidWYsICIldVxuIiwgY2FtLT5zeXNmcy5yZWcpOworCisJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9IAorCisKK3N0YXRpYyBzc2l6ZV90IAorc245YzEwMl9zdG9yZV9yZWcoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNvbnN0IGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbTsKKwl1OCBpbmRleDsKKwlzc2l6ZV90IGNvdW50OworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmc245YzEwMl9zeXNmc19sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHRvX3ZpZGVvX2RldmljZShjZCkpOworCWlmICghY2FtKSB7CisJCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpbmRleCA9IHNuOWMxMDJfc3RydG91OChidWYsIGxlbiwgJmNvdW50KTsKKwlpZiAoaW5kZXggPiAweDFmIHx8ICFjb3VudCkgeworCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2FtLT5zeXNmcy5yZWcgPSBpbmRleDsKKworCURCRygyLCAiTW92ZWQgU045QzEwWCByZWdpc3RlciBpbmRleCB0byAweCUwMlgiLCBjYW0tPnN5c2ZzLnJlZykKKwlEQkcoMywgIldyaXR0ZW4gYnl0ZXM6ICV6ZCIsIGNvdW50KQorCisJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKworc3RhdGljIHNzaXplX3Qgc245YzEwMl9zaG93X3ZhbChzdHJ1Y3QgY2xhc3NfZGV2aWNlKiBjZCwgY2hhciogYnVmKQoreworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtOworCXNzaXplX3QgY291bnQ7CisJaW50IHZhbDsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJnNuOWMxMDJfc3lzZnNfbG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh0b192aWRlb19kZXZpY2UoY2QpKTsKKwlpZiAoIWNhbSkgeworCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCh2YWwgPSBzbjljMTAyX3JlYWRfcmVnKGNhbSwgY2FtLT5zeXNmcy5yZWcpKSA8IDApIHsKKwkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCXJldHVybiAtRUlPOworCX0KKworCWNvdW50ID0gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsKTsKKworCURCRygzLCAiUmVhZCBieXRlczogJXpkIiwgY291bnQpCisKKwl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30gCisKKworc3RhdGljIHNzaXplX3QKK3NuOWMxMDJfc3RvcmVfdmFsKHN0cnVjdCBjbGFzc19kZXZpY2UqIGNkLCBjb25zdCBjaGFyKiBidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW07CisJdTggdmFsdWU7CisJc3NpemVfdCBjb3VudDsKKwlpbnQgZXJyOworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmc245YzEwMl9zeXNmc19sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHRvX3ZpZGVvX2RldmljZShjZCkpOworCWlmICghY2FtKSB7CisJCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwl2YWx1ZSA9IHNuOWMxMDJfc3RydG91OChidWYsIGxlbiwgJmNvdW50KTsKKwlpZiAoIWNvdW50KSB7CisJCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwllcnIgPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIHZhbHVlLCBjYW0tPnN5c2ZzLnJlZyk7CisJaWYgKGVycikgeworCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJREJHKDIsICJXcml0dGVuIFNOOUMxMFggcmVnLiAweCUwMlgsIHZhbC4gMHglMDJYIiwKKwkgICAgY2FtLT5zeXNmcy5yZWcsIHZhbHVlKQorCURCRygzLCAiV3JpdHRlbiBieXRlczogJXpkIiwgY291bnQpCisKKwl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworCitzdGF0aWMgc3NpemVfdCBzbjljMTAyX3Nob3dfaTJjX3JlZyhzdHJ1Y3QgY2xhc3NfZGV2aWNlKiBjZCwgY2hhciogYnVmKQoreworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtOworCXNzaXplX3QgY291bnQ7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZzbjljMTAyX3N5c2ZzX2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodG9fdmlkZW9fZGV2aWNlKGNkKSk7CisJaWYgKCFjYW0pIHsKKwkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWNvdW50ID0gc3ByaW50ZihidWYsICIldVxuIiwgY2FtLT5zeXNmcy5pMmNfcmVnKTsKKworCURCRygzLCAiUmVhZCBieXRlczogJXpkIiwgY291bnQpCisKKwl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworCitzdGF0aWMgc3NpemVfdCAKK3NuOWMxMDJfc3RvcmVfaTJjX3JlZyhzdHJ1Y3QgY2xhc3NfZGV2aWNlKiBjZCwgY29uc3QgY2hhciogYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtOworCXU4IGluZGV4OworCXNzaXplX3QgY291bnQ7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZzbjljMTAyX3N5c2ZzX2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodG9fdmlkZW9fZGV2aWNlKGNkKSk7CisJaWYgKCFjYW0pIHsKKwkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWluZGV4ID0gc245YzEwMl9zdHJ0b3U4KGJ1ZiwgbGVuLCAmY291bnQpOworCWlmICghY291bnQpIHsKKwkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNhbS0+c3lzZnMuaTJjX3JlZyA9IGluZGV4OworCisJREJHKDIsICJNb3ZlZCBzZW5zb3IgcmVnaXN0ZXIgaW5kZXggdG8gMHglMDJYIiwgY2FtLT5zeXNmcy5pMmNfcmVnKQorCURCRygzLCAiV3JpdHRlbiBieXRlczogJXpkIiwgY291bnQpCisKKwl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworCitzdGF0aWMgc3NpemVfdCBzbjljMTAyX3Nob3dfaTJjX3ZhbChzdHJ1Y3QgY2xhc3NfZGV2aWNlKiBjZCwgY2hhciogYnVmKQoreworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtOworCXNzaXplX3QgY291bnQ7CisJaW50IHZhbDsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJnNuOWMxMDJfc3lzZnNfbG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh0b192aWRlb19kZXZpY2UoY2QpKTsKKwlpZiAoIWNhbSkgeworCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCEoY2FtLT5zZW5zb3ItPnN5c2ZzX29wcyAmIFNOOUMxMDJfSTJDX1JFQUQpKSB7CisJCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisKKwlpZiAoKHZhbCA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCBjYW0tPnN5c2ZzLmkyY19yZWcpKSA8IDApIHsKKwkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCXJldHVybiAtRUlPOworCX0KKworCWNvdW50ID0gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsKTsKKworCURCRygzLCAiUmVhZCBieXRlczogJXpkIiwgY291bnQpCisKKwl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30gCisKKworc3RhdGljIHNzaXplX3QKK3NuOWMxMDJfc3RvcmVfaTJjX3ZhbChzdHJ1Y3QgY2xhc3NfZGV2aWNlKiBjZCwgY29uc3QgY2hhciogYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtOworCXU4IHZhbHVlOworCXNzaXplX3QgY291bnQ7CisJaW50IGVycjsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJnNuOWMxMDJfc3lzZnNfbG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh0b192aWRlb19kZXZpY2UoY2QpKTsKKwlpZiAoIWNhbSkgeworCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCEoY2FtLT5zZW5zb3ItPnN5c2ZzX29wcyAmIFNOOUMxMDJfSTJDX1dSSVRFKSkgeworCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCisJdmFsdWUgPSBzbjljMTAyX3N0cnRvdTgoYnVmLCBsZW4sICZjb3VudCk7CisJaWYgKCFjb3VudCkgeworCQl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZXJyID0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCBjYW0tPnN5c2ZzLmkyY19yZWcsIHZhbHVlKTsKKwlpZiAoZXJyKSB7CisJCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlEQkcoMiwgIldyaXR0ZW4gc2Vuc29yIHJlZy4gMHglMDJYLCB2YWwuIDB4JTAyWCIsCisJICAgIGNhbS0+c3lzZnMuaTJjX3JlZywgdmFsdWUpCisJREJHKDMsICJXcml0dGVuIGJ5dGVzOiAlemQiLCBjb3VudCkKKworCXVwKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCisKK3N0YXRpYyBzc2l6ZV90CitzbjljMTAyX3N0b3JlX2dyZWVuKHN0cnVjdCBjbGFzc19kZXZpY2UqIGNkLCBjb25zdCBjaGFyKiBidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW07CisJZW51bSBzbjljMTAyX2JyaWRnZSBicmlkZ2U7CisJc3NpemVfdCByZXMgPSAwOworCXU4IHZhbHVlOworCXNzaXplX3QgY291bnQ7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZzbjljMTAyX3N5c2ZzX2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodG9fdmlkZW9fZGV2aWNlKGNkKSk7CisJaWYgKCFjYW0pIHsKKwkJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWJyaWRnZSA9IGNhbS0+YnJpZGdlOworCisJdXAoJnNuOWMxMDJfc3lzZnNfbG9jayk7CisKKwl2YWx1ZSA9IHNuOWMxMDJfc3RydG91OChidWYsIGxlbiwgJmNvdW50KTsKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoYnJpZGdlKSB7CisJY2FzZSBCUklER0VfU045QzEwMToKKwljYXNlIEJSSURHRV9TTjlDMTAyOgorCQlpZiAodmFsdWUgPiAweDBmKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICgocmVzID0gc245YzEwMl9zdG9yZV9yZWcoY2QsICIweDExIiwgNCkpID49IDApCisJCQlyZXMgPSBzbjljMTAyX3N0b3JlX3ZhbChjZCwgYnVmLCBsZW4pOworCQlicmVhazsKKwljYXNlIEJSSURHRV9TTjlDMTAzOgorCQlpZiAodmFsdWUgPiAweDdmKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICgocmVzID0gc245YzEwMl9zdG9yZV9yZWcoY2QsICIweDA0IiwgNCkpID49IDApCisJCQlyZXMgPSBzbjljMTAyX3N0b3JlX3ZhbChjZCwgYnVmLCBsZW4pOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCisKK3N0YXRpYyBzc2l6ZV90CitzbjljMTAyX3N0b3JlX2JsdWUoc3RydWN0IGNsYXNzX2RldmljZSogY2QsIGNvbnN0IGNoYXIqIGJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzc2l6ZV90IHJlcyA9IDA7CisJdTggdmFsdWU7CisJc3NpemVfdCBjb3VudDsKKworCXZhbHVlID0gc245YzEwMl9zdHJ0b3U4KGJ1ZiwgbGVuLCAmY291bnQpOworCWlmICghY291bnQgfHwgdmFsdWUgPiAweDdmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgocmVzID0gc245YzEwMl9zdG9yZV9yZWcoY2QsICIweDA2IiwgNCkpID49IDApCisJCXJlcyA9IHNuOWMxMDJfc3RvcmVfdmFsKGNkLCBidWYsIGxlbik7CisKKwlyZXR1cm4gcmVzOworfQorCisKK3N0YXRpYyBzc2l6ZV90CitzbjljMTAyX3N0b3JlX3JlZChzdHJ1Y3QgY2xhc3NfZGV2aWNlKiBjZCwgY29uc3QgY2hhciogYnVmLCBzaXplX3QgbGVuKQoreworCXNzaXplX3QgcmVzID0gMDsKKwl1OCB2YWx1ZTsKKwlzc2l6ZV90IGNvdW50OworCisJdmFsdWUgPSBzbjljMTAyX3N0cnRvdTgoYnVmLCBsZW4sICZjb3VudCk7CisJaWYgKCFjb3VudCB8fCB2YWx1ZSA+IDB4N2YpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKChyZXMgPSBzbjljMTAyX3N0b3JlX3JlZyhjZCwgIjB4MDUiLCA0KSkgPj0gMCkKKwkJcmVzID0gc245YzEwMl9zdG9yZV92YWwoY2QsIGJ1ZiwgbGVuKTsKKworCXJldHVybiByZXM7Cit9CisKKworc3RhdGljIHNzaXplX3Qgc245YzEwMl9zaG93X2ZyYW1lX2hlYWRlcihzdHJ1Y3QgY2xhc3NfZGV2aWNlKiBjZCwgY2hhciogYnVmKQoreworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtOworCXNzaXplX3QgY291bnQ7CisKKwljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh0b192aWRlb19kZXZpY2UoY2QpKTsKKwlpZiAoIWNhbSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwljb3VudCA9IHNpemVvZihjYW0tPnN5c2ZzLmZyYW1lX2hlYWRlcik7CisJbWVtY3B5KGJ1ZiwgY2FtLT5zeXNmcy5mcmFtZV9oZWFkZXIsIGNvdW50KTsKKworCURCRygzLCAiRnJhbWUgaGVhZGVyLCByZWFkIGJ5dGVzOiAlemQiLCBjb3VudCkKKworCXJldHVybiBjb3VudDsKK30gCisKKworc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHJlZywgU19JUlVHTyB8IFNfSVdVU1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgc245YzEwMl9zaG93X3JlZywgc245YzEwMl9zdG9yZV9yZWcpOworc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHZhbCwgU19JUlVHTyB8IFNfSVdVU1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgc245YzEwMl9zaG93X3ZhbCwgc245YzEwMl9zdG9yZV92YWwpOworc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGkyY19yZWcsIFNfSVJVR08gfCBTX0lXVVNSLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNuOWMxMDJfc2hvd19pMmNfcmVnLCBzbjljMTAyX3N0b3JlX2kyY19yZWcpOworc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGkyY192YWwsIFNfSVJVR08gfCBTX0lXVVNSLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNuOWMxMDJfc2hvd19pMmNfdmFsLCBzbjljMTAyX3N0b3JlX2kyY192YWwpOworc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGdyZWVuLCBTX0lXVUdPLCBOVUxMLCBzbjljMTAyX3N0b3JlX2dyZWVuKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihibHVlLCBTX0lXVUdPLCBOVUxMLCBzbjljMTAyX3N0b3JlX2JsdWUpOworc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHJlZCwgU19JV1VHTywgTlVMTCwgc245YzEwMl9zdG9yZV9yZWQpOworc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGZyYW1lX2hlYWRlciwgU19JUlVHTywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzbjljMTAyX3Nob3dfZnJhbWVfaGVhZGVyLCBOVUxMKTsKKworCitzdGF0aWMgdm9pZCBzbjljMTAyX2NyZWF0ZV9zeXNmcyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2NGxkZXYgPSBjYW0tPnY0bGRldjsKKworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2NGxkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9yZWcpOworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2NGxkZXYsICZjbGFzc19kZXZpY2VfYXR0cl92YWwpOworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2NGxkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9mcmFtZV9oZWFkZXIpOworCWlmIChjYW0tPmJyaWRnZSA9PSBCUklER0VfU045QzEwMSB8fCBjYW0tPmJyaWRnZSA9PSBCUklER0VfU045QzEwMikKKwkJdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHY0bGRldiwgJmNsYXNzX2RldmljZV9hdHRyX2dyZWVuKTsKKwllbHNlIGlmIChjYW0tPmJyaWRnZSA9PSBCUklER0VfU045QzEwMykgeworCQl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfYmx1ZSk7CisJCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2NGxkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9yZWQpOworCX0KKwlpZiAoY2FtLT5zZW5zb3ItPnN5c2ZzX29wcykgeworCQl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodjRsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfaTJjX3JlZyk7CisJCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2NGxkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9pMmNfdmFsKTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludAorc245YzEwMl9zZXRfcGl4X2Zvcm1hdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGl4KQoreworCWludCBlcnIgPSAwOworCisJaWYgKHBpeC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1NOOUMxMFgpCisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIGNhbS0+cmVnWzB4MThdIHwgMHg4MCwgMHgxOCk7CisJZWxzZQorCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCBjYW0tPnJlZ1sweDE4XSAmIDB4N2YsIDB4MTgpOworCisJcmV0dXJuIGVyciA/IC1FSU8gOiAwOworfQorCisKK3N0YXRpYyBpbnQKK3NuOWMxMDJfc2V0X2NvbXByZXNzaW9uKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uKiBjb21wcmVzc2lvbikKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmIChjb21wcmVzc2lvbi0+cXVhbGl0eSA9PSAwKQorCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCBjYW0tPnJlZ1sweDE3XSB8IDB4MDEsIDB4MTcpOworCWVsc2UgaWYgKGNvbXByZXNzaW9uLT5xdWFsaXR5ID09IDEpCisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIGNhbS0+cmVnWzB4MTddICYgMHhmZSwgMHgxNyk7CisKKwlyZXR1cm4gZXJyID8gLUVJTyA6IDA7Cit9CisKKworc3RhdGljIGludCBzbjljMTAyX3NldF9zY2FsZShzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgdTggc2NhbGUpCit7CisJdTggciA9IDA7CisJaW50IGVyciA9IDA7CisKKwlpZiAoc2NhbGUgPT0gMSkKKwkJciA9IGNhbS0+cmVnWzB4MThdICYgMHhjZjsKKwllbHNlIGlmIChzY2FsZSA9PSAyKSB7CisJCXIgPSBjYW0tPnJlZ1sweDE4XSAmIDB4Y2Y7CisJCXIgfD0gMHgxMDsKKwl9IGVsc2UgaWYgKHNjYWxlID09IDQpCisJCXIgPSBjYW0tPnJlZ1sweDE4XSB8IDB4MjA7CisKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCByLCAweDE4KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gLUVJTzsKKworCVBEQkdHKCJTY2FsaW5nIGZhY3RvcjogJXUiLCBzY2FsZSkKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc245YzEwMl9zZXRfY3JvcChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgc3RydWN0IHY0bDJfcmVjdCogcmVjdCkKK3sKKwlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSBjYW0tPnNlbnNvcjsKKwl1OCBoX3N0YXJ0ID0gKHU4KShyZWN0LT5sZWZ0IC0gcy0+Y3JvcGNhcC5ib3VuZHMubGVmdCksCisJICAgdl9zdGFydCA9ICh1OCkocmVjdC0+dG9wIC0gcy0+Y3JvcGNhcC5ib3VuZHMudG9wKSwKKwkgICBoX3NpemUgPSAodTgpKHJlY3QtPndpZHRoIC8gMTYpLAorCSAgIHZfc2l6ZSA9ICh1OCkocmVjdC0+aGVpZ2h0IC8gMTYpOworCWludCBlcnIgPSAwOworCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgaF9zdGFydCwgMHgxMik7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgdl9zdGFydCwgMHgxMyk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgaF9zaXplLCAweDE1KTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCB2X3NpemUsIDB4MTYpOworCWlmIChlcnIpCisJCXJldHVybiAtRUlPOworCisJUERCR0coImhfc3RhcnQsIHZfc3RhcnQsIGhfc2l6ZSwgdl9zaXplLCBob19zaXplLCB2b19zaXplICIKKwkgICAgICAiJXUgJXUgJXUgJXUiLCBoX3N0YXJ0LCB2X3N0YXJ0LCBoX3NpemUsIHZfc2l6ZSkKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc245YzEwMl9pbml0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQoreworCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9IGNhbS0+c2Vuc29yOworCXN0cnVjdCB2NGwyX2NvbnRyb2wgY3RybDsKKwlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsOworCXN0cnVjdCB2NGwyX3JlY3QqIHJlY3Q7CisJdTggaSA9IDAsIG4gPSAwOworCWludCBlcnIgPSAwOworCisJaWYgKCEoY2FtLT5zdGF0ZSAmIERFVl9JTklUSUFMSVpFRCkpIHsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FtLT5vcGVuKTsKKwkJcWN0cmwgPSBzLT5xY3RybDsKKwkJcmVjdCA9ICYocy0+Y3JvcGNhcC5kZWZyZWN0KTsKKwl9IGVsc2UgeyAvKiB1c2UgY3VycmVudCB2YWx1ZXMgKi8KKwkJcWN0cmwgPSBzLT5fcWN0cmw7CisJCXJlY3QgPSAmKHMtPl9yZWN0KTsKKwl9CisKKwllcnIgKz0gc245YzEwMl9zZXRfc2NhbGUoY2FtLCByZWN0LT53aWR0aCAvIHMtPnBpeF9mb3JtYXQud2lkdGgpOworCWVyciArPSBzbjljMTAyX3NldF9jcm9wKGNhbSwgcmVjdCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChzLT5pbml0KSB7CisJCWVyciA9IHMtPmluaXQoY2FtKTsKKwkJaWYgKGVycikgeworCQkJREJHKDMsICJTZW5zb3IgaW5pdGlhbGl6YXRpb24gZmFpbGVkIikKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlpZiAoIShjYW0tPnN0YXRlICYgREVWX0lOSVRJQUxJWkVEKSkKKwkJY2FtLT5jb21wcmVzc2lvbi5xdWFsaXR5ID0gIGNhbS0+cmVnWzB4MTddICYgMHgwMSA/IDAgOiAxOworCWVsc2UKKwkJZXJyICs9IHNuOWMxMDJfc2V0X2NvbXByZXNzaW9uKGNhbSwgJmNhbS0+Y29tcHJlc3Npb24pOworCWVyciArPSBzbjljMTAyX3NldF9waXhfZm9ybWF0KGNhbSwgJnMtPnBpeF9mb3JtYXQpOworCWlmIChzLT5zZXRfcGl4X2Zvcm1hdCkKKwkJZXJyICs9IHMtPnNldF9waXhfZm9ybWF0KGNhbSwgJnMtPnBpeF9mb3JtYXQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAocy0+cGl4X2Zvcm1hdC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU045QzEwWCkKKwkJREJHKDMsICJDb21wcmVzc2VkIHZpZGVvIGZvcm1hdCBpcyBhY3RpdmUsIHF1YWxpdHkgJWQiLCAKKwkJICAgIGNhbS0+Y29tcHJlc3Npb24ucXVhbGl0eSkKKwllbHNlCisJCURCRygzLCAiVW5jb21wcmVzc2VkIHZpZGVvIGZvcm1hdCBpcyBhY3RpdmUiKQorCisJaWYgKHMtPnNldF9jcm9wKQorCQlpZiAoKGVyciA9IHMtPnNldF9jcm9wKGNhbSwgcmVjdCkpKSB7CisJCQlEQkcoMywgInNldF9jcm9wKCkgZmFpbGVkIikKKwkJCXJldHVybiBlcnI7CisJCX0KKworCWlmIChzLT5zZXRfY3RybCkgeworCQluID0gc2l6ZW9mKHMtPnFjdHJsKSAvIHNpemVvZihzLT5xY3RybFswXSk7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCQlpZiAocy0+cWN0cmxbaV0uaWQgIT0gMCAmJiAKKwkJCSAgICAhKHMtPnFjdHJsW2ldLmZsYWdzICYgVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQpKSB7CisJCQkJY3RybC5pZCA9IHMtPnFjdHJsW2ldLmlkOworCQkJCWN0cmwudmFsdWUgPSBxY3RybFtpXS5kZWZhdWx0X3ZhbHVlOworCQkJCWVyciA9IHMtPnNldF9jdHJsKGNhbSwgJmN0cmwpOworCQkJCWlmIChlcnIpIHsKKwkJCQkJREJHKDMsICJTZXQgJXMgY29udHJvbCBmYWlsZWQiLAorCQkJCQkgICAgcy0+cWN0cmxbaV0ubmFtZSkKKwkJCQkJcmV0dXJuIGVycjsKKwkJCQl9CisJCQkJREJHKDMsICJJbWFnZSBzZW5zb3Igc3VwcG9ydHMgJyVzJyBjb250cm9sIiwKKwkJCQkgICAgcy0+cWN0cmxbaV0ubmFtZSkKKwkJCX0KKwl9CisKKwlpZiAoIShjYW0tPnN0YXRlICYgREVWX0lOSVRJQUxJWkVEKSkgeworCQlpbml0X01VVEVYKCZjYW0tPmZpbGVvcF9zZW0pOworCQlzcGluX2xvY2tfaW5pdCgmY2FtLT5xdWV1ZV9sb2NrKTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FtLT53YWl0X2ZyYW1lKTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FtLT53YWl0X3N0cmVhbSk7CisJCWNhbS0+bnJlYWRidWZmZXJzID0gMjsKKwkJbWVtY3B5KHMtPl9xY3RybCwgcy0+cWN0cmwsIHNpemVvZihzLT5xY3RybCkpOworCQltZW1jcHkoJihzLT5fcmVjdCksICYocy0+Y3JvcGNhcC5kZWZyZWN0KSwgCisJCSAgICAgICBzaXplb2Yoc3RydWN0IHY0bDJfcmVjdCkpOworCQljYW0tPnN0YXRlIHw9IERFVl9JTklUSUFMSVpFRDsKKwl9CisKKwlEQkcoMiwgIkluaXRpYWxpemF0aW9uIHN1Y2NlZWRlZCIpCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgc245YzEwMl9yZWxlYXNlX3Jlc291cmNlcyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlkb3duKCZzbjljMTAyX3N5c2ZzX2xvY2spOworCisJREJHKDIsICJWNEwyIGRldmljZSAvZGV2L3ZpZGVvJWQgZGVyZWdpc3RlcmVkIiwgY2FtLT52NGxkZXYtPm1pbm9yKQorCXZpZGVvX3NldF9kcnZkYXRhKGNhbS0+djRsZGV2LCBOVUxMKTsKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZShjYW0tPnY0bGRldik7CisKKwl1cCgmc245YzEwMl9zeXNmc19sb2NrKTsKKworCWtmcmVlKGNhbS0+Y29udHJvbF9idWZmZXIpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgc245YzEwMl9vcGVuKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlKiBmaWxwKQoreworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtOworCWludCBlcnIgPSAwOworCisJLyoKKwkgICBUaGlzIGlzIHRoZSBvbmx5IHNhZmUgd2F5IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIHdpdGgKKwkgICBkaXNjb25uZWN0CisJKi8KKwlpZiAoIWRvd25fcmVhZF90cnlsb2NrKCZzbjljMTAyX2Rpc2Nvbm5lY3QpKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjYW0tPmRldl9zZW0pKSB7CisJCXVwX3JlYWQoJnNuOWMxMDJfZGlzY29ubmVjdCk7CisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQorCisJaWYgKGNhbS0+dXNlcnMpIHsKKwkJREJHKDIsICJEZXZpY2UgL2Rldi92aWRlbyVkIGlzIGJ1c3kuLi4iLCBjYW0tPnY0bGRldi0+bWlub3IpCisJCWlmICgoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHx8CisJCSAgICAoZmlscC0+Zl9mbGFncyAmIE9fTkRFTEFZKSkgeworCQkJZXJyID0gLUVXT1VMREJMT0NLOworCQkJZ290byBvdXQ7CisJCX0KKwkJdXAoJmNhbS0+ZGV2X3NlbSk7CisJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV9leGNsdXNpdmUoY2FtLT5vcGVuLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhY2FtLT51c2Vycyk7CisJCWlmIChlcnIpIHsKKwkJCXVwX3JlYWQoJnNuOWMxMDJfZGlzY29ubmVjdCk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgeworCQkJdXBfcmVhZCgmc245YzEwMl9kaXNjb25uZWN0KTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWRvd24oJmNhbS0+ZGV2X3NlbSk7CisJfQorCisKKwlpZiAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSB7CisJCWVyciA9IHNuOWMxMDJfaW5pdChjYW0pOworCQlpZiAoZXJyKSB7CisJCQlEQkcoMSwgIkluaXRpYWxpemF0aW9uIGZhaWxlZCBhZ2Fpbi4gIgorCQkJICAgICAgICJJIHdpbGwgcmV0cnkgb24gbmV4dCBvcGVuKCkuIikKKwkJCWdvdG8gb3V0OworCQl9CisJCWNhbS0+c3RhdGUgJj0gfkRFVl9NSVNDT05GSUdVUkVEOworCX0KKworCWlmICgoZXJyID0gc245YzEwMl9zdGFydF90cmFuc2ZlcihjYW0pKSkKKwkJZ290byBvdXQ7CisKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBjYW07CisJY2FtLT51c2VycysrOworCWNhbS0+aW8gPSBJT19OT05FOworCWNhbS0+c3RyZWFtID0gU1RSRUFNX09GRjsKKwljYW0tPm5idWZmZXJzID0gMDsKKwljYW0tPmZyYW1lX2NvdW50ID0gMDsKKwlzbjljMTAyX2VtcHR5X2ZyYW1lcXVldWVzKGNhbSk7CisKKwlEQkcoMywgIlZpZGVvIGRldmljZSAvZGV2L3ZpZGVvJWQgaXMgb3BlbiIsIGNhbS0+djRsZGV2LT5taW5vcikKKworb3V0OgorCXVwKCZjYW0tPmRldl9zZW0pOworCXVwX3JlYWQoJnNuOWMxMDJfZGlzY29ubmVjdCk7CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHNuOWMxMDJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSogZmlscCkKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCisJZG93bigmY2FtLT5kZXZfc2VtKTsgLyogcHJldmVudCBkaXNjb25uZWN0KCkgdG8gYmUgY2FsbGVkICovCisKKwlzbjljMTAyX3N0b3BfdHJhbnNmZXIoY2FtKTsKKworCXNuOWMxMDJfcmVsZWFzZV9idWZmZXJzKGNhbSk7CisKKwlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJc245YzEwMl9yZWxlYXNlX3Jlc291cmNlcyhjYW0pOworCQl1cCgmY2FtLT5kZXZfc2VtKTsKKwkJa2ZyZWUoY2FtKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY2FtLT51c2Vycy0tOworCXdha2VfdXBfaW50ZXJydXB0aWJsZV9ucigmY2FtLT5vcGVuLCAxKTsKKworCURCRygzLCAiVmlkZW8gZGV2aWNlIC9kZXYvdmlkZW8lZCBjbG9zZWQiLCBjYW0tPnY0bGRldi0+bWlub3IpCisKKwl1cCgmY2FtLT5kZXZfc2VtKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzc2l6ZV90CitzbjljMTAyX3JlYWQoc3RydWN0IGZpbGUqIGZpbHAsIGNoYXIgX191c2VyICogYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCogZl9wb3MpCit7CisJc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKwlzdHJ1Y3Qgc245YzEwMl9mcmFtZV90KiBmLCAqIGk7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCWludCBlcnIgPSAwOworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY2FtLT5maWxlb3Bfc2VtKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgeworCQlEQkcoMSwgIkRldmljZSBub3QgcHJlc2VudCIpCisJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSB7CisJCURCRygxLCAiVGhlIGNhbWVyYSBpcyBtaXNjb25maWd1cmVkLiBDbG9zZSBhbmQgb3BlbiBpdCBhZ2Fpbi4iKQorCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGNhbS0+aW8gPT0gSU9fTU1BUCkgeworCQlEQkcoMywgIkNsb3NlIGFuZCBvcGVuIHRoZSBkZXZpY2UgYWdhaW4gdG8gY2hvb3NlICIKKwkJICAgICAgICJ0aGUgcmVhZCBtZXRob2QiKQorCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNhbS0+aW8gPT0gSU9fTk9ORSkgeworCQlpZiAoIXNuOWMxMDJfcmVxdWVzdF9idWZmZXJzKGNhbSxjYW0tPm5yZWFkYnVmZmVycywgSU9fUkVBRCkpIHsKKwkJCURCRygxLCAicmVhZCgpIGZhaWxlZCwgbm90IGVub3VnaCBtZW1vcnkiKQorCQkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQljYW0tPmlvID0gSU9fUkVBRDsKKwkJY2FtLT5zdHJlYW0gPSBTVFJFQU1fT047CisJCXNuOWMxMDJfcXVldWVfdW51c2VkZnJhbWVzKGNhbSk7CisJfQorCisJaWYgKCFjb3VudCkgeworCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGxpc3RfZW1wdHkoJmNhbS0+b3V0cXVldWUpKSB7CisJCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUKKwkJICAgICAgKCBjYW0tPndhaXRfZnJhbWUsIAorCQkgICAgICAgICghbGlzdF9lbXB0eSgmY2FtLT5vdXRxdWV1ZSkpIHx8CisJCSAgICAgICAgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB8fAorCQkJKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgKTsKKwkJaWYgKGVycikgeworCQkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgeworCQkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlpZiAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSB7CisJCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorCisJZiA9IGxpc3RfZW50cnkoY2FtLT5vdXRxdWV1ZS5wcmV2LCBzdHJ1Y3Qgc245YzEwMl9mcmFtZV90LCBmcmFtZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGksICZjYW0tPm91dHF1ZXVlLCBmcmFtZSkKKwkJaS0+c3RhdGUgPSBGX1VOVVNFRDsKKwlJTklUX0xJU1RfSEVBRCgmY2FtLT5vdXRxdWV1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKworCXNuOWMxMDJfcXVldWVfdW51c2VkZnJhbWVzKGNhbSk7CisKKwlpZiAoY291bnQgPiBmLT5idWYuYnl0ZXN1c2VkKQorCQljb3VudCA9IGYtPmJ1Zi5ieXRlc3VzZWQ7CisKKwlpZiAoY29weV90b191c2VyKGJ1ZiwgZi0+YnVmbWVtLCBjb3VudCkpIHsKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwkqZl9wb3MgKz0gY291bnQ7CisKKwlQREJHRygiRnJhbWUgIyVsdSwgYnl0ZXMgcmVhZDogJXp1IiwgKHVuc2lnbmVkIGxvbmcpZi0+YnVmLmluZGV4LGNvdW50KQorCisJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKworc3RhdGljIHVuc2lnbmVkIGludCBzbjljMTAyX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9zZW0pKQorCQlyZXR1cm4gUE9MTEVSUjsKKworCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgeworCQlEQkcoMSwgIkRldmljZSBub3QgcHJlc2VudCIpCisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgeworCQlEQkcoMSwgIlRoZSBjYW1lcmEgaXMgbWlzY29uZmlndXJlZC4gQ2xvc2UgYW5kIG9wZW4gaXQgYWdhaW4uIikKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAoY2FtLT5pbyA9PSBJT19OT05FKSB7CisJCWlmICghc245YzEwMl9yZXF1ZXN0X2J1ZmZlcnMoY2FtLCBjYW0tPm5yZWFkYnVmZmVycywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT19SRUFEKSkgeworCQkJREJHKDEsICJwb2xsKCkgZmFpbGVkLCBub3QgZW5vdWdoIG1lbW9yeSIpCisJCQlnb3RvIGVycm9yOworCQl9CisJCWNhbS0+aW8gPSBJT19SRUFEOworCQljYW0tPnN0cmVhbSA9IFNUUkVBTV9PTjsKKwl9CisKKwlpZiAoY2FtLT5pbyA9PSBJT19SRUFEKQorCQlzbjljMTAyX3F1ZXVlX3VudXNlZGZyYW1lcyhjYW0pOworCisJcG9sbF93YWl0KGZpbHAsICZjYW0tPndhaXRfZnJhbWUsIHdhaXQpOworCisJaWYgKCFsaXN0X2VtcHR5KCZjYW0tPm91dHF1ZXVlKSkKKwkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOworCisJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisKKwlyZXR1cm4gbWFzazsKKworZXJyb3I6CisJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJcmV0dXJuIFBPTExFUlI7Cit9CisKKworc3RhdGljIHZvaWQgc245YzEwMl92bV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCogdm1hKQoreworCXN0cnVjdCBzbjljMTAyX2ZyYW1lX3QqIGYgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwlmLT52bWFfdXNlX2NvdW50Kys7Cit9CisKKworc3RhdGljIHZvaWQgc245YzEwMl92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QqIHZtYSkKK3sKKwkvKiBOT1RFOiBidWZmZXJzIGFyZSBub3QgZnJlZWQgaGVyZSAqLworCXN0cnVjdCBzbjljMTAyX2ZyYW1lX3QqIGYgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwlmLT52bWFfdXNlX2NvdW50LS07Cit9CisKKworc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbjljMTAyX3ZtX29wcyA9IHsKKwkub3BlbiA9IHNuOWMxMDJfdm1fb3BlbiwKKwkuY2xvc2UgPSBzbjljMTAyX3ZtX2Nsb3NlLAorfTsKKworCitzdGF0aWMgaW50IHNuOWMxMDJfbW1hcChzdHJ1Y3QgZmlsZSogZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCisJICAgICAgICAgICAgICBzdGFydCA9IHZtYS0+dm1fc3RhcnQsCisJICAgICAgICAgICAgICBwb3MsCisJICAgICAgICAgICAgICBwYWdlOworCXUzMiBpOworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmY2FtLT5maWxlb3Bfc2VtKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWlmIChjYW0tPnN0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgeworCQlEQkcoMSwgIkRldmljZSBub3QgcHJlc2VudCIpCisJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSB7CisJCURCRygxLCAiVGhlIGNhbWVyYSBpcyBtaXNjb25maWd1cmVkLiBDbG9zZSBhbmQgb3BlbiBpdCBhZ2Fpbi4iKQorCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGNhbS0+aW8gIT0gSU9fTU1BUCB8fCAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkgfHwKKwkgICAgc2l6ZSAhPSBQQUdFX0FMSUdOKGNhbS0+ZnJhbWVbMF0uYnVmLmxlbmd0aCkpIHsKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5idWZmZXJzOyBpKyspIHsKKwkJaWYgKChjYW0tPmZyYW1lW2ldLmJ1Zi5tLm9mZnNldD4+UEFHRV9TSElGVCkgPT0gdm1hLT52bV9wZ29mZikKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSBjYW0tPm5idWZmZXJzKSB7CisJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBWTV9JTyBpcyBldmVudHVhbGx5IGdvaW5nIHRvIHJlcGxhY2UgUGFnZVJlc2VydmVkIGFsdG9nZXRoZXIgKi8KKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPOworCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7IC8qIGF2b2lkIHRvIHN3YXAgb3V0IHRoaXMgVk1BICovCisKKwlwb3MgPSAodW5zaWduZWQgbG9uZyljYW0tPmZyYW1lW2ldLmJ1Zm1lbTsKKwl3aGlsZSAoc2l6ZSA+IDApIHsgLyogc2l6ZSBpcyBwYWdlLWFsaWduZWQgKi8KKwkJcGFnZSA9IHZtYWxsb2NfdG9fcGZuKCh2b2lkICopcG9zKTsKKwkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwYWdlLCBQQUdFX1NJWkUsCisJCSAgICAgICAgICAgICAgICAgICAgdm1hLT52bV9wYWdlX3Byb3QpKSB7CisJCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJCXN0YXJ0ICs9IFBBR0VfU0laRTsKKwkJcG9zICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCisJdm1hLT52bV9vcHMgPSAmc245YzEwMl92bV9vcHM7CisJdm1hLT52bV9wcml2YXRlX2RhdGEgPSAmY2FtLT5mcmFtZVtpXTsKKworCXNuOWMxMDJfdm1fb3Blbih2bWEpOworCisJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHNuOWMxMDJfaW9jdGxfdjRsMihzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSogZmlscCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICogYXJnKQoreworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisKKwlzd2l0Y2ggKGNtZCkgeworCisJY2FzZSBWSURJT0NfUVVFUllDQVA6CisJeworCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5IGNhcCA9IHsKKwkJCS5kcml2ZXIgPSAic245YzEwMiIsCisJCQkudmVyc2lvbiA9IFNOOUMxMDJfTU9EVUxFX1ZFUlNJT05fQ09ERSwKKwkJCS5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgCisJCQkgICAgICAgICAgICAgICAgVjRMMl9DQVBfUkVBRFdSSVRFIHwKKwkJCSAgICAgICAgICAgICAgICBWNEwyX0NBUF9TVFJFQU1JTkcsCisJCX07CisKKwkJc3RybGNweShjYXAuY2FyZCwgY2FtLT52NGxkZXYtPm5hbWUsIHNpemVvZihjYXAuY2FyZCkpOworCQlpZiAodXNiX21ha2VfcGF0aChjYW0tPnVzYmRldiwgY2FwLmJ1c19pbmZvLAorCQkgICAgc2l6ZW9mKGNhcC5idXNfaW5mbykpIDwgMCkKKwkJCXN0cmxjcHkoY2FwLmJ1c19pbmZvLCBjYW0tPmRldi5idXNfaWQsCisJCQkgICAgICAgIHNpemVvZihjYXAuYnVzX2luZm8pKTsKKworCQlpZiAoY29weV90b191c2VyKGFyZywgJmNhcCwgc2l6ZW9mKGNhcCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfRU5VTUlOUFVUOgorCXsKKwkJc3RydWN0IHY0bDJfaW5wdXQgaTsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmksIGFyZywgc2l6ZW9mKGkpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChpLmluZGV4KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbWVtc2V0KCZpLCAwLCBzaXplb2YoaSkpOworCQlzdHJjcHkoaS5uYW1lLCAiVVNCIik7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZpLCBzaXplb2YoaSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfR19JTlBVVDoKKwljYXNlIFZJRElPQ19TX0lOUFVUOgorCXsKKwkJaW50IGluZGV4OworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmaW5kZXgsIGFyZywgc2l6ZW9mKGluZGV4KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoaW5kZXggIT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKKwl7CisJCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9IGNhbS0+c2Vuc29yOworCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcWM7CisJCXU4IGksIG47CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZxYywgYXJnLCBzaXplb2YocWMpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCW4gPSBzaXplb2Yocy0+cWN0cmwpIC8gc2l6ZW9mKHMtPnFjdHJsWzBdKTsKKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJCWlmIChxYy5pZCAmJiBxYy5pZCA9PSBzLT5xY3RybFtpXS5pZCkgeworCQkJCW1lbWNweSgmcWMsICYocy0+cWN0cmxbaV0pLCBzaXplb2YocWMpKTsKKwkJCQlpZiAoY29weV90b191c2VyKGFyZywgJnFjLCBzaXplb2YocWMpKSkKKwkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2FzZSBWSURJT0NfR19DVFJMOgorCXsKKwkJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gY2FtLT5zZW5zb3I7CisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgY3RybDsKKwkJaW50IGVyciA9IDA7CisKKwkJaWYgKCFzLT5nZXRfY3RybCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmY3RybCwgYXJnLCBzaXplb2YoY3RybCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJZXJyID0gcy0+Z2V0X2N0cmwoY2FtLCAmY3RybCk7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZjdHJsLCBzaXplb2YoY3RybCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0dXJuIGVycjsKKwl9CisKKwljYXNlIFZJRElPQ19TX0NUUkxfT0xEOgorCWNhc2UgVklESU9DX1NfQ1RSTDoKKwl7CisJCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9IGNhbS0+c2Vuc29yOworCQlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7CisJCXU4IGksIG47CisJCWludCBlcnIgPSAwOworCisJCWlmICghcy0+c2V0X2N0cmwpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmN0cmwsIGFyZywgc2l6ZW9mKGN0cmwpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCW4gPSBzaXplb2Yocy0+cWN0cmwpIC8gc2l6ZW9mKHMtPnFjdHJsWzBdKTsKKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJCWlmIChjdHJsLmlkID09IHMtPnFjdHJsW2ldLmlkKSB7CisJCQkJaWYgKGN0cmwudmFsdWUgPCBzLT5xY3RybFtpXS5taW5pbXVtIHx8CisJCQkJICAgIGN0cmwudmFsdWUgPiBzLT5xY3RybFtpXS5tYXhpbXVtKQorCQkJCQlyZXR1cm4gLUVSQU5HRTsKKwkJCQljdHJsLnZhbHVlIC09IGN0cmwudmFsdWUgJSBzLT5xY3RybFtpXS5zdGVwOworCQkJCWJyZWFrOworCQkJfQorCisJCWlmICgoZXJyID0gcy0+c2V0X2N0cmwoY2FtLCAmY3RybCkpKQorCQkJcmV0dXJuIGVycjsKKworCQlzLT5fcWN0cmxbaV0uZGVmYXVsdF92YWx1ZSA9IGN0cmwudmFsdWU7CisKKwkJUERCR0coIlZJRElPQ19TX0NUUkw6IGlkICVsdSwgdmFsdWUgJWx1IiwKKwkJICAgICAgKHVuc2lnbmVkIGxvbmcpY3RybC5pZCwgKHVuc2lnbmVkIGxvbmcpY3RybC52YWx1ZSkKKworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ19DUk9QQ0FQOgorCXsKKwkJc3RydWN0IHY0bDJfY3JvcGNhcCogY2MgPSAmKGNhbS0+c2Vuc29yLT5jcm9wY2FwKTsKKworCQljYy0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJY2MtPnBpeGVsYXNwZWN0Lm51bWVyYXRvciA9IDE7CisJCWNjLT5waXhlbGFzcGVjdC5kZW5vbWluYXRvciA9IDE7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsIGNjLCBzaXplb2YoKmNjKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ19HX0NST1A6CisJeworCQlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSBjYW0tPnNlbnNvcjsKKwkJc3RydWN0IHY0bDJfY3JvcCBjcm9wID0geworCQkJLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCX07CisKKwkJbWVtY3B5KCYoY3JvcC5jKSwgJihzLT5fcmVjdCksIHNpemVvZihzdHJ1Y3QgdjRsMl9yZWN0KSk7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZjcm9wLCBzaXplb2YoY3JvcCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfU19DUk9QOgorCXsKKwkJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gY2FtLT5zZW5zb3I7CisJCXN0cnVjdCB2NGwyX2Nyb3AgY3JvcDsKKwkJc3RydWN0IHY0bDJfcmVjdCogcmVjdDsKKwkJc3RydWN0IHY0bDJfcmVjdCogYm91bmRzID0gJihzLT5jcm9wY2FwLmJvdW5kcyk7CisJCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBpeF9mb3JtYXQgPSAmKHMtPnBpeF9mb3JtYXQpOworCQl1OCBzY2FsZTsKKwkJY29uc3QgZW51bSBzbjljMTAyX3N0cmVhbV9zdGF0ZSBzdHJlYW0gPSBjYW0tPnN0cmVhbTsKKwkJY29uc3QgdTMyIG5idWZmZXJzID0gY2FtLT5uYnVmZmVyczsKKwkJdTMyIGk7CisJCWludCBlcnIgPSAwOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmY3JvcCwgYXJnLCBzaXplb2YoY3JvcCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmVjdCA9ICYoY3JvcC5jKTsKKworCQlpZiAoY3JvcC50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChjYW0tPm1vZHVsZV9wYXJhbS5mb3JjZV9tdW5tYXApCisJCQlmb3IgKGkgPSAwOyBpIDwgY2FtLT5uYnVmZmVyczsgaSsrKQorCQkJCWlmIChjYW0tPmZyYW1lW2ldLnZtYV91c2VfY291bnQpIHsKKwkJCQkJREJHKDMsICJWSURJT0NfU19DUk9QIGZhaWxlZC4gIgorCQkJCQkgICAgICAgIlVubWFwIHRoZSBidWZmZXJzIGZpcnN0LiIpCisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKworCQkvKiBQcmVzZXJ2ZSBSLEcgb3IgQiBvcmlnaW4gKi8KKwkJcmVjdC0+bGVmdCA9IChzLT5fcmVjdC5sZWZ0ICYgMUwpID8KKwkJICAgICAgICAgICAgIHJlY3QtPmxlZnQgfCAxTCA6IHJlY3QtPmxlZnQgJiB+MUw7CisJCXJlY3QtPnRvcCA9IChzLT5fcmVjdC50b3AgJiAxTCkgPworCQkgICAgICAgICAgICByZWN0LT50b3AgfCAxTCA6IHJlY3QtPnRvcCAmIH4xTDsKKworCQlpZiAocmVjdC0+d2lkdGggPCAxNikKKwkJCXJlY3QtPndpZHRoID0gMTY7CisJCWlmIChyZWN0LT5oZWlnaHQgPCAxNikKKwkJCXJlY3QtPmhlaWdodCA9IDE2OworCQlpZiAocmVjdC0+d2lkdGggPiBib3VuZHMtPndpZHRoKQorCQkJcmVjdC0+d2lkdGggPSBib3VuZHMtPndpZHRoOworCQlpZiAocmVjdC0+aGVpZ2h0ID4gYm91bmRzLT5oZWlnaHQpCisJCQlyZWN0LT5oZWlnaHQgPSBib3VuZHMtPmhlaWdodDsKKwkJaWYgKHJlY3QtPmxlZnQgPCBib3VuZHMtPmxlZnQpCisJCQlyZWN0LT5sZWZ0ID0gYm91bmRzLT5sZWZ0OworCQlpZiAocmVjdC0+dG9wIDwgYm91bmRzLT50b3ApCisJCQlyZWN0LT50b3AgPSBib3VuZHMtPnRvcDsKKwkJaWYgKHJlY3QtPmxlZnQgKyByZWN0LT53aWR0aCA+IGJvdW5kcy0+bGVmdCArIGJvdW5kcy0+d2lkdGgpCisJCQlyZWN0LT5sZWZ0ID0gYm91bmRzLT5sZWZ0K2JvdW5kcy0+d2lkdGggLSByZWN0LT53aWR0aDsKKwkJaWYgKHJlY3QtPnRvcCArIHJlY3QtPmhlaWdodCA+IGJvdW5kcy0+dG9wICsgYm91bmRzLT5oZWlnaHQpCisJCQlyZWN0LT50b3AgPSBib3VuZHMtPnRvcCtib3VuZHMtPmhlaWdodCAtIHJlY3QtPmhlaWdodDsKKworCQlyZWN0LT53aWR0aCAmPSB+MTVMOworCQlyZWN0LT5oZWlnaHQgJj0gfjE1TDsKKworCQlpZiAoU045QzEwMl9QUkVTRVJWRV9JTUdTQ0FMRSkgeworCQkJLyogQ2FsY3VsYXRlIHRoZSBhY3R1YWwgc2NhbGluZyBmYWN0b3IgKi8KKwkJCXUzMiBhLCBiOworCQkJYSA9IHJlY3QtPndpZHRoICogcmVjdC0+aGVpZ2h0OworCQkJYiA9IHBpeF9mb3JtYXQtPndpZHRoICogcGl4X2Zvcm1hdC0+aGVpZ2h0OworCQkJc2NhbGUgPSBiID8gKHU4KSgoYSAvIGIpIDwgNCA/IDEgOgorCQkgICAgICAgICAgICAgICAgICAgICAgICAoKGEgLyBiKSA8IDE2ID8gMiA6IDQpKSA6IDE7CisJCX0gZWxzZQorCQkJc2NhbGUgPSAxOworCisJCWlmIChjYW0tPnN0cmVhbSA9PSBTVFJFQU1fT04pCisJCQlpZiAoKGVyciA9IHNuOWMxMDJfc3RyZWFtX2ludGVycnVwdChjYW0pKSkKKwkJCQlyZXR1cm4gZXJyOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmY3JvcCwgc2l6ZW9mKGNyb3ApKSkgeworCQkJY2FtLT5zdHJlYW0gPSBzdHJlYW07CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCisJCWlmIChjYW0tPm1vZHVsZV9wYXJhbS5mb3JjZV9tdW5tYXAgfHwgY2FtLT5pbyA9PSBJT19SRUFEKQorCQkJc245YzEwMl9yZWxlYXNlX2J1ZmZlcnMoY2FtKTsKKworCQllcnIgPSBzbjljMTAyX3NldF9jcm9wKGNhbSwgcmVjdCk7CisJCWlmIChzLT5zZXRfY3JvcCkKKwkJCWVyciArPSBzLT5zZXRfY3JvcChjYW0sIHJlY3QpOworCQllcnIgKz0gc245YzEwMl9zZXRfc2NhbGUoY2FtLCBzY2FsZSk7CisKKwkJaWYgKGVycikgeyAvKiBhdG9taWMsIG5vIHJvbGxiYWNrIGluIGlvY3RsKCkgKi8KKwkJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJCQlEQkcoMSwgIlZJRElPQ19TX0NST1AgZmFpbGVkIGJlY2F1c2Ugb2YgaGFyZHdhcmUgIgorCQkJICAgICAgICJwcm9ibGVtcy4gVG8gdXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuICIKKwkJCSAgICAgICAiL2Rldi92aWRlbyVkIGFnYWluLiIsIGNhbS0+djRsZGV2LT5taW5vcikKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJcy0+cGl4X2Zvcm1hdC53aWR0aCA9IHJlY3QtPndpZHRoL3NjYWxlOworCQlzLT5waXhfZm9ybWF0LmhlaWdodCA9IHJlY3QtPmhlaWdodC9zY2FsZTsKKwkJbWVtY3B5KCYocy0+X3JlY3QpLCByZWN0LCBzaXplb2YoKnJlY3QpKTsKKworCQlpZiAoKGNhbS0+bW9kdWxlX3BhcmFtLmZvcmNlX211bm1hcCB8fCBjYW0tPmlvID09IElPX1JFQUQpICYmCisJCSAgICBuYnVmZmVycyAhPSBzbjljMTAyX3JlcXVlc3RfYnVmZmVycyhjYW0sIG5idWZmZXJzLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtLT5pbykpIHsKKwkJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJCQlEQkcoMSwgIlZJRElPQ19TX0NST1AgZmFpbGVkIGJlY2F1c2Ugb2Ygbm90IGVub3VnaCAiCisJCQkgICAgICAgIm1lbW9yeS4gVG8gdXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuICIKKwkJCSAgICAgICAiL2Rldi92aWRlbyVkIGFnYWluLiIsIGNhbS0+djRsZGV2LT5taW5vcikKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJY2FtLT5zdHJlYW0gPSBzdHJlYW07CisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfRU5VTV9GTVQ6CisJeworCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjIGZtdGQ7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZmbXRkLCBhcmcsIHNpemVvZihmbXRkKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoZm10ZC5pbmRleCA9PSAwKSB7CisJCQlzdHJjcHkoZm10ZC5kZXNjcmlwdGlvbiwgImJheWVyIHJnYiIpOworCQkJZm10ZC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjg7CisJCX0gZWxzZSBpZiAoZm10ZC5pbmRleCA9PSAxKSB7CisJCQlzdHJjcHkoZm10ZC5kZXNjcmlwdGlvbiwgImNvbXByZXNzZWQiKTsKKwkJCWZtdGQucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfU045QzEwWDsKKwkJCWZtdGQuZmxhZ3MgPSBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQ7CisJCX0gZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJZm10ZC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQltZW1zZXQoJmZtdGQucmVzZXJ2ZWQsIDAsIHNpemVvZihmbXRkLnJlc2VydmVkKSk7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZmbXRkLCBzaXplb2YoZm10ZCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfR19GTVQ6CisJeworCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm9ybWF0OworCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwZm10ID0gJihjYW0tPnNlbnNvci0+cGl4X2Zvcm1hdCk7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZmb3JtYXQsIGFyZywgc2l6ZW9mKGZvcm1hdCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKGZvcm1hdC50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXBmbXQtPmJ5dGVzcGVybGluZSA9IChwZm10LT5waXhlbGZvcm1hdD09VjRMMl9QSVhfRk1UX1NOOUMxMFgpCisJCSAgICAgICAgICAgICAgICAgICAgID8gMCA6IChwZm10LT53aWR0aCAqIHBmbXQtPnByaXYpIC8gODsKKwkJcGZtdC0+c2l6ZWltYWdlID0gcGZtdC0+aGVpZ2h0ICogKChwZm10LT53aWR0aCpwZm10LT5wcml2KS84KTsKKwkJcGZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJCW1lbWNweSgmKGZvcm1hdC5mbXQucGl4KSwgcGZtdCwgc2l6ZW9mKCpwZm10KSk7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZmb3JtYXQsIHNpemVvZihmb3JtYXQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DX1RSWV9GTVQ6CisJY2FzZSBWSURJT0NfU19GTVQ6CisJeworCQlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSBjYW0tPnNlbnNvcjsKKwkJc3RydWN0IHY0bDJfZm9ybWF0IGZvcm1hdDsKKwkJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGl4OworCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwZm10ID0gJihzLT5waXhfZm9ybWF0KTsKKwkJc3RydWN0IHY0bDJfcmVjdCogYm91bmRzID0gJihzLT5jcm9wY2FwLmJvdW5kcyk7CisJCXN0cnVjdCB2NGwyX3JlY3QgcmVjdDsKKwkJdTggc2NhbGU7CisJCWNvbnN0IGVudW0gc245YzEwMl9zdHJlYW1fc3RhdGUgc3RyZWFtID0gY2FtLT5zdHJlYW07CisJCWNvbnN0IHUzMiBuYnVmZmVycyA9IGNhbS0+bmJ1ZmZlcnM7CisJCXUzMiBpOworCQlpbnQgZXJyID0gMDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmZvcm1hdCwgYXJnLCBzaXplb2YoZm9ybWF0KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlwaXggPSAmKGZvcm1hdC5mbXQucGl4KTsKKworCQlpZiAoZm9ybWF0LnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbWVtY3B5KCZyZWN0LCAmKHMtPl9yZWN0KSwgc2l6ZW9mKHJlY3QpKTsKKworCQl7IC8qIGNhbGN1bGF0ZSB0aGUgYWN0dWFsIHNjYWxpbmcgZmFjdG9yICovCisJCQl1MzIgYSwgYjsKKwkJCWEgPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQ7CisJCQliID0gcGl4LT53aWR0aCAqIHBpeC0+aGVpZ2h0OworCQkJc2NhbGUgPSBiID8gKHU4KSgoYSAvIGIpIDwgNCA/IDEgOgorCQkgICAgICAgICAgICAgICAgICAgICAgICAoKGEgLyBiKSA8IDE2ID8gMiA6IDQpKSA6IDE7CisJCX0KKworCQlyZWN0LndpZHRoID0gc2NhbGUgKiBwaXgtPndpZHRoOworCQlyZWN0LmhlaWdodCA9IHNjYWxlICogcGl4LT5oZWlnaHQ7CisKKwkJaWYgKHJlY3Qud2lkdGggPCAxNikKKwkJCXJlY3Qud2lkdGggPSAxNjsKKwkJaWYgKHJlY3QuaGVpZ2h0IDwgMTYpCisJCQlyZWN0LmhlaWdodCA9IDE2OworCQlpZiAocmVjdC53aWR0aCA+IGJvdW5kcy0+bGVmdCArIGJvdW5kcy0+d2lkdGggLSByZWN0LmxlZnQpCisJCQlyZWN0LndpZHRoID0gYm91bmRzLT5sZWZ0ICsgYm91bmRzLT53aWR0aCAtIHJlY3QubGVmdDsKKwkJaWYgKHJlY3QuaGVpZ2h0ID4gYm91bmRzLT50b3AgKyBib3VuZHMtPmhlaWdodCAtIHJlY3QudG9wKQorCQkJcmVjdC5oZWlnaHQgPSBib3VuZHMtPnRvcCArIGJvdW5kcy0+aGVpZ2h0IC0gcmVjdC50b3A7CisKKwkJcmVjdC53aWR0aCAmPSB+MTVMOworCQlyZWN0LmhlaWdodCAmPSB+MTVMOworCisJCXsgLyogYWRqdXN0IHRoZSBzY2FsaW5nIGZhY3RvciAqLworCQkJdTMyIGEsIGI7CisJCQlhID0gcmVjdC53aWR0aCAqIHJlY3QuaGVpZ2h0OworCQkJYiA9IHBpeC0+d2lkdGggKiBwaXgtPmhlaWdodDsKKwkJCXNjYWxlID0gYiA/ICh1OCkoKGEgLyBiKSA8IDQgPyAxIDoKKwkJICAgICAgICAgICAgICAgICAgICAgICAgKChhIC8gYikgPCAxNiA/IDIgOiA0KSkgOiAxOworCQl9CisKKwkJcGl4LT53aWR0aCA9IHJlY3Qud2lkdGggLyBzY2FsZTsKKwkJcGl4LT5oZWlnaHQgPSByZWN0LmhlaWdodCAvIHNjYWxlOworCisJCWlmIChwaXgtPnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9TTjlDMTBYICYmCisJCSAgICBwaXgtPnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9TQkdHUjgpCisJCQlwaXgtPnBpeGVsZm9ybWF0ID0gcGZtdC0+cGl4ZWxmb3JtYXQ7CisJCXBpeC0+cHJpdiA9IHBmbXQtPnByaXY7IC8qIGJwcCAqLworCQlwaXgtPmNvbG9yc3BhY2UgPSBwZm10LT5jb2xvcnNwYWNlOworCQlwaXgtPmJ5dGVzcGVybGluZSA9IChwaXgtPnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9TTjlDMTBYKQorCQkgICAgICAgICAgICAgICAgICAgID8gMCA6IChwaXgtPndpZHRoICogcGl4LT5wcml2KSAvIDg7CisJCXBpeC0+c2l6ZWltYWdlID0gcGl4LT5oZWlnaHQgKiAoKHBpeC0+d2lkdGggKiBwaXgtPnByaXYpIC8gOCk7CisJCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisKKwkJaWYgKGNtZCA9PSBWSURJT0NfVFJZX0ZNVCkgeworCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZmb3JtYXQsIHNpemVvZihmb3JtYXQpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKGNhbS0+bW9kdWxlX3BhcmFtLmZvcmNlX211bm1hcCkKKwkJCWZvciAoaSA9IDA7IGkgPCBjYW0tPm5idWZmZXJzOyBpKyspCisJCQkJaWYgKGNhbS0+ZnJhbWVbaV0udm1hX3VzZV9jb3VudCkgeworCQkJCQlEQkcoMywgIlZJRElPQ19TX0ZNVCBmYWlsZWQuICIKKwkJCQkJICAgICAgICJVbm1hcCB0aGUgYnVmZmVycyBmaXJzdC4iKQorCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisKKwkJaWYgKGNhbS0+c3RyZWFtID09IFNUUkVBTV9PTikKKwkJCWlmICgoZXJyID0gc245YzEwMl9zdHJlYW1faW50ZXJydXB0KGNhbSkpKQorCQkJCXJldHVybiBlcnI7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZmb3JtYXQsIHNpemVvZihmb3JtYXQpKSkgeworCQkJY2FtLT5zdHJlYW0gPSBzdHJlYW07CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCisJCWlmIChjYW0tPm1vZHVsZV9wYXJhbS5mb3JjZV9tdW5tYXAgIHx8IGNhbS0+aW8gPT0gSU9fUkVBRCkKKwkJCXNuOWMxMDJfcmVsZWFzZV9idWZmZXJzKGNhbSk7CisKKwkJZXJyICs9IHNuOWMxMDJfc2V0X3BpeF9mb3JtYXQoY2FtLCBwaXgpOworCQllcnIgKz0gc245YzEwMl9zZXRfY3JvcChjYW0sICZyZWN0KTsKKwkJaWYgKHMtPnNldF9waXhfZm9ybWF0KQorCQkJZXJyICs9IHMtPnNldF9waXhfZm9ybWF0KGNhbSwgcGl4KTsKKwkJaWYgKHMtPnNldF9jcm9wKQorCQkJZXJyICs9IHMtPnNldF9jcm9wKGNhbSwgJnJlY3QpOworCQllcnIgKz0gc245YzEwMl9zZXRfc2NhbGUoY2FtLCBzY2FsZSk7CisKKwkJaWYgKGVycikgeyAvKiBhdG9taWMsIG5vIHJvbGxiYWNrIGluIGlvY3RsKCkgKi8KKwkJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJCQlEQkcoMSwgIlZJRElPQ19TX0ZNVCBmYWlsZWQgYmVjYXVzZSBvZiBoYXJkd2FyZSAiCisJCQkgICAgICAgInByb2JsZW1zLiBUbyB1c2UgdGhlIGNhbWVyYSwgY2xvc2UgYW5kIG9wZW4gIgorCQkJICAgICAgICIvZGV2L3ZpZGVvJWQgYWdhaW4uIiwgY2FtLT52NGxkZXYtPm1pbm9yKQorCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQltZW1jcHkocGZtdCwgcGl4LCBzaXplb2YoKnBpeCkpOworCQltZW1jcHkoJihzLT5fcmVjdCksICZyZWN0LCBzaXplb2YocmVjdCkpOworCisJCWlmICgoY2FtLT5tb2R1bGVfcGFyYW0uZm9yY2VfbXVubWFwICB8fCBjYW0tPmlvID09IElPX1JFQUQpICYmCisJCSAgICBuYnVmZmVycyAhPSBzbjljMTAyX3JlcXVlc3RfYnVmZmVycyhjYW0sIG5idWZmZXJzLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtLT5pbykpIHsKKwkJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJCQlEQkcoMSwgIlZJRElPQ19TX0ZNVCBmYWlsZWQgYmVjYXVzZSBvZiBub3QgZW5vdWdoICIKKwkJCSAgICAgICAibWVtb3J5LiBUbyB1c2UgdGhlIGNhbWVyYSwgY2xvc2UgYW5kIG9wZW4gIgorCQkJICAgICAgICIvZGV2L3ZpZGVvJWQgYWdhaW4uIiwgY2FtLT52NGxkZXYtPm1pbm9yKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQljYW0tPnN0cmVhbSA9IHN0cmVhbTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ19HX0pQRUdDT01QOgorCXsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZjYW0tPmNvbXByZXNzaW9uLAorCQkgICAgICAgICAgICAgICAgIHNpemVvZihjYW0tPmNvbXByZXNzaW9uKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ19TX0pQRUdDT01QOgorCXsKKwkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uIGpjOworCQljb25zdCBlbnVtIHNuOWMxMDJfc3RyZWFtX3N0YXRlIHN0cmVhbSA9IGNhbS0+c3RyZWFtOworCQlpbnQgZXJyID0gMDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJmpjLCBhcmcsIHNpemVvZihqYykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKGpjLnF1YWxpdHkgIT0gMCAmJiBqYy5xdWFsaXR5ICE9IDEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoY2FtLT5zdHJlYW0gPT0gU1RSRUFNX09OKQorCQkJaWYgKChlcnIgPSBzbjljMTAyX3N0cmVhbV9pbnRlcnJ1cHQoY2FtKSkpCisJCQkJcmV0dXJuIGVycjsKKworCQllcnIgKz0gc245YzEwMl9zZXRfY29tcHJlc3Npb24oY2FtLCAmamMpOworCQlpZiAoZXJyKSB7IC8qIGF0b21pYywgbm8gcm9sbGJhY2sgaW4gaW9jdGwoKSAqLworCQkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKKwkJCURCRygxLCAiVklESU9DX1NfSlBFR0NPTVAgZmFpbGVkIGJlY2F1c2Ugb2YgaGFyZHdhcmUgIgorCQkJICAgICAgICJwcm9ibGVtcy4gVG8gdXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuICIKKwkJCSAgICAgICAiL2Rldi92aWRlbyVkIGFnYWluLiIsIGNhbS0+djRsZGV2LT5taW5vcikKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJY2FtLT5jb21wcmVzc2lvbi5xdWFsaXR5ID0gamMucXVhbGl0eTsKKworCQljYW0tPnN0cmVhbSA9IHN0cmVhbTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ19SRVFCVUZTOgorCXsKKwkJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgcmI7CisJCXUzMiBpOworCQlpbnQgZXJyOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmcmIsIGFyZywgc2l6ZW9mKHJiKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAocmIudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKKwkJICAgIHJiLm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGNhbS0+aW8gPT0gSU9fUkVBRCkgeworCQkJREJHKDMsICJDbG9zZSBhbmQgb3BlbiB0aGUgZGV2aWNlIGFnYWluIHRvIGNob29zZSAiCisJCQkgICAgICAgInRoZSBtbWFwIEkvTyBtZXRob2QiKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgY2FtLT5uYnVmZmVyczsgaSsrKQorCQkJaWYgKGNhbS0+ZnJhbWVbaV0udm1hX3VzZV9jb3VudCkgeworCQkJCURCRygzLCAiVklESU9DX1JFUUJVRlMgZmFpbGVkLiAiCisJCQkJICAgICAgICJQcmV2aW91cyBidWZmZXJzIGFyZSBzdGlsbCBtYXBwZWQuIikKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKworCQlpZiAoY2FtLT5zdHJlYW0gPT0gU1RSRUFNX09OKQorCQkJaWYgKChlcnIgPSBzbjljMTAyX3N0cmVhbV9pbnRlcnJ1cHQoY2FtKSkpCisJCQkJcmV0dXJuIGVycjsKKworCQlzbjljMTAyX2VtcHR5X2ZyYW1lcXVldWVzKGNhbSk7CisKKwkJc245YzEwMl9yZWxlYXNlX2J1ZmZlcnMoY2FtKTsKKwkJaWYgKHJiLmNvdW50KQorCQkJcmIuY291bnQgPSBzbjljMTAyX3JlcXVlc3RfYnVmZmVycyhjYW0sIHJiLmNvdW50LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT19NTUFQKTsKKworCQlpZiAoY29weV90b191c2VyKGFyZywgJnJiLCBzaXplb2YocmIpKSkgeworCQkJc245YzEwMl9yZWxlYXNlX2J1ZmZlcnMoY2FtKTsKKwkJCWNhbS0+aW8gPSBJT19OT05FOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKworCQljYW0tPmlvID0gcmIuY291bnQgPyBJT19NTUFQIDogSU9fTk9ORTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ19RVUVSWUJVRjoKKwl7CisJCXN0cnVjdCB2NGwyX2J1ZmZlciBiOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmYiwgYXJnLCBzaXplb2YoYikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKGIudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKKwkJICAgIGIuaW5kZXggPj0gY2FtLT5uYnVmZmVycyB8fCBjYW0tPmlvICE9IElPX01NQVApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQltZW1jcHkoJmIsICZjYW0tPmZyYW1lW2IuaW5kZXhdLmJ1Ziwgc2l6ZW9mKGIpKTsKKworCQlpZiAoY2FtLT5mcmFtZVtiLmluZGV4XS52bWFfdXNlX2NvdW50KQorCQkJYi5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX01BUFBFRDsKKworCQlpZiAoY2FtLT5mcmFtZVtiLmluZGV4XS5zdGF0ZSA9PSBGX0RPTkUpCisJCQliLmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfRE9ORTsKKwkJZWxzZSBpZiAoY2FtLT5mcmFtZVtiLmluZGV4XS5zdGF0ZSAhPSBGX1VOVVNFRCkKKwkJCWIuZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19RVUVVRUQ7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZiLCBzaXplb2YoYikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfUUJVRjoKKwl7CisJCXN0cnVjdCB2NGwyX2J1ZmZlciBiOworCQl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZiLCBhcmcsIHNpemVvZihiKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoYi50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAorCQkgICAgYi5pbmRleCA+PSBjYW0tPm5idWZmZXJzIHx8IGNhbS0+aW8gIT0gSU9fTU1BUCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChjYW0tPmZyYW1lW2IuaW5kZXhdLnN0YXRlICE9IEZfVU5VU0VEKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJY2FtLT5mcmFtZVtiLmluZGV4XS5zdGF0ZSA9IEZfUVVFVUVEOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCQlsaXN0X2FkZF90YWlsKCZjYW0tPmZyYW1lW2IuaW5kZXhdLmZyYW1lLCAmY2FtLT5pbnF1ZXVlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKworCQlQREJHRygiRnJhbWUgIyVsdSBxdWV1ZWQiLCAodW5zaWduZWQgbG9uZyliLmluZGV4KQorCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DX0RRQlVGOgorCXsKKwkJc3RydWN0IHY0bDJfYnVmZmVyIGI7CisJCXN0cnVjdCBzbjljMTAyX2ZyYW1lX3QgKmY7CisJCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwkJaW50IGVyciA9IDA7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZiLCBhcmcsIHNpemVvZihiKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoYi50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fCBjYW0tPmlvIT0gSU9fTU1BUCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChsaXN0X2VtcHR5KCZjYW0tPm91dHF1ZXVlKSkgeworCQkJaWYgKGNhbS0+c3RyZWFtID09IFNUUkVBTV9PRkYpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCisJCQkJcmV0dXJuIC1FQUdBSU47CisJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUKKwkJCSAgICAgICggY2FtLT53YWl0X2ZyYW1lLCAKKwkJCSAgICAgICAgKCFsaXN0X2VtcHR5KCZjYW0tPm91dHF1ZXVlKSkgfHwKKwkJCSAgICAgICAgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB8fAorCQkJICAgICAgICAoY2FtLT5zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSApOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQkJaWYgKGNhbS0+c3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKQorCQkJCXJldHVybiAtRU5PREVWOworCQkJaWYgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPnF1ZXVlX2xvY2ssIGxvY2tfZmxhZ3MpOworCQlmID0gbGlzdF9lbnRyeShjYW0tPm91dHF1ZXVlLm5leHQsIHN0cnVjdCBzbjljMTAyX2ZyYW1lX3QsCisJCSAgICAgICAgICAgICAgIGZyYW1lKTsKKwkJbGlzdF9kZWwoY2FtLT5vdXRxdWV1ZS5uZXh0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5xdWV1ZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKworCQlmLT5zdGF0ZSA9IEZfVU5VU0VEOworCisJCW1lbWNweSgmYiwgJmYtPmJ1Ziwgc2l6ZW9mKGIpKTsKKwkJaWYgKGYtPnZtYV91c2VfY291bnQpCisJCQliLmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfTUFQUEVEOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYiwgc2l6ZW9mKGIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCVBEQkdHKCJGcmFtZSAjJWx1IGRlcXVldWVkIiwgKHVuc2lnbmVkIGxvbmcpZi0+YnVmLmluZGV4KQorCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DX1NUUkVBTU9OOgorCXsKKwkJaW50IHR5cGU7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0eXBlLCBhcmcsIHNpemVvZih0eXBlKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAodHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwgY2FtLT5pbyAhPSBJT19NTUFQKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGxpc3RfZW1wdHkoJmNhbS0+aW5xdWV1ZSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQljYW0tPnN0cmVhbSA9IFNUUkVBTV9PTjsKKworCQlEQkcoMywgIlN0cmVhbSBvbiIpCisKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NfU1RSRUFNT0ZGOgorCXsKKwkJaW50IHR5cGUsIGVycjsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJnR5cGUsIGFyZywgc2l6ZW9mKHR5cGUpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmICh0eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fCBjYW0tPmlvICE9IElPX01NQVApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoY2FtLT5zdHJlYW0gPT0gU1RSRUFNX09OKQorCQkJaWYgKChlcnIgPSBzbjljMTAyX3N0cmVhbV9pbnRlcnJ1cHQoY2FtKSkpCisJCQkJcmV0dXJuIGVycjsKKworCQlzbjljMTAyX2VtcHR5X2ZyYW1lcXVldWVzKGNhbSk7CisKKwkJREJHKDMsICJTdHJlYW0gb2ZmIikKKworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ19HX1BBUk06CisJeworCQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtIHNwOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmc3AsIGFyZywgc2l6ZW9mKHNwKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoc3AudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlzcC5wYXJtLmNhcHR1cmUuZXh0ZW5kZWRtb2RlID0gMDsKKwkJc3AucGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID0gY2FtLT5ucmVhZGJ1ZmZlcnM7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZzcCwgc2l6ZW9mKHNwKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ19TX1BBUk1fT0xEOgorCWNhc2UgVklESU9DX1NfUEFSTToKKwl7CisJCXN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gc3A7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZzcCwgYXJnLCBzaXplb2Yoc3ApKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChzcC50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXNwLnBhcm0uY2FwdHVyZS5leHRlbmRlZG1vZGUgPSAwOworCisJCWlmIChzcC5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPT0gMCkKKwkJCXNwLnBhcm0uY2FwdHVyZS5yZWFkYnVmZmVycyA9IGNhbS0+bnJlYWRidWZmZXJzOworCisJCWlmIChzcC5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPiBTTjlDMTAyX01BWF9GUkFNRVMpCisJCQlzcC5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPSBTTjlDMTAyX01BWF9GUkFNRVM7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZzcCwgc2l6ZW9mKHNwKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQljYW0tPm5yZWFkYnVmZmVycyA9IHNwLnBhcm0uY2FwdHVyZS5yZWFkYnVmZmVyczsKKworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ19HX1NURDoKKwljYXNlIFZJRElPQ19TX1NURDoKKwljYXNlIFZJRElPQ19RVUVSWVNURDoKKwljYXNlIFZJRElPQ19FTlVNU1REOgorCWNhc2UgVklESU9DX1FVRVJZTUVOVToKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKworCX0KK30KKworCitzdGF0aWMgaW50IHNuOWMxMDJfaW9jdGwoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUqIGZpbHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKwlpbnQgZXJyID0gMDsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNhbS0+ZmlsZW9wX3NlbSkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAoY2FtLT5zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJREJHKDEsICJEZXZpY2Ugbm90IHByZXNlbnQiKQorCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGNhbS0+c3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgeworCQlEQkcoMSwgIlRoZSBjYW1lcmEgaXMgbWlzY29uZmlndXJlZC4gQ2xvc2UgYW5kIG9wZW4gaXQgYWdhaW4uIikKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiAtRUlPOworCX0KKworCWVyciA9IHNuOWMxMDJfaW9jdGxfdjRsMihpbm9kZSwgZmlscCwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOworCisJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNuOWMxMDJfZm9wcyA9IHsKKwkub3duZXIgPSAgIFRISVNfTU9EVUxFLAorCS5vcGVuID0gICAgc245YzEwMl9vcGVuLAorCS5yZWxlYXNlID0gc245YzEwMl9yZWxlYXNlLAorCS5pb2N0bCA9ICAgc245YzEwMl9pb2N0bCwKKwkucmVhZCA9ICAgIHNuOWMxMDJfcmVhZCwKKwkucG9sbCA9ICAgIHNuOWMxMDJfcG9sbCwKKwkubW1hcCA9ICAgIHNuOWMxMDJfbW1hcCwKKwkubGxzZWVrID0gIG5vX2xsc2VlaywKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogSXQgZXhpc3RzIGEgc2luZ2xlIGludGVyZmFjZSBvbmx5LiBXZSBkbyBub3QgbmVlZCB0byB2YWxpZGF0ZSBhbnl0aGluZy4gKi8KK3N0YXRpYyBpbnQKK3NuOWMxMDJfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlKiBpbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCogaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtOworCXN0YXRpYyB1bnNpZ25lZCBpbnQgZGV2X25yID0gMDsKKwl1bnNpZ25lZCBpbnQgaSwgbjsKKwlpbnQgZXJyID0gMCwgcjsKKworCW4gPSBzaXplb2Yoc245YzEwMl9pZF90YWJsZSkvc2l6ZW9mKHNuOWMxMDJfaWRfdGFibGVbMF0pOworCWZvciAoaSA9IDA7IGkgPCBuLTE7IGkrKykKKwkJaWYgKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IAorCQkgICAgc245YzEwMl9pZF90YWJsZVtpXS5pZFZlbmRvciAmJgorCQkgICAgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09CisJCSAgICBzbjljMTAyX2lkX3RhYmxlW2ldLmlkUHJvZHVjdCkKKwkJCWJyZWFrOworCWlmIChpID09IG4tMSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIShjYW0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UpLCBHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChjYW0sIDAsIHNpemVvZigqY2FtKSk7CisKKwljYW0tPnVzYmRldiA9IHVkZXY7CisKKwltZW1jcHkoJmNhbS0+ZGV2LCAmdWRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IGRldmljZSkpOworCisJaWYgKCEoY2FtLT5jb250cm9sX2J1ZmZlciA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCkpKSB7CisJCURCRygxLCAia21hbGxvYygpIGZhaWxlZCIpCisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisJbWVtc2V0KGNhbS0+Y29udHJvbF9idWZmZXIsIDAsIDgpOworCisJaWYgKCEoY2FtLT52NGxkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKSkpIHsKKwkJREJHKDEsICJ2aWRlb19kZXZpY2VfYWxsb2MoKSBmYWlsZWQiKQorCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJaW5pdF9NVVRFWCgmY2FtLT5kZXZfc2VtKTsKKworCXIgPSBzbjljMTAyX3JlYWRfcmVnKGNhbSwgMHgwMCk7CisJaWYgKHIgPCAwIHx8IHIgIT0gMHgxMCkgeworCQlEQkcoMSwgIlNvcnJ5LCB0aGlzIGlzIG5vdCBhIFNOOUMxMHggYmFzZWQgY2FtZXJhICIKKwkJICAgICAgICIodmlkL3BpZCAweCUwNFgvMHglMDRYKSIsCisJCSAgICBzbjljMTAyX2lkX3RhYmxlW2ldLmlkVmVuZG9yLHNuOWMxMDJfaWRfdGFibGVbaV0uaWRQcm9kdWN0KQorCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGZhaWw7CisJfQorCisJY2FtLT5icmlkZ2UgPSAoc245YzEwMl9pZF90YWJsZVtpXS5pZFByb2R1Y3QgJiAweGZmYzApID09IDB4NjA4MCA/CisJICAgICAgICAgICAgICBCUklER0VfU045QzEwMyA6IEJSSURHRV9TTjlDMTAyOworCXN3aXRjaCAoY2FtLT5icmlkZ2UpIHsKKwljYXNlIEJSSURHRV9TTjlDMTAxOgorCWNhc2UgQlJJREdFX1NOOUMxMDI6CisJCURCRygyLCAiU045QzEwWzEyXSBQQyBDYW1lcmEgQ29udHJvbGxlciBkZXRlY3RlZCAiCisJCSAgICAgICAiKHZpZC9waWQgMHglMDRYLzB4JTA0WCkiLCBzbjljMTAyX2lkX3RhYmxlW2ldLmlkVmVuZG9yLAorCQkgICAgc245YzEwMl9pZF90YWJsZVtpXS5pZFByb2R1Y3QpCisJCWJyZWFrOworCWNhc2UgQlJJREdFX1NOOUMxMDM6CisJCURCRygyLCAiU045QzEwMyBQQyBDYW1lcmEgQ29udHJvbGxlciBkZXRlY3RlZCAiCisJCSAgICAgICAiKHZpZC9waWQgMHglMDRYLzB4JTA0WCkiLCBzbjljMTAyX2lkX3RhYmxlW2ldLmlkVmVuZG9yLAorCQkgICAgc245YzEwMl9pZF90YWJsZVtpXS5pZFByb2R1Y3QpCisJCWJyZWFrOworCX0KKworCWZvciAgKGkgPSAwOyBzbjljMTAyX3NlbnNvcl90YWJsZVtpXTsgaSsrKSB7CisJCWVyciA9IHNuOWMxMDJfc2Vuc29yX3RhYmxlW2ldKGNhbSk7CisJCWlmICghZXJyKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCFlcnIgJiYgY2FtLT5zZW5zb3IpIHsKKwkJREJHKDIsICIlcyBpbWFnZSBzZW5zb3IgZGV0ZWN0ZWQiLCBjYW0tPnNlbnNvci0+bmFtZSkKKwkJREJHKDMsICJTdXBwb3J0IGZvciAlcyBtYWludGFpbmVkIGJ5ICVzIiwKKwkJICAgIGNhbS0+c2Vuc29yLT5uYW1lLCBjYW0tPnNlbnNvci0+bWFpbnRhaW5lcikKKwl9IGVsc2UgeworCQlEQkcoMSwgIk5vIHN1cHBvcnRlZCBpbWFnZSBzZW5zb3IgZGV0ZWN0ZWQiKQorCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKHNuOWMxMDJfaW5pdChjYW0pKSB7CisJCURCRygxLCAiSW5pdGlhbGl6YXRpb24gZmFpbGVkLiBJIHdpbGwgcmV0cnkgb24gb3BlbigpLiIpCisJCWNhbS0+c3RhdGUgfD0gREVWX01JU0NPTkZJR1VSRUQ7CisJfQorCisJc3RyY3B5KGNhbS0+djRsZGV2LT5uYW1lLCAiU045QzEweCBQQyBDYW1lcmEiKTsKKwljYW0tPnY0bGRldi0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljYW0tPnY0bGRldi0+dHlwZSA9IFZJRF9UWVBFX0NBUFRVUkUgfCBWSURfVFlQRV9TQ0FMRVM7CisJY2FtLT52NGxkZXYtPmhhcmR3YXJlID0gVklEX0hBUkRXQVJFX1NOOUMxMDI7CisJY2FtLT52NGxkZXYtPmZvcHMgPSAmc245YzEwMl9mb3BzOworCWNhbS0+djRsZGV2LT5taW5vciA9IHZpZGVvX25yW2Rldl9ucl07CisJY2FtLT52NGxkZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKKwl2aWRlb19zZXRfZHJ2ZGF0YShjYW0tPnY0bGRldiwgY2FtKTsKKworCWRvd24oJmNhbS0+ZGV2X3NlbSk7CisKKwllcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoY2FtLT52NGxkZXYsIFZGTF9UWVBFX0dSQUJCRVIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvX25yW2Rldl9ucl0pOworCWlmIChlcnIpIHsKKwkJREJHKDEsICJWNEwyIGRldmljZSByZWdpc3RyYXRpb24gZmFpbGVkIikKKwkJaWYgKGVyciA9PSAtRU5GSUxFICYmIHZpZGVvX25yW2Rldl9ucl0gPT0gLTEpCisJCQlEQkcoMSwgIkZyZWUgL2Rldi92aWRlb1ggbm9kZSBub3QgZm91bmQiKQorCQl2aWRlb19ucltkZXZfbnJdID0gLTE7CisJCWRldl9uciA9IChkZXZfbnIgPCBTTjlDMTAyX01BWF9ERVZJQ0VTLTEpID8gZGV2X25yKzEgOiAwOworCQl1cCgmY2FtLT5kZXZfc2VtKTsKKwkJZ290byBmYWlsOworCX0KKworCURCRygyLCAiVjRMMiBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWQiLCBjYW0tPnY0bGRldi0+bWlub3IpCisKKwljYW0tPm1vZHVsZV9wYXJhbS5mb3JjZV9tdW5tYXAgPSBmb3JjZV9tdW5tYXBbZGV2X25yXTsKKworCWRldl9uciA9IChkZXZfbnIgPCBTTjlDMTAyX01BWF9ERVZJQ0VTLTEpID8gZGV2X25yKzEgOiAwOworCisJc245YzEwMl9jcmVhdGVfc3lzZnMoY2FtKTsKKwlEQkcoMiwgIk9wdGlvbmFsIGRldmljZSBjb250cm9sIHRocm91Z2ggJ3N5c2ZzJyBpbnRlcmZhY2UgcmVhZHkiKQorCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjYW0pOworCisJdXAoJmNhbS0+ZGV2X3NlbSk7CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlpZiAoY2FtKSB7CisJCWtmcmVlKGNhbS0+Y29udHJvbF9idWZmZXIpOworCQlpZiAoY2FtLT52NGxkZXYpCisJCQl2aWRlb19kZXZpY2VfcmVsZWFzZShjYW0tPnY0bGRldik7CisJCWtmcmVlKGNhbSk7CisJfQorCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIHZvaWQgc245YzEwMl91c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSogaW50ZikKK3sKKwlzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlpZiAoIWNhbSkKKwkJcmV0dXJuOworCisJZG93bl93cml0ZSgmc245YzEwMl9kaXNjb25uZWN0KTsKKworCWRvd24oJmNhbS0+ZGV2X3NlbSk7IAorCisJREJHKDIsICJEaXNjb25uZWN0aW5nICVzLi4uIiwgY2FtLT52NGxkZXYtPm5hbWUpCisKKwl3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKCZjYW0tPm9wZW4pOworCisJaWYgKGNhbS0+dXNlcnMpIHsKKwkJREJHKDIsICJEZXZpY2UgL2Rldi92aWRlbyVkIGlzIG9wZW4hIERlcmVnaXN0cmF0aW9uIGFuZCAiCisJCSAgICAgICAibWVtb3J5IGRlYWxsb2NhdGlvbiBhcmUgZGVmZXJyZWQgb24gY2xvc2UuIiwKKwkJICAgIGNhbS0+djRsZGV2LT5taW5vcikKKwkJY2FtLT5zdGF0ZSB8PSBERVZfTUlTQ09ORklHVVJFRDsKKwkJc245YzEwMl9zdG9wX3RyYW5zZmVyKGNhbSk7CisJCWNhbS0+c3RhdGUgfD0gREVWX0RJU0NPTk5FQ1RFRDsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjYW0tPndhaXRfZnJhbWUpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNhbS0+d2FpdF9zdHJlYW0pOworCX0gZWxzZSB7CisJCWNhbS0+c3RhdGUgfD0gREVWX0RJU0NPTk5FQ1RFRDsKKwkJc245YzEwMl9yZWxlYXNlX3Jlc291cmNlcyhjYW0pOworCX0KKworCXVwKCZjYW0tPmRldl9zZW0pOworCisJaWYgKCFjYW0tPnVzZXJzKQorCQlrZnJlZShjYW0pOworCisJdXBfd3JpdGUoJnNuOWMxMDJfZGlzY29ubmVjdCk7Cit9CisKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNuOWMxMDJfdXNiX2RyaXZlciA9IHsKKwkub3duZXIgPSAgICAgIFRISVNfTU9EVUxFLAorCS5uYW1lID0gICAgICAgInNuOWMxMDIiLAorCS5pZF90YWJsZSA9ICAgc245YzEwMl9pZF90YWJsZSwKKwkucHJvYmUgPSAgICAgIHNuOWMxMDJfdXNiX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gc245YzEwMl91c2JfZGlzY29ubmVjdCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBfX2luaXQgc245YzEwMl9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCBlcnIgPSAwOworCisJS0RCRygyLCBTTjlDMTAyX01PRFVMRV9OQU1FICIgdiIgU045QzEwMl9NT0RVTEVfVkVSU0lPTikKKwlLREJHKDMsIFNOOUMxMDJfTU9EVUxFX0FVVEhPUikKKworCWlmICgoZXJyID0gdXNiX3JlZ2lzdGVyKCZzbjljMTAyX3VzYl9kcml2ZXIpKSkKKwkJS0RCRygxLCAidXNiX3JlZ2lzdGVyKCkgZmFpbGVkIikKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IHNuOWMxMDJfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc245YzEwMl91c2JfZHJpdmVyKTsKK30KKworCittb2R1bGVfaW5pdChzbjljMTAyX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KHNuOWMxMDJfbW9kdWxlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9odjcxMzFkLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX2h2NzEzMWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODA3MGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9odjcxMzFkLmMKQEAgLTAsMCArMSwyNzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBsdWctaW4gZm9yIEhWNzEzMUQgaW1hZ2Ugc2Vuc29yIGNvbm5lY3RlZCB0byB0aGUgU045QzEweCBQQyBDYW1lcmEgICAgICoKKyAqIENvbnRyb2xsZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICoKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzbjljMTAyX3NlbnNvci5oIgorCisKK3N0YXRpYyBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgaHY3MTMxZDsKKworCitzdGF0aWMgaW50IGh2NzEzMWRfaW5pdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTApOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NjAsIDB4MTcpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MGUsIDB4MTgpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4ZjIsIDB4MTkpOworCisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMSwgMHgwNCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMiwgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyOCwgMHgwMCk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgaHY3MTMxZF9nZXRfY3RybChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKK3sKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKKwkJeworCQkJaW50IHIxID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MjYpLAorCQkJICAgIHIyID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MjcpOworCQkJaWYgKHIxIDwgMCB8fCByMiA8IDApCisJCQkJcmV0dXJuIC1FSU87CisJCQljdHJsLT52YWx1ZSA9IChyMSA8PCA4KSB8IChyMiAmIDB4ZmYpOworCQl9CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgzMSkpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSA9IDB4M2YgLSAoY3RybC0+dmFsdWUgJiAweDNmKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0U6CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgzMykpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSA9IDB4M2YgLSAoY3RybC0+dmFsdWUgJiAweDNmKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0U6CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgzMikpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSA9IDB4M2YgLSAoY3RybC0+dmFsdWUgJiAweDNmKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX1JFU0VUX0xFVkVMOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MzApKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJY3RybC0+dmFsdWUgJj0gMHgzZjsKKwkJcmV0dXJuIDA7CisJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX1BJWEVMX0JJQVNfVk9MVEFHRToKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDM0KSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlICY9IDB4MDc7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworCitzdGF0aWMgaW50IGh2NzEzMWRfc2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCit7CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgyNiwgY3RybC0+dmFsdWUgPj4gOCk7CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MjcsIGN0cmwtPnZhbHVlICYgMHhmZik7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MzEsIDB4M2YgLSBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDMzLCAweDNmIC0gY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFNOOUMxMDJfVjRMMl9DSURfR1JFRU5fQkFMQU5DRToKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgzMiwgMHgzZiAtIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX1JFU0VUX0xFVkVMOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDMwLCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9QSVhFTF9CSUFTX1ZPTFRBR0U6CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MzQsIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGVyciA/IC1FSU8gOiAwOworfQorCisKK3N0YXRpYyBpbnQgaHY3MTMxZF9zZXRfY3JvcChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcmVjdCogcmVjdCkKK3sKKwlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSAmaHY3MTMxZDsKKwlpbnQgZXJyID0gMDsKKwl1OCBoX3N0YXJ0ID0gKHU4KShyZWN0LT5sZWZ0IC0gcy0+Y3JvcGNhcC5ib3VuZHMubGVmdCkgKyAyLAorCSAgIHZfc3RhcnQgPSAodTgpKHJlY3QtPnRvcCAtIHMtPmNyb3BjYXAuYm91bmRzLnRvcCkgKyAyOworCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgaF9zdGFydCwgMHgxMik7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgdl9zdGFydCwgMHgxMyk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgaHY3MTMxZF9zZXRfcGl4X2Zvcm1hdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGl4KQoreworCWludCBlcnIgPSAwOworCisJaWYgKHBpeC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1NOOUMxMFgpCisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDIsIDB4MTkpOworCWVsc2UKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHhmMiwgMHgxOSk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgaHY3MTMxZCA9IHsKKwkubmFtZSA9ICJIVjcxMzFEIiwKKwkubWFpbnRhaW5lciA9ICJMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+IiwKKwkuc3lzZnNfb3BzID0gU045QzEwMl9JMkNfUkVBRCB8IFNOOUMxMDJfSTJDX1dSSVRFLAorCS5mcmVxdWVuY3kgPSBTTjlDMTAyX0kyQ18xMDBLSFosCisJLmludGVyZmFjZSA9IFNOOUMxMDJfSTJDXzJXSVJFUywKKwkuaTJjX3NsYXZlX2lkID0gMHgxMSwKKwkuaW5pdCA9ICZodjcxMzFkX2luaXQsCisJLnFjdHJsID0geworCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImV4cG9zdXJlIiwKKwkJCS5taW5pbXVtID0gMHgwMjUwLAorCQkJLm1heGltdW0gPSAweGZmZmYsCisJCQkuc3RlcCA9IDB4MDAwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwMjUwLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gVjRMMl9DSURfUkVEX0JBTEFOQ0UsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJyZWQgYmFsYW5jZSIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4M2YsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDAsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0UsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJibHVlIGJhbGFuY2UiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDNmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDIwLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiZ3JlZW4gYmFsYW5jZSIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4M2YsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MWUsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBTTjlDMTAyX1Y0TDJfQ0lEX1JFU0VUX0xFVkVMLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAicmVzZXQgbGV2ZWwiLAorCQkJLm1pbmltdW0gPSAweDE5LAorCQkJLm1heGltdW0gPSAweDNmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDMwLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gU045QzEwMl9WNEwyX0NJRF9QSVhFTF9CSUFTX1ZPTFRBR0UsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJwaXhlbCBiaWFzIHZvbHRhZ2UiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDA3LAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDAyLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwl9LAorCS5nZXRfY3RybCA9ICZodjcxMzFkX2dldF9jdHJsLAorCS5zZXRfY3RybCA9ICZodjcxMzFkX3NldF9jdHJsLAorCS5jcm9wY2FwID0geworCQkuYm91bmRzID0geworCQkJLmxlZnQgPSAwLAorCQkJLnRvcCA9IDAsCisJCQkud2lkdGggPSA2NDAsCisJCQkuaGVpZ2h0ID0gNDgwLAorCQl9LAorCQkuZGVmcmVjdCA9IHsKKwkJCS5sZWZ0ID0gMCwKKwkJCS50b3AgPSAwLAorCQkJLndpZHRoID0gNjQwLAorCQkJLmhlaWdodCA9IDQ4MCwKKwkJfSwKKwl9LAorCS5zZXRfY3JvcCA9ICZodjcxMzFkX3NldF9jcm9wLAorCS5waXhfZm9ybWF0ID0geworCQkud2lkdGggPSA2NDAsCisJCS5oZWlnaHQgPSA0ODAsCisJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjgsCisJCS5wcml2ID0gOCwKKwl9LAorCS5zZXRfcGl4X2Zvcm1hdCA9ICZodjcxMzFkX3NldF9waXhfZm9ybWF0Cit9OworCisKK2ludCBzbjljMTAyX3Byb2JlX2h2NzEzMWQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJaW50IHIwID0gMCwgcjEgPSAwLCBlcnIgPSAwOworCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMSwgMHgwMSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMCwgMHgwMSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgyOCwgMHgxNyk7CisJaWYgKGVycikKKwkJcmV0dXJuIC1FSU87CisKKwlyMCA9IHNuOWMxMDJfaTJjX3RyeV9yZWFkKGNhbSwgJmh2NzEzMWQsIDB4MDApOworCXIxID0gc245YzEwMl9pMmNfdHJ5X3JlYWQoY2FtLCAmaHY3MTMxZCwgMHgwMSk7CisJaWYgKHIwIDwgMCB8fCByMSA8IDApCisJCXJldHVybiAtRUlPOworCisJaWYgKHIwICE9IDB4MDAgJiYgcjEgIT0gMHgwNCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzbjljMTAyX2F0dGFjaF9zZW5zb3IoY2FtLCAmaHY3MTMxZCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfbWkwMzQzLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX21pMDM0My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2Njc2YWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX21pMDM0My5jCkBAIC0wLDAgKzEsMzYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQbHVnLWluIGZvciBNSS0wMzQzIGltYWdlIHNlbnNvciBjb25uZWN0ZWQgdG8gdGhlIFNOOUMxMHggUEMgQ2FtZXJhICAgICAqCisgKiBDb250cm9sbGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICAgICAgICAgICAqCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAic245YzEwMl9zZW5zb3IuaCIKKworCitzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIG1pMDM0MzsKK3N0YXRpYyB1OCBtaTAzNDNfaTJjX2RhdGFbNSsxXTsKKworCitzdGF0aWMgaW50IG1pMDM0M19pbml0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQoreworCWludCBlcnIgPSAwOworCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMCwgMHgxMCk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMCwgMHgxMSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwYSwgMHgxNCk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHg0MCwgMHgwMSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgyMCwgMHgxNyk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwNywgMHgxOCk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHhhMCwgMHgxOSk7CisKKwllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZCwgMHgwMCwgMHgwMSwgMCwgMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LCBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGQsIDB4MDAsIDB4MDAsIDAsIDApOworCWVyciArPSBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKGNhbSwgJm1pMDM0MywgNCwgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzLCAweDAxLCAweGUxLCAwLCAwKTsKKwllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNCwgMHgwMiwgMHg4MSwgMCwgMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LCBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUsIDB4MDAsIDB4MTcsIDAsIDApOworCWVyciArPSBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKGNhbSwgJm1pMDM0MywgNCwgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2LCAweDAwLCAweDExLCAwLCAwKTsKKwllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MiwgMHgwNCwgMHg5YSwgMCwgMCk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgbWkwMzQzX2dldF9jdHJsKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CisJCWlmIChzbjljMTAyX2kyY190cnlfcmF3X3JlYWQoY2FtLCAmbWkwMzQzLCBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksIDIrMSwgbWkwMzQzX2kyY19kYXRhKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJY3RybC0+dmFsdWUgPSBtaTAzNDNfaTJjX2RhdGFbMl07CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sICZtaTAzNDMsIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzNSwgMisxLCBtaTAzNDNfaTJjX2RhdGEpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0hGTElQOgorCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgJm1pMDM0MywgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwLCAyKzEsIG1pMDM0M19pMmNfZGF0YSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlID0gbWkwMzQzX2kyY19kYXRhWzNdICYgMHgyMCA/IDEgOiAwOworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgJm1pMDM0MywgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwLCAyKzEsIG1pMDM0M19pMmNfZGF0YSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlID0gbWkwMzQzX2kyY19kYXRhWzNdICYgMHg4MCA/IDEgOiAwOworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgorCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgJm1pMDM0MywgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJkLCAyKzEsIG1pMDM0M19pMmNfZGF0YSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgorCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgJm1pMDM0MywgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJjLCAyKzEsIG1pMDM0M19pMmNfZGF0YSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWJyZWFrOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFOgorCQlpZiAoc245YzEwMl9pMmNfdHJ5X3Jhd19yZWFkKGNhbSwgJm1pMDM0MywgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJlLCAyKzEsIG1pMDM0M19pMmNfZGF0YSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwljYXNlIFNOOUMxMDJfVjRMMl9DSURfR1JFRU5fQkFMQU5DRToKKwkJY3RybC0+dmFsdWUgPSBtaTAzNDNfaTJjX2RhdGFbM10gfCAobWkwMzQzX2kyY19kYXRhWzJdIDw8IDgpOworCQlpZiAoY3RybC0+dmFsdWUgPj0gMHgxMCAmJiBjdHJsLT52YWx1ZSA8PSAweDNmKQorCQkJY3RybC0+dmFsdWUgLT0gMHgxMDsKKwkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPj0gMHg2MCAmJiBjdHJsLT52YWx1ZSA8PSAweDdmKQorCQkJY3RybC0+dmFsdWUgLT0gMHg2MDsKKwkJZWxzZSBpZiAoY3RybC0+dmFsdWUgPj0gMHhlMCAmJiBjdHJsLT52YWx1ZSA8PSAweGZmKQorCQkJY3RybC0+dmFsdWUgLT0gMHhlMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IG1pMDM0M19zZXRfY3RybChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKQoreworCXUxNiByZWcgPSAwOworCWludCBlcnIgPSAwOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgorCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgorCWNhc2UgU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFOgorCQlpZiAoY3RybC0+dmFsdWUgPD0gKDB4M2YtMHgxMCkpCisJCQlyZWcgPSAweDEwICsgY3RybC0+dmFsdWU7CisJCWVsc2UgaWYgKGN0cmwtPnZhbHVlIDw9ICgoMHgzZi0weDEwKSArICgweDdmLTB4NjApKSkKKwkJCXJlZyA9IDB4NjAgKyAoY3RybC0+dmFsdWUgLSAoMHgzZi0weDEwKSk7CisJCWVsc2UKKwkJCXJlZyA9IDB4ZTAgKyAoY3RybC0+dmFsdWUgLSAoMHgzZi0weDEwKSAtICgweDdmLTB4NjApKTsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CisJCWVyciArPSBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKGNhbSwgJm1pMDM0MywgNCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwgY3RybC0+dmFsdWUsIDB4MDAsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDApOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJCWVyciArPSBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKGNhbSwgJm1pMDM0MywgNCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzNSwgcmVnID4+IDgsIHJlZyAmIDB4ZmYsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDApOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0hGTElQOgorCQllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAsIGN0cmwtPnZhbHVlID8gMHg0MDoweDAwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHJsLT52YWx1ZSA/IDB4MjA6MHgwMCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfVkZMSVA6CisJCWVyciArPSBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKGNhbSwgJm1pMDM0MywgNCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCwgY3RybC0+dmFsdWUgPyAweDgwOjB4MDAsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0cmwtPnZhbHVlID8gMHg4MDoweDAwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3RyeV9yYXdfd3JpdGUoY2FtLCAmbWkwMzQzLCA0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaTAzNDMuaTJjX3NsYXZlX2lkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJkLCByZWcgPj4gOCwgcmVnICYgMHhmZiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgorCQllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MmMsIHJlZyA+PiA4LCByZWcgJiAweGZmLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0U6CisJCWVyciArPSBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKGNhbSwgJm1pMDM0MywgNCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWkwMzQzLmkyY19zbGF2ZV9pZCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyYiwgcmVnID4+IDgsIHJlZyAmIDB4ZmYsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDApOworCQllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MmUsIHJlZyA+PiA4LCByZWcgJiAweGZmLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGVyciA/IC1FSU8gOiAwOworfQorCisKK3N0YXRpYyBpbnQgbWkwMzQzX3NldF9jcm9wKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0KQoreworCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9ICZtaTAzNDM7CisJaW50IGVyciA9IDA7CisJdTggaF9zdGFydCA9ICh1OCkocmVjdC0+bGVmdCAtIHMtPmNyb3BjYXAuYm91bmRzLmxlZnQpICsgMCwKKwkgICB2X3N0YXJ0ID0gKHU4KShyZWN0LT50b3AgLSBzLT5jcm9wY2FwLmJvdW5kcy50b3ApICsgMjsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIGhfc3RhcnQsIDB4MTIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIHZfc3RhcnQsIDB4MTMpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IG1pMDM0M19zZXRfcGl4X2Zvcm1hdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwaXgpCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAocGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU045QzEwWCkgeworCQllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGEsIDB4MDAsIDB4MDMsIDAsIDApOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDIwLCAweDE5KTsKKwl9IGVsc2UgeworCQllcnIgKz0gc245YzEwMl9pMmNfdHJ5X3Jhd193cml0ZShjYW0sICZtaTAzNDMsIDQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pMDM0My5pMmNfc2xhdmVfaWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGEsIDB4MDAsIDB4MDUsIDAsIDApOworCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweGEwLCAweDE5KTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgbWkwMzQzID0geworCS5uYW1lID0gIk1JLTAzNDMiLAorCS5tYWludGFpbmVyID0gIkx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4iLAorCS5mcmVxdWVuY3kgPSBTTjlDMTAyX0kyQ18xMDBLSFosCisJLmludGVyZmFjZSA9IFNOOUMxMDJfSTJDXzJXSVJFUywKKwkuaTJjX3NsYXZlX2lkID0gMHg1ZCwKKwkuaW5pdCA9ICZtaTAzNDNfaW5pdCwKKwkucWN0cmwgPSB7CisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0VYUE9TVVJFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiZXhwb3N1cmUiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDBmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDA2LAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gVjRMMl9DSURfR0FJTiwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImdsb2JhbCBnYWluIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gKDB4M2YtMHgxMCkrKDB4N2YtMHg2MCkrKDB4ZmYtMHhlMCksLyoweDZkKi8KKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwMCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0hGTElQLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkJLm5hbWUgPSAiaG9yaXpvbnRhbCBtaXJyb3IiLAorCQkJLm1pbmltdW0gPSAwLAorCQkJLm1heGltdW0gPSAxLAorCQkJLnN0ZXAgPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAwLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gVjRMMl9DSURfVkZMSVAsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZSA9ICJ2ZXJ0aWNhbCBtaXJyb3IiLAorCQkJLm1pbmltdW0gPSAwLAorCQkJLm1heGltdW0gPSAxLAorCQkJLnN0ZXAgPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAwLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gVjRMMl9DSURfUkVEX0JBTEFOQ0UsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJyZWQgYmFsYW5jZSIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9ICgweDNmLTB4MTApKygweDdmLTB4NjApKygweGZmLTB4ZTApLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDAwLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gVjRMMl9DSURfQkxVRV9CQUxBTkNFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiYmx1ZSBiYWxhbmNlIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gKDB4M2YtMHgxMCkrKDB4N2YtMHg2MCkrKDB4ZmYtMHhlMCksCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDAsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0UsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJncmVlbiBiYWxhbmNlIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gKCgweDNmLTB4MTApKygweDdmLTB4NjApKygweGZmLTB4ZTApKSwKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwMCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJfSwKKwkuZ2V0X2N0cmwgPSAmbWkwMzQzX2dldF9jdHJsLAorCS5zZXRfY3RybCA9ICZtaTAzNDNfc2V0X2N0cmwsCisJLmNyb3BjYXAgPSB7CisJCS5ib3VuZHMgPSB7CisJCQkubGVmdCA9IDAsCisJCQkudG9wID0gMCwKKwkJCS53aWR0aCA9IDY0MCwKKwkJCS5oZWlnaHQgPSA0ODAsCisJCX0sCisJCS5kZWZyZWN0ID0geworCQkJLmxlZnQgPSAwLAorCQkJLnRvcCA9IDAsCisJCQkud2lkdGggPSA2NDAsCisJCQkuaGVpZ2h0ID0gNDgwLAorCQl9LAorCX0sCisJLnNldF9jcm9wID0gJm1pMDM0M19zZXRfY3JvcCwKKwkucGl4X2Zvcm1hdCA9IHsKKwkJLndpZHRoID0gNjQwLAorCQkuaGVpZ2h0ID0gNDgwLAorCQkucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfU0JHR1I4LAorCQkucHJpdiA9IDgsCisJfSwKKwkuc2V0X3BpeF9mb3JtYXQgPSAmbWkwMzQzX3NldF9waXhfZm9ybWF0Cit9OworCisKK2ludCBzbjljMTAyX3Byb2JlX21pMDM0MyhzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4MDEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MDEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjgsIDB4MTcpOworCWlmIChlcnIpCisJCXJldHVybiAtRUlPOworCisJaWYgKHNuOWMxMDJfaTJjX3RyeV9yYXdfcmVhZChjYW0sICZtaTAzNDMsIG1pMDM0My5pMmNfc2xhdmVfaWQsIDB4MDAsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLCBtaTAzNDNfaTJjX2RhdGEpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAobWkwMzQzX2kyY19kYXRhWzRdICE9IDB4MzIgJiYgbWkwMzQzX2kyY19kYXRhWzNdICE9IDB4ZTMpCisJCXJldHVybiAtRU5PREVWOworCisJc245YzEwMl9hdHRhY2hfc2Vuc29yKGNhbSwgJm1pMDM0Myk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfcGFzMTA2Yi5jIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9wYXMxMDZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlM2VjMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfcGFzMTA2Yi5jCkBAIC0wLDAgKzEsMzA3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQbHVnLWluIGZvciBQQVMxMDZCIGltYWdlIHNlbnNvciBjb25uZWN0ZWQgdG8gdGhlIFNOOUMxMHggUEMgQ2FtZXJhICAgICAqCisgKiBDb250cm9sbGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICAgICAgICAgICAqCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlICJzbjljMTAyX3NlbnNvci5oIgorCisKK3N0YXRpYyBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgcGFzMTA2YjsKKworCitzdGF0aWMgaW50IHBhczEwNmJfaW5pdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTApOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MTQpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjAsIDB4MTcpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjAsIDB4MTkpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDksIDB4MTgpOworCisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMiwgMHgwYyk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwNSwgMHg1YSk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwNiwgMHg4OCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwNywgMHg4MCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMCwgMHgwNik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMSwgMHgwNik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMiwgMHgwMCk7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxNCwgMHgwMik7CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMywgMHgwMSk7CisKKwltc2xlZXAoNDAwKTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBwYXMxMDZiX2dldF9jdHJsKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKQoreworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgorCQl7CisJCQlpbnQgcjEgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwMyksCisJCQkgICAgcjIgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwNCk7CisJCQlpZiAocjEgPCAwIHx8IHIyIDwgMCkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCWN0cmwtPnZhbHVlID0gKHIxIDw8IDQpIHwgKHIyICYgMHgwZik7CisJCX0KKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDBjKSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlICY9IDB4MWY7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MDkpKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJY3RybC0+dmFsdWUgJj0gMHgxZjsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MGUpKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJY3RybC0+dmFsdWUgJj0gMHgxZjsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDBmKSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlICY9IDB4MDc7CisJCXJldHVybiAwOworCWNhc2UgU045QzEwMl9WNEwyX0NJRF9HUkVFTl9CQUxBTkNFOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MGEpKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJY3RybC0+dmFsdWUgPSAoY3RybC0+dmFsdWUgJiAweDFmKSA8PCAxOworCQlyZXR1cm4gMDsKKwljYXNlIFNOOUMxMDJfVjRMMl9DSURfREFDX01BR05JVFVERToKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDA4KSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlICY9IDB4Zjg7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworCitzdGF0aWMgaW50IHBhczEwNmJfc2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCit7CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwMywgY3RybC0+dmFsdWUgPj4gNCk7CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDQsIGN0cmwtPnZhbHVlICYgMHgwZik7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MGMsIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0U6CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDksIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDBlLCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MGYsIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0U6CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MGEsIGN0cmwtPnZhbHVlID4+IDEpOworCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDBiLCBjdHJsLT52YWx1ZSA+PiAxKTsKKwkJYnJlYWs7CisJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0RBQ19NQUdOSVRVREU6CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDgsIGN0cmwtPnZhbHVlIDw8IDMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgxMywgMHgwMSk7CisKKwlyZXR1cm4gZXJyID8gLUVJTyA6IDA7Cit9CisKKworc3RhdGljIGludCBwYXMxMDZiX3NldF9jcm9wKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9yZWN0KiByZWN0KQoreworCXN0cnVjdCBzbjljMTAyX3NlbnNvciogcyA9ICZwYXMxMDZiOworCWludCBlcnIgPSAwOworCXU4IGhfc3RhcnQgPSAodTgpKHJlY3QtPmxlZnQgLSBzLT5jcm9wY2FwLmJvdW5kcy5sZWZ0KSArIDQsCisJICAgdl9zdGFydCA9ICh1OCkocmVjdC0+dG9wIC0gcy0+Y3JvcGNhcC5ib3VuZHMudG9wKSArIDM7CisKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCBoX3N0YXJ0LCAweDEyKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCB2X3N0YXJ0LCAweDEzKTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBwYXMxMDZiX3NldF9waXhfZm9ybWF0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwaXgpCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAocGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU045QzEwWCkKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgyYywgMHgxNyk7CisJZWxzZQorCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDIwLCAweDE3KTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIHN0cnVjdCBzbjljMTAyX3NlbnNvciBwYXMxMDZiID0geworCS5uYW1lID0gIlBBUzEwNkIiLAorCS5tYWludGFpbmVyID0gIkx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4iLAorCS5zeXNmc19vcHMgPSBTTjlDMTAyX0kyQ19SRUFEIHwgU045QzEwMl9JMkNfV1JJVEUsCisJLmZyZXF1ZW5jeSA9IFNOOUMxMDJfSTJDXzQwMEtIWiB8IFNOOUMxMDJfSTJDXzEwMEtIWiwKKwkuaW50ZXJmYWNlID0gU045QzEwMl9JMkNfMldJUkVTLAorCS5pMmNfc2xhdmVfaWQgPSAweDQwLAorCS5pbml0ID0gJnBhczEwNmJfaW5pdCwKKwkucWN0cmwgPSB7CisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0VYUE9TVVJFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiZXhwb3N1cmUiLAorCQkJLm1pbmltdW0gPSAweDEyNSwKKwkJCS5tYXhpbXVtID0gMHhmZmYsCisJCQkuc3RlcCA9IDB4MDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDE0MCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0dBSU4sCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJnbG9iYWwgZ2FpbiIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4MWYsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MGQsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9DT05UUkFTVCwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImNvbnRyYXN0IiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHgwNywKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwMCwgLyogMHgwMH4weDAzIGhhdmUgc2FtZSBlZmZlY3QgKi8KKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX1JFRF9CQUxBTkNFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAicmVkIGJhbGFuY2UiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDFmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDA0LAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gVjRMMl9DSURfQkxVRV9CQUxBTkNFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiYmx1ZSBiYWxhbmNlIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHgxZiwKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwNiwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFNOOUMxMDJfVjRMMl9DSURfR1JFRU5fQkFMQU5DRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImdyZWVuIGJhbGFuY2UiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweDNlLAorCQkJLnN0ZXAgPSAweDAyLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDAyLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gU045QzEwMl9WNEwyX0NJRF9EQUNfTUFHTklUVURFLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiREFDIG1hZ25pdHVkZSIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4MWYsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDEsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCX0sCisJLmdldF9jdHJsID0gJnBhczEwNmJfZ2V0X2N0cmwsCisJLnNldF9jdHJsID0gJnBhczEwNmJfc2V0X2N0cmwsCisJLmNyb3BjYXAgPSB7CisJCS5ib3VuZHMgPSB7CisJCQkubGVmdCA9IDAsCisJCQkudG9wID0gMCwKKwkJCS53aWR0aCA9IDM1MiwKKwkJCS5oZWlnaHQgPSAyODgsCisJCX0sCisJCS5kZWZyZWN0ID0geworCQkJLmxlZnQgPSAwLAorCQkJLnRvcCA9IDAsCisJCQkud2lkdGggPSAzNTIsCisJCQkuaGVpZ2h0ID0gMjg4LAorCQl9LAorCX0sCisJLnNldF9jcm9wID0gJnBhczEwNmJfc2V0X2Nyb3AsCisJLnBpeF9mb3JtYXQgPSB7CisJCS53aWR0aCA9IDM1MiwKKwkJLmhlaWdodCA9IDI4OCwKKwkJLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1NCR0dSOCwKKwkJLnByaXYgPSA4LCAvKiB3ZSB1c2UgdGhpcyBmaWVsZCBhcyAnYml0cyBwZXIgcGl4ZWwnICovCisJfSwKKwkuc2V0X3BpeF9mb3JtYXQgPSAmcGFzMTA2Yl9zZXRfcGl4X2Zvcm1hdAorfTsKKworCitpbnQgc245YzEwMl9wcm9iZV9wYXMxMDZiKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQoreworCWludCByMCA9IDAsIHIxID0gMCwgZXJyID0gMDsKKwl1bnNpZ25lZCBpbnQgcGlkID0gMDsKKworCS8qCisJICAgTWluaW1hbCBpbml0aWFsaXphdGlvbiB0byBlbmFibGUgdGhlIEkyQyBjb21tdW5pY2F0aW9uCisJICAgTk9URTogZG8gTk9UIGNoYW5nZSB0aGUgdmFsdWVzIQorCSovCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMSwgMHgwMSk7IC8qIHNlbnNvciBwb3dlciBkb3duICovCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMCwgMHgwMSk7IC8qIHNlbnNvciBwb3dlciBvbiAqLworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MjgsIDB4MTcpOyAvKiBzZW5zb3IgY2xvY2sgYXQgMjQgTUh6ICovCisJaWYgKGVycikKKwkJcmV0dXJuIC1FSU87CisKKwlyMCA9IHNuOWMxMDJfaTJjX3RyeV9yZWFkKGNhbSwgJnBhczEwNmIsIDB4MDApOworCXIxID0gc245YzEwMl9pMmNfdHJ5X3JlYWQoY2FtLCAmcGFzMTA2YiwgMHgwMSk7CisKKwlpZiAocjAgPCAwIHx8IHIxIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlwaWQgPSAocjAgPDwgMTEpIHwgKChyMSAmIDB4ZjApID4+IDQpOworCWlmIChwaWQgIT0gMHgwMDcpCisJCXJldHVybiAtRU5PREVWOworCisJc245YzEwMl9hdHRhY2hfc2Vuc29yKGNhbSwgJnBhczEwNmIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX3BhczIwMmJjYi5jIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9wYXMyMDJiY2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2E1NGM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9wYXMyMDJiY2IuYwpAQCAtMCwwICsxLDI5MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGx1Zy1pbiBmb3IgUEFTMjAyQkNCIGltYWdlIHNlbnNvciBjb25uZWN0ZWQgdG8gdGhlIFNOOUMxMHggUEMgQ2FtZXJhICAgKgorICogQ29udHJvbGxlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IGJ5IENhcmxvcyBFZHVhcmRvIE1lZGFnbGlhIER5b25pc2lvICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgIDxtZWRhZ2xpYUB1bmRsLm9yZy5icj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly9jYWR1LmhvbWVsaW51eC5jb206ODA4MC8gICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogREFDIE1hZ25pdHVkZSwgZXhwb3N1cmUgYW5kIGdyZWVuIGdhaW4gY29udHJvbHMgYWRkZWQgYnkgICAgICAgICAgICAgICAgKgorICogTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgKgorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSAic245YzEwMl9zZW5zb3IuaCIKKworCitzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIHBhczIwMmJjYjsKKworCitzdGF0aWMgaW50IHBhczIwMmJjYl9pbml0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQoreworCWludCBlcnIgPSAwOworCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMCwgMHgxMCk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMCwgMHgxMSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMCwgMHgxNCk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgyMCwgMHgxNyk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgzMCwgMHgxOSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwOSwgMHgxOCk7CisKKwllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDAyLCAweDE0KTsKKwllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDAzLCAweDQwKTsKKwllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDBkLCAweDJjKTsKKwllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDBlLCAweDAxKTsKKwllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDBmLCAweGE5KTsKKwllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDEwLCAweDA4KTsKKwllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDEzLCAweDYzKTsKKwllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDE1LCAweDcwKTsKKwllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDExLCAweDAxKTsKKworCW1zbGVlcCg0MDApOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHBhczIwMmJjYl9nZXRfY3RybChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sKiBjdHJsKQoreworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgorCQl7CisJCQlpbnQgcjEgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwNCksCisJCQkgICAgcjIgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwNSk7CisJCQlpZiAocjEgPCAwIHx8IHIyIDwgMCkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCWN0cmwtPnZhbHVlID0gKHIxIDw8IDYpIHwgKHIyICYgMHgzZik7CisJCX0KKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDA5KSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCWN0cmwtPnZhbHVlICY9IDB4MGY7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MDcpKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJY3RybC0+dmFsdWUgJj0gMHgwZjsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQlpZiAoKGN0cmwtPnZhbHVlID0gc245YzEwMl9pMmNfcmVhZChjYW0sIDB4MTApKSA8IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJY3RybC0+dmFsdWUgJj0gMHgxZjsKKwkJcmV0dXJuIDA7CisJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0U6CisJCWlmICgoY3RybC0+dmFsdWUgPSBzbjljMTAyX2kyY19yZWFkKGNhbSwgMHgwOCkpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCQljdHJsLT52YWx1ZSAmPSAweDBmOworCQlyZXR1cm4gMDsKKwljYXNlIFNOOUMxMDJfVjRMMl9DSURfREFDX01BR05JVFVERToKKwkJaWYgKChjdHJsLT52YWx1ZSA9IHNuOWMxMDJfaTJjX3JlYWQoY2FtLCAweDBjKSkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworCitzdGF0aWMgaW50IHBhczIwMmJjYl9zZXRfcGl4X2Zvcm1hdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KiBwaXgpCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAocGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfU045QzEwWCkKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgyNCwgMHgxNyk7CisJZWxzZQorCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDIwLCAweDE3KTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBwYXMyMDJiY2Jfc2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKK3sKKwlpbnQgZXJyID0gMDsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgorCQllcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDA0LCBjdHJsLT52YWx1ZSA+PiA2KTsKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwNSwgY3RybC0+dmFsdWUgJiAweDNmKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwOSwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwkJZXJyICs9IHNuOWMxMDJfaTJjX3dyaXRlKGNhbSwgMHgwNywgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTAsIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0U6CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MDgsIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBTTjlDMTAyX1Y0TDJfQ0lEX0RBQ19NQUdOSVRVREU6CisJCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MGMsIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MTEsIDB4MDEpOworCisJcmV0dXJuIGVyciA/IC1FSU8gOiAwOworfQorCisKK3N0YXRpYyBpbnQgcGFzMjAyYmNiX3NldF9jcm9wKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3JlY3QqIHJlY3QpCit7CisJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gJnBhczIwMmJjYjsKKwlpbnQgZXJyID0gMDsKKwl1OCBoX3N0YXJ0ID0gKHU4KShyZWN0LT5sZWZ0IC0gcy0+Y3JvcGNhcC5ib3VuZHMubGVmdCkgKyA0LAorCSAgIHZfc3RhcnQgPSAodTgpKHJlY3QtPnRvcCAtIHMtPmNyb3BjYXAuYm91bmRzLnRvcCkgKyAzOworCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgaF9zdGFydCwgMHgxMik7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgdl9zdGFydCwgMHgxMyk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgcGFzMjAyYmNiID0geworCS5uYW1lID0gIlBBUzIwMkJDQiIsCisJLm1haW50YWluZXIgPSAiQ2FybG9zIEVkdWFyZG8gTWVkYWdsaWEgRHlvbmlzaW8gIgorCSAgICAgICAgICAgICAgIjxtZWRhZ2xpYUB1bmRsLm9yZy5icj4iLAorCS5zeXNmc19vcHMgPSBTTjlDMTAyX0kyQ19SRUFEIHwgU045QzEwMl9JMkNfV1JJVEUsCisJLmZyZXF1ZW5jeSA9IFNOOUMxMDJfSTJDXzQwMEtIWiB8IFNOOUMxMDJfSTJDXzEwMEtIWiwKKwkuaW50ZXJmYWNlID0gU045QzEwMl9JMkNfMldJUkVTLAorCS5pMmNfc2xhdmVfaWQgPSAweDQwLAorCS5pbml0ID0gJnBhczIwMmJjYl9pbml0LAorCS5xY3RybCA9IHsKKwkJeworCQkJLmlkID0gVjRMMl9DSURfRVhQT1NVUkUsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJleHBvc3VyZSIsCisJCQkubWluaW11bSA9IDB4MDFlNSwKKwkJCS5tYXhpbXVtID0gMHgzZmZmLAorCQkJLnN0ZXAgPSAweDAwMDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDFlNSwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0dBSU4sCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJnbG9iYWwgZ2FpbiIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4MWYsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MGMsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9SRURfQkFMQU5DRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gInJlZCBiYWxhbmNlIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHgwZiwKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwMSwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0JMVUVfQkFMQU5DRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gImJsdWUgYmFsYW5jZSIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4MGYsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDUsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCQl7CisJCQkuaWQgPSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0UsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJncmVlbiBiYWxhbmNlIiwKKwkJCS5taW5pbXVtID0gMHgwMCwKKwkJCS5tYXhpbXVtID0gMHgwZiwKKwkJCS5zdGVwID0gMHgwMSwKKwkJCS5kZWZhdWx0X3ZhbHVlID0gMHgwMCwKKwkJCS5mbGFncyA9IDAsCisJCX0sCisJCXsKKwkJCS5pZCA9IFNOOUMxMDJfVjRMMl9DSURfREFDX01BR05JVFVERSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gIkRBQyBtYWduaXR1ZGUiLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweGZmLAorCQkJLnN0ZXAgPSAweDAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDA0LAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwl9LAorCS5nZXRfY3RybCA9ICZwYXMyMDJiY2JfZ2V0X2N0cmwsCisJLnNldF9jdHJsID0gJnBhczIwMmJjYl9zZXRfY3RybCwKKwkuY3JvcGNhcCA9IHsKKwkJLmJvdW5kcyA9IHsKKwkJCS5sZWZ0ID0gMCwKKwkJCS50b3AgPSAwLAorCQkJLndpZHRoID0gNjQwLAorCQkJLmhlaWdodCA9IDQ4MCwKKwkJfSwKKwkJLmRlZnJlY3QgPSB7CisJCQkubGVmdCA9IDAsCisJCQkudG9wID0gMCwKKwkJCS53aWR0aCA9IDY0MCwKKwkJCS5oZWlnaHQgPSA0ODAsCisJCX0sCisJfSwKKwkuc2V0X2Nyb3AgPSAmcGFzMjAyYmNiX3NldF9jcm9wLAorCS5waXhfZm9ybWF0ID0geworCQkud2lkdGggPSA2NDAsCisJCS5oZWlnaHQgPSA0ODAsCisJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9TQkdHUjgsCisJCS5wcml2ID0gOCwKKwl9LAorCS5zZXRfcGl4X2Zvcm1hdCA9ICZwYXMyMDJiY2Jfc2V0X3BpeF9mb3JtYXQKK307CisKKworaW50IHNuOWMxMDJfcHJvYmVfcGFzMjAyYmNiKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQoreyAgICAgICAKKwlpbnQgcjAgPSAwLCByMSA9IDAsIGVyciA9IDA7CisJdW5zaWduZWQgaW50IHBpZCA9IDA7CisKKwkvKgorCSAqICBNaW5pbWFsIGluaXRpYWxpemF0aW9uIHRvIGVuYWJsZSB0aGUgSTJDIGNvbW11bmljYXRpb24KKwkgKiAgTk9URTogZG8gTk9UIGNoYW5nZSB0aGUgdmFsdWVzIQorCSAqLworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MDEsIDB4MDEpOyAvKiBzZW5zb3IgcG93ZXIgZG93biAqLworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4NDAsIDB4MDEpOyAvKiBzZW5zb3IgcG93ZXIgb24gKi8KKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDI4LCAweDE3KTsgLyogc2Vuc29yIGNsb2NrIGF0IDI0IE1IeiAqLworCWlmIChlcnIpCisJCXJldHVybiAtRUlPOworCisJcjAgPSBzbjljMTAyX2kyY190cnlfcmVhZChjYW0sICZwYXMyMDJiY2IsIDB4MDApOworCXIxID0gc245YzEwMl9pMmNfdHJ5X3JlYWQoY2FtLCAmcGFzMjAyYmNiLCAweDAxKTsKKworCWlmIChyMCA8IDAgfHwgcjEgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCXBpZCA9IChyMCA8PCA0KSB8ICgocjEgJiAweGYwKSA+PiA0KTsKKwlpZiAocGlkICE9IDB4MDE3KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNuOWMxMDJfYXR0YWNoX3NlbnNvcihjYW0sICZwYXMyMDJiY2IpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX3NlbnNvci5oIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9zZW5zb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmY3NDgzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl9zZW5zb3IuaApAQCAtMCwwICsxLDM3MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVBJIGZvciBpbWFnZSBzZW5zb3JzIGNvbm5lY3RlZCB0byB0aGUgU045QzEweCBQQyBDYW1lcmEgQ29udHJvbGxlcnMgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgKgorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfU045QzEwMl9TRU5TT1JfSF8KKyNkZWZpbmUgX1NOOUMxMDJfU0VOU09SX0hfCisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKK3N0cnVjdCBzbjljMTAyX2RldmljZTsKK3N0cnVjdCBzbjljMTAyX3NlbnNvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICAgT1ZFUlZJRVcuCisgICBUaGlzIGlzIGEgc21hbGwgaW50ZXJmYWNlIHRoYXQgYWxsb3dzIHlvdSB0byBhZGQgc3VwcG9ydCBmb3IgYW55IENDRC9DTU9TCisgICBpbWFnZSBzZW5zb3JzIGNvbm5lY3RlZCB0byB0aGUgU045QzEwWCBicmlkZ2VzLiBUaGUgZW50aXJlIEFQSSBpcyBkb2N1bWVudGVkCisgICBiZWxvdy4gSW4gdGhlIG1vc3QgZ2VuZXJhbCBjYXNlLCB0byBzdXBwb3J0IGEgc2Vuc29yIHRoZXJlIGFyZSB0aHJlZSBzdGVwcworICAgeW91IGhhdmUgdG8gZm9sbG93OgorICAgMSkgZGVmaW5lIHRoZSBtYWluICJzbjljMTAyX3NlbnNvciIgc3RydWN0dXJlIGJ5IHNldHRpbmcgdGhlIGJhc2ljIGZpZWxkczsKKyAgIDIpIHdyaXRlIGEgcHJvYmluZyBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYnkgdGhlIGNvcmUgbW9kdWxlIHdoZW4gdGhlIFVTQgorICAgICAgY2FtZXJhIGlzIHJlY29nbml6ZWQsIHRoZW4gYWRkIGJvdGggdGhlIFVTQiBpZHMgYW5kIHRoZSBuYW1lIG9mIHRoYXQKKyAgICAgIGZ1bmN0aW9uIHRvIHRoZSB0d28gY29ycmVzcG9uZGluZyB0YWJsZXMgU0VOU09SX1RBQkxFIGFuZCBJRF9UQUJMRSAoc2VlCisgICAgICBiZWxvdyk7CisgICAzKSBpbXBsZW1lbnQgdGhlIG1ldGhvZHMgdGhhdCB5b3Ugd2FudC9uZWVkIChhbmQgZmlsbCB0aGUgcmVzdCBvZiB0aGUgbWFpbgorICAgICAgc3RydWN0dXJlIGFjY29yZGluZ2x5KS4KKyAgICJzbjljMTAyX3BhczEwNmIuYyIgaXMgYW4gZXhhbXBsZSBvZiBhbGwgdGhpcyBzdHVmZi4gUmVtZW1iZXIgdGhhdCB5b3UgZG8KKyAgIE5PVCBuZWVkIHRvIHRvdWNoIHRoZSBzb3VyY2UgY29kZSBvZiB0aGUgY29yZSBtb2R1bGUgZm9yIHRoZSB0aGluZ3MgdG8gd29yaworICAgcHJvcGVybHksIHVubGVzcyB5b3UgZmluZCBidWdzIG9yIGZsYXdzIGluIGl0LiBGaW5hbGx5LCBkbyBub3QgZm9yZ2V0IHRvCisgICByZWFkIHRoZSBWNEwyIEFQSSBmb3IgY29tcGxldGVuZXNzLgorKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICAgUHJvYmluZyBmdW5jdGlvbnM6IG9uIHN1Y2Nlc3MsIHlvdSBtdXN0IGF0dGFjaCB0aGUgc2Vuc29yIHRvIHRoZSBjYW1lcmEKKyAgIGJ5IGNhbGxpbmcgc245YzEwMl9hdHRhY2hfc2Vuc29yKCkgcHJvdmlkZWQgYmVsb3cuCisgICBUbyBlbmFibGUgdGhlIEkyQyBjb21tdW5pY2F0aW9uLCB5b3UgbWlnaHQgbmVlZCB0byBwZXJmb3JtIGEgcmVhbGx5IGJhc2ljCisgICBpbml0aWFsaXphdGlvbiBvZiB0aGUgU045QzEwWCBjaGlwIGJ5IHVzaW5nIHRoZSB3cml0ZSBmdW5jdGlvbiBkZWNsYXJlZCAKKyAgIGFoZWFkLgorICAgRnVuY3Rpb25zIG11c3QgcmV0dXJuIDAgb24gc3VjY2VzcywgdGhlIGFwcHJvcHJpYXRlIGVycm9yIG90aGVyd2lzZS4KKyovCitleHRlcm4gaW50IHNuOWMxMDJfcHJvYmVfaHY3MTMxZChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSk7CitleHRlcm4gaW50IHNuOWMxMDJfcHJvYmVfbWkwMzQzKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKTsKK2V4dGVybiBpbnQgc245YzEwMl9wcm9iZV9wYXMxMDZiKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKTsKK2V4dGVybiBpbnQgc245YzEwMl9wcm9iZV9wYXMyMDJiY2Ioc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pOworZXh0ZXJuIGludCBzbjljMTAyX3Byb2JlX3RhczUxMTBjMWIoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pOworZXh0ZXJuIGludCBzbjljMTAyX3Byb2JlX3RhczUxMzBkMWIoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pOworCisvKgorICAgQWRkIHRoZSBhYm92ZSBlbnRyaWVzIHRvIHRoaXMgdGFibGUuIEJlIHN1cmUgdG8gYWRkIHRoZSBlbnRyeSBpbiB0aGUgcmlnaHQKKyAgIHBsYWNlLCBzaW5jZSwgb24gZmFpbHVyZSwgdGhlIG5leHQgcHJvYmluZyByb3V0aW5lIGlzIGNhbGxlZCBhY2NvcmRpbmcgdG8gCisgICB0aGUgb3JkZXIgb2YgdGhlIGxpc3QgYmVsb3csIGZyb20gdG9wIHRvIGJvdHRvbS4KKyovCisjZGVmaW5lIFNOOUMxMDJfU0VOU09SX1RBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitzdGF0aWMgaW50ICgqc245YzEwMl9zZW5zb3JfdGFibGVbXSkoc3RydWN0IHNuOWMxMDJfZGV2aWNlKikgPSB7ICAgICAgICAgICAgICBcCisJJnNuOWMxMDJfcHJvYmVfbWkwMzQzLCAvKiBzdHJvbmcgZGV0ZWN0aW9uIGJhc2VkIG9uIFNFTlNPUiBpZHMgKi8gICAgIFwKKwkmc245YzEwMl9wcm9iZV9wYXMxMDZiLCAvKiBzdHJvbmcgZGV0ZWN0aW9uIGJhc2VkIG9uIFNFTlNPUiBpZHMgKi8gICAgXAorCSZzbjljMTAyX3Byb2JlX3BhczIwMmJjYiwgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovICBcCisJJnNuOWMxMDJfcHJvYmVfaHY3MTMxZCwgLyogc3Ryb25nIGRldGVjdGlvbiBiYXNlZCBvbiBTRU5TT1IgaWRzICovICAgIFwKKwkmc245YzEwMl9wcm9iZV90YXM1MTEwYzFiLCAvKiBkZXRlY3Rpb24gYmFzZWQgb24gVVNCIHBpZC92aWQgKi8gICAgICAgXAorCSZzbjljMTAyX3Byb2JlX3RhczUxMzBkMWIsIC8qIGRldGVjdGlvbiBiYXNlZCBvbiBVU0IgcGlkL3ZpZCAqLyAgICAgICBcCisJTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK307CisKKy8qIEF0dGFjaCBhIHByb2JlZCBzZW5zb3IgdG8gdGhlIGNhbWVyYS4gKi8KK2V4dGVybiB2b2lkIAorc245YzEwMl9hdHRhY2hfc2Vuc29yKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yKTsKKworLyogRWFjaCBTTjlDMTBYIGNhbWVyYSBoYXMgcHJvcGVyIFBJRC9WSUQgaWRlbnRpZmllcnMuIEFkZCB0aGVtIGhlcmUgaW4gY2FzZS4qLworI2RlZmluZSBTTjlDMTAyX0lEX1RBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHNuOWMxMDJfaWRfdGFibGVbXSA9IHsgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwMSksIH0sIC8qIFRBUzUxMTBDMUIgKi8gICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDA1KSwgfSwgLyogVEFTNTExMEMxQiAqLyAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMDkpLCB9LCAvKiBQQVMxMDZCICovICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAwZCksIH0sIC8qIFBBUzEwNkIgKi8gICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI0KSwgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMjUpLCB9LCAvKiBUQVM1MTMwRDFCIGFuZCBUQVM1MTEwQzFCICovICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyOCksIH0sIC8qIFBBUzIwMkJDQiAqLyAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDI5KSwgfSwgLyogUEFTMTA2QiAqLyAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMmEpLCB9LCAvKiBIVjcxMzFEICovICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjAyYiksIH0sIC8qIE1JLTAzNDMgKi8gICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDJjKSwgfSwgLyogT1Y3NjIwICovICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwMzApLCB9LCAvKiBNSTAzeCAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4MCksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDgyKSwgfSwgLyogTUkwMzQzIGFuZCBNSTAzNjAgKi8gICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwODMpLCB9LCAvKiBIVjcxMzFbRHxFMV0gKi8gICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4OCksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDhhKSwgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwOGIpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjA4YyksIH0sIC8qIEhWNzEzMXggKi8gICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MDhlKSwgfSwgLyogQ0lTLVZGMTAgKi8gICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwOGYpLCB9LCAvKiBPVjc2MzAgKi8gICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhMCksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGEyKSwgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYTMpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhOCksIH0sIC8qIFBBUzEwNkIgKi8gICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGFhKSwgfSwgLyogVEFTNTEzMEQxQiAqLyAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYWIpLCB9LCAvKiBUQVM1MTEwQzFCICovICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjBhYyksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGFlKSwgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYWYpLCB9LCAvKiBQQVMyMDJCQ0IgKi8gICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjBiMCksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGIyKSwgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYjMpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjBiOCksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGJhKSwgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IFVTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYmIpLCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgVVNCX0RFVklDRSgweDBjNDUsIDB4NjBiYyksIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJeyBVU0JfREVWSUNFKDB4MGM0NSwgMHg2MGJlKSwgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICAgUmVhZC93cml0ZSByb3V0aW5lczogdGhleSBhbHdheXMgcmV0dXJuIC0xIG9uIGVycm9yLCAwIG9yIHRoZSByZWFkIHZhbHVlCisgICBvdGhlcndpc2UuIE5PVEUgdGhhdCBhIHJlYWwgcmVhZCBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgU045QzEwWAorICAgY2hpcCBmb3Igc29tZSBvZiBpdHMgcmVnaXN0ZXJzLiBUbyB3b3JrIGFyb3VuZCB0aGlzIHByb2JsZW0sIGEgcHNldWRvLXJlYWQKKyAgIGNhbGwgaXMgcHJvdmlkZWQgaW5zdGVhZDogaXQgcmV0dXJucyB0aGUgbGFzdCBzdWNjZXNzZnVsbHkgd3JpdHRlbiB2YWx1ZSAKKyAgIG9uIHRoZSByZWdpc3RlciAoMCBpZiBpdCBoYXMgbmV2ZXIgYmVlbiB3cml0dGVuKSwgdGhlIHVzdWFsIC0xIG9uIGVycm9yLgorKi8KKworLyogVGhlICJ0cnkiIEkyQyBJL08gdmVyc2lvbnMgYXJlIHVzZWQgd2hlbiBwcm9iaW5nIHRoZSBzZW5zb3IgKi8KK2V4dGVybiBpbnQgc245YzEwMl9pMmNfdHJ5X3dyaXRlKHN0cnVjdCBzbjljMTAyX2RldmljZSosc3RydWN0IHNuOWMxMDJfc2Vuc29yKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGFkZHJlc3MsIHU4IHZhbHVlKTsKK2V4dGVybiBpbnQgc245YzEwMl9pMmNfdHJ5X3JlYWQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKixzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBhZGRyZXNzKTsKKworLyoKKyAgIFRoZXNlIG11c3QgYmUgdXNlZCBpZiBhbmQgb25seSBpZiB0aGUgc2Vuc29yIGRvZXNuJ3QgaW1wbGVtZW50IHRoZSBzdGFuZGFyZAorICAgSTJDIHByb3RvY29sLiBUaGVyZSBhcmUgYSBudW1iZXIgb2YgZ29vZCByZWFzb25zIHdoeSB5b3UgbXVzdCB1c2UgdGhlIAorICAgc2luZ2xlLWJ5dGUgdmVyc2lvbnMgb2YgdGhlc2UgZnVuY3Rpb25zOiBkbyBub3QgYWJ1c2UuIFRoZSBmaXJzdCBmdW5jdGlvbgorICAgd3JpdGVzIG4gYnl0ZXMsIGZyb20gZGF0YTAgdG8gZGF0YW4sIHRvIHJlZ2lzdGVycyAweDA5IC0gMHgwOStuIG9mIFNOOUMxMFgKKyAgIGNoaXAuIFRoZSBzZWNvbmQgb25lIHByb2dyYW1zIHRoZSByZWdpc3RlcnMgMHgwOSBhbmQgMHgxMCB3aXRoIGRhdGEwIGFuZAorICAgZGF0YTEsIGFuZCBwbGFjZXMgdGhlIG4gYnl0ZXMgcmVhZCBmcm9tIHRoZSBzZW5zb3IgcmVnaXN0ZXIgdGFibGUgaW4gdGhlCisgICBidWZmZXIgcG9pbnRlZCBieSAnYnVmZmVyJy4gQm90aCB0aGUgZnVuY3Rpb25zIHJldHVybiAtMSBvbiBlcnJvcjsgdGhlIHdyaXRlCisgICB2ZXJzaW9uIHJldHVybnMgMCBvbiBzdWNjZXNzLCB3aGlsZSB0aGUgcmVhZCB2ZXJzaW9uIHJldHVybnMgdGhlIGZpcnN0IHJlYWQKKyAgIGJ5dGUuCisqLworZXh0ZXJuIGludCBzbjljMTAyX2kyY190cnlfcmF3X3dyaXRlKHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbjljMTAyX3NlbnNvciogc2Vuc29yLCB1OCBuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBkYXRhMCwgdTggZGF0YTEsIHU4IGRhdGEyLCB1OCBkYXRhMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBkYXRhNCwgdTggZGF0YTUpOworZXh0ZXJuIGludCBzbjljMTAyX2kyY190cnlfcmF3X3JlYWQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHNlbnNvciwgdTggZGF0YTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBkYXRhMSwgdTggbiwgdTggYnVmZmVyW10pOworCisvKiBUbyBiZSB1c2VkIGFmdGVyIHRoZSBzZW5zb3Igc3RydWN0IGhhcyBiZWVuIGF0dGFjaGVkIHRvIHRoZSBjYW1lcmEgc3RydWN0ICovCitleHRlcm4gaW50IHNuOWMxMDJfaTJjX3dyaXRlKHN0cnVjdCBzbjljMTAyX2RldmljZSosIHU4IGFkZHJlc3MsIHU4IHZhbHVlKTsKK2V4dGVybiBpbnQgc245YzEwMl9pMmNfcmVhZChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqLCB1OCBhZGRyZXNzKTsKKworLyogSS9PIG9uIHJlZ2lzdGVycyBpbiB0aGUgYnJpZGdlLiBDb3VsZCBiZSB1c2VkIGJ5IHRoZSBzZW5zb3IgbWV0aG9kcyB0b28gKi8KK2V4dGVybiBpbnQgc245YzEwMl93cml0ZV9yZWcoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiwgdTggdmFsdWUsIHUxNiBpbmRleCk7CitleHRlcm4gaW50IHNuOWMxMDJfcHJlYWRfcmVnKHN0cnVjdCBzbjljMTAyX2RldmljZSosIHUxNiBpbmRleCk7CisKKy8qCisgICBOT1RFOiB0aGVyZSBhcmUgbm8gZXhwb3J0ZWQgZGVidWdnaW5nIGZ1bmN0aW9ucy4gVG8gdW5pZm9ybSB0aGUgb3V0cHV0IHlvdQorICAgbXVzdCB1c2UgdGhlIGRldl9pbmZvKCkvZGV2X3dhcm4oKS9kZXZfZXJyKCkgbWFjcm9zIGRlZmluZWQgaW4gZGV2aWNlLmgsCisgICBhbHJlYWR5IGluY2x1ZGVkIGhlcmUsIHRoZSBhcmd1bWVudCBiZWluZyB0aGUgc3RydWN0IGRldmljZSAnZGV2JyBvZiB0aGUKKyAgIHNlbnNvciBzdHJ1Y3R1cmUuIERvIE5PVCB1c2UgdGhlc2UgbWFjcm9zIGJlZm9yZSB0aGUgc2Vuc29yIGlzIGF0dGFjaGVkIG9yCisgICB0aGUga2VybmVsIHdpbGwgY3Jhc2ghIEhvd2V2ZXIsIHlvdSBzaG91bGQgbm90IG5lZWQgdG8gbm90aWZ5IHRoZSB1c2VyIGFib3V0CisgICBjb21tb24gZXJyb3JzIG9yIG90aGVyIG1lc3NhZ2VzLCBzaW5jZSB0aGlzIGlzIGRvbmUgYnkgdGhlIG1hc3RlciBtb2R1bGUuCisqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2VudW0gc245YzEwMl9pMmNfc3lzZnNfb3BzIHsKKwlTTjlDMTAyX0kyQ19SRUFEID0gMHgwMSwKKwlTTjlDMTAyX0kyQ19XUklURSA9IDB4MDIsCit9OworCitlbnVtIHNuOWMxMDJfaTJjX2ZyZXF1ZW5jeSB7IC8qIHNlbnNvcnMgbWF5IHN1cHBvcnQgYm90aCB0aGUgZnJlcXVlbmNpZXMgKi8KKwlTTjlDMTAyX0kyQ18xMDBLSFogPSAweDAxLAorCVNOOUMxMDJfSTJDXzQwMEtIWiA9IDB4MDIsCit9OworCitlbnVtIHNuOWMxMDJfaTJjX2ludGVyZmFjZSB7CisJU045QzEwMl9JMkNfMldJUkVTLAorCVNOOUMxMDJfSTJDXzNXSVJFUywKK307CisKK3N0cnVjdCBzbjljMTAyX3NlbnNvciB7CisJY2hhciBuYW1lWzMyXSwgLyogc2Vuc29yIG5hbWUgKi8KKwkgICAgIG1haW50YWluZXJbNjRdOyAvKiBuYW1lIG9mIHRoZSBtYW50YWluZXIgPGVtYWlsPiAqLworCisJLyogU3VwcG9ydGVkIG9wZXJhdGlvbnMgdGhyb3VnaCB0aGUgJ3N5c2ZzJyBpbnRlcmZhY2UgKi8KKwllbnVtIHNuOWMxMDJfaTJjX3N5c2ZzX29wcyBzeXNmc19vcHM7CisKKwkvKgorCSAgIFRoZXNlIHNlbnNvciBjYXBhYmlsaXRpZXMgbXVzdCBiZSBwcm92aWRlZCBpZiB0aGUgU045QzEwWCBjb250cm9sbGVyCisJICAgbmVlZHMgdG8gY29tbXVuaWNhdGUgdGhyb3VnaCB0aGUgc2Vuc29yIHNlcmlhbCBpbnRlcmZhY2UgYnkgdXNpbmcKKwkgICBhdCBsZWFzdCBvbmUgb2YgdGhlIGkyYyBmdW5jdGlvbnMgYXZhaWxhYmxlLgorCSovCisJZW51bSBzbjljMTAyX2kyY19mcmVxdWVuY3kgZnJlcXVlbmN5OworCWVudW0gc245YzEwMl9pMmNfaW50ZXJmYWNlIGludGVyZmFjZTsKKworCS8qCisJICAgVGhpcyBpZGVudGlmaWVyIG11c3QgYmUgcHJvdmlkZWQgaWYgdGhlIGltYWdlIHNlbnNvciBpbXBsZW1lbnRzCisJICAgdGhlIHN0YW5kYXJkIEkyQyBwcm90b2NvbC4KKwkqLworCXU4IGkyY19zbGF2ZV9pZDsgLyogcmVnLiAweDA5ICovCisKKwkvKgorCSAgIE5PVEU6IFdoZXJlIG5vdCBub3RlZCxtb3N0IG9mIHRoZSBmdW5jdGlvbnMgYmVsb3cgYXJlIG5vdCBtYW5kYXRvcnkuCisJICAgICAgICAgU2V0IHRvIG51bGwgaWYgeW91IGRvIG5vdCBpbXBsZW1lbnQgdGhlbS4gSWYgaW1wbGVtZW50ZWQsCisJICAgICAgICAgdGhleSBtdXN0IHJldHVybiAwIG9uIHN1Y2Nlc3MsIHRoZSBwcm9wZXIgZXJyb3Igb3RoZXJ3aXNlLgorCSovCisKKwlpbnQgKCppbml0KShzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSk7CisJLyoKKwkgICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBzZW5zb3IgaGFzIGJlZW4gYXR0YWNoZWQuIAorCSAgIEl0IHNob3VsZCBiZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHNlbnNvciBvbmx5LCBidXQgbWF5IGFsc28KKwkgICBjb25maWd1cmUgcGFydCBvZiB0aGUgU045QzEwWCBjaGlwIGlmIG5lY2Vzc2FyeS4gWW91IGRvbid0IG5lZWQgdG8KKwkgICBzZXR1cCBwaWN0dXJlIHNldHRpbmdzIGxpa2UgYnJpZ2h0bmVzcywgY29udHJhc3QsIGV0Yy4uIGhlcmUsIGlmCisJICAgdGhlIGNvcnJpc3BvbmRpbmcgY29udHJvbHMgYXJlIGltcGxlbWVudGVkIChzZWUgYmVsb3cpLCBzaW5jZSAKKwkgICB0aGV5IGFyZSBhZGp1c3RlZCBpbiB0aGUgY29yZSBkcml2ZXIgYnkgY2FsbGluZyB0aGUgc2V0X2N0cmwoKQorCSAgIG1ldGhvZCBhZnRlciBpbml0KCksIHdoZXJlIHRoZSBhcmd1bWVudHMgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcworCSAgIHNwZWNpZmllZCBpbiB0aGUgdjRsMl9xdWVyeWN0cmwgbGlzdCBvZiBzdXBwb3J0ZWQgY29udHJvbHM7CisJICAgU2FtZSBzdWdnZXN0aW9ucyBhcHBseSBmb3Igb3RoZXIgc2V0dGluZ3MsIF9pZl8gdGhlIGNvcnJlc3BvbmRpbmcKKwkgICBtZXRob2RzIGFyZSBwcmVzZW50OyBpZiBub3QsIHRoZSBpbml0aWFsaXphdGlvbiBtdXN0IGNvbmZpZ3VyZSB0aGUKKwkgICBzZW5zb3IgYWNjb3JkaW5nIHRvIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlcyBiZWxvdy4KKwkqLworCisJc3RydWN0IHY0bDJfcXVlcnljdHJsIHFjdHJsW1Y0TDJfQ0lEX0xBU1RQMS1WNEwyX0NJRF9CQVNFXTsKKwkvKgorCSAgIE9wdGlvbmFsIGxpc3Qgb2YgZGVmYXVsdCBjb250cm9scywgZGVmaW5lZCBhcyBpbmRpY2F0ZWQgaW4gdGhlIAorCSAgIFY0TDIgQVBJLiBNZW51IHR5cGUgY29udHJvbHMgYXJlIG5vdCBoYW5kbGVkIGJ5IHRoaXMgaW50ZXJmYWNlLgorCSovCisKKwlpbnQgKCpnZXRfY3RybCkoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpOworCWludCAoKnNldF9jdHJsKShzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwKKwkgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCk7CisJLyoKKwkgICBZb3UgbXVzdCBpbXBsZW1lbnQgYXQgbGVhc3QgdGhlIHNldF9jdHJsIG1ldGhvZCBpZiB5b3UgaGF2ZSBkZWZpbmVkCisJICAgdGhlIGxpc3QgYWJvdmUuIFRoZSByZXR1cm5lZCB2YWx1ZSBtdXN0IGZvbGxvdyB0aGUgVjRMMgorCSAgIHNwZWNpZmljYXRpb25zIGZvciB0aGUgVklESU9DX0d8Q19DVFJMIGlvY3Rscy4gVjRMMl9DSURfSHxWQ0VOVEVSCisJICAgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIsIHNvIGRvIG5vdCBpbXBsZW1lbnQgdGhlbS4gQWxzbywKKwkgICB5b3UgZG9uJ3QgaGF2ZSB0byBjaGVjayB3aGV0aGVyIHRoZSBwYXNzZWQgdmFsdWVzIGFyZSBvdXQgb2YgYm91bmRzLAorCSAgIGdpdmVuIHRoYXQgdGhpcyBpcyBkb25lIGJ5IHRoZSBjb3JlIG1vZHVsZS4KKwkqLworCisJc3RydWN0IHY0bDJfY3JvcGNhcCBjcm9wY2FwOworCS8qCisJICAgVGhpbmsgdGhlIGltYWdlIHNlbnNvciBhcyBhIGdyaWQgb2YgUixHLEIgbW9ub2Nocm9tYXRpYyBwaXhlbHMKKwkgICBkaXNwb3NlZCBhY2NvcmRpbmcgdG8gYSBwYXJ0aWN1bGFyIEJheWVyIHBhdHRlcm4sIHdoaWNoIGRlc2NyaWJlcworCSAgIHRoZSBjb21wbGV0ZSBhcnJheSBvZiBwaXhlbHMsIGZyb20gKDAsMCkgdG8gKHhtYXgsIHltYXgpLiBXZSB3aWxsCisJICAgdXNlIHRoaXMgY29vcmRpbmF0ZSBzeXN0ZW0gZnJvbSBub3cgb24uIEl0IGlzIGFzc3VtZWQgdGhlIHNlbnNvcgorCSAgIGNoaXAgY2FuIGJlIHByb2dyYW1tZWQgdG8gY2FwdHVyZS90cmFuc21pdCBhIHN1YnNlY3Rpb24gb2YgdGhhdAorCSAgIGFycmF5IG9mIHBpeGVsczogd2Ugd2lsbCBjYWxsIHRoaXMgc3Vic2VjdGlvbiAiYWN0aXZlIHdpbmRvdyIuCisJICAgSXQgaXMgbm90IGFsd2F5cyB0cnVlIHRoYXQgdGhlIGxhcmdlc3QgYWNoaWV2YWJsZSBhY3RpdmUgd2luZG93IGNhbgorCSAgIGNvdmVyIHRoZSB3aG9sZSBhcnJheSBvZiBwaXhlbHMuIFRoZSBWNEwyIEFQSSBkZWZpbmVzIGFub3RoZXIKKwkgICBhcmVhIGNhbGxlZCAic291cmNlIHJlY3RhbmdsZSIsIHdoaWNoLCBpbiB0dXJuLCBpcyBhIHN1YnJlY3RhbmdsZSBvZgorCSAgIHRoZSBhY3RpdmUgd2luZG93LiBUaGUgU045QzEwWCBjaGlwIGlzIGFsd2F5cyBwcm9ncmFtbWVkIHRvIHJlYWQgdGhlCisJICAgc291cmNlIHJlY3RhbmdsZS4KKwkgICBUaGUgYm91bmRzIG9mIGJvdGggdGhlIGFjdGl2ZSB3aW5kb3cgYW5kIHRoZSBzb3VyY2UgcmVjdGFuZ2xlIGFyZQorCSAgIHNwZWNpZmllZCBpbiB0aGUgY3JvcGNhcCBzdWJzdHJ1Y3R1cmVzICdib3VuZHMnIGFuZCAnZGVmcmVjdCcuCisJICAgQnkgZGVmYXVsdCwgdGhlIHNvdXJjZSByZWN0YW5nbGUgc2hvdWxkIGNvdmVyIHRoZSBsYXJnZXN0IHBvc3NpYmxlCisJICAgYXJlYS4gQWdhaW4sIGl0IGlzIG5vdCBhbHdheXMgdHJ1ZSB0aGF0IHRoZSBsYXJnZXN0IHNvdXJjZSByZWN0YW5nbGUKKwkgICBjYW4gY292ZXIgdGhlIGVudGlyZSBhY3RpdmUgd2luZG93LCBhbHRob3VnaCBpdCBpcyBhIHJhcmUgY2FzZSBmb3IgCisJICAgdGhlIGhhcmR3YXJlIHdlIGhhdmUuIFRoZSBib3VuZHMgb2YgdGhlIHNvdXJjZSByZWN0YW5nbGUgX211c3RfIGJlCisJICAgbXVsdGlwbGUgb2YgMTYgYW5kIG11c3QgdXNlIHRoZSBzYW1lIGNvb3JkaW5hdGUgc3lzdGVtIGFzIGluZGljYXRlZAorCSAgIGJlZm9yZTsgdGhlaXIgY2VudGVycyBzaGFsbCBhbGlnbiBpbml0aWFsbHkuCisJICAgSWYgbmVjZXNzYXJ5LCB0aGUgc2Vuc29yIGNoaXAgbXVzdCBiZSBpbml0aWFsaXplZCBkdXJpbmcgaW5pdCgpIHRvCisJICAgc2V0IHRoZSBib3VuZHMgb2YgdGhlIGFjdGl2ZSBzZW5zb3Igd2luZG93OyBob3dldmVyLCBieSBkZWZhdWx0LCBpdAorCSAgIHVzdWFsbHkgY292ZXJzIHRoZSBsYXJnZXN0IGFjaGlldmFibGUgYXJlYSAobWF4d2lkdGggeCBtYXhoZWlnaHQpCisJICAgb2YgcGl4ZWxzLCBzbyBubyBwYXJ0aWN1bGFyIGluaXRpYWxpemF0aW9uIGlzIG5lZWRlZCwgaWYgeW91IGhhdmUKKwkgICBkZWZpbmVkIHRoZSBjb3JyZWN0IGRlZmF1bHQgYm91bmRzIGluIHRoZSBzdHJ1Y3R1cmVzLgorCSAgIFNlZSB0aGUgVjRMMiBBUEkgZm9yIGZ1cnRoZXIgZGV0YWlscy4KKwkgICBOT1RFOiBvbmNlIHlvdSBoYXZlIGRlZmluZWQgdGhlIGJvdW5kcyBvZiB0aGUgYWN0aXZlIHdpbmRvdworCSAgICAgICAgIChzdHJ1Y3QgY3JvcGNhcC5ib3VuZHMpIHlvdSBtdXN0IG5vdCBjaGFuZ2UgdGhlbS5hbnltb3JlLgorCSAgIE9ubHkgJ2JvdW5kcycgYW5kICdkZWZyZWN0JyBmaWVsZHMgYXJlIG1hbmRhdG9yeSwgb3RoZXIgZmllbGRzCisJICAgd2lsbCBiZSBpZ25vcmVkLgorCSovCisKKwlpbnQgKCpzZXRfY3JvcCkoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCisJICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3JlY3QqIHJlY3QpOworCS8qCisJICAgVG8gYmUgY2FsbGVkIG9uIFZJRElPQ19DX1NFVENST1AuIFRoZSBjb3JlIG1vZHVsZSBhbHdheXMgY2FsbHMgYQorCSAgIGRlZmF1bHQgcm91dGluZSB3aGljaCBjb25maWd1cmVzIHRoZSBhcHByb3ByaWF0ZSBTTjlDMTBYIHJlZ3MgKGFsc28KKwkgICBzY2FsaW5nKSwgYnV0IHlvdSBtYXkgbmVlZCB0byBvdmVycmlkZS9hZGp1c3Qgc3BlY2lmaWMgc3R1ZmYuCisJICAgJ3JlY3QnIGNvbnRhaW5zIHdpZHRoIGFuZCBoZWlnaHQgdmFsdWVzIHRoYXQgYXJlIG11bHRpcGxlIG9mIDE2OiBpbgorCSAgIGNhc2UgeW91IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGZ1bmN0aW9uLCB5b3UgYWx3YXlzIGhhdmUgdG8gcHJvZ3JhbQorCSAgIHRoZSBjaGlwIHRvIG1hdGNoIHRob3NlIHZhbHVlczsgb24gZXJyb3IgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nCisJICAgZXJyb3IgY29kZSB3aXRob3V0IHJvbGxpbmcgYmFjay4KKwkgICBOT1RFOiBpbiBjYXNlLCB5b3UgbXVzdCBwcm9ncmFtIHRoZSBTTjlDMTBYIGNoaXAgdG8gZ2V0IHJpZCBvZiAKKwkgICAgICAgICBibGFuayBwaXhlbHMgb3IgYmxhbmsgbGluZXMgYXQgdGhlIF9zdGFydF8gb2YgZWFjaCBsaW5lIG9yCisJICAgICAgICAgZnJhbWUgYWZ0ZXIgZWFjaCBIU1lOQyBvciBWU1lOQywgc28gdGhhdCB0aGUgaW1hZ2Ugc3RhcnRzIHdpdGgKKwkgICAgICAgICByZWFsIFJHQiBkYXRhIChzZWUgcmVncyAweDEyLCAweDEzKSAoaGF2aW5nIHNldCBIX1NJWkUgYW5kLAorCSAgICAgICAgIFZfU0laRSB5b3UgZG9uJ3QgaGF2ZSB0byBjYXJlIGFib3V0IGJsYW5rIHBpeGVscyBvciBibGFuaworCSAgICAgICAgIGxpbmVzIGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lIG9yIGZyYW1lKS4KKwkqLworCisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBwaXhfZm9ybWF0OworCS8qCisJICAgV2hhdCB5b3UgaGF2ZSB0byBkZWZpbmUgaGVyZSBhcmU6IDEpIGluaXRpYWwgJ3dpZHRoJyBhbmQgJ2hlaWdodCcgb2YKKwkgICB0aGUgdGFyZ2V0IHJlY3RhbmdsZSAyKSB0aGUgaW5pdGlhbCAncGl4ZWxmb3JtYXQnLCB3aGljaCBjYW4gYmUKKwkgICBlaXRoZXIgVjRMMl9QSVhfRk1UX1NOOUMxMFggKGZvciBjb21wcmVzc2VkIHZpZGVvKSBvcgorCSAgIFY0TDJfUElYX0ZNVF9TQkdHUjggMykgJ3ByaXYnLCB3aGljaCB3ZSdsbCBiZSB1c2VkIHRvIGluZGljYXRlIHRoZQorCSAgIG51bWJlciBvZiBiaXRzIHBlciBwaXhlbCBmb3IgdW5jb21wcmVzc2VkIHZpZGVvLCA4IG9yIDkgKGRlc3BpdGUgdGhlCisJICAgY3VycmVudCB2YWx1ZSBvZiAncGl4ZWxmb3JtYXQnKS4KKwkgICBOT1RFIDE6IGJvdGggJ3dpZHRoJyBhbmQgJ2hlaWdodCcgX211c3RfIGJlIGVpdGhlciAxLzEgb3IgMS8yIG9yIDEvNAorCSAgICAgICAgICAgb2YgY3JvcGNhcC5kZWZyZWN0LndpZHRoIGFuZCBjcm9wY2FwLmRlZnJlY3QuaGVpZ2h0LiBJCisJICAgICAgICAgICBzdWdnZXN0IDEvMS4KKwkgICBOT1RFIDI6IFRoZSBpbml0aWFsIGNvbXByZXNzaW9uIHF1YWxpdHkgaXMgZGVmaW5lZCBieSB0aGUgZmlyc3QgYml0CisJICAgICAgICAgICBvZiByZWcgMHgxNyBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBpbWFnZSBzZW5zb3IuCisJICAgTk9URSAzOiBhcyBzYWlkIGFib3ZlLCB5b3UgaGF2ZSB0byBwcm9ncmFtIHRoZSBTTjlDMTBYIGNoaXAgdG8gZ2V0CisJICAgICAgICAgICByaWQgb2YgYW55IGJsYW5rIHBpeGVscywgc28gdGhhdCB0aGUgb3V0cHV0IG9mIHRoZSBzZW5zb3IKKwkgICAgICAgICAgIG1hdGNoZXMgdGhlIFJHQiBiYXllciBzZXF1ZW5jZSAoaS5lLiBCR0JHQkcuLi5HUkdSR1IpLgorCSovCisKKwlpbnQgKCpzZXRfcGl4X2Zvcm1hdCkoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sCisJICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBpeCk7CisJLyoKKwkgICBUbyBiZSBjYWxsZWQgb24gVklESU9DX1NfRk1ULCB3aGVuIHN3aXRjaGluZyBmcm9tIHRoZSBTQkdHUjggdG8KKwkgICBTTjlDMTBYIHBpeGVsIGZvcm1hdCBvciB2aWNldmVyc2EuIE9uIGVycm9yIHJldHVybiB0aGUgY29ycmVzcG9uZGluZworCSAgIGVycm9yIGNvZGUgd2l0aG91dCByb2xsaW5nIGJhY2suCisJKi8KKworCWNvbnN0IHN0cnVjdCBkZXZpY2UqIGRldjsKKwkvKgorCSAgIFRoaXMgaXMgdGhlIGFyZ3VtZW50IGZvciBkZXZfZXJyKCksIGRldl9pbmZvKCkgYW5kIGRldl93YXJuKCkuIEl0CisJICAgaXMgdXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiBZb3UgbXVzdCBub3QgYWNjZXNzIHRoZSBzdHJ1Y3QKKwkgICBiZWZvcmUgdGhlIHNlbnNvciBpcyBhdHRhY2hlZC4KKwkqLworCisJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2UqIHVzYmRldjsKKwkvKgorCSAgIFBvaW50cyB0byB0aGUgdXNiX2RldmljZSBzdHJ1Y3QgYWZ0ZXIgdGhlIHNlbnNvciBpcyBhdHRhY2hlZC4KKwkgICBEbyBub3QgdG91Y2ggdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KKwkqLworCisJLyoKKwkgICBEbyBOT1Qgd3JpdGUgdG8gdGhlIGRhdGEgYmVsb3csIGl0J3MgUkVBRCBPTkxZLiBJdCBpcyB1c2VkIGJ5IHRoZQorCSAgIGNvcmUgbW9kdWxlIHRvIHN0b3JlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkIHZhbHVlcyBvZiB0aGUgYWJvdmUKKwkgICBzZXR0aW5ncywgZm9yIHJvbGxiYWNrcy4uZXRjLi5pbiBjYXNlIG9mIGVycm9ycyBkdXJpbmcgYXRvbWljIEkvTworCSovCisJc3RydWN0IHY0bDJfcXVlcnljdHJsIF9xY3RybFtWNEwyX0NJRF9MQVNUUDEtVjRMMl9DSURfQkFTRV07CisJc3RydWN0IHY0bDJfcmVjdCBfcmVjdDsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUHJpdmF0ZSBpb2N0bCdzIGZvciBjb250cm9sIHNldHRpbmdzIHN1cHBvcnRlZCBieSBzb21lIGltYWdlIHNlbnNvcnMgKi8KKyNkZWZpbmUgU045QzEwMl9WNEwyX0NJRF9EQUNfTUFHTklUVURFIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRQorI2RlZmluZSBTTjlDMTAyX1Y0TDJfQ0lEX0dSRUVOX0JBTEFOQ0UgVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMQorI2RlZmluZSBTTjlDMTAyX1Y0TDJfQ0lEX1JFU0VUX0xFVkVMIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDIKKyNkZWZpbmUgU045QzEwMl9WNEwyX0NJRF9QSVhFTF9CSUFTX1ZPTFRBR0UgVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMworCisjZW5kaWYgLyogX1NOOUMxMDJfU0VOU09SX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX3RhczUxMTBjMWIuYyBiL2RyaXZlcnMvdXNiL21lZGlhL3NuOWMxMDJfdGFzNTExMGMxYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MGQ2MjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX3RhczUxMTBjMWIuYwpAQCAtMCwwICsxLDE3NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGx1Zy1pbiBmb3IgVEFTNTExMEMxQiBpbWFnZSBzZW5zb3IgY29ubmVjdGVkIHRvIHRoZSBTTjlDMTB4IFBDIENhbWVyYSAgKgorICogQ29udHJvbGxlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgKgorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInNuOWMxMDJfc2Vuc29yLmgiCisKKworc3RhdGljIHN0cnVjdCBzbjljMTAyX3NlbnNvciB0YXM1MTEwYzFiOworCitzdGF0aWMgc3RydWN0IHY0bDJfY29udHJvbCB0YXM1MTEwYzFiX2dhaW47CisKKworc3RhdGljIGludCB0YXM1MTEwYzFiX2luaXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0pCit7CisJaW50IGVyciA9IDA7CisKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAxLCAweDAxKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDQ0LCAweDAxKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDEwKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDExKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDBhLCAweDE0KTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDYwLCAweDE3KTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDA2LCAweDE4KTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweGZiLCAweDE5KTsKKworCWVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4YzAsIDB4ODApOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHRhczUxMTBjMWJfZ2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJY3RybC0+dmFsdWUgPSB0YXM1MTEwYzFiX2dhaW4udmFsdWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgdGFzNTExMGMxYl9zZXRfY3RybChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKK3sKKwlpbnQgZXJyID0gMDsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJCWlmICghKGVyciArPSBzbjljMTAyX2kyY193cml0ZShjYW0sIDB4MjAsIDB4ZjYgLSBjdHJsLT52YWx1ZSkpKQorCQkJdGFzNTExMGMxYl9nYWluLnZhbHVlID0gY3RybC0+dmFsdWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBlcnIgPyAtRUlPIDogMDsKK30KKworCitzdGF0aWMgaW50IHRhczUxMTBjMWJfc2V0X2Nyb3Aoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3JlY3QqIHJlY3QpCit7CisJc3RydWN0IHNuOWMxMDJfc2Vuc29yKiBzID0gJnRhczUxMTBjMWI7CisJaW50IGVyciA9IDA7CisJdTggaF9zdGFydCA9ICh1OCkocmVjdC0+bGVmdCAtIHMtPmNyb3BjYXAuYm91bmRzLmxlZnQpICsgNjksCisJICAgdl9zdGFydCA9ICh1OCkocmVjdC0+dG9wIC0gcy0+Y3JvcGNhcC5ib3VuZHMudG9wKSArIDk7CisKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCBoX3N0YXJ0LCAweDEyKTsKKwllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCB2X3N0YXJ0LCAweDEzKTsKKworCS8qIERvbid0IGNoYW5nZSAhICovCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgxNCwgMHgxYSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwYSwgMHgxYik7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgc245YzEwMl9wcmVhZF9yZWcoY2FtLCAweDE5KSwgMHgxOSk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgdGFzNTExMGMxYl9zZXRfcGl4X2Zvcm1hdChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCogcGl4KQoreworCWludCBlcnIgPSAwOworCisJaWYgKHBpeC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1NOOUMxMFgpCisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MmIsIDB4MTkpOworCWVsc2UKKwkJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHhmYiwgMHgxOSk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgdGFzNTExMGMxYiA9IHsKKwkubmFtZSA9ICJUQVM1MTEwQzFCIiwKKwkubWFpbnRhaW5lciA9ICJMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+IiwKKwkuc3lzZnNfb3BzID0gU045QzEwMl9JMkNfV1JJVEUsCisJLmZyZXF1ZW5jeSA9IFNOOUMxMDJfSTJDXzEwMEtIWiwKKwkuaW50ZXJmYWNlID0gU045QzEwMl9JMkNfM1dJUkVTLAorCS5pbml0ID0gJnRhczUxMTBjMWJfaW5pdCwKKwkucWN0cmwgPSB7CisJCXsKKwkJCS5pZCA9IFY0TDJfQ0lEX0dBSU4sCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJnbG9iYWwgZ2FpbiIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4ZjYsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4NDAsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCX0sCisJLnNldF9jdHJsID0gJnRhczUxMTBjMWJfc2V0X2N0cmwsCisJLmNyb3BjYXAgPSB7CisJCS5ib3VuZHMgPSB7CisJCQkubGVmdCA9IDAsCisJCQkudG9wID0gMCwKKwkJCS53aWR0aCA9IDM1MiwKKwkJCS5oZWlnaHQgPSAyODgsCisJCX0sCisJCS5kZWZyZWN0ID0geworCQkJLmxlZnQgPSAwLAorCQkJLnRvcCA9IDAsCisJCQkud2lkdGggPSAzNTIsCisJCQkuaGVpZ2h0ID0gMjg4LAorCQl9LAorCX0sCisJLmdldF9jdHJsID0gJnRhczUxMTBjMWJfZ2V0X2N0cmwsCisJLnNldF9jcm9wID0gJnRhczUxMTBjMWJfc2V0X2Nyb3AsCisJLnBpeF9mb3JtYXQgPSB7CisJCS53aWR0aCA9IDM1MiwKKwkJLmhlaWdodCA9IDI4OCwKKwkJLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1NCR0dSOCwKKwkJLnByaXYgPSA4LAorCX0sCisJLnNldF9waXhfZm9ybWF0ID0gJnRhczUxMTBjMWJfc2V0X3BpeF9mb3JtYXQKK307CisKKworaW50IHNuOWMxMDJfcHJvYmVfdGFzNTExMGMxYihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwkvKiBUaGlzIHNlbnNvciBoYXMgbm8gaWRlbnRpZmllcnMsIHNvIGxldCdzIGF0dGFjaCBpdCBhbnl3YXkgKi8KKwlzbjljMTAyX2F0dGFjaF9zZW5zb3IoY2FtLCAmdGFzNTExMGMxYik7CisKKwkvKiBTZW5zb3IgZGV0ZWN0aW9uIGlzIGJhc2VkIG9uIFVTQiBwaWQvdmlkICovCisJaWYgKGxlMTZfdG9fY3B1KHRhczUxMTBjMWIudXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gMHg2MDAxICYmCisJICAgIGxlMTZfdG9fY3B1KHRhczUxMTBjMWIudXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gMHg2MDA1ICYmCisJICAgIGxlMTZfdG9fY3B1KHRhczUxMTBjMWIudXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gMHg2MGFiKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl90YXM1MTMwZDFiLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9zbjljMTAyX3RhczUxMzBkMWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzc4ZTk0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvc245YzEwMl90YXM1MTMwZDFiLmMKQEAgLTAsMCArMSwxODggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBsdWctaW4gZm9yIFRBUzUxMzBEMUIgaW1hZ2Ugc2Vuc29yIGNvbm5lY3RlZCB0byB0aGUgU045QzEweCBQQyBDYW1lcmEgICoKKyAqIENvbnRyb2xsZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IGJ5IEx1Y2EgUmlzb2xpYSA8bHVjYS5yaXNvbGlhQHN0dWRpby51bmliby5pdD4gICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICoKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJzbjljMTAyX3NlbnNvci5oIgorCisKK3N0YXRpYyBzdHJ1Y3Qgc245YzEwMl9zZW5zb3IgdGFzNTEzMGQxYjsKKworc3RhdGljIHN0cnVjdCB2NGwyX2NvbnRyb2wgdGFzNTEzMGQxYl9nYWluLCB0YXM1MTMwZDFiX2V4cG9zdXJlOworCisKK3N0YXRpYyBpbnQgdGFzNTEzMGQxYl9pbml0KHN0cnVjdCBzbjljMTAyX2RldmljZSogY2FtKQoreworCWludCBlcnIgPSAwOworCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMSwgMHgwMSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgyMCwgMHgxNyk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwNCwgMHgwMSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMSwgMHgxMCk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMCwgMHgxMSk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwMCwgMHgxNCk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHg2MCwgMHgxNyk7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgMHgwNywgMHgxOCk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQgdGFzNTEzMGQxYl9nZXRfY3RybChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHY0bDJfY29udHJvbCogY3RybCkKK3sKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQljdHJsLT52YWx1ZSA9IHRhczUxMzBkMWJfZ2Fpbi52YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKKwkJY3RybC0+dmFsdWUgPSB0YXM1MTMwZDFiX2V4cG9zdXJlLnZhbHVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHRhczUxMzBkMWJfc2V0X2N0cmwoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2NvbnRyb2wqIGN0cmwpCit7CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQlpZiAoIShlcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDIwLCAweGY2IC0gY3RybC0+dmFsdWUpKSkKKwkJCXRhczUxMzBkMWJfZ2Fpbi52YWx1ZSA9IGN0cmwtPnZhbHVlOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgorCQlpZiAoIShlcnIgKz0gc245YzEwMl9pMmNfd3JpdGUoY2FtLCAweDQwLCAweDQ3IC0gY3RybC0+dmFsdWUpKSkKKwkJCXRhczUxMzBkMWJfZXhwb3N1cmUudmFsdWUgPSBjdHJsLT52YWx1ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGVyciA/IC1FSU8gOiAwOworfQorCisKK3N0YXRpYyBpbnQgdGFzNTEzMGQxYl9zZXRfY3JvcChzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHY0bDJfcmVjdCogcmVjdCkKK3sKKwlzdHJ1Y3Qgc245YzEwMl9zZW5zb3IqIHMgPSAmdGFzNTEzMGQxYjsKKwl1OCBoX3N0YXJ0ID0gKHU4KShyZWN0LT5sZWZ0IC0gcy0+Y3JvcGNhcC5ib3VuZHMubGVmdCkgKyAxMDQsCisJICAgdl9zdGFydCA9ICh1OCkocmVjdC0+dG9wIC0gcy0+Y3JvcGNhcC5ib3VuZHMudG9wKSArIDEyOworCWludCBlcnIgPSAwOworCisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgaF9zdGFydCwgMHgxMik7CisJZXJyICs9IHNuOWMxMDJfd3JpdGVfcmVnKGNhbSwgdl9zdGFydCwgMHgxMyk7CisKKwkvKiBEbyBOT1QgY2hhbmdlISAqLworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MWYsIDB4MWEpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4MWEsIDB4MWIpOworCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIHNuOWMxMDJfcHJlYWRfcmVnKGNhbSwgMHgxOSksIDB4MTkpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHRhczUxMzBkMWJfc2V0X3BpeF9mb3JtYXQoc3RydWN0IHNuOWMxMDJfZGV2aWNlKiBjYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQqIHBpeCkKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmIChwaXgtPnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9TTjlDMTBYKQorCQllcnIgKz0gc245YzEwMl93cml0ZV9yZWcoY2FtLCAweDYzLCAweDE5KTsKKwllbHNlCisJCWVyciArPSBzbjljMTAyX3dyaXRlX3JlZyhjYW0sIDB4ZjMsIDB4MTkpOworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgc3RydWN0IHNuOWMxMDJfc2Vuc29yIHRhczUxMzBkMWIgPSB7CisJLm5hbWUgPSAiVEFTNTEzMEQxQiIsCisJLm1haW50YWluZXIgPSAiTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiIsCisJLnN5c2ZzX29wcyA9IFNOOUMxMDJfSTJDX1dSSVRFLAorCS5mcmVxdWVuY3kgPSBTTjlDMTAyX0kyQ18xMDBLSFosCisJLmludGVyZmFjZSA9IFNOOUMxMDJfSTJDXzNXSVJFUywKKwkuaW5pdCA9ICZ0YXM1MTMwZDFiX2luaXQsCisJLnFjdHJsID0geworCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUgPSAiZ2xvYmFsIGdhaW4iLAorCQkJLm1pbmltdW0gPSAweDAwLAorCQkJLm1heGltdW0gPSAweGY2LAorCQkJLnN0ZXAgPSAweDAyLAorCQkJLmRlZmF1bHRfdmFsdWUgPSAweDAwLAorCQkJLmZsYWdzID0gMCwKKwkJfSwKKwkJeworCQkJLmlkID0gVjRMMl9DSURfRVhQT1NVUkUsCisJCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZSA9ICJleHBvc3VyZSIsCisJCQkubWluaW11bSA9IDB4MDAsCisJCQkubWF4aW11bSA9IDB4NDcsCisJCQkuc3RlcCA9IDB4MDEsCisJCQkuZGVmYXVsdF92YWx1ZSA9IDB4MDAsCisJCQkuZmxhZ3MgPSAwLAorCQl9LAorCX0sCisJLmdldF9jdHJsID0gJnRhczUxMzBkMWJfZ2V0X2N0cmwsCisJLnNldF9jdHJsID0gJnRhczUxMzBkMWJfc2V0X2N0cmwsCisJLmNyb3BjYXAgPSB7CisJCS5ib3VuZHMgPSB7CisJCQkubGVmdCA9IDAsCisJCQkudG9wID0gMCwKKwkJCS53aWR0aCA9IDY0MCwKKwkJCS5oZWlnaHQgPSA0ODAsCisJCX0sCisJCS5kZWZyZWN0ID0geworCQkJLmxlZnQgPSAwLAorCQkJLnRvcCA9IDAsCisJCQkud2lkdGggPSA2NDAsCisJCQkuaGVpZ2h0ID0gNDgwLAorCQl9LAorCX0sCisJLnNldF9jcm9wID0gJnRhczUxMzBkMWJfc2V0X2Nyb3AsCisJLnBpeF9mb3JtYXQgPSB7CisJCS53aWR0aCA9IDY0MCwKKwkJLmhlaWdodCA9IDQ4MCwKKwkJLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1NCR0dSOCwKKwkJLnByaXYgPSA4LAorCX0sCisJLnNldF9waXhfZm9ybWF0ID0gJnRhczUxMzBkMWJfc2V0X3BpeF9mb3JtYXQKK307CisKKworaW50IHNuOWMxMDJfcHJvYmVfdGFzNTEzMGQxYihzdHJ1Y3Qgc245YzEwMl9kZXZpY2UqIGNhbSkKK3sKKwkvKiBUaGlzIHNlbnNvciBoYXMgbm8gaWRlbnRpZmllcnMsIHNvIGxldCdzIGF0dGFjaCBpdCBhbnl3YXkgKi8KKwlzbjljMTAyX2F0dGFjaF9zZW5zb3IoY2FtLCAmdGFzNTEzMGQxYik7CisKKwkvKiBTZW5zb3IgZGV0ZWN0aW9uIGlzIGJhc2VkIG9uIFVTQiBwaWQvdmlkICovCisJaWYgKGxlMTZfdG9fY3B1KHRhczUxMzBkMWIudXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gMHg2MDI1ICYmCisJICAgIGxlMTZfdG9fY3B1KHRhczUxMzBkMWIudXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gMHg2MGFhKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvc3R2NjgwLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS9zdHY2ODAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTQ1NWM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvc3R2NjgwLmMKQEAgLTAsMCArMSwxNTA2IEBACisvKgorICogIFNUVjA2ODAgVVNCIENhbWVyYSBEcml2ZXIsIGJ5IEtldmluIFNpc3NvbiAoa2pzaXNzb25AYmVsbHNvdXRoLm5ldCkKKyAqICAKKyAqIFRoYW5rcyB0byBTVE1pY3JvZWxlY3Ryb25pY3MgZm9yIGluZm9ybWF0aW9uIG9uIHRoZSB1c2IgY29tbWFuZHMsIGFuZCAKKyAqIHRvIFN0ZXZlIE1pbGxlciBhdCBTVE0gZm9yIGhpcyBoZWxwIGFuZCBlbmNvdXJhZ2VtZW50IHdoaWxlIEkgd2FzIAorICogd3JpdGluZyB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBoZWF2aWx5IG9uIHRoZSAKKyAqIEVuZHBvaW50cyAoZm9ybWVybHkga25vd24gYXMgQU9YKSBzZTQwMSBVU0IgQ2FtZXJhIERyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDAwIEplcm9lbiBCLiBWcmVla2VuIChwZTFyeHFAYW1zYXQub3JnKQorICoKKyAqIFN0aWxsIHNvbWV3aGF0IGJhc2VkIG9uIHRoZSBMaW51eCBvdjUxMSBkcml2ZXIuCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIEhpc3Rvcnk6IAorICogdmVyIDAuMSBPY3RvYmVyLCAyMDAxLiBJbml0aWFsIGF0dGVtcHQuIAorICoKKyAqIHZlciAwLjIgTm92ZW1iZXIsIDIwMDEuIEZpeGVkIGFzYmlsaXR5IHRvIHJlc2l6ZSwgYWRkZWQgYnJpZ2h0bmVzcworICogICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24sIG1hZGUgbW9yZSBzdGFibGUgKD8pCisgKgorICogdmVyIDAuMjEgTm92LCAyMDAxLiAgICAgQWRkZWQgZ2FtbWEgY29ycmVjdGlvbiBhbmQgd2hpdGUgYmFsYW5jZSwgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBkdWUgdG8gQWxleGFuZGVyIFNjaHdhcnR6LiBTdGlsbCB0cnlpbmcgdG8gCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBpbXByb3ZlIHN0YWJsaWxpdHkuIE1vdmVkIHN0dWZmIGludG8gc3R2NjgwLmgKKyAqCisgKiB2ZXIgMC4yMiBOb3YsIDIwMDEuCSAgIEFkZGVkIHNoYXJwZW4gZnVuY3Rpb24gKGJ5IE1pY2hhZWwgU3dlZXQsIAorICogICAgICAgICAgICAgICAgICAgICAgICAgbWlrZUBlYXN5c3cuY29tKSBmcm9tIEdJTVAsIGFsc28gdXNlZCBpbiBwZW5jYW0uIAorICogICAgICAgICAgICAgICAgICAgICAgICAgU2ltcGxlLCBmYXN0LCBnb29kIGludGVnZXIgbWF0aCByb3V0aW5lLgorICoKKyAqIHZlciAwLjIzIERlYywgMjAwMSAoZ2toKQorICogCQkJICAgVG9vayBvdXQgc2hhcnBlbiBmdW5jdGlvbiwgcmFuIGNvZGUgdGhyb3VnaAorICogCQkJICAgTGluZGVudCwgYW5kIGRpZCBvdGhlciBtaW5vciB0d2Vha3MgdG8gZ2V0CisgKiAJCQkgICB0aGluZ3MgdG8gd29yayBwcm9wZXJseSB3aXRoIDIuNS4xCisgKgorICogdmVyIDAuMjQgSmFuLCAyMDAyIChranMpIAorICogICAgICAgICAgICAgICAgICAgICAgICAgRml4ZWQgdGhlIHByb2JsZW0gd2l0aCB3ZWJjYW0gY3Jhc2hpbmcgYWZ0ZXIKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIHR3byBwaWN0dXJlcy4gQ2hhbmdlZCB0aGUgd2F5IHBpYyBpcyBoYWx2ZWQgdG8gCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBpbXByb3ZlIHF1YWxpdHkuIEdvdCByaWQgb2YgZ3JlZW4gbGluZSBhcm91bmQgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS4gRml4IGJyaWdodG5lc3MgcmVzZXQgd2hlbiBjaGFuZ2luZyBzaXplIAorICogICAgICAgICAgICAgICAgICAgICAgICAgYnVnLiBBZGp1c3RlZCBnYW1tYSBmaWx0ZXJzIHNsaWdodGx5LgorICoKKyAqIHZlciAwLjI1IEphbiwgMjAwMiAoa2pzKQorICoJCQkgICBGaXhlZCBhIGJ1ZyBpbiB3aGljaCB0aGUgZHJpdmVyIHNvbWV0aW1lcyBhdHRlbXB0ZWQKKyAqCQkJICAgdG8gc2V0IHRvIGEgbm9uLXN1cHBvcnRlZCBzaXplLiBUaGlzIGFsbG93ZWQKKyAqCQkJICAgZ25vbWVtZWV0aW5nIHRvIHdvcmsuCisgKgkJCSAgIEZpeGVkIHByb2MgZW50cnkgcmVtb3ZhbCBidWcuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJzdHY2ODAuaCIKKworc3RhdGljIGludCB2aWRlb19uciA9IC0xOworc3RhdGljIGludCBzd2FwUkdCID0gMDsgICAvKiBkZWZhdWx0IGZvciBhdXRvIHNsZWVjdCAqLworc3RhdGljIGludCBzd2FwUkdCX29uID0gMDsgLyogZGVmYXVsdCB0byBhbGxvdyBhdXRvIHNlbGVjdDsgLTE9c3dhcCBuZXZlciwgKzE9IHN3YXAgYWx3YXlzICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWcgPSAwOworCisjZGVmaW5lIFBERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCisJZG8geyBcCisJaWYgKGRlYnVnID49IGxldmVsKQlcCisJCWluZm8oIlslczolZF0gIiBmbXQsIF9fRlVOQ1RJT05fXywgX19MSU5FX18gLCAjIyBhcmdzKTsJXAorCX0gd2hpbGUgKDApCisKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMjUiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIktldmluIFNpc3NvbiA8a2pzaXNzb25AYmVsbHNvdXRoLm5ldD4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJTVFYwNjgwIFVTQiBDYW1lcmEgRHJpdmVyIgorCitNT0RVTEVfQVVUSE9SIChEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTiAoRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDIChkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7Cittb2R1bGVfcGFyYW0oc3dhcFJHQl9vbiwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MgKHN3YXBSR0Jfb24sICJSZWQvYmx1ZSBzd2FwOiAxPWFsd2F5cywgMD1hdXRvLCAtMT1uZXZlciIpOworbW9kdWxlX3BhcmFtKHZpZGVvX25yLCBpbnQsIDApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBNZW1vcnkgbWFuYWdlbWVudAorICoKKyAqIFRoaXMgaXMgYSBzaGFtZWxlc3MgY29weSBmcm9tIHRoZSBVU0ItY3BpYSBkcml2ZXIgKGxpbnV4IGtlcm5lbAorICogdmVyc2lvbiAyLjMuMjkgb3Igc28sIEkgaGF2ZSBubyBpZGVhIHdoYXQgdGhpcyBjb2RlIGFjdHVhbGx5IGRvZXMgOykuCisgKiBBY3R1YWxseSBpdCBzZWVtcyB0byBiZSBhIGNvcHkgb2YgYSBzaGFtZWxlc3MgY29weSBvZiB0aGUgYnR0di1kcml2ZXIuCisgKiBPciB0aGF0IGlzIGEgY29weSBvZiBhIHNoYW1lbGVzcyBjb3B5IG9mIC4uLiAoVG8gdGhlIHBvd2VyczogaXMgdGhlcmUKKyAqIG5vIGdlbmVyaWMga2VybmVsLWZ1bmN0aW9uIHRvIGRvIHRoaXMgc29ydCBvZiBzdHVmZj8pCisgKgorICogWWVzLCBpdCB3YXMgYSBzaGFtZWxlc3MgY29weSBmcm9tIHRoZSBidHR2LWRyaXZlci4gSUlSQywgQWxhbiBzYXlzCisgKiB0aGVyZSB3aWxsIGJlIG9uZSwgYnV0IGFwcGFyZW50ZWx5IG5vdCB5ZXQgLWplcmRmZWx0CisgKgorICogU28gSSBjb3BpZWQgaXQgYWdhaW4gZm9yIHRoZSBvdjUxMSBkcml2ZXIgLWNsYXVkaW8KKyAqCisgKiBTYW1lIGZvciB0aGUgc2U0MDEgZHJpdmVyIC1KZXJvZW4KKyAqCisgKiBBbmQgdGhlIFNUVjA2ODAgZHJpdmVyIC0gS2V2aW4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkICpydm1hbGxvYyAodW5zaWduZWQgbG9uZyBzaXplKQoreworCXZvaWQgKm1lbTsKKwl1bnNpZ25lZCBsb25nIGFkcjsKKworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCW1lbSA9IHZtYWxsb2NfMzIgKHNpemUpOworCWlmICghbWVtKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldCAobWVtLCAwLCBzaXplKTsJLyogQ2xlYXIgdGhlIHJhbSBvdXQsIG5vIGp1bmsgdG8gdGhlIHVzZXIgKi8KKwlhZHIgPSAodW5zaWduZWQgbG9uZykgbWVtOworCXdoaWxlIChzaXplID4gMCkgeworCQlTZXRQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CisJCWFkciArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKwlyZXR1cm4gbWVtOworfQorCitzdGF0aWMgdm9pZCBydmZyZWUgKHZvaWQgKm1lbSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgYWRyOworCisJaWYgKCFtZW0pCisJCXJldHVybjsKKworCWFkciA9ICh1bnNpZ25lZCBsb25nKSBtZW07CisJd2hpbGUgKChsb25nKSBzaXplID4gMCkgeworCQlDbGVhclBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJYWRyICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCXZmcmVlIChtZW0pOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHBlbmNhbSByZWFkL3dyaXRlIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHN0dl9zbmRjdHJsIChpbnQgc2V0LCBzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwLCB1bnNpZ25lZCBzaG9ydCByZXEsIHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBzaXplKQoreworCWludCByZXQgPSAtMTsKKworCXN3aXRjaCAoc2V0KSB7CisJY2FzZSAwOgkJLyogIDB4YzEgICovCisJCXJldCA9IHVzYl9jb250cm9sX21zZyAoc3R2NjgwLT51ZGV2LAorCQkJCSAgICAgICB1c2JfcmN2Y3RybHBpcGUgKHN0djY4MC0+dWRldiwgMCksCisJCQkJICAgICAgIHJlcSwKKwkJCQkgICAgICAgKFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQpLAorCQkJCSAgICAgICB2YWx1ZSwgMCwgYnVmZmVyLCBzaXplLCBQRU5DQU1fVElNRU9VVCk7CisJCWJyZWFrOworCisJY2FzZSAxOgkJLyogIDB4NDEgICovCisJCXJldCA9IHVzYl9jb250cm9sX21zZyAoc3R2NjgwLT51ZGV2LAorCQkJCSAgICAgICB1c2Jfc25kY3RybHBpcGUgKHN0djY4MC0+dWRldiwgMCksCisJCQkJICAgICAgIHJlcSwKKwkJCQkgICAgICAgKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UKSwKKwkJCQkgICAgICAgdmFsdWUsIDAsIGJ1ZmZlciwgc2l6ZSwgUEVOQ0FNX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgMjoJCS8qICAweDgwICAqLworCQlyZXQgPSB1c2JfY29udHJvbF9tc2cgKHN0djY4MC0+dWRldiwKKwkJCQkgICAgICAgdXNiX3JjdmN0cmxwaXBlIChzdHY2ODAtPnVkZXYsIDApLAorCQkJCSAgICAgICByZXEsCisJCQkJICAgICAgIChVU0JfRElSX0lOIHwgVVNCX1JFQ0lQX0RFVklDRSksCisJCQkJICAgICAgIHZhbHVlLCAwLCBidWZmZXIsIHNpemUsIFBFTkNBTV9USU1FT1VUKTsKKwkJYnJlYWs7CisKKwljYXNlIDM6CQkvKiAgMHg0MCAgKi8KKwkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnIChzdHY2ODAtPnVkZXYsCisJCQkJICAgICAgIHVzYl9zbmRjdHJscGlwZSAoc3R2NjgwLT51ZGV2LCAwKSwKKwkJCQkgICAgICAgcmVxLAorCQkJCSAgICAgICAoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFKSwKKwkJCQkgICAgICAgdmFsdWUsIDAsIGJ1ZmZlciwgc2l6ZSwgUEVOQ0FNX1RJTUVPVVQpOworCQlicmVhazsKKworCX0KKwlpZiAoKHJldCA8IDApICYmIChyZXEgIT0gMHgwYSkpIHsKKwkJUERFQlVHICgxLCAiU1RWKGUpOiB1c2JfY29udHJvbF9tc2cgZXJyb3IgJWksIHJlcXVlc3QgPSAweCV4LCBlcnJvciA9ICVpIiwgc2V0LCByZXEsIHJldCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc3R2X3NldF9jb25maWcgKHN0cnVjdCB1c2Jfc3R2ICpkZXYsIGludCBjb25maWd1cmF0aW9uLCBpbnQgaW50ZXJmYWNlLCBpbnQgYWx0ZXJuYXRlKQoreworCisJaWYgKGNvbmZpZ3VyYXRpb24gIT0gZGV2LT51ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZQorCQkJfHwgdXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24gKGRldi0+dWRldikgPCAwKSB7CisJCVBERUJVRyAoMSwgIlNUVihlKTogRkFJTEVEIHRvIHJlc2V0IGNvbmZpZ3VyYXRpb24gJWkiLCBjb25maWd1cmF0aW9uKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAodXNiX3NldF9pbnRlcmZhY2UgKGRldi0+dWRldiwgaW50ZXJmYWNlLCBhbHRlcm5hdGUpIDwgMCkgeworCQlQREVCVUcgKDEsICJTVFYoZSk6IEZBSUxFRCB0byBzZXQgYWx0ZXJuYXRlIGludGVyZmFjZSAlaSIsIGFsdGVybmF0ZSk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2X3N0b3BfdmlkZW8gKHN0cnVjdCB1c2Jfc3R2ICpkZXYpCit7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciAqYnVmOworCisJYnVmID0ga21hbGxvYyAoNDAsIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkgeworCQlQREVCVUcgKDAsICJTVFYoZSk6IE91dCBvZiAoc21hbGwgYnVmKSBtZW1vcnkiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIHRoaXMgaXMgYSBoaWdoIHByaW9yaXR5IGNvbW1hbmQ7IGl0IHN0b3BzIGFsbCBsb3dlciBvcmRlciBjb21tYW5kcyAqLworCWlmICgoaSA9IHN0dl9zbmRjdHJsICgxLCBkZXYsIDB4MDQsIDB4MDAwMCwgYnVmLCAweDApKSA8IDApIHsKKwkJaSA9IHN0dl9zbmRjdHJsICgwLCBkZXYsIDB4ODAsIDAsIGJ1ZiwgMHgwMik7CS8qIEdldCBMYXN0IEVycm9yOyAyID0gYnVzeSAqLworCQlQREVCVUcgKDEsICJTVFYoaSk6IGxhc3QgZXJyb3I6ICVpLCAgY29tbWFuZCA9IDB4JXgiLCBidWZbMF0sIGJ1ZlsxXSk7CisJfSBlbHNlIHsKKwkJUERFQlVHICgxLCAiU1RWKGkpOiBDYW1lcmEgcmVzZXQgdG8gaWRsZSBtb2RlLiIpOworCX0KKworCWlmICgoaSA9IHN0dl9zZXRfY29uZmlnIChkZXYsIDEsIDAsIDApKSA8IDApCisJCVBERUJVRyAoMSwgIlNUVihlKTogUmVzZXQgY29uZmlnIGR1cmluZyBleGl0IGZhaWxlZCIpOworCisJLyogIGdldCBjdXJyZW50IG1vZGUgICovCisJYnVmWzBdID0gMHhmMDsKKwlpZiAoKGkgPSBzdHZfc25kY3RybCAoMCwgZGV2LCAweDg3LCAwLCBidWYsIDB4MDgpKSAhPSAweDA4KQkvKiBnZXQgbW9kZSAqLworCQlQREVCVUcgKDAsICJTVFYoZSk6IFN0b3BfdmlkZW86IHByb2JsZW0gc2V0dGluZyBvcmlnaW5hbCBtb2RlIik7CisJaWYgKGRldi0+b3JpZ01vZGUgIT0gYnVmWzBdKSB7CisJCW1lbXNldCAoYnVmLCAwLCA4KTsKKwkJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpIGRldi0+b3JpZ01vZGU7CisJCWlmICgoaSA9IHN0dl9zbmRjdHJsICgzLCBkZXYsIDB4MDcsIDB4MDEwMCwgYnVmLCAweDA4KSkgIT0gMHgwOCkgeworCQkJUERFQlVHICgwLCAiU1RWKGUpOiBTdG9wX3ZpZGVvOiBTZXRfQ2FtZXJhX01vZGUgZmFpbGVkIik7CisJCQlpID0gLTE7CisJCX0KKwkJYnVmWzBdID0gMHhmMDsKKwkJaSA9IHN0dl9zbmRjdHJsICgwLCBkZXYsIDB4ODcsIDAsIGJ1ZiwgMHgwOCk7CisJCWlmICgoaSAhPSAweDA4KSB8fCAoYnVmWzBdICE9IGRldi0+b3JpZ01vZGUpKSB7CisJCQlQREVCVUcgKDAsICJTVFYoZSk6IGNhbWVyYSBOT1Qgc2V0IHRvIG9yaWdpbmFsIHJlc29sdXRpb24uIik7CisJCQlpID0gLTE7CisJCX0gZWxzZQorCQkJUERFQlVHICgwLCAiU1RWKGkpOiBDYW1lcmEgc2V0IHRvIG9yaWdpbmFsIHJlc29sdXRpb24iKTsKKwl9CisJLyogb3JpZ01vZGUgKi8KKwlrZnJlZSAoYnVmKTsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBzdHZfc2V0X3ZpZGVvX21vZGUgKHN0cnVjdCB1c2Jfc3R2ICpkZXYpCit7CisJaW50IGksIHN0b3BfdmlkZW8gPSAxOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKworCWJ1ZiA9IGttYWxsb2MgKDQwLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJUERFQlVHICgwLCAiU1RWKGUpOiBPdXQgb2YgKHNtYWxsIGJ1ZikgbWVtb3J5Iik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoKGkgPSBzdHZfc2V0X2NvbmZpZyAoZGV2LCAxLCAwLCAwKSkgPCAwKSB7CisJCWtmcmVlIChidWYpOworCQlyZXR1cm4gaTsKKwl9CisKKwlpID0gc3R2X3NuZGN0cmwgKDIsIGRldiwgMHgwNiwgMHgwMTAwLCBidWYsIDB4MTIpOworCWlmICghKGkgPiAwKSAmJiAoYnVmWzhdID09IDB4NTMpICYmIChidWZbOV0gPT0gMHgwNSkpIHsKKwkJUERFQlVHICgxLCAiU1RWKGUpOiBDb3VsZCBub3QgZ2V0IGRlc2NyaXB0b3IgMDEwMC4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiAgc2V0IGFsdGVybmF0ZSBpbnRlcmZhY2UgMSAqLworCWlmICgoaSA9IHN0dl9zZXRfY29uZmlnIChkZXYsIDEsIDAsIDEpKSA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoKGkgPSBzdHZfc25kY3RybCAoMCwgZGV2LCAweDg1LCAwLCBidWYsIDB4MTApKSAhPSAweDEwKQorCQlnb3RvIGVycm9yOworCVBERUJVRyAoMSwgIlNUVihpKTogU2V0dGluZyB2aWRlbyBtb2RlLiIpOworCS8qICBTd2l0Y2ggdG8gVmlkZW8gbW9kZTogMHgwMTAwID0gVkdBICg2NDB4NDgwKSwgMHgwMDAwID0gQ0lGICgzNTJ4Mjg4KSAweDAzMDAgPSBRVkdBICgzMjB4MjQwKSAgKi8KKwlpZiAoKGkgPSBzdHZfc25kY3RybCAoMSwgZGV2LCAweDA5LCBkZXYtPlZpZGVvTW9kZSwgYnVmLCAweDApKSA8IDApIHsKKwkJc3RvcF92aWRlbyA9IDA7CisJCWdvdG8gZXJyb3I7CisJfQorCWdvdG8gZXhpdDsKKworZXJyb3I6CisJa2ZyZWUgKGJ1Zik7CisJaWYgKHN0b3BfdmlkZW8gPT0gMSkKKwkJc3R2X3N0b3BfdmlkZW8gKGRldik7CisJcmV0dXJuIC0xOworCitleGl0OgorCWtmcmVlIChidWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0dl9pbml0IChzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwKQoreworCWludCBpID0gMDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdW5zaWduZWQgbG9uZyBpbnQgYnVmc2l6ZTsKKworCWJ1ZmZlciA9IGttYWxsb2MgKDQwLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpIHsKKwkJUERFQlVHICgwLCAiU1RWKGUpOiBPdXQgb2YgKHNtYWxsIGJ1ZikgbWVtb3J5Iik7CisJCXJldHVybiAtMTsKKwl9CisJbWVtc2V0IChidWZmZXIsIDAsIDQwKTsKKwl1ZGVsYXkgKDEwMCk7CisKKwkvKiBzZXQgY29uZmlnIDEsIGludGVyZmFjZSAwLCBhbHRlcm5hdGUgMCAqLworCWlmICgoaSA9IHN0dl9zZXRfY29uZmlnIChzdHY2ODAsIDEsIDAsIDApKSA8IDApIHsKKwkJa2ZyZWUgKGJ1ZmZlcik7CisJCVBERUJVRyAoMCwgIlNUVihlKTogc2V0IGNvbmZpZyAxLDAsMCBmYWlsZWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKwkvKiBwaW5nIGNhbWVyYSB0byBiZSBzdXJlIFNUVjA2ODAgaXMgcHJlc2VudCAqLworCWlmICgoaSA9IHN0dl9zbmRjdHJsICgwLCBzdHY2ODAsIDB4ODgsIDB4NTY3OCwgYnVmZmVyLCAweDAyKSkgIT0gMHgwMikKKwkJZ290byBlcnJvcjsKKwlpZiAoKGJ1ZmZlclswXSAhPSAweDU2KSB8fCAoYnVmZmVyWzFdICE9IDB4NzgpKSB7CisJCVBERUJVRyAoMSwgIlNUVihlKTogY2FtZXJhIHBpbmcgZmFpbGVkISEiKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBnZXQgY2FtZXJhIGRlc2NyaXB0b3IgKi8KKwlpZiAoKGkgPSBzdHZfc25kY3RybCAoMiwgc3R2NjgwLCAweDA2LCAweDAyMDAsIGJ1ZmZlciwgMHgwOSkpICE9IDB4MDkpCisJCWdvdG8gZXJyb3I7CisJaSA9IHN0dl9zbmRjdHJsICgyLCBzdHY2ODAsIDB4MDYsIDB4MDIwMCwgYnVmZmVyLCAweDIyKTsKKwlpZiAoIShpID49IDApICYmIChidWZmZXJbN10gPT0gMHhhMCkgJiYgKGJ1ZmZlcls4XSA9PSAweDIzKSkgeworCQlQREVCVUcgKDEsICJTVFYoZSk6IENvdWxkIG5vdCBnZXQgZGVzY3JpcHRvciAwMjAwLiIpOworCQlnb3RvIGVycm9yOworCX0KKwlpZiAoKGkgPSBzdHZfc25kY3RybCAoMCwgc3R2NjgwLCAweDhhLCAwLCBidWZmZXIsIDB4MDIpKSAhPSAweDAyKQorCQlnb3RvIGVycm9yOworCWlmICgoaSA9IHN0dl9zbmRjdHJsICgwLCBzdHY2ODAsIDB4OGIsIDAsIGJ1ZmZlciwgMHgyNCkpICE9IDB4MjQpCisJCWdvdG8gZXJyb3I7CisJaWYgKChpID0gc3R2X3NuZGN0cmwgKDAsIHN0djY4MCwgMHg4NSwgMCwgYnVmZmVyLCAweDEwKSkgIT0gMHgxMCkKKwkJZ290byBlcnJvcjsKKworCXN0djY4MC0+U3VwcG9ydGVkTW9kZXMgPSBidWZmZXJbN107CisJaSA9IHN0djY4MC0+U3VwcG9ydGVkTW9kZXM7CisJc3R2NjgwLT5DSUYgPSAwOworCXN0djY4MC0+VkdBID0gMDsKKwlzdHY2ODAtPlFWR0EgPSAwOworCWlmIChpICYgMSkKKwkJc3R2NjgwLT5DSUYgPSAxOworCWlmIChpICYgMikKKwkJc3R2NjgwLT5WR0EgPSAxOworCWlmIChpICYgOCkKKwkJc3R2NjgwLT5RVkdBID0gMTsKKwlpZiAoc3R2NjgwLT5TdXBwb3J0ZWRNb2RlcyA9PSAwKSB7CisJCVBERUJVRyAoMCwgIlNUVihlKTogVGhlcmUgYXJlIE5PIHN1cHBvcnRlZCBTVFY2ODAgbW9kZXMhISIpOworCQlpID0gLTE7CisJCWdvdG8gZXJyb3I7CisJfSBlbHNlIHsKKwkJaWYgKHN0djY4MC0+Q0lGKQorCQkJUERFQlVHICgwLCAiU1RWKGkpOiBDSUYgaXMgc3VwcG9ydGVkIik7CisJCWlmIChzdHY2ODAtPlFWR0EpCisJCQlQREVCVUcgKDAsICJTVFYoaSk6IFFWR0EgaXMgc3VwcG9ydGVkIik7CisJfQorCS8qIEZXIHJldiwgQVNJQyByZXYsIHNlbnNvciBJRCAgKi8KKwlQREVCVUcgKDEsICJTVFYoaSk6IEZpcm13YXJlIHJldiBpcyAlaS4laSIsIGJ1ZmZlclswXSwgYnVmZmVyWzFdKTsKKwlQREVCVUcgKDEsICJTVFYoaSk6IEFTSUMgcmV2IGlzICVpLiVpIiwgYnVmZmVyWzJdLCBidWZmZXJbM10pOworCVBERUJVRyAoMSwgIlNUVihpKTogU2Vuc29yIElEIGlzICVpIiwgKGJ1ZmZlcls0XSoxNikgKyAoYnVmZmVyWzVdPj40KSk7CisKKwkvKiAgc2V0IGFsdGVybmF0ZSBpbnRlcmZhY2UgMSAqLworCWlmICgoaSA9IHN0dl9zZXRfY29uZmlnIChzdHY2ODAsIDEsIDAsIDEpKSA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoKGkgPSBzdHZfc25kY3RybCAoMCwgc3R2NjgwLCAweDg1LCAwLCBidWZmZXIsIDB4MTApKSAhPSAweDEwKQorCQlnb3RvIGVycm9yOworCWlmICgoaSA9IHN0dl9zbmRjdHJsICgwLCBzdHY2ODAsIDB4OGQsIDAsIGJ1ZmZlciwgMHgwOCkpICE9IDB4MDgpCisJCWdvdG8gZXJyb3I7CisJaSA9IGJ1ZmZlclszXTsKKwlQREVCVUcgKDAsICJTVFYoaSk6IENhbWVyYSBoYXMgJWkgcGljdHVyZXMuIiwgaSk7CisKKwkvKiAgZ2V0IGN1cnJlbnQgbW9kZSAqLworCWlmICgoaSA9IHN0dl9zbmRjdHJsICgwLCBzdHY2ODAsIDB4ODcsIDAsIGJ1ZmZlciwgMHgwOCkpICE9IDB4MDgpCisJCWdvdG8gZXJyb3I7CisJc3R2NjgwLT5vcmlnTW9kZSA9IGJ1ZmZlclswXTsJLyogMDEgPSBWR0EsIDAzID0gUVZHQSwgMDAgPSBDSUYgKi8KKworCS8qIFRoaXMgd2lsbCBhdHRlbXAgQ0lGIG1vZGUsIGlmIHN1cHBvcnRlZC4gSWYgbm90LCBzZXQgdG8gUVZHQSAgKi8KKwltZW1zZXQgKGJ1ZmZlciwgMCwgOCk7CisJaWYgKHN0djY4MC0+Q0lGKQorCQlidWZmZXJbMF0gPSAweDAwOworCWVsc2UgaWYgKHN0djY4MC0+UVZHQSkKKwkJYnVmZmVyWzBdID0gMHgwMzsKKwlpZiAoKGkgPSBzdHZfc25kY3RybCAoMywgc3R2NjgwLCAweDA3LCAweDAxMDAsIGJ1ZmZlciwgMHgwOCkpICE9IDB4MDgpIHsKKwkJUERFQlVHICgwLCAiU1RWKGkpOiBTZXRfQ2FtZXJhX01vZGUgZmFpbGVkIik7CisJCWkgPSAtMTsKKwkJZ290byBlcnJvcjsKKwl9CisJYnVmZmVyWzBdID0gMHhmMDsKKwlzdHZfc25kY3RybCAoMCwgc3R2NjgwLCAweDg3LCAwLCBidWZmZXIsIDB4MDgpOworCWlmICgoKHN0djY4MC0+Q0lGID09IDEpICYmIChidWZmZXJbMF0gIT0gMHgwMCkpIHx8ICgoc3R2NjgwLT5RVkdBID09IDEpICYmIChidWZmZXJbMF0gIT0gMHgwMykpKSB7CisJCVBERUJVRyAoMCwgIlNUVihlKTogRXJyb3Igc2V0dGluZyBjYW1lcmEgdmlkZW8gbW9kZSEiKTsKKwkJaSA9IC0xOworCQlnb3RvIGVycm9yOworCX0gZWxzZSB7CisJCWlmIChidWZmZXJbMF0gPT0gMCkgeworCQkJc3R2NjgwLT5WaWRlb01vZGUgPSAweDAwMDA7CisJCQlQREVCVUcgKDAsICJTVFYoaSk6IFZpZGVvIE1vZGUgc2V0IHRvIENJRiIpOworCQl9CisJCWlmIChidWZmZXJbMF0gPT0gMHgwMykgeworCQkJc3R2NjgwLT5WaWRlb01vZGUgPSAweDAzMDA7CisJCQlQREVCVUcgKDAsICJTVFYoaSk6IFZpZGVvIE1vZGUgc2V0IHRvIFFWR0EiKTsKKwkJfQorCX0KKwlpZiAoKGkgPSBzdHZfc25kY3RybCAoMCwgc3R2NjgwLCAweDhmLCAwLCBidWZmZXIsIDB4MTApKSAhPSAweDEwKQorCQlnb3RvIGVycm9yOworCWJ1ZnNpemUgPSAoYnVmZmVyWzBdIDw8IDI0KSB8IChidWZmZXJbMV0gPDwgMTYpIHwgKGJ1ZmZlclsyXSA8PCA4KSB8IChidWZmZXJbM10pOworCXN0djY4MC0+Y3dpZHRoID0gKGJ1ZmZlcls0XSA8PCA4KSB8IChidWZmZXJbNV0pOwkvKiAtPmNhbWVyYSA9IDMyMiwgMzU2LCA2NDQgICovCisJc3R2NjgwLT5jaGVpZ2h0ID0gKGJ1ZmZlcls2XSA8PCA4KSB8IChidWZmZXJbN10pOwkvKiAtPmNhbWVyYSA9IDI0MiwgMjkyLCA0ODQgICovCisJc3R2NjgwLT5vcmlnR2FpbiA9IGJ1ZmZlclsxMl07CisKKwlnb3RvIGV4aXQ7CisKK2Vycm9yOgorCWkgPSBzdHZfc25kY3RybCAoMCwgc3R2NjgwLCAweDgwLCAwLCBidWZmZXIsIDB4MDIpOwkvKiBHZXQgTGFzdCBFcnJvciAqLworCVBERUJVRyAoMSwgIlNUVihpKTogbGFzdCBlcnJvcjogJWksICBjb21tYW5kID0gMHgleCIsIGJ1ZmZlclswXSwgYnVmZmVyWzFdKTsKKwlrZnJlZSAoYnVmZmVyKTsKKwlyZXR1cm4gLTE7CisKK2V4aXQ6CisJa2ZyZWUgKGJ1ZmZlcik7CisKKwkvKiB2aWRlbyA9IDMyMHgyNDAsIDM1MngyODggKi8KKwlpZiAoc3R2NjgwLT5DSUYgPT0gMSkgeworCQlzdHY2ODAtPm1heHdpZHRoID0gMzUyOworCQlzdHY2ODAtPm1heGhlaWdodCA9IDI4ODsKKwkJc3R2NjgwLT52d2lkdGggPSAzNTI7CisJCXN0djY4MC0+dmhlaWdodCA9IDI4ODsKKwl9CisJaWYgKHN0djY4MC0+UVZHQSA9PSAxKSB7CisJCXN0djY4MC0+bWF4d2lkdGggPSAzMjA7CisJCXN0djY4MC0+bWF4aGVpZ2h0ID0gMjQwOworCQlzdHY2ODAtPnZ3aWR0aCA9IDMyMDsKKwkJc3R2NjgwLT52aGVpZ2h0ID0gMjQwOworCX0KKworCXN0djY4MC0+cmF3YnVmc2l6ZSA9IGJ1ZnNpemU7CS8qIG11c3QgYmUgLi8uIGJ5IDggKi8KKwlzdHY2ODAtPm1heGZyYW1lc2l6ZSA9IGJ1ZnNpemUgKiAzOwkvKiBSR0Igc2l6ZSAqLworCVBERUJVRyAoMiwgIlNUVihpKTogY3dpZHRoID0gJWksIGNoZWlnaHQgPSAlaSIsIHN0djY4MC0+Y3dpZHRoLCBzdHY2ODAtPmNoZWlnaHQpOworCVBERUJVRyAoMSwgIlNUVihpKTogd2lkdGggPSAlaSwgaGVpZ2h0ID0gJWksIHJhd2J1ZnNpemUgPSAlbGkiLCBzdHY2ODAtPnZ3aWR0aCwgc3R2NjgwLT52aGVpZ2h0LCBzdHY2ODAtPnJhd2J1ZnNpemUpOworCisJLyogc29tZSBkZWZhdWx0IHZhbHVlcyAqLworCXN0djY4MC0+YnVsa19pbl9lbmRwb2ludEFkZHIgPSAweDgyOworCXN0djY4MC0+ZHJvcHBlZCA9IDA7CisJc3R2NjgwLT5lcnJvciA9IDA7CisJc3R2NjgwLT5mcmFtZWNvdW50ID0gMDsKKwlzdHY2ODAtPnJlYWRjb3VudCA9IDA7CisJc3R2NjgwLT5zdHJlYW1pbmcgPSAwOworCS8qIGJyaWdodCwgd2hpdGUsIGNvbG91ciwgaHVlLCBjb250cmFzdCBhcmUgc2V0IGJ5IHNvZnR3YXJlLCBub3QgaW4gc3R2MDY4MCAqLworCXN0djY4MC0+YnJpZ2h0bmVzcyA9IDMyNzY3OworCXN0djY4MC0+Y2hnYnJpZ2h0ID0gMDsKKwlzdHY2ODAtPndoaXRlbmVzcyA9IDA7CS8qIG9ubHkgZm9yIGdyZXlzY2FsZSAqLworCXN0djY4MC0+Y29sb3VyID0gMzI3Njc7CisJc3R2NjgwLT5jb250cmFzdCA9IDMyNzY3OworCXN0djY4MC0+aHVlID0gMzI3Njc7CisJc3R2NjgwLT5wYWxldHRlID0gU1RWX1ZJREVPX1BBTEVUVEU7CisJc3R2NjgwLT5kZXB0aCA9IDI0OwkvKiByZ2IyNCBiaXRzICovCisJaWYgKChzd2FwUkdCX29uID09IDApICYmIChzd2FwUkdCID09IDApKQorCQlQREVCVUcgKDEsICJTVFYoaSk6IHN3YXBSR0IgaXMgKGF1dG8pIE9GRiIpOworCWVsc2UgaWYgKChzd2FwUkdCX29uID09IDApICYmIChzd2FwUkdCID09IDEpKQorCQlQREVCVUcgKDEsICJTVFYoaSk6IHN3YXBSR0IgaXMgKGF1dG8pIE9OIik7CisJZWxzZSBpZiAoc3dhcFJHQl9vbiA9PSAxKQorCQlQREVCVUcgKDEsICJTVFYoaSk6IHN3YXBSR0IgaXMgKGZvcmNlZCkgT04iKTsKKwllbHNlIGlmIChzd2FwUkdCX29uID09IC0xKQorCQlQREVCVUcgKDEsICJTVFYoaSk6IHN3YXBSR0IgaXMgKGZvcmNlZCkgT0ZGIik7CisJCisJaWYgKHN0dl9zZXRfdmlkZW9fbW9kZSAoc3R2NjgwKSA8IDApIHsKKwkJUERFQlVHICgwLCAiU1RWKGUpOiBDb3VsZCBub3Qgc2V0IHZpZGVvIG1vZGUgaW4gc3R2X2luaXQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKiogbGFzdCBvZiBwZW5jYW0gIHJvdXRpbmVzICAqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIHN5c2ZzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBzdHY2ODBfZmlsZShuYW1lLCB2YXJpYWJsZSwgZmllbGQpCQkJCVwKK3N0YXRpYyBzc2l6ZV90IHNob3dfIyNuYW1lKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB0b192aWRlb19kZXZpY2UoY2xhc3NfZGV2KTsJCVwKKwlzdHJ1Y3QgdXNiX3N0diAqc3R2ID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CQkJXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgZmllbGQsIHN0di0+dmFyaWFibGUpOwkJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd18jI25hbWUsIE5VTEwpOworCitzdHY2ODBfZmlsZShtb2RlbCwgY2FtZXJhX25hbWUsICIlc1xuIik7CitzdHY2ODBfZmlsZShpbl91c2UsIHVzZXIsICIlZFxuIik7CitzdHY2ODBfZmlsZShzdHJlYW1pbmcsIHN0cmVhbWluZywgIiVkXG4iKTsKK3N0djY4MF9maWxlKHBhbGV0dGUsIHBhbGV0dGUsICIlaVxuIik7CitzdHY2ODBfZmlsZShmcmFtZXNfdG90YWwsIHJlYWRjb3VudCwgIiVkXG4iKTsKK3N0djY4MF9maWxlKGZyYW1lc19yZWFkLCBmcmFtZWNvdW50LCAiJWRcbiIpOworc3R2NjgwX2ZpbGUocGFja2V0c19kcm9wcGVkLCBkcm9wcGVkLCAiJWRcbiIpOworc3R2NjgwX2ZpbGUoZGVjb2RpbmdfZXJyb3JzLCBlcnJvciwgIiVkXG4iKTsKKworc3RhdGljIHZvaWQgc3R2NjgwX2NyZWF0ZV9zeXNmc19maWxlcyhzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KQoreworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfbW9kZWwpOworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfaW5fdXNlKTsKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX3N0cmVhbWluZyk7CisJdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9wYWxldHRlKTsKKwl2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX2ZyYW1lc190b3RhbCk7CisJdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9mcmFtZXNfcmVhZCk7CisJdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9wYWNrZXRzX2Ryb3BwZWQpOworCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfZGVjb2RpbmdfZXJyb3JzKTsKK30KKworc3RhdGljIHZvaWQgc3R2NjgwX3JlbW92ZV9zeXNmc19maWxlcyhzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KQoreworCXZpZGVvX2RldmljZV9yZW1vdmVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfbW9kZWwpOworCXZpZGVvX2RldmljZV9yZW1vdmVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfaW5fdXNlKTsKKwl2aWRlb19kZXZpY2VfcmVtb3ZlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX3N0cmVhbWluZyk7CisJdmlkZW9fZGV2aWNlX3JlbW92ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9wYWxldHRlKTsKKwl2aWRlb19kZXZpY2VfcmVtb3ZlX2ZpbGUodmRldiwgJmNsYXNzX2RldmljZV9hdHRyX2ZyYW1lc190b3RhbCk7CisJdmlkZW9fZGV2aWNlX3JlbW92ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9mcmFtZXNfcmVhZCk7CisJdmlkZW9fZGV2aWNlX3JlbW92ZV9maWxlKHZkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9wYWNrZXRzX2Ryb3BwZWQpOworCXZpZGVvX2RldmljZV9yZW1vdmVfZmlsZSh2ZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfZGVjb2RpbmdfZXJyb3JzKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDYW1lcmEgY29udHJvbAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgc3R2NjgwX2dldF9waWN0IChzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwLCBzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcCkKK3sKKwkvKiBUaGlzIHNldHMgdmFsdWVzIGZvciB2NGwgaW50ZXJmYWNlLiBtYXgvbWluID0gNjU1MzUvMCAgKi8KKworCXAtPmJyaWdodG5lc3MgPSBzdHY2ODAtPmJyaWdodG5lc3M7CisJcC0+d2hpdGVuZXNzID0gc3R2NjgwLT53aGl0ZW5lc3M7CS8qIGdyZXlzY2FsZSAqLworCXAtPmNvbG91ciA9IHN0djY4MC0+Y29sb3VyOworCXAtPmNvbnRyYXN0ID0gc3R2NjgwLT5jb250cmFzdDsKKwlwLT5odWUgPSBzdHY2ODAtPmh1ZTsKKwlwLT5wYWxldHRlID0gc3R2NjgwLT5wYWxldHRlOworCXAtPmRlcHRoID0gc3R2NjgwLT5kZXB0aDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHY2ODBfc2V0X3BpY3QgKHN0cnVjdCB1c2Jfc3R2ICpzdHY2ODAsIHN0cnVjdCB2aWRlb19waWN0dXJlICpwKQoreworCS8qIFNlZSBhYm92ZSBzdHY2ODBfZ2V0X3BpY3QgICovCisKKwlpZiAocC0+cGFsZXR0ZSAhPSBTVFZfVklERU9fUEFMRVRURSkgeworCQlQREVCVUcgKDIsICJTVFYoZSk6IFBhbGV0dGUgc2V0IGVycm9yIGluIF9zZXRfcGljIik7CisJCXJldHVybiAxOworCX0KKworCWlmIChzdHY2ODAtPmJyaWdodG5lc3MgIT0gcC0+YnJpZ2h0bmVzcykgeworCQlzdHY2ODAtPmNoZ2JyaWdodCA9IDE7CisJCXN0djY4MC0+YnJpZ2h0bmVzcyA9IHAtPmJyaWdodG5lc3M7CisJfSAKKworCXN0djY4MC0+d2hpdGVuZXNzID0gcC0+d2hpdGVuZXNzOwkvKiBncmV5c2NhbGUgKi8KKwlzdHY2ODAtPmNvbG91ciA9IHAtPmNvbG91cjsKKwlzdHY2ODAtPmNvbnRyYXN0ID0gcC0+Y29udHJhc3Q7CisJc3R2NjgwLT5odWUgPSBwLT5odWU7CisJc3R2NjgwLT5wYWxldHRlID0gcC0+cGFsZXR0ZTsKKwlzdHY2ODAtPmRlcHRoID0gcC0+ZGVwdGg7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3R2NjgwX3ZpZGVvX2lycSAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwID0gdXJiLT5jb250ZXh0OworCWludCBsZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGg7CisKKwlpZiAobGVuZ3RoIDwgc3R2NjgwLT5yYXdidWZzaXplKQorCQlQREVCVUcgKDIsICJTVFYoaSk6IExvc3QgZGF0YSBpbiB0cmFuc2ZlcjogZXhwICVsaSwgZ290ICVpIiwgc3R2NjgwLT5yYXdidWZzaXplLCBsZW5ndGgpOworCisJLyogb2hvaC4uLiAqLworCWlmICghc3R2NjgwLT5zdHJlYW1pbmcpCisJCXJldHVybjsKKworCWlmICghc3R2NjgwLT51ZGV2KSB7CisJCVBERUJVRyAoMCwgIlNUVihlKTogZGV2aWNlIHZhcG91cmlzaGVkIGluIHZpZGVvX2lycSIpOworCQlyZXR1cm47CisJfQorCisJLyogMCBzaXplZCBwYWNrZXRzIGhhcHBlbiBpZiB3ZSBhcmUgdG8gZmFzdCwgYnV0IHNvbWV0aW1lcyB0aGUgY2FtZXJhCisJICAga2VlcHMgc2VuZGluZyB0aGVtIGZvcmV2ZXIuLi4KKwkgKi8KKwlpZiAobGVuZ3RoICYmICF1cmItPnN0YXR1cykgeworCQlzdHY2ODAtPm51bGxwYWNrZXRzID0gMDsKKwkJc3dpdGNoIChzdHY2ODAtPnNjcmF0Y2hbc3R2NjgwLT5zY3JhdGNoX25leHRdLnN0YXRlKSB7CisJCWNhc2UgQlVGRkVSX1JFQURZOgorCQljYXNlIEJVRkZFUl9CVVNZOgorCQkJc3R2NjgwLT5kcm9wcGVkKys7CisJCQlicmVhazsKKworCQljYXNlIEJVRkZFUl9VTlVTRUQ6CisJCQltZW1jcHkgKHN0djY4MC0+c2NyYXRjaFtzdHY2ODAtPnNjcmF0Y2hfbmV4dF0uZGF0YSwKKwkJCSAgICAgICAgKHVuc2lnbmVkIGNoYXIgKikgdXJiLT50cmFuc2Zlcl9idWZmZXIsIGxlbmd0aCk7CisJCQlzdHY2ODAtPnNjcmF0Y2hbc3R2NjgwLT5zY3JhdGNoX25leHRdLnN0YXRlID0gQlVGRkVSX1JFQURZOworCQkJc3R2NjgwLT5zY3JhdGNoW3N0djY4MC0+c2NyYXRjaF9uZXh0XS5sZW5ndGggPSBsZW5ndGg7CisJCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSAoJnN0djY4MC0+d3EpKSB7CisJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlICgmc3R2NjgwLT53cSk7CisJCQl9CisJCQlzdHY2ODAtPnNjcmF0Y2hfb3ZlcmZsb3cgPSAwOworCQkJc3R2NjgwLT5zY3JhdGNoX25leHQrKzsKKwkJCWlmIChzdHY2ODAtPnNjcmF0Y2hfbmV4dCA+PSBTVFY2ODBfTlVNU0NSQVRDSCkKKwkJCQlzdHY2ODAtPnNjcmF0Y2hfbmV4dCA9IDA7CisJCQlicmVhazsKKwkJfQkJLyogc3dpdGNoICAqLworCX0gZWxzZSB7CisJCXN0djY4MC0+bnVsbHBhY2tldHMrKzsKKwkJaWYgKHN0djY4MC0+bnVsbHBhY2tldHMgPiBTVFY2ODBfTUFYX05VTExQQUNLRVRTKSB7CisJCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSAoJnN0djY4MC0+d3EpKSB7CisJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlICgmc3R2NjgwLT53cSk7CisJCQl9CisJCX0KKwl9CQkJLyogIGlmIC0gZWxzZSAqLworCisJLyogUmVzdWJtaXQgdXJiIGZvciBuZXcgZGF0YSAqLworCXVyYi0+c3RhdHVzID0gMDsKKwl1cmItPmRldiA9IHN0djY4MC0+dWRldjsKKwlpZiAodXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQykpCisJCVBERUJVRyAoMCwgIlNUVihlKTogdXJiIGJ1cm5lZCBkb3duIGluIHZpZGVvIGlycSIpOworCXJldHVybjsKK30JCQkJLyogIF92aWRlb19pcnEgICovCisKK3N0YXRpYyBpbnQgc3R2NjgwX3N0YXJ0X3N0cmVhbSAoc3RydWN0IHVzYl9zdHYgKnN0djY4MCkKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGVyciA9IDAsIGk7CisKKwlzdHY2ODAtPnN0cmVhbWluZyA9IDE7CisKKwkvKiBEbyBzb21lIG1lbW9yeSBhbGxvY2F0aW9uICovCisJZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1GUkFNRVM7IGkrKykgeworCQlzdHY2ODAtPmZyYW1lW2ldLmRhdGEgPSBzdHY2ODAtPmZidWYgKyBpICogc3R2NjgwLT5tYXhmcmFtZXNpemU7CisJCXN0djY4MC0+ZnJhbWVbaV0uY3VycGl4ID0gMDsKKwl9CisJLyogcGFja2V0IHNpemUgPSA0MDk2ICAqLworCWZvciAoaSA9IDA7IGkgPCBTVFY2ODBfTlVNU0JVRjsgaSsrKSB7CisJCXN0djY4MC0+c2J1ZltpXS5kYXRhID0ga21hbGxvYyAoc3R2NjgwLT5yYXdidWZzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHN0djY4MC0+c2J1ZltpXS5kYXRhID09IE5VTEwpIHsKKwkJCVBERUJVRyAoMCwgIlNUVihlKTogQ291bGQgbm90IGttYWxsb2MgcmF3IGRhdGEgYnVmZmVyICVpIiwgaSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlzdHY2ODAtPnNjcmF0Y2hfbmV4dCA9IDA7CisJc3R2NjgwLT5zY3JhdGNoX3VzZSA9IDA7CisJc3R2NjgwLT5zY3JhdGNoX292ZXJmbG93ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgU1RWNjgwX05VTVNDUkFUQ0g7IGkrKykgeworCQlzdHY2ODAtPnNjcmF0Y2hbaV0uZGF0YSA9IGttYWxsb2MgKHN0djY4MC0+cmF3YnVmc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChzdHY2ODAtPnNjcmF0Y2hbaV0uZGF0YSA9PSBOVUxMKSB7CisJCQlQREVCVUcgKDAsICJTVFYoZSk6IENvdWxkIG5vdCBrbWFsbG9jIHJhdyBzY3JhdGNoIGJ1ZmZlciAlaSIsIGkpOworCQkJcmV0dXJuIC0xOworCQl9CisJCXN0djY4MC0+c2NyYXRjaFtpXS5zdGF0ZSA9IEJVRkZFUl9VTlVTRUQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1TQlVGOyBpKyspIHsKKwkJdXJiID0gdXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCk7CisJCWlmICghdXJiKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJLyogc2J1ZiBpcyB1cmItPnRyYW5zZmVyX2J1ZmZlciwgbGF0ZXIgZ2V0cyBtZW1jcHllZCB0byBzY3JhdGNoICovCisJCXVzYl9maWxsX2J1bGtfdXJiICh1cmIsIHN0djY4MC0+dWRldiwKKwkJCQkgICB1c2JfcmN2YnVsa3BpcGUgKHN0djY4MC0+dWRldiwgc3R2NjgwLT5idWxrX2luX2VuZHBvaW50QWRkciksCisJCQkJICAgc3R2NjgwLT5zYnVmW2ldLmRhdGEsIHN0djY4MC0+cmF3YnVmc2l6ZSwKKwkJCQkgICBzdHY2ODBfdmlkZW9faXJxLCBzdHY2ODApOworCQlzdHY2ODAtPnVyYltpXSA9IHVyYjsKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIgKHN0djY4MC0+dXJiW2ldLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVycikKKwkJCVBERUJVRyAoMCwgIlNUVihlKTogdXJiIGJ1cm5lZCBkb3duIGluIHN0YXJ0IHN0cmVhbSIpOworCX0JCQkvKiBpIFNUVjY4MF9OVU1TQlVGICovCisKKwlzdHY2ODAtPmZyYW1lY291bnQgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djY4MF9zdG9wX3N0cmVhbSAoc3RydWN0IHVzYl9zdHYgKnN0djY4MCkKK3sKKwlpbnQgaTsKKworCWlmICghc3R2NjgwLT5zdHJlYW1pbmcgfHwgIXN0djY4MC0+dWRldikKKwkJcmV0dXJuIDE7CisKKwlzdHY2ODAtPnN0cmVhbWluZyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgU1RWNjgwX05VTVNCVUY7IGkrKykKKwkJaWYgKHN0djY4MC0+dXJiW2ldKSB7CisJCQl1c2Jfa2lsbF91cmIgKHN0djY4MC0+dXJiW2ldKTsKKwkJCXVzYl9mcmVlX3VyYiAoc3R2NjgwLT51cmJbaV0pOworCQkJc3R2NjgwLT51cmJbaV0gPSBOVUxMOworCQkJa2ZyZWUgKHN0djY4MC0+c2J1ZltpXS5kYXRhKTsKKwkJfQorCWZvciAoaSA9IDA7IGkgPCBTVFY2ODBfTlVNU0NSQVRDSDsgaSsrKSB7CisJCWtmcmVlIChzdHY2ODAtPnNjcmF0Y2hbaV0uZGF0YSk7CisJCXN0djY4MC0+c2NyYXRjaFtpXS5kYXRhID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHY2ODBfc2V0X3NpemUgKHN0cnVjdCB1c2Jfc3R2ICpzdHY2ODAsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKwlpbnQgd2Fzc3RyZWFtaW5nID0gc3R2NjgwLT5zdHJlYW1pbmc7CisKKwkvKiBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBjaGFuZ2UgKi8KKwlpZiAoKHN0djY4MC0+dndpZHRoID09IHdpZHRoKSAmJiAoc3R2NjgwLT52aGVpZ2h0ID09IGhlaWdodCkpCisJCXJldHVybiAwOworCisJUERFQlVHICgxLCAiU1RWKGkpOiBzaXplIHJlcXVlc3QgZm9yICVpIHggJWkiLCB3aWR0aCwgaGVpZ2h0KTsKKwkvKiBDaGVjayBmb3IgYSB2YWxpZCBtb2RlICovCisJaWYgKCghd2lkdGggfHwgIWhlaWdodCkgfHwgKCh3aWR0aCAmIDEpIHx8IChoZWlnaHQgJiAxKSkpIHsKKwkJUERFQlVHICgxLCAiU1RWKGUpOiBzZXRfc2l6ZSBlcnJvcjogcmVxdWVzdDogdi53aWR0aCA9ICVpLCB2LmhlaWdodCA9ICVpICBhY3R1YWw6IHN0di53aWR0aCA9ICVpLCBzdHYuaGVpZ2h0ID0gJWkiLCB3aWR0aCwgaGVpZ2h0LCBzdHY2ODAtPnZ3aWR0aCwgc3R2NjgwLT52aGVpZ2h0KTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKCh3aWR0aCA8IChzdHY2ODAtPm1heHdpZHRoIC8gMikpIHx8IChoZWlnaHQgPCAoc3R2NjgwLT5tYXhoZWlnaHQgLyAyKSkpIHsKKwkJd2lkdGggPSBzdHY2ODAtPm1heHdpZHRoIC8gMjsKKwkJaGVpZ2h0ID0gc3R2NjgwLT5tYXhoZWlnaHQgLyAyOworCX0gZWxzZSBpZiAoKHdpZHRoID49IDE1OCkgJiYgKHdpZHRoIDw9IDE2NikgJiYgKHN0djY4MC0+UVZHQSA9PSAxKSkgeworCQl3aWR0aCA9IDE2MDsKKwkJaGVpZ2h0ID0gMTIwOworCX0gZWxzZSBpZiAoKHdpZHRoID49IDE3MikgJiYgKHdpZHRoIDw9IDE4MCkgJiYgKHN0djY4MC0+Q0lGID09IDEpKSB7CisJCXdpZHRoID0gMTc2OworCQloZWlnaHQgPSAxNDQ7CisJfSBlbHNlIGlmICgod2lkdGggPj0gMzE4KSAmJiAod2lkdGggPD0gMzUwKSAmJiAoc3R2NjgwLT5RVkdBID09IDEpKSB7CisJCXdpZHRoID0gMzIwOworCQloZWlnaHQgPSAyNDA7CisJfSBlbHNlIGlmICgod2lkdGggPj0gMzUwKSAmJiAod2lkdGggPD0gMzU4KSAmJiAoc3R2NjgwLT5DSUYgPT0gMSkpIHsKKwkJd2lkdGggPSAzNTI7CisJCWhlaWdodCA9IDI4ODsKKwl9IGVsc2UgeworCQlQREVCVUcgKDEsICJTVFYoZSk6IHJlcXVlc3QgZm9yIG5vbi1zdXBwb3J0ZWQgc2l6ZTogcmVxdWVzdDogdi53aWR0aCA9ICVpLCB2LmhlaWdodCA9ICVpICBhY3R1YWw6IHN0di53aWR0aCA9ICVpLCBzdHYuaGVpZ2h0ID0gJWkiLCB3aWR0aCwgaGVpZ2h0LCBzdHY2ODAtPnZ3aWR0aCwgc3R2NjgwLT52aGVpZ2h0KTsKKwkJcmV0dXJuIDE7CisJfQorCQorCS8qIFN0b3AgYSBjdXJyZW50IHN0cmVhbSBhbmQgc3RhcnQgaXQgYWdhaW4gYXQgdGhlIG5ldyBzaXplICovCisJaWYgKHdhc3N0cmVhbWluZykKKwkJc3R2NjgwX3N0b3Bfc3RyZWFtIChzdHY2ODApOworCXN0djY4MC0+dndpZHRoID0gd2lkdGg7CisJc3R2NjgwLT52aGVpZ2h0ID0gaGVpZ2h0OworCVBERUJVRyAoMSwgIlNUVihpKTogc2l6ZSBzZXQgdG8gJWkgeCAlaSIsIHN0djY4MC0+dndpZHRoLCBzdHY2ODAtPnZoZWlnaHQpOworCWlmICh3YXNzdHJlYW1pbmcpCisJCXN0djY4MF9zdGFydF9zdHJlYW0gKHN0djY4MCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZpZGVvIERlY29kaW5nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKiogIHJvdXRpbmVzIGZyb20gdGhlIHBlbmNhbSBwcm9ncmFtOyBoZXksIHRoZXkgd29yayEgICoqKioqKioqLworCisvKgorICogU1RWMDY4MCBWaXNpb24gQ2FtZXJhIENoaXBzZXQgRHJpdmVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgQWRhbSBIYXJyaXNvbiA8YWRhbUBhbnRpc3Bpbi5vcmc+IAorKi8KKworI2RlZmluZSBSRUQgMAorI2RlZmluZSBHUkVFTiAxCisjZGVmaW5lIEJMVUUgMgorI2RlZmluZSBBRCh4LCB5LCB3KSAoKCh5KSoodykrKHgpKSozKQorCitzdGF0aWMgdm9pZCBiYXllcl91bnNodWZmbGUgKHN0cnVjdCB1c2Jfc3R2ICpzdHY2ODAsIHN0cnVjdCBzdHY2ODBfc2NyYXRjaCAqYnVmZmVyKQoreworCWludCB4LCB5LCBpOworCWludCB3ID0gc3R2NjgwLT5jd2lkdGg7CisJaW50IHZ3ID0gc3R2NjgwLT5jd2lkdGgsIHZoID0gc3R2NjgwLT5jaGVpZ2h0OworCXVuc2lnbmVkIGludCBwID0gMDsKKwlpbnQgY29sb3VyID0gMCwgYmF5ZXIgPSAwOworCXVuc2lnbmVkIGNoYXIgKnJhdyA9IGJ1ZmZlci0+ZGF0YTsKKwlzdHJ1Y3Qgc3R2NjgwX2ZyYW1lICpmcmFtZSA9ICZzdHY2ODAtPmZyYW1lW3N0djY4MC0+Y3VyZnJhbWVdOworCXVuc2lnbmVkIGNoYXIgKm91dHB1dCA9IGZyYW1lLT5kYXRhOworCXVuc2lnbmVkIGNoYXIgKnRlbXAgPSBmcmFtZS0+ZGF0YTsKKwlpbnQgb2Zmc2V0ID0gYnVmZmVyLT5vZmZzZXQ7CisKKwlpZiAoZnJhbWUtPmN1cnBpeCA9PSAwKSB7CisJCWlmIChmcmFtZS0+Z3JhYnN0YXRlID09IEZSQU1FX1JFQURZKSB7CisJCQlmcmFtZS0+Z3JhYnN0YXRlID0gRlJBTUVfR1JBQkJJTkc7CisJCX0KKwl9CisJaWYgKG9mZnNldCAhPSBmcmFtZS0+Y3VycGl4KSB7CS8qIFJlZ2FyZCBmcmFtZSBhcyBsb3N0IDooICovCisJCWZyYW1lLT5jdXJwaXggPSAwOworCQlzdHY2ODAtPmVycm9yKys7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKHN0djY4MC0+dndpZHRoID09IDMyMCkgfHwgKHN0djY4MC0+dndpZHRoID09IDE2MCkpIHsKKwkJdncgPSAzMjA7CisJCXZoID0gMjQwOworCX0KKwlpZiAoKHN0djY4MC0+dndpZHRoID09IDM1MikgfHwgKHN0djY4MC0+dndpZHRoID09IDE3NikpIHsKKwkJdncgPSAzNTI7CisJCXZoID0gMjg4OworCX0KKworCW1lbXNldCAob3V0cHV0LCAwLCAzICogdncgKiB2aCk7CS8qIGNsZWFyIG91dHB1dCBtYXRyaXguICovCisKKwlmb3IgKHkgPSAwOyB5IDwgdmg7IHkrKykgeworCQlmb3IgKHggPSAwOyB4IDwgdnc7IHgrKykgeworCQkJaWYgKHggJiAxKQorCQkJCXAgPSAqKHJhdyArIHkgKiB3ICsgKHggPj4gMSkpOworCQkJZWxzZQorCQkJCXAgPSAqKHJhdyArIHkgKiB3ICsgKHggPj4gMSkgKyAodyA+PiAxKSk7CisKKwkJCWlmICh5ICYgMSkKKwkJCQliYXllciA9IDI7CisJCQllbHNlCisJCQkJYmF5ZXIgPSAwOworCQkJaWYgKHggJiAxKQorCQkJCWJheWVyKys7CisKKwkJCXN3aXRjaCAoYmF5ZXIpIHsKKwkJCWNhc2UgMDoKKwkJCWNhc2UgMzoKKwkJCQljb2xvdXIgPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCWNvbG91ciA9IDA7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJY29sb3VyID0gMjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWkgPSAoeSAqIHZ3ICsgeCkgKiAzOwkKKwkJCSoob3V0cHV0ICsgaSArIGNvbG91cikgPSAodW5zaWduZWQgY2hhcikgcDsKKwkJfQkJLyogZm9yIHggKi8KKworCX0JCQkvKiBmb3IgeSAqLworCisJLyoqKioqKiBnYW1tYSBjb3JyZWN0aW9uIHBsdXMgaGFyZGNvZGVkIHdoaXRlIGJhbGFuY2UgKi8KKwkvKiBUaGFua3MgdG8gQWxleGFuZGVyIFNjaHdhcnR4IDxhbGV4YW5kZXIuc2Nod2FydHhAZ214Lm5ldD4gZm9yIHRoaXMgY29kZS4KKwkgICBDb3JyZWN0aW9uIHZhbHVlcyByZWRbXSwgZ3JlZW5bXSwgYmx1ZVtdLCBhcmUgZ2VuZXJhdGVkIGJ5IAorCSAgIChwb3coaS8yNTYuMCwgR0FNTUEpKjI1NS4wKSp3aGl0ZSBiYWxhbmNlUkdCIHdoZXJlIEdBTU1BPTAuNTUsIDE8aTwyNTUuIAorCSAgIFdoaXRlIGJhbGFuY2UgKFJHQik9IDEuMCwgMS4xNywgMS40OC4gVmFsdWVzIGFyZSBjYWxjdWxhdGVkIGFzIGRvdWJsZSBmbG9hdCBhbmQgCisJICAgY29udmVydGVkIHRvIHVuc2lnbmVkIGNoYXIuIFZhbHVlcyBhcmUgaW4gc3R2NjgwLmggICovCisKKwlmb3IgKHkgPSAwOyB5IDwgdmg7IHkrKykgeworCQlmb3IgKHggPSAwOyB4IDwgdnc7IHgrKykgeworCQkJaSA9ICh5ICogdncgKyB4KSAqIDM7CisJCQkqKG91dHB1dCArIGkpID0gcmVkWyoob3V0cHV0ICsgaSldOworCQkJKihvdXRwdXQgKyBpICsgMSkgPSBncmVlblsqKG91dHB1dCArIGkgKyAxKV07CisJCQkqKG91dHB1dCArIGkgKyAyKSA9IGJsdWVbKihvdXRwdXQgKyBpICsgMildOworCQl9CisJfQorCisJLyoqKioqKiAgYmF5ZXIgZGVtb3NhaWMgICoqKioqKi8KKwlmb3IgKHkgPSAxOyB5IDwgKHZoIC0gMSk7IHkrKykgeworCQlmb3IgKHggPSAxOyB4IDwgKHZ3IC0gMSk7IHgrKykgewkvKiB3b3JrIG91dCBwaXhlbCB0eXBlICovCisJCQlpZiAoeSAmIDEpCisJCQkJYmF5ZXIgPSAwOworCQkJZWxzZQorCQkJCWJheWVyID0gMjsKKwkJCWlmICghKHggJiAxKSkKKwkJCQliYXllcisrOworCisJCQlzd2l0Y2ggKGJheWVyKSB7CisJCQljYXNlIDA6CS8qIGdyZWVuLiBibHVlIGxyLCByZWQgdGIgKi8KKwkJCQkqKG91dHB1dCArIEFEICh4LCB5LCB2dykgKyBCTFVFKSA9ICgoaW50KSAqKG91dHB1dCArIEFEICh4IC0gMSwgeSwgdncpICsgQkxVRSkgKyAoaW50KSAqKG91dHB1dCArIEFEICh4ICsgMSwgeSwgdncpICsgQkxVRSkpID4+IDE7CisJCQkJKihvdXRwdXQgKyBBRCAoeCwgeSwgdncpICsgUkVEKSA9ICgoaW50KSAqKG91dHB1dCArIEFEICh4LCB5IC0gMSwgdncpICsgUkVEKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHgsIHkgKyAxLCB2dykgKyBSRUQpKSA+PiAxOworCQkJCWJyZWFrOworCisJCQljYXNlIDE6CS8qIGJsdWUuIGdyZWVuIGxydGIsIHJlZCBkaWFnb25hbHMgKi8KKwkJCQkqKG91dHB1dCArIEFEICh4LCB5LCB2dykgKyBHUkVFTikgPSAoKGludCkgKihvdXRwdXQgKyBBRCAoeCAtIDEsIHksIHZ3KSArIEdSRUVOKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHggKyAxLCB5LCB2dykgKyBHUkVFTikgKyAoaW50KSAqKG91dHB1dCArIEFEICh4LCB5IC0gMSwgdncpICsgR1JFRU4pICsgKGludCkgKihvdXRwdXQgKyBBRCAoeCwgeSArIDEsIHZ3KSArIEdSRUVOKSkgPj4gMjsKKwkJCQkqKG91dHB1dCArIEFEICh4LCB5LCB2dykgKyBSRUQpID0gKChpbnQpICoob3V0cHV0ICsgQUQgKHggLSAxLCB5IC0gMSwgdncpICsgUkVEKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHggLSAxLCB5ICsgMSwgdncpICsgUkVEKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHggKyAxLCB5IC0gMSwgdncpICsgUkVEKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHggKyAxLCB5ICsgMSwgdncpICsgUkVEKSkgPj4gMjsKKwkJCQlicmVhazsKKworCQkJY2FzZSAyOgkvKiByZWQuIGdyZWVuIGxydGIsIGJsdWUgZGlhZ29uYWxzICovCisJCQkJKihvdXRwdXQgKyBBRCAoeCwgeSwgdncpICsgR1JFRU4pID0gKChpbnQpICoob3V0cHV0ICsgQUQgKHggLSAxLCB5LCB2dykgKyBHUkVFTikgKyAoaW50KSAqKG91dHB1dCArIEFEICh4ICsgMSwgeSwgdncpICsgR1JFRU4pICsgKGludCkgKihvdXRwdXQgKyBBRCAoeCwgeSAtIDEsIHZ3KSArIEdSRUVOKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHgsIHkgKyAxLCB2dykgKyBHUkVFTikpID4+IDI7CisJCQkJKihvdXRwdXQgKyBBRCAoeCwgeSwgdncpICsgQkxVRSkgPSAoKGludCkgKihvdXRwdXQgKyBBRCAoeCAtIDEsIHkgLSAxLCB2dykgKyBCTFVFKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHggKyAxLCB5IC0gMSwgdncpICsgQkxVRSkgKyAoaW50KSAqKG91dHB1dCArIEFEICh4IC0gMSwgeSArIDEsIHZ3KSArIEJMVUUpICsgKGludCkgKihvdXRwdXQgKyBBRCAoeCArIDEsIHkgKyAxLCB2dykgKyBCTFVFKSkgPj4gMjsKKwkJCQlicmVhazsKKworCQkJY2FzZSAzOgkvKiBncmVlbi4gcmVkIGxyLCBibHVlIHRiICovCisJCQkJKihvdXRwdXQgKyBBRCAoeCwgeSwgdncpICsgUkVEKSA9ICgoaW50KSAqKG91dHB1dCArIEFEICh4IC0gMSwgeSwgdncpICsgUkVEKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHggKyAxLCB5LCB2dykgKyBSRUQpKSA+PiAxOworCQkJCSoob3V0cHV0ICsgQUQgKHgsIHksIHZ3KSArIEJMVUUpID0gKChpbnQpICoob3V0cHV0ICsgQUQgKHgsIHkgLSAxLCB2dykgKyBCTFVFKSArIChpbnQpICoob3V0cHV0ICsgQUQgKHgsIHkgKyAxLCB2dykgKyBCTFVFKSkgPj4gMTsKKwkJCQlicmVhazsKKwkJCX0JLyogc3dpdGNoICovCisJCX0JCS8qIGZvciB4ICovCisJfQkJCS8qIGZvciB5ICAtIGVuZCBkZW1vc2FpYyAgKi8KKworCS8qIGZpeCB0b3AgYW5kIGJvdHRvbSByb3csIGxlZnQgYW5kIHJpZ2h0IHNpZGUgKi8KKwlpID0gdncgKiAzOworCW1lbWNweSAob3V0cHV0LCAob3V0cHV0ICsgaSksIGkpOworCW1lbWNweSAoKG91dHB1dCArICh2aCAqIGkpKSwgKG91dHB1dCArICgodmggLSAxKSAqIGkpKSwgaSk7CisJZm9yICh5ID0gMDsgeSA8IHZoOyB5KyspIHsKKwkJaSA9IHkgKiB2dyAqIDM7CisJCW1lbWNweSAoKG91dHB1dCArIGkpLCAob3V0cHV0ICsgaSArIDMpLCAzKTsKKwkJbWVtY3B5ICgob3V0cHV0ICsgaSArICh2dyAqIDMpKSwgKG91dHB1dCArIGkgKyAodncgLSAxKSAqIDMpLCAzKTsKKwl9CisKKwkvKiAgcHJvY2VzcyBhbGwgcmF3IGRhdGEsIHRoZW4gdHJpbSB0byBzaXplIGlmIG5lY2Vzc2FyeSAqLworCWlmICgoc3R2NjgwLT52d2lkdGggPT0gMTYwKSB8fCAoc3R2NjgwLT52d2lkdGggPT0gMTc2KSkgIHsKKwkJaSA9IDA7CisJCWZvciAoeSA9IDA7IHkgPCB2aDsgeSsrKSB7CisJCQlpZiAoISh5ICYgMSkpIHsKKwkJCQlmb3IgKHggPSAwOyB4IDwgdnc7IHgrKykgeworCQkJCQlwID0gKHkgKiB2dyArIHgpICogMzsKKwkJCQkJaWYgKCEoeCAmIDEpKSB7CisJCQkJCQkqKG91dHB1dCArIGkpID0gKihvdXRwdXQgKyBwKTsKKwkJCQkJCSoob3V0cHV0ICsgaSArIDEpID0gKihvdXRwdXQgKyBwICsgMSk7CisJCQkJCQkqKG91dHB1dCArIGkgKyAyKSA9ICoob3V0cHV0ICsgcCArIDIpOworCQkJCQkJaSArPSAzOworCQkJCQl9CisJCQkJfSAgLyogZm9yIHggKi8KKwkJCX0KKwkJfSAgLyogZm9yIHkgKi8KKwl9CisJLyogcmVzZXQgdG8gcHJvcGVyIHdpZHRoICovCisJaWYgKChzdHY2ODAtPnZ3aWR0aCA9PSAxNjApKSB7CisJCXZ3ID0gMTYwOworCQl2aCA9IDEyMDsKKwl9CisJaWYgKChzdHY2ODAtPnZ3aWR0aCA9PSAxNzYpKSB7CisJCXZ3ID0gMTc2OworCQl2aCA9IDE0NDsKKwl9CisKKwkvKiBvdXRwdXQgaXMgUkdCOyBzb21lIHByb2dyYW1zIHdhbnQgQkdSICAqLworCS8qIHN3YXBSR0Jfb249MCAtPiBwcm9ncmFtIGRlY2lkZXM7ICBzd2FwUkdCX29uPTEsIGFsd2F5cyBzd2FwICovCisJLyogc3dhcFJHQl9vbj0tMSwgbmV2ZXIgc3dhcCAqLworCWlmICgoKHN3YXBSR0IgPT0gMSkgJiYgKHN3YXBSR0Jfb24gIT0gLTEpKSB8fCAoc3dhcFJHQl9vbiA9PSAxKSkgeworCQlmb3IgKHkgPSAwOyB5IDwgdmg7IHkrKykgeworCQkJZm9yICh4ID0gMDsgeCA8IHZ3OyB4KyspIHsKKwkJCQlpID0gKHkgKiB2dyArIHgpICogMzsKKwkJCQkqKHRlbXApID0gKihvdXRwdXQgKyBpKTsKKwkJCQkqKG91dHB1dCArIGkpID0gKihvdXRwdXQgKyBpICsgMik7CisJCQkJKihvdXRwdXQgKyBpICsgMikgPSAqKHRlbXApOworCQkJfQorCQl9CisJfQorCS8qIGJyaWdodG5lc3MgKi8KKwlpZiAoc3R2NjgwLT5jaGdicmlnaHQgPT0gMSkgeworCQlpZiAoc3R2NjgwLT5icmlnaHRuZXNzID49IDMyNzY3KSB7CisJCQlwID0gKHN0djY4MC0+YnJpZ2h0bmVzcyAtIDMyNzY3KSAvIDI1NjsKKwkJCWZvciAoeCA9IDA7IHggPCAodncgKiB2aCAqIDMpOyB4KyspIHsKKwkJCQlpZiAoKCoob3V0cHV0ICsgeCkgKyAodW5zaWduZWQgY2hhcikgcCkgPiAyNTUpCisJCQkJCSoob3V0cHV0ICsgeCkgPSAyNTU7CisJCQkJZWxzZQorCQkJCQkqKG91dHB1dCArIHgpICs9ICh1bnNpZ25lZCBjaGFyKSBwOworCQkJfQkvKiBmb3IgKi8KKwkJfSBlbHNlIHsKKwkJCXAgPSAoMzI3NjcgLSBzdHY2ODAtPmJyaWdodG5lc3MpIC8gMjU2OworCQkJZm9yICh4ID0gMDsgeCA8ICh2dyAqIHZoICogMyk7IHgrKykgeworCQkJCWlmICgodW5zaWduZWQgY2hhcikgcCA+ICoob3V0cHV0ICsgeCkpCisJCQkJCSoob3V0cHV0ICsgeCkgPSAwOworCQkJCWVsc2UKKwkJCQkJKihvdXRwdXQgKyB4KSAtPSAodW5zaWduZWQgY2hhcikgcDsKKwkJCX0JLyogZm9yICovCisJCX0JCS8qIGVsc2UgKi8KKwl9CisJLyogaWYgKi8KKwlmcmFtZS0+Y3VycGl4ID0gMDsKKwlmcmFtZS0+Y3VybGluZXBpeCA9IDA7CisJZnJhbWUtPmdyYWJzdGF0ZSA9IEZSQU1FX0RPTkU7CisJc3R2NjgwLT5mcmFtZWNvdW50Kys7CisJc3R2NjgwLT5yZWFkY291bnQrKzsKKwlpZiAoc3R2NjgwLT5mcmFtZVsoc3R2NjgwLT5jdXJmcmFtZSArIDEpICYgKFNUVjY4MF9OVU1GUkFNRVMgLSAxKV0uZ3JhYnN0YXRlID09IEZSQU1FX1JFQURZKSB7CisJCXN0djY4MC0+Y3VyZnJhbWUgPSAoc3R2NjgwLT5jdXJmcmFtZSArIDEpICYgKFNUVjY4MF9OVU1GUkFNRVMgLSAxKTsKKwl9CisKK30JCQkJLyogYmF5ZXJfdW5zaHVmZmxlICovCisKKy8qKioqKioqICBlbmQgcm91dGluZXMgZnJvbSB0aGUgcGVuY2FtIHByb2dyYW0gICoqKioqKioqKi8KKworc3RhdGljIGludCBzdHY2ODBfbmV3ZnJhbWUgKHN0cnVjdCB1c2Jfc3R2ICpzdHY2ODAsIGludCBmcmFtZW5yKQoreworCWludCBlcnJvcnMgPSAwOworCisJd2hpbGUgKHN0djY4MC0+c3RyZWFtaW5nICYmIChzdHY2ODAtPmZyYW1lW2ZyYW1lbnJdLmdyYWJzdGF0ZSA9PSBGUkFNRV9SRUFEWSB8fCBzdHY2ODAtPmZyYW1lW2ZyYW1lbnJdLmdyYWJzdGF0ZSA9PSBGUkFNRV9HUkFCQklORykpIHsKKwkJaWYgKCFzdHY2ODAtPmZyYW1lW2ZyYW1lbnJdLmN1cnBpeCkgeworCQkJZXJyb3JzKys7CisJCX0KKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlIChzdHY2ODAtPndxLCAoc3R2NjgwLT5zY3JhdGNoW3N0djY4MC0+c2NyYXRjaF91c2VdLnN0YXRlID09IEJVRkZFUl9SRUFEWSkpOworCisJCWlmIChzdHY2ODAtPm51bGxwYWNrZXRzID4gU1RWNjgwX01BWF9OVUxMUEFDS0VUUykgeworCQkJc3R2NjgwLT5udWxscGFja2V0cyA9IDA7CisJCQlQREVCVUcgKDIsICJTVFYoaSk6IHRvbyBtYW55IG51bGwgbGVuZ3RoIHBhY2tldHMsIHJlc3RhcnRpbmcgY2FwdHVyZSIpOworCQkJc3R2NjgwX3N0b3Bfc3RyZWFtIChzdHY2ODApOworCQkJc3R2NjgwX3N0YXJ0X3N0cmVhbSAoc3R2NjgwKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChzdHY2ODAtPnNjcmF0Y2hbc3R2NjgwLT5zY3JhdGNoX3VzZV0uc3RhdGUgIT0gQlVGRkVSX1JFQURZKSB7CisJCQkJc3R2NjgwLT5mcmFtZVtmcmFtZW5yXS5ncmFic3RhdGUgPSBGUkFNRV9FUlJPUjsKKwkJCQlQREVCVUcgKDIsICJTVFYoZSk6IEZSQU1FX0VSUk9SIGluIF9uZXdmcmFtZSIpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQkJc3R2NjgwLT5zY3JhdGNoW3N0djY4MC0+c2NyYXRjaF91c2VdLnN0YXRlID0gQlVGRkVSX0JVU1k7CisKKwkJCWJheWVyX3Vuc2h1ZmZsZSAoc3R2NjgwLCAmc3R2NjgwLT5zY3JhdGNoW3N0djY4MC0+c2NyYXRjaF91c2VdKTsKKworCQkJc3R2NjgwLT5zY3JhdGNoW3N0djY4MC0+c2NyYXRjaF91c2VdLnN0YXRlID0gQlVGRkVSX1VOVVNFRDsKKwkJCXN0djY4MC0+c2NyYXRjaF91c2UrKzsKKwkJCWlmIChzdHY2ODAtPnNjcmF0Y2hfdXNlID49IFNUVjY4MF9OVU1TQ1JBVENIKQorCQkJCXN0djY4MC0+c2NyYXRjaF91c2UgPSAwOworCQkJaWYgKGVycm9ycyA+IFNUVjY4MF9NQVhfRVJST1JTKSB7CisJCQkJZXJyb3JzID0gMDsKKwkJCQlQREVCVUcgKDIsICJTVFYoaSk6IHRvbyBtYW55IGVycm9ycywgcmVzdGFydGluZyBjYXB0dXJlIik7CisJCQkJc3R2NjgwX3N0b3Bfc3RyZWFtIChzdHY2ODApOworCQkJCXN0djY4MF9zdGFydF9zdHJlYW0gKHN0djY4MCk7CisJCQl9CisJCX0JCS8qIGVsc2UgKi8KKwl9CQkJLyogd2hpbGUgKi8KKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmlkZW80TGludXgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgc3R2X29wZW4gKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHVzYl9zdHYgKnN0djY4MCA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJaW50IGVyciA9IDA7CisKKwkvKiB3ZSBhcmUgY2FsbGVkIHdpdGggdGhlIEJLTCBoZWxkICovCisJc3R2NjgwLT51c2VyID0gMTsKKwllcnIgPSBzdHZfaW5pdCAoc3R2NjgwKTsJLyogbWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciBjYW1lcmEgKi8KKworCWlmIChlcnIgPj0gMCkgeworCQlzdHY2ODAtPmZidWYgPSBydm1hbGxvYyAoc3R2NjgwLT5tYXhmcmFtZXNpemUgKiBTVFY2ODBfTlVNRlJBTUVTKTsKKwkJaWYgKCFzdHY2ODAtPmZidWYpIHsKKwkJCVBERUJVRyAoMCwgIlNUVihlKTogQ291bGQgbm90IHJ2bWFsbG9jIGZyYW1lIGJ1ZmVyIik7CisJCQllcnIgPSAtRU5PTUVNOworCQl9CisJCWZpbGUtPnByaXZhdGVfZGF0YSA9IGRldjsKKwl9CisJaWYgKGVycikKKwkJc3R2NjgwLT51c2VyID0gMDsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc3R2X2Nsb3NlIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9zdHYgKnN0djY4MCA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgU1RWNjgwX05VTUZSQU1FUzsgaSsrKQorCQlzdHY2ODAtPmZyYW1lW2ldLmdyYWJzdGF0ZSA9IEZSQU1FX1VOVVNFRDsKKwlpZiAoc3R2NjgwLT5zdHJlYW1pbmcpCisJCXN0djY4MF9zdG9wX3N0cmVhbSAoc3R2NjgwKTsKKworCWlmICgoaSA9IHN0dl9zdG9wX3ZpZGVvIChzdHY2ODApKSA8IDApCisJCVBERUJVRyAoMSwgIlNUVihlKTogc3RvcF92aWRlbyBmYWlsZWQgaW4gc3R2X2Nsb3NlIik7CisKKwlydmZyZWUgKHN0djY4MC0+ZmJ1Ziwgc3R2NjgwLT5tYXhmcmFtZXNpemUgKiBTVFY2ODBfTlVNRlJBTUVTKTsKKwlzdHY2ODAtPnVzZXIgPSAwOworCisJaWYgKHN0djY4MC0+cmVtb3ZlZCkgeworCQlrZnJlZSAoc3R2NjgwKTsKKwkJc3R2NjgwID0gTlVMTDsKKwkJUERFQlVHICgwLCAiU1RWKGkpOiBkZXZpY2UgdW5yZWdpc3RlcmVkIik7CisJfQorCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2NjgwX2RvX2lvY3RsIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CisKKwlpZiAoIXN0djY4MC0+dWRldikKKwkJcmV0dXJuIC1FSU87CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVklESU9DR0NBUDp7CisJCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSAqYiA9IGFyZzsKKworCQkJc3RyY3B5IChiLT5uYW1lLCBzdHY2ODAtPmNhbWVyYV9uYW1lKTsKKwkJCWItPnR5cGUgPSBWSURfVFlQRV9DQVBUVVJFOworCQkJYi0+Y2hhbm5lbHMgPSAxOworCQkJYi0+YXVkaW9zID0gMDsKKwkJCWItPm1heHdpZHRoID0gc3R2NjgwLT5tYXh3aWR0aDsKKwkJCWItPm1heGhlaWdodCA9IHN0djY4MC0+bWF4aGVpZ2h0OworCQkJYi0+bWlud2lkdGggPSBzdHY2ODAtPm1heHdpZHRoIC8gMjsKKwkJCWItPm1pbmhlaWdodCA9IHN0djY4MC0+bWF4aGVpZ2h0IC8gMjsKKwkJCXJldHVybiAwOworCQl9CisJY2FzZSBWSURJT0NHQ0hBTjp7CisJCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdiA9IGFyZzsKKworCQkJaWYgKHYtPmNoYW5uZWwgIT0gMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXYtPmZsYWdzID0gMDsKKwkJCXYtPnR1bmVycyA9IDA7CisJCQl2LT50eXBlID0gVklERU9fVFlQRV9DQU1FUkE7CisJCQlzdHJjcHkgKHYtPm5hbWUsICJTVFYgQ2FtZXJhIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgVklESU9DU0NIQU46eworCQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnYgPSBhcmc7CisJCQlpZiAodi0+Y2hhbm5lbCAhPSAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIDA7CisJCX0KKwljYXNlIFZJRElPQ0dQSUNUOnsKKwkJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwID0gYXJnOworCisJCQlzdHY2ODBfZ2V0X3BpY3QgKHN0djY4MCwgcCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgVklESU9DU1BJQ1Q6eworCQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnAgPSBhcmc7CisKKwkJCWlmIChzdHY2ODBfc2V0X3BpY3QgKHN0djY4MCwgcCkpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgVklESU9DU1dJTjp7CisJCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICp2dyA9IGFyZzsKKworCQkJaWYgKHZ3LT5mbGFncykKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmICh2dy0+Y2xpcGNvdW50KQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKHZ3LT53aWR0aCAhPSBzdHY2ODAtPnZ3aWR0aCkgeworCQkJCWlmIChzdHY2ODBfc2V0X3NpemUgKHN0djY4MCwgdnctPndpZHRoLCB2dy0+aGVpZ2h0KSkgeworCQkJCQlQREVCVUcgKDIsICJTVFYoZSk6IGZhaWxlZCAoZnJvbSB1c2VyKSBzZXQgc2l6ZSBpbiBWSURJT0NTV0lOIik7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiAwOworCQl9CisJY2FzZSBWSURJT0NHV0lOOnsKKwkJCXN0cnVjdCB2aWRlb193aW5kb3cgKnZ3ID0gYXJnOworCisJCQl2dy0+eCA9IDA7CS8qIEZJWE1FICovCisJCQl2dy0+eSA9IDA7CisJCQl2dy0+Y2hyb21ha2V5ID0gMDsKKwkJCXZ3LT5mbGFncyA9IDA7CisJCQl2dy0+Y2xpcGNvdW50ID0gMDsKKwkJCXZ3LT53aWR0aCA9IHN0djY4MC0+dndpZHRoOworCQkJdnctPmhlaWdodCA9IHN0djY4MC0+dmhlaWdodDsKKwkJCXJldHVybiAwOworCQl9CisJY2FzZSBWSURJT0NHTUJVRjp7CisJCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiAqdm0gPSBhcmc7CisJCQlpbnQgaTsKKworCQkJbWVtc2V0ICh2bSwgMCwgc2l6ZW9mICgqdm0pKTsKKwkJCXZtLT5zaXplID0gU1RWNjgwX05VTUZSQU1FUyAqIHN0djY4MC0+bWF4ZnJhbWVzaXplOworCQkJdm0tPmZyYW1lcyA9IFNUVjY4MF9OVU1GUkFNRVM7CisJCQlmb3IgKGkgPSAwOyBpIDwgU1RWNjgwX05VTUZSQU1FUzsgaSsrKQorCQkJCXZtLT5vZmZzZXRzW2ldID0gc3R2NjgwLT5tYXhmcmFtZXNpemUgKiBpOworCQkJcmV0dXJuIDA7CisJCX0KKwljYXNlIFZJRElPQ01DQVBUVVJFOnsKKwkJCXN0cnVjdCB2aWRlb19tbWFwICp2bSA9IGFyZzsKKworCQkJaWYgKHZtLT5mb3JtYXQgIT0gU1RWX1ZJREVPX1BBTEVUVEUpIHsKKwkJCQlQREVCVUcgKDIsICJTVFYoaSk6IFZJRElPQ01DQVBUVVJFIHZtLmZvcm1hdCAoJWkpICE9IFZJREVPX1BBTEVUVEUgKCVpKSIsCisJCQkJCXZtLT5mb3JtYXQsIFNUVl9WSURFT19QQUxFVFRFKTsKKwkJCQlpZiAoKHZtLT5mb3JtYXQgPT0gMykgJiYgKHN3YXBSR0Jfb24gPT0gMCkpICB7CisJCQkJCVBERUJVRyAoMiwgIlNUVihpKTogVklESU9DTUNBUFRVUkUgc3dhcFJHQiBpcyAoYXV0bykgT04iKTsKKwkJCQkJLyogdGhpcyBtYXkgZml4IHRob3NlIGFwcHMgKGUuZy4sIHhhd3R2KSB0aGF0IHdhbnQgQkdSICovCisJCQkJCXN3YXBSR0IgPSAxOworCQkJCX0KKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWlmICh2bS0+ZnJhbWUgPj0gU1RWNjgwX05VTUZSQU1FUykgeworCQkJCVBERUJVRyAoMiwgIlNUVihlKTogVklESU9DTUNBUFRVUkUgdm0uZnJhbWUgPiBOVU1GUkFNRVMiKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWlmICgoc3R2NjgwLT5mcmFtZVt2bS0+ZnJhbWVdLmdyYWJzdGF0ZSA9PSBGUkFNRV9FUlJPUikKKwkJCSAgICB8fCAoc3R2NjgwLT5mcmFtZVt2bS0+ZnJhbWVdLmdyYWJzdGF0ZSA9PSBGUkFNRV9HUkFCQklORykpIHsKKwkJCQlQREVCVUcgKDIsICJTVFYoZSk6IFZJRElPQ01DQVBUVVJFIGdyYWJzdGF0ZSAoJWkpIGVycm9yIiwKKwkJCQkJc3R2NjgwLT5mcmFtZVt2bS0+ZnJhbWVdLmdyYWJzdGF0ZSk7CisJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCX0KKwkJCS8qIElzIHRoaXMgYWNjb3JkaW5nIHRvIHRoZSB2NGwgc3BlYz8/PyAqLworCQkJaWYgKHN0djY4MC0+dndpZHRoICE9IHZtLT53aWR0aCkgeworCQkJCWlmIChzdHY2ODBfc2V0X3NpemUgKHN0djY4MCwgdm0tPndpZHRoLCB2bS0+aGVpZ2h0KSkgeworCQkJCQlQREVCVUcgKDIsICJTVFYoZSk6IFZJRElPQ01DQVBUVVJFIHNldF9zaXplIGZhaWxlZCIpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisJCQl9CisJCQlzdHY2ODAtPmZyYW1lW3ZtLT5mcmFtZV0uZ3JhYnN0YXRlID0gRlJBTUVfUkVBRFk7CisKKwkJCWlmICghc3R2NjgwLT5zdHJlYW1pbmcpCisJCQkJc3R2NjgwX3N0YXJ0X3N0cmVhbSAoc3R2NjgwKTsKKworCQkJcmV0dXJuIDA7CisJCX0KKwljYXNlIFZJRElPQ1NZTkM6eworCQkJaW50ICpmcmFtZSA9IGFyZzsKKwkJCWludCByZXQgPSAwOworCisJCQlpZiAoKmZyYW1lIDwgMCB8fCAqZnJhbWUgPj0gU1RWNjgwX05VTUZSQU1FUykgeworCQkJCVBERUJVRyAoMiwgIlNUVihlKTogQmFkIGZyYW1lICMgaW4gVklESU9DU1lOQyIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJcmV0ID0gc3R2NjgwX25ld2ZyYW1lIChzdHY2ODAsICpmcmFtZSk7CisJCQlzdHY2ODAtPmZyYW1lWypmcmFtZV0uZ3JhYnN0YXRlID0gRlJBTUVfVU5VU0VEOworCQkJcmV0dXJuIHJldDsKKwkJfQorCWNhc2UgVklESU9DR0ZCVUY6eworCQkJc3RydWN0IHZpZGVvX2J1ZmZlciAqdmIgPSBhcmc7CisKKwkJCW1lbXNldCAodmIsIDAsIHNpemVvZiAoKnZiKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgVklESU9DS0VZOgorCQlyZXR1cm4gMDsKKwljYXNlIFZJRElPQ0NBUFRVUkU6CisJCXsKKwkJCVBERUJVRyAoMiwgIlNUVihlKTogVklESU9DQ0FQVFVSRSBmYWlsZWQiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJY2FzZSBWSURJT0NTRkJVRjoKKwljYXNlIFZJRElPQ0dUVU5FUjoKKwljYXNlIFZJRElPQ1NUVU5FUjoKKwljYXNlIFZJRElPQ0dGUkVROgorCWNhc2UgVklESU9DU0ZSRVE6CisJY2FzZSBWSURJT0NHQVVESU86CisJY2FzZSBWSURJT0NTQVVESU86CisJCXJldHVybiAtRUlOVkFMOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQkJCS8qIGVuZCBzd2l0Y2ggKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djY4MF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIHN0djY4MF9kb19pb2N0bCk7Cit9CisKK3N0YXRpYyBpbnQgc3R2NjgwX21tYXAgKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9zdHYgKnN0djY4MCA9IHZpZGVvX2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzaXplICA9IHZtYS0+dm1fZW5kLXZtYS0+dm1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBwYWdlLCBwb3M7CisKKwlkb3duICgmc3R2NjgwLT5sb2NrKTsKKworCWlmIChzdHY2ODAtPnVkZXYgPT0gTlVMTCkgeworCQl1cCAoJnN0djY4MC0+bG9jayk7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoc2l6ZSA+ICgoKFNUVjY4MF9OVU1GUkFNRVMgKiBzdHY2ODAtPm1heGZyYW1lc2l6ZSkgKyBQQUdFX1NJWkUgLSAxKQorCQkgICAgJiB+KFBBR0VfU0laRSAtIDEpKSkgeworCQl1cCAoJnN0djY4MC0+bG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlwb3MgPSAodW5zaWduZWQgbG9uZykgc3R2NjgwLT5mYnVmOworCXdoaWxlIChzaXplID4gMCkgeworCQlwYWdlID0gdm1hbGxvY190b19wZm4oKHZvaWQgKilwb3MpOworCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UsIFBBR0VfU0laRSwgUEFHRV9TSEFSRUQpKSB7CisJCQl1cCAoJnN0djY4MC0+bG9jayk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCQlzdGFydCArPSBQQUdFX1NJWkU7CisJCXBvcyArPSBQQUdFX1NJWkU7CisJCWlmIChzaXplID4gUEFHRV9TSVpFKQorCQkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJCWVsc2UKKwkJCXNpemUgPSAwOworCX0KKwl1cCAoJnN0djY4MC0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3Qgc3R2NjgwX3JlYWQgKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgaW50IHJlYWxjb3VudCA9IGNvdW50OworCWludCByZXQgPSAwOworCXN0cnVjdCB1c2Jfc3R2ICpzdHY2ODAgPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgaW50IGk7CisKKwlpZiAoU1RWNjgwX05VTUZSQU1FUyAhPSAyKSB7CisJCVBERUJVRyAoMCwgIlNUVihlKTogU1RWNjgwX05VTUZSQU1FUyBuZWVkcyB0byBiZSAyISIpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChzdHY2ODAtPnVkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHJlYWxjb3VudCA+IChzdHY2ODAtPnZ3aWR0aCAqIHN0djY4MC0+dmhlaWdodCAqIDMpKQorCQlyZWFsY291bnQgPSBzdHY2ODAtPnZ3aWR0aCAqIHN0djY4MC0+dmhlaWdodCAqIDM7CisKKwkvKiBTaG91bGRuJ3QgaGFwcGVuOiAqLworCWlmIChzdHY2ODAtPmZyYW1lWzBdLmdyYWJzdGF0ZSA9PSBGUkFNRV9HUkFCQklORykgeworCQlQREVCVUcgKDIsICJTVFYoZSk6IEZSQU1FX0dSQUJCSU5HIGluIHN0djY4MF9yZWFkIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCXN0djY4MC0+ZnJhbWVbMF0uZ3JhYnN0YXRlID0gRlJBTUVfUkVBRFk7CisJc3R2NjgwLT5mcmFtZVsxXS5ncmFic3RhdGUgPSBGUkFNRV9VTlVTRUQ7CisJc3R2NjgwLT5jdXJmcmFtZSA9IDA7CisKKwlpZiAoIXN0djY4MC0+c3RyZWFtaW5nKQorCQlzdHY2ODBfc3RhcnRfc3RyZWFtIChzdHY2ODApOworCisJaWYgKCFzdHY2ODAtPnN0cmVhbWluZykgeworCQlyZXQgPSBzdHY2ODBfbmV3ZnJhbWUgKHN0djY4MCwgMCk7CS8qIHJldCBzaG91bGQgPSAwICovCisJfQorCisJcmV0ID0gc3R2NjgwX25ld2ZyYW1lIChzdHY2ODAsIDApOworCisJaWYgKCFyZXQpIHsKKwkJaWYgKChpID0gY29weV90b191c2VyIChidWYsIHN0djY4MC0+ZnJhbWVbMF0uZGF0YSwgcmVhbGNvdW50KSkgIT0gMCkgeworCQkJUERFQlVHICgyLCAiU1RWKGUpOiBjb3B5X3RvX3VzZXIgZnJhbWUgMCBmYWlsZWQsIHJldCBjb3VudCA9ICVsaSIsIGkpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwl9IGVsc2UgeworCQlyZWFsY291bnQgPSByZXQ7CisJfQorCXN0djY4MC0+ZnJhbWVbMF0uZ3JhYnN0YXRlID0gRlJBTUVfVU5VU0VEOworCXJldHVybiByZWFsY291bnQ7Cit9CQkJCS8qIHN0djY4MF9yZWFkICovCisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0djY4MF9mb3BzID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5vcGVuID0JCXN0dl9vcGVuLAorCS5yZWxlYXNlID0gICAgIAlzdHZfY2xvc2UsCisJLnJlYWQgPQkJc3R2NjgwX3JlYWQsCisJLm1tYXAgPQkJc3R2NjgwX21tYXAsCisJLmlvY3RsID0gICAgICAgIHN0djY4MF9pb2N0bCwKKwkubGxzZWVrID0gICAgICAgbm9fbGxzZWVrLAorfTsKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHN0djY4MF90ZW1wbGF0ZSA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiU1RWMDY4MCBVU0IgY2FtZXJhIiwKKwkudHlwZSA9CQlWSURfVFlQRV9DQVBUVVJFLAorCS5oYXJkd2FyZSA9CVZJRF9IQVJEV0FSRV9TRTQwMSwKKwkuZm9wcyA9ICAgICAgICAgJnN0djY4MF9mb3BzLAorCS5yZWxlYXNlID0JdmlkZW9fZGV2aWNlX3JlbGVhc2UsCisJLm1pbm9yID0gCS0xLAorfTsKKworc3RhdGljIGludCBzdHY2ODBfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCB1c2Jfc3R2ICpzdHY2ODAgPSBOVUxMOworCWNoYXIgKmNhbWVyYV9uYW1lID0gTlVMTDsKKwlpbnQgcmV0dmFsID0gMDsKKworCS8qIFdlIGRvbid0IGhhbmRsZSBtdWx0aS1jb25maWcgY2FtZXJhcyAqLworCWlmIChkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpIHsKKwkJUERFQlVHICgwLCAiU1RWKGUpOiBOdW1iZXIgb2YgQ29uZmlndXJhdGlvbnMgIT0gMSIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpbnRlcmZhY2UgPSAmaW50Zi0+YWx0c2V0dGluZ1swXTsKKwkvKiBJcyBpdCBhIFNUVjY4MD8gKi8KKwlpZiAoKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gVVNCX1BFTkNBTV9WRU5ET1JfSUQpICYmCisJICAgIChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSBVU0JfUEVOQ0FNX1BST0RVQ1RfSUQpKSB7CisJCWNhbWVyYV9uYW1lID0gIlNUVjA2ODAiOworCQlQREVCVUcgKDAsICJTVFYoaSk6IFNUVjA2ODAgY2FtZXJhIGZvdW5kLiIpOworCX0gZWxzZSB7CisJCVBERUJVRyAoMCwgIlNUVihlKTogVmVuZG9yL1Byb2R1Y3QgSUQgZG8gbm90IG1hdGNoIFNUVjA2ODAgdmFsdWVzLiIpOworCQlQREVCVUcgKDAsICJTVFYoZSk6IENoZWNrIHRoYXQgdGhlIFNUVjA2ODAgY2FtZXJhIGlzIGNvbm5lY3RlZCB0byB0aGUgY29tcHV0ZXIuIik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3I7CisJfQorCS8qIFdlIGZvdW5kIG9uZSAqLworCWlmICgoc3R2NjgwID0ga21hbGxvYyAoc2l6ZW9mICgqc3R2NjgwKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwkJUERFQlVHICgwLCAiU1RWKGUpOiBjb3VsZG4ndCBrbWFsbG9jIHN0djY4MCBzdHJ1Y3QuIik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJbWVtc2V0IChzdHY2ODAsIDAsIHNpemVvZiAoKnN0djY4MCkpOworCisJc3R2NjgwLT51ZGV2ID0gZGV2OworCXN0djY4MC0+Y2FtZXJhX25hbWUgPSBjYW1lcmFfbmFtZTsKKworCXN0djY4MC0+dmRldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmICghc3R2NjgwLT52ZGV2KSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCW1lbWNweShzdHY2ODAtPnZkZXYsICZzdHY2ODBfdGVtcGxhdGUsIHNpemVvZihzdHY2ODBfdGVtcGxhdGUpKTsKKwlzdHY2ODAtPnZkZXYtPmRldiA9ICZpbnRmLT5kZXY7CisJdmlkZW9fc2V0X2RydmRhdGEoc3R2NjgwLT52ZGV2LCBzdHY2ODApOworCisJbWVtY3B5IChzdHY2ODAtPnZkZXYtPm5hbWUsIHN0djY4MC0+Y2FtZXJhX25hbWUsIHN0cmxlbiAoc3R2NjgwLT5jYW1lcmFfbmFtZSkpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZzdHY2ODAtPndxKTsKKwlpbml0X01VVEVYICgmc3R2NjgwLT5sb2NrKTsKKwl3bWIgKCk7CisKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlIChzdHY2ODAtPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKSA9PSAtMSkgeworCQlQREVCVUcgKDAsICJTVFYoZSk6IHZpZGVvX3JlZ2lzdGVyX2RldmljZSBmYWlsZWQiKTsKKwkJcmV0dmFsID0gLUVJTzsKKwkJZ290byBlcnJvcl92ZGV2OworCX0KKwlQREVCVUcgKDAsICJTVFYoaSk6IHJlZ2lzdGVyZWQgbmV3IHZpZGVvIGRldmljZTogdmlkZW8lZCIsIHN0djY4MC0+dmRldi0+bWlub3IpOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50Ziwgc3R2NjgwKTsKKwlzdHY2ODBfY3JlYXRlX3N5c2ZzX2ZpbGVzKHN0djY4MC0+dmRldik7CisJcmV0dXJuIDA7CisKK2Vycm9yX3ZkZXY6CisJdmlkZW9fZGV2aWNlX3JlbGVhc2Uoc3R2NjgwLT52ZGV2KTsKK2Vycm9yOgorCWtmcmVlKHN0djY4MCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVzYl9zdHY2ODBfcmVtb3ZlX2Rpc2Nvbm5lY3RlZCAoc3RydWN0IHVzYl9zdHYgKnN0djY4MCkKK3sKKwlpbnQgaTsKKworCXN0djY4MC0+dWRldiA9IE5VTEw7CisJc3R2NjgwLT5mcmFtZVswXS5ncmFic3RhdGUgPSBGUkFNRV9FUlJPUjsKKwlzdHY2ODAtPmZyYW1lWzFdLmdyYWJzdGF0ZSA9IEZSQU1FX0VSUk9SOworCXN0djY4MC0+c3RyZWFtaW5nID0gMDsKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSAoJnN0djY4MC0+d3EpOworCisJZm9yIChpID0gMDsgaSA8IFNUVjY4MF9OVU1TQlVGOyBpKyspCisJCWlmIChzdHY2ODAtPnVyYltpXSkgeworCQkJdXNiX2tpbGxfdXJiIChzdHY2ODAtPnVyYltpXSk7CisJCQl1c2JfZnJlZV91cmIgKHN0djY4MC0+dXJiW2ldKTsKKwkJCXN0djY4MC0+dXJiW2ldID0gTlVMTDsKKwkJCWtmcmVlIChzdHY2ODAtPnNidWZbaV0uZGF0YSk7CisJCX0KKwlmb3IgKGkgPSAwOyBpIDwgU1RWNjgwX05VTVNDUkFUQ0g7IGkrKykKKwkJa2ZyZWUgKHN0djY4MC0+c2NyYXRjaFtpXS5kYXRhKTsKKwlQREVCVUcgKDAsICJTVFYoaSk6ICVzIGRpc2Nvbm5lY3RlZCIsIHN0djY4MC0+Y2FtZXJhX25hbWUpOworCisJLyogRnJlZSB0aGUgbWVtb3J5ICovCisJa2ZyZWUgKHN0djY4MCk7Cit9CisKK3N0YXRpYyB2b2lkIHN0djY4MF9kaXNjb25uZWN0IChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX3N0diAqc3R2NjgwID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKKworCWlmIChzdHY2ODApIHsKKwkJLyogV2UgZG9uJ3Qgd2FudCBwZW9wbGUgdHJ5aW5nIHRvIG9wZW4gdXAgdGhlIGRldmljZSAqLworCQlpZiAoc3R2NjgwLT52ZGV2KSB7CisJCQlzdHY2ODBfcmVtb3ZlX3N5c2ZzX2ZpbGVzKHN0djY4MC0+dmRldik7CisJCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShzdHY2ODAtPnZkZXYpOworCQkJc3R2NjgwLT52ZGV2ID0gTlVMTDsKKwkJfQorCQlpZiAoIXN0djY4MC0+dXNlcikgeworCQkJdXNiX3N0djY4MF9yZW1vdmVfZGlzY29ubmVjdGVkIChzdHY2ODApOworCQl9IGVsc2UgeworCQkJc3R2NjgwLT5yZW1vdmVkID0gMTsKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHN0djY4MF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJInN0djY4MCIsCisJLnByb2JlID0Jc3R2NjgwX3Byb2JlLAorCS5kaXNjb25uZWN0ID0Jc3R2NjgwX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JZGV2aWNlX3RhYmxlCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBNb2R1bGUgcm91dGluZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBfX2luaXQgdXNiX3N0djY4MF9pbml0ICh2b2lkKQoreworCWlmICh1c2JfcmVnaXN0ZXIgKCZzdHY2ODBfZHJpdmVyKSA8IDApIHsKKwkJUERFQlVHICgwLCAiU1RWKGUpOiBDb3VsZCBub3Qgc2V0dXAgU1RWMDY4MCBkcml2ZXIiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlQREVCVUcgKDAsICJTVFYoaSk6IHVzYiBjYW1lcmEgZHJpdmVyIHZlcnNpb24gJXMgcmVnaXN0ZXJpbmciLCBEUklWRVJfVkVSU0lPTik7CisKKwlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2Jfc3R2NjgwX2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZzdHY2ODBfZHJpdmVyKTsKKwlQREVCVUcgKDAsICJTVFYoaSk6IGRyaXZlciBkZXJlZ2lzdGVyZWQiKTsKK30KKworbW9kdWxlX2luaXQgKHVzYl9zdHY2ODBfaW5pdCk7Cittb2R1bGVfZXhpdCAodXNiX3N0djY4MF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3N0djY4MC5oIGIvZHJpdmVycy91c2IvbWVkaWEvc3R2NjgwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UwZTMxNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS9zdHY2ODAuaApAQCAtMCwwICsxLDIyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgRmlsZW5hbWU6IHN0djY4MC5oCisgKgorICogIERlc2NyaXB0aW9uOgorICogICAgIFRoaXMgaXMgYSBVU0IgZHJpdmVyIGZvciBTVFYwNjgwIGJhc2VkIHVzYiB2aWRlbyBjYW1lcmFzLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIAorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogc2l6ZSBvZiB1c2IgdHJhbnNmZXJzICovCisjZGVmaW5lIFNUVjY4MF9QQUNLRVRTSVpFCTQwOTYKKworLyogbnVtYmVyIG9mIHF1ZXVlZCBidWxrIHRyYW5zZmVycyB0byB1c2UsIG1heSBoYXZlIHByb2JsZW1zIGlmID4gMSAqLworI2RlZmluZSBTVFY2ODBfTlVNU0JVRgkJMQorCisvKiBudW1iZXIgb2YgZnJhbWVzIHN1cHBvcnRlZCBieSB0aGUgdjRsIHBhcnQgKi8KKyNkZWZpbmUgU1RWNjgwX05VTUZSQU1FUwkyCisKKy8qIHNjcmF0Y2ggYnVmZmVycyBmb3IgcGFzc2luZyBkYXRhIHRvIHRoZSBkZWNvZGVyczogMiBvciA0IGFyZSBnb29kICovCisjZGVmaW5lIFNUVjY4MF9OVU1TQ1JBVENICTIKKworLyogbnVtYmVyIG9mIG51bCBzaXplZCBwYWNrZXRzIHRvIHJlY2VpdmUgYmVmb3JlIGtpY2tpbmcgdGhlIGNhbWVyYSAqLworI2RlZmluZSBTVFY2ODBfTUFYX05VTExQQUNLRVRTCTIwMAorCisvKiBudW1iZXIgb2YgZGVjb2RpbmcgZXJyb3JzIGJlZm9yZSBraWNraW5nIHRoZSBjYW1lcmEgKi8KKyNkZWZpbmUgU1RWNjgwX01BWF9FUlJPUlMJMTAwCisKKyNkZWZpbmUgVVNCX1BFTkNBTV9WRU5ET1JfSUQJMHgwNTUzCisjZGVmaW5lIFVTQl9QRU5DQU1fUFJPRFVDVF9JRAkweDAyMDIKKyNkZWZpbmUgUEVOQ0FNX1RJTUVPVVQgICAgICAgICAgMTAwMAorLyogZm10IDQgKi8KKyNkZWZpbmUgU1RWX1ZJREVPX1BBTEVUVEUgICAgICAgVklERU9fUEFMRVRURV9SR0IyNAorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UgKFVTQl9QRU5DQU1fVkVORE9SX0lELCBVU0JfUEVOQ0FNX1BST0RVQ1RfSUQpfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgZGV2aWNlX3RhYmxlKTsKKworc3RydWN0IHN0djY4MF9zYnVmIHsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworfTsKKworZW51bSB7CisJRlJBTUVfVU5VU0VELAkJLyogVW51c2VkIChubyBNQ0FQVFVSRSkgKi8KKwlGUkFNRV9SRUFEWSwJCS8qIFJlYWR5IHRvIHN0YXJ0IGdyYWJiaW5nICovCisJRlJBTUVfR1JBQkJJTkcsCQkvKiBJbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBncmFiYmVkIGludG8gKi8KKwlGUkFNRV9ET05FLAkJLyogRmluaXNoZWQgZ3JhYmJpbmcsIGJ1dCBub3QgYmVlbiBzeW5jZWQgeWV0ICovCisJRlJBTUVfRVJST1IsCQkvKiBTb21ldGhpbmcgYmFkIGhhcHBlbmVkIHdoaWxlIHByb2Nlc3NpbmcgKi8KK307CisKK2VudW0geworCUJVRkZFUl9VTlVTRUQsCisJQlVGRkVSX1JFQURZLAorCUJVRkZFUl9CVVNZLAorCUJVRkZFUl9ET05FLAorfTsKKworLyogcmF3IGNhbWVyYSBkYXRhIDwtIHNidWYgKHVyYiB0cmFuc2ZlciBidWYpICovCitzdHJ1Y3Qgc3R2NjgwX3NjcmF0Y2ggeworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisJdm9sYXRpbGUgaW50IHN0YXRlOworCWludCBvZmZzZXQ7CisJaW50IGxlbmd0aDsKK307CisKKy8qIHByb2Nlc3NlZCBkYXRhIGZvciBkaXNwbGF5IGVuZHMgdXAgaGVyZSwgYWZ0ZXIgYmF5ZXIgKi8KK3N0cnVjdCBzdHY2ODBfZnJhbWUgeworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CS8qIEZyYW1lIGJ1ZmZlciAqLworCXZvbGF0aWxlIGludCBncmFic3RhdGU7CS8qIFN0YXRlIG9mIGdyYWJiaW5nICovCisJdW5zaWduZWQgY2hhciAqY3VybGluZTsKKwlpbnQgY3VybGluZXBpeDsKKwlpbnQgY3VycGl4OworfTsKKworLyogdGhpcyBpcyBhbG1vc3QgdGhlIHZpZGVvIHN0cnVjdHVyZSB1dmRfdCwgd2l0aCBleHRyYSBwYXJhbWV0ZXJzIGZvciBzdHYgKi8KK3N0cnVjdCB1c2Jfc3R2IHsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OworCisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisKKwl1bnNpZ25lZCBjaGFyIGJ1bGtfaW5fZW5kcG9pbnRBZGRyOwkvKiBfX3U4ICB0aGUgYWRkcmVzcyBvZiB0aGUgYnVsayBpbiBlbmRwb2ludCAqLworCWNoYXIgKmNhbWVyYV9uYW1lOworCisJdW5zaWduZWQgaW50IFZpZGVvTW9kZTsJLyogMHgwMTAwID0gVkdBLCAweDAwMDAgPSBDSUYsIDB4MDMwMCA9IFFWR0EgKi8KKwlpbnQgU3VwcG9ydGVkTW9kZXM7CisJaW50IENJRjsKKwlpbnQgVkdBOworCWludCBRVkdBOworCWludCBjd2lkdGg7CQkvKiBjYW1lcmEgd2lkdGggKi8KKwlpbnQgY2hlaWdodDsJCS8qIGNhbWVyYSBoZWlnaHQgKi8KKwlpbnQgbWF4d2lkdGg7CQkvKiBtYXggdmlkZW8gd2lkdGggKi8KKwlpbnQgbWF4aGVpZ2h0OwkJLyogbWF4IHZpZGVvIGhlaWdodCAqLworCWludCB2d2lkdGg7CQkvKiBjdXJyZW50IHdpZHRoIGZvciB2aWRlbyB3aW5kb3cgKi8KKwlpbnQgdmhlaWdodDsJCS8qIGN1cnJlbnQgaGVpZ2h0IGZvciB2aWRlbyB3aW5kb3cgKi8KKwl1bnNpZ25lZCBsb25nIGludCByYXdidWZzaXplOworCXVuc2lnbmVkIGxvbmcgaW50IG1heGZyYW1lc2l6ZTsJLyogcmF3YnVmc2l6ZSAqIDMgZm9yIFJHQiAqLworCisJaW50IG9yaWdHYWluOworCWludCBvcmlnTW9kZTsJCS8qIG9yaWdpbmFsIGNhbWVyYSBtb2RlICovCisKKwlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CS8qIHRvIGxvY2sgdGhlIHN0cnVjdHVyZSAqLworCWludCB1c2VyOwkJLyogdXNlciBjb3VudCBmb3IgZXhjbHVzaXZlIHVzZSAqLworCWludCByZW1vdmVkOwkJLyogZGV2aWNlIGRpc2Nvbm5lY3RlZCAqLworCWludCBzdHJlYW1pbmc7CQkvKiBBcmUgd2Ugc3RyZWFtaW5nIHZpZGVvPyAqLworCWNoYXIgKmZidWY7CQkvKiBWaWRlb2RldiBidWZmZXIgYXJlYSAqLworCXN0cnVjdCB1cmIgKnVyYltTVFY2ODBfTlVNU0JVRl07CS8qICMgb2YgcXVldWVkIGJ1bGsgdHJhbnNmZXJzICovCisJaW50IGN1cmZyYW1lOwkJLyogQ3VycmVudCByZWNlaXZpbmcgZnJhbWUgKi8KKwlzdHJ1Y3Qgc3R2NjgwX2ZyYW1lIGZyYW1lW1NUVjY4MF9OVU1GUkFNRVNdOwkvKiAjIGZyYW1lcyBzdXBwb3J0ZWQgYnkgdjRsIHBhcnQgKi8KKwlpbnQgcmVhZGNvdW50OworCWludCBmcmFtZWNvdW50OworCWludCBlcnJvcjsKKwlpbnQgZHJvcHBlZDsKKwlpbnQgc2NyYXRjaF9uZXh0OworCWludCBzY3JhdGNoX3VzZTsKKwlpbnQgc2NyYXRjaF9vdmVyZmxvdzsKKwlzdHJ1Y3Qgc3R2NjgwX3NjcmF0Y2ggc2NyYXRjaFtTVFY2ODBfTlVNU0NSQVRDSF07CS8qIGZvciBkZWNvZGVycyAqLworCXN0cnVjdCBzdHY2ODBfc2J1ZiBzYnVmW1NUVjY4MF9OVU1TQlVGXTsKKworCXVuc2lnbmVkIGludCBicmlnaHRuZXNzOworCXVuc2lnbmVkIGludCBjaGdicmlnaHQ7CisJdW5zaWduZWQgaW50IHdoaXRlbmVzczsKKwl1bnNpZ25lZCBpbnQgY29sb3VyOworCXVuc2lnbmVkIGludCBjb250cmFzdDsKKwl1bnNpZ25lZCBpbnQgaHVlOworCXVuc2lnbmVkIGludCBwYWxldHRlOworCXVuc2lnbmVkIGludCBkZXB0aDsJLyogcmdiMjQgaW4gYml0cyAqLworCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CS8qIFByb2Nlc3NlcyB3YWl0aW5nICovCisKKwlpbnQgbnVsbHBhY2tldHM7Cit9OworCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHJlZFsyNTZdID0geyAKKwkwLCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIAorCTE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAyNSwgMzAsIDM1LCAzOCwgNDIsIAorCTQ0LCA0NywgNTAsIDUzLCA1NCwgNTcsIDU5LCA2MSwgNjMsIDY1LCA2NywgNjksIAorCTcxLCA3MSwgNzMsIDc1LCA3NywgNzgsIDgwLCA4MSwgODIsIDg0LCA4NSwgODcsIAorCTg4LCA4OSwgOTAsIDkxLCA5MywgOTQsIDk1LCA5NywgOTgsIDk4LCA5OSwgMTAxLCAKKwkxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDExMiwgMTEzLCAKKwkxMTQsIDExNSwgMTE2LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAKKwkxMjUsIDEyNSwgMTI2LCAxMjcsIDEyOCwgMTI5LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAKKwkxMzQsIDEzNSwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQwLCAxNDEsIDE0MiwgMTQzLCAKKwkxNDMsIDE0MywgMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MCwgMTUxLCAKKwkxNTIsIDE1MiwgMTUyLCAxNTMsIDE1NCwgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTcsIDE1OCwgMTU5LCAKKwkxNTksIDE2MCwgMTYxLCAxNjEsIDE2MSwgMTYyLCAxNjMsIDE2MywgMTY0LCAxNjUsIDE2NSwgMTY2LCAKKwkxNjcsIDE2NywgMTY4LCAxNjgsIDE2OSwgMTcwLCAxNzAsIDE3MCwgMTcxLCAxNzEsIDE3MiwgMTczLCAKKwkxNzMsIDE3NCwgMTc0LCAxNzUsIDE3NiwgMTc2LCAxNzcsIDE3OCwgMTc4LCAxNzksIDE3OSwgMTc5LCAKKwkxODAsIDE4MCwgMTgxLCAxODEsIDE4MiwgMTgzLCAxODMsIDE4NCwgMTg0LCAxODUsIDE4NSwgMTg2LCAKKwkxODcsIDE4NywgMTg4LCAxODgsIDE4OCwgMTg4LCAxODksIDE5MCwgMTkwLCAxOTEsIDE5MSwgMTkyLCAKKwkxOTIsIDE5MywgMTkzLCAxOTQsIDE5NSwgMTk1LCAxOTYsIDE5NiwgMTk3LCAxOTcsIDE5NywgMTk3LCAKKwkxOTgsIDE5OCwgMTk5LCAxOTksIDIwMCwgMjAxLCAyMDEsIDIwMiwgMjAyLCAyMDMsIDIwMywgMjA0LCAKKwkyMDQsIDIwNSwgMjA1LCAyMDYsIDIwNiwgMjA2LCAyMDYsIDIwNywgMjA3LCAyMDgsIDIwOCwgMjA5LCAKKwkyMDksIDIxMCwgMjEwLCAyMTEsIDIxMSwgMjEyLCAyMTIsIDIxMywgMjEzLCAyMTQsIDIxNCwgMjE1LCAKKwkyMTUsIDIxNSwgMjE1LCAyMTYsIDIxNiwgMjE3LCAyMTcsIDIxOCwgMjE4LCAyMTgsIDIxOSwgMjE5LCAKKwkyMjAsIDIyMCwgMjIxLCAyMjEgCit9OyAKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgZ3JlZW5bMjU2XSA9IHsKKwkwLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAorCTIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyOCwgMzQsIDM5LCA0MywgNDcsIAorCTUwLCA1MywgNTYsIDU5LCA2MSwgNjQsIDY2LCA2OCwgNzEsIDczLCA3NSwgNzcsIAorCTc5LCA4MCwgODIsIDg0LCA4NiwgODcsIDg5LCA5MSwgOTIsIDk0LCA5NSwgOTcsIAorCTk4LCAxMDAsIDEwMSwgMTAyLCAxMDQsIDEwNSwgMTA2LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDExMywgCisJMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgCisJMTI3LCAxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgCisJMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsIDE0NCwgMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgCisJMTUwLCAxNTEsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1NiwgMTU3LCAxNTgsIDE1OSwgCisJMTYwLCAxNjAsIDE2MSwgMTYyLCAxNjMsIDE2NCwgMTY0LCAxNjUsIDE2NiwgMTY3LCAxNjcsIDE2OCwgCisJMTY5LCAxNzAsIDE3MCwgMTcxLCAxNzIsIDE3MiwgMTczLCAxNzQsIDE3NSwgMTc1LCAxNzYsIDE3NywgCisJMTc3LCAxNzgsIDE3OSwgMTc5LCAxODAsIDE4MSwgMTgyLCAxODIsIDE4MywgMTg0LCAxODQsIDE4NSwgCisJMTg2LCAxODYsIDE4NywgMTg3LCAxODgsIDE4OSwgMTg5LCAxOTAsIDE5MSwgMTkxLCAxOTIsIDE5MywgCisJMTkzLCAxOTQsIDE5NCwgMTk1LCAxOTYsIDE5NiwgMTk3LCAxOTgsIDE5OCwgMTk5LCAxOTksIDIwMCwgCisJMjAxLCAyMDEsIDIwMiwgMjAyLCAyMDMsIDIwNCwgMjA0LCAyMDUsIDIwNSwgMjA2LCAyMDYsIDIwNywgCisJMjA4LCAyMDgsIDIwOSwgMjA5LCAyMTAsIDIxMCwgMjExLCAyMTIsIDIxMiwgMjEzLCAyMTMsIDIxNCwgCisJMjE0LCAyMTUsIDIxNSwgMjE2LCAyMTcsIDIxNywgMjE4LCAyMTgsIDIxOSwgMjE5LCAyMjAsIDIyMCwgCisJMjIxLCAyMjEsIDIyMiwgMjIyLCAyMjMsIDIyNCwgMjI0LCAyMjUsIDIyNSwgMjI2LCAyMjYsIDIyNywgCisJMjI3LCAyMjgsIDIyOCwgMjI5LCAyMjksIDIzMCwgMjMwLCAyMzEsIDIzMSwgMjMyLCAyMzIsIDIzMywgCisJMjMzLCAyMzQsIDIzNCwgMjM1LCAyMzUsIDIzNiwgMjM2LCAyMzcsIDIzNywgMjM4LCAyMzgsIDIzOSwgCisJMjM5LCAyNDAsIDI0MCwgMjQxLCAyNDEsIDI0MiwgMjQyLCAyNDMsIDI0MywgMjQzLCAyNDQsIDI0NCwgCisJMjQ1LCAyNDUsIDI0NiwgMjQ2IAorfTsgCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGJsdWVbMjU2XSA9IHsKKwkwLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIAorCTIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAzMCwgMzcsIDQyLCA0NywgNTEsIAorCTU1LCA1OCwgNjEsIDY0LCA2NywgNzAsIDcyLCA3NCwgNzgsIDgwLCA4MiwgODQsIAorCTg2LCA4OCwgOTAsIDkyLCA5NCwgOTUsIDk3LCAxMDAsIDEwMSwgMTAzLCAxMDQsIDEwNiwgCisJMTA3LCAxMTAsIDExMSwgMTEyLCAxMTQsIDExNSwgMTE2LCAxMTgsIDExOSwgMTIxLCAxMjIsIDEyNCwgCisJMTI1LCAxMjYsIDEyNywgMTI4LCAxMjksIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgCisJMTM5LCAxNDAsIDE0MSwgMTQzLCAxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgCisJMTUyLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU4LCAxNTksIDE2MCwgMTYxLCAxNjIsIDE2MywgCisJMTY1LCAxNjYsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTcwLCAxNzEsIDE3MSwgMTcyLCAxNzMsIDE3NCwgCisJMTc2LCAxNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgwLCAxODEsIDE4MiwgMTgzLCAxODMsIDE4NCwgCisJMTg1LCAxODcsIDE4NywgMTg4LCAxODksIDE4OSwgMTkwLCAxOTEsIDE5MiwgMTkyLCAxOTMsIDE5NCwgCisJMTk0LCAxOTUsIDE5NiwgMTk2LCAxOTgsIDE5OSwgMjAwLCAyMDAsIDIwMSwgMjAyLCAyMDIsIDIwMywgCisJMjA0LCAyMDQsIDIwNSwgMjA1LCAyMDYsIDIwNywgMjA3LCAyMDksIDIxMCwgMjEwLCAyMTEsIDIxMiwgCisJMjEyLCAyMTMsIDIxMywgMjE0LCAyMTUsIDIxNSwgMjE2LCAyMTcsIDIxNywgMjE4LCAyMTgsIDIyMCwgCisJMjIxLCAyMjEsIDIyMiwgMjIyLCAyMjMsIDIyNCwgMjI0LCAyMjUsIDIyNSwgMjI2LCAyMjYsIDIyNywgCisJMjI4LCAyMjgsIDIyOSwgMjI5LCAyMzEsIDIzMSwgMjMyLCAyMzMsIDIzMywgMjM0LCAyMzQsIDIzNSwgCisJMjM1LCAyMzYsIDIzNiwgMjM3LCAyMzgsIDIzOCwgMjM5LCAyMzksIDI0MCwgMjQwLCAyNDIsIDI0MiwgCisJMjQzLCAyNDMsIDI0NCwgMjQ0LCAyNDUsIDI0NiwgMjQ2LCAyNDcsIDI0NywgMjQ4LCAyNDgsIDI0OSwgCisJMjQ5LCAyNTAsIDI1MCwgMjUxLCAyNTEsIDI1MywgMjUzLCAyNTQsIDI1NCwgMjU1LCAyNTUsIDI1NSwgCisJMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgCisJMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgCisJMjU1LCAyNTUsIDI1NSwgMjU1IAorfTsgCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS91bHRyYWNhbS5jIGIvZHJpdmVycy91c2IvbWVkaWEvdWx0cmFjYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWZmNzU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvdWx0cmFjYW0uYwpAQCAtMCwwICsxLDY3OSBAQAorLyoKKyAqIFVTQiBOQiBDYW1lcmEgZHJpdmVyCisgKgorICogSElTVE9SWToKKyAqIDI1LURlYy0yMDAyIERtaXRyaSAgICAgIFJlbW92ZWQgbGlnaHRpbmcsIHNoYXJwbmVzcyBwYXJhbWV0ZXJzLCBtZXRob2RzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgInVzYnZpZGVvLmgiCisKKyNkZWZpbmUJVUxUUkFDQU1fVkVORE9SX0lECTB4MDQ2MQorI2RlZmluZQlVTFRSQUNBTV9QUk9EVUNUX0lECTB4MDgxMworCisjZGVmaW5lIE1BWF9DQU1FUkFTCQk0CS8qIEhvdyBtYW55IGRldmljZXMgd2UgYWxsb3cgdG8gY29ubmVjdCAqLworCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgbGl2ZXMgaW4gdXZkX3QtPnVzZXIgZmllbGQuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgaW5pdGlhbGl6ZWQ7CS8qIEhhZCB3ZSBhbHJlYWR5IHNlbnQgaW5pdCBzZXF1ZW5jZT8gKi8KKwlpbnQgY2FtZXJhX21vZGVsOwkvKiBXaGF0IHR5cGUgb2YgSUJNIGNhbWVyYSB3ZSBnb3Q/ICovCisgICAgICAgIGludCBoYXNfaGRyOworfSB1bHRyYWNhbV90OworI2RlZmluZQlVTFRSQUNBTV9UKHV2ZCkJKCh1bHRyYWNhbV90ICopKCh1dmQpLT51c2VyX2RhdGEpKQorCitzdGF0aWMgc3RydWN0IHVzYnZpZGVvICpjYW1zID0gTlVMTDsKKworc3RhdGljIGludCBkZWJ1ZyA9IDA7CisKK3N0YXRpYyBpbnQgZmxhZ3MgPSAwOyAvKiBGTEFHU19ESVNQTEFZX0hJTlRTIHwgRkxBR1NfT1ZFUkxBWV9TVEFUUzsgKi8KKworc3RhdGljIGNvbnN0IGludCBtaW5fY2FudmFzV2lkdGggID0gODsKK3N0YXRpYyBjb25zdCBpbnQgbWluX2NhbnZhc0hlaWdodCA9IDQ7CisKKyNkZWZpbmUgRlJBTUVSQVRFX01JTgkwCisjZGVmaW5lIEZSQU1FUkFURV9NQVgJNgorc3RhdGljIGludCBmcmFtZXJhdGUgPSAtMTsKKworLyoKKyAqIEhlcmUgd2UgZGVmaW5lIHNldmVyYWwgaW5pdGlhbGl6YXRpb24gdmFyaWFibGVzLiBUaGV5IG1heQorICogYmUgdXNlZCB0byBhdXRvbWF0aWNhbGx5IHNldCBjb2xvciwgaHVlLCBicmlnaHRuZXNzIGFuZAorICogY29udHJhc3QgdG8gZGVzaXJlZCB2YWx1ZXMuIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBpbgorICogY2FzZSBvZiB3ZWJjYW1zICh3aGljaCBoYXZlIG5vIGNvbnRyb2xzIGFuZCBubyBvbi1zY3JlZW4KKyAqIG91dHB1dCkgYW5kIGFsc28gd2hlbiBhIGNsaWVudCBWNEwgc29mdHdhcmUgaXMgdXNlZCB0aGF0CisgKiBkb2VzIG5vdCBoYXZlIHNvbWUgb2YgdGhvc2UgY29udHJvbHMuIEluIGFueSBjYXNlIGl0J3MKKyAqIGdvb2QgdG8gaGF2ZSBzdGFydHVwIHZhbHVlcyBhcyBvcHRpb25zLgorICoKKyAqIFRoZXNlIHZhbHVlcyBhcmUgYWxsIGluIFswLi4yNTVdIHJhbmdlLiBUaGlzIHNpbXBsaWZpZXMKKyAqIG9wZXJhdGlvbi4gTm90ZSB0aGF0IGFjdHVhbCB2YWx1ZXMgb2YgVjRMIHZhcmlhYmxlcyBtYXkKKyAqIGJlIHNjYWxlZCB1cCAoYXMgbXVjaCBhcyA8PCA4KS4gVXNlciBjYW4gc2VlIHRoYXQgb25seQorICogb24gb3ZlcmxheSBvdXRwdXQsIGhvd2V2ZXIsIG9yIHRocm91Z2ggYSBWNEwgY2xpZW50LgorICovCitzdGF0aWMgaW50IGluaXRfYnJpZ2h0bmVzcyA9IDEyODsKK3N0YXRpYyBpbnQgaW5pdF9jb250cmFzdCA9IDE5MjsKK3N0YXRpYyBpbnQgaW5pdF9jb2xvciA9IDEyODsKK3N0YXRpYyBpbnQgaW5pdF9odWUgPSAxMjg7CitzdGF0aWMgaW50IGh1ZV9jb3JyZWN0aW9uID0gMTI4OworCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsOiAwLTkgKGRlZmF1bHQ9MCkiKTsKK21vZHVsZV9wYXJhbShmbGFncywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZmxhZ3MsCisJCSJCaXRmaWVsZDogMD1WSURJT0NTWU5DLCAiCisJCSIxPUIvVywgIgorCQkiMj1zaG93IGhpbnRzLCAiCisJCSIzPXNob3cgc3RhdHMsICIKKwkJIjQ9dGVzdCBwYXR0ZXJuLCAiCisJCSI1PXNlcGFyYXRlIGZyYW1lcywgIgorCQkiNj1jbGVhbiBmcmFtZXMiKTsKK21vZHVsZV9wYXJhbShmcmFtZXJhdGUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGZyYW1lcmF0ZSwgIkZyYW1lcmF0ZSBzZXR0aW5nOiAwPXNsb3dlc3QsIDY9ZmFzdGVzdCAoZGVmYXVsdD0yKSIpOworCittb2R1bGVfcGFyYW0oaW5pdF9icmlnaHRuZXNzLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbml0X2JyaWdodG5lc3MsICJCcmlnaHRuZXNzIHByZWNvbmZpZ3VyYXRpb246IDAtMjU1IChkZWZhdWx0PTEyOCkiKTsKK21vZHVsZV9wYXJhbShpbml0X2NvbnRyYXN0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbml0X2NvbnRyYXN0LCAiQ29udHJhc3QgcHJlY29uZmlndXJhdGlvbjogMC0yNTUgKGRlZmF1bHQ9MTkyKSIpOworbW9kdWxlX3BhcmFtKGluaXRfY29sb3IsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGluaXRfY29sb3IsICJDb2xvciBwcmVjb25maWd1cmF0aW9uOiAwLTI1NSAoZGVmYXVsdD0xMjgpIik7Cittb2R1bGVfcGFyYW0oaW5pdF9odWUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGluaXRfaHVlLCAiSHVlIHByZWNvbmZpZ3VyYXRpb246IDAtMjU1IChkZWZhdWx0PTEyOCkiKTsKK21vZHVsZV9wYXJhbShodWVfY29ycmVjdGlvbiwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaHVlX2NvcnJlY3Rpb24sICJZVVYgY29sb3JzcGFjZSByZWd1bGF0aW9uOiAwLTI1NSAoZGVmYXVsdD0xMjgpIik7CisKKy8qCisgKiB1bHRyYWNhbV9Qcm9jZXNzSXNvY0RhdGEoKQorICoKKyAqIEdlbmVyaWMgcm91dGluZSB0byBwYXJzZSB0aGUgcmluZyBxdWV1ZSBkYXRhLiBJdCBlbXBsb3lzIGVpdGhlcgorICogdWx0cmFjYW1fZmluZF9oZWFkZXIoKSBvciB1bHRyYWNhbV9wYXJzZV9saW5lcygpIHRvIGRvIG1vc3QKKyAqIG9mIHdvcmsuCisgKgorICogMDItTm92LTIwMDAgRmlyc3QgKG1vc3RseSBkdW1teSkgdmVyc2lvbi4KKyAqIDA2LU5vdi0yMDAwIFJld3JvdGUgdG8gZHVtcCBhbGwgZGF0YSBpbnRvIGZyYW1lLgorICovCitzdGF0aWMgdm9pZCB1bHRyYWNhbV9Qcm9jZXNzSXNvY0RhdGEoc3RydWN0IHV2ZCAqdXZkLCBzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lKQoreworCWludCBuOworCisJYXNzZXJ0KHV2ZCAhPSBOVUxMKTsKKwlhc3NlcnQoZnJhbWUgIT0gTlVMTCk7CisKKwkvKiBUcnkgdG8gbW92ZSBkYXRhIGZyb20gcXVldWUgaW50byBmcmFtZSBidWZmZXIgKi8KKwluID0gUmluZ1F1ZXVlX0dldExlbmd0aCgmdXZkLT5kcCk7CisJaWYgKG4gPiAwKSB7CisJCWludCBtOworCQkvKiBTZWUgaG93IG11Y2ggc3BhcmUgd2UgaGF2ZSBsZWZ0ICovCisJCW0gPSB1dmQtPm1heF9mcmFtZV9zaXplIC0gZnJhbWUtPnNlcVJlYWRfTGVuZ3RoOworCQlpZiAobiA+IG0pCisJCQluID0gbTsKKwkJLyogTm93IG1vdmUgdGhhdCBtdWNoIGRhdGEgaW50byBmcmFtZSBidWZmZXIgKi8KKwkJUmluZ1F1ZXVlX0RlcXVldWUoCisJCQkmdXZkLT5kcCwKKwkJCWZyYW1lLT5kYXRhICsgZnJhbWUtPnNlcVJlYWRfTGVuZ3RoLAorCQkJbSk7CisJCWZyYW1lLT5zZXFSZWFkX0xlbmd0aCArPSBtOworCX0KKwkvKiBTZWUgaWYgd2UgZmlsbGVkIHRoZSBmcmFtZSAqLworCWlmIChmcmFtZS0+c2VxUmVhZF9MZW5ndGggPj0gdXZkLT5tYXhfZnJhbWVfc2l6ZSkgeworCQlmcmFtZS0+ZnJhbWVTdGF0ZSA9IEZyYW1lU3RhdGVfRG9uZTsKKwkJdXZkLT5jdXJmcmFtZSA9IC0xOworCQl1dmQtPnN0YXRzLmZyYW1lX251bSsrOworCX0KK30KKworLyoKKyAqIHVsdHJhY2FtX3ZlaW8oKQorICoKKyAqIEhpc3Rvcnk6CisgKiAxLzI3LzAwICBBZGRlZCBjaGVjayBmb3IgZGV2ID09IE5VTEw7IHRoaXMgaGFwcGVucyBpZiBjYW1lcmEgaXMgdW5wbHVnZ2VkLgorICovCitzdGF0aWMgaW50IHVsdHJhY2FtX3ZlaW8oCisJc3RydWN0IHV2ZCAqdXZkLAorCXVuc2lnbmVkIGNoYXIgcmVxLAorCXVuc2lnbmVkIHNob3J0IHZhbHVlLAorCXVuc2lnbmVkIHNob3J0IGluZGV4LAorCWludCBpc19vdXQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgcHJvY1tdID0gInVsdHJhY2FtX3ZlaW8iOworCXVuc2lnbmVkIGNoYXIgY3BbOF0gLyogPSB7IDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYgfSAqLzsKKwlpbnQgaTsKKworCWlmICghQ0FNRVJBX0lTX09QRVJBVElPTkFMKHV2ZCkpCisJCXJldHVybiAwOworCisJaWYgKCFpc19vdXQpIHsKKwkJaSA9IHVzYl9jb250cm9sX21zZygKKwkJCXV2ZC0+ZGV2LAorCQkJdXNiX3JjdmN0cmxwaXBlKHV2ZC0+ZGV2LCAwKSwKKwkJCXJlcSwKKwkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJdmFsdWUsCisJCQlpbmRleCwKKwkJCWNwLAorCQkJc2l6ZW9mKGNwKSwKKwkJCTEwMDApOworI2lmIDEKKwkJaW5mbygiVVNCID0+ICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICIKKwkJICAgICAgICIocmVxPSQlMDJ4IHZhbD0kJTA0eCBpbmQ9JCUwNHgpIiwKKwkJICAgICAgIGNwWzBdLGNwWzFdLGNwWzJdLGNwWzNdLGNwWzRdLGNwWzVdLGNwWzZdLGNwWzddLAorCQkgICAgICAgcmVxLCB2YWx1ZSwgaW5kZXgpOworI2VuZGlmCisJfSBlbHNlIHsKKwkJaSA9IHVzYl9jb250cm9sX21zZygKKwkJCXV2ZC0+ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKHV2ZC0+ZGV2LCAwKSwKKwkJCXJlcSwKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCXZhbHVlLAorCQkJaW5kZXgsCisJCQlOVUxMLAorCQkJMCwKKwkJCTEwMDApOworCX0KKwlpZiAoaSA8IDApIHsKKwkJZXJyKCIlczogRVJST1I9JWQuIENhbWVyYSBzdG9wcGVkOyBSZWNvbm5lY3Qgb3IgcmVsb2FkIGRyaXZlci4iLAorCQkgICAgcHJvYywgaSk7CisJCXV2ZC0+bGFzdF9lcnJvciA9IGk7CisJfQorCXJldHVybiBpOworfQorCisvKgorICogdWx0cmFjYW1fY2FsY3VsYXRlX2ZwcygpCisgKi8KK3N0YXRpYyBpbnQgdWx0cmFjYW1fY2FsY3VsYXRlX2ZwcyhzdHJ1Y3QgdXZkICp1dmQpCit7CisJcmV0dXJuIDMgKyBmcmFtZXJhdGUqNCArIGZyYW1lcmF0ZS8yOworfQorCisvKgorICogdWx0cmFjYW1fYWRqdXN0X2NvbnRyYXN0KCkKKyAqLworc3RhdGljIHZvaWQgdWx0cmFjYW1fYWRqdXN0X2NvbnRyYXN0KHN0cnVjdCB1dmQgKnV2ZCkKK3sKK30KKworLyoKKyAqIHVsdHJhY2FtX3NldF9icmlnaHRuZXNzKCkKKyAqCisgKiBUaGlzIHByb2NlZHVyZSBjaGFuZ2VzIGJyaWdodG5lc3Mgb2YgdGhlIHBpY3R1cmUuCisgKi8KK3N0YXRpYyB2b2lkIHVsdHJhY2FtX3NldF9icmlnaHRuZXNzKHN0cnVjdCB1dmQgKnV2ZCkKK3sKK30KKworc3RhdGljIHZvaWQgdWx0cmFjYW1fc2V0X2h1ZShzdHJ1Y3QgdXZkICp1dmQpCit7Cit9CisKKy8qCisgKiB1bHRyYWNhbV9hZGp1c3RfcGljdHVyZSgpCisgKgorICogVGhpcyBwcm9jZWR1cmUgZ2V0cyBjYWxsZWQgZnJvbSBWNEwgaW50ZXJmYWNlIHRvIHVwZGF0ZSBwaWN0dXJlIHNldHRpbmdzLgorICogSGVyZSB3ZSBjaGFuZ2UgYnJpZ2h0bmVzcyBhbmQgY29udHJhc3QuCisgKi8KK3N0YXRpYyB2b2lkIHVsdHJhY2FtX2FkanVzdF9waWN0dXJlKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwl1bHRyYWNhbV9hZGp1c3RfY29udHJhc3QodXZkKTsKKwl1bHRyYWNhbV9zZXRfYnJpZ2h0bmVzcyh1dmQpOworCXVsdHJhY2FtX3NldF9odWUodXZkKTsKK30KKworLyoKKyAqIHVsdHJhY2FtX3ZpZGVvX3N0b3AoKQorICoKKyAqIFRoaXMgY29kZSB0ZWxscyBjYW1lcmEgdG8gc3RvcCBzdHJlYW1pbmcuIFRoZSBpbnRlcmZhY2UgcmVtYWlucworICogY29uZmlndXJlZCBhbmQgYmFuZHdpZHRoIC0gY2xhaW1lZC4KKyAqLworc3RhdGljIHZvaWQgdWx0cmFjYW1fdmlkZW9fc3RvcChzdHJ1Y3QgdXZkICp1dmQpCit7Cit9CisKKy8qCisgKiB1bHRyYWNhbV9yZWluaXRfaXNvKCkKKyAqCisgKiBUaGlzIHByb2NlZHVyZSBzZW5kcyBjb3VwbGUgb2YgY29tbWFuZHMgdG8gdGhlIGNhbWVyYSBhbmQgdGhlbgorICogcmVzZXRzIHRoZSB2aWRlbyBwaXBlLiBUaGlzIHNlcXVlbmNlIHdhcyBvYnNlcnZlZCB0byByZWluaXQgdGhlCisgKiBjYW1lcmEgb3IsIGF0IGxlYXN0LCB0byBpbml0aWF0ZSBJU08gZGF0YSBzdHJlYW0uCisgKi8KK3N0YXRpYyB2b2lkIHVsdHJhY2FtX3JlaW5pdF9pc28oc3RydWN0IHV2ZCAqdXZkLCBpbnQgZG9fc3RvcCkKK3sKK30KKworc3RhdGljIHZvaWQgdWx0cmFjYW1fdmlkZW9fc3RhcnQoc3RydWN0IHV2ZCAqdXZkKQoreworCXVsdHJhY2FtX3JlaW5pdF9pc28odXZkLCAwKTsKK30KKworc3RhdGljIGludCB1bHRyYWNhbV9yZXNldFBpcGUoc3RydWN0IHV2ZCAqdXZkKQoreworCXVzYl9jbGVhcl9oYWx0KHV2ZC0+ZGV2LCB1dmQtPnZpZGVvX2VuZHApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVsdHJhY2FtX2FsdGVybmF0ZVNldHRpbmcoc3RydWN0IHV2ZCAqdXZkLCBpbnQgc2V0dGluZykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBwcm9jW10gPSAidWx0cmFjYW1fYWx0ZXJuYXRlU2V0dGluZyI7CisJaW50IGk7CisJaSA9IHVzYl9zZXRfaW50ZXJmYWNlKHV2ZC0+ZGV2LCB1dmQtPmlmYWNlLCBzZXR0aW5nKTsKKwlpZiAoaSA8IDApIHsKKwkJZXJyKCIlczogdXNiX3NldF9pbnRlcmZhY2UgZXJyb3IiLCBwcm9jKTsKKwkJdXZkLT5sYXN0X2Vycm9yID0gaTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXR1cm4gbmVnYXRpdmUgY29kZSBvbiBmYWlsdXJlLCAwIG9uIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBpbnQgdWx0cmFjYW1fc2V0dXBfb25fb3BlbihzdHJ1Y3QgdXZkICp1dmQpCit7CisJaW50IHNldHVwX29rID0gMDsgLyogU3VjY2VzcyBieSBkZWZhdWx0ICovCisJLyogU2VuZCBpbml0IHNlcXVlbmNlIG9ubHkgb25jZSwgaXQncyBsYXJnZSEgKi8KKwlpZiAoIVVMVFJBQ0FNX1QodXZkKS0+aW5pdGlhbGl6ZWQpIHsKKwkJdWx0cmFjYW1fYWx0ZXJuYXRlU2V0dGluZyh1dmQsIDB4MDQpOworCQl1bHRyYWNhbV9hbHRlcm5hdGVTZXR0aW5nKHV2ZCwgMHgwMCk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAyLCAweDAwMDQsIDB4MDAwYiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAyLCAweDAwMDEsIDB4MDAwNSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAyLCAweDgwMDAsIDB4MDAwMCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDAwMCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwYjAsIDB4MDAwMSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDAwMiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMGMsIDB4MDAwMywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMGIsIDB4MDAwNCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDAwNSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDAwNiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwNzksIDB4MDAwNywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwM2IsIDB4MDAwOCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDIsIDB4MDAwZiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDEsIDB4MDAxMCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDAxMSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBiZiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDEsIDB4MDBjMCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMTAsIDB4MDBjYiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwYTQsIDB4MDAwMSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMTAsIDB4MDAwMiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwNjYsIDB4MDAwNywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMGIsIDB4MDAwOCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMzQsIDB4MDAwOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMDAsIDB4MDAwYSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMmUsIDB4MDAwYiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwZDYsIDB4MDAwYywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwZmMsIDB4MDAwZCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwZjEsIDB4MDAwZSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwZGEsIDB4MDAwZiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMzYsIDB4MDAxMCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMGIsIDB4MDAxMSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMDEsIDB4MDAxMiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMDAsIDB4MDAxMywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMDAsIDB4MDAxNCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwODcsIDB4MDA1MSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwNDAsIDB4MDA1MiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwNTgsIDB4MDA1MywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwNDAsIDB4MDA1NCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMDAsIDB4MDA0MCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMTAsIDB4MDA0MSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMjAsIDB4MDA0MiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMzAsIDB4MDA0MywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwNDAsIDB4MDA0NCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwNTAsIDB4MDA0NSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwNjAsIDB4MDA0NiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwNzAsIDB4MDA0NywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwODAsIDB4MDA0OCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwOTAsIDB4MDA0OSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwYTAsIDB4MDA0YSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwYjAsIDB4MDA0YiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwYzAsIDB4MDA0YywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwZDAsIDB4MDA0ZCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwZTAsIDB4MDA0ZSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwZjAsIDB4MDA0ZiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwZmYsIDB4MDA1MCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMDAsIDB4MDA1NiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwODAsIDB4MDBjMSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjMiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjYSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwODAsIDB4MDBjMSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDQsIDB4MDBjMiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjYSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDIsIDB4MDBjMSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMjAsIDB4MDBjMiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjYSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjMywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjNCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjNSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjNiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjNywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjMywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjNCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjNSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjNiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjNywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwNDAsIDB4MDBjMSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMTcsIDB4MDBjMiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjYSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjMywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjNCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjNSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjNiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjNywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjMywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjNCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjNSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjNiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjNywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwYzAsIDB4MDBjMSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjMiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjYSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAyLCAweGMwNDAsIDB4MDAwMSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMDAsIDB4MDAwOCwgMCk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMDAsIDB4MDAwOSwgMCk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMDAsIDB4MDAwYSwgMCk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMDAsIDB4MDAwYiwgMCk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMDAsIDB4MDAwYywgMCk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMDAsIDB4MDAwZCwgMCk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMDAsIDB4MDAwZSwgMCk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMDAsIDB4MDAwZiwgMCk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMDAsIDB4MDAxMCwgMCk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMGIsIDB4MDAwOCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMzQsIDB4MDAwOSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMDAsIDB4MDAwYSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMmUsIDB4MDAwYiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwZDYsIDB4MDAwYywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwZmMsIDB4MDAwZCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwZjEsIDB4MDAwZSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwZGEsIDB4MDAwZiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMzYsIDB4MDAxMCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMDAsIDB4MDAwMSwgMCk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwNjQsIDB4MDAwMSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwNTksIDB4MDA1MSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwM2YsIDB4MDA1MiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwOTQsIDB4MDA1MywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwZmYsIDB4MDAxMSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwMDMsIDB4MDAxMiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAxLCAweDAwZjcsIDB4MDAxMywgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDksIDB4MDAxMSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDAwMSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDAwMCwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMjAsIDB4MDBjMSwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMTAsIDB4MDBjMiwgMSk7CisJCXVsdHJhY2FtX3ZlaW8odXZkLCAweDAwLCAweDAwMDAsIDB4MDBjYSwgMSk7CisJCXVsdHJhY2FtX2FsdGVybmF0ZVNldHRpbmcodXZkLCAweDA0KTsKKwkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDIsIDB4MDAwMCwgMHgwMDAxLCAxKTsKKwkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDIsIDB4MDAwMCwgMHgwMDAxLCAxKTsKKwkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDIsIDB4MDAwMCwgMHgwMDA2LCAxKTsKKwkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDIsIDB4OTAwMCwgMHgwMDA3LCAxKTsKKwkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDIsIDB4MDA0MiwgMHgwMDAxLCAxKTsKKwkJdWx0cmFjYW1fdmVpbyh1dmQsIDB4MDIsIDB4MDAwMCwgMHgwMDBiLCAwKTsKKwkJdWx0cmFjYW1fcmVzZXRQaXBlKHV2ZCk7CisJCVVMVFJBQ0FNX1QodXZkKS0+aW5pdGlhbGl6ZWQgPSAoc2V0dXBfb2sgIT0gMCk7CisJfQorCXJldHVybiBzZXR1cF9vazsKK30KKworc3RhdGljIHZvaWQgdWx0cmFjYW1fY29uZmlndXJlX3ZpZGVvKHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpZiAodXZkID09IE5VTEwpCisJCXJldHVybjsKKworCVJFU1RSSUNUX1RPX1JBTkdFKGluaXRfYnJpZ2h0bmVzcywgMCwgMjU1KTsKKwlSRVNUUklDVF9UT19SQU5HRShpbml0X2NvbnRyYXN0LCAwLCAyNTUpOworCVJFU1RSSUNUX1RPX1JBTkdFKGluaXRfY29sb3IsIDAsIDI1NSk7CisJUkVTVFJJQ1RfVE9fUkFOR0UoaW5pdF9odWUsIDAsIDI1NSk7CisJUkVTVFJJQ1RfVE9fUkFOR0UoaHVlX2NvcnJlY3Rpb24sIDAsIDI1NSk7CisKKwltZW1zZXQoJnV2ZC0+dnBpYywgMCwgc2l6ZW9mKHV2ZC0+dnBpYykpOworCW1lbXNldCgmdXZkLT52cGljX29sZCwgMHg1NSwgc2l6ZW9mKHV2ZC0+dnBpY19vbGQpKTsKKworCXV2ZC0+dnBpYy5jb2xvdXIgPSBpbml0X2NvbG9yIDw8IDg7CisJdXZkLT52cGljLmh1ZSA9IGluaXRfaHVlIDw8IDg7CisJdXZkLT52cGljLmJyaWdodG5lc3MgPSBpbml0X2JyaWdodG5lc3MgPDwgODsKKwl1dmQtPnZwaWMuY29udHJhc3QgPSBpbml0X2NvbnRyYXN0IDw8IDg7CisJdXZkLT52cGljLndoaXRlbmVzcyA9IDEwNSA8PCA4OyAvKiBUaGlzIG9uZSBpc24ndCB1c2VkICovCisJdXZkLT52cGljLmRlcHRoID0gMjQ7CisJdXZkLT52cGljLnBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1JHQjI0OworCisJbWVtc2V0KCZ1dmQtPnZjYXAsIDAsIHNpemVvZih1dmQtPnZjYXApKTsKKwlzdHJjcHkodXZkLT52Y2FwLm5hbWUsICJJQk0gVWx0cmEgQ2FtZXJhIik7CisJdXZkLT52Y2FwLnR5cGUgPSBWSURfVFlQRV9DQVBUVVJFOworCXV2ZC0+dmNhcC5jaGFubmVscyA9IDE7CisJdXZkLT52Y2FwLmF1ZGlvcyA9IDA7CisJdXZkLT52Y2FwLm1heHdpZHRoID0gVklERU9TSVpFX1godXZkLT5jYW52YXMpOworCXV2ZC0+dmNhcC5tYXhoZWlnaHQgPSBWSURFT1NJWkVfWSh1dmQtPmNhbnZhcyk7CisJdXZkLT52Y2FwLm1pbndpZHRoID0gbWluX2NhbnZhc1dpZHRoOworCXV2ZC0+dmNhcC5taW5oZWlnaHQgPSBtaW5fY2FudmFzSGVpZ2h0OworCisJbWVtc2V0KCZ1dmQtPnZjaGFuLCAwLCBzaXplb2YodXZkLT52Y2hhbikpOworCXV2ZC0+dmNoYW4uZmxhZ3MgPSAwOworCXV2ZC0+dmNoYW4udHVuZXJzID0gMDsKKwl1dmQtPnZjaGFuLmNoYW5uZWwgPSAwOworCXV2ZC0+dmNoYW4udHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOworCXN0cmNweSh1dmQtPnZjaGFuLm5hbWUsICJDYW1lcmEiKTsKK30KKworLyoKKyAqIHVsdHJhY2FtX3Byb2JlKCkKKyAqCisgKiBUaGlzIHByb2NlZHVyZSBxdWVyaWVzIGRldmljZSBkZXNjcmlwdG9yIGFuZCBhY2NlcHRzIHRoZSBpbnRlcmZhY2UKKyAqIGlmIGl0IGxvb2tzIGxpa2Ugb3VyIGNhbWVyYS4KKyAqCisgKiBIaXN0b3J5OgorICogMTItTm92LTIwMDAgUmV3b3JrZWQgdG8gY29tcGx5IHdpdGggbmV3IHByb2JlKCkgc2lnbmF0dXJlLgorICogMjMtSmFuLTIwMDEgQWRkZWQgY29tcGF0aWJpbGl0eSB3aXRoIDIuMi54IGtlcm5lbHMuCisgKi8KK3N0YXRpYyBpbnQgdWx0cmFjYW1fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpkZXZpZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgdXZkICp1dmQgPSBOVUxMOworCWludCBpeCwgaSwgbmFzOworCWludCBhY3RJbnRlcmZhY2U9LTEsIGluYWN0SW50ZXJmYWNlPS0xLCBtYXhQUz0wOworCXVuc2lnbmVkIGNoYXIgdmlkZW9fZXAgPSAwOworCisJaWYgKGRlYnVnID49IDEpCisJCWluZm8oInVsdHJhY2FtX3Byb2JlKCVwKSIsIGludGYpOworCisJLyogV2UgZG9uJ3QgaGFuZGxlIG11bHRpLWNvbmZpZyBjYW1lcmFzICovCisJaWYgKGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpbmZvKCJJQk0gVWx0cmEgY2FtZXJhIGZvdW5kIChyZXYuIDB4JTA0eCkiLAorCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSk7CisKKwkvKiBWYWxpZGF0ZSBmb3VuZCBpbnRlcmZhY2U6IG11c3QgaGF2ZSBvbmUgSVNPIGVuZHBvaW50ICovCisJbmFzID0gaW50Zi0+bnVtX2FsdHNldHRpbmc7CisJaWYgKGRlYnVnID4gMCkKKwkJaW5mbygiTnVtYmVyIG9mIGFsdGVybmF0ZSBzZXR0aW5ncz0lZC4iLCBuYXMpOworCWlmIChuYXMgPCA4KSB7CisJCWVycigiVG9vIGZldyBhbHRlcm5hdGUgc2V0dGluZ3MgZm9yIHRoaXMgY2FtZXJhISIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJLyogVmFsaWRhdGUgYWxsIGFsdGVybmF0ZSBzZXR0aW5ncyAqLworCWZvciAoaXg9MDsgaXggPCBuYXM7IGl4KyspIHsKKwkJY29uc3Qgc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOworCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCisJCWludGVyZmFjZSA9ICZpbnRmLT5hbHRzZXR0aW5nW2l4XTsKKwkJaSA9IGludGVyZmFjZS0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZzsKKwkJaWYgKGludGVyZmFjZS0+ZGVzYy5iTnVtRW5kcG9pbnRzICE9IDEpIHsKKwkJCWVycigiSW50ZXJmYWNlICVkLiBoYXMgJXUuIGVuZHBvaW50cyEiLAorCQkJICAgIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQkJICAgICh1bnNpZ25lZCkoaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHMpKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbMF0uZGVzYzsKKwkJaWYgKHZpZGVvX2VwID09IDApCisJCQl2aWRlb19lcCA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQllbHNlIGlmICh2aWRlb19lcCAhPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcykgeworCQkJZXJyKCJBbHRlcm5hdGUgc2V0dGluZ3MgaGF2ZSBkaWZmZXJlbnQgZW5kcG9pbnQgYWRkcmVzc2VzISIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJaWYgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMHgwMykgIT0gMHgwMSkgeworCQkJZXJyKCJJbnRlcmZhY2UgJWQuIGhhcyBub24tSVNPIGVuZHBvaW50ISIsCisJCQkgICAgaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApID09IDApIHsKKwkJCWVycigiSW50ZXJmYWNlICVkLiBoYXMgSVNPIE9VVCBlbmRwb2ludCEiLAorCQkJICAgIGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWlmIChsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpID09IDApIHsKKwkJCWlmIChpbmFjdEludGVyZmFjZSA8IDApCisJCQkJaW5hY3RJbnRlcmZhY2UgPSBpOworCQkJZWxzZSB7CisJCQkJZXJyKCJNb3JlIHRoYW4gb25lIGluYWN0aXZlIGFsdC4gc2V0dGluZyEiKTsKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChhY3RJbnRlcmZhY2UgPCAwKSB7CisJCQkJYWN0SW50ZXJmYWNlID0gaTsKKwkJCQltYXhQUyA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7CisJCQkJaWYgKGRlYnVnID4gMCkKKwkJCQkJaW5mbygiQWN0aXZlIHNldHRpbmc9JWQuIG1heFBTPSVkLiIsIGksIG1heFBTKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogR290IGFub3RoZXIgYWN0aXZlIGFsdC4gc2V0dGluZyAqLworCQkJCWlmIChtYXhQUyA8IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkpIHsKKwkJCQkJLyogVGhpcyBvbmUgaXMgYmV0dGVyISAqLworCQkJCQlhY3RJbnRlcmZhY2UgPSBpOworCQkJCQltYXhQUyA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7CisJCQkJCWlmIChkZWJ1ZyA+IDApIHsKKwkJCQkJCWluZm8oIkV2ZW4gYmV0dGVyIGN0aXZlIHNldHRpbmc9JWQuIG1heFBTPSVkLiIsCisJCQkJCQkgICAgIGksIG1heFBTKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlpZiAoKG1heFBTIDw9IDApIHx8IChhY3RJbnRlcmZhY2UgPCAwKSB8fCAoaW5hY3RJbnRlcmZhY2UgPCAwKSkgeworCQllcnIoIkZhaWxlZCB0byByZWNvZ25pemUgdGhlIGNhbWVyYSEiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJdXZkID0gdXNidmlkZW9fQWxsb2NhdGVEZXZpY2UoY2Ftcyk7CisJaWYgKHV2ZCAhPSBOVUxMKSB7CisJCS8qIEhlcmUgdXZkIGlzIGEgZnVsbHkgYWxsb2NhdGVkIHV2ZCBvYmplY3QgKi8KKwkJdXZkLT5mbGFncyA9IGZsYWdzOworCQl1dmQtPmRlYnVnID0gZGVidWc7CisJCXV2ZC0+ZGV2ID0gZGV2OworCQl1dmQtPmlmYWNlID0gaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCQl1dmQtPmlmYWNlQWx0SW5hY3RpdmUgPSBpbmFjdEludGVyZmFjZTsKKwkJdXZkLT5pZmFjZUFsdEFjdGl2ZSA9IGFjdEludGVyZmFjZTsKKwkJdXZkLT52aWRlb19lbmRwID0gdmlkZW9fZXA7CisJCXV2ZC0+aXNvX3BhY2tldF9sZW4gPSBtYXhQUzsKKwkJdXZkLT5wYWxldHRlQml0cyA9IDFMIDw8IFZJREVPX1BBTEVUVEVfUkdCMjQ7CisJCXV2ZC0+ZGVmYXVsdFBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1JHQjI0OworCQl1dmQtPmNhbnZhcyA9IFZJREVPU0laRSg2NDAsIDQ4MCk7CS8qIEZJWE1FICovCisJCXV2ZC0+dmlkZW9zaXplID0gdXZkLT5jYW52YXM7IC8qIHVsdHJhY2FtX3NpemVfdG9fdmlkZW9zaXplKHNpemUpOyovCisKKwkJLyogSW5pdGlhbGl6ZSBpYm1jYW0tc3BlY2lmaWMgZGF0YSAqLworCQlhc3NlcnQoVUxUUkFDQU1fVCh1dmQpICE9IE5VTEwpOworCQlVTFRSQUNBTV9UKHV2ZCktPmNhbWVyYV9tb2RlbCA9IDA7IC8qIE5vdCB1c2VkIHlldCAqLworCQlVTFRSQUNBTV9UKHV2ZCktPmluaXRpYWxpemVkID0gMDsKKworCQl1bHRyYWNhbV9jb25maWd1cmVfdmlkZW8odXZkKTsKKworCQlpID0gdXNidmlkZW9fUmVnaXN0ZXJWaWRlb0RldmljZSh1dmQpOworCQlpZiAoaSAhPSAwKSB7CisJCQllcnIoInVzYnZpZGVvX1JlZ2lzdGVyVmlkZW9EZXZpY2UoKSBmYWlsZWQuIik7CisJCQl1dmQgPSBOVUxMOworCQl9CisJfQorCisJaWYgKHV2ZCkgeworCQl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCB1dmQpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU87Cit9CisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFKFVMVFJBQ0FNX1ZFTkRPUl9JRCwgVUxUUkFDQU1fUFJPRFVDVF9JRCkgfSwKKwl7IH0gIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisvKgorICogdWx0cmFjYW1faW5pdCgpCisgKgorICogVGhpcyBjb2RlIGlzIHJ1biB0byBpbml0aWFsaXplIHRoZSBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHVsdHJhY2FtX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgdXNidmlkZW9fY2IgY2JUYmw7CisJbWVtc2V0KCZjYlRibCwgMCwgc2l6ZW9mKGNiVGJsKSk7CisJY2JUYmwucHJvYmUgPSB1bHRyYWNhbV9wcm9iZTsKKwljYlRibC5zZXR1cE9uT3BlbiA9IHVsdHJhY2FtX3NldHVwX29uX29wZW47CisJY2JUYmwudmlkZW9TdGFydCA9IHVsdHJhY2FtX3ZpZGVvX3N0YXJ0OworCWNiVGJsLnZpZGVvU3RvcCA9IHVsdHJhY2FtX3ZpZGVvX3N0b3A7CisJY2JUYmwucHJvY2Vzc0RhdGEgPSB1bHRyYWNhbV9Qcm9jZXNzSXNvY0RhdGE7CisJY2JUYmwucG9zdFByb2Nlc3MgPSB1c2J2aWRlb19EZWludGVybGFjZUZyYW1lOworCWNiVGJsLmFkanVzdFBpY3R1cmUgPSB1bHRyYWNhbV9hZGp1c3RfcGljdHVyZTsKKwljYlRibC5nZXRGUFMgPSB1bHRyYWNhbV9jYWxjdWxhdGVfZnBzOworCXJldHVybiB1c2J2aWRlb19yZWdpc3RlcigKKwkJJmNhbXMsCisJCU1BWF9DQU1FUkFTLAorCQlzaXplb2YodWx0cmFjYW1fdCksCisJCSJ1bHRyYWNhbSIsCisJCSZjYlRibCwKKwkJVEhJU19NT0RVTEUsCisJCWlkX3RhYmxlKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVsdHJhY2FtX2NsZWFudXAodm9pZCkKK3sKKwl1c2J2aWRlb19EZXJlZ2lzdGVyKCZjYW1zKTsKK30KKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX2luaXQodWx0cmFjYW1faW5pdCk7Cittb2R1bGVfZXhpdCh1bHRyYWNhbV9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3VzYnZpZGVvLmMgYi9kcml2ZXJzL3VzYi9tZWRpYS91c2J2aWRlby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ODQ4NGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS91c2J2aWRlby5jCkBAIC0wLDAgKzEsMjE5MiBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSAidXNidmlkZW8uaCIKKworI2lmIGRlZmluZWQoTUFQX05SKQorI2RlZmluZQl2aXJ0X3RvX3BhZ2UodikJTUFQX05SKHYpCS8qIEtlcm5lbHMgMi4yLnggKi8KKyNlbmRpZgorCitzdGF0aWMgaW50IHZpZGVvX25yID0gLTE7Cittb2R1bGVfcGFyYW0odmlkZW9fbnIsIGludCwgMCk7CisKKy8qCisgKiBMb2NhbCBwcm90b3R5cGVzLgorICovCitzdGF0aWMgdm9pZCB1c2J2aWRlb19EaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKK3N0YXRpYyB2b2lkIHVzYnZpZGVvX0NhbWVyYVJlbGVhc2Uoc3RydWN0IHV2ZCAqdXZkKTsKKworc3RhdGljIGludCB1c2J2aWRlb192NGxfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgaW50IHVzYnZpZGVvX3Y0bF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CitzdGF0aWMgaW50IHVzYnZpZGVvX3Y0bF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBzc2l6ZV90IHVzYnZpZGVvX3Y0bF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7CitzdGF0aWMgaW50IHVzYnZpZGVvX3Y0bF9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CisKK3N0YXRpYyBpbnQgdXNidmlkZW9fU3RhcnREYXRhUHVtcChzdHJ1Y3QgdXZkICp1dmQpOworc3RhdGljIHZvaWQgdXNidmlkZW9fU3RvcERhdGFQdW1wKHN0cnVjdCB1dmQgKnV2ZCk7CitzdGF0aWMgaW50IHVzYnZpZGVvX0dldEZyYW1lKHN0cnVjdCB1dmQgKnV2ZCwgaW50IGZyYW1lTnVtKTsKK3N0YXRpYyBpbnQgdXNidmlkZW9fTmV3RnJhbWUoc3RydWN0IHV2ZCAqdXZkLCBpbnQgZnJhbWVudW0pOworc3RhdGljIHZvaWQgdXNidmlkZW9fU29mdHdhcmVDb250cmFzdEFkanVzdG1lbnQoc3RydWN0IHV2ZCAqdXZkLAorCQkJCQkJc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkICp1c2J2aWRlb19ydm1hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdm9pZCAqbWVtOworCXVuc2lnbmVkIGxvbmcgYWRyOworCisJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CisJbWVtID0gdm1hbGxvY18zMihzaXplKTsKKwlpZiAoIW1lbSkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQobWVtLCAwLCBzaXplKTsgLyogQ2xlYXIgdGhlIHJhbSBvdXQsIG5vIGp1bmsgdG8gdGhlIHVzZXIgKi8KKwlhZHIgPSAodW5zaWduZWQgbG9uZykgbWVtOworCXdoaWxlIChzaXplID4gMCkgeworCQlTZXRQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CisJCWFkciArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKworCXJldHVybiBtZW07Cit9CisKK3N0YXRpYyB2b2lkIHVzYnZpZGVvX3J2ZnJlZSh2b2lkICptZW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkcjsKKworCWlmICghbWVtKQorCQlyZXR1cm47CisKKwlhZHIgPSAodW5zaWduZWQgbG9uZykgbWVtOworCXdoaWxlICgobG9uZykgc2l6ZSA+IDApIHsKKwkJQ2xlYXJQYWdlUmVzZXJ2ZWQodm1hbGxvY190b19wYWdlKCh2b2lkICopYWRyKSk7CisJCWFkciArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKwl2ZnJlZShtZW0pOworfQorCitzdGF0aWMgdm9pZCBSaW5nUXVldWVfSW5pdGlhbGl6ZShzdHJ1Y3QgUmluZ1F1ZXVlICpycSkKK3sKKwlhc3NlcnQocnEgIT0gTlVMTCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcnEtPndxaCk7Cit9CisKK3N0YXRpYyB2b2lkIFJpbmdRdWV1ZV9BbGxvY2F0ZShzdHJ1Y3QgUmluZ1F1ZXVlICpycSwgaW50IHJxTGVuKQoreworCS8qIE1ha2Ugc3VyZSB0aGUgcmVxdWVzdGVkIHNpemUgaXMgYSBwb3dlciBvZiAyIGFuZAorCSAgIHJvdW5kIHVwIGlmIG5lY2Vzc2FyeS4gVGhpcyBhbGxvd3MgaW5kZXggd3JhcHBpbmcKKwkgICB1c2luZyBtYXNrcyByYXRoZXIgdGhhbiBtb2R1bG8gKi8KKworCWludCBpID0gMTsKKwlhc3NlcnQocnEgIT0gTlVMTCk7CisJYXNzZXJ0KHJxTGVuID4gMCk7CisKKwl3aGlsZShycUxlbiA+PiBpKQorCQlpKys7CisJaWYocnFMZW4gIT0gMSA8PCAoaS0xKSkKKwkJcnFMZW4gPSAxIDw8IGk7CisKKwlycS0+bGVuZ3RoID0gcnFMZW47CisJcnEtPnJpID0gcnEtPndpID0gMDsKKwlycS0+cXVldWUgPSB1c2J2aWRlb19ydm1hbGxvYyhycS0+bGVuZ3RoKTsKKwlhc3NlcnQocnEtPnF1ZXVlICE9IE5VTEwpOworfQorCitzdGF0aWMgaW50IFJpbmdRdWV1ZV9Jc0FsbG9jYXRlZChjb25zdCBzdHJ1Y3QgUmluZ1F1ZXVlICpycSkKK3sKKwlpZiAocnEgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIChycS0+cXVldWUgIT0gTlVMTCkgJiYgKHJxLT5sZW5ndGggPiAwKTsKK30KKworc3RhdGljIHZvaWQgUmluZ1F1ZXVlX0ZyZWUoc3RydWN0IFJpbmdRdWV1ZSAqcnEpCit7CisJYXNzZXJ0KHJxICE9IE5VTEwpOworCWlmIChSaW5nUXVldWVfSXNBbGxvY2F0ZWQocnEpKSB7CisJCXVzYnZpZGVvX3J2ZnJlZShycS0+cXVldWUsIHJxLT5sZW5ndGgpOworCQlycS0+cXVldWUgPSBOVUxMOworCQlycS0+bGVuZ3RoID0gMDsKKwl9Cit9CisKK2ludCBSaW5nUXVldWVfRGVxdWV1ZShzdHJ1Y3QgUmluZ1F1ZXVlICpycSwgdW5zaWduZWQgY2hhciAqZHN0LCBpbnQgbGVuKQoreworCWludCBycWwsIHRvcmVhZDsKKworCWFzc2VydChycSAhPSBOVUxMKTsKKwlhc3NlcnQoZHN0ICE9IE5VTEwpOworCisJcnFsID0gUmluZ1F1ZXVlX0dldExlbmd0aChycSk7CisJaWYoIXJxbCkKKwkJcmV0dXJuIDA7CisKKwkvKiBDbGlwIHJlcXVlc3RlZCBsZW5ndGggdG8gYXZhaWxhYmxlIGRhdGEgKi8KKwlpZihsZW4gPiBycWwpCisJCWxlbiA9IHJxbDsKKworCXRvcmVhZCA9IGxlbjsKKwlpZihycS0+cmkgPiBycS0+d2kpIHsKKwkJLyogUmVhZCBkYXRhIGZyb20gdGFpbCAqLworCQlpbnQgcmVhZCA9ICh0b3JlYWQgPCAocnEtPmxlbmd0aCAtIHJxLT5yaSkpID8gdG9yZWFkIDogcnEtPmxlbmd0aCAtIHJxLT5yaTsKKwkJbWVtY3B5KGRzdCwgcnEtPnF1ZXVlICsgcnEtPnJpLCByZWFkKTsKKwkJdG9yZWFkIC09IHJlYWQ7CisJCWRzdCArPSByZWFkOworCQlycS0+cmkgPSAocnEtPnJpICsgcmVhZCkgJiAocnEtPmxlbmd0aC0xKTsKKwl9CisJaWYodG9yZWFkKSB7CisJCS8qIFJlYWQgZGF0YSBmcm9tIGhlYWQgKi8KKwkJbWVtY3B5KGRzdCwgcnEtPnF1ZXVlICsgcnEtPnJpLCB0b3JlYWQpOworCQlycS0+cmkgPSAocnEtPnJpICsgdG9yZWFkKSAmIChycS0+bGVuZ3RoLTEpOworCX0KKwlyZXR1cm4gbGVuOworfQorCitFWFBPUlRfU1lNQk9MKFJpbmdRdWV1ZV9EZXF1ZXVlKTsKKworaW50IFJpbmdRdWV1ZV9FbnF1ZXVlKHN0cnVjdCBSaW5nUXVldWUgKnJxLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjZGF0YSwgaW50IG4pCit7CisJaW50IGVucXVldWVkID0gMDsKKworCWFzc2VydChycSAhPSBOVUxMKTsKKwlhc3NlcnQoY2RhdGEgIT0gTlVMTCk7CisJYXNzZXJ0KHJxLT5sZW5ndGggPiAwKTsKKwl3aGlsZSAobiA+IDApIHsKKwkJaW50IG0sIHFfYXZhaWw7CisKKwkJLyogQ2FsY3VsYXRlIHRoZSBsYXJnZXN0IGNodW5rIHRoYXQgZml0cyB0aGUgdGFpbCBvZiB0aGUgcmluZyAqLworCQlxX2F2YWlsID0gcnEtPmxlbmd0aCAtIHJxLT53aTsKKwkJaWYgKHFfYXZhaWwgPD0gMCkgeworCQkJcnEtPndpID0gMDsKKwkJCXFfYXZhaWwgPSBycS0+bGVuZ3RoOworCQl9CisJCW0gPSBuOworCQlhc3NlcnQocV9hdmFpbCA+IDApOworCQlpZiAobSA+IHFfYXZhaWwpCisJCQltID0gcV9hdmFpbDsKKworCQltZW1jcHkocnEtPnF1ZXVlICsgcnEtPndpLCBjZGF0YSwgbSk7CisJCVJJTkdfUVVFVUVfQURWQU5DRV9JTkRFWChycSwgd2ksIG0pOworCQljZGF0YSArPSBtOworCQllbnF1ZXVlZCArPSBtOworCQluIC09IG07CisJfQorCXJldHVybiBlbnF1ZXVlZDsKK30KKworRVhQT1JUX1NZTUJPTChSaW5nUXVldWVfRW5xdWV1ZSk7CisKK3N0YXRpYyB2b2lkIFJpbmdRdWV1ZV9JbnRlcnJ1cHRpYmxlU2xlZXBPbihzdHJ1Y3QgUmluZ1F1ZXVlICpycSkKK3sKKwlhc3NlcnQocnEgIT0gTlVMTCk7CisJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmcnEtPndxaCk7Cit9CisKK3ZvaWQgUmluZ1F1ZXVlX1dha2VVcEludGVycnVwdGlibGUoc3RydWN0IFJpbmdRdWV1ZSAqcnEpCit7CisJYXNzZXJ0KHJxICE9IE5VTEwpOworCWlmICh3YWl0cXVldWVfYWN0aXZlKCZycS0+d3FoKSkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZycS0+d3FoKTsKK30KKworRVhQT1JUX1NZTUJPTChSaW5nUXVldWVfV2FrZVVwSW50ZXJydXB0aWJsZSk7CisKK3ZvaWQgUmluZ1F1ZXVlX0ZsdXNoKHN0cnVjdCBSaW5nUXVldWUgKnJxKQoreworCWFzc2VydChycSAhPSBOVUxMKTsKKwlycS0+cmkgPSAwOworCXJxLT53aSA9IDA7Cit9CisKK0VYUE9SVF9TWU1CT0woUmluZ1F1ZXVlX0ZsdXNoKTsKKworCisvKgorICogdXNidmlkZW9fVmlkZW9zaXplVG9TdHJpbmcoKQorICoKKyAqIFRoaXMgcHJvY2VkdXJlIGNvbnZlcnRzIGdpdmVuIHZpZGVvc2l6ZSB2YWx1ZSB0byByZWFkYWJsZSBzdHJpbmcuCisgKgorICogSGlzdG9yeToKKyAqIDA3LUF1Zy0yMDAwIENyZWF0ZWQuCisgKiAxOS1PY3QtMjAwMCBSZXdvcmtlZCBmb3IgdXNidmlkZW8gbW9kdWxlLgorICovCitzdGF0aWMgdm9pZCB1c2J2aWRlb19WaWRlb3NpemVUb1N0cmluZyhjaGFyICpidWYsIGludCBidWZMZW4sIHZpZGVvc2l6ZV90IHZzKQoreworCWNoYXIgdG1wWzQwXTsKKwlpbnQgbjsKKworCW4gPSAxICsgc3ByaW50Zih0bXAsICIlbGR4JWxkIiwgVklERU9TSVpFX1godnMpLCBWSURFT1NJWkVfWSh2cykpOworCWFzc2VydChuIDwgc2l6ZW9mKHRtcCkpOworCWlmICgoYnVmID09IE5VTEwpIHx8IChidWZMZW4gPCBuKSkKKwkJZXJyKCJ1c2J2aWRlb19WaWRlb3NpemVUb1N0cmluZzogYnVmZmVyIGlzIHRvbyBzbWFsbC4iKTsKKwllbHNlCisJCW1lbW1vdmUoYnVmLCB0bXAsIG4pOworfQorCisvKgorICogdXNidmlkZW9fT3ZlcmxheUNoYXIoKQorICoKKyAqIEhpc3Rvcnk6CisgKiAwMS1GZWItMjAwMCBDcmVhdGVkLgorICovCitzdGF0aWMgdm9pZCB1c2J2aWRlb19PdmVybGF5Q2hhcihzdHJ1Y3QgdXZkICp1dmQsIHN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUsCisJCQkJIGludCB4LCBpbnQgeSwgaW50IGNoKQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBkaWdpdHNbMTZdID0geworCQkweEY2REUsIC8qIDAgKi8KKwkJMHgyNDkyLCAvKiAxICovCisJCTB4RTdDRSwgLyogMiAqLworCQkweEU3OUUsIC8qIDMgKi8KKwkJMHhCNzkyLCAvKiA0ICovCisJCTB4RjM5RSwgLyogNSAqLworCQkweEYzREUsIC8qIDYgKi8KKwkJMHhGNDkyLCAvKiA3ICovCisJCTB4RjdERSwgLyogOCAqLworCQkweEY3OUUsIC8qIDkgKi8KKwkJMHg3N0RBLCAvKiBhICovCisJCTB4RDc1QywgLyogYiAqLworCQkweEYyNEUsIC8qIGMgKi8KKwkJMHhENkRDLCAvKiBkICovCisJCTB4RjM0RSwgLyogZSAqLworCQkweEYzNDggIC8qIGYgKi8KKwl9OworCXVuc2lnbmVkIHNob3J0IGRpZ2l0OworCWludCBpeCwgaXk7CisKKwlpZiAoKHV2ZCA9PSBOVUxMKSB8fCAoZnJhbWUgPT0gTlVMTCkpCisJCXJldHVybjsKKworCWlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKQorCQljaCAtPSAnMCc7CisJZWxzZSBpZiAoY2ggPj0gJ0EnICYmIGNoIDw9ICdGJykKKwkJY2ggPSAxMCArIChjaCAtICdBJyk7CisJZWxzZSBpZiAoY2ggPj0gJ2EnICYmIGNoIDw9ICdmJykKKwkJY2ggPSAxMCArIChjaCAtICdhJyk7CisJZWxzZQorCQlyZXR1cm47CisJZGlnaXQgPSBkaWdpdHNbY2hdOworCisJZm9yIChpeT0wOyBpeSA8IDU7IGl5KyspIHsKKwkJZm9yIChpeD0wOyBpeCA8IDM7IGl4KyspIHsKKwkJCWlmIChkaWdpdCAmIDB4ODAwMCkgeworCQkJCWlmICh1dmQtPnBhbGV0dGVCaXRzICYgKDFMIDw8IFZJREVPX1BBTEVUVEVfUkdCMjQpKSB7CisvKiBUT0RPICovCQkJCVJHQjI0X1BVVFBJWEVMKGZyYW1lLCB4K2l4LCB5K2l5LCAweEZGLCAweEZGLCAweEZGKTsKKwkJCQl9CisJCQl9CisJCQlkaWdpdCA9IGRpZ2l0IDw8IDE7CisJCX0KKwl9Cit9CisKKy8qCisgKiB1c2J2aWRlb19PdmVybGF5U3RyaW5nKCkKKyAqCisgKiBIaXN0b3J5OgorICogMDEtRmViLTIwMDAgQ3JlYXRlZC4KKyAqLworc3RhdGljIHZvaWQgdXNidmlkZW9fT3ZlcmxheVN0cmluZyhzdHJ1Y3QgdXZkICp1dmQsIHN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUsCisJCQkJICAgaW50IHgsIGludCB5LCBjb25zdCBjaGFyICpzdHIpCit7CisJd2hpbGUgKCpzdHIpIHsKKwkJdXNidmlkZW9fT3ZlcmxheUNoYXIodXZkLCBmcmFtZSwgeCwgeSwgKnN0cik7CisJCXN0cisrOworCQl4ICs9IDQ7IC8qIDMgcGl4ZWxzIGNoYXJhY3RlciArIDEgc3BhY2UgKi8KKwl9Cit9CisKKy8qCisgKiB1c2J2aWRlb19PdmVybGF5U3RhdHMoKQorICoKKyAqIE92ZXJsYXlzIGltcG9ydGFudCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCisgKgorICogSGlzdG9yeToKKyAqIDAxLUZlYi0yMDAwIENyZWF0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIHVzYnZpZGVvX092ZXJsYXlTdGF0cyhzdHJ1Y3QgdXZkICp1dmQsIHN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUpCit7CisJY29uc3QgaW50IHlfZGlmZiA9IDg7CisJY2hhciB0bXBbMTZdOworCWludCB4ID0gMTAsIHk9MTA7CisJbG9uZyBpLCBqLCBiYXJMZW5ndGg7CisJY29uc3QgaW50IHFpX3gxID0gNjAsIHFpX3kxID0gMTA7CisJY29uc3QgaW50IHFpX3gyID0gVklERU9TSVpFX1goZnJhbWUtPnJlcXVlc3QpIC0gMTAsIHFpX2ggPSAxMDsKKworCS8qIENhbGwgdGhlIHVzZXIgY2FsbGJhY2ssIHNlZSBpZiB3ZSBtYXkgcHJvY2VlZCBhZnRlciB0aGF0ICovCisJaWYgKFZBTElEX0NBTExCQUNLKHV2ZCwgb3ZlcmxheUhvb2spKSB7CisJCWlmIChHRVRfQ0FMTEJBQ0sodXZkLCBvdmVybGF5SG9vaykodXZkLCBmcmFtZSkgPCAwKQorCQkJcmV0dXJuOworCX0KKworCS8qCisJICogV2UgZHJhdyBhIChtb3N0bHkpIGhvbGxvdyByZWN0YW5nbGUgd2l0aCBxaV94eHggY29vcmRpbmF0ZXMuCisJICogTGVmdCBlZGdlIHN5bWJvbGl6ZXMgdGhlIHF1ZXVlIGluZGV4IDA7IHJpZ2h0IGVkZ2Ugc3ltYm9saXplcworCSAqIHRoZSBmdWxsIGNhcGFjaXR5IG9mIHRoZSBxdWV1ZS4KKwkgKi8KKwliYXJMZW5ndGggPSBxaV94MiAtIHFpX3gxIC0gMjsKKwlpZiAoKGJhckxlbmd0aCA+IDEwKSAmJiAodXZkLT5wYWxldHRlQml0cyAmICgxTCA8PCBWSURFT19QQUxFVFRFX1JHQjI0KSkpIHsKKy8qIFRPRE8gKi8JbG9uZyB1X2xvLCB1X2hpLCBxX3VzZWQ7CisJCWxvbmcgbV9yaSwgbV93aSwgbV9sbywgbV9oaTsKKworCQkvKgorCQkgKiBEZXRlcm1pbmUgZmlsbCB6b25lcyAodXNlZCBhcmVhcyBvZiB0aGUgcXVldWUpOgorCQkgKiAwIHh4eHh4eHggdV9sbyAuLi4uLi4gdXZkLT5kcC5yaSB4eHh4eHh4eCB1X2hpIC4uLi4uIHV2ZC0+ZHAubGVuZ3RoCisJCSAqCisJCSAqIGlmIHVfbG8gPCAwIHRoZW4gdGhlcmUgaXMgbm8gZmlyc3QgZmlsbGVyLgorCQkgKi8KKworCQlxX3VzZWQgPSBSaW5nUXVldWVfR2V0TGVuZ3RoKCZ1dmQtPmRwKTsKKwkJaWYgKCh1dmQtPmRwLnJpICsgcV91c2VkKSA+PSB1dmQtPmRwLmxlbmd0aCkgeworCQkJdV9oaSA9IHV2ZC0+ZHAubGVuZ3RoOworCQkJdV9sbyA9IChxX3VzZWQgKyB1dmQtPmRwLnJpKSAmICh1dmQtPmRwLmxlbmd0aC0xKTsKKwkJfSBlbHNlIHsKKwkJCXVfaGkgPSAocV91c2VkICsgdXZkLT5kcC5yaSk7CisJCQl1X2xvID0gLTE7CisJCX0KKworCQkvKiBDb252ZXJ0IGJ5dGUgaW5kaWNlcyBpbnRvIHNjcmVlbiB1bml0cyAqLworCQltX3JpID0gcWlfeDEgKyAoKGJhckxlbmd0aCAqIHV2ZC0+ZHAucmkpIC8gdXZkLT5kcC5sZW5ndGgpOworCQltX3dpID0gcWlfeDEgKyAoKGJhckxlbmd0aCAqIHV2ZC0+ZHAud2kpIC8gdXZkLT5kcC5sZW5ndGgpOworCQltX2xvID0gKHVfbG8gPiAwKSA/IChxaV94MSArICgoYmFyTGVuZ3RoICogdV9sbykgLyB1dmQtPmRwLmxlbmd0aCkpIDogLTE7CisJCW1faGkgPSBxaV94MSArICgoYmFyTGVuZ3RoICogdV9oaSkgLyB1dmQtPmRwLmxlbmd0aCk7CisKKwkJZm9yIChqPXFpX3kxOyBqIDwgKHFpX3kxICsgcWlfaCk7IGorKykgeworCQkJZm9yIChpPXFpX3gxOyBpIDwgcWlfeDI7IGkrKykgeworCQkJCS8qIERyYXcgYm9yZGVyIGxpbmVzICovCisJCQkJaWYgKChqID09IHFpX3kxKSB8fCAoaiA9PSAocWlfeTEgKyBxaV9oIC0gMSkpIHx8CisJCQkJICAgIChpID09IHFpX3gxKSB8fCAoaSA9PSAocWlfeDIgLSAxKSkpIHsKKwkJCQkJUkdCMjRfUFVUUElYRUwoZnJhbWUsIGksIGosIDB4RkYsIDB4RkYsIDB4RkYpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJLyogRm9yIGFsbCBvdGhlciBwb2ludHMgdGhlIFkgY29vcmRpbmF0ZSBkb2VzIG5vdCBtYXR0ZXIgKi8KKwkJCQlpZiAoKGkgPj0gbV9yaSkgJiYgKGkgPD0gKG1fcmkgKyAzKSkpIHsKKwkJCQkJUkdCMjRfUFVUUElYRUwoZnJhbWUsIGksIGosIDB4MDAsIDB4RkYsIDB4MDApOworCQkJCX0gZWxzZSBpZiAoKGkgPj0gbV93aSkgJiYgKGkgPD0gKG1fd2kgKyAzKSkpIHsKKwkJCQkJUkdCMjRfUFVUUElYRUwoZnJhbWUsIGksIGosIDB4RkYsIDB4MDAsIDB4MDApOworCQkJCX0gZWxzZSBpZiAoKGkgPCBtX2xvKSB8fCAoKGkgPiBtX3JpKSAmJiAoaSA8IG1faGkpKSkKKwkJCQkJUkdCMjRfUFVUUElYRUwoZnJhbWUsIGksIGosIDB4MDAsIDB4MDAsIDB4RkYpOworCQkJfQorCQl9CisJfQorCisJc3ByaW50Zih0bXAsICIlOGx4IiwgdXZkLT5zdGF0cy5mcmFtZV9udW0pOworCXVzYnZpZGVvX092ZXJsYXlTdHJpbmcodXZkLCBmcmFtZSwgeCwgeSwgdG1wKTsKKwl5ICs9IHlfZGlmZjsKKworCXNwcmludGYodG1wLCAiJThseCIsIHV2ZC0+c3RhdHMudXJiX2NvdW50KTsKKwl1c2J2aWRlb19PdmVybGF5U3RyaW5nKHV2ZCwgZnJhbWUsIHgsIHksIHRtcCk7CisJeSArPSB5X2RpZmY7CisKKwlzcHJpbnRmKHRtcCwgIiU4bHgiLCB1dmQtPnN0YXRzLnVyYl9sZW5ndGgpOworCXVzYnZpZGVvX092ZXJsYXlTdHJpbmcodXZkLCBmcmFtZSwgeCwgeSwgdG1wKTsKKwl5ICs9IHlfZGlmZjsKKworCXNwcmludGYodG1wLCAiJThseCIsIHV2ZC0+c3RhdHMuZGF0YV9jb3VudCk7CisJdXNidmlkZW9fT3ZlcmxheVN0cmluZyh1dmQsIGZyYW1lLCB4LCB5LCB0bXApOworCXkgKz0geV9kaWZmOworCisJc3ByaW50Zih0bXAsICIlOGx4IiwgdXZkLT5zdGF0cy5oZWFkZXJfY291bnQpOworCXVzYnZpZGVvX092ZXJsYXlTdHJpbmcodXZkLCBmcmFtZSwgeCwgeSwgdG1wKTsKKwl5ICs9IHlfZGlmZjsKKworCXNwcmludGYodG1wLCAiJThseCIsIHV2ZC0+c3RhdHMuaXNvX3NraXBfY291bnQpOworCXVzYnZpZGVvX092ZXJsYXlTdHJpbmcodXZkLCBmcmFtZSwgeCwgeSwgdG1wKTsKKwl5ICs9IHlfZGlmZjsKKworCXNwcmludGYodG1wLCAiJThseCIsIHV2ZC0+c3RhdHMuaXNvX2Vycl9jb3VudCk7CisJdXNidmlkZW9fT3ZlcmxheVN0cmluZyh1dmQsIGZyYW1lLCB4LCB5LCB0bXApOworCXkgKz0geV9kaWZmOworCisJc3ByaW50Zih0bXAsICIlOHgiLCB1dmQtPnZwaWMuY29sb3VyKTsKKwl1c2J2aWRlb19PdmVybGF5U3RyaW5nKHV2ZCwgZnJhbWUsIHgsIHksIHRtcCk7CisJeSArPSB5X2RpZmY7CisKKwlzcHJpbnRmKHRtcCwgIiU4eCIsIHV2ZC0+dnBpYy5odWUpOworCXVzYnZpZGVvX092ZXJsYXlTdHJpbmcodXZkLCBmcmFtZSwgeCwgeSwgdG1wKTsKKwl5ICs9IHlfZGlmZjsKKworCXNwcmludGYodG1wLCAiJTh4IiwgdXZkLT52cGljLmJyaWdodG5lc3MgPj4gOCk7CisJdXNidmlkZW9fT3ZlcmxheVN0cmluZyh1dmQsIGZyYW1lLCB4LCB5LCB0bXApOworCXkgKz0geV9kaWZmOworCisJc3ByaW50Zih0bXAsICIlOHgiLCB1dmQtPnZwaWMuY29udHJhc3QgPj4gMTIpOworCXVzYnZpZGVvX092ZXJsYXlTdHJpbmcodXZkLCBmcmFtZSwgeCwgeSwgdG1wKTsKKwl5ICs9IHlfZGlmZjsKKworCXNwcmludGYodG1wLCAiJThkIiwgdXZkLT52cGljLndoaXRlbmVzcyA+PiA4KTsKKwl1c2J2aWRlb19PdmVybGF5U3RyaW5nKHV2ZCwgZnJhbWUsIHgsIHksIHRtcCk7CisJeSArPSB5X2RpZmY7Cit9CisKKy8qCisgKiB1c2J2aWRlb19SZXBvcnRTdGF0aXN0aWNzKCkKKyAqCisgKiBUaGlzIHByb2NlZHVyZSBwcmludHMgcGFja2V0IGFuZCB0cmFuc2ZlciBzdGF0aXN0aWNzLgorICoKKyAqIEhpc3Rvcnk6CisgKiAxNC1KYW4tMjAwMCBDb3JyZWN0ZWQgZGVmYXVsdCBtdWx0aXBsaWVyLgorICovCitzdGF0aWMgdm9pZCB1c2J2aWRlb19SZXBvcnRTdGF0aXN0aWNzKGNvbnN0IHN0cnVjdCB1dmQgKnV2ZCkKK3sKKwlpZiAoKHV2ZCAhPSBOVUxMKSAmJiAodXZkLT5zdGF0cy51cmJfY291bnQgPiAwKSkgeworCQl1bnNpZ25lZCBsb25nIGFsbFBhY2tldHMsIGJhZFBhY2tldHMsIGdvb2RQYWNrZXRzLCBwZXJjZW50OworCQlhbGxQYWNrZXRzID0gdXZkLT5zdGF0cy51cmJfY291bnQgKiBDQU1FUkFfVVJCX0ZSQU1FUzsKKwkJYmFkUGFja2V0cyA9IHV2ZC0+c3RhdHMuaXNvX3NraXBfY291bnQgKyB1dmQtPnN0YXRzLmlzb19lcnJfY291bnQ7CisJCWdvb2RQYWNrZXRzID0gYWxsUGFja2V0cyAtIGJhZFBhY2tldHM7CisJCS8qIENhbGN1bGF0ZSBwZXJjZW50YWdlIHdpc2VseSwgcmVtZW1iZXIgaW50ZWdlciBsaW1pdHMgKi8KKwkJYXNzZXJ0KGFsbFBhY2tldHMgIT0gMCk7CisJCWlmIChnb29kUGFja2V0cyA8ICgoKHVuc2lnbmVkIGxvbmcpLTEpLzEwMCkpCisJCQlwZXJjZW50ID0gKDEwMCAqIGdvb2RQYWNrZXRzKSAvIGFsbFBhY2tldHM7CisJCWVsc2UKKwkJCXBlcmNlbnQgPSBnb29kUGFja2V0cyAvIChhbGxQYWNrZXRzIC8gMTAwKTsKKwkJaW5mbygiUGFja2V0IFN0YXRpc3RpY3M6IFRvdGFsPSVsdS4gRW1wdHk9JWx1LiBVc2FnZT0lbHUlJSIsCisJCSAgICAgYWxsUGFja2V0cywgYmFkUGFja2V0cywgcGVyY2VudCk7CisJCWlmICh1dmQtPmlzb19wYWNrZXRfbGVuID4gMCkgeworCQkJdW5zaWduZWQgbG9uZyBhbGxCeXRlcywgeGZlckJ5dGVzOworCQkJY2hhciBtdWx0aXBsaWVyID0gJyAnOworCQkJYWxsQnl0ZXMgPSBhbGxQYWNrZXRzICogdXZkLT5pc29fcGFja2V0X2xlbjsKKwkJCXhmZXJCeXRlcyA9IHV2ZC0+c3RhdHMuZGF0YV9jb3VudDsKKwkJCWFzc2VydChhbGxCeXRlcyAhPSAwKTsKKwkJCWlmICh4ZmVyQnl0ZXMgPCAoKCh1bnNpZ25lZCBsb25nKS0xKS8xMDApKQorCQkJCXBlcmNlbnQgPSAoMTAwICogeGZlckJ5dGVzKSAvIGFsbEJ5dGVzOworCQkJZWxzZQorCQkJCXBlcmNlbnQgPSB4ZmVyQnl0ZXMgLyAoYWxsQnl0ZXMgLyAxMDApOworCQkJLyogU2NhbGUgeGZlckJ5dGVzIGZvciBlYXN5IHJlYWRpbmcgKi8KKwkJCWlmICh4ZmVyQnl0ZXMgPiAxMCoxMDI0KSB7CisJCQkJeGZlckJ5dGVzIC89IDEwMjQ7CisJCQkJbXVsdGlwbGllciA9ICdLJzsKKwkJCQlpZiAoeGZlckJ5dGVzID4gMTAqMTAyNCkgeworCQkJCQl4ZmVyQnl0ZXMgLz0gMTAyNDsKKwkJCQkJbXVsdGlwbGllciA9ICdNJzsKKwkJCQkJaWYgKHhmZXJCeXRlcyA+IDEwKjEwMjQpIHsKKwkJCQkJCXhmZXJCeXRlcyAvPSAxMDI0OworCQkJCQkJbXVsdGlwbGllciA9ICdHJzsKKwkJCQkJCWlmICh4ZmVyQnl0ZXMgPiAxMCoxMDI0KSB7CisJCQkJCQkJeGZlckJ5dGVzIC89IDEwMjQ7CisJCQkJCQkJbXVsdGlwbGllciA9ICdUJzsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWluZm8oIlRyYW5zZmVyIFN0YXRpc3RpY3M6IFRyYW5zZmVycmVkPSVsdSVjQiBVc2FnZT0lbHUlJSIsCisJCQkgICAgIHhmZXJCeXRlcywgbXVsdGlwbGllciwgcGVyY2VudCk7CisJCX0KKwl9Cit9CisKKy8qCisgKiB1c2J2aWRlb19UZXN0UGF0dGVybigpCisgKgorICogUHJvY2VkdXJlIGZvcm1zIGEgdGVzdCBwYXR0ZXJuICh5ZWxsb3cgZ3JpZCBvbiBibHVlIGJhY2tncm91bmQpLgorICoKKyAqIFBhcmFtZXRlcnM6CisgKiBmdWxsZnJhbWU6IGlmIFRSVUUgdGhlbiBlbnRpcmUgZnJhbWUgaXMgZmlsbGVkLCBvdGhlcndpc2UgdGhlIHByb2NlZHVyZQorICoJICAgICAgY29udGludWVzIGZyb20gdGhlIGN1cnJlbnQgc2NhbmxpbmUuCisgKiBwbW9kZSAgICAgIDA6IGZpbGwgdGhlIGZyYW1lIHdpdGggc29saWQgYmx1ZSBjb2xvciAobGlrZSBvbiBWQ1Igb3IgVFYpCisgKgkgICAgICAxOiBEcmF3IGEgY29sb3JlZCBncmlkCisgKgorICogSGlzdG9yeToKKyAqIDAxLUZlYi0yMDAwIENyZWF0ZWQuCisgKi8KK3ZvaWQgdXNidmlkZW9fVGVzdFBhdHRlcm4oc3RydWN0IHV2ZCAqdXZkLCBpbnQgZnVsbGZyYW1lLCBpbnQgcG1vZGUpCit7CisJc3RydWN0IHVzYnZpZGVvX2ZyYW1lICpmcmFtZTsKKwlpbnQgbnVtX2NlbGwgPSAwOworCWludCBzY2FuX2xlbmd0aCA9IDA7CisJc3RhdGljIGludCBudW1fcGFzcyA9IDA7CisKKwlpZiAodXZkID09IE5VTEwpIHsKKwkJZXJyKCIlczogdXZkID09IE5VTEwiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCWlmICgodXZkLT5jdXJmcmFtZSA8IDApIHx8ICh1dmQtPmN1cmZyYW1lID49IFVTQlZJREVPX05VTUZSQU1FUykpIHsKKwkJZXJyKCIlczogdXZkLT5jdXJmcmFtZT0lZC4iLCBfX0ZVTkNUSU9OX18sIHV2ZC0+Y3VyZnJhbWUpOworCQlyZXR1cm47CisJfQorCisJLyogR3JhYiB0aGUgY3VycmVudCBmcmFtZSAqLworCWZyYW1lID0gJnV2ZC0+ZnJhbWVbdXZkLT5jdXJmcmFtZV07CisKKwkvKiBPcHRpb25hbGx5IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgKi8KKwlpZiAoZnVsbGZyYW1lKSB7CisJCWZyYW1lLT5jdXJsaW5lID0gMDsKKwkJZnJhbWUtPnNlcVJlYWRfTGVuZ3RoID0gMDsKKwl9CisjaWYgMAorCXsJLyogRm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBvbmx5ICovCisJCWNoYXIgdG1wWzIwXTsKKwkJdXNidmlkZW9fVmlkZW9zaXplVG9TdHJpbmcodG1wLCBzaXplb2YodG1wKSwgZnJhbWUtPnJlcXVlc3QpOworCQlpbmZvKCJ0ZXN0cGF0dGVybjogZnJhbWU9JXMiLCB0bXApOworCX0KKyNlbmRpZgorCS8qIEZvcm0gZXZlcnkgc2NhbiBsaW5lICovCisJZm9yICg7IGZyYW1lLT5jdXJsaW5lIDwgVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpOyBmcmFtZS0+Y3VybGluZSsrKSB7CisJCWludCBpOworCQl1bnNpZ25lZCBjaGFyICpmID0gZnJhbWUtPmRhdGEgKworCQkJKFZJREVPU0laRV9YKGZyYW1lLT5yZXF1ZXN0KSAqIFY0TF9CWVRFU19QRVJfUElYRUwgKiBmcmFtZS0+Y3VybGluZSk7CisJCWZvciAoaT0wOyBpIDwgVklERU9TSVpFX1goZnJhbWUtPnJlcXVlc3QpOyBpKyspIHsKKwkJCXVuc2lnbmVkIGNoYXIgY2I9MHg4MDsKKwkJCXVuc2lnbmVkIGNoYXIgY2cgPSAwOworCQkJdW5zaWduZWQgY2hhciBjciA9IDA7CisKKwkJCWlmIChwbW9kZSA9PSAxKSB7CisJCQkJaWYgKGZyYW1lLT5jdXJsaW5lICUgMzIgPT0gMCkKKwkJCQkJY2IgPSAwLCBjZyA9IGNyID0gMHhGRjsKKwkJCQllbHNlIGlmIChpICUgMzIgPT0gMCkgeworCQkJCQlpZiAoZnJhbWUtPmN1cmxpbmUgJSAzMiA9PSAxKQorCQkJCQkJbnVtX2NlbGwrKzsKKwkJCQkJY2IgPSAwLCBjZyA9IGNyID0gMHhGRjsKKwkJCQl9IGVsc2UgeworCQkJCQljYiA9ICgobnVtX2NlbGwqNykgKyBudW1fcGFzcykgJiAweEZGOworCQkJCQljZyA9ICgobnVtX2NlbGwqNSkgKyBudW1fcGFzcyoyKSAmIDB4RkY7CisJCQkJCWNyID0gKChudW1fY2VsbCozKSArIG51bV9wYXNzKjMpICYgMHhGRjsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIEp1c3QgdGhlIGJsdWUgc2NyZWVuICovCisJCQl9CisJCQkJCisJCQkqZisrID0gY2I7CisJCQkqZisrID0gY2c7CisJCQkqZisrID0gY3I7CisJCQlzY2FuX2xlbmd0aCArPSAzOworCQl9CisJfQorCisJZnJhbWUtPmZyYW1lU3RhdGUgPSBGcmFtZVN0YXRlX0RvbmU7CisJZnJhbWUtPnNlcVJlYWRfTGVuZ3RoICs9IHNjYW5fbGVuZ3RoOworCSsrbnVtX3Bhc3M7CisKKwkvKiBXZSBkbyB0aGlzIHVuY29uZGl0aW9uYWxseSwgcmVnYXJkbGVzcyBvZiBGTEFHU19PVkVSTEFZX1NUQVRTICovCisJdXNidmlkZW9fT3ZlcmxheVN0YXRzKHV2ZCwgZnJhbWUpOworfQorCitFWFBPUlRfU1lNQk9MKHVzYnZpZGVvX1Rlc3RQYXR0ZXJuKTsKKworCisjaWZkZWYgREVCVUcKKy8qCisgKiB1c2J2aWRlb19IZXhEdW1wKCkKKyAqCisgKiBBIGRlYnVnZ2luZyB0b29sLiBQcmludHMgaGV4IGR1bXBzLgorICoKKyAqIEhpc3Rvcnk6CisgKiAyOS1KdWwtMjAwMCBBZGRlZCBwcmludGluZyBvZiBvZmZzZXRzLgorICovCit2b2lkIHVzYnZpZGVvX0hleER1bXAoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbikKK3sKKwljb25zdCBpbnQgYnl0ZXNfcGVyX2xpbmUgPSAzMjsKKwljaGFyIHRtcFsxMjhdOyAvKiAzMiozICsgNSAqLworCWludCBpLCBrOworCisJZm9yIChpPWs9MDsgbGVuID4gMDsgaSsrLCBsZW4tLSkgeworCQlpZiAoaSA+IDAgJiYgKChpICUgYnl0ZXNfcGVyX2xpbmUpID09IDApKSB7CisJCQlwcmludGsoIiVzXG4iLCB0bXApOworCQkJaz0wOworCQl9CisJCWlmICgoaSAlIGJ5dGVzX3Blcl9saW5lKSA9PSAwKQorCQkJayArPSBzcHJpbnRmKCZ0bXBba10sICIlMDR4OiAiLCBpKTsKKwkJayArPSBzcHJpbnRmKCZ0bXBba10sICIlMDJ4ICIsIGRhdGFbaV0pOworCX0KKwlpZiAoayA+IDApCisJCXByaW50aygiJXNcbiIsIHRtcCk7Cit9CisKK0VYUE9SVF9TWU1CT0wodXNidmlkZW9fSGV4RHVtcCk7CisKKyNlbmRpZgorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvKiBYWFg6IHRoaXMgcGllY2Ugb2YgY3JhcCByZWFsbHkgd2FudHMgc29tZSBlcnJvciBoYW5kbGluZy4uICovCitzdGF0aWMgdm9pZCB1c2J2aWRlb19DbGllbnRJbmNNb2RDb3VudChzdHJ1Y3QgdXZkICp1dmQpCit7CisJaWYgKHV2ZCA9PSBOVUxMKSB7CisJCWVycigiJXM6IHV2ZCA9PSBOVUxMIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKwlpZiAodXZkLT5oYW5kbGUgPT0gTlVMTCkgeworCQllcnIoIiVzOiB1dmQtPmhhbmRsZSA9PSBOVUxMIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKwlpZiAodXZkLT5oYW5kbGUtPm1kX21vZHVsZSA9PSBOVUxMKSB7CisJCWVycigiJXM6IHV2ZC0+aGFuZGxlLT5tZF9tb2R1bGUgPT0gTlVMTCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJaWYgKCF0cnlfbW9kdWxlX2dldCh1dmQtPmhhbmRsZS0+bWRfbW9kdWxlKSkgeworCQllcnIoIiVzOiB0cnlfbW9kdWxlX2dldCgpID09IDAiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgdm9pZCB1c2J2aWRlb19DbGllbnREZWNNb2RDb3VudChzdHJ1Y3QgdXZkICp1dmQpCit7CisJaWYgKHV2ZCA9PSBOVUxMKSB7CisJCWVycigiJXM6IHV2ZCA9PSBOVUxMIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKwlpZiAodXZkLT5oYW5kbGUgPT0gTlVMTCkgeworCQllcnIoIiVzOiB1dmQtPmhhbmRsZSA9PSBOVUxMIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKwlpZiAodXZkLT5oYW5kbGUtPm1kX21vZHVsZSA9PSBOVUxMKSB7CisJCWVycigiJXM6IHV2ZC0+aGFuZGxlLT5tZF9tb2R1bGUgPT0gTlVMTCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJbW9kdWxlX3B1dCh1dmQtPmhhbmRsZS0+bWRfbW9kdWxlKTsKK30KKworaW50IHVzYnZpZGVvX3JlZ2lzdGVyKAorCXN0cnVjdCB1c2J2aWRlbyAqKnBDYW1zLAorCWNvbnN0IGludCBudW1fY2FtcywKKwljb25zdCBpbnQgbnVtX2V4dHJhLAorCWNvbnN0IGNoYXIgKmRyaXZlck5hbWUsCisJY29uc3Qgc3RydWN0IHVzYnZpZGVvX2NiICpjYlRibCwKKwlzdHJ1Y3QgbW9kdWxlICptZCwKKwljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWRfdGFibGUpCit7CisJc3RydWN0IHVzYnZpZGVvICpjYW1zOworCWludCBpLCBiYXNlX3NpemUsIHJlc3VsdDsKKworCS8qIENoZWNrIHBhcmFtZXRlcnMgZm9yIHNhbml0eSAqLworCWlmICgobnVtX2NhbXMgPD0gMCkgfHwgKHBDYW1zID09IE5VTEwpIHx8IChjYlRibCA9PSBOVUxMKSkgeworCQllcnIoIiVzOiBJbGxlZ2FsIGNhbGwiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDaGVjayByZWdpc3RyYXRpb24gY2FsbGJhY2sgLSBtdXN0IGJlIHNldCEgKi8KKwlpZiAoY2JUYmwtPnByb2JlID09IE5VTEwpIHsKKwkJZXJyKCIlczogcHJvYmUoKSBpcyByZXF1aXJlZCEiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwliYXNlX3NpemUgPSBudW1fY2FtcyAqIHNpemVvZihzdHJ1Y3QgdXZkKSArIHNpemVvZihzdHJ1Y3QgdXNidmlkZW8pOworCWNhbXMgPSAoc3RydWN0IHVzYnZpZGVvICopIGttYWxsb2MoYmFzZV9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2FtcyA9PSBOVUxMKSB7CisJCWVycigiRmFpbGVkIHRvIGFsbG9jYXRlICVkLiBieXRlcyBmb3IgdXNidmlkZW8gc3RydWN0IiwgYmFzZV9zaXplKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWRiZygiJXM6IEFsbG9jYXRlZCAkJXAgKCVkLiBieXRlcykgZm9yICVkLiBjYW1lcmFzIiwKKwkgICAgX19GVU5DVElPTl9fLCBjYW1zLCBiYXNlX3NpemUsIG51bV9jYW1zKTsKKwltZW1zZXQoY2FtcywgMCwgYmFzZV9zaXplKTsKKworCS8qIENvcHkgY2FsbGJhY2tzLCBhcHBseSBkZWZhdWx0cyBmb3IgdGhvc2UgdGhhdCBhcmUgbm90IHNldCAqLworCW1lbW1vdmUoJmNhbXMtPmNiLCBjYlRibCwgc2l6ZW9mKGNhbXMtPmNiKSk7CisJaWYgKGNhbXMtPmNiLmdldEZyYW1lID09IE5VTEwpCisJCWNhbXMtPmNiLmdldEZyYW1lID0gdXNidmlkZW9fR2V0RnJhbWU7CisJaWYgKGNhbXMtPmNiLmRpc2Nvbm5lY3QgPT0gTlVMTCkKKwkJY2Ftcy0+Y2IuZGlzY29ubmVjdCA9IHVzYnZpZGVvX0Rpc2Nvbm5lY3Q7CisJaWYgKGNhbXMtPmNiLnN0YXJ0RGF0YVB1bXAgPT0gTlVMTCkKKwkJY2Ftcy0+Y2Iuc3RhcnREYXRhUHVtcCA9IHVzYnZpZGVvX1N0YXJ0RGF0YVB1bXA7CisJaWYgKGNhbXMtPmNiLnN0b3BEYXRhUHVtcCA9PSBOVUxMKQorCQljYW1zLT5jYi5zdG9wRGF0YVB1bXAgPSB1c2J2aWRlb19TdG9wRGF0YVB1bXA7CisKKwljYW1zLT5udW1fY2FtZXJhcyA9IG51bV9jYW1zOworCWNhbXMtPmNhbSA9IChzdHJ1Y3QgdXZkICopICZjYW1zWzFdOworCWNhbXMtPm1kX21vZHVsZSA9IG1kOworCWlmIChjYW1zLT5tZF9tb2R1bGUgPT0gTlVMTCkKKwkJd2FybigiJXM6IG1vZHVsZSA9PSBOVUxMISIsIF9fRlVOQ1RJT05fXyk7CisJaW5pdF9NVVRFWCgmY2Ftcy0+bG9jayk7CS8qIHRvIDEgPT0gYXZhaWxhYmxlICovCisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NhbXM7IGkrKykgeworCQlzdHJ1Y3QgdXZkICp1cCA9ICZjYW1zLT5jYW1baV07CisKKwkJdXAtPmhhbmRsZSA9IGNhbXM7CisKKwkJLyogQWxsb2NhdGUgdXNlcl9kYXRhIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBrbWFsbG9jJ3MgbGltaXRzICovCisJCWlmIChudW1fZXh0cmEgPiAwKSB7CisJCQl1cC0+dXNlcl9zaXplID0gbnVtX2NhbXMgKiBudW1fZXh0cmE7CisJCQl1cC0+dXNlcl9kYXRhID0gKGNoYXIgKikga21hbGxvYyh1cC0+dXNlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJCWlmICh1cC0+dXNlcl9kYXRhID09IE5VTEwpIHsKKwkJCQllcnIoIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgdXNlcl9kYXRhICglZC4gYnl0ZXMpIiwKKwkJCQkgICAgX19GVU5DVElPTl9fLCB1cC0+dXNlcl9zaXplKTsKKwkJCQl3aGlsZSAoaSkgeworCQkJCQl1cCA9ICZjYW1zLT5jYW1bLS1pXTsKKwkJCQkJa2ZyZWUodXAtPnVzZXJfZGF0YSk7CisJCQkJfQorCQkJCWtmcmVlKGNhbXMpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQkJZGJnKCIlczogQWxsb2NhdGVkIGNhbXNbJWRdLnVzZXJfZGF0YT0kJXAgKCVkLiBieXRlcykiLAorCQkJICAgICBfX0ZVTkNUSU9OX18sIGksIHVwLT51c2VyX2RhdGEsIHVwLT51c2VyX3NpemUpOworCQl9CisJfQorCisJLyoKKwkgKiBSZWdpc3RlciBvdXJzZWx2ZXMgd2l0aCBVU0Igc3RhY2suCisJICovCisJc3RyY3B5KGNhbXMtPmRydk5hbWUsIChkcml2ZXJOYW1lICE9IE5VTEwpID8gZHJpdmVyTmFtZSA6ICJVbmtub3duIik7CisJY2Ftcy0+dXNiZHJ2Lm5hbWUgPSBjYW1zLT5kcnZOYW1lOworCWNhbXMtPnVzYmRydi5wcm9iZSA9IGNhbXMtPmNiLnByb2JlOworCWNhbXMtPnVzYmRydi5kaXNjb25uZWN0ID0gY2Ftcy0+Y2IuZGlzY29ubmVjdDsKKwljYW1zLT51c2JkcnYuaWRfdGFibGUgPSBpZF90YWJsZTsKKworCS8qCisJICogVXBkYXRlIGdsb2JhbCBoYW5kbGUgdG8gdXNidmlkZW8uIFRoaXMgaXMgdmVyeSBpbXBvcnRhbnQKKwkgKiBiZWNhdXNlIHByb2JlKCkgY2FuIGJlIGNhbGxlZCBiZWZvcmUgdXNiX3JlZ2lzdGVyKCkgcmV0dXJucy4KKwkgKiBJZiB0aGUgaGFuZGxlIGlzIG5vdCB5ZXQgdXBkYXRlZCB0aGVuIHRoZSBwcm9iZSgpIHdpbGwgZmFpbC4KKwkgKi8KKwkqcENhbXMgPSBjYW1zOworCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmY2Ftcy0+dXNiZHJ2KTsKKwlpZiAocmVzdWx0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fY2FtczsgaSsrKSB7CisJCQlzdHJ1Y3QgdXZkICp1cCA9ICZjYW1zLT5jYW1baV07CisJCQlrZnJlZSh1cC0+dXNlcl9kYXRhKTsKKwkJfQorCQlrZnJlZShjYW1zKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitFWFBPUlRfU1lNQk9MKHVzYnZpZGVvX3JlZ2lzdGVyKTsKKworLyoKKyAqIHVzYnZpZGVvX0RlcmVnaXN0ZXIoKQorICoKKyAqIFByb2NlZHVyZSBmcmVlcyBhbGwgdXNidmlkZW8gYW5kIHVzZXIgZGF0YSBzdHJ1Y3R1cmVzLiBCZSB3YXJuZWQgdGhhdAorICogaWYgeW91IGhhZCBzb21lIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBjb21wb25lbnRzIGluIC0+dXNlciBmaWVsZCB0aGVuCisgKiB5b3Ugc2hvdWxkIGZyZWUgdGhlbSBiZWZvcmUgY2FsbGluZyBoZXJlLgorICovCit2b2lkIHVzYnZpZGVvX0RlcmVnaXN0ZXIoc3RydWN0IHVzYnZpZGVvICoqcENhbXMpCit7CisJc3RydWN0IHVzYnZpZGVvICpjYW1zOworCWludCBpOworCisJaWYgKHBDYW1zID09IE5VTEwpIHsKKwkJZXJyKCIlczogcENhbXMgPT0gTlVMTCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJY2FtcyA9ICpwQ2FtczsKKwlpZiAoY2FtcyA9PSBOVUxMKSB7CisJCWVycigiJXM6IGNhbXMgPT0gTlVMTCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlkYmcoIiVzOiBEZXJlZ2lzdGVyaW5nICVzIGRyaXZlci4iLCBfX0ZVTkNUSU9OX18sIGNhbXMtPmRydk5hbWUpOworCXVzYl9kZXJlZ2lzdGVyKCZjYW1zLT51c2JkcnYpOworCisJZGJnKCIlczogRGVhbGxvY2F0aW5nIGNhbXM9JCVwICglZC4gY2FtZXJhcykiLCBfX0ZVTkNUSU9OX18sIGNhbXMsIGNhbXMtPm51bV9jYW1lcmFzKTsKKwlmb3IgKGk9MDsgaSA8IGNhbXMtPm51bV9jYW1lcmFzOyBpKyspIHsKKwkJc3RydWN0IHV2ZCAqdXAgPSAmY2Ftcy0+Y2FtW2ldOworCQlpbnQgd2FybmluZyA9IDA7CisKKwkJaWYgKHVwLT51c2VyX2RhdGEgIT0gTlVMTCkgeworCQkJaWYgKHVwLT51c2VyX3NpemUgPD0gMCkKKwkJCQkrK3dhcm5pbmc7CisJCX0gZWxzZSB7CisJCQlpZiAodXAtPnVzZXJfc2l6ZSA+IDApCisJCQkJKyt3YXJuaW5nOworCQl9CisJCWlmICh3YXJuaW5nKSB7CisJCQllcnIoIiVzOiBXYXJuaW5nOiB1c2VyX2RhdGE9JCVwIHVzZXJfc2l6ZT0lZC4iLAorCQkJICAgIF9fRlVOQ1RJT05fXywgdXAtPnVzZXJfZGF0YSwgdXAtPnVzZXJfc2l6ZSk7CisJCX0gZWxzZSB7CisJCQlkYmcoIiVzOiBGcmVlaW5nICVkLiAkJXAtPnVzZXJfZGF0YT0kJXAiLAorCQkJICAgIF9fRlVOQ1RJT05fXywgaSwgdXAsIHVwLT51c2VyX2RhdGEpOworCQkJa2ZyZWUodXAtPnVzZXJfZGF0YSk7CisJCX0KKwl9CisJLyogV2hvbGUgYXJyYXkgd2FzIGFsbG9jYXRlZCBpbiBvbmUgY2h1bmsgKi8KKwlkYmcoIiVzOiBGcmVlZCAlZCB1dmQgc3RydWN0dXJlcyIsCisJICAgIF9fRlVOQ1RJT05fXywgY2Ftcy0+bnVtX2NhbWVyYXMpOworCWtmcmVlKGNhbXMpOworCSpwQ2FtcyA9IE5VTEw7Cit9CisKK0VYUE9SVF9TWU1CT0wodXNidmlkZW9fRGVyZWdpc3Rlcik7CisKKy8qCisgKiB1c2J2aWRlb19EaXNjb25uZWN0KCkKKyAqCisgKiBUaGlzIHByb2NlZHVyZSBzdG9wcyBhbGwgZHJpdmVyIGFjdGl2aXR5LiBEZWFsbG9jYXRpb24gb2YKKyAqIHRoZSBpbnRlcmZhY2UtcHJpdmF0ZSBzdHJ1Y3R1cmUgKHBvaW50ZWQgYnkgJ3B0cicpIGlzIGRvbmUgbm93CisgKiAoaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgb3BlbiBmaWxlcykgb3IgbGF0ZXIsIHdoZW4gdGhvc2UgZmlsZXMKKyAqIGFyZSBjbG9zZWQuIEFmdGVyIHRoYXQgZHJpdmVyIHNob3VsZCBiZSByZW1vdmFibGUuCisgKgorICogVGhpcyBjb2RlIGhhbmRsZXMgc3VycHJpc2UgcmVtb3ZhbC4gVGhlIHV2ZC0+dXNlciBpcyBhIGNvdW50ZXIgd2hpY2gKKyAqIGluY3JlbWVudHMgb24gb3BlbigpIGFuZCBkZWNyZW1lbnRzIG9uIGNsb3NlKCkuIElmIHdlIHNlZSBoZXJlIHRoYXQKKyAqIHRoaXMgY291bnRlciBpcyBub3QgMCB0aGVuIHdlIGhhdmUgYSBjbGllbnQgd2hvIHN0aWxsIGhhcyB1cyBvcGVuZWQuCisgKiBXZSBzZXQgdXZkLT5yZW1vdmVfcGVuZGluZyBmbGFnIGFzIGVhcmx5IGFzIHBvc3NpYmxlLCBhbmQgYWZ0ZXIgdGhhdAorICogYWxsIGFjY2VzcyB0byB0aGUgY2FtZXJhIHdpbGwgZ3JhY2VmdWxseSBmYWlsLiBUaGVzZSBmYWlsdXJlcyBzaG91bGQKKyAqIHByb21wdCBjbGllbnQgdG8gKGV2ZW50dWFsbHkpIGNsb3NlIHRoZSB2aWRlbyBkZXZpY2UsIGFuZCB0aGVuIC0gaW4KKyAqIHVzYnZpZGVvX3Y0bF9jbG9zZSgpIC0gd2UgZGVjcmVtZW50IHV2ZC0+dXZkX3VzZWQgYW5kIHVzYWdlIGNvdW50ZXIuCisgKgorICogSGlzdG9yeToKKyAqIDIyLUphbi0yMDAwIEFkZGVkIHBvbGxpbmcgb2YgTU9EX0lOX1VTRSB0byBkZWxheSByZW1vdmFsIHVudGlsIGFsbCB1c2VycyBnb25lLgorICogMjctSmFuLTIwMDAgUmV3b3JrZWQgdG8gYWxsb3cgcGVuZGluZyBkaXNjb25uZWN0czsgc2VlIHh4eF9jbG9zZSgpCisgKiAyNC1NYXktMjAwMCBDb3JyZWN0ZWQgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbiAoTU9EX3h4eF9VU0VfQ09VTlQpLgorICogMTktT2N0LTIwMDAgTW92ZWQgdG8gdXNidmlkZW8gbW9kdWxlLgorICovCitzdGF0aWMgdm9pZCB1c2J2aWRlb19EaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1dmQgKnV2ZCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCWludCBpOworCisJaWYgKHV2ZCA9PSBOVUxMKSB7CisJCWVycigiJXMoJCVwKTogSWxsZWdhbCBjYWxsLiIsIF9fRlVOQ1RJT05fXywgaW50Zik7CisJCXJldHVybjsKKwl9CisKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKKworCXVzYnZpZGVvX0NsaWVudEluY01vZENvdW50KHV2ZCk7CisJaWYgKHV2ZC0+ZGVidWcgPiAwKQorCQlpbmZvKCIlcyglcC4pIiwgX19GVU5DVElPTl9fLCBpbnRmKTsKKworCWRvd24oJnV2ZC0+bG9jayk7CisJdXZkLT5yZW1vdmVfcGVuZGluZyA9IDE7IC8qIE5vdyBhbGwgSVNPIGRhdGEgd2lsbCBiZSBpZ25vcmVkICovCisKKwkvKiBBdCB0aGlzIHRpbWUgd2UgYXNrIHRvIGNhbmNlbCBvdXRzdGFuZGluZyBVUkJzICovCisJR0VUX0NBTExCQUNLKHV2ZCwgc3RvcERhdGFQdW1wKSh1dmQpOworCisJZm9yIChpPTA7IGkgPCBVU0JWSURFT19OVU1TQlVGOyBpKyspCisJCXVzYl9mcmVlX3VyYih1dmQtPnNidWZbaV0udXJiKTsKKworCXVzYl9wdXRfZGV2KHV2ZC0+ZGV2KTsKKwl1dmQtPmRldiA9IE5VTEw7ICAgIAkgICAgLyogVVNCIGRldmljZSBpcyBubyBtb3JlICovCisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmdXZkLT52ZGV2KTsKKwlpZiAodXZkLT5kZWJ1ZyA+IDApCisJCWluZm8oIiVzOiBWaWRlbyB1bnJlZ2lzdGVyZWQuIiwgX19GVU5DVElPTl9fKTsKKworCWlmICh1dmQtPnVzZXIpCisJCWluZm8oIiVzOiBJbiB1c2UsIGRpc2Nvbm5lY3QgcGVuZGluZy4iLCBfX0ZVTkNUSU9OX18pOworCWVsc2UKKwkJdXNidmlkZW9fQ2FtZXJhUmVsZWFzZSh1dmQpOworCXVwKCZ1dmQtPmxvY2spOworCWluZm8oIlVTQiBjYW1lcmEgZGlzY29ubmVjdGVkLiIpOworCisJdXNidmlkZW9fQ2xpZW50RGVjTW9kQ291bnQodXZkKTsKK30KKworLyoKKyAqIHVzYnZpZGVvX0NhbWVyYVJlbGVhc2UoKQorICoKKyAqIFRoaXMgY29kZSBkb2VzIGZpbmFsIHJlbGVhc2Ugb2YgdXZkLiBUaGlzIGhhcHBlbnMKKyAqIGFmdGVyIHRoZSBkZXZpY2UgaXMgZGlzY29ubmVjdGVkIC1hbmQtIGFsbCBjbGllbnRzCisgKiBjbG9zZWQgdGhlaXIgZmlsZXMuCisgKgorICogSGlzdG9yeToKKyAqIDI3LUphbi0yMDAwIENyZWF0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIHVzYnZpZGVvX0NhbWVyYVJlbGVhc2Uoc3RydWN0IHV2ZCAqdXZkKQoreworCWlmICh1dmQgPT0gTlVMTCkgeworCQllcnIoIiVzOiBJbGxlZ2FsIGNhbGwiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJUmluZ1F1ZXVlX0ZyZWUoJnV2ZC0+ZHApOworCWlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIHVzZXJGcmVlKSkKKwkJR0VUX0NBTExCQUNLKHV2ZCwgdXNlckZyZWUpKHV2ZCk7CisJdXZkLT51dmRfdXNlZCA9IDA7CS8qIFRoaXMgaXMgYXRvbWljLCBubyBuZWVkIHRvIHRha2UgbXV0ZXggKi8KK30KKworLyoKKyAqIHVzYnZpZGVvX2ZpbmRfc3RydWN0KCkKKyAqCisgKiBUaGlzIGNvZGUgc2VhcmNoZXMgdGhlIGFycmF5IG9mIHByZWFsbG9jYXRlZCAoc3RhdGljKSBzdHJ1Y3R1cmVzCisgKiBhbmQgcmV0dXJucyBpbmRleCBvZiB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgaW4gdXNlLiBSZXR1cm5zIC0xCisgKiBpZiB0aGVyZSBhcmUgbm8gZnJlZSBzdHJ1Y3R1cmVzLgorICoKKyAqIEhpc3Rvcnk6CisgKiAyNy1KYW4tMjAwMCBDcmVhdGVkLgorICovCitzdGF0aWMgaW50IHVzYnZpZGVvX2ZpbmRfc3RydWN0KHN0cnVjdCB1c2J2aWRlbyAqY2FtcykKK3sKKwlpbnQgdSwgcnYgPSAtMTsKKworCWlmIChjYW1zID09IE5VTEwpIHsKKwkJZXJyKCJObyB1c2J2aWRlbyBoYW5kbGU/Iik7CisJCXJldHVybiAtMTsKKwl9CisJZG93bigmY2Ftcy0+bG9jayk7CisJZm9yICh1ID0gMDsgdSA8IGNhbXMtPm51bV9jYW1lcmFzOyB1KyspIHsKKwkJc3RydWN0IHV2ZCAqdXZkID0gJmNhbXMtPmNhbVt1XTsKKwkJaWYgKCF1dmQtPnV2ZF91c2VkKSAvKiBUaGlzIG9uZSBpcyBmcmVlICovCisJCXsKKwkJCXV2ZC0+dXZkX3VzZWQgPSAxOwkvKiBJbiB1c2Ugbm93ICovCisJCQlpbml0X01VVEVYKCZ1dmQtPmxvY2spOwkvKiB0byAxID09IGF2YWlsYWJsZSAqLworCQkJdXZkLT5kZXYgPSBOVUxMOworCQkJcnYgPSB1OworCQkJYnJlYWs7CisJCX0KKwl9CisJdXAoJmNhbXMtPmxvY2spOworCXJldHVybiBydjsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNidmlkZW9fZm9wcyA9IHsKKwkub3duZXIgPSAgVEhJU19NT0RVTEUsCisJLm9wZW4gPSAgIHVzYnZpZGVvX3Y0bF9vcGVuLAorCS5yZWxlYXNlID11c2J2aWRlb192NGxfY2xvc2UsCisJLnJlYWQgPSAgIHVzYnZpZGVvX3Y0bF9yZWFkLAorCS5tbWFwID0gICB1c2J2aWRlb192NGxfbW1hcCwKKwkuaW9jdGwgPSAgdXNidmlkZW9fdjRsX2lvY3RsLAorCS5sbHNlZWsgPSBub19sbHNlZWssCit9Oworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgdXNidmlkZW9fdGVtcGxhdGUgPSB7CisJLm93bmVyID0gICAgICBUSElTX01PRFVMRSwKKwkudHlwZSA9ICAgICAgIFZJRF9UWVBFX0NBUFRVUkUsCisJLmhhcmR3YXJlID0gICBWSURfSEFSRFdBUkVfQ1BJQSwKKwkuZm9wcyA9ICAgICAgICZ1c2J2aWRlb19mb3BzLAorfTsKKworc3RydWN0IHV2ZCAqdXNidmlkZW9fQWxsb2NhdGVEZXZpY2Uoc3RydWN0IHVzYnZpZGVvICpjYW1zKQoreworCWludCBpLCBkZXZudW07CisJc3RydWN0IHV2ZCAqdXZkID0gTlVMTDsKKworCWlmIChjYW1zID09IE5VTEwpIHsKKwkJZXJyKCJObyB1c2J2aWRlbyBoYW5kbGU/Iik7CisJCXJldHVybiBOVUxMOworCX0KKworCWRldm51bSA9IHVzYnZpZGVvX2ZpbmRfc3RydWN0KGNhbXMpOworCWlmIChkZXZudW0gPT0gLTEpIHsKKwkJZXJyKCJJQk0gVVNCIGNhbWVyYSBkcml2ZXI6IFRvbyBtYW55IGRldmljZXMhIik7CisJCXJldHVybiBOVUxMOworCX0KKwl1dmQgPSAmY2Ftcy0+Y2FtW2Rldm51bV07CisJZGJnKCJEZXZpY2UgZW50cnkgIyVkLiBhdCAkJXAiLCBkZXZudW0sIHV2ZCk7CisKKwkvKiBOb3QgcmVseWluZyB1cG9uIGNhbGxlciB3ZSBpbmNyZWFzZSBtb2R1bGUgY291bnRlciBvdXJzZWx2ZXMgKi8KKwl1c2J2aWRlb19DbGllbnRJbmNNb2RDb3VudCh1dmQpOworCisJZG93bigmdXZkLT5sb2NrKTsKKwlmb3IgKGk9MDsgaSA8IFVTQlZJREVPX05VTVNCVUY7IGkrKykgeworCQl1dmQtPnNidWZbaV0udXJiID0gdXNiX2FsbG9jX3VyYihGUkFNRVNfUEVSX0RFU0MsIEdGUF9LRVJORUwpOworCQlpZiAodXZkLT5zYnVmW2ldLnVyYiA9PSBOVUxMKSB7CisJCQllcnIoInVzYl9hbGxvY191cmIoJWQuKSBmYWlsZWQuIiwgRlJBTUVTX1BFUl9ERVNDKTsKKwkJCXV2ZC0+dXZkX3VzZWQgPSAwOworCQkJdXZkID0gTlVMTDsKKwkJCWdvdG8gYWxsb2NhdGVfZG9uZTsKKwkJfQorCX0KKwl1dmQtPnVzZXI9MDsKKwl1dmQtPnJlbW92ZV9wZW5kaW5nID0gMDsKKwl1dmQtPmxhc3RfZXJyb3IgPSAwOworCVJpbmdRdWV1ZV9Jbml0aWFsaXplKCZ1dmQtPmRwKTsKKworCS8qIEluaXRpYWxpemUgdmlkZW8gZGV2aWNlIHN0cnVjdHVyZSAqLworCXV2ZC0+dmRldiA9IHVzYnZpZGVvX3RlbXBsYXRlOworCXNwcmludGYodXZkLT52ZGV2Lm5hbWUsICIlLjIwcyBVU0IgQ2FtZXJhIiwgY2Ftcy0+ZHJ2TmFtZSk7CisJLyoKKwkgKiBUaGUgY2xpZW50IGlzIGZyZWUgdG8gb3ZlcndyaXRlIHRob3NlIGJlY2F1c2Ugd2UKKwkgKiByZXR1cm4gY29udHJvbCB0byB0aGUgY2xpZW50J3MgcHJvYmUgZnVuY3Rpb24gcmlnaHQgbm93LgorCSAqLworYWxsb2NhdGVfZG9uZToKKwl1cCAoJnV2ZC0+bG9jayk7CisJdXNidmlkZW9fQ2xpZW50RGVjTW9kQ291bnQodXZkKTsKKwlyZXR1cm4gdXZkOworfQorCitFWFBPUlRfU1lNQk9MKHVzYnZpZGVvX0FsbG9jYXRlRGV2aWNlKTsKKworaW50IHVzYnZpZGVvX1JlZ2lzdGVyVmlkZW9EZXZpY2Uoc3RydWN0IHV2ZCAqdXZkKQoreworCWNoYXIgdG1wMVsyMF0sIHRtcDJbMjBdOwkvKiBCdWZmZXJzIGZvciBwcmludGluZyAqLworCisJaWYgKHV2ZCA9PSBOVUxMKSB7CisJCWVycigiJXM6IElsbGVnYWwgY2FsbC4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHV2ZC0+dmlkZW9fZW5kcCA9PSAwKSB7CisJCWluZm8oIiVzOiBObyB2aWRlbyBlbmRwb2ludCBzcGVjaWZpZWQ7IGRhdGEgcHVtcCBkaXNhYmxlZC4iLCBfX0ZVTkNUSU9OX18pOworCX0KKwlpZiAodXZkLT5wYWxldHRlQml0cyA9PSAwKSB7CisJCWVycigiJXM6IE5vIHBhbGV0dGVzIHNwZWNpZmllZCEiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHV2ZC0+ZGVmYXVsdFBhbGV0dGUgPT0gMCkgeworCQlpbmZvKCIlczogTm8gZGVmYXVsdCBwYWxldHRlISIsIF9fRlVOQ1RJT05fXyk7CisJfQorCisJdXZkLT5tYXhfZnJhbWVfc2l6ZSA9IFZJREVPU0laRV9YKHV2ZC0+Y2FudmFzKSAqCisJCVZJREVPU0laRV9ZKHV2ZC0+Y2FudmFzKSAqIFY0TF9CWVRFU19QRVJfUElYRUw7CisJdXNidmlkZW9fVmlkZW9zaXplVG9TdHJpbmcodG1wMSwgc2l6ZW9mKHRtcDEpLCB1dmQtPnZpZGVvc2l6ZSk7CisJdXNidmlkZW9fVmlkZW9zaXplVG9TdHJpbmcodG1wMiwgc2l6ZW9mKHRtcDIpLCB1dmQtPmNhbnZhcyk7CisKKwlpZiAodXZkLT5kZWJ1ZyA+IDApIHsKKwkJaW5mbygiJXM6IGlmYWNlPSVkLiBlbmRwb2ludD0kJTAyeCBwYWxldHRlQml0cz0kJTA4bHgiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgdXZkLT5pZmFjZSwgdXZkLT52aWRlb19lbmRwLCB1dmQtPnBhbGV0dGVCaXRzKTsKKwl9CisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmdXZkLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19ucikgPT0gLTEpIHsKKwkJZXJyKCIlczogdmlkZW9fcmVnaXN0ZXJfZGV2aWNlIGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRVBJUEU7CisJfQorCWlmICh1dmQtPmRlYnVnID4gMSkgeworCQlpbmZvKCIlczogdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCkgc3VjY2Vzc2Z1bCIsIF9fRlVOQ1RJT05fXyk7CisJfQorCWlmICh1dmQtPmRldiA9PSBOVUxMKSB7CisJCWVycigiJXM6IHV2ZC0+ZGV2ID09IE5VTEwiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpbmZvKCIlcyBvbiAvZGV2L3ZpZGVvJWQ6IGNhbnZhcz0lcyB2aWRlb3NpemU9JXMiLAorCSAgICAgKHV2ZC0+aGFuZGxlICE9IE5VTEwpID8gdXZkLT5oYW5kbGUtPmRydk5hbWUgOiAiPz8/IiwKKwkgICAgIHV2ZC0+dmRldi5taW5vciwgdG1wMiwgdG1wMSk7CisKKwl1c2JfZ2V0X2Rldih1dmQtPmRldik7CisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0wodXNidmlkZW9fUmVnaXN0ZXJWaWRlb0RldmljZSk7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKK3N0YXRpYyBpbnQgdXNidmlkZW9fdjRsX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCB1dmQgKnV2ZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gdm1hLT52bV9zdGFydDsKKwl1bnNpZ25lZCBsb25nIHNpemUgID0gdm1hLT52bV9lbmQtdm1hLT52bV9zdGFydDsKKwl1bnNpZ25lZCBsb25nIHBhZ2UsIHBvczsKKworCWlmICghQ0FNRVJBX0lTX09QRVJBVElPTkFMKHV2ZCkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHNpemUgPiAoKChVU0JWSURFT19OVU1GUkFNRVMgKiB1dmQtPm1heF9mcmFtZV9zaXplKSArIFBBR0VfU0laRSAtIDEpICYgfihQQUdFX1NJWkUgLSAxKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcG9zID0gKHVuc2lnbmVkIGxvbmcpIHV2ZC0+ZmJ1ZjsKKwl3aGlsZSAoc2l6ZSA+IDApIHsKKwkJcGFnZSA9IHZtYWxsb2NfdG9fcGZuKCh2b2lkICopcG9zKTsKKwkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwYWdlLCBQQUdFX1NJWkUsIFBBR0VfU0hBUkVEKSkKKwkJCXJldHVybiAtRUFHQUlOOworCisJCXN0YXJ0ICs9IFBBR0VfU0laRTsKKwkJcG9zICs9IFBBR0VfU0laRTsKKwkJaWYgKHNpemUgPiBQQUdFX1NJWkUpCisJCQlzaXplIC09IFBBR0VfU0laRTsKKwkJZWxzZQorCQkJc2l6ZSA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB1c2J2aWRlb192NGxfb3BlbigpCisgKgorICogVGhpcyBpcyBwYXJ0IG9mIFZpZGVvIDQgTGludXggQVBJLiBUaGUgZHJpdmVyIGNhbiBiZSBvcGVuZWQgYnkgb25lCisgKiBjbGllbnQgb25seSAoY2hlY2tzIGludGVybmFsIGNvdW50ZXIgJ3V2ZHNlcicpLiBUaGUgcHJvY2VkdXJlCisgKiB0aGVuIGFsbG9jYXRlcyBidWZmZXJzIG5lZWRlZCBmb3IgdmlkZW8gcHJvY2Vzc2luZy4KKyAqCisgKiBIaXN0b3J5OgorICogMjItSmFuLTIwMDAgUmV3cm90ZSwgbW92ZWQgc2NyYXRjaCBidWZmZXIgYWxsb2NhdGlvbiBoZXJlLiBOb3cgdGhlCisgKiAgICAgICAgICAgICBjYW1lcmEgaXMgYWxzbyBpbml0aWFsaXplZCBoZXJlIChvbmNlIHBlciBjb25uZWN0KSwgYXQKKyAqICAgICAgICAgICAgIGV4cGVuc2Ugb2YgVjRMIGNsaWVudCAoaXQgd2FpdHMgb24gb3BlbigpIGNhbGwpLgorICogMjctSmFuLTIwMDAgVXNlZCBVU0JWSURFT19OVU1TQlVGIGFzIG51bWJlciBvZiBVUkIgYnVmZmVycy4KKyAqIDI0LU1heS0yMDAwIENvcnJlY3RlZCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9uIChNT0RfeHh4X1VTRV9DT1VOVCkuCisgKi8KK3N0YXRpYyBpbnQgdXNidmlkZW9fdjRsX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdXZkICp1dmQgPSAoc3RydWN0IHV2ZCAqKSBkZXY7CisJY29uc3QgaW50IHNiX3NpemUgPSBGUkFNRVNfUEVSX0RFU0MgKiB1dmQtPmlzb19wYWNrZXRfbGVuOworCWludCBpLCBlcnJDb2RlID0gMDsKKworCWlmICh1dmQtPmRlYnVnID4gMSkKKwkJaW5mbygiJXMoJCVwKSIsIF9fRlVOQ1RJT05fXywgZGV2KTsKKworCXVzYnZpZGVvX0NsaWVudEluY01vZENvdW50KHV2ZCk7CisJZG93bigmdXZkLT5sb2NrKTsKKworCWlmICh1dmQtPnVzZXIpIHsKKwkJZXJyKCIlczogU29tZW9uZSB0cmllZCB0byBvcGVuIGFuIGFscmVhZHkgb3BlbmVkIGRldmljZSEiLCBfX0ZVTkNUSU9OX18pOworCQllcnJDb2RlID0gLUVCVVNZOworCX0gZWxzZSB7CisJCS8qIENsZWFyIHN0YXRpc3RpY3MgKi8KKwkJbWVtc2V0KCZ1dmQtPnN0YXRzLCAwLCBzaXplb2YodXZkLT5zdGF0cykpOworCisJCS8qIENsZWFuIHBvaW50ZXJzIHNvIHdlIGtub3cgaWYgd2UgYWxsb2NhdGVkIHNvbWV0aGluZyAqLworCQlmb3IgKGk9MDsgaSA8IFVTQlZJREVPX05VTVNCVUY7IGkrKykKKwkJCXV2ZC0+c2J1ZltpXS5kYXRhID0gTlVMTDsKKworCQkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBmcmFtZSBidWZmZXJzICovCisJCXV2ZC0+ZmJ1Zl9zaXplID0gVVNCVklERU9fTlVNRlJBTUVTICogdXZkLT5tYXhfZnJhbWVfc2l6ZTsKKwkJdXZkLT5mYnVmID0gdXNidmlkZW9fcnZtYWxsb2ModXZkLT5mYnVmX3NpemUpOworCQlSaW5nUXVldWVfQWxsb2NhdGUoJnV2ZC0+ZHAsIFJJTkdfUVVFVUVfU0laRSk7CisJCWlmICgodXZkLT5mYnVmID09IE5VTEwpIHx8CisJCSAgICAoIVJpbmdRdWV1ZV9Jc0FsbG9jYXRlZCgmdXZkLT5kcCkpKSB7CisJCQllcnIoIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgZmJ1ZiBvciBkcCIsIF9fRlVOQ1RJT05fXyk7CisJCQllcnJDb2RlID0gLUVOT01FTTsKKwkJfSBlbHNlIHsKKwkJCS8qIEFsbG9jYXRlIGFsbCBidWZmZXJzICovCisJCQlmb3IgKGk9MDsgaSA8IFVTQlZJREVPX05VTUZSQU1FUzsgaSsrKSB7CisJCQkJdXZkLT5mcmFtZVtpXS5mcmFtZVN0YXRlID0gRnJhbWVTdGF0ZV9VbnVzZWQ7CisJCQkJdXZkLT5mcmFtZVtpXS5kYXRhID0gdXZkLT5mYnVmICsgaSoodXZkLT5tYXhfZnJhbWVfc2l6ZSk7CisJCQkJLyoKKwkJCQkgKiBTZXQgZGVmYXVsdCBzaXplcyBpbiBjYXNlIElPQ1RMIChWSURJT0NNQ0FQVFVSRSkKKwkJCQkgKiBpcyBub3QgdXNlZCAodXNpbmcgcmVhZCgpIGluc3RlYWQpLgorCQkJCSAqLworCQkJCXV2ZC0+ZnJhbWVbaV0uY2FudmFzID0gdXZkLT5jYW52YXM7CisJCQkJdXZkLT5mcmFtZVtpXS5zZXFSZWFkX0luZGV4ID0gMDsKKwkJCX0KKwkJCWZvciAoaT0wOyBpIDwgVVNCVklERU9fTlVNU0JVRjsgaSsrKSB7CisJCQkJdXZkLT5zYnVmW2ldLmRhdGEgPSBrbWFsbG9jKHNiX3NpemUsIEdGUF9LRVJORUwpOworCQkJCWlmICh1dmQtPnNidWZbaV0uZGF0YSA9PSBOVUxMKSB7CisJCQkJCWVyckNvZGUgPSAtRU5PTUVNOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKGVyckNvZGUgIT0gMCkgeworCQkJLyogSGF2ZSB0byBmcmVlIGFsbCB0aGF0IG1lbW9yeSAqLworCQkJaWYgKHV2ZC0+ZmJ1ZiAhPSBOVUxMKSB7CisJCQkJdXNidmlkZW9fcnZmcmVlKHV2ZC0+ZmJ1ZiwgdXZkLT5mYnVmX3NpemUpOworCQkJCXV2ZC0+ZmJ1ZiA9IE5VTEw7CisJCQl9CisJCQlSaW5nUXVldWVfRnJlZSgmdXZkLT5kcCk7CisJCQlmb3IgKGk9MDsgaSA8IFVTQlZJREVPX05VTVNCVUY7IGkrKykgeworCQkJCWlmICh1dmQtPnNidWZbaV0uZGF0YSAhPSBOVUxMKSB7CisJCQkJCWtmcmVlICh1dmQtPnNidWZbaV0uZGF0YSk7CisJCQkJCXV2ZC0+c2J1ZltpXS5kYXRhID0gTlVMTDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKiBJZiBzbyBmYXIgbm8gZXJyb3JzIHRoZW4gd2Ugc2hhbGwgc3RhcnQgdGhlIGNhbWVyYSAqLworCWlmIChlcnJDb2RlID09IDApIHsKKwkJLyogU3RhcnQgZGF0YSBwdW1wIGlmIHdlIGhhdmUgdmFsaWQgZW5kcG9pbnQgKi8KKwkJaWYgKHV2ZC0+dmlkZW9fZW5kcCAhPSAwKQorCQkJZXJyQ29kZSA9IEdFVF9DQUxMQkFDSyh1dmQsIHN0YXJ0RGF0YVB1bXApKHV2ZCk7CisJCWlmIChlcnJDb2RlID09IDApIHsKKwkJCWlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIHNldHVwT25PcGVuKSkgeworCQkJCWlmICh1dmQtPmRlYnVnID4gMSkKKwkJCQkJaW5mbygiJXM6IHNldHVwT25PcGVuIGNhbGxiYWNrIiwgX19GVU5DVElPTl9fKTsKKwkJCQllcnJDb2RlID0gR0VUX0NBTExCQUNLKHV2ZCwgc2V0dXBPbk9wZW4pKHV2ZCk7CisJCQkJaWYgKGVyckNvZGUgPCAwKSB7CisJCQkJCWVycigiJXM6IHNldHVwT25PcGVuIGNhbGxiYWNrIGZhaWxlZCAoJWQuKS4iLAorCQkJCQkgICAgX19GVU5DVElPTl9fLCBlcnJDb2RlKTsKKwkJCQl9IGVsc2UgaWYgKHV2ZC0+ZGVidWcgPiAxKSB7CisJCQkJCWluZm8oIiVzOiBzZXR1cE9uT3BlbiBjYWxsYmFjayBzdWNjZXNzZnVsIiwgX19GVU5DVElPTl9fKTsKKwkJCQl9CisJCQl9CisJCQlpZiAoZXJyQ29kZSA9PSAwKSB7CisJCQkJdXZkLT5zZXR0aW5nc0FkanVzdGVkID0gMDsKKwkJCQlpZiAodXZkLT5kZWJ1ZyA+IDEpCisJCQkJCWluZm8oIiVzOiBPcGVuIHN1Y2NlZWRlZC4iLCBfX0ZVTkNUSU9OX18pOworCQkJCXV2ZC0+dXNlcisrOworCQkJCWZpbGUtPnByaXZhdGVfZGF0YSA9IHV2ZDsKKwkJCX0KKwkJfQorCX0KKwl1cCgmdXZkLT5sb2NrKTsKKwlpZiAoZXJyQ29kZSAhPSAwKQorCQl1c2J2aWRlb19DbGllbnREZWNNb2RDb3VudCh1dmQpOworCWlmICh1dmQtPmRlYnVnID4gMCkKKwkJaW5mbygiJXM6IFJldHVybmluZyAlZC4iLCBfX0ZVTkNUSU9OX18sIGVyckNvZGUpOworCXJldHVybiBlcnJDb2RlOworfQorCisvKgorICogdXNidmlkZW9fdjRsX2Nsb3NlKCkKKyAqCisgKiBUaGlzIGlzIHBhcnQgb2YgVmlkZW8gNCBMaW51eCBBUEkuIFRoZSBwcm9jZWR1cmUKKyAqIHN0b3BzIHN0cmVhbWluZyBhbmQgZGVhbGxvY2F0ZXMgYWxsIGJ1ZmZlcnMgdGhhdCB3ZXJlIGVhcmxpZXIKKyAqIGFsbG9jYXRlZCBpbiB1c2J2aWRlb192NGxfb3BlbigpLgorICoKKyAqIEhpc3Rvcnk6CisgKiAyMi1KYW4tMjAwMCBNb3ZlZCBzY3JhdGNoIGJ1ZmZlciBkZWFsbG9jYXRpb24gaGVyZS4KKyAqIDI3LUphbi0yMDAwIFVzZWQgVVNCVklERU9fTlVNU0JVRiBhcyBudW1iZXIgb2YgVVJCIGJ1ZmZlcnMuCisgKiAyNC1NYXktMjAwMCBNb3ZlZCBNT0RfREVDX1VTRV9DT1VOVCBvdXRzaWRlIG9mIGNvZGUgdGhhdCBjYW4gc2xlZXAuCisgKi8KK3N0YXRpYyBpbnQgdXNidmlkZW9fdjRsX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXZkICp1dmQgPSAoc3RydWN0IHV2ZCAqKSBkZXY7CisJaW50IGk7CisKKwlpZiAodXZkLT5kZWJ1ZyA+IDEpCisJCWluZm8oIiVzKCQlcCkiLCBfX0ZVTkNUSU9OX18sIGRldik7CisKKwlkb3duKCZ1dmQtPmxvY2spOworCUdFVF9DQUxMQkFDSyh1dmQsIHN0b3BEYXRhUHVtcCkodXZkKTsKKwl1c2J2aWRlb19ydmZyZWUodXZkLT5mYnVmLCB1dmQtPmZidWZfc2l6ZSk7CisJdXZkLT5mYnVmID0gTlVMTDsKKwlSaW5nUXVldWVfRnJlZSgmdXZkLT5kcCk7CisKKwlmb3IgKGk9MDsgaSA8IFVTQlZJREVPX05VTVNCVUY7IGkrKykgeworCQlrZnJlZSh1dmQtPnNidWZbaV0uZGF0YSk7CisJCXV2ZC0+c2J1ZltpXS5kYXRhID0gTlVMTDsKKwl9CisKKyNpZiBVU0JWSURFT19SRVBPUlRfU1RBVFMKKwl1c2J2aWRlb19SZXBvcnRTdGF0aXN0aWNzKHV2ZCk7CisjZW5kaWYgICAgCisKKwl1dmQtPnVzZXItLTsKKwlpZiAodXZkLT5yZW1vdmVfcGVuZGluZykgeworCQlpZiAodXZkLT5kZWJ1ZyA+IDApCisJCQlpbmZvKCJ1c2J2aWRlb192NGxfY2xvc2U6IEZpbmFsIGRpc2Nvbm5lY3QuIik7CisJCXVzYnZpZGVvX0NhbWVyYVJlbGVhc2UodXZkKTsKKwl9CisJdXAoJnV2ZC0+bG9jayk7CisJdXNidmlkZW9fQ2xpZW50RGVjTW9kQ291bnQodXZkKTsKKworCWlmICh1dmQtPmRlYnVnID4gMSkKKwkJaW5mbygiJXM6IENvbXBsZXRlZC4iLCBfX0ZVTkNUSU9OX18pOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB1c2J2aWRlb192NGxfaW9jdGwoKQorICoKKyAqIFRoaXMgaXMgcGFydCBvZiBWaWRlbyA0IExpbnV4IEFQSS4gVGhlIHByb2NlZHVyZSBoYW5kbGVzIGlvY3RsKCkgY2FsbHMuCisgKgorICogSGlzdG9yeToKKyAqIDIyLUphbi0yMDAwIENvcnJlY3RlZCBWSURJT0NTUElDVCB0byByZWplY3QgdW5zdXBwb3J0ZWQgc2V0dGluZ3MuCisgKi8KK3N0YXRpYyBpbnQgdXNidmlkZW9fdjRsX2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IHV2ZCAqdXZkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKCFDQU1FUkFfSVNfT1BFUkFUSU9OQUwodXZkKSkKKwkJcmV0dXJuIC1FSU87CisKKwlzd2l0Y2ggKGNtZCkgeworCQljYXNlIFZJRElPQ0dDQVA6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5ICpiID0gYXJnOworCQkJKmIgPSB1dmQtPnZjYXA7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ0dDSEFOOgorCQl7CisJCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdiA9IGFyZzsKKwkJCSp2ID0gdXZkLT52Y2hhbjsKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DU0NIQU46CisJCXsJCisJCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdiA9IGFyZzsKKwkJCWlmICh2LT5jaGFubmVsICE9IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ0dQSUNUOgorCQl7CisJCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcGljID0gYXJnOworCQkJKnBpYyA9IHV2ZC0+dnBpYzsKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DU1BJQ1Q6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19waWN0dXJlICpwaWMgPSBhcmc7CisJCQkvKgorCQkJICogVXNlIHRlbXBvcmFyeSAndmlkZW9fcGljdHVyZScgc3RydWN0dXJlIHRvIHByZXNlcnZlIG91cgorCQkJICogb3duIHNldHRpbmdzIChzdWNoIGFzIGNvbG9yIGRlcHRoLCBwYWxldHRlKSB0aGF0IHdlCisJCQkgKiBhcmVuJ3QgYWxsb3dpbmcgZXZlcnlvbmUgKFY0TCBjbGllbnQpIHRvIGNoYW5nZS4KKwkJCSAqLworCQkJdXZkLT52cGljLmJyaWdodG5lc3MgPSBwaWMtPmJyaWdodG5lc3M7CisJCQl1dmQtPnZwaWMuaHVlID0gcGljLT5odWU7CisJCQl1dmQtPnZwaWMuY29sb3VyID0gcGljLT5jb2xvdXI7CisJCQl1dmQtPnZwaWMuY29udHJhc3QgPSBwaWMtPmNvbnRyYXN0OworCQkJdXZkLT5zZXR0aW5nc0FkanVzdGVkID0gMDsJLyogV2lsbCBmb3JjZSBuZXcgc2V0dGluZ3MgKi8KKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DU1dJTjoKKwkJeworCQkJc3RydWN0IHZpZGVvX3dpbmRvdyAqdncgPSBhcmc7CisKKwkJCWlmKFZBTElEX0NBTExCQUNLKHV2ZCwgc2V0VmlkZW9Nb2RlKSkgeworCQkJCXJldHVybiBHRVRfQ0FMTEJBQ0sodXZkLCBzZXRWaWRlb01vZGUpKHV2ZCwgdncpOworCQkJfQorCisJCQlpZiAodnctPmZsYWdzKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKHZ3LT5jbGlwY291bnQpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAodnctPndpZHRoICE9IFZJREVPU0laRV9YKHV2ZC0+Y2FudmFzKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmICh2dy0+aGVpZ2h0ICE9IFZJREVPU0laRV9ZKHV2ZC0+Y2FudmFzKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NHV0lOOgorCQl7CisJCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICp2dyA9IGFyZzsKKworCQkJdnctPnggPSAwOworCQkJdnctPnkgPSAwOworCQkJdnctPndpZHRoID0gVklERU9TSVpFX1godXZkLT52aWRlb3NpemUpOworCQkJdnctPmhlaWdodCA9IFZJREVPU0laRV9ZKHV2ZC0+dmlkZW9zaXplKTsKKwkJCXZ3LT5jaHJvbWFrZXkgPSAwOworCQkJaWYgKFZBTElEX0NBTExCQUNLKHV2ZCwgZ2V0RlBTKSkKKwkJCQl2dy0+ZmxhZ3MgPSBHRVRfQ0FMTEJBQ0sodXZkLCBnZXRGUFMpKHV2ZCk7CisJCQllbHNlIAorCQkJCXZ3LT5mbGFncyA9IDEwOyAvKiBGSVhNRTogZG8gYmV0dGVyISAqLworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NHTUJVRjoKKwkJeworCQkJc3RydWN0IHZpZGVvX21idWYgKnZtID0gYXJnOworCQkJaW50IGk7CisKKwkJCW1lbXNldCh2bSwgMCwgc2l6ZW9mKCp2bSkpOworCQkJdm0tPnNpemUgPSB1dmQtPm1heF9mcmFtZV9zaXplICogVVNCVklERU9fTlVNRlJBTUVTOworCQkJdm0tPmZyYW1lcyA9IFVTQlZJREVPX05VTUZSQU1FUzsKKwkJCWZvcihpID0gMDsgaSA8IFVTQlZJREVPX05VTUZSQU1FUzsgaSsrKSAKKwkJCSAgdm0tPm9mZnNldHNbaV0gPSBpICogdXZkLT5tYXhfZnJhbWVfc2l6ZTsKKworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NNQ0FQVFVSRToKKwkJeworCQkJc3RydWN0IHZpZGVvX21tYXAgKnZtID0gYXJnOworCisJCQlpZiAodXZkLT5kZWJ1ZyA+PSAxKSB7CisJCQkJaW5mbygiVklESU9DTUNBUFRVUkU6IGZyYW1lPSVkLiBzaXplPSVkeCVkLCBmb3JtYXQ9JWQuIiwKKwkJCQkgICAgIHZtLT5mcmFtZSwgdm0tPndpZHRoLCB2bS0+aGVpZ2h0LCB2bS0+Zm9ybWF0KTsKKwkJCX0KKwkJCS8qCisJCQkgKiBDaGVjayBpZiB0aGUgcmVxdWVzdGVkIHNpemUgaXMgc3VwcG9ydGVkLiBJZiB0aGUgcmVxdWVzdG9yCisJCQkgKiByZXF1ZXN0cyB0b28gYmlnIGEgZnJhbWUgdGhlbiB3ZSBtYXkgYmUgdHJpY2tlZCBpbnRvIGFjY2Vzc2luZworCQkJICogb3V0c2lkZSBvZiBvd24gcHJlYWxsb2NhdGVkIGZyYW1lIGJ1ZmZlciAoaW4gdXZkLT5mcmFtZSkuCisJCQkgKiBUaGlzIHdpbGwgY2F1c2Ugb29wcyBvciBhIHNlY3VyaXR5IGhvbGUuIFRoZW9yZXRpY2FsbHksIHdlCisJCQkgKiBjb3VsZCBvbmx5IGNsYW1wIHRoZSBzaXplIGRvd24gdG8gYWNjZXB0YWJsZSBib3VuZHMsIGJ1dCB0aGVuCisJCQkgKiB3ZSdkIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gaW5zZXJ0IG91ciBzbWFsbGVyIGJ1ZmZlciBpbnRvCisJCQkgKiBsYXJnZXIgY2FsbGVyJ3MgYnVmZmVyLi4uIHRoaXMgaXMgbm90IGFuIGVhc3kgcXVlc3Rpb24uIFNvIHdlCisJCQkgKiBoZXJlIGp1c3QgZmxhdGx5IHJlamVjdCB0b28gbGFyZ2UgcmVxdWVzdHMsIGFzc3VtaW5nIHRoYXQgdGhlCisJCQkgKiBjYWxsZXIgd2lsbCByZXN1Ym1pdCB3aXRoIHNtYWxsZXIgc2l6ZS4gQ2FsbGVycyBzaG91bGQga25vdworCQkJICogd2hhdCBzaXplIHdlIHN1cHBvcnQgKHJldHVybmVkIGJ5IFZJRElPQ0dDQVApLiBIb3dldmVyIHZpZGNhdCwKKwkJCSAqIGZvciBvbmUsIGRvZXMgbm90IGNhcmUgYW5kIGFsbG93cyB0byBhc2sgZm9yIGFueSBzaXplLgorCQkJICovCisJCQlpZiAoKHZtLT53aWR0aCA+IFZJREVPU0laRV9YKHV2ZC0+Y2FudmFzKSkgfHwKKwkJCSAgICAodm0tPmhlaWdodCA+IFZJREVPU0laRV9ZKHV2ZC0+Y2FudmFzKSkpIHsKKwkJCQlpZiAodXZkLT5kZWJ1ZyA+IDApIHsKKwkJCQkJaW5mbygiVklESU9DTUNBUFRVUkU6IFNpemU9JWR4JWQgdG9vIGxhcmdlOyAiCisJCQkJCSAgICAgImFsbG93ZWQgb25seSB1cCB0byAlbGR4JWxkIiwgdm0tPndpZHRoLCB2bS0+aGVpZ2h0LAorCQkJCQkgICAgIFZJREVPU0laRV9YKHV2ZC0+Y2FudmFzKSwgVklERU9TSVpFX1kodXZkLT5jYW52YXMpKTsKKwkJCQl9CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQkvKiBDaGVjayBpZiB0aGUgcGFsZXR0ZSBpcyBzdXBwb3J0ZWQgKi8KKwkJCWlmICgoKDFMIDw8IHZtLT5mb3JtYXQpICYgdXZkLT5wYWxldHRlQml0cykgPT0gMCkgeworCQkJCWlmICh1dmQtPmRlYnVnID4gMCkgeworCQkJCQlpbmZvKCJWSURJT0NNQ0FQVFVSRTogZm9ybWF0PSVkLiBub3Qgc3VwcG9ydGVkIgorCQkJCQkgICAgICIgKHBhbGV0dGVCaXRzPSQlMDhseCkiLAorCQkJCQkgICAgIHZtLT5mb3JtYXQsIHV2ZC0+cGFsZXR0ZUJpdHMpOworCQkJCX0KKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWlmICgodm0tPmZyYW1lIDwgMCkgfHwgKHZtLT5mcmFtZSA+PSBVU0JWSURFT19OVU1GUkFNRVMpKSB7CisJCQkJZXJyKCJWSURJT0NNQ0FQVFVSRTogdm0uZnJhbWU9JWQuICFFIFswLSVkXSIsIHZtLT5mcmFtZSwgVVNCVklERU9fTlVNRlJBTUVTLTEpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJaWYgKHV2ZC0+ZnJhbWVbdm0tPmZyYW1lXS5mcmFtZVN0YXRlID09IEZyYW1lU3RhdGVfR3JhYmJpbmcpIHsKKwkJCQkvKiBOb3QgYW4gZXJyb3IgLSBjYW4gaGFwcGVuICovCisJCQl9CisJCQl1dmQtPmZyYW1lW3ZtLT5mcmFtZV0ucmVxdWVzdCA9IFZJREVPU0laRSh2bS0+d2lkdGgsIHZtLT5oZWlnaHQpOworCQkJdXZkLT5mcmFtZVt2bS0+ZnJhbWVdLnBhbGV0dGUgPSB2bS0+Zm9ybWF0OworCisJCQkvKiBNYXJrIGl0IGFzIHJlYWR5ICovCisJCQl1dmQtPmZyYW1lW3ZtLT5mcmFtZV0uZnJhbWVTdGF0ZSA9IEZyYW1lU3RhdGVfUmVhZHk7CisKKwkJCXJldHVybiB1c2J2aWRlb19OZXdGcmFtZSh1dmQsIHZtLT5mcmFtZSk7CisJCX0KKwkJY2FzZSBWSURJT0NTWU5DOgorCQl7CisJCQlpbnQgKmZyYW1lTnVtID0gYXJnOworCQkJaW50IHJldDsKKworCQkJaWYgKCpmcmFtZU51bSA8IDAgfHwgKmZyYW1lTnVtID49IFVTQlZJREVPX05VTUZSQU1FUykKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQkKKwkJCWlmICh1dmQtPmRlYnVnID49IDEpCisJCQkJaW5mbygiVklESU9DU1lOQzogc3luY2luZyB0byBmcmFtZSAlZC4iLCAqZnJhbWVOdW0pOworCQkJaWYgKHV2ZC0+ZmxhZ3MgJiBGTEFHU19OT19ERUNPRElORykKKwkJCQlyZXQgPSB1c2J2aWRlb19HZXRGcmFtZSh1dmQsICpmcmFtZU51bSk7CisJCQllbHNlIGlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIGdldEZyYW1lKSkgeworCQkJCXJldCA9IEdFVF9DQUxMQkFDSyh1dmQsIGdldEZyYW1lKSh1dmQsICpmcmFtZU51bSk7CisJCQkJaWYgKChyZXQgPCAwKSAmJiAodXZkLT5kZWJ1ZyA+PSAxKSkgeworCQkJCQllcnIoIlZJRElPQ1NZTkM6IGdldEZyYW1lKCkgcmV0dXJuZWQgJWQuIiwgcmV0KTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWVycigiVklESU9DU1lOQzogZ2V0RnJhbWUgaXMgbm90IHNldCIpOworCQkJCXJldCA9IC1FRkFVTFQ7CisJCQl9CisKKwkJCS8qCisJCQkgKiBUaGUgZnJhbWUgaXMgaW4gRnJhbWVTdGF0ZV9Eb25lX0hvbGQgc3RhdGUuIFJlbGVhc2UgaXQKKwkJCSAqIHJpZ2h0IG5vdyBiZWNhdXNlIGl0cyBkYXRhIGlzIGFscmVhZHkgbWFwcGVkIGludG8KKwkJCSAqIHRoZSB1c2VyIHNwYWNlIGFuZCBpdCdzIHVwIHRvIHRoZSBhcHBsaWNhdGlvbiB0bworCQkJICogbWFrZSB1c2Ugb2YgaXQgdW50aWwgaXQgYXNrcyBmb3IgYW5vdGhlciBmcmFtZS4KKwkJCSAqLworCQkJdXZkLT5mcmFtZVsqZnJhbWVOdW1dLmZyYW1lU3RhdGUgPSBGcmFtZVN0YXRlX1VudXNlZDsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJY2FzZSBWSURJT0NHRkJVRjoKKwkJeworCQkJc3RydWN0IHZpZGVvX2J1ZmZlciAqdmIgPSBhcmc7CisKKwkJCW1lbXNldCh2YiwgMCwgc2l6ZW9mKCp2YikpOworIAkJCXJldHVybiAwOworIAkJfQorCQljYXNlIFZJRElPQ0tFWToKKwkJCXJldHVybiAwOworCisJCWNhc2UgVklESU9DQ0FQVFVSRToKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWNhc2UgVklESU9DU0ZCVUY6CisKKwkJY2FzZSBWSURJT0NHVFVORVI6CisJCWNhc2UgVklESU9DU1RVTkVSOgorCisJCWNhc2UgVklESU9DR0ZSRVE6CisJCWNhc2UgVklESU9DU0ZSRVE6CisKKwkJY2FzZSBWSURJT0NHQVVESU86CisJCWNhc2UgVklESU9DU0FVRElPOgorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzYnZpZGVvX3Y0bF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIHVzYnZpZGVvX3Y0bF9kb19pb2N0bCk7Cit9CisKKy8qCisgKiB1c2J2aWRlb192NGxfcmVhZCgpCisgKgorICogVGhpcyBpcyBtb3N0bHkgYm9yaW5nIHN0dWZmLiBXZSBzaW1wbHkgYXNrIGZvciBhIGZyYW1lIGFuZCB3aGVuIGl0CisgKiBhcnJpdmVzIGNvcHkgYWxsIHRoZSB2aWRlbyBkYXRhIGZyb20gaXQgaW50byB1c2VyIHNwYWNlLiBUaGVyZSBpcworICogbm8gb2J2aW91cyBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgbWV0aG9kLgorICoKKyAqIEhpc3Rvcnk6CisgKiAyMC1PY3QtMjAwMCBDcmVhdGVkLgorICogMDEtTm92LTIwMDAgQWRkZWQgbXV0ZXggKHV2ZC0+bG9jaykuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHVzYnZpZGVvX3Y0bF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdXZkICp1dmQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IG5vYmxvY2sgPSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSzsKKwlpbnQgZnJteCA9IC0xLCBpOworCXN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWU7CisKKwlpZiAoIUNBTUVSQV9JU19PUEVSQVRJT05BTCh1dmQpIHx8IChidWYgPT0gTlVMTCkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHV2ZC0+ZGVidWcgPj0gMSkKKwkJaW5mbygiJXM6ICVaZC4gYnl0ZXMsIG5vYmxvY2s9JWQuIiwgX19GVU5DVElPTl9fLCBjb3VudCwgbm9ibG9jayk7CisKKwlkb3duKCZ1dmQtPmxvY2spOwkKKworCS8qIFNlZSBpZiBhIGZyYW1lIGlzIGNvbXBsZXRlZCwgdGhlbiB1c2UgaXQuICovCisJZm9yKGkgPSAwOyBpIDwgVVNCVklERU9fTlVNRlJBTUVTOyBpKyspIHsKKwkJaWYgKCh1dmQtPmZyYW1lW2ldLmZyYW1lU3RhdGUgPT0gRnJhbWVTdGF0ZV9Eb25lKSB8fAorCQkgICAgKHV2ZC0+ZnJhbWVbaV0uZnJhbWVTdGF0ZSA9PSBGcmFtZVN0YXRlX0RvbmVfSG9sZCkgfHwKKwkJICAgICh1dmQtPmZyYW1lW2ldLmZyYW1lU3RhdGUgPT0gRnJhbWVTdGF0ZV9FcnJvcikpIHsKKwkJCWZybXggPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBGSVhNRTogSWYgd2UgZG9uJ3Qgc3RhcnQgYSBmcmFtZSBoZXJlIHRoZW4gd2hvIGV2ZXIgZG9lcz8gKi8KKwlpZiAobm9ibG9jayAmJiAoZnJteCA9PSAtMSkpIHsKKwkJY291bnQgPSAtRUFHQUlOOworCQlnb3RvIHJlYWRfZG9uZTsKKwl9CisKKwkvKgorCSAqIElmIG5vIEZyYW1lU3RhdGVfRG9uZSwgbG9vayBmb3IgYSBGcmFtZVN0YXRlX0dyYWJiaW5nIHN0YXRlLgorCSAqIFNlZSBpZiBhIGZyYW1lIGlzIGluIHByb2Nlc3MgKGdyYWJiaW5nKSwgdGhlbiB1c2UgaXQuCisJICogV2Ugd2lsbCBuZWVkIHRvIHdhaXQgdW50aWwgaXQgYmVjb21lcyBjb29rZWQsIG9mIGNvdXJzZS4KKwkgKi8KKwlpZiAoZnJteCA9PSAtMSkgeworCQlmb3IoaSA9IDA7IGkgPCBVU0JWSURFT19OVU1GUkFNRVM7IGkrKykgeworCQkJaWYgKHV2ZC0+ZnJhbWVbaV0uZnJhbWVTdGF0ZSA9PSBGcmFtZVN0YXRlX0dyYWJiaW5nKSB7CisJCQkJZnJteCA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIElmIG5vIGZyYW1lIGlzIGFjdGl2ZSwgc3RhcnQgb25lLiBXZSBkb24ndCBjYXJlIHdoaWNoIG9uZQorCSAqIGl0IHdpbGwgYmUsIHNvICMwIGlzIGFzIGdvb2QgYXMgYW55LgorCSAqIEluIHJlYWQgYWNjZXNzIG1vZGUgd2UgZG9uJ3QgaGF2ZSBjb252ZW5pZW5jZSBvZiBWSURJT0NNQ0FQVFVSRQorCSAqIHRvIHNwZWNpZnkgdGhlIHJlcXVlc3RlZCBwYWxldHRlICh2aWRlbyBmb3JtYXQpIG9uIHBlci1mcmFtZQorCSAqIGJhc2lzLiBUaGlzIG1lYW5zIHRoYXQgd2UgaGF2ZSB0byByZXR1cm4gZGF0YSBpbiAtc29tZS0gZm9ybWF0CisJICogYW5kIGp1c3QgaG9wZSB0aGF0IHRoZSBjbGllbnQga25vd3Mgd2hhdCB0byBkbyB3aXRoIGl0LgorCSAqIFRoZSBkZWZhdWx0IGZvcm1hdCBpcyBjb25maWd1cmVkIGluIHV2ZC0+ZGVmYXVsdFBhbGV0dGUgZmllbGQKKwkgKiBhcyBvbmUgb2YgVklERU9fUEFMRVRURV94eHggdmFsdWVzLiBXZSBzdHVmZiBpdCBpbnRvIHRoZSBuZXcKKwkgKiBmcmFtZSBhbmQgaW5pdGlhdGUgdGhlIGZyYW1lIGZpbGxpbmcgcHJvY2Vzcy4KKwkgKi8KKwlpZiAoZnJteCA9PSAtMSkgeworCQlpZiAodXZkLT5kZWZhdWx0UGFsZXR0ZSA9PSAwKSB7CisJCQllcnIoIiVzOiBObyBkZWZhdWx0IHBhbGV0dGU7IGRvbid0IGtub3cgd2hhdCB0byBkbyEiLCBfX0ZVTkNUSU9OX18pOworCQkJY291bnQgPSAtRUZBVUxUOworCQkJZ290byByZWFkX2RvbmU7CisJCX0KKwkJZnJteCA9IDA7CisJCS8qCisJCSAqIFdlIGhhdmUgbm8gcGVyLWZyYW1lIGNvbnRyb2wgb3ZlciB2aWRlbyBzaXplLgorCQkgKiBUaGVyZWZvcmUgd2Ugb25seSBjYW4gdXNlIHdoYXRldmVyIHNpemUgd2FzCisJCSAqIHNwZWNpZmllZCBhcyBkZWZhdWx0LgorCQkgKi8KKwkJdXZkLT5mcmFtZVtmcm14XS5yZXF1ZXN0ID0gdXZkLT52aWRlb3NpemU7CisJCXV2ZC0+ZnJhbWVbZnJteF0ucGFsZXR0ZSA9IHV2ZC0+ZGVmYXVsdFBhbGV0dGU7CisJCXV2ZC0+ZnJhbWVbZnJteF0uZnJhbWVTdGF0ZSA9IEZyYW1lU3RhdGVfUmVhZHk7CisJCXVzYnZpZGVvX05ld0ZyYW1lKHV2ZCwgZnJteCk7CisJCS8qIE5vdyBmcmFtZSAwIGlzIHN1cHBvc2VkIHRvIHN0YXJ0IGZpbGxpbmcuLi4gKi8KKwl9CisKKwkvKgorCSAqIEdldCBhIHBvaW50ZXIgdG8gdGhlIGFjdGl2ZSBmcmFtZS4gSXQgaXMgZWl0aGVyIHByZXZpb3VzbHkKKwkgKiBjb21wbGV0ZWQgZnJhbWUgb3IgZnJhbWUgaW4gcHJvZ3Jlc3MgYnV0IG5vdCBjb21wbGV0ZWQgeWV0LgorCSAqLworCWZyYW1lID0gJnV2ZC0+ZnJhbWVbZnJteF07CisKKwkvKgorCSAqIFNpdCBiYWNrICYgd2FpdCB1bnRpbCB0aGUgZnJhbWUgZ2V0cyBmaWxsZWQgYW5kIHBvc3Rwcm9jZXNzZWQuCisJICogSWYgd2UgZmFpbCB0byBnZXQgdGhlIHBpY3R1cmUgW2luIHRpbWVdIHRoZW4gcmV0dXJuIHRoZSBlcnJvci4KKwkgKiBJbiB0aGlzIGNhbGwgd2Ugc3BlY2lmeSB0aGF0IHdlIHdhbnQgdGhlIGZyYW1lIHRvIGJlIHdhaXRlZCBmb3IsCisJICogcG9zdHByb2Nlc3NlZCBhbmQgc3dpdGNoZWQgaW50byBGcmFtZVN0YXRlX0RvbmVfSG9sZCBzdGF0ZS4gVGhpcworCSAqIHN0YXRlIGlzIHVzZWQgdG8gaG9sZCB0aGUgZnJhbWUgYXMgImZ1bGx5IGNvbXBsZXRlZCIgYmV0d2VlbgorCSAqIHN1YnNlcXVlbnQgcGFydGlhbCByZWFkcyBvZiB0aGUgc2FtZSBmcmFtZS4KKwkgKi8KKwlpZiAoZnJhbWUtPmZyYW1lU3RhdGUgIT0gRnJhbWVTdGF0ZV9Eb25lX0hvbGQpIHsKKwkJbG9uZyBydiA9IC1FRkFVTFQ7CisJCWlmICh1dmQtPmZsYWdzICYgRkxBR1NfTk9fREVDT0RJTkcpCisJCQlydiA9IHVzYnZpZGVvX0dldEZyYW1lKHV2ZCwgZnJteCk7CisJCWVsc2UgaWYgKFZBTElEX0NBTExCQUNLKHV2ZCwgZ2V0RnJhbWUpKQorCQkJcnYgPSBHRVRfQ0FMTEJBQ0sodXZkLCBnZXRGcmFtZSkodXZkLCBmcm14KTsKKwkJZWxzZQorCQkJZXJyKCJnZXRGcmFtZSBpcyBub3Qgc2V0Iik7CisJCWlmICgocnYgIT0gMCkgfHwgKGZyYW1lLT5mcmFtZVN0YXRlICE9IEZyYW1lU3RhdGVfRG9uZV9Ib2xkKSkgeworCQkJY291bnQgPSBydjsKKwkJCWdvdG8gcmVhZF9kb25lOworCQl9CisJfQorCisJLyoKKwkgKiBDb3B5IGJ5dGVzIHRvIHVzZXIgc3BhY2UuIFdlIGFsbG93IGZvciBwYXJ0aWFsIHJlYWRzLCB3aGljaAorCSAqIG1lYW5zIHRoYXQgdGhlIHVzZXIgYXBwbGljYXRpb24gY2FuIHJlcXVlc3QgcmVhZCBsZXNzIHRoYW4KKwkgKiB0aGUgZnVsbCBmcmFtZSBzaXplLiBJdCBpcyB1cCB0byB0aGUgYXBwbGljYXRpb24gdG8gaXNzdWUKKwkgKiBzdWJzZXF1ZW50IGNhbGxzIHVudGlsIGVudGlyZSBmcmFtZSBpcyByZWFkLgorCSAqCisJICogRmlyc3QgdGhpbmdzIGZpcnN0LCBtYWtlIHN1cmUgd2UgZG9uJ3QgY29weSBtb3JlIHRoYW4gd2UKKwkgKiBoYXZlIC0gZXZlbiBpZiB0aGUgYXBwbGljYXRpb24gd2FudHMgbW9yZS4gVGhhdCB3b3VsZCBiZQorCSAqIGEgYmlnIHNlY3VyaXR5IGVtYmFyYXNzbWVudCEKKwkgKi8KKwlpZiAoKGNvdW50ICsgZnJhbWUtPnNlcVJlYWRfSW5kZXgpID4gZnJhbWUtPnNlcVJlYWRfTGVuZ3RoKQorCQljb3VudCA9IGZyYW1lLT5zZXFSZWFkX0xlbmd0aCAtIGZyYW1lLT5zZXFSZWFkX0luZGV4OworCisJLyoKKwkgKiBDb3B5IHJlcXVlc3RlZCBhbW91bnQgb2YgZGF0YSB0byB1c2VyIHNwYWNlLiBXZSBzdGFydAorCSAqIGNvcHlpbmcgZnJvbSB0aGUgcG9zaXRpb24gd2hlcmUgd2UgbGFzdCBsZWZ0IGl0LCB3aGljaAorCSAqIHdpbGwgYmUgemVybyBmb3IgYSBuZXcgZnJhbWUgKG5vdCByZWFkIGJlZm9yZSkuCisJICovCisJaWYgKGNvcHlfdG9fdXNlcihidWYsIGZyYW1lLT5kYXRhICsgZnJhbWUtPnNlcVJlYWRfSW5kZXgsIGNvdW50KSkgeworCQljb3VudCA9IC1FRkFVTFQ7CisJCWdvdG8gcmVhZF9kb25lOworCX0KKworCS8qIFVwZGF0ZSBsYXN0IHJlYWQgcG9zaXRpb24gKi8KKwlmcmFtZS0+c2VxUmVhZF9JbmRleCArPSBjb3VudDsKKwlpZiAodXZkLT5kZWJ1ZyA+PSAxKSB7CisJCWVycigiJXM6IHtjb3B5fSBjb3VudCB1c2VkPSVaZCwgbmV3IHNlcVJlYWRfSW5kZXg9JWxkIiwKKwkJCV9fRlVOQ1RJT05fXywgY291bnQsIGZyYW1lLT5zZXFSZWFkX0luZGV4KTsKKwl9CisKKwkvKiBGaW5hbGx5IGNoZWNrIGlmIHRoZSBmcmFtZSBpcyBkb25lIHdpdGggYW5kICJyZWxlYXNlIiBpdCAqLworCWlmIChmcmFtZS0+c2VxUmVhZF9JbmRleCA+PSBmcmFtZS0+c2VxUmVhZF9MZW5ndGgpIHsKKwkJLyogQWxsIGRhdGEgaGFzIGJlZW4gcmVhZCAqLworCQlmcmFtZS0+c2VxUmVhZF9JbmRleCA9IDA7CisKKwkJLyogTWFyayBpdCBhcyBhdmFpbGFibGUgdG8gYmUgdXNlZCBhZ2Fpbi4gKi8KKwkJdXZkLT5mcmFtZVtmcm14XS5mcmFtZVN0YXRlID0gRnJhbWVTdGF0ZV9VbnVzZWQ7CisJCWlmICh1c2J2aWRlb19OZXdGcmFtZSh1dmQsIChmcm14ICsgMSkgJSBVU0JWSURFT19OVU1GUkFNRVMpKSB7CisJCQllcnIoIiVzOiB1c2J2aWRlb19OZXdGcmFtZSBmYWlsZWQuIiwgX19GVU5DVElPTl9fKTsKKwkJfQorCX0KK3JlYWRfZG9uZToKKwl1cCgmdXZkLT5sb2NrKTsJCisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogTWFrZSBhbGwgb2YgdGhlIGJsb2NrcyBvZiBkYXRhIGNvbnRpZ3VvdXMKKyAqLworc3RhdGljIGludCB1c2J2aWRlb19Db21wcmVzc0lzb2Nocm9ub3VzKHN0cnVjdCB1dmQgKnV2ZCwgc3RydWN0IHVyYiAqdXJiKQoreworCWNoYXIgKmNkYXRhOworCWludCBpLCB0b3RsZW4gPSAwOworCisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQlpbnQgbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKKwkJaW50IHN0ID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7CisKKwkJY2RhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OworCisJCS8qIERldGVjdCBhbmQgaWdub3JlIGVycm9yZWQgcGFja2V0cyAqLworCQlpZiAoc3QgPCAwKSB7CisJCQlpZiAodXZkLT5kZWJ1ZyA+PSAxKQorCQkJCWVycigiRGF0YSBlcnJvcjogcGFja2V0PSVkLiBsZW49JWQuIHN0YXR1cz0lZC4iLCBpLCBuLCBzdCk7CisJCQl1dmQtPnN0YXRzLmlzb19lcnJfY291bnQrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogRGV0ZWN0IGFuZCBpZ25vcmUgZW1wdHkgcGFja2V0cyAqLworCQlpZiAobiA8PSAwKSB7CisJCQl1dmQtPnN0YXRzLmlzb19za2lwX2NvdW50Kys7CisJCQljb250aW51ZTsKKwkJfQorCQl0b3RsZW4gKz0gbjsJLyogTGl0dGxlIGxvY2FsIGFjY291bnRpbmcgKi8KKwkJUmluZ1F1ZXVlX0VucXVldWUoJnV2ZC0+ZHAsIGNkYXRhLCBuKTsKKwl9CisJcmV0dXJuIHRvdGxlbjsKK30KKworc3RhdGljIHZvaWQgdXNidmlkZW9fSXNvY0lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBpLCByZXQsIGxlbjsKKwlzdHJ1Y3QgdXZkICp1dmQgPSB1cmItPmNvbnRleHQ7CisKKwkvKiBXZSBkb24ndCB3YW50IHRvIGRvIGFueXRoaW5nIGlmIHdlIGFyZSBhYm91dCB0byBiZSByZW1vdmVkISAqLworCWlmICghQ0FNRVJBX0lTX09QRVJBVElPTkFMKHV2ZCkpCisJCXJldHVybjsKKyNpZiAwCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IDApIHsKKwkJaW5mbygidXJiPSQlcCBzdGF0dXM9JWQuIGVycmNvdW50PSVkLiBsZW5ndGg9JWQuIiwKKwkJICAgICB1cmIsIHVyYi0+c3RhdHVzLCB1cmItPmVycm9yX2NvdW50LCB1cmItPmFjdHVhbF9sZW5ndGgpOworCX0gZWxzZSB7CisJCXN0YXRpYyBpbnQgYyA9IDA7CisJCWlmIChjKysgJSAxMDAgPT0gMCkKKwkJCWluZm8oIk5vIElzb2MgZGF0YSIpOworCX0KKyNlbmRpZgorCisJaWYgKCF1dmQtPnN0cmVhbWluZykgeworCQlpZiAodXZkLT5kZWJ1ZyA+PSAxKQorCQkJaW5mbygiTm90IHN0cmVhbWluZywgYnV0IGludGVycnVwdCEiKTsKKwkJcmV0dXJuOworCX0KKwkKKwl1dmQtPnN0YXRzLnVyYl9jb3VudCsrOworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPD0gMCkKKwkJZ290byB1cmJfZG9uZV93aXRoOworCisJLyogQ29weSB0aGUgZGF0YSByZWNlaXZlZCBpbnRvIHJpbmcgcXVldWUgKi8KKwlsZW4gPSB1c2J2aWRlb19Db21wcmVzc0lzb2Nocm9ub3VzKHV2ZCwgdXJiKTsKKwl1dmQtPnN0YXRzLnVyYl9sZW5ndGggPSBsZW47CisJaWYgKGxlbiA8PSAwKQorCQlnb3RvIHVyYl9kb25lX3dpdGg7CisKKwkvKiBIZXJlIHdlIGdvdCBzb21lIGRhdGEgKi8KKwl1dmQtPnN0YXRzLmRhdGFfY291bnQgKz0gbGVuOworCVJpbmdRdWV1ZV9XYWtlVXBJbnRlcnJ1cHRpYmxlKCZ1dmQtPmRwKTsKKwordXJiX2RvbmVfd2l0aDoKKwlmb3IgKGkgPSAwOyBpIDwgRlJBTUVTX1BFUl9ERVNDOyBpKyspIHsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMgPSAwOworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggPSAwOworCX0KKwl1cmItPnN0YXR1cyA9IDA7CisJdXJiLT5kZXYgPSB1dmQtPmRldjsKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfS0VSTkVMKTsKKwlpZihyZXQpCisJCWVycigidXNiX3N1Ym1pdF91cmIgZXJyb3IgKCVkKSIsIHJldCk7CisJcmV0dXJuOworfQorCisvKgorICogdXNidmlkZW9fU3RhcnREYXRhUHVtcCgpCisgKgorICogSGlzdG9yeToKKyAqIDI3LUphbi0yMDAwIFVzZWQgaWJtY2FtLT5pZmFjZSwgaWJtY2FtLT5pZmFjZUFsdEFjdGl2ZSBpbnN0ZWFkCisgKiAgICAgICAgICAgICBvZiBoYXJkY29kZWQgdmFsdWVzLiBTaW1wbGlmaWVkIGJ5IHVzaW5nIGZvciBsb29wLAorICogICAgICAgICAgICAgYWxsb3dlZCBhbnkgbnVtYmVyIG9mIFVSQnMuCisgKi8KK3N0YXRpYyBpbnQgdXNidmlkZW9fU3RhcnREYXRhUHVtcChzdHJ1Y3QgdXZkICp1dmQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHV2ZC0+ZGV2OworCWludCBpLCBlcnJGbGFnOworCisJaWYgKHV2ZC0+ZGVidWcgPiAxKQorCQlpbmZvKCIlcygkJXApIiwgX19GVU5DVElPTl9fLCB1dmQpOworCisJaWYgKCFDQU1FUkFfSVNfT1BFUkFUSU9OQUwodXZkKSkgeworCQllcnIoIiVzOiBDYW1lcmEgaXMgbm90IG9wZXJhdGlvbmFsIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCXV2ZC0+Y3VyZnJhbWUgPSAtMTsKKworCS8qIEFsdGVybmF0ZSBpbnRlcmZhY2UgMSBpcyBpcyB0aGUgYmlnZ2VzdCBmcmFtZSBzaXplICovCisJaSA9IHVzYl9zZXRfaW50ZXJmYWNlKGRldiwgdXZkLT5pZmFjZSwgdXZkLT5pZmFjZUFsdEFjdGl2ZSk7CisJaWYgKGkgPCAwKSB7CisJCWVycigiJXM6IHVzYl9zZXRfaW50ZXJmYWNlIGVycm9yIiwgX19GVU5DVElPTl9fKTsKKwkJdXZkLT5sYXN0X2Vycm9yID0gaTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJaWYgKFZBTElEX0NBTExCQUNLKHV2ZCwgdmlkZW9TdGFydCkpCisJCUdFVF9DQUxMQkFDSyh1dmQsIHZpZGVvU3RhcnQpKHV2ZCk7CisJZWxzZSAKKwkJZXJyKCIlczogdmlkZW9TdGFydCBub3Qgc2V0IiwgX19GVU5DVElPTl9fKTsKKworCS8qIFdlIGRvdWJsZSBidWZmZXIgdGhlIElzbyBsaXN0cyAqLworCWZvciAoaT0wOyBpIDwgVVNCVklERU9fTlVNU0JVRjsgaSsrKSB7CisJCWludCBqLCBrOworCQlzdHJ1Y3QgdXJiICp1cmIgPSB1dmQtPnNidWZbaV0udXJiOworCQl1cmItPmRldiA9IGRldjsKKwkJdXJiLT5jb250ZXh0ID0gdXZkOworCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUoZGV2LCB1dmQtPnZpZGVvX2VuZHApOworCQl1cmItPmludGVydmFsID0gMTsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSB1dmQtPnNidWZbaV0uZGF0YTsKKwkJdXJiLT5jb21wbGV0ZSA9IHVzYnZpZGVvX0lzb2NJcnE7CisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBGUkFNRVNfUEVSX0RFU0M7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHV2ZC0+aXNvX3BhY2tldF9sZW4gKiBGUkFNRVNfUEVSX0RFU0M7CisJCWZvciAoaj1rPTA7IGogPCBGUkFNRVNfUEVSX0RFU0M7IGorKywgayArPSB1dmQtPmlzb19wYWNrZXRfbGVuKSB7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLm9mZnNldCA9IGs7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLmxlbmd0aCA9IHV2ZC0+aXNvX3BhY2tldF9sZW47CisJCX0KKwl9CisKKwkvKiBTdWJtaXQgYWxsIFVSQnMgKi8KKwlmb3IgKGk9MDsgaSA8IFVTQlZJREVPX05VTVNCVUY7IGkrKykgeworCQllcnJGbGFnID0gdXNiX3N1Ym1pdF91cmIodXZkLT5zYnVmW2ldLnVyYiwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnJGbGFnKQorCQkJZXJyKCIlczogdXNiX3N1Ym1pdF9pc29jKCVkKSByZXQgJWQiLCBfX0ZVTkNUSU9OX18sIGksIGVyckZsYWcpOworCX0KKworCXV2ZC0+c3RyZWFtaW5nID0gMTsKKwlpZiAodXZkLT5kZWJ1ZyA+IDEpCisJCWluZm8oIiVzOiBzdHJlYW1pbmc9MSB2aWRlb19lbmRwPSQlMDJ4IiwgX19GVU5DVElPTl9fLCB1dmQtPnZpZGVvX2VuZHApOworCXJldHVybiAwOworfQorCisvKgorICogdXNidmlkZW9fU3RvcERhdGFQdW1wKCkKKyAqCisgKiBUaGlzIHByb2NlZHVyZSBzdG9wcyBzdHJlYW1pbmcgYW5kIGRlYWxsb2NhdGVzIFVSQnMuIFRoZW4gaXQKKyAqIGFjdGl2YXRlcyB6ZXJvLWJhbmR3aWR0aCBhbHQuIHNldHRpbmcgb2YgdGhlIHZpZGVvIGludGVyZmFjZS4KKyAqCisgKiBIaXN0b3J5OgorICogMjItSmFuLTIwMDAgQ29ycmVjdGVkIG9yZGVyIG9mIGFjdGlvbnMgdG8gd29yayBhZnRlciBzdXJwcmlzZSByZW1vdmFsLgorICogMjctSmFuLTIwMDAgVXNlZCB1dmQtPmlmYWNlLCB1dmQtPmlmYWNlQWx0SW5hY3RpdmUgaW5zdGVhZCBvZiBoYXJkY29kZWQgdmFsdWVzLgorICovCitzdGF0aWMgdm9pZCB1c2J2aWRlb19TdG9wRGF0YVB1bXAoc3RydWN0IHV2ZCAqdXZkKQoreworCWludCBpLCBqOworCisJaWYgKCh1dmQgPT0gTlVMTCkgfHwgKCF1dmQtPnN0cmVhbWluZykgfHwgKHV2ZC0+ZGV2ID09IE5VTEwpKQorCQlyZXR1cm47CisKKwlpZiAodXZkLT5kZWJ1ZyA+IDEpCisJCWluZm8oIiVzKCQlcCkiLCBfX0ZVTkNUSU9OX18sIHV2ZCk7CisKKwkvKiBVbnNjaGVkdWxlIGFsbCBvZiB0aGUgaXNvIHRkJ3MgKi8KKwlmb3IgKGk9MDsgaSA8IFVTQlZJREVPX05VTVNCVUY7IGkrKykgeworCQl1c2Jfa2lsbF91cmIodXZkLT5zYnVmW2ldLnVyYik7CisJfQorCWlmICh1dmQtPmRlYnVnID4gMSkKKwkJaW5mbygiJXM6IHN0cmVhbWluZz0wIiwgX19GVU5DVElPTl9fKTsKKwl1dmQtPnN0cmVhbWluZyA9IDA7CisKKwlpZiAoIXV2ZC0+cmVtb3ZlX3BlbmRpbmcpIHsKKwkJLyogSW52b2tlIG1pbmlkcml2ZXIncyBtYWdpYyB0byBzdG9wIHRoZSBjYW1lcmEgKi8KKwkJaWYgKFZBTElEX0NBTExCQUNLKHV2ZCwgdmlkZW9TdG9wKSkKKwkJCUdFVF9DQUxMQkFDSyh1dmQsIHZpZGVvU3RvcCkodXZkKTsKKwkJZWxzZSAKKwkJCWVycigiJXM6IHZpZGVvU3RvcCBub3Qgc2V0IiwgX19GVU5DVElPTl9fKTsKKworCQkvKiBTZXQgcGFja2V0IHNpemUgdG8gMCAqLworCQlqID0gdXNiX3NldF9pbnRlcmZhY2UodXZkLT5kZXYsIHV2ZC0+aWZhY2UsIHV2ZC0+aWZhY2VBbHRJbmFjdGl2ZSk7CisJCWlmIChqIDwgMCkgeworCQkJZXJyKCIlczogdXNiX3NldF9pbnRlcmZhY2UoKSBlcnJvciAlZC4iLCBfX0ZVTkNUSU9OX18sIGopOworCQkJdXZkLT5sYXN0X2Vycm9yID0gajsKKwkJfQorCX0KK30KKworLyoKKyAqIHVzYnZpZGVvX05ld0ZyYW1lKCkKKyAqCisgKiBIaXN0b3J5OgorICogMjktTWFyLTAwIEFkZGVkIGNvcHlpbmcgb2YgcHJldmlvdXMgZnJhbWUgaW50byB0aGUgY3VycmVudCBvbmUuCisgKiA2LUF1Zy0wMCAgQWRkZWQgbW9kZWwgMyB2aWRlbyBzaXplcywgcmVtb3ZlZCByZWR1bmRhbnQgd2lkdGgsIGhlaWdodC4KKyAqLworc3RhdGljIGludCB1c2J2aWRlb19OZXdGcmFtZShzdHJ1Y3QgdXZkICp1dmQsIGludCBmcmFtZW51bSkKK3sKKwlzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lOworCWludCBuOworCisJaWYgKHV2ZC0+ZGVidWcgPiAxKQorCQlpbmZvKCJ1c2J2aWRlb19OZXdGcmFtZSgkJXAsJWQuKSIsIHV2ZCwgZnJhbWVudW0pOworCisJLyogSWYgd2UncmUgbm90IGdyYWJiaW5nIGEgZnJhbWUgcmlnaHQgbm93IGFuZCB0aGUgb3RoZXIgZnJhbWUgaXMgKi8KKwkvKiAgcmVhZHkgdG8gYmUgZ3JhYmJlZCBpbnRvLCB0aGVuIHVzZSBpdCBpbnN0ZWFkICovCisJaWYgKHV2ZC0+Y3VyZnJhbWUgIT0gLTEpCisJCXJldHVybiAwOworCisJLyogSWYgbmVjZXNzYXJ5IHdlIGFkanVzdCBwaWN0dXJlIHNldHRpbmdzIGJldHdlZW4gZnJhbWVzICovCisJaWYgKCF1dmQtPnNldHRpbmdzQWRqdXN0ZWQpIHsKKwkJaWYgKFZBTElEX0NBTExCQUNLKHV2ZCwgYWRqdXN0UGljdHVyZSkpCisJCQlHRVRfQ0FMTEJBQ0sodXZkLCBhZGp1c3RQaWN0dXJlKSh1dmQpOworCQl1dmQtPnNldHRpbmdzQWRqdXN0ZWQgPSAxOworCX0KKworCW4gPSAoZnJhbWVudW0gKyAxKSAlIFVTQlZJREVPX05VTUZSQU1FUzsKKwlpZiAodXZkLT5mcmFtZVtuXS5mcmFtZVN0YXRlID09IEZyYW1lU3RhdGVfUmVhZHkpCisJCWZyYW1lbnVtID0gbjsKKworCWZyYW1lID0gJnV2ZC0+ZnJhbWVbZnJhbWVudW1dOworCisJZnJhbWUtPmZyYW1lU3RhdGUgPSBGcmFtZVN0YXRlX0dyYWJiaW5nOworCWZyYW1lLT5zY2Fuc3RhdGUgPSBTY2FuU3RhdGVfU2Nhbm5pbmc7CisJZnJhbWUtPnNlcVJlYWRfTGVuZ3RoID0gMDsJLyogQWNjdW11bGF0ZWQgaW4geHh4X3BhcnNlX2RhdGEoKSAqLworCWZyYW1lLT5kZWludGVybGFjZSA9IERlaW50ZXJsYWNlX05vbmU7CisJZnJhbWUtPmZsYWdzID0gMDsgLyogTm8gZmxhZ3MgeWV0LCB1cCB0byBtaW5pZHJpdmVyIChvciB1cykgdG8gc2V0IHRoZW0gKi8KKwl1dmQtPmN1cmZyYW1lID0gZnJhbWVudW07CisKKwkvKgorCSAqIE5vcm1hbGx5IHdlIHdvdWxkIHdhbnQgdG8gY29weSBwcmV2aW91cyBmcmFtZSBpbnRvIHRoZSBjdXJyZW50IG9uZQorCSAqIGJlZm9yZSB3ZSBldmVuIHN0YXJ0IGZpbGxpbmcgaXQgd2l0aCBkYXRhOyB0aGlzIGFsbG93cyB1cyB0byBzdG9wCisJICogZmlsbGluZyBhdCBhbnkgbW9tZW50OyB0b3AgcG9ydGlvbiBvZiB0aGUgZnJhbWUgd2lsbCBiZSBuZXcgYW5kCisJICogYm90dG9tIHBvcnRpb24gd2lsbCBzdGF5IGFzIGl0IHdhcyBpbiBwcmV2aW91cyBmcmFtZS4gSWYgd2UgZG9uJ3QKKwkgKiBkbyB0aGF0IHRoZW4gbWlzc2luZyBjaHVua3Mgb2YgdmlkZW8gc3RyZWFtIHdpbGwgcmVzdWx0IGluIGZsaWNrZXJpbmcKKwkgKiBwb3J0aW9ucyBvZiBvbGQgZGF0YSB3aGF0ZXZlciBpdCB3YXMgYmVmb3JlLgorCSAqCisJICogSWYgd2UgY2hvb3NlIG5vdCB0byBjb3B5IHByZXZpb3VzIGZyYW1lICh0bywgZm9yIGV4YW1wbGUsIHNhdmUgZmV3CisJICogYnVzIGN5Y2xlcyAtIHRoZSBmcmFtZSBjYW4gYmUgcHJldHR5IGxhcmdlISkgdGhlbiB3ZSBoYXZlIGFuIG9wdGlvbgorCSAqIHRvIGNsZWFyIHRoZSBmcmFtZSBiZWZvcmUgdXNpbmcuIElmIHdlIGV4cGVyaWVuY2UgbG9zc2VzIGluIHRoaXMKKwkgKiBtb2RlIHRoZW4gbWlzc2luZyBwaWN0dXJlIHdpbGwgYmUgYmxhY2sgKG5vIGZsaWNrZXJpbmcpLgorCSAqCisJICogRmluYWxseSwgaWYgdXNlciBjaG9vc2VzIG5vdCB0byBjbGVhbiB0aGUgY3VycmVudCBmcmFtZSBiZWZvcmUKKwkgKiBmaWxsaW5nIGl0IHdpdGggZGF0YSB0aGVuIHRoZSBvbGQgZGF0YSB3aWxsIGJlIHZpc2libGUgaWYgd2UgZmFpbAorCSAqIHRvIHJlZmlsbCBlbnRpcmUgZnJhbWUgd2l0aCBuZXcgZGF0YS4KKwkgKi8KKwlpZiAoISh1dmQtPmZsYWdzICYgRkxBR1NfU0VQQVJBVEVfRlJBTUVTKSkgeworCQkvKiBUaGlzIGNvcGllcyBwcmV2aW91cyBmcmFtZSBpbnRvIHRoaXMgb25lIHRvIG1hc2sgbG9zc2VzICovCisJCWludCBwcmV2ID0gKGZyYW1lbnVtIC0gMSArIFVTQlZJREVPX05VTUZSQU1FUykgJSBVU0JWSURFT19OVU1GUkFNRVM7CisJCW1lbW1vdmUoZnJhbWUtPmRhdGEsIHV2ZC0+ZnJhbWVbcHJldl0uZGF0YSwgdXZkLT5tYXhfZnJhbWVfc2l6ZSk7CisJfSBlbHNlIHsKKwkJaWYgKHV2ZC0+ZmxhZ3MgJiBGTEFHU19DTEVBTl9GUkFNRVMpIHsKKwkJCS8qIFRoaXMgcHJvdmlkZXMgYSAiY2xlYW4iIGZyYW1lIGJ1dCBzbG93cyB0aGluZ3MgZG93biAqLworCQkJbWVtc2V0KGZyYW1lLT5kYXRhLCAwLCB1dmQtPm1heF9mcmFtZV9zaXplKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHVzYnZpZGVvX0NvbGxlY3RSYXdEYXRhKCkKKyAqCisgKiBUaGlzIHByb2NlZHVyZSBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mICdwcm9jZXNzRGF0YScgY2FsbGJhY2sgaWYgeW91CisgKiBvbmx5IHdhbnQgdG8gZHVtcCB0aGUgcmF3IGRhdGEgZnJvbSB0aGUgY2FtZXJhIGludG8gdGhlIG91dHB1dAorICogZGV2aWNlIChmcmFtZSBidWZmZXIpLiBZb3UgY2FuIGxvb2sgYXQgaXQgd2l0aCBWNEwgY2xpZW50LCBidXQgdGhlCisgKiBpbWFnZSB3aWxsIGJlIHVud2F0Y2hhYmxlLiBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgY29kZSBhbmQgb2YgdGhlCisgKiBtb2RlIEZMQUdTX05PX0RFQ09ESU5HIGlzIGRlYnVnZ2luZyBhbmQgY2FwdHVyaW5nIG9mIGRhdGFzdHJlYW1zIGZyb20KKyAqIG5ldywgdW5rbm93biBjYW1lcmFzLiBUaGlzIHByb2NlZHVyZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW52b2tlZAorICogaW5zdGVhZCBvZiB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIGhhbmRsZXIgd2hlbiB1dmQtPmZsYWdzIGhhcyBiaXQKKyAqIEZMQUdTX05PX0RFQ09ESU5HIHNldC4gVGhlcmVmb3JlLCBhbnkgcmVndWxhciBidWlsZCBvZiBhbnkgZHJpdmVyCisgKiBiYXNlZCBvbiB1c2J2aWRlbyBjYW4gdXNlIHRoaXMgZmVhdHVyZSBhdCBhbnkgdGltZS4KKyAqLworc3RhdGljIHZvaWQgdXNidmlkZW9fQ29sbGVjdFJhd0RhdGEoc3RydWN0IHV2ZCAqdXZkLCBzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lKQoreworCWludCBuOworCisJYXNzZXJ0KHV2ZCAhPSBOVUxMKTsKKwlhc3NlcnQoZnJhbWUgIT0gTlVMTCk7CisKKwkvKiBUcnkgdG8gbW92ZSBkYXRhIGZyb20gcXVldWUgaW50byBmcmFtZSBidWZmZXIgKi8KKwluID0gUmluZ1F1ZXVlX0dldExlbmd0aCgmdXZkLT5kcCk7CisJaWYgKG4gPiAwKSB7CisJCWludCBtOworCQkvKiBTZWUgaG93IG11Y2ggc3BhY2Ugd2UgaGF2ZSBsZWZ0ICovCisJCW0gPSB1dmQtPm1heF9mcmFtZV9zaXplIC0gZnJhbWUtPnNlcVJlYWRfTGVuZ3RoOworCQlpZiAobiA+IG0pCisJCQluID0gbTsKKwkJLyogTm93IG1vdmUgdGhhdCBtdWNoIGRhdGEgaW50byBmcmFtZSBidWZmZXIgKi8KKwkJUmluZ1F1ZXVlX0RlcXVldWUoCisJCQkmdXZkLT5kcCwKKwkJCWZyYW1lLT5kYXRhICsgZnJhbWUtPnNlcVJlYWRfTGVuZ3RoLAorCQkJbSk7CisJCWZyYW1lLT5zZXFSZWFkX0xlbmd0aCArPSBtOworCX0KKwkvKiBTZWUgaWYgd2UgZmlsbGVkIHRoZSBmcmFtZSAqLworCWlmIChmcmFtZS0+c2VxUmVhZF9MZW5ndGggPj0gdXZkLT5tYXhfZnJhbWVfc2l6ZSkgeworCQlmcmFtZS0+ZnJhbWVTdGF0ZSA9IEZyYW1lU3RhdGVfRG9uZTsKKwkJdXZkLT5jdXJmcmFtZSA9IC0xOworCQl1dmQtPnN0YXRzLmZyYW1lX251bSsrOworCX0KK30KKworc3RhdGljIGludCB1c2J2aWRlb19HZXRGcmFtZShzdHJ1Y3QgdXZkICp1dmQsIGludCBmcmFtZU51bSkKK3sKKwlzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lID0gJnV2ZC0+ZnJhbWVbZnJhbWVOdW1dOworCisJaWYgKHV2ZC0+ZGVidWcgPj0gMikKKwkJaW5mbygiJXMoJCVwLCVkLikiLCBfX0ZVTkNUSU9OX18sIHV2ZCwgZnJhbWVOdW0pOworCisJc3dpdGNoIChmcmFtZS0+ZnJhbWVTdGF0ZSkgeworICAgICAgICBjYXNlIEZyYW1lU3RhdGVfVW51c2VkOgorCQlpZiAodXZkLT5kZWJ1ZyA+PSAyKQorCQkJaW5mbygiJXM6IEZyYW1lU3RhdGVfVW51c2VkIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisgICAgICAgIGNhc2UgRnJhbWVTdGF0ZV9SZWFkeToKKyAgICAgICAgY2FzZSBGcmFtZVN0YXRlX0dyYWJiaW5nOgorICAgICAgICBjYXNlIEZyYW1lU3RhdGVfRXJyb3I6CisgICAgICAgIHsKKwkJaW50IG50cmllcywgc2lnbmFsUGVuZGluZzsKKwlyZWRvOgorCQlpZiAoIUNBTUVSQV9JU19PUEVSQVRJT05BTCh1dmQpKSB7CisJCQlpZiAodXZkLT5kZWJ1ZyA+PSAyKQorCQkJCWluZm8oIiVzOiBDYW1lcmEgaXMgbm90IG9wZXJhdGlvbmFsICgxKSIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQludHJpZXMgPSAwOyAKKwkJZG8geworCQkJUmluZ1F1ZXVlX0ludGVycnVwdGlibGVTbGVlcE9uKCZ1dmQtPmRwKTsKKwkJCXNpZ25hbFBlbmRpbmcgPSBzaWduYWxfcGVuZGluZyhjdXJyZW50KTsKKwkJCWlmICghQ0FNRVJBX0lTX09QRVJBVElPTkFMKHV2ZCkpIHsKKwkJCQlpZiAodXZkLT5kZWJ1ZyA+PSAyKQorCQkJCQlpbmZvKCIlczogQ2FtZXJhIGlzIG5vdCBvcGVyYXRpb25hbCAoMikiLCBfX0ZVTkNUSU9OX18pOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQkJYXNzZXJ0KHV2ZC0+ZmJ1ZiAhPSBOVUxMKTsKKwkJCWlmIChzaWduYWxQZW5kaW5nKSB7CisJCQkJaWYgKHV2ZC0+ZGVidWcgPj0gMikKKwkJCQkJaW5mbygiJXM6IFNpZ25hbD0kJTA4eCIsIF9fRlVOQ1RJT05fXywgc2lnbmFsUGVuZGluZyk7CisJCQkJaWYgKHV2ZC0+ZmxhZ3MgJiBGTEFHU19SRVRSWV9WSURJT0NTWU5DKSB7CisJCQkJCXVzYnZpZGVvX1Rlc3RQYXR0ZXJuKHV2ZCwgMSwgMCk7CisJCQkJCXV2ZC0+Y3VyZnJhbWUgPSAtMTsKKwkJCQkJdXZkLT5zdGF0cy5mcmFtZV9udW0rKzsKKwkJCQkJaWYgKHV2ZC0+ZGVidWcgPj0gMikKKwkJCQkJCWluZm8oIiVzOiBGb3JjZWQgdGVzdCBwYXR0ZXJuIHNjcmVlbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJCXJldHVybiAwOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIFN0YW5kYXJkIGFuc3dlcjogSW50ZXJydXB0ZWQhICovCisJCQkJCWlmICh1dmQtPmRlYnVnID49IDIpCisJCQkJCQlpbmZvKCIlczogSW50ZXJydXB0ZWQhIiwgX19GVU5DVElPTl9fKTsKKwkJCQkJcmV0dXJuIC1FSU5UUjsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIE5vIHNpZ25hbHMgLSB3ZSBqdXN0IGdvdCBuZXcgZGF0YSBpbiBkcCBxdWV1ZSAqLworCQkJCWlmICh1dmQtPmZsYWdzICYgRkxBR1NfTk9fREVDT0RJTkcpCisJCQkJCXVzYnZpZGVvX0NvbGxlY3RSYXdEYXRhKHV2ZCwgZnJhbWUpOworCQkJCWVsc2UgaWYgKFZBTElEX0NBTExCQUNLKHV2ZCwgcHJvY2Vzc0RhdGEpKQorCQkJCQlHRVRfQ0FMTEJBQ0sodXZkLCBwcm9jZXNzRGF0YSkodXZkLCBmcmFtZSk7CisJCQkJZWxzZSAKKwkJCQkJZXJyKCIlczogcHJvY2Vzc0RhdGEgbm90IHNldCIsIF9fRlVOQ1RJT05fXyk7CisJCQl9CisJCX0gd2hpbGUgKGZyYW1lLT5mcmFtZVN0YXRlID09IEZyYW1lU3RhdGVfR3JhYmJpbmcpOworCQlpZiAodXZkLT5kZWJ1ZyA+PSAyKSB7CisJCQlpbmZvKCIlczogR3JhYmJpbmcgZG9uZTsgc3RhdGU9JWQuICglbHUuIGJ5dGVzKSIsCisJCQkgICAgIF9fRlVOQ1RJT05fXywgZnJhbWUtPmZyYW1lU3RhdGUsIGZyYW1lLT5zZXFSZWFkX0xlbmd0aCk7CisJCX0KKwkJaWYgKGZyYW1lLT5mcmFtZVN0YXRlID09IEZyYW1lU3RhdGVfRXJyb3IpIHsKKwkJCWludCByZXQgPSB1c2J2aWRlb19OZXdGcmFtZSh1dmQsIGZyYW1lTnVtKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJZXJyKCIlczogdXNidmlkZW9fTmV3RnJhbWUoKSBmYWlsZWQgKCVkLikiLCBfX0ZVTkNUSU9OX18sIHJldCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJCWdvdG8gcmVkbzsKKwkJfQorCQkvKiBOb3RlIHRoYXQgd2UgZmFsbCB0aHJvdWdoIHRvIG1lZXQgb3VyIGRlc3RpbnkgYmVsb3cgKi8KKyAgICAgICAgfQorICAgICAgICBjYXNlIEZyYW1lU3RhdGVfRG9uZToKKwkJLyoKKwkJICogRG8gYWxsIG5lY2Vzc2FyeSBwb3N0cHJvY2Vzc2luZyBvZiBkYXRhIHByZXBhcmVkIGluCisJCSAqICJpbnRlcnJ1cHQiIGNvZGUgYW5kIHRoZSBjb2xsZWN0aW5nIGNvZGUgYWJvdmUuIFRoZQorCQkgKiBmcmFtZSBnZXRzIG1hcmtlZCBhcyBGcmFtZVN0YXRlX0RvbmUgYnkgcXVldWUgcGFyc2luZyBjb2RlLgorCQkgKiBUaGlzIHN0YXR1cyBtZWFucyB0aGF0IHdlIGNvbGxlY3RlZCBlbm91Z2ggZGF0YSBhbmQKKwkJICogbW9zdCBsaWtlbHkgcHJvY2Vzc2VkIGl0IGFzIHdlIHdlbnQgdGhyb3VnaC4gSG93ZXZlcgorCQkgKiB0aGUgZGF0YSBtYXkgbmVlZCBwb3N0cHJvY2Vzc2luZywgc3VjaCBhcyBkZWludGVybGFjaW5nCisJCSAqIG9yIHBpY3R1cmUgYWRqdXN0bWVudHMgaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKGhvcnJvciEpCisJCSAqCisJCSAqIEFzIHNvb24gYXMgdGhlIGZyYW1lIGJlY29tZXMgImZpbmFsIiBpdCBnZXRzIHByb21vdGVkIHRvCisJCSAqIEZyYW1lU3RhdGVfRG9uZV9Ib2xkIHN0YXR1cyB3aGVyZSBpdCB3aWxsIHJlbWFpbiB1bnRpbCB0aGUKKwkJICogY2FsbGVyIGNvbnN1bWVkIGFsbCB0aGUgdmlkZW8gZGF0YSBmcm9tIHRoZSBmcmFtZS4gVGhlbgorCQkgKiB0aGUgZW1wdHkgc2hlbGwgb2YgZXgtZnJhbWUgaXMgdGhyb3duIG91dCBmb3IgZG9ncyB0byBlYXQuCisJCSAqIEJ1dCB3ZSwgd29ycmllZCBhYm91dCBwZXRzLCB3aWxsIHJlY3ljbGUgdGhlIGZyYW1lIQorCQkgKi8KKwkJdXZkLT5zdGF0cy5mcmFtZV9udW0rKzsKKwkJaWYgKCh1dmQtPmZsYWdzICYgRkxBR1NfTk9fREVDT0RJTkcpID09IDApIHsKKwkJCWlmIChWQUxJRF9DQUxMQkFDSyh1dmQsIHBvc3RQcm9jZXNzKSkKKwkJCQlHRVRfQ0FMTEJBQ0sodXZkLCBwb3N0UHJvY2VzcykodXZkLCBmcmFtZSk7CisJCQlpZiAoZnJhbWUtPmZsYWdzICYgVVNCVklERU9fRlJBTUVfRkxBR19TT0ZUV0FSRV9DT05UUkFTVCkKKwkJCQl1c2J2aWRlb19Tb2Z0d2FyZUNvbnRyYXN0QWRqdXN0bWVudCh1dmQsIGZyYW1lKTsKKwkJfQorCQlmcmFtZS0+ZnJhbWVTdGF0ZSA9IEZyYW1lU3RhdGVfRG9uZV9Ib2xkOworCQlpZiAodXZkLT5kZWJ1ZyA+PSAyKQorCQkJaW5mbygiJXM6IEVudGVyZWQgRnJhbWVTdGF0ZV9Eb25lX0hvbGQgc3RhdGUuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIEZyYW1lU3RhdGVfRG9uZV9Ib2xkOgorCQkvKgorCQkgKiBXZSBzdGF5IGluIHRoaXMgc3RhdGUgaW5kZWZpbml0ZWx5IHVudGlsIHNvbWVvbmUgZXh0ZXJuYWwsCisJCSAqIGxpa2UgaW9jdGwoKSBvciByZWFkKCkgY2FsbCBmaW5pc2hlcyBkaWdlc3RpbmcgdGhlIGZyYW1lCisJCSAqIGRhdGEuIFRoZW4gaXQgd2lsbCBtYXJrIHRoZSBmcmFtZSBhcyBGcmFtZVN0YXRlX1VudXNlZCBhbmQKKwkJICogaXQgd2lsbCBiZSByZWxlYXNlZCBiYWNrIGludG8gdGhlIHdpbGQgdG8gcm9hbSBmcmVlbHkuCisJCSAqLworCQlpZiAodXZkLT5kZWJ1ZyA+PSAyKQorCQkJaW5mbygiJXM6IEZyYW1lU3RhdGVfRG9uZV9Ib2xkIHN0YXRlLiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAwOworCX0KKworCS8qIENhdGNoLWFsbCBmb3Igb3RoZXIgY2FzZXMuIFdlIHNoYWxsIG5vdCBiZSBoZXJlLiAqLworCWVycigiJXM6IEludmFsaWQgc3RhdGUgJWQuIiwgX19GVU5DVElPTl9fLCBmcmFtZS0+ZnJhbWVTdGF0ZSk7CisJZnJhbWUtPmZyYW1lU3RhdGUgPSBGcmFtZVN0YXRlX1VudXNlZDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHVzYnZpZGVvX0RlaW50ZXJsYWNlRnJhbWUoKQorICoKKyAqIFRoaXMgcHJvY2VkdXJlIGRlaW50ZXJsYWNlcyB0aGUgZ2l2ZW4gZnJhbWUuIFNvbWUgY2FtZXJhcyBwcm9kdWNlCisgKiBvbmx5IGhhbGYgb2Ygc2NhbmxpbmVzIC0gc29tZXRpbWVzIG9ubHkgZXZlbiBsaW5lcywgc29tZXRpbWVzIG9ubHkKKyAqIG9kZCBsaW5lcy4gVGhlIGRlaW50ZXJsYWNpbmcgbWV0aG9kIGlzIHN0b3JlZCBpbiBmcmFtZS0+ZGVpbnRlcmxhY2UKKyAqIHZhcmlhYmxlLgorICoKKyAqIEhlcmUgd2Ugc2NhbiB0aGUgZnJhbWUgdmVydGljYWxseSBhbmQgcmVwbGFjZSBtaXNzaW5nIHNjYW5saW5lcyB3aXRoCisgKiBhdmVyYWdlIGJldHdlZW4gc3Vycm91bmRpbmcgb25lcyAtIGJlZm9yZSBhbmQgYWZ0ZXIuIElmIHdlIGhhdmUgbm8KKyAqIGxpbmUgYWJvdmUgdGhlbiB3ZSBqdXN0IGNvcHkgbmV4dCBsaW5lLiBTaW1pbGFybHksIGlmIHdlIG5lZWQgdG8KKyAqIGNyZWF0ZSBhIGxhc3QgbGluZSB0aGVuIHByZWNlZGluZyBsaW5lIGlzIHVzZWQuCisgKi8KK3ZvaWQgdXNidmlkZW9fRGVpbnRlcmxhY2VGcmFtZShzdHJ1Y3QgdXZkICp1dmQsIHN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUpCit7CisJaWYgKCh1dmQgPT0gTlVMTCkgfHwgKGZyYW1lID09IE5VTEwpKQorCQlyZXR1cm47CisKKwlpZiAoKGZyYW1lLT5kZWludGVybGFjZSA9PSBEZWludGVybGFjZV9GaWxsRXZlbkxpbmVzKSB8fAorCSAgICAoZnJhbWUtPmRlaW50ZXJsYWNlID09IERlaW50ZXJsYWNlX0ZpbGxPZGRMaW5lcykpCisJeworCQljb25zdCBpbnQgdjRsX2xpbmVzaXplID0gVklERU9TSVpFX1goZnJhbWUtPnJlcXVlc3QpICogVjRMX0JZVEVTX1BFUl9QSVhFTDsKKwkJaW50IGkgPSAoZnJhbWUtPmRlaW50ZXJsYWNlID09IERlaW50ZXJsYWNlX0ZpbGxFdmVuTGluZXMpID8gMCA6IDE7CisKKwkJZm9yICg7IGkgPCBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCk7IGkgKz0gMikgeworCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZnMxLCAqZnMyOworCQkJdW5zaWduZWQgY2hhciAqZmQ7CisJCQlpbnQgaXAsIGluLCBqOwkvKiBQcmV2aW91cyBhbmQgbmV4dCBsaW5lcyAqLworCisJCQkvKgorCQkJICogTmVlZCB0byBhdmVyYWdlIGxpbmVzIGJlZm9yZSBhbmQgYWZ0ZXIgJ2knLgorCQkJICogSWYgd2UgZ28gb3V0IG9mIGJvdW5kcyBzZWVraW5nIHRob3NlIGxpbmVzIHRoZW4KKwkJCSAqIHdlIHBvaW50IGJhY2sgdG8gZXhpc3RpbmcgbGluZS4KKwkJCSAqLworCQkJaXAgPSBpIC0gMTsJLyogRmlyc3QsIGdldCByb3VnaCBudW1iZXJzICovCisJCQlpbiA9IGkgKyAxOworCisJCQkvKiBOb3cgdmFsaWRhdGUgKi8KKwkJCWlmIChpcCA8IDApCisJCQkJaXAgPSBpbjsKKwkJCWlmIChpbiA+PSBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkpCisJCQkJaW4gPSBpcDsKKworCQkJLyogU2FuaXR5IGNoZWNrICovCisJCQlpZiAoKGlwIDwgMCkgfHwgKGluIDwgMCkgfHwKKwkJCSAgICAoaXAgPj0gVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpKSB8fAorCQkJICAgIChpbiA+PSBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkpKQorCQkJeworCQkJCWVycigiRXJyb3I6IGlwPSVkLiBpbj0lZC4gcmVxLmhlaWdodD0lbGQuIiwKKwkJCQkgICAgaXAsIGluLCBWSURFT1NJWkVfWShmcmFtZS0+cmVxdWVzdCkpOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBOb3cgd2UgbmVlZCB0byBhdmVyYWdlIGxpbmVzICdpcCcgYW5kICdpbicgdG8gcHJvZHVjZSBsaW5lICdpJyAqLworCQkJZnMxID0gZnJhbWUtPmRhdGEgKyAodjRsX2xpbmVzaXplICogaXApOworCQkJZnMyID0gZnJhbWUtPmRhdGEgKyAodjRsX2xpbmVzaXplICogaW4pOworCQkJZmQgPSBmcmFtZS0+ZGF0YSArICh2NGxfbGluZXNpemUgKiBpKTsKKworCQkJLyogQXZlcmFnZSBsaW5lcyBhcm91bmQgZGVzdGluYXRpb24gKi8KKwkJCWZvciAoaj0wOyBqIDwgdjRsX2xpbmVzaXplOyBqKyspIHsKKwkJCQlmZFtqXSA9ICh1bnNpZ25lZCBjaGFyKSgoKCh1bnNpZ25lZCkgZnMxW2pdKSArCisJCQkJCQkJICgodW5zaWduZWQpZnMyW2pdKSkgPj4gMSk7CisJCQl9CisJCX0KKwl9CisKKwkvKiBPcHRpb25hbGx5IGRpc3BsYXkgc3RhdGlzdGljcyBvbiB0aGUgc2NyZWVuICovCisJaWYgKHV2ZC0+ZmxhZ3MgJiBGTEFHU19PVkVSTEFZX1NUQVRTKQorCQl1c2J2aWRlb19PdmVybGF5U3RhdHModXZkLCBmcmFtZSk7Cit9CisKK0VYUE9SVF9TWU1CT0wodXNidmlkZW9fRGVpbnRlcmxhY2VGcmFtZSk7CisKKy8qCisgKiB1c2J2aWRlb19Tb2Z0d2FyZUNvbnRyYXN0QWRqdXN0bWVudCgpCisgKgorICogVGhpcyBjb2RlIGFkanVzdHMgdGhlIGNvbnRyYXN0IG9mIHRoZSBmcmFtZSwgYXNzdW1pbmcgUkdCMjQgZm9ybWF0LgorICogQXMgbW9zdCBzb2Z0d2FyZSBpbWFnZSBwcm9jZXNzaW5nLCB0aGlzIGpvYiBpcyBDUFUtaW50ZW5zaXZlLgorICogR2V0IGEgY2FtZXJhIHRoYXQgc3VwcG9ydHMgaGFyZHdhcmUgYWRqdXN0bWVudCEKKyAqCisgKiBIaXN0b3J5OgorICogMDktRmViLTIwMDEgIENyZWF0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIHVzYnZpZGVvX1NvZnR3YXJlQ29udHJhc3RBZGp1c3RtZW50KHN0cnVjdCB1dmQgKnV2ZCwgCisJCQkJCQlzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lKQoreworCWludCBpLCBqLCB2NGxfbGluZXNpemU7CisJc2lnbmVkIGxvbmcgYWRqOworCWNvbnN0IGludCBjY20gPSAxMjg7IC8qIENvbG9yIGNvcnJlY3Rpb24gbWVkaWFuIC0gc2VlIGJlbG93ICovCisKKwlpZiAoKHV2ZCA9PSBOVUxMKSB8fCAoZnJhbWUgPT0gTlVMTCkpIHsKKwkJZXJyKCIlczogSWxsZWdhbCBjYWxsLiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJYWRqID0gKHV2ZC0+dnBpYy5jb250cmFzdCAtIDB4ODAwMCkgPj4gODsgLyogLTEyOC4uKzEyNyA9IC1jY20uLisoY2NtLTEpKi8KKwlSRVNUUklDVF9UT19SQU5HRShhZGosIC1jY20sIGNjbSsxKTsKKwlpZiAoYWRqID09IDApIHsKKwkJLyogSW4gcmFyZSBjYXNlIG9mIG5vIGFkanVzdG1lbnQgKi8KKwkJcmV0dXJuOworCX0KKwl2NGxfbGluZXNpemUgPSBWSURFT1NJWkVfWChmcmFtZS0+cmVxdWVzdCkgKiBWNExfQllURVNfUEVSX1BJWEVMOworCWZvciAoaT0wOyBpIDwgVklERU9TSVpFX1koZnJhbWUtPnJlcXVlc3QpOyBpKyspIHsKKwkJdW5zaWduZWQgY2hhciAqZmQgPSBmcmFtZS0+ZGF0YSArICh2NGxfbGluZXNpemUgKiBpKTsKKwkJZm9yIChqPTA7IGogPCB2NGxfbGluZXNpemU7IGorKykgeworCQkJc2lnbmVkIGxvbmcgdiA9IChzaWduZWQgbG9uZykgZmRbal07CisJCQkvKiBNYWduaWZ5IHVwIHRvIDIgdGltZXMsIHJlZHVjZSBkb3duIHRvIHplcm8gKi8KKwkJCXYgPSAxMjggKyAoKGNjbSArIGFkaikgKiAodiAtIDEyOCkpIC8gY2NtOworCQkJUkVTVFJJQ1RfVE9fUkFOR0UodiwgMCwgMHhGRik7IC8qIE11c3QgZmxhdHRlbiB0YWlscyAqLworCQkJZmRbal0gPSAodW5zaWduZWQgY2hhcikgdjsKKwkJfQorCX0KK30KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvdXNidmlkZW8uaCBiL2RyaXZlcnMvdXNiL21lZGlhL3VzYnZpZGVvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMzOTBhMWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS91c2J2aWRlby5oCkBAIC0wLDAgKzEsMzkzIEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKyNpZm5kZWYgdXNidmlkZW9faAorI2RlZmluZQl1c2J2aWRlb19oCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisvKiBNb3N0IGhlbHBmdWwgZGVidWdnaW5nIGFpZCAqLworI2RlZmluZSBhc3NlcnQoZXhwcikgKCh2b2lkKSAoKGV4cHIpID8gMCA6IChlcnIoImFzc2VydCBmYWlsZWQgYXQgbGluZSAlZCIsX19MSU5FX18pKSkpCisKKyNkZWZpbmUgVVNCVklERU9fUkVQT1JUX1NUQVRTCTEJLyogU2V0IHRvIDAgdG8gYmxvY2sgc3RhdGlzdGljcyBvbiBjbG9zZSAqLworCisvKiBCaXQgZmxhZ3MgKG9wdGlvbnMpICovCisjZGVmaW5lIEZMQUdTX1JFVFJZX1ZJRElPQ1NZTkMJCSgxIDw8IDApCisjZGVmaW5lCUZMQUdTX01PTk9DSFJPTUUJCSgxIDw8IDEpCisjZGVmaW5lIEZMQUdTX0RJU1BMQVlfSElOVFMJCSgxIDw8IDIpCisjZGVmaW5lIEZMQUdTX09WRVJMQVlfU1RBVFMJCSgxIDw8IDMpCisjZGVmaW5lIEZMQUdTX0ZPUkNFX1RFU1RQQVRURVJOCQkoMSA8PCA0KQorI2RlZmluZSBGTEFHU19TRVBBUkFURV9GUkFNRVMJCSgxIDw8IDUpCisjZGVmaW5lIEZMQUdTX0NMRUFOX0ZSQU1FUwkJKDEgPDwgNikKKyNkZWZpbmUJRkxBR1NfTk9fREVDT0RJTkcJCSgxIDw8IDcpCisKKy8qIEJpdCBmbGFncyBmb3IgZnJhbWVzIChhcHBseSB0byB0aGUgZnJhbWUgd2hlcmUgdGhleSBhcmUgc3BlY2lmaWVkKSAqLworI2RlZmluZSBVU0JWSURFT19GUkFNRV9GTEFHX1NPRlRXQVJFX0NPTlRSQVNUCSgxIDw8IDApCisKKy8qIENhbWVyYSBjYXBhYmlsaXRpZXMgKG1heGltdW0pICovCisjZGVmaW5lIENBTUVSQV9VUkJfRlJBTUVTICAgICAgIDMyCisjZGVmaW5lIENBTUVSQV9NQVhfSVNPX1BBQ0tFVCAgIDEwMjMgLyogMTAyMiBhY3R1YWxseSBzZW50IGJ5IGNhbWVyYSAqLworI2RlZmluZSBGUkFNRVNfUEVSX0RFU0MJCShDQU1FUkFfVVJCX0ZSQU1FUykKKyNkZWZpbmUgRlJBTUVfU0laRV9QRVJfREVTQwkoQ0FNRVJBX01BWF9JU09fUEFDS0VUKQorCisvKiBUaGlzIG1hY3JvIHJlc3RyaWN0cyBhbiBpbnQgdmFyaWFibGUgdG8gYW4gaW5jbHVzaXZlIHJhbmdlICovCisjZGVmaW5lIFJFU1RSSUNUX1RPX1JBTkdFKHYsbWksbWEpIHsgaWYgKCh2KSA8IChtaSkpICh2KSA9IChtaSk7IGVsc2UgaWYgKCh2KSA+IChtYSkpICh2KSA9IChtYSk7IH0KKworI2RlZmluZSBWNExfQllURVNfUEVSX1BJWEVMICAgICAzCS8qIEJlY2F1c2Ugd2UgcHJvZHVjZSBSR0IyNCAqLworCisvKgorICogVXNlIHRoaXMgbWFjcm8gdG8gY29uc3RydWN0IGNvbnN0YW50cyBmb3IgZGlmZmVyZW50IHZpZGVvIHNpemVzLgorICogV2UgaGF2ZSB0byBkZWFsIHdpdGggZGlmZmVyZW50IHZpZGVvIHNpemVzIHRoYXQgaGF2ZSB0byBiZQorICogY29uZmlndXJlZCBpbiB0aGUgZGV2aWNlIG9yIGNvbXBhcmVkIGFnYWluc3Qgd2hlbiB3ZSByZWNlaXZlCisgKiBhIGRhdGEuIE5vcm1hbGx5IG9uZSB3b3VsZCBkZWZpbmUgYSBidW5jaCBvZiBWSURFT1NJWkVfeF9ieV95CisgKiAjZGVmaW5lcyBhbmQgdGhhdCdzIHRoZSBlbmQgb2Ygc3RvcnkuIEhvd2V2ZXIgdGhpcyBzb2x1dGlvbgorICogZG9lcyBub3QgYWxsb3cgdG8gY29udmVydCBiZXR3ZWVuIHJlYWwgcGl4ZWwgc2l6ZXMgYW5kIHRoZQorICogY29uc3RhbnQgKGludGVnZXIpIHZhbHVlIHRoYXQgbWF5IGJlIHVzZWQgdG8gdGFnIGEgZnJhbWUgb3IKKyAqIHdoYXRldmVyLiBUaGUgc2V0IG9mIG1hY3JvcyBiZWxvdyBjb25zdHJ1Y3RzIHZpZGVvc2l6ZSBjb25zdGFudHMKKyAqIGZyb20gdGhlIHBpeGVsIHNpemUgYW5kIGFsbG93cyB0byByZWNvbnN0cnVjdCB0aGUgcGl4ZWwgc2l6ZQorICogZnJvbSB0aGUgY29tYmluZWQgdmFsdWUgbGF0ZXIuCisgKi8KKyNkZWZpbmUJVklERU9TSVpFKHgseSkJKCgoeCkgJiAweEZGRkZMKSB8ICgoKHkpICYgMHhGRkZGTCkgPDwgMTYpKQorI2RlZmluZQlWSURFT1NJWkVfWCh2cykJKCh2cykgJiAweEZGRkZMKQorI2RlZmluZQlWSURFT1NJWkVfWSh2cykJKCgodnMpID4+IDE2KSAmIDB4RkZGRkwpCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdmlkZW9zaXplX3Q7CisKKy8qCisgKiBUaGlzIG1hY3JvIGNoZWNrcyBpZiB0aGUgY2FtZXJhIGlzIHN0aWxsIG9wZXJhdGlvbmFsLiBUaGUgJ3V2ZCcKKyAqIHBvaW50ZXIgbXVzdCBiZSB2YWxpZCwgdXZkLT5kZXYgbXVzdCBiZSB2YWxpZCwgd2UgYXJlIG5vdAorICogcmVtb3ZpbmcgdGhlIGRldmljZSBhbmQgdGhlIGRldmljZSBoYXMgbm90IGVycmVkIG9uIHVzLgorICovCisjZGVmaW5lIENBTUVSQV9JU19PUEVSQVRJT05BTCh1dmQpIChcCisJKHV2ZCAhPSBOVUxMKSAmJiBcCisJKCh1dmQpLT5kZXYgIT0gTlVMTCkgJiYgXAorCSgodXZkKS0+bGFzdF9lcnJvciA9PSAwKSAmJiBcCisJKCEodXZkKS0+cmVtb3ZlX3BlbmRpbmcpKQorCisvKgorICogV2UgdXNlIG1hY3JvcyB0byBkbyBZVVYgLT4gUkdCIGNvbnZlcnNpb24gYmVjYXVzZSB0aGlzIGlzCisgKiB2ZXJ5IGltcG9ydGFudCBmb3Igc3BlZWQgYW5kIHRvdGFsbHkgdW5pbXBvcnRhbnQgZm9yIHNpemUuCisgKgorICogWVVWIC0+IFJHQiBDb252ZXJzaW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBCID0gMS4xNjQqKFktMTYpCQkgICAgKyAyLjAxOCooVi0xMjgpCisgKiBHID0gMS4xNjQqKFktMTYpIC0gMC44MTMqKFUtMTI4KSAtIDAuMzkxKihWLTEyOCkKKyAqIFIgPSAxLjE2NCooWS0xNikgKyAxLjU5NiooVS0xMjgpCisgKgorICogSWYgeW91IGZhbmN5IGludGVnZXIgYXJpdGhtZXRpY3MgKGFzIHlvdSBzaG91bGQpLCBoZWFyIHRoaXM6CisgKgorICogNjU1MzYqQiA9IDc2Mjg0KihZLTE2KQkJICArIDEzMjI1MiooVi0xMjgpCisgKiA2NTUzNipHID0gNzYyODQqKFktMTYpIC0gIDUzMjgxKihVLTEyOCkgLSAgMjU2MjUqKFYtMTI4KQorICogNjU1MzYqUiA9IDc2Mjg0KihZLTE2KSArIDEwNDU5NSooVS0xMjgpCisgKgorICogTWFrZSBzdXJlIHRoZSBvdXRwdXQgdmFsdWVzIGFyZSB3aXRoaW4gWzAuLjI1NV0gcmFuZ2UuCisgKi8KKyNkZWZpbmUgTElNSVRfUkdCKHgpICgoKHgpIDwgMCkgPyAwIDogKCgoeCkgPiAyNTUpID8gMjU1IDogKHgpKSkKKyNkZWZpbmUgWVVWX1RPX1JHQl9CWV9USEVfQk9PSyhteSxtdSxtdixtcixtZyxtYikgeyBcCisgICAgaW50IG1tX3ksIG1tX3ljLCBtbV91LCBtbV92LCBtbV9yLCBtbV9nLCBtbV9iOyBcCisgICAgbW1feSA9IChteSkgLSAxNjsgIFwKKyAgICBtbV91ID0gKG11KSAtIDEyODsgXAorICAgIG1tX3YgPSAobXYpIC0gMTI4OyBcCisgICAgbW1feWM9IG1tX3kgKiA3NjI4NDsgXAorICAgIG1tX2IgPSAobW1feWMJCSsgMTMyMjUyKm1tX3YJKSA+PiAxNjsgXAorICAgIG1tX2cgPSAobW1feWMgLSAgNTMyODEqbW1fdSAtICAyNTYyNSptbV92CSkgPj4gMTY7IFwKKyAgICBtbV9yID0gKG1tX3ljICsgMTA0NTk1Km1tX3UJCQkpID4+IDE2OyBcCisgICAgbWIgPSBMSU1JVF9SR0IobW1fYik7IFwKKyAgICBtZyA9IExJTUlUX1JHQihtbV9nKTsgXAorICAgIG1yID0gTElNSVRfUkdCKG1tX3IpOyBcCit9CisKKyNkZWZpbmUJUklOR19RVUVVRV9TSVpFCQkoMTI4KjEwMjQpCS8qIE11c3QgYmUgYSBwb3dlciBvZiAyICovCisjZGVmaW5lCVJJTkdfUVVFVUVfQURWQU5DRV9JTkRFWChycSxpbmQsbikgKHJxKS0+aW5kID0gKChycSktPmluZCArIChuKSkgJiAoKHJxKS0+bGVuZ3RoLTEpCisjZGVmaW5lCVJJTkdfUVVFVUVfREVRVUVVRV9CWVRFUyhycSxuKSBSSU5HX1FVRVVFX0FEVkFOQ0VfSU5ERVgocnEscmksbikKKyNkZWZpbmUJUklOR19RVUVVRV9QRUVLKHJxLG9mcykgKChycSktPnF1ZXVlWygob2ZzKSArIChycSktPnJpKSAmICgocnEpLT5sZW5ndGgtMSldKQorCitzdHJ1Y3QgUmluZ1F1ZXVlIHsKKwl1bnNpZ25lZCBjaGFyICpxdWV1ZTsJLyogRGF0YSBmcm9tIHRoZSBJc29jIGRhdGEgcHVtcCAqLworCWludCBsZW5ndGg7CQkvKiBIb3cgbWFueSBieXRlcyBhbGxvY2F0ZWQgZm9yIHRoZSBxdWV1ZSAqLworCWludCB3aTsJCQkvKiBUaGF0J3Mgd2hlcmUgd2Ugd3JpdGUgKi8KKwlpbnQgcmk7CQkJLyogUmVhZCBmcm9tIGhlcmUgdW50aWwgeW91IGhpdCB3cml0ZSBpbmRleCAqLworCXdhaXRfcXVldWVfaGVhZF90IHdxaDsJLyogUHJvY2Vzc2VzIHdhaXRpbmcgKi8KK307CisKK2VudW0gU2NhblN0YXRlIHsKKwlTY2FuU3RhdGVfU2Nhbm5pbmcsCS8qIFNjYW5uaW5nIGZvciBoZWFkZXIgKi8KKwlTY2FuU3RhdGVfTGluZXMJCS8qIFBhcnNpbmcgbGluZXMgKi8KK307CisKKy8qIENvbXBsZXRpb24gc3RhdGVzIG9mIHRoZSBkYXRhIHBhcnNlciAqLworZW51bSBQYXJzZVN0YXRlIHsKKwlzY2FuX0NvbnRpbnVlLAkJLyogSnVzdCBwYXJzZSBuZXh0IGl0ZW0gKi8KKwlzY2FuX05leHRGcmFtZSwJCS8qIEZyYW1lIGRvbmUsIHNlbmQgaXQgdG8gVjRMICovCisJc2Nhbl9PdXQsCQkvKiBOb3QgZW5vdWdoIGRhdGEgZm9yIGZyYW1lICovCisJc2Nhbl9FbmRQYXJzZQkJLyogRW5kIHBhcnNpbmcgKi8KK307CisKK2VudW0gRnJhbWVTdGF0ZSB7CisJRnJhbWVTdGF0ZV9VbnVzZWQsCS8qIFVudXNlZCAobm8gTUNBUFRVUkUpICovCisJRnJhbWVTdGF0ZV9SZWFkeSwJLyogUmVhZHkgdG8gc3RhcnQgZ3JhYmJpbmcgKi8KKwlGcmFtZVN0YXRlX0dyYWJiaW5nLAkvKiBJbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBncmFiYmVkIGludG8gKi8KKwlGcmFtZVN0YXRlX0RvbmUsCS8qIEZpbmlzaGVkIGdyYWJiaW5nLCBidXQgbm90IGJlZW4gc3luY2VkIHlldCAqLworCUZyYW1lU3RhdGVfRG9uZV9Ib2xkLAkvKiBBcmUgc3luY2luZyBvciByZWFkaW5nICovCisJRnJhbWVTdGF0ZV9FcnJvciwJLyogU29tZXRoaW5nIGJhZCBoYXBwZW5lZCB3aGlsZSBwcm9jZXNzaW5nICovCit9OworCisvKgorICogU29tZSBmcmFtZXMgbWF5IGNvbnRhaW4gb25seSBldmVuIG9yIG9kZCBsaW5lcy4gVGhpcyB0eXBlCisgKiBzcGVjaWZpZXMgd2hhdCB0eXBlIG9mIGRlaW50ZXJsYWNpbmcgaXMgcmVxdWlyZWQuCisgKi8KK2VudW0gRGVpbnRlcmxhY2UgeworCURlaW50ZXJsYWNlX05vbmU9MCwKKwlEZWludGVybGFjZV9GaWxsT2RkTGluZXMsCisJRGVpbnRlcmxhY2VfRmlsbEV2ZW5MaW5lcworfTsKKworI2RlZmluZSBVU0JWSURFT19OVU1GUkFNRVMJMgkvKiBIb3cgbWFueSBmcmFtZXMgd2Ugd29yayB3aXRoICovCisjZGVmaW5lIFVTQlZJREVPX05VTVNCVUYJMgkvKiBIb3cgbWFueSBVUkJzIGxpbmtlZCBpbiBhIHJpbmcgKi8KKworLyogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBvbmUgSXNvYyByZXF1ZXN0IC0gVVJCIGFuZCBidWZmZXIgKi8KK3N0cnVjdCB1c2J2aWRlb19zYnVmIHsKKwljaGFyICpkYXRhOworCXN0cnVjdCB1cmIgKnVyYjsKK307CisKK3N0cnVjdCB1c2J2aWRlb19mcmFtZSB7CisJY2hhciAqZGF0YTsJCS8qIEZyYW1lIGJ1ZmZlciAqLworCXVuc2lnbmVkIGxvbmcgaGVhZGVyOwkvKiBTaWduaWZpY2FudCBiaXRzIGZyb20gdGhlIGhlYWRlciAqLworCisJdmlkZW9zaXplX3QgY2FudmFzOwkvKiBUaGUgY2FudmFzIChtYXguIGltYWdlKSBhbGxvY2F0ZWQgKi8KKwl2aWRlb3NpemVfdCByZXF1ZXN0OwkvKiBUaGF0J3Mgd2hhdCB0aGUgYXBwbGljYXRpb24gYXNrZWQgZm9yICovCisJdW5zaWduZWQgc2hvcnQgcGFsZXR0ZTsJLyogVGhlIGRlc2lyZWQgZm9ybWF0ICovCisKKwllbnVtIEZyYW1lU3RhdGUgZnJhbWVTdGF0ZTsvKiBTdGF0ZSBvZiBncmFiYmluZyAqLworCWVudW0gU2NhblN0YXRlIHNjYW5zdGF0ZTsJLyogU3RhdGUgb2Ygc2Nhbm5pbmcgKi8KKwllbnVtIERlaW50ZXJsYWNlIGRlaW50ZXJsYWNlOworCWludCBmbGFnczsJCS8qIFVTQlZJREVPX0ZSQU1FX0ZMQUdfeHh4IGJpdCBmbGFncyAqLworCisJaW50IGN1cmxpbmU7CQkvKiBMaW5lIG9mIGZyYW1lIHdlJ3JlIHdvcmtpbmcgb24gKi8KKworCWxvbmcgc2VxUmVhZF9MZW5ndGg7CS8qIFJhdyBkYXRhIGxlbmd0aCBvZiBmcmFtZSAqLworCWxvbmcgc2VxUmVhZF9JbmRleDsJLyogQW1vdW50IG9mIGRhdGEgdGhhdCBoYXMgYmVlbiBhbHJlYWR5IHJlYWQgKi8KKworCXZvaWQgKnVzZXI7CQkvKiBBZGRpdGlvbmFsIGRhdGEgdGhhdCB1c2VyIG1heSBuZWVkICovCit9OworCisvKiBTdGF0aXN0aWNzIHRoYXQgY2FuIGJlIG92ZXJsYWlkIG9uIHNjcmVlbiAqLworc3RydWN0IHVzYnZpZGVvX3N0YXRpc3RpY3MgeworICAgICAgICB1bnNpZ25lZCBsb25nIGZyYW1lX251bTsJLyogU2VxdWVudGlhbCBudW1iZXIgb2YgdGhlIGZyYW1lICovCisgICAgICAgIHVuc2lnbmVkIGxvbmcgdXJiX2NvdW50OyAgICAgICAgLyogSG93IG1hbnkgVVJCcyB3ZSByZWNlaXZlZCBzbyBmYXIgKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyB1cmJfbGVuZ3RoOyAgICAgICAvKiBMZW5ndGggb2YgbGFzdCBVUkIgKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyBkYXRhX2NvdW50OyAgICAgICAvKiBIb3cgbWFueSBieXRlcyB3ZSByZWNlaXZlZCAqLworICAgICAgICB1bnNpZ25lZCBsb25nIGhlYWRlcl9jb3VudDsgICAgIC8qIEhvdyBtYW55IGZyYW1lIGhlYWRlcnMgd2UgZm91bmQgKi8KKwl1bnNpZ25lZCBsb25nIGlzb19za2lwX2NvdW50OwkvKiBIb3cgbWFueSBlbXB0eSBJU08gcGFja2V0cyByZWNlaXZlZCAqLworCXVuc2lnbmVkIGxvbmcgaXNvX2Vycl9jb3VudDsJLyogSG93IG1hbnkgYmFkIElTTyBwYWNrZXRzIHJlY2VpdmVkICovCit9OworCitzdHJ1Y3QgdXNidmlkZW87CisKK3N0cnVjdCB1dmQgeworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsJLyogTXVzdCBiZSB0aGUgZmlyc3QgZmllbGQhICovCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgdXNidmlkZW8gKmhhbmRsZTsJLyogUG9pbnRzIGJhY2sgdG8gdGhlIHN0cnVjdCB1c2J2aWRlbyAqLworCXZvaWQgKnVzZXJfZGF0YTsJCS8qIENhbWVyYS1kZXBlbmRlbnQgZGF0YSAqLworCWludCB1c2VyX3NpemU7CQkJLyogU2l6ZSBvZiB0aGF0IGNhbWVyYS1kZXBlbmRlbnQgZGF0YSAqLworCWludCBkZWJ1ZzsJCQkvKiBEZWJ1ZyBsZXZlbCBmb3IgdXNidmlkZW8gKi8KKwl1bnNpZ25lZCBjaGFyIGlmYWNlOwkJLyogVmlkZW8gaW50ZXJmYWNlIG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIgdmlkZW9fZW5kcDsKKwl1bnNpZ25lZCBjaGFyIGlmYWNlQWx0QWN0aXZlOworCXVuc2lnbmVkIGNoYXIgaWZhY2VBbHRJbmFjdGl2ZTsgLyogQWx0IHNldHRpbmdzICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsJCS8qIEZMQUdTX1VTQlZJREVPX3h4eCAqLworCXVuc2lnbmVkIGxvbmcgcGFsZXR0ZUJpdHM7CS8qIFdoaWNoIHBhbGV0dGVzIHdlIGFjY2VwdD8gKi8KKwl1bnNpZ25lZCBzaG9ydCBkZWZhdWx0UGFsZXR0ZTsJLyogV2hhdCBwYWxldHRlIHRvIHVzZSBmb3IgcmVhZCgpICovCisJc3RydWN0IHNlbWFwaG9yZSBsb2NrOworCWludCB1c2VyOwkJLyogdXNlciBjb3VudCBmb3IgZXhjbHVzaXZlIHVzZSAqLworCisJdmlkZW9zaXplX3QgdmlkZW9zaXplOwkvKiBDdXJyZW50IHNldHRpbmcgKi8KKwl2aWRlb3NpemVfdCBjYW52YXM7CS8qIFRoaXMgaXMgdGhlIHdpZHRoLGhlaWdodCBvZiB0aGUgVjRMIGNhbnZhcyAqLworCWludCBtYXhfZnJhbWVfc2l6ZTsJLyogQnl0ZXMgaW4gb25lIHZpZGVvIGZyYW1lICovCisKKwlpbnQgdXZkX3VzZWQ7ICAgICAgICAJLyogSXMgdGhpcyBzdHJ1Y3R1cmUgaW4gdXNlPyAqLworCWludCBzdHJlYW1pbmc7CQkvKiBBcmUgd2Ugc3RyZWFtaW5nIElzb2Nocm9ub3VzPyAqLworCWludCBncmFiYmluZzsJCS8qIEFyZSB3ZSBncmFiYmluZz8gKi8KKwlpbnQgc2V0dGluZ3NBZGp1c3RlZDsJLyogSGF2ZSB3ZSBhZGp1c3RlZCBjb250cmFzdCBldGMuPyAqLworCWludCBsYXN0X2Vycm9yOwkJLyogV2hhdCBjYWxhbWl0eSBzdHJ1Y2sgdXM/ICovCisKKwljaGFyICpmYnVmOwkJLyogVmlkZW9kZXYgYnVmZmVyIGFyZWEgKi8KKwlpbnQgZmJ1Zl9zaXplOwkJLyogVmlkZW9kZXYgYnVmZmVyIHNpemUgKi8KKworCWludCBjdXJmcmFtZTsKKwlpbnQgaXNvX3BhY2tldF9sZW47CS8qIFZpZGVvbW9kZS1kZXBlbmRlbnQsIHNhdmVzIGJ1cyBiYW5kd2lkdGggKi8KKworCXN0cnVjdCBSaW5nUXVldWUgZHA7CS8qIElzb2MgZGF0YSBwdW1wICovCisJc3RydWN0IHVzYnZpZGVvX2ZyYW1lIGZyYW1lW1VTQlZJREVPX05VTUZSQU1FU107CisJc3RydWN0IHVzYnZpZGVvX3NidWYgc2J1ZltVU0JWSURFT19OVU1TQlVGXTsKKworCXZvbGF0aWxlIGludCByZW1vdmVfcGVuZGluZzsJLyogSWYgc2V0IHRoZW4gYWJvdXQgdG8gZXhpdCAqLworCisJc3RydWN0IHZpZGVvX3BpY3R1cmUgdnBpYywgdnBpY19vbGQ7CS8qIFBpY3R1cmUgc2V0dGluZ3MgKi8KKwlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSB2Y2FwOwkJLyogVmlkZW8gY2FwYWJpbGl0aWVzICovCisJc3RydWN0IHZpZGVvX2NoYW5uZWwgdmNoYW47CS8qIE1heSBiZSB1c2VkIGZvciB0dW5lciBzdXBwb3J0ICovCisJc3RydWN0IHVzYnZpZGVvX3N0YXRpc3RpY3Mgc3RhdHM7CisJY2hhciB2aWRlb05hbWVbMzJdOwkJLyogSG9sZHMgbmFtZSBsaWtlICJ2aWRlbzciICovCit9OworCisvKgorICogdXNidmlkZW8gY2FsbGJhY2tzICh2aXJ0dWFsIG1ldGhvZHMpLiBUaGV5IGFyZSBzZXQgd2hlbiB1c2J2aWRlbworICogc2VydmljZXMgYXJlIHJlZ2lzdGVyZWQuIEFsbCBvZiB0aGVzZSBkZWZhdWx0IHRvIE5VTEwsIGV4Y2VwdCB0aG9zZQorICogdGhhdCBkZWZhdWx0IHRvIHVzYnZpZGVvLXByb3ZpZGVkIG1ldGhvZHMuCisgKi8KK3N0cnVjdCB1c2J2aWRlb19jYiB7CisJaW50ICgqcHJvYmUpKHN0cnVjdCB1c2JfaW50ZXJmYWNlICosIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICopOworCXZvaWQgKCp1c2VyRnJlZSkoc3RydWN0IHV2ZCAqKTsKKwl2b2lkICgqZGlzY29ubmVjdCkoc3RydWN0IHVzYl9pbnRlcmZhY2UgKik7CisJaW50ICgqc2V0dXBPbk9wZW4pKHN0cnVjdCB1dmQgKik7CisJdm9pZCAoKnZpZGVvU3RhcnQpKHN0cnVjdCB1dmQgKik7CisJdm9pZCAoKnZpZGVvU3RvcCkoc3RydWN0IHV2ZCAqKTsKKwl2b2lkICgqcHJvY2Vzc0RhdGEpKHN0cnVjdCB1dmQgKiwgc3RydWN0IHVzYnZpZGVvX2ZyYW1lICopOworCXZvaWQgKCpwb3N0UHJvY2Vzcykoc3RydWN0IHV2ZCAqLCBzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKik7CisJdm9pZCAoKmFkanVzdFBpY3R1cmUpKHN0cnVjdCB1dmQgKik7CisJaW50ICgqZ2V0RlBTKShzdHJ1Y3QgdXZkICopOworCWludCAoKm92ZXJsYXlIb29rKShzdHJ1Y3QgdXZkICosIHN0cnVjdCB1c2J2aWRlb19mcmFtZSAqKTsKKwlpbnQgKCpnZXRGcmFtZSkoc3RydWN0IHV2ZCAqLCBpbnQpOworCWludCAoKnN0YXJ0RGF0YVB1bXApKHN0cnVjdCB1dmQgKnV2ZCk7CisJdm9pZCAoKnN0b3BEYXRhUHVtcCkoc3RydWN0IHV2ZCAqdXZkKTsKKwlpbnQgKCpzZXRWaWRlb01vZGUpKHN0cnVjdCB1dmQgKnV2ZCwgc3RydWN0IHZpZGVvX3dpbmRvdyAqdncpOworfTsKKworc3RydWN0IHVzYnZpZGVvIHsKKwlpbnQgbnVtX2NhbWVyYXM7CQkvKiBBcyBhbGxvY2F0ZWQgKi8KKwlzdHJ1Y3QgdXNiX2RyaXZlciB1c2JkcnY7CS8qIEludGVyZmFjZSB0byB0aGUgVVNCIHN0YWNrICovCisJY2hhciBkcnZOYW1lWzgwXTsJCS8qIERyaXZlciBuYW1lICovCisJc3RydWN0IHNlbWFwaG9yZSBsb2NrOwkJLyogTXV0ZXggcHJvdGVjdGluZyBjYW1lcmEgc3RydWN0dXJlcyAqLworCXN0cnVjdCB1c2J2aWRlb19jYiBjYjsJCS8qIFRhYmxlIG9mIGNhbGxiYWNrcyAodmlydHVhbCBtZXRob2RzKSAqLworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmR0OwkvKiBWaWRlbyBkZXZpY2UgdGVtcGxhdGUgKi8KKwlzdHJ1Y3QgdXZkICpjYW07CQkJLyogQXJyYXkgb2YgY2FtZXJhIHN0cnVjdHVyZXMgKi8KKwlzdHJ1Y3QgbW9kdWxlICptZF9tb2R1bGU7CS8qIE1pbmlkcml2ZXIgbW9kdWxlICovCit9OworCisKKy8qCisgKiBUaGlzIG1hY3JvIHJldHJpZXZlcyBjYWxsYmFjayBhZGRyZXNzIGZyb20gdGhlIHN0cnVjdCB1dmQgb2JqZWN0LgorICogTm8gdmFsaWRpdHkgY2hlY2tzIGFyZSBkb25lIGhlcmUsIHNvIGJlIHN1cmUgdG8gY2hlY2sgdGhlCisgKiBjYWxsYmFjayBiZWZvcmVoYW5kIHdpdGggVkFMSURfQ0FMTEJBQ0suCisgKi8KKyNkZWZpbmUJR0VUX0NBTExCQUNLKHV2ZCxjYk5hbWUpICgodXZkKS0+aGFuZGxlLT5jYi5jYk5hbWUpCisKKy8qCisgKiBUaGlzIG1hY3JvIHJldHVybnMgZWl0aGVyIGNhbGxiYWNrIHBvaW50ZXIgb3IgTlVMTC4gVGhpcyBpcyBzYWZlCisgKiBtYWNybywgbWVhbmluZyB0aGF0IG1vc3Qgb2YgY29tcG9uZW50cyBvZiBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQKKyAqIG1heSBiZSBOVUxMIC0gdGhpcyBvbmx5IHJlc3VsdHMgaW4gTlVMTCBiZWluZyByZXR1cm5lZC4gWW91IG1heQorICogd2lzaCB0byB1c2UgdGhpcyBtYWNybyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY2FsbGJhY2sgaXMgY2FsbGFibGUuCisgKiBIb3dldmVyIGtlZXAgaW4gbWluZCB0aGF0IHRob3NlIGNoZWNrcyB0YWtlIHRpbWUuCisgKi8KKyNkZWZpbmUJVkFMSURfQ0FMTEJBQ0sodXZkLGNiTmFtZSkgKCgoKHV2ZCkgIT0gTlVMTCkgJiYgXAorCQkoKHV2ZCktPmhhbmRsZSAhPSBOVUxMKSkgPyBHRVRfQ0FMTEJBQ0sodXZkLGNiTmFtZSkgOiBOVUxMKQorCitpbnQgIFJpbmdRdWV1ZV9EZXF1ZXVlKHN0cnVjdCBSaW5nUXVldWUgKnJxLCB1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4pOworaW50ICBSaW5nUXVldWVfRW5xdWV1ZShzdHJ1Y3QgUmluZ1F1ZXVlICpycSwgY29uc3QgdW5zaWduZWQgY2hhciAqY2RhdGEsIGludCBuKTsKK3ZvaWQgUmluZ1F1ZXVlX1dha2VVcEludGVycnVwdGlibGUoc3RydWN0IFJpbmdRdWV1ZSAqcnEpOwordm9pZCBSaW5nUXVldWVfRmx1c2goc3RydWN0IFJpbmdRdWV1ZSAqcnEpOworCitzdGF0aWMgaW5saW5lIGludCBSaW5nUXVldWVfR2V0TGVuZ3RoKGNvbnN0IHN0cnVjdCBSaW5nUXVldWUgKnJxKQoreworCXJldHVybiAocnEtPndpIC0gcnEtPnJpICsgcnEtPmxlbmd0aCkgJiAocnEtPmxlbmd0aC0xKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgUmluZ1F1ZXVlX0dldEZyZWVTcGFjZShjb25zdCBzdHJ1Y3QgUmluZ1F1ZXVlICpycSkKK3sKKwlyZXR1cm4gcnEtPmxlbmd0aCAtIFJpbmdRdWV1ZV9HZXRMZW5ndGgocnEpOworfQorCit2b2lkIHVzYnZpZGVvX0RyYXdMaW5lKAorCXN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnJhbWUsCisJaW50IHgxLCBpbnQgeTEsCisJaW50IHgyLCBpbnQgeTIsCisJdW5zaWduZWQgY2hhciBjciwgdW5zaWduZWQgY2hhciBjZywgdW5zaWduZWQgY2hhciBjYik7Cit2b2lkIHVzYnZpZGVvX0hleER1bXAoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbik7Cit2b2lkIHVzYnZpZGVvX1NheUFuZFdhaXQoY29uc3QgY2hhciAqd2hhdCk7Cit2b2lkIHVzYnZpZGVvX1Rlc3RQYXR0ZXJuKHN0cnVjdCB1dmQgKnV2ZCwgaW50IGZ1bGxmcmFtZSwgaW50IHBtb2RlKTsKKworLyogTWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMgKi8KK3Vuc2lnbmVkIGxvbmcgdXNidmlkZW9fa3ZpcnRfdG9fcGEodW5zaWduZWQgbG9uZyBhZHIpOworCitpbnQgdXNidmlkZW9fcmVnaXN0ZXIoCisJc3RydWN0IHVzYnZpZGVvICoqcENhbXMsCisJY29uc3QgaW50IG51bV9jYW1zLAorCWNvbnN0IGludCBudW1fZXh0cmEsCisJY29uc3QgY2hhciAqZHJpdmVyTmFtZSwKKwljb25zdCBzdHJ1Y3QgdXNidmlkZW9fY2IgKmNiVGFibGUsCisJc3RydWN0IG1vZHVsZSAqbWQsCisJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkX3RhYmxlKTsKK3N0cnVjdCB1dmQgKnVzYnZpZGVvX0FsbG9jYXRlRGV2aWNlKHN0cnVjdCB1c2J2aWRlbyAqY2Ftcyk7CitpbnQgdXNidmlkZW9fUmVnaXN0ZXJWaWRlb0RldmljZShzdHJ1Y3QgdXZkICp1dmQpOwordm9pZCB1c2J2aWRlb19EZXJlZ2lzdGVyKHN0cnVjdCB1c2J2aWRlbyAqKnV2dCk7CisKK2ludCB1c2J2aWRlb192NGxfaW5pdGlhbGl6ZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYpOworCit2b2lkIHVzYnZpZGVvX0RlaW50ZXJsYWNlRnJhbWUoc3RydWN0IHV2ZCAqdXZkLCBzdHJ1Y3QgdXNidmlkZW9fZnJhbWUgKmZyYW1lKTsKKworLyoKKyAqIFRoaXMgY29kZSBwZXJmb3JtcyBib3VuZHMgY2hlY2tpbmcgLSB1c2UgaXQgd2hlbiB3b3JraW5nIHdpdGgKKyAqIG5ldyBmb3JtYXRzLCBvciBlbHNlIHlvdSBtYXkgZ2V0IG9vcHNlcyBhbGwgb3ZlciB0aGUgcGxhY2UuCisgKiBJZiBwaXhlbCBmYWxscyBvdXQgb2YgYm91bmRzIHRoZW4gaXQgZ2V0cyBzaG92ZWQgYmFjayAoYXMgY2xvc2UKKyAqIHRvIHBsYWNlIG9mIG9mZmVuY2UgYXMgcG9zc2libGUpIGFuZCBpcyBwYWludGVkIGJyaWdodCByZWQuCisgKgorICogVGhlcmUgYXJlIHR3byBpbXBvcnRhbnQgY29uY2VwdHM6IGZyYW1lIHdpZHRoLCBoZWlnaHQgYW5kCisgKiBWNEwgY2FudmFzIHdpZHRoLCBoZWlnaHQuIFRoZSBmb3JtZXIgaXMgdGhlIGFyZWEgcmVxdWVzdGVkIGJ5CisgKiB0aGUgYXBwbGljYXRpb24gLWZvciB0aGlzIHZlcnkgZnJhbWUtLiBUaGUgbGF0dGVyIGlzIHRoZSBsYXJnZXN0CisgKiBwb3NzaWJsZSBmcmFtZSB0aGF0IHdlIGNhbiBzZXJ2ZSAod2UgYWR2ZXJ0aXNlIHRoYXQgdmlhIFY0TCBpb2N0bCkuCisgKiBUaGUgZnJhbWUgZGF0YSBpcyBleHBlY3RlZCB0byBiZSBmb3JtYXR0ZWQgYXMgbGluZXMgb2YgbGVuZ3RoCisgKiBWSURFT1NJWkVfWChmci0+cmVxdWVzdCksIHRvdGFsIFZJREVPU0laRV9ZKGZyYW1lLT5yZXF1ZXN0KSBsaW5lcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIFJHQjI0X1BVVFBJWEVMKAorCXN0cnVjdCB1c2J2aWRlb19mcmFtZSAqZnIsCisJaW50IGl4LCBpbnQgaXksCisJdW5zaWduZWQgY2hhciB2ciwKKwl1bnNpZ25lZCBjaGFyIHZnLAorCXVuc2lnbmVkIGNoYXIgdmIpCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqcGY7CisJaW50IGxpbWl0ZXIgPSAwLCBteCwgbXk7CisJbXggPSBpeDsKKwlteSA9IGl5OworCWlmIChteCA8IDApIHsKKwkJbXg9MDsKKwkJbGltaXRlcisrOworCX0gZWxzZSBpZiAobXggPj0gVklERU9TSVpFX1goKGZyKS0+cmVxdWVzdCkpIHsKKwkJbXg9IFZJREVPU0laRV9YKChmciktPnJlcXVlc3QpIC0gMTsKKwkJbGltaXRlcisrOworCX0KKwlpZiAobXkgPCAwKSB7CisJCW15ID0gMDsKKwkJbGltaXRlcisrOworCX0gZWxzZSBpZiAobXkgPj0gVklERU9TSVpFX1koKGZyKS0+cmVxdWVzdCkpIHsKKwkJbXkgPSBWSURFT1NJWkVfWSgoZnIpLT5yZXF1ZXN0KSAtIDE7CisJCWxpbWl0ZXIrKzsKKwl9CisJcGYgPSAoZnIpLT5kYXRhICsgVjRMX0JZVEVTX1BFUl9QSVhFTCooKGl5KSpWSURFT1NJWkVfWCgoZnIpLT5yZXF1ZXN0KSArIChpeCkpOworCWlmIChsaW1pdGVyKSB7CisJCSpwZisrID0gMDsKKwkJKnBmKysgPSAwOworCQkqcGYrKyA9IDB4RkY7CisJfSBlbHNlIHsKKwkJKnBmKysgPSAodmIpOworCQkqcGYrKyA9ICh2Zyk7CisJCSpwZisrID0gKHZyKTsKKwl9Cit9CisKKyNlbmRpZiAvKiB1c2J2aWRlb19oICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS92aWNhbS5jIGIvZHJpdmVycy91c2IvbWVkaWEvdmljYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTU4NTdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvdmljYW0uYwpAQCAtMCwwICsxLDE0MDkgQEAKKy8qCisgKiBVU0IgVmlDYW0gV2ViQ2FtIGRyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDAyIEpvZSBCdXJrcyAoamJ1cmtzQHdhdmljbGUub3JnKSwKKyAqICAgICAgICAgICAgICAgICAgICBDaHJpc3RvcGhlciBMIENoZW5leSAoY2NoZW5leUBjaGVuZXkuY3gpLAorICogICAgICAgICAgICAgICAgICAgIFBhdmVsIE1hY2hlayAocGF2ZWxAc3VzZS5jeiksCisgKiAgICAgICAgICAgICAgICAgICAgSm9obiBUeW5lciAoanR5bmVyQGNzLnVjci5lZHUpLAorICogICAgICAgICAgICAgICAgICAgIE1vbnJvZSBXaWxsaWFtcyAobW9ucm9lQHBvYm94LmNvbSkKKyAqCisgKiBTdXBwb3J0cyAzQ09NIEhvbWVDb25uZWN0IFBDIERpZ2l0YWwgV2ViQ2FtCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBiYXNlZCBoZWF2aWx5IG9uIHRoZSBDUGlBIHdlYmNhbSBkcml2ZXIgd2hpY2ggd2FzCisgKiB3cml0dGVuIGJ5IFBldGVyIFByZWdsZXIsIFNjb3R0IEouIEJlcnRpbiBhbmQgSm9oYW5uZXMgRXJkZmVsdAorICoKKyAqIFBvcnRpb25zIG9mIHRoaXMgY29kZSB3ZXJlIGFsc28gY29waWVkIGZyb20gdXNidmlkZW8uYworICoKKyAqIFNwZWNpYWwgdGhhbmtzIHRvIHRoZSB0aGUgd2hvbGUgdGVhbSBhdCBTb3VyY2Vmb3JnZSBmb3IgaGVscCBtYWtpbmcKKyAqIHRoaXMgZHJpdmVyIGJlY29tZSBhIHJlYWxpdHkuICBOb3RhYmx5OgorICogQW5keSBBcm1zdHJvbmcgd2hvIHJldmVyc2UgZW5naW5lZXJlZCB0aGUgY29sb3IgZW5jb2RpbmcgYW5kCisgKiBQYXZlbCBNYWNoZWsgYW5kIENocmlzIENoZW5leSB3aG8gd29ya2VkIG9uIHJldmVyc2UgZW5naW5lZXJpbmcgdGhlCisgKiAgICBjYW1lcmEgY29udHJvbHMgYW5kIHdyb3RlIHRoZSBmaXJzdCBnZW5lcmF0aW9uIGRyaXZlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSAidXNidmlkZW8uaCIKKworLy8gI2RlZmluZSBWSUNBTV9ERUJVRworCisjaWZkZWYgVklDQU1fREVCVUcKKyNkZWZpbmUgQURCRyhsaW5lbm8sZm10LGFyZ3MuLi4pIHByaW50ayhmbXQsIGppZmZpZXMsIF9fRlVOQ1RJT05fXywgbGluZW5vLCAjI2FyZ3MpCisjZGVmaW5lIERCRyhmbXQsYXJncy4uLikgQURCRygoX19MSU5FX18pLEtFUk5fREVCVUcgX19GSUxFX18iKCVsZCk6JXMgKCVkKToiZm10LCMjYXJncykKKyNlbHNlCisjZGVmaW5lIERCRyhmbW4sYXJncy4uLikgZG8ge30gd2hpbGUoMCkKKyNlbmRpZgorCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgICAgICAgICAgICJKb2UgQnVya3MsIGpidXJrc0B3YXZpY2xlLm9yZyIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgICAgICAgICAgICAgIlZpQ2FtIFdlYkNhbSBEcml2ZXIiCisKKy8qIERlZmluZSB0aGVzZSB2YWx1ZXMgdG8gbWF0Y2ggeW91ciBkZXZpY2UgKi8KKyNkZWZpbmUgVVNCX1ZJQ0FNX1ZFTkRPUl9JRAkweDA0YzEKKyNkZWZpbmUgVVNCX1ZJQ0FNX1BST0RVQ1RfSUQJMHgwMDlkCisKKyNkZWZpbmUgVklDQU1fQllURVNfUEVSX1BJWEVMICAgMworI2RlZmluZSBWSUNBTV9NQVhfUkVBRF9TSVpFICAgICAoNTEyKjI0MisxMjgpCisjZGVmaW5lIFZJQ0FNX01BWF9GUkFNRV9TSVpFICAgIChWSUNBTV9CWVRFU19QRVJfUElYRUwqMzIwKjI0MCkKKyNkZWZpbmUgVklDQU1fRlJBTUVTICAgICAgICAgICAgMgorCisjZGVmaW5lIFZJQ0FNX0hFQURFUl9TSVpFICAgICAgIDY0CisKKyNkZWZpbmUgY2xhbXAoIHgsIGwsIGggKSAgICAgICAgbWF4X3QoIF9fdHlwZW9mX18oIHggKSwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGwgKSwgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluX3QoIF9fdHlwZW9mX18oIHggKSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGggKSwgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCB4ICkgKSApCisKKy8qIE5vdCBzdXJlIHdoYXQgYWxsIHRoZSBieXRlcyBpbiB0aGVzZSBjaGFyCisgKiBhcnJheXMgZG8sIGJ1dCB0aGV5J3JlIG5lY2Vzc2FyeSB0byBtYWtlCisgKiB0aGUgY2FtZXJhIHdvcmsuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgc2V0dXAxW10gPSB7CisJMHhCNiwgMHhDMywgMHgxRiwgMHgwMCwgMHgwMiwgMHg2NCwgMHhFNywgMHg2NywKKwkweEZELCAweEZGLCAweDBFLCAweEMwLCAweEU3LCAweDA5LCAweERFLCAweDAwLAorCTB4OEUsIDB4MDAsIDB4QzAsIDB4MDksIDB4NDAsIDB4MDMsIDB4QzAsIDB4MTcsCisJMHg0NCwgMHgwMywgMHg0QiwgMHhBRiwgMHhDMCwgMHgwNywgMHgwMCwgMHgwMCwKKwkweDRCLCAweEFGLCAweDk3LCAweENGLCAweDAwLCAweDAwCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBzZXR1cDJbXSA9IHsKKwkweEI2LCAweEMzLCAweDAzLCAweDAwLCAweDAzLCAweDY0LCAweDE4LCAweDAwLAorCTB4MDAsIDB4MDAKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHNldHVwM1tdID0geworCTB4QjYsIDB4QzMsIDB4MDEsIDB4MDAsIDB4MDYsIDB4NjQsIDB4MDAsIDB4MDAKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHNldHVwNFtdID0geworCTB4QjYsIDB4QzMsIDB4OEYsIDB4MDYsIDB4MDIsIDB4NjQsIDB4RTcsIDB4MDcsCisJMHgwMCwgMHgwMCwgMHgwOCwgMHhDMCwgMHhFNywgMHgwNywgMHgwMCwgMHgwMCwKKwkweDNFLCAweEMwLCAweEU3LCAweDA3LCAweDU0LCAweDAxLCAweEFBLCAweDAwLAorCTB4RTcsIDB4MDcsIDB4QzgsIDB4MDUsIDB4QjYsIDB4MDAsIDB4RTcsIDB4MDcsCisJMHg0MiwgMHgwMSwgMHhEMiwgMHgwMCwgMHhFNywgMHgwNywgMHg3QywgMHgwMCwKKwkweDE2LCAweDAwLCAweEU3LCAweDA3LCAweDU2LCAweDAwLCAweDE4LCAweDAwLAorCTB4RTcsIDB4MDcsIDB4MDYsIDB4MDAsIDB4OTIsIDB4QzAsIDB4RTcsIDB4MDcsCisJMHgwMCwgMHgwMCwgMHgxRSwgMHhDMCwgMHhFNywgMHgwNywgMHhGRiwgMHhGRiwKKwkweDIyLCAweEMwLCAweEU3LCAweDA3LCAweDA0LCAweDAwLCAweDI0LCAweEMwLAorCTB4RTcsIDB4MDcsIDB4RUMsIDB4MjcsIDB4MjgsIDB4QzAsIDB4RTcsIDB4MDcsCisJMHgxNiwgMHgwMSwgMHg4RSwgMHgwMCwgMHhFNywgMHg4NywgMHgwMSwgMHgwMCwKKwkweDBFLCAweEMwLCAweDk3LCAweENGLCAweEQ3LCAweDA5LCAweDAwLCAweEMwLAorCTB4RTcsIDB4NzcsIDB4MDEsIDB4MDAsIDB4OTIsIDB4QzAsIDB4MDksIDB4QzEsCisJMHhFNywgMHgwOSwgMHhGRSwgMHgwNSwgMHgyNCwgMHgwMSwgMHhFNywgMHgwOSwKKwkweDA0LCAweDA2LCAweDI2LCAweDAxLCAweEU3LCAweDA3LCAweDA3LCAweDAwLAorCTB4OTIsIDB4QzAsIDB4RTcsIDB4MDUsIDB4MDAsIDB4QzAsIDB4QzAsIDB4REYsCisJMHg5NywgMHhDRiwgMHgxNywgMHgwMCwgMHg1NywgMHgwMCwgMHgxNywgMHgwMiwKKwkweEQ3LCAweDA5LCAweDAwLCAweEMwLCAweEU3LCAweDc3LCAweDAxLCAweDAwLAorCTB4OTIsIDB4QzAsIDB4MEEsIDB4QzEsIDB4RTcsIDB4NTcsIDB4RkYsIDB4RkYsCisJMHhGQSwgMHgwNSwgMHgwRCwgMHhDMCwgMHhFNywgMHg1NywgMHgwMCwgMHgwMCwKKwkweEZBLCAweDA1LCAweDBGLCAweEMwLCAweDlGLCAweEFGLCAweEM2LCAweDAwLAorCTB4RTcsIDB4MDUsIDB4MDAsIDB4QzAsIDB4QzgsIDB4MDUsIDB4QzEsIDB4MDUsCisJMHhDMCwgMHgwNSwgMHhDMCwgMHhERiwgMHg5NywgMHhDRiwgMHgyNywgMHhEQSwKKwkweEZBLCAweDA1LCAweEVGLCAweDA3LCAweDAxLCAweDAwLCAweDBCLCAweDA2LAorCTB4NzMsIDB4Q0YsIDB4OUYsIDB4QUYsIDB4NzgsIDB4MDEsIDB4OUYsIDB4QUYsCisJMHgxQSwgMHgwMywgMHg2RSwgMHhDRiwgMHhFNywgMHgwOSwgMHhGQywgMHgwNSwKKwkweDI0LCAweDAxLCAweEU3LCAweDA5LCAweDAyLCAweDA2LCAweDI2LCAweDAxLAorCTB4RTcsIDB4MDcsIDB4MDcsIDB4MDAsIDB4OTIsIDB4QzAsIDB4RTcsIDB4MDksCisJMHhGQywgMHgwNSwgMHhGRSwgMHgwNSwgMHhFNywgMHgwOSwgMHgwMiwgMHgwNiwKKwkweDA0LCAweDA2LCAweEU3LCAweDA5LCAweDAwLCAweDA2LCAweEZDLCAweDA1LAorCTB4RTcsIDB4MDksIDB4RkUsIDB4MDUsIDB4MDAsIDB4MDYsIDB4MjcsIDB4REEsCisJMHhGQSwgMHgwNSwgMHhFNywgMHg1NywgMHgwMSwgMHgwMCwgMHhGQSwgMHgwNSwKKwkweDAyLCAweENBLCAweDA0LCAweEMwLCAweDk3LCAweENGLCAweDlGLCAweEFGLAorCTB4NjYsIDB4MDUsIDB4OTcsIDB4Q0YsIDB4RTcsIDB4MDcsIDB4NDAsIDB4MDAsCisJMHgwMiwgMHgwNiwgMHhDOCwgMHgwOSwgMHhGQywgMHgwNSwgMHg5RiwgMHhBRiwKKwkweERBLCAweDAyLCAweDk3LCAweENGLCAweENGLCAweDE3LCAweDAyLCAweDAwLAorCTB4RUYsIDB4NTcsIDB4ODEsIDB4MDAsIDB4MDksIDB4MDYsIDB4OUYsIDB4QTAsCisJMHhCNiwgMHgwMSwgMHhFRiwgMHg1NywgMHg4MCwgMHgwMCwgMHgwOSwgMHgwNiwKKwkweDlGLCAweEEwLCAweDQwLCAweDAyLCAweEVGLCAweDU3LCAweDAxLCAweDAwLAorCTB4MEIsIDB4MDYsIDB4OUYsIDB4QTAsIDB4NDYsIDB4MDMsIDB4RTcsIDB4MDcsCisJMHgwMSwgMHgwMCwgMHgwQSwgMHhDMCwgMHg0NiwgMHhBRiwgMHg0NywgMHhBRiwKKwkweDlGLCAweEFGLCAweDQwLCAweDAyLCAweEU3LCAweDA3LCAweDJFLCAweDAwLAorCTB4MEEsIDB4QzAsIDB4RUYsIDB4ODcsIDB4ODAsIDB4MDAsIDB4MDksIDB4MDYsCisJMHg5NywgMHhDRiwgMHgwMCwgMHgwRSwgMHgwMSwgMHgwMCwgMHhDMCwgMHg1NywKKwkweDUxLCAweDAwLCAweDlGLCAweEMwLCAweDlFLCAweDAyLCAweEMwLCAweDU3LAorCTB4NTAsIDB4MDAsIDB4MjAsIDB4QzAsIDB4QzAsIDB4NTcsIDB4NTUsIDB4MDAsCisJMHgxMiwgMHhDMCwgMHhDMCwgMHg1NywgMHg1NiwgMHgwMCwgMHg5RiwgMHhDMCwKKwkweDcyLCAweDAyLCAweDlGLCAweENGLCAweEQ2LCAweDAyLCAweEMxLCAweDBCLAorCTB4MDgsIDB4MDYsIDB4MDEsIDB4RDAsIDB4NkYsIDB4OTAsIDB4MDgsIDB4MDYsCisJMHhDMCwgMHgwNywgMHgwOCwgMHgwMCwgMHhDMSwgMHgwQiwgMHgwOCwgMHgwNiwKKwkweDlGLCAweEFGLCAweDI4LCAweDA1LCAweDk3LCAweENGLCAweDJGLCAweDBFLAorCTB4MDIsIDB4MDAsIDB4MDgsIDB4MDYsIDB4QzAsIDB4MDcsIDB4MDgsIDB4MDAsCisJMHhDMSwgMHgwQiwgMHgwOCwgMHgwNiwgMHg5RiwgMHhBRiwgMHgyOCwgMHgwNSwKKwkweDlGLCAweENGLCAweEQ2LCAweDAyLCAweDJGLCAweDBFLCAweDAyLCAweDAwLAorCTB4MDksIDB4MDYsIDB4RUYsIDB4ODcsIDB4ODAsIDB4MDAsIDB4MDksIDB4MDYsCisJMHg5RiwgMHhDRiwgMHhENiwgMHgwMiwgMHhFRiwgMHg2NywgMHg3RiwgMHhGRiwKKwkweDA5LCAweDA2LCAweEU3LCAweDY3LCAweEZGLCAweEZELCAweDIyLCAweEMwLAorCTB4RTcsIDB4NjcsIDB4RUYsIDB4RkYsIDB4MjQsIDB4QzAsIDB4RTcsIDB4ODcsCisJMHgxMCwgMHgwMCwgMHgyOCwgMHhDMCwgMHg5RiwgMHhBRiwgMHhCOCwgMHgwNSwKKwkweEU3LCAweDg3LCAweEUwLCAweDIxLCAweDI0LCAweEMwLCAweDlGLCAweEFGLAorCTB4QTgsIDB4MDUsIDB4RTcsIDB4ODcsIDB4MDgsIDB4MDAsIDB4MjQsIDB4QzAsCisJMHhFNywgMHg2NywgMHhERiwgMHhGRiwgMHgyNCwgMHhDMCwgMHhDOCwgMHgwNywKKwkweDBBLCAweDAwLCAweEMwLCAweDA3LCAweDAwLCAweDAwLCAweEMxLCAweDA3LAorCTB4MDEsIDB4MDAsIDB4OUYsIDB4QUYsIDB4MjgsIDB4MDUsIDB4OUYsIDB4QUYsCisJMHhCOCwgMHgwNSwgMHhDMCwgMHgwNywgMHg5RSwgMHgwMCwgMHg5RiwgMHhBRiwKKwkweDQ0LCAweDA1LCAweEU3LCAweDY3LCAweEZGLCAweEZFLCAweDI0LCAweEMwLAorCTB4QzAsIDB4MDksIDB4MjAsIDB4QzAsIDB4RTcsIDB4ODcsIDB4MDAsIDB4MDEsCisJMHgyNCwgMHhDMCwgMHhDMCwgMHg3NywgMHgwMCwgMHgwMiwgMHgwRiwgMHhDMSwKKwkweEU3LCAweDY3LCAweEY3LCAweEZGLCAweDI0LCAweEMwLCAweEU3LCAweDY3LAorCTB4RjcsIDB4RkYsIDB4MjQsIDB4QzAsIDB4RTcsIDB4ODcsIDB4MDgsIDB4MDAsCisJMHgyNCwgMHhDMCwgMHgwOCwgMHhEQSwgMHg1RSwgMHhDMSwgMHhFRiwgMHgwNywKKwkweDgwLCAweDAwLCAweDA5LCAweDA2LCAweDk3LCAweENGLCAweEVGLCAweDA3LAorCTB4MDEsIDB4MDAsIDB4MEEsIDB4MDYsIDB4OTcsIDB4Q0YsIDB4RUYsIDB4MDcsCisJMHgwMCwgMHgwMCwgMHgwQiwgMHgwNiwgMHhFRiwgMHgwNywgMHgwMCwgMHgwMCwKKwkweDBBLCAweDA2LCAweEVGLCAweDY3LCAweDdGLCAweEZGLCAweDA5LCAweDA2LAorCTB4RUYsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MEQsIDB4MDYsIDB4RTcsIDB4NjcsCisJMHhFRiwgMHhGRiwgMHgyOCwgMHhDMCwgMHhFNywgMHg2NywgMHgxNywgMHhEOCwKKwkweDI0LCAweEMwLCAweEU3LCAweDA3LCAweDAwLCAweDAwLCAweDFFLCAweEMwLAorCTB4RTcsIDB4MDcsIDB4RkYsIDB4RkYsIDB4MjIsIDB4QzAsIDB4OTcsIDB4Q0YsCisJMHhDOCwgMHgwNywgMHgwRSwgMHgwNiwgMHg5RiwgMHhBRiwgMHhEQSwgMHgwMiwKKwkweEU3LCAweDA3LCAweDAwLCAweDAwLCAweEYyLCAweDA1LCAweEU3LCAweDA3LAorCTB4MTAsIDB4MDAsIDB4RjYsIDB4MDUsIDB4RTcsIDB4MDcsIDB4MEUsIDB4MDYsCisJMHhGNCwgMHgwNSwgMHhFNywgMHgwNywgMHhENiwgMHgwMiwgMHhGOCwgMHgwNSwKKwkweEM4LCAweDA3LCAweEYyLCAweDA1LCAweEMxLCAweDA3LCAweDAwLCAweDgwLAorCTB4NTAsIDB4QUYsIDB4OTcsIDB4Q0YsIDB4MkYsIDB4MEMsIDB4MDIsIDB4MDAsCisJMHgwNywgMHgwNiwgMHgyRiwgMHgwQywgMHgwNCwgMHgwMCwgMHgwNiwgMHgwNiwKKwkweEU3LCAweDA3LCAweDAwLCAweDAwLCAweEYyLCAweDA1LCAweEU3LCAweDA3LAorCTB4MTAsIDB4MDAsIDB4RjYsIDB4MDUsIDB4RTcsIDB4MDcsIDB4RTIsIDB4MDUsCisJMHhGNCwgMHgwNSwgMHhFNywgMHgwNywgMHhDRSwgMHgwMiwgMHhGOCwgMHgwNSwKKwkweEM4LCAweDA3LCAweEYyLCAweDA1LCAweEMxLCAweDA3LCAweDAwLCAweDgwLAorCTB4NTEsIDB4QUYsIDB4OTcsIDB4Q0YsIDB4OUYsIDB4QUYsIDB4NjYsIDB4MDQsCisJMHg5RiwgMHhBRiwgMHgxQSwgMHgwMywgMHg1OSwgMHhBRiwgMHg5NywgMHhDRiwKKwkweEMwLCAweDA3LCAweDBFLCAweDAwLCAweEMxLCAweDBCLCAweDBDLCAweDA2LAorCTB4NDEsIDB4RDEsIDB4OUYsIDB4QUYsIDB4MjgsIDB4MDUsIDB4QzAsIDB4MDcsCisJMHgzQywgMHgwMCwgMHg5RiwgMHhBRiwgMHg0NCwgMHgwNSwgMHg2OCwgMHgwMCwKKwkweEMwLCAweDA3LCAweDNCLCAweDAwLCAweDlGLCAweEFGLCAweDQ0LCAweDA1LAorCTB4NkYsIDB4MDAsIDB4MEMsIDB4MDYsIDB4NjgsIDB4MDAsIDB4RTAsIDB4MDcsCisJMHgwNCwgMHgwMSwgMHhFOCwgMHgwQiwgMHgwQSwgMHgwNiwgMHhFOCwgMHgwNywKKwkweDAwLCAweDAwLCAweEUwLCAweDA3LCAweDAwLCAweDAyLCAweEUwLCAweDA3LAorCTB4RUMsIDB4MDEsIDB4RTAsIDB4MDcsIDB4RkMsIDB4RkYsIDB4OTcsIDB4Q0YsCisJMHhFNywgMHgwNywgMHhGRiwgMHhGRiwgMHhGQSwgMHgwNSwgMHhFRiwgMHgwNywKKwkweDAwLCAweDAwLCAweDBCLCAweDA2LCAweEU3LCAweDA3LCAweDBFLCAweDA2LAorCTB4MjQsIDB4MDEsIDB4RTcsIDB4MDcsIDB4MEUsIDB4MDYsIDB4RkUsIDB4MDUsCisJMHhFNywgMHgwNywgMHg0MCwgMHgwMCwgMHgyNiwgMHgwMSwgMHhFNywgMHgwNywKKwkweDQwLCAweDAwLCAweDA0LCAweDA2LCAweEU3LCAweDA3LCAweDA3LCAweDAwLAorCTB4OTIsIDB4QzAsIDB4OTcsIDB4Q0YsIDB4RUYsIDB4MDcsIDB4MDIsIDB4MDAsCisJMHgwQiwgMHgwNiwgMHg5RiwgMHhBRiwgMHg3OCwgMHgwMSwgMHhFRiwgMHg3NywKKwkweDgwLCAweDAwLCAweDA3LCAweDA2LCAweDlGLCAweEMwLCAweDE0LCAweDA0LAorCTB4RUYsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDYsIDB4MzcsIDB4QzAsCisJMHhFRiwgMHg3NywgMHgwMSwgMHgwMCwgMHgwRCwgMHgwNiwgMHgwRiwgMHhDMSwKKwkweEVGLCAweDA3LCAweDAxLCAweDAwLCAweDBELCAweDA2LCAweEMwLCAweDA3LAorCTB4MDIsIDB4MDAsIDB4QzEsIDB4MDcsIDB4MzAsIDB4MDAsIDB4OUYsIDB4QUYsCisJMHgyOCwgMHgwNSwgMHhDMCwgMHgwNywgMHgwMSwgMHgwMCwgMHhDMSwgMHgwNywKKwkweDAyLCAweDAwLCAweDlGLCAweEFGLCAweDI4LCAweDA1LCAweEM4LCAweDA3LAorCTB4RkYsIDB4NEYsIDB4OUYsIDB4QUYsIDB4QTgsIDB4MDUsIDB4QzAsIDB4MDcsCisJMHgzOCwgMHgwMCwgMHg5RiwgMHhBRiwgMHg0NCwgMHgwNSwgMHhDMSwgMHg3NywKKwkweDAzLCAweDAwLCAweDAyLCAweEMxLCAweDA4LCAweERBLCAweDc1LCAweEMxLAorCTB4QzEsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MEEsIDB4QzEsIDB4QzAsIDB4MDcsCisJMHgwMSwgMHgwMCwgMHhDMSwgMHgwNywgMHgwMiwgMHgwMCwgMHg5RiwgMHhBRiwKKwkweDI4LCAweDA1LCAweEVGLCAweDA3LCAweDAxLCAweDAwLCAweDA2LCAweDA2LAorCTB4MkMsIDB4Q0YsIDB4QzAsIDB4MDcsIDB4MDEsIDB4MDAsIDB4QzEsIDB4MDcsCisJMHgwNCwgMHgwMCwgMHg5RiwgMHhBRiwgMHgyOCwgMHgwNSwgMHhFRiwgMHgwNywKKwkweDAwLCAweDAwLCAweDA2LCAweDA2LCAweDIyLCAweENGLCAweEVGLCAweDA3LAorCTB4MDAsIDB4MDAsIDB4MEQsIDB4MDYsIDB4RUYsIDB4NTcsIDB4MDEsIDB4MDAsCisJMHgwNiwgMHgwNiwgMHgxQiwgMHhDMCwgMHhDMCwgMHgwNywgMHgwMSwgMHgwMCwKKwkweEMxLCAweDA3LCAweDAxLCAweDAwLCAweDlGLCAweEFGLCAweDI4LCAweDA1LAorCTB4QzAsIDB4MDcsIDB4MDIsIDB4MDAsIDB4QzEsIDB4MDcsIDB4MzAsIDB4MDAsCisJMHg5RiwgMHhBRiwgMHgyOCwgMHgwNSwgMHhDOCwgMHgwNywgMHhGRiwgMHg0RiwKKwkweDlGLCAweEFGLCAweEE4LCAweDA1LCAweEMwLCAweDA3LCAweDM4LCAweDAwLAorCTB4OUYsIDB4QUYsIDB4NDQsIDB4MDUsIDB4QzEsIDB4NjcsIDB4MDMsIDB4MDAsCisJMHhDMSwgMHg1NywgMHgwMywgMHgwMCwgMHgwMiwgMHhDMCwgMHgwOCwgMHhEQSwKKwkweDczLCAweEMxLCAweEMwLCAweDA3LCAweDAyLCAweDAwLCAweEMxLCAweDA3LAorCTB4MTIsIDB4MDAsIDB4RUYsIDB4NTcsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDYsCisJMHgwMiwgMHhDMCwgMHhDMSwgMHgwNywgMHgyMywgMHgwMCwgMHg5RiwgMHhBRiwKKwkweDI4LCAweDA1LCAweEMwLCAweDA3LCAweDE0LCAweDAwLCAweEMxLCAweDBCLAorCTB4RUEsIDB4MDUsIDB4OUYsIDB4QUYsIDB4MjgsIDB4MDUsIDB4QzAsIDB4MDcsCisJMHgzRSwgMHgwMCwgMHg5RiwgMHhBRiwgMHgwQSwgMHgwNSwgMHhFNywgMHgwOSwKKwkweEU0LCAweDA1LCAweEZBLCAweDA1LCAweDI3LCAweEQ4LCAweEZBLCAweDA1LAorCTB4RTcsIDB4MDcsIDB4MEUsIDB4MDYsIDB4RkMsIDB4MDUsIDB4RTcsIDB4MDcsCisJMHg0RSwgMHgwNiwgMHgwMCwgMHgwNiwgMHhFNywgMHgwNywgMHg0MCwgMHgwMCwKKwkweDAyLCAweDA2LCAweDlGLCAweEFGLCAweDY2LCAweDA1LCAweDlGLCAweEFGLAorCTB4QzYsIDB4MDAsIDB4OTcsIDB4Q0YsIDB4QzEsIDB4MEIsIDB4RTIsIDB4MDUsCisJMHg0MSwgMHhEMCwgMHgwMSwgMHhEMiwgMHhDMSwgMHgxNywgMHgyMywgMHgwMCwKKwkweDlGLCAweEFGLCAweERDLCAweDA0LCAweEMwLCAweDA3LCAweDA0LCAweDAwLAorCTB4QzEsIDB4MEIsIDB4RTMsIDB4MDUsIDB4OUYsIDB4QUYsIDB4MjgsIDB4MDUsCisJMHhDMCwgMHgwNywgMHgwNiwgMHgwMCwgMHhDMSwgMHgwOSwgMHhFNiwgMHgwNSwKKwkweDlGLCAweEFGLCAweDI4LCAweDA1LCAweEMwLCAweDA3LCAweDA3LCAweDAwLAorCTB4QzEsIDB4MDksIDB4RTYsIDB4MDUsIDB4QzEsIDB4RDEsIDB4OUYsIDB4QUYsCisJMHgyOCwgMHgwNSwgMHhDMCwgMHgwNywgMHgwQiwgMHgwMCwgMHhDMSwgMHgwOSwKKwkweEU4LCAweDA1LCAweDlGLCAweEFGLCAweDI4LCAweDA1LCAweEMwLCAweDA3LAorCTB4MEMsIDB4MDAsIDB4QzEsIDB4MDksIDB4RTgsIDB4MDUsIDB4QzEsIDB4RDEsCisJMHg5RiwgMHhBRiwgMHgyOCwgMHgwNSwgMHhDMCwgMHgwNywgMHgwRCwgMHgwMCwKKwkweEMxLCAweDA3LCAweDA5LCAweDAwLCAweDlGLCAweEFGLCAweDI4LCAweDA1LAorCTB4QzAsIDB4MDcsIDB4MDMsIDB4MDAsIDB4QzEsIDB4MDcsIDB4MzIsIDB4MDAsCisJMHg5RiwgMHhBRiwgMHgyOCwgMHgwNSwgMHhDMCwgMHgwNywgMHgwRiwgMHgwMCwKKwkweEMxLCAweDA3LCAweDAwLCAweDAwLCAweDlGLCAweEFGLCAweDI4LCAweDA1LAorCTB4OTcsIDB4Q0YsIDB4RTcsIDB4NjcsIDB4RkYsIDB4RDksIDB4MjQsIDB4QzAsCisJMHhDOCwgMHgwNywgMHgwQSwgMHgwMCwgMHg0MCwgMHgwMCwgMHhDMCwgMHg2NywKKwkweDAwLCAweDAyLCAweDI3LCAweDgwLCAweDI0LCAweEMwLCAweEU3LCAweDg3LAorCTB4MDAsIDB4MDQsIDB4MjQsIDB4QzAsIDB4RTcsIDB4NjcsIDB4RkYsIDB4RjksCisJMHgyNCwgMHhDMCwgMHgwMSwgMHhEMiwgMHgwOCwgMHhEQSwgMHg3MiwgMHhDMSwKKwkweEU3LCAweDg3LCAweDAwLCAweDIwLCAweDI0LCAweEMwLCAweDk3LCAweENGLAorCTB4MjcsIDB4MDAsIDB4MUUsIDB4QzAsIDB4RTcsIDB4ODcsIDB4RkYsIDB4MDAsCisJMHgyMiwgMHhDMCwgMHhFNywgMHg2NywgMHg3RiwgMHhGRiwgMHgyNCwgMHhDMCwKKwkweEU3LCAweDg3LCAweDgwLCAweDAwLCAweDI0LCAweEMwLCAweEU3LCAweDg3LAorCTB4ODAsIDB4MDAsIDB4MjQsIDB4QzAsIDB4OTcsIDB4Q0YsIDB4OUYsIDB4QUYsCisJMHgwQSwgMHgwNSwgMHg2NywgMHgwMCwgMHgxRSwgMHhDMCwgMHhFNywgMHg2NywKKwkweEJGLCAweEZGLCAweDI0LCAweEMwLCAweEU3LCAweDg3LCAweDQwLCAweDAwLAorCTB4MjQsIDB4QzAsIDB4RTcsIDB4ODcsIDB4NDAsIDB4MDAsIDB4MjQsIDB4QzAsCisJMHg5NywgMHhDRiwgMHg5RiwgMHhBRiwgMHgwQSwgMHgwNSwgMHhFNywgMHg2NywKKwkweDAwLCAweEZGLCAweDIyLCAweEMwLCAweEU3LCAweDY3LCAweEZGLCAweEZFLAorCTB4MjQsIDB4QzAsIDB4RTcsIDB4NjcsIDB4RkYsIDB4RkUsIDB4MjQsIDB4QzAsCisJMHhDMSwgMHgwOSwgMHgyMCwgMHhDMCwgMHhFNywgMHg4NywgMHgwMCwgMHgwMSwKKwkweDI0LCAweEMwLCAweDk3LCAweENGLCAweEMwLCAweDA3LCAweDQwLCAweDAwLAorCTB4QzgsIDB4MDksIDB4RkMsIDB4MDUsIDB4RTcsIDB4NjcsIDB4MDAsIDB4RkYsCisJMHgyMiwgMHhDMCwgMHhFNywgMHg2NywgMHhGRiwgMHhGRSwgMHgyNCwgMHhDMCwKKwkweEU3LCAweDY3LCAweEJGLCAweEZGLCAweDI0LCAweEMwLCAweEU3LCAweDY3LAorCTB4QkYsIDB4RkYsIDB4MjQsIDB4QzAsIDB4MDAsIDB4REEsIDB4RTgsIDB4MDksCisJMHgyMCwgMHhDMCwgMHhFNywgMHg4NywgMHg0MCwgMHgwMCwgMHgyNCwgMHhDMCwKKwkweEU3LCAweDg3LCAweDQwLCAweDAwLCAweDI0LCAweEMwLCAweDAwLCAweERBLAorCTB4RTgsIDB4MDksIDB4MjAsIDB4QzAsIDB4NkQsIDB4QzEsIDB4RTcsIDB4ODcsCisJMHgwMCwgMHgwMSwgMHgyNCwgMHhDMCwgMHg5NywgMHhDRiwgMHhFNywgMHgwNywKKwkweDMyLCAweDAwLCAweDEyLCAweEMwLCAweEU3LCAweDc3LCAweDAwLCAweDgwLAorCTB4MTIsIDB4QzAsIDB4N0MsIDB4QzAsIDB4OTcsIDB4Q0YsIDB4RTcsIDB4MDcsCisJMHgyMCwgMHg0RSwgMHgxMiwgMHhDMCwgMHhFNywgMHg3NywgMHgwMCwgMHg4MCwKKwkweDEyLCAweEMwLCAweDdDLCAweEMwLCAweDk3LCAweENGLCAweDA5LCAweDAyLAorCTB4MTksIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTYsIDB4MDksCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDA3LCAweDA1LCAweDgxLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBzZXR1cDVbXSA9IHsKKwkweEI2LCAweEMzLCAweDJGLCAweDAxLCAweDAzLCAweDY0LCAweDBFLCAweDAwLAorCTB4MTQsIDB4MDAsIDB4MUEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MjYsIDB4MDAsCisJMHg0QSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2QSwgMHgwMCwgMHg5MiwgMHgwMCwKKwkweDlBLCAweDAwLCAweEEwLCAweDAwLCAweEIyLCAweDAwLCAweEI4LCAweDAwLAorCTB4QkUsIDB4MDAsIDB4QzIsIDB4MDAsIDB4QzgsIDB4MDAsIDB4Q0UsIDB4MDAsCisJMHhEQywgMHgwMCwgMHhEQSwgMHgwMCwgMHhFMiwgMHgwMCwgMHhFMCwgMHgwMCwKKwkweEU4LCAweDAwLCAweEU2LCAweDAwLCAweEVFLCAweDAwLCAweEVDLCAweDAwLAorCTB4RjIsIDB4MDAsIDB4RjgsIDB4MDAsIDB4MDIsIDB4MDEsIDB4MEEsIDB4MDEsCisJMHgwRSwgMHgwMSwgMHgxMiwgMHgwMSwgMHgxRSwgMHgwMSwgMHgyMiwgMHgwMSwKKwkweDI4LCAweDAxLCAweDJDLCAweDAxLCAweDMyLCAweDAxLCAweDM2LCAweDAxLAorCTB4NDQsIDB4MDEsIDB4NTAsIDB4MDEsIDB4NUUsIDB4MDEsIDB4NzIsIDB4MDEsCisJMHg3NiwgMHgwMSwgMHg3QSwgMHgwMSwgMHg4MCwgMHgwMSwgMHg4OCwgMHgwMSwKKwkweDhDLCAweDAxLCAweDk0LCAweDAxLCAweDlDLCAweDAxLCAweEEwLCAweDAxLAorCTB4QTQsIDB4MDEsIDB4QUEsIDB4MDEsIDB4QjAsIDB4MDEsIDB4QjQsIDB4MDEsCisJMHhCQSwgMHgwMSwgMHhEMCwgMHgwMSwgMHhEQSwgMHgwMSwgMHhGNiwgMHgwMSwKKwkweEZBLCAweDAxLCAweDAyLCAweDAyLCAweDM0LCAweDAyLCAweDNDLCAweDAyLAorCTB4NDQsIDB4MDIsIDB4NEEsIDB4MDIsIDB4NTAsIDB4MDIsIDB4NTYsIDB4MDIsCisJMHg3NCwgMHgwMiwgMHg3OCwgMHgwMiwgMHg3RSwgMHgwMiwgMHg4NCwgMHgwMiwKKwkweDhBLCAweDAyLCAweDg4LCAweDAyLCAweDkwLCAweDAyLCAweDhFLCAweDAyLAorCTB4OTQsIDB4MDIsIDB4QTIsIDB4MDIsIDB4QTgsIDB4MDIsIDB4QUUsIDB4MDIsCisJMHhCNCwgMHgwMiwgMHhCQSwgMHgwMiwgMHhCOCwgMHgwMiwgMHhDMCwgMHgwMiwKKwkweEJFLCAweDAyLCAweEM0LCAweDAyLCAweEQwLCAweDAyLCAweEQ0LCAweDAyLAorCTB4RTAsIDB4MDIsIDB4RTYsIDB4MDIsIDB4RUUsIDB4MDIsIDB4RjgsIDB4MDIsCisJMHhGQywgMHgwMiwgMHgwNiwgMHgwMywgMHgxRSwgMHgwMywgMHgyNCwgMHgwMywKKwkweDI4LCAweDAzLCAweDMwLCAweDAzLCAweDJFLCAweDAzLCAweDNDLCAweDAzLAorCTB4NEEsIDB4MDMsIDB4NEUsIDB4MDMsIDB4NTQsIDB4MDMsIDB4NTgsIDB4MDMsCisJMHg1RSwgMHgwMywgMHg2NiwgMHgwMywgMHg2RSwgMHgwMywgMHg3QSwgMHgwMywKKwkweDg2LCAweDAzLCAweDhFLCAweDAzLCAweDk2LCAweDAzLCAweEIyLCAweDAzLAorCTB4QjgsIDB4MDMsIDB4QzYsIDB4MDMsIDB4Q0MsIDB4MDMsIDB4RDQsIDB4MDMsCisJMHhEQSwgMHgwMywgMHhFOCwgMHgwMywgMHhGNCwgMHgwMywgMHhGQywgMHgwMywKKwkweDA0LCAweDA0LCAweDIwLCAweDA0LCAweDJBLCAweDA0LCAweDMyLCAweDA0LAorCTB4MzYsIDB4MDQsIDB4M0UsIDB4MDQsIDB4NDQsIDB4MDQsIDB4NDIsIDB4MDQsCisJMHg0OCwgMHgwNCwgMHg0RSwgMHgwNCwgMHg0QywgMHgwNCwgMHg1NCwgMHgwNCwKKwkweDUyLCAweDA0LCAweDVBLCAweDA0LCAweDVFLCAweDA0LCAweDYyLCAweDA0LAorCTB4NjgsIDB4MDQsIDB4NzQsIDB4MDQsIDB4N0MsIDB4MDQsIDB4ODAsIDB4MDQsCisJMHg4OCwgMHgwNCwgMHg4QywgMHgwNCwgMHg5NCwgMHgwNCwgMHg5QSwgMHgwNCwKKwkweEEyLCAweDA0LCAweEE2LCAweDA0LCAweEFFLCAweDA0LCAweEI0LCAweDA0LAorCTB4QzAsIDB4MDQsIDB4Q0MsIDB4MDQsIDB4RDgsIDB4MDQsIDB4MkEsIDB4MDUsCisJMHg0NiwgMHgwNSwgMHg2QywgMHgwNSwgMHgwMCwgMHgwMAorfTsKKworLyogcnZtYWxsb2MgLyBydmZyZWUgY29waWVkIGZyb20gdXNidmlkZW8uYworICoKKyAqIE5vdCBzdXJlIHdoeSB0aGVzZSBhcmUgbm90IHlldCBub24tc3RhdGljcyB3aGljaCBJIGNhbiByZWZlcmVuY2UgdGhyb3VnaAorICogdXNidmlkZW8uaCB0aGUgc2FtZSBhcyBpdCBpcyBpbiAyLjQuMjAuICBJIGJldCB0aGlzIHdpbGwgZ2V0IGZpeGVkIHNvbWV0aW1lCisgKiBpbiB0aGUgZnV0dXJlLgorICogCisqLworc3RhdGljIHZvaWQgKnJ2bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl2b2lkICptZW07CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlzaXplID0gUEFHRV9BTElHTihzaXplKTsKKwltZW0gPSB2bWFsbG9jXzMyKHNpemUpOworCWlmICghbWVtKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldChtZW0sIDAsIHNpemUpOyAvKiBDbGVhciB0aGUgcmFtIG91dCwgbm8ganVuayB0byB0aGUgdXNlciAqLworCWFkciA9ICh1bnNpZ25lZCBsb25nKSBtZW07CisJd2hpbGUgKHNpemUgPiAwKSB7CisJCVNldFBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJYWRyICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCisJcmV0dXJuIG1lbTsKK30KKworc3RhdGljIHZvaWQgcnZmcmVlKHZvaWQgKm1lbSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgYWRyOworCisJaWYgKCFtZW0pCisJCXJldHVybjsKKworCWFkciA9ICh1bnNpZ25lZCBsb25nKSBtZW07CisJd2hpbGUgKChsb25nKSBzaXplID4gMCkgeworCQlDbGVhclBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJYWRyICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCXZmcmVlKG1lbSk7Cit9CisKK3N0cnVjdCB2aWNhbV9jYW1lcmEgeworCXUxNiBzaHV0dGVyX3NwZWVkOwkvLyBjYXB0dXJlIHNodXR0ZXIgc3BlZWQKKwl1MTYgZ2FpbjsJCS8vIGNhcHR1cmUgZ2FpbgorCisJdTggKnJhd19pbWFnZTsJCS8vIHJhdyBkYXRhIGNhcHR1cmVkIGZyb20gdGhlIGNhbWVyYQorCXU4ICpmcmFtZWJ1ZjsJCS8vIHByb2Nlc3NlZCBkYXRhIGluIFJHQjI0IGZvcm1hdAorCXU4ICpjbnRybGJ1ZjsJCS8vIGFyZWEgdXNlZCB0byBzZW5kIGNvbnRyb2wgbXNncworCisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OwkvLyB2NGwgdmlkZW8gZGV2aWNlCisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CS8vIHVzYiBkZXZpY2UKKworCS8qIGd1YXJkIGFnYWluc3Qgc2ltdWx0YW5lb3VzIGFjY2Vzc2VzIHRvIHRoZSBjYW1lcmEgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIGNhbV9sb2NrOworCisJaW50IGlzX2luaXRpYWxpemVkOworCXU4IG9wZW5fY291bnQ7CisJdTggYnVsa0VuZHBvaW50OworCWludCBuZWVkc0R1bW15UmVhZDsKKworI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX1BST0NfRlMpCisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2RpcjsKKyNlbmRpZgorCit9OworCitzdGF0aWMgaW50IHZpY2FtX3Byb2JlKCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIHZpY2FtX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworc3RhdGljIHZvaWQgcmVhZF9mcmFtZShzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0sIGludCBmcmFtZW51bSk7CitzdGF0aWMgdm9pZCB2aWNhbV9kZWNvZGVfY29sb3IoY29uc3QgdTggKiwgdTggKik7CisKK3N0YXRpYyBpbnQgX19zZW5kX2NvbnRyb2xfbXNnKHN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSwKKwkJCSAgICAgIHU4IHJlcXVlc3QsCisJCQkgICAgICB1MTYgdmFsdWUsCisJCQkgICAgICB1MTYgaW5kZXgsCisJCQkgICAgICB1bnNpZ25lZCBjaGFyICpjcCwKKwkJCSAgICAgIHUxNiBzaXplKQoreworCWludCBzdGF0dXM7CisKKwkvKiBjcCBtdXN0IGJlIG1lbW9yeSB0aGF0IGhhcyBiZWVuIGFsbG9jYXRlZCBieSBrbWFsbG9jICovCisKKwlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2coY2FtLT51ZGV2LAorCQkJCSB1c2Jfc25kY3RybHBpcGUoY2FtLT51ZGV2LCAwKSwKKwkJCQkgcmVxdWVzdCwKKwkJCQkgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfAorCQkJCSBVU0JfUkVDSVBfREVWSUNFLCB2YWx1ZSwgaW5kZXgsCisJCQkJIGNwLCBzaXplLCAxMDAwKTsKKworCXN0YXR1cyA9IG1pbihzdGF0dXMsIDApOworCisJaWYgKHN0YXR1cyA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRmFpbGVkIHNlbmRpbmcgY29udHJvbCBtZXNzYWdlLCBlcnJvciAlZC5cbiIsCisJCSAgICAgICBzdGF0dXMpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgc2VuZF9jb250cm9sX21zZyhzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0sCisJCQkgICAgdTggcmVxdWVzdCwKKwkJCSAgICB1MTYgdmFsdWUsCisJCQkgICAgdTE2IGluZGV4LAorCQkJICAgIHVuc2lnbmVkIGNoYXIgKmNwLAorCQkJICAgIHUxNiBzaXplKQoreworCWludCBzdGF0dXMgPSAtRU5PREVWOworCWRvd24oJmNhbS0+Y2FtX2xvY2spOworCWlmIChjYW0tPnVkZXYpIHsKKwkJc3RhdHVzID0gX19zZW5kX2NvbnRyb2xfbXNnKGNhbSwgcmVxdWVzdCwgdmFsdWUsCisJCQkJCSAgICBpbmRleCwgY3AsIHNpemUpOworCX0KKwl1cCgmY2FtLT5jYW1fbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KK3N0YXRpYyBpbnQKK2luaXRpYWxpemVfY2FtZXJhKHN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSkKK3sKKwljb25zdCBzdHJ1Y3QgeworCQl1OCAqZGF0YTsKKwkJdTMyIHNpemU7CisJfSBmaXJtd2FyZVtdID0geworCQl7IC5kYXRhID0gc2V0dXAxLCAuc2l6ZSA9IHNpemVvZihzZXR1cDEpIH0sCisJCXsgLmRhdGEgPSBzZXR1cDIsIC5zaXplID0gc2l6ZW9mKHNldHVwMikgfSwKKwkJeyAuZGF0YSA9IHNldHVwMywgLnNpemUgPSBzaXplb2Yoc2V0dXAzKSB9LAorCQl7IC5kYXRhID0gc2V0dXA0LCAuc2l6ZSA9IHNpemVvZihzZXR1cDQpIH0sCisJCXsgLmRhdGEgPSBzZXR1cDUsIC5zaXplID0gc2l6ZW9mKHNldHVwNSkgfSwKKwkJeyAuZGF0YSA9IHNldHVwMywgLnNpemUgPSBzaXplb2Yoc2V0dXAzKSB9LAorCQl7IC5kYXRhID0gTlVMTCwgLnNpemUgPSAwIH0KKwl9OworCisJaW50IGVyciwgaTsKKworCWZvciAoaSA9IDAsIGVyciA9IDA7IGZpcm13YXJlW2ldLmRhdGEgJiYgIWVycjsgaSsrKSB7CisJCW1lbWNweShjYW0tPmNudHJsYnVmLCBmaXJtd2FyZVtpXS5kYXRhLCBmaXJtd2FyZVtpXS5zaXplKTsKKworCQllcnIgPSBzZW5kX2NvbnRyb2xfbXNnKGNhbSwgMHhmZiwgMCwgMCwKKwkJCQkgICAgICAgY2FtLT5jbnRybGJ1ZiwgZmlybXdhcmVbaV0uc2l6ZSk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludAorc2V0X2NhbWVyYV9wb3dlcihzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0sIGludCBzdGF0ZSkKK3sKKwlpbnQgc3RhdHVzOworCisJaWYgKChzdGF0dXMgPSBzZW5kX2NvbnRyb2xfbXNnKGNhbSwgMHg1MCwgc3RhdGUsIDAsIE5VTEwsIDApKSA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAoc3RhdGUpIHsKKwkJc2VuZF9jb250cm9sX21zZyhjYW0sIDB4NTUsIDEsIDAsIE5VTEwsIDApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit2aWNhbV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGlvY3RsbnIsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXZvaWQgX191c2VyICp1c2VyX2FyZyA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAoIWNhbSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzd2l0Y2ggKGlvY3RsbnIpIHsKKwkJLyogcXVlcnkgY2FwYWJpbGl0aWVzICovCisJY2FzZSBWSURJT0NHQ0FQOgorCQl7CisJCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSBiOworCisJCQlEQkcoIlZJRElPQ0dDQVBcbiIpOworCQkJbWVtc2V0KCZiLCAwLCBzaXplb2YoYikpOworCQkJc3RyY3B5KGIubmFtZSwgIlZpQ2FtLWJhc2VkIENhbWVyYSIpOworCQkJYi50eXBlID0gVklEX1RZUEVfQ0FQVFVSRTsKKwkJCWIuY2hhbm5lbHMgPSAxOworCQkJYi5hdWRpb3MgPSAwOworCQkJYi5tYXh3aWR0aCA9IDMyMDsJLyogVklERU9TSVpFX0NJRiAqLworCQkJYi5tYXhoZWlnaHQgPSAyNDA7CisJCQliLm1pbndpZHRoID0gMzIwOwkvKiBWSURFT1NJWkVfNDhfNDggKi8KKwkJCWIubWluaGVpZ2h0ID0gMjQwOworCisJCQlpZiAoY29weV90b191c2VyKHVzZXJfYXJnLCAmYiwgc2l6ZW9mKGIpKSkKKwkJCQlyZXR2YWwgPSAtRUZBVUxUOworCisJCQlicmVhazsKKwkJfQorCQkvKiBnZXQvc2V0IHZpZGVvIHNvdXJjZSAtIHdlIGFyZSBhIGNhbWVyYSBhbmQgbm90aGluZyBlbHNlICovCisJY2FzZSBWSURJT0NHQ0hBTjoKKwkJeworCQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgdjsKKworCQkJREJHKCJWSURJT0NHQ0hBTlxuIik7CisJCQlpZiAoY29weV9mcm9tX3VzZXIoJnYsIHVzZXJfYXJnLCBzaXplb2YodikpKSB7CisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICh2LmNoYW5uZWwgIT0gMCkgeworCQkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXYuY2hhbm5lbCA9IDA7CisJCQlzdHJjcHkodi5uYW1lLCAiQ2FtZXJhIik7CisJCQl2LnR1bmVycyA9IDA7CisJCQl2LmZsYWdzID0gMDsKKwkJCXYudHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOworCQkJdi5ub3JtID0gMDsKKworCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgJnYsIHNpemVvZih2KSkpCisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIFZJRElPQ1NDSEFOOgorCQl7CisJCQlpbnQgdjsKKworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2LCB1c2VyX2FyZywgc2l6ZW9mKHYpKSkKKwkJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJREJHKCJWSURJT0NTQ0hBTiAlZFxuIiwgdik7CisKKwkJCWlmIChyZXR2YWwgPT0gMCAmJiB2ICE9IDApCisJCQkJcmV0dmFsID0gLUVJTlZBTDsKKworCQkJYnJlYWs7CisJCX0KKworCQkvKiBpbWFnZSBwcm9wZXJ0aWVzICovCisJY2FzZSBWSURJT0NHUElDVDoKKwkJeworCQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgdnA7CisJCQlEQkcoIlZJRElPQ0dQSUNUXG4iKTsKKwkJCW1lbXNldCgmdnAsIDAsIHNpemVvZiAoc3RydWN0IHZpZGVvX3BpY3R1cmUpKTsKKwkJCXZwLmJyaWdodG5lc3MgPSBjYW0tPmdhaW4gPDwgODsKKwkJCXZwLmRlcHRoID0gMjQ7CisJCQl2cC5wYWxldHRlID0gVklERU9fUEFMRVRURV9SR0IyNDsKKwkJCWlmIChjb3B5X3RvX3VzZXIodXNlcl9hcmcsICZ2cCwgc2l6ZW9mIChzdHJ1Y3QgdmlkZW9fcGljdHVyZSkpKQorCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCisJY2FzZSBWSURJT0NTUElDVDoKKwkJeworCQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgdnA7CisJCQkKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmdnAsIHVzZXJfYXJnLCBzaXplb2YodnApKSkgeworCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQkKKwkJCURCRygiVklESU9DU1BJQ1QgZGVwdGggPSAlZCwgcGFsID0gJWRcbiIsIHZwLmRlcHRoLAorCQkJICAgIHZwLnBhbGV0dGUpOworCisJCQljYW0tPmdhaW4gPSB2cC5icmlnaHRuZXNzID4+IDg7CisKKwkJCWlmICh2cC5kZXB0aCAhPSAyNAorCQkJICAgIHx8IHZwLnBhbGV0dGUgIT0gVklERU9fUEFMRVRURV9SR0IyNCkKKwkJCQlyZXR2YWwgPSAtRUlOVkFMOworCisJCQlicmVhazsKKwkJfQorCisJCS8qIGdldC9zZXQgY2FwdHVyZSB3aW5kb3cgKi8KKwljYXNlIFZJRElPQ0dXSU46CisJCXsKKwkJCXN0cnVjdCB2aWRlb193aW5kb3cgdnc7CisJCQl2dy54ID0gMDsKKwkJCXZ3LnkgPSAwOworCQkJdncud2lkdGggPSAzMjA7CisJCQl2dy5oZWlnaHQgPSAyNDA7CisJCQl2dy5jaHJvbWFrZXkgPSAwOworCQkJdncuZmxhZ3MgPSAwOworCQkJdncuY2xpcHMgPSBOVUxMOworCQkJdncuY2xpcGNvdW50ID0gMDsKKworCQkJREJHKCJWSURJT0NHV0lOXG4iKTsKKworCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgKHZvaWQgKikmdncsIHNpemVvZih2dykpKQorCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisKKwkJCS8vIEknbSBub3Qgc3VyZSB3aGF0IHRoZSBkZWFsIHdpdGggYSBjYXB0dXJlIHdpbmRvdyBpcywgaXQgaXMgdmVyeSBwb29ybHkgZGVzY3JpYmVkCisJCQkvLyBpbiB0aGUgZG9jLiAgU28gSSB3b24ndCBzdXBwb3J0IGl0IG5vdy4KKwkJCWJyZWFrOworCQl9CisKKwljYXNlIFZJRElPQ1NXSU46CisJCXsKKworCQkJc3RydWN0IHZpZGVvX3dpbmRvdyB2dzsKKworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2dywgdXNlcl9hcmcsIHNpemVvZih2dykpKSB7CisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJREJHKCJWSURJT0NTV0lOICVkIHggJWRcbiIsIHZ3LndpZHRoLCB2dy5oZWlnaHQpOworCQkJCisJCQlpZiAoIHZ3LndpZHRoICE9IDMyMCB8fCB2dy5oZWlnaHQgIT0gMjQwICkKKwkJCQlyZXR2YWwgPSAtRUZBVUxUOworCisJCQlicmVhazsKKwkJfQorCisJCS8qIG1tYXAgaW50ZXJmYWNlICovCisJY2FzZSBWSURJT0NHTUJVRjoKKwkJeworCQkJc3RydWN0IHZpZGVvX21idWYgdm07CisJCQlpbnQgaTsKKworCQkJREJHKCJWSURJT0NHTUJVRlxuIik7CisJCQltZW1zZXQoJnZtLCAwLCBzaXplb2YgKHZtKSk7CisJCQl2bS5zaXplID0KKwkJCSAgICBWSUNBTV9NQVhfRlJBTUVfU0laRSAqIFZJQ0FNX0ZSQU1FUzsKKwkJCXZtLmZyYW1lcyA9IFZJQ0FNX0ZSQU1FUzsKKwkJCWZvciAoaSA9IDA7IGkgPCBWSUNBTV9GUkFNRVM7IGkrKykKKwkJCQl2bS5vZmZzZXRzW2ldID0gVklDQU1fTUFYX0ZSQU1FX1NJWkUgKiBpOworCisJCQlpZiAoY29weV90b191c2VyKHVzZXJfYXJnLCAodm9pZCAqKSZ2bSwgc2l6ZW9mKHZtKSkpCisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgVklESU9DTUNBUFRVUkU6CisJCXsKKwkJCXN0cnVjdCB2aWRlb19tbWFwIHZtOworCQkJLy8gaW50IHZpZGVvX3NpemU7CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigodm9pZCAqKSZ2bSwgdXNlcl9hcmcsIHNpemVvZih2bSkpKSB7CisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJREJHKCJWSURJT0NNQ0FQVFVSRSBmcmFtZT0lZCwgaGVpZ2h0PSVkLCB3aWR0aD0lZCwgZm9ybWF0PSVkLlxuIix2bS5mcmFtZSx2bS53aWR0aCx2bS5oZWlnaHQsdm0uZm9ybWF0KTsKKworCQkJaWYgKCB2bS5mcmFtZSA+PSBWSUNBTV9GUkFNRVMgfHwgdm0uZm9ybWF0ICE9IFZJREVPX1BBTEVUVEVfUkdCMjQgKQorCQkJCXJldHZhbCA9IC1FSU5WQUw7CisKKwkJCS8vIGluIHRoZW9yeSByaWdodCBoZXJlIHdlJ2Qgc3RhcnQgdGhlIGltYWdlIGNhcHR1cmluZworCQkJLy8gKGZpbGwgaW4gYSBidWxrIHVyYiBhbmQgc3VibWl0IGl0IGFzeW5jaHJvbm91c2x5KQorCQkJLy8KKwkJCS8vIEluc3RlYWQgd2UncmUgZ29pbmcgdG8gZG8gYSB0b3RhbCBoYWNrIGpvYiBmb3Igbm93IGFuZAorCQkJLy8gcmV0cmlldmUgdGhlIGZyYW1lIGluIFZJRElPQ1NZTkMKKworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgVklESU9DU1lOQzoKKwkJeworCQkJaW50IGZyYW1lOworCisJCQlpZiAoY29weV9mcm9tX3VzZXIoKHZvaWQgKikmZnJhbWUsIHVzZXJfYXJnLCBzaXplb2YoaW50KSkpIHsKKwkJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJCWJyZWFrOworCQkJfQorCQkJREJHKCJWSURJT0NTWU5DOiAlZFxuIiwgZnJhbWUpOworCisJCQlyZWFkX2ZyYW1lKGNhbSwgZnJhbWUpOworCQkJdmljYW1fZGVjb2RlX2NvbG9yKGNhbS0+cmF3X2ltYWdlLAorCQkJCQkgICBjYW0tPmZyYW1lYnVmICsKKwkJCQkJICAgZnJhbWUgKiBWSUNBTV9NQVhfRlJBTUVfU0laRSApOworCisJCQlicmVhazsKKwkJfQorCisJCS8qIHBvaW50bGVzcyB0byBpbXBsZW1lbnQgb3ZlcmxheSB3aXRoIHRoaXMgY2FtZXJhICovCisJY2FzZSBWSURJT0NDQVBUVVJFOgorCWNhc2UgVklESU9DR0ZCVUY6CisJY2FzZSBWSURJT0NTRkJVRjoKKwljYXNlIFZJRElPQ0tFWToKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJYnJlYWs7CisKKwkJLyogdHVuZXIgaW50ZXJmYWNlIC0gd2UgaGF2ZSBub25lICovCisJY2FzZSBWSURJT0NHVFVORVI6CisJY2FzZSBWSURJT0NTVFVORVI6CisJY2FzZSBWSURJT0NHRlJFUToKKwljYXNlIFZJRElPQ1NGUkVROgorCQlyZXR2YWwgPSAtRUlOVkFMOworCQlicmVhazsKKworCQkvKiBhdWRpbyBpbnRlcmZhY2UgLSB3ZSBoYXZlIG5vbmUgKi8KKwljYXNlIFZJRElPQ0dBVURJTzoKKwljYXNlIFZJRElPQ1NBVURJTzoKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dmFsID0gLUVOT0lPQ1RMQ01EOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50Cit2aWNhbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CisJc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtID0KKwkgICAgKHN0cnVjdCB2aWNhbV9jYW1lcmEgKikgZGV2LT5wcml2OworCURCRygib3BlblxuIik7CisKKwlpZiAoIWNhbSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJ2aWNhbSB2aWRlb19kZXZpY2UgaW1wcm9wZXJseSBpbml0aWFsaXplZCIpOworCX0KKworCS8qIHRoZSB2aWRlb2Rldl9sb2NrIGhlbGQgYWJvdmUgdXMgcHJvdGVjdHMgdXMgZnJvbQorCSAqIHNpbXVsdGFuZW91cyBvcGVucy4uLmZvciBub3cuIHdlIHByb2JhYmx5IHNob3VsZG4ndAorCSAqIHJlbHkgb24gdGhpcyBmYWN0IGZvcmV2ZXIuCisJICovCisKKwlpZiAoY2FtLT5vcGVuX2NvdW50ID4gMCkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAidmljYW1fb3BlbiBjYWxsZWQgb24gYWxyZWFkeSBvcGVuZWQgY2FtZXJhIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJY2FtLT5yYXdfaW1hZ2UgPSBrbWFsbG9jKFZJQ0FNX01BWF9SRUFEX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghY2FtLT5yYXdfaW1hZ2UpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY2FtLT5mcmFtZWJ1ZiA9IHJ2bWFsbG9jKFZJQ0FNX01BWF9GUkFNRV9TSVpFICogVklDQU1fRlJBTUVTKTsKKwlpZiAoIWNhbS0+ZnJhbWVidWYpIHsKKwkJa2ZyZWUoY2FtLT5yYXdfaW1hZ2UpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljYW0tPmNudHJsYnVmID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghY2FtLT5jbnRybGJ1ZikgeworCQlrZnJlZShjYW0tPnJhd19pbWFnZSk7CisJCXJ2ZnJlZShjYW0tPmZyYW1lYnVmLCBWSUNBTV9NQVhfRlJBTUVfU0laRSAqIFZJQ0FNX0ZSQU1FUyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8vIEZpcnN0IHVwbG9hZCBmaXJtd2FyZSwgdGhlbiB0dXJuIHRoZSBjYW1lcmEgb24KKworCWlmICghY2FtLT5pc19pbml0aWFsaXplZCkgeworCQlpbml0aWFsaXplX2NhbWVyYShjYW0pOworCisJCWNhbS0+aXNfaW5pdGlhbGl6ZWQgPSAxOworCX0KKworCXNldF9jYW1lcmFfcG93ZXIoY2FtLCAxKTsKKworCWNhbS0+bmVlZHNEdW1teVJlYWQgPSAxOworCWNhbS0+b3Blbl9jb3VudCsrOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY2FtOwkKKwkKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCAKK3ZpY2FtX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgb3Blbl9jb3VudDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKworCURCRygiY2xvc2VcbiIpOworCisJLyogaXQncyBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGQgaWYKKwkgKiB3ZSBmYWlsIHRvIHR1cm4gdGhlIGNhbWVyYSBvZmYuCisJICovCisKKwlzZXRfY2FtZXJhX3Bvd2VyKGNhbSwgMCk7CisKKwlrZnJlZShjYW0tPnJhd19pbWFnZSk7CisJcnZmcmVlKGNhbS0+ZnJhbWVidWYsIFZJQ0FNX01BWF9GUkFNRV9TSVpFICogVklDQU1fRlJBTUVTKTsKKwlrZnJlZShjYW0tPmNudHJsYnVmKTsKKworCWRvd24oJmNhbS0+Y2FtX2xvY2spOworCisJY2FtLT5vcGVuX2NvdW50LS07CisJb3Blbl9jb3VudCA9IGNhbS0+b3Blbl9jb3VudDsKKwl1ZGV2ID0gY2FtLT51ZGV2OworCisJdXAoJmNhbS0+Y2FtX2xvY2spOworCisJaWYgKCFvcGVuX2NvdW50ICYmICF1ZGV2KSB7CisJCWtmcmVlKGNhbSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZpY2FtX2RlY29kZV9jb2xvcihjb25zdCB1OCAqZGF0YSwgdTggKnJnYikKK3sKKwkvKiB2aWNhbV9kZWNvZGVfY29sb3IgLSBDb252ZXJ0IGZyb20gVmljYW0gWS1Dci1DYiB0byBSR0IKKwkgKiBDb3B5cmlnaHQgKEMpIDIwMDIgTW9ucm9lIFdpbGxpYW1zIChtb25yb2VAcG9ib3guY29tKQorCSAqLworCisJaW50IGksIHByZXZZLCBuZXh0WTsKKworCXByZXZZID0gNTEyOworCW5leHRZID0gNTEyOworCisJZGF0YSArPSBWSUNBTV9IRUFERVJfU0laRTsKKworCWZvciggaSA9IDA7IGkgPCAyNDA7IGkrKywgZGF0YSArPSA1MTIgKSB7CisJCWNvbnN0IGludCB5ID0gKCBpICogMjQyICkgLyAyNDA7CisKKwkJaW50IGosIHByZXZYLCBuZXh0WDsKKwkJaW50IFksIENyLCBDYjsKKworCQlpZiAoIHkgPT0gMjQyIC0gMSApIHsKKwkJCW5leHRZID0gLTUxMjsKKwkJfQorCisJCXByZXZYID0gMTsKKwkJbmV4dFggPSAxOworCisJCWZvciAoIGogPSAwOyBqIDwgMzIwOyBqKyssIHJnYiArPSAzICkgeworCQkJY29uc3QgaW50IHggPSAoIGogKiA1MTIgKSAvIDMyMDsKKwkJCWNvbnN0IHU4ICogY29uc3Qgc3JjID0gJmRhdGFbeF07CisKKwkJCWlmICggeCA9PSA1MTIgLSAxICkgeworCQkJCW5leHRYID0gLTE7CisJCQl9CisKKwkJCUNyID0gKCBzcmNbcHJldlhdIC0gc3JjWzBdICkgKworCQkJCSggc3JjW25leHRYXSAtIHNyY1swXSApOworCQkJQ3IgLz0gMjsKKworCQkJQ2IgPSAoIHNyY1twcmV2WV0gLSBzcmNbcHJldlggKyBwcmV2WV0gKSArCisJCQkJKCBzcmNbcHJldlldIC0gc3JjW25leHRYICsgcHJldlldICkgKworCQkJCSggc3JjW25leHRZXSAtIHNyY1twcmV2WCArIG5leHRZXSApICsKKwkJCQkoIHNyY1tuZXh0WV0gLSBzcmNbbmV4dFggKyBuZXh0WV0gKTsKKwkJCUNiIC89IDQ7CisKKwkJCVkgPSAxMTYwICogKCBzcmNbMF0gKyAoIENyIC8gMiApIC0gMTYgKTsKKworCQkJaWYgKCBpICYgMSApIHsKKwkJCQlpbnQgQ3QgPSBDcjsKKwkJCQlDciA9IENiOworCQkJCUNiID0gQ3Q7CisJCQl9CisKKwkJCWlmICggKCB4IF4gaSApICYgMSApIHsKKwkJCQlDciA9IC1DcjsKKwkJCQlDYiA9IC1DYjsKKwkJCX0KKworCQkJcmdiWzBdID0gY2xhbXAoICggKCBZICsgKCAyMDE3ICogQ2IgKSApICsKKwkJCQkJNTAwICkgLyA5MDAsIDAsIDI1NSApOworCQkJcmdiWzFdID0gY2xhbXAoICggKCBZIC0gKCAzOTIgKiBDYiApIC0KKwkJCQkJICAoIDgxMyAqIENyICkgKSArCisJCQkJCSAgNTAwICkgLyAxMDAwLCAwLCAyNTUgKTsKKwkJCXJnYlsyXSA9IGNsYW1wKCAoICggWSArICggMTU5NCAqIENyICkgKSArCisJCQkJCTUwMCApIC8gMTMwMCwgMCwgMjU1ICk7CisKKwkJCXByZXZYID0gLTE7CisJCX0KKworCQlwcmV2WSA9IC01MTI7CisJfQorfQorCitzdGF0aWMgdm9pZAorcmVhZF9mcmFtZShzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0sIGludCBmcmFtZW51bSkKK3sKKwl1bnNpZ25lZCBjaGFyICpyZXF1ZXN0ID0gY2FtLT5jbnRybGJ1ZjsKKwlpbnQgcmVhbFNodXR0ZXI7CisJaW50IG47CisJaW50IGFjdHVhbF9sZW5ndGg7CisKKwlpZiAoY2FtLT5uZWVkc0R1bW15UmVhZCkgeworCQljYW0tPm5lZWRzRHVtbXlSZWFkID0gMDsKKwkJcmVhZF9mcmFtZShjYW0sIGZyYW1lbnVtKTsKKwl9CisKKwltZW1zZXQocmVxdWVzdCwgMCwgMTYpOworCXJlcXVlc3RbMF0gPSBjYW0tPmdhaW47CS8vIDAgPSAwJSBnYWluLCBGRiA9IDEwMCUgZ2FpbgorCisJcmVxdWVzdFsxXSA9IDA7CS8vIDUxMngyNDIgY2FwdHVyZQorCisJcmVxdWVzdFsyXSA9IDB4OTA7CS8vIHRoZSBmdW5jdGlvbiBvZiB0aGVzZSB0d28gYnl0ZXMKKwlyZXF1ZXN0WzNdID0gMHgwNzsJLy8gaXMgbm90IHlldCB1bmRlcnN0b29kCisKKwlpZiAoY2FtLT5zaHV0dGVyX3NwZWVkID4gNjApIHsKKwkJLy8gU2hvcnQgZXhwb3N1cmUKKwkJcmVhbFNodXR0ZXIgPQorCQkgICAgKCgtMTU2MzE5MDAgLyBjYW0tPnNodXR0ZXJfc3BlZWQpICsgMjYwNTMzKSAvIDEwMDA7CisJCXJlcXVlc3RbNF0gPSByZWFsU2h1dHRlciAmIDB4RkY7CisJCXJlcXVlc3RbNV0gPSAocmVhbFNodXR0ZXIgPj4gOCkgJiAweEZGOworCQlyZXF1ZXN0WzZdID0gMHgwMzsKKwkJcmVxdWVzdFs3XSA9IDB4MDE7CisJfSBlbHNlIHsKKwkJLy8gTG9uZyBleHBvc3VyZQorCQlyZWFsU2h1dHRlciA9IDE1NjAwIC8gY2FtLT5zaHV0dGVyX3NwZWVkIC0gMTsKKwkJcmVxdWVzdFs0XSA9IDA7CisJCXJlcXVlc3RbNV0gPSAwOworCQlyZXF1ZXN0WzZdID0gcmVhbFNodXR0ZXIgJiAweEZGOworCQlyZXF1ZXN0WzddID0gcmVhbFNodXR0ZXIgPj4gODsKKwl9CisKKwkvLyBQZXIgSm9obiBNYXJrdXMgQmr4cm5kYWxlbiwgYnl0ZSBhdCBpbmRleCA4IGNhdXNlcyBwcm9ibGVtcyBpZiBpdCBpc24ndCAwCisJcmVxdWVzdFs4XSA9IDA7CisJLy8gYnl0ZXMgOS0xNSBkbyBub3Qgc2VlbSB0byBhZmZlY3QgZXhwb3N1cmUgb3IgaW1hZ2UgcXVhbGl0eQorCisJZG93bigmY2FtLT5jYW1fbG9jayk7CisKKwlpZiAoIWNhbS0+dWRldikgeworCQlnb3RvIGRvbmU7CisJfQorCisJbiA9IF9fc2VuZF9jb250cm9sX21zZyhjYW0sIDB4NTEsIDB4ODAsIDAsIHJlcXVlc3QsIDE2KTsKKworCWlmIChuIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICIgUHJvYmxlbSBzZW5kaW5nIGZyYW1lIGNhcHR1cmUgY29udHJvbCBtZXNzYWdlIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwluID0gdXNiX2J1bGtfbXNnKGNhbS0+dWRldiwKKwkJCSB1c2JfcmN2YnVsa3BpcGUoY2FtLT51ZGV2LCBjYW0tPmJ1bGtFbmRwb2ludCksCisJCQkgY2FtLT5yYXdfaW1hZ2UsCisJCQkgNTEyICogMjQyICsgMTI4LCAmYWN0dWFsX2xlbmd0aCwgMTAwMDApOworCisJaWYgKG4gPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUHJvYmxlbSBkdXJpbmcgYnVsayByZWFkIG9mIGZyYW1lIGRhdGE6ICVkXG4iLAorCQkgICAgICAgbik7CisJfQorCisgZG9uZToKKwl1cCgmY2FtLT5jYW1fbG9jayk7Cit9CisKK3N0YXRpYyBzc2l6ZV90Cit2aWNhbV9yZWFkKCBzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MgKQoreworCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCURCRygicmVhZCAlZCBieXRlcy5cbiIsIChpbnQpIGNvdW50KTsKKworCWlmICgqcHBvcyA+PSBWSUNBTV9NQVhfRlJBTUVfU0laRSkgeworCQkqcHBvcyA9IDA7CisJCXJldHVybiAwOworCX0KKworCWlmICgqcHBvcyA9PSAwKSB7CisJCXJlYWRfZnJhbWUoY2FtLCAwKTsKKwkJdmljYW1fZGVjb2RlX2NvbG9yKGNhbS0+cmF3X2ltYWdlLAorCQkJCSAgIGNhbS0+ZnJhbWVidWYgKworCQkJCSAgIDAgKiBWSUNBTV9NQVhfRlJBTUVfU0laRSk7CisJfQorCisJY291bnQgPSBtaW5fdChzaXplX3QsIGNvdW50LCBWSUNBTV9NQVhfRlJBTUVfU0laRSAtICpwcG9zKTsKKworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAmY2FtLT5mcmFtZWJ1ZlsqcHBvc10sIGNvdW50KSkgeworCQljb3VudCA9IC1FRkFVTFQ7CisJfSBlbHNlIHsKKwkJKnBwb3MgKz0gY291bnQ7CisJfQorCisJaWYgKGNvdW50ID09IFZJQ0FNX01BWF9GUkFNRV9TSVpFKSB7CisJCSpwcG9zID0gMDsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKworc3RhdGljIGludAordmljYW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJLy8gVE9ETzogYWxsb2NhdGUgdGhlIHJhdyBmcmFtZSBidWZmZXIgaWYgbmVjZXNzYXJ5CisJdW5zaWduZWQgbG9uZyBwYWdlLCBwb3M7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzaXplICA9IHZtYS0+dm1fZW5kLXZtYS0+dm1fc3RhcnQ7CisJc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKCFjYW0pCisJCXJldHVybiAtRU5PREVWOworCisJREJHKCJ2aWNhbV9tbWFwOiAlbGRcbiIsIHNpemUpOworCisJLyogV2UgbGV0IG1tYXAgYWxsb2NhdGUgYXMgbXVjaCBhcyBpdCB3YW50cyBiZWNhdXNlIExpbnV4IHdhcyBhZGRpbmcgMjA0OCBieXRlcworCSAqIHRvIHRoZSBzaXplIHRoZSBhcHBsaWNhdGlvbiByZXF1ZXN0ZWQgZm9yIG1tYXAgYW5kIGl0IHdhcyBzY3Jld2luZyBhcHBzIHVwLgorCSBpZiAoc2l6ZSA+IFZJQ0FNX0ZSQU1FUypWSUNBTV9NQVhfRlJBTUVfU0laRSkKKwkgcmV0dXJuIC1FSU5WQUw7CisJICovCisKKwlwb3MgPSAodW5zaWduZWQgbG9uZyljYW0tPmZyYW1lYnVmOworCXdoaWxlIChzaXplID4gMCkgeworCQlwYWdlID0gdm1hbGxvY190b19wZm4oKHZvaWQgKilwb3MpOworCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UsIFBBR0VfU0laRSwgUEFHRV9TSEFSRUQpKQorCQkJcmV0dXJuIC1FQUdBSU47CisKKwkJc3RhcnQgKz0gUEFHRV9TSVpFOworCQlwb3MgKz0gUEFHRV9TSVpFOworCQlpZiAoc2l6ZSA+IFBBR0VfU0laRSkKKwkJCXNpemUgLT0gUEFHRV9TSVpFOworCQllbHNlCisJCQlzaXplID0gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX1BST0NfRlMpCisKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnZpY2FtX3Byb2Nfcm9vdCA9IE5VTEw7CisKK3N0YXRpYyBpbnQgdmljYW1fcmVhZF9oZWxwZXIoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCisJCQkJaW50IGNvdW50LCBpbnQgKmVvZiwgaW50IHZhbHVlKQoreworCWNoYXIgKm91dCA9IHBhZ2U7CisJaW50IGxlbjsKKworCW91dCArPSBzcHJpbnRmKG91dCwgIiVkIix2YWx1ZSk7CisKKwlsZW4gPSBvdXQgLSBwYWdlOworCWxlbiAtPSBvZmY7CisJaWYgKGxlbiA8IGNvdW50KSB7CisJCSplb2YgPSAxOworCQlpZiAobGVuIDw9IDApCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJbGVuID0gY291bnQ7CisKKwkqc3RhcnQgPSBwYWdlICsgb2ZmOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgdmljYW1fcmVhZF9wcm9jX3NodXR0ZXIoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCisJCQkJaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gdmljYW1fcmVhZF9oZWxwZXIocGFnZSxzdGFydCxvZmYsY291bnQsZW9mLAorCQkJCSgoc3RydWN0IHZpY2FtX2NhbWVyYSAqKWRhdGEpLT5zaHV0dGVyX3NwZWVkKTsKK30KKworc3RhdGljIGludCB2aWNhbV9yZWFkX3Byb2NfZ2FpbihjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKKwkJCQlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXJldHVybiB2aWNhbV9yZWFkX2hlbHBlcihwYWdlLHN0YXJ0LG9mZixjb3VudCxlb2YsCisJCQkJKChzdHJ1Y3QgdmljYW1fY2FtZXJhICopZGF0YSktPmdhaW4pOworfQorCitzdGF0aWMgaW50Cit2aWNhbV93cml0ZV9wcm9jX3NodXR0ZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKKwkJCSB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQoreworCXUxNiBzdG1wOworCWNoYXIga2J1Zls4XTsKKwlzdHJ1Y3QgdmljYW1fY2FtZXJhICpjYW0gPSAoc3RydWN0IHZpY2FtX2NhbWVyYSAqKSBkYXRhOworCisJaWYgKGNvdW50ID4gNikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoa2J1ZiwgYnVmZmVyLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJc3RtcCA9ICh1MTYpIHNpbXBsZV9zdHJ0b3VsKGtidWYsIE5VTEwsIDEwKTsKKwlpZiAoc3RtcCA8IDQgfHwgc3RtcCA+IDMyMDAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNhbS0+c2h1dHRlcl9zcGVlZCA9IHN0bXA7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQKK3ZpY2FtX3dyaXRlX3Byb2NfZ2FpbihzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmZmVyLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQoreworCXUxNiBndG1wOworCWNoYXIga2J1Zls4XTsKKworCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSA9IChzdHJ1Y3QgdmljYW1fY2FtZXJhICopIGRhdGE7CisKKwlpZiAoY291bnQgPiA0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcihrYnVmLCBidWZmZXIsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlndG1wID0gKHUxNikgc2ltcGxlX3N0cnRvdWwoa2J1ZiwgTlVMTCwgMTApOworCWlmIChndG1wID4gMjU1KQorCQlyZXR1cm4gLUVJTlZBTDsKKwljYW0tPmdhaW4gPSBndG1wOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdm9pZAordmljYW1fY3JlYXRlX3Byb2Nfcm9vdCh2b2lkKQoreworCXZpY2FtX3Byb2Nfcm9vdCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJ2aWRlby92aWNhbSIsIFNfSUZESVIsIDApOworCisJaWYgKHZpY2FtX3Byb2Nfcm9vdCkKKwkJdmljYW1fcHJvY19yb290LT5vd25lciA9IFRISVNfTU9EVUxFOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiY291bGQgbm90IGNyZWF0ZSAvcHJvYyBlbnRyeSBmb3IgdmljYW0hIik7Cit9CisKK3N0YXRpYyB2b2lkCit2aWNhbV9kZXN0cm95X3Byb2Nfcm9vdCh2b2lkKQoreworCWlmICh2aWNhbV9wcm9jX3Jvb3QpCisJCXJlbW92ZV9wcm9jX2VudHJ5KCJ2aWRlby92aWNhbSIsIDApOworfQorCitzdGF0aWMgdm9pZAordmljYW1fY3JlYXRlX3Byb2NfZW50cnkoc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtKQoreworCWNoYXIgbmFtZVs2NF07CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnQ7CisKKwlEQkcoS0VSTl9JTkZPICJ2aWNhbTogY3JlYXRpbmcgcHJvYyBlbnRyeVxuIik7CisKKwlpZiAoIXZpY2FtX3Byb2Nfcm9vdCB8fCAhY2FtKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJ2aWNhbTogY291bGQgbm90IGNyZWF0ZSBwcm9jIGVudHJ5LCAlcyBwb2ludGVyIGlzIG51bGwuXG4iLAorCQkgICAgICAgKCFjYW0gPyAiY2FtZXJhIiA6ICJyb290IikpOworCQlyZXR1cm47CisJfQorCisJc3ByaW50ZihuYW1lLCAidmlkZW8lZCIsIGNhbS0+dmRldi5taW5vcik7CisKKwljYW0tPnByb2NfZGlyID0gY3JlYXRlX3Byb2NfZW50cnkobmFtZSwgU19JRkRJUiwgdmljYW1fcHJvY19yb290KTsKKworCWlmICggIWNhbS0+cHJvY19kaXIgKQorCQlyZXR1cm47IC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgcmV0dXJuIGFuIGVycm9yIGhlcmUKKwkKKwllbnQgPSBjcmVhdGVfcHJvY19lbnRyeSgic2h1dHRlciIsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCQljYW0tPnByb2NfZGlyKTsKKwlpZiAoZW50KSB7CisJCWVudC0+ZGF0YSA9IGNhbTsKKwkJZW50LT5yZWFkX3Byb2MgPSB2aWNhbV9yZWFkX3Byb2Nfc2h1dHRlcjsKKwkJZW50LT53cml0ZV9wcm9jID0gdmljYW1fd3JpdGVfcHJvY19zaHV0dGVyOworCQllbnQtPnNpemUgPSA2NDsKKwl9CisKKwllbnQgPSBjcmVhdGVfcHJvY19lbnRyeSgiZ2FpbiIsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCQljYW0tPnByb2NfZGlyKTsKKwlpZiAoZW50KSB7CisJCWVudC0+ZGF0YSA9IGNhbTsKKwkJZW50LT5yZWFkX3Byb2MgPSB2aWNhbV9yZWFkX3Byb2NfZ2FpbjsKKwkJZW50LT53cml0ZV9wcm9jID0gdmljYW1fd3JpdGVfcHJvY19nYWluOworCQllbnQtPnNpemUgPSA2NDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit2aWNhbV9kZXN0cm95X3Byb2NfZW50cnkodm9pZCAqcHRyKQoreworCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSA9IChzdHJ1Y3QgdmljYW1fY2FtZXJhICopIHB0cjsKKwljaGFyIG5hbWVbMTZdOworCisJaWYgKCAhY2FtLT5wcm9jX2RpciApCisJCXJldHVybjsKKworCXNwcmludGYobmFtZSwgInZpZGVvJWQiLCBjYW0tPnZkZXYubWlub3IpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJzaHV0dGVyIiwgY2FtLT5wcm9jX2Rpcik7CisJcmVtb3ZlX3Byb2NfZW50cnkoImdhaW4iLCBjYW0tPnByb2NfZGlyKTsKKwlyZW1vdmVfcHJvY19lbnRyeShuYW1lLHZpY2FtX3Byb2Nfcm9vdCk7CisJY2FtLT5wcm9jX2RpciA9IE5VTEw7CisKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB2aWNhbV9jcmVhdGVfcHJvY19yb290KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHZpY2FtX2Rlc3Ryb3lfcHJvY19yb290KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHZpY2FtX2NyZWF0ZV9wcm9jX2VudHJ5KHN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdmljYW1fZGVzdHJveV9wcm9jX2VudHJ5KHZvaWQgKnB0cikgeyB9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmljYW1fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gdmljYW1fb3BlbiwKKwkucmVsZWFzZQk9IHZpY2FtX2Nsb3NlLAorCS5yZWFkCQk9IHZpY2FtX3JlYWQsCisJLm1tYXAJCT0gdmljYW1fbW1hcCwKKwkuaW9jdGwJCT0gdmljYW1faW9jdGwsCisJLmxsc2VlawkJPSBub19sbHNlZWssCit9OworCitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB2aWNhbV90ZW1wbGF0ZSA9IHsKKwkub3duZXIgCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lIAkJPSAiVmlDYW0tYmFzZWQgVVNCIENhbWVyYSIsCisJLnR5cGUgCQk9IFZJRF9UWVBFX0NBUFRVUkUsCisJLmhhcmR3YXJlIAk9IFZJRF9IQVJEV0FSRV9WSUNBTSwKKwkuZm9wcyAJCT0gJnZpY2FtX2ZvcHMsCisJLm1pbm9yIAkJPSAtMSwKK307CisKKy8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB2aWNhbV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKFVTQl9WSUNBTV9WRU5ET1JfSUQsIFVTQl9WSUNBTV9QUk9EVUNUX0lEKX0sCisJe30JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHZpY2FtX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHZpY2FtX2RyaXZlciA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gInZpY2FtIiwKKwkucHJvYmUJCT0gdmljYW1fcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSB2aWNhbV9kaXNjb25uZWN0LAorCS5pZF90YWJsZQk9IHZpY2FtX3RhYmxlCit9OworCisvKioKKyAqCXZpY2FtX3Byb2JlCisgKglAaW50ZjogdGhlIGludGVyZmFjZQorICoJQGlkOiB0aGUgZGV2aWNlIGlkCisgKgorICoJQ2FsbGVkIGJ5IHRoZSB1c2IgY29yZSB3aGVuIGEgbmV3IGRldmljZSBpcyBjb25uZWN0ZWQgdGhhdCBpdCB0aGlua3MKKyAqCXRoaXMgZHJpdmVyIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4uCisgKi8KK3N0YXRpYyBpbnQKK3ZpY2FtX3Byb2JlKCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCWludCBidWxrRW5kcG9pbnQgPSAwOworCWNvbnN0IHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCXN0cnVjdCB2aWNhbV9jYW1lcmEgKmNhbTsKKwkKKwlwcmludGsoS0VSTl9JTkZPICJWaUNhbSBiYXNlZCB3ZWJjYW0gY29ubmVjdGVkXG4iKTsKKworCWludGVyZmFjZSA9IGludGYtPmN1cl9hbHRzZXR0aW5nOworCisJREJHKEtFUk5fREVCVUcgIkludGVyZmFjZSAlZC4gaGFzICV1LiBlbmRwb2ludHMhXG4iLAorCSAgICAgICBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlciwgKHVuc2lnbmVkKSAoaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHMpKTsKKwllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLmRlc2M7CisKKwlpZiAoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkgJiYKKwkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMikpIHsKKwkJLyogd2UgZm91bmQgYSBidWxrIGluIGVuZHBvaW50ICovCisJCWJ1bGtFbmRwb2ludCA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIk5vIGJ1bGsgaW4gZW5kcG9pbnQgd2FzIGZvdW5kID8hICh0aGlzIGlzIGJhZClcbiIpOworCX0KKworCWlmICgoY2FtID0KKwkgICAgIGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgdmljYW1fY2FtZXJhKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgImNvdWxkIG5vdCBhbGxvY2F0ZSBrZXJuZWwgbWVtb3J5IGZvciB2aWNhbV9jYW1lcmEgc3RydWN0XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtc2V0KGNhbSwgMCwgc2l6ZW9mIChzdHJ1Y3QgdmljYW1fY2FtZXJhKSk7CisKKwljYW0tPnNodXR0ZXJfc3BlZWQgPSAxNTsKKworCWluaXRfTVVURVgoJmNhbS0+Y2FtX2xvY2spOworCisJbWVtY3B5KCZjYW0tPnZkZXYsICZ2aWNhbV90ZW1wbGF0ZSwKKwkgICAgICAgc2l6ZW9mICh2aWNhbV90ZW1wbGF0ZSkpOworCWNhbS0+dmRldi5wcml2ID0gY2FtOwkvLyBzb3J0IG9mIGEgcmV2ZXJzZSBtYXBwaW5nIGZvciB0aG9zZSBmdW5jdGlvbnMgdGhhdCBnZXQgdmRldiBvbmx5CisKKwljYW0tPnVkZXYgPSBkZXY7CisJY2FtLT5idWxrRW5kcG9pbnQgPSBidWxrRW5kcG9pbnQ7CisKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZjYW0tPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKSA9PSAtMSkgeworCQlrZnJlZShjYW0pOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJdmljYW1fY3JlYXRlX3Byb2NfZW50cnkoY2FtKTsKKworCXByaW50ayhLRVJOX0lORk8gIlZpQ2FtIHdlYmNhbSBkcml2ZXIgbm93IGNvbnRyb2xsaW5nIHZpZGVvIGRldmljZSAlZFxuIixjYW0tPnZkZXYubWlub3IpOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgY2FtKTsKKwkKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3ZpY2FtX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJaW50IG9wZW5fY291bnQ7CisJc3RydWN0IHZpY2FtX2NhbWVyYSAqY2FtID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisKKwkvKiB3ZSBtdXN0IHVucmVnaXN0ZXIgdGhlIGRldmljZSBiZWZvcmUgdGFraW5nIGl0cworCSAqIGNhbV9sb2NrLiBUaGlzIGlzIGJlY2F1c2UgdGhlIHZpZGVvIG9wZW4gY2FsbAorCSAqIGhvbGRzIHRoZSBzYW1lIGxvY2sgYXMgdmlkZW8gdW5yZWdpc3Rlci4gaWYgd2UKKwkgKiB1bnJlZ2lzdGVyIGluc2lkZSBvZiB0aGUgY2FtX2xvY2sgYW5kIG9wZW4gYWxzbworCSAqIHVzZXMgdGhlIGNhbV9sb2NrLCB3ZSBnZXQgZGVhZGxvY2suCisJICovCisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmY2FtLT52ZGV2KTsKKworCS8qIHN0b3AgdGhlIGNhbWVyYSBmcm9tIGJlaW5nIHVzZWQgKi8KKworCWRvd24oJmNhbS0+Y2FtX2xvY2spOworCisJLyogbWFyayB0aGUgY2FtZXJhIGFzIGdvbmUgKi8KKworCWNhbS0+dWRldiA9IE5VTEw7CisKKwl2aWNhbV9kZXN0cm95X3Byb2NfZW50cnkoY2FtKTsKKworCS8qIHRoZSBvbmx5IHRoaW5nIGxlZnQgdG8gZG8gaXMgc3luY2hyb25pemUgd2l0aAorCSAqIG91ciBjbG9zZS9yZWxlYXNlIGZ1bmN0aW9uIG9uIHdobyBzaG91bGQgcmVsZWFzZQorCSAqIHRoZSBjYW1lcmEgbWVtb3J5LiBpZiB0aGVyZSBhcmUgYW55IHVzZXJzIHVzaW5nIHRoZQorCSAqIGNhbWVyYSwgaXQncyB0aGVpciBqb2IuIGlmIHRoZXJlIGFyZSBubyB1c2VycywKKwkgKiBpdCdzIG91cnMuCisJICovCisKKwlvcGVuX2NvdW50ID0gY2FtLT5vcGVuX2NvdW50OworCisJdXAoJmNhbS0+Y2FtX2xvY2spOworCisJaWYgKCFvcGVuX2NvdW50KSB7CisJCWtmcmVlKGNhbSk7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIlZpQ2FtLWJhc2VkIFdlYkNhbSBkaXNjb25uZWN0ZWRcbiIpOworfQorCisvKgorICovCitzdGF0aWMgaW50IF9faW5pdAordXNiX3ZpY2FtX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCURCRyhLRVJOX0lORk8gIlZpQ2FtLWJhc2VkIFdlYkNhbSBkcml2ZXIgc3RhcnR1cFxuIik7CisJdmljYW1fY3JlYXRlX3Byb2Nfcm9vdCgpOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmdmljYW1fZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1c2JfcmVnaXN0ZXIgZmFpbGVkIVxuIik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0Cit1c2JfdmljYW1fZXhpdCh2b2lkKQoreworCURCRyhLRVJOX0lORk8KKwkgICAgICAgIlZpQ2FtLWJhc2VkIFdlYkNhbSBkcml2ZXIgc2h1dGRvd25cbiIpOworCisJdXNiX2RlcmVnaXN0ZXIoJnZpY2FtX2RyaXZlcik7CisJdmljYW1fZGVzdHJveV9wcm9jX3Jvb3QoKTsKK30KKworbW9kdWxlX2luaXQodXNiX3ZpY2FtX2luaXQpOworbW9kdWxlX2V4aXQodXNiX3ZpY2FtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2YuYyBiL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODllNzllCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvdzk5NjhjZi5jCkBAIC0wLDAgKzEsMzgyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmlkZW80TGludXggZHJpdmVyIGZvciBXOTk2Wzg3XUNGIEpQRUcgVVNCIER1YWwgTW9kZSBDYW1lcmEgQ2hpcC4gICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogLSBNZW1vcnkgbWFuYWdlbWVudCBjb2RlIGZyb20gYnR0diBkcml2ZXIgYnkgUmFscGggTWV0emxlciwgICAgICAgICAgICAgKgorICogICBNYXJjdXMgTWV0emxlciBhbmQgR2VyZCBLbm9yci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogLSBJMkMgaW50ZXJmYWNlIHRvIGtlcm5lbCwgaGlnaC1sZXZlbCBpbWFnZSBzZW5zb3IgY29udHJvbCByb3V0aW5lcyBhbmQgKgorICogICBzb21lIHN5bWJvbGljIG5hbWVzIGZyb20gT1Y1MTEgZHJpdmVyIGJ5IE1hcmsgVy4gTWNDbGVsbGFuZC4gICAgICAgICAgKgorICogLSBMb3ctbGV2ZWwgSTJDIGZhc3Qgd3JpdGUgZnVuY3Rpb24gYnkgUGlvdHIgQ3plcmN6YWsuICAgICAgICAgICAgICAgICAgKgorICogLSBMb3ctbGV2ZWwgSTJDIHJlYWQgZnVuY3Rpb24gYnkgRnJlZGVyaWMgSm91YXVsdC4gICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgKgorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2UtZmxhZ3MuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorCisjaW5jbHVkZSAidzk5NjhjZi5oIgorI2luY2x1ZGUgInc5OTY4Y2ZfZGVjb2Rlci5oIgorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1vZHVsZSBtYWNyb3MgYW5kIHBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHdpbmJvbmRfaWRfdGFibGUpOworCitNT0RVTEVfQVVUSE9SKFc5OTY4Q0ZfTU9EVUxFX0FVVEhPUiIgIlc5OTY4Q0ZfQVVUSE9SX0VNQUlMKTsKK01PRFVMRV9ERVNDUklQVElPTihXOTk2OENGX01PRFVMRV9OQU1FKTsKK01PRFVMRV9WRVJTSU9OKFc5OTY4Q0ZfTU9EVUxFX1ZFUlNJT04pOworTU9EVUxFX0xJQ0VOU0UoVzk5NjhDRl9NT0RVTEVfTElDRU5TRSk7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiVmlkZW8iKTsKKworc3RhdGljIGludCBvdm1vZF9sb2FkID0gVzk5NjhDRl9PVk1PRF9MT0FEOworc3RhdGljIGludCB2cHBtb2RfbG9hZCA9IFc5OTY4Q0ZfVlBQTU9EX0xPQUQ7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2ltY2FtcyA9IFc5OTY4Q0ZfU0lNQ0FNUzsKK3N0YXRpYyBzaG9ydCB2aWRlb19ucltdPXtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IC0xfTsgLyotMT1maXJzdCBmcmVlKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGFja2V0X3NpemVbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFc5OTY4Q0ZfUEFDS0VUX1NJWkV9Oworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1heF9idWZmZXJzW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFc5OTY4Q0ZfQlVGRkVSU307CitzdGF0aWMgaW50IGRvdWJsZV9idWZmZXJbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVzk5NjhDRl9ET1VCTEVfQlVGRkVSfTsKK3N0YXRpYyBpbnQgY2xhbXBpbmdbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfQ0xBTVBJTkd9Oworc3RhdGljIHVuc2lnbmVkIHNob3J0IGZpbHRlcl90eXBlW109IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXOTk2OENGX0ZJTFRFUl9UWVBFfTsKK3N0YXRpYyBpbnQgbGFyZ2V2aWV3W109IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfTEFSR0VWSUVXfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBkZWNvbXByZXNzaW9uW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVzk5NjhDRl9ERUNPTVBSRVNTSU9OfTsKK3N0YXRpYyBpbnQgdXBzY2FsaW5nW109IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfVVBTQ0FMSU5HfTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBmb3JjZV9wYWxldHRlW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAwfTsKK3N0YXRpYyBpbnQgZm9yY2VfcmdiW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSBXOTk2OENGX0ZPUkNFX1JHQn07CitzdGF0aWMgaW50IGF1dG9icmlnaHRbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfQVVUT0JSSUdIVH07CitzdGF0aWMgaW50IGF1dG9leHBbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfQVVUT0VYUH07CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbGlnaHRmcmVxW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXOTk2OENGX0xJR0hURlJFUX07CitzdGF0aWMgaW50IGJhbmRpbmdmaWx0ZXJbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFc5OTY4Q0ZfQkFORElOR0ZJTFRFUn07CitzdGF0aWMgc2hvcnQgY2xvY2tkaXZbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfQ0xPQ0tESVZ9Oworc3RhdGljIGludCBiYWNrbGlnaHRbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IFc5OTY4Q0ZfQkFDS0xJR0hUfTsKK3N0YXRpYyBpbnQgbWlycm9yW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSBXOTk2OENGX01JUlJPUn07CitzdGF0aWMgaW50IG1vbm9jaHJvbWVbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXT1XOTk2OENGX01PTk9DSFJPTUV9Oworc3RhdGljIHVuc2lnbmVkIGludCBicmlnaHRuZXNzW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFc5OTY4Q0ZfQlJJR0hUTkVTU307CitzdGF0aWMgdW5zaWduZWQgaW50IGh1ZVtdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gVzk5NjhDRl9IVUV9Oworc3RhdGljIHVuc2lnbmVkIGludCBjb2xvdXJbXT17WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSBXOTk2OENGX0NPTE9VUn07CitzdGF0aWMgdW5zaWduZWQgaW50IGNvbnRyYXN0W10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXOTk2OENGX0NPTlRSQVNUfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgd2hpdGVuZXNzW10gPSB7WzAgLi4uIFc5OTY4Q0ZfTUFYX0RFVklDRVMtMV0gPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVzk5NjhDRl9XSElURU5FU1N9OworI2lmZGVmIFc5OTY4Q0ZfREVCVUcKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBkZWJ1ZyA9IFc5OTY4Q0ZfREVCVUdfTEVWRUw7CitzdGF0aWMgaW50IHNwZWNpZmljX2RlYnVnID0gVzk5NjhDRl9TUEVDSUZJQ19ERUJVRzsKKyNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgaW50IHBhcmFtX252WzI0XTsgLyogbnVtYmVyIG9mIHZhbHVlcyBwZXIgcGFyYW1ldGVyICovCisKKyNpZmRlZiBDT05GSUdfS01PRAorbW9kdWxlX3BhcmFtKG92bW9kX2xvYWQsIGJvb2wsIDA2NDQpOworbW9kdWxlX3BhcmFtKHZwcG1vZF9sb2FkLCBib29sLCAwNDQ0KTsKKyNlbmRpZgorbW9kdWxlX3BhcmFtKHNpbWNhbXMsIHVzaG9ydCwgMDY0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkodmlkZW9fbnIsIHNob3J0LCAmcGFyYW1fbnZbMF0sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KHBhY2tldF9zaXplLCB1aW50LCAmcGFyYW1fbnZbMV0sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KG1heF9idWZmZXJzLCB1c2hvcnQsICZwYXJhbV9udlsyXSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoZG91YmxlX2J1ZmZlciwgYm9vbCwgJnBhcmFtX252WzNdLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShjbGFtcGluZywgYm9vbCwgJnBhcmFtX252WzRdLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShmaWx0ZXJfdHlwZSwgdXNob3J0LCAmcGFyYW1fbnZbNV0sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGxhcmdldmlldywgYm9vbCwgJnBhcmFtX252WzZdLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShkZWNvbXByZXNzaW9uLCB1c2hvcnQsICZwYXJhbV9udls3XSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkodXBzY2FsaW5nLCBib29sLCAmcGFyYW1fbnZbOF0sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGZvcmNlX3BhbGV0dGUsIHVzaG9ydCwgJnBhcmFtX252WzldLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShmb3JjZV9yZ2IsIHVzaG9ydCwgJnBhcmFtX252WzEwXSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoYXV0b2JyaWdodCwgYm9vbCwgJnBhcmFtX252WzExXSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoYXV0b2V4cCwgYm9vbCwgJnBhcmFtX252WzEyXSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkobGlnaHRmcmVxLCB1c2hvcnQsICZwYXJhbV9udlsxM10sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGJhbmRpbmdmaWx0ZXIsIGJvb2wsICZwYXJhbV9udlsxNF0sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGNsb2NrZGl2LCBzaG9ydCwgJnBhcmFtX252WzE1XSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoYmFja2xpZ2h0LCBib29sLCAmcGFyYW1fbnZbMTZdLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShtaXJyb3IsIGJvb2wsICZwYXJhbV9udlsxN10sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KG1vbm9jaHJvbWUsIGJvb2wsICZwYXJhbV9udlsxOF0sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGJyaWdodG5lc3MsIHVpbnQsICZwYXJhbV9udlsxOV0sIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGh1ZSwgdWludCwgJnBhcmFtX252WzIwXSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoY29sb3VyLCB1aW50LCAmcGFyYW1fbnZbMjFdLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShjb250cmFzdCwgdWludCwgJnBhcmFtX252WzIyXSwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkod2hpdGVuZXNzLCB1aW50LCAmcGFyYW1fbnZbMjNdLCAwNDQ0KTsKKyNpZmRlZiBXOTk2OENGX0RFQlVHCittb2R1bGVfcGFyYW0oZGVidWcsIHVzaG9ydCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oc3BlY2lmaWNfZGVidWcsIGJvb2wsIDA2NDQpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfS01PRAorTU9EVUxFX1BBUk1fREVTQyhvdm1vZF9sb2FkLCAKKyAgICAgICAgICAgICAgICAgIlxuPDB8MT4gQXV0b21hdGljICdvdmNhbWNoaXAnIG1vZHVsZSBsb2FkaW5nLiIKKyAgICAgICAgICAgICAgICAgIlxuMCBkaXNhYmxlZCwgMSBlbmFibGVkLiIKKyAgICAgICAgICAgICAgICAgIlxuSWYgZW5hYmxlZCwnaW5zbW9kJyBzZWFyY2hlcyBmb3IgdGhlIHJlcXVpcmVkICdvdmNhbWNoaXAnIgorICAgICAgICAgICAgICAgICAiXG5tb2R1bGUgaW4gdGhlIHN5c3RlbSwgYWNjb3JkaW5nIHRvIGl0cyBjb25maWd1cmF0aW9uLCBhbmQiCisgICAgICAgICAgICAgICAgICJcbmF0dGVtcHRzIHRvIGxvYWQgdGhhdCBtb2R1bGUgYXV0b21hdGljYWxseS4gVGhpcyBhY3Rpb24gaXMiCisgICAgICAgICAgICAgICAgICJcbnBlcmZvcm1lZCBvbmNlIGFzIHNvb24gYXMgdGhlICd3OTk2OGNmJyBtb2R1bGUgaXMgbG9hZGVkIgorICAgICAgICAgICAgICAgICAiXG5pbnRvIG1lbW9yeS4iCisgICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX09WTU9EX0xPQUQpIi4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyh2cHBtb2RfbG9hZCwgCisgICAgICAgICAgICAgICAgICJcbjwwfDE+IEF1dG9tYXRpYyAndzk5NjhjZi12cHAnIG1vZHVsZSBsb2FkaW5nLiIKKyAgICAgICAgICAgICAgICAgIlxuMCBkaXNhYmxlZCwgMSBlbmFibGVkLiIKKyAgICAgICAgICAgICAgICAgIlxuSWYgZW5hYmxlZCwgZXZlcnkgdGltZSBhbiBhcHBsaWNhdGlvbiBhdHRlbXB0cyB0byBvcGVuIGEiCisgICAgICAgICAgICAgICAgICJcbmNhbWVyYSwgJ2luc21vZCcgc2VhcmNoZXMgZm9yIHRoZSB2aWRlbyBwb3N0LXByb2Nlc3NpbmciCisgICAgICAgICAgICAgICAgICJcbm1vZHVsZSBpbiB0aGUgc3lzdGVtIGFuZCBsb2FkcyBpdCBhdXRvbWF0aWNhbGx5IChpZiIKKyAgICAgICAgICAgICAgICAgIlxucHJlc2VudCkuIFRoZSBvcHRpb25hbCAndzk5NjhjZi12cHAnIG1vZHVsZSBhZGRzIGV4dHJhIgorICAgICAgICAgICAgICAgICAiXG4gaW1hZ2UgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyB0byB0aGUgJ3c5OTY4Y2YnIG1vZHVsZSxsaWtlIgorICAgICAgICAgICAgICAgICAiXG5zb2Z0d2FyZSB1cC1zY2FsaW5nLGNvbG91ciBjb252ZXJzaW9ucyBhbmQgdmlkZW8gZGVjb2RpbmciCisgICAgICAgICAgICAgICAgICJcbmZvciB2ZXJ5IGhpZ2ggZnJhbWUgcmF0ZXMuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9WUFBNT0RfTE9BRCkiLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CisjZW5kaWYKK01PRFVMRV9QQVJNX0RFU0Moc2ltY2FtcywgCisgICAgICAgICAgICAgICAgICJcbjxuPiBOdW1iZXIgb2YgY2FtZXJhcyBhbGxvd2VkIHRvIHN0cmVhbSBzaW11bHRhbmVvdXNseS4iCisgICAgICAgICAgICAgICAgICJcbm4gbWF5IHZhcnkgZnJvbSAwIHRvICIKKyAgICAgICAgICAgICAgICAgX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfTUFYX0RFVklDRVMpIi4iCisgICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX1NJTUNBTVMpIi4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyh2aWRlb19uciwKKyAgICAgICAgICAgICAgICAgIlxuPC0xfG5bLC4uLl0+IFNwZWNpZnkgVjRMIG1pbm9yIG1vZGUgbnVtYmVyLiIKKyAgICAgICAgICAgICAgICAgIlxuIC0xID0gdXNlIG5leHQgYXZhaWxhYmxlIChkZWZhdWx0KSIKKyAgICAgICAgICAgICAgICAgIlxuICBuID0gdXNlIG1pbm9yIG51bWJlciBuIChpbnRlZ2VyID49IDApIgorICAgICAgICAgICAgICAgICAiXG5Zb3UgY2FuIHNwZWNpZnkgdXAgdG8gIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX01BWF9ERVZJQ0VTKQorICAgICAgICAgICAgICAgICAiIGNhbWVyYXMgdGhpcyB3YXkuIgorICAgICAgICAgICAgICAgICAiXG5Gb3IgZXhhbXBsZToiCisgICAgICAgICAgICAgICAgICJcbnZpZGVvX25yPS0xLDIsLTEgd291bGQgYXNzaWduIG1pbm9yIG51bWJlciAyIHRvIgorICAgICAgICAgICAgICAgICAiXG50aGUgc2Vjb25kIGNhbWVyYSBhbmQgdXNlIGF1dG8gZm9yIHRoZSBmaXJzdCIKKyAgICAgICAgICAgICAgICAgIlxub25lIGFuZCBmb3IgZXZlcnkgb3RoZXIgY2FtZXJhLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKHBhY2tldF9zaXplLAorICAgICAgICAgICAgICAgICAiXG48blssLi4uXT4gU3BlY2lmeSB0aGUgbWF4aW11bSBkYXRhIHBheWxvYWQiCisgICAgICAgICAgICAgICAgICJcbnNpemUgaW4gYnl0ZXMgZm9yIGFsdGVybmF0ZSBzZXR0aW5ncywgZm9yIGVhY2ggZGV2aWNlLiIKKyAgICAgICAgICAgICAgICAgIlxubiBpcyBzY2FsZWQgYmV0d2VlbiA2MyBhbmQgMTAyMyAiCisgICAgICAgICAgICAgICAgICIoZGVmYXVsdCBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfUEFDS0VUX1NJWkUpIikuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MobWF4X2J1ZmZlcnMsCisgICAgICAgICAgICAgICAgICJcbjxuWywuLi5dPiBGb3IgYWR2YW5jZWQgdXNlcnMuIgorICAgICAgICAgICAgICAgICAiXG5TcGVjaWZ5IHRoZSBtYXhpbXVtIG51bWJlciBvZiB2aWRlbyBmcmFtZSBidWZmZXJzIgorICAgICAgICAgICAgICAgICAiXG50byBhbGxvY2F0ZSBmb3IgZWFjaCBkZXZpY2UsIGZyb20gMiB0byAiCisgICAgICAgICAgICAgICAgIF9fTU9EVUxFX1NUUklORyhXOTk2OENGX01BWF9CVUZGRVJTKQorICAgICAgICAgICAgICAgICAiLiAoZGVmYXVsdCBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfQlVGRkVSUykiKS4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhkb3VibGVfYnVmZmVyLCAKKyAgICAgICAgICAgICAgICAgIlxuPDB8MVssLi4uXT4gIgorICAgICAgICAgICAgICAgICAiSGFyZHdhcmUgZG91YmxlIGJ1ZmZlcmluZzogMCBkaXNhYmxlZCwgMSBlbmFibGVkLiIKKyAgICAgICAgICAgICAgICAgIlxuSXQgc2hvdWxkIGJlIGVuYWJsZWQgaWYgeW91IHdhbnQgc21vb3RoIHZpZGVvIG91dHB1dDogaWYiCisgICAgICAgICAgICAgICAgICJcbnlvdSBvYnRhaW4gb3V0IG9mIHN5bmMuIHZpZGVvLCBkaXNhYmxlIGl0LCBvciB0cnkgdG8iCisgICAgICAgICAgICAgICAgICJcbmRlY3JlYXNlIHRoZSAnY2xvY2tkaXYnIG1vZHVsZSBwYXJhbWV0ZXIgdmFsdWUuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9ET1VCTEVfQlVGRkVSKQorICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MoY2xhbXBpbmcsIAorICAgICAgICAgICAgICAgICAiXG48MHwxWywuLi5dPiBWaWRlbyBkYXRhIGNsYW1waW5nOiAwIGRpc2FibGVkLCAxIGVuYWJsZWQuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9DTEFNUElORykKKyAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGZpbHRlcl90eXBlLCAKKyAgICAgICAgICAgICAgICAgIlxuPDB8MXwyWywuLi5dPiBWaWRlbyBmaWx0ZXIgdHlwZS4iCisgICAgICAgICAgICAgICAgICJcbjAgbm9uZSwgMSAoMS0yLTEpIDMtdGFwIGZpbHRlciwgIgorICAgICAgICAgICAgICAgICAiMiAoMi0zLTYtMy0yKSA1LXRhcCBmaWx0ZXIuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9GSUxURVJfVFlQRSkKKyAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKyAgICAgICAgICAgICAgICAgIlxuVGhlIGZpbHRlciBpcyB1c2VkIHRvIHJlZHVjZSBub2lzZSBhbmQgYWxpYXNpbmcgYXJ0aWZhY3RzIgorICAgICAgICAgICAgICAgICAiXG5wcm9kdWNlZCBieSB0aGUgQ0NEIG9yIENNT1MgaW1hZ2Ugc2Vuc29yLCBhbmQgdGhlIHNjYWxpbmciCisgICAgICAgICAgICAgICAgICIgcHJvY2Vzcy4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhsYXJnZXZpZXcsIAorICAgICAgICAgICAgICAgICAiXG48MHwxWywuLi5dPiBMYXJnZSB2aWV3OiAwIGRpc2FibGVkLCAxIGVuYWJsZWQuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9MQVJHRVZJRVcpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyh1cHNjYWxpbmcsIAorICAgICAgICAgICAgICAgICAiXG48MHwxWywuLi5dPiBTb2Z0d2FyZSBzY2FsaW5nIChmb3Igbm9uLWNvbXByZXNzZWQgdmlkZW8pOiIKKyAgICAgICAgICAgICAgICAgIlxuMCBkaXNhYmxlZCwgMSBlbmFibGVkLiIKKyAgICAgICAgICAgICAgICAgIlxuRGlzYWJsZSBpdCBpZiB5b3UgaGF2ZSBhIHNsb3cgQ1BVIG9yIHlvdSBkb24ndCBoYXZlIgorICAgICAgICAgICAgICAgICAiIGVub3VnaCBtZW1vcnkuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9VUFNDQUxJTkcpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbklmICd3OTk2OGNmLXZwcCcgaXMgbm90IHByZXNlbnQsIHRoaXMgcGFyYW1ldGVyIGlzIgorICAgICAgICAgICAgICAgICAiIHNldCB0byAwLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGRlY29tcHJlc3Npb24sCisgICAgICAgICAgICAgICAgICJcbjwwfDF8MlssLi4uXT4gU29mdHdhcmUgdmlkZW8gZGVjb21wcmVzc2lvbjoiCisgICAgICAgICAgICAgICAgICJcbi0gMCBkaXNhYmxlcyBkZWNvbXByZXNzaW9uIChkb2Vzbid0IGFsbG93IGZvcm1hdHMgbmVlZGluZyIKKyAgICAgICAgICAgICAgICAgIiBkZWNvbXByZXNzaW9uKSIKKyAgICAgICAgICAgICAgICAgIlxuLSAxIGZvcmNlcyBkZWNvbXByZXNzaW9uIChhbGxvd3MgZm9ybWF0cyBuZWVkaW5nIgorICAgICAgICAgICAgICAgICAiIGRlY29tcHJlc3Npb24gb25seSk7IgorICAgICAgICAgICAgICAgICAiXG4tIDIgYWxsb3dzIGFueSBwZXJtaXR0ZWQgZm9ybWF0cy4iCisgICAgICAgICAgICAgICAgICJcbkZvcm1hdHMgc3VwcG9ydGluZyBjb21wcmVzc2VkIHZpZGVvIGFyZSBZVVY0MjJQIGFuZCIKKyAgICAgICAgICAgICAgICAgIiBZVVY0MjBQL1lVVjQyMCAiCisgICAgICAgICAgICAgICAgICJcbmluIGFueSByZXNvbHV0aW9ucyB3aGVyZSBib3RoIHdpZHRoIGFuZCBoZWlnaHQgYXJlICIKKyAgICAgICAgICAgICAgICAgImEgbXVsdGlwbGUgb2YgMTYuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9ERUNPTVBSRVNTSU9OKQorICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgorICAgICAgICAgICAgICAgICAiXG5JZiAndzk5NjhjZi12cHAnIGlzIG5vdCBwcmVzZW50LCBmb3JjaW5nIGRlY29tcHJlc3Npb24gaXMgIgorICAgICAgICAgICAgICAgICAiXG5ub3QgYWxsb3dlZDsgaW4gdGhpcyBjYXNlIHRoaXMgcGFyYW1ldGVyIGlzIHNldCB0byAyLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGZvcmNlX3BhbGV0dGUsCisgICAgICAgICAgICAgICAgICJcbjwwIgorICAgICAgICAgICAgICAgICAifCIgX19NT0RVTEVfU1RSSU5HKFZJREVPX1BBTEVUVEVfVVlWWSkKKyAgICAgICAgICAgICAgICAgInwiIF9fTU9EVUxFX1NUUklORyhWSURFT19QQUxFVFRFX1lVVjQyMCkKKyAgICAgICAgICAgICAgICAgInwiIF9fTU9EVUxFX1NUUklORyhWSURFT19QQUxFVFRFX1lVVjQyMlApCisgICAgICAgICAgICAgICAgICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9ZVVY0MjBQKQorICAgICAgICAgICAgICAgICAifCIgX19NT0RVTEVfU1RSSU5HKFZJREVPX1BBTEVUVEVfWVVZVikKKyAgICAgICAgICAgICAgICAgInwiIF9fTU9EVUxFX1NUUklORyhWSURFT19QQUxFVFRFX1lVVjQyMikKKyAgICAgICAgICAgICAgICAgInwiIF9fTU9EVUxFX1NUUklORyhWSURFT19QQUxFVFRFX0dSRVkpCisgICAgICAgICAgICAgICAgICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9SR0I1NTUpCisgICAgICAgICAgICAgICAgICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9SR0I1NjUpCisgICAgICAgICAgICAgICAgICJ8IiBfX01PRFVMRV9TVFJJTkcoVklERU9fUEFMRVRURV9SR0IyNCkKKyAgICAgICAgICAgICAgICAgInwiIF9fTU9EVUxFX1NUUklORyhWSURFT19QQUxFVFRFX1JHQjMyKQorICAgICAgICAgICAgICAgICAiWywuLi5dPiIKKyAgICAgICAgICAgICAgICAgIiBGb3JjZSBwaWN0dXJlIHBhbGV0dGUuIgorICAgICAgICAgICAgICAgICAiXG5JbiBvcmRlcjoiCisgICAgICAgICAgICAgICAgICJcbi0gMCBhbGxvd3MgYW55IG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0czoiCisgICAgICAgICAgICAgICAgICJcbi0gVVlWWSAgICAxNiBicHAgLSBPcmlnaW5hbCB2aWRlbywgY29tcHJlc3Npb24gZGlzYWJsZWQiCisgICAgICAgICAgICAgICAgICJcbi0gWVVWNDIwICAxMiBicHAgLSBPcmlnaW5hbCB2aWRlbywgY29tcHJlc3Npb24gZW5hYmxlZCIKKyAgICAgICAgICAgICAgICAgIlxuLSBZVVY0MjJQIDE2IGJwcCAtIE9yaWdpbmFsIHZpZGVvLCBjb21wcmVzc2lvbiBlbmFibGVkIgorICAgICAgICAgICAgICAgICAiXG4tIFlVVjQyMFAgMTIgYnBwIC0gT3JpZ2luYWwgdmlkZW8sIGNvbXByZXNzaW9uIGVuYWJsZWQiCisgICAgICAgICAgICAgICAgICJcbi0gWVVWWSAgICAxNiBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWSIKKyAgICAgICAgICAgICAgICAgIlxuLSBZVVY0MjIgIDE2IGJwcCAtIFNvZnR3YXJlIGNvbnZlcnNpb24gZnJvbSBVWVZZIgorICAgICAgICAgICAgICAgICAiXG4tIEdSRVkgICAgIDggYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkiCisgICAgICAgICAgICAgICAgICJcbi0gUkdCNTU1ICAxNiBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWSIKKyAgICAgICAgICAgICAgICAgIlxuLSBSR0I1NjUgIDE2IGJwcCAtIFNvZnR3YXJlIGNvbnZlcnNpb24gZnJvbSBVWVZZIgorICAgICAgICAgICAgICAgICAiXG4tIFJHQjI0ICAgMjQgYnBwIC0gU29mdHdhcmUgY29udmVyc2lvbiBmcm9tIFVZVlkiCisgICAgICAgICAgICAgICAgICJcbi0gUkdCMzIgICAzMiBicHAgLSBTb2Z0d2FyZSBjb252ZXJzaW9uIGZyb20gVVlWWSIKKyAgICAgICAgICAgICAgICAgIlxuV2hlbiBub3QgMCwgdGhpcyBwYXJhbWV0ZXIgd2lsbCBvdmVycmlkZSAnZGVjb21wcmVzc2lvbicuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzIDAgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbkluaXRpYWwgcGFsZXR0ZSBpcyAiCisgICAgICAgICAgICAgICAgIF9fTU9EVUxFX1NUUklORyhXOTk2OENGX1BBTEVUVEVfREVDT01QX09OKSIuIgorICAgICAgICAgICAgICAgICAiXG5JZiAndzk5NjhjZi12cHAnIGlzIG5vdCBwcmVzZW50LCB0aGlzIHBhcmFtZXRlciBpcyIKKyAgICAgICAgICAgICAgICAgIiBzZXQgdG8gOSAoVVlWWSkuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2VfcmdiLCAKKyAgICAgICAgICAgICAgICAgIlxuPDB8MVssLi4uXT4gUmVhZCBSR0IgdmlkZW8gZGF0YSBpbnN0ZWFkIG9mIEJHUjoiCisgICAgICAgICAgICAgICAgICJcbiAxID0gdXNlIFJHQiBjb21wb25lbnQgb3JkZXJpbmcuIgorICAgICAgICAgICAgICAgICAiXG4gMCA9IHVzZSBCR1IgY29tcG9uZW50IG9yZGVyaW5nLiIKKyAgICAgICAgICAgICAgICAgIlxuVGhpcyBwYXJhbWV0ZXIgaGFzIGVmZmVjdCB3aGVuIHVzaW5nIFJHQlggcGFsZXR0ZXMgb25seS4iCisgICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0ZPUkNFX1JHQikKKyAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGF1dG9icmlnaHQsCisgICAgICAgICAgICAgICAgICJcbjwwfDFbLC4uLl0+IEltYWdlIHNlbnNvciBhdXRvbWF0aWNhbGx5IGNoYW5nZXMgYnJpZ2h0bmVzczoiCisgICAgICAgICAgICAgICAgICJcbiAwID0gbm8sIDEgPSB5ZXMiCisgICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0FVVE9CUklHSFQpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhhdXRvZXhwLAorICAgICAgICAgICAgICAgICAiXG48MHwxWywuLi5dPiBJbWFnZSBzZW5zb3IgYXV0b21hdGljYWxseSBjaGFuZ2VzIGV4cG9zdXJlOiIKKyAgICAgICAgICAgICAgICAgIlxuIDAgPSBubywgMSA9IHllcyIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfQVVUT0VYUCkKKyAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGxpZ2h0ZnJlcSwKKyAgICAgICAgICAgICAgICAgIlxuPDUwfDYwWywuLi5dPiBMaWdodCBmcmVxdWVuY3kgaW4gSHo6IgorICAgICAgICAgICAgICAgICAiXG4gNTAgZm9yIEV1cm9wZWFuIGFuZCBBc2lhbiBsaWdodGluZywiCisgICAgICAgICAgICAgICAgICIgNjAgZm9yIEFtZXJpY2FuIGxpZ2h0aW5nLiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfTElHSFRGUkVRKQorICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MoYmFuZGluZ2ZpbHRlciwKKyAgICAgICAgICAgICAgICAgIlxuPDB8MVssLi4uXT4gQmFuZGluZyBmaWx0ZXIgdG8gcmVkdWNlIGVmZmVjdHMgb2YiCisgICAgICAgICAgICAgICAgICIgZmx1b3Jlc2NlbnQgbGlnaHRpbmc6IgorICAgICAgICAgICAgICAgICAiXG4gMCBkaXNhYmxlZCwgMSBlbmFibGVkLiIKKyAgICAgICAgICAgICAgICAgIlxuVGhpcyBmaWx0ZXIgdHJpZXMgdG8gcmVkdWNlIHRoZSBwYXR0ZXJuIG9mIGhvcml6b250YWwiCisgICAgICAgICAgICAgICAgICJcbmxpZ2h0L2RhcmsgYmFuZHMgY2F1c2VkIGJ5IHNvbWUgKHVzdWFsbHkgZmx1b3Jlc2NlbnQpIgorICAgICAgICAgICAgICAgICAiIGxpZ2h0aW5nLiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfQkFORElOR0ZJTFRFUikKKyAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGNsb2NrZGl2LAorICAgICAgICAgICAgICAgICAiXG48LTF8blssLi4uXT4gIgorICAgICAgICAgICAgICAgICAiRm9yY2UgcGl4ZWwgY2xvY2sgZGl2aXNvciB0byBhIHNwZWNpZmljIHZhbHVlIChmb3IgZXhwZXJ0cyk6IgorICAgICAgICAgICAgICAgICAiXG4gIG4gbWF5IHZhcnkgZnJvbSAwIHRvIDEyNy4iCisgICAgICAgICAgICAgICAgICJcbiAtMSBmb3IgYXV0b21hdGljIHZhbHVlLiIKKyAgICAgICAgICAgICAgICAgIlxuU2VlIGFsc28gdGhlICdkb3VibGVfYnVmZmVyJyBtb2R1bGUgcGFyYW1ldGVyLiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfQ0xPQ0tESVYpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhiYWNrbGlnaHQsCisgICAgICAgICAgICAgICAgICJcbjwwfDFbLC4uLl0+IE9iamVjdHMgYXJlIGxpdCBmcm9tIGJlaGluZDoiCisgICAgICAgICAgICAgICAgICJcbiAwID0gbm8sIDEgPSB5ZXMiCisgICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0JBQ0tMSUdIVCkKKyAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKG1pcnJvciwKKyAgICAgICAgICAgICAgICAgIlxuPDB8MVssLi4uXT4gUmV2ZXJzZSBpbWFnZSBob3Jpem9udGFsbHk6IgorICAgICAgICAgICAgICAgICAiXG4gMCA9IG5vLCAxID0geWVzIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9NSVJST1IpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhtb25vY2hyb21lLAorICAgICAgICAgICAgICAgICAiXG48MHwxWywuLi5dPiBVc2UgaW1hZ2Ugc2Vuc29yIGFzIG1vbm9jaHJvbWUgc2Vuc29yOiIKKyAgICAgICAgICAgICAgICAgIlxuIDAgPSBubywgMSA9IHllcyIKKyAgICAgICAgICAgICAgICAgIlxuTm90IGFsbCB0aGUgc2Vuc29ycyBzdXBwb3J0IG1vbm9jaHJvbWUgY29sb3IuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9NT05PQ0hST01FKQorICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MoYnJpZ2h0bmVzcywgCisgICAgICAgICAgICAgICAgICJcbjxuWywuLi5dPiBTZXQgcGljdHVyZSBicmlnaHRuZXNzICgwLTY1NTM1KS4iCisgICAgICAgICAgICAgICAgICJcbkRlZmF1bHQgdmFsdWUgaXMgIl9fTU9EVUxFX1NUUklORyhXOTk2OENGX0JSSUdIVE5FU1MpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcblRoaXMgcGFyYW1ldGVyIGhhcyBubyBlZmZlY3QgaWYgJ2F1dG9icmlnaHQnIGlzIGVuYWJsZWQuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MoaHVlLCAKKyAgICAgICAgICAgICAgICAgIlxuPG5bLC4uLl0+IFNldCBwaWN0dXJlIGh1ZSAoMC02NTUzNSkuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9IVUUpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhjb2xvdXIsIAorICAgICAgICAgICAgICAgICAiXG48blssLi4uXT4gU2V0IHBpY3R1cmUgc2F0dXJhdGlvbiAoMC02NTUzNSkuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9DT0xPVVIpCisgICAgICAgICAgICAgICAgICIgZm9yIGV2ZXJ5IGRldmljZS4iCisgICAgICAgICAgICAgICAgICJcbiIpOworTU9EVUxFX1BBUk1fREVTQyhjb250cmFzdCwgCisgICAgICAgICAgICAgICAgICJcbjxuWywuLi5dPiBTZXQgcGljdHVyZSBjb250cmFzdCAoMC02NTUzNSkuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9DT05UUkFTVCkKKyAgICAgICAgICAgICAgICAgIiBmb3IgZXZlcnkgZGV2aWNlLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKHdoaXRlbmVzcywgCisgICAgICAgICAgICAgICAgICJcbjxuWywuLi5dPiBTZXQgcGljdHVyZSB3aGl0ZW5lc3MgKDAtNjU1MzUpLiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfV0hJVEVORVNTKQorICAgICAgICAgICAgICAgICAiIGZvciBldmVyeSBkZXZpY2UuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKKyNpZmRlZiBXOTk2OENGX0RFQlVHCitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLAorICAgICAgICAgICAgICAgICAiXG48bj4gRGVidWdnaW5nIGluZm9ybWF0aW9uIGxldmVsLCBmcm9tIDAgdG8gNjoiCisgICAgICAgICAgICAgICAgICJcbjAgPSBub25lICh1c2UgY2FyZWZ1bGx5KSIKKyAgICAgICAgICAgICAgICAgIlxuMSA9IGNyaXRpY2FsIGVycm9ycyIKKyAgICAgICAgICAgICAgICAgIlxuMiA9IHNpZ25pZmljYW50IGluZm9ybWF0aW9ucyIKKyAgICAgICAgICAgICAgICAgIlxuMyA9IGNvbmZpZ3VyYXRpb24gb3IgZ2VuZXJhbCBtZXNzYWdlcyIKKyAgICAgICAgICAgICAgICAgIlxuNCA9IHdhcm5pbmdzIgorICAgICAgICAgICAgICAgICAiXG41ID0gY2FsbGVkIGZ1bmN0aW9ucyIKKyAgICAgICAgICAgICAgICAgIlxuNiA9IGZ1bmN0aW9uIGludGVybmFscyIKKyAgICAgICAgICAgICAgICAgIlxuTGV2ZWwgNSBhbmQgNiBhcmUgdXNlZnVsIGZvciB0ZXN0aW5nIG9ubHksIHdoZW4gb25seSAiCisgICAgICAgICAgICAgICAgICJvbmUgZGV2aWNlIGlzIHVzZWQuIgorICAgICAgICAgICAgICAgICAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9ERUJVR19MRVZFTCkiLiIKKyAgICAgICAgICAgICAgICAgIlxuIik7CitNT0RVTEVfUEFSTV9ERVNDKHNwZWNpZmljX2RlYnVnLAorICAgICAgICAgICAgICAgICAiXG48MHwxPiBFbmFibGUgb3IgZGlzYWJsZSBzcGVjaWZpYyBkZWJ1Z2dpbmcgbWVzc2FnZXM6IgorICAgICAgICAgICAgICAgICAiXG4wID0gcHJpbnQgbWVzc2FnZXMgY29uY2VybmluZyBldmVyeSBsZXZlbCIKKyAgICAgICAgICAgICAgICAgIiA8PSAnZGVidWcnIGxldmVsLiIKKyAgICAgICAgICAgICAgICAgIlxuMSA9IHByaW50IG1lc3NhZ2VzIGNvbmNlcm5pbmcgdGhlIGxldmVsIgorICAgICAgICAgICAgICAgICAiIGluZGljYXRlZCBieSAnZGVidWcnLiIKKyAgICAgICAgICAgICAgICAgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiCisgICAgICAgICAgICAgICAgIF9fTU9EVUxFX1NUUklORyhXOTk2OENGX1NQRUNJRklDX0RFQlVHKSIuIgorICAgICAgICAgICAgICAgICAiXG4iKTsKKyNlbmRpZiAvKiBXOTk2OENGX0RFQlVHICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU29tZSBwcm90b3R5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBWaWRlbzRsaW51eCBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHc5OTY4Y2ZfZm9wczsKK3N0YXRpYyBpbnQgdzk5NjhjZl9vcGVuKHN0cnVjdCBpbm9kZSosIHN0cnVjdCBmaWxlKik7CitzdGF0aWMgaW50IHc5OTY4Y2ZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgZmlsZSopOworc3RhdGljIGludCB3OTk2OGNmX21tYXAoc3RydWN0IGZpbGUqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9pb2N0bChzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgZmlsZSosIHVuc2lnbmVkLCB1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBzc2l6ZV90IHc5OTY4Y2ZfcmVhZChzdHJ1Y3QgZmlsZSosIGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90Kik7CitzdGF0aWMgaW50IHc5OTY4Y2ZfdjRsX2lvY3RsKHN0cnVjdCBpbm9kZSosIHN0cnVjdCBmaWxlKiwgdW5zaWduZWQgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIF9fdXNlciAqKTsKKworLyogVVNCLXNwZWNpZmljICovCitzdGF0aWMgaW50IHc5OTY4Y2Zfc3RhcnRfdHJhbnNmZXIoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgaW50IHc5OTY4Y2Zfc3RvcF90cmFuc2ZlcihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl93cml0ZV9yZWcoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgdTE2IHZhbHVlLCB1MTYgaW5kZXgpOworc3RhdGljIGludCB3OTk2OGNmX3JlYWRfcmVnKHN0cnVjdCB3OTk2OGNmX2RldmljZSosIHUxNiBpbmRleCk7CitzdGF0aWMgaW50IHc5OTY4Y2Zfd3JpdGVfZnNiKHN0cnVjdCB3OTk2OGNmX2RldmljZSosIHUxNiogZGF0YSk7CitzdGF0aWMgaW50IHc5OTY4Y2Zfd3JpdGVfc2Ioc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgdTE2IHZhbHVlKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9yZWFkX3NiKHN0cnVjdCB3OTk2OGNmX2RldmljZSopOworc3RhdGljIGludCB3OTk2OGNmX3VwbG9hZF9xdWFudGl6YXRpb250YWJsZXMoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgdm9pZCB3OTk2OGNmX3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworLyogTG93LWxldmVsIEkyQyAoU01CdXMpIEkvTyAqLworc3RhdGljIGludCB3OTk2OGNmX3NtYnVzX3N0YXJ0KHN0cnVjdCB3OTk2OGNmX2RldmljZSopOworc3RhdGljIGludCB3OTk2OGNmX3NtYnVzX3N0b3Aoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfd3JpdGVfYnl0ZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLCB1OCB2KTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c19yZWFkX2J5dGUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgdTgqIHYpOworc3RhdGljIGludCB3OTk2OGNmX3NtYnVzX3dyaXRlX2FjayhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c19yZWFkX2FjayhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c19yZWZyZXNoX2J1cyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9pMmNfYWRhcF9yZWFkX2J5dGUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBhZGRyZXNzLCB1OCogdmFsdWUpOworc3RhdGljIGludCB3OTk2OGNmX2kyY19hZGFwX3JlYWRfYnl0ZV9kYXRhKHN0cnVjdCB3OTk2OGNmX2RldmljZSosIHUxNiBhZGRyZXNzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBzdWJhZGRyZXNzLCB1OCogdmFsdWUpOworc3RhdGljIGludCB3OTk2OGNmX2kyY19hZGFwX3dyaXRlX2J5dGUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBhZGRyZXNzLCB1OCBzdWJhZGRyZXNzKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9pMmNfYWRhcF9mYXN0d3JpdGVfYnl0ZV9kYXRhKHN0cnVjdCB3OTk2OGNmX2RldmljZSosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgYWRkcmVzcywgdTggc3ViYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHZhbHVlKTsKKworLyogSTJDIGludGVyZmFjZSB0byBrZXJuZWwgKi8KK3N0YXRpYyBpbnQgdzk5NjhjZl9pMmNfaW5pdChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9pMmNfc21idXNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIqLCB1MTYgYWRkciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgZmxhZ3MsIGNoYXIgcmVhZF93cml0ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgaW50IHNpemUsIHVuaW9uIGkyY19zbWJ1c19kYXRhKik7CitzdGF0aWMgdTMyIHc5OTY4Y2ZfaTJjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyKik7CitzdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2F0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9pMmNfZGV0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCopOworc3RhdGljIGludCB3OTk2OGNmX2kyY19jb250cm9sKHN0cnVjdCBpMmNfYWRhcHRlciosIHVuc2lnbmVkIGludCBjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhcmcpOworCisvKiBNZW1vcnkgbWFuYWdlbWVudCAqLworc3RhdGljIHZvaWQqIHJ2bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitzdGF0aWMgdm9pZCBydmZyZWUodm9pZCAqbWVtLCB1bnNpZ25lZCBsb25nIHNpemUpOworc3RhdGljIHZvaWQgdzk5NjhjZl9kZWFsbG9jYXRlX21lbW9yeShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgIHc5OTY4Y2ZfYWxsb2NhdGVfbWVtb3J5KHN0cnVjdCB3OTk2OGNmX2RldmljZSopOworCisvKiBIaWdoLWxldmVsIGltYWdlIHNlbnNvciBjb250cm9sIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLGludCBjaWQsaW50IHZhbCk7CitzdGF0aWMgaW50IHc5OTY4Y2Zfc2Vuc29yX2dldF9jb250cm9sKHN0cnVjdCB3OTk2OGNmX2RldmljZSosaW50IGNpZCxpbnQgKnZhbCk7CitzdGF0aWMgaW50IHc5OTY4Y2Zfc2Vuc29yX2NtZChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9zZW5zb3JfaW5pdChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9zZW5zb3JfdXBkYXRlX3NldHRpbmdzKHN0cnVjdCB3OTk2OGNmX2RldmljZSopOworc3RhdGljIGludCB3OTk2OGNmX3NlbnNvcl9nZXRfcGljdHVyZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9zZW5zb3JfdXBkYXRlX3BpY3R1cmUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19waWN0dXJlIHBpY3QpOworCisvKiBPdGhlciBoZWxwZXIgZnVuY3Rpb25zICovCitzdGF0aWMgdm9pZCB3OTk2OGNmX2NvbmZpZ3VyZV9jYW1lcmEoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKixzdHJ1Y3QgdXNiX2RldmljZSosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB3OTk2OGNmX21vZGVsX2lkLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBkZXZfbnIpOworc3RhdGljIHZvaWQgdzk5NjhjZl9hZGp1c3RfY29uZmlndXJhdGlvbihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl90dXJuX29uX2xlZChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9pbml0X2NoaXAoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgaW5saW5lIHUxNiB3OTk2OGNmX3ZhbGlkX3BhbGV0dGUodTE2IHBhbGV0dGUpOworc3RhdGljIGlubGluZSB1MTYgdzk5NjhjZl92YWxpZF9kZXB0aCh1MTYgcGFsZXR0ZSk7CitzdGF0aWMgaW5saW5lIHU4IHc5OTY4Y2ZfbmVlZF9kZWNvbXByZXNzaW9uKHUxNiBwYWxldHRlKTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9zZXRfcGljdHVyZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLCBzdHJ1Y3QgdmlkZW9fcGljdHVyZSk7CitzdGF0aWMgaW50IHc5OTY4Y2Zfc2V0X3dpbmRvdyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLCBzdHJ1Y3QgdmlkZW9fd2luZG93KTsKK3N0YXRpYyBpbnQgdzk5NjhjZl9wb3N0cHJvY2Vzc19mcmFtZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgdzk5NjhjZl9mcmFtZV90Kik7CitzdGF0aWMgaW50IHc5OTY4Y2ZfYWRqdXN0X3dpbmRvd19zaXplKHN0cnVjdCB3OTk2OGNmX2RldmljZSosIHUxNiogdywgdTE2KiBoKTsKK3N0YXRpYyB2b2lkIHc5OTY4Y2ZfaW5pdF9mcmFtZWxpc3Qoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgdm9pZCB3OTk2OGNmX3B1c2hfZnJhbWUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiwgdTggZl9udW0pOworc3RhdGljIHZvaWQgdzk5NjhjZl9wb3BfZnJhbWUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKixzdHJ1Y3Qgdzk5NjhjZl9mcmFtZV90KiopOworc3RhdGljIHZvaWQgdzk5NjhjZl9yZWxlYXNlX3Jlc291cmNlcyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKTsKKworLyogSW50ZXJtb2R1bGUgY29tbXVuaWNhdGlvbiAqLworc3RhdGljIGludCB3OTk2OGNmX3ZwcG1vZF9kZXRlY3Qoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKik7CitzdGF0aWMgdm9pZCB3OTk2OGNmX3ZwcG1vZF9yZWxlYXNlKHN0cnVjdCB3OTk2OGNmX2RldmljZSopOworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN5bWJvbGljIG5hbWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVXNlZCB0byByZXByZXNlbnQgYSBsaXN0IG9mIHZhbHVlcyBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBzeW1ib2xpYyBuYW1lcyAqLworc3RydWN0IHc5OTY4Y2Zfc3ltYm9saWNfbGlzdCB7CisJY29uc3QgaW50IG51bTsKKwljb25zdCBjaGFyICpuYW1lOworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKyAgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgbWF0Y2hpbmcgZWxlbWVudCBpbiB0aGUgc3ltYm9saWNfbGlzdCBhcnJheS4gVGhlCisgIGVuZCBvZiB0aGUgbGlzdCBtdXN0IGJlIG1hcmtlZCB3aXRoIGFuIGVsZW1lbnQgdGhhdCBoYXMgYSBOVUxMIG5hbWUuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqIAorc3ltYm9saWMoc3RydWN0IHc5OTY4Y2Zfc3ltYm9saWNfbGlzdCBsaXN0W10sIGNvbnN0IGludCBudW0pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBsaXN0W2ldLm5hbWUgIT0gTlVMTDsgaSsrKQorCQlpZiAobGlzdFtpXS5udW0gPT0gbnVtKQorCQkJcmV0dXJuIChsaXN0W2ldLm5hbWUpOworCisJcmV0dXJuICJVbmtub3duIjsKK30KKworc3RhdGljIHN0cnVjdCB3OTk2OGNmX3N5bWJvbGljX2xpc3QgY2FtbGlzdFtdID0geworCXsgVzk5NjhDRl9NT0RfR0VORVJJQywgIlc5OTZbODddQ0YgSlBFRyBVU0IgRHVhbCBNb2RlIENhbWVyYSIgfSwKKwl7IFc5OTY4Q0ZfTU9EX0NMVkJXR1AsICJDcmVhdGl2ZSBMYWJzIFZpZGVvIEJsYXN0ZXIgV2ViQ2FtIEdvIFBsdXMiIH0sCisKKwkvKiBPdGhlciBjYW1lcmFzIChoYXZpbmcgdGhlIHNhbWUgZGVzY3JpcHRvcnMgYXMgR2VuZXJpYyBXOTk2Wzg3XUNGKSAqLworCXsgVzk5NjhDRl9NT0RfQURQVkRNQSwgIkFyb21hIERpZ2kgUGVuIFZHQSBEdWFsIE1vZGUgQURHLTUwMDAiIH0sCisJeyBXOTk4NkNGX01PRF9BQVUsICJBVmVyTWVkaWEgQVZlclRWIFVTQiIgfSwKKwl7IFc5OTY4Q0ZfTU9EX0NMVkJXRywgIkNyZWF0aXZlIExhYnMgVmlkZW8gQmxhc3RlciBXZWJDYW0gR28iIH0sCisJeyBXOTk2OENGX01PRF9MTCwgIkxlYm9uIExEQy0wMzVBIiB9LAorCXsgVzk5NjhDRl9NT0RfRUVFTUMsICJFem9uaWNzIEVaLTgwMiBFWk1lZ2EgQ2FtIiB9LAorCXsgVzk5NjhDRl9NT0RfT09FLCAiT21uaVZpc2lvbiBPVjg2MTAtRURFIiB9LAorCXsgVzk5NjhDRl9NT0RfT0RQVkRNUEMsICJPUENPTSBEaWdpIFBlbiBWR0EgRHVhbCBNb2RlIFBlbiBDYW1lcmEiIH0sCisJeyBXOTk2OENGX01PRF9QRFBJSSwgIlByZXRlYyBEaWdpIFBlbi1JSSIgfSwKKwl7IFc5OTY4Q0ZfTU9EX1BEUDQ4MCwgIlByZXRlYyBEaWdpUGVuLTQ4MCIgfSwKKworCXsgIC0xLCBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3Qgdzk5NjhjZl9zeW1ib2xpY19saXN0IHNlbmxpc3RbXSA9IHsKKwl7IENDX09WNzZCRSwgICAiT1Y3NkJFIiB9LAorCXsgQ0NfT1Y3NjEwLCAgICJPVjc2MTAiIH0sCisJeyBDQ19PVjc2MjAsICAgIk9WNzYyMCIgfSwKKwl7IENDX09WNzYyMEFFLCAiT1Y3NjIwQUUiIH0sCisJeyBDQ19PVjY2MjAsICAgIk9WNjYyMCIgfSwKKwl7IENDX09WNjYzMCwgICAiT1Y2NjMwIiB9LAorCXsgQ0NfT1Y2NjMwQUUsICJPVjY2MzBBRSIgfSwKKwl7IENDX09WNjYzMEFGLCAiT1Y2NjMwQUYiIH0sCisJeyAtMSwgTlVMTCB9Cit9OworCisvKiBWaWRlbzRMaW51eDEgcGFsZXR0ZXMgKi8KK3N0YXRpYyBzdHJ1Y3Qgdzk5NjhjZl9zeW1ib2xpY19saXN0IHY0bDFfcGxpc3RbXSA9IHsKKwl7IFZJREVPX1BBTEVUVEVfR1JFWSwgICAgIkdSRVkiIH0sCisJeyBWSURFT19QQUxFVFRFX0hJMjQwLCAgICJISTI0MCIgfSwKKwl7IFZJREVPX1BBTEVUVEVfUkdCNTY1LCAgIlJHQjU2NSIgfSwKKwl7IFZJREVPX1BBTEVUVEVfUkdCMjQsICAgIlJHQjI0IiB9LAorCXsgVklERU9fUEFMRVRURV9SR0IzMiwgICAiUkdCMzIiIH0sCisJeyBWSURFT19QQUxFVFRFX1JHQjU1NSwgICJSR0I1NTUiIH0sCisJeyBWSURFT19QQUxFVFRFX1lVVjQyMiwgICJZVVY0MjIiIH0sCisJeyBWSURFT19QQUxFVFRFX1lVWVYsICAgICJZVVlWIiB9LAorCXsgVklERU9fUEFMRVRURV9VWVZZLCAgICAiVVlWWSIgfSwKKwl7IFZJREVPX1BBTEVUVEVfWVVWNDIwLCAgIllVVjQyMCIgfSwKKwl7IFZJREVPX1BBTEVUVEVfWVVWNDExLCAgIllVVjQxMSIgfSwKKwl7IFZJREVPX1BBTEVUVEVfUkFXLCAgICAgIlJBVyIgfSwKKwl7IFZJREVPX1BBTEVUVEVfWVVWNDIyUCwgIllVVjQyMlAiIH0sCisJeyBWSURFT19QQUxFVFRFX1lVVjQxMVAsICJZVVY0MTFQIiB9LAorCXsgVklERU9fUEFMRVRURV9ZVVY0MjBQLCAiWVVWNDIwUCIgfSwKKwl7IFZJREVPX1BBTEVUVEVfWVVWNDEwUCwgIllVVjQxMFAiIH0sCisJeyAtMSwgTlVMTCB9Cit9OworCisvKiBEZWNvZGVyIGVycm9yIGNvZGVzOiAqLworc3RhdGljIHN0cnVjdCB3OTk2OGNmX3N5bWJvbGljX2xpc3QgZGVjb2Rlcl9lcnJsaXN0W10gPSB7CisJeyBXOTk2OENGX0RFQ19FUlJfQ09SUlVQVEVEX0RBVEEsICJDb3JydXB0ZWQgZGF0YSIgfSwKKwl7IFc5OTY4Q0ZfREVDX0VSUl9CVUZfT1ZFUkZMT1csICAgIkJ1ZmZlciBvdmVyZmxvdyIgfSwKKwl7IFc5OTY4Q0ZfREVDX0VSUl9OT19TT0ksICAgICAgICAgIlNPSSBtYXJrZXIgbm90IGZvdW5kIiB9LCAgICAgCisJeyBXOTk2OENGX0RFQ19FUlJfTk9fU09GMCwgICAgICAgICJTT0YwIG1hcmtlciBub3QgZm91bmQiIH0sCisJeyBXOTk2OENGX0RFQ19FUlJfTk9fU09TLCAgICAgICAgICJTT1MgbWFya2VyIG5vdCBmb3VuZCIgfSwKKwl7IFc5OTY4Q0ZfREVDX0VSUl9OT19FT0ksICAgICAgICAgIkVPSSBtYXJrZXIgbm90IGZvdW5kIiB9LAorCXsgLTEsIE5VTEwgfQorfTsKKworLyogVVJCIGVycm9yIGNvZGVzOiAqLworc3RhdGljIHN0cnVjdCB3OTk2OGNmX3N5bWJvbGljX2xpc3QgdXJiX2Vycmxpc3RbXSA9IHsKKwl7IC1FTk9NRU0sICAgICJObyBtZW1vcnkgZm9yIGFsbG9jYXRpb24gb2YgaW50ZXJuYWwgc3RydWN0dXJlcyIgfSwKKwl7IC1FTk9TUEMsICAgICJUaGUgaG9zdCBjb250cm9sbGVyJ3MgYmFuZHdpZHRoIGlzIGFscmVhZHkgY29uc3VtZWQiIH0sCisJeyAtRU5PRU5ULCAgICAiVVJCIHdhcyBjYW5jZWxlZCBieSB1bmxpbmtfdXJiIiB9LAorCXsgLUVYREVWLCAgICAgIklTTyB0cmFuc2ZlciBvbmx5IHBhcnRpYWxseSBjb21wbGV0ZWQiIH0sCisJeyAtRUFHQUlOLCAgICAiVG9vIG1hdGNoIHNjaGVkdWxlZCBmb3IgdGhlIGZ1dHVyZSIgfSwKKwl7IC1FTlhJTywgICAgICJVUkIgYWxyZWFkeSBxdWV1ZWQiIH0sCisJeyAtRUZCSUcsICAgICAiVG9vIG11Y2ggSVNPIGZyYW1lcyByZXF1ZXN0ZWQiIH0sCisJeyAtRU5PU1IsICAgICAiQnVmZmVyIGVycm9yIChvdmVycnVuKSIgfSwKKwl7IC1FUElQRSwgICAgICJTcGVjaWZpZWQgZW5kcG9pbnQgaXMgc3RhbGxlZCAoZGV2aWNlIG5vdCByZXNwb25kaW5nKSJ9LAorCXsgLUVPVkVSRkxPVywgIkJhYmJsZSAoYmFkIGNhYmxlPykiIH0sCisJeyAtRVBST1RPLCAgICAiQml0LXN0dWZmIGVycm9yIChiYWQgY2FibGU/KSIgfSwKKwl7IC1FSUxTRVEsICAgICJDUkMvVGltZW91dCIgfSwKKwl7IC1FVElNRURPVVQsICJOQUsgKGRldmljZSBkb2VzIG5vdCByZXNwb25kKSIgfSwKKwl7IC0xLCBOVUxMIH0KK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQqIHJ2bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl2b2lkKiBtZW07CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlzaXplID0gUEFHRV9BTElHTihzaXplKTsKKwltZW0gPSB2bWFsbG9jXzMyKHNpemUpOworCWlmICghbWVtKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldChtZW0sIDAsIHNpemUpOyAvKiBDbGVhciB0aGUgcmFtIG91dCwgbm8ganVuayB0byB0aGUgdXNlciAqLworCWFkciA9ICh1bnNpZ25lZCBsb25nKSBtZW07CisJd2hpbGUgKHNpemUgPiAwKSB7CisJCVNldFBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKKwkJYWRyICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCisJcmV0dXJuIG1lbTsKK30KKworCitzdGF0aWMgdm9pZCBydmZyZWUodm9pZCogbWVtLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBhZHI7CisKKwlpZiAoIW1lbSkKKwkJcmV0dXJuOworCisJYWRyID0gKHVuc2lnbmVkIGxvbmcpIG1lbTsKKwl3aGlsZSAoKGxvbmcpIHNpemUgPiAwKSB7CisJCUNsZWFyUGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOworCQlhZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisJdmZyZWUobWVtKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIERlYWxsb2NhdGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5LgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCB3OTk2OGNmX2RlYWxsb2NhdGVfbWVtb3J5KHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCXU4IGk7CisKKwkvKiBGcmVlIHRoZSBpc29jaHJvbm91cyB0cmFuc2ZlciBidWZmZXJzICovCisJZm9yIChpID0gMDsgaSA8IFc5OTY4Q0ZfVVJCUzsgaSsrKSB7CisJCWtmcmVlKGNhbS0+dHJhbnNmZXJfYnVmZmVyW2ldKTsKKwkJY2FtLT50cmFuc2Zlcl9idWZmZXJbaV0gPSBOVUxMOworCX0KKworCS8qIEZyZWUgdGVtcG9yYXJ5IGZyYW1lIGJ1ZmZlciAqLworCWlmIChjYW0tPmZyYW1lX3RtcC5idWZmZXIpIHsKKwkJcnZmcmVlKGNhbS0+ZnJhbWVfdG1wLmJ1ZmZlciwgY2FtLT5mcmFtZV90bXAuc2l6ZSk7CisJCWNhbS0+ZnJhbWVfdG1wLmJ1ZmZlciA9IE5VTEw7CisJfQorCisJLyogRnJlZSBoZWxwZXIgYnVmZmVyICovCisJaWYgKGNhbS0+ZnJhbWVfdnBwLmJ1ZmZlcikgeworCQlydmZyZWUoY2FtLT5mcmFtZV92cHAuYnVmZmVyLCBjYW0tPmZyYW1lX3ZwcC5zaXplKTsKKwkJY2FtLT5mcmFtZV92cHAuYnVmZmVyID0gTlVMTDsKKwl9CisKKwkvKiBGcmVlIHZpZGVvIGZyYW1lIGJ1ZmZlcnMgKi8KKwlpZiAoY2FtLT5mcmFtZVswXS5idWZmZXIpIHsKKwkJcnZmcmVlKGNhbS0+ZnJhbWVbMF0uYnVmZmVyLCBjYW0tPm5idWZmZXJzKmNhbS0+ZnJhbWVbMF0uc2l6ZSk7CisJCWNhbS0+ZnJhbWVbMF0uYnVmZmVyID0gTlVMTDsKKwl9CisKKwljYW0tPm5idWZmZXJzID0gMDsKKworCURCRyg1LCAiTWVtb3J5IHN1Y2Nlc3NmdWxseSBkZWFsbG9jYXRlZCIpCit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBBbGxvY2F0ZSBtZW1vcnkgYnVmZmVycyBmb3IgVVNCIHRyYW5zZmVycyBhbmQgdmlkZW8gZnJhbWVzLgorICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBvcGVuKCkgb25seS4KKyAgUmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHc5OTY4Y2ZfYWxsb2NhdGVfbWVtb3J5KHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCWNvbnN0IHUxNiBwX3NpemUgPSB3TWF4UGFja2V0U2l6ZVtjYW0tPmFsdHNldHRpbmctMV07CisJdm9pZCogYnVmZiA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBod19idWZzaXplLCB2cHBfYnVmc2l6ZTsKKwl1OCBpLCBicHA7CisKKwkvKiBOT1RFOiBEZWFsbG9jYXRpb24gaXMgZG9uZSBlbHNld2hlcmUgaW4gY2FzZSBvZiBlcnJvciAqLworCisJLyogQ2FsY3VsYXRlIHRoZSBtYXggYW1vdW50IG9mIHJhdyBkYXRhIHBlciBmcmFtZSBmcm9tIHRoZSBkZXZpY2UgKi8KKwlod19idWZzaXplID0gY2FtLT5tYXh3aWR0aCpjYW0tPm1heGhlaWdodCoyOworCisJLyogQ2FsY3VsYXRlIHRoZSBtYXggYnVmLiBzaXplIG5lZWRlZCBmb3IgcG9zdC1wcm9jZXNzaW5nIHJvdXRpbmVzICovCisJYnBwID0gKHc5OTY4Y2ZfdnBwKSA/IDQgOiAyOworCWlmIChjYW0tPnVwc2NhbGluZykKKwkJdnBwX2J1ZnNpemUgPSBtYXgoVzk5NjhDRl9NQVhfV0lEVEgqVzk5NjhDRl9NQVhfSEVJR0hUKmJwcCwKKwkJICAgICAgICAgICAgICAgICAgY2FtLT5tYXh3aWR0aCpjYW0tPm1heGhlaWdodCpicHApOworCWVsc2UKKwkJdnBwX2J1ZnNpemUgPSBjYW0tPm1heHdpZHRoKmNhbS0+bWF4aGVpZ2h0KmJwcDsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGlzb2Nocm9ub3VzIHRyYW5zZmVyIGJ1ZmZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVzk5NjhDRl9VUkJTOyBpKyspIHsKKwkJaWYgKCEoY2FtLT50cmFuc2Zlcl9idWZmZXJbaV0gPQorCQkgICAgICBrbWFsbG9jKFc5OTY4Q0ZfSVNPX1BBQ0tFVFMqcF9zaXplLCBHRlBfS0VSTkVMKSkpIHsKKwkJCURCRygxLCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaXNvY2hyb25vdXMgIgorCQkJICAgICAgICJ0cmFuc2ZlciBidWZmZXJzICgldSBieXRlcykiLCAKKwkJCSAgICBwX3NpemUgKiBXOTk2OENGX0lTT19QQUNLRVRTKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtc2V0KGNhbS0+dHJhbnNmZXJfYnVmZmVyW2ldLCAwLCBXOTk2OENGX0lTT19QQUNLRVRTKnBfc2l6ZSk7CisJfQorCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgdGVtcG9yYXJ5IGZyYW1lIGJ1ZmZlciAqLworCWlmICghKGNhbS0+ZnJhbWVfdG1wLmJ1ZmZlciA9IHJ2bWFsbG9jKGh3X2J1ZnNpemUpKSkgeworCQlEQkcoMSwgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHRlbXBvcmFyeSAiCisJCSAgICAgICAidmlkZW8gZnJhbWUgYnVmZmVyICglbHUgYnl0ZXMpIiwgaHdfYnVmc2l6ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWNhbS0+ZnJhbWVfdG1wLnNpemUgPSBod19idWZzaXplOworCWNhbS0+ZnJhbWVfdG1wLm51bWJlciA9IC0xOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaGVscGVyIGJ1ZmZlciAqLworCWlmICh3OTk2OGNmX3ZwcCkgeworCQlpZiAoIShjYW0tPmZyYW1lX3ZwcC5idWZmZXIgPSBydm1hbGxvYyh2cHBfYnVmc2l6ZSkpKSB7CisJCQlEQkcoMSwgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGhlbHBlciBidWZmZXIiCisJCQkgICAgICAgIiAoJWx1IGJ5dGVzKSIsIHZwcF9idWZzaXplKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJY2FtLT5mcmFtZV92cHAuc2l6ZSA9IHZwcF9idWZzaXplOworCX0gZWxzZQorCQljYW0tPmZyYW1lX3ZwcC5idWZmZXIgPSBOVUxMOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB2aWRlbyBmcmFtZSBidWZmZXJzICovCisJY2FtLT5uYnVmZmVycyA9IGNhbS0+bWF4X2J1ZmZlcnM7CisJd2hpbGUgKGNhbS0+bmJ1ZmZlcnMgPj0gMikgeworCQlpZiAoKGJ1ZmYgPSBydm1hbGxvYyhjYW0tPm5idWZmZXJzICogdnBwX2J1ZnNpemUpKSkKKwkJCWJyZWFrOworCQllbHNlCisJCQljYW0tPm5idWZmZXJzLS07CisJfQorCisJaWYgKCFidWZmKSB7CisJCURCRygxLCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgdmlkZW8gZnJhbWUgYnVmZmVycyIpCisJCWNhbS0+bmJ1ZmZlcnMgPSAwOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoY2FtLT5uYnVmZmVycyAhPSBjYW0tPm1heF9idWZmZXJzKQorCQlEQkcoMiwgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgJXUgdmlkZW8gZnJhbWUgYnVmZmVycy4gIgorCQkgICAgICAgIk9ubHkgbWVtb3J5IGZvciAldSBidWZmZXJzIGhhcyBiZWVuIGFsbG9jYXRlZCIsCisJCSAgICBjYW0tPm1heF9idWZmZXJzLCBjYW0tPm5idWZmZXJzKQorCisJZm9yIChpID0gMDsgaSA8IGNhbS0+bmJ1ZmZlcnM7IGkrKykgeworCQljYW0tPmZyYW1lW2ldLmJ1ZmZlciA9IGJ1ZmYgKyBpKnZwcF9idWZzaXplOworCQljYW0tPmZyYW1lW2ldLnNpemUgPSB2cHBfYnVmc2l6ZTsKKwkJY2FtLT5mcmFtZVtpXS5udW1iZXIgPSBpOworCQkvKiBDaXJjdWxhciBsaXN0ICovCisJCWlmIChpICE9IGNhbS0+bmJ1ZmZlcnMtMSkKKwkJCWNhbS0+ZnJhbWVbaV0ubmV4dCA9ICZjYW0tPmZyYW1lW2krMV07CisJCWVsc2UKKwkJCWNhbS0+ZnJhbWVbaV0ubmV4dCA9ICZjYW0tPmZyYW1lWzBdOworCQljYW0tPmZyYW1lW2ldLnN0YXR1cyA9IEZfVU5VU0VEOworCX0KKworCURCRyg1LCAiTWVtb3J5IHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQiKQorCXJldHVybiAwOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFVTQi1zcGVjaWZpYyBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUaGlzIGlzIGFuIGhhbmRsZXIgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGFmdGVyIHRoZSBVUkJzIGFyZSBjb21wbGV0ZWQuCisgIEl0IGNvbGxlY3RzIG11bHRpcGxlIGRhdGEgcGFja2V0cyBjb21pbmcgZnJvbSB0aGUgY2FtZXJhIGJ5IHB1dHRpbmcgdGhlbQorICBpbnRvIGZyYW1lIGJ1ZmZlcnM6IG9uZSBvciBtb3JlIHplcm8gZGF0YSBsZW5ndGggZGF0YSBwYWNrZXRzIGFyZSB1c2VkIHRvCisgIG1hcmsgdGhlIGVuZCBvZiBhIHZpZGVvIGZyYW1lOyB0aGUgZmlyc3Qgbm9uLXplcm8gZGF0YSBwYWNrZXQgaXMgdGhlIHN0YXJ0CisgIG9mIHRoZSBuZXh0IHZpZGVvIGZyYW1lOyBpZiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZCBpbiBhIHBhY2tldCwgdGhlIGVudGlyZQorICB2aWRlbyBmcmFtZSBpcyBkaXNjYXJkZWQgYW5kIGdyYWJiZWQgYWdhaW4uCisgIElmIHRoZXJlIGFyZSBubyByZXF1ZXN0ZWQgZnJhbWVzIGluIHRoZSBGSUZPIGxpc3QsIHBhY2tldHMgYXJlIGNvbGxlY3RlZCBpbnRvCisgIGEgdGVtcG9yYXJ5IGJ1ZmZlci4gCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHc5OTY4Y2ZfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0gPSAoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCoqIGY7CisJdW5zaWduZWQgaW50IGxlbiwgc3RhdHVzOworCXZvaWQqIHBvczsKKwl1OCBpOworCWludCBlcnIgPSAwOworCisJaWYgKCghY2FtLT5zdHJlYW1pbmcpIHx8IGNhbS0+ZGlzY29ubmVjdGVkKSB7CisJCURCRyg0LCAiR290IGludGVycnVwdCwgYnV0IG5vdCBzdHJlYW1pbmciKQorCQlyZXR1cm47CisJfQorCisJLyogIigqZikiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mICJjYW0tPmZyYW1lX2N1cnJlbnQiICovCisJZiA9ICZjYW0tPmZyYW1lX2N1cnJlbnQ7CisKKwkvKiBJZiBhIGZyYW1lIGhhcyBiZWVuIHJlcXVlc3RlZCBhbmQgd2UgYXJlIGdyYWJiaW5nIGludG8gIAorCSAgIHRoZSB0ZW1wb3JhcnkgZnJhbWUsIHdlJ2xsIHN3aXRjaCB0byB0aGF0IHJlcXVlc3RlZCBmcmFtZSAqLworCWlmICgoKmYpID09ICZjYW0tPmZyYW1lX3RtcCAmJiAqY2FtLT5yZXF1ZXN0ZWRfZnJhbWUpIHsKKwkJaWYgKGNhbS0+ZnJhbWVfdG1wLnN0YXR1cyA9PSBGX0dSQUJCSU5HKSB7CisJCQl3OTk2OGNmX3BvcF9mcmFtZShjYW0sICZjYW0tPmZyYW1lX2N1cnJlbnQpOworCQkJKCpmKS0+c3RhdHVzID0gRl9HUkFCQklORzsKKwkJCSgqZiktPmxlbmd0aCA9IGNhbS0+ZnJhbWVfdG1wLmxlbmd0aDsKKwkJCW1lbWNweSgoKmYpLT5idWZmZXIsIGNhbS0+ZnJhbWVfdG1wLmJ1ZmZlciwKKwkJCSAgICAgICAoKmYpLT5sZW5ndGgpOworCQkJREJHKDYsICJTd2l0Y2hlZCBmcm9tIHRlbXAuIGZyYW1lIHRvIGZyYW1lICMlZCIsIAorCQkJICAgICgqZiktPm51bWJlcikKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOworCQlzdGF0dXMgPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1czsKKwkJcG9zID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQgKyB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCQlpZiAoc3RhdHVzICYmIGxlbiAhPSAwKSB7CisJCQlEQkcoNCwgIlVSQiBmYWlsZWQsIGVycm9yIGluIGRhdGEgcGFja2V0ICIKKwkJCSAgICAgICAiKGVycm9yICMldSwgJXMpIiwKKwkJCSAgICBzdGF0dXMsIHN5bWJvbGljKHVyYl9lcnJsaXN0LCBzdGF0dXMpKQorCQkJKCpmKS0+c3RhdHVzID0gRl9FUlJPUjsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGxlbikgeyAvKiBzdGFydCBvZiBmcmFtZSAqLworCisJCQlpZiAoKCpmKS0+c3RhdHVzID09IEZfVU5VU0VEKSB7CisJCQkJKCpmKS0+c3RhdHVzID0gRl9HUkFCQklORzsKKwkJCQkoKmYpLT5sZW5ndGggPSAwOworCQkJfQorCisJCQkvKiBCdWZmZXIgb3ZlcmZsb3dzIHNob3VsZG4ndCBoYXBwZW4sIGhvd2V2ZXIuLi4qLworCQkJaWYgKCgqZiktPmxlbmd0aCArIGxlbiA+ICgqZiktPnNpemUpIHsKKwkJCQlEQkcoNCwgIkJ1ZmZlciBvdmVyZmxvdzogYmFkIGRhdGEgcGFja2V0cyIpCisJCQkJKCpmKS0+c3RhdHVzID0gRl9FUlJPUjsKKwkJCX0KKworCQkJaWYgKCgqZiktPnN0YXR1cyA9PSBGX0dSQUJCSU5HKSB7CisJCQkJbWVtY3B5KCgqZiktPmJ1ZmZlciArICgqZiktPmxlbmd0aCwgcG9zLCBsZW4pOworCQkJCSgqZiktPmxlbmd0aCArPSBsZW47CisJCQl9CisKKwkJfSBlbHNlIGlmICgoKmYpLT5zdGF0dXMgPT0gRl9HUkFCQklORykgeyAvKiBlbmQgb2YgZnJhbWUgKi8KKworCQkJREJHKDYsICJGcmFtZSAjJWQgc3VjY2Vzc2Z1bGx5IGdyYWJiZWQiLCAoKmYpLT5udW1iZXIpCisKKwkJCWlmIChjYW0tPnZwcF9mbGFnICYgVlBQX0RFQ09NUFJFU1NJT04pIHsKKwkJCQllcnIgPSB3OTk2OGNmX3ZwcC0+Y2hlY2tfaGVhZGVycygoKmYpLT5idWZmZXIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpmKS0+bGVuZ3RoKTsKKwkJCQlpZiAoZXJyKSB7CisJCQkJCURCRyg0LCAiU2tpcCBjb3JydXB0ZWQgZnJhbWU6ICVzIiwKKwkJCQkJICAgIHN5bWJvbGljKGRlY29kZXJfZXJybGlzdCwgZXJyKSkKKwkJCQkJKCpmKS0+c3RhdHVzID0gRl9VTlVTRUQ7CisJCQkJCWNvbnRpbnVlOyAvKiBncmFiIHRoaXMgZnJhbWUgYWdhaW4gKi8KKwkJCQl9CisJCQl9CisKKwkJCSgqZiktPnN0YXR1cyA9IEZfUkVBRFk7CisJCQkoKmYpLT5xdWV1ZWQgPSAwOworCisJCQkvKiBUYWtlIGEgcG9pbnRlciB0byB0aGUgbmV3IGZyYW1lIGZyb20gdGhlIEZJRk8gbGlzdC4KKwkJCSAgIElmIHRoZSBsaXN0IGlzIGVtcHR5LHdlJ2xsIHVzZSB0aGUgdGVtcG9yYXJ5IGZyYW1lKi8KKwkJCWlmICgqY2FtLT5yZXF1ZXN0ZWRfZnJhbWUpCisJCQkJdzk5NjhjZl9wb3BfZnJhbWUoY2FtLCAmY2FtLT5mcmFtZV9jdXJyZW50KTsKKwkJCWVsc2UgeworCQkJCWNhbS0+ZnJhbWVfY3VycmVudCA9ICZjYW0tPmZyYW1lX3RtcDsKKwkJCQkoKmYpLT5zdGF0dXMgPSBGX1VOVVNFRDsKKwkJCX0KKworCQl9IGVsc2UgaWYgKCgqZiktPnN0YXR1cyA9PSBGX0VSUk9SKQorCQkJKCpmKS0+c3RhdHVzID0gRl9VTlVTRUQ7IC8qIGdyYWIgaXQgYWdhaW4gKi8KKworCQlQREJHRygiRnJhbWUgbGVuZ3RoICVsdSB8IHBhY2suIyV1IHwgcGFjay5sZW4uICV1IHwgc3RhdGUgJWQiLAorCQkgICAgICAodW5zaWduZWQgbG9uZykoKmYpLT5sZW5ndGgsIGksIGxlbiwgKCpmKS0+c3RhdHVzKQorCisJfSAvKiBlbmQgZm9yICovCisKKwkvKiBSZXN1Ym1pdCB0aGlzIFVSQiAqLworCXVyYi0+ZGV2ID0gY2FtLT51c2JkZXY7CisJdXJiLT5zdGF0dXMgPSAwOworCXNwaW5fbG9jaygmY2FtLT51cmJfbG9jayk7CisJaWYgKGNhbS0+c3RyZWFtaW5nKQorCQlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpKSB7CisJCQljYW0tPm1pc2NvbmZpZ3VyZWQgPSAxOworCQkJREJHKDEsICJDb3VsZG4ndCByZXN1Ym1pdCB0aGUgVVJCOiBlcnJvciAlZCwgJXMiLAorCQkJICAgIGVyciwgc3ltYm9saWModXJiX2Vycmxpc3QsIGVycikpCisJCX0KKwlzcGluX3VubG9jaygmY2FtLT51cmJfbG9jayk7CisKKwkvKiBXYWtlIHVwIHRoZSB1c2VyIHByb2Nlc3MgKi8KKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNhbS0+d2FpdF9xdWV1ZSk7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgU2V0dXAgdGhlIFVSQiBzdHJ1Y3R1cmVzIGZvciB0aGUgaXNvY2hyb25vdXMgdHJhbnNmZXIuCisgIFN1Ym1pdCB0aGUgVVJCcyBzbyB0aGF0IHRoZSBkYXRhIHRyYW5zZmVyIGJlZ2lucy4KKyAgUmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCB3OTk2OGNmX3N0YXJ0X3RyYW5zZmVyKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gY2FtLT51c2JkZXY7CisJc3RydWN0IHVyYiogdXJiOworCWNvbnN0IHUxNiBwX3NpemUgPSB3TWF4UGFja2V0U2l6ZVtjYW0tPmFsdHNldHRpbmctMV07CisJdTE2IHcsIGgsIGQ7CisJaW50IHZpZGNhcHQ7CisJdTMyIHRfc2l6ZTsKKwlpbnQgZXJyID0gMDsKKwlzOCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IFc5OTY4Q0ZfVVJCUzsgaSsrKSB7CisJCXVyYiA9IHVzYl9hbGxvY191cmIoVzk5NjhDRl9JU09fUEFDS0VUUywgR0ZQX0tFUk5FTCk7CisJCWNhbS0+dXJiW2ldID0gdXJiOworCQlpZiAoIXVyYikgeworCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKKwkJCQl1c2JfZnJlZV91cmIoY2FtLT51cmJbal0pOworCQkJREJHKDEsICJDb3VsZG4ndCBhbGxvY2F0ZSB0aGUgVVJCIHN0cnVjdHVyZXMiKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQl1cmItPmRldiA9IHVkZXY7CisJCXVyYi0+Y29udGV4dCA9ICh2b2lkKiljYW07CisJCXVyYi0+cGlwZSA9IHVzYl9yY3Zpc29jcGlwZSh1ZGV2LCAxKTsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IFc5OTY4Q0ZfSVNPX1BBQ0tFVFM7CisJCXVyYi0+Y29tcGxldGUgPSB3OTk2OGNmX3VyYl9jb21wbGV0ZTsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBjYW0tPnRyYW5zZmVyX2J1ZmZlcltpXTsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gcF9zaXplKlc5OTY4Q0ZfSVNPX1BBQ0tFVFM7CisJCXVyYi0+aW50ZXJ2YWwgPSAxOworCQlmb3IgKGogPSAwOyBqIDwgVzk5NjhDRl9JU09fUEFDS0VUUzsgaisrKSB7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLm9mZnNldCA9IHBfc2l6ZSpqOworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5sZW5ndGggPSBwX3NpemU7CisJCX0KKwl9CisKKwkvKiBUcmFuc2ZlciBzaXplIHBlciBmcmFtZSwgaW4gV09SRCAhICovCisJZCA9IGNhbS0+aHdfZGVwdGg7CisJdyA9IGNhbS0+aHdfd2lkdGg7CisJaCA9IGNhbS0+aHdfaGVpZ2h0OworCisJdF9zaXplID0gKHcqaCpkKS8xNjsKKworCWVyciA9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHhiZjE3LCAweDAwKTsgLyogcmVzZXQgZXZlcnl0aGluZyAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4YmYxMCwgMHgwMCk7IC8qIG5vcm1hbCBvcGVyYXRpb24gKi8KKworCS8qIFRyYW5zZmVyIHNpemUgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB0X3NpemUgJiAweGZmZmYsIDB4M2QpOyAvKiBsb3cgYml0cyAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHRfc2l6ZSA+PiAxNiwgMHgzZSk7ICAgIC8qIGhpZ2ggYml0cyAqLworCisJaWYgKGNhbS0+dnBwX2ZsYWcgJiBWUFBfREVDT01QUkVTU0lPTikKKwkJZXJyICs9IHc5OTY4Y2ZfdXBsb2FkX3F1YW50aXphdGlvbnRhYmxlcyhjYW0pOworCisJdmlkY2FwdCA9IHc5OTY4Y2ZfcmVhZF9yZWcoY2FtLCAweDE2KTsgLyogcmVhZCBwaWN0dXJlIHNldHRpbmdzICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdmlkY2FwdHwweDgwMDAsIDB4MTYpOyAvKiBjYXB0LiBlbmFibGUgKi8KKworCWVyciArPSB1c2Jfc2V0X2ludGVyZmFjZSh1ZGV2LCAwLCBjYW0tPmFsdHNldHRpbmcpOworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4OGEwNSwgMHgzYyk7IC8qIFVTQiBGSUZPIGVuYWJsZSAqLworCisJaWYgKGVyciB8fCAodmlkY2FwdCA8IDApKSB7CisJCWZvciAoaSA9IDA7IGkgPCBXOTk2OENGX1VSQlM7IGkrKykKKwkJCXVzYl9mcmVlX3VyYihjYW0tPnVyYltpXSk7CisJCURCRygxLCAiQ291bGRuJ3QgdGVsbCB0aGUgY2FtZXJhIHRvIHN0YXJ0IHRoZSBkYXRhIHRyYW5zZmVyIikKKwkJcmV0dXJuIGVycjsKKwl9CisKKwl3OTk2OGNmX2luaXRfZnJhbWVsaXN0KGNhbSk7CisKKwkvKiBCZWdpbiB0byBncmFiIGludG8gdGhlIHRlbXBvcmFyeSBidWZmZXIgKi8KKwljYW0tPmZyYW1lX3RtcC5zdGF0dXMgPSBGX1VOVVNFRDsKKwljYW0tPmZyYW1lX3RtcC5xdWV1ZWQgPSAwOworCWNhbS0+ZnJhbWVfY3VycmVudCA9ICZjYW0tPmZyYW1lX3RtcDsKKworCWlmICghKGNhbS0+dnBwX2ZsYWcgJiBWUFBfREVDT01QUkVTU0lPTikpCisJCURCRyg1LCAiSXNvY2hyb25vdXMgdHJhbnNmZXIgc2l6ZTogJWx1IGJ5dGVzL2ZyYW1lIiwgCisJCSAgICAodW5zaWduZWQgbG9uZyl0X3NpemUqMikKKworCURCRyg1LCAiU3RhcnRpbmcgdGhlIGlzb2Nocm9ub3VzIHRyYW5zZmVyLi4uIikKKworCWNhbS0+c3RyZWFtaW5nID0gMTsKKworCS8qIFN1Ym1pdCB0aGUgVVJCcyAqLworCWZvciAoaSA9IDA7IGkgPCBXOTk2OENGX1VSQlM7IGkrKykgeworCQllcnIgPSB1c2Jfc3VibWl0X3VyYihjYW0tPnVyYltpXSwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnIpIHsKKwkJCWNhbS0+c3RyZWFtaW5nID0gMDsKKwkJCWZvciAoaiA9IGktMTsgaiA+PSAwOyBqLS0pIHsKKwkJCQl1c2Jfa2lsbF91cmIoY2FtLT51cmJbal0pOworCQkJCXVzYl9mcmVlX3VyYihjYW0tPnVyYltqXSk7CisJCQl9CisJCQlEQkcoMSwgIkNvdWxkbid0IHNlbmQgYSB0cmFuc2ZlciByZXF1ZXN0IHRvIHRoZSAiCisJCQkgICAgICAgIlVTQiBjb3JlIChlcnJvciAjJWQsICVzKSIsIGVyciwgCisJCQkgICAgc3ltYm9saWModXJiX2Vycmxpc3QsIGVycikpCisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBTdG9wIHRoZSBpc29jaHJvbm91cyB0cmFuc2ZlciBhbmQgc2V0IGFsdGVybmF0ZSBzZXR0aW5nIHRvIDAgKDBNYi9zKS4KKyAgUmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHc5OTY4Y2Zfc3RvcF90cmFuc2ZlcihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGNhbS0+dXNiZGV2OworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwlpbnQgZXJyID0gMDsKKwlzOCBpOworCisJaWYgKCFjYW0tPnN0cmVhbWluZykKKwkJcmV0dXJuIDA7CisKKwkvKiBUaGlzIGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgd2l0aCB1c2Jfc3VibWl0X3VyYigpIAorCSAgIGluIHRoZSBVUkIgY29tcGxldGl0aW9uIGhhbmRsZXIgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FtLT51cmJfbG9jaywgbG9ja19mbGFncyk7CisJY2FtLT5zdHJlYW1pbmcgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+dXJiX2xvY2ssIGxvY2tfZmxhZ3MpOworCisJZm9yIChpID0gVzk5NjhDRl9VUkJTLTE7IGkgPj0gMDsgaS0tKQorCQlpZiAoY2FtLT51cmJbaV0pIHsKKwkJCXVzYl9raWxsX3VyYihjYW0tPnVyYltpXSk7CisJCQl1c2JfZnJlZV91cmIoY2FtLT51cmJbaV0pOworCQkJY2FtLT51cmJbaV0gPSBOVUxMOworCQl9CisKKwlpZiAoY2FtLT5kaXNjb25uZWN0ZWQpCisJCWdvdG8gZXhpdDsKKworCWVyciA9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwYTA1LCAweDNjKTsgLyogc3RvcCBVU0IgdHJhbnNmZXIgKi8KKwllcnIgKz0gdXNiX3NldF9pbnRlcmZhY2UodWRldiwgMCwgMCk7IC8qIDAgTWIvcyAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4MDAwMCwgMHgzOSk7IC8qIGRpc2FibGUgSlBFRyBlbmNvZGVyICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwMDAwLCAweDE2KTsgLyogc3RvcCB2aWRlbyBjYXB0dXJlICovCisKKwlpZiAoZXJyKSB7CisJCURCRygyLCAiRmFpbGVkIHRvIHRlbGwgdGhlIGNhbWVyYSB0byBzdG9wIHRoZSBpc29jaHJvbm91cyAiCisJCSAgICAgICAidHJhbnNmZXIuIEhvd2V2ZXIgdGhpcyBpcyBub3QgYSBjcml0aWNhbCBlcnJvci4iKQorCQlyZXR1cm4gLUVJTzsKKwl9CisKK2V4aXQ6CisJREJHKDUsICJJc29jaHJvbm91cyB0cmFuc2ZlciBzdG9wcGVkIikKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFdyaXRlIGEgVzk5NjhDRiByZWdpc3Rlci4gCisgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG90aGVyd2lzZS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCB3OTk2OGNmX3dyaXRlX3JlZyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgdTE2IHZhbHVlLCB1MTYgaW5kZXgpCit7CisJc3RydWN0IHVzYl9kZXZpY2UqIHVkZXYgPSBjYW0tPnVzYmRldjsKKwlpbnQgcmVzOworCisJcmVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMCwKKwkgICAgICAgICAgICAgICAgICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfREVWSUNFLAorCSAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgaW5kZXgsIE5VTEwsIDAsIFc5OTY4Q0ZfVVNCX0NUUkxfVElNRU9VVCk7CisKKwlpZiAocmVzIDwgMCkKKwkJREJHKDQsICJGYWlsZWQgdG8gd3JpdGUgYSByZWdpc3RlciAiCisJCSAgICAgICAiKHZhbHVlIDB4JTA0WCwgaW5kZXggMHglMDJYLCBlcnJvciAjJWQsICVzKSIsCisJCSAgICB2YWx1ZSwgaW5kZXgsIHJlcywgc3ltYm9saWModXJiX2Vycmxpc3QsIHJlcykpCisKKwlyZXR1cm4gKHJlcyA+PSAwKSA/IDAgOiAtMTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFJlYWQgYSBXOTk2OENGIHJlZ2lzdGVyLiAKKyAgUmV0dXJuIHRoZSByZWdpc3RlciB2YWx1ZSBvbiBzdWNjZXNzLCAtMSBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgdzk5NjhjZl9yZWFkX3JlZyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgdTE2IGluZGV4KQoreworCXN0cnVjdCB1c2JfZGV2aWNlKiB1ZGV2ID0gY2FtLT51c2JkZXY7CisJdTE2KiBidWZmID0gY2FtLT5jb250cm9sX2J1ZmZlcjsKKwlpbnQgcmVzOworCisJcmVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwgMSwKKwkgICAgICAgICAgICAgICAgICAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJICAgICAgICAgICAgICAgICAgICAgIDAsIGluZGV4LCBidWZmLCAyLCBXOTk2OENGX1VTQl9DVFJMX1RJTUVPVVQpOworCisJaWYgKHJlcyA8IDApCisJCURCRyg0LCAiRmFpbGVkIHRvIHJlYWQgYSByZWdpc3RlciAiCisJCSAgICAgICAiKGluZGV4IDB4JTAyWCwgZXJyb3IgIyVkLCAlcykiLAorCQkgICAgaW5kZXgsIHJlcywgc3ltYm9saWModXJiX2Vycmxpc3QsIHJlcykpCisKKwlyZXR1cm4gKHJlcyA+PSAwKSA/IChpbnQpKCpidWZmKSA6IC0xOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgV3JpdGUgNjQtYml0IGRhdGEgdG8gdGhlIGZhc3Qgc2VyaWFsIGJ1cyByZWdpc3RlcnMuCisgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG90aGVyd2lzZS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCB3OTk2OGNmX3dyaXRlX2ZzYihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgdTE2KiBkYXRhKQoreworCXN0cnVjdCB1c2JfZGV2aWNlKiB1ZGV2ID0gY2FtLT51c2JkZXY7CisJdTE2IHZhbHVlOworCWludCByZXM7CisKKwl2YWx1ZSA9ICpkYXRhKys7CisKKwlyZXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAwLAorCSAgICAgICAgICAgICAgICAgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLCAweDA2LCBkYXRhLCA2LCBXOTk2OENGX1VTQl9DVFJMX1RJTUVPVVQpOworCisJaWYgKHJlcyA8IDApCisJCURCRyg0LCAiRmFpbGVkIHRvIHdyaXRlIHRoZSBGU0IgcmVnaXN0ZXJzICIKKwkJICAgICAgICIoZXJyb3IgIyVkLCAlcykiLCByZXMsIHN5bWJvbGljKHVyYl9lcnJsaXN0LCByZXMpKQorCisJcmV0dXJuIChyZXMgPj0gMCkgPyAwIDogLTE7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBXcml0ZSBkYXRhIHRvIHRoZSBzZXJpYWwgYnVzIGNvbnRyb2wgcmVnaXN0ZXIuCisgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgbnVtYmVyIG90aGVyd2lzZS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCB3OTk2OGNmX3dyaXRlX3NiKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCB1MTYgdmFsdWUpCit7CisJaW50IGVyciA9IDA7CisKKwllcnIgPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHZhbHVlLCAweDAxKTsKKwl1ZGVsYXkoVzk5NjhDRl9JMkNfQlVTX0RFTEFZKTsKKworCXJldHVybiBlcnI7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBSZWFkIGRhdGEgZnJvbSB0aGUgc2VyaWFsIGJ1cyBjb250cm9sIHJlZ2lzdGVyLgorICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgdzk5NjhjZl9yZWFkX3NiKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCWludCB2ID0gMDsKKworCXYgPSB3OTk2OGNmX3JlYWRfcmVnKGNhbSwgMHgwMSk7CisJdWRlbGF5KFc5OTY4Q0ZfSTJDX0JVU19ERUxBWSk7CisKKwlyZXR1cm4gdjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFVwbG9hZCBxdWFudGl6YXRpb24gdGFibGVzIGZvciB0aGUgSlBFRyBjb21wcmVzc2lvbi4KKyAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdzk5NjhjZl9zdGFydF90cmFuc2ZlcigpLgorICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgdzk5NjhjZl91cGxvYWRfcXVhbnRpemF0aW9udGFibGVzKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCXUxNiBhLCBiOworCWludCBlcnIgPSAwLCBpLCBqOworCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwMDEwLCAweDM5KTsgLyogSlBFRyBjbG9jayBlbmFibGUgKi8KKworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgMzI7IGkrKywgaiArPSAyKSB7CisJCWEgPSBZX1FVQU5UQUJMRVtqXSB8ICgodW5zaWduZWQpKFlfUVVBTlRBQkxFW2orMV0pIDw8IDgpOworCQliID0gVVZfUVVBTlRBQkxFW2pdIHwgKCh1bnNpZ25lZCkoVVZfUVVBTlRBQkxFW2orMV0pIDw8IDgpOworCQllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCBhLCAweDQwK2kpOworCQllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCBiLCAweDYwK2kpOworCX0KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweDAwMTIsIDB4MzkpOyAvKiBKUEVHIGVuY29kZXIgZW5hYmxlICovCisKKwlyZXR1cm4gZXJyOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIExvdy1sZXZlbCBJMkMgSS9PIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIEkyQyB0cmFuc2ZlciBmdW5jdGlvbnM6ICAgICAgICAgICAgICAgKgorICogaTJjX2FkYXBfZmFzdHdyaXRlX2J5dGVfZGF0YSgpIChhdCA0MDAga0h6IGJpdCBmcmVxdWVuY3kgb25seSkgICAgICAgICAgICoKKyAqIGkyY19hZGFwX3JlYWRfYnl0ZV9kYXRhKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBpMmNfYWRhcF9yZWFkX2J5dGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgdzk5NjhjZl9zbWJ1c19zdGFydChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDExKTsgLyogU0RFPTEsIFNEQT0wLCBTQ0w9MSAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDEwKTsgLyogU0RFPTEsIFNEQT0wLCBTQ0w9MCAqLworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfc3RvcChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDExKTsgLyogU0RFPTEsIFNEQT0wLCBTQ0w9MSAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDEzKTsgLyogU0RFPTEsIFNEQT0xLCBTQ0w9MSAqLworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfd3JpdGVfYnl0ZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgdTggdikKK3sKKwl1OCBiaXQ7CisJaW50IGVyciA9IDAsIHNkYTsKKworCWZvciAoYml0ID0gMCA7IGJpdCA8IDggOyBiaXQrKykgeworCQlzZGEgPSAodiAmIDB4ODApID8gMiA6IDA7CisJCXYgPDw9IDE7CisJCS8qIFNERT0xLCBTREE9c2RhLCBTQ0w9MCAqLworCQllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MTAgfCBzZGEpOworCQkvKiBTREU9MSwgU0RBPXNkYSwgU0NMPTEgKi8KKwkJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDExIHwgc2RhKTsKKwkJLyogU0RFPTEsIFNEQT1zZGEsIFNDTD0wICovCisJCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgxMCB8IHNkYSk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfcmVhZF9ieXRlKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCB1OCogdikKK3sKKwl1OCBiaXQ7CisJaW50IGVyciA9IDA7CisKKwkqdiA9IDA7CisJZm9yIChiaXQgPSAwIDsgYml0IDwgOCA7IGJpdCsrKSB7CisJCSp2IDw8PSAxOworCQllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAxMyk7CisJCSp2IHw9ICh3OTk2OGNmX3JlYWRfc2IoY2FtKSAmIDB4MDAwOCkgPyAxIDogMDsKKwkJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDAwMTIpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCB3OTk2OGNmX3NtYnVzX3dyaXRlX2FjayhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDEwKTsgLyogU0RFPTEsIFNEQT0wLCBTQ0w9MCAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDExKTsgLyogU0RFPTEsIFNEQT0wLCBTQ0w9MSAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDEwKTsgLyogU0RFPTEsIFNEQT0wLCBTQ0w9MCAqLworCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfcmVhZF9hY2soc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCit7CisJaW50IGVyciA9IDAsIHNkYTsKKworCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDEzKTsgLyogU0RFPTEsIFNEQT0xLCBTQ0w9MSAqLworCXNkYSA9ICh3OTk2OGNmX3JlYWRfc2IoY2FtKSAmIDB4MDgpID8gMSA6IDA7IC8qIHNkYSA9IFNEQSAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDEyKTsgLyogU0RFPTEsIFNEQT0xLCBTQ0w9MCAqLworCWlmIChzZGEgPCAwKQorCQllcnIgKz0gc2RhOworCWlmIChzZGEgPT0gMSkgeworCQlEQkcoNiwgIkNvdWxkbid0IHJlY2VpdmUgdGhlIEFDSyIpCisJCWVyciArPSAtMTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisKKy8qIFRoaXMgc2VlbXMgdG8gcmVmcmVzaCB0aGUgY29tbXVuaWNhdGlvbiB0aHJvdWdoIHRoZSBzZXJpYWwgYnVzICovCitzdGF0aWMgaW50IHc5OTY4Y2Zfc21idXNfcmVmcmVzaF9idXMoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCit7CisJaW50IGVyciA9IDAsIGo7CisKKwlmb3IgKGogPSAxOyBqIDw9IDEwOyBqKyspIHsKKwkJZXJyID0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweDAwMjAsIDB4MDEpOworCQllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweDAwMDAsIDB4MDEpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworCisvKiBTTUJ1cyBwcm90b2NvbDogUyBBZGRyIFdyIFtBXSBTdWJhZGRyIFtBXSBWYWx1ZSBbQV0gUCAqLworc3RhdGljIGludCAKK3c5OTY4Y2ZfaTJjX2FkYXBfZmFzdHdyaXRlX2J5dGVfZGF0YShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGFkZHJlc3MsIHU4IHN1YmFkZHJlc3MsdTggdmFsdWUpCit7CisJdTE2KiBkYXRhID0gY2FtLT5kYXRhX2J1ZmZlcjsKKwlpbnQgZXJyID0gMDsKKworCWVyciArPSB3OTk2OGNmX3NtYnVzX3JlZnJlc2hfYnVzKGNhbSk7CisKKwkvKiBFbmFibGUgU0JVUyBvdXRwdXRzICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfc2IoY2FtLCAweDAwMjApOworCisJZGF0YVswXSA9IDB4MDgyZiB8ICgoYWRkcmVzcyAmIDB4ODApID8gMHgxNTAwIDogMHgwKTsKKwlkYXRhWzBdIHw9IChhZGRyZXNzICYgMHg0MCkgPyAweDQwMDAgOiAweDA7CisJZGF0YVsxXSA9IDB4MjA4MiB8ICgoYWRkcmVzcyAmIDB4NDApID8gMHgwMDA1IDogMHgwKTsKKwlkYXRhWzFdIHw9IChhZGRyZXNzICYgMHgyMCkgPyAweDAxNTAgOiAweDA7CisJZGF0YVsxXSB8PSAoYWRkcmVzcyAmIDB4MTApID8gMHg1NDAwIDogMHgwOworCWRhdGFbMl0gPSAweDgyMDggfCAoKGFkZHJlc3MgJiAweDA4KSA/IDB4MDAxNSA6IDB4MCk7CisJZGF0YVsyXSB8PSAoYWRkcmVzcyAmIDB4MDQpID8gMHgwNTQwIDogMHgwOworCWRhdGFbMl0gfD0gKGFkZHJlc3MgJiAweDAyKSA/IDB4NTAwMCA6IDB4MDsKKwlkYXRhWzNdID0gMHgxZDIwIHwgKChhZGRyZXNzICYgMHgwMikgPyAweDAwMDEgOiAweDApOworCWRhdGFbM10gfD0gKGFkZHJlc3MgJiAweDAxKSA/IDB4MDA1NCA6IDB4MDsKKworCWVyciArPSB3OTk2OGNmX3dyaXRlX2ZzYihjYW0sIGRhdGEpOworCisJZGF0YVswXSA9IDB4ODIwOCB8ICgoc3ViYWRkcmVzcyAmIDB4ODApID8gMHgwMDE1IDogMHgwKTsKKwlkYXRhWzBdIHw9IChzdWJhZGRyZXNzICYgMHg0MCkgPyAweDA1NDAgOiAweDA7CisJZGF0YVswXSB8PSAoc3ViYWRkcmVzcyAmIDB4MjApID8gMHg1MDAwIDogMHgwOworCWRhdGFbMV0gPSAweDA4MjAgfCAoKHN1YmFkZHJlc3MgJiAweDIwKSA/IDB4MDAwMSA6IDB4MCk7CisJZGF0YVsxXSB8PSAoc3ViYWRkcmVzcyAmIDB4MTApID8gMHgwMDU0IDogMHgwOworCWRhdGFbMV0gfD0gKHN1YmFkZHJlc3MgJiAweDA4KSA/IDB4MTUwMCA6IDB4MDsKKwlkYXRhWzFdIHw9IChzdWJhZGRyZXNzICYgMHgwNCkgPyAweDQwMDAgOiAweDA7CisJZGF0YVsyXSA9IDB4MjA4MiB8ICgoc3ViYWRkcmVzcyAmIDB4MDQpID8gMHgwMDA1IDogMHgwKTsKKwlkYXRhWzJdIHw9IChzdWJhZGRyZXNzICYgMHgwMikgPyAweDAxNTAgOiAweDA7CisJZGF0YVsyXSB8PSAoc3ViYWRkcmVzcyAmIDB4MDEpID8gMHg1NDAwIDogMHgwOworCWRhdGFbM10gPSAweDAwMWQ7CisKKwllcnIgKz0gdzk5NjhjZl93cml0ZV9mc2IoY2FtLCBkYXRhKTsKKworCWRhdGFbMF0gPSAweDgyMDggfCAoKHZhbHVlICYgMHg4MCkgPyAweDAwMTUgOiAweDApOworCWRhdGFbMF0gfD0gKHZhbHVlICYgMHg0MCkgPyAweDA1NDAgOiAweDA7CisJZGF0YVswXSB8PSAodmFsdWUgJiAweDIwKSA/IDB4NTAwMCA6IDB4MDsKKwlkYXRhWzFdID0gMHgwODIwIHwgKCh2YWx1ZSAmIDB4MjApID8gMHgwMDAxIDogMHgwKTsKKwlkYXRhWzFdIHw9ICh2YWx1ZSAmIDB4MTApID8gMHgwMDU0IDogMHgwOworCWRhdGFbMV0gfD0gKHZhbHVlICYgMHgwOCkgPyAweDE1MDAgOiAweDA7CisJZGF0YVsxXSB8PSAodmFsdWUgJiAweDA0KSA/IDB4NDAwMCA6IDB4MDsKKwlkYXRhWzJdID0gMHgyMDgyIHwgKCh2YWx1ZSAmIDB4MDQpID8gMHgwMDA1IDogMHgwKTsKKwlkYXRhWzJdIHw9ICh2YWx1ZSAmIDB4MDIpID8gMHgwMTUwIDogMHgwOworCWRhdGFbMl0gfD0gKHZhbHVlICYgMHgwMSkgPyAweDU0MDAgOiAweDA7CisJZGF0YVszXSA9IDB4ZmUxZDsKKworCWVyciArPSB3OTk2OGNmX3dyaXRlX2ZzYihjYW0sIGRhdGEpOworCisJLyogRGlzYWJsZSBTQlVTIG91dHB1dHMgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAwMCk7CisKKwlpZiAoIWVycikKKwkJREJHKDUsICJJMkMgd3JpdGUgYnl0ZSBkYXRhIGRvbmUsIGFkZHIuMHglMDRYLCBzdWJhZGRyLjB4JTAyWCAiCisJCSAgICAgICAidmFsdWUgMHglMDJYIiwgYWRkcmVzcywgc3ViYWRkcmVzcywgdmFsdWUpCisJZWxzZQorCQlEQkcoNSwgIkkyQyB3cml0ZSBieXRlIGRhdGEgZmFpbGVkLCBhZGRyLjB4JTA0WCwgIgorCQkgICAgICAgInN1YmFkZHIuMHglMDJYLCB2YWx1ZSAweCUwMlgiLCAKKwkJICAgIGFkZHJlc3MsIHN1YmFkZHJlc3MsIHZhbHVlKQorCisJcmV0dXJuIGVycjsKK30KKworCisvKiBTTUJ1cyBwcm90b2NvbDogUyBBZGRyIFdyIFtBXSBTdWJhZGRyIFtBXSBQIFMgQWRkcisxIFJkIFtBXSBbVmFsdWVdIE5BIFAgKi8KK3N0YXRpYyBpbnQgCit3OTk2OGNmX2kyY19hZGFwX3JlYWRfYnl0ZV9kYXRhKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGFkZHJlc3MsIHU4IHN1YmFkZHJlc3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCogdmFsdWUpCit7CisJaW50IGVyciA9IDA7CisKKwkvKiBTZXJpYWwgZGF0YSBlbmFibGUgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAxMyk7IC8qIGRvbid0IGNoYW5nZSAhICovCisKKwllcnIgKz0gdzk5NjhjZl9zbWJ1c19zdGFydChjYW0pOworCWVyciArPSB3OTk2OGNmX3NtYnVzX3dyaXRlX2J5dGUoY2FtLCBhZGRyZXNzKTsKKwllcnIgKz0gdzk5NjhjZl9zbWJ1c19yZWFkX2FjayhjYW0pOworCWVyciArPSB3OTk2OGNmX3NtYnVzX3dyaXRlX2J5dGUoY2FtLCBzdWJhZGRyZXNzKTsKKwllcnIgKz0gdzk5NjhjZl9zbWJ1c19yZWFkX2FjayhjYW0pOworCWVyciArPSB3OTk2OGNmX3NtYnVzX3N0b3AoY2FtKTsKKwllcnIgKz0gdzk5NjhjZl9zbWJ1c19zdGFydChjYW0pOworCWVyciArPSB3OTk2OGNmX3NtYnVzX3dyaXRlX2J5dGUoY2FtLCBhZGRyZXNzICsgMSk7CisJZXJyICs9IHc5OTY4Y2Zfc21idXNfcmVhZF9hY2soY2FtKTsKKwllcnIgKz0gdzk5NjhjZl9zbWJ1c19yZWFkX2J5dGUoY2FtLCB2YWx1ZSk7CisJZXJyICs9IHc5OTY4Y2Zfc21idXNfd3JpdGVfYWNrKGNhbSk7CisJZXJyICs9IHc5OTY4Y2Zfc21idXNfc3RvcChjYW0pOworCisJLyogU2VyaWFsIGRhdGEgZGlzYWJsZSAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3NiKGNhbSwgMHgwMDAwKTsKKworCWlmICghZXJyKQorCQlEQkcoNSwgIkkyQyByZWFkIGJ5dGUgZGF0YSBkb25lLCBhZGRyLjB4JTA0WCwgIgorCQkgICAgICAgInN1YmFkZHIuMHglMDJYLCB2YWx1ZSAweCUwMlgiLCAKKwkJICAgIGFkZHJlc3MsIHN1YmFkZHJlc3MsICp2YWx1ZSkKKwllbHNlCisJCURCRyg1LCAiSTJDIHJlYWQgYnl0ZSBkYXRhIGZhaWxlZCwgYWRkci4weCUwNFgsICIKKwkJICAgICAgICJzdWJhZGRyLjB4JTAyWCwgd3JvbmcgdmFsdWUgMHglMDJYIiwKKwkJICAgIGFkZHJlc3MsIHN1YmFkZHJlc3MsICp2YWx1ZSkKKworCXJldHVybiBlcnI7Cit9CisKKworLyogU01CdXMgcHJvdG9jb2w6IFMgQWRkcisxIFJkIFtBXSBbVmFsdWVdIE5BIFAgKi8KK3N0YXRpYyBpbnQgCit3OTk2OGNmX2kyY19hZGFwX3JlYWRfYnl0ZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBhZGRyZXNzLCB1OCogdmFsdWUpCit7CisJaW50IGVyciA9IDA7CisKKwkvKiBTZXJpYWwgZGF0YSBlbmFibGUgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAxMyk7CisKKwllcnIgKz0gdzk5NjhjZl9zbWJ1c19zdGFydChjYW0pOworCWVyciArPSB3OTk2OGNmX3NtYnVzX3dyaXRlX2J5dGUoY2FtLCBhZGRyZXNzICsgMSk7CisJZXJyICs9IHc5OTY4Y2Zfc21idXNfcmVhZF9hY2soY2FtKTsKKwllcnIgKz0gdzk5NjhjZl9zbWJ1c19yZWFkX2J5dGUoY2FtLCB2YWx1ZSk7CisJZXJyICs9IHc5OTY4Y2Zfc21idXNfd3JpdGVfYWNrKGNhbSk7CisJZXJyICs9IHc5OTY4Y2Zfc21idXNfc3RvcChjYW0pOworIAorCS8qIFNlcmlhbCBkYXRhIGRpc2FibGUgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9zYihjYW0sIDB4MDAwMCk7CisKKwlpZiAoIWVycikKKwkJREJHKDUsICJJMkMgcmVhZCBieXRlIGRvbmUsIGFkZHIuMHglMDRYLCAiCisJCSAgICAgICAidmFsdWUgMHglMDJYIiwgYWRkcmVzcywgKnZhbHVlKQorCWVsc2UKKwkJREJHKDUsICJJMkMgcmVhZCBieXRlIGZhaWxlZCwgYWRkci4weCUwNFgsICIKKwkJICAgICAgICJ3cm9uZyB2YWx1ZSAweCUwMlgiLCBhZGRyZXNzLCAqdmFsdWUpCisKKwlyZXR1cm4gZXJyOworfQorCisKKy8qIFNNQnVzIHByb3RvY29sOiBTIEFkZHIgV3IgW0FdIFZhbHVlIFtBXSBQICovCitzdGF0aWMgaW50IAordzk5NjhjZl9pMmNfYWRhcF93cml0ZV9ieXRlKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBhZGRyZXNzLCB1OCB2YWx1ZSkKK3sKKwlEQkcoNCwgImkyY193cml0ZV9ieXRlKCkgaXMgYW4gdW5zdXBwb3J0ZWQgdHJhbnNmZXIgbW9kZSIpCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSTJDIGludGVyZmFjZSB0byBrZXJuZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50Cit3OTk2OGNmX2kyY19zbWJ1c194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgdTE2IGFkZHIsIAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBmbGFncywgY2hhciByZWFkX3dyaXRlLCB1OCBjb21tYW5kLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSwgdW5pb24gaTJjX3NtYnVzX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0gPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOworCXU4IGk7CisJaW50IGVyciA9IDA7IAorCisJc3dpdGNoIChhZGRyKSB7CisJCWNhc2UgT1Y2eHgwX1NJRDoKKwkJY2FzZSBPVjd4eDBfU0lEOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEQkcoNCwgIlJlamVjdGVkIHNsYXZlIElEIDB4JTA0WCIsIGFkZHIpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc2l6ZSA9PSBJMkNfU01CVVNfQllURSkgeworCQkvKiBXaHkgYWRkciA8PD0gMT8gU2VlIE9WWFhYMF9TSUQgZGVmaW5lcyBpbiBvdmNhbWNoaXAuaCAqLworCQlhZGRyIDw8PSAxOworCisJCWlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19XUklURSkKKyAJCQllcnIgPSB3OTk2OGNmX2kyY19hZGFwX3dyaXRlX2J5dGUoY2FtLCBhZGRyLCBjb21tYW5kKTsKKwkJZWxzZSBpZiAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfUkVBRCkgCisJCQllcnIgPSB3OTk2OGNmX2kyY19hZGFwX3JlYWRfYnl0ZShjYW0sYWRkciwmZGF0YS0+Ynl0ZSk7CisKKwl9IGVsc2UgaWYgKHNpemUgPT0gSTJDX1NNQlVTX0JZVEVfREFUQSkgeworCQlhZGRyIDw8PSAxOworCisJCWlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19XUklURSkKKyAJCQllcnIgPSB3OTk2OGNmX2kyY19hZGFwX2Zhc3R3cml0ZV9ieXRlX2RhdGEoY2FtLCBhZGRyLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsIGRhdGEtPmJ5dGUpOworCQllbHNlIGlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19SRUFEKSB7CisJCQlmb3IgKGkgPSAxOyBpIDw9IFc5OTY4Q0ZfSTJDX1JXX1JFVFJJRVM7IGkrKykgeworCQkJCWVyciA9IHc5OTY4Y2ZfaTJjX2FkYXBfcmVhZF9ieXRlX2RhdGEoY2FtLGFkZHIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsICZkYXRhLT5ieXRlKTsKKwkJCQlpZiAoZXJyKSB7CisJCQkJCWlmICh3OTk2OGNmX3NtYnVzX3JlZnJlc2hfYnVzKGNhbSkpIHsKKwkJCQkJCWVyciA9IC1FSU87CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0gZWxzZQorCQkJCQlicmVhazsKKwkJCX0KKworCQl9IGVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCisJfSBlbHNlIHsKKwkJREJHKDQsICJVbnN1cHBvcnRlZCBJMkMgdHJhbnNmZXIgbW9kZSAoJWQpIiwgc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgdTMyIHc5OTY4Y2ZfaTJjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyKiBhZGFwKQoreworCXJldHVybiBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEUgfAorCSAgICAgICBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEVfREFUQSAgfAorCSAgICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEE7Cit9CisKKworc3RhdGljIGludCB3OTk2OGNmX2kyY19hdHRhY2hfaW5mb3JtKHN0cnVjdCBpMmNfY2xpZW50KiBjbGllbnQpCit7CisJc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0gPSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7CisJY29uc3QgY2hhciogY2xpZW50bmFtZSA9IGkyY19jbGllbnRuYW1lKGNsaWVudCk7CisJaW50IGlkID0gY2xpZW50LT5kcml2ZXItPmlkLCBlcnIgPSAwOworCisJaWYgKGlkID09IEkyQ19EUklWRVJJRF9PVkNBTUNISVApIHsKKwkJY2FtLT5zZW5zb3JfY2xpZW50ID0gY2xpZW50OworCQllcnIgPSB3OTk2OGNmX3NlbnNvcl9pbml0KGNhbSk7CisJCWlmIChlcnIpIHsKKwkJCWNhbS0+c2Vuc29yX2NsaWVudCA9IE5VTEw7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfSBlbHNlIHsKKwkJREJHKDQsICJSZWplY3RlZCBjbGllbnQgWyVzXSB3aXRoIGRyaXZlciBbJXNdIiwgCisJCSAgICBjbGllbnRuYW1lLCBjbGllbnQtPmRyaXZlci0+bmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJREJHKDUsICJJMkMgYXR0YWNoIGNsaWVudCBbJXNdIHdpdGggZHJpdmVyIFslc10iLAorCSAgICBjbGllbnRuYW1lLCBjbGllbnQtPmRyaXZlci0+bmFtZSkKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgdzk5NjhjZl9pMmNfZGV0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCogY2xpZW50KQoreworCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOworCWNvbnN0IGNoYXIqIGNsaWVudG5hbWUgPSBpMmNfY2xpZW50bmFtZShjbGllbnQpOworCisJaWYgKGNhbS0+c2Vuc29yX2NsaWVudCA9PSBjbGllbnQpCisJCWNhbS0+c2Vuc29yX2NsaWVudCA9IE5VTEw7CisKKwlEQkcoNSwgIkkyQyBkZXRhY2ggY2xpZW50IFslc10iLCBjbGllbnRuYW1lKQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCAKK3c5OTY4Y2ZfaTJjX2NvbnRyb2woc3RydWN0IGkyY19hZGFwdGVyKiBhZGFwdGVyLCB1bnNpZ25lZCBpbnQgY21kLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2luaXQoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCit7CisJaW50IGVyciA9IDA7CisKKwlzdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gYWxnbyA9IHsKKwkJLm5hbWUgPSAgICAgICAgICAiVzk5Nls4N11DRiBhbGdvcml0aG0iLAorCQkuaWQgPSAgICAgICAgICAgIEkyQ19BTEdPX1NNQlVTLAorCQkuc21idXNfeGZlciA9ICAgIHc5OTY4Y2ZfaTJjX3NtYnVzX3hmZXIsCisJCS5hbGdvX2NvbnRyb2wgPSAgdzk5NjhjZl9pMmNfY29udHJvbCwKKwkJLmZ1bmN0aW9uYWxpdHkgPSB3OTk2OGNmX2kyY19mdW5jLAorCX07CisKKwlzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIGFkYXAgPSB7CisJCS5pZCA9ICAgICAgICAgICAgICAgIEkyQ19BTEdPX1NNQlVTIHwgSTJDX0hXX1NNQlVTX1c5OTY4Q0YsCisJCS5jbGFzcyA9ICAgICAgICAgICAgIEkyQ19DTEFTU19DQU1fRElHSVRBTCwKKwkJLm93bmVyID0gICAgICAgICAgICAgVEhJU19NT0RVTEUsCisJCS5jbGllbnRfcmVnaXN0ZXIgPSAgIHc5OTY4Y2ZfaTJjX2F0dGFjaF9pbmZvcm0sCisJCS5jbGllbnRfdW5yZWdpc3RlciA9IHc5OTY4Y2ZfaTJjX2RldGFjaF9pbmZvcm0sCisJCS5hbGdvID0gICAgICAgICAgICAgICZhbGdvLAorCX07CisKKwltZW1jcHkoJmNhbS0+aTJjX2FkYXB0ZXIsICZhZGFwLCBzaXplb2Yoc3RydWN0IGkyY19hZGFwdGVyKSk7CisJc3RyY3B5KGNhbS0+aTJjX2FkYXB0ZXIubmFtZSwgInc5OTY4Y2YiKTsKKwlpMmNfc2V0X2FkYXBkYXRhKCZjYW0tPmkyY19hZGFwdGVyLCBjYW0pOworCisJREJHKDYsICJSZWdpc3RlcmluZyBJMkMgYWRhcHRlciB3aXRoIGtlcm5lbC4uLiIpCisKKwllcnIgPSBpMmNfYWRkX2FkYXB0ZXIoJmNhbS0+aTJjX2FkYXB0ZXIpOworCWlmIChlcnIpCisJCURCRygxLCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHRoZSBJMkMgYWRhcHRlciIpCisJZWxzZQorCQlEQkcoNSwgIkkyQyBhZGFwdGVyIHJlZ2lzdGVyZWQiKQorCisJcmV0dXJuIGVycjsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBIZWxwZXIgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVHVybiBvbiB0aGUgTEVEIG9uIHNvbWUgd2ViY2Ftcy4gQSBiZWVwIHNob3VsZCBiZSBoZWFyZCB0b28uCisgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgbnVtYmVyIG90aGVyd2lzZS4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCB3OTk2OGNmX3R1cm5fb25fbGVkKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCWludCBlcnIgPSAwOworCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHhmZjAwLCAweDAwKTsgLyogcG93ZXItZG93biAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4YmYxNywgMHgwMCk7IC8qIHJlc2V0IGV2ZXJ5dGhpbmcgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweGJmMTAsIDB4MDApOyAvKiBub3JtYWwgb3BlcmF0aW9uICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwMDEwLCAweDAxKTsgLyogc2VyaWFsIGJ1cywgU0RTIGhpZ2ggKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweDAwMDAsIDB4MDEpOyAvKiBzZXJpYWwgYnVzLCBTRFMgbG93ICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwMDEwLCAweDAxKTsgLyogLi5oaWdoICdiZWVwLWJlZXAnICovCisKKwlpZiAoZXJyKQorCQlEQkcoMiwgIkNvdWxkbid0IHR1cm4gb24gdGhlIExFRCIpCisKKwlEQkcoNSwgIkxFRCB0dXJuZWQgb24iKQorCisJcmV0dXJuIGVycjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFdyaXRlIHNvbWUgcmVnaXN0ZXJzIGZvciB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uLgorICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIG9uIG9wZW4oKS4KKyAgUmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHc5OTY4Y2ZfaW5pdF9jaGlwKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCXVuc2lnbmVkIGxvbmcgaHdfYnVmc2l6ZSA9IGNhbS0+bWF4d2lkdGgqY2FtLT5tYXhoZWlnaHQqMiwKKwkgICAgICAgICAgICAgIHkwID0gMHgwMDAwLAorCSAgICAgICAgICAgICAgdTAgPSB5MCArIGh3X2J1ZnNpemUvMiwKKwkgICAgICAgICAgICAgIHYwID0gdTAgKyBod19idWZzaXplLzQsCisJICAgICAgICAgICAgICB5MSA9IHYwICsgaHdfYnVmc2l6ZS80LAorCSAgICAgICAgICAgICAgdTEgPSB5MSArIGh3X2J1ZnNpemUvMiwKKwkgICAgICAgICAgICAgIHYxID0gdTEgKyBod19idWZzaXplLzQ7CisJaW50IGVyciA9IDA7CisKKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweGZmMDAsIDB4MDApOyAvKiBwb3dlciBvZmYgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweGJmMTAsIDB4MDApOyAvKiBwb3dlciBvbiAqLworCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHg0MDVkLCAweDAzKTsgLyogRFJBTSB0aW1pbmdzICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwMDMwLCAweDA0KTsgLyogU0RSQU0gdGltaW5ncyAqLworCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgeTAgJiAweGZmZmYsIDB4MjApOyAvKiBZIGJ1Zi4wLCBsb3cgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB5MCA+PiAxNiwgMHgyMSk7ICAgIC8qIFkgYnVmLjAsIGhpZ2ggKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB1MCAmIDB4ZmZmZiwgMHgyNCk7IC8qIFUgYnVmLjAsIGxvdyAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHUwID4+IDE2LCAweDI1KTsgICAgLyogVSBidWYuMCwgaGlnaCAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHYwICYgMHhmZmZmLCAweDI4KTsgLyogViBidWYuMCwgbG93ICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdjAgPj4gMTYsIDB4MjkpOyAgICAvKiBWIGJ1Zi4wLCBoaWdoICovCisKKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB5MSAmIDB4ZmZmZiwgMHgyMik7IC8qIFkgYnVmLjEsIGxvdyAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHkxID4+IDE2LCAweDIzKTsgICAgLyogWSBidWYuMSwgaGlnaCAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHUxICYgMHhmZmZmLCAweDI2KTsgLyogVSBidWYuMSwgbG93ICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdTEgPj4gMTYsIDB4MjcpOyAgICAvKiBVIGJ1Zi4xLCBoaWdoICovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdjEgJiAweGZmZmYsIDB4MmEpOyAvKiBWIGJ1Zi4xLCBsb3cgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB2MSA+PiAxNiwgMHgyYik7ICAgIC8qIFYgYnVmLjEsIGhpZ2ggKi8KKworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHkxICYgMHhmZmZmLCAweDMyKTsgLyogSlBFRyBidWYgMCBsb3cgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCB5MSA+PiAxNiwgMHgzMyk7ICAgIC8qIEpQRUcgYnVmIDAgaGlnaCAqLworCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgeTEgJiAweGZmZmYsIDB4MzQpOyAvKiBKUEVHIGJ1ZiAxIGxvdyAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHkxID4+IDE2LCAweDM1KTsgICAgLyogSlBFRyBidWcgMSBoaWdoICovCisKKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweDAwMDAsIDB4MzYpOy8qIEpQRUcgcmVzdGFydCBpbnRlcnZhbCAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIDB4MDgwNCwgMHgzNyk7LypKUEVHIFZMRSBGSUZPIHRocmVzaG9sZCovCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgMHgwMDAwLCAweDM4KTsvKiBkaXNhYmxlIGh3IHVwLXNjYWxpbmcgKi8KKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCAweDAwMDAsIDB4M2YpOyAvKiBKUEVHL01DVEwgdGVzdCBkYXRhICovCisKKwllcnIgKz0gdzk5NjhjZl9zZXRfcGljdHVyZShjYW0sIGNhbS0+cGljdHVyZSk7IC8qIHRoaXMgYmVmb3JlICovCisJZXJyICs9IHc5OTY4Y2Zfc2V0X3dpbmRvdyhjYW0sIGNhbS0+d2luZG93KTsKKworCWlmIChlcnIpCisJCURCRygxLCAiQ2hpcCBpbml0aWFsaXphdGlvbiBmYWlsZWQiKQorCWVsc2UKKwkJREJHKDUsICJDaGlwIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCIpCisKKwlyZXR1cm4gZXJyOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBwYWxldHRlIGlzIHN1cHBvcnRlZCwgMCBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbmxpbmUgdTE2IHc5OTY4Y2ZfdmFsaWRfcGFsZXR0ZSh1MTYgcGFsZXR0ZSkKK3sKKwl1OCBpID0gMDsKKwl3aGlsZSAodzk5NjhjZl9mb3JtYXRsaXN0W2ldLnBhbGV0dGUgIT0gMCkgeworCQlpZiAocGFsZXR0ZSA9PSB3OTk2OGNmX2Zvcm1hdGxpc3RbaV0ucGFsZXR0ZSkKKwkJCXJldHVybiBwYWxldHRlOworCQlpKys7CisJfQorCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgUmV0dXJuIHRoZSBkZXB0aCBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBwYWxldHRlLgorICBQYWxldHRlIF9tdXN0XyBiZSBzdXBwb3J0ZWQgIQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW5saW5lIHUxNiB3OTk2OGNmX3ZhbGlkX2RlcHRoKHUxNiBwYWxldHRlKQoreworCXU4IGk9MDsKKwl3aGlsZSAodzk5NjhjZl9mb3JtYXRsaXN0W2ldLnBhbGV0dGUgIT0gcGFsZXR0ZSkKKwkJaSsrOworCisJcmV0dXJuIHc5OTY4Y2ZfZm9ybWF0bGlzdFtpXS5kZXB0aDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFJldHVybiBub24temVybyBpZiB0aGUgZm9ybWF0IHJlcXVpcmVzIGRlY29tcHJlc3Npb24sIDAgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW5saW5lIHU4IHc5OTY4Y2ZfbmVlZF9kZWNvbXByZXNzaW9uKHUxNiBwYWxldHRlKQoreworCXU4IGkgPSAwOworCXdoaWxlICh3OTk2OGNmX2Zvcm1hdGxpc3RbaV0ucGFsZXR0ZSAhPSAwKSB7CisJCWlmIChwYWxldHRlID09IHc5OTY4Y2ZfZm9ybWF0bGlzdFtpXS5wYWxldHRlKQorCQkJcmV0dXJuIHc5OTY4Y2ZfZm9ybWF0bGlzdFtpXS5jb21wcmVzc2lvbjsKKwkJaSsrOworCX0KKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIENoYW5nZSB0aGUgcGljdHVyZSBzZXR0aW5ncyBvZiB0aGUgY2FtZXJhLgorICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK3c5OTY4Y2Zfc2V0X3BpY3R1cmUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIHN0cnVjdCB2aWRlb19waWN0dXJlIHBpY3QpCit7CisJdTE2IGZtdCwgaHdfZGVwdGgsIGh3X3BhbGV0dGUsIHJlZ192ID0gMHgwMDAwOworCWludCBlcnIgPSAwOworCisJLyogTWFrZSBzdXJlIHdlIGFyZSB1c2luZyBhIHZhbGlkIGRlcHRoICovCisJcGljdC5kZXB0aCA9IHc5OTY4Y2ZfdmFsaWRfZGVwdGgocGljdC5wYWxldHRlKTsKKworCWZtdCA9IHBpY3QucGFsZXR0ZTsKKworCWh3X2RlcHRoID0gcGljdC5kZXB0aDsgLyogZGVwdGggdXNlZCBieSB0aGUgd2luYm9uZCBjaGlwICovCisJaHdfcGFsZXR0ZSA9IHBpY3QucGFsZXR0ZTsgLyogcGFsZXR0ZSB1c2VkIGJ5IHRoZSB3aW5ib25kIGNoaXAgKi8KKworCS8qIFZTICYgSFMgcG9sYXJpdGllcyAqLworCXJlZ192ID0gKGNhbS0+dnNfcG9sYXJpdHkgPDwgMTIpIHwgKGNhbS0+aHNfcG9sYXJpdHkgPDwgMTEpOworCisJc3dpdGNoIChmbXQpCisJeworCQljYXNlIFZJREVPX1BBTEVUVEVfVVlWWToKKwkJCXJlZ192IHw9IDB4MDAwMDsKKwkJCWNhbS0+dnBwX2ZsYWcgPSBWUFBfTk9ORTsKKwkJCWJyZWFrOworCQljYXNlIFZJREVPX1BBTEVUVEVfWVVWNDIyUDoKKwkJCXJlZ192IHw9IDB4MDAwMjsKKwkJCWNhbS0+dnBwX2ZsYWcgPSBWUFBfREVDT01QUkVTU0lPTjsKKwkJCWJyZWFrOworCQljYXNlIFZJREVPX1BBTEVUVEVfWVVWNDIwOgorCQljYXNlIFZJREVPX1BBTEVUVEVfWVVWNDIwUDoKKwkJCXJlZ192IHw9IDB4MDAwMzsKKwkJCWNhbS0+dnBwX2ZsYWcgPSBWUFBfREVDT01QUkVTU0lPTjsKKwkJCWJyZWFrOworCQljYXNlIFZJREVPX1BBTEVUVEVfWVVZVjoKKwkJY2FzZSBWSURFT19QQUxFVFRFX1lVVjQyMjoKKwkJCXJlZ192IHw9IDB4MDAwMDsKKwkJCWNhbS0+dnBwX2ZsYWcgPSBWUFBfU1dBUF9ZVVZfQllURVM7CisJCQlod19wYWxldHRlID0gVklERU9fUEFMRVRURV9VWVZZOworCQkJYnJlYWs7CisJCS8qIE9yaWdpbmFsIHZpZGVvIGlzIHVzZWQgaW5zdGVhZCBvZiBSR0JYIHBhbGV0dGVzLiAKKwkJICAgU29mdHdhcmUgY29udmVyc2lvbiBsYXRlci4gKi8KKwkJY2FzZSBWSURFT19QQUxFVFRFX0dSRVk6CisJCWNhc2UgVklERU9fUEFMRVRURV9SR0I1NTU6CisJCWNhc2UgVklERU9fUEFMRVRURV9SR0I1NjU6CisJCWNhc2UgVklERU9fUEFMRVRURV9SR0IyNDoKKwkJY2FzZSBWSURFT19QQUxFVFRFX1JHQjMyOgorCQkJcmVnX3YgfD0gMHgwMDAwOyAvKiBVWVZZIDE2IGJpdCBpcyB1c2VkICovCisJCQlod19kZXB0aCA9IDE2OworCQkJaHdfcGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfVVlWWTsKKwkJCWNhbS0+dnBwX2ZsYWcgPSBWUFBfVVlWWV9UT19SR0JYOworCQkJYnJlYWs7CisJfQorCisJLyogTk9URTogZHVlIHRvIG1lbW9yeSBpc3N1ZXMsIGl0IGlzIGJldHRlciB0byBkaXNhYmxlIHRoZSBoYXJkd2FyZQorCSAgICAgICAgIGRvdWJsZSBidWZmZXJpbmcgZHVyaW5nIGNvbXByZXNzaW9uICovCisJaWYgKGNhbS0+ZG91YmxlX2J1ZmZlciAmJiAhKGNhbS0+dnBwX2ZsYWcgJiBWUFBfREVDT01QUkVTU0lPTikpCisJCXJlZ192IHw9IDB4MDA4MDsKKworCWlmIChjYW0tPmNsYW1waW5nKQorCQlyZWdfdiB8PSAweDAwMjA7CisKKwlpZiAoY2FtLT5maWx0ZXJfdHlwZSA9PSAxKQorCQlyZWdfdiB8PSAweDAwMDg7CisJZWxzZSBpZiAoY2FtLT5maWx0ZXJfdHlwZSA9PSAyKQorCQlyZWdfdiB8PSAweDAwMGM7CisKKwlpZiAoKGVyciA9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgcmVnX3YsIDB4MTYpKSkKKwkJZ290byBlcnJvcjsKKworCWlmICgoZXJyID0gdzk5NjhjZl9zZW5zb3JfdXBkYXRlX3BpY3R1cmUoY2FtLCBwaWN0KSkpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBJZiBhbGwgd2VudCB3ZWxsLCB1cGRhdGUgdGhlIGRldmljZSBkYXRhIHN0cnVjdHVyZSAqLworCW1lbWNweSgmY2FtLT5waWN0dXJlLCAmcGljdCwgc2l6ZW9mKHBpY3QpKTsKKwljYW0tPmh3X2RlcHRoID0gaHdfZGVwdGg7CisJY2FtLT5od19wYWxldHRlID0gaHdfcGFsZXR0ZTsKKworCS8qIFNldHRpbmdzIGNoYW5nZWQsIHNvIHdlIGNsZWFyIHRoZSBmcmFtZSBidWZmZXJzICovCisJbWVtc2V0KGNhbS0+ZnJhbWVbMF0uYnVmZmVyLCAwLCBjYW0tPm5idWZmZXJzKmNhbS0+ZnJhbWVbMF0uc2l6ZSk7CisKKwlEQkcoNCwgIlBhbGV0dGUgaXMgJXMsIGRlcHRoIGlzICV1IGJwcCIsCisJICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIHBpY3QucGFsZXR0ZSksIHBpY3QuZGVwdGgpCisKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJREJHKDEsICJGYWlsZWQgdG8gY2hhbmdlIHBpY3R1cmUgc2V0dGluZ3MiKQorCXJldHVybiBlcnI7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBDaGFuZ2UgdGhlIGNhcHR1cmUgYXJlYSBzaXplIG9mIHRoZSBjYW1lcmEuCisgIFRoaXMgZnVuY3Rpb24gX211c3RfIGJlIGNhbGxlZCBfYWZ0ZXJfIHc5OTY4Y2Zfc2V0X3BpY3R1cmUoKS4KKyAgUmV0dXJuIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50Cit3OTk2OGNmX3NldF93aW5kb3coc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIHN0cnVjdCB2aWRlb193aW5kb3cgd2luKQoreworCXUxNiB4LCB5LCB3LCBoLCBzY3gsIHNjeSwgY3csIGNoLCBheCwgYXk7CisJdW5zaWduZWQgbG9uZyBmdywgZmg7CisJc3RydWN0IG92Y2FtY2hpcF93aW5kb3cgc193aW47CisJaW50IGVyciA9IDA7CisKKwkvKiBXb3JrIGFyb3VuZCB0byBhdm9pZCBGUCBhcml0aG1ldGljcyAqLworCSNkZWZpbmUgX19TQyh4KSAoKHgpIDw8IDEwKQorCSNkZWZpbmUgX19VTlNDKHgpICgoeCkgPj4gMTApCisKKwkvKiBNYWtlIHN1cmUgd2UgYXJlIHVzaW5nIGEgc3VwcG9ydGVkIHJlc29sdXRpb24gKi8KKwlpZiAoKGVyciA9IHc5OTY4Y2ZfYWRqdXN0X3dpbmRvd19zaXplKGNhbSwgKHUxNiopJndpbi53aWR0aCwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTE2Kikmd2luLmhlaWdodCkpKQorCQlnb3RvIGVycm9yOworCisJLyogU2NhbGluZyBmYWN0b3JzICovCisJZncgPSBfX1NDKHdpbi53aWR0aCkgLyBjYW0tPm1heHdpZHRoOworCWZoID0gX19TQyh3aW4uaGVpZ2h0KSAvIGNhbS0+bWF4aGVpZ2h0OworCisJLyogU2V0IHVwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyB1c2VkIGJ5IHRoZSBjaGlwICovCisJaWYgKCh3aW4ud2lkdGggPiBjYW0tPm1heHdpZHRoKSB8fCAod2luLmhlaWdodCA+IGNhbS0+bWF4aGVpZ2h0KSkgeworCQljYW0tPnZwcF9mbGFnIHw9IFZQUF9VUFNDQUxFOworCQkvKiBDYWxjdWxhdGUgbGFyZ2VzdCB3LGggbWFudGFpbmluZyB0aGUgc2FtZSB3L2ggcmF0aW8gKi8KKwkJdyA9IChmdyA+PSBmaCkgPyBjYW0tPm1heHdpZHRoIDogX19TQyh3aW4ud2lkdGgpL2ZoOworCQloID0gKGZ3ID49IGZoKSA/IF9fU0Mod2luLmhlaWdodCkvZncgOiBjYW0tPm1heGhlaWdodDsKKwkJaWYgKHcgPCBjYW0tPm1pbndpZHRoKSAvKiBqdXN0IGluIGNhc2UgKi8KKwkJCXcgPSBjYW0tPm1pbndpZHRoOworCQlpZiAoaCA8IGNhbS0+bWluaGVpZ2h0KSAvKiBqdXN0IGluIGNhc2UgKi8KKwkJCWggPSBjYW0tPm1pbmhlaWdodDsKKwl9IGVsc2UgeworCQljYW0tPnZwcF9mbGFnICY9IH5WUFBfVVBTQ0FMRTsKKwkJdyA9IHdpbi53aWR0aDsKKwkJaCA9IHdpbi5oZWlnaHQ7CisJfQorCisJLyogeCx5IG9mZnNldHMgb2YgdGhlIGNyb3BwZWQgYXJlYSAqLworCXNjeCA9IGNhbS0+c3RhcnRfY3JvcHg7CisJc2N5ID0gY2FtLT5zdGFydF9jcm9weTsKKworCS8qIENhbGN1bGF0ZSBjcm9wcGVkIGFyZWEgbWFudGVpbmluZyB0aGUgcmlnaHQgdy9oIHJhdGlvICovCisJaWYgKGNhbS0+bGFyZ2V2aWV3ICYmICEoY2FtLT52cHBfZmxhZyAmIFZQUF9VUFNDQUxFKSkgeworCQljdyA9IChmdyA+PSBmaCkgPyBjYW0tPm1heHdpZHRoIDogX19TQyh3aW4ud2lkdGgpL2ZoOworCQljaCA9IChmdyA+PSBmaCkgPyBfX1NDKHdpbi5oZWlnaHQpL2Z3IDogY2FtLT5tYXhoZWlnaHQ7CisJfSBlbHNlIHsKKwkJY3cgPSB3OworCQljaCA9IGg7CisJfQorCisJLyogU2V0dXAgdGhlIHdpbmRvdyBvZiB0aGUgc2Vuc29yICovCisJc193aW4uZm9ybWF0ID0gVklERU9fUEFMRVRURV9VWVZZOworCXNfd2luLndpZHRoID0gY2FtLT5tYXh3aWR0aDsKKwlzX3dpbi5oZWlnaHQgPSBjYW0tPm1heGhlaWdodDsKKwlzX3dpbi5xdWFydGVyID0gMDsgLyogZnVsbCBwcm9ncmVzc2l2ZSB2aWRlbyAqLworCisJLyogQ2VudGVyIGl0ICovCisJc193aW4ueCA9IChzX3dpbi53aWR0aCAtIGN3KSAvIDI7CisJc193aW4ueSA9IChzX3dpbi5oZWlnaHQgLSBjaCkgLyAyOworCisJLyogQ2xvY2sgZGl2aXNvciAqLworCWlmIChjYW0tPmNsb2NrZGl2ID49IDApCisJCXNfd2luLmNsb2NrZGl2ID0gY2FtLT5jbG9ja2RpdjsgLyogbWFudWFsIG92ZXJyaWRlICovCisJZWxzZQorCQlzd2l0Y2ggKGNhbS0+c2Vuc29yKSB7CisJCQljYXNlIENDX09WNjYyMDoKKwkJCQlzX3dpbi5jbG9ja2RpdiA9IDA7CisJCQkJYnJlYWs7CisJCQljYXNlIENDX09WNjYzMDoKKwkJCQlzX3dpbi5jbG9ja2RpdiA9IDA7CisJCQkJYnJlYWs7CisJCQljYXNlIENDX09WNzZCRToKKwkJCWNhc2UgQ0NfT1Y3NjEwOgorCQkJY2FzZSBDQ19PVjc2MjA6CisJCQkJc193aW4uY2xvY2tkaXYgPSAwOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzX3dpbi5jbG9ja2RpdiA9IFc5OTY4Q0ZfREVGX0NMT0NLRElWSVNPUjsKKwkJfQorCisJLyogV2UgaGF2ZSB0byBzY2FsZSB3aW4ueCBhbmQgd2luLnkgb2Zmc2V0cyAqLworCWlmICggKGNhbS0+bGFyZ2V2aWV3ICYmICEoY2FtLT52cHBfZmxhZyAmIFZQUF9VUFNDQUxFKSkKKwkgICAgIHx8IChjYW0tPnZwcF9mbGFnICYgVlBQX1VQU0NBTEUpICkgeworCQlheCA9IF9fU0Mod2luLngpL2Z3OworCQlheSA9IF9fU0Mod2luLnkpL2ZoOworCX0gZWxzZSB7CisJCWF4ID0gd2luLng7CisJCWF5ID0gd2luLnk7CisJfQorCisJaWYgKChheCArIGN3KSA+IGNhbS0+bWF4d2lkdGgpCisJCWF4ID0gY2FtLT5tYXh3aWR0aCAtIGN3OworCisJaWYgKChheSArIGNoKSA+IGNhbS0+bWF4aGVpZ2h0KQorCQlheSA9IGNhbS0+bWF4aGVpZ2h0IC0gY2g7CisKKwkvKiBBZGp1c3Qgd2luLngsIHdpbi55ICovCisJaWYgKCAoY2FtLT5sYXJnZXZpZXcgJiYgIShjYW0tPnZwcF9mbGFnICYgVlBQX1VQU0NBTEUpKQorCSAgICAgfHwgKGNhbS0+dnBwX2ZsYWcgJiBWUFBfVVBTQ0FMRSkgKSB7CisJCXdpbi54ID0gX19VTlNDKGF4KmZ3KTsKKwkJd2luLnkgPSBfX1VOU0MoYXkqZmgpOworCX0gZWxzZSB7CisJCXdpbi54ID0gYXg7CisJCXdpbi55ID0gYXk7CisJfQorCisJLyogT2Zmc2V0cyB1c2VkIGJ5IHRoZSBjaGlwICovCisJeCA9IGF4ICsgc193aW4ueDsKKwl5ID0gYXkgKyBzX3dpbi55OworCisJLyogR28gISAqLworCWlmICgoZXJyID0gdzk5NjhjZl9zZW5zb3JfY21kKGNhbSwgT1ZDQU1DSElQX0NNRF9TX01PREUsICZzX3dpbikpKQorCQlnb3RvIGVycm9yOworCisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgc2N4ICsgeCwgMHgxMCk7CisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgc2N5ICsgeSwgMHgxMSk7CisJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgc2N4ICsgeCArIGN3LCAweDEyKTsKKwllcnIgKz0gdzk5NjhjZl93cml0ZV9yZWcoY2FtLCBzY3kgKyB5ICsgY2gsIDB4MTMpOworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHcsIDB4MTQpOworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIGgsIDB4MTUpOworCisJLyogSlBFRyB3aWR0aCAmIGhlaWdodCAqLworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIHcsIDB4MzApOworCWVyciArPSB3OTk2OGNmX3dyaXRlX3JlZyhjYW0sIGgsIDB4MzEpOworCisJLyogWSAmIFVWIGZyYW1lIGJ1ZmZlciBzdHJpZGVzIChpbiBXT1JEKSAqLworCWlmIChjYW0tPnZwcF9mbGFnICYgVlBQX0RFQ09NUFJFU1NJT04pIHsKKwkJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdy8yLCAweDJjKTsKKwkJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdy80LCAweDJkKTsKKwl9IGVsc2UKKwkJZXJyICs9IHc5OTY4Y2Zfd3JpdGVfcmVnKGNhbSwgdywgMHgyYyk7CisKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCisJLyogSWYgYWxsIHdlbnQgd2VsbCwgdXBkYXRlIHRoZSBkZXZpY2UgZGF0YSBzdHJ1Y3R1cmUgKi8KKwltZW1jcHkoJmNhbS0+d2luZG93LCAmd2luLCBzaXplb2Yod2luKSk7CisJY2FtLT5od193aWR0aCA9IHc7CisJY2FtLT5od19oZWlnaHQgPSBoOworCisJLyogU2V0dGluZ3MgY2hhbmdlZCwgc28gd2UgY2xlYXIgdGhlIGZyYW1lIGJ1ZmZlcnMgKi8KKwltZW1zZXQoY2FtLT5mcmFtZVswXS5idWZmZXIsIDAsIGNhbS0+bmJ1ZmZlcnMqY2FtLT5mcmFtZVswXS5zaXplKTsKKworCURCRyg0LCAiVGhlIGNhcHR1cmUgYXJlYSBpcyAlZHglZCwgT2Zmc2V0ICh4LHkpPSgldSwldSkiLCAKKwkgICAgd2luLndpZHRoLCB3aW4uaGVpZ2h0LCB3aW4ueCwgd2luLnkpCisKKwlQREJHRygieD0ldSAseT0ldSwgdz0ldSwgaD0ldSwgYXg9JXUsIGF5PSV1LCBzX3dpbi54PSV1LCBzX3dpbi55PSV1LCAiCisJICAgICAgImN3PSV1LCBjaD0ldSwgd2luLng9JXUsIHdpbi55PSV1LCB3aW4ud2lkdGg9JXUsIHdpbi5oZWlnaHQ9JXUiLAorCSAgICAgIHgsIHksIHcsIGgsIGF4LCBheSwgc193aW4ueCwgc193aW4ueSwgY3csIGNoLCB3aW4ueCwgd2luLnksCisJICAgICAgd2luLndpZHRoLCB3aW4uaGVpZ2h0KQorCisJcmV0dXJuIDA7CisKK2Vycm9yOgorCURCRygxLCAiRmFpbGVkIHRvIGNoYW5nZSB0aGUgY2FwdHVyZSBhcmVhIHNpemUiKQorCXJldHVybiBlcnI7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKyAgQWRqdXN0IHRoZSBhc2tlZCB2YWx1ZXMgZm9yIHdpbmRvdyB3aWR0aCBhbmQgaGVpZ2h0LgorICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgCit3OTk2OGNmX2FkanVzdF93aW5kb3dfc2l6ZShzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgdTE2KiB3aWR0aCwgdTE2KiBoZWlnaHQpCit7CisJdTE2IG1heHcsIG1heGg7CisKKwlpZiAoKCp3aWR0aCA8IGNhbS0+bWlud2lkdGgpIHx8ICgqaGVpZ2h0IDwgY2FtLT5taW5oZWlnaHQpKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCW1heHcgPSBjYW0tPnVwc2NhbGluZyAmJiAhKGNhbS0+dnBwX2ZsYWcgJiBWUFBfREVDT01QUkVTU0lPTikgJiYKKwkgICAgICAgdzk5NjhjZl92cHAgPyBtYXgoKHUxNilXOTk2OENGX01BWF9XSURUSCwgY2FtLT5tYXh3aWR0aCkKKwkgICAgICAgICAgICAgICAgICAgOiBjYW0tPm1heHdpZHRoOworCW1heGggPSBjYW0tPnVwc2NhbGluZyAmJiAhKGNhbS0+dnBwX2ZsYWcgJiBWUFBfREVDT01QUkVTU0lPTikgJiYKKwkgICAgICAgdzk5NjhjZl92cHAgPyBtYXgoKHUxNilXOTk2OENGX01BWF9IRUlHSFQsIGNhbS0+bWF4aGVpZ2h0KQorCSAgICAgICAgICAgICAgICAgICA6IGNhbS0+bWF4aGVpZ2h0OworCisJaWYgKCp3aWR0aCA+IG1heHcpCisJCSp3aWR0aCA9IG1heHc7CisJaWYgKCpoZWlnaHQgPiBtYXhoKQorCQkqaGVpZ2h0ID0gbWF4aDsKKworCWlmIChjYW0tPnZwcF9mbGFnICYgVlBQX0RFQ09NUFJFU1NJT04pIHsKKwkJKndpZHRoICAmPSB+MTVMOyAvKiBtdWx0aXBsZSBvZiAxNiAqLworCQkqaGVpZ2h0ICY9IH4xNUw7CisJfQorCisJUERCR0coIldpbmRvdyBzaXplIGFkanVzdGVkIHc9JXUsIGg9JXUgIiwgKndpZHRoLCAqaGVpZ2h0KQorCisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBJbml0aWFsaXplIHRoZSBGSUZPIGxpc3Qgb2YgcmVxdWVzdGVkIGZyYW1lcy4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgdzk5NjhjZl9pbml0X2ZyYW1lbGlzdChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwl1OCBpOworCisJZm9yIChpID0gMDsgaSA8IGNhbS0+bmJ1ZmZlcnM7IGkrKykgeworCQljYW0tPnJlcXVlc3RlZF9mcmFtZVtpXSA9IE5VTEw7CisJCWNhbS0+ZnJhbWVbaV0ucXVldWVkID0gMDsKKwkJY2FtLT5mcmFtZVtpXS5zdGF0dXMgPSBGX1VOVVNFRDsKKwl9Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBBZGQgYSBmcmFtZSBpbiB0aGUgRklGTyBsaXN0IG9mIHJlcXVlc3RlZCBmcmFtZXMuCisgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIHByb2Nlc3MgY29udGV4dC4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgdzk5NjhjZl9wdXNoX2ZyYW1lKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCB1OCBmX251bSkKK3sKKwl1OCBmOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYW0tPmZsaXN0X2xvY2ssIGxvY2tfZmxhZ3MpOworCisJZm9yIChmPTA7IGNhbS0+cmVxdWVzdGVkX2ZyYW1lW2ZdICE9IE5VTEw7IGYrKyk7CisJY2FtLT5yZXF1ZXN0ZWRfZnJhbWVbZl0gPSAmY2FtLT5mcmFtZVtmX251bV07CisJY2FtLT5mcmFtZVtmX251bV0ucXVldWVkID0gMTsKKwljYW0tPmZyYW1lW2ZfbnVtXS5zdGF0dXMgPSBGX1VOVVNFRDsgLyogY2xlYXIgdGhlIHN0YXR1cyAqLworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5mbGlzdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKworCURCRyg2LCAiRnJhbWUgIyV1IHB1c2hlZCBpbnRvIHRoZSBGSUZPIGxpc3QuIFBvc2l0aW9uICV1IiwgZl9udW0sIGYpCit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBSZWFkLCBzdG9yZSBhbmQgcmVtb3ZlIHRoZSBmaXJzdCBwb2ludGVyIGluIHRoZSBGSUZPIGxpc3Qgb2YgcmVxdWVzdGVkCisgIGZyYW1lcy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIAordzk5NjhjZl9wb3BfZnJhbWUoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIHN0cnVjdCB3OTk2OGNmX2ZyYW1lX3QqKiBmcmFtZXApCit7CisJdTggaTsKKworCXNwaW5fbG9jaygmY2FtLT5mbGlzdF9sb2NrKTsKKworCSpmcmFtZXAgPSBjYW0tPnJlcXVlc3RlZF9mcmFtZVswXTsKKworCS8qIFNoaWZ0IHRoZSBsaXN0IG9mIHBvaW50ZXJzICovCisJZm9yIChpID0gMDsgaSA8IGNhbS0+bmJ1ZmZlcnMtMTsgaSsrKQorCQljYW0tPnJlcXVlc3RlZF9mcmFtZVtpXSA9IGNhbS0+cmVxdWVzdGVkX2ZyYW1lW2krMV07CisJY2FtLT5yZXF1ZXN0ZWRfZnJhbWVbaV0gPSBOVUxMOworCisJc3Bpbl91bmxvY2soJmNhbS0+Zmxpc3RfbG9jayk7CisKKwlEQkcoNiwiUG9wcGVkIGZyYW1lICMlZCBmcm9tIHRoZSBsaXN0IiwgKCpmcmFtZXApLT5udW1iZXIpCit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBIaWdoLWxldmVsIHZpZGVvIHBvc3QtcHJvY2Vzc2luZyByb3V0aW5lIG9uIGdyYWJiZWQgZnJhbWVzLgorICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgCit3OTk2OGNmX3Bvc3Rwcm9jZXNzX2ZyYW1lKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCogZnIpCit7CisJdm9pZCAqcEluID0gZnItPmJ1ZmZlciwgKnBPdXQgPSBjYW0tPmZyYW1lX3ZwcC5idWZmZXIsICp0bXA7CisJdTE2IHcgPSBjYW0tPndpbmRvdy53aWR0aCwKKwkgICAgaCA9IGNhbS0+d2luZG93LmhlaWdodCwKKwkgICAgZCA9IGNhbS0+cGljdHVyZS5kZXB0aCwKKwkgICAgZm10ID0gY2FtLT5waWN0dXJlLnBhbGV0dGUsCisJICAgIHJnYiA9IGNhbS0+Zm9yY2VfcmdiLAorCSAgICBod193ID0gY2FtLT5od193aWR0aCwKKwkgICAgaHdfaCA9IGNhbS0+aHdfaGVpZ2h0LAorCSAgICBod19kID0gY2FtLT5od19kZXB0aDsKKwlpbnQgZXJyID0gMDsKKworCSNkZWZpbmUgX1BTV0FQKHBJbiwgcE91dCkge3RtcCA9IChwSW4pOyAocEluKSA9IChwT3V0KTsgKHBPdXQpID0gdG1wO30KKworCWlmIChjYW0tPnZwcF9mbGFnICYgVlBQX0RFQ09NUFJFU1NJT04pIHsKKwkJbWVtY3B5KHBPdXQsIHBJbiwgZnItPmxlbmd0aCk7CisJCV9QU1dBUChwSW4sIHBPdXQpCisJCWVyciA9IHc5OTY4Y2ZfdnBwLT5kZWNvZGUocEluLCBmci0+bGVuZ3RoLCBod193LCBod19oLCBwT3V0KTsKKwkJUERCR0coIkNvbXByZXNzZWQgZnJhbWUgbGVuZ3RoOiAlbHUiLCh1bnNpZ25lZCBsb25nKWZyLT5sZW5ndGgpCisJCWZyLT5sZW5ndGggPSAoaHdfdypod19oKmh3X2QpLzg7CisJCV9QU1dBUChwSW4sIHBPdXQpCisJCWlmIChlcnIpIHsKKwkJCURCRyg0LCAiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZGVjb2RpbmcgdGhlIGZyYW1lOiAiCisJCQkgICAgICAgIiVzIiwgc3ltYm9saWMoZGVjb2Rlcl9lcnJsaXN0LCBlcnIpKQorCQkJcmV0dXJuIGVycjsKKwkJfSBlbHNlCisJCQlEQkcoNiwgIkZyYW1lIGRlY29kZWQiKQorCX0KKworCWlmIChjYW0tPnZwcF9mbGFnICYgVlBQX1NXQVBfWVVWX0JZVEVTKSB7CisJCXc5OTY4Y2ZfdnBwLT5zd2FwX3l1dmJ5dGVzKHBJbiwgZnItPmxlbmd0aCk7CisJCURCRyg2LCAiT3JpZ2luYWwgVVlWWSBjb21wb25lbnQgb3JkZXJpbmcgY2hhbmdlZCIpCisJfQorCisJaWYgKGNhbS0+dnBwX2ZsYWcgJiBWUFBfVVBTQ0FMRSkgeworCQl3OTk2OGNmX3ZwcC0+c2NhbGVfdXAocEluLCBwT3V0LCBod193LCBod19oLCBod19kLCB3LCBoKTsKKwkJZnItPmxlbmd0aCA9ICh3KmgqaHdfZCkvODsKKwkJX1BTV0FQKHBJbiwgcE91dCkKKwkJREJHKDYsICJWZXJ0aWNhbCB1cC1zY2FsaW5nIGRvbmU6ICV1LCV1LCV1YnBwLT4ldSwldSIsCisJCSAgICBod193LCBod19oLCBod19kLCB3LCBoKQorCX0KKworCWlmIChjYW0tPnZwcF9mbGFnICYgVlBQX1VZVllfVE9fUkdCWCkgeworCQl3OTk2OGNmX3ZwcC0+dXl2eV90b19yZ2J4KHBJbiwgZnItPmxlbmd0aCwgcE91dCwgZm10LCByZ2IpOworCQlmci0+bGVuZ3RoID0gKHcqaCpkKS84OworCQlfUFNXQVAocEluLCBwT3V0KQorCQlEQkcoNiwgIlVZVlktMTZiaXQgdG8gJXMgY29udmVyc2lvbiBkb25lIiwgCisJCSAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBmbXQpKQorCX0KKworCWlmIChwT3V0ID09IGZyLT5idWZmZXIpCisJCW1lbWNweShmci0+YnVmZmVyLCBjYW0tPmZyYW1lX3ZwcC5idWZmZXIsIGZyLT5sZW5ndGgpOworCisJcmV0dXJuIDA7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW1hZ2Ugc2Vuc29yIGNvbnRyb2wgcm91dGluZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IAordzk5NjhjZl9zZW5zb3Jfc2V0X2NvbnRyb2woc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIGludCBjaWQsIGludCB2YWwpCit7CisJc3RydWN0IG92Y2FtY2hpcF9jb250cm9sIGN0bDsKKwlpbnQgZXJyOworCisJY3RsLmlkID0gY2lkOworCWN0bC52YWx1ZSA9IHZhbDsKKworCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX2NtZChjYW0sIE9WQ0FNQ0hJUF9DTURfU19DVFJMLCAmY3RsKTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCAKK3c5OTY4Y2Zfc2Vuc29yX2dldF9jb250cm9sKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCBpbnQgY2lkLCBpbnQqIHZhbCkKK3sKKwlzdHJ1Y3Qgb3ZjYW1jaGlwX2NvbnRyb2wgY3RsOworCWludCBlcnI7CisKKwljdGwuaWQgPSBjaWQ7CisKKwllcnIgPSB3OTk2OGNmX3NlbnNvcl9jbWQoY2FtLCBPVkNBTUNISVBfQ01EX0dfQ1RSTCwgJmN0bCk7CisJaWYgKCFlcnIpCisJCSp2YWwgPSBjdGwudmFsdWU7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBpbnQKK3c5OTY4Y2Zfc2Vuc29yX2NtZChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCogYXJnKQoreworCXN0cnVjdCBpMmNfY2xpZW50KiBjID0gY2FtLT5zZW5zb3JfY2xpZW50OworCWludCByYyA9IDA7CisKKwlpZiAoIWMgfHwgIWMtPmRyaXZlciB8fCAhYy0+ZHJpdmVyLT5jb21tYW5kKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJjID0gYy0+ZHJpdmVyLT5jb21tYW5kKGMsIGNtZCwgYXJnKTsKKwkvKiBUaGUgSTJDIGRyaXZlciByZXR1cm5zIC1FUEVSTSBvbiBub24tc3VwcG9ydGVkIGNvbnRyb2xzICovCisJcmV0dXJuIChyYyA8IDAgJiYgcmMgIT0gLUVQRVJNKSA/IHJjIDogMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFVwZGF0ZSBzb21lIHNldHRpbmdzIG9mIHRoZSBpbWFnZSBzZW5zb3IuCisgIFJldHVybnM6IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHc5OTY4Y2Zfc2Vuc29yX3VwZGF0ZV9zZXR0aW5ncyhzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCS8qIEF1dG8gYnJpZ2h0bmVzcyAqLworCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9BVVRPQlJJR0hULCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW0tPmF1dG9fYnJ0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogQXV0byBleHBvc3VyZSAqLworCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9BVVRPRVhQLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW0tPmF1dG9fZXhwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogQmFuZGluZyBmaWx0ZXIgKi8KKwllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfQkFOREZJTFQsIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbS0+YmFuZGZpbHQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBMaWdodCBmcmVxdWVuY3kgKi8KKwllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfRlJFUSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW0tPmxpZ2h0ZnJlcSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIEJhY2sgbGlnaHQgKi8KKwllcnIgPSB3OTk2OGNmX3NlbnNvcl9zZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfQkFDS0xJR0hULAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbS0+YmFja2xpZ2h0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogTWlycm9yICovCisJZXJyID0gdzk5NjhjZl9zZW5zb3Jfc2V0X2NvbnRyb2woY2FtLCBPVkNBTUNISVBfQ0lEX01JUlJPUiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW0tPm1pcnJvcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgR2V0IHNvbWUgY3VycmVudCBwaWN0dXJlIHNldHRpbmdzIGZyb20gdGhlIGltYWdlIHNlbnNvciBhbmQgdXBkYXRlIHRoZQorICBpbnRlcm5hbCAncGljdHVyZScgc3RydWN0dXJlIG9mIHRoZSBjYW1lcmEuCisgIFJldHVybnM6IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IHc5OTY4Y2Zfc2Vuc29yX2dldF9waWN0dXJlKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCWludCBlcnIsIHY7CisKKwllcnIgPSB3OTk2OGNmX3NlbnNvcl9nZXRfY29udHJvbChjYW0sIE9WQ0FNQ0hJUF9DSURfQ09OVCwgJnYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJY2FtLT5waWN0dXJlLmNvbnRyYXN0ID0gdjsKKworCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX2dldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9CUklHSFQsICZ2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWNhbS0+cGljdHVyZS5icmlnaHRuZXNzID0gdjsKKworCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX2dldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9TQVQsICZ2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWNhbS0+cGljdHVyZS5jb2xvdXIgPSB2OworCisJZXJyID0gdzk5NjhjZl9zZW5zb3JfZ2V0X2NvbnRyb2woY2FtLCBPVkNBTUNISVBfQ0lEX0hVRSwgJnYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJY2FtLT5waWN0dXJlLmh1ZSA9IHY7CisKKwlEQkcoNSwgIkdvdCBwaWN0dXJlIHNldHRpbmdzIGZyb20gdGhlIGltYWdlIHNlbnNvciIpCisKKwlQREJHRygiQnJpZ2h0bmVzcywgY29udHJhc3QsIGh1ZSwgY29sb3VyLCB3aGl0ZW5lc3MgYXJlICIKKwkgICAgICAiJXUsJXUsJXUsJXUsJXUiLCBjYW0tPnBpY3R1cmUuYnJpZ2h0bmVzcyxjYW0tPnBpY3R1cmUuY29udHJhc3QsCisJICAgICAgY2FtLT5waWN0dXJlLmh1ZSwgY2FtLT5waWN0dXJlLmNvbG91ciwgY2FtLT5waWN0dXJlLndoaXRlbmVzcykKKworCXJldHVybiAwOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgVXBkYXRlIHBpY3R1cmUgc2V0dGluZ3Mgb2YgdGhlIGltYWdlIHNlbnNvci4KKyAgUmV0dXJuczogMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK3c5OTY4Y2Zfc2Vuc29yX3VwZGF0ZV9waWN0dXJlKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aWRlb19waWN0dXJlIHBpY3QpCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAoKCFjYW0tPnNlbnNvcl9pbml0aWFsaXplZCkKKwkgICAgfHwgcGljdC5jb250cmFzdCAhPSBjYW0tPnBpY3R1cmUuY29udHJhc3QpIHsKKwkJZXJyID0gdzk5NjhjZl9zZW5zb3Jfc2V0X2NvbnRyb2woY2FtLCBPVkNBTUNISVBfQ0lEX0NPTlQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY3QuY29udHJhc3QpOworCQlpZiAoZXJyKQorCQkJZ290byBmYWlsOworCQlEQkcoNCwgIkNvbnRyYXN0IGNoYW5nZWQgZnJvbSAldSB0byAldSIsCisJCSAgICBjYW0tPnBpY3R1cmUuY29udHJhc3QsIHBpY3QuY29udHJhc3QpCisJCWNhbS0+cGljdHVyZS5jb250cmFzdCA9IHBpY3QuY29udHJhc3Q7CisJfQorCisJaWYgKCgoIWNhbS0+c2Vuc29yX2luaXRpYWxpemVkKSB8fCAKKwkgICAgcGljdC5icmlnaHRuZXNzICE9IGNhbS0+cGljdHVyZS5icmlnaHRuZXNzKSAmJiAoIWNhbS0+YXV0b19icnQpKSB7CisJCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9CUklHSFQsIAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWN0LmJyaWdodG5lc3MpOworCQlpZiAoZXJyKQorCQkJZ290byBmYWlsOworCQlEQkcoNCwgIkJyaWdodG5lc3MgY2hhbmdlZCBmcm9tICV1IHRvICV1IiwKKwkJICAgIGNhbS0+cGljdHVyZS5icmlnaHRuZXNzLCBwaWN0LmJyaWdodG5lc3MpCisJCWNhbS0+cGljdHVyZS5icmlnaHRuZXNzID0gcGljdC5icmlnaHRuZXNzOworCX0KKworCWlmICgoIWNhbS0+c2Vuc29yX2luaXRpYWxpemVkKSB8fCBwaWN0LmNvbG91ciAhPSBjYW0tPnBpY3R1cmUuY29sb3VyKSB7CisJCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9TQVQsIAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWN0LmNvbG91cik7CisJCWlmIChlcnIpCisJCQlnb3RvIGZhaWw7CisJCURCRyg0LCAiQ29sb3VyIGNoYW5nZWQgZnJvbSAldSB0byAldSIsCisJCSAgICBjYW0tPnBpY3R1cmUuY29sb3VyLCBwaWN0LmNvbG91cikKKwkJY2FtLT5waWN0dXJlLmNvbG91ciA9IHBpY3QuY29sb3VyOworCX0KKworCWlmICgoIWNhbS0+c2Vuc29yX2luaXRpYWxpemVkKSB8fCBwaWN0Lmh1ZSAhPSBjYW0tPnBpY3R1cmUuaHVlKSB7CisJCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX3NldF9jb250cm9sKGNhbSwgT1ZDQU1DSElQX0NJRF9IVUUsIAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWN0Lmh1ZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGZhaWw7CisJCURCRyg0LCAiSHVlIGNoYW5nZWQgZnJvbSAldSB0byAldSIsCisJCSAgICBjYW0tPnBpY3R1cmUuaHVlLCBwaWN0Lmh1ZSkKKwkJY2FtLT5waWN0dXJlLmh1ZSA9IHBpY3QuaHVlOworCX0KKworCXJldHVybiAwOworCitmYWlsOgorCURCRyg0LCAiRmFpbGVkIHRvIGNoYW5nZSBzZW5zb3IgcGljdHVyZSBzZXR0aW5nIikKKwlyZXR1cm4gZXJyOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENhbWVyYSBjb25maWd1cmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgc3VwcG9ydGVkIGltYWdlIHNlbnNvciBpcyBkZXRlY3RlZC4KKyAgUmV0dXJuIDAgaWYgdGhlIGluaXRpYWxpemF0aW9uIHN1Y2NlZWRzLCBhIG5lZ2F0aXZlIG51bWJlciBvdGhlcndpc2UuCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgdzk5NjhjZl9zZW5zb3JfaW5pdChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmICgoZXJyID0gdzk5NjhjZl9zZW5zb3JfY21kKGNhbSwgT1ZDQU1DSElQX0NNRF9JTklUSUFMSVpFLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FtLT5tb25vY2hyb21lKSkpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoKGVyciA9IHc5OTY4Y2Zfc2Vuc29yX2NtZChjYW0sIE9WQ0FNQ0hJUF9DTURfUV9TVUJUWVBFLCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FtLT5zZW5zb3IpKSkKKwkJZ290byBlcnJvcjsKKworCS8qIE5PVEU6IE1ha2Ugc3VyZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBhIG11bHRpcGxlIG9mIDE2ICovCisJc3dpdGNoIChjYW0tPnNlbnNvcl9jbGllbnQtPmFkZHIpIHsKKwkJY2FzZSBPVjZ4eDBfU0lEOgorCQkJY2FtLT5tYXh3aWR0aCA9IDM1MjsKKwkJCWNhbS0+bWF4aGVpZ2h0ID0gMjg4OworCQkJY2FtLT5taW53aWR0aCA9IDY0OworCQkJY2FtLT5taW5oZWlnaHQgPSA0ODsKKwkJCWJyZWFrOworCQljYXNlIE9WN3h4MF9TSUQ6CisJCQljYW0tPm1heHdpZHRoID0gNjQwOworCQkJY2FtLT5tYXhoZWlnaHQgPSA0ODA7CisJCQljYW0tPm1pbndpZHRoID0gNjQ7CisJCQljYW0tPm1pbmhlaWdodCA9IDQ4OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEQkcoMSwgIk5vdCBzdXBwb3J0ZWQgaW1hZ2Ugc2Vuc29yIGRldGVjdGVkIGZvciAlcyIsCisJCQkgICAgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUaGVzZSB2YWx1ZXMgZGVwZW5kIG9uIHRoZSBvbmVzIGluIHRoZSBvdnh4eDAuYyBzb3VyY2VzICovCisJc3dpdGNoIChjYW0tPnNlbnNvcikgeworCQljYXNlIENDX09WNzYyMDoKKwkJCWNhbS0+c3RhcnRfY3JvcHggPSAyODc7CisJCQljYW0tPnN0YXJ0X2Nyb3B5ID0gMzU7CisJCQkvKiBTZWVtcyB0byB3b3JrIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgaW1hZ2Ugc2Vuc29yICovCisJCQljYW0tPnZzX3BvbGFyaXR5ID0gMTsKKwkJCWNhbS0+aHNfcG9sYXJpdHkgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljYW0tPnN0YXJ0X2Nyb3B4ID0gMzIwOworCQkJY2FtLT5zdGFydF9jcm9weSA9IDM1OworCQkJY2FtLT52c19wb2xhcml0eSA9IDE7CisJCQljYW0tPmhzX3BvbGFyaXR5ID0gMDsKKwl9CisKKwlpZiAoKGVyciA9IHc5OTY4Y2Zfc2Vuc29yX3VwZGF0ZV9zZXR0aW5ncyhjYW0pKSkKKwkJZ290byBlcnJvcjsKKworCWlmICgoZXJyID0gdzk5NjhjZl9zZW5zb3JfdXBkYXRlX3BpY3R1cmUoY2FtLCBjYW0tPnBpY3R1cmUpKSkKKwkJZ290byBlcnJvcjsKKworCWNhbS0+c2Vuc29yX2luaXRpYWxpemVkID0gMTsKKworCURCRygyLCAiJXMgaW1hZ2Ugc2Vuc29yIGluaXRpYWxpemVkIiwgc3ltYm9saWMoc2VubGlzdCwgY2FtLT5zZW5zb3IpKQorCXJldHVybiAwOworCitlcnJvcjoKKwljYW0tPnNlbnNvcl9pbml0aWFsaXplZCA9IDA7CisJY2FtLT5zZW5zb3IgPSBDQ19VTktOT1dOOworCURCRygxLCAiSW1hZ2Ugc2Vuc29yIGluaXRpYWxpemF0aW9uIGZhaWxlZCBmb3IgJXMgKC9kZXYvdmlkZW8lZCkuICIKKwkgICAgICAgIlRyeSB0byBkZXRhY2ggYW5kIGF0dGFjaCB0aGlzIGRldmljZSBhZ2FpbiIsCisJICAgIHN5bWJvbGljKGNhbWxpc3QsIGNhbS0+aWQpLCBjYW0tPnY0bGRldi0+bWlub3IpCisJcmV0dXJuIGVycjsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEZpbGwgc29tZSBiYXNpYyBmaWVsZHMgaW4gdGhlIG1haW4gZGV2aWNlIGRhdGEgc3RydWN0dXJlLgorICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIG9uIHc5OTY4Y2ZfdXNiX3Byb2JlKCkgZm9yIGVhY2ggcmVjb2duaXplZCAKKyAgY2FtZXJhLgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZAordzk5NjhjZl9jb25maWd1cmVfY2FtZXJhKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1c2JfZGV2aWNlKiB1ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gdzk5NjhjZl9tb2RlbF9pZCBtb2RfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZGV2X25yKQoreworCWluaXRfTVVURVgoJmNhbS0+ZmlsZW9wX3NlbSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FtLT5vcGVuKTsKKwlzcGluX2xvY2tfaW5pdCgmY2FtLT51cmJfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmNhbS0+Zmxpc3RfbG9jayk7CisKKwljYW0tPnVzZXJzID0gMDsKKwljYW0tPmRpc2Nvbm5lY3RlZCA9IDA7CisJY2FtLT5pZCA9IG1vZF9pZDsKKwljYW0tPnNlbnNvciA9IENDX1VOS05PV047CisJY2FtLT5zZW5zb3JfaW5pdGlhbGl6ZWQgPSAwOworCisJLyogQ2FsY3VsYXRlIHRoZSBhbHRlcm5hdGUgc2V0dGluZyBudW1iZXIgKGZyb20gMSB0byAxNikKKwkgICBhY2NvcmRpbmcgdG8gdGhlICdwYWNrZXRfc2l6ZScgbW9kdWxlIHBhcmFtZXRlciAqLworCWlmIChwYWNrZXRfc2l6ZVtkZXZfbnJdIDwgVzk5NjhDRl9NSU5fUEFDS0VUX1NJWkUpCisJCXBhY2tldF9zaXplW2Rldl9ucl0gPSBXOTk2OENGX01JTl9QQUNLRVRfU0laRTsKKwlmb3IgKGNhbS0+YWx0c2V0dGluZyA9IDE7CisJICAgICBwYWNrZXRfc2l6ZVtkZXZfbnJdIDwgd01heFBhY2tldFNpemVbY2FtLT5hbHRzZXR0aW5nLTFdOworCSAgICAgY2FtLT5hbHRzZXR0aW5nKyspOworCisJY2FtLT5tYXhfYnVmZmVycyA9IChtYXhfYnVmZmVyc1tkZXZfbnJdIDwgMiB8fCAKKwkgICAgICAgICAgICAgICAgICAgIG1heF9idWZmZXJzW2Rldl9ucl0gPiBXOTk2OENGX01BWF9CVUZGRVJTKQorCSAgICAgICAgICAgICAgICAgICA/IFc5OTY4Q0ZfQlVGRkVSUyA6ICh1OCltYXhfYnVmZmVyc1tkZXZfbnJdOworCisJY2FtLT5kb3VibGVfYnVmZmVyID0gKGRvdWJsZV9idWZmZXJbZGV2X25yXSA9PSAwIHx8IAorCSAgICAgICAgICAgICAgICAgICAgICBkb3VibGVfYnVmZmVyW2Rldl9ucl0gPT0gMSkKKwkgICAgICAgICAgICAgICAgICAgICA/ICh1OClkb3VibGVfYnVmZmVyW2Rldl9ucl06Vzk5NjhDRl9ET1VCTEVfQlVGRkVSOworCisJY2FtLT5jbGFtcGluZyA9IChjbGFtcGluZ1tkZXZfbnJdID09IDAgfHwgY2xhbXBpbmdbZGV2X25yXSA9PSAxKQorCSAgICAgICAgICAgICAgICA/ICh1OCljbGFtcGluZ1tkZXZfbnJdIDogVzk5NjhDRl9DTEFNUElORzsKKwkKKwljYW0tPmZpbHRlcl90eXBlID0gKGZpbHRlcl90eXBlW2Rldl9ucl0gPT0gMCB8fAorCSAgICAgICAgICAgICAgICAgICAgZmlsdGVyX3R5cGVbZGV2X25yXSA9PSAxIHx8CisJICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfdHlwZVtkZXZfbnJdID09IDIpCisJICAgICAgICAgICAgICAgICAgID8gKHU4KWZpbHRlcl90eXBlW2Rldl9ucl0gOiBXOTk2OENGX0ZJTFRFUl9UWVBFOworCisJY2FtLT5jYXB0dXJlID0gMTsKKworCWNhbS0+bGFyZ2V2aWV3ID0gKGxhcmdldmlld1tkZXZfbnJdID09IDAgfHwgbGFyZ2V2aWV3W2Rldl9ucl0gPT0gMSkKKwkgICAgICAgICAgICAgICAgID8gKHU4KWxhcmdldmlld1tkZXZfbnJdIDogVzk5NjhDRl9MQVJHRVZJRVc7CisKKwljYW0tPmRlY29tcHJlc3Npb24gPSAoZGVjb21wcmVzc2lvbltkZXZfbnJdID09IDAgfHwgCisJICAgICAgICAgICAgICAgICAgICAgIGRlY29tcHJlc3Npb25bZGV2X25yXSA9PSAxIHx8CisJICAgICAgICAgICAgICAgICAgICAgIGRlY29tcHJlc3Npb25bZGV2X25yXSA9PSAyKQorCSAgICAgICAgICAgICAgICAgICAgID8gKHU4KWRlY29tcHJlc3Npb25bZGV2X25yXTpXOTk2OENGX0RFQ09NUFJFU1NJT047CisKKwljYW0tPnVwc2NhbGluZyA9ICh1cHNjYWxpbmdbZGV2X25yXSA9PSAwIHx8IAorCSAgICAgICAgICAgICAgICAgIHVwc2NhbGluZ1tkZXZfbnJdID09IDEpCisJICAgICAgICAgICAgICAgICA/ICh1OCl1cHNjYWxpbmdbZGV2X25yXSA6IFc5OTY4Q0ZfVVBTQ0FMSU5HOworCisJY2FtLT5hdXRvX2JydCA9IChhdXRvYnJpZ2h0W2Rldl9ucl0gPT0gMCB8fCBhdXRvYnJpZ2h0W2Rldl9ucl0gPT0gMSkKKwkgICAgICAgICAgICAgICAgPyAodTgpYXV0b2JyaWdodFtkZXZfbnJdIDogVzk5NjhDRl9BVVRPQlJJR0hUOworCisJY2FtLT5hdXRvX2V4cCA9IChhdXRvZXhwW2Rldl9ucl0gPT0gMCB8fCBhdXRvZXhwW2Rldl9ucl0gPT0gMSkKKwkgICAgICAgICAgICAgICAgPyAodTgpYXV0b2V4cFtkZXZfbnJdIDogVzk5NjhDRl9BVVRPRVhQOworCisJY2FtLT5saWdodGZyZXEgPSAobGlnaHRmcmVxW2Rldl9ucl0gPT0gNTAgfHwgbGlnaHRmcmVxW2Rldl9ucl0gPT0gNjApCisJICAgICAgICAgICAgICAgICA/ICh1OClsaWdodGZyZXFbZGV2X25yXSA6IFc5OTY4Q0ZfTElHSFRGUkVROworCisJY2FtLT5iYW5kZmlsdCA9IChiYW5kaW5nZmlsdGVyW2Rldl9ucl0gPT0gMCB8fCAKKwkgICAgICAgICAgICAgICAgIGJhbmRpbmdmaWx0ZXJbZGV2X25yXSA9PSAxKQorCSAgICAgICAgICAgICAgICA/ICh1OCliYW5kaW5nZmlsdGVyW2Rldl9ucl0gOiBXOTk2OENGX0JBTkRJTkdGSUxURVI7CisKKwljYW0tPmJhY2tsaWdodCA9IChiYWNrbGlnaHRbZGV2X25yXSA9PSAwIHx8IGJhY2tsaWdodFtkZXZfbnJdID09IDEpCisJICAgICAgICAgICAgICAgICA/ICh1OCliYWNrbGlnaHRbZGV2X25yXSA6IFc5OTY4Q0ZfQkFDS0xJR0hUOworCisJY2FtLT5jbG9ja2RpdiA9IChjbG9ja2RpdltkZXZfbnJdID09IC0xIHx8IGNsb2NrZGl2W2Rldl9ucl0gPj0gMCkKKwkgICAgICAgICAgICAgICAgPyAoczgpY2xvY2tkaXZbZGV2X25yXSA6IFc5OTY4Q0ZfQ0xPQ0tESVY7CisKKwljYW0tPm1pcnJvciA9IChtaXJyb3JbZGV2X25yXSA9PSAwIHx8IG1pcnJvcltkZXZfbnJdID09IDEpCisJICAgICAgICAgICAgICA/ICh1OCltaXJyb3JbZGV2X25yXSA6IFc5OTY4Q0ZfTUlSUk9SOworCisJY2FtLT5tb25vY2hyb21lID0gKG1vbm9jaHJvbWVbZGV2X25yXSA9PSAwIHx8IG1vbm9jaHJvbWVbZGV2X25yXSA9PSAxKQorCSAgICAgICAgICAgICAgICAgID8gbW9ub2Nocm9tZVtkZXZfbnJdIDogVzk5NjhDRl9NT05PQ0hST01FOworCisJY2FtLT5waWN0dXJlLmJyaWdodG5lc3MgPSAodTE2KWJyaWdodG5lc3NbZGV2X25yXTsKKwljYW0tPnBpY3R1cmUuaHVlID0gKHUxNilodWVbZGV2X25yXTsKKwljYW0tPnBpY3R1cmUuY29sb3VyID0gKHUxNiljb2xvdXJbZGV2X25yXTsKKwljYW0tPnBpY3R1cmUuY29udHJhc3QgPSAodTE2KWNvbnRyYXN0W2Rldl9ucl07CisJY2FtLT5waWN0dXJlLndoaXRlbmVzcyA9ICh1MTYpd2hpdGVuZXNzW2Rldl9ucl07CisJaWYgKHc5OTY4Y2ZfdmFsaWRfcGFsZXR0ZSgodTE2KWZvcmNlX3BhbGV0dGVbZGV2X25yXSkpIHsKKwkJY2FtLT5waWN0dXJlLnBhbGV0dGUgPSAodTE2KWZvcmNlX3BhbGV0dGVbZGV2X25yXTsKKwkJY2FtLT5mb3JjZV9wYWxldHRlID0gMTsKKwl9IGVsc2UgeworCQljYW0tPmZvcmNlX3BhbGV0dGUgPSAwOworCQlpZiAoY2FtLT5kZWNvbXByZXNzaW9uID09IDApCisJCQljYW0tPnBpY3R1cmUucGFsZXR0ZSA9IFc5OTY4Q0ZfUEFMRVRURV9ERUNPTVBfT0ZGOworCQllbHNlIGlmIChjYW0tPmRlY29tcHJlc3Npb24gPT0gMSkKKwkJCWNhbS0+cGljdHVyZS5wYWxldHRlID0gVzk5NjhDRl9QQUxFVFRFX0RFQ09NUF9GT1JDRTsKKwkJZWxzZQorCQkJY2FtLT5waWN0dXJlLnBhbGV0dGUgPSBXOTk2OENGX1BBTEVUVEVfREVDT01QX09OOworCX0KKwljYW0tPnBpY3R1cmUuZGVwdGggPSB3OTk2OGNmX3ZhbGlkX2RlcHRoKGNhbS0+cGljdHVyZS5wYWxldHRlKTsKKworCWNhbS0+Zm9yY2VfcmdiID0gKGZvcmNlX3JnYltkZXZfbnJdID09IDAgfHwgZm9yY2VfcmdiW2Rldl9ucl0gPT0gMSkKKwkgICAgICAgICAgICAgICAgID8gKHU4KWZvcmNlX3JnYltkZXZfbnJdIDogVzk5NjhDRl9GT1JDRV9SR0I7CisKKwljYW0tPndpbmRvdy54ID0gMDsKKwljYW0tPndpbmRvdy55ID0gMDsKKwljYW0tPndpbmRvdy53aWR0aCA9IFc5OTY4Q0ZfV0lEVEg7CisJY2FtLT53aW5kb3cuaGVpZ2h0ID0gVzk5NjhDRl9IRUlHSFQ7CisJY2FtLT53aW5kb3cuY2hyb21ha2V5ID0gMDsKKwljYW0tPndpbmRvdy5jbGlwY291bnQgPSAwOworCWNhbS0+d2luZG93LmZsYWdzID0gMDsKKworCURCRygzLCAiJXMgY29uZmlndXJlZCB3aXRoIHNldHRpbmdzICMldToiLAorCSAgICBzeW1ib2xpYyhjYW1saXN0LCBjYW0tPmlkKSwgZGV2X25yKQorCQorCURCRygzLCAiLSBEYXRhIHBhY2tldCBzaXplIGZvciBVU0IgaXNvY2hybm91cyB0cmFuc2ZlcjogJXUgYnl0ZXMiLAorCSAgICB3TWF4UGFja2V0U2l6ZVtjYW0tPmFsdHNldHRpbmctMV0pCisJCisJREJHKDMsICItIE51bWJlciBvZiByZXF1ZXN0ZWQgdmlkZW8gZnJhbWUgYnVmZmVyczogJXUiLAorCSAgICBjYW0tPm1heF9idWZmZXJzKQorCisJaWYgKGNhbS0+ZG91YmxlX2J1ZmZlcikKKwkJREJHKDMsICItIEhhcmR3YXJlIGRvdWJsZSBidWZmZXJpbmcgZW5hYmxlZCIpCisJZWxzZSAKKwkJREJHKDMsICItIEhhcmR3YXJlIGRvdWJsZSBidWZmZXJpbmcgZGlzYWJsZWQiKQorCisJaWYgKGNhbS0+ZmlsdGVyX3R5cGUgPT0gMCkKKwkJREJHKDMsICItIFZpZGVvIGZpbHRlcmluZyBkaXNhYmxlZCIpCisJZWxzZSBpZiAoY2FtLT5maWx0ZXJfdHlwZSA9PSAxKQorCQlEQkcoMywgIi0gVmlkZW8gZmlsdGVyaW5nIGVuYWJsZWQ6IHR5cGUgMS0yLTEiKQorCWVsc2UgaWYgKGNhbS0+ZmlsdGVyX3R5cGUgPT0gMikKKwkJREJHKDMsICItIFZpZGVvIGZpbHRlcmluZyBlbmFibGVkOiB0eXBlIDItMy02LTMtMiIpCisKKwlpZiAoY2FtLT5jbGFtcGluZykKKwkJREJHKDMsICItIFZpZGVvIGRhdGEgY2xhbXBpbmcgKENDSVItNjAxIGZvcm1hdCkgZW5hYmxlZCIpCisJZWxzZQorCQlEQkcoMywgIi0gVmlkZW8gZGF0YSBjbGFtcGluZyAoQ0NJUi02MDEgZm9ybWF0KSBkaXNhYmxlZCIpCisKKwlpZiAoY2FtLT5sYXJnZXZpZXcpCisJCURCRygzLCAiLSBMYXJnZSB2aWV3IGVuYWJsZWQiKQorCWVsc2UKKwkJREJHKDMsICItIExhcmdlIHZpZXcgZGlzYWJsZWQiKQorCisJaWYgKChjYW0tPmRlY29tcHJlc3Npb24pID09IDAgJiYgKCFjYW0tPmZvcmNlX3BhbGV0dGUpKQorCQlEQkcoMywgIi0gRGVjb21wcmVzc2lvbiBkaXNhYmxlZCIpCisJZWxzZSBpZiAoKGNhbS0+ZGVjb21wcmVzc2lvbikgPT0gMSAmJiAoIWNhbS0+Zm9yY2VfcGFsZXR0ZSkpCisJCURCRygzLCAiLSBEZWNvbXByZXNzaW9uIGZvcmNlZCIpCisJZWxzZSBpZiAoKGNhbS0+ZGVjb21wcmVzc2lvbikgPT0gMiAmJiAoIWNhbS0+Zm9yY2VfcGFsZXR0ZSkpCisJCURCRygzLCAiLSBEZWNvbXByZXNzaW9uIGFsbG93ZWQiKQorCisJaWYgKGNhbS0+dXBzY2FsaW5nKQorCQlEQkcoMywgIi0gU29mdHdhcmUgaW1hZ2Ugc2NhbGluZyBlbmFibGVkIikKKwllbHNlCisJCURCRygzLCAiLSBTb2Z0d2FyZSBpbWFnZSBzY2FsaW5nIGRpc2FibGVkIikKKworCWlmIChjYW0tPmZvcmNlX3BhbGV0dGUpCisJCURCRygzLCAiLSBJbWFnZSBwYWxldHRlIGZvcmNlZCB0byAlcyIsCisJCSAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBjYW0tPnBpY3R1cmUucGFsZXR0ZSkpCisKKwlpZiAoY2FtLT5mb3JjZV9yZ2IpCisJCURCRygzLCAiLSBSR0IgY29tcG9uZW50IG9yZGVyaW5nIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIEJHUiIpCisKKwlpZiAoY2FtLT5hdXRvX2JydCkKKwkJREJHKDMsICItIEF1dG8gYnJpZ2h0bmVzcyBlbmFibGVkIikKKwllbHNlCisJCURCRygzLCAiLSBBdXRvIGJyaWdodG5lc3MgZGlzYWJsZWQiKQorCisJaWYgKGNhbS0+YXV0b19leHApCisJCURCRygzLCAiLSBBdXRvIGV4cG9zdXJlIGVuYWJsZWQiKQorCWVsc2UKKwkJREJHKDMsICItIEF1dG8gZXhwb3N1cmUgZGlzYWJsZWQiKQorCisJaWYgKGNhbS0+YmFja2xpZ2h0KQorCQlEQkcoMywgIi0gQmFja2xpZ2h0IGV4cG9zdXJlIGFsZ29yaXRobSBlbmFibGVkIikKKwllbHNlCisJCURCRygzLCAiLSBCYWNrbGlnaHQgZXhwb3N1cmUgYWxnb3JpdGhtIGRpc2FibGVkIikKKworCWlmIChjYW0tPm1pcnJvcikKKwkJREJHKDMsICItIE1pcnJvciBlbmFibGVkIikKKwllbHNlCisJCURCRygzLCAiLSBNaXJyb3IgZGlzYWJsZWQiKQorCisJaWYgKGNhbS0+YmFuZGZpbHQpCisJCURCRygzLCAiLSBCYW5kaW5nIGZpbHRlciBlbmFibGVkIikKKwllbHNlCisJCURCRygzLCAiLSBCYW5kaW5nIGZpbHRlciBkaXNhYmxlZCIpCisKKwlEQkcoMywgIi0gUG93ZXIgbGlnaHRpbmcgZnJlcXVlbmN5OiAldSIsIGNhbS0+bGlnaHRmcmVxKQorCisJaWYgKGNhbS0+Y2xvY2tkaXYgPT0gLTEpCisJCURCRygzLCAiLSBBdXRvbWF0aWMgY2xvY2sgZGl2aXNvciBlbmFibGVkIikKKwllbHNlCisJCURCRygzLCAiLSBDbG9jayBkaXZpc29yOiAlZCIsIGNhbS0+Y2xvY2tkaXYpCisKKwlpZiAoY2FtLT5tb25vY2hyb21lKQorCQlEQkcoMywgIi0gSW1hZ2Ugc2Vuc29yIHVzZWQgYXMgbW9ub2Nocm9tZSIpCisJZWxzZQorCQlEQkcoMywgIi0gSW1hZ2Ugc2Vuc29yIG5vdCB1c2VkIGFzIG1vbm9jaHJvbWUiKQorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgSWYgdGhlIHZpZGVvIHBvc3QtcHJvY2Vzc2luZyBtb2R1bGUgaXMgbm90IGxvYWRlZCwgc29tZSBwYXJhbWV0ZXJzCisgIG11c3QgYmUgb3ZlcnJpZGRlbi4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgdzk5NjhjZl9hZGp1c3RfY29uZmlndXJhdGlvbihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSkKK3sKKwlpZiAoIXc5OTY4Y2ZfdnBwKSB7CisJCWlmIChjYW0tPmRlY29tcHJlc3Npb24gPT0gMSkgeworCQkJY2FtLT5kZWNvbXByZXNzaW9uID0gMjsKKwkJCURCRygyLCAiVmlkZW8gcG9zdC1wcm9jZXNzaW5nIG1vZHVsZSBub3QgZm91bmQ6ICIKKwkJCSAgICAgICAiJ2RlY29tcHJlc3Npb24nIHBhcmFtZXRlciBmb3JjZWQgdG8gMiIpCisJCX0KKwkJaWYgKGNhbS0+dXBzY2FsaW5nKSB7CisJCQljYW0tPnVwc2NhbGluZyA9IDA7CisJCQlEQkcoMiwgIlZpZGVvIHBvc3QtcHJvY2Vzc2luZyBtb2R1bGUgbm90IGZvdW5kOiAiCisJCQkgICAgICAgIid1cHNjYWxpbmcnIHBhcmFtZXRlciBmb3JjZWQgdG8gMCIpCisJCX0KKwkJaWYgKGNhbS0+cGljdHVyZS5wYWxldHRlICE9IFZJREVPX1BBTEVUVEVfVVlWWSkgeworCQkJY2FtLT5mb3JjZV9wYWxldHRlID0gMDsKKwkJCURCRygyLCAiVmlkZW8gcG9zdC1wcm9jZXNzaW5nIG1vZHVsZSBub3QgZm91bmQ6ICIKKwkJCSAgICAgICAiJ2ZvcmNlX3BhbGV0dGUnIHBhcmFtZXRlciBmb3JjZWQgdG8gMCIpCisJCX0KKwkJY2FtLT5waWN0dXJlLnBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1VZVlk7CisJCWNhbS0+cGljdHVyZS5kZXB0aCA9IHc5OTY4Y2ZfdmFsaWRfZGVwdGgoY2FtLT5waWN0dXJlLnBhbGV0dGUpOworCX0KK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFJlbGVhc2UgdGhlIHJlc291cmNlcyB1c2VkIGJ5IHRoZSBkcml2ZXIuCisgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGRpc2Nvbm5lY3QgCisgIChvciBvbiBjbG9zZSBpZiBkZWFsbG9jYXRpb24gaGFzIGJlZW4gZGVmZXJyZWQpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkIHc5OTY4Y2ZfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCit7CisJZG93bigmdzk5NjhjZl9kZXZsaXN0X3NlbSk7CisKKwlEQkcoMiwgIlY0TCBkZXZpY2UgZGVyZWdpc3RlcmVkOiAvZGV2L3ZpZGVvJWQiLCBjYW0tPnY0bGRldi0+bWlub3IpCisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZShjYW0tPnY0bGRldik7CisJbGlzdF9kZWwoJmNhbS0+djRsbGlzdCk7CisJaTJjX2RlbF9hZGFwdGVyKCZjYW0tPmkyY19hZGFwdGVyKTsKKwl3OTk2OGNmX2RlYWxsb2NhdGVfbWVtb3J5KGNhbSk7CisJa2ZyZWUoY2FtLT5jb250cm9sX2J1ZmZlcik7CisJa2ZyZWUoY2FtLT5kYXRhX2J1ZmZlcik7CisKKwl1cCgmdzk5NjhjZl9kZXZsaXN0X3NlbSk7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVmlkZW80TGludXggaW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHc5OTY4Y2Zfb3BlbihzdHJ1Y3QgaW5vZGUqIGlub2RlLCBzdHJ1Y3QgZmlsZSogZmlscCkKK3sKKwlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbTsKKwlpbnQgZXJyOworCisJLyogVGhpcyB0aGUgb25seSBzYWZlIHdheSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aXRoIGRpc2Nvbm5lY3QgKi8KKwlpZiAoIWRvd25fcmVhZF90cnlsb2NrKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJY2FtID0gKHN0cnVjdCB3OTk2OGNmX2RldmljZSopdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisKKwlkb3duKCZjYW0tPmRldl9zZW0pOworCisJaWYgKGNhbS0+c2Vuc29yID09IENDX1VOS05PV04pIHsKKwkJREJHKDIsICJObyBzdXBwb3J0ZWQgaW1hZ2Ugc2Vuc29yIGhhcyBiZWVuIGRldGVjdGVkIGJ5IHRoZSAiCisJCSAgICAgICAiJ292Y2FtY2hpcCcgbW9kdWxlIGZvciB0aGUgJXMgKC9kZXYvdmlkZW8lZCkuIE1ha2UgIgorCQkgICAgICAgInN1cmUgaXQgaXMgbG9hZGVkICpiZWZvcmUqIChyZSljb25uZWN0aW5nIHRoZSBjYW1lcmEuIiwKKwkJICAgIHN5bWJvbGljKGNhbWxpc3QsIGNhbS0+aWQpLCBjYW0tPnY0bGRldi0+bWlub3IpCisJCXVwKCZjYW0tPmRldl9zZW0pOworCQl1cF9yZWFkKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoY2FtLT51c2VycykgeworCQlEQkcoMiwgIiVzICgvZGV2L3ZpZGVvJWQpIGhhcyBiZWVuIGFscmVhZHkgb2NjdXBpZWQgYnkgJyVzJyIsCisJCSAgICBzeW1ib2xpYyhjYW1saXN0LCBjYW0tPmlkKSxjYW0tPnY0bGRldi0+bWlub3IsY2FtLT5jb21tYW5kKQorCQlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKXx8KGZpbHAtPmZfZmxhZ3MgJiBPX05ERUxBWSkpIHsKKwkJCXVwKCZjYW0tPmRldl9zZW0pOworCQkJdXBfcmVhZCgmdzk5NjhjZl9kaXNjb25uZWN0KTsKKwkJCXJldHVybiAtRVdPVUxEQkxPQ0s7CisJCX0KKwkJdXAoJmNhbS0+ZGV2X3NlbSk7CisJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV9leGNsdXNpdmUoY2FtLT5vcGVuLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbS0+ZGlzY29ubmVjdGVkIHx8CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNhbS0+dXNlcnMpOworCQlpZiAoZXJyKSB7CisJCQl1cF9yZWFkKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlpZiAoY2FtLT5kaXNjb25uZWN0ZWQpIHsKKwkJCXVwX3JlYWQoJnc5OTY4Y2ZfZGlzY29ubmVjdCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlkb3duKCZjYW0tPmRldl9zZW0pOworCX0KKworCURCRyg1LCAiT3BlbmluZyAnJXMnLCAvZGV2L3ZpZGVvJWQgLi4uIiwKKwkgICAgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCksIGNhbS0+djRsZGV2LT5taW5vcikKKworCWNhbS0+c3RyZWFtaW5nID0gMDsKKwljYW0tPm1pc2NvbmZpZ3VyZWQgPSAwOworCisJaWYgKCF3OTk2OGNmX3ZwcCkKKwkJaWYgKChlcnIgPSB3OTk2OGNmX3ZwcG1vZF9kZXRlY3QoY2FtKSkpCisJCQlnb3RvIG91dDsKKworCWlmICgoZXJyID0gdzk5NjhjZl9hbGxvY2F0ZV9tZW1vcnkoY2FtKSkpCisJCWdvdG8gZGVhbGxvY2F0ZV9tZW1vcnk7CisKKwlpZiAoKGVyciA9IHc5OTY4Y2ZfaW5pdF9jaGlwKGNhbSkpKQorCQlnb3RvIGRlYWxsb2NhdGVfbWVtb3J5OworCisJaWYgKChlcnIgPSB3OTk2OGNmX3N0YXJ0X3RyYW5zZmVyKGNhbSkpKQorCQlnb3RvIGRlYWxsb2NhdGVfbWVtb3J5OworCisJZmlscC0+cHJpdmF0ZV9kYXRhID0gY2FtOworCisJY2FtLT51c2VycysrOworCXN0cmNweShjYW0tPmNvbW1hbmQsIGN1cnJlbnQtPmNvbW0pOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FtLT53YWl0X3F1ZXVlKTsKKworCURCRyg1LCAiVmlkZW8gZGV2aWNlIGlzIG9wZW4iKQorCisJdXAoJmNhbS0+ZGV2X3NlbSk7CisJdXBfcmVhZCgmdzk5NjhjZl9kaXNjb25uZWN0KTsKKworCXJldHVybiAwOworCitkZWFsbG9jYXRlX21lbW9yeToKKwl3OTk2OGNmX2RlYWxsb2NhdGVfbWVtb3J5KGNhbSk7CitvdXQ6CisJREJHKDIsICJGYWlsZWQgdG8gb3BlbiB0aGUgdmlkZW8gZGV2aWNlIikKKwl1cCgmY2FtLT5kZXZfc2VtKTsKKwl1cF9yZWFkKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCB3OTk2OGNmX3JlbGVhc2Uoc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUqIGZpbHApCit7CisJc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW07CisKKwljYW0gPSAoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKil2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKworCWRvd24oJmNhbS0+ZGV2X3NlbSk7IC8qIHByZXZlbnQgZGlzY29ubmVjdCgpIHRvIGJlIGNhbGxlZCAqLworCisJdzk5NjhjZl9zdG9wX3RyYW5zZmVyKGNhbSk7CisKKwl3OTk2OGNmX3ZwcG1vZF9yZWxlYXNlKGNhbSk7CisKKwlpZiAoY2FtLT5kaXNjb25uZWN0ZWQpIHsKKwkJdzk5NjhjZl9yZWxlYXNlX3Jlc291cmNlcyhjYW0pOworCQl1cCgmY2FtLT5kZXZfc2VtKTsKKwkJa2ZyZWUoY2FtKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY2FtLT51c2Vycy0tOworCXc5OTY4Y2ZfZGVhbGxvY2F0ZV9tZW1vcnkoY2FtKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGVfbnIoJmNhbS0+b3BlbiwgMSk7CisKKwlEQkcoNSwgIlZpZGVvIGRldmljZSBjbG9zZWQiKQorCXVwKCZjYW0tPmRldl9zZW0pOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzc2l6ZV90Cit3OTk2OGNmX3JlYWQoc3RydWN0IGZpbGUqIGZpbHAsIGNoYXIgX191c2VyICogYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCogZl9wb3MpCit7CisJc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW07CisJc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCogZnI7CisJaW50IGVyciA9IDA7CisKKwljYW0gPSAoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKil2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbHApKTsKKworCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykKKwkJcmV0dXJuIC1FV09VTERCTE9DSzsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJmNhbS0+ZmlsZW9wX3NlbSkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAoY2FtLT5kaXNjb25uZWN0ZWQpIHsKKwkJREJHKDIsICJEZXZpY2Ugbm90IHByZXNlbnQiKQorCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGNhbS0+bWlzY29uZmlndXJlZCkgeworCQlEQkcoMiwgIlRoZSBjYW1lcmEgaXMgbWlzY29uZmlndXJlZC4gQ2xvc2UgYW5kIG9wZW4gaXQgYWdhaW4uIikKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmICghY2FtLT5mcmFtZVswXS5xdWV1ZWQpCisJCXc5OTY4Y2ZfcHVzaF9mcmFtZShjYW0sIDApOworCisJaWYgKCFjYW0tPmZyYW1lWzFdLnF1ZXVlZCkKKwkJdzk5NjhjZl9wdXNoX2ZyYW1lKGNhbSwgMSk7CisKKwllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY2FtLT53YWl0X3F1ZXVlLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW0tPmZyYW1lWzBdLnN0YXR1cyA9PSBGX1JFQURZIHx8CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbS0+ZnJhbWVbMV0uc3RhdHVzID09IEZfUkVBRFkgfHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtLT5kaXNjb25uZWN0ZWQpOworCWlmIChlcnIpIHsKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiBlcnI7CisJfQorCWlmIChjYW0tPmRpc2Nvbm5lY3RlZCkgeworCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZnIgPSAoY2FtLT5mcmFtZVswXS5zdGF0dXMgPT0gRl9SRUFEWSkgPyAmY2FtLT5mcmFtZVswXTomY2FtLT5mcmFtZVsxXTsKKworCWlmICh3OTk2OGNmX3ZwcCkKKwkJdzk5NjhjZl9wb3N0cHJvY2Vzc19mcmFtZShjYW0sIGZyKTsKKworCWlmIChjb3VudCA+IGZyLT5sZW5ndGgpCisJCWNvdW50ID0gZnItPmxlbmd0aDsKKworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBmci0+YnVmZmVyLCBjb3VudCkpIHsKKwkJZnItPnN0YXR1cyA9IEZfVU5VU0VEOworCQl1cCgmY2FtLT5maWxlb3Bfc2VtKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCSpmX3BvcyArPSBjb3VudDsKKworCWZyLT5zdGF0dXMgPSBGX1VOVVNFRDsKKworCURCRyg1LCAiJXp1IGJ5dGVzIHJlYWQiLCBjb3VudCkKKworCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCXJldHVybiBjb3VudDsKK30KKworCitzdGF0aWMgaW50IHc5OTY4Y2ZfbW1hcChzdHJ1Y3QgZmlsZSogZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0gPSAoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKikKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCXVuc2lnbmVkIGxvbmcgdnNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCisJICAgICAgICAgICAgICBwc2l6ZSA9IGNhbS0+bmJ1ZmZlcnMgKiBjYW0tPmZyYW1lWzBdLnNpemUsCisJICAgICAgICAgICAgICBzdGFydCA9IHZtYS0+dm1fc3RhcnQsCisJICAgICAgICAgICAgICBwb3MgPSAodW5zaWduZWQgbG9uZyljYW0tPmZyYW1lWzBdLmJ1ZmZlciwKKwkgICAgICAgICAgICAgIHBhZ2U7CisKKwlpZiAoY2FtLT5kaXNjb25uZWN0ZWQpIHsKKwkJREJHKDIsICJEZXZpY2Ugbm90IHByZXNlbnQiKQorCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoY2FtLT5taXNjb25maWd1cmVkKSB7CisJCURCRygyLCAiVGhlIGNhbWVyYSBpcyBtaXNjb25maWd1cmVkLiBDbG9zZSBhbmQgb3BlbiBpdCBhZ2FpbiIpCisJCXJldHVybiAtRUlPOworCX0KKworCVBEQkdHKCJtbWFwcGluZyAlbHUgYnl0ZXMuLi4iLCB2c2l6ZSkKKworCWlmICh2c2l6ZSA+IHBzaXplIC0gKHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVCkpCisJCXJldHVybiAtRUlOVkFMOworCisJd2hpbGUgKHZzaXplID4gMCkgeworCQlwYWdlID0gdm1hbGxvY190b19wZm4oKHZvaWQgKilwb3MpOworCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UgKyB2bWEtPnZtX3Bnb2ZmLAorCQkJCQkJUEFHRV9TSVpFLCB2bWEtPnZtX3BhZ2VfcHJvdCkpCisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJc3RhcnQgKz0gUEFHRV9TSVpFOworCQlwb3MgKz0gUEFHRV9TSVpFOworCQl2c2l6ZSAtPSBQQUdFX1NJWkU7CisJfQorCisJREJHKDUsICJtbWFwIG1ldGhvZCBzdWNjZXNzZnVsbHkgY2FsbGVkIikKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50Cit3OTk2OGNmX2lvY3RsKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlKiBmaWxwLAorICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbTsKKwlpbnQgZXJyOworCisJY2FtID0gKHN0cnVjdCB3OTk2OGNmX2RldmljZSopdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxwKSk7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZjYW0tPmZpbGVvcF9zZW0pKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJaWYgKGNhbS0+ZGlzY29ubmVjdGVkKSB7CisJCURCRygyLCAiRGV2aWNlIG5vdCBwcmVzZW50IikKKwkJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChjYW0tPm1pc2NvbmZpZ3VyZWQpIHsKKwkJREJHKDIsICJUaGUgY2FtZXJhIGlzIG1pc2NvbmZpZ3VyZWQuIENsb3NlIGFuZCBvcGVuIGl0IGFnYWluLiIpCisJCXVwKCZjYW0tPmZpbGVvcF9zZW0pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwllcnIgPSB3OTk2OGNmX3Y0bF9pb2N0bChpbm9kZSwgZmlscCwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOworCisJdXAoJmNhbS0+ZmlsZW9wX3NlbSk7CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaW50IHc5OTY4Y2ZfdjRsX2lvY3RsKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlKiBmaWxwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqIGFyZykKK3sKKwlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbTsKKwljb25zdCBjaGFyKiB2NGwxX2lvY3Rsc1tdID0geworCQkiPyIsICJDR0FQIiwgIkdDSEFOIiwgIlNDSEFOIiwgIkdUVU5FUiIsICJTVFVORVIiLCAKKwkJIkdQSUNUIiwgIlNQSUNUIiwgIkNDQVBUVVJFIiwgIkdXSU4iLCAiU1dJTiIsICJHRkJVRiIsCisJCSJTRkJVRiIsICJLRVkiLCAiR0ZSRVEiLCAiU0ZSRVEiLCAiR0FVRElPIiwgIlNBVURJTyIsCisJCSJTWU5DIiwgIk1DQVBUVVJFIiwgIkdNQlVGIiwgIkdVTklUIiwgIkdDQVBUVVJFIiwgIlNDQVBUVVJFIiwKKwkJIlNQTEFZTU9ERSIsICJTV1JJVEVNT0RFIiwgIkdQTEFZSU5GTyIsICJTTUlDUk9DT0RFIiwgCisJCSJHVkJJRk1UIiwgIlNWQklGTVQiIAorCX07CisKKwkjZGVmaW5lIFY0TDFfSU9DVEwoY21kKSBcCisJICAgICAgICAoKF9JT0NfTlIoKGNtZCkpIDwgc2l6ZW9mKHY0bDFfaW9jdGxzKS9zaXplb2YoY2hhciopKSA/IFwKKwkgICAgICAgIHY0bDFfaW9jdGxzW19JT0NfTlIoKGNtZCkpXSA6ICI/IikKKworCWNhbSA9IChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKXZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlscCkpOworCisJc3dpdGNoIChjbWQpIHsKKworCWNhc2UgVklESU9DR0NBUDogLyogZ2V0IHZpZGVvIGNhcGFiaWxpdHkgKi8KKwl7CisJCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5IGNhcCA9IHsKKwkJCS50eXBlID0gVklEX1RZUEVfQ0FQVFVSRSB8IFZJRF9UWVBFX1NDQUxFUywKKwkJCS5jaGFubmVscyA9IDEsCisJCQkuYXVkaW9zID0gMCwKKwkJCS5taW53aWR0aCA9IGNhbS0+bWlud2lkdGgsCisJCQkubWluaGVpZ2h0ID0gY2FtLT5taW5oZWlnaHQsCisJCX07CisJCXNwcmludGYoY2FwLm5hbWUsICJXOTk2Wzg3XUNGIFVTQiBDYW1lcmEgIyVkIiwgCisJCSAgICAgICAgY2FtLT52NGxkZXYtPm1pbm9yKTsKKwkJY2FwLm1heHdpZHRoID0gKGNhbS0+dXBzY2FsaW5nICYmIHc5OTY4Y2ZfdnBwKQorCQkgICAgICAgICAgICAgICA/IG1heCgodTE2KVc5OTY4Q0ZfTUFYX1dJRFRILCBjYW0tPm1heHdpZHRoKSAKKwkJICAgICAgICAgICAgICAgICA6IGNhbS0+bWF4d2lkdGg7CisJCWNhcC5tYXhoZWlnaHQgPSAoY2FtLT51cHNjYWxpbmcgJiYgdzk5NjhjZl92cHApCisJCSAgICAgICAgICAgICAgICA/IG1heCgodTE2KVc5OTY4Q0ZfTUFYX0hFSUdIVCwgY2FtLT5tYXhoZWlnaHQpCisJCSAgICAgICAgICAgICAgICAgIDogY2FtLT5tYXhoZWlnaHQ7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZjYXAsIHNpemVvZihjYXApKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCURCRyg1LCAiVklESU9DR0NBUCBzdWNjZXNzZnVsbHkgY2FsbGVkIikKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NHQ0hBTjogLyogZ2V0IHZpZGVvIGNoYW5uZWwgaW5mb3JtYXRpb25zICovCisJeworCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCBjaGFuOworCQlpZiAoY29weV9mcm9tX3VzZXIoJmNoYW4sIGFyZywgc2l6ZW9mKGNoYW4pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChjaGFuLmNoYW5uZWwgIT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXN0cmNweShjaGFuLm5hbWUsICJDYW1lcmEiKTsKKwkJY2hhbi50dW5lcnMgPSAwOworCQljaGFuLmZsYWdzID0gMDsKKwkJY2hhbi50eXBlID0gVklERU9fVFlQRV9DQU1FUkE7CisJCWNoYW4ubm9ybSA9IFZJREVPX01PREVfQVVUTzsKKworCQlpZiAoY29weV90b191c2VyKGFyZywgJmNoYW4sIHNpemVvZihjaGFuKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlEQkcoNSwgIlZJRElPQ0dDSEFOIHN1Y2Nlc3NmdWxseSBjYWxsZWQiKQorCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ1NDSEFOOiAvKiBzZXQgYWN0aXZlIGNoYW5uZWwgKi8KKwl7CisJCXN0cnVjdCB2aWRlb19jaGFubmVsIGNoYW47CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZjaGFuLCBhcmcsIHNpemVvZihjaGFuKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoY2hhbi5jaGFubmVsICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlEQkcoNSwgIlZJRElPQ1NDSEFOIHN1Y2Nlc3NmdWxseSBjYWxsZWQiKQorCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ0dQSUNUOiAvKiBnZXQgaW1hZ2UgcHJvcGVydGllcyBvZiB0aGUgcGljdHVyZSAqLworCXsKKwkJaWYgKHc5OTY4Y2Zfc2Vuc29yX2dldF9waWN0dXJlKGNhbSkpCisJCQlyZXR1cm4gLUVJTzsKKworCQlpZiAoY29weV90b191c2VyKGFyZywgJmNhbS0+cGljdHVyZSwgc2l6ZW9mKGNhbS0+cGljdHVyZSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJREJHKDUsICJWSURJT0NHUElDVCBzdWNjZXNzZnVsbHkgY2FsbGVkIikKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NTUElDVDogLyogY2hhbmdlIHBpY3R1cmUgc2V0dGluZ3MgKi8KKwl7CisJCXN0cnVjdCB2aWRlb19waWN0dXJlIHBpY3Q7CisJCWludCBlcnIgPSAwOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmcGljdCwgYXJnLCBzaXplb2YocGljdCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKCAoY2FtLT5mb3JjZV9wYWxldHRlIHx8ICF3OTk2OGNmX3ZwcCkgCisJCSAgICAgJiYgcGljdC5wYWxldHRlICE9IGNhbS0+cGljdHVyZS5wYWxldHRlICkgeworCQkJREJHKDQsICJQYWxldHRlICVzIHJlamVjdGVkOiBvbmx5ICVzIGlzIGFsbG93ZWQiLAorCQkJICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIHBpY3QucGFsZXR0ZSksCisJCQkgICAgc3ltYm9saWModjRsMV9wbGlzdCwgY2FtLT5waWN0dXJlLnBhbGV0dGUpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoIXc5OTY4Y2ZfdmFsaWRfcGFsZXR0ZShwaWN0LnBhbGV0dGUpKSB7CisJCQlEQkcoNCwgIlBhbGV0dGUgJXMgbm90IHN1cHBvcnRlZC4gVklESU9DU1BJQ1QgZmFpbGVkIiwKKwkJCSAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBwaWN0LnBhbGV0dGUpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoIWNhbS0+Zm9yY2VfcGFsZXR0ZSkgeworCQkgICBpZiAoY2FtLT5kZWNvbXByZXNzaW9uID09IDApIHsKKwkJICAgICAgaWYgKHc5OTY4Y2ZfbmVlZF9kZWNvbXByZXNzaW9uKHBpY3QucGFsZXR0ZSkpIHsKKwkJICAgICAgICAgREJHKDQsICJEZWNvbXByZXNzaW9uIGRpc2FibGVkOiBwYWxldHRlICVzIGlzIG5vdCAiCisJCSAgICAgICAgICAgICAgICAiYWxsb3dlZC4gVklESU9DU1BJQ1QgZmFpbGVkIiwKKwkJICAgICAgICAgICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIHBpY3QucGFsZXR0ZSkpCisJCSAgICAgICAgIHJldHVybiAtRUlOVkFMOworCQkgICAgICB9CisJCSAgIH0gZWxzZSBpZiAoY2FtLT5kZWNvbXByZXNzaW9uID09IDEpIHsKKwkJICAgICAgaWYgKCF3OTk2OGNmX25lZWRfZGVjb21wcmVzc2lvbihwaWN0LnBhbGV0dGUpKSB7CisJCSAgICAgICAgIERCRyg0LCAiRGVjb21wcmVzc2lvbiBmb3JjZWQ6IHBhbGV0dGUgJXMgaXMgbm90ICIKKwkJICAgICAgICAgICAgICAgICJhbGxvd2VkLiBWSURJT0NTUElDVCBmYWlsZWQiLAorCQkgICAgICAgICAgICAgc3ltYm9saWModjRsMV9wbGlzdCwgcGljdC5wYWxldHRlKSkKKwkJICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJCSAgICAgIH0KKwkJICAgfQorCQl9CisKKwkJaWYgKHBpY3QuZGVwdGggIT0gdzk5NjhjZl92YWxpZF9kZXB0aChwaWN0LnBhbGV0dGUpKSB7CisJCQlEQkcoNCwgIlJlcXVlc3RlZCBkZXB0aCAldSBicHAgaXMgbm90IHZhbGlkIGZvciAlcyAiCisJCQkgICAgICAgInBhbGV0dGU6IGlnbm9yZWQgYW5kIGNoYW5nZWQgdG8gJXUgYnBwIiwgCisJCQkgICAgcGljdC5kZXB0aCwgc3ltYm9saWModjRsMV9wbGlzdCwgcGljdC5wYWxldHRlKSwKKwkJCSAgICB3OTk2OGNmX3ZhbGlkX2RlcHRoKHBpY3QucGFsZXR0ZSkpCisJCQlwaWN0LmRlcHRoID0gdzk5NjhjZl92YWxpZF9kZXB0aChwaWN0LnBhbGV0dGUpOworCQl9CisKKwkJaWYgKHBpY3QucGFsZXR0ZSAhPSBjYW0tPnBpY3R1cmUucGFsZXR0ZSkgeworCQkJaWYoKmNhbS0+cmVxdWVzdGVkX2ZyYW1lCisJCQkgICB8fCBjYW0tPmZyYW1lX2N1cnJlbnQtPnF1ZXVlZCkgeworCQkJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZQorCQkJCSAgICAgICggY2FtLT53YWl0X3F1ZXVlLAorCQkJCSAgICAgICAgY2FtLT5kaXNjb25uZWN0ZWQgfHwKKwkJCQkgICAgICAgICghKmNhbS0+cmVxdWVzdGVkX2ZyYW1lICYmCisJCQkJICAgICAgICAgIWNhbS0+ZnJhbWVfY3VycmVudC0+cXVldWVkKSApOworCQkJCWlmIChlcnIpCisJCQkJCXJldHVybiBlcnI7CisJCQkJaWYgKGNhbS0+ZGlzY29ubmVjdGVkKQorCQkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0KKworCQkJaWYgKHc5OTY4Y2Zfc3RvcF90cmFuc2ZlcihjYW0pKQorCQkJCWdvdG8gaW9jdGxfZmFpbDsKKworCQkJaWYgKHc5OTY4Y2Zfc2V0X3BpY3R1cmUoY2FtLCBwaWN0KSkKKwkJCQlnb3RvIGlvY3RsX2ZhaWw7CisKKwkJCWlmICh3OTk2OGNmX3N0YXJ0X3RyYW5zZmVyKGNhbSkpCisJCQkJZ290byBpb2N0bF9mYWlsOworCisJCX0gZWxzZSBpZiAodzk5NjhjZl9zZW5zb3JfdXBkYXRlX3BpY3R1cmUoY2FtLCBwaWN0KSkKKwkJCXJldHVybiAtRUlPOworCisKKwkJREJHKDUsICJWSURJT0NTUElDVCBzdWNjZXNzZnVsbHkgY2FsbGVkIikKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NTV0lOOiAvKiBzZXQgY2FwdHVyZSBhcmVhICovCisJeworCQlzdHJ1Y3QgdmlkZW9fd2luZG93IHdpbjsKKwkJaW50IGVyciA9IDA7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ3aW4sIGFyZywgc2l6ZW9mKHdpbikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJREJHKDYsICJWSURJT0NTV0lOIGNhbGxlZDogY2xpcGNvdW50PSVkLCBmbGFncz0ldSwgIgorCQkgICAgICAgIng9JXUsIHk9JXUsICV1eCV1Iiwgd2luLmNsaXBjb3VudCwgd2luLmZsYWdzLAorCQkgICAgd2luLngsIHdpbi55LCB3aW4ud2lkdGgsIHdpbi5oZWlnaHQpCisKKwkJaWYgKHdpbi5jbGlwY291bnQgIT0gMCB8fCB3aW4uZmxhZ3MgIT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICgoZXJyID0gdzk5NjhjZl9hZGp1c3Rfd2luZG93X3NpemUoY2FtLCAodTE2Kikmd2luLndpZHRoLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1MTYqKSZ3aW4uaGVpZ2h0KSkpIHsKKwkJCURCRyg0LCAiUmVzb2x1dGlvbiBub3Qgc3VwcG9ydGVkICgldXgldSkuICIKKwkJCSAgICAgICAiVklESU9DU1dJTiBmYWlsZWQiLCB3aW4ud2lkdGgsIHdpbi5oZWlnaHQpCisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJaWYgKHdpbi54ICE9IGNhbS0+d2luZG93LnggfHwKKwkJICAgIHdpbi55ICE9IGNhbS0+d2luZG93LnkgfHwKKwkJICAgIHdpbi53aWR0aCAhPSBjYW0tPndpbmRvdy53aWR0aCB8fAorCQkgICAgd2luLmhlaWdodCAhPSBjYW0tPndpbmRvdy5oZWlnaHQpIHsKKwkJCWlmKCpjYW0tPnJlcXVlc3RlZF9mcmFtZQorCQkJICAgfHwgY2FtLT5mcmFtZV9jdXJyZW50LT5xdWV1ZWQpIHsKKwkJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUKKwkJCQkgICAgICAoIGNhbS0+d2FpdF9xdWV1ZSwKKwkJCQkgICAgICAgIGNhbS0+ZGlzY29ubmVjdGVkIHx8CisJCQkJICAgICAgICAoISpjYW0tPnJlcXVlc3RlZF9mcmFtZSAmJgorCQkJCSAgICAgICAgICFjYW0tPmZyYW1lX2N1cnJlbnQtPnF1ZXVlZCkgKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOworCQkJCWlmIChjYW0tPmRpc2Nvbm5lY3RlZCkKKwkJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisKKwkJCWlmICh3OTk2OGNmX3N0b3BfdHJhbnNmZXIoY2FtKSkKKwkJCQlnb3RvIGlvY3RsX2ZhaWw7CisKKwkJCS8qIFRoaXMgX211c3RfIGJlIGNhbGxlZCBiZWZvcmUgc2V0X3dpbmRvdygpICovCisJCQlpZiAodzk5NjhjZl9zZXRfcGljdHVyZShjYW0sIGNhbS0+cGljdHVyZSkpCisJCQkJZ290byBpb2N0bF9mYWlsOworCisJCQlpZiAodzk5NjhjZl9zZXRfd2luZG93KGNhbSwgd2luKSkKKwkJCQlnb3RvIGlvY3RsX2ZhaWw7CisKKwkJCWlmICh3OTk2OGNmX3N0YXJ0X3RyYW5zZmVyKGNhbSkpCisJCQkJZ290byBpb2N0bF9mYWlsOworCQl9CisKKwkJREJHKDUsICJWSURJT0NTV0lOIHN1Y2Nlc3NmdWxseSBjYWxsZWQuICIpCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DR1dJTjogLyogZ2V0IGN1cnJlbnQgd2luZG93IHByb3BlcnRpZXMgKi8KKwl7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCZjYW0tPndpbmRvdyxzaXplb2Yoc3RydWN0IHZpZGVvX3dpbmRvdykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJREJHKDUsICJWSURJT0NHV0lOIHN1Y2Nlc3NmdWxseSBjYWxsZWQiKQorCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ0dNQlVGOiAvKiByZXF1ZXN0IGZvciBtZW1vcnkgKG1hcHBlZCkgYnVmZmVyICovCisJeworCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiBtYnVmOworCQl1OCBpOworCisJCW1idWYuc2l6ZSA9IGNhbS0+bmJ1ZmZlcnMgKiBjYW0tPmZyYW1lWzBdLnNpemU7CisJCW1idWYuZnJhbWVzID0gY2FtLT5uYnVmZmVyczsKKwkJZm9yIChpID0gMDsgaSA8IGNhbS0+bmJ1ZmZlcnM7IGkrKykKKwkJCW1idWYub2Zmc2V0c1tpXSA9ICh1bnNpZ25lZCBsb25nKWNhbS0+ZnJhbWVbaV0uYnVmZmVyIC0KKwkJCSAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWNhbS0+ZnJhbWVbMF0uYnVmZmVyOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmbWJ1Ziwgc2l6ZW9mKG1idWYpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCURCRyg1LCAiVklESU9DR01CVUYgc3VjY2Vzc2Z1bGx5IGNhbGxlZCIpCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DTUNBUFRVUkU6IC8qIHN0YXJ0IHRoZSBjYXB0dXJlIHRvIGEgZnJhbWUgKi8KKwl7CisJCXN0cnVjdCB2aWRlb19tbWFwIG1tYXA7CisJCXN0cnVjdCB3OTk2OGNmX2ZyYW1lX3QqIGZyOworCQlpbnQgZXJyID0gMDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJm1tYXAsIGFyZywgc2l6ZW9mKG1tYXApKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCURCRyg2LCAiVklESU9DTUNBUFRVUkUgY2FsbGVkOiBmcmFtZSAjJXUsIGZvcm1hdD0lcywgJWR4JWQiLAorCQkgICAgbW1hcC5mcmFtZSwgc3ltYm9saWModjRsMV9wbGlzdCwgbW1hcC5mb3JtYXQpLCAKKwkJICAgIG1tYXAud2lkdGgsIG1tYXAuaGVpZ2h0KQorCisJCWlmIChtbWFwLmZyYW1lID49IGNhbS0+bmJ1ZmZlcnMpIHsKKwkJCURCRyg0LCAiSW52YWxpZCBmcmFtZSBudW1iZXIgKCV1KS4gIgorCQkJICAgICAgICJWSURJT0NNQ0FQVFVSRSBmYWlsZWQiLCBtbWFwLmZyYW1lKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAobW1hcC5mb3JtYXQhPWNhbS0+cGljdHVyZS5wYWxldHRlICYmIAorCQkgICAgKGNhbS0+Zm9yY2VfcGFsZXR0ZSB8fCAhdzk5NjhjZl92cHApKSB7CisJCQlEQkcoNCwgIlBhbGV0dGUgJXMgcmVqZWN0ZWQ6IG9ubHkgJXMgaXMgYWxsb3dlZCIsCisJCQkgICAgc3ltYm9saWModjRsMV9wbGlzdCwgbW1hcC5mb3JtYXQpLAorCQkJICAgIHN5bWJvbGljKHY0bDFfcGxpc3QsIGNhbS0+cGljdHVyZS5wYWxldHRlKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKCF3OTk2OGNmX3ZhbGlkX3BhbGV0dGUobW1hcC5mb3JtYXQpKSB7CisJCQlEQkcoNCwgIlBhbGV0dGUgJXMgbm90IHN1cHBvcnRlZC4gIgorCQkJICAgICAgICJWSURJT0NNQ0FQVFVSRSBmYWlsZWQiLCAKKwkJCSAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBtbWFwLmZvcm1hdCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmICghY2FtLT5mb3JjZV9wYWxldHRlKSB7CisJCSAgIGlmIChjYW0tPmRlY29tcHJlc3Npb24gPT0gMCkgeworCQkgICAgICBpZiAodzk5NjhjZl9uZWVkX2RlY29tcHJlc3Npb24obW1hcC5mb3JtYXQpKSB7CisJCSAgICAgICAgIERCRyg0LCAiRGVjb21wcmVzc2lvbiBkaXNhYmxlZDogcGFsZXR0ZSAlcyBpcyBub3QgIgorCQkgICAgICAgICAgICAgICAgImFsbG93ZWQuIFZJRElPQ1NQSUNUIGZhaWxlZCIsCisJCSAgICAgICAgICAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBtbWFwLmZvcm1hdCkpCisJCSAgICAgICAgIHJldHVybiAtRUlOVkFMOworCQkgICAgICB9CisJCSAgIH0gZWxzZSBpZiAoY2FtLT5kZWNvbXByZXNzaW9uID09IDEpIHsKKwkJICAgICAgaWYgKCF3OTk2OGNmX25lZWRfZGVjb21wcmVzc2lvbihtbWFwLmZvcm1hdCkpIHsKKwkJICAgICAgICAgREJHKDQsICJEZWNvbXByZXNzaW9uIGZvcmNlZDogcGFsZXR0ZSAlcyBpcyBub3QgIgorCQkgICAgICAgICAgICAgICAgImFsbG93ZWQuIFZJRElPQ1NQSUNUIGZhaWxlZCIsCisJCSAgICAgICAgICAgICBzeW1ib2xpYyh2NGwxX3BsaXN0LCBtbWFwLmZvcm1hdCkpCisJCSAgICAgICAgIHJldHVybiAtRUlOVkFMOworCQkgICAgICB9CisJCSAgIH0KKwkJfQorCisJCWlmICgoZXJyID0gdzk5NjhjZl9hZGp1c3Rfd2luZG93X3NpemUoY2FtLCAodTE2KikmbW1hcC53aWR0aCwgCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUxNiopJm1tYXAuaGVpZ2h0KSkpIHsKKwkJCURCRyg0LCAiUmVzb2x1dGlvbiBub3Qgc3VwcG9ydGVkICglZHglZCkuICIKKwkJCSAgICAgICAiVklESU9DTUNBUFRVUkUgZmFpbGVkIiwKKwkJCSAgICBtbWFwLndpZHRoLCBtbWFwLmhlaWdodCkKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQlmciA9ICZjYW0tPmZyYW1lW21tYXAuZnJhbWVdOworCisJCWlmIChtbWFwLndpZHRoICAhPSBjYW0tPndpbmRvdy53aWR0aCB8fAorCQkgICAgbW1hcC5oZWlnaHQgIT0gY2FtLT53aW5kb3cuaGVpZ2h0IHx8CisJCSAgICBtbWFwLmZvcm1hdCAhPSBjYW0tPnBpY3R1cmUucGFsZXR0ZSkgeworCisJCQlzdHJ1Y3QgdmlkZW9fd2luZG93IHdpbjsKKwkJCXN0cnVjdCB2aWRlb19waWN0dXJlIHBpY3Q7CisKKwkJCWlmKCpjYW0tPnJlcXVlc3RlZF9mcmFtZQorCQkJICAgfHwgY2FtLT5mcmFtZV9jdXJyZW50LT5xdWV1ZWQpIHsKKwkJCQlEQkcoNiwgIlZJRElPQ01DQVBUVVJFLiBDaGFuZ2Ugc2V0dGluZ3MgZm9yICIKKwkJCQkgICAgICAgImZyYW1lICMldTogJWR4JWQsIGZvcm1hdCAlcy4gV2FpdC4uLiIsCisJCQkJICAgIG1tYXAuZnJhbWUsIG1tYXAud2lkdGgsIG1tYXAuaGVpZ2h0LAorCQkJICAgICAgICAgICAgc3ltYm9saWModjRsMV9wbGlzdCwgbW1hcC5mb3JtYXQpKQorCQkJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZQorCQkJCSAgICAgICggY2FtLT53YWl0X3F1ZXVlLAorCQkJCSAgICAgICAgY2FtLT5kaXNjb25uZWN0ZWQgfHwKKwkJCQkgICAgICAgICghKmNhbS0+cmVxdWVzdGVkX2ZyYW1lICYmCisJCQkJICAgICAgICAgIWNhbS0+ZnJhbWVfY3VycmVudC0+cXVldWVkKSApOworCQkJCWlmIChlcnIpCisJCQkJCXJldHVybiBlcnI7CisJCQkJaWYgKGNhbS0+ZGlzY29ubmVjdGVkKQorCQkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0KKworCQkJbWVtY3B5KCZ3aW4sICZjYW0tPndpbmRvdywgc2l6ZW9mKHdpbikpOworCQkJbWVtY3B5KCZwaWN0LCAmY2FtLT5waWN0dXJlLCBzaXplb2YocGljdCkpOworCQkJd2luLndpZHRoID0gbW1hcC53aWR0aDsKKwkJCXdpbi5oZWlnaHQgPSBtbWFwLmhlaWdodDsKKwkJCXBpY3QucGFsZXR0ZSA9IG1tYXAuZm9ybWF0OworCisJCQlpZiAodzk5NjhjZl9zdG9wX3RyYW5zZmVyKGNhbSkpCisJCQkJZ290byBpb2N0bF9mYWlsOworCisJCQkvKiBUaGlzIGJlZm9yZSBzZXRfd2luZG93ICovCisJCQlpZiAodzk5NjhjZl9zZXRfcGljdHVyZShjYW0sIHBpY3QpKSAKKwkJCQlnb3RvIGlvY3RsX2ZhaWw7CisKKwkJCWlmICh3OTk2OGNmX3NldF93aW5kb3coY2FtLCB3aW4pKQorCQkJCWdvdG8gaW9jdGxfZmFpbDsKKworCQkJaWYgKHc5OTY4Y2Zfc3RhcnRfdHJhbnNmZXIoY2FtKSkKKwkJCQlnb3RvIGlvY3RsX2ZhaWw7CisKKwkJfSBlbHNlIAlpZiAoZnItPnF1ZXVlZCkgeworCisJCQlEQkcoNiwgIldhaXQgdW50aWwgZnJhbWUgIyV1IGlzIGZyZWUiLCBtbWFwLmZyYW1lKQorCQkJCisJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY2FtLT53YWl0X3F1ZXVlLCAKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW0tPmRpc2Nvbm5lY3RlZCB8fAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghZnItPnF1ZXVlZCkpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQkJaWYgKGNhbS0+ZGlzY29ubmVjdGVkKQorCQkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJdzk5NjhjZl9wdXNoX2ZyYW1lKGNhbSwgbW1hcC5mcmFtZSk7CisJCURCRyg1LCAiVklESU9DTUNBUFRVUkUoJXUpOiBzdWNjZXNzZnVsbHkgY2FsbGVkIiwgbW1hcC5mcmFtZSkKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NTWU5DOiAvKiB3YWl0IHVudGlsIHRoZSBjYXB0dXJlIG9mIGEgZnJhbWUgaXMgZmluaXNoZWQgKi8KKwl7CisJCXVuc2lnbmVkIGludCBmX251bTsKKwkJc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCogZnI7CisJCWludCBlcnIgPSAwOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmZl9udW0sIGFyZywgc2l6ZW9mKGZfbnVtKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoZl9udW0gPj0gY2FtLT5uYnVmZmVycykgeworCQkJREJHKDQsICJJbnZhbGlkIGZyYW1lIG51bWJlciAoJXUpLiAiCisJCQkgICAgICAgIlZJRElPQ01DQVBUVVJFIGZhaWxlZCIsIGZfbnVtKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlEQkcoNiwgIlZJRElPQ1NZTkMgY2FsbGVkIGZvciBmcmFtZSAjJXUiLCBmX251bSkKKworCQlmciA9ICZjYW0tPmZyYW1lW2ZfbnVtXTsKKworCQlzd2l0Y2ggKGZyLT5zdGF0dXMpIHsKKwkJY2FzZSBGX1VOVVNFRDoKKwkJCWlmICghZnItPnF1ZXVlZCkgeworCQkJCURCRyg0LCAiVklESU9TWU5DOiBGcmFtZSAjJXUgbm90IHJlcXVlc3RlZCEiLAorCQkJCSAgICBmX251bSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJY2FzZSBGX0VSUk9SOgorCQljYXNlIEZfR1JBQkJJTkc6CisJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY2FtLT53YWl0X3F1ZXVlLCAKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnItPnN0YXR1cyA9PSBGX1JFQURZKQorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNhbS0+ZGlzY29ubmVjdGVkKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJCWlmIChjYW0tPmRpc2Nvbm5lY3RlZCkKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCWJyZWFrOworCQljYXNlIEZfUkVBRFk6CisJCQlicmVhazsKKwkJfQorCisJCWlmICh3OTk2OGNmX3ZwcCkKKwkJCXc5OTY4Y2ZfcG9zdHByb2Nlc3NfZnJhbWUoY2FtLCBmcik7CisKKwkJZnItPnN0YXR1cyA9IEZfVU5VU0VEOworCisJCURCRyg1LCAiVklESU9DU1lOQygldSkgc3VjY2Vzc2Z1bGx5IGNhbGxlZCIsIGZfbnVtKQorCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ0dVTklUOi8qIHJlcG9ydCB0aGUgdW5pdCBudW1iZXJzIG9mIHRoZSBhc3NvY2lhdGVkIGRldmljZXMqLworCXsKKwkJc3RydWN0IHZpZGVvX3VuaXQgdW5pdCA9IHsKKwkJCS52aWRlbyA9IGNhbS0+djRsZGV2LT5taW5vciwKKwkJCS52YmkgPSBWSURFT19OT19VTklULAorCQkJLnJhZGlvID0gVklERU9fTk9fVU5JVCwKKwkJCS5hdWRpbyA9IFZJREVPX05PX1VOSVQsCisJCQkudGVsZXRleHQgPSBWSURFT19OT19VTklULAorCQl9OworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdW5pdCwgc2l6ZW9mKHVuaXQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCURCRyg1LCAiVklESU9DR1VOSVQgc3VjY2Vzc2Z1bGx5IGNhbGxlZCIpCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DS0VZOgorCQlyZXR1cm4gMDsKKworCWNhc2UgVklESU9DR0ZCVUY6CisJeworCQlpZiAoY2xlYXJfdXNlcihhcmcsIHNpemVvZihzdHJ1Y3QgdmlkZW9fYnVmZmVyKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlEQkcoNSwgIlZJRElPQ0dGQlVGIHN1Y2Nlc3NmdWxseSBjYWxsZWQiKQorCQlyZXR1cm4gMDsKKwl9CisKKwljYXNlIFZJRElPQ0dUVU5FUjoKKwl7CisJCXN0cnVjdCB2aWRlb190dW5lciB0dW5lcjsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0dW5lciwgYXJnLCBzaXplb2YodHVuZXIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmICh0dW5lci50dW5lciAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJc3RyY3B5KHR1bmVyLm5hbWUsICJub190dW5lciIpOworCQl0dW5lci5yYW5nZWxvdyA9IDA7CisJCXR1bmVyLnJhbmdlaGlnaCA9IDA7CisJCXR1bmVyLmZsYWdzID0gVklERU9fVFVORVJfTk9STTsKKwkJdHVuZXIubW9kZSA9IFZJREVPX01PREVfQVVUTzsKKwkJdHVuZXIuc2lnbmFsID0gMHhmZmZmOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdHVuZXIsIHNpemVvZih0dW5lcikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJREJHKDUsICJWSURJT0NHVFVORVIgc3VjY2Vzc2Z1bGx5IGNhbGxlZCIpCisJCXJldHVybiAwOworCX0KKworCWNhc2UgVklESU9DU1RVTkVSOgorCXsKKwkJc3RydWN0IHZpZGVvX3R1bmVyIHR1bmVyOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnR1bmVyLCBhcmcsIHNpemVvZih0dW5lcikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJaWYgKHR1bmVyLnR1bmVyICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAodHVuZXIubW9kZSAhPSBWSURFT19NT0RFX0FVVE8pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlEQkcoNSwgIlZJRElPQ1NUVU5FUiBzdWNjZXNzZnVsbHkgY2FsbGVkIikKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWSURJT0NTRkJVRjoKKwljYXNlIFZJRElPQ0NBUFRVUkU6CisJY2FzZSBWSURJT0NHRlJFUToKKwljYXNlIFZJRElPQ1NGUkVROgorCWNhc2UgVklESU9DR0FVRElPOgorCWNhc2UgVklESU9DU0FVRElPOgorCWNhc2UgVklESU9DU1BMQVlNT0RFOgorCWNhc2UgVklESU9DU1dSSVRFTU9ERToKKwljYXNlIFZJRElPQ0dQTEFZSU5GTzoKKwljYXNlIFZJRElPQ1NNSUNST0NPREU6CisJY2FzZSBWSURJT0NHVkJJRk1UOgorCWNhc2UgVklESU9DU1ZCSUZNVDoKKwkJREJHKDQsICJVbnN1cHBvcnRlZCBWNEwxIElPQ3RsOiBWSURJT0MlcyAiCisJCSAgICAgICAiKHR5cGUgMHglMDFYLCAiCisJCSAgICAgICAibi4gMHglMDFYLCAiCisJCSAgICAgICAiZGlyLiAweCUwMVgsICIgCisJCSAgICAgICAic2l6ZSAweCUwMlgpIiwKKwkJICAgIFY0TDFfSU9DVEwoY21kKSwKKwkJICAgIF9JT0NfVFlQRShjbWQpLF9JT0NfTlIoY21kKSxfSU9DX0RJUihjbWQpLF9JT0NfU0laRShjbWQpKQorCisJCXJldHVybiAtRUlOVkFMOworCisJZGVmYXVsdDoKKwkJREJHKDQsICJJbnZhbGlkIFY0TDEgSU9DdGw6IFZJRElPQyVzICIKKwkJICAgICAgICJ0eXBlIDB4JTAxWCwgIgorCQkgICAgICAgIm4uIDB4JTAxWCwgIgorCQkgICAgICAgImRpci4gMHglMDFYLCAiCisJCSAgICAgICAic2l6ZSAweCUwMlgiLAorCQkgICAgVjRMMV9JT0NUTChjbWQpLAorCQkgICAgX0lPQ19UWVBFKGNtZCksX0lPQ19OUihjbWQpLF9JT0NfRElSKGNtZCksX0lPQ19TSVpFKGNtZCkpCisKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKworCX0gLyogZW5kIG9mIHN3aXRjaCAqLworCitpb2N0bF9mYWlsOgorCWNhbS0+bWlzY29uZmlndXJlZCA9IDE7CisJREJHKDEsICJWSURJT0MlcyBmYWlsZWQgYmVjYXVzZSBvZiBoYXJkd2FyZSBwcm9ibGVtcy4gIgorCSAgICAgICAiVG8gdXNlIHRoZSBjYW1lcmEsIGNsb3NlIGFuZCBvcGVuIGl0IGFnYWluLiIsIFY0TDFfSU9DVEwoY21kKSkKKwlyZXR1cm4gLUVGQVVMVDsKK30KKworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3OTk2OGNmX2ZvcHMgPSB7CisJLm93bmVyID0gICBUSElTX01PRFVMRSwKKwkub3BlbiA9ICAgIHc5OTY4Y2Zfb3BlbiwKKwkucmVsZWFzZSA9IHc5OTY4Y2ZfcmVsZWFzZSwKKwkucmVhZCA9ICAgIHc5OTY4Y2ZfcmVhZCwKKwkuaW9jdGwgPSAgIHc5OTY4Y2ZfaW9jdGwsCisJLm1tYXAgPSAgICB3OTk2OGNmX21tYXAsCisJLmxsc2VlayA9ICBub19sbHNlZWssCit9OworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFVTQiBwcm9iZSBhbmQgVjRMIHJlZ2lzdHJhdGlvbiwgZGlzY29ubmVjdCBhbmQgaWRfdGFibGVbXSBkZWZpbml0aW9uICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludAordzk5NjhjZl91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UqIGludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkKiBpZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW07CisJaW50IGVyciA9IDA7CisJZW51bSB3OTk2OGNmX21vZGVsX2lkIG1vZF9pZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkKiBwdHI7CisJdTggc2MgPSAwOyAvKiBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIGNhbWVyYXMgKi8KKwlzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGV2X25yID0gMDsgLyogd2UgYXJlIGhhbmRsaW5nIGRldmljZSBudW1iZXIgbiAqLworCisJaWYgKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICA9PSB3aW5ib25kX2lkX3RhYmxlWzBdLmlkVmVuZG9yICYmCisJICAgIGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSB3aW5ib25kX2lkX3RhYmxlWzBdLmlkUHJvZHVjdCkKKwkJbW9kX2lkID0gVzk5NjhDRl9NT0RfQ0xWQldHUDsgLyogc2VlIGNhbWxpc3RbXSB0YWJsZSAqLworCWVsc2UgaWYgKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICA9PSB3aW5ib25kX2lkX3RhYmxlWzFdLmlkVmVuZG9yICYmCisJICAgICAgICAgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IHdpbmJvbmRfaWRfdGFibGVbMV0uaWRQcm9kdWN0KQorCQltb2RfaWQgPSBXOTk2OENGX01PRF9HRU5FUklDOyAvKiBzZWUgY2FtbGlzdFtdIHRhYmxlICovCisJZWxzZQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWNhbSA9IChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKQorCSAgICAgICAgICBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhbSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQoY2FtLCAwLCBzaXplb2YoKmNhbSkpOworCisJaW5pdF9NVVRFWCgmY2FtLT5kZXZfc2VtKTsKKwlkb3duKCZjYW0tPmRldl9zZW0pOworCisJY2FtLT51c2JkZXYgPSB1ZGV2OworCS8qIE5PVEU6IGEgbG9jYWwgY29weSBpcyB1c2VkIHRvIGF2b2lkIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucyAqLworCW1lbWNweSgmY2FtLT5kZXYsICZ1ZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgZGV2aWNlKSk7CisKKwlEQkcoMiwgIiVzIGRldGVjdGVkIiwgc3ltYm9saWMoY2FtbGlzdCwgbW9kX2lkKSkKKworCWlmIChzaW1jYW1zID4gVzk5NjhDRl9NQVhfREVWSUNFUykKKwkJc2ltY2FtcyA9IFc5OTY4Q0ZfU0lNQ0FNUzsKKworCS8qIEhvdyBtYW55IGNhbWVyYXMgYXJlIGNvbm5lY3RlZCA/ICovCisJZG93bigmdzk5NjhjZl9kZXZsaXN0X3NlbSk7CisJbGlzdF9mb3JfZWFjaChwdHIsICZ3OTk2OGNmX2Rldl9saXN0KQorCQlzYysrOworCXVwKCZ3OTk2OGNmX2Rldmxpc3Rfc2VtKTsKKworCWlmIChzYyA+PSBzaW1jYW1zKSB7CisJCURCRygyLCAiRGV2aWNlIHJlamVjdGVkOiB0b28gbWFueSBjb25uZWN0ZWQgY2FtZXJhcyAiCisJCSAgICAgICAiKG1heC4gJXUpIiwgc2ltY2FtcykKKwkJZXJyID0gLUVQRVJNOworCQlnb3RvIGZhaWw7CisJfQorCisKKwkvKiBBbGxvY2F0ZSAyIGJ5dGVzIG9mIG1lbW9yeSBmb3IgY2FtZXJhIGNvbnRyb2wgVVNCIHRyYW5zZmVycyAqLworCWlmICghKGNhbS0+Y29udHJvbF9idWZmZXIgPSAodTE2KilrbWFsbG9jKDIsIEdGUF9LRVJORUwpKSkgeworCQlEQkcoMSwiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBjYW1lcmEgY29udHJvbCB0cmFuc2ZlcnMiKQorCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCW1lbXNldChjYW0tPmNvbnRyb2xfYnVmZmVyLCAwLCAyKTsKKworCS8qIEFsbG9jYXRlIDggYnl0ZXMgb2YgbWVtb3J5IGZvciBVU0IgZGF0YSB0cmFuc2ZlcnMgdG8gdGhlIEZTQiAqLworCWlmICghKGNhbS0+ZGF0YV9idWZmZXIgPSAodTE2KilrbWFsbG9jKDgsIEdGUF9LRVJORUwpKSkgeworCQlEQkcoMSwgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgZGF0YSAiCisJCSAgICAgICAidHJhbnNmZXJzIHRvIHRoZSBGU0IiKQorCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCW1lbXNldChjYW0tPmRhdGFfYnVmZmVyLCAwLCA4KTsKKworCS8qIFJlZ2lzdGVyIHRoZSBWNEwgZGV2aWNlICovCisJY2FtLT52NGxkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAoIWNhbS0+djRsZGV2KSB7CisJCURCRygxLCAiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgYSBWNEwgc3RydWN0dXJlIikKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCXN0cmNweShjYW0tPnY0bGRldi0+bmFtZSwgc3ltYm9saWMoY2FtbGlzdCwgbW9kX2lkKSk7CisJY2FtLT52NGxkZXYtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY2FtLT52NGxkZXYtPnR5cGUgPSBWSURfVFlQRV9DQVBUVVJFIHwgVklEX1RZUEVfU0NBTEVTOworCWNhbS0+djRsZGV2LT5oYXJkd2FyZSA9IFZJRF9IQVJEV0FSRV9XOTk2OENGOworCWNhbS0+djRsZGV2LT5mb3BzID0gJnc5OTY4Y2ZfZm9wczsKKwljYW0tPnY0bGRldi0+bWlub3IgPSB2aWRlb19ucltkZXZfbnJdOworCWNhbS0+djRsZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CisJdmlkZW9fc2V0X2RydmRhdGEoY2FtLT52NGxkZXYsIGNhbSk7CisJY2FtLT52NGxkZXYtPmRldiA9ICZjYW0tPmRldjsKKworCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShjYW0tPnY0bGRldiwgVkZMX1RZUEVfR1JBQkJFUiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9fbnJbZGV2X25yXSk7CisJaWYgKGVycikgeworCQlEQkcoMSwgIlY0TCBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZCIpCisJCWlmIChlcnIgPT0gLUVORklMRSAmJiB2aWRlb19ucltkZXZfbnJdID09IC0xKQorCQkJREJHKDIsICJDb3VsZG4ndCBmaW5kIGEgZnJlZSAvZGV2L3ZpZGVvWCBub2RlIikKKwkJdmlkZW9fbnJbZGV2X25yXSA9IC0xOworCQlkZXZfbnIgPSAoZGV2X25yIDwgVzk5NjhDRl9NQVhfREVWSUNFUy0xKSA/IGRldl9ucisxIDogMDsKKwkJZ290byBmYWlsOworCX0KKworCURCRygyLCAiVjRMIGRldmljZSByZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZCIsIGNhbS0+djRsZGV2LT5taW5vcikKKworCS8qIFNldCBzb21lIGJhc2ljIGNvbnN0YW50cyAqLworCXc5OTY4Y2ZfY29uZmlndXJlX2NhbWVyYShjYW0sIHVkZXYsIG1vZF9pZCwgZGV2X25yKTsKKworCS8qIEFkZCBhIG5ldyBlbnRyeSBpbnRvIHRoZSBsaXN0IG9mIFY0TCByZWdpc3RlcmVkIGRldmljZXMgKi8KKwlkb3duKCZ3OTk2OGNmX2Rldmxpc3Rfc2VtKTsKKwlsaXN0X2FkZCgmY2FtLT52NGxsaXN0LCAmdzk5NjhjZl9kZXZfbGlzdCk7CisJdXAoJnc5OTY4Y2ZfZGV2bGlzdF9zZW0pOworCWRldl9uciA9IChkZXZfbnIgPCBXOTk2OENGX01BWF9ERVZJQ0VTLTEpID8gZGV2X25yKzEgOiAwOworCisJdzk5NjhjZl90dXJuX29uX2xlZChjYW0pOworCisJdzk5NjhjZl9pMmNfaW5pdChjYW0pOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjYW0pOworCXVwKCZjYW0tPmRldl9zZW0pOworCXJldHVybiAwOworCitmYWlsOiAvKiBGcmVlIHVudXNlZCBtZW1vcnkgKi8KKwlpZiAoY2FtLT5jb250cm9sX2J1ZmZlcikKKwkJa2ZyZWUoY2FtLT5jb250cm9sX2J1ZmZlcik7CisJaWYgKGNhbS0+ZGF0YV9idWZmZXIpCisJCWtmcmVlKGNhbS0+ZGF0YV9idWZmZXIpOworCWlmIChjYW0tPnY0bGRldikKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoY2FtLT52NGxkZXYpOworCXVwKCZjYW0tPmRldl9zZW0pOworCWtmcmVlKGNhbSk7CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgdm9pZCB3OTk2OGNmX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlKiBpbnRmKQoreworCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtID0gCisJICAgKHN0cnVjdCB3OTk2OGNmX2RldmljZSopdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWRvd25fd3JpdGUoJnc5OTY4Y2ZfZGlzY29ubmVjdCk7CisKKwlpZiAoY2FtKSB7CisJCS8qIFByZXZlbnQgY29uY3VycmVudCBhY2Nlc3NlcyB0byBkYXRhICovCisJCWRvd24oJmNhbS0+ZGV2X3NlbSk7IAorCisJCWNhbS0+ZGlzY29ubmVjdGVkID0gMTsKKworCQlEQkcoMiwgIkRpc2Nvbm5lY3RpbmcgJXMuLi4iLCBzeW1ib2xpYyhjYW1saXN0LCBjYW0tPmlkKSkKKworCQl3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKCZjYW0tPm9wZW4pOworCisJCWlmIChjYW0tPnVzZXJzKSB7CisJCQlEQkcoMiwgIlRoZSBkZXZpY2UgaXMgb3BlbiAoL2Rldi92aWRlbyVkKSEgIgorCQkJICAgICAgICJQcm9jZXNzIG5hbWU6ICVzLiBEZXJlZ2lzdHJhdGlvbiBhbmQgbWVtb3J5ICIKKwkJCSAgICAgICAiZGVhbGxvY2F0aW9uIGFyZSBkZWZlcnJlZCBvbiBjbG9zZS4iLAorCQkJICAgIGNhbS0+djRsZGV2LT5taW5vciwgY2FtLT5jb21tYW5kKQorCQkJY2FtLT5taXNjb25maWd1cmVkID0gMTsKKwkJCXc5OTY4Y2Zfc3RvcF90cmFuc2ZlcihjYW0pOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjYW0tPndhaXRfcXVldWUpOworCQl9IGVsc2UKKwkJCXc5OTY4Y2ZfcmVsZWFzZV9yZXNvdXJjZXMoY2FtKTsKKworCQl1cCgmY2FtLT5kZXZfc2VtKTsKKworCQlpZiAoIWNhbS0+dXNlcnMpCisJCQlrZnJlZShjYW0pOworCX0KKworCXVwX3dyaXRlKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB3OTk2OGNmX3VzYl9kcml2ZXIgPSB7CisJLm93bmVyID0gICAgICBUSElTX01PRFVMRSwKKwkubmFtZSA9ICAgICAgICJ3OTk2OGNmIiwKKwkuaWRfdGFibGUgPSAgIHdpbmJvbmRfaWRfdGFibGUsCisJLnByb2JlID0gICAgICB3OTk2OGNmX3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IHc5OTY4Y2ZfdXNiX2Rpc2Nvbm5lY3QsCit9OworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1vZHVsZSBpbml0LCBleGl0IGFuZCBpbnRlcm1vZHVsZSBjb21tdW5pY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCB3OTk2OGNmX3ZwcG1vZF9kZXRlY3Qoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCit7CisJaWYgKCF3OTk2OGNmX3ZwcCkKKwkJaWYgKHZwcG1vZF9sb2FkKQorCQkJcmVxdWVzdF9tb2R1bGUoInc5OTY4Y2YtdnBwIik7CisKKwlkb3duKCZ3OTk2OGNmX3ZwcG1vZF9sb2NrKTsKKworCWlmICghdzk5NjhjZl92cHApIHsKKwkJREJHKDQsICJWaWRlbyBwb3N0LXByb2Nlc3NpbmcgbW9kdWxlIG5vdCBkZXRlY3RlZCIpCisJCXc5OTY4Y2ZfYWRqdXN0X2NvbmZpZ3VyYXRpb24oY2FtKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCF0cnlfbW9kdWxlX2dldCh3OTk2OGNmX3ZwcC0+b3duZXIpKSB7CisJCURCRygxLCAiQ291bGRuJ3QgaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgIgorCQkgICAgICAgInRoZSB2aWRlbyBwb3N0LXByb2Nlc3NpbmcgbW9kdWxlIikKKwkJdXAoJnc5OTY4Y2ZfdnBwbW9kX2xvY2spOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisKKwl3OTk2OGNmX3ZwcC0+YnVzeSsrOworCisJREJHKDUsICJWaWRlbyBwb3N0LXByb2Nlc3NpbmcgbW9kdWxlIGRldGVjdGVkIikKKworb3V0OgorCXVwKCZ3OTk2OGNmX3ZwcG1vZF9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCB3OTk2OGNmX3ZwcG1vZF9yZWxlYXNlKHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQoreworCWRvd24oJnc5OTY4Y2ZfdnBwbW9kX2xvY2spOworCisJaWYgKHc5OTY4Y2ZfdnBwICYmIHc5OTY4Y2ZfdnBwLT5idXN5KSB7CisJCW1vZHVsZV9wdXQodzk5NjhjZl92cHAtPm93bmVyKTsKKwkJdzk5NjhjZl92cHAtPmJ1c3ktLTsKKwkJd2FrZV91cCgmdzk5NjhjZl92cHBtb2Rfd2FpdCk7CisJCURCRyg1LCAiVmlkZW8gcG9zdC1wcm9jZXNzaW5nIG1vZHVsZSByZWxlYXNlZCIpCisJfQorCisJdXAoJnc5OTY4Y2ZfdnBwbW9kX2xvY2spOworfQorCisKK2ludCB3OTk2OGNmX3ZwcG1vZF9yZWdpc3RlcihzdHJ1Y3Qgdzk5NjhjZl92cHBfdCogdnBwKQoreworCWRvd24oJnc5OTY4Y2ZfdnBwbW9kX2xvY2spOworCisJaWYgKHc5OTY4Y2ZfdnBwKSB7CisJCUtEQkcoMSwgIlZpZGVvIHBvc3QtcHJvY2Vzc2luZyBtb2R1bGUgYWxyZWFkeSByZWdpc3RlcmVkIikKKwkJdXAoJnc5OTY4Y2ZfdnBwbW9kX2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3OTk2OGNmX3ZwcCA9IHZwcDsKKwl3OTk2OGNmX3ZwcC0+YnVzeSA9IDA7CisKKwlLREJHKDIsICJWaWRlbyBwb3N0LXByb2Nlc3NpbmcgbW9kdWxlIHJlZ2lzdGVyZWQiKQorCXVwKCZ3OTk2OGNmX3ZwcG1vZF9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworCitpbnQgdzk5NjhjZl92cHBtb2RfZGVyZWdpc3RlcihzdHJ1Y3Qgdzk5NjhjZl92cHBfdCogdnBwKQoreworCWRvd24oJnc5OTY4Y2ZfdnBwbW9kX2xvY2spOworCisJaWYgKCF3OTk2OGNmX3ZwcCkgeworCQl1cCgmdzk5NjhjZl92cHBtb2RfbG9jayk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh3OTk2OGNmX3ZwcCAhPSB2cHApIHsKKwkJS0RCRygxLCAiT25seSB0aGUgb3duZXIgY2FuIHVucmVnaXN0ZXIgdGhlIHZpZGVvICIKKwkJICAgICAgICAicG9zdC1wcm9jZXNzaW5nIG1vZHVsZSIpCisJCXVwKCZ3OTk2OGNmX3ZwcG1vZF9sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHc5OTY4Y2ZfdnBwLT5idXN5KSB7CisJCUtEQkcoMiwgIlZpZGVvIHBvc3QtcHJvY2Vzc2luZyBtb2R1bGUgYnVzeS4gV2FpdCBmb3IgaXQgdG8gYmUgIgorCQkgICAgICAgICJyZWxlYXNlZC4uLiIpCisJCXVwKCZ3OTk2OGNmX3ZwcG1vZF9sb2NrKTsKKwkJd2FpdF9ldmVudCh3OTk2OGNmX3ZwcG1vZF93YWl0LCAhdzk5NjhjZl92cHAtPmJ1c3kpOworCQl3OTk2OGNmX3ZwcCA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCXc5OTY4Y2ZfdnBwID0gTlVMTDsKKworCXVwKCZ3OTk2OGNmX3ZwcG1vZF9sb2NrKTsKKworb3V0OgorCUtEQkcoMiwgIlZpZGVvIHBvc3QtcHJvY2Vzc2luZyBtb2R1bGUgdW5yZWdpc3RlcmVkIikKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IF9faW5pdCB3OTk2OGNmX21vZHVsZV9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCUtEQkcoMiwgVzk5NjhDRl9NT0RVTEVfTkFNRSIgIlc5OTY4Q0ZfTU9EVUxFX1ZFUlNJT04pCisJS0RCRygzLCBXOTk2OENGX01PRFVMRV9BVVRIT1IpCisKKwlpZiAob3Ztb2RfbG9hZCkKKwkJcmVxdWVzdF9tb2R1bGUoIm92Y2FtY2hpcCIpOworCisJaWYgKChlcnIgPSB1c2JfcmVnaXN0ZXIoJnc5OTY4Y2ZfdXNiX2RyaXZlcikpKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IHc5OTY4Y2ZfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwkvKiB3OTk2OGNmX3VzYl9kaXNjb25uZWN0KCkgd2lsbCBiZSBjYWxsZWQgKi8KKwl1c2JfZGVyZWdpc3Rlcigmdzk5NjhjZl91c2JfZHJpdmVyKTsKKworCUtEQkcoMiwgVzk5NjhDRl9NT0RVTEVfTkFNRSIgZGVyZWdpc3RlcmVkIikKK30KKworCittb2R1bGVfaW5pdCh3OTk2OGNmX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KHc5OTY4Y2ZfbW9kdWxlX2V4aXQpOworCisKK0VYUE9SVF9TWU1CT0wodzk5NjhjZl92cHBtb2RfcmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTCh3OTk2OGNmX3ZwcG1vZF9kZXJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2YuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWNiZmUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWVkaWEvdzk5NjhjZi5oCkBAIC0wLDAgKzEsMzM5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWaWRlbzRMaW51eCBkcml2ZXIgZm9yIFc5OTZbODddQ0YgSlBFRyBVU0IgRHVhbCBNb2RlIENhbWVyYSBDaGlwLiAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICAgICAgICAgICAqCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9XOTk2OENGX0hfCisjZGVmaW5lIF9XOTk2OENGX0hfCisKKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisKKyNpbmNsdWRlIDxtZWRpYS9vdmNhbWNoaXAuaD4KKworI2luY2x1ZGUgInc5OTY4Y2ZfdnBwLmgiCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmF1bHQgdmFsdWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBXOTk2OENGX09WTU9EX0xPQUQgICAgICAxICAvKiBhdXRvbWF0aWMgJ292Y2FtY2hpcCcgbW9kdWxlIGxvYWRpbmcgKi8KKyNkZWZpbmUgVzk5NjhDRl9WUFBNT0RfTE9BRCAgICAgMSAgLyogYXV0b21hdGljICd3OTk2OGNmLXZwcCcgbW9kdWxlIGxvYWRpbmcgKi8KKworLyogQ29tbWVudC91bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIGVuYWJsZS9kaXNhYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyAqLworI2RlZmluZSBXOTk2OENGX0RFQlVHCisKKy8qIFRoZXNlIGhhdmUgZWZmZWN0IG9ubHkgaWYgVzk5NjhDRl9ERUJVRyBpcyBkZWZpbmVkICovCisjZGVmaW5lIFc5OTY4Q0ZfREVCVUdfTEVWRUwgICAgMiAvKiBmcm9tIDAgdG8gNi4gMCBmb3Igbm8gZGVidWcgaW5mb3JtYXRpb25zICovCisjZGVmaW5lIFc5OTY4Q0ZfU1BFQ0lGSUNfREVCVUcgMCAvKiAwIG9yIDEgKi8KKworI2RlZmluZSBXOTk2OENGX01BWF9ERVZJQ0VTICAgIDMyCisjZGVmaW5lIFc5OTY4Q0ZfU0lNQ0FNUyAgICAgICAgVzk5NjhDRl9NQVhfREVWSUNFUyAvKiBzaW11bHRhbmVvdXMgY2FtZXJhcyAqLworCisjZGVmaW5lIFc5OTY4Q0ZfTUFYX0JVRkZFUlMgICAzMgorI2RlZmluZSBXOTk2OENGX0JVRkZFUlMgICAgICAgMiAvKiBuLiBvZiBmcmFtZSBidWZmZXJzIGZyb20gMiB0byBNQVhfQlVGRkVSUyAqLworCisvKiBNYXhpbXVtIGRhdGEgcGF5bG9hZCBzaXplcyBpbiBieXRlcyBmb3IgYWx0ZXJuYXRlIHNldHRpbmdzICovCitzdGF0aWMgY29uc3QgdTE2IHdNYXhQYWNrZXRTaXplW10gPSB7MTAyMywgOTU5LCA4OTUsIDgzMSwgNzY3LCA3MDMsIDYzOSwgNTc1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MTEsIDQ0NywgMzgzLCAzMTksIDI1NSwgMTkxLCAxMjcsICA2M307CisjZGVmaW5lIFc5OTY4Q0ZfUEFDS0VUX1NJWkUgICAgICAxMDIzIC8qIGFjY29yZGluZyB0byB3TWF4UGFja2V0U2l6ZXNbXSAqLworI2RlZmluZSBXOTk2OENGX01JTl9QQUNLRVRfU0laRSAgNjMgLyogbWluaW11bSB2YWx1ZSAqLworI2RlZmluZSBXOTk2OENGX0lTT19QQUNLRVRTICAgICAgNSAvKiBuLm9mIHBhY2tldHMgZm9yIGlzb2Nocm9ub3VzIHRyYW5zZmVycyAqLworI2RlZmluZSBXOTk2OENGX1VTQl9DVFJMX1RJTUVPVVQgMTAwMCAvKiB0aW1lb3V0IChtcykgZm9yIHVzYiBjb250cm9sIGNvbW1hbmRzICovCisjZGVmaW5lIFc5OTY4Q0ZfVVJCUyAgICAgICAgICAgICAyIC8qIG4uIG9mIHNjaGVkdWxlZCBVUkJzIGZvciBJU08gdHJhbnNmZXIgKi8KKworI2RlZmluZSBXOTk2OENGX0kyQ19CVVNfREVMQVkgICAgNCAvKiBkZWxheSBpbiB1cyBmb3IgSTJDIGJpdCByL3cgb3BlcmF0aW9ucyAqLworI2RlZmluZSBXOTk2OENGX0kyQ19SV19SRVRSSUVTICAgMTUgLyogbnVtYmVyIG9mIG1heCBJMkMgci93IHJldHJpZXMgKi8KKworLyogQXZhaWxhYmxlIHZpZGVvIGZvcm1hdHMgKi8KK3N0cnVjdCB3OTk2OGNmX2Zvcm1hdCB7CisJY29uc3QgdTE2IHBhbGV0dGU7CisJY29uc3QgdTE2IGRlcHRoOworCWNvbnN0IHU4IGNvbXByZXNzaW9uOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB3OTk2OGNmX2Zvcm1hdCB3OTk2OGNmX2Zvcm1hdGxpc3RbXSA9IHsKKwl7IFZJREVPX1BBTEVUVEVfVVlWWSwgICAgMTYsIDAgfSwgLyogb3JpZ2luYWwgdmlkZW8gKi8KKwl7IFZJREVPX1BBTEVUVEVfWVVWNDIyUCwgMTYsIDEgfSwgLyogd2l0aCBKUEVHIGNvbXByZXNzaW9uICovCisJeyBWSURFT19QQUxFVFRFX1lVVjQyMFAsIDEyLCAxIH0sIC8qIHdpdGggSlBFRyBjb21wcmVzc2lvbiAqLworCXsgVklERU9fUEFMRVRURV9ZVVY0MjAsICAxMiwgMSB9LCAvKiBzYW1lIGFzIFlVVjQyMFAgKi8KKwl7IFZJREVPX1BBTEVUVEVfWVVZViwgICAgMTYsIDAgfSwgLyogc29mdHdhcmUgY29udmVyc2lvbiAqLworCXsgVklERU9fUEFMRVRURV9ZVVY0MjIsICAxNiwgMCB9LCAvKiBzb2Z0d2FyZSBjb252ZXJzaW9uICovCisJeyBWSURFT19QQUxFVFRFX0dSRVksICAgICA4LCAwIH0sIC8qIHNvZnR3YXJlIGNvbnZlcnNpb24gKi8KKwl7IFZJREVPX1BBTEVUVEVfUkdCNTU1LCAgMTYsIDAgfSwgLyogc29mdHdhcmUgY29udmVyc2lvbiAqLworCXsgVklERU9fUEFMRVRURV9SR0I1NjUsICAxNiwgMCB9LCAvKiBzb2Z0d2FyZSBjb252ZXJzaW9uICovCisJeyBWSURFT19QQUxFVFRFX1JHQjI0LCAgIDI0LCAwIH0sIC8qIHNvZnR3YXJlIGNvbnZlcnNpb24gKi8KKwl7IFZJREVPX1BBTEVUVEVfUkdCMzIsICAgMzIsIDAgfSwgLyogc29mdHdhcmUgY29udmVyc2lvbiAqLworCXsgMCwgICAgICAgICAgICAgICAgICAgICAgMCwgMCB9ICAvKiAwIGlzIGEgdGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyNkZWZpbmUgVzk5NjhDRl9ERUNPTVBSRVNTSU9OICAgIDIgLyogZGVjb21wOjA9ZGlzYWJsZSwxPWZvcmNlLDI9YW55IGZvcm1hdHMgKi8KKyNkZWZpbmUgVzk5NjhDRl9QQUxFVFRFX0RFQ09NUF9PRkYgICBWSURFT19QQUxFVFRFX1VZVlkgICAgLyogd2hlbiBkZWNvbXA9MCAqLworI2RlZmluZSBXOTk2OENGX1BBTEVUVEVfREVDT01QX0ZPUkNFIFZJREVPX1BBTEVUVEVfWVVWNDIwUCAvKiB3aGVuIGRlY29tcD0xICovCisjZGVmaW5lIFc5OTY4Q0ZfUEFMRVRURV9ERUNPTVBfT04gICAgVklERU9fUEFMRVRURV9VWVZZICAgIC8qIHdoZW4gZGVjb21wPTIgKi8KKworI2RlZmluZSBXOTk2OENGX0ZPUkNFX1JHQiAgICAgICAgMCAgLyogcmVhZCBSR0IgaW5zdGVhZCBvZiBCR1IsIHllcz0xL25vPTAgKi8KKworI2RlZmluZSBXOTk2OENGX01BWF9XSURUSCAgICAgIDgwMCAvKiBIYXMgZWZmZWN0IGlmIHVwLXNjYWxpbmcgaXMgb24gKi8KKyNkZWZpbmUgVzk5NjhDRl9NQVhfSEVJR0hUICAgICA2MDAgLyogSGFzIGVmZmVjdCBpZiB1cC1zY2FsaW5nIGlzIG9uICovCisjZGVmaW5lIFc5OTY4Q0ZfV0lEVEggICAgICAgICAgMzIwIC8qIGZyb20gMTI4IHRvIDM1MiwgbXVsdGlwbGUgb2YgMTYgKi8KKyNkZWZpbmUgVzk5NjhDRl9IRUlHSFQgICAgICAgICAyNDAgLyogZnJvbSAgOTYgdG8gMjg4LCBtdWx0aXBsZSBvZiAxNiAqLworCisjZGVmaW5lIFc5OTY4Q0ZfQ0xBTVBJTkcgICAgICAgMCAvKiAwIGRpc2FibGUsIDEgZW5hYmxlIHZpZGVvIGRhdGEgY2xhbXBpbmcgKi8KKyNkZWZpbmUgVzk5NjhDRl9GSUxURVJfVFlQRSAgICAwIC8qIDAgZGlzYWJsZSAgMSAoMS0yLTEpLCAyICgyLTMtNi0zLTIpICovCisjZGVmaW5lIFc5OTY4Q0ZfRE9VQkxFX0JVRkZFUiAgMSAvKiAwIGRpc2FibGUsIDEgZW5hYmxlIGRvdWJsZSBidWZmZXIgKi8KKyNkZWZpbmUgVzk5NjhDRl9MQVJHRVZJRVcgICAgICAxIC8qIDAgZGlzYWJsZSwgMSBlbmFibGUgKi8KKyNkZWZpbmUgVzk5NjhDRl9VUFNDQUxJTkcgICAgICAwIC8qIDAgZGlzYWJsZSwgMSBlbmFibGUgKi8KKworI2RlZmluZSBXOTk2OENGX01PTk9DSFJPTUUgICAgIDAgLyogMCBub3QgbW9ub2Nocm9tZSwgMSBtb25vY2hyb21lIHNlbnNvciAqLworI2RlZmluZSBXOTk2OENGX0JSSUdIVE5FU1MgICAgIDMxMDAwIC8qIGZyb20gMCB0byA2NTUzNSAqLworI2RlZmluZSBXOTk2OENGX0hVRSAgICAgICAgICAgIDMyNzY4IC8qIGZyb20gMCB0byA2NTUzNSAqLworI2RlZmluZSBXOTk2OENGX0NPTE9VUiAgICAgICAgIDMyNzY4IC8qIGZyb20gMCB0byA2NTUzNSAqLworI2RlZmluZSBXOTk2OENGX0NPTlRSQVNUICAgICAgIDUwMDAwIC8qIGZyb20gMCB0byA2NTUzNSAqLworI2RlZmluZSBXOTk2OENGX1dISVRFTkVTUyAgICAgIDMyNzY4IC8qIGZyb20gMCB0byA2NTUzNSAqLworCisjZGVmaW5lIFc5OTY4Q0ZfQVVUT0JSSUdIVCAgICAgMCAvKiAwIGRpc2FibGUsIDEgZW5hYmxlIGF1dG9tYXRpYyBicmlnaHRuZXNzICovCisjZGVmaW5lIFc5OTY4Q0ZfQVVUT0VYUCAgICAgICAgMSAvKiAwIGRpc2FibGUsIDEgZW5hYmxlIGF1dG9tYXRpYyBleHBvc3VyZSAqLworI2RlZmluZSBXOTk2OENGX0xJR0hURlJFUSAgICAgIDUwIC8qIGxpZ2h0IGZyZXF1ZW5jeS4gNTBIeiAoRXVyb3BlKSBvciA2MEh6ICovCisjZGVmaW5lIFc5OTY4Q0ZfQkFORElOR0ZJTFRFUiAgMCAvKiAwIGRpc2FibGUsIDEgZW5hYmxlIGJhbmRpbmcgZmlsdGVyICovCisjZGVmaW5lIFc5OTY4Q0ZfQkFDS0xJR0hUICAgICAgMCAvKiAwIG9yIDEsIDE9b2JqZWN0IGlzIGxpdCBmcm9tIGJlaGluZCAqLworI2RlZmluZSBXOTk2OENGX01JUlJPUiAgICAgICAgIDAgLyogMCBvciAxIFtkb24ndF0gcmV2ZXJzZSBpbWFnZSBob3Jpem9udGFsbHkqLworCisjZGVmaW5lIFc5OTY4Q0ZfQ0xPQ0tESVYgICAgICAgICAtMSAvKiAtMSA9IGF1dG9tYXRpYyBjbG9jayBkaXZpc29yICovCisjZGVmaW5lIFc5OTY4Q0ZfREVGX0NMT0NLRElWSVNPUiAgMCAvKiBkZWZhdWx0IHNlbnNvciBjbG9jayBkaXZpc29yIHZhbHVlICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdsb2JhbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBXOTk2OENGX01PRFVMRV9OQU1FICAgICAiVjRMIGRyaXZlciBmb3IgVzk5Nls4N11DRiBKUEVHIFVTQiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkR1YWwgTW9kZSBDYW1lcmEgQ2hpcCIKKyNkZWZpbmUgVzk5NjhDRl9NT0RVTEVfVkVSU0lPTiAgIjE6MS4zMy1iYXNpYyIKKyNkZWZpbmUgVzk5NjhDRl9NT0RVTEVfQVVUSE9SICAgIihDKSAyMDAyLTIwMDQgTHVjYSBSaXNvbGlhIgorI2RlZmluZSBXOTk2OENGX0FVVEhPUl9FTUFJTCAgICAiPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+IgorI2RlZmluZSBXOTk2OENGX01PRFVMRV9MSUNFTlNFICAiR1BMIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgd2luYm9uZF9pZF90YWJsZVtdID0geworCXsKKwkJLyogQ3JlYXRpdmUgTGFicyBWaWRlbyBCbGFzdGVyIFdlYkNhbSBHbyBQbHVzICovCisJCVVTQl9ERVZJQ0UoMHgwNDFlLCAweDQwMDMpLAorCQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykidzk5NjhjZiIsCisJfSwKKwl7CisJCS8qIEdlbmVyaWMgVzk5Nls4N11DRiBKUEVHIFVTQiBEdWFsIE1vZGUgQ2FtZXJhICovCisJCVVTQl9ERVZJQ0UoMHgxMDQ2LCAweDk5NjcpLAorCQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykidzk5NjhjZiIsCisJfSwKKwl7IH0gLyogdGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKy8qIFc5OTZbODddQ0YgY2FtZXJhIG1vZGVscywgaW50ZXJuYWwgaWRzOiAqLworZW51bSB3OTk2OGNmX21vZGVsX2lkIHsKKwlXOTk2OENGX01PRF9HRU5FUklDID0gMSwgLyogR2VuZXJpYyBXOTk2Wzg3XUNGIGJhc2VkIGRldmljZSAqLworCVc5OTY4Q0ZfTU9EX0NMVkJXR1AgPSAxMSwvKkNyZWF0aXZlIExhYnMgVmlkZW8gQmxhc3RlciBXZWJDYW0gR28gUGx1cyovCisJVzk5NjhDRl9NT0RfQURQVkRNQSA9IDIxLCAvKiBBcm9tYSBEaWdpIFBlbiBWR0EgRHVhbCBNb2RlIEFERy01MDAwICovCisJVzk5ODZDRl9NT0RfQUFVID0gMzEsICAgICAvKiBBVmVyTWVkaWEgQVZlclRWIFVTQiAqLworCVc5OTY4Q0ZfTU9EX0NMVkJXRyA9IDM0LCAgLyogQ3JlYXRpdmUgTGFicyBWaWRlbyBCbGFzdGVyIFdlYkNhbSBHbyAqLworCVc5OTY4Q0ZfTU9EX0xMID0gMzcsICAgICAgLyogTGVib24gTERDLTAzNUEgKi8KKwlXOTk2OENGX01PRF9FRUVNQyA9IDQwLCAgIC8qIEV6b25pY3MgRVotODAyIEVaTWVnYSBDYW0gKi8KKwlXOTk2OENGX01PRF9PT0UgPSA0MiwgICAgIC8qIE9tbmlWaXNpb24gT1Y4NjEwLUVERSAqLworCVc5OTY4Q0ZfTU9EX09EUFZETVBDID0gNDMsLyogT1BDT00gRGlnaSBQZW4gVkdBIER1YWwgTW9kZSBQZW4gQ2FtZXJhICovCisJVzk5NjhDRl9NT0RfUERQSUkgPSA0NiwgICAvKiBQcmV0ZWMgRGlnaSBQZW4tSUkgKi8KKwlXOTk2OENGX01PRF9QRFA0ODAgPSA0OSwgIC8qIFByZXRlYyBEaWdpUGVuLTQ4MCAqLworfTsKKworZW51bSB3OTk2OGNmX2ZyYW1lX3N0YXR1cyB7CisJRl9SRUFEWSwgICAgICAgICAgICAvKiBmaW5pc2hlZCBncmFiYmluZyAmIHJlYWR5IHRvIGJlIHJlYWQvc3luY2VkICovCisJRl9HUkFCQklORywgICAgICAgICAvKiBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBncmFiYmVkIGludG8gKi8KKwlGX0VSUk9SLCAgICAgICAgICAgIC8qIHNvbWV0aGluZyBiYWQgaGFwcGVuZWQgd2hpbGUgcHJvY2Vzc2luZyAqLworCUZfVU5VU0VEICAgICAgICAgICAgLyogdW51c2VkIChubyBWSURJT0NNQ0FQVFVSRSkgKi8KK307CisKK3N0cnVjdCB3OTk2OGNmX2ZyYW1lX3QgeworCXZvaWQqIGJ1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdTMyIGxlbmd0aDsKKwlpbnQgbnVtYmVyOworCWVudW0gdzk5NjhjZl9mcmFtZV9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCB3OTk2OGNmX2ZyYW1lX3QqIG5leHQ7CisJdTggcXVldWVkOworfTsKKworZW51bSB3OTk2OGNmX3ZwcF9mbGFnIHsKKwlWUFBfTk9ORSA9IDB4MDAsCisJVlBQX1VQU0NBTEUgPSAweDAxLAorCVZQUF9TV0FQX1lVVl9CWVRFUyA9IDB4MDIsCisJVlBQX0RFQ09NUFJFU1NJT04gPSAweDA0LAorCVZQUF9VWVZZX1RPX1JHQlggPSAweDA4LAorfTsKKworc3RhdGljIHN0cnVjdCB3OTk2OGNmX3ZwcF90KiB3OTk2OGNmX3ZwcDsKK3N0YXRpYyBERUNMQVJFX01VVEVYKHc5OTY4Y2ZfdnBwbW9kX2xvY2spOworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHc5OTY4Y2ZfdnBwbW9kX3dhaXQpOworCitzdGF0aWMgTElTVF9IRUFEKHc5OTY4Y2ZfZGV2X2xpc3QpOyAvKiBoZWFkIG9mIFY0TCByZWdpc3RlcmVkIGNhbWVyYXMgbGlzdCAqLworc3RhdGljIERFQ0xBUkVfTVVURVgodzk5NjhjZl9kZXZsaXN0X3NlbSk7IC8qIHNlbWFwaG9yZSBmb3IgbGlzdCB0cmF2ZXJzYWwgKi8KKworc3RhdGljIERFQ0xBUkVfUldTRU0odzk5NjhjZl9kaXNjb25uZWN0KTsgLyogcHJldmVudCByYWNlcyB3aXRoIG9wZW4oKSAqLworCisvKiBNYWluIGRldmljZSBkcml2ZXIgc3RydWN0dXJlICovCitzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UgeworCXN0cnVjdCBkZXZpY2UgZGV2OyAvKiBkZXZpY2Ugc3RydWN0dXJlICovCisKKwllbnVtIHc5OTY4Y2ZfbW9kZWxfaWQgaWQ7ICAgLyogcHJpdmF0ZSBkZXZpY2UgaWRlbnRpZmllciAqLworCisJc3RydWN0IHZpZGVvX2RldmljZSogdjRsZGV2OyAvKiAtPiBWNEwgc3RydWN0dXJlICovCisJc3RydWN0IGxpc3RfaGVhZCB2NGxsaXN0OyAgICAvKiBlbnRyeSBvZiB0aGUgbGlzdCBvZiBWNEwgY2FtZXJhcyAqLworCisJc3RydWN0IHVzYl9kZXZpY2UqIHVzYmRldjsgICAgICAgICAgIC8qIC0+IG1haW4gVVNCIHN0cnVjdHVyZSAqLworCXN0cnVjdCB1cmIqIHVyYltXOTk2OENGX1VSQlNdOyAgICAgICAvKiAtPiBVU0IgcmVxdWVzdCBibG9jayBzdHJ1Y3RzICovCisJdm9pZCogdHJhbnNmZXJfYnVmZmVyW1c5OTY4Q0ZfVVJCU107IC8qIC0+IElTTyB0cmFuc2ZlciBidWZmZXJzICovCisJdTE2KiBjb250cm9sX2J1ZmZlcjsgICAgICAgICAgICAgICAgIC8qIC0+IGJ1ZmZlciBmb3IgY29udHJvbCByZXEuKi8KKwl1MTYqIGRhdGFfYnVmZmVyOyAgICAgICAgICAgICAgICAgICAgLyogLT4gZGF0YSB0byBzZW5kIHRvIHRoZSBGU0IgKi8KKworCXN0cnVjdCB3OTk2OGNmX2ZyYW1lX3QgZnJhbWVbVzk5NjhDRl9NQVhfQlVGRkVSU107CisJc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCBmcmFtZV90bXA7IC8qIHRlbXBvcmFyeSBmcmFtZSAqLworCXN0cnVjdCB3OTk2OGNmX2ZyYW1lX3QgZnJhbWVfdnBwOyAvKiBoZWxwZXIgZnJhbWUuKi8KKwlzdHJ1Y3Qgdzk5NjhjZl9mcmFtZV90KiBmcmFtZV9jdXJyZW50OyAvKiAtPiBmcmFtZSBiZWluZyBncmFiYmVkICovCisJc3RydWN0IHc5OTY4Y2ZfZnJhbWVfdCogcmVxdWVzdGVkX2ZyYW1lW1c5OTY4Q0ZfTUFYX0JVRkZFUlNdOworCisJdTggbWF4X2J1ZmZlcnMsICAgLyogbnVtYmVyIG9mIHJlcXVlc3RlZCBidWZmZXJzICovCisJICAgZm9yY2VfcGFsZXR0ZSwgLyogeWVzPTEvbm89MCAqLworCSAgIGZvcmNlX3JnYiwgICAgIC8qIHJlYWQgUkdCIGluc3RlYWQgb2YgQkdSLCB5ZXM9MSwgbm89MCAqLworCSAgIGRvdWJsZV9idWZmZXIsIC8qIGhhcmR3YXJlIGRvdWJsZSBidWZmZXJpbmcgeWVzPTEvbm89MCAqLworCSAgIGNsYW1waW5nLCAgICAgIC8qIHZpZGVvIGRhdGEgY2xhbXBpbmcgeWVzPTEvbm89MCAqLworCSAgIGZpbHRlcl90eXBlLCAgIC8qIDA9ZGlzYWJsZWQsIDE9MyB0YXAsIDI9NSB0YXAgZmlsdGVyICovCisJICAgY2FwdHVyZSwgICAgICAgLyogMD1kaXNhYmxlZCwgMT1lbmFibGVkICovCisJICAgbGFyZ2V2aWV3LCAgICAgLyogMD1kaXNhYmxlZCwgMT1lbmFibGVkICovCisJICAgZGVjb21wcmVzc2lvbiwgLyogMD1kaXNhYmxlZCwgMT1mb3JjZWQsIDI9YWxsb3dlZCAqLworCSAgIHVwc2NhbGluZzsgICAgIC8qIHNvZnR3YXJlIGltYWdlIHNjYWxpbmcsIDA9ZW5hYmxlZCwgMT1kaXNhYmxlZCAqLworCisJc3RydWN0IHZpZGVvX3BpY3R1cmUgcGljdHVyZTsgLyogY3VycmVudCBwaWN0dXJlIHNldHRpbmdzICovCisJc3RydWN0IHZpZGVvX3dpbmRvdyB3aW5kb3c7ICAgLyogY3VycmVudCB3aW5kb3cgc2V0dGluZ3MgKi8KKworCXUxNiBod19kZXB0aCwgICAgLyogZGVwdGggKHVzZWQgYnkgdGhlIGNoaXApICovCisJICAgIGh3X3BhbGV0dGUsICAvKiBwYWxldHRlICh1c2VkIGJ5IHRoZSBjaGlwKSAqLworCSAgICBod193aWR0aCwgICAgLyogd2lkdGggKHVzZWQgYnkgdGhlIGNoaXApICovCisJICAgIGh3X2hlaWdodCwgICAvKiBoZWlnaHQgKHVzZWQgYnkgdGhlIGNoaXApICovCisJICAgIGhzX3BvbGFyaXR5LCAvKiAwPW5lZ2F0aXZlIHN5bmMgcHVsc2UsIDE9cG9zaXRpdmUgc3luYyBwdWxzZSAqLworCSAgICB2c19wb2xhcml0eSwgLyogMD1uZWdhdGl2ZSBzeW5jIHB1bHNlLCAxPXBvc2l0aXZlIHN5bmMgcHVsc2UgKi8KKwkgICAgc3RhcnRfY3JvcHgsIC8qIHBpeGVscyBmcm9tIEhTIGluYWN0aXZlIGVkZ2UgdG8gMXN0IGNyb3BwZWQgcGl4ZWwqLworCSAgICBzdGFydF9jcm9weTsgLyogcGl4ZWxzIGZyb20gVlMgaW5hY3RpdmUgZWRnZSB0byAxc3QgY3JvcHBlZCBwaXhlbCovCisKKwllbnVtIHc5OTY4Y2ZfdnBwX2ZsYWcgdnBwX2ZsYWc7IC8qIHBvc3QtcHJvY2Vzc2luZyByb3V0aW5lcyBpbiB1c2UgKi8KKworCXU4IG5idWZmZXJzLCAgICAgIC8qIG51bWJlciBvZiBhbGxvY2F0ZWQgZnJhbWUgYnVmZmVycyAqLworCSAgIGFsdHNldHRpbmcsICAgIC8qIGNhbWVyYSBhbHRlcm5hdGUgc2V0dGluZyAqLworCSAgIGRpc2Nvbm5lY3RlZCwgIC8qIGZsYWc6IHllcz0xLCBubz0wICovCisJICAgbWlzY29uZmlndXJlZCwgLyogZmxhZzogeWVzPTEsIG5vPTAgKi8KKwkgICB1c2VycywgICAgICAgICAvKiBmbGFnOiBudW1iZXIgb2YgdXNlcnMgaG9sZGluZyB0aGUgZGV2aWNlICovCisJICAgc3RyZWFtaW5nOyAgICAgLyogZmxhZzogeWVzPTEsIG5vPTAgKi8KKworCXU4IHNlbnNvcl9pbml0aWFsaXplZDsgLyogZmxhZzogeWVzPTEsIG5vPTAgKi8KKworCS8qIERldGVybWluZWQgYnkgdGhlIGltYWdlIHNlbnNvciB0eXBlOiAqLworCWludCBzZW5zb3IsICAgICAgIC8qIHR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKENDXyopICovCisJICAgIG1vbm9jaHJvbWU7ICAgLyogaW1hZ2Ugc2Vuc29yIGlzIChwcm9iYWJseSkgbW9ub2Nocm9tZSAqLworCXUxNiBtYXh3aWR0aCwgICAgIC8qIG1heGltdW0gd2lkdGggc3VwcG9ydGVkIGJ5IHRoZSBpbWFnZSBzZW5zb3IgKi8KKwkgICAgbWF4aGVpZ2h0LCAgICAvKiBtYXhpbXVtIGhlaWdodCBzdXBwb3J0ZWQgYnkgdGhlIGltYWdlIHNlbnNvciAqLworCSAgICBtaW53aWR0aCwgICAgIC8qIG1pbmltdW0gd2lkdGggc3VwcG9ydGVkIGJ5IHRoZSBpbWFnZSBzZW5zb3IgKi8KKwkgICAgbWluaGVpZ2h0OyAgICAvKiBtaW5pbXVtIGhlaWdodCBzdXBwb3J0ZWQgYnkgdGhlIGltYWdlIHNlbnNvciAqLworCXU4ICBhdXRvX2JydCwgICAgIC8qIGF1dG8gYnJpZ2h0bmVzcyBlbmFibGVkIGZsYWcgKi8KKwkgICAgYXV0b19leHAsICAgICAvKiBhdXRvIGV4cG9zdXJlIGVuYWJsZWQgZmxhZyAqLworCSAgICBiYWNrbGlnaHQsICAgIC8qIGJhY2tsaWdodCBleHBvc3VyZSBhbGdvcml0aG0gZmxhZyAqLworCSAgICBtaXJyb3IsICAgICAgIC8qIGltYWdlIGlzIHJldmVyc2VkIGhvcml6b250YWxseSAqLworCSAgICBsaWdodGZyZXEsICAgIC8qIHBvd2VyIChsaWdodGluZykgZnJlcXVlbmN5ICovCisJICAgIGJhbmRmaWx0OyAgICAgLyogYmFuZGluZyBmaWx0ZXIgZW5hYmxlZCBmbGFnICovCisJczggIGNsb2NrZGl2OyAgICAgLyogY2xvY2sgZGl2aXNvciAqLworCisJLyogSTJDIGludGVyZmFjZSB0byBrZXJuZWwgKi8KKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXB0ZXI7CisJc3RydWN0IGkyY19jbGllbnQqIHNlbnNvcl9jbGllbnQ7CisKKwkvKiBMb2NrcyAqLworCXN0cnVjdCBzZW1hcGhvcmUgZGV2X3NlbSwgICAgLyogZm9yIHByb2JlLCBkaXNjb25uZWN0LG9wZW4gYW5kIGNsb3NlICovCisJICAgICAgICAgICAgICAgICBmaWxlb3Bfc2VtOyAvKiBmb3IgcmVhZCBhbmQgaW9jdGwgKi8KKwlzcGlubG9ja190IHVyYl9sb2NrLCAgIC8qIGZvciBzdWJtaXRfdXJiKCkgYW5kIHVubGlua191cmIoKSAqLworCSAgICAgICAgICAgZmxpc3RfbG9jazsgLyogZm9yIHJlcXVlc3RlZCBmcmFtZSBsaXN0IGFjY2Vzc2VzICovCisJd2FpdF9xdWV1ZV9oZWFkX3Qgb3Blbiwgd2FpdF9xdWV1ZTsKKworCWNoYXIgY29tbWFuZFsxNl07IC8qIG5hbWUgb2YgdGhlIHByb2dyYW0gaG9sZGluZyB0aGUgZGV2aWNlICovCit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNYWNyb3MgZm9yIGRlYnVnZ2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyN1bmRlZiBEQkcKKyN1bmRlZiBLREJHCisjaWZkZWYgVzk5NjhDRl9ERUJVRworLyogRm9yIGRldmljZSBzcGVjaWZpYyBkZWJ1Z2dpbmcgbWVzc2FnZXMgKi8KKyMJZGVmaW5lIERCRyhsZXZlbCwgZm10LCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiAoICgoc3BlY2lmaWNfZGVidWcpICYmIChkZWJ1ZyA9PSAobGV2ZWwpKSkgfHwgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgKCghc3BlY2lmaWNfZGVidWcpICYmIChkZWJ1ZyA+PSAobGV2ZWwpKSkgKSB7ICAgICAgICAgICAgICAgICAgICBcCisJCWlmICgobGV2ZWwpID09IDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJZGV2X2VycigmY2FtLT5kZXYsIGZtdCAiXG4iLCAjIyBhcmdzKTsgICAgICAgICAgICAgICAgXAorCQllbHNlIGlmICgobGV2ZWwpID09IDIgfHwgKGxldmVsKSA9PSAzKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCWRldl9pbmZvKCZjYW0tPmRldiwgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICAgICAgICAgIFwKKwkJZWxzZSBpZiAoKGxldmVsKSA9PSA0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlkZXZfd2FybigmY2FtLT5kZXYsIGZtdCAiXG4iLCAjIyBhcmdzKTsgICAgICAgICAgICAgICBcCisJCWVsc2UgaWYgKChsZXZlbCkgPj0gNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJZGV2X2luZm8oJmNhbS0+ZGV2LCAiWyVzOiVkXSAiIGZtdCAiXG4iLCAgICAgICAgICAgICAgXAorCQkJICAgICAgICAgX19GVU5DVElPTl9fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOyAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisvKiBGb3IgZ2VuZXJpYyBrZXJuZWwgKG5vdCBkZXZpY2Ugc3BlY2lmaWMpIG1lc3NhZ2VzICovCisjCWRlZmluZSBLREJHKGxldmVsLCBmbXQsIGFyZ3MuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKCAoKHNwZWNpZmljX2RlYnVnKSAmJiAoZGVidWcgPT0gKGxldmVsKSkpIHx8ICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICgoIXNwZWNpZmljX2RlYnVnKSAmJiAoZGVidWcgPj0gKGxldmVsKSkpICkgeyAgICAgICAgICAgICAgICAgICAgXAorCQlpZiAoKGxldmVsKSA+PSAxICYmIChsZXZlbCkgPD0gNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXByX2luZm8oInc5OTY4Y2Y6ICIgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICAgICAgICAgIFwKKwkJZWxzZSBpZiAoKGxldmVsKSA+PSA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlwcl9kZWJ1Zygidzk5NjhjZjogWyVzOiVkXSAiIGZtdCAiXG4iLCBfX0ZVTkNUSU9OX18sICBcCisJCQkgICAgICAgICBfX0xJTkVfXyAsICMjIGFyZ3MpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyNlbHNlCisJLyogTm90IGRlYnVnZ2luZzogbm90aGluZyAqLworIwlkZWZpbmUgREJHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIGRvIHs7fSB3aGlsZSgwKTsKKyMJZGVmaW5lIEtEQkcobGV2ZWwsIGZtdCwgYXJncy4uLikgZG8gezt9IHdoaWxlKDApOworI2VuZGlmCisKKyN1bmRlZiBQREJHCisjZGVmaW5lIFBEQkcoZm10LCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkZXZfaW5mbygmY2FtLT5kZXYsICJbJXM6JWRdICIgZm10ICJcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18gLCAjIyBhcmdzKTsKKworI3VuZGVmIFBEQkdHCisjZGVmaW5lIFBEQkdHKGZtdCwgYXJncy4uLikgZG8gezt9IHdoaWxlKDApOyAvKiBub3RoaW5nOiBpdCdzIGEgcGxhY2Vob2xkZXIgKi8KKworI2VuZGlmIC8qIF9XOTk2OENGX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tZWRpYS93OTk2OGNmX2RlY29kZXIuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2ZfZGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZmFjY2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tZWRpYS93OTk2OGNmX2RlY29kZXIuaApAQCAtMCwwICsxLDg2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWaWRlbyBkZWNvZGVyIGZvciB0aGUgVzk5Nls4N11DRiBkcml2ZXIgZm9yIExpbnV4LiAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgMjAwNCBieSBMdWNhIFJpc29saWEgPGx1Y2Eucmlzb2xpYUBzdHVkaW8udW5pYm8uaXQ+ICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICAgICAgICAgICAqCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9XOTk2OENGX0RFQ09ERVJfSF8KKyNkZWZpbmUgX1c5OTY4Q0ZfREVDT0RFUl9IXworCisvKiBDb21tZW50L3VuY29tbWVudCB0aGlzIGZvciBoaWdoL2xvdyBxdWFsaXR5IG9mIGNvbXByZXNzZWQgdmlkZW8gKi8KKyNkZWZpbmUgVzk5NjhDRl9ERUNfRkFTVF9MT1dRVUFMSVRZX1ZJREVPCisKKyNpZmRlZiBXOTk2OENGX0RFQ19GQVNUX0xPV1FVQUxJVFlfVklERU8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFlfUVVBTlRBQkxFWzY0XSA9IHsKKwkxNiwgIDExLCAgMTAsICAxNiwgIDI0LCAgNDAsICA1MSwgIDYxLAorCTEyLCAgMTIsICAxNCwgIDE5LCAgMjYsICA1OCwgIDYwLCAgNTUsCisJMTQsICAxMywgIDE2LCAgMjQsICA0MCwgIDU3LCAgNjksICA1NiwKKwkxNCwgIDE3LCAgMjIsICAyOSwgIDUxLCAgODcsICA4MCwgIDYyLAorCTE4LCAgMjIsICAzNywgIDU2LCAgNjgsIDEwOSwgMTAzLCAgNzcsCisJMjQsICAzNSwgIDU1LCAgNjQsICA4MSwgMTA0LCAxMTMsICA5MiwKKwk0OSwgIDY0LCAgNzgsICA4NywgMTAzLCAxMjEsIDEyMCwgMTAxLAorCTcyLCAgOTIsICA5NSwgIDk4LCAxMTIsIDEwMCwgMTAzLCAgOTkKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFVWX1FVQU5UQUJMRVs2NF0gPSB7CisJMTcsICAxOCwgIDI0LCAgNDcsICA5OSwgIDk5LCAgOTksICA5OSwKKwkxOCwgIDIxLCAgMjYsICA2NiwgIDk5LCAgOTksICA5OSwgIDk5LAorCTI0LCAgMjYsICA1NiwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksCisJNDcsICA2NiwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwKKwk5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LAorCTk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksCisJOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwKKwk5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5Cit9OworI2Vsc2UKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFlfUVVBTlRBQkxFWzY0XSA9IHsKKwkgOCwgICA1LCAgIDUsICAgOCwgIDEyLCAgMjAsICAyNSwgIDMwLAorCSA2LCAgIDYsICAgNywgICA5LCAgMTMsICAyOSwgIDMwLCAgMjcsCisJIDcsICAgNiwgICA4LCAgMTIsICAyMCwgIDI4LCAgMzQsICAyOCwKKwkgNywgICA4LCAgMTEsICAxNCwgIDI1LCAgNDMsICA0MCwgIDMxLAorCSA5LCAgMTEsICAxOCwgIDI4LCAgMzQsICA1NCwgIDUxLCAgMzgsCisJMTIsICAxNywgIDI3LCAgMzIsICA0MCwgIDUyLCAgNTYsICA0NiwKKwkyNCwgIDMyLCAgMzksICA0MywgIDUxLCAgNjAsICA2MCwgIDUwLAorCTM2LCAgNDYsICA0NywgIDQ5LCAgNTYsICA1MCwgIDUxLCAgNDkKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFVWX1FVQU5UQUJMRVs2NF0gPSB7CisJIDgsICAgOSwgIDEyLCAgMjMsICA0OSwgIDQ5LCAgNDksICA0OSwKKwkgOSwgIDEwLCAgMTMsICAzMywgIDQ5LCAgNDksICA0OSwgIDQ5LAorCTEyLCAgMTMsICAyOCwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksCisJMjMsICAzMywgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwKKwk0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LAorCTQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksCisJNDksICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwKKwk0OSwgIDQ5LCAgNDksICA0OSwgIDQ5LCAgNDksICA0OSwgIDQ5Cit9OworI2VuZGlmCisKKyNkZWZpbmUgVzk5NjhDRl9ERUNfRVJSX0NPUlJVUFRFRF9EQVRBICAtMQorI2RlZmluZSBXOTk2OENGX0RFQ19FUlJfQlVGX09WRVJGTE9XICAgIC0yCisjZGVmaW5lIFc5OTY4Q0ZfREVDX0VSUl9OT19TT0kgICAgICAgICAgLTMKKyNkZWZpbmUgVzk5NjhDRl9ERUNfRVJSX05PX1NPRjAgICAgICAgICAtNAorI2RlZmluZSBXOTk2OENGX0RFQ19FUlJfTk9fU09TICAgICAgICAgIC01CisjZGVmaW5lIFc5OTY4Q0ZfREVDX0VSUl9OT19FT0kgICAgICAgICAgLTYKKworZXh0ZXJuIHZvaWQgdzk5NjhjZl9pbml0X2RlY29kZXIodm9pZCk7CitleHRlcm4gaW50IHc5OTY4Y2ZfY2hlY2tfaGVhZGVycyhjb25zdCB1bnNpZ25lZCBjaGFyKiBQaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBCVUZfU0laRSk7CitleHRlcm4gaW50IHc5OTY4Y2ZfZGVjb2RlKGNvbnN0IGNoYXIqIFBpbiwgY29uc3QgdW5zaWduZWQgbG9uZyBCVUZfU0laRSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIFcsIGNvbnN0IHVuc2lnbmVkIEgsIGNoYXIqIFBvdXQpOworCisjZW5kaWYgLyogX1c5OTY4Q0ZfREVDT0RFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWVkaWEvdzk5NjhjZl92cHAuaCBiL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2ZfdnBwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y1MzE3ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21lZGlhL3c5OTY4Y2ZfdnBwLmgKQEAgLTAsMCArMSw0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW50ZXJmYWNlIGZvciB2aWRlbyBwb3N0LXByb2Nlc3NpbmcgZnVuY3Rpb25zIGZvciB0aGUgVzk5Nls4N11DRiBkcml2ZXIgKgorICogZm9yIExpbnV4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQgYnkgTHVjYSBSaXNvbGlhIDxsdWNhLnJpc29saWFAc3R1ZGlvLnVuaWJvLml0PiAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgKgorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfVzk5NjhDRl9WUFBfSF8KKyNkZWZpbmUgX1c5OTY4Q0ZfVlBQX0hfCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworc3RydWN0IHc5OTY4Y2ZfdnBwX3QgeworCXN0cnVjdCBtb2R1bGUqIG93bmVyOworCWludCAoKmNoZWNrX2hlYWRlcnMpKGNvbnN0IHVuc2lnbmVkIGNoYXIqLCBjb25zdCB1bnNpZ25lZCBsb25nKTsKKwlpbnQgKCpkZWNvZGUpKGNvbnN0IGNoYXIqLCBjb25zdCB1bnNpZ25lZCBsb25nLCBjb25zdCB1bnNpZ25lZCwKKwkgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkLCBjaGFyKik7CisJdm9pZCAoKnN3YXBfeXV2Ynl0ZXMpKHZvaWQqLCB1bnNpZ25lZCBsb25nKTsKKwl2b2lkICgqdXl2eV90b19yZ2J4KSh1OCosIHVuc2lnbmVkIGxvbmcsIHU4KiwgdTE2LCB1OCk7CisJdm9pZCAoKnNjYWxlX3VwKSh1OCosIHU4KiwgdTE2LCB1MTYsIHUxNiwgdTE2LCB1MTYpOworCisJdTggYnVzeTsgLyogcmVhZC1vbmx5IGZsYWc6IG1vZHVsZSBpcy9pcyBub3QgaW4gdXNlICovCit9OworCitleHRlcm4gaW50IHc5OTY4Y2ZfdnBwbW9kX3JlZ2lzdGVyKHN0cnVjdCB3OTk2OGNmX3ZwcF90Kik7CitleHRlcm4gaW50IHc5OTY4Y2ZfdnBwbW9kX2RlcmVnaXN0ZXIoc3RydWN0IHc5OTY4Y2ZfdnBwX3QqKTsKKworI2VuZGlmIC8qIF9XOTk2OENGX1ZQUF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnIGIvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhODk2OTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcKQEAgLTAsMCArMSwxNTIgQEAKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVyIGNvbmZpZ3VyYXRpb24KKyMKK2NvbW1lbnQgIlVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMiCisJZGVwZW5kcyBvbiBVU0IKKworY29uZmlnIFVTQl9FTUk2MgorCXRyaXN0YXRlICJFTUkgNnwybSBVU0IgQXVkaW8gaW50ZXJmYWNlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBsb2FkcyBmaXJtd2FyZSB0byBFbWFnaWMgRU1JIDZ8Mm0gbG93IGxhdGVuY3kgVVNCCisJICBBdWRpbyBhbmQgTWlkaSBpbnRlcmZhY2UuCisKKwkgIEFmdGVyIGZpcm13YXJlIGxvYWQgdGhlIGRldmljZSBpcyBoYW5kbGVkIHdpdGggc3RhbmRhcmQgbGludXgKKwkgIFVTQiBBdWRpbyBkcml2ZXIuCisKKwkgIFRoaXMgY29kZSBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZSAoID0gY29kZSB3aGljaCBjYW4gYmUKKwkgIGluc2VydGVkIGluIGFuZCByZW1vdmVkIGZyb20gdGhlIHJ1bm5pbmcga2VybmVsIHdoZW5ldmVyIHlvdSB3YW50KS4KKwkgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYXVkaW8uIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgYXMgYQorCSAgbW9kdWxlLCBzYXkgTSBoZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0Pi4KKworY29uZmlnIFVTQl9FTUkyNgorCXRyaXN0YXRlICJFTUkgMnw2IFVTQiBBdWRpbyBpbnRlcmZhY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIGxvYWRzIGZpcm13YXJlIHRvIEVtYWdpYyBFTUkgMnw2IGxvdyBsYXRlbmN5IFVTQgorCSAgQXVkaW8gaW50ZXJmYWNlLgorCisJICBBZnRlciBmaXJtd2FyZSBsb2FkIHRoZSBkZXZpY2UgaXMgaGFuZGxlZCB3aXRoIHN0YW5kYXJkIGxpbnV4CisJICBVU0IgQXVkaW8gZHJpdmVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBlbWkyNi4KKworY29uZmlnIFVTQl9BVUVSU1dBTEQKKwl0cmlzdGF0ZSAiVVNCIEF1ZXJzd2FsZCBJU0ROIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0IgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGFuIEF1ZXJzd2FsZCBVU0IgSVNETiBEZXZpY2UKKwkgIHRvIHlvdXIgY29tcHV0ZXIncyBVU0IgcG9ydC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYXVlcnN3YWxkLgorCitjb25maWcgVVNCX1JJTzUwMAorCXRyaXN0YXRlICJVU0IgRGlhbW9uZCBSaW81MDAgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQiAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBVU0IgUmlvNTAwIG1wMyBwbGF5ZXIgdG8geW91cgorCSAgY29tcHV0ZXIncyBVU0IgcG9ydC4gUGxlYXNlIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvcmlvLnR4dD4KKwkgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByaW81MDAuCisKK2NvbmZpZyBVU0JfTEVHT1RPV0VSCisJdHJpc3RhdGUgIlVTQiBMZWdvIEluZnJhcmVkIFRvd2VyIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0IgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgVVNCIExlZ28gSW5mcmFyZWQgVG93ZXIgdG8geW91cgorCSAgY29tcHV0ZXIncyBVU0IgcG9ydC4KKworCSAgVGhpcyBjb2RlIGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlICggPSBjb2RlIHdoaWNoIGNhbiBiZQorCSAgaW5zZXJ0ZWQgaW4gYW5kIHJlbW92ZWQgZnJvbSB0aGUgcnVubmluZyBrZXJuZWwgd2hlbmV2ZXIgeW91IHdhbnQpLgorCSAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsZWdvdXNidG93ZXIuIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgYXMKKwkgIGEgbW9kdWxlLCBzYXkgTSBoZXJlIGFuZCByZWFkCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnR4dD4uCisKK2NvbmZpZyBVU0JfTENECisJdHJpc3RhdGUgIlVTQiBMQ0QgZHJpdmVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYW4gVVNCTENEIHRvIHlvdXIgY29tcHV0ZXIncworCSAgVVNCIHBvcnQuIFRoZSBVU0JMQ0QgaXMgYSBzbWFsbCBVU0IgaW50ZXJmYWNlIGJvYXJkIGZvcgorCSAgYWxwaGFudW1lcmljIExDRCBtb2R1bGVzLiBTZWUgPGh0dHA6Ly93d3cudXNibGNkLmRlLz4gZm9yIG1vcmUKKwkgIGluZm9ybWF0aW9uLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JsY2QuCisKK2NvbmZpZyBVU0JfTEVECisJdHJpc3RhdGUgIlVTQiBMRUQgZHJpdmVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYW4gVVNCTEVEIGRldmljZSB0byB5b3VyIAorCSAgY29tcHV0ZXIncyBVU0IgcG9ydC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNibGVkLgorCitjb25maWcgVVNCX0NZVEhFUk0KKwl0cmlzdGF0ZSAiQ3lwcmVzcyBVU0IgdGhlcm1vbWV0ZXIgZHJpdmVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBDeXByZXNzIFVTQiB0aGVybW9tZXRlcgorCSAgZGV2aWNlIHRvIHlvdXIgY29tcHV0ZXIncyBVU0IgcG9ydC4gVGhpcyBkZXZpY2UgaXMgYWxzbyBrbm93bgorCSAgYXMgdGhlIEN5cHJlc3MgVVNCIFN0YXJ0ZXIga2l0IG9yIGRlbW8gYm9hcmQuIFRoZSBFbGVrdG9yCisJICBtYWdhemluZSBwdWJsaXNoZWQgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgZGV2aWNlIGluIGlzc3VlIAorCSAgIzI5MS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3l0aGVybS4KKworY29uZmlnIFVTQl9QSElER0VUS0lUCisJdHJpc3RhdGUgIlVTQiBQaGlkZ2V0S2l0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBQaGlkZ2V0S2l0IFVTQiBkZXZpY2UgZnJvbQorCSAgUGhpZGdldHMgSW5jLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwaGlkZ2V0a2l0LgorCitjb25maWcgVVNCX1BISURHRVRTRVJWTworCXRyaXN0YXRlICJVU0IgUGhpZGdldFNlcnZvIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYW4gMSBvciA0IE1vdG9yIFBoaWRnZXRTZXJ2byAKKwkgIHNlcnZvIGNvbnRyb2xsZXIgdmVyc2lvbiAyLjAgb3IgMy4wLgorCisJICBQaGlkZ2V0cyBJbmMuIGhhcyBhIHdlYiBwYWdlIGF0IDxodHRwOi8vd3d3LnBoaWRnZXRzLmNvbS8+LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwaGlkZ2V0c2Vydm8uCisKK2NvbmZpZyBVU0JfSURNT1VTRQorCXRyaXN0YXRlICJTaWVtZW5zIElEIFVTQiBNb3VzZSBGaW5nZXJwcmludCBzZW5zb3Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBmaW5nZXJwcmludCBzZW5zb3Igb24KKwkgIHRoZSBTaWVtZW5zIElEIE1vdXNlLiBUaGVyZSBpcyBhbHNvIGEgU2llbWVucyBJRCBNb3VzZQorCSAgX1Byb2Zlc3Npb25hbF8sIHdoaWNoIGhhcyBub3QgYmVlbiB0ZXN0ZWQgd2l0aCB0aGlzIGRyaXZlciwKKwkgIGJ1dCB1c2VzIHRoZSBzYW1lIHNlbnNvciBhbmQgbWF5IHRoZXJlZm9yZSB3b3JrLgorCisJICBUaGlzIGRyaXZlciBjcmVhdGVzIGFuIGVudHJ5ICIvZGV2L2lkbW91c2VYIiBvciAiL2Rldi91c2IvaWRtb3VzZVgiLAorCSAgd2hpY2ggY2FuIGJlIHVzZWQgYnksIGUuZy4sImNhdCAvZGV2L2lkbW91c2UwID4gZmluZ2VycHJpbnQucG5tIi4KKworCSAgU2VlIGFsc28gPGh0dHA6Ly93d3cuZnMudHVtLmRlL35lY2h0bGVyL2lkbW91c2UvPi4KKworc291cmNlICJkcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9LY29uZmlnIgorCitjb25maWcgVVNCX1RFU1QKKwl0cmlzdGF0ZSAiVVNCIHRlc3RpbmcgZHJpdmVyIChERVZFTE9QTUVOVCkiCisJZGVwZW5kcyBvbiBVU0IgJiYgVVNCX0RFVklDRUZTICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIGlzIGZvciB0ZXN0aW5nIGhvc3QgY29udHJvbGxlciBzb2Z0d2FyZS4gIEl0IGlzIHVzZWQKKwkgIHdpdGggc3BlY2lhbGl6ZWQgZGV2aWNlIGZpcm13YXJlIGZvciByZWdyZXNzaW9uIGFuZCBzdHJlc3MgdGVzdGluZywKKwkgIHRvIGhlbHAgcHJldmVudCBwcm9ibGVtcyBmcm9tIGNyb3BwaW5nIHVwIHdpdGggInJlYWwiIGRyaXZlcnMuCisKKwkgIFNlZSA8aHR0cDovL3d3dy5saW51eC11c2Iub3JnL3VzYnRlc3QvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbiwKKwkgIGluY2x1ZGluZyBzYW1wbGUgdGVzdCBkZXZpY2UgZmlybXdhcmUgYW5kICJob3cgdG8gdXNlIGl0Ii4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzODE0YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUKQEAgLTAsMCArMSwyMCBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIHJlc3Qgb2YgdGhlIFVTQiBkcml2ZXJzCisjICh0aGUgb25lcyB0aGF0IGRvbid0IGZpdCBpbnRvIGFueSBvdGhlciBjYXRlZ29yaWVzKQorIworCitvYmotJChDT05GSUdfVVNCX0FVRVJTV0FMRCkJKz0gYXVlcnN3YWxkLm8KK29iai0kKENPTkZJR19VU0JfQ1lUSEVSTSkJKz0gY3l0aGVybS5vCitvYmotJChDT05GSUdfVVNCX0VNSTI2KQkJKz0gZW1pMjYubworb2JqLSQoQ09ORklHX1VTQl9FTUk2MikJCSs9IGVtaTYyLm8KK29iai0kKENPTkZJR19VU0JfSURNT1VTRSkJKz0gaWRtb3VzZS5vCitvYmotJChDT05GSUdfVVNCX0xDRCkJCSs9IHVzYmxjZC5vCitvYmotJChDT05GSUdfVVNCX0xFRCkJCSs9IHVzYmxlZC5vCitvYmotJChDT05GSUdfVVNCX0xFR09UT1dFUikJKz0gbGVnb3VzYnRvd2VyLm8KK29iai0kKENPTkZJR19VU0JfUEhJREdFVEtJVCkJKz0gcGhpZGdldGtpdC5vCitvYmotJChDT05GSUdfVVNCX1BISURHRVRTRVJWTykJKz0gcGhpZGdldHNlcnZvLm8KK29iai0kKENPTkZJR19VU0JfUklPNTAwKQkrPSByaW81MDAubworb2JqLSQoQ09ORklHX1VTQl9URVNUKQkJKz0gdXNidGVzdC5vCitvYmotJChDT05GSUdfVVNCX1VTUzcyMCkJKz0gdXNzNzIwLm8KKworb2JqLSQoQ09ORklHX1VTQl9TSVNVU0JWR0EpCSs9IHNpc3VzYnZnYS8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2F1ZXJzd2FsZC5jIGIvZHJpdmVycy91c2IvbWlzYy9hdWVyc3dhbGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTMwYmI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9hdWVyc3dhbGQuYwpAQCAtMCwwICsxLDIxNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiAgICAgIGF1ZXJzd2FsZC5jICAtLSAgQXVlcnN3YWxkIFBCWC9TeXN0ZW0gVGVsZXBob25lIHVzYiBkcml2ZXIuCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDIwMDEgIFdvbGZnYW5nIE3DvGVzICh3b2xmZ2FuZ0Bpa3N3LW11ZWVzLmRlKQorICoKKyAqICAgICAgVmVyeSBtdWNoIGNvZGUgb2YgdGhpcyBkcml2ZXIgaXMgYm9ycm93ZWQgZnJvbSBkYWJ1c2IuYyAoRGV0aSBGbGllZ2wpCisgKiAgICAgIGFuZCBmcm9tIHRoZSBVU0IgU2tlbGV0b24gZHJpdmVyIChHcmVnIEtyb2FoLUhhcnRtYW4pLiBUaGFuayB5b3UuCisgKgorICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBTdGFuZGFyZCBMaW51eCBtb2R1bGUgaW5jbHVkZSBmaWxlcyAqLworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI3VuZGVmIERFQlVHICAgCQkvKiBpbmNsdWRlIGRlYnVnIG1hY3JvcyB1bnRpbCBpdCdzIGRvbmUJKi8KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIERlYnVnIHN1cHBvcnQgCQkJCQkJICAgICAqLworI2lmZGVmIERFQlVHCisjZGVmaW5lIGR1bXAoIGFkciwgbGVuKSBcCitkbyB7CQkJXAorCXVuc2lnbmVkIGludCB1OwlcCisJcHJpbnRrIChLRVJOX0RFQlVHKTsgXAorCWZvciAodSA9IDA7IHUgPCBsZW47IHUrKykgXAorCQlwcmludGsgKCIgJTAyWCIsIGFkclt1XSAmIDB4RkYpOyBcCisJcHJpbnRrICgiXG4iKTsgXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIGR1bXAoIGFkciwgbGVuKQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBWZXJzaW9uIEluZm9ybWF0aW9uICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIwLjkuMTEiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgICJXb2xmZ2FuZyBNw7xlcyA8d29sZmdhbmdAaWtzdy1tdWVlcy5kZT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICAgICJBdWVyc3dhbGQgUEJYL1N5c3RlbSBUZWxlcGhvbmUgdXNiIGRyaXZlciIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBBdWVyc3dhbGQgVVNCIGRyaXZlciAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIEF1ZXJzd2FsZCBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgSURfQVVFUlNXQUxEICAJMHgwOUJGCisKKyNkZWZpbmUgQVVFUl9NSU5PUl9CQVNFCTExMgkvKiBhdWVyc3dhbGQgZHJpdmVyIG1pbm9yIG51bWJlciAqLworCisvKiB3ZSBjYW4gaGF2ZSB1cCB0byB0aGlzIG51bWJlciBvZiBkZXZpY2UgcGx1Z2dlZCBpbiBhdCBvbmNlICovCisjZGVmaW5lIEFVRVJfTUFYX0RFVklDRVMgMTYKKworCisvKiBOdW1iZXIgb2YgcmVhZCBidWZmZXJzIGZvciBlYWNoIGRldmljZSAqLworI2RlZmluZSBBVV9SQlVGRkVSUyAgICAgMTAKKworLyogTnVtYmVyIG9mIGNoYWluIGVsZW1lbnRzIGZvciBlYWNoIGNvbnRyb2wgY2hhaW4gKi8KKyNkZWZpbmUgQVVDSF9FTEVNRU5UUyAgIDIwCisKKy8qIE51bWJlciBvZiByZXRyaWVzIGluIGNvbW11bmljYXRpb24gKi8KKyNkZWZpbmUgQVVfUkVUUklFUwkxMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogdmVuZG9yIHNwZWNpZmljIHByb3RvY29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEhlYWRlciBCeXRlICovCisjZGVmaW5lIEFVSF9JTkRJUk1BU0sgICAweDgwICAgIC8qIG1hc2sgZm9yIGRpcmVjdC9pbmRpcmVjdCBiaXQgKi8KKyNkZWZpbmUgQVVIX0RJUkVDVCAgICAgIDB4MDAgICAgLyogZGF0YSBpcyBmb3IgVVNCIGRldmljZSAqLworI2RlZmluZSBBVUhfSU5ESVJFQ1QgICAgMHg4MCAgICAvKiBVU0IgZGV2aWNlIGlzIHJlbGF5ICovCisKKyNkZWZpbmUgQVVIX1NQTElUTUFTSyAgIDB4NDAgICAgLyogbWFzayBmb3Igc3BsaXQgYml0ICovCisjZGVmaW5lIEFVSF9VTlNQTElUICAgICAweDAwICAgIC8qIGRhdGEgYmxvY2sgaXMgZnVsbC1zaXplICovCisjZGVmaW5lIEFVSF9TUExJVCAgICAgICAweDQwICAgIC8qIGRhdGEgYmxvY2sgaXMgcGFydCBvZiBhIGxhcmdlciBvbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0LWJ5dGUgZm9sbG93cyAqLworCisjZGVmaW5lIEFVSF9UWVBFTUFTSyAgICAweDNGICAgIC8qIG1hc2sgZm9yIHR5cGUgb2YgZGF0YSB0cmFuc2ZlciAqLworI2RlZmluZSBBVUhfVFlQRVNJWkUgICAgMHg0MCAgICAvKiBkaWZmZXJlbnQgdHlwZXMgKi8KKyNkZWZpbmUgQVVIX0RDSEFOTkVMICAgIDB4MDAgICAgLyogRCBjaGFubmVsIGRhdGEgKi8KKyNkZWZpbmUgQVVIX0IxQ0hBTk5FTCAgIDB4MDEgICAgLyogQjEgY2hhbm5lbCB0cmFuc3BhcmVudCAqLworI2RlZmluZSBBVUhfQjJDSEFOTkVMICAgMHgwMiAgICAvKiBCMiBjaGFubmVsIHRyYW5zcGFyZW50ICovCisvKiAgICAgICAgICAgICAgICAweDAzLi4weDBGICAgICAgIHJlc2VydmVkIGZvciBkcml2ZXIgaW50ZXJuYWwgdXNlICovCisjZGVmaW5lIEFVSF9DT01NQU5EICAgICAweDEwICAgIC8qIENvbW1hbmQgY2hhbm5lbCAqLworI2RlZmluZSBBVUhfQlBST1QgICAgICAgMHgxMSAgICAvKiBDb25maWd1cmF0aW9uIGJsb2NrIHByb3RvY29sICovCisjZGVmaW5lIEFVSF9EUFJPVEFOQSAgICAweDEyICAgIC8qIEQgY2hhbm5lbCBwcm90b2NvbCBhbmFseXplciAqLworI2RlZmluZSBBVUhfVEFQSSAgICAgICAgMHgxMyAgICAvKiB0ZWxlcGhvbmUgYXBpIGRhdGEgKEFURCkgKi8KKy8qICAgICAgICAgICAgICAgIDB4MTQuLjB4M0YgICAgICAgcmVzZXJ2ZWQgZm9yIG90aGVyIHByb3RvY29scyAqLworI2RlZmluZSBBVUhfVU5BU1NJR05FRCAgMHhGRiAgICAvKiBpZiBjaGFyIGRldmljZSBoYXMgbm8gYXNzaWduZWQgc2VydmljZSAqLworI2RlZmluZSBBVUhfRklSU1RVU0VSQ0ggMHgxMSAgICAvKiBmaXJzdCBjaGFubmVsIHdoaWNoIGlzIGF2YWlsYWJsZSBmb3IgZHJpdmVyIHVzZXJzICovCisKKyNkZWZpbmUgQVVIX1NJWkUJMSAJLyogU2l6ZSBvZiBIZWFkZXIgQnl0ZSAqLworCisvKiBTcGxpdCBCeXRlLiBPbmx5IHByZXNlbnQgaWYgc3BsaXQgYml0IGluIGhlYWRlciBieXRlIHNldC4qLworI2RlZmluZSBBVVNfU1RBUlRNQVNLICAgMHg4MCAgICAvKiBtYXNrIGZvciBmaXJzdCBibG9jayBvZiBzcGxpdHRlZCBmcmFtZSAqLworI2RlZmluZSBBVVNfRklSU1QgICAgICAgMHg4MCAgICAvKiBmaXJzdCBibG9jayAqLworI2RlZmluZSBBVVNfRk9MTE9XICAgICAgMHgwMCAgICAvKiBmb2xsb3dpbmcgYmxvY2sgKi8KKworI2RlZmluZSBBVVNfRU5ETUFTSyAgICAgMHg0MCAgICAvKiBtYXNrIGZvciBsYXN0IGJsb2NrIG9mIHNwbGl0dGVkIGZyYW1lICovCisjZGVmaW5lIEFVU19FTkQgICAgICAgICAweDQwICAgIC8qIGxhc3QgYmxvY2sgKi8KKyNkZWZpbmUgQVVTX05PRU5EICAgICAgIDB4MDAgICAgLyogbm90IHRoZSBsYXN0IGJsb2NrICovCisKKyNkZWZpbmUgQVVTX0xFTk1BU0sgICAgIDB4M0YgICAgLyogbWFzayBmb3IgYmxvY2sgbGVuZ3RoIGluZm9ybWF0aW9uICovCisKKy8qIFJlcXVlc3QgdHlwZXMgKi8KKyNkZWZpbmUgQVVUX1JSRVEgICAgICAgIChVU0JfRElSX0lOICB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9PVEhFUikgICAvKiBSZWFkIFJlcXVlc3QgKi8KKyNkZWZpbmUgQVVUX1dSRVEgICAgICAgIChVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9PVEhFUikgICAvKiBXcml0ZSBSZXF1ZXN0ICovCisKKy8qIFZlbmRvciBSZXF1ZXN0cyAqLworI2RlZmluZSBBVVZfR0VUSU5GTyAgICAgMHgwMCAgICAvKiBHZXREZXZpY2VJbmZvICovCisjZGVmaW5lIEFVVl9XQkxPQ0sgICAgICAweDAxICAgIC8qIFdyaXRlIEJsb2NrICovCisjZGVmaW5lIEFVVl9SQkxPQ0sgICAgICAweDAyICAgIC8qIFJlYWQgQmxvY2sgKi8KKyNkZWZpbmUgQVVWX0NIQU5ORUxDVEwgIDB4MDMgICAgLyogQ2hhbm5lbCBDb250cm9sICovCisjZGVmaW5lIEFVVl9EVU1NWQkweDA0CS8qIER1bW15IE91dCBmb3IgcmV0cnkgKi8KKworLyogRGV2aWNlIEluZm8gVHlwZXMgKi8KKyNkZWZpbmUgQVVESV9OVU1CQ0ggICAgIDB4MDAwMCAgLyogTnVtYmVyIG9mIHN1cHBvcnRlZCBCIGNoYW5uZWxzICovCisjZGVmaW5lIEFVRElfT1VURlNJWkUgICAweDAwMDEgIC8qIFNpemUgb2YgT1VUIEIgY2hhbm5lbCBmaWZvcyAqLworI2RlZmluZSBBVURJX01CQ1RSQU5TICAgMHgwMDAyICAvKiBtYXguIEJsb2NrbGVuZ3RoIG9mIGNvbnRyb2wgdHJhbnNmZXIgKi8KKworLyogSW50ZXJydXB0IGVuZHBvaW50IGRlZmluaXRpb25zICovCisjZGVmaW5lIEFVX0lSUUVORFAgICAgICAxICAgICAgIC8qIEVuZHBvaW50IG51bWJlciAqLworI2RlZmluZSBBVV9JUlFDTURJRCAgICAgMTYgICAgICAvKiBDb21tYW5kLWJsb2NrIElEICovCisjZGVmaW5lIEFVX0JMT0NLUkRZICAgICAwICAgICAgIC8qIENvbW1hbmQ6IEJsb2NrIGRhdGEgcmVhZHkgb24gY3RsIGVuZHBvaW50ICovCisjZGVmaW5lIEFVX0lSUU1JTlNJWkUJNQkvKiBOci4gb2YgYnl0ZXMgZGVjb2RlZCBpbiB0aGlzIGRyaXZlciAqLworCisvKiBEZXZpY2UgU3RyaW5nIERlc2NyaXB0b3JzICovCisjZGVmaW5lIEFVU0lfVkVORE9SICAgCTEJLyogIkF1ZXJzd2FsZCBHbWJIICYgQ28uIEtHIiAqLworI2RlZmluZSBBVVNJX0RFVklDRSAgIAkyCS8qIE5hbWUgb2YgdGhlIERldmljZSAqLworI2RlZmluZSBBVVNJX1NFUklBTE5SIAkzCS8qIFNlcmlhbCBOdW1iZXIgKi8KKyNkZWZpbmUgQVVTSV9NU04gICAgICAJNAkvKiAiTVNOIC4uLiIgKGZpcnN0KSBNdWx0aXBsZSBTdWJzY3JpYmVyIE51bWJlciAqLworCisjZGVmaW5lIEFVU0lfRExFTgkxMDAJLyogTWF4LiBMZW5ndGggb2YgRGV2aWNlIERlc2NyaXB0aW9uICovCisKKyNkZWZpbmUgQVVWX1JFVFJZCTB4MTAxCS8qIEZpcnN0IEZpcm13YXJlIHZlcnNpb24gd2hpY2ggY2FuIGRvIGNvbnRyb2wgcmV0cmllcyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRXh0ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIC8gSW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJY2hhciBfX3VzZXIgKmJ1ZjsJLyogcmV0dXJuIGJ1ZmZlciBmb3Igc3RyaW5nIGNvbnRlbnRzICovCisJdW5zaWduZWQgaW50IGJzaXplOwkvKiBzaXplIG9mIHJldHVybiBidWZmZXIgKi8KK30gYXVkZXZpbmZvX3QsKnBhdWRldmluZm9fdDsKKworLyogSU8gY29udHJvbHMgKi8KKyNkZWZpbmUgSU9DVExfQVVfU0xFTgkgIF9JT1IoICdVJywgMHhGMCwgaW50KSAgICAgICAgIC8qIHJldHVybiB0aGUgbWF4LiBzdHJpbmcgZGVzY3JpcHRvciBsZW5ndGggKi8KKyNkZWZpbmUgSU9DVExfQVVfREVWSU5GTyAgX0lPV1IoJ1UnLCAweEYxLCBhdWRldmluZm9fdCkgLyogZ2V0IG5hbWUgb2YgYSBzcGVjaWZpYyBkZXZpY2UgKi8KKyNkZWZpbmUgSU9DVExfQVVfU0VSVlJFUSAgX0lPVyggJ1UnLCAweEYyLCBpbnQpIAkvKiByZXF1ZXN0IGEgc2VydmljZSBjaGFubmVsICovCisjZGVmaW5lIElPQ1RMX0FVX0JVRkxFTgkgIF9JT1IoICdVJywgMHhGMywgaW50KSAgICAgICAgIC8qIHJldHVybiB0aGUgbWF4LiBidWZmZXIgbGVuZ3RoIGZvciB0aGUgZGV2aWNlICovCisjZGVmaW5lIElPQ1RMX0FVX1JYQVZBSUwgIF9JT1IoICdVJywgMHhGNCwgaW50KSAgICAgICAgIC8qIHJldHVybiAhPSAwIGlmIFJlY2VpdmUgRGF0YSBhdmFpbGFibGUgKi8KKyNkZWZpbmUgSU9DVExfQVVfQ09OTkVDVCAgX0lPUiggJ1UnLCAweEY1LCBpbnQpICAgICAgICAgLyogcmV0dXJuICE9IDAgaWYgY29ubmVjdGVkIHRvIGEgc2VydmljZSBjaGFubmVsICovCisjZGVmaW5lIElPQ1RMX0FVX1RYUkVBRFkgIF9JT1IoICdVJywgMHhGNiwgaW50KSAgICAgICAgIC8qIHJldHVybiAhPSAwIGlmIFRyYW5zbWl0dCBjaGFubmVsIHJlYWR5IHRvIHNlbmQgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1UnICAweEY3Li4weEZGIHJlc2V2ZWQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEludGVybmFsIGRhdGEgc3RydWN0dXJlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiovCisvKiB1cmIgY2hhaW4gZWxlbWVudCAqLworc3RydWN0ICBhdWVyY2hhaW47ICAgICAgICAgICAgICAgICAgICAgIC8qIGZvcndhcmQgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAgICAgc3RydWN0IGF1ZXJjaGFpbiAqY2hhaW47ICAgICAgICAvKiBwb2ludGVyIHRvIHRoZSBjaGFpbiB0byB3aGljaCB0aGlzIGVsZW1lbnQgYmVsb25ncyAqLworICAgICAgICBzdHJ1Y3QgdXJiICogdXJicDsgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBhdHRhY2hlZCB1cmIgKi8KKyAgICAgICAgdm9pZCAqY29udGV4dDsgICAgICAgICAgICAgICAgICAvKiBzYXZlZCBVUkIgY29udGV4dCAqLworICAgICAgICB1c2JfY29tcGxldGVfdCBjb21wbGV0ZTsgICAgICAgIC8qIHNhdmVkIFVSQiBjb21wbGV0aW9uIGZ1bmN0aW9uICovCisgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgICAgICAgICAgLyogdG8gaW5jbHVkZSBlbGVtZW50IGludG8gYSBsaXN0ICovCit9IGF1ZXJjaGFpbmVsZW1lbnRfdCwqcGF1ZXJjaGFpbmVsZW1lbnRfdDsKKworLyogdXJiIGNoYWluICovCit0eXBlZGVmIHN0cnVjdCBhdWVyY2hhaW4KK3sKKyAgICAgICAgcGF1ZXJjaGFpbmVsZW1lbnRfdCBhY3RpdmU7ICAgICAvKiBlbGVtZW50IHdoaWNoIGlzIHN1Ym1pdHRlZCB0byB1cmIgKi8KKwlzcGlubG9ja190IGxvY2s7ICAgICAgICAgICAgICAgIC8qIHByb3RlY3Rpb24gYWdhaW5zIGludGVycnVwdHMgKi8KKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCB3YWl0aW5nX2xpc3Q7ICAvKiBsaXN0IG9mIHdhaXRpbmcgZWxlbWVudHMgKi8KKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7ICAgICAvKiBsaXN0IG9mIGF2YWlsYWJsZSBlbGVtZW50cyAqLworfSBhdWVyY2hhaW5fdCwqcGF1ZXJjaGFpbl90OworCisvKiB1cmIgYmxvY2tpbmcgY29tcGxldGlvbiBoZWxwZXIgc3RydWN0ICovCit0eXBlZGVmIHN0cnVjdAoreworCXdhaXRfcXVldWVfaGVhZF90IHdxaDsgICAgCS8qIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KKwl1bnNpZ25lZCBpbnQgZG9uZTsJCS8qIGNvbXBsZXRpb24gZmxhZyAqLworfSBhdWVyY2hhaW5fY2hzX3QsKnBhdWVyY2hhaW5fY2hzX3Q7CisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4qLworLyogYnVmZmVyIGVsZW1lbnQgKi8KK3N0cnVjdCAgYXVlcmJ1ZmN0bDsgICAgICAgICAgICAgICAgICAgICAvKiBmb3J3YXJkICovCit0eXBlZGVmIHN0cnVjdAoreworICAgICAgICBjaGFyICpidWZwOyAgICAgICAgICAgICAgICAgICAgIC8qIHJlZmVyZW5jZSB0byBhbGxvY2F0ZWQgZGF0YSBidWZmZXIgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IGxlbjsgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBkYXRhIGJ1ZmZlciAqLworCXVuc2lnbmVkIGludCByZXRyaWVzOwkJLyogZm9yIHVyYiByZXRyaWVzICovCisgICAgICAgIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmRyOwkvKiBmb3Igc2V0dXAgZGF0YSBpbiBjb250cm9sIG1lc3NhZ2VzICovCisgICAgICAgIHN0cnVjdCB1cmIgKiB1cmJwOyAgICAgICAgICAgICAgICAgICAvKiBVU0IgdXJiICovCisgICAgICAgIHN0cnVjdCBhdWVyYnVmY3RsICpsaXN0OyAgICAgICAgLyogcG9pbnRlciB0byBsaXN0ICovCisgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgYnVmZl9saXN0OyAgICAgLyogcmVmZXJlbmNlIHRvIG5leHQgYnVmZmVyIGluIGxpc3QgKi8KK30gYXVlcmJ1Zl90LCpwYXVlcmJ1Zl90OworCisvKiBidWZmZXIgbGlzdCBjb250cm9sIGJsb2NrICovCit0eXBlZGVmIHN0cnVjdCBhdWVyYnVmY3RsCit7CisgICAgICAgIHNwaW5sb2NrX3QgbG9jazsgICAgICAgICAgICAgICAgLyogcHJvdGVjdGlvbiBpbiBpbnRlcnJ1cHQgKi8KKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBmcmVlX2J1ZmZfbGlzdDsvKiBmcmVlIGJ1ZmZlcnMgKi8KKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCByZWNfYnVmZl9saXN0OyAvKiBidWZmZXJzIHdpdGggcmVjZWl2ZSBkYXRhICovCit9IGF1ZXJidWZjdGxfdCwqcGF1ZXJidWZjdGxfdDsKKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiovCisvKiBzZXJ2aWNlIGNvbnRleHQgKi8KK3N0cnVjdCAgYXVlcnNjb247ICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3J3YXJkICovCit0eXBlZGVmIHZvaWQgKCphdWVyX2Rpc3BhdGNoX3QpKHN0cnVjdCBhdWVyc2NvbiosIHBhdWVyYnVmX3QpOwordHlwZWRlZiB2b2lkICgqYXVlcl9kaXNjb25uX3QpIChzdHJ1Y3QgYXVlcnNjb24qKTsKK3R5cGVkZWYgc3RydWN0IGF1ZXJzY29uCit7CisgICAgICAgIHVuc2lnbmVkIGludCBpZDsgICAgICAgICAgICAgICAgLyogcHJvdG9jb2wgc2VydmljZSBpZCBBVUhfeHh4eCAqLworICAgICAgICBhdWVyX2Rpc3BhdGNoX3QgZGlzcGF0Y2g7ICAgICAgIC8qIGRpc3BhdGNoIHJlYWQgYnVmZmVyICovCisJYXVlcl9kaXNjb25uX3QgZGlzY29ubmVjdDsJLyogZGlzY29ubmVjdCBmcm9tIGRldmljZSwgd2FrZSB1cCBhbGwgY2hhciByZWFkZXJzICovCit9IGF1ZXJzY29uX3QsKnBhdWVyc2Nvbl90OworCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uKi8KKy8qIFVTQiBkZXZpY2UgY29udGV4dCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlzdHJ1Y3Qgc2VtYXBob3JlIAltdXRleDsgICAgICAgICAJICAgIC8qIHByb3RlY3Rpb24gaW4gdXNlciBjb250ZXh0ICovCisJY2hhciAJCQluYW1lWzIwXTsJICAgIC8qIG5hbWUgb2YgdGhlIC9kZXYvdXNiIGVudHJ5ICovCisJdW5zaWduZWQgaW50CQlkdGluZGV4OwkgICAgLyogaW5kZXggaW4gdGhlIGRldmljZSB0YWJsZSAqLworCXN0cnVjdCB1c2JfZGV2aWNlICoJdXNiZGV2OyAgICAgIAkgICAgLyogVVNCIGRldmljZSBoYW5kbGUgKi8KKwlpbnQJCQlvcGVuX2NvdW50OwkgICAgLyogY291bnQgdGhlIG51bWJlciBvZiBvcGVuIGNoYXJhY3RlciBjaGFubmVscyAqLworICAgICAgICBjaGFyIAkJCWRldl9kZXNjW0FVU0lfRExFTl07LyogZm9yIHN0b3JpbmcgYSB0ZXh0dWFsIGRlc2NyaXB0aW9uICovCisgICAgICAgIHVuc2lnbmVkIGludCAJCW1heENvbnRyb2xMZW5ndGg7ICAgLyogbWF4LiBMZW5ndGggb2YgY29udHJvbCBwYWtldCAod2l0aG91dCBoZWFkZXIpICovCisgICAgICAgIHN0cnVjdCB1cmIgKiAJCWludHVyYnA7ICAgICAgICAgICAgLyogaW50ZXJydXB0IHVyYiAqLworICAgICAgICBjaGFyICoJCQlpbnRidWZwOyAgICAgICAgICAgIC8qIGRhdGEgYnVmZmVyIGZvciBpbnRlcnJ1cHQgdXJiICovCisJdW5zaWduZWQgaW50IAkJaXJxc2l6ZTsJICAgIC8qIHNpemUgb2YgaW50ZXJydXB0IGVuZHBvaW50IDEgKi8KKyAgICAgICAgc3RydWN0IGF1ZXJjaGFpbiAJY29udHJvbGNoYWluOyAgCSAgICAvKiBmb3IgY2hhaW5pbmcgb2YgY29udHJvbCBtZXNzYWdlcyAqLworCWF1ZXJidWZjdGxfdCAJCWJ1ZmN0bDsgICAgICAgICAgICAgLyogQnVmZmVyIGNvbnRyb2wgZm9yIGNvbnRyb2wgdHJhbnNmZXJzICovCisgICAgICAgIHBhdWVyc2Nvbl90IAkgICAgIAlzZXJ2aWNlc1tBVUhfVFlQRVNJWkVdOy8qIGNvbnRleHQgcG9pbnRlcnMgZm9yIGVhY2ggc2VydmljZSAqLworCXVuc2lnbmVkIGludAkJdmVyc2lvbjsJICAgIC8qIFZlcnNpb24gb2YgdGhlIGRldmljZSAqLworCXdhaXRfcXVldWVfaGVhZF90IAlidWZmZXJ3YWl0OyAgICAgICAgIC8qIHdhaXQgZm9yIGEgY29udHJvbCBidWZmZXIgKi8KK30gYXVlcnN3YWxkX3QsKnBhdWVyc3dhbGRfdDsKKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLworLyogY2hhcmFjdGVyIGRldmljZSBjb250ZXh0ICovCit0eXBlZGVmIHN0cnVjdAoreworCXN0cnVjdCBzZW1hcGhvcmUgbXV0ZXg7ICAgICAgICAgLyogcHJvdGVjdGlvbiBpbiB1c2VyIGNvbnRleHQgKi8KKwlwYXVlcnN3YWxkX3QgYXVlcmRldjsgICAgICAgICAgIC8qIGNvbnRleHQgcG9pbnRlciBvZiBhc3NpZ25lZCBkZXZpY2UgKi8KKyAgICAgICAgYXVlcmJ1ZmN0bF90IGJ1ZmN0bDsgICAgICAgICAgICAvKiBjb250cm9scyB0aGUgYnVmZmVyIGNoYWluICovCisgICAgICAgIGF1ZXJzY29uX3Qgc2NvbnRleHQ7ICAgICAgICAgICAgLyogc2VydmljZSBjb250ZXh0ICovCisJd2FpdF9xdWV1ZV9oZWFkX3QgcmVhZHdhaXQ7ICAgICAvKiBmb3Igc3luY2hyb25vdXMgcmVhZGluZyAqLworCXN0cnVjdCBzZW1hcGhvcmUgcmVhZG11dGV4OyAgICAgLyogcHJvdGVjdGlvbiBhZ2FpbnN0IG11bHRpcGxlIHJlYWRzICovCisJcGF1ZXJidWZfdCByZWFkYnVmOwkJLyogYnVmZmVyIGhlbGQgZm9yIHBhcnRpYWwgcmVhZGluZyAqLworCXVuc2lnbmVkIGludCByZWFkb2Zmc2V0OwkvKiBjdXJyZW50IG9mZnNldCBpbiByZWFkYnVmICovCisJdW5zaWduZWQgaW50IHJlbW92ZWQ7CQkvKiBpcyAhPSAwIGlmIGRldmljZSBpcyByZW1vdmVkICovCit9IGF1ZXJjaGFyX3QsKnBhdWVyY2hhcl90OworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBGb3J3YXJkcyAqLworc3RhdGljIHZvaWQgYXVlcnN3YWxkX2N0cmxyZWFkX2NvbXBsZXRlIChzdHJ1Y3QgdXJiICogdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBhdWVyc3dhbGRfcmVtb3Zlc2VydmljZSAocGF1ZXJzd2FsZF90IGNwLCBwYXVlcnNjb25fdCBzY3ApOworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGF1ZXJzd2FsZF9kcml2ZXI7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFVTQiBjaGFpbiBoZWxwZXIgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBjb21wbGV0aW9uIGZ1bmN0aW9uIGZvciBjaGFpbmVkIHVyYnMgKi8KK3N0YXRpYyB2b2lkIGF1ZXJjaGFpbl9jb21wbGV0ZSAoc3RydWN0IHVyYiAqIHVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICAgICAgaW50IHJlc3VsdDsKKworICAgICAgICAvKiBnZXQgcG9pbnRlciB0byBlbGVtZW50IGFuZCB0byBjaGFpbiAqLworICAgICAgICBwYXVlcmNoYWluZWxlbWVudF90IGFjZXAgPSAocGF1ZXJjaGFpbmVsZW1lbnRfdCkgdXJiLT5jb250ZXh0OworICAgICAgICBwYXVlcmNoYWluX3QgICAgICAgICBhY3AgPSBhY2VwLT5jaGFpbjsKKworICAgICAgICAvKiByZXN0b3JlIG9yaWdpbmFsIGVudHJpZXMgaW4gdXJiICovCisgICAgICAgIHVyYi0+Y29udGV4dCAgPSBhY2VwLT5jb250ZXh0OworICAgICAgICB1cmItPmNvbXBsZXRlID0gYWNlcC0+Y29tcGxldGU7CisKKyAgICAgICAgZGJnICgiYXVlcmNoYWluX2NvbXBsZXRlIGNhbGxlZCIpOworCisgICAgICAgIC8qIGNhbGwgb3JpZ2luYWwgY29tcGxldGlvbiBmdW5jdGlvbgorICAgICAgICAgICBOT1RFOiB0aGlzIGZ1bmN0aW9uIG1heSBsZWFkIHRvIG1vcmUgdXJicyBzdWJtaXR0ZWQgaW50byB0aGUgY2hhaW4uCisgICAgICAgICAgICAgICAgIChubyBjaGFpbiBsb2NrIGF0IGNhbGxpbmcgY29tcGxldGUoKSEpCisgICAgICAgICAgICAgICAgIGFjcC0+YWN0aXZlICE9IE5VTEwgaXMgcHJvdGVjdGluZyB1cyBhZ2FpbnN0IHJlY3Vyc2lvbi4qLworICAgICAgICB1cmItPmNvbXBsZXRlICh1cmIsIHJlZ3MpOworCisgICAgICAgIC8qIGRldGFjaCBlbGVtZW50IGZyb20gY2hhaW4gZGF0YSBzdHJ1Y3R1cmUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmFjcC0+bG9jaywgZmxhZ3MpOworICAgICAgICBpZiAoYWNwLT5hY3RpdmUgIT0gYWNlcCkgLyogcGFyYW5vaWEgZGVidWcgY2hlY2sgKi8KKwkgICAgICAgIGRiZyAoImF1ZXJjaGFpbl9jb21wbGV0ZTogY29tcGxldGlvbiBvbiBub24tYWN0aXZlIGVsZW1lbnQgY2FsbGVkISIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYWNwLT5hY3RpdmUgPSBOVUxMOworCisgICAgICAgIC8qIGFkZCB0aGUgdXNlZCBjaGFpbiBlbGVtZW50IHRvIHRoZSBsaXN0IG9mIGZyZWUgZWxlbWVudHMgKi8KKwlsaXN0X2FkZF90YWlsICgmYWNlcC0+bGlzdCwgJmFjcC0+ZnJlZV9saXN0KTsKKyAgICAgICAgYWNlcCA9IE5VTEw7CisKKyAgICAgICAgLyogaXMgdGhlcmUgYSBuZXcgZWxlbWVudCB3YWl0aW5nIGluIHRoZSBjaGFpbj8gKi8KKyAgICAgICAgaWYgKCFhY3AtPmFjdGl2ZSAmJiAhbGlzdF9lbXB0eSAoJmFjcC0+d2FpdGluZ19saXN0KSkgeworICAgICAgICAgICAgICAgIC8qIHllczogZ2V0IHRoZSBlbnRyeSAqLworICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtcCA9IGFjcC0+d2FpdGluZ19saXN0Lm5leHQ7CisgICAgICAgICAgICAgICAgbGlzdF9kZWwgKHRtcCk7CisgICAgICAgICAgICAgICAgYWNlcCA9IGxpc3RfZW50cnkgKHRtcCwgYXVlcmNoYWluZWxlbWVudF90LCBsaXN0KTsKKyAgICAgICAgICAgICAgICBhY3AtPmFjdGl2ZSA9IGFjZXA7CisgICAgICAgIH0KKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmFjcC0+bG9jaywgZmxhZ3MpOworCisgICAgICAgIC8qIHN1Ym1pdCB0aGUgbmV3IHVyYiAqLworICAgICAgICBpZiAoYWNlcCkgeworICAgICAgICAgICAgICAgIHVyYiAgICA9IGFjZXAtPnVyYnA7CisgICAgICAgICAgICAgICAgZGJnICgiYXVlcmNoYWluX2NvbXBsZXRlOiBzdWJtaXR0aW5nIG5leHQgdXJiIGZyb20gY2hhaW4iKTsKKwkJdXJiLT5zdGF0dXMgPSAwOwkvKiBuZWVkZWQhICovCisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisKKyAgICAgICAgICAgICAgICAvKiBjaGVjayBmb3Igc3VibWl0IGVycm9ycyAqLworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+c3RhdHVzID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgZGJnKCJhdWVyY2hhaW5fY29tcGxldGU6IHVzYl9zdWJtaXRfdXJiIHdpdGggZXJyb3IgY29kZSAlZCIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgZG8gZXJyb3IgaGFuZGxpbmcgdmlhICp0aGlzKiBjb21wbGV0aW9uIGZ1bmN0aW9uIChyZWN1cnNpdmUpICovCisgICAgICAgICAgICAgICAgICAgICAgICBhdWVyY2hhaW5fY29tcGxldGUoIHVyYiwgTlVMTCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIHNpbXBsZSByZXR1cm4gd2l0aG91dCBzdWJtaXR0aW5nIGEgbmV3IHVyYi4KKyAgICAgICAgICAgICAgICAgICBUaGUgZW1wdHkgY2hhaW4gaXMgZGV0ZWN0ZWQgd2l0aCBhY3AtPmFjdGl2ZSA9PSBOVUxMLiAqLworICAgICAgICB9OworfQorCisKKy8qIHN1Ym1pdCBmdW5jdGlvbiBmb3IgY2hhaW5lZCB1cmJzCisgICB0aGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBjb21wbGV0aW9uIGNvbnRleHQgb3IgZnJvbSB1c2VyIHNwYWNlIQorICAgZWFybHkgPSAxIC0+IHN1Ym1pdCBpbiBmcm9udCBvZiBjaGFpbgorKi8KK3N0YXRpYyBpbnQgYXVlcmNoYWluX3N1Ym1pdF91cmJfbGlzdCAocGF1ZXJjaGFpbl90IGFjcCwgc3RydWN0IHVyYiAqIHVyYiwgaW50IGVhcmx5KQoreworICAgICAgICBpbnQgcmVzdWx0OworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAgICAgICBwYXVlcmNoYWluZWxlbWVudF90IGFjZXAgPSBOVUxMOworCisgICAgICAgIGRiZyAoImF1ZXJjaGFpbl9zdWJtaXRfdXJiIGNhbGxlZCIpOworCisgICAgICAgIC8qIHRyeSB0byBnZXQgYSBjaGFpbiBlbGVtZW50ICovCisgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlICgmYWNwLT5sb2NrLCBmbGFncyk7CisgICAgICAgIGlmICghbGlzdF9lbXB0eSAoJmFjcC0+ZnJlZV9saXN0KSkgeworICAgICAgICAgICAgICAgIC8qIHllczogZ2V0IHRoZSBlbnRyeSAqLworICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtcCA9IGFjcC0+ZnJlZV9saXN0Lm5leHQ7CisgICAgICAgICAgICAgICAgbGlzdF9kZWwgKHRtcCk7CisgICAgICAgICAgICAgICAgYWNlcCA9IGxpc3RfZW50cnkgKHRtcCwgYXVlcmNoYWluZWxlbWVudF90LCBsaXN0KTsKKyAgICAgICAgfQorICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICgmYWNwLT5sb2NrLCBmbGFncyk7CisKKyAgICAgICAgLyogaWYgbm8gY2hhaW4gZWxlbWVudCBhdmFpbGFibGU6IHJldHVybiB3aXRoIGVycm9yICovCisgICAgICAgIGlmICghYWNlcCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgICAgICB9CisKKyAgICAgICAgLyogZmlsbCBpbiB0aGUgbmV3IGNoYWluIGVsZW1lbnQgdmFsdWVzICovCisgICAgICAgIGFjZXAtPmNoYWluICAgID0gYWNwOworICAgICAgICBhY2VwLT5jb250ZXh0ICA9IHVyYi0+Y29udGV4dDsKKyAgICAgICAgYWNlcC0+Y29tcGxldGUgPSB1cmItPmNvbXBsZXRlOworICAgICAgICBhY2VwLT51cmJwICAgICA9IHVyYjsKKyAgICAgICAgSU5JVF9MSVNUX0hFQUQgKCZhY2VwLT5saXN0KTsKKworICAgICAgICAvKiBtb2RpZnkgdXJiICovCisgICAgICAgIHVyYi0+Y29udGV4dCAgID0gYWNlcDsKKyAgICAgICAgdXJiLT5jb21wbGV0ZSAgPSBhdWVyY2hhaW5fY29tcGxldGU7CisgICAgICAgIHVyYi0+c3RhdHVzICAgID0gLUVJTlBST0dSRVNTOyAgICAvKiB1c2Jfc3VibWl0X3VyYiBkb2VzIHRoaXMsIHRvbyAqLworCisgICAgICAgIC8qIGFkZCBlbGVtZW50IHRvIGNoYWluIC0gb3Igc3RhcnQgaXQgaW1tZWRpYXRlbHkgKi8KKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUgKCZhY3AtPmxvY2ssIGZsYWdzKTsKKyAgICAgICAgaWYgKGFjcC0+YWN0aXZlKSB7CisgICAgICAgICAgICAgICAgLyogdGhlcmUgaXMgdHJhZmZpYyBpbiB0aGUgY2hhaW4sIHNpbXBsZSBhZGQgZWxlbWVudCB0byBjaGFpbiAqLworCQlpZiAoZWFybHkpIHsKKwkJCWRiZyAoImFkZGluZyBuZXcgdXJiIHRvIGhlYWQgb2YgY2hhaW4iKTsKKwkJCWxpc3RfYWRkICgmYWNlcC0+bGlzdCwgJmFjcC0+d2FpdGluZ19saXN0KTsKKwkJfSBlbHNlIHsKKwkJCWRiZyAoImFkZGluZyBuZXcgdXJiIHRvIGVuZCBvZiBjaGFpbiIpOworCQkJbGlzdF9hZGRfdGFpbCAoJmFjZXAtPmxpc3QsICZhY3AtPndhaXRpbmdfbGlzdCk7CisJCX0KKwkJYWNlcCA9IE5VTEw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogdGhlIGNoYWluIGlzIGVtcHR5LiBQcmVwYXJlIHJlc3RhcnQgKi8KKyAgICAgICAgICAgICAgICBhY3AtPmFjdGl2ZSA9IGFjZXA7CisgICAgICAgIH0KKyAgICAgICAgLyogU3BpbiBoYXMgdG8gYmUgcmVtb3ZlZCBiZWZvcmUgdXNiX3N1Ym1pdF91cmIhICovCisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZhY3AtPmxvY2ssIGZsYWdzKTsKKworICAgICAgICAvKiBTdWJtaXQgdXJiIGlmIGltbWVkaWF0ZSByZXN0YXJ0ICovCisgICAgICAgIGlmIChhY2VwKSB7CisgICAgICAgICAgICAgICAgZGJnKCJzdWJtaXR0aW5nIHVyYiBpbW1lZGlhdGUiKTsKKwkJdXJiLT5zdGF0dXMgPSAwOwkvKiBuZWVkZWQhICovCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKyAgICAgICAgICAgICAgICAvKiBjaGVjayBmb3Igc3VibWl0IGVycm9ycyAqLworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+c3RhdHVzID0gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgZGJnKCJhdWVyY2hhaW5fc3VibWl0X3VyYjogdXNiX3N1Ym1pdF91cmIgd2l0aCBlcnJvciBjb2RlICVkIiwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBkbyBlcnJvciBoYW5kbGluZyB2aWEgY29tcGxldGlvbiBmdW5jdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgYXVlcmNoYWluX2NvbXBsZXRlKCB1cmIsIE5VTEwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAwOworfQorCisvKiBzdWJtaXQgZnVuY3Rpb24gZm9yIGNoYWluZWQgdXJicworICAgdGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gY29tcGxldGlvbiBjb250ZXh0IG9yIGZyb20gdXNlciBzcGFjZSEKKyovCitzdGF0aWMgaW50IGF1ZXJjaGFpbl9zdWJtaXRfdXJiIChwYXVlcmNoYWluX3QgYWNwLCBzdHJ1Y3QgdXJiICogdXJiKQoreworCXJldHVybiBhdWVyY2hhaW5fc3VibWl0X3VyYl9saXN0IChhY3AsIHVyYiwgMCk7Cit9CisKKy8qIGNhbmNlbCBhbiB1cmIgd2hpY2ggaXMgc3VibWl0dGVkIHRvIHRoZSBjaGFpbgorICAgdGhlIHJlc3VsdCBpcyAwIGlmIHRoZSB1cmIgaXMgY2FuY2VsbGVkLCBvciAtRUlOUFJPR1JFU1MgaWYKKyAgIFVSQl9BU1lOQ19VTkxJTksgaXMgc2V0IGFuZCB0aGUgZnVuY3Rpb24gaXMgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQuCisqLworc3RhdGljIGludCBhdWVyY2hhaW5fdW5saW5rX3VyYiAocGF1ZXJjaGFpbl90IGFjcCwgc3RydWN0IHVyYiAqIHVyYikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworICAgICAgICBzdHJ1Y3QgdXJiICogdXJicDsKKyAgICAgICAgcGF1ZXJjaGFpbmVsZW1lbnRfdCBhY2VwOworICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisKKyAgICAgICAgZGJnICgiYXVlcmNoYWluX3VubGlua191cmIgY2FsbGVkIik7CisKKyAgICAgICAgLyogc2VhcmNoIHRoZSBjaGFpbiBvZiB3YWl0aW5nIGVsZW1lbnRzICovCisgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlICgmYWNwLT5sb2NrLCBmbGFncyk7CisgICAgICAgIGxpc3RfZm9yX2VhY2ggKHRtcCwgJmFjcC0+d2FpdGluZ19saXN0KSB7CisgICAgICAgICAgICAgICAgYWNlcCA9IGxpc3RfZW50cnkgKHRtcCwgYXVlcmNoYWluZWxlbWVudF90LCBsaXN0KTsKKyAgICAgICAgICAgICAgICBpZiAoYWNlcC0+dXJicCA9PSB1cmIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfZGVsICh0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgdXJiLT5jb250ZXh0ID0gYWNlcC0+Y29udGV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+Y29tcGxldGUgPSBhY2VwLT5jb21wbGV0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfYWRkX3RhaWwgKCZhY2VwLT5saXN0LCAmYWNwLT5mcmVlX2xpc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmFjcC0+bG9jaywgZmxhZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgZGJnICgidW5saW5rIHdhaXRpbmcgdXJiIik7CisgICAgICAgICAgICAgICAgICAgICAgICB1cmItPnN0YXR1cyA9IC1FTk9FTlQ7CisgICAgICAgICAgICAgICAgICAgICAgICB1cmItPmNvbXBsZXRlICh1cmIsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIG5vdCBmb3VuZC4gKi8KKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmFjcC0+bG9jaywgZmxhZ3MpOworCisgICAgICAgIC8qIGdldCB0aGUgYWN0aXZlIHVyYiAqLworICAgICAgICBhY2VwID0gYWNwLT5hY3RpdmU7CisgICAgICAgIGlmIChhY2VwKSB7CisgICAgICAgICAgICAgICAgdXJicCA9IGFjZXAtPnVyYnA7CisKKyAgICAgICAgICAgICAgICAvKiBjaGVjayBpZiB3ZSBoYXZlIHRvIGNhbmNlbCB0aGUgYWN0aXZlIHVyYiAqLworICAgICAgICAgICAgICAgIGlmICh1cmJwID09IHVyYikgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90ZSB0aGF0IHRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiB0aGUgY2hlY2sgYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgdW5saW5rKCkgY2FsbCBiZWNhdXNlIG9mIG5vIGxvY2suIFRoaXMgcmFjZSBpcyBoYXJtbGVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgdGhlIHVzYiBtb2R1bGUgd2lsbCBkZXRlY3QgdGhlIHVubGluaygpIGFmdGVyIGNvbXBsZXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICBXZSBjYW4ndCB1c2UgdGhlIGFjcC0+bG9jayBoZXJlIGJlY2F1c2UgdGhlIGNvbXBsZXRpb24gZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnRzIHRvIGdyYWIgaXQuCisJCQkqLworICAgICAgICAgICAgICAgICAgICAgICAgZGJnICgidW5saW5rIGFjdGl2ZSB1cmIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2JfdW5saW5rX3VyYiAodXJicCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogbm90IGZvdW5kIGFueXdheQorICAgICAgICAgICAuLi4gaXMgc29tZSBraW5kIG9mIHN1Y2Nlc3MKKwkqLworICAgICAgICBkYmcgKCJ1cmIgdG8gdW5saW5rIG5vdCBmb3VuZCBpbiBjaGFpbiIpOworICAgICAgICByZXR1cm4gMDsKK30KKworLyogY2FuY2VsIGFsbCB1cmJzIHdoaWNoIGFyZSBpbiB0aGUgY2hhaW4uCisgICB0aGlzIGZ1bmN0aW9uIG11c3Qgbm90IGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBvciBjb21wbGV0aW9uIGhhbmRsZXIuCisqLworc3RhdGljIHZvaWQgYXVlcmNoYWluX3VubGlua19hbGwgKHBhdWVyY2hhaW5fdCBhY3ApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICAgICAgc3RydWN0IHVyYiAqIHVyYnA7CisgICAgICAgIHBhdWVyY2hhaW5lbGVtZW50X3QgYWNlcDsKKworICAgICAgICBkYmcgKCJhdWVyY2hhaW5fdW5saW5rX2FsbCBjYWxsZWQiKTsKKworICAgICAgICAvKiBjbGVhciB0aGUgY2hhaW4gb2Ygd2FpdGluZyBlbGVtZW50cyAqLworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSAoJmFjcC0+bG9jaywgZmxhZ3MpOworICAgICAgICB3aGlsZSAoIWxpc3RfZW1wdHkgKCZhY3AtPndhaXRpbmdfbGlzdCkpIHsKKyAgICAgICAgICAgICAgICAvKiBnZXQgdGhlIG5leHQgZW50cnkgKi8KKyAgICAgICAgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bXAgPSBhY3AtPndhaXRpbmdfbGlzdC5uZXh0OworICAgICAgICAgICAgICAgIGxpc3RfZGVsICh0bXApOworICAgICAgICAgICAgICAgIGFjZXAgPSBsaXN0X2VudHJ5ICh0bXAsIGF1ZXJjaGFpbmVsZW1lbnRfdCwgbGlzdCk7CisgICAgICAgICAgICAgICAgdXJicCA9IGFjZXAtPnVyYnA7CisgICAgICAgICAgICAgICAgdXJicC0+Y29udGV4dCA9IGFjZXAtPmNvbnRleHQ7CisgICAgICAgICAgICAgICAgdXJicC0+Y29tcGxldGUgPSBhY2VwLT5jb21wbGV0ZTsKKyAgICAgICAgICAgICAgICBsaXN0X2FkZF90YWlsICgmYWNlcC0+bGlzdCwgJmFjcC0+ZnJlZV9saXN0KTsKKyAgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICgmYWNwLT5sb2NrLCBmbGFncyk7CisgICAgICAgICAgICAgICAgZGJnICgidW5saW5rIHdhaXRpbmcgdXJiIik7CisgICAgICAgICAgICAgICAgdXJicC0+c3RhdHVzID0gLUVOT0VOVDsKKyAgICAgICAgICAgICAgICB1cmJwLT5jb21wbGV0ZSAodXJicCwgTlVMTCk7CisgICAgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUgKCZhY3AtPmxvY2ssIGZsYWdzKTsKKyAgICAgICAgfQorICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICgmYWNwLT5sb2NrLCBmbGFncyk7CisKKyAgICAgICAgLyogY2xlYXIgdGhlIGFjdGl2ZSB1cmIgKi8KKyAgICAgICAgYWNlcCA9IGFjcC0+YWN0aXZlOworICAgICAgICBpZiAoYWNlcCkgeworICAgICAgICAgICAgICAgIHVyYnAgPSBhY2VwLT51cmJwOworICAgICAgICAgICAgICAgIHVyYnAtPnRyYW5zZmVyX2ZsYWdzICY9IH5VUkJfQVNZTkNfVU5MSU5LOworICAgICAgICAgICAgICAgIGRiZyAoInVubGluayBhY3RpdmUgdXJiIik7CisgICAgICAgICAgICAgICAgdXNiX2tpbGxfdXJiICh1cmJwKTsKKyAgICAgICAgfQorfQorCisKKy8qIGZyZWUgdGhlIGNoYWluLgorICAgdGhpcyBmdW5jdGlvbiBtdXN0IG5vdCBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgb3IgY29tcGxldGlvbiBoYW5kbGVyLgorKi8KK3N0YXRpYyB2b2lkIGF1ZXJjaGFpbl9mcmVlIChwYXVlcmNoYWluX3QgYWNwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgICAgIHBhdWVyY2hhaW5lbGVtZW50X3QgYWNlcDsKKworICAgICAgICBkYmcgKCJhdWVyY2hhaW5fZnJlZSBjYWxsZWQiKTsKKworICAgICAgICAvKiBmaXJzdCwgY2FuY2VsIGFsbCBwZW5kaW5nIHVyYnMgKi8KKyAgICAgICAgYXVlcmNoYWluX3VubGlua19hbGwgKGFjcCk7CisKKyAgICAgICAgLyogZnJlZSB0aGUgZWxlbWVudHMgKi8KKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUgKCZhY3AtPmxvY2ssIGZsYWdzKTsKKyAgICAgICAgd2hpbGUgKCFsaXN0X2VtcHR5ICgmYWNwLT5mcmVlX2xpc3QpKSB7CisgICAgICAgICAgICAgICAgLyogZ2V0IHRoZSBuZXh0IGVudHJ5ICovCisgICAgICAgICAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqdG1wID0gYWNwLT5mcmVlX2xpc3QubmV4dDsKKyAgICAgICAgICAgICAgICBsaXN0X2RlbCAodG1wKTsKKyAgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICgmYWNwLT5sb2NrLCBmbGFncyk7CisJCWFjZXAgPSBsaXN0X2VudHJ5ICh0bXAsIGF1ZXJjaGFpbmVsZW1lbnRfdCwgbGlzdCk7CisgICAgICAgICAgICAgICAga2ZyZWUgKGFjZXApOworCSAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUgKCZhY3AtPmxvY2ssIGZsYWdzKTsKKwl9CisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZhY3AtPmxvY2ssIGZsYWdzKTsKK30KKworCisvKiBJbml0IHRoZSBjaGFpbiBjb250cm9sIHN0cnVjdHVyZSAqLworc3RhdGljIHZvaWQgYXVlcmNoYWluX2luaXQgKHBhdWVyY2hhaW5fdCBhY3ApCit7CisgICAgICAgIC8qIGluaXQgdGhlIGNoYWluIGRhdGEgc3RydWN0dXJlICovCisgICAgICAgIGFjcC0+YWN0aXZlID0gTlVMTDsKKwlzcGluX2xvY2tfaW5pdCAoJmFjcC0+bG9jayk7CisgICAgICAgIElOSVRfTElTVF9IRUFEICgmYWNwLT53YWl0aW5nX2xpc3QpOworICAgICAgICBJTklUX0xJU1RfSEVBRCAoJmFjcC0+ZnJlZV9saXN0KTsKK30KKworLyogc2V0dXAgYSBjaGFpbi4KKyAgIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGVyZSBpcyBubyBjb25jdXJyZW5jeSB3aGlsZSBzZXR0aW5nIHVwIHRoZSBjaGFpbgorICAgcmVxdWlyZW1lbnQ6IGF1ZXJjaGFpbl9pbml0KCkKKyovCitzdGF0aWMgaW50IGF1ZXJjaGFpbl9zZXR1cCAocGF1ZXJjaGFpbl90IGFjcCwgdW5zaWduZWQgaW50IG51bUVsZW1lbnRzKQoreworICAgICAgICBwYXVlcmNoYWluZWxlbWVudF90IGFjZXA7CisKKyAgICAgICAgZGJnICgiYXVlcmNoYWluX3NldHVwIGNhbGxlZCB3aXRoICVkIGVsZW1lbnRzIiwgbnVtRWxlbWVudHMpOworCisgICAgICAgIC8qIGZpbGwgdGhlIGxpc3Qgb2YgZnJlZSBlbGVtZW50cyAqLworICAgICAgICBmb3IgKDtudW1FbGVtZW50czsgbnVtRWxlbWVudHMtLSkgeworICAgICAgICAgICAgICAgIGFjZXAgPSAocGF1ZXJjaGFpbmVsZW1lbnRfdCkga21hbGxvYyAoc2l6ZW9mIChhdWVyY2hhaW5lbGVtZW50X3QpLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFjZXApCisJCQlnb3RvIGFjX2ZhaWw7CisJCW1lbXNldCAoYWNlcCwgMCwgc2l6ZW9mIChhdWVyY2hhaW5lbGVtZW50X3QpKTsKKyAgICAgICAgICAgICAgICBJTklUX0xJU1RfSEVBRCAoJmFjZXAtPmxpc3QpOworICAgICAgICAgICAgICAgIGxpc3RfYWRkX3RhaWwgKCZhY2VwLT5saXN0LCAmYWNwLT5mcmVlX2xpc3QpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworCithY19mYWlsOi8qIGZyZWUgdGhlIGVsZW1lbnRzICovCisgICAgICAgIHdoaWxlICghbGlzdF9lbXB0eSAoJmFjcC0+ZnJlZV9saXN0KSkgeworICAgICAgICAgICAgICAgIC8qIGdldCB0aGUgbmV4dCBlbnRyeSAqLworICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtcCA9IGFjcC0+ZnJlZV9saXN0Lm5leHQ7CisgICAgICAgICAgICAgICAgbGlzdF9kZWwgKHRtcCk7CisgICAgICAgICAgICAgICAgYWNlcCA9IGxpc3RfZW50cnkgKHRtcCwgYXVlcmNoYWluZWxlbWVudF90LCBsaXN0KTsKKyAgICAgICAgICAgICAgICBrZnJlZSAoYWNlcCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC1FTk9NRU07Cit9CisKKworLyogY29tcGxldGlvbiBoYW5kbGVyIGZvciBzeW5jaHJvbm91cyBjaGFpbmVkIFVSQnMgKi8KK3N0YXRpYyB2b2lkIGF1ZXJjaGFpbl9ibG9ja2luZ19jb21wbGV0aW9uIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXBhdWVyY2hhaW5fY2hzX3QgcGNocyA9IChwYXVlcmNoYWluX2Noc190KXVyYi0+Y29udGV4dDsKKwlwY2hzLT5kb25lID0gMTsKKwl3bWIoKTsKKwl3YWtlX3VwICgmcGNocy0+d3FoKTsKK30KKworCisvKiBTdGFydHMgY2hhaW5lZCB1cmIgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uIG9yIHRpbWVvdXQgKi8KK3N0YXRpYyBpbnQgYXVlcmNoYWluX3N0YXJ0X3dhaXRfdXJiIChwYXVlcmNoYWluX3QgYWNwLCBzdHJ1Y3QgdXJiICp1cmIsIGludCB0aW1lb3V0LCBpbnQqIGFjdHVhbF9sZW5ndGgpCit7CisJYXVlcmNoYWluX2Noc190IGNoczsKKwlpbnQgc3RhdHVzOworCisJZGJnICgiYXVlcmNoYWluX3N0YXJ0X3dhaXRfdXJiIGNhbGxlZCIpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZjaHMud3FoKTsKKwljaHMuZG9uZSA9IDA7CisKKwl1cmItPmNvbnRleHQgPSAmY2hzOworCXN0YXR1cyA9IGF1ZXJjaGFpbl9zdWJtaXRfdXJiIChhY3AsIHVyYik7CisJaWYgKHN0YXR1cykKKwkJLyogc29tZXRoaW5nIHdlbnQgd3JvbmcgKi8KKwkJcmV0dXJuIHN0YXR1czsKKworCXRpbWVvdXQgPSB3YWl0X2V2ZW50X3RpbWVvdXQoY2hzLndxaCwgY2hzLmRvbmUsIHRpbWVvdXQpOworCisJaWYgKCF0aW1lb3V0ICYmICFjaHMuZG9uZSkgeworCQlpZiAodXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSB7CS8qIE5vIGNhbGxiYWNrPyEhICovCisJCQlkYmcgKCJhdWVyY2hhaW5fc3RhcnRfd2FpdF91cmI6IHJhY2VkIHRpbWVvdXQiKTsKKwkJCXN0YXR1cyA9IHVyYi0+c3RhdHVzOworCQl9IGVsc2UgeworCQkJZGJnICgiYXVlcmNoYWluX3N0YXJ0X3dhaXRfdXJiOiB0aW1lb3V0Iik7CisJCQlhdWVyY2hhaW5fdW5saW5rX3VyYiAoYWNwLCB1cmIpOyAgLyogcmVtb3ZlIHVyYiBzYWZlbHkgKi8KKwkJCXN0YXR1cyA9IC1FVElNRURPVVQ7CisJCX0KKwl9IGVsc2UKKwkJc3RhdHVzID0gdXJiLT5zdGF0dXM7CisKKwlpZiAoYWN0dWFsX2xlbmd0aCkKKwkJKmFjdHVhbF9sZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGg7CisKKyAgCXJldHVybiBzdGF0dXM7Cit9CisKKworLyogYXVlcmNoYWluX2NvbnRyb2xfbXNnIC0gQnVpbGRzIGEgY29udHJvbCB1cmIsIHNlbmRzIGl0IG9mZiBhbmQgd2FpdHMgZm9yIGNvbXBsZXRpb24KKyAgIGFjcDogcG9pbnRlciB0byB0aGUgYXVlcmNoYWluCisgICBkZXY6IHBvaW50ZXIgdG8gdGhlIHVzYiBkZXZpY2UgdG8gc2VuZCB0aGUgbWVzc2FnZSB0bworICAgcGlwZTogZW5kcG9pbnQgInBpcGUiIHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG8KKyAgIHJlcXVlc3Q6IFVTQiBtZXNzYWdlIHJlcXVlc3QgdmFsdWUKKyAgIHJlcXVlc3R0eXBlOiBVU0IgbWVzc2FnZSByZXF1ZXN0IHR5cGUgdmFsdWUKKyAgIHZhbHVlOiBVU0IgbWVzc2FnZSB2YWx1ZQorICAgaW5kZXg6IFVTQiBtZXNzYWdlIGluZGV4IHZhbHVlCisgICBkYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQKKyAgIHNpemU6IGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZGF0YSB0byBzZW5kCisgICB0aW1lb3V0OiB0aW1lIHRvIHdhaXQgZm9yIHRoZSBtZXNzYWdlIHRvIGNvbXBsZXRlIGJlZm9yZSB0aW1pbmcgb3V0IChpZiAwIHRoZSB3YWl0IGlzIGZvcmV2ZXIpCisKKyAgIFRoaXMgZnVuY3Rpb24gc2VuZHMgYSBzaW1wbGUgY29udHJvbCBtZXNzYWdlIHRvIGEgc3BlY2lmaWVkIGVuZHBvaW50CisgICBhbmQgd2FpdHMgZm9yIHRoZSBtZXNzYWdlIHRvIGNvbXBsZXRlLCBvciB0aW1lb3V0LgorCisgICBJZiBzdWNjZXNzZnVsLCBpdCByZXR1cm5zIHRoZSB0cmFuc2ZlcnJlZCBsZW5ndGgsIG90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KKworICAgRG9uJ3QgdXNlIHRoaXMgZnVuY3Rpb24gZnJvbSB3aXRoaW4gYW4gaW50ZXJydXB0IGNvbnRleHQsIGxpa2UgYQorICAgYm90dG9tIGhhbGYgaGFuZGxlci4gIElmIHlvdSBuZWVkIGFuIGFzeW5jaHJvbm91cyBtZXNzYWdlLCBvciBuZWVkIHRvIHNlbmQKKyAgIGEgbWVzc2FnZSBmcm9tIHdpdGhpbiBpbnRlcnJ1cHQgY29udGV4dCwgdXNlIGF1ZXJjaGFpbl9zdWJtaXRfdXJiKCkKKyovCitzdGF0aWMgaW50IGF1ZXJjaGFpbl9jb250cm9sX21zZyAocGF1ZXJjaGFpbl90IGFjcCwgc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUsIF9fdTggcmVxdWVzdCwgX191OCByZXF1ZXN0dHlwZSwKKwkJCSAgICAgICAgICBfX3UxNiB2YWx1ZSwgX191MTYgaW5kZXgsIHZvaWQgKmRhdGEsIF9fdTE2IHNpemUsIGludCB0aW1lb3V0KQoreworCWludCByZXQ7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqZHI7CisJc3RydWN0IHVyYiAqdXJiOworICAgICAgICBpbnQgbGVuZ3RoOworCisgICAgICAgIGRiZyAoImF1ZXJjaGFpbl9jb250cm9sX21zZyIpOworICAgICAgICBkciA9IGttYWxsb2MgKHNpemVvZiAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksIEdGUF9LRVJORUwpOworCWlmICghZHIpCisJCXJldHVybiAtRU5PTUVNOworCXVyYiA9IHVzYl9hbGxvY191cmIgKDAsIEdGUF9LRVJORUwpOworCWlmICghdXJiKSB7CisgICAgICAgIAlrZnJlZSAoZHIpOworCQlyZXR1cm4gLUVOT01FTTsKKyAgICAgICAgfQorCisJZHItPmJSZXF1ZXN0VHlwZSA9IHJlcXVlc3R0eXBlOworCWRyLT5iUmVxdWVzdCA9IHJlcXVlc3Q7CisJZHItPndWYWx1ZSAgPSBjcHVfdG9fbGUxNiAodmFsdWUpOworCWRyLT53SW5kZXggID0gY3B1X3RvX2xlMTYgKGluZGV4KTsKKwlkci0+d0xlbmd0aCA9IGNwdV90b19sZTE2IChzaXplKTsKKworCXVzYl9maWxsX2NvbnRyb2xfdXJiICh1cmIsIGRldiwgcGlwZSwgKHVuc2lnbmVkIGNoYXIqKWRyLCBkYXRhLCBzaXplLCAgICAvKiBidWlsZCB1cmIgKi8KKwkJICAgICAgICAgIGF1ZXJjaGFpbl9ibG9ja2luZ19jb21wbGV0aW9uLCBOVUxMKTsKKwlyZXQgPSBhdWVyY2hhaW5fc3RhcnRfd2FpdF91cmIgKGFjcCwgdXJiLCB0aW1lb3V0LCAmbGVuZ3RoKTsKKworCXVzYl9mcmVlX3VyYiAodXJiKTsKKwlrZnJlZSAoZHIpOworCisgICAgICAgIGlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWVsc2UKKwkJcmV0dXJuIGxlbmd0aDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogQnVmZmVyIExpc3QgaGVscGVyIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyogZnJlZSBhIHNpbmdsZSBhdWVyYnVmICovCitzdGF0aWMgdm9pZCBhdWVyYnVmX2ZyZWUgKHBhdWVyYnVmX3QgYnApCit7CisJaWYgKGJwLT5idWZwKSB7CisJCWtmcmVlIChicC0+YnVmcCk7CisJfQorCWlmIChicC0+ZHIpIHsKKwkJa2ZyZWUgKGJwLT5kcik7CisJfQorCWlmIChicC0+dXJicCkgeworCQl1c2JfZnJlZV91cmIgKGJwLT51cmJwKTsKKwl9CisJa2ZyZWUgKGJwKTsKK30KKworLyogZnJlZSB0aGUgYnVmZmVycyBmcm9tIGFuIGF1ZXJidWYgbGlzdCAqLworc3RhdGljIHZvaWQgYXVlcmJ1Zl9mcmVlX2xpc3QgKHN0cnVjdCBsaXN0X2hlYWQgKnEpCit7CisgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCXBhdWVyYnVmX3QgYnA7CisKKwlkYmcgKCJhdWVyYnVmX2ZyZWVfbGlzdCIpOworCWZvciAocCA9IHEtPm5leHQ7IHAgIT0gcTspIHsKKwkJYnAgPSBsaXN0X2VudHJ5IChwLCBhdWVyYnVmX3QsIGJ1ZmZfbGlzdCk7CisJCXRtcCA9IHAtPm5leHQ7CisJCWxpc3RfZGVsIChwKTsKKwkJcCA9IHRtcDsKKwkJYXVlcmJ1Zl9mcmVlIChicCk7CisJfQorfQorCisvKiBpbml0IHRoZSBtZW1iZXJzIG9mIGEgbGlzdCBjb250cm9sIGJsb2NrICovCitzdGF0aWMgdm9pZCBhdWVyYnVmX2luaXQgKHBhdWVyYnVmY3RsX3QgYmNwKQoreworCWRiZyAoImF1ZXJidWZfaW5pdCIpOworCXNwaW5fbG9ja19pbml0ICgmYmNwLT5sb2NrKTsKKyAgICAgICAgSU5JVF9MSVNUX0hFQUQgKCZiY3AtPmZyZWVfYnVmZl9saXN0KTsKKyAgICAgICAgSU5JVF9MSVNUX0hFQUQgKCZiY3AtPnJlY19idWZmX2xpc3QpOworfQorCisvKiBmcmVlIGFsbCBidWZmZXJzIGZyb20gYW4gYXVlcmJ1ZiBjaGFpbiAqLworc3RhdGljIHZvaWQgYXVlcmJ1Zl9mcmVlX2J1ZmZlcnMgKHBhdWVyYnVmY3RsX3QgYmNwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZGJnICgiYXVlcmJ1Zl9mcmVlX2J1ZmZlcnMiKTsKKworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSAoJmJjcC0+bG9jaywgZmxhZ3MpOworCisJYXVlcmJ1Zl9mcmVlX2xpc3QgKCZiY3AtPmZyZWVfYnVmZl9saXN0KTsKKwlhdWVyYnVmX2ZyZWVfbGlzdCAoJmJjcC0+cmVjX2J1ZmZfbGlzdCk7CisKKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmJjcC0+bG9jaywgZmxhZ3MpOworfQorCisvKiBzZXR1cCBhIGxpc3Qgb2YgYnVmZmVycyAqLworLyogcmVxdWlyZW1lbnQ6IGF1ZXJidWZfaW5pdCgpICovCitzdGF0aWMgaW50IGF1ZXJidWZfc2V0dXAgKHBhdWVyYnVmY3RsX3QgYmNwLCB1bnNpZ25lZCBpbnQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGludCBidWZzaXplKQoreworICAgICAgICBwYXVlcmJ1Zl90IGJlcCA9IE5VTEw7CisKKyAgICAgICAgZGJnICgiYXVlcmJ1Zl9zZXR1cCBjYWxsZWQgd2l0aCAlZCBlbGVtZW50cyBvZiAlZCBieXRlcyIsIG51bUVsZW1lbnRzLCBidWZzaXplKTsKKworICAgICAgICAvKiBmaWxsIHRoZSBsaXN0IG9mIGZyZWUgZWxlbWVudHMgKi8KKyAgICAgICAgZm9yICg7bnVtRWxlbWVudHM7IG51bUVsZW1lbnRzLS0pIHsKKyAgICAgICAgICAgICAgICBiZXAgPSAocGF1ZXJidWZfdCkga21hbGxvYyAoc2l6ZW9mIChhdWVyYnVmX3QpLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgICAgICAgICBpZiAoIWJlcCkKKwkJCWdvdG8gYmxfZmFpbDsKKwkgICAgICAgIG1lbXNldCAoYmVwLCAwLCBzaXplb2YgKGF1ZXJidWZfdCkpOworICAgICAgICAgICAgICAgIGJlcC0+bGlzdCA9IGJjcDsKKyAgICAgICAgICAgICAgICBJTklUX0xJU1RfSEVBRCAoJmJlcC0+YnVmZl9saXN0KTsKKyAgICAgICAgICAgICAgICBiZXAtPmJ1ZnAgPSAoY2hhciAqKSBrbWFsbG9jIChidWZzaXplLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgICAgICAgICBpZiAoIWJlcC0+YnVmcCkKKwkJCWdvdG8gYmxfZmFpbDsKKyAgICAgICAgICAgICAgICBiZXAtPmRyID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikga21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSwgR0ZQX0tFUk5FTCk7CisgICAgICAgICAgICAgICAgaWYgKCFiZXAtPmRyKQorCQkJZ290byBibF9mYWlsOworICAgICAgICAgICAgICAgIGJlcC0+dXJicCA9IHVzYl9hbGxvY191cmIgKDAsIEdGUF9LRVJORUwpOworICAgICAgICAgICAgICAgIGlmICghYmVwLT51cmJwKQorCQkJZ290byBibF9mYWlsOworICAgICAgICAgICAgICAgIGxpc3RfYWRkX3RhaWwgKCZiZXAtPmJ1ZmZfbGlzdCwgJmJjcC0+ZnJlZV9idWZmX2xpc3QpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworCitibF9mYWlsOi8qIG5vdCBlbm91Z2ggbWVtb3J5LiBGcmVlIGFsbG9jYXRlZCBlbGVtZW50cyAqLworICAgICAgICBkYmcgKCJhdWVyYnVmX3NldHVwOiBubyBtb3JlIG1lbW9yeSIpOworCWtmcmVlKGJlcCk7CisgICAgICAgIGF1ZXJidWZfZnJlZV9idWZmZXJzIChiY3ApOworICAgICAgICByZXR1cm4gLUVOT01FTTsKK30KKworLyogaW5zZXJ0IGEgdXNlZCBidWZmZXIgaW50byB0aGUgZnJlZSBsaXN0ICovCitzdGF0aWMgdm9pZCBhdWVyYnVmX3JlbGVhc2VidWYoIHBhdWVyYnVmX3QgYnApCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgICAgIHBhdWVyYnVmY3RsX3QgYmNwID0gYnAtPmxpc3Q7CisJYnAtPnJldHJpZXMgPSAwOworCisgICAgICAgIGRiZyAoImF1ZXJidWZfcmVsZWFzZWJ1ZiBjYWxsZWQiKTsKKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUgKCZiY3AtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsICgmYnAtPmJ1ZmZfbGlzdCwgJmJjcC0+ZnJlZV9idWZmX2xpc3QpOworICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICgmYmNwLT5sb2NrLCBmbGFncyk7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIENvbXBsZXRpb24gaGFuZGxlcnMgKi8KKworLyogVmFsdWVzIG9mIHVyYi0+c3RhdHVzIG9yIHJlc3VsdHMgb2YgdXNiX3N1Ym1pdF91cmIoKToKKzAJCUluaXRpYWwsIE9LCistRUlOUFJPR1JFU1MJZHVyaW5nIHN1Ym1pc3Npb24gdW50aWwgZW5kCistRU5PRU5UCQlpZiB1cmIgaXMgdW5saW5rZWQKKy1FVElNRURPVVQJVHJhbnNmZXIgdGltZWQgb3V0LCBOQUsKKy1FTk9NRU0JCU1lbW9yeSBPdmVyZmxvdworLUVOT0RFVgkJU3BlY2lmaWVkIFVTQi1kZXZpY2Ugb3IgYnVzIGRvZXNuJ3QgZXhpc3QKKy1FTlhJTwkJVVJCIGFscmVhZHkgcXVldWVkCistRUlOVkFMCQlhKSBJbnZhbGlkIHRyYW5zZmVyIHR5cGUgc3BlY2lmaWVkIChvciBub3Qgc3VwcG9ydGVkKQorCQliKSBJbnZhbGlkIGludGVycnVwdCBpbnRlcnZhbCAoMG4yNTYpCistRUFHQUlOCQlhKSBTcGVjaWZpZWQgSVNPIHN0YXJ0IGZyYW1lIHRvbyBlYXJseQorCQliKSAodXNpbmcgSVNPLUFTQVApIFRvbyBtdWNoIHNjaGVkdWxlZCBmb3IgdGhlIGZ1dHVyZSB3YWl0IHNvbWUgdGltZSBhbmQgdHJ5IGFnYWluLgorLUVGQklHCQlUb28gbXVjaCBJU08gZnJhbWVzIHJlcXVlc3RlZCAoY3VycmVudGx5IHVoY2k5MDApCistRVBJUEUJCVNwZWNpZmllZCBwaXBlLWhhbmRsZS9FbmRwb2ludCBpcyBhbHJlYWR5IHN0YWxsZWQKKy1FTVNHU0laRQlFbmRwb2ludCBtZXNzYWdlIHNpemUgaXMgemVybywgZG8gaW50ZXJmYWNlL2FsdGVybmF0ZSBzZXR0aW5nCistRVBST1RPCQlhKSBCaXRzdHVmZiBlcnJvcgorCQliKSBVbmtub3duIFVTQiBlcnJvcgorLUVJTFNFUQkJQ1JDIG1pc21hdGNoCistRU5PU1IJCUJ1ZmZlciBlcnJvcgorLUVSRU1PVEVJTwlTaG9ydCBwYWNrZXQgZGV0ZWN0ZWQKKy1FWERFVgkJSVNPIHRyYW5zZmVyIG9ubHkgcGFydGlhbGx5IGNvbXBsZXRlZCBsb29rIGF0IGluZGl2aWR1YWwgZnJhbWUgc3RhdHVzIGZvciBkZXRhaWxzCistRUlOVkFMCQlJU08gbWFkbmVzcywgaWYgdGhpcyBoYXBwZW5zOiBMb2cgb2ZmIGFuZCBnbyBob21lCistRU9WRVJGTE9XCWJhYmJsZQorKi8KKworLyogY2hlY2sgaWYgYSBzdGF0dXMgY29kZSBhbGxvd3MgYSByZXRyeSAqLworc3RhdGljIGludCBhdWVyc3dhbGRfc3RhdHVzX3JldHJ5IChpbnQgc3RhdHVzKQoreworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSAwOgorCWNhc2UgLUVUSU1FRE9VVDoKKwljYXNlIC1FT1ZFUkZMT1c6CisJY2FzZSAtRUFHQUlOOgorCWNhc2UgLUVQSVBFOgorCWNhc2UgLUVQUk9UTzoKKwljYXNlIC1FSUxTRVE6CisJY2FzZSAtRU5PU1I6CisJY2FzZSAtRVJFTU9URUlPOgorCQlyZXR1cm4gMTsgLyogZG8gYSByZXRyeSAqLworCX0KKwlyZXR1cm4gMDsJLyogbm8gcmV0cnkgcG9zc2libGUgKi8KK30KKworLyogQ29tcGxldGlvbiBvZiBhc3luY2hyb25vdXMgd3JpdGUgYmxvY2sgKi8KK3N0YXRpYyB2b2lkIGF1ZXJjaGFyX2N0cmx3cml0ZV9jb21wbGV0ZSAoc3RydWN0IHVyYiAqIHVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcGF1ZXJidWZfdCBicCA9IChwYXVlcmJ1Zl90KSB1cmItPmNvbnRleHQ7CisJcGF1ZXJzd2FsZF90IGNwID0gKChwYXVlcnN3YWxkX3QpKChjaGFyICopKGJwLT5saXN0KS0odW5zaWduZWQgbG9uZykoJigocGF1ZXJzd2FsZF90KTApLT5idWZjdGwpKSk7CisJZGJnICgiYXVlcmNoYXJfY3RybHdyaXRlX2NvbXBsZXRlIGNhbGxlZCIpOworCisJLyogcmV1c2UgdGhlIGJ1ZmZlciAqLworCWF1ZXJidWZfcmVsZWFzZWJ1ZiAoYnApOworCS8qIFdha2UgdXAgYWxsIHByb2Nlc3NlcyB3YWl0aW5nIGZvciBhIGJ1ZmZlciAqLworCXdha2VfdXAgKCZjcC0+YnVmZmVyd2FpdCk7Cit9CisKKy8qIENvbXBsZXRpb24gaGFuZGxlciBmb3IgZHVtbXkgcmV0cnkgcGFja2V0ICovCitzdGF0aWMgdm9pZCBhdWVyc3dhbGRfY3RybHJlYWRfd3JldGNvbXBsZXRlIChzdHJ1Y3QgdXJiICogdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyAgICAgICAgcGF1ZXJidWZfdCBicCA9IChwYXVlcmJ1Zl90KSB1cmItPmNvbnRleHQ7CisgICAgICAgIHBhdWVyc3dhbGRfdCBjcDsKKwlpbnQgcmV0OworICAgICAgICBkYmcgKCJhdWVyc3dhbGRfY3RybHJlYWRfd3JldGNvbXBsZXRlIGNhbGxlZCIpOworICAgICAgICBkYmcgKCJjb21wbGV0ZSB3aXRoIHN0YXR1czogJWQiLCB1cmItPnN0YXR1cyk7CisJY3AgPSAoKHBhdWVyc3dhbGRfdCkoKGNoYXIgKikoYnAtPmxpc3QpLSh1bnNpZ25lZCBsb25nKSgmKChwYXVlcnN3YWxkX3QpMCktPmJ1ZmN0bCkpKTsKKworCS8qIGNoZWNrIGlmIGl0IGlzIHBvc3NpYmxlIHRvIGFkdmFuY2UgKi8KKwlpZiAoIWF1ZXJzd2FsZF9zdGF0dXNfcmV0cnkgKHVyYi0+c3RhdHVzKSB8fCAhY3AtPnVzYmRldikgeworCQkvKiByZXVzZSB0aGUgYnVmZmVyICovCisJCWVyciAoImNvbnRyb2wgZHVtbXk6IHRyYW5zbWlzc2lvbiBlcnJvciAlZCwgY2FuIG5vdCByZXRyeSIsIHVyYi0+c3RhdHVzKTsKKwkJYXVlcmJ1Zl9yZWxlYXNlYnVmIChicCk7CisJCS8qIFdha2UgdXAgYWxsIHByb2Nlc3NlcyB3YWl0aW5nIGZvciBhIGJ1ZmZlciAqLworCQl3YWtlX3VwICgmY3AtPmJ1ZmZlcndhaXQpOworCQlyZXR1cm47CisJfQorCisJLyogZmlsbCB0aGUgY29udHJvbCBtZXNzYWdlICovCisJYnAtPmRyLT5iUmVxdWVzdFR5cGUgPSBBVVRfUlJFUTsKKwlicC0+ZHItPmJSZXF1ZXN0ICAgICA9IEFVVl9SQkxPQ0s7CisJYnAtPmRyLT53TGVuZ3RoICAgICAgPSBicC0+ZHItPndWYWx1ZTsJLyogdGVtcG9yYXJ5IHN0b3JlZCAqLworCWJwLT5kci0+d1ZhbHVlICAgICAgID0gY3B1X3RvX2xlMTYgKDEpOwkvKiBSZXRyeSBGbGFnICovCisJLyogYnAtPmRyLT5pbmRleCAgICA9IGNoYW5uZWwgaWQ7ICAgICAgICAgIHJlbWFpbnMgKi8KKwl1c2JfZmlsbF9jb250cm9sX3VyYiAoYnAtPnVyYnAsIGNwLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZSAoY3AtPnVzYmRldiwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKilicC0+ZHIsIGJwLT5idWZwLCBsZTE2X3RvX2NwdSAoYnAtPmRyLT53TGVuZ3RoKSwKKwkJICAgICAgICAgIGF1ZXJzd2FsZF9jdHJscmVhZF9jb21wbGV0ZSxicCk7CisKKwkvKiBzdWJtaXQgdGhlIGNvbnRyb2wgbXNnIGFzIG5leHQgcGFrZXQgKi8KKwlyZXQgPSBhdWVyY2hhaW5fc3VibWl0X3VyYl9saXN0ICgmY3AtPmNvbnRyb2xjaGFpbiwgYnAtPnVyYnAsIDEpOworICAgICAgICBpZiAocmV0KSB7CisgICAgICAgIAlkYmcgKCJhdWVyc3dhbGRfY3RybHJlYWRfY29tcGxldGU6IG5vbnplcm8gcmVzdWx0IG9mIGF1ZXJjaGFpbl9zdWJtaXRfdXJiX2xpc3QgJWQiLCByZXQpOworICAgICAgICAJYnAtPnVyYnAtPnN0YXR1cyA9IHJldDsKKyAgICAgICAgCWF1ZXJzd2FsZF9jdHJscmVhZF9jb21wbGV0ZSAoYnAtPnVyYnAsIE5VTEwpOworICAgIAl9Cit9CisKKy8qIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgcmVjZWl2aW5nIG9mIGNvbnRyb2wgbWVzc2FnZXMgKi8KK3N0YXRpYyB2b2lkIGF1ZXJzd2FsZF9jdHJscmVhZF9jb21wbGV0ZSAoc3RydWN0IHVyYiAqIHVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisgICAgICAgIHVuc2lnbmVkIGludCAgc2VydmljZWlkOworICAgICAgICBwYXVlcnN3YWxkX3QgIGNwOworICAgICAgICBwYXVlcnNjb25fdCAgIHNjcDsKKyAgICAgICAgcGF1ZXJidWZfdCAgICBicCAgPSAocGF1ZXJidWZfdCkgdXJiLT5jb250ZXh0OworCWludCByZXQ7CisgICAgICAgIGRiZyAoImF1ZXJzd2FsZF9jdHJscmVhZF9jb21wbGV0ZSBjYWxsZWQiKTsKKworCWNwID0gKChwYXVlcnN3YWxkX3QpKChjaGFyICopKGJwLT5saXN0KS0odW5zaWduZWQgbG9uZykoJigocGF1ZXJzd2FsZF90KTApLT5idWZjdGwpKSk7CisKKwkvKiBjaGVjayBpZiB0aGVyZSBpcyB2YWxpZCBkYXRhIGluIHRoaXMgdXJiICovCisgICAgICAgIGlmICh1cmItPnN0YXR1cykgeworCQlkYmcgKCJjb21wbGV0ZSB3aXRoIG5vbi16ZXJvIHN0YXR1czogJWQiLCB1cmItPnN0YXR1cyk7CisJCS8qIHNob3VsZCB3ZSBkbyBhIHJldHJ5PyAqLworCQlpZiAoIWF1ZXJzd2FsZF9zdGF0dXNfcmV0cnkgKHVyYi0+c3RhdHVzKQorCQkgfHwgIWNwLT51c2JkZXYKKwkJIHx8IChjcC0+dmVyc2lvbiA8IEFVVl9SRVRSWSkKKyAgICAgICAgICAgICAgICAgfHwgKGJwLT5yZXRyaWVzID49IEFVX1JFVFJJRVMpKSB7CisJCQkvKiByZXVzZSB0aGUgYnVmZmVyICovCisJCQllcnIgKCJjb250cm9sIHJlYWQ6IHRyYW5zbWlzc2lvbiBlcnJvciAlZCwgY2FuIG5vdCByZXRyeSIsIHVyYi0+c3RhdHVzKTsKKwkJCWF1ZXJidWZfcmVsZWFzZWJ1ZiAoYnApOworCQkJLyogV2FrZSB1cCBhbGwgcHJvY2Vzc2VzIHdhaXRpbmcgZm9yIGEgYnVmZmVyICovCisJCQl3YWtlX3VwICgmY3AtPmJ1ZmZlcndhaXQpOworCQkJcmV0dXJuOworCQl9CisJCWJwLT5yZXRyaWVzKys7CisJCWRiZyAoIlJldHJ5IGNvdW50ID0gJWQiLCBicC0+cmV0cmllcyk7CisJCS8qIHNlbmQgYSBsb25nIGR1bW15IGNvbnRyb2wtd3JpdGUtbWVzc2FnZSB0byBhbGxvdyBkZXZpY2UgZmlybXdhcmUgdG8gcmVhY3QgKi8KKwkJYnAtPmRyLT5iUmVxdWVzdFR5cGUgPSBBVVRfV1JFUTsKKwkJYnAtPmRyLT5iUmVxdWVzdCAgICAgPSBBVVZfRFVNTVk7CisJCWJwLT5kci0+d1ZhbHVlICAgICAgID0gYnAtPmRyLT53TGVuZ3RoOyAvKiB0ZW1wb3Jhcnkgc3RvcmFnZSAqLworCQkvLyBicC0+ZHItPndJbmRleCAgICBjaGFubmVsIElEIHJlbWFpbnMKKwkJYnAtPmRyLT53TGVuZ3RoICAgICAgPSBjcHVfdG9fbGUxNiAoMzIpOyAvKiA+PSA4IGJ5dGVzICovCisJCXVzYl9maWxsX2NvbnRyb2xfdXJiIChicC0+dXJicCwgY3AtPnVzYmRldiwgdXNiX3NuZGN0cmxwaXBlIChjcC0+dXNiZGV2LCAwKSwKKyAgCQkJKHVuc2lnbmVkIGNoYXIqKWJwLT5kciwgYnAtPmJ1ZnAsIDMyLAorCSAgIAkJYXVlcnN3YWxkX2N0cmxyZWFkX3dyZXRjb21wbGV0ZSxicCk7CisKKwkJLyogc3VibWl0IHRoZSBjb250cm9sIG1zZyBhcyBuZXh0IHBha2V0ICovCisgICAgICAgCQlyZXQgPSBhdWVyY2hhaW5fc3VibWl0X3VyYl9saXN0ICgmY3AtPmNvbnRyb2xjaGFpbiwgYnAtPnVyYnAsIDEpOworICAgICAgIAkJaWYgKHJldCkgeworICAgICAgICAgICAgICAgCQlkYmcgKCJhdWVyc3dhbGRfY3RybHJlYWRfY29tcGxldGU6IG5vbnplcm8gcmVzdWx0IG9mIGF1ZXJjaGFpbl9zdWJtaXRfdXJiX2xpc3QgJWQiLCByZXQpOworICAgICAgICAgICAgICAgCQlicC0+dXJicC0+c3RhdHVzID0gcmV0OworICAgICAgICAgICAgICAgCQlhdWVyc3dhbGRfY3RybHJlYWRfd3JldGNvbXBsZXRlIChicC0+dXJicCwgcmVncyk7CisJCX0KKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvKiBnZXQgdGhlIGFjdHVhbCBieXRlY291bnQgKGluY2wuIGhlYWRlcmJ5dGUpICovCisgICAgICAgIGJwLT5sZW4gPSB1cmItPmFjdHVhbF9sZW5ndGg7CisgICAgICAgIHNlcnZpY2VpZCA9IGJwLT5idWZwWzBdICYgQVVIX1RZUEVNQVNLOworICAgICAgICBkYmcgKCJQYWtldCB3aXRoIHNlcnZpY2VpZCAlZCBhbmQgJWQgYnl0ZXMgcmVjZWl2ZWQiLCBzZXJ2aWNlaWQsIGJwLT5sZW4pOworCisgICAgICAgIC8qIGRpc3BhdGNoIHRoZSBwYWtldCAqLworICAgICAgICBzY3AgPSBjcC0+c2VydmljZXNbc2VydmljZWlkXTsKKyAgICAgICAgaWYgKHNjcCkgeworICAgICAgICAgICAgICAgIC8qIGxvb2ssIE1hLCBhIGxpc3RlbmVyISAqLworICAgICAgICAgICAgICAgIHNjcC0+ZGlzcGF0Y2ggKHNjcCwgYnApOworICAgICAgICB9CisKKyAgICAgICAgLyogcmVsZWFzZSB0aGUgcGFrZXQgKi8KKyAgICAgICAgYXVlcmJ1Zl9yZWxlYXNlYnVmIChicCk7CisJLyogV2FrZSB1cCBhbGwgcHJvY2Vzc2VzIHdhaXRpbmcgZm9yIGEgYnVmZmVyICovCisJd2FrZV91cCAoJmNwLT5idWZmZXJ3YWl0KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEhhbmRsaW5nIG9mIEludGVycnVwdCBFbmRwb2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBUaGlzIGludGVycnVwdCBFbmRwb2ludCBpcyB1c2VkIHRvIGluZm9ybSB0aGUgaG9zdCBhYm91dCB3YWl0aW5nCisgICBtZXNzYWdlcyBmcm9tIHRoZSBVU0IgZGV2aWNlLgorKi8KKy8qIGludCBjb21wbGV0aW9uIGhhbmRsZXIuICovCitzdGF0aWMgdm9pZCBhdWVyc3dhbGRfaW50X2NvbXBsZXRlIChzdHJ1Y3QgdXJiICogdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICAgICAgdW5zaWduZWQgIGludCBjaGFubmVsaWQ7CisgICAgICAgIHVuc2lnbmVkICBpbnQgYnl0ZWNvdW50OworICAgICAgICBpbnQgcmV0OworICAgICAgICBwYXVlcmJ1Zl90ICAgYnAgPSBOVUxMOworICAgICAgICBwYXVlcnN3YWxkX3QgY3AgPSAocGF1ZXJzd2FsZF90KSB1cmItPmNvbnRleHQ7CisKKyAgICAgICAgZGJnICgiJXMgY2FsbGVkIiwgX19GVU5DVElPTl9fKTsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisgICAgICAgIC8qIGNoZWNrIGlmIGFsbCBuZWVkZWQgZGF0YSB3YXMgcmVjZWl2ZWQgKi8KKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDwgQVVfSVJRTUlOU0laRSkgeworICAgICAgICAgICAgICAgIGRiZyAoImludmFsaWQgZGF0YSBsZW5ndGggcmVjZWl2ZWQ6ICVkIGJ5dGVzIiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgLyogY2hlY2sgdGhlIGNvbW1hbmQgY29kZSAqLworICAgICAgICBpZiAoY3AtPmludGJ1ZnBbMF0gIT0gQVVfSVJRQ01ESUQpIHsKKyAgICAgICAgICAgICAgICBkYmcgKCJpbnZhbGlkIGNvbW1hbmQgcmVjZWl2ZWQ6ICVkIiwgY3AtPmludGJ1ZnBbMF0pOworCQlnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBjaGVjayB0aGUgY29tbWFuZCB0eXBlICovCisgICAgICAgIGlmIChjcC0+aW50YnVmcFsxXSAhPSBBVV9CTE9DS1JEWSkgeworICAgICAgICAgICAgICAgIGRiZyAoImludmFsaWQgY29tbWFuZCB0eXBlIHJlY2VpdmVkOiAlZCIsIGNwLT5pbnRidWZwWzFdKTsKKwkJZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgLyogbm93IGV4dHJhY3QgdGhlIGluZm9ybWF0aW9uICovCisgICAgICAgIGNoYW5uZWxpZCA9IGNwLT5pbnRidWZwWzJdOworICAgICAgICBieXRlY291bnQgPSAodW5zaWduZWQgY2hhciljcC0+aW50YnVmcFszXTsKKyAgICAgICAgYnl0ZWNvdW50IHw9ICh1bnNpZ25lZCBjaGFyKWNwLT5pbnRidWZwWzRdIDw8IDg7CisKKyAgICAgICAgLyogY2hlY2sgdGhlIGNoYW5uZWwgaWQgKi8KKyAgICAgICAgaWYgKGNoYW5uZWxpZCA+PSBBVUhfVFlQRVNJWkUpIHsKKyAgICAgICAgICAgICAgICBkYmcgKCJpbnZhbGlkIGNoYW5uZWwgaWQgcmVjZWl2ZWQ6ICVkIiwgY2hhbm5lbGlkKTsKKwkJZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgLyogY2hlY2sgdGhlIGJ5dGUgY291bnQgKi8KKyAgICAgICAgaWYgKGJ5dGVjb3VudCA+IChjcC0+bWF4Q29udHJvbExlbmd0aCtBVUhfU0laRSkpIHsKKyAgICAgICAgICAgICAgICBkYmcgKCJpbnZhbGlkIGJ5dGUgY291bnQgcmVjZWl2ZWQ6ICVkIiwgYnl0ZWNvdW50KTsKKwkJZ290byBleGl0OworICAgICAgICB9CisgICAgICAgIGRiZyAoIlNlcnZpY2UgQ2hhbm5lbCA9ICVkIiwgY2hhbm5lbGlkKTsKKyAgICAgICAgZGJnICgiQnl0ZSBDb3VudCA9ICVkIiwgYnl0ZWNvdW50KTsKKworICAgICAgICAvKiBnZXQgYSBidWZmZXIgZm9yIHRoZSBuZXh0IGRhdGEgcGFrZXQgKi8KKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUgKCZjcC0+YnVmY3RsLmxvY2ssIGZsYWdzKTsKKyAgICAgICAgaWYgKCFsaXN0X2VtcHR5ICgmY3AtPmJ1ZmN0bC5mcmVlX2J1ZmZfbGlzdCkpIHsKKyAgICAgICAgICAgICAgICAvKiB5ZXM6IGdldCB0aGUgZW50cnkgKi8KKyAgICAgICAgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bXAgPSBjcC0+YnVmY3RsLmZyZWVfYnVmZl9saXN0Lm5leHQ7CisgICAgICAgICAgICAgICAgbGlzdF9kZWwgKHRtcCk7CisgICAgICAgICAgICAgICAgYnAgPSBsaXN0X2VudHJ5ICh0bXAsIGF1ZXJidWZfdCwgYnVmZl9saXN0KTsKKyAgICAgICAgfQorICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICgmY3AtPmJ1ZmN0bC5sb2NrLCBmbGFncyk7CisKKyAgICAgICAgLyogaWYgbm8gYnVmZmVyIGF2YWlsYWJsZTogc2tpcCBpdCAqLworICAgICAgICBpZiAoIWJwKSB7CisgICAgICAgICAgICAgICAgZGJnICgiYXVlcnN3YWxkX2ludF9jb21wbGV0ZTogbm8gZGF0YSBidWZmZXIgYXZhaWxhYmxlIik7CisgICAgICAgICAgICAgICAgLyogY2FuIHdlIGRvIHNvbWV0aGluZyBtb3JlPworCQkgICBUaGlzIGlzIGEgYmlnIHByb2JsZW06IGlmIHRoaXMgaW50IHBhY2tldCBpcyBpZ25vcmVkLCB0aGUKKwkJICAgZGV2aWNlIHdpbGwgd2FpdCBmb3JldmVyIGFuZCBub3Qgc2lnbmFsIGFueSBtb3JlIGRhdGEuCisJCSAgIFRoZSBvbmx5IHJlYWwgc29sdXRpb24gaXM6IGhhdmluZyBlbm91Z2ggYnVmZmVycyEKKwkJICAgT3IgcGVyaGFwcyB0ZW1wb3JhcnkgZGlzYWJsaW5nIHRoZSBpbnQgZW5kcG9pbnQ/CisJCSovCisJCWdvdG8gZXhpdDsKKyAgICAgICAgfQorCisJLyogZmlsbCB0aGUgY29udHJvbCBtZXNzYWdlICovCisgICAgICAgIGJwLT5kci0+YlJlcXVlc3RUeXBlID0gQVVUX1JSRVE7CisJYnAtPmRyLT5iUmVxdWVzdCAgICAgPSBBVVZfUkJMT0NLOworCWJwLT5kci0+d1ZhbHVlICAgICAgID0gY3B1X3RvX2xlMTYgKDApOworCWJwLT5kci0+d0luZGV4ICAgICAgID0gY3B1X3RvX2xlMTYgKGNoYW5uZWxpZCB8IEFVSF9ESVJFQ1QgfCBBVUhfVU5TUExJVCk7CisJYnAtPmRyLT53TGVuZ3RoICAgICAgPSBjcHVfdG9fbGUxNiAoYnl0ZWNvdW50KTsKKwl1c2JfZmlsbF9jb250cm9sX3VyYiAoYnAtPnVyYnAsIGNwLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZSAoY3AtPnVzYmRldiwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKilicC0+ZHIsIGJwLT5idWZwLCBieXRlY291bnQsCisJCSAgICAgICAgICBhdWVyc3dhbGRfY3RybHJlYWRfY29tcGxldGUsYnApOworCisgICAgICAgIC8qIHN1Ym1pdCB0aGUgY29udHJvbCBtc2cgKi8KKyAgICAgICAgcmV0ID0gYXVlcmNoYWluX3N1Ym1pdF91cmIgKCZjcC0+Y29udHJvbGNoYWluLCBicC0+dXJicCk7CisgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICBkYmcgKCJhdWVyc3dhbGRfaW50X2NvbXBsZXRlOiBub256ZXJvIHJlc3VsdCBvZiBhdWVyY2hhaW5fc3VibWl0X3VyYiAlZCIsIHJldCk7CisgICAgICAgICAgICAgICAgYnAtPnVyYnAtPnN0YXR1cyA9IHJldDsKKyAgICAgICAgICAgICAgICBhdWVyc3dhbGRfY3RybHJlYWRfY29tcGxldGUoIGJwLT51cmJwLCBOVUxMKTsKKwkJLyogaGVyZSBhcHBsaWVzIHRoZSBzYW1lIHByb2JsZW0gYXMgYWJvdmU6IGRldmljZSBsb2NraW5nISAqLworICAgICAgICB9CitleGl0OgorCXJldCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQpCisJCWVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHJldCk7Cit9CisKKy8qIGludCBtZW1vcnkgZGVhbGxvY2F0aW9uCisgICBOT1RFOiBubyBtdXRleCBwbGVhc2UhCisqLworc3RhdGljIHZvaWQgYXVlcnN3YWxkX2ludF9mcmVlIChwYXVlcnN3YWxkX3QgY3ApCit7CisgICAgICAgIGlmIChjcC0+aW50dXJicCkgeworICAgICAgICAgICAgICAgIHVzYl9mcmVlX3VyYiAoY3AtPmludHVyYnApOworICAgICAgICAgICAgICAgIGNwLT5pbnR1cmJwID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoY3AtPmludGJ1ZnApIHsKKyAgICAgICAgICAgICAgICBrZnJlZSAoY3AtPmludGJ1ZnApOworICAgICAgICAgICAgICAgIGNwLT5pbnRidWZwID0gTlVMTDsKKyAgICAgICAgfQorfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBhY3RpdmF0ZSB0aGUgaW50ZXJydXB0CisgICBlbmRwb2ludC4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCBvciBhbiBlcnJvciBjb2RlLgorICAgTk9URTogbm8gbXV0ZXggcGxlYXNlIQorKi8KK3N0YXRpYyBpbnQgYXVlcnN3YWxkX2ludF9vcGVuIChwYXVlcnN3YWxkX3QgY3ApCit7CisgICAgICAgIGludCByZXQ7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKwlpbnQgaXJxc2l6ZTsKKwlkYmcgKCJhdWVyc3dhbGRfaW50X29wZW4iKTsKKworCWVwID0gY3AtPnVzYmRldi0+ZXBfaW5bQVVfSVJRRU5EUF07CisJaWYgKCFlcCkgeworCQlyZXQgPSAtRUZBVUxUOworICAJCWdvdG8gaW50b2VuZDsKKyAgICAJfQorCWlycXNpemUgPSBsZTE2X3RvX2NwdShlcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSk7CisJY3AtPmlycXNpemUgPSBpcnFzaXplOworCisJLyogYWxsb2NhdGUgdGhlIHVyYiBhbmQgZGF0YSBidWZmZXIgKi8KKyAgICAgICAgaWYgKCFjcC0+aW50dXJicCkgeworICAgICAgICAgICAgICAgIGNwLT5pbnR1cmJwID0gdXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCk7CisgICAgICAgICAgICAgICAgaWYgKCFjcC0+aW50dXJicCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaW50b2VuZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFjcC0+aW50YnVmcCkgeworICAgICAgICAgICAgICAgIGNwLT5pbnRidWZwID0gKGNoYXIgKikga21hbGxvYyAoaXJxc2l6ZSwgR0ZQX0tFUk5FTCk7CisgICAgICAgICAgICAgICAgaWYgKCFjcC0+aW50YnVmcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaW50b2VuZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogc2V0dXAgdXJiICovCisgICAgICAgIHVzYl9maWxsX2ludF91cmIgKGNwLT5pbnR1cmJwLCBjcC0+dXNiZGV2LAorCQkJdXNiX3JjdmludHBpcGUgKGNwLT51c2JkZXYsQVVfSVJRRU5EUCksIGNwLT5pbnRidWZwLAorCQkJaXJxc2l6ZSwgYXVlcnN3YWxkX2ludF9jb21wbGV0ZSwgY3AsIGVwLT5kZXNjLmJJbnRlcnZhbCk7CisgICAgICAgIC8qIHN0YXJ0IHRoZSB1cmIgKi8KKwljcC0+aW50dXJicC0+c3RhdHVzID0gMDsJLyogbmVlZGVkISAqLworCXJldCA9IHVzYl9zdWJtaXRfdXJiIChjcC0+aW50dXJicCwgR0ZQX0tFUk5FTCk7CisKK2ludG9lbmQ6CisgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgLyogYWN0aXZhdGlvbiBvZiBpbnRlcnJ1cHQgZW5kcG9pbnQgaGFzIGZhaWxlZC4gTm93IGNsZWFuIHVwLiAqLworICAgICAgICAgICAgICAgIGRiZyAoImF1ZXJzd2FsZF9pbnRfb3BlbjogYWN0aXZhdGlvbiBvZiBpbnQgZW5kcG9pbnQgZmFpbGVkIik7CisKKyAgICAgICAgICAgICAgICAvKiBkZWFsbG9jYXRlIG1lbW9yeSAqLworICAgICAgICAgICAgICAgIGF1ZXJzd2FsZF9pbnRfZnJlZSAoY3ApOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGRlYWN0aXZhdGUgdGhlIGludGVycnVwdAorICAgZW5kcG9pbnQuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwgb3IgYW4gZXJyb3IgY29kZS4KKyAgIE5PVEU6IG5vIG11dGV4IHBsZWFzZSEKKyovCitzdGF0aWMgdm9pZCBhdWVyc3dhbGRfaW50X3JlbGVhc2UgKHBhdWVyc3dhbGRfdCBjcCkKK3sKKyAgICAgICAgZGJnICgiYXVlcnN3YWxkX2ludF9yZWxlYXNlIik7CisKKyAgICAgICAgLyogc3RvcCB0aGUgaW50IGVuZHBvaW50ICovCisgICAgICAgIGlmIChjcC0+aW50dXJicCkKKyAgICAgICAgICAgICAgICB1c2Jfa2lsbF91cmIgKGNwLT5pbnR1cmJwKTsKKworICAgICAgICAvKiBkZWFsbG9jYXRlIG1lbW9yeSAqLworICAgICAgICBhdWVyc3dhbGRfaW50X2ZyZWUgKGNwKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBIZWxwZXIgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyogd2FrZSB1cCB3YWl0aW5nIHJlYWRlcnMgKi8KK3N0YXRpYyB2b2lkIGF1ZXJjaGFyX2Rpc2Nvbm5lY3QgKHBhdWVyc2Nvbl90IHNjcCkKK3sKKyAgICAgICAgcGF1ZXJjaGFyX3QgY2NwID0gKChwYXVlcmNoYXJfdCkoKGNoYXIgKikoc2NwKS0odW5zaWduZWQgbG9uZykoJigocGF1ZXJjaGFyX3QpMCktPnNjb250ZXh0KSkpOworCWRiZyAoImF1ZXJjaGFyX2Rpc2Nvbm5lY3QgY2FsbGVkIik7CisJY2NwLT5yZW1vdmVkID0gMTsKKwl3YWtlX3VwICgmY2NwLT5yZWFkd2FpdCk7Cit9CisKKworLyogZGlzcGF0Y2ggYSByZWFkIHBha2V0IHRvIGEgd2FpdGluZyBjaGFyYWN0ZXIgZGV2aWNlICovCitzdGF0aWMgdm9pZCBhdWVyY2hhcl9jdHJscmVhZF9kaXNwYXRjaCAocGF1ZXJzY29uX3Qgc2NwLCBwYXVlcmJ1Zl90IGJwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgICAgIHBhdWVyY2hhcl90IGNjcDsKKyAgICAgICAgcGF1ZXJidWZfdCBuZXdicCA9IE5VTEw7CisgICAgICAgIGNoYXIgKiBjaGFycDsKKyAgICAgICAgZGJnICgiYXVlcmNoYXJfY3RybHJlYWRfZGlzcGF0Y2ggY2FsbGVkIik7CisgICAgICAgIGNjcCA9ICgocGF1ZXJjaGFyX3QpKChjaGFyICopKHNjcCktKHVuc2lnbmVkIGxvbmcpKCYoKHBhdWVyY2hhcl90KTApLT5zY29udGV4dCkpKTsKKworICAgICAgICAvKiBnZXQgYSByZWFkIGJ1ZmZlciBmcm9tIGNoYXJhY3RlciBkZXZpY2UgY29udGV4dCAqLworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSAoJmNjcC0+YnVmY3RsLmxvY2ssIGZsYWdzKTsKKyAgICAgICAgaWYgKCFsaXN0X2VtcHR5ICgmY2NwLT5idWZjdGwuZnJlZV9idWZmX2xpc3QpKSB7CisgICAgICAgICAgICAgICAgLyogeWVzOiBnZXQgdGhlIGVudHJ5ICovCisgICAgICAgICAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqdG1wID0gY2NwLT5idWZjdGwuZnJlZV9idWZmX2xpc3QubmV4dDsKKyAgICAgICAgICAgICAgICBsaXN0X2RlbCAodG1wKTsKKyAgICAgICAgICAgICAgICBuZXdicCA9IGxpc3RfZW50cnkgKHRtcCwgYXVlcmJ1Zl90LCBidWZmX2xpc3QpOworICAgICAgICB9CisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZjY3AtPmJ1ZmN0bC5sb2NrLCBmbGFncyk7CisKKyAgICAgICAgaWYgKCFuZXdicCkgeworICAgICAgICAgICAgICAgIGRiZyAoIk5vIHJlYWQgYnVmZmVyIGF2YWlsYWJsZSwgZGlzY2FyZCBwYWtldCEiKTsKKyAgICAgICAgICAgICAgICByZXR1cm47ICAgICAvKiBubyBidWZmZXIsIG5vIGRpc3BhdGNoICovCisgICAgICAgIH0KKworICAgICAgICAvKiBjb3B5IGluZm9ybWF0aW9uIHRvIG5ldyBidWZmZXIgZWxlbWVudAorICAgICAgICAgICAoYWxsIGJ1ZmZlcnMgaGF2ZSB0aGUgc2FtZSBsZW5ndGgpICovCisgICAgICAgIGNoYXJwID0gbmV3YnAtPmJ1ZnA7CisgICAgICAgIG5ld2JwLT5idWZwID0gYnAtPmJ1ZnA7CisgICAgICAgIGJwLT5idWZwID0gY2hhcnA7CisgICAgICAgIG5ld2JwLT5sZW4gPSBicC0+bGVuOworCisgICAgICAgIC8qIGluc2VydCBuZXcgYnVmZmVyIGluIHJlYWQgbGlzdCAqLworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSAoJmNjcC0+YnVmY3RsLmxvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsICgmbmV3YnAtPmJ1ZmZfbGlzdCwgJmNjcC0+YnVmY3RsLnJlY19idWZmX2xpc3QpOworICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlICgmY2NwLT5idWZjdGwubG9jaywgZmxhZ3MpOworICAgICAgICBkYmcgKCJyZWFkIGJ1ZmZlciBhcHBlbmRlZCB0byByZWNfbGlzdCIpOworCisgICAgICAgIC8qIHdha2UgdXAgcGVuZGluZyBzeW5jaHJvbm91cyByZWFkcyAqLworCXdha2VfdXAgKCZjY3AtPnJlYWR3YWl0KTsKK30KKworCisvKiBEZWxldGUgYW4gYXVlcnN3YWxkIGRyaXZlciBjb250ZXh0ICovCitzdGF0aWMgdm9pZCBhdWVyc3dhbGRfZGVsZXRlKCBwYXVlcnN3YWxkX3QgY3ApCit7CisJZGJnKCAiYXVlcnN3YWxkX2RlbGV0ZSIpOworCWlmIChjcCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBXYWtlIHVwIGFsbCBwcm9jZXNzZXMgd2FpdGluZyBmb3IgYSBidWZmZXIgKi8KKwl3YWtlX3VwICgmY3AtPmJ1ZmZlcndhaXQpOworCisJLyogQ2xlYW5pbmcgdXAgKi8KKwlhdWVyc3dhbGRfaW50X3JlbGVhc2UgKGNwKTsKKwlhdWVyY2hhaW5fZnJlZSAoJmNwLT5jb250cm9sY2hhaW4pOworCWF1ZXJidWZfZnJlZV9idWZmZXJzICgmY3AtPmJ1ZmN0bCk7CisKKwkvKiByZWxlYXNlIHRoZSBtZW1vcnkgKi8KKwlrZnJlZSggY3ApOworfQorCisKKy8qIERlbGV0ZSBhbiBhdWVyc3dhbGQgY2hhcmFjdGVyIGNvbnRleHQgKi8KK3N0YXRpYyB2b2lkIGF1ZXJjaGFyX2RlbGV0ZSggcGF1ZXJjaGFyX3QgY2NwKQoreworCWRiZyAoImF1ZXJjaGFyX2RlbGV0ZSIpOworCWlmIChjY3AgPT0gTlVMTCkKKwkJcmV0dXJuOworCisgICAgICAgIC8qIHdha2UgdXAgcGVuZGluZyBzeW5jaHJvbm91cyByZWFkcyAqLworCWNjcC0+cmVtb3ZlZCA9IDE7CisJd2FrZV91cCAoJmNjcC0+cmVhZHdhaXQpOworCisJLyogcmVtb3ZlIHRoZSByZWFkIGJ1ZmZlciAqLworCWlmIChjY3AtPnJlYWRidWYpIHsKKwkJYXVlcmJ1Zl9yZWxlYXNlYnVmIChjY3AtPnJlYWRidWYpOworCQljY3AtPnJlYWRidWYgPSBOVUxMOworCX0KKworCS8qIHJlbW92ZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcnMgKi8KKwlhdWVyYnVmX2ZyZWVfYnVmZmVycyAoJmNjcC0+YnVmY3RsKTsKKworCS8qIHJlbGVhc2UgdGhlIG1lbW9yeSAqLworCWtmcmVlKCBjY3ApOworfQorCisKKy8qIGFkZCBhIG5ldyBzZXJ2aWNlIHRvIHRoZSBkZXZpY2UKKyAgIHNjcC0+aWQgbXVzdCBiZSBzZXQhCisgICByZXR1cm46IDAgaWYgT0ssIGVsc2UgZXJyb3IgY29kZQorKi8KK3N0YXRpYyBpbnQgYXVlcnN3YWxkX2FkZHNlcnZpY2UgKHBhdWVyc3dhbGRfdCBjcCwgcGF1ZXJzY29uX3Qgc2NwKQoreworCWludCByZXQ7CisKKwkvKiBpcyB0aGUgZGV2aWNlIGF2YWlsYWJsZT8gKi8KKwlpZiAoIWNwLT51c2JkZXYpIHsKKwkJZGJnICgidXNiZGV2ID09IE5VTEwiKTsKKwkJcmV0dXJuIC1FSU87CS8qbm86IGNhbiBub3QgYWRkIGEgc2VydmljZSwgc29ycnkqLworCX0KKworCS8qIGlzIHRoZSBzZXJ2aWNlIGF2YWlsYWJsZT8gKi8KKwlpZiAoY3AtPnNlcnZpY2VzW3NjcC0+aWRdKSB7CisJCWRiZyAoInNlcnZpY2UgaXMgYnVzeSIpOworICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7CisJfQorCisJLyogZGV2aWNlIGlzIGF2YWlsYWJsZSwgc2VydmljZSBpcyBmcmVlICovCisJY3AtPnNlcnZpY2VzW3NjcC0+aWRdID0gc2NwOworCisJLyogcmVnaXN0ZXIgc2VydmljZSBpbiBkZXZpY2UgKi8KKwlyZXQgPSBhdWVyY2hhaW5fY29udHJvbF9tc2coCisJCSZjcC0+Y29udHJvbGNoYWluLCAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIGNvbnRyb2wgY2hhaW4gKi8KKwkJY3AtPnVzYmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gZGV2aWNlICovCisJCXVzYl9zbmRjdHJscGlwZSAoY3AtPnVzYmRldiwgMCksICAgICAgICAvKiBwaXBlIHRvIGNvbnRyb2wgZW5kcG9pbnQgKi8KKwkJQVVWX0NIQU5ORUxDVEwsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVTQiBtZXNzYWdlIHJlcXVlc3QgdmFsdWUgKi8KKwkJQVVUX1dSRVEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVTQiBtZXNzYWdlIHJlcXVlc3QgdHlwZSB2YWx1ZSAqLworCQkweDAxLCAgICAgICAgICAgICAgLyogb3BlbiAgICAgICAgICAgICAgICAgVVNCIG1lc3NhZ2UgdmFsdWUgKi8KKwkJc2NwLT5pZCwgICAgICAgICAgICAJCSAgICAgICAgLyogVVNCIG1lc3NhZ2UgaW5kZXggdmFsdWUgKi8KKwkJTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gc2VuZCAqLworCQkwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBkYXRhIHRvIHNlbmQgKi8KKwkJSFogKiAyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRpbWUgdG8gd2FpdCBmb3IgdGhlIG1lc3NhZ2UgdG8gY29tcGxldGUgYmVmb3JlIHRpbWluZyBvdXQgKi8KKwlpZiAocmV0IDwgMCkgeworCQlkYmcgKCJhdWVyc3dhbGRfYWRkc2VydmljZTogYXVlcmNoYWluX2NvbnRyb2xfbXNnIHJldHVybmVkIGVycm9yIGNvZGUgJWQiLCByZXQpOworCQkvKiB1bmRvIGFib3ZlIGFjdGlvbnMgKi8KKwkJY3AtPnNlcnZpY2VzW3NjcC0+aWRdID0gTlVMTDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkYmcgKCJhdWVyc3dhbGRfYWRkc2VydmljZTogY2hhbm5lbCBvcGVuIE9LIik7CisJcmV0dXJuIDA7Cit9CisKKworLyogcmVtb3ZlIGEgc2VydmljZSBmcm9tIHRoZSB0aGUgZGV2aWNlCisgICBzY3AtPmlkIG11c3QgYmUgc2V0ISAqLworc3RhdGljIHZvaWQgYXVlcnN3YWxkX3JlbW92ZXNlcnZpY2UgKHBhdWVyc3dhbGRfdCBjcCwgcGF1ZXJzY29uX3Qgc2NwKQoreworCWRiZyAoImF1ZXJzd2FsZF9yZW1vdmVzZXJ2aWNlIGNhbGxlZCIpOworCisJLyogY2hlY2sgaWYgd2UgaGF2ZSBhIHNlcnZpY2UgYWxsb2NhdGVkICovCisJaWYgKHNjcC0+aWQgPT0gQVVIX1VOQVNTSUdORUQpCisJCXJldHVybjsKKworCS8qIElmIHRoZXJlIGlzIGEgZGV2aWNlOiBjbG9zZSB0aGUgY2hhbm5lbCAqLworCWlmIChjcC0+dXNiZGV2KSB7CisJCS8qIENsb3NlIHRoZSBzZXJ2aWNlIGNoYW5uZWwgaW5zaWRlIHRoZSBkZXZpY2UgKi8KKwkJaW50IHJldCA9IGF1ZXJjaGFpbl9jb250cm9sX21zZygKKwkJJmNwLT5jb250cm9sY2hhaW4sICAgICAgICAgICAgCQkvKiBwb2ludGVyIHRvIGNvbnRyb2wgY2hhaW4gKi8KKwkJY3AtPnVzYmRldiwgICAgICAgICAJCSAgICAgICAgLyogcG9pbnRlciB0byBkZXZpY2UgKi8KKwkJdXNiX3NuZGN0cmxwaXBlIChjcC0+dXNiZGV2LCAwKSwJLyogcGlwZSB0byBjb250cm9sIGVuZHBvaW50ICovCisJCUFVVl9DSEFOTkVMQ1RMLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVU0IgbWVzc2FnZSByZXF1ZXN0IHZhbHVlICovCisJCUFVVF9XUkVRLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVU0IgbWVzc2FnZSByZXF1ZXN0IHR5cGUgdmFsdWUgKi8KKwkJMHgwMCwgICAgICAgICAgICAgIC8vIGNsb3NlICAgICAgICAgICAgIC8qIFVTQiBtZXNzYWdlIHZhbHVlICovCisJCXNjcC0+aWQsICAgICAgICAgICAgCQkgICAgICAgIC8qIFVTQiBtZXNzYWdlIGluZGV4IHZhbHVlICovCisJCU5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQgKi8KKwkJMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgZGF0YSB0byBzZW5kICovCisJCUhaICogMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aW1lIHRvIHdhaXQgZm9yIHRoZSBtZXNzYWdlIHRvIGNvbXBsZXRlIGJlZm9yZSB0aW1pbmcgb3V0ICovCisJCWlmIChyZXQgPCAwKSB7CisJCQlkYmcgKCJhdWVyc3dhbGRfcmVtb3Zlc2VydmljZTogYXVlcmNoYWluX2NvbnRyb2xfbXNnIHJldHVybmVkIGVycm9yIGNvZGUgJWQiLCByZXQpOworCQl9CisJCWVsc2UgeworCQkJZGJnICgiYXVlcnN3YWxkX3JlbW92ZXNlcnZpY2U6IGNoYW5uZWwgY2xvc2UgT0siKTsKKwkJfQorCX0KKworCS8qIHJlbW92ZSB0aGUgc2VydmljZSBmcm9tIHRoZSBkZXZpY2UgKi8KKwljcC0+c2VydmljZXNbc2NwLT5pZF0gPSBOVUxMOworCXNjcC0+aWQgPSBBVUhfVU5BU1NJR05FRDsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIENoYXIgZGV2aWNlIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBPcGVuIGEgbmV3IGNoYXJhY3RlciBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgYXVlcmNoYXJfb3BlbiAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IGR0aW5kZXggPSBpbWlub3IoaW5vZGUpOworCXBhdWVyc3dhbGRfdCBjcCA9IE5VTEw7CisJcGF1ZXJjaGFyX3QgY2NwID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKyAgICAgICAgaW50IHJldDsKKworICAgICAgICAvKiBtaW5vciBudW1iZXIgaW4gcmFuZ2U/ICovCisJaWYgKGR0aW5kZXggPCAwKSB7CisJCXJldHVybiAtRU5PREVWOworICAgICAgICB9CisJaW50ZiA9IHVzYl9maW5kX2ludGVyZmFjZSgmYXVlcnN3YWxkX2RyaXZlciwgZHRpbmRleCk7CisJaWYgKCFpbnRmKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIHVzYiBkZXZpY2UgYXZhaWxhYmxlPyAqLworCWNwID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJaWYgKGNwID09IE5VTEwpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZjcC0+bXV0ZXgpKSB7CisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQorCisJLyogd2UgaGF2ZSBhY2Nlc3MgdG8gdGhlIGRldmljZS4gTm93IGxldHMgYWxsb2NhdGUgbWVtb3J5ICovCisJY2NwID0gKHBhdWVyY2hhcl90KSBrbWFsbG9jKHNpemVvZihhdWVyY2hhcl90KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNjcCA9PSBOVUxMKSB7CisJCWVyciAoIm91dCBvZiBtZW1vcnkiKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvZmFpbDsKKwl9CisKKwkvKiBJbml0aWFsaXplIGRldmljZSBkZXNjcmlwdG9yICovCisJbWVtc2V0KCBjY3AsIDAsIHNpemVvZihhdWVyY2hhcl90KSk7CisJaW5pdF9NVVRFWCggJmNjcC0+bXV0ZXgpOworCWluaXRfTVVURVgoICZjY3AtPnJlYWRtdXRleCk7CisgICAgICAgIGF1ZXJidWZfaW5pdCAoJmNjcC0+YnVmY3RsKTsKKyAgICAgICAgY2NwLT5zY29udGV4dC5pZCA9IEFVSF9VTkFTU0lHTkVEOworICAgICAgICBjY3AtPnNjb250ZXh0LmRpc3BhdGNoID0gYXVlcmNoYXJfY3RybHJlYWRfZGlzcGF0Y2g7CisJY2NwLT5zY29udGV4dC5kaXNjb25uZWN0ID0gYXVlcmNoYXJfZGlzY29ubmVjdDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkICgmY2NwLT5yZWFkd2FpdCk7CisKKwlyZXQgPSBhdWVyYnVmX3NldHVwICgmY2NwLT5idWZjdGwsIEFVX1JCVUZGRVJTLCBjcC0+bWF4Q29udHJvbExlbmd0aCtBVUhfU0laRSk7CisgICAgICAgCWlmIChyZXQpIHsKKwkJZ290byBvZmFpbDsKKwl9CisKKwljcC0+b3Blbl9jb3VudCsrOworCWNjcC0+YXVlcmRldiA9IGNwOworCWRiZygib3BlbiAlcyBhcyAvZGV2LyVzIiwgY3AtPmRldl9kZXNjLCBjcC0+bmFtZSk7CisJdXAgKCZjcC0+bXV0ZXgpOworCisJLyogZmlsZSBJTyBzdHVmZiAqLworCWZpbGUtPmZfcG9zID0gMDsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBjY3A7CisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworCisJLyogRXJyb3IgZXhpdCAqLworb2ZhaWw6CXVwICgmY3AtPm11dGV4KTsKKwlhdWVyY2hhcl9kZWxldGUgKGNjcCk7CisJcmV0dXJuIHJldDsKK30KKworCisvKiBJT0NUTCBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQgYXVlcmNoYXJfaW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlwYXVlcmNoYXJfdCBjY3AgPSAocGF1ZXJjaGFyX3QpIGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0ID0gMDsKKyAgICAgICAgYXVkZXZpbmZvX3QgZGV2aW5mbzsKKyAgICAgICAgcGF1ZXJzd2FsZF90IGNwID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgdTsKKwl1bnNpZ25lZCBpbnQgX191c2VyICp1c2VyX2FyZyA9ICh1bnNpZ25lZCBpbnQgX191c2VyICopYXJnOworCisgICAgICAgIGRiZyAoImlvY3RsIik7CisKKwkvKiBnZXQgdGhlIG11dGV4ZXMgKi8KKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmY2NwLT5tdXRleCkpIHsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisJY3AgPSBjY3AtPmF1ZXJkZXY7CisJaWYgKCFjcCkgeworCQl1cCAoJmNjcC0+bXV0ZXgpOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworCX0KKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmY3AtPm11dGV4KSkgeworCQl1cCgmY2NwLT5tdXRleCk7CisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQorCisJLyogQ2hlY2sgZm9yIHJlbW92YWwgKi8KKwlpZiAoIWNwLT51c2JkZXYpIHsKKwkJdXAoJmNwLT5tdXRleCk7CisJCXVwKCZjY3AtPm11dGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzd2l0Y2ggKGNtZCkgeworCisJLyogcmV0dXJuICE9IDAgaWYgVHJhbnNtaXR0IGNoYW5uZWwgcmVhZHkgdG8gc2VuZCAqLworCWNhc2UgSU9DVExfQVVfVFhSRUFEWToKKwkJZGJnICgiSU9DVExfQVVfVFhSRUFEWSIpOworCQl1ICAgPSBjY3AtPmF1ZXJkZXYKKwkJICAgJiYgKGNjcC0+c2NvbnRleHQuaWQgIT0gQVVIX1VOQVNTSUdORUQpCisJCSAgICYmICFsaXN0X2VtcHR5ICgmY3AtPmJ1ZmN0bC5mcmVlX2J1ZmZfbGlzdCk7CisJICAgICAgICByZXQgPSBwdXRfdXNlciAodSwgdXNlcl9hcmcpOworCQlicmVhazsKKworCS8qIHJldHVybiAhPSAwIGlmIGNvbm5lY3RlZCB0byBhIHNlcnZpY2UgY2hhbm5lbCAqLworCWNhc2UgSU9DVExfQVVfQ09OTkVDVDoKKwkJZGJnICgiSU9DVExfQVVfQ09OTkVDVCIpOworCQl1ID0gKGNjcC0+c2NvbnRleHQuaWQgIT0gQVVIX1VOQVNTSUdORUQpOworCSAgICAgICAgcmV0ID0gcHV0X3VzZXIgKHUsIHVzZXJfYXJnKTsKKwkJYnJlYWs7CisKKwkvKiByZXR1cm4gIT0gMCBpZiBSZWNlaXZlIERhdGEgYXZhaWxhYmxlICovCisJY2FzZSBJT0NUTF9BVV9SWEFWQUlMOgorCQlkYmcgKCJJT0NUTF9BVV9SWEFWQUlMIik7CisJCWlmIChjY3AtPnNjb250ZXh0LmlkID09IEFVSF9VTkFTU0lHTkVEKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlPOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCQl1ID0gMDsJLyogbm8gZGF0YSAqLworCQlpZiAoY2NwLT5yZWFkYnVmKSB7CisJCQlpbnQgcmVzdGxlbiA9IGNjcC0+cmVhZGJ1Zi0+bGVuIC0gY2NwLT5yZWFkb2Zmc2V0OworCQkJaWYgKHJlc3RsZW4gPiAwKQorCQkJCXUgPSAxOworCQl9CisJCWlmICghdSkgeworICAgICAgICAJCWlmICghbGlzdF9lbXB0eSAoJmNjcC0+YnVmY3RsLnJlY19idWZmX2xpc3QpKSB7CisJCQkJdSA9IDE7CisJCQl9CisJCX0KKwkgICAgICAgIHJldCA9IHB1dF91c2VyICh1LCB1c2VyX2FyZyk7CisJCWJyZWFrOworCisJLyogcmV0dXJuIHRoZSBtYXguIGJ1ZmZlciBsZW5ndGggZm9yIHRoZSBkZXZpY2UgKi8KKwljYXNlIElPQ1RMX0FVX0JVRkxFTjoKKwkJZGJnICgiSU9DVExfQVVfQlVGTEVOIik7CisJCXUgPSBjcC0+bWF4Q29udHJvbExlbmd0aDsKKwkgICAgICAgIHJldCA9IHB1dF91c2VyICh1LCB1c2VyX2FyZyk7CisJCWJyZWFrOworCisJLyogcmVxdWVzdGluZyBhIHNlcnZpY2UgY2hhbm5lbCAqLworICAgICAgICBjYXNlIElPQ1RMX0FVX1NFUlZSRVE6CisJCWRiZyAoIklPQ1RMX0FVX1NFUlZSRVEiKTsKKyAgICAgICAgICAgICAgICAvKiByZXF1ZXN0aW5nIGEgc2VydmljZSBtZWFuczogcmVsZWFzZSB0aGUgcHJldmlvdXMgb25lIGZpcnN0ICovCisJCWF1ZXJzd2FsZF9yZW1vdmVzZXJ2aWNlIChjcCwgJmNjcC0+c2NvbnRleHQpOworCQkvKiBnZXQgdGhlIGNoYW5uZWwgbnVtYmVyICovCisJCXJldCA9IGdldF91c2VyICh1LCB1c2VyX2FyZyk7CisJCWlmIChyZXQpIHsKKwkJCWJyZWFrOworCQl9CisJCWlmICgodSA8IEFVSF9GSVJTVFVTRVJDSCkgfHwgKHUgPj0gQVVIX1RZUEVTSVpFKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkYmcgKCJhdWVyY2hhciBzZXJ2aWNlIHJlcXVlc3QgcGFyYW1ldGVycyBhcmUgb2siKTsKKwkJY2NwLT5zY29udGV4dC5pZCA9IHU7CisKKwkJLyogcmVxdWVzdCB0aGUgc2VydmljZSBub3cgKi8KKwkJcmV0ID0gYXVlcnN3YWxkX2FkZHNlcnZpY2UgKGNwLCAmY2NwLT5zY29udGV4dCk7CisJCWlmIChyZXQpIHsKKwkJCS8qIG5vOiByZXZlcnQgc2VydmljZSBlbnRyeSAqLworICAgICAgICAgICAgICAgIAljY3AtPnNjb250ZXh0LmlkID0gQVVIX1VOQVNTSUdORUQ7CisJCX0KKwkJYnJlYWs7CisKKwkvKiBnZXQgYSBzdHJpbmcgZGVzY3JpcHRvciBmb3IgdGhlIGRldmljZSAqLworCWNhc2UgSU9DVExfQVVfREVWSU5GTzoKKwkJZGJnICgiSU9DVExfQVVfREVWSU5GTyIpOworICAgICAgICAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlciAoJmRldmluZm8sICh2b2lkIF9fdXNlciAqKSBhcmcsIHNpemVvZiAoYXVkZXZpbmZvX3QpKSkgeworICAgICAgICAJCXJldCA9IC1FRkFVTFQ7CisJICAgICAgICAJYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCQl1ID0gc3RybGVuKGNwLT5kZXZfZGVzYykrMTsKKwkJaWYgKHUgPiBkZXZpbmZvLmJzaXplKSB7CisJCQl1ID0gZGV2aW5mby5ic2l6ZTsKKwkJfQorCQlyZXQgPSBjb3B5X3RvX3VzZXIoZGV2aW5mby5idWYsIGNwLT5kZXZfZGVzYywgdSkgPyAtRUZBVUxUIDogMDsKKwkJYnJlYWs7CisKKwkvKiBnZXQgdGhlIG1heC4gc3RyaW5nIGRlc2NyaXB0b3IgbGVuZ3RoICovCisgICAgICAgIGNhc2UgSU9DVExfQVVfU0xFTjoKKwkJZGJnICgiSU9DVExfQVVfU0xFTiIpOworCQl1ID0gQVVTSV9ETEVOOworCSAgICAgICAgcmV0ID0gcHV0X3VzZXIgKHUsIHVzZXJfYXJnKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkYmcgKCJJT0NUTF9BVV9VTktOT1dOIik7CisJCXJldCA9IC1FTk9JT0NUTENNRDsKKwkJYnJlYWs7CisgICAgICAgIH0KKwkvKiByZWxlYXNlIHRoZSBtdXRleGVzICovCisJdXAoJmNwLT5tdXRleCk7CisJdXAoJmNjcC0+bXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKy8qIFJlYWQgZGF0YSBmcm9tIHRoZSBkZXZpY2UgKi8KK3N0YXRpYyBzc2l6ZV90IGF1ZXJjaGFyX3JlYWQgKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIHBwb3MpCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJcGF1ZXJjaGFyX3QgY2NwID0gKHBhdWVyY2hhcl90KSBmaWxlLT5wcml2YXRlX2RhdGE7CisgICAgICAgIHBhdWVyYnVmX3QgICBicCA9IE5VTEw7CisJd2FpdF9xdWV1ZV90IHdhaXQ7CisKKyAgICAgICAgZGJnICgiYXVlcmNoYXJfcmVhZCIpOworCisJLyogRXJyb3IgY2hlY2tpbmcgKi8KKwlpZiAoIWNjcCkKKwkJcmV0dXJuIC1FSU87CisJaWYgKCpwcG9zKQorIAkJcmV0dXJuIC1FU1BJUEU7CisgICAgICAgIGlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qIGdldCB0aGUgbXV0ZXggKi8KKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmY2NwLT5tdXRleCkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwkvKiBDYW4gd2UgZXhwZWN0IHRvIHJlYWQgc29tZXRoaW5nPyAqLworCWlmIChjY3AtPnNjb250ZXh0LmlkID09IEFVSF9VTkFTU0lHTkVEKSB7CisJCXVwICgmY2NwLT5tdXRleCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU87CisJfQorCisJLyogb25seSBvbmUgcmVhZGVyIHBlciBkZXZpY2UgYWxsb3dlZCAqLworCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZjY3AtPnJlYWRtdXRleCkpIHsKKwkJdXAgKCZjY3AtPm11dGV4KTsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisKKwkvKiByZWFkIGRhdGEgZnJvbSByZWFkYnVmLCBpZiBhdmFpbGFibGUgKi8KK2RvcmVhZGJ1ZjoKKwlicCA9IGNjcC0+cmVhZGJ1ZjsKKwlpZiAoYnApIHsKKwkJLyogcmVhZCB0aGUgbWF4aW11bSBieXRlcyAqLworCQlpbnQgcmVzdGxlbiA9IGJwLT5sZW4gLSBjY3AtPnJlYWRvZmZzZXQ7CisJCWlmIChyZXN0bGVuIDwgMCkKKwkJCXJlc3RsZW4gPSAwOworCQlpZiAoY291bnQgPiByZXN0bGVuKQorCQkJY291bnQgPSByZXN0bGVuOworCQlpZiAoY291bnQpIHsKKwkJCWlmIChjb3B5X3RvX3VzZXIgKGJ1ZiwgYnAtPmJ1ZnArY2NwLT5yZWFkb2Zmc2V0LCBjb3VudCkpIHsKKwkJCQlkYmcgKCJhdWVyc3dhbGRfcmVhZDogY29weV90b191c2VyIGZhaWxlZCIpOworCQkJCXVwICgmY2NwLT5yZWFkbXV0ZXgpOworCQkJCXVwICgmY2NwLT5tdXRleCk7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCX0KKwkJLyogYWR2YW5jZSB0aGUgcmVhZCBvZmZzZXQgKi8KKwkJY2NwLT5yZWFkb2Zmc2V0ICs9IGNvdW50OworCQlyZXN0bGVuIC09IGNvdW50OworCQkvLyByZXVzZSB0aGUgcmVhZCBidWZmZXIKKwkJaWYgKHJlc3RsZW4gPD0gMCkgeworCQkJYXVlcmJ1Zl9yZWxlYXNlYnVmIChicCk7CisJCQljY3AtPnJlYWRidWYgPSBOVUxMOworCQl9CisJCS8qIHJldHVybiB3aXRoIG51bWJlciBvZiBieXRlcyByZWFkICovCisJCWlmIChjb3VudCkgeworCQkJdXAgKCZjY3AtPnJlYWRtdXRleCk7CisJCQl1cCAoJmNjcC0+bXV0ZXgpOworCQkJcmV0dXJuIGNvdW50OworCQl9CisJfQorCisJLyogYSByZWFkIGJ1ZmZlciBpcyBub3QgYXZhaWxhYmxlLiBUcnkgdG8gZ2V0IHRoZSBuZXh0IGRhdGEgYmxvY2suICovCitkb3JlYWRsaXN0OgorCS8qIFByZXBhcmluZyBmb3Igc2xlZXAgKi8KKwlpbml0X3dhaXRxdWV1ZV9lbnRyeSAoJndhaXQsIGN1cnJlbnQpOworCXNldF9jdXJyZW50X3N0YXRlIChUQVNLX0lOVEVSUlVQVElCTEUpOworCWFkZF93YWl0X3F1ZXVlICgmY2NwLT5yZWFkd2FpdCwgJndhaXQpOworCisJYnAgPSBOVUxMOworCXNwaW5fbG9ja19pcnFzYXZlICgmY2NwLT5idWZjdGwubG9jaywgZmxhZ3MpOworICAgICAgICBpZiAoIWxpc3RfZW1wdHkgKCZjY3AtPmJ1ZmN0bC5yZWNfYnVmZl9saXN0KSkgeworICAgICAgICAgICAgICAgIC8qIHllczogZ2V0IHRoZSBlbnRyeSAqLworICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtcCA9IGNjcC0+YnVmY3RsLnJlY19idWZmX2xpc3QubmV4dDsKKyAgICAgICAgICAgICAgICBsaXN0X2RlbCAodG1wKTsKKyAgICAgICAgICAgICAgICBicCA9IGxpc3RfZW50cnkgKHRtcCwgYXVlcmJ1Zl90LCBidWZmX2xpc3QpOworICAgICAgICB9CisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZjY3AtPmJ1ZmN0bC5sb2NrLCBmbGFncyk7CisKKwkvKiBoYXZlIHdlIGdvdCBkYXRhPyAqLworCWlmIChicCkgeworCQljY3AtPnJlYWRidWYgPSBicDsKKwkJY2NwLT5yZWFkb2Zmc2V0ID0gQVVIX1NJWkU7IC8qIGZvciBoZWFkZXJieXRlICovCisJCXNldF9jdXJyZW50X3N0YXRlIChUQVNLX1JVTk5JTkcpOworCQlyZW1vdmVfd2FpdF9xdWV1ZSAoJmNjcC0+cmVhZHdhaXQsICZ3YWl0KTsKKwkJZ290byBkb3JlYWRidWY7CQkgIC8qIG5vdyB3ZSBjYW4gcmVhZCEgKi8KKwl9CisKKwkvKiBubyBkYXRhIGF2YWlsYWJsZS4gU2hvdWxkIHdlIHdhaXQ/ICovCisJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisgICAgICAgICAgICAgICAgZGJnICgiTm8gcmVhZCBidWZmZXIgYXZhaWxhYmxlLCByZXR1cm5pbmcgLUVBR0FJTiIpOworCQlzZXRfY3VycmVudF9zdGF0ZSAoVEFTS19SVU5OSU5HKTsKKwkJcmVtb3ZlX3dhaXRfcXVldWUgKCZjY3AtPnJlYWR3YWl0LCAmd2FpdCk7CisJCXVwICgmY2NwLT5yZWFkbXV0ZXgpOworCQl1cCAoJmNjcC0+bXV0ZXgpOworCQlyZXR1cm4gLUVBR0FJTjsgIC8qIG5vbmJsb2NraW5nLCBubyBkYXRhIGF2YWlsYWJsZSAqLworICAgICAgICB9CisKKwkvKiB5ZXMsIHdlIHNob3VsZCB3YWl0ISAqLworCXVwICgmY2NwLT5tdXRleCk7IC8qIGFsbG93IG90aGVyIG9wZXJhdGlvbnMgd2hpbGUgd2Ugd2FpdCAqLworCXNjaGVkdWxlKCk7CisJcmVtb3ZlX3dhaXRfcXVldWUgKCZjY3AtPnJlYWR3YWl0LCAmd2FpdCk7CisJaWYgKHNpZ25hbF9wZW5kaW5nIChjdXJyZW50KSkgeworCQkvKiB3YWtlZCB1cCBieSBhIHNpZ25hbCAqLworCQl1cCAoJmNjcC0+cmVhZG11dGV4KTsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisKKwkvKiBBbnl0aGluZyBsZWZ0IHRvIHJlYWQ/ICovCisJaWYgKChjY3AtPnNjb250ZXh0LmlkID09IEFVSF9VTkFTU0lHTkVEKSB8fCBjY3AtPnJlbW92ZWQpIHsKKwkJdXAgKCZjY3AtPnJlYWRtdXRleCk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZjY3AtPm11dGV4KSkgeworCQl1cCAoJmNjcC0+cmVhZG11dGV4KTsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisKKwkvKiB0cnkgdG8gcmVhZCB0aGUgaW5jb21pbmcgZGF0YSBhZ2FpbiAqLworCWdvdG8gZG9yZWFkbGlzdDsKK30KKworCisvKiBXcml0ZSBhIGRhdGEgYmxvY2sgaW50byB0aGUgcmlnaHQgc2VydmljZSBjaGFubmVsIG9mIHRoZSBkZXZpY2UgKi8KK3N0YXRpYyBzc2l6ZV90IGF1ZXJjaGFyX3dyaXRlIChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQoreworCXBhdWVyY2hhcl90IGNjcCA9IChwYXVlcmNoYXJfdCkgZmlsZS0+cHJpdmF0ZV9kYXRhOworICAgICAgICBwYXVlcnN3YWxkX3QgY3AgPSBOVUxMOworICAgICAgICBwYXVlcmJ1Zl90IGJwOworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisJd2FpdF9xdWV1ZV90IHdhaXQ7CisKKyAgICAgICAgZGJnICgiYXVlcmNoYXJfd3JpdGUgJWQgYnl0ZXMiLCBsZW4pOworCisJLyogRXJyb3IgY2hlY2tpbmcgKi8KKwlpZiAoIWNjcCkKKwkJcmV0dXJuIC1FSU87CisgICAgICAgIGlmICgqcHBvcykKKwkJcmV0dXJuIC1FU1BJUEU7CisgICAgICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKword3JpdGVfYWdhaW46CisJLyogZ2V0IHRoZSBtdXRleCAqLworCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZjY3AtPm11dGV4KSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCS8qIENhbiB3ZSBleHBlY3QgdG8gd3JpdGUgc29tZXRoaW5nPyAqLworCWlmIChjY3AtPnNjb250ZXh0LmlkID09IEFVSF9VTkFTU0lHTkVEKSB7CisJCXVwICgmY2NwLT5tdXRleCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU87CisJfQorCisJY3AgPSBjY3AtPmF1ZXJkZXY7CisJaWYgKCFjcCkgeworCQl1cCAoJmNjcC0+bXV0ZXgpOworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmY3AtPm11dGV4KSkgeworCQl1cCAoJmNjcC0+bXV0ZXgpOworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKwlpZiAoIWNwLT51c2JkZXYpIHsKKwkJdXAgKCZjcC0+bXV0ZXgpOworCQl1cCAoJmNjcC0+bXV0ZXgpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJLyogUHJlcGFyZSBmb3Igc2xlZXAgKi8KKwlpbml0X3dhaXRxdWV1ZV9lbnRyeSAoJndhaXQsIGN1cnJlbnQpOworCXNldF9jdXJyZW50X3N0YXRlIChUQVNLX0lOVEVSUlVQVElCTEUpOworCWFkZF93YWl0X3F1ZXVlICgmY3AtPmJ1ZmZlcndhaXQsICZ3YWl0KTsKKworCS8qIFRyeSB0byBnZXQgYSBidWZmZXIgZnJvbSB0aGUgZGV2aWNlIHBvb2wuCisJICAgV2UgY2FuJ3QgdXNlIGEgYnVmZmVyIGZyb20gY2NwLT5idWZjdGwgYmVjYXVzZSB0aGUgd3JpdGUKKwkgICBjb21tYW5kIHdpbGwgbGFzdCBiZW9uZCBhIHJlbGVhc2UoKSAqLworCWJwID0gTlVMTDsKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmNwLT5idWZjdGwubG9jaywgZmxhZ3MpOworICAgICAgICBpZiAoIWxpc3RfZW1wdHkgKCZjcC0+YnVmY3RsLmZyZWVfYnVmZl9saXN0KSkgeworICAgICAgICAgICAgICAgIC8qIHllczogZ2V0IHRoZSBlbnRyeSAqLworICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtcCA9IGNwLT5idWZjdGwuZnJlZV9idWZmX2xpc3QubmV4dDsKKyAgICAgICAgICAgICAgICBsaXN0X2RlbCAodG1wKTsKKyAgICAgICAgICAgICAgICBicCA9IGxpc3RfZW50cnkgKHRtcCwgYXVlcmJ1Zl90LCBidWZmX2xpc3QpOworICAgICAgICB9CisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZjcC0+YnVmY3RsLmxvY2ssIGZsYWdzKTsKKworCS8qIGFyZSB0aGVyZSBhbnkgYnVmZmVycyBsZWZ0PyAqLworCWlmICghYnApIHsKKwkJdXAgKCZjcC0+bXV0ZXgpOworCQl1cCAoJmNjcC0+bXV0ZXgpOworCisJCS8qIE5PTkJMT0NLOiBkb24ndCB3YWl0ICovCisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJc2V0X2N1cnJlbnRfc3RhdGUgKFRBU0tfUlVOTklORyk7CisJCQlyZW1vdmVfd2FpdF9xdWV1ZSAoJmNwLT5idWZmZXJ3YWl0LCAmd2FpdCk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCisJCS8qIEJMT0NLSU5HOiB3YWl0ICovCisJCXNjaGVkdWxlKCk7CisJCXJlbW92ZV93YWl0X3F1ZXVlICgmY3AtPmJ1ZmZlcndhaXQsICZ3YWl0KTsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nIChjdXJyZW50KSkgeworCQkJLyogd2FrZWQgdXAgYnkgYSBzaWduYWwgKi8KKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCX0KKwkJZ290byB3cml0ZV9hZ2FpbjsKKwl9IGVsc2UgeworCQlzZXRfY3VycmVudF9zdGF0ZSAoVEFTS19SVU5OSU5HKTsKKwkJcmVtb3ZlX3dhaXRfcXVldWUgKCZjcC0+YnVmZmVyd2FpdCwgJndhaXQpOworCX0KKworCS8qIHByb3RlY3QgYWdhaW5zdCB0b28gYmlnIHdyaXRlIHJlcXVlc3RzICovCisJaWYgKGxlbiA+IGNwLT5tYXhDb250cm9sTGVuZ3RoKQorCQlsZW4gPSBjcC0+bWF4Q29udHJvbExlbmd0aDsKKworCS8qIEZpbGwgdGhlIGJ1ZmZlciAqLworCWlmIChjb3B5X2Zyb21fdXNlciAoIGJwLT5idWZwK0FVSF9TSVpFLCBidWYsIGxlbikpIHsKKwkJZGJnICgiY29weV9mcm9tX3VzZXIgZmFpbGVkIik7CisJCWF1ZXJidWZfcmVsZWFzZWJ1ZiAoYnApOworCQkvKiBXYWtlIHVwIGFsbCBwcm9jZXNzZXMgd2FpdGluZyBmb3IgYSBidWZmZXIgKi8KKwkJd2FrZV91cCAoJmNwLT5idWZmZXJ3YWl0KTsKKwkJdXAgKCZjcC0+bXV0ZXgpOworCQl1cCAoJmNjcC0+bXV0ZXgpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiBzZXQgdGhlIGhlYWRlciBieXRlICovCisgICAgICAgICooYnAtPmJ1ZnApID0gY2NwLT5zY29udGV4dC5pZCB8IEFVSF9ESVJFQ1QgfCBBVUhfVU5TUExJVDsKKworCS8qIFNldCB0aGUgdHJhbnNmZXIgUGFyYW1ldGVycyAqLworCWJwLT5sZW4gPSBsZW4rQVVIX1NJWkU7CisgICAgICAgIGJwLT5kci0+YlJlcXVlc3RUeXBlID0gQVVUX1dSRVE7CisJYnAtPmRyLT5iUmVxdWVzdCAgICAgPSBBVVZfV0JMT0NLOworCWJwLT5kci0+d1ZhbHVlICAgICAgID0gY3B1X3RvX2xlMTYgKDApOworCWJwLT5kci0+d0luZGV4ICAgICAgID0gY3B1X3RvX2xlMTYgKGNjcC0+c2NvbnRleHQuaWQgfCBBVUhfRElSRUNUIHwgQVVIX1VOU1BMSVQpOworCWJwLT5kci0+d0xlbmd0aCAgICAgID0gY3B1X3RvX2xlMTYgKGxlbitBVUhfU0laRSk7CisJdXNiX2ZpbGxfY29udHJvbF91cmIgKGJwLT51cmJwLCBjcC0+dXNiZGV2LCB1c2Jfc25kY3RybHBpcGUgKGNwLT51c2JkZXYsIDApLAorICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKilicC0+ZHIsIGJwLT5idWZwLCBsZW4rQVVIX1NJWkUsCisJCSAgICBhdWVyY2hhcl9jdHJsd3JpdGVfY29tcGxldGUsIGJwKTsKKwkvKiB1cCB3ZSBnbyAqLworCXJldCA9IGF1ZXJjaGFpbl9zdWJtaXRfdXJiICgmY3AtPmNvbnRyb2xjaGFpbiwgYnAtPnVyYnApOworCXVwICgmY3AtPm11dGV4KTsKKwlpZiAocmV0KSB7CisJCWRiZyAoImF1ZXJjaGFyX3dyaXRlOiBub256ZXJvIHJlc3VsdCBvZiBhdWVyY2hhaW5fc3VibWl0X3VyYiAlZCIsIHJldCk7CisJCWF1ZXJidWZfcmVsZWFzZWJ1ZiAoYnApOworCQkvKiBXYWtlIHVwIGFsbCBwcm9jZXNzZXMgd2FpdGluZyBmb3IgYSBidWZmZXIgKi8KKwkJd2FrZV91cCAoJmNwLT5idWZmZXJ3YWl0KTsKKwkJdXAgKCZjY3AtPm11dGV4KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWVsc2UgeworCQlkYmcgKCJhdWVyY2hhcl93cml0ZTogV3JpdGUgT0siKTsKKwkJdXAgKCZjY3AtPm11dGV4KTsKKwkJcmV0dXJuIGxlbjsKKwl9Cit9CisKKworLyogQ2xvc2UgYSBjaGFyYWN0ZXIgZGV2aWNlICovCitzdGF0aWMgaW50IGF1ZXJjaGFyX3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXBhdWVyY2hhcl90IGNjcCA9IChwYXVlcmNoYXJfdCkgZmlsZS0+cHJpdmF0ZV9kYXRhOworCXBhdWVyc3dhbGRfdCBjcDsKKwlkYmcoInJlbGVhc2UiKTsKKworCS8qIGdldCB0aGUgbXV0ZXhlcyAqLworCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZjY3AtPm11dGV4KSkgeworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKwljcCA9IGNjcC0+YXVlcmRldjsKKwlpZiAoY3ApIHsKKwkJaWYgKGRvd25faW50ZXJydXB0aWJsZSAoJmNwLT5tdXRleCkpIHsKKwkJCXVwICgmY2NwLT5tdXRleCk7CisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQl9CisJCS8qIHJlbW92ZSBhbiBvcGVuIHNlcnZpY2UgKi8KKwkJYXVlcnN3YWxkX3JlbW92ZXNlcnZpY2UgKGNwLCAmY2NwLT5zY29udGV4dCk7CisJCS8qIGRldGFjaCBmcm9tIGRldmljZSAqLworCQlpZiAoKC0tY3AtPm9wZW5fY291bnQgPD0gMCkgJiYgKGNwLT51c2JkZXYgPT0gTlVMTCkpIHsKKwkJCS8qIHVzYiBkZXZpY2Ugd2FpdHMgZm9yIHJlbW92YWwgKi8KKwkJCXVwICgmY3AtPm11dGV4KTsKKwkJCWF1ZXJzd2FsZF9kZWxldGUgKGNwKTsKKwkJfSBlbHNlIHsKKwkJCXVwICgmY3AtPm11dGV4KTsKKwkJfQorCQljcCA9IE5VTEw7CisJCWNjcC0+YXVlcmRldiA9IE5VTEw7CisJfQorCXVwICgmY2NwLT5tdXRleCk7CisJYXVlcmNoYXJfZGVsZXRlIChjY3ApOworCisJcmV0dXJuIDA7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEZpbGUgb3BlcmF0aW9uIHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhdWVyc3dhbGRfZm9wcyA9Cit7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLmxsc2VlayA9CW5vX2xsc2VlaywKKwkucmVhZCA9CQlhdWVyY2hhcl9yZWFkLAorCS53cml0ZSA9ICAgICAgICBhdWVyY2hhcl93cml0ZSwKKwkuaW9jdGwgPQlhdWVyY2hhcl9pb2N0bCwKKwkub3BlbiA9CQlhdWVyY2hhcl9vcGVuLAorCS5yZWxlYXNlID0JYXVlcmNoYXJfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciBhdWVyc3dhbGRfY2xhc3MgPSB7CisJLm5hbWUgPQkJInVzYi9hdWVyJWQiLAorCS5mb3BzID0JCSZhdWVyc3dhbGRfZm9wcywKKwkubW9kZSA9CQlTX0lGQ0hSIHwgU19JUlVHTyB8IFNfSVdVR08sCisJLm1pbm9yX2Jhc2UgPQlBVUVSX01JTk9SX0JBU0UsCit9OworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogU3BlY2lhbCBVU0IgZHJpdmVyIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIFByb2JlIGlmIHRoaXMgZHJpdmVyIHdhbnRzIHRvIHNlcnZlIGFuIFVTQiBkZXZpY2UKKworICAgVGhpcyBlbnRyeSBwb2ludCBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBuZXcgZGV2aWNlIGlzIGF0dGFjaGVkIHRvIHRoZSBidXMuCisgICBUaGVuIHRoZSBkZXZpY2UgZHJpdmVyIGhhcyB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgaXRzIGludGVybmFsIGRhdGEKKyAgIHN0cnVjdHVyZXMgZm9yIHRoZSBuZXcgZGV2aWNlLgorCisgICBUaGUgIGRldiBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGRldmljZSBjb250ZXh0LCB3aGljaCBjb250YWlucyBwb2ludGVycworICAgdG8gYWxsIFVTQiBkZXNjcmlwdG9ycy4gVGhlICBpbnRlcmZhY2UgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBpbnRlcmZhY2UKKyAgIG51bWJlci4gSWYgYSBVU0IgZHJpdmVyIHdhbnRzIHRvIGJpbmQgaXRzZWxmIHRvIGEgcGFydGljdWxhciBkZXZpY2UgYW5kCisgICBpbnRlcmZhY2UgaXQgaGFzIHRvIHJldHVybiBhIHBvaW50ZXIuIFRoaXMgcG9pbnRlciBub3JtYWxseSByZWZlcmVuY2VzCisgICB0aGUgZGV2aWNlIGRyaXZlcidzIGNvbnRleHQgc3RydWN0dXJlLgorCisgICBQcm9iaW5nIG5vcm1hbGx5IGlzIGRvbmUgYnkgY2hlY2tpbmcgdGhlIHZlbmRvciBhbmQgcHJvZHVjdCBpZGVudGlmaWNhdGlvbnMKKyAgIG9yIHRoZSBjbGFzcyBhbmQgc3ViY2xhc3MgZGVmaW5pdGlvbnMuIElmIHRoZXkgbWF0Y2ggdGhlIGludGVyZmFjZSBudW1iZXIKKyAgIGlzIGNvbXBhcmVkIHdpdGggdGhlIG9uZXMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIuIFdoZW4gcHJvYmluZyBpcyBkb25lCisgICBjbGFzcyBiYXNlZCBpdCBtaWdodCBiZSBuZWNlc3NhcnkgdG8gcGFyc2Ugc29tZSBtb3JlIFVTQiBkZXNjcmlwdG9ycyBiZWNhdXNlCisgICB0aGUgZGV2aWNlIHByb3BlcnRpZXMgY2FuIGRpZmZlciBpbiBhIHdpZGUgcmFuZ2UuCisqLworc3RhdGljIGludCBhdWVyc3dhbGRfcHJvYmUgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlwYXVlcnN3YWxkX3QgY3AgPSBOVUxMOworCXVuc2lnbmVkIGludCB1ID0gMDsKKwlfX2xlMTYgKnBidWY7CisJaW50IHJldDsKKworCWRiZyAoInByb2JlOiB2ZW5kb3IgaWQgMHgleCwgZGV2aWNlIGlkIDB4JXgiLAorCSAgICAgbGUxNl90b19jcHUodXNiZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkgICAgIGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKKworICAgICAgICAvKiB3ZSB1c2Ugb25seSB0aGUgZmlyc3QgLWFuZCBvbmx5LSBpbnRlcmZhY2UgKi8KKyAgICAgICAgaWYgKGludGYtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciAhPSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLworCWNwID0ga21hbGxvYyAoc2l6ZW9mKGF1ZXJzd2FsZF90KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNwID09IE5VTEwpIHsKKwkJZXJyICgib3V0IG9mIG1lbW9yeSIpOworCQlnb3RvIHBmYWlsOworCX0KKworCS8qIEluaXRpYWxpemUgZGV2aWNlIGRlc2NyaXB0b3IgKi8KKwltZW1zZXQgKGNwLCAwLCBzaXplb2YoYXVlcnN3YWxkX3QpKTsKKwlpbml0X01VVEVYICgmY3AtPm11dGV4KTsKKwljcC0+dXNiZGV2ID0gdXNiZGV2OworCWF1ZXJjaGFpbl9pbml0ICgmY3AtPmNvbnRyb2xjaGFpbik7CisgICAgICAgIGF1ZXJidWZfaW5pdCAoJmNwLT5idWZjdGwpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZjcC0+YnVmZmVyd2FpdCk7CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZhdWVyc3dhbGRfY2xhc3MpOworCWlmIChyZXQpIHsKKwkJZXJyICgiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLiIpOworCQlnb3RvIHBmYWlsOworCX0KKworCS8qIEdpdmUgdGhlIGRldmljZSBhIG5hbWUgKi8KKwlzcHJpbnRmIChjcC0+bmFtZSwgInVzYi9hdWVyJWQiLCBpbnRmLT5taW5vcik7CisKKwkvKiBTdG9yZSB0aGUgaW5kZXggKi8KKwljcC0+ZHRpbmRleCA9IGludGYtPm1pbm9yOworCisJLyogR2V0IHRoZSB1c2IgdmVyc2lvbiBvZiB0aGUgZGV2aWNlICovCisJY3AtPnZlcnNpb24gPSBsZTE2X3RvX2NwdShjcC0+dXNiZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisJZGJnICgiVmVyc2lvbiBpcyAlWCIsIGNwLT52ZXJzaW9uKTsKKworCS8qIGFsbG93IHNvbWUgdGltZSB0byBzZXR0bGUgdGhlIGRldmljZSAqLworCW1zbGVlcCgzMzQpOworCisJLyogVHJ5IHRvIGdldCBhIHN1aXRhYmxlIHRleHR1YWwgZGVzY3JpcHRpb24gb2YgdGhlIGRldmljZSAqLworCS8qIERldmljZSBuYW1lOiovCisJcmV0ID0gdXNiX3N0cmluZyggY3AtPnVzYmRldiwgQVVTSV9ERVZJQ0UsIGNwLT5kZXZfZGVzYywgQVVTSV9ETEVOLTEpOworCWlmIChyZXQgPj0gMCkgeworCQl1ICs9IHJldDsKKwkJLyogQXBwZW5kIFNlcmlhbCBOdW1iZXIgKi8KKwkJbWVtY3B5KCZjcC0+ZGV2X2Rlc2NbdV0sICIsU2VyIyAiLCA2KTsKKwkJdSArPSA2OworCQlyZXQgPSB1c2Jfc3RyaW5nKCBjcC0+dXNiZGV2LCBBVVNJX1NFUklBTE5SLCAmY3AtPmRldl9kZXNjW3VdLCBBVVNJX0RMRU4tdS0xKTsKKwkJaWYgKHJldCA+PSAwKSB7CisJCQl1ICs9IHJldDsKKwkJCS8qIEFwcGVuZCBzdWJzY3JpYmVyIG51bWJlciAqLworCQkJbWVtY3B5KCZjcC0+ZGV2X2Rlc2NbdV0sICIsICIsIDIpOworCQkJdSArPSAyOworCQkJcmV0ID0gdXNiX3N0cmluZyggY3AtPnVzYmRldiwgQVVTSV9NU04sICZjcC0+ZGV2X2Rlc2NbdV0sIEFVU0lfRExFTi11LTEpOworCQkJaWYgKHJldCA+PSAwKSB7CisJCQkJdSArPSByZXQ7CisJCQl9CisJCX0KKwl9CisJY3AtPmRldl9kZXNjW3VdID0gJ1wwJzsKKwlpbmZvKCJkZXZpY2UgaXMgYSAlcyIsIGNwLT5kZXZfZGVzYyk7CisKKyAgICAgICAgLyogZ2V0IHRoZSBtYXhpbXVtIGFsbG93ZWQgY29udHJvbCB0cmFuc2ZlciBsZW5ndGggKi8KKyAgICAgICAgcGJ1ZiA9IChfX2xlMTYgKikga21hbGxvYyAoMiwgR0ZQX0tFUk5FTCk7ICAgIC8qIHVzZSBhbiBhbGxvY2F0ZWQgYnVmZmVyIGJlY2F1c2Ugb2YgdXJiIHRhcmdldCAqLworICAgICAgICBpZiAoIXBidWYpIHsKKwkJZXJyKCAib3V0IG9mIG1lbW9yeSIpOworCQlnb3RvIHBmYWlsOworCX0KKyAgICAgICAgcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGNwLT51c2JkZXYsICAgICAgICAgICAvKiBwb2ludGVyIHRvIGRldmljZSAqLworICAgICAgICAgICAgICAgIHVzYl9yY3ZjdHJscGlwZSggY3AtPnVzYmRldiwgMCApLCAgIC8qIHBpcGUgdG8gY29udHJvbCBlbmRwb2ludCAqLworICAgICAgICAgICAgICAgIEFVVl9HRVRJTkZPLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVTQiBtZXNzYWdlIHJlcXVlc3QgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICBBVVRfUlJFUSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVU0IgbWVzc2FnZSByZXF1ZXN0IHR5cGUgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVU0IgbWVzc2FnZSB2YWx1ZSAqLworICAgICAgICAgICAgICAgIEFVRElfTUJDVFJBTlMsICAgICAgICAgICAgICAgICAgICAgIC8qIFVTQiBtZXNzYWdlIGluZGV4IHZhbHVlICovCisgICAgICAgICAgICAgICAgcGJ1ZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byB0aGUgcmVjZWl2ZSBidWZmZXIgKi8KKyAgICAgICAgICAgICAgICAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgdGhlIGJ1ZmZlciAqLworICAgICAgICAgICAgICAgIDIwMDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aW1lIHRvIHdhaXQgZm9yIHRoZSBtZXNzYWdlIHRvIGNvbXBsZXRlIGJlZm9yZSB0aW1pbmcgb3V0ICovCisgICAgICAgIGlmIChyZXQgPT0gMikgeworCSAgICAgICAgY3AtPm1heENvbnRyb2xMZW5ndGggPSBsZTE2X3RvX2NwdXAocGJ1Zik7CisgICAgICAgICAgICAgICAga2ZyZWUocGJ1Zik7CisgICAgICAgICAgICAgICAgZGJnKCJzZXR1cDogbWF4LiBhbGxvd2VkIGNvbnRyb2wgdHJhbnNmZXJzaXplIGlzICVkIGJ5dGVzIiwgY3AtPm1heENvbnRyb2xMZW5ndGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGtmcmVlKHBidWYpOworICAgICAgICAgICAgICAgIGVycigic2V0dXA6IGdldHRpbmcgbWF4LiBhbGxvd2VkIGNvbnRyb2wgdHJhbnNmZXIgbGVuZ3RoIGZhaWxlZCB3aXRoIGVycm9yICVkIiwgcmV0KTsKKwkJZ290byBwZmFpbDsKKyAgICAgICAgfQorCisJLyogYWxsb2NhdGUgYSBjaGFpbiBmb3IgdGhlIGNvbnRyb2wgbWVzc2FnZXMgKi8KKyAgICAgICAgaWYgKGF1ZXJjaGFpbl9zZXR1cCAoJmNwLT5jb250cm9sY2hhaW4sIEFVQ0hfRUxFTUVOVFMpKSB7CisJCWVyciAoIm91dCBvZiBtZW1vcnkiKTsKKwkJZ290byBwZmFpbDsKKwl9CisKKyAgICAgICAgLyogYWxsb2NhdGUgYnVmZmVycyBmb3IgY29udHJvbCBtZXNzYWdlcyAqLworCWlmIChhdWVyYnVmX3NldHVwICgmY3AtPmJ1ZmN0bCwgQVVfUkJVRkZFUlMsIGNwLT5tYXhDb250cm9sTGVuZ3RoK0FVSF9TSVpFKSkgeworCQllcnIgKCJvdXQgb2YgbWVtb3J5Iik7CisJCWdvdG8gcGZhaWw7CisJfQorCisJLyogc3RhcnQgdGhlIGludGVycnVwdCBlbmRwb2ludCAqLworCWlmIChhdWVyc3dhbGRfaW50X29wZW4gKGNwKSkgeworCQllcnIgKCJpbnQgZW5kcG9pbnQgZmFpbGVkIik7CisJCWdvdG8gcGZhaWw7CisJfQorCisJLyogYWxsIE9LICovCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgY3ApOworCXJldHVybiAwOworCisJLyogRXJyb3IgZXhpdDogY2xlYW4gdXAgdGhlIG1lbW9yeSAqLworcGZhaWw6CWF1ZXJzd2FsZF9kZWxldGUgKGNwKTsKKwlyZXR1cm4gLUVJTzsKK30KKworCisvKiBEaXNjb25uZWN0IGRyaXZlciBmcm9tIGEgc2VydmVkIGRldmljZQorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBhIGRldmljZSB3aGljaCB3YXMgc2VydmVkIGJ5IHRoaXMgZHJpdmVyCisgICBpcyBkaXNjb25uZWN0ZWQuCisKKyAgIFRoZSBhcmd1bWVudCAgZGV2IHNwZWNpZmllcyB0aGUgZGV2aWNlIGNvbnRleHQgYW5kIHRoZSAgZHJpdmVyX2NvbnRleHQKKyAgIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgIGRyaXZlcl9jb250ZXh0IG9mIHRoZQorICAgcHJvYmUgZnVuY3Rpb24uIEFmdGVyIHJldHVybmluZyBmcm9tIHRoZSBkaXNjb25uZWN0IGZ1bmN0aW9uIHRoZSBVU0IKKyAgIGZyYW1ld29yayBjb21wbGV0ZWx5IGRlYWxsb2NhdGVzIGFsbCBkYXRhIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoCisgICB0aGlzIGRldmljZS4gU28gZXNwZWNpYWxseSB0aGUgdXNiX2RldmljZSBzdHJ1Y3R1cmUgbXVzdCBub3QgYmUgdXNlZAorICAgYW55IGxvbmdlciBieSB0aGUgdXNiIGRyaXZlci4KKyovCitzdGF0aWMgdm9pZCBhdWVyc3dhbGRfZGlzY29ubmVjdCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJcGF1ZXJzd2FsZF90IGNwID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJdW5zaWduZWQgaW50IHU7CisKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKKwlpZiAoIWNwKQorCQlyZXR1cm47CisKKwlkb3duICgmY3AtPm11dGV4KTsKKwlpbmZvICgiZGV2aWNlIC9kZXYvJXMgbm93IGRpc2Nvbm5lY3RpbmciLCBjcC0+bmFtZSk7CisKKwkvKiBnaXZlIGJhY2sgb3VyIFVTQiBtaW5vciBudW1iZXIgKi8KKwl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZiwgJmF1ZXJzd2FsZF9jbGFzcyk7CisKKwkvKiBTdG9wIHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQgKi8KKwlhdWVyc3dhbGRfaW50X3JlbGVhc2UgKGNwKTsKKworCS8qIHJlbW92ZSB0aGUgY29udHJvbCBjaGFpbiBhbGxvY2F0ZWQgaW4gYXVlcnN3YWxkX3Byb2JlCisJICAgVGhpcyBoYXMgdGhlIGJlbmVmaXQgb2YKKwkgICBhKSBhbGwgcGVuZGluZyAoYSlzeW5jaHJvbm91cyB1cmJzIGFyZSB1bmxpbmtlZAorCSAgIGIpIGFsbCBidWZmZXJzIGRlYWxpbmcgd2l0aCB1cmJzIGFyZSByZWNsYWltZWQKKwkqLworCWF1ZXJjaGFpbl9mcmVlICgmY3AtPmNvbnRyb2xjaGFpbik7CisKKwlpZiAoY3AtPm9wZW5fY291bnQgPT0gMCkgeworCQkvKiBub2JvZHkgaXMgdXNpbmcgdGhpcyBkZXZpY2UuIFNvIHdlIGNhbiBjbGVhbiB1cCBub3cgKi8KKwkJdXAgKCZjcC0+bXV0ZXgpOy8qIHVwKCkgaXMgcG9zc2libGUgaGVyZSBiZWNhdXNlIG5vIG90aGVyIHRhc2sKKwkJCQkgICBjYW4gb3BlbiB0aGUgZGV2aWNlIChzZWUgYWJvdmUpLiBJIGRvbid0IHdhbnQKKwkJCQkgICB0byBrZnJlZSgpIGEgbG9ja2VkIG11dGV4LiAqLworCQlhdWVyc3dhbGRfZGVsZXRlIChjcCk7CisJfSBlbHNlIHsKKwkJLyogZGV2aWNlIGlzIHVzZWQuIFJlbW92ZSB0aGUgcG9pbnRlciB0byB0aGUKKwkJICAgdXNiIGRldmljZSAoaXQncyBub3QgdmFsaWQgYW55IG1vcmUpLiBUaGUgbGFzdAorCQkgICByZWxlYXNlKCkgd2lsbCBkbyB0aGUgY2xlYW4gdXAgKi8KKwkJY3AtPnVzYmRldiA9IE5VTEw7CisJCXVwICgmY3AtPm11dGV4KTsKKwkJLyogVGVybWluYXRlIHdhaXRpbmcgd3JpdGVycyAqLworCQl3YWtlX3VwICgmY3AtPmJ1ZmZlcndhaXQpOworCQkvKiBJbmZvcm0gYWxsIHdhaXRpbmcgcmVhZGVycyAqLworCQlmb3IgKCB1ID0gMDsgdSA8IEFVSF9UWVBFU0laRTsgdSsrKSB7CisJCQlwYXVlcnNjb25fdCBzY3AgPSBjcC0+c2VydmljZXNbdV07CisJCQlpZiAoc2NwKQorCQkJCXNjcC0+ZGlzY29ubmVjdCggc2NwKTsKKwkJfQorCX0KK30KKworLyogRGVzY3JpcHRvciBmb3IgdGhlIGRldmljZXMgd2hpY2ggYXJlIHNlcnZlZCBieSB0aGlzIGRyaXZlci4KKyAgIE5PVEU6IHRoaXMgc3RydWN0IGlzIHBhcnNlZCBieSB0aGUgdXNibWFuYWdlciBpbnN0YWxsIHNjcmlwdHMuCisgICAgICAgICBEb24ndCBjaGFuZ2Ugd2l0aG91dCBjYXV0aW9uIQorKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhdWVyc3dhbGRfaWRzIFtdID0geworCXsgVVNCX0RFVklDRSAoSURfQVVFUlNXQUxELCAweDAwQzApIH0sICAgICAgICAgIC8qIENPTXBhY3QgMjEwNCBVU0IgKi8KKwl7IFVTQl9ERVZJQ0UgKElEX0FVRVJTV0FMRCwgMHgwMERCKSB9LCAgICAgICAgICAvKiBDT01wYWN0IDQ0MTAvMjIwNiBVU0IgKi8KKwl7IFVTQl9ERVZJQ0UgKElEX0FVRVJTV0FMRCwgMHgwMEYxKSB9LCAgICAgICAgICAvKiBDb21mb3J0IDIwMDAgU3lzdGVtIFRlbGVwaG9uZSAqLworCXsgVVNCX0RFVklDRSAoSURfQVVFUlNXQUxELCAweDAwRjIpIH0sICAgICAgICAgIC8qIENvbWZvcnQgMTIwMCBTeXN0ZW0gVGVsZXBob25lICovCisgICAgICAgIHsgfQkJCSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisvKiBTdGFuZGFyZCBtb2R1bGUgZGV2aWNlIHRhYmxlICovCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGF1ZXJzd2FsZF9pZHMpOworCisvKiBTdGFuZGFyZCB1c2IgZHJpdmVyIHN0cnVjdCAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGF1ZXJzd2FsZF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImF1ZXJzd2FsZCIsCisJLnByb2JlID0JYXVlcnN3YWxkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JYXVlcnN3YWxkX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JYXVlcnN3YWxkX2lkcywKK307CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBNb2R1bGUgbG9hZGluZy91bmxvYWRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyogRHJpdmVyIGluaXRpYWxpc2F0aW9uLiBDYWxsZWQgYWZ0ZXIgbW9kdWxlIGxvYWRpbmcuCisgICBOT1RFOiB0aGVyZSBpcyBubyBjb25jdXJyZW5jeSBhdCBfaW5pdAorKi8KK3N0YXRpYyBpbnQgX19pbml0IGF1ZXJzd2FsZF9pbml0ICh2b2lkKQoreworCWludCByZXN1bHQ7CisJZGJnICgiaW5pdCIpOworCisJLyogcmVnaXN0ZXIgZHJpdmVyIGF0IHRoZSBVU0Igc3Vic3lzdGVtICovCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyICgmYXVlcnN3YWxkX2RyaXZlcik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZXJyICgiZHJpdmVyIGNvdWxkIG5vdCBiZSByZWdpc3RlcmVkIik7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIERyaXZlciBkZWluaXQuIENhbGxlZCBiZWZvcmUgbW9kdWxlIHJlbW92YWwuCisgICBOT1RFOiB0aGVyZSBpcyBubyBjb25jdXJyZW5jeSBhdCBfY2xlYW51cAorKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBhdWVyc3dhbGRfY2xlYW51cCAodm9pZCkKK3sKKwlkYmcgKCJjbGVhbnVwIik7CisJdXNiX2RlcmVnaXN0ZXIgKCZhdWVyc3dhbGRfZHJpdmVyKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBMaW51eCBkZXZpY2UgZHJpdmVyIG1vZHVsZSBkZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworTU9EVUxFX0FVVEhPUiAoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04gKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFICgiR1BMIik7CisKK21vZHVsZV9pbml0IChhdWVyc3dhbGRfaW5pdCk7Cittb2R1bGVfZXhpdCAoYXVlcnN3YWxkX2NsZWFudXApOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9jeXRoZXJtLmMgYi9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjZlMmIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9jeXRoZXJtLmMKQEAgLTAsMCArMSw0MzAgQEAKKy8qIC0qLSBsaW51eC1jIC0qLQorICogQ3lwcmVzcyBVU0IgVGhlcm1vbWV0ZXIgZHJpdmVyIAorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRXJpayBSaWd0b3JwIDxlcmtraUBsaW51eC5udT4gPGVyaWtAcmlndG9ycC5jb20+CisgKiAKKyAqIFRoaXMgZHJpdmVyIHdvcmtzIHdpdGggRWxla3RvciBtYWdhemluZSBVU0IgSW50ZXJmYWNlIGFzIHB1Ymxpc2hlZCBpbiAKKyAqIGlzc3VlICMyOTEuIEl0IHNob3VsZCBhbHNvIHdvcmsgd2l0aCB0aGUgb3JpZ2luYWwgc3RhcnRlciBraXQvZGVtbyBib2FyZAorICogZnJvbSBDeXByZXNzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuMCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiRXJpayBSaWd0b3JwIgorI2RlZmluZSBEUklWRVJfREVTQyAiQ3lwcmVzcyBVU0IgVGhlcm1vbWV0ZXIgZHJpdmVyIgorCisjZGVmaW5lIFVTQl9TS0VMX1ZFTkRPUl9JRAkweDA0YjQKKyNkZWZpbmUgVVNCX1NLRUxfUFJPRFVDVF9JRAkweDAwMDIKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShVU0JfU0tFTF9WRU5ET1JfSUQsIFVTQl9TS0VMX1BST0RVQ1RfSUQpIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CisKKy8qIFN0cnVjdHVyZSB0byBob2xkIGFsbCBvZiBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmICovCitzdHJ1Y3QgdXNiX2N5dGhlcm0geworCXN0cnVjdCB1c2JfZGV2aWNlICAgICp1ZGV2OwkgLyogc2F2ZSBvZmYgdGhlIHVzYiBkZXZpY2UgcG9pbnRlciAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7IC8qIHRoZSBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlICovCisJaW50IGJyaWdodG5lc3M7Cit9OworCisKKy8qIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgY3l0aGVybV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCAKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgY3l0aGVybV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOworCisKKy8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjeXRoZXJtX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiY3l0aGVybSIsCisJLnByb2JlID0JY3l0aGVybV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CWN5dGhlcm1fZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZSwKK307CisKKy8qIFZlbmRvciByZXF1ZXN0cyAqLworLyogVGhleSBhbGwgb3BlcmF0ZSBvbiBvbmUgYnl0ZSBhdCBhIHRpbWUgKi8KKyNkZWZpbmUgUElORyAgICAgICAweDAwCisjZGVmaW5lIFJFQURfUk9NICAgMHgwMSAvKiBSZWFkcyBmb3JtIFJPTSwgdmFsdWUgPSBhZGRyZXNzICovCisjZGVmaW5lIFJFQURfUkFNICAgMHgwMiAvKiBSZWFkcyBmb3JtIFJBTSwgdmFsdWUgPSBhZGRyZXNzICovCisjZGVmaW5lIFdSSVRFX1JBTSAgMHgwMyAvKiBXcml0ZSB0byBSQU0sIHZhbHVlID0gYWRkcmVzcywgaW5kZXggPSBkYXRhICovCisjZGVmaW5lIFJFQURfUE9SVCAgMHgwNCAvKiBSZWFkcyBmcm9tIHBvcnQsIHZhbHVlID0gYWRkcmVzcyAqLworI2RlZmluZSBXUklURV9QT1JUIDB4MDUgLyogV3JpdGUgdG8gcG9ydCwgdmFsdWUgPSBhZGRyZXNzLCBpbmRleCA9IGRhdGEgKi8gCisKKworLyogU2VuZCBhIHZlbmRvciBjb21tYW5kIHRvIGRldmljZSAqLworc3RhdGljIGludCB2ZW5kb3JfY29tbWFuZChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlcXVlc3QsIAorCQkJICB1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBjaGFyIGluZGV4LAorCQkJICB2b2lkICpidWYsIGludCBzaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwKKwkJCSAgICAgICByZXF1ZXN0LCAKKwkJCSAgICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX09USEVSLAorCQkJICAgICAgIHZhbHVlLCAKKwkJCSAgICAgICBpbmRleCwgYnVmLCBzaXplLAorCQkJICAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKK30KKworCisKKyNkZWZpbmUgQlJJR0hUTkVTUyAweDJjICAgICAvKiBSQU0gbG9jYXRpb24gZm9yIGJyaWdodG5lc3MgdmFsdWUgKi8KKyNkZWZpbmUgQlJJR0hUTkVTU19TRU0gMHgyYiAvKiBSQU0gbG9jYXRpb24gZm9yIGJyaWdodG5lc3Mgc2VtYXBob3JlICovCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYnJpZ2h0bmVzcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsgICAgCisJc3RydWN0IHVzYl9jeXRoZXJtICpjeXRoZXJtID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsgICAgIAorCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWkiLCBjeXRoZXJtLT5icmlnaHRuZXNzKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X2JyaWdodG5lc3Moc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIAorCQkJICAgICAgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfY3l0aGVybSAqY3l0aGVybSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJaW50IHJldHZhbDsKKyAgIAorCWJ1ZmZlciA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycigmY3l0aGVybS0+dWRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAwOworCX0KKworCWN5dGhlcm0tPmJyaWdodG5lc3MgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKyAgIAorCWlmIChjeXRoZXJtLT5icmlnaHRuZXNzID4gMHhGRikKKwkJY3l0aGVybS0+YnJpZ2h0bmVzcyA9IDB4RkY7CisJZWxzZSBpZiAoY3l0aGVybS0+YnJpZ2h0bmVzcyA8IDApCisJCWN5dGhlcm0tPmJyaWdodG5lc3MgPSAwOworICAgCisJLyogU2V0IGJyaWdodG5lc3MgKi8KKwlyZXR2YWwgPSB2ZW5kb3JfY29tbWFuZChjeXRoZXJtLT51ZGV2LCBXUklURV9SQU0sIEJSSUdIVE5FU1MsIAorCQkJCWN5dGhlcm0tPmJyaWdodG5lc3MsIGJ1ZmZlciwgOCk7CisJaWYgKHJldHZhbCkKKwkJZGV2X2RiZygmY3l0aGVybS0+dWRldi0+ZGV2LCAicmV0dmFsID0gJWRcbiIsIHJldHZhbCk7CisJLyogSW5mb3JtILVDIHRoYXQgd2UgaGF2ZSBjaGFuZ2VkIHRoZSBicmlnaHRuZXNzIHNldHRpbmcgKi8KKwlyZXR2YWwgPSB2ZW5kb3JfY29tbWFuZChjeXRoZXJtLT51ZGV2LCBXUklURV9SQU0sIEJSSUdIVE5FU1NfU0VNLAorCQkJCTB4MDEsIGJ1ZmZlciwgOCk7CisJaWYgKHJldHZhbCkKKwkJZGV2X2RiZygmY3l0aGVybS0+dWRldi0+ZGV2LCAicmV0dmFsID0gJWRcbiIsIHJldHZhbCk7CisgICAKKwlrZnJlZShidWZmZXIpOworICAgCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoYnJpZ2h0bmVzcywgU19JUlVHTyB8IFNfSVdVU1IgfCBTX0lXR1JQLCAKKwkJICAgc2hvd19icmlnaHRuZXNzLCBzZXRfYnJpZ2h0bmVzcyk7CisKKworI2RlZmluZSBURU1QIDB4MzMgLyogUkFNIGxvY2F0aW9uIGZvciB0ZW1wZXJhdHVyZSAqLworI2RlZmluZSBTSUdOIDB4MzQgLyogUkFNIGxvY2F0aW9uIGZvciB0ZW1wZXJhdHVyZSBzaWduICovCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfY3l0aGVybSAqY3l0aGVybSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKworCWludCB0ZW1wLCBzaWduOworICAgCisJYnVmZmVyID0ga21hbGxvYyg4LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKCZjeXRoZXJtLT51ZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogcmVhZCB0ZW1wZXJhdHVyZSAqLworCXJldHZhbCA9IHZlbmRvcl9jb21tYW5kKGN5dGhlcm0tPnVkZXYsIFJFQURfUkFNLCBURU1QLCAwLCBidWZmZXIsIDgpOworCWlmIChyZXR2YWwpCisJCWRldl9kYmcoJmN5dGhlcm0tPnVkZXYtPmRldiwgInJldHZhbCA9ICVkXG4iLCByZXR2YWwpOworCXRlbXAgPSBidWZmZXJbMV07CisgICAKKwkvKiByZWFkIHNpZ24gKi8KKwlyZXR2YWwgPSB2ZW5kb3JfY29tbWFuZChjeXRoZXJtLT51ZGV2LCBSRUFEX1JBTSwgU0lHTiwgMCwgYnVmZmVyLCA4KTsKKwlpZiAocmV0dmFsKQorCQlkZXZfZGJnKCZjeXRoZXJtLT51ZGV2LT5kZXYsICJyZXR2YWwgPSAlZFxuIiwgcmV0dmFsKTsKKwlzaWduID0gYnVmZmVyWzFdOworCisJa2ZyZWUoYnVmZmVyKTsKKyAgIAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVjJWkuJWkiLCBzaWduID8gJy0nIDogJysnLCB0ZW1wID4+IDEsCisJCSAgICAgICA1Kih0ZW1wIC0gKCh0ZW1wID4+IDEpIDw8IDEpKSk7Cit9CisKKworc3RhdGljIHNzaXplX3Qgc2V0X3RlbXAoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZW1wLCBTX0lSVUdPLCBzaG93X3RlbXAsIHNldF90ZW1wKTsKKworCisjZGVmaW5lIEJVVFRPTiAweDdhCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYnV0dG9uKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9jeXRoZXJtICpjeXRoZXJtID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWludCByZXR2YWw7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCisJYnVmZmVyID0ga21hbGxvYyg4LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKCZjeXRoZXJtLT51ZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogY2hlY2sgYnV0dG9uICovCisJcmV0dmFsID0gdmVuZG9yX2NvbW1hbmQoY3l0aGVybS0+dWRldiwgUkVBRF9SQU0sIEJVVFRPTiwgMCwgYnVmZmVyLCA4KTsKKwlpZiAocmV0dmFsKQorCQlkZXZfZGJnKCZjeXRoZXJtLT51ZGV2LT5kZXYsICJyZXR2YWwgPSAlZFxuIiwgcmV0dmFsKTsKKyAgIAorCXJldHZhbCA9IGJ1ZmZlclsxXTsKKworCWtmcmVlKGJ1ZmZlcik7CisKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIxIik7CisJZWxzZQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIwIik7Cit9CisKKworc3RhdGljIHNzaXplX3Qgc2V0X2J1dHRvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGJ1dHRvbiwgU19JUlVHTywgc2hvd19idXR0b24sIHNldF9idXR0b24pOworCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfcG9ydDAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9jeXRoZXJtICpjeXRoZXJtID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWludCByZXR2YWw7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCisJYnVmZmVyID0ga21hbGxvYyg4LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKCZjeXRoZXJtLT51ZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dmFsID0gdmVuZG9yX2NvbW1hbmQoY3l0aGVybS0+dWRldiwgUkVBRF9QT1JULCAwLCAwLCBidWZmZXIsIDgpOworCWlmIChyZXR2YWwpCisJCWRldl9kYmcoJmN5dGhlcm0tPnVkZXYtPmRldiwgInJldHZhbCA9ICVkXG4iLCByZXR2YWwpOworCisJcmV0dmFsID0gYnVmZmVyWzFdOworCisJa2ZyZWUoYnVmZmVyKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkIiwgcmV0dmFsKTsKK30KKworCitzdGF0aWMgc3NpemVfdCBzZXRfcG9ydDAoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2N5dGhlcm0gKmN5dGhlcm0gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCWludCByZXR2YWw7CisJaW50IHRtcDsKKyAgIAorCWJ1ZmZlciA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycigmY3l0aGVybS0+dWRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAwOworCX0KKworCXRtcCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworICAgCisJaWYgKHRtcCA+IDB4RkYpCisJCXRtcCA9IDB4RkY7CisJZWxzZSBpZiAodG1wIDwgMCkKKwkJdG1wID0gMDsKKyAgIAorCXJldHZhbCA9IHZlbmRvcl9jb21tYW5kKGN5dGhlcm0tPnVkZXYsIFdSSVRFX1BPUlQsIDAsCisJCQkJdG1wLCBidWZmZXIsIDgpOworCWlmIChyZXR2YWwpCisJCWRldl9kYmcoJmN5dGhlcm0tPnVkZXYtPmRldiwgInJldHZhbCA9ICVkXG4iLCByZXR2YWwpOworCisJa2ZyZWUoYnVmZmVyKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHBvcnQwLCBTX0lSVUdPIHwgU19JV1VTUiB8IFNfSVdHUlAsIHNob3dfcG9ydDAsIHNldF9wb3J0MCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfcG9ydDEoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9jeXRoZXJtICpjeXRoZXJtID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWludCByZXR2YWw7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCisJYnVmZmVyID0ga21hbGxvYyg4LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKCZjeXRoZXJtLT51ZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dmFsID0gdmVuZG9yX2NvbW1hbmQoY3l0aGVybS0+dWRldiwgUkVBRF9QT1JULCAxLCAwLCBidWZmZXIsIDgpOworCWlmIChyZXR2YWwpCisJCWRldl9kYmcoJmN5dGhlcm0tPnVkZXYtPmRldiwgInJldHZhbCA9ICVkXG4iLCByZXR2YWwpOworICAgCisJcmV0dmFsID0gYnVmZmVyWzFdOworCisJa2ZyZWUoYnVmZmVyKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkIiwgcmV0dmFsKTsKK30KKworCitzdGF0aWMgc3NpemVfdCBzZXRfcG9ydDEoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2N5dGhlcm0gKmN5dGhlcm0gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCWludCByZXR2YWw7CisJaW50IHRtcDsKKyAgIAorCWJ1ZmZlciA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycigmY3l0aGVybS0+dWRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAwOworCX0KKworCXRtcCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworICAgCisJaWYgKHRtcCA+IDB4RkYpCisJCXRtcCA9IDB4RkY7CisJZWxzZSBpZiAodG1wIDwgMCkKKwkJdG1wID0gMDsKKyAgIAorCXJldHZhbCA9IHZlbmRvcl9jb21tYW5kKGN5dGhlcm0tPnVkZXYsIFdSSVRFX1BPUlQsIDEsCisJCQkJdG1wLCBidWZmZXIsIDgpOworCWlmIChyZXR2YWwpCisJCWRldl9kYmcoJmN5dGhlcm0tPnVkZXYtPmRldiwgInJldHZhbCA9ICVkXG4iLCByZXR2YWwpOworCisJa2ZyZWUoYnVmZmVyKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHBvcnQxLCBTX0lSVUdPIHwgU19JV1VTUiB8IFNfSVdHUlAsIHNob3dfcG9ydDEsIHNldF9wb3J0MSk7CisKKworCitzdGF0aWMgaW50IGN5dGhlcm1fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCXN0cnVjdCB1c2JfY3l0aGVybSAqZGV2ID0gTlVMTDsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKworCWRldiA9IGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgdXNiX2N5dGhlcm0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJZGV2X2VyciAoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCW1lbXNldCAoZGV2LCAweDAwLCBzaXplb2YgKCpkZXYpKTsKKworCWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KHVkZXYpOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZXJmYWNlLCBkZXYpOworCisJZGV2LT5icmlnaHRuZXNzID0gMHhGRjsKKworCWRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9icmlnaHRuZXNzKTsgICAKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfdGVtcCk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2J1dHRvbik7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3BvcnQwKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfcG9ydDEpOworCisJZGV2X2luZm8gKCZpbnRlcmZhY2UtPmRldiwgCisJCSAgIkN5cHJlc3MgdGhlcm1vbWV0ZXIgZGV2aWNlIG5vdyBhdHRhY2hlZFxuIik7CisJcmV0dXJuIDA7CisKKyBlcnJvcjoKKwlrZnJlZShkZXYpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGN5dGhlcm1fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfY3l0aGVybSAqZGV2OworCisJZGV2ID0gdXNiX2dldF9pbnRmZGF0YSAoaW50ZXJmYWNlKTsKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRlcmZhY2UsIE5VTEwpOworCisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2JyaWdodG5lc3MpOworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl90ZW1wKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfYnV0dG9uKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfcG9ydDApOworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9wb3J0MSk7CisKKwl1c2JfcHV0X2RldihkZXYtPnVkZXYpOworCisJa2ZyZWUoZGV2KTsKKworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIkN5cHJlc3MgdGhlcm1vbWV0ZXIgbm93IGRpc2Nvbm5lY3RlZFxuIik7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgdXNiX2N5dGhlcm1faW5pdCh2b2lkKQoreworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmN5dGhlcm1fZHJpdmVyKTsKKwlpZiAocmVzdWx0KSAKKwl7CQorCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX2N5dGhlcm1fZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZjeXRoZXJtX2RyaXZlcik7Cit9CisKKworbW9kdWxlX2luaXQgKHVzYl9jeXRoZXJtX2luaXQpOworbW9kdWxlX2V4aXQgKHVzYl9jeXRoZXJtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvZW1pMjYuYyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pMjYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODE1NTIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9lbWkyNi5jCkBAIC0wLDAgKzEsMjU1IEBACisvKiAKKyAqIEVtYWdpYyBFTUkgMnw2IHVzYiBhdWRpbyBpbnRlcmZhY2UgZmlybXdhcmUgbG9hZGVyLgorICogQ29weXJpZ2h0IChDKSAyMDAyCisgKiAJVGFwaW8gTGF4c3Ry9m0gKHRhcGlvLmxheHN0cm9tQGlwdGltZS5maSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKiAKKyAqIGVtaTI2LmMsdiAxLjEzIDIwMDIvMDMvMDggMTM6MTA6MjYgdGFwaW8gRXhwCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNkZWZpbmUgTUFYX0lOVEVMX0hFWF9SRUNPUkRfTEVOR1RIIDE2Cit0eXBlZGVmIHN0cnVjdCBfSU5URUxfSEVYX1JFQ09SRAoreworCV9fdTMyCWxlbmd0aDsKKwlfX3UzMglhZGRyZXNzOworCV9fdTMyCXR5cGU7CisJX191OAlkYXRhW01BWF9JTlRFTF9IRVhfUkVDT1JEX0xFTkdUSF07Cit9IElOVEVMX0hFWF9SRUNPUkQsICpQSU5URUxfSEVYX1JFQ09SRDsKKworLyogaW5jbHVkZSBmaXJtd2FyZSAodmFyaWFibGVzKSAqLworI2luY2x1ZGUgImVtaTI2X2Z3LmgiCisKKyNkZWZpbmUgRU1JMjZfVkVORE9SX0lEIAkJMHgwODZhICAvKiBFbWFnaWMgU29mdC11bmQgSGFyZHdhcmUgR21CSCAqLworI2RlZmluZSBFTUkyNl9QUk9EVUNUX0lECQkweDAxMDAJLyogRU1JIDJ8NiB3aXRob3V0IGZpcm13YXJlICovCisjZGVmaW5lIEVNSTI2Ql9QUk9EVUNUX0lECQkweDAxMDIJLyogRU1JIDJ8NiB3aXRob3V0IGZpcm13YXJlICovCisKKyNkZWZpbmUgQU5DSE9SX0xPQURfSU5URVJOQUwJMHhBMAkvKiBWZW5kb3Igc3BlY2lmaWMgcmVxdWVzdCBjb2RlIGZvciBBbmNob3IgVXBsb2FkL0Rvd25sb2FkIChUaGlzIG9uZSBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgY29yZSkgKi8KKyNkZWZpbmUgQU5DSE9SX0xPQURfRVhURVJOQUwJMHhBMwkvKiBUaGlzIGNvbW1hbmQgaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBjb3JlLiBSZXF1aXJlcyBmaXJtd2FyZSAqLworI2RlZmluZSBBTkNIT1JfTE9BRF9GUEdBCTB4QTUJLyogVGhpcyBjb21tYW5kIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgY29yZS4gUmVxdWlyZXMgZmlybXdhcmUuIEVtYWdpYyBleHRlbnNpb24gKi8KKyNkZWZpbmUgTUFYX0lOVEVSTkFMX0FERFJFU1MJMHgxQjNGCS8qIFRoaXMgaXMgdGhlIGhpZ2hlc3QgaW50ZXJuYWwgUkFNIGFkZHJlc3MgZm9yIHRoZSBBTjIxMzFRICovCisjZGVmaW5lIENQVUNTX1JFRwkJMHg3RjkyICAvKiBFWi1VU0IgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyLiAgQml0IDAgY29udHJvbHMgODA1MSByZXNldCAqLyAKKyNkZWZpbmUgSU5URVJOQUxfUkFNKGFkZHJlc3MpICAgKGFkZHJlc3MgPD0gTUFYX0lOVEVSTkFMX0FERFJFU1MpCisKK3N0YXRpYyBpbnQgZW1pMjZfd3JpdGVtZW1vcnkoIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBhZGRyZXNzLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoLCBfX3U4IGJSZXF1ZXN0KTsKK3N0YXRpYyBpbnQgZW1pMjZfc2V0X3Jlc2V0KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIgcmVzZXRfYml0KTsKK3N0YXRpYyBpbnQgZW1pMjZfbG9hZF9maXJtd2FyZSAoc3RydWN0IHVzYl9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IGVtaTI2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgZW1pMjZfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CitzdGF0aWMgaW50IF9faW5pdCBlbWkyNl9pbml0ICh2b2lkKTsKK3N0YXRpYyB2b2lkIF9fZXhpdCBlbWkyNl9leGl0ICh2b2lkKTsKKworCisvKiB0aGFua3MgdG8gZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMgY29kZSAqLworc3RhdGljIGludCBlbWkyNl93cml0ZW1lbW9yeSAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IGFkZHJlc3MsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgsIF9fdTggcmVxdWVzdCkKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9ICBrbWFsbG9jIChsZW5ndGgsIEdGUF9LRVJORUwpOworCisJaWYgKCFidWZmZXIpIHsKKwkJZXJyKCJlbWkyNjoga21hbGxvYyglZCkgZmFpbGVkLiIsIGxlbmd0aCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1jcHkgKGJ1ZmZlciwgZGF0YSwgbGVuZ3RoKTsKKwkvKiBOb3RlOiB1c2JfY29udHJvbF9tc2cgcmV0dXJucyBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvciBvciBsZW5ndGggb2YgdGhlCisJICogCQkgZGF0YSB0aGF0IHdhcyB3cml0dGVuISAqLworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgcmVxdWVzdCwgMHg0MCwgYWRkcmVzcywgMCwgYnVmZmVyLCBsZW5ndGgsIDMwMCk7CisJa2ZyZWUgKGJ1ZmZlcik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogdGhhbmtzIHRvIGRyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jIGNvZGUgKi8KK3N0YXRpYyBpbnQgZW1pMjZfc2V0X3Jlc2V0IChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlc2V0X2JpdCkKK3sKKwlpbnQgcmVzcG9uc2U7CisJaW5mbygiJXMgLSAlZCIsIF9fRlVOQ1RJT05fXywgcmVzZXRfYml0KTsKKwkvKiBwcmludGsoS0VSTl9ERUJVRyAiJXMgLSAlZCIsIF9fRlVOQ1RJT05fXywgcmVzZXRfYml0KTsgKi8KKwlyZXNwb25zZSA9IGVtaTI2X3dyaXRlbWVtb3J5IChkZXYsIENQVUNTX1JFRywgJnJlc2V0X2JpdCwgMSwgMHhhMCk7CisJaWYgKHJlc3BvbnNlIDwgMCkgeworCQllcnIoImVtaTI2OiBzZXRfcmVzZXQgKCVkKSBmYWlsZWQiLCByZXNldF9iaXQpOworCX0KKwlyZXR1cm4gcmVzcG9uc2U7Cit9CisKKyNkZWZpbmUgRldfTE9BRF9TSVpFCQkxMDIzCisKK3N0YXRpYyBpbnQgZW1pMjZfbG9hZF9maXJtd2FyZSAoc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3sKKwlpbnQgZXJyOworCWludCBpOworCWludCBwb3MgPSAwOwkvKiBQb3NpdGlvbiBpbiBoZXggcmVjb3JkICovCisJX191MzIgYWRkcjsJLyogQWRkcmVzcyB0byB3cml0ZSAqLworCV9fdTggKmJ1ZjsKKworCWJ1ZiA9IGttYWxsb2MoRldfTE9BRF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQllcnIoICIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIC1FTk9NRU0pOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIHdyYXBlcnI7CisJfQorCisJLyogQXNzZXJ0IHJlc2V0IChzdG9wIHRoZSBDUFUgaW4gdGhlIEVNSSkgKi8KKwllcnIgPSBlbWkyNl9zZXRfcmVzZXQoZGV2LDEpOworCWlmIChlcnIgPCAwKSB7CisJCWVyciggIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJZ290byB3cmFwZXJyOworCX0KKworCS8qIDEuIFdlIG5lZWQgdG8gcHV0IHRoZSBsb2FkZXIgZm9yIHRoZSBGUEdBIGludG8gdGhlIEVaLVVTQiAqLworCWZvciAoaT0wOyBnX0xvYWRlcltpXS50eXBlID09IDA7IGkrKykgeworCQllcnIgPSBlbWkyNl93cml0ZW1lbW9yeShkZXYsIGdfTG9hZGVyW2ldLmFkZHJlc3MsIGdfTG9hZGVyW2ldLmRhdGEsIGdfTG9hZGVyW2ldLmxlbmd0aCwgQU5DSE9SX0xPQURfSU5URVJOQUwpOworCQlpZiAoZXJyIDwgMCkgeworCQkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCQlnb3RvIHdyYXBlcnI7CisJCX0KKwl9CisKKwkvKiBEZS1hc3NlcnQgcmVzZXQgKGxldCB0aGUgQ1BVIHJ1bikgKi8KKwllcnIgPSBlbWkyNl9zZXRfcmVzZXQoZGV2LDApOworCisJLyogMi4gV2UgdXBsb2FkIHRoZSBGUEdBIGZpcm13YXJlIGludG8gdGhlIEVNSQorCSAqIE5vdGU6IGNvbGxlY3QgdXAgdG8gMTAyMyAoeWVzISkgYnl0ZXMgYW5kIHNlbmQgdGhlbSB3aXRoCisJICogYSBzaW5nbGUgcmVxdWVzdC4gVGhpcyBpcyBfbXVjaF8gZmFzdGVyISAqLworCWRvIHsKKwkJaSA9IDA7CisJCWFkZHIgPSBnX2JpdHN0cmVhbVtwb3NdLmFkZHJlc3M7CisKKwkJLyogaW50ZWwgaGV4IHJlY29yZHMgYXJlIHRlcm1pbmF0ZWQgd2l0aCB0eXBlIDAgZWxlbWVudCAqLworCQl3aGlsZSAoKGdfYml0c3RyZWFtW3Bvc10udHlwZSA9PSAwKSAmJiAoaSArIGdfYml0c3RyZWFtW3Bvc10ubGVuZ3RoIDwgRldfTE9BRF9TSVpFKSkgeworCQkJbWVtY3B5KGJ1ZiArIGksIGdfYml0c3RyZWFtW3Bvc10uZGF0YSwgZ19iaXRzdHJlYW1bcG9zXS5sZW5ndGgpOworCQkJaSArPSBnX2JpdHN0cmVhbVtwb3NdLmxlbmd0aDsKKwkJCXBvcysrOworCQl9CisJCWVyciA9IGVtaTI2X3dyaXRlbWVtb3J5KGRldiwgYWRkciwgYnVmLCBpLCBBTkNIT1JfTE9BRF9GUEdBKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQkJZ290byB3cmFwZXJyOworCQl9CisJfSB3aGlsZSAoaSA+IDApOworCisJLyogQXNzZXJ0IHJlc2V0IChzdG9wIHRoZSBDUFUgaW4gdGhlIEVNSSkgKi8KKwllcnIgPSBlbWkyNl9zZXRfcmVzZXQoZGV2LDEpOworCWlmIChlcnIgPCAwKSB7CisJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQlnb3RvIHdyYXBlcnI7CisJfQorCisJLyogMy4gV2UgbmVlZCB0byBwdXQgdGhlIGxvYWRlciBmb3IgdGhlIGZpcm13YXJlIGludG8gdGhlIEVaLVVTQiAoYWdhaW4uLi4pICovCisJZm9yIChpPTA7IGdfTG9hZGVyW2ldLnR5cGUgPT0gMDsgaSsrKSB7CisJCWVyciA9IGVtaTI2X3dyaXRlbWVtb3J5KGRldiwgZ19Mb2FkZXJbaV0uYWRkcmVzcywgZ19Mb2FkZXJbaV0uZGF0YSwgZ19Mb2FkZXJbaV0ubGVuZ3RoLCBBTkNIT1JfTE9BRF9JTlRFUk5BTCk7CisJCWlmIChlcnIgPCAwKSB7CisJCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJCWdvdG8gd3JhcGVycjsKKwkJfQorCX0KKworCS8qIERlLWFzc2VydCByZXNldCAobGV0IHRoZSBDUFUgcnVuKSAqLworCWVyciA9IGVtaTI2X3NldF9yZXNldChkZXYsMCk7CisJaWYgKGVyciA8IDApIHsKKwkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCWdvdG8gd3JhcGVycjsKKwl9CisKKwkvKiA0LiBXZSBwdXQgdGhlIHBhcnQgb2YgdGhlIGZpcm13YXJlIHRoYXQgbGllcyBpbiB0aGUgZXh0ZXJuYWwgUkFNIGludG8gdGhlIEVaLVVTQiAqLworCWZvciAoaT0wOyBnX0Zpcm13YXJlW2ldLnR5cGUgPT0gMDsgaSsrKSB7CisJCWlmICghSU5URVJOQUxfUkFNKGdfRmlybXdhcmVbaV0uYWRkcmVzcykpIHsKKwkJCWVyciA9IGVtaTI2X3dyaXRlbWVtb3J5KGRldiwgZ19GaXJtd2FyZVtpXS5hZGRyZXNzLCBnX0Zpcm13YXJlW2ldLmRhdGEsIGdfRmlybXdhcmVbaV0ubGVuZ3RoLCBBTkNIT1JfTE9BRF9FWFRFUk5BTCk7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQkJCWdvdG8gd3JhcGVycjsKKwkJCX0KKwkJfQorCX0KKwkKKwkvKiBBc3NlcnQgcmVzZXQgKHN0b3AgdGhlIENQVSBpbiB0aGUgRU1JKSAqLworCWVyciA9IGVtaTI2X3NldF9yZXNldChkZXYsMSk7CisJaWYgKGVyciA8IDApIHsKKwkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCWdvdG8gd3JhcGVycjsKKwl9CisKKwlmb3IgKGk9MDsgZ19GaXJtd2FyZVtpXS50eXBlID09IDA7IGkrKykgeworCQlpZiAoSU5URVJOQUxfUkFNKGdfRmlybXdhcmVbaV0uYWRkcmVzcykpIHsKKwkJCWVyciA9IGVtaTI2X3dyaXRlbWVtb3J5KGRldiwgZ19GaXJtd2FyZVtpXS5hZGRyZXNzLCBnX0Zpcm13YXJlW2ldLmRhdGEsIGdfRmlybXdhcmVbaV0ubGVuZ3RoLCBBTkNIT1JfTE9BRF9JTlRFUk5BTCk7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQkJCWdvdG8gd3JhcGVycjsKKwkJCX0KKwkJfQorCX0KKworCS8qIERlLWFzc2VydCByZXNldCAobGV0IHRoZSBDUFUgcnVuKSAqLworCWVyciA9IGVtaTI2X3NldF9yZXNldChkZXYsMCk7CisJaWYgKGVyciA8IDApIHsKKwkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCWdvdG8gd3JhcGVycjsKKwl9CisKKwkvKiByZXR1cm4gMSB0byBmYWlsIHRoZSBkcml2ZXIgaW5pYWxpemF0aW9uCisJICogYW5kIGdpdmUgcmVhbCBkcml2ZXIgY2hhbmdlIHRvIGxvYWQgKi8KKwllcnIgPSAxOworCit3cmFwZXJyOgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShFTUkyNl9WRU5ET1JfSUQsIEVNSTI2X1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKEVNSTI2X1ZFTkRPUl9JRCwgRU1JMjZCX1BST0RVQ1RfSUQpIH0sCisJeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworCitzdGF0aWMgaW50IGVtaTI2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisKKwlpbmZvKCIlcyBzdGFydCIsIF9fRlVOQ1RJT05fXyk7IAorCisJZW1pMjZfbG9hZF9maXJtd2FyZShkZXYpOworCisJLyogZG8gbm90IHJldHVybiB0aGUgZHJpdmVyIGNvbnRleHQsIGxldCByZWFsIGF1ZGlvIGRyaXZlciBkbyB0aGF0ICovCisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyB2b2lkIGVtaTI2X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBlbWkyNl9kcml2ZXIgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQk9ICJlbWkyNiAtIGZpcm13YXJlIGxvYWRlciIsCisJLnByb2JlCQk9IGVtaTI2X3Byb2JlLAorCS5kaXNjb25uZWN0CT0gZW1pMjZfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJPSBpZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGVtaTI2X2luaXQgKHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmZW1pMjZfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGVtaTI2X2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZlbWkyNl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChlbWkyNl9pbml0KTsKK21vZHVsZV9leGl0KGVtaTI2X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJ0YXBpbyBsYXhzdHL2bSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJFbWFnaWMgRU1JIDJ8NiBmaXJtd2FyZSBsb2FkZXIuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIHZpOmFpOnN5bnRheD1jOnN3PTg6dHM9ODp0dz04MAorICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2VtaTI2X2Z3LmggYi9kcml2ZXJzL3VzYi9taXNjL2VtaTI2X2Z3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ3ZmYxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pMjZfZncuaApAQCAtMCwwICsxLDU3NzkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGZyb20gdGhyZWUgZGlmZmVyZW50IGZpbGVzLCBwcm92aWRlZCBieSBFbWFnaWMuCisgKi8KKy8qIGdlbmVyYXRlZCBGcmkgTWFyIDggMTU6MTE6MzUgRUVUIDIwMDIgKi8KKworLyoKKyAqIFRoaXMgZmlybXdhcmUgaXMgZm9yIHRoZSBFbWFnaWMgRU1JIDJ8NiBBdWRpbyBJbnRlcmZhY2UKKyAqCisgKiBUaGUgZmlybXdhcmUgY29udGFpbmVkIGhlcmVpbiBpcyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMiBFbWFnaWMKKyAqIGFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZAorICogb3IgcHVibGljIGFjY2VzcyB0byB0aGlzIGZpcm13YXJlIHdoaWNoIGlzIGEgdHJhZGUgc2VjcmV0IG9mIEVtYWdpYywKKyAqIGFuZCB3aGljaCBtYXkgbm90IGJlIHJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8KKyAqIGFueSB0aGlyZCBwYXJ0eSB3aXRob3V0IEVtYWdpYydzIHdyaXR0ZW4gY29uc2VudC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgCisgKiBpbWFnZSBhcyBwYXJ0IG9mIGEgTGludXggb3Igb3RoZXIgT3BlbiBTb3VyY2Ugb3BlcmF0aW5nIHN5c3RlbSBrZXJuZWwgCisgKiBpbiB0ZXh0IG9yIGJpbmFyeSBmb3JtIGFzIHJlcXVpcmVkLiAKKyAqCisgKiBUaGlzIGZpcm13YXJlIG1heSBub3QgYmUgbW9kaWZpZWQgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aCB0aGUKKyAqIEVtYWdpYyBFTUkgMnw2IEF1ZGlvIEludGVyZmFjZS4gRGlzdHJpYnV0aW9uIGFuZC9vciBNb2RpZmljYXRpb24gb2YKKyAqIGFueSBkcml2ZXIgd2hpY2ggaW5jbHVkZXMgdGhpcyBmaXJtd2FyZSwgaW4gd2hvbGUgb3IgaW4gcGFydCwKKyAqIHJlcXVpcmVzIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBzdGF0ZW1lbnQuCisgKi8KK3N0YXRpYyBJTlRFTF9IRVhfUkVDT1JEIGdfYml0c3RyZWFtW109eworeyAgMTYsIDB4ODAxMCwgMCwgezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhhYSwweDk5LDB4NTUsMHg2NiwweDMwLDB4MDAsMHg4MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDcgfSB9LAoreyAgMTYsIDB4ODAyMCwgMCwgezB4MzAsMHgwMSwweDYwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwYiwweDMwLDB4MDEsMHgyMCwweDAxLDB4MDAsMHg4MCwweDNmLDB4MmQgfSB9LAoreyAgMTYsIDB4ODAzMCwgMCwgezB4MzAsMHgwMCwweGMwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHg4MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDkgfSB9LAoreyAgMTYsIDB4ODA0MCwgMCwgezB4MzAsMHgwMCwweDIwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHg4MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDEgfSB9LAoreyAgMTYsIDB4ODA1MCwgMCwgezB4MzAsMHgwMCwweDQwLDB4MDAsMHg1MCwweDAwLDB4M2UsMHgwNCwweDA4LDB4MTIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODA2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODA3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODA4MCwgMCwgezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODA5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4ODQgfSB9LAoreyAgMTYsIDB4ODBiMCwgMCwgezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODBlMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODExMCwgMCwgezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODE0MCwgMCwgezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE3MCwgMCwgezB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODQgfSB9LAoreyAgMTYsIDB4ODFhMCwgMCwgezB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGY3LDB4MTAsMHgwMSwweDE0LDB4MDAsMHgyNSwweDAwLDB4MDUgfSB9LAoreyAgMTYsIDB4ODFiMCwgMCwgezB4NDAsMHgwMSwweDUwLDB4MDAsMHg5NCwweDAwLDB4MTUsMHgwMCwweDA3LDB4NDAsMHgwMSwweGQwLDB4MDAsMHg5NCwweDAwLDB4MjUgfSB9LAoreyAgMTYsIDB4ODFjMCwgMCwgezB4ODAsMHgwMSwweDYwLDB4MDIsMHhkOCwweDAwLDB4ZjYsMHgwMCwweDJmLDB4ODAsMHgwMiwweGUwLDB4MDQsMHhkOCwweDM3LDB4NDQgfSB9LAoreyAgMTYsIDB4ODFkMCwgMCwgezB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmMiwweDAwLDB4Y2MsMHg5MCwweDM5LDB4MjAgfSB9LAoreyAgMTYsIDB4ODFlMCwgMCwgezB4MGQsMHg5OCwweDAzLDB4ZDIsMHgwMCwweGU3LDB4ODAsMHgzNywweDA0LDB4MGUsMHhmMSwweDgzLDB4N2UsMHgwMCwweGRmLDB4OTAgfSB9LAoreyAgMTYsIDB4ODFmMCwgMCwgezB4MzEsMHhlNCwweDhmLDB4NzksMHgwMywweDdjLDB4MjAsMHhkZiwweDIyLDB4MzMsMHhjMCwweDBjLDB4ZjAsMHgyMiwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODIwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHg2MiwweDAwLDB4ODAsMHgyNCwweDIyLDB4MjAgfSB9LAoreyAgMTYsIDB4ODIxMCwgMCwgezB4MDgsMHg5OCwweDEyLDB4ZTIsMHgwMCwweDhiLDB4ODEsMHgyMCwweDk0LDB4MDgsMHg3NCwweDAyLDB4MmUsMHgwMCwweDhhLDB4MDEgfSB9LAoreyAgMTYsIDB4ODIyMCwgMCwgezB4MjIsMHhjOCwweDA4LDB4OTIsMHgwMiwweDNkLDB4ODAsMHg4YiwweDYwLDB4MjIsMHg4MCwweDA4LDB4YjAsMHgwMiwweDIwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODIzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjOCwweDAwLDB4YTAsMHgwMCwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI0MCwgMCwgezB4MGIsMHgxMCwweDAyLDB4YzAsMHgwMCwweGExLDB4MDAsMHgyNCwweDA5LDB4NGEsMHgzMiwweDAyLDB4NDgsMHgwMCwweGIxLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI1MCwgMCwgezB4NjIsMHhjMCwweDA5LDB4YTAsMHg0NiwweGNjLDB4MjQsMHg5MywweDQ5LDB4MmEsMHg4MCwweDQ4LDB4MzAsMHgyMiwweDYyLDB4MDEgfSB9LAoreyAgMTYsIDB4ODI2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhOCwweDEyLDB4YTgsMHgwMCwweDIyLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI3MCwgMCwgezB4MDgsMHg5MCwweDAyLDB4ZTAsMHgwMCwweDg5LDB4ODAsMHgyMiwweDQ0LDB4MDgsMHhiMCwweDEyLDB4YTgsMHgwMCwweGE5LDB4NDAgfSB9LAoreyAgMTYsIDB4ODI4MCwgMCwgezB4MjIsMHhjMCwweDA4LDB4OTAsMHg4MiwweGFjLDB4MDAsMHg5YiwweDA0LDB4MmEsMHhjNCwweDA4LDB4YjAsMHgwMiwweDcwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODI5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTQsMHg4NCwweDAwLDB4ZTksMHg4MCwweGIyLDB4NjQgfSB9LAoreyAgMTYsIDB4ODJhMCwgMCwgezB4NGQsMHhhMCwweDAzLDB4ZWEsMHgyMCwweGU5LDB4YzAsMHgzNiwweDQwLDB4MGUsMHhiMCwweDAzLDB4NDQsMHgwMCwweGZiLDB4OTAgfSB9LAoreyAgMTYsIDB4ODJiMCwgMCwgezB4YjIsMHg4OCwweDBkLDB4YmMsMHgwMywweGVjLDB4MDgsMHg1YiwweDAwLDB4MzgsMHg2MCwweDJjLDB4YjAsMHg2MywweDQwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODJjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiNCwweDI2LDB4ZGQsMHg5MCwweDM3LDB4NDAgfSB9LAoreyAgMTYsIDB4ODJkMCwgMCwgezB4NGYsMHhlMCwweDEzLDB4ZjIsMHg4MCwweGZkLDB4MDAsMHgzZCwweGEwLDB4MGQsMHg3MCwweDAzLDB4NzUsMHgwMCwweDVlLDB4MDAgfSB9LAoreyAgMTYsIDB4ODJlMCwgMCwgezB4M2YsMHhhNCwweDBkLDB4ZjksMHgwMywweDVjLDB4MTAsMHhlYiwweDAwLDB4MzcsMHgyMCwweDBmLDB4MzAsMHgwMywweGI4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODJmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZTksMHg4MCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4ODMwMCwgMCwgezB4MGMsMHhhMSwweDgzLDB4ZTgsMHgwMCwweGU5LDB4MDAsMHgzMiwweDQyLDB4MGUsMHhiMCwweDAzLDB4YWMsMHg0OCwweGU5LDB4MDAgfSB9LAoreyAgMTYsIDB4ODMxMCwgMCwgezB4M2EsMHg4MCwweDBlLDB4YTQsMHgwMywweGVjLDB4MDAsMHhlYiwweDAwLDB4YjIsMHgwMywweDBlLDB4YjAsMHgwYiwweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODMyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyZSwweDgwLDB4ODksMHhkMSwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4ODMzMCwgMCwgezB4MDgsMHhhMCwweDAyLDB4YzAsMHgwMCwweDgxLDB4ODAsMHgyMiwweDU4LDB4MDgsMHhmNSwweDAyLDB4MmYsMHg0MCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4ODM0MCwgMCwgezB4MjAsMHhjMCwweDA4LDB4MzAsMHg0MywweDdjLDB4MDAsMHg4NywweDAwLDB4MjIsMHg0MCwweDA4LDB4ZjAsMHgwMiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4ODM1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0MiwweDAxLDB4OWEsMHg0NCwweDI4LDB4YTIgfSB9LAoreyAgMTYsIDB4ODM2MCwgMCwgezB4MDgsMHgxOCwweDAyLDB4YzAsMHg4MCwweGExLDB4ODAsMHhhMCwweDAwLDB4MDgsMHgzMCwweDAyLDB4OGUsMHgwMCwweGFiLDB4MDAgfSB9LAoreyAgMTYsIDB4ODM3MCwgMCwgezB4MmMsMHg0MCwweDBhLDB4MzAsMHgwMiwweDBjLDB4MDAsMHhhMywweDAwLDB4MjAsMHg0NCwweDBhLDB4MzAsMHgwMiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODM4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MDEsMHgzMiwweDAwLDB4OTYsMHg4MiwweDJiLDB4YTIgfSB9LAoreyAgMTYsIDB4ODM5MCwgMCwgezB4ODgsMHg1YSwweDAyLDB4ZjIsMHgwMCwweDA1LDB4ODAsMHgyOSwweGEwLDB4MDgsMHg3OCwweDQyLDB4YmUsMHgwMCwweDhlLDB4ODQgfSB9LAoreyAgMTYsIDB4ODNhMCwgMCwgezB4MmYsMHg2MSwweDBhLDB4ZDgsMHgwMiwweDRlLDB4MTAsMHhhNywweDgwLDB4MjAsMHgyOCwweDA4LDB4NzgsMHgwMiwweDE4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODNiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwOCwweDAwLDB4ZjIsMHgyNCwweDM4LDB4ODAgfSB9LAoreyAgMTYsIDB4ODNjMCwgMCwgezB4MmMsMHgxYSwweDAzLDB4YzQsMHgwMCwweGUwLDB4NTgsMHhhMCwweDgwLDB4MmUsMHgzMCwweDAzLDB4ODgsMHg0MSwweGUzLDB4MDIgfSB9LAoreyAgMTYsIDB4ODNkMCwgMCwgezB4M2MsMHg0MCwweDA2LDB4MjAsMHgwMywweDhjLDB4MDAsMHhlMywweDAwLDB4MTAsMHgwMCwweDBlLDB4MzEsMHg0MywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4ODNlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHg5OCwweDAwLDB4ZWUsMHgwMSwweDM3LDB4ODQgfSB9LAoreyAgMTYsIDB4ODNmMCwgMCwgezB4OWYsMHhkOSwweDAzLDB4ZjAsMHg0OCwweGZkLDB4MTAsMHgzNywweGMwLDB4MDcsMHhiMCwweDAzLDB4NWMsMHgwMCwweGY2LDB4MTAgfSB9LAoreyAgMTYsIDB4ODQwMCwgMCwgezB4MzMsMHhjMCwweDBkLDB4ZTEsMHgwMywweGVkLDB4MjAsMHhkZiwweDEwLDB4M2YsMHg0OCwweDBmLDB4ZjAsMHgyMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4ODQxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlNCwweDAyLDB4Y2IsMHg4MCwweDMwLDB4YzAgfSB9LAoreyAgMTYsIDB4ODQyMCwgMCwgezB4MGMsMHhhMCwweDAzLDB4ZTIsMHgwMiwweGM5LDB4MDAsMHgzYSwweDQwLDB4MGQsMHhiNiwweDAzLDB4NjQsMHgwMCwweGViLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQzMCwgMCwgezB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGVkLDB4MDAsMHhmYiwweDAxLDB4M2UsMHhlMCwweDBjLDB4YjAsMHgwMiwweGVhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQ0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5NCwweDAwLDB4ODcsMHgwMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4ODQ1MCwgMCwgezB4MjgsMHg2MCwweDAyLDB4ZDAsMHgwMCwweDg1LDB4MDAsMHgyZCwweDgwLDB4NDgsMHhmMCwweDgyLDB4MWMsMHgwMCwweGI3LDB4MDAgfSB9LAoreyAgMTYsIDB4ODQ2MCwgMCwgezB4MmQsMHgwMCwweDBiLDB4NTAsMHgwMiwweGRjLDB4MDAsMHhiNywweGEwLDB4MmYsMHg4MCwweDI4LDB4N2EsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4ODQ3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMxLDB4MDAsMHhiZSwweDAwLDB4ODcsMHg4MCwweDIxLDB4ZTAgfSB9LAoreyAgMTYsIDB4ODQ4MCwgMCwgezB4MjgsMHg2OCwweDAyLDB4ZDcsMHgwMCwweDg0LDB4ODAsMHgyZCwweGUwLDB4NDksMHg3OSwweDA2LDB4NTMsMHgwOSwweGI1LDB4ODAgfSB9LAoreyAgMTYsIDB4ODQ5MCwgMCwgezB4MmQsMHhlMiwweDBiLDB4NzgsMHgwMiwweGRlLDB4ODAsMHhiNywweDkwLDB4MmQsMHhiMCwweDA4LDB4NzksMHgwMiwweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODRhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDEwLDB4ODMsMHgwMSwweDI4LDB4YzggfSB9LAoreyAgMTYsIDB4ODRiMCwgMCwgezB4MDgsMHgyMCwweDAyLDB4YzIsMHgwNiwweDgxLDB4MDAsMHgyYywweGM4LDB4ODgsMHgzMCwweDYyLDB4MGUsMHgyMSwweGIzLDB4YTAgfSB9LAoreyAgMTYsIDB4ODRjMCwgMCwgezB4MmMsMHhjMSwweDBiLDB4YjYsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwLDB4MmMsMHhlMCwweDA4LDB4MzAsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4ODRkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4Y2EsMHg0MCwweGIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ODRlMCwgMCwgezB4MGMsMHgyYywweDAyLDB4ZjgsMHgwMCwweGM2LDB4MjAsMHgzZiwweDkwLDB4MGQsMHhhMCwweDAzLDB4N2IsMHgwMSwweGVlLDB4ZTAgfSB9LAoreyAgMTYsIDB4ODRmMCwgMCwgezB4M2YsMHhiNCwweDBmLDB4ZWMsMHgwMywweGU4LDB4MDAsMHhmYSwweDAwLDB4M2YsMHhhMCwweDBjLDB4YTAsMHgwMywweGZhLDB4MDQgfSB9LAoreyAgMTYsIDB4ODUwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMywweDAwLDB4ZjgsMHgwOSwweDI2LDB4MDAgfSB9LAoreyAgMTYsIDB4ODUxMCwgMCwgezB4MGYsMHhjMSwweDgzLDB4ZTAsMHgxMCwweGY4LDB4NDAsMHgzYywweDAwLDB4MGYsMHg4MCwweDAzLDB4ZTAsMHgwMSwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODUyMCwgMCwgezB4M2UsMHgwMCwweDBmLDB4ODEsMHgwMywweGUwLDB4MDQsMHhmOCwweDAwLDB4M2UsMHgxMCwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4ODUzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAyLDB4YzksMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ODU0MCwgMCwgezB4NGYsMHg5MCwweDYzLDB4MjYsMHg4NCwweDM5LDB4MDIsMHhiMiwweDQwLDB4MGMsMHg5MSwweDAzLDB4MjQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ODU1MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweDI0LDB4MDAsMHhmMSwweDAwLDB4M2EsMHg0NCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDQgfSB9LAoreyAgMTYsIDB4ODU2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg0NSwweDAwLDB4ODksMHg0MCwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4ODU3MCwgMCwgezB4MDgsMHg5MiwweDBhLDB4MjQsMHgwMCwweGI5LDB4MzEsMHgyMiwweDYwLDB4ODgsMHg5NCwweDhhLDB4MjQsMHgyMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4ODU4MCwgMCwgezB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweDI0LDB4MDAsMHhiOSwweDAwLDB4MjIsMHg2OCwweDBiLDB4OTAsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODU5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweGEwLDB4OGQsMHg4NCwweDJmLDB4NDAgfSB9LAoreyAgMTYsIDB4ODVhMCwgMCwgezB4MGIsMHhkMSwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyMiwweDRhLDB4MDgsMHgxMCwweDAyLDB4MmMsMHg0MCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4ODViMCwgMCwgezB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweDI0LDB4MDAsMHhiOSwweDAwLDB4MmEsMHg0MCwweDBiLDB4OTAsMHgwMiwweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4ODVjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgxNCwweDAwLDB4ODUsMHg4MCwweDJkLDB4NDAgfSB9LAoreyAgMTYsIDB4ODVkMCwgMCwgezB4MDgsMHg1MCwweDAyLDB4MDQsMHgwYywweGI5LDB4MDAsMHhhMCwweDUwLDB4MDgsMHgxNCwweDIyLDB4MDQsMHgwMCwweGIxLDB4MDAgfSB9LAoreyAgMTYsIDB4ODVlMCwgMCwgezB4MmMsMHg0MCwweDBiLDB4MTAsMHgwMiwweDA0LDB4MDAsMHhiMSwweDI4LDB4MjAsMHg0YSwweDBiLDB4MTMsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ODVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4YzAsMHg1MCwweDNlLDB4ODAgfSB9LAoreyAgMTYsIDB4ODYwMCwgMCwgezB4MGYsMHhjMCwweDQzLDB4MjAsMHgwMCwweGY4LDB4MDAsMHgzMCwweDAwLDB4MmMsMHg4MCwweDIzLDB4MjAsMHgwMCwweGY4LDB4NTEgfSB9LAoreyAgMTYsIDB4ODYxMCwgMCwgezB4M2UsMHgxNCwweDhmLDB4ODUsMHgwYiwweDIxLDB4NDAsMHhmOCwweDcwLDB4M2EsMHgwOCwweDBmLDB4ODQsMHg4MywweGVlLDB4MDMgfSB9LAoreyAgMTYsIDB4ODYyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhjNCwweDAwLDB4ZjksMHgwNCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ODYzMCwgMCwgezB4MGYsMHg5MCwweDIzLDB4ZDQsMHgwMCwweGZkLDB4MDAsMHgzZiwweDUwLDB4MGYsMHg5NCwweDAzLDB4ZjQsMHgwNCwweGZkLDB4MDAgfSB9LAoreyAgMTYsIDB4ODY0MCwgMCwgezB4M2YsMHg0MSwweDhmLDB4ZDAsMHg0MywweGU1LDB4MGMsMHhmOSwweDAyLDB4M2YsMHg0YSwweDBmLDB4OTIsMHgwMywweGU2LDB4MDIgfSB9LAoreyAgMTYsIDB4ODY1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhkNCwweDAxLDB4ZmQsMHgwMCwweDNkLDB4NDAgfSB9LAoreyAgMTYsIDB4ODY2MCwgMCwgezB4MGMsMHhkMCwweDEzLDB4ZjQsMHgwMCwweGQ1LDB4MDAsMHgzMywweDZhLDB4MWMsMHhkYywweDgzLDB4MzQsMHgwMCwweGQxLDB4MDQgfSB9LAoreyAgMTYsIDB4ODY3MCwgMCwgezB4M2UsMHg1MCwweDBjLDB4OTEsMHgwMywweGU2LDB4YzAsMHhkZCwweGIwLDB4MzMsMHg2YSwweDJjLDB4OWMsMHg4MywweGU2LDB4MDAgfSB9LAoreyAgMTYsIDB4ODY4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMCwweDA5LDB4ZjgsMHg4MCwweDJlLDB4MDAgfSB9LAoreyAgMTYsIDB4ODY5MCwgMCwgezB4ODgsMHg4MCwweDAwLDB4ZTgsMHgwMCwweGJhLDB4MDAsMHgyMiwweGIwLDB4MDgsMHg4ZSwweDAyLDB4MjgsMHgwMCwweDg4LDB4YTggfSB9LAoreyAgMTYsIDB4ODZhMCwgMCwgezB4MjYsMHgyOCwweDA4LDB4OGEsMHgyMiwweGUyLDB4MDAsMHg4OCwweGU0LDB4MjIsMHgzMCwweDA4LDB4OGMsMHgwMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4ODZiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4YjEsMHgyOCwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4ODZjMCwgMCwgezB4MDgsMHgxMCwweDAyLDB4YzQsMHgwMCwweDk5LDB4MDAsMHgyMCwweDQyLDB4NDgsMHgxMCwweDAyLDB4NjQsMHgwMSwweDkxLDB4ODAgfSB9LAoreyAgMTYsIDB4ODZkMCwgMCwgezB4MmMsMHg0OCwweDA4LDB4MTAsMHgwMiwweGM0LDB4YzAsMHg4MSwweDQwLDB4MjAsMHg0YSwweDA4LDB4MTIsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ODZlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNCwweDk0LDB4YTksMHgwMiwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4ODZmMCwgMCwgezB4MGEsMHg5MCwweDAyLDB4NjQsMHgwMCwweGI5LDB4MDAsMHg4MiwweDYwLDB4MDgsMHg5MCwweDAyLDB4NjYsMHgwMCwweDg5LDB4MTAgfSB9LAoreyAgMTYsIDB4ODcwMCwgMCwgezB4MjQsMHg2MiwweDA4LDB4OTAsMHgwMiwweGU0LDB4MDAsMHg4OSwweDAyLDB4MjIsMHg0MCwweDE4LDB4OTAsMHgwMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4ODcxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNiwweDAwLDB4YjksMHgwNCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ODcyMCwgMCwgezB4MGMsMHg5MCwweDEzLDB4ZTQsMHgwMCwweGQxLDB4YzAsMHgxMiwweDUwLDB4MjgsMHg5MCwweDAzLDB4NDQsMHgwMCwweGQ5LDB4MDAgfSB9LAoreyAgMTYsIDB4ODczMCwgMCwgezB4M2UsMHg0MCwweDI4LDB4OTIsMHgwMywweGU0LDB4MDIsMHhkOSwweDAwLDB4MzIsMHg0MiwweDhjLDB4OTAsMHgxMiwweGU4LDB4MDQgfSB9LAoreyAgMTYsIDB4ODc0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNiwweDIwLDB4ZjksMHgwMCwweDNlLDB4NDEgfSB9LAoreyAgMTYsIDB4ODc1MCwgMCwgezB4MmQsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MjAsMHgzZSwweDQwLDB4NGYsMHg5MCwweDAxLDB4YTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ODc2MCwgMCwgezB4MzYsMHg0MCwweDhmLDB4OTIsMHgwNywweGU0LDB4MDAsMHhmMSwweDAwLDB4YmUsMHg0MCwweDBmLDB4OTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODc3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4YzgsMHgwMCwweDNlLDB4MjAgfSB9LAoreyAgMTYsIDB4ODc4MCwgMCwgezB4MGMsMHg4MCwweDAzLDB4ZTAsMHg0MCwweGY4LDB4MDAsMHgzNiwweDEyLDB4MmMsMHgwMCwweDAzLDB4ZTAsMHhjMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODc5MCwgMCwgezB4MzIsMHgxMCwweDBkLDB4ODQsMHgwMywweGEwLDB4MDAsMHhmOCwweDAyLDB4M2UsMHgwOCwweDBmLDB4ODAsMHgwMCwweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4ODdhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgzYSwweDkwLDB4OGUsMHgwMCwweDJkLDB4YTAgfSB9LAoreyAgMTYsIDB4ODdiMCwgMCwgezB4ODAsMHhlOCwweDAyLDB4ZmEsMHgwMCwweGJlLDB4NDAsMHgyMywweDgwLDB4MDgsMHhlOCwweDAyLDB4ZmEsMHgwMCwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdjMCwgMCwgezB4MzYsMHg4MCwweDA4LDB4YTAsMHgwMiwweGU4LDB4MDAsMHhiYSwweDAwLDB4MmYsMHg4MCwweDBiLDB4YTAsMHgwMywweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0NiwweDAyLDB4ODMsMHgwMCwweDJjLDB4ODAgfSB9LAoreyAgMTYsIDB4ODdlMCwgMCwgezB4MDgsMHgyMiwweDQyLDB4YzYsMHg4MCwweGIxLDB4NjAsMHgyZSwweGY0LDB4MDgsMHgzOCwweDIyLDB4Y2UsMHgwMCwweGEzLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdmMCwgMCwgezB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweGFjLDB4MDAsMHhiMSwweDAwLDB4MmUsMHg0MCwweDBiLDB4MzAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODgwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxZSwweDAyLDB4ODUsMHgwMSwweDJkLDB4YzIgfSB9LAoreyAgMTYsIDB4ODgxMCwgMCwgezB4YTgsMHg0NCwweDAyLDB4ZDQsMHgwMCwweGJkLDB4MDEsMHgyOSwweDQwLDB4MTgsMHg2OCwweGQyLDB4ZGMsMHgwMCwweDhmLDB4ODAgfSB9LAoreyAgMTYsIDB4ODgyMCwgMCwgezB4MjUsMHhjYywweDI4LDB4NzMsMHg0MiwweGRjLDB4ODAsMHhiNSwweDMwLDB4MmQsMHhjMCwweDFiLDB4NzIsMHgwMiwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODgzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDA0LDB4YzYsMHg4MiwweDNkLDB4ZTAgfSB9LAoreyAgMTYsIDB4ODg0MCwgMCwgezB4MGMsMHg0OCwweDEyLDB4ZDYsMHgxMCwweGY1LDB4ODAsMHgzYywweGEwLDB4MGMsMHg3MCwweDAzLDB4ZGUsMHgwMCwweGU3LDB4OTAgfSB9LAoreyAgMTYsIDB4ODg1MCwgMCwgezB4MjMsMHhlYSwweDA0LDB4N2EsMHgwMywweDllLDB4MDAsMHhmNSwweDgwLDB4M2QsMHhlMCwweDBmLDB4N2EsMHgwMywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4ODg2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MGQsMHhhYywweDAwLDB4OWMsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4ODg3MCwgMCwgezB4MGYsMHg4MCwweDAzLDB4ZTQsMHgxMCwweGY5LDB4MDAsMHgzNiwweDAxLDB4MGYsMHhhMCwweDAzLDB4YzAsMHgwMCwweGViLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg4MCwgMCwgezB4M2UsMHhkOCwweDRlLDB4YjAsMHg4MywweGVjLDB4MDAsMHhmOSwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjQsMHg0MywweDgyLDB4MDYgfSB9LAoreyAgMTYsIDB4ODg5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhkZSwweDAwLDB4Y2YsMHg4NCwweDMxLDB4ZTAgfSB9LAoreyAgMTYsIDB4ODhhMCwgMCwgezB4MGUsMHhjOCwweDQzLDB4ZDYsMHgwMCwweGNkLDB4ODAsMHgzMywweGUwLDB4Y2QsMHhkOSwweDAzLDB4M2EsMHgwMCwweGZmLDB4ODggfSB9LAoreyAgMTYsIDB4ODhiMCwgMCwgezB4MzMsMHhlMCwweDBmLDB4ZjksMHgxMywweGZlLDB4MjQsMHhmZCwweDgwLDB4M2YsMHgyMCwweDBjLDB4ZjYsMHg4MywweDEwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODhjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDAwLDB4ODUsMHgwMCwweDIxLDB4YzQgfSB9LAoreyAgMTYsIDB4ODhkMCwgMCwgezB4MjgsMHg0MCwweDgyLDB4ZDAsMHgwMCwweGQ1LDB4MDAsMHgyMywweDgwLDB4NDgsMHhjOSwweDAyLDB4MWMsMHgwMCwweGI3LDB4MDAgfSB9LAoreyAgMTYsIDB4ODhlMCwgMCwgezB4MjEsMHhjMCwweDBiLDB4NzEsMHgwMiwweGRlLDB4ODAsMHhiNSwweDEwLDB4MmQsMHhjMCwweDI4LDB4ZjAsMHgwMiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4ODhmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDAsMHg5YywweDAwLDB4OTYsMHgwMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4ODkwMCwgMCwgezB4MGEsMHg0MSwweDAyLDB4ZjUsMHg0MCwweDhkLDB4MDAsMHgyMSwweDQwLDB4MDksMHg1MiwweDAyLDB4OTgsMHgyMCwweGI3LDB4MDAgfSB9LAoreyAgMTYsIDB4ODkxMCwgMCwgezB4MjEsMHhjMCwweDBiLDB4NzAsMHgwNiwweGRjLDB4ODAsMHhiNSwweDAwLDB4MmQsMHhjMCwweDA4LDB4NzAsMHgwMiwweDA0LDB4MDAgfSB9LAoreyAgMTYsIDB4ODkyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MTQsMHhjYywweDEwLDB4OTgsMHgwMCwweDAwLDB4YzAgfSB9LAoreyAgMTYsIDB4ODkzMCwgMCwgezB4ODgsMHgwNCwweDgyLDB4YzAsMHgwMCwweDkxLDB4MDQsMHgyMCwweDAzLDB4MDksMHgwMCwweDAyLDB4OGEsMHgwMCwweGIzLDB4MGEgfSB9LAoreyAgMTYsIDB4ODk0MCwgMCwgezB4MjAsMHhjNCwweDhiLDB4MzQsMHgwMiwweGNjLDB4MDAsMHhiOSwweDAwLDB4MmMsMHhjMCwweDAwLDB4MzAsMHgwMiwweDE4LDB4MDQgfSB9LAoreyAgMTYsIDB4ODk1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGY4LDB4MTUsMHhhYywweDAwLDB4ZGIsMHgwMCwweGIwLDB4YzAgfSB9LAoreyAgMTYsIDB4ODk2MCwgMCwgezB4MGUsMHg5YywweDAyLDB4YzUsMHgwMCwweGMxLDB4MTAsMHhiMiwweGMwLDB4MGQsMHhiMCwweDBiLDB4YTcsMHgwOCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4ODk3MCwgMCwgezB4YjMsMHhjMCwweDBmLDB4ZmEsMHgwMywweGZjLDB4MDAsMHhmZCwweDAwLDB4M2UsMHhkNCwweDBjLDB4ZjAsMHgwYiwweDJlLDB4MDQgfSB9LAoreyAgMTYsIDB4ODk4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlYywweDA0LDB4ZWQsMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ODk5MCwgMCwgezB4MGYsMHg4NCwweDAzLDB4ZTUsMHg0MCwweGY5LDB4NDAsMHgzZSwweDYwLDB4Y2UsMHhiNCwweDQzLDB4NjQsMHgwMCwweGZiLDB4ODAgfSB9LAoreyAgMTYsIDB4ODlhMCwgMCwgezB4M2UsMHhjMiwweDBmLDB4YjAsMHgxMywweGVjLDB4MDAsMHhmOSwweDAyLDB4M2UsMHhjMCwweDRmLDB4YjAsMHgwMywweGUxLDB4MDAgfSB9LAoreyAgMTYsIDB4ODliMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkwLDB4MTAsMHhmZiwweDAwLDB4Y2UsMHgwMCwweDMzLDB4YzAgfSB9LAoreyAgMTYsIDB4ODljMCwgMCwgezB4MGUsMHhjMCwweDA3LDB4NzQsMHgwNCwweGVjLDB4MDAsMHgxMSwweDgwLDB4MGMsMHhjYSwweDAzLDB4ZmUsMHg2MCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4ODlkMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjAsMHg4MywweDNjLDB4MDAsMHhkZCwweDAwLDB4YjMsMHg1MCwweDJjLDB4ZjAsMHgwMywweDIwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODllMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDAsMHg0YywweDA0LDB4OGIsMHgwYiwweDIyLDB4NzAgfSB9LAoreyAgMTYsIDB4ODlmMCwgMCwgezB4MDgsMHgwOCwweDAzLDB4NjcsMHgyMCwweDhhLDB4ODgsMHhhMiwweDAwLDB4MjgsMHg4NCwweDAyLDB4ZTcsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4OGEwMCwgMCwgezB4M2UsMHhjMCwweDBiLDB4YjAsMHgwMiwweDJjLDB4MDAsMHhiOSwweDAwLDB4MjIsMHg2MSwweDA4LDB4YjAsMHgwMywweDYwLDB4NDAgfSB9LAoreyAgMTYsIDB4OGExMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OGIsMHgyMCwweDIyLDB4ZTIgfSB9LAoreyAgMTYsIDB4OGEyMCwgMCwgezB4MGEsMHg4YywweDAyLDB4MjYsMHgwMCwweGE5LDB4ODAsMHgyYSwweGMwLDB4MDgsMHhiNCwweDQyLDB4ZWQsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4OGEzMCwgMCwgezB4MmUsMHhjMCwweDBiLDB4MzAsMHgwMiwweDJjLDB4MDAsMHhiOSwweDAwLDB4MjAsMHg4MCwweDA4LDB4MzAsMHgwMiwweDYwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGE0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwZSwweDAxLDB4ODEsMHgwMCwweGEwLDB4YzAgfSB9LAoreyAgMTYsIDB4OGE1MCwgMCwgezB4MDgsMHg4MSwweDAyLDB4NDQsMHgwMCwweDgxLDB4MDAsMHgyOCwweDgxLDB4MDgsMHgzMiwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4OGE2MCwgMCwgezB4MjgsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBjLDB4ODAsMHhiMSwweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgxMiwweDQyLDB4MDEgfSB9LAoreyAgMTYsIDB4OGE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MGQsMHg2YywweDAwLDB4YzIsMHgwMSwweDMyLDB4YzAgfSB9LAoreyAgMTYsIDB4OGE4MCwgMCwgezB4MmUsMHg4MCwweDE2LDB4MmMsMHgwOCwweGU5LDB4MDAsMHgzYSwweDQwLDB4MGMsMHg4MCwweDAzLDB4ZWMsMHgwMCwweGY3LDB4MDAgfSB9LAoreyAgMTYsIDB4OGE5MCwgMCwgezB4MmYsMHhjMCwweDBmLDB4ZjAsMHgwYiwweDJjLDB4MDAsMHhkOSwweDAwLDB4MzAsMHg0MCwweDBjLDB4ZjAsMHgwMywweDYwLDB4MDMgfSB9LAoreyAgMTYsIDB4OGFhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MGQsMHhmOCwweDA4LDB4ZmYsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4OGFiMCwgMCwgezB4MGYsMHhjMiwweDE3LDB4ZmMsMHgwMCwweGY3LDB4MDAsMHgzNywweDAwLDB4MGYsMHg4NCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4OGFjMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGVkLDB4MDAsMHhmZCwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZjAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4OGFkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDAwLDB4Y2YsMHgzMCwweDE3LDB4NDggfSB9LAoreyAgMTYsIDB4OGFlMCwgMCwgezB4MGMsMHg1OSwweDAzLDB4YjksMHgwMCwweGRmLDB4MjgsMHgzNSwweDI0LDB4MGQsMHg4MiwweGEzLDB4N2MsMHg4MCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4OGFmMCwgMCwgezB4M2YsMHhjOCwweDBmLDB4ZjIsMHgwMywweGU0LDB4YTAsMHhlZiwweDgwLDB4M2YsMHhlMSwweDhjLDB4ZDgsMHg0MywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGIwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlZCwweDQ4LDB4ODksMHgzNCwweGEzLDB4NzAgfSB9LAoreyAgMTYsIDB4OGIxMCwgMCwgezB4MjgsMHhiMCwweDIzLDB4NjAsMHgwMCwweDhiLDB4YzAsMHgyMiwweDQwLDB4MDgsMHhiNCwweDgyLDB4MmYsMHg0MCwweGJmLDB4ZDEgfSB9LAoreyAgMTYsIDB4OGIyMCwgMCwgezB4NmYsMHhmNCwweDhlLDB4YmQsMHgwMiwweGU3LDB4MDAsMHhiYiwweDgwLDB4M2EsMHhlMCwweDA4LDB4OTgsMHgwYSwweDI4LDB4MDQgfSB9LAoreyAgMTYsIDB4OGIzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjNCwweGIwLDB4OTEsMHgwMCwweGE4LDB4NTAgfSB9LAoreyAgMTYsIDB4OGI0MCwgMCwgezB4MDgsMHhiMiwweDAyLDB4YzgsMHg4NCwweDkzLDB4MDAsMHgyNCwweDQ5LDB4MGIsMHgwMiwweDAyLDB4NGMsMHgwMCwweGIzLDB4MDQgfSB9LAoreyAgMTYsIDB4OGI1MCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHg0MiwweDg0LDB4MDAsMHhiMywweDAwLDB4MmUsMHgwMCwweDBhLDB4YjAsMHgxMiwweDIyLDB4MDEgfSB9LAoreyAgMTYsIDB4OGI2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTEsMHhhYywweDAyLDB4OTksMHgxOCwweDJhLDB4NDQgfSB9LAoreyAgMTYsIDB4OGI3MCwgMCwgezB4MDgsMHhiOCwweDgyLDB4YTIsMHgwMSwweGJiLDB4MDAsMHgyOCwweDYwLDB4MGEsMHhhMCwweDEyLDB4NmMsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4OGI4MCwgMCwgezB4NmUsMHhjMCwweDBhLDB4YjAsMHgwMiwweGU0LDB4MDAsMHhiYiwweDAwLDB4MmEsMHgwMCwweDJhLDB4YjAsMHgwMiwweDM4LDB4MDQgfSB9LAoreyAgMTYsIDB4OGI5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTEsMHhlNCwweDA4LDB4ZGEsMHhjMCwweDNhLDB4NjAgfSB9LAoreyAgMTYsIDB4OGJhMCwgMCwgezB4MGMsMHgxOCwweDBhLDB4ZWIsMHgwNCwweGRiLDB4MDAsMHgzNiwweGUwLDB4MDcsMHg4NSwweDgzLDB4NmMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OGJiMCwgMCwgezB4MmUsMHhjMCwweDBmLDB4YjAsMHg0MywweGU0LDB4MDAsMHhlYiwweDAwLDB4M2UsMHg4OCwweDBlLDB4MTgsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4OGJjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4NDEsMHg5YywweDEwLDB4ZTksMHgwMCwweDM3LDB4NjAgfSB9LAoreyAgMTYsIDB4OGJkMCwgMCwgezB4ODcsMHhmMCwweDE3LDB4NzAsMHgwMCwweGNmLDB4MDEsMHgzNywweGMwLDB4NGMsMHg5OCwweDAzLDB4YmMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OGJlMCwgMCwgezB4M2YsMHhjMiwweDBmLDB4ZjAsMHgwMywweGU0LDB4MDAsMHhmZiwweDQwLDB4M2YsMHhlNCwweDBkLDB4ZDksMHgwMywweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGJmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhNCwweDAwLDB4ZjQsMHgwMCwweDMwLDB4NDAgfSB9LAoreyAgMTYsIDB4OGMwMCwgMCwgezB4MGYsMHhiNCwweDAzLDB4OTksMHgwMCwweGZiLDB4MDAsMHgzZSwweGMwLDB4MGQsMHgwNCwweDIzLDB4MmMsMHgwOCwweGZiLDB4ODggfSB9LAoreyAgMTYsIDB4OGMxMCwgMCwgezB4MzIsMHhjMCwweDBmLDB4YjAsMHgwMywweGU2LDB4MDAsMHhkYiwweDEwLDB4M2UsMHgwMiwweDBmLDB4YjAsMHg4MywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4OGMyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyYywweDAwLDB4YjksMHg1MCwweGEyLDB4NDggfSB9LAoreyAgMTYsIDB4OGMzMCwgMCwgezB4OGIsMHhiMCwweDAzLDB4MjAsMHgwMCwweGQ3LDB4ODAsMHgyZSwweGQ4LDB4MDAsMHg4MCwweDAyLDB4M2MsMHgwMCwweGJmLDB4ODAgfSB9LAoreyAgMTYsIDB4OGM0MCwgMCwgezB4MjMsMHhlOCwweDhiLDB4ZjAsMHgwMiwweGY0LDB4NDAsMHg4YiwweDQwLDB4MGMsMHg0MiwweDAzLDB4YjYsMHgwMiwweGYyLDB4MDAgfSB9LAoreyAgMTYsIDB4OGM1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4YjIsMHg0NCwweDAwLDB4YzggfSB9LAoreyAgMTYsIDB4OGM2MCwgMCwgezB4MGIsMHgzMCwweDEyLDB4OGMsMHgwMCwweGEzLDB4ODAsMHgyNCwweGM4LDB4MGIsMHgwMCwweDBhLDB4Y2MsMHgwMCwweGIzLDB4NDQgfSB9LAoreyAgMTYsIDB4OGM3MCwgMCwgezB4MDQsMHhjMCwweDFiLDB4MzYsMHgwMiwweGM1LDB4MDEsMHg4MywweDBjLDB4MmMsMHhhMCwweDBiLDB4MzAsMHgwMiwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OGM4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxZSwweDA4LDB4YjcsMHg5MCwweDIxLDB4NjQgfSB9LAoreyAgMTYsIDB4OGM5MCwgMCwgezB4MGIsMHhmOCwweDAyLDB4NGEsMHgwNCwweDk3LDB4ODEsMHgyZiwweGU0LDB4MGEsMHg3OCwweDAyLDB4OWUsMHgwMCwweGI3LDB4ODAgfSB9LAoreyAgMTYsIDB4OGNhMCwgMCwgezB4MjEsMHhlMCwweDhiLDB4NzgsMHg4MiwweGQ2LDB4ODYsMHg4NywweDg0LDB4MmQsMHhhMCwweDBiLDB4NzgsMHgwMiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGNiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwNCwweDAwLDB4ZjIsMHgwMCwweDMwLDB4YzAgfSB9LAoreyAgMTYsIDB4OGNjMCwgMCwgezB4MGYsMHgzMCwweDAzLDB4OGMsMHgwMCwweGUzLDB4MGEsMHgzYywweGMwLDB4MGYsMHgxOCwweDAzLDB4OGMsMHgwMCwweGYzLDB4MDIgfSB9LAoreyAgMTYsIDB4OGNkMCwgMCwgezB4MzAsMHhjMCwweDFmLDB4MzAsMHgwMSwweGM2LDB4ODAsMHhjMywweDAwLDB4M2MsMHhjMCwweDBmLDB4MTIsMHgwMywweGRhLDB4MDIgfSB9LAoreyAgMTYsIDB4OGNlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MGQsMHhiYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4NDEgfSB9LAoreyAgMTYsIDB4OGNmMCwgMCwgezB4MGYsMHhmMCwweDAzLDB4YjgsMHgwOCwweGZmLDB4MDgsMHgzZiwweGMwLDB4MGQsMHhmMCwweDAzLDB4M2MsMHgyMCwweGZmLDB4MDggfSB9LAoreyAgMTYsIDB4OGQwMCwgMCwgezB4M2IsMHhkMiwweDBmLDB4ZjAsMHgwMywweGY0LDB4NDAsMHhlZiwweDAwLDB4M2YsMHhjNCwweDBmLDB4ZDAsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4OGQxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlNCwweDAwLDB4ZmUsMHgwMCwweDMyLDB4YzIgfSB9LAoreyAgMTYsIDB4OGQyMCwgMCwgezB4MGMsMHgzMCwweDBiLDB4MjYsMHgwMCwweGZiLDB4ODAsMHgzNiwweGMwLDB4MGQsMHhhMCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4ZTAgfSB9LAoreyAgMTYsIDB4OGQzMCwgMCwgezB4MzIsMHhkMCwweDBmLDB4YjgsMHg0MywweDY0LDB4NDQsMHhkYiwweDA0LDB4M2UsMHg4MCwweDBmLDB4YjAsMHgwMywweGUyLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQ0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDAwLDB4YjcsMHgwMCwweGExLDB4YzAgfSB9LAoreyAgMTYsIDB4OGQ1MCwgMCwgezB4ODgsMHg3MCwweDAzLDB4MTAsMHgwMCwweGI3LDB4MjAsMHgyMSwweGMwLDB4MDgsMHg3MCwweDAyLDB4ZGMsMHg4MCwweGIzLDB4MzAgfSB9LAoreyAgMTYsIDB4OGQ2MCwgMCwgezB4MzEsMHhjOCwweDBiLDB4NzQsMHgwMiwweDE0LDB4MDAsMHg4NywweDQwLDB4MmQsMHhjMCwweDRiLDB4NzAsMHgwMiwweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQ3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5NiwweDIwLDB4YjYsMHg4MCwweDIwLDB4ZTAgfSB9LAoreyAgMTYsIDB4OGQ4MCwgMCwgezB4MjgsMHhmOCwweDAyLDB4OTQsMHgxMCwweGI3LDB4ODEsMHgyNywweGUyLDB4MDksMHg3OCwweDAyLDB4ZGUsMHgwMCwweGI3LDB4YTAgfSB9LAoreyAgMTYsIDB4OGQ5MCwgMCwgezB4YTksMHhlOCwweDBiLDB4MzgsMHgwMiwweDc2LDB4MDAsMHg4NywweDgwLDB4MmQsMHhhMCwweDBiLDB4NTgsMHgwMiwweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGRhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjZSwweDEwLDB4YjMsMHgwMCwweDIwLDB4YzQgfSB9LAoreyAgMTYsIDB4OGRiMCwgMCwgezB4MDgsMHgyMCwweDAyLDB4ODAsMHgxMCwweGIzLDB4MDAsMHgyMiwweGM4LDB4MDgsMHhiMCwweDAyLDB4Y2MsMHgxMSwweGIzLDB4MDIgfSB9LAoreyAgMTYsIDB4OGRjMCwgMCwgezB4MjgsMHhjMCwweDBiLDB4MzAsMHgwMiwweDA0LDB4MDAsMHg5MywweDgwLDB4MmMsMHhkMiwweDBiLDB4MTAsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4OGRkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZmUsMHg0MCwweDMyLDB4YTAgfSB9LAoreyAgMTYsIDB4OGRlMCwgMCwgezB4MGMsMHhlNCwweDAzLDB4OTgsMHg4MCwweGZhLDB4MDAsMHgzNywweGEwLDB4MGQsMHhlMCwweDgzLDB4ZTgsMHgwMCwweGZlLDB4MDAgfSB9LAoreyAgMTYsIDB4OGRmMCwgMCwgezB4M2EsMHg4MCwweDBiLDB4YTAsMHgwMywweDY4LDB4MDAsMHhkOCwweGEwLDB4M2YsMHg5MCwweDBmLDB4YTAsMHgwMywweGZhLDB4MDQgfSB9LAoreyAgMTYsIDB4OGUwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDA4LDB4ZjgsMHgwOCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4OGUxMCwgMCwgezB4MGYsMHg4MCwweDAzLDB4MjAsMHgwMCwweGY4LDB4NDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDQgfSB9LAoreyAgMTYsIDB4OGUyMCwgMCwgezB4MzAsMHgxMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MDIsMHhlOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4OGUzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZjEsMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4OGU0MCwgMCwgezB4MGUsMHg5MCwweDgzLDB4YTQsMHgwMCwweGM5LDB4ODAsMHgzZSwweDQwLDB4MGUsMHg5MCwweDAzLDB4YTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4OGU1MCwgMCwgezB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMywweGU0LDB4MDAsMHhjOCwweDAwLDB4M2UsMHg0MCwweDhmLDB4OTAsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4OGU2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4YjksMHg0MCwweGEwLDB4NjIgfSB9LAoreyAgMTYsIDB4OGU3MCwgMCwgezB4MDgsMHgxMCwweDAyLDB4MjQsMHgxMCwweDg5LDB4MDAsMHgyZSwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4OGU4MCwgMCwgezB4MmUsMHg1MiwweDA4LDB4OTQsMHgwMiwweGM0LDB4MDAsMHg4OSwweDQwLDB4MmUsMHg0MCwweDBiLDB4MTAsMHgwMywweDYwLDB4MTAgfSB9LAoreyAgMTYsIDB4OGU5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjksMHgxOCwweDIyLDB4NDQgfSB9LAoreyAgMTYsIDB4OGVhMCwgMCwgezB4MGEsMHg5MCwweDAyLDB4YWMsMHgwMCwweDg5LDB4MTAsMHgyZSwweGMwLDB4MGEsMHg5MCwweDAyLDB4YTQsMHgwMCwweGI5LDB4ODAgfSB9LAoreyAgMTYsIDB4OGViMCwgMCwgezB4MmUsMHg2MCwweDA4LDB4OTgsMHgwMiwweGU2LDB4MDIsMHg4OSwweDA4LDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4OGVjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDgwLDB4YjEsMHgyMCwweGEwLDB4NDggfSB9LAoreyAgMTYsIDB4OGVkMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4MjQsMHgwOCwweDgxLDB4MjMsMHgyYywweDUwLDB4MDgsMHgxMCwweDAyLDB4MDQsMHg4MCwweGIxLDB4MjAgfSB9LAoreyAgMTYsIDB4OGVlMCwgMCwgezB4MmMsMHg0OCwweDI4LDB4MTIsMHgwMiwweGU0LDB4ODAsMHg4MSwweDIwLDB4MmMsMHg0MCwweDBiLDB4OTgsMHgwMiwweDQyLDB4MDUgfSB9LAoreyAgMTYsIDB4OGVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZjgsMHg1MCwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4OGYwMCwgMCwgezB4MGUsMHg4NSwweDAzLDB4YTEsMHhlMCwweGNhLDB4MDAsMHgzZSwweDAwLDB4MGUsMHg4NSwweDAzLDB4YTAsMHgwMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OGYxMCwgMCwgezB4MmUsMHgwMCwweDljLDB4YTAsMHgwMywweGUwLDB4MDAsMHhjOCwweDI4LDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweDJlLDB4MDEgfSB9LAoreyAgMTYsIDB4OGYyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhmNCwweDQwLDB4ZjUsMHgxMCwweDNmLDB4NDQgfSB9LAoreyAgMTYsIDB4OGYzMCwgMCwgezB4MGYsMHhkMCwweDAzLDB4ZjQsMHgwMCwweGYxLDB4MTAsMHgzZCwweDQwLDB4OGYsMHhkNCwweDAzLDB4ZTQsMHg1MCwweGY5LDB4MTAgfSB9LAoreyAgMTYsIDB4OGY0MCwgMCwgezB4M2UsMHg0NSwweDBmLDB4OTEsMHgwMywweGQ0LDB4NDAsMHhmYywweDAwLDB4M2YsMHhjMCwweDhmLDB4ZDAsMHgyMywweGU2LDB4MDQgfSB9LAoreyAgMTYsIDB4OGY1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNiwweDIwLDB4Y2QsMHhhOCwweDMzLDB4NDAgfSB9LAoreyAgMTYsIDB4OGY2MCwgMCwgezB4OGQsMHhkMCwweDAzLDB4MjYsMHg4MCwweGNkLDB4MDAsMHgzZCwweDUwLDB4MGMsMHg5YSwweDAzLDB4NjQsMHgwMCwweGY5LDB4YTAgfSB9LAoreyAgMTYsIDB4OGY3MCwgMCwgezB4N2EsMHg2YSwweDBmLDB4OWEsMHg2MywweGU2LDB4ODAsMHhjOSwweDgwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4OGY4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMSwweDAwLDB4ODgsMHhlMCwweDM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OGY5MCwgMCwgezB4MDgsMHg4MCwweDBhLDB4MjEsMHg0MiwweGM4LDB4MDAsMHgyZSwweDI5LDB4MGMsMHhhNCwweDQyLDB4MjAsMHgwMCwweGI4LDB4NDAgfSB9LAoreyAgMTYsIDB4OGZhMCwgMCwgezB4MmUsMHgwMCwweDBiLDB4ODEsMHgwMiwweGUxLDB4MDAsMHg4OCwweDAyLDB4M2EsMHgwMSwweDBiLDB4YzAsMHgwMiwweDBlLDB4MDQgfSB9LAoreyAgMTYsIDB4OGZiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAyLDB4ODEsMHgwOCwweDI0LDB4NDAgfSB9LAoreyAgMTYsIDB4OGZjMCwgMCwgezB4MDksMHgxMCwweDAyLDB4MDQsMHgwMCwweDkxLDB4MDAsMHgyYywweDQwLDB4NGIsMHgxNCwweDAyLDB4NDQsMHgwMCwweGI1LDB4MTAgfSB9LAoreyAgMTYsIDB4OGZkMCwgMCwgezB4MjksMHg0MCwweDBiLDB4NTAsMHgwMiwweGY1LDB4MDAsMHhiNSwweDAwLDB4MmQsMHg0MCwweDBiLDB4ZDAsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4OGZlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTEsMHhhNiwweDAxLDB4ODksMHgwMCwweDI2LDB4NDAgfSB9LAoreyAgMTYsIDB4OGZmMCwgMCwgezB4MDgsMHg5NCwweDAyLDB4MjQsMHgwMSwweDg5LDB4MDAsMHgyZSwweDQwLDB4MWEsMHg5MCwweDAyLDB4NmMsMHgwMCwweGJmLDB4MDIgfSB9LAoreyAgMTYsIDB4OTAwMCwgMCwgezB4MmYsMHg0MCwweDBiLDB4ZDAsMHgwMiwweGY0LDB4MDIsMHhiZCwweDgwLDB4MmIsMHg0MCwweDhiLDB4ZDgsMHgzYSwweDA2LDB4MDQgfSB9LAoreyAgMTYsIDB4OTAxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4YzksMHgwNSwweDM2LDB4NDEgfSB9LAoreyAgMTYsIDB4OTAyMCwgMCwgezB4MGQsMHgxYywweDAzLDB4MjQsMHgwMCwweGQ5LDB4MDAsMHgzZSwweDQyLDB4MmYsMHg5NCwweDAzLDB4NjQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTAzMCwgMCwgezB4M2EsMHg0MCwweDBmLDB4OTAsMHgwMywweGM0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg3MCwweDBmLDB4MTAsMHgwMywweDI4LDB4MDQgfSB9LAoreyAgMTYsIDB4OTA0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHg4NCwweDA4LDB4ZjksMHgyNCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4OTA1MCwgMCwgezB4MGYsMHg5MSwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQxLDB4MGQsMHgxMCwweDAzLDB4YTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTA2MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhjOSwweDAwLDB4M2UsMHg2NCwweDBmLDB4OTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTA3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDA4LDB4YzgsMHg4MCwweDMyLDB4MDIgfSB9LAoreyAgMTYsIDB4OTA4MCwgMCwgezB4MGYsMHg4MCwweDAzLDB4MDAsMHgwMCwweGM4LDB4MDgsMHgzYSwweDEwLDB4Y2UsMHg4NCwweDAzLDB4ZTAsMHgwMCwweGZjLDB4MDAgfSB9LAoreyAgMTYsIDB4OTA5MCwgMCwgezB4M2YsMHgwMCwweDhmLDB4YzAsMHgwMywweGYwLDB4ODAsMHhmYywweDAwLDB4M2YsMHgxOCwweDBmLDB4YzAsMHg0MywweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTBhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDAwLDB4OGUsMHgwMCwweGExLDB4ODAgfSB9LAoreyAgMTYsIDB4OTBiMCwgMCwgezB4MGIsMHhlMCwweDAyLDB4MjgsMHgwMCwweGRlLDB4YzIsMHgyMywweDkwLDB4MDAsMHhhMCwweDAyLDB4ZTgsMHgwMCwweGJhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBjMCwgMCwgezB4MmUsMHg4MCwweDBiLDB4YTAsMHgwMiwweGU4LDB4MDAsMHhmYSwweDAwLDB4MmUsMHg4MCwweDBiLDB4YTAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4OTksMHg4MSwweDYwLDB4YzAgfSB9LAoreyAgMTYsIDB4OTBlMCwgMCwgezB4MGIsMHgxMCwweDAyLDB4MGMsMHgwMCwweDkwLDB4MTAsMHgyYSwweGZjLDB4MGIsMHgzMCwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBmMCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTEwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxYywweDgyLDB4OTUsMHg0MCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4OTExMCwgMCwgezB4MGIsMHg1MCwweDAyLDB4MWMsMHg4MCwweDkwLDB4ODAsMHgyMywweDAxLDB4MDksMHg3MiwweDEyLDB4ZGMsMHgwMCwweGI2LDB4MDAgfSB9LAoreyAgMTYsIDB4OTEyMCwgMCwgezB4MmQsMHgwMCwweDBiLDB4NDAsMHgwMiwweGQwLDB4MDAsMHhiNCwweDA5LDB4MmQsMHgwMCwweDRiLDB4NDAsMHg4MiwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTEzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgzZSwweDgwLDB4ZGQsMHg4MCwweGIxLDB4ZTAgfSB9LAoreyAgMTYsIDB4OTE0MCwgMCwgezB4MGYsMHhkYSwweDAzLDB4MGYsMHg4MCwweGQ0LDB4ODAsMHgzOSwweGUwLDB4MGIsMHg3YSwweDAzLDB4ZGUsMHgwMCwweGY1LDB4ODAgfSB9LAoreyAgMTYsIDB4OTE1MCwgMCwgezB4M2QsMHgyMCwweDBmLDB4NDgsMHgwMywweGQ2LDB4MTAsMHhmNiwweDgxLDB4M2QsMHhlMCwweDhmLDB4NjgsMHgwMywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4OTE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhYywweDAwLDB4ZWQsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4OTE3MCwgMCwgezB4MGYsMHg5MSwweDBiLDB4ZWMsMHgxMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGUsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTE4MCwgMCwgezB4M2UsMHhjMCwweDRmLDB4YjAsMHgwMywweGU4LDB4MDAsMHhlOSwweDAxLDB4M2UsMHgwMCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4OTE5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDIwLDB4YmYsMHg4MSwweDMzLDB4YTQgfSB9LAoreyAgMTYsIDB4OTFhMCwgMCwgezB4OGMsMHgxOSwweDAzLDB4M2UsMHgwMCwweGNkLDB4ODAsMHgzZiwweGUwLDB4MGYsMHhmOCwweDgzLDB4M2UsMHgwMCwweGVmLDB4ODAgfSB9LAoreyAgMTYsIDB4OTFiMCwgMCwgezB4M2YsMHhlMCwweDBmLDB4ZjksMHgxMywweGZhLDB4MTAsMHhmZCwweDgwLDB4M2YsMHhhNCwweDBmLDB4ZDgsMHgwMywweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTFjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDAwLDB4YmYsMHgyMCwweDMxLDB4YzIgfSB9LAoreyAgMTYsIDB4OTFkMCwgMCwgezB4MDgsMHg1YSwweDAyLDB4M2MsMHgwMiwweDg3LDB4MDAsMHgyZCwweDk0LDB4MGIsMHg3MCwweDBhLDB4MWMsMHg0MCwweDg2LDB4MTAgfSB9LAoreyAgMTYsIDB4OTFlMCwgMCwgezB4MmQsMHgwMCwweDBiLDB4NDAsMHgwMiwweGQ0LDB4MDAsMHhmNiwweDAwLDB4MmQsMHg0MCwweDRiLDB4NjAsMHgwMiwweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTFmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4YjcsMHgwMSwweDIzLDB4ODAgfSB9LAoreyAgMTYsIDB4OTIwMCwgMCwgezB4MjgsMHg1MCwweDAyLDB4MWMsMHgwMCwweDg0LDB4MDAsMHgyZCwweGMwLDB4MGIsMHgzMCwweDAyLDB4MWMsMHgwMCwweGI1LDB4MDAgfSB9LAoreyAgMTYsIDB4OTIxMCwgMCwgezB4MmQsMHgwMCwweDBiLDB4NDAsMHgwNiwweGQwLDB4NDAsMHhiNCwweDA4LDB4MmQsMHg4MCwweDBiLDB4NDgsMHgwMiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTIyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjYywweDAwLDB4YjMsMHgwOCwweGEwLDB4MjAgfSB9LAoreyAgMTYsIDB4OTIzMCwgMCwgezB4MDgsMHgxMSwweDhhLDB4MGUsMHgwMCwweDgwLDB4MDAsMHgyYywweDkwLDB4MGIsMHgzNywweDAyLDB4MGMsMHgwMCwweDkwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTI0MCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHg0MiwweGNjLDB4MDQsMHhhMywweDgwLDB4MmMsMHg1MCwweDBiLDB4MzAsMHgwMiwweGM4LDB4MDQgfSB9LAoreyAgMTYsIDB4OTI1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAwLDB4ZjksMHg4MCwweDMyLDB4NjAgfSB9LAoreyAgMTYsIDB4OTI2MCwgMCwgezB4MGMsMHhkNCwweDAzLDB4M2MsMHg4MCwweDg4LDB4MDAsMHgzZSwweGQwLDB4MGYsMHhmOCwweDAzLDB4MjgsMHgwMCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTI3MCwgMCwgezB4M2UsMHhjMCwweDBmLDB4YjAsMHgwNywweGVjLDB4MDEsMHhiYiwweDgwLDB4M2UsMHg1NCwweDBmLDB4YjAsMHgwNiwweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTI4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlZSwweDA4LDB4ZjksMHg4MCwweDNhLDB4YzAgfSB9LAoreyAgMTYsIDB4OTI5MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZWMsMHgwMCwweGY4LDB4NDAsMHgzZSwweDU4LDB4MGYsMHhiMCwweDQzLDB4ZTksMHgwMCwweGViLDB4NDQgfSB9LAoreyAgMTYsIDB4OTJhMCwgMCwgezB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MGQsMHhmOCwweDAwLDB4M2UsMHg4MCwweDBmLDB4ODAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTJiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhkYywweDAwLDB4Y2YsMHgwMCwweDMzLDB4NDAgfSB9LAoreyAgMTYsIDB4OTJjMCwgMCwgezB4MGMsMHhkMCwweDAzLDB4M2MsMHgzMCwweGNjLDB4MDAsMHgzYiwweGMwLDB4MmQsMHhmMCwweDAzLDB4ZDgsMHgwMiwweGNjLDB4MDAgfSB9LAoreyAgMTYsIDB4OTJkMCwgMCwgezB4M2QsMHgwMCwweDBjLDB4YzAsMHgwMywweGY0LDB4MDAsMHhlZSwweDAyLDB4MzcsMHg0MCwweDBjLDB4ZTAsMHgwMywweGMwLDB4NDQgfSB9LAoreyAgMTYsIDB4OTJlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2YywweDE4LDB4ODMsMHg4NCwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTJmMCwgMCwgezB4NGEsMHgxMCwweDAyLDB4MGMsMHgwMCwweGE4LDB4NDgsMHgyZSwweDYwLDB4MDgsMHhiMCwweDAyLDB4ZTksMHgwMCwweDg5LDB4NDAgfSB9LAoreyAgMTYsIDB4OTMwMCwgMCwgezB4MmUsMHhjMCwweDA4LDB4YjAsMHgwMiwweGU4LDB4MTAsMHhiMSwweDAxLDB4MjAsMHg4MCwweDBhLDB4OTAsMHgwMywweGEwLDB4NDAgfSB9LAoreyAgMTYsIDB4OTMxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OGIsMHg4MiwweDIyLDB4MDggfSB9LAoreyAgMTYsIDB4OTMyMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4MmMsMHgxNCwweDg4LDB4MDQsMHgyYywweDA4LDB4MDgsMHhiMCwweDEyLDB4ZTgsMHgwMCwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTMzMCwgMCwgezB4MmUsMHhjMCwweDBhLDB4YjAsMHgwMiwweGU4LDB4MDEsMHhiOSwweDAwLDB4MjYsMHgwNCwweDA4LDB4OTAsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTM0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDAwLDB4ODMsMHg4MCwweGEyLDB4YzAgfSB9LAoreyAgMTYsIDB4OTM1MCwgMCwgezB4MGEsMHg5MiwweDAyLDB4MmMsMHgwMCwweGEyLDB4MDAsMHgyYywweDAwLDB4MDgsMHgzNCwweDAyLDB4YzgsMHgwMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4OTM2MCwgMCwgezB4MmMsMHgwMCwweDI4LDB4MDAsMHgwMiwweGM0LDB4MDEsMHhiYSwweDAwLDB4MjIsMHhjMCwweDAyLDB4MjAsMHgwNiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4OTM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4Y2EsMHgwMCwweGIyLDB4MDAgfSB9LAoreyAgMTYsIDB4OTM4MCwgMCwgezB4MGMsMHg5MiwweDBiLDB4MmMsMHgwNCwweGM4LDB4MDQsMHgzYSwweDAwLDB4MGMsMHhiNCwweDAzLDB4ZTgsMHgwMCwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTM5MCwgMCwgezB4MmUsMHgwMCwweDBjLDB4ODAsMHgzMywweGUxLDB4NDAsMHhlOCwweDAwLDB4MzYsMHgwMCwweDBjLDB4ODAsMHgwMywweGMwLDB4MDMgfSB9LAoreyAgMTYsIDB4OTNhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmYywweDAwLDB4ZmYsMHgwMCwweDNkLDB4MDAgfSB9LAoreyAgMTYsIDB4OTNiMCwgMCwgezB4MGYsMHhkMSwweDBiLDB4ZmMsMHgwMSwweGZjLDB4MDAsMHgzZiwweDAwLDB4MGYsMHhmMCwweDAzLDB4ZDgsMHgwMCwweGZkLDB4MDAgfSB9LAoreyAgMTYsIDB4OTNjMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4ODAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwNywweGE4LDB4MDYgfSB9LAoreyAgMTYsIDB4OTNkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhmMywweDAwLDB4Y2YsMHg4MCwweDM1LDB4NjAgfSB9LAoreyAgMTYsIDB4OTNlMCwgMCwgezB4NGUsMHg2OCwweDQzLDB4NWMsMHgwMCwweGU3LDB4ODAsMHgzOSwweGMwLDB4MGMsMHhjMSwweDAzLDB4N2UsMHgwMCwweGNmLDB4MzQgfSB9LAoreyAgMTYsIDB4OTNmMCwgMCwgezB4MzUsMHhlMSwweDRkLDB4ZjIsMHgwMywweDdjLDB4MDAsMHhkZiwweDM4LDB4M2YsMHhjOCwweDBmLDB4ZjgsMHgwMywweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTQwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTgsMHhjOCwweDAwLDB4ZGIsMHg4NCwweDIyLDB4NjAgfSB9LAoreyAgMTYsIDB4OTQxMCwgMCwgezB4MDgsMHhhYywweDBhLDB4MmMsMHgwMCwweDhiLDB4ODAsMHgyMiwweDMwLDB4MDgsMHg5MSwweDIyLDB4MmMsMHg5MCwweDI3LDB4NjEgfSB9LAoreyAgMTYsIDB4OTQyMCwgMCwgezB4MjIsMHhjYSwweDg4LDB4ZmMsMHgyMiwweGJmLDB4MDAsMHg4YiwweDYyLDB4MmYsMHhkMCwweDA5LDB4YjgsMHgwMywweGIwLDB4MDQgfSB9LAoreyAgMTYsIDB4OTQzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHhlMiwweDgwLDB4YTksMHgwMiwweDI0LDB4NDAgfSB9LAoreyAgMTYsIDB4OTQ0MCwgMCwgezB4ODIsMHgzNCwweDQyLDB4MDQsMHgwMCwweGE5LDB4MDAsMHgyOCwweGM1LDB4NDgsMHgzMiwweDAyLDB4NGMsMHgyMCwweDgzLDB4MzAgfSB9LAoreyAgMTYsIDB4OTQ1MCwgMCwgezB4MjAsMHhjMCwweDA4LDB4MzEsMHgwMiwweDBkLDB4MDAsMHhiMywweDIwLDB4MmMsMHhjNCwweDBiLDB4MzAsMHgwMiwweGYyLDB4MDEgfSB9LAoreyAgMTYsIDB4OTQ2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhhYSwweDAyLDB4YjksMHgwNCwweDIyLDB4NjAgfSB9LAoreyAgMTYsIDB4OTQ3MCwgMCwgezB4MjgsMHhiMiwweDAyLDB4MjYsMHgwMCwweDg5LDB4ODgsMHgwMiwweGMwLDB4MDgsMHgzMSwweDEyLDB4ZWMsMHgwMCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4OTQ4MCwgMCwgezB4MmEsMHhkMCwweDA4LDB4YjAsMHgwMiwweGFjLDB4MDAsMHgyYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMiwweGIwLDB4MDQgfSB9LAoreyAgMTYsIDB4OTQ5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhlMiwweDAwLDB4ZTMsMHgwMCwweDM2LDB4MjAgfSB9LAoreyAgMTYsIDB4OTRhMCwgMCwgezB4MGUsMHhhNCwweDYzLDB4NmUsMHgwMCwweGUxLDB4YzAsMHgxYSwweGMxLDB4MGMsMHg4MCwweDAzLDB4NjgsMHg3MCwweGNiLDB4MDAgfSB9LAoreyAgMTYsIDB4OTRiMCwgMCwgezB4MzYsMHg4MCwweDBkLDB4YjAsMHgwMywweDRjLDB4MDAsMHhmYiwweDA0LDB4M2UsMHhjMSwweDBmLDB4YjAsMHgwMywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4OTRjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiOCwweDA0LDB4ZGYsMHgwMCwweDNmLDB4MDAgfSB9LAoreyAgMTYsIDB4OTRkMCwgMCwgezB4MGYsMHhlOCwweDAzLDB4ZmMsMHgwMCwweGZkLDB4MDAsMHgzZiwweDAwLDB4MmIsMHg5OCwweDAzLDB4M2EsMHgwMCwweDc3LDB4MDAgfSB9LAoreyAgMTYsIDB4OTRlMCwgMCwgezB4MjcsMHhlNCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhkZiwweDAwLDB4M2UsMHhjMCwweDBkLDB4ZjAsMHg0MywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTRmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4MDAsMHhhNCwweDY4LDB4Y2IsMHgyMCwweDNhLDB4OTAgfSB9LAoreyAgMTYsIDB4OTUwMCwgMCwgezB4MGYsMHgyNCwweGEzLDB4YWMsMHgwMCwweGU5LDB4NTAsMHgzYSwweGMwLDB4MGUsMHhiNCwweDgzLDB4MmMsMHgwOCwweGViLDB4MDAgfSB9LAoreyAgMTYsIDB4OTUxMCwgMCwgezB4M2EsMHg5MCwweDBlLDB4YjAsMHg4YiwweGVjLDB4ODAsMHhmYiwweDAwLDB4M2UsMHhjMCwweDBlLDB4YjAsMHgwMywweDkwLDB4MDQgfSB9LAoreyAgMTYsIDB4OTUyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDEsMHgwYSwweDAwLDB4OGIsMHhhMCwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4OTUzMCwgMCwgezB4MGQsMHhhOCwweDAyLDB4MmMsMHgwNCwweDg5LDB4NDAsMHgyOCwweGU4LDB4MDgsMHhiMiwweDAyLDB4MmMsMHgwMCwweGFmLDB4MDAgfSB9LAoreyAgMTYsIDB4OTU0MCwgMCwgezB4MDIsMHg4MCwweDA4LDB4N2MsMHgwMywweDNkLDB4ODAsMHgzZiwweDAwLDB4MmYsMHhjMCwweDA4LDB4YjAsMHgwMiwweDM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OTU1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0OSwweDAwLDB4MDMsMHg0MCwweDI4LDB4YzAgfSB9LAoreyAgMTYsIDB4OTU2MCwgMCwgezB4MmIsMHgyOCwweDRhLDB4MjgsMHgwMCwweGExLDB4MDAsMHg2OCwweGQyLDB4MGEsMHgyMCwweDQyLDB4YTQsMHgwMSwweGEzLDB4MDAgfSB9LAoreyAgMTYsIDB4OTU3MCwgMCwgezB4MDIsMHg0MCwweDBhLDB4MzQsMHgwMiwweDBkLDB4MDAsMHgzMywweDAwLDB4MmMsMHhjMCwweDBhLDB4MzAsMHgwMCwweGI4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTU4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MDEsMHgxYSwweDAwLDB4ODcsMHg5MCwweDIxLDB4ZTQgfSB9LAoreyAgMTYsIDB4OTU5MCwgMCwgezB4MmIsMHhjOCwweDEyLDB4M2EsMHgwMCwweDg1LDB4YzAsMHgyYiwweDIxLDB4MjgsMHg2OCwweDAyLDB4YjYsMHgwMCwweGE3LDB4ODQgfSB9LAoreyAgMTYsIDB4OTVhMCwgMCwgezB4MjMsMHg2MCwweDA4LDB4MzgsMHg4MCwweDFlLDB4MDAsMHhiNywweDgwLDB4MmQsMHhlMCwweDA4LDB4NzgsMHgwMiwweDJlLDB4MDAgfSB9LAoreyAgMTYsIDB4OTViMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwOCwweDAwLDB4YzEsMHgwMCwweDM4LDB4NTQgfSB9LAoreyAgMTYsIDB4OTVjMCwgMCwgezB4MGYsMHgyNiwweDgzLDB4ODAsMHgwMCwweGUwLDB4MzQsMHgyOCwweGM4LDB4MGUsMHgyYywweDBiLDB4OGMsMHgwMCwweGUzLDB4MDAgfSB9LAoreyAgMTYsIDB4OTVkMCwgMCwgezB4NzgsMHg0NSwweDBlLDB4MzAsMHgwMywweDhlLDB4ODAsMHhmMywweDAwLDB4M2MsMHhjOCwweDBlLDB4MzAsMHgwMywweDkyLDB4MDIgfSB9LAoreyAgMTYsIDB4OTVlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiOCwweDAwLDB4ZjUsMHgwMiwweDNmLDB4NDQgfSB9LAoreyAgMTYsIDB4OTVmMCwgMCwgezB4MGQsMHg5MCwweDAzLDB4ZjgsMHgwMCwweGJkLDB4MTQsMHgxZiwweGMwLDB4MGYsMHhlMSwweDIzLDB4NWMsMHg0NCwweDlmLDB4NDIgfSB9LAoreyAgMTYsIDB4OTYwMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjQsMHg4MiwweDdkLDB4NDAsMHhmZiwweDEwLDB4M2YsMHhjMCwweDRmLDB4NzAsMHgwNywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4OTYxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlOCwweDAyLDB4Y2IsMHgwMCwweDM4LDB4YzAgfSB9LAoreyAgMTYsIDB4OTYyMCwgMCwgezB4M2MsMHhhMCwweDAzLDB4ZWMsMHgwMCwweGU5LDB4MDAsMHgzZSwweGMwLDB4MGMsMHhiMCwweDAzLDB4MjAsMHgwNCwweGZiLDB4MjEgfSB9LAoreyAgMTYsIDB4OTYzMCwgMCwgezB4M2UsMHg4MCwweDRmLDB4YjQsMHgwMywweGNmLDB4MDAsMHhjYiwweDAwLDB4M2UsMHhjYywweDRmLDB4YjAsMHg0MywweGVhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTY0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4OTEsMHg5OCwweDAwLDB4ODcsMHgwMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4OTY1MCwgMCwgezB4MDgsMHg0MCwweDAyLDB4ZGMsMHgwNCwweGI1LDB4MDAsMHgyZCwweDAwLDB4MmQsMHg3MCwweDAyLDB4MWMsMHgxYywweGI3LDB4MDIgfSB9LAoreyAgMTYsIDB4OTY2MCwgMCwgezB4MmQsMHhjMCwweDBiLDB4NzIsMHgwMiwweGRjLDB4MDAsMHg4NywweDQwLDB4MmQsMHhjYSwweDhiLDB4NzAsMHgwMiwweGYyLDB4MDQgfSB9LAoreyAgMTYsIDB4OTY3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhiYSwweDAwLDB4ODcsMHg4OCwweDJiLDB4ZTAgfSB9LAoreyAgMTYsIDB4OTY4MCwgMCwgezB4MTgsMHg3OCwweDIyLDB4ZDYsMHgxMSwweGE0LDB4ODIsMHgyZiwweGUwLDB4MDgsMHg3OCwweDAyLDB4MTIsMHgwMCwweGI3LDB4OTQgfSB9LAoreyAgMTYsIDB4OTY5MCwgMCwgezB4NmQsMHg2MCwweDRiLDB4N2EsMHgwMiwweGRlLDB4NDAsMHhiNywweGEwLDB4MmQsMHhlMCwweDBiLDB4NzgsMHgwNiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTZhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjOSwweDEyLDB4ODMsMHg4MiwweDI4LDB4ZDQgfSB9LAoreyAgMTYsIDB4OTZiMCwgMCwgezB4OTgsMHgwMCwweDA2LDB4ZWYsMHgwNSwweGIxLDB4OTAsMHgyYywweGMxLDB4MDksMHhiNCwweDAyLDB4MGMsMHgwNCwweGIzLDB4MDEgfSB9LAoreyAgMTYsIDB4OTZjMCwgMCwgezB4NmMsMHhmMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4MzAsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4OTZkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOCwweDQwLDB4Y2EsMHg4MCwweDNiLDB4YTAgfSB9LAoreyAgMTYsIDB4OTZlMCwgMCwgezB4NGMsMHhlNSwweDAyLDB4ZjgsMHg4MCwweGVlLDB4MDAsMHgzZCwweDgwLDB4MmMsMHhlMCwweDBmLDB4MzgsMHg4MCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTZmMCwgMCwgezB4M2YsMHhhOSwweDBmLDB4YTAsMHgwMywweGU4LDB4MDAsMHhiYSwweDAyLDB4M2UsMHg4MCwweDhiLDB4YTAsMHgwMywweGZhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTcwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDEwLDB4ZjgsMHgwMCwweDI2LDB4MDIgfSB9LAoreyAgMTYsIDB4OTcxMCwgMCwgezB4MGYsMHg4NCwweDAzLDB4ZTAsMHgyNCwweGY4LDB4MDAsMHgzZSwweDAwLDB4NGYsMHg4MCwweGEzLDB4ZTAsMHgzMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTcyMCwgMCwgezB4MzYsMHgwMiwweDBmLDB4ODAsMHgyMywweGUwLDB4MDQsMHgwOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4OTczMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZDksMHgwMCwweGI2LDB4NDEgfSB9LAoreyAgMTYsIDB4OTc0MCwgMCwgezB4NGUsMHg5OSwweDBiLDB4YTQsMHgwMCwweDY5LDB4MTAsMHgzZSwweDQwLDB4MGMsMHg5MCwweDAzLDB4YTQsMHgxMCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTc1MCwgMCwgezB4M2UsMHg0MCwweDBkLDB4OTIsMHgwMywweGU2LDB4MDAsMHhmOSwweDAwLDB4M2EsMHg0MCwweDBlLDB4OTAsMHgwMywweGMyLDB4MDQgfSB9LAoreyAgMTYsIDB4OTc2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4ODEsMHgwMCwweDIwLDB4NDIgfSB9LAoreyAgMTYsIDB4OTc3MCwgMCwgezB4MDgsMHgxNCwweDlhLDB4MjQsMHgwMCwweDg5LDB4MDAsMHg2ZSwweDUwLDB4MDAsMHg5MCwweDAyLDB4MjQsMHgxMCwweGQ5LDB4MDIgfSB9LAoreyAgMTYsIDB4OTc4MCwgMCwgezB4NmUsMHg0MCwweDBiLDB4OTQsMHgwMywweGE3LDB4MDAsMHhiOSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTc5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgwNiwweDAwLDB4OTksMHgwMCwweGE2LDB4NDEgfSB9LAoreyAgMTYsIDB4OTdhMCwgMCwgezB4MGEsMHg5MCwweDA2LDB4MmMsMHgwMCwweGE5LDB4MDksMHg2ZSwweDUwLDB4MDgsMHg5MSwweDAyLDB4ODQsMHgwNCwweDg5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTdiMCwgMCwgezB4MGUsMHg0MCwweDBiLDB4OTQsMHgwMiwweGU1LDB4NDksMHhiOSwweDAwLDB4MGEsMHg0MCwweDBhLDB4OTAsMHgwMiwweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OTdjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNiwweDAwLDB4ODEsMHgwMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4OTdkMCwgMCwgezB4MDgsMHgxMiwweDIyLDB4MDQsMHg4MSwweGExLDB4MDAsMHgyYywweDQwLDB4MDgsMHgxNiwweDAyLDB4MDQsMHgwMCwweDkxLDB4MjAgfSB9LAoreyAgMTYsIDB4OTdlMCwgMCwgezB4MmMsMHg0MCwweDBiLDB4MTIsMHg0MiwweDg0LDB4ODksMHhiMSwweDIwLDB4MjAsMHg0OCwweDA4LDB4MTAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4OTdmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZDgsMHgwMCwweDM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OTgwMCwgMCwgezB4MGEsMHg4MCwweDAzLDB4YTEsMHg0MCwweGU4LDB4MDAsMHgyZSwweDAwLDB4MGMsMHgwMCwweDIzLDB4YTEsMHg0MCwweGM4LDB4NTAgfSB9LAoreyAgMTYsIDB4OTgxMCwgMCwgezB4MmUsMHgxNCwweDBkLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDUwLDB4M2EsMHgwMCwweDBlLDB4ODAsMHgwMywweGVlLDB4MDMgfSB9LAoreyAgMTYsIDB4OTgyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MWQsMHhkNCwweDAwLDB4ZjUsMHgwMCwweGJmLDB4NDAgfSB9LAoreyAgMTYsIDB4OTgzMCwgMCwgezB4MGYsMHhkMSwweDAzLDB4ZjQsMHg0NCwweGRkLDB4MDIsMHgzZCwweDUwLDB4MmIsMHhkMSwweDIzLDB4ZjQsMHgwMCwweGY5LDB4MTAgfSB9LAoreyAgMTYsIDB4OTg0MCwgMCwgezB4M2YsMHg0MCwweDBkLDB4OTEsMHgwMywweGE0LDB4NDgsMHhmOSwweDEyLDB4M2UsMHg0ZSwweDFmLDB4OTAsMHgwMywweGE2LDB4MDIgfSB9LAoreyAgMTYsIDB4OTg1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhmNCwweDAwLDB4YzUsMHgwNCwweDNiLDB4NDAgfSB9LAoreyAgMTYsIDB4OTg2MCwgMCwgezB4MGYsMHhkOCwweDAzLDB4YTcsMHg4MCwweGZkLDB4MDAsMHhiMywweDY4LDB4MGQsMHhkOCwweDQzLDB4YTUsMHgxMCwweGM5LDB4YTAgfSB9LAoreyAgMTYsIDB4OTg3MCwgMCwgezB4MzIsMHg1MSwweDRmLDB4NWEsMHg0MywweDM2LDB4MDAsMHhjOSwweGEwLDB4N2EsMHg2OCwweDBiLDB4ZDAsMHgwMywweGM2LDB4MDEgfSB9LAoreyAgMTYsIDB4OTg4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDc4LDB4MTgsMHhjYSwweDg4LDB4ODgsMHgwMiwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4OTg5MCwgMCwgezB4OGQsMHg4NCwweDIyLDB4MjMsMHg0MiwweGY4LDB4MDAsMHgyMiwweDA0LDB4MjgsMHg4YSwweGEyLDB4YWEsMHg5NCwweDg4LDB4ZTkgfSB9LAoreyAgMTYsIDB4OThhMCwgMCwgezB4MjAsMHhhOCwweDBhLDB4ODAsMHgwYSwweDIxLDB4NDAsMHg4MCwweGUyLDB4MmUsMHgyOCwweDBiLDB4ODAsMHgwMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4OThiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDUsMHhjNCwweDIwLDB4YTEsMHgwNCwweGE4LDB4YzAgfSB9LAoreyAgMTYsIDB4OThjMCwgMCwgezB4MGIsMHgxYywweDJhLDB4MjQsMHgwMCwweDM5LDB4MDQsMHgyMCwweDQwLDB4MmEsMHgxZSwweDAyLDB4ZTQsMHg4MCwweGIxLDB4MTAgfSB9LAoreyAgMTYsIDB4OThkMCwgMCwgezB4MmEsMHg0OCwweDA5LDB4MTQsMHg0NiwweDA0LDB4MDAsMHg4MSwweDM4LDB4MmMsMHg1YiwweDBiLDB4MTAsMHgwMiwweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4OThlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhhNCwweDEyLDB4YTksMHgyNCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4OThmMCwgMCwgezB4MjksMHg5MCwweDAyLDB4MjQsMHgwMCwweDM5LDB4MDAsMHgwMiwweDU4LDB4MDgsMHgxOCwweDEwLDB4ZTYsMHgwMSwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTkwMCwgMCwgezB4YWEsMHg0NCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHg4OSwweDAwLDB4MGUsMHg0MSwweDBiLDB4OTAsMHgwMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4OTkxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDUsMHhlNCwweDAwLDB4ZTEsMHgwMSwweDJhLDB4NjQgfSB9LAoreyAgMTYsIDB4OTkyMCwgMCwgezB4MmYsMHg5NCwweDEzLDB4MjQsMHgwMiwweDcxLDB4NjAsMHgxMiwweDYwLDB4NGQsMHg5MCwweDAwLDB4YzUsMHgwMiwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTkzMCwgMCwgezB4M2EsMHg0MCwweDBmLDB4OTAsMHgyMywweDI0LDB4MDIsMHhjOSwweDAyLDB4M2EsMHg0MCwweDBmLDB4OTAsMHgwMiwweGU4LDB4MDQgfSB9LAoreyAgMTYsIDB4OTk0MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MDEsMHhhNCwweDAwLDB4ZDksMHgwMCwweDNlLDB4NjAgfSB9LAoreyAgMTYsIDB4OTk1MCwgMCwgezB4YWYsMHg5MCwweDgzLDB4NjQsMHg4OCwweGY5LDB4MjAsMHgzZSwweDYyLDB4MDMsMHg5MCwweDgzLDB4YTQsMHgwMCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTk2MCwgMCwgezB4MzYsMHg2MCwweDBmLDB4MTAsMHgwMywweGM0LDB4MDAsMHhmOSwweDAwLDB4N2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGRhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTk3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHhhMSwweDAwLDB4YzgsMHg4MiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4OTk4MCwgMCwgezB4NmYsMHgwMCwweDAzLDB4YTAsMHgwMCwweGQ4LDB4NDAsMHgzMCwweDAwLDB4MGUsMHg4MCwweDAzLDB4NjAsMHgwNCwweGY4LDB4MDEgfSB9LAoreyAgMTYsIDB4OTk5MCwgMCwgezB4M2UsMHgxMCwweDRmLDB4ODAsMHg4YiwweDIyLDB4MDAsMHhmOCwweDAwLDB4MzIsMHgwMSwweDBlLDB4ODAsMHgwMywweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTlhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHgzOCwweDAwLDB4MGUsMHgwMCwweGE5LDB4OTAgfSB9LAoreyAgMTYsIDB4OTliMCwgMCwgezB4MmYsMHhlNiwweDIwLDB4ODgsMHgwMCwweDllLDB4ODAsMHgyMywweDgwLDB4MGEsMHhlOCwweDAzLDB4MjgsMHgwMCwweGJhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTljMCwgMCwgezB4MTgsMHg4MCwweDBkLDB4ZWMsMHgwMiwweDM4LDB4ODAsMHhiYSwweDAwLDB4YTIsMHg4MCwweDA4LDB4YTAsMHgwMywweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTlkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg2YywweDAyLDB4ODMsMHg4MCwweDIwLDB4YzggfSB9LAoreyAgMTYsIDB4OTllMCwgMCwgezB4MGIsMHgyMCwweDAyLDB4MGMsMHgwMSwweDkyLDB4MTAsMHg2OCwweGMwLDB4M2EsMHgzYywweDAyLDB4Y2MsMHgxMCwweDNiLDB4MDIgfSB9LAoreyAgMTYsIDB4OTlmMCwgMCwgezB4MGMsMHhjMCwweDI4LDB4M2MsMHgwMiwweDRlLDB4MDAsMHhiMywweDAwLDB4MjgsMHhjMCwweDI4LDB4MzAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4OWEwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxNCwweDAwLDB4ODcsMHg0MiwweDJiLDB4YzAgfSB9LAoreyAgMTYsIDB4OWExMCwgMCwgezB4MjksMHg3MCwweDIyLDB4OWMsMHgwMCwweGI2LDB4MDAsMHgyYiwweGMyLDB4MGEsMHg2MCwweDg2LDB4MWMsMHgwMCwweGI3LDB4MjEgfSB9LAoreyAgMTYsIDB4OWEyMCwgMCwgezB4MjksMHhjMCwweDAwLDB4NzQsMHgwMiwweDVjLDB4MDAsMHgzNywweDkxLDB4MDEsMHhlMCwweDA4LDB4NzQsMHgwMiwweGE4LDB4MDAgfSB9LAoreyAgMTYsIDB4OWEzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4YzcsMHg4MCwweDIxLDB4ZTAgfSB9LAoreyAgMTYsIDB4OWE0MCwgMCwgezB4MmYsMHg3OCwweDAyLDB4OWUsMHgwMCwweDk2LDB4ODAsMHgzOSwweGUwLDB4MmUsMHhmOCwweDAzLDB4ZGUsMHgzMCwweGY3LDB4ZDAgfSB9LAoreyAgMTYsIDB4OWE1MCwgMCwgezB4MmQsMHhmMiwweDAwLDB4NzgsMHgwMywweDUyLDB4MDAsMHhmNywweGEyLDB4M2IsMHhlMCwweDBlLDB4NzgsMHgwNywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4OWE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhiNCwweDAwLDB4ZmIsMHgwMCwweDBjLDB4YzAgfSB9LAoreyAgMTYsIDB4OWE3MCwgMCwgezB4MGYsMHgzMCwweDAzLDB4ZWMsMHgxMCwweGQzLDB4MDAsMHhiNCwweGMwLDB4MmYsMHg4MCwweDAzLDB4NmMsMHg0OCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OWE4MCwgMCwgezB4M2UsMHhjOCwweDRkLDB4OTAsMHgwMywweGE0LDB4MDAsMHhmYiwweDIwLDB4MWUsMHhjMCwweDBmLDB4YjAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4OWE5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4Y2MsMHg4MCwweDJiLDB4MmMgfSB9LAoreyAgMTYsIDB4OWFhMCwgMCwgezB4MmYsMHhmOCwweDAzLDB4N2UsMHgwMCwweDZlLDB4ODAsMHgzYiwweGExLDB4MGQsMHhkOCwweDQzLDB4M2UsMHgwMCwweGZmLDB4OTAgfSB9LAoreyAgMTYsIDB4OWFiMCwgMCwgezB4MzMsMHhlMCwweDBmLDB4ZTksMHgzMywweGZlLDB4MDAsMHhjZiwweGMwLDB4M2YsMHhlMiwweDBmLDB4ZDgsMHgwMywweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OWFjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHhiNCwweDQwLDB4ODcsMHgwMCwweDIxLDB4MDQgfSB9LAoreyAgMTYsIDB4OWFkMCwgMCwgezB4MDgsMHg3OCwweDAyLDB4MWMsMHgwMCwweDg2LDB4MDAsMHgyMSwweGMwLDB4MjgsMHg5MCwweDAyLDB4ZGMsMHgwMCwweGI3LDB4MTAgfSB9LAoreyAgMTYsIDB4OWFlMCwgMCwgezB4MjEsMHhjMCwweDBmLDB4NzMsMHgwMiwweGNjLDB4MDAsMHg4NywweDAwLDB4MmQsMHhjMCwweDBiLDB4NTAsMHgwMiwweGVhLDB4MDAgfSB9LAoreyAgMTYsIDB4OWFmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5ZCwweDAwLDB4YTQsMHgwMCwweDI5LDB4NDggfSB9LAoreyAgMTYsIDB4OWIwMCwgMCwgezB4NmEsMHhmMCwweDgyLDB4NGMsMHgwMCwweGFlLDB4MDAsMHhhMSwweGM0LDB4MjksMHg3NCwweDAyLDB4NWMsMHg0MCwweGEzLDB4MTAgfSB9LAoreyAgMTYsIDB4OWIxMCwgMCwgezB4NjEsMHhjMiwweDBiLDB4NjAsMHgwNiwweGM4LDB4MDAsMHg4NywweDAwLDB4MmQsMHhjMCwweDBiLDB4NTAsMHgwMiwweGMwLDB4MDQgfSB9LAoreyAgMTYsIDB4OWIyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhlNiwweDAxLDB4YTMsMHgwMiwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4OWIzMCwgMCwgezB4MjgsMHgzYywweDAyLDB4MGMsMHgwMCwweDgzLDB4NDIsMHgyMCwweGM4LDB4MDgsMHgxMCwweDAyLDB4Y2QsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4OWI0MCwgMCwgezB4MjgsMHhmMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDEsMHg4MywweDA0LDB4MmMsMHhjMCwweDgzLDB4MTAsMHgwMiwweGM4LDB4MDQgfSB9LAoreyAgMTYsIDB4OWI1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhYSwweDgwLDB4ZWIsMHgwMCwweDM4LDB4YzAgfSB9LAoreyAgMTYsIDB4OWI2MCwgMCwgezB4MGEsMHg5MCwweDAzLDB4N2MsMHgyMiwweGEyLDB4NDAsMHgzMiwweDQ4LDB4MGQsMHhiMCwweDBiLDB4M2UsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4OWI3MCwgMCwgezB4MzMsMHhmNCwweDBmLDB4OTAsMHgwMywweGVjLDB4MDAsMHg4ZiwweDAyLDB4M2YsMHhjMCwweDBmLDB4OTAsMHgwMywweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4OWI4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlMCwweDAwLDB4ZDksMHgwMiwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4OWI5MCwgMCwgezB4MGUsMHhiNiwweDAzLDB4ZWMsMHgwMCwweGZhLDB4MjAsMHgzZSwweGMwLDB4NGYsMHgyNCwweDIzLDB4YWMsMHg2MCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OWJhMCwgMCwgezB4YTYsMHhjMCwweDBlLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmYiwweDAwLDB4M2MsMHhjMSwweDBmLDB4OTAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OWJiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmOCwweDAyLDB4Y2YsMHgwMCwweDMzLDB4ZTAgfSB9LAoreyAgMTYsIDB4OWJjMCwgMCwgezB4MmMsMHhmMCwweDEzLDB4YmMsMHgwMCwweDJlLDB4MTAsMHhiMSwweDY0LDB4MmUsMHhmMCwweDAyLDB4M2MsMHgwMCwweGZmLDB4MDIgfSB9LAoreyAgMTYsIDB4OWJkMCwgMCwgezB4M2YsMHhjMSwweDRkLDB4ZWMsMHg2MywweGZlLDB4MDAsMHhiNywweDAwLDB4M2IsMHhjMCwweDBjLDB4ZDgsMHgwMywweGMwLDB4NDQgfSB9LAoreyAgMTYsIDB4OWJlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2YywweDI4LDB4ODEsMHg4MSwweDIyLDB4ZTAgfSB9LAoreyAgMTYsIDB4OWJmMCwgMCwgezB4MGEsMHgzOCwweDAyLDB4M2MsMHgwNCwweGJhLDB4YzksMHgzMiwweGUwLDB4MjAsMHg4NCwweDAyLDB4MmMsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4OWMwMCwgMCwgezB4MmUsMHhjMCwweDBiLDB4OWMsMHgwMiwweGU3LDB4ODEsMHhiYiwweDA0LDB4MjIsMHhjMCwweDBhLDB4OTksMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OWMxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyOCwweDQwLDB4ODgsMHg4MCwweDIyLDB4ODggfSB9LAoreyAgMTYsIDB4OWMyMCwgMCwgezB4MjgsMHhiYywweDQyLDB4YWMsMHgwMCwweGJhLDB4MDAsMHgyYSwweDgwLDB4MDgsMHg4NCwweDAyLDB4YWMsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4OWMzMCwgMCwgezB4MmUsMHhjMCwweDBiLDB4YjAsMHg4MiwweGU4LDB4OTAsMHhhYiwweDAwLDB4NjIsMHhjMCwweDA4LDB4YjAsMHgxMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OWM0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwMCwweDAwLDB4ODksMHgwMCwweDJhLDB4ODAgfSB9LAoreyAgMTYsIDB4OWM1MCwgMCwgezB4MjgsMHhiMiwweDAyLDB4MGMsMHgwMCwweGJhLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgwMCwweDAyLDB4OGMsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4OWM2MCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHgyMCwweDRjLDB4MTQsMHhiMywweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4OWM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2OCwweDAwLDB4YzgsMHgwMCwweGIyLDB4YzAgfSB9LAoreyAgMTYsIDB4OWM4MCwgMCwgezB4MmMsMHhiMiwweDAzLDB4YWMsMHgwMCwweGZhLDB4MDAsMHgzYSwweGMwLDB4NGUsMHhhNSwweDAzLDB4YmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4OWM5MCwgMCwgezB4M2YsMHhjMCwweDA5LDB4YTAsMHgwMywweGU5LDB4MDQsMHhlZiwweDAwLDB4YmEsMHhjMCwweDBjLDB4YjAsMHgwMSwweGMwLDB4MDEgfSB9LAoreyAgMTYsIDB4OWNhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTksMHhmYywweDAwLDB4ZjUsMHgwMCwweDM1LDB4YzAgfSB9LAoreyAgMTYsIDB4OWNiMCwgMCwgezB4YWYsMHgzNCwweDAzLDB4ZmMsMHgwMCwweGY0LDB4MDAsMHgzOSwweGMwLDB4MGYsMHhjMiwweDAzLDB4N2MsMHgwMCwweGZmLDB4MDEgfSB9LAoreyAgMTYsIDB4OWNjMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4YTAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGU4LDB4MDUgfSB9LAoreyAgMTYsIDB4OWNkMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDAwLDB4ZmYsMHgyOSwweDNkLDB4MjAgfSB9LAoreyAgMTYsIDB4OWNlMCwgMCwgezB4OGUsMHhjMSwweDAzLDB4MzIsMHg0OCwweGRjLDB4ODAsMHgyMywweDI1LDB4MGUsMHhmMiwweDAzLDB4M2MsMHhjMCwweGRmLDB4ODQgfSB9LAoreyAgMTYsIDB4OWNmMCwgMCwgezB4MzMsMHhjOSwweDBmLDB4ZjIsMHgwMywweGZjLDB4MDAsMHhjZiwweDgwLDB4MzMsMHg0MCwweDBjLDB4ZjIsMHgwMywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OWQwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlYywweGMwLDB4YmIsMHg2MCwweDJlLDB4MDggfSB9LAoreyAgMTYsIDB4OWQxMCwgMCwgezB4MDgsMHg4MSwweDAyLDB4MjAsMHgwNCwweDg4LDB4MjAsMHgyMCwweDQ4LDB4MDgsMHhmMSwweDgyLDB4MmQsMHhjMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4OWQyMCwgMCwgezB4MjIsMHhkNCwweDA5LDB4ZjUsMHgwMiwweGZjLDB4MDgsMHg4YiwweDAxLDB4MjIsMHg0MCwweDI4LDB4YjQsMHgwMiwweDIwLDB4MDQgfSB9LAoreyAgMTYsIDB4OWQzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDIwLDB4YjMsMHgwOSwweDJjLDB4ODIgfSB9LAoreyAgMTYsIDB4OWQ0MCwgMCwgezB4MDgsMHgxMCwweDE2LDB4YTAsMHgxMCwweDkwLDB4MDgsMHgyOCwweDQ4LDB4MGEsMHgzMiwweDAyLDB4MGMsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4OWQ1MCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDIsMHg5MywweDAxLDB4MjAsMHgwMCwweDhhLDB4MzEsMHgyMiwweGUyLDB4MDEgfSB9LAoreyAgMTYsIDB4OWQ2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhYywweDA0LDB4YmIsMHgwMCwweDJjLDB4ODAgfSB9LAoreyAgMTYsIDB4OWQ3MCwgMCwgezB4MDgsMHg4NiwweDAyLDB4YTAsMHgyMCwweGEwLDB4MDAsMHgyYSwweDYwLDB4MGEsMHhiMCwweDEwLDB4MmMsMHgwMCwweGFiLDB4MGMgfSB9LAoreyAgMTYsIDB4OWQ4MCwgMCwgezB4NmUsMHhjMCwweDA5LDB4YjAsMHgwMiwweGNjLDB4MDAsMHg5YiwweDAwLDB4MjIsMHg2MCwweDBhLDB4YjAsMHgwMiwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4OWQ5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTUsMHhlYywweDAwLDB4YmIsMHgwMCwweDNlLDB4MzQgfSB9LAoreyAgMTYsIDB4OWRhMCwgMCwgezB4MDgsMHhhMCwweDBiLDB4ODMsMHgwMCwweGQ5LDB4MDIsMHgzYSwweGUwLDB4MmUsMHhiMCwweDBiLDB4MmMsMHgwMCwweGY4LDB4ODAgfSB9LAoreyAgMTYsIDB4OWRiMCwgMCwgezB4M2UsMHhjMCwweDRmLDB4YjAsMHgwMywweGVjLDB4MDAsMHhjYSwweDQwLDB4YjIsMHg3MiwweDBlLDB4YjAsMHgwYiwweGMwLDB4MDQgfSB9LAoreyAgMTYsIDB4OWRjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiYywweDEwLDB4ZmIsMHgwMCwweDNmLDB4MDAgfSB9LAoreyAgMTYsIDB4OWRkMCwgMCwgezB4MGQsMHhmOCwweDEzLDB4NzAsMHg0OCwweGRkLDB4NDAsMHgzNywweGMyLDB4OGQsMHhmMCwweDAzLDB4ZGMsMHgwMCwweGRkLDB4YzggfSB9LAoreyAgMTYsIDB4OWRlMCwgMCwgezB4MTMsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhlZSwweDQwLDB4N2YsMHg0MCwweDBkLDB4NzAsMHgwMywweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4OWRmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZmIsMHgwMSwweDMyLDB4YzAgfSB9LAoreyAgMTYsIDB4OWUwMCwgMCwgezB4MDQsMHgxMCwweDAzLDB4MjAsMHg0MCwweGU4LDB4MTAsMHgzYSwweGMwLDB4MGQsMHhiMCwweDAzLDB4YWMsMHgwOCwweGY4LDB4NDAgfSB9LAoreyAgMTYsIDB4OWUxMCwgMCwgezB4YjIsMHhjMCwweDJjLDB4YjAsMHgzMywweGE0LDB4ODIsMHhkYSwweDQwLDB4YmEsMHg0MCwweDBmLDB4YjAsMHgwMywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4OWUyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgzYywweDA4LDB4YmYsMHg4MCwweDIyLDB4YzggfSB9LAoreyAgMTYsIDB4OWUzMCwgMCwgezB4MDgsMHhiNywweDAwLDB4MjMsMHg0NCwweDg4LDB4ZDAsMHgyMiwweGQwLDB4MDgsMHg3MCwweDgyLDB4ZmMsMHgwMCwweGIyLDB4ZTAgfSB9LAoreyAgMTYsIDB4OWU0MCwgMCwgezB4MDMsMHhmNCwweDA4LDB4ZjUsMHgwMiwweDM3LDB4MDQsMHg4YiwweGQxLDB4MjIsMHg2MCwweDRiLDB4ZmQsMHgwMiwweGYyLDB4MDAgfSB9LAoreyAgMTYsIDB4OWU1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4YjMsMHgxMCwweGE0LDB4NDAgfSB9LAoreyAgMTYsIDB4OWU2MCwgMCwgezB4MDgsMHgwMCwweDAyLDB4NDgsMHgwMCwweGEwLDB4NDIsMHgyYSwweGQwLDB4MDEsMHgzMCwweDAyLDB4OGMsMHgwMCwweGIzLDB4ODAgfSB9LAoreyAgMTYsIDB4OWU3MCwgMCwgezB4MmMsMHhjMCwweDA5LDB4MzEsMHgwMiwweGNjLDB4MDAsMHg4OSwweDAwLDB4MjIsMHhlOCwweDAzLDB4MzgsMHgwMiwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OWU4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MDEsMHgxZSwweDAwLDB4YjcsMHg4MCwweDI3LDB4NjQgfSB9LAoreyAgMTYsIDB4OWU5MCwgMCwgezB4NjgsMHg0YSwweDAyLDB4NTIsMHgwMCwweDhjLDB4ODAsMHgyMSwweGUwLDB4MDgsMHg3OCwweDAyLDB4ZGUsMHgwMCwweGI3LDB4ODAgfSB9LAoreyAgMTYsIDB4OWVhMCwgMCwgezB4MmQsMHhlMiwweDE5LDB4MzksMHgwMiwweDVlLDB4MzAsMHg4NSwweDk4LDB4MjEsMHhlNCwweDBiLDB4NzksMHgwMiwweGQ4LDB4MDAgfSB9LAoreyAgMTYsIDB4OWViMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ZjMsMHgyMCwweDM0LDB4MDAgfSB9LAoreyAgMTYsIDB4OWVjMCwgMCwgezB4MGMsMHhiOCwweDAzLDB4NDgsMHg4MCwweGUyLDB4MjIsMHgzOCwweGMwLDB4MGQsMHgzMCwweDAzLDB4OGMsMHgwMCwweGYzLDB4MDAgfSB9LAoreyAgMTYsIDB4OWVkMCwgMCwgezB4M2UsMHhjMCwweDBkLDB4MzEsMHgwMywweGVjLDB4MDAsMHhjYiwweDAwLDB4MzgsMHgwNiwweDBmLDB4MzAsMHg4MywweGQyLDB4MDIgfSB9LAoreyAgMTYsIDB4OWVlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiYywweDAwLDB4ZmYsMHgwMCwweDNiLDB4MDEgfSB9LAoreyAgMTYsIDB4OWVmMCwgMCwgezB4MGYsMHhkMCwweDAzLDB4OTAsMHgwMCwweGY2LDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmNCwweDAxLDB4ZmMsMHgwMCwweGZmLDB4MDEgfSB9LAoreyAgMTYsIDB4OWYwMCwgMCwgezB4MzMsMHhjMiwweDBlLDB4ZjUsMHgxMywweGJjLDB4MDAsMHhlZCwweDAwLDB4M2YsMHhjNCwweDBmLDB4ZjAsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4OWYxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDAwLDB4ZmIsMHgwMCwweDNjLDB4YzAgfSB9LAoreyAgMTYsIDB4OWYyMCwgMCwgezB4MGUsMHhhMCwweDAxLDB4NjQsMHgwMSwweGQ4LDB4MDAsMHgzMiwweGUwLDB4MmMsMHhiNSwweDAzLDB4MmMsMHgwMCwweGYyLDB4MDAgfSB9LAoreyAgMTYsIDB4OWYzMCwgMCwgezB4N2EsMHhjMCwweDBkLDB4YjQsMHgwMywweDJkLDB4ODAsMHhjOSwweDAyLDB4MzIsMHhjMCwweDBjLDB4YjAsMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4OWY0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDgwLDB4YjcsMHgwMCwweDJkLDB4YzAgfSB9LAoreyAgMTYsIDB4OWY1MCwgMCwgezB4MGQsMHg2MCwweDAyLDB4ZDAsMHgwMSwweDg0LDB4MDAsMHgyMSwweGMwLDB4MDgsMHgzMCwweDAyLDB4MWQsMHgwMCwweGI3LDB4MDAgfSB9LAoreyAgMTYsIDB4OWY2MCwgMCwgezB4MjEsMHhjOCwweDBiLDB4ZjQsMHgwMywweDFlLDB4YzAsMHg4NiwweDAwLDB4MjEsMHhjMCwweDA4LDB4N2MsMHgwMywweDUyLDB4MDQgfSB9LAoreyAgMTYsIDB4OWY3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweGMwLDB4YjcsMHg5MCwweDJkLDB4ZTAgfSB9LAoreyAgMTYsIDB4OWY4MCwgMCwgezB4MDgsMHg3OCwweDA2LDB4ZDYsMHgwMSwweGI0LDB4ODIsMHgyMSwweGUwLDB4MDgsMHg3OCwweDBhLDB4MWUsMHgwMCwweGI1LDB4YzAgfSB9LAoreyAgMTYsIDB4OWY5MCwgMCwgezB4MjksMHhlOCwweDA5LDB4NzgsMHgwMiwweDM2LDB4YzEsMHg5NywweDgwLDB4MjgsMHhiMCwweDBhLDB4N2EsMHgwMiwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OWZhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDAwLDB4YmIsMHgwMCwweDJjLDB4ZTAgfSB9LAoreyAgMTYsIDB4OWZiMCwgMCwgezB4MDksMHgzNSwweDgyLDB4YzAsMHhjMSwweGEwLDB4NTEsMHgyMCwweGU0LDB4MDgsMHgzMCwweDAyLDB4OGMsMHgwMCwweGJiLDB4YzQgfSB9LAoreyAgMTYsIDB4OWZjMCwgMCwgezB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDA2LDB4MDAsMHg5MywweDE4LDB4YWEsMHhiMCwweDJhLDB4MzAsMHgwYSwweDUyLDB4MDQgfSB9LAoreyAgMTYsIDB4OWZkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZmEsMHgwMSwweDNkLDB4YWMgfSB9LAoreyAgMTYsIDB4OWZlMCwgMCwgezB4NGMsMHhlYywweDEzLDB4NzgsMHgxMCwweGY2LDB4ODAsMHhiMywweDkwLDB4MGMsMHhhMCwweDAzLDB4MjgsMHgwMCwweGZlLDB4MDAgfSB9LAoreyAgMTYsIDB4OWZmMCwgMCwgezB4M2EsMHg4MSwweDBkLDB4YTAsMHgwZiwweDJhLDB4ODAsMHhkZSwweDA0LDB4M2IsMHhhMCwweDBlLDB4YTAsMHgwMywweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4YTAwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YTAxMCwgMCwgezB4MGQsMHg4MCwweDAyLDB4ZTEsMHgwMCwweGQ4LDB4NDgsMHgzZSwweDEyLDB4MGYsMHg4MCwweDEzLDB4NjAsMHgwMCwweGY4LDB4NjAgfSB9LAoreyAgMTYsIDB4YTAyMCwgMCwgezB4M2UsMHgwMCwweDA3LDB4ODAsMHgwMywweGEwLDB4MDIsMHhlOCwweDA0LDB4MjYsMHgwOCwweDA1LDB4ODAsMHgwMywweDkyLDB4MDAgfSB9LAoreyAgMTYsIDB4YTAzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZjksMHgwNCwweDNhLDB4NDAgfSB9LAoreyAgMTYsIDB4YTA0MCwgMCwgezB4MGMsMHgxMiwweDAzLDB4MjQsMHg4MiwweGM5LDB4MDAsMHgzNiwweDQ0LDB4MGYsMHgxMCwweDAzLDB4MjQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTA1MCwgMCwgezB4MzYsMHg0MCwweDA0LDB4OTAsMHgwMywweDA0LDB4MDAsMHhjOSwweDAwLDB4MTIsMHg0MCwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4YTA2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4YjksMHg4MSwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4YTA3MCwgMCwgezB4MDgsMHg5MCwweDFhLDB4MjQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDY4LDB4MGIsMHg5OSwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTA4MCwgMCwgezB4MjIsMHg0MCwweDY4LDB4OTAsMHgwYSwweDI0LDB4MDAsMHg4OSwweDAwLDB4YTIsMHg0MCwweDA4LDB4OTAsMHgwYSwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTA5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjksMHgxMCwweDIyLDB4ZTAgfSB9LAoreyAgMTYsIDB4YTBhMCwgMCwgezB4MDgsMHg5NCwweDAwLDB4MDQsMHgwNCwweDhiLDB4MDgsMHgyNiwweGMwLDB4MGIsMHg5MCwweDAyLDB4MjQsMHgwNCwweGI5LDB4MGMgfSB9LAoreyAgMTYsIDB4YTBiMCwgMCwgezB4MjQsMHg0MCwweDBhLDB4MTAsMHgwMiwweDI0LDB4MDAsMHgyMywweDAyLDB4MmEsMHg0MCwweGE4LDB4MTAsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YTBjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDkwLDB4YjEsMHgyMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4YTBkMCwgMCwgezB4MDgsMHgxMiwweDAyLDB4MGMsMHgxMCwweDgxLDB4MDIsMHhhMCwweDUwLDB4MGIsMHgxMiwweDAyLDB4MDQsMHg4MCwweGIxLDB4MDUgfSB9LAoreyAgMTYsIDB4YTBlMCwgMCwgezB4MDAsMHg0OCwweDBhLDB4MTAsMHgwMiwweDA0LDB4YTAsMHhhMSwweDAwLDB4MjgsMHg0YSwweDA4LDB4MTIsMHgwMCwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YTBmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZjgsMHg1MCwweGJhLDB4MTQgfSB9LAoreyAgMTYsIDB4YTEwMCwgMCwgezB4MGMsMHg4NSwweDAzLDB4MDEsMHg0MiwweGM4LDB4NTAsMHgzNCwweDAwLDB4MGYsMHg4NSwweDAzLDB4MjEsMHg0MCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTExMCwgMCwgezB4MzYsMHgwMCwweDBlLDB4ODAsMHgxMywweDIwLDB4ODAsMHhlMCwweDAwLDB4MWEsMHgwOCwweDBjLDB4MDAsMHgwMywweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4YTEyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhlNCwweDQ0LDB4ZjksMHgxMCwweDNmLDB4NDAgfSB9LAoreyAgMTYsIDB4YTEzMCwgMCwgezB4MmYsMHhkMSwweDEzLDB4ZjQsMHgwNCwweGY1LDB4MDAsMHgzZiwweDQwLDB4MGYsMHg5MSwweDBiLDB4ZTQsMHg0MCwweGZmLDB4MjggfSB9LAoreyAgMTYsIDB4YTE0MCwgMCwgezB4YmUsMHg0ZSwweDBkLDB4OTYsMHg4MywweGQ0LDB4YTIsMHhkZCwweDI4LDB4MzcsMHg0YSwweDBmLDB4OTMsMHg4MywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4YTE1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MDUsMHhlNCwweDEwLDB4Y2QsMHgwMCwweDNmLDB4NDAgfSB9LAoreyAgMTYsIDB4YTE2MCwgMCwgezB4MGYsMHhkMCwweDAzLDB4MzUsMHgwMiwweDVkLDB4MDEsMHgzMSwweDQ0LDB4MGYsMHhkMCwweDAzLDB4MjQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTE3MCwgMCwgezB4MzIsMHg2MCwweDBjLDB4OTgsMHg4MywweGU2LDB4NDAsMHhkOSwweDAwLDB4MzYsMHg2YSwweDBjLDB4OWUsMHg4MywweDI2LDB4MDEgfSB9LAoreyAgMTYsIDB4YTE4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMCwweDAwLDB4ODgsMHgwMCwweDJlLDB4MDAgfSB9LAoreyAgMTYsIDB4YTE5MCwgMCwgezB4MGIsMHg4MCwweDQyLDB4MDIsMHg4MCwweDhhLDB4MDAsMHgyMiwweDIwLDB4ODgsMHg4MCwweDAzLDB4MjAsMHgwOCwweGI4LDB4ODIgfSB9LAoreyAgMTYsIDB4YTFhMCwgMCwgezB4MjIsMHgyMSwweDA4LDB4ODgsMHg4MiwweGUyLDB4NDIsMHg4OCwweGE4LDB4MjIsMHgyMCwweDA4LDB4Y2UsMHgwMiwweDBlLDB4MDQgfSB9LAoreyAgMTYsIDB4YTFiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAyLDB4ODEsMHgwMCwweDY4LDB4NDAgfSB9LAoreyAgMTYsIDB4YTFjMCwgMCwgezB4MGIsMHgxMCwweDAyLDB4ODQsMHgwMSwweGI5LDB4MDAsMHgyMCwweDQwLDB4NDksMHgxMCwweDBhLDB4MDQsMHgwMCwweGI1LDB4MDggfSB9LAoreyAgMTYsIDB4YTFkMCwgMCwgezB4MjEsMHg0NiwweDA4LDB4NTAsMHgwMiwweGQ0LDB4MDAsMHg4ZCwweDIwLDB4MjUsMHg0YSwweDBiLDB4NTAsMHgwMiwweDQyLDB4MDEgfSB9LAoreyAgMTYsIDB4YTFlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTEsMHhhNCwweDAwLDB4ODksMHgwNCwweDZlLDB4NTQgfSB9LAoreyAgMTYsIDB4YTFmMCwgMCwgezB4MGIsMHgxMCwweDEyLDB4YTQsMHgwMSwweGE5LDB4MDAsMHhhMiwweDQwLDB4MTgsMHg5MCwweDE2LDB4MjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTIwMCwgMCwgezB4MjMsMHg0MCwweDE4LDB4ZDAsMHgwMiwweGY0LDB4MDAsMHg4ZCwweDQwLDB4MjEsMHg0YSwweDBiLDB4ZDAsMHgwMiwweDQ2LDB4MDQgfSB9LAoreyAgMTYsIDB4YTIxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4YzksMHgwMCwweDNhLDB4NTAgfSB9LAoreyAgMTYsIDB4YTIyMCwgMCwgezB4OGYsMHg5NiwweDBiLDB4ODQsMHgwMiwweGYxLDB4MDEsMHgzMCwweDQ4LDB4OGQsMHg5MCwweDAzLDB4MjQsMHgxMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTIzMCwgMCwgezB4YjIsMHg0MCwweDJjLDB4OTAsMHgwMywweGU2LDB4NDAsMHhkMSwweGMwLDB4MzYsMHg1MCwweDJmLDB4OTAsMHgwYiwweDY4LDB4MDQgfSB9LAoreyAgMTYsIDB4YTI0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NjAgfSB9LAoreyAgMTYsIDB4YTI1MCwgMCwgezB4MGYsMHg5OSwweGMzLDB4NjQsMHgwMCwweGQ5LDB4MjgsMHgzZSwweDQwLDB4MGQsMHg5MCwweDAzLDB4YTQsMHgwMCwweGY5LDB4NDAgfSB9LAoreyAgMTYsIDB4YTI2MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MjAsMHhmOSwweDQwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMywweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTI3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZjgsMHgwMSwweDM2LDB4MDAgfSB9LAoreyAgMTYsIDB4YTI4MCwgMCwgezB4OGYsMHg4MCwweDAzLDB4ZTAsMHgwMiwweGY4LDB4MDQsMHgzMiwweDAwLDB4MGQsMHg4MCwweDQzLDB4MjAsMHgwMiwweGNjLDB4MDAgfSB9LAoreyAgMTYsIDB4YTI5MCwgMCwgezB4M2YsMHgwMCwweDBmLDB4YzAsMHgxMywweDkwLDB4MDIsMHhkYywweDQwLDB4M2YsMHgxMCwweDRjLDB4YzAsMHgyMywweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4YTJhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDAwLDB4YmEsMHgwMCwweDIyLDB4ODAgfSB9LAoreyAgMTYsIDB4YTJiMCwgMCwgezB4MGIsMHhlOCwweDIwLDB4ZjgsMHgwMCwweDRlLDB4YzAsMHgyMywweGEwLDB4MDgsMHhhMCwweDAzLDB4NjgsMHgwMCwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTJjMCwgMCwgezB4MmUsMHg4MCwweDFmLDB4YTAsMHgwMiwweDJhLDB4MDYsMHg4YSwweDAwLDB4MmUsMHhhMCwweDAyLDB4NjAsMHgwMywweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTJkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg2YywweDAwLDB4YjMsMHgwMCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4YTJlMCwgMCwgezB4MGIsMHgzZCwweDAyLDB4YzAsMHgwMywweDIzLDB4MDAsMHgyMCwweGUwLDB4MDEsMHhiMCwweDA2LDB4NGMsMHgwMCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4YTJmMCwgMCwgezB4MmUsMHhjMCwweDRiLDB4MzAsMHgwMiwweDhlLDB4MDgsMHg4MywweDgwLDB4MmMsMHhjNCwweDAwLDB4MzQsMHg4ZSwweDRhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTMwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxYywweDgwLDB4YjUsMHg4MCwweDYxLDB4YzAgfSB9LAoreyAgMTYsIDB4YTMxMCwgMCwgezB4MGIsMHg0MCwweDAyLDB4ZDQsMHgwMCwweDg0LDB4MDgsMHgyMywweGMyLDB4MDgsMHg1MCwweDAyLDB4NWUsMHhjMCwweDg0LDB4MDEgfSB9LAoreyAgMTYsIDB4YTMyMCwgMCwgezB4MmQsMHgwMCwweDhhLDB4MDgsMHgwMiwweDEwLDB4MjQsMHg4NCwweDA4LDB4NmQsMHgwMCwweDBhLDB4MDMsMHgxMiwweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTMzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4ZjUsMHg4MiwweDIxLDB4NjAgfSB9LAoreyAgMTYsIDB4YTM0MCwgMCwgezB4MGYsMHg3OCwweDAzLDB4ZDYsMHgwNCwweGFlLDB4ODAsMHgzMSwweGUwLDB4MGQsMHg1OCwweDIzLDB4N2UsMHgwMCwweGM2LDB4ODAgfSB9LAoreyAgMTYsIDB4YTM1MCwgMCwgezB4MmQsMHhlMCwweDBiLDB4NzgsMHgwMywweDhlLDB4MDAsMHhkNywweDgyLDB4M2QsMHhmMCwweDBjLDB4N2EsMHgwMywweDZhLDB4MDIgfSB9LAoreyAgMTYsIDB4YTM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhYywweDAwLDB4ZjEsMHgwMCwweGJhLDB4ZDggfSB9LAoreyAgMTYsIDB4YTM3MCwgMCwgezB4MGYsMHg4MCwweDAzLDB4ZTQsMHgxMiwweGY4LDB4MDAsMHhiZSwweDgwLDB4MGUsMHgxMCwweDAzLDB4ZWMsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTM4MCwgMCwgezB4M2UsMHgwMCwweDVmLDB4ODAsMHgwMywweGUwLDB4MDgsMHhmOCwweDA0LDB4M2MsMHgwMCwweDBmLDB4ODAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4YTM5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhmZSwweDIwLDB4ZmYsMHg4MCwweDNmLDB4ZjAgfSB9LAoreyAgMTYsIDB4YTNhMCwgMCwgezB4MGYsMHhmOCwweDAzLDB4ZDIsMHgwMCwweGVmLDB4ODQsMHhiMywweDYxLDB4MGMsMHhiOSwweDAzLDB4ZmUsMHgwMCwweGZmLDB4ODAgfSB9LAoreyAgMTYsIDB4YTNiMCwgMCwgezB4MzMsMHhlMCwweDBjLDB4ZjgsMHgxMywweDIyLDB4MTEsMHhjZCwweDkwLDB4M2YsMHg2MCwweDBjLDB4ZTgsMHgwMywweDEwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTNjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDAwLDB4ZjUsMHgwMCwweDJkLDB4YzAgfSB9LAoreyAgMTYsIDB4YTNkMCwgMCwgezB4MGIsMHgwMCwweDAyLDB4ZDQsMHgwNCwweDg0LDB4MjAsMHgyMywweDQwLDB4MDgsMHg1YSwweDAyLDB4ZGMsMHgwMCwweGI0LDB4MDAgfSB9LAoreyAgMTYsIDB4YTNlMCwgMCwgezB4MjEsMHgwMCwweDI4LDB4YzIsMHgwMiwweDFlLDB4MDQsMHg4NiwweDA0LDB4MmQsMHg4OCwweDA4LDB4ZDAsMHgwMiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YTNmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDAsMHg5YywweDAwLDB4YjUsMHgwMCwweDJkLDB4NDAgfSB9LAoreyAgMTYsIDB4YTQwMCwgMCwgezB4MGIsMHg3MCwweDAyLDB4ZjQsMHgyMCwweGE3LDB4MDQsMHgyMSwweGMwLDB4MGEsMHg1MCwweDAyLDB4ZGMsMHgwMCwweGJlLDB4MDAgfSB9LAoreyAgMTYsIDB4YTQxMCwgMCwgezB4MjEsMHhjMCwweDA4LDB4NzAsMHgxMiwweDAwLDB4MDAsMHg4NSwweDAwLDB4MmQsMHg0MCwweDg4LDB4NjgsMHgwYSwweDA0LDB4MDAgfSB9LAoreyAgMTYsIDB4YTQyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MTQsMHhjYywweDAwLDB4YTEsMHgwMCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4YTQzMCwgMCwgezB4MWIsMHgwOCwweDA2LDB4YzQsMHgyMCwweDgwLDB4MDAsMHgyMCwweDk4LDB4MWEsMHgxMCwweDAyLDB4Y2MsMHgwMCwweGIxLDB4MDggfSB9LAoreyAgMTYsIDB4YTQ0MCwgMCwgezB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDBjLDB4MDEsMHg4MiwweGMwLDB4MmMsMHhhYywweDI4LDB4OTAsMHgyMiwweDE4LDB4MDQgfSB9LAoreyAgMTYsIDB4YTQ1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAwLDB4YjMsMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4YTQ2MCwgMCwgezB4MGYsMHhiYSwweDAzLDB4ZTUsMHgwMiwweGU5LDB4MDQsMHgzMiwweDkwLDB4YWUsMHhiMCwweDAzLDB4ZmMsMHgxMCwweGZiLDB4NDAgfSB9LAoreyAgMTYsIDB4YTQ3MCwgMCwgezB4YjIsMHgwMCwweDBjLDB4ODAsMHgwYiwweDJjLDB4MDIsMHg4MiwweDE4LDB4M2YsMHhhMCwweDBjLDB4ZDAsMHgwMywweDJlLDB4MDQgfSB9LAoreyAgMTYsIDB4YTQ4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkwLDB4MDAsMHhlYywweDA0LDB4ZmIsMHgwMSwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4YTQ5MCwgMCwgezB4MGYsMHhiNiwweDQzLDB4ZTQsMHgwMCwweGY4LDB4MDAsMHgzZSwweDgwLDB4MDEsMHg5MCwweDAzLDB4ZWMsMHgwMCwweGY4LDB4ODEgfSB9LAoreyAgMTYsIDB4YTRhMCwgMCwgezB4M2UsMHhkMCwweDBkLDB4YjQsMHg1MywweGUwLDB4MDAsMHhmOSwweDQwLDB4M2UsMHg0MCwweDBmLDB4YTAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTRiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhkYywweDAyLDB4Y2QsMHg4MCwweDMzLDB4NjAgfSB9LAoreyAgMTYsIDB4YTRjMCwgMCwgezB4MmMsMHhkYSwweDAzLDB4ZmMsMHgwMCwweGVjLDB4MDAsMHgzMywweDQwLDB4MGYsMHhmMiwweDAzLDB4N2MsMHgwNCwweGZlLDB4MDAgfSB9LAoreyAgMTYsIDB4YTRkMCwgMCwgezB4MzIsMHgwMCwweDBjLDB4YzgsMHgwMywweDNjLDB4MDAsMHhjZSwweDAwLDB4MzEsMHg4MCwweDBjLDB4ZDEsMHgwMywweDI0LDB4MDQgfSB9LAoreyAgMTYsIDB4YTRlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkxLDB4MDQsMHg2YywweDAwLDB4MDksMHgwMCwweDJhLDB4NjQgfSB9LAoreyAgMTYsIDB4YTRmMCwgMCwgezB4MDgsMHg4ZSwweDAyLDB4YzIsMHgxMCwweGEwLDB4MTAsMHgzZSwweDEwLDB4MGIsMHg5OCwweDAyLDB4ZWMsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTUwMCwgMCwgezB4MDIsMHhkOCwweDA4LDB4YmUsMHgyMiwweDIwLDB4MDAsMHg4OSwweDAwLDB4MjIsMHg1MCwweDA4LDB4YTAsMHgwMiwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4YTUxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4MGIsMHgyMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4YTUyMCwgMCwgezB4MDgsMHhhMCwweDAyLDB4ZTUsMHg0MiwweGFiLDB4MDQsMHgyMiwweDE4LDB4MGIsMHhiMCwweDAyLDB4NmMsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YTUzMCwgMCwgezB4MjAsMHgwNCwweDA4LDB4MDEsMHgwMiwweDAwLDB4MDQsMHhhOCwweDQwLDB4MjIsMHgxMCwweDA4LDB4ODAsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTU0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDA4LDB4ODMsMHgwMCwweDI4LDB4NDAgfSB9LAoreyAgMTYsIDB4YTU1MCwgMCwgezB4MDgsMHgwNCwweDAyLDB4YzQsMHgwMiwweGE4LDB4MDAsMHgyYywweDAwLDB4MGIsMHgxMiwweDAyLDB4Y2MsMHgwMCwweGIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTU2MCwgMCwgezB4MjAsMHhjMCwweDQwLDB4MzAsMHgwMiwweDBjLDB4MDAsMHg4YiwweDAwLDB4YTgsMHhjMCwweDA4LDB4MzAsMHgwMiwweDAyLDB4MTEgfSB9LAoreyAgMTYsIDB4YTU3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MGQsMHg2YywweDAwLDB4YzksMHgwMCwweDMzLDB4NDAgfSB9LAoreyAgMTYsIDB4YTU4MCwgMCwgezB4MGMsMHhiMCwweDAzLDB4ZWMsMHgwMiwweGViLDB4MDAsMHgzMiwweDQwLDB4MGYsMHhiMCwweDAzLDB4NmMsMHgwMCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTU5MCwgMCwgezB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMywweDIwLDB4ODAsMHhjOCwweDAwLDB4MzAsMHgwMCwweDBjLDB4ODAsMHgwMywweDIwLDB4MDMgfSB9LAoreyAgMTYsIDB4YTVhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTksMHhmYywweDAwLDB4ZmQsMHgwMCwweDNmLDB4NDAgfSB9LAoreyAgMTYsIDB4YTViMCwgMCwgezB4MGYsMHhjMiwweDEzLDB4ZjAsMHgwMCwweGY0LDB4MDAsMHgzZiwweDAwLDB4NGYsMHhkNCwweDAzLDB4ZmMsMHgwMCwweGY1LDB4MDAgfSB9LAoreyAgMTYsIDB4YTVjMCwgMCwgezB4M2YsMHhjMCwweDhmLDB4ZjAsMHgwMywweGZjLDB4NDAsMHhmZiwweDAwLDB4MzcsMHhjMCwweDJmLDB4ZjAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4YTVkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmMCwweDAwLDB4Y2MsMHgwMCwweDMzLDB4MDAgfSB9LAoreyAgMTYsIDB4YTVlMCwgMCwgezB4MGUsMHhkMCwweDBiLDB4MzMsMHgwMCwweGNjLDB4MDAsMHgzMywweGUwLDB4MGYsMHhjMCwweDgzLDB4N2MsMHgwMCwweGNmLDB4MjAgfSB9LAoreyAgMTYsIDB4YTVmMCwgMCwgezB4N2IsMHgwOSwweDhjLDB4ZjgsMHgwMywweGZlLDB4NTAsMHhjZiwweDM4LDB4M2YsMHhlMSwweDBkLDB4YzIsMHgwMywweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTYwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlMiwweDAwLDB4OTgsMHgwOCwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4YTYxMCwgMCwgezB4MDgsMHg5OCwweDAyLDB4MjAsMHgwMCwweDg4LDB4ZDAsMHgyMiwweGUwLDB4MGUsMHhiNCwweDIyLDB4N2QsMHgxOSwweDlmLDB4NjkgfSB9LAoreyAgMTYsIDB4YTYyMCwgMCwgezB4MmUsMHg5MCwweDA4LDB4MzAsMHg5MiwweDI4LDB4ODEsMHhkYiwweDY0LDB4MmUsMHhlMSwweDg4LDB4MTYsMHhhMiwweGUwLDB4MDQgfSB9LAoreyAgMTYsIDB4YTYzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjOCwweDAwLDB4OTAsMHgyNCwweDIwLDB4MDEgfSB9LAoreyAgMTYsIDB4YTY0MCwgMCwgezB4MDgsMHgxMCwweDE2LDB4MDAsMHg4MiwweDgzLDB4MDEsMHgyOCwweGMxLDB4MGIsMHgwMiwweDgyLDB4MGMsMHhlMCwweGEzLDB4MTAgfSB9LAoreyAgMTYsIDB4YTY1MCwgMCwgezB4MjgsMHgwZSwweDFiLDB4OTIsMHgwMiwweDg0LDB4ODQsMHg5MywweDIwLDB4MmUsMHhjMCwweDA4LDB4MzEsMHgwMiwweGUyLDB4MDEgfSB9LAoreyAgMTYsIDB4YTY2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhOCwweDEwLDB4OTgsMHgwMCwweDIyLDB4ODAgfSB9LAoreyAgMTYsIDB4YTY3MCwgMCwgezB4MDgsMHg5MCwweDAyLDB4MDAsMHg2MCwweDhhLDB4MTAsMHgyYSwweGMwLDB4MGEsMHgyMCwweDAyLDB4NmMsMHgxOCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4YTY4MCwgMCwgezB4NmUsMHg2MCwweDJiLDB4OTAsMHgwMiwweDQ2LDB4MjAsMHg4YiwweDAwLDB4MmUsMHhjMiwweDA4LDB4YjEsMHg4MiwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4YTY5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTEsMHhlNCwweDAyLDB4Y2IsMHgwMCwweGIyLDB4NDAgfSB9LAoreyAgMTYsIDB4YTZhMCwgMCwgezB4MmMsMHg5MiwweDAzLDB4MjcsMHgwMCwweDg4LDB4MDAsMHhiYSwweGMwLDB4MGYsMHg4OCwweDAzLDB4MmMsMHgwMCwweGViLDB4MDQgfSB9LAoreyAgMTYsIDB4YTZiMCwgMCwgezB4M2EsMHhhMCwweGNmLDB4MmMsMHhhMywweGVkLDB4MDAsMHg5YiwweDAwLDB4M2MsMHhmMCwweDJkLDB4OGMsMHgzMywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4YTZjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiNCwweDA0LDB4ZWYsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YTZkMCwgMCwgezB4MGQsMHg1MSwweDAzLDB4ZjAsMHgwMCwweGYxLDB4ODEsMHgzNywweGMwLDB4MGUsMHhmNCwweDAzLDB4OWMsMHgxMCwweGNmLDB4MDAgfSB9LAoreyAgMTYsIDB4YTZlMCwgMCwgezB4M2QsMHg4MCwweDBjLDB4ZWMsMHgwNywweGI4LDB4MDgsMHhmZiwweDAyLDB4MWYsMHhjNCwweDBmLDB4YzgsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTZmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHg5ZSwweDAwLDB4YzMsMHgwMCwweDM4LDB4NDAgfSB9LAoreyAgMTYsIDB4YTcwMCwgMCwgezB4MGMsMHg5MiwweDAzLDB4YTQsMHg4MCwweGZiLDB4MjAsMHgzYSwweGMwLDB4MGQsMHg5NCwweDAzLDB4MmMsMHg0MCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4YTcxMCwgMCwgezB4M2UsMHgwMSwweDBmLDB4ODAsMHgwMywweGU1LDB4MDAsMHhlYiwweDAwLDB4M2EsMHhjMCwweDBkLDB4ODQsMHgwYiwweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YTcyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyYywweDA4LDB4OGIsMHgwMiwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4YTczMCwgMCwgezB4MDgsMHg5MiwweDAzLDB4MjEsMHgwMCwweDhiLDB4NDgsMHgyMiwweGMwLDB4MGIsMHhiNywweDAyLDB4M2QsMHg0MCwweDNmLDB4MDEgfSB9LAoreyAgMTYsIDB4YTc0MCwgMCwgezB4MjIsMHg3NCwweDBiLDB4OTAsMHgwMiwweDI4LDB4MDQsMHhiZiwweDAwLDB4YjIsMHhjMCwweDBiLDB4ODUsMHgwMiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4YTc1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0MCwweDAxLDB4ODAsMHgwMCwweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTc2MCwgMCwgezB4MDgsMHgyYywweDEyLDB4ODgsMHg0MCwweGIwLDB4NDAsMHgwOCwweGMwLDB4MGIsMHgxOCwweDAyLDB4MGUsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YTc3MCwgMCwgezB4MjgsMHgyMCwweDExLDB4MzAsMHgwMiwweDBjLDB4MDAsMHhiMywweDAwLDB4MjQsMHgwMCwweDA5LDB4MDAsMHgwNiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTc4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxMiwweDAwLDB4ODQsMHg4MCwweDIxLDB4YTAgfSB9LAoreyAgMTYsIDB4YTc5MCwgMCwgezB4MjgsMHg2OCwweDEyLDB4M2EsMHgwMCwweDg0LDB4ODAsMHgyNSwweGUwLDB4OGIsMHg1OCwweDAyLDB4MWUsMHg0MCwweGI3LDB4ODIgfSB9LAoreyAgMTYsIDB4YTdhMCwgMCwgezB4MjEsMHhhNiwweDBiLDB4NzgsMHgwMiwweDFhLDB4MDAsMHhiNywweDgwLDB4MjEsMHgyMCwweDBiLDB4NTgsMHgwMiwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTdiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwOCwweDAwLDB4YzgsMHgyMSwweDM4LDB4MDkgfSB9LAoreyAgMTYsIDB4YTdjMCwgMCwgezB4MGMsMHgyOCwweDAzLDB4ODAsMHgwMSwweGYxLDB4MDAsMHgzOCwweGMwLDB4MGQsMHg4NSwweDAyLDB4MGMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4YTdkMCwgMCwgezB4MzgsMHg4NSwweDBmLDB4MTAsMHgwMywweDhjLDB4MDAsMHhlYiwweDEwLDB4M2MsMHhjOCwweDBkLDB4MzAsMHgwMywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4YTdlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHg5OCwweDAwLDB4ZmMsMHgwMSwweDNmLDB4ODAgfSB9LAoreyAgMTYsIDB4YTdmMCwgMCwgezB4MGYsMHg2OCwweDAzLDB4ZDAsMHg0MCwweGZjLDB4MDAsMHgzYiwweGMwLDB4MGQsMHhjMCwweDAzLDB4ZmMsMHgyMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YTgwMCwgMCwgezB4M2IsMHhjNSwweDBmLDB4ZjAsMHgwYiwweGI0LDB4NDAsMHhmZiwweDE4LDB4M2YsMHgwMCwweDBmLDB4ZjEsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4YTgxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlNCwweDAwLDB4ZWIsMHgwMCwweGIwLDB4NDEgfSB9LAoreyAgMTYsIDB4YTgyMCwgMCwgezB4MGMsMHhhMCwweDAzLDB4ZTAsMHgwNCwweGNhLDB4MDQsMHhiMCwweGUwLDB4MGUsMHhiMCwweDAzLDB4ZWMsMHg4MCwweGNiLDB4MjAgfSB9LAoreyAgMTYsIDB4YTgzMCwgMCwgezB4MzIsMHg4MSwweDBjLDB4YTAsMHgwMywweGVlLDB4MDAsMHhkYiwweDAwLDB4M2UsMHgwMCwweDBlLDB4YjAsMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTg0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5NCwweDA0LDB4ODcsMHgwMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4YTg1MCwgMCwgezB4NDgsMHg2MCwweDAyLDB4ZjAsMHgwMCwweDg3LDB4MDAsMHgyMSwweGMwLDB4MDgsMHg3MCwweDAyLDB4ZmMsMHhhMCwweDgzLDB4MjggfSB9LAoreyAgMTYsIDB4YTg2MCwgMCwgezB4YTMsMHg4MCwweDA4LDB4NjAsMHgwMiwweGRjLDB4MDAsMHg4NywweDIwLDB4MmQsMHhjMCwweDBiLDB4NzAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4YTg3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5YywweDAyLDB4YTMsMHg4MCwweDIxLDB4NjAgfSB9LAoreyAgMTYsIDB4YTg4MCwgMCwgezB4MDgsMHg2OCwweDAyLDB4ZDIsMHgwMCwweDg3LDB4ODAsMHgyMSwweGUwLDB4MjksMHg3OCwweDAyLDB4ZGUsMHg4MCwweDg3LDB4OTAgfSB9LAoreyAgMTYsIDB4YTg5MCwgMCwgezB4MjEsMHhhMCwweDE5LDB4NDgsMHgwMiwweGZlLDB4MDAsMHg5NywweDgwLDB4MmQsMHhlMCwweDBhLDB4MzgsMHg4MiwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YThhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDAxLDB4ODMsMHg4MCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4YThiMCwgMCwgezB4MDgsMHgyMCwweDQyLDB4YzAsMHgzMCwweDgzLDB4NzAsMHhhMCwweGMwLDB4ODksMHgzNCwweDAyLDB4Y2MsMHgwMiwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4YThjMCwgMCwgezB4NjAsMHhjMCwweDI5LDB4MDAsMHgwMiwweGNlLDB4MDAsMHg4MywweDAwLDB4MmMsMHhjOCwweDBiLDB4YmMsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4YThkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOSwweDAwLDB4ZWEsMHhlMiwweDMyLDB4OTAgfSB9LAoreyAgMTYsIDB4YThlMCwgMCwgezB4MmMsMHhlMCwweDAzLDB4ZmIsMHgwMiwweGNlLDB4YzAsMHgzMiwweDgwLDB4MGYsMHhlNCwweDAzLDB4ZTgsMHgwMCwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4YThmMCwgMCwgezB4MzMsMHg4OCwweDBkLDB4NjQsMHhjMywweGZhLDB4MDAsMHhkYSwweDAwLDB4M2QsMHg5MCwweDBlLDB4ZTAsMHgwYiwweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4YTkwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhjMCwweDI0LDB4ZjgsMHgwOCwweDNlLDB4MTIgfSB9LAoreyAgMTYsIDB4YTkxMCwgMCwgezB4MGYsMHhjMCwweDAzLDB4ZTAsMHg0OCwweGYwLDB4MDAsMHgzZSwweDAwLDB4MGUsMHg4MCwweDkzLDB4YzAsMHgwMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTkyMCwgMCwgezB4N2UsMHgwMSwweDBlLDB4ODAsMHhjMiwweGUwLDB4NDAsMHhmOCwweDAwLDB4N2UsMHgwMCwweDhmLDB4ODQsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4YTkzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNSwweDAwLDB4YzEsMHgwMSwweDMyLDB4NDggfSB9LAoreyAgMTYsIDB4YTk0MCwgMCwgezB4MGMsMHg5OCwweDAzLDB4ZTYsMHg0MCwweGM5LDB4MDAsMHgzMiwweDQwLDB4MGYsMHg5MCwweDAzLDB4NjYsMHgwMCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTk1MCwgMCwgezB4MTgsMHg2MSwweDBjLDB4OTAsMHgwMywweDY0LDB4MjAsMHhmOSwweDA1LDB4M2UsMHg0MCwweDBjLDB4OTAsMHg4MywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4YTk2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NiwweDIwLDB4ODksMHgwMCwweDIwLDB4NTIgfSB9LAoreyAgMTYsIDB4YTk3MCwgMCwgezB4MjgsMHgxMCwweGMyLDB4MjYsMHgwMiwweGE5LDB4MDAsMHgyMiwweDQwLDB4MGIsMHg5MCwweDBhLDB4MjcsMHgwMCwweGE5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTk4MCwgMCwgezB4MjIsMHg3MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDgsMHhiOSwweDAwLDB4MmUsMHg0MCwweDBhLDB4OTAsMHgwYSwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTk5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAyLDB4OGQsMHgwMCwweDIzLDB4NDAgfSB9LAoreyAgMTYsIDB4YTlhMCwgMCwgezB4MDgsMHhkMSwweDAyLDB4ODQsMHgyMCwweDg5LDB4MDAsMHgyMiwweDYwLDB4MGIsMHgxMSwweGYyLDB4MjQsMHhiMCwweDgxLDB4MDAgfSB9LAoreyAgMTYsIDB4YTliMCwgMCwgezB4MmEsMHg0NiwweDA4LDB4OTAsMHg0MiwweDY0LDB4MDgsMHhiOSwweDAwLDB4MmUsMHg0MCwweDA4LDB4OTIsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YTljMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgxNCwweDgwLDB4ODUsMHgyMCwweDIzLDB4NDggfSB9LAoreyAgMTYsIDB4YTlkMCwgMCwgezB4MDgsMHg1MiwweDAyLDB4ODQsMHgwOCwweDgxLDB4MDAsMHgyMCwweDQwLDB4MGIsMHgxMiwweDAyLDB4MDQsMHg4MCwweGExLDB4MjAgfSB9LAoreyAgMTYsIDB4YTllMCwgMCwgezB4MjgsMHg0OSwweDI4LDB4OTAsMHgwMiwweDA0LDB4MDAsMHgzMSwweDIwLDB4MmUsMHg0MCwweDA4LDB4MzIsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YTlmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4YzgsMHg1MCwweGIyLDB4MTQgfSB9LAoreyAgMTYsIDB4YWEwMCwgMCwgezB4MGMsMHhjMCwweDAzLDB4YTEsMHg0MCwweGM4LDB4MDAsMHhiMiwweDAwLDB4MDcsMHg4NSwweDAzLDB4MjEsMHg0MCwweGM4LDB4NTAgfSB9LAoreyAgMTYsIDB4YWExMCwgMCwgezB4M2EsMHgxNSwweDBjLDB4ODUsMHgwMywweDYxLDB4NDAsMHhmOCwweDUxLDB4M2UsMHgwMCwweDJjLDB4ODUsMHgwMywweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4YWEyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhjNCwweDQ4LDB4ZjksMHgxMCwweDNlLDB4NDQgfSB9LAoreyAgMTYsIDB4YWEzMCwgMCwgezB4NGYsMHg5MSwweDAzLDB4NzQsMHgwMCwweGY1LDB4NDQsMHgzZSwweDQwLDB4MGYsMHhkMSwweDAzLDB4ZTQsMHg0MCwweGY5LDB4MTAgfSB9LAoreyAgMTYsIDB4YWE0MCwgMCwgezB4MzcsMHg0NCwweDBmLDB4ZDAsMHgwMywweGQ0LDB4MDAsMHhmOSwweDEwLDB4M2YsMHhjMCwweDBmLDB4ZDEsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4YWE1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhmNiwweGEwLDB4ZGQsMHg4YywweDMzLDB4NzggfSB9LAoreyAgMTYsIDB4YWE2MCwgMCwgezB4MGUsMHhkYSwweDAzLDB4MzUsMHgwMCwweGNkLDB4YTAsMHgzMywweDQwLDB4MGQsMHhmOCwweDBiLDB4MzYsMHg4MSwweGU5LDB4ODAgfSB9LAoreyAgMTYsIDB4YWE3MCwgMCwgezB4MzMsMHg3MCwweDBjLDB4OTEsMHgwMywweGU0LDB4NDAsMHhmOSwweGMwLDB4M2UsMHhjMCwweDBmLDB4ZGMsMHgwMywweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4YWE4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMSwweDA0LDB4YjgsMHg0MCwweDIwLDB4M2MgfSB9LAoreyAgMTYsIDB4YWE5MCwgMCwgezB4MGMsMHg4NSwweDAyLDB4MDIsMHg4NCwweDhhLDB4NDAsMHgyMiwweDAwLDB4MDgsMHg4ZiwweDgyLDB4MjMsMHgwMCwweGI4LDB4ZTggfSB9LAoreyAgMTYsIDB4YWFhMCwgMCwgezB4MjIsMHgyMCwweDA4LDB4ODgsMHgwMiwweGUyLDB4MDAsMHhiOCwweGQwLDB4MmUsMHgwMCwweDBiLDB4OGMsMHgwMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4YWFiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4OTEsMHgwMCwweDYwLDB4NDggfSB9LAoreyAgMTYsIDB4YWFjMCwgMCwgezB4NGIsMHgxMCwweDAyLDB4MDQsMHg4YSwweDgxLDB4NDAsMHg2MCwweDQwLDB4NDksMHgxMCwweDAyLDB4OGQsMHhhMCwweGExLDB4NDEgfSB9LAoreyAgMTYsIDB4YWFkMCwgMCwgezB4MjAsMHg1MCwweDA5LDB4MTIsMHgyMiwweGM0LDB4ODAsMHhiMSwweDIwLDB4MmMsMHg0MCwweDRiLDB4M2UsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4YWFlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNCwweDA4LDB4YjksMHgwNCwweGEwLDB4NDAgfSB9LAoreyAgMTYsIDB4YWFmMCwgMCwgezB4NDgsMHhiMCwweDAyLDB4MjQsMHgwMCwweDg5LDB4MDAsMHg4MiwweDQwLDB4MDgsMHg5MCwweGE2LDB4YTQsMHgwMCwweGI5LDB4MDQgfSB9LAoreyAgMTYsIDB4YWIwMCwgMCwgezB4MjIsMHg1NCwweDI5LDB4OTUsMHgwMiwweGU1LDB4NDAsMHhiOSwweDAwLDB4NmUsMHg0MCwweDBiLDB4OTIsMHgwMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4YWIxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDUsMHhlNCwweDAwLDB4OTEsMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4YWIyMCwgMCwgezB4MGYsMHg5MCwweDA5LDB4MjQsMHgwMCwweDg5LDB4OTAsMHgzMiwweDQwLDB4MGQsMHg5NCwweDAzLDB4YTQsMHgwMCwweGU5LDB4MDIgfSB9LAoreyAgMTYsIDB4YWIzMCwgMCwgezB4NzIsMHg2MCwweDBkLDB4OTQsMHgwMywweGU0LDB4MDEsMHhmOSwweDAxLDB4M2UsMHg2MCwweDBmLDB4OTAsMHgwMywweGU4LDB4MDQgfSB9LAoreyAgMTYsIDB4YWI0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNCwweDQwLDB4ZjksMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4YWI1MCwgMCwgezB4NGYsMHg5MCwweDAzLDB4ZTcsMHgxMCwweGY5LDB4ODAsMHgzZSwweDQwLDB4MGYsMHgxMCwweDEzLDB4NjQsMHgwMCwweGYxLDB4MDAgfSB9LAoreyAgMTYsIDB4YWI2MCwgMCwgezB4YmUsMHg0MCwweDBlLDB4OTAsMHgwMywweGU2LDB4MDgsMHhmOSwweDAxLDB4M2UsMHg2NCwweDBmLDB4OTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YWI3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDMyLDB4MDggfSB9LAoreyAgMTYsIDB4YWI4MCwgMCwgezB4MGMsMHgwMSwweDBiLDB4MjAsMHg0MCwweGM4LDB4NDAsMHgzMiwweDAwLDB4MGUsMHg4NCwweDgzLDB4MjAsMHgwMCwweGY4LDB4MDQgfSB9LAoreyAgMTYsIDB4YWI5MCwgMCwgezB4M2UsMHgwNCwweDBmLDB4ODAsMHgwMywweDIxLDB4MDAsMHhlOCwweDAwLDB4M2UsMHgxMCwweDBmLDB4ODgsMHgwMywweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4YWJhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgzOCwweDAwLDB4M2UsMHgwNCwweDIzLDB4ODAgfSB9LAoreyAgMTYsIDB4YWJiMCwgMCwgezB4MDgsMHhlYywweDEyLDB4MzksMHg0NCwweGE2LDB4MDAsMHgyOCwweDgxLDB4MDgsMHhlMCwweDAwLDB4MzgsMHgwOCwweGJhLDB4MDAgfSB9LAoreyAgMTYsIDB4YWJjMCwgMCwgezB4M2YsMHg4MCwweDBiLDB4YTAsMHgwMiwweGE4LDB4MDAsMHg4YSwweDAyLDB4MmUsMHg4MCwweDBiLDB4ZTAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YWJkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0OCwweDAwLDB4MzEsMHgwMCwweDI0LDB4ZDAgfSB9LAoreyAgMTYsIDB4YWJlMCwgMCwgezB4MDgsMHgzZSwweDEyLDB4YWUsMHgwOCwweDgxLDB4YTAsMHgyYywweGMwLDB4MGEsMHgzOCwweDAwLDB4NGMsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YWJmMCwgMCwgezB4NmUsMHhjMCwweDBhLDB4MzAsMHgwMiwweDBjLDB4MDAsMHhhMywweDAwLDB4NmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YWMwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxOCwweDAwLDB4YjUsMHgxMCwweDI1LDB4YzAgfSB9LAoreyAgMTYsIDB4YWMxMCwgMCwgezB4MjgsMHg2MCwweDEyLDB4OTAsMHgxMCwweGE1LDB4MDgsMHgyZCwweGMyLDB4MDgsMHg2NCwweDIyLDB4NTgsMHgxOCwweGI3LDB4MDAgfSB9LAoreyAgMTYsIDB4YWMyMCwgMCwgezB4MmQsMHg4MCwweDBiLDB4NzksMHgwMiwweGJlLDB4YzAsMHg4NywweDAxLDB4NmQsMHhjMCwweDBiLDB4NjAsMHgwMiwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4YWMzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4ZjUsMHg4NCwweDM1LDB4MjAgfSB9LAoreyAgMTYsIDB4YWM0MCwgMCwgezB4OGMsMHgxOCwweDAyLDB4OTIsMHgxMCwweGM1LDB4ODAsMHgzZCwweDYwLDB4MGUsMHhjOCwweDBiLDB4NWEsMHgwOCwweDc3LDB4ZjMgfSB9LAoreyAgMTYsIDB4YWM1MCwgMCwgezB4M2QsMHhhMCwweDBmLDB4ZjgsMHgwMywweDFlLDB4YjAsMHhlNywweDg1LDB4M2QsMHhlMCwweDBmLDB4NzgsMHgwMywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4YWM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhYywweDAwLDB4ZjEsMHgwNCwweGJhLDB4MDEgfSB9LAoreyAgMTYsIDB4YWM3MCwgMCwgezB4MGYsMHhhMCwweDQzLDB4NjAsMHgwOSwweGUxLDB4MDAsMHgzOCwweDQwLDB4MGUsMHhhMCwweDAzLDB4YTgsMHgxNCwweGZiLDB4MjAgfSB9LAoreyAgMTYsIDB4YWM4MCwgMCwgezB4M2EsMHg4MCwweDBmLDB4YjQsMHgxYiwweDRjLDB4ODAsMHhmYiwweDI5LDB4M2UsMHhjMCwweDBmLDB4YjAsMHgyMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4YWM5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmYSwweDAwLDB4Y2QsMHg4MCwweDNiLDB4ZTAgfSB9LAoreyAgMTYsIDB4YWNhMCwgMCwgezB4NGUsMHhmOCwweDAzLDB4ZjIsMHgwMiwweGQ0LDB4ODEsMHgzYiwweGUwLDB4OGUsMHg5OCwweDA3LDB4M2UsMHg0NCwweGVmLDB4OTEgfSB9LAoreyAgMTYsIDB4YWNiMCwgMCwgezB4M2YsMHhlMCwweDRmLDB4ZmMsMHgwNywweGVlLDB4ZDAsMHhjZiwweDk4LDB4MzMsMHhlNCwweDBmLDB4ZjgsMHgwMywweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YWNjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDEsMHg5OCwweDAwLDB4ODUsMHgxMCwweDJkLDB4YzQgfSB9LAoreyAgMTYsIDB4YWNkMCwgMCwgezB4MGQsMHgxMSwweDAyLDB4ZjAsMHgwMCwweDg1LDB4MjAsMHgzMSwweGM0LDB4MGIsMHg3YiwweDAwLDB4MzgsMHg0MCwweGQ3LDB4MTAgfSB9LAoreyAgMTYsIDB4YWNlMCwgMCwgezB4MmQsMHg4MCwweDBiLDB4NzAsMHg2MiwweGZlLDB4ZTEsMHg4NywweDE0LDB4MzksMHhjMCwweDBiLDB4NjAsMHgwMiwweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4YWNmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHhiYywweDQwLDB4YTUsMHgwMCwweDI5LDB4NDAgfSB9LAoreyAgMTYsIDB4YWQwMCwgMCwgezB4MGIsMHg1MCwweDgyLDB4ZGMsMHg0MCwweDg0LDB4MDQsMHgyZCwweGMwLDB4MGIsMHgxMCwweDA2LDB4NTgsMHg0NCwweGE3LDB4MTAgfSB9LAoreyAgMTYsIDB4YWQxMCwgMCwgezB4MmQsMHg4MCwweDBiLDB4NzEsMHgwMiwweGRjLDB4MDAsMHg4NywweDA0LDB4MjEsMHhjMiwweDBiLDB4NTAsMHgwMiwweGMwLDB4MTAgfSB9LAoreyAgMTYsIDB4YWQyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjYywweDBhLDB4YTEsMHgwMSwweDJjLDB4NDAgfSB9LAoreyAgMTYsIDB4YWQzMCwgMCwgezB4ODksMHgxOCwweDAyLDB4YzEsMHgwMCwweGExLDB4MDgsMHgyMCwweGMwLDB4MGIsMHgzNCwweDA2LDB4NDAsMHgwMCwweDkzLDB4MDUgfSB9LAoreyAgMTYsIDB4YWQ0MCwgMCwgezB4MmMsMHgxNCwweDBiLDB4M2MsMHg4NiwweGNlLDB4MTAsMHg4MywweDAxLDB4MjgsMHhmMSwweDBiLDB4MTQsMHgwMiwweGM4LDB4MDQgfSB9LAoreyAgMTYsIDB4YWQ1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhMCwweDAwLDB4ZWQsMHgwMCwweDNhLDB4YzAgfSB9LAoreyAgMTYsIDB4YWQ2MCwgMCwgezB4MDcsMHhiYywweDYzLDB4ZWQsMHgwMCwweDgxLDB4NDAsMHgzZSwweGMwLDB4MGUsMHg4OCwweDAzLDB4NjQsMHgwMCwweGVmLDB4MDAgfSB9LAoreyAgMTYsIDB4YWQ3MCwgMCwgezB4N2UsMHg1MCwweDBmLDB4ZjAsMHgwMiwweGZkLDB4NDIsMHhjZiwweDAwLDB4NzIsMHhjMCwweDFmLDB4YjQsMHgwMywweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4YWQ4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlOCwweDAwLDB4OTksMHgwMCwweDNlLDB4ZTAgfSB9LAoreyAgMTYsIDB4YWQ5MCwgMCwgezB4NGYsMHhiNCwweDgzLDB4ZWQsMHg5MCwweDA5LDB4NDAsMHgzZSwweGMwLDB4MGYsMHhhMSwweDgzLDB4YTgsMHgwMSwweGViLDB4MDEgfSB9LAoreyAgMTYsIDB4YWRhMCwgMCwgezB4M2UsMHgwMCwweDBmLDB4YjEsMHgxMywweGVjLDB4MGMsMHhmYiwweDAwLDB4M2EsMHhjMCwweDVmLDB4MjAsMHgyMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YWRiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmOCwweDAwLDB4ZmQsMHgwNCwweDNmLDB4YjAgfSB9LAoreyAgMTYsIDB4YWRjMCwgMCwgezB4MGQsMHg2MCwweDAzLDB4M2UsMHgwMCwweGNkLDB4MDAsMHgzMywweGYwLDB4MGYsMHhmMiwweDAxLDB4ZjAsMHgwMCwweGZmLDB4MDMgfSB9LAoreyAgMTYsIDB4YWRkMCwgMCwgezB4M2YsMHgwMywweDBmLDB4ZjAsMHgwMSwweGZjLDB4MDAsMHhmYiwweDAyLDB4MzMsMHhjMiwweDBmLDB4ZjAsMHhlMywweDAwLDB4NDQgfSB9LAoreyAgMTYsIDB4YWRlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2YSwweDAwLDB4YjksMHgwMiwweDJlLDB4YTAgfSB9LAoreyAgMTYsIDB4YWRmMCwgMCwgezB4NGEsMHhhYywweDAyLDB4MGUsMHg4MCwweGY5LDB4YzAsMHgzNiwweGUxLDB4MGIsMHhhMCwweDAyLDB4MmEsMHgwOCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4YWUwMCwgMCwgezB4MmUsMHgyMCwweDBlLDB4YjAsMHgwMiwweGVjLDB4MDAsMHhlYiwweDAwLDB4MjIsMHhjMCwweDhiLDB4YjAsMHgwMiwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4YWUxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDEsMHgyMywweDAwLDB4YTksMHgwMCwweDI4LDB4YzAgfSB9LAoreyAgMTYsIDB4YWUyMCwgMCwgezB4MDksMHhiMiwweDIyLDB4NmMsMHg0MCwweDg5LDB4ODksMHgyYSwweGMwLDB4MGIsMHgxNCwweDA2LDB4MjYsMHgwMCwweGFiLDB4MDIgfSB9LAoreyAgMTYsIDB4YWUzMCwgMCwgezB4NmUsMHhlMCwweDA5LDB4YjAsMHgwNiwweDZjLDB4MDAsMHhiMywweDAyLDB4MjIsMHhjMCwweDBiLDB4YjAsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YWU0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwOCwweDAwLDB4YjEsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YWU1MCwgMCwgezB4MGEsMHgzMCwweDAyLDB4MmMsMHgwMCwweGJiLDB4MDAsMHg2NCwweGMwLDB4MGIsMHgzMiwweDBhLDB4MDgsMHgwMCwweDMzLDB4MDAgfSB9LAoreyAgMTYsIDB4YWU2MCwgMCwgezB4NmMsMHg4MCwweDAyLDB4MzAsMHg0NiwweGNjLDB4MTgsMHhhMywweDAwLDB4MjAsMHhjMCwweDBiLDB4MjgsMHgwMiwweDAyLDB4MTEgfSB9LAoreyAgMTYsIDB4YWU3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHg2OCwweDAwLDB4ZTksMHgwMCwweDM4LDB4YzEgfSB9LAoreyAgMTYsIDB4YWU4MCwgMCwgezB4MGQsMHhiMSwweDBiLDB4MmMsMHgwMCwweDg5LDB4MDAsMHgzYSwweGMwLDB4MGIsMHg5MCwweDAzLDB4NjAsMHgwMCwweGZmLDB4MDIgfSB9LAoreyAgMTYsIDB4YWU5MCwgMCwgezB4M2UsMHg4MCwweDBmLDB4ZjAsMHgwMywweGZjLDB4ODAsMHhmZiwweDAwLDB4MzIsMHhjMCwweDhmLDB4ODAsMHgwYiwweDAwLDB4MDMgfSB9LAoreyAgMTYsIDB4YWVhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTEsMHhkOCwweDAwLDB4ZmQsMHgwNCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YWViMCwgMCwgezB4MmYsMHhmMiwweDAzLDB4ZmMsMHgxMSwweGVmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmNCwweDQzLDB4NzAsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YWVjMCwgMCwgezB4M2YsMHgwMCwweDQ2LDB4ZjAsMHgwMywweGZkLDB4MDAsMHhlZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4YzAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4YWVkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmZSwweDAwLDB4ZmYsMHg4MCwweDNkLDB4ZTAgfSB9LAoreyAgMTYsIDB4YWVlMCwgMCwgezB4MGMsMHhmOSwweDEzLDB4ZGUsMHgwMCwweDdmLDB4ODAsMHhiMywweGUwLDB4MGYsMHhmYywweDAzLDB4YmUsMHg0MCwweGNmLDB4ODAgfSB9LAoreyAgMTYsIDB4YWVmMCwgMCwgezB4MzMsMHhmMCwweDBmLDB4ZjgsMHgwMywweDdjLDB4MDQsMHhjYywweDgwLDB4MzMsMHhhMCwweDBjLDB4ZjAsMHgwYiwweDMwLDB4MDEgfSB9LAoreyAgMTYsIDB4YWYwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlMCwweDIwLDB4ODgsMHgwMCwweDJlLDB4MjAgfSB9LAoreyAgMTYsIDB4YWYxMCwgMCwgezB4MDgsMHg4MiwweDEyLDB4ZTAsMHg4MCwweGE4LDB4ODEsMHgyMiwweDAyLDB4MGIsMHg4MCwweDAyLDB4MjAsMHg4MCwweGE4LDB4ODAgfSB9LAoreyAgMTYsIDB4YWYyMCwgMCwgezB4MjIsMHgwOCwweDBiLDB4ODAsMHgwMiwweDJjLDB4MDIsMHg4OCwweDA0LDB4YWEsMHgyMCwweDA4LDB4YjAsMHgwMiwweDIwLDB4MDQgfSB9LAoreyAgMTYsIDB4YWYzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhlYywweDAwLDB4YTMsMHgwOCwweDJjLDB4ODAgfSB9LAoreyAgMTYsIDB4YWY0MCwgMCwgezB4MDgsMHgzMiwweDAyLDB4YzQsMHgyMCwweGEzLDB4MDAsMHgyOCwweDQwLDB4MGIsMHg5MiwweDAyLDB4ODQsMHgwMCwweGE5LDB4MDEgfSB9LAoreyAgMTYsIDB4YWY1MCwgMCwgezB4MjgsMHhjOCwweDFiLDB4MTIsMHg4MiwweGNjLDB4NDAsMHhhOCwweDAwLDB4MjQsMHhlMCwweDBhLDB4MzAsMHg0MiwweDIyLDB4MDEgfSB9LAoreyAgMTYsIDB4YWY2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTEsMHhhOCwweDgwLDB4YTgsMHgwMiwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4YWY3MCwgMCwgezB4NjgsMHg4MCwweDEwLDB4YzgsMHgwMCwweGI4LDB4NDAsMHgyYSwweDkwLDB4MGIsMHhhMCwweDAwLDB4MjgsMHgwMCwweGFhLDB4MDggfSB9LAoreyAgMTYsIDB4YWY4MCwgMCwgezB4MmEsMHgwMiwweDAzLDB4MjAsMHgwMiwweDhjLDB4MDAsMHhhOCwweDg4LDB4MmUsMHgyMCwweDBhLDB4YjAsMHgwMiwweDMwLDB4MDQgfSB9LAoreyAgMTYsIDB4YWY5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlOCwweDA0LDB4ZmEsMHgwMCwweDNjLDB4NDAgfSB9LAoreyAgMTYsIDB4YWZhMCwgMCwgezB4MGMsMHhhMCwweDAzLDB4ZTgsMHgwMCwweGViLDB4MDAsMHgzYSwweGMwLDB4MGYsMHgyMCwweDUzLDB4YTgsMHgwMCwweGUzLDB4NDAgfSB9LAoreyAgMTYsIDB4YWZiMCwgMCwgezB4MmEsMHg0MCwweDBmLDB4YTAsMHgwMywweDZjLDB4MDAsMHhhOCwweDgwLDB4MzQsMHgyMCwweDFlLDB4YjAsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YWZjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiNCwweDAwLDB4OWQsMHg5MSwweDNmLDB4ODAgfSB9LAoreyAgMTYsIDB4YWZkMCwgMCwgezB4MGYsMHhkYSwweDIzLDB4ZjQsMHgwMCwweGNjLDB4MjAsMHgzNywweDAwLDB4MDcsMHhkMCwweDEzLDB4NzQsMHgwMCwweGJjLDB4MDAgfSB9LAoreyAgMTYsIDB4YWZlMCwgMCwgezB4YjcsMHg4MCwweDBiLDB4ZDAsMHg0MywweDdjLDB4MDAsMHhkYywweDA0LDB4M2IsMHgwMCwweDZkLDB4ZjAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YWZmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhOCwweDAwLDB4ZmEsMHg4MCwweDNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjAwMCwgMCwgezB4MmMsMHhhMCwweDBiLDB4MjAsMHgwMiwweGNiLDB4NjIsMHgzZSwweDUwLDB4MGUsMHg4OCwweDAzLDB4MjAsMHgwMCwweGQ5LDB4MTAgfSB9LAoreyAgMTYsIDB4YjAxMCwgMCwgezB4M2UsMHg3MCwweDhjLDB4ODAsMHgzMywweGVjLDB4ODAsMHhkOCwweDQwLDB4M2EsMHgwMiwweDBkLDB4YjAsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YjAyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDEsMHgwYywweDAwLDB4MzksMHg4MCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4YjAzMCwgMCwgezB4MGMsMHg5ZCwweDgyLDB4MmMsMHgxMCwweGQwLDB4NDAsMHgyZSwweGEwLDB4MDgsMHhiOCwweDAzLDB4NGUsMHgwMiwweDhhLDB4NDAgfSB9LAoreyAgMTYsIDB4YjA0MCwgMCwgezB4MGUsMHhhMCwweDBkLDB4YjAsMHgwMywweDNkLDB4MDAsMHhkMCwweDkwLDB4MzYsMHgxMCwweDBiLDB4ZjAsMHgwMiwweGIyLDB4MDAgfSB9LAoreyAgMTYsIDB4YjA1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4YjEsMHgwMCwweDYwLDB4YzAgfSB9LAoreyAgMTYsIDB4YjA2MCwgMCwgezB4OGEsMHgxOCwweDAyLDB4OGMsMHgwOCwweDgwLDB4NDAsMHgwYywweGEwLDB4MDIsMHgzMCwweDAyLDB4Y2UsMHgwMCwweDgyLDB4NDggfSB9LAoreyAgMTYsIDB4YjA3MCwgMCwgezB4MmMsMHg4MCwweDJiLDB4MzAsMHgwNiwweDhjLDB4MDAsMHg4MSwweDAyLDB4MjAsMHg5MCwweDA5LDB4YjAsMHgwMiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjA4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxMiwweDAwLDB4YjYsMHg5MCwweGEzLDB4MzAgfSB9LAoreyAgMTYsIDB4YjA5MCwgMCwgezB4MDgsMHhlOCwweDIyLDB4YjIsMHgxNCwweDg3LDB4ODAsMHgyZCwweDYwLDB4MDgsMHg0OSwweDEyLDB4MTIsMHg2MSwweDk1LDB4OTAgfSB9LAoreyAgMTYsIDB4YjBhMCwgMCwgezB4MmQsMHg2MSwweDBhLDB4NDgsMHgxNiwweDFlLDB4ODAsMHg5NSwweDgwLDB4MjUsMHgyMCwweDBiLDB4NzgsMHgwMiwweDg4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjBiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ZjEsMHgwMCwweDI4LDB4OGMgfSB9LAoreyAgMTYsIDB4YjBjMCwgMCwgezB4OGUsMHgxMCwweDAzLDB4ODQsMHg4MCwweDgwLDB4MDAsMHgyYywweDAyLDB4MGEsMHg5YSwweDAyLDB4ZTQsMHgwMCwweGQwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjBkMCwgMCwgezB4M2UsMHg4MCwweDBiLDB4OTEsMHgwMywweDhlLDB4ODAsMHhjMiwweDA4LDB4MzgsMHg4MCwweDBkLDB4YjAsMHgwMywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4YjBlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiMCwweDAwLDB4ZjYsMHgwMCwweDNmLDB4NDQgfSB9LAoreyAgMTYsIDB4YjBmMCwgMCwgezB4MGYsMHgyMSwweDEzLDB4NzgsMHgwMCwweGZmLDB4MDAsMHgzZCwweGMwLDB4MGYsMHhlMCwweDAzLDB4NzgsMHgwMCwweGVmLDB4MDQgfSB9LAoreyAgMTYsIDB4YjEwMCwgMCwgezB4M2YsMHg0MCwweDhkLDB4ZTgsMHgwMywweGRjLDB4MDQsMHhmNiwweDAwLDB4M2YsMHgwMCwweDBmLDB4ZjAsMHg4MywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4YjExMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlOCwweDAwLDB4ZTgsMHg4MCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4YjEyMCwgMCwgezB4MGYsMHg4OCwweDBiLDB4MjgsMHgwMCwweDc4LDB4MDIsMHgzZSwweDgwLDB4MGUsMHgyOCwweDAzLDB4MjgsMHgwMCwweGNhLDB4ODAgfSB9LAoreyAgMTYsIDB4YjEzMCwgMCwgezB4MzIsMHgwMCwweDBmLDB4YTAsMHgwMywweGVjLDB4MDAsMHhjOSwweDgwLDB4MzIsMHg4MCwweDBmLDB4YjAsMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjE0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg4YywweDAwLDB4OGYsMHgwMCwweGExLDB4ODAgfSB9LAoreyAgMTYsIDB4YjE1MCwgMCwgezB4MGIsMHg3MCwweDQyLDB4MTQsMHgwMCwweGI3LDB4MDAsMHgyZCwweDQxLDB4MGIsMHg1MCwweDQyLDB4MTQsMHgwMCwweGE1LDB4MDAgfSB9LAoreyAgMTYsIDB4YjE2MCwgMCwgezB4YTEsMHhjMCwweDBiLDB4NTAsMHgwMiwweGZjLDB4ODAsMHhhNSwweDAwLDB4MjEsMHgwMCwweDBiLDB4ZjIsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4YjE3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHhiYSwweDAwLDB4YTQsMHg4MCwweDI5LDB4MzAgfSB9LAoreyAgMTYsIDB4YjE4MCwgMCwgezB4NGIsMHg0OCwweDA2LDB4NTIsMHgwOCwweGI0LDB4ODAsMHgyZCwweDIwLDB4MGIsMHg0OCwweDQyLDB4MzIsMHgwMCwweDg0LDB4ODAgfSB9LAoreyAgMTYsIDB4YjE5MCwgMCwgezB4MjEsMHgyMCwweDBiLDB4NDgsMHgxMiwweGRlLDB4NDAsMHg4NiwweDgxLDB4MjksMHhhMCwweDBiLDB4NzgsMHgwYSwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjFhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDAwLDB4ODMsMHgwNSwweDIwLDB4ZTAgfSB9LAoreyAgMTYsIDB4YjFiMCwgMCwgezB4MGIsMHgzNCwweDAyLDB4NmMsMHgxMCwweGIzLDB4MDAsMHgyYywweGMwLDB4MGIsMHgzNiwweDRhLDB4MGQsMHgwZCwweGEzLDB4MDAgfSB9LAoreyAgMTYsIDB4YjFjMCwgMCwgezB4MjAsMHhjMCwweDBiLDB4MzQsMHg4MiwweGNjLDB4MDIsMHhhMiwweDAwLDB4MjgsMHgwMCwweDBiLDB4MzAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4YjFkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOSwweDIwLDB4ZWEsMHg0MCwweDMwLDB4YTAgfSB9LAoreyAgMTYsIDB4YjFlMCwgMCwgezB4MDcsMHhhMCwweDQzLDB4NjksMHg0MCwweGZhLDB4MDAsMHgzYywweDgwLDB4MGYsMHhhMCwweDAzLDB4MDgsMHg0MCwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjFmMCwgMCwgezB4MzAsMHhhMCwweDBmLDB4YTQsMHgwMywweGU4LDB4MDAsMHhjZSwweDAwLDB4M2IsMHg5OCwweDBmLDB4YTAsMHgwMywweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4YjIwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhkMiwweDAwLDB4ZmMsMHgwOCwweDNmLDB4MDAgfSB9LAoreyAgMTYsIDB4YjIxMCwgMCwgezB4MGIsMHhjMiwweDAzLDB4YjAsMHgwMCwweGZjLDB4MDAsMHgzZiwweDAwLDB4MGYsMHhjMCwweDAzLDB4ZjAsMHgwMCwweGZjLDB4MDAgfSB9LAoreyAgMTYsIDB4YjIyMCwgMCwgezB4M2YsMHgwNCwweDBmLDB4YzAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwLDB4YjYsMHgwMiwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4YjIzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZDksMHgwMCwweDNlLDB4NjggfSB9LAoreyAgMTYsIDB4YjI0MCwgMCwgezB4NGMsMHg5MSwweDAxLDB4ZTQsMHgwOCwweGM5LDB4MDAsMHgzZSwweDQwLDB4MmMsMHg5MiwweDAzLDB4ZTQsMHgwMiwweGM5LDB4YTAgfSB9LAoreyAgMTYsIDB4YjI1MCwgMCwgezB4M2UsMHg3MCwweDBlLDB4OTAsMHgwMywweGM2LDB4NDIsMHhjOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4MTAsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4YjI2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHg4NiwweDBlLDB4NjAgfSB9LAoreyAgMTYsIDB4YjI3MCwgMCwgezB4MDgsMHg5OCwweDAyLDB4ZTQsMHgwOCwweDg5LDB4MTAsMHgyZSwweDYwLDB4MDgsMHg5MCwweDAyLDB4ZTQsMHgwMCwweDg5LDB4MGMgfSB9LAoreyAgMTYsIDB4YjI4MCwgMCwgezB4MmUsMHg2MCwweDA4LDB4OTAsMHgwMiwweGU2LDB4ODgsMHg4OSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweGEwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjI5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4OWQsMHgxMCwweDJmLDB4NDAgfSB9LAoreyAgMTYsIDB4YjJhMCwgMCwgezB4MjgsMHhkMCwweDA2LDB4ZjQsMHgwMiwweGFkLDB4MDAsMHgyZiwweDYwLDB4MDgsMHhkMCwweDAyLDB4ZjQsMHgwMCwweDhkLDB4MDAgfSB9LAoreyAgMTYsIDB4YjJiMCwgMCwgezB4MmYsMHg0MCwweDBhLDB4ZDAsMHgwMiwweGU0LDB4MDAsMHg4OSwweDAwLDB4MmUsMHg2MCwweDBiLDB4OTAsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YjJjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgzNCwweDAwLDB4ODUsMHgwMCwweDJkLDB4NDAgfSB9LAoreyAgMTYsIDB4YjJkMCwgMCwgezB4MDgsMHg1OCwweDAyLDB4ZDQsMHgwMCwweGE1LDB4MDIsMHgyZCwweDQwLDB4MDgsMHg1MCwweDAwLDB4ZDQsMHgwMCwweDg1LDB4MDAgfSB9LAoreyAgMTYsIDB4YjJlMCwgMCwgezB4MmQsMHg0MCwweDA4LDB4NTQsMHgwMiwweGM0LDB4ODAsMHg4MSwweDAwLDB4MmMsMHg2MCwweDBiLDB4MTQsMHgwMiwweDgyLDB4MDEgfSB9LAoreyAgMTYsIDB4YjJmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZDgsMHg1MiwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YjMwMCwgMCwgezB4MGMsMHgwNSwweDAzLDB4ZTEsMHg0MCwweGU4LDB4MDQsMHgzZSwweDE0LDB4MGMsMHg4NSwweDAzLDB4ZTEsMHg0MCwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjMxMCwgMCwgezB4M2UsMHgxNCwweDBlLDB4YzAsMHgwMywweGUwLDB4MDAsMHhjMCwweDAyLDB4M2UsMHgwMCwweDRmLDB4ODAsMHgyMywweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4YjMyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhmNCwweDAwLDB4ZjksMHgwMSwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4YjMzMCwgMCwgezB4NGYsMHg5MCwweDEzLDB4ZTQsMHgwMCwweGQ5LDB4MDAsMHgxZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4YzQsMHgxMCwweGYxLDB4MDAgfSB9LAoreyAgMTYsIDB4YjM0MCwgMCwgezB4MWUsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4ZTAsMHhmZCwweDI4LDB4M2YsMHg0MCwweDBmLDB4OTQsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4YjM1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhhNCwweDAwLDB4ZmQsMHgwMCwweDNmLDB4NDAgfSB9LAoreyAgMTYsIDB4YjM2MCwgMCwgezB4NGQsMHg1MCwweDAyLDB4ZTQsMHgwMCwweDk1LDB4MDQsMHgzMywweDQwLDB4MjgsMHhkMCwweDAzLDB4ZjQsMHgwMCwweGZkLDB4MDAgfSB9LAoreyAgMTYsIDB4YjM3MCwgMCwgezB4MzMsMHg0MCwweDBmLDB4OTEsMHgwMywweDM0LDB4MDAsMHhjZCwweDQwLDB4MzMsMHg0MCwweDBmLDB4OTgsMHg4MSwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YjM4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMCwweDEwLDB4YjgsMHgwMCwweDJlLDB4MDAgfSB9LAoreyAgMTYsIDB4YjM5MCwgMCwgezB4MGIsMHg4MCwweDAyLDB4ZTAsMHgxMCwweGI4LDB4MDAsMHgyMiwweDAwLDB4MDgsMHg4MCwweDAyLDB4ZTAsMHgwMCwweGI4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjNhMCwgMCwgezB4MjIsMHgwMCwweDBiLDB4ODgsMHgwMywweGMyLDB4ODAsMHg4OCwweDgwLDB4MjIsMHgwMCwweDBiLDB4OGMsMHgwMiwweDBlLDB4MDQgfSB9LAoreyAgMTYsIDB4YjNiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHhjNCwweDAwLDB4YjEsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YjNjMCwgMCwgezB4MGIsMHgxMCwweDAyLDB4YzQsMHgwMCwweGJiLDB4MDAsMHgyMiwweDQwLDB4MDgsMHgxMCwweDAyLDB4YzQsMHgwMSwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4YjNkMCwgMCwgezB4MjAsMHg0MCwweDFiLDB4OTAsMHgwMiwweDA0LDB4MjIsMHg4OSwweDAwLDB4MjAsMHg2MCwweDBiLDB4MTIsMHg4MiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YjNlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNCwweDQ0LDB4YjksMHgwMCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4YjNmMCwgMCwgezB4NGIsMHg5MCwweDAyLDB4ZTQsMHgxMCwweGI5LDB4MDIsMHgwMiwweDQwLDB4MDgsMHg5MSwweDQyLDB4ZTQsMHgwMCwweGI5LDB4ODAgfSB9LAoreyAgMTYsIDB4YjQwMCwgMCwgezB4MjIsMHg0MCwweDBiLDB4OTIsMHgwMiwweGM0LDB4MDAsMHg5OSwweDQwLDB4MjIsMHg0MCwweDRiLDB4OTAsMHgxMiwweDA2LDB4MDQgfSB9LAoreyAgMTYsIDB4YjQxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNiwweDAwLDB4YjksMHgwMSwweDNlLDB4NTggfSB9LAoreyAgMTYsIDB4YjQyMCwgMCwgezB4MGQsMHg5MCwweDAzLDB4ZTYsMHgwMCwweGQxLDB4MDAsMHgzMiwweDYwLDB4MGMsMHg5OCwweDAyLDB4ZTYsMHg0MCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4YjQzMCwgMCwgezB4YjIsMHg0MCwweDBmLDB4MTgsMHgwMywweDI0LDB4MDAsMHhjOSwweDgwLDB4MzIsMHg1MCwweDBmLDB4OTAsMHgyMywweDI4LDB4MDQgfSB9LAoreyAgMTYsIDB4YjQ0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDIgfSB9LAoreyAgMTYsIDB4YjQ1MCwgMCwgezB4MGIsMHg5MCwweDAzLDB4ZTcsMHgwOCwweGY5LDB4MDAsMHhiZSwweDQ4LDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4YjQ2MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTgsMHgwMywweGE0LDB4MDAsMHhlOSwweGEwLDB4YmUsMHg0MCwweDBmLDB4MTAsMHgwYiwweDRhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjQ3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZDgsMHgwMSwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YjQ4MCwgMCwgezB4MGYsMHg4MCwweDhiLDB4MjAsMHgwMCwweGY4LDB4MjAsMHgzZSwweDAxLDB4MGYsMHg4MSwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDggfSB9LAoreyAgMTYsIDB4YjQ5MCwgMCwgezB4M2EsMHgwMCwweDBjLDB4ODAsMHgwMywweGUwLDB4MDAsMHhkOCwweDQwLDB4MzIsMHgwMCwweDBmLDB4ODAsMHgxMywweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4YjRhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDAwLDB4OGEsMHg4MCwweDJmLDB4OTEgfSB9LAoreyAgMTYsIDB4YjRiMCwgMCwgezB4MGIsMHhlZSwweDAyLDB4MjgsMHgwMSwweGJlLDB4MDAsMHgyMCwweDgwLDB4MGIsMHhhMCwweDAyLDB4ZWEsMHg4MCwweGI2LDB4NDggfSB9LAoreyAgMTYsIDB4YjRjMCwgMCwgezB4MjIsMHg4MCwweDBkLDB4YTAsMHgwMiwweGZhLDB4MDIsMHg4NiwweDQxLDB4YTMsMHhhNiwweDBiLDB4YTAsMHgwMywweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjRkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4OTMsMHg4MCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YjRlMCwgMCwgezB4MGIsMHgzMCwweDAyLDB4MGMsMHgxMCwweGIzLDB4MDAsMHgyOCwweGMwLDB4MGIsMHgzOCwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YjRmMCwgMCwgezB4MjgsMHhjMCwweDA5LDB4MzAsMHgwMiwweGM2LDB4MDEsMHg4MywweDYwLDB4MjAsMHg3MCwweDBiLDB4MzAsMHgwYSwweDRhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjUwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgyZSwweDg4LDB4ODUsMHgwOCwweDJkLDB4ODAgfSB9LAoreyAgMTYsIDB4YjUxMCwgMCwgezB4NGIsMHhmOCwweDA2LDB4MWMsMHg4MCwweGI3LDB4MDAsMHgyMSwweGMwLDB4MGIsMHg1MCwweDAyLDB4ZDQsMHgwMCwweGI2LDB4MDAgfSB9LAoreyAgMTYsIDB4YjUyMCwgMCwgezB4MjksMHg2MCwweDA5LDB4NzAsMHgwMiwweGQwLDB4YTAsMHg4ZCwweDAwLDB4MjEsMHg0MCwweDBiLDB4MzIsMHgwMiwweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjUzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4ZDUsMHg4MCwweDNkLDB4ZTAgfSB9LAoreyAgMTYsIDB4YjU0MCwgMCwgezB4OGYsMHg3OCwweDAzLDB4MWUsMHg4NCwweGI3LDB4ODIsMHgzZCwweDYwLDB4MGYsMHg1OSwweDAzLDB4ZGUsMHgwMCwweGY3LDB4ODAgfSB9LAoreyAgMTYsIDB4YjU1MCwgMCwgezB4MjksMHg2MCwweDE1LDB4NzgsMHgwMywweGRlLDB4MDAsMHhjNywweDgwLDB4MzEsMHg2MCwweDBmLDB4N2MsMHgwMywweDZhLDB4MDIgfSB9LAoreyAgMTYsIDB4YjU2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhYywweDQwLDB4ZTksMHgwMCwweDNlLDB4ODAgfSB9LAoreyAgMTYsIDB4YjU3MCwgMCwgezB4MGYsMHhhMCwweDAzLDB4ZWQsMHgzMCwweGZiLDB4MDAsMHgzNiwweGMxLDB4MGYsMHg5NiwweDAzLDB4ZTQsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YjU4MCwgMCwgezB4MzQsMHg0MCwweDBmLDB4YjcsMHg4MywweGVjLDB4NDAsMHgyMSwweDAwLDB4M2UsMHg0MCwweDBmLDB4YjAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4YjU5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4ZmYsMHg4MSwweDMzLDB4ZTAgfSB9LAoreyAgMTYsIDB4YjVhMCwgMCwgezB4MGYsMHhmOSwweDAzLDB4ZGUsMHgyMCwweGNmLDB4ODEsMHgzZiwweGUwLDB4MDcsMHg3OCwweDAzLDB4M2UsMHgwMCwweGZmLDB4ODAgfSB9LAoreyAgMTYsIDB4YjViMCwgMCwgezB4M2YsMHhlMCwweDA0LDB4ZjgsMHgxMywweGZlLDB4MDIsMHhkZSwweDgwLDB4MzMsMHg2MCwweDBmLDB4ZjgsMHgwMywweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjVjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDAwLDB4YjcsMHgwMCwweDIxLDB4YzQgfSB9LAoreyAgMTYsIDB4YjVkMCwgMCwgezB4MGIsMHg1YSwweDAyLDB4ZGMsMHg0OCwweDg2LDB4NTAsMHgyZCwweGMwLDB4MGIsMHgzMSwweDAyLDB4OTQsMHg2MCwweGI0LDB4MTggfSB9LAoreyAgMTYsIDB4YjVlMCwgMCwgezB4MmQsMHg0MCwweDQ4LDB4NzAsMHgwMiwweGU4LDB4MDAsMHhhNSwweDEwLDB4MjEsMHg0MCwweDBiLDB4NzEsMHgwMiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YjVmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4YmQsMHgwMCwweDIxLDB4NDIgfSB9LAoreyAgMTYsIDB4YjYwMCwgMCwgezB4MGIsMHg3MCwweDAyLDB4ZmMsMHgwMiwweDg1LDB4MDAsMHgyNSwweDQwLDB4MGIsMHg1MCwweDAyLDB4OWMsMHgwMCwweGI3LDB4MDAgfSB9LAoreyAgMTYsIDB4YjYxMCwgMCwgezB4MmYsMHg0MCwweDI4LDB4NzEsMHgwMiwweGRjLDB4MDAsMHhhNiwweDAwLDB4MjEsMHhjMCwweDBiLDB4NzAsMHgwMiwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjYyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHg2ZCwweDgwLDB4YjEsMHgyMCwweGEwLDB4NTAgfSB9LAoreyAgMTYsIDB4YjYzMCwgMCwgezB4MGIsMHhiMiwweDA2LDB4Y2UsMHgwMCwweGEwLDB4MzQsMHgyZSwweGYwLDB4MGIsMHgxOCwweDAyLDB4ODUsMHgyMCwweGIzLDB4NGEgfSB9LAoreyAgMTYsIDB4YjY0MCwgMCwgezB4MmMsMHg1NCwweDg4LDB4MzgsMHgwMiwweGNjLDB4MTAsMHhhMSwweDAwLDB4MjAsMHhiMCwweDBiLDB4MzAsMHgwMiwweDA4LDB4MDQgfSB9LAoreyAgMTYsIDB4YjY1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiZSwweDgwLDB4ZjMsMHgwOCwweDEwLDB4NTQgfSB9LAoreyAgMTYsIDB4YjY2MCwgMCwgezB4MGIsMHg4OCwweDEzLDB4ZmYsMHgwMCwweGMwLDB4ODAsMHgzZSwweDY0LDB4MGYsMHhiNCwweDgzLDB4MDcsMHgwMCwweGY5LDB4YzAgfSB9LAoreyAgMTYsIDB4YjY3MCwgMCwgezB4M2UsMHhmMCwweDBjLDB4ZmMsMHgxMywweGY0LDB4MDAsMHhlYSwweDAwLDB4MzIsMHg3MCwweDBmLDB4ZjAsMHgwYiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YjY4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlYywweDAwLDB4ZjksMHgwMCwweDNlLDB4MTAgfSB9LAoreyAgMTYsIDB4YjY5MCwgMCwgezB4MDcsMHg5MSwweDAzLDB4ZWMsMHhjMCwweDU4LDB4MDAsMHgzZSwweDQ0LDB4MGYsMHg5MiwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4YjZhMCwgMCwgezB4M2UsMHhjMCwweDhmLDB4YjMsMHgwMywweGUwLDB4MDAsMHhiYiwweDAwLDB4YmUsMHg0NCwweDBmLDB4YjAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjZiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAyLDB4Y2QsMHgwNCwweDMzLDB4ZTAgfSB9LAoreyAgMTYsIDB4YjZjMCwgMCwgezB4MGMsMHhjMCwweDAzLDB4M2MsMHgwOCwweGZlLDB4MDAsMHgzMywweDYwLDB4MmMsMHhkMCwweDAyLDB4YjQsMHg4MCwweGNmLDB4MDAgfSB9LAoreyAgMTYsIDB4YjZkMCwgMCwgezB4M2YsMHg1MiwweDA3LDB4ZjAsMHgxMywweGZjLDB4MDAsMHhjZSwweDEwLDB4MzMsMHg0MiwweDBjLDB4YjAsMHgwMywweGMwLDB4NDQgfSB9LAoreyAgMTYsIDB4YjZlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2YywweDAwLDB4ODksMHgwMCwweDJhLDB4YjAgfSB9LAoreyAgMTYsIDB4YjZmMCwgMCwgezB4MDgsMHg4OCwweDAyLDB4MmMsMHgwMCwweGJhLDB4MDAsMHgzNiwweDQ0LDB4MDgsMHg5MCwweDAwLDB4MjYsMHgwMCwweGRiLDB4YzAgfSB9LAoreyAgMTYsIDB4YjcwMCwgMCwgezB4MmUsMHg0MCwweDBiLDB4YjAsMHgwMiwweGVjLDB4MDAsMHg4MywweGMwLDB4MjgsMHg0MCwweDBhLDB4YjAsMHgwMiwweGUwLDB4NDAgfSB9LAoreyAgMTYsIDB4YjcxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OGIsMHgwMCwweDIyLDB4MDggfSB9LAoreyAgMTYsIDB4YjcyMCwgMCwgezB4MWEsMHhhMiwweDAyLDB4MmMsMHgxMCwweGI5LDB4MjAsMHgyMiwweDQwLDB4MDgsMHgzMCwweDAyLDB4MmMsMHgwNCwweGFhLDB4NTQgfSB9LAoreyAgMTYsIDB4YjczMCwgMCwgezB4MmUsMHhjMCwweDBiLDB4YjAsMHgxMiwweGNjLDB4MDAsMHg4YiwweDA4LDB4MjIsMHg0MCwweDA4LDB4YjAsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjc0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDAwLDB4ODMsMHgwNCwweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjc1MCwgMCwgezB4MGEsMHgwOCwweDgyLDB4MGMsMHgwMCwweGI4LDB4MDAsMHg2NCwweDQwLDB4MDgsMHgzMCwweDAyLDB4YTQsMHgwMCwweGIwLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjc2MCwgMCwgezB4MmMsMHhjMCwweDhiLDB4MzAsMHgxMCwweGM4LDB4MDIsMHg4YiwweDAwLDB4MmEsMHg0MCwweDBhLDB4MzAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4Yjc3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4YzksMHgwMCwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjc4MCwgMCwgezB4MWEsMHg4MiwweDAzLDB4M2MsMHgwMCwweGY5LDB4MDAsMHgzMiwweDQwLDB4MGMsMHhkMSwweDAzLDB4YWMsMHgwMCwweGViLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjc5MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4ZjAsMHgwMywweGVkLDB4MDAsMHhjMywweDAwLDB4MzIsMHhjMCwweDhjLDB4YjAsMHgwMywweGMwLDB4MDMgfSB9LAoreyAgMTYsIDB4YjdhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTksMHhmYywweDAwLDB4ZjUsMHgwMCwweDNmLDB4MDAgfSB9LAoreyAgMTYsIDB4YjdiMCwgMCwgezB4MGQsMHg4MCwweDRiLDB4ZmMsMHgwMCwweDdjLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhkMiwweDBiLDB4NzQsMHgwMCwweGRmLDB4MDAgfSB9LAoreyAgMTYsIDB4YjdjMCwgMCwgezB4MWQsMHg0MCwweDhmLDB4ZjAsMHgwMywweGZjLDB4YTAsMHhmZiwweDAwLDB4M2YsMHg4MCwweDBmLDB4ZjAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4YjdkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDAwLDB4ZGYsMHg4NCwweDNiLDB4ZTAgfSB9LAoreyAgMTYsIDB4YjdlMCwgMCwgezB4MGYsMHhmOCwweDBiLDB4M2UsMHgwMCwweGVjLDB4ODAsMHgzMywweGUxLDB4MGMsMHgzMCwweDAzLDB4M2MsMHg4MCwweGNmLDB4NDggfSB9LAoreyAgMTYsIDB4YjdmMCwgMCwgezB4MzcsMHhjMCwweDBlLDB4NDAsMHgwMywweGUwLDB4YzAsMHhjNywweDkxLDB4YjMsMHgwNCwweDBjLDB4ZjAsMHgwMywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjgwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlZiwweDA0LDB4OGIsMHg4MCwweDIyLDB4NDEgfSB9LAoreyAgMTYsIDB4YjgxMCwgMCwgezB4MGIsMHhiMCwweDgyLDB4MmUsMHgwMCwweDg4LDB4ODAsMHhhMiwweGUwLDB4MGEsMHhhMiwweDkyLDB4YWQsMHg4MCwweDg3LDB4NDIgfSB9LAoreyAgMTYsIDB4YjgyMCwgMCwgezB4MjMsMHhkOCwweDhhLDB4YWQsMHgwMiwweGUwLDB4YzAsMHg4YiwweDAwLDB4MjAsMHg0YywweDQ4LDB4YTQsMHgwMiwweDIwLDB4MDQgfSB9LAoreyAgMTYsIDB4YjgzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDU4LDB4YmIsMHgwMCwweDI4LDB4ODAgfSB9LAoreyAgMTYsIDB4Yjg0MCwgMCwgezB4MGIsMHhiMiwweDQyLDB4MjQsMHgwMCwweGE4LDB4MDAsMHgyYSwweGMwLDB4MGEsMHgxMCwweDAyLDB4MDQsMHg2MCwweGEzLDB4MjAgfSB9LAoreyAgMTYsIDB4Yjg1MCwgMCwgezB4MjQsMHhkMiwweDA4LDB4MDAsMHg0MiwweDhjLDB4ODMsMHg5YiwweDAxLDB4MjAsMHg0OSwweDA4LDB4MzMsMHhjMiwweDIyLDB4MDEgfSB9LAoreyAgMTYsIDB4Yjg2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhYywweDAwLDB4YWIsMHg4OCwweDIyLDB4YTAgfSB9LAoreyAgMTYsIDB4Yjg3MCwgMCwgezB4MGIsMHhiOCwweDAyLDB4MjYsMHgwYywweGE4LDB4MDAsMHgyYSwweGMwLDB4MGEsMHg5MiwweDAyLDB4YTQsMHgwMCwweGFiLDB4MDYgfSB9LAoreyAgMTYsIDB4Yjg4MCwgMCwgezB4MjIsMHhjMCwweDBhLDB4YjAsMHgwMiwweGU4LDB4MDAsMHg5YiwweDAwLDB4MDIsMHg0MCwweDA4LDB4YTAsMHg0MiwweDMwLDB4MDQgfSB9LAoreyAgMTYsIDB4Yjg5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4ZDMsMHg4MCwweDNhLDB4ZTAgfSB9LAoreyAgMTYsIDB4YjhhMCwgMCwgezB4MGYsMHgxOCwweDAxLDB4MDYsMHgwMCwweGU4LDB4MzAsMHgzOCwweDY2LDB4MGUsMHhiOCwweDAzLDB4MmEsMHg0MCwweGViLDB4MDAgfSB9LAoreyAgMTYsIDB4YjhiMCwgMCwgezB4MzYsMHhjMSwweDBlLDB4OTYsMHgwMywweGUyLDB4ODAsMHhkYSwweDA4LDB4MzIsMHg4MCwweDJjLDB4YmIsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YjhjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHg5YywweDAwLDB4ZGYsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YjhkMCwgMCwgezB4MGYsMHhkMCwweDAzLDB4ZjQsMHgwMCwweGRjLDB4ODAsMHgzNywweDYwLDB4MGYsMHhlOCwweDAzLDB4ZmEsMHgwMCwweGRmLDB4MDEgfSB9LAoreyAgMTYsIDB4YjhlMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4YzAsMHg0MywweGU2LDB4NGMsMHhlZiwweGEwLDB4M2YsMHg0NCwweDBmLDB4YTAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjhmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDQwLDB4ZGIsMHgwMCwweDM2LDB4ODAgfSB9LAoreyAgMTYsIDB4YjkwMCwgMCwgezB4MGMsMHg5OCwweDAzLDB4MjYsMHgwMCwweGY4LDB4MDAsMHgzZSwweGMwLDB4MGUsMHgxOCwweDAzLDB4ODQsMHgwMiwweGUzLDB4MDEgfSB9LAoreyAgMTYsIDB4YjkxMCwgMCwgezB4MzgsMHhjMSwweDBlLDB4YjQsMHgwMywweGFjLDB4ODAsMHhjYSwweDE4LDB4M2EsMHhkMCwweDJjLDB4MzAsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YjkyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgzZiwweDQwLDB4YjksMHg4OCwweDJlLDB4ODAgfSB9LAoreyAgMTYsIDB4YjkzMCwgMCwgezB4MDgsMHhiYywweDAyLDB4YTMsMHgwMCwweGIwLDB4MDAsMHgwZSwweGMwLDB4MDgsMHhiMCwweDA2LDB4MjAsMHgwMCwweDhmLDB4MDQgfSB9LAoreyAgMTYsIDB4Yjk0MCwgMCwgezB4MjMsMHhjMSwweDA4LDB4YjksMHgxMiwweDJmLDB4MDAsMHg4MywweDgwLDB4MzYsMHg0MCwweDA4LDB4YWQsMHgwMiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjk1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4YjIsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4Yjk2MCwgMCwgezB4MDksMHgzMiwweDAyLDB4ODQsMHgwMCwweDMzLDB4MDAsMHgyYywweGIyLDB4MGEsMHgzNiwweDEyLDB4OGMsMHgwOCwweDkzLDB4MDUgfSB9LAoreyAgMTYsIDB4Yjk3MCwgMCwgezB4MjAsMHhjMCwweDBiLDB4MTgsMHgwMiwweGVkLDB4MDAsMHg5MSwweDgwLDB4NmEsMHgwMCwweDA4LDB4MTAsMHgwMiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4Yjk4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxZSwweDAwLDB4YjcsMHg4MCwweDJkLDB4ZTAgfSB9LAoreyAgMTYsIDB4Yjk5MCwgMCwgezB4MDksMHg3OCwweDAyLDB4OTcsMHg0MCwweGI0LDB4ODAsMHgyZiwweGEwLDB4MDgsMHhlOCwweDAyLDB4MGUsMHg0MCwweDk3LDB4ODIgfSB9LAoreyAgMTYsIDB4YjlhMCwgMCwgezB4MjEsMHhlMCwweDk4LDB4NjgsMHg4MiwweDFhLDB4MTgsMHg5ZCwweDkwLDB4MmQsMHhhMSwweDE4LDB4NTgsMHgwMiwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjliMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweGMwLDB4ZjMsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4YjljMCwgMCwgezB4MGQsMHhiMCwweDQzLDB4ODQsMHg0MCwweGYwLDB4MDAsMHgzYywweDgyLDB4MGUsMHgzOCwweDEyLDB4OGMsMHg0NCwweGYzLDB4MzAgfSB9LAoreyAgMTYsIDB4YjlkMCwgMCwgezB4YmEsMHhjMSwweDFlLDB4MTAsMHg0NywweDhlLDB4MjIsMHhkMSwweDEwLDB4MzgsMHgxOCwweDBjLDB4MzAsMHg4MywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4YjllMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiYywweDQwLDB4ZmYsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YjlmMCwgMCwgezB4MGUsMHhlMCwweDAzLDB4ZjQsMHg0MCwweGZjLDB4MDAsMHgzZCwweGM0LDB4MGYsMHhkMCwweDAxLDB4ZjQsMHg0MSwweGVmLDB4MTggfSB9LAoreyAgMTYsIDB4YmEwMCwgMCwgezB4M2YsMHhjNCwweDFmLDB4ZjAsMHgwMywweGY4LDB4NDgsMHhlZiwweDE0LDB4MzMsMHg4MCwweDBmLDB4YzEsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4YmExMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhmYywweDQwLDB4ZmIsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4YmEyMCwgMCwgezB4MGYsMHg5OCwweDAzLDB4MjQsMHgwMCwweGNiLDB4MDAsMHgzZSwweDQwLDB4MGYsMHhiMCwweDAzLDB4YTgsMHgwMCwweGRiLDB4MjggfSB9LAoreyAgMTYsIDB4YmEzMCwgMCwgezB4M2UsMHhjNCwweDFmLDB4OTAsMHgyMywweGVjLDB4MDAsMHhjYSwweDAwLDB4MzIsMHhlMCwweDBjLDB4OTAsMHgwMywweGVhLDB4MDAgfSB9LAoreyAgMTYsIDB4YmE0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDgwLDB4YjcsMHgwMCwweDJkLDB4YzAgfSB9LAoreyAgMTYsIDB4YmE1MCwgMCwgezB4NGIsMHg1MCwweDUyLDB4MTQsMHgwMCwweGQ0LDB4MDEsMHgyZCwweDgwLDB4MGIsMHg2MCwweDAyLDB4ZDgsMHgwMCwweGE3LDB4MjAgfSB9LAoreyAgMTYsIDB4YmE2MCwgMCwgezB4MmQsMHhjNSwweDBiLDB4NDAsMHgxNiwweGRjLDB4MDAsMHg4NCwweDAwLDB4MjMsMHhjMCwweDA4LDB4NDAsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4YmE3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDgwLDB4YjcsMHg4MCwweDJkLDB4ZTAgfSB9LAoreyAgMTYsIDB4YmE4MCwgMCwgezB4MGIsMHg3OCwweDBhLDB4OTYsMHgwMCwweDk0LDB4ODAsMHgyZCwweDYwLDB4MWIsMHg3OCwweDA2LDB4ZDIsMHgwMCwweGE3LDB4ODAgfSB9LAoreyAgMTYsIDB4YmE5MCwgMCwgezB4MmQsMHhlMCwweDBiLDB4NzgsMHgyMiwweGRlLDB4MDAsMHg4NywweDgyLDB4MjEsMHhlMCwweDA4LDB4NTgsMHgwMiwweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4YmFhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDAwLDB4YjMsMHhlNCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YmFiMCwgMCwgezB4MWIsMHgyMSwweDAyLDB4ODEsMHgwMCwweDkwLDB4MDAsMHgyYywweGM4LDB4MGIsMHgzOSwweDAyLDB4Y2UsMHgwMCwweGEzLDB4MDAgfSB9LAoreyAgMTYsIDB4YmFjMCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNkLDB4MDAsMHg4YiwweDIwLDB4MjAsMHhmMCwweDA4LDB4YjIsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4YmFkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZmUsMHhhMCwweDNmLDB4ODIgfSB9LAoreyAgMTYsIDB4YmFlMCwgMCwgezB4MGYsMHhlOCwweDAzLDB4OTgsMHgzMCwweGQ2LDB4MDAsMHgzZiwweGEwLDB4MGYsMHhlMCwweDAzLDB4YmEsMHhjMCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4YmFmMCwgMCwgezB4M2UsMHg4MCwweDBmLDB4ZWMsMHgzMywweGY4LDB4MDIsMHhjZSwweDAwLDB4YjMsMHhiOCwweDJjLDB4ZWMsMHg4MywweGZhLDB4MDQgfSB9LAoreyAgMTYsIDB4YmIwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDE4LDB4ZjgsMHg0MCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YmIxMCwgMCwgezB4MGYsMHg4MCwweDAyLDB4NjAsMHg4NCwweGY4LDB4MDUsMHgyZSwweDA0LDB4OGYsMHg4MCwweDQxLDB4ZTAsMHgwMCwweDc4LDB4MDIgfSB9LAoreyAgMTYsIDB4YmIyMCwgMCwgezB4M2UsMHgwMCwweDBmLDB4ODEsMHg4MywweGUwLDB4MjAsMHhmOCwweDAwLDB4YmUsMHgwMiwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4YmIzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNiwweDE4LDB4ZjksMHgyMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4YmI0MCwgMCwgezB4MGYsMHg5YywweDAzLDB4ZTQsMHg0MCwweGM5LDB4MDAsMHgzMiwweDYxLDB4MGMsMHg5MCwweDEzLDB4YzQsMHgwOCwweGM5LDB4MDEgfSB9LAoreyAgMTYsIDB4YmI1MCwgMCwgezB4M2UsMHg0MSwweDBmLDB4MTgsMHgwMywweDI0LDB4MDAsMHhjOSwweGEwLDB4MzIsMHg0MCwweDBmLDB4OTgsMHg0MywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4YmI2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NSwweDAwLDB4YjEsMHhjMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4YmI3MCwgMCwgezB4MGIsMHg5YywweDAyLDB4ZTcsMHgxMCwweDg5LDB4MDAsMHgyOCwweDQ0LDB4MDgsMHg5NCwweDIyLDB4ZTQsMHgxMCwweDg5LDB4MDAgfSB9LAoreyAgMTYsIDB4YmI4MCwgMCwgezB4MmUsMHg0MCwweDBiLDB4OWYsMHgyMiwweDI2LDB4NjAsMHg4OSwweDgwLDB4MjIsMHg0MCwweDBiLDB4OTEsMHgwYSwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YmI5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDgwLDB4YjksMHgwMCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4YmJhMCwgMCwgezB4NGIsMHhiNCwweDAyLDB4ZTQsMHgyMCwweDg5LDB4MjAsMHgyMiwweDQwLDB4MDgsMHg5NCwweDAyLDB4ZWMsMHgwMCwweDg5LDB4MDAgfSB9LAoreyAgMTYsIDB4YmJiMCwgMCwgezB4MmUsMHg0MSwweDBiLDB4OTAsMHgwMiwweDA0LDB4MDAsMHg4OSwweDQwLDB4MjIsMHg0MCwweDBiLDB4OTAsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YmJjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDAwLDB4YjEsMHgwNCwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4YmJkMCwgMCwgezB4OGIsMHgxMCwweDAyLDB4ZTQsMHgwNSwweDgxLDB4MDAsMHgyOCwweDQwLDB4MjgsMHgxMiwweDEyLDB4YzQsMHg4MiwweDgxLDB4MjAgfSB9LAoreyAgMTYsIDB4YmJlMCwgMCwgezB4MmMsMHg0OCwweDBiLDB4MTIsMHgwYSwweDA0LDB4ODIsMHg4MSwweDAwLDB4MjAsMHg0OCwweDBiLDB4MTIsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YmJmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2OCwweGEwLDB4ZmEsMHgwMiwweDNlLDB4MTQgfSB9LAoreyAgMTYsIDB4YmMwMCwgMCwgezB4MGYsMHg4NSwweDAzLDB4ZTAsMHgwMCwweGM4LDB4MDAsMHgzMiwweDAwLDB4MGMsMHg4NSwweDAzLDB4YzEsMHg0MCwweGM4LDB4NTMgfSB9LAoreyAgMTYsIDB4YmMxMCwgMCwgezB4M2UsMHgxNCwweDBmLDB4ODAsMHgwMywweDAxLDB4NDgsMHhjMCwweDUwLDB4YjIsMHgxNCwweDBmLDB4ODUsMHgwMywweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4YmMyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhlNCwweDAwLDB4ZmQsMHgwMCwweGJmLDB4NDAgfSB9LAoreyAgMTYsIDB4YmMzMCwgMCwgezB4MGYsMHg1MCwweDEzLDB4ZDQsMHgwMiwweGZkLDB4MDAsMHgyZiwweGMwLDB4MGYsMHhkMSwweDAzLDB4ZjQsMHg0MCwweGY5LDB4MTAgfSB9LAoreyAgMTYsIDB4YmM0MCwgMCwgezB4M2UsMHg0NCwweDBmLDB4ZDEsMHgwMywweGY0LDB4NDAsMHhmZiwweDAwLDB4YmYsMHg0NCwweDBmLDB4ZDEsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4YmM1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNiwweGEwLDB4ZmQsMHgwMSwweDNlLDB4NDQgfSB9LAoreyAgMTYsIDB4YmM2MCwgMCwgezB4MGYsMHhkMSwweDAzLDB4ZDQsMHgwMCwweGM1LDB4MDAsMHgzMywweDQxLDB4MGYsMHhkYiwweDAzLDB4MjcsMHgyMCwweGQ5LDB4ZTAgfSB9LAoreyAgMTYsIDB4YmM3MCwgMCwgezB4YjIsMHg3MCwweDBkLDB4ZGEsMHg4MywweGY2LDB4NDAsMHhjZiwweDEwLDB4MzIsMHg3OCwweDJkLDB4ZGEsMHgwMywweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YmM4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMSwweDAwLDB4YjgsMHgwMCwweDJlLDB4MjggfSB9LAoreyAgMTYsIDB4YmM5MCwgMCwgezB4MGIsMHg4OCwweDQyLDB4ZTAsMHgxMCwweGQ4LDB4MDAsMHgyMiwweDAwLDB4MGIsMHg4YywweDBhLDB4MjMsMHgwMCwweDg4LDB4YzAgfSB9LAoreyAgMTYsIDB4YmNhMCwgMCwgezB4MjIsMHgyOCwweDA4LDB4ODQsMHgwMiwweGMyLDB4ODAsMHg4MCwweGEwLDB4MjIsMHgzMCwweDQ4LDB4YWEsMHg4MiwweDBlLDB4MDQgfSB9LAoreyAgMTYsIDB4YmNiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4YjEsMHgwMCwweDJjLDB4NDAgfSB9LAoreyAgMTYsIDB4YmNjMCwgMCwgezB4OGIsMHgxMiwweDAyLDB4YzQsMHgwMCwweDk5LDB4MDIsMHgyOCwweDQwLDB4OGIsMHgxNiwweDAyLDB4ODQsMHg4MSwweDkxLDB4MzAgfSB9LAoreyAgMTYsIDB4YmNkMCwgMCwgezB4MjAsMHg1OCwweDA5LDB4MTAsMHgwMiwweGM1LDB4MDAsMHg4MSwweDAwLDB4NjQsMHg0ZCwweDA4LDB4MzQsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YmNlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhYywweDBjLDB4YjksMHgwNCwweDJlLDB4NDggfSB9LAoreyAgMTYsIDB4YmNmMCwgMCwgezB4MGIsMHg5NCwweDA2LDB4ZTQsMHgwMCwweDk5LDB4NDAsMHhhYSwweDQwLDB4MGIsMHg5MiwweDIyLDB4YTQsMHgwMCwweDg5LDB4MDAgfSB9LAoreyAgMTYsIDB4YmQwMCwgMCwgezB4NjAsMHg0MCwweDA4LDB4OTQsMHgwMiwweGU0LDB4MDAsMHg4OSwweDgwLDB4YTYsMHg1MCwweDA4LDB4OTIsMHgwMiwweDA2LDB4MDQgfSB9LAoreyAgMTYsIDB4YmQxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZjksMHg5OCwweDNlLDB4NDggfSB9LAoreyAgMTYsIDB4YmQyMCwgMCwgezB4MGYsMHg5OCwweDAzLDB4ZTUsMHgyMCwweGQ5LDB4MDAsMHgzYSwweDY0LDB4MGYsMHg5NCwweDgzLDB4YTQsMHhjMCwweGQ5LDB4MDIgfSB9LAoreyAgMTYsIDB4YmQzMCwgMCwgezB4NzIsMHg0MCwweDRkLDB4OTAsMHg0MiwweGU0LDB4ODIsMHhjOSwweDQwLDB4MzYsMHg0MCwweDBjLDB4OTAsMHgwYiwweDI4LDB4MDQgfSB9LAoreyAgMTYsIDB4YmQ0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhYywweDI4LDB4ZjksMHg4OCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4YmQ1MCwgMCwgezB4MGYsMHg5OSwweDEzLDB4ZTcsMHgwMCwweGY5LDB4YzAsMHgzNiwweDYwLDB4MGYsMHg5MCwweDAzLDB4NjYsMHgwMCwweGYxLDB4MDAgfSB9LAoreyAgMTYsIDB4YmQ2MCwgMCwgezB4N2UsMHg0MCwweDBmLDB4OTksMHgwNywweGU0LDB4NjAsMHhmOSwweDAwLDB4MzgsMHg0MCwweDBmLDB4OTgsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YmQ3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZjgsMHgxMCwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4YmQ4MCwgMCwgezB4MGYsMHg4MiwweDBiLDB4MjEsMHgwMCwweGU4LDB4MDAsMHgzNiwweDA0LDB4MGMsMHg4NiwweDAzLDB4ZTEsMHgwMCwweGQ4LDB4MDAgfSB9LAoreyAgMTYsIDB4YmQ5MCwgMCwgezB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweDYxLDB4MDAsMHhjOCwweDAwLDB4MzIsMHgwMCwweDBmLDB4MDAsMHgwMywweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4YmRhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDIwLDB4YmUsMHgwMCwweDIyLDB4ODAgfSB9LAoreyAgMTYsIDB4YmRiMCwgMCwgezB4MjgsMHhlYywweDAyLDB4MTksMHgwNCwweDgyLDB4MDAsMHgwMywweDgwLDB4MGQsMHhlNCwweDgyLDB4ZTgsMHgwMCwweDhhLDB4MDEgfSB9LAoreyAgMTYsIDB4YmRjMCwgMCwgezB4YWEsMHg4MCwweDhiLDB4ZWQsMHg4MiwweDNiLDB4ODAsMHg4ZSwweDkwLDB4MzYsMHg4MCwweDBiLDB4ZTAsMHgwMywweDRhLDB4MDAgfSB9LAoreyAgMTYsIDB4YmRkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0MiwweDAwLDB4YjMsMHg4MCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4YmRlMCwgMCwgezB4NmIsMHgzNCwweDE2LDB4NDAsMHhjMCwweDgzLDB4MTAsMHgyNCwweDcyLDB4ODgsMHhiMCwweDAyLDB4ZWMsMHgwMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4YmRmMCwgMCwgezB4MjQsMHhjMCwweDBiLDB4MDQsMHgwMiwweDZmLDB4MDksMHg5YiwweDAwLDB4MjQsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4YmUwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxNCwweDAwLDB4YjcsMHg4MCwweDIzLDB4ZTQgfSB9LAoreyAgMTYsIDB4YmUxMCwgMCwgezB4MjgsMHg3OCwweDgyLDB4NzQsMHgxNCwweDhmLDB4MDAsMHg2MSwweGUwLDB4MDksMHg1MCwweDEyLDB4ZGMsMHgwNCwweDg3LDB4MjIgfSB9LAoreyAgMTYsIDB4YmUyMCwgMCwgezB4MjUsMHhjOCwweDFiLDB4NzgsMHgwMiwweDE0LDB4MDAsMHg5NCwweDQwLDB4YTUsMHhjMCwweDBiLDB4NjAsMHgyMiwweDY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YmUzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxMiwweDIwLDB4YjcsMHg4MCwweGIxLDB4ZTAgfSB9LAoreyAgMTYsIDB4YmU0MCwgMCwgezB4OGYsMHhmOCwweDAzLDB4MTIsMHgwMiwweGU3LDB4ODAsMHgzNSwweGUwLDB4MGMsMHg2OCwweDA2LDB4Y2YsMHhjMiwweGNmLDB4YjAgfSB9LAoreyAgMTYsIDB4YmU1MCwgMCwgezB4MjUsMHhmNCwweDBmLDB4NTgsMHgwMywweDVhLDB4MDIsMHhkNSwweDgwLDB4NzUsMHhmYSwweDRmLDB4ZjgsMHgwMywweDJhLDB4MDIgfSB9LAoreyAgMTYsIDB4YmU2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhNSwweDkwLDB4ZjMsMHgwMCwweDNkLDB4YzAgfSB9LAoreyAgMTYsIDB4YmU3MCwgMCwgezB4NGYsMHhiMCwweDEzLDB4YTgsMHgwNCwweGZiLDB4MDAsMHgzYywweGMwLDB4MGYsMHg4MCwweDQzLDB4ZWMsMHg4MCwweGViLDB4NjAgfSB9LAoreyAgMTYsIDB4YmU4MCwgMCwgezB4M2EsMHhjOSwweDBmLDB4MzAsMHgwMywweGVjLDB4MDAsMHhlOSwweDAwLDB4M2UsMHhjOCwweDBmLDB4YTAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4YmU5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmNiwweDAwLDB4ZWUsMHg4MCwweDNmLDB4ZTAgfSB9LAoreyAgMTYsIDB4YmVhMCwgMCwgezB4MGQsMHg4OSwweDAzLDB4ZDIsMHg0MCwweGU1LDB4ODEsMHgzOSwweGUwLDB4M2MsMHhmOSwweDA3LDB4ZmUsMHgwMCwweGNmLDB4ODggfSB9LAoreyAgMTYsIDB4YmViMCwgMCwgezB4M2YsMHhlMCwweDBmLDB4ZTgsMHgwMywweGYyLDB4MDgsMHhjZSwweDgwLDB4MzMsMHhlMCwweDBjLDB4ZjgsMHgwMywweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4YmVjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5NCwweDQ0LDB4YzYsMHgwMCwweDJmLDB4YzAgfSB9LAoreyAgMTYsIDB4YmVkMCwgMCwgezB4MDgsMHg1OCwweDAyLDB4ZDAsMHhjNCwweDg1LDB4MjQsMHgyMSwweDkwLDB4MDgsMHg1NCwweDEyLDB4ZGMsMHg4MiwweDA3LDB4MDAgfSB9LAoreyAgMTYsIDB4YmVlMCwgMCwgezB4MmQsMHhjMCwweDBiLDB4NzAsMHgwNiwweGQ0LDB4MDAsMHg4ZSwweDQ4LDB4MjEsMHhjMCwweDBhLDB4NjAsMHgwMiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YmVmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4YTcsMHg0MCwweDJkLDB4YzAgfSB9LAoreyAgMTYsIDB4YmYwMCwgMCwgezB4MDgsMHg0MiwweDAyLDB4ZDAsMHgwMCwweGFkLDB4MDAsMHgyOSwweGMwLDB4MDgsMHg3MCwweDIyLDB4ZGMsMHgyOCwweDg3LDB4MDAgfSB9LAoreyAgMTYsIDB4YmYxMCwgMCwgezB4MmQsMHhjMCwweDBiLDB4NDAsMHgwMiwweDk4LDB4MDAsMHg5NywweDAwLDB4YTAsMHhjNCwweDA4LDB4NzAsMHgwMiwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4YmYyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjYywweDA4LDB4OTMsMHgwMCwweDJjLDB4ZTAgfSB9LAoreyAgMTYsIDB4YmYzMCwgMCwgezB4MDgsMHgzYywweDIyLDB4YzEsMHgwMCwweDgxLDB4MDAsMHgyMCwweDgwLDB4ODgsMHgxNSwweDAyLDB4Y2UsMHgzMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4YmY0MCwgMCwgezB4MmMsMHhjMCwweDBiLDB4M2MsMHgwMiwweGNjLDB4MDQsMHg5MywweGMwLDB4MjAsMHhmNCwweDRhLDB4MGMsMHg4MiwweDA4LDB4MDQgfSB9LAoreyAgMTYsIDB4YmY1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhMCwweDAwLDB4ZTMsMHhjMCwweDFmLDB4ZTAgfSB9LAoreyAgMTYsIDB4YmY2MCwgMCwgezB4NmMsMHgxMCwweDgzLDB4ZTAsMHgwNCwweGViLDB4MDAsMHgzYSwweDUyLDB4NGMsMHhiNCwweDAzLDB4ZmUsMHgwMiwweGNmLDB4MDAgfSB9LAoreyAgMTYsIDB4YmY3MCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ODQsMHg0MywweGUxLDB4MDIsMHhkOCwweGMyLDB4MzMsMHhjMCwweDBjLDB4ODQsMHgwYiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YmY4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlOSwweDAwLDB4ZWIsMHgxMCwweDNlLDB4YzQgfSB9LAoreyAgMTYsIDB4YmY5MCwgMCwgezB4MGUsMHg5NCwweDAzLDB4ZTQsMHgwMCwweGZiLDB4MTgsMHgzZSwweGMyLDB4MGYsMHhiNiwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDEgfSB9LAoreyAgMTYsIDB4YmZhMCwgMCwgezB4M2UsMHhjMCwweDBmLDB4MzUsMHgwMywweGM0LDB4MjgsMHhlYSwweDQyLDB4M2UsMHhjMCwweDBmLDB4ODEsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YmZiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDQwLDB4ZmYsMHgwMCwweDMzLDB4YzAgfSB9LAoreyAgMTYsIDB4YmZjMCwgMCwgezB4MGMsMHhjMCwweGEzLDB4MzAsMHgyOCwweGNkLDB4YTAsMHgzMywweGMwLDB4MGMsMHhlOCwweDAzLDB4MGMsMHgwMCwweGVmLDB4MDUgfSB9LAoreyAgMTYsIDB4YmZkMCwgMCwgezB4M2QsMHhjMCwweDBjLDB4Y2EsMHg4MywweDNjLDB4MDAsMHhjZCwweDA4LDB4M2YsMHhjMiwweDBjLDB4YTAsMHgwMywweGMwLDB4NDQgfSB9LAoreyAgMTYsIDB4YmZlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2NywweDAwLDB4YmIsMHg4MCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4YmZmMCwgMCwgezB4MDgsMHhhYSwweDAyLDB4MDgsMHgwMCwweGExLDB4MDEsMHgzNCwweGQxLDB4MDgsMHhhNCwweDEyLDB4MmMsMHgwMCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4YzAwMCwgMCwgezB4NmUsMHhjMCwweDg4LDB4YjIsMHgwMiwweDJjLDB4MDgsMHg4OSwweDgwLDB4MmUsMHhjMCwweDBhLDB4YTgsMHgwMywweGEwLDB4NDAgfSB9LAoreyAgMTYsIDB4YzAxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4YmEsMHg4MCwweGEyLDB4YzAgfSB9LAoreyAgMTYsIDB4YzAyMCwgMCwgezB4MDgsMHhhOCwweDBhLDB4YTAsMHgwMCwweDhiLDB4MDAsMHhhMiwweGMwLDB4NDgsMHgxMSwweDAyLDB4YWMsMHgwNCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4YzAzMCwgMCwgezB4MmUsMHhjMCwweDAwLDB4ODAsMHgxMiwweDJhLDB4MDgsMHg4YiwweDE0LDB4MmMsMHhjMCwweDA4LDB4ODgsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzA0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDAwLDB4YjIsMHgwMCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4YzA1MCwgMCwgezB4MDgsMHhiMiwweDEyLDB4ODAsMHgwMCwweGFiLDB4MDEsMHgyNCwweGMwLDB4MDgsMHgwMCwweDAyLDB4MGMsMHgwNCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4YzA2MCwgMCwgezB4MmMsMHhjMCwweDA4LDB4MzAsMHgwMiwweDA3LDB4MDAsMHg4MiwweDAwLDB4MjQsMHhjMCwweDA4LDB4MDgsMHgwMiwweDgyLDB4MDEgfSB9LAoreyAgMTYsIDB4YzA3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4ZmIsMHgwMCwweDMyLDB4YzAgfSB9LAoreyAgMTYsIDB4YzA4MCwgMCwgezB4MGMsMHhhMiwweDAzLDB4YTAsMHgwMCwweGM5LDB4MDAsMHgzMiwweGMwLDB4MjQsMHg5NCwweDAzLDB4M2MsMHgwMiwweGNmLDB4MDAgfSB9LAoreyAgMTYsIDB4YzA5MCwgMCwgezB4MmYsMHhjMCwweDA0LDB4ODAsMHgwYiwweDA5LDB4MDIsMHhjYiwweDAxLDB4M2YsMHhjMCwweDJjLDB4YTAsMHgwMywweGMwLDB4MDMgfSB9LAoreyAgMTYsIDB4YzBhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTksMHhkYywweDAwLDB4ZmQsMHgwMiwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YzBiMCwgMCwgezB4NGYsMHhlNCwweDEzLDB4NzAsMHgwMCwweGZkLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhjMiwweDgzLDB4ZmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YzBjMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4YzAsMHgwMywweGE4LDB4MDYgfSB9LAoreyAgMTYsIDB4YzBkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDIwLDB4ZWYsMHgzMCwweDNmLDB4MDQgfSB9LAoreyAgMTYsIDB4YzBlMCwgMCwgezB4NmMsMHg4OCwweDAzLDB4M2EsMHg0MiwweGU0LDB4OTEsMHgzZiwweDBkLDB4MGQsMHg0OCwweDAzLDB4M2MsMHhjMCwweGZmLDB4MDIgfSB9LAoreyAgMTYsIDB4YzBmMCwgMCwgezB4MzMsMHg0NCwweDBjLDB4ZjQsMHgwMywweGZjLDB4ODIsMHhkZiwweDMwLDB4MzMsMHg2MCwweDBkLDB4ZjEsMHgwMywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzEwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTAsMHhlZCwweDAwLDB4OGIsMHg3MCwweDJlLDB4MTggfSB9LAoreyAgMTYsIDB4YzExMCwgMCwgezB4ODgsMHgyMiwweDRhLDB4MmMsMHg4MiwweGVhLDB4MjYsMHgyZSwweDBjLDB4MGIsMHhiOCwweDQyLDB4M2QsMHg4MCwweGJmLDB4OTAgfSB9LAoreyAgMTYsIDB4YzEyMCwgMCwgezB4MmEsMHg1NCwweDI4LDB4YjQsMHgwMiwweGNkLDB4MDAsMHhkYiwweDQwLDB4MmEsMHg0YSwweDQ4LDB4MzAsMHgwMiwweGEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YzEzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweGIwLDB4YTMsMHgwMCwweDZjLDB4MTAgfSB9LAoreyAgMTYsIDB4YzE0MCwgMCwgezB4MDksMHgwMCwweDgyLDB4MjAsMHg4MiwweGEwLDB4MjAsMHgyYywweDg4LDB4NGIsMHg4MCwweDAwLDB4MGMsMHg0MCwweGIzLDB4MDEgfSB9LAoreyAgMTYsIDB4YzE1MCwgMCwgezB4MjAsMHg0OCwweDBiLDB4MzYsMHgwMiwweDhjLDB4ZTAsMHg4MywweDY0LDB4MjQsMHg0MCwweDI4LDB4MzIsMHgwMiwweDIyLDB4MDEgfSB9LAoreyAgMTYsIDB4YzE2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MTEsMHhhYywweDAwLDB4OGIsMHgwMCwweDJlLDB4MDAgfSB9LAoreyAgMTYsIDB4YzE3MCwgMCwgezB4MDksMHg4MCwweDgwLDB4YTYsMHgwMCwweGJhLDB4MTEsMHgyZSwweDg4LDB4MGIsMHhiMCwweDAwLDB4MmMsMHgwMCwweGJiLDB4MDIgfSB9LAoreyAgMTYsIDB4YzE4MCwgMCwgezB4MDIsMHg0MCwweDA5LDB4YjAsMHgwMiwweGVjLDB4MDAsMHg4YiwweDAwLDB4MmMsMHhjOCwweDA4LDB4YjgsMHg4MiwweGIwLDB4MDQgfSB9LAoreyAgMTYsIDB4YzE5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4ZWIsMHgwMCwweDNlLDB4OTIgfSB9LAoreyAgMTYsIDB4YzFhMCwgMCwgezB4MGQsMHg4MCwweDAzLDB4MGEsMHgyMCwweGU5LDB4MDAsMHgzZSwweDUwLDB4NDUsMHg4MCwweDAxLDB4MmMsMHgwNCwweGYzLDB4MDAgfSB9LAoreyAgMTYsIDB4YzFiMCwgMCwgezB4OTAsMHg2MCwweDA5LDB4YjAsMHgwMywweGVjLDB4MDAsMHg4YiwweDAyLDB4MjYsMHg1MCwweDhkLDB4YmMsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YzFjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDEsMHhiYywweDAwLDB4ZmYsMHgwMiwweDNmLDB4ODAgfSB9LAoreyAgMTYsIDB4YzFkMCwgMCwgezB4MGUsMHhmOSwweDAyLDB4N2MsMHgyMiwweGFmLDB4MDAsMHgzZiwweDYwLDB4MDMsMHhjMCwweDBiLDB4ZmMsMHgxMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YzFlMCwgMCwgezB4M2YsMHg0YSwweDRlLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmNywweDAwLDB4MmIsMHg2MCwweDBmLDB4NzAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzFmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZmIsMHgwMCwweGIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzIwMCwgMCwgezB4MGYsMHg4MiwweDBiLDB4YTksMHgwMCwweGM5LDB4MDAsMHgzMiwweGQyLDB4MGYsMHhhMCwweDgzLDB4YWMsMHgwMCwweGNiLDB4MTAgfSB9LAoreyAgMTYsIDB4YzIxMCwgMCwgezB4M2UsMHg0MCwweDBjLDB4YjAsMHgwMywweGVjLDB4MDAsMHhkYiwweDAwLDB4MzIsMHg1MCwweDJjLDB4OTUsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YzIyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgzYywweDA0LDB4YmYsMHgwMiwweDIyLDB4ODAgfSB9LAoreyAgMTYsIDB4YzIzMCwgMCwgezB4MGIsMHg5OCwweDAwLDB4MjksMHgwMCwweGNiLDB4NDAsMHgyMiwweGMwLDB4MGIsMHgyNCwweDAyLDB4M2MsMHgwOCwweDhmLDB4NTAgfSB9LAoreyAgMTYsIDB4YzI0MCwgMCwgezB4MmUsMHg1MCwweDBkLDB4ZjAsMHgwMiwweGZkLDB4NDIsMHg4ZiwweDU4LDB4MjIsMHhlMCwweDQ4LDB4YjUsMHgwMiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4YzI1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg2YywweDAwLDB4YjMsMHgwMCwweDI0LDB4NDAgfSB9LAoreyAgMTYsIDB4YzI2MCwgMCwgezB4NGIsMHg5NCwweDAwLDB4NDksMHgwMCwweDkwLDB4ODAsMHgwNCwweDMwLDB4MDksMHgwMCwweDBlLDB4NGMsMHgwMCwweDgzLDB4ODAgfSB9LAoreyAgMTYsIDB4YzI3MCwgMCwgezB4MmMsMHhjMCwweDA5LDB4MzAsMHgyMiwweDZlLDB4NDIsMHg4MywweDgwLDB4MjAsMHg0OCwweDA4LDB4MzgsMHgwMiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzI4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxZSwweDAwLDB4YjcsMHg4MCwweDY1LDB4MjAgfSB9LAoreyAgMTYsIDB4YzI5MCwgMCwgezB4MGIsMHg3OCwweDgyLDB4N2EsMHgwOCwweDhjLDB4YzAsMHgyNSwweGEzLDB4NGIsMHg3OCwweDAyLDB4NWUsMHgwNCwweDg3LDB4ODQgfSB9LAoreyAgMTYsIDB4YzJhMCwgMCwgezB4MmQsMHg2MSwweDg5LDB4NzgsMHgwMiwweGRlLDB4MDQsMHg4NywweDgwLDB4ZTksMHg2MiwweDA4LDB4NzgsMHgwMiwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzJiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ZmIsMHgwMCwweDM0LDB4NDggfSB9LAoreyAgMTYsIDB4YzJjMCwgMCwgezB4MGYsMHgzYiwweDAzLDB4NDgsMHgwMCwweDkzLDB4NDgsMHgzNCwweDUwLDB4MGQsMHgwMCwweDAzLDB4NmMsMHgwMCwweGMzLDB4MTAgfSB9LAoreyAgMTYsIDB4YzJkMCwgMCwgezB4MWMsMHhjMiwweDA1LDB4MzAsMHgwMywweGNjLDB4NDAsMHhjYiwweDAwLDB4MzIsMHg0MCwweDBjLDB4MjAsMHgwMywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4YzJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiYywweDIwLDB4ZmYsMHgwMSwweDAzLDB4NDAgfSB9LAoreyAgMTYsIDB4YzJmMCwgMCwgezB4MGYsMHhmMCwweDIzLDB4MWMsMHgwMCwweGZmLDB4MDAsMHgzYiwweDgwLDB4MGYsMHhiMCwweDIzLDB4M2MsMHgwMiwweGZmLDB4NTAgfSB9LAoreyAgMTYsIDB4YzMwMCwgMCwgezB4M2QsMHhjNCwweDBmLDB4ZjEsMHgwMywweGVjLDB4MDAsMHhlZiwweDAwLDB4YjcsMHhjMCwweDBmLDB4ZTEsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4YzMxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhlYywweDAwLDB4ZmIsMHgwMiwweDNlLDB4ZTAgfSB9LAoreyAgMTYsIDB4YzMyMCwgMCwgezB4MGMsMHg4MCwweDAzLDB4NDgsMHgwMiwweGM4LDB4ODEsMHgzMiwweDAwLDB4MGYsMHg5MCwweDQyLDB4ZWMsMHhhMCwweGZiLDB4MTAgfSB9LAoreyAgMTYsIDB4YzMzMCwgMCwgezB4M2UsMHhlMCwweDBjLDB4YjEsMHgwMywweGVjLDB4NDAsMHhmYiwweDEwLDB4MzIsMHg0MCwweDFmLDB4ZjAsMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzM0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDAwLDB4YjcsMHgyNCwweDJkLDB4ODAgfSB9LAoreyAgMTYsIDB4YzM1MCwgMCwgezB4MDgsMHg3MCwweDQyLDB4ZDgsMHgxMCwweDhjLDB4MDIsMHgyMSwweDQwLDB4MGIsMHg1MCwweDAyLDB4ZGQsMHgwMCwweGU3LDB4MjAgfSB9LAoreyAgMTYsIDB4YzM2MCwgMCwgezB4MmYsMHg0MCwweDA4LDB4NzAsMHgwMiwweGRjLDB4MDUsMHhiNywweDAwLDB4MjEsMHhjMCwweDBiLDB4ZjAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4YzM3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4YjcsMHg5MCwweDJmLDB4NDAgfSB9LAoreyAgMTYsIDB4YzM4MCwgMCwgezB4MGEsMHg2OCwweDAyLDB4N2EsMHgwMCwweDk3LDB4ODAsMHgyMSwweGUwLDB4MGIsMHg3OCwweDAyLDB4ZGUsMHgwMCwweGI3LDB4ODAgfSB9LAoreyAgMTYsIDB4YzM5MCwgMCwgezB4MmQsMHhlMCwweDA4LDB4NzgsMHgwNiwweGRlLDB4MDAsMHhiNywweGEwLDB4MjEsMHg2MCwweDBiLDB4NzgsMHg0MiwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzNhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDAwLDB4YjMsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YzNiMCwgMCwgezB4MGEsMHgzNCwweDAyLDB4YzgsMHgwMCwweDgzLDB4NGEsMHgyMCwweGY4LDB4MGIsMHgzMSwweDAyLDB4Y2MsMHgwMCwweGEzLDB4MDAgfSB9LAoreyAgMTYsIDB4YzNjMCwgMCwgezB4MmMsMHhjMCwweDA4LDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwLDB4MjAsMHhiMiwweDBiLDB4MjAsMHg0MiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4YzNkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4YmEsMHgwMCwweDNmLDB4ODggfSB9LAoreyAgMTYsIDB4YzNlMCwgMCwgezB4MmUsMHhlMCwweDQzLDB4NTksMHg4OCwweGRlLDB4MDAsMHgzMywweGIwLDB4MGYsMHg2YywweDAzLDB4ZTgsMHgwMCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzNmMCwgMCwgezB4M2UsMHg4MCwweDJjLDB4YTAsMHgwMywweGU4LDB4MDQsMHhmYSwweDAwLDB4MjMsMHhiOCwweDBmLDB4ZTAsMHg4YiwweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4YzQwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDA0LDB4ZjgsMHgwMSwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YzQxMCwgMCwgezB4MDksMHg4MiwweDIxLDB4ZTAsMHgwMCwweGY4LDB4NDAsMHhiZSwweDE0LDB4MGYsMHg4NCwweDgxLDB4ZTAsMHgwMCwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzQyMCwgMCwgezB4M2UsMHgwMCwweDFmLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwLDB4YmUsMHgwMCwweDBmLDB4ODgsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4YzQzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZTEsMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4YzQ0MCwgMCwgezB4MGMsMHg5MCwweDQzLDB4ZTQsMHgyMCwweGQ5LDB4MDAsMHgzYywweDQ0LDB4MDgsMHg5MCwweDAzLDB4MjQsMHgwMCwweGY5LDB4MDEgfSB9LAoreyAgMTYsIDB4YzQ1MCwgMCwgezB4M2UsMHg0OCwweDBmLDB4MTAsMHg0MywweDI1LDB4MDAsMHhjOSwweDAwLDB4YjIsMHg0MCwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4YzQ2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4YjksMHgwMCwweGEwLDB4NDAgfSB9LAoreyAgMTYsIDB4YzQ3MCwgMCwgezB4MDgsMHg5OCwweDAyLDB4ZTYsMHgwOCwweGE5LDB4NjAsMHgyZSwweDQ5LDB4MDgsMHg5NCwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4YzQ4MCwgMCwgezB4MmUsMHg3MCwweDBiLDB4OTAsMHgwMiwweDI2LDB4MDIsMHg4OSwweDAwLDB4YTAsMHg0MCwweDBhLDB4OTAsMHgwYSwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzQ5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjksMHgwMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4YzRhMCwgMCwgezB4MDgsMHg5OCwweDA0LDB4ZTYsMHgwMCwweDk5LDB4ODAsMHgyZSwweDQwLDB4MGEsMHhiMSwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4YzRiMCwgMCwgezB4MGUsMHg0MCwweDBiLDB4OTAsMHgwYSwweDA0LDB4MDAsMHg4MSwweDAxLDB4MjIsMHhjMCwweDA4LDB4MTAsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YzRjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDgwLDB4YjEsMHgyMCwweDIyLDB4NDggfSB9LAoreyAgMTYsIDB4YzRkMCwgMCwgezB4MDgsMHgxOCwweDA2LDB4YzQsMHgwMCwweGExLDB4MDAsMHgyYywweDQ4LDB4MmEsMHgzMCwweDAyLDB4MDQsMHg4MCwweGIxLDB4MjIgfSB9LAoreyAgMTYsIDB4YzRlMCwgMCwgezB4MmMsMHg0OCwweDBiLDB4MTIsMHgwMiwweDA1LDB4ODAsMHg4MSwweDYwLDB4MjIsMHg1MCwweDBhLDB4MTQsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YzRmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZjgsMHg1MCwweDMyLDB4MTQgfSB9LAoreyAgMTYsIDB4YzUwMCwgMCwgezB4MGMsMHg4NSwweDAzLDB4ZTEsMHg0MCwweGQ4LDB4NTAsMHgzZSwweDE0LDB4MGUsMHg4MCwweDBiLDB4MjEsMHg0MCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzUxMCwgMCwgezB4M2UsMHg5NCwweDBmLDB4ODUsMHgwMywweDIwLDB4MDAsMHhjMCwweDAwLDB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMywweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4YzUyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhlNCwweDQxLDB4ZjksMHgxMCwweDNkLDB4NDUgfSB9LAoreyAgMTYsIDB4YzUzMCwgMCwgezB4MGYsMHhkMCwweDAzLDB4ZjQsMHgwMCwweGZmLDB4MDAsMHgzZiwweDQ1LDB4MGQsMHhkMCwweDAzLDB4ZTQsMHg0MCwweGY5LDB4MTAgfSB9LAoreyAgMTYsIDB4YzU0MCwgMCwgezB4M2YsMHg0NCwweDBmLDB4OTEsMHgwMywweGU0LDB4NDIsMHhmOSwweDEwLDB4M2YsMHg0MCwweDBmLDB4ZDQsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4YzU1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4YzU2MCwgMCwgezB4MGMsMHhkMCwweDAzLDB4ZjQsMHgwOCwweDhkLDB4MDIsMHgzZiwweDQwLDB4MGYsMHhkMCwweDAzLDB4ZTQsMHgwMCwweGNkLDB4MDAgfSB9LAoreyAgMTYsIDB4YzU3MCwgMCwgezB4MzMsMHg0MCwweDBjLDB4OTAsMHgwMywweDI0LDB4MDAsMHhmOSwweDAwLDB4MzIsMHg0MCwweDRjLDB4OTgsMHgyMywweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YzU4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMCwweDAwLDB4ZTgsMHgwMCwweDJlLDB4MDAgfSB9LAoreyAgMTYsIDB4YzU5MCwgMCwgezB4NDgsMHg4MCwweDAyLDB4ZTgsMHgwMCwweGQwLDB4MDAsMHgyZSwweDgwLDB4MGIsMHg4MCwweDEyLDB4ZTAsMHgwMiwweDg4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzVhMCwgMCwgezB4YTIsMHgwMCwweDBhLDB4ODAsMHgxMiwweDIyLDB4MDAsMHhiOCwweDgxLDB4MjIsMHgyOCwweDA4LDB4Y2YsMHgwMiwweDBlLDB4MDQgfSB9LAoreyAgMTYsIDB4YzViMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4YjEsMHgwMCwweDJjLDB4NDAgfSB9LAoreyAgMTYsIDB4YzVjMCwgMCwgezB4MjgsMHgxMCwweDAyLDB4YzQsMHgwMCwweDgxLDB4MDAsMHgyYywweDQwLDB4MGIsMHgxMCwweDAyLDB4YzQsMHgwMCwweDkxLDB4MDAgfSB9LAoreyAgMTYsIDB4YzVkMCwgMCwgezB4MjYsMHg0MCwweDA5LDB4MTAsMHgwMiwweDU0LDB4YTAsMHhiNSwweDJjLDB4YTUsMHg0MiwweDA4LDB4NTAsMHg4MiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YzVlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNCwweDAwLDB4YTksMHgwMCwweDJlLDB4NTAgfSB9LAoreyAgMTYsIDB4YzVmMCwgMCwgezB4NTgsMHg5MCwweDAyLDB4ZTQsMHg4MCwweDliLDB4MDAsMHgyZSwweDQ1LDB4OGIsMHg5MiwweDAyLDB4ZTQsMHgwMCwweDk5LDB4MDAgfSB9LAoreyAgMTYsIDB4YzYwMCwgMCwgezB4MjYsMHg0NCwweDBiLDB4OTAsMHgwMiwweDY0LDB4MDgsMHhiNSwweDAwLDB4MjUsMHg0YSwweDA4LDB4NTEsMHgwMiwweDA2LDB4MDQgfSB9LAoreyAgMTYsIDB4YzYxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NTQgfSB9LAoreyAgMTYsIDB4YzYyMCwgMCwgezB4MGMsMHg5MCwweDQzLDB4YzQsMHgwMCwweGM5LDB4OTAsMHgzZSwweDcwLDB4MGYsMHg5OCwweDAzLDB4ZTQsMHgwMCwweGQ5LDB4MDAgfSB9LAoreyAgMTYsIDB4YzYzMCwgMCwgezB4MzQsMHg2MCwweDRkLDB4OTAsMHgwYSwweDY0LDB4MDAsMHhmOSwweDAwLDB4MzYsMHg0MCwweDJjLDB4OWUsMHgwMywweDI4LDB4MDQgfSB9LAoreyAgMTYsIDB4YzY0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwMCwweDNjLDB4NDAgfSB9LAoreyAgMTYsIDB4YzY1MCwgMCwgezB4MGYsMHg5YywweDAzLDB4ZTYsMHgzMCwweGY5LDB4MDAsMHgzZSwweDYyLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGU5LDB4MDAgfSB9LAoreyAgMTYsIDB4YzY2MCwgMCwgezB4M2EsMHg0MCwweDRlLDB4OTAsMHgwMywweGE0LDB4MDAsMHg3OSwweDBjLDB4M2EsMHg0MCwweDBmLDB4OTAsMHgxYiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzY3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YzY4MCwgMCwgezB4MGMsMHg4MSwweDEzLDB4ZTEsMHgwOCwweGM4LDB4NDgsMHgzMiwweDAwLDB4M2MsMHg4MCwweDAzLDB4YzAsMHgwMCwweGYwLDB4MTAgfSB9LAoreyAgMTYsIDB4YzY5MCwgMCwgezB4M2UsMHgwNiwweDBjLDB4ODAsMHgwMywweGYwLDB4MDgsMHhjYywweDAwLDB4MzMsMHgwNCwweDBjLDB4YzAsMHgwMywweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4YzZhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDAwLDB4YmEsMHgwMCwweDJlLDB4ODAgfSB9LAoreyAgMTYsIDB4YzZiMCwgMCwgezB4MDgsMHhlYywweDQyLDB4ZmEsMHgyMCwweDhlLDB4MDAsMHgyMywweGEwLDB4MDgsMHhlOCwweDQyLDB4ZTgsMHgwMCwweGJlLDB4ODAgfSB9LAoreyAgMTYsIDB4YzZjMCwgMCwgezB4MmYsMHg4MCwweDA4LDB4YTAsMHgwMiwweGU4LDB4MDAsMHhkYSwweDAwLDB4MjIsMHg4MCwweDQ4LDB4ZTAsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzZkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YjMsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YzZlMCwgMCwgezB4MDksMHgzNCwweDgyLDB4YzksMHgwMCwweDgzLDB4ODAsMHgyMCwweGYwLDB4MDgsMHgzMCwweDgyLDB4Y2MsMHgwMCwweGIzLDB4ODAgfSB9LAoreyAgMTYsIDB4YzZmMCwgMCwgezB4MmMsMHhmMCwweDA4LDB4YjAsMHgwMiwweGMxLDB4MjAsMHg4MCwweDAwLDB4YTAsMHgzMiwweDA4LDB4MDAsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzcwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxYywweGMwLDB4YjcsMHgwMSwweDJmLDB4YzggfSB9LAoreyAgMTYsIDB4YzcxMCwgMCwgezB4ODksMHg1MCwweDAyLDB4ZDgsMHgwMiwweDg3LDB4YzQsMHgyMSwweGUyLDB4NDgsMHg3MCwweDgyLDB4ZGMsMHgwMCwweGI3LDB4MDAgfSB9LAoreyAgMTYsIDB4YzcyMCwgMCwgezB4MmMsMHg0MCwweDA4LDB4NzIsMHgwMiwweGNlLDB4MDAsMHg5NywweDA4LDB4MjMsMHhjMCwweDA4LDB4NzAsMHgwMiwweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzczMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4ZjcsMHhlMSwweDNkLDB4ZTggfSB9LAoreyAgMTYsIDB4Yzc0MCwgMCwgezB4MmQsMHg2OCwweDAzLDB4ZjIsMHgwMCwweGM3LDB4ODAsMHhiMCwweGUwLDB4MDgsMHg2OCwweDAzLDB4ZGYsMHg4MCwweGY2LDB4ODAgfSB9LAoreyAgMTYsIDB4Yzc1MCwgMCwgezB4M2QsMHhlMCwweDhjLDB4N2UsMHgwMywweGRhLDB4MDAsMHhjYywweDgwLDB4MzEsMHgyMCwweDBjLDB4YzgsMHgwYiwweDJhLDB4MDIgfSB9LAoreyAgMTYsIDB4Yzc2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhYywweDA4LDB4ZmIsMHgwMCwweDNjLDB4YzAgfSB9LAoreyAgMTYsIDB4Yzc3MCwgMCwgezB4MGUsMHg4MCwweDAzLDB4ZTAsMHgwOCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHhiMCwweDAyLDB4ZWMsMHgwMCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzc4MCwgMCwgezB4M2UsMHg0MCwweDJmLDB4YjAsMHgwMywweGU0LDB4MDAsMHhmYiwweDAwLDB4M2MsMHhjMCwweDJmLDB4YjAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4Yzc5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4ZmYsMHg5MiwweDdmLDB4ZWEgfSB9LAoreyAgMTYsIDB4YzdhMCwgMCwgezB4MGMsMHhmOCwweDAzLDB4ZmUsMHgwMCwweGNjLDB4YTAsMHgzZiwweDIwLDB4MGQsMHhmOSwweDAzLDB4M2UsMHgwMCwweGNmLDB4ODAgfSB9LAoreyAgMTYsIDB4YzdiMCwgMCwgezB4MzMsMHg2MCwweDBmLDB4ZjgsMHgwMywweGY2LDB4MDAsMHhlZiwweDg0LDB4MzMsMHhlMCwweDJjLDB4YzgsMHgwMywweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzdjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDAwLDB4YjcsMHgwMCwweDJmLDB4YzggfSB9LAoreyAgMTYsIDB4YzdkMCwgMCwgezB4MDgsMHg1NCwweDAyLDB4ZDgsMHgwMCwweGQ2LDB4MDQsMHgyZCwweDAxLDB4MDgsMHg2OSwweDAyLDB4MWMsMHgwMCwweDg1LDB4MDAgfSB9LAoreyAgMTYsIDB4YzdlMCwgMCwgezB4MjEsMHg0MywweDBiLDB4NzAsMHgwMywweDlhLDB4YzAsMHg4YywweDAwLDB4YTMsMHgwMiwweDA4LDB4ZjEsMHgwMiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YzdmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4YjcsMHgwMSwweDJkLDB4Y2MgfSB9LAoreyAgMTYsIDB4YzgwMCwgMCwgezB4MDgsMHg3MCwweDAyLDB4ZDQsMHgwMCwweDk0LDB4MjgsMHgyZCwweGMyLDB4MDgsMHhjMiwweDAyLDB4NWMsMHgwMCwweDg2LDB4MDAgfSB9LAoreyAgMTYsIDB4YzgxMCwgMCwgezB4MjEsMHg4MCwweDBiLDB4NzEsMHgwMiwweGRjLDB4MDAsMHhhNywweDEwLDB4MjEsMHhjMCwweDA4LDB4NDgsMHgwMiwweDQwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzgyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjYywweDA4LDB4YjMsMHgwMCwweDJjLDB4ZjAgfSB9LAoreyAgMTYsIDB4YzgzMCwgMCwgezB4MDgsMHgwNSwweDAyLDB4YzAsMHgyMCwweDkwLDB4ODAsMHgyZSwweDAwLDB4MDgsMHgwMCwweDgyLDB4NGMsMHgwMiwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzg0MCwgMCwgezB4YTAsMHg2MSwweDBiLDB4MzAsMHgwMiwweGEwLDB4MDAsMHg4MCwweDAwLDB4YTAsMHgzMCwweDg4LDB4YjEsMHgwYSwweDQ4LDB4MDQgfSB9LAoreyAgMTYsIDB4Yzg1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAwLDB4ZmYsMHgwMCwweDJkLDB4YzggfSB9LAoreyAgMTYsIDB4Yzg2MCwgMCwgezB4MGMsMHgzZCwweDAzLDB4ZTQsMHgwMCwweGRiLDB4MDIsMHgzZSwweGYwLDB4MmMsMHg5MCwweDRiLDB4N2MsMHgwMCwweGMxLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzg3MCwgMCwgezB4MzIsMHgyMCwweDRmLDB4ZjAsMHgxMywweGUwLDB4MDAsMHhlOCwweDAxLDB4MzIsMHgwMCwweDhjLDB4YWMsMHgwMywweDZhLDB4MDQgfSB9LAoreyAgMTYsIDB4Yzg4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwNCwweDNlLDB4YzIgfSB9LAoreyAgMTYsIDB4Yzg5MCwgMCwgezB4NGYsMHhiMCwweDAzLDB4ZTAsMHgwNCwweGZhLDB4NDAsMHgzZSwweGMyLDB4NGUsMHg5OCwweDIzLDB4YWMsMHgxMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzhhMCwgMCwgezB4M2UsMHg1MCwweDA3LDB4YjAsMHgxMywweGFjLDB4MDAsMHhmYiwweDAwLDB4M2UsMHhjMiwweDBmLDB4OTIsMHgwMywweGEwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzhiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhkYywweDAwLDB4Y2YsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YzhjMCwgMCwgezB4MGMsMHhjOCwweDIzLDB4MzYsMHg4MiwweGNmLDB4ODAsMHgzZiwweDgwLDB4MGMsMHhlMCwweDAzLDB4ZWMsMHgwMCwweGY5LDB4MjAgfSB9LAoreyAgMTYsIDB4YzhkMCwgMCwgezB4MzMsMHhjMCwweDBlLDB4ZjAsMHgwMywweGY4LDB4MTAsMHhkYywweDAwLDB4MzMsMHgwMCwweDRjLDB4ZTgsMHgyMSwweDAwLDB4NDQgfSB9LAoreyAgMTYsIDB4YzhlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2YywweDAwLDB4YWIsMHgwMCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4YzhmMCwgMCwgezB4NGEsMHg4ZCwweDQyLDB4MjEsMHgwMCwweDhiLDB4NDIsMHgyZSwweGQyLDB4MDgsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGI4LDB4ODggfSB9LAoreyAgMTYsIDB4YzkwMCwgMCwgezB4MzQsMHg2MiwweDBkLDB4YjAsMHgwMiwweGU0LDB4MDAsMHg4YiwweDAwLDB4MjIsMHhjMCwweDA4LDB4OTAsMHgwYSwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4YzkxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OGIsMHgwMCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4YzkyMCwgMCwgezB4MDgsMHhhMCwweDAyLDB4MGQsMHgwMCwweDg5LDB4MTAsMHgyZSwweDA4LDB4MjgsMHg5MiwweDAyLDB4ZWMsMHgwNCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4YzkzMCwgMCwgezB4MjIsMHhhMCwweDA4LDB4YjAsMHgwMiwweDY0LDB4MDIsMHhiMywweDAyLDB4MjAsMHhjMCwweDA4LDB4YTIsMHgwMiwweGEwLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzk0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDAwLDB4YTMsMHgwMCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4Yzk1MCwgMCwgezB4MGEsMHg5MCwweDIyLDB4MGMsMHgxMCwweDgwLDB4MDAsMHgyYywweDAwLDB4MTgsMHgwMiwweDgyLDB4Y2MsMHgwMCwweGIwLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzk2MCwgMCwgezB4MjYsMHg0MCwweDA5LDB4MzAsMHgwMiwweGM4LDB4MjAsMHg4MCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MTAsMHgwNiwweDgyLDB4MDEgfSB9LAoreyAgMTYsIDB4Yzk3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4Y2IsMHgwMCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4Yzk4MCwgMCwgezB4MGMsMHhhMSwweDAyLDB4MjQsMHgwMCwweDg4LDB4MDAsMHgzYywweDAwLDB4MGMsMHg4MCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzk5MCwgMCwgezB4MzIsMHg4MCwweDBlLDB4YjAsMHgwMywweGNjLDB4ODAsMHhkYiwweDAwLDB4MzIsMHhjMCwweDBjLDB4YTAsMHgwMywweDgwLDB4MDMgfSB9LAoreyAgMTYsIDB4YzlhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YzliMCwgMCwgezB4NGYsMHhjMiwweDEzLDB4ZDQsMHgxMCwweGZjLDB4MDAsMHgzZiwweDAwLDB4MGYsMHgwMCwweDAzLDB4YmMsMHgwMCwweGZjLDB4MDAgfSB9LAoreyAgMTYsIDB4YzljMCwgMCwgezB4M2YsMHg0MCwweDBmLDB4ZjAsMHgyMywweGUwLDB4MTIsMHhmYywweDAxLDB4YmYsMHgwMCwweDBmLDB4ZDAsMHgwMywweDY4LDB4MDIgfSB9LAoreyAgMTYsIDB4YzlkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDAwLDB4YzcsMHg4MCwweDMzLDB4YzAgfSB9LAoreyAgMTYsIDB4YzllMCwgMCwgezB4OGIsMHhiNCwweDAzLDB4YjAsMHhjMCwweGNmLDB4MmUsMHgxZiwweDBjLDB4NGYsMHhjMywweDAzLDB4MzAsMHg4MCwweGZmLDB4MDEgfSB9LAoreyAgMTYsIDB4YzlmMCwgMCwgezB4M2YsMHgwOCwweDBmLDB4ZjAsMHgwMCwweDdjLDB4MDAsMHhmZiwweDIxLDB4MzMsMHhlNCwweDBjLDB4ZTAsMHgwMywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2EwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlZSwweDAwLDB4OGIsMHg4MiwweDIzLDB4ZjAgfSB9LAoreyAgMTYsIDB4Y2ExMCwgMCwgezB4MGIsMHhiNSwweDEyLDB4MGQsMHg4OCwweDg4LDB4YzAsMHgwZSwweDk4LDB4MGIsMHg4NiwweDAyLDB4MjEsMHgwMCwweGJiLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2EyMCwgMCwgezB4MmUsMHhlNCwweDRiLDB4ZjcsMHg4MywweDJmLDB4NDQsMHhiZiwweDkwLDB4MjIsMHhjOCwweDQ4LDB4YTYsMHg4MiwweDIwLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2EzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDA5LDB4OGEsMHgwMCwweDIwLDB4NTAgfSB9LAoreyAgMTYsIDB4Y2E0MCwgMCwgezB4NGIsMHhiMiwweDBhLDB4ODAsMHhjYywweDgzLDB4MDEsMHgwYywweDhjLDB4MGIsMHgyMywweDBhLDB4MDQsMHg2MCwweGIzLDB4MTQgfSB9LAoreyAgMTYsIDB4Y2E1MCwgMCwgezB4MjQsMHg0MCwweDRiLDB4MzAsMHgwMiwweGNjLDB4MTAsMHhiMywweDAwLDB4MjAsMHhjOCwweGU5LDB4MTEsMHgwNiwweDYyLDB4MDEgfSB9LAoreyAgMTYsIDB4Y2E2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhYywweDAxLDB4OGEsMHg4MCwweGEyLDB4NDQgfSB9LAoreyAgMTYsIDB4Y2E3MCwgMCwgezB4MGIsMHhiMCwweDAyLDB4YTEsMHgwNCwweDg4LDB4NDAsMHgyZSwweGEwLDB4MGIsMHgyMCwweDAyLDB4MjgsMHgyMCwweGJiLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2E4MCwgMCwgezB4MmUsMHg0MCwweDBiLDB4YjAsMHgwMiwweDJjLDB4MDgsMHhiYiwweDAwLDB4MjIsMHhjMCwweDA5LDB4YjAsMHgwMiwweDcwLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2E5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4YzMsMHg4MywweDMyLDB4ZTAgfSB9LAoreyAgMTYsIDB4Y2FhMCwgMCwgezB4OGYsMHgwMCwweDAzLDB4YTAsMHgwMiwweGNiLDB4YzQsMHgzZSwweDI4LDB4MDcsMHg4YiwweDAzLDB4MjEsMHgwMCwweGY5LDB4YzAgfSB9LAoreyAgMTYsIDB4Y2FiMCwgMCwgezB4M2UsMHgxMCwweDBmLDB4YjAsMHgwMywweGVjLDB4MDAsMHg3YiwweDAwLDB4MzIsMHhjMCwweDBkLDB4YTAsMHgwMywweDUwLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2FjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHg5YywweDAyLDB4ZmYsMHgwMCwweDNmLDB4ZTAgfSB9LAoreyAgMTYsIDB4Y2FkMCwgMCwgezB4MGYsMHhmNCwweDQzLDB4NWUsMHg4MCwweGZjLDB4OTQsMHgzZiwweDAwLDB4MGYsMHhjMCwweDJiLDB4ZjIsMHg1MCwweGZkLDB4MjEgfSB9LAoreyAgMTYsIDB4Y2FlMCwgMCwgezB4N2UsMHg4NCwweDhmLDB4ZjAsMHgwMywweDZjLDB4MGMsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBlLDB4NjIsMHgwMywweGI4LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2FmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZWIsMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2IwMCwgMCwgezB4MmMsMHg4MCwweDAzLDB4NjksMHgwMCwweGNiLDB4MzAsMHhiMiwweDAwLDB4NGYsMHhiMywweDQzLDB4ZTUsMHgwMCwweGNiLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2IxMCwgMCwgezB4NzIsMHgxOCwweDJjLDB4YjAsMHgwMywweGVjLDB4MjgsMHhjMywweDIxLDB4M2EsMHhjMSwweDBmLDB4OTQsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2IyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgzYywweDAwLDB4OGIsMHgyMCwweDIyLDB4NTAgfSB9LAoreyAgMTYsIDB4Y2IzMCwgMCwgezB4MDgsMHhiMCwweDAyLDB4MjgsMHgwMCwweDg4LDB4YzAsMHgyYSwweDAwLDB4OGIsMHhiNCwweDAyLDB4ZTgsMHgwMCwweGRiLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2I0MCwgMCwgezB4NjIsMHgzMCwweDA4LDB4ZjAsMHgwMiwweGZjLDB4MDAsMHg4ZiwweDgwLDB4MjIsMHhjMCwweDBiLDB4OTUsMHg0NywweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2I1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4YjEsMHgwMCwweDIwLDB4YzIgfSB9LAoreyAgMTYsIDB4Y2I2MCwgMCwgezB4NDgsMHgzMCwweDAyLDB4NDksMHg4MCwweDgzLDB4NDIsMHg2MCwweDEyLDB4MGIsMHgzMCwweDAyLDB4YzgsMHgwMCwweDgyLDB4MDIgfSB9LAoreyAgMTYsIDB4Y2I3MCwgMCwgezB4MmMsMHgzMCwweDA5LDB4YjAsMHgwMiwweGNmLDB4MDEsMHg4MywweDUwLDB4MmEsMHhjMCwweDBiLDB4MjAsMHgwMiwweGI4LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2I4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxZSwweDAwLDB4OWQsMHg4MCwweGEwLDB4ZTAgfSB9LAoreyAgMTYsIDB4Y2I5MCwgMCwgezB4MDgsMHg3OSwweDIyLDB4NWUsMHg2MCwweDg3LDB4OTAsMHgyOSwweGEwLDB4MGIsMHg3OCwweDAyLDB4YzYsMHgwMCwweDkyLDB4ODEgfSB9LAoreyAgMTYsIDB4Y2JhMCwgMCwgezB4MDUsMHhlMCwweDA5LDB4NzgsMHgwMiwweGRlLDB4NDAsMHg4NywweDgwLDB4MjEsMHhlMCwweDBiLDB4MjksMHgwMiwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2JiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDQwLDB4ZjIsMHgwMCwweDMwLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2JjMCwgMCwgezB4MDgsMHgzYSwweDAzLDB4NDQsMHgwNCwweGMzLDB4MTQsMHgzMCwweGMwLDB4MGYsMHgyMiwweDAzLDB4Y2MsMHg4MCwweGMyLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2JkMCwgMCwgezB4YTQsMHhkMiwweDBkLDB4MzAsMHgxMywweGNjLDB4MjAsMHhjMywweDAwLDB4MzgsMHhjNCwweDRmLDB4MDQsMHg0MywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4Y2JlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHg5YywweDAwLDB4ZWUsMHgwMCwweDNmLDB4ZTAgfSB9LAoreyAgMTYsIDB4Y2JmMCwgMCwgezB4MGYsMHg3MCwweDAzLDB4YjQsMHgwMiwweGY0LDB4MTAsMHgzZiwweGMwLDB4OGYsMHhhMCwweDAzLDB4ZmMsMHgwMCwweDdlLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2MwMCwgMCwgezB4M2IsMHhjMCwweDBlLDB4ZjAsMHg4MywweGVjLDB4MDAsMHhmNywweDAwLDB4M2YsMHhjMCwweDBmLDB4YzAsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4Y2MxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhmYywweDAwLDB4ZjksMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2MyMCwgMCwgezB4MGYsMHhhMCwweDAzLDB4YWEsMHgxMiwweGNiLDB4MDEsMHgzMiwweDgwLDB4MGYsMHhiMCwweDEzLDB4MjgsMHgxNCwweGY5LDB4ODAgfSB9LAoreyAgMTYsIDB4Y2MzMCwgMCwgezB4M2EsMHg0MCwweDAzLDB4YjQsMHgwMywweGVjLDB4NDIsMHhjYiwweDE4LDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2M0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5ZCwweDAwLDB4YjUsMHgwMCwweDJkLDB4YzQgfSB9LAoreyAgMTYsIDB4Y2M1MCwgMCwgezB4MGIsMHg3MCwweDRiLDB4N2MsMHgwMCwweDg0LDB4MDAsMHgyMSwweDgwLDB4MGIsMHg3MCwweDAyLDB4OTQsMHgxMCwweGIyLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2M2MCwgMCwgezB4MjksMHhjMCwweDBiLDB4NzIsMHg4MiwweGRjLDB4MDAsMHg4NywweDIwLDB4MmQsMHhjMSwweDBlLDB4NzAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2M3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4YjcsMHg4MCwweDJkLDB4ZTAgfSB9LAoreyAgMTYsIDB4Y2M4MCwgMCwgezB4MGIsMHg2OCwweDAyLDB4OWUsMHgwMCwweDgzLDB4ODAsMHgyMSwweGUwLDB4NWIsMHgzOCwweDAyLDB4MWUsMHgwMCwweGI0LDB4YzAgfSB9LAoreyAgMTYsIDB4Y2M5MCwgMCwgezB4MjUsMHhlMCwweDA5LDB4NzgsMHgzMiwweGNlLDB4MDAsMHg5NywweDgwLDB4MmQsMHhlMCwweDBiLDB4NWMsMHg0ZSwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2NhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDAwLDB4YjMsMHg0NCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2NiMCwgMCwgezB4MGIsMHgzYywweDAyLDB4Y2MsMHg0MCwweDkzLDB4MDgsMHgyMCwweGUwLDB4MGIsMHgzMCwweDAyLDB4OGMsMHgxMCwweGIzLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2NjMCwgMCwgezB4MjgsMHhkOCwweDFiLDB4MzAsMHgwMiwweGNjLDB4MDgsMHg5MywweDAxLDB4NmMsMHhjMCwweDBhLDB4YjgsMHg4MiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2NkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZjYsMHgxMCwweDNlLDB4ODAgfSB9LAoreyAgMTYsIDB4Y2NlMCwgMCwgezB4NGIsMHhlZCwweDgzLDB4YjgsMHgwMCwweGNlLDB4ZTQsMHhiMywweGEzLDB4MGYsMHhlMCwweDAzLDB4MzgsMHgwMCwweGZlLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2NmMCwgMCwgezB4M2IsMHg4MCwweDBkLDB4YTAsMHgwMiwweGU4LDB4MDAsMHhkYSwweDAwLDB4M2UsMHg4MCwweDBmLDB4ZTgsMHgwMiwweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2QwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDEwLDB4ZjgsMHg0MCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2QxMCwgMCwgezB4MGYsMHg4MCwweDEzLDB4NjAsMHgwMCwweGUwLDB4MDAsMHgzZSwweDAwLDB4NDMsMHgwOCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDggfSB9LAoreyAgMTYsIDB4Y2QyMCwgMCwgezB4M2EsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MDAsMHhlOCwweDQwLDB4M2UsMHgwMCwweDBlLDB4ODAsMHgyMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2QzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhjNCwweDAwLDB4ZDksMHhjMCwweGJlLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2Q0MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZTYsMHgwMCwweGY5LDB4MDAsMHgzMiwweDQwLDB4MDEsMHg5YSwweDAzLDB4MjQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2Q1MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGM0LDB4NDAsMHgwOSwweDEwLDB4MGUsMHg0MCwweDBmLDB4OWEsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2Q2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDA0LDB4ODksMHgwNCwweGEyLDB4NjAgfSB9LAoreyAgMTYsIDB4Y2Q3MCwgMCwgezB4OGIsMHg5ZCwweDgwLDB4YTYsMHgwMCwweGI5LDB4ODAsMHgyMiwweDQwLDB4NDgsMHg5OCwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2Q4MCwgMCwgezB4MmUsMHg0MCwweDhiLDB4OTAsMHgwMiwweGU0LDB4OTQsMHg4OSwweDYwLDB4MmUsMHg0MCwweDBiLDB4OTQsMHgwYiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2Q5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4OTksMHgwOCwweGFlLDB4NDggfSB9LAoreyAgMTYsIDB4Y2RhMCwgMCwgezB4NGIsMHgxMCwweDAyLDB4ZTUsMHg4MSwweGI5LDB4MTAsMHgyMCwweDQ0LDB4MWIsMHg5NCwweDAyLDB4MjQsMHgxMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2RiMCwgMCwgezB4NmUsMHg2MCwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHg4OSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTQsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2RjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDgwLDB4ODksMHgwMCwweGEwLDB4NjggfSB9LAoreyAgMTYsIDB4Y2RkMCwgMCwgezB4MGIsMHgxMiwweDAyLDB4ODQsMHg4OSwweGIxLDB4MjAsMHgyMCwweDQ4LDB4MWEsMHgxMiwweDEyLDB4MDQsMHg4MCwweGIxLDB4MjIgfSB9LAoreyAgMTYsIDB4Y2RlMCwgMCwgezB4MGMsMHg0OCwweDBiLDB4MTIsMHgwMiwweGM0LDB4ODEsMHhhMSwweDIwLDB4MmMsMHg0MCwweDBiLDB4MTIsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4Y2RmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4ZDgsMHgwMCwweGJlLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2UwMCwgMCwgezB4MGYsMHgwNSwweDBiLDB4ZTEsMHg0MCwweGY4LDB4MDAsMHgzMiwweDE0LDB4MGYsMHg4NSwweDAzLDB4MjEsMHg0MCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2UxMCwgMCwgezB4MmUsMHg4MCwweDBmLDB4ODUsMHgxMywweGUwLDB4MDIsMHhjOCwweDAwLDB4M2UsMHgxNCwweDBmLDB4MDUsMHgwMSwweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4Y2UyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhlNCwweDQwLDB4ZmQsMHgwMCwweGJmLDB4NDQgfSB9LAoreyAgMTYsIDB4Y2UzMCwgMCwgezB4MGYsMHhkMSwweDAzLDB4ZjQsMHg0MCwweDdkLDB4MTAsMHhiZiwweDQ0LDB4NDUsMHhmMSwweDJiLDB4ZjQsMHg0MCwweGZkLDB4MTAgfSB9LAoreyAgMTYsIDB4Y2U0MCwgMCwgezB4M2YsMHg0NCwweDBmLDB4OTEsMHgwMywweGU0LDB4NDAsMHhkOSwweDEwLDB4M2UsMHg0MCwweDBmLDB4ZDEsMHgwMywweGE2LDB4MDYgfSB9LAoreyAgMTYsIDB4Y2U1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNiwweDAwLDB4ZmQsMHgwMCwweDFmLDB4NjIgfSB9LAoreyAgMTYsIDB4Y2U2MCwgMCwgezB4MGYsMHhkOCwweDgyLDB4MzYsMHgwMCwweGJkLDB4YTAsMHgzYiwweDY4LDB4MGMsMHhkYywweDgzLDB4MjYsMHhjOCwweGQ5LDB4YTAgfSB9LAoreyAgMTYsIDB4Y2U3MCwgMCwgezB4MzMsMHg2MCwweDBkLDB4OTksMHg4MywweDU2LDB4MjAsMHhkNSwweGE4LDB4MmUsMHg0NCwweDBjLDB4ZDgsMHg4MywweDg2LDB4MDQgfSB9LAoreyAgMTYsIDB4Y2U4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMSwweDQ4LDB4YjgsMHgwMCwweDJlLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2U5MCwgMCwgezB4MGIsMHgwYSwweDgyLDB4MjIsMHgyMCwweGI4LDB4NTAsMHgyMiwweGJhLDB4MDgsMHg4YSwweDIyLDB4MjIsMHg4MCwweDg4LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2VhMCwgMCwgezB4MjIsMHgwMSwweDA4LDB4MGMsMHgwMiwweDIwLDB4MDAsMHg4OCwweDAwLDB4MmUsMHgyOCwweDg4LDB4ODgsMHgwMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2ViMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4YjEsMHgwMCwweDJjLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2VjMCwgMCwgezB4MWIsMHgxMCwweDBhLDB4ODQsMHg0MCwweGIxLDB4MDAsMHgyOCwweDU4LDB4MGEsMHgzMiwweDAyLDB4MDUsMHgwMCwweDk5LDB4NDAgfSB9LAoreyAgMTYsIDB4Y2VkMCwgMCwgezB4MjAsMHg2NSwweDA5LDB4MTAsMHg0MiwweGM0LDB4MDAsMHg5MSwweDAwLDB4MmMsMHg0MCwweDBhLDB4MzAsMHg4MiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4Y2VlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTEsMHhhNCwweDAwLDB4YjksMHgwMCwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2VmMCwgMCwgezB4MWIsMHg5MCwweDAyLDB4YTUsMHg4MCwweGI5LDB4MTAsMHgyMiwweDQ4LDB4MDgsMHgxMCwweDQyLDB4MDQsMHgxMCwweDA5LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2YwMCwgMCwgezB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweGU0LDB4MDAsMHg5YiwweDAwLDB4MmMsMHg0MCwweDBhLDB4OTQsMHgyMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4Y2YxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZjksMHgyMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2YyMCwgMCwgezB4MGYsMHg5MCwweDEzLDB4YTcsMHgxMCwweGY5LDB4NjAsMHhiYSwweDUwLDB4MmUsMHg5YywweDBhLDB4MjUsMHg4NCwweGQxLDB4ZjAgfSB9LAoreyAgMTYsIDB4Y2YzMCwgMCwgezB4YjIsMHg2MCwweDBkLDB4OTAsMHgwMywweGU0LDB4MDAsMHhkOSwweDAwLDB4M2UsMHg0MCwweDBlLDB4OTAsMHgwMywweGE4LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2Y0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNCwweDBjLDB4ZjksMHg5MCwweDNlLDB4NmEgfSB9LAoreyAgMTYsIDB4Y2Y1MCwgMCwgezB4OGYsMHg5MCwweDIzLDB4NjYsMHgwMCwweGYxLDB4MDgsMHgzYywweDQwLDB4MGYsMHg5YywweDQzLDB4ZTQsMHg0MCwweGY5LDB4ODAgfSB9LAoreyAgMTYsIDB4Y2Y2MCwgMCwgezB4M2EsMHg0NCwweDBmLDB4OTAsMHgwMywweDI0LDB4MDQsMHhlOSwweDAyLDB4M2UsMHg0MCwweDJkLDB4OTEsMHgxMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2Y3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZTgsMHgyMCwweDNlLDB4MDEgfSB9LAoreyAgMTYsIDB4Y2Y4MCwgMCwgezB4MGMsMHgwMCwweDAzLDB4YTEsMHgyMCwweGU4LDB4NTAsMHgzMiwweDEwLDB4MmMsMHg4YywweDAzLDB4MjEsMHgwMCwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2Y5MCwgMCwgezB4MzIsMHgwMiwweDBmLDB4MDAsMHgxMywweDIwLDB4ODgsMHhjOCwweDA4LDB4MzIsMHgwMCwweDBmLDB4OGMsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2ZhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDIwLDB4OGUsMHhlMywweDJmLDB4OTAgfSB9LAoreyAgMTYsIDB4Y2ZiMCwgMCwgezB4MGEsMHhlMCwweDA2LDB4M2IsMHgwMCwweGVlLDB4MDQsMHgyMywweDkwLDB4MDgsMHhlMCwweDAyLDB4MjgsMHgwOCwweDhhLDB4MDIgfSB9LAoreyAgMTYsIDB4Y2ZjMCwgMCwgezB4NzUsMHg5MCwweDhiLDB4YTAsMHg0MSwweDU4LDB4OTAsMHg4ZSwweDgwLDB4MmEsMHg4MSwweDBiLDB4ZTAsMHgwMywweDhhLDB4MTAgfSB9LAoreyAgMTYsIDB4Y2ZkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0ZSwweDAwLDB4YTMsMHgwMCwweDZjLDB4NjAgfSB9LAoreyAgMTYsIDB4Y2ZlMCwgMCwgezB4MDgsMHgzOCwweDFhLDB4OGUsMHg0MCwweGEwLDB4ODAsMHgyMCwweGNjLDB4MDksMHgzMCwweDAyLDB4MGMsMHgwNSwweGEzLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2ZmMCwgMCwgezB4MjgsMHhjNCwweDBiLDB4MzAsMHgwMiwweDBkLDB4MDEsMHg4MywweGMwLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDAwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxZSwweDA4LDB4ODcsMHgwMCwweDJkLDB4NjIgfSB9LAoreyAgMTYsIDB4ZDAxMCwgMCwgezB4MGIsMHg3MCwweDkyLDB4MWMsMHgwOCwweGEwLDB4MDAsMHg2MSwweGMwLDB4MDksMHg2MCwweDA2LDB4MWMsMHg4MCwweGE3LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDAyMCwgMCwgezB4MjEsMHhjMCwweDBiLDB4NzIsMHgwMiwweDU4LDB4MDEsMHg4NywweDg4LDB4MjksMHhjMCwweDBiLDB4NjAsMHgxMiwweGE4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDAzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4ZTYsMHg4MCwweDNkLDB4NjAgfSB9LAoreyAgMTYsIDB4ZDA0MCwgMCwgezB4MGMsMHg3OCwweDQyLDB4OTYsMHgwMCwweGU0LDB4ODAsMHhhMywweDYwLDB4MGQsMHg3OCwweDAzLDB4M2YsMHgwMCwweGUzLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDA1MCwgMCwgezB4MjEsMHhlMCwweDBmLDB4N2IsMHgwMywweDE2LDB4MDgsMHhjNywweDgwLDB4MzEsMHhlMiwweDRmLDB4NzgsMHg0MywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4ZDA2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHg4YywweDAxLDB4ZjgsMHgwMCwweDNjLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDA3MCwgMCwgezB4MGUsMHhiMCwweDAyLDB4ZWMsMHgwMCwweGY4LDB4MDEsMHgzZSwweDQwLDB4NGUsMHgzMCwweDMzLDB4ZWQsMHgyMCwweGRiLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDA4MCwgMCwgezB4YmUsMHhjMCwweDBmLDB4YjQsMHgwMywweGVjLDB4MDAsMHhmYiwweDAwLDB4M2UsMHhkOCwweDBmLDB4YTAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4ZDA5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4YzcsMHg4NCwweDIzLDB4NjAgfSB9LAoreyAgMTYsIDB4ZDBhMCwgMCwgezB4MGMsMHg3OCwweDBiLDB4YmUsMHgwMCwweGZkLDB4ODAsMHgzZiwweGUwLDB4MGYsMHhlYiwweDAzLDB4M2UsMHgwMCwweGNmLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDBiMCwgMCwgezB4M2IsMHgyNSwweDBjLDB4ZjgsMHg4MywweDdlLDB4NDAsMHhjZCwweDgwLDB4MzMsMHhlMiwweDBiLDB4ZjksMHgwMywweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDBjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDAyLDB4ODcsMHgwMCwweDE1LDB4NDggfSB9LAoreyAgMTYsIDB4ZDBkMCwgMCwgezB4MDgsMHg3MCwweDAyLDB4MTQsMHgyMCwweGI2LDB4MDAsMHgzNSwweDlhLDB4NDksMHhjOCwweDAzLDB4OWMsMHg4NCwweGE3LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDBlMCwgMCwgezB4MzksMHhkMCwweDBhLDB4NzAsMHgwMiwweDFhLDB4MDgsMHhhNCwweDAwLDB4MjEsMHhjMCwweDA5LDB4NjEsMHg0MiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDBmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4ODcsMHgwMCwweDIxLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDEwMCwgMCwgezB4MDgsMHg3MSwweDAyLDB4OTQsMHgwMCwweGI1LDB4MDAsMHgyZCwweDQwLDB4MGIsMHhmMSwweDIyLDB4NWMsMHgwMiwweDA3LDB4MDggfSB9LAoreyAgMTYsIDB4ZDExMCwgMCwgezB4MmMsMHg1MCwweDA4LDB4NzAsMHgwMiwweDUwLDB4MDAsMHg4NywweDAwLDB4MmQsMHhjNCwweDBiLDB4NTAsMHg0MiwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDEyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjYywweDAwLDB4ODMsMHgwMiwweDI0LDB4NDAgfSB9LAoreyAgMTYsIDB4ZDEzMCwgMCwgezB4MTgsMHgzZCwweDBhLDB4MDEsMHgwMCwweGIwLDB4NTgsMHgyNCwweDIwLDB4MDksMHgzMCwweDAyLDB4OGYsMHg0MCwweDgzLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZDE0MCwgMCwgezB4MmMsMHhjMSwweDBhLDB4MzAsMHg0MiwweDA4LDB4MDAsMHhiMywweDAxLDB4NmMsMHhjMCwweDA5LDB4MDgsMHgxNiwweDA4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZDE1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHg4YywweDAwLDB4OGIsMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDE2MCwgMCwgezB4MGMsMHgyNSwweDAzLDB4YTgsMHg0OCwweGY4LDB4ODEsMHgzZSwweDgwLDB4MGYsMHg4MCwweDYzLDB4N2MsMHgwMCwweGNiLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDE3MCwgMCwgezB4M2EsMHhjMCwweDBjLDB4ZjAsMHgwMywweDZjLDB4MDAsMHhjYSwweDAyLDB4YmYsMHhjMCwweDBmLDB4OTgsMHg4YiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDE4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlYywweDAwLDB4ZjksMHgwMCwweDNlLDB4NTAgfSB9LAoreyAgMTYsIDB4ZDE5MCwgMCwgezB4MmYsMHhhNCwweDBiLDB4YzgsMHgwMCwweGYwLDB4NDAsMHgzZSwweGQwLDB4MGYsMHhhMCwweDMzLDB4ZWMsMHgyMCwweGZiLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDFhMCwgMCwgezB4N2EsMHhlMCwweDBmLDB4YjAsMHgwMywweGVkLDB4MDgsMHhlOSwweDAzLDB4MzIsMHhjMCwweDBkLDB4OTAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDFiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhlYywweDQwLDB4ZWUsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDFjMCwgMCwgezB4MGMsMHhkYSwweDAzLDB4NzAsMHgwNCwweGNjLDB4MDIsMHhiMSwweGEwLDB4MGUsMHhmMCwweDIzLDB4ZWMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDFkMCwgMCwgezB4MzcsMHgyMCwweGNkLDB4YjAsMHg3MywweGVjLDB4ODgsMHhmYiwweDgwLDB4M2YsMHhjMCwweDBmLDB4MzAsMHgwMywweDAwLDB4NDQgfSB9LAoreyAgMTYsIDB4ZDFlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2ZSwweDAwLDB4ODgsMHg4MCwweDJjLDB4ZTEgfSB9LAoreyAgMTYsIDB4ZDFmMCwgMCwgezB4MDgsMHg5NCwweDBhLDB4YTksMHgwMiwweDg4LDB4NDAsMHgyMiwweGQwLDB4MDgsMHhiOSwweDQyLDB4ZWMsMHgwNCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDIwMCwgMCwgezB4MmMsMHhkNCwweDBkLDB4YjAsMHgwMiwweGVkLDB4MjAsMHhiYiwweGQwLDB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMiwweGEwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDIxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyNCwweDAwLDB4YWIsMHg4MCwweDJlLDB4ZjAgfSB9LAoreyAgMTYsIDB4ZDIyMCwgMCwgezB4MjksMHhhMCwweDgyLDB4NmQsMHgwMCwweDg4LDB4MDgsMHgyMiwweDA0LDB4MDgsMHg5MCwweDQyLDB4ZWMsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDIzMCwgMCwgezB4MmEsMHg4MSwweDA4LDB4YjAsMHgwMiwweGU0LDB4MDksMHhiYSwweDA0LDB4MmUsMHhjMSwweDRiLDB4OTgsMHg4MiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDI0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDAwLDB4ODMsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDI1MCwgMCwgezB4MGEsMHgyMSwweDAyLDB4ODQsMHgxMCwweDgyLDB4MDAsMHhlMCwweDAwLDB4MTgsMHgwYSwweDEyLDB4Y2MsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDI2MCwgMCwgezB4MGMsMHhjMCwweDA5LDB4MzAsMHgwMiwweGNjLDB4OTAsMHhiMCwweDAwLDB4MmMsMHhjMCwweDBiLDB4MTAsMHgwMiwweDgyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDI3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2NCwweDAwLDB4ZWIsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDI4MCwgMCwgezB4MmMsMHhiNCwweDAzLDB4NjQsMHgwOCwweDg4LDB4MDAsMHhiMiwweDAwLDB4MGMsMHhiMiwweDQzLDB4ZmMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDI5MCwgMCwgezB4NTYsMHgwMCwweDBjLDB4ZjAsMHgwMSwweGU0LDB4MDAsMHhmYiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ODAsMHgwYiwweDAwLDB4MDMgfSB9LAoreyAgMTYsIDB4ZDJhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmNCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDJiMCwgMCwgezB4MmQsMHhmMCwweDYxLDB4ZjAsMHgwMCwweGY0LDB4MDAsMHgyNywweDAxLDB4MGQsMHhiMSwweDExLDB4ZmMsMHgwMCwweGZmLDB4MDIgfSB9LAoreyAgMTYsIDB4ZDJjMCwgMCwgezB4MDcsMHhjMCwweDBmLDB4ZjAsMHgwMywweGVjLDB4NDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4YzAsMHgwMywweDY4LDB4MDYgfSB9LAoreyAgMTYsIDB4ZDJkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmNiwweDAwLDB4ZWYsMHg5MCwweDNkLDB4NGMgfSB9LAoreyAgMTYsIDB4ZDJlMCwgMCwgezB4MmMsMHhjMCwweDEzLDB4ZjQsMHgwOCwweGZkLDB4MjAsMHgzNywweDRjLDB4OGUsMHg4MiwweDgzLDB4NzQsMHg4NCwweGRjLDB4YzIgfSB9LAoreyAgMTYsIDB4ZDJmMCwgMCwgezB4M2YsMHhkOCwweDBkLDB4ZjIsMHgwMywweGVjLDB4YzAsMHhmZiwweDgxLDB4M2YsMHgwMCwweDBjLDB4ZjgsMHgwMywweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDMwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlNiwweDAwLDB4OGIsMHgyNCwweDJlLDB4NWMgfSB9LAoreyAgMTYsIDB4ZDMxMCwgMCwgezB4MDgsMHg4ZCwweDAyLDB4ZmYsMHg0OCwweGI5LDB4OTAsMHgyZiwweDU0LDB4MGIsMHg4NCwweDgyLDB4M2UsMHg0MCwweGEwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDMyMCwgMCwgezB4MmUsMHhjNCwweDBhLDB4ZmMsMHg0MiwweGVkLDB4ODAsMHhiOSwweDgwLDB4MmUsMHg2MCwweDBhLDB4OTgsMHgxMiwweGUwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDMzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhlNCwweDAxLDB4YTMsMHgwMCwweDI4LDB4NDggfSB9LAoreyAgMTYsIDB4ZDM0MCwgMCwgezB4MGEsMHgwMCwweDQyLDB4YzQsMHgwMCwweGIxLDB4MDAsMHgyYywweDQ5LDB4MGIsMHgwYSwweDQyLDB4MDQsMHhhMiwweDkxLDB4MjEgfSB9LAoreyAgMTYsIDB4ZDM1MCwgMCwgezB4MmMsMHhjOSwweDA4LDB4MzEsMHgwMiwweDhjLDB4YzEsMHhhMywweDAwLDB4MmMsMHg0MCwweDA4LDB4MTgsMHgwMiwweGEyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDM2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhMCwweDIwLDB4OGIsMHg4MiwweDJlLDB4NDQgfSB9LAoreyAgMTYsIDB4ZDM3MCwgMCwgezB4NTgsMHg4MCwweDAyLDB4ZTQsMHgwMCwweGJiLDB4MTAsMHgyZSwweDQwLDB4MGIsMHhhMSwweDEyLDB4MGMsMHgwMSwweDg5LDB4MTAgfSB9LAoreyAgMTYsIDB4ZDM4MCwgMCwgezB4MmUsMHhjMCwweDBhLDB4YjAsMHgwMiwweGVjLDB4MDEsMHhiOCwweDgwLDB4MmUsMHhlMiwweDBhLDB4YTEsMHgwMiwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDM5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYiwweDQwLDB4ZWIsMHg0MCwweDNlLDB4NjAgfSB9LAoreyAgMTYsIDB4ZDNhMCwgMCwgezB4MGUsMHg4NywweDMzLDB4ZTQsMHgwMCwweGI5LDB4YTEsMHgzNiwweGMwLDB4MGUsMHhhOCwweDBiLDB4MjYsMHgwMCwweGRhLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDNiMCwgMCwgezB4M2UsMHhjMCwweDhkLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmYiwweDg1LDB4M2UsMHhlMSwweDA4LDB4YjgsMHgwMywweDkwLDB4MDUgfSB9LAoreyAgMTYsIDB4ZDNjMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiOCwweDAwLDB4ZmYsMHgwMiwweDJmLDB4NjAgfSB9LAoreyAgMTYsIDB4ZDNkMCwgMCwgezB4MDMsMHhlOCwweDgzLDB4ZmMsMHgxMCwweGZkLDB4ODAsMHgxZiwweDQwLDB4MWYsMHhkMCwweDEzLDB4YmUsMHg0MCwweGVlLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDNlMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjAsMHg0MywweGZjLDB4MDgsMHhmZCwweDAwLDB4M2MsMHhjMCwweDBmLDB4ZDAsMHgxMSwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDNmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhNCwweDAwLDB4ZGIsMHgwMCwweGIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDQwMCwgMCwgezB4MGUsMHg5NCwweDAzLDB4MjQsMHgwMCwweGQ5LDB4MDAsMHhiYSwweGMwLDB4MGMsMHgyMCwweDAzLDB4ZTQsMHg5MCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDQxMCwgMCwgezB4M2EsMHhjMCwweDBjLDB4YjAsMHgwMywweGVjLDB4MDEsMHhmYSwweDAwLDB4M2UsMHhkMCwweDJjLDB4OTgsMHgwMywweDkwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDQyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgwMywweDAwLDB4OGIsMHgwMCwweDIyLDB4NDggfSB9LAoreyAgMTYsIDB4ZDQzMCwgMCwgezB4MDgsMHg4NCwweDIyLDB4MmMsMHgwMCwweGI5LDB4MDAsMHgyMiwweGMwLDB4MDgsMHhhMCwweDAyLDB4ZWQsMHgwMCwweDhiLDB4YTAgfSB9LAoreyAgMTYsIDB4ZDQ0MCwgMCwgezB4MjEsMHhjMCwweDA4LDB4ZjAsMHgwMiwweGZjLDB4MDAsMHhiOSwweDgwLDB4MmUsMHhjMCwweDA4LDB4YTAsMHgwMiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDQ1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0NSwweDIwLDB4OTMsMHgwMCwweDIyLDB4ZjggfSB9LAoreyAgMTYsIDB4ZDQ2MCwgMCwgezB4MGIsMHgzMCwweDBhLDB4ODQsMHg0MCwweGIyLDB4MDAsMHgyMCwweDQwLDB4MDgsMHgxMCwweDAyLDB4YzQsMHgwMCwweDgwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDQ3MCwgMCwgezB4MjgsMHhjMCwweDI4LDB4MzksMHgwMiwweDRjLDB4MDAsMHhiMSwweDAwLDB4MmMsMHhjMCwweDA4LDB4MzAsMHgwMiwweGI4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDQ4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgzNiwweDAwLDB4OWYsMHg4MCwweDIxLDB4NjAgfSB9LAoreyAgMTYsIDB4ZDQ5MCwgMCwgezB4MDksMHgzOCwweDAyLDB4OWUsMHgwMCwweGIyLDB4YzAsMHgyMCwweDYwLDB4NDgsMHg0OCwweDEyLDB4ZDYsMHhjNiwweDg2LDB4ZDAgfSB9LAoreyAgMTYsIDB4ZDRhMCwgMCwgezB4MjEsMHhlMCwweDA4LDB4NzgsMHgwMCwweGRlLDB4ODAsMHhiNywweDgyLDB4MmQsMHhlMCwweDA4LDB4ZjgsMHgwMiwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDRiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDIwLDB4ZDMsMHgxMCwweDMwLDB4YzggfSB9LAoreyAgMTYsIDB4ZDRjMCwgMCwgezB4MGYsMHgzMCwweDAzLDB4ODQsMHgwMCwweGYxLDB4MDAsMHgzMCwweDQwLDB4MjQsMHgxOSwweDAzLDB4ZTQsMHhjMCwweGUwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDRkMCwgMCwgezB4M2EsMHhjMCwweDBjLDB4MzIsMHgwMywweGNlLDB4ODAsMHhiMSwweDI4LDB4M2MsMHhjMCwweDBjLDB4MzAsMHgxMywweDkyLDB4MDIgfSB9LAoreyAgMTYsIDB4ZDRlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHg5YywweDAwLDB4ZTYsMHgwMCwweDdmLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDRmMCwgMCwgezB4MGUsMHhmMCwweDIzLDB4NzQsMHg0MCwweGZmLDB4MTAsMHgzZiwweDQwLDB4NGYsMHhkMCwweDAzLDB4ZmMsMHhkMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDUwMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjQsMHgwMywweGZjLDB4MDAsMHhmZSwweDAwLDB4M2YsMHhjMCwweDBmLDB4NzEsMHgwMywweGQwLDB4MTIgfSB9LAoreyAgMTYsIDB4ZDUxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlZSwweDAwLDB4Y2IsMHgwMCwweDE2LDB4YzAgfSB9LAoreyAgMTYsIDB4ZDUyMCwgMCwgezB4MGQsMHg4MCwweDAzLDB4MjcsMHgyMCwweGNiLDB4MDAsMHgzZSwweGMyLDB4MGEsMHhiMCwweDUzLDB4ZTQsMHgyOCwweGMxLDB4ODEgfSB9LAoreyAgMTYsIDB4ZDUzMCwgMCwgezB4MzIsMHhjMSwweDBlLDB4YjksMHgwMywweDJjLDB4MDAsMHhmMSwweDgwLDB4MzUsMHhlMCwweDBjLDB4YjgsMHgwMywweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDU0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDAyLDB4ODcsMHgxMCwweDJkLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDU1MCwgMCwgezB4MDgsMHg3MCwweDAzLDB4NWMsMHgwMCwweGE3LDB4MDAsMHgyZCwweDQwLDB4MjgsMHg3MCwweDAyLDB4ZDQsMHgwNCwweDg3LDB4MDQgfSB9LAoreyAgMTYsIDB4ZDU2MCwgMCwgezB4YTEsMHhkMCwweDBiLDB4NzIsMHgwMiwweDFkLDB4MDAsMHhmNywweDAwLDB4MjEsMHhjMCwweDBkLDB4NTAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDU3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4ODUsMHg4MCwweDI1LDB4ZTAgfSB9LAoreyAgMTYsIDB4ZDU4MCwgMCwgezB4MDksMHg3OCwweDAyLDB4MzcsMHgwMywweDg3LDB4ODAsMHgyZiwweGUwLDB4MDgsMHg3OCwweDEyLDB4YzYsMHgxMCwweDhkLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDU5MCwgMCwgezB4MjUsMHhlOCwweDBiLDB4MzgsMHgwMiwweDFlLDB4ODAsMHhiYywweDg0LDB4MjUsMHhlMCwweDA4LDB4NTgsMHgwMiwweDcwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDVhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjZCwweDgwLDB4ODMsMHg4OCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDViMCwgMCwgezB4MDgsMHgzYywweDAyLDB4NGUsMHgwMSwweGEzLDB4ZDIsMHgyZSwweGM0LDB4MDgsMHhiMSwweDAyLDB4Y2MsMHgwMCwweDgzLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDVjMCwgMCwgezB4MjQsMHhjMSwweDBiLDB4MzAsMHgwMiwweDBjLDB4MDAsMHhiMywweDQwLDB4YTAsMHhkMiwweDA5LDB4MzAsMHgxMiwweDUyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDVkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiYSwweDAwLDB4Y2EsMHhjMCwweDM2LDB4ODAgfSB9LAoreyAgMTYsIDB4ZDVlMCwgMCwgezB4MGQsMHg2NywweDEzLDB4MjgsMHgwMCwweGNlLDB4MDAsMHgzZSwweGEwLDB4MGMsMHhlZCwweDAzLDB4ZTgsMHgwMCwweGNlLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZDVmMCwgMCwgezB4MzYsMHg4MCwweDFlLDB4YTAsMHgwYiwweDI4LDB4MDQsMHhmZSwweDAwLDB4YjcsMHhiMiwweDBjLDB4ZTAsMHgwYiwweDdhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDYwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDQwLDB4ZjgsMHgxMCwweDJlLDB4MTAgfSB9LAoreyAgMTYsIDB4ZDYxMCwgMCwgezB4MGYsMHg4MCwweDAzLDB4ZTAsMHgwMSwweGQ4LDB4MGEsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4YzAsMHgwMiwweGY4LDB4MDggfSB9LAoreyAgMTYsIDB4ZDYyMCwgMCwgezB4M2EsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MTAsMHhlOCwweDIwLDB4YmUsMHgwMCwweDBmLDB4ODAsMHgxMywweDkyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDYzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNSwweDAwLDB4ZmIsMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDY0MCwgMCwgezB4MGMsMHg5MSwweDAzLDB4MjYsMHgwMCwweDYxLDB4ODAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDAzLDB4MjQsMHgwMCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDY1MCwgMCwgezB4MWUsMHg0MCwweDBjLDB4OWMsMHgwMywweGU0LDB4MDEsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDY2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NywweDAwLDB4YjksMHgwMCwweDJjLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDY3MCwgMCwgezB4MDAsMHg5YywweDAyLDB4YTYsMHgwMCwweDc5LDB4MDAsMHgyMiwweDQwLDB4MjgsMHg5MCwweDAyLDB4MjQsMHgwMCwweDg5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDY4MCwgMCwgezB4MmMsMHg0NCwweDA4LDB4OTgsMHgwMiwweGU0LDB4MDAsMHhiOSwweDgwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweGUwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDY5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHgyNCwweDAwLDB4YmIsMHgwMCwweDI2LDB4NTAgfSB9LAoreyAgMTYsIDB4ZDZhMCwgMCwgezB4MjgsMHg5MCwweDgyLDB4MjQsMHg4NCwweDk5LDB4MjAsMHgyMiwweDQwLDB4NDksMHg5MCwweDAyLDB4MjQsMHgwMCwweDg5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDZiMCwgMCwgezB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiOSwweDYwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4ZDZjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNiwweDAwLDB4YjEsMHgwMCwweDJlLDB4NDggfSB9LAoreyAgMTYsIDB4ZDZkMCwgMCwgezB4MDgsMHgxMiwweDAyLDB4ODQsMHg4MCwweGIxLDB4MjAsMHhhMCwweDQ4LDB4MDksMHgxMiwweDBhLDB4MDQsMHg4MCwweDgxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDZlMCwgMCwgezB4MmMsMHg0OCwweDI4LDB4MTIsMHg0MiwweGM0LDB4ODgsMHgzMSwweDAwLDB4MmMsMHg0MCwweDBiLDB4MTgsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDZmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4ZjgsMHg1MCwweDM2LDB4MTQgfSB9LAoreyAgMTYsIDB4ZDcwMCwgMCwgezB4MGMsMHg4MCwweDAzLDB4MjAsMHgwMCwweGU4LDB4MDAsMHgzMiwweDE0LDB4MGMsMHg4NSwweDAzLDB4MjEsMHg0MCwweGM4LDB4NTAgfSB9LAoreyAgMTYsIDB4ZDcxMCwgMCwgezB4M2UsMHgxNCwweDBjLDB4ODAsMHgwMywweGUxLDB4NDAsMHgzOCwweDAwLDB4M2UsMHgwMCwweDhmLDB4ODAsMHgwMywweGVlLDB4MDMgfSB9LAoreyAgMTYsIDB4ZDcyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhkNCwweDAwLDB4ZmIsMHgwNCwweDNkLDB4NDQgfSB9LAoreyAgMTYsIDB4ZDczMCwgMCwgezB4MGYsMHg1MSwweDIzLDB4ZDQsMHg0OCwweGVkLDB4MTAsMHgzZCwweDQ0LDB4NGUsMHhkMSwweDIzLDB4ZjQsMHg0MiwweGZkLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDc0MCwgMCwgezB4M2UsMHg0NCwweDhmLDB4OTEsMHgwMywweGU0LDB4NTgsMHhmZCwweDAwLDB4M2YsMHg1MCwweDBmLDB4NTAsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4ZDc1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNCwweDAwLDB4ZjksMHgwMCwweDNkLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDc2MCwgMCwgezB4MGMsMHhkMCwweDAzLDB4ZjQsMHgwMCwweGRkLDB4MDIsMHgzZSwweDQwLDB4MGMsMHg5MCwweDAzLDB4ZTQsMHg0MCwweGM5LDB4MTAgfSB9LAoreyAgMTYsIDB4ZDc3MCwgMCwgezB4MzcsMHg0MCwweDA3LDB4ZDAsMHgwNywweDI0LDB4MDAsMHhlNSwweDAwLDB4MmYsMHg2YSwweDBmLDB4NzAsMHgwMywweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDc4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMCwweDAwLDB4YjgsMHgwMCwweDNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDc5MCwgMCwgezB4ODAsMHg4MCwweDAyLDB4ZTAsMHgwMCwweDg4LDB4MDAsMHgyZSwweDAwLDB4MGEsMHg4MCwweDUzLDB4YTIsMHg4MCwweDJjLDB4YTAgfSB9LAoreyAgMTYsIDB4ZDdhMCwgMCwgezB4MjIsMHgwMCwweDBiLDB4ODAsMHgwYSwweDIwLDB4MDAsMHhiOCwweDAwLDB4MmUsMHgxMCwweDA5LDB4ODAsMHgwMywweDBlLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDdiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4YjEsMHgwMCwweDZjLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDdjMCwgMCwgezB4MmEsMHgxMCwweDAyLDB4ODQsMHgwMSwweDgxLDB4ODAsMHgyZSwweDQwLDB4MDksMHgxMCwweDAyLDB4ZjQsMHgwMCwweDhkLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDdkMCwgMCwgezB4MjAsMHg0MCwweDBiLDB4MTAsMHgwMiwweDg0LDB4MDAsMHhiMSwweDAwLDB4MmMsMHg0MCwweDBiLDB4OTgsMHgwMiwweDQyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDdlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTEsMHhhNCwweDIwLDB4YjksMHgwMCwweDJhLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDdmMCwgMCwgezB4ODgsMHhiNCwweDAyLDB4ZTYsMHgwMSwweGE5LDB4MjAsMHgyZSwweDQ4LDB4MGEsMHg5MCwweDAwLDB4YTQsMHg0MCwweGFkLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDgwMCwgMCwgezB4MjIsMHg0MCwweDBiLDB4OTAsMHgxMiwweGE0LDB4MDQsMHhiOSwweDAxLDB4MmUsMHg0MSwweDBiLDB4OTAsMHgwMiwweDA2LDB4MDQgfSB9LAoreyAgMTYsIDB4ZDgxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZjksMHhjMCwweDNlLDB4NjAgfSB9LAoreyAgMTYsIDB4ZDgyMCwgMCwgezB4MGMsMHg5NCwweDEzLDB4YTYsMHgwMiwweGQ5LDB4NDIsMHgxYywweDYwLDB4MGMsMHg5ZSwweDAxLDB4YzYsMHgwNCwweGMxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDgzMCwgMCwgezB4YjIsMHg0MCwweDFmLDB4OTAsMHgwMiwweGE0LDB4MDAsMHhlOSwweDA4LDB4M2UsMHg2OCwweDRmLDB4OTgsMHgwYiwweDY4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZDg0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNiwweDQwLDB4ZjksMHgyMCwweDM4LDB4NzAgfSB9LAoreyAgMTYsIDB4ZDg1MCwgMCwgezB4MGYsMHg5MSwweDAzLDB4ZTQsMHgwMCwweGQ5LDB4ODAsMHgzZSwweDQwLDB4MGYsMHg5YywweDEzLDB4YTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDg2MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4MTAsMHgwMywweDY0LDB4MTAsMHhmOSwweDBhLDB4M2UsMHg1MCwweDBkLDB4OWEsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDg3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMSwweDAwLDB4ZDgsMHgwNCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDg4MCwgMCwgezB4MGMsMHg4MSwweDEzLDB4YzAsMHgwMiwweGQ4LDB4MjAsMHgzZSwweDAwLDB4MmQsMHg4NCwweDAzLDB4ZTAsMHgwMCwweGNjLDB4MDggfSB9LAoreyAgMTYsIDB4ZDg5MCwgMCwgezB4M2EsMHgwMCwweDBmLDB4ODAsMHg0MywweGUwLDB4MDAsMHhmOCwweDQxLDB4MzIsMHgwMCwweDA3LDB4ODEsMHg4YiwweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDhhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgzYSwweDYwLDB4OGEsMHgwMCwweDJmLDB4YTggfSB9LAoreyAgMTYsIDB4ZDhiMCwgMCwgezB4MGEsMHhlMCwweDIyLDB4ZTgsMHgwMiwweDdlLDB4NDgsMHgyZSwweDgwLDB4MDgsMHhhMCwweDQyLDB4ZTgsMHgwNCwweDhlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDhjMCwgMCwgezB4MjMsMHhhOCwweDBiLDB4YTgsMHg4MiwweGU4LDB4MDAsMHhlZSwweDAwLDB4YTIsMHg4MCwweDRiLDB4NjAsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDhkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4OTMsMHgwMCwweDZjLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDhlMCwgMCwgezB4MDgsMHgzMCwweDAyLDB4Y2MsMHgwMCwweDEzLDB4ODEsMHgyYywweGMwLDB4MDgsMHgzMCwweDAyLDB4Y2UsMHg0MCwweDgyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDhmMCwgMCwgezB4MjgsMHhlMCwweDBiLDB4MzgsMHgwMiwweGNjLDB4MDAsMHhiMywweDEwLDB4MjQsMHhjMCwweDhiLDB4MzgsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDkwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxZSwweDAwLDB4ODcsMHgyMCwweDJmLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDkxMCwgMCwgezB4MGEsMHg3MCwweDAyLDB4ZGMsMHgwYSwweGI2LDB4MDAsMHgyYywweGM4LDB4ODgsMHg3MiwweDA2LDB4ZDgsMHgwMCwweDg2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDkyMCwgMCwgezB4MjEsMHhjMCwweDBiLDB4NzAsMHgwMiwweGRjLDB4ODQsMHhhZiwweDgwLDB4YTUsMHhjMCwweDBiLDB4ZDAsMHgwMiwweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDkzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4ZDcsMHg4MCwweDNkLDB4YTAgfSB9LAoreyAgMTYsIDB4ZDk0MCwgMCwgezB4MWMsMHg3OCwweDEzLDB4ZDYsMHgwMiwweGQ3LDB4ODAsMHgzZCwweGVjLDB4MDgsMHg3ZSwweDIzLDB4ZmUsMHgwMCwweGNlLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDk1MCwgMCwgezB4MzksMHg2MCwweDBmLDB4NzgsMHgwMywweGRmLDB4MDAsMHhmNiwweDgwLDB4NzUsMHhlMCwweDBmLDB4NzgsMHgwMywweDJhLDB4MDIgfSB9LAoreyAgMTYsIDB4ZDk2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHg4YywweDAwLDB4ZmIsMHgxMCwweDNlLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDk3MCwgMCwgezB4MWYsMHhhMCwweDIxLDB4Y2MsMHgwMCwweGZhLDB4MDAsMHgzZSwweGMwLDB4MGUsMHhiMCwweDAzLDB4ZTgsMHgwMiwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDk4MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4YjAsMHgxMywweGVjLDB4MDAsMHhlYSwweDAxLDB4M2EsMHhjMCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4ZDk5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmYywweDAwLDB4ZmYsMHg4MCwweDNmLDB4NjAgfSB9LAoreyAgMTYsIDB4ZDlhMCwgMCwgezB4MDgsMHg5OSwweDA3LDB4N2UsMHgwMCwweGRkLDB4ODAsMHgzZiwweGUyLDB4MGMsMHhmOCwweDAzLDB4ZjYsMHgwMiwweGRmLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDliMCwgMCwgezB4YjMsMHhlMCwweDBjLDB4ZjgsMHgwMywweDNlLDB4NDEsMHhjYywweDgwLDB4MzMsMHhlNCwweDBmLDB4ZjgsMHgwMywweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDljMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDQwLDB4YjcsMHgwMCwweDJkLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDlkMCwgMCwgezB4MGQsMHg1YSwweDIyLDB4ZGMsMHg4MCwweDc1LDB4MDAsMHgyZCwweGMwLDB4MDgsMHg3MSwweDAyLDB4ZjAsMHgyMCwweDg3LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDllMCwgMCwgezB4MjEsMHhjMCwweDBhLDB4NzAsMHgwMiwweDFjLDB4MDAsMHhkNCwweDI4LDB4MjEsMHhjMCwweDBiLDB4NzIsMHgwMiwweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDlmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDQwLDB4YjcsMHgwMCwweDJkLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGEwMCwgMCwgezB4MDgsMHg3MiwweDIyLDB4ZjQsMHgwMCwweDg3LDB4MDAsMHgyZCwweGMyLDB4MDgsMHg3MCwweDAyLDB4ZDQsMHgwMCwweDg3LDB4ODAgfSB9LAoreyAgMTYsIDB4ZGExMCwgMCwgezB4MjUsMHg0MCwweDA5LDB4MzAsMHgwMiwweDVjLDB4MDEsMHhhZCwweDAwLDB4MjksMHhkMCwweDRiLDB4NzAsMHgwMiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGEyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjYywweDAwLDB4YmIsMHhjOCwweDJjLDB4YTAgfSB9LAoreyAgMTYsIDB4ZGEzMCwgMCwgezB4MDksMHgyMCwweDAyLDB4Y2UsMHgwMCwweGEzLDB4MDAsMHgyYywweGUwLDB4YTgsMHgzZCwweDQyLDB4YzIsMHgwMCwweDhiLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGE0MCwgMCwgezB4MjQsMHg0MCwweDBiLDB4MzAsMHgwYSwweDZjLDB4MDgsMHhhMywweDQwLDB4YTgsMHhlMCwweDBiLDB4MzQsMHgwMiwweGM4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZGE1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhZCwweDAwLDB4ZmYsMHg0OCwweDNjLDB4MjggfSB9LAoreyAgMTYsIDB4ZGE2MCwgMCwgezB4MGMsMHhhOSwweDIzLDB4NmMsMHg4MCwweDhiLDB4MDAsMHgzZiwweGMwLDB4MGMsMHhmYywweDAzLDB4ZWMsMHgwMCwweGQ4LDB4ODAgfSB9LAoreyAgMTYsIDB4ZGE3MCwgMCwgezB4MzQsMHg0MCwweDBkLDB4MzAsMHgwMywweDdjLDB4MDIsMHhhMywweDQwLDB4MzgsMHg2OCwweDBmLDB4MjQsMHgwMywweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGE4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlZCwweDg4LDB4ZmIsMHgwMCwweDNlLDB4NTAgfSB9LAoreyAgMTYsIDB4ZGE5MCwgMCwgezB4MGYsMHhhMSwweDAzLDB4ZWMsMHgwNCwweDNhLDB4YzAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDgzLDB4ZTgsMHgwMiwweGY4LDB4MTAgfSB9LAoreyAgMTYsIDB4ZGFhMCwgMCwgezB4M2EsMHg0MSwweDBlLDB4OTAsMHgwMywweGFjLDB4MDAsMHg5YiwweDA4LDB4YjYsMHg0MCwweDBmLDB4ODEsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGFiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4ZmYsMHgwMCwweGIzLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGFjMCwgMCwgezB4MGMsMHg1MCwweDEzLDB4MWMsMHgwOSwweGNkLDB4ODMsMHgzMywweGMwLDB4ODMsMHg3MCwweDAwLDB4M2MsMHgwMCwweGRjLDB4MTAgfSB9LAoreyAgMTYsIDB4ZGFkMCwgMCwgezB4MzIsMHg2MCwweDBlLDB4ZjEsMHg0MywweDJjLDB4MDAsMHhjZSwweDA0LDB4M2IsMHg3MCwweDBjLDB4ZjAsMHg4MywweDAwLDB4NDQgfSB9LAoreyAgMTYsIDB4ZGFlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2NywweDgwLDB4YmIsMHgwMSwweDYyLDB4MjEgfSB9LAoreyAgMTYsIDB4ZGFmMCwgMCwgezB4OGEsMHg4OSwweDIwLDB4MmMsMHgwMCwweDgwLDB4ZTAsMHgyMiwweGMwLDB4MGIsMHhiMCwweDAzLDB4ZDgsMHgxMCwweDhjLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGIwMCwgMCwgezB4MjIsMHg0MCwweDA1LDB4OTAsMHgwMiwweGFjLDB4MDAsMHhkOCwweDgwLDB4MzYsMHg0MCwweDBhLDB4OTAsMHgwMiwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZGIxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyNiwweDAwLDB4YmIsMHgwMCwweDIyLDB4MDYgfSB9LAoreyAgMTYsIDB4ZGIyMCwgMCwgezB4MDgsMHg4MCwweDAyLDB4MmUsMHgwMCwweDg4LDB4MjAsMHgyMiwweGMwLDB4MDksMHhiMCwweDAyLDB4YTQsMHgwMCwweDk5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGIzMCwgMCwgezB4NjIsMHhjNCwweDA4LDB4YjAsMHgwNiwweDJjLDB4MDAsMHg4OCwweDgwLDB4MjIsMHg0MSwweDA4LDB4YTAsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGI0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDAwLDB4YjMsMHgwMCwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZGI1MCwgMCwgezB4MGEsMHgwMCwweDgyLDB4MGMsMHgwMCwweDgwLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgzMCwweDIyLDB4YTAsMHgwMCwweDgxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGI2MCwgMCwgezB4YTAsMHhjMCwweDA5LDB4MzAsMHgwMiwweDhjLDB4MDAsMHg5MCwweDAwLDB4MjQsMHg0MCwweDBhLDB4MjgsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZGI3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2MCwweDAwLDB4ZmIsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGI4MCwgMCwgezB4MmMsMHg5MiwweDAzLDB4MmMsMHgwMiwweDg4LDB4MDAsMHgzMSwweGMwLDB4MGIsMHhiNSwweDAyLDB4YTQsMHgwMCwweGQxLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGI5MCwgMCwgezB4MzIsMHg0MCwweDBlLDB4OTAsMHgwMywweDJjLDB4NDAsMHhjOSwweDAwLDB4M2EsMHg0MCwweDhjLDB4YTAsMHgwMywweDAwLDB4MDMgfSB9LAoreyAgMTYsIDB4ZGJhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmNCwweDAwLDB4ZmYsMHgwMCwweDJmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGJiMCwgMCwgezB4MGYsMHhjMCwweDAzLDB4ZGMsMHgwMCwweGZjLDB4MDAsMHgzZiwweGMxLDB4MGYsMHhmMCwweDQzLDB4ZjAsMHgwMCwweGZkLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGJjMCwgMCwgezB4M2YsMHg0MCwweDRmLDB4ZDAsMHgwMywweGZjLDB4MDAsMHhmNSwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZTAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4ZGJkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhkOCwweDgwLDB4Y2MsMHgwMCwweGI3LDB4MDQgfSB9LAoreyAgMTYsIDB4ZGJlMCwgMCwgezB4NGUsMHhlMSwweDAzLDB4M2MsMHgyMCwweGRmLDB4MTAsMHgzMSwweDgwLDB4MDYsMHhmMCwweDAzLDB4N2YsMHgwMCwweGZmLDB4YzAgfSB9LAoreyAgMTYsIDB4ZGJmMCwgMCwgezB4M2IsMHhjMCwweDBlLDB4ZjIsMHgwMywweDVlLDB4MDAsMHhlZiwweDEwLDB4MzMsMHhkMCwweDJjLDB4ZjIsMHgwMywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGMwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTAsMHhlOSwweDAwLDB4ODgsMHhjNiwweDIwLDB4NWMgfSB9LAoreyAgMTYsIDB4ZGMxMCwgMCwgezB4MDgsMHhhNCwweDU3LDB4NjUsMHgwMCwweDhmLDB4NTIsMHgyYSwweGYwLDB4MDksMHhmYywweDAyLDB4MDQsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGMyMCwgMCwgezB4MmQsMHhkOSwweDA5LDB4NzQsMHg4MywweDY0LDB4MjgsMHg4MywweDQ0LDB4MjIsMHg4NCwweDg4LDB4MDYsMHg4MiwweDMwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGMzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHhjOSwweDAwLDB4ODAsMHgxMCwweDIwLDB4MDggfSB9LAoreyAgMTYsIDB4ZGM0MCwgMCwgezB4MDgsMHgzMSwweDEyLDB4MDQsMHhiMiwweGEzLDB4MDAsMHgyMCwweDg0LDB4MWIsMHgzNCwweDAyLDB4MGMsMHg4MCwweGIzLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGM1MCwgMCwgezB4MmMsMHhjNywweDA5LDB4MzYsMHgwMiwweDhjLDB4ODAsMHg5MywweDQwLDB4YWMsMHhjOCwweDA4LDB4MzEsMHgyOCwweDMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZGM2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhOSwweDAwLDB4ODgsMHgwMCwweGEyLDB4NTAgfSB9LAoreyAgMTYsIDB4ZGM3MCwgMCwgezB4MDgsMHgzNSwweDAyLDB4MjQsMHgwMCwweDhiLDB4MDQsMHgyZSwweGMxLDB4MDksMHhiMCwweDAyLDB4MjQsMHg5NCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGM4MCwgMCwgezB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMiwweGNjLDB4NjAsMHg4YiwweDAwLDB4MmUsMHg4MCwweDA4LDB4ODAsMHgwMCwweDMwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGM5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTUsMHhlNywweDAyLDB4Y2IsMHgxOCwweGIyLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGNhMCwgMCwgezB4MmMsMHhhYywweDBhLDB4MmUsMHgwOCwweGViLDB4MDAsMHgzMiwweDEyLDB4NGUsMHhiMCwweDAzLDB4MmIsMHg4MCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGNiMCwgMCwgezB4M2EsMHhjMCwweDBhLDB4YjAsMHgwMywweGFiLDB4MDgsMHhlYiwweDA0LDB4MmUsMHg0OCwweDBjLDB4YjgsMHg4MywweDAwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGNjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiNiwweDgwLDB4ZmYsMHg4MCwweDM5LDB4Y2EgfSB9LAoreyAgMTYsIDB4ZGNkMCwgMCwgezB4MGQsMHhlOCwweDAzLDB4ZDYsMHg0MCwweGU3LDB4MDQsMHgzYiwweDY2LDB4NGUsMHg3MCwweDAzLDB4YjgsMHgwMCwweGZmLDB4MDEgfSB9LAoreyAgMTYsIDB4ZGNlMCwgMCwgezB4M2YsMHhjMCwweDZjLDB4ZjAsMHgwMywweDcwLDB4MDYsMHhlNywweDAwLDB4MzEsMHgwNCwweDBmLDB4YzEsMHg0MywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGNmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHg4NSwweDAwLDB4Y2IsMHg0MCwweDMyLDB4OTAgfSB9LAoreyAgMTYsIDB4ZGQwMCwgMCwgezB4MmYsMHhiMCwweDBiLDB4NjQsMHg4MCwweGZiLDB4MDgsMHhiYSwweDEwLDB4MGQsMHhiMCwweGE3LDB4MmQsMHgwMCwweGZiLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGQxMCwgMCwgezB4M2UsMHhjMCwweDhlLDB4YjAsMHgwMywweDZkLDB4MDAsMHhkYiwweDAxLDB4MzIsMHg0MCwweDhjLDB4MzMsMHgwMywweDkwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGQyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHgyNCwweDAwLDB4ODMsMHhlMCwweGEyLDB4ZDAgfSB9LAoreyAgMTYsIDB4ZGQzMCwgMCwgezB4NDAsMHhiMCwweDAyLDB4MjUsMHgwNCwweGJmLDB4ODAsMHhhMCwweDUwLDB4MDgsMHhmOCwweDAyLDB4MjAsMHgwMCwweDhiLDB4MDIgfSB9LAoreyAgMTYsIDB4ZGQ0MCwgMCwgezB4MmYsMHhkMCwweDA4LDB4ZjAsMHgwMiwweDI0LDB4MDAsMHg4ZiwweDgwLDB4MzYsMHgwMSwweDA4LDB4ODQsMHg0MiwweDM2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGQ1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MDUsMHg0NCwweDAwLDB4ODMsMHg0OCwweDIwLDB4YzQgfSB9LAoreyAgMTYsIDB4ZGQ2MCwgMCwgezB4MDksMHgwMCwweDAyLDB4NDYsMHgwMCwweGIzLDB4MDEsMHhhOCwweDkwLDB4MTksMHgzMCwweDEyLDB4OGMsMHgwMCwweGEzLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGQ3MCwgMCwgezB4MmUsMHhlMiwweDBhLDB4YjAsMHgwMiwweDBjLDB4MDAsMHg4MywweDQ5LDB4MjgsMHhjMCwweDA5LDB4M2MsMHgwMiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGQ4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGYwLDB4MDEsMHgzNiwweDA0LDB4ODMsMHg4MCwweDIxLDB4ZTEgfSB9LAoreyAgMTYsIDB4ZGQ5MCwgMCwgezB4MDgsMHgzOCwweDEyLDB4MWUsMHgyOCwweGIzLDB4OTgsMHgyMSwweGEwLDB4MTksMHgzOCwweDgyLDB4OTYsMHgwMCwweDg3LDB4ODMgfSB9LAoreyAgMTYsIDB4ZGRhMCwgMCwgezB4MmQsMHhlMiwweDA4LDB4NzgsMHgyMiwweDM2LDB4OGMsMHg4NywweDgwLDB4MmQsMHhlMCwweDA5LDB4NzksMHgwMiwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGRiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwNCwweDAwLDB4YzMsMHgzMCwweDMwLDB4YzggfSB9LAoreyAgMTYsIDB4ZGRjMCwgMCwgezB4NGQsMHgwMCwweDBiLDB4NGMsMHg4MCwweGYzLDB4MTIsMHgzOCwweGMwLDB4MGQsMHgzYSwweDAyLDB4OGMsMHg4MCwweGYzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGRkMCwgMCwgezB4M2MsMHhjMCwweDBlLDB4MzAsMHgwYiwweDBlLDB4MDAsMHhjMywweDBjLDB4M2EsMHhjMCwweDBkLDB4MzAsMHgwMywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4ZGRlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiNCwweDA2LDB4ZmYsMHgxMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4ZGRmMCwgMCwgezB4MGYsMHhiMCwweDEzLDB4YmMsMHgwMCwweGZmLDB4MTAsMHg3ZiwweGMwLDB4MGUsMHhmMSwweGEzLDB4N2MsMHgwMCwweGZmLDB4MTIgfSB9LAoreyAgMTYsIDB4ZGUwMCwgMCwgezB4M2YsMHhjMiwweDBmLDB4ZjUsMHgyMywweGJjLDB4NDEsMHhlZiwweDE4LDB4MzcsMHg4MCwweGFlLDB4YzAsMHgwMywweDUwLDB4MDYgfSB9LAoreyAgMTYsIDB4ZGUxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlNCwweDAwLDB4ZGIsMHgwMCwweDNlLDB4ZGEgfSB9LAoreyAgMTYsIDB4ZGUyMCwgMCwgezB4MGMsMHg4MCwweDAzLDB4NjYsMHgxMCwweDhiLDB4MDAsMHgzMiwweDgwLDB4OGMsMHhiNiwweDAzLDB4NGEsMHgwMCwweDRiLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGUzMCwgMCwgezB4MzIsMHhjOCwweDBjLDB4YjQsMHgwMywweDBhLDB4MTAsMHhkYiwweDAwLDB4M2UsMHhjMSwweDBjLDB4YjAsMHg0MywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGU0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MTEsMHhiNCwweDAwLDB4ODcsMHgwNCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4ZGU1MCwgMCwgezB4MGQsMHg3MCwweDAzLDB4MWMsMHgwOCwweDg3LDB4NDgsMHgyMCwweDgxLDB4MGQsMHg3MiwweDgyLDB4NWMsMHgwMCwweGQ3LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGU2MCwgMCwgezB4MjEsMHhjYywweDI4LDB4ZjAsMHgwMiwweDFjLDB4MTAsMHg4NywweDIwLDB4MmMsMHgwMCwweDA4LDB4NDAsMHgwYSwweDMyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGU3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHg5NiwweDAwLDB4YjcsMHg4MSwweDJkLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZGU4MCwgMCwgezB4MDgsMHg0OCwweDAyLDB4MGUsMHgwNCwweDg3LDB4ODAsMHgyMSwweGUwLDB4MDgsMHg3OCwweDAyLDB4M2UsMHgwMSwweDg3LDB4ODAgfSB9LAoreyAgMTYsIDB4ZGU5MCwgMCwgezB4MjEsMHhlMCwweDE4LDB4NzksMHgwMiwweDNhLDB4MDEsMHg5NywweGEwLDB4MmQsMHg2MCwweDA4LDB4MzgsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGVhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjNiwweDAwLDB4YTMsMHhjNiwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4ZGViMCwgMCwgezB4MDksMHgzMCwweDAyLDB4MGMsMHgwMSwweDgzLDB4MDAsMHgyMCwweGUwLDB4MDksMHgzMCwweDAyLDB4NGUsMHgwMCwweDkzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGVjMCwgMCwgezB4MjAsMHhjMCwweDQ5LDB4MzAsMHgyMiwweDBmLDB4NjQsMHg4MywweDAyLDB4NmMsMHhkNCwweDI4LDB4MzAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGVkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTEsMHhhYiwweDgwLDB4ZmEsMHhlMCwweDNjLDB4ODggfSB9LAoreyAgMTYsIDB4ZGVlMCwgMCwgezB4MGMsMHhlMCwweDAyLDB4MjgsMHgwMiwweGNhLDB4MDAsMHhiMywweGE5LDB4MGMsMHhhMCwweDAzLDB4M2IsMHgxMCwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGVmMCwgMCwgezB4YTIsMHg4MCwweDBjLDB4YTAsMHgwYiwweDM4LDB4MDAsMHhkYSwweDAwLDB4M2YsMHhiMCwweDBjLDB4ZTYsMHgwMywweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGYwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhjMCwweDIwLDB4OTgsMHgwOCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGYxMCwgMCwgezB4MGYsMHg4MCwweDBiLDB4ZTEsMHgwMCwweGY4LDB4MDEsMHgzYywweDEwLDB4NGYsMHgwMCwweDAzLDB4YTAsMHg0MCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGYyMCwgMCwgezB4M2UsMHgxMCwweDBlLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwLDB4M2MsMHgwMiwweDJmLDB4MDQsMHg5MywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGYzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4YzEsMHhjMSwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZGY0MCwgMCwgezB4MGMsMHg5OCwweDAzLDB4MjYsMHg0MCwweGY5LDB4MDAsMHgzMiwweDQwLDB4MGMsMHg5OCwweDAzLDB4MjQsMHgyNCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGY1MCwgMCwgezB4M2MsMHg2MCwweDBjLDB4MTAsMHgwMywweGE0LDB4MDAsMHhmOSwweDgyLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZGY2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHgwMCwweDIyLDB4NTAgfSB9LAoreyAgMTYsIDB4ZGY3MCwgMCwgezB4MGQsMHg5OCwweDAyLDB4MjUsMHg4MCwweGI5LDB4MDAsMHgyMiwweDUyLDB4MGQsMHg5YywweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGY4MCwgMCwgezB4MmUsMHg2MCwweDA4LDB4OTAsMHg0MiwweDI0LDB4MDAsMHhiOSwweDQwLDB4MzYsMHg0MCwweDA4LDB4OTAsMHgwYSwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGY5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4OGQsMHgwMCwweDIzLDB4NDAgfSB9LAoreyAgMTYsIDB4ZGZhMCwgMCwgezB4MDgsMHgxMiwweDAyLDB4MjQsMHgwMCwweGExLDB4MTAsMHhhMiwweDYwLDB4MDgsMHg5MiwweDhhLDB4MjQsMHgwMCwweGI5LDB4MDEgfSB9LAoreyAgMTYsIDB4ZGZiMCwgMCwgezB4MmUsMHg0NiwweDA4LDB4OTAsMHgwMiwweGE0LDB4MDAsMHhiMSwweDUwLDB4MjIsMHg0MCwweDI4LDB4OTAsMHg4MiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGZjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDg0LDB4ODUsMHgyMCwweGExLDB4ZDggfSB9LAoreyAgMTYsIDB4ZGZkMCwgMCwgezB4MDksMHgxMCwweDAyLDB4MDQsMHg4MCwweGIzLDB4MjAsMHgyMCwweDQwLDB4MjksMHgxMiwweDA2LDB4MDQsMHgwMCwweGIxLDB4MDEgfSB9LAoreyAgMTYsIDB4ZGZlMCwgMCwgezB4MmMsMHg0OCwweDI4LDB4MTIsMHgwMiwweDA0LDB4MDAsMHhiMSwweDIwLDB4MjQsMHg0OCwweDA4LDB4MTIsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZGZmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQyLDB4OGEsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTAwMCwgMCwgezB4MGMsMHgwNSwweDAzLDB4MjEsMHg0MCwweGUwLDB4NTAsMHhiMiwweDAwLDB4MmMsMHg4MCwweDAyLDB4MjEsMHg0MCwweGYwLDB4NTAgfSB9LAoreyAgMTYsIDB4ZTAxMCwgMCwgezB4M2MsMHgxNCwweDBjLDB4ODUsMHgxMywweGExLDB4NTAsMHhmOCwweDUwLDB4MzIsMHgxNCwweDBjLDB4ODUsMHgyMywweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4ZTAyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhmNCwweDQwLDB4ZjksMHgxMCwweDNlLDB4NDQgfSB9LAoreyAgMTYsIDB4ZTAzMCwgMCwgezB4MGYsMHhkNCwweDBiLDB4ZjQsMHg0NCwweGY5LDB4MTAsMHgzZiwweDUwLDB4NGYsMHgxMSwweDAzLDB4ZjQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTA0MCwgMCwgezB4M2UsMHg0NCwweDBmLDB4OTEsMHg1MywweGY0LDB4MTQsMHhmOSwweDEwLDB4M2YsMHg0NCwweDBmLDB4ZDEsMHgwMywweGU2LDB4MDIgfSB9LAoreyAgMTYsIDB4ZTA1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MDUsMHhlNiwweGEwLDB4ZGQsMHg4OCwweGIzLDB4NjYgfSB9LAoreyAgMTYsIDB4ZTA2MCwgMCwgezB4MGMsMHhkYywweDgzLDB4MzYsMHg4OCwweGJkLDB4YTAsMHgzNywweDZhLDB4MGMsMHhkYSwweDBiLDB4MjUsMHgwMiwweGM5LDB4NDAgfSB9LAoreyAgMTYsIDB4ZTA3MCwgMCwgezB4M2YsMHg3OCwweDRmLDB4OTgsMHhiMywweGU1LDB4MDQsMHhjZCwweGEwLDB4NzIsMHg3OCwweDBjLDB4ZDgsMHg4YiwweDI2LDB4MTQgfSB9LAoreyAgMTYsIDB4ZTA4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMywweDAwLDB4ODgsMHg0MiwweDIyLDB4MzEgfSB9LAoreyAgMTYsIDB4ZTA5MCwgMCwgezB4MDgsMHgwYSwweDAyLDB4MjIsMHhhMCwweGI4LDB4ZjksMHgyMiwweDEwLDB4MGQsMHg4NCwweDEyLDB4NmEsMHg4MCwweDg4LDB4ODAgfSB9LAoreyAgMTYsIDB4ZTBhMCwgMCwgezB4MmUsMHgyMCwweDBiLDB4MDgsMHgwMiwweGUyLDB4ODAsMHhhOCwweGE4LDB4YTIsMHgzOCwweDQ4LDB4YTgsMHgwMiwweDBlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTBiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDUsMHhjNCwweGEyLDB4ODEsMHgwMCwweDIwLDB4NDggfSB9LAoreyAgMTYsIDB4ZTBjMCwgMCwgezB4MDgsMHgxMiwweDQyLDB4NDUsMHgwMCwweGIxLDB4MDAsMHgyNCwweDQwLDB4MDksMHgxNCwweDAyLDB4MjQsMHgwMCwweDgxLDB4MjAgfSB9LAoreyAgMTYsIDB4ZTBkMCwgMCwgezB4MmMsMHg1OCwweDBiLDB4MTAsMHg4MiwweGM0LDB4MDQsMHg5MSwweDQwLDB4NjQsMHg2YywweDA4LDB4MzAsMHg4MiwweDEyLDB4MDUgfSB9LAoreyAgMTYsIDB4ZTBlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNCwweDAwLDB4ODksMHgwMCwweDIyLDB4NDEgfSB9LAoreyAgMTYsIDB4ZTBmMCwgMCwgezB4MDgsMHg5MCwweDhhLDB4NjQsMHg4MCwweGI5LDB4MDAsMHgyMiwweDUwLDB4MDksMHg5MCwweDA2LDB4NjQsMHgwOCwweDk5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTEwMCwgMCwgezB4MmUsMHg0MCwweDBiLDB4OTAsMHgwNiwweGM0LDB4MDEsMHhiOSwweDAyLDB4MjYsMHg2MSwweDg4LDB4OTAsMHgwMiwweDA2LDB4MDQgfSB9LAoreyAgMTYsIDB4ZTExMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4YzksMHgwMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTEyMCwgMCwgezB4MmMsMHg5NCwweDIzLDB4NjQsMHgwMCwweGI5LDB4MDAsMHgzNiwweDQwLDB4MDksMHg5MCwweDEzLDB4MDUsMHgwMCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTEzMCwgMCwgezB4M2UsMHg0MCwweDRmLDB4OTAsMHgxMywweGU1LDB4YzAsMHhkOSwweDAwLDB4MjYsMHg0MCwweDJjLDB4OTQsMHgwMywweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTE0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MDEsMHhhNCwweDAyLDB4ZTksMHgwOCwweDNjLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTE1MCwgMCwgezB4MGYsMHg5MCwweDBiLDB4YTQsMHgwMCwweGYxLDB4MDAsMHgzZSwweDQxLDB4MGYsMHg5MCwweDQzLDB4YTQsMHg4OCwweGU5LDB4MDQgfSB9LAoreyAgMTYsIDB4ZTE2MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGU2LDB4MDAsMHhlMSwweDAwLDB4M2EsMHg0MCwweDlmLDB4OTIsMHg2MywweGRhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTE3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHg4MCwweDEwLDB4ZTAsMHgwMSwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTE4MCwgMCwgezB4OGYsMHg4MCwweDAzLDB4MjAsMHgwMCwweGQ4LDB4MDgsMHgzMCwweDAxLDB4OGMsMHgwMCwweDAzLDB4ZTEsMHgwMiwweGM4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZTE5MCwgMCwgezB4M2UsMHgwMCwweDBjLDB4ODAsMHgwYiwweDIxLDB4MDAsMHhjOCwweDAwLDB4NzgsMHgwMCwweDBmLDB4ODYsMHgwMywweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTFhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDAwLDB4OGUsMHg0MCwweDJiLDB4ODIgfSB9LAoreyAgMTYsIDB4ZTFiMCwgMCwgezB4MGIsMHhhMCwweDAyLDB4M2EsMHgwMCwweDhlLDB4ODAsMHgyMywweDgyLDB4MDgsMHhlMiwweDAyLDB4MjgsMHgxMCwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTFjMCwgMCwgezB4MmYsMHg5OCwweDI4LDB4YTAsMHgxMiwweDI4LDB4MDAsMHg4ZSwweDIwLDB4MmUsMHg4MCwweDRiLDB4ZTQsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTFkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAyLDB4YTIsMHg0MCwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTFlMCwgMCwgezB4MGIsMHhiMCwweDAyLDB4NGUsMHg0MCwweDkzLDB4YzAsMHhhMCwweDIwLDB4MDgsMHgzNiwweDAyLDB4OGMsMHgwMCwweDkzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTFmMCwgMCwgezB4MmMsMHhlMiwweDA4LDB4MzAsMHgwNiwweDRjLDB4MTIsMHg5MywweDA4LDB4MjgsMHhjMCwweDBiLDB4YjAsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTIwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxYywweDA4LDB4ODIsMHg0MCwweDI5LDB4NDAgfSB9LAoreyAgMTYsIDB4ZTIxMCwgMCwgezB4MGIsMHg3MCwweDAyLDB4NWUsMHgwOCwweDg0LDB4MDgsMHgyMywweDQwLDB4MDgsMHg3MCwweDA2LDB4MWMsMHg4MCwweDg3LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTIyMCwgMCwgezB4MmQsMHgyMCwweDA4LDB4NzksMHgxMiwweDVjLDB4MDAsMHg5NCwweDAwLDB4MmQsMHhjMCwweDBiLDB4MzAsMHg0MiwweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTIzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgzZSwweDAwLDB4ZTQsMHg4MCwweDMxLDB4YTEgfSB9LAoreyAgMTYsIDB4ZTI0MCwgMCwgezB4MGYsMHg1OCwweDEzLDB4NzYsMHgwMCwweGQwLDB4ODAsMHgzMSwweGMwLDB4MGMsMHgzOCwweDAzLDB4YmUsMHg4MCwweGQ3LDB4ODEgfSB9LAoreyAgMTYsIDB4ZTI1MCwgMCwgezB4M2YsMHgyMCwweDhjLDB4NzksMHgwMywweDdmLDB4MDEsMHhkNiwweDgwLDB4MzksMHhlOCwweDRmLDB4NjgsMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTI2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhiZSwweDAwLDB4ZmEsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTI3MCwgMCwgezB4OGYsMHg5NiwweDBiLDB4YTQsMHgwMCwweGVhLDB4MDAsMHgzYywweGMwLDB4MGYsMHg5MCwweDAzLDB4YWMsMHgyMCwweGZiLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTI4MCwgMCwgezB4MmUsMHgwMCwweDBmLDB4YjIsMHgwMywweGFkLDB4YTAsMHhlYSwweDAwLDB4M2UsMHhjMCwweDBmLDB4YTAsMHgxYiwweGMyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTI5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhmZSwweDA4LDB4ZGUsMHg4MSwweDMzLDB4YTQgfSB9LAoreyAgMTYsIDB4ZTJhMCwgMCwgezB4MGUsMHhmYywweDEzLDB4M2UsMHgwMCwweGZjLDB4ODAsMHgxMywweDIwLDB4MGMsMHg2OCwweDAzLDB4M2UsMHgyMCwweGZmLDB4YzggfSB9LAoreyAgMTYsIDB4ZTJiMCwgMCwgezB4M2YsMHg2MCwweDFkLDB4ZjgsMHgwMywweDdlLDB4MDAsMHhjNywweDgwLDB4MzMsMHhlMiwweDBjLDB4ZDgsMHgwMywweDEwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTJjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDAwLDB4ODYsMHg0MSwweDMxLDB4YzQgfSB9LAoreyAgMTYsIDB4ZTJkMCwgMCwgezB4MDgsMHg3OSwweDQyLDB4OWMsMHgwMCwweGJjLDB4MTAsMHgyMSwweDQwLDB4ODUsMHgzNSwweDAzLDB4NWMsMHgwMCwweGI3LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTJlMCwgMCwgezB4MmQsMHhjMCwweDA4LDB4NzIsMHgwMiwweDJjLDB4MDAsMHhhNywweDAxLDB4MzcsMHhjMCwweDA4LDB4NTEsMHg0MiwweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTJmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDAsMHg4YywweDQwLDB4ODIsMHgwMCwweDI0LDB4ODEgfSB9LAoreyAgMTYsIDB4ZTMwMCwgMCwgezB4MDgsMHhkOCwweDAyLDB4MTQsMHgyMCwweGI1LDB4MDAsMHgyMCwweDQwLDB4MDksMHg2MCwweDAyLDB4MWMsMHg0MCwweGI3LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTMxMCwgMCwgezB4MmMsMHg0MCwweDBiLDB4MzAsMHgyMiwweGRjLDB4MDAsMHg5NywweDAwLDB4MjEsMHhjNCwweDA4LDB4NDAsMHgwMiwweDQ0LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTMyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MTQsMHhlYywweDAwLDB4OTIsMHgwNiwweDIwLDB4OTAgfSB9LAoreyAgMTYsIDB4ZTMzMCwgMCwgezB4MzgsMHgxNSwweDAyLDB4ODYsMHgwMCwweGI4LDB4MDAsMHg2MCwweDUwLDB4MDksMHgzMCwweDAyLDB4NGUsMHgwMSwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTM0MCwgMCwgezB4MmUsMHg0MCwweDBiLDB4MzAsMHgwMiwweGNlLDB4MjAsMHhiMywweDAwLDB4MjQsMHhmMCwweDQ4LDB4MDIsMHgwYSwweDU4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZTM1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAwLDB4Y2EsMHgwMCwweGE2LDB4OTQgfSB9LAoreyAgMTYsIDB4ZTM2MCwgMCwgezB4MmMsMHg5MCwweDAzLDB4MmUsMHgwMCwweGZiLDB4MDUsMHhiMiwweDg1LDB4MGQsMHg5MCwweDAzLDB4M2YsMHg5MCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTM3MCwgMCwgezB4N2UsMHg4MCwweDFmLDB4ZjAsMHg0MywweGZjLDB4MjEsMHg5YSwweDAwLDB4MzMsMHhjOCwweDNjLDB4YjIsMHgwMywweDZhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTM4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkwLDB4MDAsMHhlYywweDAyLDB4ZWEsMHg0MCwweDNkLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTM5MCwgMCwgezB4MGYsMHgxMCwweDkzLDB4ZWQsMHgwMCwweGZiLDB4NDAsMHgzZSwweDkwLDB4OGYsMHgzMCwweDAzLDB4ZWMsMHg4MCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTNhMCwgMCwgezB4M2UsMHg5MSwweDFjLDB4YjAsMHgwMywweDJjLDB4MTAsMHhlOCwweDAwLDB4M2UsMHhjOCwweDFmLDB4OTAsMHgwMywweGE1LDB4MTAgfSB9LAoreyAgMTYsIDB4ZTNiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhmYywweDAyLDB4ZTQsMHgwMCwweDczLDB4YTAgfSB9LAoreyAgMTYsIDB4ZTNjMCwgMCwgezB4MGMsMHhmYywweDAzLDB4N2MsMHgwMiwweGZmLDB4MTAsMHgxMywweGM0LDB4MWMsMHhjMCwweDAzLDB4M2MsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTNkMCwgMCwgezB4MzcsMHhlMCwweDBkLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhlZCwweDgwLDB4MzEsMHhjMCwweDBjLDB4MzIsMHg2MywweDIwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTNlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg0LDB4MDAsMHg2YywweDAwLDB4OGEsMHhjMCwweDIyLDB4YjEgfSB9LAoreyAgMTYsIDB4ZTNmMCwgMCwgezB4OGEsMHhiOCwweDQzLDB4NGEsMHgxMCwweGRiLDB4MjAsMHgyMCwweGYwLDB4MGEsMHg5NCwweDAzLDB4NmMsMHgwMCwweGJiLDB4MDcgfSB9LAoreyAgMTYsIDB4ZTQwMCwgMCwgezB4MjIsMHhiOCwweDA4LDB4YjAsMHgwMiwweGVjLDB4MTEsMHhlOCwweGMwLDB4YjIsMHhjMCwweDJhLDB4OTIsMHgxYSwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTQxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDEsMHgyYywweDAwLDB4YWEsMHg4MCwweDIyLDB4OTggfSB9LAoreyAgMTYsIDB4ZTQyMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4MmYsMHgwMywweGJiLDB4MDEsMHgyYSwweDgzLDB4MDgsMHhiMiwweDRlLDB4MmMsMHgwNCwweGFiLDB4MDIgfSB9LAoreyAgMTYsIDB4ZTQzMCwgMCwgezB4MjIsMHhjNCwweDI4LDB4YjAsMHgyMiwweGVjLDB4MDksMHhiMywweDUwLDB4NjIsMHhjMCwweDA4LDB4YjAsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTQ0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDAxLDB4ODMsMHgwMCwweDYwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTQ1MCwgMCwgezB4MDgsMHgxMiwweDBhLDB4NDQsMHgwMCwweDkzLDB4MDAsMHgyYSwweDgwLDB4NGEsMHgzMCwweDAyLDB4MGMsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTQ2MCwgMCwgezB4NjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMywweDAyLDB4NjAsMHhjMCwweDA4LDB4MDAsMHg0NiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MGQsMHg2YywweDAwLDB4ZTgsMHgwMiwweDIyLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTQ4MCwgMCwgezB4MmMsMHhmMiwweDQzLDB4MmMsMHgwMCwweGZiLDB4MDAsMHhiYSwweGMwLDB4MDgsMHhhNSwweDAyLDB4M2MsMHgwMCwweGVmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTQ5MCwgMCwgezB4MzYsMHhjMCwweDRkLDB4ZjAsMHgxMywweGZkLDB4NTEsMHhmYiwweDAwLDB4MzIsMHhjMCwweDBjLDB4YjAsMHgwMywweDIwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTRhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmYywweDAwLDB4N2UsMHgwNCwweDNmLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTRiMCwgMCwgezB4MGYsMHgzMSwweDQzLDB4ZjAsMHgwMiwweGZmLDB4MDAsMHgzNywweGMwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwOCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTRjMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhlZiwweDAwLDB4M2IsMHhjMCwweDBmLDB4YzAsMHgwMywweGU4LDB4MTYgfSB9LAoreyAgMTYsIDB4ZTRkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmMiwweDQwLDB4ZmMsMHg4MCwweDNmLDB4MjQgfSB9LAoreyAgMTYsIDB4ZTRlMCwgMCwgezB4MGQsMHhkOCwweDUzLDB4ZDYsMHgwNCwweGRmLDB4MzIsMHgzZiwweGNjLDB4NGMsMHhjMCwweDQzLDB4ZmMsMHgwMCwweGRmLDB4NjAgfSB9LAoreyAgMTYsIDB4ZTRmMCwgMCwgezB4MzcsMHhjMCwweDBmLDB4YzQsMHgwMywweDdjLDB4ZDAsMHhkZiwweDIwLDB4MzMsMHhkOCwweDBkLDB4ZjgsMHg0MywweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTUwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTgsMHhlOCwweDgwLDB4YjAsMHgwMSwweDJlLDB4MDggfSB9LAoreyAgMTYsIDB4ZTUxMCwgMCwgezB4ODgsMHg5MCwweDAyLDB4ZWMsMHgyMCwweDhiLDB4NzAsMHgyZiwweGNjLDB4MDgsMHhiMywweDgyLDB4ZmQsMHhlMCwweGJmLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTUyMCwgMCwgezB4MjIsMHhkOCwweDBiLDB4OTMsMHgwMiwweGZkLDB4YzAsMHhhZiwweDEwLDB4MjgsMHhmMCwweDA4LDB4YmMsMHgxMiwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTUzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjNCwweDAwLDB4YjAsMHgwMCwweDJlLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTU0MCwgMCwgezB4MGEsMHgxMiwweDgyLDB4ZWMsMHg4MCwweGIzLDB4MDAsMHgyYywweGM4LDB4MGEsMHgwMCwweDMyLDB4OGMsMHgwMCwweGEzLDB4MzAgfSB9LAoreyAgMTYsIDB4ZTU1MCwgMCwgezB4MjAsMHhkMiwweDA5LDB4MDAsMHgwMiwweDhjLDB4ODAsMHg4MywweDAwLDB4MjgsMHhkOCwweDBiLDB4MzQsMHgxMiwweGYyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTU2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhhYywweDAxLDB4YjgsMHgwMiwweDJlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTU3MCwgMCwgezB4MGEsMHg5MCwweDEyLDB4ZWMsMHgxMCwweDhiLDB4MDAsMHgyZSwweGMwLDB4MGEsMHhiMCwweDAwLDB4ZWMsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTU4MCwgMCwgezB4MjIsMHhjMSwweDBiLDB4OTIsMHgwMiwweGNjLDB4MDEsMHhhYiwweDAwLDB4MmEsMHhjMCwweDAyLDB4YjAsMHgwMiwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTU5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlMCwweDAwLDB4ZmEsMHgwYywweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4ZTVhMCwgMCwgezB4MGYsMHhhMCwweDEzLDB4ZWUsMHgyMCwweGRiLDB4MDAsMHgzZSwweGMwLDB4MmUsMHg4OCwweDUzLDB4ZWMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTViMCwgMCwgezB4YjIsMHhjMCwweDhmLDB4YWMsMHg4MywweGFjLDB4MDgsMHhkYiwweDAwLDB4MWEsMHhjMCwweDRmLDB4YjAsMHgwMywweGMwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTVjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiOCwweDAwLDB4ZmUsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4ZTVkMCwgMCwgezB4MmQsMHhlMCwweDAzLDB4ZmUsMHg4MCwweDdmLDB4MDAsMHgzZiwweGMwLDB4MGQsMHhkMiwweDAzLDB4ZmMsMHgwMCwweGJmLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTVlMCwgMCwgezB4M2UsMHhjMCwweDBkLDB4YzgsMHgwMywweGZjLDB4MGMsMHhmZiwweDAwLDB4M2YsMHhjMCwweDA5LDB4ZjAsMHgyMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTVmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhNCwweDAwLDB4ZmEsMHg0MCwweDMyLDB4YzEgfSB9LAoreyAgMTYsIDB4ZTYwMCwgMCwgezB4MGYsMHhhMCwweDAzLDB4MjksMHgwOCwweGRiLDB4MDAsMHgzZSwweGMwLDB4MGUsMHg4NSwweDAzLDB4ZWMsMHgyMCwweGNiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTYxMCwgMCwgezB4M2EsMHhjMCwweDBlLDB4YTQsMHgwMywweGVjLDB4MDAsMHhmYiwweDAwLDB4M2EsMHhjMiwweDBlLDB4YjAsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTYyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyYywweDAwLDB4YmEsMHg2MCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4ZTYzMCwgMCwgezB4MGIsMHhhMCwweDAyLDB4MDgsMHgwMCwweGFmLDB4MDAsMHgyZiwweGQwLDB4MGIsMHhiNSwweDAyLDB4ZmUsMHgwMiwweDhmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTY0MCwgMCwgezB4MmYsMHhjMCwweDBkLDB4ODAsMHgwYSwweDNjLDB4MDAsMHhiNywweDAwLDB4MjMsMHhjMiwweDA1LDB4ZjAsMHgyMiwweDM2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTY1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDQsMHg0MCwweDAwLDB4YjEsMHg4OCwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTY2MCwgMCwgezB4MGIsMHgxMCwweDAyLDB4MGMsMHgwMCwweDgzLDB4MDAsMHgyZSwweGM4LDB4MGIsMHgwOCwweDA2LDB4NGQsMHg0MCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTY3MCwgMCwgezB4MjAsMHhjMCwweDA4LDB4MzAsMHgwNiwweDBjLDB4MDgsMHg5MywweDIwLDB4MGEsMHhlMCwweDRhLDB4MzAsMHgwMiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTY4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTAsMHg1YSwweDAwLDB4YjUsMHg5MCwweDIxLDB4MjAgfSB9LAoreyAgMTYsIDB4ZTY5MCwgMCwgezB4MGIsMHg1OCwweDQyLDB4M2UsMHgwMCwweGE3LDB4ODAsMHgyZCwweGUwLDB4MGIsMHg2OSwweDAyLDB4ZGUsMHg0MCwweDg3LDB4OTIgfSB9LAoreyAgMTYsIDB4ZTZhMCwgMCwgezB4MmQsMHhlMCwweDA5LDB4MTgsMHgwMiwweDllLDB4MDEsMHhiNywweDgwLDB4MjksMHhlMCwweDAzLDB4NzAsMHgwMiwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTZiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHg0NCwweDAwLDB4ZjEsMHgwMSwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTZjMCwgMCwgezB4NWYsMHgxOCwweDAzLDB4MGMsMHgxMCwweDgzLDB4MDAsMHgzYywweGM0LDB4MGUsMHgwNCwweDAzLDB4ZWMsMHgwMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTZkMCwgMCwgezB4MzAsMHhjNCwweDBjLDB4MzEsMHgwMywweDhjLDB4MDAsMHhmMywweDAwLDB4MzgsMHhjOCwweDBlLDB4MzEsMHgwMywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4ZTZlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhiYywweDAwLDB4ZmQsMHgwNCwweGJmLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTZmMCwgMCwgezB4NGYsMHg1OCwweDAzLDB4ZjgsMHgwOCwweGVmLDB4MDgsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAxLDB4ZmMsMHgwMCwweGZmLDB4NGMgfSB9LAoreyAgMTYsIDB4ZTcwMCwgMCwgezB4M2YsMHhjMSwweDBmLDB4ZDAsMHgwMywweDNjLDB4MDAsMHhmNywweDAwLDB4MzcsMHhjMiwweDBkLDB4NzIsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4ZTcxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhlMiwweDAwLDB4ZGIsMHgwMCwweDMyLDB4YzAgfSB9LAoreyAgMTYsIDB4ZTcyMCwgMCwgezB4NGQsMHhhOCwweDAzLDB4MmMsMHgwOCwweGZiLDB4MDAsMHg3ZSwweGM4LDB4OGYsMHhiMCwweDBiLDB4NmYsMHg0NSwweGViLDB4YzIgfSB9LAoreyAgMTYsIDB4ZTczMCwgMCwgezB4MzYsMHhjMCwweDA3LDB4YTAsMHgwMywweGVmLDB4MjAsMHhjYiwweDUwLDB4YjIsMHhjMCwweDBjLDB4NzksMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTc0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTksMHg5OCwweDAwLDB4OGYsMHgwMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4ZTc1MCwgMCwgezB4MGIsMHg2MCwweDAzLDB4NWMsMHgwMCwweDM3LDB4MDAsMHgyZCwweGQyLDB4MGIsMHgzMCwweDAyLDB4MGMsMHhhOCwweDg3LDB4MjQgfSB9LAoreyAgMTYsIDB4ZTc2MCwgMCwgezB4MjEsMHhkMCwweDA5LDB4NzAsMHgwMiwweGRkLDB4ODgsMHg4NywweDJhLDB4MjMsMHhlOCwweDA4LDB4NzAsMHgwMiwweDMyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTc3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHhiNiwweDAwLDB4OTcsMHg4MCwweDIxLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZTc4MCwgMCwgezB4MGIsMHg2OCwweDAyLDB4MWUsMHgwMCwweGI3LDB4ODAsMHgyZCwweGU4LDB4OGIsMHg0OCwweDgyLDB4MWUsMHg4MCwweGEzLDB4ODQgfSB9LAoreyAgMTYsIDB4ZTc5MCwgMCwgezB4MjUsMHhlOCwweDBiLDB4NjgsMHgwMiwweGNlLDB4MDIsMHg4NywweDgwLDB4MjEsMHhlMCwweDA4LDB4N2EsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTdhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MDQsMHhjYywweDA4LDB4ODMsMHg4MiwweDIwLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZTdiMCwgMCwgezB4OGIsMHgyYSwweDAyLDB4NDgsMHg0MCwweGIzLDB4MDAsMHgyYywweGMwLDB4MGIsMHgzMCwweDgyLDB4MGMsMHgwMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTdjMCwgMCwgezB4MDAsMHhjMSwweDA5LDB4MzEsMHgwMiwweGNjLDB4MDAsMHg4MywweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwYSwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTdkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhlOCwweDAwLDB4ZGEsMHhhMCwweDMyLDB4YTggfSB9LAoreyAgMTYsIDB4ZTdlMCwgMCwgezB4OGQsMHhhOCwweDAzLDB4M2IsMHgwMCwweGZhLDB4MDAsMHgzZSwweDgwLDB4MGYsMHhlNCwweDAzLDB4NjgsMHgwMCwweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4ZTdmMCwgMCwgezB4MzYsMHg4MCwweDBmLDB4ZTQsMHgwMywweGU4LDB4MDAsMHhjYSwweDAwLDB4MzIsMHg4MCwweDJjLDB4YTAsMHgwMywweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTgwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDEsMHhhMCwweDEwLDB4ZjgsMHgwMCwweGJlLDB4MjAgfSB9LAoreyAgMTYsIDB4ZTgxMCwgMCwgezB4OGYsMHhjMSwweDAzLDB4ZTAsMHgyNCwweGY4LDB4MDAsMHgzZSwweDEwLDB4MGYsMHg4NCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDEgfSB9LAoreyAgMTYsIDB4ZTgyMCwgMCwgezB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAxLDB4YmUsMHgxMCwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTgzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhhNCwweDAwLDB4ZjksMHg0MCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTg0MCwgMCwgezB4Y2YsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGM5LDB4MDAsMHgwZSwweDUwLDB4MGYsMHgxYSwweDAzLDB4MjYsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTg1MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHg4MSwweGU0LDB4MDAsMHhmOSwweDgwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweGMyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTg2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDA0LDB4YjEsMHgwNCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTg3MCwgMCwgezB4MGIsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGE5LDB4MDAsMHgyZSwweDUzLDB4MGIsMHg5MiwweDBhLDB4MjYsMHg0OCwweGI5LDB4MDQgfSB9LAoreyAgMTYsIDB4ZTg4MCwgMCwgezB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiOSwweDgwLDB4MDIsMHg1MCwweDA4LDB4OTAsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTg5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MDUsMHgyNCwweDAwLDB4YmQsMHgwMCwweDIzLDB4NDAgfSB9LAoreyAgMTYsIDB4ZThhMCwgMCwgezB4MGIsMHhkMCwweDEyLDB4YzQsMHgwMCwweDg5LDB4MDIsMHgyZSwweDQwLDB4MGIsMHg5MCwweDIyLDB4MjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZThiMCwgMCwgezB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiMSwweDIwLDB4MjAsMHg0MCwweDY4LDB4OTAsMHgyMiwweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZThjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTQsMHgxNCwweDAwLDB4YmYsMHgxMiwweGExLDB4NDAgfSB9LAoreyAgMTYsIDB4ZThkMCwgMCwgezB4MGIsMHg1MCwweDAyLDB4YzQsMHgwMCwweGExLDB4MjAsMHgyYywweDQ4LDB4MGIsMHgxMiwweDAyLDB4MDQsMHgxMCwweGIxLDB4MTEgfSB9LAoreyAgMTYsIDB4ZThlMCwgMCwgezB4MmMsMHg0OCwweDBiLDB4MTMsMHgyMiwweGM0LDB4MDAsMHhiMSwweDQwLDB4MjAsMHg1YSwweDA4LDB4MTAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZThmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZjgsMHg0MCwweDMyLDB4MTQgfSB9LAoreyAgMTYsIDB4ZTkwMCwgMCwgezB4MGYsMHg0NSwweDAzLDB4ZTEsMHg0MCwweGM4LDB4NTAsMHgzZSwweDE1LDB4OGYsMHg4NSwweDAzLDB4MjEsMHhlOCwweGY4LDB4NjggfSB9LAoreyAgMTYsIDB4ZTkxMCwgMCwgezB4M2UsMHgxNCwweDBmLDB4ODQsMHgwMywweGUxLDB4ZTAsMHhmMCwweDI4LDB4MzIsMHhhOCwweGNjLDB4ODAsMHgyMywweGVlLDB4MDMgfSB9LAoreyAgMTYsIDB4ZTkyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MTUsMHhjNCwweDEwLDB4ZjksMHgyMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTkzMCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZjQsMHgwMCwweGY5LDB4MTAsMHgzZSwweDQ0LDB4MGYsMHhkMSwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MjAgfSB9LAoreyAgMTYsIDB4ZTk0MCwgMCwgezB4M2UsMHg0NCwweDBmLDB4ZDMsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4YmUsMHg0MCwweDBmLDB4OTQsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4ZTk1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhlNCwweDAwLDB4ZmQsMHgxMCwweDMzLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTk2MCwgMCwgezB4MGMsMHhkMCwweDAzLDB4MjQsMHgwMCwweGQ5LDB4MDAsMHgzZiwweDQwLDB4NGMsMHhkMCwweDAzLDB4ZjYsMHgwMCwweGZkLDB4OTAgfSB9LAoreyAgMTYsIDB4ZTk3MCwgMCwgezB4M2EsMHg0MCwweDBjLDB4OTAsMHgwMywweGU2LDB4YTAsMHhmZCwweGE4LDB4MzcsMHg2OCwweDBjLDB4ZDgsMHg4MywweDI2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTk4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMCwweDA4LDB4YzgsMHhhMCwweDIyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTk5MCwgMCwgezB4MDgsMHg4MCwweDAyLDB4MjAsMHgwMCwweDg4LDB4MDAsMHgyZSwweDAwLDB4MGMsMHg4MCwweDEyLDB4ZTAsMHgwMCwweGI4LDB4ODAgfSB9LAoreyAgMTYsIDB4ZTlhMCwgMCwgezB4MjIsMHgwMCwweDBkLDB4MGEsMHgwMiwweGUzLDB4ODAsMHhiMCwweGMwLDB4MjAsMHgzNCwweDA4LDB4ODQsMHgwMywweDRlLDB4MDQgfSB9LAoreyAgMTYsIDB4ZTliMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHg4NCwweDA5LDB4YTEsMHgwMCwweDIwLDB4NDEgfSB9LAoreyAgMTYsIDB4ZTljMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCwweDkxLDB4MDAsMHgyYywweDQwLDB4MDgsMHgxMCwweDAyLDB4YzUsMHgwMCwweGIxLDB4NjAgfSB9LAoreyAgMTYsIDB4ZTlkMCwgMCwgezB4MjAsMHg0MCwweDA4LDB4MTAsMHhhMiwweGM0LDB4MjAsMHhiMSwweDI4LDB4MjQsMHg0YSwweDA4LDB4MTAsMHgwMiwweDUyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTllMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTQsMHhhNCwweDAxLDB4ODEsMHgwMCwweGEyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTlmMCwgMCwgezB4YTgsMHg5MCwweDAwLDB4MjUsMHg0MCwweDg5LDB4MDEsMHgyYywweDQwLDB4MDgsMHg5NCwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWEwMCwgMCwgezB4MmEsMHg0MCwweDA5LDB4OTAsMHgwMiwweGU0LDB4MDEsMHhiOSwweDA0LDB4MjIsMHg0MSwweDQ4LDB4OTAsMHgwMiwweDQ2LDB4MDQgfSB9LAoreyAgMTYsIDB4ZWExMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTQsMHhhNSwweDIwLDB4ZTksMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWEyMCwgMCwgezB4NGMsMHgxMCwweDBiLDB4MjYsMHgwMCwweGQ5LDB4MDAsMHgzZSwweDQwLDB4MmMsMHg5OCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWEzMCwgMCwgezB4YjIsMHg0MCwweDBjLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4MzYsMHg0MCwweDJjLDB4OTAsMHgwMywweDY4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZWE0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDEsMHhhNCwweDAwLDB4ZTksMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWE1MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZTYsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGUsMHg5YSwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWE2MCwgMCwgezB4MzYsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2MsMHg0MCwweDBmLDB4OTAsMHgwMywweGRhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWE3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhhMSwweDAwLDB4ZjgsMHgwMCwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWE4MCwgMCwgezB4MGYsMHg4MCwweDEzLDB4YTAsMHgwMCwweGM4LDB4MDAsMHgzMiwweDA0LDB4OGMsMHg4MCwweDAzLDB4YTAsMHhjMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWE5MCwgMCwgezB4M2EsMHgwMCwweDBmLDB4ODAsMHgwMywweDIwLDB4MDAsMHhjMCwweDA5LDB4MzIsMHgwMCwweDRjLDB4ODAsMHgwMSwweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZWFhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDAwLDB4YmUsMHgwMCwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZWFiMCwgMCwgezB4MGIsMHhlMCwweDAyLDB4ODgsMHgwMCwweGFhLDB4MDAsMHgwMywweGEwLDB4MGEsMHhlNiwweDAyLDB4ZmEsMHgwMCwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWFjMCwgMCwgezB4MzIsMHg4MCwweDBiLDB4YTAsMHgwMiwweDI4LDB4MDAsMHg4ZSwweDgwLDB4YTMsMHg4MCwweDI4LDB4MjAsMHgwMiwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWFkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg2YywweDAwLDB4YjMsMHg0OCwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWFlMCwgMCwgezB4MGIsMHgxMCwweDAyLDB4MGMsMHgwMCwweDgzLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgzNCwweDgyLDB4OGUsMHgwNCwweDk5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWFmMCwgMCwgezB4MGEsMHhjMCwweDFiLDB4MzAsMHgwMiwweDBjLDB4MDIsMHg5MCwweDUwLDB4MjAsMHg2MCwweDA4LDB4MzAsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWIwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTEsMHgxYywweDgwLDB4YmQsMHgwYSwweDIxLDB4NDggfSB9LAoreyAgMTYsIDB4ZWIxMCwgMCwgezB4MGIsMHg1MiwweDAyLDB4OWMsMHg0MCwweGEzLDB4YTAsMHgyMCwweDgwLDB4MGEsMHg2MCwweDAyLDB4Y2UsMHgwMCwweDg1LDB4MjAgfSB9LAoreyAgMTYsIDB4ZWIyMCwgMCwgezB4MjEsMHhjNCwweDBiLDB4N2EsMHgwNiwweDFlLDB4ODAsMHg5NSwweDIwLDB4MjEsMHg5MCwweDA4LDB4NzAsMHgwMiwweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWIzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDgsMHgxZSwweDgwLDB4ZjcsMHg4MCwweGIxLDB4NzkgfSB9LAoreyAgMTYsIDB4ZWI0MCwgMCwgezB4MGYsMHhkYiwweDAyLDB4M2UsMHgyMCwweGM3LDB4YTAsMHhiMSwweDYwLDB4Y2MsMHg3OCwweDEzLDB4OTYsMHgwMCwweGYxLDB4ZjAgfSB9LAoreyAgMTYsIDB4ZWI1MCwgMCwgezB4MzksMHhlMiwweDBmLDB4N2IsMHgxMywweDBmLDB4MDAsMHhkNCwweGEwLDB4MzEsMHg2MCwweDJjLDB4NzAsMHgwMywweDJhLDB4MDIgfSB9LAoreyAgMTYsIDB4ZWI2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTUsMHhhYywweDAwLDB4ZjcsMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWI3MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZWQsMHg4MCwweGZiLDB4MTAsMHgzZSwweDQwLDB4MGIsMHhiMCwweDIzLDB4ZWMsMHgwMCwweGY5LDB4MjAgfSB9LAoreyAgMTYsIDB4ZWI4MCwgMCwgezB4M2EsMHhkOCwweDBmLDB4YjAsMHgwYiwweGVkLDB4ODEsMHhlZCwweDEwLDB4M2UsMHg4MCwweDBmLDB4MzAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4ZWI5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHhiZSwweDIwLDB4ZWUsMHg4MCwweDMzLDB4NjAgfSB9LAoreyAgMTYsIDB4ZWJhMCwgMCwgezB4MGMsMHhkOCwweDgzLDB4MWUsMHgwMCwweDZmLDB4ODAsMHgzMywweGUwLDB4MGYsMHhiOCwweDExLDB4MzIsMHgwNCwweGY1LDB4ODAgfSB9LAoreyAgMTYsIDB4ZWJiMCwgMCwgezB4MzMsMHhlMCwweDBmLDB4ZjgsMHg4MywweDJmLDB4NDAsMHhmZSwweDgwLDB4YjMsMHhlMCwweDBjLDB4ZjgsMHgwMywweDEwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWJjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTgsMHg5YywweDAwLDB4YmMsMHgwMCwweGExLDB4NDQgfSB9LAoreyAgMTYsIDB4ZWJkMCwgMCwgezB4MDgsMHgxMCwweDAzLDB4NWMsMHgwMCwweDhmLDB4MDAsMHgyMSwweDgwLDB4MGIsMHhlYSwweDIyLDB4MWMsMHg4MCwweGI1LDB4MDEgfSB9LAoreyAgMTYsIDB4ZWJlMCwgMCwgezB4MjEsMHhjMCwweDBiLDB4ZjAsMHgwMiwweDFlLDB4ODAsMHhiZSwweDAwLDB4MjMsMHg4MCwweDJhLDB4NzAsMHgwMiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZWJmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDIwLDB4YTcsMHgwMCwweDIzLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWMwMCwgMCwgezB4MGIsMHg1MCwweDBhLDB4M2MsMHgwMCwweGE3LDB4MDAsMHgyNSwweGMwLDB4MGEsMHg0MywweDAyLDB4MTAsMHgwMCwweGI1LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWMxMCwgMCwgezB4MjEsMHhjMCwweDBiLDB4NzAsMHg4MiwweDFjLDB4ODAsMHhiNCwweDAwLDB4MjEsMHhjMCwweDA4LDB4NzAsMHgwMiwweDA0LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWMyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDQsMHg4ZSwweDA0LDB4YjMsMHgwMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWMzMCwgMCwgezB4MDksMHgxNCwweDAyLDB4NGMsMHgwMCwweDgzLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgyNCwweDgyLDB4MDQsMHgwMCwweGIxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWM0MCwgMCwgezB4MjAsMHhjMCwweDhiLDB4M2EsMHgwMiwweDJjLDB4MDEsMHhiMCwweDAwLDB4MjAsMHg4MCwweDBhLDB4MzAsMHgwMiwweDFhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZWM1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHg5ZSwweDAwLDB4ZWIsMHgwNCwweDMzLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWM2MCwgMCwgezB4MmQsMHhkYywweDAzLDB4MWQsMHg2MCwweGVmLDB4MDAsMHgzMiwweDAwLDB4Y2YsMHg5YSwweDAzLDB4MjgsMHgwMCwweGZkLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWM3MCwgMCwgezB4MzMsMHhjMSwweDhiLDB4ZmMsMHgwYiwweDNjLDB4MDAsMHhmYywweDAwLDB4MzIsMHg4MCwweDBjLDB4OTAsMHgwMywweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZWM4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhhYywweDEwLDB4ZjgsMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWM5MCwgMCwgezB4MGUsMHg5OCwweDIzLDB4YWMsMHgwNCwweGZiLDB4MDAsMHgzYywweDAwLDB4MGYsMHg4NCwweDIwLDB4ZWQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWNhMCwgMCwgezB4M2UsMHhjMCwweDRmLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmZCwweDAwLDB4M2UsMHg4MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWNiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIxLDB4MTAsMHhmYywweDAwLDB4Y2YsMHg4MCwweDMzLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWNjMCwgMCwgezB4MGMsMHhkMCwweDgzLDB4ZmMsMHgwMCwweGVmLDB4MDAsMHgzZiwweDQwLDB4MGMsMHhmMSwweDQxLDB4MzAsMHgxMCwweGNkLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWNkMCwgMCwgezB4M2YsMHhjMCwweDAwLDB4NzAsMHgxMywweDNjLDB4MDAsMHhlNCwweDAwLDB4YjEsMHhkMCwweDBjLDB4MTAsMHgwMywweDIwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZWNlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGExLDB4MDQsMHgyYywweDAwLDB4OGEsMHhlNCwweDJhLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWNmMCwgMCwgezB4MjgsMHg5MCwweDAyLDB4ZWMsMHgwMCwweDhiLDB4MDAsMHgzZSwweDAyLDB4MGEsMHg4MCwweDAyLDB4MmMsMHg4MiwweDg5LDB4MDQgfSB9LAoreyAgMTYsIDB4ZWQwMCwgMCwgezB4MmUsMHhjMSwweDBhLDB4YjAsMHgwYSwweDJjLDB4MDAsMHg4OSwweDAyLDB4MjIsMHhmMiwweDJhLDB4OTgsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWQxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAyLDB4ODAsMHgxNCwweDJhLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWQyMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4ZWMsMHgwOCwweGFiLDB4MDQsMHgyZSwweDg0LDB4MDgsMHgxMCwweDgyLDB4ODAsMHgxMCwweDg5LDB4MDMgfSB9LAoreyAgMTYsIDB4ZWQzMCwgMCwgezB4MmMsMHhjMCwweDRhLDB4YjAsMHgyMiwweDJjLDB4MDAsMHhhYSwweDAwLDB4MjIsMHg4MCwweDA4LDB4OTEsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWQ0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTQsMHgyYywweDAwLDB4ODAsMHgwMCwweDI4LDB4NDAgfSB9LAoreyAgMTYsIDB4ZWQ1MCwgMCwgezB4MDgsMHgxMSwweDAyLDB4ZWMsMHgwMCwweDgzLDB4MDAsMHgyYywweDgxLDB4MGEsMHgwMCwweDVhLDB4ODgsMHgwMCwweDAxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWQ2MCwgMCwgezB4MmMsMHhjMCwweDBhLDB4MzAsMHgwMiwweDBjLDB4MDAsMHg4MiwweDAwLDB4MjAsMHg4MCwweDBhLDB4MTAsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZWQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4YzksMHgwMCwweDNhLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWQ4MCwgMCwgezB4MGMsMHhkNCwweDAzLDB4ZmMsMHgwMCwweGViLDB4MDAsMHgzZSwweDQwLDB4MGMsMHg5MiwweDAzLDB4YTAsMHgwMCwweDRkLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWQ5MCwgMCwgezB4M2YsMHhjMCwweDBlLDB4ZjAsMHgzMywweDNjLDB4ODAsMHhlOCwweDAwLDB4MzIsMHhjMCwweDBjLDB4OTAsMHgwMywweDIwLDB4MDMgfSB9LAoreyAgMTYsIDB4ZWRhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTEsMHhmYywweDAwLDB4ZmMsMHgwMCwweDNkLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWRiMCwgMCwgezB4MGYsMHg1MCwweDAzLDB4ZmMsMHgwMiwweDNmLDB4MDQsMHgzYiwweDAxLDB4NGYsMHhjNCwweDEzLDB4NzAsMHgwMCwweGZkLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWRjMCwgMCwgezB4M2YsMHhjMCwweDFmLDB4ZjAsMHgwMSwweGZjLDB4NDAsMHhmYywweDAwLDB4M2YsMHhjMCwweDBmLDB4ZDAsMHgxMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4ZWRkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmOCwweGUwLDB4ZmYsMHg4MCwweDNkLDB4YzAgfSB9LAoreyAgMTYsIDB4ZWRlMCwgMCwgezB4MGQsMHhmMywweDgyLDB4ZjAsMHg4MCwweGZmLDB4NDAsMHgzMSwweGNiLDB4MGMsMHhmMywweDAzLDB4ZmQsMHgwNCwweGVmLDB4YzEgfSB9LAoreyAgMTYsIDB4ZWRmMCwgMCwgezB4MzMsMHhlMCwweDBmLDB4NzksMHgwMywweGZlLDB4MDAsMHhjZiwweDQyLDB4MzMsMHhmMCwweDRjLDB4ZjgsMHgwMywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWUwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MTAsMHhlOSwweDA4LDB4YjksMHg4MSwweDJmLDB4ZjAgfSB9LAoreyAgMTYsIDB4ZWUxMCwgMCwgezB4MDgsMHhmNCwweDUyLDB4ZTksMHgyMCwweGJmLDB4NDAsMHgyMywweGYwLDB4MGEsMHhmMywweDAyLDB4ZmQsMHgwOCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWUyMCwgMCwgezB4MzYsMHhlMCwweDBiLDB4ODAsMHgyMiwweGU4LDB4ODAsMHg4ZiwweDQwLDB4MjIsMHhjMCwweDA4LDB4YjAsMHg4MiwweDMwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZWUzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHhjYywweDAwLDB4YjEsMHg4MCwweDJjLDB4YzUgfSB9LAoreyAgMTYsIDB4ZWU0MCwgMCwgezB4MDksMHgzMiwweDQyLDB4YzgsMHhjMCwweGIzLDB4MzEsMHgyMCwweGMxLDB4MDgsMHgzMiwweDAyLDB4Y2MsMHhkNCwweGJiLDB4MjAgfSB9LAoreyAgMTYsIDB4ZWU1MCwgMCwgezB4NjgsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MjAsMHg5MywweDYwLDB4MjAsMHg4OCwweDA4LDB4MzIsMHgwMiwweDMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZWU2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MTUsMHhhMCwweDAwLDB4YmIsMHg4MCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4ZWU3MCwgMCwgezB4MDgsMHhiMCwweDAyLDB4ZWEsMHgwMCwweGJiLDB4MDAsMHg2MiwweGMxLDB4MGEsMHhiMCwweDAyLDB4Y2MsMHgwMCwweGFiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWU4MCwgMCwgezB4MmUsMHhjMCwweDBiLDB4YTAsMHgwMCwweGU4LDB4MDAsMHg4MywweDAwLDB4MjIsMHhjMSwweDA4LDB4MzAsMHgwMiwweDMwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZWU5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTUsMHhlOCwweDkwLDB4ZmIsMHg4MCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4ZWVhMCwgMCwgezB4MGQsMHhiMCwweDAzLDB4ZTIsMHgxMCwweGZiLDB4MDAsMHgzMiwweGMwLDB4NGMsMHhiMCwweDEzLDB4ZWMsMHgwMCwweGU5LDB4NTQgfSB9LAoreyAgMTYsIDB4ZWViMCwgMCwgezB4M2EsMHhjMCwweDBmLDB4YjAsMHgwMywweGU2LDB4MDAsMHhjYiwweDAwLDB4YjIsMHg0MCwweDBjLDB4YjAsMHgwMywweDA0LDB4MDQgfSB9LAoreyAgMTYsIDB4ZWVjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiOCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4ZWVkMCwgMCwgezB4OGYsMHhmMCwweDAzLDB4ZjAsMHgwMCwweGY3LDB4MDIsMHhiZiwweGMxLDB4MGYsMHhmMCwweDIzLDB4ZmMsMHgwMCwweGRmLDB4MDYgfSB9LAoreyAgMTYsIDB4ZWVlMCwgMCwgezB4MzcsMHhjMCwweDhmLDB4YzksMHgwNywweGZhLDB4OTIsMHhmZiwweDA0LDB4M2YsMHg1MCwweDJmLDB4ZjAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWVmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4MTAsMHhhYywweDAwLDB4YzksMHgwMCwweDNlLDB4YzIgfSB9LAoreyAgMTYsIDB4ZWYwMCwgMCwgezB4MGUsMHhiMCwweDIzLDB4ZTQsMHgwMCwweGViLDB4MDAsMHgzYSwweGM4LDB4MGUsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWYxMCwgMCwgezB4M2UsMHhjMCwweDBmLDB4YjQsMHgwMywweGE0LDB4MDAsMHhmYiwweDAwLDB4M2UsMHg4MCwweDBmLDB4YjAsMHg4MywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZWYyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyOCwweDAwLDB4OGIsMHg3NCwweDJkLDB4YzAgfSB9LAoreyAgMTYsIDB4ZWYzMCwgMCwgezB4MDgsMHhmMCwweDAyLDB4ZTQsMHgwMCwweDhmLDB4MDAsMHgyMSwweGYwLDB4MDgsMHhmMCwweDAyLDB4ZmMsMHgxMCwweGQzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWY0MCwgMCwgezB4MmUsMHhjMCwweDBiLDB4OTAsMHgxMiwweDJjLDB4MDAsMHhlZiwweDAwLDB4MmUsMHhjMCwweDBiLDB4YjYsMHgwMiwweGY2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWY1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MDUsMHg0OCwweDAwLDB4YTMsMHgwMCwweDJjLDB4YzQgfSB9LAoreyAgMTYsIDB4ZWY2MCwgMCwgezB4MGEsMHgzMCwweDAyLDB4YzAsMHgwMCwweGEzLDB4MDAsMHg2OCwweGYwLDB4MGEsMHgzMCwweDEyLDB4Y2MsMHgwNCwweGEyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWY3MCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGVjLDB4MDAsMHhiMywweDAxLDB4MmUsMHhjMCwweDBiLDB4MzQsMHgwMiwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWY4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGIwLDB4MDEsMHgwYywweDAwLDB4ODcsMHg4MCwweDJkLDB4ZTggfSB9LAoreyAgMTYsIDB4ZWY5MCwgMCwgezB4MDgsMHg3OCwweDQyLDB4ZGEsMHgwMCwweDg3LDB4ODAsMHgyNSwweGUwLDB4MDgsMHg3OSwweDAyLDB4Y2UsMHgwMCwweDk2LDB4ODAgfSB9LAoreyAgMTYsIDB4ZWZhMCwgMCwgezB4MmQsMHhlMCwweDBiLDB4ZDksMHgwMiwweGRlLDB4MDAsMHhhNywweDgwLDB4MmQsMHhlMCwweDBiLDB4NzgsMHgwMiwweGZjLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWZiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDQwLDB4ZTMsMHgxMCwweDNjLDB4YzAgfSB9LAoreyAgMTYsIDB4ZWZjMCwgMCwgezB4MGEsMHgzOCwweDAzLDB4ZTgsMHgwMCwweGViLDB4MDAsMHgzOCwweGMyLDB4MGEsMHgzMCwweDAzLDB4Y2MsMHgwMCwweGUzLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWZkMCwgMCwgezB4M2MsMHhjMCwweDBmLDB4MzQsMHgwMywweGNkLDB4MDAsMHhmMywweDIwLDB4M2MsMHg4OCwweDBmLDB4MzAsMHgwMywweGQyLDB4MDIgfSB9LAoreyAgMTYsIDB4ZWZlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiNCwweDgwLDB4ZmYsMHgwNCwweDNmLDB4YzggfSB9LAoreyAgMTYsIDB4ZWZmMCwgMCwgezB4MGYsMHhmMCwweDgzLDB4ZjgsMHg0MCwweGZmLDB4MTgsMHgzYiwweGMwLDB4MGYsMHhmNCwweDgzLDB4ZmMsMHgwMCwweGVlLDB4MDIgfSB9LAoreyAgMTYsIDB4ZjAwMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweDNjLDB4MDAsMHhlZiwweDA4LDB4M2YsMHg4MCwweDBmLDB4ZjAsMHgxMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4ZjAxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhlOCwweDAwLDB4Y2IsMHgwMCwweDNlLDB4ZjIgfSB9LAoreyAgMTYsIDB4ZjAyMCwgMCwgezB4NGQsMHhiMiwweDEzLDB4ZTgsMHgwNCwweGNiLDB4MDEsMHgzMiwweGY4LDB4NGQsMHhiMiwweDEzLDB4NmQsMHgyMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjAzMCwgMCwgezB4M2UsMHhjMCwweDBmLDB4MzAsMHgwMywweDI0LDB4MDAsMHhmYiwweDAwLDB4M2UsMHg0MCwweDhmLDB4YjgsMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjA0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MTEsMHg4YywweDAwLDB4ODYsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4ZjA1MCwgMCwgezB4MDgsMHg3MywweDAyLDB4ZDgsMHgxMiwweDg3LDB4MzAsMHgyMCwweGNiLDB4MDgsMHhmMiwweDAyLDB4MWQsMHgwNSwweGI1LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjA2MCwgMCwgezB4MmQsMHhjMCwweDBiLDB4NjAsMHgwMywweDUwLDB4MTAsMHhiNywweDA5LDB4MmQsMHhjMCwweDBiLDB4ZjAsMHgwMiwweDMyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjA3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHg5ZSwweDAwLDB4ODcsMHg4MCwweDJkLDB4ZTQgfSB9LAoreyAgMTYsIDB4ZjA4MCwgMCwgezB4MDksMHg3YSwweDAyLDB4Y2UsMHgwMSwweDg3LDB4ODAsMHgyMSwweGVjLDB4MDksMHg3OCwweDAyLDB4NWUsMHg4MCwweGI3LDB4YzAgfSB9LAoreyAgMTYsIDB4ZjA5MCwgMCwgezB4MmQsMHhlMCwweDBiLDB4ZjgsMHgwMiwweDFlLDB4MDAsMHhiNywweGEwLDB4MmQsMHg2MCwweDBiLDB4NzgsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjBhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhlZSwweDAwLDB4ODIsMHg4MCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4ZjBiMCwgMCwgezB4MDgsMHgzMCwweDAyLDB4ZWMsMHgwMCwweDgzLDB4MDAsMHhhMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4MGMsMHgwMCwweGIzLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjBjMCwgMCwgezB4MmMsMHhjMSwweDBiLDB4MzAsMHgwMiwweDRlLDB4MDAsMHhiMywweDAwLDB4MmMsMHhmMSwweDBiLDB4MzAsMHgwYSwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjBkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiYSwweDgwLDB4YzYsMHgwMCwweDNlLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjBlMCwgMCwgezB4MGQsMHhhMCwweDAzLDB4ZjgsMHg0MCwweGNhLDB4MDAsMHgzMiwweDgwLDB4MGQsMHhhMCwweDEzLDB4NjgsMHgwMCwweGZlLDB4MDIgfSB9LAoreyAgMTYsIDB4ZjBmMCwgMCwgezB4N2UsMHg4MCwweDBmLDB4ZWQsMHg4MywweDM5LDB4MTAsMHhmYSwweDAwLDB4M2YsMHg4YywweDBmLDB4YTAsMHgwMywweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjEwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDEyLDB4ZjgsMHg5MCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjExMCwgMCwgezB4MGYsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDUsMHgzZSwweDAwLDB4MGUsMHgwMCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4ODAgfSB9LAoreyAgMTYsIDB4ZjEyMCwgMCwgezB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4NjAsMHhmOCwweDAwLDB4N2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjEzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4YzksMHg4MCwweDMyLDB4NjQgfSB9LAoreyAgMTYsIDB4ZjE0MCwgMCwgezB4MGYsMHg5MCwweDQzLDB4ZTQsMHgwNiwweGMxLDB4MDQsMHgzYSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGU5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjE1MCwgMCwgezB4MzIsMHg0MCwweDBmLDB4OTAsMHgwMywweDI0LDB4MDAsMHhjMSwweDAxLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweGMyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjE2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHhjMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZjE3MCwgMCwgezB4MGIsMHg5MCwweDAyLDB4MjQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDUwLDB4MWIsMHg5MCwweDIyLDB4MjQsMHgwMCwweDgxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjE4MCwgMCwgezB4MjIsMHg0MCwweDBiLDB4OTAsMHgyMiwweDI0LDB4MDgsMHhjOSwweDAwLDB4MjAsMHg0MCwweDA4LDB4OTQsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjE5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4OTksMHgyMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZjFhMCwgMCwgezB4MGIsMHgxMCwweDAyLDB4YTQsMHgwMCwweDg5LDB4MDAsMHgyYSwweDU4LDB4MGIsMHg5MCwweDAyLDB4ODQsMHgwMCwweGE5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjFiMCwgMCwgezB4MjIsMHg0MCwweDBiLDB4MTAsMHgwYSwweDA0LDB4MDAsMHg5OSwweDAyLDB4MjIsMHhjMSwweDA4LDB4OTAsMHg4MiwweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjFjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDAwLDB4OTEsMHgwMiwweGEwLDB4YzggfSB9LAoreyAgMTYsIDB4ZjFkMCwgMCwgezB4MGIsMHgxMiwweDAyLDB4MDQsMHg4MCwweDgxLDB4MjIsMHgyMCwweDQ4LDB4OWIsMHgxMiwweDAyLDB4MDQsMHg5MCwweDg5LDB4MDEgfSB9LAoreyAgMTYsIDB4ZjFlMCwgMCwgezB4MjAsMHg0MCwweDBiLDB4MTAsMHgwMiwweDA0LDB4MDIsMHg4MSwweDIyLDB4MjIsMHg0MCwweDA4LDB4MTAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZjFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQyLDB4ZGEsMHgwMSwweDMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZjIwMCwgMCwgezB4MGYsMHg4NSwweDAzLDB4YTEsMHg0MCwweGMwLDB4NTAsMHgzYSwweDAxLDB4OGIsMHg4NSwweDIzLDB4YTEsMHg0NCwweGU4LDB4NTAgfSB9LAoreyAgMTYsIDB4ZjIxMCwgMCwgezB4YjIsMHgwMCwweDBmLDB4ODUsMHgwMywweDIxLDB4NDgsMHhkOCwweDUxLDB4MzIsMHgxNCwweDJjLDB4ODUsMHgwMywweGVlLDB4MDMgfSB9LAoreyAgMTYsIDB4ZjIyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhmNSwweDAwLDB4ZWQsMHgwMiwweDNlLDB4NDQgfSB9LAoreyAgMTYsIDB4ZjIzMCwgMCwgezB4MGYsMHg5MSwweDAzLDB4ZjQsMHg0MCwweGY5LDB4MTAsMHgzZSwweDQ0LDB4MGYsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGZkLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjI0MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4ZDAsMHgwMywweGY0LDB4MDAsMHhlOSwweDEwLDB4YmYsMHg0MCwweDBmLDB4OTAsMHgwMywweDY2LDB4MDYgfSB9LAoreyAgMTYsIDB4ZjI1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNiwweDIxLDB4YzUsMHgwMCwweDMzLDB4NjggfSB9LAoreyAgMTYsIDB4ZjI2MCwgMCwgezB4MGYsMHg5YSwweDAzLDB4NmYsMHg4OCwweGM5LDB4YzAsMHgzMywweDY4LDB4MGMsMHg5ZSwweDAzLDB4MjcsMHg4MCwweGQ5LDB4NDAgfSB9LAoreyAgMTYsIDB4ZjI3MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGM1LDB4MTAsMHhkOSwweGU4LDB4MzYsMHg1MCwweDBjLDB4ZDAsMHgwMywweGU2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjI4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMSwweDA4LDB4ODgsMHgwMCwweDgyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjI5MCwgMCwgezB4MGIsMHg4ZSwweDgyLDB4ZWIsMHhjOCwweDg4LDB4ZTAsMHgyMiwweDAwLDB4MjgsMHg4OCwweDQyLDB4YTIsMHg4MCwweDhhLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjJhMCwgMCwgezB4MjIsMHgwMCwweDBiLDB4YWEsMHgwMiwweGUyLDB4MDAsMHg4OCwweGMwLDB4MjIsMHhhOSwweDA4LDB4OGEsMHgwMywweDhlLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjJiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDUsMHhjNCwweDAwLDB4ODEsMHgwMCwweDIwLDB4ZDAgfSB9LAoreyAgMTYsIDB4ZjJjMCwgMCwgezB4MGIsMHgxMSwweDMyLDB4ODQsMHg4NCwweDgxLDB4NjAsMHg2MCwweDUwLDB4MDgsMHgxNiwweDA2LDB4MDUsMHgwMCwweDkxLDB4MjAgfSB9LAoreyAgMTYsIDB4ZjJkMCwgMCwgezB4MjAsMHg0MCwweDBiLDB4MTAsMHg4MiwweGU0LDB4MDksMHg5MSwweDIwLDB4MjQsMHg0MCwweDA4LDB4MTAsMHhjMiwweGQyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZjJlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNCwweDA0LDB4ODksMHgwNCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZjJmMCwgMCwgezB4MGIsMHg5MCwweDAyLDB4YzQsMHgwMCwweGE5LDB4MDAsMHgyMiwweDQxLDB4MDAsMHg5MCwweDAyLDB4YTQsMHgwMCwweDgxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjMwMCwgMCwgezB4MjIsMHg0MCwweDBiLDB4OTIsMHgyMiwweGU1LDB4ODAsMHg5OSwweDAxLDB4MjIsMHg2MSwweDA4LDB4OTAsMHgwMiwweDg2LDB4MDQgfSB9LAoreyAgMTYsIDB4ZjMxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTQsMHhhNSwweDgyLDB4ODEsMHg5MCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZjMyMCwgMCwgezB4MGYsMHg5MCwweDEzLDB4NjcsMHgwMiwweGM5LDB4MDAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDIzLDB4MjQsMHgwNCwweGQ5LDB4YzAgfSB9LAoreyAgMTYsIDB4ZjMzMCwgMCwgezB4YjIsMHg0MCwweDBmLDB4OWMsMHgwMywweGU2LDB4MDAsMHhkOSwweDAwLDB4MzYsMHg1MCwweDBjLDB4OTAsMHgwMywweGU4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZjM0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MDAsMHhhNiwweDgwLDB4ZjksMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ZjM1MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZTcsMHgwMCwweGQ5LDB4MDAsMHhiYywweDQyLDB4MGYsMHg5MCwweDUzLDB4ZTQsMHgwNCwweGY5LDB4MTAgfSB9LAoreyAgMTYsIDB4ZjM2MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTgsMHgwMywweGU2LDB4MDQsMHhlMSwweDAwLDB4M2UsMHg0MCwweDJmLDB4OTAsMHgwMywweGRhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjM3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHg4MSwweDEwLDB4NDgsMHgxMCwweDMyLDB4MDggfSB9LAoreyAgMTYsIDB4ZjM4MCwgMCwgezB4MGMsMHg4MCwweDBmLDB4MjEsMHgwMiwweGM4LDB4MDAsMHgzYSwweDA0LDB4MGYsMHg4MCwweDA3LDB4NjAsMHgwMCwweGY4LDB4NDAgfSB9LAoreyAgMTYsIDB4ZjM5MCwgMCwgezB4YjIsMHgwMCwweDBmLDB4ODQsMHgwYiwweDIwLDB4MDAsMHhkOCwweDAwLDB4MzYsMHgxMCwweDBjLDB4ODAsMHgwMywweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjNhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDQsMHgyOCwweDA0LDB4OGUsMHg4MCwweDIzLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjNiMCwgMCwgezB4MDgsMHhhMCwweDQyLDB4MjgsMHgwMCwweDhhLDB4MDAsMHgyMywweGEwLDB4NGIsMHhhMCwweDAyLDB4ZTgsMHgwMCwweGJhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjNjMCwgMCwgezB4NzYsMHg4MCwweDBiLDB4YTAsMHgwMiwweDA4LDB4MDAsMHg4YSwweDAwLDB4MzIsMHg4MCwweDA4LDB4ZTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjNkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4ODIsMHgwMCwweDIwLDB4ZDAgfSB9LAoreyAgMTYsIDB4ZjNlMCwgMCwgezB4MDgsMHgzMCwweDAyLDB4MGMsMHgwMCwweDliLDB4MDAsMHgyOCwweGMwLDB4MWEsMHhiMCwweDAyLDB4NmMsMHgwMCwweGIzLDB4MDIgfSB9LAoreyAgMTYsIDB4ZjNmMCwgMCwgezB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBjLDB4MDAsMHhhMywweDAwLDB4MjIsMHhjMCwweDI4LDB4MzQsMHg4MiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjQwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxYywweDAwLDB4ODcsMHgwMCwweDIwLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZjQxMCwgMCwgezB4MDgsMHg3OCwweDAyLDB4MGMsMHgwMCwweDk3LDB4MjAsMHgyNSwweGMwLDB4MGIsMHg3MSwweDAyLDB4ZGMsMHg4MSwweGI3LDB4MjAgfSB9LAoreyAgMTYsIDB4ZjQyMCwgMCwgezB4MjEsMHhjMCwweDBiLDB4N2EsMHg0MiwweDNjLDB4ODAsMHg4NywweDIwLDB4MjEsMHhjMCwweDA4LDB4NzAsMHgwMiwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjQzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDgsMHgwZSwweDgyLDB4YzcsMHg4MCwweGIxLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZjQ0MCwgMCwgezB4MmMsMHhmYSwweDA2LDB4MWUsMHgwOCwweGQzLDB4YjEsMHgzOSwweDYwLDB4NGUsMHg3OCwweDEyLDB4NWUsMHhhMCwweGZmLDB4ZjAgfSB9LAoreyAgMTYsIDB4ZjQ1MCwgMCwgezB4MjEsMHhlMCwweDBmLDB4ZjgsMHgwMywweDFmLDB4MDgsMHhlMywweGEwLDB4MzMsMHhlMCwweDBjLDB4NjgsMHgwMywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4ZjQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhYywweDQwLDB4ZmIsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4ZjQ3MCwgMCwgezB4MGYsMHhiMiwweDAzLDB4ZWQsMHhhOCwweGViLDB4MTAsMHgzYSwweDgwLDB4MGYsMHhiMCwweGMzLDB4ZWMsMHg0MCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjQ4MCwgMCwgezB4M2UsMHhjMCwweDBmLDB4YjAsMHg4MywweGVjLDB4ODAsMHhlYiwweDcwLDB4YmUsMHhjNCwweDBmLDB4YjAsMHgwMywweDgyLDB4MDYgfSB9LAoreyAgMTYsIDB4ZjQ5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhmZSwweDAwLDB4Y2UsMHg4MCwweGIzLDB4NjAgfSB9LAoreyAgMTYsIDB4ZjRhMCwgMCwgezB4MGYsMHhmYywweDgzLDB4N2UsMHgyMCwweGVmLDB4YjAsMHgzYiwweGUwLDB4MGYsMHhiOCwweDAzLDB4M2UsMHgwMCwweGNmLDB4ODEgfSB9LAoreyAgMTYsIDB4ZjRiMCwgMCwgezB4M2YsMHhlMCwweDhmLDB4ZjgsMHg4MywweGVmLDB4NDAsMHhmZiwweGMyLDB4MzMsMHhlMSwweDBjLDB4ZjgsMHgwMywweGQwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjRjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDgyLDB4ODcsMHgxOCwweDIxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjRkMCwgMCwgezB4MGIsMHgzMCwweDAyLDB4MWMsMHg2MCwweGQ3LDB4MTAsMHgyMSwweGQwLDB4MGIsMHg3YiwweDAyLDB4M2MsMHgwMCwweGQ3LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjRlMCwgMCwgezB4MmQsMHhjMCwweDBiLDB4NzAsMHgwMiwweGRlLDB4MDAsMHhiZiwweDAwLDB4YTMsMHhjNCwweDA4LDB4NzAsMHgwMywweGFhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjRmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiYywweDExLDB4ODcsMHgwMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4ZjUwMCwgMCwgezB4MGIsMHgzMCwweDAyLDB4MWMsMHgwMCwweDkzLDB4MjAsMHg2OSwweGMwLDB4MGIsMHg3MCwweDAyLDB4MWMsMHgwMCwweDg3LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjUxMCwgMCwgezB4MmQsMHhjMCwweDBiLDB4NzEsMHgwMiwweGRjLDB4MjAsMHhiNywweDEwLDB4MjEsMHhjMCwweDA4LDB4NjAsMHgwMiwweDg0LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjUyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MTQsMHhjZCwweDAwLDB4ODMsMHg0MCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4ZjUzMCwgMCwgezB4NGIsMHgzMCwweDAyLDB4MGMsMHgwMSwweDgzLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgzMCwweDAyLDB4MGMsMHgwMCwweDkzLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjU0MCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDEsMHhiMywweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgyMiwweDk4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZjU1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiZiwweDIwLDB4Y2EsMHhjMCwweDMyLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjU2MCwgMCwgezB4MGYsMHhmMCwweDAzLDB4M2UsMHgwMCwweDlmLDB4MDAsMHgzYSwweDgwLDB4MGYsMHhmMCwweDBiLDB4M2MsMHgwMCwweGNmLDB4OTggfSB9LAoreyAgMTYsIDB4ZjU3MCwgMCwgezB4M2UsMHhjMCwweDBmLDB4ZjYsMHgwMywweGZmLDB4MDAsMHhmZiwweDAwLDB4MzEsMHhlMCwweDJjLDB4YjAsMHgwMywweGFlLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjU4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhjYywweDgwLDB4ZmIsMHgwMCwweDNlLDB4NTAgfSB9LAoreyAgMTYsIDB4ZjU5MCwgMCwgezB4MGYsMHhiMCwweDAzLDB4YWMsMHgwMiwweGZiLDB4MDAsMHg3ZSwweDUwLDB4MGYsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjVhMCwgMCwgezB4M2UsMHhjMCwweDBmLDB4YjIsMHgwMywweGVjLDB4MjAsMHhmMywweDAwLDB4M2UsMHhjNiwweDBmLDB4OTAsMHgwMywweGEwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjViMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAyLDB4Y2YsMHg5OCwweDczLDB4YzggfSB9LAoreyAgMTYsIDB4ZjVjMCwgMCwgezB4MGYsMHg3MCwweDAzLDB4M2MsMHgwMCwweGZmLDB4MDAsMHgzMywweDI4LDB4MGYsMHhiMCwweDAyLDB4MWMsMHgwMCwweDRmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjVkMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZiwweDAxLDB4MzMsMHhjMCwweDBjLDB4ZTQsMHgwMywweGU0LDB4MDQgfSB9LAoreyAgMTYsIDB4ZjVlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2YywweDAwLDB4ODMsMHg4MCwweGEyLDB4ZjggfSB9LAoreyAgMTYsIDB4ZjVmMCwgMCwgezB4MGIsMHhiMCwweDQyLDB4MmMsMHgwMCwweGJiLDB4MDAsMHgzMiwweDEwLDB4MGYsMHhiMCwweDAzLDB4NmMsMHgwNCwweGFiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjYwMCwgMCwgezB4MmUsMHhjMCwweDBiLDB4YjAsMHgxMiwweGVjLDB4MDQsMHhlYiwweDAwLDB4MjIsMHhjMCwweDRhLDB4OTQsMHg4MiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjYxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHg2YywweDAwLDB4OGEsMHgwMCwweDIyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjYyMCwgMCwgezB4MGIsMHhiMCwweDAyLDB4MmMsMHgwMCwweGIzLDB4MDAsMHhhMiwweGMwLDB4MGIsMHgzMCwweDAyLDB4YWMsMHgwMCwweGFiLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjYzMCwgMCwgezB4MmUsMHhjMCwweDBiLDB4YjAsMHg0MiwweGVjLDB4MDAsMHhiYiwweDAwLDB4MjIsMHhjMCwweDA4LDB4YjAsMHgyMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjY0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwYywweDAwLDB4OGIsMHgwMSwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjY1MCwgMCwgezB4MGIsMHgzMCwweDA2LDB4MGMsMHgwMCwweGIzLDB4MDAsMHgyMCwweGMwLDB4MGEsMHgzMiwweDBhLDB4Y2MsMHgwMCwweGEzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjY2MCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHhhMywweDAwLDB4MjIsMHhjMCwweDRhLDB4MDAsMHgxMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZjY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHg2YywweDAwLDB4OGIsMHgwNCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4ZjY4MCwgMCwgezB4MGYsMHhmMSwweDAzLDB4MWMsMHgwMCwweGZmLDB4MDQsMHgzMiwweGMwLDB4MGIsMHhmMiwweDAzLDB4YmMsMHgwMCwweGVmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjY5MCwgMCwgezB4M2UsMHhjMCwweDA3LDB4ZjAsMHgwMywweGZjLDB4ODAsMHhmZiwweDAwLDB4YjIsMHhjMCwweDBjLDB4YTAsMHgwMywweGUwLDB4MDMgfSB9LAoreyAgMTYsIDB4ZjZhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTksMHhkYywweDAwLDB4ZjUsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4ZjZiMCwgMCwgezB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwMSwweGZmLDB4MDIsMHgzYiwweGMwLDB4MGYsMHhmMSwweDAzLDB4N2MsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjZjMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZjAsMHgxMywweGZjLDB4NDAsMHhlZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4YzAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4ZjZkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhmMiwweDQwLDB4Y2MsMHg4MCwweDM3LDB4MjAgfSB9LAoreyAgMTYsIDB4ZjZlMCwgMCwgezB4MGMsMHhkOCwweDAzLDB4YjAsMHg0NCwweGZjLDB4MDgsMHgzZiwweDBlLDB4MGYsMHhjMSwweDAzLDB4ZmMsMHgwMCwweGNjLDB4OTQgfSB9LAoreyAgMTYsIDB4ZjZmMCwgMCwgezB4M2YsMHgwYSwweDJlLDB4YzQsMHgwMywweDdkLDB4ODAsMHhjZiwweDEwLDB4M2YsMHhjMCwweDBmLDB4YzAsMHg4MywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjcwMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDgsMHhlMCwweDkwLDB4ODgsMHgwMiwweDIyLDB4ODEgfSB9LAoreyAgMTYsIDB4ZjcxMCwgMCwgezB4MDgsMHg5MiwweDEzLDB4YTQsMHg0MCwweDNiLDB4NjAsMHgyMiwweDE4LDB4MGIsMHg4MSwweDAyLDB4ZmMsMHhkNCwweDgxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjcyMCwgMCwgezB4M2EsMHhiMCwweDBhLDB4OTQsMHgwMiwweDNkLDB4NDAsMHhhZiwweDYzLDB4MmYsMHhkZiwweDBiLDB4OTgsMHgwMCwweDIwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjczMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhlMCwweDAwLDB4ODgsMHgwMCwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4Zjc0MCwgMCwgezB4ODgsMHgzMCwweDgyLDB4YzAsMHgwMCwweGIwLDB4MDgsMHgyOCwweDgwLDB4MGEsMHgxMCwweDAyLDB4Y2MsMHgyMCwweDgwLDB4MDEgfSB9LAoreyAgMTYsIDB4Zjc1MCwgMCwgezB4MmMsMHg0MCwweDFiLDB4MDYsMHgwMiwweDhjLDB4OTAsMHg5MywweDYwLDB4NjgsMHhjMCwweDRhLDB4MDAsMHg0MiwweDIyLDB4MDEgfSB9LAoreyAgMTYsIDB4Zjc2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhhMCwweDAyLDB4ODgsMHgwMCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4Zjc3MCwgMCwgezB4MDgsMHhiMCwweDAyLDB4ZTQsMHgyMCwweGJiLDB4ODgsMHgyNiwweDk4LDB4MGIsMHg4MCwweDQyLDB4Y2MsMHgxOCwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjc4MCwgMCwgezB4MmUsMHhjMiwweDFiLDB4OTgsMHgwMiwweGFjLDB4MDAsMHhhYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4OTgsMHg4MiwweDMwLDB4MDQgfSB9LAoreyAgMTYsIDB4Zjc5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTEsMHhlMywweGMwLDB4Y2IsMHgwMiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjdhMCwgMCwgezB4MmMsMHg4MCwweDAzLDB4YWUsMHgwOCwweGI5LDB4MDAsMHgzZSwweDcwLDB4MGYsMHhiOSwweDAzLDB4ZWMsMHgwMiwweDQ4LDB4NDggfSB9LAoreyAgMTYsIDB4ZjdiMCwgMCwgezB4M2MsMHhjMCwweDBmLDB4OGMsMHg5MywweGVjLDB4MDAsMHhkYiwweDAwLDB4MWEsMHhjMCwweDBlLDB4YWMsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjdjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiMiwweDAwLDB4ZmYsMHgwMCwweGJiLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjdkMCwgMCwgezB4MGYsMHhjMCwweDQzLDB4YjYsMHg0MCwweGJkLDB4MDAsMHgzYiwweDYwLDB4MGYsMHhlOCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4OTQgfSB9LAoreyAgMTYsIDB4ZjdlMCwgMCwgezB4M2IsMHhlNCwweDBlLDB4NjAsMHgwZiwweDZjLDB4MDgsMHhlZiwweDAxLDB4M2YsMHhjMCwweDBmLDB4NjAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjdmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhMSwweDAwLDB4ZmIsMHgwMCwweDNlLDB4NjAgfSB9LAoreyAgMTYsIDB4ZjgwMCwgMCwgezB4MGYsMHhhMCwweDAzLDB4ZWQsMHgwMCwweGY5LDB4NDAsMHgzYSwweDAwLDB4MGYsMHg5MCwweDAzLDB4ZWMsMHgwMiwweGM5LDB4MDQgfSB9LAoreyAgMTYsIDB4ZjgxMCwgMCwgezB4MzIsMHhkMCwweDBmLDB4OTAsMHgwMywweDJjLDB4MDgsMHhkYiwweDAwLDB4YjYsMHhjMCwweDBkLDB4YjQsMHgwMywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjgyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgwMCwweDAwLDB4YjMsMHg4OSwweDJlLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZjgzMCwgMCwgezB4MGIsMHhhNCwweDAzLDB4YTQsMHgwMSwweGI5LDB4MDAsMHgyZSwweDAxLDB4MGIsMHg5MCwweDQyLDB4ZmMsMHgxMCwweDg5LDB4NTAgfSB9LAoreyAgMTYsIDB4Zjg0MCwgMCwgezB4YTIsMHhjMCwweDhkLDB4YjQsMHgwMiwweDNjLDB4NDQsMHg4ZiwweDAwLDB4MjMsMHhjMCwweDA4LDB4YjAsMHgwMiwweGYyLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjg1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDQsMHgwYywweDAwLDB4YjAsMHg4MCwweDJlLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjg2MCwgMCwgezB4MGIsMHgxMiwweDAyLDB4YzgsMHgwMCwweGJhLDB4MDAsMHgyYywweGMwLDB4MGIsMHgyMCwweDAyLDB4Y2MsMHgwMCwweGEyLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjg3MCwgMCwgezB4MjAsMHgwMCwweDJiLDB4MmQsMHg5YSwweDJlLDB4NDIsMHg4MywweDAwLDB4MjgsMHhjMCwweDA4LDB4MjAsMHgwMiwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4Zjg4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgxZSwweDA0LDB4YjQsMHg4MCwweDJkLDB4YTAgfSB9LAoreyAgMTYsIDB4Zjg5MCwgMCwgezB4MGIsMHg1OCwweDAyLDB4OTIsMHgwMCwweGI2LDB4ODAsMHgyZCwweGUwLDB4MGIsMHg2OCwweDAyLDB4ZGUsMHg0MCwweGE2LDB4ODAgfSB9LAoreyAgMTYsIDB4ZjhhMCwgMCwgezB4MjEsMHgyNCwweDI5LDB4NDgsMHgwMiwweDFlLDB4ODAsMHg4NywweDgwLDB4NjksMHhlMCwweDA4LDB4NjEsMHgwMiwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjhiMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTgsMHgwYywweDAwLDB4ZjAsMHgzMCwweDNjLDB4NGMgfSB9LAoreyAgMTYsIDB4ZjhjMCwgMCwgezB4MGYsMHgzMiwweDAzLDB4YzgsMHg4MCwweGIyLDB4MDAsMHgzOCwweDgwLDB4MGYsMHgxYiwweDAzLDB4ZWMsMHgwMCwweGUwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZjhkMCwgMCwgezB4MzAsMHgwNCwweDBmLDB4YjEsMHgwMywweDBlLDB4ODUsMHhjYiwweDAwLDB4M2EsMHhjMCwweDBjLDB4MzEsMHgwMywweGQyLDB4MDIgfSB9LAoreyAgMTYsIDB4ZjhlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWMsMHhiYywweDAwLDB4ZmMsMHgxMSwweDNmLDB4YzQgfSB9LAoreyAgMTYsIDB4ZjhmMCwgMCwgezB4MGYsMHhiOCwweDEzLDB4YjAsMHgwNCwweGZlLDB4MDIsMHgzZiwweDgwLDB4MGYsMHhjMCwweDAzLDB4ZmQsMHgwMCwweGRmLDB4MTIgfSB9LAoreyAgMTYsIDB4ZjkwMCwgMCwgezB4MWQsMHgwNCwweDBmLDB4ZDAsMHg0MywweGJjLDB4MDEsMHhlZiwweDEwLDB4MzMsMHhjNCwweDBlLDB4ZjMsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4ZjkxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhlZSwweDAwLDB4Y2IsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjkyMCwgMCwgezB4MGYsMHg4MCwweDAzLDB4MjgsMHgwMCwweGY4LDB4MDAsMHgzZSwweDQwLDB4M2QsMHhiMCwweDAzLDB4ZWYsMHgwOCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZjkzMCwgMCwgezB4M2EsMHgwMCwweDBjLDB4YTAsMHgwMywweGVjLDB4OTgsMHhmYiwweDIwLDB4MzIsMHhkMiwweDBjLDB4YTgsMHgwMywweDJhLDB4MDIgfSB9LAoreyAgMTYsIDB4Zjk0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDAwLDB4ODcsMHgwMSwweDJkLDB4ODAgfSB9LAoreyAgMTYsIDB4Zjk1MCwgMCwgezB4MGIsMHg0MCwweDQyLDB4MWMsMHgwNCwweDM3LDB4MDAsMHhhMSwweDQwLDB4MDgsMHg2MCwweDAyLDB4Y2MsMHg4MCwweDg3LDB4MDAgfSB9LAoreyAgMTYsIDB4Zjk2MCwgMCwgezB4MmQsMHg4MCwweDJlLDB4NzAsMHgwMiwweGRjLDB4YTksMHhiNywweDI4LDB4MjEsMHhkMCwweDA4LDB4NzAsMHgwMiwweDEyLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjk3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHhiZSwweDAyLDB4ODcsMHg4MCwweDJkLDB4NjAgfSB9LAoreyAgMTYsIDB4Zjk4MCwgMCwgezB4NGIsMHhlOCwweDAyLDB4NWEsMHgwMSwweGI0LDB4ODgsMHgyOCwweGUwLDB4ODgsMHg3OCwweGMyLDB4ZGUsMHg1MiwweDg2LDB4YzAgfSB9LAoreyAgMTYsIDB4Zjk5MCwgMCwgezB4MjksMHg2MCwweDA4LDB4NjgsMHgwMiwweGRlLDB4NDAsMHhiMywweDkyLDB4ZTEsMHhlOCwweDI4LDB4MjgsMHgwMiwweDcwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjlhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MTQsMHhjYywweDAwLDB4OGIsMHg4MCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4ZjliMCwgMCwgezB4MGIsMHgyMCwweDAyLDB4NGQsMHg4MCwweDliLDB4MjAsMHgyMCwweGUwLDB4MDgsMHgzOCwweDAyLDB4Y2MsMHgwMCwweDgzLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjljMCwgMCwgezB4MmMsMHhjMCwweDBhLDB4YjAsMHgwMiwweGNjLDB4MDgsMHhiMywweDAwLDB4MjAsMHhjMCwweDA4LDB4MzEsMHgwMiwweDUyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjlkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MDUsMHhhOCwweDAwLDB4Y2EsMHhlMCwweDNlLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjllMCwgMCwgezB4MWYsMHhhNCwweDBiLDB4NzksMHgwMCwweGZlLDB4MDAsMHgzZiwweDgyLDB4MWQsMHhlMCwweDAzLDB4ZTgsMHgwMCwweGNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ZjlmMCwgMCwgezB4M2IsMHg4OCwweDJjLDB4ZTQsMHgwMywweGU4LDB4MDEsMHhmYSwweDAwLDB4MzIsMHg4MCwweDBjLDB4ZTgsMHgwMywweDdhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZmEwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHhhMCwweDAwLDB4ZjgsMHgwOSwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmExMCwgMCwgezB4OGYsMHhjMCwweDgzLDB4YTAsMHgxOCwweGY4LDB4MDAsMHgzYywweDIwLDB4MGYsMHg4OCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDggfSB9LAoreyAgMTYsIDB4ZmEyMCwgMCwgezB4M2UsMHgyMCwweDBlLDB4ODAsMHg4MywweGUxLDB4MDEsMHhmMCwweDAwLDB4M2MsMHgwMCwweDBmLDB4ODAsMHgwYiwweDkyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmEzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhhNCwweDAwLDB4ZjksMHg0MiwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZmE0MCwgMCwgezB4NGMsMHg5OCwweDAzLDB4MDQsMHgwMCwweGM5LDB4MDAsMHgzYSwweDQwLDB4MGYsMHg5MCwweDIzLDB4MjQsMHgwMCwweGI5LDB4ODEgfSB9LAoreyAgMTYsIDB4ZmE1MCwgMCwgezB4M2MsMHg0MCwweDBjLDB4OTIsMHgwMywweDI0LDB4MDAsMHhmOSwweDA1LDB4MzIsMHg0MCwweDZjLDB4OTAsMHhjMywweGMyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZmE2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHgyNCwweDE0LDB4YjksMHgwMCwweGEyLDB4NTQgfSB9LAoreyAgMTYsIDB4ZmE3MCwgMCwgezB4MDgsMHg5YiwweDFhLDB4MjQsMHgwMiwweDg5LDB4MDAsMHgyMiwweDQwLDB4MjgsMHg5MCwweDAyLDB4YTQsMHgwMCwweGI5LDB4OTAgfSB9LAoreyAgMTYsIDB4ZmE4MCwgMCwgezB4MmUsMHg0MCwweDI4LDB4OWMsMHg4MiwweDI1LDB4MDQsMHhiOSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTgsMHgxMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmE5MCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YWQsMHgwMCwweDIzLDB4NDAgfSB9LAoreyAgMTYsIDB4ZmFhMCwgMCwgezB4MDgsMHg1MCwweDAyLDB4NjQsMHgwMCwweDg5LDB4MDAsMHgyYSwweDQwLDB4MDgsMHgxMCwweDAyLDB4NjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZmFiMCwgMCwgezB4NmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI1LDB4MDAsMHhhOSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTEsMHgwNiwweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZmFjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgxNCwweDAwLDB4YjUsMHgxMCwweGExLDB4NDQgfSB9LAoreyAgMTYsIDB4ZmFkMCwgMCwgezB4MjgsMHg1MCwweDAyLDB4NDQsMHg4MCwweDgxLDB4MzAsMHgyMCwweDQ4LDB4MDgsMHgxMiwweDAyLDB4ODQsMHg0MCwweGIxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZmFlMCwgMCwgezB4NmMsMHhjOCwweDA4LDB4MTIsMHgwMiwweDA0LDB4ODAsMHhiMSwweDM0LDB4MjAsMHg0OCwweDA4LDB4MTIsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZmFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZTgsMHg0MCwweDMyLDB4OTAgfSB9LAoreyAgMTYsIDB4ZmIwMCwgMCwgezB4MGMsMHhjNSwweDAzLDB4NjEsMHg0MCwweGMwLDB4NDAsMHgzYSwweDE0LDB4MGYsMHg4NSwweDAzLDB4MjEsMHhiMCwweGY4LDB4NTAgfSB9LAoreyAgMTYsIDB4ZmIxMCwgMCwgezB4M2UsMHgwMCwweDBjLDB4ODUsMHgwMywweDIxLDB4NDAsMHhmOCwweDQwLDB4YjAsMHgxNCwweDBjLDB4ODAsMHgwMywweGVlLDB4MDEgfSB9LAoreyAgMTYsIDB4ZmIyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MWQsMHhjNCwweDA0LDB4ZjksMHgyMiwweDBlLDB4NDggfSB9LAoreyAgMTYsIDB4ZmIzMCwgMCwgezB4MGYsMHgxMCwweDEzLDB4YjQsMHg0MCwweGZkLDB4MzAsMHgzZiwweDQ0LDB4NGYsMHhkMSwweDAwLDB4ZTQsMHg4NCwweGZmLDB4MDEgfSB9LAoreyAgMTYsIDB4ZmI0MCwgMCwgezB4M2QsMHg0NCwweDBmLDB4ZDEsMHgwYiwweGU0LDB4NDAsMHhmOSwweDMwLDB4M2UsMHg0NCwweDBmLDB4ZDEsMHgwMywweGU2LDB4MDQgfSB9LAoreyAgMTYsIDB4ZmI1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MDUsMHhlNCwweDAwLDB4ZGQsMHg0MCwweDNmLDB4NTAgfSB9LAoreyAgMTYsIDB4ZmI2MCwgMCwgezB4MGMsMHhkMCwweDAzLDB4MmMsMHgwMCwweGM5LDB4MDAsMHgzNiwweDQwLDB4MGYsMHg5MCwweDEzLDB4MjcsMHgwNCwweGY1LDB4MDEgfSB9LAoreyAgMTYsIDB4ZmI3MCwgMCwgezB4MzcsMHg0MCwweDBjLDB4ZjAsMHgwMywweGY2LDB4MjAsMHhmOSwweGE4LDB4MzIsMHg2OCwweDBjLDB4ZDAsMHgwMywweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZmI4MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDAsMHhlMCwweDAwLDB4ODgsMHhhMCwweDJlLDB4MjggfSB9LAoreyAgMTYsIDB4ZmI5MCwgMCwgezB4MjgsMHg4MCwweDAyLDB4MjAsMHgwMCwweDg4LDB4YTAsMHgyMiwweDAwLDB4MGIsMHg4MCwweDBhLDB4NjIsMHg4MCwweGI4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZmJhMCwgMCwgezB4MjIsMHgwMCwweDA4LDB4ODAsMHgwMiwweGUxLDB4MDAsMHhiOCwweGUwLDB4MjIsMHgzYSwweDA4LDB4YTAsMHgwMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4ZmJiMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHg4NCwweDAyLDB4ODEsMHgwMCwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4ZmJjMCwgMCwgezB4MDgsMHgxMCwweDBhLDB4NDQsMHgwMiwweDgxLDB4MDgsMHgyNCwweDQwLDB4MGEsMHgxMCwweDAyLDB4NDUsMHg4MCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZmJkMCwgMCwgezB4MjQsMHg0MCwweDI5LDB4MTAsMHgwMiwweGM0LDB4MDAsMHhiMSwweDA4LDB4MjQsMHg0NCwweDA4LDB4MTAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZmJlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTQsMHhhNCwweDA0LDB4ODksMHgwMSwweDJlLDB4NTAgfSB9LAoreyAgMTYsIDB4ZmJmMCwgMCwgezB4NDgsMHhiMiwweDAyLDB4NjQsMHgwMCwweDkxLDB4MDAsMHgyMiwweDQ2LDB4MGIsMHg5MCwweDAyLDB4NjQsMHgwMCwweGI5LDB4MDEgfSB9LAoreyAgMTYsIDB4ZmMwMCwgMCwgezB4MjYsMHhjMCwweDA5LDB4YjAsMHgxMiwweGU0LDB4MDAsMHhiMSwweDAwLDB4MjYsMHg0MCwweDA4LDB4OTAsMHgwMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4ZmMxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDQsMHhlNCwweDAwLDB4YzksMHgwMCwweDNjLDB4NDAgfSB9LAoreyAgMTYsIDB4ZmMyMCwgMCwgezB4MGMsMHg5MCwweDAzLDB4NjQsMHgwMCwweGM5LDB4MDIsMHgzNiwweDUwLDB4MGUsMHg5MywweDAzLDB4MjQsMHgwMCwweGY5LDB4OTAgfSB9LAoreyAgMTYsIDB4ZmMzMCwgMCwgezB4MzYsMHg0OCwweDBkLDB4OTQsMHg4MywweGU0LDB4MDgsMHhmOSwweDAwLDB4YjYsMHg0MCwweDBjLDB4OTQsMHgwMywweGU4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZmM0MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MTAsMHhhNCwweDAwLDB4ZTksMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ZmM1MCwgMCwgezB4MGYsMHg5MCwweDEzLDB4YTQsMHgwMCwweGU5LDB4MDIsMHgyZSwweDYxLDB4MDUsMHg5MCwweDAzLDB4YTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZmM2MCwgMCwgezB4M2EsMHg0MCwweDBlLDB4OTAsMHg0MywweGU0LDB4MTAsMHhmOSwweDAwLDB4MzgsMHg0MCwweDJmLDB4OTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmM3MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZDgsMHgwMSwweDMyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZmM4MCwgMCwgezB4MGYsMHg4MCwweDQzLDB4YzAsMHgwMSwweGM4LDB4MDAsMHhiMiwweDAxLDB4MGMsMHg4MCwweDAzLDB4MjAsMHgwMCwweGM4LDB4NDAgfSB9LAoreyAgMTYsIDB4ZmM5MCwgMCwgezB4MzAsMHgwMCwweDhjLDB4ODQsMHg4MywweGUwLDB4MDAsMHhjOCwweDAwLDB4MzIsMHgwMCwweDZjLDB4ODQsMHgwMywweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZmNhMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgyOCwweDAwLDB4YmEsMHgwMCwweDIzLDB4ODAgfSB9LAoreyAgMTYsIDB4ZmNiMCwgMCwgezB4MGIsMHhlYSwweDAyLDB4ZTgsMHgwMCwweGFhLDB4MDAsMHgyMiwweDgwLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwMCwweDg2LDB4MjAgfSB9LAoreyAgMTYsIDB4ZmNjMCwgMCwgezB4MzcsMHhhMCwweDhkLDB4ZTQsMHgwMiwweGY4LDB4MDAsMHhkYSwweDAwLDB4MjIsMHg4MCwweDA4LDB4YTAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmNkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHg2YywweDAwLDB4YjMsMHgwMCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4ZmNlMCwgMCwgezB4MGIsMHhiOCwweDAyLDB4NGMsMHgwNCwweDgzLDB4MDAsMHgyMCwweGMwLDB4MDgsMHhiMCwweDAyLDB4MGMsMHgwMiwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmNmMCwgMCwgezB4MjAsMHg0MCwweDI4LDB4MzQsMHgwMiwweGNlLDB4OTAsMHg4MywweDAwLDB4YTAsMHhjMCwweDA4LDB4MzAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxYywweGMwLDB4YjUsMHg4OCwweDIxLDB4NDAgfSB9LAoreyAgMTYsIDB4ZmQxMCwgMCwgezB4MGIsMHg3MCwweDAyLDB4ZGMsMHg4MCwweGEzLDB4MjAsMHgyMSwweGUwLDB4NDgsMHgzMiwweDQyLDB4MGUsMHg5MCwweDhlLDB4MDEgfSB9LAoreyAgMTYsIDB4ZmQyMCwgMCwgezB4NjUsMHg1MCwweDA5LDB4NzAsMHgwMiwweGRlLDB4MjAsMHg5MywweDIxLDB4MjEsMHhjMCwweDA4LDB4NzAsMHgwMiwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQzMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTgsMHgxZSwweDAwLDB4ZmYsMHg4MCwweGIxLDB4YTAgfSB9LAoreyAgMTYsIDB4ZmQ0MCwgMCwgezB4MGYsMHg0OCwweDAyLDB4N2UsMHgwMCwweDg3LDB4YTAsMHgzMywweGUwLDB4MjgsMHg3YSwweDBiLDB4MWYsMHgwMCwweGM0LDB4ODAgfSB9LAoreyAgMTYsIDB4ZmQ1MCwgMCwgezB4MzEsMHg2MCwweDhjLDB4NTgsMHgwMywweGZlLDB4MDAsMHhjNywweGM4LDB4MzMsMHhlOCwweDBjLDB4NTgsMHgwMywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4ZmQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhYywweDAwLDB4ZmYsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQ3MCwgMCwgezB4MGYsMHg5MCwweDIzLDB4ZWMsMHhhMCwweGZiLDB4NDAsMHgzZSwweGMwLDB4OGYsMHhiNSwweDAzLDB4ZWQsMHg4MCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQ4MCwgMCwgezB4M2MsMHg0MCwweDBmLDB4YjAsMHgwMywweGU4LDB4MDAsMHhmYiwweDAyLDB4M2UsMHhkMCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4ZmQ5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MDQsMHhiZSwweDAwLDB4ZmYsMHg4MCwweDNmLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZmRhMCwgMCwgezB4MGYsMHhkOSwweDAzLDB4ZmUsMHgyMCwweGNmLDB4YzgsMHgzMywweGVhLDB4OGYsMHhmYywweDAzLDB4M2YsMHgwMCwweGZkLDB4ODAgfSB9LAoreyAgMTYsIDB4ZmRiMCwgMCwgezB4M2YsMHg2MCwweDBlLDB4ZTgsMHgwMywweGYyLDB4MDAsMHhjZiwweDgwLDB4MmYsMHhmZSwweDBjLDB4NzgsMHgwMywweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmRjMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDAsMHg5YywweDAwLDB4YjUsMHgwMiwweDJkLDB4YzAgfSB9LAoreyAgMTYsIDB4ZmRkMCwgMCwgezB4MGIsMHg1OCwweDQyLDB4ZGMsMHg4MCwweGNmLDB4MDAsMHgyMSwweGMxLDB4MGIsMHgzMCwweDEyLDB4MWMsMHg0MCwweGI0LDB4MDIgfSB9LAoreyAgMTYsIDB4ZmRlMCwgMCwgezB4MmQsMHg0NiwweDA4LDB4NzEsMHgxMiwweGM4LDB4MDAsMHhlNywweDAwLDB4MmQsMHhjNCwweDA4LDB4NzAsMHgwMywweDZhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZmRmMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4YjcsMHgwMCwweDJkLDB4MDIgfSB9LAoreyAgMTYsIDB4ZmUwMCwgMCwgezB4MGIsMHg0NiwweDAyLDB4ZGMsMHgwOCwweDk3LDB4MDAsMHgyMSwweGM5LDB4MGEsMHgzMCwweDIyLDB4MWMsMHgwMCwweGI0LDB4MDAgfSB9LAoreyAgMTYsIDB4ZmUxMCwgMCwgezB4MmQsMHg0MCwweDBhLDB4NTAsMHg4MiwweGM0LDB4MDAsMHhiNywweDAwLDB4MmMsMHhjOCwweDI4LDB4NTAsMHgwMiwweDQwLDB4MTAgfSB9LAoreyAgMTYsIDB4ZmUyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTQsMHg4YywweDE4LDB4YjMsMHgwMCwweDJlLDB4MjAgfSB9LAoreyAgMTYsIDB4ZmUzMCwgMCwgezB4MGIsMHgxOCwweDAyLDB4Y2YsMHg0YSwweDgzLDB4YzIsMHgyMCwweGMxLDB4MGIsMHgzNCwweDIyLDB4MGMsMHgwNCwweGI4LDB4NTggfSB9LAoreyAgMTYsIDB4ZmU0MCwgMCwgezB4MmMsMHg0MCwweDBiLDB4MjgsMHgwMiwweGM4LDB4MDAsMHhhMywweDAwLDB4MmMsMHhjMCwweDA4LDB4MTQsMHgwMiwweDQ4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZmU1MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhiYywweDAwLDB4ZmIsMHgwMCwweDNlLDB4ODAgfSB9LAoreyAgMTYsIDB4ZmU2MCwgMCwgezB4MGYsMHhhMCwweDAyLDB4ZmMsMHgwMCwweGRmLDB4YTAsMHhiMywweGMwLDB4MGUsMHhmMCwweDBiLDB4M2MsMHgwMCwweGZiLDB4YzAgfSB9LAoreyAgMTYsIDB4ZmU3MCwgMCwgezB4M2MsMHhhMCwweDBlLDB4YmQsMHgwMywweGVjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBjLDB4MzAsMHgwMywweDZhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZmU4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTAsMHhlYywweDAwLDB4ZjksMHgwMCwweDNlLDB4MDEgfSB9LAoreyAgMTYsIDB4ZmU5MCwgMCwgezB4OGYsMHhiMSwweDQzLDB4ZWMsMHgwMCwweGYzLDB4MDAsMHgzZSwweGMwLDB4NGYsMHhiMCwweDEzLDB4ZWMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmVhMCwgMCwgezB4M2UsMHg4MCwweDBjLDB4ODQsMHgwMywweGUxLDB4MDAsMHg3MywweDAwLDB4M2UsMHhjMSwweDBmLDB4YjIsMHg0MywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmViMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4NTAsMHhmYywweDEwLDB4ZmYsMHg4MCwweDM3LDB4YzAgfSB9LAoreyAgMTYsIDB4ZmVjMCwgMCwgezB4MGMsMHhlMCwweDAzLDB4ZmMsMHgyMCwweGZmLDB4MDgsMHgzMywweGMwLDB4MGYsMHhmMCwweDgzLDB4YmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmVkMCwgMCwgezB4MzMsMHhjMCwweDJlLDB4NDAsMHgwMywweDFjLDB4MDEsMHhjZiwweDAwLDB4MTEsMHhjMCwweDRjLDB4ZDAsMHgwMywweDAwLDB4NDQgfSB9LAoreyAgMTYsIDB4ZmVlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2YywweDA0LDB4YjMsMHgwMiwweDIyLDB4NzIgfSB9LAoreyAgMTYsIDB4ZmVmMCwgMCwgezB4MDgsMHhhMSwweDE2LDB4ZWMsMHgwMCwweGJiLDB4MDQsMHgyMiwweGMwLDB4MGIsMHhiMCwweDQyLDB4ZWMsMHgwMCwweGJhLDB4MTkgfSB9LAoreyAgMTYsIDB4ZmYwMCwgMCwgezB4YjYsMHhkMCwweDA4LDB4OWMsMHg0YSwweDI2LDB4ODAsMHhkYiwweDAwLDB4MjIsMHhjMCwweDA4LDB4OTAsMHgwMywweDYwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZmYxMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4YjksMHgxMCwweDYyLDB4MjAgfSB9LAoreyAgMTYsIDB4ZmYyMCwgMCwgezB4NDgsMHhhMCwweDAyLDB4ZWMsMHgwMCwweGJiLDB4MDAsMHgyMiwweGMwLDB4MGIsMHhiMCwweDAyLDB4ZWMsMHgxMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmYzMCwgMCwgezB4NjYsMHgwOCwweDBhLDB4YTgsMHgxMiwweDI2LDB4MTAsMHg5YiwweDAwLDB4MmEsMHhjMCwweDI4LDB4YjAsMHgyNiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmY0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwYywweDAwLDB4YjksMHgwMCwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmY1MCwgMCwgezB4MDgsMHgzMiwweDAyLDB4Y2MsMHgwNCwweGIzLDB4MDAsMHgyMCwweGMwLDB4NGIsMHgzMCwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmY2MCwgMCwgezB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAxLDB4MDAsMHg5MywweDAwLDB4MjgsMHhjMCwweDA4LDB4MzAsMHgwNiwweDQyLDB4MTEgfSB9LAoreyAgMTYsIDB4ZmY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MWMsMHg2YywweDAwLDB4ZjksMHgwMCwweGIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZmY4MCwgMCwgezB4MGMsMHg4MiwweDAyLDB4ZGMsMHgwMSwweGZmLDB4MDAsMHhiMiwweGMwLDB4MGIsMHhmMSwweDAzLDB4YmMsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZmY5MCwgMCwgezB4MjYsMHg0MCwweDJlLDB4ODAsMHgwMywweDIxLDB4MDQsMHhjZiwweDAwLDB4YmIsMHhjMCwweDBjLDB4OTAsMHgwMywweDAwLDB4MDMgfSB9LAoreyAgMTYsIDB4ZmZhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmYywweDAwLDB4ZmQsMHgwMCwweDNmLDB4NDAgfSB9LAoreyAgMTYsIDB4ZmZiMCwgMCwgezB4MGYsMHg4MSwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDIzLDB4ZmMsMHgwMCwweGZjLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmZjMCwgMCwgezB4MmQsMHg0MCwweDJmLDB4YzAsMHgwMywweGYwLDB4ODgsMHhmZiwweDAwLDB4MzcsMHhjMCwweDhmLDB4ZDAsMHgwMywweGU4LDB4MDIgfSB9LAoreyAgMTYsIDB4ZmZkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmZSwweDQwLDB4ZmYsMHg4MCwweDMzLDB4YzIgfSB9LAoreyAgMTYsIDB4ZmZlMCwgMCwgezB4MGMsMHhmOCwweDAzLDB4N2MsMHhhMCwweGZmLDB4OTAsMHgzZiwweGM0LDB4MmMsMHhiNCwweDAzLDB4YmMsMHg4MCwweGNmLDB4NDAgfSB9LAoreyAgMTYsIDB4ZmZmMCwgMCwgezB4MzcsMHhlMCwweDBmLDB4ZjEsMHg5MywweDZlLDB4NDQsMHhiZiwweDMwLDB4M2YsMHgyMCwweDJjLDB4ZjgsMHg2MywweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODAxMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlYywweDAwLDB4ZWIsMHgyMCwweDIzLDB4ZjAgfSB9LAoreyAgMTYsIDB4ODAyMCwgMCwgezB4MDgsMHhiOCwweDUyLDB4M2QsMHgwMCwweGIzLDB4MDAsMHgyZSwweGRjLDB4MDgsMHhmNCwweDQyLDB4MWMsMHg0MiwweDhiLDB4NDAgfSB9LAoreyAgMTYsIDB4ODAzMCwgMCwgezB4MjIsMHhjOCwweDBiLDB4ZjYsMHgwMywweDZjLDB4ODgsMHhiYiwweDMwLDB4MmUsMHgwMCwweDA4LDB4YjIsMHgwMiwweGUwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODA0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDAwLDB4YmIsMHgwOCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4ODA1MCwgMCwgezB4MDgsMHgzMCwweDAyLDB4NGMsMHhhMCwweGIzLDB4MjAsMHgyNiwweDgwLDB4ODgsMHgzNiwweDAyLDB4Y2MsMHhhMCwweDkzLDB4NjAgfSB9LAoreyAgMTYsIDB4ODA2MCwgMCwgezB4YTQsMHhjMiwweDBhLDB4MzIsMHg0MiwweDRjLDB4OTAsMHhiMywweDIwLDB4MmMsMHgwYiwweDg4LDB4MzAsMHg4MiwweGUyLDB4MDEgfSB9LAoreyAgMTYsIDB4ODA3MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhYywweDA4LDB4YmIsMHgyMiwweGEyLDB4YzAgfSB9LAoreyAgMTYsIDB4ODA4MCwgMCwgezB4MDgsMHhiMCwweDAyLDB4MmMsMHgwMCwweGJiLDB4MDAsMHgyZSwweDkwLDB4MDgsMHhiMCwweDAyLDB4ZWMsMHgwMCwweDliLDB4MDAgfSB9LAoreyAgMTYsIDB4ODA5MCwgMCwgezB4MjIsMHhjMCwweDBiLDB4YjAsMHgwMiwweDZjLDB4MDAsMHhiYiwweDAyLDB4MmUsMHgyMCwweDA4LDB4YjAsMHgwMiwweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4YjEsMHg4MywweDMyLDB4YzAgfSB9LAoreyAgMTYsIDB4ODBiMCwgMCwgezB4MGMsMHgxYSwweDAzLDB4NmMsMHgxMCwweGZiLDB4MDAsMHgzNCwweGMwLDB4MGMsMHhiMCwweDAzLDB4ZWMsMHgwOCwweGRhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBjMCwgMCwgezB4MzYsMHhjMCwweDBlLDB4YjAsMHgwYiwweDZjLDB4MDAsMHhmYiwweDAwLDB4M2UsMHgyOCwweDBjLDB4YjAsMHgwMiwweGQwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiYywweDAwLDB4ZWQsMHg4MCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4ODBlMCwgMCwgezB4MGYsMHhkNCwweDAzLDB4ZWMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGM4LDB4MGYsMHhiMCwweDAzLDB4M2MsMHgwMCwweGVlLDB4NDAgfSB9LAoreyAgMTYsIDB4ODBmMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4NzAsMHgwMywweGZjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHg4MCwweDBmLDB4ZjAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODEwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZmIsMHgyMCwweGIwLDB4YzAgfSB9LAoreyAgMTYsIDB4ODExMCwgMCwgezB4MGYsMHhiNCwweDAzLDB4YWMsMHgwMiwweGNiLDB4MDAsMHgzMiwweDkwLDB4MGUsMHhiMCwweDAzLDB4NmMsMHgwMCwweGViLDB4MDAgfSB9LAoreyAgMTYsIDB4ODEyMCwgMCwgezB4M2EsMHhjMCwweDBjLDB4YjAsMHgwMiwweGVjLDB4MDAsMHhmYiwweDAwLDB4M2UsMHg5MSwweDBmLDB4YjAsMHgwMywweDkwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODEzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyYywweDAwLDB4YmIsMHg4MCwweDIzLDB4ZDcgfSB9LAoreyAgMTYsIDB4ODE0MCwgMCwgezB4MGIsMHg5MCwweDAyLDB4M2MsMHgxNCwweDhiLDB4MDAsMHg2YSwweDA4LDB4MjgsMHhmMCwweDAwLDB4YmMsMHgwMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE1MCwgMCwgezB4YmUsMHhjMCwweDg4LDB4ZjAsMHgxMywweDJjLDB4MDAsMHhlZiwweDAwLDB4MmUsMHg4MCwweDBiLDB4YjAsMHgwNywweGIyLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4YjMsMHg0MCwweDIwLDB4ZDAgfSB9LAoreyAgMTYsIDB4ODE3MCwgMCwgezB4MGIsMHgyOCwweDAyLDB4OGMsMHgwMCwweDgzLDB4MDEsMHgyMCwweGMwLDB4MWEsMHhiOCwweDAwLDB4NmMsMHgxMCwweGExLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE4MCwgMCwgezB4NjgsMHhjMCwweDJhLDB4MzAsMHgwMiwweDhjLDB4MDAsMHhiMywweDAyLDB4MmUsMHgwMCwweDRiLDB4MzAsMHgwMiwweGY4LDB4MDQgfSB9LAoreyAgMTYsIDB4ODE5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxZSwweDAwLDB4YjcsMHhhMCwweDIxLDB4ZTAgfSB9LAoreyAgMTYsIDB4ODFhMCwgMCwgezB4MGIsMHhlYywweGMyLDB4MWUsMHgwNCwweDg3LDB4ODAsMHgyOSwweGU0LDB4MDgsMHg3OSwweDgyLDB4OWUsMHg0MCwweGFmLDB4OTAgfSB9LAoreyAgMTYsIDB4ODFiMCwgMCwgezB4MjksMHhlMCwweDBhLDB4MzgsMHgwMCwweDFlLDB4MDAsMHhhNywweDkwLDB4MmQsMHgyNCwweDBiLDB4NzgsMHgwMiwweDg4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODFjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDUwLDB4ZmIsMHgwOSwweDMwLDB4YzAgfSB9LAoreyAgMTYsIDB4ODFkMCwgMCwgezB4MGYsMHgyMCwweDAyLDB4OGMsMHg0MCwweGMzLDB4MDAsMHgyMCwweGMwLDB4MGEsMHgzOCwweDAzLDB4NGMsMHg0NCwweGUxLDB4MDAgfSB9LAoreyAgMTYsIDB4ODFlMCwgMCwgezB4YWEsMHhjMCwweDBlLDB4MzEsMHg0MywweDhlLDB4MDAsMHhmMywweDAwLDB4M2MsMHgwMCwweDBmLDB4MzAsMHgwMywweGQyLDB4MDIgfSB9LAoreyAgMTYsIDB4ODFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NGQsMHhiYywweDAwLDB4ZmYsMHgyMCwweDNmLDB4ZDAgfSB9LAoreyAgMTYsIDB4ODIwMCwgMCwgezB4NGYsMHg3MCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgzZCwweGMwLDB4MGYsMHhmMywweDQzLDB4ZmMsMHg0MCwweGQ3LDB4MDAgfSB9LAoreyAgMTYsIDB4ODIxMCwgMCwgezB4YmYsMHhjMCwweDBkLDB4ZjQsMHhjMywweGZjLDB4NDAsMHhmZiwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZjAsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4ODIyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDAwLDB4ZmIsMHgwMCwweDMyLDB4ZDAgfSB9LAoreyAgMTYsIDB4ODIzMCwgMCwgezB4MGQsMHg5MCwweDAxLDB4ZWQsMHhjMCwweGZiLDB4MDAsMHgzZSwweGMwLDB4MWYsMHhiYSwweDAzLDB4YWMsMHhjMCwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODI0MCwgMCwgezB4MzIsMHhlMCwweDhkLDB4YjQsMHg0MywweGVjLDB4MDAsMHhmYiwweDAwLDB4MzYsMHhhMCwweDBjLDB4YjAsMHgwMywweDZhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDAwLDB4YjcsMHgwMCwweDIxLDB4YzggfSB9LAoreyAgMTYsIDB4ODI2MCwgMCwgezB4MDgsMHg2MCwweDAyLDB4ZGMsMHgyMCwweGI3LDB4MDAsMHgyZCwweGMwLDB4MGYsMHg3NCwweGEyLDB4MWMsMHgyOCwweGQ2LDB4MDAgfSB9LAoreyAgMTYsIDB4ODI3MCwgMCwgezB4MzUsMHhjMCwweDA4LDB4NzIsMHgwMiwweDVjLDB4MDgsMHhiNywweDQ0LDB4YTEsMHg4MCwweDQ4LDB4NzAsMHgwMiwweDEyLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4YjcsMHg4MCwweDIwLDB4ZTQgfSB9LAoreyAgMTYsIDB4ODI5MCwgMCwgezB4MDksMHg3OCwweDI2LDB4ZGUsMHgwMCwweGI3LDB4ODAsMHgyZCwweGUyLDB4MGEsMHg3MCwweDEyLDB4OGMsMHg4OCwweDgxLDB4ODAgfSB9LAoreyAgMTYsIDB4ODJhMCwgMCwgezB4MjEsMHhlMCwweDA5LDB4NzgsMHgwMiwweGRlLDB4MDAsMHhiMywweGEwLDB4MjUsMHhhMCwweDI4LDB4NzgsMHgwMiwweDcwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODJiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDAxLDB4YmIsMHg4MCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4ODJjMCwgMCwgezB4MDgsMHgzMCwweDQyLDB4ZWMsMHgwMCwweGIzLDB4MDAsMHgyYywweGMwLDB4MGEsMHgzMCwweDIyLDB4MGMsMHgwMCwweDkzLDB4MDAgfSB9LAoreyAgMTYsIDB4ODJkMCwgMCwgezB4MjQsMHhjMSwweDA4LDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwLDB4MjAsMHhlMCwweDA4LDB4YjAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4ODJlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZmEsMHgwOCwweGIyLDB4ODAgfSB9LAoreyAgMTYsIDB4ODJmMCwgMCwgezB4MGQsMHhlMiwweDAzLDB4ZTgsMHgwMCwweGZhLDB4MDAsMHgzZiwweDgwLDB4MGEsMHhhMCwweDAzLDB4YTgsMHgwMCwweGNlLDB4NTAgfSB9LAoreyAgMTYsIDB4ODMwMCwgMCwgezB4MzIsMHg4MCwweDA1LDB4YTAsMHgwMywweGU4LDB4MDAsMHhmYSwweDAwLDB4MzcsMHhhOCwweDBjLDB4YTAsMHgwMywweDdhLDB4MDQgfSB9LAoreyAgMTYsIDB4ODMxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHg2MCwweDA4LDB4ZjgsMHgwMCwweDNjLDB4MDAgfSB9LAoreyAgMTYsIDB4ODMyMCwgMCwgezB4MGYsMHg4OCwweDAxLDB4ZTAsMHgwMCwweGY4LDB4MDQsMHgzYywweDAwLDB4NGYsMHgwMCwweDEzLDB4YzAsMHgwMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODMzMCwgMCwgezB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweDYwLDB4MDAsMHhmOCwweDAyLDB4M2UsMHgwMSwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4ODM0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZjksMHg5MCwweDEyLDB4NDAgfSB9LAoreyAgMTYsIDB4ODM1MCwgMCwgezB4MGMsMHg5MCwweDAzLDB4YTQsMHgwMCwweGM5LDB4MDAsMHgzZSwweDcwLDB4MGUsMHg5NCwweDMzLDB4MjQsMHgwOCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4ODM2MCwgMCwgezB4MmEsMHg0MCwweDBiLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2EsMHg0MCwweDBmLDB4OTAsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4ODM3MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4YjksMHg0MiwweDIyLDB4NjAgfSB9LAoreyAgMTYsIDB4ODM4MCwgMCwgezB4MDgsMHgxMCwweDAyLDB4MjQsMHgwMCwweDg5LDB4MDMsMHgyZSwweDQwLDB4MDgsMHg5MCwweDAyLDB4YTQsMHgwMSwweDgxLDB4MDQgfSB9LAoreyAgMTYsIDB4ODM5MCwgMCwgezB4M2UsMHg0MCwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAyLDB4MjIsMHg0MCwweDBlLDB4OTAsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODNhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjksMHg0MCwweDJhLDB4NGEgfSB9LAoreyAgMTYsIDB4ODNiMCwgMCwgezB4MDgsMHg5MSwweDAyLDB4YTQsMHgwMCwweDg5LDB4MDAsMHgyZSwweDQwLDB4MWEsMHg5MCwweDBhLDB4MjQsMHgwNCwweDg5LDB4MDAgfSB9LAoreyAgMTYsIDB4ODNjMCwgMCwgezB4MmEsMHg0MCwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiMSwweDAwLDB4MmEsMHg0MCwweDBiLDB4OTAsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4ODNkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDAwLDB4YjEsMHgwMSwweGE4LDB4NDggfSB9LAoreyAgMTYsIDB4ODNlMCwgMCwgezB4ODgsMHg5MCwweDAyLDB4MDQsMHg4MCwweDgxLDB4NDAsMHgyYywweDUwLDB4MTgsMHgxNCwweDBhLDB4ODQsMHgxMCwweDg5LDB4NDAgfSB9LAoreyAgMTYsIDB4ODNmMCwgMCwgezB4MmMsMHg0MCwweDBiLDB4MTAsMHgwMiwweGM0LDB4MDAsMHgzMSwweDIwLDB4MjAsMHg0MCwweDBhLDB4MTAsMHgwYSwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4ODQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZjAsMHg1MCwweDNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQxMCwgMCwgezB4MmMsMHhhMCwweDAyLDB4YTEsMHg0MiwweGM4LDB4MDAsMHgzZSwweDAwLDB4ZGUsMHgwMCwweDIzLDB4MjEsMHg0MiwweDg4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODQyMCwgMCwgezB4MzgsMHgxNCwweDBmLDB4ODUsMHgwMywweGUxLDB4NDAsMHhmOCwweDUwLDB4MzgsMHgxNCwweDBmLDB4MDUsMHgwMywweDJlLDB4MDEgfSB9LAoreyAgMTYsIDB4ODQzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhlNCwweDA4LDB4ZmQsMHgwMCwweDM2LDB4NDQgfSB9LAoreyAgMTYsIDB4ODQ0MCwgMCwgezB4MGYsMHhkMCwweDAzLDB4NjQsMHg0MCwweGY5LDB4MDAsMHgzZCwweDUwLDB4MGYsMHg5NCwweDAzLDB4ZTUsMHgwMCwweDdkLDB4NDAgfSB9LAoreyAgMTYsIDB4ODQ1MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTQsMHgwMywweGU0LDB4MDAsMHhmOSwweDEwLDB4M2YsMHg0MCwweDBlLDB4OTAsMHgwMywweGU2LDB4MDQgfSB9LAoreyAgMTYsIDB4ODQ2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNCwweDAwLDB4ZmQsMHg0MCwweDMzLDB4NjggfSB9LAoreyAgMTYsIDB4ODQ3MCwgMCwgezB4MGMsMHhkMCwweDAzLDB4ZTcsMHg4MSwweGY5LDB4MDAsMHgzMywweDc4LDB4MGQsMHhkOCwweDEzLDB4MjYsMHhhMCwweGNkLDB4YTAgfSB9LAoreyAgMTYsIDB4ODQ4MCwgMCwgezB4MzIsMHg0MCwweDBkLDB4OWIsMHgwMywweDI0LDB4MDAsMHhmOSwweGEwLDB4M2MsMHg0NCwweDJjLDB4OTAsMHgwNywweDg2LDB4MDAgfSB9LAoreyAgMTYsIDB4ODQ5MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMCwweDAwLDB4YjgsMHhhMCwweGEyLDB4MTAgfSB9LAoreyAgMTYsIDB4ODRhMCwgMCwgezB4MTgsMHg4MCwweDAzLDB4ODIsMHg4NCwweGI4LDB4ODAsMHgzNiwweDJjLDB4MmUsMHgwZiwweDAyLDB4YTMsMHhhMCwweGQ4LDB4ZTAgfSB9LAoreyAgMTYsIDB4ODRiMCwgMCwgezB4MzYsMHgyMiwweDhiLDB4MDgsMHgwMywweDQyLDB4YTAsMHhmOCwweGUwLDB4MmUsMHgyOCwweDA4LDB4ODgsMHgwMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4ODRjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4YjEsMHgwMCwweGEwLDB4NTAgfSB9LAoreyAgMTYsIDB4ODRkMCwgMCwgezB4MjgsMHgzMCwweDAyLDB4YzUsMHg4MCwweGIxLDB4MDgsMHgyMCwweDQwLDB4MDksMHgxMCwweGEyLDB4NDQsMHgwOCwweDgxLDB4NDggfSB9LAoreyAgMTYsIDB4ODRlMCwgMCwgezB4MjAsMHg0MCwweDBiLDB4MTQsMHgwMiwweDA0LDB4ODAsMHhiMSwweDM4LDB4MmMsMHg0OCwweDA4LDB4MTIsMHg4MiwweDgyLDB4MDEgfSB9LAoreyAgMTYsIDB4ODRmMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTEsMHhhNCwweDAwLDB4YjEsMHgwMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ODUwMCwgMCwgezB4MDgsMHg5MiwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDIsMHgyNiwweDU4LDB4NGEsMHg5MCwweDAyLDB4ZTQsMHgwOCwweDk5LDB4NDAgfSB9LAoreyAgMTYsIDB4ODUxMCwgMCwgezB4MjYsMHg0MCwweDBiLDB4OTAsMHgwMiwweDY0LDB4MDgsMHhiOSwweDAxLDB4MmMsMHg0OCwweDA4LDB4OTAsMHgxMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4ODUyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZjksMHg4MCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4ODUzMCwgMCwgezB4MDgsMHg5OCwweDgzLDB4ZTQsMHgwNCwweGI5LDB4MDEsMHgzMCwweDQwLDB4MGQsMHg5MCwweDBiLDB4NjQsMHgwMiwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4ODU0MCwgMCwgezB4MzIsMHg0MCwweDBmLDB4OTAsMHgwMywweDI0LDB4MDAsMHhmOSwweDAwLDB4MWUsMHg1OCwweDBjLDB4OTAsMHgwMywweGE4LDB4MDQgfSB9LAoreyAgMTYsIDB4ODU1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgyMCwweDNjLDB4NDAgfSB9LAoreyAgMTYsIDB4ODU2MCwgMCwgezB4MGYsMHg5OCwweDAzLDB4YTQsMHgwMCwweGI5LDB4MDAsMHgzZSwweDQyLDB4OGUsMHgxMCwweDRiLDB4ODQsMHgwNCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ODU3MCwgMCwgezB4M2UsMHg0MCwweDhmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhlOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODU4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZDgsMHgwMCwweDMyLDB4MDggfSB9LAoreyAgMTYsIDB4ODU5MCwgMCwgezB4MGYsMHg4NCwweDgzLDB4YTAsMHgwNCwweGM4LDB4MDQsMHgzZSwweDAwLDB4ODMsMHg4MCwweDAxLDB4MjAsMHgwMCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODVhMCwgMCwgezB4MzIsMHgwMCwweDBmLDB4MDAsMHgwMywweGEwLDB4MDAsMHhjOCwweDAwLDB4MzIsMHgxMCwweDRlLDB4ODAsMHgxMywweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4ODViMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDAwLDB4OGUsMHg5MCwweGEzLDB4ODAgfSB9LAoreyAgMTYsIDB4ODVjMCwgMCwgezB4MGIsMHhlNCwweDAyLDB4MjgsMHgwMCwweGNhLDB4MDAsMHgyZiwweDgwLDB4NGEsMHhhMCwweDEzLDB4YTgsMHgwMCwweGFhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODVkMCwgMCwgezB4MzYsMHg4MSwweDBiLDB4YTAsMHgwMiwweDI4LDB4MDAsMHg4YSwweDAwLDB4MjIsMHg4MCwweDA4LDB4YTAsMHgwMywweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODVlMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4OTMsMHhjMCwweDIwLDB4ZDAgfSB9LAoreyAgMTYsIDB4ODVmMCwgMCwgezB4MGIsMHgzNCwweDAyLDB4OGMsMHgwMCwweDhiLDB4MDAsMHgyYywweGYwLDB4OGIsMHgxOCwweDAyLDB4NGMsMHgwMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4ODYwMCwgMCwgezB4NjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDhjLDB4MDIsMHg4MywweDAwLDB4MjgsMHhjMSwweDBhLDB4MzAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ODYxMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxZSwweDAwLDB4YjQsMHgwYiwweDY5LDB4YzAgfSB9LAoreyAgMTYsIDB4ODYyMCwgMCwgezB4MDksMHg1OCwweDA2LDB4MWUsMHg4MCwweDk3LDB4MTAsMHgyZiwweGMyLDB4NDgsMHg3MCwweDgyLDB4OWMsMHg4MCwweGE3LDB4MDggfSB9LAoreyAgMTYsIDB4ODYzMCwgMCwgezB4MjUsMHhjYywweDBiLDB4NzAsMHgwMiwweDFlLDB4ODEsMHg4NywweGEyLDB4YWIsMHhjNCwweDA4LDB4NzMsMHgwMiwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4ODY0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgzZSwweDEwLDB4ZGMsMHg4NCwweDIxLDB4ZTAgfSB9LAoreyAgMTYsIDB4ODY1MCwgMCwgezB4MGYsMHg3OCwweDQyLDB4OWYsMHgwMiwweGM3LDB4ODgsMHgzZCwweGUwLDB4MmYsMHg3MSwweDAzLDB4NGUsMHgwMCwweGNmLDB4ODAgfSB9LAoreyAgMTYsIDB4ODY2MCwgMCwgezB4MjEsMHhlMiwweDBmLDB4NzgsMHg4MywweDllLDB4NDksMHhjZiwweGQwLDB4MzksMHhlOCwweDBlLDB4NzgsMHgwMywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4ODY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4NGQsMHhhYywweDQwLDB4Y2EsMHgwMCwweDM2LDB4MDAgfSB9LAoreyAgMTYsIDB4ODY4MCwgMCwgezB4OGYsMHgzMCwweDIzLDB4ZWMsMHhhOCwweGViLDB4NDAsMHgzYywweGMwLDB4MGYsMHg5NiwweDQzLDB4ZWQsMHg4MCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ODY5MCwgMCwgezB4M2UsMHhkOCwweDhmLDB4YjEsMHg0MywweGVkLDB4ODAsMHhmYiwweDIwLDB4MzYsMHhjYSwweDBmLDB4YjAsMHhhMywweDgyLDB4MDYgfSB9LAoreyAgMTYsIDB4ODZhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDgwLDB4ZmMsMHg4MCwweDMxLDB4ZTAgfSB9LAoreyAgMTYsIDB4ODZiMCwgMCwgezB4MDUsMHhhYSwweDEwLDB4ZmUsMHg0NCwweGZmLDB4OTAsMHgzZiwweGUxLDB4Y2YsMHhmOSwweDE3LDB4M2YsMHgyMCwweGQ3LDB4ODAgfSB9LAoreyAgMTYsIDB4ODZjMCwgMCwgezB4OGIsMHhlNCwweDBmLDB4ZjgsMHgwMywweDNlLDB4MzAsMHhmZiwweDgwLDB4MzcsMHhlMCwweDBmLDB4ZjgsMHgwMCwweDQwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODZkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDAwLDB4YmQsMHgxMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4ODZlMCwgMCwgezB4MDgsMHg0YSwweDAyLDB4ZGMsMHhjMCwweGI3LDB4MDAsMHgyZCwweGMyLDB4MGMsMHhkMywweDAyLDB4MWMsMHg4MCwweDg3LDB4MDAgfSB9LAoreyAgMTYsIDB4ODZmMCwgMCwgezB4MjksMHhjMCwweDRiLDB4NzIsMHgwMiwweDFjLDB4MDAsMHhiNywweDAxLDB4MjEsMHhjMCwweDBiLDB4ZjAsMHgxMiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4ODcwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDkwLDB4MzQsMHgwMCwweDIxLDB4ODAgfSB9LAoreyAgMTYsIDB4ODcxMCwgMCwgezB4MDksMHg3MCwweDAwLDB4NWMsMHgwYywweGI3LDB4MDAsMHgyZCwweGM0LDB4MDgsMHg1MCwweDFhLDB4MGMsMHgwMCwweDk3LDB4MDAgfSB9LAoreyAgMTYsIDB4ODcyMCwgMCwgezB4MjEsMHhjMCwweDRiLDB4MzAsMHgwMiwweDFjLDB4MDAsMHhiNywweDAwLDB4MjUsMHhjMCwweDBiLDB4NzAsMHgwMiwweDQwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODczMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjYywweDAwLDB4YjAsMHgwMCwweDYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODc0MCwgMCwgezB4MDgsMHgzZSwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDIsMHgwYywweGUwLDB4MmIsMHhiMCwweDAyLDB4MGMsMHgwMCwweDkzLDB4MDAgfSB9LAoreyAgMTYsIDB4ODc1MCwgMCwgezB4MjgsMHhjMCwweDBiLDB4YjAsMHgwMiwweDJjLDB4MTAsMHhiMywweDAwLDB4MjAsMHhkNiwweDAzLDB4MzAsMHgwMiwweDA4LDB4MDQgfSB9LAoreyAgMTYsIDB4ODc2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAwLDB4ZmIsMHgwMCwweGIyLDB4MDAgfSB9LAoreyAgMTYsIDB4ODc3MCwgMCwgezB4MDUsMHhiZSwweDAzLDB4N2MsMHgwMCwweGZmLDB4MDAsMHgzZSwweDIwLDB4MGMsMHhiMCwweDAzLDB4M2MsMHgwMCwweGQ5LDB4ODAgfSB9LAoreyAgMTYsIDB4ODc4MCwgMCwgezB4MzMsMHhjMCwweDhiLDB4ZjAsMHgwMywweDNjLDB4MDAsMHhmZiwweDAwLDB4MzcsMHhlMCwweDBmLDB4ZjAsMHgwMywweDZhLDB4MDQgfSB9LAoreyAgMTYsIDB4ODc5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwNCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdhMCwgMCwgezB4MGYsMHhhNCwweDIzLDB4Y2MsMHgwMCwweGZiLDB4MDAsMHgzZSwweDgxLDB4MDgsMHg5MCwweDAzLDB4ZWMsMHgwMCwweGU5LDB4MTQgfSB9LAoreyAgMTYsIDB4ODdiMCwgMCwgezB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGVjLDB4MTAsMHhmYiwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4ZmYsMHgwMCwweDM3LDB4ODAgfSB9LAoreyAgMTYsIDB4ODdkMCwgMCwgezB4MGYsMHhmYSwweDAzLDB4ZmMsMHgwMCwweGNmLDB4MDAsMHgzZiwweDkwLDB4MDYsMHhkYywweDIzLDB4M2MsMHgwMCwweGZkLDB4MTAgfSB9LAoreyAgMTYsIDB4ODdlMCwgMCwgezB4MzMsMHhjMCwweDBmLDB4ZjAsMHgwYiwweDNjLDB4MDAsMHg0MywweDAwLDB4MzMsMHhjMCwweDBmLDB4ZjAsMHgwMywweGMwLDB4NDQgfSB9LAoreyAgMTYsIDB4ODdmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDAsMHg2YywweDA5LDB4YmIsMHgxOSwweDIyLDB4MzIgfSB9LAoreyAgMTYsIDB4ODgwMCwgMCwgezB4MGIsMHhiZSwweDAzLDB4NmMsMHgwMCwweDhiLDB4MDAsMHgyYywweDkwLDB4MGQsMHhiOCwweDAyLDB4YWMsMHgwMCwweGIxLDB4MDAgfSB9LAoreyAgMTYsIDB4ODgxMCwgMCwgezB4ZjIsMHhjMCwweDBiLDB4YjAsMHgxMiwweGFjLDB4MDAsMHg4YiwweDAwLDB4MjIsMHhjMCwweDBiLDB4YjAsMHgwMywweGEwLDB4NDAgfSB9LAoreyAgMTYsIDB4ODgyMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDEwLDB4YjMsMHgwMCwweDI2LDB4MjAgfSB9LAoreyAgMTYsIDB4ODgzMCwgMCwgezB4MGIsMHg5MCwweDEyLDB4ZWMsMHgwMSwweDhiLDB4MDAsMHgyYSwweGMyLDB4MGEsMHg5MCwweDAyLDB4MmMsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg0MCwgMCwgezB4YTIsMHhjMCwweDBiLDB4YjAsMHgwMiwweDJjLDB4MDAsMHhhYiwweDAwLDB4MmEsMHhjMCwweDBiLDB4YjAsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDAxLDB4YjMsMHgwMCwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg2MCwgMCwgezB4MGIsMHgwMCwweDAyLDB4OGMsMHgwMCwweDgzLDB4MDAsMHgyZSwweGMwLDB4MGIsMHgzNCwweDAyLDB4OGMsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg3MCwgMCwgezB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBkLDB4MDAsMHhhMywweDAwLDB4YTAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDgyLDB4MDEgfSB9LAoreyAgMTYsIDB4ODg4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4YmIsMHgwNCwweDM2LDB4ODAgfSB9LAoreyAgMTYsIDB4ODg5MCwgMCwgezB4MGYsMHhiMiwweDAyLDB4ZmMsMHgwMiwweGNmLDB4MDIsMHgzOCwweGMwLDB4MGUsMHhmMCwweDAzLDB4M2MsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ODhhMCwgMCwgezB4MjMsMHhjMCwweDBmLDB4ZjAsMHgwMywweDNkLDB4MDIsMHhlZiwweDAwLDB4MzMsMHhjMCwweDBmLDB4ZjAsMHg0MywweGMwLDB4MDMgfSB9LAoreyAgMTYsIDB4ODhiMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4MDAgfSB9LAoreyAgMTYsIDB4ODhjMCwgMCwgezB4MGYsMHhmNCwweDIzLDB4N2MsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGQsMHhkMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4ODhkMCwgMCwgezB4M2IsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4ODgsMHhkZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGE4LDB4MDYgfSB9LAoreyAgMTYsIDB4ODhlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmMCwweDUwLDB4Y2UsMHgxMiwweDMzLDB4ZDAgfSB9LAoreyAgMTYsIDB4ODhmMCwgMCwgezB4NGMsMHg4NiwweDgzLDB4MzAsMHg4MCwweDVmLDB4NjgsMHgzMywweGM0LDB4MGYsMHhmMywweDgzLDB4M2MsMHhjMCwweGNjLDB4MzggfSB9LAoreyAgMTYsIDB4ODkwMCwgMCwgezB4YjMsMHgwOCwweDBjLDB4YzYsMHgwMywweGYxLDB4YTAsMHhmZiwweDAwLDB4MzMsMHgyNCwweDBjLDB4YzIsMHgwMywweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODkxMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlYywweDgwLDB4ZDIsMHgyMCwweDIzLDB4ZDggfSB9LAoreyAgMTYsIDB4ODkyMCwgMCwgezB4MGQsMHg5NiwweDAyLDB4ODgsMHg2MCwweGFmLDB4NDAsMHgyMywweGRjLDB4MGIsMHhmNiwweDAyLDB4M2MsMHhjMiwweDg4LDB4NjAgfSB9LAoreyAgMTYsIDB4ODkzMCwgMCwgezB4MjIsMHg1MiwweDA4LDB4OTEsMHgyMiwweGUxLDB4MDAsMHhiNywweDI0LDB4YTIsMHg0OCwweDhhLDB4ODQsMHg4MiwweDYwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODk0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjNCwweDAwLDB4ODEsMHgwMCwweGUwLDB4YzQgfSB9LAoreyAgMTYsIDB4ODk1MCwgMCwgezB4MGEsMHgwMCwweDAyLDB4MDQsMHg4MCwweGEzLDB4MjAsMHhhOCwweGMwLDB4MWIsMHgzMCwweDBhLDB4MGMsMHgwMCwweGEwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODk2MCwgMCwgezB4MjgsMHgwYywweDA5LDB4MDIsMHgwMiwweGM0LDB4ODAsMHhiMywweDFjLDB4MjIsMHgwOCwweDE5LDB4MDMsMHgwMiwweGUyLDB4MTEgfSB9LAoreyAgMTYsIDB4ODk3MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhNCwweDAwLDB4OTksMHg4MCwweDYyLDB4YzAgfSB9LAoreyAgMTYsIDB4ODk4MCwgMCwgezB4MGIsMHhhMCwweDMyLDB4YTQsMHg1MSwweGFiLDB4MDAsMHgyYSwweGMwLDB4OGIsMHhiMCwweDAwLDB4MGMsMHgwMCwweGE5LDB4YzAgfSB9LAoreyAgMTYsIDB4ODk5MCwgMCwgezB4MmEsMHgyMSwweDA4LDB4YjgsMHgyMiwweGUyLDB4MDAsMHhiYiwweDAwLDB4MjIsMHg4NCwweDFiLDB4YTgsMHg0MiwweDcwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODlhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlMiwweDAwLDB4Y2IsMHhjOSwweDMyLDB4YzAgfSB9LAoreyAgMTYsIDB4ODliMCwgMCwgezB4MGUsMHg4YiwweDEzLDB4MjIsMHgxMCwweGRiLDB4MDEsMHgzMiwweGMwLDB4MGYsMHhiMCwweDBiLDB4MmMsMHgwMCwweDY4LDB4ODEgfSB9LAoreyAgMTYsIDB4ODljMCwgMCwgezB4M2EsMHgyMiwweDJjLDB4ODgsMHgyMywweGUzLDB4MDAsMHhmYiwweDAwLDB4MzAsMHgzMCwweDhkLDB4OWMsMHg4MywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4ODlkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiYSwweDQwLDB4ZjcsMHgwNCwweDNlLDB4YzIgfSB9LAoreyAgMTYsIDB4ODllMCwgMCwgezB4MGQsMHhkOCwweDIzLDB4ZDgsMHgwMCwweDdiLDB4MDAsMHgzNywweGMwLDB4MGYsMHg3MCwweDMzLDB4ZmMsMHgxMCwweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4ODlmMCwgMCwgezB4MzUsMHhjMCwweDhmLDB4YzAsMHgwMywweGY0LDB4MDAsMHhmNywweDAyLDB4M2YsMHhlMCwweDBlLDB4ODAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OGEwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHg4MSwweDIwLDB4YzgsMHgwOCwweDMwLDB4YzAgfSB9LAoreyAgMTYsIDB4OGExMCwgMCwgezB4MGMsMHgwMCwweDgzLDB4MjQsMHg0MCwweGMzLDB4ODksMHgzYSwweGMwLDB4MGUsMHhiMCwweDBiLDB4MmMsMHgwOCwweGM5LDB4NDggfSB9LAoreyAgMTYsIDB4OGEyMCwgMCwgezB4NzIsMHg1NCwweDBmLDB4OTEsMHgwMywweGVkLDB4MDIsMHhlYiwweDhhLDB4M2EsMHg2MiwweDhjLDB4ODAsMHgwYiwweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4OGEzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyYiwweDA0LDB4ODgsMHg0MCwweGEzLDB4YzIgfSB9LAoreyAgMTYsIDB4OGE0MCwgMCwgezB4MDIsMHhhZSwweDEyLDB4MjcsMHg0MiwweDhmLDB4NDQsMHgyMywweGMyLDB4MGIsMHhmNCwweDAyLDB4M2QsMHgwMCwweDBhLDB4NDAgfSB9LAoreyAgMTYsIDB4OGE1MCwgMCwgezB4MjIsMHhlMCwweDBiLDB4YjUsMHgwMiwweGVjLDB4MjAsMHg4ZiwweDQ0LDB4YTIsMHg0MCwweDhkLDB4YmQsMHgyMywweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4OGE2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0OSwweDQwLDB4ODMsMHg4MSwweDI0LDB4YzEgfSB9LAoreyAgMTYsIDB4OGE3MCwgMCwgezB4MDgsMHgyOCwweDAyLDB4MDEsMHgwMCwweDkzLDB4MDAsMHhhMCwweGU4LDB4MGEsMHgzMCwweDgyLDB4OGYsMHg2MCwweGIzLDB4OTAgfSB9LAoreyAgMTYsIDB4OGE4MCwgMCwgezB4NjAsMHhiOCwweDBiLDB4MjgsMHgxMiwweDRhLDB4MDAsMHg5MywweDAwLDB4MjAsMHg5MCwweDA5LDB4MjAsMHgwMiwweDc4LDB4MDAgfSB9LAoreyAgMTYsIDB4OGE5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxZSwweDAyLDB4ODcsMHhhOCwweDI1LDB4ZTAgfSB9LAoreyAgMTYsIDB4OGFhMCwgMCwgezB4MGEsMHg3YiwweDAyLDB4MWEsMHgwNCwweDg3LDB4ODAsMHgyMSwweGU0LDB4MGIsMHg3OCwweDgyLDB4OGUsMHgwMiwweDk2LDB4OTEgfSB9LAoreyAgMTYsIDB4OGFiMCwgMCwgezB4MjEsMHgyMSwweDBiLDB4NjksMHg0MCwweGRiLDB4NDAsMHg5NywweDkyLDB4MjMsMHhhMCwweDg5LDB4NTgsMHg4MiwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4OGFjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgyNSwweDgyLDB4YzMsMHgwMCwweDM0LDB4YzAgfSB9LAoreyAgMTYsIDB4OGFkMCwgMCwgezB4MGMsMHg5YiwweDQzLDB4MDgsMHhkMCwweGQzLDB4MjAsMHgzOCwweGMwLDB4MGUsMHhiMCwweDAzLDB4OGMsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4OGFlMCwgMCwgezB4MjAsMHg4MCwweDA3LDB4MTAsMHgwMywweGUwLDB4MDAsMHhkMywweDEwLDB4MzgsMHgxOCwweDBkLDB4MzAsMHgwMywweDUyLDB4MDIgfSB9LAoreyAgMTYsIDB4OGFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiNCwweDAwLDB4N2YsMHgyMCwweDFiLDB4ZDAgfSB9LAoreyAgMTYsIDB4OGIwMCwgMCwgezB4MGYsMHhmMSwweDAzLDB4ZjgsMHg0MCwweGVmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhiNCwweDAzLDB4N2MsMHgyMCwweGNmLDB4MDQgfSB9LAoreyAgMTYsIDB4OGIxMCwgMCwgezB4YmYsMHg0MCwweDBmLDB4ZjAsMHgwMywweGU0LDB4MTAsMHhlZiwweDE4LDB4M2QsMHhjMCwweDBmLDB4ZTAsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4OGIyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlOCwweDAwLDB4ZTMsMHgwMCwweGIyLDB4YzQgfSB9LAoreyAgMTYsIDB4OGIzMCwgMCwgezB4MGMsMHhhMCwweDAzLDB4MjQsMHgwMCwweGRiLDB4NjgsMHgzMiwweGM4LDB4MGMsMHhiNCwweDAzLDB4ZWMsMHg4MCwweGM4LDB4ODAgfSB9LAoreyAgMTYsIDB4OGI0MCwgMCwgezB4YjYsMHhlMCwweDBjLDB4YTAsMHgwMywweDJlLDB4MDAsMHhjYiwweGUwLDB4YjIsMHg2MCwweDBjLDB4YjgsMHgwYiwweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4OGI1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDAyLDB4ODcsMHgwMCwweGExLDB4YzggfSB9LAoreyAgMTYsIDB4OGI2MCwgMCwgezB4MDgsMHg3MCwweDAyLDB4MWMsMHgwOCwweDk3LDB4MDIsMHgyMSwweGQ0LDB4MDgsMHg3NCwweDAyLDB4ZGMsMHhjMCwweDA3LDB4MDAgfSB9LAoreyAgMTYsIDB4OGI3MCwgMCwgezB4MjEsMHhjMCwweDg4LDB4NzAsMHgwMiwweDE4LDB4MDAsMHg4MywweDA4LDB4MjEsMHhjMCwweDA4LDB4NTAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4OGI4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDIwLDB4YWQsMHg4MCwweDI5LDB4ZTAgfSB9LAoreyAgMTYsIDB4OGI5MCwgMCwgezB4MDgsMHg1OCwweDAyLDB4MWUsMHgwMCwweDk3LDB4YjAsMHgyMSwweGU4LDB4MDgsMHg3OCwweDAyLDB4ZGUsMHgxMCwweDE1LDB4ODAgfSB9LAoreyAgMTYsIDB4OGJhMCwgMCwgezB4MjEsMHhhMSwweDA4LDB4NDgsMHgwMiwweDVlLDB4MDAsMHg4NywweGE0LDB4NjUsMHhhMCwweDA4LDB4NzgsMHgwMiwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGJiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjZiwweDEwLDB4ODEsMHg3MCwweGE4LDB4YzAgfSB9LAoreyAgMTYsIDB4OGJjMCwgMCwgezB4MzgsMHgzMCwweDBhLDB4MGQsMHgwMCwweDkzLDB4MDAsMHhhMCwweGMxLDB4MjgsMHgzMCwweDAyLDB4Y2MsMHgwMiwweDgzLDB4ODggfSB9LAoreyAgMTYsIDB4OGJkMCwgMCwgezB4MjAsMHhlMCwweDM4LDB4MzQsMHgwYSwweDRkLDB4NzIsMHg4MywweDAwLDB4MjQsMHhlOCwweDI4LDB4MzQsMHg4MiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4OGJlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiYSwweDQwLDB4ZWUsMHhjMCwweGJhLDB4ODAgfSB9LAoreyAgMTYsIDB4OGJmMCwgMCwgezB4MGMsMHhlMCwweDAzLDB4MzksMHgxMCwweGRhLDB4MDAsMHgzMiwweDgwLDB4MGMsMHhhMCwweDAzLDB4ZTgsMHgwMCwweGRlLDB4YzggfSB9LAoreyAgMTYsIDB4OGMwMCwgMCwgezB4MzMsMHhhMCwweDBjLDB4ZTAsMHgwMywweDdiLDB4MDAsMHhjYSwweDAwLDB4MzcsMHhiMSwweDBjLDB4ZTQsMHgyMywweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4OGMxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhjMSwweDAwLDB4ZjgsMHgwMCwweDM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OGMyMCwgMCwgezB4MGYsMHg4MCwweDAzLDB4YzAsMHgyMCwweDM4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHgwMCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDIgfSB9LAoreyAgMTYsIDB4OGMzMCwgMCwgezB4M2EsMHgyNCwweDBmLDB4ODAsMHg4MywweGEwLDB4MDEsMHhmOCwweDA0LDB4M2EsMHgwNCwweDBkLDB4ODAsMHgxMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4OGM0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDQ0LDB4YzEsMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4OGM1MCwgMCwgezB4MGMsMHg5MCwweDMyLDB4MjQsMHgwYywweGMxLDB4MDYsMHgzOCwweDQwLDB4MGQsMHg5MCwweDA5LDB4MDQsMHgwMCwweGQ5LDB4MDAgfSB9LAoreyAgMTYsIDB4OGM2MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4MTgsMHgwMywweDI0LDB4MDAsMHhmOSwweDAxLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDQgfSB9LAoreyAgMTYsIDB4OGM3MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDA2LDB4ODksMHgwMCwweDJhLDB4NTAgfSB9LAoreyAgMTYsIDB4OGM4MCwgMCwgezB4MDgsMHg5NCwweDBhLDB4MjQsMHgwMCwweDg5LDB4NDIsMHgyMiwweDUwLDB4MGEsMHg5MCwweDEyLDB4MjUsMHgwMCwweDg5LDB4MDAgfSB9LAoreyAgMTYsIDB4OGM5MCwgMCwgezB4MmUsMHg1MCwweDBiLDB4OWMsMHgwYSwweDI1LDB4MTAsMHhiOSwweDAwLDB4MmUsMHg1MCwweDBiLDB4OTAsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGNhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDIwLDB4ODksMHgwMCwweDIwLDB4NDIgfSB9LAoreyAgMTYsIDB4OGNiMCwgMCwgezB4MDgsMHgxMCwweGMyLDB4YWMsMHgxMCwweDg5LDB4MDgsMHgyYSwweDQyLDB4MDksMHg5MCwweDAyLDB4MjQsMHgyMCwweDk5LDB4MDAgfSB9LAoreyAgMTYsIDB4OGNjMCwgMCwgezB4MmUsMHg0MiwweDBhLDB4YjEsMHg4MiwweDJjLDB4MjAsMHhiOSwweDAwLDB4NmUsMHg0MiwweDBiLDB4OTAsMHgwMiwweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OGNkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDAwLDB4ODMsMHgwMCwweDI4LDB4NDggfSB9LAoreyAgMTYsIDB4OGNlMCwgMCwgezB4MDgsMHgxMiwweDYyLDB4OGMsMHg4MCwweDgxLDB4MDAsMHgyMCwweDQwLDB4MDIsMHgxMCwweDAyLDB4ODQsMHg4MCwweDgxLDB4MjAgfSB9LAoreyAgMTYsIDB4OGNmMCwgMCwgezB4MmMsMHg0OSwweDBiLDB4MTIsMHgwNiwweDA0LDB4ODQsMHhiMywweDAyLDB4NmMsMHg0MCwweDBiLDB4MTIsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4OGQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg0MSwweGUwLDB4YzgsMHg3OCwweDMwLDB4MTQgfSB9LAoreyAgMTYsIDB4OGQxMCwgMCwgezB4NGMsMHgwNSwweDEzLDB4YTEsMHg0MiwweGMwLDB4NzgsMHgzOCwweDFlLDB4MGQsMHg4NywweDgzLDB4MDEsMHg0MCwweGQwLDB4NTAgfSB9LAoreyAgMTYsIDB4OGQyMCwgMCwgezB4M2MsMHgxNCwweDBlLDB4MDUsMHgwMywweDAxLDB4NDAsMHhmOCwweDc4LDB4M2MsMHgxNCwweDBmLDB4MDUsMHgwMywweGVlLDB4MDMgfSB9LAoreyAgMTYsIDB4OGQzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhmYywweDAwLDB4ZmYsMHgwMCwweDBlLDB4NDQgfSB9LAoreyAgMTYsIDB4OGQ0MCwgMCwgezB4MmYsMHhmMSwweDAzLDB4NzQsMHg0MCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGQsMHg5MCwweDAzLDB4NjQsMHg0MCwweGZkLDB4MTAgfSB9LAoreyAgMTYsIDB4OGQ1MCwgMCwgezB4M2YsMHg0NCwweDBmLDB4ZDEsMHgwMSwweGY0LDB4NDAsMHhmOSwweDAxLDB4M2YsMHhjMCwweDBmLDB4ZDEsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4OGQ2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhlNiwweDIyLDB4ZTksMHg4OCwweGIyLDB4NDAgfSB9LAoreyAgMTYsIDB4OGQ3MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4MjQsMHgxNiwweGM5LDB4OGMsMHgzNiwweDdiLDB4OGYsMHg5YywweDgzLDB4YTcsMHg5MCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4OGQ4MCwgMCwgezB4M2UsMHg1MCwweDA0LDB4OTQsMHgxMywweDI0LDB4NTAsMHhjOSwweGUwLDB4M2UsMHg1MCwweDBmLDB4OTAsMHgwMywweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4OGQ5MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMiwweDgwLDB4ODgsMHhhMCwweDIyLDB4MjggfSB9LAoreyAgMTYsIDB4OGRhMCwgMCwgezB4MGIsMHg4YSwweDAyLDB4MmEsMHg4MCwweDg4LDB4YTQsMHgyMiwweDMwLDB4MDgsMHg4ZSwweDBhLDB4MjIsMHgwMiwweDg4LDB4YTAgfSB9LAoreyAgMTYsIDB4OGRiMCwgMCwgezB4MmUsMHgyOCwweDg4LDB4YWEsMHgxMiwweDIyLDB4OTAsMHg4OCwweGY0LDB4MmUsMHgyMCwweDBiLDB4YzgsMHgwMiwweDBlLDB4MDQgfSB9LAoreyAgMTYsIDB4OGRjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhkNCwweDIwLDB4YTUsMHgwOCwweDIxLDB4NDIgfSB9LAoreyAgMTYsIDB4OGRkMCwgMCwgezB4MGIsMHg1MCwweDgyLDB4MTQsMHgzMSwweDg1LDB4MDgsMHgyNSwweDQwLDB4MGEsMHg1MCwweDIyLDB4OTQsMHg0MCwweDg1LDB4MDggfSB9LAoreyAgMTYsIDB4OGRlMCwgMCwgezB4NmQsMHg0MCwweDA4LDB4NTAsMHgwMiwweDU0LDB4MDIsMHg5NSwweDAwLDB4MmQsMHg0OCwweDBiLDB4NTAsMHg4MiwweDQyLDB4MDEgfSB9LAoreyAgMTYsIDB4OGRmMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHg4NCwweDAwLDB4OGQsMHgxMCwweDIzLDB4NDAgfSB9LAoreyAgMTYsIDB4OGUwMCwgMCwgezB4MGIsMHhkMCwweDAwLDB4MzQsMHgwMSwweDhkLDB4MDAsMHgyMywweDQxLDB4NTgsMHhkMCwweDAyLDB4MzQsMHgwMCwweDhkLDB4MDggfSB9LAoreyAgMTYsIDB4OGUxMCwgMCwgezB4MmYsMHg1MCwweDA4LDB4ZDIsMHgwMiwweDc0LDB4ODAsMHg5ZCwweDAwLDB4MmYsMHg0OCwweDBiLDB4ZGMsMHgwMiwweDQ2LDB4MDQgfSB9LAoreyAgMTYsIDB4OGUyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNywweDQwLDB4ZTksMHhjMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4OGUzMCwgMCwgezB4MGYsMHg5MCwweDA5LDB4MjYsMHgwMCwweGM5LDB4MDQsMHgzNiwweDQwLDB4MWYsMHg5MCwweDIzLDB4YTQsMHgwOCwweGM5LDB4NDAgfSB9LAoreyAgMTYsIDB4OGU0MCwgMCwgezB4M2UsMHg0MCwweDBjLDB4OTQsMHgwYiwweDY0LDB4MjAsMHhkOSwweDAyLDB4M2UsMHg0MSwweDBmLDB4OTQsMHgwMywweDY4LDB4MDQgfSB9LAoreyAgMTYsIDB4OGU1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHg4MCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4OGU2MCwgMCwgezB4MGYsMHgxNCwweDAzLDB4YzUsMHgwOCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MWYsMHg5MCwweDIzLDB4ZTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4OGU3MCwgMCwgezB4M2MsMHg0MCwweGFmLDB4OTgsMHgwMywweDg2LDB4MDAsMHhlOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4MTAsMHgwYiwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4OGU4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhiMCwweDAwLDB4ZGMsMHg0MCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4OGU5MCwgMCwgezB4MGYsMHhjMCwweDAzLDB4MzEsMHgwMiwweGM0LDB4MDQsMHhiMSwweDAwLDB4M2MsMHg0MCwweDAzLDB4MTAsMHgwMCwweGZjLDB4NDAgfSB9LAoreyAgMTYsIDB4OGVhMCwgMCwgezB4MzMsMHgwMCwweDBjLDB4YzQsMHgwMywweGIxLDB4MDAsMHhjYywweDAwLDB4YjMsMHgwMCwweDBjLDB4YzQsMHgwMywweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4OGViMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDAwLDB4OGEsMHg4MCwweDIyLDB4YTAgfSB9LAoreyAgMTYsIDB4OGVjMCwgMCwgezB4MGIsMHhhMCwweDAyLDB4MmEsMHgwMCwweDhhLDB4ODQsMHgyMiwweGExLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwOCwweGJhLDB4MDEgfSB9LAoreyAgMTYsIDB4OGVkMCwgMCwgezB4MjIsMHg4MCwweDA4LDB4YTAsMHgyYiwweDI4LDB4MDAsMHg4YSwweDgwLDB4MmEsMHg4MCwweDA4LDB4ZTAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4OGVlMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAyLDB4OWIsMHg4MSwweDIwLDB4ZTAgfSB9LAoreyAgMTYsIDB4OGVmMCwgMCwgezB4OGIsMHgzOCwweDA2LDB4Y2UsMHgwMCwweDkzLDB4ODAsMHgyMCwweGMwLDB4MDgsMHgzOCwweDAyLDB4MGMsMHgwMCwweGIzLDB4ODAgfSB9LAoreyAgMTYsIDB4OGYwMCwgMCwgezB4NmMsMHhlMCwweDBhLDB4YjAsMHgwMiwweDRjLDB4MDAsMHg5MywweDAwLDB4MjAsMHhlMCwweDA4LDB4MzAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4OGYxMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxMCwweDA0LDB4ODAsMHgwOCwweDIxLDB4MDIgfSB9LAoreyAgMTYsIDB4OGYyMCwgMCwgezB4NGIsMHg0NCwweDA2LDB4ZDAsMHgyMCwweDkwLDB4MDgsMHgyMSwweDAyLDB4ODAsMHg0NCwweDAyLDB4MTAsMHgwMCwweGI0LDB4YzAgfSB9LAoreyAgMTYsIDB4OGYzMCwgMCwgezB4MmQsMHgxMCwweDQ4LDB4NDAsMHgwMiwweDAwLDB4MDAsMHg5NCwweDg5LDB4MjksMHgzMCwweDA4LDB4NDAsMHgwMiwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4OGY0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgzMiwweDAwLDB4ZDYsMHg4MCwweDMxLDB4YTAgfSB9LAoreyAgMTYsIDB4OGY1MCwgMCwgezB4MGYsMHhlOCwweDBiLDB4Y2EsMHgwMCwweGQ2LDB4ODAsMHgyMywweGEwLDB4MDQsMHhmOCwweDBiLDB4MWEsMHgwMCwweGZmLDB4ODAgfSB9LAoreyAgMTYsIDB4OGY2MCwgMCwgezB4YmYsMHhhMCwweDJlLDB4YzgsMHgxMywweGRhLDB4MDIsMHg1ZSwweDgwLDB4NzMsMHhhMCwweDJjLDB4NzgsMHgwMywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4OGY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhYywweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4OGY4MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4MjQsMHgwMCwweGU5LDB4MDAsMHgzZSwweDQwLDB4MGUsMHg4MCwweDAzLDB4ZTQsMHgwMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OGY5MCwgMCwgezB4MzIsMHg0MCwweDBmLDB4YjAsMHgwMywweGU0LDB4MDEsMHhlOSwweDA0LDB4MzYsMHg0MCwweDBmLDB4ODAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4OGZhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4Y2QsMHg4MCwweDMzLDB4NjAgfSB9LAoreyAgMTYsIDB4OGZiMCwgMCwgezB4MGMsMHhkOCwweDQzLDB4MzYsMHgwMCwweGNkLDB4ODAsMHgzMywweDYwLDB4MGMsMHhkOSwweDIzLDB4YmUsMHgwMCwweDRkLDB4ODAgfSB9LAoreyAgMTYsIDB4OGZjMCwgMCwgezB4MzMsMHg2MCwweDA4LDB4ZjgsMHgwYiwweDNlLDB4MDAsMHhmZCwweDg0LDB4M2YsMHg2MCwweDBmLDB4ZjksMHgwMywweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGZkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5MCwweDA0LDB4ZGUsMHgwMCwweDIzLDB4ODAgfSB9LAoreyAgMTYsIDB4OGZlMCwgMCwgezB4MDgsMHg2MCwweDAyLDB4YjgsMHgyMCwweDhlLDB4MDQsMHgyMywweDgwLDB4MDgsMHg2OCwweDAyLDB4MTAsMHgwMCwweDhlLDB4MjAgfSB9LAoreyAgMTYsIDB4OGZmMCwgMCwgezB4MjMsMHg4MiwweDA4LDB4NDAsMHgwMiwweDEyLDB4MDAsMHhmNiwweDAwLDB4MmQsMHg4MCwweDBiLDB4NDEsMHhhMCwweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTAwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MCwweDAwLDB4ODQsMHgwMCwweDIxLDB4MDAgfSB9LAoreyAgMTYsIDB4OTAxMCwgMCwgezB4MDgsMHg0MSwweDAyLDB4NTAsMHg0MCwweDk0LDB4MDAsMHgyMSwweDAwLDB4MGEsMHg1MiwweDAyLDB4ZDgsMHgwMCwweDg1LDB4MDIgfSB9LAoreyAgMTYsIDB4OTAyMCwgMCwgezB4MjUsMHgwNCwweDA4LDB4NDAsMHgyMiwweDE4LDB4MDgsMHhiNCwweDAwLDB4MmQsMHgxMCwweDBiLDB4NzgsMHg0MCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTAzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhlZSwweDIyLDB4OTMsMHgwMCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4OTA0MCwgMCwgezB4MDgsMHgzOCwweDAyLDB4ZWMsMHgwMCwweDkzLDB4MDAsMHgyMCwweGMxLDB4MmEsMHgyMCwweDAyLDB4NjQsMHgwMiwweDgyLDB4MTAgfSB9LAoreyAgMTYsIDB4OTA1MCwgMCwgezB4MjQsMHhmMCwweDBhLDB4M2MsMHg0MiwweDI0LDB4MjgsMHhiMywweDAwLDB4MmMsMHhlMCwweDBiLDB4ODgsMHg4MiwweGM4LDB4MDQgfSB9LAoreyAgMTYsIDB4OTA2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhZCwweDAwLDB4Y2IsMHgwMCwweGIyLDB4YzAgfSB9LAoreyAgMTYsIDB4OTA3MCwgMCwgezB4YWMsMHhiZSwweDAzLDB4NmUsMHgwMiwweGRiLDB4MDAsMHhiMiwweGMwLDB4MWUsMHhhMCwweDAzLDB4ZTQsMHgwMCwweGNhLDB4MTEgfSB9LAoreyAgMTYsIDB4OTA4MCwgMCwgezB4YjYsMHhkMCwweGFjLDB4YmMsMHgwMywweDI0LDB4MDAsMHhmYiwweDAwLDB4M2UsMHhjMCwweGNmLDB4ODQsMHgwMywweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTA5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlMCwweDQwLDB4ZjgsMHgwMCwweDNjLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBhMCwgMCwgezB4MmYsMHg4MiwweDAzLDB4YTAsMHgwMCwweGU4LDB4MDAsMHgzZSwweDAwLDB4MWQsMHg5MCwweDEzLDB4YTgsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTBiMCwgMCwgezB4M2EsMHgwMCwweDgxLDB4ODMsMHg0MywweGU4LDB4MDAsMHhlOCwweDAzLDB4M2UsMHgwNCwweDBmLDB4YjAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhlMCwweDAwLDB4ZDYsMHgwMCwweDM3LDB4ODAgfSB9LAoreyAgMTYsIDB4OTBkMCwgMCwgezB4MGMsMHhhMCwweDAzLDB4ZjgsMHgwMCwweGNlLDB4MDAsMHgzMywweDgwLDB4MGQsMHhhMCwweDEzLDB4MjAsMHgwOCwweGNlLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBlMCwgMCwgezB4MzMsMHg4MiwweDBjLDB4NDAsMHg3MywweDMwLDB4MTgsMHhjZSwweDAwLDB4MWYsMHg4MCwweDRmLDB4YzEsMHg0MywweDAwLDB4NDQgfSB9LAoreyAgMTYsIDB4OTBmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg3YywweDAwLDB4OGQsMHgwMCwweDIzLDB4NDAgfSB9LAoreyAgMTYsIDB4OTEwMCwgMCwgezB4MGEsMHhkMCwweDAyLDB4ZjQsMHgwMCwweDhkLDB4MDAsMHgyMywweDQwLDB4MDgsMHhkNCwweDgwLDB4M2UsMHg0MiwweDhkLDB4NDAgfSB9LAoreyAgMTYsIDB4OTExMCwgMCwgezB4MjMsMHg0MCwweDA4LDB4ZjAsMHgwMiwweDNlLDB4NDAsMHg4ZCwweDAwLDB4MGYsMHg0MCwweDBiLDB4ZjQsMHgwMiwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4OTEyMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OTksMHgwMCwweGE2LDB4NDAgfSB9LAoreyAgMTYsIDB4OTEzMCwgMCwgezB4MDgsMHg5MCwweDA2LDB4ZTQsMHgwMCwweDkxLDB4MDAsMHgyMCwweDQwLDB4ODgsMHgwMCwweDAyLDB4MjQsMHgwOCwweDgwLDB4NDAgfSB9LAoreyAgMTYsIDB4OTE0MCwgMCwgezB4MjAsMHg0MCwweDBhLDB4YjAsMHgwMiwweDI0LDB4MDAsMHg4OSwweDAwLDB4MGUsMHg0MCwweDBiLDB4ODQsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTE1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwMCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4OTE2MCwgMCwgezB4MGEsMHgyMSwweDA2LDB4YzgsMHgwMSwweDgyLDB4MDAsMHgyMCwweDgwLDB4MDgsMHgzMiwweDgyLDB4MDgsMHgwOCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4OTE3MCwgMCwgezB4NjAsMHg4MCwweDBhLDB4MDAsMHgxMiwweDA4LDB4ODAsMHg4MiwweDAwLDB4MmMsMHg4MCwweDBiLDB4MzAsMHgwYSwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4OTE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2MCwweDAwLDB4ZDgsMHgwMCwweDM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OTE5MCwgMCwgezB4MGMsMHg4NCwweDIzLDB4ZTAsMHgwMCwweGM4LDB4MDAsMHgzMiwweDAwLDB4MGQsMHg4MiwweDBiLDB4MjAsMHgwMiwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTFhMCwgMCwgezB4MzIsMHgwMCwweDBlLDB4MDAsMHgwMywweDIwLDB4MDIsMHhjOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweDAwLDB4MDMgfSB9LAoreyAgMTYsIDB4OTFiMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmYywweDAwLDB4YmYsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4OTFjMCwgMCwgezB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHhiZiwweGMwLDB4OGYsMHhiMCwweDAzLDB4ZmMsMHgwOCwweGZmLDB4MDIgfSB9LAoreyAgMTYsIDB4OTFkMCwgMCwgezB4M2YsMHhjMCwweDBkLDB4ZjAsMHgwMywweGVkLDB4MDAsMHhmZiwweDAyLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4OTFlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDEsMHhmMCwweDhjLDB4ZmYsMHgwMCwweDNkLDB4NjAgfSB9LAoreyAgMTYsIDB4OTFmMCwgMCwgezB4MmMsMHhiMiwweDgzLDB4N2MsMHg5MCwweGRmLDB4MzgsMHgzMSwweGUwLDB4MGYsMHhmOCwweDAzLDB4M2MsMHgwMCwweGZmLDB4MjAgfSB9LAoreyAgMTYsIDB4OTIwMCwgMCwgezB4M2YsMHhjNCwweDBlLDB4ZjQsMHgwMywweDdjLDB4MDAsMHhmNCwweDgwLDB4MzMsMHgwMCwweDBkLDB4ZjgsMHgwMywweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTIxMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlMSwweDIwLDB4YmIsMHg2MiwweDJlLDB4NDIgfSB9LAoreyAgMTYsIDB4OTIyMCwgMCwgezB4MjgsMHhmNCwweDQyLDB4M2UsMHg0MCwweDhmLDB4NDQsMHgyMiwweGUwLDB4MGIsMHhiMCwweDgzLDB4N2YsMHg0NCwweGJmLDB4YzEgfSB9LAoreyAgMTYsIDB4OTIzMCwgMCwgezB4MmQsMHhkYywweDJhLDB4ZjYsMHgwMiwweDNmLDB4NDUsMHhiOCwweDgwLDB4MjIsMHg2MSwweDg4LDB4YjgsMHgwMiwweGUwLDB4MDQgfSB9LAoreyAgMTYsIDB4OTI0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjNSwweDgwLDB4YjIsMHgxOCwweDJlLDB4YzggfSB9LAoreyAgMTYsIDB4OTI1MCwgMCwgezB4MjksMHgzMCwweDMyLDB4MGMsMHgwOCwweGIzLDB4MjAsMHgyMCwweGMwLDB4NGIsMHg5MiwweDAyLDB4MGMsMHgwMCwweGIzLDB4NDAgfSB9LAoreyAgMTYsIDB4OTI2MCwgMCwgezB4MmMsMHhjMCwweDg5LDB4MzQsMHgxMiwweDRjLDB4MDAsMHhiMCwweDAwLDB4MjQsMHhjMSwweDQ5LDB4MzAsMHgwMiwweGUyLDB4MDEgfSB9LAoreyAgMTYsIDB4OTI3MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTEsMHhhNCwweDAwLDB4YmEsMHgwYywweDJlLDB4ZTAgfSB9LAoreyAgMTYsIDB4OTI4MCwgMCwgezB4YTksMHhiMCwweDA2LDB4MmMsMHgwMCwweDhiLDB4MDAsMHhhMiwweGMwLDB4MGIsMHg5MCwweDAwLDB4NmMsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4OTI5MCwgMCwgezB4MmUsMHhjMCwweDBiLDB4MzAsMHgwMiwweDZjLDB4MDAsMHhiYSwweDgwLDB4MjYsMHhmMCwweDA4LDB4YjAsMHgwMiwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4OTJhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTEsMHhlZSwweDAwLDB4ZmIsMHhjNCwweDNlLDB4NzggfSB9LAoreyAgMTYsIDB4OTJiMCwgMCwgezB4MmQsMHhiMCwweDAzLDB4NmMsMHgwOCwweGZiLDB4MDAsMHgzMiwweGMwLDB4OGIsMHgyNCwweDgzLDB4MmMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OTJjMCwgMCwgezB4M2UsMHhjMCwweDhmLDB4YjAsMHgwYiwweDZjLDB4MDgsMHhiMiwweGUwLDB4MTYsMHg2MCwweDhkLDB4YjAsMHgyMywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4OTJkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiZSwweDk4LDB4ZmYsMHg0MCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4OTJlMCwgMCwgezB4MGUsMHg3MCwweDAzLDB4ZGMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhlMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4OTJmMCwgMCwgezB4M2YsMHhjMCwweDBlLDB4ZjAsMHgwMywweGFjLDB4MDAsMHhmZSwweDAwLDB4YjksMHhjMCwweDBmLDB4ZjAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTMwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhZCwweDAwLDB4ZmEsMHg0MCwweDNlLDB4ZDAgfSB9LAoreyAgMTYsIDB4OTMxMCwgMCwgezB4MGUsMHhiMiwweDAzLDB4ZWMsMHgwMCwweGMzLDB4MDAsMHgzZSwweGMwLDB4MGMsMHhhMCwweDAzLDB4MmMsMHgwMSwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OTMyMCwgMCwgezB4M2MsMHhjMCwweDBlLDB4YjgsMHgwMywweGVjLDB4MDAsMHhkYSwweDAwLDB4M2EsMHhkMCwweDRmLDB4YjAsMHgyMywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4OTMzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyYywweDAwLDB4YmEsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4OTM0MCwgMCwgezB4MDgsMHhmNCwweDA3LDB4YmMsMHgxNCwweGRmLDB4MDAsMHgzZSwweGMwLDB4MWEsMHhhMCwweDUyLDB4YmMsMHgwMCwweGJmLDB4MDQgfSB9LAoreyAgMTYsIDB4OTM1MCwgMCwgezB4M2YsMHhjMCwweDhhLDB4ZjAsMHgwMywweGJjLDB4MDAsMHhmYSwweDAwLDB4MjIsMHhjOCwweDBmLDB4YjAsMHgwMywweGYyLDB4MDAgfSB9LAoreyAgMTYsIDB4OTM2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0OCwweDAxLDB4YjEsMHgwMCwweDZjLDB4YzIgfSB9LAoreyAgMTYsIDB4OTM3MCwgMCwgezB4MGEsMHgzMCwweDQyLDB4Y2MsMHgwMCwweDgzLDB4MDUsMHgyYywweGMwLDB4MDgsMHgzMCwweDAyLDB4OGMsMHgwMSwweGIzLDB4MDQgfSB9LAoreyAgMTYsIDB4OTM4MCwgMCwgezB4MmMsMHhjMCwweDBhLDB4MzAsMHgyMiwweDhjLDB4MDAsMHg4MCwweDgwLDB4MjgsMHhjMCwweDBiLDB4MzAsMHgyMiwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTM5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxZSwweDA4LDB4YjcsMHg4MCwweDZmLDB4ZTAgfSB9LAoreyAgMTYsIDB4OTNhMCwgMCwgezB4MTgsMHg3OCwweDAyLDB4OGUsMHg0MCwweGI3LDB4ODAsMHgyZCwweGUwLDB4MGEsMHg3OCwweDAyLDB4OWUsMHgwMCwweGI3LDB4ODAgfSB9LAoreyAgMTYsIDB4OTNiMCwgMCwgezB4MjksMHhlMSwweDBhLDB4NzgsMHgwMiwweDllLDB4MDEsMHhiYywweDgwLDB4MjksMHhlNCwweDBiLDB4NzgsMHgwMiwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTNjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwOSwweDQwLDB4ZjEsMHgyMCwweDNjLDB4YzQgfSB9LAoreyAgMTYsIDB4OTNkMCwgMCwgezB4MGUsMHgzOSwweDAyLDB4Y2MsMHgwMCwweGMzLDB4MDAsMHgyYywweGM0LDB4MDgsMHg5MiwweDAzLDB4OGMsMHg4OCwweGIzLDB4MTAgfSB9LAoreyAgMTYsIDB4OTNlMCwgMCwgezB4MmMsMHhjNCwweDBlLDB4YjAsMHgwNywweDhjLDB4MDAsMHhjMiwweDA4LDB4MzgsMHhjMCwweDBmLDB4MzAsMHg0MywweGQyLDB4MDIgfSB9LAoreyAgMTYsIDB4OTNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiYywweDEwLDB4ZmMsMHgwMCwweDdmLDB4YzAgfSB9LAoreyAgMTYsIDB4OTQwMCwgMCwgezB4MGYsMHhmMCwweDgzLDB4ZmMsMHgyMSwweGRmLDB4MDgsMHgzYiwweGMwLDB4OGYsMHg5MCwweDAxLDB4ZmMsMHgyMSwweGZmLDB4MGMgfSB9LAoreyAgMTYsIDB4OTQxMCwgMCwgezB4M2YsMHhjMiwweDBmLDB4ZjEsMHgwMywweGVjLDB4MDAsMHhlZiwweDAwLDB4NzcsMHhjMCwweDFlLDB4ZjAsMHgwMywweDkwLDB4MDYgfSB9LAoreyAgMTYsIDB4OTQyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlOCwweDAxLDB4ZjksMHgwMCwweDMyLDB4YzAgfSB9LAoreyAgMTYsIDB4OTQzMCwgMCwgezB4MGYsMHhiMiwweDAzLDB4ZWUsMHg5MCwweGRiLDB4ZTEsMHgzYSwweGMwLDB4NGQsMHgzOCwweDEzLDB4MmQsMHgzMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OTQ0MCwgMCwgezB4M2UsMHhlMCwweDRmLDB4YmEsMHg0MywweDJjLDB4NDAsMHhmYSwweDAwLDB4M2YsMHhjMCwweDhjLDB4YjAsMHgwMywweGVhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTQ1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDAwLDB4YjEsMHgwMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4OTQ2MCwgMCwgezB4MGIsMHg3MSwweDAyLDB4Y2MsMHgyMCwweGE3LDB4MjgsMHgyMSwweGMwLDB4MGIsMHg3MCwweDEzLDB4NWMsMHgwOCwweGI3LDB4MTAgfSB9LAoreyAgMTYsIDB4OTQ3MCwgMCwgezB4MmQsMHhjNCwweDRiLDB4MzQsMHg4MywweDFjLDB4YzEsMHhiNywweDAyLDB4MmQsMHhjMCwweDFhLDB4NzAsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4OTQ4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5YSwweDIwLDB4YjQsMHhjNCwweDI1LDB4YTIgfSB9LAoreyAgMTYsIDB4OTQ5MCwgMCwgezB4MGIsMHg3OCwweDA2LDB4ZGUsMHgwMCwweDgzLDB4ODAsMHgyOSwweGUwLDB4MWIsMHhmOCwweDAyLDB4NWUsMHg4MCwweGE3LDB4YTAgfSB9LAoreyAgMTYsIDB4OTRhMCwgMCwgezB4MmQsMHhjOCwweDBhLDB4NzIsMHgwMiwweDFlLDB4MDAsMHhhNiwweDgwLDB4MjgsMHhlMCwweDA4LDB4NzgsMHgwMiwweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTRiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhlZCwweDAwLDB4YjMsMHg0MCwweDI0LDB4YzMgfSB9LAoreyAgMTYsIDB4OTRjMCwgMCwgezB4MGIsMHgzMCwweDQyLDB4Y2MsMHgwMCwweGEzLDB4MDAsMHgyMCwweGMwLDB4MWIsMHgzNCwweDAyLDB4NGMsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4OTRkMCwgMCwgezB4MmMsMHhjMCwweDRiLDB4MzAsMHgwMiwweDBjLDB4MDAsMHhiMywweDg4LDB4MmMsMHhkNCwweDBhLDB4MzAsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4OTRlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOCwweDAwLDB4ZmUsMHg0MCwweGI3LDB4YTAgfSB9LAoreyAgMTYsIDB4OTRmMCwgMCwgezB4MGYsMHhhMCwweDAzLDB4ZTgsMHgwMCwweGRhLDB4MDAsMHgzYSwweDgwLDB4MGYsMHhlMiwweDAzLDB4NjgsMHgwMCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTUwMCwgMCwgezB4M2UsMHg4MCwweDBmLDB4YTAsMHgwYiwweDI4LDB4MDAsMHhlZSwweGUwLDB4M2YsMHhiMCwweDA0LDB4YTAsMHgwMywweGZhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTUxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDA0LDB4ZjAsMHgwOCwweDNhLDB4MTAgfSB9LAoreyAgMTYsIDB4OTUyMCwgMCwgezB4MGYsMHg4NCwweDAzLDB4ZTAsMHgxMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4NGYsMHg4MCwweDgzLDB4ZTAsMHgwMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTUzMCwgMCwgezB4M2MsMHgwMCwweDBmLDB4ODAsMHgwMywweDgwLDB4MDAsMHhmOCwweDQwLDB4M2UsMHgwOSwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4OTU0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDIwLDB4ZTksMHgwMCwweDMyLDB4NDQgfSB9LAoreyAgMTYsIDB4OTU1MCwgMCwgezB4MGMsMHg5MCwweDAzLDB4MjQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDEzLDB4ZTQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTU2MCwgMCwgezB4MWUsMHg0MCwweDBjLDB4MTAsMHgwMywweDI0LDB4MDAsMHhjOSwweGEwLDB4M2MsMHg2NCwweDBjLDB4OTAsMHgwMywweDgyLDB4MDQgfSB9LAoreyAgMTYsIDB4OTU3MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHgwMCwweDIyLDB4NjggfSB9LAoreyAgMTYsIDB4OTU4MCwgMCwgezB4MDgsMHgxMywweDAyLDB4MjQsMHgwOCwweGY5LDB4MDAsMHgyZSwweDQ4LDB4MWIsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTU5MCwgMCwgezB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMiwweDI0LDB4MDgsMHhmOSwweDQwLDB4MmUsMHg2MCwweDBhLDB4OTAsMHgwNiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTVhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHgyNCwweDAwLDB4YTksMHgwMCwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4OTViMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDEsMHgyZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTVjMCwgMCwgezB4MmUsMHg0MCwweDA4LDB4OTIsMHgyMiwweDI0LDB4MDAsMHg4OSwweDAwLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OTVkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDgwLDB4ODEsMHgyMSwweGUwLDB4NTAgfSB9LAoreyAgMTYsIDB4OTVlMCwgMCwgezB4MjgsMHgxNiwweDBhLDB4MDQsMHg4MCwweGExLDB4NDAsMHgyYywweDQwLDB4NGIsMHgxNCwweDIyLDB4YzQsMHgwMCwweGIxLDB4MDAgfSB9LAoreyAgMTYsIDB4OTVmMCwgMCwgezB4MmMsMHg1MCwweDA5LDB4MTQsMHgwMiwweDA0LDB4MDQsMHhiMSwweDAwLDB4MmMsMHg0MCwweDBhLDB4MTAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4OTYwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZTgsMHg1MCwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4OTYxMCwgMCwgezB4OGMsMHg4MCwweDAyLDB4MjAsMHgwMCwweGI4LDB4MDAsMHgzZSwweDAwLDB4MGIsMHg4MCwweDMzLDB4ZTAsMHgxMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTYyMCwgMCwgezB4M2UsMHgwMCwweDBjLDB4ODAsMHgwMywweDIwLDB4MDgsMHhjYSwweDAwLDB4M2UsMHgwMCwweDBjLDB4ODAsMHgwMywweGFlLDB4MDMgfSB9LAoreyAgMTYsIDB4OTYzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhmYywweDQwLDB4ZmQsMHgxMCwweDJmLDB4NDEgfSB9LAoreyAgMTYsIDB4OTY0MCwgMCwgezB4NGYsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGY5LDB4NDAsMHgzZSwweDQwLDB4NGYsMHhkMCwweDYzLDB4ZTUsMHgwMCwweGY5LDB4NDAgfSB9LAoreyAgMTYsIDB4OTY1MCwgMCwgezB4M2EsMHg1MCwweDJlLDB4OTQsMHgwMywweDY1LDB4MDAsMHhlZCwweDAwLDB4M2YsMHg1MCwweDBmLDB4OTAsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4OTY2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhlNiwweDAwLDB4ZjksMHhlMCwweDMzLDB4NTAgfSB9LAoreyAgMTYsIDB4OTY3MCwgMCwgezB4MGMsMHhkYSwweDAzLDB4YTYsMHgwMCwweGQ5LDB4ODAsMHgzZiwweDQwLDB4MGYsMHg5MSwweDAzLDB4YTYsMHgwMCwweGY5LDB4ODggfSB9LAoreyAgMTYsIDB4OTY4MCwgMCwgezB4M2UsMHg2OCwweDBjLDB4ZGUsMHgwMywweDY2LDB4MDAsMHhlZCwweDAwLDB4M2IsMHg2OSwweDBjLDB4OTAsMHgwMywweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OTY5MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMSwweDA4LDB4YjgsMHhlMCwweDIwLDB4MjAgfSB9LAoreyAgMTYsIDB4OTZhMCwgMCwgezB4MTgsMHg4ZSwweDI2LDB4ZTEsMHgwMCwweDgwLDB4YTAsMHgyZSwweDAwLDB4NGIsMHg4OCwweDQyLDB4ZTEsMHg1MCwweGI4LDB4NDAgfSB9LAoreyAgMTYsIDB4OTZiMCwgMCwgezB4MmUsMHgyYSwweDBkLDB4MGEsMHgwMiwweDIwLDB4MDgsMHhiOCwweDAwLDB4MmUsMHgxNCwweDBkLDB4ODAsMHgwMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4OTZjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDAwLDB4YjEsMHg2MCwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4OTZkMCwgMCwgezB4MDgsMHgzMSwweGEyLDB4YzUsMHgwMCwweDkxLDB4NDgsMHgyYywweDQwLDB4MWIsMHgxMiwweDAyLDB4ODQsMHgwMCwweGIxLDB4MDAgfSB9LAoreyAgMTYsIDB4OTZlMCwgMCwgezB4MmMsMHg1MCwweDA5LDB4MTYsMHgwMiwweDA1LDB4MDAsMHhhMywweDA0LDB4MjgsMHg0MCwweDA4LDB4MTAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4OTZmMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhhNCwweDAwLDB4YjksMHgwOCwweDIwLDB4NzAgfSB9LAoreyAgMTYsIDB4OTcwMCwgMCwgezB4MjgsMHg5MCwweDAyLDB4ZTQsMHgwMCwweDg5LDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4ZTQsMHgwOCwweGI5LDB4MDMgfSB9LAoreyAgMTYsIDB4OTcxMCwgMCwgezB4MmMsMHg0MCwweDI5LDB4OTAsMHgwMiwweDY0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg2MiwweDA5LDB4OTAsMHgwMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4OTcyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDUsMHhlNSwweDAwLDB4ZjksMHhkMCwweGIyLDB4NzAgfSB9LAoreyAgMTYsIDB4OTczMCwgMCwgezB4MDgsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGQ5LDB4MDQsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4YTQsMHgxMCwweGY5LDB4MDIgfSB9LAoreyAgMTYsIDB4OTc0MCwgMCwgezB4M2UsMHg0MCwweDBkLDB4OTAsMHgyYiwweDY0LDB4MDAsMHhlOSwweDhkLDB4M2EsMHg2MCwweDBjLDB4OTAsMHgwMywweGU4LDB4MDQgfSB9LAoreyAgMTYsIDB4OTc1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHg4MCwweDNlLDB4NDIgfSB9LAoreyAgMTYsIDB4OTc2MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5YSwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4OTc3MCwgMCwgezB4M2UsMHg0MCwweDJmLDB4MTAsMHgwMywweGE0LDB4MDAsMHhmOSwweDIyLDB4M2MsMHg0MCwweDRmLDB4OTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTc4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHhhMCwweDAwLDB4ZjAsMHg0MCwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4OTc5MCwgMCwgezB4MGMsMHg4MCwweDAzLDB4YzAsMHgwMCwweGY4LDB4MDAsMHgzMiwweDIwLDB4MWYsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTdhMCwgMCwgezB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMiwweDIwLDB4MDAsMHhjOCwweGMwLDB4M2UsMHgwMCwweDBjLDB4ODAsMHgwMywweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTdiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTUsMHgyOCwweDEwLDB4YmEsMHgwMCwweDIzLDB4YTAgfSB9LAoreyAgMTYsIDB4OTdjMCwgMCwgezB4MGEsMHhlNCwweDAyLDB4ZTgsMHgwMCwweGJhLDB4MDAsMHgyYiwweGExLDB4MGIsMHhhMCwweDAyLDB4ZTgsMHgwMCwweGFhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTdkMCwgMCwgezB4MmEsMHg4MSwweDBhLDB4YTAsMHgwMywweGU4LDB4MDgsMHhkZSwweDAwLDB4MmUsMHg4MCwweDBhLDB4YTAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTdlMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YjMsMHgwNCwweGEwLDB4YjEgfSB9LAoreyAgMTYsIDB4OTdmMCwgMCwgezB4MDgsMHgzNiwweDIyLDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyMCwweGU0LDB4MGIsMHgzMCwweDAyLDB4Y2MsMHgwMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4OTgwMCwgMCwgezB4MjAsMHhjMCwweDA4LDB4MTgsMHgwMiwweDBjLDB4MDAsMHg5MSwweDAxLDB4MmMsMHhjMCwweDA4LDB4MzAsMHgwNiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4OTgxMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxYywweGM4LDB4YjMsMHgyMSwweDIxLDB4YzIgfSB9LAoreyAgMTYsIDB4OTgyMCwgMCwgezB4MmEsMHg3MCwweDAyLDB4ZGMsMHgwMCwweGI3LDB4YTAsMHgyOSwweGMwLDB4MGIsMHg3MiwweDAyLDB4Y2UsMHgwMCwweGE3LDB4ODEgfSB9LAoreyAgMTYsIDB4OTgzMCwgMCwgezB4MjksMHhjMCwweDRhLDB4NzQsMHgwMiwweGZlLDB4MDAsMHg5NywweDAxLDB4MmMsMHhjMCwweDBhLDB4NzAsMHgxMiwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4OTg0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDgwLDB4ZjcsMHhjMCwweDMxLDB4ZTAgfSB9LAoreyAgMTYsIDB4OTg1MCwgMCwgezB4MGMsMHg0OCwweDAzLDB4ZGUsMHgxMSwweGY3LDB4ODAsMHgyMSwweGUwLDB4MGIsMHg3YSwweDAzLDB4ZGUsMHgwMCwweGMzLDB4ODAgfSB9LAoreyAgMTYsIDB4OTg2MCwgMCwgezB4MzMsMHhkOCwweDZjLDB4NzgsMHgwMywweDNlLDB4MDAsMHhkNiwweDgwLDB4M2QsMHhlMCwweDBjLDB4NzgsMHgwMywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4OTg3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MGQsMHhhYywweDA4LDB4ZmIsMHg4MCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4OTg4MCwgMCwgezB4MGYsMHhkMCwweDAzLDB4ZWMsMHgwNCwweGZiLDB4M2MsMHgzZSwweGMwLDB4MGYsMHhiNiwweDA3LDB4NmMsMHgwMSwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OTg5MCwgMCwgezB4M2UsMHhkMCwweDBmLDB4OTQsMHgwNywweGVjLDB4MDEsMHhlYSwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4OThhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHhmZSwweDAwLDB4Y2YsMHhhNCwweDNiLDB4NjAgfSB9LAoreyAgMTYsIDB4OThiMCwgMCwgezB4MDgsMHhkOSwweDAzLDB4N2UsMHgwMCwweGNmLDB4ODAsMHgzZiwweDI1LDB4NGYsMHhmYywweDg3LDB4YmUsMHgwMCwweGNmLDB4ODAgfSB9LAoreyAgMTYsIDB4OThjMCwgMCwgezB4N2YsMHhmYywweDBjLDB4ZmMsMHgwMywweDdjLDB4MDAsMHhmNiwweDkwLDB4MzMsMHhlMCwweDBmLDB4ZjgsMHgwMywweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OThkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDA4LDB4OGYsMHgyOCwweDIxLDB4NDAgfSB9LAoreyAgMTYsIDB4OThlMCwgMCwgezB4MDgsMHhkMCwweDAyLDB4MWMsMHg0MCwweGE3LDB4MjAsMHgzMSwweDA0LDB4MWIsMHg3OCwweDAyLDB4ZGMsMHg4MCwweGQ3LDB4MDAgfSB9LAoreyAgMTYsIDB4OThmMCwgMCwgezB4MmYsMHhjNCwweDFhLDB4ZDAsMHgwMiwweDFlLDB4NDgsMHhiNiwweDAwLDB4NjEsMHhjMCwweDBiLDB4NzAsMHgwNiwweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTkwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4YywweDAwLDB4ODcsMHgzMCwweDY5LDB4NDQgfSB9LAoreyAgMTYsIDB4OTkxMCwgMCwgezB4MDgsMHg1MCwweDIyLDB4MGMsMHgwMCwweDg3LDB4MDEsMHgyZCwweDQ0LDB4OGIsMHg3MCwweDA2LDB4OGMsMHgxMCwweDg3LDB4MDAgfSB9LAoreyAgMTYsIDB4OTkyMCwgMCwgezB4MjksMHhjOSwweDA4LDB4NTAsMHgwMiwweDFjLDB4NDQsMHhhNiwweDAwLDB4NjEsMHhjMCwweDBiLDB4NzAsMHgwMiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTkzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjZCwweDAwLDB4ODMsMHg4OCwweDYwLDB4NDAgfSB9LAoreyAgMTYsIDB4OTk0MCwgMCwgezB4MDAsMHgxMCwweDAyLDB4NGMsMHgwMCwweDJiLDB4MDAsMHgyYywweDQxLDB4MWIsMHgzMCwweDAyLDB4Y2MsMHgwMCwweDkzLDB4MDAgfSB9LAoreyAgMTYsIDB4OTk1MCwgMCwgezB4MmMsMHhjMCwweDBhLDB4MzAsMHg0MiwweDBjLDB4MDAsMHhiMiwweDQwLDB4MjAsMHhmMSwweDBiLDB4MzAsMHgwMiwweGM4LDB4MDQgfSB9LAoreyAgMTYsIDB4OTk2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiZCwweDQxLDB4Y2YsMHhjMCwweGJhLDB4ZjAgfSB9LAoreyAgMTYsIDB4OTk3MCwgMCwgezB4MjgsMHg5MCwweDFiLDB4NmMsMHgwOCwweGNmLDB4MDAsMHgyYywweGMwLDB4MGYsMHhmMCwweDAzLDB4YWMsMHgwMCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4OTk4MCwgMCwgezB4M2YsMHhjMCwweDZjLDB4YjAsMHg0YiwweDJjLDB4MDEsMHhmYiwweDQwLDB4MjIsMHhjOCwweDBmLDB4YjAsMHgwMywweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4OTk5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlYywweDA0LDB4ZmIsMHgwNCwweDNmLDB4ZDQgfSB9LAoreyAgMTYsIDB4OTlhMCwgMCwgezB4MGYsMHgxMCwweDAzLDB4YWMsMHgwMCwweGZiLDB4MDAsMHgzMiwweGMwLDB4NWYsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDQgfSB9LAoreyAgMTYsIDB4OTliMCwgMCwgezB4M2UsMHhjMCwweDRmLDB4MTAsMHgxMywweGVjLDB4MDAsMHhmYiwweDg4LDB4M2UsMHhjMCwweDRmLDB4YjAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTljMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhkYywweDAwLDB4YzcsMHgwMCwweDMzLDB4NjIgfSB9LAoreyAgMTYsIDB4OTlkMCwgMCwgezB4MGMsMHhjMCwweDBiLDB4M2MsMHgwMCwweGVmLDB4MDAsMHgzMywweGUwLDB4MWMsMHhmMCwweDEzLDB4M2MsMHgwOCwweGY3LDB4MDAgfSB9LAoreyAgMTYsIDB4OTllMCwgMCwgezB4MzEsMHhjMCwweDBlLDB4ZDgsMHgwMywweGJjLDB4MDAsMHhmZSwweDAwLDB4M2QsMHhjNiwweDBjLDB4ZjAsMHgwMywweGMwLDB4NDQgfSB9LAoreyAgMTYsIDB4OTlmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2YywweDAwLDB4Y2IsMHgwMywweDIyLDB4NDcgfSB9LAoreyAgMTYsIDB4OWEwMCwgMCwgezB4MDgsMHg5OCwweDQyLDB4MmMsMHgwMCwweDliLDB4MDAsMHgyYSwweGMwLDB4MGEsMHhiMCwweDAyLDB4MmMsMHgwMCwweGJiLDB4MDQgfSB9LAoreyAgMTYsIDB4OWExMCwgMCwgezB4MmEsMHhjMCwweDBhLDB4YjAsMHgwMiwweGFjLDB4MDgsMHhmYSwweDAwLDB4MmUsMHg2MCwweDA4LDB4YjAsMHgwMiwweGUwLDB4NDAgfSB9LAoreyAgMTYsIDB4OWEyMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OWIsMHgwMCwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4OWEzMCwgMCwgezB4MDgsMHg5OCwweDAyLDB4MmMsMHgwMCwweGJiLDB4MDAsMHgyMiwweDg4LDB4MDgsMHgzMCwweDAyLDB4MmMsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4OWE0MCwgMCwgezB4MjIsMHhjMCwweDhhLDB4OTIsMHgwMiwweGFjLDB4MDAsMHhhYSwweDgwLDB4MmUsMHhjMCwweDA4LDB4YjAsMHgwNiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OWE1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDAwLDB4ODMsMHgwMCwweGEwLDB4NDAgfSB9LAoreyAgMTYsIDB4OWE2MCwgMCwgezB4MDgsMHgxMCwweDAyLDB4MGMsMHgwMCwweGIzLDB4MDAsMHgyOCwweDgwLDB4MGEsMHgzMiwweDEyLDB4MGMsMHgwMCwweGIzLDB4MDQgfSB9LAoreyAgMTYsIDB4OWE3MCwgMCwgezB4MjgsMHhjMCwweDBhLDB4MzAsMHgyMiwweDhjLDB4MjAsMHhiMiwweDAwLDB4MmMsMHhjMCwweDA4LDB4MzAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4OWE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAyLDB4Y2IsMHgwMCwweDMwLDB4NDAgfSB9LAoreyAgMTYsIDB4OWE5MCwgMCwgezB4MWMsMHg5NCwweDAzLDB4MmMsMHgwMCwweGVmLDB4MDAsMHgzMiwweGMwLDB4ODgsMHhmMCwweDhiLDB4MmMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OWFhMCwgMCwgezB4MzMsMHhjMCwweGFlLDB4ZjAsMHgwMywweGFjLDB4ODAsMHhlYSwweDAxLDB4M2UsMHhjMCwweDJjLDB4YjAsMHgwMywweGMwLDB4MDMgfSB9LAoreyAgMTYsIDB4OWFiMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmYywweDAwLDB4ZmYsMHgwMCwweDJmLDB4NDAgfSB9LAoreyAgMTYsIDB4OWFjMCwgMCwgezB4MDcsMHhkMiwweDgzLDB4ZmMsMHgwMCwweGRmLDB4MDQsMHgzZiwweGMwLDB4MGYsMHhiMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4OWFkMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZDAsMHgwYiwweGVjLDB4MDAsMHhlZSwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZjAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4OWFlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmNSwweDAwLDB4Y2YsMHgwOCwweDNmLDB4NDggfSB9LAoreyAgMTYsIDB4OWFmMCwgMCwgezB4MGYsMHhjMywweDkzLDB4NzAsMHhkMCwweGRjLDB4MzAsMHgzZiwweGQ4LDB4MGMsMHhiMiwweDAzLDB4M2MsMHhjMCwweGZmLDB4NDAgfSB9LAoreyAgMTYsIDB4OWIwMCwgMCwgezB4MzMsMHhjNCwweDJjLDB4ZjEsMHgwMywweDYyLDB4NTAsMHhmYywweDM0LDB4MzMsMHgwMCwweDBmLDB4NWMsMHgwMywweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4OWIxMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhjNCwweDgwLDB4OGIsMHgwMCwweDJmLDB4NWEgfSB9LAoreyAgMTYsIDB4OWIyMCwgMCwgezB4MGIsMHhhNiwweDEyLDB4MjEsMHhjMCwweDg5LDB4NzAsMHgyZiwweGRjLDB4MDgsMHhmMiwweGMyLDB4M2QsMHhkMCwweGJmLDB4NDAgfSB9LAoreyAgMTYsIDB4OWIzMCwgMCwgezB4MzcsMHhkYywweDg4LDB4ZjUsMHgwYSwweDIwLDB4ODAsMHhlOCwweDEwLDB4MmEsMHgxNiwweDBiLDB4OTAsMHgwMiwweGUwLDB4MDQgfSB9LAoreyAgMTYsIDB4OWI0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjMCwweDAwLDB4ODMsMHgwOCwweDJjLDB4NDQgfSB9LAoreyAgMTYsIDB4OWI1MCwgMCwgezB4MGIsMHgwMiwweDAyLDB4MGMsMHgwMCwweDgwLDB4MDAsMHgyYywweGM4LDB4MDgsMHgzMywweDQyLDB4OGMsMHg5MCwweGIzLDB4MzAgfSB9LAoreyAgMTYsIDB4OWI2MCwgMCwgezB4MjgsMHhjOCwweDRhLDB4MzIsMHgxMiwweDgwLDB4MGMsMHhiMCwweGEwLDB4MjgsMHgyOCwweDBiLDB4MTIsMHgwMiwweGUyLDB4MDEgfSB9LAoreyAgMTYsIDB4OWI3MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhMiwweDAwLDB4OGIsMHgwMCwweDJlLDB4NDggfSB9LAoreyAgMTYsIDB4OWI4MCwgMCwgezB4MGIsMHhhMCwweDIyLDB4MjAsMHgyMCwweDg4LDB4ODAsMHgyZSwweGMwLDB4MjgsMHhiMCwweDBhLDB4YWMsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4OWI5MCwgMCwgezB4MmUsMHhjMCwweDBhLDB4YjAsMHgwMiwweGEwLDB4MDAsMHhhYiwweDgyLDB4MmEsMHhhMCwweDBiLDB4YjIsMHgwMiwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4OWJhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlNywweDAwLDB4Y2IsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4OWJiMCwgMCwgezB4Y2YsMHg5YywweDBiLDB4MjEsMHgwMCwweGQ4LDB4ODgsMHgzZSwweGMwLDB4MGMsMHhiMCwweDAzLDB4YWMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OWJjMCwgMCwgezB4M2EsMHhjMCwweDBlLDB4YjAsMHg0MywweGU4LDB4NDAsMHhmOCwweDgwLDB4M2EsMHg2MCwweDBmLDB4OTgsMHgwMywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4OWJkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiNCwweDAwLDB4ZmYsMHgwMCwweDBmLDB4ZTAgfSB9LAoreyAgMTYsIDB4OWJlMCwgMCwgezB4MDcsMHhhMSwweDAzLDB4ZTgsMHgwMiwweGZiLDB4MDAsMHgzZiwweGMwLDB4MGYsMHg3MCwweDIzLDB4N2MsMHgwMCwweGZmLDB4MDIgfSB9LAoreyAgMTYsIDB4OWJmMCwgMCwgezB4MzUsMHhjMCwweDRkLDB4YjAsMHgwMywweDc0LDB4MjAsMHhmYywweDAxLDB4M2YsMHgwMCwweDBmLDB4ZjgsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OWMwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhNSwweDAwLDB4Y2IsMHgwMCwweGJhLDB4NDAgfSB9LAoreyAgMTYsIDB4OWMxMCwgMCwgezB4MGMsMHgxNCwweDBiLDB4MmYsMHgyMiwweGM5LDB4NDAsMHgzMiwweGMwLDB4OGUsMHhiMCwweDAzLDB4YWMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4OWMyMCwgMCwgezB4M2UsMHhjMCwweDBlLDB4YjAsMHgwMywweGU0LDB4MDAsMHhjOSwweDAwLDB4MzIsMHgwMCwweDJjLDB4OTAsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4OWMzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDEsMHgyNCwweDAwLDB4OGYsMHgwMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4OWM0MCwgMCwgezB4MmMsMHhhNSwweDQyLDB4MjksMHgwMCwweDhiLDB4MDQsMHhhMywweGMxLDB4MGQsMHhmMCwweDBhLDB4M2MsMHgwMCwweGJmLDB4MDAgfSB9LAoreyAgMTYsIDB4OWM1MCwgMCwgezB4M2YsMHhjMCwweDA4LDB4ZjAsMHgwMSwweDY5LDB4MDAsMHhkYSwweDA1LDB4MjIsMHhkMCwweDA4LDB4OTQsMHgwMywweDcyLDB4MDAgfSB9LAoreyAgMTYsIDB4OWM2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg2MCwweDQwLDB4ODMsMHgwMSwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4OWM3MCwgMCwgezB4MDksMHgwMCwweDAyLDB4MjAsMHgwMCwweDgyLDB4NjAsMHgyMiwweGMwLDB4MDgsMHgzMCwweDQyLDB4NGMsMHgxMCwweGJiLDB4MDIgfSB9LAoreyAgMTYsIDB4OWM4MCwgMCwgezB4MmMsMHhjMCwweDA4LDB4YjAsMHgxMiwweDA1LDB4MDAsMHg5YiwweDAwLDB4MjAsMHg4MiwweDA5LDB4MzIsMHgwMiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4OWM5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxNiwweDkwLDB4ODcsMHg4MCwweDIwLDB4ZTAgfSB9LAoreyAgMTYsIDB4OWNhMCwgMCwgezB4MDgsMHg1OCwweDAyLDB4MTYsMHgxNCwweDg0LDB4ODEsMHgyMSwweGUwLDB4MjksMHgzOSwweDAyLDB4NWUsMHgwMCwweGI3LDB4ODAgfSB9LAoreyAgMTYsIDB4OWNiMCwgMCwgezB4MjgsMHhlMCwweDA4LDB4NzgsMHgwMiwweDdhLDB4ODAsMHg5NiwweDgxLDB4MjEsMHhlMCwweDA5LDB4ZjgsMHgwMiwweDQ4LDB4MDAgfSB9LAoreyAgMTYsIDB4OWNjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwOCwweDA5LDB4OGIsMHgxMCwweDM4LDB4NDQgfSB9LAoreyAgMTYsIDB4OWNkMCwgMCwgezB4NGQsMHgyNSwweDEyLDB4MGMsMHgwMCwweGMyLDB4MTAsMHgyMiwweGM4LDB4MGEsMHgzOCwweDAzLDB4Y2MsMHgwMCwweGYzLDB4MTAgfSB9LAoreyAgMTYsIDB4OWNlMCwgMCwgezB4MmMsMHhjMCwweDBjLDB4MzAsMHgwMywweDhhLDB4YzAsMHhkOSwweDEwLDB4MzIsMHg0MCwweDJkLDB4MTAsMHgwMywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4OWNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiYywweDgwLDB4ZmYsMHgwMCwweDNmLDB4NDAgfSB9LAoreyAgMTYsIDB4OWQwMCwgMCwgezB4MGYsMHhmMCwweDAzLDB4ZjQsMHg0MCwweGVkLDB4MDAsMHgzZiwweGMwLDB4MGUsMHhmMywweDAzLDB4YmMsMHgwNCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4OWQxMCwgMCwgezB4M2YsMHhjMiwweDBmLDB4ZjAsMHgwYiwweGQ0LDB4MDAsMHhmZiwweDEwLDB4YmYsMHg4MCwweDBlLDB4ZjAsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4OWQyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhmYSwweDAwLDB4Y2IsMHgwMiwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4OWQzMCwgMCwgezB4MGYsMHg5MCwweDAzLDB4YTAsMHgwMCwweGNiLDB4MDAsMHgzYSwweGNhLDB4MGMsMHhiMywweDEzLDB4YWYsMHgyNCwweGNiLDB4NDggfSB9LAoreyAgMTYsIDB4OWQ0MCwgMCwgezB4MWUsMHhjOCwweDBmLDB4YjYsMHgwMywweDJjLDB4MDAsMHhmYSwweDAwLDB4M2UsMHhjMCwweDBmLDB4OTAsMHgwMywweGVhLDB4MDAgfSB9LAoreyAgMTYsIDB4OWQ1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDA4LDB4ODcsMHgyMCwweDJkLDB4YzQgfSB9LAoreyAgMTYsIDB4OWQ2MCwgMCwgezB4MGIsMHg1MCwweDEyLDB4ZGMsMHgwNCwweDg3LDB4MDAsMHgyYywweGMwLDB4MDgsMHg3MCwweGEyLDB4MWQsMHgwMCwweGE3LDB4NDAgfSB9LAoreyAgMTYsIDB4OWQ3MCwgMCwgezB4MjUsMHhjYiwweDhiLDB4NzQsMHg4MiwweDFjLDB4MDAsMHhiNywweDAwLDB4MmQsMHhjMSwweDBiLDB4NzAsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4OWQ4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5YSwweDAxLDB4ODcsMHg5MCwweDJkLDB4ZTAgfSB9LAoreyAgMTYsIDB4OWQ5MCwgMCwgezB4MGIsMHg3OCwweDAyLDB4Y2UsMHgwMCwweDg2LDB4ODAsMHgyZCwweGU0LDB4MjksMHg3YSwweDAyLDB4OWUsMHg4MCwweDg3LDB4YTAgfSB9LAoreyAgMTYsIDB4OWRhMCwgMCwgezB4NmQsMHhlOCwweDBiLDB4NzgsMHgwMiwweDFlLDB4MDAsMHhiNSwweDgwLDB4MmQsMHg2MCwweDBiLDB4NzgsMHgwMiwweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4OWRiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjZCwweDAwLDB4ODMsMHgwMiwweDJjLDB4ZTAgfSB9LAoreyAgMTYsIDB4OWRjMCwgMCwgezB4MGIsMHgzMCwweDAyLDB4Y2MsMHgwMCwweDgzLDB4ZTAsMHgyYywweGMwLDB4MDgsMHgzMCwweDAyLDB4MGMsMHgwMCwweGEzLDB4MDAgfSB9LAoreyAgMTYsIDB4OWRkMCwgMCwgezB4MjQsMHhjMCwweDBiLDB4YjAsMHgwMiwweDBlLDB4MjAsMHhiMywweDA4LDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4OWRlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOCwweDgyLDB4Y2EsMHgwMCwweDNlLDB4YTggfSB9LAoreyAgMTYsIDB4OWRmMCwgMCwgezB4MGYsMHhlMCwweDAzLDB4ZjgsMHgwMiwweDhlLDB4ODAsMHgzZSwweDgwLDB4MGQsMHhhMCwweDViLDB4YTgsMHgwMCwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4OWUwMCwgMCwgezB4M2UsMHg4MCwweDBmLDB4YTAsMHgwMywweDNiLDB4ODAsMHhmZSwweDQyLDB4MmYsMHg4MCwweDBmLDB4YTgsMHgwMywweGZhLDB4MDQgfSB9LAoreyAgMTYsIDB4OWUxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDIwLDB4ZjgsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4OWUyMCwgMCwgezB4MGYsMHgwNiwweDAzLDB4YzAsMHgwMCwweGY4LDB4MTEsMHgzZSwweDAwLDB4MGYsMHgwMCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4OWUzMCwgMCwgezB4MzYsMHgwMCwweDBmLDB4ODAsMHgwYiwweGUwLDB4MDAsMHhmOCwweDA0LDB4M2UsMHgyMCwweDBmLDB4ODEsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4OWU0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4OWU1MCwgMCwgezB4MGMsMHg5YSwweDAzLDB4MjQsMHg0MCwweGM5LDB4YzAsMHgzZSwweDQwLDB4NGMsMHg5MCwweDAzLDB4MjQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4OWU2MCwgMCwgezB4MzYsMHg0MCwweDA3LDB4OTAsMHgwMywweDI0LDB4MDAsMHhjOSwweDA0LDB4MzIsMHg2MCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDQgfSB9LAoreyAgMTYsIDB4OWU3MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4YjksMHgwMiwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4OWU4MCwgMCwgezB4MGEsMHg5MiwweDAyLDB4MjUsMHgwMiwweDg5LDB4ZTAsMHgyZSwweDQwLDB4OTgsMHg5MCwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4OWU5MCwgMCwgezB4MjIsMHg0MCwweDA5LDB4OTAsMHgwMiwweDA0LDB4MDAsMHhkOSwweDAwLDB4MjIsMHg0NCwweDBiLDB4OWMsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4OWVhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyYywweDAwLDB4YjksMHgwMCwweDJjLDB4NDAgfSB9LAoreyAgMTYsIDB4OWViMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4MjQsMHgyOCwweDg5LDB4MDAsMHgyYywweDQwLDB4NjgsMHg5MCwweDQyLDB4MjQsMHgwYywweGIxLDB4MDQgfSB9LAoreyAgMTYsIDB4OWVjMCwgMCwgezB4MjYsMHg0MCwweDBiLDB4OTAsMHgwYSwweDJjLDB4ODAsMHg4MSwweDAwLDB4MjIsMHg0MCwweGNiLDB4OTIsMHg4MiwweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OWVkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDAwLDB4YjEsMHgyMCwweDJjLDB4NDggfSB9LAoreyAgMTYsIDB4OWVlMCwgMCwgezB4MGEsMHgxMiwweDAyLDB4MDQsMHg4MCwweDgxLDB4MjEsMHgyYywweDRjLDB4MDgsMHgxMSwweDAyLDB4MDQsMHgwOCwweGIxLDB4MTAgfSB9LAoreyAgMTYsIDB4OWVmMCwgMCwgezB4MjAsMHg0YywweDA5LDB4MTIsMHgwMiwweDI0LDB4MDEsMHg5MSwweDIwLDB4YTAsMHg0OCwweDBiLDB4MTAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4OWYwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg0MSwweGUwLDB4ZjgsMHg1MCwweDNlLDB4MTQgfSB9LAoreyAgMTYsIDB4OWYxMCwgMCwgezB4MGMsMHg4NSwweDAzLDB4MjEsMHg0MCwweGM4LDB4NTAsMHgzZSwweDEwLDB4MDgsMHgwNiwweDgzLDB4MDEsMHhmMCwweGY4LDB4NjggfSB9LAoreyAgMTYsIDB4OWYyMCwgMCwgezB4MzYsMHgxMCwweDBmLDB4MDUsMHgwMywweDI5LDB4NDAsMHhjOCwweDUwLDB4MzIsMHg5NCwweDBmLDB4ODUsMHgwMywweGVlLDB4MDMgfSB9LAoreyAgMTYsIDB4OWYzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhmNCwweDAwLDB4ZjksMHgxMCwweDNmLDB4NDQgfSB9LAoreyAgMTYsIDB4OWY0MCwgMCwgezB4MGYsMHhkMSwweDBiLDB4ZjQsMHg0MCwweGZkLDB4MTIsMHgyZSwweDRjLDB4MDMsMHg5MiwweDBiLDB4ZTQsMHgwMCwweGY5LDB4MjAgfSB9LAoreyAgMTYsIDB4OWY1MCwgMCwgezB4M2UsMHg0YywweDBmLDB4OTEsMHgwMywweGZjLDB4MDAsMHhmZCwweDEwLDB4M2YsMHg0NCwweDBmLDB4ZDAsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4OWY2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNiwweDIwLDB4YzksMHgwMSwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4OWY3MCwgMCwgezB4MGYsMHhkMCwweDAzLDB4M2MsMHgwMCwweGJkLDB4MDAsMHgzMiwweDYzLDB4MGMsMHg5ZSwweDQzLDB4MjcsMHgwMCwweGU5LDB4YzAgfSB9LAoreyAgMTYsIDB4OWY4MCwgMCwgezB4M2UsMHg2OCwweDBjLDB4OTgsMHgwMywweDM0LDB4MDAsMHhmOSwweDEwLDB4M2YsMHg0MCwweDBmLDB4ZDAsMHgwMywweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4OWY5MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhjMiwweDIwLDB4ZDgsMHgwMCwweDJlLDB4MDAgfSB9LAoreyAgMTYsIDB4OWZhMCwgMCwgezB4MGIsMHg4MCwweDUyLDB4MjgsMHgwNCwweGI4LDB4MDAsMHgyMiwweDM4LDB4MDgsMHg4OCwweDAzLDB4NjIsMHgwMCwweDg4LDB4ZjAgfSB9LAoreyAgMTYsIDB4OWZiMCwgMCwgezB4MmUsMHgzYSwweDQ4LDB4OGYsMHgwYSwweDIwLDB4MDAsMHhiMCwweDgwLDB4MmUsMHgwMCwweDBiLDB4ODAsMHgwMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4OWZjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDgwLDB4ODEsMHgwMCwweDJjLDB4NDAgfSB9LAoreyAgMTYsIDB4OWZkMCwgMCwgezB4MGIsMHgxMCwweDAyLDB4MDQsMHgwMCwweGIxLDB4MDAsMHgyMCwweDQyLDB4NDgsMHgxNCwweDQyLDB4MDUsMHg4MCwweGExLDB4MjAgfSB9LAoreyAgMTYsIDB4OWZlMCwgMCwgezB4MmMsMHg0NCwweDA4LDB4MTAsMHg4MiwweDA0LDB4MDAsMHhiMSwweDIwLDB4MmMsMHg0MCwweDBiLDB4MTAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4OWZmMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNSwweDAxLDB4OTksMHgwMCwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4YTAwMCwgMCwgezB4MGIsMHg5MCwweDAyLDB4MjQsMHg0MCwweGJiLDB4MDEsMHgyMiwweDQxLDB4MDgsMHg5MCwweDEyLDB4MjQsMHgwMCwweGE5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTAxMCwgMCwgezB4MmMsMHg0MCwweDA4LDB4MTAsMHg0MCwweDI0LDB4MDgsMHhiOSwweDQwLDB4NmUsMHg1MCwweDBiLDB4OTIsMHgwMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4YTAyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNywweDE0LDB4YzksMHgwNSwweDNlLDB4NDEgfSB9LAoreyAgMTYsIDB4YTAzMCwgMCwgezB4MGYsMHg5MCwweDBiLDB4MjQsMHgwNCwweGY5LDB4MDgsMHhiMiwweDQwLDB4MmMsMHg5MCwweDBhLDB4MjQsMHgwMCwweGU5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTA0MCwgMCwgezB4M2UsMHg0MCwweDJjLDB4OTAsMHgwMywweDI3LDB4MDAsMHhmOSwweDgwLDB4M2UsMHg2MCwweDBmLDB4OTAsMHgwMywweGU4LDB4MDQgfSB9LAoreyAgMTYsIDB4YTA1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHg4NCwweDg4LDB4ZjksMHgwMCwweDNlLDB4NDggfSB9LAoreyAgMTYsIDB4YTA2MCwgMCwgezB4MGYsMHg5OSwweDAzLDB4ZTYsMHgwMCwweGY5LDB4MDIsMHgzYywweDQwLDB4YWYsMHgxMCwweDAzLDB4ZTQsMHgxMiwweGQ5LDB4MDQgfSB9LAoreyAgMTYsIDB4YTA3MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGU1LDB4MDAsMHhmOSwweGMwLDB4M2UsMHg2NCwweDBmLDB4OTAsMHg4MywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTA4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMSwweDAwLDB4YzgsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YTA5MCwgMCwgezB4MGYsMHg4MCwweDAzLDB4MjEsMHgwMCwweGM4LDB4NDAsMHhiMiwweDAwLDB4MGMsMHg4MCwweDAzLDB4MjAsMHgxMCwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTBhMCwgMCwgezB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMywweGUwLDB4ODAsMHhmOCwweDA0LDB4MzIsMHgwMCwweDJjLDB4ODAsMHgwYiwweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4YTBiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDAwLDB4Y2EsMHgwMCwweDJlLDB4ODAgfSB9LAoreyAgMTYsIDB4YTBjMCwgMCwgezB4MGIsMHhlOCwweDBhLDB4MzgsMHgxMCwweDhlLDB4YzAsMHgyMiwweDgwLDB4MGQsMHhhMCwweDAyLDB4MjgsMHgwMCwweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4YTBkMCwgMCwgezB4MDIsMHg4MCwweDI4LDB4YTAsMHgwMiwweGZiLDB4MDAsMHhiYSwweDAwLDB4MzcsMHhiMCwweDQ4LDB4ZWEsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTBlMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4OTMsMHgwMSwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YTBmMCwgMCwgezB4OGIsMHhiMCwweDQyLDB4MGMsMHg5MCwweDliLDB4MjAsMHgyMCwweGMwLDB4NDgsMHgzMCwweDQyLDB4MmMsMHgwMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4YTEwMCwgMCwgezB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweGNkLDB4NDAsMHhiMywweDAwLDB4MjQsMHhjOCwweDA4LDB4MzgsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTExMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxNCwweDAwLDB4ODcsMHgwMCwweDJkLDB4YzAgfSB9LAoreyAgMTYsIDB4YTEyMCwgMCwgezB4MGIsMHgyNCwweDA2LDB4MTYsMHgwMCwweDkzLDB4MDgsMHgyMSwweGM4LDB4MDksMHgzMSwweDAyLDB4MGMsMHg4MCwweDg3LDB4YTAgfSB9LAoreyAgMTYsIDB4YTEzMCwgMCwgezB4MjEsMHhjMCwweDE4LDB4NzIsMHgwMiwweGRjLDB4MDAsMHhiNywweGI0LDB4MjQsMHhlMywweDA4LDB4NzgsMHgwMiwweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTE0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAyLDB4OTcsMHhhMCwweDNkLDB4ZjAgfSB9LAoreyAgMTYsIDB4YTE1MCwgMCwgezB4MGYsMHg0OCwweDAzLDB4M2UsMHgwMCwweGQ2LDB4ODAsMHgzMCwweGUwLDB4MmMsMHg3YSwweDAyLDB4MWUsMHg4MiwweGMzLDB4ZjAgfSB9LAoreyAgMTYsIDB4YTE2MCwgMCwgezB4MzMsMHhlYywweDBjLDB4N2MsMHgwMywweGQ2LDB4MDAsMHhmNywweDgwLDB4MzUsMHhlMCwweDBjLDB4ZDgsMHgwMywweDJhLDB4MDIgfSB9LAoreyAgMTYsIDB4YTE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTksMHhhNSwweGEwLDB4ZmIsMHgwMCwweDNlLDB4Y2EgfSB9LAoreyAgMTYsIDB4YTE4MCwgMCwgezB4MGYsMHg4MCwweDAzLDB4ZWMsMHgwMiwweGVhLDB4MDAsMHgzZSwweGM2LDB4MGYsMHhiNCwweDBiLDB4ZWQsMHg0MCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4YTE5MCwgMCwgezB4YmUsMHhjMCwweDBmLDB4YjYsMHg0MywweGUwLDB4MDAsMHhmYiwweDAyLDB4M2UsMHg4MCwweDBmLDB4OTAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4YTFhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAyLDB4Y2YsMHg4OCwweDNmLDB4ZTAgfSB9LAoreyAgMTYsIDB4YTFiMCwgMCwgezB4MGMsMHhiOSwweDAzLDB4ZmUsMHgwMCwweGRkLDB4ODEsMHgzMywweGUwLDB4OGMsMHhmYywweDAzLDB4M2YsMHgwNCwweGNmLDB4ODAgfSB9LAoreyAgMTYsIDB4YTFjMCwgMCwgezB4MzMsMHhlMiwweDRmLDB4ZmMsMHgwMywweDNlLDB4MDAsMHhjZiwweGMwLDB4MzMsMHg2NCwweDBjLDB4ZjgsMHgwMywweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTFkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5NCwweDQwLDB4ODcsMHgwMCwweDJmLDB4YzEgfSB9LAoreyAgMTYsIDB4YTFlMCwgMCwgezB4MGQsMHg2OSwweGEyLDB4ZDAsMHg0MCwweGJjLDB4MDAsMHgyMywweGMwLDB4MDgsMHhmMCwweDAyLDB4OWMsMHgwMCwweDg3LDB4MDAgfSB9LAoreyAgMTYsIDB4YTFmMCwgMCwgezB4MjEsMHhjMCwweDBiLDB4NzAsMHgwYSwweDNjLDB4MDQsMHg4NywweDEwLDB4MjEsMHg0YywweDA4LDB4NjAsMHgwMiwweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4YTIwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5ZSwweDAwLDB4ODcsMHgwMCwweDJkLDB4YzAgfSB9LAoreyAgMTYsIDB4YTIxMCwgMCwgezB4MDksMHg2MiwweDAyLDB4ZDgsMHgwMCwweDk3LDB4MDAsMHgyMSwweGM0LDB4MDgsMHg3MCwweDAyLDB4MGMsMHg0MCwweDk3LDB4MDAgfSB9LAoreyAgMTYsIDB4YTIyMCwgMCwgezB4MjEsMHhjNCwweDBiLDB4MzAsMHgwMiwweDU4LDB4MDAsMHhhNywweDA4LDB4MjEsMHg4MCwweDA4LDB4NjAsMHg4MiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTIzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhlNCwweDI1LDB4ODMsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YTI0MCwgMCwgezB4MDksMHgyMiwweDAyLDB4Y2MsMHgyMCwweGIyLDB4MDAsMHgyMCwweGMwLDB4MjgsMHhiMCwweDAyLDB4OGMsMHgwMCwweDkzLDB4MDAgfSB9LAoreyAgMTYsIDB4YTI1MCwgMCwgezB4MjAsMHhjMCwweDBiLDB4MzAsMHg0MiwweDZjLDB4MjAsMHg4MywweDA4LDB4MjAsMHhlMiwweDA4LDB4YjgsMHgwMiwweGM4LDB4MDQgfSB9LAoreyAgMTYsIDB4YTI2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhNCwweDAwLDB4Y2YsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YTI3MCwgMCwgezB4MGQsMHg5YywweDAzLDB4ZTgsMHgwMCwweGRiLDB4ODAsMHgzMywweGMwLDB4MGMsMHhmMCwweDBiLDB4M2MsMHgwNiwweGRmLDB4MDAgfSB9LAoreyAgMTYsIDB4YTI4MCwgMCwgezB4YjMsMHhjMCwweDBiLDB4ZjAsMHgwNywweDY4LDB4MDAsMHhlZiwweDQwLDB4MzIsMHhhOCwweDBjLDB4YTgsMHgwMywweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4YTI5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwMCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4YTJhMCwgMCwgezB4MGYsMHg5NCwweDAzLDB4YzUsMHg0MCwweGZhLDB4MzAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4NmMsMHgwMCwweGViLDB4MDAgfSB9LAoreyAgMTYsIDB4YTJiMCwgMCwgezB4M2UsMHhjMCwweDBmLDB4MzAsMHgxMywweGFkLDB4NDAsMHhmYiwweDAyLDB4M2UsMHhkMCwweDBmLDB4YjQsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTJjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhlNCwweDAwLDB4YzcsMHgwMCwweDMxLDB4YzEgfSB9LAoreyAgMTYsIDB4YTJkMCwgMCwgezB4OGMsMHhkMCwweDAzLDB4MzQsMHgwMCwweGNkLDB4MDAsMHgzZCwweGMwLDB4MGMsMHhmMCwweDAxLDB4N2MsMHgwMCwweGRiLDB4MDEgfSB9LAoreyAgMTYsIDB4YTJlMCwgMCwgezB4M2QsMHhjMCwweDRjLDB4ZjAsMHgwYiwweDMwLDB4MDIsMHhjMywweDAwLDB4MzIsMHgwMCwweDBmLDB4ZDAsMHgwMywweDAwLDB4NDQgfSB9LAoreyAgMTYsIDB4YTJmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2ZSwweDQwLDB4OGIsMHgwMCwweDJhLDB4YzAgfSB9LAoreyAgMTYsIDB4YTMwMCwgMCwgezB4MjgsMHg4NCwweDQyLDB4MjIsMHg4MCwweDg4LDB4ODAsMHgzYSwweGMwLDB4MGQsMHhiMCwweDAyLDB4YWMsMHgwOCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4YTMxMCwgMCwgezB4MmUsMHhjMCwweDA4LDB4YjAsMHgwMiwweDIzLDB4MjAsMHg4YiwweDAwLDB4MjIsMHgzMCwweDhiLDB4OGMsMHgwMiwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4YTMyMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyNCwweDAwLDB4OGIsMHgwMCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4YTMzMCwgMCwgezB4MDgsMHgzOCwweDg2LDB4MmEsMHgwMCwweDg5LDB4ODAsMHgyYSwweGMwLDB4MDgsMHhiMCwweDAyLDB4Y2MsMHgwMCwweDliLDB4MDAgfSB9LAoreyAgMTYsIDB4YTM0MCwgMCwgezB4MmUsMHhjMCwweDA4LDB4YjAsMHg0MiwweDI2LDB4MDAsMHg4YiwweDAwLDB4MjIsMHg3MSwweDBiLDB4OGMsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTM1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDAwLDB4ODMsMHgwMCwweDI4LDB4YzAgfSB9LAoreyAgMTYsIDB4YTM2MCwgMCwgezB4MDgsMHgzMiwweDQyLDB4MDAsMHgwMCwweDgxLDB4MDAsMHgyOCwweGMwLDB4MDksMHgzMCwweDUyLDB4OGMsMHgwOCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4YTM3MCwgMCwgezB4MmMsMHhjMCwweDE4LDB4MzAsMHgwNiwweDAwLDB4MDAsMHg4MywweDAwLDB4YTAsMHgwMCwweDBiLDB4MDAsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YTM4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg3NCwweDAyLDB4OGIsMHgwMCwweDMzLDB4YzAgfSB9LAoreyAgMTYsIDB4YTM5MCwgMCwgezB4MGMsMHg5MiwweDBiLDB4MjAsMHgwMiwweGM4LDB4MDAsMHgzYiwweGMwLDB4MGMsMHhmNSwweDAzLDB4ZmMsMHgwMCwweGRmLDB4MDEgfSB9LAoreyAgMTYsIDB4YTNhMCwgMCwgezB4M2YsMHhjMSwweDA0LDB4ZjAsMHgzMywweDIxLDB4NDAsMHhjZiwweDAwLDB4MzIsMHgwMCwweDBmLDB4ODAsMHgwYiwweDAwLDB4MDMgfSB9LAoreyAgMTYsIDB4YTNiMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTksMHhmYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YTNjMCwgMCwgezB4MGYsMHhjNCwweDAzLDB4ZjAsMHgwMCwweDljLDB4MDAsMHgzYiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YTNkMCwgMCwgezB4MmYsMHhjMCwweDBmLDB4ZjAsMHgwMywweGYwLDB4ODAsMHhmZiwweDAwLDB4M2YsMHgwMCwweDBmLDB4YzAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4YTNlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmMCwweGMwLDB4ZmYsMHhhMCwweDMxLDB4MjQgfSB9LAoreyAgMTYsIDB4YTNmMCwgMCwgezB4MGUsMHhmMCwweDYzLDB4MTAsMHgwNCwweGVmLDB4NjQsMHgzZiwweGMwLDB4NGMsMHhmMywweDAzLDB4MWMsMHg4MCwweGRmLDB4MDggfSB9LAoreyAgMTYsIDB4YTQwMCwgMCwgezB4MzcsMHhjMCwweDBmLDB4ZjAsMHgwMywweGYwLDB4YTAsMHhmYywweDAwLDB4MzEsMHgwOCwweDJjLDB4ZDIsMHgwMywweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTQxMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlMSwweDAwLDB4YmIsMHhjMSwweDIyLDB4NDggfSB9LAoreyAgMTYsIDB4YTQyMCwgMCwgezB4MDgsMHhmZCwweDAyLDB4MmUsMHgwMCwweDk3LDB4MDAsMHgyZiwweGMyLDB4NDgsMHg3MSwweDIzLDB4N2UsMHg0MCwweGJmLDB4MDAgfSB9LAoreyAgMTYsIDB4YTQzMCwgMCwgezB4MjEsMHhjNSwweDRiLDB4ZjUsMHgwMiwweGVmLDB4MDAsMHhiYiwweDQwLDB4MzYsMHhlMCwweDA4LDB4YTgsMHgwMiwweGUwLDB4MDQgfSB9LAoreyAgMTYsIDB4YTQ0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjNSwweDg0LDB4YjMsMHgxMSwweGEyLDB4YzkgfSB9LAoreyAgMTYsIDB4YTQ1MCwgMCwgezB4MGEsMHgzMCwweDAyLDB4MDAsMHgwMSwweGIzLDB4MzAsMHgyOCwweGM0LDB4MDgsMHgzMiwweDQyLDB4MGMsMHgwMCwweGEzLDB4MDggfSB9LAoreyAgMTYsIDB4YTQ2MCwgMCwgezB4YTAsMHhjYSwweDBhLDB4MzIsMHg4MiwweDgwLDB4MTAsMHhiMCwweDQxLDB4MjQsMHgxMSwweDA4LDB4MzEsMHgwMiwweGUyLDB4MDEgfSB9LAoreyAgMTYsIDB4YTQ3MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhNSwweDAwLDB4YmIsMHgwMCwweDIyLDB4ZTEgfSB9LAoreyAgMTYsIDB4YTQ4MCwgMCwgezB4MjgsMHhiMCwweDAyLDB4MmMsMHg4MCwweDliLDB4MDAsMHgyZSwweGMwLDB4MDgsMHhiMCwweDAyLDB4NmMsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YTQ5MCwgMCwgezB4MjIsMHhjMCwweDBiLDB4YjAsMHgwMCwweGVjLDB4MjAsMHhiYiwweDAwLDB4MjYsMHhjMCwweDA4LDB4ODAsMHgwMiwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4YTRhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlMywweDQwLDB4ZjcsMHgwNCwweDMyLDB4YzAgfSB9LAoreyAgMTYsIDB4YTRiMCwgMCwgezB4NGUsMHhiMCwweDIzLDB4MmUsMHgyMCwweGViLDB4MDAsMHgxZSwweGMwLDB4MGMsMHhiMCwweDAxLDB4MmMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4YTRjMCwgMCwgezB4MzYsMHhjMCwweDFmLDB4YjAsMHgwMywweGUxLDB4NDAsMHhmYiwweDAwLDB4MzYsMHg5OCwweDBjLDB4OTAsMHgwMywweGQwLDB4MDQgfSB9LAoreyAgMTYsIDB4YTRkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiNiwweDA0LDB4ZmYsMHgwMiwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YTRlMCwgMCwgezB4MGYsMHhmMCwweDAzLDB4ZmUsMHgwMCwweGVmLDB4MDIsMHgzZCwweGMwLDB4MGYsMHhmMCwweDIzLDB4ZmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YTRmMCwgMCwgezB4M2YsMHhjMCwweDRmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmNCwweDAwLDB4M2IsMHg0MCwweDBmLDB4YTAsMHgxMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTUwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYSwweDIwLDB4ZWIsMHgxMCwweDM2LDB4YzAgfSB9LAoreyAgMTYsIDB4YTUxMCwgMCwgezB4MGQsMHhiMCwweDA3LDB4ZWMsMHgyMCwweGRiLDB4MDAsMHgzMiwweGMwLDB4MGMsMHhiMCwweDAyLDB4NmMsMHgyMCwweGViLDB4MDAgfSB9LAoreyAgMTYsIDB4YTUyMCwgMCwgezB4M2UsMHhjMSwweDBkLDB4YjAsMHgwMywweGUwLDB4MjAsMHhkYiwweGEwLDB4MzIsMHg5MCwweDRjLDB4YjAsMHgwYiwweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YTUzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyZCwweDAwLDB4OGYsMHg4MCwweDIwLDB4YzEgfSB9LAoreyAgMTYsIDB4YTU0MCwgMCwgezB4MDgsMHg3MCwweDEyLDB4Y2YsMHgwMCwweDhmLDB4MDAsMHhhMywweGMwLDB4MGQsMHhmMCwweDAyLDB4M2MsMHgwMCwweDhmLDB4MDAgfSB9LAoreyAgMTYsIDB4YTU1MCwgMCwgezB4MzcsMHhjMCwweDg4LDB4ZjAsMHgwMiwweGVjLDB4MDAsMHg4OCwweDAwLDB4MjAsMHg0MCwweDA4LDB4ODAsMHgwMiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4YTU2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YywweDAwLDB4YTMsMHg4MCwweDI0LDB4ODEgfSB9LAoreyAgMTYsIDB4YTU3MCwgMCwgezB4MDksMHgzMCwweDA2LDB4Y2MsMHg0MCwweDkzLDB4MDAsMHgyOCwweGMxLDB4MDgsMHhiMCwweDAyLDB4Y2YsMHg0MCwweGEzLDB4MDAgfSB9LAoreyAgMTYsIDB4YTU4MCwgMCwgezB4MmMsMHhjMCwweDA5LDB4MzAsMHgwMiwweGNkLDB4MDAsMHg5MCwweDQwLDB4NjAsMHg0MCwweDI4LDB4MTAsMHgwMiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTU5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgwZSwweDAwLDB4ODcsMHg4MCwweDIzLDB4ZTAgfSB9LAoreyAgMTYsIDB4YTVhMCwgMCwgezB4NDgsMHg3OSwweDAyLDB4ZGUsMHg0MSwweDk3LDB4ODAsMHgyOSwweGUwLDB4MTksMHg3OCwweDA2LDB4OWUsMHgwMCwweDg3LDB4ODAgfSB9LAoreyAgMTYsIDB4YTViMCwgMCwgezB4MjUsMHhlMCwweDA4LDB4NzgsMHgwMiwweGQyLDB4MDMsMHg4MywweDgwLDB4MjEsMHhhMCwweDA4LDB4NjgsMHgwMiwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTVjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4YTMsMHgwMCwweDM0LDB4YzAgfSB9LAoreyAgMTYsIDB4YTVkMCwgMCwgezB4MGQsMHgzMCwweDQyLDB4Y2MsMHgwMSwweGQzLDB4MTAsMHgzYSwweGM1LDB4MGMsMHgzOSwweDAzLDB4Y2MsMHgwMCwweGUzLDB4MDQgfSB9LAoreyAgMTYsIDB4YTVlMCwgMCwgezB4M2MsMHhjNCwweDBkLDB4MzAsMHgwMywweGNlLDB4MDAsMHhkMCwweDAwLDB4MzAsMHg0MCwweDBjLDB4MzAsMHgwMywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4YTVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiYywweDAwLDB4ZjcsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YTYwMCwgMCwgezB4MWYsMHhmMCwweDUzLDB4ZmMsMHgwMCwweGVmLDB4MDgsMHgzNywweGQxLDB4MGYsMHhmMCwweDgzLDB4N2MsMHgwMCwweGY3LDB4NDAgfSB9LAoreyAgMTYsIDB4YTYxMCwgMCwgezB4M2YsMHhjMSwweDBmLDB4ZjEsMHgwMywweGQwLDB4MDAsMHhmZiwweDAwLDB4YmYsMHg4NCwweDBmLDB4YzgsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4YTYyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlMCwweDAwLDB4ZmIsMHgwMCwweDNlLDB4ZTAgfSB9LAoreyAgMTYsIDB4YTYzMCwgMCwgezB4MmMsMHhiZSwweDgzLDB4ZWMsMHgwMCwweGViLDB4NDAsMHgzZSwweGMwLDB4MGYsMHhiNCwweDAzLDB4ZWQsMHgyMCwweGZiLDB4MTAgfSB9LAoreyAgMTYsIDB4YTY0MCwgMCwgezB4YjYsMHhkMiwweDBmLDB4YjQsMHg4MywweGVjLDB4MDAsMHhkYiwweDgwLDB4MzYsMHhjMSwweDBjLDB4OTAsMHgyMSwweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTY1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5NCwweDAwLDB4YjcsMHgwMCwweDJmLDB4YzAgfSB9LAoreyAgMTYsIDB4YTY2MCwgMCwgezB4MDgsMHgzNiwweDAyLDB4MGMsMHgwOCwweDg3LDB4MzAsMHgyZCwweGQ5LDB4OGIsMHg3MiwweDg2LDB4ZGQsMHgwMCwweGIzLDB4MjAgfSB9LAoreyAgMTYsIDB4YTY3MCwgMCwgezB4MjEsMHhjOCwweDBiLDB4NzQsMHgwMiwweGQwLDB4MDIsMHg4NCwweDAwLDB4YTAsMHgwMCwweDI4LDB4MjAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4YTY4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5YSwweDAwLDB4YjcsMHg4MCwweDJkLDB4ZTAgfSB9LAoreyAgMTYsIDB4YTY5MCwgMCwgezB4MDgsMHg3YSwweDAyLDB4OWQsMHgwMCwweGE3LDB4YTAsMHgyZCwweGUwLDB4MGIsMHg3OCwweDAyLDB4OWUsMHg4MCwweGE3LDB4ODAgfSB9LAoreyAgMTYsIDB4YTZhMCwgMCwgezB4MjEsMHhlNCwweDA4LDB4N2EsMHgyNiwweDllLDB4MTgsMHg4MywweDA0LDB4MjEsMHhlMCwweDA4LDB4NzgsMHgwYSwweDcwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTZiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDAwLDB4YjMsMHgwMCwweDJjLDB4ZTAgfSB9LAoreyAgMTYsIDB4YTZjMCwgMCwgezB4NTgsMHgzMCwweDEyLDB4MGUsMHg4MiwweDgzLDB4MDAsMHgyYywweGMwLDB4MGIsMHgzMCwweDAyLDB4Y2MsMHgwMSwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YTZkMCwgMCwgezB4MjAsMHhjMSwweDBiLDB4MzAsMHgwMiwweGMwLDB4MDgsMHg4OCwweGQyLDB4MjAsMHgyMCwweDA4LDB4MDAsMHgwMiwweDUyLDB4MDQgfSB9LAoreyAgMTYsIDB4YTZlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOCwweDYwLDB4ZmEsMHgwMCwweDNmLDB4ODIgfSB9LAoreyAgMTYsIDB4YTZmMCwgMCwgezB4MGMsMHhhMCwweDAzLDB4ZmEsMHgwMCwweGFhLDB4MDAsMHgxZSwweDgwLDB4OGYsMHhhMCwweDAzLDB4ZTgsMHgwMCwweGYyLDB4MDAgfSB9LAoreyAgMTYsIDB4YTcwMCwgMCwgezB4MzIsMHg4MCwweDFmLDB4YTAsMHgwMywweGU4LDB4MDAsMHhkYSwweDAwLDB4MzYsMHg4OCwweGFjLDB4ZTAsMHgwMywweDdhLDB4MDQgfSB9LAoreyAgMTYsIDB4YTcxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMSwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MjAgfSB9LAoreyAgMTYsIDB4YTcyMCwgMCwgezB4NGYsMHg4MCwweDAzLDB4ZTEsMHgwMCwweGYwLDB4MDAsMHgzYywweDAwLDB4MGIsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDIgfSB9LAoreyAgMTYsIDB4YTczMCwgMCwgezB4M2EsMHgwMCwweDBmLDB4ODAsMHg0MywweGYxLDB4MDAsMHhmYywweDBhLDB4M2QsMHgwMCwweDBmLDB4YzAsMHgwMywweDkyLDB4MDAgfSB9LAoreyAgMTYsIDB4YTc0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNiwweDAwLDB4YzksMHg5MCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4YTc1MCwgMCwgezB4MGYsMHg5MiwweDAzLDB4ZTQsMHgwMCwweGQ5LDB4MDAsMHgzMiwweDQwLDB4MDQsMHg5MCwweDA3LDB4ZTcsMHgwMCwweGY5LDB4MTAgfSB9LAoreyAgMTYsIDB4YTc2MCwgMCwgezB4MzAsMHg0MCwweDBjLDB4OTAsMHg0MywweGU0LDB4MDksMHhkOSwweDgwLDB4MjIsMHg0MCwweDJjLDB4MTAsMHgwYiwweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4YTc3MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDYwLDB4ODksMHhjMCwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4YTc4MCwgMCwgezB4MGIsMHg5OCwweDI2LDB4YzUsMHg4MCwweDg5LDB4MDAsMHgyMiwweDQwLDB4MjgsMHg5MCwweDEyLDB4ZTcsMHgxMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTc5MCwgMCwgezB4MzYsMHg0MCwweDI4LDB4OTAsMHgxMiwweGM1LDB4ODMsMHhjOSwweDgwLDB4YjYsMHg0MCwweDA4LDB4OTAsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YTdhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgwNCwweDAwLDB4ODksMHg0MCwweDJlLDB4NDEgfSB9LAoreyAgMTYsIDB4YTdiMCwgMCwgezB4NGIsMHg5MCwweDAyLDB4ZTQsMHgwMCwweDk5LDB4MDAsMHhhMiwweDQwLDB4MGEsMHg5MCwweDAyLDB4ZTUsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTdjMCwgMCwgezB4ZTIsMHg0MSwweDA4LDB4OTAsMHg0MiwweGU0LDB4MDAsMHg5ZCwweDUwLDB4YWIsMHg0YSwweDA4LDB4ZDAsMHgyNiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YTdkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDgyLDB4ODEsMHgyMCwweDJjLDB4NTAgfSB9LAoreyAgMTYsIDB4YTdlMCwgMCwgezB4MGIsMHgxMCwweDAyLDB4ZTQsMHgwMCwweDgxLDB4NDAsMHgyMCwweDUwLDB4NGEsMHgxNCwweDMyLDB4YzQsMHgwMCwweGIxLDB4NDAgfSB9LAoreyAgMTYsIDB4YTdmMCwgMCwgezB4MjQsMHg1MSwweDE4LDB4MTQsMHgxMiwweGQ0LDB4MDAsMHg4NSwweDQwLDB4MmQsMHg0MCwweDA4LDB4NTAsMHgwNiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YTgwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4YzgsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YTgxMCwgMCwgezB4MGYsMHg4MCwweDAyLDB4ZTAsMHgwMCwweGQ4LDB4MDAsMHgzMiwweDAwLDB4MGEsMHg4MCwweDAyLDB4ZTAsMHgxMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTgyMCwgMCwgezB4MzIsMHgwMCwweDA0LDB4ODAsMHgwMywweGUwLDB4MDAsMHhkOCwweDAwLDB4M2EsMHgwMCwweDBjLDB4YzAsMHgwMywweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4YTgzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhmNCwweDQwLDB4ZjksMHgxMCwweDNmLDB4NDEgfSB9LAoreyAgMTYsIDB4YTg0MCwgMCwgezB4MGYsMHg5NCwweDAzLDB4ZjUsMHgwMCwweGY5LDB4NDAsMHgzZSwweDUwLDB4MGQsMHg5NCwweDAzLDB4ZTUsMHgxMCwweGY5LDB4NDAgfSB9LAoreyAgMTYsIDB4YTg1MCwgMCwgezB4M2UsMHg1MCwweDRmLDB4OTQsMHgwMywweGM1LDB4MDAsMHhlOSwweDQxLDB4MzYsMHg1MCwweDBmLDB4OTQsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4YTg2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNiwweDAwLDB4ZmQsMHhhOCwweDNhLDB4NDAgfSB9LAoreyAgMTYsIDB4YTg3MCwgMCwgezB4MGMsMHhkOCwweDIzLDB4MzYsMHgwMCwweGU5LDB4YTAsMHgzZSwweDc4LDB4MGYsMHg5ZSwweDAzLDB4YjYsMHg4MCwweGNkLDB4ZTIgfSB9LAoreyAgMTYsIDB4YTg4MCwgMCwgezB4MzIsMHg2OCwweDBjLDB4OWIsMHgwMywweDM2LDB4ODIsMHg0ZCwweGEwLDB4MzcsMHg2OCwweDhjLDB4OTgsMHgwMywweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YTg5MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlYiwweGEwLDB4YjgsMHg0MCwweDIwLDB4MjAgfSB9LAoreyAgMTYsIDB4YThhMCwgMCwgezB4MDgsMHg4NSwweDAyLDB4MjEsMHg1MSwweDg4LDB4YzAsMHgyZSwweDI5LDB4MGIsMHg4ZSwweDAyLDB4ZTEsMHgwMCwweGQ4LDB4ZTAgfSB9LAoreyAgMTYsIDB4YThiMCwgMCwgezB4MjIsMHgzMiwweDBkLDB4OGQsMHgyMywweDYxLDB4NDgsMHg5OCwweGQ0LDB4YTIsMHgxMCwweDI4LDB4ODQsMHgwMiwweDBlLDB4MDQgfSB9LAoreyAgMTYsIDB4YThjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDAwLDB4YjMsMHgwMCwweDJhLDB4NGEgfSB9LAoreyAgMTYsIDB4YThkMCwgMCwgezB4MjgsMHgxMCwweDRlLDB4YTQsMHgwOCwweGExLDB4NjgsMHgyOCwweDQ0LDB4MGIsMHgxNCwweDAyLDB4YzUsMHgwMCwweDgxLDB4NDAgfSB9LAoreyAgMTYsIDB4YThlMCwgMCwgezB4YTAsMHg1MCwweDA4LDB4MTAsMHgwMiwweDA0LDB4MDIsMHg5MSwweDJhLDB4MjAsMHg0NCwweDI4LDB4MTQsMHg0YSwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YThmMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhYywweDgwLDB4YjksMHgwMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4YTkwMCwgMCwgezB4NDgsMHg5MCwweDA2LDB4YTQsMHgwMCwweGE5LDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDIyLDB4ZTQsMHgwMCwweDk5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTkxMCwgMCwgezB4MjIsMHg0MCwweDA5LDB4MTAsMHgwMiwweDY0LDB4MDIsMHg5OSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweDA2LDB4MDQgfSB9LAoreyAgMTYsIDB4YTkyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZjksMHgwMCwweDM4LDB4NTggfSB9LAoreyAgMTYsIDB4YTkzMCwgMCwgezB4MGMsMHg5MCwweDUzLDB4ODQsMHgxNCwweGE5LDB4MDQsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4YTk0MCwgMCwgezB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweDI0LDB4MDQsMHhkOSwweDAwLDB4YjYsMHg0MCwweDRjLDB4OTAsMHgwYiwweDI4LDB4MDQgfSB9LAoreyAgMTYsIDB4YTk1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwMiwweDNlLDB4NDkgfSB9LAoreyAgMTYsIDB4YTk2MCwgMCwgezB4MGYsMHgxMCwweDQzLDB4NjQsMHgwMCwweGQ5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4YzQsMHgwMCwweGYxLDB4MDIgfSB9LAoreyAgMTYsIDB4YTk3MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGM0LDB4MDIsMHhlOSwweDA0LDB4M2MsMHg0MCwweDBmLDB4MWMsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTk4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMSwweDgwLDB4YzgsMHgyMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YTk5MCwgMCwgezB4OGMsMHg4MCwweDBiLDB4MjAsMHgwMCwweGU4LDB4MDIsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4YTAsMHg4MiwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YTlhMCwgMCwgezB4NmMsMHgwMCwweDBmLDB4ODAsMHgwMywweDIwLDB4MTAsMHhjOCwweDAwLDB4MzIsMHgwMiwweDBjLDB4ODAsMHgwMywweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4YTliMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgzOCwweDAwLDB4ODYsMHgwMCwweDJlLDB4ODAgfSB9LAoreyAgMTYsIDB4YTljMCwgMCwgezB4NjgsMHhhOCwweDgwLDB4M2EsMHgwMCwweDhhLDB4MDAsMHgyZSwweDgwLDB4MGIsMHhhMCwweDAyLDB4ZjgsMHgwMCwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTlkMCwgMCwgezB4MmUsMHg4MCwweDBiLDB4YTAsMHgwYSwweDNhLDB4MDAsMHg4ZSwweDEwLDB4MjMsMHg4MCwweDA4LDB4YTAsMHgwMywweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4YTllMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0ZCwweDAwLDB4ODMsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YTlmMCwgMCwgezB4MDgsMHgzOCwweDAwLDB4MGMsMHg2MCwweDIzLDB4MDAsMHgyYywweGMwLDB4MGIsMHgzMCwweDAyLDB4Y2MsMHg0MCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4YWEwMCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBjLDB4MDIsMHg4YSwweDgwLDB4YTAsMHhlMCwweDI4LDB4MzAsMHgwYSwweDRhLDB4MDAgfSB9LAoreyAgMTYsIDB4YWExMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxNiwweDIwLDB4ODcsMHgwMiwweDJkLDB4YzEgfSB9LAoreyAgMTYsIDB4YWEyMCwgMCwgezB4NDgsMHg3MCwweDEyLDB4N2MsMHgwMCwweGE3LDB4MjAsMHgyZCwweGM5LDB4MGIsMHg3MiwweDAwLDB4ZGMsMHgwMCwweDg3LDB4MDggfSB9LAoreyAgMTYsIDB4YWEzMCwgMCwgezB4MmQsMHhjNCwweDFiLDB4MzIsMHgwMiwweDFkLDB4MDEsMHg4NywweDQyLDB4MjEsMHhjMiwweDA4LDB4NzAsMHgwMiwweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4YWE0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgzZSwweDAyLDB4YzcsMHg4MCwweDNkLDB4ZWMgfSB9LAoreyAgMTYsIDB4YWE1MCwgMCwgezB4MGMsMHg1OCwweDAzLDB4MWUsMHgwMCwweGU3LDB4ODAsMHgzZCwweGVjLDB4MGYsMHg3ZiwweDAzLDB4OTYsMHgwMCwweGM3LDB4ODAgfSB9LAoreyAgMTYsIDB4YWE2MCwgMCwgezB4MmQsMHhlMiwweDA3LDB4NzksMHgwMywweDBhLDB4MDYsMHhjMywweDgwLDB4MzAsMHgyMCwweDhjLDB4MzgsMHgwMywweDZhLDB4MDIgfSB9LAoreyAgMTYsIDB4YWE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhYywweDAwLDB4ZmIsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4YWE4MCwgMCwgezB4MGYsMHgxMCwweDQzLDB4OGMsMHgwMCwweGRiLDB4MzgsMHgzZSwweGQ4LDB4MGYsMHhiMCwweDAzLDB4Y2MsMHgwNCwweGZiLDB4NDQgfSB9LAoreyAgMTYsIDB4YWE5MCwgMCwgezB4M2UsMHhjMCwweDhmLDB4YjYsMHgxMywweGVjLDB4MDIsMHhmZiwweDAyLDB4M2UsMHgwMCwweDBmLDB4YjAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4YWFhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmYSwweDAwLDB4ZmYsMHg4MCwweDMxLDB4ZTMgfSB9LAoreyAgMTYsIDB4YWFiMCwgMCwgezB4MGUsMHhmOCwweDIzLDB4ZmUsMHgwMiwweGRmLDB4ODAsMHhiNywweGUyLDB4MGUsMHhmOCwweDAzLDB4N2UsMHgwMCwweDZkLDB4ZDAgfSB9LAoreyAgMTYsIDB4YWFjMCwgMCwgezB4MzMsMHhlMCwweDBjLDB4ZjgsMHg5YiwweDc2LDB4YzAsMHhkZiwweDg0LDB4YjMsMHhlMCwweDA0LDB4ZjgsMHgwMywweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YWFkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5MCwweDQwLDB4YjcsMHgwMiwweDIxLDB4YzQgfSB9LAoreyAgMTYsIDB4YWFlMCwgMCwgezB4MDgsMHg3YiwweDQyLDB4ZGMsMHgwMCwweDg3LDB4MDAsMHgyMSwweGM0LDB4MGIsMHgzMCwweDAwLDB4MTAsMHg4MCwweDhkLDB4MDAgfSB9LAoreyAgMTYsIDB4YWFmMCwgMCwgezB4MjMsMHhjMCwweDBkLDB4ZjIsMHgwMiwweDA0LDB4NDIsMHg4ZiwweDAwLDB4MjksMHhjOCwweDI4LDB4NzAsMHgwMiwweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4YWIwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5NCwweDAwLDB4YjYsMHgwMCwweDIzLDB4YzAgfSB9LAoreyAgMTYsIDB4YWIxMCwgMCwgezB4MGEsMHg3MiwweDAyLDB4OGMsMHgwMCwweDg3LDB4MDAsMHgyMSwweGMwLDB4MGEsMHgzMCwweDAyLDB4MDQsMHgwMSwweGE3LDB4MDIgfSB9LAoreyAgMTYsIDB4YWIyMCwgMCwgezB4MjEsMHhjMCwweDA4LDB4NzAsMHg0MiwweDAwLDB4OGEsMHg4NywweDAwLDB4MjEsMHhjMCwweDI4LDB4NzAsMHgwMiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YWIzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjNSwweDAwLDB4YjAsMHgwMCwweGEwLDB4ZDAgfSB9LAoreyAgMTYsIDB4YWI0MCwgMCwgezB4MDgsMHhiMCwweDAyLDB4YzksMHg0MiwweDhiLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgzMCwweDIyLDB4MDQsMHgwMCwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4YWI1MCwgMCwgezB4YTAsMHhjMCwweDQ5LDB4MzAsMHgwMiwweDQ1LDB4NDAsMHg5MywweGMwLDB4YTgsMHhkNCwweDAwLDB4MzUsMHgwMiwweGM4LDB4MDQgfSB9LAoreyAgMTYsIDB4YWI2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhYywweDAwLDB4YmIsMHgwMCwweDMxLDB4YzAgfSB9LAoreyAgMTYsIDB4YWI3MCwgMCwgezB4MGUsMHhiMCwweDIzLDB4Y2QsMHgwMCwweGRmLDB4MDAsMHgzNywweGMwLDB4MGUsMHhmMCwweDAxLDB4NjgsMHgwMCwweGUzLDB4MDAgfSB9LAoreyAgMTYsIDB4YWI4MCwgMCwgezB4MzMsMHhjMCwweDFjLDB4ZjAsMHgwMywweDQ1LDB4MDAsMHhkYSwweGM4LDB4OTIsMHhkNCwweDJjLDB4YjQsMHgwMywweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4YWI5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlNSwweDIwLDB4ZmIsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4YWJhMCwgMCwgezB4MGYsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDAsMHgzZSwweGMwLDB4NGYsMHhiMCwweDAzLDB4YWQsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4YWJiMCwgMCwgezB4N2UsMHhjMCwweDFmLDB4MzAsMHgwMywweGE0LDB4ODAsMHhlOSwweDIwLDB4M2MsMHhjMCwweDBmLDB4MzIsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YWJjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhkYywweDAwLDB4YzcsMHgwMCwweDMzLDB4YzIgfSB9LAoreyAgMTYsIDB4YWJkMCwgMCwgezB4MmMsMHhmMCwweDAzLDB4M2UsMHgyMCwweGRiLDB4MDAsMHgxMywweGMwLDB4MGMsMHg3MCwweDAzLDB4M2MsMHg4MCwweGVmLDB4MDQgfSB9LAoreyAgMTYsIDB4YWJlMCwgMCwgezB4NzMsMHhjMSwweDBmLDB4ZjAsMHgyMiwweDMwLDB4MDAsMHhjNiwweDAwLDB4YjIsMHhjMCwweDBjLDB4ZjAsMHgwMywweDAwLDB4NDQgfSB9LAoreyAgMTYsIDB4YWJmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDAsMHg2OSwweDAwLDB4OGIsMHg0NCwweGEyLDB4YzEgfSB9LAoreyAgMTYsIDB4YWMwMCwgMCwgezB4ODgsMHhiMCwweDAzLDB4NmMsMHgwMCwweDhiLDB4MDAsMHgyMiwweGMwLDB4MjgsMHhiMCwweDBhLDB4MmQsMHgwMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4YWMxMCwgMCwgezB4NjIsMHhjMCwweDBiLDB4YjAsMHgwMiwweDI2LDB4MDIsMHg4YiwweDgwLDB4MjIsMHhjMCwweDA4LDB4YjAsMHgwMywweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4YWMyMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyOCwweDAxLDB4OGEsMHgwOCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4YWMzMCwgMCwgezB4MDgsMHhiMiwweDAyLDB4NmMsMHg0MCwweDliLDB4MDAsMHgyOCwweGMwLDB4NDgsMHhiMCwweDE2LDB4MjksMHgwNCwweGI5LDB4MDEgfSB9LAoreyAgMTYsIDB4YWM0MCwgMCwgezB4MjIsMHhjMCwweDQ5LDB4YjAsMHgwNiwweGFlLDB4MDksMHg4YiwweDgwLDB4MjIsMHhlMCwweDQ4LDB4YjAsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YWM1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwMCwweDAyLDB4ODIsMHgwMCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4YWM2MCwgMCwgezB4ODgsMHhiMCwweDAyLDB4NDQsMHgwMCwweDgzLDB4MDAsMHgyOCwweGMwLDB4MDgsMHgzMCwweDAyLDB4MDgsMHgwMCwweGIxLDB4MDAgfSB9LAoreyAgMTYsIDB4YWM3MCwgMCwgezB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDhjLDB4MDAsMHg4MywweDgwLDB4MjAsMHhlMCwweDA4LDB4MzAsMHgwYSwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YWM4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2NCwweDAwLDB4Y2EsMHgwMCwweDMzLDB4YzAgfSB9LAoreyAgMTYsIDB4YWM5MCwgMCwgezB4MGMsMHhiMiwweDAzLDB4MmMsMHgwMCwweGRmLDB4MDAsMHgzYiwweGMwLDB4NGMsMHhmNSwweDEzLDB4MmMsMHgwNCwweGVmLDB4MDAgfSB9LAoreyAgMTYsIDB4YWNhMCwgMCwgezB4YTMsMHhjMCwweDBkLDB4ZjAsMHgwMywweGE4LDB4NDAsMHhjYiwweDAwLDB4YjIsMHgwMCwweDJjLDB4YjAsMHgwMywweDAwLDB4MDMgfSB9LAoreyAgMTYsIDB4YWNiMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmMCwweDAwLDB4ZjQsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YWNjMCwgMCwgezB4MGYsMHhiMSwweDAzLDB4ZjAsMHgwMCwweGZmLDB4MDAsMHgzNywweGMwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YWNkMCwgMCwgezB4M2YsMHhjMCwweDA3LDB4ZjAsMHgwYiwweDdjLDB4MDgsMHhmZiwweDAxLDB4M2YsMHgwMCwweDBmLDB4ZjAsMHgwMywweGE4LDB4MDYgfSB9LAoreyAgMTYsIDB4YWNlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmMCwweGM1LDB4ZWQsMHgzMywweDNiLDB4Y2MgfSB9LAoreyAgMTYsIDB4YWNmMCwgMCwgezB4MGMsMHhmMCwweDAzLDB4MzAsMHg0MCwweGZmLDB4MjUsMHgzZiwweGNjLDB4MGMsMHhmMywweDgzLDB4M2MsMHhkMCwweGRmLDB4NDggfSB9LAoreyAgMTYsIDB4YWQwMCwgMCwgezB4MzcsMHgzMCwweDRjLDB4ZjMsMHgwMywweGZkLDB4ODAsMHhjZiwweDI4LDB4MzMsMHhkOCwweDBjLDB4ZjEsMHgwMywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YWQxMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlYywweGQwLDB4YmIsMHgzMSwweDIwLDB4Y2MgfSB9LAoreyAgMTYsIDB4YWQyMCwgMCwgezB4ODgsMHhmMywweDQyLDB4MjAsMHg1MCwweGJmLDB4OTAsMHgyZiwweGM0LDB4MGEsMHhmNiwweDAyLDB4N2QsMHhjMCwweDhmLDB4NDAgfSB9LAoreyAgMTYsIDB4YWQzMCwgMCwgezB4MjYsMHg0MCwweDhmLDB4ZjYsMHgwMiwweGZkLDB4MDAsMHhmZiwweDA4LDB4MzksMHhjOCwweDA4LDB4ZjYsMHgwMiwweGEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YWQ0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjNCwweDgwLDB4YTEsMHgyMCwweDI4LDB4YzkgfSB9LAoreyAgMTYsIDB4YWQ1MCwgMCwgezB4MDgsMHgzMCwweDlhLDB4MDAsMHgwOSwweGIzLDB4MDAsMHgyYywweGMwLDB4MjAsMHgzMCwweDAyLDB4NGMsMHg5MCwweDgzLDB4MjAgfSB9LAoreyAgMTYsIDB4YWQ2MCwgMCwgezB4MDIsMHgwOCwweDBiLDB4MzMsMHgxMiwweGNkLDB4ODAsMHg5MywweDIwLDB4MjQsMHhkOCwweDA4LDB4MzQsMHgyMiwweDIyLDB4MDEgfSB9LAoreyAgMTYsIDB4YWQ3MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTEsMHhhZSwweDAwLDB4YmIsMHgxMCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4YWQ4MCwgMCwgezB4MDgsMHhiMCwweDAyLDB4MjYsMHgwMSwweDNiLDB4MDEsMHg2ZSwweGMwLDB4MDgsMHhiMCwweDAyLDB4NGMsMHgwOCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4YWQ5MCwgMCwgezB4YTIsMHg4OSwweDBiLDB4YjAsMHgwMiwweGVjLDB4MDAsMHhhYiwweDAwLDB4NmEsMHhjMSwweDI4LDB4YjAsMHgwMiwweGIwLDB4MDQgfSB9LAoreyAgMTYsIDB4YWRhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHg2ZSwweDAwLDB4ZTgsMHhjMSwweDNhLDB4YzAgfSB9LAoreyAgMTYsIDB4YWRiMCwgMCwgezB4MmMsMHhiMCwweDQzLDB4MjYsMHgwMCwweGZiLDB4MDYsMHgzZSwweGMxLDB4MGMsMHhiMCwweDBiLDB4MmMsMHgwMiwweGNiLDB4MDAgfSB9LAoreyAgMTYsIDB4YWRjMCwgMCwgezB4MzQsMHgyMiwweDlmLDB4YjAsMHg0MywweGVjLDB4MDAsMHg5YiwweDAyLDB4MzYsMHhjMSwweDhjLDB4YjAsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YWRkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiYywweDAwLDB4ZmMsMHg4MCwweDNkLDB4ZDAgfSB9LAoreyAgMTYsIDB4YWRlMCwgMCwgezB4MmYsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZiLDB4MDAsMHgzZCwweGMwLDB4MDcsMHgzMCwweDAzLDB4YmMsMHgwMCwweGVmLDB4MDQgfSB9LAoreyAgMTYsIDB4YWRmMCwgMCwgezB4M2YsMHhlMCwweDVlLDB4YjAsMHgwMSwweGZjLDB4MDAsMHhmZiwweDAwLDB4MWIsMHhjMCwweDBmLDB4ZjAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YWUwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4Y2IsMHgwMSwweDNlLDB4YzkgfSB9LAoreyAgMTYsIDB4YWUxMCwgMCwgezB4MGMsMHhiMCwweDE3LDB4MjAsMHg4NCwweGViLDB4MDAsMHhiMiwweGMxLDB4MGQsMHhiMCwweDAzLDB4NmMsMHgwMCwweGMzLDB4MDAgfSB9LAoreyAgMTYsIDB4YWUyMCwgMCwgezB4MzIsMHg1MCwweDBmLDB4YjAsMHgwMywweDBjLDB4NDAsMHhjMywweDAwLDB4N2UsMHhjMCwweDBjLDB4MzAsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YWUzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyYywweDAwLDB4OGEsMHg1OCwweDJlLDB4ZTAgfSB9LAoreyAgMTYsIDB4YWU0MCwgMCwgezB4NDgsMHhmMCwweDAyLDB4MmQsMHgwMCwweGVmLDB4MDEsMHgyMywweGMwLDB4MDgsMHhmMCwweDIyLDB4M2MsMHgwNCwweDhmLDB4NjAgfSB9LAoreyAgMTYsIDB4YWU1MCwgMCwgezB4MzYsMHg1NCwweDBiLDB4ZjAsMHgwYSwweDNkLDB4NDAsMHg4ZiwweDAwLDB4MmYsMHhjMCwweDA4LDB4ZjAsMHgwMywweDcyLDB4MDAgfSB9LAoreyAgMTYsIDB4YWU2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0MCwweDAwLDB4ODksMHg4MCwweDJjLDB4MTAgfSB9LAoreyAgMTYsIDB4YWU3MCwgMCwgezB4MDgsMHhiMCwweDAyLDB4NDksMHgwMCwweGEzLDB4YTAsMHgyNCwweGMwLDB4MDksMHgzMCwweDAyLDB4NGMsMHgwMCwweDgzLDB4YzkgfSB9LAoreyAgMTYsIDB4YWU4MCwgMCwgezB4MjAsMHg5MCwweDQyLDB4MzAsMHgxMiwweDRkLDB4MDAsMHg4MywweDAwLDB4NmEsMHhjMCwweDA5LDB4MzAsMHgwMiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YWU5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxNiwweDAwLDB4ODUsMHg4MCwweDZkLDB4NjIgfSB9LAoreyAgMTYsIDB4YWVhMCwgMCwgezB4MDgsMHg3ZSwweDAyLDB4NTYsMHg0MCwweDI3LDB4ODAsMHgyNSwweGUwLDB4MTksMHg3OCwweDA2LDB4MGUsMHgwMCwweDgzLDB4ODAgfSB9LAoreyAgMTYsIDB4YWViMCwgMCwgezB4NjEsMHhhMCwweDBiLDB4NzgsMHgwMiwweDRlLDB4MDAsMHg4NywweDgyLDB4NmQsMHhlMCwweDA5LDB4NzksMHgwMiwweDQ4LDB4MDAgfSB9LAoreyAgMTYsIDB4YWVjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgyYywweDAyLDB4YzMsMHg2MSwweDNjLDB4ODggfSB9LAoreyAgMTYsIDB4YWVkMCwgMCwgezB4MmMsMHhiYSwweDEyLDB4NDksMHgxMCwweGUzLDB4MmMsMHgzNiwweGMwLDB4MGQsMHgzMCwweDUzLDB4NGMsMHg0NCwweGMzLDB4MDAgfSB9LAoreyAgMTYsIDB4YWVlMCwgMCwgezB4MjAsMHgwMSwweDBmLDB4MzEsMHgwMywweDRjLDB4MDAsMHhjMywweDAxLDB4M2MsMHhjMCwweDJkLDB4YjEsMHgwMywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4YWVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4MDAgfSB9LAoreyAgMTYsIDB4YWYwMCwgMCwgezB4NGYsMHhmMSwweDA5LDB4YjAsMHgwMCwweGZmLDB4MDAsMHgzYiwweGMwLDB4MGUsMHhmNCwweDAxLDB4ZmQsMHgyNCwweGZmLDB4NDAgfSB9LAoreyAgMTYsIDB4YWYxMCwgMCwgezB4YmYsMHhjMCwweDA3LDB4ZjAsMHgwMywweGJjLDB4MDAsMHg2ZiwweDEwLDB4M2YsMHhjNCwweDFlLDB4ZjEsMHg4MywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4YWYyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhjNCwweDAwLDB4ZTgsMHgwNCwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4YWYzMCwgMCwgezB4MGMsMHhiNiwweDAzLDB4ZTgsMHgwMiwweGNiLDB4MDAsMHgzNiwweGNhLDB4MGYsMHhiNSwweDAzLDB4YWQsMHgwMCwweGZiLDB4MjAgfSB9LAoreyAgMTYsIDB4YWY0MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4YjMsMHgwMywweGVjLDB4ODAsMHhmYiwweGE4LDB4MzIsMHhjNiwweDhjLDB4YjYsMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4YWY1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5NCwweDAyLDB4ZTYsMHgwMCwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YWY2MCwgMCwgezB4MDgsMHg3MywweDAyLDB4ZGMsMHgwMCwweDg3LDB4NzAsMHgyZCwweGQwLDB4MGIsMHhmMCwweDAyLDB4MWMsMHg4NCwweGI3LDB4MjAgfSB9LAoreyAgMTYsIDB4YWY3MCwgMCwgezB4MmQsMHhjMCwweDBiLDB4NzAsMHg4MiwweGRkLDB4MjQsMHhiNywweDQwLDB4MzQsMHhjOSwweDI4LDB4NzIsMHg4MiwweDkyLDB4MDQgfSB9LAoreyAgMTYsIDB4YWY4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHhiZSwweDAyLDB4YWMsMHg4MCwweGExLDB4MjAgfSB9LAoreyAgMTYsIDB4YWY5MCwgMCwgezB4MDgsMHg3OSwweDAwLDB4Y2UsMHgwNCwweDg3LDB4ODAsMHg2NSwweGUwLDB4MGIsMHg3YSwweDAyLDB4OWUsMHgwMCwweGI3LDB4OTAgfSB9LAoreyAgMTYsIDB4YWZhMCwgMCwgezB4NmQsMHhhMCwweDBiLDB4NzgsMHgwMiwweGRlLDB4MDAsMHhiNywweDgwLDB4MjEsMHhlMCwweDA4LDB4NzgsMHgwMiwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YWZiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhlZCwweDgyLDB4YWIsMHhlMCwweDIwLDB4ZTQgfSB9LAoreyAgMTYsIDB4YWZjMCwgMCwgezB4MDgsMHgzMCwweDAyLDB4ZWUsMHgwNCwweDgzLDB4MDAsMHgyYywweGMxLDB4MWIsMHgzMCwweDAyLDB4MGMsMHgwOCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YWZkMCwgMCwgezB4NjQsMHhmNiwweDBiLDB4YjAsMHgwMiwweGNjLDB4MDQsMHhiMywweDAwLDB4MjYsMHhjMCwweDA4LDB4MzAsMHgwMiwweDkyLDB4MDQgfSB9LAoreyAgMTYsIDB4YWZlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiYiwweDgwLDB4ZWUsMHg0OSwweDMxLDB4YTAgfSB9LAoreyAgMTYsIDB4YWZmMCwgMCwgezB4MmMsMHhhMCwweDAzLDB4ZmEsMHgwMCwweGNhLDB4MDIsMHgzNiwweDgwLDB4MGYsMHhhMCwweDAzLDB4YTgsMHgwMCwweGZhLDB4MDIgfSB9LAoreyAgMTYsIDB4YjAwMCwgMCwgezB4M2YsMHg5MCwweDBmLDB4YTAsMHg2MywweGU4LDB4MDAsMHhmYSwweDAwLDB4MzIsMHg4MCwweDBjLDB4YTAsMHgyMywweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4YjAxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDBhLDB4ZTgsMHgwMCwweDNlLDB4MDggfSB9LAoreyAgMTYsIDB4YjAyMCwgMCwgezB4MGYsMHg4MCwweDAzLDB4ZTMsMHg1MCwweGYwLDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDEzLDB4ZTAsMHgwMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjAzMCwgMCwgezB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MDEsMHhmOCwweDAxLDB4N2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4YjA0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDQwLDB4YzksMHhhMSwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4YjA1MCwgMCwgezB4MjAsMHgxMSwweDAxLDB4YTYsMHg0MCwweGM5LDB4ODQsMHgzNiwweDQwLDB4MGQsMHg5MCwweDAzLDB4NDQsMHgwMCwweDQxLDB4MDAgfSB9LAoreyAgMTYsIDB4YjA2MCwgMCwgezB4MzIsMHg0MCwweDBmLDB4OTAsMHgwYiwweDI0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDRjLDB4MTAsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4YjA3MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHg4MiwweGEyLDB4NDAgfSB9LAoreyAgMTYsIDB4YjA4MCwgMCwgezB4MDgsMHg5YywweDAyLDB4MjUsMHgwMCwweDg5LDB4YzgsMHgyMiwweDQwLDB4MDgsMHg5MCwweDQyLDB4MjQsMHgwMCwweDg5LDB4MjAgfSB9LAoreyAgMTYsIDB4YjA5MCwgMCwgezB4MjIsMHg2MCwweDBiLDB4OTAsMHgwMiwweDI0LDB4MTAsMHhiOSwweDAwLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMywweDYwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjBhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4ODksMHgwNCwweDIyLDB4Y2EgfSB9LAoreyAgMTYsIDB4YjBiMCwgMCwgezB4MGEsMHg5MCwweDBhLDB4MjUsMHgwMiwweDg5LDB4MjAsMHgyMCwweDQwLDB4MjgsMHgxMCwweDAyLDB4NjQsMHgwMSwweGE5LDB4MDAgfSB9LAoreyAgMTYsIDB4YjBjMCwgMCwgezB4MjIsMHg0YiwweDBiLDB4OTAsMHgwMiwweDI0LDB4MDEsMHhiOSwweDAwLDB4MmUsMHg0MSwweDI4LDB4OTAsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YjBkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDkwLDB4ODEsMHhhMCwweDIwLDB4NDggfSB9LAoreyAgMTYsIDB4YjBlMCwgMCwgezB4MGEsMHgzMiwweDAyLDB4MDQsMHg4MCwweDgxLDB4MDAsMHgyMCwweDQ0LDB4MDgsMHgxMSwweDAyLDB4MDQsMHhkMCwweGExLDB4MjAgfSB9LAoreyAgMTYsIDB4YjBmMCwgMCwgezB4MjAsMHg0MCwweDBiLDB4MTEsMHgwMiwweDA2LDB4MDAsMHhiMSwweDMxLDB4MmMsMHg0OCwweDA4LDB4MTQsMHgwMiwweDQyLDB4MDEgfSB9LAoreyAgMTYsIDB4YjEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQyLDB4YzgsMHg1NCwweDMyLDB4MTQgfSB9LAoreyAgMTYsIDB4YjExMCwgMCwgezB4MGUsMHg4NSwweDAzLDB4MjEsMHg0NCwweGM4LDB4MjgsMHhiMiwweDFhLDB4NGMsMHg4NiwweDkzLDB4NjEsMHgxNCwweGU4LDB4NTAgfSB9LAoreyAgMTYsIDB4YjEyMCwgMCwgezB4MjIsMHgxNCwweDBmLDB4ODYsMHg4MywweDIxLDB4NDAsMHhmMCwweDQwLDB4MWUsMHgxNCwweDBjLDB4MDAsMHgwMywweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4YjEzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHg3NCwweDQ0LDB4ZjUsMHgxMCwweDNmLDB4NDQgfSB9LAoreyAgMTYsIDB4YjE0MCwgMCwgezB4MGQsMHg5MSwweDAzLDB4NzQsMHg0MCwweGY5LDB4MDAsMHgzZSwweDQ4LDB4MGIsMHg5MiwweDAzLDB4ZTQsMHhjMiwweGQ5LDB4MTAgfSB9LAoreyAgMTYsIDB4YjE1MCwgMCwgezB4YmYsMHg0MCwweDBmLDB4OTIsMHgwMywweGU1LDB4MDQsMHhmOSwweDMwLDB4M2UsMHg0NCwweDBmLDB4OTQsMHg0MywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4YjE2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNiwweDIyLDB4Y2QsMHhhMSwweDMzLDB4NjEgfSB9LAoreyAgMTYsIDB4YjE3MCwgMCwgezB4MGMsMHhkOCwweGQzLDB4MzQsMHgxMCwweGNkLDB4YTgsMHgzZSwweDYwLDB4OGUsMHg5YywweDkzLDB4YTcsMHgwOCwweGNkLDB4ODAgfSB9LAoreyAgMTYsIDB4YjE4MCwgMCwgezB4MzMsMHg0MCwweDBlLDB4OWEsMHhkMywweDM2LDB4YTAsMHhjOSwweDgwLDB4MzIsMHg2MCwweDBjLDB4OTksMHgwMywweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YjE5MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMywweDg4LDB4OGEsMHhhMCwweDIwLDB4MjggfSB9LAoreyAgMTYsIDB4YjFhMCwgMCwgezB4MDgsMHg4MCwweDIyLDB4MjAsMHgxMiwweDg4LDB4NDAsMHgyYywweDI4LDB4MDgsMHg4YSwweDAyLDB4MjIsMHgwMCwweDg4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjFiMCwgMCwgezB4MjIsMHgwMCwweDBiLDB4OGMsMHgwMywweDIxLDB4MDAsMHg4OCwweGQwLDB4YTIsMHgzZSwweDI4LDB4OGQsMHgwMiwweDBlLDB4MDQgfSB9LAoreyAgMTYsIDB4YjFjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjZSwweDIwLDB4YTEsMHg0OCwweDIwLDB4NTIgfSB9LAoreyAgMTYsIDB4YjFkMCwgMCwgezB4MjksMHgxMCwweDAyLDB4MjQsMHgwMywweDgxLDB4MDAsMHgyYywweDUyLDB4MGEsMHgxMCwweDEyLDB4ODUsMHgxMCwweDkxLDB4NDAgfSB9LAoreyAgMTYsIDB4YjFlMCwgMCwgezB4YTQsMHg0MCwweDBhLDB4MTIsMHg4MiwweDQ0LDB4MDAsMHg5MSwweDI4LDB4MjQsMHg0MCwweDI4LDB4MTIsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YjFmMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNCwweDAwLDB4YTksMHgxNCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4YjIwMCwgMCwgezB4MDksMHg5MCwweDAyLDB4YTQsMHgwMSwweDg5LDB4MDQsMHgyYywweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCwweDk5LDB4MDAgfSB9LAoreyAgMTYsIDB4YjIxMCwgMCwgezB4MjIsMHg0NCwweDRiLDB4MTAsMHg0MiwweDI0LDB4MTQsMHg5OSwweDAwLDB4MjYsMHg0MCwweDA4LDB4MTAsMHgwMiwweDA2LDB4MDQgfSB9LAoreyAgMTYsIDB4YjIyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDQwLDB4ZTksMHg0MCwweGIyLDB4NzggfSB9LAoreyAgMTYsIDB4YjIzMCwgMCwgezB4MGQsMHg5MCwweDBiLDB4MjQsMHgyMiwweGM5LDB4MDMsMHgzZSwweDQxLDB4MGUsMHg5MCwweDAzLDB4YTQsMHgwMiwweGQ5LDB4MDAgfSB9LAoreyAgMTYsIDB4YjI0MCwgMCwgezB4MTYsMHg1OCwweDA2LDB4OTAsMHgwYiwweDY0LDB4MDIsMHhkOSwweDAwLDB4MzYsMHg0MCwweDBjLDB4OTAsMHgwYiwweDI4LDB4MDQgfSB9LAoreyAgMTYsIDB4YjI1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHg4NCwweDAwLDB4ZDksMHg4MCwweDNlLDB4NGEgfSB9LAoreyAgMTYsIDB4YjI2MCwgMCwgezB4MGUsMHg5MCwweDAzLDB4NjQsMHgyMCwweGY5LDB4MDgsMHgzZSwweDQxLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGUxLDB4MDggfSB9LAoreyAgMTYsIDB4YjI3MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGM0LDB4MDAsMHhlMSwweDAwLDB4MzgsMHg0MCwweDBmLDB4OTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjI4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDA5LDB4ZjAsMHg0MCwweGIwLDB4MTAgfSB9LAoreyAgMTYsIDB4YjI5MCwgMCwgezB4NGMsMHgwMCwweDBiLDB4MjAsMHgwMCwweGY4LDB4MDAsMHgzYSwweDAwLDB4MWMsMHgwMCwweDAzLDB4ZTAsMHgwMCwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjJhMCwgMCwgezB4MzYsMHgwMCwweDBjLDB4ODAsMHgwMywweDIwLDB4MDAsMHhjOCwweDAwLDB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4YjJiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyOCwweDAwLDB4M2UsMHg4OCwweDIzLDB4YTIgfSB9LAoreyAgMTYsIDB4YjJjMCwgMCwgezB4NDgsMHhlMCwweDAwLDB4MTksMHg4MCwweGJlLDB4ODgsMHgyZSwweDgwLDB4MGQsMHhhMCwweDQyLDB4ZTgsMHgwMCwweDhlLDB4MDAgfSB9LAoreyAgMTYsIDB4YjJkMCwgMCwgezB4MjMsMHg5MCwweDA4LDB4YTAsMHgwYSwweDNhLDB4MDAsMHhkYSwweDAwLDB4MzYsMHg4MCwweDBiLDB4YTAsMHgwYSwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjJlMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YjMsMHg4MCwweDIwLDB4ZTAgfSB9LAoreyAgMTYsIDB4YjJmMCwgMCwgezB4MjgsMHgzMCwweGMyLDB4MGYsMHgxMCwweGIzLDB4NDAsMHgyOCwweGMwLDB4MGIsMHgzMCwweDAyLDB4ZWMsMHgxMSwweDgzLDB4NDAgfSB9LAoreyAgMTYsIDB4YjMwMCwgMCwgezB4MjgsMHhkMiwweDBhLDB4MzAsMHgwMiwweDBjLDB4YzAsMHg4MywweDAwLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjMxMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxYywweDAwLDB4YjYsMHgwMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4YjMyMCwgMCwgezB4MDgsMHgyMCwweGMyLDB4MWMsMHgxMCwweGI1LDB4MDAsMHgyZCwweGM4LDB4MGEsMHg3MiwweDAyLDB4ZGMsMHg0MCwweDg1LDB4MDggfSB9LAoreyAgMTYsIDB4YjMzMCwgMCwgezB4MjksMHhhMiwweDFhLDB4NzIsMHgyMiwweDBjLDB4MDAsMHg5MywweDMwLDB4MDUsMHhjNCwweDBiLDB4MzIsMHgyMiwweDI4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjM0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxNiwweDAwLDB4YjIsMHg4MCwweDMxLDB4MjAgfSB9LAoreyAgMTYsIDB4YjM1MCwgMCwgezB4MGMsMHg1OCwweDAzLDB4MWUsMHgwMCwweGY3LDB4ODAsMHgzOSwweGY4LDB4MGIsMHg3YywweDIyLDB4Y2UsMHg0MCwweGNmLDB4ODAgfSB9LAoreyAgMTYsIDB4YjM2MCwgMCwgezB4OWIsMHg2MCwweDJlLDB4M2IsMHgwMywweDFhLDB4MDAsMHhjNywweGE4LDB4MTEsMHhlMCwweDBmLDB4NzgsMHgwMywweDJhLDB4MDIgfSB9LAoreyAgMTYsIDB4YjM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhNCwweDAwLDB4ZmEsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4YjM4MCwgMCwgezB4MGYsMHg5MCwweDIzLDB4ZTgsMHgwMCwweGZiLDB4MDAsMHgzZSwweGQwLDB4MmQsMHhiNiwweDAzLDB4ZWQsMHgwMiwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4YjM5MCwgMCwgezB4MzIsMHg0MCwweDBkLDB4YjAsMHgwNywweGVjLDB4MDAsMHhmYiwweDYwLDB4M2UsMHhjOCwweDBmLDB4YjUsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4YjNhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4ZmYsMHg4MCwweDMzLDB4YTAgfSB9LAoreyAgMTYsIDB4YjNiMCwgMCwgezB4MGMsMHhmOCwweDBiLDB4MzIsMHg0MCwweGNlLDB4ODEsMHgzNywweGYwLDB4MGMsMHhiYywweDAzLDB4ZmUsMHgwMCwweGZmLDB4ODQgfSB9LAoreyAgMTYsIDB4YjNjMCwgMCwgezB4MzMsMHhlMCwweDJjLDB4ZjgsMHg4MywweGU2LDB4MDIsMHhjZiwweDg1LDB4MzMsMHhmMCwweDBjLDB4ZmMsMHgwMywweDAwLDB4MTQgfSB9LAoreyAgMTYsIDB4YjNkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDAwLDB4YmUsMHgwMCwweDM1LDB4YzYgfSB9LAoreyAgMTYsIDB4YjNlMCwgMCwgezB4MjgsMHgzMCwweDAyLDB4MzAsMHg0MCwweDg3LDB4MDAsMHgyMywweGMwLDB4MDgsMHg3YSwweDAyLDB4ZGMsMHgwMCwweGJlLDB4MDAgfSB9LAoreyAgMTYsIDB4YjNmMCwgMCwgezB4MjMsMHhjMCwweDA4LDB4NzAsMHgxMiwweGZlLDB4MDAsMHg4NywweDAwLDB4MjEsMHhjMCwweDA4LDB4ZjAsMHgwMiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YjQwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5NSwweDIwLDB4YjYsMHgwMCwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4YjQxMCwgMCwgezB4MDgsMHgzMSwweDAyLDB4NWMsMHgwMSwweDg3LDB4MDAsMHgyNSwweGMwLDB4MDgsMHg3MiwweDAyLDB4ZGMsMHgwMCwweGI2LDB4MDAgfSB9LAoreyAgMTYsIDB4YjQyMCwgMCwgezB4MjEsMHhkMCwweDA5LDB4NzAsMHgwMiwweGQ0LDB4MDgsMHg5MywweDAwLDB4MjAsMHhjMCwweDA4LDB4NzAsMHgwMiwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjQzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjNCwweDAwLDB4YjAsMHhlMCwweDI0LDB4NjAgfSB9LAoreyAgMTYsIDB4YjQ0MCwgMCwgezB4MDgsMHgyMCwweDA2LDB4NDgsMHgwMSwweDgwLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4Y2MsMHgwNCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YjQ1MCwgMCwgezB4MjAsMHg4NCwweDBiLDB4MzAsMHgwMiwweGU4LDB4MDAsMHg5YiwweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweDA4LDB4MDQgfSB9LAoreyAgMTYsIDB4YjQ2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhYywweDAwLDB4YjksMHhlMCwweDMyLDB4ODAgfSB9LAoreyAgMTYsIDB4YjQ3MCwgMCwgezB4NmMsMHhiMCwweDIzLDB4NmYsMHgwMCwweGMzLDB4MDAsMHgzNywweGMxLDB4M2MsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjQ4MCwgMCwgezB4YjAsMHhjMCwweDA5LDB4ZjAsMHgwMywweGVjLDB4MTAsMHhkZiwweDAwLDB4NzMsMHhjMCwweDBjLDB4ZjAsMHgwYiwweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjQ5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlYywweDEwLDB4ZjgsMHgwMCwweDNlLDB4NDIgfSB9LAoreyAgMTYsIDB4YjRhMCwgMCwgezB4MGYsMHgyNCwweDAzLDB4YTgsMHg2MCwweGY4LDB4MDAsMHgzYywweGMxLDB4MGYsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGY5LDB4NDAgfSB9LAoreyAgMTYsIDB4YjRiMCwgMCwgezB4M2UsMHg4MCwweDA0LDB4YjAsMHgyMywweGUxLDB4MDAsMHhlYiwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjRjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmNCwweDAwLDB4ZWUsMHgwMCwweDNkLDB4MzAgfSB9LAoreyAgMTYsIDB4YjRkMCwgMCwgezB4MGMsMHhjMCwweDAzLDB4MTQsMHgwMCwweGNjLDB4YTAsMHhiMywweGMwLDB4NGMsMHg3MCwweDAzLDB4NWMsMHgxMCwweGRmLDB4MDAgfSB9LAoreyAgMTYsIDB4YjRlMCwgMCwgezB4M2YsMHgwMCwweDBjLDB4ZjAsMHgwMywweGY4LDB4MDAsMHhjZiwweDAwLDB4MjMsMHhjMCwweDBjLDB4ZjAsMHgwMywweDAwLDB4NDAgfSB9LAoreyAgMTYsIDB4YjRmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2NCwweDAwLDB4YmEsMHg4MSwweDJlLDB4NTggfSB9LAoreyAgMTYsIDB4YjUwMCwgMCwgezB4MDgsMHg4OCwweDAyLDB4MjcsMHg4MCwweDg5LDB4MjAsMHgyMiwweGMwLDB4MjgsMHhiMCwweDAyLDB4MmMsMHgwMCwweDg4LDB4ODMgfSB9LAoreyAgMTYsIDB4YjUxMCwgMCwgezB4MmUsMHgyMCwweDA1LDB4YjAsMHg2MiwweGUzLDB4MDAsMHg4YiwweDAwLDB4MmEsMHhjMCwweDA4LDB4YjAsMHgwMywweDYwLDB4NDAgfSB9LAoreyAgMTYsIDB4YjUyMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyNiwweDAwLDB4YjksMHg4MSwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4YjUzMCwgMCwgezB4MDgsMHg4YywweDA2LDB4MjYsMHgwMCwweDg4LDB4MDAsMHgyMiwweGMwLDB4MDgsMHhiMCwweDE2LDB4NmMsMHgwMCwweDk4LDB4ODggfSB9LAoreyAgMTYsIDB4YjU0MCwgMCwgezB4MmUsMHgyMCwweDA4LDB4YjAsMHgwNCwweGUzLDB4MDEsMHgwYiwweDAwLDB4MjgsMHhjMCwweDA4LDB4MzAsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjU1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDAwLDB4YjAsMHgwMCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YjU2MCwgMCwgezB4MjgsMHgwMCwweDBlLDB4MDAsMHgxMCwweDgwLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgzMiwweDAyLDB4MGMsMHgwMCwweDgwLDB4MDQgfSB9LAoreyAgMTYsIDB4YjU3MCwgMCwgezB4MmUsMHgyMCwweDA5LDB4MzAsMHgwMiwweGM0LDB4MTIsMHg4MywweDAwLDB4MjgsMHhjMCwweDA4LDB4MzAsMHgwMiwweDQyLDB4MDEgfSB9LAoreyAgMTYsIDB4YjU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4ZmEsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YjU5MCwgMCwgezB4MmMsMHg5MSwweDAzLDB4MjAsMHgwMCwweDhhLDB4MDAsMHgzMywweGMwLDB4MGMsMHhmMCwweDAzLDB4N2MsMHgwMCwweGQ4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjVhMCwgMCwgezB4MmUsMHg0MCwweDBjLDB4ZjAsMHgwMywweGUwLDB4ODAsMHhjZiwweDAwLDB4M2IsMHhjMCwweDBjLDB4ZjAsMHgwMywweDAwLDB4MDMgfSB9LAoreyAgMTYsIDB4YjViMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmYywweDAwLDB4ZmMsMHgwMSwweDNmLDB4NDAgfSB9LAoreyAgMTYsIDB4YjVjMCwgMCwgezB4MGYsMHhjMCwweDEzLDB4ZjAsMHgwMCwweGY0LDB4MDAsMHgzZiwweGMxLDB4MGYsMHhmNCwweDIzLDB4ZmMsMHgwOCwweGZjLDB4MDAgfSB9LAoreyAgMTYsIDB4YjVkMCwgMCwgezB4M2YsMHgwMCwweDBmLDB4ZjAsMHgwMywweGYwLDB4NDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4YjVlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmYywweDIwLDB4Y2QsMHgxMCwweDM5LDB4YzggfSB9LAoreyAgMTYsIDB4YjVmMCwgMCwgezB4MGQsMHhjMSwweDAzLDB4M2MsMHg4MCwweGVmLDB4OTAsMHgyMywweGQ4LDB4MGYsMHhmOCwweDAwLDB4ZmUsMHgwMCwweGNmLDB4ODAgfSB9LAoreyAgMTYsIDB4YjYwMCwgMCwgezB4MWYsMHhkMCwweDBmLDB4ZjksMHgwMywweGZmLDB4MDAsMHhlNywweGMwLDB4MzMsMHhjNCwweDBmLDB4ZjAsMHgwMywweGIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjYxMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTAsMHhmZSwweDAyLDB4ODksMHg0MCwweDIzLDB4ZjAgfSB9LAoreyAgMTYsIDB4YjYyMCwgMCwgezB4MDgsMHg4NSwweDEwLDB4M2MsMHgwMCwweDhiLDB4MDAsMHhhMywweGRjLDB4NGIsMHhiMiwweDgyLDB4ZWMsMHgyMCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4YjYzMCwgMCwgezB4MjYsMHhjMCwweDRiLDB4YjAsMHgwMiwweGVjLDB4MTAsMHhiOSwweDA0LDB4MmEsMHhjOSwweDBiLDB4YjUsMHg4MCwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4YjY0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHhjYywweDAwLDB4ODEsMHg2NCwweDI4LDB4YzQgfSB9LAoreyAgMTYsIDB4YjY1MCwgMCwgezB4MDksMHhiMiwweDBhLDB4MGMsMHhmMCwweGEzLDB4MjAsMHgyMCwweGM4LDB4MGIsMHgzMiwweDAyLDB4ZWMsMHgwMiwweDgzLDB4MDggfSB9LAoreyAgMTYsIDB4YjY2MCwgMCwgezB4MmMsMHhjOCwweDA5LDB4MzIsMHgwMiwweGNjLDB4ODAsMHhhYiwweGEwLDB4MjAsMHhjOCwweDBiLDB4MzIsMHgwMCwweGIyLDB4MDEgfSB9LAoreyAgMTYsIDB4YjY3MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhYywweDEwLDB4ODksMHgwMCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4YjY4MCwgMCwgezB4MDgsMHhiMiwweDEyLDB4MmMsMHgwMiwweDBiLDB4MDAsMHgyMiwweGMwLDB4MGIsMHhiOCwweDAyLDB4ZWMsMHgwMCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4YjY5MCwgMCwgezB4MjYsMHhjMCwweDRiLDB4YjAsMHg0NiwweGVjLDB4MDAsMHhiOSwweDAwLDB4MGEsMHhjMCwweDBiLDB4YjAsMHgwMiwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4YjZhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGQwLDB4MTUsMHhlYywweDEwLDB4YzksMHhlMCwweDNhLDB4YzAgfSB9LAoreyAgMTYsIDB4YjZiMCwgMCwgezB4MGQsMHgyOCwweDAzLDB4MmMsMHgwMCwweGViLDB4MTAsMHgzMiwweGMwLDB4MGYsMHg4MiwweDAzLDB4YzQsMHgwMCwweGNiLDB4MDAgfSB9LAoreyAgMTYsIDB4YjZjMCwgMCwgezB4M2UsMHhjMSwweDBmLDB4YjAsMHgwNiwweGVjLDB4MDgsMHhlOSwweDAwLDB4YjIsMHhjMCwweDBmLDB4YjAsMHgxMywweDkwLDB4MDQgfSB9LAoreyAgMTYsIDB4YjZkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHg5YywweDAwLDB4ZjUsMHhhMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YjZlMCwgMCwgezB4MGYsMHhlOCwweDAzLDB4ZmMsMHgwOCwweGZmLDB4MDAsMHgzZiwweGMwLDB4OGYsMHhjMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YjZmMCwgMCwgezB4MzcsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZiwweDA0LDB4M2UsMHhjMCwweDBmLDB4ZjAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjcwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4MTAsMHhhYywweDAwLDB4ZjksMHg0MCwweDM0LDB4YzAgfSB9LAoreyAgMTYsIDB4YjcxMCwgMCwgezB4MGQsMHhiNCwweDAzLDB4MmMsMHgwMCwweGRiLDB4NDAsMHgzZSwweGMwLDB4MmMsMHg4MCwweDAzLDB4NjQsMHgwOCwweGZiLDB4MTAgfSB9LAoreyAgMTYsIDB4YjcyMCwgMCwgezB4M2UsMHhjNiwweDhmLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmOSwweDgwLDB4MzIsMHhjMCwweDBjLDB4YjAsMHgwYiwweDE0LDB4MDQgfSB9LAoreyAgMTYsIDB4YjczMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgzZSwweDIwLDB4ZTksMHhjOCwweDM3LDB4ZDQgfSB9LAoreyAgMTYsIDB4Yjc0MCwgMCwgezB4NDgsMHhhYSwweDIyLDB4MWMsMHgwMCwweDhiLDB4MDAsMHg2ZiwweGUwLDB4MDgsMHg4NSwweDgyLDB4ZWQsMHg0MCwweGJiLDB4ODQgfSB9LAoreyAgMTYsIDB4Yjc1MCwgMCwgezB4MmYsMHhjMCwweDRiLDB4YjgsMHgwMywweGFkLDB4NDAsMHhiMywweDAwLDB4MjMsMHhkNCwweDA4LDB4ZjcsMHgwMiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjc2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHg0YywweDAwLDB4YjEsMHg2NCwweGE0LDB4YzAgfSB9LAoreyAgMTYsIDB4Yjc3MCwgMCwgezB4MDksMHgyMCwweDBhLDB4MGMsMHgwNCwweGI4LDB4MDAsMHg2YywweGMwLDB4MDgsMHgzOCwweDAyLDB4YzgsMHg0MCwweGIzLDB4ODAgfSB9LAoreyAgMTYsIDB4Yjc4MCwgMCwgezB4MmMsMHhkMSwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDQsMHhiMywweDAwLDB4MjgsMHhjMCwweDA4LDB4MzAsMHgwMiwweDNhLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjc5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGIwLDB4MDEsMHgxZSwweDAwLDB4YTUsMHg4MCwweDI1LDB4ZTAgfSB9LAoreyAgMTYsIDB4YjdhMCwgMCwgezB4ODgsMHgzYSwweDEyLDB4MWUsMHgwMCwweGE2LDB4OTAsMHgyZCwweGUyLDB4MDgsMHg3OSwweDAyLDB4ZGEsMHgwMCwweGI3LDB4ODIgfSB9LAoreyAgMTYsIDB4YjdiMCwgMCwgezB4MmQsMHhlMCwweDAzLDB4NzgsMHg4MiwweDllLDB4MDAsMHhiYywweGMxLDB4MjksMHhlMCwweDA4LDB4NzgsMHgwMiwweDJjLDB4MTAgfSB9LAoreyAgMTYsIDB4YjdjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ5LDB4MDgsMHgwYywweDAwLDB4ZjMsMHgwMCwweDM0LDB4YzAgfSB9LAoreyAgMTYsIDB4YjdkMCwgMCwgezB4MGQsMHgzZSwweDAzLDB4MGMsMHgwMCwweGYwLDB4NDAsMHgyZSwweGMwLDB4MGMsMHgzMCwweDQzLDB4YzgsMHgwMCwweGYzLDB4MDAgfSB9LAoreyAgMTYsIDB4YjdlMCwgMCwgezB4M2MsMHhjMCwweDA3LDB4MzAsMHgwMywweGNjLDB4ODAsMHhmMiwweDAwLDB4MzgsMHhjMCwweDBjLDB4MzAsMHgwMywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4YjdmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTksMHhiZCwweDIwLDB4ZjcsMHgwMCwweDNmLDB4YzIgfSB9LAoreyAgMTYsIDB4YjgwMCwgMCwgezB4MGYsMHhmMSwweDBiLDB4ZGMsMHgyMCwweGRlLDB4MDQsMHgzZiwweGQyLDB4MDcsMHhmMCwweDEzLDB4ZjgsMHg0MCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YjgxMCwgMCwgezB4M2YsMHhjMCwweDA3LDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZCwweDAwLDB4MzcsMHhjMCwweDBmLDB4NzAsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4YjgyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGFhLDB4MDUsMHhjZiwweDAwLDB4ZGMsMHgwMCwweDNlLDB4Y2EgfSB9LAoreyAgMTYsIDB4YjgzMCwgMCwgezB4MGYsMHhhMCwweDAwLDB4YWMsMHg5MiwweGM5LDB4MDAsMHgzMiwweGMwLDB4MGYsMHhiMCwweDExLDB4YTQsMHgwOCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjg0MCwgMCwgezB4MmUsMHhjMCwweDRmLDB4YjAsMHgyMywweGVjLDB4MDAsMHhmOSwweDAwLDB4M2UsMHhjNCwweDBmLDB4YjAsMHgwMywweGVhLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjg1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4OTEsMHg5YywweDAwLDB4ODQsMHgwMCwweDAxLDB4YzAgfSB9LAoreyAgMTYsIDB4Yjg2MCwgMCwgezB4NGIsMHg3MCwweDIyLDB4MWMsMHhjMCwweDg3LDB4MDAsMHgyMSwweGMwLDB4NGIsMHg3MCwweDAyLDB4MWMsMHgwMCwweGI3LDB4MDEgfSB9LAoreyAgMTYsIDB4Yjg3MCwgMCwgezB4MjUsMHhkOCwweDBiLDB4NzAsMHgyMiwweGRjLDB4MDAsMHhiNiwweDAwLDB4MmQsMHhjMCwweDBiLDB4NzIsMHgyMiwweGYyLDB4MDQgfSB9LAoreyAgMTYsIDB4Yjg4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHg5ZSwweDgwLDB4OTcsMHg4MCwweGE5LDB4ZTAgfSB9LAoreyAgMTYsIDB4Yjg5MCwgMCwgezB4MGIsMHhmOCwweDAyLDB4Y2UsMHgwOCwweDg1LDB4ODAsMHgyOSwweGU4LDB4MGIsMHhmYywweDAyLDB4MTcsMHgwMCwweGI3LDB4ODAgfSB9LAoreyAgMTYsIDB4YjhhMCwgMCwgezB4MmQsMHhlMCwweDhiLDB4NzgsMHgwMiwweGRlLDB4MDAsMHhiNCwweGMwLDB4MmQsMHhlOCwweDBiLDB4NzksMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjhiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDAwLDB4ODMsMHgwOCwweGEwLDB4YzAgfSB9LAoreyAgMTYsIDB4YjhjMCwgMCwgezB4OGIsMHgzYywweDAyLDB4NGMsMHgwMCwweDgzLDB4MDAsMHhhMCwweGMwLDB4MWIsMHgzYywweDBhLDB4MGYsMHgyOSwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YjhkMCwgMCwgezB4MjQsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMywweDgwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4YjhlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZGUsMHgwMCwweDNhLDB4ODAgfSB9LAoreyAgMTYsIDB4YjhmMCwgMCwgezB4MGYsMHhlYSwweDAyLDB4ZTgsMHgwMCwweGNlLDB4MDAsMHgzYSwweDgwLDB4MGYsMHhlMCwweDAzLDB4MzgsMHgwMCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4YjkwMCwgMCwgezB4M2UsMHg4MCwweDBmLDB4YTAsMHgwMywweGU4LDB4MDAsMHhmZSwweDAwLDB4M2UsMHg4MCwweDBiLDB4YTAsMHgwMywweGZhLDB4MDQgfSB9LAoreyAgMTYsIDB4YjkxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgwNCwweGJhLDB4MDEgfSB9LAoreyAgMTYsIDB4YjkyMCwgMCwgezB4MGYsMHg4MiwweDBiLDB4ODAsMHgwNCwweGY4LDB4ODAsMHgzZSwweDAwLDB4MGYsMHg4NiwweDAzLDB4NjAsMHgwMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YjkzMCwgMCwgezB4MzYsMHgwMCwweDBmLDB4ODAsMHgyMywweGUxLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4Yjk0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAxLDB4ZjksMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4Yjk1MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweDQ5LDB4MDAsMHgzMiwweDQwLDB4MGIsMHg5MCwweDAzLDB4MjQsMHgwMCwweDQ5LDB4MDAgfSB9LAoreyAgMTYsIDB4Yjk2MCwgMCwgezB4M2MsMHg0MCwweDBkLDB4OTAsMHgwMywweGU0LDB4MDgsMHhjOSwweDAwLDB4M2UsMHg2MCwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4Yjk3MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDAwLDB4YjksMHg0MCwweGEyLDB4NjQgfSB9LAoreyAgMTYsIDB4Yjk4MCwgMCwgezB4MGIsMHgxOCwweDAyLDB4MjUsMHgwMCwweGQxLDB4NTAsMHgzNiwweDUwLDB4NGUsMHg5MCwweDBhLDB4MjQsMHgwMiwweDg5LDB4NDAgfSB9LAoreyAgMTYsIDB4Yjk5MCwgMCwgezB4M2EsMHg1MSwweDA4LDB4OTQsMHgwMiwweGU1LDB4MjIsMHg4OSwweDQ0LDB4MmUsMHg2MCwweDI4LDB4OTAsMHgwYSwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YjlhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHgyNCwweDAwLDB4YjEsMHgwOCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4YjliMCwgMCwgezB4NGIsMHg5MiwweDgyLDB4YTUsMHgwMCwweGE5LDB4MDgsMHgyMiwweDUwLDB4MGEsMHgxMCwweDAyLDB4MGMsMHgwMCwweGE5LDB4NDAgfSB9LAoreyAgMTYsIDB4YjljMCwgMCwgezB4NmUsMHg1MCwweDBiLDB4OTQsMHgwMiwweGM0LDB4MDQsMHg4OSwweDQ0LDB4NmMsMHg0OCwweDg4LDB4MTAsMHgwMiwweDQ2LDB4MDAgfSB9LAoreyAgMTYsIDB4YjlkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwNCwweDAwLDB4YjEsMHg0MCwweGUwLDB4NDAgfSB9LAoreyAgMTYsIDB4YjllMCwgMCwgezB4MWIsMHgxNCwweDBhLDB4MDQsMHgwMCwweGI5LDB4MDAsMHgyNCwweDQwLDB4MWEsMHgxMCwweDIyLDB4MDQsMHgwMCwweGExLDB4MDAgfSB9LAoreyAgMTYsIDB4YjlmMCwgMCwgezB4MjgsMHg0MCwweDBhLDB4MTAsMHgxMiwweGM0LDB4MDAsMHg4MSwweDAyLDB4NmMsMHg0MCwweDA4LDB4MTIsMHgwMiwweDQyLDB4MDEgfSB9LAoreyAgMTYsIDB4YmEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDA4LDB4YjAsMHgwMCwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4YmExMCwgMCwgezB4NGYsMHg4MCwweDAyLDB4YTEsMHg1MCwweGUwLDB4NTAsMHgzMiwweDE0LDB4MGUsMHhhNSwweDIzLDB4MjEsMHg0MCwweGU4LDB4NTAgfSB9LAoreyAgMTYsIDB4YmEyMCwgMCwgezB4M2UsMHgxNCwweDBmLDB4ODUsMHgwMywweGUxLDB4NDAsMHhjOCwweDUwLDB4MWUsMHgxNCwweDBjLDB4ODUsMHg0MywweDZlLDB4MDMgfSB9LAoreyAgMTYsIDB4YmEzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGQ4LDB4MTksMHhlNSwweDAwLDB4ZmQsMHg0MCwweDNlLDB4NTAgfSB9LAoreyAgMTYsIDB4YmE0MCwgMCwgezB4MGYsMHg3NCwweDAzLDB4YTUsMHgwMCwweDVkLDB4MDAsMHgzZSwweDUwLDB4MGEsMHg1MCwweDEzLDB4ZjQsMHgwMCwweGQ5LDB4MDAgfSB9LAoreyAgMTYsIDB4YmE1MCwgMCwgezB4M2EsMHg1MCwweDBkLDB4OTAsMHgxMywweGU0LDB4MDAsMHhmZiwweDAwLDB4M2UsMHg1MCwweDBmLDB4OTEsMHgwMywweGE2LDB4MDYgfSB9LAoreyAgMTYsIDB4YmE2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNiwweDkwLDB4YmQsMHhlOCwweDIzLDB4NmIgfSB9LAoreyAgMTYsIDB4YmE3MCwgMCwgezB4MGIsMHhkYSwweDBiLDB4MzYsMHg4MCwweGM5LDB4MDAsMHgzMiwweDY4LDB4NDYsMHg5MCwweDQzLDB4ZTQsMHgwMCwweDQ5LDB4MDAgfSB9LAoreyAgMTYsIDB4YmE4MCwgMCwgezB4MzIsMHg2OCwweDBjLDB4OTAsMHgwMywweDI0LDB4NDAsMHhmOSwweDAwLDB4MzIsMHg2MCwweDBjLDB4OWMsMHgwMywweGM2LDB4MDEgfSB9LAoreyAgMTYsIDB4YmE5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDc4LDB4MTAsMHhlMSwweDAwLDB4YjgsMHhlMCwweGEyLDB4MTEgfSB9LAoreyAgMTYsIDB4YmFhMCwgMCwgezB4MGIsMHg4ZSwweDBhLDB4MjMsMHgyMiwweDg4LDB4ODAsMHgyYSwweDMxLDB4MjgsMHg4OCwweDAyLDB4NjIsMHgwMCwweDg4LDB4ODAgfSB9LAoreyAgMTYsIDB4YmFiMCwgMCwgezB4YTIsMHgzMCwweDI4LDB4ODgsMHg4YSwweDIyLDB4MDAsMHhiOCwweGE4LDB4YTIsMHgzOSwweDA4LDB4Y2EsMHgwMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4YmFjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDUsMHhjNSwweDA4LDB4MjEsMHgwMCwweDAwLDB4NDAgfSB9LAoreyAgMTYsIDB4YmFkMCwgMCwgezB4MDMsMHgxNCwweDgyLDB4ODUsMHg4MCwweGFkLDB4MDgsMHgyMSwweDUyLDB4OTgsMHg1MCwweDgyLDB4MzQsMHgyMywweDg1LDB4MDggfSB9LAoreyAgMTYsIDB4YmFlMCwgMCwgezB4MjEsMHg1MiwweDA4LDB4NTAsMHgwNiwweDU0LDB4MDAsMHhiNSwweDIwLDB4MjEsMHg1YSwweDA5LDB4NTQsMHgwMiwweGQyLDB4MDEgfSB9LAoreyAgMTYsIDB4YmFmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTEsMHhhNCwweDAwLDB4YjksMHg2MSwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4YmIwMCwgMCwgezB4MGIsMHg5MCwweDA2LDB4MDQsMHgwMCwweGFkLDB4MDAsMHg2OSwweDQwLDB4MDgsMHhkMCwweDAyLDB4NzQsMHgwMCwweDg1LDB4MDAgfSB9LAoreyAgMTYsIDB4YmIxMCwgMCwgezB4MDEsMHg0MCwweDAwLDB4NzAsMHgwNiwweDc0LDB4MDQsMHhiNSwweDAwLDB4MjMsMHg0MCwweDA5LDB4ZDAsMHgwMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4YmIyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTQsMHhhNCwweDAwLDB4ZTksMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4YmIzMCwgMCwgezB4NGYsMHg5NSwweDBiLDB4YTQsMHgwMCwweGU5LDB4MDAsMHgzMiwweDQwLDB4OGMsMHg5MCwweDAzLDB4MjQsMHgwMCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4YmI0MCwgMCwgezB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweDY0LDB4MDgsMHhmOSwweDAwLDB4MzIsMHg0MCwweDNkLDB4OTAsMHgwMywweGU4LDB4MDQgfSB9LAoreyAgMTYsIDB4YmI1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MDEsMHhhNCwweDA4LDB4ZjksMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4YmI2MCwgMCwgezB4NGYsMHg5MCwweDhiLDB4ZTQsMHgwNCwweGQ5LDB4MDEsMHgzZSwweDQwLDB4MGQsMHg5MCwweDAzLDB4NjQsMHgwMCwweGQ5LDB4MDEgfSB9LAoreyAgMTYsIDB4YmI3MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGE0LDB4MDAsMHhmOSwweDAwLDB4M2MsMHg0MCwweDBlLDB4OTAsMHgwMywweGRhLDB4MDAgfSB9LAoreyAgMTYsIDB4YmI4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4ZjgsMHg0MCwweDM2LDB4MjAgfSB9LAoreyAgMTYsIDB4YmI5MCwgMCwgezB4MTcsMHg4NCwweDAzLDB4MjAsMHgyMSwweGM4LDB4MDAsMHg3ZSwweDAyLDB4MmMsMHg4MCwweDQzLDB4MjAsMHgwMCwweGU4LDB4MDIgfSB9LAoreyAgMTYsIDB4YmJhMCwgMCwgezB4M2UsMHgwMSwweDBmLDB4ODAsMHgwMywweGUwLDB4MDAsMHhjOCwweDQwLDB4MWUsMHgwMCwweDBmLDB4ODAsMHgwMywweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4YmJiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgyYSwweDg4LDB4YjYsMHgwMiwweDIzLDB4YTAgfSB9LAoreyAgMTYsIDB4YmJjMCwgMCwgezB4MGIsMHhlYywweDQyLDB4MmIsMHgwMCwweGQyLDB4ODAsMHg2ZSwweGIxLDB4MDgsMHhhMCwweDIyLDB4MDgsMHgwMCwweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4YmJkMCwgMCwgezB4M2EsMHg4MCwweDlmLDB4YTAsMHgwMywweGE4LDB4MDAsMHg4YSwweDA0LDB4MmUsMHg4MCwweDBiLDB4YTgsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YmJlMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YjIsMHgwMCwweGE0LDB4ZTEgfSB9LAoreyAgMTYsIDB4YmJmMCwgMCwgezB4OGIsMHhiNCwweDMyLDB4NDcsMHg0NSwweDgzLDB4OTAsMHgyYywweGY0LDB4NGIsMHgzOCwweDEyLDB4MGUsMHg0NCwweGEzLDB4MDEgfSB9LAoreyAgMTYsIDB4YmMwMCwgMCwgezB4MmMsMHhjMCwweDRiLDB4MzAsMHgwMiwweGNlLDB4MDAsMHg5MywweDAwLDB4NmMsMHhjMCwweDBiLDB4MzgsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YmMxMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxYywweDAwLDB4YjcsMHg0NCwweDIxLDB4YzIgfSB9LAoreyAgMTYsIDB4YmMyMCwgMCwgezB4MGIsMHg1NCwweDAyLDB4NTQsMHgwNSwweDg3LDB4MDAsMHgyYywweDQwLDB4OWIsMHg2YywweDAyLDB4MTgsMHgxMCwweGE3LDB4MDQgfSB9LAoreyAgMTYsIDB4YmMzMCwgMCwgezB4MjksMHhjMCwweDBhLDB4NzAsMHgwMiwweDliLDB4MDAsMHg5NywweDA0LDB4MGQsMHg4MCwweDBiLDB4NjAsMHg4MiwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4YmM0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4ZjMsMHg4MCwweDM1LDB4ZTAgfSB9LAoreyAgMTYsIDB4YmM1MCwgMCwgezB4MGIsMHgzOCwweDAyLDB4NTIsMHgxMCwweDg0LDB4ODAsMHgyZCwweGEwLDB4MGYsMHhmOCwweDBiLDB4MWUsMHgwMCwweGU2LDB4ODAgfSB9LAoreyAgMTYsIDB4YmM2MCwgMCwgezB4MWQsMHhhMCwweDBiLDB4NjgsMHgwMywweGZlLDB4MDIsMHhkNiwweDgwLDB4M2QsMHhlMCwweDBmLDB4NzgsMHgwMywweGVhLDB4MDIgfSB9LAoreyAgMTYsIDB4YmM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBhLDB4MWQsMHhhYywweDAwLDB4ZmIsMHgwMCwweDNlLDB4YzEgfSB9LAoreyAgMTYsIDB4YmM4MCwgMCwgezB4OGIsMHg5MCwweDBiLDB4ODAsMHgwYSwweGI4LDB4MDEsMHgyZSwweDAwLDB4MGMsMHhiMCwweDAzLDB4ZTgsMHgwMCwweGZhLDB4MDAgfSB9LAoreyAgMTYsIDB4YmM5MCwgMCwgezB4M2UsMHhjMCwweDBmLDB4YTAsMHg0MywweGVjLDB4MDAsMHhlYiwweDAwLDB4M2UsMHg4MCwweDBmLDB4YTYsMHgyMywweGMyLDB4MDIgfSB9LAoreyAgMTYsIDB4YmNhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZSwweDAwLDB4ZmUsMHg4MCwweDMzLDB4MjAgfSB9LAoreyAgMTYsIDB4YmNiMCwgMCwgezB4NGUsMHhjOSwweDEyLDB4ZjYsMHg1MCwweGVmLDB4OTAsMHgzZiwweGUwLDB4MGMsMHgxOSwweDAwLDB4YjYsMHg0MiwweGNmLDB4MjEgfSB9LAoreyAgMTYsIDB4YmNjMCwgMCwgezB4M2YsMHhlMCwweDBlLDB4ZjksMHgwMiwweGU2LDB4YzAsMHhmZiwweDgwLDB4M2YsMHhlMCwweDRjLDB4ZGMsMHgwMywweDQwLDB4MDAgfSB9LAoreyAgMTYsIDB4YmNkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGFhLDB4MTEsMHg5NCwweDAwLDB4YjcsMHgwMCwweDgxLDB4NDAgfSB9LAoreyAgMTYsIDB4YmNlMCwgMCwgezB4MDgsMHgwMywweDAyLDB4MTQsMHhjNCwweDg3LDB4MDEsMHgyZCwweGM4LDB4MDgsMHg2YSwweDEyLDB4MzgsMHg0MCwweDg3LDB4MDIgfSB9LAoreyAgMTYsIDB4YmNmMCwgMCwgezB4MmQsMHhjMCwweDA4LDB4NzEsMHgxMiwweGQyLDB4ODAsMHhiNywweDAwLDB4MmQsMHg4MCwweDA4LDB4NjAsMHgwMiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YmQwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4YjcsMHgxMCwweDIxLDB4ODAgfSB9LAoreyAgMTYsIDB4YmQxMCwgMCwgezB4MDgsMHhmNCwweDEyLDB4OTQsMHgwNCwweGE2LDB4MDAsMHgyYywweGMwLDB4MTgsMHhkMiwweDAyLDB4MTQsMHg0OCwweDg2LDB4MTAgfSB9LAoreyAgMTYsIDB4YmQyMCwgMCwgezB4MmQsMHg4MCwweDBhLDB4NjEsMHgzMiwweGQ0LDB4MDAsMHhiNiwweDE4LDB4MmQsMHhjNCwweDA4LDB4NTgsMHgwMiwweDAwLDB4MTAgfSB9LAoreyAgMTYsIDB4YmQzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjNCwweDAwLDB4YjMsMHgwMCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4YmQ0MCwgMCwgezB4NDAsMHhiMCwweDIyLDB4MDQsMHgwMCwweDgyLDB4ODEsMHgwYywweGMwLDB4MDgsMHgzMCwweDBhLDB4MGEsMHgwMCwweDhhLDB4MDAgfSB9LAoreyAgMTYsIDB4YmQ1MCwgMCwgezB4MmUsMHhjMCwweDA4LDB4YTAsMHgwMiwweGM0LDB4MDAsMHhiYiwweDAwLDB4MmUsMHg4MCwweDA4LDB4MjAsMHgwMiwweDA4LDB4MDQgfSB9LAoreyAgMTYsIDB4YmQ2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhYywweDAwLDB4ZmIsMHgwMCwweGEwLDB4YzAgfSB9LAoreyAgMTYsIDB4YmQ3MCwgMCwgezB4MjQsMHg5NCwweDIzLDB4YWMsMHgxMCwweGViLDB4YTAsMHgwZSwweGMwLDB4MGMsMHhiMCwweDAyLDB4MmUsMHgyMCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4YmQ4MCwgMCwgezB4MmUsMHg0MCwweDBlLDB4OTAsMHgwMywweGVjLDB4MDAsMHhmOSwweDgwLDB4M2UsMHg0MCwweDZjLDB4YTAsMHgwYiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YmQ5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhjYywweDAwLDB4ZmIsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4YmRhMCwgMCwgezB4ODksMHg5MCwweDAzLDB4MmMsMHgwMCwweGZiLDB4MDIsMHgzZSwweDQwLDB4NGYsMHhhMCwweDAzLDB4NmQsMHgwMSwweGZiLDB4NDEgfSB9LAoreyAgMTYsIDB4YmRiMCwgMCwgezB4M2UsMHhjMCwweDhmLDB4YjQsMHgwMywweGU4LDB4MDAsMHhmYiwweDIwLDB4M2UsMHg1MCwweDBmLDB4YTQsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YmRjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4YzMsMHgyMCwweGIyLDB4YzAgfSB9LAoreyAgMTYsIDB4YmRkMCwgMCwgezB4MGQsMHhkMCwweDAzLDB4MzgsMHgwMCwweGNkLDB4MDAsMHgzZiwweDgwLDB4MGQsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZkLDB4MDIgfSB9LAoreyAgMTYsIDB4YmRlMCwgMCwgezB4MzYsMHgwMCwweDBjLDB4ZDAsMHgwMywweDNmLDB4MDgsMHhmYywweDA0LDB4MTIsMHhjMCwweDBjLDB4YTAsMHgwMywweGMwLDB4NDQgfSB9LAoreyAgMTYsIDB4YmRmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2YywweDAyLDB4OGIsMHhjOCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4YmUwMCwgMCwgezB4MDgsMHg5OCwweDBhLDB4MmEsMHg0MCwweDg5LDB4MjAsMHgyZSwweDAxLDB4OGUsMHhiMCwweDEyLDB4ZWMsMHg4MCwweGJiLDB4ZjAgfSB9LAoreyAgMTYsIDB4YmUxMCwgMCwgezB4MjIsMHhlNSwweDA4LDB4YmQsMHgwMiwweDJlLDB4MDAsMHhiYiwweDkwLDB4MjIsMHhlZCwweDA4LDB4YTIsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YmUyMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4OGIsMHgwMSwweDIyLDB4MDAgfSB9LAoreyAgMTYsIDB4YmUzMCwgMCwgezB4NDksMHhhOCwweDFlLDB4MDQsMHgwMCwweDhiLDB4MDEsMHgyZSwweGMwLDB4NDksMHg5MCwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4YmU0MCwgMCwgezB4MjIsMHg0MCwweDBhLDB4OTAsMHgwMiwweDJjLDB4MDAsMHhiOSwweDAwLDB4MmEsMHg0MCwweDA4LDB4ODAsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YmU1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDAwLDB4ODEsMHgwMCwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4YmU2MCwgMCwgezB4MDgsMHgyMCwweDAyLDB4MDQsMHgwMCwweDgzLDB4MDAsMHgyYywweGMwLDB4MGEsMHgyMCwweDQyLDB4Y2MsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4YmU3MCwgMCwgezB4MjAsMHhjMCwweDAyLDB4MzAsMHgwMiwweDA4LDB4ODQsMHhiMywweDA0LDB4MDgsMHg0MCwweDA4LDB4MjAsMHgwMiwweGMyLDB4MTEgfSB9LAoreyAgMTYsIDB4YmU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4OGIsMHgwMCwweGIyLDB4ODAgfSB9LAoreyAgMTYsIDB4YmU5MCwgMCwgezB4MGQsMHhiMSwweDAzLDB4MjQsMHgwMiwweGNiLDB4MDEsMHgzZSwweGMwLDB4NGQsMHg5MCwweDQzLDB4ZTQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4YmVhMCwgMCwgezB4YjIsMHgwMCwweDJlLDB4OTAsMHgwYiwweDJjLDB4ODAsMHhmOCwweDAwLDB4YmEsMHhjMCwweDJjLDB4ODAsMHgwMywweGMwLDB4MDMgfSB9LAoreyAgMTYsIDB4YmViMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmNCwweDAwLDB4N2QsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4YmVjMCwgMCwgezB4MGYsMHg3MiwweDAzLDB4ZDQsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGUsMHhmMSwweDQ3LDB4ZmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YmVkMCwgMCwgezB4M2IsMHhjMCwweDBkLDB4ZjAsMHgxMywweGZjLDB4NTAsMHhmZiwweDAwLDB4MzcsMHhjMCwweDBmLDB4ZTAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4YmVlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmMCwweGM0LDB4Y2MsMHgzMywweDNmLDB4MDQgfSB9LAoreyAgMTYsIDB4YmVmMCwgMCwgezB4MmMsMHhmNiwweDAzLDB4MzgsMHg2MCwweGNjLDB4OTAsMHhiMywweDIwLDB4MGYsMHhmMSwweDIzLDB4ZjAsMHg2MCwweGZmLDB4MDEgfSB9LAoreyAgMTYsIDB4YmYwMCwgMCwgezB4MjMsMHhjOCwweDBjLDB4ZjIsMHg4YSwweDNjLDB4ODEsMHhkZiwweDMwLDB4M2YsMHg2NCwweDBjLDB4ZDgsMHgwMywweDMwLDB4MDQgfSB9LAoreyAgMTYsIDB4YmYxMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlMCwweGMyLDB4OGEsMHgzMCwweDJlLDB4MTggfSB9LAoreyAgMTYsIDB4YmYyMCwgMCwgezB4MDgsMHhmNSwweDMwLDB4YTUsMHg5NCwweDU4LDB4MjIsMHgyMiwweDIxLDB4NGIsMHhmMywweDAyLDB4ZTEsMHgwMCwweDlmLDB4NzAgfSB9LAoreyAgMTYsIDB4YmYzMCwgMCwgezB4MmIsMHhlNCwweDBhLDB4ZjQsMHgxMiwweDFkLDB4NDAsMHhhZiwweDcyLDB4MmMsMHg0OSwweDJmLDB4MzAsMHg4MiwweGEwLDB4MDYgfSB9LAoreyAgMTYsIDB4YmY0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjNCwweDgwLDB4ODAsMHhhMCwweDJjLDB4OTggfSB9LAoreyAgMTYsIDB4YmY1MCwgMCwgezB4MDgsMHgzMiwweDIyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyOCwweDAwLDB4MDMsMHgzMiwweDAyLDB4YzAsMHg4NCwweGIzLDB4MGMgfSB9LAoreyAgMTYsIDB4YmY2MCwgMCwgezB4MjAsMHhjMCwweDU4LDB4MzIsMHg5MiwweDhjLDB4MzAsMHhhMywweDIwLDB4MmUsMHhjMCwweDQ4LDB4MTIsMHg0MiwweDYyLDB4MDEgfSB9LAoreyAgMTYsIDB4YmY3MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhOCwweDAwLDB4OGIsMHgwMCwweDJlLDB4MjAgfSB9LAoreyAgMTYsIDB4YmY4MCwgMCwgezB4MDgsMHhiMCwweDBhLDB4MjAsMHgwMSwweDk4LDB4MDAsMHgyYSwweDIyLDB4MGIsMHhiMCwweDAyLDB4ZTYsMHgwMCwweDliLDB4MDAgfSB9LAoreyAgMTYsIDB4YmY5MCwgMCwgezB4MjIsMHhjMCwweDBhLDB4YjAsMHgxMiwweGFjLDB4MDQsMHhhYiwweDAwLDB4MmUsMHhjMCwweDAzLDB4YjAsMHgwMiwweGYwLDB4MDAgfSB9LAoreyAgMTYsIDB4YmZhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTUsMHhlNSwweDAwLDB4YzgsMHgwMCwweDNlLDB4YjAgfSB9LAoreyAgMTYsIDB4YmZiMCwgMCwgezB4MGMsMHhiMCwweDAzLDB4MjksMHgwMCwweGM4LDB4MDAsMHgzYSwweDIwLDB4NGYsMHhiMCwweDAzLDB4ZTIsMHgyMCwweGZiLDB4MDEgfSB9LAoreyAgMTYsIDB4YmZjMCwgMCwgezB4YjAsMHhjMCwweDBjLDB4YjAsMHgwMywweDJjLDB4MDAsMHhmYiwweDAyLDB4M2MsMHg0MSwweDBjLDB4OTAsMHg0MywweDQ4LDB4MDQgfSB9LAoreyAgMTYsIDB4YmZkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhhMiwweDgwLDB4ZmUsMHg0MCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4YmZlMCwgMCwgezB4MGYsMHhmMCwweDYzLDB4ZWMsMHgwMCwweGJmLDB4YzQsMHgxNywweDQyLDB4MGYsMHhmMCwweDAzLDB4ZWMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YmZmMCwgMCwgezB4MWYsMHhjMSwweDBmLDB4YjAsMHgwMywweDVjLDB4MDAsMHhmYiwweDAwLDB4M2YsMHg0MCwweDRmLDB4ZjAsMHgwMCwweGI4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzAwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhNSwweDAyLDB4YzgsMHgwMCwweDNlLDB4OTAgfSB9LAoreyAgMTYsIDB4YzAxMCwgMCwgezB4MmMsMHhiMCwweDBiLDB4MDEsMHgwNiwweGNiLDB4MDEsMHgzZSwweDUwLDB4NWYsMHhiMCwweDEzLDB4MjEsMHgxMCwweGNiLDB4MDAgfSB9LAoreyAgMTYsIDB4YzAyMCwgMCwgezB4N2UsMHhjMCwweDBjLDB4YjAsMHgwYiwweDJjLDB4MDAsMHhjYiwweDAwLDB4MzIsMHhjMCwweDBjLDB4OTAsMHgwMywweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4YzAzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyOCwweDAxLDB4OGIsMHhkMCwweDJjLDB4MzQgfSB9LAoreyAgMTYsIDB4YzA0MCwgMCwgezB4NDgsMHhmZiwweDAyLDB4MzAsMHgwMCwweGFhLDB4MDQsMHgyZSwweDY5LDB4MGYsMHhmMCwweDAzLDB4NjgsMHgxMCwweGRmLDB4MDAgfSB9LAoreyAgMTYsIDB4YzA1MCwgMCwgezB4MmYsMHhkNCwweDBkLDB4ZjAsMHgwMiwweDNlLDB4MDAsMHg1ZiwweDA0LDB4YjYsMHhjMCwweDA4LDB4YjAsMHgwMywweDcyLDB4MDAgfSB9LAoreyAgMTYsIDB4YzA2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg2OSwweDkwLDB4ODEsMHg4MCwweDJjLDB4MDAgfSB9LAoreyAgMTYsIDB4YzA3MCwgMCwgezB4NDgsMHhiOCwweDAyLDB4MDgsMHgwOSwweDk5LDB4MDAsMHg0YywweGIwLDB4MGIsMHgzMCwweDAyLDB4MGMsMHgwMCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4YzA4MCwgMCwgezB4MmMsMHhjMCwweDA5LDB4YjAsMHg0MCwweDBjLDB4NDAsMHg4MywweDAwLDB4MDAsMHg0MCwweDBhLDB4OTAsMHgwMiwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzA5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxNiwweDAwLDB4ODQsMHg4OCwweDJkLDB4ZTQgfSB9LAoreyAgMTYsIDB4YzBhMCwgMCwgezB4NDgsMHgzOSwweDAyLDB4MTYsMHgwMCwweGI0LDB4ODAsMHgyZCwweGUwLDB4MGEsMHg3YiwweDA2LDB4NWUsMHgwMCwweDk3LDB4ODAgfSB9LAoreyAgMTYsIDB4YzBiMCwgMCwgezB4MmQsMHhlMiwweDA5LDB4NzgsMHgwMiwweDFlLDB4OTAsMHg5NywweDgwLDB4MjUsMHg2NCwweDhhLDB4NzgsMHgwMiwweDQ4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzBjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwZCwweDAwLDB4ODEsMHgxMCwweDJjLDB4OTYgfSB9LAoreyAgMTYsIDB4YzBkMCwgMCwgezB4MDgsMHgzMSwweDIzLDB4MGMsMHgwMCwweDkwLDB4MjAsMHgzYywweGM0LDB4MWIsMHhiOCwweDAyLDB4MDgsMHg0MCwweGMzLDB4MDAgfSB9LAoreyAgMTYsIDB4YzBlMCwgMCwgezB4MmMsMHhjNCwweDBkLDB4MzAsMHgwMywweDBlLDB4NDAsMHhjMywweDEwLDB4MzAsMHhjMCwweDRlLDB4MTAsMHgwNywweDFhLDB4MTIgfSB9LAoreyAgMTYsIDB4YzBmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhiYywweDAwLDB4N2QsMHgwNSwweDNmLDB4YzUgfSB9LAoreyAgMTYsIDB4YzEwMCwgMCwgezB4MGYsMHhiMSwweDBiLDB4ZjQsMHgwMCwweGVmLDB4MDAsMHgxZiwweDQ1LDB4MGYsMHhmMCwweDQzLDB4ZmMsMHgwMSwweGZmLDB4NDAgfSB9LAoreyAgMTYsIDB4YzExMCwgMCwgezB4M2QsMHhjNCwweDFmLDB4ZjAsMHgwNiwweGZjLDB4MTAsMHhmZiwweDAwLDB4M2IsMHhjMSwweDJkLDB4ZjEsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4YzEyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDA0LDB4Y2IsMHgwNCwweDNlLDB4YTAgfSB9LAoreyAgMTYsIDB4YzEzMCwgMCwgezB4NDQsMHhiNiwweDAzLDB4MjgsMHgwNCwweGNiLDB4ODAsMHgzMiwweDgwLDB4MGYsMHhiMywweDkzLDB4NjAsMHgwOCwweGZiLDB4MjAgfSB9LAoreyAgMTYsIDB4YzE0MCwgMCwgezB4M2UsMHhkMiwweDFmLDB4YjMsMHgwMywweDJkLDB4ODAsMHhmYiwweDYxLDB4N2UsMHg0MCwweDhjLDB4OTgsMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzE1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg4NCwweDBjLDB4ODYsMHgwNSwweDJkLDB4YzAgfSB9LAoreyAgMTYsIDB4YzE2MCwgMCwgezB4MDgsMHhmNCwweDgyLDB4OGMsMHg5MCwweDg1LDB4MDAsMHhhMSwweGMwLDB4MGIsMHhmMCwweDAyLDB4NWMsMHgwMCwweDM3LDB4MDAgfSB9LAoreyAgMTYsIDB4YzE3MCwgMCwgezB4MmQsMHhkMCwweDBiLDB4NzEsMHgwMiwweDFjLDB4YzgsMHhiNywweDQ4LDB4MmQsMHg0MCwweDBhLDB4NzAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4YzE4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4ODcsMHg4MCwweDJkLDB4YTEgfSB9LAoreyAgMTYsIDB4YzE5MCwgMCwgezB4NjAsMHg3OCwweDRhLDB4MTYsMHhkMCwweGE3LDB4ODAsMHgyOSwweGUwLDB4MGIsMHg3OCwweDUyLDB4OTYsMHgwMSwweGI3LDB4OTAgfSB9LAoreyAgMTYsIDB4YzFhMCwgMCwgezB4MmQsMHhlOCwweDBiLDB4N2EsMHgyMiwweDVlLDB4NDAsMHhiNywweGEwLDB4MmYsMHhlMSwweDQ4LDB4NTAsMHgyMiwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzFiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDEwLDB4ODMsMHg4NCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4YzFjMCwgMCwgezB4MDgsMHgzMCwweDAyLDB4YTQsMHgxMCwweDgzLDB4Y2IsMHgyOCwweGUwLDB4MGIsMHgzMCwweDJhLDB4NGYsMHg0MCwweDkzLDB4MDAgfSB9LAoreyAgMTYsIDB4YzFkMCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweDRjLDB4MTAsMHhiMywweDAyLDB4MmMsMHhjMCwweGFhLDB4MzAsMHgwMiwweDEyLDB4MDQgfSB9LAoreyAgMTYsIDB4YzFlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOCwweDAwLDB4Y2UsMHhhMCwweDNmLDB4ODAgfSB9LAoreyAgMTYsIDB4YzFmMCwgMCwgezB4NGMsMHhhMCwweDJiLDB4M2EsMHgwMCwweGNlLDB4NDAsMHgzYiwweGI4LDB4MGYsMHhhMCwweDAzLDB4YjksMHgwMCwweGJhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzIwMCwgMCwgezB4M2UsMHg4MCwweDBmLDB4YTAsMHgwMywweDY4LDB4MDAsMHhmYSwweDAwLDB4N2UsMHg4MCwweDFjLDB4YTAsMHgwYiwweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4YzIxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDAyLDB4ZjgsMHgwMCwweDNlLDB4MDQgfSB9LAoreyAgMTYsIDB4YzIyMCwgMCwgezB4OGYsMHgwMCwweDAzLDB4ZTAsMHg0YSwweGY4LDB4MTAsMHgyNiwweDE4LDB4MGYsMHg4MCwweDAzLDB4YTAsMHg4MCwweGY4LDB4MDIgfSB9LAoreyAgMTYsIDB4YzIzMCwgMCwgezB4M2UsMHgwMCwweDhmLDB4MDAsMHgwYiwweGEwLDB4MDAsMHhmOCwweDAyLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgxMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4YzI0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDIwLDB4YzksMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4YzI1MCwgMCwgezB4NGQsMHg5OSwweDAzLDB4MjQsMHgwMCwweGM5LDB4MDIsMHgzZSwweDY4LDB4MGYsMHg5MCwweDAyLDB4MjQsMHgwMCwweGU5LDB4MDAgfSB9LAoreyAgMTYsIDB4YzI2MCwgMCwgezB4MzAsMHg0MCwweDhjLDB4OTAsMHgwMywweDA0LDB4NDAsMHhjOSwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4YzI3MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDIwLDB4ODksMHgwNiwweDIyLDB4NTAgfSB9LAoreyAgMTYsIDB4YzI4MCwgMCwgezB4OGIsMHg5YywweGMyLDB4MjQsMHgwMCwweGQ5LDB4MDEsMHgyZSwweDQwLDB4MGIsMHg5MCwweDQyLDB4MjQsMHgwOCwweGI5LDB4MDEgfSB9LAoreyAgMTYsIDB4YzI5MCwgMCwgezB4MjIsMHg0NiwweDBkLDB4OTAsMHgwYSwweDI2LDB4MDIsMHg4OSwweDAwLDB4MmMsMHg0MCwweDBhLDB4MTAsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzJhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHgwNiwweDAwLDB4OTEsMHg0MCwweDQyLDB4NzAgfSB9LAoreyAgMTYsIDB4YzJiMCwgMCwgezB4MGIsMHg5MCwweDEyLDB4MmMsMHgwMiwweDhiLDB4MDAsMHgyZSwweDQwLDB4MGIsMHgxMCwweDIyLDB4ZTQsMHgxMCwweGIxLDB4MDAgfSB9LAoreyAgMTYsIDB4YzJjMCwgMCwgezB4YTIsMHg0MCwweDQ4LDB4OTAsMHgxMiwweDI0LDB4MDgsMHg5OSwweDAyLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4YzJkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDkyLDB4OTEsMHgyMCwweGUwLDB4NDggfSB9LAoreyAgMTYsIDB4YzJlMCwgMCwgezB4MGIsMHgxMiwweDAyLDB4MDQsMHgwMiwweDkxLDB4MTAsMHgyYywweGMwLDB4MGIsMHgxMCwweDA2LDB4ODQsMHhjMCwweGIxLDB4MTAgfSB9LAoreyAgMTYsIDB4YzJmMCwgMCwgezB4MjAsMHg0OCwweDg5LDB4MTEsMHgwMiwweDA1LDB4ODAsMHg5MSwweDQwLDB4MmUsMHg0NCwweDJhLDB4OTQsMHgwMiwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4YzMwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZDgsMHg1MCwweDMwLDB4MTQgfSB9LAoreyAgMTYsIDB4YzMxMCwgMCwgezB4MGYsMHg4NSwweDBiLDB4MjEsMHhlMCwweDgwLDB4NDAsMHgzZSwweDAwLDB4MGYsMHg4NywweDhiLDB4ZTEsMHgwYywweGY4LDB4NmMgfSB9LAoreyAgMTYsIDB4YzMyMCwgMCwgezB4MzIsMHgwMCwweDg0LDB4MDYsMHg4MywweDIwLDB4MDQsMHhkOCwweDI4LDB4M2UsMHgxMCwweDBjLDB4MDAsMHgwMywweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4YzMzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhmNCwweDQwLDB4YWQsMHgxMCwweDNmLDB4NDUgfSB9LAoreyAgMTYsIDB4YzM0MCwgMCwgezB4MGYsMHg5MSwweDAzLDB4ZmMsMHgxOCwweDdkLDB4MjAsMHgxZiwweDQxLDB4MGYsMHg5MCwweDAzLDB4NzQsMHhjMCwweGY5LDB4MjEgfSB9LAoreyAgMTYsIDB4YzM1MCwgMCwgezB4M2UsMHg0NCwweDBmLDB4OTIsMHgwMSwweGU0LDB4NDAsMHhlOSwweDAwLDB4M2QsMHg0OCwweDRmLDB4ZDAsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4YzM2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHhmNywweDgwLDB4ZmQsMHhlMCwweDMzLDB4NzAgfSB9LAoreyAgMTYsIDB4YzM3MCwgMCwgezB4MGMsMHhkYSwweDAzLDB4MjYsMHgyMCwweGM5LDB4NDAsMHgzMSwweDQwLDB4MGUsMHg5YSwweDAzLDB4MjQsMHgwMCwweGY5LDB4ODAgfSB9LAoreyAgMTYsIDB4YzM4MCwgMCwgezB4M2IsMHg2MCwweDBmLDB4OWMsMHg4MywweDM2LDB4YTAsMHhmOSwweGExLDB4YjAsMHg0MCwweDBmLDB4OTEsMHgwMywweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4YzM5MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMiwweDkwLDB4YjgsMHhhMCwweDIyLDB4MjggfSB9LAoreyAgMTYsIDB4YzNhMCwgMCwgezB4MjgsMHg4OCwweDBhLDB4MjIsMHgwMiwweDg4LDB4YTAsMHgyMiwweDAwLDB4MDgsMHg4OCwweDAyLDB4YzIsMHg4MCwweGI4LDB4ODggfSB9LAoreyAgMTYsIDB4YzNiMCwgMCwgezB4MjIsMHgwNCwweDBiLDB4OGUsMHgwMywweDIyLDB4ODAsMHhiOCwweGQwLDB4MmEsMHgyMCwweDBiLDB4ODgsMHgwMiwweGNlLDB4MDQgfSB9LAoreyAgMTYsIDB4YzNjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNSwweDgwLDB4YjEsMHg2MSwweDAwLDB4NTggfSB9LAoreyAgMTYsIDB4YzNkMCwgMCwgezB4NDgsMHgxNiwweDhhLDB4MDQsMHhhMCwweDg5LDB4MDEsMHgyMiwweDQwLDB4MWEsMHgxNCwweDg4LDB4MDQsMHgyMCwweGIxLDB4NDAgfSB9LAoreyAgMTYsIDB4YzNlMCwgMCwgezB4MjgsMHg0MCwweDBiLDB4MTAsMHgwYSwweDA0LDB4MjAsMHhiMSwweDJjLDB4MjAsMHg0YSwweDBiLDB4MTIsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4YzNmMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNSwweDkwLDB4YmIsMHg0MCwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4YzQwMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4MjQsMHg0MCwweDg5LDB4NDIsMHg2MiwweDU4LDB4MDgsMHgxMCwweDAyLDB4ZTUsMHgwMCwweGI5LDB4MDMgfSB9LAoreyAgMTYsIDB4YzQxMCwgMCwgezB4MjIsMHhjMCwweDBiLDB4OTAsMHgwMiwweGE0LDB4MTQsMHgzMSwweDAwLDB4MmEsMHg0NCwweDBiLDB4OTAsMHgwMiwweGM2LDB4MDQgfSB9LAoreyAgMTYsIDB4YzQyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTAsMHhhNSwweDAwLDB4ZjksMHgwMSwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4YzQzMCwgMCwgezB4OGMsMHg5MCwweDAzLDB4MjcsMHgwMCwweGMxLDB4OTQsMHgzMCwweDQwLDB4MGUsMHg5MCwweDAzLDB4MjQsMHgwMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4YzQ0MCwgMCwgezB4M2EsMHg0MCwweDBmLDB4OTAsMHgwMywweDI0LDB4MDAsMHhmOSwweDAwLDB4MzIsMHg2MCwweDA3LDB4OTAsMHgyNywweGU4LDB4MDUgfSB9LAoreyAgMTYsIDB4YzQ1MCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHhhNCwweDE4LDB4ZjksMHgwMCwweGJlLDB4NDQgfSB9LAoreyAgMTYsIDB4YzQ2MCwgMCwgezB4MGYsMHg5MCwweDAzLDB4YzQsMHgwMCwweGY5LDB4MDAsMHhiZSwweDYxLDB4OGYsMHg5MCwweDAzLDB4YTQsMHgwMCwweGYxLDB4MDAgfSB9LAoreyAgMTYsIDB4YzQ3MCwgMCwgezB4MWUsMHg0MCwweDBmLDB4MTAsMHgwMywweDI0LDB4MDgsMHhmOSwweDAwLDB4N2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzQ4MCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMSwweDgxLDB4ZjgsMHgwMCwweDMyLDB4MDQgfSB9LAoreyAgMTYsIDB4YzQ5MCwgMCwgezB4MGMsMHgwMCwweGQzLDB4MjEsMHgwMCwweGQ4LDB4MDQsMHgzYSwweDE0LDB4OWMsMHg4MCwweDAzLDB4MjEsMHgwMSwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzRhMCwgMCwgezB4MzYsMHgwMCwweDBjLDB4ODAsMHgxMywweDIwLDB4MTAsMHhjOCwweDAwLDB4MzIsMHgwMCwweDJjLDB4ODAsMHgwMywweGNhLDB4MDQgfSB9LAoreyAgMTYsIDB4YzRiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDQsMHgzYSwweDAwLDB4YmUsMHg4NCwweDIzLDB4ODUgfSB9LAoreyAgMTYsIDB4YzRjMCwgMCwgezB4MDgsMHhlYywweDgzLDB4NjgsMHgwNCwweDhhLDB4MDAsMHgyZiwweDkwLDB4NGQsMHhhMCwweDAyLDB4MjgsMHgwMSwweGRhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzRkMCwgMCwgezB4MjMsMHhiMCwweDBhLDB4YTAsMHgwMiwweDJhLDB4MDgsMHhkYSwweDAxLDB4MjIsMHg4MCwweDBmLDB4YTAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzRlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDAwLDB4YmIsMHhmMCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4YzRmMCwgMCwgezB4MDgsMHgzYywweDBhLDB4MGMsMHgwMCwweDkzLDB4MDEsMHgyOCwweGM4LDB4ODksMHgzMCwweDA2LDB4NGMsMHgwMCwweDgzLDB4MDIgfSB9LAoreyAgMTYsIDB4YzUwMCwgMCwgezB4MmMsMHhmNiwweDA4LDB4MzAsMHgwMiwweDA0LDB4MDAsMHhhMywweDAwLDB4MjAsMHhjMCwweDBhLDB4MzAsMHgwMiwweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4YzUxMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxZCwweDExLDB4YjMsMHgwMCwweGEwLDB4YzAgfSB9LAoreyAgMTYsIDB4YzUyMCwgMCwgezB4MDgsMHg1MCwweDAyLDB4NWMsMHgxMCwweDg3LDB4MDEsMHg2ZCwweDgxLDB4NDksMHgzMiwweDUyLDB4MWUsMHhjMywweDg3LDB4MDAgfSB9LAoreyAgMTYsIDB4YzUzMCwgMCwgezB4MjgsMHhlMCwweDBhLDB4MzIsMHgyNiwweDFmLDB4MDAsMHgzNywweDAwLDB4MjMsMHhlMCwweDBiLDB4NzIsMHgwMiwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzU0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDgsMHgxMiwweDAwLDB4YjcsMHg4MiwweDMxLDB4MjAgfSB9LAoreyAgMTYsIDB4YzU1MCwgMCwgezB4MDgsMHgwOCwweDM3LDB4MGYsMHgwOCwweGQ3LDB4ZTAsMHgzOSwweDYwLDB4MTksMHg3YSwweDBiLDB4NWUsMHgwYywweDgzLDB4YjIgfSB9LAoreyAgMTYsIDB4YzU2MCwgMCwgezB4N2QsMHhlMCwweDBjLDB4N2EsMHgwYiwweDNlLDB4MDIsMHhhZiwweGEwLDB4YjEsMHhlMCwweDBlLDB4N2EsMHgwMywweGNhLDB4MDIgfSB9LAoreyAgMTYsIDB4YzU3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhMCwweDEwLDB4ZmIsMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4YzU4MCwgMCwgezB4NmYsMHhiMCwweDQzLDB4ZWMsMHgxMSwweGZiLDB4MDAsMHgzZSwweDQwLDB4MGYsMHhiNSwweDAzLDB4ZWMsMHgyMCwweGZiLDB4NTAgfSB9LAoreyAgMTYsIDB4YzU5MCwgMCwgezB4MzYsMHgwMCwweDBmLDB4YjUsMHg0MywweGU1LDB4YTEsMHhkYiwweDc4LDB4M2UsMHhjMCwweDBmLDB4YjQsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4YzVhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhmZSwweDAwLDB4ZmYsMHhhMCwweDNmLDB4YTAgfSB9LAoreyAgMTYsIDB4YzViMCwgMCwgezB4MGQsMHhjOSwweDEzLDB4M2UsMHgwMCwweGNmLDB4ZDAsMHgzZCwweGU4LDB4MDIsMHhmZiwweDEzLDB4M2UsMHgwMCwweGNmLDB4ODIgfSB9LAoreyAgMTYsIDB4YzVjMCwgMCwgezB4M2YsMHg2MCwweDBjLDB4ZmMsMHgyMywweDNlLDB4MTAsMHhlZiwweDgwLDB4MzMsMHhmMiwweDBjLDB4ZmMsMHg4MywweDEwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzVkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDQwLDB4YjUsMHgwMSwweDJkLDB4ZDAgfSB9LAoreyAgMTYsIDB4YzVlMCwgMCwgezB4MDgsMHg1OCwweDAyLDB4MWMsMHg0MCwweDU3LDB4MTAsMHgyZCwweDVhLDB4MjgsMHgzMSwweDAyLDB4YmMsMHgwMSwweDk3LDB4MTAgfSB9LAoreyAgMTYsIDB4YzVmMCwgMCwgezB4MmQsMHgwMCwweDBhLDB4NzAsMHgwMiwweDg0LDB4MDQsMHhjZiwweDAwLDB4MjksMHhjMCwweDBhLDB4ZjAsMHgwMiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YzYwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MCwweDAwLDB4YjcsMHgyYSwweDJkLDB4ODIgfSB9LAoreyAgMTYsIDB4YzYxMCwgMCwgezB4MDgsMHg0MiwweDIyLDB4M2MsMHgwMCwweDg3LDB4MTEsMHgwZCwweGNjLDB4ODgsMHgzMiwweDAyLDB4MWQsMHgwMCwweDk3LDB4MDAgfSB9LAoreyAgMTYsIDB4YzYyMCwgMCwgezB4MmMsMHhjNCwweDA4LDB4MzAsMHgwMiwweDE0LDB4MDAsMHhhNywweDAwLDB4MjMsMHhjMCwweDA5LDB4NzAsMHg4MiwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzYzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MTQsMHhjMCwweDIwLDB4YjAsMHgyMCwweDJjLDB4NTAgfSB9LAoreyAgMTYsIDB4YzY0MCwgMCwgezB4MDgsMHgxMCwweDAyLDB4MmQsMHhjMCwweDkzLDB4ZTIsMHgyYywweDIxLDB4MDgsMHgzMCwweDAyLDB4MGUsMHgwOCwweDkzLDB4MDAgfSB9LAoreyAgMTYsIDB4YzY1MCwgMCwgezB4MmMsMHg0MCwweDBhLDB4MzAsMHgwMiwweDhjLDB4MDAsMHg5MywweDAwLDB4MmEsMHhjMCwweDBiLDB4MzAsMHgwMiwweDE4LDB4MDQgfSB9LAoreyAgMTYsIDB4YzY2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhYywweDAwLDB4ZjgsMHhjMCwweDNlLDB4ODAgfSB9LAoreyAgMTYsIDB4YzY3MCwgMCwgezB4MmMsMHhhMCwweDBiLDB4M2YsMHgwMCwweGM3LDB4NjAsMHgzZSwweGQwLDB4MGMsMHhmMCwweDBiLDB4M2MsMHgwMCwweGNmLDB4MDAgfSB9LAoreyAgMTYsIDB4YzY4MCwgMCwgezB4M2UsMHg4MCwweDBjLDB4ZjAsMHgwYiwweDJjLDB4MDAsMHhlZiwweDAwLDB4MzMsMHhjMSwweDBkLDB4ZjAsMHgwYiwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4YzY5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlYywweDQwLDB4ZjMsMHg0MCwweDNlLDB4NTAgfSB9LAoreyAgMTYsIDB4YzZhMCwgMCwgezB4OGUsMHhiNCwweDAzLDB4ZWMsMHgxMCwweGZiLDB4MDAsMHgzZSwweDA5LDB4MGYsMHhiMCwweDEzLDB4ZWMsMHg0MiwweGViLDB4MDAgfSB9LAoreyAgMTYsIDB4YzZiMCwgMCwgezB4M2MsMHgwMCwweDhmLDB4YjAsMHgxMywweGM0LDB4MTEsMHhlMywweDAwLDB4M2UsMHhjMCwweDBlLDB4YjAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzZjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4ZmMsMHg4MCwweDMxLDB4MjIgfSB9LAoreyAgMTYsIDB4YzZkMCwgMCwgezB4MGMsMHhhOCwweDAzLDB4M2MsMHgwMCwweGNmLDB4MDAsMHgzMywweGEwLDB4MGUsMHhmMCwweDAzLDB4ZGMsMHgwMCwweGNmLDB4MDAgfSB9LAoreyAgMTYsIDB4YzZlMCwgMCwgezB4MWYsMHhmMCwweDBjLDB4ZjAsMHgwMywweGY0LDB4MDAsMHhjZiwweDAyLDB4MzMsMHhjMCwweDBjLDB4ZjAsMHgwMiwweDAwLDB4NTQgfSB9LAoreyAgMTYsIDB4YzZmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2ZiwweDAwLDB4YmIsMHhjMCwweDIyLDB4NzAgfSB9LAoreyAgMTYsIDB4YzcwMCwgMCwgezB4MGEsMHhiOSwweDQyLDB4MmMsMHgxMCwweDhiLDB4MDAsMHg3NiwweDExLDB4ODMsMHhiMCwweDAyLDB4ZWMsMHgxMCwweGFiLDB4MDAgfSB9LAoreyAgMTYsIDB4YzcxMCwgMCwgezB4MmUsMHhiMCwweDBhLDB4YjAsMHgwMywweGVjLDB4MDQsMHg4YiwweDAwLDB4YTIsMHhjMCwweDI4LDB4YjAsMHgwMiwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4YzcyMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHg2NSwweDQwLDB4YjgsMHgyMCwweDIyLDB4NDQgfSB9LAoreyAgMTYsIDB4YzczMCwgMCwgezB4NTgsMHgzNCwweDBhLDB4MmMsMHgwMCwweDhiLDB4MDAsMHgyMiwweDg0LDB4NGIsMHhiMCwweDAyLDB4ZWMsMHgwMCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzc0MCwgMCwgezB4NmUsMHhjMCwweDA4LDB4YjAsMHg0MiwweGU2LDB4MDQsMHg4YiwweDAwLDB4MDIsMHhjMCwweDA4LDB4MzAsMHgwMiwweGEwLDB4MDEgfSB9LAoreyAgMTYsIDB4Yzc1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4YjEsMHgwMCwweDIwLDB4YzAgfSB9LAoreyAgMTYsIDB4Yzc2MCwgMCwgezB4MGEsMHgzMCwweDBhLDB4MGMsMHgwMCwweDhiLDB4MDMsMHgyNCwweDgwLDB4MGIsMHgzMCwweDAyLDB4Y2MsMHgwMCwweGEzLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzc3MCwgMCwgezB4NmMsMHgwMCwweDBhLDB4MzAsMHgwMiwweDhkLDB4MDAsMHg4MywweDAwLDB4MjAsMHhjMCwweDE4LDB4MzAsMHgwMiwweDgyLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzc4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHg2NCwweDAwLDB4ZjgsMHgwMCwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzc5MCwgMCwgezB4NGMsMHhhMCwweDBiLDB4MmMsMHgwMiwweGNmLDB4MDAsMHgyMiwweDQwLDB4MGUsMHhmNSwweDAzLDB4ZmMsMHgwMCwweGNmLDB4MDEgfSB9LAoreyAgMTYsIDB4YzdhMCwgMCwgezB4M2UsMHgwMCwweDBjLDB4ZjAsMHgxMiwweGRkLDB4MDIsMHhjZiwweDAyLDB4MzMsMHhjMCwweDRjLDB4ZjAsMHgwYiwweDgwLDB4MDMgfSB9LAoreyAgMTYsIDB4YzdiMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE0LDB4MTksMHhmMCwweDAwLDB4ZmMsMHgwMCwweDNmLDB4NDAgfSB9LAoreyAgMTYsIDB4YzdjMCwgMCwgezB4MGYsMHhiMSwweDAzLDB4ZGMsMHgwMCwweGJmLDB4MDEsMHgzZiwweDAwLDB4MGYsMHhmMiwweDIzLDB4ZmMsMHgxMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YzdkMCwgMCwgezB4M2YsMHgwMCwweDBmLDB4ZjAsMHgwMSwweGY0LDB4ODQsMHhmZiwweDAwLDB4M2QsMHhjMCwweDRmLDB4ZjAsMHgxMywweDY4LDB4MDYgfSB9LAoreyAgMTYsIDB4YzdlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmZSwweDQwLDB4ZGYsMHg4MCwweDMzLDB4YzggfSB9LAoreyAgMTYsIDB4YzdmMCwgMCwgezB4MGMsMHhmOCwweDAzLDB4M2MsMHgwYSwweDlmLDB4YzAsMHgzZiwweGYwLDB4MDgsMHhiOCwweDAyLDB4M2UsMHgwMCwweGZmLDB4ODAgfSB9LAoreyAgMTYsIDB4YzgwMCwgMCwgezB4M2YsMHhkOCwweDBjLDB4ZjksMHg2MSwweDJlLDB4NDAsMHg2ZiwweDkwLDB4M2YsMHhlNCwweDhmLDB4ZjEsMHg4MywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4YzgxMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlYywweDA0LDB4OGIsMHg4MCwweDIzLDB4ZjAgfSB9LAoreyAgMTYsIDB4YzgyMCwgMCwgezB4MDgsMHhiOCwweDAyLDB4M2QsMHg0MCwweGFiLDB4MDAsMHgwZSwweDA4LDB4NDgsMHgyMiwweDgyLDB4NmMsMHgyMCwweGJiLDB4MDAgfSB9LAoreyAgMTYsIDB4YzgzMCwgMCwgezB4MmYsMHhkMCwweDQ4LDB4YjAsMHgwMiwweDJjLDB4MDAsMHhiYiwweDAwLDB4MmUsMHhjMSwweDBiLDB4YjAsMHgwMiwweDMwLDB4MDQgfSB9LAoreyAgMTYsIDB4Yzg0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjYywweDAyLDB4ODMsMHgwMSwweGEwLDB4YzUgfSB9LAoreyAgMTYsIDB4Yzg1MCwgMCwgezB4MDgsMHhiMCwweDRhLDB4NGMsMHhhMCwweDgwLDB4MjQsMHgyOCwweGM4LDB4MDksMHgzMiwweDAyLDB4NGMsMHgwMCwweGIzLDB4MDggfSB9LAoreyAgMTYsIDB4Yzg2MCwgMCwgezB4MmUsMHhkMSwweDI5LDB4YjIsMHgzYSwweDBjLDB4ODQsMHhhMywweDIxLDB4MmMsMHhjOCwweDRiLDB4YjIsMHgwYSwweDMyLDB4MDEgfSB9LAoreyAgMTYsIDB4Yzg3MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhYywweDA4LDB4OGIsMHgwMCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4Yzg4MCwgMCwgezB4MDgsMHhiMCwweDAyLDB4NGMsMHgwMCwweDg4LDB4MjEsMHgyNCwweDIxLDB4MDksMHhiMCwweDQ2LDB4NmMsMHgwMCwweGJiLDB4MDYgfSB9LAoreyAgMTYsIDB4Yzg5MCwgMCwgezB4MmUsMHhjMCwweDA5LDB4YjAsMHgwMiwweDJjLDB4MTAsMHhiYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMiwweDMwLDB4MDQgfSB9LAoreyAgMTYsIDB4YzhhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4Y2IsMHgwMCwweDMyLDB4YzAgfSB9LAoreyAgMTYsIDB4YzhiMCwgMCwgezB4MGMsMHhiOSwweDAyLDB4NmMsMHgwMCwweGNiLDB4YzgsMHgzYSwweGMwLDB4MmQsMHg5MCwweDBiLDB4MmMsMHgwOCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4YzhjMCwgMCwgezB4M2UsMHhjMCwweDBkLDB4MzAsMHg0MiwweDJjLDB4MDAsMHhlYiwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgxMywweDAwLDB4MDQgfSB9LAoreyAgMTYsIDB4YzhkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiYywweDAwLDB4ZWYsMHgwMCwweDNkLDB4YzAgfSB9LAoreyAgMTYsIDB4YzhlMCwgMCwgezB4MGYsMHhmMCwweDAzLDB4YmMsMHgwNiwweGVmLDB4ODIsMHgzZiwweDQwLDB4NGUsMHhjOSwweDgzLDB4YmMsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4YzhmMCwgMCwgezB4N2YsMHhjMCwweDFjLDB4ZjAsMHgxMywweDdjLDB4MDAsMHhmZiwweDA0LDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4YzkwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZmIsMHgwMiwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4YzkxMCwgMCwgezB4MGUsMHhiMCwweDAzLDB4YWMsMHgyMCwweGQ4LDB4NDAsMHgzZSwweGMwLDB4OGMsMHg5MCwweDBiLDB4MmMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4YzkyMCwgMCwgezB4M2UsMHhjOSwweDBkLDB4YjAsMHgzMywweGVjLDB4MDgsMHhmYiwweDAyLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwYiwweDU0LDB4MDQgfSB9LAoreyAgMTYsIDB4YzkzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyYywweDAwLDB4YjMsMHgwMCwweDJmLDB4YzAgfSB9LAoreyAgMTYsIDB4Yzk0MCwgMCwgezB4MGIsMHgzMCwweDEyLDB4ZmMsMHgwMCwweDg4LDB4YTAsMHgyZSwweDQwLDB4MjgsMHg5NCwweDAyLDB4MmMsMHgxMCwweGJiLDB4MDQgfSB9LAoreyAgMTYsIDB4Yzk1MCwgMCwgezB4MmQsMHhjMCwweDI4LDB4YjAsMHgwMiwweGVjLDB4MDAsMHhiYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4NzIsMHgwNiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzk2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg2YywweDAwLDB4YjMsMHgwMCwweDJjLDB4ZTAgfSB9LAoreyAgMTYsIDB4Yzk3MCwgMCwgezB4MGEsMHgxMCwweDAyLDB4Y2QsMHgwMCwweDkzLDB4MDAsMHgyYywweGMwLDB4MDgsMHhiMCwweDAyLDB4NGMsMHgwMCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzk4MCwgMCwgezB4MjgsMHhjMCwweDA4LDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweDNhLDB4MDAgfSB9LAoreyAgMTYsIDB4Yzk5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxZSwweDQwLDB4YjcsMHg4MCwweDJkLDB4ZTIgfSB9LAoreyAgMTYsIDB4YzlhMCwgMCwgezB4MGIsMHg1OCwweDAyLDB4ZGUsMHgwMiwweDk3LDB4ODEsMHgyZiwweGEwLDB4MDgsMHg2OCwweDAyLDB4NWUsMHgwMCwweGI3LDB4ODEgfSB9LAoreyAgMTYsIDB4YzliMCwgMCwgezB4MmYsMHhlMCwweDA4LDB4NzksMHgwMiwweGRlLDB4MDAsMHhiNywweDgxLDB4MmQsMHhlMCwweDBiLDB4NzgsMHgwMiwweDNjLDB4MDAgfSB9LAoreyAgMTYsIDB4YzljMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ZjMsMHgwMCwweDNjLDB4YzAgfSB9LAoreyAgMTYsIDB4YzlkMCwgMCwgezB4MGUsMHgzMiwweDAzLDB4Y2MsMHg4MCwweGQzLDB4MDAsMHgzYywweGM0LDB4MGMsMHgzOSwweDAzLDB4NGMsMHgwOCwweGYzLDB4MWEgfSB9LAoreyAgMTYsIDB4YzllMCwgMCwgezB4M2MsMHhjNiwweDBkLDB4MzAsMHgwMywweGNlLDB4MjAsMHhmMywweDA4LDB4M2MsMHhjMCwweDBmLDB4MzAsMHgwMywweDUyLDB4MDIgfSB9LAoreyAgMTYsIDB4YzlmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MWQsMHhhYywweDAwLDB4ZmIsMHgwMCwweDJlLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2EwMCwgMCwgezB4MGIsMHhiMCwweDAzLDB4Y2MsMHgyMCwweGViLDB4MDAsMHgzYywweDgwLDB4MGYsMHhiMCwweDQxLDB4YWMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2ExMCwgMCwgezB4M2MsMHhjMiwweDBmLDB4YjAsMHgwMywweGVjLDB4NDAsMHhmYiwweDAwLDB4M2UsMHhjMCwweDBmLDB4MzAsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4Y2EyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlZSwweDAyLDB4YzMsMHg4MCwweDMwLDB4Y2UgfSB9LAoreyAgMTYsIDB4Y2EzMCwgMCwgezB4MGQsMHg5OCwweDAzLDB4YWMsMHhhMCwweGMzLDB4ODAsMHhiMiwweGMwLDB4MGYsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2E0MCwgMCwgezB4M2UsMHhkMiwweDRmLDB4YjAsMHgwOSwweDJlLDB4MDgsMHg0YiwweDAxLDB4M2UsMHhjMCwweDI0LDB4YjAsMHgwMywweGVhLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2E1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5YywweDAwLDB4ODcsMHgwMSwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2E2MCwgMCwgezB4NDgsMHg1MCwweDEyLDB4NGMsMHgwMCwweDg3LDB4MDAsMHgzNSwweGMwLDB4NGIsMHg2MCwweDAyLDB4ZGMsMHgwNCwweGI3LDB4MDEgfSB9LAoreyAgMTYsIDB4Y2E3MCwgMCwgezB4MmQsMHhjMCwweDBiLDB4NzAsMHgwMiwweDFjLDB4MDAsMHg4NywweDAwLDB4MmQsMHhjMSwweDBjLDB4NzIsMHgwMiwweGYyLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2E4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4ODcsMHg4MCwweDIzLDB4ZTAgfSB9LAoreyAgMTYsIDB4Y2E5MCwgMCwgezB4MDgsMHhmOCwweDAyLDB4ZGUsMHg4MCwweDhmLDB4ODEsMHgyMSwweGUwLDB4NGIsMHg3OCwweDEyLDB4ZGUsMHgwNCwweDM3LDB4ODAgfSB9LAoreyAgMTYsIDB4Y2FhMCwgMCwgezB4MmQsMHhlOCwweDBiLDB4ZjgsMHgwMiwweDNlLDB4MTgsMHg4NywweDgwLDB4MmYsMHhlMCwweDA5LDB4NzksMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2FiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDAwLDB4ODMsMHgwMCwweGEwLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2FjMCwgMCwgezB4MjgsMHgzMCwweDQyLDB4NGMsMHgwMCwweDgzLDB4MDAsMHgyNCwweGMwLDB4MGIsMHgzOCwweDA2LDB4Y2MsMHgwNCwweGIzLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2FkMCwgMCwgezB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBjLDB4MDIsMHg4MywweDAwLDB4MmMsMHhjMCwweDA4LDB4MzAsMHgwMiwweGQyLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2FlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4Y2EsMHgwMCwweDMxLDB4ODAgfSB9LAoreyAgMTYsIDB4Y2FmMCwgMCwgezB4MDgsMHhlMCwweDAyLDB4OTgsMHgwMiwweGNlLDB4MDAsMHgzMywweDg0LDB4MGIsMHhlYSwweDAzLDB4ZTgsMHgwMCwweGJhLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2IwMCwgMCwgezB4M2YsMHg4MSwweDBmLDB4YTAsMHgwMywweDI4LDB4MDAsMHhjYSwweDAwLDB4M2UsMHg4MCwweDBkLDB4ZTAsMHgwMywweGZhLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2IxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2IyMCwgMCwgezB4MGUsMHg4NCwweDIzLDB4YTAsMHgwMCwweGY4LDB4MDAsMHgzYSwweDEwLDB4MGYsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2IzMCwgMCwgezB4M2UsMHgxMCwweDBmLDB4ODAsMHgxMywweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBkLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2I0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHhlNCwweDAxLDB4ZjksMHgwMCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2I1MCwgMCwgezB4MGMsMHg5YSwweDEzLDB4ZTQsMHgwMCwweGM5LDB4MDAsMHgzZSwweDQwLDB4MGMsMHg5OCwweDIzLDB4ZTQsMHg4MCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2I2MCwgMCwgezB4M2UsMHg0MCwweDJjLDB4OTgsMHgwMywweDY0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMywweGMyLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2I3MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDA0LDB4YjksMHgwMCwweDJlLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2I4MCwgMCwgezB4NjgsMHg5YywweDIyLDB4ZTQsMHgwMiwweDg5LDB4MDEsMHg3YywweDUwLDB4OGQsMHg5OCwweDIyLDB4ZTQsMHg4MCwweGI5LDB4MjAgfSB9LAoreyAgMTYsIDB4Y2I5MCwgMCwgezB4MmUsMHg1MCwweDQ4LDB4MTAsMHgwYiwweDI1LDB4MDAsMHhiOSwweDQ0LDB4MmMsMHg0MCwweDI4LDB4OTAsMHgwMCwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2JhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjksMHgwMCwweDJlLDB4NTAgfSB9LAoreyAgMTYsIDB4Y2JiMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4ZTQsMHgwNCwweDg5LDB4MDAsMHgyZSwweDUwLDB4MGEsMHg5MiwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2JjMCwgMCwgezB4MmMsMHg0MCwweDA4LDB4OTEsMHgwMiwweDI0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2JkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNSwweDAwLDB4YjEsMHgwMSwweDJjLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2JlMCwgMCwgezB4NDgsMHgzMCwweDAyLDB4ZTQsMHgwMCwweDgxLDB4MDAsMHgyYSwweDQwLDB4NGIsMHgxMCwweDAyLDB4YzQsMHgwMCwweGIxLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2JmMCwgMCwgezB4MGMsMHhjMCwweDA4LDB4OTAsMHgwMiwweDBjLDB4MDAsMHhiMywweDAwLDB4MmUsMHg0MCwweDQ4LDB4MTIsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4Y2MwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4YjgsMHgwMSwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2MxMCwgMCwgezB4MWMsMHg4MCwweDA3LDB4ZTEsMHg1MCwweGM4LDB4NTAsMHgyZSwweDE0LDB4MWUsMHg4NSwweDAzLDB4ZTEsMHg0MSwweGY4LDB4NTAgfSB9LAoreyAgMTYsIDB4Y2MyMCwgMCwgezB4M2UsMHgxNCwweDBjLDB4ODUsMHgxMywweDIxLDB4NDgsMHhmOCwweDUwLDB4M2UsMHgxNCwweDBjLDB4ODUsMHg0MywweGVlLDB4MDMgfSB9LAoreyAgMTYsIDB4Y2MzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MTksMHhjNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NTEgfSB9LAoreyAgMTYsIDB4Y2M0MCwgMCwgezB4MGYsMHg1MCwweDAzLDB4ZTUsMHgwMCwweGZkLDB4MDAsMHgzZiwweDQwLDB4MWQsMHhkMCwweDAzLDB4ZjQsMHgxMCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2M1MCwgMCwgezB4M2UsMHg1MCwweDBmLDB4NTAsMHgwMCwweDk0LDB4MDAsMHhmOSwweDAwLDB4M2QsMHg0MCwweDBmLDB4OTEsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4Y2M2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHhlNCwweDUwLDB4Y2QsMHgwMCwweDMxLDB4NjAgfSB9LAoreyAgMTYsIDB4Y2M3MCwgMCwgezB4MDQsMHhkMCwweDAzLDB4MzYsMHg4MCwweGMxLDB4NDIsMHgyZSwweDUwLDB4MWYsMHg5NCwweDAzLDB4ZTUsMHgwMCwweGU5LDB4MDIgfSB9LAoreyAgMTYsIDB4Y2M4MCwgMCwgezB4MmUsMHg3MiwweDBhLDB4OTAsMHgyMiwweDA1LDB4MDgsMHhlOSwweDQwLDB4M2UsMHg1MCwweDQwLDB4OWMsMHgwMywweDI2LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2M5MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhjMiwweDgyLDB4ODgsMHgwMCwweDIyLDB4MTUgfSB9LAoreyAgMTYsIDB4Y2NhMCwgMCwgezB4MDgsMHg4MCwweDAyLDB4MjMsMHg1OCwweDg4LDB4YTAsMHgyZSwweDI4LDB4MGIsMHhhYSwweDQyLDB4ZTIsMHg4MiwweDg4LDB4ODAgfSB9LAoreyAgMTYsIDB4Y2NiMCwgMCwgezB4MmUsMHgzOCwweDI4LDB4ODgsMHgwMiwweDIyLDB4ODAsMHhiOCwweGEwLDB4M2EsMHgyOCwweDA4LDB4Y2QsMHgwMiwweDBlLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2NjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4ODEsMHgwMCwweGE2LDB4NDAgfSB9LAoreyAgMTYsIDB4Y2NkMCwgMCwgezB4MjgsMHgxMCwweDBhLDB4MjQsMHgyNiwweDk1LDB4MDAsMHgwZCwweDQwLDB4MGIsMHg1MCwweDAyLDB4NzQsMHgwMCwweDg1LDB4MDggfSB9LAoreyAgMTYsIDB4Y2NlMCwgMCwgezB4MmYsMHg0MCwweDc5LDB4ZDIsMHhhYSwweDE0LDB4MDAsMHhhNSwweDAxLDB4MmYsMHg0MCwweDM4LDB4NTAsMHgwMiwweDEyLDB4MDEgfSB9LAoreyAgMTYsIDB4Y2NmMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNCwweDA0LDB4ODksMHgwMCwweDI2LDB4NDAgfSB9LAoreyAgMTYsIDB4Y2QwMCwgMCwgezB4MDgsMHg5MSwweDAyLDB4MjQsMHgxMCwweDlkLDB4MDgsMHgyZiwweDQwLDB4MGIsMHhkMCwweDAyLDB4ZjQsMHgwMCwweDhkLDB4MDIgfSB9LAoreyAgMTYsIDB4Y2QxMCwgMCwgezB4MmYsMHg0MCwweDA5LDB4ZDAsMHgwMCwweDM0LDB4MDAsMHhiZCwweDAwLDB4MGIsMHg0MCwweDE4LDB4NzAsMHgwMiwweDA2LDB4MDQgfSB9LAoreyAgMTYsIDB4Y2QyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhjNCwweDAwLDB4YzksMHgwNSwweDM2LDB4NDEgfSB9LAoreyAgMTYsIDB4Y2QzMCwgMCwgezB4NGMsMHg5MCwweDYzLDB4MjQsMHgwMCwweGQ5LDB4MDAsMHgzZSwweDQwLDB4MGIsMHg5MCwweDAzLDB4NDQsMHgwOCwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2Q0MCwgMCwgezB4M2UsMHg0MCwweDE1LDB4MTAsMHgwMywweDI0LDB4MDAsMHhlOSwweDAwLDB4M2MsMHg0MCwweDBjLDB4OTAsMHgwMywweDI4LDB4MDQgfSB9LAoreyAgMTYsIDB4Y2Q1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHhhNCwweDA0LDB4ZjksMHgwMCwweDNhLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2Q2MCwgMCwgezB4NGYsMHg5OCwweDAzLDB4ZTQsMHgwMCwweGU5LDB4OTksMHgzZSwweDQwLDB4NGYsMHg5MCwweDAzLDB4ZTQsMHgyMCwweGY5LDB4MGEgfSB9LAoreyAgMTYsIDB4Y2Q3MCwgMCwgezB4M2UsMHg0MCwweDBlLDB4OTAsMHg0MywweDY0LDB4MjQsMHhmOSwweDA4LDB4M2EsMHg0MiwweDBmLDB4OTAsMHg4YiwweGRhLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2Q4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4YzgsMHgwMCwweDEyLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2Q5MCwgMCwgezB4MGMsMHg4MCwweDQzLDB4ZTAsMHgwMCwweGM4LDB4NDAsMHgzMiwweDAwLDB4MGYsMHg4NCwweDUzLDB4ZTAsMHgxMCwweGY4LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2RhMCwgMCwgezB4M2UsMHgwMCwweDBkLDB4ODAsMHgyMywweDIwLDB4MDAsMHhkOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2RiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgzOCwweDAyLDB4ODIsMHgwMCwweGExLDB4ODggfSB9LAoreyAgMTYsIDB4Y2RjMCwgMCwgezB4MDgsMHg2MCwweDIyLDB4YzgsMHgwMCwweDhhLDB4NDAsMHgzNiwweGExLDB4MGIsMHhhMCwweDAyLDB4ZTksMHgxMCwweGJhLDB4NDQgfSB9LAoreyAgMTYsIDB4Y2RkMCwgMCwgezB4MmMsMHg4MCwweDBjLDB4YTQsMHgxMiwweDI5LDB4MDIsMHg4YSwweDQ0LDB4MmUsMHg5OCwweDBiLDB4YTQsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2RlMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0YywweDEwLDB4ODMsMHgwMCwweDIwLDB4ZTAgfSB9LAoreyAgMTYsIDB4Y2RmMCwgMCwgezB4MTgsMHgzMCwweDkyLDB4YzQsMHgwOCwweDkzLDB4NDAsMHgyMCwweGUwLDB4MGIsMHgzMCwweDAyLDB4Y2QsMHgwMCwweGIzLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2UwMCwgMCwgezB4MmMsMHhjMCwweDBiLDB4M2EsMHg0MiwweGNkLDB4MDAsMHg4MywweDQwLDB4MmMsMHhkMCwweDBiLDB4MzgsMHgwMiwweDRhLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2UxMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4NDEsMHgxYywweDAwLDB4ODcsMHgwMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2UyMCwgMCwgezB4MjgsMHg3MCwweDAyLDB4ZDEsMHgwMCwweDlkLDB4ODAsMHgyNSwweGMyLDB4NGIsMHg2MCwweDAyLDB4ZGMsMHgwOCwweGI3LDB4MDIgfSB9LAoreyAgMTYsIDB4Y2UzMCwgMCwgezB4MmMsMHhjMCwweDBhLDB4NzQsMHgwMiwweGZlLDB4MDAsMHg4NywweDAwLDB4MmQsMHhjMCwweDBiLDB4MzQsMHgwMiwweDY4LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2U0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4YzcsMHg4NCwweDMxLDB4ZTAgfSB9LAoreyAgMTYsIDB4Y2U1MCwgMCwgezB4MGMsMHg2OCwweDAzLDB4ZDYsMHgwMCwweDk3LDB4ODAsMHgzMSwweGEwLDB4MGYsMHg1OCwweDEzLDB4ZGUsMHgwOCwweGY3LDB4ODIgfSB9LAoreyAgMTYsIDB4Y2U2MCwgMCwgezB4M2QsMHhhMCwweDBmLDB4ZjgsMHgwYiwweGRlLDB4MDAsMHhjNywweDgwLDB4M2QsMHhlMCwweDBmLDB4NzgsMHg4YiwweDZhLDB4MDIgfSB9LAoreyAgMTYsIDB4Y2U3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhZCwweDgwLDB4ZjMsMHgwMCwweDNlLDB4YzEgfSB9LAoreyAgMTYsIDB4Y2U4MCwgMCwgezB4MGYsMHhhMCwweDIzLDB4YzAsMHgwMiwweGU5LDB4MDAsMHgzZSwweDgxLDB4MGYsMHg4MCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2U5MCwgMCwgezB4M2UsMHhjMCwweDBkLDB4YjAsMHgxMywweDJjLDB4MDAsMHhlYiwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweDgyLDB4MDIgfSB9LAoreyAgMTYsIDB4Y2VhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmZiwweDMyLDB4YzcsMHg4MCwweDMzLDB4NjAgfSB9LAoreyAgMTYsIDB4Y2ViMCwgMCwgezB4MGYsMHg3OCwweDAzLDB4M2UsMHhjOCwweDRlLDB4ODAsMHgyMywweDY0LDB4MGMsMHhmOCwweDAzLDB4M2EsMHgwMCwweGNlLDB4ODAgfSB9LAoreyAgMTYsIDB4Y2VjMCwgMCwgezB4MTMsMHhlYywweDA2LDB4ZDgsMHgwMywweDNhLDB4MDAsMHhkZSwweDgwLDB4MzMsMHhhNCwweDBjLDB4YzgsMHgwMywweGQwLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2VkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHg5YywweDAwLDB4ODcsMHgxMCwweDAxLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2VlMCwgMCwgezB4MGIsMHg3MCwweDAyLDB4MTgsMHg1MCwweDg0LDB4MDAsMHgyYiwweDQ0LDB4MDgsMHg2MCwweDEyLDB4OTgsMHgwMCwweDg2LDB4MTMgfSB9LAoreyAgMTYsIDB4Y2VmMCwgMCwgezB4MjEsMHhjNCwweDg4LDB4NTAsMHgwMiwweDE4LDB4ODAsMHg4NiwweDAwLDB4MjEsMHg4MCwweDA4LDB4NjEsMHgwMiwweGVhLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2YwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4ODcsMHgwMCwweDIxLDB4NDAgfSB9LAoreyAgMTYsIDB4Y2YxMCwgMCwgezB4MGIsMHhmMSwweDAyLDB4NWMsMHg4MCwweDA2LDB4MDAsMHgyMSwweDAwLDB4ODgsMHhkMCwweDAyLDB4NWMsMHgwMCwweDg3LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2YyMCwgMCwgezB4MjAsMHg4OSwweDhhLDB4ZjEsMHgwMiwweDFjLDB4MDgsMHg4NywweDEwLDB4MjEsMHg4MSwweDg4LDB4NDgsMHgwMiwweGM2LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2YzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjYywweDEwLDB4ODMsMHgwNCwweGEwLDB4YzEgfSB9LAoreyAgMTYsIDB4Y2Y0MCwgMCwgezB4MGIsMHgzMCwweDBhLDB4NDgsMHgwYywweDg4LDB4MDYsMHg2MCwweDM4LDB4MDgsMHgwNCwweDQyLDB4ZWMsMHgwMSwweDhiLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2Y1MCwgMCwgezB4MjIsMHhjMSwweDA4LDB4MzAsMHgwYSwweDJjLDB4MDAsMHg4YiwweDAwLDB4MjIsMHg4MCwweDAwLDB4MjAsMHgwMiwweGQ4LDB4MDQgfSB9LAoreyAgMTYsIDB4Y2Y2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAwLDB4YzMsMHgwMCwweDIyLDB4ODAgfSB9LAoreyAgMTYsIDB4Y2Y3MCwgMCwgezB4OGYsMHg5MCwweDAzLDB4NjQsMHgwYSwweGNiLDB4MDIsMHhiMiwweGYyLDB4MjAsMHgzNSwweDEyLDB4NjQsMHgwYSwweGM5LDB4MDAgfSB9LAoreyAgMTYsIDB4Y2Y4MCwgMCwgezB4YjIsMHg0MCwweDBlLDB4YTAsMHgwMywweDI0LDB4MGEsMHhjOSwweDAwLDB4YTIsMHg0MCwweDJjLDB4YTAsMHgwMywweGVlLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2Y5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwMCwweDNjLDB4ODAgfSB9LAoreyAgMTYsIDB4Y2ZhMCwgMCwgezB4MGYsMHg5MCwweDAzLDB4YTUsMHgwMCwweGRiLDB4NDAsMHgzZSwweGQwLDB4NGQsMHhiNCwweDEzLDB4YTQsMHgwOCwweGZiLDB4MDEgfSB9LAoreyAgMTYsIDB4Y2ZiMCwgMCwgezB4M2UsMHhjMCwweDFjLDB4YTAsMHgwMywweDZjLDB4MDAsMHhmYiwweDA0LDB4M2UsMHg1MCwweDRmLDB4YTQsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2ZjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4ZmYsMHgwMCwweDMzLDB4YzAgfSB9LAoreyAgMTYsIDB4Y2ZkMCwgMCwgezB4MGMsMHhlOCwweDQzLDB4MjYsMHgwMCwweGRmLDB4ODAsMHhiMywweGUwLDB4MGYsMHhmOCwweDAzLDB4N2MsMHgwMCwweGNkLDB4MDAgfSB9LAoreyAgMTYsIDB4Y2ZlMCwgMCwgezB4MzMsMHgwNCwweDBjLDB4ZTAsMHgyMywweDM0LDB4NDAsMHhjZCwweDAwLDB4MjMsMHg0MCwweDBjLDB4ZTAsMHgwMywweGUwLDB4MDQgfSB9LAoreyAgMTYsIDB4Y2ZmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2YywweDEwLDB4YmIsMHgwMCwweGEyLDB4ZDIgfSB9LAoreyAgMTYsIDB4ZDAwMCwgMCwgezB4MDgsMHgyOCwweDAyLDB4MDQsMHg2MCwweDhiLDB4MTksMHgyMiwweGM2LDB4MGUsMHhiMSwweDhhLDB4MmUsMHg0MCwweDhiLDB4OTAgfSB9LAoreyAgMTYsIDB4ZDAxMCwgMCwgezB4MjIsMHhjMSwweDA4LDB4YTQsMHg4MiwweDJjLDB4MDAsMHg4YiwweDkwLDB4MjIsMHg2NCwweDQ4LDB4YTQsMHgwMiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDAyMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDUsMHgyYywweDAwLDB4YmIsMHgwMCwweDIyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDAzMCwgMCwgezB4MDgsMHg5MSwweDJlLDB4MjQsMHgwMCwweDliLDB4MDAsMHgyMiwweGMwLDB4OGIsMHhiMCwweDEyLDB4MjAsMHgwNCwweDg4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDA0MCwgMCwgezB4MjIsMHg0MCwweDA4LDB4MTAsMHgyMiwweDIwLDB4MDAsMHg4OCwweDAxLDB4MmEsMHhkMCwweDA4LDB4ODAsMHg0MiwweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDA1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwYywweDAwLDB4YjMsMHgwNCwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDA2MCwgMCwgezB4MDgsMHgxMCwweDA2LDB4MDQsMHgxMCwweDgzLDB4MDAsMHgyMCwweGMwLDB4OGIsMHhiMCwweDEyLDB4MDAsMHgwMCwweDgyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDA3MCwgMCwgezB4MjAsMHhjMCwweDI4LDB4MTAsMHg0MiwweDA5LDB4MDYsMHg4MiwweDAwLDB4MjgsMHhjMCwweDA4LDB4MjAsMHgwMiwweGMyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDA4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg3YywweDAwLDB4YmIsMHgwMCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDA5MCwgMCwgezB4MmMsMHhiMCwweDAzLDB4MjQsMHgwMCwweGQzLDB4MDAsMHgzMiwweGMwLDB4NWYsMHhiNSwweDAzLDB4MGMsMHgwMiwweGMxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDBhMCwgMCwgezB4YjIsMHgwMCwweDBjLDB4YjAsMHgwYiwweDA1LDB4MDAsMHhjMSwweDAwLDB4YjgsMHhjMCwweDJjLDB4ODAsMHgxMywweGUwLDB4MDMgfSB9LAoreyAgMTYsIDB4ZDBiMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhkYywweDAwLDB4ZmYsMHgwMCwweDFmLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDBjMCwgMCwgezB4ODcsMHhmMCwweDAxLDB4ZjQsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGUsMHg3MCwweDQzLDB4ZmMsMHgxMCwweDdmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDBkMCwgMCwgezB4M2YsMHhjMCwweDBmLDB4NzAsMHgwMywweGZjLDB4MDAsMHhmZiwweDAwLDB4MzcsMHhjMCwweDBmLDB4ZTAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4ZDBlMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDUsMHhmMSwweDg0LDB4ZmUsMHg2MSwweDMxLDB4ZDggfSB9LAoreyAgMTYsIDB4ZDBmMCwgMCwgezB4MGMsMHhiMiwweGMzLDB4ZmMsMHhlMCwweGNjLDB4ODAsMHg3YiwweGMwLDB4MGUsMHhmMSwweDAzLDB4N2MsMHhlMCwweGNjLDB4ODMgfSB9LAoreyAgMTYsIDB4ZDEwMCwgMCwgezB4M2YsMHgyMCwweDBmLDB4ZjAsMHhjYiwweDMyLDB4NDQsMHhkYywweDg0LDB4M2YsMHgyNSwweDRjLDB4ZjIsMHg0MywweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDExMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHhlNCwweDQ4LDB4YjAsMHgxMCwweDIyLDB4ZGMgfSB9LAoreyAgMTYsIDB4ZDEyMCwgMCwgezB4MDgsMHhiNiwweDAyLDB4ZmQsMHg5MiwweDg4LDB4ODUsMHgyMywweGY0LDB4NDAsMHhmMSwweDAyLDB4ZWQsMHgwMCwweDg4LDB4MmQgfSB9LAoreyAgMTYsIDB4ZDEzMCwgMCwgezB4MGUsMHg2MCwweDBiLDB4YmMsMHgxMiwweDJjLDB4MTAsMHhhOCwweDgyLDB4MmUsMHgwMCwweDBhLDB4ZmMsMHgyMiwweGEwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDE0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDUsMHhjMCwweDgwLDB4YjMsMHgyMiwweDI4LDB4YzAgfSB9LAoreyAgMTYsIDB4ZDE1MCwgMCwgezB4MDgsMHgzMCwweDgyLDB4Y2MsMHgwMSwweDg4LDB4MDAsMHgyYywweGMwLDB4NGEsMHgzMiwweDAyLDB4Y2MsMHgwMCwweDAxLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDE2MCwgMCwgezB4MjgsMHgwMCwweDRiLDB4YjAsMHgwMiwweGEwLDB4MDAsMHg4MCwweDAwLDB4MmMsMHgwOSwweDA4LDB4MzQsMHgwMiwweDYyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDE3MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTUsMHhhYywweDA0LDB4YjIsMHgxMCwweDJhLDB4YzEgfSB9LAoreyAgMTYsIDB4ZDE4MCwgMCwgezB4MDgsMHhiMCwweDAyLDB4ZWMsMHgxMCwweDg5LDB4ODAsMHgyMiwweGMwLDB4MDgsMHhiMCwweDAyLDB4ZWMsMHgwOCwweDg4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDE5MCwgMCwgezB4MmUsMHg0MCwweDgzLDB4YjAsMHgwMiwweGEwLDB4NDAsMHhiOSwweDgwLDB4MmMsMHgyMSwweDBhLDB4YjAsMHgwMiwweGYwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDFhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4ZmEsMHgwMCwweGJhLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDFiMCwgMCwgezB4MmMsMHhiMCwweDQzLDB4ZWMsMHgwMCwweGMwLDB4ODAsMHgzZSwweGMwLDB4OGUsMHhiMCwweDAzLDB4NGMsMHgwYywweGM4LDB4MTAgfSB9LAoreyAgMTYsIDB4ZDFjMCwgMCwgezB4M2UsMHg4MCwweDhmLDB4YjAsMHgwMywweDgyLDB4MTAsMHhkOCwweDgyLDB4M2UsMHgyOCwweDBjLDB4YjAsMHgwYiwweDUwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDFkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhiNiwweDgwLDB4ZmQsMHgwMiwweDM3LDB4YzEgfSB9LAoreyAgMTYsIDB4ZDFlMCwgMCwgezB4MGYsMHhiMCwweDAzLDB4ZmMsMHgwMCwweGZkLDB4MDAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDUzLDB4ZmMsMHgwMiwweGZmLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDFmMCwgMCwgezB4MmYsMHhhNCwweDhiLDB4ZjAsMHg4MywweDdjLDB4MDAsMHhhZCwweDAyLDB4MmYsMHg0MCwweDAzLDB4NzAsMHgwMywweGI4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDIwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTAsMHhhYywweDAwLDB4ZmIsMHgwNCwweDMyLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDIxMCwgMCwgezB4NGMsMHhiMCwweDIzLDB4MmMsMHgwMCwweGY4LDB4NDAsMHgzZSwweGMyLDB4MGMsMHhiMCwweDAzLDB4MmMsMHgwMCwweGZiLDB4NDEgfSB9LAoreyAgMTYsIDB4ZDIyMCwgMCwgezB4MzIsMHhjMiwweDBmLDB4YjAsMHg0MywweDJkLDB4MDAsMHhjOCwweDUwLDB4M2UsMHg0MCwweDBjLDB4YjAsMHgwYiwweDEwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDIzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDUsMHgyZiwweDkwLDB4YjksMHg1MCwweDAzLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDI0MCwgMCwgezB4MTgsMHhmMCwweDFhLDB4M2MsMHgwMCwweGI5LDB4MzIsMHgyZCwweGUwLDB4MzgsMHhmMCwweDYwLDB4M2MsMHgwNCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDI1MCwgMCwgezB4M2UsMHhmMCwweDBiLDB4N2MsMHg4MCwweDJjLDB4MDAsMHhkOSwweGMwLDB4MmUsMHg0MCwweDBkLDB4ZjAsMHgwMiwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDI2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDUsMHg0YiwweDI0LDB4YjIsMHgxMCwweDAyLDB4YzEgfSB9LAoreyAgMTYsIDB4ZDI3MCwgMCwgezB4MjgsMHgzMCwweDAyLDB4NmMsMHgwNCwweGIyLDB4YzEsMHgyYywweGMwLDB4MDgsMHgzMCwweDAwLDB4MGMsMHgwMCwweGIyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDI4MCwgMCwgezB4MjgsMHgyNCwweDAzLDB4M2MsMHgwYSwweDAwLDB4MDAsMHg4MiwweGM4LDB4MmMsMHhhMCwweDA4LDB4MzAsMHgwMiwweDM4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDI5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDEsMHgxNiwweDAwLDB4YjQsMHg4MCwweDIxLDB4ZTQgfSB9LAoreyAgMTYsIDB4ZDJhMCwgMCwgezB4NDgsMHg3YiwweDAyLDB4NWUsMHgwMCwweGI2LDB4ODAsMHg2ZCwweGUyLDB4NDgsMHg3OSwweDIyLDB4MWUsMHg0MCwweGFjLDB4ODQgfSB9LAoreyAgMTYsIDB4ZDJiMCwgMCwgezB4MmQsMHhlMCwweDBiLDB4ZmEsMHgwMCwweDUyLDB4NDAsMHg5NiwweDgwLDB4MmQsMHhlOCwweDE5LDB4MzgsMHgwMiwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDJjMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwOCwweDQwLDB4ZjMsMHgxMCwweGIwLDB4YzQgfSB9LAoreyAgMTYsIDB4ZDJkMCwgMCwgezB4MDgsMHgzYSwweDAyLDB4NGMsMHg5MCwweGYzLDB4MTAsMHgzYywweGNjLDB4MDgsMHgzMSwweDAzLDB4MGMsMHg0OSwweGIwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDJlMCwgMCwgezB4MzAsMHgwNSwweDBmLDB4MzAsMHgwNywweDIxLDB4NDAsMHg0MywweDAxLDB4M2UsMHhjMiwweDFjLDB4MzAsMHg0MywweDEyLDB4MDIgfSB9LAoreyAgMTYsIDB4ZDJmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MGQsMHhiYywweDEwLDB4ZmMsMHgxMCwweDNmLDB4YzUgfSB9LAoreyAgMTYsIDB4ZDMwMCwgMCwgezB4MGYsMHhmMSwweDAxLDB4YmMsMHgwNCwweGZmLDB4MDQsMHgzZiwweGM0LDB4MGYsMHhiMSwweDRiLDB4ZmMsMHg2NCwweGY3LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDMxMCwgMCwgezB4MzcsMHhjMCwweDBmLDB4NzIsMHg1MywweGFjLDB4NDQsMHhmZiwweDAxLDB4M2YsMHhjOSwweDBmLDB4ZjQsMHgwMywweGQwLDB4MDYgfSB9LAoreyAgMTYsIDB4ZDMyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDUsMHhlYywweDA4LDB4ZmEsMHgwMCwweDNlLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZDMzMCwgMCwgezB4MGMsMHhiMCwweDAzLDB4MmMsMHgwMCwweGNiLDB4MDIsMHgzZSwweGNhLDB4MGYsMHhiMiwweDA3LDB4MmUsMHgwMCwweGRiLDB4MDIgfSB9LAoreyAgMTYsIDB4ZDM0MCwgMCwgezB4MzIsMHgwOCwweDBmLDB4MzEsMHgwMywweDJjLDB4MDAsMHhjYiwweDA0LDB4M2UsMHg4MCwweDBjLDB4MzUsMHgwMywweDJhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDM1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTEsMHg5NCwweDAwLDB4YjUsMHgwMCwweDJkLDB4YzggfSB9LAoreyAgMTYsIDB4ZDM2MCwgMCwgezB4MDgsMHg3MCwweDBhLDB4MWMsMHgyMiwweDg3LDB4MDAsMHgyZCwweGM5LDB4MGIsMHhmMiwweDgyLDB4OWMsMHg4MCwweGE2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDM3MCwgMCwgezB4MDksMHg4YiwweDBiLDB4NzAsMHgwYSwweDFjLDB4MDIsMHg4NSwweDAwLDB4MmQsMHg0MCwweDA4LDB4NzAsMHgwMiwweDkyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDM4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHg5ZSwweDAwLDB4YjcsMHg4MCwweDJjLDB4ZWMgfSB9LAoreyAgMTYsIDB4ZDM5MCwgMCwgezB4MDgsMHg3YiwweDAyLDB4NWUsMHg0MCwweDg1LDB4ODksMHgyZCwweGVjLDB4OGIsMHg3YiwweDAyLDB4NGUsMHg4NCwweDhmLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDNhMCwgMCwgezB4MjUsMHg2NCwweDBiLDB4ZmEsMHgwMiwweDEyLDB4MDgsMHg5NywweDgwLDB4NmYsMHhlMSwweDA4LDB4N2EsMHgwMiwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDNiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTQsMHhjYywweDIwLDB4YjMsMHg2NCwweDJjLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDNjMCwgMCwgezB4MDgsMHgzMCwweDA2LDB4MGMsMHgxMCwweDgzLDB4OGEsMHg2YywweGMwLDB4NWIsMHgzMCwweDQyLDB4Y2MsMHgwMCwweGFiLDB4MTAgfSB9LAoreyAgMTYsIDB4ZDNkMCwgMCwgezB4MmMsMHhmMiwweDBiLDB4MzAsMHgwMiwweDBkLDB4MDAsMHg5MywweDA0LDB4MmMsMHhkNSwweDA4LDB4MzAsMHgwYSwweDkyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDNlMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiYiwweDAwLDB4ZmUsMHhjMCwweDNlLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDNmMCwgMCwgezB4MmMsMHhhMCwweDAzLDB4NjgsMHgwMCwweGM2LDB4NDAsMHgzZiwweDgwLDB4MGYsMHhhMCwweDAyLDB4NjgsMHgwMCwweGNlLDB4NDQgfSB9LAoreyAgMTYsIDB4ZDQwMCwgMCwgezB4MzYsMHg5MCwweDRmLDB4NjAsMHgwMywweDFiLDB4NzAsMHhkZSwweGQ4LDB4M2YsMHhhMCwweDBjLDB4MjAsMHgwMywweDNhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDQxMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhlMCwweDQwLDB4ZjgsMHgxMCwweDNlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDQyMCwgMCwgezB4MGYsMHg4MCwweDAzLDB4YTAsMHgxMCwweGY4LDB4NDIsMHgzZSwweDEwLDB4MWYsMHg4MCwweDAzLDB4YTAsMHgwMCwweGU4LDB4MGMgfSB9LAoreyAgMTYsIDB4ZDQzMCwgMCwgezB4M2EsMHgwNCwweDFmLDB4ODAsMHgwMywweGUwLDB4MDAsMHhlOCwweDQ1LDB4N2UsMHgwMiwweDJmLDB4ODAsMHgwMywweGQyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDQ0MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHg2NCwweDAwLDB4ZTksMHg4MCwweDMyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDQ1MCwgMCwgezB4MGYsMHg5MCwweDBiLDB4MDQsMHgwOCwweGQ5LDB4ODAsMHgzNiwweDQwLDB4MGYsMHgxMCwweDEzLDB4MjQsMHgwOCwweGY5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDQ2MCwgMCwgezB4NzIsMHg3MCwweDBmLDB4OTEsMHgxMywweDI0LDB4MTAsMHhjOSwweDEwLDB4M2UsMHg2OSwweDBjLDB4OTAsMHgwMywweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDQ3MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHg2NCwweDA4LDB4YjksMHg4MCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDQ4MCwgMCwgezB4MGIsMHgxMCwweDAyLDB4MjQsMHgwMCwweDg5LDB4YzQsMHgyMiwweDUyLDB4MGIsMHg5MCwweDQyLDB4MjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDQ5MCwgMCwgezB4MjIsMHhlMCwweDBiLDB4OTAsMHgxMiwweDI0LDB4MDQsMHhkOSwweDRhLDB4MmUsMHg2MCwweDA4LDB4OTAsMHgwMywweDYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDRhMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDUsMHgyNCwweDAwLDB4YjEsMHgxOCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDRiMCwgMCwgezB4MGIsMHg5MCwweDAyLDB4MjQsMHgwMCwweDhiLDB4MjAsMHgyNiwweDQ5LDB4MGIsMHg5MCwweDAyLDB4NjQsMHgwMCwweGI5LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDRjMCwgMCwgezB4YTIsMHg0MCwweDBiLDB4OTAsMHg4YSwweDI0LDB4MDAsMHg4YiwweDAwLDB4MmMsMHg0MCwweGE4LDB4OTAsMHgwMiwweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDRkMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwNCwweDg0LDB4YjEsMHgyMCwweGEwLDB4NDggfSB9LAoreyAgMTYsIDB4ZDRlMCwgMCwgezB4MGIsMHgxMSwweDA2LDB4MDQsMHgwMCwweDgzLDB4MDAsMHgwMCwweDQwLDB4NGIsMHgxMSwweDAyLDB4MDQsMHg0OSwweGIxLDB4MTAgfSB9LAoreyAgMTYsIDB4ZDRmMCwgMCwgezB4MjgsMHg0MCwweDBiLDB4MTAsMHgwMiwweDI0LDB4NDEsMHg5MSwweDAwLDB4MmMsMHg1MCwweDA4LDB4MTAsMHgwMiwweDQyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDUwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2OSwweDQwLDB4ZTgsMHg1MCwweDMyLDB4MTQgfSB9LAoreyAgMTYsIDB4ZDUxMCwgMCwgezB4MGYsMHg4NiwweDkzLDB4MjEsMHhlMiwweGM4LDB4MDAsMHgzNiwweDBhLDB4MGIsMHg4NiwweDhiLDB4NjEsMHhhOCwweGY4LDB4NDAgfSB9LAoreyAgMTYsIDB4ZDUyMCwgMCwgezB4MjIsMHg4MCwweDBmLDB4ODIsMHhhMywweDIxLDB4MDgsMHhjOCwweDAyLDB4M2UsMHgwMCwweDBjLDB4ODAsMHg0MywweDJlLDB4MDMgfSB9LAoreyAgMTYsIDB4ZDUzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MWQsMHhmNCwweDQ4LDB4ZmQsMHgxMiwweDNlLDB4NDQgfSB9LAoreyAgMTYsIDB4ZDU0MCwgMCwgezB4MGYsMHgxMiwweDAzLDB4YzQsMHgwMCwweDdkLDB4MDEsMHgxZSwweDQwLDB4MGIsMHg5MiwweDAzLDB4ZTQsMHg4MCwweGY1LDB4MjAgfSB9LAoreyAgMTYsIDB4ZDU1MCwgMCwgezB4MzYsMHg0MCwweDBmLDB4OTAsMHgwMywweGQ0LDB4OTAsMHg3ZCwweDAwLDB4M2QsMHg0MCwweDBmLDB4OTQsMHgwMywweGU2LDB4MDYgfSB9LAoreyAgMTYsIDB4ZDU2MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDEsMHhmNiwweGMxLDB4ZGQsMHg4OCwweDMyLDB4NzIgfSB9LAoreyAgMTYsIDB4ZDU3MCwgMCwgezB4MGMsMHg5OCwweDAzLDB4MjYsMHgyMiwweGRkLDB4MDAsMHgzZiwweDYyLDB4MmMsMHg5OSwweDgzLDB4NDYsMHhhMCwweGM5LDB4NDAgfSB9LAoreyAgMTYsIDB4ZDU4MCwgMCwgezB4YjIsMHg0MCwweDBmLDB4ZDgsMHgwMywweDI0LDB4MDAsMHhmZCwweDAwLDB4MzMsMHg1MSwweDJjLDB4ZDgsMHg4MywweDA2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDU5MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MTAsMHhlMywweGMyLDB4ODgsMHhjMCwweDIyLDB4MzAgfSB9LAoreyAgMTYsIDB4ZDVhMCwgMCwgezB4MDgsMHg4YywweDQyLDB4MjIsMHgxMSwweDhhLDB4MDEsMHgyZSwweDAwLDB4MDgsMHg4OCwweDUyLDB4MjMsMHgwMCwweDgwLDB4YTMgfSB9LAoreyAgMTYsIDB4ZDViMCwgMCwgezB4MmEsMHgwMCwweDRiLDB4ODAsMHg0MiwweDIyLDB4YTAsMHhiOCwweDAwLDB4MjIsMHgyOCwweDA4LDB4ODQsMHgwMiwweDhlLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDVjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDUsMHhjNCwweDAwLDB4ODEsMHgyZCwweDIwLDB4NDggfSB9LAoreyAgMTYsIDB4ZDVkMCwgMCwgezB4NjgsMHgxNCwweDgwLDB4MDQsMHgyMCwweDgxLDB4MDAsMHgyZSwweDQwLDB4MGIsMHgxMiwweDEyLDB4MDQsMHgyNCwweDgxLDB4MjAgfSB9LAoreyAgMTYsIDB4ZDVlMCwgMCwgezB4MjAsMHg0MCwweDBiLDB4OTQsMHgzMiwweDA0LDB4OTAsMHhiOSwweDAwLDB4MjAsMHg0MCwweDQ4LDB4MTAsMHg0YSwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDVmMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTUsMHhhNCwweDAwLDB4ODksMHgyMCwweDIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDYwMCwgMCwgezB4MDgsMHg5MCwweDEyLDB4MjQsMHgwMCwweDg5LDB4MDAsMHgyZSwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwOCwweDg5LDB4NDAgfSB9LAoreyAgMTYsIDB4ZDYxMCwgMCwgezB4MjIsMHg1MCwweDBiLDB4YjAsMHgwMiwweDI0LDB4MjAsMHhiOSwweDA5LDB4YTIsMHg0NCwweDA4LDB4OTAsMHgwMiwweDg2LDB4MDQgfSB9LAoreyAgMTYsIDB4ZDYyMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZDksMHgwOCwweGIyLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDYzMCwgMCwgezB4NGMsMHgxMCwweDIzLDB4MDQsMHgwNCwweGQ5LDB4YzEsMHgzZSwweDQwLDB4OGYsMHg5MCwweDBiLDB4MDQsMHgwOCwweGMxLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDY0MCwgMCwgezB4MTIsMHg0MCwweDBmLDB4OTAsMHg0MywweDI0LDB4MDQsMHhmMSwweDQxLDB4MzAsMHg3OCwweDBjLDB4OTAsMHgwMywweDI4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZDY1MCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDEsMHg4NiwweDY0LDB4ZjksMHg4MCwweDNlLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDY2MCwgMCwgezB4MGYsMHg5MCwweDBiLDB4ZTQsMHgwMCwweGY5LDB4OTgsMHgzZSwweDQwLDB4MmYsMHgxMCwweDAzLDB4YTQsMHgwMiwweGY5LDB4MTAgfSB9LAoreyAgMTYsIDB4ZDY3MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTAsMHgwYiwweGU2LDB4NDAsMHhmOSwweDkwLDB4M2UsMHg2MCwweDBmLDB4OTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDY4MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MTAsMHhhMCwweDAwLDB4YzgsMHg0MSwweDMyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDY5MCwgMCwgezB4MGMsMHg4MCwweDA3LDB4MjAsMHgxMCwweGM4LDB4MTAsMHgzZSwweDBjLDB4MGUsMHg4MCwweDAzLDB4ZTAsMHgwNCwweGM4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDZhMCwgMCwgezB4YmEsMHgwMCwweDBmLDB4ODEsMHg0MywweDIwLDB4MDAsMHhmOCwweDcwLDB4M2UsMHgwMCwweDBmLDB4MDAsMHgwYiwweDBhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDZiMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHgzOSwweDAyLDB4OGUsMHgyMCwweGEzLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDZjMCwgMCwgezB4MjgsMHhlMCwweDBhLDB4MzgsMHgxMCwweGFlLDB4MDQsMHgzZCwweGExLDB4OGUsMHhlMCwweDAyLDB4ZjgsMHgwMCwweDhlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDZkMCwgMCwgezB4NzYsMHg4MCwweDBiLDB4NjAsMHgwMywweDc4LDB4MDAsMHhiZSwweDQwLDB4MmYsMHg4MiwweDBiLDB4YTAsMHgwMywweGNhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDZlMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDUsMHg0ZCwweDAwLDB4OGIsMHg4OCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDZmMCwgMCwgezB4MTgsMHgzMCwweDAyLDB4MGMsMHgwMCwweDgzLDB4NDQsMHgyYywweGQwLDB4MWIsMHgzMCwweDEyLDB4Y2MsMHgwNiwweDgzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDcwMCwgMCwgezB4MjAsMHhjMSwweDBiLDB4MzAsMHg4MiwweDBjLDB4MDEsMHhiMywweDAwLDB4MmMsMHg0MCwweDBiLDB4MzAsMHgwMiwweDBhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDcxMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDEsMHgxYywweDAwLDB4ODUsMHgwMCwweDIwLDB4Y2MgfSB9LAoreyAgMTYsIDB4ZDcyMCwgMCwgezB4MDgsMHg3MCwweDA2LDB4MWMsMHg4NCwweGE3LDB4MDEsMHgyOSwweGMwLDB4MGIsMHg3MiwweDIyLDB4ZGMsMHg4MCwweDg3LDB4MzQgfSB9LAoreyAgMTYsIDB4ZDczMCwgMCwgezB4NjEsMHg4MCwweDBiLDB4MTAsMHgwMiwweDVjLDB4MDAsMHhiNywweDAwLDB4MmQsMHhjMCwweDBiLDB4NzAsMHgwMiwweGU4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZDc0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgwZSwweDAwLDB4OGMsMHg4MCwweDMxLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZDc1MCwgMCwgezB4MGMsMHhmZSwweDAyLDB4M2YsMHgwMCwweGM1LDB4ODAsMHgyZCwweGUwLDB4MGUsMHg3OCwweDAzLDB4ZGYsMHhhMCwweGM3LDB4YTAgfSB9LAoreyAgMTYsIDB4ZDc2MCwgMCwgezB4MjEsMHg2MCwweDBmLDB4NzgsMHgwMywweDFlLDB4ODAsMHhmNywweDgwLDB4M2QsMHhlMCwweDBmLDB4NzgsMHgwMywweDJhLDB4MDIgfSB9LAoreyAgMTYsIDB4ZDc3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MWQsMHhhYywweDAwLDB4ZjksMHgwMCwweDNlLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDc4MCwgMCwgezB4MGYsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZhLDB4MDAsMHgzZSwweGMwLDB4MDYsMHhiMCwweDAzLDB4ZWMsMHg4MCwweGZiLDB4MjggfSB9LAoreyAgMTYsIDB4ZDc5MCwgMCwgezB4MzYsMHhkOCwweDRmLDB4YTAsMHgwMywweGVjLDB4MTAsMHhmYSwweDAwLDB4M2UsMHg1MCwweDBmLDB4MzAsMHgwMywweGMyLDB4MDYgfSB9LAoreyAgMTYsIDB4ZDdhMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhmYSwweDAwLDB4Y2MsMHg4MCwweGIzLDB4ZTAgfSB9LAoreyAgMTYsIDB4ZDdiMCwgMCwgezB4MGYsMHhmOCwweDAzLDB4M2UsMHgwMCwweGNmLDB4OTAsMHgzZiwweDYwLDB4NGYsMHhmOCwweGMzLDB4M2UsMHgwMCwweGVmLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDdjMCwgMCwgezB4MzMsMHhmMCwweDBjLDB4N2EsMHgwMywweDNlLDB4NzAsMHhjNSwweDkwLDB4MzMsMHhmMSwweDBjLDB4NzgsMHgwMywweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDdkMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHhiOCwweDAwLDB4ODcsMHgwMCwweDIxLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDdlMCwgMCwgezB4MGIsMHg3MCwweDRhLDB4MWMsMHgwMCwweDg3LDB4MTAsMHgyZCwweGMwLDB4NGIsMHg3MSwweDBhLDB4M2MsMHg0NCwweDhmLDB4MTIgfSB9LAoreyAgMTYsIDB4ZDdmMCwgMCwgezB4MjEsMHg4NiwweDBkLDB4NzIsMHgwMiwweDFlLDB4MDAsMHg4NywweDAwLDB4MjMsMHg0MCwweDA4LDB4NzAsMHgwYSwweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDgwMCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDAwLDB4ODQsMHgwMCwweDI1LDB4YzAgfSB9LAoreyAgMTYsIDB4ZDgxMCwgMCwgezB4MGIsMHg3MSwweDBhLDB4MGMsMHgwMCwweGE3LDB4MTIsMHgyZCwweDg0LDB4MGIsMHg3MCwweDBhLDB4MWMsMHgwMCwweGI3LDB4MDggfSB9LAoreyAgMTYsIDB4ZDgyMCwgMCwgezB4MjMsMHg0MCwweDA5LDB4ZjMsMHgxYSwweDVjLDB4ODYsMHg5NywweDA4LDB4MjUsMHg0MCwweDA4LDB4NzAsMHgwMiwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDgzMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MTQsMHhjYywweDIwLDB4ODEsMHgyMCwweDI2LDB4YzAgfSB9LAoreyAgMTYsIDB4ZDg0MCwgMCwgezB4MGIsMHgzMCwweDAyLDB4MmMsMHgwMCwweDgyLDB4NDIsMHgyYywweDgwLDB4MGIsMHgzMCwweDIyLDB4MGMsMHgwOCwweDliLDB4ODAgfSB9LAoreyAgMTYsIDB4ZDg1MCwgMCwgezB4MjAsMHhlMCwweDA5LDB4MjAsMHgwMiwweDRkLDB4MDgsMHg5MiwweDAwLDB4MjQsMHhlNSwweDA4LDB4MzAsMHgwYSwweDA4LDB4MDQgfSB9LAoreyAgMTYsIDB4ZDg2MCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhZSwweDgyLDB4Y2EsMHhlMCwweGI3LDB4YzAgfSB9LAoreyAgMTYsIDB4ZDg3MCwgMCwgezB4MGYsMHhmMCwweDEzLDB4M2MsMHgwYSwweGM5LDB4YzgsMHgzZSwweDQwLDB4MGYsMHhmMCwweDAzLDB4M2MsMHgwNCwweGZmLDB4ODQgfSB9LAoreyAgMTYsIDB4ZDg4MCwgMCwgezB4MzIsMHhjMCwweDBkLDB4OTAsMHgxMywweDdjLDB4MDAsMHhkOSwweDAwLDB4ZjYsMHhjMCwweDJjLDB4MTAsMHgwMywweDJhLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDg5MCwgMCwgezB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhlNCwweDAwLDB4ZjMsMHgwMCwweDNhLDB4YzEgfSB9LAoreyAgMTYsIDB4ZDhhMCwgMCwgezB4NGYsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGY5LDB4MDgsMHgzYywweDAwLDB4MGYsMHgzMCwweDEzLDB4ZWMsMHgwMCwweGViLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDhiMCwgMCwgezB4YmUsMHgxOCwweDBmLDB4OTAsMHgyMywweGFjLDB4NjAsMHhlOSwweDAyLDB4M2EsMHg0MCwweDRmLDB4OTAsMHgwMywweGUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDhjMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MTAsMHhmYywweDAwLDB4Y2EsMHgwMCwweDMzLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDhkMCwgMCwgezB4MGMsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGNkLDB4MDIsMHg3ZiwweDQwLDB4MGMsMHhmMCwweDQyLDB4M2MsMHgwMCwweGNmLDB4MDggfSB9LAoreyAgMTYsIDB4ZDhlMCwgMCwgezB4MzcsMHgxMCwweDBmLDB4ZDAsMHgwMywweGZjLDB4MTAsMHhjZCwweDA4LDB4M2YsMHg2NiwweDJjLDB4ZDksMHgwMywweDAwLDB4NDQgfSB9LAoreyAgMTYsIDB4ZDhmMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgxLDB4MDQsMHg2MywweDgwLDB4OGIsMHhlMCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDkwMCwgMCwgezB4MDgsMHhiMCwweDIyLDB4ZWMsMHgwMCwweGQ4LDB4ODAsMHg2ZSwweDIwLDB4NjgsMHhiMCwweDFhLDB4MmMsMHgwMSwweGZiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDkxMCwgMCwgezB4MjIsMHgxOCwweDBiLDB4ODgsMHg0MywweDRjLDB4MDAsMHg4OCwweGEwLDB4MmMsMHhjMCwweDFkLDB4OTAsMHgwMiwweDIwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZDkyMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDEsMHgwOCwweDgwLDB4OGIsMHgyMCwweDIyLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDkzMCwgMCwgezB4MDgsMHhiMCwweDIyLDB4ZWMsMHgwMCwweDg4LDB4ODgsMHgyZSwweDYyLDB4NDgsMHhiMCwweDFhLDB4Y2MsMHgwMCwweDhiLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDk0MCwgMCwgezB4MjYsMHhjMCwweDRhLDB4ODgsMHgwMiwweGVjLDB4MDAsMHgwOCwweDg0LDB4MmUsMHg0MCwweDA5LDB4OTAsMHgwMiwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDk1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgwMCwweDAwLDB4ODMsMHgwMCwweDYwLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDk2MCwgMCwgezB4MDgsMHgzMCwweDAyLDB4Y2MsMHgwMCwweDkwLDB4MDYsMHg2YywweDAwLDB4MDgsMHgzMCwweDAyLDB4OGMsMHgwMCwweGEzLDB4MDQgfSB9LAoreyAgMTYsIDB4ZDk3MCwgMCwgezB4MjAsMHgwMCwweDhiLDB4MDAsMHgwNiwweDRjLDB4MjEsMHg4MCwweDAwLDB4NmMsMHhjMCwweDQ5LDB4MTAsMHgwYSwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZDk4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4Y2EsMHgwMCwweGIyLDB4YzEgfSB9LAoreyAgMTYsIDB4ZDk5MCwgMCwgezB4ODgsMHhiNCwweDAzLDB4ZWMsMHgxMCwweGM4LDB4MDAsMHgyZSwweDAwLDB4MGMsMHhiMCwweDBiLDB4YmMsMHgwOCwweDhmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDlhMCwgMCwgezB4MzYsMHgwMCwweDA2LDB4ODAsMHgwMywweGVjLDB4ODAsMHhjOCwweDAyLDB4M2YsMHhjMSwweDBjLDB4OTAsMHgwMywweDAwLDB4MDMgfSB9LAoreyAgMTYsIDB4ZDliMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MWQsMHhmMCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAgfSB9LAoreyAgMTYsIDB4ZDljMCwgMCwgezB4MGYsMHg3MiwweDgzLDB4ZmMsMHgxOCwweGZjLDB4MDMsMHgzZiwweDAwLDB4OGYsMHg3MCwweDAzLDB4N2MsMHgwMCwweGZmLDB4MDAgfSB9LAoreyAgMTYsIDB4ZDlkMCwgMCwgezB4M2QsMHgwMCwweDBmLDB4YzAsMHgyMywweDhjLDB4MDYsMHhmYywweDAwLDB4M2YsMHg0MCwweDBlLDB4ZDAsMHgwMywweGU4LDB4MDYgfSB9LAoreyAgMTYsIDB4ZDllMCwgMCwgezB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MSwweDAzLDB4NzAsMHg0MCwweGRjLDB4MTAgfSB9LAoreyAgMTYsIDB4ZDlmMCwgMCwgezB4MzcsMHgwNCwweDBkLDB4YzEsMHgwMywweDcwLDB4NDAsMHhkYywweDEwLDB4MzcsMHgwNCwweDBkLDB4YzEsMHgwMSwweDcwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZGEwMCwgMCwgezB4OWMsMHgxMCwweDE3LDB4MTQsMHgwNSwweGMxLDB4MDMsMHg3MCwweDQwLDB4ZGMsMHgxMCwweDE3LDB4MDQsMHgwZCwweGMwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0NCwweDA1LDB4NzEsMHgwMSwweDVjLDB4NDAgfSB9LAoreyAgMTYsIDB4ZGEyMCwgMCwgezB4NTcsMHgxMCwweDE1LDB4YzQsMHgwNSwweDIxLDB4MDEsMHg1YywweDQwLDB4NTcsMHgxMCwweDE1LDB4YzQsMHgwMSwweDcxLDB4MDEgfSB9LAoreyAgMTYsIDB4ZGEzMCwgMCwgezB4NWMsMHg0MCwweDE3LDB4MTAsMHgwNSwweGM0LDB4MDUsMHg3MSwweDA1LDB4NWMsMHg0MSwweDU3LDB4MTAsMHgxNSwweGMwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZGE0MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZGE1MCwgMCwgezB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGE2MCwgMCwgezB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDAwLDB4NjAsMHgwMCwweDU4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGE4MCwgMCwgezB4MTYsMHgwMCwweDA1LDB4ODAsMHgwMSwweDYwLDB4MDAsMHg1OCwweDAwLDB4MTYsMHgwMCwweDA1LDB4ODAsMHgwNSwweDYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGE5MCwgMCwgezB4NTgsMHgwMCwweDE2LDB4MTgsMHgwMSwweDgwLDB4MDEsMHg2MCwweDAwLDB4NTgsMHgwMCwweDU2LDB4MDAsMHgwNSwweDgwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGFhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0OCwweDA1LDB4MjIsMHgwMSwweDFjLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGFiMCwgMCwgezB4NDcsMHgyMCwweDExLDB4YzgsMHgwNCwweDcyLDB4MDEsMHg1YywweDgwLDB4NTcsMHgyMCwweDExLDB4YzgsMHgwNCwweDcyLDB4NDEgfSB9LAoreyAgMTYsIDB4ZGFjMCwgMCwgezB4NWMsMHg4MCwweDU3LDB4MjAsMHgxMSwweGM4LDB4MDQsMHg3MiwweDAxLDB4MWMsMHg4MCwweDQ3LDB4MjAsMHgxNSwweGMwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGFkMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGFlMCwgMCwgezB4MDYsMHgwMCwweDAxLDB4ODAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwLDB4MDYsMHgwMCwweDAxLDB4ODAsMHgwMCwweDYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGFmMCwgMCwgezB4MTgsMHgwMCwweDA2LDB4MDAsMHgwMSwweDgwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgwMCwweDA2LDB4MDAsMHgwMSwweDgwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGIwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0OCwweDA0LDB4MjIsMHgwMSwweDA4LDB4ODAgfSB9LAoreyAgMTYsIDB4ZGIxMCwgMCwgezB4NDIsMHgyMCwweDEwLDB4ODgsMHgwNCwweDIyLDB4MDEsMHgwOCwweDgwLDB4NDIsMHgyMCwweDEwLDB4ODAsMHgwNCwweDIzLDB4MDEgfSB9LAoreyAgMTYsIDB4ZGIyMCwgMCwgezB4MDgsMHg4MCwweDQyLDB4MjAsMHgxMCwweDg4LDB4MDQsMHgyMiwweDAxLDB4MDgsMHgwMCwweDQyLDB4MjAsMHgxMCwweDgwLDB4MjEgfSB9LAoreyAgMTYsIDB4ZGIzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0YSwweDA1LDB4NDIsMHg4MSwweDUwLDB4YTAgfSB9LAoreyAgMTYsIDB4ZGI0MCwgMCwgezB4NDQsMHgyYywweDExLDB4MGIsMHgwNCwweDQyLDB4ODEsMHgxMCwweGUwLDB4NTQsMHgyOCwweDExLDB4MDIsMHgwMCwweDQyLDB4ODEgfSB9LAoreyAgMTYsIDB4ZGI1MCwgMCwgezB4MTAsMHhhMCwweDQ0LDB4MzgsMHgxMSwweDBiLDB4MDUsMHg0MiwweDgxLDB4MTAsMHgyMSwweDE0LDB4MjgsMHgxNSwweDAwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGI2MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwYywweDAxLDB4NTcsMHgwMCwweDU0LDB4YzAgfSB9LAoreyAgMTYsIDB4ZGI3MCwgMCwgezB4MTUsMHgzMCwweDA0LDB4NGMsMHgwMSwweDEzLDB4MDAsMHg1NCwweGMwLDB4MTUsMHg3MCwweDA1LDB4NGMsMHgwMSwweDUzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGI4MCwgMCwgezB4NTQsMHhjMCwweDE1LDB4MzAsMHg4NSwweDRjLDB4MDEsMHgxMywweDAwLDB4NTQsMHhjMCwweDE1LDB4MzAsMHgwNSwweDQwLDB4MjEgfSB9LAoreyAgMTYsIDB4ZGI5MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDAwLDB4NDAsMHgwMCwweDEwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGJhMCwgMCwgezB4MDQsMHgwMCwweDAwLDB4NDAsMHgwMCwweDEwLDB4MDAsMHgxMCwweDYyLDB4MDQsMHgwMCwweDAxLDB4MDgsMHgwNCwweDQxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGJiMCwgMCwgezB4MTAsMHgwMCwweDQ0LDB4MTgsMHgxMSwweDAwLDB4MDAsMHgxMCwweDAwLDB4MTAsMHg4MCwweDA0LDB4MDAsMHgwMSwweDAxLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGJjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg2MCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGJkMCwgMCwgezB4MjAsMHg4MCwweDA4LDB4NjAsMHgwMiwweDE4LDB4MDAsMHg4MiwweDAwLDB4MjAsMHg4MCwweDA4LDB4MjAsMHgwMCwweDA4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZGJlMCwgMCwgezB4ODIsMHgwMCwweDAwLDB4ODAsMHg4MCwweDIwLDB4MDIsMHgxOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwOCwweDAxLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGJmMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MCwweDA1LDB4NjQsMHgwMSwweDU4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGMwMCwgMCwgezB4NTYsMHgwMCwweDE1LDB4ODAsMHgwNSwweDYwLDB4MDEsMHg1OCwweDAwLDB4NTYsMHg0MCwweDE1LDB4ODAsMHgwNSwweDYwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZGMxMCwgMCwgezB4NTgsMHgwMCwweDU2LDB4MDAsMHgxNSwweDgwLDB4MDUsMHg2MCwweDAxLDB4NTgsMHgwMCwweDc2LDB4MDAsMHgxNSwweDgwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGMyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MCwweDAzLDB4NjAsMHgwMCwweGQ4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGMzMCwgMCwgezB4MzYsMHgwMCwweDBkLDB4ODAsMHgwMywweDYwLDB4MDAsMHg5OCwweDAwLDB4MzYsMHgwMCwweDFkLDB4ODgsMHgwNSwweDYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGM0MCwgMCwgezB4ZDgsMHgwMCwweDE2LDB4MDAsMHgwZCwweDgwLDB4MDMsMHg2MCwweDAwLDB4ZDgsMHg4MCwweDQ2LDB4MDAsMHgwZCwweDgwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGM1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MiwweDA0LDB4MzAsMHg4MSwweDBjLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGM2MCwgMCwgezB4NDMsMHgwOCwweDEwLDB4YzIsMHgwNCwweDMwLDB4ODEsMHgwYywweDIyLDB4NDEsMHgwOCwweDE4LDB4YzIsMHgwNCwweDMwLDB4ODkgfSB9LAoreyAgMTYsIDB4ZGM3MCwgMCwgezB4MGMsMHgyMCwweDAzLDB4MDgsMHgxMCwweGMyLDB4MDQsMHgzMCwweDgxLDB4MGMsMHgyMCwweDQzLDB4MDgsMHgxMCwweGMwLDB4MTAgfSB9LAoreyAgMTYsIDB4ZGM4MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDBjLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGM5MCwgMCwgezB4MDMsMHgwMCwweDAwLDB4YzAsMHgwMCwweDMwLDB4MDAsMHgwYywweDAwLDB4MDMsMHgwMCwweDAwLDB4YzAsMHgwMCwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGNhMCwgMCwgezB4MGMsMHgwMCwweDAzLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgzMCwweDAwLDB4MGMsMHgwMCwweDAzLDB4MDAsMHgwMCwweGMwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZGNiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMiwweDAxLDB4MzAsMHg4MCwweDRjLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGNjMCwgMCwgezB4MTMsMHgwOCwweDA0LDB4YzIsMHgwMSwweDMwLDB4ODAsMHg0YywweDIwLDB4MTMsMHgwOCwweDA0LDB4YzMsMHgwMSwweDMwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGNkMCwgMCwgezB4NGMsMHgyMCwweDEzLDB4MDgsMHgwNCwweGMyLDB4MDEsMHgzMCwweDgwLDB4NGMsMHgzMCwweDEzLDB4MDgsMHgwNCwweGMwLDB4MjEgfSB9LAoreyAgMTYsIDB4ZGNlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MiwweDA1LDB4NjAsMHg4MSwweDU4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZGNmMCwgMCwgezB4NTYsMHgwOCwweDExLDB4ODIsMHgwNSwweDYwLDB4ODEsMHg1OCwweDIwLDB4NTYsMHgwOCwweDExLDB4ODMsMHgwMCwweDYwLDB4ODEgfSB9LAoreyAgMTYsIDB4ZGQwMCwgMCwgezB4NTgsMHgyMCwweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDQsMHg2MCwweDgxLDB4MTgsMHgzMCwweDU2LDB4MDgsMHgxNSwweDgwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZGQxMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MiwweDAwLDB4MjAsMHg4MCwweDA4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZGQyMCwgMCwgezB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwOCwweDIwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDMwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGQzMCwgMCwgezB4MDgsMHgyMCwweDAyLDB4MDAsMHgwMCwweDgyLDB4MDAsMHgyMCwweDgwLDB4MDgsMHgyMCwweDAzLDB4MDgsMHgwMCwweDgwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGQ0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MiwweDA0LDB4NjAsMHg4MSwweDE4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZGQ1MCwgMCwgezB4NDYsMHg0OCwweDExLDB4OTIsMHgwNCwweDYwLDB4ODEsMHgxOSwweDIwLDB4NDYsMHgyOCwweDExLDB4ODIsMHgwMCwweDM0LDB4ODEgfSB9LAoreyAgMTYsIDB4ZGQ2MCwgMCwgezB4MTgsMHgyMCwweDQ2LDB4NDgsMHgxMSwweDkyLDB4MDQsMHg2MCwweDgxLDB4MTgsMHgyMCwweDQzLDB4MDgsMHgxMSwweDgwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZGQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg2MCwweDA0LDB4NTgsMHgwMSwweDU2LDB4MDAgfSB9LAoreyAgMTYsIDB4ZGQ4MCwgMCwgezB4NTUsMHg4MCwweDE1LDB4NjAsMHgwNCwweDU4LDB4MDEsMHgxNiwweDAwLDB4NTUsMHg4MCwweDAxLDB4NjAsMHgwNCwweDE4LDB4MDEgfSB9LAoreyAgMTYsIDB4ZGQ5MCwgMCwgezB4NTYsMHgwMCwweDQ1LDB4ODAsMHgxMSwweDYwLDB4MDQsMHg1OCwweDAxLDB4MTYsMHgwMCwweDQxLDB4ODAsMHgxMSwweDQwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGRhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNiwweDAxLDB4NDEsMHg4MCwweDUwLDB4NjAgfSB9LAoreyAgMTYsIDB4ZGRiMCwgMCwgezB4MTQsMHgxOCwweDA1LDB4MDYsMHgwMSwweDQxLDB4ODAsMHg1MCwweDYwLDB4MDQsMHgxOCwweDA1LDB4MDYsMHgwMCwweDQxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGRjMCwgMCwgezB4MTAsMHg2MCwweDE0LDB4MTgsMHgwNSwweDA2LDB4MDEsMHg0MSwweDgwLDB4NTAsMHg2MCwweDE0LDB4MTgsMHgwNSwweDAwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGRkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAxLDB4MDAsMHg4MCwweDQwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGRlMCwgMCwgezB4MTAsMHg0OCwweDA0LDB4MTIsMHgwMSwweDAwLDB4ODAsMHg0MSwweDIwLDB4MTAsMHgwOCwweDA0LDB4MDIsMHgwMSwweDA0LDB4ODAgfSB9LAoreyAgMTYsIDB4ZGRmMCwgMCwgezB4NDAsMHgyMCwweDUwLDB4NDgsMHgwNCwweDEyLDB4MDEsMHgwMCwweDg0LDB4NDAsMHgyMCwweDEwLDB4MDgsMHgwNCwweDAwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGUwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0NiwweDAzLDB4NTEsMHg4MCwweGQ0LDB4NjAgfSB9LAoreyAgMTYsIDB4ZGUxMCwgMCwgezB4MzAsMHgxOCwweDBkLDB4NDYsMHgwMywweDUxLDB4ODAsMHhkNSwweDYwLDB4MzUsMHgxOCwweDBkLDB4NDYsMHgwMywweDA1LDB4ODAgfSB9LAoreyAgMTYsIDB4ZGUyMCwgMCwgezB4ZDQsMHg2MCwweDE1LDB4MTgsMHgwZCwweDQ2LDB4MDMsMHgxMSwweDgwLDB4ZDQsMHg2MCwweDM1LDB4MTgsMHgwZCwweDQwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGUzMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0NiwweDA1LDB4NzEsMHg4MCwweDVjLDB4NjAgfSB9LAoreyAgMTYsIDB4ZGU0MCwgMCwgezB4OTcsMHgxOCwweDE1LDB4YzYsMHgwNSwweDcxLDB4ODEsMHg1YywweDIwLDB4NTcsMHgxOCwweDE1LDB4YzYsMHgwMywweDcwLDB4ODEgfSB9LAoreyAgMTYsIDB4ZGU1MCwgMCwgezB4NWMsMHg2MCwweDU3LDB4MTgsMHgxMSwweGM2LDB4MDUsMHgzMSwweDgxLDB4NWMsMHg2MCwweDc3LDB4MTgsMHgxNSwweGMwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZGU2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg0NiwweDAzLDB4NzEsMHg4MCwweGRjLDB4NjAgfSB9LAoreyAgMTYsIDB4ZGU3MCwgMCwgezB4MzcsMHgxOCwweDBkLDB4YzYsMHgwMywweDcxLDB4ODAsMHhkZCwweDYwLDB4MzcsMHgxOCwweDA1LDB4YzYsMHgwMSwweDc1LDB4ODEgfSB9LAoreyAgMTYsIDB4ZGU4MCwgMCwgezB4ZGMsMHg2MCwweDM3LDB4MTgsMHgwZCwweGM2LDB4MDMsMHg3MSwweDg0LDB4NWMsMHg2MCwweDE3LDB4MTgsMHgxOSwweGMwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZGU5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg0NiwweDA1LDB4NzEsMHg4MSwweDVjLDB4NjAgfSB9LAoreyAgMTYsIDB4ZGVhMCwgMCwgezB4NTcsMHgxOCwweDE0LDB4ODYsMHgwNSwweDcxLDB4ODEsMHg1YywweDYwLDB4NTcsMHgxOCwweDA1LDB4YzYsMHgwNCwweDMxLDB4ODEgfSB9LAoreyAgMTYsIDB4ZGViMCwgMCwgezB4NWMsMHg2MCwweDU3LDB4MTgsMHgxNSwweGM2LDB4MDUsMHg3MSwweDgwLDB4NWMsMHg2MCwweDQzLDB4MTgsMHgxNSwweGMwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZGVjMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZGVkMCwgMCwgezB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDcwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGVlMCwgMCwgezB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyMCwweDE3LDB4MDgsMHgwNCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNiwweDAxLDB4NjEsMHg4MCwweDU4LDB4NjAgfSB9LAoreyAgMTYsIDB4ZGYwMCwgMCwgezB4MTYsMHgxOCwweDQxLDB4ODYsMHgwMSwweDYxLDB4ODAsMHgxOCwweDYwLDB4MDYsMHgzYywweDA1LDB4ODYsMHgwNCwweDYxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGYxMCwgMCwgezB4MTgsMHg2MCwweDE2LDB4MTgsMHgwMSwweDg2LDB4MDAsMHg2MSwweDgwLDB4NTgsMHg2MCwweDU2LDB4MTgsMHgxNSwweDgwLDB4MTAgfSB9LAoreyAgMTYsIDB4ZGYyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg0MCwweDA1LDB4NzAsMHgwMSwweDVjLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGYzMCwgMCwgezB4NTcsMHgwMCwweDE1LDB4YzAsMHgwNCwweDcwLDB4MDEsMHg1YywweDAwLDB4NTcsMHgwMCwweDEwLDB4YzAsMHgwNCwweDcwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZGY0MCwgMCwgezB4MWMsMHgwMCwweDQ3LDB4MDAsMHgxMSwweGMwLDB4MDQsMHg3MCwweDAxLDB4NWMsMHgwMCwweDQ3LDB4MDAsMHgwMSwweGMwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZGY1MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg0MiwweDAwLDB4NjAsMHg4MCwweDE4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZGY2MCwgMCwgezB4MDYsMHgwOCwweDAxLDB4ODIsMHgwMCwweDYwLDB4ODAsMHgxOCwweDIwLDB4MDYsMHgwOCwweDAwLDB4ODIsMHgwMCwweDYwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGY3MCwgMCwgezB4MTgsMHgyMCwweDA2LDB4MDgsMHgwMSwweDgyLDB4MDAsMHg2MCwweDgwLDB4MTgsMHgyMCwweDA2LDB4MDgsMHgwMSwweDgwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZGY4MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHg0MiwweDA0LDB4MjAsMHg4MSwweDA4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZGY5MCwgMCwgezB4NDIsMHgwOCwweDEwLDB4ODIsMHgwNCwweDIwLDB4ODEsMHgwOCwweDIwLDB4NDIsMHgwOCwweDExLDB4ODIsMHgwNCwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZGZhMCwgMCwgezB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMCwweDgyLDB4MDQsMHgyMCwweDgxLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgwMCwweDgwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZGZiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg0MiwweDA1LDB4NDAsMHg4MSwweDUwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZGZjMCwgMCwgezB4NTQsMHgwOCwweDE1LDB4MDIsMHgwNSwweDQwLDB4ODEsMHgxMCwweDIwLDB4NTQsMHgwYywweDE1LDB4NDIsMHgwMCwweDQwLDB4ODEgfSB9LAoreyAgMTYsIDB4ZGZkMCwgMCwgezB4NTAsMHgyMCwweDQ0LDB4MDgsMHgxMSwweDAyLDB4MDUsMHg0MCwweDgxLDB4MTAsMHgyMCwweDE0LDB4MDgsMHgwNSwweDAwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZGZlMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMywweDAxLDB4NTAsMHhjMCwweDU0LDB4MzAgfSB9LAoreyAgMTYsIDB4ZGZmMCwgMCwgezB4MTUsMHgwOCwweDA1LDB4NDIsMHgwMSwweDUwLDB4YzAsMHg1NCwweDMwLDB4MTUsMHgwYywweDA1LDB4NDMsMHgwMSwweDUwLDB4YzAgfSB9LAoreyAgMTYsIDB4ZTAwMCwgMCwgezB4NTQsMHgzMCwweDE1LDB4MGMsMHgwNSwweDQyLDB4MDEsMHg1MCwweGMwLDB4NTQsMHgzMCwweDE1LDB4MGMsMHgwNSwweDQwLDB4MTAgfSB9LAoreyAgMTYsIDB4ZTAxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4NDIsMHgwMCwweDEwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTAyMCwgMCwgezB4MDQsMHgyMCwweDAxLDB4ODgsMHgwMCwweDYyLDB4MDAsMHgxMCwweDgwLDB4MDQsMHgwMCwweDExLDB4MDgsMHgwMCwweDQyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTAzMCwgMCwgezB4MTAsMHg4MCwweDA0LDB4MjAsMHgwMSwweDA4LDB4MDAsMHg0MiwweDAxLDB4MTAsMHg4MCwweDA0LDB4MjAsMHgwMSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTA0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg0MiwweDAyLDB4MDAsMHg4MCwweDgwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZTA1MCwgMCwgezB4MjAsMHgwOCwweDA4LDB4MDIsMHgwMiwweDIwLDB4ODAsMHg4MCwweDIwLDB4MjAsMHgyOCwweDAwLDB4MDIsMHgwMiwweDAwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTA2MCwgMCwgezB4ODAsMHgyMCwweDIwLDB4MGEsMHgwOCwweDAyLDB4MDIsMHgwMCwweDgwLDB4MDAsMHgyMCwweDIwLDB4MDgsMHgwOCwweDAwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZTA3MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg0MCwweDA1LDB4NjAsMHgwMSwweDU4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTA4MCwgMCwgezB4NTYsMHgwMCwweDA1LDB4ODAsMHgwNSwweDYwLDB4MDEsMHg1OCwweDA4LDB4NTYsMHgwMCwweDE1LDB4ODAsMHgwNywweDYwLDB4MDIgfSB9LAoreyAgMTYsIDB4ZTA5MCwgMCwgezB4NTgsMHgwMCwweDU2LDB4NDAsMHgxNSwweDgwLDB4MDUsMHg2MCwweDAzLDB4MTgsMHgwMCwweDc2LDB4MDAsMHgxNSwweDgwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZTBhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MCwweDAzLDB4NjAsMHgwMCwweGQ4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTBiMCwgMCwgezB4MzYsMHgwMCwweDBkLDB4ODAsMHgwMSwweDYwLDB4MDAsMHhkOCwweDBhLDB4MzYsMHgwMCwweDBkLDB4ODAsMHgwNSwweDcwLDB4MDkgfSB9LAoreyAgMTYsIDB4ZTBjMCwgMCwgezB4ZDgsMHgwMSwweDM2LDB4MDAsMHgwZCwweDgwLDB4MDMsMHg2MCwweDAwLDB4ZDgsMHgwMCwweDU3LDB4MDAsMHgwZCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTBkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MzAsMHgwMSwweDBjLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTBlMCwgMCwgezB4NDMsMHgwMCwweDEwLDB4YzAsMHgwMCwweDMwLDB4MDEsMHgwYywweDAwLDB4NDMsMHgyMCwweDEwLDB4YzAsMHgwNCwweDYwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTBmMCwgMCwgezB4MGMsMHgwMCwweDQzLDB4NDAsMHg1MCwweGMxLDB4MDQsMHgzMCwweDAxLDB4MGMsMHgwMCwweDQ2LDB4MDAsMHgxMCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDBjLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTExMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4YzAsMHgwMCwweDMwLDB4MDAsMHgwYywweDAwLDB4MDMsMHgwMCwweDAwLDB4ZDAsMHgwMCwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTEyMCwgMCwgezB4MGMsMHgwMCwweDAzLDB4NDAsMHgwMCwweGMwLDB4MDAsMHgzMCwweDAwLDB4MGQsMHgwMCwweDAyLDB4MDAsMHgwMCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDAxLDB4MzEsMHg0MCwweDRjLDB4NTAgfSB9LAoreyAgMTYsIDB4ZTE0MCwgMCwgezB4MTMsMHgxMCwweDA0LDB4YzQsMHgwMSwweDMxLDB4NDAsMHg0YywweDUwLDB4MTMsMHgxNCwweDA0LDB4YzUsMHgxMSwweDMxLDB4NDEgfSB9LAoreyAgMTYsIDB4ZTE1MCwgMCwgezB4NGMsMHg1MCwweDEzLDB4MTQsMHgwNCwweGM1LDB4MDEsMHgzMSwweDQwLDB4NGMsMHg1MCwweDEzLDB4MTQsMHgwNCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMywweDA1LDB4NjgsMHhjMSwweDVhLDB4MzAgfSB9LAoreyAgMTYsIDB4ZTE3MCwgMCwgezB4NTYsMHg4YywweDExLDB4YTMsMHgwNCwweDY4LDB4YzEsMHgxYSwweDMwLDB4NTYsMHg4YywweDExLDB4YTMsMHgwNSwweDY4LDB4YzAgfSB9LAoreyAgMTYsIDB4ZTE4MCwgMCwgezB4NWEsMHgzMCwweDQ2LDB4OGMsMHgxMSwweGEzLDB4MDQsMHg2OCwweGMxLDB4NWEsMHgzMCwweDE2LDB4OGMsMHgxNSwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTFhMCwgMCwgezB4MDIsMHgwMCwweDAwLDB4ODAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgyMCwweDAwLDB4OTAsMHgwMCwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTFiMCwgMCwgezB4MDgsMHgwMCwweDAyLDB4NDAsMHgwMCwweDgwLDB4MDAsMHgyMCwweDAwLDB4MDksMHgwMCwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTFjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDQ0LDB4NjIsMHgwMSwweDE4LDB4ODQgfSB9LAoreyAgMTYsIDB4ZTFkMCwgMCwgezB4NDYsMHgyMSwweDExLDB4ODgsMHg0NCwweDYyLDB4MTEsMHgxOCwweDg0LDB4NDYsMHgwMSwweDExLDB4ODgsMHg0NCwweDYyLDB4MTAgfSB9LAoreyAgMTYsIDB4ZTFlMCwgMCwgezB4MTgsMHg4NCwweDQ2LDB4MjEsMHgxMSwweDg4LDB4NDQsMHg2MiwweDExLDB4MTgsMHg4NCwweDA2LDB4MjEsMHgxMSwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ1LDB4NTAsMHgxMSwweDU0LDB4MDQgfSB9LAoreyAgMTYsIDB4ZTIwMCwgMCwgezB4NTUsMHgwMSwweDExLDB4NDAsMHg0NSwweDUwLDB4MTEsMHgxNCwweDAwLDB4NDUsMHgwMSwweDExLDB4NDAsMHg0NCwweDUwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTIxMCwgMCwgezB4MTQsMHgwNCwweDQ1LDB4MDAsMHgxNSwweDQwLDB4NDQsMHg1MCwweDExLDB4MTQsMHgwNCwweDU1LDB4MDEsMHgxMSwweDQwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTIyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDIxLDB4NDIsMHgwOCwweDUwLDB4ODIgfSB9LAoreyAgMTYsIDB4ZTIzMCwgMCwgezB4MTQsMHgyMCwweDg1LDB4MDgsMHgyMSwweDQyLDB4MDgsMHg1MCwweDgyLDB4MDQsMHgyMCwweDg1LDB4MDgsMHgyMSwweDQyLDB4MDggfSB9LAoreyAgMTYsIDB4ZTI0MCwgMCwgezB4NTAsMHg4MiwweDE0LDB4MjAsMHgwNSwweDA4LDB4MjEsMHg0MiwweDA4LDB4NTAsMHg4MiwweDE0LDB4MjAsMHg4NSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTI1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYSwweDAxLDB4MDIsMHg4MCwweDQwLDB4YTAgfSB9LAoreyAgMTYsIDB4ZTI2MCwgMCwgezB4MTAsMHgyOCwweDA0LDB4MGEsMHgwMSwweDAyLDB4ODAsMHg0MCwweGEwLDB4MTAsMHgyOCwweDQwLDB4MGEsMHgwMSwweDAyLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTI3MCwgMCwgezB4NDAsMHhhMCwweDEwLDB4MjgsMHg0NCwweDBhLDB4MDEsMHgwMiwweDgwLDB4NDAsMHhhMCwweDEwLDB4MjgsMHgwNCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTI4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYywweDAzLDB4NTMsMHgwMCwweGQ0LDB4YzAgfSB9LAoreyAgMTYsIDB4ZTI5MCwgMCwgezB4MzUsMHgzMCwweDBkLDB4NGMsMHgwMSwweDUzLDB4MDAsMHhkNCwweGMwLDB4MzUsMHgxMCwweDBjLDB4NGMsMHgwMywweDUzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTJhMCwgMCwgezB4ZDQsMHhjMCwweDM1LDB4MzAsMHgwZCwweDRjLDB4MDMsMHg1MywweDAwLDB4ZDQsMHhjMCwweDM1LDB4MzAsMHgwZCwweDQwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTJiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4NzIsMHgwMSwweDVjLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTJjMCwgMCwgezB4MTcsMHgyMCwweDA1LDB4YzgsMHgwNiwweDcyLDB4MDEsMHg1YywweDgwLDB4NTcsMHgyMCwweDE1LDB4YzgsMHgwMiwweDcyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTJkMCwgMCwgezB4NWMsMHg4MCwweDU3LDB4MjAsMHgxNSwweGM4LDB4MDUsMHg3MiwweDAxLDB4NWMsMHg4MCwweDM3LDB4MjAsMHgxMSwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMywweDE4LDB4NDAsMHhjNiwweDEyLDB4MzEgfSB9LAoreyAgMTYsIDB4ZTJmMCwgMCwgezB4ODQsMHg4YywweDIxLDB4MjMsMHgwOCwweDQ4LDB4YzYsMHgxMiwweDMwLDB4ODQsMHgwYywweDYxLDB4MjMsMHgxMCwweDQ4LDB4YzIgfSB9LAoreyAgMTYsIDB4ZTMwMCwgMCwgezB4MTIsMHgzMSwweDg0LDB4OGMsMHgwMSwweDIzLDB4MDgsMHg0OCwweGM2LDB4MTIsMHgzMSwweDA0LDB4OGMsMHg2MSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTMxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZTMyMCwgMCwgezB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMywweGZmLDB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZTMzMCwgMCwgezB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTM0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTM1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyYywweGRiLDB4MGYsMHhiNiwweGMyLDB4Y2QgfSB9LAoreyAgMTYsIDB4ZTM4MCwgMCwgezB4YjAsMHhiMywweDZjLDB4MmMsMHhkYiwweDBiLDB4MzYsMHhjMiwweGRmLDB4YjAsMHhiMywweDZjLDB4MmMsMHhkYiwweDBiLDB4N2UgfSB9LAoreyAgMTYsIDB4ZTM5MCwgMCwgezB4YzIsMHhjZCwweGIwLDB4YjcsMHhmZCwweDJjLDB4ZGIsMHgwYiwweDM2LDB4YzIsMHhjZCwweGIwLDB4YjMsMHg2YywweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTNhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMywweDNjLDB4NGYsMHhjZiwweDEzLDB4MzMgfSB9LAoreyAgMTYsIDB4ZTNiMCwgMCwgezB4YzQsMHhjYywweGYxLDB4MzMsMHgzYywweDRjLDB4Y2YsMHgxMywweDNmLDB4YzQsMHhjYywweGYxLDB4MzMsMHgzYywweDRjLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZTNjMCwgMCwgezB4MTMsMHgzMywweGM0LDB4Y2YsMHhmZCwweDMzLDB4M2MsMHg0YywweGNmLDB4MTMsMHgzMywweGM0LDB4Y2MsMHhmMSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTNkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYiwweDdlLDB4NGUsMHhkZiwweDkzLDB4YjcgfSB9LAoreyAgMTYsIDB4ZTNlMCwgMCwgezB4ZTQsMHhlYywweDc5LDB4M2IsMHgxZSwweDRlLDB4ZGYsMHg5MywweGJmLDB4ZTQsMHg4ZCwweGY5LDB4M2IsMHg3OCwweDRlLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZTNmMCwgMCwgezB4OTMsMHhiNywweGU0LDB4ZWQsMHhmZCwweDNiLDB4MWUsMHg0ZSwweGRmLDB4OTMsMHhiNywweDg0LDB4ZWQsMHhmOSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAyLDB4NzAsMHg0MCwweDljLDB4MTAgfSB9LAoreyAgMTYsIDB4ZTQxMCwgMCwgezB4MjcsMHgxYywweDA5LDB4YzEsMHgwMSwweDMwLDB4NDAsMHgxYywweDEwLDB4NjcsMHgwNCwweDA5LDB4YzEsMHgwMiwweDcwLDB4NDEgfSB9LAoreyAgMTYsIDB4ZTQyMCwgMCwgezB4OWMsMHgxMSwweDA3LDB4MTQsMHgwMSwweGMxLDB4MDIsMHg3MCwweDQwLDB4OWMsMHg1MCwweDA3LDB4MWMsMHgwMSwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTQzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDA1LDB4NzEsMHgwMSwweDVjLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTQ0MCwgMCwgezB4NTcsMHgxMCwweDU1LDB4YzQsMHgwMSwweDMxLDB4MDAsMHg1YywweDQwLDB4NTcsMHgxMCwweDE1LDB4YzQsMHgwNSwweDcxLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTQ1MCwgMCwgezB4ZGMsMHg0MCwweDE3LDB4MTgsMHgxZCwweGM0LDB4MDUsMHg3MSwweDA1LDB4NWMsMHg0MCwweDU3LDB4MTAsMHgxZCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZTQ3MCwgMCwgezB4MTIsMHgwMCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTQ4MCwgMCwgezB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHg2MCwweDEyLDB4MDgsMHgwNCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTQ5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTRhMCwgMCwgezB4MDYsMHgwMCwweDQxLDB4ODAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwLDB4NDYsMHgwMCwweDAxLDB4ODAsMHgwMCwweDYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTRiMCwgMCwgezB4MTAsMHgwMCwweDA2LDB4MTAsMHgwMSwweDgwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgyMCwweDQ2LDB4MTAsMHgwMSwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTRjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4NzIsMHgwMSwweDFjLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTRkMCwgMCwgezB4NDcsMHgyMCwweDExLDB4YzgsMHgwNCwweDcyLDB4MDEsMHgxYywweDgwLDB4MDcsMHgyMCwweDExLDB4YzgsMHgwNCwweDczLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTRlMCwgMCwgezB4MWMsMHg4MCwweDQ3LDB4MjAsMHgxMSwweGNjLDB4MDQsMHg3MiwweDAxLDB4MWMsMHg4MCwweDQ3LDB4MjAsMHgxMSwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTRmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTUwMCwgMCwgezB4MDYsMHgwMCwweDAxLDB4ODQsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwLDB4MDYsMHgwMCwweDAxLDB4ODAsMHgwMCwweDYwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZTUxMCwgMCwgezB4MTgsMHgwMCwweDA2LDB4MDQsMHgwMSwweDgxLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgwMCwweDA2LDB4MTQsMHgwMSwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTUyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MjIsMHgwMSwweDA4LDB4ODAgfSB9LAoreyAgMTYsIDB4ZTUzMCwgMCwgezB4NDIsMHg3MCwweDEwLDB4OGMsMHgwNCwweDIyLDB4MDEsMHgwOCwweGMwLDB4MDIsMHgyMCwweDEwLDB4ODgsMHgwNCwweDIyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTU0MCwgMCwgezB4MDgsMHg4MCwweDQyLDB4NTAsMHgxMCwweDA4LDB4MDQsMHgyMiwweDAxLDB4MDksMHgwMCwweDQyLDB4NDAsMHgxMCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTU1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZSwweDA0LDB4NGEsMHg4MSwweDEyLDB4YTAgfSB9LAoreyAgMTYsIDB4ZTU2MCwgMCwgezB4NDQsMHhhOCwweDExLDB4MmEsMHgwNCwweDRhLDB4ODEsMHgxMiwweGEwLDB4MDQsMHhhOCwweDExLDB4MmEsMHgwNCwweDRiLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTU3MCwgMCwgezB4MTIsMHhhMCwweDQ0LDB4ODgsMHgwMSwweDJlLDB4MDQsMHg0YSwweDgxLDB4MTIsMHgyMCwweDA0LDB4OTgsMHgwMSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4YzAsMHgwZSwweDAwLDB4NTMsMHgwMCwweDE0LDB4YzAgfSB9LAoreyAgMTYsIDB4ZTU5MCwgMCwgezB4MDUsMHgzMCwweDAxLDB4NGMsMHgwMCwweDUzLDB4MDAsMHgxNCwweGUwLDB4MDUsMHgzMCwweDAxLDB4NGMsMHgwMCwweDUzLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTVhMCwgMCwgezB4MDQsMHhjMCwweDA1LDB4MzAsMHgwMCwweDRjLDB4MDAsMHgwMywweDAwLDB4MTQsMHhjMCwweDA1LDB4MzAsMHgwMCwweDQwLDB4MTAgfSB9LAoreyAgMTYsIDB4ZTViMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4YzAsMHgwNCwweDAwLDB4NDAsMHgwMCwweDEwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTVjMCwgMCwgezB4MDQsMHg1OCwweDAxLDB4MDQsMHgwMCwweDQwLDB4MDAsMHgxMCwweDAwLDB4MDQsMHgwMCwweDAxLDB4MDAsMHgwMCwweDQxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTVkMCwgMCwgezB4MDQsMHgwMCwweDQ0LDB4NTgsMHgxMCwweDQ0LDB4MDAsMHgwMCwweDAwLDB4MTEsMHg4MCwweDA0LDB4NTAsMHgxMCwweDQwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZTVlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4YzAsMHg0MCwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTVmMCwgMCwgezB4MjAsMHgwMCwweDA4LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTYwMCwgMCwgezB4ODQsMHgwMCwweDAwLDB4MDAsMHgwOCwweDQwLDB4MDIsMHgwMCwweDAwLDB4ODAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDQwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZTYxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4YzAsMHg0MCwweDAwLDB4NjAsMHgwMSwweDE4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTYyMCwgMCwgezB4NDYsMHgwMCwweDAxLDB4ODAsMHgwNiwweDYwLDB4MDEsMHg5OCwweDAwLDB4NDYsMHgwMCwweDExLDB4ODAsMHgwNCwweDYwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTYzMCwgMCwgezB4MTgsMHgwMCwweDQ2LDB4MDAsMHgxMSwweDgwLDB4MDQsMHgyMCwweDAxLDB4MTgsMHgwMCwweDY2LDB4MDAsMHgxMSwweDgwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZTY0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDEsMHg0MCwweDAwLDB4NjAsMHgwMCwweDk4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTY1MCwgMCwgezB4MjYsMHgwMCwweDA5LDB4ODAsMHgwMiwweDYwLDB4MDEsMHg5OCwweDAwLDB4MDYsMHgwMCwweDBjLDB4ODAsMHgwMiwweDYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTY2MCwgMCwgezB4MTgsMHgwMCwweDA2LDB4MDAsMHgwMSwweDgwLDB4MDIsMHg2MCwweDAwLDB4OTgsMHg4MCwweDA2LDB4MDAsMHgwMSwweDgyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0MiwweDAwLDB4MzAsMHg4MSwweDBjLDB4MjAgfSB9LAoreyAgMTYsIDB4ZTY4MCwgMCwgezB4NDMsMHgwOCwweDEwLDB4YzIsMHgyNCwweDMwLDB4ODEsMHg4YywweDIwLDB4MDMsMHgwOCwweDEwLDB4YzIsMHgwNCwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTY5MCwgMCwgezB4MGMsMHgyMCwweDAzLDB4MDgsMHgxOCwweGMyLDB4MDQsMHgzMCwweDgxLDB4MGMsMHgyMCwweDQzLDB4MDgsMHgxOCwweGMwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZTZhMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDBjLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTZiMCwgMCwgezB4MDMsMHgwMCwweDAwLDB4YzAsMHg0MCwweDMwLDB4MDAsMHgwYywweDAwLDB4MDMsMHgwMCwweDAwLDB4ODAsMHgwMCwweDMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTZjMCwgMCwgezB4MGMsMHgwMCwweDAzLDB4MjAsMHgwMCwweGMwLDB4MDAsMHgzMCwweDAwLDB4MGMsMHgwMCwweDAzLDB4MjAsMHgwMCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTZkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHgwMiwweDEwLDB4MzAsMHg4MCwweDBjLDB4MjAgfSB9LAoreyAgMTYsIDB4ZTZlMCwgMCwgezB4MDMsMHgwOCwweDAwLDB4YzIsMHgwMCwweDMwLDB4ODAsMHgwYywweDIwLDB4MDMsMHgwOCwweDAwLDB4YzIsMHgwMSwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTZmMCwgMCwgezB4MGMsMHgyMCwweDAzLDB4MmMsMHgwMCwweGMyLDB4MDAsMHgzMCwweDgwLDB4MGMsMHgzMCwweDQzLDB4MmMsMHgwMCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTcwMCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0MiwweDA0LDB4NjAsMHg4MSwweDE4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZTcxMCwgMCwgezB4NDYsMHgwOCwweDExLDB4ODIsMHgwNCwweDYwLDB4ODAsMHgxOCwweDIwLDB4NDYsMHgwOCwweDExLDB4ODIsMHgwNCwweDYwLDB4ODEgfSB9LAoreyAgMTYsIDB4ZTcyMCwgMCwgezB4MTgsMHgyMCwweDQ2LDB4MGMsMHgxMSwweGMyLDB4MDQsMHg2MCwweDgxLDB4MTgsMHgzMCwweDQ2LDB4MGMsMHgxMSwweGMwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZTczMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHg0MiwweDAwLDB4MjAsMHg4MCwweDA4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZTc0MCwgMCwgezB4MDIsMHgyOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwOCwweDIwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTc1MCwgMCwgezB4MDgsMHgyMCwweDAyLDB4MDgsMHgwMSwweDgyLDB4MDAsMHgyMCwweDgwLDB4MDgsMHgyMCwweDAzLDB4MDgsMHgwMSwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTc2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4MDEsMHg0MiwweDA0LDB4NjAsMHg4MSwweDE4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZTc3MCwgMCwgezB4NDYsMHgyOCwweDExLDB4ODIsMHgwNCwweDYwLDB4ODAsMHgxOCwweDIwLDB4NDYsMHgwOCwweDExLDB4ODIsMHgwNCwweDYwLDB4ODEgfSB9LAoreyAgMTYsIDB4ZTc4MCwgMCwgezB4MTgsMHgyMCwweDQ2LDB4MDgsMHgxMCwweDgyLDB4MDQsMHg2MCwweDgxLDB4MTgsMHgyMCwweDQzLDB4MDgsMHgxMCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTc5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0MCwweDA0LDB4NTAsMHgwMSwweDE0LDB4MDAgfSB9LAoreyAgMTYsIDB4ZTdhMCwgMCwgezB4NDUsMHgwMCwweDExLDB4NDAsMHgyNSwweDAwLDB4MDAsMHgxNCwweDAwLDB4NDUsMHgwMCwweDExLDB4NDAsMHgwNCwweDUwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTdiMCwgMCwgezB4MTQsMHgwMCwweDQ1LDB4MDAsMHgwMCwweDQwLDB4MDQsMHg1MCwweDAxLDB4NDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDQyLDB4MTEgfSB9LAoreyAgMTYsIDB4ZTdjMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHgwNiwweDAwLDB4NDEsMHg4MCwweDEwLDB4NjAgfSB9LAoreyAgMTYsIDB4ZTdkMCwgMCwgezB4MDQsMHgxOCwweDAxLDB4MDYsMHgwMCwweDQxLDB4ODAsMHgxMCwweDYwLDB4MDQsMHgxOCwweDAxLDB4MDYsMHgwMCwweDQxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTdlMCwgMCwgezB4MTAsMHg2MCwweDA0LDB4MTgsMHgwMSwweDA2LDB4MDAsMHg0MSwweDgwLDB4MTAsMHg2MCwweDA0LDB4MTgsMHgwMSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTdmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHgwMiwweDA1LDB4MDAsMHg4MCwweDQwLDB4MjEgfSB9LAoreyAgMTYsIDB4ZTgwMCwgMCwgezB4MTAsMHgwOCwweDA0LDB4MDAsMHgwMSwweDAwLDB4ODAsMHg0MCwweDIwLDB4MTAsMHgwOCwweDA0LDB4MDIsMHgwMSwweDAwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTgxMCwgMCwgezB4NDAsMHgyMCwweDUwLDB4MDgsMHgxNCwweDAyLDB4MTEsMHgwMCwweDg0LDB4NDAsMHgyMCwweDEwLDB4MDgsMHgxNCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTgyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0NiwweDAxLDB4NTEsMHg4MCwweGQ0LDB4NjAgfSB9LAoreyAgMTYsIDB4ZTgzMCwgMCwgezB4MzUsMHgxOCwweDBkLDB4NDYsMHgwMywweDUxLDB4ODAsMHhkNCwweDYwLDB4MTUsMHgxOCwweDBkLDB4NDYsMHgwMywweDUxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTg0MCwgMCwgezB4NTQsMHg2MCwweDE1LDB4MTgsMHgwZCwweDQ2LDB4MDMsMHg1MSwweDgwLDB4ZDQsMHg2MCwweDM1LDB4MTgsMHgwZCwweDQwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZTg1MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHg0NiwweDA0LDB4NzEsMHg4MSwweDFjLDB4NjAgfSB9LAoreyAgMTYsIDB4ZTg2MCwgMCwgezB4NDUsMHgxOCwweDExLDB4ZDYsMHgwNCwweDcxLDB4ODEsMHgxYywweDYwLDB4NjcsMHgxOCwweDExLDB4YzYsMHgwNCwweDcxLDB4ODEgfSB9LAoreyAgMTYsIDB4ZTg3MCwgMCwgezB4OWMsMHg2MCwweDQ3LDB4MTgsMHgxMSwweGM2LDB4MDQsMHg3MSwweDgxLDB4MWMsMHg2MCwweDY3LDB4MTgsMHgxMSwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTg4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHg0NiwweDAyLDB4NzEsMHg4MCwweDljLDB4NjAgfSB9LAoreyAgMTYsIDB4ZTg5MCwgMCwgezB4MjcsMHgxOCwweDA5LDB4YzYsMHgwMCwweDcxLDB4ODAsMHg5YywweDYwLDB4NjcsMHgxOCwweDA5LDB4YzYsMHgwMiwweDcxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZThhMCwgMCwgezB4OWMsMHg2MSwweDI3LDB4MTgsMHgwMSwweGM2LDB4MDIsMHg3MSwweDgwLDB4OWMsMHg2MCwweDA3LDB4MTgsMHgwMSwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZThiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4NDUsMHg0NiwweDA1LDB4NzEsMHg4MSwweDVjLDB4NjAgfSB9LAoreyAgMTYsIDB4ZThjMCwgMCwgezB4NTcsMHgxOCwweDU1LDB4ZDYsMHgwMSwweDcxLDB4ODEsMHg1YywweDYwLDB4NTcsMHgxOCwweDE1LDB4YzYsMHgwNSwweDcxLDB4ODEgfSB9LAoreyAgMTYsIDB4ZThkMCwgMCwgezB4NWMsMHg2MCwweDU3LDB4MTgsMHgxOCwweGM2LDB4MDUsMHg3MSwweDgxLDB4NWMsMHg2MCwweDQzLDB4MTgsMHgxOCwweDgyLDB4MTEgfSB9LAoreyAgMTYsIDB4ZThlMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDQsMHg1MiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZThmMCwgMCwgezB4MTIsMHg0OCwweDA0LDB4OTAsMHgwMSwweDIwLDB4ODAsMHg0OSwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDI0LDB4ODAgfSB9LAoreyAgMTYsIDB4ZTkwMCwgMCwgezB4NDgsMHgyMCwweDEyLDB4NDgsMHgwMCwweDkyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyMCwweDE3LDB4NDgsMHgwNCwweDgwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTkxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgwNiwweDAwLDB4NjEsMHg4MCwweDE4LDB4NjAgfSB9LAoreyAgMTYsIDB4ZTkyMCwgMCwgezB4MDYsMHgzYywweDAxLDB4ODYsMHgwMCwweDYxLDB4ODAsMHgxOCwweDYwLDB4NDYsMHgxOCwweDAxLDB4ODYsMHgwMCwweDYxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZTkzMCwgMCwgezB4MTgsMHg2MCwweDA2LDB4MTgsMHgwMSwweDg2LDB4MDAsMHg2MSwweDgwLDB4MTgsMHg2MCwweDQ2LDB4MTgsMHgwMSwweDgwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZTk0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDEsMHg2MCwweDA0LDB4NzgsMHgwMSwweDFlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTk1MCwgMCwgezB4NDcsMHg4MCwweDExLDB4ZTAsMHgyNCwweDc4LDB4MDEsMHgxZSwweDAwLDB4MDcsMHg4MCwweDExLDB4ZTAsMHgwNCwweDc4LDB4MDEgfSB9LAoreyAgMTYsIDB4ZTk2MCwgMCwgezB4MWUsMHgwMCwweDQ3LDB4ODAsMHgxMSwweGUwLDB4MDQsMHgzOCwweDAxLDB4MWUsMHgwMCwweDQ3LDB4ODAsMHgxMSwweGMwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZTk3MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHgxMiwweDAwLDB4NjAsMHg4MCwweDE4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZTk4MCwgMCwgezB4MDYsMHg0OCwweDAxLDB4OTIsMHgwMCwweDYwLDB4ODAsMHgxOSwweDIwLDB4MDYsMHgwOCwweDAxLDB4ODIsMHgwMCwweDY0LDB4ODAgfSB9LAoreyAgMTYsIDB4ZTk5MCwgMCwgezB4MTgsMHgyMCwweDA2LDB4NDgsMHgwMSwweDkzLDB4MDAsMHgyMCwweDgwLDB4MTgsMHgyMCwweDA2LDB4NDgsMHgwMSwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTlhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHg0MiwweDA0LDB4MjAsMHg4MSwweDA4LDB4MjAgfSB9LAoreyAgMTYsIDB4ZTliMCwgMCwgezB4NDIsMHgwOCwweDEwLDB4ODIsMHgwNCwweDIwLDB4ODEsMHgwOCwweDIwLDB4MDIsMHgwOCwweDEwLDB4ODIsMHgwNCwweDIwLDB4ODEgfSB9LAoreyAgMTYsIDB4ZTljMCwgMCwgezB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMCwweDhhLDB4MDQsMHg2MCwweDgxLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZTlkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0MiwweDA0LDB4NDAsMHg4MSwweDEwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZTllMCwgMCwgezB4NDQsMHgwOCwweDExLDB4MDIsMHgwNCwweDQwLDB4ODEsMHgxMCwweDIwLDB4MDQsMHgwOCwweDExLDB4MDIsMHgwNCwweDQwLDB4ODEgfSB9LAoreyAgMTYsIDB4ZTlmMCwgMCwgezB4MTAsMHgyMSwweDQ0LDB4MDgsMHgwMSwweDAyLDB4MDQsMHg1MCwweDgxLDB4MTAsMHgyMCwweDA0LDB4MDgsMHgwMSwweDAwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZWEwMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgwMywweDAwLDB4NTAsMHhjMCwweDE0LDB4MzAgfSB9LAoreyAgMTYsIDB4ZWExMCwgMCwgezB4MDUsMHgwYywweDAxLDB4NDMsMHgwMCwweDUwLDB4YzAsMHgxNCwweDMwLDB4MDUsMHgwYywweDAxLDB4NDMsMHgwMCwweDUwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZWEyMCwgMCwgezB4MTQsMHgzMCwweDA1LDB4MDgsMHgwMSwweDRhLDB4MDAsMHg1MCwweGMwLDB4MTQsMHgzMCwweDA1LDB4MDgsMHgwMSwweDQwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgwOCwweDAwLDB4NDIsMHgwMCwweDEwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZWE0MCwgMCwgezB4MDQsMHgyMCwweDAxLDB4MDgsMHgwMCwweDQyLDB4MDAsMHgxMCwweDgwLDB4MDQsMHgyMCwweDAxLDB4MDgsMHgwMCwweDQyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWE1MCwgMCwgezB4MTAsMHg4MCwweDA0LDB4MjAsMHgxMSwweDAwLDB4MDAsMHg0MiwweDAwLDB4MTAsMHg4MCwweDA0LDB4MjAsMHgxMSwweDAwLDB4MTAgfSB9LAoreyAgMTYsIDB4ZWE2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0MiwweDAyLDB4MDAsMHg4MCwweDgwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZWE3MCwgMCwgezB4MjAsMHgwOCwweDA4LDB4MDIsMHgwMCwweDAwLDB4ODAsMHg4MCwweDIwLDB4MjAsMHgwOCwweDA4LDB4MDIsMHgwMiwweDAwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZWE4MCwgMCwgezB4ODAsMHgyMCwweDIwLDB4MDgsMHgwOCwweDAyLDB4MDIsMHgwMCwweDgwLDB4ODAsMHgyMCwweDIwLDB4MDgsMHgwOCwweDAwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZWE5MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHg0MCwweDAwLDB4NjAsMHgwMSwweDE4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWFhMCwgMCwgezB4NDYsMHgwMCwweDExLDB4ODAsMHgwNiwweDYwLDB4MDEsMHgxOCwweDAwLDB4NDYsMHgwMCwweDExLDB4ODAsMHgwNCwweDYwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZWFiMCwgMCwgezB4MTgsMHgwMCwweDQ2LDB4MDAsMHgxMSwweDgwLDB4MDQsMHg2MCwweDAxLDB4MTgsMHgwMCwweDY2LDB4MDAsMHgxMSwweDgwLDB4MTAgfSB9LAoreyAgMTYsIDB4ZWFjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHg0MCwweDAyLDB4NjQsMHgwMCwweDk4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWFkMCwgMCwgezB4MjYsMHgwMCwweDA5LDB4OTAsMHgwNiwweDYwLDB4MDEsMHg5OCwweDAwLDB4MjYsMHg0MCwweDA5LDB4ODAsMHgwMiwweDYwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWFlMCwgMCwgezB4OTgsMHgwMCwweDI2LDB4MDAsMHgwMCwweDkwLDB4MDIsMHg2MCwweDAwLDB4OTgsMHgwMCwweDA3LDB4MDAsMHgwMSwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg2MCwweDA0LDB4MzgsMHgwNSwweDBlLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWIwMCwgMCwgezB4NDMsMHg4MCwweDEwLDB4ZTAsMHg0NCwweDM4LDB4MDEsMHgwZSwweDAwLDB4NDMsMHg4MCwweDEwLDB4ZTAsMHgwNCwweDM4LDB4MDEgfSB9LAoreyAgMTYsIDB4ZWIxMCwgMCwgezB4MGUsMHgwMCwweDQzLDB4ODAsMHgxOCwweGEwLDB4MDQsMHgzOCwweDAxLDB4MGUsMHgwMCwweDQ2LDB4ODAsMHgxOCwweDgwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZWIyMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4MDAsMHgwMSwweDAwLDB4MzAsMHg0MCwweDBjLDB4MTAgfSB9LAoreyAgMTYsIDB4ZWIzMCwgMCwgezB4MDMsMHgwNCwweDAwLDB4YzUsMHgwMCwweDMwLDB4NDAsMHgwYywweDEwLDB4MDMsMHgxNCwweDAwLDB4YzEsMHgwMCwweDMwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWI0MCwgMCwgezB4MGMsMHgxMCwweDAzLDB4MDQsMHgwMCwweDg3LDB4NDAsMHgzMCwweDQwLDB4MGMsMHgxMCwweDAyLDB4MDQsMHgwMCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWI1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDQsMHgwNSwweDAwLDB4MzUsMHg0MCwweDBjLDB4NTAgfSB9LAoreyAgMTYsIDB4ZWI2MCwgMCwgezB4MDMsMHgxNCwweDAwLDB4ZDUsMHgwNCwweDMxLDB4NDEsMHgwYywweDUwLDB4MDMsMHg1YywweDAwLDB4YzUsMHgwMCwweDMxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWI3MCwgMCwgezB4MGMsMHg1MCwweDAzLDB4MTAsMHgwMCwweDk0LDB4MDAsMHgzMSwweDQwLDB4MGMsMHg1MCwweDQzLDB4MTAsMHgwMCwweGMyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWI4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0MywweDA1LDB4MjAsMHhjMSwweDE4LDB4MzAgfSB9LAoreyAgMTYsIDB4ZWI5MCwgMCwgezB4NDYsMHgwYywweDExLDB4OTcsMHgwMCwweDYwLDB4YzAsMHgxOCwweDMwLDB4NDYsMHgxYywweDExLDB4ODMsMHgwNCwweDYwLDB4YzEgfSB9LAoreyAgMTYsIDB4ZWJhMCwgMCwgezB4MTgsMHgzMCwweDUyLDB4MGMsMHgxMSwweDg3LDB4MDQsMHg2MCwweGMxLDB4MTgsMHgzMCwweDQ2LDB4MGMsMHgxMSwweDgwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZWJiMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHgwMCwweDAwLDB4MjEsMHg0MCwweDA4LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWJjMCwgMCwgezB4MDIsMHgwMCwweDAwLDB4ODAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwMCwweDAwLDB4ODAsMHgwMCwweDIwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWJkMCwgMCwgezB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgyMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHg0OCwweDQ0LDB4MjIsMHgwMSwweDE4LDB4ODQgfSB9LAoreyAgMTYsIDB4ZWJmMCwgMCwgezB4NDYsMHgyMSwweDExLDB4OTgsMHgwMCwweDYyLDB4MTAsMHgxOCwweDg0LDB4NDQsMHgyMCwweDExLDB4ODgsMHg0NCwweDYyLDB4MTEgfSB9LAoreyAgMTYsIDB4ZWMwMCwgMCwgezB4MTgsMHg4NCwweDQyLDB4MjEsMHgxMSwweDgwLDB4NDQsMHg2MiwweDExLDB4MTgsMHg4NCwweDQ2LDB4MjEsMHgxMSwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWMxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0MCwweDA0LDB4NTAsMHgxMSwweDE0LDB4MDQgfSB9LAoreyAgMTYsIDB4ZWMyMCwgMCwgezB4NDUsMHgwMCwweDExLDB4NDEsMHgwMCwweDUwLDB4MTAsMHgxNCwweDAwLDB4NDUsMHgwMSwweDExLDB4NDAsMHg0NCwweDUwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZWMzMCwgMCwgezB4MTQsMHgwNCwweDQ1LDB4MDEsMHgwMSwweDQwLDB4NDQsMHg1MCwweDExLDB4MTQsMHgwNCwweDA1LDB4MDEsMHgwMSwweDQwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZWM0MCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgwOCwweDIwLDB4NDIsMHgwOCwweDEwLDB4ODIgfSB9LAoreyAgMTYsIDB4ZWM1MCwgMCwgezB4MDQsMHgyMCwweDAxLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMCwweDgyLDB4MDQsMHgyMCwweDgxLDB4MDgsMHgyMCwweDQyLDB4MDggfSB9LAoreyAgMTYsIDB4ZWM2MCwgMCwgezB4MTAsMHg4MiwweDA0LDB4MjIsMHg4MSwweDA4LDB4MjAsMHg1MiwweDA4LDB4MTAsMHg4YSwweDA0LDB4MjIsMHg4MSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwYSwweDAxLDB4MDIsMHg4NCwweDQwLDB4YTEgfSB9LAoreyAgMTYsIDB4ZWM4MCwgMCwgezB4MTAsMHgyOCwweDAwLDB4MGEsMHgwMSwweDAyLDB4ODAsMHg0MCwweGEwLDB4MTAsMHgyOCwweDA0LDB4MGEsMHgwMSwweDAyLDB4ODAgfSB9LAoreyAgMTYsIDB4ZWM5MCwgMCwgezB4NDAsMHhhMCwweDEwLDB4MmMsMHgxNCwweDBhLDB4MDAsMHgwMiwweDgwLDB4NDAsMHhiMCwweDEwLDB4MmMsMHgxNCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWNhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0ZCwweDAzLDB4NTMsMHg0MCwweGQ0LDB4ZDAgfSB9LAoreyAgMTYsIDB4ZWNiMCwgMCwgezB4MzUsMHgzMCwweDBjLDB4NGQsMHgwMywweDUzLDB4NDAsMHhkNCwweGQwLDB4MzUsMHgzNCwweDBkLDB4NGQsMHgwMywweDUzLDB4NDAgfSB9LAoreyAgMTYsIDB4ZWNjMCwgMCwgezB4ZDQsMHhkMCwweDM1LDB4MzQsMHgwZCwweDRkLDB4MDIsMHgxMywweDQwLDB4ZDQsMHhkMCwweDM1LDB4MzQsMHgwZCwweDQwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZWNkMCwgMCwgezB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHgwOCwweDA0LDB4NzIsMHgwMSwweDFjLDB4ODAgfSB9LAoreyAgMTYsIDB4ZWNlMCwgMCwgezB4NDcsMHgyMCwweDE1LDB4YzgsMHgwNCwweDcyLDB4MDEsMHgxYywweDgwLDB4NDcsMHgyMCwweDExLDB4YzgsMHgwNCwweDcyLDB4MTEgfSB9LAoreyAgMTYsIDB4ZWNmMCwgMCwgezB4MWMsMHg4MCwweDQ3LDB4MjYsMHgxMSwweGM4LDB4NDQsMHg3MiwweDAxLDB4MWMsMHg5MCwweDY3LDB4MjYsMHgxMSwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMywweDA4LDB4NDAsMHhjNiwweDEyLDB4MzEgfSB9LAoreyAgMTYsIDB4ZWQxMCwgMCwgezB4ODQsMHg4YywweDAxLDB4MDMsMHgwOCwweDQ4LDB4YzYsMHgxMiwweDMwLDB4ODQsMHgwYywweDYxLDB4MjMsMHgxOCwweDQ4LDB4YzIgfSB9LAoreyAgMTYsIDB4ZWQyMCwgMCwgezB4MTIsMHgzMSwweDg0LDB4OGMsMHgwMSwweDAzLDB4MDgsMHg0OCwweGM2LDB4MTIsMHgzMSwweDA0LDB4OGMsMHgwMSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWQzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZWQ0MCwgMCwgezB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMywweGZmLDB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZWQ1MCwgMCwgezB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWQ4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWQ5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZCwweGZiLDB4MGYsMHhiNiwweGMyLDB4Y2QgfSB9LAoreyAgMTYsIDB4ZWRhMCwgMCwgezB4YjAsMHhiNywweGZkLDB4M2YsMHhmYiwweDBiLDB4MzYsMHhjMiwweGRmLDB4YjAsMHhmYiwweDZjLDB4MmMsMHhkYiwweDBiLDB4N2UgfSB9LAoreyAgMTYsIDB4ZWRiMCwgMCwgezB4YzIsMHhjZCwweGIwLDB4YjcsMHhmZCwweDNmLDB4ZmIsMHgwYiwweDM2LDB4YzIsMHhjZCwweGY0LDB4YjcsMHhmZCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWRjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMywweGZjLDB4NGYsMHhjZiwweDEzLDB4MzMgfSB9LAoreyAgMTYsIDB4ZWRkMCwgMCwgezB4YzQsMHhjZiwweGZkLDB4M2YsMHhmYywweDRjLDB4Y2YsMHgxMywweDNmLDB4YzQsMHhmYywweGYxLDB4MzMsMHgzYywweDRjLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZWRlMCwgMCwgezB4MTMsMHgzMywweGM0LDB4Y2YsMHhmZCwweDNmLDB4ZmMsMHg0YywweGNmLDB4MTMsMHgzMywweGY0LDB4Y2YsMHhmZCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWRmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYiwweDdlLDB4NGUsMHhkZiwweDkzLDB4YjcgfSB9LAoreyAgMTYsIDB4ZWUwMCwgMCwgezB4ZTQsMHhlZCwweGY5LDB4M2YsMHhmZSwweDRlLDB4ZGYsMHg5MywweGI3LDB4ZTQsMHhlZCwweGY5LDB4M2IsMHg3ZSwweDRlLDB4YzcgfSB9LAoreyAgMTYsIDB4ZWUxMCwgMCwgezB4OTMsMHhiNywweGU0LDB4ZWMsMHg2MSwweDIzLDB4MWUsMHg0ZSwweGRmLDB4OTMsMHhiNywweDg0LDB4ZWMsMHg2MSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWUyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4MjQsMHhhMSwweDRhLDB4MjQgfSB9LAoreyAgMTYsIDB4ZWUzMCwgMCwgezB4NjMsMHgwMSwweDE0LDB4MDIsMHg0NCwweDAwLDB4ODEsMHgwYiwweDI4LDB4NzEsMHgwMiwweDEwLDB4ODIsMHg0MCwweDM4LDB4MTEgfSB9LAoreyAgMTYsIDB4ZWU0MCwgMCwgezB4NDEsMHgwNCwweDUwLDB4MDgsMHgxOCwweDgyLDB4ODcsMHgzOCwweDMxLDB4YzMsMHgyYywweDUyLDB4MGEsMHgxMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWU1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDQ1LDB4MTIsMHg4MSwweDQ0LDB4ODAgfSB9LAoreyAgMTYsIDB4ZWU2MCwgMCwgezB4NzEsMHgyMSwweDFjLDB4MGEsMHgwNywweDFhLDB4ODEsMHgwMiwweGEwLDB4NTIsMHgyMCwweDE0LDB4NDgsMHgwNywweDEyLDB4ODEgfSB9LAoreyAgMTYsIDB4ZWU3MCwgMCwgezB4YzYsMHg4MCwweDYwLDB4MjAsMHgwOCwweDg4LDB4NDcsMHgwMiwweDAxLDB4NGEsMHg4MCwweDcwLDB4MjAsMHgxMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweGM1LDB4MmMsMHgwMSwweDRhLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWU5MCwgMCwgezB4NTIsMHgwOSwweDFjLDB4ODAsMHgwNywweDI0LDB4MjEsMHgwOCwweDA4LDB4NzEsMHgwMiwweDEwLDB4ODAsMHg0NSwweDIwLDB4YTEgfSB9LAoreyAgMTYsIDB4ZWVhMCwgMCwgezB4NDksMHgyOCwweDUyLDB4MDEsMHgxNCwweGMwLDB4NDUsMHgwMCwweDkxLDB4YzQsMHgwMCwweDcyLDB4MDIsMHgxMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWViMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDA3LDB4MjAsMHgwMSwweGMxLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWVjMCwgMCwgezB4NzEsMHgwOSwweDEwLDB4ODAsMHgwNywweDAwLDB4MDEsMHgwMSwweDAwLDB4NzAsMHgwOCwweDE4LDB4ODAsMHgwNywweDAwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZWVkMCwgMCwgezB4ODksMHgyMCwweDUyLDB4MDEsMHgwYywweDgwLDB4NDYsMHgzMCwweDgxLDB4NDUsMHgwNCwweDYwLDB4MDAsMHgxMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWVlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweGMyLDB4MDIsMHgyMCwweDAwLDB4ODggfSB9LAoreyAgMTYsIDB4ZWVmMCwgMCwgezB4MjAsMHgyMiwweDAwLDB4MDgsMHhjMiwweDIyLDB4ODAsMHg0MCwweDg4LDB4MDIsMHgyMiwweDAwLDB4MDgsMHg4MiwweDBhLDB4YTAgfSB9LAoreyAgMTYsIDB4ZWYwMCwgMCwgezB4MGMsMHhhOCwweDAyLDB4MjIsMHgwMCwweDA4LDB4ODAsMHgwYSwweDAwLDB4ODAsMHg4YywweDAyLDB4MjIsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWYxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDQzLDB4MDAsMHgwMCwweDQwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZWYyMCwgMCwgezB4MzAsMHgwOCwweDA0LDB4NDAsMHg0MSwweDMwLDB4MTAsMHhjOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMywweDAwLDB4MTAgfSB9LAoreyAgMTYsIDB4ZWYzMCwgMCwgezB4YzAsMHgwMCwweDExLDB4MDgsMHgwMCwweGMyLDB4NDMsMHgxMCwweDgwLDB4YzAsMHgyMCwweDAxLDB4MDgsMHgwMCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWY0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwOCwweGMzLDB4MGEsMHgyMCwweGMxLDB4OGMgfSB9LAoreyAgMTYsIDB4ZWY1MCwgMCwgezB4MTIsMHgyMiwweDA0LDB4ODgsMHgwMSwweDM2LDB4MjAsMHhjMywweDA4LDB4MTIsMHgyOCwweDA0LDB4MDgsMHgwMSwweDA0LDB4MDAgfSB9LAoreyAgMTYsIDB4ZWY2MCwgMCwgezB4NGEsMHhhOCwweDIyLDB4MDEsMHgwNCwweGM4LDB4NDEsMHgyNiwweDMwLDB4YzAsMHg4OCwweDAyLDB4MjEsMHgwMCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwOCwweDAwLDB4MGEsMHgxMCwweGMxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZWY4MCwgMCwgezB4MzIsMHgyMSwweDBjLDB4ODgsMHg0MywweDAyLDB4ODAsMHg0NCwweDgwLDB4MTIsMHgyOSwweDA0LDB4MDgsMHg0MiwweDBhLDB4OTAgfSB9LAoreyAgMTYsIDB4ZWY5MCwgMCwgezB4OGEsMHg4MCwweDAwLDB4MjAsMHgwNCwweDQ4LDB4MDMsMHgwYSwweDEwLDB4ODIsMHg4MCwweDAwLDB4MjAsMHgwMCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWZhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYSwweDg3LDB4MDIsMHhhMSwweDgwLDB4YWMgfSB9LAoreyAgMTYsIDB4ZWZiMCwgMCwgezB4NDMsMHgyOSwweDE0LDB4OGEsMHg4NCwweDAyLDB4YTEsMHgwMCwweGFjLDB4NDEsMHgyMCwweDEwLDB4MDgsMHgwNiwweDI2LDB4MzEgfSB9LAoreyAgMTYsIDB4ZWZjMCwgMCwgezB4ODAsMHhhNCwweDYwLDB4MjAsMHgxNCwweDRhLDB4NDQsMHgzMiwweDgxLDB4ODEsMHhhYywweDYwLDB4MmEsMHgxOCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZWZkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwOCwweDA3LDB4MjIsMHgwMSwweGM1LDB4ODAgfSB9LAoreyAgMTYsIDB4ZWZlMCwgMCwgezB4NzMsMHgyMSwweDFjLDB4YzgsMHgwNywweDJhLDB4MDEsMHgwYywweDgwLDB4NzIsMHgyMCwweDEwLDB4NDgsMHg0NywweDI2LDB4MTEgfSB9LAoreyAgMTYsIDB4ZWZmMCwgMCwgezB4YzUsMHg4MCwweDczLDB4MjAsMHgxYywweDg4LDB4MDcsMHgyYSwweDExLDB4NDksMHg4MCwweDcwLDB4MjAsMHgxNCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjAwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDQ1LDB4MTAsMHgzMSwweGM5LDB4MGMgfSB9LAoreyAgMTYsIDB4ZjAxMCwgMCwgezB4NzMsMHgwMiwweDFjLDB4YzAsMHg0NywweDA0LDB4MDEsMHgwYSwweDBjLDB4NTEsMHgwYSwweDEwLDB4ODIsMHg0NywweDIwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZjAyMCwgMCwgezB4YzgsMHgwMCwweDcyLDB4MDIsMHgxYywweDQwLDB4MDUsMHgzMCwweDExLDB4YzQsMHgwMCwweDcyLDB4MDEsMHgxOCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjAzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHgxMCwweDA2LDB4MjQsMHgwMSwweDQ1LDB4MDQgfSB9LAoreyAgMTYsIDB4ZjA0MCwgMCwgezB4NTEsMHg4MSwweDE4LDB4OTAsMHg0NywweDE0LDB4MDEsMHgwNCwweDA0LDB4NzEsMHg4OCwweDEwLDB4MTIsMHgwNSwweDM0LDB4MDEgfSB9LAoreyAgMTYsIDB4ZjA1MCwgMCwgezB4NDQsMHgwNCwweDUxLDB4NDAsMHgxOCwweGQwLDB4MDcsMHgzOCwweDAxLDB4YzQsMHgwNCwweDUyLDB4MDEsMHgxNCwweGMyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjA2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg3LDB4MDAsMHgyMSwweDg5LDB4MGMgfSB9LAoreyAgMTYsIDB4ZjA3MCwgMCwgezB4NjAsMHgwMSwweDFjLDB4ZDAsMHg0NSwweDI0LDB4MDEsMHhjMSwweDBjLDB4NDIsMHgwMSwweDAwLDB4MDAsMHhjNSwweDIwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZjA4MCwgMCwgezB4NDEsMHgwOCwweDQwLDB4MDAsMHgxOCwweDgwLDB4NDUsMHgwMCwweDIxLDB4NDEsMHgwYywweDcwLDB4NDIsMHgxYywweGMyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjA5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAxLDB4MWMsMHg4MCwweGM0LDB4MjAgfSB9LAoreyAgMTYsIDB4ZjBhMCwgMCwgezB4MzEsMHgwOCwweDEwLDB4NDIsMHg0MiwweDA4LDB4ODAsMHhjNiwweDIwLDB4MzEsMHgwOSwweDAwLDB4MjAsMHgwMywweDFjLDB4OTAgfSB9LAoreyAgMTYsIDB4ZjBiMCwgMCwgezB4YzQsMHgyMCwweDAxLDB4NDksMHgwYywweDQyLDB4NDMsMHgxMCwweDgwLDB4NDQsMHgyMCwweDMxLDB4MDgsMHgxMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjBjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDgzLDB4MjAsMHgzMCwweDQ4LDB4MGMgfSB9LAoreyAgMTYsIDB4ZjBkMCwgMCwgezB4MzIsMHg0MCwweDEwLDB4OTAsMHg4MSwweDI0LDB4MjAsMHhjOCwweDA0LDB4MzIsMHg0MCwweDEwLDB4MjAsMHhjMywweDIwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjBlMCwgMCwgezB4YzgsMHgwMCwweDAyLDB4NGEsMHgwYywweGEwLDB4MDEsMHgyNCwweDEwLDB4YzgsMHgwOCwweDMyLDB4NDEsMHgxMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjBmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg5MCwweDAzLDB4MDAsMHgwMCwweGM5LDB4MDQgfSB9LAoreyAgMTYsIDB4ZjEwMCwgMCwgezB4MzAsMHg0MCwweDAwLDB4OTAsMHgwMCwweDIwLDB4MDAsMHg4MCwweDAwLDB4MTAsMHg0MCwweDEwLDB4MDAsMHg0MCwweDIwLDB4MTAgfSB9LAoreyAgMTYsIDB4ZjExMCwgMCwgezB4YzIsMHgwMCwweDAwLDB4ODAsMHgwOCwweDIwLDB4NDMsMHgwOCwweDEwLDB4ODEsMHgwMCwweDMyLDB4NDAsMHgwYywweGMwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjEyMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjEzMCwgMCwgezB4MTAsMHgwMCwweDAwLDB4ZjAsMHgxMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMCwweDAwLDB4ZjAsMHgxMCwweDgwLDB4NDAgfSB9LAoreyAgMTYsIDB4ZjE0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweGYwLDB4MTAsMHg5MCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjE1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNjLDB4M2MsMHgxMCwweDgwLDB4OTAsMHg0MCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjE2MCwgMCwgezB4MDAsMHg4MCwweDEwLDB4OTAsMHhhMCwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4OTAsMHg4MCwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDkwLDB4ODAsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgxMCwweDhmLDB4MGYgfSB9LAoreyAgMTYsIDB4ZjE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweGM2LDB4YmEsMHgwNiwweGMwLDB4MWMgfSB9LAoreyAgMTYsIDB4ZjE5MCwgMCwgezB4NDksMHgyOCwweDYxLDB4MTQsMHgyYiwweDFjLDB4MGUsMHg0MCwweDNmLDB4ZDksMHhiZiwweGQ5LDB4YWEsMHhiYywweDFhLDB4NWYgfSB9LAoreyAgMTYsIDB4ZjFhMCwgMCwgezB4MDAsMHgxMCwweGE2LDB4NTAsMHgzYiwweDYxLDB4YjMsMHgyNSwweGJjLDB4NDAsMHgxOSwweGJmLDB4ZmYsMHhlOSwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjFiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDkyLDB4MTQsMHg5NCwweDgwLDB4MGMgfSB9LAoreyAgMTYsIDB4ZjFjMCwgMCwgezB4MDcsMHgzZiwweDJiLDB4OTQsMHg4NiwweDE0LDB4ODQsMHg4MCwweDI4LDB4MDAsMHgwMCwweDQ5LDB4MTQsMHgwNCwweDg2LDB4MTIgfSB9LAoreyAgMTYsIDB4ZjFkMCwgMCwgezB4ODAsMHgwMCwweDQxLDB4MjcsMHgzNCwweGQwLDB4OTAsMHg4NCwweDkyLDB4MDAsMHgyZCwweDhhLDB4MjEsMHgxZSwweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjFlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4YTIgfSB9LAoreyAgMTYsIDB4ZjFmMCwgMCwgezB4YjEsMHgwMSwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDg0LDB4YjEsMHg3OCwweDI4LDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjIwMCwgMCwgezB4MDgsMHhiMSwweDMyLDB4MTQsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHhhOCwweDIzLDB4NTQsMHgyMSwweDQwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjIxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjIyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MmYsMHhmZiwweGZlLDB4ZjcsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmYsMHhkNywweGZlLDB4ZWYgfSB9LAoreyAgMTYsIDB4ZjIzMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHg3ZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjI0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjI1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MGYsMHhlZiwweDc3LDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2UsMHhmZiwweGZlLDB4ZWYgfSB9LAoreyAgMTYsIDB4ZjI2MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhiZiwweGZmLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjI3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjI4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGRmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZjI5MCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4N2YsMHgyZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjJhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjJiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MWYsMHhmZiwweGZmLDB4ZWYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MWYsMHhlZiwweGVmLDB4ZWYgfSB9LAoreyAgMTYsIDB4ZjJjMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjJkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGVmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmYsMHhhZiwweGRmLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZjJmMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZWYsMHhmZiwweGY3LDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjMwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjMxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2YsMHhkZiwweGRmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZjMyMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDFmLDB4ZmYsMHhkZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjMzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweGM0LDB4MjQsMHhhMSwweDAwLDB4MmMgfSB9LAoreyAgMTYsIDB4ZjM0MCwgMCwgezB4NTIsMHgwYiwweDE4LDB4YzIsMHg4NiwweDJjLDB4YTEsMHg4MCwweDM4LDB4NjIsMHgwYSwweDA4LDB4NDAsMHhjNCwweDJjLDB4YTEgfSB9LAoreyAgMTYsIDB4ZjM1MCwgMCwgezB4MDgsMHgyOCwweDQyLDB4MGIsMHgxNCwweDAwLDB4ODUsMHgxNCwweGExLDB4MDgsMHgyOCwweDQzLDB4MGEsMHgxMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MTIsMHgwMSwweDAzLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjM3MCwgMCwgezB4NjEsMHgyMCwweDEwLDB4MDgsMHgwNywweDEyLDB4NDEsMHg0MiwweDgwLDB4NzAsMHgyMCwweDFjLDB4MDgsMHgwNCwweDFhLDB4MDEgfSB9LAoreyAgMTYsIDB4ZjM4MCwgMCwgezB4ODQsMHg4MSwweDQwLDB4MjAsMHgxOCwweDA4LDB4NDYsMHgzNiwweDgxLDB4MDUsMHg4MCwweDYzLDB4MjAsMHgxMCwweDAwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZjM5MCwgMCwgezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg0LDB4MjQsMHgyMSwweDAwLDB4MGMgfSB9LAoreyAgMTYsIDB4ZjNhMCwgMCwgezB4NTIsMHgwMiwweDE0LDB4MDAsMHg4NywweDI4LDB4MjEsMHg4MSwweDA4LDB4NzIsMHgwNiwweDFjLDB4ODIsMHg4NCwweDIwLDB4MjEgfSB9LAoreyAgMTYsIDB4ZjNiMCwgMCwgezB4NDgsMHgxOCwweDQyLDB4MDMsMHg1NCwweDgwLDB4NDUsMHgzMCwweDI1LDB4NGEsMHgxOCwweDUzLDB4MDIsMHgxMCwweDAwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZjNjMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MjIsMHgwMSwweDAxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjNkMCwgMCwgezB4NDIsMHgyMCwweDE4LDB4YzgsMHg0NCwweDIyLDB4MDEsMHg4MCwweDg0LDB4NDIsMHgyMCwweDFjLDB4ODgsMHgwNCwweDIyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZjNlMCwgMCwgezB4MDAsMHg4MCwweDQwLDB4MjAsMHgxMCwweDg4LDB4NDQsMHgzNiwweDAxLDB4NDAsMHg4MCwweDQxLDB4MDAsMHgxMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDgsMHgyMCwweDAwLDB4MGMgfSB9LAoreyAgMTYsIDB4ZjQwMCwgMCwgezB4MjIsMHgwMywweDA0LDB4NDAsMHg4MSwweDAwLDB4MjAsMHg4NCwweDA4LDB4MDMsMHgwMCwweDAwLDB4ODAsMHhjMiwweDAwLDB4MjAgfSB9LAoreyAgMTYsIDB4ZjQxMCwgMCwgezB4YzQsMHgwOCwweDAwLDB4MDMsMHgwOCwweDg4LDB4ODIsMHgxNiwweGEwLDB4NDAsMHg4OCwweDMyLDB4MjIsMHg4MCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjQyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAxLDB4MDAsMHg4MCwweDA0LDB4MjAgfSB9LAoreyAgMTYsIDB4ZjQzMCwgMCwgezB4MTAsMHgwOCwweDBjLDB4YzIsMHgxMiwweDEwLDB4ODQsMHhjOCwweDIyLDB4MTIsMHgwOCwweDA0LDB4MDIsMHgwMywweDAwLDB4ODggfSB9LAoreyAgMTYsIDB4ZjQ0MCwgMCwgezB4MDAsMHgyMSwweDAwLDB4MGMsMHgwYywweDQwLDB4NDEsMHgzMCwweDAwLDB4ODQsMHgyMCwweDEwLDB4MDgsMHgwMCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjQ1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwOCwweDgyLDB4MDYsMHgyMCwweDA4LDB4OGMgfSB9LAoreyAgMTYsIDB4ZjQ2MCwgMCwgezB4MzIsMHgyMiwweDBjLDB4ODgsMHg4MSwweDI2LDB4MjAsMHg0ZCwweDg4LDB4MjMsMHgyMiwweDgwLDB4ODgsMHg4MywweDA2LDB4MjAgfSB9LAoreyAgMTYsIDB4ZjQ3MCwgMCwgezB4MDgsMHg4OCwweDAwLDB4MjMsMHgwNCwweDhhLDB4ODEsMHgzNiwweDIwLDB4NGIsMHg4OCwweDMyLDB4MjIsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjQ4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwOCwweDAyLDB4MDIsMHgwMCwweDA5LDB4ODAgfSB9LAoreyAgMTYsIDB4ZjQ5MCwgMCwgezB4MzIsMHgyMCwweDA0LDB4ODgsMHg2MCwweDIyLDB4MDAsMHg4OSwweDg0LDB4MDAsMHgyMCwweDA4LDB4OTgsMHgwMCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjRhMCwgMCwgezB4MDAsMHg4MCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MDIsMHgzYSwweDgwLDB4NDgsMHg4MCwweDMwLDB4MjAsMHgwMCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjRiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwYSwweGM0LDB4MWEsMHhhMSwweDgwLDB4YTggfSB9LAoreyAgMTYsIDB4ZjRjMCwgMCwgezB4NDEsMHgyYSwweDEwLDB4Y2EsMHhjNywweDFhLDB4YTEsMHgwNCwweGFkLDB4NzEsMHgyYSwweDE4LDB4NGEsMHhkNCwweDA2LDB4YjEgfSB9LAoreyAgMTYsIDB4ZjRkMCwgMCwgezB4MDAsMHhhOCwweDcxLDB4MmEsMHgxMCwweDA4LDB4ODQsMHgyNiwweDI5LDB4MDYsMHhhYywweDUyLDB4MmEsMHgxMCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjRlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwOCwweDA0LDB4MmEsMHgwMSwweDQxLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjRmMCwgMCwgezB4NDIsMHgyMCwweDFjLDB4MDAsMHgwNCwweDBhLDB4MDEsMHgwOSwweDg0LDB4NTEsMHgyMCwweDFjLDB4ODgsMHg0NCwweDAyLDB4MDEgfSB9LAoreyAgMTYsIDB4ZjUwMCwgMCwgezB4MDgsMHg4MCwweDQwLDB4MjAsMHgxMCwweDRhLDB4NDcsMHgwMiwweDAxLDB4NDgsMHg4MCwweDYzLDB4MjAsMHgxMCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjUxMCwgMCwgezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMCwweGM0LDB4MTAsMHgyMSwweDgxLDB4MGMgfSB9LAoreyAgMTYsIDB4ZjUyMCwgMCwgezB4NDEsMHgwMiwweDBjLDB4MDAsMHhjMCwweDIwLDB4NjEsMHgwZCwweDBlLDB4NzIsMHgwMiwweDFjLDB4NDAsMHhjNCwweDA4LDB4MzEgfSB9LAoreyAgMTYsIDB4ZjUzMCwgMCwgezB4MDQsMHgxOCwweDQyLDB4MDIsMHgxMCwweDgwLDB4ODcsMHgyMCwweGIxLDB4YzQsMHgwYywweDUzLDB4MDIsMHgxMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjU0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTAsMHgyMCwweDA3LDB4MjQsMHgwMSwweGNjLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjU1MCwgMCwgezB4NzIsMHg0MCwweDE0LDB4MDAsMHgwNCwweDI0LDB4MDEsMHgwOCwweDAwLDB4NzMsMHg0MSwweDEwLDB4YzAsMHgwNywweDMwLDB4MTEgfSB9LAoreyAgMTYsIDB4ZjU2MCwgMCwgezB4Y2MsMHgwMCwweDcxLDB4MDEsMHgxMCwweDAyLDB4MDQsMHgyMCwweDgxLDB4NDYsMHgxMCwweDQyLDB4NDAsMHgxMCwweDAyLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjU3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMCwweGM1LDB4MTAsMHgyMSwweDAwLDB4MDggfSB9LAoreyAgMTYsIDB4ZjU4MCwgMCwgezB4NjIsMHgwMiwweDFjLDB4OTAsMHhjNSwweDI0LDB4MjEsMHgwMCwweDBjLDB4NzAsMHg4MiwweDFjLDB4MTAsMHhjNCwweDIwLDB4MzEgfSB9LAoreyAgMTYsIDB4ZjU5MCwgMCwgezB4ODgsMHgwMiwweDQwLDB4MDYsMHgxYywweDAwLDB4ODUsMHgwMCwweGExLDB4MDAsMHgwYywweDQwLDB4NDIsMHgwMCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjVhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMiwweDA1LDB4MTQsMHg4MCwweDAxLDB4MjAgfSB9LAoreyAgMTYsIDB4ZjViMCwgMCwgezB4MzAsMHgwOCwweDBjLDB4NDIsMHgwNiwweDAwLDB4ODAsMHgwMSwweDI0LDB4NTEsMHgwOCwweDBjLDB4MDIsMHg0MSwweDAwLDB4ODAgfSB9LAoreyAgMTYsIDB4ZjVjMCwgMCwgezB4NGMsMHgyMCwweDAwLDB4MDgsMHgwYywweDMwLDB4NDIsMHgwNCwweDAwLDB4MDQsMHgyMCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjVkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweGM2LDB4MjQsMHgyMCwweDAwLDB4MGMgfSB9LAoreyAgMTYsIDB4ZjVlMCwgMCwgezB4MzIsMHhjMiwweDA0LDB4ODAsMHhjNywweDMwLDB4MjAsMHgwMCwweDBjLDB4NTMsMHhjMiwweDA0LDB4MTAsMHhjMiwweDI4LDB4NzAgfSB9LAoreyAgMTYsIDB4ZjVmMCwgMCwgezB4MGMsMHgwOSwweDAyLDB4MDIsMHg0YywweDgwLDB4ODEsMHgwNCwweDMwLDB4MDksMHgwYywweDAyLDB4NDIsMHgxMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjYwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg4MCwweDAxLDB4MzgsMHgwMCwweDAyLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjYxMCwgMCwgezB4MTIsMHg0MCwweDBjLDB4MjAsMHgwNywweDM0LDB4MDQsMHgwMiwweDAwLDB4NjMsMHgwMSwweDA4LDB4MTAsMHgwMCwweDI0LDB4MTAgfSB9LAoreyAgMTYsIDB4ZjYyMCwgMCwgezB4MDQsMHgwMCwweDAyLDB4MDEsMHgwNCwweDgyLDB4MDEsMHgwOCwweDgwLDB4MDksMHgxMCwweDAyLDB4NDAsMHgxMCwweDAwLDB4MDQgfSB9LAoreyAgMTYsIDB4ZjYzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDIwLDB4MTAsMHg4MCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjY0MCwgMCwgezB4MjAsMHg4MCwweDAwLDB4ZjAsMHgyMCwweDEwLDB4ODAsMHgwMCwweDAwLDB4MjAsMHg4MCwweDAwLDB4ZDAsMHg4MCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjY1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MTAsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGNjLDB4NDAgfSB9LAoreyAgMTYsIDB4ZjY2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNjLDB4M2MsMHgxMCwweDgwLDB4ODAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjY3MCwgMCwgezB4MDAsMHgwMCwweDEwLDB4OTAsMHg4MCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4OTAsMHg4MCwweDAwLDB4OTAgfSB9LAoreyAgMTYsIDB4ZjY4MCwgMCwgezB4ODAsMHgwMCwweDEwLDB4MDAsMHgwMCwweDEwLDB4YTAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgxMCwweDhjLDB4MDggfSB9LAoreyAgMTYsIDB4ZjY5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzNCwweDFhLDB4YmUsMHgxNywweDgwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjZhMCwgMCwgezB4M2UsMHg0MCwweDI2LDB4NmYsMHhiYSwweGUzLDB4MjQsMHg4MCwweDAwLDB4MTYsMHg1OSwweGJkLDB4ODIsMHg4MSwweDgyLDB4ZDggfSB9LAoreyAgMTYsIDB4ZjZiMCwgMCwgezB4ODAsMHgwMCwweDAwLDB4MTksMHg5OSwweDg2LDB4ODAsMHg2NCwweDgwLDB4YzAsMHgzZiwweGQ5LDB4OTksMHg4MCwweDAwLDB4MDEgfSB9LAoreyAgMTYsIDB4ZjZjMCwgMCwgezB4ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNiwweDE2LDB4MDIsMHg5NCwweDAwLDB4MTYgfSB9LAoreyAgMTYsIDB4ZjZkMCwgMCwgezB4YzAsMHgxNiwweDk0LDB4ODIsMHg5MCwweDE2LDB4MTAsMHg4MCwweDIxLDB4MTgsMHgyOCwweDI4LDB4MDIsMHgwYSwweDAyLDB4MDggfSB9LAoreyAgMTYsIDB4ZjZlMCwgMCwgezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4ODIsMHg4MCwweDE0LDB4MDAsMHgwMSwweDE0LDB4MTEsMHhhMCwweDQwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjZmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4ODQgfSB9LAoreyAgMTYsIDB4ZjcwMCwgMCwgezB4MDIsMHg4NCwweGE4LDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDkxLDB4MjIsMHg4NCwweDQxLDB4YTIsMHgwOCwweDI0LDB4MDEgfSB9LAoreyAgMTYsIDB4ZjcxMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHg4NCwweDAxLDB4NDQsMHgwMSwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjcyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjczMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2UsMHhmNywweGZmLDB4ZjcsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmYsMHhlNywweGI3LDB4ZmYgfSB9LAoreyAgMTYsIDB4Zjc0MCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJmLDB4ZmUsMHg3ZiwweGY3LDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjc1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjc2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MzYsMHhiZiwweGZlLDB4ZGYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHhmNywweGRmLDB4ZmYgfSB9LAoreyAgMTYsIDB4Zjc3MCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNkLDB4YjcsMHhiNywweGVmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjc4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjc5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MWYsMHhkZiwweGRmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHhkZiwweGRmLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZjdhMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZWYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjdiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjdjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2YsMHhiZiwweDdmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweDdmLDB4ZjcgfSB9LAoreyAgMTYsIDB4ZjdkMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZGYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjdlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjdmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2YsMHg3ZSwweGZmLDB4ZmYsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZSwweGZmLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZjgwMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjgxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjgyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MzcsMHhmZiwweDZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYgfSB9LAoreyAgMTYsIDB4ZjgzMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjg0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjg1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjg2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjg3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHgyMCwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjg4MCwgMCwgezB4MzAsMHgwMCwweDQzLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjg5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjhhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjhiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjhjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjhkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjhlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjhmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZjkwMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjkxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjkyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjkzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjk0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjk1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4YzAsMHgzMCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjk2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjk3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjk4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4Zjk5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjlhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjliMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHhjMCwweDMwLDB4YzAsMHgzMCwweGMwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZjljMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjlkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjllMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZjlmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYgfSB9LAoreyAgMTYsIDB4ZmEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmE0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmE1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YgfSB9LAoreyAgMTYsIDB4ZmE4MCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmFhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmFiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmFjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmFkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHgwMCwweDMwLDB4YzAsMHgzMCwweGMwLDB4MGYgfSB9LAoreyAgMTYsIDB4ZmFlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmIwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmIxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmIyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmIzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTMsMHg2YiwweDAwLDB4YzAsMHgwMCwweGNmLDB4MmMgfSB9LAoreyAgMTYsIDB4ZmI0MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmI1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmI2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmI3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmI4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmI5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBmLDB4MDAsMHgwZiwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmJhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmJiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmJjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmJkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmJmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHhjMCwweDBmLDB4MDAsMHgwZiwweDAwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZmMwMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmMxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmMyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmMzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmM0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmM1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4YzAsMHgzZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmM4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmM5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmNhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmNiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHhjMCwweDNmLDB4YzAsMHgzZiwweGMwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZmNjMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmNkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmNlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHgwMCwweDBmLDB4MDAsMHgwZiwweDAwLDB4MGYgfSB9LAoreyAgMTYsIDB4ZmQyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQ0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQ1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhjMCwweDBmLDB4MDAsMHgwZiwweDAwLDB4M2YgfSB9LAoreyAgMTYsIDB4ZmQ4MCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmQ5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmRhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmRiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmRjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmRkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHgwMCwweDNmLDB4YzAsMHgzZiwweGMwLDB4MGYgfSB9LAoreyAgMTYsIDB4ZmRlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmRmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmUwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmUxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmUyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmUzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA2LDB4MzMsMHg1ZCwweDgwLDB4YzAsMHgwMCwweGZkLDB4YWMgfSB9LAoreyAgMTYsIDB4ZmU0MCwgMCwgezB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmU1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmU2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmU3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmU5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmVhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmViMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmVjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmVkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmVlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZmYwMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmYxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmYyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmYzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmY0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmY1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4YzAsMHgzMCwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmY2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmY4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmY5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmZhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmZiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHhjMCwweDMwLDB4YzAsMHgzMCwweGMwLDB4MzAgfSB9LAoreyAgMTYsIDB4ZmZjMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmZkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmZlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ZmZmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODAxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODAyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYgfSB9LAoreyAgMTYsIDB4ODAzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODA0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODA1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODA2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODA3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODA4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YgfSB9LAoreyAgMTYsIDB4ODA5MCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODBlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHgwMCwweDMwLDB4YzAsMHgzMCwweGMwLDB4MGYgfSB9LAoreyAgMTYsIDB4ODBmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTMsMHg3NCwweGMwLDB4YzAsMHgwMCwweGYwLDB4ZWMgfSB9LAoreyAgMTYsIDB4ODE1MCwgMCwgezB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODFhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBmLDB4MDAsMHgwZiwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODFiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODFjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODFkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODFlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODIwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHhjMCwweDBmLDB4MDAsMHgwZiwweDAwLDB4MzAgfSB9LAoreyAgMTYsIDB4ODIxMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODIyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODIzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4YzAsMHgzZiwweGMwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODI5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODJhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODJiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODJjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTksMHg4NiwweDEwLDB4ODAsMHgzMCwweDgyLDB4M2QgfSB9LAoreyAgMTYsIDB4ODJkMCwgMCwgezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODJmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODMwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODMxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODMyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHgwMCwweDBmLDB4MDAsMHgwZiwweDAwLDB4MGYgfSB9LAoreyAgMTYsIDB4ODMzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODM0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODM1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODM4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhjMCwweDBmLDB4MDAsMHgwZiwweDAwLDB4M2YgfSB9LAoreyAgMTYsIDB4ODM5MCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODNhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODNiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODNjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODNkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODNlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHgwMCwweDNmLDB4YzAsMHgzZiwweGMwLDB4MGYgfSB9LAoreyAgMTYsIDB4ODNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQ0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM3LDB4NjUsMHgyNSwweGU0LDB4ODAsMHgwMCwweGIwLDB4ODggfSB9LAoreyAgMTYsIDB4ODQ1MCwgMCwgezB4YWIsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQ4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODQ5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODRhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODRiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODRjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4MjAsMHgwMSwweDAyLDB4MDIsMHgwMCwweDAwLDB4MzAsMHgwMCwweDQzLDB4MDAgfSB9LAoreyAgMTYsIDB4ODRkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODRlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODRmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODUwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODUxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODUyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODUzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODU0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODU1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODU2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODU3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODU5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODVhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODViMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODVjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODVkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODVlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODYwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODYxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODYyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODYzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODY0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODY1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODY2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODY4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODY5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODZhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODZiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODZjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODZkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODZlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODZmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODcwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODcxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODcyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODczMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODc0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODc1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODc2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODc3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODc4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODc5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODdmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODgwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODgxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODgyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODgzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODg5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODhhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODhiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODhjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODhkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODhlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODhmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODkwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODkxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODkyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODkzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODk0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODk1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODk2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODk3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODk4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODk5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODlhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODliMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODljMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODlkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODllMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4ODlmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGE0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGE1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGFhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGFiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGFjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGFkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGFlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGIwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGIxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGIyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGIzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGI0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGI1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGI2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGI3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGI4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGI5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGJhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGJiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGJjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGJkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGJlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGJmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGMwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGMxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGMyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGMzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGM0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGM1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGM3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGM4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGM5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGNhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGNiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGNjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGNkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGNlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQ0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQ1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQ4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGQ5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGRhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGRiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGRjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGRkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGRlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGRmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGUwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGUxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGUyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGUzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGU0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGU1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGU2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGU3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGU4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGU5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGVhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGViMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGVjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGVkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGVlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGYwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGYxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGYyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGYzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGY0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGY1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGY2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGY3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGY4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGY5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGZhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGZiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGZjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGZkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGZlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OGZmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTAwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTAxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTAyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTAzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTA0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTA1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTA2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTA3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTA4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTA5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBkMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4NDQsMHg3MiwweDMwLDB4MDAsMHg4MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDMgfSB9LAoreyAgMTYsIDB4OTBlMCwgMCwgezB4MzAsMHgwMCwweDQwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTBmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTEwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTYsIDB4OTExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4ODAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDA1LDB4MzAsMHgwMCwweGEwLDB4MDEgfSB9LAoreyAgMTYsIDB4OTEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHhlMSwweDVhLDB4MDAsMHgwMCwweDAwLDB4MDAgfSB9LAoreyAgMTIsIDB4OTEzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0gfSwKK3sgIDAgLCAweDAwMDAsIDEsIHswIH19Cit9OworLy8gVkVSU0lPTj0xLjEuMS4xMzEKKy8vIERBVEU9MjAwMWRlYzA2CisvLyBQUk9EVUNUPUVNSSAyfDYKKy8qCisgKiBUaGlzIGZpcm13YXJlIGlzIGZvciB0aGUgRW1hZ2ljIEVNSSAyfDYgQXVkaW8gSW50ZXJmYWNlCisgKgorICogVGhlIGZpcm13YXJlIGNvbnRhaW5lZCBoZXJlaW4gaXMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDIgRW1hZ2ljCisgKiBhcyBhbiB1bnB1Ymxpc2hlZCB3b3JrLiBUaGlzIG5vdGljZSBkb2VzIG5vdCBpbXBseSB1bnJlc3RyaWN0ZWQKKyAqIG9yIHB1YmxpYyBhY2Nlc3MgdG8gdGhpcyBmaXJtd2FyZSB3aGljaCBpcyBhIHRyYWRlIHNlY3JldCBvZiBFbWFnaWMsCisgKiBhbmQgd2hpY2ggbWF5IG5vdCBiZSByZXByb2R1Y2VkLCB1c2VkLCBzb2xkIG9yIHRyYW5zZmVycmVkIHRvCisgKiBhbnkgdGhpcmQgcGFydHkgd2l0aG91dCBFbWFnaWMncyB3cml0dGVuIGNvbnNlbnQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBmaXJtd2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggdGhlCisgKiBFbWFnaWMgRU1JIDJ8NiBBdWRpbyBJbnRlcmZhY2UuIERpc3RyaWJ1dGlvbiBhbmQvb3IgTW9kaWZpY2F0aW9uIG9mCisgKiBhbnkgZHJpdmVyIHdoaWNoIGluY2x1ZGVzIHRoaXMgZmlybXdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsCisgKiByZXF1aXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3RhdGVtZW50LgorICovCitzdGF0aWMgSU5URUxfSEVYX1JFQ09SRCBnX0Zpcm13YXJlW10gPSB7Cit7ICAgMywweDAwMDAsMCx7MHgwMiwweDQzLDB4NTZ9IH0sCit7ICAgMywweDAwMDMsMCx7MHgwMiwweDRiLDB4Y2R9IH0sCit7ICAgMywweDAwMGIsMCx7MHgwMiwweDRiLDB4ZDJ9IH0sCit7ICAgMywweDAwMTMsMCx7MHgwMiwweDRiLDB4OTJ9IH0sCit7ICAgMywweDAwMWIsMCx7MHgwMiwweDRiLDB4ZDV9IH0sCit7ICAgMywweDAwMjMsMCx7MHgwMiwweDFiLDB4Mzl9IH0sCit7ICAgMywweDAwMmIsMCx7MHgwMiwweDQzLDB4ZTJ9IH0sCit7ICAgMywweDAwMzMsMCx7MHgwMiwweDNmLDB4ZjN9IH0sCit7ICAgMywweDAwM2IsMCx7MHgwMiwweDRiLDB4YzB9IH0sCit7ICAgMywweDAwNDMsMCx7MHgwMiwweDQ3LDB4MDB9IH0sCit7ICAgMywweDAwNGIsMCx7MHgwMiwweDNmLDB4ZmN9IH0sCit7ICAgMywweDAwNTMsMCx7MHgwMiwweDM3LDB4ZmF9IH0sCit7ICAgMywweDAwNWIsMCx7MHgwMiwweDRiLDB4Yzd9IH0sCit7ICAgMywweDAwNjMsMCx7MHgwMiwweDQ2LDB4ZmN9IH0sCit7ICAxNiwweDA1MDAsMCx7MHgxMiwweDAxLDB4MTAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDQwLDB4NmEsMHgwOCwweDAxLDB4MDEsMHgwMCwweDAxLDB4MDEsMHgwMn0gfSwKK3sgIDE2LDB4MDUxMCwwLHsweDAwLDB4MDEsMHgwOSwweDAyLDB4YjgsMHgwMSwweDAzLDB4MDEsMHgwMCwweDgwLDB4YTAsMHgwOSwweDA0LDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgwNTIwLDAsezB4MDEsMHgwMSwweDAwLDB4MDAsMHgwYSwweDI0LDB4MDEsMHgwMCwweDAxLDB4NTYsMHgwMCwweDAyLDB4MDEsMHgwMiwweDBjLDB4MjR9IH0sCit7ICAxNiwweDA1MzAsMCx7MHgwMiwweDAxLDB4MDEsMHgwMSwweDAwLDB4MDYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE1LDB4MjQsMHgwNiwweDA1LDB4MDEsMHgwMn0gfSwKK3sgIDE2LDB4MDU0MCwwLHsweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA5fSB9LAoreyAgMTYsMHgwNTUwLDAsezB4MjQsMHgwMywweDAyLDB4MDQsMHgwMywweDAwLDB4MDUsMHgwMCwweDBjLDB4MjQsMHgwMiwweDAzLDB4MDEsMHgwMiwweDAwLDB4MDJ9IH0sCit7ICAxNiwweDA1NjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4MjQsMHgwNiwweDA2LDB4MDMsMHgwMiwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MDU3MCwwLHsweDAwLDB4MDksMHgyNCwweDAzLDB4MDQsMHgwMSwweDAxLDB4MDAsMHgwNiwweDAwLDB4MDksMHgwNCwweDAxLDB4MDAsMHgwMCwweDAxfSB9LAoreyAgMTYsMHgwNTgwLDAsezB4MDIsMHgwMCwweDAwLDB4MDksMHgwNCwweDAxLDB4MDEsMHgwMiwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDcsMHgyNCwweDAxLDB4MDF9IH0sCit7ICAxNiwweDA1OTAsMCx7MHgwMCwweDAxLDB4MDAsMHgxMSwweDI0LDB4MDIsMHgwMSwweDAyLDB4MDIsMHgxMCwweDAzLDB4NDQsMHhhYywweDAwLDB4ODAsMHhiYn0gfSwKK3sgIDE2LDB4MDVhMCwwLHsweDAwLDB4MDAsMHg3NywweDAxLDB4MDksMHgwNSwweDBhLDB4MDUsMHg4NCwweDAxLDB4MDEsMHgwMCwweDhmLDB4MDcsMHgyNSwweDAxfSB9LAoreyAgMTYsMHgwNWIwLDAsezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwOSwweDA1LDB4OGYsMHgwMSwweDAzLDB4MDAsMHgwMSwweDA2LDB4MDAsMHgwOSwweDA0LDB4MDF9IH0sCit7ICAxNiwweDA1YzAsMCx7MHgwMiwweDAyLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwNywweDI0LDB4MDEsMHgwMSwweDAwLDB4MDEsMHgwMCwweDBlLDB4MjQsMHgwMn0gfSwKK3sgIDE2LDB4MDVkMCwwLHsweDAxLDB4MDYsMHgwMiwweDEwLDB4MDIsMHg0NCwweGFjLDB4MDAsMHg4MCwweGJiLDB4MDAsMHgwOSwweDA1LDB4MGEsMHgwNSwweDRjfSB9LAoreyAgMTYsMHgwNWUwLDAsezB4MDIsMHgwMSwweDAwLDB4OGYsMHgwNywweDI1LDB4MDEsMHgwMSwweDAwLDB4MDAsMHgwMCwweDA5LDB4MDUsMHg4ZiwweDAxLDB4MDN9IH0sCit7ICAxNiwweDA1ZjAsMCx7MHgwMCwweDAxLDB4MDYsMHgwMCwweDA5LDB4MDQsMHgwMSwweDAzLDB4MDIsMHgwMSwweDAyLDB4MDAsMHgwMCwweDA3LDB4MjQsMHgwMX0gfSwKK3sgIDE2LDB4MDYwMCwwLHsweDAxLDB4MDAsMHgwMSwweDAwLDB4MGUsMHgyNCwweDAyLDB4MDEsMHgwNiwweDAzLDB4MTgsMHgwMiwweDQ0LDB4YWMsMHgwMCwweDgwfSB9LAoreyAgMTYsMHgwNjEwLDAsezB4YmIsMHgwMCwweDA5LDB4MDUsMHgwYSwweDA1LDB4NzIsMHgwMywweDAxLDB4MDAsMHg4ZiwweDA3LDB4MjUsMHgwMSwweDAxLDB4MDB9IH0sCit7ICAxNiwweDA2MjAsMCx7MHgwMCwweDAwLDB4MDksMHgwNSwweDhmLDB4MDEsMHgwMywweDAwLDB4MDEsMHgwNiwweDAwLDB4MDksMHgwNCwweDAxLDB4MDQsMHgwMn0gfSwKK3sgIDE2LDB4MDYzMCwwLHsweDAxLDB4MDIsMHgwMCwweDAwLDB4MDcsMHgyNCwweDAxLDB4MDEsMHgwMCwweDAxLDB4MDAsMHgwYiwweDI0LDB4MDIsMHgwMSwweDAyfSB9LAoreyAgMTYsMHgwNjQwLDAsezB4MDMsMHgxOCwweDAxLDB4MDAsMHg3NywweDAxLDB4MDksMHgwNSwweDBhLDB4MDUsMHg0NiwweDAyLDB4MDEsMHgwMCwweDhmLDB4MDd9IH0sCit7ICAxNiwweDA2NTAsMCx7MHgyNSwweDAxLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwOSwweDA1LDB4OGYsMHgwMSwweDAzLDB4MDAsMHgwMSwweDA2LDB4MDAsMHgwOX0gfSwKK3sgIDE2LDB4MDY2MCwwLHsweDA0LDB4MDIsMHgwMCwweDAwLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwOSwweDA0LDB4MDIsMHgwMSwweDAxLDB4MDEsMHgwMiwweDAwfSB9LAoreyAgMTYsMHgwNjcwLDAsezB4MDAsMHgwNywweDI0LDB4MDEsMHgwNCwweDAwLDB4MDEsMHgwMCwweDExLDB4MjQsMHgwMiwweDAxLDB4MDIsMHgwMiwweDEwLDB4MDN9IH0sCit7ICAxNiwweDA2ODAsMCx7MHg0NCwweGFjLDB4MDAsMHg4MCwweGJiLDB4MDAsMHgwMCwweDc3LDB4MDEsMHgwOSwweDA1LDB4OGMsMHgwNSwweDg0LDB4MDEsMHgwMX0gfSwKK3sgIDE2LDB4MDY5MCwwLHsweDAwLDB4MDAsMHgwNywweDI1LDB4MDEsMHgwMSwweDAyLDB4MDAsMHgwMCwweDA5LDB4MDQsMHgwMiwweDAyLDB4MDEsMHgwMSwweDAyfSB9LAoreyAgMTYsMHgwNmEwLDAsezB4MDAsMHgwMCwweDA3LDB4MjQsMHgwMSwweDA0LDB4MDAsMHgwMSwweDAwLDB4MTEsMHgyNCwweDAyLDB4MDEsMHgwMiwweDAzLDB4MTh9IH0sCit7ICAxNiwweDA2YjAsMCx7MHgwMywweDQ0LDB4YWMsMHgwMCwweDgwLDB4YmIsMHgwMCwweDAwLDB4NzcsMHgwMSwweDA5LDB4MDUsMHg4YywweDA1LDB4NDYsMHgwMn0gfSwKK3sgIDE2LDB4MDZjMCwwLHsweDAxLDB4MDAsMHgwMCwweDA3LDB4MjUsMHgwMSwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDUsMHgwYywweDA5LDB4MDEsMHhhMSwweDAxfSB9LAoreyAgMTYsMHgwNmQwLDAsezB4MDUsMHgwYywweDA5LDB4ZTksMHgwNSwweDBjLDB4MDksMHhlYSwweDE1LDB4MDAsMHgyNSwweDAxLDB4OTUsMHgwMiwweDc1LDB4MDF9IH0sCit7ICAxNiwweDA2ZTAsMCx7MHg4MSwweDQyLDB4OTUsMHgwMSwweDc1LDB4MDYsMHg4MSwweDAxLDB4MDUsMHgwYywweDA5LDB4MDAsMHgwNSwweDBjLDB4MDksMHgwMH0gfSwKK3sgIDE2LDB4MDZmMCwwLHsweDE1LDB4MDAsMHgyNSwweDAxLDB4OTUsMHgwMiwweDc1LDB4MDEsMHg5MSwweDA2LDB4OTUsMHgwMSwweDc1LDB4MDYsMHg5MSwweDAzfSB9LAoreyAgMTYsMHgwNzAwLDAsezB4YzAsMHgwNCwweDAzLDB4MDksMHgwNCwweDE4LDB4MDMsMHg0NSwweDAwLDB4NGQsMHgwMCwweDQxLDB4MDAsMHg0NywweDAwLDB4NDl9IH0sCit7ICAxNiwweDA3MTAsMCx7MHgwMCwweDQzLDB4MDAsMHgyMCwweDAwLDB4NDcsMHgwMCwweDZkLDB4MDAsMHg2MiwweDAwLDB4NDgsMHgwMCwweDFlLDB4MDMsMHg0NX0gfSwKK3sgIDE2LDB4MDcyMCwwLHsweDAwLDB4NmQsMHgwMCwweDYxLDB4MDAsMHg2NywweDAwLDB4NjksMHgwMCwweDYzLDB4MDAsMHgyMCwweDAwLDB4NDUsMHgwMCwweDRkfSB9LAoreyAgMTYsMHgwNzMwLDAsezB4MDAsMHg0OSwweDAwLDB4MjAsMHgwMCwweDMyLDB4MDAsMHg3YywweDAwLDB4MzYsMHgwMCwweDJhLDB4MDMsMHg0MywweDAwLDB4NmZ9IH0sCit7ICAxNiwweDA3NDAsMCx7MHgwMCwweDZlLDB4MDAsMHg2NiwweDAwLDB4NjksMHgwMCwweDY3LDB4MDAsMHg3NSwweDAwLDB4NzIsMHgwMCwweDYxLDB4MDAsMHg3NH0gfSwKK3sgIDE2LDB4MDc1MCwwLHsweDAwLDB4NjksMHgwMCwweDZmLDB4MDAsMHg2ZSwweDAwLDB4MjAsMHgwMCwweDUzLDB4MDAsMHg3NCwweDAwLDB4NzIsMHgwMCwweDY5fSB9LAoreyAgMTYsMHgwNzYwLDAsezB4MDAsMHg2ZSwweDAwLDB4NjcsMHgwMCwweDIyLDB4MDMsMHg0OSwweDAwLDB4NmUsMHgwMCwweDc0LDB4MDAsMHg2NSwweDAwLDB4NzJ9IH0sCit7ICAxNiwweDA3NzAsMCx7MHgwMCwweDY2LDB4MDAsMHg2MSwweDAwLDB4NjMsMHgwMCwweDY1LDB4MDAsMHgyMCwweDAwLDB4NTMsMHgwMCwweDc0LDB4MDAsMHg3Mn0gfSwKK3sgICA5LDB4MDc4MCwwLHsweDAwLDB4NjksMHgwMCwweDZlLDB4MDAsMHg2NywweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MDc4OSwwLHsweDc0LDB4MDAsMHhmNSwweDg2LDB4OTAsMHhmZCwweGE1LDB4N2MsMHgwNSwweGEzLDB4ZTUsMHg4MiwweDQ1LDB4ODMsMHg3MCwweGY5fSB9LAoreyAgIDEsMHgwNzk5LDAsezB4MjJ9IH0sCit7ICAxNiwweDA3OWEsMCx7MHg5MCwweDdmLDB4ZDYsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDQzLDB4ODcsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMn0gfSwKK3sgIDE2LDB4MDdhYSwwLHsweGMwLDB4ZDAsMHhjMCwweGUwLDB4OGYsMHhlMCwweGMwLDB4ZTAsMHg4ZSwweGUwLDB4YzAsMHhlMCwweDhkLDB4ZTAsMHhjMCwweGUwfSB9LAoreyAgMTYsMHgwN2JhLDAsezB4OGMsMHhlMCwweGMwLDB4ZTAsMHhjMCwweDgyLDB4YzAsMHg4MywweDA1LDB4ODYsMHhjMCwweDg0LDB4YzAsMHg4NSwweGU1LDB4MTh9IH0sCit7ICAxNiwweDA3Y2EsMCx7MHhiNCwweDAyLDB4MDMsMHgwMiwweDA3LDB4ZDksMHhiNCwweDAxLDB4MDMsMHgwMiwweDA3LDB4ZGUsMHgwMiwweDA3LDB4ZmEsMHg3ZH0gfSwKK3sgIDE2LDB4MDdkYSwwLHsweDAxLDB4MDIsMHgwOCwweDE2LDB4ZTUsMHgxOSwweDE0LDB4ZjUsMHgxOSwweGMzLDB4YjUsMHgxMywweDAzLDB4MDIsMHgwNywweGY1fSB9LAoreyAgMTYsMHgwN2VhLDAsezB4NTAsMHgwOSwweGI0LDB4MDAsMHhlYSwweDc1LDB4MTksMHgwYSwweDAyLDB4MDcsMHhkOSwweDdkLDB4MDAsMHgwMiwweDA4LDB4MTZ9IH0sCit7ICAxNiwweDA3ZmEsMCx7MHhlNSwweDE5LDB4MTQsMHhmNSwweDE5LDB4YzMsMHhiNSwweDE0LDB4MDMsMHgwMiwweDA4LDB4MTEsMHg1MCwweDA5LDB4YjQsMHgwMH0gfSwKK3sgIDE2LDB4MDgwYSwwLHsweGNlLDB4NzUsMHgxOSwweDBhLDB4MDIsMHgwNywweGQ5LDB4N2QsMHgwMiwweDAyLDB4MDgsMHgxNiwweDdjLDB4MDUsMHg5MCwweDdmfSB9LAoreyAgMTYsMHgwODFhLDAsezB4OTksMHhlMCwweDU0LDB4NDAsMHhkYywweDAzLDB4MDIsMHgwOCwweDQzLDB4YjQsMHgwMCwweDFkLDB4OTAsMHg3ZiwweGUzLDB4NzR9IH0sCit7ICAxNiwweDA4MmEsMCx7MHg3YiwweGYwLDB4YTMsMHg3NCwweDgwLDB4ZjAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDQwLDB4ZjAsMHg5MCwweDdmLDB4ZTUsMHhmMH0gfSwKK3sgIDE2LDB4MDgzYSwwLHsweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMCwweDAyLDB4MDgsMHgxOCwweDA1LDB4ODYsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDgwfSB9LAoreyAgMTYsMHgwODRhLDAsezB4ZjAsMHg5MCwweDc5LDB4NjUsMHhlMCwweGI0LDB4MDEsMHgwMywweDAyLDB4MDgsMHg5ZSwweGI0LDB4MDIsMHgwMywweDAyLDB4MDh9IH0sCit7ICAxNiwweDA4NWEsMCx7MHg5NiwweGI0LDB4MDMsMHgwMywweDAyLDB4MDgsMHg4ZSwweGI0LDB4MDQsMHgwMywweDAyLDB4MDgsMHg4NiwweGI0LDB4MDUsMHgwM30gfSwKK3sgIDE2LDB4MDg2YSwwLHsweDAyLDB4MDgsMHg3ZSwweGI0LDB4MDYsMHgwMywweDAyLDB4MDgsMHg3NiwweDAyLDB4MDgsMHhmNCwweDA1LDB4ODYsMHg5MCwweDdmfSB9LAoreyAgMTYsMHgwODdhLDAsezB4NmMsMHgwMiwweDA4LDB4ZTksMHgwNSwweDg2LDB4OTAsMHg3ZiwweDZjLDB4MDIsMHgwOCwweGRkLDB4MDUsMHg4NiwweDkwLDB4N2Z9IH0sCit7ICAxNiwweDA4OGEsMCx7MHg2YywweDAyLDB4MDgsMHhjZiwweDA1LDB4ODYsMHg5MCwweDdmLDB4NmMsMHgwMiwweDA4LDB4YzAsMHgwNSwweDg2LDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MDg5YSwwLHsweDZjLDB4MDIsMHgwOCwweGIyLDB4MDUsMHg4NiwweDkwLDB4N2YsMHg2YywweGYwLDB4MDAsMHhmMCwweDAwLDB4ZjAsMHgwMCwweGYwfSB9LAoreyAgMTYsMHgwOGFhLDAsezB4MGQsMHhlZCwweGI0LDB4MmQsMHhmNCwweDAyLDB4MDgsMHhmNCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweDBkLDB4ZWR9IH0sCit7ICAxNiwweDA4YmEsMCx7MHhiNCwweDJkLDB4ZjUsMHgwMiwweDA4LDB4ZjQsMHhmMCwweDAwLDB4ZjAsMHgwMCwweGYwLDB4MDAsMHhmMCwweDBkLDB4ZWQsMHhiNH0gfSwKK3sgIDE2LDB4MDhjYSwwLHsweDMxLDB4ZjQsMHgwMiwweDA4LDB4ZjQsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHgwZCwweGVkLDB4YjQsMHgzMSwweGY1fSB9LAoreyAgMTYsMHgwOGRhLDAsezB4MDIsMHgwOCwweGY0LDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHgwZCwweGVkLDB4YjQsMHg2MSwweGY3LDB4MDIsMHgwOCwweGY0LDB4ZjB9IH0sCit7ICAxNiwweDA4ZWEsMCx7MHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4MGQsMHhlZCwweGI0LDB4NjEsMHhmNSwweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMH0gfSwKK3sgIDE2LDB4MDhmYSwwLHsweGQwLDB4ODUsMHhkMCwweDg0LDB4MDUsMHg4NiwweGQwLDB4ODMsMHhkMCwweDgyLDB4ZDAsMHhlMCwweGZjLDB4ZDAsMHhlMCwweGZkfSB9LAoreyAgIDUsMHgwOTBhLDAsezB4ZDAsMHhlMCwweGZlLDB4ZDAsMHhlMH0gfSwKK3sgICA2LDB4MDkwZiwwLHsweGZmLDB4ZDAsMHhlMCwweGQwLDB4ZDAsMHgyMn0gfSwKK3sgIDE2LDB4MDkxNSwwLHsweGMwLDB4ZDAsMHhjMCwweGUwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHg5MCwweDdmLDB4NmYsMHhlNSwweDBjLDB4ZjAsMHhlNSwweDBkfSB9LAoreyAgMTMsMHgwOTI1LDAsezB4ZjAsMHhlNSwweDBlLDB4ZjAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZTAsMHhkMCwweGQwLDB4MjJ9IH0sCit7ICAxNiwweDA5MzIsMCx7MHhjMCwweGQwLDB4YzAsMHhlMCwweDhmLDB4ZTAsMHhjMCwweGUwLDB4OGUsMHhlMCwweGMwLDB4ZTAsMHhjMCwweDgyLDB4YzAsMHg4M30gfSwKK3sgIDE2LDB4MDk0MiwwLHsweDA1LDB4ODYsMHhjMCwweDg0LDB4YzAsMHg4NSwweDkwLDB4NzksMHg3MCwweGUwLDB4ZmYsMHhiZiwweDAwLDB4MDMsMHgwMiwweDBhfSB9LAoreyAgMTYsMHgwOTUyLDAsezB4YjgsMHg5MCwweDdmLDB4OTYsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMCwweDkwLDB4N2Z9IH0sCit7ICAxNiwweDA5NjIsMCx7MHg2MiwweGUwLDB4MDUsMHg4NiwweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMCwweDkwLDB4N2YsMHg5NiwweGUwLDB4NTQsMHg3Zn0gfSwKK3sgIDE2LDB4MDk3MiwwLHsweGYwLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwLDB4OTAsMHg3OSwweDg4LDB4ZTAsMHhiNCwweDAxLDB4MDMsMHgwMiwweDA5fSB9LAoreyAgMTYsMHgwOTgyLDAsezB4YmUsMHhiNCwweDAyLDB4MDMsMHgwMiwweDA5LDB4YzMsMHhiNCwweDAzLDB4MDMsMHgwMiwweDA5LDB4YWMsMHhiNCwweDA0LDB4MDN9IH0sCit7ICAxNiwweDA5OTIsMCx7MHgwMiwweDA5LDB4OWEsMHgwNSwweDg2LDB4MDIsMHgwYSwweGIyLDB4ZWYsMHg1NCwweDAzLDB4ZmUsMHhlZiwweDAzLDB4MDMsMHg1NH0gfSwKK3sgIDE2LDB4MDlhMiwwLHsweDNmLDB4ZmYsMHg5MCwweDdmLDB4NjMsMHgwNSwweDg2LDB4MDIsMHgwOSwweGM5LDB4ZWYsMHg1NCwweDAzLDB4ZmUsMHhlZiwweDAzfSB9LAoreyAgMTYsMHgwOWIyLDAsezB4MDMsMHg1NCwweDNmLDB4ZmYsMHg5MCwweDdmLDB4NjMsMHgwNSwweDg2LDB4MDIsMHgwYSwweDM2LDB4MDUsMHg4NiwweDAyLDB4MGF9IH0sCit7ICAxNiwweDA5YzIsMCx7MHhhNSwweDA1LDB4ODYsMHgwMiwweDBhLDB4OGUsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHgwNSwweDg2LDB4ZTAsMHhlMH0gfSwKK3sgIDE2LDB4MDlkMiwwLHsweGUwLDB4MDUsMHg4NiwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweDA1LDB4ODYsMHhlMCwweGUwLDB4ZTAsMHgwNSwweDg2fSB9LAoreyAgMTYsMHgwOWUyLDAsezB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4MDUsMHg4NiwweGUwLDB4ZTAsMHhlMCwweDA1LDB4ODYsMHhlMCwweGUwLDB4ZTB9IH0sCit7ICAxNiwweDA5ZjIsMCx7MHhlMCwweGUwLDB4ZTAsMHgwNSwweDg2LDB4ZTAsMHhlMCwweGUwLDB4MDUsMHg4NiwweGRmLDB4Y2EsMHhlZSwweGI0LDB4MDAsMHgwM30gfSwKK3sgIDE2LDB4MGEwMiwwLHsweDAyLDB4MGEsMHhiMiwweGI0LDB4MDEsMHgwMywweDAyLDB4MGEsMHgyNSwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweDA1fSB9LAoreyAgMTYsMHgwYTEyLDAsezB4ODYsMHhlMCwweGUwLDB4ZTAsMHgwNSwweDg2LDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4MDUsMHg4NiwweGUwLDB4ZTB9IH0sCit7ICAxNiwweDBhMjIsMCx7MHhlMCwweDA1LDB4ODYsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHgwNSwweDg2LDB4ZTAsMHhlMCwweGUwLDB4MDUsMHg4Nn0gfSwKK3sgIDE2LDB4MGEzMiwwLHsweDAyLDB4MGEsMHhiMiwweGUwLDB4ZTAsMHhlMCwweGUwLDB4MDUsMHg4NiwweGUwLDB4ZTAsMHgwNSwweDg2LDB4ZTAsMHhlMCwweGUwfSB9LAoreyAgMTMsMHgwYTQyLDAsezB4ZTAsMHgwNSwweDg2LDB4ZTAsMHhlMCwweDA1LDB4ODYsMHhlMCwweGUwLDB4ZTAsMHhlMCwweDA1LDB4ODZ9IH0sCit7ICAxNiwweDBhNGYsMCx7MHhlMCwweGUwLDB4MDUsMHg4NiwweGUwLDB4ZTAsMHhlMCwweGUwLDB4MDUsMHg4NiwweGUwLDB4ZTAsMHgwNSwweDg2LDB4ZGYsMHhkNn0gfSwKK3sgIDE2LDB4MGE1ZiwwLHsweGVlLDB4YjQsMHgwMCwweDAzLDB4MDIsMHgwYSwweGIyLDB4YjQsMHgwMSwweDAzLDB4MDIsMHgwYSwweDgwLDB4ZTAsMHhlMCwweGUwfSB9LAoreyAgMTYsMHgwYTZmLDAsezB4ZTAsMHgwNSwweDg2LDB4ZTAsMHhlMCwweDA1LDB4ODYsMHhlMCwweGUwLDB4ZTAsMHhlMCwweDA1LDB4ODYsMHhlMCwweGUwLDB4MDV9IH0sCit7ICAxNiwweDBhN2YsMCx7MHg4NiwweGUwLDB4ZTAsMHhlMCwweGUwLDB4MDUsMHg4NiwweGUwLDB4ZTAsMHgwNSwweDg2LDB4MDIsMHgwYSwweGIyLDB4ZTAsMHhlMH0gfSwKK3sgIDE2LDB4MGE4ZiwwLHsweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwfSB9LAoreyAgMTYsMHgwYTlmLDAsezB4ZGYsMHhlYywweDAyLDB4MGEsMHhiMiwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTB9IH0sCit7ICAxNiwweDBhYWYsMCx7MHhlMCwweGRmLDB4ZjIsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjAsMHhkMCwweDg1LDB4ZDAsMHg4NCwweDA1LDB4ODYsMHhkMH0gfSwKK3sgIDE0LDB4MGFiZiwwLHsweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZTAsMHhmZSwweGQwLDB4ZTAsMHhmZiwweGQwLDB4ZTAsMHhkMCwweGQwLDB4MjJ9IH0sCit7ICAxNiwweDBhY2QsMCx7MHhjMCwweDgyLDB4YzAsMHg4MywweGMwLDB4ZTAsMHhlOCwweGMwLDB4ZTAsMHg3OCwweGQxLDB4ZTgsMHgxNCwweGY4LDB4NzAsMHhmYn0gfSwKK3sgIDEwLDB4MGFkZCwwLHsweGQwLDB4ZTAsMHhmOCwweGQwLDB4ZTAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweDIyfSB9LAoreyAgMTYsMHgwYWU3LDAsezB4YzAsMHhkMCwweGMwLDB4ZTAsMHg4ZiwweGUwLDB4YzAsMHhlMCwweDhlLDB4ZTAsMHhjMCwweGUwLDB4OGQsMHhlMCwweGMwLDB4ZTB9IH0sCit7ICAxNiwweDBhZjcsMCx7MHg4YywweGUwLDB4YzAsMHhlMCwweDc1LDB4ODYsMHgwMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4MDUsMHg4NiwweGMwLDB4ODQsMHhjMH0gfSwKK3sgIDE2LDB4MGIwNywwLHsweDg1LDB4N2UsMHgwMCwweDkwLDB4NzksMHg4ZSwweGUwLDB4YjQsMHgwMCwweDE2LDB4NzQsMHgwMSwweGYwLDB4OTAsMHgwNiwweGNhfSB9LAoreyAgMTYsMHgwYjE3LDAsezB4YTMsMHhhMywweGEzLDB4YTMsMHhhMywweGEzLDB4YTMsMHhlMCwweGZmLDB4OTAsMHg3OSwweDhkLDB4ZjAsMHgwMiwweDBiLDB4Mzl9IH0sCit7ICAxNiwweDBiMjcsMCx7MHg5MCwweDc5LDB4OGQsMHhlMCwweGZmLDB4OTAsMHg3OSwweDhmLDB4ZTAsMHhmZCwweDkwLDB4NzksMHg5MCwweGUwLDB4ZmMsMHgwMn0gfSwKK3sgIDE2LDB4MGIzNywwLHsweDBiLDB4NDYsMHg5MCwweDA2LDB4Y2EsMHgwNSwweDg2LDB4OTAsMHg3ZiwweDAwLDB4MDUsMHg4NiwweDAyLDB4MGIsMHg1MSwweDhkfSB9LAoreyAgMTYsMHgwYjQ3LDAsezB4ODQsMHg4YywweDg1LDB4MDUsMHg4NiwweDkwLDB4N2YsMHgwMCwweDA1LDB4ODYsMHhlMCwweGEzLDB4MDUsMHg4NiwweGYwLDB4YTN9IH0sCit7ICAxNiwweDBiNTcsMCx7MHgwZSwweGVlLDB4YjQsMHg0MCwweDAzLDB4MDIsMHgwYiwweDZjLDB4MDUsMHg4NiwweGRmLDB4ZWUsMHg5MCwweDc5LDB4OGUsMHg3NH0gfSwKK3sgIDE2LDB4MGI2NywwLHsweDAwLDB4ZjAsMHgwMiwweDBiLDB4ODIsMHgwNSwweDg2LDB4YWQsMHg4NCwweGFjLDB4ODUsMHg5MCwweDc5LDB4OGYsMHhlZCwweGYwfSB9LAoreyAgMTYsMHgwYjc3LDAsezB4OTAsMHg3OSwweDkwLDB4ZWMsMHhmMCwweDkwLDB4NzksMHg4ZCwweDFmLDB4ZWYsMHhmMCwweDkwLDB4N2YsMHhiNSwweGVlLDB4ZjB9IH0sCit7ICAxNiwweDBiODcsMCx7MHhkMCwweDg1LDB4ZDAsMHg4NCwweDA1LDB4ODYsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZTAsMHhmYywweGQwLDB4ZTAsMHhmZH0gfSwKK3sgIDExLDB4MGI5NywwLHsweGQwLDB4ZTAsMHhmZSwweGQwLDB4ZTAsMHhmZiwweGQwLDB4ZTAsMHhkMCwweGQwLDB4MjJ9IH0sCit7ICAxNiwweDBiYTIsMCx7MHhjMCwweGQwLDB4YzAsMHhlMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4OTAsMHg3ZiwweGFlLDB4ZTAsMHg1NCwweGUwLDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4MGJiMiwwLHsweDdmLDB4OTYsMHhlMCwweDQ0LDB4MDgsMHg1NCwweGZiLDB4ZjAsMHg5MCwweDdmLDB4OTcsMHhlMCwweDU0LDB4YmYsMHhmMCwweDkwfSB9LAoreyAgMTYsMHgwYmMyLDAsezB4N2YsMHhlMywweDc0LDB4N2IsMHhmMCwweDkwLDB4N2YsMHhlNCwweDc0LDB4NDAsMHhmMCwweDkwLDB4NzksMHg3OCwweGUwLDB4OTB9IH0sCit7ICAxNiwweDBiZDIsMCx7MHg3YiwweDQwLDB4ZjAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDQ4LDB4ZjAsMHg5MCwweDdmLDB4ZTUsMHhlMCwweDkwLDB4N2YsMHhlMn0gfSwKK3sgIDE2LDB4MGJlMiwwLHsweDc0LDB4MDAsMHhmMCwweDkwLDB4N2YsMHg5NiwweGUwLDB4NTQsMHhmNywweDQ0LDB4MDQsMHhmMCwweDkwLDB4N2YsMHhlMywweDc0fSB9LAoreyAgMTYsMHgwYmYyLDAsezB4N2IsMHhmMCwweDkwLDB4N2YsMHhlNCwweDc0LDB4NDAsMHhmMCwweDkwLDB4NzksMHg3OSwweGUwLDB4OTAsMHg3YiwweDQwLDB4ZjB9IH0sCit7ICAxNiwweDBjMDIsMCx7MHg5MCwweDdmLDB4ZTIsMHg3NCwweDQ4LDB4ZjAsMHg5MCwweDdmLDB4ZTUsMHhlMCwweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMH0gfSwKK3sgIDE2LDB4MGMxMiwwLHsweDkwLDB4N2YsMHg5NiwweGUwLDB4NTQsMHhmMywweGYwLDB4OTAsMHg3ZiwweGFlLDB4ZTAsMHg0NCwweDFmLDB4ZjAsMHhkMCwweDgzfSB9LAoreyAgIDcsMHgwYzIyLDAsezB4ZDAsMHg4MiwweGQwLDB4ZTAsMHhkMCwweGQwLDB4MjJ9IH0sCit7ICAxNiwweDBjMjksMCx7MHhjMCwweGQwLDB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4OTAsMHg3OSwweDJmLDB4ZTAsMHg2NCwweGZmLDB4YzMsMHgyNH0gfSwKK3sgIDExLDB4MGMzOSwwLHsweDAxLDB4ZjAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHhkMCwweGQwLDB4MjJ9IH0sCit7ICAxNiwweDBjNDQsMCx7MHhiYiwweDAxLDB4MDYsMHg4OSwweDgyLDB4OGEsMHg4MywweGUwLDB4MjIsMHg1MCwweDAyLDB4ZTcsMHgyMiwweGJiLDB4ZmUsMHgwMn0gfSwKK3sgICA5LDB4MGM1NCwwLHsweGUzLDB4MjIsMHg4OSwweDgyLDB4OGEsMHg4MywweGU0LDB4OTMsMHgyMn0gfSwKK3sgIDE2LDB4MGM1ZCwwLHsweGJiLDB4MDEsMHgwYywweGU1LDB4ODIsMHgyOSwweGY1LDB4ODIsMHhlNSwweDgzLDB4M2EsMHhmNSwweDgzLDB4ZTAsMHgyMiwweDUwfSB9LAoreyAgMTYsMHgwYzZkLDAsezB4MDYsMHhlOSwweDI1LDB4ODIsMHhmOCwweGU2LDB4MjIsMHhiYiwweGZlLDB4MDYsMHhlOSwweDI1LDB4ODIsMHhmOCwweGUyLDB4MjJ9IH0sCit7ICAxMywweDBjN2QsMCx7MHhlNSwweDgyLDB4MjksMHhmNSwweDgyLDB4ZTUsMHg4MywweDNhLDB4ZjUsMHg4MywweGU0LDB4OTMsMHgyMn0gfSwKK3sgIDE2LDB4MGM4YSwwLHsweGJiLDB4MDEsMHgwNiwweDg5LDB4ODIsMHg4YSwweDgzLDB4ZjAsMHgyMiwweDUwLDB4MDIsMHhmNywweDIyLDB4YmIsMHhmZSwweDAxfSB9LAoreyAgIDIsMHgwYzlhLDAsezB4ZjMsMHgyMn0gfSwKK3sgIDE2LDB4MGM5YywwLHsweGY4LDB4YmIsMHgwMSwweDBkLDB4ZTUsMHg4MiwweDI5LDB4ZjUsMHg4MiwweGU1LDB4ODMsMHgzYSwweGY1LDB4ODMsMHhlOCwweGYwfSB9LAoreyAgMTYsMHgwY2FjLDAsezB4MjIsMHg1MCwweDA2LDB4ZTksMHgyNSwweDgyLDB4YzgsMHhmNiwweDIyLDB4YmIsMHhmZSwweDA1LDB4ZTksMHgyNSwweDgyLDB4Yzh9IH0sCit7ICAgMiwweDBjYmMsMCx7MHhmMiwweDIyfSB9LAoreyAgMTYsMHgwY2JlLDAsezB4YzIsMHhkNSwweGVjLDB4MzAsMHhlNywweDA5LDB4YjIsMHhkNSwweGU0LDB4YzMsMHg5ZCwweGZkLDB4ZTQsMHg5YywweGZjLDB4ZWV9IH0sCit7ICAxNiwweDBjY2UsMCx7MHgzMCwweGU3LDB4MTUsMHhiMiwweGQ1LDB4ZTQsMHhjMywweDlmLDB4ZmYsMHhlNCwweDllLDB4ZmUsMHgxMiwweDBlLDB4NDAsMHhjM30gfSwKK3sgIDE2LDB4MGNkZSwwLHsweGU0LDB4OWQsMHhmZCwweGU0LDB4OWMsMHhmYywweDgwLDB4MDMsMHgxMiwweDBlLDB4NDAsMHgzMCwweGQ1LDB4MDcsMHhjMywweGU0fSB9LAoreyAgIDYsMHgwY2VlLDAsezB4OWYsMHhmZiwweGU0LDB4OWUsMHhmZSwweDIyfSB9LAoreyAgMTYsMHgwY2Y0LDAsezB4YzUsMHhmMCwweGY4LDB4YTMsMHhlMCwweDI4LDB4ZjAsMHhjNSwweGYwLDB4ZjgsMHhlNSwweDgyLDB4MTUsMHg4MiwweDcwLDB4MDJ9IH0sCit7ICAgNiwweDBkMDQsMCx7MHgxNSwweDgzLDB4ZTAsMHgzOCwweGYwLDB4MjJ9IH0sCit7ICAxNiwweDBkMGEsMCx7MHhiYiwweDAxLDB4MTAsMHhlNSwweDgyLDB4MjksMHhmNSwweDgyLDB4ZTUsMHg4MywweDNhLDB4ZjUsMHg4MywweGUwLDB4ZjUsMHhmMH0gfSwKK3sgIDE2LDB4MGQxYSwwLHsweGEzLDB4ZTAsMHgyMiwweDUwLDB4MDksMHhlOSwweDI1LDB4ODIsMHhmOCwweDg2LDB4ZjAsMHgwOCwweGU2LDB4MjIsMHhiYiwweGZlfSB9LAoreyAgMTYsMHgwZDJhLDAsezB4MGEsMHhlOSwweDI1LDB4ODIsMHhmOCwweGUyLDB4ZjUsMHhmMCwweDA4LDB4ZTIsMHgyMiwweGU1LDB4ODMsMHgyYSwweGY1LDB4ODN9IH0sCit7ICAgOCwweDBkM2EsMCx7MHhlOSwweDkzLDB4ZjUsMHhmMCwweGEzLDB4ZTksMHg5MywweDIyfSB9LAoreyAgMTYsMHgwZDQyLDAsezB4ZTgsMHg4ZiwweGYwLDB4YTQsMHhjYywweDhiLDB4ZjAsMHhhNCwweDJjLDB4ZmMsMHhlOSwweDhlLDB4ZjAsMHhhNCwweDJjLDB4ZmN9IH0sCit7ICAxNiwweDBkNTIsMCx7MHg4YSwweGYwLDB4ZWQsMHhhNCwweDJjLDB4ZmMsMHhlYSwweDhlLDB4ZjAsMHhhNCwweGNkLDB4YTgsMHhmMCwweDhiLDB4ZjAsMHhhNH0gfSwKK3sgIDE2LDB4MGQ2MiwwLHsweDJkLDB4Y2MsMHgzOCwweDI1LDB4ZjAsMHhmZCwweGU5LDB4OGYsMHhmMCwweGE0LDB4MmMsMHhjZCwweDM1LDB4ZjAsMHhmYywweGVifSB9LAoreyAgMTYsMHgwZDcyLDAsezB4OGUsMHhmMCwweGE0LDB4ZmUsMHhhOSwweGYwLDB4ZWIsMHg4ZiwweGYwLDB4YTQsMHhjZiwweGM1LDB4ZjAsMHgyZSwweGNkLDB4Mzl9IH0sCit7ICAxNSwweDBkODIsMCx7MHhmZSwweGU0LDB4M2MsMHhmYywweGVhLDB4YTQsMHgyZCwweGNlLDB4MzUsMHhmMCwweGZkLDB4ZTQsMHgzYywweGZjLDB4MjJ9IH0sCit7ICAxNiwweDBkOTEsMCx7MHhlYiwweDlmLDB4ZjUsMHhmMCwweGVhLDB4OWUsMHg0MiwweGYwLDB4ZTksMHg5ZCwweDQyLDB4ZjAsMHhlOCwweDljLDB4NDUsMHhmMH0gfSwKK3sgICAxLDB4MGRhMSwwLHsweDIyfSB9LAoreyAgMTYsMHgwZGEyLDAsezB4YmIsMHgwMSwweDBkLDB4ZTUsMHg4MiwweDI5LDB4ZjUsMHg4MiwweGU1LDB4ODMsMHgzYSwweGY1LDB4ODMsMHgwMiwweDBlLDB4YTF9IH0sCit7ICAxNiwweDBkYjIsMCx7MHg1MCwweDA3LDB4ZTksMHgyNSwweDgyLDB4ZjgsMHgwMiwweDBlLDB4OTUsMHhiYiwweGZlLDB4MDcsMHhlOSwweDI1LDB4ODIsMHhmOH0gfSwKK3sgIDE2LDB4MGRjMiwwLHsweDAyLDB4MGUsMHhhZCwweGU1LDB4ODIsMHgyOSwweGY1LDB4ODIsMHhlNSwweDgzLDB4M2EsMHhmNSwweDgzLDB4MDIsMHgwZSwweGI5fSB9LAoreyAgMTYsMHgwZGQyLDAsezB4YmIsMHgwMSwweDBkLDB4ZTUsMHg4MiwweDI5LDB4ZjUsMHg4MiwweGU1LDB4ODMsMHgzYSwweGY1LDB4ODMsMHgwMiwweDBlLDB4ZDV9IH0sCit7ICAxNiwweDBkZTIsMCx7MHg1MCwweDA3LDB4ZTksMHgyNSwweDgyLDB4ZjgsMHgwMiwweDBlLDB4YzksMHhiYiwweGZlLDB4MDcsMHhlOSwweDI1LDB4ODIsMHhmOH0gfSwKK3sgICA0LDB4MGRmMiwwLHsweDAyLDB4MGUsMHhlMSwweDIyfSB9LAoreyAgMTYsMHgwZGY2LDAsezB4YmIsMHgwMSwweDBkLDB4ZTUsMHg4MiwweDI5LDB4ZjUsMHg4MiwweGU1LDB4ODMsMHgzYSwweGY1LDB4ODMsMHgwMiwweDBmLDB4MDZ9IH0sCit7ICAxNiwweDBlMDYsMCx7MHg1MCwweDA3LDB4ZTksMHgyNSwweDgyLDB4ZjgsMHgwMiwweDBlLDB4ZWQsMHhiYiwweGZlLDB4MDcsMHhlOSwweDI1LDB4ODIsMHhmOH0gfSwKK3sgICA0LDB4MGUxNiwwLHsweDAyLDB4MGYsMHgzNywweDIyfSB9LAoreyAgMTYsMHgwZTFhLDAsezB4ZDAsMHg4MywweGQwLDB4ODIsMHhmOCwweGU0LDB4OTMsMHg3MCwweDEyLDB4NzQsMHgwMSwweDkzLDB4NzAsMHgwZCwweGEzLDB4YTN9IH0sCit7ICAxNiwweDBlMmEsMCx7MHg5MywweGY4LDB4NzQsMHgwMSwweDkzLDB4ZjUsMHg4MiwweDg4LDB4ODMsMHhlNCwweDczLDB4NzQsMHgwMiwweDkzLDB4NjgsMHg2MH0gfSwKK3sgICA2LDB4MGUzYSwwLHsweGVmLDB4YTMsMHhhMywweGEzLDB4ODAsMHhkZn0gfSwKK3sgIDE2LDB4MGU0MCwwLHsweGJjLDB4MDAsMHgwYiwweGJlLDB4MDAsMHgyOSwweGVmLDB4OGQsMHhmMCwweDg0LDB4ZmYsMHhhZCwweGYwLDB4MjIsMHhlNCwweGNjfSB9LAoreyAgMTYsMHgwZTUwLDAsezB4ZjgsMHg3NSwweGYwLDB4MDgsMHhlZiwweDJmLDB4ZmYsMHhlZSwweDMzLDB4ZmUsMHhlYywweDMzLDB4ZmMsMHhlZSwweDlkLDB4ZWN9IH0sCit7ICAxNiwweDBlNjAsMCx7MHg5OCwweDQwLDB4MDUsMHhmYywweGVlLDB4OWQsMHhmZSwweDBmLDB4ZDUsMHhmMCwweGU5LDB4ZTQsMHhjZSwweGZkLDB4MjIsMHhlZH0gfSwKK3sgIDE2LDB4MGU3MCwwLHsweGY4LDB4ZjUsMHhmMCwweGVlLDB4ODQsMHgyMCwweGQyLDB4MWMsMHhmZSwweGFkLDB4ZjAsMHg3NSwweGYwLDB4MDgsMHhlZiwweDJmfSB9LAoreyAgMTYsMHgwZTgwLDAsezB4ZmYsMHhlZCwweDMzLDB4ZmQsMHg0MCwweDA3LDB4OTgsMHg1MCwweDA2LDB4ZDUsMHhmMCwweGYyLDB4MjIsMHhjMywweDk4LDB4ZmR9IH0sCit7ICAgNSwweDBlOTAsMCx7MHgwZiwweGQ1LDB4ZjAsMHhlYSwweDIyfSB9LAoreyAgMTIsMHgwZTk1LDAsezB4ZTYsMHhmYywweDA4LDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmZSwweDA4LDB4ZTYsMHhmZiwweDIyfSB9LAoreyAgMTIsMHgwZWExLDAsezB4ZTAsMHhmYywweGEzLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDIyfSB9LAoreyAgMTIsMHgwZWFkLDAsezB4ZTIsMHhmYywweDA4LDB4ZTIsMHhmZCwweDA4LDB4ZTIsMHhmZSwweDA4LDB4ZTIsMHhmZiwweDIyfSB9LAoreyAgMTYsMHgwZWI5LDAsezB4ZTQsMHg5MywweGZjLDB4YTMsMHhlNCwweDkzLDB4ZmQsMHhhMywweGU0LDB4OTMsMHhmZSwweGEzLDB4ZTQsMHg5MywweGZmLDB4MjJ9IH0sCit7ICAxMiwweDBlYzksMCx7MHhlYywweGY2LDB4MDgsMHhlZCwweGY2LDB4MDgsMHhlZSwweGY2LDB4MDgsMHhlZiwweGY2LDB4MjJ9IH0sCit7ICAxMiwweDBlZDUsMCx7MHhlYywweGYwLDB4YTMsMHhlZCwweGYwLDB4YTMsMHhlZSwweGYwLDB4YTMsMHhlZiwweGYwLDB4MjJ9IH0sCit7ICAxMiwweDBlZTEsMCx7MHhlYywweGYyLDB4MDgsMHhlZCwweGYyLDB4MDgsMHhlZSwweGYyLDB4MDgsMHhlZiwweGYyLDB4MjJ9IH0sCit7ICAxNiwweDBlZWQsMCx7MHhkMCwweDgzLDB4ZDAsMHg4MiwweGU0LDB4OTMsMHhmNiwweDA4LDB4NzQsMHgwMSwweDkzLDB4ZjYsMHgwOCwweDc0LDB4MDIsMHg5M30gfSwKK3sgICA5LDB4MGVmZCwwLHsweGY2LDB4MDgsMHg3NCwweDAzLDB4OTMsMHhmNiwweDc0LDB4MDQsMHg3M30gfSwKK3sgIDE2LDB4MGYwNiwwLHsweGE4LDB4ODIsMHg4NSwweDgzLDB4ZjAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweDEyLDB4MGYsMHgxZCwweDEyLDB4MGYsMHgxZCwweDEyfSB9LAoreyAgMTYsMHgwZjE2LDAsezB4MGYsMHgxZCwweDEyLDB4MGYsMHgxZCwweGU0LDB4NzMsMHhlNCwweDkzLDB4YTMsMHhjNSwweDgzLDB4YzUsMHhmMCwweGM1LDB4ODN9IH0sCit7ICAxNiwweDBmMjYsMCx7MHhjOCwweGM1LDB4ODIsMHhjOCwweGYwLDB4YTMsMHhjNSwweDgzLDB4YzUsMHhmMCwweGM1LDB4ODMsMHhjOCwweGM1LDB4ODIsMHhjOH0gfSwKK3sgICAxLDB4MGYzNiwwLHsweDIyfSB9LAoreyAgMTYsMHgwZjM3LDAsezB4ZDAsMHg4MywweGQwLDB4ODIsMHhlNCwweDkzLDB4ZjIsMHgwOCwweDc0LDB4MDEsMHg5MywweGYyLDB4MDgsMHg3NCwweDAyLDB4OTN9IH0sCit7ICAgOSwweDBmNDcsMCx7MHhmMiwweDA4LDB4NzQsMHgwMywweDkzLDB4ZjIsMHg3NCwweDA0LDB4NzN9IH0sCit7ICAxNiwweDBmNTAsMCx7MHhjMiwweGFmLDB4ZDIsMHgyYywweDkwLDB4N2YsMHg5MywweDc0LDB4MzAsMHhmMCwweDkwLDB4N2YsMHg5YywweDc0LDB4YmYsMHhmMH0gfSwKK3sgIDE2LDB4MGY2MCwwLHsweDkwLDB4N2YsMHg5NiwweGUwLDB4NTQsMHgzMCwweGYwLDB4OTAsMHg3ZiwweDk0LDB4NzQsMHgzMCwweGYwLDB4OTAsMHg3ZiwweDlkfSB9LAoreyAgMTYsMHgwZjcwLDAsezB4NzQsMHhjZiwweGYwLDB4OTAsMHg3ZiwweDk3LDB4NzQsMHhhMCwweGYwLDB4OTAsMHg3ZiwweDk1LDB4NzQsMHhjYywweGYwLDB4ZTR9IH0sCit7ICAxNiwweDBmODAsMCx7MHg5MCwweDdmLDB4OWUsMHhmMCwweGMyLDB4MmQsMHhjMiwweDJhLDB4YzIsMHgyYiwweGMyLDB4MmUsMHg5MCwweDc5LDB4NzQsMHgwNH0gfSwKK3sgIDE2LDB4MGY5MCwwLHsweGYwLDB4MTIsMHgyZSwweDk0LDB4MTIsMHg0OSwweGUyLDB4MTIsMHg0YiwweGU2LDB4MTIsMHgzMiwweDBkLDB4MTIsMHgzYiwweDBkfSB9LAoreyAgMTYsMHgwZmEwLDAsezB4MTIsMHg0MSwweGZkLDB4MTIsMHgzZSwweDk5LDB4ZTUsMHgxZiwweDcwLDB4MTgsMHg3NSwweDFmLDB4MDEsMHgxMiwweDE3LDB4ZmZ9IH0sCit7ICAxNiwweDBmYjAsMCx7MHgxMiwweDJmLDB4ZmYsMHgxMiwweDQ5LDB4YzgsMHgxMiwweDRiLDB4ZDgsMHgxMiwweDRiLDB4ZGEsMHgxMiwweDQ5LDB4NmYsMHgxMn0gfSwKK3sgIDE2LDB4MGZjMCwwLHsweDFiLDB4NDAsMHgxMiwweDM5LDB4OGQsMHg5MCwweDdmLDB4YWYsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHhhZSwweGUwfSB9LAoreyAgMTYsMHgwZmQwLDAsezB4NDQsMHgxZiwweGYwLDB4OTAsMHg3ZiwweGFjLDB4NzQsMHhmZiwweGYwLDB4OTAsMHg3ZiwweGFkLDB4ZjAsMHg5MCwweDdmLDB4ZGV9IH0sCit7ICAxNiwweDBmZTAsMCx7MHhmMCwweDkwLDB4N2YsMHhkZiwweGYwLDB4OTAsMHg3ZiwweGFiLDB4ZjAsMHg5MCwweDdmLDB4YTksMHhmMCwweDkwLDB4N2YsMHhhYX0gfSwKK3sgIDE2LDB4MGZmMCwwLHsweGYwLDB4NTMsMHg5MSwweGVmLDB4NDMsMHhkOCwweDIwLDB4ZDIsMHhlOCwweDQzLDB4ZDgsMHgyMCwweDQzLDB4YTgsMHg4MCwweDIyfSB9LAoreyAgMTYsMHgxMDAwLDAsezB4OTAsMHg3OSwweDYzLDB4ZTAsMHgxNCwweDYwLDB4NDQsMHgxNCwweDcwLDB4MDIsMHgyMSwweGQwLDB4MTQsMHg3MCwweDAyLDB4NDF9IH0sCit7ICAxNiwweDEwMTAsMCx7MHhkOSwweDE0LDB4NzAsMHgwMiwweDYxLDB4ZDcsMHgyNCwweDA0LDB4NjAsMHgwMiwweDgxLDB4NTYsMHhlNCwweDkwLDB4NzksMHg3OH0gfSwKK3sgIDE2LDB4MTAyMCwwLHsweGYwLDB4OTAsMHg3OSwweDdiLDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDQ0LDB4MDEsMHhmMCwweDU0LDB4ZmQsMHhmMCwweDkwfSB9LAoreyAgMTYsMHgxMDMwLDAsezB4NzksMHg3YiwweGYwLDB4ZTQsMHg5MCwweDc5LDB4ODgsMHhmMCwweGEyLDB4YWYsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTJ9IH0sCit7ICAxNiwweDEwNDAsMCx7MHgwYiwweGEyLDB4ZTUsMHgxMiwweDcwLDB4MDIsMHg4MSwweDU2LDB4ZDIsMHhhZiwweDIyLDB4OTAsMHg3OSwweDJkLDB4ZTAsMHg2NH0gfSwKK3sgIDE2LDB4MTA1MCwwLHsweDAxLDB4NzAsMHg3OSwweDkwLDB4N2YsMHhmMiwweGYwLDB4OTAsMHg3ZiwweGYzLDB4NzQsMHgzMCwweGYwLDB4OTAsMHg3ZiwweGZmfSB9LAoreyAgMTYsMHgxMDYwLDAsezB4NzQsMHhmYywweGYwLDB4ZTQsMHg5MCwweDc5LDB4NzgsMHhmMCwweDkwLDB4NzksMHg3YiwweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjB9IH0sCit7ICAxNiwweDEwNzAsMCx7MHg0NCwweDAxLDB4ZjAsMHg0NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4N2IsMHhmMCwweGEyLDB4YWYsMHhlNCwweDMzLDB4ZjUsMHgxMn0gfSwKK3sgIDE2LDB4MTA4MCwwLHsweGMyLDB4YWYsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4NzgsMHg3NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4ODQsMHhlMCwweDkwfSB9LAoreyAgMTYsMHgxMDkwLDAsezB4NzksMHg3OSwweGYwLDB4OTAsMHg3OSwweDdmLDB4ZTAsMHhiNCwweDAxLDB4MDksMHg5MCwweDc5LDB4NzksMHhlMCwweDU0LDB4ZmV9IH0sCit7ICAxNiwweDEwYTAsMCx7MHhmMCwweDgwLDB4MDcsMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmZH0gfSwKK3sgIDE2LDB4MTBiMCwwLHsweGYwLDB4NTQsMHhmYiwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZjAsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4ODIsMHg3NCwweDA0fSB9LAoreyAgMTYsMHgxMGMwLDAsezB4ZjAsMHg5MCwweDc5LDB4ODgsMHgxNCwweGYwLDB4ZTUsMHgxMiwweDYwLDB4MDIsMHhkMiwweGFmLDB4OTAsMHg3OSwweDJkLDB4ZTB9IH0sCit7ICAxNiwweDEwZDAsMCx7MHg2NCwweDAyLDB4NzAsMHg3OSwweDkwLDB4N2YsMHhmMiwweGYwLDB4OTAsMHg3ZiwweGYzLDB4NzQsMHgzNCwweGYwLDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MTBlMCwwLHsweGZmLDB4NzQsMHhmYywweGYwLDB4ZTQsMHg5MCwweDc5LDB4NzgsMHhmMCwweDkwLDB4NzksMHg3YiwweGUwLDB4OTAsMHg3OSwweDc5fSB9LAoreyAgMTYsMHgxMGYwLDAsezB4ZjAsMHg0NCwweDAxLDB4ZjAsMHg0NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4N2IsMHhmMCwweGEyLDB4YWYsMHhlNCwweDMzLDB4ZjV9IH0sCit7ICAxNiwweDExMDAsMCx7MHgxMiwweGMyLDB4YWYsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4NzgsMHg3NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4ODQsMHhlMH0gfSwKK3sgIDE2LDB4MTExMCwwLHsweDkwLDB4NzksMHg3OSwweGYwLDB4OTAsMHg3OSwweDdmLDB4ZTAsMHhiNCwweDAxLDB4MDksMHg5MCwweDc5LDB4NzksMHhlMCwweDU0fSB9LAoreyAgMTYsMHgxMTIwLDAsezB4ZmUsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3OSwweGUwLDB4NDR9IH0sCit7ICAxNiwweDExMzAsMCx7MHgwMiwweGYwLDB4NTQsMHhmYiwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZjAsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4ODIsMHg3NH0gfSwKK3sgIDE2LDB4MTE0MCwwLHsweDA0LDB4ZjAsMHg5MCwweDc5LDB4ODgsMHgxNCwweGYwLDB4ZTUsMHgxMiwweDYwLDB4MDIsMHhkMiwweGFmLDB4OTAsMHg3OSwweDJkfSB9LAoreyAgMTYsMHgxMTUwLDAsezB4ZTAsMHg2NCwweDAzLDB4NjAsMHgwMiwweDgxLDB4NTYsMHg5MCwweDdmLDB4ZjIsMHhmMCwweDkwLDB4N2YsMHhmMywweDc0LDB4NjR9IH0sCit7ICAxNiwweDExNjAsMCx7MHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweGU0LDB4OTAsMHg3OSwweDc4LDB4ZjAsMHg5MCwweDc5LDB4N2IsMHhlMH0gfSwKK3sgIDE2LDB4MTE3MCwwLHsweDkwLDB4NzksMHg3OSwweGYwLDB4NDQsMHgwMSwweGYwLDB4NDQsMHgwMiwweGYwLDB4OTAsMHg3OSwweDdiLDB4ZjAsMHhhMiwweGFmfSB9LAoreyAgMTYsMHgxMTgwLDAsezB4ZTQsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMiwweGYwLDB4OTB9IH0sCit7ICAxNiwweDExOTAsMCx7MHg3OSwweDg0LDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDkwLDB4NzksMHg3ZiwweGUwLDB4YjQsMHgwMSwweDA5LDB4OTAsMHg3OX0gfSwKK3sgIDE2LDB4MTFhMCwwLHsweDc5LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc5fSB9LAoreyAgMTYsMHgxMWIwLDAsezB4NzksMHhlMCwweDQ0LDB4MDQsMHhmMCwweDkwLDB4NzksMHg4NCwweGYwLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDgyLDB4NzR9IH0sCit7ICAxNiwweDExYzAsMCx7MHgwNCwweGYwLDB4OTAsMHg3OSwweDg4LDB4MTQsMHhmMCwweGU1LDB4MTIsMHg3MCwweDAyLDB4ODEsMHg1NiwweGQyLDB4YWYsMHgyMn0gfSwKK3sgIDE2LDB4MTFkMCwwLHsweDkwLDB4NzksMHgyZCwweGUwLDB4NjQsMHgwMSwweDcwLDB4N2EsMHg5MCwweDdmLDB4ZjIsMHhmMCwweDkwLDB4N2YsMHhmMywweDc0fSB9LAoreyAgMTYsMHgxMWUwLDAsezB4ODgsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweGU0LDB4OTAsMHg3OSwweDc4LDB4ZjAsMHg5MCwweDc5LDB4N2J9IH0sCit7ICAxNiwweDExZjAsMCx7MHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4NDQsMHgwMSwweGYwLDB4NTQsMHhmZCwweGYwLDB4OTAsMHg3OSwweDdiLDB4ZjAsMHhhMn0gfSwKK3sgIDE2LDB4MTIwMCwwLHsweGFmLDB4ZTQsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMiwweGYwfSB9LAoreyAgMTYsMHgxMjEwLDAsezB4OTAsMHg3OSwweDg0LDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDkwLDB4NzksMHg3ZiwweGUwLDB4YjQsMHgwMSwweDA5LDB4OTB9IH0sCit7ICAxNiwweDEyMjAsMCx7MHg3OSwweDc5LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4MTIzMCwwLHsweDc5LDB4NzksMHhlMCwweDU0LDB4ZmQsMHhmMCwweDU0LDB4ZmIsMHhmMCwweDkwLDB4NzksMHg4NCwweGYwLDB4MTIsMHgwYiwweGEyfSB9LAoreyAgMTYsMHgxMjQwLDAsezB4OTAsMHg3OSwweDgyLDB4NzQsMHgwYywweGYwLDB4OTAsMHg3OSwweDg4LDB4NzQsMHgwMSwweGYwLDB4ZTUsMHgxMiwweDYwLDB4MDJ9IH0sCit7ICAxNiwweDEyNTAsMCx7MHhkMiwweGFmLDB4OTAsMHg3OSwweDJkLDB4ZTAsMHg2NCwweDAyLDB4NjAsMHgwMiwweDgxLDB4NTYsMHg5MCwweDdmLDB4ZjIsMHhmMH0gfSwKK3sgIDE2LDB4MTI2MCwwLHsweDkwLDB4N2YsMHhmMywweDc0LDB4OTQsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweGU0LDB4OTAsMHg3OSwweDc4fSB9LAoreyAgMTYsMHgxMjcwLDAsezB4ZjAsMHg5MCwweDc5LDB4N2IsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4NDQsMHgwMSwweGYwLDB4NTQsMHhmZCwweGYwLDB4OTB9IH0sCit7ICAxNiwweDEyODAsMCx7MHg3OSwweDdiLDB4ZjAsMHhhMiwweGFmLDB4ZTQsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OX0gfSwKK3sgIDE2LDB4MTI5MCwwLHsweDc4LDB4NzQsMHgwMiwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDkwLDB4NzksMHg3ZiwweGUwfSB9LAoreyAgMTYsMHgxMmEwLDAsezB4YjQsMHgwMSwweDA5LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3OSwweDc5LDB4ZTB9IH0sCit7ICAxNiwweDEyYjAsMCx7MHg0NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDIsMHhmMCwweDU0LDB4ZmIsMHhmMCwweDkwLDB4NzksMHg4NH0gfSwKK3sgIDE2LDB4MTJjMCwwLHsweGYwLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDgyLDB4NzQsMHgwYywweGYwLDB4OTAsMHg3OSwweDg4LDB4NzQsMHgwMSwweGYwfSB9LAoreyAgMTYsMHgxMmQwLDAsezB4ZTUsMHgxMiwweDcwLDB4MDIsMHg4MSwweDU2LDB4ZDIsMHhhZiwweDIyLDB4OTAsMHg3OSwweDJkLDB4ZTAsMHg2NCwweDAxLDB4NzB9IH0sCit7ICAxNiwweDEyZTAsMCx7MHg3NywweDkwLDB4N2YsMHhmMiwweGYwLDB4OTAsMHg3ZiwweGYzLDB4NzQsMHhjYywweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmY30gfSwKK3sgIDE2LDB4MTJmMCwwLHsweGYwLDB4ZTQsMHg5MCwweDc5LDB4NzgsMHhmMCwweDkwLDB4NzksMHg3YiwweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg1NCwweGZjfSB9LAoreyAgMTYsMHgxMzAwLDAsezB4ZjAsMHg5MCwweDc5LDB4N2IsMHhmMCwweGEyLDB4YWYsMHhlNCwweDMzLDB4ZjUsMHgxMiwweGMyLDB4YWYsMHgxMiwweDBiLDB4YTJ9IH0sCit7ICAxNiwweDEzMTAsMCx7MHg5MCwweDc5LDB4NzgsMHg3NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4ODQsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4OTAsMHg3OX0gfSwKK3sgIDE2LDB4MTMyMCwwLHsweDdmLDB4ZTAsMHhiNCwweDAxLDB4MDksMHg5MCwweDc5LDB4NzksMHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc5fSB9LAoreyAgMTYsMHgxMzMwLDAsezB4NzksMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmZCwweGYwLDB4NTQsMHhmYiwweGYwLDB4OTB9IH0sCit7ICAxNiwweDEzNDAsMCx7MHg3OSwweDg0LDB4ZjAsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4ODIsMHg3NCwweDEyLDB4ZjAsMHg5MCwweDc5LDB4ODgsMHg3NH0gfSwKK3sgIDE2LDB4MTM1MCwwLHsweDAyLDB4ZjAsMHhlNSwweDEyLDB4NjAsMHgwMiwweGQyLDB4YWYsMHg5MCwweDc5LDB4MmQsMHhlMCwweDY0LDB4MDIsMHg3MCwweDc3fSB9LAoreyAgMTYsMHgxMzYwLDAsezB4OTAsMHg3ZiwweGYyLDB4ZjAsMHg5MCwweDdmLDB4ZjMsMHg3NCwweGUwLDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjB9IH0sCit7ICAxNiwweDEzNzAsMCx7MHhlNCwweDkwLDB4NzksMHg3OCwweGYwLDB4OTAsMHg3OSwweDdiLDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDU0LDB4ZmMsMHhmMH0gfSwKK3sgIDE2LDB4MTM4MCwwLHsweDkwLDB4NzksMHg3YiwweGYwLDB4YTIsMHhhZiwweGU0LDB4MzMsMHhmNSwweDEyLDB4YzIsMHhhZiwweDEyLDB4MGIsMHhhMiwweDkwfSB9LAoreyAgMTYsMHgxMzkwLDAsezB4NzksMHg3OCwweDc0LDB4MDIsMHhmMCwweDkwLDB4NzksMHg4NCwweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg5MCwweDc5LDB4N2Z9IH0sCit7ICAxNiwweDEzYTAsMCx7MHhlMCwweGI0LDB4MDEsMHgwOSwweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmZSwweGYwLDB4ODAsMHgwNywweDkwLDB4NzksMHg3OX0gfSwKK3sgIDE2LDB4MTNiMCwwLHsweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg0NCwweDAyLDB4ZjAsMHg1NCwweGZiLDB4ZjAsMHg5MCwweDc5fSB9LAoreyAgMTYsMHgxM2MwLDAsezB4ODQsMHhmMCwweDEyLDB4MGIsMHhhMiwweDkwLDB4NzksMHg4MiwweDc0LDB4MTIsMHhmMCwweDkwLDB4NzksMHg4OCwweDc0LDB4MDJ9IH0sCit7ICAxNiwweDEzZDAsMCx7MHhmMCwweGU1LDB4MTIsMHg2MCwweDAyLDB4ZDIsMHhhZiwweDkwLDB4NzksMHgyZCwweGUwLDB4NjQsMHgwMywweDcwLDB4NzcsMHg5MH0gfSwKK3sgIDE2LDB4MTNlMCwwLHsweDdmLDB4ZjIsMHhmMCwweDkwLDB4N2YsMHhmMywweDc0LDB4OTQsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweGU0fSB9LAoreyAgMTYsMHgxM2YwLDAsezB4OTAsMHg3OSwweDc4LDB4ZjAsMHg5MCwweDc5LDB4N2IsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4NTQsMHhmZSwweGYwLDB4NDR9IH0sCit7ICAxNiwweDE0MDAsMCx7MHgwMiwweGYwLDB4OTAsMHg3OSwweDdiLDB4ZjAsMHhhMiwweGFmLDB4ZTQsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTIsMHgwYn0gfSwKK3sgIDE2LDB4MTQxMCwwLHsweGEyLDB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMiwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDkwfSB9LAoreyAgMTYsMHgxNDIwLDAsezB4NzksMHg3ZiwweGUwLDB4YjQsMHgwMSwweDA5LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTB9IH0sCit7ICAxNiwweDE0MzAsMCx7MHg3OSwweDc5LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDQsMHhmMCwweDkwLDB4NzksMHg4NH0gfSwKK3sgIDE2LDB4MTQ0MCwwLHsweGYwLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDgyLDB4NzQsMHgwNiwweGYwLDB4OTAsMHg3OSwweDg4LDB4NzQsMHgwNCwweGYwfSB9LAoreyAgIDcsMHgxNDUwLDAsezB4ZTUsMHgxMiwweDYwLDB4MDIsMHhkMiwweGFmLDB4MjJ9IH0sCit7ICAxNiwweDE0NTcsMCx7MHhjMiwweDI4LDB4YzIsMHgyOSwweDkwLDB4N2YsMHhlOCwweGUwLDB4MTIsMHgwZSwweDFhLDB4MTQsMHg4NCwweDAwLDB4MTQsMHhlMH0gfSwKK3sgIDE2LDB4MTQ2NywwLHsweDAxLDB4MTQsMHhmNiwweDAyLDB4MTYsMHg3YywweDIxLDB4MTYsMHhiZSwweDIyLDB4MTUsMHg5MSwweDgwLDB4MTUsMHhkMSwweDgxfSB9LAoreyAgMTYsMHgxNDc3LDAsezB4MTYsMHgyZSwweDgyLDB4MTYsMHhjZiwweGExLDB4MTcsMHgwNSwweGEyLDB4MDAsMHgwMCwweDE3LDB4MGEsMHg5MCwweDdmLDB4ZTl9IH0sCit7ICAxNiwweDE0ODcsMCx7MHhlMCwweDE0LDB4NjAsMHgxMSwweDI0LDB4ZmUsMHg2MCwweDI4LDB4MjQsMHhmZSwweDYwLDB4M2IsMHgyNCwweGZjLDB4NzAsMHg0MH0gfSwKK3sgIDE2LDB4MTQ5NywwLHsweDEyLDB4NGEsMHgyYSwweGUxLDB4MTYsMHgxMiwweDRiLDB4ZTAsMHg0MCwweDAyLDB4ZTEsMHgxNiwweDkwLDB4N2YsMHhlYSwweGUwfSB9LAoreyAgMTYsMHgxNGE3LDAsezB4YjQsMHgwMSwweDA0LDB4YzIsMHgyYSwweGUxLDB4MTYsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweGUxLDB4MTZ9IH0sCit7ICAxNiwweDE0YjcsMCx7MHgxMiwweDRiLDB4ZTIsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGI0LDB4MDEsMHgwNCwweGQyLDB4MmEsMHhlMSwweDE2LDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MTRjNywwLHsweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhlMSwweDE2LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhlMSwweDE2fSB9LAoreyAgMTYsMHgxNGQ3LDAsezB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhlMSwweDE2LDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweGY1LDB4NzB9IH0sCit7ICAxNiwweDE0ZTcsMCx7MHgwNSwweDEyLDB4NDcsMHg5YywweGUxLDB4MTYsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweGUxLDB4MTYsMHg5MH0gfSwKK3sgIDE2LDB4MTRmNywwLHsweDdmLDB4ZTksMHhlMCwweDI0LDB4ZmQsMHg2MCwweDU0LDB4MjQsMHgwMiwweDYwLDB4MDIsMHhhMSwweDg4LDB4MTIsMHg0YiwweGUwfSB9LAoreyAgMTYsMHgxNTA3LDAsezB4NDAsMHgwMiwweGUxLDB4MTYsMHg5MCwweDdmLDB4ZWEsMHhlMCwweDcwLDB4MzgsMHg5MCwweDdmLDB4ZWMsMHhlMCwweGY0LDB4NTR9IH0sCit7ICAxNiwweDE1MTcsMCx7MHg4MCwweGZmLDB4YzQsMHg1NCwweDBmLDB4ZmYsMHhlMCwweDU0LDB4MDcsMHgyZiwweDI1LDB4ZTAsMHgyNCwweGI0LDB4ZjUsMHg4Mn0gfSwKK3sgIDE2LDB4MTUyNywwLHsweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHg1NCwweDgwLDB4ZmYsMHgxMywweDEzfSB9LAoreyAgMTYsMHgxNTM3LDAsezB4MTMsMHg1NCwweDFmLDB4ZmYsMHhlMCwweDU0LDB4MDcsMHgyZiwweDkwLDB4N2YsMHhkNywweGYwLDB4ZTAsMHg0NCwweDIwLDB4ZjB9IH0sCit7ICAxNiwweDE1NDcsMCx7MHhlMSwweDE2LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhlMSwweDE2LDB4MTIsMHg0YiwweGUyLDB4NDAsMHgwMn0gfSwKK3sgIDE2LDB4MTU1NywwLHsweGUxLDB4MTYsMHg5MCwweDdmLDB4ZWEsMHhlMCwweDcwLDB4MjAsMHg5MCwweDdmLDB4ZWMsMHhlMCwweGY0LDB4NTQsMHg4MCwweGZmfSB9LAoreyAgMTYsMHgxNTY3LDAsezB4YzQsMHg1NCwweDBmLDB4ZmYsMHhlMCwweDU0LDB4MDcsMHgyZiwweDI1LDB4ZTAsMHgyNCwweGI0LDB4ZjUsMHg4MiwweGU0LDB4MzR9IH0sCit7ICAxNiwweDE1NzcsMCx7MHg3ZiwweGY1LDB4ODMsMHg3NCwweDAxLDB4ZjAsMHhlMSwweDE2LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhlMX0gfSwKK3sgIDE2LDB4MTU4NywwLHsweDE2LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhlMSwweDE2LDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHg2MCwweDEyfSB9LAoreyAgMTYsMHgxNTk3LDAsezB4MjQsMHhmOCwweDYwLDB4MDksMHgyNCwweDAyLDB4NzAsMHgyOSwweDEyLDB4MTcsMHgxZSwweGUxLDB4MTYsMHgxMiwweDRiLDB4YTB9IH0sCit7ICAxNiwweDE1YTcsMCx7MHhlMSwweDE2LDB4MTIsMHg0YiwweGRlLDB4YTIsMHgyYSwweGU0LDB4MzMsMHhmZiwweDI1LDB4ZTAsMHhmZiwweGEyLDB4MmIsMHhlNH0gfSwKK3sgIDE2LDB4MTViNywwLHsweDMzLDB4NGYsMHg5MCwweDdmLDB4MDAsMHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDIsMHhmMCwweGUxfSB9LAoreyAgMTYsMHgxNWM3LDAsezB4MTYsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweGUxLDB4MTYsMHg5MCwweDdmLDB4ZTksMHhlMCwweDYwLDB4Mzd9IH0sCit7ICAxNiwweDE1ZDcsMCx7MHgyNCwweGY2LDB4NjAsMHgyZSwweDI0LDB4MDQsMHg3MCwweDQxLDB4OTAsMHg3ZiwweGViLDB4ZTAsMHgyNCwweGRlLDB4NjAsMHgwZX0gfSwKK3sgIDE2LDB4MTVlNywwLHsweDA0LDB4NzAsMHgxNiwweGQyLDB4MjksMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweGUxLDB4MTYsMHhkMiwweDI5fSB9LAoreyAgMTYsMHgxNWY3LDAsezB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhlMSwweDE2LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjB9IH0sCit7ICAxNiwweDE2MDcsMCx7MHhlMSwweDE2LDB4MTIsMHg0NCwweDYzLDB4ZTEsMHgxNiwweDEyLDB4NGIsMHhkZSwweGU0LDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhhM30gfSwKK3sgIDE2LDB4MTYxNywwLHsweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMiwweGYwLDB4ZTEsMHgxNiwweDIwLDB4MjksMHgwNywweDkwLDB4N2YsMHhiNCwweGUwfSB9LAoreyAgMTYsMHgxNjI3LDAsezB4NDQsMHgwMSwweGYwLDB4YzIsMHgyOSwweGUxLDB4MTYsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4ZjQsMHg2MCwweDM0LDB4MjR9IH0sCit7ICAxNiwweDE2MzcsMCx7MHgwYywweDcwLDB4MzksMHgxMiwweDRiLDB4ZGUsMHg5MCwweDdmLDB4ZWMsMHhlMCwweGY0LDB4NTQsMHg4MCwweGZmLDB4YzQsMHg1NH0gfSwKK3sgIDE2LDB4MTY0NywwLHsweDBmLDB4ZmYsMHhlMCwweDU0LDB4MDcsMHgyZiwweDI1LDB4ZTAsMHgyNCwweGI0LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1fSB9LAoreyAgMTYsMHgxNjU3LDAsezB4ODMsMHhlMCwweDU0LDB4ZmQsMHg5MCwweDdmLDB4MDAsMHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDJ9IH0sCit7ICAxNiwweDE2NjcsMCx7MHhmMCwweGUxLDB4MTYsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweGUxLDB4MTYsMHg5MCwweDdmLDB4YjQsMHhlMH0gfSwKK3sgIDE2LDB4MTY3NywwLHsweDQ0LDB4MDEsMHhmMCwweGUxLDB4MTYsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4ZjYsMHg2MCwweDEyLDB4MTQsMHg2MCwweDFhfSB9LAoreyAgMTYsMHgxNjg3LDAsezB4MjQsMHgwMiwweDcwLDB4MWQsMHhkMiwweDI4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg4MCwweDEyLDB4ZDJ9IH0sCit7ICAxNiwweDE2OTcsMCx7MHgyOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4ODAsMHgwNywweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMX0gfSwKK3sgIDE2LDB4MTZhNywwLHsweGYwLDB4MjAsMHgyOCwweDBmLDB4OTAsMHg3OSwweDg1LDB4NzQsMHgwMSwweGYwLDB4MTIsMHg0OSwweDZmLDB4OTAsMHg3ZiwweGM1fSB9LAoreyAgMTYsMHgxNmI3LDAsezB4NzQsMHgwMiwweGYwLDB4YzIsMHgyOCwweDgwLDB4NTgsMHg5MCwweDc5LDB4ODYsMHg3NCwweDAxLDB4ZjAsMHgxMiwweDQ5LDB4NmZ9IH0sCit7ICAxNiwweDE2YzcsMCx7MHg5MCwweDdmLDB4YzUsMHg3NCwweDAyLDB4ZjAsMHg4MCwweDQ3LDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweGZlLDB4NjAsMHgxMn0gfSwKK3sgIDE2LDB4MTZkNywwLHsweDE0LDB4NjAsMHgxYSwweDI0LDB4MDIsMHg3MCwweDFkLDB4ZDIsMHgyOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgMTYsMHgxNmU3LDAsezB4ODAsMHgxMiwweGQyLDB4MjgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDgwLDB4MDcsMHg5MCwweDdmLDB4YjR9IH0sCit7ICAxNiwweDE2ZjcsMCx7MHhlMCwweDQ0LDB4MDEsMHhmMCwweDIwLDB4MjgsMHgwMywweDEyLDB4MWEsMHg3YiwweGMyLDB4MjgsMHg4MCwweDExLDB4MTIsMHgyY30gfSwKK3sgIDE2LDB4MTcwNywwLHsweDJiLDB4ODAsMHgwYywweDEyLDB4NGIsMHhlNCwweDUwLDB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwfSB9LAoreyAgIDcsMHgxNzE3LDAsezB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMiwweGYwLDB4MjJ9IH0sCit7ICAxNiwweDE3MWUsMCx7MHgxMiwweDRiLDB4ZGMsMHg0MCwweDAyLDB4ZTEsMHhlMywweDkwLDB4N2YsMHhlYiwweGUwLDB4MjQsMHhmZSwweDYwLDB4MWUsMHgxNH0gfSwKK3sgIDE2LDB4MTcyZSwwLHsweDYwLDB4NDYsMHgxNCwweDYwLDB4NmUsMHgxNCwweDcwLDB4MDIsMHhlMSwweGQ0LDB4MjQsMHgwNCwweDYwLDB4MDIsMHhlMSwweGRjfSB9LAoreyAgMTYsMHgxNzNlLDAsezB4NzQsMHgwNSwweDkwLDB4N2YsMHhkNCwweGYwLDB4NzQsMHgwMCwweDkwLDB4N2YsMHhkNSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZWF9IH0sCit7ICAxNiwweDE3NGUsMCx7MHhlMCwweGZmLDB4MTIsMHgzZiwweGEyLDB4OGIsMHgzMywweDhhLDB4MzQsMHg4OSwweDM1LDB4ZWEsMHg0OSwweDYwLDB4MTEsMHhjZX0gfSwKK3sgIDE2LDB4MTc1ZSwwLHsweGVhLDB4Y2UsMHhlZSwweDkwLDB4N2YsMHhkNCwweGYwLDB4Y2YsMHhlOSwweGNmLDB4ZWYsMHg5MCwweDdmLDB4ZDUsMHhmMCwweDIyfSB9LAoreyAgMTYsMHgxNzZlLDAsezB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmYsMHgxMiwweDQ4LDB4MDB9IH0sCit7ICAxNiwweDE3N2UsMCx7MHg4YiwweDMzLDB4OGEsMHgzNCwweDg5LDB4MzUsMHhlYSwweDQ5LDB4NjAsMHgxMSwweGNlLDB4ZWEsMHhjZSwweGVlLDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MTc4ZSwwLHsweGQ0LDB4ZjAsMHhjZiwweGU5LDB4Y2YsMHhlZiwweDkwLDB4N2YsMHhkNSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0fSB9LAoreyAgMTYsMHgxNzllLDAsezB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmZiwweDkwLDB4N2UsMHhjMCwweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmJ9IH0sCit7ICAxNiwweDE3YWUsMCx7MHgxMiwweDQ0LDB4ZDIsMHg4YiwweDMzLDB4OGEsMHgzNCwweDg5LDB4MzUsMHhlYSwweDQ5LDB4NjAsMHgxMSwweGNlLDB4ZWEsMHhjZX0gfSwKK3sgIDE2LDB4MTdiZSwwLHsweGVlLDB4OTAsMHg3ZiwweGQ0LDB4ZjAsMHhjZiwweGU5LDB4Y2YsMHhlZiwweDkwLDB4N2YsMHhkNSwweGYwLDB4MjIsMHg5MCwweDdmfSB9LAoreyAgMTYsMHgxN2NlLDAsezB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2Z9IH0sCit7ICAgNSwweDE3ZGUsMCx7MHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgIDEsMHgxN2UzLDAsezB4MjJ9IH0sCit7ICAxNiwweDE3ZTQsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg5MCwweDdmLDB4YzQsMHhlNCwweGYwLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3Zn0gfSwKK3sgIDExLDB4MTdmNCwwLHsweGFiLDB4NzQsMHgwNCwweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAgMSwweDE3ZmYsMCx7MHgyMn0gfSwKK3sgIDE2LDB4MTgwMCwwLHsweGU0LDB4OTAsMHg3OCwweDE1LDB4ZjAsMHg3YiwweDAxLDB4OTAsMHg3OCwweDEyLDB4MDQsMHhmMCwweGEzLDB4NzQsMHg3OCwweGYwfSB9LAoreyAgMTYsMHgxODEwLDAsezB4YTMsMHg3NCwweDU4LDB4ZjAsMHg5MCwweDc4LDB4MTIsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTB9IH0sCit7ICAxNiwweDE4MjAsMCx7MHgwMCwweDAxLDB4MTIsMHgwYywweDVkLDB4ZmYsMHg5MCwweDc5LDB4OWEsMHhlMCwweDZmLDB4NjAsMHgxOCwweDkwLDB4NzgsMHgxNX0gfSwKK3sgIDE2LDB4MTgzMCwwLHsweGUwLDB4YzMsMHg5NCwweDA2LDB4NTAsMHgwZiwweGUwLDB4MDQsMHhmMCwweDkwLDB4NzgsMHgxMywweGU0LDB4NzUsMHhmMCwweDBmfSB9LAoreyAgMTYsMHgxODQwLDAsezB4MTIsMHgwYywweGY0LDB4ODAsMHhjZiwweDkwLDB4NzgsMHgxNSwweGUwLDB4YjQsMHgwNiwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTB9IH0sCit7ICAxNiwweDE4NTAsMCx7MHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4NzgsMHgxMiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHgxMn0gfSwKK3sgIDE2LDB4MTg2MCwwLHsweDBjLDB4NDQsMHhmZiwweDI0LDB4YmYsMHg3MCwweDAyLDB4NDEsMHg3YSwweDI0LDB4ZTAsMHg3MCwweDAyLDB4NDEsMHg0YywweDI0fSB9LAoreyAgMTYsMHgxODcwLDAsezB4MjEsMHg2MCwweDAyLDB4NDEsMHg3MywweDkwLDB4NzksMHg5NywweGUwLDB4MjQsMHhmZSwweDcwLDB4MDIsMHgyMSwweDlhLDB4MTR9IH0sCit7ICAxNiwweDE4ODAsMCx7MHg3MCwweDAyLDB4MjEsMHhlZiwweDI0LDB4MDIsMHg2MCwweDAyLDB4NDEsMHg0NCwweDkwLDB4NzksMHgyZCwweGUwLDB4YTMsMHhmMH0gfSwKK3sgIDE2LDB4MTg5MCwwLHsweDkwLDB4NzksMHgyMywweGUwLDB4ZmYsMHhlNCwweGZjLDB4ZmQsMHhmZSwweGZiLDB4ZmEsMHg3OSwweDAxLDB4ZjgsMHgxMiwweDBkfSB9LAoreyAgMTYsMHgxOGEwLDAsezB4NDIsMHhjOCwweGVjLDB4YzgsMHhjOSwweGVkLDB4YzksMHhjYSwweGVlLDB4Y2EsMHhjYiwweGVmLDB4Y2IsMHg5MCwweDc5LDB4MjJ9IH0sCit7ICAxNiwweDE4YjAsMCx7MHhlMCwweGZlLDB4ZTQsMHhmYywweGZkLDB4MmIsMHhmYiwweGVhLDB4M2UsMHhmYSwweGVkLDB4MzksMHhmOSwweGVjLDB4MzgsMHhmOH0gfSwKK3sgIDE2LDB4MThjMCwwLHsweDkwLDB4NzksMHgyMSwweGUwLDB4ZmYsMHhlNCwweGZlLDB4ZWIsMHgyZiwweGZmLDB4ZWUsMHgzYSwweGZlLDB4ZWQsMHgzOSwweGZkfSB9LAoreyAgMTYsMHgxOGQwLDAsezB4ZWMsMHgzOCwweGZjLDB4OTAsMHg3OCwweDEyLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDB9IH0sCit7ICAxNiwweDE4ZTAsMCx7MHgwMiwweDEyLDB4MGQsMHhkMiwweDkwLDB4MDAsMHgwMiwweDEyLDB4MGQsMHhhMiwweDdiLDB4NDQsMHg3YSwweGFjLDB4NzksMHgwMH0gfSwKK3sgIDE2LDB4MThmMCwwLHsweDc4LDB4MDAsMHhjMywweDEyLDB4MGQsMHg5MSwweDcwLDB4MDUsMHg5MCwweDc5LDB4MmQsMHgwNCwweGYwLDB4OTAsMHg3OCwweDEyfSB9LAoreyAgMTYsMHgxOTAwLDAsezB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMiwweDEyLDB4MGQsMHhhMiwweDdiLDB4ODB9IH0sCit7ICAxNiwweDE5MTAsMCx7MHg3YSwweGJiLDB4NzksMHgwMCwweDc4LDB4MDAsMHhjMywweDEyLDB4MGQsMHg5MSwweDcwLDB4MDYsMHg5MCwweDc5LDB4MmQsMHg3NH0gfSwKK3sgIDE2LDB4MTkyMCwwLHsweDAyLDB4ZjAsMHg5MCwweDc4LDB4MTIsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAyfSB9LAoreyAgMTYsMHgxOTMwLDAsezB4MTIsMHgwZCwweGEyLDB4N2IsMHgwMCwweDdhLDB4NzcsMHg3OSwweDAxLDB4NzgsMHgwMCwweGMzLDB4MTIsMHgwZCwweDkxLDB4NzB9IH0sCit7ICAxNiwweDE5NDAsMCx7MHgwNiwweDkwLDB4NzksMHgyZCwweDc0LDB4MDMsMHhmMCwweDkwLDB4NzksMHgyZCwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MDksMHg3NX0gfSwKK3sgIDE2LDB4MTk1MCwwLHsweDBjLDB4NjcsMHg3NSwweDBkLDB4MDYsMHg3NSwweDBlLDB4MGIsMHhlZiwweGI0LDB4MDIsMHgwOCwweGU0LDB4ZjUsMHgwYywweGY1fSB9LAoreyAgMTYsMHgxOTYwLDAsezB4MGQsMHg3NSwweDBlLDB4MGMsMHhlZiwweGI0LDB4MDMsMHgwOCwweGU0LDB4ZjUsMHgwYywweGY1LDB4MGQsMHg3NSwweDBlLDB4MTh9IH0sCit7ICAxNiwweDE5NzAsMCx7MHhlZiwweGI0LDB4MDMsMHgwZCwweDkwLDB4NzksMHgyZSwweGUwLDB4NjQsMHgwMywweDYwLDB4MDUsMHhkMiwweDJmLDB4MTIsMHgzZH0gfSwKK3sgIDE2LDB4MTk4MCwwLHsweDc5LDB4OTAsMHg3OSwweDJkLDB4ZTAsMHg2NCwweDAzLDB4NjAsMHgwYSwweGEzLDB4ZTAsMHhiNCwweDAzLDB4MDUsMHhjMiwweDJmfSB9LAoreyAgMTYsMHgxOTkwLDAsezB4MTIsMHgzZCwweDc5LDB4MTIsMHgxMCwweDAwLDB4MTIsMHgyOCwweDAxLDB4MjIsMHg5MCwweDc5LDB4MjMsMHhlMCwweGZmLDB4ZTR9IH0sCit7ICAxNiwweDE5YTAsMCx7MHhmYywweGZkLDB4ZmUsMHhmYiwweGZhLDB4NzksMHgwMSwweGY4LDB4MTIsMHgwZCwweDQyLDB4YzgsMHhlYywweGM4LDB4YzksMHhlZH0gfSwKK3sgIDE2LDB4MTliMCwwLHsweGM5LDB4Y2EsMHhlZSwweGNhLDB4Y2IsMHhlZiwweGNiLDB4OTAsMHg3OSwweDIyLDB4ZTAsMHhmZSwweGU0LDB4ZmMsMHhmZCwweDJifSB9LAoreyAgMTYsMHgxOWMwLDAsezB4ZmIsMHhlYSwweDNlLDB4ZmEsMHhlZCwweDM5LDB4ZjksMHhlYywweDM4LDB4ZjgsMHg5MCwweDc5LDB4MjEsMHhlMCwweGZmLDB4ZTR9IH0sCit7ICAxNiwweDE5ZDAsMCx7MHhmZSwweGViLDB4MmYsMHhmZiwweGVlLDB4M2EsMHhmZSwweGVkLDB4MzksMHhmZCwweGVjLDB4MzgsMHhmYywweDkwLDB4NzgsMHgxMn0gfSwKK3sgIDE2LDB4MTllMCwwLHsweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDYsMHgxMiwweDBkLDB4ZDIsMHgyMiwweDkwfSB9LAoreyAgMTYsMHgxOWYwLDAsezB4NzksMHgyMywweGUwLDB4ZmYsMHhlNCwweGZjLDB4ZmQsMHhmZSwweGZiLDB4ZmEsMHg3OSwweDAxLDB4ZjgsMHgxMiwweDBkLDB4NDJ9IH0sCit7ICAxNiwweDFhMDAsMCx7MHhjOCwweGVjLDB4YzgsMHhjOSwweGVkLDB4YzksMHhjYSwweGVlLDB4Y2EsMHhjYiwweGVmLDB4Y2IsMHg5MCwweDc5LDB4MjIsMHhlMH0gfSwKK3sgIDE2LDB4MWExMCwwLHsweGZlLDB4ZTQsMHhmYywweGZkLDB4MmIsMHhmYiwweGVhLDB4M2UsMHhmYSwweGVkLDB4MzksMHhmOSwweGVjLDB4MzgsMHhmOCwweDkwfSB9LAoreyAgMTYsMHgxYTIwLDAsezB4NzksMHgyMSwweGUwLDB4ZmYsMHhlNCwweGZlLDB4ZWIsMHgyZiwweGZmLDB4ZWUsMHgzYSwweGZlLDB4ZWQsMHgzOSwweGZkLDB4ZWN9IH0sCit7ICAxNiwweDFhMzAsMCx7MHgzOCwweGZjLDB4OTAsMHg3OCwweDEyLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwYX0gfSwKK3sgIDE2LDB4MWE0MCwwLHsweDEyLDB4MGQsMHhkMiwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4NzksMHg5NywweGUwfSB9LAoreyAgMTYsMHgxYTUwLDAsezB4MTQsMHg3MCwweDE4LDB4OTAsMHg3OSwweDIxLDB4ZTAsMHhmZiwweDkwLDB4NzgsMHgxMiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmF9IH0sCit7ICAxNiwweDFhNjAsMCx7MHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MGUsMHhlZiwweDEyLDB4MGMsMHg5YywweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NH0gfSwKK3sgIDEwLDB4MWE3MCwwLHsweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgIDEsMHgxYTdhLDAsezB4MjJ9IH0sCit7ICAxNiwweDFhN2IsMCx7MHhlNCwweGZmLDB4ZmUsMHg3YiwweDAxLDB4OTAsMHg3OCwweDBmLDB4MDQsMHhmMCwweGEzLDB4NzQsMHg3OCwweGYwLDB4YTMsMHg3NH0gfSwKK3sgIDE2LDB4MWE4YiwwLHsweDJiLDB4ZjAsMHg5MCwweDc4LDB4MGYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAyfSB9LAoreyAgMTYsMHgxYTliLDAsezB4MTIsMHgwYywweDVkLDB4ZmQsMHg5MCwweDdmLDB4ZWMsMHhlMCwweDZkLDB4NjAsMHgxMywweGVmLDB4YzMsMHg5NCwweDA1LDB4NTB9IH0sCit7ICAxNiwweDFhYWIsMCx7MHgwZCwweDBmLDB4OTAsMHg3OCwweDEwLDB4ZTQsMHg3NSwweGYwLDB4MDMsMHgxMiwweDBjLDB4ZjQsMHg4MCwweGQ0LDB4OGQsMHgzM30gfSwKK3sgIDE2LDB4MWFiYiwwLHsweDkwLDB4NzgsMHgwZiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDEsMHgxMiwweDBjfSB9LAoreyAgMTYsMHgxYWNiLDAsezB4NWQsMHhmZCwweDkwLDB4N2YsMHhlZCwweGUwLDB4NmQsMHg2MCwweDEzLDB4ZWUsMHhjMywweDk0LDB4MGIsMHg1MCwweDBkLDB4MGV9IH0sCit7ICAxNiwweDFhZGIsMCx7MHg5MCwweDc4LDB4MTAsMHhlNCwweDc1LDB4ZjAsMHgwMywweDEyLDB4MGMsMHhmNCwweDgwLDB4ZDQsMHg5MCwweDdmLDB4ZWQsMHhlMH0gfSwKK3sgIDE2LDB4MWFlYiwwLHsweGY1LDB4MzQsMHhlZiwweDY0LDB4MDUsMHg2MCwweDAzLDB4YmUsMHgwYiwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxfSB9LAoreyAgMTYsMHgxYWZiLDAsezB4ZjAsMHgyMiwweDkwLDB4NzgsMHgwZiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHgxMiwweDBjLDB4NDR9IH0sCit7ICAxNiwweDFiMGIsMCx7MHhmZiwweDI0LDB4ZjAsMHg2MCwweDA4LDB4MjQsMHgwZiwweDcwLDB4MGUsMHgxMiwweDQ5LDB4MmEsMHgyMiwweDEyLDB4NGIsMHg4M30gfSwKK3sgIDE0LDB4MWIxYiwwLHsweDkwLDB4NzksMHgyMCwweGU1LDB4MzQsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjB9IH0sCit7ICAgMSwweDFiMjksMCx7MHgyMn0gfSwKK3sgIDE1LDB4MWIyYSwwLHsweDkwLDB4N2YsMHhlYSwweGUwLDB4YjQsMHhmZiwweDA0LDB4MTIsMHgzNCwweDE2LDB4MjIsMHgxMiwweDM4LDB4MDAsMHgyMn0gfSwKK3sgICA3LDB4MWIzOSwwLHsweDUzLDB4OTgsMHhmZSwweDUzLDB4OTgsMHhmZCwweDMyfSB9LAoreyAgMTYsMHgxYjQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFiNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWI2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxYjcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFiODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWI5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxYmEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFiYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWJjMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxYmQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFiZTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWJmMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxYzAwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFjMTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWMyMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxYzMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFjNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWM1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxYzYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFjNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWM4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxYzkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFjYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWNiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxY2MwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFjZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWNlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxY2YwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFkMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWQxMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZDIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFkMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWQ0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZDUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFkNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWQ3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZDgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFkOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWRhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZGIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFkYzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWRkMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZGUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFkZjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWUwMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZTEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFlMjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWUzMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZTQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFlNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWU2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZTcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFlODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWU5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZWEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNCwweDFlYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZWJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFlY2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWVkZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZWVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFlZmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWYwZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZjFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFmMmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgICAyLDB4MWYzZSwwLHsweDAwLDB4MDB9IH0sCit7ICAxNiwweDFmNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWY1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZjYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFmNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWY4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZjkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFmYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWZiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZmMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDFmZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MWZlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgxZmYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIwMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjAxMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMDIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIwMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjA0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMDUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIwNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjA3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMDgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIwOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjBhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMGIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIwYzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjBkMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMGUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIwZjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjEwMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMTEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIxMjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjEzMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMTQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIxNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjE2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMTcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIxODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjE5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMWEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIxYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjFjMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMWQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIxZTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjFmMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMjAwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIyMTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjIyMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMjMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIyNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjI1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMjYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIyNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjI4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMjkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIyYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjJiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMmMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIyZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjJlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMmYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIzMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjMxMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMzIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIzMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjM0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMzUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIzNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE0LDB4MjM3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIzN2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjM4ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyMzllLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIzYWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjNiZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyM2NlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDIzZGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjNlZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyM2ZlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI0MGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjQxZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNDJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI0M2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjQ0ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNDVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI0NmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjQ3ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNDhlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI0OWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjRhZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNGJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI0Y2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjRkZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNGVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI0ZmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjUwZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNTFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI1MmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjUzZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNTRlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI1NWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjU2ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNTdlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI1OGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjU5ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNWFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI1YmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjVjZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNWRlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI1ZWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjVmZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNjBlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI2MWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjYyZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNjNlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI2NGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjY1ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNjZlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI2N2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjY4ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNjllLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI2YWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjZiZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNmNlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI2ZGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE0LDB4MjZlZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI2ZmMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjcwYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNzFjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI3MmMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjczYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNzRjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI3NWMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4Mjc2YywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyNzdjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI3OGMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4Mjc5YywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyN2FjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI3YmMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgIDE2LDB4MjdjYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9LAoreyAgMTYsMHgyN2RjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9IH0sCit7ICAxNiwweDI3ZWMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSwKK3sgICA1LDB4MjdmYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MjJ9IH0sCit7ICAxNiwweDI4MDEsMCx7MHg5MCwweDc5LDB4NjQsMHhlMCwweDE0LDB4NjAsMHg0NiwweDE0LDB4NzAsMHgwMiwweDQxLDB4M2MsMHgyNCwweDAyLDB4NjAsMHgwMn0gfSwKK3sgIDE2LDB4MjgxMSwwLHsweDgxLDB4MmEsMHg5MCwweDdmLDB4ZmMsMHg3NCwweGNjLDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc5fSB9LAoreyAgMTYsMHgyODIxLDAsezB4NzgsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4N2MsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4NTQsMHhmZCwweGYwLDB4NDR9IH0sCit7ICAxNiwweDI4MzEsMCx7MHgwMSwweGYwLDB4OTAsMHg3OSwweDdjLDB4ZjAsMHhhMiwweGFmLDB4ZTQsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTIsMHgwYn0gfSwKK3sgIDE2LDB4Mjg0MSwwLHsweGEyLDB4ZTUsMHgxMiwweDYwLDB4MDIsMHhkMiwweGFmLDB4ZTQsMHg5MCwweDc5LDB4N2EsMHhmMCwweDIyLDB4OTAsMHg3OSwweDJkfSB9LAoreyAgMTYsMHgyODUxLDAsezB4ZTAsMHg2NCwweDAxLDB4NjAsMHgwMiwweDAxLDB4ZjEsMHg5MCwweDdmLDB4ZmMsMHg3NCwweGNjLDB4ZjAsMHg5MCwweDdmLDB4ZmZ9IH0sCit7ICAxNiwweDI4NjEsMCx7MHg3NCwweGZjLDB4ZjAsMHg5MCwweDc5LDB4NzgsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4N2MsMHhlMCwweDkwLDB4NzksMHg3OX0gfSwKK3sgIDE2LDB4Mjg3MSwwLHsweGYwLDB4NDQsMHgwMSwweGYwLDB4NDQsMHgwMiwweGYwLDB4OTAsMHg3OSwweDdlLDB4ZTAsMHhiNCwweDAxLDB4MDksMHg5MCwweDc5fSB9LAoreyAgMTYsMHgyODgxLDAsezB4NzksMHhlMCwweDQ0LDB4MDQsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc5LDB4NzksMHhlMCwweDU0LDB4ZmIsMHhmMCwweDkwLDB4Nzl9IH0sCit7ICAxNiwweDI4OTEsMCx7MHg3OSwweGUwLDB4OTAsMHg3OSwweDdjLDB4ZjAsMHhhMiwweGFmLDB4ZTQsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTIsMHgwYn0gfSwKK3sgIDE2LDB4MjhhMSwwLHsweGEyLDB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMiwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDkwfSB9LAoreyAgMTYsMHgyOGIxLDAsezB4NzksMHg3ZiwweGUwLDB4YjQsMHgwMSwweDA5LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTB9IH0sCit7ICAxNiwweDI4YzEsMCx7MHg3OSwweDc5LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NzksMHhlMCwweDU0LDB4ZmQsMHhmMCwweDU0LDB4ZmIsMHhmMH0gfSwKK3sgIDE2LDB4MjhkMSwwLHsweDkwLDB4NzksMHg4NCwweGYwLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3OSwweDdhLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3OSwweDY1fSB9LAoreyAgMTYsMHgyOGUxLDAsezB4ZjAsMHhlNSwweDEyLDB4NjAsMHgwMiwweGQyLDB4YWYsMHhlNCwweDkwLDB4NzksMHg4YywweGYwLDB4OTAsMHg3OSwweDhiLDB4ZjB9IH0sCit7ICAxNiwweDI4ZjEsMCx7MHg5MCwweDc5LDB4MmQsMHhlMCwweDY0LDB4MDIsMHg2MCwweDAyLDB4MjEsMHg5NiwweDkwLDB4N2YsMHhmYywweDc0LDB4YzgsMHhmMH0gfSwKK3sgIDE2LDB4MjkwMSwwLHsweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzksMHg3OCwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3YywweGUwfSB9LAoreyAgMTYsMHgyOTExLDAsezB4OTAsMHg3OSwweDc5LDB4ZjAsMHg0NCwweDAxLDB4ZjAsMHg0NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4N2UsMHhlMCwweGI0LDB4MDF9IH0sCit7ICAxNiwweDI5MjEsMCx7MHgwOSwweDkwLDB4NzksMHg3OSwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODAsMHgwNywweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmYn0gfSwKK3sgIDE2LDB4MjkzMSwwLHsweGYwLDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg5MCwweDc5LDB4N2MsMHhmMCwweGEyLDB4YWYsMHhlNCwweDMzLDB4ZjUsMHgxMiwweGMyfSB9LAoreyAgMTYsMHgyOTQxLDAsezB4YWYsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4NzgsMHg3NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4ODQsMHhlMCwweDkwLDB4Nzl9IH0sCit7ICAxNiwweDI5NTEsMCx7MHg3OSwweGYwLDB4OTAsMHg3OSwweDdmLDB4ZTAsMHhiNCwweDAxLDB4MDksMHg5MCwweDc5LDB4NzksMHhlMCwweDU0LDB4ZmUsMHhmMH0gfSwKK3sgIDE2LDB4Mjk2MSwwLHsweDgwLDB4MDcsMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3OSwweGUwLDB4NDQsMHgwMiwweGYwfSB9LAoreyAgMTYsMHgyOTcxLDAsezB4NTQsMHhmYiwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZjAsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4N2EsMHg3NCwweDAxLDB4ZjB9IH0sCit7ICAxNiwweDI5ODEsMCx7MHg5MCwweDc5LDB4NjUsMHg3NCwweDAzLDB4ZjAsMHhlNSwweDEyLDB4NjAsMHgwMiwweGQyLDB4YWYsMHhlNCwweDkwLDB4NzksMHg4Y30gfSwKK3sgIDE2LDB4Mjk5MSwwLHsweGYwLDB4OTAsMHg3OSwweDhiLDB4ZjAsMHg5MCwweDc5LDB4MmQsMHhlMCwweDY0LDB4MDMsMHg2MCwweDAyLDB4ODEsMHgyYSwweDkwfSB9LAoreyAgMTYsMHgyOWExLDAsezB4N2YsMHhmYywweDc0LDB4OTgsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzksMHg3OCwweDc0LDB4MDF9IH0sCit7ICAxNiwweDI5YjEsMCx7MHhmMCwweDkwLDB4NzksMHg3YywweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg0NCwweDAxLDB4ZjAsMHg0NCwweDAyLDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4MjljMSwwLHsweDc5LDB4N2UsMHhlMCwweGI0LDB4MDEsMHgwOSwweDkwLDB4NzksMHg3OSwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODAsMHgwNywweDkwfSB9LAoreyAgMTYsMHgyOWQxLDAsezB4NzksMHg3OSwweGUwLDB4NTQsMHhmYiwweGYwLDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg5MCwweDc5LDB4N2MsMHhmMCwweGEyLDB4YWZ9IH0sCit7ICAxNiwweDI5ZTEsMCx7MHhlNCwweDMzLDB4ZjUsMHgxMiwweGMyLDB4YWYsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4NzgsMHg3NCwweDAyLDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4MjlmMSwwLHsweDc5LDB4ODQsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4OTAsMHg3OSwweDdmLDB4ZTAsMHhiNCwweDAxLDB4MDksMHg5MCwweDc5fSB9LAoreyAgMTYsMHgyYTAxLDAsezB4NzksMHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4Nzl9IH0sCit7ICAxNiwweDJhMTEsMCx7MHg3OSwweGUwLDB4NTQsMHhmZCwweGYwLDB4NDQsMHgwNCwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZjAsMHgxMiwweDBiLDB4YTIsMHg5MH0gfSwKK3sgIDE2LDB4MmEyMSwwLHsweDc5LDB4N2EsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NjUsMHg3NCwweDA1LDB4ZjAsMHhlNSwweDEyLDB4NjAsMHgwMiwweGQyfSB9LAoreyAgMTYsMHgyYTMxLDAsezB4YWYsMHhlNCwweDkwLDB4NzksMHg4YywweGYwLDB4OTAsMHg3OSwweDhiLDB4ZjAsMHgyMiwweDkwLDB4NzksMHgyZCwweGUwLDB4NjR9IH0sCit7ICAxNiwweDJhNDEsMCx7MHgwMSwweDYwLDB4MDIsMHg0MSwweGUwLDB4OTAsMHg3ZiwweGZjLDB4NzQsMHhiNCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmY30gfSwKK3sgIDE2LDB4MmE1MSwwLHsweGYwLDB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3OSwweDdjLDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweDU0fSB9LAoreyAgMTYsMHgyYTYxLDAsezB4ZmUsMHhmMCwweDQ0LDB4MDIsMHhmMCwweDkwLDB4NzksMHg3ZSwweGUwLDB4YjQsMHgwMSwweDA5LDB4OTAsMHg3OSwweDc5LDB4ZTB9IH0sCit7ICAxNiwweDJhNzEsMCx7MHg0NCwweDA0LDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg1NCwweGZiLDB4ZjAsMHg5MCwweDc5LDB4NzksMHhlMH0gfSwKK3sgIDE2LDB4MmE4MSwwLHsweDkwLDB4NzksMHg3YywweGYwLDB4YTIsMHhhZiwweGU0LDB4MzMsMHhmNSwweDEyLDB4YzIsMHhhZiwweDEyLDB4MGIsMHhhMiwweDkwfSB9LAoreyAgMTYsMHgyYTkxLDAsezB4NzksMHg3OCwweDc0LDB4MDIsMHhmMCwweDkwLDB4NzksMHg4NCwweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg5MCwweDc5LDB4N2Z9IH0sCit7ICAxNiwweDJhYTEsMCx7MHhlMCwweGI0LDB4MDEsMHgwOSwweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmZSwweGYwLDB4ODAsMHgwNywweDkwLDB4NzksMHg3OX0gfSwKK3sgIDE2LDB4MmFiMSwwLHsweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHg1NCwweGZiLDB4ZjAsMHg5MCwweDc5fSB9LAoreyAgMTYsMHgyYWMxLDAsezB4ODQsMHhmMCwweDEyLDB4MGIsMHhhMiwweDkwLDB4NzksMHg3YSwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg2NSwweDA0LDB4ZjB9IH0sCit7ICAxNiwweDJhZDEsMCx7MHhlNSwweDEyLDB4NjAsMHgwMiwweGQyLDB4YWYsMHhlNCwweDkwLDB4NzksMHg4YywweGYwLDB4OTAsMHg3OSwweDhiLDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4MmFlMSwwLHsweDc5LDB4MmQsMHhlMCwweDY0LDB4MDIsMHg2MCwweDAyLDB4NjEsMHg4NSwweDkwLDB4N2YsMHhmYywweDc0LDB4YjAsMHhmMCwweDkwfSB9LAoreyAgMTYsMHgyYWYxLDAsezB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzksMHg3OCwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3YywweGUwLDB4OTB9IH0sCit7ICAxNiwweDJiMDEsMCx7MHg3OSwweDc5LDB4ZjAsMHg1NCwweGZlLDB4ZjAsMHg0NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4N2UsMHhlMCwweGI0LDB4MDEsMHgwOX0gfSwKK3sgIDE2LDB4MmIxMSwwLHsweDkwLDB4NzksMHg3OSwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODAsMHgwNywweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmYiwweGYwfSB9LAoreyAgMTYsMHgyYjIxLDAsezB4OTAsMHg3OSwweDc5LDB4ZTAsMHg5MCwweDc5LDB4N2MsMHhmMCwweGEyLDB4YWYsMHhlNCwweDMzLDB4ZjUsMHgxMiwweGMyLDB4YWZ9IH0sCit7ICAxNiwweDJiMzEsMCx7MHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4NzgsMHg3NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4ODQsMHhlMCwweDkwLDB4NzksMHg3OX0gfSwKK3sgIDE2LDB4MmI0MSwwLHsweGYwLDB4OTAsMHg3OSwweDdmLDB4ZTAsMHhiNCwweDAxLDB4MDksMHg5MCwweDc5LDB4NzksMHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwfSB9LAoreyAgMTYsMHgyYjUxLDAsezB4MDcsMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3OSwweGUwLDB4NDQsMHgwMiwweGYwLDB4NTR9IH0sCit7ICAxNiwweDJiNjEsMCx7MHhmYiwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZjAsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4N2EsMHg3NCwweDAxLDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4MmI3MSwwLHsweDc5LDB4NjUsMHg3NCwweDA0LDB4ZjAsMHhlNSwweDEyLDB4NjAsMHgwMiwweGQyLDB4YWYsMHhlNCwweDkwLDB4NzksMHg4YywweGYwfSB9LAoreyAgMTYsMHgyYjgxLDAsezB4OTAsMHg3OSwweDhiLDB4ZjAsMHg5MCwweDc5LDB4MmQsMHhlMCwweDY0LDB4MDMsMHg2MCwweDAyLDB4ODEsMHgyYSwweDkwLDB4N2Z9IH0sCit7ICAxNiwweDJiOTEsMCx7MHhmYywweDc0LDB4NjgsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzksMHg3OCwweDc0LDB4MDEsMHhmMH0gfSwKK3sgIDE2LDB4MmJhMSwwLHsweDkwLDB4NzksMHg3YywweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg1NCwweGZlLDB4ZjAsMHg0NCwweDAyLDB4ZjAsMHg5MCwweDc5fSB9LAoreyAgMTYsMHgyYmIxLDAsezB4N2UsMHhlMCwweGI0LDB4MDEsMHgwOSwweDkwLDB4NzksMHg3OSwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODAsMHgwNywweDkwLDB4Nzl9IH0sCit7ICAxNiwweDJiYzEsMCx7MHg3OSwweGUwLDB4NTQsMHhmYiwweGYwLDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg5MCwweDc5LDB4N2MsMHhmMCwweGEyLDB4YWYsMHhlNH0gfSwKK3sgIDE2LDB4MmJkMSwwLHsweDMzLDB4ZjUsMHgxMiwweGMyLDB4YWYsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5LDB4NzgsMHg3NCwweDAyLDB4ZjAsMHg5MCwweDc5fSB9LAoreyAgMTYsMHgyYmUxLDAsezB4ODQsMHhlMCwweDkwLDB4NzksMHg3OSwweGYwLDB4OTAsMHg3OSwweDdmLDB4ZTAsMHhiNCwweDAxLDB4MDksMHg5MCwweDc5LDB4Nzl9IH0sCit7ICAxNiwweDJiZjEsMCx7MHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc5LDB4NzksMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3OX0gfSwKK3sgIDE2LDB4MmMwMSwwLHsweGUwLDB4NTQsMHhmZCwweGYwLDB4NDQsMHgwNCwweGYwLDB4OTAsMHg3OSwweDg0LDB4ZjAsMHgxMiwweDBiLDB4YTIsMHg5MCwweDc5fSB9LAoreyAgMTYsMHgyYzExLDAsezB4N2EsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NjUsMHg3NCwweDA2LDB4ZjAsMHhlNSwweDEyLDB4NjAsMHgwMiwweGQyLDB4YWZ9IH0sCit7ICAxMCwweDJjMjEsMCx7MHhlNCwweDkwLDB4NzksMHg4YywweGYwLDB4OTAsMHg3OSwweDhiLDB4ZjAsMHgyMn0gfSwKK3sgIDE2LDB4MmMyYiwwLHsweGU0LDB4ZmYsMHg3YiwweDAxLDB4OTAsMHg3OCwweDE2LDB4MDQsMHhmMCwweGEzLDB4NzQsMHg3OCwweGYwLDB4YTMsMHg3NCwweDU4fSB9LAoreyAgMTYsMHgyYzNiLDAsezB4ZjAsMHg5MCwweDc4LDB4MTYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAxLDB4MTJ9IH0sCit7ICAxNiwweDJjNGIsMCx7MHgwYywweDVkLDB4ZmUsMHg5MCwweDdmLDB4ZWMsMHhlMCwweDZlLDB4NjAsMHgxMywweGVmLDB4YzMsMHg5NCwweDA2LDB4NTAsMHgwZH0gfSwKK3sgIDE2LDB4MmM1YiwwLHsweDBmLDB4OTAsMHg3OCwweDE3LDB4ZTQsMHg3NSwweGYwLDB4MGYsMHgxMiwweDBjLDB4ZjQsMHg4MCwweGQ0LDB4YmYsMHgwNiwweDA4fSB9LAoreyAgMTYsMHgyYzZiLDAsezB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4NzgsMHgxNiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmF9IH0sCit7ICAxNiwweDJjN2IsMCx7MHhhMywweGUwLDB4ZjksMHgxMiwweDBjLDB4NDQsMHhmZiwweDI0LDB4OWYsMHg3MCwweDAyLDB4YzEsMHg2NiwweDI0LDB4MjEsMHg2MH0gfSwKK3sgIDE2LDB4MmM4YiwwLHsweDAyLDB4YzEsMHg4YywweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHg3ZSwweDcwLDB4MDIsMHhhMSwweDMwLDB4MTQsMHg3MCwweDAyfSB9LAoreyAgMTYsMHgyYzliLDAsezB4YTEsMHhjOCwweDI0LDB4MDIsMHg2MCwweDAyLDB4YzEsMHg1ZSwweDkwLDB4MDAsMHgwMiwweDEyLDB4MGQsMHhhMiwweDdiLDB4NDR9IH0sCit7ICAxNiwweDJjYWIsMCx7MHg3YSwweGFjLDB4NzksMHgwMCwweDc4LDB4MDAsMHhjMywweDEyLDB4MGQsMHg5MSwweDcwLDB4MTMsMHg5MCwweDdmLDB4MDAsMHg3NH0gfSwKK3sgIDE2LDB4MmNiYiwwLHsweDQ0LDB4ZjAsMHhhMywweDc0LDB4YWMsMHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDMsMHhmMCwweDkwfSB9LAoreyAgMTYsMHgyY2NiLDAsezB4NzgsMHgxNiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDIsMHgxMiwweDBkLDB4YTJ9IH0sCit7ICAxNiwweDJjZGIsMCx7MHg3YiwweDgwLDB4N2EsMHhiYiwweDc5LDB4MDAsMHg3OCwweDAwLDB4YzMsMHgxMiwweDBkLDB4OTEsMHg3MCwweDEzLDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MmNlYiwwLHsweDAwLDB4NzQsMHg4MCwweGYwLDB4YTMsMHg3NCwweGJiLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAzfSB9LAoreyAgMTYsMHgyY2ZiLDAsezB4ZjAsMHg5MCwweDc4LDB4MTYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAyLDB4MTJ9IH0sCit7ICAxNiwweDJkMGIsMCx7MHgwZCwweGEyLDB4N2IsMHgwMCwweDdhLDB4NzcsMHg3OSwweDAxLDB4NzgsMHgwMCwweGMzLDB4MTIsMHgwZCwweDkxLDB4NjAsMHgwMn0gfSwKK3sgIDE2LDB4MmQxYiwwLHsweGMxLDB4OTMsMHg5MCwweDdmLDB4MDAsMHhmMCwweGEzLDB4NzQsMHg3NywweGYwLDB4YTMsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDdmfSB9LAoreyAgMTYsMHgyZDJiLDAsezB4YjUsMHg3NCwweDAzLDB4ZjAsMHgyMiwweDkwLDB4NzgsMHgxNiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4Zjl9IH0sCit7ICAxNiwweDJkM2IsMCx7MHg5MCwweDAwLDB4MDYsMHgxMiwweDBkLDB4YTIsMHg3YiwweDQ0LDB4N2EsMHhhYywweDc5LDB4MDAsMHg3OCwweDAwLDB4YzMsMHgxMn0gfSwKK3sgIDE2LDB4MmQ0YiwwLHsweDBkLDB4OTEsMHg3MCwweDEzLDB4OTAsMHg3ZiwweDAwLDB4NzQsMHg0NCwweGYwLDB4YTMsMHg3NCwweGFjLDB4ZjAsMHhlNCwweGEzfSB9LAoreyAgMTYsMHgyZDViLDAsezB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDc4LDB4MTYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTN9IH0sCit7ICAxNiwweDJkNmIsMCx7MHhlMCwweGY5LDB4OTAsMHgwMCwweDA2LDB4MTIsMHgwZCwweGEyLDB4N2IsMHg4MCwweDdhLDB4YmIsMHg3OSwweDAwLDB4NzgsMHgwMH0gfSwKK3sgIDE2LDB4MmQ3YiwwLHsweGMzLDB4MTIsMHgwZCwweDkxLDB4NzAsMHgxMywweDkwLDB4N2YsMHgwMCwweDc0LDB4ODAsMHhmMCwweGEzLDB4NzQsMHhiYiwweGYwfSB9LAoreyAgMTYsMHgyZDhiLDAsezB4ZTQsMHhhMywweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMywweGYwLDB4OTAsMHg3OCwweDE2LDB4ZTAsMHhmYiwweGEzLDB4ZTB9IH0sCit7ICAxNiwweDJkOWIsMCx7MHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwNiwweDEyLDB4MGQsMHhhMiwweDdiLDB4MDAsMHg3YSwweDc3LDB4NzksMHgwMX0gfSwKK3sgIDE2LDB4MmRhYiwwLHsweDc4LDB4MDAsMHhjMywweDEyLDB4MGQsMHg5MSwweDYwLDB4MDIsMHhjMSwweDkzLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhhMywweDc0fSB9LAoreyAgMTYsMHgyZGJiLDAsezB4NzcsMHhmMCwweGEzLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMywweGYwLDB4MjIsMHg5MCwweDc4LDB4MTZ9IH0sCit7ICAxNiwweDJkY2IsMCx7MHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDBhLDB4MTIsMHgwZCwweGEyLDB4N2IsMHg0NH0gfSwKK3sgIDE2LDB4MmRkYiwwLHsweDdhLDB4YWMsMHg3OSwweDAwLDB4NzgsMHgwMCwweGMzLDB4MTIsMHgwZCwweDkxLDB4NzAsMHgxMywweDkwLDB4N2YsMHgwMCwweDc0fSB9LAoreyAgMTYsMHgyZGViLDAsezB4NDQsMHhmMCwweGEzLDB4NzQsMHhhYywweGYwLDB4ZTQsMHhhMywweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMywweGYwLDB4OTB9IH0sCit7ICAxNiwweDJkZmIsMCx7MHg3OCwweDE2LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwYSwweDEyLDB4MGQsMHhhMn0gfSwKK3sgIDE2LDB4MmUwYiwwLHsweDdiLDB4ODAsMHg3YSwweGJiLDB4NzksMHgwMCwweDc4LDB4MDAsMHhjMywweDEyLDB4MGQsMHg5MSwweDcwLDB4MTMsMHg5MCwweDdmfSB9LAoreyAgMTYsMHgyZTFiLDAsezB4MDAsMHg3NCwweDgwLDB4ZjAsMHhhMywweDc0LDB4YmIsMHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDN9IH0sCit7ICAxNiwweDJlMmIsMCx7MHhmMCwweDkwLDB4NzgsMHgxNiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MGEsMHgxMn0gfSwKK3sgIDE2LDB4MmUzYiwwLHsweDBkLDB4YTIsMHg3YiwweDAwLDB4N2EsMHg3NywweDc5LDB4MDEsMHg3OCwweDAwLDB4YzMsMHgxMiwweDBkLDB4OTEsMHg3MCwweDQ4fSB9LAoreyAgMTYsMHgyZTRiLDAsezB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhhMywweDc0LDB4NzcsMHhmMCwweGEzLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzR9IH0sCit7ICAxNiwweDJlNWIsMCx7MHgwMywweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNH0gfSwKK3sgIDE2LDB4MmU2YiwwLHsweDdmLDB4NzAsMHgxNiwweDkwLDB4NzgsMHgxNiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwfSB9LAoreyAgMTYsMHgyZTdiLDAsezB4MGUsMHgxMiwweDBjLDB4NWQsMHg5MCwweDdmLDB4MDAsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjB9IH0sCit7ICAgOCwweDJlOGIsMCx7MHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgIDEsMHgyZTkzLDAsezB4MjJ9IH0sCit7ICAxNiwweDJlOTQsMCx7MHg3NSwweDM2LDB4MjUsMHg3NSwweDM3LDB4MjQsMHg5MCwweDc5LDB4NzQsMHhlMCwweDY0LDB4MDEsMHg3MCwweDU0LDB4ZjAsMHhmNX0gfSwKK3sgIDE2LDB4MmVhNCwwLHsweDM1LDB4NzUsMHgyMiwweDAxLDB4ZTUsMHgyMiwweDY0LDB4MDEsMHg3MCwweDQ4LDB4OTAsMHg3ZiwweGE1LDB4ZTAsMHg0NCwweDgwfSB9LAoreyAgMTYsMHgyZWI0LDAsezB4ZjAsMHg5MCwweDdmLDB4YTYsMHhlNSwweDM2LDB4ZjAsMHgxMiwweDQ2LDB4YzAsMHg3NCwweDRmLDB4MjUsMHgzNSwweGY1LDB4ODJ9IH0sCit7ICAxNiwweDJlYzQsMCx7MHhlNCwweDM0LDB4NzksMHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4YTYsMHhmMCwweDEyLDB4NDYsMHhjMCwweDc0LDB4MzUsMHgyNX0gfSwKK3sgIDE2LDB4MmVkNCwwLHsweDM1LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3OSwweGY1LDB4ODMsMHhlMCwweDkwLDB4N2YsMHhhNiwweGYwLDB4MTIsMHg0NiwweGMwfSB9LAoreyAgMTYsMHgyZWU0LDAsezB4OTAsMHg3ZiwweGE1LDB4NzQsMHg0MCwweGYwLDB4MTIsMHgwYSwweGNkLDB4MDUsMHgzNSwweGU1LDB4MzUsMHhjMywweDk0LDB4MGR9IH0sCit7ICAxNiwweDJlZjQsMCx7MHg0MCwweGIyLDB4OTAsMHg3OSwweDc1LDB4ZTAsMHg2NCwweDAxLDB4NjAsMHgwMiwweGUxLDB4ZGUsMHhmMCwweDkwLDB4NzksMHgyMH0gfSwKK3sgIDE2LDB4MmYwNCwwLHsweGUwLDB4NjQsMHgwNSwweDYwLDB4MDIsMHhlMSwweDhkLDB4N2IsMHgwMSwweDkwLDB4NzksMHg1YywweDA0LDB4ZjAsMHhhMywweDc0fSB9LAoreyAgMTYsMHgyZjE0LDAsezB4NzgsMHhmMCwweGEzLDB4NzQsMHhiMiwweGYwLDB4NzUsMHgzMywweDA3LDB4OTAsMHg3OSwweDVjLDB4ZTAsMHhmYiwweGEzLDB4ZTB9IH0sCit7ICAxNiwweDJmMjQsMCx7MHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweDEyLDB4MGMsMHg1ZCwweDcwLDB4MGYsMHg5MCwweDAwLDB4MDQsMHgxMn0gfSwKK3sgIDE2LDB4MmYzNCwwLHsweDBjLDB4NWQsMHg5MCwweDc5LDB4MmYsMHhmMCwweDEyLDB4MGMsMHgyOSwweDgwLDB4MDYsMHg5MCwweDc5LDB4MmYsMHg3NCwweGZmfSB9LAoreyAgMTYsMHgyZjQ0LDAsezB4ZjAsMHhlNCwweGY1LDB4MzUsMHg3NSwweDIyLDB4MDEsMHg3NSwweDM0LDB4MDIsMHhlNSwweDIyLDB4NjQsMHgwMSwweDcwLDB4Mzl9IH0sCit7ICAxNiwweDJmNTQsMCx7MHg5MCwweDdmLDB4YTUsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDkwLDB4N2YsMHhhNiwweGU1LDB4MzYsMHhmMCwweDEyLDB4NDYsMHhjMH0gfSwKK3sgIDE2LDB4MmY2NCwwLHsweGFmLDB4MzQsMHgwNSwweDM0LDB4OTAsMHg3ZiwweGE2LDB4ZWYsMHhmMCwweDEyLDB4NDYsMHhjMCwweDkwLDB4NzksMHgyZiwweGUwfSB9LAoreyAgMTYsMHgyZjc0LDAsezB4OTAsMHg3ZiwweGE2LDB4ZjAsMHgxMiwweDQ2LDB4YzAsMHg5MCwweDdmLDB4YTUsMHg3NCwweDQwLDB4ZjAsMHgxMiwweDBhLDB4Y2R9IH0sCit7ICAxNiwweDJmODQsMCx7MHgwNSwweDM1LDB4ZTUsMHgzNSwweGMzLDB4OTQsMHgwNiwweDQwLDB4YzEsMHg5MCwweDc5LDB4MjAsMHhlMCwweDY0LDB4MDYsMHg3MH0gfSwKK3sgIDE2LDB4MmY5NCwwLHsweDQ5LDB4N2IsMHgwMSwweDkwLDB4NzksMHg1ZiwweDA0LDB4ZjAsMHhhMywweDc0LDB4NzgsMHhmMCwweGEzLDB4NzQsMHhmZiwweGYwfSB9LAoreyAgMTYsMHgyZmE0LDAsezB4NzUsMHgzMywweDAzLDB4OTAsMHg3OSwweDVmLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDB9IH0sCit7ICAxNiwweDJmYjQsMCx7MHgwMSwweDEyLDB4MGMsMHg1ZCwweDcwLDB4MWMsMHg5MCwweDAwLDB4MDQsMHgxMiwweDBjLDB4NWQsMHg5MCwweDc5LDB4MzMsMHhmMH0gfSwKK3sgIDE2LDB4MmZjNCwwLHsweDcwLDB4MDMsMHg3NCwweGZmLDB4ZjAsMHg5MCwweDc5LDB4MzMsMHhlMCwweDU0LDB4N2YsMHhmZiwweGYwLDB4MjUsMHhlMCwweGYwfSB9LAoreyAgMTAsMHgyZmQ0LDAsezB4ODAsMHgwNSwweGU0LDB4OTAsMHg3OSwweDMzLDB4ZjAsMHgxMiwweDQ3LDB4ZGZ9IH0sCit7ICAgMSwweDJmZGUsMCx7MHgyMn0gfSwKK3sgIDE2LDB4MmZkZiwwLHsweDkwLDB4NzksMHg3OCwweDc0LDB4MDMsMHhmMCwweDkwLDB4NzksMHg4MywweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHhhMiwweGFmfSB9LAoreyAgMTYsMHgyZmVmLDAsezB4ZTQsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTIsMHgwYiwweGEyLDB4ZTUsMHgxMiwweDYwLDB4MDIsMHhkMiwweGFmLDB4MjJ9IH0sCit7ICAgMSwweDJmZmYsMCx7MHgyMn0gfSwKK3sgIDE2LDB4MzAwMCwwLHsweGU0LDB4ZmUsMHg5MCwweDc5LDB4MjAsMHhlMCwweGZkLDB4YjQsMHgwNSwweDExLDB4OTAsMHg3OCwweDI1LDB4NzQsMHgwMSwweGYwfSB9LAoreyAgMTYsMHgzMDEwLDAsezB4YTMsMHg3NCwweDc4LDB4ZjAsMHhhMywweDc0LDB4YjIsMHhmMCwweDc1LDB4MzUsMHgwNywweGVkLDB4YjQsMHgwNiwweDExLDB4OTB9IH0sCit7ICAxNiwweDMwMjAsMCx7MHg3OCwweDI1LDB4NzQsMHgwMSwweGYwLDB4YTMsMHg3NCwweDc4LDB4ZjAsMHhhMywweDc0LDB4ZmYsMHhmMCwweDc1LDB4MzUsMHgwM30gfSwKK3sgIDE2LDB4MzAzMCwwLHsweDkwLDB4N2YsMHhlYiwweGUwLDB4MTQsMHg2MCwweDExLDB4MTQsMHg2MCwweDViLDB4MjQsMHgwMiwweDYwLDB4MDIsMHg0MSwweDA1fSB9LAoreyAgMTYsMHgzMDQwLDAsezB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHg3ZiwweDcwLDB4M2R9IH0sCit7ICAxNiwweDMwNTAsMCx7MHhlNCwweGZmLDB4ZWYsMHhjMywweDk1LDB4MzUsMHg1MCwweDJmLDB4OTAsMHg3OCwweDI1LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYX0gfSwKK3sgIDE2LDB4MzA2MCwwLHsweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweDEyLDB4MGMsMHg1ZCwweGZkLDB4Y2MsMHhlZSwweGNjLDB4MGUsMHg3NCwweDAwfSB9LAoreyAgMTYsMHgzMDcwLDAsezB4MmMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVkLDB4ZjAsMHg5MCwweDc4LDB4MjYsMHhlNCwweDc1LDB4ZjB9IH0sCit7ICAxNiwweDMwODAsMCx7MHgwYiwweDEyLDB4MGMsMHhmNCwweDBmLDB4ODAsMHhjYiwweDkwLDB4N2YsMHhiNSwweGVlLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNH0gfSwKK3sgIDE2LDB4MzA5MCwwLHsweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4N2UsMHg2MCwweDY0LDB4MTQsMHg3MCwweDAyfSB9LAoreyAgMTYsMHgzMGEwLDAsezB4MjEsMHg1NSwweDE0LDB4NzAsMHgwMiwweDIxLDB4YTksMHgyNCwweDAzLDB4NjAsMHgwMiwweDIxLDB4ZmQsMHhlNCwweGZmLDB4ZWZ9IH0sCit7ICAxNiwweDMwYjAsMCx7MHhjMywweDk1LDB4MzUsMHg1MCwweDQ2LDB4OTAsMHg3OCwweDI1LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOX0gfSwKK3sgIDE2LDB4MzBjMCwwLHsweDkwLDB4MDAsMHgwMywweDEyLDB4MGMsMHg1ZCwweGZkLDB4Y2MsMHhlZSwweGNjLDB4MGUsMHg3NCwweDAwLDB4MmMsMHhmNSwweDgyfSB9LAoreyAgMTYsMHgzMGQwLDAsezB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVkLDB4ZjAsMHg5MCwweDAwLDB4MDQsMHgxMiwweDBjLDB4NWQsMHhmZCwweGNjLDB4ZWV9IH0sCit7ICAxNiwweDMwZTAsMCx7MHhjYywweDBlLDB4NzQsMHgwMCwweDJjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZCwweGYwLDB4OTAsMHg3OH0gfSwKK3sgIDE2LDB4MzBmMCwwLHsweDI2LDB4ZTQsMHg3NSwweGYwLDB4MGIsMHgxMiwweDBjLDB4ZjQsMHgwZiwweDgwLDB4YjQsMHg5MCwweDdmLDB4YjUsMHhlZSwweGYwfSB9LAoreyAgMTYsMHgzMTAwLDAsezB4MjIsMHhlNCwweGZmLDB4ZWYsMHhjMywweDk1LDB4MzUsMHg1MCwweDQ2LDB4OTAsMHg3OCwweDI1LDB4ZTAsMHhmYiwweGEzLDB4ZTB9IH0sCit7ICAxNiwweDMxMTAsMCx7MHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwNSwweDEyLDB4MGMsMHg1ZCwweGZkLDB4Y2MsMHhlZSwweGNjLDB4MGUsMHg3NH0gfSwKK3sgIDE2LDB4MzEyMCwwLHsweDAwLDB4MmMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVkLDB4ZjAsMHg5MCwweDAwLDB4MDYsMHgxMiwweDBjfSB9LAoreyAgMTYsMHgzMTMwLDAsezB4NWQsMHhmZCwweGNjLDB4ZWUsMHhjYywweDBlLDB4NzQsMHgwMCwweDJjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODN9IH0sCit7ICAxNiwweDMxNDAsMCx7MHhlZCwweGYwLDB4OTAsMHg3OCwweDI2LDB4ZTQsMHg3NSwweGYwLDB4MGIsMHgxMiwweDBjLDB4ZjQsMHgwZiwweDgwLDB4YjQsMHg5MH0gfSwKK3sgIDE2LDB4MzE1MCwwLHsweDdmLDB4YjUsMHhlZSwweGYwLDB4MjIsMHhlNCwweGZmLDB4ZWYsMHhjMywweDk1LDB4MzUsMHg1MCwweDQ2LDB4OTAsMHg3OCwweDI1fSB9LAoreyAgMTYsMHgzMTYwLDAsezB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwNywweDEyLDB4MGMsMHg1ZCwweGZkLDB4Y2N9IH0sCit7ICAxNiwweDMxNzAsMCx7MHhlZSwweGNjLDB4MGUsMHg3NCwweDAwLDB4MmMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVkLDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4MzE4MCwwLHsweDAwLDB4MDgsMHgxMiwweDBjLDB4NWQsMHhmZCwweGNjLDB4ZWUsMHhjYywweDBlLDB4NzQsMHgwMCwweDJjLDB4ZjUsMHg4MiwweGU0fSB9LAoreyAgMTYsMHgzMTkwLDAsezB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZCwweGYwLDB4OTAsMHg3OCwweDI2LDB4ZTQsMHg3NSwweGYwLDB4MGIsMHgxMiwweDBjLDB4ZjR9IH0sCit7ICAxNiwweDMxYTAsMCx7MHgwZiwweDgwLDB4YjQsMHg5MCwweDdmLDB4YjUsMHhlZSwweGYwLDB4MjIsMHhlNCwweGZmLDB4ZWYsMHhjMywweDk1LDB4MzUsMHg1MH0gfSwKK3sgIDE2LDB4MzFiMCwwLHsweDQ2LDB4OTAsMHg3OCwweDI1LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwOSwweDEyfSB9LAoreyAgMTYsMHgzMWMwLDAsezB4MGMsMHg1ZCwweGZkLDB4Y2MsMHhlZSwweGNjLDB4MGUsMHg3NCwweDAwLDB4MmMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjV9IH0sCit7ICAxNiwweDMxZDAsMCx7MHg4MywweGVkLDB4ZjAsMHg5MCwweDAwLDB4MGEsMHgxMiwweDBjLDB4NWQsMHhmZCwweGNjLDB4ZWUsMHhjYywweDBlLDB4NzQsMHgwMH0gfSwKK3sgIDE2LDB4MzFlMCwwLHsweDJjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZCwweGYwLDB4OTAsMHg3OCwweDI2LDB4ZTQsMHg3NSwweGYwfSB9LAoreyAgMTYsMHgzMWYwLDAsezB4MGIsMHgxMiwweDBjLDB4ZjQsMHgwZiwweDgwLDB4YjQsMHg5MCwweDdmLDB4YjUsMHhlZSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjR9IH0sCit7ICAxMiwweDMyMDAsMCx7MHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjB9IH0sCit7ICAgMSwweDMyMGMsMCx7MHgyMn0gfSwKK3sgIDE2LDB4MzIwZCwwLHsweDdiLDB4MDEsMHg3YSwweDc4LDB4NzksMHgyYiwweDkwLDB4NzgsMHgwMCwweGViLDB4ZjAsMHhhMywweGVhLDB4ZjAsMHhhMywweGU5fSB9LAoreyAgMTYsMHgzMjFkLDAsezB4ZjAsMHg3NCwweDAxLDB4MTIsMHgwYywweDhhLDB4OTAsMHg3OCwweDAwLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTB9IH0sCit7ICAxNiwweDMyMmQsMCx7MHhmOSwweDkwLDB4MDAsMHgwMSwweDc0LDB4MDEsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwLDB4MDIsMHhlNCwweDEyLDB4MGMsMHg5Y30gfSwKK3sgIDE2LDB4MzIzZCwwLHsweDkwLDB4NzgsMHgwMSwweGU0LDB4NzUsMHhmMCwweDAzLDB4MTIsMHgwYywweGY0LDB4OTAsMHg3OCwweDAwLDB4ZTAsMHhmYiwweGEzfSB9LAoreyAgMTYsMHgzMjRkLDAsezB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDc0LDB4MTAsMHgxMiwweDBjLDB4OGEsMHg5MCwweDc4LDB4MDAsMHhlMCwweGZiLDB4YTN9IH0sCit7ICAxNiwweDMyNWQsMCx7MHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAxLDB4NzQsMHgwNSwweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwMn0gfSwKK3sgIDE2LDB4MzI2ZCwwLHsweGU0LDB4MTIsMHgwYywweDljLDB4OTAsMHg3OCwweDAxLDB4ZTQsMHg3NSwweGYwLDB4MDMsMHgxMiwweDBjLDB4ZjQsMHg5MCwweDc4fSB9LAoreyAgMTYsMHgzMjdkLDAsezB4MDAsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4NzQsMHgwMiwweDEyLDB4MGMsMHg4YSwweDkwLDB4Nzh9IH0sCit7ICAxNiwweDMyOGQsMCx7MHgwMCwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDEsMHg3NCwweDAyLDB4MTIsMHgwY30gfSwKK3sgIDE2LDB4MzI5ZCwwLHsweDljLDB4OTAsMHgwMCwweDAyLDB4ZTQsMHgxMiwweDBjLDB4OWMsMHg5MCwweDc4LDB4MDEsMHhlNCwweDc1LDB4ZjAsMHgwMywweDEyfSB9LAoreyAgMTYsMHgzMmFkLDAsezB4MGMsMHhmNCwweDkwLDB4NzgsMHgwMCwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg3NCwweDAxLDB4MTJ9IH0sCit7ICAxNiwweDMyYmQsMCx7MHgwYywweDhhLDB4OTAsMHg3OCwweDAwLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMX0gfSwKK3sgIDE2LDB4MzJjZCwwLHsweDc0LDB4MDMsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwLDB4MDIsMHhlNCwweDEyLDB4MGMsMHg5YywweDkwLDB4NzgsMHgwMSwweGU0fSB9LAoreyAgMTYsMHgzMmRkLDAsezB4NzUsMHhmMCwweDAzLDB4MTIsMHgwYywweGY0LDB4OTAsMHg3OCwweDAwLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTB9IH0sCit7ICAxNiwweDMyZWQsMCx7MHhmOSwweDc0LDB4MTAsMHgxMiwweDBjLDB4OGEsMHg5MCwweDc4LDB4MDAsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMH0gfSwKK3sgIDE2LDB4MzJmZCwwLHsweGY5LDB4OTAsMHgwMCwweDAxLDB4NzQsMHgwNiwweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwMiwweGU0LDB4MTIsMHgwYywweDljfSB9LAoreyAgMTYsMHgzMzBkLDAsezB4OTAsMHg3OCwweDAxLDB4ZTQsMHg3NSwweGYwLDB4MDMsMHgxMiwweDBjLDB4ZjQsMHg5MCwweDc4LDB4MDAsMHhlMCwweGZiLDB4YTN9IH0sCit7ICAxNiwweDMzMWQsMCx7MHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4NzQsMHgwMiwweDEyLDB4MGMsMHg4YSwweDkwLDB4NzgsMHgwMCwweGUwLDB4ZmIsMHhhM30gfSwKK3sgIDE2LDB4MzMyZCwwLHsweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDEsMHg3NCwweDA0LDB4MTIsMHgwYywweDljLDB4OTAsMHgwMCwweDAyfSB9LAoreyAgMTYsMHgzMzNkLDAsezB4ZTQsMHgxMiwweDBjLDB4OWMsMHg5MCwweDc4LDB4MDEsMHhlNCwweDc1LDB4ZjAsMHgwMywweDEyLDB4MGMsMHhmNCwweDkwLDB4Nzh9IH0sCit7ICAxNiwweDMzNGQsMCx7MHgwMCwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg3NCwweDAyLDB4MTIsMHgwYywweDhhLDB4OTAsMHg3OH0gfSwKK3sgIDE2LDB4MzM1ZCwwLHsweDAwLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweDc0LDB4MDQsMHgxMiwweDBjfSB9LAoreyAgMTYsMHgzMzZkLDAsezB4OWMsMHg5MCwweDAwLDB4MDIsMHg3NCwweDA0LDB4MTIsMHgwYywweDljLDB4OTAsMHg3OCwweDAxLDB4ZTQsMHg3NSwweGYwLDB4MDN9IH0sCit7ICAxNiwweDMzN2QsMCx7MHgxMiwweDBjLDB4ZjQsMHg5MCwweDc4LDB4MDAsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4NzQsMHgwMn0gfSwKK3sgIDE2LDB4MzM4ZCwwLHsweDEyLDB4MGMsMHg4YSwweDkwLDB4NzgsMHgwMCwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwfSB9LAoreyAgMTYsMHgzMzlkLDAsezB4MDEsMHg3NCwweDAzLDB4MTIsMHgwYywweDljLDB4OTAsMHgwMCwweDAyLDB4NzQsMHgwNCwweDEyLDB4MGMsMHg5YywweDkwLDB4Nzh9IH0sCit7ICAxNiwweDMzYWQsMCx7MHgwMSwweGU0LDB4NzUsMHhmMCwweDAzLDB4MTIsMHgwYywweGY0LDB4OTAsMHg3OCwweDAwLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYX0gfSwKK3sgIDE2LDB4MzNiZCwwLHsweGEzLDB4ZTAsMHhmOSwweDc0LDB4MDIsMHgxMiwweDBjLDB4OGEsMHg5MCwweDc4LDB4MDAsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhfSB9LAoreyAgMTYsMHgzM2NkLDAsezB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAxLDB4NzQsMHgwMiwweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwMiwweDc0LDB4MDR9IH0sCit7ICAxNiwweDMzZGQsMCx7MHgxMiwweDBjLDB4OWMsMHg5MCwweDc4LDB4MDEsMHhlNCwweDc1LDB4ZjAsMHgwMywweDEyLDB4MGMsMHhmNCwweDkwLDB4NzgsMHgwMH0gfSwKK3sgIDE2LDB4MzNlZCwwLHsweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg3NCwweDAyLDB4MTIsMHgwYywweDhhLDB4OTAsMHg3OCwweDAwfSB9LAoreyAgMTYsMHgzM2ZkLDAsezB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweDc0LDB4MDEsMHgxMiwweDBjLDB4OWN9IH0sCit7ICAgOCwweDM0MGQsMCx7MHg5MCwweDAwLDB4MDIsMHg3NCwweDA0LDB4MTIsMHgwYywweDljfSB9LAoreyAgIDEsMHgzNDE1LDAsezB4MjJ9IH0sCit7ICAxNiwweDM0MTYsMCx7MHhlNCwweGZlLDB4OTAsMHg3OSwweDIwLDB4ZTAsMHhmZCwweGI0LDB4MDUsMHgxMSwweDkwLDB4NzgsMHgxZiwweDc0LDB4MDEsMHhmMH0gfSwKK3sgIDE2LDB4MzQyNiwwLHsweGEzLDB4NzQsMHg3OCwweGYwLDB4YTMsMHg3NCwweGIyLDB4ZjAsMHg3NSwweDM1LDB4MDcsMHhlZCwweGI0LDB4MDYsMHgxMSwweDkwfSB9LAoreyAgMTYsMHgzNDM2LDAsezB4NzgsMHgxZiwweDc0LDB4MDEsMHhmMCwweGEzLDB4NzQsMHg3OCwweGYwLDB4YTMsMHg3NCwweGZmLDB4ZjAsMHg3NSwweDM1LDB4MDN9IH0sCit7ICAxNiwweDM0NDYsMCx7MHg5MCwweDc5LDB4OTksMHhlMCwweDE0LDB4NjAsMHgxMSwweDE0LDB4NjAsMHg1YiwweDI0LDB4MDIsMHg2MCwweDAyLDB4YzEsMHgwNn0gfSwKK3sgIDE2LDB4MzQ1NiwwLHsweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDc5LDB4OTcsMHhlMCwweDE0LDB4NzAsMHgzZSwweGU0fSB9LAoreyAgMTYsMHgzNDY2LDAsezB4ZmYsMHhlZiwweGMzLDB4OTUsMHgzNSwweDUwLDB4MmYsMHhjZCwweGVlLDB4Y2QsMHgwZSwweDc0LDB4MjEsMHgyZCwweGY1LDB4ODJ9IH0sCit7ICAxNiwweDM0NzYsMCx7MHhlNCwweDM0LDB4NzksMHhmNSwweDgzLDB4ZTAsMHhmZCwweDkwLDB4NzgsMHgxZiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhM30gfSwKK3sgIDE2LDB4MzQ4NiwwLHsweGUwLDB4ZjksMHg5MCwweDAwLDB4MDEsMHhlZCwweDEyLDB4MGMsMHg5YywweDkwLDB4NzgsMHgyMCwweGU0LDB4NzUsMHhmMCwweDBifSB9LAoreyAgMTYsMHgzNDk2LDAsezB4MTIsMHgwYywweGY0LDB4MGYsMHg4MCwweGNiLDB4OTAsMHg3OSwweDc1LDB4NzQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjR9IH0sCit7ICAxNiwweDM0YTYsMCx7MHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3OSwweDk3LDB4ZTAsMHgyNCwweGZlLDB4NjAsMHg2MywweDE0LDB4NzAsMHgwMn0gfSwKK3sgIDE2LDB4MzRiNiwwLHsweGExLDB4NjQsMHgxNCwweDcwLDB4MDIsMHhhMSwweGIyLDB4MjQsMHgwMywweDYwLDB4MDIsMHhhMSwweGZlLDB4ZTQsMHhmZiwweGVmfSB9LAoreyAgMTYsMHgzNGM2LDAsezB4YzMsMHg5NSwweDM1LDB4NTAsMHg0NCwweGNkLDB4ZWUsMHhjZCwweDBlLDB4NzQsMHgyMSwweDJkLDB4ZjUsMHg4MiwweGU0LDB4MzR9IH0sCit7ICAxNiwweDM0ZDYsMCx7MHg3OSwweGY1LDB4ODMsMHhlMCwweGZkLDB4OTAsMHg3OCwweDFmLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOX0gfSwKK3sgIDE2LDB4MzRlNiwwLHsweDkwLDB4MDAsMHgwMywweGVkLDB4MTIsMHgwYywweDljLDB4Y2QsMHhlZSwweGNkLDB4MGUsMHg3NCwweDIxLDB4MmQsMHhmNSwweDgyfSB9LAoreyAgMTYsMHgzNGY2LDAsezB4ZTQsMHgzNCwweDc5LDB4ZjUsMHg4MywweGUwLDB4OTAsMHgwMCwweDA0LDB4MTIsMHgwYywweDljLDB4OTAsMHg3OCwweDIwLDB4ZTR9IH0sCit7ICAxNiwweDM1MDYsMCx7MHg3NSwweGYwLDB4MGIsMHgxMiwweDBjLDB4ZjQsMHgwZiwweDgwLDB4YjYsMHg5MCwweDc5LDB4NzUsMHg3NCwweDAxLDB4ZjAsMHgyMn0gfSwKK3sgIDE2LDB4MzUxNiwwLHsweGU0LDB4ZmYsMHhlZiwweGMzLDB4OTUsMHgzNSwweDQwLDB4MDIsMHhjMSwweDBkLDB4Y2QsMHhlZSwweGNkLDB4MGUsMHg3NCwweDIxfSB9LAoreyAgMTYsMHgzNTI2LDAsezB4MmQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc5LDB4ZjUsMHg4MywweGUwLDB4ZmQsMHg5MCwweDc4LDB4MWYsMHhlMCwweGZiLDB4YTN9IH0sCit7ICAxNiwweDM1MzYsMCx7MHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDA1LDB4ZWQsMHgxMiwweDBjLDB4OWMsMHhjZCwweGVlLDB4Y2QsMHgwZX0gfSwKK3sgIDE2LDB4MzU0NiwwLHsweDc0LDB4MjEsMHgyZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzksMHhmNSwweDgzLDB4ZTAsMHg5MCwweDAwLDB4MDYsMHgxMiwweDBjfSB9LAoreyAgMTYsMHgzNTU2LDAsezB4OWMsMHg5MCwweDc4LDB4MjAsMHhlNCwweDc1LDB4ZjAsMHgwYiwweDEyLDB4MGMsMHhmNCwweDBmLDB4ODAsMHhiNCwweGU0LDB4ZmZ9IH0sCit7ICAxNiwweDM1NjYsMCx7MHhlZiwweGMzLDB4OTUsMHgzNSwweDQwLDB4MDIsMHhjMSwweDBkLDB4Y2QsMHhlZSwweGNkLDB4MGUsMHg3NCwweDIxLDB4MmQsMHhmNX0gfSwKK3sgIDE2LDB4MzU3NiwwLHsweDgyLDB4ZTQsMHgzNCwweDc5LDB4ZjUsMHg4MywweGUwLDB4ZmQsMHg5MCwweDc4LDB4MWYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhfSB9LAoreyAgMTYsMHgzNTg2LDAsezB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDA3LDB4ZWQsMHgxMiwweDBjLDB4OWMsMHhjZCwweGVlLDB4Y2QsMHgwZSwweDc0LDB4MjF9IH0sCit7ICAxNiwweDM1OTYsMCx7MHgyZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzksMHhmNSwweDgzLDB4ZTAsMHg5MCwweDAwLDB4MDgsMHgxMiwweDBjLDB4OWMsMHg5MH0gfSwKK3sgIDE2LDB4MzVhNiwwLHsweDc4LDB4MjAsMHhlNCwweDc1LDB4ZjAsMHgwYiwweDEyLDB4MGMsMHhmNCwweDBmLDB4ODAsMHhiNCwweGU0LDB4ZmYsMHhlZiwweGMzfSB9LAoreyAgMTYsMHgzNWI2LDAsezB4OTUsMHgzNSwweDUwLDB4NTMsMHhjZCwweGVlLDB4Y2QsMHgwZSwweDc0LDB4MjEsMHgyZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4Nzl9IH0sCit7ICAxNiwweDM1YzYsMCx7MHhmNSwweDgzLDB4ZTAsMHhmZCwweDkwLDB4NzgsMHgxZiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MH0gfSwKK3sgIDE2LDB4MzVkNiwwLHsweDAwLDB4MDksMHhlZCwweDEyLDB4MGMsMHg5YywweGNkLDB4ZWUsMHhjZCwweDBlLDB4NzQsMHgyMSwweDJkLDB4ZjUsMHg4MiwweGU0fSB9LAoreyAgMTYsMHgzNWU2LDAsezB4MzQsMHg3OSwweGY1LDB4ODMsMHhlMCwweDkwLDB4MDAsMHgwYSwweDEyLDB4MGMsMHg5YywweDkwLDB4NzgsMHgyMCwweGU0LDB4NzV9IH0sCit7ICAxNiwweDM1ZjYsMCx7MHhmMCwweDBiLDB4MTIsMHgwYywweGY0LDB4MGYsMHg4MCwweGI2LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMn0gfSwKK3sgICA3LDB4MzYwNiwwLHsweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgIDEsMHgzNjBkLDAsezB4MjJ9IH0sCit7ICAxNiwweDM2MGUsMCx7MHhlNCwweGZlLDB4OTAsMHg3OSwweDIwLDB4ZTAsMHhmZCwweGI0LDB4MDUsMHgxMCwweDkwLDB4NzgsMHgyOCwweDc0LDB4MDEsMHhmMH0gfSwKK3sgIDE2LDB4MzYxZSwwLHsweGEzLDB4NzQsMHg3OCwweGYwLDB4YTMsMHg3NCwweGIyLDB4ZjAsMHg3ZiwweDA3LDB4ZWQsMHhiNCwweDA2LDB4MTAsMHg5MCwweDc4fSB9LAoreyAgMTYsMHgzNjJlLDAsezB4MjgsMHg3NCwweDAxLDB4ZjAsMHhhMywweDc0LDB4NzgsMHhmMCwweGEzLDB4NzQsMHhmZiwweGYwLDB4N2YsMHgwMywweDkwLDB4Nzh9IH0sCit7ICAxNiwweDM2M2UsMCx7MHgyOCwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHgxMiwweDBjLDB4NDQsMHhmZCwweDkwLDB4N2YsMHhlYX0gfSwKK3sgIDE2LDB4MzY0ZSwwLHsweGUwLDB4NmQsMHg2MCwweDEyLDB4ZWUsMHhjMywweDlmLDB4NTAsMHgwZCwweDkwLDB4NzgsMHgyOSwweGU0LDB4NzUsMHhmMCwweDBifSB9LAoreyAgMTYsMHgzNjVlLDAsezB4MTIsMHgwYywweGY0LDB4MGUsMHg4MCwweGQ4LDB4OTAsMHg3ZiwweGViLDB4ZTAsMHgxNCwweDYwLDB4MTEsMHgxNCwweDYwLDB4NDZ9IH0sCit7ICAxNiwweDM2NmUsMCx7MHgyNCwweDAyLDB4NjAsMHgwMiwweGUxLDB4OWEsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MzY3ZSwwLHsweGU5LDB4ZTAsMHgyNCwweDdmLDB4NzAsMHgyOCwweGVlLDB4NmYsMHg3MCwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxfSB9LAoreyAgMTYsMHgzNjhlLDAsezB4ZjAsMHgyMiwweDkwLDB4NzgsMHgyOCwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDF9IH0sCit7ICAxNiwweDM2OWUsMCx7MHgxMiwweDBjLDB4NWQsMHg5MCwweDdmLDB4MDAsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MzZhZSwwLHsweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHg3ZSwweDYwLDB4NDAsMHgxNCwweDYwfSB9LAoreyAgMTYsMHgzNmJlLDAsezB4NmYsMHgxNCwweDcwLDB4MDIsMHhlMSwweDYwLDB4MjQsMHgwMywweDYwLDB4MDIsMHhlMSwweDkyLDB4ZWUsMHg2ZiwweDcwLDB4MDh9IH0sCit7ICAxNiwweDM2Y2UsMCx7MHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3OCwweDI4LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYX0gfSwKK3sgIDE2LDB4MzZkZSwwLHsweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMywweDEyLDB4MGMsMHg1ZCwweDkwLDB4N2YsMHgwMCwweGYwLDB4OTAsMHgwMCwweDA0fSB9LAoreyAgMTYsMHgzNmVlLDAsezB4MTIsMHgwYywweDVkLDB4OTAsMHg3ZiwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAyLDB4ZjAsMHgyMiwweGVlLDB4NmZ9IH0sCit7ICAxNiwweDM2ZmUsMCx7MHg3MCwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4NzgsMHgyOCwweGUwLDB4ZmIsMHhhM30gfSwKK3sgIDE2LDB4MzcwZSwwLHsweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDUsMHgxMiwweDBjLDB4NWQsMHg5MCwweDdmLDB4MDAsMHhmMCwweDkwfSB9LAoreyAgMTYsMHgzNzFlLDAsezB4MDAsMHgwNiwweDEyLDB4MGMsMHg1ZCwweDkwLDB4N2YsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMiwweGYwLDB4MjJ9IH0sCit7ICAxNiwweDM3MmUsMCx7MHhlZSwweDZmLDB4NzAsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDc4LDB4MjgsMHhlMH0gfSwKK3sgIDE2LDB4MzczZSwwLHsweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDA3LDB4MTIsMHgwYywweDVkLDB4OTAsMHg3ZiwweDAwfSB9LAoreyAgMTYsMHgzNzRlLDAsezB4ZjAsMHg5MCwweDAwLDB4MDgsMHgxMiwweDBjLDB4NWQsMHg5MCwweDdmLDB4MDEsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDJ9IH0sCit7ICAxNiwweDM3NWUsMCx7MHhmMCwweDIyLDB4ZWUsMHg2ZiwweDcwLDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3OH0gfSwKK3sgIDE2LDB4Mzc2ZSwwLHsweDI4LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwOSwweDEyLDB4MGMsMHg1ZCwweDkwfSB9LAoreyAgMTYsMHgzNzdlLDAsezB4N2YsMHgwMCwweGYwLDB4OTAsMHgwMCwweDBhLDB4MTIsMHgwYywweDVkLDB4OTAsMHg3ZiwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YjV9IH0sCit7ICAxNiwweDM3OGUsMCx7MHg3NCwweDAyLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMH0gfSwKK3sgICAzLDB4Mzc5ZSwwLHsweDQ0LDB4MDEsMHhmMH0gfSwKK3sgICAxLDB4MzdhMSwwLHsweDIyfSB9LAoreyAgMTYsMHgzN2EyLDAsezB4YzAsMHhlMCwweGMwLDB4ZjAsMHhjMCwweDgzLDB4YzAsMHg4MiwweGMwLDB4ZDAsMHhlOCwweGMwLDB4ZTAsMHhlOSwweGMwLDB4ZTB9IH0sCit7ICAxNiwweDM3YjIsMCx7MHhlYSwweGMwLDB4ZTAsMHhlYiwweGMwLDB4ZTAsMHhlYywweGMwLDB4ZTAsMHhlZCwweGMwLDB4ZTAsMHhlZSwweGMwLDB4ZTAsMHhlZn0gfSwKK3sgIDE2LDB4MzdjMiwwLHsweGMwLDB4ZTAsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDEwLDB4ZjAsMHg5MCwweDc5LDB4ODMsMHhlMCwweDU0fSB9LAoreyAgMTYsMHgzN2QyLDAsezB4ZmQsMHhmMCwweDEyLDB4MmYsMHhkZiwweGQwLDB4ZTAsMHhmZiwweGQwLDB4ZTAsMHhmZSwweGQwLDB4ZTAsMHhmZCwweGQwLDB4ZTB9IH0sCit7ICAxNiwweDM3ZTIsMCx7MHhmYywweGQwLDB4ZTAsMHhmYiwweGQwLDB4ZTAsMHhmYSwweGQwLDB4ZTAsMHhmOSwweGQwLDB4ZTAsMHhmOCwweGQwLDB4ZDAsMHhkMH0gfSwKK3sgICA4LDB4MzdmMiwwLHsweDgyLDB4ZDAsMHg4MywweGQwLDB4ZjAsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAgNiwweDM3ZmEsMCx7MHg1MywweDkxLDB4YmYsMHhkMiwweDI2LDB4MzJ9IH0sCit7ICAxNiwweDM4MDAsMCx7MHhlNCwweGZlLDB4OTAsMHg3OSwweDIwLDB4ZTAsMHhmZCwweGI0LDB4MDUsMHgxMCwweDkwLDB4NzgsMHgyMiwweDc0LDB4MDEsMHhmMH0gfSwKK3sgIDE2LDB4MzgxMCwwLHsweGEzLDB4NzQsMHg3OCwweGYwLDB4YTMsMHg3NCwweGIyLDB4ZjAsMHg3ZiwweDA3LDB4ZWQsMHhiNCwweDA2LDB4MTAsMHg5MCwweDc4fSB9LAoreyAgMTYsMHgzODIwLDAsezB4MjIsMHg3NCwweDAxLDB4ZjAsMHhhMywweDc0LDB4NzgsMHhmMCwweGEzLDB4NzQsMHhmZiwweGYwLDB4N2YsMHgwMywweDkwLDB4Nzh9IH0sCit7ICAxNiwweDM4MzAsMCx7MHgyMiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHgxMiwweDBjLDB4NDQsMHhmZCwweDkwLDB4NzksMHg5OH0gfSwKK3sgIDE2LDB4Mzg0MCwwLHsweGUwLDB4NmQsMHg2MCwweDEyLDB4ZWUsMHhjMywweDlmLDB4NTAsMHgwZCwweDkwLDB4NzgsMHgyMywweGU0LDB4NzUsMHhmMCwweDBifSB9LAoreyAgMTYsMHgzODUwLDAsezB4MTIsMHgwYywweGY0LDB4MGUsMHg4MCwweGQ4LDB4OTAsMHg3OSwweDk5LDB4ZTAsMHgxNCwweDYwLDB4MTEsMHgxNCwweDYwLDB4NDh9IH0sCit7ICAxNiwweDM4NjAsMCx7MHgyNCwweDAyLDB4NjAsMHgwMiwweDIxLDB4ODUsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3OX0gfSwKK3sgIDE2LDB4Mzg3MCwwLHsweDk3LDB4ZTAsMHgxNCwweDcwLDB4MmIsMHhlZSwweDZmLDB4NzAsMHgwOSwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgMTYsMHgzODgwLDAsezB4ODAsMHgxNywweDkwLDB4NzksMHgyMSwweGUwLDB4ZmQsMHg5MCwweDc4LDB4MjIsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTN9IH0sCit7ICAxNiwweDM4OTAsMCx7MHhlMCwweGY5LDB4OTAsMHgwMCwweDAxLDB4ZWQsMHgxMiwweDBjLDB4OWMsMHg5MCwweDc5LDB4NzUsMHg3NCwweDAxLDB4ZjAsMHgyMn0gfSwKK3sgIDE2LDB4MzhhMCwwLHsweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDc5LDB4OTcsMHhlMCwweDI0LDB4ZmUsMHg2MCwweDQzfSB9LAoreyAgMTYsMHgzOGIwLDAsezB4MTQsMHg2MCwweDZlLDB4MTQsMHg3MCwweDAyLDB4MjEsMHg0ZiwweDI0LDB4MDMsMHg2MCwweDAyLDB4MjEsMHg3ZCwweGVlLDB4NmZ9IH0sCit7ICAxNiwweDM4YzAsMCx7MHg3MCwweDA5LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg4MCwweDIxLDB4OTAsMHg3OSwweDIxLDB4ZTAsMHhmZH0gfSwKK3sgIDE2LDB4MzhkMCwwLHsweDkwLDB4NzgsMHgyMiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDMsMHhlZCwweDEyfSB9LAoreyAgMTYsMHgzOGUwLDAsezB4MGMsMHg5YywweDkwLDB4NzksMHgyMiwweGUwLDB4OTAsMHgwMCwweDA0LDB4MTIsMHgwYywweDljLDB4OTAsMHg3OSwweDc1LDB4NzR9IH0sCit7ICAxNiwweDM4ZjAsMCx7MHgwMSwweGYwLDB4MjIsMHhlZSwweDZmLDB4NzAsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MH0gfSwKK3sgIDE2LDB4MzkwMCwwLHsweDc5LDB4MjEsMHhlMCwweGZkLDB4OTAsMHg3OCwweDIyLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwfSB9LAoreyAgMTYsMHgzOTEwLDAsezB4MDAsMHgwNSwweGVkLDB4MTIsMHgwYywweDljLDB4OTAsMHg3OSwweDIyLDB4ZTAsMHg5MCwweDAwLDB4MDYsMHgxMiwweDBjLDB4OWN9IH0sCit7ICAxNiwweDM5MjAsMCx7MHgyMiwweGVlLDB4NmYsMHg3MCwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4NzksMHgyMX0gfSwKK3sgIDE2LDB4MzkzMCwwLHsweGUwLDB4ZmQsMHg5MCwweDc4LDB4MjIsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDA3fSB9LAoreyAgMTYsMHgzOTQwLDAsezB4ZWQsMHgxMiwweDBjLDB4OWMsMHg5MCwweDc5LDB4MjIsMHhlMCwweDkwLDB4MDAsMHgwOCwweDEyLDB4MGMsMHg5YywweDIyLDB4ZWV9IH0sCit7ICAxNiwweDM5NTAsMCx7MHg2ZiwweDcwLDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3OSwweDIxLDB4ZTAsMHhmZX0gfSwKK3sgIDE2LDB4Mzk2MCwwLHsweDkwLDB4NzgsMHgyMiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDksMHhlZSwweDEyfSB9LAoreyAgMTYsMHgzOTcwLDAsezB4MGMsMHg5YywweDkwLDB4NzksMHgyMiwweGUwLDB4OTAsMHgwMCwweDBhLDB4MTIsMHgwYywweDljLDB4MjIsMHg5MCwweDdmLDB4YjR9IH0sCit7ICAxMiwweDM5ODAsMCx7MHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjB9IH0sCit7ICAgMSwweDM5OGMsMCx7MHgyMn0gfSwKK3sgIDE2LDB4Mzk4ZCwwLHsweGEyLDB4YWYsMHhlNCwweDMzLDB4ZjUsMHgxMiwweGU0LDB4OTAsMHg3OSwweDgzLDB4ZjAsMHgxMiwweDJmLDB4ZGYsMHg5MCwweDdmfSB9LAoreyAgMTYsMHgzOTlkLDAsezB4ZTAsMHg3NCwweDkwLDB4ZjAsMHg5MCwweDdmLDB4ZTEsMHg3NCwweDA0LDB4ZjAsMHhlNCwweDkwLDB4N2YsMHhkZCwweGYwLDB4OTB9IH0sCit7ICAxNiwweDM5YWQsMCx7MHg3ZiwweGExLDB4ZjAsMHg1MywweDhlLDB4ZjgsMHg3NSwweDg4LDB4MDUsMHg3NSwweGI4LDB4MjAsMHg3NSwweGY4LDB4MDEsMHg0M30gfSwKK3sgIDE2LDB4MzliZCwwLHsweDhlLDB4MzAsMHhmNSwweGM4LDB4NzUsMHhjYSwweDdmLDB4NzUsMHhjYiwweGY4LDB4NDMsMHhhOCwweDIwLDB4OTAsMHg3OSwweDc0fSB9LAoreyAgMTYsMHgzOWNkLDAsezB4MDQsMHhmMCwweGMyLDB4MjIsMHhlNCwweGY1LDB4MGYsMHg5MCwweDc5LDB4NzgsMHhmMCwweGEzLDB4ZjAsMHg5MCwweDc5LDB4NjJ9IH0sCit7ICAxNiwweDM5ZGQsMCx7MHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4OTAsMHg3OSwweDY2LDB4ZjAsMHhhMywweGYwLDB4OTAsMHg3OSwweDdiLDB4ZjAsMHhhM30gfSwKK3sgIDE2LDB4MzllZCwwLHsweGYwLDB4OTAsMHg3OSwweDg0LDB4ZjAsMHg5MCwweDc5LDB4N2QsMHhmMCwweDkwLDB4NzksMHg3NSwweGYwLDB4YTMsMHhmMCwweGEzfSB9LAoreyAgMTYsMHgzOWZkLDAsezB4ZjAsMHhjMiwweDIzLDB4YzIsMHgyNCwweGMyLDB4MjUsMHhjMiwweDI2LDB4YzIsMHgyMCwweDkwLDB4N2YsMHg5YiwweGUwLDB4ZjV9IH0sCit7ICAxNiwweDNhMGQsMCx7MHgwYSwweDU0LDB4MjAsMHhmNSwweDBhLDB4NzAsMHgwNiwweDkwLDB4NzksMHg3ZSwweGYwLDB4ODAsMHgwNiwweDkwLDB4NzksMHg3ZX0gfSwKK3sgIDE2LDB4M2ExZCwwLHsweDc0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHg5YiwweGUwLDB4ZjUsMHgwYSwweDU0LDB4MDIsMHhmNSwweDBhLDB4NzAsMHgwNiwweDkwfSB9LAoreyAgMTYsMHgzYTJkLDAsezB4NzksMHg3ZiwweGYwLDB4ODAsMHgwNiwweDkwLDB4NzksMHg3ZiwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3OCwweDc0LDB4MDJ9IH0sCit7ICAxNiwweDNhM2QsMCx7MHhmMCwweDkwLDB4NzksMHg4NCwweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg5MCwweDc5LDB4N2YsMHhlMCwweGI0LDB4MDEsMHgwOX0gfSwKK3sgIDE2LDB4M2E0ZCwwLHsweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmZSwweGYwLDB4ODAsMHgwNywweDkwLDB4NzksMHg3OSwweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgMTYsMHgzYTVkLDAsezB4OTAsMHg3OSwweDc5LDB4ZTAsMHg5MCwweDc5LDB4ODQsMHhmMCwweDEyLDB4MGIsMHhhMiwweDkwLDB4NzksMHg3OCwweDc0LDB4MDF9IH0sCit7ICAxNiwweDNhNmQsMCx7MHhmMCwweDkwLDB4NzksMHg3YywweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHg5MCwweDc5LDB4N2UsMHhlMCwweGI0LDB4MDEsMHgwOX0gfSwKK3sgIDE2LDB4M2E3ZCwwLHsweDkwLDB4NzksMHg3OSwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODAsMHgwNywweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmYiwweGYwfSB9LAoreyAgMTYsMHgzYThkLDAsezB4OTAsMHg3OSwweDc5LDB4ZTAsMHg5MCwweDc5LDB4N2MsMHhmMCwweDEyLDB4MGIsMHhhMiwweGU0LDB4OTAsMHg3OSwweDc4LDB4ZjB9IH0sCit7ICAxNiwweDNhOWQsMCx7MHhhMywweDA0LDB4ZjAsMHhlNCwweDkwLDB4NzksMHg4OCwweGYwLDB4MTIsMHgwYiwweGEyLDB4OTAsMHg3ZiwweGZjLDB4NzQsMHhkZH0gfSwKK3sgIDE2LDB4M2FhZCwwLHsweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmZiwweGYwLDB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMSwweGYwLDB4YTMsMHhmMCwweDEyfSB9LAoreyAgMTYsMHgzYWJkLDAsezB4MGIsMHhhMiwweGU0LDB4OTAsMHg3OSwweDdhLDB4ZjAsMHg5MCwweDc5LDB4ODMsMHgwNCwweGYwLDB4MTIsMHgyZiwweGRmLDB4ZTR9IH0sCit7ICAxNiwweDNhY2QsMCx7MHg5MCwweDc5LDB4MzAsMHhmMCwweDkwLDB4NzksMHg4NSwweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHgxMiwweDJlLDB4OTQsMHg5MH0gfSwKK3sgIDE2LDB4M2FkZCwwLHsweDc5LDB4MmQsMHg3NCwweDAyLDB4ZjAsMHg5MCwweDc5LDB4ODgsMHgxNCwweGYwLDB4YzIsMHgyZiwweGU0LDB4OTAsMHg3OSwweDY4fSB9LAoreyAgMTYsMHgzYWVkLDAsezB4ZjAsMHg5MCwweDc5LDB4OGEsMHhmMCwweDkwLDB4NzksMHg2YSwweGYwLDB4YTMsMHhmMCwweDc1LDB4MTMsMHgwOCwweDc1LDB4MTR9IH0sCit7ICAxNiwweDNhZmQsMCx7MHgwOCwweGY1LDB4MTYsMHhmNSwweDE1LDB4ZjUsMHgxNywweDkwLDB4NzksMHg4YywweGYwLDB4OTAsMHg3OSwweDhiLDB4ZjAsMHgyMn0gfSwKK3sgIDE2LDB4M2IwZCwwLHsweDdiLDB4MDEsMHg3YSwweDc4LDB4NzksMHg1OCwweDkwLDB4NzgsMHgwMywweGViLDB4ZjAsMHhhMywweGVhLDB4ZjAsMHhhMywweGU5fSB9LAoreyAgMTYsMHgzYjFkLDAsezB4ZjAsMHg3NCwweDQwLDB4MTIsMHgwYywweDhhLDB4OTAsMHg3OCwweDAzLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTB9IH0sCit7ICAxNiwweDNiMmQsMCx7MHhmOSwweDkwLDB4MDAsMHgwMSwweDc0LDB4MGEsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwLDB4MDIsMHgxMiwweDBkLDB4ZjYsMHgwMH0gfSwKK3sgIDE2LDB4M2IzZCwwLHsweDAwLDB4YmIsMHg4MCwweDkwLDB4MDAsMHgwNiwweDEyLDB4MGQsMHhmNiwweDAwLDB4MDAsMHhhYywweDQ0LDB4OTAsMHgwMCwweDBhfSB9LAoreyAgMTYsMHgzYjRkLDAsezB4MTIsMHgwZCwweGY2LDB4MDAsMHgwMSwweDc3LDB4MDAsMHg5MCwweDc4LDB4MDQsMHhlNCwweDc1LDB4ZjAsMHgwZiwweDEyLDB4MGN9IH0sCit7ICAxNiwweDNiNWQsMCx7MHhmNCwweDkwLDB4NzgsMHgwMywweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg3NCwweDQwLDB4MTIsMHgwY30gfSwKK3sgIDE2LDB4M2I2ZCwwLHsweDhhLDB4OTAsMHg3OCwweDAzLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweDc0fSB9LAoreyAgMTYsMHgzYjdkLDAsezB4OGMsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwLDB4MDIsMHgxMiwweDBkLDB4ZjYsMHgwMCwweDAwLDB4YmIsMHg4MCwweDkwLDB4MDB9IH0sCit7ICAxNiwweDNiOGQsMCx7MHgwNiwweDEyLDB4MGQsMHhmNiwweDAwLDB4MDAsMHhhYywweDQ0LDB4OTAsMHgwMCwweDBhLDB4MTIsMHgwZCwweGY2LDB4MDAsMHgwMX0gfSwKK3sgIDE2LDB4M2I5ZCwwLHsweDc3LDB4MDAsMHg5MCwweDc4LDB4MDQsMHhlNCwweDc1LDB4ZjAsMHgwZiwweDEyLDB4MGMsMHhmNCwweDkwLDB4NzgsMHgwMywweGUwfSB9LAoreyAgMTYsMHgzYmFkLDAsezB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg3NCwweDQwLDB4MTIsMHgwYywweDhhLDB4OTAsMHg3OCwweDAzLDB4ZTB9IH0sCit7ICAxNiwweDNiYmQsMCx7MHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweDc0LDB4OGYsMHgxMiwweDBjLDB4OWMsMHg5MH0gfSwKK3sgIDE2LDB4M2JjZCwwLHsweDc4LDB4MDQsMHhlNCwweDc1LDB4ZjAsMHgwZiwweDEyLDB4MGMsMHhmNCwweDkwLDB4NzgsMHgwMywweGUwLDB4ZmIsMHhhMywweGUwfSB9LAoreyAgMTYsMHgzYmRkLDAsezB4ZmEsMHhhMywweGUwLDB4ZjksMHg3NCwweDQxLDB4MTIsMHgwYywweDhhLDB4OTAsMHg3OCwweDAzLDB4ZTAsMHhmYiwweGEzLDB4ZTB9IH0sCit7ICAxNiwweDNiZWQsMCx7MHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweDc0LDB4ODQsMHgxMiwweDBjLDB4OWMsMHg5MCwweDc4LDB4MDQsMHhlNH0gfSwKK3sgIDE2LDB4M2JmZCwwLHsweDc1LDB4ZjAsMHgwZiwweDEyLDB4MGMsMHhmNCwweDkwLDB4NzgsMHgwMywweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwfSB9LAoreyAgMTYsMHgzYzBkLDAsezB4ZjksMHg3NCwweDYxLDB4MTIsMHgwYywweDhhLDB4OTAsMHg3OCwweDAzLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTB9IH0sCit7ICAxNiwweDNjMWQsMCx7MHhmOSwweDkwLDB4MDAsMHgwMSwweDc0LDB4ODEsMHgxMiwweDBjLDB4OWMsMHg5MCwweDc4LDB4MDQsMHhlNCwweDc1LDB4ZjAsMHgwZn0gfSwKK3sgIDE2LDB4M2MyZCwwLHsweDEyLDB4MGMsMHhmNCwweDkwLDB4NzgsMHgwMywweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg3NCwweDYxfSB9LAoreyAgMTYsMHgzYzNkLDAsezB4MTIsMHgwYywweDhhLDB4OTAsMHg3OCwweDAzLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDB9IH0sCit7ICAgNiwweDNjNGQsMCx7MHgwMSwweDc0LDB4MDEsMHgxMiwweDBjLDB4OWN9IH0sCit7ICAgMSwweDNjNTMsMCx7MHgyMn0gfSwKK3sgIDE2LDB4M2M1NCwwLHsweGMwLDB4ZTAsMHhjMCwweGYwLDB4YzAsMHg4MywweGMwLDB4ODIsMHhjMCwweGQwLDB4ZTgsMHhjMCwweGUwLDB4ZTksMHhjMCwweGUwfSB9LAoreyAgMTYsMHgzYzY0LDAsezB4ZWEsMHhjMCwweGUwLDB4ZWIsMHhjMCwweGUwLDB4ZWMsMHhjMCwweGUwLDB4ZWQsMHhjMCwweGUwLDB4ZWUsMHhjMCwweGUwLDB4ZWZ9IH0sCit7ICAgMiwweDNjNzQsMCx7MHhjMCwweGUwfSB9LAoreyAgMTYsMHgzYzc2LDAsezB4OTAsMHg3ZiwweGEyLDB4ZTAsMHhmNSwweDBiLDB4OTAsMHg3ZiwweDc0LDB4ZTAsMHg5MCwweDc5LDB4NzAsMHhmMCwweDkwLDB4N2Z9IH0sCit7ICAxNiwweDNjODYsMCx7MHg3NSwweGUwLDB4OTAsMHg3OSwweDcxLDB4ZjAsMHg5MCwweDc5LDB4ODMsMHhlMCwweGZmLDB4ZmUsMHg1NCwweDAyLDB4ZmUsMHg3MH0gfSwKK3sgIDE2LDB4M2M5NiwwLHsweDBkLDB4ZWYsMHg0NCwweDAyLDB4ZjAsMHgxMiwweDJmLDB4ZGYsMHg5MCwweDc5LDB4NzQsMHg3NCwweDAxLDB4ZjAsMHhlNSwweDBifSB9LAoreyAgMTYsMHgzY2E2LDAsezB4MjAsMHhlMiwweDI4LDB4OTAsMHg3OSwweDcwLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHg3YywweDAwLDB4MjQsMHgwMCwweGY1LDB4MTF9IH0sCit7ICAxNiwweDNjYjYsMCx7MHhlYywweDNlLDB4ZjUsMHgxMCwweDkwLDB4NzksMHg4MiwweGUwLDB4ZmQsMHhhZSwweDEwLDB4YWYsMHgxMSwweDEyLDB4MGMsMHhiZX0gfSwKK3sgIDE2LDB4M2NjNiwwLHsweDkwLDB4NzksMHg3MCwweGVmLDB4ZjAsMHg5MCwweDc5LDB4ODksMHg3NCwweDAxLDB4ZjAsMHgxMiwweDQ4LDB4NDMsMHgxMiwweDQ4fSB9LAoreyAgMTYsMHgzY2Q2LDAsezB4NzYsMHg5MCwweDc5LDB4ODksMHhlMCwweDY0LDB4MDEsMHg3MCwweDMyLDB4MTIsMHg0MSwweDA4LDB4OTAsMHg3OSwweDg5LDB4ZTR9IH0sCit7ICAxNiwweDNjZTYsMCx7MHhmMCwweDkwLDB4N2YsMHg5OCwweGUwLDB4NDQsMHg0MCwweGYwLDB4OTAsMHg3ZiwweDllLDB4ZTAsMHg0NCwweDQwLDB4ZjAsMHg5MH0gfSwKK3sgIDE2LDB4M2NmNiwwLHsweDdmLDB4OTUsMHg3NCwweDgwLDB4ZjAsMHg3NSwweGU4LDB4MDEsMHgxMiwweDA5LDB4MzIsMHg3NSwweGU4LDB4MGQsMHg5MCwweDdmfSB9LAoreyAgMTYsMHgzZDA2LDAsezB4OTUsMHg3NCwweGMwLDB4ZjAsMHg3NSwweGU4LDB4MGQsMHhkMiwweDIwLDB4ODAsMHgwNSwweDc1LDB4ZTgsMHgwMSwweGMyLDB4MjB9IH0sCit7ICAxNiwweDNkMTYsMCx7MHgyMCwweDIwLDB4MmIsMHg5MCwweDc5LDB4MmQsMHhlMCwweGZmLDB4YjQsMHgwMSwweDA5LDB4NzUsMHgwYywweDY3LDB4NzUsMHgwZH0gfSwKK3sgIDE2LDB4M2QyNiwwLHsweDA2LDB4NzUsMHgwZSwweDBiLDB4ZWYsMHhiNCwweDAyLDB4MDksMHg3NSwweDBjLDB4MDAsMHg3NSwweDBkLDB4MDAsMHg3NSwweDBlfSB9LAoreyAgMTYsMHgzZDM2LDAsezB4MGMsMHhlZiwweGI0LDB4MDMsMHgwOSwweDc1LDB4MGMsMHgwMCwweDc1LDB4MGQsMHgwMCwweDc1LDB4MGUsMHgxOCwweDc1LDB4Y2F9IH0sCit7ICAxNiwweDNkNDYsMCx7MHg2ZiwweDc1LDB4Y2IsMHhmZSwweGQyLDB4Y2EsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDAyLDB4ZjAsMHhmMH0gfSwKK3sgIDE2LDB4M2Q1NiwwLHsweGQwLDB4ZTAsMHhmZiwweGQwLDB4ZTAsMHhmZSwweGQwLDB4ZTAsMHhmZCwweGQwLDB4ZTAsMHhmYywweGQwLDB4ZTAsMHhmYiwweGQwfSB9LAoreyAgMTYsMHgzZDY2LDAsezB4ZTAsMHhmYSwweGQwLDB4ZTAsMHhmOSwweGQwLDB4ZTAsMHhmOCwweGQwLDB4ZDAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZjB9IH0sCit7ICAgMywweDNkNzYsMCx7MHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDNkNzksMCx7MHg3NSwweDMzLDB4MjUsMHg3NSwweDM0LDB4MjQsMHg5MCwweDc5LDB4NWMsMHg3NCwweDAxLDB4ZjAsMHhhMywweDc0LDB4NzgsMHhmMH0gfSwKK3sgIDE2LDB4M2Q4OSwwLHsweGEzLDB4NzQsMHhiMiwweGYwLDB4MjAsMHgyZiwweDAyLDB4YzEsMHgxNywweGU0LDB4ZjUsMHgzNSwweDc1LDB4MjIsMHgwMSwweDkwfSB9LAoreyAgMTYsMHgzZDk5LDAsezB4NzksMHg1YywweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDQsMHgxMiwweDBjLDB4NWR9IH0sCit7ICAxNiwweDNkYTksMCx7MHhmNSwweDM2LDB4NzUsMHgzNSwweDA2LDB4NzQsMHg0MiwweDI1LDB4MzUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc5LDB4ZjUsMHg4M30gfSwKK3sgIDE2LDB4M2RiOSwwLHsweGU1LDB4MzYsMHhmMCwweDA1LDB4MzUsMHhlNSwweDM1LDB4YjQsMHgwYywweGViLDB4ZTUsMHgzNSwweGMzLDB4OTQsMHgwZCwweDQwfSB9LAoreyAgMTYsMHgzZGM5LDAsezB4MDIsMHhjMSwweDk4LDB4ZTUsMHgyMiwweDY0LDB4MDEsMHg2MCwweDAyLDB4YzEsMHg5OCwweDkwLDB4N2YsMHhhNSwweGUwLDB4NDR9IH0sCit7ICAxNiwweDNkZDksMCx7MHg4MCwweGYwLDB4OTAsMHg3ZiwweGE2LDB4ZTUsMHgzMywweGYwLDB4MTIsMHg0NiwweGMwLDB4NzQsMHg0ZiwweDI1LDB4MzUsMHhmNX0gfSwKK3sgIDE2LDB4M2RlOSwwLHsweDgyLDB4ZTQsMHgzNCwweDc5LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweGE2LDB4ZjAsMHgxMiwweDQ2LDB4YzAsMHg3NCwweDQyfSB9LAoreyAgMTYsMHgzZGY5LDAsezB4MjUsMHgzNSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzksMHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4YTYsMHhmMCwweDEyLDB4NDZ9IH0sCit7ICAxNiwweDNlMDksMCx7MHhjMCwweDkwLDB4N2YsMHhhNSwweDc0LDB4NDAsMHhmMCwweDEyLDB4MGEsMHhjZCwweDA1LDB4MzUsMHg4MCwweGFjLDB4ZTQsMHhmNX0gfSwKK3sgIDE2LDB4M2UxOSwwLHsweDM1LDB4NzUsMHgyMiwweDAxLDB4OTAsMHg3OSwweDVjLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwfSB9LAoreyAgMTYsMHgzZTI5LDAsezB4MDAsMHgwNCwweDEyLDB4MGMsMHg1ZCwweGY1LDB4MzYsMHg3NSwweDM1LDB4MDYsMHg3NCwweDM1LDB4MjUsMHgzNSwweGY1LDB4ODJ9IH0sCit7ICAxNiwweDNlMzksMCx7MHhlNCwweDM0LDB4NzksMHhmNSwweDgzLDB4ZTUsMHgzNiwweGYwLDB4MDUsMHgzNSwweGU1LDB4MzUsMHhiNCwweDBjLDB4ZWIsMHhlNX0gfSwKK3sgIDE2LDB4M2U0OSwwLHsweDM1LDB4YzMsMHg5NCwweDBkLDB4NTAsMHg0OSwweGU1LDB4MjIsMHg2NCwweDAxLDB4NzAsMHg0MywweDkwLDB4N2YsMHhhNSwweGUwfSB9LAoreyAgMTYsMHgzZTU5LDAsezB4NDQsMHg4MCwweGYwLDB4OTAsMHg3ZiwweGE2LDB4ZTUsMHgzMywweGYwLDB4MTIsMHg0NiwweGMwLDB4NzQsMHg0ZiwweDI1LDB4MzV9IH0sCit7ICAxNiwweDNlNjksMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc5LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweGE2LDB4ZjAsMHgxMiwweDQ2LDB4YzAsMHg3NH0gfSwKK3sgIDE2LDB4M2U3OSwwLHsweDM1LDB4MjUsMHgzNSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzksMHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4YTYsMHhmMCwweDEyfSB9LAoreyAgMTUsMHgzZTg5LDAsezB4NDYsMHhjMCwweDkwLDB4N2YsMHhhNSwweDc0LDB4NDAsMHhmMCwweDEyLDB4MGEsMHhjZCwweDA1LDB4MzUsMHg4MCwweGIwfSB9LAoreyAgIDEsMHgzZTk4LDAsezB4MjJ9IH0sCit7ICAxNiwweDNlOTksMCx7MHg5MCwweDc4LDB4MDksMHg3NCwweDAxLDB4ZjAsMHhhMywweDc0LDB4NzgsMHhmMCwweGEzLDB4NzQsMHhiMiwweGYwLDB4ZTQsMHhmZn0gfSwKK3sgIDE2LDB4M2VhOSwwLHsweGZlLDB4OTAsMHg3OCwweDA5LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweGVmLDB4MTIsMHgwYywweDhhfSB9LAoreyAgMTYsMHgzZWI5LDAsezB4OTAsMHg3OCwweDA5LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweGU0LDB4MTJ9IH0sCit7ICAxNiwweDNlYzksMCx7MHgwYywweDljLDB4OTAsMHgwMCwweDAyLDB4NzQsMHgxNSwweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwMywweGU0LDB4MTIsMHgwY30gfSwKK3sgIDE2LDB4M2VkOSwwLHsweDljLDB4OTAsMHgwMCwweDA0LDB4NzQsMHhmZiwweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwNSwweGU0LDB4MTIsMHgwYywweDljfSB9LAoreyAgMTYsMHgzZWU5LDAsezB4OTAsMHgwMCwweDA2LDB4NzQsMHhjMywweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwNywweGU0LDB4MTIsMHgwYywweDljLDB4OTB9IH0sCit7ICAxNiwweDNlZjksMCx7MHgwMCwweDA4LDB4ZTQsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwLDB4MDksMHhlNCwweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwYX0gfSwKK3sgIDE2LDB4M2YwOSwwLHsweDc0LDB4MDEsMHgxMiwweDBjLDB4OWMsMHg5MCwweDc4LDB4MGEsMHhlNCwweDc1LDB4ZjAsMHgwYiwweDEyLDB4MGMsMHhmNCwweDBmfSB9LAoreyAgMTYsMHgzZjE5LDAsezB4MGUsMHhiZSwweDA3LDB4OGQsMHg5MCwweDc4LDB4MDksMHg3NCwweDAxLDB4ZjAsMHhhMywweDc0LDB4NzgsMHhmMCwweGEzLDB4NzR9IH0sCit7ICAxNiwweDNmMjksMCx7MHhmZiwweGYwLDB4ZTQsMHhmZiwweGZlLDB4OTAsMHg3OCwweDA5LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOX0gfSwKK3sgIDE2LDB4M2YzOSwwLHsweGVmLDB4MTIsMHgwYywweDhhLDB4OTAsMHg3OCwweDA5LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwfSB9LAoreyAgMTYsMHgzZjQ5LDAsezB4MDAsMHgwMSwweGU0LDB4MTIsMHgwYywweDljLDB4OTAsMHgwMCwweDAyLDB4NzQsMHgxNSwweDEyLDB4MGMsMHg5YywweDkwLDB4MDB9IH0sCit7ICAxNiwweDNmNTksMCx7MHgwMywweGU0LDB4MTIsMHgwYywweDljLDB4OTAsMHgwMCwweDA0LDB4NzQsMHg4MCwweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwNX0gfSwKK3sgIDE2LDB4M2Y2OSwwLHsweGU0LDB4MTIsMHgwYywweDljLDB4OTAsMHgwMCwweDA2LDB4NzQsMHhjMywweDEyLDB4MGMsMHg5YywweDkwLDB4MDAsMHgwNywweGU0fSB9LAoreyAgMTYsMHgzZjc5LDAsezB4MTIsMHgwYywweDljLDB4OTAsMHgwMCwweDA4LDB4ZTQsMHgxMiwweDBjLDB4OWMsMHg5MCwweDAwLDB4MDksMHhlNCwweDEyLDB4MGN9IH0sCit7ICAxNiwweDNmODksMCx7MHg5YywweDkwLDB4MDAsMHgwYSwweDc0LDB4MDEsMHgxMiwweDBjLDB4OWMsMHg5MCwweDc4LDB4MGEsMHhlNCwweDc1LDB4ZjAsMHgwYn0gfSwKK3sgICA4LDB4M2Y5OSwwLHsweDEyLDB4MGMsMHhmNCwweDBmLDB4MGUsMHhiZSwweDAzLDB4OGR9IH0sCit7ICAgMSwweDNmYTEsMCx7MHgyMn0gfSwKK3sgIDE2LDB4M2ZhMiwwLHsweGU0LDB4ZmUsMHg3NSwweDNkLDB4ZmYsMHg3NSwweDNlLDB4MDUsMHg3NSwweDNmLDB4MTIsMHhhYiwweDNkLDB4YWEsMHgzZSwweGE5fSB9LAoreyAgMTYsMHgzZmIyLDAsezB4M2YsMHg5MCwweDAwLDB4MDEsMHgxMiwweDBjLDB4NWQsMHg2NCwweDAyLDB4NzAsMHgyZiwweGNkLDB4ZWUsMHhjZCwweDBlLDB4ZWR9IH0sCit7ICAxNiwweDNmYzIsMCx7MHg2ZiwweDcwLDB4MDEsMHgyMiwweDkwLDB4MDAsMHgwMiwweDEyLDB4MGQsMHgwYSwweDg1LDB4ZjAsMHgzYiwweGY1LDB4M2MsMHg2Mn0gfSwKK3sgIDE2LDB4M2ZkMiwwLHsweDNiLDB4ZTUsMHgzYiwweDYyLDB4M2MsMHhlNSwweDNjLDB4NjIsMHgzYiwweDI5LDB4ZmQsMHhlNSwweDNiLDB4M2EsMHhjOSwweGVkfSB9LAoreyAgMTYsMHgzZmUyLDAsezB4YzksMHg3NSwweDNkLDB4ZmYsMHhmNSwweDNlLDB4ODksMHgzZiwweDgwLDB4YzEsMHg3YiwweDAwLDB4N2EsMHgwMCwweDc5LDB4MDB9IH0sCit7ICAgMSwweDNmZjIsMCx7MHgyMn0gfSwKK3sgICA5LDB4M2ZmMywwLHsweDUzLDB4ZDgsMHhlZiwweDQzLDB4ZDgsMHgyMCwweGMyLDB4MmQsMHgzMn0gfSwKK3sgICA0LDB4M2ZmYywwLHsweDUzLDB4OTEsMHhkZiwweDMyfSB9LAoreyAgMTYsMHg0MDAwLDAsezB4OTAsMHg3OSwweDg3LDB4ZTAsMHhiNCwweDAxLDB4MWQsMHg5MCwweDc5LDB4ODUsMHhlMCwweGI0LDB4MDEsMHgwMywweDEyLDB4NDJ9IH0sCit7ICAxNiwweDQwMTAsMCx7MHhhYSwweDkwLDB4NzksMHg4NiwweGUwLDB4YjQsMHgwMSwweDAzLDB4MTIsMHgxOCwweDAwLDB4ZTQsMHg5MCwweDc5LDB4ODUsMHhmMH0gfSwKK3sgIDE2LDB4NDAyMCwwLHsweGEzLDB4ZjAsMHhhMywweGYwLDB4MTIsMHgyZSwweDk0LDB4OTAsMHg3ZiwweDliLDB4ZTAsMHhmNSwweDBhLDB4NTQsMHgwMiwweGY1fSB9LAoreyAgMTYsMHg0MDMwLDAsezB4MGEsMHg3MCwweDA0LDB4OTAsMHg3OSwweDdmLDB4ZjAsMHg5MCwweDdmLDB4OWIsMHhlMCwweGY1LDB4MGEsMHg1NCwweDAyLDB4ZmZ9IH0sCit7ICAxNiwweDQwNDAsMCx7MHhmNSwweDBhLDB4YmYsMHgwMiwweDA2LDB4OTAsMHg3OSwweDdmLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHhmNX0gfSwKK3sgIDE2LDB4NDA1MCwwLHsweDBhLDB4NTQsMHgyMCwweGY1LDB4MGEsMHg3MCwweDA0LDB4OTAsMHg3OSwweDdlLDB4ZjAsMHg5MCwweDdmLDB4OWIsMHhlMCwweGY1fSB9LAoreyAgMTYsMHg0MDYwLDAsezB4MGEsMHg1NCwweDIwLDB4ZmYsMHhmNSwweDBhLDB4YmYsMHgyMCwweDA2LDB4OTAsMHg3OSwweDdlLDB4NzQsMHgwMSwweGYwLDB4OTB9IH0sCit7ICAxNiwweDQwNzAsMCx7MHg3OSwweDdmLDB4ZTAsMHhmZiwweDkwLDB4NzksMHg4MSwweGUwLDB4NmYsMHg2MCwweDM4LDB4OTAsMHg3OSwweDc4LDB4NzQsMHgwMn0gfSwKK3sgIDE2LDB4NDA4MCwwLHsweGYwLDB4OTAsMHg3OSwweDg0LDB4ZTAsMHg5MCwweDc5LDB4NzksMHhmMCwweGVmLDB4YjQsMHgwMSwweDA2LDB4ZTAsMHg1NCwweGZlfSB9LAoreyAgMTYsMHg0MDkwLDAsezB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3OSwweDc5LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NzksMHhlMCwweDkwLDB4Nzl9IH0sCit7ICAxNiwweDQwYTAsMCx7MHg4NCwweGYwLDB4YTIsMHhhZiwweGU0LDB4MzMsMHhmNSwweDEyLDB4YzIsMHhhZiwweDEyLDB4MGIsMHhhMiwweGU1LDB4MTIsMHg2MH0gfSwKK3sgIDE2LDB4NDBiMCwwLHsweDAyLDB4ZDIsMHhhZiwweDkwLDB4NzksMHg3ZSwweGUwLDB4ZmYsMHg5MCwweDc5LDB4ODAsMHhlMCwweDZmLDB4NjAsMHgzOCwweDkwfSB9LAoreyAgMTYsMHg0MGMwLDAsezB4NzksMHg3OCwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg3YywweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHhlZiwweGI0LDB4MDF9IH0sCit7ICAxNiwweDQwZDAsMCx7MHgwNiwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODAsMHgwNywweDkwLDB4NzksMHg3OSwweGUwLDB4NTQsMHhmYiwweGYwLDB4OTAsMHg3OX0gfSwKK3sgIDE2LDB4NDBlMCwwLHsweDc5LDB4ZTAsMHg5MCwweDc5LDB4N2MsMHhmMCwweGEyLDB4YWYsMHhlNCwweDMzLDB4ZjUsMHgxMiwweGMyLDB4YWYsMHgxMiwweDBifSB9LAoreyAgMTYsMHg0MGYwLDAsezB4YTIsMHhlNSwweDEyLDB4NjAsMHgwMiwweGQyLDB4YWYsMHg5MCwweDc5LDB4N2YsMHhlMCwweDkwLDB4NzksMHg4MSwweGYwLDB4OTB9IH0sCit7ICAgOCwweDQxMDAsMCx7MHg3OSwweDdlLDB4ZTAsMHg5MCwweDc5LDB4ODAsMHhmMCwweDIyfSB9LAoreyAgMTYsMHg0MTA4LDAsezB4OTAsMHg3OSwweDJkLDB4ZTAsMHg2NCwweDAxLDB4NzAsMHgzNSwweDkwLDB4NzksMHg3MCwweGUwLDB4ZmYsMHhkMywweDk0LDB4MmR9IH0sCit7ICAxNiwweDQxMTgsMCx7MHg0MCwweDJiLDB4OTAsMHg3OSwweDY5LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3OSwweDY4LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhkM30gfSwKK3sgIDE2LDB4NDEyOCwwLHsweDk0LDB4MGYsMHg0MCwweDE5LDB4ZTQsMHhmMCwweGVmLDB4ZDMsMHg5NCwweDMxLDB4NDAsMHgwOCwweDkwLDB4NzksMHgyZCwweDc0fSB9LAoreyAgMTYsMHg0MTM4LDAsezB4MDMsMHhmMCwweDgwLDB4MDYsMHg5MCwweDc5LDB4MmQsMHg3NCwweDAyLDB4ZjAsMHgxMiwweDEwLDB4MDAsMHg5MCwweDc5LDB4MmR9IH0sCit7ICAxNiwweDQxNDgsMCx7MHhlMCwweGI0LDB4MDIsMHgyYywweDkwLDB4NzksMHg3MCwweGUwLDB4ZmYsMHhjMywweDk0LDB4MmYsMHg1MCwweDIyLDB4ZWYsMHhkM30gfSwKK3sgIDE2LDB4NDE1OCwwLHsweDk0LDB4MmEsMHg0MCwweDFjLDB4OTAsMHg3OSwweDY5LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3OSwweDY4LDB4ZTAsMHgwNCwweGYwfSB9LAoreyAgMTYsMHg0MTY4LDAsezB4ZTAsMHhkMywweDk0LDB4MGYsMHg0MCwweDBhLDB4ZTQsMHhmMCwweDkwLDB4NzksMHgyZCwweDA0LDB4ZjAsMHgxMiwweDEwLDB4MDB9IH0sCit7ICAxNiwweDQxNzgsMCx7MHg5MCwweDc5LDB4MmQsMHhlMCwweGI0LDB4MDIsMHgyNiwweDkwLDB4NzksMHg3MCwweGUwLDB4ZDMsMHg5NCwweDMxLDB4NDAsMHgxZH0gfSwKK3sgIDE2LDB4NDE4OCwwLHsweDkwLDB4NzksMHg2OSwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzksMHg2OCwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZDMsMHg5NCwweDBmfSB9LAoreyAgMTYsMHg0MTk4LDAsezB4NDAsMHgwYiwweGU0LDB4ZjAsMHg5MCwweDc5LDB4MmQsMHg3NCwweDAzLDB4ZjAsMHgxMiwweDEwLDB4MDAsMHg5MCwweDc5LDB4MmR9IH0sCit7ICAxNiwweDQxYTgsMCx7MHhlMCwweDY0LDB4MDMsMHg3MCwweDNmLDB4OTAsMHg3OSwweDcwLDB4ZTAsMHhmZiwweGMzLDB4OTQsMHg1ZiwweDUwLDB4MzUsMHg5MH0gfSwKK3sgIDE2LDB4NDFiOCwwLHsweDc5LDB4NjksMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc5LDB4NjgsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGQzLDB4OTQsMHgwZiwweDQwfSB9LAoreyAgMTYsMHg0MWM4LDAsezB4MjMsMHhlNCwweGYwLDB4ZWYsMHhjMywweDk0LDB4MmYsMHg1MCwweDBjLDB4ZWYsMHhkMywweDk0LDB4MmEsMHg0MCwweDA2LDB4OTB9IH0sCit7ICAxNiwweDQxZDgsMCx7MHg3OSwweDJkLDB4NzQsMHgwMSwweGYwLDB4ZWYsMHhkMywweDk0LDB4MmYsMHg0MCwweDA2LDB4OTAsMHg3OSwweDJkLDB4NzQsMHgwMn0gfSwKK3sgIDE2LDB4NDFlOCwwLHsweGYwLDB4MTIsMHgxMCwweDAwLDB4OTAsMHg3OSwweDY5LDB4ZTAsMHg3MCwweDA1LDB4OTAsMHg3OSwweDY4LDB4ZjAsMHgyMiwweGU0fSB9LAoreyAgIDUsMHg0MWY4LDAsezB4OTAsMHg3OSwweDY5LDB4ZjAsMHgyMn0gfSwKK3sgIDE2LDB4NDFmZCwwLHsweDdiLDB4MDEsMHg3YSwweDc4LDB4NzksMHg0YywweDkwLDB4NzgsMHgwNiwweGViLDB4ZjAsMHhhMywweGVhLDB4ZjAsMHhhMywweGU5fSB9LAoreyAgMTYsMHg0MjBkLDAsezB4ZjAsMHhlNCwweDEyLDB4MGMsMHg4YSwweDkwLDB4NzgsMHgwNiwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4Zjl9IH0sCit7ICAxNiwweDQyMWQsMCx7MHg5MCwweDAwLDB4MDEsMHg3NCwweDAxLDB4MTIsMHgwYywweDljLDB4OTAsMHg3OCwweDA3LDB4ZTQsMHg3NSwweGYwLDB4MDMsMHgxMn0gfSwKK3sgIDE2LDB4NDIyZCwwLHsweDBjLDB4ZjQsMHg5MCwweDc4LDB4MDYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4ZTQsMHgxMiwweDBjfSB9LAoreyAgMTYsMHg0MjNkLDAsezB4OGEsMHg5MCwweDc4LDB4MDYsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAxLDB4NzR9IH0sCit7ICAxNiwweDQyNGQsMCx7MHgwMiwweDEyLDB4MGMsMHg5YywweDkwLDB4NzgsMHgwNywweGU0LDB4NzUsMHhmMCwweDAzLDB4MTIsMHgwYywweGY0LDB4OTAsMHg3OH0gfSwKK3sgIDE2LDB4NDI1ZCwwLHsweDA2LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweGU0LDB4MTIsMHgwYywweDhhLDB4OTAsMHg3OCwweDA2fSB9LAoreyAgMTYsMHg0MjZkLDAsezB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMSwweDc0LDB4MDMsMHgxMiwweDBjLDB4OWN9IH0sCit7ICAxNiwweDQyN2QsMCx7MHg5MCwweDc4LDB4MDcsMHhlNCwweDc1LDB4ZjAsMHgwMywweDEyLDB4MGMsMHhmNCwweDkwLDB4NzgsMHgwNiwweGUwLDB4ZmIsMHhhM30gfSwKK3sgIDE2LDB4NDI4ZCwwLHsweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHhlNCwweDEyLDB4MGMsMHg4YSwweDkwLDB4NzgsMHgwNiwweGUwLDB4ZmIsMHhhMywweGUwfSB9LAoreyAgMTIsMHg0MjlkLDAsezB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDEsMHg3NCwweDA0LDB4MTIsMHgwYywweDljfSB9LAoreyAgIDEsMHg0MmE5LDAsezB4MjJ9IH0sCit7ICAxNiwweDQyYWEsMCx7MHhlNCwweGZmLDB4ZmUsMHg3YiwweDAxLDB4OTAsMHg3OCwweDBjLDB4MDQsMHhmMCwweGEzLDB4NzQsMHg3OCwweGYwLDB4YTMsMHg3NH0gfSwKK3sgIDE2LDB4NDJiYSwwLHsweDJiLDB4ZjAsMHg5MCwweDc4LDB4MGMsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4OTAsMHgwMCwweDAyfSB9LAoreyAgMTYsMHg0MmNhLDAsezB4MTIsMHgwYywweDVkLDB4ZmQsMHg5MCwweDc5LDB4OWEsMHhlMCwweDZkLDB4NjAsMHgxMywweGVmLDB4YzMsMHg5NCwweDA1LDB4NTB9IH0sCit7ICAxNiwweDQyZGEsMCx7MHgwZCwweDBmLDB4OTAsMHg3OCwweDBkLDB4ZTQsMHg3NSwweGYwLDB4MDMsMHgxMiwweDBjLDB4ZjQsMHg4MCwweGQ0LDB4OGQsMHgzM30gfSwKK3sgIDE2LDB4NDJlYSwwLHsweDkwLDB4NzgsMHgwYywweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDEsMHgxMiwweDBjfSB9LAoreyAgMTYsMHg0MmZhLDAsezB4NWQsMHhmZCwweDkwLDB4NzksMHg5YiwweGUwLDB4ZmMsMHg2ZCwweDYwLDB4MTMsMHhlZSwweGMzLDB4OTQsMHgwYiwweDUwLDB4MGR9IH0sCit7ICAxNiwweDQzMGEsMCx7MHgwZSwweDkwLDB4NzgsMHgwZCwweGU0LDB4NzUsMHhmMCwweDAzLDB4MTIsMHgwYywweGY0LDB4ODAsMHhkMywweDhjLDB4MzQsMHhlZn0gfSwKK3sgIDE2LDB4NDMxYSwwLHsweDY0LDB4MDUsMHg2MCwweDAzLDB4YmUsMHgwYiwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwfSB9LAoreyAgMTYsMHg0MzJhLDAsezB4NzgsMHgwYywweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHgxMiwweDBjLDB4NDQsMHhmZiwweDI0LDB4ZjB9IH0sCit7ICAxNiwweDQzM2EsMCx7MHg2MCwweDA4LDB4MjQsMHgwZSwweDcwLDB4MGUsMHgxMiwweDQ5LDB4NGQsMHgyMiwweDkwLDB4NzksMHgyMCwweGU1LDB4MzQsMHhmMH0gfSwKK3sgIDExLDB4NDM0YSwwLHsweDEyLDB4MWIsMHgyYSwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjB9IH0sCit7ICAgMSwweDQzNTUsMCx7MHgyMn0gfSwKK3sgIDEyLDB4NDM1NiwwLHsweDc4LDB4N2YsMHhlNCwweGY2LDB4ZDgsMHhmZCwweDc1LDB4ODEsMHgzZiwweDAyLDB4NDMsMHg5ZH0gfSwKK3sgIDE2LDB4NDM2MiwwLHsweDAyLDB4NDgsMHhhOSwweGU0LDB4OTMsMHhhMywweGY4LDB4ZTQsMHg5MywweGEzLDB4NDAsMHgwMywweGY2LDB4ODAsMHgwMSwweGYyfSB9LAoreyAgMTYsMHg0MzcyLDAsezB4MDgsMHhkZiwweGY0LDB4ODAsMHgyOSwweGU0LDB4OTMsMHhhMywweGY4LDB4NTQsMHgwNywweDI0LDB4MGMsMHhjOCwweGMzLDB4MzN9IH0sCit7ICAxNiwweDQzODIsMCx7MHhjNCwweDU0LDB4MGYsMHg0NCwweDIwLDB4YzgsMHg4MywweDQwLDB4MDQsMHhmNCwweDU2LDB4ODAsMHgwMSwweDQ2LDB4ZjYsMHhkZn0gfSwKK3sgIDE2LDB4NDM5MiwwLHsweGU0LDB4ODAsMHgwYiwweDAxLDB4MDIsMHgwNCwweDA4LDB4MTAsMHgyMCwweDQwLDB4ODAsMHg5MCwweDQ2LDB4NjEsMHhlNCwweDdlfSB9LAoreyAgMTYsMHg0M2EyLDAsezB4MDEsMHg5MywweDYwLDB4YmMsMHhhMywweGZmLDB4NTQsMHgzZiwweDMwLDB4ZTUsMHgwOSwweDU0LDB4MWYsMHhmZSwweGU0LDB4OTN9IH0sCit7ICAxNiwweDQzYjIsMCx7MHhhMywweDYwLDB4MDEsMHgwZSwweGNmLDB4NTQsMHhjMCwweDI1LDB4ZTAsMHg2MCwweGE4LDB4NDAsMHhiOCwweGU0LDB4OTMsMHhhM30gfSwKK3sgIDE2LDB4NDNjMiwwLHsweGZhLDB4ZTQsMHg5MywweGEzLDB4ZjgsMHhlNCwweDkzLDB4YTMsMHhjOCwweGM1LDB4ODIsMHhjOCwweGNhLDB4YzUsMHg4MywweGNhfSB9LAoreyAgMTYsMHg0M2QyLDAsezB4ZjAsMHhhMywweGM4LDB4YzUsMHg4MiwweGM4LDB4Y2EsMHhjNSwweDgzLDB4Y2EsMHhkZiwweGU5LDB4ZGUsMHhlNywweDgwLDB4YmV9IH0sCit7ICAxNiwweDQzZTIsMCx7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4YzAsMHhkMCwweGU4LDB4YzAsMHhlMCwweGU5LDB4YzAsMHhlMH0gfSwKK3sgIDE2LDB4NDNmMiwwLHsweGVhLDB4YzAsMHhlMCwweGViLDB4YzAsMHhlMCwweGVjLDB4YzAsMHhlMCwweGVkLDB4YzAsMHhlMCwweGVlLDB4YzAsMHhlMCwweGVmfSB9LAoreyAgMTYsMHg0NDAyLDAsezB4YzAsMHhlMCwweGMyLDB4Y2EsMHhjMiwweGNmLDB4OTAsMHg3OSwweDdhLDB4ZTAsMHhiNCwweDAxLDB4MWYsMHgxMiwweDRiLDB4YWV9IH0sCit7ICAxNiwweDQ0MTIsMCx7MHgxMiwweDQ3LDB4NTgsMHg1MywweGE4LDB4YTAsMHg5MCwweDdmLDB4YWUsMHhlNCwweGYwLDB4MTIsMHgwNywweGFhLDB4MTIsMHg0Yn0gfSwKK3sgIDE2LDB4NDQyMiwwLHsweGI3LDB4OTAsMHg3ZiwweGFlLDB4NzQsMHgxZiwweGYwLDB4NDMsMHhhOCwweDA1LDB4ODAsMHgwMywweDUzLDB4YTgsMHhhMCwweDUzfSB9LAoreyAgMTYsMHg0NDMyLDAsezB4YTgsMHhmYSwweDc1LDB4ZTgsMHgwMSwweDEyLDB4MDksMHgxNSwweDc1LDB4ZTgsMHgwZCwweDQzLDB4YTgsMHgwNSwweGQwLDB4ZTB9IH0sCit7ICAxNiwweDQ0NDIsMCx7MHhmZiwweGQwLDB4ZTAsMHhmZSwweGQwLDB4ZTAsMHhmZCwweGQwLDB4ZTAsMHhmYywweGQwLDB4ZTAsMHhmYiwweGQwLDB4ZTAsMHhmYX0gfSwKK3sgIDE2LDB4NDQ1MiwwLHsweGQwLDB4ZTAsMHhmOSwweGQwLDB4ZTAsMHhmOCwweGQwLDB4ZDAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZjAsMHhkMCwweGUwfSB9LAoreyAgIDEsMHg0NDYyLDAsezB4MzJ9IH0sCit7ICAxNiwweDQ0NjMsMCx7MHg5MCwweDdmLDB4ZWMsMHhlMCwweGY1LDB4MDksMHgxNCwweDYwLDB4MWQsMHgxNCwweDYwLDB4MmEsMHgxNCwweDYwLDB4MzcsMHgxNH0gfSwKK3sgIDE2LDB4NDQ3MywwLHsweDYwLDB4NDQsMHgyNCwweDA0LDB4NzAsMHg1MCwweDkwLDB4NzksMHg2MiwweGUwLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHg5MCwweDdmfSB9LAoreyAgMTYsMHg0NDgzLDAsezB4YjUsMHg3NCwweDAxLDB4ZjAsMHg4MCwweDQ3LDB4OTAsMHg3OSwweDYzLDB4ZTAsMHg5MCwweDdmLDB4MDAsMHhmMCwweDkwLDB4N2Z9IH0sCit7ICAxNiwweDQ0OTMsMCx7MHhiNSwweDc0LDB4MDEsMHhmMCwweDgwLDB4MzcsMHg5MCwweDc5LDB4NjQsMHhlMCwweDkwLDB4N2YsMHgwMCwweGYwLDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4NDRhMywwLHsweGI1LDB4NzQsMHgwMSwweGYwLDB4ODAsMHgyNywweDkwLDB4NzksMHg2NiwweGUwLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHg5MCwweDdmfSB9LAoreyAgMTYsMHg0NGIzLDAsezB4YjUsMHg3NCwweDAxLDB4ZjAsMHg4MCwweDE3LDB4OTAsMHg3OSwweDY3LDB4ZTAsMHg5MCwweDdmLDB4MDAsMHhmMCwweDkwLDB4N2Z9IH0sCit7ICAxNSwweDQ0YzMsMCx7MHhiNSwweDc0LDB4MDEsMHhmMCwweDgwLDB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweGQzLDB4MjJ9IH0sCit7ICAgNCwweDQ0ZDIsMCx7MHg4ZCwweDM2LDB4OGIsMHgzN30gfSwKK3sgIDE2LDB4NDRkNiwwLHsweDEyLDB4M2YsMHhhMiwweGVhLDB4NDksMHg2MCwweDU3LDB4MTIsMHgwYywweDQ0LDB4N2UsMHgwMCwweDI5LDB4ZmYsMHhlZSwweDNhfSB9LAoreyAgMTYsMHg0NGU2LDAsezB4YzksMHhlZiwweGM5LDB4NzUsMHgzOCwweGZmLDB4ZjUsMHgzOSwweDg5LDB4M2EsMHhhYiwweDM4LDB4YWEsMHgzOSwweGE5LDB4M2F9IH0sCit7ICAxNiwweDQ0ZjYsMCx7MHg5MCwweDAwLDB4MDEsMHgxMiwweDBjLDB4NWQsMHhmZiwweDY0LDB4MDQsMHg2MCwweDA1LDB4ZWYsMHg2NCwweDA1LDB4NzAsMHgyZX0gfSwKK3sgIDE2LDB4NDUwNiwwLHsweGVmLDB4YjQsMHgwNCwweDE1LDB4OTAsMHgwMCwweDAyLDB4MTIsMHgwYywweDVkLDB4NjUsMHgzNiwweDcwLDB4MGIsMHg5MCwweDAwfSB9LAoreyAgMTYsMHg0NTE2LDAsezB4MDMsMHgxMiwweDBjLDB4NWQsMHg2NSwweDM3LDB4NzAsMHgwMSwweDIyLDB4MTIsMHgwYywweDQ0LDB4N2UsMHgwMCwweDI5LDB4ZmZ9IH0sCit7ICAxNiwweDQ1MjYsMCx7MHhlZSwweDNhLDB4YzksMHhlZiwweGM5LDB4NzUsMHgzOCwweGZmLDB4ZjUsMHgzOSwweDg5LDB4M2EsMHg4MCwweGJjLDB4N2IsMHgwMH0gfSwKK3sgICA0LDB4NDUzNiwwLHsweDdhLDB4MDAsMHg3OSwweDAwfSB9LAoreyAgIDEsMHg0NTNhLDAsezB4MjJ9IH0sCit7ICAxNiwweDQ1M2IsMCx7MHhlNCwweGZmLDB4N2IsMHgwMSwweDkwLDB4NzgsMHgxYywweDA0LDB4ZjAsMHhhMywweDc0LDB4NzgsMHhmMCwweGEzLDB4NzQsMHg0Y30gfSwKK3sgIDE2LDB4NDU0YiwwLHsweGYwLDB4OTAsMHg3OCwweDFjLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsMHhmOSwweDkwLDB4MDAsMHgwMiwweDEyfSB9LAoreyAgMTYsMHg0NTViLDAsezB4MGMsMHg1ZCwweGZlLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHg2ZSwweDYwLDB4MTMsMHhlZiwweGMzLDB4OTQsMHgwNCwweDUwLDB4MGR9IH0sCit7ICAxNiwweDQ1NmIsMCx7MHg5MCwweDc4LDB4MWQsMHhlNCwweDc1LDB4ZjAsMHgwMywweDEyLDB4MGMsMHhmNCwweDBmLDB4ODAsMHhkNCwweGJmLDB4MDQsMHgwOX0gfSwKK3sgIDE2LDB4NDU3YiwwLHsweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4ODAsMHgxNCwweDkwLDB4NzksMHgyMSwweGUwLDB4ZmYsMHg5MCwweDc4fSB9LAoreyAgMTYsMHg0NThiLDAsezB4MWMsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwweGY5LDB4ZWYsMHgxMiwweDBjLDB4OGEsMHg5MCwweDdmLDB4YzV9IH0sCit7ICAgMywweDQ1OWIsMCx7MHg3NCwweDAxLDB4ZjB9IH0sCit7ICAgMSwweDQ1OWUsMCx7MHgyMn0gfSwKK3sgIDE0LDB4NDU5ZiwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweGMwLDB4ZDAsMHhlZSwweGMwLDB4ZTAsMHhlZiwweGMwLDB4ZTB9IH0sCit7ICAxNiwweDQ1YWQsMCx7MHg5MCwweDc5LDB4ODUsMHhlMCwweDY0LDB4MDEsMHg2MCwweDA1LDB4YTMsMHhlMCwweGI0LDB4MDEsMHgyZCwweDkwLDB4NzksMHg4N30gfSwKK3sgIDE2LDB4NDViZCwwLHsweDc0LDB4MDEsMHhmMCwweGU0LDB4ZmYsMHg5MCwweDdmLDB4YzUsMHhlMCwweGZlLDB4ZWYsMHhjMywweDllLDB4NTAsMHgxYiwweDc0fSB9LAoreyAgMTYsMHg0NWNkLDAsezB4YzAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2UsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDc0LDB4MjEsMHgyZiwweGY1LDB4ODJ9IH0sCit7ICAxNiwweDQ1ZGQsMCx7MHhlNCwweDM0LDB4NzksMHhmNSwweDgzLDB4ZWUsMHhmMCwweDBmLDB4ODAsMHhkYiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYX0gfSwKK3sgICA0LDB4NDVlZCwwLHsweGUwLDB4NDQsMHgwMSwweGYwfSB9LAoreyAgMTUsMHg0NWYxLDAsezB4ZDAsMHhlMCwweGZmLDB4ZDAsMHhlMCwweGZlLDB4ZDAsMHhkMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHg0NjAwLDAsezB4ZTQsMHhmZiwweDdiLDB4MDEsMHg5MCwweDc4LDB4MTksMHgwNCwweGYwLDB4YTMsMHg3NCwweDc4LDB4ZjAsMHhhMywweDc0LDB4NGN9IH0sCit7ICAxNiwweDQ2MTAsMCx7MHhmMCwweDkwLDB4NzgsMHgxOSwweGUwLDB4ZmIsMHhhMywweGUwLDB4ZmEsMHhhMywweGUwLDB4ZjksMHg5MCwweDAwLDB4MDIsMHgxMn0gfSwKK3sgIDE2LDB4NDYyMCwwLHsweDBjLDB4NWQsMHhmZSwweDkwLDB4N2YsMHhlYywweGUwLDB4NmUsMHg2MCwweDEzLDB4ZWYsMHhjMywweDk0LDB4MDQsMHg1MCwweDBkfSB9LAoreyAgMTYsMHg0NjMwLDAsezB4OTAsMHg3OCwweDFhLDB4ZTQsMHg3NSwweGYwLDB4MDMsMHgxMiwweDBjLDB4ZjQsMHgwZiwweDgwLDB4ZDQsMHhiZiwweDA0LDB4MDh9IH0sCit7ICAxNiwweDQ2NDAsMCx7MHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3OCwweDE5LDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYX0gfSwKK3sgIDE2LDB4NDY1MCwwLHsweGEzLDB4ZTAsMHhmOSwweDEyLDB4MGMsMHg0NCwweDkwLDB4N2YsMHgwMCwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwfSB9LAoreyAgIDEsMHg0NjYwLDAsezB4MjJ9IH0sCit7ICAxNiwweDQ2NjEsMCx7MHgwMSwweDE4LDB4MDIsMHgwMSwweDE5LDB4MGEsMHgwMSwweDFjLDB4MDAsMHhjMSwweDI4LDB4YzEsMHgyOSwweDAxLDB4MWYsMHgwMX0gfSwKK3sgIDE1LDB4NDY3MSwwLHsweDQ0LDB4NzksMHg5ZiwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDEsMHg3OSwweGEzLDB4MDAsMHg0MSwweDc5LDB4YTQsMHgwMH0gfSwKK3sgICA0LDB4NDY4MCwwLHsweDQxLDB4NzksMHg4OSwweDAwfSB9LAoreyAgMTYsMHg0Njg0LDAsezB4MDEsMHgyMiwweDAxLDB4NDEsMHg3OSwweDMxLDB4ZmYsMHg0MSwweDc5LDB4MzQsMHgwMCwweDRkLDB4NzksMHgzNSwweDNmLDB4M2Z9IH0sCit7ICAxNiwweDQ2OTQsMCx7MHgwMCwweDA4LDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE1LDB4NGQsMHg3OSwweDQyLDB4M2YsMHgzZn0gfSwKK3sgIDE2LDB4NDZhNCwwLHsweDA2LDB4MDgsMHgwNCwweDA3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTUsMHg0ZCwweDc5LDB4NGYsMHgwYSwweDBhfSB9LAoreyAgMTEsMHg0NmI0LDAsezB4MDksMHgwMCwweDAxLDB4MDksMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsMHgwOH0gfSwKK3sgICAxLDB4NDZiZiwwLHsweDAwfSB9LAoreyAgMTYsMHg0NmMwLDAsezB4MTIsMHgwYSwweGNkLDB4OTAsMHg3ZiwweGE1LDB4ZTAsMHhmNSwweDIxLDB4ZTUsMHgyMSwweDU0LDB4MDEsMHhmNSwweDIxLDB4NjR9IH0sCit7ICAxNiwweDQ2ZDAsMCx7MHgwMSwweDYwLDB4MjgsMHhlNSwweDIyLDB4NjQsMHgwMSwweDcwLDB4MjIsMHg5MCwweDdmLDB4YTUsMHhlMCwweGY1LDB4MjEsMHg1NH0gfSwKK3sgIDE2LDB4NDZlMCwwLHsweDAyLDB4ZjUsMHgyMSwweDcwLDB4MDMsMHg3NSwweDIyLDB4MDEsMHg5MCwweDdmLDB4YTUsMHhlMCwweGY1LDB4MjEsMHg1NCwweDA0fSB9LAoreyAgMTIsMHg0NmYwLDAsezB4ZmYsMHhmNSwweDIxLDB4YmYsMHgwNCwweGQzLDB4NzUsMHgyMiwweDAxLDB4ODAsMHhjZSwweDIyfSB9LAoreyAgIDQsMHg0NmZjLDAsezB4NTMsMHhkOCwweGY3LDB4MzJ9IH0sCit7ICAxNiwweDQ3MDAsMCx7MHgwMiwweDQ5LDB4ZmEsMHgwMCwweDAyLDB4M2MsMHg1NCwweDAwLDB4MDIsMHgxNywweGU0LDB4MDAsMHgwMiwweDRhLDB4MTIsMHgwMH0gfSwKK3sgIDE2LDB4NDcxMCwwLHsweDAyLDB4MzcsMHhhMiwweDAwLDB4MDIsMHg0NywweGZmLDB4MDAsMHgwMiwweDRhLDB4NDEsMHgwMCwweDAyLDB4NDUsMHg5ZiwweDAwfSB9LAoreyAgMTYsMHg0NzIwLDAsezB4MDIsMHg0OSwweDhlLDB4MDAsMHgwMiwweDQ5LDB4YWIsMHgwMCwweDAyLDB4NGEsMHg1OCwweDAwLDB4MDIsMHg0YSwweDZmLDB4MDB9IH0sCit7ICAxNiwweDQ3MzAsMCx7MHgwMiwweDRhLDB4ODYsMHgwMCwweDAyLDB4NGEsMHg5ZCwweDAwLDB4MDIsMHg0YSwweGI0LDB4MDAsMHgwMiwweDRhLDB4Y2IsMHgwMH0gfSwKK3sgIDE2LDB4NDc0MCwwLHsweDAyLDB4NGEsMHhlMiwweDAwLDB4MDIsMHg0YSwweGY5LDB4MDAsMHgwMiwweDRiLDB4MTAsMHgwMCwweDAyLDB4NGIsMHgyNywweDAwfSB9LAoreyAgIDgsMHg0NzUwLDAsezB4MDIsMHg0YiwweDNlLDB4MDAsMHgwMiwweDRiLDB4NTUsMHgwMH0gfSwKK3sgIDE2LDB4NDc1OCwwLHsweGU1LDB4MTgsMHg3MCwweDE0LDB4OTAsMHg3OSwweDhjLDB4ZTAsMHgwNCwweGYwLDB4OTAsMHg3OSwweDhiLDB4ZTAsMHhjMywweDk0fSB9LAoreyAgMTYsMHg0NzY4LDAsezB4MDAsMHg0MCwweDE1LDB4ZTAsMHgxNCwweGYwLDB4ODAsMHgxMCwweDkwLDB4NzksMHg4YiwweGUwLDB4MDQsMHhmMCwweGEzLDB4ZTB9IH0sCit7ICAxNiwweDQ3NzgsMCx7MHhjMywweDk0LDB4MDAsMHg0MCwweDAzLDB4ZTAsMHgxNCwweGYwLDB4OTAsMHg3OSwweDhiLDB4ZTAsMHhkMywweDk0LDB4MTQsMHg0MH0gfSwKK3sgIDE2LDB4NDc4OCwwLHsweDA0LDB4ZTQsMHhmNSwweDE4LDB4ZjAsMHg5MCwweDc5LDB4OGMsMHhlMCwweGQzLDB4OTQsMHgxNCwweDQwLDB4MDUsMHg3NSwweDE4fSB9LAoreyAgIDQsMHg0Nzk4LDAsezB4MDEsMHhlNCwweGYwLDB4MjJ9IH0sCit7ICAxNiwweDQ3OWMsMCx7MHg5MCwweDdmLDB4ZDcsMHhlMCwweGY1LDB4MzMsMHg5MCwweDdmLDB4ZWMsMHhlMCwweGY1LDB4MDksMHgxNCwweDYwLDB4MTEsMHgxNH0gfSwKK3sgIDE2LDB4NDdhYywwLHsweDYwLDB4MWIsMHgyNCwweDAyLDB4NzAsMHgyNCwweDkwLDB4N2YsMHhlYSwweGUwLDB4OTAsMHg3OSwweDYyLDB4ZjAsMHg4MCwweDIxfSB9LAoreyAgMTYsMHg0N2JjLDAsezB4OTAsMHg3ZiwweGVhLDB4ZTAsMHg5MCwweDc5LDB4NjMsMHhmMCwweDEyLDB4MTAsMHgwMCwweDgwLDB4MTQsMHg5MCwweDdmLDB4ZWF9IH0sCit7ICAxNiwweDQ3Y2MsMCx7MHhlMCwweDkwLDB4NzksMHg2NCwweGYwLDB4MTIsMHgyOCwweDAxLDB4ODAsMHgwNywweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMX0gfSwKK3sgICAyLDB4NDdkYywwLHsweGYwLDB4ZDN9IH0sCit7ICAgMSwweDQ3ZGUsMCx7MHgyMn0gfSwKK3sgIDE2LDB4NDdkZiwwLHsweDkwLDB4NzksMHg3OCwweDc0LDB4MDQsMHhmMCwweDkwLDB4NzksMHgzMywweGUwLDB4OTAsMHg3OSwweDc5LDB4ZjAsMHhhMiwweGFmfSB9LAoreyAgMTYsMHg0N2VmLDAsezB4ZTQsMHgzMywweGY1LDB4MTIsMHhjMiwweGFmLDB4MTIsMHgwYiwweGEyLDB4ZTUsMHgxMiwweDYwLDB4MDIsMHhkMiwweGFmLDB4MjJ9IH0sCit7ICAgMSwweDQ3ZmYsMCx7MHgzMn0gfSwKK3sgICAyLDB4NDgwMCwwLHsweDhmLDB4MzZ9IH0sCit7ICAxNiwweDQ4MDIsMCx7MHhlNCwweGY1LDB4MzcsMHg3NSwweDM4LDB4ZmYsMHg3NSwweDM5LDB4MDcsMHg3NSwweDNhLDB4MDEsMHhhYiwweDM4LDB4YWEsMHgzOX0gfSwKK3sgIDE2LDB4NDgxMiwwLHsweGE5LDB4M2EsMHg5MCwweDAwLDB4MDEsMHgxMiwweDBjLDB4NWQsMHhiNCwweDAzLDB4MWYsMHhhZiwweDM3LDB4MDUsMHgzNywweGVmfSB9LAoreyAgMTYsMHg0ODIyLDAsezB4NjUsMHgzNiwweDcwLDB4MDEsMHgyMiwweDEyLDB4MGMsMHg0NCwweDdlLDB4MDAsMHgyOSwweGZmLDB4ZWUsMHgzYSwweGM5LDB4ZWZ9IH0sCit7ICAxNiwweDQ4MzIsMCx7MHhjOSwweDc1LDB4MzgsMHhmZiwweGY1LDB4MzksMHg4OSwweDNhLDB4ODAsMHhkMiwweDdiLDB4MDAsMHg3YSwweDAwLDB4NzksMHgwMH0gfSwKK3sgICAxLDB4NDg0MiwwLHsweDIyfSB9LAoreyAgMTYsMHg0ODQzLDAsezB4MzAsMHgyNiwweDJmLDB4YzIsMHgyNiwweDkwLDB4NzksMHgyZCwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MDksMHhlNCwweGY1LDB4MGN9IH0sCit7ICAxNiwweDQ4NTMsMCx7MHg3NSwweDBkLDB4ZjgsMHg3NSwweDBlLDB4MGEsMHhlZiwweGI0LDB4MDIsMHgwOSwweGU0LDB4ZjUsMHgwYywweDc1LDB4MGQsMHhmMH0gfSwKK3sgIDE2LDB4NDg2MywwLHsweDc1LDB4MGUsMHgwYiwweGVmLDB4YjQsMHgwMywweDA5LDB4ZTQsMHhmNSwweDBjLDB4NzUsMHgwZCwweGY4LDB4NzUsMHgwZSwweDE3fSB9LAoreyAgIDMsMHg0ODczLDAsezB4ZDIsMHgyMiwweDIyfSB9LAoreyAgMTYsMHg0ODc2LDAsezB4MzAsMHgyNSwweDJmLDB4YzIsMHgyNSwweDkwLDB4NzksMHgyZCwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MDksMHg3NSwweDBjLDB4YzB9IH0sCit7ICAxNiwweDQ4ODYsMCx7MHg3NSwweDBkLDB4MTQsMHg3NSwweDBlLDB4MGIsMHhlZiwweGI0LDB4MDIsMHgwOSwweGU0LDB4ZjUsMHgwYywweDc1LDB4MGQsMHgxMH0gfSwKK3sgIDE2LDB4NDg5NiwwLHsweDc1LDB4MGUsMHgwYywweGVmLDB4YjQsMHgwMywweDA5LDB4ZTQsMHhmNSwweDBjLDB4NzUsMHgwZCwweDE4LDB4NzUsMHgwZSwweDE4fSB9LAoreyAgIDMsMHg0OGE2LDAsezB4ZDIsMHgyMiwweDIyfSB9LAoreyAgMTYsMHg0OGE5LDAsezB4ZTQsMHhmNSwweDMyLDB4MTIsMHgwZiwweDUwLDB4MjAsMHgyZSwweDEwLDB4ZTUsMHgzMiwweGMzLDB4OTQsMHgwMiwweDUwLDB4MDl9IH0sCit7ICAxNiwweDQ4YjksMCx7MHgwNSwweDMyLDB4ZDIsMHgzMCwweDEyLDB4NDksMHgwNSwweDgwLDB4ZWQsMHgzMCwweDJlLDB4MDUsMHgxMiwweDE0LDB4NTcsMHhjMn0gfSwKK3sgIDE1LDB4NDhjOSwwLHsweDJlLDB4MzAsMHgyZCwweDA2LDB4MTIsMHgwNywweDlhLDB4MTIsMHg0OCwweGQ5LDB4MTIsMHg0MCwweDAwLDB4ODAsMHhlYX0gfSwKK3sgICAxLDB4NDhkOCwwLHsweDIyfSB9LAoreyAgMTYsMHg0OGQ5LDAsezB4OTAsMHg3ZiwweGQ2LDB4ZTAsMHhmNSwweDFkLDB4NTQsMHg4MCwweGY1LDB4MWQsMHg2NCwweDgwLDB4NzAsMHgxZCwweGMyLDB4YWZ9IH0sCit7ICAxNiwweDQ4ZTksMCx7MHhlMCwweDQ0LDB4ODAsMHhmMCwweGUwLDB4NDQsMHgwMSwweGYwLDB4N2YsMHgwYywweDdlLDB4MDAsMHgxMiwweDRiLDB4NmMsMHg5MH0gfSwKK3sgIDEyLDB4NDhmOSwwLHsweDdmLDB4ZDYsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDUzLDB4ODcsMHhmZSwweGQyLDB4YWYsMHgyMn0gfSwKK3sgIDE2LDB4NDkwNSwwLHsweDkwLDB4N2YsMHhkNiwweGUwLDB4NTQsMHhmYiwweGYwLDB4ZTAsMHg0NCwweDA4LDB4ZjAsMHgzMCwweDMwLDB4MDQsMHhlMCwweDQ0fSB9LAoreyAgMTYsMHg0OTE1LDAsezB4MDIsMHhmMCwweDdmLDB4ZGMsMHg3ZSwweDA1LDB4MTIsMHg0YiwweDZjLDB4OTAsMHg3ZiwweGQ2LDB4ZTAsMHg1NCwweGY3LDB4ZjB9IH0sCit7ICAgNSwweDQ5MjUsMCx7MHhlMCwweDQ0LDB4MDQsMHhmMCwweDIyfSB9LAoreyAgMTYsMHg0OTJhLDAsezB4OTAsMHg3ZiwweGViLDB4ZTAsMHgxNCwweDcwLDB4MTQsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4N2YsMHg3MCwweDA0LDB4MTJ9IH0sCit7ICAxNiwweDQ5M2EsMCx7MHg0NiwweDAwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NH0gfSwKK3sgICAzLDB4NDk0YSwwLHsweDAxLDB4ZjAsMHgyMn0gfSwKK3sgIDE2LDB4NDk0ZCwwLHsweDkwLDB4N2YsMHhlYiwweGUwLDB4MTQsMHg3MCwweDEzLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgxNCwweDcwLDB4MDQsMHgxMiwweDQ1fSB9LAoreyAgMTYsMHg0OTVkLDAsezB4M2IsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDF9IH0sCit7ICAgMiwweDQ5NmQsMCx7MHhmMCwweDIyfSB9LAoreyAgMTYsMHg0OTZmLDAsezB4ZTQsMHhmZiwweDc0LDB4ZTgsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDc0LDB4OTZ9IH0sCit7ICAxNCwweDQ5N2YsMCx7MHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzksMHhmNSwweDgzLDB4ZWUsMHhmMCwweDBmLDB4YmYsMHgwOCwweGU0fSB9LAoreyAgIDEsMHg0OThkLDAsezB4MjJ9IH0sCit7ICAxNiwweDQ5OGUsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4MDIsMHhmMH0gfSwKK3sgIDEzLDB4NDk5ZSwwLHsweDkwLDB4N2YsMHhiNywweDc0LDB4MDMsMHhmMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHg0OWFiLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDAyLDB4ZjB9IH0sCit7ICAxMywweDQ5YmIsMCx7MHg5MCwweDdmLDB4YzcsMHg3NCwweDAzLDB4ZjAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgIDE2LDB4NDljOCwwLHsweDkwLDB4N2YsMHhkNiwweGUwLDB4MzAsMHhlNywweDEyLDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg3ZiwweDE0LDB4N2UsMHgwMCwweDEyfSB9LAoreyAgMTAsMHg0OWQ4LDAsezB4NGIsMHg2YywweDkwLDB4N2YsMHhkNiwweGUwLDB4NTQsMHhmZSwweGYwLDB4MjJ9IH0sCit7ICAxNiwweDQ5ZTIsMCx7MHhlNCwweGY1LDB4MWEsMHg3NSwweDFiLDB4MDEsMHg5MCwweDc5LDB4OTEsMHgwNCwweGYwLDB4YTMsMHhmMCwweGU0LDB4YTMsMHhmMH0gfSwKK3sgICA4LDB4NDlmMiwwLHsweGEzLDB4NzQsMHgwYSwweGYwLDB4ZTQsMHhhMywweGYwLDB4MjJ9IH0sCit7ICAxNiwweDQ5ZmEsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHhkMiwweDJlLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwMX0gfSwKK3sgICA4LDB4NGEwYSwwLHsweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDRhMTIsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHhkMiwweDJkLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwOH0gfSwKK3sgICA4LDB4NGEyMiwwLHsweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDRhMmEsMCx7MHg5MCwweDdmLDB4ZWEsMHhlMCwweGY1LDB4MDgsMHhlNCwweDkwLDB4NzksMHg2MiwweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHg5MH0gfSwKK3sgICA3LDB4NGEzYSwwLHsweDc5LDB4NjYsMHhmMCwweGEzLDB4ZjAsMHhkMywweDIyfSB9LAoreyAgMTYsMHg0YTQxLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDAxLDB4ZjB9IH0sCit7ICAgNywweDRhNTEsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgIDE2LDB4NGE1OCwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHgwNCwweGYwfSB9LAoreyAgIDcsMHg0YTY4LDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDRhNmYsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4MDQsMHhmMH0gfSwKK3sgICA3LDB4NGE3ZiwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHg0YTg2LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDA4LDB4ZjB9IH0sCit7ICAgNywweDRhOTYsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgIDE2LDB4NGE5ZCwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHgwOCwweGYwfSB9LAoreyAgIDcsMHg0YWFkLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDRhYjQsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4MTAsMHhmMH0gfSwKK3sgICA3LDB4NGFjNCwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHg0YWNiLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDEwLDB4ZjB9IH0sCit7ICAgNywweDRhZGIsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgIDE2LDB4NGFlMiwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHgyMCwweGYwfSB9LAoreyAgIDcsMHg0YWYyLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDRhZjksMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4MjAsMHhmMH0gfSwKK3sgICA3LDB4NGIwOSwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHg0YjEwLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDQwLDB4ZjB9IH0sCit7ICAgNywweDRiMjAsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgIDE2LDB4NGIyNywwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHg0MCwweGYwfSB9LAoreyAgIDcsMHg0YjM3LDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDRiM2UsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4ODAsMHhmMH0gfSwKK3sgICA3LDB4NGI0ZSwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTYsMHg0YjU1LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDgwLDB4ZjB9IH0sCit7ICAgNywweDRiNjUsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgIDE2LDB4NGI2YywwLHsweDhlLDB4MzMsMHg4ZiwweDM0LDB4ZTUsMHgzNCwweDE1LDB4MzQsMHhhZSwweDMzLDB4NzAsMHgwMiwweDE1LDB4MzMsMHg0ZSwweDYwfSB9LAoreyAgIDcsMHg0YjdjLDAsezB4MDUsMHgxMiwweDA3LDB4ODksMHg4MCwweGVlLDB4MjJ9IH0sCit7ICAxNSwweDRiODMsMCx7MHg5MCwweDdmLDB4ZWEsMHhlMCwweGI0LDB4ZmYsMHgwNCwweDEyLDB4MzAsMHgwMCwweDIyLDB4MTIsMHgzNiwweDBlLDB4MjJ9IH0sCit7ICAxNCwweDRiOTIsMCx7MHhjMCwweGUwLDB4YzIsMHg4YiwweGQyLDB4MjQsMHgzMCwweDIzLDB4MDIsMHhjMiwweDIzLDB4ZDAsMHhlMCwweDMyfSB9LAoreyAgMTQsMHg0YmEwLDAsezB4OTAsMHg3ZiwweDAwLDB4ZTUsMHgwOCwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwLDB4ZDMsMHgyMn0gfSwKK3sgICA5LDB4NGJhZSwwLHsweDMwLDB4MjQsMHgwNSwweGMyLDB4MjQsMHg3NSwweDE4LDB4MDEsMHgyMn0gfSwKK3sgICA5LDB4NGJiNywwLHsweDMwLDB4MjMsMHgwNSwweGMyLDB4MjMsMHhlNCwweGY1LDB4MTgsMHgyMn0gfSwKK3sgICA3LDB4NGJjMCwwLHsweDUzLDB4YzAsMHhmZSwweDUzLDB4YzAsMHhmZCwweDMyfSB9LAoreyAgIDYsMHg0YmM3LDAsezB4NTMsMHg5MSwweDdmLDB4ZDIsMHgyNSwweDMyfSB9LAoreyAgIDUsMHg0YmNkLDAsezB4YzIsMHg4OSwweGQyLDB4MjMsMHgzMn0gfSwKK3sgICAzLDB4NGJkMiwwLHsweGMyLDB4OGQsMHgzMn0gfSwKK3sgICAzLDB4NGJkNSwwLHsweGMyLDB4OGYsMHgzMn0gfSwKK3sgICAyLDB4NGJkOCwwLHsweGQzLDB4MjJ9IH0sCit7ICAgMiwweDRiZGEsMCx7MHhkMywweDIyfSB9LAoreyAgIDIsMHg0YmRjLDAsezB4ZDMsMHgyMn0gfSwKK3sgICAyLDB4NGJkZSwwLHsweGQzLDB4MjJ9IH0sCit7ICAgMiwweDRiZTAsMCx7MHhkMywweDIyfSB9LAoreyAgIDIsMHg0YmUyLDAsezB4ZDMsMHgyMn0gfSwKK3sgICAyLDB4NGJlNCwwLHsweGMzLDB4MjJ9IH0sCit7ICAgMSwweDRiZTYsMCx7MHgyMn0gfSwKK3sgICAwLDB4MDAwMCwxLHswIH19Cit9OworLyoKK1ZFUlNJT049MS4wLjIuOTE2CitEQVRFPTEyLjAyLjIwMDIKKyovCisvKgorICogVGhpcyBmaXJtd2FyZSBpcyBmb3IgdGhlIEVtYWdpYyBFTUkgMnw2IEF1ZGlvIEludGVyZmFjZQorICoKKyAqIFRoZSBmaXJtd2FyZSBjb250YWluZWQgaGVyZWluIGlzIENvcHlyaWdodCAoYykgMTk5OS0yMDAyIEVtYWdpYworICogYXMgYW4gdW5wdWJsaXNoZWQgd29yay4gVGhpcyBub3RpY2UgZG9lcyBub3QgaW1wbHkgdW5yZXN0cmljdGVkCisgKiBvciBwdWJsaWMgYWNjZXNzIHRvIHRoaXMgZmlybXdhcmUgd2hpY2ggaXMgYSB0cmFkZSBzZWNyZXQgb2YgRW1hZ2ljLAorICogYW5kIHdoaWNoIG1heSBub3QgYmUgcmVwcm9kdWNlZCwgdXNlZCwgc29sZCBvciB0cmFuc2ZlcnJlZCB0bworICogYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgRW1hZ2ljJ3Mgd3JpdHRlbiBjb25zZW50LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgZmlybXdhcmUgbWF5IG5vdCBiZSBtb2RpZmllZCBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoIHRoZQorICogRW1hZ2ljIEVNSSAyfDYgQXVkaW8gSW50ZXJmYWNlLiBEaXN0cmlidXRpb24gYW5kL29yIE1vZGlmaWNhdGlvbiBvZgorICogYW55IGRyaXZlciB3aGljaCBpbmNsdWRlcyB0aGlzIGZpcm13YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LAorICogcmVxdWlyZXMgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHN0YXRlbWVudC4KKyAqLworc3RhdGljIElOVEVMX0hFWF9SRUNPUkQgZ19Mb2FkZXJbXSA9IHsKK3sgICAzLDB4MDAwMCwwLHsweDAyLDB4MDMsMHgxY30gfSwKK3sgICAzLDB4MDA0MywwLHsweDAyLDB4MDQsMHgwMH0gfSwKK3sgIDE2LDB4MDEwMCwwLHsweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHg1YiwweDYwLDB4NjAsMHgyNCwweDAyLDB4NjAsMHgwMywweDAyLDB4MDEsMHhiZSwweDkwfSB9LAoreyAgMTYsMHgwMTEwLDAsezB4N2YsMHhlYSwweGUwLDB4NzUsMHgwYSwweDAwLDB4ZjUsMHgwYiwweGEzLDB4ZTAsMHhmZSwweGU0LDB4ZWUsMHg0MiwweDBhLDB4OTB9IH0sCit7ICAxNiwweDAxMjAsMCx7MHg3ZiwweGVlLDB4ZTAsMHg3NSwweDE1LDB4MDAsMHhmNSwweDE2LDB4YTMsMHhlMCwweGZlLDB4ZTQsMHhlZSwweDQyLDB4MTUsMHhlNX0gfSwKK3sgIDE2LDB4MDEzMCwwLHsweDE2LDB4NDUsMHgxNSwweDcwLDB4MDMsMHgwMiwweDAxLDB4YmUsMHhlNCwweDkwLDB4N2YsMHhjNSwweGYwLDB4OTAsMHg3ZiwweGI0fSB9LAoreyAgMTYsMHgwMTQwLDAsezB4ZTAsMHgyMCwweGUzLDB4ZjksMHg5MCwweDdmLDB4YzUsMHhlMCwweGY1LDB4MGMsMHgxMiwweDAyLDB4NzcsMHhhZiwweDBjLDB4N2V9IH0sCit7ICAxNiwweDAxNTAsMCx7MHgwMCwweGVmLDB4MjUsMHgwYiwweGY1LDB4MGIsMHhlZSwweDM1LDB4MGEsMHhmNSwweDBhLDB4YzMsMHhlNSwweDE2LDB4OWYsMHhmNX0gfSwKK3sgIDE2LDB4MDE2MCwwLHsweDE2LDB4ZTUsMHgxNSwweDllLDB4ZjUsMHgxNSwweDgwLDB4YzcsMHg5MCwweDdmLDB4ZWEsMHhlMCwweDc1LDB4MGEsMHgwMCwweGY1fSB9LAoreyAgMTYsMHgwMTcwLDAsezB4MGIsMHhhMywweGUwLDB4ZmUsMHhlNCwweGVlLDB4NDIsMHgwYSwweDkwLDB4N2YsMHhlZSwweGUwLDB4NzUsMHgxNSwweDAwLDB4ZjV9IH0sCit7ICAxNiwweDAxODAsMCx7MHgxNiwweGEzLDB4ZTAsMHhmZSwweGU0LDB4ZWUsMHg0MiwweDE1LDB4ZTUsMHgxNiwweDQ1LDB4MTUsMHg2MCwweDMwLDB4ZTQsMHg5MH0gfSwKK3sgIDE2LDB4MDE5MCwwLHsweDdmLDB4YzUsMHhmMCwweDkwLDB4N2YsMHhiNCwweGUwLDB4MjAsMHhlMywweGY5LDB4OTAsMHg3ZiwweGM1LDB4ZTAsMHhmNSwweDBjfSB9LAoreyAgMTYsMHgwMWEwLDAsezB4MTIsMHgwMiwweDhmLDB4YWYsMHgwYywweDdlLDB4MDAsMHhlZiwweDI1LDB4MGIsMHhmNSwweDBiLDB4ZWUsMHgzNSwweDBhLDB4ZjV9IH0sCit7ICAxNSwweDAxYjAsMCx7MHgwYSwweGMzLDB4ZTUsMHgxNiwweDlmLDB4ZjUsMHgxNiwweGU1LDB4MTUsMHg5ZSwweGY1LDB4MTUsMHg4MCwweGNhLDB4YzN9IH0sCit7ICAgMSwweDAxYmYsMCx7MHgyMn0gfSwKK3sgIDE2LDB4MDFjMCwwLHsweGMyLDB4MjAsMHhkMiwweGU4LDB4NDMsMHhkOCwweDIwLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHhmZiwweGYwLDB4OTAsMHg3ZiwweGE5fSB9LAoreyAgMTYsMHgwMWQwLDAsezB4ZjAsMHg5MCwweDdmLDB4YWEsMHhmMCwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHg5NSwweGUwLDB4NDQsMHhjMCwweGYwLDB4OTB9IH0sCit7ICAxNiwweDAxZTAsMCx7MHg3ZiwweDk4LDB4ZTAsMHg0NCwweGMwLDB4ZjAsMHg5MCwweDdmLDB4OWUsMHhlMCwweDQ0LDB4YzAsMHhmMCwweGU0LDB4OTAsMHg3Zn0gfSwKK3sgIDE2LDB4MDFmMCwwLHsweDk0LDB4ZjAsMHg5MCwweDdmLDB4OWQsMHhlMCwweDQ0LDB4MGYsMHhmMCwweDkwLDB4N2YsMHg5NywweGUwLDB4NTQsMHhmMCwweGYwfSB9LAoreyAgMTYsMHgwMjAwLDAsezB4OTAsMHg3ZiwweGFmLDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YWUsMHhlMCwweDQ0LDB4MGQsMHhmMCwweGQyLDB4YWZ9IH0sCit7ICAxNiwweDAyMTAsMCx7MHg5MCwweDdmLDB4OTcsMHhlMCwweDU0LDB4ZjAsMHhmMCwweDIwLDB4MjAsMHg0MiwweDc1LDB4MTQsMHgwMCwweDc1LDB4MTMsMHgwMH0gfSwKK3sgIDE2LDB4MDIyMCwwLHsweDc1LDB4MTIsMHgwMCwweDc1LDB4MTEsMHgwMCwweDdmLDB4NDgsMHg3ZSwweDkyLDB4N2QsMHgwMCwweDdjLDB4MDAsMHhhYiwweDE0fSB9LAoreyAgMTYsMHgwMjMwLDAsezB4YWEsMHgxMywweGE5LDB4MTIsMHhhOCwweDExLDB4YzMsMHgxMiwweDA0LDB4OWEsMHg1MCwweGRiLDB4MjAsMHgyMCwweGQ4LDB4N2F9IH0sCit7ICAxNiwweDAyNDAsMCx7MHgwMCwweDc5LDB4MDAsMHg3OCwweDAwLDB4ZTUsMHgxNCwweDI0LDB4MDEsMHhmNSwweDE0LDB4ZWEsMHgzNSwweDEzLDB4ZjUsMHgxM30gfSwKK3sgIDE2LDB4MDI1MCwwLHsweGU5LDB4MzUsMHgxMiwweGY1LDB4MTIsMHhlOCwweDM1LDB4MTEsMHhmNSwweDExLDB4ODAsMHhjYSwweDMwLDB4MjAsMHhmZCwweDEyfSB9LAoreyAgMTYsMHgwMjYwLDAsezB4MDEsMHgwMCwweDUwLDB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDR9IH0sCit7ICAgNiwweDAyNzAsMCx7MHgwMiwweGYwLDB4YzIsMHgyMCwweDgwLDB4ZTZ9IH0sCit7ICAgMSwweDAyNzYsMCx7MHgyMn0gfSwKK3sgIDE2LDB4MDI3NywwLHsweGU1LDB4MGMsMHhmZiwweGU1LDB4MGIsMHhmNSwweDgyLDB4ZTUsMHgwYSwweGY1LDB4ODMsMHg3NSwweDkyLDB4N2UsMHg3NCwweGMwfSB9LAoreyAgIDgsMHgwMjg3LDAsezB4ZjgsMHhlMiwweDA4LDB4ZjAsMHhhMywweGRmLDB4ZmEsMHgyMn0gfSwKK3sgIDE2LDB4MDI4ZiwwLHsweDkwLDB4N2YsMHg5NiwweDg1LDB4ODMsMHg5MiwweGE4LDB4ODIsMHg3OSwweDAyLDB4OTAsMHgwMCwweDAwLDB4ZTAsMHhiNCwweDAwfSB9LAoreyAgMTYsMHgwMjlmLDAsezB4MzcsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4OTMsMHhlMCwweDU0LDB4ZmMsMHhmMCwweDkwLDB4N2YsMHg5NiwweGUwLDB4NTR9IH0sCit7ICAxNiwweDAyYWYsMCx7MHhmYywweGYwLDB4OTAsMHg3ZiwweDljLDB4ZTAsMHg0NCwweDAzLDB4ZjAsMHg5MCwweDdmLDB4OTQsMHhlMCwweDU0LDB4N2YsMHhmMH0gfSwKK3sgIDE2LDB4MDJiZiwwLHsweDkwLDB4N2YsMHg5NywweGUwLDB4NDQsMHg4MCwweGYwLDB4OTAsMHg3ZiwweDlkLDB4ZTAsMHg0NCwweDgwLDB4ZjAsMHg5MCwweDdmfSB9LAoreyAgMTYsMHgwMmNmLDAsezB4OTcsMHhlMCwweDU0LDB4N2YsMHhmMCwweDQ0LDB4ODAsMHhmMCwweGU1LDB4MGMsMHhmZiwweDkwLDB4N2UsMHhjMCwweGUwLDB4ZjV9IH0sCit7ICAxNiwweDAyZGYsMCx7MHgyOCwweGU0LDB4YTIsMHg0NywweDMzLDB4ZjIsMHg2OSwweGYyLDB4ZTQsMHhhMiwweDQ2LDB4MzMsMHhmMiwweDY5LDB4ZjIsMHhlNH0gfSwKK3sgIDE2LDB4MDJlZiwwLHsweGEyLDB4NDUsMHgzMywweGYyLDB4NjksMHhmMiwweGU0LDB4YTIsMHg0NCwweDMzLDB4ZjIsMHg2OSwweGYyLDB4ZTQsMHhhMiwweDQzfSB9LAoreyAgMTYsMHgwMmZmLDAsezB4MzMsMHhmMiwweDY5LDB4ZjIsMHhlNCwweGEyLDB4NDIsMHgzMywweGYyLDB4NjksMHhmMiwweGU0LDB4YTIsMHg0MSwweDMzLDB4ZjJ9IH0sCit7ICAxMywweDAzMGYsMCx7MHg2OSwweGYyLDB4ZTQsMHhhMiwweDQwLDB4MzMsMHhmMiwweDY5LDB4ZjIsMHhhMywweGRmLDB4YzIsMHgyMn0gfSwKK3sgIDEyLDB4MDMxYywwLHsweDc4LDB4N2YsMHhlNCwweGY2LDB4ZDgsMHhmZCwweDc1LDB4ODEsMHgyOSwweDAyLDB4MDMsMHg2M30gfSwKK3sgIDE2LDB4MDMyOCwwLHsweDAyLDB4MDEsMHhjMCwweGU0LDB4OTMsMHhhMywweGY4LDB4ZTQsMHg5MywweGEzLDB4NDAsMHgwMywweGY2LDB4ODAsMHgwMSwweGYyfSB9LAoreyAgMTYsMHgwMzM4LDAsezB4MDgsMHhkZiwweGY0LDB4ODAsMHgyOSwweGU0LDB4OTMsMHhhMywweGY4LDB4NTQsMHgwNywweDI0LDB4MGMsMHhjOCwweGMzLDB4MzN9IH0sCit7ICAxNiwweDAzNDgsMCx7MHhjNCwweDU0LDB4MGYsMHg0NCwweDIwLDB4YzgsMHg4MywweDQwLDB4MDQsMHhmNCwweDU2LDB4ODAsMHgwMSwweDQ2LDB4ZjYsMHhkZn0gfSwKK3sgIDE2LDB4MDM1OCwwLHsweGU0LDB4ODAsMHgwYiwweDAxLDB4MDIsMHgwNCwweDA4LDB4MTAsMHgyMCwweDQwLDB4ODAsMHg5MCwweDA0LDB4ODQsMHhlNCwweDdlfSB9LAoreyAgMTYsMHgwMzY4LDAsezB4MDEsMHg5MywweDYwLDB4YmMsMHhhMywweGZmLDB4NTQsMHgzZiwweDMwLDB4ZTUsMHgwOSwweDU0LDB4MWYsMHhmZSwweGU0LDB4OTN9IH0sCit7ICAxNiwweDAzNzgsMCx7MHhhMywweDYwLDB4MDEsMHgwZSwweGNmLDB4NTQsMHhjMCwweDI1LDB4ZTAsMHg2MCwweGE4LDB4NDAsMHhiOCwweGU0LDB4OTMsMHhhM30gfSwKK3sgIDE2LDB4MDM4OCwwLHsweGZhLDB4ZTQsMHg5MywweGEzLDB4ZjgsMHhlNCwweDkzLDB4YTMsMHhjOCwweGM1LDB4ODIsMHhjOCwweGNhLDB4YzUsMHg4MywweGNhfSB9LAoreyAgMTYsMHgwMzk4LDAsezB4ZjAsMHhhMywweGM4LDB4YzUsMHg4MiwweGM4LDB4Y2EsMHhjNSwweDgzLDB4Y2EsMHhkZiwweGU5LDB4ZGUsMHhlNywweDgwLDB4YmV9IH0sCit7ICAxNiwweDAzYTgsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg5MCwweDdmLDB4YzQsMHhlNCwweGYwLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3Zn0gfSwKK3sgIDExLDB4MDNiOCwwLHsweGFiLDB4NzQsMHgwNCwweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDAzYzMsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHhkMiwweDIwLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwMX0gfSwKK3sgICA4LDB4MDNkMywwLHsweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDAzZGIsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDAyLDB4ZjAsMHhkMH0gfSwKK3sgICA2LDB4MDNlYiwwLHsweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgICAxLDB4MDNmMSwwLHsweDMyfSB9LAoreyAgIDEsMHgwM2YyLDAsezB4MzJ9IH0sCit7ICAgMSwweDAzZjMsMCx7MHgzMn0gfSwKK3sgICAxLDB4MDNmNCwwLHsweDMyfSB9LAoreyAgIDEsMHgwM2Y1LDAsezB4MzJ9IH0sCit7ICAgMSwweDAzZjYsMCx7MHgzMn0gfSwKK3sgICAxLDB4MDNmNywwLHsweDMyfSB9LAoreyAgIDEsMHgwM2Y4LDAsezB4MzJ9IH0sCit7ICAgMSwweDAzZjksMCx7MHgzMn0gfSwKK3sgICAxLDB4MDNmYSwwLHsweDMyfSB9LAoreyAgIDEsMHgwM2ZiLDAsezB4MzJ9IH0sCit7ICAgMSwweDAzZmMsMCx7MHgzMn0gfSwKK3sgICAxLDB4MDNmZCwwLHsweDMyfSB9LAoreyAgIDEsMHgwM2ZlLDAsezB4MzJ9IH0sCit7ICAgMSwweDAzZmYsMCx7MHgzMn0gfSwKK3sgIDE2LDB4MDQwMCwwLHsweDAyLDB4MDMsMHhjMywweDAwLDB4MDIsMHgwMywweGRiLDB4MDAsMHgwMiwweDAzLDB4YTgsMHgwMCwweDAyLDB4MDQsMHg2ZSwweDAwfSB9LAoreyAgMTYsMHgwNDEwLDAsezB4MDIsMHgwNCwweDU4LDB4MDAsMHgwMiwweDAzLDB4ZjEsMHgwMCwweDAyLDB4MDMsMHhmMiwweDAwLDB4MDIsMHgwMywweGYzLDB4MDB9IH0sCit7ICAxNiwweDA0MjAsMCx7MHgwMiwweDAzLDB4ZjQsMHgwMCwweDAyLDB4MDMsMHhmNSwweDAwLDB4MDIsMHgwMywweGY2LDB4MDAsMHgwMiwweDAzLDB4ZjcsMHgwMH0gfSwKK3sgIDE2LDB4MDQzMCwwLHsweDAyLDB4MDMsMHhmOCwweDAwLDB4MDIsMHgwMywweGY5LDB4MDAsMHgwMiwweDAzLDB4ZmEsMHgwMCwweDAyLDB4MDMsMHhmYiwweDAwfSB9LAoreyAgMTYsMHgwNDQwLDAsezB4MDIsMHgwMywweGZjLDB4MDAsMHgwMiwweDAzLDB4ZmQsMHgwMCwweDAyLDB4MDMsMHhmZSwweDAwLDB4MDIsMHgwMywweGZmLDB4MDB9IH0sCit7ICAgOCwweDA0NTAsMCx7MHgwMiwweDA0LDB4YWIsMHgwMCwweDAyLDB4MDQsMHhhYywweDAwfSB9LAoreyAgMTYsMHgwNDU4LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgxMCwweGYwLDB4ZDB9IH0sCit7ICAgNiwweDA0NjgsMCx7MHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9IH0sCit7ICAxNiwweDA0NmUsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDA4LDB4ZjAsMHhkMH0gfSwKK3sgICA2LDB4MDQ3ZSwwLHsweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0gfSwKK3sgIDE2LDB4MDQ4NCwwLHsweDAyLDB4MGEsMHgwMCwweDBmLDB4MDEsMHgwYywweDExLDB4MDQsMHgwZCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDEsMHgwMCwweDAwfSB9LAoreyAgIDEsMHgwNDk0LDAsezB4MDB9IH0sCit7ICAgNCwweDA0OTUsMCx7MHgwMiwweDE3LDB4MDAsMHgwMH0gfSwKK3sgICAxLDB4MDQ5OSwwLHsweDAwfSB9LAoreyAgMTYsMHgwNDlhLDAsezB4ZWIsMHg5ZiwweGY1LDB4ZjAsMHhlYSwweDllLDB4NDIsMHhmMCwweGU5LDB4OWQsMHg0MiwweGYwLDB4ZTgsMHg5YywweDQ1LDB4ZjB9IH0sCit7ICAgMSwweDA0YWEsMCx7MHgyMn0gfSwKK3sgICAxLDB4MDRhYiwwLHsweDMyfSB9LAoreyAgIDEsMHgwNGFjLDAsezB4MzJ9IH0sCit7ICAxNiwweDExMDAsMCx7MHgxMiwweDAxLDB4MTAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDQwLDB4NmEsMHgwOCwweDAxLDB4MDEsMHgwMCwweDAxLDB4MDEsMHgwMn0gfSwKK3sgIDE2LDB4MTExMCwwLHsweDAwLDB4MDEsMHgwOSwweDAyLDB4MjAsMHgwMCwweDAxLDB4MDEsMHgwMywweGEwLDB4MDAsMHgwOSwweDA0LDB4MDAsMHgwMCwweDAyfSB9LAoreyAgMTYsMHgxMTIwLDAsezB4ZmYsMHgwMCwweDAwLDB4MDQsMHgwNywweDA1LDB4ODIsMHgwMiwweDQwLDB4MDAsMHgwMCwweDA3LDB4MDUsMHgwMiwweDAyLDB4NDB9IH0sCit7ICAxNiwweDExMzAsMCx7MHgwMCwweDAwLDB4MDQsMHgwMywweDA5LDB4MDQsMHgyNiwweDAzLDB4NDEsMHgwMCwweDZlLDB4MDAsMHg2MywweDAwLDB4NjgsMHgwMH0gfSwKK3sgIDE2LDB4MTE0MCwwLHsweDZmLDB4MDAsMHg3MiwweDAwLDB4MjAsMHgwMCwweDQzLDB4MDAsMHg2OCwweDAwLDB4NjksMHgwMCwweDcwLDB4MDAsMHg3MywweDAwfSB9LAoreyAgMTYsMHgxMTUwLDAsezB4MmMsMHgwMCwweDIwLDB4MDAsMHg0OSwweDAwLDB4NmUsMHgwMCwweDYzLDB4MDAsMHgyZSwweDAwLDB4MjgsMHgwMywweDQ2LDB4MDB9IH0sCit7ICAxNiwweDExNjAsMCx7MHg2OSwweDAwLDB4NzIsMHgwMCwweDZkLDB4MDAsMHg3NywweDAwLDB4NjEsMHgwMCwweDcyLDB4MDAsMHg2NSwweDAwLDB4MjAsMHgwMH0gfSwKK3sgIDE2LDB4MTE3MCwwLHsweDQ2LDB4MDAsMHg3MiwweDAwLDB4NjEsMHgwMCwweDZkLDB4MDAsMHg2NSwweDAwLDB4NTcsMHgwMCwweDZmLDB4MDAsMHg3MiwweDAwfSB9LAoreyAgMTYsMHgxMTgwLDAsezB4NmIsMHgwMCwweDczLDB4MDAsMHgyYSwweDAzLDB4NDMsMHgwMCwweDZmLDB4MDAsMHg2ZSwweDAwLDB4NjYsMHgwMCwweDY5LDB4MDB9IH0sCit7ICAxNiwweDExOTAsMCx7MHg2NywweDAwLDB4NzUsMHgwMCwweDcyLDB4MDAsMHg2MSwweDAwLDB4NzQsMHgwMCwweDY5LDB4MDAsMHg2ZiwweDAwLDB4NmUsMHgwMH0gfSwKK3sgIDE2LDB4MTFhMCwwLHsweDIwLDB4MDAsMHg1MywweDAwLDB4NzQsMHgwMCwweDcyLDB4MDAsMHg2OSwweDAwLDB4NmUsMHgwMCwweDY3LDB4MDAsMHgyMiwweDAzfSB9LAoreyAgMTYsMHgxMWIwLDAsezB4NDksMHgwMCwweDZlLDB4MDAsMHg3NCwweDAwLDB4NjUsMHgwMCwweDcyLDB4MDAsMHg2NiwweDAwLDB4NjEsMHgwMCwweDYzLDB4MDB9IH0sCit7ICAxNiwweDExYzAsMCx7MHg2NSwweDAwLDB4MjAsMHgwMCwweDUzLDB4MDAsMHg3NCwweDAwLDB4NzIsMHgwMCwweDY5LDB4MDAsMHg2ZSwweDAwLDB4NjcsMHgwMH0gfSwKK3sgICAyLDB4MTFkMCwwLHsweDAwLDB4MDB9IH0sCit7ICAgMCwweDAwMDAsMSx7MCB9fQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODk5ODZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jCkBAIC0wLDAgKzEsMjk4IEBACisvKiAKKyAqIEVtYWdpYyBFTUkgMnw2IHVzYiBhdWRpbyBpbnRlcmZhY2UgZmlybXdhcmUgbG9hZGVyLgorICogQ29weXJpZ2h0IChDKSAyMDAyCisgKiAJVGFwaW8gTGF4c3Ry9m0gKHRhcGlvLmxheHN0cm9tQGlwdGltZS5maSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKiAKKyAqICRJZDogZW1pNjIuYyx2IDEuMTUgMjAwMi8wNC8yMyAwNjoxMzo1OSB0YXBpbyBFeHAgJAorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjZGVmaW5lIE1BWF9JTlRFTF9IRVhfUkVDT1JEX0xFTkdUSCAxNgordHlwZWRlZiBzdHJ1Y3QgX0lOVEVMX0hFWF9SRUNPUkQKK3sKKwlfX3UzMglsZW5ndGg7CisJX191MzIJYWRkcmVzczsKKwlfX3UzMgl0eXBlOworCV9fdTgJZGF0YVtNQVhfSU5URUxfSEVYX1JFQ09SRF9MRU5HVEhdOworfSBJTlRFTF9IRVhfUkVDT1JELCAqUElOVEVMX0hFWF9SRUNPUkQ7CisKKy8qIGluY2x1ZGUgZmlybXdhcmUgKHZhcmlhYmxlcykqLworCisvKiBGSVhNRTogVGhpcyBpcyBxdWljayBhbmQgZGlydHkgc29sdXRpb24hICovCisjZGVmaW5lIFNQRElGCS8qIGlmIHlvdSB3YW50IFNQRElGIGNvbW1lbnQgbmV4dCBsaW5lICovCisvLyN1bmRlZiBTUERJRgkvKiBpZiB5b3Ugd2FudCBNSURJIHVuY29tbWVudCB0aGlzIGxpbmUgKi8gCisKKyNpZmRlZiBTUERJRgorIyAgaW5jbHVkZSAiZW1pNjJfZndfcy5oIiAvKiBzcGRpZiBmdyAqLworI2Vsc2UKKyMgIGluY2x1ZGUgImVtaTYyX2Z3X20uaCIgLyogbWlkaSBmdyAqLworI2VuZGlmCisKKyNkZWZpbmUgRU1JNjJfVkVORE9SX0lEIAkJMHgwODZhICAvKiBFbWFnaWMgU29mdC11bmQgSGFyZHdhcmUgR21CSCAqLworI2RlZmluZSBFTUk2Ml9QUk9EVUNUX0lECQkweDAxMTAJLyogRU1JIDZ8Mm0gd2l0aG91dCBmaXJtd2FyZSAqLworCisjZGVmaW5lIEFOQ0hPUl9MT0FEX0lOVEVSTkFMCTB4QTAJLyogVmVuZG9yIHNwZWNpZmljIHJlcXVlc3QgY29kZSBmb3IgQW5jaG9yIFVwbG9hZC9Eb3dubG9hZCAoVGhpcyBvbmUgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGNvcmUpICovCisjZGVmaW5lIEFOQ0hPUl9MT0FEX0VYVEVSTkFMCTB4QTMJLyogVGhpcyBjb21tYW5kIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgY29yZS4gUmVxdWlyZXMgZmlybXdhcmUgKi8KKyNkZWZpbmUgQU5DSE9SX0xPQURfRlBHQQkweEE1CS8qIFRoaXMgY29tbWFuZCBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvcmUuIFJlcXVpcmVzIGZpcm13YXJlLiBFbWFnaWMgZXh0ZW5zaW9uICovCisjZGVmaW5lIE1BWF9JTlRFUk5BTF9BRERSRVNTCTB4MUIzRgkvKiBUaGlzIGlzIHRoZSBoaWdoZXN0IGludGVybmFsIFJBTSBhZGRyZXNzIGZvciB0aGUgQU4yMTMxUSAqLworI2RlZmluZSBDUFVDU19SRUcJCTB4N0Y5MiAgLyogRVotVVNCIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3Rlci4gIEJpdCAwIGNvbnRyb2xzIDgwNTEgcmVzZXQgKi8gCisjZGVmaW5lIElOVEVSTkFMX1JBTShhZGRyZXNzKSAgIChhZGRyZXNzIDw9IE1BWF9JTlRFUk5BTF9BRERSRVNTKQorCitzdGF0aWMgaW50IGVtaTYyX3dyaXRlbWVtb3J5KCBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgYWRkcmVzcywgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbmd0aCwgX191OCBiUmVxdWVzdCk7CitzdGF0aWMgaW50IGVtaTYyX3NldF9yZXNldChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIHJlc2V0X2JpdCk7CitzdGF0aWMgaW50IGVtaTYyX2xvYWRfZmlybXdhcmUgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBlbWk2Ml9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIGVtaTYyX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworc3RhdGljIGludCBfX2luaXQgZW1pNjJfaW5pdCAodm9pZCk7CitzdGF0aWMgdm9pZCBfX2V4aXQgZW1pNjJfZXhpdCAodm9pZCk7CisKKworLyogdGhhbmtzIHRvIGRyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jIGNvZGUgKi8KK3N0YXRpYyBpbnQgZW1pNjJfd3JpdGVtZW1vcnkgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBhZGRyZXNzLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoLCBfX3U4IHJlcXVlc3QpCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXIgPSAga21hbGxvYyAobGVuZ3RoLCBHRlBfS0VSTkVMKTsKKworCWlmICghYnVmZmVyKSB7CisJCWVycigiZW1pNjI6IGttYWxsb2MoJWQpIGZhaWxlZC4iLCBsZW5ndGgpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtY3B5IChidWZmZXIsIGRhdGEsIGxlbmd0aCk7CisJLyogTm90ZTogdXNiX2NvbnRyb2xfbXNnIHJldHVybnMgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3Igb3IgbGVuZ3RoIG9mIHRoZQorCSAqIAkJIGRhdGEgdGhhdCB3YXMgd3JpdHRlbiEgKi8KKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksIHJlcXVlc3QsIDB4NDAsIGFkZHJlc3MsIDAsIGJ1ZmZlciwgbGVuZ3RoLCAzMDApOworCWtmcmVlIChidWZmZXIpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIHRoYW5rcyB0byBkcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYyBjb2RlICovCitzdGF0aWMgaW50IGVtaTYyX3NldF9yZXNldCAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciByZXNldF9iaXQpCit7CisJaW50IHJlc3BvbnNlOworCWluZm8oIiVzIC0gJWQiLCBfX0ZVTkNUSU9OX18sIHJlc2V0X2JpdCk7CisJCisJcmVzcG9uc2UgPSBlbWk2Ml93cml0ZW1lbW9yeSAoZGV2LCBDUFVDU19SRUcsICZyZXNldF9iaXQsIDEsIDB4YTApOworCWlmIChyZXNwb25zZSA8IDApIHsKKwkJZXJyKCJlbWk2Mjogc2V0X3Jlc2V0ICglZCkgZmFpbGVkIiwgcmVzZXRfYml0KTsKKwl9CisJcmV0dXJuIHJlc3BvbnNlOworfQorCisjZGVmaW5lIEZXX0xPQURfU0laRQkJMTAyMworCitzdGF0aWMgaW50IGVtaTYyX2xvYWRfZmlybXdhcmUgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJaW50IGVycjsKKwlpbnQgaTsKKwlpbnQgcG9zID0gMDsJLyogUG9zaXRpb24gaW4gaGV4IHJlY29yZCAqLworCV9fdTMyIGFkZHI7CS8qIEFkZHJlc3MgdG8gd3JpdGUgKi8KKwlfX3U4ICpidWY7CisKKwlkZXZfZGJnKCZkZXYtPmRldiwgImxvYWRfZmlybXdhcmVcbiIpOworCWJ1ZiA9IGttYWxsb2MoRldfTE9BRF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQllcnIoICIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIC1FTk9NRU0pOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIHdyYXBlcnI7CisJfQorCisJLyogQXNzZXJ0IHJlc2V0IChzdG9wIHRoZSBDUFUgaW4gdGhlIEVNSSkgKi8KKwllcnIgPSBlbWk2Ml9zZXRfcmVzZXQoZGV2LDEpOworCWlmIChlcnIgPCAwKSB7CisJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQlnb3RvIHdyYXBlcnI7CisJfQorCisJLyogMS4gV2UgbmVlZCB0byBwdXQgdGhlIGxvYWRlciBmb3IgdGhlIEZQR0EgaW50byB0aGUgRVotVVNCICovCisJZm9yIChpPTA7IGdfZW1pNjJfbG9hZGVyW2ldLnR5cGUgPT0gMDsgaSsrKSB7CisJCWVyciA9IGVtaTYyX3dyaXRlbWVtb3J5KGRldiwgZ19lbWk2Ml9sb2FkZXJbaV0uYWRkcmVzcywgZ19lbWk2Ml9sb2FkZXJbaV0uZGF0YSwgZ19lbWk2Ml9sb2FkZXJbaV0ubGVuZ3RoLCBBTkNIT1JfTE9BRF9JTlRFUk5BTCk7CisJCWlmIChlcnIgPCAwKSB7CisJCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJCWdvdG8gd3JhcGVycjsKKwkJfQorCX0KKworCS8qIERlLWFzc2VydCByZXNldCAobGV0IHRoZSBDUFUgcnVuKSAqLworCWVyciA9IGVtaTYyX3NldF9yZXNldChkZXYsMCk7CisKKwkvKiAyLiBXZSB1cGxvYWQgdGhlIEZQR0EgZmlybXdhcmUgaW50byB0aGUgRU1JCisJICogTm90ZTogY29sbGVjdCB1cCB0byAxMDIzICh5ZXMhKSBieXRlcyBhbmQgc2VuZCB0aGVtIHdpdGgKKwkgKiBhIHNpbmdsZSByZXF1ZXN0LiBUaGlzIGlzIF9tdWNoXyBmYXN0ZXIhICovCisJZG8geworCQlpID0gMDsKKwkJYWRkciA9IGdfZW1pNjJic1twb3NdLmFkZHJlc3M7CisKKwkJLyogaW50ZWwgaGV4IHJlY29yZHMgYXJlIHRlcm1pbmF0ZWQgd2l0aCB0eXBlIDAgZWxlbWVudCAqLworCQl3aGlsZSAoKGdfZW1pNjJic1twb3NdLnR5cGUgPT0gMCkgJiYgKGkgKyBnX2VtaTYyYnNbcG9zXS5sZW5ndGggPCBGV19MT0FEX1NJWkUpKSB7CisJCQltZW1jcHkoYnVmICsgaSwgZ19lbWk2MmJzW3Bvc10uZGF0YSwgZ19lbWk2MmJzW3Bvc10ubGVuZ3RoKTsKKwkJCWkgKz0gZ19lbWk2MmJzW3Bvc10ubGVuZ3RoOworCQkJcG9zKys7CisJCX0KKwkJZXJyID0gZW1pNjJfd3JpdGVtZW1vcnkoZGV2LCBhZGRyLCBidWYsIGksIEFOQ0hPUl9MT0FEX0ZQR0EpOworCQlpZiAoZXJyIDwgMCkgeworCQkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCQlnb3RvIHdyYXBlcnI7CisJCX0KKwl9IHdoaWxlIChpID4gMCk7CisKKwkvKiBBc3NlcnQgcmVzZXQgKHN0b3AgdGhlIENQVSBpbiB0aGUgRU1JKSAqLworCWVyciA9IGVtaTYyX3NldF9yZXNldChkZXYsMSk7CisJaWYgKGVyciA8IDApIHsKKwkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCWdvdG8gd3JhcGVycjsKKwl9CisKKwkvKiAzLiBXZSBuZWVkIHRvIHB1dCB0aGUgbG9hZGVyIGZvciB0aGUgZmlybXdhcmUgaW50byB0aGUgRVotVVNCIChhZ2Fpbi4uLikgKi8KKwlmb3IgKGk9MDsgZ19lbWk2Ml9sb2FkZXJbaV0udHlwZSA9PSAwOyBpKyspIHsKKwkJZXJyID0gZW1pNjJfd3JpdGVtZW1vcnkoZGV2LCBnX2VtaTYyX2xvYWRlcltpXS5hZGRyZXNzLCBnX2VtaTYyX2xvYWRlcltpXS5kYXRhLCBnX2VtaTYyX2xvYWRlcltpXS5sZW5ndGgsIEFOQ0hPUl9MT0FEX0lOVEVSTkFMKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQkJZ290byB3cmFwZXJyOworCQl9CisJfQorCisJLyogRGUtYXNzZXJ0IHJlc2V0IChsZXQgdGhlIENQVSBydW4pICovCisJZXJyID0gZW1pNjJfc2V0X3Jlc2V0KGRldiwwKTsKKwlpZiAoZXJyIDwgMCkgeworCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJZ290byB3cmFwZXJyOworCX0KKworCS8qIDQuIFdlIHB1dCB0aGUgcGFydCBvZiB0aGUgZmlybXdhcmUgdGhhdCBsaWVzIGluIHRoZSBleHRlcm5hbCBSQU0gaW50byB0aGUgRVotVVNCICovCisKKy8qIEZJWE1FOiBxdWljayBhbmQgZGlydHkgaWZkZWZzICovCisjaWZkZWYgU1BESUYKKwlmb3IgKGk9MDsgZ19IZXhTcGRpZkZ3NjJbaV0udHlwZSA9PSAwOyBpKyspIHsKKwkJaWYgKCFJTlRFUk5BTF9SQU0oZ19IZXhTcGRpZkZ3NjJbaV0uYWRkcmVzcykpIHsKKwkJCWVyciA9IGVtaTYyX3dyaXRlbWVtb3J5KGRldiwgZ19IZXhTcGRpZkZ3NjJbaV0uYWRkcmVzcywgZ19IZXhTcGRpZkZ3NjJbaV0uZGF0YSwgZ19IZXhTcGRpZkZ3NjJbaV0ubGVuZ3RoLCBBTkNIT1JfTE9BRF9FWFRFUk5BTCk7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCWVycigiJXMgLSBlcnJvciBsb2FkaW5nIGZpcm13YXJlOiBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQkJCWdvdG8gd3JhcGVycjsKKwkJCX0KKwkJfQorCX0KKyNlbHNlIC8qIE1JREkgKi8KKwlmb3IgKGk9MDsgZ19IZXhNaWRpRnc2MltpXS50eXBlID09IDA7IGkrKykgeworCQlpZiAoIUlOVEVSTkFMX1JBTShnX0hleE1pZGlGdzYyW2ldLmFkZHJlc3MpKSB7CisJCQllcnIgPSBlbWk2Ml93cml0ZW1lbW9yeShkZXYsIGdfSGV4TWlkaUZ3NjJbaV0uYWRkcmVzcywgZ19IZXhNaWRpRnc2MltpXS5kYXRhLCBnX0hleE1pZGlGdzYyW2ldLmxlbmd0aCwgQU5DSE9SX0xPQURfRVhURVJOQUwpOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQkJCWdvdG8gd3JhcGVycjsKKwkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CisJfQorI2VuZGlmCQorCS8qIEFzc2VydCByZXNldCAoc3RvcCB0aGUgQ1BVIGluIHRoZSBFTUkpICovCisJZXJyID0gZW1pNjJfc2V0X3Jlc2V0KGRldiwxKTsKKwlpZiAoZXJyIDwgMCkgeworCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJZ290byB3cmFwZXJyOworCX0KKworLyogRklYTUU6IHF1aWNrIGFuZCBkaXJ0eSBpZmRlZnMgKi8KKyNpZmRlZiBTUERJRgorCWZvciAoaT0wOyBnX0hleFNwZGlmRnc2MltpXS50eXBlID09IDA7IGkrKykgeworCQlpZiAoSU5URVJOQUxfUkFNKGdfSGV4U3BkaWZGdzYyW2ldLmFkZHJlc3MpKSB7CisJCQllcnIgPSBlbWk2Ml93cml0ZW1lbW9yeShkZXYsIGdfSGV4U3BkaWZGdzYyW2ldLmFkZHJlc3MsIGdfSGV4U3BkaWZGdzYyW2ldLmRhdGEsIGdfSGV4U3BkaWZGdzYyW2ldLmxlbmd0aCwgQU5DSE9SX0xPQURfSU5URVJOQUwpOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZCIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwkJCQlnb3RvIHdyYXBlcnI7CisJCQl9CisJCX0KKwl9CisjZWxzZSAvKiBNSURJICovCisJZm9yIChpPTA7IGdfSGV4TWlkaUZ3NjJbaV0udHlwZSA9PSAwOyBpKyspIHsKKwkJaWYgKElOVEVSTkFMX1JBTShnX0hleE1pZGlGdzYyW2ldLmFkZHJlc3MpKSB7CisJCQllcnIgPSBlbWk2Ml93cml0ZW1lbW9yeShkZXYsIGdfSGV4TWlkaUZ3NjJbaV0uYWRkcmVzcywgZ19IZXhNaWRpRnc2MltpXS5kYXRhLCBnX0hleE1pZGlGdzYyW2ldLmxlbmd0aCwgQU5DSE9SX0xPQURfSU5URVJOQUwpOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQllcnIoIiVzIC0gZXJyb3IgbG9hZGluZyBmaXJtd2FyZTogZXJyb3IgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQkJCWdvdG8gd3JhcGVycjsKKwkJCX0KKwkJfQorCX0KKyNlbmRpZgorCQorCS8qIERlLWFzc2VydCByZXNldCAobGV0IHRoZSBDUFUgcnVuKSAqLworCWVyciA9IGVtaTYyX3NldF9yZXNldChkZXYsMCk7CisJaWYgKGVyciA8IDApIHsKKwkJZXJyKCIlcyAtIGVycm9yIGxvYWRpbmcgZmlybXdhcmU6IGVycm9yID0gJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCWdvdG8gd3JhcGVycjsKKwl9CisKKwlrZnJlZShidWYpOworCisJLyogcmV0dXJuIDEgdG8gZmFpbCB0aGUgZHJpdmVyIGluaWFsaXphdGlvbgorCSAqIGFuZCBnaXZlIHJlYWwgZHJpdmVyIGNoYW5nZSB0byBsb2FkICovCisJcmV0dXJuIDE7CisKK3dyYXBlcnI6CisJa2ZyZWUoYnVmKTsKKwlkZXZfZXJyKCZkZXYtPmRldiwgIkVycm9yXG4iKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoRU1JNjJfVkVORE9SX0lELCBFTUk2Ml9QUk9EVUNUX0lEKSB9LAorCXsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIGludCBlbWk2Ml9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCWRldl9kYmcoJmludGYtPmRldiwgImVtaTYyX3Byb2JlXG4iKTsKKworCWluZm8oIiVzIHN0YXJ0IiwgX19GVU5DVElPTl9fKTsgCisKKwllbWk2Ml9sb2FkX2Zpcm13YXJlKGRldik7CisKKwkvKiBkbyBub3QgcmV0dXJuIHRoZSBkcml2ZXIgY29udGV4dCwgbGV0IHJlYWwgYXVkaW8gZHJpdmVyIGRvIHRoYXQgKi8KKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIHZvaWQgZW1pNjJfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGVtaTYyX2RyaXZlciA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gImVtaTYyIC0gZmlybXdhcmUgbG9hZGVyIiwKKwkucHJvYmUJCT0gZW1pNjJfcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSBlbWk2Ml9kaXNjb25uZWN0LAorCS5pZF90YWJsZQk9IGlkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZW1pNjJfaW5pdCAodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9yZWdpc3RlciAoJmVtaTYyX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJcHJpbnRrKEtFUk5fRVJSICJhZGktZW1pOiByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZW1pNjJfZXhpdCAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlciAoJmVtaTYyX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGVtaTYyX2luaXQpOworbW9kdWxlX2V4aXQoZW1pNjJfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoInRhcGlvIGxheHN0cvZtIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkVtYWdpYyBFTUkgNnwybSBmaXJtd2FyZSBsb2FkZXIuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIHZpOmFpOnN5bnRheD1jOnN3PTg6dHM9ODp0dz04MAorICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2VtaTYyX2Z3X20uaCBiL2RyaXZlcnMvdXNiL21pc2MvZW1pNjJfZndfbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NjdjOTAwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9lbWk2Ml9md19tLmgKQEAgLTAsMCArMSw4ODUzIEBACisvKgorICogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHRocmVlIGRpZmZlcmVudCBmaWxlcywgcHJvdmlkZWQgYnkgRW1hZ2ljLgorICovCisvKiBnZW5lcmF0ZWQgVHVlIEp1biAzIDIxOjM2OjExIEVFU1QgMjAwMyAqLworCitzdGF0aWMgSU5URUxfSEVYX1JFQ09SRCBnX2VtaTYyYnNbXT17CisgIDE2LCAweDgwMTAsIDAsIHsweGZmLDB4ZmYsMHhmZiwweGZmLDB4YWEsMHg5OSwweDU1LDB4NjYsMHgzMCwweDAwLDB4ODAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDA3IH0sCisgIDE2LCAweDgwMjAsIDAsIHsweDMwLDB4MDEsMHg2MCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MGQsMHgzMCwweDAxLDB4MjAsMHgwMSwweDAwLDB4ODAsMHgzZiwweDJkIH0sCisgIDE2LCAweDgwMzAsIDAsIHsweDMwLDB4MDAsMHhjMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4ODAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDA5IH0sCisgIDE2LCAweDgwNDAsIDAsIHsweDMwLDB4MDAsMHgyMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4ODAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAxIH0sCisgIDE2LCAweDgwNTAsIDAsIHsweDMwLDB4MDAsMHg0MCwweDAwLDB4NTAsMHgwMCwweDU4LDB4MWEsMHg4MCwweDEyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgwNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgwNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgwODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4NDAsMHgwNCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgwOTAsIDAsIHsweDAwLDB4MTIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgwYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgwYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDQ4IH0sCisgIDE2LCAweDgwYzAsIDAsIHsweDA0LDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgwZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgwZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgwZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgxMDAsIDAsIHsweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgxMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgxMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgxMzAsIDAsIHsweDAwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgxNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgxNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgxNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgxNzAsIDAsIHsweDgwLDB4MTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgxODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgxOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgxYTAsIDAsIHsweDAwLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgxYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgxYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgxZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNCwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgxZTAsIDAsIHsweDdmLDB4MTAsMHgwMCwweDM0LDB4MDAsMHgwZCwweDAwLDB4MDMsMHg0MCwweDAwLDB4ZDAsMHgwMCwweDM0LDB4MDAsMHgwNSwweDAwIH0sCisgIDE2LCAweDgxZjAsIDAsIHsweDA3LDB4NDAsMHgwMSwweGQwLDB4MDAsMHg3NCwweDAwLDB4MWQsMHgwMCwweDA3LDB4NDAsMHgwMSwweGQwLDB4MDAsMHg3NCwweDAwIH0sCisgIDE2LCAweDgyMDAsIDAsIHsweDFkLDB4ODAsMHgwNywweGUwLDB4MDEsMHhiOCwweDAwLDB4NmUsMHgwMCwweDFiLDB4ODAsMHgwNiwweGUwLDB4MDEsMHgzOCwweDM3IH0sCisgIDE2LCAweDgyMTAsIDAsIHsweGM0LDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAxLDB4ZmMsMHg4MCwweGZiLDB4MzAsMHgzNiwweGM4IH0sCisgIDE2LCAweDgyMjAsIDAsIHsweDRlLDB4MDksMHgwMywweGZjLDB4ODQsMHhmZiwweDEwLDB4M2IsMHhjMCwweDBlLDB4YzgsMHgwNywweDIyLDB4ODAsMHhmZiwweDIyIH0sCisgIDE2LCAweDgyMzAsIDAsIHsweDMzLDB4YzAsMHgwZiwweGM4LDB4MzMsMHg2ZSwweDAwLDB4ZmIsMHg4MCwweDNmLDB4MjAsMHgwZCwweGMyLDB4NTMsMHhkNCwweDgwIH0sCisgIDE2LCAweDgyNDAsIDAsIHsweGNjLDB4M2EsMHgzZiwweDAwLDB4MGMsMHhmMSwweDAzLDB4ZjAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgyNTAsIDAsIHsweDgwLDB4MDAsMHhlZCwweDYwLDB4YmYsMHg2MCwweDIzLDB4ZjAsMHgwZCwweDgyLDB4MTIsMHgzYywweDYwLDB4OGYsMHg3MCwweDIzIH0sCisgIDE2LCAweDgyNjAsIDAsIHsweGYwLDB4MDgsMHg4OCwweDAyLDB4YTUsMHg0MCwweGJmLDB4ZDAsMHg2MywweGQ2LDB4MGIsMHg4OCwweDAyLDB4MmUsMHgwYywweGJiIH0sCisgIDE2LCAweDgyNzAsIDAsIHsweDgwLDB4MmUsMHgyMCwweDg4LDB4OGQsMHgwMiwweGU2LDB4NDAsMHg4MCwweDYwLDB4MmUsMHgzMCwweDBhLDB4YjEsMHgxMiwweDIwIH0sCisgIDE2LCAweDgyODAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHg4MCwweGEzLDB4NDAsMHgyYywweGM0IH0sCisgIDE2LCAweDgyOTAsIDAsIHsweDRhLDB4MDAsMHgxMiwweDhjLDB4ODgsMHhhMywweDIyLDB4MjAsMHhjNCwweDBhLDB4OTAsMHg0MiwweDA0LDB4YTksMHhhMywweDAwIH0sCisgIDE2LCAweDgyYTAsIDAsIHsweDI0LDB4YzgsMHg4YiwweDgwLDB4MDIsMHhjYywweDAwLDB4YjMsMHgwMCwweDJlLDB4MDEsMHgwOSwweDA4LDB4MDIsMHg4NCwweDAwIH0sCisgIDE2LCAweDgyYjAsIDAsIHsweDgwLDB4MjAsMHgyYywweDEwLDB4MGEsMHgzMiwweDQyLDB4MjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgyYzAsIDAsIHsweGMwLDB4MTUsMHhhYywweDA0LDB4YjMsMHgwMCwweDJhLDB4YzAsMHgwOCwweDA4LDB4YTIsMHg4YywweDAwLDB4OGIsMHgwMCwweGEyIH0sCisgIDE2LCAweDgyZDAsIDAsIHsweGMxLDB4MTAsMHg5OCwweDQyLDB4YTcsMHgwMCwweGJiLDB4MDEsMHg2NiwweGMxLDB4MGIsMHg4MCwweDAyLDB4YWMsMHgwNCwweGJiIH0sCisgIDE2LCAweDgyZTAsIDAsIHsweDAwLDB4MmUsMHgwMCwweDBiLDB4YjgsMHgxMiwweGU0LDB4MDIsMHg4OSwweDA4LDB4MGUsMHg0MCwweDBhLDB4YjAsMHgwMiwweDMwIH0sCisgIDE2LCAweDgyZjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4YWMsMHgwMCwweGViLDB4MDAsMHgzZSwweGMwIH0sCisgIDE2LCAweDgzMDAsIDAsIHsweDRhLDB4YjgsMHgyMywweGVjLDB4MTgsMHhlYiwweDAwLDB4MzIsMHhjMCwweDBlLDB4MmMsMHgxMiwweDIyLDB4MTAsMHhlYiwweDAwIH0sCisgIDE2LCAweDgzMTAsIDAsIHsweDI2LDB4YzAsMHg0ZiwweDAwLDB4NDMsMHhlZCwweDAwLDB4ZmIsMHgwMCwweDJlLDB4MjQsMHgwZCwweDgwLDB4MTMsMHhlNCwweDAwIH0sCisgIDE2LCAweDgzMjAsIDAsIHsweGM4LDB4ZDAsMHg3YywweDEyLDB4MGUsMHhiMCwweDAzLDB4NDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgzMzAsIDAsIHsweGUxLDB4MDAsMHhiYywweDAwLDB4ZmYsMHgwMCwweDM1LDB4YzAsMHg0ZiwweGUwLDB4MDMsMHg3YywweDA4LDB4ZmYsMHgwMSwweDE3IH0sCisgIDE2LCAweDgzNDAsIDAsIHsweGMyLDB4NGQsMHhjMCwweDAzLDB4ZjQsMHgwOCwweGY3LDB4MDAsMHgzYiwweGMwLDB4MDcsMHhjMCwweDAzLDB4N2MsMHg4MCwweGZmIH0sCisgIDE2LCAweDgzNTAsIDAsIHsweDI0LDB4M2YsMHg0MCwweDBjLDB4ZjAsMHgwMSwweGY0LDB4MDQsMHhiYywweDA4LDB4M2YsMHgyOCwweDBmLDB4ZjAsMHgwMywweDc4IH0sCisgIDE2LCAweDgzNjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwOCwweGZiLDB4MDQsMHgzYSwweGM4IH0sCisgIDE2LCAweDgzNzAsIDAsIHsweDBmLDB4OTQsMHgwMywweGVjLDB4MTAsMHhmMywweDAwLDB4MzQsMHhjMCwweDBlLDB4YjAsMHgwMywweDYxLDB4MDQsMHhmYiwweDAwIH0sCisgIDE2LCAweDgzODAsIDAsIHsweDM2LDB4YzAsMHgwZSwweGEzLDB4MDMsMHgyYywweDgwLDB4ZmIsMHg3MiwweDNlLDB4MDIsMHgwZiwweDhhLDB4MDMsMHhlNCwweDAyIH0sCisgIDE2LCAweDgzOTAsIDAsIHsweGM5LDB4ODAsMHgyYSwweDUwLDB4MGYsMHhiMCwweDAzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgzYTAsIDAsIHsweGNhLDB4NDQsMHgzYywweDAwLDB4YmYsMHgwMCwweDAzLDB4YzAsMHgwOCwweDgwLDB4MDMsMHg3YywweDAwLDB4YmYsMHgwMCwweDNmIH0sCisgIDE2LCAweDgzYjAsIDAsIHsweGUyLDB4MDgsMHg5MCwweDQzLDB4NjAsMHgwMCwweGJmLDB4MDAsMHgzNywweGMwLDB4MDgsMHg5MCwweDAxLDB4NmQsMHgwMCwweGJiIH0sCisgIDE2LCAweDgzYzAsIDAsIHsweDQwLDB4MmMsMHgxMCwweDBiLDB4YjAsMHg0MiwweGQ3LDB4YzAsMHg4OSwweDAwLDB4MmEsMHg3YywweDBiLDB4ZjAsMHgwMiwweGYyIH0sCisgIDE2LCAweDgzZDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMiwweDA1LDB4NGMsMHgwMCwweGIzLDB4MDAsMHgyMCwweGQ1IH0sCisgIDE2LCAweDgzZTAsIDAsIHsweDRhLDB4MDAsMHgwMCwweDBjLDB4MDQsMHg5MywweDAwLDB4MGMsMHhmMCwweDBiLDB4MDksMHgwMiwweDA4LDB4MDEsMHhiMywweDIwIH0sCisgIDE2LCAweDgzZjAsIDAsIHsweDI4LDB4YzAsMHgwYSwweDBjLDB4MGEsMHgwZSwweDAwLDB4YjMsMHgwMCwweDI0LDB4MzAsMHgwOSwweDAwLDB4MDIsMHhjNiwweDEwIH0sCisgIDE2LCAweDg0MDAsIDAsIHsweDgwLDB4NDIsMHgyMCwweDAwLDB4OGIsMHhiMCwweDAyLDB4ZjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg0MTAsIDAsIHsweDIyLDB4MDEsMHgxZSwweDAwLDB4YjcsMHg5NCwweDIxLDB4ZTQsMHg0OCwweGQ5LDB4MTIsMHg1ZSwweDQwLDB4YjcsMHg5MCwweDI5IH0sCisgIDE2LCAweDg0MjAsIDAsIHsweGUwLDB4OGIsMHg2OSwweDEyLDB4ZDYsMHg4MCwweDM3LDB4ODIsMHgyYywweGU4LDB4MDgsMHg0YSwweDAyLDB4NWUsMHgwMCwweGI3IH0sCisgIDE2LCAweDg0MzAsIDAsIHsweGE0LDB4MmQsMHgyMCwweDBiLDB4NzksMHgwMiwweGQ2LDB4MDgsMHg4NiwweDkwLDB4MjksMHhhMCwweDBiLDB4NzksMHgwMiwweGQ4IH0sCisgIDE2LCAweDg0NDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4MGMsMHgwMCwweGZiLDB4YTAsMHgyOCwweGU4IH0sCisgIDE2LCAweDg0NTAsIDAsIHsweDBlLDB4MmEsMHgwMiwweDhjLDB4MDAsMHhkMywweDAwLDB4NjQsMHhjMCwweDBmLDB4MDAsMHg0MywweDBlLDB4YzQsMHhmMywweDAwIH0sCisgIDE2LCAweDg0NjAsIDAsIHsweDc4LDB4ZWMsMHgwZSwweDBhLDB4NDMsMHgwZSwweDIwLDB4NzMsMHhlMCwweDNjLDB4MDIsMHg0ZiwweDAwLDB4MDMsMHhjNCwweDQwIH0sCisgIDE2LCAweDg0NzAsIDAsIHsweGMzLDB4MDAsMHgzOCwweGMwLDB4MGYsMHgzMCwweDAzLDB4ZDIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg0ODAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZmYsMHgwMCwweGJjLDB4Y2MsMHgwZSwweGIwLDB4MDMsMHhlYywweDIwLDB4ZmIsMHgwMCwweDNjIH0sCisgIDE2LCAweDg0OTAsIDAsIHsweGMyLDB4MGMsMHgyMCwweDAzLDB4NmMsMHg1MCwweGYzLDB4MDAsMHgzNiwweGM0LDB4MGYsMHg0MCwweDAzLDB4ZmMsMHgwOCwweGZmIH0sCisgIDE2LCAweDg0YTAsIDAsIHsweDFhLDB4M2YsMHg4MCwweDBmLDB4ZjAsMHgwMSwweGU0LDB4MzAsMHhmZiwweDAyLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHg2MywweGQwIH0sCisgIDE2LCAweDg0YjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4ZWMsMHg0MCwweGZiLDB4MDAsMHhiMiwweGQ4IH0sCisgIDE2LCAweDg0YzAsIDAsIHsweDBjLDB4YjAsMHgwMSwweDJkLDB4MjAsMHhkYiwweDAxLDB4M2EsMHhjOCwweDhjLDB4MzgsMHgwMywweGE4LDB4MDAsMHhmYiwweDQ4IH0sCisgIDE2LCAweDg0ZDAsIDAsIHsweDNlLDB4YzksMHgwZiwweDgwLDB4MDMsMHhlYywweDQwLDB4ZmIsMHgwMSwweDNlLDB4MDAsMHgwZiwweDA4LDB4MDMsMHhhNCwweDA4IH0sCisgIDE2LCAweDg0ZTAsIDAsIHsweGZhLDB4ODAsMHhiMiwweDgwLDB4MGYsMHhiMSwweDAyLDB4NmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg0ZjAsIDAsIHsweDQ4LDB4MTksMHgxYywweDgwLDB4YmYsMHgzMCwweDIxLDB4Y2EsMHgwOCwweGYwLDB4MGEsMHgwYywweDgwLDB4OGYsMHg1MCwweDIxIH0sCisgIDE2LCAweDg1MDAsIDAsIHsweGMyLDB4MDgsMHg3MCwweDUwLDB4OWMsMHgwMCwweGI3LDB4MDAsMHgzOSwweGM0LDB4MGIsMHg0MCwweDAyLDB4OWMsMHgwNCwweGI3IH0sCisgIDE2LCAweDg1MTAsIDAsIHsweDIwLDB4MjUsMHg0MCwweDBiLDB4NzAsMHgwMiwweDE0LDB4ODAsMHhiNiwweDAwLDB4MjEsMHg4MCwweDBiLDB4ZjgsMHgwMiwweDEyIH0sCisgIDE2LCAweDg1MjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgwMCwweGI3LDB4YjAsMHgyMSwweGVjIH0sCisgIDE2LCAweDg1MzAsIDAsIHsweDBiLDB4NzgsMHgxMiwweGRlLDB4ODQsMHg5NywweDgwLDB4MGQsMHhlMCwweDI4LDB4ZjgsMHgwMiwweGRlLDB4MDAsMHhiNywweDkwIH0sCisgIDE2LCAweDg1NDAsIDAsIHsweDJkLDB4ZTQsMHgwYiwweDY4LDB4ODIsMHg1ZSwweDgwLDB4YjcsMHhhMCwweDI5LDB4MjAsMHgwYiwweDQ4LDB4MDIsMHg5NiwweDAwIH0sCisgIDE2LCAweDg1NTAsIDAsIHsweGI3LDB4ODAsMHgyMSwweGUxLDB4MGIsMHg3YSwweDAyLDB4NzAsMHg0MCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg1NjAsIDAsIHsweDQ4LDB4MDQsMHhjYywweDAwLDB4YjMsMHgwMCwweDIwLDB4YzAsMHgwYiwweDM4LDB4MDIsMHg4YywweDA0LDB4ODMsMHgwMCwweDI4IH0sCisgIDE2LCAweDg1NzAsIDAsIHsweGMwLDB4ODgsMHgzOSwweDAyLDB4NGMsMHg0MCwweGIzLDB4MDQsMHgyOCwweGMwLDB4MWIsMHgxMCwweDAyLDB4OGMsMHgwMSwweGIzIH0sCisgIDE2LCAweDg1ODAsIDAsIHsweDA0LDB4MjQsMHg4OCwweDRiLDB4MzEsMHgwMiwweDA0LDB4MDAsMHhiMywweDgwLDB4MjAsMHhmMiwweDBiLDB4MzAsMHgwMiwweDAyIH0sCisgIDE2LCAweDg1OTAsIDAsIHsweDI0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDA1LDB4YTgsMHgwMCwweGZhLDB4MDAsMHgzMiwweDgwIH0sCisgIDE2LCAweDg1YTAsIDAsIHsweDBmLDB4ZTgsMHgwMywweGU4LDB4MDAsMHhkYSwweDAxLDB4M2EsMHg4MCwweDhjLDB4ZWQsMHgwMywweGZiLDB4MDQsMHhmYSwweDAwIH0sCisgIDE2LCAweDg1YjAsIDAsIHsweDNlLDB4ODAsMHgwZiwweDZjLDB4MDMsMHhmYiwweGM4LDB4YmUsMHhjMiwweDFmLDB4ODAsMHgwZiwweGU1LDB4MDMsMHhhOCwweDAwIH0sCisgIDE2LCAweDg1YzAsIDAsIHsweGZlLDB4NDgsMHgzMywweDgwLDB4NGYsMHhhMCwweDAzLDB4N2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg1ZDAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNjLDB4MDAsMHgwYywweDgxLDB4OTMsMHg2MCwweDAwLDB4ZjgsMHgwMSwweDM2IH0sCisgIDE2LCAweDg1ZTAsIDAsIHsweDEwLDB4MGYsMHg4MCwweDAzLDB4YTAsMHgyMCwweGY4LDB4MDAsMHgyYSwweDAxLDB4OGYsMHg4NCwweDEzLDB4ZTEsMHgwMCwweGY4IH0sCisgIDE2LCAweDg1ZjAsIDAsIHsweDE4LDB4MzYsMHgwMCwweDBmLDB4ODAsMHgxMywweGUwLDB4MDAsMHhmOCwweDIwLDB4M2UsMHgxNCwweDBmLDB4ODAsMHgwMywweGQyIH0sCisgIDE2LCAweDg2MDAsIDAsIHsweDgwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTQsMHgwMCwweGYxLDB4MDAsMHhhYSwweDQwIH0sCisgIDE2LCAweDg2MTAsIDAsIHsweDBjLDB4OTAsMHgwMywweDI0LDB4MDAsMHhlMSwweDAwLDB4MzgsMHg0MCwweDFjLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweGEwIH0sCisgIDE2LCAweDg2MjAsIDAsIHsweDNhLDB4NDAsMHg0NywweDlhLDB4OTMsMHhhMiwweDgwLDB4ZjgsMHgxMCwweDNlLDB4NDAsMHgwYiwweDk0LDB4MDMsMHhlNiwweDQwIH0sCisgIDE2LCAweDg2MzAsIDAsIHsweGY5LDB4YzAsMHgzZSwweDY4LDB4MGIsMHgxMCwweDAzLDB4MDIsMHg4NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg2NDAsIDAsIHsweDgwLDB4MDQsMHhlNCwweDA0LDB4YjksMHgwMCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDA0LDB4ODksMHgwMCwweDM2IH0sCisgIDE2LCAweDg2NTAsIDAsIHsweDQwLDB4MDgsMHg5MCwweDAyLDB4ZTQsMHgwNCwweGI5LDB4ODAsMHgyZSwweDQwLDB4NGYsMHg5NCwweDAzLDB4NjEsMHgxMCwweGU4IH0sCisgIDE2LCAweDg2NjAsIDAsIHsweDQwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHg0MiwweGU2LDB4MDQsMHhiOSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweDIwIH0sCisgIDE2LCAweDg2NzAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA0LDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyMiwweDQwIH0sCisgIDE2LCAweDg2ODAsIDAsIHsweDBhLDB4MTAsMHg1MiwweDA0LDB4MDQsMHhhOSwweDA0LDB4MmEsMHg0MCwweDA4LDB4YjAsMHgwMiwweGU0LDB4MDEsMHhiOSwweDAwIH0sCisgIDE2LCAweDg2OTAsIDAsIHsweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhhOCwweDBkLDB4YjgsMHg0MCwweDJlLDB4NDAsMHgwOSwweDk0LDB4MDIsMHhlNSwweDAwIH0sCisgIDE2LCAweDg2YTAsIDAsIHsweGI5LDB4MDQsMHgyZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg2YjAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4YjEsMHgyMCwweDIwLDB4YzgsMHgwYSwweDEwLDB4NDIsMHgwNCwweDkwLDB4ODEsMHgyMCwweDA0IH0sCisgIDE2LCAweDg2YzAsIDAsIHsweGM4LDB4MDgsMHgzMCwweDI2LDB4YzQsMHgwMCwweGIxLDB4MjAsMHgyYywweDQ4LDB4MGIsMHg5MCwweDAyLDB4NDUsMHgwMSwweGIxIH0sCisgIDE2LCAweDg2ZDAsIDAsIHsweDQwLDB4MmMsMHg0MCwweDBiLDB4MTIsMHg4MiwweGM0LDB4MDAsMHhiMSwweDJiLDB4MmMsMHg0YSwweDBiLDB4MTIsMHg4MiwweDAyIH0sCisgIDE2LCAweDg2ZTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDA4LDB4MjEsMHg0OCwweGY4LDB4NTAsMHgzMiwweDAwIH0sCisgIDE2LCAweDg2ZjAsIDAsIHsweDRlLDB4ODUsMHgwYiwweDIxLDB4NDAsMHhhOCwweDUyLDB4MmEsMHgwMCwweDA4LDB4ODAsMHgyMywweGUxLDB4NDAsMHhmOCwweDAwIH0sCisgIDE2LCAweDg3MDAsIDAsIHsweDNhLDB4MTQsMHgwZiwweGEwLDB4NDMsMHhhOCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgyLDB4MDMsMHhlMCwweDAwIH0sCisgIDE2LCAweDg3MTAsIDAsIHsweGYwLDB4MjAsMHgzZSwweDg4LDB4NGYsMHg4MiwweDBiLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg3MjAsIDAsIHsweDk4LDB4MTksMHhlNCwweDQwLDB4ZjksMHgxMSwweDM0LDB4NDQsMHgyZCwweGQwLDB4MDMsMHhlNCwweDUwLDB4NzksMHgxMCwweDM4IH0sCisgIDE2LCAweDg3MzAsIDAsIHsweDQ0LDB4MmYsMHhkMCwweDAzLDB4ZjUsMHgxMCwweGY5LDB4MTAsMHgzZSwweDQ1LDB4MDYsMHg1MCwweDAzLDB4ZTUsMHgwMCwweGU5IH0sCisgIDE2LCAweDg3NDAsIDAsIHsweDQwLDB4M2YsMHg0MCwweDBmLDB4ZDAsMHg0MywweGY1LDB4MDAsMHhmZCwweDI4LDB4M2YsMHg0MCwweDBmLDB4OTIsMHg4MywweGU2IH0sCisgIDE2LCAweDg3NTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAxLDB4ZTYsMHgwMCwweGQ5LDB4OTAsMHgzNywweDY5IH0sCisgIDE2LCAweDg3NjAsIDAsIHsweDRkLDB4OTAsMHgyMywweDY3LDB4ODAsMHhkOSwweGUwLDB4MzcsMHg2OCwweDBlLDB4ZDAsMHgwNywweGE0LDB4MDAsMHgwNSwweDg2IH0sCisgIDE2LCAweDg3NzAsIDAsIHsweDNlLDB4NjYsMHgwZCwweDUwLDB4MjMsMHgyNiwweDAwLDB4YzksMHg4MiwweDNkLDB4NDAsMHgwZCwweGQ4LDB4MDcsMHgzNiwweDAyIH0sCisgIDE2LCAweDg3ODAsIDAsIHsweGNkLDB4YzAsMHgzMywweDYwLDB4MGMsMHg5YywweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg3OTAsIDAsIHsweDM4LDB4MTAsMHhlMiwweDgwLDB4ODgsMHhhMiwweDIyLDB4MTAsMHgyOCwweDhhLDB4ODIsMHgyMywweDg0LDB4ODgsMHhhMCwweDIyIH0sCisgIDE2LCAweDg3YTAsIDAsIHsweDE0LDB4NDgsMHg4MCwweDQyLDB4ODIsMHgwMCwweDg4LDB4NDAsMHgyZSwweDMwLDB4MDgsMHg4MCwweDAyLDB4YTIsMHgwMCwweGQ4IH0sCisgIDE2LCAweDg3YjAsIDAsIHsweDkwLDB4MjYsMHgwMCwweDA4LDB4ODQsMHgwYSwweDIxLDB4MDAsMHhjOCwweGEwLDB4YTIsMHgxNCwweDI4LDB4OGMsMHgwMiwweDBlIH0sCisgIDE2LCAweDg3YzAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzUsMHgyMCwweDkxLDB4NDAsMHgyYywweDQ0IH0sCisgIDE2LCAweDg3ZDAsIDAsIHsweDE4LDB4MTAsMHgwMiwweDg1LDB4MDQsMHhiMSwweDQwLDB4MGMsMHg0MCwweDBhLDB4MTAsMHgwNiwweDg0LDB4MzAsMHg4MSwweDQwIH0sCisgIDE2LCAweDg3ZTAsIDAsIHsweDJjLDB4NDgsMHg1OSwweDEwLDB4MWEsMHgwNCwweDYwLDB4ODEsMHgwOSwweDJlLDB4NDAsMHgxYiwweDE0LDB4MDIsMHgyNSwweDAwIH0sCisgIDE2LCAweDg3ZjAsIDAsIHsweDkxLDB4ZTAsMHgyMCwweDYwLDB4MDgsMHgxNiwweDAyLDB4MDAsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg4MDAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4ODEsMHgwMCwweDJhLDB4NDEsMHgwOCwweDkwLDB4MDIsMHhhNCwweDAwLDB4YTEsMHgwMCwweDJhIH0sCisgIDE2LCAweDg4MTAsIDAsIHsweDQxLDB4MDgsMHhiMCwweDgyLDB4MjQsMHgxMSwweDhiLDB4MDAsMHgyZSwweDQwLDB4MTgsMHg5MSwweDAyLDB4YTAsMHgwNCwweDk4IH0sCisgIDE2LCAweDg4MjAsIDAsIHsweDIwLDB4MmUsMHg1NCwweDFiLDB4OTAsMHg4MiwweDJjLDB4MDAsMHg4OSwweDEwLDB4MjIsMHg0NCwweDg4LDB4OTAsMHgwMiwweDA2IH0sCisgIDE2LCAweDg4MzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGQ5LDB4MDAsMHgzZSwweDQwIH0sCisgIDE2LCAweDg4NDAsIDAsIHsweDRjLDB4OTAsMHgwMywweGE0LDB4MTAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDhlLDB4MTAsMHgwMiwweGE0LDB4YzIsMHhjOSwweDAwIH0sCisgIDE2LCAweDg4NTAsIDAsIHsweDNlLDB4NDAsMHgwZCwweDE2LDB4MTMsMHgwMSwweDg0LDB4YzgsMHgyMCwweDNjLDB4NjAsMHgwZiwweDkwLDB4MTIsMHgwNCwweDAwIH0sCisgIDE2LCAweDg4NjAsIDAsIHsweGQ5LDB4NDAsMHgzMiwweDUwLDB4MGMsMHg5MCwweDAzLDB4MjgsMHg4NCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg4NzAsIDAsIHsweDI4LDB4MDEsMHg4NCwweDAwLDB4ZjksMHgwMCwweDM2LDB4NDAsMHg0ZiwweDk5LDB4NGEsMHg0NCwweDAwLDB4OTksMHgwMCwweGI0IH0sCisgIDE2LCAweDg4ODAsIDAsIHsweDQwLDB4MGYsMHg5MCwweDEzLDB4ZTYsMHgwMCwweGY5LDB4MDAsMHgzYywweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTMsMHgwMCwweGY4IH0sCisgIDE2LCAweDg4OTAsIDAsIHsweDAxLDB4MzYsMHg0MCwweDBjLDB4OTksMHgwMywweGU0LDB4MDIsMHhmOSwweDgwLDB4M2UsMHg2MCwweDRmLDB4OTAsMHgwYiwweGNhIH0sCisgIDE2LCAweDg4YTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGQ4LDB4MDAsMHgzYywweDAwIH0sCisgIDE2LCAweDg4YjAsIDAsIHsweDFkLDB4ODAsMHgwMywweDIwLDB4MDAsMHhlOCwweDAwLDB4MzIsMHgwMCwweDBjLDB4ODQsMHg4MywweGUwLDB4MTAsMHhlOCwweDIwIH0sCisgIDE2LCAweDg4YzAsIDAsIHsweDMyLDB4MDAsMHg4ZSwweDg0LDB4MDMsMHgyMSwweDgwLDB4YzgsMHgwMCwweDNhLDB4MTksMHgwZiwweDA0LDB4MDMsMHhlMCwweDI0IH0sCisgIDE2LCAweDg4ZDAsIDAsIHsweGYwLDB4MDIsMHgzYywweDAwLDB4MGYsMHg4MCwweDEzLDB4OGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg4ZTAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAyLDB4OGEsMHgwMSwweDBmLDB4YTIsMHg2OCwweGEwLDB4MDAsMHgyOCwweDAwLDB4OGEsMHgwMCwweDc3IH0sCisgIDE2LCAweDg4ZjAsIDAsIHsweDgwLDB4NjgsMHhlMCwweDEyLDB4ZTgsMHgwMCwweGRlLDB4MDAsMHgzNiwweDgxLDB4MDgsMHhlMCwweDAzLDB4N2EsMHgwOCwweGFlIH0sCisgIDE2LCAweDg5MDAsIDAsIHsweGM0LDB4MmYsMHg4MCwweDA4LDB4ZWQsMHgwMiwweGZhLDB4MDAsMHhiZSwweGEwLDB4M2IsMHg4MCwweDBiLDB4YTAsMHg0MiwweDBhIH0sCisgIDE2LCAweDg5MTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDg1LDB4NGMsMHgwMCwweDkzLDB4MDAsMHgyYywweGMwIH0sCisgIDE2LCAweDg5MjAsIDAsIHsweDg4LDB4YjAsMHgwMiwweDBjLDB4MTQsMHhhMywweDA0LDB4MjAsMHhjNCwweDE4LDB4MzgsMHgwMiwweGVjLDB4MTAsMHg5MywweDU0IH0sCisgIDE2LCAweDg5MzAsIDAsIHsweDI4LDB4YzAsMHgwYSwweDAwLDB4MDIsMHg0ZSwweDAwLDB4ODMsMHg0OSwweDY4LDB4YzAsMHgwMiwweDM5LDB4NDIsMHhjZSwweDQwIH0sCisgIDE2LCAweDg5NDAsIDAsIHsweGIzLDB4MDAsMHgyYywweGU2LDB4MGIsMHhiMCwweDAyLDB4OGIsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg5NTAsIDAsIHsweDIwLDB4MDEsMHgxYywweDA4LDB4ODcsMHgyMCwweDJjLDB4ODAsMHgxOCwweGYyLDB4MjIsMHgxYywweDAwLDB4ODcsMHgxMCwweDIxIH0sCisgIDE2LCAweDg5NjAsIDAsIHsweGMwLDB4MDgsMHg3MCwweDgyLDB4ZGMsMHg4MCwweDk2LDB4ODAsMHgyZCwweGMwLDB4MGEsMHg0MCwweDAyLDB4N2QsMHg0MCwweDI3IH0sCisgIDE2LCAweDg5NzAsIDAsIHsweDY0LDB4NmQsMHhkMCwweDQ4LDB4NjAsMHg0MiwweGQ4LDB4MDUsMHhiNiwweDA0LDB4MjksMHhjMCwweDRiLDB4NzIsMHgwMiwweDI4IH0sCisgIDE2LCAweDg5ODAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA4LDB4M2UsMHg4OCwweGQ3LDB4ZTAsMHgzZCwweGUwIH0sCisgIDE2LCAweDg5OTAsIDAsIHsweDA4LDB4N2MsMHg0MiwweDNlLDB4MDAsMHhlMywweDgyLDB4MjAsMHhlMCwweDBjLDB4NjgsMHgwMywweGRmLDB4MDQsMHhkNywweDgwIH0sCisgIDE2LCAweDg5YTAsIDAsIHsweDNiLDB4ZTAsMHg0ZSwweDQ4LDB4MGEsMHg1ZSwweDgwLDB4YzcsMHhjMiwweDE5LDB4ZTAsMHgwZSwweDc4LDB4MDMsMHhkNiwweDA4IH0sCisgIDE2LCAweDg5YjAsIDAsIHsweGY3LDB4ODAsMHgzZCwweGUwLDB4MGYsMHhmOCwweDAzLDB4YWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg5YzAsIDAsIHsweDA4LDB4MWQsMHhhYywweDQwLDB4ZmIsMHg0MCwweDdlLDB4ODAsMHgwZSwweDM2LDB4ODMsMHhlZCwweDQwLDB4ZGIsMHg2MCwweDNlIH0sCisgIDE2LCAweDg5ZDAsIDAsIHsweDgwLDB4MGYsMHhhMCwweDAzLDB4ZWQsMHgyOCwweGRhLDB4MDAsMHgzMiwweGM0LDB4MGMsMHhiMCwweDBiLDB4Y2MsMHgwMCwweGZiIH0sCisgIDE2LCAweDg5ZTAsIDAsIHsweDAwLDB4M2UsMHhjMCwweDBlLDB4ODAsMHgxMywweGUwLDB4MTAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4YjEsMHg1MywweGMyIH0sCisgIDE2LCAweDg5ZjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4ZmUsMHgwMCwweGZmLDB4YzAsMHgzMywweGUwIH0sCisgIDE2LCAweDhhMDAsIDAsIHsweDBjLDB4ZjksMHgwMywweDdmLDB4MDQsMHhjZiwweGQwLDB4M2YsMHhlNCwweDBmLDB4YjgsMHgwMywweGZlLDB4MDAsMHhmZiwweDk0IH0sCisgIDE2LCAweDhhMTAsIDAsIHsweDNmLDB4ZTAsMHgwZiwweGM4LDB4MDMsMHg3ZSwweDEwLDB4ZjMsMHg4MCwweDNiLDB4ZTAsMHgwZiwweGY4LDB4MDMsMHhmZSwweDQ4IH0sCisgIDE2LCAweDhhMjAsIDAsIHsweGVkLDB4ODAsMHgzMywweDI0LDB4MDQsMHhmOCwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhhMzAsIDAsIHsweGE4LDB4MTEsMHg5YywweDgwLDB4YmYsMHgwNCwweDIxLDB4MjgsMHgwOCwweGY4LDB4MDIsMHgxZSwweGMwLDB4Y2YsMHg5MCwweDIxIH0sCisgIDE2LCAweDhhNDAsIDAsIHsweDRjLDB4MGIsMHg1YSwweDQyLDB4ZGUsMHgwMCwweGI3LDB4ODAsMHgyYywweGU4LDB4MGIsMHgwNCwweDAyLDB4MWMsMHgwMCwweGI3IH0sCisgIDE2LCAweDhhNTAsIDAsIHsweGEwLDB4MzUsMHgxMCwweDhmLDB4NzEsMHgxMywweGRlLDB4YzAsMHg4NCwweDEwLDB4MjEsMHg4MCwweDBkLDB4NzEsMHgwMiwweDJhIH0sCisgIDE2LCAweDhhNjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDQwLDB4OWMsMHgwOCwweGI3LDB4MDAsMHgyNSwweGM4IH0sCisgIDE2LCAweDhhNzAsIDAsIHsweDA4LDB4NzEsMHgwMiwweGNjLDB4ODAsMHg5NywweDAwLDB4MjksMHhjMCwweDhiLDB4NzIsMHgwNiwweGRjLDB4MDgsMHhiNSwweDAwIH0sCisgIDE2LCAweDhhODAsIDAsIHsweDJkLDB4YzgsMHgwYiwweDQwLDB4MDIsMHgxYywweDQwLDB4YmYsMHgxMCwweDIxLDB4YzAsMHgwYiwweDc0LDB4MDIsMHhkNCwweDgwIH0sCisgIDE2LCAweDhhOTAsIDAsIHsweGE3LDB4NDAsMHgyMSwweDQxLDB4MDgsMHg3MCwweDAyLDB4MDQsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhhYTAsIDAsIHsweDYwLDB4MTQsMHhjYywweDAwLDB4YjMsMHgwMCwweDI0LDB4MDAsMHgwOCwweDM0LDB4ODIsMHhhYywweDExLDB4ODMsMHgwMCwweDIwIH0sCisgIDE2LCAweDhhYjAsIDAsIHsweDAwLDB4NGIsMHgxOCwweDI2LDB4Y2YsMHgyMCwweGIxLDB4MDYsMHgyYywweGMxLDB4MGIsMHgzMiwweDAyLDB4MGUsMHgwOCwweGIzIH0sCisgIDE2LCAweDhhYzAsIDAsIHsweDg4LDB4MjQsMHgzMiwweDBhLDB4MzAsMHgxMiwweDg0LDB4MDgsMHg4MCwweDAwLDB4YTAsMHgzNCwweDI4LDB4MzAsMHgwMiwweDE4IH0sCisgIDE2LCAweDhhZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4YmMsMHgwMCwweGZmLDB4MDAsMHhiNiwweDQwIH0sCisgIDE2LCAweDhhZTAsIDAsIHsweDJjLDB4ZjQsMHg0MywweGZjLDB4MDEsMHhkZiwweDAwLDB4M2EsMHgwMCwweDAzLDB4OTIsMHgwMywweGZmLDB4ODgsMHhmOSwweDAwIH0sCisgIDE2LCAweDhhZjAsIDAsIHsweDJmLDB4YzAsMHgxYiwweDBlLDB4NGIsMHgyZSwweDkwLDB4ZmIsMHhlMCwweDMwLDB4MzIsMHgwYiwweDk4LDB4MDIsMHhlYywweDA4IH0sCisgIDE2LCAweDhiMDAsIDAsIHsweDZiLDB4YzAsMHgzMiwweGMwLDB4MDgsMHhmMCwweDA5LDB4M2UsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhiMTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZjMsMHgwMCwweDNhLDB4YzAsMHgwZiwweGIwLDB4MDEsMHg2YywweDAwLDB4ZmIsMHgwMCwweDNhIH0sCisgIDE2LCAweDhiMjAsIDAsIHsweDEwLDB4MGYsMHhiNCwweDAzLDB4ZWMsMHgwMCwweGYwLDB4MDAsMHgzYywweGMwLDB4MGYsMHg4MCwweDBiLDB4YWQsMHgyMCwweGZiIH0sCisgIDE2LCAweDhiMzAsIDAsIHsweDQwLDB4M2UsMHgxMCwweDA3LDB4YTgsMHg2MywweGUwLDB4MDAsMHhmYiwweDgwLDB4M2UsMHhkOCwweDBmLDB4YjAsMHgwMywweGUwIH0sCisgIDE2LCAweDhiNDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHg3MiwweDAwIH0sCisgIDE2LCAweDhiNTAsIDAsIHsweDBmLDB4ZjAsMHgyMywweGZjLDB4MDAsMHhkZiwweDAwLDB4M2YsMHg0MCwweDBmLDB4YzAsMHgwMywweGRjLDB4MDAsMHg4ZiwweDAwIH0sCisgIDE2LCAweDhiNjAsIDAsIHsweDMzLDB4YzEsMHgwYywweGMwLDB4MDMsMHhiZSwweDAwLDB4ZmYsMHg5MCwweDNiLDB4MjgsMHgwZSwweDU5LDB4MDMsMHgyZSwweDAwIH0sCisgIDE2LCAweDhiNzAsIDAsIHsweDdiLDB4MDAsMHgzMiwweGM0LDB4MGYsMHhiMCwweDAzLDB4ZDAsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhiODAsIDAsIHsweGMxLDB4MDQsMHg2YywweDAwLDB4YmIsMHgwMCwweDYyLDB4YTAsMHgwZiwweGIwLDB4MDIsMHhlYywweDA5LDB4OGIsMHgwMCwweDJlIH0sCisgIDE2LCAweDhiOTAsIDAsIHsweDMwLDB4MGIsMHhhOCwweDAzLDB4YWMsMHgwMCwweGZhLDB4YzEsMHgyMiwweGMxLDB4MDgsMHg4YywweDAyLDB4MmMsMHgwMCwweGIzIH0sCisgIDE2LCAweDhiYTAsIDAsIHsweDgxLDB4MmEsMHgwMCwweDBkLDB4ODgsMHhiMiwweDIyLDB4MDAsMHhiMywweGMwLDB4MjIsMHhjOCwweDBiLDB4YjAsMHg0MiwweDYxIH0sCisgIDE2LCAweDhiYjAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4NmMsMHgwMCwweGJiLDB4MDEsMHgyMiwweDYyIH0sCisgIDE2LCAweDhiYzAsIDAsIHsweDBiLDB4YjAsMHgwMiwweGVjLDB4MDQsMHg4YiwweDAwLDB4MmUsMHhhMiwweDQ5LDB4ODgsMHgyNiwweGVjLDB4MDAsMHhhOCwweDgwIH0sCisgIDE2LCAweDhiZDAsIDAsIHsweDIyLDB4YzAsMHgyOCwweDgyLDB4MGEsMHhhYywweGEwLDB4YmIsMHgwOCwweDIyLDB4YzAsMHgwOCwweDgwLDB4MGEsMHgyOCwweDg0IH0sCisgIDE2LCAweDhiZTAsIDAsIHsweGI5LDB4YzAsMHhhMiwweDAwLDB4MGIsMHhiMCwweDAyLDB4ZTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhiZjAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAwLDB4YjMsMHgxMCwweDIwLDB4NDgsMHgwYSwweDMyLDB4MDIsMHhjYywweDgwLDB4ODMsMHgwMSwweDI0IH0sCisgIDE2LCAweDhjMDAsIDAsIHsweDAwLDB4MGIsMHgwMiwweDA2LDB4OGMsMHg2MCwweGEwLDB4MjAsMHgyMCwweGM4LDB4MDgsMHgwMSwweDAyLDB4MGMsMHgwMCwweGIzIH0sCisgIDE2LCAweDhjMTAsIDAsIHsweDAwLDB4MjgsMHgwMCwweDA5LDB4MjAsMHgwMiwweDA4LDB4ODAsMHhiMSwweDAwLDB4YTAsMHg4MCwweDBiLDB4MzAsMHgwMiwweDQyIH0sCisgIDE2LCAweDhjMjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA5LDB4NmMsMHgwMCwweGZmLDB4MDAsMHhhMiwweDBlIH0sCisgIDE2LCAweDhjMzAsIDAsIHsweDBiLDB4ZjEsMHgwMywweGZjLDB4MDgsMHhjZiwweDIwLDB4M2UsMHhjMCwweDBmLDB4ODAsMHgwMywweGZjLDB4ODQsMHhhOCwweDIwIH0sCisgIDE2LCAweDhjNDAsIDAsIHsweGIyLDB4YzgsMHg4YywweDgwLDB4MDMsMHhhYywweDQ0LDB4ZmIsMHg3MCwweDNhLDB4YzAsMHgwZSwweDkwLDB4MDMsMHgyYywweGE0IH0sCisgIDE2LCAweDhjNTAsIDAsIHsweGZiLDB4MDAsMHhiMiwweDQwLDB4MGYsMHhiMCwweDAzLDB4YzAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhjNjAsIDAsIHsweGEwLDB4MWQsMHhmYywweDAwLDB4ZmYsMHgyNiwweDNlLDB4MDAsMHgwZiwweGI2LDB4MTMsMHhlZCwweDAwLDB4ZmIsMHgxMCwweDNmIH0sCisgIDE2LCAweDhjNzAsIDAsIHsweDAwLDB4MGYsMHhjMSwweDEzLDB4YWMsMHg4MCwweGY4LDB4MTIsMHgzZSwweGM2LDB4NGYsMHg0MiwweDQzLDB4ZmMsMHgwNCwweGZmIH0sCisgIDE2LCAweDhjODAsIDAsIHsweDMxLDB4M2YsMHgwMCwweDBmLDB4ZjAsMHgwMywweGVjLDB4MDAsMHhmZiwweDAwLDB4YmYsMHhjMCwweDhmLDB4ZjAsMHgwMywweGU4IH0sCisgIDE2LCAweDhjOTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAxLDB4ZmMsMHg0MCwweGZjLDB4ODAsMHgzNiwweGM4IH0sCisgIDE2LCAweDhjYTAsIDAsIHsweDBmLDB4MDksMHgwMywweGMyLDB4MDAsMHhmOCwweGMwLDB4MzMsMHhjYywweDJjLDB4NGMsMHgwMywweDYzLDB4OTAsMHhlMCwweDkwIH0sCisgIDE2LCAweDhjYjAsIDAsIHsweDNhLDB4YzAsMHgwZCwweDUwLDB4MGIsMHgzYywweDA0LDB4ZGYsMHg2NCwweDNmLDB4YzgsMHg4ZCwweGYxLDB4NDMsMHgyYywweDAwIH0sCisgIDE2LCAweDhjYzAsIDAsIHsweGQ1LDB4MDAsMHgzMywweGMwLDB4NDUsMHhmMiwweDIzLDB4NzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhjZDAsIDAsIHsweDgwLDB4MTAsMHhlZCwweDgwLDB4YmEsMHgwMiwweDIxLDB4ZGUsMHg4YiwweDgyLDB4MjIsMHhlMCwweDIwLDB4YjAsMHgwMCwweDJiIH0sCisgIDE2LCAweDhjZTAsIDAsIHsweGVjLDB4MDksMHg4MCwweDAyLDB4ZTMsMHg0MCwweGJhLDB4MjAsMHgyZiwweGRjLDB4MDgsMHg5OCwweDEyLDB4MmMsMHgwMCwweDhiIH0sCisgIDE2LCAweDhjZjAsIDAsIHsweDUxLDB4MmEsMHhkMCwweDA4LDB4NzIsMHgyMiwweDJlLDB4MDAsMHg4ZCwweDgwLDB4MjEsMHhkMCwweDA4LDB4YjYsMHg4MiwweDIwIH0sCisgIDE2LCAweDhkMDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHg0MCwweGI5LDB4MjgsMHgyNCwweGMwIH0sCisgIDE2LCAweDhkMTAsIDAsIHsweDRhLDB4MTIsMHgxMiwweDg4LDB4ODUsMHhhOCwweDIwLDB4MjAsMHhjMCwweDBiLDB4MjIsMHgwMiwweGMwLDB4OTEsMHhhMSwweDAwIH0sCisgIDE2LCAweDhkMjAsIDAsIHsweDI4LDB4YzIsMHgwYiwweDAwLDB4MTIsMHg4YywweDQwLDB4YTMsMHgyMCwweDIwLDB4YzQsMHgwYiwweDMwLDB4MGEsMHgwYywweDExIH0sCisgIDE2LCAweDhkMzAsIDAsIHsweDk5LDB4MDAsMHgyMCwweGM1LDB4MDksMHgwMSwweDAyLDB4NjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhkNDAsIDAsIHsweGMwLDB4MTEsMHhhYywweDAwLDB4YjgsMHg4MCwweDIyLDB4YzAsMHgwYiwweDg4LDB4MDIsMHhlZSwweDAxLDB4YjgsMHhjMSwweDJhIH0sCisgIDE2LCAweDhkNTAsIDAsIHsweGMwLDB4MWIsMHhhOCwweDA2LDB4ZTIsMHgwMCwweGJiLDB4ODAsMHgyZSwweGMwLDB4OGEsMHg4MCwweDAyLDB4YWMsMHgwMCwweGFiIH0sCisgIDE2LCAweDhkNjAsIDAsIHsweDAwLDB4MmUsMHhjMCwweDBhLDB4YjAsMHgwMiwweDJjLDB4MDAsMHg5OSwweDAwLDB4MjQsMHhjMCwweDA4LDB4ODAsMHgwMiwweDMwIH0sCisgIDE2LCAweDhkNzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwMCwweGIwLDB4ODAsMHgzNiwweGMwIH0sCisgIDE2LCAweDhkODAsIDAsIHsweDBlLDB4YTgsMHgxMywweGUyLDB4ODUsMHhmMywweGMwLDB4MzIsMHhjMCwweDBlLDB4OWMsMHgyMywweGU3LDB4MjQsMHhlOCwweDgyIH0sCisgIDE2LCAweDhkOTAsIDAsIHsweDNhLDB4YzEsMHgwZiwweDk0LDB4MDMsMHhhYywweDAyLDB4ZWIsMHgwMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHgyZSwweDEwIH0sCisgIDE2LCAweDhkYTAsIDAsIHsweDUxLDB4MDAsMHhiMiwweGMwLDB4MGQsMHhiMCwweDAzLDB4NTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhkYjAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHg4ZiwweGQwLDB4MDMsMHhmMCwweDA0LDB4ZmQsMHgwNCwweDNmIH0sCisgIDE2LCAweDhkYzAsIDAsIHsweGMwLDB4NGMsMHhjMCwweDAzLDB4ZjAsMHgxMCwweGZjLDB4MDAsMHgxZiwweGMwLDB4MGQsMHhkMSwweDIzLDB4MWMsMHgwMCwweGM3IH0sCisgIDE2LCAweDhkZDAsIDAsIHsweDAwLDB4MzksMHhjMCwweDBkLDB4ZjAsMHg4MywweGZlLDB4NDQsMHhlZCwweDAwLDB4M2IsMHhjMCwweDBmLDB4NzQsMHgwMywweGY4IH0sCisgIDE2LCAweDhkZTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGY5LDB4MDEsMHhiYSwweGMxIH0sCisgIDE2LCAweDhkZjAsIDAsIHsweDBjLDB4YjAsMHgwMywweGExLDB4MDgsMHhmYSwweDAwLDB4MzAsMHhjOCwweDhmLDB4OTQsMHgwMywweDI1LDB4MDAsMHhmOSwweDAwIH0sCisgIDE2LCAweDhlMDAsIDAsIHsweDNjLDB4YzAsMHgwZiwweDA0LDB4ODMsMHhlYywweDAwLDB4ZmIsMHgwMCwweDNlLDB4ZTAsMHgwZiwweDcxLDB4MGIsMHgyYywweDQwIH0sCisgIDE2LCAweDhlMTAsIDAsIHsweGZkLDB4MDgsMHgzNywweGMwLDB4NGUsMHg5MSwweDAzLDB4OTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhlMjAsIDAsIHsweGM4LDB4MDUsMHgzYywweDAwLDB4YjksMHgwMCwweDIzLDB4YzAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDAwLDB4YzgsMHgwMCwweDM3IH0sCisgIDE2LCAweDhlMzAsIDAsIHsweGYwLDB4MGIsMHg4MCwweDAxLDB4NjQsMHgwMCwweDQ5LDB4MDIsMHgzMywweGMwLDB4ODQsMHg5YywweDAzLDB4M2MsMHgwMCwweGJmIH0sCisgIDE2LCAweDhlNDAsIDAsIHsweDAyLDB4MGYsMHhkMCwweDA4LDB4ZjQsMHgwMiwweDBlLDB4MTAsMHhiZCwweDgwLDB4MzMsMHhlMCwweDA4LDB4OTAsMHgwYSwweDMyIH0sCisgIDE2LCAweDhlNTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMCwweGIwLDB4MDYsMHgyMCwweGMwIH0sCisgIDE2LCAweDhlNjAsIDAsIHsweDA4LDB4MDAsMHg0MiwweDg0LDB4MDAsMHhhMCwweDAwLDB4MjAsMHhmMCwweDBiLDB4MDAsMHgyMiwweGNjLDB4MDAsMHg5MCwweDAwIH0sCisgIDE2LCAweDhlNzAsIDAsIHsweDI4LDB4YzAsMHgwMiwweDNkLDB4MDIsMHg4YywweDAwLDB4YjMsMHgwMCwweDJjLDB4YzIsMHg5YSwweDM4LDB4MDIsMHgwNiwweDA0IH0sCisgIDE2LCAweDhlODAsIDAsIHsweGIxLDB4MTIsMHgyMCwweGUwLDB4MDgsMHgzMCwweDAyLDB4MzgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhlOTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDAwLDB4YjYsMHg4MCwweDIxLDB4ZTAsMHgyOCwweGVhLDB4MDIsMHgzNiwweDgwLDB4ODYsMHg5MCwweDY1IH0sCisgIDE2LCAweDhlYTAsIDAsIHsweGUwLDB4MWIsMHhkYSwweDA2LDB4NWUsMHgwMSwweDllLDB4ODQsMHgyNSwweGVjLDB4MGEsMHg3OCwweDAyLDB4NWUsMHgwMCwweGI3IH0sCisgIDE2LCAweDhlYjAsIDAsIHsweDgwLDB4MmQsMHhlMCwweDA4LDB4NzksMHg0YSwweDE2LDB4NDAsMHhiZCwweDgwLDB4MjUsMHhlMCwweDA4LDB4MzgsMHgwMiwweDA4IH0sCisgIDE2LCAweDhlYzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweGZiLDB4MDAsMHgyOCwweGUwIH0sCisgIDE2LCAweDhlZDAsIDAsIHsweDA4LDB4MTgsMHgwMiwweDhhLDB4ODgsMHhhMSwweGEwLDB4MjAsMHhjMiwweDFmLDB4MmEsMHgyMywweGU2LDB4YzgsMHhmMCwweGMwIH0sCisgIDE2LCAweDhlZTAsIDAsIHsweDNhLDB4ZWQsMHg0ZSwweDM0LDB4MDIsMHg4YywweDA4LDB4ZjMsMHg4MSwweDFlLDB4YzAsMHgwZSwweDMwLDB4MDMsMHgwZSwweGMwIH0sCisgIDE2LCAweDhlZjAsIDAsIHsweGYxLDB4MDAsMHhiMCwweGNhLDB4MGUsMHgyMSwweDAzLDB4OTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhmMDAsIDAsIHsweDQwLDB4MWQsMHhiYywweDA4LDB4ZmUsMHgxMCwweDNmLDB4ZDIsMHgwZiwweGUwLDB4MDMsMHhlYywweDA0LDB4ZmYsMHgxNCwweDdlIH0sCisgIDE2LCAweDhmMTAsIDAsIHsweGMwLDB4MGYsMHhiMSwweDIzLDB4ZmMsMHgwMSwweGVlLDB4MDAsMHgzYSwweGM0LDB4MGQsMHhiMCwweDEzLDB4YmMsMHgwMCwweGZmIH0sCisgIDE2LCAweDhmMjAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBlLDB4ZjAsMHg4MywweGZjLDB4MGMsMHhmZCwweDEwLDB4M2IsMHhjMCwweDJmLDB4ZTEsMHgwMywweGQwIH0sCisgIDE2LCAweDhmMzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHg0MCwweGYwLDB4ODAsMHgzMiwweGQwIH0sCisgIDE2LCAweDhmNDAsIDAsIHsweDBjLDB4YTAsMHgwMywweDZjLDB4MDAsMHhmMywweDgwLDB4MzIsMHhkYSwweDBmLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmYiwweDAwIH0sCisgIDE2LCAweDhmNTAsIDAsIHsweDNlLDB4Y2MsMHg0YywweDk4LDB4MTMsMHgyYywweDEwLDB4ZmIsMHgwNCwweDNlLDB4YzQsMHgwYywweGYyLDB4ODMsMHhhNiwweDEwIH0sCisgIDE2LCAweDhmNjAsIDAsIHsweGRkLDB4MjAsMHgzZiwweGQxLDB4MGMsMHhiMCwweDAzLDB4ZWEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhmNzAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDgwLDB4YjcsMHgwMCwweDIxLDB4YzgsMHgwYywweDcwLDB4MDIsMHhkYywweDA4LDB4YjcsMHgwMCwweDIxIH0sCisgIDE2LCAweDhmODAsIDAsIHsweGM4LDB4MGUsMHg3MCwweDIyLDB4ZDgsMHgwMCwweGI3LDB4MDAsMHgyYywweGMyLDB4MGEsMHg3MCwweDBhLDB4MWYsMHgwOCwweGI3IH0sCisgIDE2LCAweDhmOTAsIDAsIHsweDAwLDB4MzksMHhjOCwweDBhLDB4NzAsMHgwMiwweDE0LDB4MDAsMHhjNSwweDY5LDB4MmMsMHhjYSwweDJhLDB4NzAsMHgwMiwweGQyIH0sCisgIDE2LCAweDhmYTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgwMCwweGJmLDB4ODEsMHg2NCwweGUxIH0sCisgIDE2LCAweDhmYjAsIDAsIHsweDA4LDB4NzgsMHgwMiwweDVhLDB4MDEsMHhiZiwweDgwLDB4MjEsMHhlYywweDRiLDB4NzgsMHg0NiwweDlmLDB4MDgsMHgzNywweDgwIH0sCisgIDE2LCAweDhmYzAsIDAsIHsweDJkLDB4ZTgsMHg4OCwweDE4LDB4MDIsMHgxZSwweDgxLDB4YjcsMHhiMCwweDJkLDB4ZTAsMHgwOSwweDdhLDB4MDIsMHg4ZSwweDAwIH0sCisgIDE2LCAweDhmZDAsIDAsIHsweDk1LDB4YTAsMHgyZCwweGU0LDB4MDgsMHg3OCwweDAyLDB4ZjAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhmZTAsIDAsIHsweDQ4LDB4MTQsMHhlYywweDAwLDB4YjMsMHg2MCwweDIwLDB4YzAsMHgwOCwweGI2LDB4MDIsMHhjYywweDAwLDB4YjMsMHgwMSwweDIwIH0sCisgIDE2LCAweDhmZjAsIDAsIHsweGMwLDB4OGEsMHhiMCwweDg2LDB4Y2YsMHgwMCwweGJiLDB4MTAsMHg2YywweGMxLDB4MGEsMHgzOCwweDAyLDB4MGMsMHgwMSwweGIzIH0sCisgIDE2LCAweDkwMDAsIDAsIHsweDAyLDB4MjgsMHhjMCwweDBiLDB4YjAsMHgwYSwweDBjLDB4MDAsMHg4MSwweDAwLDB4MmUsMHhjMCwweDBhLDB4YjQsMHg4MiwweGQyIH0sCisgIDE2LCAweDkwMTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGZlLDB4NDAsMHhiNiwweDgwIH0sCisgIDE2LCAweDkwMjAsIDAsIHsweDBjLDB4ZTQsMHgwMywweDc4LDB4ODAsMHhmZSwweDc0LDB4MzIsMHg4MCwweDBiLDB4ZTYsMHgwMywweGY5LDB4MDAsMHhmZSwweDAwIH0sCisgIDE2LCAweDkwMzAsIDAsIHsweDNlLDB4ODAsMHgwYywweGUwLDB4MDMsMHgyOCwweDAwLDB4ZmEsMHgwMCwweDNlLDB4ODAsMHg0ZCwweGEwLDB4MDMsMHhhOCwweDAwIH0sCisgIDE2LCAweDkwNDAsIDAsIHsweGRhLDB4MDQsMHgzZSwweDgwLDB4MGMsMHhlNCwweDAzLDB4ZmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkwNTAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgyZSwweDgwLDB4MjMsMHhlMCwweDAwLDB4ZjgsMHgwMSwweDNjIH0sCisgIDE2LCAweDkwNjAsIDAsIHsweDAwLDB4MGUsMHg4MCwweDAzLDB4ZTAsMHgyMCwweGY4LDB4MjAsMHgzZSwweDAxLDB4OGYsMHg4OSwweDAzLDB4ZTAsMHgwMCwweGY4IH0sCisgIDE2LCAweDkwNzAsIDAsIHsweDAwLDB4M2EsMHgxMCwweDBlLDB4ODAsMHgwMSwweGUwLDB4MDAsMHhlOCwweDQwLDB4N2UsMHgwMCwweDRmLDB4ODAsMHgwMywweGQyIH0sCisgIDE2LCAweDkwODAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMiwweGM5LDB4MDEsMHg3ZSwweDQwIH0sCisgIDE2LCAweDkwOTAsIDAsIHsweDJjLDB4OTAsMHgwYiwweDI0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg2OCwweDA1LDB4OTAsMHgxMywweGE0LDB4MDQsMHhkOSwweDAwIH0sCisgIDE2LCAweDkwYTAsIDAsIHsweDMyLDB4NDEsMHgwZSwweDkxLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NjAsMHgwZSwweDkwLDB4MDMsMHgyNCwweDAwIH0sCisgIDE2LCAweDkwYjAsIDAsIHsweGYxLDB4MDAsMHgzMiwweDQwLDB4NjgsMHg5MCwweDQzLDB4ODIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkwYzAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHgwMCwweDZlLDB4NDAsMHgwOCwweDkwLDB4NDIsMHgyNCwweDAwLDB4YjksMHgwMCwweDJlIH0sCisgIDE2LCAweDkwZDAsIDAsIHsweDcwLDB4ODgsMHg5MCwweDAzLDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHg5OCwweDEyLDB4ZTQsMHgwMCwweGI5IH0sCisgIDE2LCAweDkwZTAsIDAsIHsweDAwLDB4MmUsMHg0MCwweDBhLDB4OTAsMHgwYSwweDI2LDB4MDAsMHhiOSwweDgwLDB4YTIsMHg0MCwweDA4LDB4OTAsMHgxMiwweDIwIH0sCisgIDE2LCAweDkwZjAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweDg5LDB4MDQsMHgyYywweDQwIH0sCisgIDE2LCAweDkxMDAsIDAsIHsweDA4LDB4OTAsMHgwMiwweDI0LDB4MDEsMHhiOSwweDAwLDB4MmEsMHg0MCwweDBiLDB4YjAsMHgwMiwweGE0LDB4MDEsMHhiOSwweDAwIH0sCisgIDE2LCAweDkxMTAsIDAsIHsweGUwLDB4NDAsMHgwYSwweDkwLDB4ODIsMHhhNCwweDAwLDB4YjksMHgwMCwweDJjLDB4NDgsMHgwYSwweDk4LDB4MDIsMHgyNCwweDgwIH0sCisgIDE2LCAweDkxMjAsIDAsIHsweDM5LDB4MjAsMHgyMiwweDQwLDB4MmEsMHg5MCwweDAyLDB4ODYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkxMzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4ODEsMHgwMCwweDJjLDB4NDgsMHgwOCwweDEwLDB4MTIsMHgwNCwweDEwLDB4YjEsMHgwNCwweDJjIH0sCisgIDE2LCAweDkxNDAsIDAsIHsweGQ4LDB4MGEsMHgxMCwweDAyLDB4MDQsMHgwMCwweGIxLDB4MDAsMHgyMCwweDQ4LDB4MDgsMHgxMCwweDAyLDB4YzQsMHg4MCwweGIxIH0sCisgIDE2LCAweDkxNTAsIDAsIHsweDIyLDB4MmMsMHg1MCwweDhhLDB4MzIsMHg4MiwweDA1LDB4YTAsMHhiMSwweDJhLDB4MjAsMHg0YSwweDBhLDB4MTIsMHg4MiwweDAyIH0sCisgIDE2LCAweDkxNjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg1MCwweGM4LDB4NTIsMHgyZSwweDE0IH0sCisgIDE2LCAweDkxNzAsIDAsIHsweDBjLDB4ODUsMHgwMywweDIxLDB4NDAsMHhmOCwweDUwLDB4M2EsMHgwMCwweDFmLDB4ODUsMHgwMywweGExLDB4NDAsMHhmOCwweDUwIH0sCisgIDE2LCAweDkxODAsIDAsIHsweDMyLDB4MTQsMHgwZSwweDgwLDB4MDMsMHhhMSwweDQwLDB4ZjgsMHg1MCwweDNjLDB4ODAsMHgwZSwweDAyLDB4MDMsMHgyMCwweDgwIH0sCisgIDE2LCAweDkxOTAsIDAsIHsweGZhLDB4MjAsMHgzMiwweDA4LDB4MGUsMHg4MiwweDEzLDB4YWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkxYTAsIDAsIHsweDk4LDB4MWQsMHhlNCwweDUwLDB4ZmQsMHgwMCwweDNlLDB4NDQsMHgwZiwweGQwLDB4MDMsMHhmNCwweDAwLDB4ZmQsMHgwMCwweDNlIH0sCisgIDE2LCAweDkxYjAsIDAsIHsweDQ0LDB4OGQsMHhkMCwweDAxLDB4YmQsMHgwMCwweGZkLDB4MDIsMHgzZSwweDQ0LDB4MGYsMHhkNCwweDAwLDB4ZTQsMHg0OCwweDc5IH0sCisgIDE2LCAweDkxYzAsIDAsIHsweDE0LDB4M2UsMHg1MCwweDBmLDB4OTIsMHhhMiwweGY0LDB4MDgsMHhmZCwweDAwLDB4M2UsMHg0YSwweDBkLDB4ZDIsMHg4MywweGU2IH0sCisgIDE2LCAweDkxZDAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZTcsMHgwMCwweGY5LDB4MTAsMHgzYSwweDZlIH0sCisgIDE2LCAweDkxZTAsIDAsIHsweDBjLDB4YjEsMHgwMywweGU0LDB4NDAsMHhmOSwweDQ0LDB4M2IsMHg2MSwweDhlLDB4OTQsMHgwMywweGU0LDB4MDAsMHhlOSwweDQwIH0sCisgIDE2LCAweDkxZjAsIDAsIHsweDMyLDB4NjYsMHgwZiwweGRhLDB4MGIsMHhhNywweDI4LDB4YzksMHhlMCwweDNmLDB4NjgsMHgwYywweGRhLDB4ODMsMHhiMywweDIwIH0sCisgIDE2LCAweDkyMDAsIDAsIHsweGVkLDB4YTAsMHgzMywweDc5LDB4MDgsMHhkOCwweDAzLDB4NDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkyMTAsIDAsIHsweDM4LDB4MTAsMHhlMiwweDAwLDB4YjgsMHhhMCwweDJlLDB4MzgsMHgwOCwweDhhLDB4MDIsMHhlMiwweDg4LDB4ZTgsMHg4MSwweDJlIH0sCisgIDE2LCAweDkyMjAsIDAsIHsweDE0LDB4MDksMHgwYSwweDAzLDB4ZTIsMHg4MCwweGI4LDB4ODAsMHgzMiwweDMwLDB4MGIsMHg4NSwweDAyLDB4MjEsMHgwMSwweGE4IH0sCisgIDE2LCAweDkyMzAsIDAsIHsweGY0LDB4MzgsMHgyYSwweDA4LDB4MGUsMHhjYSwweDIzLDB4OTAsMHhjOCwweDU0LDB4MzQsMHgzOCwweDA4LDB4OGEsMHg5MiwweDBlIH0sCisgIDE2LCAweDkyNDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzUsMHgwMCwweGIxLDB4MDAsMHgyOCwweDQwIH0sCisgIDE2LCAweDkyNTAsIDAsIHsweDE5LDB4MTAsMHgwMiwweGM0LDB4MDAsMHhiMSwweDIwLDB4MjgsMHg0MCwweDBiLDB4MTAsMHgwNiwweGM0LDB4MjAsMHhhMSwweGEyIH0sCisgIDE2LCAweDkyNjAsIDAsIHsweDZjLDB4NDgsMHgwYiwweDEwLDB4MDIsMHg4NCwweDA4LDB4ODEsMHgyMCwweDJjLDB4NTAsMHgwOSwweDEwLDB4MDIsMHhjNCwweDA0IH0sCisgIDE2LCAweDkyNzAsIDAsIHsweGIxLDB4MDAsMHgyNCwweDU4LDB4MDgsMHgzYywweDAyLDB4NDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkyODAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAxLDB4YjksMHgyMCwweDJjLDB4NDAsMHgwOSwweDkwLDB4MDIsMHhlNCwweDEwLDB4YTksMHg0MCwweDJlIH0sCisgIDE2LCAweDkyOTAsIDAsIHsweDQwLDB4MGIsMHg5MCwweDAyLDB4YTQsMHgwMCwweGIxLDB4MDEsMHgyYSwweDQwLDB4MGIsMHg5NCwweDAyLDB4MjQsMHgwMCwweGE5IH0sCisgIDE2LCAweDkyYTAsIDAsIHsweDAwLDB4MmEsMHg0MCwweDAxLDB4MTAsMHg1MiwweDY0LDB4MDAsMHg4OSwweDAwLDB4MjYsMHg0MCwweDAwLDB4OTgsMHgwMiwweDQ2IH0sCisgIDE2LCAweDkyYjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGY5LDB4NjEsMHgzYSwweDQwIH0sCisgIDE2LCAweDkyYzAsIDAsIHsweDBkLDB4OTAsMHg4MywweGU1LDB4MjAsMHhmOSwweDAxLDB4M2EsMHg0MCwweDJlLDB4OTAsMHgwMiwweGU0LDB4NDAsMHhlOSwweDAxIH0sCisgIDE2LCAweDkyZDAsIDAsIHsweDllLDB4NDAsMHgwZiwweDk0LDB4MDMsMHhhNCwweDAwLDB4ODksMHgwMCwweDNlLDB4NDAsMHgyZCwweDkwLDB4MDIsMHhlNiwweDA4IH0sCisgIDE2LCAweDkyZTAsIDAsIHsweGI5LDB4MDEsMHgzNiwweDQwLDB4MmMsMHg5MCwweDAxLDB4NjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkyZjAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgyZSwweDkwLDB4MDMsMHhlNCwweDgwLDB4ZjksMHgwMCwweDNjIH0sCisgIDE2LCAweDkzMDAsIDAsIHsweDQwLDB4MGMsMHg5YywweDIzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzNiwweDQwLDB4MGYsMHgxMCwweDQzLDB4ODQsMHgwMCwweGY5IH0sCisgIDE2LCAweDkzMTAsIDAsIHsweDAyLDB4M2UsMHg0MCwweDBlLDB4OTAsMHgwMywweDgwLDB4ODAsMHhmOSwweDAwLDB4M2MsMHg0MCwweDJmLDB4OTAsMHgwMywweDhhIH0sCisgIDE2LCAweDkzMjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGM4LDB4NDAsMHgzNiwweDAxIH0sCisgIDE2LCAweDkzMzAsIDAsIHsweDBkLDB4ODQsMHgwMywweGUxLDB4MDAsMHhlOCwweDQwLDB4M2UsMHgwOCwweDBjLDB4ODAsMHgwMywweGUxLDB4MDAsMHhmOCwweDAwIH0sCisgIDE2LCAweDkzNDAsIDAsIHsweDMyLDB4MDAsMHg4ZiwweDgwLDB4MDMsMHhhMCwweDEwLDB4ZjgsMHgwMCwweDMyLDB4MDQsMHgwZSwweDgwLDB4ODMsMHg2MCwweDAwIH0sCisgIDE2LCAweDkzNTAsIDAsIHsweGY4LDB4MDAsMHgzZSwweDAwLDB4MGMsMHgwMCwweDAzLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkzNjAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAwLDB4OGEsMHgwMSwweDIyLDB4ODAsMHgwOCwweGEwLDB4MjQsMHhlOCwweDAwLDB4MGEsMHgwMCwweDJmIH0sCisgIDE2LCAweDkzNzAsIDAsIHsweDgwLDB4MWEsMHhhMCwweDAyLDB4MjgsMHgwMCwweGJhLDB4MDAsMHgxNiwweDgwLDB4MGIsMHhlMCwweDAzLDB4MjgsMHgwOCwweGVhIH0sCisgIDE2LCAweDkzODAsIDAsIHsweDAwLDB4MzMsMHg5MCwweDA4LDB4ZWMsMHgxYiwweDIyLDB4ODAsMHhjNiwweDE0LDB4MmYsMHg5MSwweDA4LDB4YTAsMHg0MywweDRhIH0sCisgIDE2LCAweDkzOTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweDkzLDB4MDAsMHgyNCwweGMwIH0sCisgIDE2LCAweDkzYTAsIDAsIHsweDA5LDB4MzAsMHgxMiwweGNjLDB4MDQsMHhhMywweDA0LDB4NmMsMHhjMCwweDA5LDB4MzAsMHgwMiwweDhjLDB4MDAsMHhiMywweDAwIH0sCisgIDE2LCAweDkzYjAsIDAsIHsweDJjLDB4YzAsMHgxMywweDMwLDB4MDIsMHg4YywweDAwLDB4YjMsMHgwMCwweGU2LDB4YjgsMHgwYSwweDM4LDB4MDIsMHg0NCwweDA4IH0sCisgIDE2LCAweDkzYzAsIDAsIHsweDgyLDB4NTAsMHgyYywweGQyLDB4M2EsMHgzMCwweDAyLDB4OGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkzZDAsIDAsIHsweGEwLDB4MDEsMHgwZSwweDgwLDB4OTcsMHhiNCwweDIxLDB4YzQsMHg0OSwweDcxLDB4MDIsMHhkZSwweDgxLDB4ODcsMHgyMSwweDJkIH0sCisgIDE2LCAweDkzZTAsIDAsIHsweGQwLDB4MGIsMHg3YiwweDAyLDB4MWMsMHgwMSwweGJmLDB4MjAsMHgyOSwweGM0LDB4MGIsMHgzMCwweDAyLDB4NWMsMHgwMCwweGE3IH0sCisgIDE2LCAweDkzZjAsIDAsIHsweGExLDB4MjEsMHhjMCwweDRhLDB4NzAsMHg4YSwweDBjLDB4ODEsMHg4NCwweDAwLDB4MmQsMHhkMCwweDBhLDB4NTAsMHgwMiwweGU4IH0sCisgIDE2LCAweDk0MDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHg4MiwweGRmLDB4YTAsMHgzNCwweGVjIH0sCisgIDE2LCAweDk0MTAsIDAsIHsweDBkLDB4NzksMHgwMiwweGZlLDB4ODAsMHhlNywweGU4LDB4MmYsMHhhMCwweDA5LDB4N2EsMHgwMiwweDllLDB4MDAsMHhmNywweGEyIH0sCisgIDE2LCAweDk0MjAsIDAsIHsweDI1LDB4ZWEsMHgwYiwweDQ4LDB4MDMsMHg5ZSwweDA0LDB4ZmYsMHhjMCwweDY1LDB4ZTQsMHgwZSwweDY4LDB4MDMsMHg1ZiwweDAwIH0sCisgIDE2LCAweDk0MzAsIDAsIHsweGU0LDB4ODAsMHgzZCwweGUwLDB4MGUsMHhmOCwweDAzLDB4YWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk0NDAsIDAsIHsweDA4LDB4MWQsMHhhYywweDQ4LDB4ZWIsMHgwNSwweDNlLDB4ZDksMHgwZSwweGIyLDB4MDMsMHhlYywweDAwLDB4ZmIsMHg2MCwweDNlIH0sCisgIDE2LCAweDk0NTAsIDAsIHsweGMwLDB4MGUsMHhiMiwweDgzLDB4YWMsMHgwMCwweGYzLDB4NTAsMHhhNiwweGMwLDB4NGYsMHhiMCwweDAzLDB4YWMsMHgwMCwweGZiIH0sCisgIDE2LCAweDk0NjAsIDAsIHsweDgwLDB4M2YsMHhkOCwweDBkLDB4YTAsMHgwMywweGVjLDB4MGEsMHhmOSwweDAwLDB4M2UsMHhjMCwweDBkLDB4OTAsMHgwMywweDQyIH0sCisgIDE2LCAweDk0NzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHgwMCwweGJiLDB4OTAsMHgzZSwweGUwIH0sCisgIDE2LCAweDk0ODAsIDAsIHsweDA4LDB4MzksMHgwMywweDllLDB4MjAsMHhjZiwweDgyLDB4NzcsMHhlMCwweDFmLDB4ZjgsMHgwMywweGVlLDB4MDAsMHhmZiwweGMwIH0sCisgIDE2LCAweDk0OTAsIDAsIHsweDNmLDB4ZTUsMHgwZCwweGY5LDB4MDMsMHhlZSwweDAwLDB4ZmIsMHg5MCwweDM3LDB4YTAsMHgwOCwweGY4LDB4MGYsMHgxZSwweDAwIH0sCisgIDE2LCAweDk0YTAsIDAsIHsweGNjLDB4OTQsMHgzMywweDYwLDB4MGQsMHhmOCwweDAzLDB4YzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk0YjAsIDAsIHsweGE4LDB4MTEsMHg5YywweDAwLDB4YjcsMHg5MCwweDJmLDB4ZTQsMHgwOCwweDdhLDB4MDIsMHgxZSwweDAwLDB4OGYsMHgxMiwweDI1IH0sCisgIDE2LCAweDk0YzAsIDAsIHsweGQ4LDB4MGIsMHhiYiwweDAyLDB4MWUsMHgwMCwweGI3LDB4MDAsMHgyZCwweGU4LDB4MDgsMHg3ZCwweDgyLDB4ZGUsMHg0MCwweGJiIH0sCisgIDE2LCAweDk0ZDAsIDAsIHsweGEwLDB4MjcsMHg5MCwweDBhLDB4NzYsMHgwMiwweDVjLDB4ODAsMHg4NSwweDAwLDB4MzcsMHhjNCwweDRkLDB4NzEsMHgwMywweGVhIH0sCisgIDE2LCAweDk0ZTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweGI3LDB4MjAsMHgyZCwweGMwIH0sCisgIDE2LCAweDk0ZjAsIDAsIHsweDI5LDB4ZjIsMHgyMiwweGJjLDB4ODAsMHg5NywweDAwLDB4MjUsMHg0MSwweDBiLDB4NzAsMHgxMiwweDljLDB4MDAsMHhiNywweDA4IH0sCisgIDE2LCAweDk1MDAsIDAsIHsweDI5LDB4YzAsMHgwOCwweDQyLDB4MTIsMHhkYywweDQwLDB4YjcsMHgwMCwweDI5LDB4YzAsMHgwOSwweDYwLDB4MjIsMHhkYywweDEwIH0sCisgIDE2LCAweDk1MTAsIDAsIHsweDgwLDB4MDAsMHgyMSwweDQwLDB4MDksMHg3MCwweDAyLDB4YzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk1MjAsIDAsIHsweDIwLDB4MTQsMHhjYywweDAwLDB4YjMsMHhjMCwweDJlLDB4YzAsMHgwOCwweDM0LDB4ODIsMHgyZCwweDAwLDB4OTMsMHgwMCwweDI0IH0sCisgIDE2LCAweDk1MzAsIDAsIHsweGMwLDB4MGIsMHgzMCwweDAyLDB4MGYsMHg4MCwweDEzLDB4MDAsMHgyYywweGMwLDB4MGEsMHgzNCwweGEyLDB4ZWMsMHgwMCwweGIzIH0sCisgIDE2LCAweDk1NDAsIDAsIHsweDAwLDB4MjgsMHhjMCwweDBiLDB4MDAsMHgwMiwweGNjLDB4MDAsMHg4MSwweDAwLDB4MjAsMHhjMCwweDA5LDB4MzAsMHgwMiwweDg5IH0sCisgIDE2LCAweDk1NTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4YmMsMHgwMCwweGZmLDB4ZTAsMHgzZiwweGMwIH0sCisgIDE2LCAweDk1NjAsIDAsIHsweDBjLDB4ZjQsMHg4MywweGJkLDB4MDAsMHhkZiwweDA4LDB4MzYsMHg0MCwweDBiLDB4NzUsMHg0MiwweGZjLDB4MjAsMHhmZiwweDgwIH0sCisgIDE2LCAweDk1NzAsIDAsIHsweDNiLDB4YzAsMHgyYywweDNjLDB4MDMsMHhmYywweDAwLDB4YmYsMHgwMCwweGJlLDB4YzAsMHg4ZCwweDkwLDB4MGIsMHhhYywweDAyIH0sCisgIDE2LCAweDk1ODAsIDAsIHsweGNhLDB4MDAsMHgyMiwweDgwLDB4MGQsMHhiMCwweDAyLDB4ZWEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk1OTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwOCwweDFlLDB4YzAsMHgwZiwweGIwLDB4MTMsMHhlYywweDAwLDB4ZWIsMHgwMCwweDNhIH0sCisgIDE2LCAweDk1YTAsIDAsIHsweDEwLDB4MGYsMHhiMCwweDIzLDB4YWMsMHgwMSwweGZiLDB4MDAsMHgzZSwweGMwLDB4M2MsMHg4NCwweDAzLDB4ZWMsMHgwMCwweGZiIH0sCisgIDE2LCAweDk1YjAsIDAsIHsweDAwLDB4MjYsMHg0MCwweDBlLDB4OTQsMHgwYiwweDJjLDB4MDAsMHhmOSwweDQwLDB4M2UsMHg5MCwweDBlLDB4OTAsMHgxMywweGUwIH0sCisgIDE2LCAweDk1YzAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZGMsMHgwMiwweGNmLDB4MDAsMHgzZiwweGMwIH0sCisgIDE2LCAweDk1ZDAsIDAsIHsweDBkLDB4ZjAsMHgwYiwweDNjLDB4MjAsMHhjZiwweDAwLDB4M2QsMHgwMCwweDBlLDB4ZjAsMHgwNywweDljLDB4MDEsMHhjZiwweDAyIH0sCisgIDE2LCAweDk1ZTAsIDAsIHsweDNlLDB4YzAsMHgwZiwweGM0LDB4MDMsMHgzYywweDAwLDB4Y2YsMHgwMCwweDBmLDB4YzAsMHgwZSwweDQ0LDB4MDMsMHgxZiwweDAyIH0sCisgIDE2LCAweDk1ZjAsIDAsIHsweGNjLDB4MDAsMHgzZiwweDgwLDB4MmMsMHg3MCwweDAzLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk2MDAsIDAsIHsweDgxLDB4MDQsMHg2YywweDAwLDB4OGIsMHgwMiwweDJlLDB4YzAsMHgwZCwweGIwLDB4MDIsMHgyYywweDAwLDB4YWIsMHgwMCwweDA2IH0sCisgIDE2LCAweDk2MTAsIDAsIHsweDIwLDB4MDgsMHhiMCwweDAzLDB4ZmMsMHgwMCwweGFiLDB4MDAsMHgyZSwweGMwLDB4MGYsMHg4MCwweDA2LDB4YmMsMHgwMCwweGFiIH0sCisgIDE2LCAweDk2MjAsIDAsIHsweDA0LDB4M2EsMHhmMCwweDBjLDB4ODgsMHgwMiwweDJjLDB4MDAsMHhjOSwweDgwLDB4M2EsMHg5MiwweDA4LDB4OTAsMHgwYSwweGEwIH0sCisgIDE2LCAweDk2MzAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweGFiLDB4MDAsMHgyZSwweGMwIH0sCisgIDE2LCAweDk2NDAsIDAsIHsweDA5LDB4MzAsMHgwMiwweDJjLDB4MDAsMHg4YiwweDAwLDB4MjYsMHg2MCwweDBiLDB4YjAsMHgwMiwweGFjLDB4MDAsMHg4YiwweDAwIH0sCisgIDE2LCAweDk2NTAsIDAsIHsweDZlLDB4YzAsMHgwYiwweGIwLDB4NDIsMHgyYywweDAwLDB4OWIsMHgwMCwweDRjLDB4ZTAsMHgwYSwweDkwLDB4MjIsMHgyYywweDAwIH0sCisgIDE2LCAweDk2NjAsIDAsIHsweDhhLDB4YzIsMHgyYywweDQwLDB4MDgsMHhiMCwweDQyLDB4MjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk2NzAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAwLDB4ODMsMHgwZCwweDJjLDB4YzYsMHgwOSwweDMxLDB4MDIsMHgwZCwweDgxLDB4YTMsMHgxMSwweDI0IH0sCisgIDE2LCAweDk2ODAsIDAsIHsweDAwLDB4OGEsMHhiMSwweGUyLDB4NGMsMHg4MCwweGEzLDB4MDAsMHgyYywweGNjLDB4MGIsMHgwMiwweDAyLDB4OGMsMHg4MCwweGEzIH0sCisgIDE2LCAweDk2OTAsIDAsIHsweDQ4LDB4MDgsMHhjMCwweDA4LDB4MDAsMHgwYSwweDBkLDB4MDAsMHg4MSwweDAwLDB4MjgsMHhjMCwweDA4LDB4MzAsMHgwMiwweDgyIH0sCisgIDE2LCAweDk2YTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGNiLDB4MjAsMHgyZiwweGM4IH0sCisgIDE2LCAweDk2YjAsIDAsIHsweDhkLDB4ZjYsMHgxMywweDJkLDB4YjAsMHg4ZiwweDAwLDB4MzYsMHg0MCwweDBmLDB4ZjAsMHgwMiwweGFkLDB4YTgsMHg4ZiwweDEwIH0sCisgIDE2LCAweDk2YzAsIDAsIHsweDNmLDB4Y2EsMHgwYiwweDgwLDB4OTIsMHgyYywweDEwLDB4ZGIsMHg0MCwweDNmLDB4YzAsMHgwZSwweDAwLDB4MDMsMHgyZCwweDA0IH0sCisgIDE2LCAweDk2ZDAsIDAsIHsweGM4LDB4MDIsMHgzZSwweDQwLDB4MGMsMHhiMCwweDAzLDB4MDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk2ZTAsIDAsIHsweGEwLDB4MWQsMHhmYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzgsMHgwZSwweGYxLDB4MDMsMHhlYywweDg0LDB4ZmYsMHgyMCwweDM3IH0sCisgIDE2LCAweDk2ZjAsIDAsIHsweDAwLDB4MGQsMHhiMiwweDAzLDB4YmMsMHhhMCwweGZmLDB4MDAsMHgzZSwweGM5LDB4MGUsMHg4MCwweDAzLDB4ZmQsMHgxMSwweGZmIH0sCisgIDE2LCAweDk3MDAsIDAsIHsweDAwLDB4M2IsMHhjMCwweDBlLDB4YzAsMHgwMywweGZjLDB4ODAsMHhlZCwweDAwLDB4M2IsMHhjMCwweDBmLDB4ZjAsMHg0MywweDY4IH0sCisgIDE2LCAweDk3MTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAxLDB4ZmMsMHg5MCwweGNjLDB4OTIsMHgzYiwweGM4IH0sCisgIDE2LCAweDk3MjAsIDAsIHsweDBkLDB4ZjAsMHg4MywweDczLDB4MTAsMHhmZiwweDI4LDB4MzcsMHhjYSwweDRmLDB4YjIsMHgwMywweGZjLDB4MDAsMHhkZiwweDIwIH0sCisgIDE2LCAweDk3MzAsIDAsIHsweGIzLDB4YzQsMHgwZCwweDY4LDB4NDMsMHhmZSwweDE0LDB4Y2IsMHg4NCwweDMzLDB4ZTAsMHgwZCwweDc4LDB4MDMsMHhiZSwweDAwIH0sCisgIDE2LCAweDk3NDAsIDAsIHsweGZmLDB4ODAsMHgzNywweGEwLDB4MGMsMHhmMywweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk3NTAsIDAsIHsweDgwLDB4MDAsMHhmYywweDQ4LDB4ODIsMHgyMSwweDAzLDB4ZjQsMHgwZiwweGY2LDB4NDIsMHgyMCwweDA0LDB4OGEsMHg2MCwweDJiIH0sCisgIDE2LCAweDk3NjAsIDAsIHsweGRhLDB4MGIsMHhmOSwweDAyLDB4M2YsMHgwNCwweDhmLDB4NTIsMHgyMywweGQ1LDB4NGQsMHg4OCwweDAyLDB4YWUsMHgwMCwweGRiIH0sCisgIDE2LCAweDk3NzAsIDAsIHsweDgwLDB4MzYsMHhjMCwweDA4LDB4ODAsMHgwMiwweDIwLDB4MDQsMHhiOCwweDAwLDB4MjIsMHg2MCwweDBkLDB4NzQsMHgwMywweGUwIH0sCisgIDE2LCAweDk3ODAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHhhMCwweDgwLDB4MDEsMHgwOCwweGMwIH0sCisgIDE2LCAweDk3OTAsIDAsIHsweDRiLDB4MzAsMHg4MiwweDQyLDB4OTAsMHhhMywweDA4LDB4MmMsMHhjOCwweDFhLDB4MzAsMHgyMiwweDhkLDB4MDAsMHg5MywweDAwIH0sCisgIDE2LCAweDk3YTAsIDAsIHsweDI0LDB4YzgsMHgwOSwweGEwLDB4MTIsMHgwYywweDA0LDB4YWIsMHgwMCwweDYyLDB4YzAsMHgwOSwweGIwLDB4MDIsMHhjYywweDAwIH0sCisgIDE2LCAweDk3YjAsIDAsIHsweGIzLDB4MDAsMHgyOCwweDgwLDB4MDgsMHgzNiwweDA2LDB4YTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk3YzAsIDAsIHsweGMwLDB4MTUsMHhhYywweDAwLDB4ODgsMHgwOCwweDIyLDB4YzAsMHgwYSwweDMwLDB4MWEsMHgwMCwweDExLDB4ODIsMHgwMCwweDBhIH0sCisgIDE2LCAweDk3ZDAsIDAsIHsweGMwLDB4MGIsMHhiMCwweDQyLDB4MmMsMHgwMCwweDhiLDB4MDAsMHgyNiwweGMwLDB4MDksMHg5MSwweDAyLDB4ZWMsMHgyMCwweGJiIH0sCisgIDE2LCAweDk3ZTAsIDAsIHsweDI4LDB4NjYsMHhjMCwweDA4LDB4ODAsMHgwMiwweDYwLDB4MDAsMHhiOCwweDAwLDB4MmEsMHg0MCwweDgxLDB4YjAsMHgwNiwweGY4IH0sCisgIDE2LCAweDk3ZjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE1LDB4ZWMsMHgwMiwweGM4LDB4MDQsMHgzYSwweGMwIH0sCisgIDE2LCAweDk4MDAsIDAsIHsweDg5LDB4YjAsMHgwMywweDY4LDB4MDAsMHhlOSwweGMxLDB4MWUsMHhjMSwweDBlLDB4MzAsMHgwMywweGVjLDB4MDAsMHhkYiwweDAwIH0sCisgIDE2LCAweDk4MTAsIDAsIHsweDM2LDB4YzEsMHgwZCwweDAwLDB4MjMsMHgwZSwweDAwLDB4ZWIsMHg4MCwweDMyLDB4YzgsMHhjZCwweDMwLDB4MzIsMHhlYywweDA4IH0sCisgIDE2LCAweDk4MjAsIDAsIHsweGYzLDB4MDAsMHgzYywweDgwLDB4MGMsMHhiMCwweDA2LDB4ODAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk4MzAsIDAsIHsweGUwLDB4MDEsMHg5YywweDAwLDB4N2MsMHgwMCwweDNmLDB4YzAsMHgwYiwweGIwLDB4NDMsMHhmZCwweDAwLDB4YmUsMHhjNCwweDM3IH0sCisgIDE2LCAweDk4NDAsIDAsIHsweGMwLDB4MWYsMHhmMCwweDAzLDB4NWMsMHgwMCwweGZmLDB4MDEsMHgzYiwweGMwLDB4MGUsMHhjOCwweDAzLDB4YmYsMHgyMCwweGRmIH0sCisgIDE2LCAweDk4NTAsIDAsIHsweDAwLDB4M2YsMHhkMCwweDBmLDB4YzAsMHgxMywweGIwLDB4MDAsMHg3YywweDAwLDB4YjcsMHg0MCwweDBmLDB4ZjAsMHgxYiwweGIwIH0sCisgIDE2LCAweDk4NjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwYywweGQ4LDB4NDEsMHgzMiwweGMwIH0sCisgIDE2LCAweDk4NzAsIDAsIHsweDBlLDB4YjAsMHgwNywweGE4LDB4MDEsMHg2OSwweDQwLDB4YjIsMHhjMCwweDhkLDB4YjAsMHhhMywweGVjLDB4MDgsMHhmMywweDAwIH0sCisgIDE2LCAweDk4ODAsIDAsIHsweDMyLDB4YzAsMHgwZiwweDgwLDB4MDMsMHhlZCwweDAwLDB4ZmIsMHg0OCwweDNhLDB4YzAsMHgwZCwweGIwLDB4ODMsMHgyYywweDAwIH0sCisgIDE2LCAweDk4OTAsIDAsIHsweGZiLDB4MjAsMHgzZSwweDgwLDB4MGYsMHg3MCwweDIzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk4YTAsIDAsIHsweGM4LDB4MDUsMHgzYywweDAwLDB4ODgsMHgwMCwweDIzLDB4YzAsMHgwOCwweGYwLDB4MDYsMHgyYywweDEwLDB4ODgsMHg1MSwweDM3IH0sCisgIDE2LCAweDk4YjAsIDAsIHsweGMwLDB4MDgsMHhmMCwweDA3LDB4N2QsMHg2MCwweDhmLDB4MDIsMHgzNywweGMwLDB4MGIsMHg4YywweDAwLDB4MmQsMHgwMCwweGIzIH0sCisgIDE2LCAweDk4YzAsIDAsIHsweDAwLDB4MzgsMHhjMCwweDA4LDB4ODAsMHg4MiwweDIwLDB4MDAsMHhiOCwweDAwLDB4MmUsMHg1MCwweDBiLDB4ZjAsMHgwMCwweDMyIH0sCisgIDE2LCAweDk4ZDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMCwweDk4LDB4MDAsMHgyOCwweGMwIH0sCisgIDE2LCAweDk4ZTAsIDAsIHsweDBhLDB4MzAsMHgwMiwweDg0LDB4MDQsMHhhMywweDAwLDB4MDAsMHhjMCwweDY4LDB4MzksMHgwNiwweDBjLDB4MTAsMHg5MywweDIwIH0sCisgIDE2LCAweDk4ZjAsIDAsIHsweDIyLDB4YzAsMHg5YiwweDAxLDB4YTAsMHg4ZiwweDE0LDB4MzMsMHgxNCwweDI4LDB4YzAsMHgwOSwweDNjLDB4MDIsMHgwYywweDAxIH0sCisgIDE2LCAweDk5MDAsIDAsIHsweDkzLDB4NDAsMHgyYywweDg4LDB4MGIsMHgzMCwweDAyLDB4YjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk5MTAsIDAsIHsweDYwLDB4MDEsMHgxZSwweDEwLDB4ODcsMHg4MCwweDI5LDB4ZTAsMHgwOCwweDc4LDB4MDIsMHgzZSwweDAwLDB4ODMsMHg5MCwweDI0IH0sCisgIDE2LCAweDk5MjAsIDAsIHsweGUwLDB4MDgsMHg3OCwweDEwLDB4Y2UsMHgwNCwweDA3LDB4OTEsMHgyNSwweGUwLDB4ODMsMHhjOSwweDAyLDB4MWUsMHgwNCwweGI3IH0sCisgIDE2LCAweDk5MzAsIDAsIHsweDg0LDB4MmIsMHhhNCwweDA4LDB4NDgsMHg0MiwweDEyLDB4Y2MsMHhiNCwweDgwLDB4MmQsMHg2NCwweDBiLDB4NzgsMHgwMiwweDE5IH0sCisgIDE2LCAweDk5NDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4MmMsMHgwMCwweGQwLDB4MTAsMHgyOCwweGM4IH0sCisgIDE2LCAweDk5NTAsIDAsIHsweDBlLDB4M2IsMHgwMiwweDg0LDB4MDAsMHhlMywweDQwLDB4MzAsMHhjOCwweDBjLDB4MzgsMHg2MiwweDhjLDB4MDAsMHg1MywweDAwIH0sCisgIDE2LCAweDk5NjAsIDAsIHsweDMwLDB4YzQsMHgxZiwweDAwLDB4MjMsMHg4YywweDNjLDB4ZjMsMHg4MCwweDE4LDB4YzAsMHgwZCwweDMwLDB4MDMsMHgwZSwweDgwIH0sCisgIDE2LCAweDk5NzAsIDAsIHsweGQzLDB4MTAsMHgzYywweDgwLDB4MGYsMHgzMCwweDAzLDB4OTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk5ODAsIDAsIHsweDQwLDB4MWQsMHhiZCwweDAwLDB4ZjksMHgxMiwweGI0LDB4YzAsMHgwNywweGIwLDB4MDMsMHhjYywweDAwLDB4NGEsMHgwMCwweDc3IH0sCisgIDE2LCAweDk5OTAsIDAsIHsweGMwLDB4MGUsMHg3MSwweDQzLDB4NmMsMHgwMCwweGYzLDB4MDAsMHgzZiwweGQwLDB4MWYsMHhkMCwweDUzLDB4YWMsMHg2OCwweGZiIH0sCisgIDE2LCAweDk5YTAsIDAsIHsweDE4LDB4M2QsMHhjMCwweDBmLDB4YzAsMHgxMywweGYwLDB4NTAsMHhmYywweDA0LDB4M2YsMHg0MCwweDBmLDB4ZjQsMHgwMywweDkwIH0sCisgIDE2LCAweDk5YjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWQsMHg0MCwweGY4LDB4MDQsMHgzZSwweGQyIH0sCisgIDE2LCAweDk5YzAsIDAsIHsweDBmLDB4YjMsMHgxMywweGUwLDB4MTAsMHhmOSwweDAwLDB4YjIsMHhjYywweDBlLDB4YmEsMHgwMywweDZkLDB4ODAsMHhkYiwweDAyIH0sCisgIDE2LCAweDk5ZDAsIDAsIHsweDMyLDB4ZGMsMHg0ZiwweDAwLDB4MDMsMHg2YywweDA0LDB4ZjMsMHgwMiwweDM2LDB4NDAsMHgwZSwweGIwLDB4MDMsMHhjYywweDAwIH0sCisgIDE2LCAweDk5ZTAsIDAsIHsweDRiLDB4MDAsMHgzYywweDgwLDB4MGMsMHhmMSwweDAzLDB4NjIsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk5ZjAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDAwLDB4YjQsMHgwMCwweDJkLDB4YzksMHgwYiwweDcwLDB4ODIsMHhkYywweDAwLDB4YmMsMHgwNCwweDIxIH0sCisgIDE2LCAweDlhMDAsIDAsIHsweGM0LDB4NGIsMHgzNywweDAyLDB4MGMsMHhhMCwweDhmLDB4NzQsMHgyMSwweGMwLDB4MGIsMHg0MCwweDAyLDB4MWMsMHg4MSwweGI3IH0sCisgIDE2LCAweDlhMTAsIDAsIHsweDIwLDB4MmIsMHhjMCwweDA4LDB4NDAsMHgwMiwweGQwLDB4MDIsMHg4NCwweDAwLDB4MmQsMHg0MCwweDBhLDB4ZjIsMHgwMiwweDEyIH0sCisgIDE2LCAweDlhMjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHg4MCwweGI0LDB4YzAsMHgyZCwweGU0IH0sCisgIDE2LCAweDlhMzAsIDAsIHsweDBiLDB4N2EsMHgwMiwweGQyLDB4MDAsMHhiNSwweDg4LDB4MjEsMHhlOCwweDBhLDB4NzgsMHgwMiwweGRlLDB4NDAsMHg5NywweDAwIH0sCisgIDE2LCAweDlhNDAsIDAsIHsweDIxLDB4ZTgsMHgwYiwweGNjLDB4NDYsMHg1ZSwweDI4LDB4YjcsMHhjNCwweDIxLDB4ZjAsMHgwYSwweDc4LDB4MDIsMHhmZSwweDA4IH0sCisgIDE2LCAweDlhNTAsIDAsIHsweDk3LDB4ODQsMHgyZCwweGEwLDB4MDgsMHg3OCwweDAyLDB4NzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlhNjAsIDAsIHsweDA4LDB4MTQsMHhjYywweDAwLDB4YjAsMHhjMCwweDJjLDB4YzAsMHg5YiwweGIwLDB4MDIsMHhjYywweDIwLDB4YjMsMHg2MCwweDIyIH0sCisgIDE2LCAweDlhNzAsIDAsIHsweGMwLDB4MGIsMHgzMCwweDAyLDB4OGMsMHgwMCwweDgzLDB4MDEsMHgyMCwweGMwLDB4MWIsMHgwNiwweDE2LDB4NGYsMHgwMCwweGIzIH0sCisgIDE2LCAweDlhODAsIDAsIHsweGEwLDB4MmEsMHhmMCwweDA4LDB4MDAsMHgwMiwweGUwLDB4MDAsMHg5MCwweDAwLDB4MmMsMHg0MCwweDBhLDB4MzAsMHgwMiwweDAyIH0sCisgIDE2LCAweDlhOTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgxMCwweGZlLDB4YzAsMHgzZSwweDgwIH0sCisgIDE2LCAweDlhYTAsIDAsIHsweDBmLDB4YTAsMHgwMywweGY5LDB4MDgsMHhmZSwweDQwLDB4MjIsMHg4MCwweDBlLDB4YTAsMHgwMywweGU4LDB4MDAsMHhkMiwweDAwIH0sCisgIDE2LCAweDlhYjAsIDAsIHsweDMyLDB4ODAsMHg4ZiwweGUwLDB4MDMsMHg1OCwweDAwLDB4ZjYsMHgwMCwweDMzLDB4YjAsMHgwZSwweDIwLDB4MDIsMHhlOCwweDBjIH0sCisgIDE2LCAweDlhYzAsIDAsIHsweGQyLDB4MDIsMHgzYywweDgwLDB4MGMsMHhhMCwweDAzLDB4N2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlhZDAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgyMCwweDNlLDB4MDEsMHgwYiwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZjAsMHg0MCwweDNlIH0sCisgIDE2LCAweDlhZTAsIDAsIHsweDAwLDB4NTcsMHg4MCwweDIzLDB4MDAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4NCwweDAzLDB4YTAsMHgzMCwweDM4IH0sCisgIDE2LCAweDlhZjAsIDAsIHsweDAwLDB4M2EsMHgwOCwweDBmLDB4YzQsMHgwMywweGYwLDB4MDAsMHhlYywweDAwLDB4M2YsMHgxMCwweDBmLDB4ODAsMHgwMywweGQyIH0sCisgIDE2LCAweDliMDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGQ5LDB4MDEsMHgzYywweDQ4IH0sCisgIDE2LCAweDliMTAsIDAsIHsweDRjLDB4OTAsMHgwYiwweDI0LDB4MDEsMHhjOSwweGMwLDB4MzIsMHg0MCwweGFjLDB4OTAsMHgwMywweGU0LDB4MDAsMHhkOSwweDQwIH0sCisgIDE2LCAweDliMjAsIDAsIHsweDMwLDB4NDAsMHgwZCwweDlhLDB4MDMsMHgyMiwweDg0LDB4YzgsMHgxNCwweDMyLDB4NDAsMHgwZSwweDkwLDB4MDMsMHgyNCwweDAwIH0sCisgIDE2LCAweDliMzAsIDAsIHsweGM5LDB4MDAsMHg4MiwweDY4LDB4MmMsMHg5MCwweDAzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDliNDAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHgwMCwweDJlLDB4NDAsMHgwOCwweDkwLDB4MjIsMHgyNCwweDAwLDB4ODksMHgwMiwweDgyIH0sCisgIDE2LCAweDliNTAsIDAsIHsweDQwLDB4MDgsMHg5MCwweDAyLDB4ZTcsMHg0MCwweDg5LDB4ODAsMHgzNiwweDQxLDB4OGQsMHgxOCwweDAyLDB4YTAsMHgyNCwweGE4IH0sCisgIDE2LCAweDliNjAsIDAsIHsweDA0LDB4NjIsMHg0MCwweDA4LDB4OTQsMHg4MywweDI0LDB4MDAsMHg4OSwweDAxLDB4MjIsMHg3MiwweDA4LDB4OTAsMHgwYiwweDIwIH0sCisgIDE2LCAweDliNzAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MDQsMHgwMCwweDk5LDB4MDAsMHgyYSwweDQwIH0sCisgIDE2LCAweDliODAsIDAsIHsweDI4LDB4OTAsMHgxMiwweDA0LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweGE0LDB4MjAsMHg5OSwweDAwIH0sCisgIDE2LCAweDliOTAsIDAsIHsweDIyLDB4NDAsMHgxOCwweDkwLDB4MDYsMHgyMCwweDAxLDB4ODgsMHgwOCwweDYyLDB4NDAsMHgwYSwweDkwLDB4MDIsMHgzNCwweDEwIH0sCisgIDE2LCAweDliYTAsIDAsIHsweDhkLDB4ODEsMHgyMywweDQxLDB4MDgsMHgxMCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDliYjAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4ODEsMHgwNCwweDJjLDB4NDgsMHgwOCwweDEyLDB4MDIsMHgwNCwweDAyLDB4ODMsMHgyMCwweDIwIH0sCisgIDE2LCAweDliYzAsIDAsIHsweDQ4LDB4MDgsMHgxMiwweDAyLDB4YzQsMHg4MCwweDgzLDB4NjAsMHgyNCwweDQ4LDB4MTksMHgzNCwweDYyLDB4YTUsMHgwNCwweGExIH0sCisgIDE2LCAweDliZDAsIDAsIHsweDAyLDB4NjAsMHg0MCwweDA4LDB4ZDAsMHgwMiwweDU0LDB4MDAsMHg4ZCwweDAwLDB4MjksMHg0MCwweDA4LDB4MTIsMHg4MiwweDAyIH0sCisgIDE2LCAweDliZTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGQ4LDB4NTAsMHgzYSwweDgwIH0sCisgIDE2LCAweDliZjAsIDAsIHsweDBjLDB4ODUsMHgwMiwweDIxLDB4NDQsMHg4OCwweDUwLDB4MzIsMHgxNCwweDRjLDB4ODAsMHg0MywweGUwLDB4MDAsMHhkOCwweDAwIH0sCisgIDE2LCAweDljMDAsIDAsIHsweDIyLDB4MTQsMHgwYywweDgwLDB4MDMsMHgyMCwweDAwLDB4YzgsMHgwMCwweGEyLDB4MDAsMHgwZSwweDgwLDB4MDMsMHgyMCwweDAwIH0sCisgIDE2LCAweDljMTAsIDAsIHsweGM4LDB4MDAsMHgzMywweDAwLDB4MGMsMHg4MiwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDljMjAsIDAsIHsweDk4LDB4MWQsMHhlNCwweDQ0LDB4ZmQsMHgwMCwweDNlLDB4NDQsMHgwZiwweDkxLDB4MDMsMHhmNCwweDEwLDB4ZmYsMHgxMCwweDNlIH0sCisgIDE2LCAweDljMzAsIDAsIHsweDQ0LDB4MGYsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGY5LDB4MTAsMHgzZSwweDQ0LDB4MGIsMHhmMCwweDEzLDB4ZTUsMHgxMCwweGY5IH0sCisgIDE2LCAweDljNDAsIDAsIHsweDQwLDB4M2YsMHg0YSwweDJmLDB4OTIsMHg4YSwweGE0LDB4YTIsMHhmOSwweDI4LDB4MzYsMHg0MCwweDBmLDB4OTIsMHg4MywweGE2IH0sCisgIDE2LCAweDljNTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDExLDB4ZTYsMHhjMCwweGMxLDB4MDAsMHgzZiwweDY5IH0sCisgIDE2LCAweDljNjAsIDAsIHsweDBjLDB4OWEsMHg0MywweDZjLDB4MDAsMHhmZCwweGEwLDB4M2UsMHg3OCwweDJjLDB4ZDgsMHgwNywweGQ2LDB4MDIsMHhkNSwweDk2IH0sCisgIDE2LCAweDljNzAsIDAsIHsweDMyLDB4NzgsMHgwZCwweDkwLDB4MDMsMHgyNywweDAwLDB4ZmQsMHhhMCwweDM1LDB4NTAsMHgwNiwweGQ0LDB4MDMsMHhlNSwweDAwIH0sCisgIDE2LCAweDljODAsIDAsIHsweGZkLDB4NDAsMHhiMywweDQwLDB4MGYsMHg5OCwweGEzLDB4NDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDljOTAsIDAsIHsweDM4LDB4MTAsMHhlMywweGMyLDB4ODgsMHg4OCwweDJlLDB4MTQsMHhhOCwweDhhLDB4YzIsMHgyMiwweGEwLDB4YjgsMHhjMCwweDJjIH0sCisgIDE2LCAweDljYTAsIDAsIHsweDI0LDB4NDgsMHg4NCwweDAyLDB4ZTEsMHgwMCwweDk4LDB4YzQsMHgyMCwweDNjLDB4MDgsMHg4YSwweDgyLDB4MjMsMHg4MCwweGI4IH0sCisgIDE2LCAweDljYjAsIDAsIHsweDA0LDB4MjIsMHgyMCwweDA4LDB4ODgsMHgwMywweGEyLDB4MDAsMHhiOCwweGEwLDB4MjIsMHgwMCwweDBiLDB4ODgsMHgwMiwweDBlIH0sCisgIDE2LCAweDljYzAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHg4MCwweGExLDB4MjAsMHg2YywweDQwIH0sCisgIDE2LCAweDljZDAsIDAsIHsweDBhLDB4MTQsMHgwMiwweDQ0LDB4MDQsMHhhMSwweDY4LDB4MmMsMHg0OCwweDA4LDB4MTQsMHgwMiwweGM1LDB4MDAsMHg4MSwweDYwIH0sCisgIDE2LCAweDljZTAsIDAsIHsweDIwLDB4NDgsMHgxOSwweDkwLDB4MDIsMHg4NSwweDgxLDB4YjEsMHg0MCwweDI0LDB4NjgsMHgwYSwweDEyLDB4NDIsMHhjNCwweDgwIH0sCisgIDE2LCAweDljZjAsIDAsIHsweGI5LDB4MjAsMHgyMCwweDQwLDB4OGIsMHgxMCwweDgyLDB4NDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlkMDAsIDAsIHsweDE4LDB4MDUsMHhhNCwweDEwLDB4YTksMHgwMCwweDZlLDB4YzAsMHgwYSwweDEwLDB4MDIsMHgyNCwweDE0LDB4YjksMHgwMCwweDJlIH0sCisgIDE2LCAweDlkMTAsIDAsIHsweDQwLDB4MDgsMHg5MCwweDEyLDB4ZTQsMHgwMCwweDk5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHg4MCwweDA2LDB4YTAsMHg2MCwweGI5IH0sCisgIDE2LCAweDlkMjAsIDAsIHsweDA5LDB4MjIsMHg2MCwweDA4LDB4OTAsMHgwMiwweGE0LDB4MDAsMHhiOSwweDAwLDB4MDIsMHg0MCwweDBiLDB4MTAsMHgwNiwweDA2IH0sCisgIDE2LCAweDlkMzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDA1LDB4ZTQsMHgwMCwweGU5LDB4ODAsMHgzZSwweDQxIH0sCisgIDE2LCAweDlkNDAsIDAsIHsweDBlLDB4OTAsMHgwMywweDY0LDB4MDAsMHhlOSwweGMwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhjOSwweDAwIH0sCisgIDE2LCAweDlkNTAsIDAsIHsweDIyLDB4NDEsMHgwZCwweDgwLDB4MDIsMHhhMywweDA0LDB4ZjEsMHg0MCwweDM2LDB4NDAsMHgwZSwweDkwLDB4MDIsMHhlNCwweDAwIH0sCisgIDE2LCAweDlkNjAsIDAsIHsweGYxLDB4MDAsMHgxMiwweDQwLDB4MGYsMHg5MCwweDAzLDB4NjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlkNzAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAwLDB4ZDksMHgyMiwweDNlLDB4NDIsMHgwZCwweDkwLDB4MDMsMHhlNCwweDAwLDB4YjksMHhjNCwweDNjIH0sCisgIDE2LCAweDlkODAsIDAsIHsweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGU5LDB4MDIsMHhhZSwweDQwLDB4MGYsMHg4MCwweDRiLDB4NjIsMHgxMCwweGY5IH0sCisgIDE2LCAweDlkOTAsIDAsIHsweDIwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAyLDB4N2UsMHg0MSwweDBmLDB4OTAsMHgxMywweGNhIH0sCisgIDE2LCAweDlkYTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAwLDB4ODAsMHgwMCwweGM4LDB4MDAsMHgzOCwweDAwIH0sCisgIDE2LCAweDlkYjAsIDAsIHsweDBmLDB4ODAsMHgyMCwweGUwLDB4MDAsMHhhOCwweDIwLDB4MzIsMHgwMCwweDBjLDB4ODAsMHgwNywweGUwLDB4ODAsMHhjOCwweDAwIH0sCisgIDE2LCAweDlkYzAsIDAsIHsweDM4LDB4MDAsMHgwZCwweDgwLDB4ODMsMHgyMSwweDEwLDB4ZjgsMHg2MCwweDMyLDB4MDAsMHg4ZSwweDgwLDB4YjMsMHgyMCwweDA4IH0sCisgIDE2LCAweDlkZDAsIDAsIHsweGY4LDB4MDAsMHgzZSwweDAwLDB4MGMsMHg4MCwweDAzLDB4Y2EsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlkZTAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDA0LDB4OGEsMHgwMCwweDMzLDB4OTAsMHg0MywweGEwLDB4MjIsMHgyOCwweDAwLDB4OGUsMHg4MCwweDc2IH0sCisgIDE2LCAweDlkZjAsIDAsIHsweDgwLDB4MDgsMHhlMSwweDAzLDB4MTksMHgwMCwweDg2LDB4ODAsMHgyMiwweDgwLDB4MGQsMHg2MCwweDAxLDB4NzgsMHgwMCwweGJlIH0sCisgIDE2LCAweDllMDAsIDAsIHsweDAwLDB4MzYsMHg4MCwweDBjLDB4ZTQsMHgwMiwweGE4LDB4MTAsMHhiZSwweGEwLDB4MmYsMHg4MCwweDBkLDB4YTAsMHgwMiwweDBhIH0sCisgIDE2LCAweDllMTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDExLDB4NGMsMHgwNCwweDAzLDB4MDQsMHgyYywweGQ0IH0sCisgIDE2LCAweDllMjAsIDAsIHsweDBiLDB4MzAsMHgwMiwweDRjLDB4MDEsMHhhMywweGM0LDB4MjAsMHhjMCwweDI4LDB4MzUsMHgwMiwweDg2LDB4MDAsMHg4MywweDgwIH0sCisgIDE2LCAweDllMzAsIDAsIHsweDI4LDB4YzAsMHgwOCwweDM4LDB4MDYsMHgwZSwweDk0LDB4MzAsMHhjMCwweGEyLDB4YzAsMHgwYiwweDNjLDB4MDIsMHgwYywweDAwIH0sCisgIDE2LCAweDllNDAsIDAsIHsweGIzLDB4ODAsMHgyYywweDQ4LDB4MDgsMHgzMCwweDAyLDB4OGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDllNTAsIDAsIHsweGEwLDB4MDEsMHgwYywweDA0LDB4OGYsMHg4MCwweDIxLDB4YzEsMHgxYiwweDcyLDB4NDIsMHgxZSwweGMwLDB4ODMsMHg4OCwweDIxIH0sCisgIDE2LCAweDllNjAsIDAsIHsweGMwLDB4MTgsMHgyOCwweDA2LDB4MTAsMHgyMSwweDg2LDB4MzgsMHgyMSwweGMwLDB4MTksMHhmNywweDAyLDB4NWQsMHhjMCwweGI0IH0sCisgIDE2LCAweDllNzAsIDAsIHsweDQxLDB4MjcsMHhkMCwweDA4LDB4NzgsMHhjNiwweDljLDB4MDAsMHhiNywweDAwLDB4MmYsMHg2MCwweDA5LDB4NzIsMHgwMiwweDI4IH0sCisgIDE2LCAweDllODAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMiwweGM3LDB4ODAsMHgyZCwweGEwIH0sCisgIDE2LCAweDllOTAsIDAsIHsweDBmLDB4M2UsMHgwMywweGZlLDB4ODAsMHhhNywweDgwLDB4YTEsMHhlMCwweDBjLDB4NzgsMHgwMiwweDk0LDB4MDAsMHg4NSwweGEwIH0sCisgIDE2LCAweDllYTAsIDAsIHsweDM5LDB4ZTQsMHgwYywweDc4LDB4MTMsMHgxZSwweDkwLDB4YjUsMHg4NCwweDMxLDB4ZTAsMHgwZiwweGY4LDB4ODcsMHgxZSwweDA0IH0sCisgIDE2LCAweDllYjAsIDAsIHsweGY3LDB4ODAsMHgzZCwweDYwLDB4MGMsMHgzYiwweDAzLDB4YWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDllYzAsIDAsIHsweDA4LDB4MWQsMHhhZCwweGU0LDB4ZmIsMHg1NCwweDNlLDB4ODAsMHgwZiwweGI0LDB4MjMsMHhlYywweDMyLDB4ZmIsMHgwMCwweDNlIH0sCisgIDE2LCAweDllZDAsIDAsIHsweGQ4LDB4NGYsMHhhMCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweGMwLDB4MGYsMHgzMCwweDMzLDB4ZWMsMHgwNCwweGYyIH0sCisgIDE2LCAweDllZTAsIDAsIHsweDAxLDB4M2UsMHhjMCwweDBmLDB4YjIsMHgwMywweGZlLDB4MTAsMHhmYiwweDY4LDB4M2MsMHg0MSwweDBmLDB4ZjAsMHg0MywweDgyIH0sCisgIDE2LCAweDllZjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4ZmUsMHgwMCwweGNmLDB4ZTQsMHgzZiwweGU0IH0sCisgIDE2LCAweDlmMDAsIDAsIHsweDBjLDB4ZmMsMHgwMywweDdlLDB4ODAsMHhjZiwweDgxLDB4MzMsMHhmYSwweDBmLDB4ZjgsMHgwMywweGY2LDB4MDAsMHhmZiwweDgwIH0sCisgIDE2LCAweDlmMTAsIDAsIHsweDNmLDB4ZTIsMHgwZiwweDc5LDB4MDMsMHgzZSwweDQwLDB4ZjQsMHg4MCwweDMzLDB4NjAsMHgwYywweGU4LDB4MDMsMHgzZSwweDAwIH0sCisgIDE2LCAweDlmMjAsIDAsIHsweGZmLDB4ODAsMHgzMywweDYwLDB4MGMsMHhmOCwweDgzLDB4NTAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlmMzAsIDAsIHsweGE4LDB4MTEsMHg5YywweDAwLDB4ZDcsMHhhMCwweDJkLDB4YzQsMHgwOCwweGJhLDB4MDIsMHgzYywweGEwLDB4ODcsMHgyMCwweDIxIH0sCisgIDE2LCAweDlmNDAsIDAsIHsweGMwLDB4MGYsMHg1MiwweDAzLDB4ZDQsMHgwMCwweGI2LDB4MTAsMHgyZCwweGMwLDB4OGIsMHg3MywweDAzLDB4NWMsMHg0MCwweGI0IH0sCisgIDE2LCAweDlmNTAsIDAsIHsweGIwLDB4MmIsMHg0OCwweDI4LDB4NDEsMHgwMiwweDBjLDB4MDAsMHhiZiwweDE4LDB4MzUsMHg0NiwweDI4LDB4NzIsMHg0MiwweDJhIH0sCisgIDE2LCAweDlmNjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAwLDB4OWMsMHgwMCwweDg3LDB4NDEsMHgyZCwweDQ0IH0sCisgIDE2LCAweDlmNzAsIDAsIHsweDBhLDB4NzMsMHgwMiwweDljLDB4YzQsMHg4MSwweDAwLDB4NmQsMHhjOCwweDhiLDB4NzAsMHgwMiwweGQ0LDB4MDAsMHhiNywweDAwIH0sCisgIDE2LCAweDlmODAsIDAsIHsweDJkLDB4YzAsMHgwYiwweGYwLDB4NDYsMHg5YywweDU1LDB4YjQsMHgyMCwweDI1LDB4NDAsMHgxOCwweDYwLDB4ODIsMHgxYywweDAwIH0sCisgIDE2LCAweDlmOTAsIDAsIHsweGI3LDB4MDAsMHgyMywweDQwLDB4MDgsMHg3MCwweDQ2LDB4NDQsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlmYTAsIDAsIHsweDYwLDB4MTQsMHhjYywweDAwLDB4OTMsMHgwMCwweDJjLDB4NDAsMHgwYiwweGIwLDB4MDIsMHgwYywweDgyLDB4ODAsMHhjMCwweDIwIH0sCisgIDE2LCAweDlmYjAsIDAsIHsweGMwLDB4MGEsMHgxMCwweDAyLDB4MDQsMHgwMCwweGIzLDB4MDAsMHgyYywweGMwLDB4MWIsMHgzMCwweDAwLDB4Y2QsMHgwMSwweGIwIH0sCisgIDE2LCAweDlmYzAsIDAsIHsweDQwLDB4YWMsMHg3OCwweDg4LDB4OGMsMHgwNiwweDBkLDB4NjAsMHhiMywweDRjLDB4MjQsMHgxMiwweDA4LDB4MzAsMHgwYSwweDE4IH0sCisgIDE2LCAweDlmZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDE1LDB4YmMsMHgwMCwweGM3LDB4MDAsMHgyZSwweDQwIH0sCisgIDE2LCAweDlmZTAsIDAsIHsweDBlLDB4ZjAsMHgyYSwweGJmLDB4MDAsMHhjOCwweGM4LDB4YmYsMHhjMCwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDQsMHhiZiwweDAwIH0sCisgIDE2LCAweDlmZjAsIDAsIHsweDNmLDB4YzAsMHgwZiwweGIyLDB4MGEsMHhhYywweDAwLDB4ZjgsMHg4MCwweDM0LDB4NDksMHgwYywweGI5LDB4MGIsMHgzZiwweDAwIH0sCisgIDE2LCAweGEwMDAsIDAsIHsweGZiLDB4YzAsMHgzMCwweGYwLDB4MGMsMHhmMCwweDAzLDB4NmUsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGEwMTAsIDAsIHsweDgwLDB4MDAsMHhjYywweDAwLDB4ZmIsMHg4MCwweDNlLDB4NDEsMHgyYywweGIwLDB4MTMsMHhhYywweDAwLDB4ZjgsMHgwMCwweDNlIH0sCisgIDE2LCAweGEwMjAsIDAsIHsweGMxLDB4MGYsMHhhMCwweDAzLDB4ZTgsMHgwMCwweGZhLDB4NDAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDBiLDB4NmQsMHg0MCwweGY4IH0sCisgIDE2LCAweGEwMzAsIDAsIHsweDEwLDB4M2EsMHg0MCwweDBmLDB4YjAsMHgwMywweGVjLDB4MTAsMHhmZSwweDQwLDB4M2UsMHhjMCwweDBmLDB4ZjAsMHgwMywweGUxIH0sCisgIDE2LCAweGEwNDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4ZWMsMHgwYywweGRmLDB4MDAsMHgzYiwweDgwIH0sCisgIDE2LCAweGEwNTAsIDAsIHsweDBmLDB4ZjAsMHgwYiwweDNjLDB4MDgsMHhlNywweDA4LDB4MzMsMHhjMCwweDBiLDB4ZDAsMHgyMywweDc0LDB4MDAsMHg1NCwweDAwIH0sCisgIDE2LCAweGEwNjAsIDAsIHsweDMzLDB4YzAsMHgwZiwweGYwLDB4ODMsMHhiZSwweDIwLDB4ZmQsMHgwYywweDNiLDB4NjAsMHgyYywweGUwLDB4MDMsMHgzYywweDAwIH0sCisgIDE2LCAweGEwNzAsIDAsIHsweGNmLDB4MTIsMHgzMywweDUwLDB4MGMsMHgzMCwweDAzLDB4ODAsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGEwODAsIDAsIHsweDgxLDB4MDQsMHg2YywweDA0LDB4YWIsMHgwMCwweDIyLDB4YTAsMHgwYiwweGIwLDB4MDYsMHgwYywweDAwLDB4YWIsMHg0MCwweDM2IH0sCisgIDE2LCAweGEwOTAsIDAsIHsweGMwLDB4MGIsMHhhOCwweDAyLDB4NjYsMHgwMCwweGI4LDB4MDAsMHgzNiwweGMxLDB4MGIsMHgzNCwweDQzLDB4ZWUsMHgwMCwweGIyIH0sCisgIDE2LCAweGEwYTAsIDAsIHsweDAwLDB4MjIsMHg2MCwweDA4LDB4YjQsMHg4MiwweDhjLDB4MDQsMHg4YSwweDIxLDB4MjIsMHg0MCwweDA4LDB4YjAsMHgwMiwweDIwIH0sCisgIDE2LCAweGEwYjAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweDliLDB4MDAsMHgyYSwweDIwIH0sCisgIDE2LCAweGEwYzAsIDAsIHsweDBiLDB4YjAsMHgwMiwweDJjLDB4MDAsMHg4OCwweGM1LDB4MjIsMHhjMCwweDBiLDB4ODgsMHg4MiwweGU2LDB4MDEsMHhiYiwweDA4IH0sCisgIDE2LCAweGEwZDAsIDAsIHsweDIyLDB4YzAsMHgwYSwweGIyLDB4ODIsMHhhYywweDYwLDB4YjgsMHgwMiwweDRhLDB4YzQsMHgwOCwweGIxLDB4MDIsMHgyYywweDAwIH0sCisgIDE2LCAweGEwZTAsIDAsIHsweDgzLDB4MDAsMHgyMiwweGMwLDB4MDgsMHhiMCwweDAyLDB4YTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGEwZjAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAwLDB4YWIsMHgyMCwweDIwLDB4MDEsMHgwYiwweDMyLDB4MDYsMHgyYywweDAwLDB4YTAsMHgwMCwweDIwIH0sCisgIDE2LCAweGExMDAsIDAsIHsweGMwLDB4MDksMHgwNCwweDIyLDB4YzQsMHgwMCwweGIyLDB4MDAsMHgyNCwweGMxLDB4OGIsMHhiMCwweDAyLDB4NGMsMHgwMCwweGIwIH0sCisgIDE2LCAweGExMTAsIDAsIHsweDAwLDB4NjIsMHhjMCwweDQ4LDB4MzAsMHgwMiwweGFjLDB4MTAsMHg4MiwweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweDAyIH0sCisgIDE2LCAweGExMjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4N2MsMHgwOCwweGRmLDB4MmEsMHgzYSwweDAwIH0sCisgIDE2LCAweGExMzAsIDAsIHsweDBmLDB4ZjUsMHgxMiwweDNjLDB4MTAsMHhjOSwweDAwLDB4YTMsMHhjMCwweDBmLDB4ODAsMHg1MywweGVjLDB4MDEsMHhkYSwweDAwIH0sCisgIDE2LCAweGExNDAsIDAsIHsweDMzLDB4YzAsMHgwZSwweGIwLDB4MDMsMHhhYywweDA0LDB4ZjgsMHg3MCwweDNhLDB4YzAsMHgwYywweDYwLDB4NDMsMHgyYywweDQyIH0sCisgIDE2LCAweGExNTAsIDAsIHsweGNkLDB4MDAsMHhiMiwweDQwLDB4MmMsMHhmMCwweDAzLDB4ODAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGExNjAsIDAsIHsweGEwLDB4MTksMHhmYywweDAwLDB4ZmIsMHgwMSwweDNkLDB4MDAsMHgwZiwweGI0LDB4MTcsMHhmYywweDAwLDB4M2MsMHgwMCwweDNmIH0sCisgIDE2LCAweGExNzAsIDAsIHsweGMwLDB4NGYsMHhjMCwweDAzLDB4NzQsMHgwOCwweGZlLDB4MDAsMHgzZiwweGMwLDB4NGYsMHhmMCwweDAzLDB4ZmMsMHgwOCwweGY4IH0sCisgIDE2LCAweGExODAsIDAsIHsweDMwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDQsMHhmYywweDAwLDB4M2QsMHgwMCwweDBmLDB4ZjAsMHgwMywweGU4IH0sCisgIDE2LCAweGExOTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZjQsMHg5MCwweGVmLDB4MDAsMHgzZiwweGQ4IH0sCisgIDE2LCAweGExYTAsIDAsIHsweDBlLDB4ZjMsMHgwMywweDJjLDB4MDEsMHhkNCwweDgwLDB4MzcsMHhjYywweDBkLDB4ODksMHg0MywweDEyLDB4NTAsMHhlYywweDJjIH0sCisgIDE2LCAweGExYjAsIDAsIHsweDMyLDB4MDUsMHgwZCwweGIwLDB4NTMsMHgzYywweGQ0LDB4YzUsMHg5NCwweDdmLDB4YTAsMHg4ZiwweGYwLDB4NDMsMHgzMCwweDAwIH0sCisgIDE2LCAweGExYzAsIDAsIHsweGRjLDB4MDAsMHgzMywweDAwLDB4MGMsMHg0OCwweDA3LDB4ZjAsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGExZDAsIDAsIHsweDgwLDB4MTAsMHhlNiwweDQwLDB4OGIsMHg3MCwweDJmLDB4ZGMsMHgwOCwweGY3LDB4MDIsMHgwYywweDgwLDB4OGEsMHgyMCwweDAwIH0sCisgIDE2LCAweGExZTAsIDAsIHsweGM4LDB4NGEsMHgyMiwweDAyLDB4YTAsMHgwMCwweDhhLDB4NDgsMHgyMiwweDU4LDB4ODgsMHhmZCwweDAyLDB4YWQsMHgwMiwweGE5IH0sCisgIDE2LCAweGExZjAsIDAsIHsweDIwLDB4MWUsMHhhMCwweDAzLDB4ODAsMHgwMiwweDJjLDB4MDQsMHg4YiwweDAwLDB4MjIsMHhjMCwweDRjLDB4ODgsMHgwNywweDYwIH0sCisgIDE2LCAweGEyMDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzAsMHgwMCwweDIzLDB4MmMsMHgyYywweGM5IH0sCisgIDE2LCAweGEyMTAsIDAsIHsweDAyLDB4MzAsMHgwMiwweDBjLDB4NjgsMHhhMCwweDI4LDB4MmMsMHhkMCwweDA5LDB4MTIsMHgwMiwweDg0LDB4MDAsMHhhMCwweDIxIH0sCisgIDE2LCAweGEyMjAsIDAsIHsweDIwLDB4MTgsMHgxOSwweDMwLDB4MjIsMHg4MCwweGQwLDB4ODMsMHgwNiwweDBjLDB4YTAsMHgwYiwweGIwLDB4MDYsMHgwMCwweDEyIH0sCisgIDE2LCAweGEyMzAsIDAsIHsweGEwLDB4MDAsMHgyMCwweDAwLDB4MjksMHgwMCwweDBlLDB4YTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGEyNDAsIDAsIHsweGMwLDB4MTEsMHhhOCwweDMwLDB4OGIsMHgwMCwweDJlLDB4YzAsMHg0YSwweDMwLDB4MGEsMHgyYywweDE0LDB4YTAsMHg4MCwweDBhIH0sCisgIDE2LCAweGEyNTAsIDAsIHsweGMxLDB4MDgsMHg4OCwweDg2LDB4ODcsMHgwMCwweDgzLDB4MDAsMHgyMiwweDQ5LDB4MDgsMHhiMCwweDA2LDB4YTAsMHg0MCwweGFiIH0sCisgIDE2LCAweGEyNjAsIDAsIHsweDIwLDB4MjIsMHgyMCwweDBiLDB4ODAsMHgwYSwweDBjLDB4MDQsMHhhYiwweDAyLDB4MjIsMHhjMCwweDg4LDB4ODAsMHgwMiwweGYwIH0sCisgIDE2LCAweGEyNzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWYsMHg0MCwweGViLDB4MDYsMHgzZSwweGMwIH0sCisgIDE2LCAweGEyODAsIDAsIHsweDBlLDB4YjAsMHgwMywweDJjLDB4MDIsMHhmOSwweGEwLDB4M2UsMHhjMCwweDBkLDB4OGMsMHgwMywweGFhLDB4MTAsMHhlOSwweDQwIH0sCisgIDE2LCAweGEyOTAsIDAsIHsweGIyLDB4NDgsMHgwZCwweGIwLDB4NDMsMHhhZCwweDAwLDB4Y2IsMHg4NiwweDJlLDB4MjAsMHgwZiwweDMwLDB4MDMsMHgyNCwweDAwIH0sCisgIDE2LCAweGEyYTAsIDAsIHsweGY5LDB4ODAsMHgzMiwweGMwLDB4MGQsMHgwYywweGMyLDB4OTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGEyYjAsIDAsIHsweGUwLDB4MDEsMHg5NCwweDAwLDB4ZmYsMHgwMCwweDNkLDB4YzAsMHgwZCwweGYwLDB4MDMsMHg3YywweDAwLDB4ZGYsMHgwMCwweDM3IH0sCisgIDE2LCAweGEyYzAsIDAsIHsweGMwLDB4MGYsMHhlMCwweDAzLDB4ZjAsMHgwMCwweGZlLDB4MjAsMHgzZiwweDQwLDB4MGYsMHg3MCwweDAzLDB4ZmUsMHgwMCwweGZmIH0sCisgIDE2LCAweGEyZDAsIDAsIHsweDgyLDB4N2YsMHgwMCwweDBmLDB4YzAsMHgwMywweGY5LDB4MDQsMHhkZSwweDIwLDB4YmQsMHgwMCwweDBmLDB4ZDksMHgwYiwweDdjIH0sCisgIDE2LCAweGEyZTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMSwweGNiLDB4MDAsMHgzZSwweGMwIH0sCisgIDE2LCAweGEyZjAsIDAsIHsweDJjLDB4YjAsMHgwYiwweDJjLDB4MDAsMHhlOCwweDQwLDB4M2UsMHhjMCwweDBmLDB4OTQsMHgwNywweDI5LDB4MDAsMHhjOSwweDQwIH0sCisgIDE2LCAweGEzMDAsIDAsIHsweGIyLDB4YzAsMHgwZiwweGIwLDB4MDMsMHgwMSwweDAyLDB4Y2IsMHgwMCwweDMyLDB4MDQsMHg0ZiwweGYwLDB4NDMsMHgzNCwweGMwIH0sCisgIDE2LCAweGEzMTAsIDAsIHsweGI1LDB4MWEsMHgzZiwweGMxLDB4MGYsMHg4MCwweDkzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGEzMjAsIDAsIHsweGM4LDB4MDUsMHgyOCwweDAwLDB4OGYsMHgwMCwweDJmLDB4YzAsMHgwOCwweGYwLDB4MDIsMHgzYywweDA0LDB4ZDgsMHgwMCwweDJiIH0sCisgIDE2LCAweGEzMzAsIDAsIHsweGMwLDB4MGMsMHg4MCwweDQ1LDB4NjAsMHgwMCwweDdiLDB4NTgsMHgyMiwweGM4LDB4MGIsMHhmYSwweDAxLDB4NjEsMHg0MCwweDhiIH0sCisgIDE2LCAweGEzNDAsIDAsIHsweDAwLDB4MzIsMHgwNCwweDRiLDB4Y2UsMHgwMiwweDI4LDB4MDAsMHgzYSwweDQwLDB4MmUsMHgwNywweDBiLDB4OTAsMHgwMiwweDI2IH0sCisgIDE2LCAweGEzNTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMCwweDgzLDB4MDEsMHg0YywweGMwIH0sCisgIDE2LCAweGEzNjAsIDAsIHsweDBiLDB4MzAsMHgwMiwweGVjLDB4MTAsMHg5MCwweDAwLDB4MmEsMHhjMCwweDBhLDB4ODAsMHgwNiwweGMwLDB4MDQsMHg4MywweDA0IH0sCisgIDE2LCAweGEzNzAsIDAsIHsweGEyLDB4ODksMHgxOSwweDMwLDB4MDYsMHhjYywweDAwLDB4ODMsMHgwMCwweDIwLDB4OTAsMHgwYiwweDMwLDB4YzIsMHg0OCwweDAwIH0sCisgIDE2LCAweGEzODAsIDAsIHsweGIyLDB4NDAsMHgyNCwweDIwLDB4MGIsMHgwOSwweDAwLDB4YjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGEzOTAsIDAsIHsweDIwLDB4MDEsMHgwNiwweDA0LDB4ODcsMHhhNCwweDJkLDB4ZTAsMHgwOSwweDM4LDB4MDIsMHhkZSwweDAwLDB4OWUsMHg4MSwweDI5IH0sCisgIDE2LCAweGEzYTAsIDAsIHsweGUwLDB4MDgsMHg3OCwweDUyLDB4ZmEsMHhjMCwweDk2LDB4ODAsMHgwMSwweGEwLDB4OGIsMHgzYSwweDIyLDB4Y2UsMHg0MCwweDhmIH0sCisgIDE2LCAweGEzYjAsIDAsIHsweGIwLDB4MjUsMHhhMCwweDBiLDB4MDgsMHgwMiwweDU2LDB4MDgsMHhiNSwweDkwLDB4MmQsMHhlNCwweDRiLDB4ZDgsMHgyMiwweDBjIH0sCisgIDE2LCAweGEzYzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MDgsMHgwMiwweDgzLDB4ODAsMHgyZSwweGU4IH0sCisgIDE2LCAweGEzZDAsIDAsIHsweDBiLDB4MzgsMHgxMywweGNlLDB4NDEsMHhkMywweDEwLDB4MjgsMHhjMCwweDBlLDB4M2EsMHgwMiwweGM2LDB4MDgsMHg0YiwweDQwIH0sCisgIDE2LCAweGEzZTAsIDAsIHsweDMwLDB4NjAsMHgwZCwweDNiLDB4MjcsMHhjZiwweGM0LDB4YzMsMHhhMCwweDMwLDB4MDAsMHgwZiwweDMwLDB4NDMsMHg0OCwweDQwIH0sCisgIDE2LCAweGEzZjAsIDAsIHsweGYyLDB4MDAsMHgzYywweDA0LDB4MGYsMHgwMiwweDAzLDB4OTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE0MDAsIDAsIHsweDQwLDB4MWQsMHhiOCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzQsMHgwZSwweGYxLDB4MDMsMHgzYywweDAwLDB4ZmYsMHgwMSwweDMzIH0sCisgIDE2LCAweGE0MTAsIDAsIHsweGMwLDB4NGQsMHhiMSwweDA3LDB4N2MsMHg5MCwweGZmLDB4MDAsMHgzZiwweDQwLDB4MDMsMHhmMSwweDAzLDB4NzAsMHgwMCwweGZiIH0sCisgIDE2LCAweGE0MjAsIDAsIHsweDEwLDB4M2IsMHgwMCwweDBmLDB4YzAsMHgwYiwweGI0LDB4MDAsMHhmZCwweDAwLDB4M2YsMHhjNCwweDBmLDB4ZDAsMHgwMywweDkwIH0sCisgIDE2LCAweGE0MzAsIDAsIHsweDAyLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHgwNCwweGZiLDB4ODQsMHgzYSwweGMyIH0sCisgIDE2LCAweGE0NDAsIDAsIHsweDRjLDB4YjQsMHg5MywweDJjLDB4MDQsMHhlOSwweDAwLDB4M2EsMHhjNCwweDhkLDB4MDgsMHgwMywweDJlLDB4MDAsMHhjYiwweDAxIH0sCisgIDE2LCAweGE0NTAsIDAsIHsweDMyLDB4ODAsMHg4ZiwweGIyLDB4ODMsMHhlYywweDAwLDB4Y2IsMHg4MCwweDMyLDB4MDAsMHgwZiwweGY5LDB4MDMsMHgzYywweDEwIH0sCisgIDE2LCAweGE0NjAsIDAsIHsweGRmLDB4ODEsMHhiMywweGUwLDB4OGMsMHhhMCwweDAzLDB4ZWEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE0NzAsIDAsIHsweDQ4LDB4MTEsMHg5NCwweDA4LDB4YjcsMHgwNCwweDI0LDB4YzgsMHgxYSwweDMwLDB4NGEsMHgxZCwweDAwLDB4YjcsMHgwMSwweDJkIH0sCisgIDE2LCAweGE0ODAsIDAsIHsweGMwLDB4ODgsMHg3MCwweDA2LDB4MWMsMHgwMCwweDgyLDB4MDAsMHgyMSwweDgwLDB4NGIsMHg3NiwweDEyLDB4ZGMsMHgwMCwweDg3IH0sCisgIDE2LCAweGE0OTAsIDAsIHsweDAwLDB4MjksMHg0MCwweDhiLDB4NDAsMHgwMiwweDEwLDB4MDAsMHhiYywweDAwLDB4MjAsMHgwMSwweDI4LDB4NzAsMHgwMywweGIyIH0sCisgIDE2LCAweGE0YTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWEsMHgwMCwweGIzLDB4OTAsMHgyZCwweGU0IH0sCisgIDE2LCAweGE0YjAsIDAsIHsweDA5LDB4NzksMHgwMiwweDFlLDB4ODAsMHhhNywweDgwLDB4MmMsMHhlOCwweDE5LDB4ZjgsMHgxMiwweDVlLDB4MDEsMHg4NywweDgwIH0sCisgIDE2LCAweGE0YzAsIDAsIHsweDI1LDB4ZTAsMHg0YiwweDc4LDB4MDYsMHhkMiwweDAwLDB4OTcsMHg4MCwweDIxLDB4NjIsMHgwYiwweDNhLDB4MDIsMHgxZSwweDAwIH0sCisgIDE2LCAweGE0ZDAsIDAsIHsweGI3LDB4ODYsMHgyOSwweGYwLDB4MDgsMHg2OCwweDA2LDB4ZTAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE0ZTAsIDAsIHsweDQ4LDB4MTQsMHhjZiwweGMwLDB4YjMsMHgwMCwweDI0LDB4YzAsMHg4YSwweDMwLDB4MzIsMHgwYywweDAwLDB4YjMsMHgwOCwweDJjIH0sCisgIDE2LCAweGE0ZjAsIDAsIHsweGMwLDB4MDgsMHgzMCwweDEyLDB4MGUsMHgyMCwweDgzLDB4MDAsMHgyNCwweGYxLDB4MGIsMHgzMCwweDA2LDB4Y2UsMHgwMCwweDgzIH0sCisgIDE2LCAweGE1MDAsIDAsIHsweDkwLDB4MjgsMHg2MCwweDBiLDB4MDAsMHgyYSwweDIxLDB4ODAsMHhiMCwweDA4LDB4MjgsMHgwMCwweDA4LDB4MzcsMHgwMiwweDkyIH0sCisgIDE2LCAweGE1MTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YjksMHgwMCwweGZhLDB4MDAsMHgzZSwweDgwIH0sCisgIDE2LCAweGE1MjAsIDAsIHsweDRkLDB4YTAsMHgwMywweDI4LDB4MDAsMHhlZSwweDQxLDB4M2UsMHg4MCwweDBkLDB4ZTAsMHgwMywweDc4LDB4MDAsMHg4ZSwweDQwIH0sCisgIDE2LCAweGE1MzAsIDAsIHsweDI3LDB4YTgsMHgwYiwweGEwLDB4MDMsMHhmYiwweDAyLDB4Y2EsMHg4MiwweDMzLDB4YTAsMHgwZiwweGEwLDB4MTMsMHgyOSwweDAwIH0sCisgIDE2LCAweGE1NDAsIDAsIHsweGZhLDB4NDAsMHgzYSwweDgwLDB4MGMsMHg2YywweDAzLDB4ZmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE1NTAsIDAsIHsweDQ4LDB4MDAsMHhjMCwweDAwLDB4ZjgsMHgwMCwweDNhLDB4MDAsMHgwYywweDgwLDB4MDMsMHhlMCwweDA4LDB4ZjgsMHgwMCwweDNlIH0sCisgIDE2LCAweGE1NjAsIDAsIHsweDAwLDB4OGYsMHg4MCwweDIzLDB4YTAsMHg0MiwweGY4LDB4MDksMHhiYSwweDEwLDB4NGYsMHg4MCwweDAzLDB4ZTAsMHg2MCwweGY4IH0sCisgIDE2LCAweGE1NzAsIDAsIHsweDAwLDB4M2UsMHgyMCwweDBmLDB4YzAsMHgwMywweGYwLDB4MDAsMHhmYywweDAwLDB4MjcsMHgwMCwweDhmLDB4ODAsMHgwMywweDkyIH0sCisgIDE2LCAweGE1ODAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTUsMHgwMCwweDg5LDB4MDAsMHgzZSwweDQwIH0sCisgIDE2LCAweGE1OTAsIDAsIHsweDZlLDB4OTAsMHgwMywweGE0LDB4MDgsMHhjOSwweDAwLDB4M2MsMHg0MCwweDBkLDB4OTAsMHgwMywweDI0LDB4MTAsMHhmOSwweGEwIH0sCisgIDE2LCAweGE1YTAsIDAsIHsweDMyLDB4NDIsMHgwYywweDkwLDB4MTMsMHhjNCwweDAwLDB4YzksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDQwIH0sCisgIDE2LCAweGE1YjAsIDAsIHsweGM5LDB4MjAsMHgzZSwweDUyLDB4Y2YsMHg5MCwweDA5LDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE1YzAsIDAsIHsweDgwLDB4MDQsMHg2NiwweDAwLDB4ODksMHgwNCwweDJlLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDAwLDB4ZDksMHgwMCwweDNhIH0sCisgIDE2LCAweGE1ZDAsIDAsIHsweDQxLDB4MDgsMHg5MCwweDA1LDB4YTQsMHgwMCwweGI5LDB4NDAsMHhhMiwweDQwLDB4MGQsMHg5MCwweDAyLDB4ZTUsMHg0NiwweDg5IH0sCisgIDE2LCAweGE1ZTAsIDAsIHsweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgxMiwweGU1LDB4MDAsMHhhOSwweGM4LDB4MmUsMHg2MSwweDhiLDB4OTQsMHg0MiwweDIwIH0sCisgIDE2LCAweGE1ZjAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4MjQsMHgwMCwweGE5LDB4MDAsMHg2YywweDQwIH0sCisgIDE2LCAweGE2MDAsIDAsIHsweDQ4LDB4MTAsMHgyMiwweDg0LDB4MDMsMHhhOSwweDAwLDB4MmUsMHg0MCwweDA5LDB4OTAsMHgwMiwweGU0LDB4MDQsMHhiMSwweDA4IH0sCisgIDE2LCAweGE2MTAsIDAsIHsweDI4LDB4NDAsMHgxOCwweDk4LDB4MDIsMHhlNSwweDAwLDB4ODksMHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhmNCwweDIwIH0sCisgIDE2LCAweGE2MjAsIDAsIHsweDhkLDB4MDAsMHgyZiwweDQwLDB4MGIsMHg5NCwweDQyLDB4ODYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE2MzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4YTEsMHgyNCwweDJjLDB4NDgsMHgxOCwweDEyLDB4MDIsMHgwNCwweDgwLDB4YTEsMHgwMCwweDI4IH0sCisgIDE2LCAweGE2NDAsIDAsIHsweDQ4LDB4MDgsMHgxMCwweDAyLDB4ODQsMHgwMCwweDkxLDB4MjAsMHgyMCwweDQ4LDB4MDksMHgxMiwweDAyLDB4YzQsMHg5NCwweDgxIH0sCisgIDE2LCAweGE2NTAsIDAsIHsweDAwLDB4MmMsMHg2MSwweDBiLDB4NWEsMHg4MiwweGQ0LDB4YTAsMHhhNSwweDI4LDB4MmQsMHg0YSwweDBiLDB4OTAsMHgwMiwweDgyIH0sCisgIDE2LCAweGE2NjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMiwweGU4LDB4NTAsMHgyZSwweDE0IH0sCisgIDE2LCAweGE2NzAsIDAsIHsweDBlLDB4ODUsMHgwMywweGExLDB4NDAsMHhhOCwweDUwLDB4M2UsMHgxNCwweDBkLDB4ODUsMHgwMSwweDgxLDB4NDAsMHhmOCwweDUyIH0sCisgIDE2LCAweGE2ODAsIDAsIHsweDMyLDB4OTQsMHgwYywweDgwLDB4MTMsMHhjMSwweDQyLDB4YzAsMHg1MSwweDNlLDB4MDAsMHg4ZiwweDgyLDB4MDMsMHhlMCwweDgwIH0sCisgIDE2LCAweGE2OTAsIDAsIHsweGM4LDB4MjAsMHgzZiwweDA4LDB4MGYsMHg4MCwweDAzLDB4YWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE2YTAsIDAsIHsweDk4LDB4MTksMHhmNCwweDUwLDB4ZDksMHgxMSwweDNlLDB4NDQsMHg4ZiwweDkxLDB4NDMsMHhlNCwweDQwLDB4ZGQsMHgwMCwweDNhIH0sCisgIDE2LCAweGE2YjAsIDAsIHsweDQ0LDB4NGYsMHhkMCwweDI3LDB4YjQsMHgwMCwweGZkLDB4MTIsMHgzZiwweDQ0LDB4NGYsMHg5MSwweDQzLDB4ZjQsMHg0MCwweGZkIH0sCisgIDE2LCAweGE2YzAsIDAsIHsweDAwLDB4M2YsMHg0MSwweDBmLDB4OTIsMHg4MywweGU0LDB4YTAsMHhmOSwweDI4LDB4M2UsMHg0YSwweDBmLDB4ZDAsMHgwMywweDY2IH0sCisgIDE2LCAweGE2ZDAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDExLDB4ZjYsMHg4MCwweGU5LDB4YzAsMHgzZSwweDc4IH0sCisgIDE2LCAweGE2ZTAsIDAsIHsweDhmLDB4OWIsMHgwMywweGE3LDB4ODAsMHhjOSwweDQwLDB4MzYsMHg3OCwweDBmLDB4MTAsMHgyMywweGU1LDB4MDQsMHhkZCwweGE0IH0sCisgIDE2LCAweGE2ZjAsIDAsIHsweDMzLDB4NjIsMHgwZiwweGRhLDB4MDMsMHhmNiwweDYwLDB4YzksMHgxMCwweDMzLDB4NDAsMHgwZSwweDk4LDB4OTMsMHhlNiwweDMwIH0sCisgIDE2LCAweGE3MDAsIDAsIHsweGM5LDB4YzksMHgzMiwweDc4LDB4OGMsMHhkMCwweDBiLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE3MTAsIDAsIHsweDM4LDB4MTAsMHhlMCwweDAwLDB4ODgsMHhlMiwweDJlLDB4MzAsMHgwYiwweDg4LDB4NDIsMHgyMywweDQwLDB4YTAsMHhhMSwweDIyIH0sCisgIDE2LCAweGE3MjAsIDAsIHsweDM4LDB4MGIsMHg4YSwweDAyLDB4ZTIsMHg4MCwweGFhLDB4ZTAsMHgyMiwweDMwLDB4MGIsMHg4MCwweDIzLDB4YWIsMHgwMiwweDg4IH0sCisgIDE2LCAweGE3MzAsIDAsIHsweGEwLDB4MmEsMHgwMCwweDBiLDB4OGMsMHgwMiwweGUzLDB4MDAsMHg4OCwweGUwLDB4MjMsMHgzOCwweDA4LDB4ODAsMHgwMiwweDBlIH0sCisgIDE2LCAweGE3NDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzUsMHgwMCwweGExLDB4NDQsMHgyOCwweDU4IH0sCisgIDE2LCAweGE3NTAsIDAsIHsweDQzLDB4MTYsMHgyMiwweDg0LDB4ODEsMHg4MSwweDIwLDB4MmMsMHg1OCwweDQ5LDB4MTAsMHg4MCwweGM0LDB4ODEsMHg5MSwweDQ4IH0sCisgIDE2LCAweGE3NjAsIDAsIHsweDZjLDB4NGEsMHgwYiwweDE0LDB4MDIsMHg0NCwweDg0LDB4ODEsMHgwMSwweDYwLDB4NDAsMHgwYSwweDUyLDB4ODYsMHhkNCwweGEwIH0sCisgIDE2LCAweGE3NzAsIDAsIHsweDg1LDB4MDAsMHhhMSwweDUwLDB4NjgsMHg5MCwweDA2LDB4ZDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE3ODAsIDAsIHsweDE4LDB4MDUsMHhhNiwweDAwLDB4ODksMHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgwNCwweDAwLDB4YTksMHg2MCwweDIyIH0sCisgIDE2LCAweGE3OTAsIDAsIHsweDQwLDB4MGIsMHg5NSwweDAyLDB4ZTQsMHgxMCwweGIxLDB4MDAsMHg0ZSwweDQwLDB4MGIsMHg5MCwweDY2LDB4YWMsMHg4MCwweDg5IH0sCisgIDE2LCAweGE3YTAsIDAsIHsweDAwLDB4MmEsMHg2MCwweDBiLDB4OTAsMHg1MiwweGY0LDB4MDAsMHg4NSwweDAwLDB4MjEsMHg0MCwweDA4LDB4OTAsMHgwMiwweGM2IH0sCisgIDE2LCAweGE3YjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDA1LDB4ZTYsMHgyMCwweGU5LDB4MDAsMHgzZSwweDQwIH0sCisgIDE2LCAweGE3YzAsIDAsIHsweDBmLDB4OTAsMHgwMywweGE0LDB4MTAsMHhjOSwweDAwLDB4MzYsMHg0MCwweDBmLDB4OTQsMHgwMSwweGU1LDB4MjAsMHhkOSwweDQwIH0sCisgIDE2LCAweGE3ZDAsIDAsIHsweGJhLDB4NjgsMHg4ZiwweDkwLDB4MDcsMHhlNiwweDAwLDB4YzksMHgxMCwweDMyLDB4NjIsMHgwZSwweDkwLDB4MDIsMHhlNCwweDE4IH0sCisgIDE2LCAweGE3ZTAsIDAsIHsweGM5LDB4MDAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDAzLDB4ZTgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE3ZjAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwNCwweDNlLDB4NDAsMHgwYiwweDkwLDB4MDMsMHg2NCwweDAwLDB4ZjksMHgwMCwweDNlIH0sCisgIDE2LCAweGE4MDAsIDAsIHsweDQwLDB4OGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGU5LDB4MDIsMHg3MiwweDY4LDB4MGYsMHg5MCwweDAzLDB4ZTYsMHgwMCwweGY5IH0sCisgIDE2LCAweGE4MTAsIDAsIHsweDAxLDB4M2UsMHg0MiwweDBmLDB4OTAsMHgwMywweGM0LDB4MDIsMHhmOSwweDA0LDB4M2UsMHg0MCwweDRmLDB4OTAsMHgwMywweDFhIH0sCisgIDE2LCAweGE4MjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAwLDB4ODAsMHgwMiwweGM4LDB4MDAsMHgzMiwweDAwIH0sCisgIDE2LCAweGE4MzAsIDAsIHsweDBjLDB4ODAsMHgwMywweDYwLDB4MDAsMHhjOCwweDQwLDB4MzYsMHgwMCwweDBmLDB4ODQsMHgwMywweGEwLDB4MDAsMHhkOCwweDUwIH0sCisgIDE2LCAweGE4NDAsIDAsIHsweGIyLDB4MTAsMHg4YywweDgxLDB4MDMsMHhjMSwweDIwLDB4YzgsMHgwMCwweDNlLDB4MDAsMHgwZiwweGMwLDB4MTMsMHhmMCwweDA0IH0sCisgIDE2LCAweGE4NTAsIDAsIHsweDRjLDB4MDAsMHgzZiwweDAwLDB4MGYsMHg4MCwweDAzLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE4NjAsIDAsIHsweDI4LDB4MTUsMHgyYSwweDAwLDB4OGEsMHgwNCwweDIyLDB4ODEsMHgyOCwweGEwLDB4MTIsMHgyOCwweDAwLDB4OGEsMHgwMSwweDM2IH0sCisgIDE2LCAweGE4NzAsIDAsIHsweDgwLDB4MGIsMHhhMCwweDEwLDB4MjgsMHgxMCwweGNlLDB4MDEsMHgyMywweDgxLDB4MGMsMHhhOCwweDEyLDB4ZmIsMHgwMCwweDhhIH0sCisgIDE2LCAweGE4ODAsIDAsIHsweDAxLDB4M2IsMHg4MCwweDgzLDB4YTAsMHg0MiwweGU4LDB4MTAsMHg4YSwweDAwLDB4MmYsMHg4MCwweDBiLDB4NjAsMHg0MiwweDBhIH0sCisgIDE2LCAweGE4OTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweDgzLDB4MDAsMHhhMCwweGMwIH0sCisgIDE2LCAweGE4YTAsIDAsIHsweDE4LDB4YjAsMHgwMCwweGNjLDB4MDAsMHg5YiwweDAwLDB4MjQsMHhjMCwweDBiLDB4MzAsMHgwNiwweDZjLDB4MDAsMHhhMywweDA4IH0sCisgIDE2LCAweGE4YjAsIDAsIHsweDI4LDB4YzgsMHgwOSwweDMwLDB4MDIsMHhjYywweDQzLDB4OGIsMHgwMCwweDJjLDB4ODAsMHgwYiwweDMwLDB4MDIsMHhjYywweDAyIH0sCisgIDE2LCAweGE4YzAsIDAsIHsweDgzLDB4MDEsMHgyYywweGMwLDB4NGIsMHgzMCwweDAwLDB4NGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE4ZDAsIDAsIHsweGEwLDB4MDEsMHgwYywweDI0LDB4ODcsMHg5NCwweDIxLDB4ZTQsMHgxOCwweDMxLDB4MDIsMHhkYywweDgwLDB4OTcsMHgxMCwweDI1IH0sCisgIDE2LCAweGE4ZTAsIDAsIHsweGNkLDB4MGIsMHhmMiwweDAyLDB4N2MsMHgwMCwweGEwLDB4MDAsMHgyOCwweGUwLDB4MTgsMHg3MCwweDAyLDB4ZGMsMHgwMSwweDg3IH0sCisgIDE2LCAweGE4ZjAsIDAsIHsweDM0LDB4MjksMHg0MCwweDA5LDB4NDAsMHgwMiwweGQwLDB4MDQsMHg4NCwweDA0LDB4MmQsMHgwMCwweDRiLDB4ZDAsMHgyMiwweDY4IH0sCisgIDE2LCAweGE5MDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MTYsMHgwMCwweGNmLDB4YTAsMHg3MCwweGU5IH0sCisgIDE2LCAweGE5MTAsIDAsIHsweDE4LDB4N2IsMHgwMywweGZmLDB4NDAsMHg5NywweGEwLDB4MzUsMHhlOCwweDBmLDB4NzQsMHgwMiwweDVlLDB4MjAsMHhlNCwweDgwIH0sCisgIDE2LCAweGE5MjAsIDAsIHsweDM5LDB4YTAsMHgyZCwweDc4LDB4MDMsMHhmZSwweDAwLDB4YzcsMHg4MCwweDNkLDB4ZTAsMHg1ZiwweDY4LDB4NDMsMHhjMiwweDAwIH0sCisgIDE2LCAweGE5MzAsIDAsIHsweGM0LDB4ODQsMHgxZCwweDYwLDB4MGYsMHg3OCwweDAzLDB4NmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE5NDAsIDAsIHsweDA4LDB4MGQsMHhhNCwweDAwLDB4M2IsMHgwMCwweDJlLDB4ZDgsMHgwZiwweGI0LDB4MDMsMHgyZCwweDhhLDB4ZWIsMHg2MiwweDNhIH0sCisgIDE2LCAweGE5NTAsIDAsIHsweGQwLDB4MGYsMHhiMiwweDg3LDB4MGMsMHhkMCwweGQ4LDB4MDAsMHgzMiwweGMwLDB4NGYsMHg5MCwweDQzLDB4ZWMsMHgwMCwweGZiIH0sCisgIDE2LCAweGE5NjAsIDAsIHsweDA4LDB4M2UsMHg0MCwweDhmLDB4OTAsMHgwMywweGZjLDB4MDAsMHhmZiwweDA0LDB4M2YsMHg4MCwweDBmLDB4MDAsMHgyYiwweDgyIH0sCisgIDE2LCAweGE5NzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZjYsMHgwMCwweGZmLDB4YTAsMHgzZSwweGY0IH0sCisgIDE2LCAweGE5ODAsIDAsIHsweDBlLDB4YjgsMHgwMywweGVlLDB4MDgsMHg0YiwweGYwLDB4N2YsMHhmNCwweDBjLDB4ZjksMHgyMywweGVlLDB4NDgsMHg3OCwweDkwIH0sCisgIDE2LCAweGE5OTAsIDAsIHsweDMyLDB4ZTQsMHgwYywweGY5LDB4MDMsMHhmZSwweDAwLDB4ZmYsMHg4MCwweDNmLDB4ZTQsMHgxYywweDc5LDB4MDMsMHgyZSwweDQwIH0sCisgIDE2LCAweGE5YTAsIDAsIHsweGZmLDB4ODAsMHgzMywweGUwLDB4MmMsMHg3OCwweDA3LDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE5YjAsIDAsIHsweGE4LDB4MTEsMHg5NCwweDAwLDB4YjMsMHgwMCwweDBjLDB4ZTUsMHgwYiwweDM4LDB4MDIsMHhmZSwweDgwLDB4OGYsMHg4MCwweDYxIH0sCisgIDE2LCAweGE5YzAsIDAsIHsweGM0LDB4MjgsMHg3OCwweDAwLDB4NGUsMHgwMCwweGY0LDB4ODQsMHgyNSwweGE4LDB4MGMsMHg3MCwweDAyLDB4Y2MsMHgwNCwweGIzIH0sCisgIDE2LCAweGE5ZDAsIDAsIHsweDkwLDB4MjUsMHg0MCwweDBjLDB4NDEsMHg4MywweDUyLDB4NDAsMHhiNCwweDEwLDB4YTMsMHgwMCwweDBjLDB4NTIsMHgwMywweDZhIH0sCisgIDE2LCAweGE5ZTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTQsMHgwMCwweGI3LDB4MjEsMHg2ZCwweGM4IH0sCisgIDE2LCAweGE5ZjAsIDAsIHsweDRiLDB4NzAsMHgwMiwweGRjLDB4NDIsMHhhNywweDMxLDB4MjksMHhjNCwweDA4LDB4NzIsMHgwMiwweGRjLDB4MDAsMHhiNywweDI4IH0sCisgIDE2LCAweGFhMDAsIDAsIHsweDI0LDB4ODAsMHgwOCwweDcwLDB4MDYsMHhkNCwweDIwLDB4YjcsMHgwMSwweDJkLDB4YzEsMHgwOCwweDYwLDB4MDIsMHg1MCwweDgwIH0sCisgIDE2LCAweGFhMTAsIDAsIHsweGI0LDB4MDgsMHgyMSwweDYyLDB4MDksMHg3NCwweDA2LDB4ODAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFhMjAsIDAsIHsweDIwLDB4MTQsMHhjNywweDA0LDB4YjMsMHgwMCwweDJjLDB4YzAsMHgwYiwweGIwLDB4MDIsMHhjYywweDAwLDB4YTMsMHgwMiwweDYwIH0sCisgIDE2LCAweGFhMzAsIDAsIHsweGMwLDB4MDgsMHgzOCwweDAyLDB4NGUsMHg0NCwweGEwLDB4YzAsMHgyNCwweDkxLDB4MDgsMHgzMCwweDAyLDB4YzAsMHgwMCwweGIzIH0sCisgIDE2LCAweGFhNDAsIDAsIHsweDAwLDB4MjQsMHg2MCwweDA4LDB4MWMsMHgwMiwweDRjLDB4ODgsMHhiMywweGMwLDB4MjAsMHhhMCwweDA4LDB4MDAsMHgwYSwweDg4IH0sCisgIDE2LCAweGFhNTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YWMsMHgwMCwweGZmLDB4MDAsMHgyZiwweGMwIH0sCisgIDE2LCAweGFhNjAsIDAsIHsweDRmLDB4ZjAsMHgxMywweGZjLDB4MDgsMHhlNywweDhhLDB4M2YsMHhjMCwweDBjLDB4ZjUsMHhjMiwweGZlLDB4MTAsMHhiYiwweGMwIH0sCisgIDE2LCAweGFhNzAsIDAsIHsweDMyLDB4ZDQsMHgwYywweDMwLDB4MTMsMHhlMywweDA0LDB4YmYsMHgwMCwweDJlLDB4NjIsMHgwOCwweGI5LDB4MDIsMHg2ZSwweDAwIH0sCisgIDE2LCAweGFhODAsIDAsIHsweGZiLDB4MDEsMHgzMiwweGE0LDB4NGQsMHg5NCwweDAyLDB4YWIsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFhOTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDYwLDB4ZmIsMHgwMCwweDFlLDB4YzAsMHgwZiwweGIwLDB4MTMsMHhlYywweDAwLDB4NWIsMHgwMCwweDNhIH0sCisgIDE2LCAweGFhYTAsIDAsIHsweGMwLDB4MGYsMHhiMCwweDQxLDB4ZWMsMHgwMCwweDdiLDB4NDUsMHhiYSwweDQwLDB4MmUsMHhiMCwweDE1LDB4ZTAsMHgwMSwweGZiIH0sCisgIDE2LCAweGFhYjAsIDAsIHsweDAwLDB4M2UsMHg1MCwweDBlLDB4YzAsMHgwMywweGYwLDB4NDAsMHhmYywweDIwLDB4M2YsMHg1MCwweDhmLDB4OTAsMHgwMSwweDYwIH0sCisgIDE2LCAweGFhYzAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZjQsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwIH0sCisgIDE2LCAweGFhZDAsIDAsIHsweDhmLDB4ZjAsMHgwMywweDFjLDB4MDIsMHhjZiwweDAwLDB4MzYsMHhjMCwweDBkLDB4ZjAsMHgwMywweDdjLDB4MDAsMHg3ZiwweDJhIH0sCisgIDE2LCAweGFhZTAsIDAsIHsweDNmLDB4ODAsMHgwZiwweGY4LDB4MTMsMHg5MCwweDIxLDB4Y2YsMHgwMCwweDNmLDB4NjIsMHgwYywweGUwLDB4MDMsMHgzMCwweDAwIH0sCisgIDE2LCAweGFhZjAsIDAsIHsweGY4LDB4MDAsMHgzZiwweDAwLDB4MGYsMHhkMCwweDAzLDB4ODAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFiMDAsIDAsIHsweDgxLDB4MDQsMHg2NCwweDExLDB4YmIsMHgwMCwweDJlLDB4YzAsMHgwYiwweGIwLDB4MDIsMHgyYywweDAwLDB4ZGIsMHgwNCwweDMyIH0sCisgIDE2LCAweGFiMTAsIDAsIHsweGMwLDB4MGUsMHhiMCwweDAyLDB4ZWMsMHgwMCwweGJiLDB4ODQsMHgyZSwweDQwLDB4MGIsMHhiOSwweDQyLDB4MjIsMHg0MiwweDhiIH0sCisgIDE2LCAweGFiMjAsIDAsIHsweDAxLDB4MmMsMHg3MiwweDBhLDB4OTAsMHg0MiwweDJjLDB4MDAsMHhiYiwweDAwLDB4MmUsMHhjMiwweDhmLDB4ODgsMHgwNiwweGUwIH0sCisgIDE2LCAweGFiMzAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAxLDB4MjQsMHgwMCwweGJiLDB4MDAsMHg2ZSwweGMwIH0sCisgIDE2LCAweGFiNDAsIDAsIHsweDQ4LDB4YjAsMHg0MiwweDJjLDB4MDAsMHg4YiwweDAwLDB4MjYsMHhjMCwweDBhLDB4YjAsMHgxMiwweGVjLDB4MDAsMHhiYiwweDQwIH0sCisgIDE2LCAweGFiNTAsIDAsIHsweDJlLDB4YzgsMHgwYiwweGIwLDB4MTIsMHgyYywweDAwLDB4OGIsMHgwMCwweDJlLDB4NDgsMHgwYSwweDMwLDB4MDIsMHg2YywweDAwIH0sCisgIDE2LCAweGFiNjAsIDAsIHsweGJiLDB4MDAsMHgyZSwweDgwLDB4NGIsMHg5OCwweDAyLDB4ZTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFiNzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDAwLDB4YjMsMHgwMCwweDZjLDB4YzIsMHg0YiwweDMxLDB4MDIsMHgwYywweDUwLDB4OWIsMHgyMCwweDIwIH0sCisgIDE2LCAweGFiODAsIDAsIHsweGMwLDB4MGEsMHgzMiwweDEyLDB4Y2MsMHg4MCwweGIzLDB4MDAsMHg2YywweDBjLDB4MGIsMHgzMSwweDAyLDB4MGMsMHg0MiwweDgzIH0sCisgIDE2LCAweGFiOTAsIDAsIHsweDA4LDB4MmUsMHg0MCwweDBhLDB4MDAsMHgwMiwweDAwLDB4ODAsMHhiMCwweDAwLDB4MmMsMHg0MSwweDBiLDB4MTAsMHgwMiwweDQyIH0sCisgIDE2LCAweGFiYTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjQsMHgwMCwweGJiLDB4NDAsMHgzZiwweGNjIH0sCisgIDE2LCAweGFiYjAsIDAsIHsweDBlLDB4ZjAsMHg4MywweDNkLDB4YTAsMHhjZiwweDIwLDB4MzcsMHhjMCwweDBjLDB4ZjcsMHhjMywweGZkLDB4NDgsMHhmMywweDAwIH0sCisgIDE2LCAweGFiYzAsIDAsIHsweDNlLDB4ODgsMHgwZiwweGI0LDB4MTMsMHhhNSwweDAwLDB4OGYsMHgzMCwweDNlLDB4NDAsMHgwYywweGEwLDB4MDMsMHg2MCwweDgwIH0sCisgIDE2LCAweGFiZDAsIDAsIHsweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg5MCwweDIzLDB4YzAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFiZTAsIDAsIHsweGEwLDB4MTksMHhmNCwweDAwLDB4ZmYsMHgyOSwweDNmLDB4YzksMHgwZiwweGYwLDB4MTMsMHhmYywweDk0LDB4ZWYsMHgxMiwweDNiIH0sCisgIDE2LCAweGFiZjAsIDAsIHsweGMwLDB4OGUsMHhiMiwweDA3LDB4ZmQsMHgwNCwweGZmLDB4MTAsMHgzZiwweDBjLDB4MGYsMHhmMCwweDAzLDB4ZjAsMHgwMCwweGZiIH0sCisgIDE2LCAweGFjMDAsIDAsIHsweDIwLDB4M2QsMHg0MCwweDBmLDB4ZDAsMHg0MywweGZjLDB4NDAsMHhmZiwweDA0LDB4M2YsMHhjMCwweDBlLDB4YzAsMHg0MywweGU4IH0sCisgIDE2LCAweGFjMTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHhhMiwweGM3LDB4MjAsMHgzZiwweDI0IH0sCisgIDE2LCAweGFjMjAsIDAsIHsweDBjLDB4ZjAsMHgwMywweDNjLDB4ODAsMHhjYywweDA5LDB4MzMsMHhkMSwweDBjLDB4ZjEsMHgyMywweGZjLDB4MjAsMHhkZiwweDM2IH0sCisgIDE2LCAweGFjMzAsIDAsIHsweDNmLDB4YzAsMHgwZSwweDQ4LDB4MDMsMHhmZSwweDAwLDB4ZmYsMHg4MCwweDM3LDB4ZTQsMHgwZCwweDc4LDB4MDMsMHgxMSwweGEwIH0sCisgIDE2LCAweGFjNDAsIDAsIHsweGNmLDB4MDAsMHgzNywweGM4LDB4MGMsMHhmMCwweDAzLDB4MzAsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFjNTAsIDAsIHsweDgwLDB4MTAsMHhmZiwweDAwLDB4OGYsMHhkMSwweDJlLDB4MDgsMHgwZCwweGI2LDB4MTIsMHgzZCwweDQ1LDB4ZjksMHg2NCwweDI3IH0sCisgIDE2LCAweGFjNjAsIDAsIHsweGQwLDB4ODgsMHhiYSwweDE0LDB4Y2MsMHgwNCwweDhmLDB4NDAsMHgyMywweGYwLDB4MGIsMHg4OCwweDAyLDB4MmUsMHgwNCwweGJiIH0sCisgIDE2LCAweGFjNzAsIDAsIHsweDgwLDB4YWUsMHhjMCwweDA4LDB4YjgsMHgwYSwweDIxLDB4MDAsMHg4OCwweGQwLDB4MjIsMHgyMCwweDI4LDB4YjAsMHgwMiwweDIwIH0sCisgIDE2LCAweGFjODAsIDAsIHsweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwMCwweDkzLDB4MDAsMHgyZSwweDAwIH0sCisgIDE2LCAweGFjOTAsIDAsIHsweDBhLDB4MzQsMHg4MiwweDhjLDB4YTAsMHhhMCwweDA4LDB4MjQsMHhkOCwweDA5LDB4MzEsMHgwMiwweGNjLDB4MjAsMHhiMywweDMyIH0sCisgIDE2LCAweGFjYTAsIDAsIHsweDI4LDB4ZDAsMHg0YSwweDgwLDB4MDIsMHhjYywweDBjLDB4YmIsMHgwMCwweDIyLDB4NDAsMHg4OSwweGIwLDB4MDIsMHg2MCwweDgwIH0sCisgIDE2LCAweGFjYjAsIDAsIHsweDkzLDB4MDAsMHgyNCwweGQwLDB4MGIsMHgzMCwweDAyLDB4YTIsMHgwMSwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFjYzAsIDAsIHsweGMwLDB4MTEsMHhhYywweDAwLDB4OWIsMHgwMCwweDJlLDB4MjAsMHgwOSwweGIwLDB4NGEsMHgyYywweDAyLDB4YTAsMHgwMCwweDA2IH0sCisgIDE2LCAweGFjZDAsIDAsIHsweGMwLDB4MDksMHhiMCwweDAwLDB4ZWMsMHgwMCwweGFiLDB4MDAsMHgyYSwweGMwLDB4MGIsMHg4OCwweDAyLDB4NmMsMHgwMCwweGJiIH0sCisgIDE2LCAweGFjZTAsIDAsIHsweDIwLDB4MmEsMHhlMiwweDQxLDB4YjgsMHgyYSwweDYwLDB4MGEsMHg5OCwweDAwLDB4MjYsMHgwMCwweDBiLDB4YjAsMHgwMiwweGI4IH0sCisgIDE2LCAweGFjZjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwOCwweGRiLDB4MDIsMHgzZSwweDIwIH0sCisgIDE2LCAweGFkMDAsIDAsIHsweDRjLDB4YjAsMHgwMywweDJjLDB4MDIsMHg4YiwweDIwLDB4MTIsMHhjMCwweDI5LDB4YjAsMHgxMiwweGVjLDB4MDAsMHhmYiwweDAwIH0sCisgIDE2LCAweGFkMTAsIDAsIHsweDNhLDB4YzAsMHgwZSwweDg4LDB4MDMsMHhlZCwweDIwLDB4ZmIsMHhjOCwweDM0LDB4ZjAsMHgwZCwweGJhLDB4MDMsMHg0NywweDYwIH0sCisgIDE2LCAweGFkMjAsIDAsIHsweGM5LDB4MDAsMHgzNiwweDQwLDB4MGYsMHhiMCwweDBiLDB4OTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFkMzAsIDAsIHsweGUwLDB4MDEsMHg5YywweDAwLDB4ZWYsMHgwMCwweDBmLDB4MDAsMHgwZiwweDMwLDB4MDAsMHhmYywweDAwLDB4ZGYsMHg5MCwweGJiIH0sCisgIDE2LCAweGFkNDAsIDAsIHsweGMwLDB4Y2UsMHhmMCwweDAzLDB4ZmMsMHgwNCwweGNiLDB4MDAsMHgxNywweGMwLDB4MGYsMHhjMCwweDAzLDB4YmMsMHg4NCwweGZmIH0sCisgIDE2LCAweGFkNTAsIDAsIHsweDAwLDB4MzcsMHhjMCwweDBlLDB4ZDAsMHg2MywweGI4LDB4MDAsMHhlYSwweDAwLDB4M2EsMHg4MCwweDBjLDB4MzAsMHgwMywweDcwIH0sCisgIDE2LCAweGFkNjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGZiLDB4MDIsMHgzMiwweDAwIH0sCisgIDE2LCAweGFkNzAsIDAsIHsweDBmLDB4YjAsMHg1MywweDJjLDB4MDAsMHhmYSwweDAwLDB4MzIsMHhjMCwweDhmLDB4YjAsMHgwNywweDJjLDB4MDAsMHhmYiwweDAwIH0sCisgIDE2LCAweGFkODAsIDAsIHsweGIyLDB4YzAsMHgwZiwweDgwLDB4MDcsMHhhYywweDgwLDB4ZGIsMHgyNCwweDdlLDB4ZDAsMHgwZSwweGIwLDB4MjMsMHg3NCwweDA0IH0sCisgIDE2LCAweGFkOTAsIDAsIHsweGRkLDB4MDgsMHhiNSwweDQwLDB4MGMsMHhiMCwweDAzLDB4MTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFkYTAsIDAsIHsweGM4LDB4MDUsMHgzYywweDAwLDB4YmYsMHhjMCwweGEwLDB4MDAsMHgxYiwweGYwLDB4MDIsMHgzZiwweDYwLDB4ZWEsMHg1MCwweDIzIH0sCisgIDE2LCAweGFkYjAsIDAsIHsweGMwLDB4MDgsMHhmYSwweDA3LDB4ZmMsMHgwMCwweGRmLDB4MDAsMHg2MywweGMwLDB4NDgsMHgxOCwweDAyLDB4MmQsMHgwMCwweGIzIH0sCisgIDE2LCAweGFkYzAsIDAsIHsweDAwLDB4NmUsMHhjMCwweDBkLDB4M2EsMHgwMywweDI0LDB4MDAsMHg4MiwweDgwLDB4MzIsMHg4MCwweDBkLDB4ZjAsMHgwMywweDMyIH0sCisgIDE2LCAweGFkZDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgxNCwweGIzLDB4NTksMHgyMCwweDgwIH0sCisgIDE2LCAweGFkZTAsIDAsIHsweDA5LDB4MzAsMHgwMiwweDJlLDB4MDUsMHhiMCwweDQ0LDB4MmUsMHhjMCwweDA5LDB4MzQsMHg4MiwweGVjLDB4MDAsMHhhYiwweDA0IH0sCisgIDE2LCAweGFkZjAsIDAsIHsweDIwLDB4YzAsMHgwOSwweDIxLDB4YjIsMHg4ZSwweDA0LDB4OTMsMHhjMCwweDI0LDB4YzAsMHgwYSwweDE4LDB4MDYsMHg0YywweDAwIH0sCisgIDE2LCAweGFlMDAsIDAsIHsweDkyLDB4NTAsMHgyMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4NzAsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFlMTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDAwLDB4YjcsMHg4MCwweDYxLDB4ZTAsMHgwYiwweDc4LDB4MGEsMHg1ZSwweDAxLDB4YjEsMHhhMCwweDJkIH0sCisgIDE2LCAweGFlMjAsIDAsIHsweGUwLDB4MGEsMHg3OCwweDAyLDB4NWUsMHgwMCwweDA3LDB4OTAsMHgyMSwweGUwLDB4MTgsMHhjOCwweDAyLDB4MWUsMHgwMCwweGI3IH0sCisgIDE2LCAweGFlMzAsIDAsIHsweDgwLDB4MmQsMHhlMCwweDhhLDB4ZDgsMHgwMiwweDNlLDB4YzAsMHg4NSwweDgwLDB4MjEsMHgyMCwweDE5LDB4NzgsMHgyMiwweDAwIH0sCisgIDE2LCAweGFlNDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweGYzLDB4OTQsMHgyMCwweDEwIH0sCisgIDE2LCAweGFlNTAsIDAsIHsweDRiLDB4MzAsMHgwNywweDBjLDB4MDAsMHhmMywweDAwLDB4M2UsMHhjOCwweDBmLDB4MzAsMHgwMywweGNjLDB4MDAsMHgyMywweDEwIH0sCisgIDE2LCAweGFlNjAsIDAsIHsweDAwLDB4Y2IsMHgwNSwweDIwLDB4MDIsMHg4YywweDYwLDB4OTMsMHgwYSwweDJlLDB4YzQsMHgwYSwweDAxLDB4MDcsMHg0YywweDgwIH0sCisgIDE2LCAweGFlNzAsIDAsIHsweGQyLDB4MDEsMHgzMCwweGMwLDB4MmMsMHgzMCwweDBiLDB4NWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFlODAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZmYsMHgwMSwweDBmLDB4NDAsMHgwZiwweGYwLDB4MTMsMHhiYywweDAwLDB4ZWYsMHgyNiwweDczIH0sCisgIDE2LCAweGFlOTAsIDAsIHsweGMyLDB4MGMsMHhiMCwweDgzLDB4YmMsMHg0MCwweGZmLDB4MTgsMHgzZCwweGMwLDB4NGEsMHhjMSwweDAzLDB4ZmMsMHgwMCwweGZiIH0sCisgIDE2LCAweGFlYTAsIDAsIHsweDEyLDB4M2YsMHhjNCwweDRkLDB4YzEsMHgwYiwweGZjLDB4ODEsMHhmZCwweDAwLDB4M2YsMHgyMCwweDBmLDB4ZjAsMHgwMywweGQwIH0sCisgIDE2LCAweGFlYjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHgyMCwweGNiLDB4NDgsMHgzZSwweDAwIH0sCisgIDE2LCAweGFlYzAsIDAsIHsweDBjLDB4YjAsMHgwMywweDJkLDB4MjAsMHhlOSwweDgwLDB4ZmEsMHhjOCwweDBkLDB4YjAsMHgwMywweGVlLDB4MDAsMHhkYiwweDI0IH0sCisgIDE2LCAweGFlZDAsIDAsIHsweDc2LDB4ZjMsMHg4ZSwweDgwLDB4MzMsMHhlYywweDQ0LDB4ZWIsMHgxMCwweDNlLDB4YzAsMHgwZiwweDkwLDB4MDMsMHhlOCwweDA0IH0sCisgIDE2LCAweGFlZTAsIDAsIHsweGRjLDB4MDAsMHhiMywweDYxLDB4MGMsMHhiMCwweDAzLDB4MmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFlZjAsIDAsIHsweDQ4LDB4MTEsMHg4ZCwweDAwLDB4ODcsMHgyMCwweDJmLDB4MDEsMHgyOCwweDcwLDB4MDIsMHgwYywweDg0LDB4OGQsMHgwNCwweDMxIH0sCisgIDE2LCAweGFmMDAsIDAsIHsweGNjLDB4YzksMHg3MiwweDAyLDB4ZGQsMHgwMCwweDM3LDB4MzMsMHgyMSwweGQ4LDB4MDgsMHg0MCwweDAyLDB4ZGMsMHgwMCwweGI3IH0sCisgIDE2LCAweGFmMTAsIDAsIHsweDIwLDB4M2QsMHhjMCwweDA5LDB4NTAsMHgyMiwweGYwLDB4MDAsMHg5NywweDAwLDB4MjEsMHg4MCwweDBhLDB4ZmMsMHgwMiwweDkyIH0sCisgIDE2LCAweGFmMjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4MWUsMHg4MiwweDg3LDB4YjAsMHgyZCwweDIwIH0sCisgIDE2LCAweGFmMzAsIDAsIHsweDA4LDB4MzksMHgwMiwweDFlLDB4NDEsMHhhNywweDgwLDB4MjQsMHhlMCwweDA5LDB4N2EsMHgzMiwweDhlLDB4ODIsMHgwNywweGEwIH0sCisgIDE2LCAweGFmNDAsIDAsIHsweDI1LDB4ZTAsMHg4YiwweDQ4LDB4MDIsMHgxZSwweDAwLDB4YTcsMHhlMSwweDJkLDB4ZTAsMHg0YiwweDU4LDB4MDAsMHhkYSwweDAwIH0sCisgIDE2LCAweGFmNTAsIDAsIHsweGEwLDB4ODAsMHgyNCwweDYwLDB4MDgsMHg3YSwweDAyLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFmNjAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDAwLDB4ODMsMHgwMCwweDJjLDB4MDAsMHgwOCwweDMwLDB4MDIsMHg4YywweDAwLDB4OTMsMHgwMCwweDIyIH0sCisgIDE2LCAweGFmNzAsIDAsIHsweGMxLDB4MDksMHgzMCwweDQyLDB4Y2MsMHgwMCwweDgzLDB4MDAsMHg2MCwweGMwLDB4MDgsMHgxYSwweDAyLDB4Y2UsMHgwNCwweGIzIH0sCisgIDE2LCAweGFmODAsIDAsIHsweGUwLDB4MjgsMHhhMCwweDA5LDB4MWMsMHg4MiwweDRiLDB4MDgsMHhhMywweDgwLDB4MjQsMHhhMCwweDJhLDB4MzAsMHgwMiwweDlhIH0sCisgIDE2LCAweGFmOTAsIDAsIHsweDA0LDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGNhLDB4MDAsMHgyZiwweDg4IH0sCisgIDE2LCAweGFmYTAsIDAsIHsweDBjLDB4YTAsMHgxMywweDI4LDB4MDAsMHhlZSwweDAwLDB4MmUsMHg4MCwweDJkLDB4YTAsMHgwMywweGU4LDB4MDAsMHhkYSwweDAwIH0sCisgIDE2LCAweGFmYjAsIDAsIHsweDc2LDB4ODAsMHgwZSwweGU4LDB4MDMsMHhiYiwweDgwLDB4ZWUsMHg0MCwweDJmLDB4YTIsMHg4ZiwweGU2LDB4MDMsMHhlYiwweDg2IH0sCisgIDE2LCAweGFmYzAsIDAsIHsweGZhLDB4ODAsMHgzNywweDgyLDB4MGMsMHgyMCwweDA3LDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFmZDAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHg0MCwweDFlLDB4MDAsMHgwZiwweDgwLDB4MGIsMHg2MSwweDAwLDB4ZTgsMHhjMCwweDNhIH0sCisgIDE2LCAweGFmZTAsIDAsIHsweDAwLDB4MGUsMHg4MCwweDAzLDB4ZTAsMHgwMSwweGY4LDB4MDAsMHg3ZSwweDEwLDB4MWUsMHg4MSwweDAzLDB4ZTAsMHgwOCwweGY4IH0sCisgIDE2LCAweGFmZjAsIDAsIHsweDAwLDB4M2UsMHgwMCwweDBkLDB4ODAsMHgwMywweGMwLDB4MjgsMHhkYywweDUwLDB4M2IsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH0sCisgIDE2LCAweGIwMDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4YzQsMHgwMiwweGM5LDB4MDAsMHgzZSwweDQyIH0sCisgIDE2LCAweGIwMTAsIDAsIHsweDBmLDB4MTAsMHgwMywweGE2LDB4MDAsMHhjOSwweDAxLDB4M2EsMHg0MCwweDBlLDB4OTQsMHgwMSwweGU0LDB4MTAsMHhmMSwweDA0IH0sCisgIDE2LCAweGIwMjAsIDAsIHsweDMyLDB4NDAsMHgwZiwweDlhLDB4MjMsMHgyMCwweDYwLDB4ZjgsMHgwNCwweDBhLDB4NDIsMHgwZSwweDkwLDB4MTMsMHgyNCwweDAwIH0sCisgIDE2LCAweGIwMzAsIDAsIHsweGMxLDB4MDAsMHgzMiwweDQwLDB4MGYsMHg5MCwweDAzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIwNDAsIDAsIHsweDgwLDB4MDQsMHg2NywweDA4LDB4YTksMHgwMCwweDZlLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyNywweDgyLDB4ODksMHgwMCwweDI2IH0sCisgIDE2LCAweGIwNTAsIDAsIHsweDQwLDB4MDgsMHg5YywweDAzLDB4YTQsMHgxMCwweGI5LDB4MDAsMHgzNiwweDQwLDB4OWIsMHgxYywweDFhLDB4MjMsMHgwNCwweGI4IH0sCisgIDE2LCAweGIwNjAsIDAsIHsweDAwLDB4M2EsMHg0MCwweDBlLDB4MTAsMHgwMiwweDI0LDB4MDIsMHhjOSwweGEwLDB4YTIsMHg0MCwweDBiLDB4OTAsMHgwYSwweDIwIH0sCisgIDE2LCAweGIwNzAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjUsMHg4MCwweDg5LDB4MDQsMHgyYywweDQwIH0sCisgIDE2LCAweGIwODAsIDAsIHsweDA4LDB4OTAsMHgwMiwweDg0LDB4ODEsMHg5OSwweDQwLDB4MmUsMHg0MCwweDFhLDB4OTAsMHgwNiwweGU0LDB4MDEsMHhiOSwweDAwIH0sCisgIDE2LCAweGIwOTAsIDAsIHsweGE2LDB4NDEsMHgxYiwweDkwLDB4ODIsMHgyMSwweDAwLDB4YjgsMHgxMCwweDJlLDB4NDAsMHgwYSwweDkyLDB4MGEsMHhhNCwweDAxIH0sCisgIDE2LCAweGIwYTAsIDAsIHsweDhmLDB4MjIsMHgyMywweDQwLDB4MGIsMHg5MCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIwYjAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4YTMsMHgyMCwweDJjLDB4NDEsMHgwOSwweDEyLDB4MDIsMHgwNCwweDgwLDB4ODEsMHgyMCwweDI0IH0sCisgIDE2LCAweGIwYzAsIDAsIHsweDQ4LDB4MGEsMHgzNiwweDAyLDB4YzQsMHg4MCwweGIxLDB4MjAsMHgwNCwweGM4LDB4NGIsMHgxNCwweDAyLDB4MDUsMHgwMCwweGIxIH0sCisgIDE2LCAweGIwZDAsIDAsIHsweDA1LDB4MjgsMHg1MCwweDBhLDB4OTAsMHgwMiwweDA1LDB4MDIsMHg4NSwweDAwLDB4MjEsMHg0MCwweDBiLDB4MTIsMHgwMiwweDAyIH0sCisgIDE2LCAweGIwZTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGM4LDB4MDAsMHg2ZSwweDE0IH0sCisgIDE2LCAweGIwZjAsIDAsIHsweDJjLDB4ODUsMHgwMiwweGExLDB4NDAsMHhjOCwweDUwLDB4M2EsMHgxNCwweDBlLDB4ODAsMHgwMiwweGUxLDB4NDAsMHhiMCwweDUwIH0sCisgIDE2LCAweGIxMDAsIDAsIHsweDMyLDB4MDAsMHgwYiwweDgwLDB4MDMsMHgyMCwweDAwLDB4ZmEsMHgwMCwweDNlLDB4MDAsMHgwZSwweDgwLDB4MDMsMHhhMCwweDAyIH0sCisgIDE2LCAweGIxMTAsIDAsIHsweGM4LDB4MDAsMHgxMywweDAwLDB4MGYsMHg4MiwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIxMjAsIDAsIHsweDk4LDB4MWQsMHhlNCwweDQ4LDB4ZjksMHgxNCwweDNmLDB4NDAsMHgwYywweDkxLDB4MDMsMHhlNCwweDQyLDB4ZmQsMHgxMCwweDM2IH0sCisgIDE2LCAweGIxMzAsIDAsIHsweDQ0LDB4MGQsMHg5MSwweDIzLDB4YTQsMHg0OCwweGY5LDB4MTEsMHgzOCwweDQ0LDB4MGYsMHhkMCwweDAzLDB4ZTUsMHgxNCwweDM5IH0sCisgIDE2LCAweGIxNDAsIDAsIHsweDQyLDB4N2IsMHg0MCwweDhlLDB4ZDAsMHgwMSwweGY1LDB4MDAsMHhhOSwweDQwLDB4M2UsMHg1MCwweDA3LDB4OTYsMHg4MywweGU2IH0sCisgIDE2LCAweGIxNTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4ZjYsMHg4MCwweGRkLDB4YWUsMHgzYSwweDUwIH0sCisgIDE2LCAweGIxNjAsIDAsIHsweDBkLDB4OWEsMHgwYiwweDc2LDB4ODAsMHhjZiwweDg4LDB4MzIsMHg3MCwweDJkLDB4ZGEsMHgwMywweGE3LDB4MDEsMHhlOSwweDkyIH0sCisgIDE2LCAweGIxNzAsIDAsIHsweDM3LDB4NjgsMHgwZCwweDk0LDB4MDMsMHhlNywweDAwLDB4ZWQsMHhhMCwweDNhLDB4NTAsMHgwZiwweGQwLDB4MDMsMHhlNywweDAyIH0sCisgIDE2LCAweGIxODAsIDAsIHsweGNkLDB4ODAsMHgzMywweDY4LDB4MGMsMHhkOCwweDgzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIxOTAsIDAsIHsweDM4LDB4MTAsMHhlMSwweDAwLDB4ODgsMHg0MCwweDIwLDB4MjAsMHgwYywweDhjLDB4MDIsMHgyMywweDAwLDB4ODgsMHhlMCwweDIyIH0sCisgIDE2LCAweGIxYTAsIDAsIHsweDMwLDB4MDgsMHg4NCwweDAyLDB4ZTMsMHgwMCwweGI4LDB4ZTAsMHgyMiwweDE0LDB4OGQsMHg4OCwweDAyLDB4ZTMsMHgwMCwweGI4IH0sCisgIDE2LCAweGIxYjAsIDAsIHsweDUwLDB4MmUsMHhhOCwweDhiLDB4ODAsMHgyMiwweGUzLDB4NDgsMHg4OCwweDUwLDB4MjIsMHgwMCwweDA4LDB4OGMsMHgwMiwweDBlIH0sCisgIDE2LCAweGIxYzAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHg0MCwweDkxLDB4MDAsMHgyYSwweDQ4IH0sCisgIDE2LCAweGIxZDAsIDAsIHsweDA5LDB4MTQsMHg4MiwweDA1LDB4MjAsMHg4MSwweDA4LDB4MjAsMHg1OCwweDA5LDB4MTEsMHgwMiwweDg1LDB4ODgsMHhiMSwweDQwIH0sCisgIDE2LCAweGIxZTAsIDAsIHsweGEwLDB4NDAsMHgwOCwweDEyLDB4MDIsMHhjNSwweDgwLDB4YTEsMHgwMCwweDI4LDB4NDAsMHgwYiwweDE4LDB4MDIsMHhjNCwweDg0IH0sCisgIDE2LCAweGIxZjAsIDAsIHsweGExLDB4MDAsMHgyNCwweDUwLDB4MDgsMHgxMCwweDkyLDB4MDMsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIyMDAsIDAsIHsweDE4LDB4MTUsMHhhYywweDEwLDB4OWIsMHgwMCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgwNCwweDA2LDB4ODksMHgwNCwweDIwIH0sCisgIDE2LCAweGIyMTAsIDAsIHsweDQwLDB4MDksMHg5MCwweDAyLDB4ZTQsMHgwMSwweGI5LDB4MDIsMHgyMiwweDQxLDB4ODksMHhhMCwweDgyLDB4ZTAsMHhhMCwweGI5IH0sCisgIDE2LCAweGIyMjAsIDAsIHsweDI4LDB4MmUsMHg0NCwweDBiLDB4YjAsMHgwMiwweGU0LDB4MDIsMHhiOSwweDAwLDB4MjYsMHg0MCwweDI4LDB4MTAsMHgwMiwweDA2IH0sCisgIDE2LCAweGIyMzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGQ5LDB4MDAsMHgzOCwweDQwIH0sCisgIDE2LCAweGIyNDAsIDAsIHsweDBkLDB4OTAsMHgwMywweDI0LDB4MDAsMHhjOSwweGEwLDB4YTIsMHg0MCwweDhkLDB4OTAsMHgwMywweGE0LDB4MDAsMHhmOSwweDAwIH0sCisgIDE2LCAweGIyNTAsIDAsIHsweDM2LDB4NDAsMHgwYywweDg0LDB4MTMsMHhlMiwweDAwLDB4ZTksMHgwMCwweDNhLDB4NTAsMHgwZiwweDljLDB4MDIsMHhlNiwweDg0IH0sCisgIDE2LCAweGIyNjAsIDAsIHsweGU5LDB4MDAsMHhiNiwweDQwLDB4MGMsMHg5MCwweDAzLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIyNzAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAwLDB4ZTEsMHgwMCwweDNlLDB4NjgsMHgwZSwweDEwLDB4MDMsMHhhNCwweDAwLDB4ZjEsMHgyOCwweDNhIH0sCisgIDE2LCAweGIyODAsIDAsIHsweDQwLDB4MGUsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQyLDB4MGYsMHg4MCwweDIzLDB4ZTIsMHgwMCwweGY5IH0sCisgIDE2LCAweGIyOTAsIDAsIHsweDAwLDB4M2UsMHg0MCwweDBmLDB4OTEsMHgyMywweGU0LDB4NDAsMHhjMSwweDAwLDB4M2EsMHg0MCwweDBmLDB4OTAsMHgwYiwweGNhIH0sCisgIDE2LCAweGIyYTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4ODAsMHgwMCwweGM4LDB4MDAsMHgzMiwweDAwIH0sCisgIDE2LCAweGIyYjAsIDAsIHsweDBjLDB4ODAsMHgwMywweGEwLDB4MjAsMHhjOCwweDQwLDB4M2UsMHgwMCwweDBlLDB4ODEsMHg2MywweDYwLDB4MDAsMHhmMCwweDA0IH0sCisgIDE2LCAweGIyYzAsIDAsIHsweDNjLDB4MDEsMHgwYywweDg0LDB4MDMsMHhlMCwweDAwLDB4YzgsMHgwMCwweDNlLDB4MDAsMHgwZSwweDgwLDB4MDMsMHhjMSwweDAwIH0sCisgIDE2LCAweGIyZDAsIDAsIHsweGQ4LDB4MTAsMHgzMiwweDAwLDB4MGMsMHg4MCwweDIzLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIyZTAsIDAsIHsweDI4LDB4MDUsMHgzOCwweDYwLDB4OGUsMHgwMCwweDIyLDB4ODAsMHgwYSwweGEwLDB4MDIsMHgzOCwweDgwLDB4YmUsMHgwMCwweDNhIH0sCisgIDE2LCAweGIyZjAsIDAsIHsweDgwLDB4MDgsMHhlMCwweDAyLDB4MjgsMHgwMCwweGJhLDB4MDAsMHgyMywweDk4LDB4MTgsMHhlYywweDAyLDB4ZjgsMHgyMCwweGFlIH0sCisgIDE2LCAweGIzMDAsIDAsIHsweDAwLDB4MjIsMHg4MCwweDBiLDB4ZTQsMHg4MiwweGU4LDB4MDIsMHhjZSwweDQ0LDB4MjgsMHg4MCwweDBkLDB4YTAsMHgwYSwweDBhIH0sCisgIDE2LCAweGIzMTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NDAsMHgwMCwweDgyLDB4MDQsMHhhMCwweGMwIH0sCisgIDE2LCAweGIzMjAsIDAsIHsweDA5LDB4MzAsMHgwMiwweDhlLDB4MDQsMHg4MywweDUwLDB4NmMsMHhjMCwweDBhLDB4MzAsMHg4NiwweDBjLDB4MDAsMHhiMywweDAwIH0sCisgIDE2LCAweGIzMzAsIDAsIHsweDI4LDB4MzAsMHgwYSwweDM2LDB4MTIsMHhjYywweDgwLDB4ODEsMHgwMCwweDI0LDB4YzAsMHgwYiwweDMyLDB4MDYsMHhjYywweDAwIH0sCisgIDE2LCAweGIzNDAsIDAsIHsweDgwLDB4ODgsMHg2NCwweDYwLDB4MjgsMHgxMCwweDAyLDB4MDIsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIzNTAsIDAsIHsweGEwLDB4MDEsMHgxMCwweDEyLDB4ODQsMHg0MCwweDIxLDB4YzgsMHgwYSwweDcyLDB4MDIsMHgxMCwweDAwLDB4YjcsMHgwMCwweDJkIH0sCisgIDE2LCAweGIzNjAsIDAsIHsweGNjLDB4MDgsMHgzOCwweDEyLDB4MWMsMHgwMCwweGIzLDB4MzAsMHgyMCwweDAwLDB4MDgsMHg3MSwweDgyLDB4ZmUsMHgwMCwweGE0IH0sCisgIDE2LCAweGIzNzAsIDAsIHsweDgwLDB4MjEsMHhjOCwweDBiLDB4NzAsMHgwMiwweGRjLDB4MDEsMHg4NywweDAwLDB4MmMsMHg0MiwweDA5LDB4NTEsMHgwMiwweDIwIH0sCisgIDE2LCAweGIzODAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MTIsMHgwMCwweGMyLDB4ODAsMHgzMSwweGY4IH0sCisgIDE2LCAweGIzOTAsIDAsIHsweDRjLDB4ZmMsMHgxMywweDkyLDB4MDksMHhjNywweDgwLDB4M2MsMHhlZCwweDFlLDB4NzgsMHgyNywweDFlLDB4MDAsMHhmNywweDhjIH0sCisgIDE2LCAweGIzYTAsIDAsIHsweDc5LDB4MjAsMHgwOCwweDdhLDB4MDMsMHhkZSwweDgxLDB4ODQsMHg4MCwweDNkLDB4ZTAsMHgwZSwweDc4LDB4MDMsMHhmZSwweDIwIH0sCisgIDE2LCAweGIzYjAsIDAsIHsweGM1LDB4ODEsMHgzNSwweDYwLDB4MmMsMHg1OCwweDAzLDB4MmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIzYzAsIDAsIHsweDA4LDB4MWQsMHg4MCwweDAwLDB4ZjgsMHgwNCwweDNlLDB4ZDAsMHgwZiwweGIwLDB4MTMsMHhlMCwweDAwLDB4ZmIsMHgwMiwweDNhIH0sCisgIDE2LCAweGIzZDAsIDAsIHsweGQwLDB4MGYsMHhhMCwweDBiLDB4YWMsMHg0MCwweGZiLDB4MDAsMHgzYSwweDAwLDB4MmYsMHhiMCwweDAzLDB4Y2MsMHgwMCwweGYwIH0sCisgIDE2LCAweGIzZTAsIDAsIHsweDAwLDB4M2EsMHhjNCwweDBmLDB4YjAsMHgwMywweGZjLDB4NDEsMHhmMywweDAwLDB4M2EsMHg0MCwweDBmLDB4NTAsMHg5MywweGMyIH0sCisgIDE2LCAweGIzZjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZjYsMHgwMCwweGNjLDB4ODEsMHgzZiwweGZjIH0sCisgIDE2LCAweGI0MDAsIDAsIHsweDFjLDB4ZjgsMHgwMywweDc2LDB4NDAsMHhlZiwweDkyLDB4M2YsMHhlNCwweDhjLDB4ZjgsMHgwMywweGJmLDB4MTAsMHhmZiwweDgwIH0sCisgIDE2LCAweGI0MTAsIDAsIHsweGIzLDB4MjAsMHgwZSwweGY5LDB4MTMsMHhmZSwweDI0LDB4ZmQsMHg5NCwweDM3LDB4ZTAsMHgxYywweGY5LDB4MDMsMHhlZSwweDAwIH0sCisgIDE2LCAweGI0MjAsIDAsIHsweGNkLDB4ODAsMHhiMywweGUwLDB4MGMsMHg1OCwweDAyLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI0MzAsIDAsIHsweGE4LDB4MTEsMHg5NCwweDQwLDB4ODAsMHgwMCwweDJmLDB4YzQsMHgwOCwweDcyLDB4MDIsMHhkZCwweDA4LDB4ZDcsMHgwMCwweDJkIH0sCisgIDE2LCAweGI0NDAsIDAsIHsweGNjLDB4MDgsMHhkZSwweDAzLDB4NWMsMHgwMCwweGI3LDB4MDQsMHgyMSwweDgwLDB4YzgsMHg3MCwweDgzLDB4ZGMsMHgwMCwweGI0IH0sCisgIDE2LCAweGI0NTAsIDAsIHsweGEwLDB4MmYsMHhjMCwweDBjLDB4NzAsMHgwMiwweGRlLDB4ODAsMHg4NywweDAwLDB4MjEsMHhjMiwweDBhLDB4NTEsMHg0MiwweDJhIH0sCisgIDE2LCAweGI0NjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTAsMHgwMCwweDg0LDB4MDAsMHgyZCwweGM4IH0sCisgIDE2LCAweGI0NzAsIDAsIHsweDQ4LDB4NzAsMHgwMiwweDU0LDB4MGMsMHhhNywweDAwLDB4MmMsMHhjMCwweDg5LDB4NzIsMHgwMiwweDVjLDB4MDAsMHhiMywweDEwIH0sCisgIDE2LCAweGI0ODAsIDAsIHsweDIwLDB4MDAsMHgwYSwweDcwLDB4MDYsMHhkYywweDAwLDB4YjQsMHgyMCwweDJkLDB4YzAsMHgwOCwweDcwLDB4MDIsMHhkYywweDgwIH0sCisgIDE2LCAweGI0OTAsIDAsIHsweDkzLDB4MDAsMHgyMCwweGMwLDB4MDgsMHg1MCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI0YTAsIDAsIHsweDIwLDB4MTQsMHhjMCwweDAwLDB4ODAsMHgwMCwweDJlLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhjNCwweDA4LDB4YTIsMHg0MiwweDJjIH0sCisgIDE2LCAweGI0YjAsIDAsIHsweGMxLDB4MDksMHgyMCwweDAyLDB4NGMsMHgwMCwweGIzLDB4MDAsMHgyMCwweDgwLDB4MDgsMHgzYywweDIyLDB4OGMsMHgyMCwweGIwIH0sCisgIDE2LCAweGI0YzAsIDAsIHsweDA4LDB4MmUsMHhlMCwweDA4LDB4MzgsMHgxMCwweGNmLDB4MGEsMHg5MywweDQwLDB4YTAsMHhmMCwweDBhLDB4MTAsMHgwMiwweDA4IH0sCisgIDE2LCAweGI0ZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YTgsMHgwMCwweGMxLDB4MDAsMHgzZiwweGMwIH0sCisgIDE2LCAweGI0ZTAsIDAsIHsweDJjLDB4ZjAsMHgwMywweDY4LDB4MDAsMHhhYSwweDAwLDB4M2YsMHhjMCwweDJkLDB4ODAsMHgwMywweDdjLDB4MDAsMHhmZiwweDAwIH0sCisgIDE2LCAweGI0ZjAsIDAsIHsweDMyLDB4MDAsMHgwZSwweGIwLDB4MTIsMHhlZCwweDI0LDB4ZmEsMHgwOCwweDI3LDB4YzgsMHgxMCwweGI4LDB4YTIsMHhmZiwweDYwIH0sCisgIDE2LCAweGI1MDAsIDAsIHsweDk4LDB4YTAsMHhhMiwweGUwLDB4MGMsMHg1MCwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI1MTAsIDAsIHsweDgwLDB4MDAsMHhjOSwweDA2LDB4ZjgsMHg0MSwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhlOSwweDEwLDB4NWEsMHgyMCwweDNlIH0sCisgIDE2LCAweGI1MjAsIDAsIHsweGMwLDB4MGUsMHg4MCwweDAzLDB4ZWMsMHgwMCwweGYzLDB4MDAsMHg3ZSwweDAxLDB4MGYsMHhiMCwweDkzLDB4ZWQsMHgwMCwweGY4IH0sCisgIDE2LCAweGI1MzAsIDAsIHsweDQwLDB4M2UsMHhjMCwweDBlLDB4YjAsMHgwMywweGZjLDB4MDAsMHhlMywweDA4LDB4M2MsMHhjMiwweDBmLDB4ZDAsMHgxMywweGUwIH0sCisgIDE2LCAweGI1NDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZjMsMHgwMiwweGNjLDB4MDAsMHgzYiwweGMyIH0sCisgIDE2LCAweGI1NTAsIDAsIHsweDBjLDB4ZjAsMHgyMywweGFlLDB4NDAsMHhkZiwweDgxLDB4MzksMHhjMCwweDA2LDB4ZDAsMHgwMywweGZjLDB4MDAsMHhmZiwweDA0IH0sCisgIDE2LCAweGI1NjAsIDAsIHsweDMxLDB4NDEsMHgwYywweGYwLDB4MDMsMHhmYywweDAwLDB4Y2MsMHhhMCwweDM3LDB4YzIsMHgwYywweGYwLDB4MDMsMHg3YywweDA0IH0sCisgIDE2LCAweGI1NzAsIDAsIHsweGNkLDB4MDAsMHgzMywweGYwLDB4MGMsMHhkMCwweDAzLDB4MDgsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI1ODAsIDAsIHsweDgxLDB4MDQsMHg2MCwweDAwLDB4ODgsMHg4MCwweDIyLDB4YzAsMHgwYSwweGIwLDB4MDIsMHhlOSwweDAwLDB4YWIsMHg0NCwweDJlIH0sCisgIDE2LCAweGI1OTAsIDAsIHsweGMwLDB4MDgsMHg4OCwweDAyLDB4ZWMsMHgwMCwweGJiLDB4MDAsMHhhMiwweDcwLDB4MGEsMHhiNCwweDAyLDB4Y2MsMHgwMCwweGEwIH0sCisgIDE2LCAweGI1YTAsIDAsIHsweDIwLDB4MjIsMHhjMCwweDBmLDB4YmMsMHgwMiwweGNjLDB4MGEsMHg4YiwweDgwLDB4YTIsMHhjMCwweDBkLDB4OTAsMHgwMiwweDIwIH0sCisgIDE2LCAweGI1YjAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MjAsMHgwMCwweDg5LDB4ODAsMHgyYSwweGMwIH0sCisgIDE2LCAweGI1YzAsIDAsIHsweDA4LDB4YjAsMHgwMiwweGNjLDB4MDYsMHg4OCwweDYwLDB4MmUsMHhjMCwweDBhLDB4OTgsMHgwNiwweGVjLDB4MDEsMHhiYiwweDAwIH0sCisgIDE2LCAweGI1ZDAsIDAsIHsweDIyLDB4MzEsMHgwMiwweGIyLDB4MDIsMHhlYywweGEwLDB4OGEsMHgwMCwweDI2LDB4YzAsMHg0OCwweGE4LDB4MDIsMHhlYywweDA0IH0sCisgIDE2LCAweGI1ZTAsIDAsIHsweGE5LDB4ODAsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI1ZjAsIDAsIHsweDA4LDB4MDQsMHgwMCwweDAwLDB4ODAsMHgwMCwweDIwLDB4YzAsMHgwYSwweDMwLDB4NDIsMHhjYywweDAwLDB4ODAsMHgwMSwweDJjIH0sCisgIDE2LCAweGI2MDAsIDAsIHsweGMwLDB4MWEsMHgxMiwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyMCwweDAwLDB4NGEsMHgzMCwweDAyLDB4Y2MsMHgwMCwweGEwIH0sCisgIDE2LCAweGI2MTAsIDAsIHsweDAwLDB4MDgsMHhjMCwweDBiLDB4MjAsMHgwNiwweGVjLDB4YTAsMHhhMywweDAwLDB4YTAsMHg0MCwweDI5LDB4MTAsMHgwMCwweDAyIH0sCisgIDE2LCAweGI2MjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjAsMHgwMCwweGM4LDB4NTAsMHgzYiwweGMwIH0sCisgIDE2LCAweGI2MzAsIDAsIHsweDBjLDB4YjAsMHgwMywweGFjLDB4MDAsMHhjOSwweDAwLDB4M2IsMHhjMCwweDBlLDB4OTIsMHg4MywweGZjLDB4MDAsMHhiZiwweDAwIH0sCisgIDE2LCAweGI2NDAsIDAsIHsweDEyLDB4MDAsMHgwYywweGIwLDB4MDMsMHhlYywweDAwLDB4ODgsMHgyNiwweDE2LDB4YzAsMHgwYywweDgwLDB4MTcsMHg1YywweDgwIH0sCisgIDE2LCAweGI2NTAsIDAsIHsweGU5LDB4MDEsMHgzMiwweDQwLDB4MmMsMHhkMCwweDAzLDB4MDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI2NjAsIDAsIHsweGEwLDB4MWQsMHhkMCwweDAwLDB4ZmMsMHgyMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmYywweDAwLDB4ZmMsMHgwMCwweDNmIH0sCisgIDE2LCAweGI2NzAsIDAsIHsweGMwLDB4MGQsMHg4MCwweDAzLDB4ZmMsMHgwOCwweGZmLDB4MDAsMHgzZiwweDAwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgxMCwweGY4IH0sCisgIDE2LCAweGI2ODAsIDAsIHsweDQwLDB4MzcsMHhjMCwweDBlLDB4ZTAsMHgyMSwweGZjLDB4MDgsMHhkZiwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZDAsMHgwMywweGUwIH0sCisgIDE2LCAweGI2OTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHhjMCwweGZmLDB4MjEsMHg3MSwweDI0IH0sCisgIDE2LCAweGI2YTAsIDAsIHsweDBmLDB4ZjEsMHg4MywweGYyLDB4NDAsMHhmZiwweDAwLDB4MzcsMHhjNCwweDlmLDB4ZjIsMHg0NywweDNkLDB4MDQsMHhjNywweDIwIH0sCisgIDE2LCAweGI2YjAsIDAsIHsweDMzLDB4YzAsMHgwYywweDc4LDB4MjMsMHhmZSwweDQwLDB4ZTgsMHgxMCwweDI3LDB4YzQsMHgwZiwweGYyLDB4MTMsMHgzYywweDg0IH0sCisgIDE2LCAweGI2YzAsIDAsIHsweGM0LDB4ODEsMHgzMywweDIwLDB4NGMsMHhmMCwweDIzLDB4NzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI2ZDAsIDAsIHsweDgwLDB4MTAsMHhlZCwweDQwLDB4YmYsMHg1NCwweDYyLDB4YzgsMHgwYiwweGY2LDB4MDIsMHhlMCwweDAwLDB4YmIsMHhkMCwweDIyIH0sCisgIDE2LCAweGI2ZTAsIDAsIHsweGYwLDB4MWYsMHhmOSwweDEyLDB4M2QsMHg4MCwweDlmLDB4ODEsMHgyYiwweGUwLDB4MGEsMHhiOCwweDEyLDB4ZTgsMHgwMCwweDhmIH0sCisgIDE2LCAweGI2ZjAsIDAsIHsweDA0LDB4MjIsMHhkMCwweDA4LDB4YjMsMHg4YSwweGJmLDB4NDIsMHg4YiwweDgyLDB4MjIsMHhlMCwweDI4LDB4OGMsMHgwMiwweDIwIH0sCisgIDE2LCAweGI3MDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwMCwweGIzLDB4MjgsMHgyOCwweDA4IH0sCisgIDE2LCAweGI3MTAsIDAsIHsweDBiLDB4MzAsMHgwNiwweDgwLDB4ODAsMHhiMywweDAyLDB4MjQsMHhkMSwweDBiLDB4MzAsMHgwMiwweDhkLDB4ODAsMHg5MywweDEwIH0sCisgIDE2LCAweGI3MjAsIDAsIHsweDIwLDB4Y2UsMHg4YiwweDMwLDB4MDIsMHhjYywweDg0LDB4YTEsMHgyMSwweDJjLDB4Y2MsMHgwYSwweDMwLDB4MGEsMHg0YywweDAwIH0sCisgIDE2LCAweGI3MzAsIDAsIHsweDkzLDB4MDAsMHgyOCwweGMwLDB4MDgsMHgzYywweDAyLDB4MjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI3NDAsIDAsIHsweGMwLDB4MTUsMHhhYywweDEwLDB4YmIsMHgwMiwweDZhLDB4ZTAsMHgwYiwweGIwLDB4MDIsMHhlMSwweDA4LDB4YmIsMHgwNCwweDJhIH0sCisgIDE2LCAweGI3NTAsIDAsIHsweGMwLDB4MGEsMHhiMCwweDEyLDB4OGMsMHgwMCwweDliLDB4MDAsMHgyYSwweGMwLDB4MGIsMHhiMSwweDA2LDB4YzgsMHg4MCwweDhiIH0sCisgIDE2LCAweGI3NjAsIDAsIHsweDgyLDB4NmEsMHhjMSwweDBhLDB4MzAsMHgwMiwweGFjLDB4MTgsMHg4OCwweDEwLDB4MmEsMHg0OCwweDA4LDB4ODAsMHgwMiwweDMwIH0sCisgIDE2LCAweGI3NzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwMCwweGZiLDB4MDAsMHhhYSwweDMwIH0sCisgIDE2LCAweGI3ODAsIDAsIHsweDBmLDB4YjAsMHgwMywweGE4LDB4MDAsMHhmMywweDAxLDB4YjYsMHhjMSwweDBiLDB4YjAsMHgwMiwweGFjLDB4MDgsMHg0YiwweDAwIH0sCisgIDE2LCAweGI3OTAsIDAsIHsweGIyLDB4YzAsMHgwZiwweGI4LDB4MDIsMHhlYywweDEwLDB4YTksMHg4MSwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHgwYywweDAwIH0sCisgIDE2LCAweGI3YTAsIDAsIHsweGNiLDB4YTAsMHgxOCwweGQwLDB4MGMsMHhiMCwweDAzLDB4MTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI3YjAsIDAsIHsweGUwLDB4MDEsMHhiYywweDA4LDB4ZjcsMHgwMCwweDM3LDB4MDAsMHgwZiwweGYwLDB4MDMsMHhmZCwweDAwLDB4ZmYsMHgwMCwweDM3IH0sCisgIDE2LCAweGI3YzAsIDAsIHsweGMwLDB4MGYsMHhiMCwweDA3LDB4N2MsMHgwMCwweGU3LDB4MDAsMHgzZSwweGMwLDB4MGEsMHhmMCwweDAzLDB4ZmUsMHgwMCwweGY3IH0sCisgIDE2LCAweGI3ZDAsIDAsIHsweDAwLDB4MzYsMHhjMCwweDBjLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZiwweDgwLDB4MzcsMHhlMCwweDBmLDB4YTAsMHgwMywweGI4IH0sCisgIDE2LCAweGI3ZTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGRiLDB4MDAsMHgzNiwweDAwIH0sCisgIDE2LCAweGI3ZjAsIDAsIHsweDBlLDB4YjAsMHgwMywweDY5LDB4MDAsMHhkYiwweDA5LDB4M2EsMHhjMCwweDFmLDB4MzAsMHgyMywweGVjLDB4MDgsMHhjYiwweDIwIH0sCisgIDE2LCAweGI4MDAsIDAsIHsweDM0LDB4YzAsMHgyZiwweGIwLDB4MDMsMHhlYywweDQwLDB4ZWIsMHg0OCwweDNlLDB4YzQsMHg0ZCwweGIwLDB4OGIsMHg2YywweDAwIH0sCisgIDE2LCAweGI4MTAsIDAsIHsweGNiLDB4MDAsMHgzMiwweDkwLDB4MGYsMHgzMCwweDAzLDB4OTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI4MjAsIDAsIHsweGM4LDB4MDUsMHgzYywweDAwLDB4OGYsMHgwMCwweDIyLDB4MDAsMHg0OCwweGYwLDB4MjIsMHgyYywweDAwLDB4OGYsMHgwMCwweDIzIH0sCisgIDE2LCAweGI4MzAsIDAsIHsweGUwLDB4OGIsMHhmNSwweDEwLDB4M2MsMHgwMCwweDhmLDB4ODAsMHgyMywweGYwLDB4ODAsMHg5OCwweDAzLDB4MmQsMHg0NCwweGRiIH0sCisgIDE2LCAweGI4NDAsIDAsIHsweDAwLDB4MjMsMHhkNCwweDA4LDB4ZjgsMHgwMiwweDNjLDB4MDAsMHg4MywweDAwLDB4MjIsMHhjMCwweDBiLDB4YTQsMHg4MiwweDMyIH0sCisgIDE2LCAweGI4NTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMCwweDkzLDB4MDAsMHgyNCwweDAwIH0sCisgIDE2LCAweGI4NjAsIDAsIHsweDBiLDB4MzAsMHgwMiwweDg0LDB4MDAsMHhiMywweDAxLDB4MjgsMHhmNiwweDA5LDB4MzQsMHgzMiwweDhjLDB4MDEsMHhiMywweGQwIH0sCisgIDE2LCAweGI4NzAsIDAsIHsweDI0LDB4ZTgsMHgwYSwweDMxLDB4MGEsMHg4NiwweDAwLDB4ODMsMHgwMCwweDJhLDB4ZTAsMHgwMCwweDMwLDB4MDIsMHg4YywweDAwIH0sCisgIDE2LCAweGI4ODAsIDAsIHsweDgzLDB4MDAsMHgyOCwweGMwLDB4ODksMHgzOCwweGEyLDB4NzgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI4OTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDAwLDB4OTcsMHg5NCwweDIzLDB4ZTAsMHgwOSwweDM4LDB4MDIsMHgzMiwweDAwLDB4OTcsMHhhMSwweDIxIH0sCisgIDE2LCAweGI4YTAsIDAsIHsweGU0LDB4MGIsMHg3OCwweDAyLDB4MWUsMHg0MCwweGI3LDB4YTAsMHgyNSwweGVjLDB4MDgsMHhmYywweDAyLDB4M2EsMHgwMCwweDkzIH0sCisgIDE2LCAweGI4YjAsIDAsIHsweGI4LDB4MjEsMHhlMCwweDA4LDB4NzgsMHg4MiwweDllLDB4NDAsMHg4NywweGMwLDB4MjksMHhhMCwweDBiLDB4NTgsMHgwMiwweDQ4IH0sCisgIDE2LCAweGI4YzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MmMsMHgwMCwweGRiLDB4MDAsMHgzNCwweDIwIH0sCisgIDE2LCAweGI4ZDAsIDAsIHsweDBmLDB4M2EsMHgwMywweDhlLDB4MDAsMHhmMywweGIwLDB4MjgsMHhjNCwweDBiLDB4M2EsMHgwMywweGFlLDB4NDAsMHhmMywweGEwIH0sCisgIDE2LCAweGI4ZTAsIDAsIHsweDM0LDB4ZWUsMHgwZiwweDMwLDB4MjMsMHg4NCwweDAwLDB4ZTMsMHhmMCwweDM4LDB4YzAsMHgwYywweGIwLDB4MGIsMHg4ZSwweDQyIH0sCisgIDE2LCAweGI4ZjAsIDAsIHsweGMzLDB4MDAsMHgzOCwweGMwLDB4MGYsMHgzMCwweDYzLDB4ZDIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI5MDAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZWIsMHg0MiwweDNhLDB4YzQsMHgxZSwweGIxLDB4MDcsMHg4OCwweGQxLDB4ZTMsMHgwMCwweDNmIH0sCisgIDE2LCAweGI5MTAsIDAsIHsweGM1LDB4OGYsMHhmMSwweDYzLDB4YWMsMHgxMCwweGNiLDB4NTAsMHgzYiwweGMzLDB4MGYsMHhkMSwweDAzLDB4YzgsMHgwMCwweGJiIH0sCisgIDE2LCAweGI5MjAsIDAsIHsweDIwLDB4M2IsMHhjMCwweDJlLDB4ZjEsMHgwMywweDFjLDB4MDAsMHhmZiwweDAwLDB4MzcsMHhjMCwweDRmLDB4ZDEsMHgwMywweDkwIH0sCisgIDE2LCAweGI5MzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHg0MCwweGZiLDB4NDQsMHhiMiwweGMwIH0sCisgIDE2LCAweGI5NDAsIDAsIHsweDRmLDB4YjMsMHg0MywweDI0LDB4MDAsMHhkYiwweDEwLDB4MzYsMHhjMCwweDRjLDB4YmUsMHgyMiwweDZkLDB4MjAsMHhjYiwweDUwIH0sCisgIDE2LCAweGI5NTAsIDAsIHsweDNlLDB4YzksMHg0YywweGIwLDB4MTMsMHgyNCwweDAwLDB4Y2YsMHgyMCwweDMzLDB4YzAsMHgzZCwweGYwLDB4MjMsMHgyYywweGMwIH0sCisgIDE2LCAweGI5NjAsIDAsIHsweGQ4LDB4MDAsMHgzZSwweDQwLDB4OGYsMHgzMCwweDAzLDB4MmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI5NzAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDA0LDB4YjcsMHg2MCwweDIxLDB4YzEsMHg4YiwweGYwLDB4YTIsMHgxNCwweDEwLDB4ODcsMHgwMCwweDBmIH0sCisgIDE2LCAweGI5ODAsIDAsIHsweGM4LDB4MGQsMHg3MSwweDBhLDB4MWQsMHgwMCwweDg3LDB4MDAsMHgyYywweGNjLDB4NDgsMHg3MCwweDJhLDB4OWMsMHgwMCwweDg3IH0sCisgIDE2LCAweGI5OTAsIDAsIHsweDBjLDB4MjEsMHhjMCwweDBjLDB4NzIsMHgwMiwweDBjLDB4YTIsMHg4NywweDAwLDB4MmQsMHhjMCwweDBiLDB4NzAsMHgwMiwweDEyIH0sCisgIDE2LCAweGI5YTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgwMCwweGIzLDB4ODAsMHgyMSwweGUwIH0sCisgIDE2LCAweGI5YjAsIDAsIHsweDBiLDB4N2EsMHgwMiwweGRlLDB4MDAsMHhiNywweDgxLDB4MDUsMHhlNCwweDA4LDB4NzksMHgwMiwweDVjLDB4ODAsMHg4NywweGEwIH0sCisgIDE2LCAweGI5YzAsIDAsIHsweDJkLDB4ZTAsMHgwOCwweGY4LDB4MDYsMHhiNiwweDAwLDB4ODcsMHg4MCwweDIwLDB4ZTQsMHgwYSwweDdiLDB4MTIsMHgxZSwweDkwIH0sCisgIDE2LCAweGI5ZDAsIDAsIHsweDk3LDB4ODgsMHgyZCwweGUwLDB4MGIsMHg3OCwweDBlLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI5ZTAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDAwLDB4YjMsMHgwMCwweDIwLDB4ZDAsMHgwYiwweGIwLDB4MDIsMHg2ZSwweDM0LDB4YTMsMHgwMCwweDJjIH0sCisgIDE2LCAweGI5ZjAsIDAsIHsweGMxLDB4MDksMHgzMCwweDAyLDB4NGMsMHgwMCwweDgzLDB4MDAsMHgyYywweGMwLDB4NDgsMHgxMCwweDAyLDB4OGQsMHg4MCwweDgzIH0sCisgIDE2LCAweGJhMDAsIDAsIHsweGMwLDB4MDAsMHhjMCwweDhhLDB4MzAsMHgxMiwweDBjLDB4MDAsMHg4MCwweDAwLDB4MmMsMHgxNiwweDBiLDB4MzgsMHgwMiwweDEyIH0sCisgIDE2LCAweGJhMTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGZhLDB4MDAsMHgzMywweDg4IH0sCisgIDE2LCAweGJhMjAsIDAsIHsweDBmLDB4YTAsMHgwMywweDc5LDB4OTAsMHhmYSwweDAxLDB4MzYsMHg4MCwweDFjLDB4YTAsMHgwMywweDY4LDB4MDAsMHhjYSwweDAwIH0sCisgIDE2LCAweGJhMzAsIDAsIHsweDNlLDB4ODEsMHgyYywweGEwLDB4MGIsMHhiOSwweDBjLDB4Y2UsMHhlMiwweGIyLDB4ODAsMHg4ZSwweGEwLDB4MGIsMHgyOCwweDAwIH0sCisgIDE2LCAweGJhNDAsIDAsIHsweGRhLDB4ODAsMHgzYywweGIwLDB4MGYsMHhlMCwweDgzLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJhNTAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjAsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhhMCwweDAwLDB4YzgsMHgwMCwweDJlIH0sCisgIDE2LCAweGJhNjAsIDAsIHsweDAwLDB4MGYsMHg4NCwweDIzLDB4YTAsMHgwMCwweGYwLDB4NDAsMHgzZSwweDEwLDB4MGYsMHg4NCwweDAzLDB4ZTEsMHgwMiwweGY4IH0sCisgIDE2LCAweGJhNzAsIDAsIHsweDQ4LDB4M2UsMHgxMCwweDBjLDB4ODAsMHgwMywweGMwLDB4MTAsMHhmOCwweDgwLDB4M2UsMHgwMCwweDBmLDB4MDAsMHgwMywweGQyIH0sCisgIDE2LCAweGJhODAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGQ5LDB4MDAsMHgzNiwweDQyIH0sCisgIDE2LCAweGJhOTAsIDAsIHsweDBmLDB4OTAsMHgwMywweDI0LDB4MTgsMHhmOSwweDEwLDB4M2MsMHg0OCwweDY4LDB4OTIsMHgxMywweGU0LDB4MDAsMHhhOSwweDExIH0sCisgIDE2LCAweGJhYTAsIDAsIHsweGIyLDB4NjAsMHgwZSwweDkxLDB4MDMsMHgyNiwweDAwLDB4YzksMHgwMCwweDMyLDB4NjAsMHgwYywweDEwLDB4MDMsMHgyNCwweDA4IH0sCisgIDE2LCAweGJhYjAsIDAsIHsweGM5LDB4MDAsMHgzZSwweDQwLDB4MGMsMHg5MCwweDIzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJhYzAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHgwMCwweDIyLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhhNCwweDA4LDB4ODksMHgwMCwweDJlIH0sCisgIDE2LCAweGJhZDAsIDAsIHsweDQyLDB4NDgsMHg5NCwweDAyLDB4ZTQsMHgwMCwweDg5LDB4ODAsMHgyMiwweDcwLDB4MDgsMHgxNCwweDIyLDB4YTQsMHgwMiwweDg5IH0sCisgIDE2LCAweGJhZTAsIDAsIHsweDQyLDB4MmEsMHg3MCwweDI4LDB4OTAsMHgwYSwweDI0LDB4MDAsMHhhOSwweDAwLDB4MmUsMHg0MCwweDI4LDB4OTAsMHgwMiwweGEwIH0sCisgIDE2LCAweGJhZjAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MDQsMHgwMCwweDk5LDB4MDAsMHgyNiwweGMwIH0sCisgIDE2LCAweGJiMDAsIDAsIHsweDAzLDB4OTAsMHgwMiwweDI0LDB4MDEsMHhhOSwweDAwLDB4MGUsMHg0MCwweDBhLDB4OTAsMHg0NiwweGM0LDB4MGEsMHg4OSwweDAwIH0sCisgIDE2LCAweGJiMTAsIDAsIHsweDIwLDB4NDgsMHgwYSwweDkwLDB4MDIsMHgwNSwweDgwLDB4ODEsMHg0MSwweGEwLDB4NTgsMHg4OCwweDkwLDB4MDIsMHgyNCwweDA4IH0sCisgIDE2LCAweGJiMjAsIDAsIHsweDhkLDB4ODAsMHgyZiwweGMwLDB4MDgsMHg5OCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJiMzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4ODEsMHgyMCwweDIwLDB4NDAsMHgwYiwweDEyLDB4MDIsMHg4NCwweDAwLDB4ODEsMHgyNCwweDJjIH0sCisgIDE2LCAweGJiNDAsIDAsIHsweDU4LDB4MGEsMHgzMiwweDIyLDB4YzUsMHg4NCwweGExLDB4MDAsMHgyMCwweDUwLDB4MDgsMHhiMCwweDAyLDB4ODUsMHgwOCwweDgxIH0sCisgIDE2LCAweGJiNTAsIDAsIHsweDQwLDB4MjAsMHg1YSwweDA4LDB4MTYsMHg4MiwweDA0LDB4MDAsMHhhNSwweDAwLDB4MmQsMHg0MCwweDA4LDB4MTIsMHg4MiwweDgyIH0sCisgIDE2LCAweGJiNjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGQ4LDB4NTAsMHgzNiwweDE0IH0sCisgIDE2LCAweGJiNzAsIDAsIHsweDBmLDB4ODUsMHgyMywweDAxLDB4NDAsMHhlOCwweDAwLDB4M2UsMHgwMCwweDBlLDB4ODAsMHg0MywweGMwLDB4MDgsMHhjYSwweDAwIH0sCisgIDE2LCAweGJiODAsIDAsIHsweDMyLDB4ODAsMHgwZSwweDgwLDB4MDMsMHgyMCwweDAwLDB4YzAsMHgwMCwweDMyLDB4MDgsMHgyYywweDAyLDB4MDMsMHgyMCwweDA4IH0sCisgIDE2LCAweGJiOTAsIDAsIHsweGM4LDB4MDAsMHgzZiwweDAwLDB4MGMsMHg4MiwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJiYTAsIDAsIHsweDk4LDB4MWQsMHhlNCwweDQwLDB4ZjksMHgxMCwweDNmLDB4NDAsMHgwZiwweDkxLDB4NDMsMHhmNCwweDA0LDB4ZjksMHgxMCwweDNlIH0sCisgIDE2LCAweGJiYjAsIDAsIHsweDQ0LDB4MGQsMHgxMSwweDAzLDB4ZTQsMHg0NCwweDU5LDB4NDAsMHgzZSwweDUwLDB4NGYsMHg1MCwweDQzLDB4ZDQsMHgwMiwweGZkIH0sCisgIDE2LCAweGJiYzAsIDAsIHsweDQwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwYiwweGU1LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDRmLDB4ZDAsMHgwMywweGU2IH0sCisgIDE2LCAweGJiZDAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4NjYsMHg2MCwweGM5LDB4ZTAsMHgzMiwweDQ0IH0sCisgIDE2LCAweGJiZTAsIDAsIHsweDBmLDB4OWMsMHgwMywweGU0LDB4MDAsMHhkZCwweDg0LDB4M2YsMHg2OCwweDhmLDB4ZDgsMHg0MiwweGU2LDB4YTAsMHhkZCwweGE0IH0sCisgIDE2LCAweGJiZjAsIDAsIHsweDMzLDB4NjgsMHgwZCwweDcwLDB4MDMsMHgyNSwweDAwLDB4YzksMHhlMCwweGIyLDB4NjgsMHgwYywweDlhLDB4YzMsMHgyNiwweDAwIH0sCisgIDE2LCAweGJjMDAsIDAsIHsweDk5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5YSwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJjMTAsIDAsIHsweDM4LDB4MTAsMHhlMywweDAwLDB4ODgsMHg4MCwweGFhLDB4MjAsMHg4YiwweDg4LDB4MDIsMHhlMiwweDg4LDB4YjgsMHgwMSwweDJlIH0sCisgIDE2LCAweGJjMjAsIDAsIHsweDAwLDB4MGIsMHg4NCwweDAyLDB4ZTIsMHhiMCwweDg4LDB4NTAsMHgyMiwweDE0LDB4MDgsMHg4MCwweDAyLDB4ODIsMHg4MCwweDg4IH0sCisgIDE2LCAweGJjMzAsIDAsIHsweGUwLDB4YjYsMHgzYSwweDA4LDB4Y2UsMHhhMiwweDIxLDB4MDgsMHg4OCwweDAwLDB4MmUsMHgwMCwweDBiLDB4YzQsMHgwMiwweDBlIH0sCisgIDE2LCAweGJjNDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHg4MCwweDgxLDB4NjAsMHg2OCwweDQ4IH0sCisgIDE2LCAweGJjNTAsIDAsIHsweDViLDB4MTYsMHgwMiwweGM0LDB4MjAsMHhhMSwweDQwLDB4NmMsMHg1MCwweDBiLDB4MTQsMHgwMiwweGM0LDB4MDAsMHhhMSwweDAwIH0sCisgIDE2LCAweGJjNjAsIDAsIHsweDI0LDB4NDAsMHgwYiwweDkwLDB4MjIsMHgxNCwweDkwLDB4ODUsMHg0MiwweDIxLDB4NTAsMHg1YiwweDUwLDB4MWEsMHgxNSwweDAwIH0sCisgIDE2LCAweGJjNzAsIDAsIHsweDk1LDB4MDAsMHgyZCwweDQwLDB4MGIsMHg1MSwweDBhLDB4ODIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJjODAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAxLDB4ODksMHgwMCwweDJhLDB4NDAsMHgwYiwweDkwLDB4NDYsMHhlNCwweDAwLDB4YjksMHgwMSwweDJlIH0sCisgIDE2LCAweGJjOTAsIDAsIHsweDQwLDB4MGIsMHg5MCwweDIwLDB4ZTQsMHgwMCwweGI5LDB4MDAsMHgyNiwweDQwLDB4MTgsMHhiOCwweDAyLDB4YTQsMHgwMiwweDhkIH0sCisgIDE2LCAweGJjYTAsIDAsIHsweDA4LDB4MmYsMHg0MCwweDhiLDB4ZDAsMHgwMiwweDI0LDB4MDAsMHg4ZCwweDIwLDB4MmYsMHg0OCwweDBiLDB4ZDAsMHgwMiwweDg2IH0sCisgIDE2LCAweGJjYjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGM5LDB4MDAsMHgzMiwweDQwIH0sCisgIDE2LCAweGJjYzAsIDAsIHsweDBmLDB4OTAsMHgwMiwweGU0LDB4MTAsMHg0OSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhlOSwweDAxIH0sCisgIDE2LCAweGJjZDAsIDAsIHsweDM2LDB4NDAsMHgwZiwweDE4LDB4MTMsMHgyNCwweDEwLDB4YzksMHg4MiwweDMyLDB4NDAsMHg3ZiwweDkwLDB4MjMsMHgyNCwweDAwIH0sCisgIDE2LCAweGJjZTAsIDAsIHsweGQ5LDB4MjAsMHgzZSwweDcyLDB4MGYsMHg5MCwweDAzLDB4YTgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJjZjAsIDAsIHsweDI4LDB4MDEsMHg4NCwweDAyLDB4ZjEsMHgwMSwweDE2LDB4NDAsMHg0ZiwweDkwLDB4MDMsMHhlNSwweDEwLDB4ZjksMHgwOCwweDJlIH0sCisgIDE2LCAweGJkMDAsIDAsIHsweDQwLDB4MGYsMHg5MCwweDEzLDB4ZTQsMHgwMCwweGM5LDB4MDEsMHgzYSwweDQwLDB4MWYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5IH0sCisgIDE2LCAweGJkMTAsIDAsIHsweDIwLDB4MzQsMHg0MCwweDhjLDB4OTAsMHgwMywweGM0LDB4MDgsMHhmOSwweDAwLDB4M2UsMHg2MCwweDBmLDB4MTAsMHgwMywweDRhIH0sCisgIDE2LCAweGJkMjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwOCwweGY4LDB4MDAsMHgzZSwweDAwIH0sCisgIDE2LCAweGJkMzAsIDAsIHsweDBjLDB4ODAsMHgwMywweDYwLDB4MDAsMHhlOCwweDAwLDB4M2UsMHgwMiwweDRmLDB4ODAsMHgxMywweGUwLDB4MDAsMHhkMCwweDAwIH0sCisgIDE2LCAweGJkNDAsIDAsIHsweDNlLDB4MDAsMHgwZSwweDgxLDB4MDMsMHgzMCwweDAwLDB4Y2MsMHg0MCwweDMzLDB4MDAsMHgwYywweGMwLDB4MGIsMHgyMCwweDIwIH0sCisgIDE2LCAweGJkNTAsIDAsIHsweGU4LDB4MDAsMHgzZSwweDEwLDB4MGYsMHhjMCwweDAzLDB4Y2EsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJkNjAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDA0LDB4YmEsMHgwMCwweDIyLDB4ODAsMHgwOCwweGEwLDB4MDIsMHgyOCwweDAwLDB4YmUsMHhjOCwweDZmIH0sCisgIDE2LCAweGJkNzAsIDAsIHsweDgwLDB4MGIsMHhlMSwweDIyLDB4YTgsMHgwMCwweDhlLDB4MjAsMHgyZiwweDgwLDB4MGIsMHhlMCwweDIzLDB4NjgsMHgwMCwweDhhIH0sCisgIDE2LCAweGJkODAsIDAsIHsweDAwLDB4MjIsMHg4MCwweDA4LDB4ZTAsMHgwMiwweDI5LDB4MDAsMHg4YSwweDAwLDB4MmUsMHhhOCwweDBiLDB4YTAsMHgwMCwweGNhIH0sCisgIDE2LCAweGJkOTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweGIzLDB4MDAsMHgyNCwweGMwIH0sCisgIDE2LCAweGJkYTAsIDAsIHsweDA5LDB4MzAsMHgwMiwweDBjLDB4MDAsMHhiMywweGMxLDB4MmMsMHhlMCwweDBiLDB4MzgsMHg1NiwweDJjLDB4MTAsMHgxMywweDAwIH0sCisgIDE2LCAweGJkYjAsIDAsIHsweDJlLDB4YzAsMHgwYSwweDM4LDB4NmEsMHgyMCwweDAwLDB4ODgsMHgwMCwweDIwLDB4MDAsMHgwOSwweDgwLDB4MjIsMHg0YywweDQyIH0sCisgIDE2LCAweGJkYzAsIDAsIHsweGEzLDB4MDAsMHgyYywweGUwLDB4MGIsMHgyNCwweDgwLDB4Y2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJkZDAsIDAsIHsweGEwLDB4MDEsMHgxYywweDA4LDB4YjcsMHgyNCwweDJmLDB4ZTAsMHgwOSwweDM5LDB4MDIsMHgxYywweDAxLDB4YjYsMHgwMCwweDJkIH0sCisgIDE2LCAweGJkZTAsIDAsIHsweDkwLDB4MGIsMHg2MCwweDkyLDB4OGUsMHgwMCwweDg2LDB4ODIsMHgyZCwweGMyLDB4MGIsMHhmMCwweDAyLDB4NWMsMHgwNiwweDg3IH0sCisgIDE2LCAweGJkZjAsIDAsIHsweDAwLDB4NjAsMHhjMCwweDI5LDB4NzAsMHgwMiwweDVjLDB4MDAsMHg4NiwweDAwLDB4MmQsMHhjMCwweDBiLDB4NjAsMHgwMiwweGU4IH0sCisgIDE2LCAweGJlMDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWYsMHg0MCwweGYzLDB4ZTQsMHgzZCwweGU4IH0sCisgIDE2LCAweGJlMTAsIDAsIHsweDBkLDB4NzksMHgwYiwweDFlLDB4YzAsMHg2NywweDgwLDB4MmQsMHhlMCwweDBmLDB4NzAsMHg0MywweDFkLDB4ODAsMHhkNSwweDAwIH0sCisgIDE2LCAweGJlMjAsIDAsIHsweDNkLDB4NjAsMHgwZSwweDc4LDB4MDMsMHgxZSwweDAwLDB4Y2QsMHg4MCwweDMxLDB4ZTAsMHgwZCwweGM4LDB4MDMsMHg0ZSwweDAwIH0sCisgIDE2LCAweGJlMzAsIDAsIHsweGU1LDB4ODAsMHgzZCwweGUwLDB4MGYsMHg0OCwweDAzLDB4ZWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJlNDAsIDAsIHsweDA4LDB4MWQsMHhhYywweDgwLDB4ZmIsMHgwMCwweDcwLDB4YzAsMHg2ZSwweGI2LDB4MTMsMHhhZCwweDQwLDB4ZmEsMHgwMCwweDNlIH0sCisgIDE2LCAweGJlNTAsIDAsIHsweGMwLDB4MGYsMHgyMCwweDQzLDB4MmQsMHgxOCwweDU5LDB4MDAsMHgzZSwweDAwLDB4MDMsMHhiMCwweDBiLDB4ZTAsMHgwMCwweGZhIH0sCisgIDE2LCAweGJlNjAsIDAsIHsweDAwLDB4YmUsMHgwMCwweDBlLDB4YjAsMHgxMywweGFjLDB4MDAsMHhmOCwweDAwLDB4M2UsMHhjMCwweDBmLDB4ODAsMHgwMywweGMyIH0sCisgIDE2LCAweGJlNzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHg0MCwweGZmLDB4ODAsMHgzZiwweGU2IH0sCisgIDE2LCAweGJlODAsIDAsIHsweDBmLDB4ZjgsMHgyMywweDJlLDB4MDQsMHhmZiwweDkwLDB4M2YsMHhlNCwweDBkLDB4YmEsMHgwMywweGZmLDB4NDAsMHhjZiwweDgwIH0sCisgIDE2LCAweGJlOTAsIDAsIHsweDIyLDB4ZTEsMHgwYywweDM5LDB4NDMsMHgzMiwweDEwLDB4ZWMsMHg5MCwweDMzLDB4MjAsMHg4ZSwweGM4LDB4MDMsMHhmMiwweDAwIH0sCisgIDE2LCAweGJlYTAsIDAsIHsweGRmLDB4ODAsMHgzZiwweDYwLDB4MGYsMHhmOCwweDAzLDB4YzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJlYjAsIDAsIHsweGE4LDB4MTEsMHg5YywweDQwLDB4YjcsMHg5MCwweDNjLDB4ZTAsMHgwYiwweDNhLDB4MDMsMHg0ZSwweDgwLDB4ZjMsMHhiMSwweDJkIH0sCisgIDE2LCAweGJlYzAsIDAsIHsweDA0LDB4NGMsMHgzOCwweDIzLDB4YWUsMHgwMCwweDgwLDB4ODAsMHgzNCwweGU4LDB4NGQsMHg3OCwweDAyLDB4M2UsMHg4MCwweDg3IH0sCisgIDE2LCAweGJlZDAsIDAsIHsweGEwLDB4MjksMHhjMCwweDA4LDB4NzAsMHgwMiwweGMwLDB4ODAsMHg4NiwweDAyLDB4MmQsMHg0MSwweDBiLDB4NzAsMHgwMiwweGVhIH0sCisgIDE2LCAweGJlZTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHg0OCwweDM3LDB4MDEsMHgyZCwweGM5IH0sCisgIDE2LCAweGJlZjAsIDAsIHsweDBiLDB4NzIsMHgyMiwweDFjLDB4ODQsMHhiNSwweDE2LDB4MGQsMHhjNCwweDE5LDB4NDAsMHg0MiwweGRjLDB4ODAsMHg4NywweDAwIH0sCisgIDE2LCAweGJmMDAsIDAsIHsweDIwLDB4YzgsMHg4OCwweDczLDB4MGEsMHg5YywweDgwLDB4YjUsMHgwMCwweDI5LDB4YzAsMHgwYSwweDQ4LDB4MDIsMHhjMCwweDAyIH0sCisgIDE2LCAweGJmMTAsIDAsIHsweDk1LDB4MDAsMHgyZCwweDQyLDB4MGIsMHg1OCwweDAyLDB4YzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJmMjAsIDAsIHsweDIwLDB4MTQsMHhjYywweDAwLDB4YjMsMHgwMCwweDJhLDB4ZTAsMHgwYiwweDMwLDB4MDIsMHg0YywweDIwLDB4YTEsMHgwMSwweDI0IH0sCisgIDE2LCAweGJmMzAsIDAsIHsweGMxLDB4MDgsMHgwMCwweDAyLDB4OGMsMHgwMCwweDgxLDB4MDAsMHgyNCwweDgwLDB4MDksMHgzOCwweDBhLDB4NjAsMHg4MCwweDkyIH0sCisgIDE2LCAweGJmNDAsIDAsIHsweDQwLDB4MmEsMHgwMCwweDBhLDB4MzAsMHgwMiwweGMwLDB4MDAsMHg4MCwweGM4LDB4MmMsMHg3MiwweDBiLDB4MTQsMHgwMiwweGM4IH0sCisgIDE2LCAweGJmNTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmMsMHgwMCwweGZmLDB4MDAsMHgyZiwweGY0IH0sCisgIDE2LCAweGJmNjAsIDAsIHsweDhmLDB4ZjAsMHgwMywweDNjLDB4MDAsMHhiOSwweDAwLDB4M2UsMHg0MCwweDA5LDB4OTAsMHgwMywweGZjLDB4MDIsMHhjMywweDAxIH0sCisgIDE2LCAweGJmNzAsIDAsIHsweDMyLDB4YzAsMHg0OCwweGI4LDB4MTMsMHhhMSwweDAwLDB4YmEsMHgwMCwweDJhLDB4MDAsMHgwYSwweGEwLDB4MDcsMHhlYywweDAwIH0sCisgIDE2LCAweGJmODAsIDAsIHsweGRiLDB4YzgsMHgzZSwweDkwLDB4MGYsMHhhMiwweDAyLDB4ZWEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJmOTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwMiwweDNlLDB4YzQsMHgwZiwweGIwLDB4NjMsMHhlYywweDAxLDB4ZjgsMHg0MCwweDNlIH0sCisgIDE2LCAweGJmYTAsIDAsIHsweDQwLDB4MGIsMHg4MCwweDAzLDB4Y2MsMHgwMCwweGZhLDB4NDIsMHgzZSwweGMwLDB4MGYsMHhiNSwweDAwLDB4YWMsMHg1OCwweGU5IH0sCisgIDE2LCAweGJmYjAsIDAsIHsweDgyLDB4M2UsMHhjMCwweDFkLDB4OTAsMHgwMywweGVjLDB4MDQsMHhmYSwweDAwLDB4M2UsMHg4MCwweDBmLDB4YTAsMHgwMywweGUwIH0sCisgIDE2LCAweGJmYzAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwYywweGRmLDB4MDAsMHg3ZiwweGMwIH0sCisgIDE2LCAweGJmZDAsIDAsIHsweDJjLDB4ZjAsMHgwMywweDdjLDB4MDEsMHhjNywweDAwLDB4MzMsMHg0MCwweDhmLDB4ZDAsMHgwMywweGZjLDB4MDAsMHhkOCwweDAwIH0sCisgIDE2LCAweGJmZTAsIDAsIHsweDE1LDB4NDQsMHgwYywweGUwLDB4MWIsMHgzYywweDAwLDB4Y2IsMHgwZSwweDMzLDB4YzAsMHg1YywweDYyLDB4MDIsMHgxYywweDAyIH0sCisgIDE2LCAweGJmZjAsIDAsIHsweGM1LDB4MDAsMHgyYiwweDgwLDB4MGYsMHhjMCwweDg3LDB4ODAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMwMDAsIDAsIHsweDgxLDB4NDQsMHg2YywweDEwLDB4YmIsMHgwMCwweDJlLDB4YzAsMHgwOCwweGIwLDB4NTIsMHgwYywweDAxLDB4ZmEsMHhjNCwweDIyIH0sCisgIDE2LCAweGMwMTAsIDAsIHsweDYxLDB4MGIsMHg4OCwweDAzLDB4NmMsMHgwMCwweDg4LDB4NDcsMHgyYSwweDAwLDB4MGUsMHgxYywweDAyLDB4MjAsMHgwMiwweDg4IH0sCisgIDE2LCAweGMwMjAsIDAsIHsweDAwLDB4YWEsMHgwMCwweDI4LDB4OTAsMHgwYSwweDJjLDB4MDQsMHhhOCwweDAwLDB4MjIsMHg5MCwweDBiLDB4ODAsMHgwMiwweGUwIH0sCisgIDE2LCAweGMwMzAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAxLDB4MmMsMHgwMCwweGJiLDB4MDAsMHgyZSwweGMxIH0sCisgIDE2LCAweGMwNDAsIDAsIHsweDA4LDB4MzAsMHgxMiwweDZjLDB4MDAsMHg4OCwweDg4LDB4MmEsMHgzMCwweDBiLDB4YjgsMHgwMiwweGVjLDB4MDAsMHg5YiwweDA4IH0sCisgIDE2LCAweGMwNTAsIDAsIHsweDJhLDB4NDAsMHgwOCwweGI4LDB4MDIsMHgyMCwweDAwLDB4ODIsMHgxMCwweDIyLDB4MDAsMHgwOCwweGEwLDB4MjIsMHhhMCwweDAwIH0sCisgIDE2LCAweGMwNjAsIDAsIHsweDhiLDB4MDAsMHgyYSwweDAyLDB4MGIsMHhiMCwweDAyLDB4ZTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMwNzAsIDAsIHsweDA4LDB4MDAsMHgwYywweDAwLDB4YjMsMHgyMCwweDJjLDB4YzIsMHgwOCwweDM2LDB4MDIsMHgyYywweGMwLDB4YTAsMHgwOCwweDIwIH0sCisgIDE2LCAweGMwODAsIDAsIHsweDAwLDB4MGIsMHgzMywweDQ2LDB4Y2QsMHgyOCwweDgwLDB4MjAsMHgyOCwweGMwLDB4MGIsMHgzMiwweDAyLDB4MGMsMHgyMCwweDgxIH0sCisgIDE2LCAweGMwOTAsIDAsIHsweDMwLDB4MjgsMHhjMCwweDA4LDB4MTAsMHgwMiwweDgxLDB4MDAsMHhhYSwweDAwLDB4MjgsMHgwMCwweDAzLDB4MzAsMHgwMiwweGMyIH0sCisgIDE2LCAweGMwYTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBjLDB4N2MsMHgwMCwweGZiLDB4MjgsMHgyZSwweGNjIH0sCisgIDE2LCAweGMwYjAsIDAsIHsweDBjLDB4NzAsMHg1MywweDdkLDB4MDksMHg4OCwweDAwLDB4YmEsMHgwMCwweDBmLDB4ODAsMHgwMywweGZkLDB4ODAsMHhkYSwweDYwIH0sCisgIDE2LCAweGMwYzAsIDAsIHsweDNhLDB4NTAsMHg4YywweGEyLDB4ODMsMHgyYywweDgwLDB4NGIsMHgyMCwweDMwLDB4YzAsMHgyOCwweGEwLDB4MDMsMHhhMSwweDAwIH0sCisgIDE2LCAweGMwZDAsIDAsIHsweGM5LDB4MDAsMHgzYSwweDAwLDB4MGYsMHg5MCwweDAzLDB4YzAsMHgwMywweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMwZTAsIDAsIHsweGEwLDB4MWQsMHhmYywweDA0LDB4ZmIsMHgwMCwweDdlLDB4YzksMHgwYiwweGI2LDB4MDMsMHhmYywweGMwLDB4ZjgsMHgwYywweDNmIH0sCisgIDE2LCAweGMwZjAsIDAsIHsweDAwLDB4NGYsMHhjMywweDQzLDB4MmMsMHgwMCwweGI4LDB4MzgsMHgzZiwweDhlLDB4NWUsMHhmMCwweDQzLDB4ZTAsMHgxMCwweGY4IH0sCisgIDE2LCAweGMxMDAsIDAsIHsweDMwLDB4M2YsMHgwMSwweDBmLDB4ZDAsMHgwMywweDcwLDB4MDAsMHhmYywweDAwLDB4MzcsMHgwMCwweDBkLDB4ZDAsMHgwNywweGU5IH0sCisgIDE2LCAweGMxMTAsIDAsIHsweDAzLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHhlMCwweGNjLDB4ODAsMHgzMywweGMwIH0sCisgIDE2LCAweGMxMjAsIDAsIHsweDBkLDB4ZjAsMHg4MywweGZjLDB4ODAsMHhkYywweDk0LDB4MzMsMHhjMCwweDFjLDB4ZjEsMHgwMywweDdkLDB4OGMsMHhmZiwweDMwIH0sCisgIDE2LCAweGMxMzAsIDAsIHsweDNmLDB4MzAsMHg4ZiwweGM4LDB4MDMsMHg3ZSwweDEwLDB4Y2YsMHg5MCwweDM5LDB4YTAsMHg4ZCwweGY4LDB4MDMsMHhhZSwweDAwIH0sCisgIDE2LCAweGMxNDAsIDAsIHsweGQ1LDB4ODAsMHgxMywweGUwLDB4MGMsMHg1OCwweDAzLDB4ZjAsMHgwMSwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMxNTAsIDAsIHsweDgwLDB4MTAsMHhkZCwweDA4LDB4ODgsMHgwMCwweDIzLDB4YzQsMHgwOCwweGZjLDB4MDIsMHhlYywweGE4LDB4Y2IsMHgyMCwweDIxIH0sCisgIDE2LCAweGMxNjAsIDAsIHsweGMyLDB4MGQsMHhmNywweDEyLDB4MWMsMHg0MCwweGRmLDB4MzAsMHgyMiwweGEwLDB4MGIsMHg4OCwweDAyLDB4MmUsMHgwNCwweGRiIH0sCisgIDE2LCAweGMxNzAsIDAsIHsweDIxLDB4MjIsMHhjMCwweDA4LDB4YjgsMHgyMiwweDJlLDB4MDAsMHhiOSwweDgwLDB4MmEsMHg2MCwweDBhLDB4ODgsMHgwMiwweGUwIH0sCisgIDE2LCAweGMxODAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDQ1LDB4Y2MsMHgxMCwweDgwLDB4MmMsMHgyOCwweGNhIH0sCisgIDE2LCAweGMxOTAsIDAsIHsweDY4LDB4MzAsMHgwMiwweDhkLDB4MDAsMHg5YiwweDIwLDB4MjgsMHhjNCwweDA4LDB4MzIsMHgwMiwweGNjLDB4MTAsMHhiMywweDAwIH0sCisgIDE2LCAweGMxYTAsIDAsIHsweDI0LDB4MDgsMHgwYiwweDgwLDB4NDIsMHg2YywweDAwLDB4ODMsMHgwMCwweDJhLDB4Y2EsMHgzYSwweGIwLDB4MDIsMHg4YywweDA0IH0sCisgIDE2LCAweGMxYjAsIDAsIHsweGIwLDB4MDQsMHgyOCwweGMwLDB4MDgsMHgxMCwweDAyLDB4ZTMsMHgwMSwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMxYzAsIDAsIHsweGMwLDB4MTUsMHg4YywweDAyLDB4ODAsMHg0MCwweGFhLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhlYywweDAwLDB4OWIsMHgyMCwweDJhIH0sCisgIDE2LCAweGMxZDAsIDAsIHsweGMwLDB4ODgsMHhiMCwweDAyLDB4YWMsMHgwMCwweDliLDB4MDAsMHgyNiwweGUwLDB4MDMsMHg4MCwweDgyLDB4MmMsMHgyOCwweDliIH0sCisgIDE2LCAweGMxZTAsIDAsIHsweDIwLDB4MjIsMHhlMSwweDBiLDB4YjIsMHgwMiwweGFjLDB4ODAsMHhiOCwweDgwLDB4MmEsMHhjMSwweDBhLDB4OTgsMHgwMiwweGYwIH0sCisgIDE2LCAweGMxZjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwMCwweGM4LDB4NTAsMHgzYSwweGMwIH0sCisgIDE2LCAweGMyMDAsIDAsIHsweDBkLDB4YjAsMHgwMywweGVjLDB4MDAsMHhkYiwweDg4LDB4YmEsMHhjMCwweDA4LDB4YjAsMHgwMywweDZjLDB4MDgsMHhmYiwweDAwIH0sCisgIDE2LCAweGMyMTAsIDAsIHsweDM2LDB4NjAsMHgwZiwweDhjLDB4NjMsMHg2YywweDAwLDB4Y2IsMHhjMCwweDNhLDB4ODAsMHgwZSwweGJlLDB4MDMsMHhhZiwweDg0IH0sCisgIDE2LCAweGMyMjAsIDAsIHsweDc5LDB4ODAsMHgzYSwweDg4LDB4MDQsMHg5OCwweDAxLDB4ZDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMyMzAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4ZmMsMHg4MCwweDM1LDB4YzAsMHg0ZiwweGYwLDB4MDMsMHhkYywweDAwLDB4ZWYsMHgwMCwweDM3IH0sCisgIDE2LCAweGMyNDAsIDAsIHsweGMwLDB4YWYsMHhmMCwweDAzLDB4MWMsMHgwMSwweDZmLDB4MDAsMHgxMywweDAwLDB4MGYsMHhjMSwweDIzLDB4ZmMsMHhiOCwweGZmIH0sCisgIDE2LCAweGMyNTAsIDAsIHsweDA0LDB4MzcsMHhjMCwweDBjLDB4ZjgsMHg0MywweDdlLDB4MDQsMHhmZCwweDAwLDB4M2YsMHgwNCwweDBmLDB4ZDAsMHgwMywweGY4IH0sCisgIDE2LCAweGMyNjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGM4LDB4NDAsMHgzYSwweGMwIH0sCisgIDE2LCAweGMyNzAsIDAsIHsweDBjLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmYiwweDQwLDB4MzgsMHhjMSwweDBlLDB4YjAsMHg0MywweDJjLDB4MDgsMHhjMywweDAwIH0sCisgIDE2LCAweGMyODAsIDAsIHsweDNlLDB4NDAsMHgwZSwweDgyLDB4MDMsMHg2ZCwweDAwLDB4ZGIsMHg0MCwweDMyLDB4YzEsMHg1ZiwweGI0LDB4YTMsMHhlZCwweDIwIH0sCisgIDE2LCAweGMyOTAsIDAsIHsweGM5LDB4NDAsMHgzMiwweGUwLDB4OGYsMHg5OCwweDQzLDB4OTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMyYTAsIDAsIHsweGM4LDB4MDUsMHgzYywweDAwLDB4ODgsMHgwMCwweDIzLDB4YzAsMHgyOCwweGY1LDB4YzIsMHhmYywweDAwLDB4YjMsMHgwNCwweDIzIH0sCisgIDE2LCAweGMyYjAsIDAsIHsweGMxLDB4NDgsMHhmMCwweDIyLDB4YmMsMHgwNiwweGFmLDB4MDAsMHgwZSwweDQwLDB4MDgsMHgwMCwweDAyLDB4Y2QsMHgwMCwweGJiIH0sCisgIDE2LCAweGMyYzAsIDAsIHsweDAxLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweGVlLDB4MDAsMHg4MSwweGUwLDB4MzQsMHhhMCwweDBiLDB4OTAsMHgwMiwweDMyIH0sCisgIDE2LCAweGMyZDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMiwweDgwLDB4MDAsMHgyOCwweGMwIH0sCisgIDE2LCAweGMyZTAsIDAsIHsweDA5LDB4M2MsMHgwMiwweDRjLDB4MDAsMHhiMywweDAwLDB4MmMsMHhjMCwweDBhLDB4YjAsMHgwMiwweDBjLDB4MDAsMHg4MywweDAxIH0sCisgIDE2LCAweGMyZjAsIDAsIHsweDJjLDB4MDAsMHgwYSwweDA1LDB4MDIsMHhjZCwweDU4LDB4YmIsMHgwMCwweDIwLDB4MDAsMHgwYSwweDNkLDB4MDIsMHhjZiwweDQwIH0sCisgIDE2LCAweGMzMDAsIDAsIHsweDIxLDB4MjAsMHg2MCwweGMwLDB4MDksMHgxMCwweDAyLDB4ZjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMzMTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDAwLDB4ODQsMHg4MCwweDI4LDB4ZTQsMHg4OCwweDc4LDB4NDIsMHhkZSwweDAwLDB4YjcsMHg5MCwweDY1IH0sCisgIDE2LCAweGMzMjAsIDAsIHsweGU0LDB4ODgsMHg3YSwweDQyLDB4OWUsMHg0MCwweGE3LDB4OTAsMHgyZCwweGEwLDB4MGEsMHg0OCwweDIyLDB4ZGUsMHgwNCwweGI3IH0sCisgIDE2LCAweGMzMzAsIDAsIHsweDgwLDB4MjMsMHg2MCwweDQ4LDB4NzgsMHg0MiwweGZlLDB4ODAsMHhhZiwweDkwLDB4NjUsMHhlMCwweDBiLDB4ZTgsMHgwMiwweGM4IH0sCisgIDE2LCAweGMzNDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweGM4LDB4MDAsMHgzOCwweGMwIH0sCisgIDE2LCAweGMzNTAsIDAsIHsweDBjLDB4MzAsMHgwMywweGNjLDB4MDAsMHhmYiwweDAwLDB4M2MsMHhjMCwweDBlLDB4YmEsMHgwMywweDBjLDB4MDAsMHhjMywweDAwIH0sCisgIDE2LCAweGMzNjAsIDAsIHsweDNlLDB4MDAsMHg0ZSwweDIyLDB4MDIsMHhjYywweGMwLDB4ZmIsMHg0MCwweDMwLDB4YzAsMHgwYSwweDMwLDB4MDMsMHhjZSwweDgwIH0sCisgIDE2LCAweGMzNzAsIDAsIHsweGUxLDB4NDEsMHgzMCwweGM5LDB4MGYsMHgzMCwweDAzLDB4ZDIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMzODAsIDAsIHsweDQwLDB4MWQsMHhiYywweDIwLDB4ZmMsMHgwMCwweDM3LDB4YzIsMHgwZSwweGYxLDB4MjMsMHhlYywweDQwLDB4ZmYsMHgwNCwweDNhIH0sCisgIDE2LCAweGMzOTAsIDAsIHsweGMwLDB4MGYsMHhiMCwweDIzLDB4ZmMsMHgwMCwweGZmLDB4MDQsMHgzZSwweGMwLDB4MGQsMHhhMCwweDAzLDB4ZmMsMHg1OCwweGZmIH0sCisgIDE2LCAweGMzYTAsIDAsIHsweDAwLDB4YmYsMHhjMCwweDA2LDB4ZjAsMHg4MywweGRjLDB4NjIsMHhkZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweDEwIH0sCisgIDE2LCAweGMzYjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWQsMHg4MCwweGM5LDB4MDEsMHgzZSwweGMwIH0sCisgIDE2LCAweGMzYzAsIDAsIHsweDhjLDB4YjIsMHgwNywweGFlLDB4MDQsMHhjYiwweDgwLDB4M2EsMHhjOCwweDRjLDB4YjIsMHgwMywweDJjLDB4ODQsMHhjYiwweDMwIH0sCisgIDE2LCAweGMzZDAsIDAsIHsweGIwLDB4ZTAsMHgwZCwweDg4LDB4MGIsMHgyYywweDAwLDB4ZWIsMHgwMCwweDMwLDB4MDAsMHgwYywweGJjLDB4ODMsMHgyZCwweDgwIH0sCisgIDE2LCAweGMzZTAsIDAsIHsweGZiLDB4MDAsMHgzMiwweGMwLDB4MGMsMHg5MCwweDAzLDB4ZWEsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMzZjAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDQwLDB4ODcsMHgwMCwweDJjLDB4Y2MsMHgwOCwweDc2LDB4ODIsMHgzYywweDgyLDB4ODcsMHgwMCwweDIxIH0sCisgIDE2LCAweGM0MDAsIDAsIHsweGMyLDB4OGQsMHgzMiwweDgyLDB4MGQsMHg0YywweGE3LDB4MjgsMHgyMSwweDgwLDB4MDgsMHg0MCwweDAyLDB4MWQsMHg4MCwweGJmIH0sCisgIDE2LCAweGM0MTAsIDAsIHsweDIwLDB4MzUsMHg0MCwweDA5LDB4NzIsMHg0MywweDVjLDB4YTAsMHhiNywweDAwLDB4MjksMHhjMCwweDA4LDB4NzAsMHgwMiwweGQyIH0sCisgIDE2LCAweGM0MjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OGUsMHgwMCwweDg0LDB4ODAsMHgyZCwweGUwIH0sCisgIDE2LCAweGM0MzAsIDAsIHsweDA4LDB4NzgsMHgwMiwweGRlLDB4YzAsMHg4ZiwweDgwLDB4MjgsMHhlYywweDI4LDB4N2IsMHgwYSwweDllLDB4OTQsMHg4MywweDg0IH0sCisgIDE2LCAweGM0NDAsIDAsIHsweDIzLDB4ZTAsMHgwOSwweDU4LDB4NTAsMHg5ZSwweDEwLDB4YTcsMHhiMCwweDIzLDB4ZTAsMHgwYiwweDc4LDB4MDIsMHgxZSwweDIwIH0sCisgIDE2LCAweGM0NTAsIDAsIHsweGI3LDB4ODAsMHgyMSwweGUwLDB4MDksMHg3OCwweDAyLDB4ZjAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM0NjAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDAyLDB4ODIsMHgxYywweDJjLDB4YzAsMHgyOCwweDMwLDB4MDIsMHg0YywweDAwLDB4ODMsMHhjMCwweDIwIH0sCisgIDE2LCAweGM0NzAsIDAsIHsweGMwLDB4MDgsMHgzMCwweDAyLDB4MGMsMHgwMCwweGEzLDB4MDAsMHg2MCwweGQyLDB4MDgsMHgxZCwweDAyLDB4MGYsMHgyMCwweGJiIH0sCisgIDE2LCAweGM0ODAsIDAsIHsweDI0LDB4MjQsMHhjMCwweDBiLDB4M2MsMHgwMiwweDRmLDB4MDAsMHhiMywweDgwLDB4MjgsMHhkOCwweDA5LDB4MzIsMHgwMiwweGQyIH0sCisgIDE2LCAweGM0OTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDExLDB4YTgsMHgwMCwweGNlLDB4ODQsMHgzZSwweDgwIH0sCisgIDE2LCAweGM0YTAsIDAsIHsweDBjLDB4YTAsMHgwMywweGU4LDB4MDAsMHhjZSwweGMwLDB4M2EsMHg4MCwweDA4LDB4YTAsMHgwMywweGE4LDB4MDAsMHhjYSwweDAwIH0sCisgIDE2LCAweGM0YjAsIDAsIHsweDMzLDB4ODAsMHgwZCwweGVjLDB4MDMsMHgzYiwweDgwLDB4ZWUsMHg4MiwweDMzLDB4ODAsMHgwYSwweGMwLDB4ODcsMHgxMCwweDQwIH0sCisgIDE2LCAweGM0YzAsIDAsIHsweGY2LDB4YzAsMHgzMywweDkwLDB4YWQsMHg2NCwweDAzLDB4ZmEsMHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM0ZDAsIDAsIHsweDQ4LDB4MDAsMHhjMCwweDAyLDB4ZjgsMHgwMCwweDNjLDB4MDAsMHgxZiwweDA0LDB4MDMsMHhhMCwweDA0LDB4ZjgsMHgzMCwweDNlIH0sCisgIDE2LCAweGM0ZTAsIDAsIHsweDAwLDB4MGYsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDA0LDB4MGYsMHg4MCwweDkzLDB4ZTAsMHgwMCwweGY4IH0sCisgIDE2LCAweGM0ZjAsIDAsIHsweDEwLDB4M2UsMHgwMCwweDJjLDB4ODQsMHgwMywweGUwLDB4MDAsMHhmOCwweDE4LDB4M2UsMHgxMCwweDBlLDB4ODAsMHgwMywweGQyIH0sCisgIDE2LCAweGM1MDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGQ5LDB4MDAsMHgzZSwweDQwIH0sCisgIDE2LCAweGM1MTAsIDAsIHsweDBlLDB4OTAsMHgwMywweGE0LDB4MTAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDA0LDB4OTAsMHgwMywweDI0LDB4MDAsMHg0MSwweDAwIH0sCisgIDE2LCAweGM1MjAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDkxLDB4MTMsMHhlMSwweDA4LDB4ZjgsMHgwMCwweDMyLDB4NDAsMHgwOCwweDg5LDB4ODMsMHhhMiwweDAwIH0sCisgIDE2LCAweGM1MzAsIDAsIHsweGM5LDB4ODAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDBiLDB4MDIsMHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM1NDAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAyLDB4ODksMHgwMCwweDJlLDB4NDAsMHgwZCwweDkwLDB4MDIsMHgyNCwweDAwLDB4YjksMHgwMCwweDJlIH0sCisgIDE2LCAweGM1NTAsIDAsIHsweDQwLDB4NDgsMHg5MCwweDAyLDB4YTQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDQwLDB4OGIsMHg5NCwweDQyLDB4ZTIsMHgyMCwweGI4IH0sCisgIDE2LCAweGM1NjAsIDAsIHsweDAwLDB4YTIsMHg0MCwweDA4LDB4OTQsMHgwMiwweGU1LDB4MDQsMHhhOSwweDkwLDB4MzQsMHg2MCwweDA4LDB4OTAsMHgwMiwweDIwIH0sCisgIDE2LCAweGM1NzAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgxMCwweDk5LDB4MDAsMHgyZSwweDQwIH0sCisgIDE2LCAweGM1ODAsIDAsIHsweDBhLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAwLDB4MjQsMHg0MCwweDBhLDB4MTAsMHgwMiwweDA0LDB4MDAsMHhhOSwweDAwIH0sCisgIDE2LCAweGM1OTAsIDAsIHsweDJhLDB4NDAsMHgwYiwweDkwLDB4ODIsMHhlMCwweDAxLDB4YjgsMHgwMCwweDIwLDB4NDAsMHgzYSwweDkwLDB4MDIsMHhhNCwweDQ0IH0sCisgIDE2LCAweGM1YTAsIDAsIHsweDg5LDB4MDQsMHgyMiwweDYyLDB4MDgsMHg5OCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM1YjAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDhhLDB4ODEsMHgwMCwweDJjLDB4NDgsMHgwOSwweDMyLDB4MDYsMHg0NCwweDgwLDB4YjEsMHgwMCwweDJjIH0sCisgIDE2LCAweGM1YzAsIDAsIHsweDQ4LDB4MGEsMHgxMiwweDAyLDB4ODQsMHg4MCwweGExLDB4MjAsMHgyMCwweDUwLDB4MGIsMHgxNCwweDAyLDB4YzUsMHgwMCwweGIxIH0sCisgIDE2LCAweGM1ZDAsIDAsIHsweDQwLDB4MjAsMHg1MCwweDBhLDB4MjQsMHgwMiwweGM5LDB4MDAsMHhhMywweDAwLDB4MjQsMHg0MCwweDA4LDB4MTEsMHgwMiwweDAyIH0sCisgIDE2LCAweGM1ZTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGQ4LDB4NTAsMHgzZSwweDE0IH0sCisgIDE2LCAweGM1ZjAsIDAsIHsweDBlLDB4ODAsMHgwMywweGUxLDB4NDAsMHhmOCwweDUxLDB4MzYsMHgxNCwweDJlLDB4ODUsMHg0MywweDIxLDB4NDIsMHhlOCwweDUwIH0sCisgIDE2LCAweGM2MDAsIDAsIHsweDNhLDB4MDAsMHgwZiwweDgwLDB4MTIsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDMyLDB4MDAsMHgxZSwweDgwLDB4NDMsMHhhMCwweDAwIH0sCisgIDE2LCAweGM2MTAsIDAsIHsweGM4LDB4MDEsMHgzMiwweDAwLDB4MGMsMHg4MCwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM2MjAsIDAsIHsweDk4LDB4MWQsMHhlNCwweDQwLDB4ZmQsMHgwMCwweDNlLDB4NDQsMHg0ZSwweDExLDB4MDMsMHhhNCwweDQwLDB4YjUsMHgwMCwweDNlIH0sCisgIDE2LCAweGM2MzAsIDAsIHsweDQ0LDB4MGQsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGQ5LDB4MTAsMHgzZiwweDQwLDB4MGYsMHg1MCwweDAzLDB4ZTUsMHgwMCwweGY5IH0sCisgIDE2LCAweGM2NDAsIDAsIHsweDQwLDB4M2YsMHg0MCwweDBkLDB4NDQsMHgwMywweGYxLDB4MDAsMHhmNSwweDAyLDB4M2QsMHhjMCwweDJmLDB4ZDIsMHgwMywweGU2IH0sCisgIDE2LCAweGM2NTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZTcsMHgwMCwweGU5LDB4MDAsMHgzNiwweDYwIH0sCisgIDE2LCAweGM2NjAsIDAsIHsweDBkLDB4ZGEsMHgwMywweGU2LDB4NDAsMHhmOSwweDQwLDB4M2UsMHg2OCwweDBjLDB4OWEsMHgwMywweDY2LDB4MjAsMHg4OSwweGEwIH0sCisgIDE2LCAweGM2NzAsIDAsIHsweDMzLDB4NDAsMHgwZSwweDkwLDB4MDcsMHhhNiwweDAwLDB4ZjksMHg4MCwweDNlLDB4NTAsMHgwYywweGNhLDB4MDMsMHhmMywweDgwIH0sCisgIDE2LCAweGM2ODAsIDAsIHsweGM1LDB4MDIsMHgzMywweDQwLDB4MGMsMHhjMCwweDAzLDB4YzYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM2OTAsIDAsIHsweDM4LDB4MTAsMHhlMywweDA0LDB4ODgsMHhhMiwweDIwLDB4MzgsMHgwOCwweDgwLDB4MDIsMHhlMywweDQwLDB4YjAsMHg4MCwweDJlIH0sCisgIDE2LCAweGM2YTAsIDAsIHsweDI4LDB4MDgsMHg4YSwweDgyLDB4MjMsMHg4MCwweDg4LDB4ODAsMHgyMiwweDAwLDB4ZGIsMHg4OCwweDAyLDB4NjIsMHgwNCwweGI4IH0sCisgIDE2LCAweGM2YjAsIDAsIHsweGIwLDB4MmUsMHhhOCwweDg4LDB4OGUsMHhhMiwweGVhLDB4ODAsMHg4OCwweDAwLDB4MmEsMHgwMCwweDI4LDB4ODgsMHgwMywweDhlIH0sCisgIDE2LCAweGM2YzAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzUsMHg4MiwweGE5LDB4MDgsMHgyYywweDUyIH0sCisgIDE2LCAweGM2ZDAsIDAsIHsweDBiLDB4MTQsMHgwMiwweGM0LDB4ODAsMHhiMSwweDIxLDB4MGMsMHg1MiwweDg4LDB4MTQsMHgwMiwweDQ0LDB4MjAsMHg5MSwweDY5IH0sCisgIDE2LCAweGM2ZTAsIDAsIHsweDIwLDB4NDAsMHgwYSwweDEwLDB4ODIsMHhjNiwweGUwLDB4YjEsMHgwYywweDJjLDB4NDgsMHgwOCwweDAxLDB4MDIsMHhlMSwweDkzIH0sCisgIDE2LCAweGM2ZjAsIDAsIHsweGExLDB4MDEsMHgyNCwweDQxLDB4MGEsMHgxMCwweDAyLDB4YzIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM3MDAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4ODksMHgwNCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDAsMHhlNCwweDAwLDB4MzksMHgwMiwweDBlIH0sCisgIDE2LCAweGM3MTAsIDAsIHsweDQwLDB4MDgsMHgxMCwweDYyLDB4MjQsMHgwMCwweDkxLDB4MDAsMHg2MiwweDQwLDB4OGIsMHg4MCwweDAyLDB4ZTAsMHg1NCwweGI5IH0sCisgIDE2LCAweGM3MjAsIDAsIHsweDBjLDB4MmUsMHg0MCwweDA5LDB4YjYsMHg1MiwweGVjLDB4MDAsMHhhOSwweDAwLDB4MmEsMHg0MCwweDBhLDB4OTIsMHg4MCwweDg2IH0sCisgIDE2LCAweGM3MzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDExLDB4ZTQsMHgwMCwweGUxLDB4NjAsMHgzNiwweDQwIH0sCisgIDE2LCAweGM3NDAsIDAsIHsweDBkLDB4OTAsMHgyMywweGU0LDB4MDAsMHhmOSwweDMwLDB4M2UsMHg0MCwweDJjLDB4OTAsMHg0MywweDY0LDB4MDYsMHhjOSwweDAwIH0sCisgIDE2LCAweGM3NTAsIDAsIHsweDMyLDB4NDksMHgwZSwweDhkLDB4OTMsMHhlMCwweDAwLDB4ZjksMHgwMCwweDJlLDB4NDAsMHgyYywweDk0LDB4MDMsMHhjNywweDQwIH0sCisgIDE2LCAweGM3NjAsIDAsIHsweGU5LDB4MjAsMHgzMCwweDU1LDB4MGUsMHg5MCwweDAzLDB4ZTgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM3NzAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwMCwweDFlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHg4MCwweDNjIH0sCisgIDE2LCAweGM3ODAsIDAsIHsweDQwLDB4NGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGU5LDB4MDQsMHhiZSwweDQwLDB4MGYsMHg4OCwweDMzLDB4NjIsMHgwMCwweGY5IH0sCisgIDE2LCAweGM3OTAsIDAsIHsweGMyLDB4M2UsMHg0OCwweDJlLDB4ODgsMHgzMywweGUyLDB4MDAsMHhkOSwweDAwLDB4M2UsMHg2MCwweDBkLDB4ODAsMHgwMywweGNhIH0sCisgIDE2LCAweGM3YTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGM4LDB4MDAsMHgzZSwweDAwIH0sCisgIDE2LCAweGM3YjAsIDAsIHsweDBkLDB4ODAsMHgwMywweGEwLDB4MDQsMHhlOCwweDQwLDB4YmEsMHgwMCwweDBjLDB4ODAsMHgwMywweGUwLDB4MDQsMHhjOCwweDAwIH0sCisgIDE2LCAweGM3YzAsIDAsIHsweDNhLDB4MDAsMHgwZSwweDhjLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgwMiwweDMyLDB4MDAsMHgwZSwweDgwLDB4MDMsMHg2MSwweDIwIH0sCisgIDE2LCAweGM3ZDAsIDAsIHsweGY4LDB4MDAsMHgzMiwweDE2LDB4MGYsMHg4MCwweDAzLDB4Y2EsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM3ZTAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAwLDB4OGEsMHgwMCwweDJlLDB4ODAsMHgwOCwweGUyLDB4MDMsMHgyOCwweDAwLDB4OGEsMHgwMCwweDIyIH0sCisgIDE2LCAweGM3ZjAsIDAsIHsweDgwLDB4MDgsMHhhMCwweDAyLDB4ZTgsMHgwNCwweDhhLDB4MDAsMHgyZSwweGEyLDB4MDksMHhlOCwweDAyLDB4ZmEsMHgwNCwweGJlIH0sCisgIDE2LCAweGM4MDAsIDAsIHsweDAwLDB4YTIsMHg4MCwweDA4LDB4Y2QsMHg4MiwweDMzLDB4MjAsMHhiNiwweGMwLDB4MzcsMHhhMCwweDRiLDB4YzgsMHg4MiwweGNhIH0sCisgIDE2LCAweGM4MTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NmMsMHgwMCwweDgzLDB4MDAsMHgyNiwweGMwIH0sCisgIDE2LCAweGM4MjAsIDAsIHsweDA5LDB4MzgsMHgwMiwweDRjLDB4MDAsMHhiMywweDAwLDB4MjQsMHhjMCwweDA4LDB4MzAsMHgwMiwweGVjLDB4MDAsMHg4MywweDAwIH0sCisgIDE2LCAweGM4MzAsIDAsIHsweDI4LDB4ZTAsMHgwYiwweDMwLDB4MDIsMHhjZSwweDgxLDB4YjMsMHgwMCwweDYyLDB4YzAsMHgwOCwweDNjLDB4MDIsMHg0ZiwweDAwIH0sCisgIDE2LCAweGM4NDAsIDAsIHsweGIzLDB4YTAsMHgyMCwweGIwLDB4MDMsMHgzMCwweDAyLDB4Y2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM4NTAsIDAsIHsweGEwLDB4MDEsMHgwYywweDQxLDB4ODcsMHgzNCwweDJkLDB4YzAsMHgwOCwweDYwLDB4MDIsMHg5ZSwweDQwLDB4YjcsMHhhMCwweDJkIH0sCisgIDE2LCAweGM4NjAsIDAsIHsweGMwLDB4MDgsMHg3MywweDAyLDB4ZGMsMHgwMCwweDg3LDB4MjAsMHgyZCwweGMwLDB4MGIsMHg3MCwweDgyLDB4ZGQsMHg4NSwweGJmIH0sCisgIDE2LCAweGM4NzAsIDAsIHsweDgxLDB4NjMsMHhjOCwweDg4LDB4N2IsMHgwMiwweDFjLDB4MDAsMHhiNywweDQwLDB4NjUsMHgwMCwweDFiLDB4NzIsMHgwMiwweGU4IH0sCisgIDE2LCAweGM4ODAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMCwweGM3LDB4ODEsMHgzZCwweGUwIH0sCisgIDE2LCAweGM4OTAsIDAsIHsweGRkLDB4NzAsMHgwMywweGZlLDB4ODAsMHhmNywweDkwLDB4M2YsMHhlMCwweDJjLDB4NzksMHgwMywweGZlLDB4ODAsMHhjNywweGEwIH0sCisgIDE2LCAweGM4YTAsIDAsIHsweDM5LDB4ZTAsMHgwZiwweDdhLDB4MDIsMHhkZSwweDg0LDB4ZjcsMHhjMiwweDMxLDB4ZjIsMHgwYywweDc5LDB4MDMsMHg1ZSwweDA0IH0sCisgIDE2LCAweGM4YjAsIDAsIHsweGY3LDB4ODQsMHgzMSwweDYwLDB4MGYsMHg3ZSwweDAzLDB4ZWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM4YzAsIDAsIHsweDA4LDB4MWQsMHhhZCwweDBhLDB4ZmIsMHg2MCwweDdlLDB4ZDQsMHgwZiwweDMwLDB4MDMsMHg2YywweDAwLDB4Y2IsMHgwMCwweDMyIH0sCisgIDE2LCAweGM4ZDAsIDAsIHsweGRlLDB4MmYsMHhiMiwweDAzLDB4ZWQsMHg0MiwweDFiLDB4NjAsMHgzZSwweGMxLDB4MGQsMHhiMSwweDAzLDB4ZWMsMHg1MCwweGY3IH0sCisgIDE2LCAweGM4ZTAsIDAsIHsweDgwLDB4M2QsMHhkOCwweDJlLDB4MzIsMHgwMywweGVjLDB4MzAsMHhmYiwweDAwLDB4M2UsMHg0MCwweDBmLDB4YjAsMHgwMywweGMyIH0sCisgIDE2LCAweGM4ZjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmYsMHgwMCwweGNiLDB4ZDAsMHgzZiwweGYwIH0sCisgIDE2LCAweGM5MDAsIDAsIHsweDRjLDB4ZjgsMHgxMywweGZlLDB4MDAsMHhjZiwweDg4LDB4M2YsMHhlMCwweDBjLDB4ZjgsMHg0MywweDNmLDB4MDAsMHhjZiwweGM4IH0sCisgIDE2LCAweGM5MTAsIDAsIHsweDMzLDB4ZTAsMHgwYywweGY4LDB4MDMsMHhmZSwweDAwLDB4ZmYsMHg4MCwweDNmLDB4ZTAsMHgyYywweGY4LDB4MDMsMHhiZSwweDIwIH0sCisgIDE2LCAweGM5MjAsIDAsIHsweGM3LDB4ODAsMHgzMywweGUwLDB4MGMsMHhmOCwweDAxLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM5MzAsIDAsIHsweGE4LDB4MDEsMHhiYywweDQwLDB4ODcsMHg5MCwweDNkLDB4YzAsMHgwOCwweDQwLDB4MDIsMHhkYywweDgwLDB4ZDcsMHgwMCwweDJkIH0sCisgIDE2LCAweGM5NDAsIDAsIHsweGMwLDB4MGMsMHgzMCwweDAzLDB4N2MsMHgwMCwweDg3LDB4MTAsMHgyMSwweGM0LDB4MWUsMHg3MCwweDIwLDB4ZGMsMHg0NCwweGI3IH0sCisgIDE2LCAweGM5NTAsIDAsIHsweDAwLDB4MzksMHhjMCwweDBjLDB4NzEsMHgwMiwweDFjLDB4NDAsMHhkNywweDAyLDB4MjksMHg0MCwweDA4LDB4NzAsMHgwMiwweDJhIH0sCisgIDE2LCAweGM5NjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweDg3LDB4MzIsMHgyZCwweGMwIH0sCisgIDE2LCAweGM5NzAsIDAsIHsweDA4LDB4NzAsMHgwMiwweGRjLDB4MDEsMHg4NywweDAwLDB4MmMsMHhjMCwweDJiLDB4NzAsMHgwYSwweDVjLDB4MDAsMHg4MywweDAwIH0sCisgIDE2LCAweGM5ODAsIDAsIHsweDIzLDB4YzAsMHgwOCwweDcwLDB4MDIsMHhkZCwweDAwLDB4YjcsMHgwMCwweDJkLDB4YzQsMHgwYiwweGYwLDB4MDIsMHg5YywweDIwIH0sCisgIDE2LCAweGM5OTAsIDAsIHsweDg3LDB4MTgsMHgyOSwweDQwLDB4MDgsMHg3MCwweDgyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM5YTAsIDAsIHsweDIwLDB4MTQsMHhjYywweDAwLDB4ODMsMHgwMiwweDI4LDB4YzAsMHgwOCwweDEwLDB4MDIsMHhjYywweDA4LDB4ODMsMHg0MCwweDJlIH0sCisgIDE2LCAweGM5YjAsIDAsIHsweGMwLDB4MmEsMHgzMCwweDAyLDB4MGMsMHgwMCwweDhiLDB4MDAsMHgyMCwweGYyLDB4MGEsMHgzMCwweDAyLDB4Y2UsMHgwMCwweGIzIH0sCisgIDE2LCAweGM5YzAsIDAsIHsweDg4LDB4MmEsMHhkMCwweDBhLDB4MzAsMHgwNiwweDBjLDB4MDAsMHg5MiwweDAwLDB4MjgsMHg3OCwweDA4LDB4M2MsMHg0MiwweDA4IH0sCisgIDE2LCAweGM5ZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmMsMHgwMiwweGM3LDB4MDAsMHgyZiwweGMwIH0sCisgIDE2LCAweGM5ZTAsIDAsIHsweDJjLDB4OTAsMHgwMiwweGZjLDB4MDIsMHg4ZiwweGQ4LDB4M2YsMHhjMCwweDRiLDB4ZjAsMHgwMiwweDdjLDB4MDIsMHhjZiwweDAwIH0sCisgIDE2LCAweGM5ZjAsIDAsIHsweDIwLDB4ZjIsMHgwOCwweGIwLDB4MTMsMHhlZSwweDgwLDB4ZmYsMHgwMCwweDNmLDB4ZDQsMHgyZSwweGJkLDB4ODMsMHhhYywweDAwIH0sCisgIDE2LCAweGNhMDAsIDAsIHsweGNiLDB4ODAsMHgzYSwweGEwLDB4YWMsMHhiOCwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNhMTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgxMCwweDNlLDB4YzAsMHgwZiwweDg0LDB4MDMsMHhlYywweDEwLDB4ZmIsMHgwMCwweDNlIH0sCisgIDE2LCAweGNhMjAsIDAsIHsweGMwLDB4MDEsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZiLDB4MDAsMHhiZSwweGMwLDB4MGUsMHhiMCwweDIzLDB4ZWMsMHgwOCwweGZiIH0sCisgIDE2LCAweGNhMzAsIDAsIHsweDEwLDB4M2YsMHhjMCwweDBkLDB4YjQsMHgwMywweGVkLDB4MDQsMHhmOSwweDAwLDB4MWUsMHgxNCwweGNmLDB4YjAsMHg4MywweGUwIH0sCisgIDE2LCAweGNhNDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweGNmLDB4MDAsMHgzMCwweGMwIH0sCisgIDE2LCAweGNhNTAsIDAsIHsweDBjLDB4NDAsMHgwMywweGFjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDJjLDB4YjAsMHgwMywweGJjLDB4MDAsMHhmZiwweDAwIH0sCisgIDE2LCAweGNhNjAsIDAsIHsweGIzLDB4ZTAsMHgwZCwweGZhLDB4MDMsMHg3ZSwweDgwLDB4Y2YsMHgwMCwweDMzLDB4YzAsMHgwYywweGZjLDB4NDMsMHhmZiwweDIwIH0sCisgIDE2LCAweGNhNzAsIDAsIHsweGZmLDB4MDAsMHgzZiwweDQwLDB4MDgsMHhmOCwweDAzLDB4YzAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNhODAsIDAsIHsweDgxLDB4MDQsMHg2YywweDEwLDB4YWIsMHgwMCwweDJhLDB4YzAsMHgwYSwweDhlLDB4NDIsMHgyYywweDA0LDB4YmIsMHgwMCwweDJlIH0sCisgIDE2LCAweGNhOTAsIDAsIHsweGMwLDB4MDgsMHhiMCwweDAyLDB4NmMsMHgwMCwweGJiLDB4MDAsMHgzYSwweGMwLDB4MGUsMHgzMCwweDAyLDB4MGQsMHgwOCwweDgzIH0sCisgIDE2LCAweGNhYTAsIDAsIHsweDAyLDB4MjIsMHhjMCwweDBhLDB4YmMsMHgwMiwweGVmLDB4MDAsMHhiYiwweGMwLDB4MmMsMHg2OCwweDBhLDB4YjksMHgwMiwweGUwIH0sCisgIDE2LCAweGNhYjAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MGMsMHgwMCwweDhiLDB4MDAsMHgyMiwweGMwIH0sCisgIDE2LCAweGNhYzAsIDAsIHsweDA4LDB4YjgsMHgwMiwweGFjLDB4MDAsMHhiYiwweDAyLDB4MmUsMHhjMCwweDA4LDB4YjAsMHgwMiwweGVjLDB4MDAsMHhiYiwweDAwIH0sCisgIDE2LCAweGNhZDAsIDAsIHsweDI2LDB4NDgsMHgxOSwweGIwLDB4MDIsMHg2ZCwweDAwLDB4OGIsMHgwMCwweDIyLDB4YzAsMHgwYSwweGIwLDB4MDIsMHhlYywweDA0IH0sCisgIDE2LCAweGNhZTAsIDAsIHsweGJiLDB4MWMsMHgyZSwweDIwLDB4MGEsMHhiMCwweDAyLDB4ZTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNhZjAsIDAsIHsweDA4LDB4MTQsMHgwYywweDAwLDB4YWIsMHgyMCwweDI4LDB4YzAsMHgwYSwweDAwLDB4MDIsMHgwYywweDAwLDB4OTMsMHgwNCwweDJjIH0sCisgIDE2LCAweGNiMDAsIDAsIHsweGMxLDB4MDgsMHgzMCwweDAyLDB4NGMsMHgwMCwweGIzLDB4MDAsMHgyNCwweDQxLDB4MDksMHhiOCwweDAyLDB4MGMsMHgwMiwweDgzIH0sCisgIDE2LCAweGNiMTAsIDAsIHsweDAxLDB4YTAsMHhjMCwweDBhLDB4MzAsMHgwMiwweGNjLDB4MTAsMHg5MywweDAwLDB4MmMsMHgwMCwweDBhLDB4MzAsMHgwMiwweGMyIH0sCisgIDE2LCAweGNiMjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4N2MsMHgwMCwweGNmLDB4MjgsMHgzMywweGMwIH0sCisgIDE2LCAweGNiMzAsIDAsIHsweDBjLDB4YTAsMHg0NiwweGFjLDB4MTEsMHhiZiwweDAwLDB4M2YsMHhjMCwweDVjLDB4ZjAsMHg0MywweGZjLDB4MDAsMHhmZiwweDA0IH0sCisgIDE2LCAweGNiNDAsIDAsIHsweDMyLDB4NDAsMHgwZCwweGIwLDB4MDMsMHg2YywweDA4LDB4Y2IsMHgwNCwweDMxLDB4YzAsMHgwYywweGIwLDB4MzMsMHhlZCwweDQwIH0sCisgIDE2LCAweGNiNTAsIDAsIHsweGZiLDB4MDQsMHgzZSwweDQwLDB4MGUsMHhiMCwweDAzLDB4YzAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNiNjAsIDAsIHsweGEwLDB4MTUsMHhmYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGMwLDB4MjMsMHhmYywweDAxLDB4ZmYsMHgwMCwweDNmIH0sCisgIDE2LCAweGNiNzAsIDAsIHsweGMwLDB4NGYsMHhmMCwweDg3LDB4N2MsMHgwMCwweGZmLDB4MDAsMHgzOSwweDQwLDB4MGUsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZmIH0sCisgIDE2LCAweGNiODAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBmLDB4NzAsMHgwMywweGRjLDB4ODAsMHhmZiwweDAwLDB4M2QsMHg0MCwweDBmLDB4NzAsMHgwMywweGU4IH0sCisgIDE2LCAweGNiOTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHg0MCwweGViLDB4NDgsMHgzZSwweGMyIH0sCisgIDE2LCAweGNiYTAsIDAsIHsweDBlLDB4MDksMHgwMywweGJjLDB4NjAsMHhjMCwweDIwLDB4MzUsMHgyNCwweDBlLDB4ZDIsMHgxMywweDJjLDB4NjAsMHhmYiwweDZhIH0sCisgIDE2LCAweGNiYjAsIDAsIHsweDMzLDB4YzAsMHgwZiwweGNhLDB4MDMsMHgyMiwweDIwLDB4YzAsMHg4MCwweDM3LDB4YzAsMHgwZCwweGYwLDB4MDMsMHg3YywweDAwIH0sCisgIDE2LCAweGNiYzAsIDAsIHsweGVmLDB4MDAsMHgzMywweDI0LDB4MGYsMHhjOCwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNiZDAsIDAsIHsweDgwLDB4MTAsMHhkZCwweDAwLDB4OGYsMHg2MCwweDJmLDB4ZDgsMHgwOCwweGEyLDB4MDIsMHhmZCwweDgwLDB4YzgsMHg3MCwweDIyIH0sCisgIDE2LCAweGNiZTAsIDAsIHsweDAwLDB4MmMsMHhmZCwweDA3LDB4ZGMsMHg4NCwweGJmLDB4NjAsMHgyMywweGQyLDB4MGIsMHhiZCwweDAyLDB4MjMsMHgwMCwweDg4IH0sCisgIDE2LCAweGNiZjAsIDAsIHsweDgwLDB4YTIsMHgyMCwweDg4LDB4YjAsMHgyMiwweDM0LDB4MDAsMHhiYiwweDUwLDB4MjIsMHhjOCwweDBiLDB4YjAsMHgwMiwweDIwIH0sCisgIDE2LCAweGNjMDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHg0MCwweGEzLDB4MDMsMHgyYywweGMyIH0sCisgIDE2LCAweGNjMTAsIDAsIHsweDBhLDB4MDAsMHg0MiwweDhjLDB4ODIsMHhhMywweDBhLDB4MjQsMHg4MCwweDBiLDB4MzAsMHgwMiwweGNjLDB4OTAsMHhiMywweDAwIH0sCisgIDE2LCAweGNjMjAsIDAsIHsweDI4LDB4ZDgsMHgwYiwweDEwLDB4MDIsMHg4YywweDAyLDB4OTAsMHgwMCwweDIwLDB4YzAsMHgwYiwweDEwLDB4NDIsMHg0YywweDAwIH0sCisgIDE2LCAweGNjMzAsIDAsIHsweGIzLDB4MDQsMHgyNCwweGMwLDB4MGIsMHgzMCwweDBlLDB4YTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNjNDAsIDAsIHsweGMwLDB4MTUsMHhhYywweDEwLDB4OWIsMHgwNCwweDJjLDB4YzAsMHhmOCwweDk4LDB4MDYsMHhlYywweDAwLDB4YWIsMHg4MCwweDI2IH0sCisgIDE2LCAweGNjNTAsIDAsIHsweDIwLDB4MDgsMHg5MCwweDJhLDB4YWMsMHgxMCwweGJiLDB4MDAsMHgwYSwweGMwLDB4MWIsMHhiMCwweDIyLDB4YWQsMHgwMCwweDk4IH0sCisgIDE2LCAweGNjNjAsIDAsIHsweDQwLDB4MmEsMHg3MCwweDRiLDB4YjAsMHgwMiwweDJjLDB4MDAsMHhiMywweDAwLDB4YTYsMHg4NiwweDFiLDB4YjAsMHg4MiwweGIwIH0sCisgIDE2LCAweGNjNzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwMCwweGViLDB4MDAsMHgzZSwweGMwIH0sCisgIDE2LCAweGNjODAsIDAsIHsweDhlLDB4OTgsMHgwMywweGFjLDB4MDgsMHhlOCwweGMwLDB4MzYsMHgzMCwweDRmLDB4YjAsMHg0MiwweGVjLDB4MDAsMHhmOSwweDgwIH0sCisgIDE2LCAweGNjOTAsIDAsIHsweDNhLDB4YzAsMHg4ZiwweDg4LDB4NDIsMHgyMCwweDEwLDB4YzgsMHgxMCwweDMwLDB4ZjAsMHgwZiwweDMwLDB4MTMsMHg2YywweDEwIH0sCisgIDE2LCAweGNjYTAsIDAsIHsweGViLDB4MDAsMHgzNiwweGYwLDB4MGYsMHhiZCwweDAzLDB4OTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNjYjAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4ZWYsMHgwNCwweDdmLDB4YzAsMHgwZiwweGYwLDB4NDMsMHhkYywweDAwLDB4YzQsMHgwMCwweDNiIH0sCisgIDE2LCAweGNjYzAsIDAsIHsweDQwLDB4OGIsMHhkYywweDAzLDB4N2MsMHgxMCwweGY5LDB4OTAsMHgzNiwweGMyLDB4NGYsMHhmOSwweDIzLDB4NjIsMHg0MSwweGFjIH0sCisgIDE2LCAweGNjZDAsIDAsIHsweDAxLDB4MTMsMHg0MCwweDA0LDB4YjAsMHgwMywweGU0LDB4MDAsMHhmZiwweDAwLDB4M2IsMHhjMCwweDBmLDB4YzAsMHgwMywweDc4IH0sCisgIDE2LCAweGNjZTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4OGMsMHgxMiwweGNiLDB4MDAsMHhmMiwweGMwIH0sCisgIDE2LCAweGNjZjAsIDAsIHsweDBmLDB4ODAsMHgwMywweGFjLDB4MDgsMHhkOSwweDAwLDB4M2EsMHg4MCwweDBmLDB4MTIsMHgwMywweGFjLDB4MDAsMHhlMSwweDAwIH0sCisgIDE2LCAweGNkMDAsIDAsIHsweDMyLDB4YzAsMHgwYywweDkwLDB4MDMsMHhlZCwweDAyLDB4YzgsMHg0MCwweDNlLDB4ZDAsMHgwZiwweDkwLDB4MTMsMHgyYywweDAyIH0sCisgIDE2LCAweGNkMTAsIDAsIHsweGRiLDB4MDAsMHgzZSwweDUwLDB4MGMsMHhiNCwweDAzLDB4MTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNkMjAsIDAsIHsweGM4LDB4MDUsMHgzYywweDAwLDB4OGYsMHgwMCwweDE3LDB4YzAsMHgwOCwweDkwLDB4MDIsMHgzYywweDA4LDB4OGQsMHgwMCwweDIyIH0sCisgIDE2LCAweGNkMzAsIDAsIHsweDU0LDB4MDgsMHhiNCwweDAzLDB4M2MsMHgwMCwweDg5LDB4MDAsMHgyMywweGMwLDB4NDAsMHgzNSwweDAyLDB4Y2MsMHgyNCwweDgwIH0sCisgIDE2LCAweGNkNDAsIDAsIHsweDAwLDB4MjIsMHg3NCwweDRjLDB4YjAsMHgwMiwweDJjLDB4MDAsMHg4ZiwweDAwLDB4MmUsMHhkNCwweDBhLDB4YjAsMHgwYSwweDMyIH0sCisgIDE2LCAweGNkNTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4NGMsMHgwMiwweDgzLDB4MDAsMHgyNCwweGMwIH0sCisgIDE2LCAweGNkNjAsIDAsIHsweDA5LDB4MDAsMHgwMiwweDhjLDB4MDEsMHg5MCwweDAwLDB4NmEsMHg0MSwweDBhLDB4MzAsMHgyMCwweDRlLDB4MTAsMHgzMSwweDAyIH0sCisgIDE2LCAweGNkNzAsIDAsIHsweDJjLDB4YzAsMHgwOSwweDIwLDB4MDYsMHhjZSwweDAwLDB4ODAsMHgwMCwweDYwLDB4ZTAsMHgwYSwweDMwLDB4ODIsMHgwYywweDA4IH0sCisgIDE2LCAweGNkODAsIDAsIHsweDgzLDB4MDgsMHgyYywweGQwLDB4MDksMHhiMCwweDAyLDB4NzgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNkOTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDA0LDB4ODcsMHhiMCwweDIwLDB4ZWMsMHgwOSwweGU5LDB4MDIsMHg4ZSwweDU4LDB4OWQsMHhiMCwweDJiIH0sCisgIDE2LCAweGNkYTAsIDAsIHsweGE1LDB4NDAsMHg1YiwweDA2LDB4ZGUsMHg0MCwweDk1LDB4OTQsMHgyZCwweGU0LDB4MTksMHg3YiwweDA2LDB4ZGUsMHgwMCwweDg0IH0sCisgIDE2LCAweGNkYjAsIDAsIHsweDgwLDB4NjAsMHhlMCwweDBhLDB4NzgsMHgwYSwweDE2LDB4MTAsMHg4NywweDgwLDB4MmQsMHg2OCwweDBiLDB4NzksMHgwMiwweDQ4IH0sCisgIDE2LCAweGNkYzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweGNiLDB4YTAsMHgyNCwweGUwIH0sCisgIDE2LCAweGNkZDAsIDAsIHsweDBmLDB4MmEsMHgwMywweDhlLDB4MDAsMHhkMiwweGQwLDB4MzgsMHhmYSwweDBmLDB4MTgsMHhjMywweGNlLDB4MjQsMHgzMSwweGIwIH0sCisgIDE2LCAweGNkZTAsIDAsIHsweDNjLDB4ZTUsMHgwYywweDNiLDB4MTcsMHhjZSwweDA0LDB4YzAsMHg4MiwweDM4LDB4YzIsMHg5ZSwweDEwLDB4MDMsMHgwYywweDAwIH0sCisgIDE2LCAweGNkZjAsIDAsIHsweGMzLDB4MDEsMHgzZSwweGMwLDB4MGQsMHg4MSwweDAzLDB4NTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNlMDAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZWYsMHgxMCwweDNlLDB4YzIsMHgwZSwweGIxLDB4MjMsMHgyYywweGMxLDB4YWIsMHgwMSwweDM2IH0sCisgIDE2LCAweGNlMTAsIDAsIHsweDgwLDB4MGYsMHhiMCwweDIzLDB4MmQsMHg5MCwweGU5LDB4ODQsMHg3MiwweGM4LDB4NjIsMHhmMSwweDE3LDB4ZmMsMHgwMCwweGZjIH0sCisgIDE2LCAweGNlMjAsIDAsIHsweDAwLDB4M2IsMHhjNCwweDFkLDB4ZjAsMHgwMywweGVjLDB4MDAsMHhlZiwweDA4LDB4M2YsMHhjOCwweDBlLDB4ZjEsMHgwMywweDkwIH0sCisgIDE2LCAweGNlMzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHg4MCwweGZiLDB4YTQsMHgzYSwweGM4IH0sCisgIDE2LCAweGNlNDAsIDAsIHsweDBlLDB4OTAsMHgwMywweDJjLDB4MDQsMHhjYSwweDAwLDB4MzAsMHg2MCwweDJkLDB4MWEsMHgyNywweDZjLDB4ODQsMHhjYiwweDYwIH0sCisgIDE2LCAweGNlNTAsIDAsIHsweDMyLDB4ZDIsMHgwYywweGEwLDB4MTMsMHgyZCwweDg0LDB4Y2IsMHgwMiwweDNlLDB4YzAsMHgwZCwweGI4LDB4MDMsMHhhYywweDgwIH0sCisgIDE2LCAweGNlNjAsIDAsIHsweGNiLDB4ODEsMHgzMiwweDgwLDB4MGMsMHhiMCwweDAzLDB4YWEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNlNzAsIDAsIHsweDQ4LDB4MTEsMHg5YywweGE0LDB4YjcsMHgyOCwweDczLDB4YzIsMHgwOCwweGYwLDB4MDIsMHgzYywweGMwLDB4OGYsMHgwMCwweDMxIH0sCisgIDE2LCAweGNlODAsIDAsIHsweGMwLDB4MDksMHg3MCwweDgyLDB4OWMsMHg4MCwweDg3LDB4MGMsMHgyMCwweGQ4LDB4MDksMHg3MCwweDIyLDB4MWMsMHgzMCwweDg0IH0sCisgIDE2LCAweGNlOTAsIDAsIHsweDAwLDB4M2QsMHhjMCwweDA4LDB4NzAsMHgwMiwweDE0LDB4MjQsMHg4NywweGEwLDB4MjEsMHhjMCwweDA4LDB4NzAsMHgxMiwweDEyIH0sCisgIDE2LCAweGNlYTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHg0MCwweGIzLDB4OTUsMHgyOSwweGU5IH0sCisgIDE2LCAweGNlYjAsIDAsIHsweDBhLDB4NjgsMHgwMiwweDllLDB4ZDAsMHg4NiwweGYwLDB4YTMsMHhlMCwweDA4LDB4NzgsMHgxMiwweDllLDB4NDQsMHhhMywweDgyIH0sCisgIDE2LCAweGNlYzAsIDAsIHsweDIxLDB4ZTgsMHgwYiwweDM4LDB4MDIsMHgwZSwweDEwLDB4ODcsMHg4MCwweDJmLDB4ZTAsMHgwYiwweDE4LDB4MDIsMHg4ZSwweDAyIH0sCisgIDE2LCAweGNlZDAsIDAsIHsweDg3LDB4MDAsMHgyMSwweGUwLDB4MDgsMHg3OCwweDAyLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNlZTAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDAwLDB4YjMsMHgwMCwweDI0LDB4YzAsMHg0OCwweDMwLDB4MDIsMHgwYywweDA0LDB4ODMsMHg4MCwweDIwIH0sCisgIDE2LCAweGNlZjAsIDAsIHsweGQwLDB4MDksMHgxMCwweDAyLDB4OGMsMHgwNiwweGEzLDB4ODAsMHgyMCwweGMwLDB4MGIsMHgzMCwweDAyLDB4MGMsMHgwMiwweDgwIH0sCisgIDE2LCAweGNmMDAsIDAsIHsweDQwLDB4MjgsMHhkMiwweDBhLDB4MzAsMHgwMiwweDBjLDB4MDEsMHg4MywweDAwLDB4MjIsMHgzYywweDA4LDB4ODcsMHgwMiwweDEyIH0sCisgIDE2LCAweGNmMTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgxOCwweGZhLDB4MDAsMHgzYSwweDgwIH0sCisgIDE2LCAweGNmMjAsIDAsIHsweDhlLDB4ZTQsMHg0MiwweDI4LDB4MDIsMHhjZSwweDgwLDB4MzMsMHg4MCwweDRkLDB4YTAsMHg4MywweGU4LDB4MDAsMHhlYSwweGEwIH0sCisgIDE2LCAweGNmMzAsIDAsIHsweGIyLDB4ODAsMHgwYSwweGEwLDB4MGEsMHgyOCwweDAwLDB4Y2UsMHgxOCwweDJmLDB4ODAsMHgwZiwweGEwLDB4MTMsMHhhOCwweDAwIH0sCisgIDE2LCAweGNmNDAsIDAsIHsweGNhLDB4MDAsMHgzMiwweDkwLDB4MmMsMHhhYywweDBiLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNmNTAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgwNCwweDNhLDB4MDAsMHgwZiwweDgwLDB4ODMsMHhjMCwweDA4LDB4ZTgsMHgwMywweDNhIH0sCisgIDE2LCAweGNmNjAsIDAsIHsweDAwLDB4MGUsMHg4MCwweDIyLDB4YzAsMHgwMCwweGQwLDB4MDAsMHg3ZSwweDEwLDB4YTQsMHg4MCwweDAzLDB4YzAsMHgwMCwweGY4IH0sCisgIDE2LCAweGNmNzAsIDAsIHsweDAwLDB4M2UsMHgxMCwweDBkLDB4ODQsMHgwMywweGMwLDB4MDAsMHhmOCwweDAwLDB4YmUsMHgwMCwweDBmLDB4ODAsMHgwMSwweDUyIH0sCisgIDE2LCAweGNmODAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4YzQsMHgwMiwweGM5LDB4MDAsMHgzNiwweDQwIH0sCisgIDE2LCAweGNmOTAsIDAsIHsweDBjLDB4OTAsMHgwMywweDY0LDB4MDIsMHg4OSwweDA0LDB4MzIsMHg0MiwweDBkLDB4OTIsMHgwMywweGU2LDB4NDIsMHhjOSwweDAwIH0sCisgIDE2LCAweGNmYTAsIDAsIHsweDMyLDB4NzAsMHgwZSwweDEyLDB4MGIsMHgyNCwweDA4LDB4YzksMHgwMCwweDNlLDB4NDUsMHgwZSwweDk5LDB4MDMsMHhlNCwweDAyIH0sCisgIDE2LCAweGNmYjAsIDAsIHsweGMxLDB4MDAsMHgzMiwweDUwLDB4MDQsMHg5NCwweDAzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNmYzAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHgwMCwweDZlLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDAwLDB4ODksMHgwMCwweDIyIH0sCisgIDE2LCAweGNmZDAsIDAsIHsweDU0LDB4MGIsMHg5MCwweDAzLDB4ZTYsMHgwMCwweDg5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHg5MCwweDBhLDB4MjQsMHgwMCwweDg5IH0sCisgIDE2LCAweGNmZTAsIDAsIHsweDAwLDB4MzgsMHg0OCwweDA4LDB4OTAsMHg4MiwweGU0LDB4MDQsMHhkOSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweDIwIH0sCisgIDE2LCAweGNmZjAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweDg5LDB4MDEsMHgyYywweDQwIH0sCisgIDE2LCAweGQwMDAsIDAsIHsweDI4LDB4MTAsMHg0MiwweDY0LDB4MDAsMHhhMSwweDA0LDB4MjIsMHg1MCwweDAxLDB4OTAsMHg0MiwweGU0LDB4MDAsMHg4OSwweDA0IH0sCisgIDE2LCAweGQwMTAsIDAsIHsweDIwLDB4NDIsMHgwYSwweDkwLDB4NDIsMHgzNCwweDAwLDB4ODksMHgwMCwweDZlLDB4NDAsMHgwYSwweDkwLDB4MDAsMHhlNCwweDAwIH0sCisgIDE2LCAweGQwMjAsIDAsIHsweDg5LDB4MDAsMHgyMywweDQwLDB4MGEsMHhkMCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQwMzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4ODEsMHgyNCwweDJjLDB4NDgsMHgwOCwweDEwLDB4MDIsMHgwNCwweDgwLDB4YTEsMHgyMCwweDI4IH0sCisgIDE2LCAweGQwNDAsIDAsIHsweDQwLDB4MGIsMHgxMCwweDAyLDB4ODUsMHg4MCwweDgxLDB4MjAsMHgyMCwweDQ4LDB4MDgsMHg1MCwweDYyLDB4MTQsMHgwMiwweDgxIH0sCisgIDE2LCAweGQwNTAsIDAsIHsweDAzLDB4MmUsMHg0MCwweDg4LDB4MTYsMHg4MiwweGM0LDB4YTAsMHg5MSwweDI4LDB4MjEsMHg0MCwweDJhLDB4NTAsMHgwMiwweDAyIH0sCisgIDE2LCAweGQwNjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGM4LDB4NTAsMHgyZSwweDE0IH0sCisgIDE2LCAweGQwNzAsIDAsIHsweDBjLDB4ODUsMHgwMywweDYxLDB4NDAsMHhlOCwweDUwLDB4YjIsMHgxNSwweDRkLDB4ODAsMHgwMiwweGMwLDB4MDAsMHg0OCwweDUwIH0sCisgIDE2LCAweGQwODAsIDAsIHsweGIyLDB4MTUsMHgxYSwweDgwLDB4MTMsMHgzMCwweDA4LDB4YzgsMHgwMCwweDNlLDB4MDAsMHgwZSwweDgyLDB4MDMsMHhlMCwweDgwIH0sCisgIDE2LCAweGQwOTAsIDAsIHsweGMwLDB4MjAsMHgzMCwweDAwLDB4MGUsMHg0MCwweDBiLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQwYTAsIDAsIHsweDk4LDB4MWQsMHhlNCwweDQwLDB4ZjksMHgxMCwweDNlLDB4NDQsMHgwZiwweGQwLDB4MDMsMHhlNCwweDQ4LDB4ZGQsMHgxMCwweDM3IH0sCisgIDE2LCAweGQwYjAsIDAsIHsweDQwLDB4MGYsMHhkNCwweDA3LDB4ZTQsMHg0MCwweGZkLDB4MTAsMHgzZSwweDQ1LDB4MGYsMHg5NCwweDAzLDB4ZTUsMHgwOCwweGZkIH0sCisgIDE2LCAweGQwYzAsIDAsIHsweDAyLDB4MzksMHhkMCwweDBmLDB4ZDAsMHg0MywweGY0LDB4YTAsMHhmOSwweDI4LDB4M2UsMHg0YiwweDBkLDB4OTIsMHg4MywweGU2IH0sCisgIDE2LCAweGQwZDAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZTYsMHg4MCwweGM5LDB4YTYsMHgzMiwweDY4IH0sCisgIDE2LCAweGQwZTAsIDAsIHsweDBjLDB4OTAsMHgwMywweGE2LDB4ODEsMHhlOSwweGU5LDB4M2IsMHg0MCwweDBlLDB4NTgsMHgwMywweDM2LDB4MjAsMHhjOSwweGEwIH0sCisgIDE2LCAweGQwZjAsIDAsIHsweDM3LDB4NzgsMHgwZCwweGRhLDB4MDMsMHgzNiwweDI2LDB4YzUsMHgwMCwweDM3LDB4NjksMHgwZSwweGRlLDB4MDMsMHhhNiwweDgyIH0sCisgIDE2LCAweGQxMDAsIDAsIHsweGNkLDB4YzAsMHgzMywweDUwLDB4MGYsMHhkMCwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQxMTAsIDAsIHsweDM4LDB4MTAsMHhlMywweGE0LDB4ODgsMHhhOSwweDIyLDB4M2EsMHgwOCwweDA4LDB4MDAsMHgyMiwweGEwLDB4YjgsMHhlNSwweDMwIH0sCisgIDE2LCAweGQxMjAsIDAsIHsweDIwLDB4MjgsMHg4MCwweDIyLDB4NDMsMHhhMCwweDA4LDB4ZTgsMHgyYSwweDNkLDB4MDgsMHhhNCwweDYyLDB4MjAsMHgwMCwweDg4IH0sCisgIDE2LCAweGQxMzAsIDAsIHsweDAwLDB4MmUsMHgxMCwweDA4LDB4OGUsMHgwMywweDIzLDB4YTAsMHg4OCwweGEwLDB4MjAsMHgyOCwweDBiLDB4OGEsMHg4MiwweDBlIH0sCisgIDE2LCAweGQxNDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHg0MCwweDkxLDB4NDAsMHgyMCwweDQ0IH0sCisgIDE2LCAweGQxNTAsIDAsIHsweDA4LDB4OTAsMHhhMiwweDg1LDB4MTAsMHhhMSwweDIwLDB4MmMsMHg0MiwweDBiLDB4MTQsMHgxMiwweDhjLDB4MDEsMHg5MSwweDEwIH0sCisgIDE2LCAweGQxNjAsIDAsIHsweDJjLDB4NDgsMHgwOSwweDExLDB4MGEsMHhjNCwweDAwLDB4ODEsMHgwMCwweDJjLDB4NTAsMHgwYiwweDExLDB4MTIsMHhjNSwweDAxIH0sCisgIDE2LCAweGQxNzAsIDAsIHsweGIxLDB4NDAsMHgyNCwweDQ4LDB4MGIsMHgxOCwweDBlLDB4MDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQxODAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4OTEsMHgwMCwweDIyLDB4NDEsMHgwOCwweDk0LDB4NDIsMHgyNCwweDAwLDB4YjEsMHg0MCwweDIwIH0sCisgIDE2LCAweGQxOTAsIDAsIHsweDQwLDB4NDksMHhiMiwweDYyLDB4MjQsMHgwMCwweDk5LDB4MDAsMHgwYSwweDQwLDB4MDgsMHg5MCwweDAyLDB4ZTUsMHg4MCwweDg5IH0sCisgIDE2LCAweGQxYTAsIDAsIHsweDAwLDB4MmUsMHg0MCwweDA5LDB4YjAsMHgwMiwweDI0LDB4ODAsMHhiOSwweDAwLDB4MjYsMHg1MCwweDRiLDB4OTAsMHgwMiwweDA2IH0sCisgIDE2LCAweGQxYjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMiwweGQ5LDB4MDAsMHhiMiwweDQwIH0sCisgIDE2LCAweGQxYzAsIDAsIHsweDJjLDB4OTUsMHgxMywweGE0LDB4MTAsMHhlOSwweDAwLDB4YmUsMHg2MCwweDhmLDB4OTAsMHgwYiwweGE0LDB4MTAsMHg1OSwweDAwIH0sCisgIDE2LCAweGQxZDAsIDAsIHsweDFlLDB4NDAsMHg5ZCwweDk0LDB4MjMsMHhlNCwweDAyLDB4ODksMHgwMCwweDM0LDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNiwweDA4IH0sCisgIDE2LCAweGQxZTAsIDAsIHsweDc5LDB4MDAsMHhiNiwweDQwLDB4MDcsMHg5OCwweDAzLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQxZjAsIDAsIHsweDI4LDB4MDEsMHg4NCwweDAwLDB4ZTksMHgwMiwweDNjLDB4NDAsMHgyZiwweDk4LDB4MDIsMHhlNCwweDAwLDB4ZjksMHg0MiwweDNhIH0sCisgIDE2LCAweGQyMDAsIDAsIHsweDY4LDB4MGEsMHgxMCwweDAzLDB4ZTQsMHgxMCwweGU5LDB4MDAsMHgzZSwweDQwLDB4MGUsMHg5MCwweDBmLDB4MjYsMHgwMCwweGY5IH0sCisgIDE2LCAweGQyMTAsIDAsIHsweDA0LDB4M2UsMHg0MCwweDBlLDB4MWMsMHgwMywweGU2LDB4MDAsMHhjMSwweDAwLDB4M2EsMHg1MCwweDBmLDB4OTksMHg4MywweGNhIH0sCisgIDE2LCAweGQyMjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGU4LDB4MDAsMHgzYSwweDAwIH0sCisgIDE2LCAweGQyMzAsIDAsIHsweDBjLDB4ODQsMHgwMywweDIwLDB4MDAsMHhkOCwweDQyLDB4MzIsMHgwNCwweDBjLDB4ODgsMHgxMywweGUwLDB4MDAsMHhjOCwweDAwIH0sCisgIDE2LCAweGQyNDAsIDAsIHsweDMwLDB4MDAsMHgwYywweDA0LDB4MGIsMHgwMCwweDAwLDB4ZDgsMHgwMCwweDM2LDB4MDAsMHgwZSwweDgwLDB4MjMsMHgwMCwweDAwIH0sCisgIDE2LCAweGQyNTAsIDAsIHsweGM4LDB4ODAsMHgzMiwweDAwLDB4MGMsMHg4MCwweDAxLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQyNjAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDEwLDB4OGEsMHgwMCwweDJlLDB4ODAsMHgyOCwweDIwLDB4MjIsMHgyOCwweDAwLDB4OGEsMHgwMCwweDIzIH0sCisgIDE2LCAweGQyNzAsIDAsIHsweGIwLDB4ODgsMHhlMCwweDAyLDB4MjgsMHgxMCwweGRhLDB4MDAsMHhhMywweGI0LDB4MDgsMHhlOCwweDEwLDB4MjgsMHgwMCwweDhlIH0sCisgIDE2LCAweGQyODAsIDAsIHsweDIwLDB4MjMsMHhhMCwweDQ4LDB4ZWQsMHgxYSwweDI4LDB4MDAsMHhkZSwweDAwLDB4MjMsMHg5MCwweDBhLDB4ZTAsMHgwMiwweDBhIH0sCisgIDE2LCAweGQyOTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweGEzLDB4MDAsMHgyOCwweGMwIH0sCisgIDE2LCAweGQyYTAsIDAsIHsweDA4LDB4MzAsMHgwYSwweDBjLDB4MDAsMHg5MywweDAwLDB4MjAsMHhjMiwweDJhLDB4MzAsMHgyMiwweGE0LDB4MDAsMHhiYiwweDAwIH0sCisgIDE2LCAweGQyYjAsIDAsIHsweDA4LDB4ZTAsMHgxOCwweDA5LDB4MGEsMHg0YywweDAwLDB4OTMsMHgwMiwweDI0LDB4ZTgsMHgwMiwweDA4LDB4MDYsMHg0YywweDAwIH0sCisgIDE2LCAweGQyYzAsIDAsIHsweDkzLDB4MDAsMHgyMCwweGQ4LDB4MGEsMHg5MCwweDAyLDB4NGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQyZDAsIDAsIHsweGEwLDB4MDEsMHgxYywweDgwLDB4ODcsMHgwNCwweDJkLDB4YzAsMHgwOCwweDcwLDB4MDIsMHgwZSwweDAwLDB4ODcsMHgxMCwweDI1IH0sCisgIDE2LCAweGQyZTAsIDAsIHsweDAwLDB4MGEsMHg2MCwweDAyLDB4NWUsMHgwMCwweDk3LDB4MDAsMHgyOSwweDgyLDB4MDgsMHg1MCwweDEyLDB4NTQsMHgwMCwweDhmIH0sCisgIDE2LCAweGQyZjAsIDAsIHsweDgwLDB4NjEsMHhkMCwweDA4LDB4MDQsMHgwMiwweDVjLDB4MDEsMHhiNywweDA4LDB4YTksMHhhMCwweDBhLDB4NTAsMHg4MiwweDY4IH0sCisgIDE2LCAweGQzMDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4M2UsMHg4MCwweGU3LDB4ODAsMHgzOCwweGU0IH0sCisgIDE2LCAweGQzMTAsIDAsIHsweDA4LDB4N2UsMHgwMywweDFmLDB4MDAsMHhkZiwweDgwLDB4YjEsMHgyMSwweDFlLDB4NzgsMHgwMywweGRjLDB4MDQsMHhmMywweDgwIH0sCisgIDE2LCAweGQzMjAsIDAsIHsweDViLDB4ZTEsMHgwOCwweDI4LDB4MDMsMHg1ZSwweDAwLDB4ZDcsMHg4MCwweDM1LDB4NjAsMHgwZSwweDY4LDB4MDMsMHg0ZSwweDAwIH0sCisgIDE2LCAweGQzMzAsIDAsIHsweGRmLDB4ODAsMHgzMSwweGUwLDB4MGUsMHhmOCwweDBiLDB4NmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQzNDAsIDAsIHsweDA4LDB4MWQsMHhhZCwweDAyLDB4ZmIsMHg3NCwweDNlLDB4ZDAsMHg0ZiwweGIyLDB4ODMsMHhlZCwweDAwLDB4N2IsMHg2OCwweDNhIH0sCisgIDE2LCAweGQzNTAsIDAsIHsweDAwLDB4OGQsMHg4MCwweDAzLDB4YTQsMHgyMCwweGRiLDB4MDEsMHgzNiwweDgwLDB4NmYsMHhiMCwweDQxLDB4ODQsMHgwMCwweGViIH0sCisgIDE2LCAweGQzNjAsIDAsIHsweDAwLDB4M2MsMHhjMCwweDBmLDB4ZTYsMHg4MywweGJjLDB4NDAsMHhkYiwweDAwLDB4YjYsMHg4MCwweDBmLDB4YjAsMHgwMywweDgyIH0sCisgIDE2LCAweGQzNzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmYsMHgyMCwweGRmLDB4YzAsMHgzYiwweGU2IH0sCisgIDE2LCAweGQzODAsIDAsIHsweDBlLDB4ZjgsMHgxMywweGZmLDB4NDQsMHhjNywweDgyLDB4M2IsMHhlMCwweDBmLDB4ZjksMHgwMywweGJlLDB4MTAsMHhjZiwweGM4IH0sCisgIDE2LCAweGQzOTAsIDAsIHsweDMzLDB4NjAsMHg4ZCwweGViLDB4MDMsMHgzZSwweDAwLDB4ZGIsMHg4MiwweDNmLDB4ZTAsMHgwYywweGQ4LDB4MDMsMHgzZSwweDQwIH0sCisgIDE2LCAweGQzYTAsIDAsIHsweGNlLDB4ODAsMHgzMywweGU0LDB4MGYsMHhmOCwweDAzLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQzYjAsIDAsIHsweGE4LDB4MTEsMHhiYywweDQwLDB4ODcsMHgwMCwweDIxLDB4ZTQsMHgwYiwweDc4LDB4YTIsMHhjZSwweDkwLDB4YzcsMHhiMCwweDIwIH0sCisgIDE2LCAweGQzYzAsIDAsIHsweGU4LDB4MGIsMHgyOCwweDkyLDB4YjYsMHg4OCwweDg3LDB4YTAsMHgyMCwweDY0LDB4MGIsMHgzNSwweDAzLDB4MTQsMHgwMCwweDg3IH0sCisgIDE2LCAweGQzZDAsIDAsIHsweGIyLDB4MzksMHhjMCwweDJjLDB4YzAsMHgwMywweDVlLDB4MDIsMHhjZiwweDAwLDB4MzEsMHhjZSwweDBiLDB4NzYsMHgxMiwweDJhIH0sCisgIDE2LCAweGQzZTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweGEzLDB4MTAsMHgyOSwweGM4IH0sCisgIDE2LCAweGQzZjAsIDAsIHsweDBiLDB4NzQsMHgwMiwweGRjLDB4ODAsMHg4ZiwweDAwLDB4MjksMHhjYywweDBhLDB4MzAsMHgwNiwweDE0LDB4ODAsMHg4NywweDEwIH0sCisgIDE2LCAweGQ0MDAsIDAsIHsweDIxLDB4YzAsMHgwYiwweDY2LDB4MDIsMHg1YywweDAwLDB4ODcsMHgwMCwweDJkLDB4YzAsMHgwYiwweDUxLDB4MDIsMHgxYywweDgwIH0sCisgIDE2LCAweGQ0MTAsIDAsIHsweDk2LDB4MDAsMHgyMSwweGMwLDB4NWIsMHg3NCwweDgyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ0MjAsIDAsIHsweDIwLDB4MTQsMHhjYywweDA4LDB4YTMsMHgwMCwweDIwLDB4YzAsMHgwYiwweGI4LDB4MDIsMHhjYywweDAwLDB4OGIsMHg0MCwweGE4IH0sCisgIDE2LCAweGQ0MzAsIDAsIHsweGMwLDB4OGIsMHgwOCwweDIyLDB4OGMsMHgwMiwweDgzLDB4MDAsMHg2MCwweGMwLDB4MGIsMHgzMCwweDQyLDB4MDQsMHgwMCwweDgzIH0sCisgIDE2LCAweGQ0NDAsIDAsIHsweDQwLDB4MjgsMHhmYywweDhhLDB4MDAsMHgwMiwweDZlLDB4MDAsMHg4MywweDAwLDB4YTAsMHhkMCwweDhiLDB4MzgsMHgwMiwweDA4IH0sCisgIDE2LCAweGQ0NTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4YmMsMHgwMiwweGVmLDB4MDAsMHgzYiwweGMwIH0sCisgIDE2LCAweGQ0NjAsIDAsIHsweDRmLDB4ZjgsMHgwMiwweGZjLDB4MDIsMHhjZiwweDAwLDB4MzgsMHgxMiwweDBlLDB4OTgsMHgwMiwweDJjLDB4MDAsMHhjZiwweDAwIH0sCisgIDE2LCAweGQ0NzAsIDAsIHsweDMyLDB4YzAsMHgwOSwweDkwLDB4MDMsMHg2NCwweDAyLDB4ODEsMHhjMCwweDNlLDB4ZDAsMHgwZiwweDkwLDB4MDcsMHgzYywweDAzIH0sCisgIDE2LCAweGQ0ODAsIDAsIHsweGQ5LDB4MDAsMHgzMiwweDYwLDB4MGYsMHg4OCwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ0OTAsIDAsIHsweDgwLDB4MDAsMHhjYywweDAwLDB4ZGIsMHgwMCwweDNlLDB4YzAsMHg4ZiwweGIwLDB4MDMsMHhlYywweDAwLDB4ZmIsMHgwMiwweDM2IH0sCisgIDE2LCAweGQ0YTAsIDAsIHsweGMwLDB4NGYsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGZiLDB4MDAsMHhiZSwweDkwLDB4MGYsMHg5YywweDEzLDB4ZWMsMHgwMCwweGU5IH0sCisgIDE2LCAweGQ0YjAsIDAsIHsweDE4LDB4M2EsMHhkMCwweDA0LDB4ZDUsMHgwMywweGVjLDB4NDAsMHhlOSwweDAwLDB4M2EsMHgwMCwweDhmLDB4ODAsMHgwMywweGUwIH0sCisgIDE2LCAweGQ0YzAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweGNmLDB4MDAsMHgzZCwweGMxIH0sCisgIDE2LCAweGQ0ZDAsIDAsIHsweDhjLDB4ZjAsMHgwMywweDJjLDB4MDAsMHhlZiwweDBhLDB4YjMsMHgxMiwweDJjLDB4NzAsMHgyMywweDE0LDB4MGEsMHg0ZiwweDAwIH0sCisgIDE2LCAweGQ0ZTAsIDAsIHsweDM1LDB4NjAsMHgwZCwweGIwLDB4MDMsMHgwNCwweDAwLDB4Y2QsMHg4MCwweDA3LDB4ZTgsMHgwYywweGM0LDB4MDMsMHgyYywweDAwIH0sCisgIDE2LCAweGQ0ZjAsIDAsIHsweGNkLDB4MDAsMHgzMSwweGUyLDB4MmMsMHhlMCwweDAzLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ1MDAsIDAsIHsweDgxLDB4MDQsMHg2YywweDAyLDB4YWIsMHgwMiwweDJlLDB4YzAsMHgwZSwweGIwLDB4MDIsMHgyYywweDAwLDB4OGIsMHgwMCwweDMyIH0sCisgIDE2LCAweGQ1MTAsIDAsIHsweDMwLDB4MDAsMHg5YywweDAzLDB4NmMsMHgwMCwweDhiLDB4MDQsMHgyMiwweDM2LDB4MDgsMHgzNCwweDRhLDB4MmMsMHgwOCwweDg5IH0sCisgIDE2LCAweGQ1MjAsIDAsIHsweDkwLDB4MjAsMHhiOCwweDBmLDB4ODQsMHgwMCwweGFjLDB4MDIsMHg4OSwweDAwLDB4MzYsMHhhMCwweDA4LDB4YTQsMHgwMiwweDIwIH0sCisgIDE2LCAweGQ1MzAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweDhiLDB4MDAsMHgyZSwweGMwIH0sCisgIDE2LCAweGQ1NDAsIDAsIHsweDA4LDB4YjAsMHgwMiwweDBjLDB4MDAsMHg4YiwweDAwLDB4MjIsMHhkMSwweDA4LDB4ODgsMHgxMiwweDI2LDB4MDAsMHhhMywweDAwIH0sCisgIDE2LCAweGQ1NTAsIDAsIHsweDI2LDB4NDAsMHgwYiwweGIwLDB4MDIsMHgyNiwweDAwLDB4OGIsMHgwMCwweDI2LDB4YzAsMHg1OCwweDEwLDB4MTIsMHgyYywweDA0IH0sCisgIDE2LCAweGQ1NjAsIDAsIHsweDgyLDB4ODAsMHgyYSwweDQ5LDB4MDgsMHgzMCwweDAyLDB4MjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ1NzAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAwLDB4YTMsMHgxNCwweDJjLDB4YzgsMHgxYSwweDM0LDB4OGEsMHgwYywweDg0LDB4ODMsMHg0MCwweDIyIH0sCisgIDE2LCAweGQ1ODAsIDAsIHsweGM4LDB4MDgsMHgwMywweDYyLDB4NGMsMHhjMCwweGEzLDB4NjAsMHgyMCwweDQwLDB4MGEsMHgzMCwweDAyLDB4MGMsMHgwMCwweDhiIH0sCisgIDE2LCAweGQ1OTAsIDAsIHsweDQ1LDB4MDgsMHhjMCwweDBiLDB4MTAsMHgwMiwweDhjLDB4YTAsMHg4MywweDAwLDB4MjYsMHg0MCwweDA4LDB4MzAsMHgwYSwweDAyIH0sCisgIDE2LCAweGQ1YTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4N2MsMHgwMCwweGNmLDB4NDAsMHgyZiwweGQyIH0sCisgIDE2LCAweGQ1YjAsIDAsIHsweDhjLDB4ZjYsMHgwMywweDNjLDB4MjIsMHhjZiwweDQwLDB4MzIsMHhkNiwweDRjLDB4YTYsMHhjMSwweDNkLDB4YTAsMHg4NywweDQ4IH0sCisgIDE2LCAweGQ1YzAsIDAsIHsweDM2LDB4MGQsMHgwZiwweGIxLDB4MDIsMHgyNCwweDQyLDB4Y2IsMHg2MCwweDE2LDB4YzAsMHgwYywweGQwLDB4MDMsMHgyYywweDgwIH0sCisgIDE2LCAweGQ1ZDAsIDAsIHsweGNhLDB4MDAsMHgzMiwweGMwLDB4MGMsMHgzMCwweDAzLDB4MDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ1ZTAsIDAsIHsweGEwLDB4MTksMHhmYywweDAwLDB4ZmYsMHgyMCwweDNlLDB4Y2EsMHgwZSwweGIwLDB4MDMsMHhlYywweDIwLDB4ZGIsMHgzNCwweDNhIH0sCisgIDE2LCAweGQ1ZjAsIDAsIHsweGM4LDB4MGYsMHg4MCwweDAzLDB4ZTQsMHgxMCwweGRiLDB4MjEsMHgzZSwweDE4LDB4MGQsMHhmMiwweDAzLDB4ZmMsMHg4MCwweGZmIH0sCisgIDE2LCAweGQ2MDAsIDAsIHsweDMwLDB4MzUsMHhjMCwweDBmLDB4YzAsMHgxMywweGVjLDB4MDAsMHhmZiwweDAwLDB4M2IsMHhjMCwweDBmLDB4ZjAsMHgwMywweGU4IH0sCisgIDE2LCAweGQ2MTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDExLDB4ZmMsMHgwMCwweGZiLDB4MGIsMHgyZiwweGNhIH0sCisgIDE2LCAweGQ2MjAsIDAsIHsweDhkLDB4ZjIsMHgwMywweGZhLDB4MDAsMHg5NiwweDgwLDB4M2IsMHhjNCwweDBkLDB4ZjEsMHgwMywweDdjLDB4ODAsMHhlYywweDgwIH0sCisgIDE2LCAweGQ2MzAsIDAsIHsweDNiLDB4MDgsMHgwYywweGMyLDB4MDMsMHg3NCwweDAyLDB4Y2MsMHg4MCwweDNmLDB4NDgsMHgwZSwweGYwLDB4MDMsMHgzMCwweGEwIH0sCisgIDE2LCAweGQ2NDAsIDAsIHsweGQ1LDB4ODAsMHgzZiwweDQwLDB4MGMsMHhmOCwweDAzLDB4ZjAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ2NTAsIDAsIHsweDgwLDB4MDgsMHhlZSwweDQwLDB4YmYsMHg4MCwweDJmLDB4ZjAsMHgwYiwweGY3LDB4MjIsMHhlZSwweDIwLDB4OGEsMHg4MCwweDIzIH0sCisgIDE2LCAweGQ2NjAsIDAsIHsweGZjLDB4ODgsMHg3NSwweDEyLDB4M2QsMHgwMCwweDg4LDB4MDAsMHgyMiwweDAwLDB4MjgsMHg4MCwweDAyLDB4MjQsMHgwOCwweDg4IH0sCisgIDE2LCAweGQ2NzAsIDAsIHsweDAwLDB4NmYsMHg1MCwweDAwLDB4ZjUsMHgwMiwweDI5LDB4MDAsMHg4OSwweDAwLDB4MmUsMHg1NCwweDBkLDB4OTAsMHgxMSwweGEwIH0sCisgIDE2LCAweGQ2ODAsIDAsIHsweDA0LDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyYywweGMxIH0sCisgIDE2LCAweGQ2OTAsIDAsIHsweDA5LDB4MzAsMHg4MiwweGNjLDB4ODIsMHhiYiwweDAwLDB4MjgsMHhjMCwweDQ5LDB4MzIsMHgwMiwweGNkLDB4MDAsMHhiOCwweDAwIH0sCisgIDE2LCAweGQ2YTAsIDAsIHsweDJjLDB4NTAsMHgwOSwweDAxLDB4MDIsMHgwYywweDQwLDB4ODAsMHgwMCwweDZjLDB4NDQsMHgwOSwweDMwLDB4MDIsMHgyMCwweDAwIH0sCisgIDE2LCAweGQ2YjAsIDAsIHsweGIwLDB4MDAsMHgyYywweDQwLDB4MTgsMHgzMCwweDA2LDB4ZTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ2YzAsIDAsIHsweGMwLDB4MDEsMHhhYywweDAwLDB4YmIsMHgwMSwweDJlLDB4YzAsMHgwYiwweGIwLDB4MDIsMHhlZSwweDAwLDB4YWEsMHgwMCwweDRhIH0sCisgIDE2LCAweGQ2ZDAsIDAsIHsweGMwLDB4MDgsMHhiMCwweDUyLDB4ZWMsMHgwMCwweDk4LDB4MDIsMHgyNiwweDQwLDB4MDksMHg4MCwweDAyLDB4NmMsMHgwMSwweGFhIH0sCisgIDE2LCAweGQ2ZTAsIDAsIHsweDA0LDB4MmUsMHg0MCwweDA5LDB4YjAsMHgwMiwweDIyLDB4MDAsMHhhOSwweDgwLDB4MmUsMHg0MSwweDA5LDB4OTAsMHgwMiwweGYwIH0sCisgIDE2LCAweGQ2ZjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4ZWMsMHgwMCwweGZiLDB4MDAsMHgzZSwweGMwIH0sCisgIDE2LCAweGQ3MDAsIDAsIHsweDBkLDB4YjAsMHgwMywweGNlLDB4ODQsMHhmYSwweDAwLDB4MWEsMHhjMCwweDhkLDB4YjAsMHg0MywweGVjLDB4MDAsMHhmMCwweDAyIH0sCisgIDE2LCAweGQ3MTAsIDAsIHsweDNmLDB4MDAsMHgwZCwweGQxLDB4MDMsMHgzNSwweDAwLDB4Y2IsMHg0OCwweDJlLDB4NDAsMHgyZiwweGIwLDB4MDksMHgyMiwweDgwIH0sCisgIDE2LCAweGQ3MjAsIDAsIHsweGY5LDB4YzgsMHgxZSwweGUwLDB4MDgsMHhiMSwweGUyLDB4ZDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ3MzAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4N2IsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MjMsMHhmYywweDAwLDB4ZGUsMHgwMCwweDI0IH0sCisgIDE2LCAweGQ3NDAsIDAsIHsweGMwLDB4NGYsMHhmMCwweDAzLDB4MmMsMHgwMCwweGVjLDB4MjAsMHgzYiwweDAwLDB4MGUsMHg5OCwweDAzLDB4OTQsMHgwMiwweGRkIH0sCisgIDE2LCAweGQ3NTAsIDAsIHsweDAwLDB4M2YsMHg0MCwweDRlLDB4ZjAsMHgwMSwweGY4LDB4MDAsMHhkZCwweDAwLDB4M2MsMHhlNCwweDBmLDB4ZDgsMHgwMywweGI4IH0sCisgIDE2LCAweGQ3NjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4YWMsMHhjMCwweGZiLDB4MjAsMHgzMiwweGM4IH0sCisgIDE2LCAweGQ3NzAsIDAsIHsweDhkLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmOSwweDAwLDB4M2EsMHhjMiwweDJjLDB4MzAsMHgwMywweDZjLDB4MDQsMHhkOCwweDAyIH0sCisgIDE2LCAweGQ3ODAsIDAsIHsweDNjLDB4NDQsMHg4ZCwweDEwLDB4MDMsMHhhZCwweDAzLDB4ZWEsMHgwMCwweDNjLDB4NDAsMHgwYywweDcwLDB4MjMsMHhlNCwweDAwIH0sCisgIDE2LCAweGQ3OTAsIDAsIHsweGM4LDB4NDAsMHgzYSwweGMwLDB4MGQsMHhiYywweDAzLDB4NTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ3YTAsIDAsIHsweGM4LDB4MDEsMHgzZCwweDAwLDB4YmYsMHg0MiwweDIzLDB4ZjAsMHgwZCwweGYwLDB4MDIsMHhlNSwweDAwLDB4ZTIsMHgwMSwweDM3IH0sCisgIDE2LCAweGQ3YjAsIDAsIHsweGYxLDB4MDgsMHhmMCwweDBlLDB4M2QsMHhjMCwweGE4LDB4MDAsMHgyZSwweDU0LDB4MjgsMHg5MCwweDAyLDB4MmMsMHgwMCwweDhhIH0sCisgIDE2LCAweGQ3YzAsIDAsIHsweDA1LDB4M2IsMHg0MSwweDQ4LDB4ZjUsMHgwMywweDhjLDB4MDAsMHg4OSwweDAwLDB4MjIsMHhkNCwweDBlLDB4OTUsMHgwMiwweGYyIH0sCisgIDE2LCAweGQ3ZDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMCwweGIzLDB4MDQsMHgyMCwweGMwIH0sCisgIDE2LCAweGQ3ZTAsIDAsIHsweDg5LDB4MzAsMHgwMiwweGNjLDB4NDAsMHhiMiwweDAwLDB4MmMsMHhjNCwweDQ4LDB4MzAsMHgwMiwweDJjLDB4MDIsMHhhMiwweDAwIH0sCisgIDE2LCAweGQ3ZjAsIDAsIHsweDJjLDB4MjAsMHgxOSwweDIwLDB4MWEsMHg4MCwweDA4LDB4YjAsMHgwMCwweDZjLDB4NDAsMHgwOCwweDMwLDB4MDIsMHhjNCwweDAwIH0sCisgIDE2LCAweGQ4MDAsIDAsIHsweDgxLDB4MDAsMHgyYywweDQwLDB4MDgsMHgzMCwweDAyLDB4ZjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ4MTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDAwLDB4YjcsMHhhMCwweGUxLDB4ZTAsMHgwOSwweDc4LDB4MDIsMHhkZiwweDA0LDB4YWUsMHg4MCwweDJkIH0sCisgIDE2LCAweGQ4MjAsIDAsIHsweGUwLDB4MDgsMHg3OSwweDAyLDB4MWUsMHgxMCwweDg3LDB4OTAsMHgyYywweDI4LDB4MjksMHg2OCwweDAyLDB4ODIsMHg4MSwweGI0IH0sCisgIDE2LCAweGQ4MzAsIDAsIHsweDgwLDB4MmQsMHg2MCwweDA4LDB4NzgsMHgxMCwweGJjLDB4MDAsMHg4ZiwweDgwLDB4MmQsMHg2MCwweDBiLDB4NjgsMHgwMiwweGM4IH0sCisgIDE2LCAweGQ4NDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4MGMsMHgwNSwweGYzLDB4OTIsMHgzMCwweGNhIH0sCisgIDE2LCAweGQ4NTAsIDAsIHsweDBkLDB4MzAsMHgwMywweGNjLDB4MDAsMHhmMywweDAwLDB4M2MsMHhjMCwweDBjLDB4MzAsMHgwMiwweDBjLDB4ODAsMHg3MCwweDAwIH0sCisgIDE2LCAweGQ4NjAsIDAsIHsweDJjLDB4NDAsMHgwZCwweDIwLDB4MDMsMHg4OSwweDAwLDB4YjEsMHgwMCwweDNlLDB4NDAsMHgyYywweDMwLDB4MDMsMHhlYywweDUwIH0sCisgIDE2LCAweGQ4NzAsIDAsIHsweGMzLDB4MjAsMHgzYywweDQwLDB4MGMsMHgzMCwweDAzLDB4ZDIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ4ODAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZmYsMHgwMCwweDNjLDB4YzAsMHgwZSwweGIwLDB4ODMsMHhlYywweDQwLDB4ZWEsMHgwMCwweDM2IH0sCisgIDE2LCAweGQ4OTAsIDAsIHsweGMyLDB4MGYsMHhiMCwweDgzLDB4YWMsMHgwMCwweGY4LDB4MDAsMHgzZSwweDQ4LDB4MGUsMHhlMCwweDBiLDB4N2EsMHg4MCwweGNmIH0sCisgIDE2LCAweGQ4YTAsIDAsIHsweDAwLDB4M2IsMHg0NCwweDBmLDB4ZjAsMHgwMywweGVjLDB4YzAsMHhmZiwweDAwLDB4MDMsMHg0NCwweDBlLDB4ZTAsMHgwMywweGQwIH0sCisgIDE2LCAweGQ4YjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHgwMCwweGZiLDB4MjMsMHgzZSwweGM4IH0sCisgIDE2LCAweGQ4YzAsIDAsIHsweDFkLDB4YjAsMHgwMywweGVlLDB4MDAsMHhjYSwweDAwLDB4M2UsMHhjOCwweDBjLDB4YjIsMHgwMywweDJkLDB4OTAsMHhjOCwweDg0IH0sCisgIDE2LCAweGQ4ZDAsIDAsIHsweDM2LDB4MDAsMHgyZCwweGIwLDB4MDMsMHg2MCwweDE4LDB4OWIsMHg4MCwweDMzLDB4NTAsMHgwYywweGYyLDB4MDMsMHhlMiwweDAwIH0sCisgIDE2LCAweGQ4ZTAsIDAsIHsweGM5LDB4ODAsMHgzMiwweDQwLDB4MGMsMHhiOCwweDAzLDB4MmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ4ZjAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDAwLDB4YjcsMHgyOCwweDBjLDB4ZDIsMHgyOCwweDczLDB4MDIsMHhmYywweDAwLDB4ODYsMHgwNCwweDJjIH0sCisgIDE2LCAweGQ5MDAsIDAsIHsweGNjLDB4MjgsMHg3MCwweDgzLDB4MGMsMHgyMCwweDk1LDB4MDEsMHgyMCwweDAwLDB4MDksMHgzMCwweDEyLDB4MTAsMHgwNCwweDg1IH0sCisgIDE2LCAweGQ5MTAsIDAsIHsweDAwLDB4MjEsMHg1MiwweDA4LDB4NzUsMHgwMiwweGQ4LDB4MDAsMHg4NywweDAwLDB4MjEsMHg0MCwweDA4LDB4NjAsMHgwMiwweDEyIH0sCisgIDE2LCAweGQ5MjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHhkNCwweGI3LDB4YjEsMHgwOSwweGUxIH0sCisgIDE2LCAweGQ5MzAsIDAsIHsweDA4LDB4NzgsMHgyMiwweGRlLDB4MDAsMHg5NSwweDgwLDB4MmQsMHhlMCwweDA4LDB4NzgsMHgwYSwweDVlLDB4NDIsMHg5NCwweGMwIH0sCisgIDE2LCAweGQ5NDAsIDAsIHsweDIxLDB4NjAsMHgwOCwweDc4LDB4MDIsMHg1YSwweDAwLDB4ODcsMHg4MCwweDJkLDB4NjgsMHgwOCwweDdhLDB4MDIsMHhkNywweDAwIH0sCisgIDE2LCAweGQ5NTAsIDAsIHsweDk3LDB4ODAsMHgyMCwweDYwLDB4MDksMHg3OCwweDAyLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ5NjAsIDAsIHsweDQ4LDB4MTAsMHhjYywweDAwLDB4YjMsMHgwMCwweDJjLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhjZCwweDgwLDB4OTIsMHgwMCwweDJjIH0sCisgIDE2LCAweGQ5NzAsIDAsIHsweGMwLDB4MDgsMHhiMCwweDAyLDB4Y2MsMHgwMCwweDkwLDB4ODAsMHhhMCwweDQwLDB4MDksMHgzNiwweDAyLDB4NDgsMHgwMiwweDgzIH0sCisgIDE2LCAweGQ5ODAsIDAsIHsweGEwLDB4YWMsMHg0MCwweDJhLDB4MzAsMHgwNiwweGNlLDB4MDIsMHg5MywweDA0LDB4YTAsMHg0MCwweDA5LDB4MjAsMHgwYSwweDEyIH0sCisgIDE2LCAweGQ5OTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGZhLDB4MDAsMHgzYSwweDgwIH0sCisgIDE2LCAweGQ5YTAsIDAsIHsweDBkLDB4YTAsMHgwMywweGZiLDB4MDIsMHhkZSwweDgwLDB4M2UsMHg4MCwweDBjLDB4YTAsMHgwMywweDI4LDB4MDAsMHhjZSwweDgwIH0sCisgIDE2LCAweGQ5YjAsIDAsIHsweDMyLDB4ODAsMHgwYywweGE0LDB4MDMsMHg3OCwweDAwLDB4Y2UsMHhhNCwweDNmLDB4ODAsMHgwYywweGEwLDB4MDcsMHhmOSwweDAwIH0sCisgIDE2LCAweGQ5YzAsIDAsIHsweGRlLDB4MDAsMHgzMiwweDgwLDB4MmQsMHhlMCwweDAyLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ5ZDAsIDAsIHsweDQ4LDB4MDAsMHhlMSwweDAwLDB4ZjgsMHgwMCwweDdjLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMCwweDQwLDB4ZTgsMHgxMCwweDNjIH0sCisgIDE2LCAweGQ5ZTAsIDAsIHsweDAxLDB4Y2YsMHg4MCwweDBmLDB4MjAsMHgwMCwweGU4LDB4MDAsMHgzZSwweDAwLDB4MGUsMHgwNCwweDAzLDB4OTAsMHgwMCwweGU4IH0sCisgIDE2LCAweGQ5ZjAsIDAsIHsweDAwLDB4MjAsMHgwMCwweDBkLDB4ODAsMHgwNywweGUwLDB4MDAsMHhlOCwweDAwLDB4M2UsMHgwNCwweDBlLDB4ODAsMHgwMywweGQyIH0sCisgIDE2LCAweGRhMDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGY5LDB4MTAsMHg3ZSwweDQxIH0sCisgIDE2LCAweGRhMTAsIDAsIHsweDBlLDB4OTAsMHgwMywweDI0LDB4MDAsMHhmOSwweDAwLDB4MzYsMHg2OCwweDBlLDB4OTAsMHgwZiwweGE0LDB4MDgsMHhjOSwweDAwIH0sCisgIDE2LCAweGRhMjAsIDAsIHsweDNhLDB4NDAsMHgwYywweDkwLDB4MGIsMHgyNCwweDEyLDB4ZTksMHgwMCwweDNlLDB4NDQsMHgyYywweDkwLDB4MDMsMHg2NCwweDI0IH0sCisgIDE2LCAweGRhMzAsIDAsIHsweGY5LDB4MDIsMHgyZSwweDQwLDB4MGMsMHg5MCwweDAzLDB4YzIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRhNDAsIDAsIHsweDgwLDB4MDQsMHg2NSwweDEwLDB4YjksMHg4MCwweDNlLDB4NDAsMHgwOCwweDkwLDB4MGEsMHgyNiwweDAwLDB4YjEsMHgxMCwweDJhIH0sCisgIDE2LCAweGRhNTAsIDAsIHsweDcyLDB4MDgsMHg5MCwweDA3LDB4NjQsMHgwMiwweDg5LDB4NDAsMHgyZSwweDQwLDB4MjgsMHg5MCwweDEyLDB4MjUsMHgwMCwweDg5IH0sCisgIDE2LCAweGRhNjAsIDAsIHsweDQ1LDB4M2UsMHg1MCwweDBkLDB4OTAsMHgwYSwweDI1LDB4MDAsMHhiOSwweDQwLDB4MmUsMHg0MCwweDI4LDB4OTQsMHgwMywweGUwIH0sCisgIDE2LCAweGRhNzAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyZSwweDQwIH0sCisgIDE2LCAweGRhODAsIDAsIHsweDQ4LDB4OTAsMHg0MiwweDI2LDB4MDEsMHhiOSwweDQwLDB4MjYsMHg0MCwweDBhLDB4OTAsMHg0MiwweDg0LDB4MDEsMHg4YiwweDA4IH0sCisgIDE2LCAweGRhOTAsIDAsIHsweDJjLDB4NDAsMHgwOSwweGQwLDB4ODIsMHgzNCwweDMyLDB4YTksMHgwOCwweDZlLDB4NDIsMHgwOCwweDEwLDB4MDIsMHgyNCwweDIwIH0sCisgIDE2LCAweGRhYTAsIDAsIHsweGI5LDB4MDgsMHgyYywweDQwLDB4MTgsMHg5MCwweDgyLDB4YzYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRhYjAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4YjMsMHgyMCwweDI4LDB4NDgsMHgwOCwweDEyLDB4MDIsMHgwNCwweDAxLDB4YjEsMHgwMCwweDI4IH0sCisgIDE2LCAweGRhYzAsIDAsIHsweDU4LDB4MDgsMHgxMiwweDAyLDB4MDUsMHg4OSwweDgxLDB4NDAsMHgyYywweDU4LDB4MDgsMHg1NiwweDA2LDB4MTUsMHg4MCwweDgxIH0sCisgIDE2LCAweGRhZDAsIDAsIHsweDQwLDB4MjgsMHg1MCwweDA5LDB4MTQsMHgwMiwweDA1LDB4ODAsMHhiMSwweDQwLDB4MmMsMHg1YSwweDA4LDB4MTQsMHgwMiwweGMyIH0sCisgIDE2LCAweGRhZTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjgsMHgwMCwweGY4LDB4MDAsMHgyZSwweDAwIH0sCisgIDE2LCAweGRhZjAsIDAsIHsweDJlLDB4ODUsMHgwMywweDIxLDB4NDgsMHhmOCwweDAwLDB4MzYsMHgwMCwweDhlLDB4MDUsMHgwMiwweGEwLDB4MDgsMHg4MCwweDAwIH0sCisgIDE2LCAweGRiMDAsIDAsIHsweDNlLDB4MDAsMHgwZCwweDgwLDB4MGIsMHgxMCwweDA0LDB4ZTAsMHgwMCwweDJjLDB4MDAsMHg0YywweDgwLDB4MDMsMHg0MCwweDAwIH0sCisgIDE2LCAweGRiMTAsIDAsIHsweGYwLDB4MDAsMHgzZSwweDA4LDB4MGMsMHgwMCwweDAzLDB4ZWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRiMjAsIDAsIHsweDk4LDB4MWQsMHhlNCwweDQwLDB4ZjksMHgxMCwweDNlLDB4NDQsMHgwZiwweDkxLDB4MDMsMHhmNCwweDAwLDB4ZmQsMHgwMCwweDNlIH0sCisgIDE2LCAweGRiMzAsIDAsIHsweDQ0LDB4MGYsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGZkLDB4MDMsMHgzZiwweDQ0LDB4MWYsMHg5MSwweDFiLDB4ZTQsMHg0MCwweGZkIH0sCisgIDE2LCAweGRiNDAsIDAsIHsweDAxLDB4M2YsMHg1MCwweDBlLDB4OTQsMHgwMywweGY0LDB4NDAsMHhmZCwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZDAsMHgwMywweGE2IH0sCisgIDE2LCAweGRiNTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4ZjQsMHgwMCwweGNkLDB4YTAsMHg3MSwweDY4IH0sCisgIDE2LCAweGRiNjAsIDAsIHsweDhkLDB4OTgsMHgwMywweGQ0LDB4MDAsMHhjZCwweDAwLDB4MzMsMHg2MCwweDBjLDB4OTgsMHg4ZiwweDI3LDB4MjAsMHhjOSwweDQwIH0sCisgIDE2LCAweGRiNzAsIDAsIHsweDNlLDB4NzgsMHgwYywweDllLDB4OGIsMHgyNywweDIwLDB4ZDEsMHgxMSwweDMwLDB4NjAsMHg4YywweDljLDB4MDMsMHgyNSwweDAwIH0sCisgIDE2LCAweGRiODAsIDAsIHsweGY5LDB4NDAsMHgzZSwweDc4LDB4MGYsMHg5MCwweDAzLDB4NDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRiOTAsIDAsIHsweDM4LDB4MTAsMHhlMCwweDEwLDB4ODgsMHgwMSwweDIyLDB4MDEsMHgwOCwweDhjLDB4MjIsMHhlOCwweDAwLDB4ODgsMHgwMiwweDJhIH0sCisgIDE2LCAweGRiYTAsIDAsIHsweDE0LDB4MDgsMHg4YywweDBiLDB4MjMsMHg5MCwweDg4LDB4YTAsMHgyZSwweGIwLDB4MDgsMHg4YywweDQyLDB4MjMsMHgwMCwweDg4IH0sCisgIDE2LCAweGRiYjAsIDAsIHsweGEwLDB4MzYsMHgyYSwweDE4LDB4OGEsMHgwMiwweDIyLDB4MDAsMHhiOCwweGEwLDB4MmUsMHgzNCwweDBiLDB4Y2EsMHg4MiwweDBlIH0sCisgIDE2LCAweGRiYzAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHgwMCwweDgxLDB4NDAsMHgyNCwweDUwIH0sCisgIDE2LCAweGRiZDAsIDAsIHsweDA5LDB4MTYsMHg4MiwweGM0LDB4MDAsMHhhOSwweDAwLDB4MjAsMHg0MCwweDA4LDB4MTIsMHg5MiwweDU0LDB4MDgsMHg4NSwweDAwIH0sCisgIDE2LCAweGRiZTAsIDAsIHsweDJmLDB4NGMsMHgwOSwweDUyLDB4MTIsMHgxNCwweDgwLDB4OWQsMHgwMCwweDIxLDB4NTAsMHgwOCwweDU0LDB4MjIsMHgxNCwweDgwIH0sCisgIDE2LCAweGRiZjAsIDAsIHsweGI1LDB4MDAsMHgyZCwweDQ4LDB4MGIsMHhkMCwweDAyLDB4NDIsMHgwNSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRjMDAsIDAsIHsweDE4LDB4MDUsMHhhNCwweDAyLDB4ODksMHgwMSwweGEyLDB4NDAsMHg0OCwweDkwLDB4MDIsMHhlNCwweDAyLDB4YTksMHgwMCwweDJhIH0sCisgIDE2LCAweGRjMTAsIDAsIHsweDQwLDB4NjgsMHg5MCwweDAyLDB4NjQsMHgxMCwweGFkLDB4MDAsMHgyZiwweDQxLDB4MjgsMHg1MCwweDAyLDB4MzQsMHgwMCwweDhkIH0sCisgIDE2LCAweGRjMjAsIDAsIHsweDQ0LDB4MjcsMHg0MCwweDM5LDB4ZDAsMHgwMiwweDM1LDB4MDAsMHhiZCwweDE0LDB4MmYsMHg0MCwweDBiLDB4ZDAsMHgwMiwweDQ2IH0sCisgIDE2LCAweGRjMzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDA1LDB4YzQsMHgwMCwweGM5LDB4MDAsMHgzNiwweDQwIH0sCisgIDE2LCAweGRjNDAsIDAsIHsweDJkLDB4OTAsMHgwMywweGU3LDB4MDAsMHhlMSwweGUwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwYiwweDY0LDB4MDIsMHhjOSwweDA4IH0sCisgIDE2LCAweGRjNTAsIDAsIHsweDNjLDB4NTAsMHgwYywweDkwLDB4MDIsMHgyNiwweDAyLDB4ZDksMHhjMCwweDMyLDB4NDAsMHgwYywweDkwLDB4MTMsMHgyNywweDAwIH0sCisgIDE2LCAweGRjNjAsIDAsIHsweGY5LDB4MjAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4NjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRjNzAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAyLDB4ZjksMHgwMCwweDM4LDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNiwweDgwLDB4ZDksMHhhMCwweDNjIH0sCisgIDE2LCAweGRjODAsIDAsIHsweDQwLDB4MGYsMHgxMCwweDAzLDB4YTQsMHgwMCwweGQ5LDB4MTAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4YzQsMHg5MiwweGY5IH0sCisgIDE2LCAweGRjOTAsIDAsIHsweDIxLDB4M2MsMHg0MCwweDJlLDB4OTAsMHgwZiwweGU2LDB4ODAsMHhmOSwweDgwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweDhhIH0sCisgIDE2LCAweGRjYTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAwLDB4YTAsMHg0MCwweGU4LDB4MTAsMHgzZSwweDA0IH0sCisgIDE2LCAweGRjYjAsIDAsIHsweDRlLDB4ODAsMHgwMywweDIwLDB4ODAsMHhkOCwweDYwLDB4M2EsMHgwMiwweDBjLDB4ODAsMHgxMywweDIwLDB4MDAsMHhmOCwweDQwIH0sCisgIDE2LCAweGRjYzAsIDAsIHsweDM2LDB4MTAsMHgyZCwweDgwLDB4MDMsMHhhMCwweDA4LDB4ZTgsMHg0MCwweDMyLDB4MDAsMHgwZCwweDAwLDB4MDMsMHgyMSwweDAyIH0sCisgIDE2LCAweGRjZDAsIDAsIHsweGM4LDB4NDAsMHhiMiwweDAwLDB4MGYsMHhjMCwweDAzLDB4Y2EsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRjZTAsIDAsIHsweDI4LDB4MTEsMHgzYiwweDEwLDB4ODYsMHgwMSwweDJmLDB4YTAsMHgwZCwweGEwLDB4MDIsMHgzOCwweDAwLDB4OGUsMHhlMCwweDIzIH0sCisgIDE2LCAweGRjZjAsIDAsIHsweGEyLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwMCwweGJhLDB4ODAsMHgyMiwweDgwLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwMCwweDgyIH0sCisgIDE2LCAweGRkMDAsIDAsIHsweDAwLDB4MmEsMHg4MCwweDI4LDB4YTAsMHgwMiwweDJhLDB4MDQsMHg4YSwweDgwLDB4MjIsMHhhMCwweDBiLDB4NjAsMHgwMiwweGNhIH0sCisgIDE2LCAweGRkMTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NDMsMHg4MCwweGEyLDB4MDAsMHgyYywweGEwIH0sCisgIDE2LCAweGRkMjAsIDAsIHsweDA4LDB4MzAsMHgwMiwweDJlLDB4MDAsMHg5MiwweDAwLDB4MjgsMHhjMCwweDI4LDB4MzAsMHgwMiwweDJjLDB4MDAsMHhiMywweDgwIH0sCisgIDE2LCAweGRkMzAsIDAsIHsweDI0LDB4YzAsMHgwOSwweDMwLDB4MGEsMHg4YywweDAwLDB4YTMsMHgwMCwweDYwLDB4YzAsMHgwOCwweDMwLDB4MGEsMHg0YywweDAwIH0sCisgIDE2LCAweGRkNDAsIDAsIHsweDgzLDB4MDAsMHgyMCwweGUwLDB4MGIsMHgyMCwweDAyLDB4Y2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRkNTAsIDAsIHsweGEwLDB4MDEsMHgxMCwweDAwLDB4ODYsMHgwMCwweDJkLDB4YzAsMHgwOSwweDNhLDB4MDIsMHgzNSwweDAwLDB4ODYsMHgwMCwweDIxIH0sCisgIDE2LCAweGRkNjAsIDAsIHsweGMwLDB4MDgsMHg3MywweDAyLDB4MTAsMHgwMCwweGJmLDB4ODgsMHgyMSwweDAwLDB4MDgsMHg3MCwweDAyLDB4MWMsMHgwOCwweDhmIH0sCisgIDE2LCAweGRkNzAsIDAsIHsweDAwLDB4MmIsMHhjMCwweDA4LDB4MjAsMHgxMiwweDVlLDB4MjAsMHg4NywweDg4LDB4MjEsMHg4MywweDBiLDB4NjAsMHgwMiwweGU4IH0sCisgIDE2LCAweGRkODAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MTIsMHgwMCwweGU1LDB4ODEsMHgzZCwweGEwIH0sCisgIDE2LCAweGRkOTAsIDAsIHsweDJjLDB4N2EsMHgwYiwweDFlLDB4MDAsMHhkNCwweDgwLDB4MzgsMHhlMCwweDBjLDB4ZmEsMHgwYiwweDFlLDB4MDAsMHhmNiwweDgwIH0sCisgIDE2LCAweGRkYTAsIDAsIHsweDM0LDB4ZTAsMHgwZCwweDI4LDB4MDMsMHg4YSwweDAwLDB4ZTYsMHg4MCwweDMxLDB4MjAsMHgwYywweDc4LDB4MDMsMHg3YSwweDA0IH0sCisgIDE2LCAweGRkYjAsIDAsIHsweGNlLDB4ODQsMHgzMSwweGUwLDB4NGYsMHg3OCwweDQzLDB4ZWEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRkYzAsIDAsIHsweDA4LDB4MGQsMHg4MCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4YzAsMHgwZiwweGI1LDB4MjMsMHhlNCwweDAwLDB4ZjAsMHgwNCwweDM2IH0sCisgIDE2LCAweGRkZDAsIDAsIHsweDQwLDB4MGYsMHhiNiwweDg3LDB4ZTAsMHgwMCwweGYyLDB4MDAsMHgzZSwweDAwLDB4MWYsMHhhMCwweDBiLDB4ZTgsMHgwMCwweGZhIH0sCisgIDE2LCAweGRkZTAsIDAsIHsweDAwLDB4M2UsMHgwMCwweDBlLDB4YTAsMHgwMywweGE4LDB4MDAsMHhmYSwweDAwLDB4M2UsMHg4MCwweDBmLDB4YjAsMHgwMywweGMyIH0sCisgIDE2LCAweGRkZjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZjYsMHgwMCwweGNjLDB4ODAsMHgzMywweGEwIH0sCisgIDE2LCAweGRlMDAsIDAsIHsweDBjLDB4ZmMsMHgwMywweDNlLDB4MDAsMHhmYywweDgwLDB4MzcsMHhlMCwweDBmLDB4YjksMHgyMSwweDNlLDB4MDAsMHhmZCwweDgyIH0sCisgIDE2LCAweGRlMTAsIDAsIHsweDMzLDB4ZTAsMHgyYywweGY4LDB4MDMsMHg3ZSwweDEwLDB4ZGYsMHg4NCwweDNkLDB4ZTAsMHgwYywweGY4LDB4MDMsMHhmNiwweDAwIH0sCisgIDE2LCAweGRlMjAsIDAsIHsweGZkLDB4ODAsMHgzZiwweDYwLDB4MGMsMHhlOCwweDIzLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRlMzAsIDAsIHsweGE4LDB4MTEsMHg5OCwweDQwLDB4ODQsMHgxMCwweDIxLDB4YzAsMHgwOCwweDcwLDB4MDIsMHgxMCwweDgwLDB4YjQsMHgwMCwweDIxIH0sCisgIDE2LCAweGRlNDAsIDAsIHsweGM4LDB4MGIsMHg3YSwweDAyLDB4MTAsMHgwMCwweGZkLDB4MDAsMHgyMSwweDA0LDB4MDgsMHg3MCwweDAyLDB4MWMsMHg0MiwweDg3IH0sCisgIDE2LCAweGRlNTAsIDAsIHsweDAwLDB4MmQsMHhjNCwweDQ4LDB4NjEsMHgwMiwweGQ2LDB4ODAsMHhiNSwweDAwLDB4MmYsMHgwNCwweDA4LDB4NjEsMHg4MiwweDJhIH0sCisgIDE2LCAweGRlNjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTAsMHgwMCwweDgxLDB4MDAsMHgyMSwweDgwIH0sCisgIDE2LCAweGRlNzAsIDAsIHsweDA4LDB4MzAsMHgwMiwweDFjLDB4MTAsMHhiYywweDA4LDB4MjUsMHg4MCwweDRiLDB4MzAsMHgwZSwweDFjLDB4MDAsMHhiNCwweDAwIH0sCisgIDE2LCAweGRlODAsIDAsIHsweDIwLDB4YzAsMHgwOCwweDIwLDB4MDIsMHg1OCwweDAwLDB4OTYsMHgwMCwweDJmLDB4MDAsMHgwYSwweDcwLDB4MDIsMHhkMCwweDgwIH0sCisgIDE2LCAweGRlOTAsIDAsIHsweGI0LDB4MTgsMHgyZCwweDQwLDB4MDksMHhmOCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRlYTAsIDAsIHsweDIwLDB4MTQsMHhjOCwweDAyLDB4ODAsMHgwMCwweGEwLDB4YzAsMHgwOCwweDMwLDB4MjIsMHgwYiwweGMwLDB4YjAsMHhjMCwweDIyIH0sCisgIDE2LCAweGRlYjAsIDAsIHsweDgwLDB4MGIsMHgzMCwweDAyLDB4MDAsMHgwMCwweGEwLDB4MDQsMHgyMiwweDAwLDB4MjgsMHhhMCwweDAyLDB4MmIsMHgwMCwweDhhIH0sCisgIDE2LCAweGRlYzAsIDAsIHsweDAwLDB4MmMsMHgwMCwweDA4LDB4YTAsMHgwNiwweGMwLDB4MDAsMHhiMCwweGMyLDB4MmMsMHgwMCwweDA5LDB4YmMsMHgxYSwweDA4IH0sCisgIDE2LCAweGRlZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YTAsMHgwMCwweGM4LDB4MDAsMHgzMiwweGMwIH0sCisgIDE2LCAweGRlZTAsIDAsIHsweDBjLDB4ZjAsMHgwYiwweDI2LDB4MDAsMHhmOSwweGMwLDB4MzYsMHgwMCwweDBmLDB4ZjAsMHgxMywweDJjLDB4MTAsMHhiYiwweDQwIH0sCisgIDE2LCAweGRlZjAsIDAsIHsweGYyLDB4YzAsMHgwOCwweDkwLDB4MDMsMHg2NywweDAwLDB4ZDksMHg4MCwweDNlLDB4YzAsMHgwOCwweDkwLDB4MDIsMHhlYywweDAwIH0sCisgIDE2LCAweGRmMDAsIDAsIHsweGZiLDB4ZDAsMHgzZSwweGMwLDB4MjksMHg4YywweDAwLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRmMTAsIDAsIHsweDgwLDB4MDAsMHhlMCwweDAwLDB4ZjgsMHg0NCwweDNjLDB4ZDAsMHgyZiwweGIwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgyMCwweDNlIH0sCisgIDE2LCAweGRmMjAsIDAsIHsweDQwLDB4MGYsMHgzMCwweDAzLDB4ZTAsMHgwMCwweGZiLDB4MDgsMHgzZSwweDAwLDB4MGYsMHg5MCwweDEzLDB4ZTQsMHg0MiwweGY5IH0sCisgIDE2LCAweGRmMzAsIDAsIHsweDEwLDB4M2UsMHhjMCwweDBmLDB4ODAsMHgwMywweGVlLDB4MDAsMHhmYiwweDAwLDB4M2UsMHg4MCwweDBlLDB4ODIsMHgwMywweGUwIH0sCisgIDE2LCAweGRmNDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZTAsMHgwOCwweGZjLDB4ODAsMHgzMiwweGU0IH0sCisgIDE2LCAweGRmNTAsIDAsIHsweDBlLDB4ZjAsMHgwMywweDc0LDB4MDAsMHhmYywweDAwLDB4M2YsMHg0MCwweDBjLDB4ZjAsMHgwYiwweDNjLDB4MDAsMHhmZSwweDAwIH0sCisgIDE2LCAweGRmNjAsIDAsIHsweDNmLDB4YzAsMHgwZCwweGMxLDB4MDMsMHgyMCwweDIwLDB4Y2MsMHgxMCwweDMzLDB4MDAsMHgwYywweGQxLDB4MDMsMHg1OCwweDAwIH0sCisgIDE2LCAweGRmNzAsIDAsIHsweGNlLDB4MDAsMHgyZiwweGMwLDB4MGYsMHhkMSwweDAzLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRmODAsIDAsIHsweDgxLDB4NDQsMHg2MiwweDAwLDB4YjAsMHg0MCwweDJhLDB4ZjEsMHgwOCwweGIwLDB4MTIsMHgyNiwweDA4LDB4YjgsMHhjOCwweDJlIH0sCisgIDE2LCAweGRmOTAsIDAsIHsweDcwLDB4MGEsMHhiMCwweDAyLDB4MjAsMHgwMCwweGJhLDB4MDAsMHgyZSwweDAwLDB4MjgsMHg4MCwweDAzLDB4MjIsMHg0MCwweDg4IH0sCisgIDE2LCAweGRmYTAsIDAsIHsweDAxLDB4MjAsMHgwMCwweDBhLDB4ODAsMHgwMiwweDI4LDB4MDAsMHg4YSwweDAxLDB4MmUsMHg4MCwweDhiLDB4OTAsMHgwMiwweDIwIH0sCisgIDE2LCAweGRmYjAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MjYsMHgwMCwweGI4LDB4MjgsMHgyMiwweDQyIH0sCisgIDE2LCAweGRmYzAsIDAsIHsweDA4LDB4MzAsMHgwMiwweDY2LDB4MDAsMHhiOCwweDgwLDB4MmUsMHgzMCwweDg4LDB4YjAsMHgwMiwweDJjLDB4MDAsMHhiOSwweDAxIH0sCisgIDE2LCAweGRmZDAsIDAsIHsweDJlLDB4YzAsMHg4OCwweDkwLDB4MDIsMHhhNCwweDAwLDB4ODksMHgwMCwweDIyLDB4YzAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDBjIH0sCisgIDE2LCAweGRmZTAsIDAsIHsweDg5LDB4MDEsMHgyZSwweDQwLDB4MWIsMHg4MCwweDAyLDB4NjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRmZjAsIDAsIHsweDA4LDB4MDQsMHgwMCwweDAwLDB4YjAsMHgwMCwweDI4LDB4YzAsMHgyOCwweDMwLDB4MDIsMHgwMCwweDAwLDB4YjAsMHgwMCwweDJjIH0sCisgIDE2LCAweGUwMDAsIDAsIHsweDQwLDB4MGEsMHgzMCwweDAyLDB4MDAsMHgwMCwweGIxLDB4MDAsMHgyYywweDAwLDB4MDgsMHgxMCwweDBhLDB4MDQsMHgwMCwweDgxIH0sCisgIDE2LCAweGUwMTAsIDAsIHsweDAxLDB4YTIsMHhjMCwweDA4LDB4MDAsMHgwYSwweDA0LDB4ODAsMHg4MSwweDAwLDB4MmMsMHgwMCwweDFiLDB4MDAsMHgwYSwweDAyIH0sCisgIDE2LCAweGUwMjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjAsMHgwMCwweGY4LDB4MDAsMHgzMiwweDQwIH0sCisgIDE2LCAweGUwMzAsIDAsIHsweDBlLDB4ZjAsMHgyMywweDY0LDB4MDgsMHhmOCwweDAwLDB4MmUsMHgwMCwweDBjLDB4ZjAsMHgwMywweDJjLDB4MDAsMHhmOCwweDAwIH0sCisgIDE2LCAweGUwNDAsIDAsIHsweDNlLDB4YzAsMHgwYywweDgwLDB4MDMsMHgyMCwweDAyLDB4YzgsMHgwNCwweDMyLDB4MDAsMHgxYywweDkwLDB4MDMsMHgyMCwweDAwIH0sCisgIDE2LCAweGUwNTAsIDAsIHsweGM4LDB4MDEsMHgzZSwweDQxLDB4OWYsMHg5MCwweDQzLDB4NDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUwNjAsIDAsIHsweGEwLDB4MWQsMHhmMCwweDAwLDB4ZmMsMHgwYywweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmMCwweDEwLDB4ZjQsMHgwMCwweDNmIH0sCisgIDE2LCAweGUwNzAsIDAsIHsweDAwLDB4MGYsMHhmNCwweDIzLDB4ZjAsMHgwMCwweGZjLDB4MDAsMHgzZiwweDAwLDB4MGUsMHhjMCwweDAzLDB4YjAsMHgwMCwweGZjIH0sCisgIDE2LCAweGUwODAsIDAsIHsweDAwLDB4M2YsMHgwMCwweDBmLDB4YzAsMHgwMywweGUxLDB4MDAsMHhmYywweDAwLDB4M2YsMHgwMSwweDFmLDB4NTAsMHgwMywweGU4IH0sCisgIDE2LCAweGUwOTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDBkLDB4ZjAsMHhkMCwweGZmLDB4MjAsMHgzZSwweGQwIH0sCisgIDE2LCAweGUwYTAsIDAsIHsweDhlLDB4YjAsMHgwMywweGVjLDB4YTAsMHhkYiwweDI4LDB4M2UsMHhjYywweDBjLDB4YjMsMHgwMywweGFkLDB4MDgsMHhmOCwweDNjIH0sCisgIDE2LCAweGUwYjAsIDAsIHsweDMyLDB4MjMsMHgwZSwweDQ4LDB4MjMsMHg3YSwweDAwLDB4ZmQsMHg5NCwweDNmLDB4ZTAsMHgwZiwweDc4LDB4MzMsMHhlZSwweDA4IH0sCisgIDE2LCAweGUwYzAsIDAsIHsweGJmLDB4ODAsMHgzZiwweGU0LDB4MGYsMHhmOSwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUwZDAsIDAsIHsweGEwLDB4MDAsMHhlYywweGM4LDB4YmYsMHhkMSwweDBmLDB4YzgsMHgwYywweDI2LDB4ODIsMHhmZCwweDI0LDB4OGYsMHgwMCwweDJlIH0sCisgIDE2LCAweGUwZTAsIDAsIHsweDk5LDB4MGEsMHhmMiwweDYyLDB4MWQsMHhkMCwweDk5LDB4NjEsMHgyMiwweDcxLDB4ODgsMHg4OCwweDAyLDB4YWMsMHgwMCwweGI4IH0sCisgIDE2LCAweGUwZjAsIDAsIHsweDIyLDB4MmUsMHgyMCwweDRiLDB4ODgsMHgwMywweGEwLDB4MDAsMHg4MCwweDAwLDB4MmUsMHgwOCwweDBiLDB4ODAsMHgyMywweDYwIH0sCisgIDE2LCAweGUxMDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwNCwweGIzLDB4MDMsMHgwYywweGNjIH0sCisgIDE2LCAweGUxMTAsIDAsIHsweDBhLDB4MTMsMHgxMiwweGNjLDB4MTQsMHhhMywweDBlLDB4MGMsMHg1OCwweDBhLDB4MzMsMHgwMiwweDhjLDB4MTAsMHhhMywweDIwIH0sCisgIDE2LCAweGUxMjAsIDAsIHsweGEwLDB4MGEsMHgxOCwweDkwLDB4MDIsMHg0OCwweGEwLDB4YjAsMHgyMCwweDI0LDB4ODAsMHgwYSwweDIwLDB4MDIsMHhjYywweDA5IH0sCisgIDE2LCAweGUxMzAsIDAsIHsweGExLDB4MDAsMHgyYywweDgwLDB4MGIsMHgzMiwweDQyLDB4YTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUxNDAsIDAsIHsweGUwLDB4MTEsMHhhYywweDIwLDB4YmIsMHgwMCwweDJlLDB4YzAsMHg0YiwweDgwLDB4YTIsMHhlYywweDAwLDB4YWIsMHgwMCwweDRlIH0sCisgIDE2LCAweGUxNTAsIDAsIHsweDQ2LDB4MmEsMHhiMCwweDAyLDB4MmMsMHgwNCwweDliLDB4ODAsMHgyYSwweDYwLDB4OGEsMHg5YywweDAyLDB4YWMsMHgwMCwweGI5IH0sCisgIDE2LCAweGUxNjAsIDAsIHsweDgxLDB4MmUsMHg0MCwweDBiLDB4OTgsMHgwMiwweGEzLDB4MDAsMHg4YSwweDAwLDB4MmUsMHg0MCwweDBiLDB4ODAsMHgwNCwweGYwIH0sCisgIDE2LCAweGUxNzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZTEsMHgwMCwweGZiLDB4MDQsMHgzZSwweGMwIH0sCisgIDE2LCAweGUxODAsIDAsIHsweDBlLDB4YjQsMHgwMywweGVjLDB4MGEsMHhkYiwweDAyLDB4MmUsMHhkMSwweDBlLDB4YjAsMHgwMywweGFjLDB4MDAsMHhmYiwweDgyIH0sCisgIDE2LCAweGUxOTAsIDAsIHsweDMyLDB4MjgsMHgxZSwweDBjLDB4MDMsMHg2OCwweDAwLDB4YjksMHgwMCwweDNlLDB4NDAsMHg0ZiwweGIwLDB4NDMsMHhlZCwweDAwIH0sCisgIDE2LCAweGUxYTAsIDAsIHsweGVhLDB4MDAsMHgzZSwweDQwLDB4MGYsMHg4MCwweDAzLDB4OTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUxYjAsIDAsIHsweGMwLDB4MDEsMHhiOCwweDE4LDB4ZmYsMHgwMiwweDFmLDB4YzAsMHgwYywweGUyLDB4MDMsMHhmYywweDAwLDB4ZGYsMHgwMywweDJmIH0sCisgIDE2LCAweGUxYzAsIDAsIHsweGExLDB4MGYsMHg3MCwweDAzLDB4ZmMsMHgwNCwweGFiLDB4MDQsMHgzNywweDQyLDB4MmQsMHhkMCwweDAyLDB4N2MsMHgwMCwweGZjIH0sCisgIDE2LCAweGUxZDAsIDAsIHsweDAwLDB4M2YsMHg4MCwweDBmLDB4YzAsMHgwMywweGIwLDB4MDAsMHhmZCwweDAwLDB4M2YsMHg4MCwweDBmLDB4ZjAsMHgwMywweDc4IH0sCisgIDE2LCAweGUxZTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YTksMHgwMCwweGRiLDB4MDAsMHgzYywweGMwIH0sCisgIDE2LCAweGUxZjAsIDAsIHsweDJlLDB4OTQsMHgwMSwweDZjLDB4MTEsMHhjYiwweDAwLDB4YjgsMHhjMCwweDBjLDB4YjAsMHgwMywweDZjLDB4MDAsMHhlYiwweDAxIH0sCisgIDE2LCAweGUyMDAsIDAsIHsweDMyLDB4MTAsMHgwNywweDkyLDB4MDMsMHhhOCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MGMsMHgwNywweGEyLDB4MDMsMHhhZCwweDAwIH0sCisgIDE2LCAweGUyMTAsIDAsIHsweGQ4LDB4MDAsMHgzMiwweDAwLDB4MGMsMHg4MCwweDAzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUyMjAsIDAsIHsweGM4LDB4MDUsMHgyOCwweDA4LDB4YmYsMHgwMCwweDJmLDB4YzAsMHg4OCwweDgwLDB4MDIsMHgzYywweDA4LDB4ZWYsMHgwMywweDIyIH0sCisgIDE2LCAweGUyMzAsIDAsIHsweDAwLDB4MGQsMHhmNSwweDAwLDB4M2MsMHgwMCwweDhiLDB4ODIsMHgyMiwweDYwLDB4MDMsMHg5YywweDAyLDB4MmMsMHgxMCwweGI5IH0sCisgIDE2LCAweGUyNDAsIDAsIHsweGIwLDB4MjIsMHhmMCwweDBiLDB4OTAsMHgwMiwweDIwLDB4MDAsMHhiYiwweDAwLDB4MjIsMHhlMiwweDBkLDB4YjAsMHgwMiwweGYyIH0sCisgIDE2LCAweGUyNTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NDAsMHgwMCwweGIzLDB4MDIsMHgyYywweGMwIH0sCisgIDE2LCAweGUyNjAsIDAsIHsweDA4LDB4MzAsMHgwMiwweDZjLDB4MDAsMHg4MywweDAwLDB4MjAsMHhjMCwweDA5LDB4MzQsMHgwNCwweGVjLDB4MDAsMHhhOCwweDAwIH0sCisgIDE2LCAweGUyNzAsIDAsIHsweDIyLDB4ZjAsMHgwYiwweDAwLDB4MDIsMHg4OCwweDAwLDB4YjMsMHgwMCwweDI4LDB4ZTAsMHgwYiwweDE0LDB4MDIsMHhhMCwweDAwIH0sCisgIDE2LCAweGUyODAsIDAsIHsweDkzLDB4MDAsMHgyMCwweGMwLDB4MDgsMHhiMCwweDAyLDB4ZjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUyOTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDA0LDB4YjcsMHg4MCwweDJkLDB4ZTgsMHgwOCwweDc4LDB4MDIsMHgwZSwweGM4LDB4YTcsMHg5MCwweDIxIH0sCisgIDE2LCAweGUyYTAsIDAsIHsweGE4LDB4MTksMHgzOCwweDUyLDB4OWUsMHhjMSwweDg3LDB4ODAsMHgyMSwweGUyLDB4MGIsMHhkOSwweDgyLDB4OWUsMHgwMCwweGI2IH0sCisgIDE2LCAweGUyYjAsIDAsIHsweGEwLDB4MmQsMHgyMCwweDBiLDB4NjgsMHgwMiwweDFlLDB4MDAsMHhiNCwweGMxLDB4MjEsMHgyMCwweDA5LDB4NDgsMHgwMiwweGM4IH0sCisgIDE2LCAweGUyYzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4MGMsMHg4MCwweGIzLDB4MTAsMHgzZSwweGUwIH0sCisgIDE2LCAweGUyZDAsIDAsIHsweDBlLDB4M2EsMHgwNywweDRlLDB4MDAsMHhjYiwweDkwLDB4M2EsMHg2MSwweDBkLDB4MzgsMHgwMywweGNlLDB4ZDEsMHhlMSwweDk4IH0sCisgIDE2LCAweGUyZTAsIDAsIHsweDMwLDB4YTQsMHg4ZiwweDEwLDB4MDMsMHg4OCwweDAwLDB4YmEsMHhhMSwweDNjLDB4ODQsMHgwNywweDAwLDB4MDMsMHg4MiwweGQ0IH0sCisgIDE2LCAweGUyZjAsIDAsIHsweGQxLDB4MDAsMHg3MiwweDgwLDB4MGMsMHgzMCwweDAzLDB4ZDIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUzMDAsIDAsIHsweDQwLDB4MTUsMHhiYywweDA0LDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGMyLDB4MjMsMHhlYywweGIwLDB4ZmYsMHgwMCwweDMyIH0sCisgIDE2LCAweGUzMTAsIDAsIHsweDA0LDB4MDYsMHhiNCwweDIzLDB4N2MsMHgxMCwweGJmLDB4MDAsMHgzZSwweDg0LDB4MGYsMHhiMCwweDAzLDB4N2MsMHg0MCwweGZmIH0sCisgIDE2LCAweGUzMjAsIDAsIHsweDAwLDB4MzMsMHg0MCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZSwweDAwLDB4YmYsMHg0MCwweDBmLDB4YzgsMHgwMywweGQwIH0sCisgIDE2LCAweGUzMzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4ZTQsMHgwMCwweGNiLDB4MzMsMHgzZSwweGM4IH0sCisgIDE2LCAweGUzNDAsIDAsIHsweDRjLDB4YjAsMHgwMywweGFjLDB4OTAsMHhkYiwweGEwLDB4MzYsMHhjMCwweDBlLDB4YmEsMHg0MywweDZjLDB4MDAsMHhjOSwweDAwIH0sCisgIDE2LCAweGUzNTAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDAwLDB4MGYsMHgyOCwweDAwLDB4ZmIsMHgwMCwweDNlLDB4NDAsMHgwZiwweDE4LDB4NDMsMHg2MCwweDAwIH0sCisgIDE2LCAweGUzNjAsIDAsIHsweGZhLDB4MDAsMHgzZSwweDQwLDB4NGYsMHgwOCwweDBiLDB4MmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUzNzAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDEwLDB4MDcsMHgwOCwweDJjLDB4Y2EsMHgwOCwweDIwLDB4MDIsMHgxYywweDIwLDB4ODcsMHgyOCwweDNmIH0sCisgIDE2LCAweGUzODAsIDAsIHsweDgwLDB4OGEsMHhmMCwweDAyLDB4MWQsMHg0MCwweDg3LDB4MDQsMHgyZCwweGMwLDB4MGIsMHg3MCwweDAyLDB4MWMsMHgwMCwweGI2IH0sCisgIDE2LCAweGUzOTAsIDAsIHsweDAwLDB4MmQsMHg4MCwweDBiLDB4NjAsMHgwMywweDFjLDB4MDAsMHhiNSwweDAwLDB4MmQsMHg4MCwweDBiLDB4NzAsMHgwMiwweDEyIH0sCisgIDE2LCAweGUzYTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OGUsMHgwMCwweDg3LDB4YTAsMHgyZCwweGU0IH0sCisgIDE2LCAweGUzYjAsIDAsIHsweDBhLDB4NTgsMHgwMiwweDFlLDB4MDEsMHg4MywweDkwLDB4MjEsMHg3MCwweDBiLDB4NzksMHgwMiwweDllLDB4MDEsMHg4NSwweGMwIH0sCisgIDE2LCAweGUzYzAsIDAsIHsweDJkLDB4ZTAsMHg0YiwweDU4LDB4MTIsMHgxYSwweDAwLDB4YjYsMHg4MCwweDJkLDB4MjAsMHgwYiwweDQ4LDB4MDIsMHg1MiwweDAwIH0sCisgIDE2LCAweGUzZDAsIDAsIHsweGI0LDB4ODAsMHgyZCwweDIwLDB4MGIsMHg0OCwweDAyLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUzZTAsIDAsIHsweDQ4LDB4MTQsMHhlYywweDAwLDB4ODMsMHgwMCwweDJjLDB4YzAsMHg4OCwweDM2LDB4MDIsMHgwYywweDAyLDB4ODMsMHgwMCwweDZjIH0sCisgIDE2LCAweGUzZjAsIDAsIHsweGMwLDB4MGIsMHgzMCwweDBhLDB4YWMsMHgwMCwweDliLDB4ZTAsMHg2YywweGM4LDB4MGIsMHgzMiwweDAyLDB4MGMsMHgwMSwweGIzIH0sCisgIDE2LCAweGU0MDAsIDAsIHsweDAwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBjLDB4MTAsMHhiMywweDQwLDB4MmMsMHhjMCwweDBiLDB4M2MsMHg4MiwweDEyIH0sCisgIDE2LCAweGU0MTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YjgsMHgwMiwweGNhLDB4MDAsMHgzZSwweDgwIH0sCisgIDE2LCAweGU0MjAsIDAsIHsweDBlLDB4ZTQsMHg4YiwweDI4LDB4MDAsMHhjYSwweDAwLDB4MzMsMHg5NSwweDBmLDB4YTAsMHgwNywweGE4LDB4MDIsMHhjZSwweDQwIH0sCisgIDE2LCAweGU0MzAsIDAsIHsweDNmLDB4YjAsMHgwZiwweGU0LDB4ODIsMHgyOCwweDAwLDB4ZmEsMHgwMCwweDNlLDB4ODAsMHgwZiwweGEwLDB4MjMsMHg2OCwweDAwIH0sCisgIDE2LCAweGU0NDAsIDAsIHsweGZhLDB4NDAsMHgzZSwweDgxLDB4NGYsMHhhNCwweGUzLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU0NTAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDgwLDB4ZjAsMHgwMCwweDNjLDB4MDAsMHgyZiwweDAwLDB4MDIsMHg2MCwweDAwLDB4ZTgsMHgwMCwweDNjIH0sCisgIDE2LCAweGU0NjAsIDAsIHsweDAwLDB4MGUsMHg4MCwweDAxLDB4MjAsMHgwMCwweGU4LDB4MDQsMHg1ZSwweDA0LDB4MGYsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGZjIH0sCisgIDE2LCAweGU0NzAsIDAsIHsweDAxLDB4M2YsMHgxMCwweDBmLDB4YzQsMHgwMywweGIwLDB4MDAsMHhmYywweDA5LDB4M2YsMHgwMCwweDBmLDB4YzAsMHgwMywweGQyIH0sCisgIDE2LCAweGU0ODAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGE5LDB4MjAsMHgzNiwweDQwIH0sCisgIDE2LCAweGU0OTAsIDAsIHsweDBlLDB4OTAsMHgwMywweDQ0LDB4MDQsMHhkOSwweDAwLDB4M2UsMHg0MCwweDBkLDB4OTAsMHgwMywweGU0LDB4MDQsMHhjOSwweDAwIH0sCisgIDE2LCAweGU0YTAsIDAsIHsweDMyLDB4NDAsMHg4ZiwweDkwLDB4MGIsMHhlNCwweDA4LDB4ZjksMHgwMCwweDNlLDB4NDQsMHgwZSwweDk4LDB4MDMsMHhlNiwweDAwIH0sCisgIDE2LCAweGU0YjAsIDAsIHsweGY5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4YzIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU0YzAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHgwMCwweDIyLDB4NDAsMHgxOCwweDkwLDB4MDIsMHgyNCwweDAwLDB4ODksMHgwMCwweDJlIH0sCisgIDE2LCAweGU0ZDAsIDAsIHsweDQwLDB4MDgsMHg5NCwweDAyLDB4ZTQsMHgwMCwweGQ5LDB4MDQsMHgyMiwweDQwLDB4MGIsMHgxYywweDBiLDB4NjQsMHgwMCwweGI5IH0sCisgIDE2LCAweGU0ZTAsIDAsIHsweDk0LDB4MmMsMHg1MCwweDA4LDB4OWMsMHgwMiwweGU0LDB4MTQsMHhiOSwweDkwLDB4MGUsMHg0MCwweDBiLDB4OTAsMHgwMiwweGUwIH0sCisgIDE2LCAweGU0ZjAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMiwweDg5LDB4MDAsMHgyNiwweDQwIH0sCisgIDE2LCAweGU1MDAsIDAsIHsweDRhLDB4OTAsMHgwMiwweDY0LDB4MDAsMHg5OSwweDA0LDB4MmUsMHg0MCwweDA4LDB4OTgsMHg4MiwweGU0LDB4MDAsMHg4OSwweDAwIH0sCisgIDE2LCAweGU1MTAsIDAsIHsweDZhLDB4NDAsMHgwYSwweDkyLDB4ODIsMHhlNCwweDAwLDB4YmQsMHgwMSwweDJmLDB4NTAsMHgxMiwweGQ2LDB4MDIsMHhmNCwweDQwIH0sCisgIDE2LCAweGU1MjAsIDAsIHsweGJkLDB4MDAsMHgwZiwweDQwLDB4MGIsMHhkMCwweDAyLDB4YzYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU1MzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4ODEsMHgyMCwweDIwLDB4NDgsMHgwOCwweDEyLDB4MDIsMHgwNCwweDgwLDB4ODEsMHgyMiwweDJjIH0sCisgIDE2LCAweGU1NDAsIDAsIHsweDQ4LDB4YTgsMHgxMiwweDA2LDB4YzQsMHg5MCwweDkxLDB4MjAsMHgyOCwweDUwLDB4MGIsMHg5MCwweDAyLDB4NDUsMHgwMCwweGI1IH0sCisgIDE2LCAweGU1NTAsIDAsIHsweDQwLDB4NmQsMHg0MCwweDA4LDB4NTAsMHgxMiwweGQ0LDB4MDQsMHhiNSwweDAyLDB4MmQsMHg0MCwweDBiLDB4NTAsMHgwMiwweGMyIH0sCisgIDE2LCAweGU1NjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGM4LDB4MDAsMHgzNiwweDE0IH0sCisgIDE2LCAweGU1NzAsIDAsIHsweDBhLDB4ODUsMHgwMywweDQxLDB4NDAsMHhkOCwweDUwLDB4MmUsMHgxNCwweDBjLDB4ODUsMHgwMywweGMxLDB4NDAsMHhjOCwweDUwIH0sCisgIDE2LCAweGU1ODAsIDAsIHsweGJhLDB4MDAsMHgwZSwweDgwLDB4MjMsMHhlMCwweDAwLDB4NzgsMHgwMCwweDNlLDB4MDAsMHgwZSwweDgwLDB4MDMsMHhlMCwweDA0IH0sCisgIDE2LCAweGU1OTAsIDAsIHsweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHhjMCwweDAzLDB4ZWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU1YTAsIDAsIHsweDk4LDB4MWQsMHhmNCwweDQwLDB4ZDksMHgxMCwweDNlLDB4NDQsMHgwNywweGYxLDB4MDMsMHhlNCwweDQwLDB4ZjksMHgxMCwweDNmIH0sCisgIDE2LCAweGU1YjAsIDAsIHsweDQ0LDB4YWYsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGZkLDB4MTAsMHgzNywweDUwLDB4MGYsMHhkMCwweDAzLDB4ZTQsMHgwMCwweGY5IH0sCisgIDE2LCAweGU1YzAsIDAsIHsweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4YTAsMHhmOSwweDI4LDB4M2UsMHg0YSwweDBmLDB4OTIsMHg4MywweGU2IH0sCisgIDE2LCAweGU1ZDAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZTYsMHhkNCwweGZkLDB4YTIsMHgzYSwweDcwIH0sCisgIDE2LCAweGU1ZTAsIDAsIHsweDhjLDB4OWUsMHgwMywweDI2LDB4ODAsMHhjOSwweGEwLDB4MzIsMHg2OCwweDBjLDB4ZGIsMHg0MywweDI3LDB4ODAsMHg5ZCwweGEyIH0sCisgIDE2LCAweGU1ZjAsIDAsIHsweGI3LDB4NDAsMHgwZiwweDUwLDB4MDMsMHg2NSwweDAwLDB4ZmQsMHgwMCwweDNmLDB4YzEsMHgwNywweGQwLDB4MDMsMHhmNSwweDA0IH0sCisgIDE2LCAweGU2MDAsIDAsIHsweGZkLDB4NDAsMHgyZiwweGMwLDB4MGMsMHhkMCwweDAzLDB4YzYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU2MTAsIDAsIHsweDM4LDB4MTAsMHhlMywweDg4LDB4YjgsMHg1MCwweDIyLDB4MzgsMHgwOCwweDhlLDB4MDAsMHhhMiwweGEwLDB4ODgsMHhlOCwweDIyIH0sCisgIDE2LCAweGU2MjAsIDAsIHsweDM4LDB4NDgsMHg4OCwweDAzLDB4NjIsMHgxMCwweGE4LDB4ZTgsMHgzYywweDAwLDB4MGIsMHg4MCwweDAzLDB4NjIsMHg4MCwweGI4IH0sCisgIDE2LCAweGU2MzAsIDAsIHsweDAxLDB4MmUsMHg4MCwweDBiLDB4ODAsMHgyMSwweGEyLDB4MDAsMHhiMCwweDg0LDB4MmUsMHgyYSwweDI4LDB4OGEsMHg4MiwweGNlIH0sCisgIDE2LCAweGU2NDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHg0MCwweGIxLDB4MDAsMHgyOCwweDU4IH0sCisgIDE2LCAweGU2NTAsIDAsIHsweDgwLDB4MTMsMHg0MCwweDA1LDB4MDAsMHg4MSwweDQwLDB4MjAsMHg1MiwweDI4LDB4MTYsMHgwMiwweDg1LDB4ODAsMHg5YiwweGMyIH0sCisgIDE2LCAweGU2NjAsIDAsIHsweDY0LDB4NDEsMHg4YiwweDk4LDB4MDIsMHgwNCwweDAwLDB4YjEsMHgwOSwweDJjLDB4NDAsMHgxYiwweDEwLDB4MjAsMHhjNCwweDAwIH0sCisgIDE2LCAweGU2NzAsIDAsIHsweGIxLDB4MDAsMHgyYywweDQwLDB4NDgsMHgxMCwweDAyLDB4YzIsMHgwNSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU2ODAsIDAsIHsweDE4LDB4MTUsMHhhNSwweDg0LDB4YjksMHgwMCwweDIwLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDAwLDB4MDEsMHgwMCwweDIwIH0sCisgIDE2LCAweGU2OTAsIDAsIHsweDUwLDB4MDgsMHg5MCwweDQyLDB4NjQsMHgwMCwweGE5LDB4MTAsMHhhZSwweDU4LDB4MDMsMHg5OCwweDAyLDB4NjQsMHgwMCwweGI5IH0sCisgIDE2LCAweGU2YTAsIDAsIHsweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHg0NiwweGE0LDB4MTAsMHhiOSwweDAwLDB4MmUsMHg0MSwweDA4LDB4OTAsMHgwMiwweGM2IH0sCisgIDE2LCAweGU2YjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDExLDB4ZTcsMHgwMCwweGY5LDB4MDAsMHgyYSwweDQwIH0sCisgIDE2LCAweGU2YzAsIDAsIHsweDJjLDB4OTQsMHgwYiwweDI0LDB4MDIsMHhjOSwweDAwLDB4YjIsMHg0NCwweDBjLDB4OTAsMHgwMywweDI0LDB4MDQsMHhkOSwweDgwIH0sCisgIDE2LCAweGU2ZDAsIDAsIHsweGI2LDB4NDEsMHg4ZiwweDE4LDB4MDMsMHgyNCwweDAwLDB4ZjksMHg2MCwweDNlLDB4NDAsMHgwZiwweDk2LDB4MDMsMHhlNCwweDAwIH0sCisgIDE2LCAweGU2ZTAsIDAsIHsweGY5LDB4ODAsMHgzZSwweDQyLDB4OGMsMHg5MCwweDAzLDB4ZTgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU2ZjAsIDAsIHsweDI4LDB4MDEsMHhhNiwweDAwLDB4ZjEsMHgwMCwweDNlLDB4NDAsMHgwZiwweDFjLDB4MDMsMHhjNCwweDAwLDB4ZjksMHgwMCwweDNlIH0sCisgIDE2LCAweGU3MDAsIDAsIHsweDQwLDB4OGYsMHg5MCwweDIzLDB4YzQsMHgxMCwweGY5LDB4MDAsMHhiZSwweDQwLDB4MGYsMHg5MCwweDBiLDB4ZTQsMHgwMCwweGY5IH0sCisgIDE2LCAweGU3MTAsIDAsIHsweDAwLDB4M2UsMHg0MCwweDA3LDB4OTAsMHgyMywweGU0LDB4MDAsMHhmOSwweDIwLDB4M2UsMHg0MCwweDhmLDB4OTAsMHgwMywweGNhIH0sCisgIDE2LCAweGU3MjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTEsMHgwMCwweGY4LDB4MDAsMHhiZSwweDAwIH0sCisgIDE2LCAweGU3MzAsIDAsIHsweDBlLDB4ODQsMHgwMywweDIwLDB4MDAsMHhjOCwweDAwLDB4MzIsMHgwMCwweDBjLDB4MDAsMHg4MywweDIwLDB4MDAsMHhmOCwweDAwIH0sCisgIDE2LCAweGU3NDAsIDAsIHsweDNlLDB4MDAsMHgwYywweDgwLDB4MDMsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDM2LDB4MTAsMHgwZiwweDgwLDB4NDMsMHhlMCwweDA4IH0sCisgIDE2LCAweGU3NTAsIDAsIHsweGY4LDB4MDAsMHgzMiwweDAwLDB4MGYsMHg4MCwweDAzLDB4Y2EsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU3NjAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAwLDB4YmEsMHgwMCwweDIyLDB4ODAsMHg0OCwweGEwLDB4MDMsMHg2OCwweDAwLDB4YWEsMHgwMCwweDJhIH0sCisgIDE2LCAweGU3NzAsIDAsIHsweDgwLDB4MDgsMHhlMCwweDAzLDB4NjgsMHgwMCwweDgyLDB4MDAsMHgyZiwweDgwLDB4MDgsMHhlNiwweDAyLDB4MjgsMHgwNCwweGJlIH0sCisgIDE2LCAweGU3ODAsIDAsIHsweDQwLDB4MjMsMHg4MCwweDBiLDB4ZTgsMHgwMiwweGVhLDB4MDAsMHhiZSwweDAxLDB4MjIsMHg4MCwweDBiLDB4ZTAsMHgwMiwweGNhIH0sCisgIDE2LCAweGU3OTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMSwweDkzLDB4MDEsMHgyMCwweGMxIH0sCisgIDE2LCAweGU3YTAsIDAsIHsweDBhLDB4MzAsMHgwMiwweDBjLDB4MDAsMHhhMywweDAwLDB4MjAsMHhjMCwweDg4LDB4MzgsMHg0MiwweDBjLDB4MDAsMHhhMywweDAwIH0sCisgIDE2LCAweGU3YjAsIDAsIHsweDI0LDB4YzAsMHgwYSwweDNlLDB4NDIsMHg4YywweDAwLDB4YjIsMHg0YywweDI0LDB4ZTAsMHg0YiwweDM4LDB4MDIsMHhjNCwweDQxIH0sCisgIDE2LCAweGU3YzAsIDAsIHsweGIzLDB4MDAsMHgyMiwweGMwLDB4MGIsMHgxMCwweDAyLDB4Y2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU3ZDAsIDAsIHsweGEwLDB4MDEsMHgxYywweDAwLDB4YjcsMHgwMCwweDIwLDB4YzksMHg0OCwweDcwLDB4MDIsMHhkYywweDQwLDB4YTcsMHgxNCwweDJjIH0sCisgIDE2LCAweGU3ZTAsIDAsIHsweGM4LDB4MjgsMHgzMCwweDgyLDB4NWMsMHhjMSwweDg1LDB4MDAsMHgyZCwweGUwLDB4MmEsMHhmMCwweDEyLDB4MWMsMHg4MCwweGI3IH0sCisgIDE2LCAweGU3ZjAsIDAsIHsweGEwLDB4MjEsMHg4MiwweDBiLDB4NzAsMHg4MiwweGQ0LDB4MTEsMHhiNiwweDgwLDB4MjEsMHg0MCwweDRiLDB4NTAsMHgwMiwweGU4IH0sCisgIDE2LCAweGU4MDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHg4MCwweGQ1LDB4ODAsMHgyOSwweGVhIH0sCisgIDE2LCAweGU4MTAsIDAsIHsweDRlLDB4M2EsMHgwNywweDBlLDB4ODAsMHhlMywweGIwLDB4MzEsMHhmYywweDBjLDB4NDgsMHgwMywweDBlLDB4NDEsMHhlNywweDgwIH0sCisgIDE2LCAweGU4MjAsIDAsIHsweDNkLDB4ZTAsMHgwZSwweDc4LDB4MDMsMHg5ZSwweDgwLDB4ZjQsMHhjNCwweDM1LDB4ZTAsMHgwZiwweDc4LDB4MjcsMHhkZSwweDAwIH0sCisgIDE2LCAweGU4MzAsIDAsIHsweGY1LDB4ODAsMHhiMSwweGUwLDB4MGYsMHg1OCwweDAzLDB4ZWEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU4NDAsIDAsIHsweDA4LDB4MWQsMHhhYywweDAwLDB4MzEsMHgwNCwweDNhLDB4YzQsMHgwZiwweGI1LDB4OTMsMHg2ZCwweDA4LDB4ZmIsMHg0MCwweDNhIH0sCisgIDE2LCAweGU4NTAsIDAsIHsweGM4LDB4NjMsMHg4MCwweDIzLDB4ZWMsMHg5OCwweGU5LDB4MDAsMHgzZSwweGMwLDB4MGQsMHhiMCwweDQzLDB4ZWMsMHgwMCwweGYzIH0sCisgIDE2LCAweGU4NjAsIDAsIHsweDgwLDB4M2UsMHg0MCwweDRmLDB4YTAsMHgwMywweGVjLDB4MDAsMHhmOCwweDY4LDB4M2UsMHg0MCwweDhmLDB4OTgsMHgwMywweGMyIH0sCisgIDE2LCAweGU4NzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHg2MCwweGViLDB4OTAsMHgzZSwweGU0IH0sCisgIDE2LCAweGU4ODAsIDAsIHsweDBmLDB4YjgsMHgwMCwweDNmLDB4NDAsMHhjYiwweDgwLDB4N2YsMHhlMCwweDBlLDB4ZmIsMHgwMywweDJlLDB4NDAsMHhjYiwweDgwIH0sCisgIDE2LCAweGU4OTAsIDAsIHsweDNmLDB4ZTAsMHgwZiwweDc5LDB4NDMsMHgyZSwweDYwLDB4Y2EsMHg4MSwweDMzLDB4NjQsMHg4ZiwweGQ5LDB4MDMsMHhmZSwweDAwIH0sCisgIDE2LCAweGU4YTAsIDAsIHsweGZmLDB4ODEsMHgzMywweGUwLDB4MGYsMHhkOSwweDhiLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU4YjAsIDAsIHsweGE4LDB4MDEsMHg5YywweDAwLDB4ODcsMHg4MSwweDE5LDB4ZTQsMHgwYiwweGZhLDB4MTMsMHg1ZSwweDgwLDB4ODcsMHhiMiwweDJkIH0sCisgIDE2LCAweGU4YzAsIDAsIHsweGVjLDB4MGQsMHg3OSwweDAxLDB4OWUsMHgwMCwweGQ1LDB4OTAsMHgyZCwweGY4LDB4MGIsMHg3OCwweDAzLDB4N2UsMHgwOCwweGFiIH0sCisgIDE2LCAweGU4ZDAsIDAsIHsweDkxLDB4MjksMHg4NSwweDBiLDB4NTEsMHgwMiwweGRjLDB4NDgsMHhiNiwweDQwLDB4MjEsMHg0MCwweDBiLDB4NTAsMHgwMiwweDJhIH0sCisgIDE2LCAweGU4ZTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OGMsMHgxNCwweGI1LDB4MjAsMHg2ZCwweGM4IH0sCisgIDE2LCAweGU4ZjAsIDAsIHsweDBiLDB4NzIsMHgwMiwweDVjLDB4ODAsMHg4NywweDIwLDB4NjksMHhjMCwweDg4LDB4NTMsMHgwMiwweGNjLDB4ODEsMHg5NywweDUwIH0sCisgIDE2LCAweGU5MDAsIDAsIHsweDJkLDB4YzgsMHgwYiwweGY3LDB4MGEsMHhkYywweGMwLDB4ODQsMHgwMSwweDIxLDB4NDQsMHgxYiwweDcwLDB4MjIsMHhkYywweDAwIH0sCisgIDE2LCAweGU5MTAsIDAsIHsweGI1LDB4MDAsMHgyMSwweGM0LDB4MGIsMHg1MCwweDg2LDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU5MjAsIDAsIHsweDIwLDB4MTQsMHhjZiwweDMwLDB4OTEsMHgwMCwweDJjLDB4YzAsMHgwYiwweDM0LDB4MDIsMHg0YywweDAwLDB4ODMsMHgwMCwweDJjIH0sCisgIDE2LCAweGU5MzAsIDAsIHsweGYyLDB4MGIsMHgxMCwweDIyLDB4MGMsMHgwMCwweDkxLDB4MDAsMHgyYywweGM4LDB4MGIsMHgxOCwweDBhLDB4Y2QsMHgwMSwweGEzIH0sCisgIDE2LCAweGU5NDAsIDAsIHsweDAwLDB4MjgsMHg2MCwweDBiLDB4MjEsMHgwMiwweGNlLDB4MjAsMHhiOCwweDQwLDB4YTAsMHg1NCwweDBiLDB4MTgsMHgwMiwweDA4IH0sCisgIDE2LCAweGU5NTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDExLDB4YmQsMHgwMCwweGY5LDB4MDAsMHgyZiwweGMwIH0sCisgIDE2LCAweGU5NjAsIDAsIHsweDBmLDB4ZjQsMHgwMiwweDdjLDB4MTIsMHhjZiwweDAzLDB4M2YsMHhjMiwweDBlLDB4YjAsMHgwMywweGZjLDB4MDQsMHg5YiwweDAyIH0sCisgIDE2LCAweGU5NzAsIDAsIHsweDJlLDB4ZjIsMHgwZiwweGE0LDB4MGIsMHhkYywweDAwLDB4Y2UsMHgwMCwweGIwLDB4YzgsMHg4ZiwweGE0LDB4MDMsMHhlZiwweDAwIH0sCisgIDE2LCAweGU5ODAsIDAsIHsweGY4LDB4ODAsMHgzMiwweGY1LDB4MWYsMHhkZCwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU5OTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDQwLDB4ZTksMHgwMCwweDNhLDB4YzAsMHgwZiwweGIxLDB4MDMsMHhjYywweDAwLDB4ZjMsMHgwMCwweDNlIH0sCisgIDE2LCAweGU5YTAsIDAsIHsweGMwLDB4MGQsMHhiNCwweDA5LDB4ZWMsMHgxOCwweGY5LDB4MTAsMHgzZSwweDEwLDB4NGYsMHhiMSwweDBhLDB4NmMsMHg4MCwweGY5IH0sCisgIDE2LCAweGU5YjAsIDAsIHsweDg5LDB4MzYsMHg4MiwweDBiLDB4YTYsMHgwMywweGVjLDB4NTAsMHhmOSwweDUwLDB4M2UsMHhjMCwweDFmLDB4OTAsMHgwMywweDYwIH0sCisgIDE2LCAweGU5YzAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweGZkLDB4YTAsMHgzZCwweGMwIH0sCisgIDE2LCAweGU5ZDAsIDAsIHsweDBjLDB4NzAsMHg4MywweDJjLDB4MDAsMHhlZiwweDAyLDB4MzUsMHhjMCwweDBkLDB4ZTIsMHgwMywweGZjLDB4MDQsMHhmZiwweDAyIH0sCisgIDE2LCAweGU5ZTAsIDAsIHsweDJkLDB4ZTAsMHg4ZSwweGYwLDB4MDMsMHgzYywweDEwLDB4ZGMsMHgwMCwweDNmLDB4ODAsMHgwYywweGQ4LDB4MDMsMHhmYywweDAwIH0sCisgIDE2LCAweGU5ZjAsIDAsIHsweGRlLDB4MTgsMHgzMywweGYwLDB4NGYsMHhkMCwweDAzLDB4YzAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVhMDAsIDAsIHsweDgxLDB4MDAsMHg2YywweDAwLDB4YjksMHgwMCwweDJlLDB4YzAsMHg0YywweGIwLDB4MDMsMHg2YywweDAwLDB4OGIsMHgwMiwweDM2IH0sCisgIDE2LCAweGVhMTAsIDAsIHsweGMwLDB4MGQsMHhhYywweDEyLDB4ZWMsMHgwMCwweDc5LDB4MDAsMHgyZSwweDMwLDB4MGQsMHgzZCwweDQyLDB4YWMsMHgwMCwweDg5IH0sCisgIDE2LCAweGVhMjAsIDAsIHsweDg4LDB4MWEsMHgxMCwweDBkLDB4ODYsMHgwMiwweGVlLDB4MDQsMHhiYiwweDQwLDB4MjIsMHhlMCwweDBiLDB4OTAsMHgwMiwweGUwIH0sCisgIDE2LCAweGVhMzAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMSwweGI5LDB4MDAsMHgyZSwweGMwIH0sCisgIDE2LCAweGVhNDAsIDAsIHsweDA4LDB4YjAsMHg0MiwweGFjLDB4MDAsMHgwYiwweDA1LDB4MjYsMHhjMCwweDA5LDB4OTQsMHgyMCwweGVjLDB4MDAsMHhiOSwweDgwIH0sCisgIDE2LCAweGVhNTAsIDAsIHsweDZlLDB4YzQsMHg4OCwweGIwLDB4ODIsMHgyYywweDAwLDB4OWIsMHg4MiwweDJlLDB4NDIsMHgwOCwweDgxLDB4MDIsMHhlNCwweDgwIH0sCisgIDE2LCAweGVhNjAsIDAsIHsweGI4LDB4MDAsMHgyMiwweGMxLDB4MGIsMHg5MCwweDAyLDB4ZTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVhNzAsIDAsIHsweDA4LDB4MDQsMHgwYywweDEwLDB4YjEsMHgyNSwweDJjLDB4Y2EsMHgwOCwweDM0LDB4NDYsMHhjYywweDA4LDB4ODMsMHgwMCwweDI0IH0sCisgIDE2LCAweGVhODAsIDAsIHsweGMyLDB4MGIsMHgwMiwweDUyLDB4Y2MsMHg4MSwweDgzLDB4MDAsMHgyYywweDAwLDB4MTksMHhiMiwweDQyLDB4YWMsMHg4MCwweDgxIH0sCisgIDE2LCAweGVhOTAsIDAsIHsweDA4LDB4MjgsMHg4MCwweDA5LDB4MDAsMHgwMiwweGM0LDB4NDAsMHhiMSwweDAwLDB4MjAsMHhjMCwweDBiLDB4MTAsMHgwMiwweGMyIH0sCisgIDE2LCAweGVhYTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4NmMsMHgwMCwweGI5LDB4MDAsMHgzZiwweGQwIH0sCisgIDE2LCAweGVhYjAsIDAsIHsweDA4LDB4ZjYsMHgwNywweGJjLDB4YzIsMHhhZiwweDMwLDB4NzUsMHhkYywweDBkLDB4MTYsMHgwMiwweGZjLDB4ZTAsMHhiOSwweDUwIH0sCisgIDE2LCAweGVhYzAsIDAsIHsweDNlLDB4Y2MsMHgwYywweGIwLDB4MjMsMHgyYywweDEwLDB4ZDksMHgwMCwweDNlLDB4MDAsMHgwYywweDkwLDB4MDMsMHhlYywweDAwIH0sCisgIDE2LCAweGVhZDAsIDAsIHsweGRlLDB4MDEsMHgzMiwweGMwLDB4MGYsMHg5MCwweDAzLDB4YzAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVhZTAsIDAsIHsweGEwLDB4MTksMHhmYywweDAwLDB4ZmQsMHgxMCwweDNmLDB4Y2EsMHgyZSwweGY2LDB4MDMsMHg2ZCwweDk0LDB4OWYsMHgzMCwweDNhIH0sCisgIDE2LCAweGVhZjAsIDAsIHsweGM5LDB4MGMsMHg4MywweDkzLDB4ZmMsMHg4MCwweGZmLDB4MTEsMHg3ZSwweDE5LDB4MGIsMHhiMSwweDAzLDB4ZmMsMHg0MCwweGZkIH0sCisgIDE2LCAweGViMDAsIDAsIHsweDA4LDB4M2IsMHgwMCwweDBmLDB4YzAsMHgwMywweGZjLDB4ODAsMHg3NywweDAwLDB4YmYsMHhjMCwweDBmLDB4NTAsMHgwMywweGU4IH0sCisgIDE2LCAweGViMTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAxLDB4ZmMsMHgwMCwweGY0LDB4OTQsMHgzNywweGM4IH0sCisgIDE2LCAweGViMjAsIDAsIHsweDBkLDB4NjksMHg2MywweDdjLDB4MTAsMHhmZiwweDYyLDB4MzcsMHhjMCwweDBkLDB4YjQsMHgwMywweDdjLDB4NjAsMHhkNCwweDgwIH0sCisgIDE2LCAweGViMzAsIDAsIHsweDNmLDB4NDAsMHgwZiwweDQ4LDB4MjMsMHgzMiwweDAwLDB4Y2UsMHgwMCwweGJmLDB4NDAsMHg4ZiwweGQxLDB4MDMsMHgzMCwweGUwIH0sCisgIDE2LCAweGViNDAsIDAsIHsweGZmLDB4MzAsMHgzYiwweDYwLDB4MGYsMHhkOCwweDAzLDB4YjAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGViNTAsIDAsIHsweDgwLDB4MTAsMHhlZCwweDIwLDB4YjgsMHgyNCwweDIzLDB4ZjQsMHg0OSwweGEyLDB4MDIsMHgzZiwweDQwLDB4OGYsMHg1MSwweDIzIH0sCisgIDE2LCAweGViNjAsIDAsIHsweGRhLDB4MDgsMHhmNiwweDEyLDB4M2QsMHg4MCwweDliLDB4ODAsMHgyZSwweDQ5LDB4NGIsMHg4MCwweDAzLDB4NDAsMHgwMCwweGQ5IH0sCisgIDE2LCAweGViNzAsIDAsIHsweDAxLDB4MjIsMHg3NCwweDBiLDB4ZDUsMHgwMiwweDIxLDB4MDAsMHhiZiwweDQyLDB4MmUsMHg0OSwweDBiLDB4OWMsMHgwMiwweGUwIH0sCisgIDE2LCAweGViODAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2QsMHg4MCwweGI4LDB4MjAsMHgyOCwweGMxIH0sCisgIDE2LCAweGViOTAsIDAsIHsweDFiLDB4YTAsMHgwMiwweDRjLDB4MDAsMHg5MywweDIwLDB4MmMsMHhkOCwweDBiLDB4MzQsMHgwMiwweGNjLDB4MDAsMHg5MCwweDAxIH0sCisgIDE2LCAweGViYTAsIDAsIHsweDJjLDB4YzYsMHgxYSwweGEwLDB4MDIsMHg2OCwweDA4LDB4ODMsMHgwMCwweGE0LDB4NDAsMHgwYiwweDEwLDB4MDIsMHgwMCwweDAwIH0sCisgIDE2LCAweGViYjAsIDAsIHsweGIzLDB4MTAsMHgyOCwweDQyLDB4MGIsMHgxNCwweDAyLDB4YTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGViYzAsIDAsIHsweGMwLDB4MTUsMHhhYywweDAwLDB4YjgsMHg2MCwweDJhLDB4YzAsMHgxYiwweGEwLDB4OGUsMHhhYywweDAxLDB4OWIsMHgwNSwweDI2IH0sCisgIDE2LCAweGViZDAsIDAsIHsweGMwLDB4MDMsMHhiMCwweDQyLDB4NmMsMHgwMCwweDliLDB4ODAsMHgyZSwweGMwLDB4MDMsMHhhMCwweDA2LDB4NjksMHgwMCwweDk5IH0sCisgIDE2LCAweGViZTAsIDAsIHsweDgwLDB4YWEsMHhjMCwweDBiLDB4OTAsMHgwMiwweDYzLDB4MDAsMHgzYiwweDAwLDB4MmUsMHg1OCwweDRiLDB4OTAsMHgwMiwweGYwIH0sCisgIDE2LCAweGViZjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDExLDB4ZWMsMHgwNCwweGY4LDB4ODAsMHhiYSwweGMwIH0sCisgIDE2LCAweGVjMDAsIDAsIHsweDBmLDB4MzAsMHgwMywweDZjLDB4MTAsMHhkYiwweDAzLDB4MzYsMHhjMCwweDhmLDB4YjAsMHgwMywweGVjLDB4MDgsMHhkOCwweDgwIH0sCisgIDE2LCAweGVjMTAsIDAsIHsweDdlLDB4ZTAsMHgwNiwweDg4LDB4MDMsMHg0MSwweDA4LDB4Y2IsMHhhMCwweDNlLDB4NjQsMHgwZiwweDkwLDB4MGIsMHgyYSwweDAwIH0sCisgIDE2LCAweGVjMjAsIDAsIHsweDdiLDB4MDAsMHgzYSwweDAxLDB4MGYsMHg5MCwweDAzLDB4OTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVjMzAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4ZmMsMHg4NCwweDMyLDB4YzAsMHgwYywweGY5LDB4MDMsMHg1YywweDEwLDB4ZWYsMHgwMCwweDNiIH0sCisgIDE2LCAweGVjNDAsIDAsIHsweGMwLDB4MGMsMHg3MCwweDAzLDB4OWMsMHgwMCwweGVjLDB4MDEsMHgzZiwweGU0LDB4NGYsMHhkMSwweDAzLDB4ZjEsMHgwMCwweGYzIH0sCisgIDE2LCAweGVjNTAsIDAsIHsweDA1LDB4MzMsMHg2MCwweDBmLDB4ZDAsMHgwMywweGJjLDB4MDQsMHhmZiwweDAwLDB4M2YsMHgyMSwweDBmLDB4ZDAsMHgwMywweGY4IH0sCisgIDE2LCAweGVjNjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGM4LDB4NDAsMHgzYSwweGM2IH0sCisgIDE2LCAweGVjNzAsIDAsIHsweDBkLDB4YjQsMHgwMywweDZjLDB4MDAsMHhmMywweDAwLDB4MzQsMHhjMCwweDBlLDB4YjAsMHgwMywweDZjLDB4MDAsMHhlOSwweDEwIH0sCisgIDE2LCAweGVjODAsIDAsIHsweDNhLDB4YzAsMHgwZiwweDg0LDB4MDMsMHgyYywweDYwLDB4Y2IsMHgwMCwweDMyLDB4NjAsMHgwYywweDUwLDB4MDMsMHg2MSwweDAwIH0sCisgIDE2LCAweGVjOTAsIDAsIHsweGNiLDB4MDAsMHgzZSwweDkwLDB4MGUsMHg5MCwweGEzLDB4OTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVjYTAsIDAsIHsweGM4LDB4MDUsMHgzYywweDAyLDB4ODgsMHgwMSwweDAxLDB4ZjAsMHgyMCwweGIwLDB4MDEsMHgzZSwweDAwLDB4M2YsMHgwMCwweDMzIH0sCisgIDE2LCAweGVjYjAsIDAsIHsweGMwLDB4MGIsMHhmMCwweDMyLDB4M2MsMHgwOCwweDg5LDB4ODAsMHgyMiwweGMwLDB4MDEsMHgxNSwweDEyLDB4YWMsMHgwMCwweDhiIH0sCisgIDE2LCAweGVjYzAsIDAsIHsweDAwLDB4MjIsMHhjMCwweDQ4LDB4ZGIsMHgwMiwweDJmLDB4NDAsMHg4ZiwweDAwLDB4MmUsMHgwMSwweDA4LDB4ZDQsMHg4MCwweDMyIH0sCisgIDE2LCAweGVjZDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMCwweDA4LDB4MDAsMHgwOCwweGYwIH0sCisgIDE2LCAweGVjZTAsIDAsIHsweDA4LDB4MDAsMHgxMiwweDRjLDB4MDAsMHgzMywweDAxLDB4MjQsMHhjMCwweDRhLDB4MzAsMHgwMiwweDRjLDB4MDAsMHhhMCwweDIwIH0sCisgIDE2LCAweGVjZjAsIDAsIHsweDI4LDB4YzAsMHgwYiwweDEwLDB4MDIsMHg0NiwweDA0LDB4ODMsMHgwNCwweDIwLDB4YzAsMHgyOSwweDE4LDB4MDIsMHgwNCwweDQwIH0sCisgIDE2LCAweGVkMDAsIDAsIHsweGIzLDB4MDAsMHgyYywweDQwLDB4MGEsMHgxYywweDQyLDB4YjEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVkMTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDAxLDB4OGQsMHg4MCwweDIxLDB4ZTAsMHgxOCwweGM4LDB4MDIsMHgxZSwweDAwLDB4YjMsMHhhMCwweDIxIH0sCisgIDE2LCAweGVkMjAsIDAsIHsweGUwLDB4MWIsMHgzOCwweDAyLDB4MGUsMHgwMSwweGE3LDB4ODAsMHgyMSwweGUwLDB4MDksMHhkOCwweDQwLDB4ZDYsMHg0MCwweDg3IH0sCisgIDE2LCAweGVkMzAsIDAsIHsweDgwLDB4MDEsMHhlMCwweDA5LDB4NTksMHgwMiwweDE2LDB4MDAsMHg5NywweDg0LDB4MmQsMHg2MCwweDA4LDB4NTgsMHg0MCwweDAwIH0sCisgIDE2LCAweGVkNDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MmMsMHg0MCwweGMwLDB4MDAsMHgzOCwweGM0IH0sCisgIDE2LCAweGVkNTAsIDAsIHsweDBjLDB4MzAsMHgyNywweDRjLDB4MjAsMHhmMywweDAxLDB4MzQsMHhjMSwweDBlLDB4M2EsMHgwMywweDRjLDB4YzQsMHhlMCwweDAwIH0sCisgIDE2LCAweGVkNjAsIDAsIHsweDE4LDB4YzgsMHgwZiwweDM0LDB4MDMsMHg0NCwweDQwLDB4YzMsMHgwMCwweDMwLDB4YzAsMHgwZCwweDkwLDB4MDMsMHgyZSwweDAwIH0sCisgIDE2LCAweGVkNzAsIDAsIHsweGYzLDB4MDAsMHgzZSwweDQwLDB4MGUsMHgxMCwweDAxLDB4OWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVkODAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZjksMHgwMCwweDBlLDB4ZDQsMHgwZSwweGIwLDB4MDMsMHhlYywweDIwLDB4ZmIsMHgyMCwweDNmIH0sCisgIDE2LCAweGVkOTAsIDAsIHsweGM0LDB4MGYsMHhmMSwweDAzLDB4ZWMsMHg2MCwweGRiLDB4MTAsMHgzZiwweGMwLDB4NGYsMHhmMCwweDAzLDB4YTQsMHg0NiwweGZiIH0sCisgIDE2LCAweGVkYTAsIDAsIHsweDAwLDB4YmQsMHhjMCwweDBlLDB4ZDAsMHgwYiwweGI0LDB4MDAsMHhlZiwweDQ4LDB4M2YsMHg0MCwweDBmLDB4NTAsMHgwMywweGQwIH0sCisgIDE2LCAweGVkYjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHgwMCwweGY4LDB4MDAsMHgzMiwweGQ0IH0sCisgIDE2LCAweGVkYzAsIDAsIHsweDBmLDB4ODAsMHgwMywweGFkLDB4MDAsMHhlYiwweDA4LDB4MjIsMHhkMiwweDBjLDB4YjYsMHgwMywweDZjLDB4MDAsMHhmMiwweDgwIH0sCisgIDE2LCAweGVkZDAsIDAsIHsweDM2LDB4YzAsMHgwZSwweGEwLDB4MDMsMHgyOCwweDEwLDB4Y2IsMHgwMCwweGIyLDB4YzAsMHgwZiwweGQ2LDB4MDMsMHgyOCwweDEwIH0sCisgIDE2LCAweGVkZTAsIDAsIHsweGZiLDB4MjAsMHgzZSwweDQwLDB4NGYsMHg5OSwweDEzLDB4MmIsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVkZjAsIDAsIHsweDQ4LDB4MTEsMHg5ZCwweDEwLDB4YjQsMHgwMSwweDIxLDB4YzEsMHg4YiwweGMwLDB4MDIsMHgxYywweGEwLDB4YmYsMHgwNCwweDI3IH0sCisgIDE2LCAweGVlMDAsIDAsIHsweGM4LDB4MDgsMHg3NSwweDAyLDB4MWMsMHhjMCwweGI2LDB4MDAsMHgyMSwweGMwLDB4MDgsMHhmMCwweDQyLDB4MTgsMHgxMCwweDhmIH0sCisgIDE2LCAweGVlMTAsIDAsIHsweDAwLDB4MjEsMHhjMCwweDBiLDB4NTQsMHhhMiwweDFjLDB4MDAsMHhiNywweDA0LDB4MmQsMHg0MSwweDBiLDB4NTIsMHgwMiwweDEyIH0sCisgIDE2LCAweGVlMjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHg4MCwweGI2LDB4ODgsMHhhNSwweGUwIH0sCisgIDE2LCAweGVlMzAsIDAsIHsweDBiLDB4NzgsMHgxMiwweDllLDB4ODEsMHhhNywweDkwLDB4MjUsMHhlNCwweDg4LDB4NzgsMHgwMiwweDFlLDB4ODAsMHhiZiwweDgwIH0sCisgIDE2LCAweGVlNDAsIDAsIHsweDI0LDB4NjAsMHgwYiwweDY4LDB4MDIsMHgxZSwweDAwLDB4ODcsMHg4NCwweDYxLDB4ZTAsMHgwYSwweDFhLDB4MGEsMHgxYSwweDAwIH0sCisgIDE2LCAweGVlNTAsIDAsIHsweGI3LDB4YTAsMHgyZCwweGUwLDB4MGIsMHhkYSwweDAyLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVlNjAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDAwLDB4YmEsMHhjMCwweGE0LDB4YzAsMHgwYiwweDM0LDB4MDIsMHgwYywweDAwLDB4YjMsMHgwMCwweDI0IH0sCisgIDE2LCAweGVlNzAsIDAsIHsweGMwLDB4MDgsMHhiMCwweDBlLDB4MmMsMHgwMCwweGIzLDB4OTgsMHgyMCwweDYwLDB4MDksMHgzMywweDAyLDB4MmMsMHgwMCwweGEzIH0sCisgIDE2LCAweGVlODAsIDAsIHsweGM4LDB4MjAsMHhjMCwweDBiLDB4MTAsMHgwMiwweDBjLDB4MDAsMHhiMywweDAwLDB4MmMsMHhmMCwweDBiLDB4MTAsMHgwMiwweDEyIH0sCisgIDE2LCAweGVlOTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGZlLDB4ODAsMHgzNiwweDgxIH0sCisgIDE2LCAweGVlYTAsIDAsIHsweDBiLDB4ZTAsMHgwMywweGE4LDB4MDAsMHhlYSwweDAwLDB4YjIsMHg4MCwweDA4LDB4YTAsMHgwMywweDY4LDB4MDAsMHhmZSwweDAwIH0sCisgIDE2LCAweGVlYjAsIDAsIHsweDM2LDB4YTAsMHgxZiwweGU4LDB4MTMsMHgzYiwweDgyLDB4Y2UsMHhlMCwweDIyLDB4ODAsMHg4ZSwweGEwLDB4MDMsMHgzOCwweDAwIH0sCisgIDE2LCAweGVlYzAsIDAsIHsweGJhLDB4MDAsMHgzZiwweGEyLDB4MGYsMHhhMCwweDAzLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVlZDAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgyMCwweDNhLDB4MTAsMHgwNywweDgwLDB4MDMsMHhjMSwweDAwLDB4ZjgsMHgwMCwweDM4IH0sCisgIDE2LCAweGVlZTAsIDAsIHsweDAwLDB4MmYsMHg4MCwweDAzLDB4YTAsMHgwMSwweGY4LDB4NDIsMHgzZSwweDA1LDB4MGUsMHg4MCwweDBiLDB4ZTAsMHg4MCwweGQ4IH0sCisgIDE2LCAweGVlZjAsIDAsIHsweDAwLDB4M2UsMHgwMCwweDBmLDB4ODQsMHgwMywweGUxLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODQsMHgwYiwweGQyIH0sCisgIDE2LCAweGVmMDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGM5LDB4MDAsMHgzYSwweDUwIH0sCisgIDE2LCAweGVmMTAsIDAsIHsweDhmLDB4OTAsMHg4MywweGE0LDB4MDIsMHhkMSwweDAwLDB4YjIsMHg0MCwweDRjLDB4OTAsMHgyMywweDI0LDB4MDgsMHhjOSwweDAxIH0sCisgIDE2LCAweGVmMjAsIDAsIHsweDNlLDB4NDAsMHgwYywweDkwLDB4MDMsMHgyNCwweDAwLDB4YzEsMHgwMCwweDMyLDB4NDAsMHgwZiwweDE0LDB4MGEsMHgyNSwweDIwIH0sCisgIDE2LCAweGVmMzAsIDAsIHsweGU5LDB4MDAsMHgzZSwweDQyLDB4MGYsMHg5MCwweDAzLDB4YzIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVmNDAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDBhLDB4ODksMHgwMCwweDIyLDB4NzAsMHgwYiwweDkwLDB4MTIsMHgyNSwweDgwLDB4YzksMHgwMCwweDIyIH0sCisgIDE2LCAweGVmNTAsIDAsIHsweDQwLDB4MGEsMHg5MCwweDAzLDB4NjQsMHgwMCwweDg5LDB4MjAsMHgyYywweDQwLDB4MGEsMHg5MCwweDBhLDB4MjQsMHgwMCwweDg5IH0sCisgIDE2LCAweGVmNjAsIDAsIHsweGMxLDB4MzIsMHg0MCwweDBiLDB4OTgsMHgwMiwweDA2LDB4MDAsMHg4OSwweDkwLDB4MmUsMHg0MCwweDBiLDB4OTQsMHgxMiwweGUwIH0sCisgIDE2LCAweGVmNzAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4MDQsMHgwMCwweDg5LDB4MDAsMHg2YSwweDQyIH0sCisgIDE2LCAweGVmODAsIDAsIHsweDBhLDB4MTAsMHgwMiwweGE0LDB4MDAsMHg4OSwweDAwLDB4YTIsMHg0MCwweDBhLDB4OTAsMHgwMiwweDI0LDB4MDAsMHgwOSwweDAwIH0sCisgIDE2LCAweGVmOTAsIDAsIHsweDJlLDB4NDAsMHg1OCwweDEwLDB4MDIsMHgyNCwweDAwLDB4ODksMHg4MCwweGFhLDB4NjAsMHgwYiwweDkwLDB4MDIsMHhhNCwweDA0IH0sCisgIDE2LCAweGVmYTAsIDAsIHsweGE5LDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5NCwweDAyLDB4YzYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVmYjAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4ODEsMHgwMCwweDYwLDB4NDgsMHgwYiwweDEwLDB4MDIsMHgwNCwweDgxLDB4ODEsMHgyMCwweDYwIH0sCisgIDE2LCAweGVmYzAsIDAsIHsweDQ4LDB4MGEsMHgxMiwweDAyLDB4NDQsMHg4OCwweDgxLDB4MDAsMHgwZSwweDU5LDB4MGEsMHgxNCwweDAyLDB4MDUsMHgwMCwweDgxIH0sCisgIDE2LCAweGVmZDAsIDAsIHsweGMwLDB4MjgsMHg1MCwweDQ5LDB4MzAsMHgwMiwweDhjLDB4ODQsMHgwMSwweDYwLDB4MmMsMHg1MCwweDBiLDB4MTAsMHgwMiwweGMyIH0sCisgIDE2LCAweGVmZTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGMwLDB4NTQsMHgyYSwweDAwIH0sCisgIDE2LCAweGVmZjAsIDAsIHsweDBlLDB4ODUsMHgwMywweGEwLDB4MDAsMHhjOCwweDUwLDB4MzIsMHgxNSwweDFlLDB4MDUsMHgyMiwweDIxLDB4NDIsMHhjOCwweDAwIH0sCisgIDE2LCAweGYwMDAsIDAsIHsweDNlLDB4MDAsMHgwYywweDgwLDB4MDMsMHgwMCwweDA0LDB4YzgsMHgwMCwweDNhLDB4MDAsMHg0ZiwweDg1LDB4MDMsMHhhMSwweDQwIH0sCisgIDE2LCAweGYwMTAsIDAsIHsweDY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYwMjAsIDAsIHsweDk4LDB4MWQsMHhlNCwweDQwLDB4ZmQsMHgwMywweDNlLDB4NDQsMHgwZiwweGQwLDB4MDMsMHhlNCwweDQ4LDB4ZTksMHgxMCwweDNlIH0sCisgIDE2LCAweGYwMzAsIDAsIHsweDQ1LDB4MGYsMHg5MSwweDEzLDB4ZTQsMHg0MCwweGZkLDB4MDAsMHgzZiwweDQ0LDB4MGYsMHhkMCwweDAzLDB4ZjQsMHgwMiwweGZkIH0sCisgIDE2LCAweGYwNDAsIDAsIHsweDQwLDB4MzMsMHg1MCwweDBmLDB4ZDQsMHgyMywweDc0LDB4NDAsMHhmOSwweDEwLDB4M2YsMHg0MCwweDBmLDB4NTQsMHgwMywweGU2IH0sCisgIDE2LCAweGYwNTAsIDAsIHsweDAyLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZTQsMHgwMCwweGY5LDB4MDEsMHgzMywweDZhIH0sCisgIDE2LCAweGYwNjAsIDAsIHsweDA5LDB4OTAsMHgwMywweGI2LDB4MzQsMHhmOSwweGM4LDB4MzIsMHg2NCwweDBjLDB4OWEsMHgwMywweGU2LDB4YTAsMHhkZCwweDAwIH0sCisgIDE2LCAweGYwNzAsIDAsIHsweDNjLDB4NzAsMHgwZiwweDkwLDB4MDMsMHhhNSwweDAwLDB4ODksMHg4MCwweDMzLDB4MzIsMHgwZiwweGQ4LDB4MTMsMHgzYywweDAwIH0sCisgIDE2LCAweGYwODAsIDAsIHsweGZkLDB4MDAsMHg3MCwweDUwLDB4MGYsMHhkMCwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYwOTAsIDAsIHsweDM4LDB4MTAsMHhlMiwweDgwLDB4YjgsMHhhOCwweDIyLDB4MTAsMHgwOCwweDg4LDB4MDIsMHgyMSwweDAwLDB4YjgsMHhjMCwweDIwIH0sCisgIDE2LCAweGYwYTAsIDAsIHsweDMwLDB4MGQsMHg4ZSwweDg3LDB4ODMsMHg4OCwweDg4LDB4MDAsMHgyZSwweDM0LDB4MGIsMHg4YSwweDgyLDB4MjIsMHg4MCwweGRjIH0sCisgIDE2LCAweGYwYjAsIDAsIHsweGUwLDB4MjIsMHgzOCwweDBiLDB4ODAsMHgwMiwweDIwLDB4MDAsMHhmOCwweGE4LDB4MmEsMHgyOCwweDBiLDB4ODAsMHgwMiwweDBlIH0sCisgIDE2LCAweGYwYzAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHgyMCwweGIxLDB4MDAsMHgyMCwweDQwIH0sCisgIDE2LCAweGYwZDAsIDAsIHsweDBhLDB4OTIsMHg5MiwweDg0LDB4MTEsMHhiMSwweDI0LDB4NjgsMHg1OCwweDA5LDB4MTEsMHgwMiwweGM0LDB4MjAsMHg5MSwweDAxIH0sCisgIDE2LCAweGYwZTAsIDAsIHsweDJjLDB4NDgsMHgxYiwweDUwLDB4MDIsMHg3NCwweDg0LDB4OTUsMHg0OCwweGFjLDB4NDgsMHgwYiwweDk0LDB4MDIsMHgwNCwweDA0IH0sCisgIDE2LCAweGYwZjAsIDAsIHsweGIxLDB4MDIsMHgyNCwweDQ4LDB4MGIsMHgxMCwweDAyLDB4MDIsMHgwNSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYxMDAsIDAsIHsweDE4LDB4MTEsMHhhNCwweDAwLDB4YjEsMHgyMCwweDIyLDB4NDAsMHgwYSwweDkwLDB4MDYsMHgyYywweDAxLDB4YjksMHgwMCwweDJhIH0sCisgIDE2LCAweGYxMTAsIDAsIHsweDQwLDB4MDksMHg5MCwweDAyLDB4YTQsMHgwMCwweDliLDB4MDgsMHgyZSwweDQ4LDB4MGIsMHgxMiwweDFhLDB4NzQsMHgwMCwweDk1IH0sCisgIDE2LCAweGYxMjAsIDAsIHsweDQ1LDB4MmUsMHg2MCwweDAzLDB4OTAsMHgwMiwweDI0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweDA2IH0sCisgIDE2LCAweGYxMzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGY5LDB4ODAsMHgzMCwweDQwIH0sCisgIDE2LCAweGYxNDAsIDAsIHsweDBlLDB4MTYsMHgwMywweGE0LDB4MDAsMHhiOSwweDA0LDB4MzIsMHg0MCwweDBkLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhkOSwweDQwIH0sCisgIDE2LCAweGYxNTAsIDAsIHsweDJlLDB4NDAsMHgxZiwweDk4LDB4MDMsMHhlNSwweDgwLDB4ZDksMHgwMCwweGFlLDB4NjAsMHgwNywweDEwLDB4MGIsMHgyNiwweDAxIH0sCisgIDE2LCAweGYxNjAsIDAsIHsweGI5LDB4MDAsMHhhNiwweDQwLDB4MGYsMHg5MCwweDBiLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYxNzAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwMCwweGJlLDB4NDAsMHhhYywweDkyLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweGI0IH0sCisgIDE2LCAweGYxODAsIDAsIHsweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGU5LDB4MDAsMHgzZSwweDYwLDB4MGYsMHg5MCwweDAzLDB4YTQsMHg4MCwweGY5IH0sCisgIDE2LCAweGYxOTAsIDAsIHsweDAwLDB4MzIsMHgwMCwweDBmLDB4OTAsMHg4MywweGU2LDB4ODUsMHhlMSwweDAwLDB4MzIsMHg0NCwweDBmLDB4MTAsMHgwMywweGNhIH0sCisgIDE2LCAweGYxYTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGY4LDB4MDAsMHgzMiwweDAwIH0sCisgIDE2LCAweGYxYjAsIDAsIHsweDBmLDB4ODAsMHgxMywweGUwLDB4OTQsMHhlMCwweDAwLDB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMywweDYwLDB4MDAsMHhjOCwweDAwIH0sCisgIDE2LCAweGYxYzAsIDAsIHsweDNlLDB4MDAsMHgwZCwweDgwLDB4NDMsMHgyMCwweDA4LDB4ZjgsMHgwMCwweDMyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMCwweDQwIH0sCisgIDE2LCAweGYxZDAsIDAsIHsweGY4LDB4MDAsMHgzMiwweDAwLDB4NGMsMHg4MCwweDIzLDB4Y2EsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYxZTAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAwLDB4YmEsMHgwMCwweDIzLDB4ODAsMHgwYiwweGEwLDB4MDIsMHhmYiwweDA0LDB4NmEsMHgwMCwweDIyIH0sCisgIDE2LCAweGYxZjAsIDAsIHsweDgwLDB4MGEsMHhhMCwweDAzLDB4NjgsMHgwYSwweDhlLDB4ODgsMHgzYSwweDgwLDB4MDgsMHhhMCwweDAyLDB4MDgsMHgwMCwweGJhIH0sCisgIDE2LCAweGYyMDAsIDAsIHsweDAwLDB4YjcsMHgyMiwweDAzLDB4ZTQsMHgwMiwweGZhLDB4MDAsMHg4YSwweDAwLDB4MjIsMHg4MCwweDA4LDB4ZTgsMHgwMiwweGNhIH0sCisgIDE2LCAweGYyMTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweGIzLDB4MDAsMHg2MCwweDQxIH0sCisgIDE2LCAweGYyMjAsIDAsIHsweDAzLDB4MzAsMHgwMiwweGNjLDB4NDEsMHhhMywweDAwLDB4MDQsMHhjMCwweDBiLDB4MzAsMHgwMiwweDJjLDB4MDAsMHhhMywweDgwIH0sCisgIDE2LCAweGYyMzAsIDAsIHsweDJjLDB4YzAsMHgwOSwweDM4LDB4MDIsMHgwYywweDAwLDB4YjMsMHgwMCwweGEwLDB4YzAsMHgwYiwweDM0LDB4MDIsMHhjYywweDgwIH0sCisgIDE2LCAweGYyNDAsIDAsIHsweGExLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgzOCwweDAyLDB4Y2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYyNTAsIDAsIHsweGEwLDB4MDEsMHgxYywweDQwLDB4YjcsMHgwMCwweDYxLDB4MDAsMHgwYiwweDcxLDB4MDIsMHhkYywweDAwLDB4YTMsMHgwMCwweDI1IH0sCisgIDE2LCAweGYyNjAsIDAsIHsweGM4LDB4MTksMHgzOCwweDAyLDB4NWMsMHg4MCwweGE3LDB4MDAsMHgwZiwweGU4LDB4MDksMHg2NCwweDIyLDB4MTAsMHgwMCwweGIzIH0sCisgIDE2LCAweGYyNzAsIDAsIHsweDAwLDB4MjUsMHhjOCwweDBiLDB4NjAsMHgwMiwweGYyLDB4MDAsMHg4NSwweDAxLDB4MjMsMHhlOCwweDA4LDB4NzAsMHg4MiwweGU4IH0sCisgIDE2LCAweGYyODAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgyMCwweGZmLDB4ODAsMHhhMSwweGEwIH0sCisgIDE2LCAweGYyOTAsIDAsIHsweDBmLDB4N2EsMHg0MiwweGRhLDB4MDAsMHhlNywweGU4LDB4MzUsMHhmMCwweDJmLDB4N2IsMHg2MiwweDFlLDB4ODIsMHhlNiwweDgwIH0sCisgIDE2LCAweGYyYTAsIDAsIHsweDFkLDB4ZTAsMHgwZCwweGY4LDB4MGIsMHgxZSwweDAwLDB4ZjcsMHg4MCwweDMxLDB4ZjAsMHgwZiwweDc4LDB4MDMsMHhkZSwweDBjIH0sCisgIDE2LCAweGYyYjAsIDAsIHsweGVmLDB4ODAsMHgzMSwweGY4LDB4MmMsMHg3OCwweDAzLDB4ZWEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYyYzAsIDAsIHsweDA4LDB4MWQsMHhhZCwweDg0LDB4ZmIsMHg2OCwweDNlLDB4MDAsMHgwZiwweGIwLDB4MDMsMHhlOCwweDAwLDB4ZmIsMHgwMCwweGZhIH0sCisgIDE2LCAweGYyZDAsIDAsIHsweGQ4LDB4MGUsMHhiNSwweDAzLDB4ZWQsMHgwMCwweGRiLDB4MDAsMHgzYSwweGMwLDB4OGUsMHhhMCwweDAzLDB4ZTAsMHgwMCwweGZiIH0sCisgIDE2LCAweGYyZTAsIDAsIHsweDQwLDB4M2UsMHhjMCwweDBiLDB4YjAsMHg0MywweGM0LDB4MDQsMHhlZiwweDAyLDB4YmYsMHhjMCwweDBmLDB4YjAsMHgwMywweGMyIH0sCisgIDE2LCAweGYyZjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHg0MiwweGM3LDB4MzgsMHgzMywweDY0IH0sCisgIDE2LCAweGYzMDAsIDAsIHsweDBlLDB4N2MsMHgwMywweDVlLDB4MDAsMHhkZiwweGEwLDB4MzcsMHhmMCwweDBkLDB4ZjgsMHgwMywweGZmLDB4MjAsMHhjZiwweDgxIH0sCisgIDE2LCAweGYzMTAsIDAsIHsweDMzLDB4ZTIsMHgwYywweGQ4LDB4MDMsMHhiZSwweDAwLDB4N2YsMHhjMCwweDMzLDB4ZTAsMHgwYywweGY5LDB4MDMsMHg3ZSwweDAwIH0sCisgIDE2LCAweGYzMjAsIDAsIHsweGZkLDB4ODAsMHgzZiwweGUwLDB4MGYsMHhmOCwweDAzLDB4YzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYzMzAsIDAsIHsweGE4LDB4MTEsMHg5YywweDAwLDB4ODcsMHhhMCwweDIxLDB4MTQsMHgwOCwweDcxLDB4MDIsMHgxNCwweDEwLDB4ZDcsMHgyMCwweDM1IH0sCisgIDE2LCAweGYzNDAsIDAsIHsweGMwLDB4MGMsMHg3MCwweDAzLDB4YmMsMHgwMCwweDg1LDB4MDgsMHgyYiwweGMwLDB4NGQsMHg0NiwweDAyLDB4ZDEsMHgwMCwweGI3IH0sCisgIDE2LCAweGYzNTAsIDAsIHsweDAwLDB4MjEsMHhjMCwweDA4LDB4NjAsMHgwMiwweDA4LDB4ODAsMHhmNSwweDIwLDB4M2QsMHhjYSwweDBmLDB4NTQsMHgwMywweGVhIH0sCisgIDE2LCAweGYzNjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgxMSwweDhmLDB4MDEsMHgyMCwweDg0IH0sCisgIDE2LCAweGYzNzAsIDAsIHsweDFhLDB4ZjAsMHgwMiwweDE4LDB4MDAsMHhhNywweDM0LDB4NjUsMHhjMCwweDA5LDB4NzEsMHgwMiwweGRjLDB4MDAsMHg4ZSwweDAwIH0sCisgIDE2LCAweGYzODAsIDAsIHsweDI5LDB4YzAsMHgwOCwweDUwLDB4MDYsMHg5YywweDAwLDB4YmYsMHg4OCwweDJkLDB4YzQsMHgwYSwweDYwLDB4MjYsMHg1OCwweDI0IH0sCisgIDE2LCAweGYzOTAsIDAsIHsweDk3LDB4MDAsMHg2ZCwweGMwLDB4OWIsMHg3MCwweDAyLDB4YzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYzYTAsIDAsIHsweDIwLDB4MTQsMHhjYywweDAwLDB4OGIsMHg0MCwweDIwLDB4MDAsMHgxOCwweDMwLDB4MDIsMHgwMCwweDAwLDB4YmIsMHgwMiwweDI0IH0sCisgIDE2LCAweGYzYjAsIDAsIHsweGMwLDB4MDgsMHgzMCwweDIwLDB4Y2MsMHgwMCwweDgxLDB4YzAsMHgyOCwweGMwLDB4MGIsMHgwNCwweDgyLDB4ZTAsMHgxMCwweGJiIH0sCisgIDE2LCAweGYzYzAsIDAsIHsweGEwLDB4MmMsMHhlMCwweDBhLDB4MjAsMHgwNiwweDAwLDB4MDAsMHhiMywweDAwLDB4MjgsMHhjMCwweDBhLDB4MTAsMHgwMiwweDg4IH0sCisgIDE2LCAweGYzZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmMsMHgwMCwweGNmLDB4MTAsMHgzMiwweDAwIH0sCisgIDE2LCAweGYzZTAsIDAsIHsweDBlLDB4ZjAsMHgwYiwweDI0LDB4MDAsMHhlZiwweDAwLDB4MzcsMHhjMCwweDBkLDB4ZjAsMHgwMywweGZjLDB4MDYsMHhjMSwweDUwIH0sCisgIDE2LCAweGYzZjAsIDAsIHsweDNiLDB4YzAsMHgwYywweGI0LDB4MDMsMHhhYywweDAwLDB4ZjgsMHhjMCwweGJlLDB4YzgsMHgyZSwweGIwLDB4MDMsMHg2ZSwweDAxIH0sCisgIDE2LCAweGY0MDAsIDAsIHsweGZiLDB4MDAsMHgyZCwweGMwLDB4NGIsMHg5MCwweDAyLDB4ZWEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY0MTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDA0LDB4ZmIsMHgwMCwweDNlLDB4MDAsMHgwZiwweGIwLDB4MDMsMHhhZCwweDAwLDB4OWIsMHgwMCwweDNlIH0sCisgIDE2LCAweGY0MjAsIDAsIHsweGMwLDB4MGYsMHgzMCwweDAzLDB4YWMsMHgwMCwweGY4LDB4MDAsMHgyZSwweGMwLDB4MDUsMHhiNCwweDAzLDB4ZWQsMHgwMCwweGY4IH0sCisgIDE2LCAweGY0MzAsIDAsIHsweDQwLDB4MzIsMHhjMCwweDA5LDB4MDAsMHgwMywweGUwLDB4OTEsMHhlMywweDAwLDB4M2UsMHhjMCwweDBmLDB4OTAsMHgxMSwweGUwIH0sCisgIDE2LCAweGY0NDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZWMsMHgwMCwweGVmLDB4MDAsMHgzMywweDIwIH0sCisgIDE2LCAweGY0NTAsIDAsIHsweDRmLDB4ZjAsMHgwMywweGI0LDB4MDAsMHhlZiwweDAzLDB4M2EsMHhjMCwweDBmLDB4ZjAsMHgwMywweDNjLDB4MDAsMHhkYywweDAwIH0sCisgIDE2LCAweGY0NjAsIDAsIHsweDMxLDB4YzAsMHg4ZCwweGY4LDB4MDMsMHhmZSwweDA0LDB4Y2YsMHgwMCwweDMyLDB4YzgsMHgwYywweGYwLDB4MGIsMHgxYywweDAwIH0sCisgIDE2LCAweGY0NzAsIDAsIHsweGNmLDB4OTMsMHgzMywweGMwLDB4OGMsMHg0MCwweDAyLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY0ODAsIDAsIHsweDgxLDB4MDQsMHg2YywweDAwLDB4YmIsMHgwMCwweGEyLDB4MDQsMHgwYiwweDMwLDB4MDIsMHgwZSwweDAwLDB4YWIsMHgwMCwweDJhIH0sCisgIDE2LCAweGY0OTAsIDAsIHsweGMwLDB4MDksMHhiMCwweDAzLDB4NmMsMHgwOCwweGE4LDB4YzAsMHgzNiwweGMwLDB4MDgsMHhiYywweDAyLDB4ZWYsMHgwMiwweGFiIH0sCisgIDE2LCAweGY0YTAsIDAsIHsweGQwLDB4MjAsMHhlMCwweDA4LDB4YjgsMHgyMiwweDI2LDB4MTAsMHg4YiwweDAwLDB4MjIsMHhjMCwweDIwLDB4OWMsMHgwMiwweDIwIH0sCisgIDE2LCAweGY0YjAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweGJiLDB4MDAsMHgyNiwweDAwIH0sCisgIDE2LCAweGY0YzAsIDAsIHsweDBhLDB4YjAsMHgwMiwweGEyLDB4MDgsMHhhYiwweDAwLDB4NmEsMHhjMCwweDBiLDB4YjAsMHgwYSwweDBjLDB4MDAsMHg4YiwweDgwIH0sCisgIDE2LCAweGY0ZDAsIDAsIHsweDIyLDB4YzAsMHgwOSwweGIxLDB4MDIsMHhlYywweDQwLDB4ODgsMHgwOCwweDIyLDB4YzAsMHgwOCwweGI4LDB4MDIsMHgyNiwweDAwIH0sCisgIDE2LCAweGY0ZTAsIDAsIHsweDhiLDB4MDAsMHgyMiwweGMwLDB4MDgsMHg5OCwweDAyLDB4YTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY0ZjAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAwLDB4YjMsMHgwMCwweDI0LDB4MDAsMHgwYiwweGIwLDB4MDIsMHgwMCwweDAxLDB4ODMsMHgwMCwweDIwIH0sCisgIDE2LCAweGY1MDAsIDAsIHsweGMwLDB4MDksMHgzMCwweDAyLDB4NGMsMHgwMCwweDAwLDB4MDQsMHgyNCwweGMwLDB4MDgsMHgzMCwweDA2LDB4NGMsMHgwMCwweDgwIH0sCisgIDE2LCAweGY1MTAsIDAsIHsweDAwLDB4MmMsMHhjMCwweDA4LDB4MDAsMHgwMiwweDAwLDB4NDEsMHg4MywweDAwLDB4YTIsMHhjMCwweDA4LDB4MTAsMHgwYSwweDgyIH0sCisgIDE2LCAweGY1MjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4N2MsMHgwMCwweGVmLDB4MDgsMHgyNiwweDAwIH0sCisgIDE2LCAweGY1MzAsIDAsIHsweDBlLDB4ZjAsMHgwMiwweGEwLDB4MDAsMHhlNywweDAwLDB4M2IsMHhjMCwweDBmLDB4ZjUsMHg0MywweDNjLDB4MDIsMHhkYSwweDAwIH0sCisgIDE2LCAweGY1NDAsIDAsIHsweDMyLDB4YzAsMHgwZCwweGIwLDB4MDMsMHhlYywweDAwLDB4Y2IsMHgwMCwweGIyLDB4YzAsMHgwYywweGEwLDB4MDMsMHgyOCwweDEwIH0sCisgIDE2LCAweGY1NTAsIDAsIHsweGNiLDB4MDAsMHgzMiwweGMwLDB4MGMsMHg4MCwweDAzLDB4ODAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY1NjAsIDAsIHsweGEwLDB4MGQsMHhmYywweDAwLDB4ZmIsMHgwMCwweDNiLDB4MDAsMHgwZiwweGYwLDB4MDMsMHhmMCwweDAwLDB4ZmYsMHgwMiwweDNmIH0sCisgIDE2LCAweGY1NzAsIDAsIHsweGMwLDB4MGQsMHhmMiwweDAzLDB4YmMsMHgwMCwweGY0LDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGY3IH0sCisgIDE2LCAweGY1ODAsIDAsIHsweDAwLDB4MzMsMHhjMCwweDBmLDB4NjAsMHgwMywweGYwLDB4ODgsMHhmZiwweDAwLDB4M2YsMHhjMCwweDRmLDB4ZDAsMHgwMywweDY4IH0sCisgIDE2LCAweGY1OTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHg0MCwweGZjLDB4MzEsMHgzYiwweDA4IH0sCisgIDE2LCAweGY1YTAsIDAsIHsweDRmLDB4ZjksMHg0MywweGVmLDB4MDAsMHhkZiwweDMwLDB4MzIsMHgyMSwweDBmLDB4OTQsMHgwNywweDdkLDB4ODAsMHhlZiwweDM4IH0sCisgIDE2LCAweGY1YjAsIDAsIHsweDMyLDB4MDksMHgxYywweDM4LDB4MDMsMHhmMiwweDIxLDB4ZmQsMHgwMCwweDMzLDB4YzQsMHgwYywweGYwLDB4MDIsMHhmYywweDAwIH0sCisgIDE2LCAweGY1YzAsIDAsIHsweGRmLDB4MDAsMHgzMywweGMwLDB4MGYsMHhmMCwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY1ZDAsIDAsIHsweDgwLDB4MTAsMHhlYywweDg4LDB4OGIsMHg2MCwweDIyLDB4ZTUsMHgwZSwweGIyLDB4MjIsMHhlYywweDgwLDB4YWYsMHgxMSwweDJhIH0sCisgIDE2LCAweGY1ZTAsIDAsIHsweDIwLDB4MGIsMHhiMSwweDEzLDB4YWMsMHg0OCwweDhiLDB4NDUsMHgzNCwweGNjLDB4NDgsMHhiMCwweDAyLDB4NmIsMHgwMCwweGJhIH0sCisgIDE2LCAweGY1ZjAsIDAsIHsweDgyLDB4MzYsMHgwMCwweDA4LDB4ODgsMHgyMiwweGMwLDB4MDQsMHg4OCwweDAwLDB4YTIsMHgwOCwweDhiLDB4ODgsMHg2MiwweDIwIH0sCisgIDE2LCAweGY2MDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwMCwweGExLDB4MzAsMHgyOCwweDAwIH0sCisgIDE2LCAweGY2MTAsIDAsIHsweDBiLDB4MzIsMHgwMiwweGNjLDB4MDAsMHhhMywweDIyLDB4MmMsMHgwMCwweDhiLDB4MTIsMHgwNiwweGM4LDB4ODAsMHhhMywweDAwIH0sCisgIDE2LCAweGY2MjAsIDAsIHsweDIwLDB4MDIsMHhjYSwweDMwLDB4MDYsMHhjNCwweDAxLDB4YjEsMHgwMCwweDY4LDB4ODAsMHgwOSwweDIwLDB4MDIsMHg4OCwweDAwIH0sCisgIDE2LCAweGY2MzAsIDAsIHsweDgzLDB4MDAsMHgyMCwweGMyLDB4MGIsMHgwMCwweDBhLDB4YTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY2NDAsIDAsIHsweGMwLDB4MTUsMHhhYywweDAwLDB4OGIsMHg2MSwweDYyLDB4YzAsMHgwYiwweGIyLDB4MDIsMHhlOCwweDAwLDB4YWIsMHgwMiwweDJhIH0sCisgIDE2LCAweGY2NTAsIDAsIHsweDYxLDB4MWIsMHg5MCwweDAyLDB4YTgsMHgwMCwweGFiLDB4MDAsMHgyMCwweGMwLDB4MGEsMHhiMCwweDAyLDB4NmMsMHgwNCwweGJhIH0sCisgIDE2LCAweGY2NjAsIDAsIHsweDAwLDB4MmUsMHg0MCwweDg5LDB4OTAsMHgwMiwweGU2LDB4MDgsMHg5OCwweDAwLDB4MjIsMHgwMCwweDBiLDB4YjAsMHgwMiwweGIwIH0sCisgIDE2LCAweGY2NzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWUsMHgwMCwweGY4LDB4MDEsMHgzYSwweDA0IH0sCisgIDE2LCAweGY2ODAsIDAsIHsweDBmLDB4YWMsMHgwMywweGVjLDB4OTAsMHhmYiwweDAyLDB4M2UsMHhlMCwweDBiLDB4OTAsMHg0MiwweDY3LDB4ODAsMHhhOCwweGM0IH0sCisgIDE2LCAweGY2OTAsIDAsIHsweDIyLDB4NDgsMHgyMiwweDg2LDB4MDMsMHhlMSwweDQwLDB4YjgsMHgwMiwweDJhLDB4NDAsMHgyOSwweDkwLDB4MDMsMHhlYywweDAyIH0sCisgIDE2LCAweGY2YTAsIDAsIHsweGM5LDB4NDgsMHgzMiwweDQwLDB4MGYsMHhiMCwweDEzLDB4OTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY2YjAsIDAsIHsweGUwLDB4MDEsMHhhYywweDQwLDB4ZmIsMHgwMCwweDFmLDB4YTIsMHgwZSwweGY4LDB4ODIsMHhmYywweDA4LDB4ZmYsMHgwMCwweDNmIH0sCisgIDE2LCAweGY2YzAsIDAsIHsweGMwLDB4MGYsMHhmYSwweDQzLDB4OTYsMHg0NCwweGQ0LDB4OTEsMHgzZiwweDQwLDB4MGQsMHhjMCwweDAzLDB4ZmEsMHgwMCwweGZmIH0sCisgIDE2LCAweGY2ZDAsIDAsIHsweDA4LDB4MjUsMHg4MCwweDBlLDB4ZTAsMHgwMywweGQwLDB4MDAsMHhlYSwweDAwLDB4M2YsMHg4MCwweDBmLDB4YzAsMHgwMywweDc4IH0sCisgIDE2LCAweGY2ZTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGUxLDB4MjAsMHgzYSwweDUwIH0sCisgIDE2LCAweGY2ZjAsIDAsIHsweDBmLDB4OTAsMHgwMywweDJjLDB4MDAsMHhlYiwweDA4LDB4NzYsMHgwNSwweDBlLDB4YjAsMHgyNywweGUwLDB4MTAsMHhlYSwweDQwIH0sCisgIDE2LCAweGY3MDAsIDAsIHsweGIyLDB4YzAsMHgwYywweGE0LDB4NDMsMHgyNSwweDAwLDB4ZjgsMHgwMCwweDMyLDB4MDgsMHgwZiwweDgwLDB4NDMsMHhlOCwweDAwIH0sCisgIDE2LCAweGY3MTAsIDAsIHsweGQxLDB4MDgsMHhlZSwweDQwLDB4MGYsMHgwMCwweDAzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY3MjAsIDAsIHsweGM4LDB4MDUsMHgyYywweDAwLDB4OGIsMHgwMCwweDIyLDB4ZDAsMHgwYiwweDkwLDB4ODIsMHgyYywweDAwLDB4ODcsMHg0MCwweDIyIH0sCisgIDE2LCAweGY3MzAsIDAsIHsweDYwLDB4OGIsMHhiMCwweDAyLDB4ZTAsMHgwMCwweGQ4LDB4NTAsMHgyMiwweGQwLDB4MGMsMHhhMCwweDAzLDB4NmMsMHgwMCwweGIzIH0sCisgIDE2LCAweGY3NDAsIDAsIHsweGM4LDB4M2UsMHhkMCwweDBiLDB4YjgsMHgwMiwweDI1LDB4MDgsMHg4YSwweDIwLDB4MmEsMHg4MCwweDhiLDB4YjgsMHg4MiwweGYyIH0sCisgIDE2LCAweGY3NTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NjQsMHgwMCwweGEwLDB4YzAsMHgyNCwweGMwIH0sCisgIDE2LCAweGY3NjAsIDAsIHsweDA5LDB4MzgsMHgwMiwweDJjLDB4MDAsMHg4MywweDAzLDB4MjAsMHgwMCwweDEwLDB4MzAsMHgyMiwweGNjLDB4MDAsMHg4MywweDAwIH0sCisgIDE2LCAweGY3NzAsIDAsIHsweDYwLDB4MDgsMHgwYSwweDMwLDB4ODIsMHg0YywweDAwLDB4YjEsMHhjMCwweDAwLDB4ZDEsMHgwYiwweDM4LDB4MDIsMHg4NCwweDgwIH0sCisgIDE2LCAweGY3ODAsIDAsIHsweDgyLDB4MDEsMHgyMCwweDgwLDB4MDMsMHgzOCwweDAyLDB4ZjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY3OTAsIDAsIHsweDIwLDB4MDEsMHgxNiwweDQwLDB4ODQsMHg5OCwweDI1LDB4ZTAsMHgwYiwweDdhLDB4MDIsMHhmYSwweDQ4LDB4YTMsMHgyMCwweDYxIH0sCisgIDE2LCAweGY3YTAsIDAsIHsweDI0LDB4MGIsMHg3OSwweDAwLDB4Y2UsMHhjMCwweDkzLDB4YTQsMHgyMSwweGE2LDB4MGIsMHg3OCwweDEyLDB4ZGUsMHg4MCwweGI2IH0sCisgIDE2LCAweGY3YjAsIDAsIHsweDgwLDB4MmQsMHgyNCwweDBiLDB4NGIsMHgwMiwweDFhLDB4NDAsMHg4NSwweDgxLDB4MjEsMHg2MCwweDBiLDB4NDgsMHgwMiwweGM4IH0sCisgIDE2LCAweGY3YzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweGUyLDB4YTAsMHhiNCwweGZlIH0sCisgIDE2LCAweGY3ZDAsIDAsIHsweDRiLDB4YjgsMHgwYiwweDBlLDB4MDAsMHhhMywweGIwLDB4MjQsMHhhOCwweDBlLDB4MWIsMHgwMiwweGNlLDB4YzEsMHhjMywweGMwIH0sCisgIDE2LCAweGY3ZTAsIDAsIHsweDMwLDB4NjgsMHgyZSwweDNhLDB4NDcsMHg0ZSwweDgwLDB4ZjEsMHg4MCwweDMwLDB4ODAsMHgwZiwweDIyLDB4ODMsMHg4MCwweDAwIH0sCisgIDE2LCAweGY3ZjAsIDAsIHsweGMyLDB4MTAsMHgzOCwweDgwLDB4NGYsMHgwMCwweDA3LDB4ZDIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY4MDAsIDAsIHsweDQwLDB4MGQsMHhiYywweDEwLDB4ZmUsMHgwNCwweDNiLDB4YzEsMHgwNywweGYwLDB4MDMsMHgxYywweGM4LDB4ZGYsMHgyYSwweDBiIH0sCisgIDE2LCAweGY4MTAsIDAsIHsweGM0LDB4OGYsMHhkMSwweDQzLDB4ZjgsMHgwMiwweDdmLDB4MDAsMHgzZiwweGMwLDB4MGMsMHhmMSwweDBmLDB4M2MsMHgwMCwweGYyIH0sCisgIDE2LCAweGY4MjAsIDAsIHsweDExLDB4M2YsMHg0MSwweDFmLDB4NTIsMHgwMywweGJjLDB4MGUsMHhlZCwweDE0LDB4M2YsMHg0MCwweDBmLDB4ZjgsMHgwMywweGQwIH0sCisgIDE2LCAweGY4MzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZTQsMHgwMCwweGU5LDB4MDAsMHgzMiwweDgwIH0sCisgIDE2LCAweGY4NDAsIDAsIHsweDBlLDB4YmUsMHg0YiwweDZmLDB4MDAsMHhjYiwweDgyLDB4N2EsMHhjMCwweDJjLDB4YjAsMHgwMywweDJjLDB4MDAsMHhjOSwweDAwIH0sCisgIDE2LCAweGY4NTAsIDAsIHsweDMyLDB4MDAsMHgyYywweDEwLDB4MDMsMHgyYywweDA4LDB4YzAsMHgwMCwweDI2LDB4NDAsMHg2YywweDkwLDB4MTMsMHgyNCwweDEyIH0sCisgIDE2LCAweGY4NjAsIDAsIHsweGM4LDB4MDEsMHgzZSwweDAwLDB4MGYsMHhiOCwweDBiLDB4MmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY4NzAsIDAsIHsweDQ4LDB4MTEsMHg5NCwweDAwLDB4OGQsMHgwMCwweDIxLDB4ODAsMHgwYiwweDcwLDB4ODIsMHgzYywweDIwLDB4ODMsMHgzMiwweDI5IH0sCisgIDE2LCAweGY4ODAsIDAsIHsweGMwLDB4MDgsMHhmMCwweDIwLDB4MTQsMHgwMCwweDgwLDB4MDAsMHgyMywweDAwLDB4MDgsMHg1MCwweDA2LDB4OWMsMHgwNCwweGQ3IH0sCisgIDE2LCAweGY4OTAsIDAsIHsweDAyLDB4MjgsMHg4MCwweDA4LDB4NjAsMHgwMiwweDA4LDB4MTAsMHg4NywweDAwLDB4MmQsMHhjMCwweDBiLDB4NDAsMHgwMiwweDEyIH0sCisgIDE2LCAweGY4YTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgwMCwweGE3LDB4ODAsMHgyMSwweGUwIH0sCisgIDE2LCAweGY4YjAsIDAsIHsweDBiLDB4NWMsMHgxMiwweDFlLDB4MDQsMHg4NywweDgyLDB4MGQsMHhhMCwweDA5LDB4NzgsMHgxNiwweDAyLDB4MDAsMHhiNCwweDgwIH0sCisgIDE2LCAweGY4YzAsIDAsIHsweDI1LDB4ZTAsMHgwYiwweDc4LDB4MDIsMHg5ZSwweDAwLDB4ODQsMHg4MCwweDIxLDB4MjIsMHgwOCwweDA4LDB4MDIsMHgxMiwweDAxIH0sCisgIDE2LCAweGY4ZDAsIDAsIHsweDg0LDB4YzAsMHgyZCwweDIwLDB4MGIsMHgwOCwweDAyLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY4ZTAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDAwLDB4ODMsMHg0MiwweGEwLDB4ZDgsMHgwYiwweDM0LDB4ODIsMHgwYywweDAwLDB4YTMsMHgwMiwweDIwIH0sCisgIDE2LCAweGY4ZjAsIDAsIHsweGUwLDB4MDgsMHhiMCwweDAyLDB4MGMsMHg4OCwweGIzLDB4MjEsMHgyNCwweGQ4LDB4MGIsMHgzZSwweDAyLDB4OGMsMHgwMCwweDkzIH0sCisgIDE2LCAweGY5MDAsIDAsIHsweDA4LDB4MjgsMHhjMCwweDA4LDB4MzgsMHgwMiwweDJjLDB4MDUsMHg4YiwweDAxLDB4MmMsMHhlMCwweDBiLDB4MzAsMHgwMiwweDEyIH0sCisgIDE2LCAweGY5MTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGVlLDB4MDAsMHgzMywweDkwIH0sCisgIDE2LCAweGY5MjAsIDAsIHsweDBmLDB4YTAsMHgwYiwweDY4LDB4MDAsMHhjYSwweDAxLDB4N2YsMHhhOCwweDBjLDB4YWEsMHgwMywweDNhLDB4MTIsMHhmZSwweGUyIH0sCisgIDE2LCAweGY5MzAsIDAsIHsweDM3LDB4YjAsMHgwZiwweGVlLDB4MDIsMHgxOCwweDAwLDB4Y2EsMHg0MCwweDM2LDB4YTAsMHgwOCwweGEwLDB4OGIsMHgyOCwweDAwIH0sCisgIDE2LCAweGY5NDAsIDAsIHsweGNhLDB4ODEsMHgyZSwweGEwLDB4MGYsMHhlMCwweDAzLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY5NTAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgwOCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhhMiwweDAyLDB4ZDgsMHg0MCwweDNlIH0sCisgIDE2LCAweGY5NjAsIDAsIHsweDA4LDB4MGYsMHg4MCwweDEzLDB4ZTAsMHg0MCwweDQ4LDB4NDAsMHhiOCwweDA0LDB4MDgsMHg4NCwweDAzLDB4NjEsMHgwMCwweGZjIH0sCisgIDE2LCAweGY5NzAsIDAsIHsweDAwLDB4M2YsMHgwMCwweDRmLDB4YzAsMHgwMywweGYxLDB4MDAsMHhmYywweDAwLDB4M2YsMHgwNCwweDBmLDB4YzAsMHgwMywweGQyIH0sCisgIDE2LCAweGY5ODAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4YzQsMHgwMCwweGY5LDB4MDAsMHgzMCwweDUwIH0sCisgIDE2LCAweGY5OTAsIDAsIHsweDRjLDB4YjksMHgwMywweDZjLDB4MTgsMHhmOSwweDAwLDB4MzYsMHg0MCwweDBlLDB4OWMsMHgyMywweGE0LDB4MDIsMHg0MSwweDAwIH0sCisgIDE2LCAweGY5YTAsIDAsIHsweGIyLDB4NDQsMHgwZSwweDlhLDB4MDMsMHhhNiwweDgwLDB4YzksMHgwMCwweDNhLDB4NjAsMHgwYSwweDkwLDB4MDMsMHhhNCwweDgwIH0sCisgIDE2LCAweGY5YjAsIDAsIHsweGM5LDB4MDAsMHgzNCwweDQwLDB4MGMsMHg5MCwweDAzLDB4YzIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY5YzAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHg0MCwweDIyLDB4NzgsMHgwOCwweDk0LDB4MDIsMHhlNCwweDEwLDB4YjksMHgwMCwweDNjIH0sCisgIDE2LCAweGY5ZDAsIDAsIHsweDYyLDB4MTgsMHg5NCwweDgyLDB4YTQsMHgwMCwweDg5LDB4YzgsMHgyMiwweDcwLDB4NDgsMHgxZSwweDAxLDB4NjcsMHg4MCwweGQxIH0sCisgIDE2LCAweGY5ZTAsIDAsIHsweDAwLDB4YmMsMHg0MiwweDA4LDB4MTAsMHgwMiwweDI1LDB4MjAsMHg4OSwweDAyLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweGUwIH0sCisgIDE2LCAweGY5ZjAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweGIxLDB4MjgsMHgyMiwweDQwIH0sCisgIDE2LCAweGZhMDAsIDAsIHsweDA4LDB4YjAsMHg4MiwweDY0LDB4MDQsMHgzOSwweDQxLDB4MmUsMHg0OCwweDBhLDB4OTAsMHgwMiwweDA0LDB4MTgsMHhhOSwweDIwIH0sCisgIDE2LCAweGZhMTAsIDAsIHsweDIyLDB4NDIsMHg0YSwweDkwLDB4MDIsMHgyYywweDA0LDB4ODksMHgwNCwweDJiLDB4NDgsMHgwMiwweGQwLDB4MDIsMHhiNCwweDBhIH0sCisgIDE2LCAweGZhMjAsIDAsIHsweDhkLDB4ODAsMHgyMywweGMwLDB4NDgsMHhkMCwweDAyLDB4YzYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZhMzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4ODEsMHgyMCwweGEwLDB4NDgsMHgyOCwweDEwLDB4MDIsMHhjNCwweDAwLDB4YjEsMHgyNCwweDJhIH0sCisgIDE2LCAweGZhNDAsIDAsIHsweDQwLDB4MDgsMHgxMiwweDQyLDB4ODUsMHg4MCwweGExLDB4MjAsMHhhMCwweDQ4LDB4MDgsMHg5MCwweDAyLDB4NDQsMHgwMCwweDk1IH0sCisgIDE2LCAweGZhNTAsIDAsIHsweDJjLDB4MmQsMHg1YSwweDBhLDB4NzIsMHg4MiwweDE0LDB4YTAsMHg4NSwweGE4LDB4MjEsMHg0YSwweDA4LDB4NTIsMHg4MiwweGMyIH0sCisgIDE2LCAweGZhNjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NDEsMHg0MCwweGY4LDB4NTAsMHgzMiwweDAwIH0sCisgIDE2LCAweGZhNzAsIDAsIHsweDhjLDB4MDUsMHgwMywweDYxLDB4NDAsMHhmOCwweDUxLDB4MmUsMHgwMCwweDBhLDB4ODUsMHgwMiwweDIwLDB4MDAsMHhlOCwweDUwIH0sCisgIDE2LCAweGZhODAsIDAsIHsweDMyLDB4MTQsMHgwNiwweDg1LDB4MTcsMHhhMCwweDAwLDB4YzgsMHgyMCwweDNhLDB4MDgsMHgwZSwweDgyLDB4MDMsMHhhMCwweDgwIH0sCisgIDE2LCAweGZhOTAsIDAsIHsweGM4LDB4MjAsMHgzMiwweDA4LDB4MmMsMHhjMiwweDAzLDB4ZWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZhYTAsIDAsIHsweDk4LDB4MTksMHhmNCwweDQwLDB4ZmYsMHgxMCwweDNmLDB4NDQsMHgwYiwweGIwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgxMCwweDNkIH0sCisgIDE2LCAweGZhYjAsIDAsIHsweDQwLDB4MGYsMHhkMSwweDAzLDB4ZjQsMHg1OCwweDlkLDB4MTAsMHgzZiwweDQ0LDB4NGYsMHhkMCwweDAzLDB4ZDUsMHgwMCwweGY5IH0sCisgIDE2LCAweGZhYzAsIDAsIHsweDAwLDB4M2UsMHg0MCwweDhkLDB4OTAsMHgwMywweGU0LDB4YjgsMHhmOSwweDI4LDB4YmEsMHg2YSwweDBmLDB4OTAsMHgwMywweGU2IH0sCisgIDE2LCAweGZhZDAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4ZTcsMHgwMCwweGZkLDB4ODgsMHgzZSwweDYwIH0sCisgIDE2LCAweGZhZTAsIDAsIHsweDhmLDB4ZDAsMHgwMywweDI0LDB4MDEsMHhkZCwweDgwLDB4NzMsMHg0MCwweDBmLDB4ZDgsMHgwMywweGE2LDB4MDQsMHhjZCwweGEyIH0sCisgIDE2LCAweGZhZjAsIDAsIHsweDMzLDB4NzgsMHgxYywweGQwLDB4MDMsMHgzNCwweDAxLDB4ZjUsMHg4OCwweDNiLDB4NjgsMHgwYywweGRhLDB4NDcsMHgzNywweDgwIH0sCisgIDE2LCAweGZiMDAsIDAsIHsweGNkLDB4ODgsMHgzMiwweDYyLDB4MGMsMHhkYSwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZiMTAsIDAsIHsweDM4LDB4MTAsMHhlMywweDgwLDB4YjgsMHg4MCwweDJlLDB4MTQsMHgwYiwweDBhLDB4ODIsMHgyMiwweDgwLDB4YjgsMHhmOCwweGEyIH0sCisgIDE2LCAweGZiMjAsIDAsIHsweDAwLDB4MGIsMHg4ZiwweGEzLDB4ODMsMHhlMCwweDg4LDB4ZWIsMHgyMiwweGE5LDB4MDgsMHg4OCwweDEyLDB4YTAsMHgwNSwweGI4IH0sCisgIDE2LCAweGZiMzAsIDAsIHsweDAwLDB4MmEsMHhhYSwweDg4LDB4ODAsMHgxMywweDYyLDB4ODIsMHg4OCwweDgwLDB4MjIsMHgyOCwweDg4LDB4YTQsMHgwMiwweDBlIH0sCisgIDE2LCAweGZiNDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzUsMHgwMCwweGIxLDB4MGEsMHgyYywweDQxIH0sCisgIDE2LCAweGZiNTAsIDAsIHsweDBiLDB4MTAsMHgwNiwweDA0LDB4MjAsMHhhMSwweDAwLDB4MDAsMHg0MCwweDhiLDB4MTAsMHg0NiwweGM0LDB4MDEsMHg5MSwweDExIH0sCisgIDE2LCAweGZiNjAsIDAsIHsweDI0LDB4NTgsMHg2OCwweDkwLDB4YzIsMHgwNCwweDAwLDB4YjEsMHgwMCwweGE4LDB4NTAsMHgwOSwweDE0LDB4MGEsMHgwNSwweDk1IH0sCisgIDE2LCAweGZiNzAsIDAsIHsweGExLDB4MDgsMHhhMCwweDQyLDB4MjgsMHgxMSwweDBhLDB4MDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZiODAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDE4LDB4YjksMHgyMCwweDJlLDB4NTAsMHgwYiwweDkwLDB4MDYsMHgyNCwweDA5LDB4YjksMHgwMCwweDIyIH0sCisgIDE2LCAweGZiOTAsIDAsIHsweDQwLDB4OGIsMHg5MSwweDAyLDB4ODQsMHgwMCwweDk5LDB4NjQsMHgyNCwweDQwLDB4NTgsMHg5MCwweDAyLDB4YTQsMHgyMCwweGJiIH0sCisgIDE2LCAweGZiYTAsIDAsIHsweDAwLDB4MmEsMHg0MCwweDA5LDB4YjAsMHgwMiwweDA1LDB4MDEsMHhhOSwweDAwLDB4MjIsMHg0MCwweDg4LDB4OTIsMHgwMiwweDA2IH0sCisgIDE2LCAweGZiYjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTYsMHgwMCwweGY5LDB4NDAsMHgzZSwweDQwIH0sCisgIDE2LCAweGZiYzAsIDAsIHsweDRmLDB4OTgsMHgwYiwweDI0LDB4ODAsMHhkOSwweDAwLDB4MjIsMHg3MiwweDBiLDB4OTgsMHgwMywweGU0LDB4ODQsMHhkOSwweDAwIH0sCisgIDE2LCAweGZiZDAsIDAsIHsweGI2LDB4NzAsMHgwOCwweDk5LDB4MDIsMHgyNCwweDAwLDB4YjksMHgwMCwweDJhLDB4NDAsMHgwZCwweDk0LDB4YzIsMHgyNSwweDAwIH0sCisgIDE2LCAweGZiZTAsIDAsIHsweGE5LDB4MDAsMHgyMiwweDQwLDB4MGMsMHg5NCwweDAzLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZiZjAsIDAsIHsweDI4LDB4MDEsMHhhNiwweDgwLDB4ZjksMHgwOCwweDNlLDB4YzAsMHgwZiwweDkxLDB4NDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlIH0sCisgIDE2LCAweGZjMDAsIDAsIHsweDUwLDB4MGYsMHg5OCwweDAzLDB4YTUsMHgwMCwweGU5LDB4MDAsMHgzYSwweDY0LDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5IH0sCisgIDE2LCAweGZjMTAsIDAsIHsweDAwLDB4M2MsMHg0MCwweDZlLDB4OTAsMHgwMywweGU0LDB4MjAsMHhkOSwweDAwLDB4M2MsMHg0MCwweDBmLDB4OTAsMHg4MiwweGNhIH0sCisgIDE2LCAweGZjMjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGU4LDB4MDAsMHgzZSwweDAwIH0sCisgIDE2LCAweGZjMzAsIDAsIHsweDRmLDB4ODQsMHgwYiwweDIwLDB4MDAsMHhmOCwweDAwLDB4MzYsMHgwMSwweDBlLDB4ODAsMHgwMywweGUwLDB4MDAsMHhjOCwweDQwIH0sCisgIDE2LCAweGZjNDAsIDAsIHsweDMyLDB4MTAsMHgyZCwweDgwLDB4MDMsMHhlMCwweDU0LDB4YzgsMHgwMCwweDM2LDB4MTAsMHgwZiwweDA0LDB4ODMsMHhlMCwweDUwIH0sCisgIDE2LCAweGZjNTAsIDAsIHsweGQ4LDB4MDQsMHgxMiwweDAwLDB4MGMsMHgwMCwweDBiLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZjNjAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAwLDB4OGUsMHg0MiwweDJlLDB4YTIsMHg4YiwweGVhLDB4MDIsMHgyOCwweDA4LDB4YmUsMHg4OSwweDM3IH0sCisgIDE2LCAweGZjNzAsIDAsIHsweDg0LDB4NDgsMHhlMCwweDEyLDB4MjgsMHgwMiwweDhlLDB4YzAsMHgyMywweGIwLDB4NGQsMHg2MCwweDYyLDB4ZjgsMHgwMCwweDg2IH0sCisgIDE2LCAweGZjODAsIDAsIHsweDAwLDB4MjMsMHg4MCwweDBiLDB4ZTAsMHgwMiwweGY4LDB4MDAsMHgwZSwweDAwLDB4MjIsMHg4MCwweDA4LDB4ZTQsMHgwMiwweDBhIH0sCisgIDE2LCAweGZjOTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweGEzLDB4MDAsMHgyYywweDgwIH0sCisgIDE2LCAweGZjYTAsIDAsIHsweDFiLDB4YjAsMHg5YSwweDRjLDB4MTAsMHg5YiwweDgwLDB4MjQsMHhjMCwweDBhLDB4MzAsMHgwMCwweDBjLDB4MDQsMHg5YiwweDIwIH0sCisgIDE2LCAweGZjYjAsIDAsIHsweDIwLDB4ZDYsMHgwOCwweDMwLDB4MDIsMHg4ZSwweDA4LDB4YTMsMHgwNCwweDI0LDB4YzAsMHgxOSwweDM0LDB4MDIsMHhjNywweDA3IH0sCisgIDE2LCAweGZjYzAsIDAsIHsweGFhLDB4YTQsMHhhMCwweGMwLDB4NDgsMHgzNCwweDAyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZjZDAsIDAsIHsweGEwLDB4MDEsMHgwZSwweDAwLDB4ODcsMHgwMCwweDJkLDB4YzAsMHgwYiwweDQwLDB4MDIsMHg1YywweDQwLDB4YjMsMHgxNCwweDI1IH0sCisgIDE2LCAweGZjZTAsIDAsIHsweGUwLDB4MDgsMHg3YSwweDAyLDB4OWUsMHhjMCwweDkyLDB4NDAsMHhhMCwweDAwLDB4NDksMHg2MCwweDAyLDB4Y2UsMHgwMiwweDhlIH0sCisgIDE2LCAweGZjZjAsIDAsIHsweDAxLDB4MjEsMHhjMCwweDhiLDB4NTQsMHgwMiwweGM0LDB4MDgsMHg4NiwweDQwLDB4MjEsMHhjOCwweDg4LDB4MTAsMHgwMiwweDI4IH0sCisgIDE2LCAweGZkMDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHhjMCwweGU0LDB4ODAsMHgzZCwweGUyIH0sCisgIDE2LCAweGZkMTAsIDAsIHsweDBmLDB4NTgsMHgwMywweDVlLDB4OTAsMHhiNiwweGEyLDB4MzUsMHhlMCwweDBlLDB4N2MsMHgyMywweDFjLDB4MDAsMHhkNiwweDgwIH0sCisgIDE2LCAweGZkMjAsIDAsIHsweDMxLDB4ZTAsMHg4NCwweDc4LDB4MDMsMHhkZSwweDAwLDB4YzcsMHg4MCwweDM1LDB4ZTAsMHgwZiwweDY4LDB4MDMsMHhkZSwweDAwIH0sCisgIDE2LCAweGZkMzAsIDAsIHsweGUzLDB4ODAsMHgzMywweGU4LDB4MmMsMHg3OCwweDAzLDB4MmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZkNDAsIDAsIHsweDA4LDB4MWQsMHhhYywweDkwLDB4ZmEsMHgwMCwweDdlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhhYywweDAxLDB4ZmIsMHgwMCwweDNjIH0sCisgIDE2LCAweGZkNTAsIDAsIHsweDQxLDB4MGYsMHgzMCwweDBiLDB4MmQsMHgwNCwweGViLDB4MDEsMHgzZSwweGMwLDB4MGUsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZhIH0sCisgIDE2LCAweGZkNjAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBmLDB4ODAsMHgwMywweGVjLDB4MDAsMHhlOSwweDYwLDB4M2UsMHhlNCwweDBmLDB4OTAsMHgwMywweGMyIH0sCisgIDE2LCAweGZkNzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHgyMCwweGZmLDB4OTAsMHgzZSwweDIwIH0sCisgIDE2LCAweGZkODAsIDAsIHsweDBjLDB4YTksMHgwNywweDJlLDB4NDQsMHhjOSwweDkxLDB4MzAsMHhhMCwweDBjLDB4YjgsMHg2MywweDJmLDB4NDQsMHhjYiwweGExIH0sCisgIDE2LCAweGZkOTAsIDAsIHsweDM2LDB4MjAsMHg4YywweGY4LDB4MDMsMHgzNiwweDAwLDB4Y2YsMHg4MiwweDMzLDB4ZTAsMHgwYywweGY4LDB4MjMsMHgyZSwweDAwIH0sCisgIDE2LCAweGZkYTAsIDAsIHsweGNlLDB4YzAsMHgzYiwweGUwLDB4MGMsMHg2OCwweDAzLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZkYjAsIDAsIHsweGE4LDB4MTEsMHg5YywweDg0LDB4YjMsMHg1NCwweDJjLDB4ZjQsMHgyOCwweGJhLDB4OGEsMHgzZSwweDQwLDB4ODEsMHhhMCwweDI5IH0sCisgIDE2LCAweGZkYzAsIDAsIHsweGIwLDB4MGYsMHg3OCwweDQyLDB4YWUsMHgwMCwweDgzLDB4OTAsMHgzMywweGU4LDB4MGQsMHhlMSwweDAwLDB4ODUsMHg0MCwweDgyIH0sCisgIDE2LCAweGZkZDAsIDAsIHsweDI0LDB4MjMsMHhjNiwweDBkLDB4NzEsMHgwMywweDVlLDB4ZTAsMHg4NywweDAwLDB4MmIsMHhjMSwweDBkLDB4NDQsMHgwMiwweDJhIH0sCisgIDE2LCAweGZkZTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwOCwweDM1LDB4MTQsMHg2ZCwweGMwIH0sCisgIDE2LCAweGZkZjAsIDAsIHsweDg4LDB4NzIsMHgzMiwweDVjLDB4ODAsMHg4NCwweDMwLDB4MmIsMHg4OCwweDBhLDB4NzAsMHg0MiwweDVjLDB4YTgsMHg5MSwweDA4IH0sCisgIDE2LCAweGZlMDAsIDAsIHsweDI1LDB4YzgsMHgwOSwweDcwLDB4MDIsMHg0YywweDIyLDB4ODMsMHgwYSwweDYxLDB4YzAsMHgwOSwweDIwLDB4MDIsMHgwNCwweDAwIH0sCisgIDE2LCAweGZlMTAsIDAsIHsweDg3LDB4MDAsMHgyMSwweGMwLDB4MDgsMHg2MCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZlMjAsIDAsIHsweDIwLDB4MTQsMHhjYywweDEwLDB4YjMsMHg4NSwweDZjLDB4ZGMsMHgwOCwweDM0LDB4MDIsMHg0ZCwweDIxLDB4ODEsMHgwMCwweDI4IH0sCisgIDE2LCAweGZlMzAsIDAsIHsweDAyLDB4NGEsMHgzMSwweDEyLDB4ZWYsMHgwYywweDkxLDB4YzIsMHgyMCwweGYwLDB4MDgsMHgzMCwweDQyLDB4OGUsMHgwMCwweDgyIH0sCisgIDE2LCAweGZlNDAsIDAsIHsweDQwLDB4MjAsMHhjOCwweDE5LDB4MjgsMHgwMiwweDIyLDB4ODEsMHg4MywweGMwLDB4MjgsMHhkNCwweDA5LDB4MDAsMHgwYSwweDA4IH0sCisgIDE2LCAweGZlNTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmMsMHgwMCwweGZiLDB4YTAsMHgzZSwweGMwIH0sCisgIDE2LCAweGZlNjAsIDAsIHsweDhjLDB4MDQsMHgxMiwweDdkLDB4MTAsMHhjZiwweDAyLDB4M2EsMHg1MCwweDA4LDB4YzAsMHg0MiwweDdkLDB4NTIsMHg1OCwweDAxIH0sCisgIDE2LCAweGZlNzAsIDAsIHsweDM2LDB4MjIsMHg2OSwweGQwLDB4MTMsMHgyYSwweDAwLDB4ODgsMHg4MiwweDMyLDB4ZjAsMHgwOSwweGI4LDB4ODIsMHgyZiwweDAwIH0sCisgIDE2LCAweGZlODAsIDAsIHsweGM5LDB4YzgsMHgyMywweGMwLDB4MGMsMHg4YSwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZlOTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4YjksMHg0MCwweDNjLDB4NTAsMHg0ZiwweDgwLDB4MjMsMHhhYywweDEyLDB4ZmIsMHgwMCwweDJhIH0sCisgIDE2LCAweGZlYTAsIDAsIHsweGMwLDB4NmQsMHg4MCwweDEzLDB4YWMsMHgwMCwweGU4LDB4MDQsMHhiYSwweDEwLDB4MGYsMHg4MCwweDAzLDB4ZTgsMHgwMCwweGYzIH0sCisgIDE2LCAweGZlYjAsIDAsIHsweDA4LDB4M2MsMHg4MCwweDBmLDB4OTAsMHg4MywweGVjLDB4MDQsMHhmOSwweDYwLDB4MmMsMHhjMiwweDBmLDB4ODAsMHg4MywweGUwIH0sCisgIDE2LCAweGZlYzAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZGMsMHgwMCwweGVjLDB4MmMsMHgzZiwweGYwIH0sCisgIDE2LCAweGZlZDAsIDAsIHsweDhjLDB4ZmEsMHg4YiwweGJjLDB4MDAsMHhmZSwweDAwLDB4M2YsMHgwMCwweDBmLDB4NzksMHgwMywweDNjLDB4MDAsMHhjZSwweDA4IH0sCisgIDE2LCAweGZlZTAsIDAsIHsweDBiLDB4YzIsMHgwYywweGYwLDB4MDMsMHhiYywweDAwLDB4ZmMsMHgwMCwweDMzLDB4NDAsMHg4YywweDdhLDB4MDMsMHgzYSwweDAwIH0sCisgIDE2LCAweGZlZjAsIDAsIHsweGM1LDB4MDAsMHgzMywweGMwLDB4NGMsMHhjOCwweDAzLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZmMDAsIDAsIHsweDgxLDB4MDQsMHg2YywweDAwLDB4ODgsMHhjMCwweDJlLDB4ZTAsMHgwOCwweDk0LDB4MDIsMHgyYywweDAwLDB4YmIsMHg4MCwweDY2IH0sCisgIDE2LCAweGZmMTAsIDAsIHsweDMwLDB4MTYsMHhiMCwweDAyLDB4MmMsMHgwMCwweGRhLDB4NGMsMHgyMiwweGYwLDB4MDgsMHhmMCwweDAzLDB4ZWMsMHgwMCwweGViIH0sCisgIDE2LCAweGZmMjAsIDAsIHsweGMwLDB4MjIsMHg2OCwweDAwLDB4OTQsMHgwMiwweDJjLDB4MDIsMHhhOSwweDgwLDB4MjIsMHhjMCwweDA4LDB4MGMsMHgwMiwweGEwIH0sCisgIDE2LCAweGZmMzAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweGFiLDB4MDQsMHgyZSwweGMwIH0sCisgIDE2LCAweGZmNDAsIDAsIHsweDA4LDB4YTQsMHgwNiwweDJjLDB4MDQsMHhhYiwweDEwLDB4MmUsMHg2MCwweDQzLDB4ODAsMHg4MiwweDZjLDB4MDEsMHg4MSwweDgwIH0sCisgIDE2LCAweGZmNTAsIDAsIHsweDI4LDB4MGEsMHgwOCwweDkxLDB4MDAsMHhlMCwweDAwLDB4YjgsMHg4MCwweDAyLDB4ZTAsMHgwOCwweDgwLDB4MDIsMHgyZCwweDgwIH0sCisgIDE2LCAweGZmNjAsIDAsIHsweDg4LDB4YzAsMHgyMiwweGMwLDB4MDgsMHg4MiwweDAyLDB4MjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZmNzAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAwLDB4ODAsMHg0NCwweDJjLDB4YzgsMHgyOCwweGEwLDB4MjIsMHgwYywweDA0LDB4YjMsMHgyNiwweDJjIH0sCisgIDE2LCAweGZmODAsIDAsIHsweGM4LDB4ODgsMHgwMSwweDA2LDB4MGMsMHhlMCwweDkxLDB4MjAsMHgyMCwweDBjLDB4MzgsMHgwNCwweDIyLDB4YzAsMHg0OCwweGEzIH0sCisgIDE2LCAweGZmOTAsIDAsIHsweDQyLDB4YTAsMHg4MSwweDA4LDB4MDAsMHgwMiwweDBjLDB4ODAsMHg4MSwweDAwLDB4MjAsMHhjMCwweDI4LDB4MDAsMHgwMiwweDgyIH0sCisgIDE2LCAweGZmYTAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4N2MsMHgwMCwweGE5LDB4NDAsMHgzZSwweDQ0IH0sCisgIDE2LCAweGZmYjAsIDAsIHsweDA4LDB4YjEsMHgwMywweDJjLDB4NDAsMHhlYSwweDQ5LDB4MmUsMHgwZCwweDBiLDB4YjYsMHgxMywweDdkLDB4ODAsMHhjOSwweDQwIH0sCisgIDE2LCAweGZmYzAsIDAsIHsweGJhLDB4ZDAsMHgwYywweGI0LDB4MDMsMHhhYywweDAwLDB4ZjgsMHgwMCwweDMyLDB4NDAsMHgwYywweDgwLDB4MGIsMHgyMCwweDAwIH0sCisgIDE2LCAweGZmZDAsIDAsIHsweGM1LDB4MDAsMHhiMiwweGMwLDB4MGMsMHg4MCwweDAzLDB4MDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZmZTAsIDAsIHsweGEwLDB4MWQsMHhmYywweDA0LDB4ZmMsMHgwMCwweDNkLDB4YzUsMHgwYiwweGYxLDB4MDAsMHhmYywweGQwLDB4NzcsMHgyOSwweDM3IH0sCisgIDE2LCAweGZmZjAsIDAsIHsweDBjLDB4OGUsMHg3NCwweDAzLDB4ZmMsMHgwOCwweGZkLDB4NjksMHgzZiwweGQ4LDB4MGYsMHhmMCwweDAzLDB4YmMsMHgwMCwweGVmIH0sCisgIDE2LCAweDgwMTAsIDAsIHsweDAwLDB4M2YsMHg0MCwweDA3LDB4YzAsMHgwMywweGYwLDB4NDAsMHhmZCwweDAwLDB4M2YsMHhjMCwweDBmLDB4YzAsMHgwMywweGU4IH0sCisgIDE2LCAweDgwMjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDBkLDB4ZmMsMHhjMCwweGRjLDB4ODAsMHgzZiwweGM4IH0sCisgIDE2LCAweDgwMzAsIDAsIHsweDBmLDB4NDgsMHgwMywweDdjLDB4MjAsMHhmZiwweDY4LDB4MzcsMHhlMCwweDBlLDB4ZjEsMHgwMywweDljLDB4MDAsMHhiZiwweDIwIH0sCisgIDE2LCAweDgwNDAsIDAsIHsweDM3LDB4ZTAsMHgwYywweGM4LDB4MTMsMHgzYywweDQwLDB4ZWQsMHg2MCwweGJiLDB4ZTQsMHgyYywweDQzLDB4NGIsMHg3MCwweGEwIH0sCisgIDE2LCAweDgwNTAsIDAsIHsweGNjLDB4MmMsMHgzZiwweDA5LDB4MGYsMHhkOCwweDQzLDB4NzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgwNjAsIDAsIHsweDgwLDB4MDAsMHhlZCwweGMwLDB4YjgsMHg4MCwweDJmLDB4ZjQsMHgwZiwweDk4LDB4MDIsMHgzZiwweDAwLDB4YmYsMHg0MiwweDIyIH0sCisgIDE2LCAweDgwNzAsIDAsIHsweGNhLDB4MDgsMHhmNCwweDAyLDB4M2UsMHgwMCwweGJmLDB4ZDAsMHgyMiwweDYwLDB4MjgsMHg4OCwweDBhLDB4M2QsMHg4MCwweDhkIH0sCisgIDE2LCAweDgwODAsIDAsIHsweDQwLDB4MjIsMHhjOCwweDA4LDB4ODEsMHgwMiwweDIxLDB4ODAsMHhkYiwweGMwLDB4MmUsMHhhNSwweDBiLDB4OTgsMHg0MiwweDIwIH0sCisgIDE2LCAweDgwOTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgxMCwweGIwLDB4MDAsMHgyYywweGMwIH0sCisgIDE2LCAweDgwYTAsIDAsIHsweDBiLDB4MjAsMHgwMiwweGNjLDB4MDAsMHhiMywweDIwLDB4MjYsMHhjMCwweDhhLDB4MzYsMHgxMiwweDhjLDB4NDEsMHhiMywweDAwIH0sCisgIDE2LCAweDgwYjAsIDAsIHsweDJlLDB4NDAsMHgwOCwweDAwLDB4MDIsMHgwZCwweDgxLDB4YTEsMHgzMCwweDIyLDB4YzgsMHg4OSwweGEyLDB4NDIsMHgwOCwweDIwIH0sCisgIDE2LCAweDgwYzAsIDAsIHsweGIwLDB4MDAsMHgyYywweDQwLDB4MGIsMHg5MCwweDI2LDB4NjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgwZDAsIDAsIHsweGMwLDB4MTUsMHhhYywweDAwLDB4YjgsMHg1MCwweDJlLDB4YzAsMHgwYSwweDkwLDB4MDIsMHhhYywweDAwLDB4YmIsMHgwMCwweDIyIH0sCisgIDE2LCAweDgwZTAsIDAsIHsweGMwLDB4MDgsMHhiMCwweDYyLDB4MmMsMHgxMCwweGJiLDB4MDQsMHgyYSwweGYwLDB4NGEsMHg4OCwweDAyLDB4MGMsMHgwMCwweDgxIH0sCisgIDE2LCAweDgwZjAsIDAsIHsweDAwLDB4MjIsMHhjMCwweDA5LDB4YjgsMHg4MCwweDI2LDB4MDAsMHhiOCwweDgwLDB4MmUsMHgyMSwweDBiLDB4OTAsMHgwMiwweDMwIH0sCisgIDE2LCAweDgxMDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDE1LDB4ZWMsMHgwMCwweGQ4LDB4YzAsMHgzZSwweGMwIH0sCisgIDE2LCAweDgxMTAsIDAsIHsweDBiLDB4ODAsMHgwMywweGVjLDB4MDAsMHhmYiwweDAwLDB4MzYsMHg4MCwweDBlLDB4YjAsMHgwMywweGFjLDB4MDAsMHhmYiwweDAwIH0sCisgIDE2LCAweDgxMjAsIDAsIHsweDNjLDB4ZTAsMHgwYywweDBjLDB4MDMsMHgyYywweDAwLDB4ZTksMHgwMCwweDEwLDB4YzAsMHgwYywweDhjLDB4MDMsMHgwNiwweDAwIH0sCisgIDE2LCAweDgxMzAsIDAsIHsweGY4LDB4Y2QsMHgzZSwweDIyLDB4MGYsMHgxOCwweDAzLDB4NDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgxNDAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4ZmYsMHgwMCwweDNlLDB4YzAsMHgwZiwweGYwLDB4MDMsMHg3YywweDAwLDB4ZjcsMHgwMiwweDNmIH0sCisgIDE2LCAweDgxNTAsIDAsIHsweGU0LDB4MGYsMHg3MCwweDAzLDB4N2MsMHgwNCwweGI3LDB4MDAsMHgzNywweDQwLDB4MGQsMHhjMCwweDAzLDB4ZmMsMHgwMCwweGZkIH0sCisgIDE2LCAweDgxNjAsIDAsIHsweDAwLDB4MzcsMHhkMCwweDBlLDB4YzAsMHg0MywweGY0LDB4MDAsMHhkZiwweDAwLDB4M2YsMHg4MCwweDhmLDB4ZGEsMHgwMywweGY4IH0sCisgIDE2LCAweDgxNzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGY4LDB4MTAsMHgzYSwweGMwIH0sCisgIDE2LCAweDgxODAsIDAsIHsweDZkLDB4YTYsMHgxMywweGVjLDB4MDAsMHhjYiwweDAwLDB4M2EsMHhkMCwweDBmLDB4YjAsMHgwMywweDJjLDB4MTAsMHhkYiwweDEwIH0sCisgIDE2LCAweDgxOTAsIDAsIHsweDM2LDB4ZDgsMHgwZCwweDg0LDB4MDMsMHhlYywweDA2LDB4YzksMHgwOCwweDNhLDB4YzAsMHgwZSwweDg2LDB4MDMsMHhhOCwweDYwIH0sCisgIDE2LCAweDgxYTAsIDAsIHsweGY4LDB4MjAsMHgzYSwweDQwLDB4MGMsMHg5MCwweDAzLDB4NTQsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgxYjAsIDAsIHsweDk4LDB4MDUsMHgzYywweDAwLDB4YmIsMHg0MCwweDIzLDB4ZDAsMHgwOCwweDMwLDB4MDIsMHgzZSwweDEwLDB4YWYsMHgwMCwweDIwIH0sCisgIDE2LCAweDgxYzAsIDAsIHsweGMwLDB4MGIsMHhmMCwweDAyLDB4M2MsMHgwMCwweDhmLDB4NTAsMHgyZSwweGM4LDB4MDYsMHg4YSwweDAyLDB4ZmMsMHgwMCwweDhkIH0sCisgIDE2LCAweDgxZDAsIDAsIHsweDI0LDB4ODIsMHhkNiwweDA4LDB4MzIsMHgwMiwweDJkLDB4MDgsMHgzYSwweDQwLDB4MjIsMHg4MCwweDBkLDB4OTAsMHgwMywweDYyIH0sCisgIDE2LCAweDgxZTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDA1LDB4NGMsMHgwMCwweGIwLDB4MjAsMHgyOCwweGMyIH0sCisgIDE2LCAweDgxZjAsIDAsIHsweDA4LDB4MDQsMHgwMiwweDhjLDB4MDAsMHgxMywweDAyLDB4MjgsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBjLDB4MzAsMHg5MywweDgwIH0sCisgIDE2LCAweDgyMDAsIDAsIHsweDI0LDB4ZDAsMHgwOSwweDIwLDB4MDIsMHhjYywweDAwLDB4OTEsMHg0MCwweDA4LDB4YzAsMHgyYSwweDE0LDB4MDIsMHg4MSwweDAwIH0sCisgIDE2LCAweDgyMTAsIDAsIHsweDkwLDB4MDAsMHg2OCwweDAwLDB4MDgsMHgxOCwweDAyLDB4M2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgyMjAsIDAsIHsweDcwLDB4MDEsMHgxZSwweDAwLDB4YjQsMHhhMCwweDIxLDB4ZTAsMHgwOCwweGM4LDB4MTIsMHg5ZSwweDAwLDB4YjMsMHg4MiwweDIxIH0sCisgIDE2LCAweDgyMzAsIDAsIHsweGUwLDB4MGIsMHg3YSwweDBhLDB4MWUsMHgwMCwweDk3LDB4ODAsMHgyZCwweGUxLDB4MGEsMHg0OCwweDAyLDB4Y2UsMHg0MCwweDk1IH0sCisgIDE2LCAweDgyNDAsIDAsIHsweDkwLDB4MjksMHhlNCwweDA4LDB4NTgsMHgwMiwweDlhLDB4MDAsMHhiNywweDg4LDB4MjEsMHhlMCwweDA5LDB4NTgsMHgwMiwweDVjIH0sCisgIDE2LCAweDgyNTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0YSwweDAwLDB4MGMsMHgwMCwweGYwLDB4ODAsMHgzOCwweGM0IH0sCisgIDE2LCAweDgyNjAsIDAsIHsweDBjLDB4MjUsMHgwMywweDhjLDB4MjAsMHg5MywweDAwLDB4MzgsMHhjNCwweDBmLDB4YjAsMHgwMywweDBjLDB4ODAsMHhkMywweDAwIH0sCisgIDE2LCAweDgyNzAsIDAsIHsweDM0LDB4YzAsMHgwZCwweDA0LDB4MTMsMHhjYywweDA4LDB4OTksMHgwMCwweDJhLDB4YzAsMHgwZSwweDIxLDB4MDMsMHg4OCwweDA0IH0sCisgIDE2LCAweDgyODAsIDAsIHsweGYzLDB4MDAsMHgzOCwweGMwLDB4MGMsMHgxMSwweDgzLDB4MTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgyOTAsIDAsIHsweDQyLDB4MTUsMHhiYywweDAwLDB4ZjQsMHgwMCwweDNmLDB4YzMsMHgwZSwweGMwLDB4MDMsMHgxYywweDAwLDB4YWYsMHg0YSwweDdmIH0sCisgIDE2LCAweDgyYTAsIDAsIHsweGM0LDB4MGYsMHhiMiwweDAzLDB4ZmQsMHgwMSwweGVmLDB4MTAsMHgzZiwweDg0LDB4MGYsMHhjMCwweDAzLDB4ZmMsMHgwMCwweGU5IH0sCisgIDE2LCAweDgyYjAsIDAsIHsweDAwLDB4MzcsMHhjMiwweDBlLDB4ZjEsMHg0NywweDdjLDB4MDAsMHhmNywweDAwLDB4M2QsMHhjMCwweDBmLDB4NTAsMHgwMywweGQwIH0sCisgIDE2LCAweDgyYzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhYSwweDE1LDB4ZWMsMHgwOCwweGY4LDB4MDAsMHgzZSwweGNhIH0sCisgIDE2LCAweDgyZDAsIDAsIHsweDBmLDB4OTAsMHgwMywweGVmLDB4MjEsMHhmYiwweDgwLDB4N2EsMHg0MCwweDhmLDB4YjIsMHhhMSwweDJmLDB4MDAsMHhjYiwweDYwIH0sCisgIDE2LCAweDgyZTAsIDAsIHsweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhlZCwweGEwLDB4ZTksMHgzMCwweDMyLDB4YzAsMHgyZCwweGIwLDB4MDMsMHhlNCwweDAwIH0sCisgIDE2LCAweDgyZjAsIDAsIHsweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHhiMCwweDAzLDB4ZWEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgzMDAsIDAsIHsweGM4LDB4OTEsMHg5ZCwweDAwLDB4YjQsMHgwMSwweDJkLDB4YzgsMHgwYiwweDcwLDB4MDIsMHhjYywweDgwLDB4OGYsMHgyMCwweDIxIH0sCisgIDE2LCAweDgzMTAsIDAsIHsweGMwLDB4OGIsMHg3NiwweDAzLDB4NWQsMHgwMCwweDg3LDB4MGEsMHgyZCwweGMwLDB4MGIsMHg0MCwweDIyLDB4ZmQsMHgwMCwweDhkIH0sCisgIDE2LCAweDgzMjAsIDAsIHsweDEwLDB4MjMsMHhjOCwweDA4LDB4NTAsMHgxMiwweGQ0LDB4MDAsMHhiNywweDAwLDB4MmQsMHhjMCwweDBiLDB4NzAsMHgwMiwweGYyIH0sCisgIDE2LCAweDgzMzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDAwLDB4OWUsMHgwMCwweGI0LDB4ODAsMHgyZCwweGUwIH0sCisgIDE2LCAweDgzNDAsIDAsIHsweDBiLDB4N2MsMHgwMiwweGRlLDB4NDAsMHhhNywweDgyLDB4MmQsMHhlMCwweDBiLDB4M2EsMHgwMiwweDhlLDB4MDAsMHg4NywweDkwIH0sCisgIDE2LCAweDgzNTAsIDAsIHsweDJkLDB4ZTAsMHgwYiwweDU4LDB4MDIsMHg1ZSwweDAwLDB4YTUsMHhhMiwweDY1LDB4ZTAsMHgwOCwweDY4LDB4ODIsMHhkYSwweDAwIH0sCisgIDE2LCAweDgzNjAsIDAsIHsweDk1LDB4ODAsMHgyZCwweDYwLDB4MGIsMHg3OCwweDAyLDB4ZTAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgzNzAsIDAsIHsweDA4LDB4ODQsMHhjYywweDAwLDB4YjAsMHgwOSwweDJjLDB4YzAsMHgwYiwweDM4LDB4MDIsMHhjYywweDAwLDB4ODMsMHgwMCwweDJlIH0sCisgIDE2LCAweDgzODAsIDAsIHsweGMwLDB4MGIsMHgzMCwweDQyLDB4NGMsMHgwMCwweDgzLDB4MDAsMHgyYywweGEwLDB4MGIsMHgwNCwweDAyLDB4Y2MsMHgwMCwweDgxIH0sCisgIDE2LCAweDgzOTAsIDAsIHsweDAwLDB4YTAsMHhjMCwweDA4LDB4YjAsMHgwNiwweGNmLDB4ODAsMHhiMywweDEwLDB4MmMsMHhjNCwweDBiLDB4MzEsMHgwMiwweGMzIH0sCisgIDE2LCAweDgzYTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDA1LDB4YTgsMHgwMCwweGZlLDB4ODAsMHgzZSwweDgwIH0sCisgIDE2LCAweDgzYjAsIDAsIHsweDBmLDB4ZTgsMHgxMywweGU4LDB4MDAsMHhlYSwweDAwLDB4M2YsMHhiMCwweDBmLDB4YTAsMHgwMywweGE4LDB4MDIsMHhjMiwweDAwIH0sCisgIDE2LCAweDgzYzAsIDAsIHsweDJmLDB4ODgsMHgwZiwweGUwLDB4MDMsMHhlOCwweDAwLDB4ZWEsMHgwMCwweDM2LDB4MDAsMHgwYywweGUwLDB4MDMsMHhmOSwweDIwIH0sCisgIDE2LCAweDgzZDAsIDAsIHsweGRlLDB4ODAsMHgzZiwweGEwLDB4NGYsMHhhOCwweDAzLDB4ZmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgzZTAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgxMCwweDNjLDB4MTAsMHgwZiwweDgwLDB4ODMsMHhlMSwweDAwLDB4ZTgsMHgwMCwweDIyIH0sCisgIDE2LCAweDgzZjAsIDAsIHsweDA2LDB4MGYsMHgwMCwweDEzLDB4ZTAsMHgwMSwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDgzLDB4ZTAsMHgwMCwweGY4IH0sCisgIDE2LCAweDg0MDAsIDAsIHsweDAwLDB4M2UsMHgwMCwweDBmLDB4ODQsMHgyMywweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgxMCwweDBmLDB4ODAsMHgwMywweGQyIH0sCisgIDE2LCAweDg0MTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTQsMHgwMCwweGY5LDB4MTAsMHgzZSwweDQ0IH0sCisgIDE2LCAweDg0MjAsIDAsIHsweDBkLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgxMiwweDI0LDB4MDAsMHhmOSwweDEwIH0sCisgIDE2LCAweDg0MzAsIDAsIHsweDMyLDB4NDAsMHg4ZiwweDkwLDB4MDMsMHhjNCwweDAwLDB4YzksMHgwMCwweDMyLDB4MTAsMHgwYywweDljLDB4MDEsMHgyNCwweDAwIH0sCisgIDE2LCAweDg0NDAsIDAsIHsweGY5LDB4MTAsMHgzZSwweDcwLDB4MGYsMHg5MCwweDAyLDB4YzIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg0NTAsIDAsIHsweDgwLDB4MTQsMHg2NCwweDAwLDB4YjksMHhjMCwweDJlLDB4NDgsMHgwOCwweDkxLDB4MDIsMHhlNCwweDAwLDB4YjksMHgwMCwweDJlIH0sCisgIDE2LCAweDg0NjAsIDAsIHsweDQwLDB4MGQsMHg5MCwweDAzLDB4NjcsMHgwMCwweGI5LDB4ODAsMHgyYSwweDYwLDB4MGIsMHg5OSwweDAyLDB4ZTQsMHgwMCwweDgxIH0sCisgIDE2LCAweDg0NzAsIDAsIHsweDAwLDB4MjIsMHg0MCwweDJjLDB4OTAsMHgxMiwweDI1LDB4MjAsMHhiOSwweDQ4LDB4MmUsMHg1MiwweDBiLDB4OTQsMHgwMiwweGUwIH0sCisgIDE2LCAweDg0ODAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyZSwweDQwIH0sCisgIDE2LCAweDg0OTAsIDAsIHsweDY4LDB4OTAsMHg0NiwweGU0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHhjMCwweDA4LDB4OTAsMHgwMiwweGE0LDB4NjAsMHhiOSwweDAwIH0sCisgIDE2LCAweDg0YTAsIDAsIHsweDIyLDB4NDgsMHgwYiwweDkwLDB4MDYsMHhlNCwweDAyLDB4ODksMHgwMCwweGEwLDB4NDAsMHgwOCwweDkwLDB4MDIsMHhhNiwweDEwIH0sCisgIDE2LCAweDg0YjAsIDAsIHsweGI5LDB4MDAsMHgwZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4YzYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg0YzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4YjEsMHgwMCwweDJjLDB4NDgsMHgwOCwweDEwLDB4MDIsMHhjNCwweDg0LDB4YjEsMHgyMCwweDJjIH0sCisgIDE2LCAweDg0ZDAsIDAsIHsweDQwLDB4MDksMHgxMiwweDAyLDB4YzQsMHg4MCwweGIxLDB4MjAsMHgyOCwweDQwLDB4MGIsMHgxMCwweDAyLDB4YzQsMHg4MCwweDg5IH0sCisgIDE2LCAweDg0ZTAsIDAsIHsweDIwLDB4MjAsMHg0MCwweDRiLDB4MTIsMHgwYSwweDg0LDB4ODQsMHhiMSwweDIwLDB4MmMsMHg0OCwweDhiLDB4MTAsMHgwMiwweGMyIH0sCisgIDE2LCAweDg0ZjAsIDAsIHsweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGJhLDB4MDAsMHgyZSwweDAwIH0sCisgIDE2LCAweDg1MDAsIDAsIHsweDBjLDB4ODAsMHgwMywweGU4LDB4MDgsMHhmOCwweDUwLDB4M2UsMHgxNCwweDBjLDB4ODUsMHgwMywweDIwLDB4MDAsMHhiOCwweDAwIH0sCisgIDE2LCAweDg1MTAsIDAsIHsweDMyLDB4MDAsMHgwZiwweGEwLDB4MDMsMHhlMSwweDQwLDB4YzgsMHg1MCwweDMyLDB4MTQsMHgwYywweGE1LDB4MDMsMHhhMSwweDQwIH0sCisgIDE2LCAweDg1MjAsIDAsIHsweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHhhMCwweDAzLDB4ZWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg1MzAsIDAsIHsweDg4LDB4MGQsMHhlNCwweDQwLDB4ZmQsMHgwMCwweDNlLDB4NDQsMHgwZiwweGQwLDB4MDMsMHhlNCwweDQwLDB4YjksMHgxMSwweDNmIH0sCisgIDE2LCAweDg1NDAsIDAsIHsweDQwLDB4MGYsMHg5MSwweDAzLDB4NjQsMHg0NCwweGY5LDB4MTAsMHgzZiwweDQwLDB4MGYsMHhkMCwweDAzLDB4ZTQsMHg0MCwweGZkIH0sCisgIDE2LCAweDg1NTAsIDAsIHsweDEwLDB4M2YsMHgxMCwweDhjLDB4ZDEsMHgwMywweDc0LDB4NDAsMHhmZiwweDEwLDB4M2YsMHg0NCwweDBmLDB4ZDAsMHgwMywweGU2IH0sCisgIDE2LCAweDg1NjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4NjYsMHgyMCwweGVkLDB4MDAsMHgzMywweDY5IH0sCisgIDE2LCAweDg1NzAsIDAsIHsweDRkLDB4NTAsMHg0MywweDU2LDB4MDAsMHhmOSwweGEwLDB4MzQsMHg0MCwweDBmLDB4OWEsMHgwYiwweDM0LDB4MDAsMHhkZCwweDgwIH0sCisgIDE2LCAweDg1ODAsIDAsIHsweDNiLDB4NDAsMHgwYiwweDUwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDMyLDB4ZTAsMHgwZSwweGQwLDB4MDMsMHhmNCwweDAwIH0sCisgIDE2LCAweDg1OTAsIDAsIHsweGZkLDB4MDAsMHgzZiwweDQwLDB4MGMsMHhkMCwweDAzLDB4YzYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg1YTAsIDAsIHsweDc4LDB4MTAsMHhlMiwweDgwLDB4ODgsMHgwNCwweDIyLDB4MTAsMHgwYiwweDgwLDB4MDIsMHgyMCwweDA5LDB4YjgsMHhmMCwweDIyIH0sCisgIDE2LCAweDg1YjAsIDAsIHsweDAwLDB4MGIsMHg4ZSwweDEyLDB4YTAsMHgwMCwweGI4LDB4NTIsMHgyZSwweDAwLDB4MGIsMHg4MCwweDAyLDB4ZTAsMHgwNSwweGI4IH0sCisgIDE2LCAweDg1YzAsIDAsIHsweGFhLDB4MjMsMHgzZSwweDBkLDB4ODAsMHgwMiwweGUwLDB4MDAsMHhiOCwweDAwLDB4M2EsMHgwMCwweDA4LDB4ODAsMHgwMiwweGNlIH0sCisgIDE2LCAweDg1ZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA1LDB4YzQsMHgyMCwweGE5LDB4MDAsMHhhNCwweDQ0IH0sCisgIDE2LCAweDg1ZTAsIDAsIHsweDA5LDB4OTAsMHgwMiwweGM1LDB4MDAsMHhhMSwweDA4LDB4MmMsMHg0MCwweDBiLDB4MTEsMHg4MiwweDA0LDB4MDAsMHhiMSwweDAwIH0sCisgIDE2LCAweDg1ZjAsIDAsIHsweDI4LDB4NDAsMHgwYSwweDEwLDB4NDIsMHhjNCwweDAwLDB4YjUsMHgwMCwweGExLDB4NDAsMHgwOCwweDEwLDB4MDIsMHhjNCwweDAwIH0sCisgIDE2LCAweDg2MDAsIDAsIHsweGIxLDB4MDEsMHgyYywweDQwLDB4MDgsMHgxMCwweDIwLDB4ZDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg2MTAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4ODksMHgwNCwweDIyLDB4NDAsMHgwYiwweDkwLDB4MDAsMHhhYywweDAwLDB4MzksMHgwMCwweDJhIH0sCisgIDE2LCAweDg2MjAsIDAsIHsweDQwLDB4MGIsMHgxMCwweDAyLDB4YTQsMHgwMCwweGI5LDB4MDAsMHgyZSwweDQ4LDB4MGIsMHg5MCwweDEyLDB4ZTQsMHgwMCwweGI5IH0sCisgIDE2LCAweDg2MzAsIDAsIHsweDAwLDB4MjEsMHg2MCwweDA5LDB4OTIsMHgyMiwweGU0LDB4MjgsMHhiOSwweDAwLDB4MGEsMHg1MCwweDA4LDB4OTAsMHgwNiwweGM2IH0sCisgIDE2LCAweDg2NDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGU5LDB4MDAsMHgzNiwweDQwIH0sCisgIDE2LCAweDg2NTAsIDAsIHsweDBkLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0OCwweDBmLDB4OTAsMHgwMywweDI0LDB4MDAsMHhkOSwweDAwIH0sCisgIDE2LCAweDg2NjAsIDAsIHsweDNhLDB4NzgsMHgwZSwweDk4LDB4MDMsMHhlNCwweDAwLDB4YjksMHgwMCwweGIyLDB4NDAsMHgwZSwweDkyLDB4MjMsMHhlNiwweDAwIH0sCisgIDE2LCAweDg2NzAsIDAsIHsweGI5LDB4NTAsMHgzZSwweDcwLDB4MmMsMHg5MCwweDAzLDB4ZTgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg2ODAsIDAsIHsweDY4LDB4MDEsMHg4NCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHg0ZiwweDljLDB4MjMsMHg2NCwweDAwLDB4ZjksMHgwNCwweDM2IH0sCisgIDE2LCAweDg2OTAsIDAsIHsweDQ4LDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDYwLDB4MGYsMHg5MiwweDAzLDB4ZTQsMHgwMCwweGY5IH0sCisgIDE2LCAweDg2YTAsIDAsIHsweDAwLDB4M2UsMHg0MCwweDhmLDB4OTAsMHg4MywweGU0LDB4NDQsMHhmOSwweDAwLDB4NzgsMHg2NCwweDBmLDB4OTAsMHgwMywweGRhIH0sCisgIDE2LCAweDg2YjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwIH0sCisgIDE2LCAweDg2YzAsIDAsIHsweDBmLDB4ODIsMHgwMywweGEwLDB4NDAsMHhlOCwweDAwLDB4M2UsMHgwMCwweDBkLDB4ODAsMHgwMywweDIwLDB4YzAsMHhjOCwweDgwIH0sCisgIDE2LCAweDg2ZDAsIDAsIHsweDNlLDB4MTIsMHgwZiwweDgwLDB4MDMsMHg2MCwweDAwLDB4N2MsMHgwMCwweDMzLDB4MDAsMHgwZCwweDgwLDB4MTMsMHhlMCwweDEwIH0sCisgIDE2LCAweDg2ZTAsIDAsIHsweGM4LDB4NjQsMHgzZSwweDA4LDB4MGMsMHg4MiwweDAzLDB4Y2EsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg2ZjAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAwLDB4YjYsMHhlMCwweDBmLDB4YTAsMHgwYiwweDYwLDB4ODIsMHgzOCwweDAwLDB4YWEsMHgwMCwweDJlIH0sCisgIDE2LCAweDg3MDAsIDAsIHsweDgwLDB4MDgsMHhhMCwweDQyLDB4YmEsMHgwMCwweGFlLDB4MjAsMHgyZiwweDg4LDB4MGIsMHhlNSwweDAyLDB4MjgsMHgwMCwweGJhIH0sCisgIDE2LCAweDg3MTAsIDAsIHsweGQ4LDB4MzcsMHg4MCwweDA4LDB4ZWMsMHgwMiwweGY4LDB4MDQsMHg4ZSwweDAwLDB4MmYsMHg5MCwweDBkLDB4ZTAsMHgwMiwweGNhIH0sCisgIDE2LCAweDg3MjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweGIwLDB4MjQsMHgyYywweDYwIH0sCisgIDE2LCAweDg3MzAsIDAsIHsweDBiLDB4MzgsMHgwMiwweDhlLDB4ODAsMHhhYiwweDAwLDB4MmMsMHhjMCwweDA5LDB4MzAsMHgwMiwweDBkLDB4MDgsMHgwMCwweDgwIH0sCisgIDE2LCAweDg3NDAsIDAsIHsweDZjLDB4ZDAsMHgwYiwweDM0LDB4MDIsMHhjYywweDAwLDB4YjgsMHhjMCwweDIwLDB4MDAsMHg0OCwweDM0LDB4MTIsMHhjYywweDQwIH0sCisgIDE2LCAweDg3NTAsIDAsIHsweDgzLDB4MDAsMHgyYywweGUwLDB4MGEsMHgzNSwweDAyLDB4Y2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg3NjAsIDAsIHsweGEwLDB4MDEsMHgxYywweDQwLDB4YjcsMHgwMCwweDJkLDB4MDIsMHg4YiwweDYwLDB4MDIsMHg5ZSwweDAwLDB4ODcsMHgyMCwweDJmIH0sCisgIDE2LCAweDg3NzAsIDAsIHsweGUwLDB4MDgsMHg3MiwweDAyLDB4OWUsMHgwMCwweGE0LDB4MDAsMHgyZCwweGMwLDB4MGIsMHhmOCwweDAyLDB4OWMsMHhjMCwweGIzIH0sCisgIDE2LCAweDg3ODAsIDAsIHsweDAyLDB4YTUsMHhjMCwweDA4LDB4NTAsMHg4NiwweGZlLDB4MDAsMHg4NywweDAwLDB4MmYsMHhkMCwweDA5LDB4NzAsMHgwMiwweGU4IH0sCisgIDE2LCAweDg3OTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMCwweGY0LDB4ODAsMHgzZCwweDIwIH0sCisgIDE2LCAweDg3YTAsIDAsIHsweDBmLDB4NTgsMHgwMywweDllLDB4MDAsMHg2NywweDgwLDB4M2QsMHhmOCwweDBkLDB4MzgsMHgwMiwweDFhLDB4MTAsMHg0NCwweDgwIH0sCisgIDE2LCAweDg3YjAsIDAsIHsweDNkLDB4ZTAsMHgwZiwweDU4LDB4MDMsMHhkZSwweDIwLDB4YjQsMHg4MCwweDMzLDB4YTAsMHgyYywweDY4LDB4MDMsMHhkNiwweDAwIH0sCisgIDE2LCAweDg3YzAsIDAsIHsweGM3LDB4ODEsMHgzZCwweGUwLDB4MGMsMHg3OCwweDAzLDB4ZWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg3ZDAsIDAsIHsweDA4LDB4MWQsMHhhYywweDA4LDB4ZjgsMHgwMCwweDNlLDB4MDAsMHg4ZiwweDgwLDB4MDMsMHg2YywweDAwLDB4M2IsMHgxMiwweDNlIH0sCisgIDE2LCAweDg3ZTAsIDAsIHsweGNhLDB4MGYsMHhiNSwweDAzLDB4YzgsMHgwMCwweGY4LDB4MDQsMHg3ZSwweGMwLDB4MGYsMHg5MCwweDAzLDB4NmMsMHg4MCwweGZiIH0sCisgIDE2LCAweDg3ZjAsIDAsIHsweDA0LDB4M2EsMHg0MCwweDBmLDB4OTAsMHgyMywweGM4LDB4MDAsMHhmOSwweDAxLDB4M2MsMHhjMCwweDBmLDB4YjAsMHgwMywweGMyIH0sCisgIDE2LCAweDg4MDAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmUsMHgwMCwweGFjLDB4OTAsMHgzMSwweDQ4IH0sCisgIDE2LCAweDg4MTAsIDAsIHsweDA4LDB4ZjgsMHgwMywweGZhLDB4MDAsMHhjZiwweDgwLDB4M2YsMHhlMCwweDBjLDB4ZmMsMHgxMywweDNlLDB4MDQsMHhmYywweDgwIH0sCisgIDE2LCAweDg4MjAsIDAsIHsweDM1LDB4YTAsMHgwYywweDc4LDB4MDMsMHhiZSwweDAwLDB4ZGYsMHg4MCwweDNiLDB4MjAsMHgyNCwweGY4LDB4MDMsMHgyZSwweDQwIH0sCisgIDE2LCAweDg4MzAsIDAsIHsweGNmLDB4ODAsMHgzMywweGUwLDB4MDMsMHhmOSwweDAzLDB4ZDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg4NDAsIDAsIHsweGE4LDB4MTEsMHhiYywweDAwLDB4ODAsMHgwMCwweDAxLDB4MDAsMHgwOCwweDcyLDB4MDIsMHhkMCwweDAwLDB4ODcsMHgwMCwweDJkIH0sCisgIDE2LCAweDg4NTAsIDAsIHsweGM4LDB4MGEsMHhmMCwweDAyLDB4OTgsMHg0MCwweGY1LDB4MDAsMHg2MSwweDQxLDB4MDAsMHg3NCwweDAyLDB4MWMsMHgwMCwweGI0IH0sCisgIDE2LCAweDg4NjAsIDAsIHsweDAwLDB4MjEsMHhjOCwweDA4LDB4NjAsMHgwMiwweDNlLDB4MjAsMHg4NiwweDA4LDB4MjEsMHhkOCwweDBmLDB4NTAsMHgwMiwweGVhIH0sCisgIDE2LCAweDg4NzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAwLDB4OWMsMHgwMCwweGE0LDB4MDAsMHgyMSwweDAwIH0sCisgIDE2LCAweDg4ODAsIDAsIHsweDA4LDB4NTAsMHgwMiwweGQ4LDB4MDAsMHg5NywweDAwLDB4MmQsMHhjMCwweDg4LDB4NzEsMHgwMiwweDE0LDB4MDAsMHhiMCwweDAwIH0sCisgIDE2LCAweDg4OTAsIDAsIHsweDI1LDB4OTAsMHgwOCwweGMwLDB4ODIsMHg5YywweDQwLDB4OTMsMHgwMCwweDI5LDB4YTEsMHg4OCwweDYwLDB4MDIsMHgxNCwweDEyIH0sCisgIDE2LCAweDg4YTAsIDAsIHsweDg3LDB4NDAsMHgyOSwweDQwLDB4MGIsMHg2MCwweDAyLDB4YzQsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg4YjAsIDAsIHsweDYwLDB4MTQsMHhjYywweDAwLDB4ODAsMHhkMCwweGEwLDB4MDAsMHgwOCwweDFjLDB4MDIsMHhjMCwweDAwLDB4OTMsMHgwMCwweDJjIH0sCisgIDE2LCAweDg4YzAsIDAsIHsweGQwLDB4MGEsMHhiMCwweDI2LDB4ODAsMHgwMCwweGIzLDB4MDAsMHgyNCwweGU0LDB4MDgsMHgwOCwweDAyLDB4OGMsMHgwMCwweGIwIH0sCisgIDE2LCAweDg4ZDAsIDAsIHsweDAyLDB4MDIsMHg0MSwweDA4LDB4MDgsMHgwMiwweDAzLDB4MDEsMHg4MSwweDAwLDB4MjgsMHg0MiwweDFhLDB4MDAsMHg0MiwweGQ4IH0sCisgIDE2LCAweDg4ZTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmOCwweDE1LDB4YmMsMHgwMCwweGU4LDB4YzAsMHgzMiwweDgwIH0sCisgIDE2LCAweDg4ZjAsIDAsIHsweDBjLDB4YjUsMHgwMywweGU0LDB4MDAsMHg5ZiwweDAwLDB4M2QsMHhlMCwweDBjLDB4ZjAsMHgwYiwweDI0LDB4MDAsMHhmOCwweDAwIH0sCisgIDE2LCAweDg5MDAsIDAsIHsweDM2LDB4ZTAsMHgwYywweDI1LDB4MDMsMHhiYywweDA1LDB4ZDgsMHgwMiwweDJhLDB4MDAsMHgwOCwweGJhLDB4MDIsMHgyYSwweDAwIH0sCisgIDE2LCAweDg5MTAsIDAsIHsweGMxLDB4MDIsMHgzYSwweDUwLDB4OGIsMHg5MCwweDAzLDB4ZWUsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg5MjAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwOCwweDNlLDB4ODAsMHgwZiwweGExLDB4MDMsMHhlYywweDA0LDB4ZWIsMHgwMiwweDJlIH0sCisgIDE2LCAweDg5MzAsIDAsIHsweGM2LDB4MGYsMHhiMCwweDE3LDB4NDQsMHgwMCwweGU4LDB4MDAsMHgzYSwweDQwLDB4MGYsMHg4MCwweDAyLDB4NmMsMHgwMCwweGZiIH0sCisgIDE2LCAweDg5NDAsIDAsIHsweDAwLDB4M2UsMHhlMCwweDBmLDB4OTAsMHg5MywweGUxLDB4MDAsMHhkOSwweDAwLDB4MjYsMHg3MCwweDhmLDB4OTAsMHgwMSwweGUxIH0sCisgIDE2LCAweDg5NTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4ZmMsMHgwMCwweGZjLDB4MDMsMHgzNywweDI0IH0sCisgIDE2LCAweDg5NjAsIDAsIHsweDBkLDB4ZjgsMHgwMywweGUwLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMSwweDhkLDB4ZjAsMHgwYiwweDM4LDB4MDAsMHhjYywweDAwIH0sCisgIDE2LCAweDg5NzAsIDAsIHsweDNmLDB4YzAsMHgwZiwweGZhLDB4MDMsMHgzYywweDBjLDB4ZmMsMHgwNCwweDNiLDB4ODAsMHgwYywweGEwLDB4MDMsMHg5NCwweDIwIH0sCisgIDE2LCAweDg5ODAsIDAsIHsweDg5LDB4MDUsMHgzYiwweDAwLDB4NGYsMHhkMCwweDIzLDB4YzAsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg5OTAsIDAsIHsweDgwLDB4MDQsMHg2YywweDAwLDB4YjAsMHgwNiwweDIwLDB4MTMsMHg4OCwweGE4LDB4MDIsMHhlYiwweDAwLDB4YmIsMHgwMCwweDJlIH0sCisgIDE2LCAweDg5YTAsIDAsIHsweGMwLDB4MDgsMHhiMCwweDAyLDB4MmEsMHgwMCwweGE4LDB4ODAsMHgyZSwweGUwLDB4MGIsMHg5NCwweDFhLDB4MmMsMHgwMCwweGJiIH0sCisgIDE2LCAweDg5YjAsIDAsIHsweDAwLDB4YTIsMHg0MCwweDI5LDB4OTgsMHgwMiwweGUyLDB4MDAsMHhhOSwweDg0LDB4MjIsMHgyMCwweDBiLDB4OTgsMHgwMiwweGUwIH0sCisgIDE2LCAweDg5YzAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweGI4LDB4MDAsMHgyMiwweDAwIH0sCisgIDE2LCAweDg5ZDAsIDAsIHsweDA5LDB4ODIsMHgwMiwweGU2LDB4MDAsMHhiYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMiwweDI2LDB4MDAsMHg4OCwweDgwIH0sCisgIDE2LCAweDg5ZTAsIDAsIHsweDJlLDB4YTAsMHgwYiwweGEwLDB4MDIsMHgyYywweDAwLDB4YjMsMHgwMCwweDJhLDB4MDAsMHgwOSwweDk4LDB4MDIsMHhlYSwweDIwIH0sCisgIDE2LCAweDg5ZjAsIDAsIHsweGE5LDB4ODAsMHgyYSwweDYwLDB4OWIsMHg5OCwweDgyLDB4ZTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhhMDAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAwLDB4YjgsMHgwMCwweDIwLDB4MDAsMHgwOSwweDA4LDB4MDIsMHhjNCwweDAwLDB4YjMsMHgwMCwweDI2IH0sCisgIDE2LCAweDhhMTAsIDAsIHsweGMwLDB4MDAsMHgzMCwweDAyLDB4MDAsMHgwMCwweDgxLDB4MDAsMHgyYywweDQxLDB4MGIsMHgwMCwweDAyLDB4MGMsMHgwMCwweGIwIH0sCisgIDE2LCAweDhhMjAsIDAsIHsweDAwLDB4MjAsMHhjMCwweDBiLDB4MDAsMHgwMiwweGM4LDB4ODAsMHhhOCwweDAwLDB4MjAsMHg0MSwweDBiLDB4MTAsMHgwMiwweGMyIH0sCisgIDE2LCAweDhhMzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgxMCwweGY4LDB4NTAsMHhiMiwweDAwIH0sCisgIDE2LCAweDhhNDAsIDAsIHsweDBkLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmYiwweDAwLDB4M2QsMHhjMCwweDBkLDB4ZjAsMHgxMywweDI0LDB4MDIsMHhjOCwweDA2IH0sCisgIDE2LCAweDhhNTAsIDAsIHsweDNlLDB4ODAsMHgwZiwweGEwLDB4MDMsMHgzYywweDA0LDB4ZmIsMHgwMCwweDc4LDB4ODAsMHgwYywweGEwLDB4MDMsMHhlNCwweDAwIH0sCisgIDE2LCAweDhhNjAsIDAsIHsweGU5LDB4MDAsMHgxYSwweDQwLDB4MGYsMHg5MCwweDAzLDB4YzAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhhNzAsIDAsIHsweGEwLDB4MWQsMHhmYywweDAwLDB4ZjQsMHgyMCwweDNmLDB4MDAsMHgwZSwweGMwLDB4MDIsMHhmMCwweDAxLDB4ZmYsMHgwMCwweDNmIH0sCisgIDE2LCAweDhhODAsIDAsIHsweGMwLDB4MGYsMHhmMCwweDIzLDB4ZjAsMHgwMCwweGZkLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhjMCwweDAzLDB4ZmMsMHgwMCwweGZjIH0sCisgIDE2LCAweDhhOTAsIDAsIHsweDAwLDB4M2YsMHg0MCwweDljLDB4YzAsMHgwMywweGYwLDB4NDAsMHhmZCwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZDAsMHg0MywweGU4IH0sCisgIDE2LCAweDhhYTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZjAsMHgwMCwweGVkLDB4MjMsMHhiNywweDQ4IH0sCisgIDE2LCAweDhhYjAsIDAsIHsweDBjLDB4ZTEsMHhjMywweDdjLDB4YzAsMHhkZCwweDgwLDB4MzcsMHhlMCwweDBmLDB4Y2IsMHgwMywweGZlLDB4MDgsMHhmYywweDI4IH0sCisgIDE2LCAweDhhYzAsIDAsIHsweDNmLDB4ZjAsMHgxYywweGZiLDB4MjMsMHg3YywweDAxLDB4ZmYsMHgxNCwweDc3LDB4ZTIsMHg0ZiwweGU4LDB4MjMsMHg3YywweDAwIH0sCisgIDE2LCAweDhhZDAsIDAsIHsweGM0LDB4ODAsMHgzMywweDQ4LDB4MmMsMHhmOCwweDIyLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhhZTAsIDAsIHsweDgwLDB4MTAsMHhlMCwweGUwLDB4YzksMHhjMCwweDIyLDB4NWIsMHg4OCwweDk2LDB4MjIsMHgyZCwweDAwLDB4ODksMHgyMiwweDIyIH0sCisgIDE2LCAweDhhZjAsIDAsIHsweGNhLDB4MGIsMHg5ZSwweDIyLDB4ZTIsMHhhMCwweGI5LDB4NjEsMHgyYywweGUwLDB4ODgsMHg5ZiwweDAyLDB4M2QsMHg4NSwweGJmIH0sCisgIDE2LCAweDhiMDAsIDAsIHsweDYwLDB4MjYsMHg1MCwweDQ4LDB4YTAsMHgwMiwweDNjLDB4MDAsMHg4OCwweDAwLDB4MjIsMHg1MCwweDA4LDB4YjAsMHgwMiwweDIwIH0sCisgIDE2LCAweDhiMTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzAsMHg4MCwweGIxLDB4MTAsMHgyMCwweDQ0IH0sCisgIDE2LCAweDhiMjAsIDAsIHsweDBiLDB4YjIsMHgwMiwweGNlLDB4ZDAsMHg4MSwweDA4LDB4MmMsMHhjMCwweDBiLDB4MDEsMHgwMiwweDhjLDB4MDgsMHhiMywweDA4IH0sCisgIDE2LCAweDhiMzAsIDAsIHsweDJjLDB4YzksMHgwOCwweDEwLDB4NjIsMHg4YywweDYwLDB4YjMsMHgzMiwweDI0LDB4ODAsMHgwYSwweGEwLDB4MDIsMHg2YywweDAzIH0sCisgIDE2LCAweDhiNDAsIDAsIHsweDlhLDB4MDEsMHgyNiwweDQ0LDB4NDgsMHhiMCwweDQyLDB4NjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhiNTAsIDAsIHsweGMwLDB4MTUsMHhhNCwweGEwLDB4OGIsMHgwMiwweDIyLDB4ZTAsMHgwYiwweGIwLDB4NjIsMHhhYywweDk4LDB4OTksMHgwMCwweDJhIH0sCisgIDE2LCAweDhiNjAsIDAsIHsweGMyLDB4MGIsMHg5OCwweDA2LDB4ZTQsMHgwMCwweGJiLDB4MDIsMHgyZSwweGMwLDB4MDgsMHg5MSwweDQyLDB4MmMsMHgxMCwweGJiIH0sCisgIDE2LCAweDhiNzAsIDAsIHsweDAwLDB4NmUsMHg4MCwweDBhLDB4ODAsMHgwMiwweDZjLDB4MDAsMHgxYiwweDAwLDB4MDYsMHg0MCwweDQ4LDB4YjgsMHgwYSwweDcwIH0sCisgIDE2LCAweDhiODAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDExLDB4ZTcsMHgwMCwweGExLDB4MDAsMHg3NiwweDc4IH0sCisgIDE2LCAweDhiOTAsIDAsIHsweDBmLDB4YjAsMHgwMywweGU4LDB4MTAsMHhkOSwweDAwLDB4M2UsMHhkMCwweDRiLDB4OWUsMHgxMywweGFjLDB4MDgsMHhiOCwweGEwIH0sCisgIDE2LCAweDhiYTAsIDAsIHsweDdlLDB4YzYsMHgwOCwweGE4LDB4MDIsMHgyYywweDAxLDB4YmIsMHgwMCwweDI2LDB4MzAsMHg0ZSwweDIwLDB4MDMsMHg0YywweDE4IH0sCisgIDE2LCAweDhiYjAsIDAsIHsweDk5LDB4ODAsMHhiNCwweDQwLDB4NGMsMHgzYSwweDAzLDB4NDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhiYzAsIDAsIHsweGUwLDB4MDEsMHhiMiwweDAwLDB4ZmQsMHhjNSwweDNiLDB4YzAsMHg0YywweGQwLDB4MDMsMHg2YSwweDAyLDB4ZWQsMHgwNiwweDMzIH0sCisgIDE2LCAweDhiZDAsIDAsIHsweGM0LDB4MGYsMHhkMCwweDUzLDB4ZjgsMHgwMCwweGZjLDB4OTAsMHg3ZiwweGMxLDB4MGYsMHg3OCwweDAzLDB4YmMsMHgwNCwweGZmIH0sCisgIDE2LCAweDhiZTAsIDAsIHsweDAwLDB4MzcsMHg2NCwweDBjLDB4ZjEsMHgwMywweGE0LDB4MDAsMHhlZCwweGExLDB4M2IsMHg0MCwweDBiLDB4ZjAsMHg4MywweGI4IH0sCisgIDE2LCAweDhiZjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4OGMsMHgwMCwweGNiLDB4MjAsMHgzZSwweDcxIH0sCisgIDE2LCAweDhjMDAsIDAsIHsweDBmLDB4YjMsMHgwMywweDk4LDB4MDIsMHhmYiwweDAyLDB4MzYsMHg0OCwweDBmLDB4OTAsMHgwMywweGVjLDB4MjAsMHhmOCwweDAwIH0sCisgIDE2LCAweDhjMTAsIDAsIHsweDNlLDB4Y2MsMHgwNCwweDg0LDB4MDMsMHgyYywweDAwLDB4ZGIsMHgwNCwweDNjLDB4MTAsMHgwZiwweGEwLDB4MDMsMHhlYywweDAwIH0sCisgIDE2LCAweDhjMjAsIDAsIHsweDliLDB4MDAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDAzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhjMzAsIDAsIHsweDg4LDB4MDUsMHgyYywweDAyLDB4OGIsMHg0OCwweDJlLDB4ZTAsMHgwYiwweDM0LDB4MDMsMHg2YiwweDAwLDB4OGIsMHhmNSwweDIyIH0sCisgIDE2LCAweDhjNDAsIDAsIHsweGYyLDB4MGIsMHg5YywweDAzLDB4YWYsMHgwMCwweGI4LDB4NTAsMHgyZSwweGMwLDB4MDgsMHhiMCwweDAyLDB4N2MsMHgwMCwweDhmIH0sCisgIDE2LCAweDhjNTAsIDAsIHsweDAwLDB4MGUsMHg1ZCwweDBiLDB4ODAsMHgwMiwweGY1LDB4NDAsMHg4MywweDUwLDB4MjMsMHg1NCwweDA4LDB4OWMsMHgwMiwweGU2IH0sCisgIDE2LCAweDhjNjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA0LDB4NGMsMHgwMCwweDgxLDB4ODEsMHgyZSwweDQwIH0sCisgIDE2LCAweDhjNzAsIDAsIHsweDAzLDB4MmMsMHgwMiwweDA0LDB4MzMsMHg5OSwweDAwLDB4MjAsMHhmMCwweDRhLDB4MjgsMHg4MCwweGNjLDB4NDAsMHhiMCwweDAwIH0sCisgIDE2LCAweDhjODAsIDAsIHsweDI2LDB4MTAsMHgwOCwweDIwLDB4MDIsMHg0YywweDAwLDB4ODMsMHgwMCwweDJjLDB4YzAsMHgwOSwweDIwLDB4MDIsMHhjYywweDAwIH0sCisgIDE2LCAweDhjOTAsIDAsIHsweGEwLDB4MDIsMHgyOCwweDQwLDB4MDgsMHgwOCwweDAyLDB4N2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhjYTAsIDAsIHsweDIwLDB4MDEsMHgwYSwweDAwLDB4ODUsMHg4MCwweDJkLDB4ZjgsMHgwYiwweGRhLDB4MDIsMHhkNiwweDQwLDB4ODUsMHhhMCwweDIxIH0sCisgIDE2LCAweDhjYjAsIDAsIHsweGUwLDB4MGIsMHg0OCwweDA2LDB4OTIsMHgwNCwweGI1LDB4ODAsMHgyZCwweDIxLDB4MDgsMHgwMCwweDAyLDB4NGUsMHgwMCwweDg3IH0sCisgIDE2LCAweDhjYzAsIDAsIHsweGE0LDB4MmQsMHg2MCwweDBiLDB4NjgsMHgwMiwweGRlLDB4YzIsMHhhZCwweDkwLDB4MmIsMHg2MCwweDI4LDB4NTgsMHg4MiwweGRjIH0sCisgIDE2LCAweDhjZDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4NGMsMHg0MCwweGMzLDB4MTAsMHgyYywweDZjIH0sCisgIDE2LCAweDhjZTAsIDAsIHsweDBmLDB4MzAsMHgwMywweDg2LDB4YTIsMHhmOSwweGIwLDB4YjAsMHhlMCwweDBmLDB4MjksMHg4MywweGNlLDB4NDQsMHhmMywweDgwIH0sCisgIDE2LCAweDhjZjAsIDAsIHsweDNjLDB4YWMsMHgwYywweDMwLDB4MDMsMHgwYywweDAwLDB4YzMsMHgwMCwweDNjLDB4ZDUsMHgwZiwweDIwLDB4MDMsMHhjZSwweGMxIH0sCisgIDE2LCAweDhkMDAsIDAsIHsweGUwLDB4MTAsMHhiOCwweDQwLDB4MGMsMHgwMCwweDAzLDB4ZDIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhkMTAsIDAsIHsweGMwLDB4MWQsMHhiYywweDAwLDB4ZWIsMHgwMCwweDNlLDB4Y2MsMHgwZiwweDMyLDB4MDMsMHg2NCwweDA4LDB4ZjksMHgwMCwweDNiIH0sCisgIDE2LCAweDhkMjAsIDAsIHsweDkwLDB4MGYsMHhmMCwweDQzLDB4ZTQsMHg0MCwweGZiLDB4MzQsMHgzZiwweDgxLDB4MDcsMHhkMSwweDAzLDB4YWQsMHgyMCwweGViIH0sCisgIDE2LCAweDhkMzAsIDAsIHsweDIwLDB4N2YsMHhjNCwweDBmLDB4ZTEsMHgwMywweGZjLDB4NTAsMHhjZCwweDEwLDB4MzUsMHg0MCwweDBmLDB4ZDAsMHgwMywweGQwIH0sCisgIDE2LCAweDhkNDAsIDAsIHsweDAyLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZTQsMHgwNCwweGZkLDB4MDQsMHgzZCwweDQwIH0sCisgIDE2LCAweDhkNTAsIDAsIHsweDJkLDB4MzAsMHgwMiwweDNjLDB4MDAsMHhjOSwweDAxLDB4M2UsMHhjMCwweDRmLDB4YjgsMHg0MywweGVjLDB4MTAsMHhmYiwweDAwIH0sCisgIDE2LCAweDhkNjAsIDAsIHsweDMyLDB4NDAsMHgwZiwweGEwLDB4MjMsMHhlYywweDgwLDB4Y2IsMHgzNiwweDMyLDB4ODAsMHg0ZCwweGE4LDB4MDMsMHgyYywweDEwIH0sCisgIDE2LCAweDhkNzAsIDAsIHsweGNiLDB4MDAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDAzLDB4NmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhkODAsIDAsIHsweGM4LDB4MTEsMHg5MCwweDA4LDB4YjUsMHgwMCwweDJkLDB4YzAsMHgwOCwweDUwLDB4MDIsMHhiYywweDAyLDB4ODUsMHgwNCwweDJkIH0sCisgIDE2LCAweDhkOTAsIDAsIHsweGMwLDB4OGUsMHg2MCwweDA2LDB4ZDgsMHgwNCwweGI3LDB4MDQsMHgyMSwweDQwLDB4MGIsMHg3MCwweDAyLDB4ZmMsMHg4MCwweGFmIH0sCisgIDE2LCAweDhkYTAsIDAsIHsweDI4LDB4MjEsMHhjMCwweDBiLDB4NzAsMHgwMiwweDA2LDB4NDAsMHg4NywweDAwLDB4MjEsMHg1MCwweDA4LDB4NTAsMHgwMiwweDMyIH0sCisgIDE2LCAweDhkYjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4OWUsMHgyMCwweGI3LDB4ODAsMHgyYiwweDcwIH0sCisgIDE2LCAweDhkYzAsIDAsIHsweDA4LDB4ZjgsMHgwNiwweDFlLDB4MDAsMHg4NywweDgwLDB4MmQsMHhlMCwweDBiLDB4NzAsMHgzMiwweGRlLDB4MDQsMHgzNywweDg0IH0sCisgIDE2LCAweDhkZDAsIDAsIHsweDI1LDB4ZTAsMHgwYiwweDY4LDB4MDYsMHhkZSwweDgwLDB4ODcsMHg4MCwweDIxLDB4YTEsMHgxYiwweDY4LDB4MDIsMHgxZSwweDQwIH0sCisgIDE2LCAweDhkZTAsIDAsIHsweDlmLDB4ODAsMHgyMCwweDYwLDB4MDgsMHg1OCwweDAyLDB4MjAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhkZjAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDIwLDB4YjMsMHgwMCwweDJjLDB4ODAsMHg4OCwweGI0LDB4MjIsMHg4ZCwweDAwLDB4ODMsMHg5MCwweDJjIH0sCisgIDE2LCAweDhlMDAsIDAsIHsweGMwLDB4MGEsMHgzOCwweDAyLDB4Y2UsMHgwOCwweGJiLDB4MjAsMHgyNCwweGQwLDB4MGIsMHhiMywweDAyLDB4Y2MsMHgwMCwweGEzIH0sCisgIDE2LCAweDhlMTAsIDAsIHsweDAwLDB4NjAsMHhkMiwweDBiLDB4MjAsMHgyYSwweDA0LDB4MDgsMHg5MywweDUwLDB4MjAsMHg0MCwweDA4LDB4MTcsMHgwYSwweDAyIH0sCisgIDE2LCAweDhlMjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YmEsMHgwMCwweGJhLDB4YTAsMHgzZiwweDg0IH0sCisgIDE2LCAweDhlMzAsIDAsIHsweDFjLDB4ZTAsMHgwYiwweDM4LDB4NDAsMHg4ZSwweDA2LDB4MmUsMHg4MCwweDBiLDB4ZTMsMHgwMywweGY4LDB4ODAsMHhmZSwweGU0IH0sCisgIDE2LCAweDhlNDAsIDAsIHsweGI3LDB4OTAsMHgwZiwweGVjLDB4MDIsMHhlOCwweDAwLDB4OGEsMHgwMCwweGEzLDB4YTAsMHgwOSwweGU0LDB4MDMsMHgyYSwweDAyIH0sCisgIDE2LCAweDhlNTAsIDAsIHsweGRlLDB4YzAsMHhmMywweDgwLDB4MGMsMHg2YywweDAzLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhlNjAsIDAsIHsweDQ4LDB4MDEsMHhlMCwweDAwLDB4ZjgsMHg0MCwweDNlLDB4MDAsMHgwZiwweDg0LDB4MTMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDJlIH0sCisgIDE2LCAweDhlNzAsIDAsIHsweDMwLDB4MGEsMHg4NCwweDAzLDB4ZTAsMHgwNCwweGY4LDB4MDAsMHgzYSwweDAyLDB4MGYsMHg4MCwweDEzLDB4ZTAsMHgwMCwweGY4IH0sCisgIDE2LCAweDhlODAsIDAsIHsweDAwLDB4M2UsMHgwNCwweDBkLDB4ODAsMHg4MywweGUwLDB4NDAsMHhlOCwweDIwLDB4M2UsMHgwMCwweDJmLDB4ODAsMHgwMywweGQyIH0sCisgIDE2LCAweDhlOTAsIDAsIHsweDEwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4YTQsMHgwMCwweGY5LDB4MDAsMHgzYywweDY0IH0sCisgIDE2LCAweDhlYTAsIDAsIHsweDRlLDB4OTAsMHg4MywweDI0LDB4ODAsMHhjOSwweDAwLDB4MzIsMHhlMCwweDBmLDB4MTAsMHgwMywweDI1LDB4MDAsMHhmOSwweDAwIH0sCisgIDE2LCAweDhlYjAsIDAsIHsweDMyLDB4NDQsMHgwZiwweDkyLDB4MjMsMHg2NCwweDAwLDB4YzEsMHgwMCwweDMyLDB4NDAsMHgwYywweDkwLDB4MTMsMHhlNCwweDAwIH0sCisgIDE2LCAweDhlYzAsIDAsIHsweGM5LDB4MDAsMHgyMiwweDQwLDB4MGMsMHg5MCwweDAzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhlZDAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4YjksMHgyMCwweDJlLDB4NDAsMHg0OCwweDk2LDB4MjIsMHgyNSwweDAwLDB4ZDksMHhjMCwweGEyIH0sCisgIDE2LCAweDhlZTAsIDAsIHsweDcwLDB4MGIsMHg5OCwweDAyLDB4MjQsMHgwMCwweGI5LDB4NDAsMHhhMiwweDcwLDB4NGIsMHg5MCwweDAyLDB4MjQsMHgwMCwweGQ5IH0sCisgIDE2LCAweDhlZjAsIDAsIHsweDAwLDB4YTIsMHg0MCwweDJjLDB4OTQsMHgyMiwweGU0LDB4MDIsMHg4OSwweDAwLDB4YTIsMHg0MCwweDI4LDB4OTQsMHgxMywweDIwIH0sCisgIDE2LCAweDhmMDAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyZSwweDQwIH0sCisgIDE2LCAweDhmMTAsIDAsIHsweDBhLDB4OTAsMHgwMiwweDA0LDB4MDAsMHg4MSwweDgwLDB4YTIsMHg0NCwweDBiLDB4OTEsMHgwMiwweDI1LDB4MDAsMHgxOSwweDQwIH0sCisgIDE2LCAweDhmMjAsIDAsIHsweDYyLDB4NDAsMHgwYiwweGI0LDB4MDIsMHg0NCwweDAwLDB4ODksMHgwMCwweDIwLDB4NDAsMHgwOCwweDkwLDB4ODIsMHhjNCwweDAxIH0sCisgIDE2LCAweDhmMzAsIDAsIHsweDgzLDB4MDIsMHgyOCwweDQwLDB4NDgsMHg5MCwweDgyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhmNDAsIDAsIHsweDAwLDB4MDQsMHgwNSwweDgwLDB4YjEsMHgwMCwweDZjLDB4NTEsMHgwOCwweDE0LDB4MWEsMHgwNSwweDAwLDB4OTMsMHgwMCwweDIwIH0sCisgIDE2LCAweDhmNTAsIDAsIHsweDQwLDB4OGIsMHgxNCwweDAyLDB4MDUsMHgwMCwweGIxLDB4MjAsMHgyMCwweDUwLDB4MGIsMHgxNCwweDA2LDB4MDQsMHg4MCwweDkxIH0sCisgIDE2LCAweDhmNjAsIDAsIHsweDIwLDB4MjAsMHg0MCwweDA5LDB4MTAsMHgwMiwweGM0LDB4YTgsMHg4MSwweDAwLDB4MjgsMHg0YSwweDA4LDB4OTAsMHg0YSwweDQyIH0sCisgIDE2LCAweDhmNzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwIH0sCisgIDE2LCAweDhmODAsIDAsIHsweDBlLDB4ODAsMHgwMywweDI4LDB4MDEsMHhjOCwweDUwLDB4MzIsMHg5NCwweDhiLDB4YTAsMHgwMywweDIwLDB4MDAsMHhiMCwweDUwIH0sCisgIDE2LCAweDhmOTAsIDAsIHsweDMyLDB4ODAsMHgwZiwweDgwLDB4MDcsMHg2MSwweDUxLDB4YzgsMHg1MCwweDIyLDB4MDAsMHgwYywweDAwLDB4MDMsMHhlMCwweDg0IH0sCisgIDE2LCAweDhmYTAsIDAsIHsweGM4LDB4MDQsMHgzYSwweDA4LDB4MGMsMHgwMCwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhmYjAsIDAsIHsweDk4LDB4OWQsMHhmNCwweDQwLDB4YmQsMHg0MSwweDNmLDB4NTAsMHgwZiwweGY0LDB4MDMsMHhmNSwweDEwLDB4ZmQsMHgwMCwweDNlIH0sCisgIDE2LCAweDhmYzAsIDAsIHsweDQwLDB4MGYsMHhkNCwweDAzLDB4ZjQsMHgwMCwweGZmLDB4MTAsMHgyZiwweDQwLDB4NGYsMHhkNCwweDQwLDB4YTQsMHg0OCwweGY5IH0sCisgIDE2LCAweDhmZDAsIDAsIHsweDEyLDB4M2YsMHg1YSwweDhlLDB4ZDIsMHg4MywweGY0LDB4YTgsMHhmNSwweDJjLDB4MzcsMHg0YSwweDBmLDB4ZDIsMHg4MywweGE2IH0sCisgIDE2LCAweDhmZTAsIDAsIHsweDEyLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZTYsMHg4MCwweGZkLDB4MjgsMHgzZiwweDRjIH0sCisgIDE2LCAweDhmZjAsIDAsIHsweDBmLDB4NTAsMHgwMywweDNjLDB4NDQsMHhjZCwweDQwLDB4M2YsMHhkMCwweDBkLDB4ZDAsMHgwMiwweDE0LDB4MDEsMHhmZCwweGEwIH0sCisgIDE2LCAweDkwMDAsIDAsIHsweDMxLDB4NDAsMHgwMywweGQwLDB4MDMsMHhlNywweDg5LDB4ZjksMHg5MCwweDdlLDB4NTAsMHgwYywweDk0LDB4MDMsMHhlNiwweGMwIH0sCisgIDE2LCAweDkwMTAsIDAsIHsweGM5LDB4MTAsMHgzMiwweDZkLDB4MGYsMHg5MSwweDAyLDB4YzYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkwMjAsIDAsIHsweDM4LDB4MTAsMHhlMCwweDgwLDB4YjgsMHgwMSwweDJlLDB4MGMsMHg4YiwweDg0LDB4ODIsMHgyMCwweDQyLDB4ODgsMHhhMCwweDZlIH0sCisgIDE2LCAweDkwMzAsIDAsIHsweDIwLDB4MDgsMHg4MCwweDAzLDB4NjAsMHgwMCwweDk4LDB4ZTgsMHgyMiwweDAwLDB4MDksMHg4MCwweDAyLDB4ZTMsMHhjMCwweGU4IH0sCisgIDE2LCAweDkwNDAsIDAsIHsweGQwLDB4MmUsMHgyOCwweDA4LDB4OGEsMHgyMywweGUyLDB4ODQsMHhkOCwweGEwLDB4MjIsMHgzZCwweDBiLDB4YzgsMHgwMiwweGNlIH0sCisgIDE2LCAweDkwNTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA1LDB4YzUsMHhiMCwweGIxLDB4MDAsMHgyYywweDQ4IH0sCisgIDE2LCAweDkwNjAsIDAsIHsweDBiLDB4MTMsMHgwMiwweDA0LDB4MDIsMHhiMSwweDIwLDB4MmUsMHg0MCwweDg4LDB4MTAsMHgyMiwweGM0LDB4MDAsMHhiMSwweDE0IH0sCisgIDE2LCAweDkwNzAsIDAsIHsweDI0LDB4NDAsMHgwYiwweDEwLDB4NTIsMHhjNCwweDAwLDB4YjEsMHgyMSwweDJkLDB4NDgsMHgwYSwweDUyLDB4MDIsMHhkNSwweDAwIH0sCisgIDE2LCAweDkwODAsIDAsIHsweGJkLDB4MDAsMHhhZCwweDQwLDB4MGIsMHg1MiwweDAyLDB4ZDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkwOTAsIDAsIHsweDE4LDB4NTUsMHhhNSwweDAwLDB4YjksMHg4MiwweDJlLDB4NDksMHg4YiwweGIwLDB4MTIsMHgyNCwweDEwLDB4OTksMHgwMiwweDJlIH0sCisgIDE2LCAweDkwYTAsIDAsIHsweDQwLDB4MDgsMHhiMiwweDAwLDB4NjUsMHgwMCwweDk5LDB4ODAsMHgyNiwweDQ0LDB4MDksMHg5MSwweDAyLDB4ZTQsMHgwOSwweGE5IH0sCisgIDE2LCAweDkwYjAsIDAsIHsweDA0LDB4MmUsMHg0NiwweDBhLDB4ZDQsMHgwMiwweGI0LDB4MDAsMHhiZCwweDQwLDB4MmYsMHg0MCwweDBiLDB4ZDAsMHgwMiwweGM2IH0sCisgIDE2LCAweDkwYzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTcsMHg0MCwweGY5LDB4ODAsMHgyZSwweDYyIH0sCisgIDE2LCAweDkwZDAsIDAsIHsweDBmLDB4OWMsMHg0MiwweDI0LDB4MDAsMHg5OSwweDAxLDB4MmUsMHg2OCwweDJjLDB4OTIsMHgwMiwweDY0LDB4MDAsMHhiOSwweDQwIH0sCisgIDE2LCAweDkwZTAsIDAsIHsweGI2LDB4NjAsMHgwZiwweDlhLDB4MDMsMHhlNCwweDAwLDB4YjksMHgwMCwweDJlLDB4NzAsMHgzZSwweDk5LDB4MDYsMHhlNCwweDAyIH0sCisgIDE2LCAweDkwZjAsIDAsIHsweGY5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5OCwweDAzLDB4ZTgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkxMDAsIDAsIHsweDY4LDB4MDEsMHhhNiwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgxZiwweDEyLDB4YWIsMHhlNCwweDAwLDB4ZTksMHg5MCwweDNlIH0sCisgIDE2LCAweDkxMTAsIDAsIHsweDQ5LDB4MGUsMHg5OCwweDAzLDB4ZTQsMHgwMCwweGYxLDB4MDAsMHgzYSwweDQwLDB4MGQsMHg5OCwweDAzLDB4ZTQsMHgwMCwweGY5IH0sCisgIDE2LCAweDkxMjAsIDAsIHsweDAxLDB4M2UsMHg2MCwweDA1LDB4OTAsMHgxMywweGU0LDB4MDAsMHg1OSwweDIwLDB4MzIsMHg0MCwweDhmLDB4OTEsMHgwMywweGRhIH0sCisgIDE2LCAweDkxMzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2OCwweDEwLDB4YTAsMHgwMCwweGM4LDB4MDgsMHgzZSwweDAxIH0sCisgIDE2LCAweDkxNDAsIDAsIHsweDBmLDB4ODQsMHg2MywweDAwLDB4MjIsMHhlOCwweDIwLDB4M2UsMHgxMywweDBmLDB4ODQsMHgwMywweGUxLDB4YzAsMHhkOCwweDRjIH0sCisgIDE2LCAweDkxNTAsIDAsIHsweDMyLDB4MDAsMHgwYywweDg0LDB4NDMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDIyLDB4MTAsMHgwZiwweDg0LDB4MDMsMHgwMCwweDAwIH0sCisgIDE2LCAweDkxNjAsIDAsIHsweGM4LDB4MDAsMHhiMiwweDAwLDB4MGMsMHhjMCwweDAzLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkxNzAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAwLDB4OGUsMHgwMCwweDJmLDB4ODYsMHg0YiwweGUwLDB4MDIsMHgzOSwweDA4LDB4OGUsMHgyMCwweDJkIH0sCisgIDE2LCAweDkxODAsIDAsIHsweDkwLDB4MGIsMHhlZCwweDkyLDB4ZjgsMHgwMiwweDhlLDB4ZTAsMHhhMywweDk4LDB4MDgsMHhlMCwweDAyLDB4ZTgsMHgwOCwweGJhIH0sCisgIDE2LCAweDkxOTAsIDAsIHsweDAwLDB4NjIsMHg4MCwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDAsMHgwMiwweDgwLDB4MDIsMHg4MCwweDQ4LDB4ZTAsMHgwMywweDRhIH0sCisgIDE2LCAweDkxYTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2OCwweDA1LDB4NGMsMHgwMCwweDgzLDB4MTAsMHgyYywweGYwIH0sCisgIDE2LCAweDkxYjAsIDAsIHsweDBhLDB4MTQsMHgyYSwweDBkLDB4MWEsMHhiMywweDAxLDB4MjQsMHhkMCwweDBiLDB4YmMsMHgzMiwweGNjLDB4MDgsMHgwMywweDAwIH0sCisgIDE2LCAweDkxYzAsIDAsIHsweDIwLDB4YzgsMHgwYiwweDMwLDB4MDIsMHhjYywweDAwLDB4YjMsMHgwMiwweDIyLDB4YzAsMHgwOSwweDMwLDB4MDIsMHgwYywweDExIH0sCisgIDE2LCAweDkxZDAsIDAsIHsweDgzLDB4MDAsMHgyMCwweGMwLDB4MjgsMHgyMCwweDAyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkxZTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDAxLDB4ODUsMHgwMCwweDJkLDB4MDAsMHgwYiwweDcwLDB4MDIsMHgxOCwweDMyLDB4ODYsMHgwMCwweDJkIH0sCisgIDE2LCAweDkxZjAsIDAsIHsweGMwLDB4MGIsMHg2MCwweDE2LDB4ZmUsMHgwNCwweDg2LDB4MDAsMHgyNywweGEwLDB4OGIsMHg3MCwweDQyLDB4ZGMsMHg4MCwweGI3IH0sCisgIDE2LCAweDkyMDAsIDAsIHsweDgwLDB4MjEsMHgwMSwweDA4LDB4ZjgsMHgwYSwweDE4LDB4MDAsMHg4NiwweDA4LDB4MjAsMHhhMCwweDA4LDB4ZTgsMHgwYSwweDY4IH0sCisgIDE2LCAweDkyMTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA4LDB4M2UsMHgwMiwweGM2LDB4ODAsMHgzZCwweGUwIH0sCisgIDE2LCAweDkyMjAsIDAsIHsweDBmLDB4NDgsMHgwMywweDA2LDB4MDQsMHhmNSwweDgyLDB4MzUsMHhlMCwweDBmLDB4NzgsMHgwMywweGRhLDB4MDAsMHhkMywweDgwIH0sCisgIDE2LCAweDkyMzAsIDAsIHsweDMxLDB4NjAsMHgwNywweDc4LDB4MDMsMHhkZSwweDIwLDB4ZjMsMHhiMCwweDgxLDB4ZTAsMHg0ZiwweDY4LDB4MDcsMHgwZSwweDAyIH0sCisgIDE2LCAweDkyNDAsIDAsIHsweGNmLDB4ODAsMHgzMSwweGUwLDB4MGMsMHg3OCwweDEzLDB4MmEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkyNTAsIDAsIHsweDA4LDB4MWQsMHhhZCwweGEwLDB4ZjksMHgwMCwweDNmLDB4MDAsMHgwZiwweGIwLDB4NTMsMHhmOCwweDEwLDB4YTksMHgwMCwweDNlIH0sCisgIDE2LCAweDkyNjAsIDAsIHsweDAwLDB4MGYsMHg4MCwweDAxLDB4ZWMsMHgwMCwweGZiLDB4MDIsMHgzYSwweGMwLDB4MGMsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZiIH0sCisgIDE2LCAweDkyNzAsIDAsIHsweDc0LDB4M2MsMHgwMCwweDBmLDB4MjAsMHgwMywweGU4LDB4MDAsMHhmYSwweDAwLDB4M2UsMHg4MCwweDBmLDB4MzAsMHgwMywweGMyIH0sCisgIDE2LCAweDkyODAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4ZmUsMHgwMiwweDhmLDB4ODAsMHgzNSwweGUwIH0sCisgIDE2LCAweDkyOTAsIDAsIHsweDhkLDB4ZDksMHgwMywweDJlLDB4YzQsMHhmNiwweDgwLDB4MzIsMHhhNCwweDBjLDB4YjgsMHgwMywweGRlLDB4MDAsMHhjZiwweDkwIH0sCisgIDE2LCAweDkyYTAsIDAsIHsweDNjLDB4ZTQsMHgwYywweGI4LDB4MDMsMHhmZSwweDY1LDB4ZmYsMHg4MCwweDBmLDB4ZWMsMHg4ZiwweGY4LDB4MDMsMHhmZSwweDAwIH0sCisgIDE2LCAweDkyYjAsIDAsIHsweGM1LDB4ODAsMHgzMywweGUwLDB4MGYsMHg2OCwweDAzLDB4MTAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkyYzAsIDAsIHsweGFhLDB4MTEsMHg5YywweDgwLDB4ODQsMHhiMCwweDIwLDB4MjAsMHgyOSwweDczLDB4MGEsMHgwZSwweDgyLDB4YTIsMHhhMCwweGEyIH0sCisgIDE2LCAweDkyZDAsIDAsIHsweGEwLDB4NGYsMHgzYiwweDAzLDB4ODcsMHg4NCwweGIyLDB4ODAsMHgyYywweGEwLDB4MGEsMHg3ZCwweDAyLDB4ZGUsMHg4MCwweGY3IH0sCisgIDE2LCAweDkyZTAsIDAsIHsweDIwLDB4MjUsMHgwNiwweDA4LDB4NzAsMHgwMiwweGM4LDB4NDAsMHg4NCwweDAwLDB4MzUsMHg4MCwweDBiLDB4NjAsMHgwMywweDZhIH0sCisgIDE2LCAweDkyZjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgxMCwweDg2LDB4MzgsMHgyNywweGMwIH0sCisgIDE2LCAweDkzMDAsIDAsIHsweDQ5LDB4NTQsMHgwNiwweDU0LDB4NDAsMHgxZCwweDIwLDB4MjEsMHhjYSwweDA5LDB4NjEsMHg0MCwweGY4LDB4ODAsMHhiNywweDIwIH0sCisgIDE2LCAweDkzMTAsIDAsIHsweDJmLDB4MDAsMHg4OSwweDcwLDB4MTIsMHhkYywweDgxLDB4YjcsMHgwNCwweDJkLDB4YzksMHgwYSwweDYwLDB4MDIsMHhjYywweDAwIH0sCisgIDE2LCAweDkzMjAsIDAsIHsweDhkLDB4MDAsMHgyZCwweGMwLDB4MGIsMHhmOCwweDAyLDB4MDQsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkzMzAsIDAsIHsweDYwLDB4MTQsMHhjZCwweDI4LDB4ODAsMHgwMCwweDI0LDB4MDAsMHgwOSwweGIwLDB4MjIsMHg0YywweDAyLDB4YTEsMHgwMSwweDIwIH0sCisgIDE2LCAweDkzNDAsIDAsIHsweDMwLDB4MWIsMHgyMywweDAyLDB4YWYsMHgyMCwweGIzLDB4MDgsMHgyYywweDgwLDB4MWIsMHgzMCwweDAwLDB4Y2MsMHgwNCwweGEzIH0sCisgIDE2LCAweDkzNTAsIDAsIHsweDAxLDB4MjYsMHgzMCwweDA4LDB4YWMsMHgyMiwweGU4LDB4MDIsMHg4MCwweDA4LDB4MmUsMHg4MCwweDRiLDB4YjQsMHgwMiwweDU4IH0sCisgIDE2LCAweDkzNjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmMsMHgxMCwweDhiLDB4ODAsMHgzNiwweGYwIH0sCisgIDE2LCAweDkzNzAsIDAsIHsweDJkLDB4YmMsMHgwYiwweDZjLDB4MDEsMHhkYSwweDA0LDB4MjIsMHg0MCwweDdkLDB4OTQsMHgyMiwweGU0LDB4MDAsMHhhYiwweDQ0IH0sCisgIDE2LCAweDkzODAsIDAsIHsweDJlLDB4YzAsMHgwOSwweGI4LDB4MDIsMHhmYywweDAwLDB4YmYsMHgwMCwweDNlLDB4ZjAsMHhjYSwweDkyLDB4MDIsMHhlNCwweDAyIH0sCisgIDE2LCAweDkzOTAsIDAsIHsweGNiLDB4MDAsMHg2ZSwweDQwLDB4MGYsMHg4NCwweDAxLDB4MmUsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkzYTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwMCwweDNhLDB4ZTAsMHgyZSwweGJjLDB4MDMsMHg5OCwweDA4LDB4ZWEsMHg0MCwweDM2IH0sCisgIDE2LCAweDkzYjAsIDAsIHsweDQzLDB4OGMsMHg5MCwweDAzLDB4YTQsMHg0NCwweDJhLDB4NDAsMHgzZSwweDEwLDB4MGUsMHhiNSwweDgzLDB4ZWMsMHgxNCwweGZiIH0sCisgIDE2LCAweDkzYzAsIDAsIHsweDAwLDB4MjYsMHgwMCwweDBlLDB4OTIsMHgwMywweGUwLDB4NDAsMHhmYSwweDAwLDB4MTYsMHgwMCwweDBmLDB4ODAsMHgxMywweGUwIH0sCisgIDE2LCAweDkzZDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZWMsMHgwMiwweGZhLDB4ODAsMHgzZiwweGUyIH0sCisgIDE2LCAweDkzZTAsIDAsIHsweDBmLDB4YjAsMHgwYiwweDI0LDB4MDAsMHhlZiwweDkyLDB4YmIsMHhlMCwweDFjLDB4ZDAsMHgwMywweDc0LDB4MDAsMHhjZiwweDA1IH0sCisgIDE2LCAweDkzZjAsIDAsIHsweDNiLDB4NDAsMHgwZiwweGM4LDB4MDMsMHg1YywweDAwLDB4Y2YsMHgwMCwweDMyLDB4YzIsMHg0ZCwweGMxLDB4MjMsMHgzNCwweDQwIH0sCisgIDE2LCAweDk0MDAsIDAsIHsweGNmLDB4MDAsMHgxNywweDQ0LDB4MGMsMHhkMSwweDgzLDB4MDAsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk0MTAsIDAsIHsweDgxLDB4MDQsMHg2YywweDAwLDB4OGIsMHg4NCwweDJlLDB4NTQsMHgwYiwweGJjLDB4MGEsMHgyOSwweDgwLDB4OGIsMHg4MCwweDMyIH0sCisgIDE2LCAweDk0MjAsIDAsIHsweDAwLDB4MDgsMHg5YywweDAzLDB4YTcsMHgwMCwweGFiLDB4ODQsMHgyZSwweDdjLDB4MGIsMHg4MCwweDAyLDB4MmMsMHgxMCwweGRiIH0sCisgIDE2LCAweDk0MzAsIDAsIHsweDAxLDB4MzYsMHgwMCwweDA4LDB4ODAsMHgwMiwweDIwLDB4MDAsMHg4MiwweDAwLDB4MjIsMHgwMCwweDA4LDB4OTAsMHgwMiwweDI0IH0sCisgIDE2LCAweDk0NDAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MGMsMHgwMCwweDg5LDB4MTAsMHg2NiwweDkwIH0sCisgIDE2LCAweDk0NTAsIDAsIHsweDBiLDB4YjgsMHgwMiwweDZlLDB4MTIsMHhhMywweDQxLDB4MjAsMHgwNCwweDBhLDB4OTgsMHgyMiwweGUyLDB4MDAsMHg4OSwweDE5IH0sCisgIDE2LCAweDk0NjAsIDAsIHsweDJlLDB4YzAsMHg0YiwweDMxLDB4MjIsMHg2YywweDA4LDB4ODMsMHgwMCwweDIyLDB4YzAsMHgwOSwweDkwLDB4MDIsMHgyNCwweDAwIH0sCisgIDE2LCAweDk0NzAsIDAsIHsweDg5LDB4MDAsMHgyYSwweDQwLDB4MDgsMHg4MCwweDAyLDB4MjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk0ODAsIDAsIHsweDA4LDB4MTAsMHgwYywweDAwLDB4ODAsMHgyMCwweDJjLDB4MGUsMHgxYiwweDMwLDB4MDIsMHgwNCwweDQxLDB4ODAsMHgyMCwweDIwIH0sCisgIDE2LCAweDk0OTAsIDAsIHsweDEyLDB4MTgsMHgxNiwweDQyLDB4MDAsMHg1MCwweGEwLDB4NDAsMHgyYywweDg4LDB4MWIsMHgzMCwweDAyLDB4MGMsMHg4MSwweDkzIH0sCisgIDE2LCAweDk0YTAsIDAsIHsweDAwLDB4MjQsMHgwMCwweDA4LDB4MTAsMHgyYSwweDAwLDB4MGEsMHg4OCwweDAwLDB4MjgsMHgwMCwweDI4LDB4MDAsMHgwYSwweDAyIH0sCisgIDE2LCAweDk0YjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBjLDB4N2MsMHgxMSwweGU4LDB4MDAsMHgyNiwweDk4IH0sCisgIDE2LCAweDk0YzAsIDAsIHsweDBmLDB4YjAsMHgxMywweDIxLDB4MGMsMHhlYiwweDYwLDB4M2EsMHhkOCwweDI4LDB4ODQsMHhhMiwweGUxLDB4ODAsMHhjOCwweDIwIH0sCisgIDE2LCAweDk0ZDAsIDAsIHsweDNlLDB4NWUsMHgxZiwweDgyLDB4MDMsMHg3YywweDAwLDB4Y2YsMHgwMCwweDMyLDB4YzAsMHg0ZCwweDgwLDB4MDcsMHgyNSwweDAwIH0sCisgIDE2LCAweDk0ZTAsIDAsIHsweGM5LDB4MDAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDAzLDB4MDAsMHgwMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk0ZjAsIDAsIHsweGExLDB4MTEsMHhmYywweDAwLDB4ZjgsMHgxMywweDFlLDB4MDAsMHgwYiwweGYwLDB4MDEsMHhmMCwweGQwLDB4ZjksMHgxOSwweDFmIH0sCisgIDE2LCAweDk1MDAsIDAsIHsweDA4LDB4NGYsMHhjMCwweDEzLDB4YTEsMHgwMCwweGY4LDB4NjIsMHgzZiwweGMwLDB4MGIsMHhjNCwweDA3LDB4ZWQsMHgwMCwweGZmIH0sCisgIDE2LCAweDk1MTAsIDAsIHsweDAwLDB4M2YsMHgwMCwweDBmLDB4YzAsMHgyMywweGYwLDB4YTAsMHhmYywweDAwLDB4MzMsMHgwMCwweDBmLDB4ZDAsMHgwMywweGU4IH0sCisgIDE2LCAweDk1MjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHgwMCwweGZmLDB4MGMsMHgzZiwweDIwIH0sCisgIDE2LCAweDk1MzAsIDAsIHsweDBjLDB4YzksMHgwMywweDMyLDB4MDAsMHhjZiwweDM4LDB4M2YsMHhkMCwweDBmLDB4NDgsMHgwMywweGZjLDB4YTAsMHhjZSwweDIyIH0sCisgIDE2LCAweDk1NDAsIDAsIHsweDMzLDB4MDAsMHgwZiwweGMxLDB4MDMsMHgzYywweDAwLDB4ZmYsMHgwMCwweDNkLDB4YzQsMHg0YywweGMwLDB4MjMsMHg4YywweGU0IH0sCisgIDE2LCAweDk1NTAsIDAsIHsweGZmLDB4MTAsMHgzNywweDIwLDB4MDgsMHhmMSwweDAzLDB4ZjAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk1NjAsIDAsIHsweDgwLDB4MTAsMHhmZSwweDAwLDB4YmYsMHg4MCwweDJlLDB4NzQsMHgwNSwweDIyLDB4MDIsMHhhMiwweDEwLDB4ZGYsMHg2MSwweDJmIH0sCisgIDE2LCAweDk1NzAsIDAsIHsweGQwLDB4OGIsMHg5MCwweDAyLDB4M2QsMHhhNCwweGFhLDB4OTAsMHgyMiwweGY0LDB4MGIsMHgwNywweDEyLDB4MWQsMHgyMCwweGJiIH0sCisgIDE2LCAweDk1ODAsIDAsIHsweGMwLDB4MmYsMHhkOCwweDg4LDB4OTcsMHg4MiwweGZkLDB4ODAsMHhlZiwweDcyLDB4MjIsMHgwOCwweDI4LDB4ZjYsMHgyMywweGUwIH0sCisgIDE2LCAweDk1OTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHg0MCwweGIzLDB4MDAsMHgyYywweDAwIH0sCisgIDE2LCAweDk1YTAsIDAsIHsweDA4LDB4ODIsMHgwMiwweDIyLDB4MDAsMHg4MywweDAxLDB4MDgsMHhjYywweDhiLDB4MjAsMHg4MiwweGNjLDB4MDAsMHg5MCwweDAwIH0sCisgIDE2LCAweDk1YjAsIDAsIHsweDIwLDB4MDAsMHg0YiwweDEyLDB4MDIsMHgwZCwweDgwLDB4YjMsMHg0MCwweDJjLDB4ZDgsMHgwOCwweDIwLDB4NDIsMHg4YywweDgwIH0sCisgIDE2LCAweDk1YzAsIDAsIHsweGIzLDB4MjAsMHgyNiwweDAyLDB4MTgsMHgzMywweDI2LDB4ZTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk1ZDAsIDAsIHsweGMwLDB4MTUsMHhhYywweDA5LDB4YmIsMHgwMCwweDJlLDB4NjAsMHgwOCwweDgwLDB4MDIsMHhhMiwweDAwLDB4OWIsMHgwMCwweDJlIH0sCisgIDE2LCAweDk1ZTAsIDAsIHsweGMwLDB4MGIsMHhhYywweDAyLDB4MmMsMHgwMCwweGJhLDB4MDYsMHgyMiwweGMyLDB4MGIsMHg5NCwweDAyLDB4YWMsMHgxMCwweGJiIH0sCisgIDE2LCAweDk1ZjAsIDAsIHsweDAwLDB4MmUsMHhjMSwweDA4LDB4YTgsMHgwMiwweGVjLDB4MDAsMHhhYiwweDAwLDB4MjIsMHgwMCwweDA4LDB4YjAsMHgwNiwweGYwIH0sCisgIDE2LCAweDk2MDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MCwweDE1LDB4ZWMsMHgwMCwweGZiLDB4MDQsMHgzZSwweDYwIH0sCisgIDE2LCAweDk2MTAsIDAsIHsweDI4LDB4ODIsMHgxMywweDBlLDB4MDgsMHhjYiwweDAwLDB4M2EsMHhjMCwweDBmLDB4OGMsMHgwMywweGVjLDB4MTEsMHhkYiwweDIwIH0sCisgIDE2LCAweDk2MjAsIDAsIHsweGIyLDB4OTAsMHg0YiwweGE4LDB4MGIsMHgyYywweDAwLDB4YmIsMHgwMCwweDJjLDB4YzAsMHgwYywweDg4LDB4MTMsMHhhYywweDAwIH0sCisgIDE2LCAweDk2MzAsIDAsIHsweGYzLDB4MDAsMHgzNiwweDA2LDB4NDgsMHhiMCwweDEyLDB4YzQsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk2NDAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4ZmIsMHgwOCwweDNkLDB4NDAsMHg4ZiwweGVhLDB4MDEsMHhmNCwweDAwLDB4ZmYsMHgwMSwweDJmIH0sCisgIDE2LCAweDk2NTAsIDAsIHsweGMwLDB4MGYsMHhkMCwweDIyLDB4ZmMsMHgwNCwweGFmLDB4MDAsMHgzZiwweGMwLDB4OGYsMHhlOSwweDAzLDB4N2MsMHgwMCwweGZmIH0sCisgIDE2LCAweDk2NjAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBmLDB4OTAsMHg0MywweGZjLDB4MjAsMHhlZiwweDAyLDB4M2YsMHgwMCwweDhmLDB4ZjAsMHgwMywweGI4IH0sCisgIDE2LCAweDk2NzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1MCwweDEwLDB4YWMsMHgwOCwweGViLDB4MDAsMHgxMiwweDQwIH0sCisgIDE2LCAweDk2ODAsIDAsIHsweDBmLDB4OTAsMHgwMywweDI4LDB4MjAsMHhhYiwweDAwLDB4M2EsMHhjMCwweDhmLDB4ODUsMHg4MywweGFjLDB4MTAsMHhmMywweDUwIH0sCisgIDE2LCAweDk2OTAsIDAsIHsweDMyLDB4OTAsMHg0YywweDM0LDB4MTMsMHg2YywweDAwLDB4ZmIsMHgwMCwweDNlLDB4YzAsMHgwYywweDk4LDB4MDMsMHgyYywweDQwIH0sCisgIDE2LCAweDk2YTAsIDAsIHsweGViLDB4ODAsMHgzMiwweDEyLDB4MGQsMHhiMCwweDBiLDB4NTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk2YjAsIDAsIHsweDg4LDB4MDEsMHgzYywweDEwLDB4MGYsMHgwNSwweGEyLDB4NTAsMHgwYywweDEwLDB4MDIsMHgyMiwweDEwLDB4OGYsMHgwMCwweDIzIH0sCisgIDE2LCAweDk2YzAsIDAsIHsweGMwLDB4MGIsMHg4OCwweDEyLDB4M2MsMHgwMCwweDliLDB4ODIsMHgyMiwweGMwLDB4MDgsMHhiMCwweDAyLDB4M2MsMHgwMCwweDhmIH0sCisgIDE2LCAweDk2ZDAsIDAsIHsweGEwLDB4MmYsMHhjMCwweDA4LDB4YjAsMHgwMiwweDNjLDB4MDgsMHg4ZiwweDAyLDB4MjAsMHgwMCwweDA4LDB4ZjAsMHgwMywweDI2IH0sCisgIDE2LCAweDk2ZTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGQsMHgyMCwweDkzLDB4MDAsMHgyMCwweGIyIH0sCisgIDE2LCAweDk2ZjAsIDAsIHsweDBiLDB4MTAsMHgwMiwweDAxLDB4MDAsMHhhMywweDAwLDB4NjgsMHhjMCwweDBiLDB4ODQsMHgwMiwweGFjLDB4MDAsMHhiMywweDgwIH0sCisgIDE2LCAweDk3MDAsIDAsIHsweDIwLDB4NDAsMHgwYSwweDMwLDB4MDIsMHg0YywweDAwLDB4YTMsMHgwNCwweDJjLDB4YzAsMHgwOCwweDAwLDB4MDIsMHgwZCwweDAwIH0sCisgIDE2LCAweDk3MTAsIDAsIHsweGEzLDB4MDAsMHgyMCwweDI0LDB4MDgsMHgzMCwweDAyLDB4MzgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk3MjAsIDAsIHsweDcwLDB4MDEsMHgxYywweDIwLDB4OTcsMHg4MCwweDIzLDB4NjAsMHgwOCwweDc4LDB4MTIsMHgzYSwweDAwLDB4ODMsMHg5MSwweDI5IH0sCisgIDE2LCAweDk3MzAsIDAsIHsweGU0LDB4MGIsMHg1OSwweDAyLDB4MWUsMHgwMCwweDk3LDB4OTAsMHgyMCwweGZjLDB4MGEsMHg3OCwweDAyLDB4MWUsMHgwMCwweDg3IH0sCisgIDE2LCAweDk3NDAsIDAsIHsweDkwLDB4MmQsMHhlMCwweDE5LDB4NTksMHgwMiwweDFlLDB4ODAsMHg4MywweDgwLDB4NjEsMHhhMCwweDA4LDB4NzgsMHgwMiwweDE4IH0sCisgIDE2LCAweDk3NTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHg0MCwweGQzLDB4MzIsMHgzMCwweDA2IH0sCisgIDE2LCAweDk3NjAsIDAsIHsweDBmLDB4MzAsMHgwMywweDA0LDB4NjQsMHhlMywweDAxLDB4MzgsMHhjNCwweDFmLDB4MzAsMHgwNywweDhjLDB4MTgsMHhmMSwweDAwIH0sCisgIDE2LCAweDk3NzAsIDAsIHsweDMwLDB4NGMsMHgwZSwweDMwLDB4MDMsMHg0YywweDAwLDB4ZTMsMHgwMCwweDJjLDB4YzAsMHgwYywweDIwLDB4MDMsMHgwZSwweDAwIH0sCisgIDE2LCAweDk3ODAsIDAsIHsweGUzLDB4MDAsMHgzMiwweDA4LDB4MGMsMHhiMSwweDAzLDB4MTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk3OTAsIDAsIHsweDQwLDB4MWQsMHg5YywweDgwLDB4ZWYsMHgxMCwweDNkLDB4NDQsMHg0ZiwweGYxLDB4MDcsMHhjYywweDAwLDB4ZmYsMHgwOCwweDM2IH0sCisgIDE2LCAweDk3YTAsIDAsIHsweGM2LDB4Y2YsMHhiMCwweDAzLDB4ZmMsMHgwMCwweDk3LDB4MDAsMHhiZSwweGNjLDB4MGQsMHhiMSwweDAzLDB4ZmQsMHgwNCwweGZmIH0sCisgIDE2LCAweDk3YjAsIDAsIHsweDBjLDB4M2YsMHhkMiwweDllLDB4ZTAsMHg0YiwweGZkLDB4MjAsMHhmZiwweDAyLDB4M2YsMHg4MCwweDBlLDB4ZjAsMHgxMywweGQwIH0sCisgIDE2LCAweDk3YzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4ZWMsMHhjMCwweGNiLDB4MjgsMHgzZSwweGMwIH0sCisgIDE2LCAweDk3ZDAsIDAsIHsweDBmLDB4ODAsMHgwMywweGVjLDB4MDAsMHhmYiwweDAxLDB4MzIsMHhlOSwweDBjLDB4MjgsMHgwMywweDJjLDB4MDAsMHhmYiwweDAwIH0sCisgIDE2LCAweDk3ZTAsIDAsIHsweDMyLDB4YzAsMHgwYywweGI0LDB4ODMsMHgyYywweDAxLDB4ZWYsMHgwMCwweGIyLDB4YzgsMHgwYywweDIwLDB4MDMsMHg2ZCwweDAwIH0sCisgIDE2LCAweDk3ZjAsIDAsIHsweGNiLDB4MTAsMHgzZSwweDAwLDB4MGYsMHhiMiwweDAzLDB4ZWEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk4MDAsIDAsIHsweGM4LDB4OTEsMHg5YywweGM0LDB4ODcsMHg2MCwweDJkLDB4YzAsMHgwYiwweDYwLDB4MDIsMHhkYywweDAwLDB4YjcsMHgxMiwweDIwIH0sCisgIDE2LCAweDk4MTAsIDAsIHsweGNjLDB4MGEsMHg3MCwweDAyLDB4MWMsMHhjMCwweGIzLDB4MDAsMHhhMCwweGMwLDB4YzgsMHg3MCwweDIyLDB4MWMsMHg4MCwweGI3IH0sCisgIDE2LCAweDk4MjAsIDAsIHsweDI0LDB4MjEsMHhjOCwweDQ4LDB4NTAsMHgwMiwweDBjLDB4ODAsMHg4NywweDEwLDB4MmQsMHg0MCwweDBiLDB4NzIsMHg4MiwweGYyIH0sCisgIDE2LCAweDk4MzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MSwweDAwLDB4OGUsMHgwMiwweDg3LDB4ODAsMHgyZCwweGUwIH0sCisgIDE2LCAweDk4NDAsIDAsIHsweDBiLDB4NzgsMHgxMiwweGRlLDB4MDAsMHhiNywweGEwLDB4MjEsMHhlMCwweDA4LDB4ZjgsMHg4ZSwweDFlLDB4NDAsMHhiNywweDg4IH0sCisgIDE2LCAweDk4NTAsIDAsIHsweDIxLDB4ZTAsMHgwOCwweDM4LDB4MDIsMHgxZSwweDQwLDB4YjMsMHhhMSwweDIwLDB4ZTgsMHg0OCwweGY4LDB4ODIsMHg1ZSwweDAyIH0sCisgIDE2LCAweDk4NjAsIDAsIHsweDg3LDB4ODAsMHgyZCwweDIyLDB4MGIsMHg3OSwweDAyLDB4ZTAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk4NzAsIDAsIHsweDA4LDB4MDQsMHhjYywweDA0LDB4ODMsMHgwMiwweDJjLDB4ZDQsMHgwYiwweDMwLDB4MDIsMHhjYywweDAwLDB4YjMsMHgwMCwweGEwIH0sCisgIDE2LCAweDk4ODAsIDAsIHsweGMwLDB4OGEsMHgzOCwweDA2LDB4MGMsMHgwMCwweGIzLDB4ODAsMHgyMCwweGUxLDB4NDgsMHgzOSwweDEyLDB4MmMsMHgwMCwweGIzIH0sCisgIDE2LCAweDk4OTAsIDAsIHsweDAwLDB4MjIsMHhjMCwweDA4LDB4YjAsMHg4MiwweDZjLDB4MDAsMHg4MywweDAwLDB4MmMsMHg0OCwweDBiLDB4MzAsMHgwMiwweGMyIH0sCisgIDE2LCAweDk4YTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDA1LDB4YTgsMHgwMCwweGNhLDB4MDAsMHgzZiwweGEwIH0sCisgIDE2LCAweDk4YjAsIDAsIHsweDBmLDB4ZTQsMHgwMywweGQ4LDB4MDAsMHhmYSwweDAwLDB4MzIsMHg4MCwweDBjLDB4ZTgsMHgwMywweDI4LDB4MDAsMHhmYSwweDQwIH0sCisgIDE2LCAweDk4YzAsIDAsIHsweDMyLDB4YTgsMHgyYywweGEwLDB4MDksMHgyOCwweDA4LDB4ZjIsMHgwMCwweDMyLDB4ODAsMHgwYywweGU0LDB4MDMsMHg2OCwweDAwIH0sCisgIDE2LCAweDk4ZDAsIDAsIHsweGNhLDB4MDAsMHgzZiwweDgwLDB4MGYsMHhhMCwweDAzLDB4ZmIsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk4ZTAsIDAsIHsweDQ4LDB4MDAsMHhjMCwweDAwLDB4ZjgsMHgwMSwweDNlLDB4MTIsMHgwYiwweDgwLDB4MDMsMHhlMCwweDQwLDB4ZjgsMHgwMCwweDNlIH0sCisgIDE2LCAweDk4ZjAsIDAsIHsweDAwLDB4NGYsMHg4NCwweDAzLDB4ZTAsMHgwNCwweGYwLDB4MDgsMHgzZSwweDAwLDB4NGYsMHgwMCwweDAzLDB4ZTAsMHgwMCwweGY4IH0sCisgIDE2LCAweDk5MDAsIDAsIHsweDQxLDB4M2UsMHgwMCwweDJmLDB4ODQsMHgwMywweGEwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH0sCisgIDE2LCAweDk5MTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTYsMHgwMCwweGM5LDB4MTIsMHgzZSwweDUwIH0sCisgIDE2LCAweDk5MjAsIDAsIHsweDhmLDB4OTAsMHg4MywweGU0LDB4MjAsMHhjMSwweDAwLDB4M2EsMHg0MSwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwIH0sCisgIDE2LCAweDk5MzAsIDAsIHsweDMwLDB4NjgsMHgwYywweDkwLDB4MDMsMHgyNCwweDAwLDB4ZDksMHgwMCwweDNhLDB4NDAsMHgwZSwweDk4LDB4MDMsMHgyNCwweDAwIH0sCisgIDE2LCAweDk5NDAsIDAsIHsweGM5LDB4OTAsMHgzZSwweDY5LDB4MGMsMHgxMCwweDAzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk5NTAsIDAsIHsweDgwLDB4MDQsMHg2NywweDRhLDB4ODksMHg4MCwweDJlLDB4NTAsMHgwYiwweDkwLDB4MDIsMHhlNCwweDgwLDB4YTksMHgwMCwweDIyIH0sCisgIDE2LCAweDk5NjAsIDAsIHsweDQwLDB4MGIsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDEsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgxMCwweDg5IH0sCisgIDE2LCAweDk5NzAsIDAsIHsweDAwLDB4MjIsMHg0MCwweDA4LDB4OTMsMHgwMiwweDI0LDB4MjIsMHg4OSwweDQyLDB4MmMsMHg2MCwweDQ4LDB4OTAsMHgwMiwweDIwIH0sCisgIDE2LCAweDk5ODAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4MjQsMHgwMCwweDk5LDB4MDAsMHgyZSwweDQwIH0sCisgIDE2LCAweDk5OTAsIDAsIHsweDBiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHg4OSwweDAwLDB4MmEsMHg0MCwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAwIH0sCisgIDE2LCAweDk5YTAsIDAsIHsweDIzLDB4NDAsMHgwOCwweGQwLDB4MDIsMHgyNCwweDAwLDB4OTksMHgwMCwweDJhLDB4NDAsMHgwYSwweDkwLDB4MDYsMHgyNCwweDQwIH0sCisgIDE2LCAweDk5YjAsIDAsIHsweDg5LDB4NDEsMHgyZSwweDQwLDB4MDgsMHg5MCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk5YzAsIDAsIHsweDA4LDB4MDQsMHgwYywweDgwLDB4OTEsMHgyMCwweDJjLDB4NDgsMHgwYiwweDEwLDB4MDIsMHhjNCwweDAwLDB4YTEsMHgyMCwweDIwIH0sCisgIDE2LCAweDk5ZDAsIDAsIHsweDQ4LDB4MGIsMHgxMCwweDAyLDB4YzQsMHg4MCwweGIxLDB4MjAsMHhhMSwweDQ5LDB4MDgsMHg1MiwweDRhLDB4MDQsMHg4MCwweDgxIH0sCisgIDE2LCAweDk5ZTAsIDAsIHsweDAwLDB4MjAsMHg0OCwweDQ4LDB4MTIsMHgwYSwweDA0LDB4ODAsMHg4MSwweDIwLDB4MmMsMHg0MCwweDI4LDB4MTIsMHgwMiwweDAyIH0sCisgIDE2LCAweDk5ZjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwOCwweGQ4LDB4MDQsMHgzZSwweDgwIH0sCisgIDE2LCAweDlhMDAsIDAsIHsweDBmLDB4ODUsMHgwMywweGUwLDB4MDAsMHhjMCwweDUwLDB4M2EsMHgxNCwweDBmLDB4YTUsMHgwMywweGUxLDB4NDAsMHhmOCwweDAyIH0sCisgIDE2LCAweDlhMTAsIDAsIHsweDMyLDB4ODAsMHgyYywweGM1LDB4MDMsMHgyMSwweDQwLDB4ZGEsMHgwMCwweDNhLDB4MTQsMHgwZSwweDg1LDB4NDMsMHgyMSwweDQwIH0sCisgIDE2LCAweDlhMjAsIDAsIHsweGM4LDB4NTIsMHgzZSwweDE0LDB4MGMsMHg4NSwweDBiLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlhMzAsIDAsIHsweDg4LDB4MWQsMHhlNCwweDQ0LDB4ZTksMHgxMCwweDNmLDB4NDQsMHg0ZiwweGQwLDB4MDIsMHhmYywweDAwLDB4ZjksMHgxMiwweDNlIH0sCisgIDE2LCAweDlhNDAsIDAsIHsweDQ0LDB4MGYsMHhkMCwweDAzLDB4ZTQsMHg0MCwweGZkLDB4MTAsMHgzZSwweDQ0LDB4NGYsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGU5IH0sCisgIDE2LCAweDlhNTAsIDAsIHsweDQwLDB4M2UsMHg0NCwweDBmLDB4ZDEsMHgwMywweGU0LDB4NDAsMHhmOSwweDEyLDB4M2YsMHg0MCwweDBmLDB4OTEsMHgwMywweGU2IH0sCisgIDE2LCAweDlhNjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4ZjYsMHhhMCwweGZkLDB4ODAsMHhiMywweDQwIH0sCisgIDE2LCAweDlhNzAsIDAsIHsweDBjLDB4MTAsMHgwMywweDE0LDB4MDAsMHhmZCwweGEwLDB4MzIsMHg0MCwweDBmLDB4ZDEsMHgwMywweGU0LDB4MDAsMHhmNSwweDg2IH0sCisgIDE2LCAweDlhODAsIDAsIHsweDMzLDB4NjAsMHgyYywweDlhLDB4ODMsMHgyNCwweDA0LDB4ZmQsMHhhOCwweDIyLDB4NDAsMHgwZCwweDUwLDB4NDMsMHhmNCwweDAwIH0sCisgIDE2LCAweDlhOTAsIDAsIHsweGZkLDB4MDAsMHgzMywweDQwLDB4MGYsMHg5MCwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlhYTAsIDAsIHsweDc4LDB4MTAsMHhlMSwweDAwLDB4YjgsMHgwMCwweDIyLDB4MDAsMHgyOCwweDgwLDB4MDIsMHgyMCwweDAwLDB4YjgsMHgwMCwweGEyIH0sCisgIDE2LCAweDlhYjAsIDAsIHsweDAwLDB4MGIsMHg4YSwweDEyLDB4ZTAsMHgwMCwweGI4LDB4MDQsMHgyMiwweDE0LDB4MDgsMHg4NCwweDAyLDB4MjAsMHgwMCwweGI4IH0sCisgIDE2LCAweDlhYzAsIDAsIHsweDQwLDB4MjAsMHgwMCwweDg4LDB4ODAsMHgwMiwweGUwLDB4MDAsMHhiOCwweDAwLDB4YTIsMHgwMCwweDBiLDB4ODAsMHgwMiwweDBlIH0sCisgIDE2LCAweDlhZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA1LDB4YzQsMHgwMCwweGIxLDB4NDIsMHgyMCwweDQwIH0sCisgIDE2LCAweDlhZTAsIDAsIHsweDA4LDB4MTAsMHgwMiwweDA0LDB4MDAsMHhiMSwweDQwLDB4MjAsMHg0MCwweDBiLDB4MTAsMHgwNiwweGM0LDB4MDAsMHhiMSwweDQwIH0sCisgIDE2LCAweDlhZjAsIDAsIHsweDI0LDB4NDAsMHgwOCwweDEwLDB4MDIsMHg0NCwweDA0LDB4YjEsMHgwMCwweDYwLDB4NDAsMHgwOSwweDEwLDB4MDIsMHhjNCwweDAwIH0sCisgIDE2LCAweDliMDAsIDAsIHsweGIxLDB4MDAsMHgyMCwweDQwLDB4MGIsMHgxMCwweDAyLDB4MTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDliMTAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4YjksMHgwMiwweDIyLDB4NjAsMHgwOCwweDk0LDB4MDIsMHgyNCwweDAwLDB4YjksMHgwMSwweDIyIH0sCisgIDE2LCAweDliMjAsIDAsIHsweDQwLDB4MGIsMHg5MCwweDA2LDB4ZTQsMHgwMCwweGI5LDB4MjAsMHgyNiwweDQwLDB4MDgsMHg5NCwweDAyLDB4NjQsMHgwOCwweGI5IH0sCisgIDE2LCAweDliMzAsIDAsIHsweDAwLDB4MjIsMHg0MCwweDA4LDB4OTIsMHgwMiwweGVjLDB4MDgsMHhiOSwweDA0LDB4MjIsMHg0MSwweDBiLDB4MTAsMHgwMiwweDA2IH0sCisgIDE2LCAweDliNDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgxMCwweGYxLDB4MDAsMHgzMiwweDYwIH0sCisgIDE2LCAweDliNTAsIDAsIHsweDBjLDB4OTQsMHgwYiwweDI1LDB4MDAsMHhmOSwweDAwLDB4MzIsMHg0MCwweDhmLDB4OTQsMHhkMywweGU0LDB4MDAsMHhmOSwweDAwIH0sCisgIDE2LCAweDliNjAsIDAsIHsweDM2LDB4NDAsMHg0YywweDkwLDB4MGIsMHg2NCwweDAwLDB4ZjEsMHgwMCwweDMyLDB4NDAsMHgwZCwweDkyLDB4MTIsMHhlNCwweDAwIH0sCisgIDE2LCAweDliNzAsIDAsIHsweGY5LDB4MDAsMHgzMiwweDQwLDB4MGYsMHg5MCwweDBiLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDliODAsIDAsIHsweDY4LDB4NDEsMHhhNCwweDAwLDB4ZjksMHgwMCwweDNjLDB4NDAsMHg4ZiwweDkyLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlIH0sCisgIDE2LCAweDliOTAsIDAsIHsweDQwLDB4MGYsMHg5YywweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHhiYSwweDQwLDB4MmYsMHg5MCwweDIzLDB4YTQsMHgwMCwweGY5IH0sCisgIDE2LCAweDliYTAsIDAsIHsweDA4LDB4YmUsMHg0MCwweGNmLDB4OTAsMHgwMywweGU0LDB4MTAsMHhmMSwweDAxLDB4M2UsMHg0MSwweDBmLDB4OTAsMHgwMywweGRhIH0sCisgIDE2LCAweDliYjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHhjOCwweGY4LDB4MDAsMHgzZSwweDAzIH0sCisgIDE2LCAweDliYzAsIDAsIHsweDBjLDB4ODQsMHgwMywweGExLDB4MTAsMHhlOCwweDAwLDB4MzIsMHgwMCwweDhjLDB4ODUsMHg4MywweGUwLDB4MDAsMHhjMCwweDAwIH0sCisgIDE2LCAweDliZDAsIDAsIHsweDM4LDB4MGMsMHgyYywweDAwLDB4MDMsMHg2MCwweDAwLDB4YzgsMHgwMCwweDNjLDB4MDAsMHgwZCwweDgwLDB4MDIsMHgyMCwweDEwIH0sCisgIDE2LCAweDliZTAsIDAsIHsweGM4LDB4MjAsMHhiMiwweDAyLDB4MGYsMHg4MCwweDAzLDB4Y2EsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDliZjAsIDAsIHsweDI4LDB4MDUsMHgzOSwweDEwLDB4YmUsMHgwNCwweDZmLDB4YTAsMHgwOCwweGEwLDB4MDIsMHgzYSwweDAwLDB4ODIsMHgwMCwweGEyIH0sCisgIDE2LCAweDljMDAsIDAsIHsweDgwLDB4OGQsMHhlYywweDAzLDB4YTgsMHgwMCwweDhhLDB4MDAsMHgyMywweDgwLDB4MDgsMHhhMCwweDIyLDB4MjgsMHgwMCwweDhlIH0sCisgIDE2LCAweDljMTAsIDAsIHsweGNjLDB4MmYsMHg4MCwweDA4LDB4ZTgsMHhjMiwweGI4LDB4MDAsMHg4ZSwweDYwLDB4MjMsMHg5MCwweDBiLDB4YTAsMHgwMiwweGNhIH0sCisgIDE2LCAweDljMjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGUsMHgwOCwweGIwLDB4NzIsMHgyYywweGQwIH0sCisgIDE2LCAweDljMzAsIDAsIHsweDI4LDB4YjAsMHgwNiwweDhjLDB4MDEsMHhhMSwweDAyLDB4MjAsMHhjMCwweDA4LDB4MzgsMHgwMiwweGNjLDB4MDAsMHg4MywweDAwIH0sCisgIDE2LCAweDljNDAsIDAsIHsweDIwLDB4YzAsMHgyOSwweDMwLDB4MDIsMHg0YywweDAwLDB4ODEsMHgwMCwweDJjLDB4YzAsMHgwOCwweDMyLDB4MDIsMHgwYywweDQwIH0sCisgIDE2LCAweDljNTAsIDAsIHsweDgzLDB4MDAsMHgyMCwweGY0LDB4MGIsMHgzMCwweDAyLDB4Y2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDljNjAsIDAsIHsweGEwLDB4MDEsMHgxYywweDAwLDB4YjQsMHgwMCwweDJkLDB4ZDAsMHg0OCwweGYyLDB4MDIsMHgxZSwweDIxLDB4ODUsMHgyMCwweDIwIH0sCisgIDE2LCAweDljNzAsIDAsIHsweGU4LDB4MDksMHg3MiwweDAyLDB4OGUsMHg4MCwweDhmLDB4MDEsMHgyMCwweGMwLDB4MDksMHg3MiwweDAyLDB4MGUsMHg4MCwweDg3IH0sCisgIDE2LCAweDljODAsIDAsIHsweDAwLDB4MmQsMHhjYywweDE4LDB4NTgsMHgwMiwweDhlLDB4MDAsMHg4NSwweDAwLDB4MjEsMHhjMCwweDBiLDB4NzIsMHgwMiwweGU4IH0sCisgIDE2LCAweDljOTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMCwweGI0LDB4ODAsMHgyZCwweGUwIH0sCisgIDE2LCAweDljYTAsIDAsIHsweDBjLDB4NzgsMHg4MywweDlhLDB4MDAsMHhlZCwweGQwLDB4MzEsMHhmNCwweDBjLDB4NmEsMHgwMywweGRlLDB4ODIsMHhjNywweDgwIH0sCisgIDE2LCAweDljYjAsIDAsIHsweDM5LDB4ZTAsMHgwZCwweGY4LDB4ODMsMHg1ZSwweGMyLDB4YzUsMHg4MCwweDNkLDB4ZTgsMHgwYywweDY4LDB4MDMsMHgxMiwweDAwIH0sCisgIDE2LCAweDljYzAsIDAsIHsweGNmLDB4ODAsMHgzMSwweGUwLDB4MGYsMHg3ZSwweDgzLDB4ZWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDljZDAsIDAsIHsweDA4LDB4MGQsMHhhYywweDA4LDB4ZjgsMHgwMCwweDNjLDB4YzAsMHgwZiwweGIzLDB4MDMsMHhlYywweDAwLDB4ZjksMHgwMiwweDNlIH0sCisgIDE2LCAweDljZTAsIDAsIHsweGM4LDB4MGYsMHhiMCwweDAzLDB4ZWQsMHg0MCwweGZiLDB4MDAsMHhiZSwweDgwLDB4MGUsMHhiMywweDAzLDB4ZWQsMHhjMCwweGZiIH0sCisgIDE2LCAweDljZjAsIDAsIHsweDAwLDB4M2UsMHhkMiwweDJlLDB4ODAsMHgwMywweGVjLDB4MDIsMHhmOSwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGMyIH0sCisgIDE2LCAweDlkMDAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmUsMHgwMCwweGYwLDB4OTEsMHgzMywweGUwIH0sCisgIDE2LCAweDlkMTAsIDAsIHsweDhmLDB4ZjgsMHgwMywweGZlLDB4MDAsMHhmZCwweDgwLDB4M2YsMHhlMCwweDBjLDB4NzgsMHg4MywweDNmLDB4MDAsMHhjZiwweDgwIH0sCisgIDE2LCAweDlkMjAsIDAsIHsweDNmLDB4YTAsMHgwYywweGY4LDB4MDMsMHgzZSwweDAwLDB4Y2QsMHg4MCwweDNmLDB4ZTAsMHgwZiwweGY4LDB4MTMsMHhmZSwweDEwIH0sCisgIDE2LCAweDlkMzAsIDAsIHsweGZmLDB4ODAsMHgzZiwweDIwLDB4MGYsMHhmOSwweDQzLDB4ZDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlkNDAsIDAsIHsweGE4LDB4MTEsMHg5YywweDAwLDB4YjQsMHhjMSwweDMxLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhkNCwweDEwLDB4ZTUsMHgyMCwweDJmIH0sCisgIDE2LCAweDlkNTAsIDAsIHsweGM4LDB4MGYsMHg0MCwweDAzLDB4NWMsMHgwMCwweDg3LDB4MDAsMHgyZCwweDgwLDB4MDgsMHg3MCwweDAyLDB4MWMsMHg0MCwweDg3IH0sCisgIDE2LCAweDlkNjAsIDAsIHsweDEwLDB4MmQsMHhjMCwweDBiLDB4NzYsMHgwMiwweGRjLDB4ODAsMHhiNywweDAwLDB4MmQsMHhjMCwweDBiLDB4NzAsMHgwMiwweGVhIH0sCisgIDE2LCAweDlkNzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4OWMsMHgwMCwweGI2LDB4MjIsMHgyMSwweGQwIH0sCisgIDE2LCAweDlkODAsIDAsIHsweDBiLDB4NzAsMHg4MiwweGQ4LDB4NDAsMHhiNSwweDAyLDB4MmQsMHhjMCwweDg4LDB4NjUsMHgwMiwweDBjLDB4MDAsMHg4NywweDE4IH0sCisgIDE2LCAweDlkOTAsIDAsIHsweDJjLDB4MDQsMHgwOCwweDMwLDB4MDIsMHg4YywweDAyLDB4ODUsMHgwMCwweDJkLDB4YzAsMHgwYiwweDcwLDB4NDYsMHg5MCwweDEwIH0sCisgIDE2LCAweDlkYTAsIDAsIHsweGI2LDB4MDAsMHgyZCwweDAwLDB4MGIsMHg3MCwweDIyLDB4YzQsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlkYjAsIDAsIHsweDYwLDB4MTQsMHhjYywweDA4LDB4YjIsMHgwMCwweGE0LDB4YzAsMHgwYiwweDMwLDB4NDIsMHhjNiwweDEwLDB4YTEsMHgwMCwweDJjIH0sCisgIDE2LCAweDlkYzAsIDAsIHsweGMwLDB4MGEsMHgwMCwweDAyLDB4NGMsMHgwMCwweDgzLDB4MDAsMHgyYywweDA4LDB4MDgsMHgzMCwweDAyLDB4OGMsMHgwMCwweDgzIH0sCisgIDE2LCAweDlkZDAsIDAsIHsweDAwLDB4MmMsMHhjMCwweDBiLDB4MTgsMHg4MiwweGM0LDB4MDAsMHhiMCwweDAwLDB4MmMsMHg0MCwweDBiLDB4MzAsMHgxMiwweGQ4IH0sCisgIDE2LCAweDlkZTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmOCwweDE1LDB4YWMsMHgwMCwweDM4LDB4MDAsMHgzMiwweDUwIH0sCisgIDE2LCAweDlkZjAsIDAsIHsweDBmLDB4ZjAsMHgwMywweGU2LDB4MjAsMHhmZCwweDAwLDB4M2YsMHhjMCwweDA4LDB4ZDAsMHgwMiwweDNjLDB4MDIsMHhjYiwweDgwIH0sCisgIDE2LCAweDllMDAsIDAsIHsweDNjLDB4NTAsMHgyYywweGYwLDB4MGEsMHhiYywweDAwLDB4YzksMHgwMCwweDNmLDB4YzAsMHgwZiwweGJlLDB4MDMsMHhhYywweDAwIH0sCisgIDE2LCAweDllMTAsIDAsIHsweGZhLDB4MDIsMHgyZSwweGY3LDB4NGYsMHhmMCwweDAzLDB4ZWUsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDllMjAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZjEsMHgwMCwweDNhLDB4ZjAsMHgwZiwweGIwLDB4MDMsMHhlOSwweDAwLDB4ZjksMHgwMSwweDNlIH0sCisgIDE2LCAweDllMzAsIDAsIHsweGMwLDB4MGYsMHg5MCwweDEzLDB4ZWMsMHgwMCwweGY5LDB4MDAsMHgzZSwweDU1LDB4MGYsMHhiMCwweDAxLDB4NmMsMHgwMCwweGZiIH0sCisgIDE2LCAweDllNDAsIDAsIHsweDAyLDB4M2UsMHhjMCwweDBmLDB4OTAsMHg3MywweGUwLDB4MDAsMHhmOCwweDQxLDB4M2UsMHgwMCwweDBmLDB4MzAsMHgwMSwweGUwIH0sCisgIDE2LCAweDllNTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4ZmMsMHgwMCwweGZjLDB4MDAsMHgzMywweGMwIH0sCisgIDE2LCAweDllNjAsIDAsIHsweDFmLDB4ZjAsMHgxMywweGYwLDB4MDgsMHhmZCwweDAyLDB4M2YsMHhjMCwweDhkLDB4YzAsMHgwMywweDNjLDB4MDAsMHhjZiwweGEwIH0sCisgIDE2LCAweDllNzAsIDAsIHsweDNmLDB4ODAsMHgwYywweDcwLDB4MDMsMHgzYywweDEwLDB4ZmMsMHgwMCwweDM3LDB4YzAsMHgwZiwweGUwLDB4MDMsMHhiMCwweDAwIH0sCisgIDE2LCAweDllODAsIDAsIHsweGZlLDB4MDAsMHgzZiwweGMwLDB4MGMsMHhmMCwweDAzLDB4MDQsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDllOTAsIDAsIHsweDg0LDB4MDQsMHg2ZSwweDAwLDB4YjksMHhjMiwweGEyLDB4ZjAsMHgwYiwweGIwLDB4NDIsMHhlYiwweDAwLDB4YjksMHgwMCwweDJlIH0sCisgIDE2LCAweDllYTAsIDAsIHsweGMwLDB4MGYsMHgxOCwweDAzLDB4NmMsMHgwMCwweGQ5LDB4ODEsMHgyZSwweGIwLDB4MGEsMHhiMCwweDQyLDB4MmMsMHgwMCwweGJhIH0sCisgIDE2LCAweDllYjAsIDAsIHsweGM2LDB4MmUsMHhjMCwweDBiLDB4OGMsMHgwMiwweGUzLDB4MDAsMHhiOCwweGMwLDB4M2MsMHhhMCwweDBkLDB4YjAsMHgwMiwweDIwIH0sCisgIDE2LCAweDllYzAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmYsMHgwMCwweGI4LDB4ODAsMHgyMiwweGUyIH0sCisgIDE2LCAweDllZDAsIDAsIHsweDBiLDB4YjAsMHgwMiwweGU2LDB4MjAsMHhiOSwweDAwLDB4MmMsMHhjMCwweDA4LDB4YjgsMHgwMiwweDBjLDB4MDAsMHg4YiwweDAwIH0sCisgIDE2LCAweDllZTAsIDAsIHsweDJlLDB4MzAsMHg0OCwweGIwLDB4MDIsMHgyYywweDAwLDB4YjksMHhjMCwweDJlLDB4YzEsMHgwYiwweDg4LDB4MDIsMHhlZSwweDEwIH0sCisgIDE2LCAweDllZjAsIDAsIHsweGI5LDB4YzAsMHgyZSwweDIwLDB4MTksMHhiMCwweDAyLDB4MjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlmMDAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAwLDB4YjAsMHgwMCwweDIwLDB4YzAsMHgwYiwweDMwLDB4MDYsMHhjMCwweDAwLDB4OTEsMHgwMCwweDJjIH0sCisgIDE2LCAweDlmMTAsIDAsIHsweGMwLDB4NDksMHg4MCwweDAyLDB4NGMsMHgwNCwweDkxLDB4MDAsMHgyYywweDAwLDB4OGEsMHgzMCwweDBhLDB4MGMsMHgwNCwweGIxIH0sCisgIDE2LCAweDlmMjAsIDAsIHsweDAwLDB4MmMsMHhjMCwweDFiLDB4MDAsMHgxMiwweDQ5LDB4MTAsMHhiMSwweDAwLDB4MmUsMHgyMCwweDA5LDB4MzAsMHgwMiwweDAyIH0sCisgIDE2LCAweDlmMzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGI4LDB4MjAsMHgyMiwweGMwIH0sCisgIDE2LCAweDlmNDAsIDAsIHsweDhiLDB4ZjAsMHgwMywweGUwLDB4MDgsMHhmZCwweDAwLDB4M2YsMHhjMCwweDBjLDB4YTAsMHgwMywweDNjLDB4MDAsMHhjYiwweDAwIH0sCisgIDE2LCAweDlmNTAsIDAsIHsweDNlLDB4MDAsMHg0YywweGYwLDB4MGEsMHgzYywweDAwLDB4YjksMHgwMCwweDM3LDB4YzEsMHgwZiwweGEwLDB4MDMsMHhlMCwweDAwIH0sCisgIDE2LCAweDlmNjAsIDAsIHsweGZhLDB4MDAsMHgzZSwweDAwLDB4MGQsMHhmMCwweDBiLDB4MDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlmNzAsIDAsIHsweGEwLDB4MWQsMHhmMCwweDAxLDB4ZmMsMHg0MCwweDNmLDB4ODAsMHg0ZiwweGYwLDB4MDIsMHhmMCwweDAwLDB4ZmQsMHgwMCwweDNmIH0sCisgIDE2LCAweDlmODAsIDAsIHsweGMxLDB4MGYsMHhjMCwweDAzLDB4ZmMsMHgwMCwweGZkLDB4MDAsMHgzZiwweDAwLDB4NGYsMHhmMCwweDYzLDB4ZmMsMHgwMCwweGZkIH0sCisgIDE2LCAweDlmOTAsIDAsIHsweDA0LDB4M2YsMHhjMCwweDBmLDB4YzAsMHgwMywweGYwLDB4ODAsMHhmYywweDAwLDB4N2IsMHgwMCwweDBmLDB4ZjAsMHg0MywweGU4IH0sCisgIDE2LCAweDlmYTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZjgsMHgwMCwweGM4LDB4MTAsMHgzMywweDA0IH0sCisgIDE2LCAweDlmYjAsIDAsIHsweDBjLDB4NDAsMHgwMiwweDM0LDB4MDAsMHhjOCwweDg1LDB4MWYsMHhjMCwweDJkLDB4ZDksMHgwMywweGZjLDB4YzAsMHhkYiwweDI4IH0sCisgIDE2LCAweDlmYzAsIDAsIHsweDM3LDB4NjQsMHgwZiwweGRiLDB4MDMsMHgzZSwweDAwLDB4ZmYsMHgyNSwweDNmLDB4YzgsMHgwZSwweGYyLDB4MDMsMHhmZSwweDIwIH0sCisgIDE2LCAweDlmZDAsIDAsIHsweGZmLDB4YTQsMHgzNywweGM0LDB4MGMsMHhjOCwweDAzLDB4MzAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlmZTAsIDAsIHsweDgwLDB4MTAsMHhlOCwweDAwLDB4ODgsMHgyMCwweDIyLDB4MDAsMHgwOCwweDg4LDB4MTIsMHgyNiwweDA0LDB4ODksMHg4MiwweDJlIH0sCisgIDE2LCAweDlmZjAsIDAsIHsweGY0LDB4NDgsMHhiOCwweDAyLDB4ZmMsMHhjNCwweDk4LDB4YzIsMHgyMiwweDdjLDB4NGIsMHg5ZCwweDQyLDB4MjYsMHgwOCwweGJmIH0sCisgIDE2LCAweGEwMDAsIDAsIHsweDE4LDB4NzcsMHhlNCwweDA4LDB4ZjEsMHg4MiwweGVmLDB4MDAsMHhiYiwweGQwLDB4MjIsMHhkOCwweDA4LDB4OTAsMHg4MywweDYwIH0sCisgIDE2LCAweGEwMTAsIDAsIHsweDAyLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDQ1LDB4YzgsMHgwNCwweGEwLDB4MDAsMHgyNCwweDAwIH0sCisgIDE2LCAweGEwMjAsIDAsIHsweDBhLDB4MDAsMHgwMiwweDBjLDB4MDAsMHg4MiwweDA0LDB4MmMsMHhlMCwweDA4LDB4MTAsMHgwMiwweGNjLDB4ODAsMHg4MywweDAwIH0sCisgIDE2LCAweGEwMzAsIDAsIHsweDI0LDB4MDAsMHgwYiwweDEwLDB4MDYsMHhjOCwweDAxLDB4YjMsMHgyMCwweDJjLDB4YzAsMHgyOSwweDMyLDB4MDIsMHhjOCwweDA4IH0sCisgIDE2LCAweGEwNDAsIDAsIHsweGIxLDB4MDAsMHgyNCwweGQwLDB4MDgsMHg4MiwweDAyLDB4NjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGEwNTAsIDAsIHsweGMwLDB4MTUsMHhhOCwweDAwLDB4YTgsMHgwYywweDI2LDB4MDAsMHgwYSwweDgwLDB4MDIsMHgyYywweDE0LDB4OGEsMHgwMiwweDZlIH0sCisgIDE2LCAweGEwNjAsIDAsIHsweGUwLDB4MDgsMHhiMCwweDAyLDB4NGMsMHgwOCwweGE4LDB4MDAsMHgyNiwweDIwLDB4MGIsMHg5YywweDAyLDB4ZTQsMHgwMCwweGJiIH0sCisgIDE2LCAweGEwNzAsIDAsIHsweDA0LDB4MjIsMHhjMCwweDE5LDB4YjAsMHgwMiwweGU4LDB4MDEsMHhiYiwweDExLDB4MDIsMHhjMCwweDg4LDB4OTAsMHgwMiwweGYwIH0sCisgIDE2LCAweGEwODAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE1LDB4ZWMsMHgwMiwweGVhLDB4NDAsMHhiNiwweDYwIH0sCisgIDE2LCAweGEwOTAsIDAsIHsweDJlLDB4OTgsMHgwYiwweDIwLDB4MDIsMHhjOCwweDAyLDB4M2UsMHhjMCwweDBkLDB4OTgsMHgwMywweGVjLDB4MDIsMHhkYiwweDg4IH0sCisgIDE2LCAweGEwYTAsIDAsIHsweGI2LDB4MjEsMHgwZiwweDg4LDB4MDMsMHhhYywweDA4LDB4ZmIsMHgwMCwweDJjLDB4YzAsMHgwZSwweGIwLDB4NDMsMHhlNSwweDgwIH0sCisgIDE2LCAweGEwYjAsIDAsIHsweGYwLDB4NjAsMHgzNiwweGMwLDB4MGMsMHgwMSwweDQzLDB4NDgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGEwYzAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4ZDYsMHgwMSwweDNiLDB4NjQsMHg4NSwweGQ5LDB4MDMsMHhmMCwweDBjLDB4ZmYsMHgwMCwweDNlIH0sCisgIDE2LCAweGEwZDAsIDAsIHsweGMxLDB4MGYsMHhmYywweDIxLDB4ZWMsMHgwMCwweGQ3LDB4OTAsMHgzYiwweDQwLDB4MGYsMHg1MCwweDAzLDB4M2MsMHgwMCwweGZmIH0sCisgIDE2LCAweGEwZTAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDhlLDB4ZjAsMHgwMywweGY0LDB4NDAsMHhmZCwweDg4LDB4M2YsMHhjMCwweDJmLDB4ZDAsMHgwMiwweDc4IH0sCisgIDE2LCAweGEwZjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4OGMsMHgwMCwweGRhLDB4NDAsMHgzYywweDQwIH0sCisgIDE2LCAweGExMDAsIDAsIHsweDBmLDB4MTAsMHgwMywweDQ4LDB4MDAsMHhmOSwweDIyLDB4M2MsMHhjMiwweDBlLDB4OTAsMHg4MywweGVjLDB4MDIsMHhkYiwweDA0IH0sCisgIDE2LCAweGExMTAsIDAsIHsweDNhLDB4MDgsMHgwZiwweDg0LDB4ODcsMHhlOCwweDAwLDB4Y2IsMHgwMCwweDNlLDB4YzQsMHgwZSwweGIwLDB4MDMsMHhlZCwweDAwIH0sCisgIDE2LCAweGExMjAsIDAsIHsweGU4LDB4NDIsMHgzYSwweGMwLDB4MGYsMHg4MCwweDBiLDB4MTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGExMzAsIDAsIHsweDg4LDB4MDUsMHgyYywweDA4LDB4OGEsMHgwMCwweDJlLDB4NDIsMHg4YiwweDkwLDB4MDIsMHgyOCwweDE4LDB4YmIsMHg0OSwweDIyIH0sCisgIDE2LCAweGExNDAsIDAsIHsweGQwLDB4MzgsMHhiYywweDgyLDB4ZmMsMHgwMCwweGU4LDB4MDIsMHgyMiwweDYyLDB4Y2IsMHg5YywweDAwLDB4ZWYsMHg2MCwweGRmIH0sCisgIDE2LCAweGExNTAsIDAsIHsweDAwLDB4MmYsMHhjMCwweDBiLDB4ZjAsMHgwMiwweGVjLDB4MDAsMHgwOSwweDQwLDB4MzcsMHhjMCwweDBiLDB4OTAsMHgwMiwweDMyIH0sCisgIDE2LCAweGExNjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NDgsMHgxMCwweDExLDB4MDAsMHgyYywweGEwIH0sCisgIDE2LCAweGExNzAsIDAsIHsweDBiLDB4MjAsMHgwMiwweDQ0LDB4MDAsMHg5MCwweGMwLDB4NjQsMHgzNCwweDI4LDB4MzQsMHgwMiwweGNjLDB4MDAsMHg5MywweDg0IH0sCisgIDE2LCAweGExODAsIDAsIHsweDI4LDB4NDAsMHgwYiwweDA4LDB4MDAsMHhjZSwweDAwLDB4OTMsMHgwMCwweDJjLDB4YzIsMHgwYSwweDMwLDB4MDIsMHhjMCwweDAwIH0sCisgIDE2LCAweGExOTAsIDAsIHsweGIyLDB4NDAsMHgyMiwweGMwLDB4MGIsMHgyMCwweDAyLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGExYTAsIDAsIHsweDcwLDB4MDEsMHgxYSwweDQwLDB4ODUsMHg4MCwweDJkLDB4YTAsMHgwYiwweDY4LDB4MDYsMHgxNiwweDgwLDB4YmQsMHg5MCwweDI1IH0sCisgIDE2LCAweGExYjAsIDAsIHsweDI0LDB4MTgsMHg3YiwweDQyLDB4ZGUsMHg0MCwweGEwLDB4ODAsMHgyMSwweGUwLDB4MGIsMHg2OCwweDAyLDB4ZDYsMHgwMCwweDk3IH0sCisgIDE2LCAweGExYzAsIDAsIHsweDkwLDB4MmQsMHhlMCwweDBiLDB4NzgsMHgwMiwweGNlLDB4NDAsMHg5MiwweDgwLDB4NmQsMHhlNCwweDBiLDB4NzgsMHgwMiwweDA4IH0sCisgIDE2LCAweGExZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MjgsMHgwMCwweGQxLDB4ODAsMHgzYywweDg4IH0sCisgIDE2LCAweGExZTAsIDAsIHsweDBiLDB4MjIsMHgwMywweDRlLDB4ODAsMHhmMiwweGExLDB4M2MsMHgyNCwweDJhLDB4MzksMHgwMywweGNjLDB4NDAsMHhkMywweGFjIH0sCisgIDE2LCAweGExZjAsIDAsIHsweDM4LDB4YzUsMHgwZiwweDMwLDB4ODIsMHhjOCwweDAwLDB4ZDMsMHgwMCwweDNjLDB4YzAsMHgwZSwweDMwLDB4MTMsMHhjMCwweDAwIH0sCisgIDE2LCAweGEyMDAsIDAsIHsweGYxLDB4MDAsMHgzOCwweGMwLDB4MGYsMHhhMCwweDAzLDB4MWEsMHgwNiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGEyMTAsIDAsIHsweDQwLDB4MWQsMHhiOCwweDEwLDB4ZmQsMHgzNCwweDNlLDB4ODAsMHgwZiwweGUwLDB4MDMsMHhlZSwweDAwLDB4NzIsMHgwMCwweDNhIH0sCisgIDE2LCAweGEyMjAsIDAsIHsweDAwLDB4MGYsMHhiMCwweDYzLDB4ZWMsMHg0MCwweGY4LDB4MjIsMHgzZSwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZDQsMHg0MCwweGZmIH0sCisgIDE2LCAweGEyMzAsIDAsIHsweDAwLDB4M2YsMHhkMiwweDBmLDB4ZjAsMHgwMywweGVjLDB4MDAsMHhjZiwweDAwLDB4MzcsMHhjMCwweDBmLDB4ZjAsMHgwMywweGQwIH0sCisgIDE2LCAweGEyNDAsIDAsIHsweDA2LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWUsMHgwMCwweGViLDB4MDAsMHgzNiwweGUwIH0sCisgIDE2LCAweGEyNTAsIDAsIHsweDBkLDB4YjAsMHgwMywweDIwLDB4MDAsMHhmMCwweDgwLDB4MzMsMHhjMCwweDA4LDB4YjgsMHgwMywweDJjLDB4ODAsMHhjYiwweDAwIH0sCisgIDE2LCAweGEyNjAsIDAsIHsweDMyLDB4ODAsMHgwZiwweGEwLDB4MTMsMHg2ZSwweDA4LDB4Y2IsMHgyOCwweDMyLDB4ZTAsMHgwZCwweGI0LDB4ODMsMHhlMiwweDAwIH0sCisgIDE2LCAweGEyNzAsIDAsIHsweGNhLDB4MDAsMHgzZSwweGUwLDB4MGMsMHhhOCwweDAzLDB4MDIsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGEyODAsIDAsIHsweGM4LDB4MTEsMHg4YywweDA0LDB4ODMsMHgwMCwweDIxLDB4YzAsMHg0OCwweDcwLDB4MDIsMHgxMCwweDAwLDB4YjcsMHgwMiwweDIxIH0sCisgIDE2LCAweGEyOTAsIDAsIHsweGMwLDB4NGEsMHg3MCwweDAyLDB4MGQsMHg0OCwweGQ0LDB4MDAsMHgzNSwweGMwLDB4MGUsMHg2MCwweDAyLDB4ZGMsMHgwMCwweGE3IH0sCisgIDE2LCAweGEyYTAsIDAsIHsweDQwLDB4MjksMHhjMCwweDA5LDB4NzIsMHgwMiwweGQ0LDB4MTAsMHhhNiwweDAyLDB4MmYsMHhjOCwweDA4LDB4NzAsMHgwMiwweDEyIH0sCisgIDE2LCAweGEyYjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4OWUsMHgwMCwweGE3LDB4ODAsMHgyMCwweGUwIH0sCisgIDE2LCAweGEyYzAsIDAsIHsweDBhLDB4MzgsMHgwMiwweDFhLDB4MDAsMHhiNSwweDgwLDB4MjEsMHhlMCwweDA4LDB4ZjgsMHgyMiwweDVjLDB4ODEsMHg4MywweDgwIH0sCisgIDE2LCAweGEyZDAsIDAsIHsweDIxLDB4YTEsMHgwYiwweDc4LDB4ODIsMHg1YSwweDEwLDB4ODMsMHhhMCwweDIwLDB4ZTgsMHgwYSwweDdiLDB4MDIsMHhkYSwweDAwIH0sCisgIDE2LCAweGEyZTAsIDAsIHsweDk3LDB4YzAsMHgyZCwweGU0LDB4MDgsMHhlOCwweDAyLDB4MDgsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGEyZjAsIDAsIHsweDA4LDB4MTQsMHhjYywweDAwLDB4ODMsMHgxMCwweDIwLDB4YzAsMHgwYSwweDMwLDB4MDIsMHgwOCwweDA4LDB4YjMsMHg3MCwweDIwIH0sCisgIDE2LCAweGEzMDAsIDAsIHsweGY4LDB4MGEsMHgzMCwweDQyLDB4NGMsMHgwNCwweDkzLDB4MTQsMHgyNiwweGM0LDB4MGEsMHgzOCwweDAyLDB4Y2MsMHgwMCwweGEzIH0sCisgIDE2LCAweGEzMTAsIDAsIHsweDAwLDB4MjgsMHhjMCwweGFhLDB4MzAsMHgwMiwweGNlLDB4NDAsMHhiMywweDg4LDB4MmMsMHhjMCwweDI4LDB4MzAsMHgwYSwweDEyIH0sCisgIDE2LCAweGEzMjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTksMHgwMCwweGVhLDB4ODAsMHhiNiwweDkwIH0sCisgIDE2LCAweGEzMzAsIDAsIHsweDJmLDB4MjQsMHgwYiwweDM5LDB4MDQsMHhiZSwweGMwLDB4MzMsMHg5MiwweDBjLDB4YTAsMHgwYiwweDY4LDB4MTgsMHhjZSwweGMwIH0sCisgIDE2LCAweGEzNDAsIDAsIHsweDMzLDB4ODAsMHgwZiwweGU5LDB4NDMsMHg3OCwweDAwLDB4Y2EsMHgwMCwweDMyLDB4ODAsMHgwZiwweGEwLDB4MTMsMHhmOCwweDQ4IH0sCisgIDE2LCAweGEzNTAsIDAsIHsweGRlLDB4MDAsMHgzZSwweDgwLDB4MGMsMHhlMCwweDAyLDB4M2EsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGEzNjAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDI0LDB4ZjgsMHgwMCwweDNlLDB4MTIsMHgwZCwweDgwLDB4OTMsMHhiMCwweDI4LDB4ZjgsMHgwMCwweGJjIH0sCisgIDE2LCAweGEzNzAsIDAsIHsweDAwLDB4MGYsMHg4NCwweDAzLDB4YTAsMHgwMCwweGYwLDB4MDAsMHgzZSwweDAyLDB4MGUsMHg4MCwweDAwLDB4ZTAsMHgwMCwweGY4IH0sCisgIDE2LCAweGEzODAsIDAsIHsweDAxLDB4M2UsMHgwMCwweDBkLDB4ODAsMHgwMywweGUwLDB4MDAsMHhlOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH0sCisgIDE2LCAweGEzOTAsIDAsIHsweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHhiMiwweDcwIH0sCisgIDE2LCAweGEzYTAsIDAsIHsweDBmLDB4OTAsMHgwMSwweDA0LDB4MDAsMHhjOSwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTgsMHgwMywweGU0LDB4MDQsMHhlOSwweDA4IH0sCisgIDE2LCAweGEzYjAsIDAsIHsweDNhLDB4NDgsMHgwYywweDlhLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDM2LDB4NDAsMHgwYiwweDEwLDB4MGIsMHgyNiwweDgwIH0sCisgIDE2LCAweGEzYzAsIDAsIHsweGYxLDB4ODAsMHgzMiwweDQwLDB4MGYsMHg5MCwweDAzLDB4YzIsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGEzZDAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4YjksMHgwMCwweDIyLDB4NjEsMHgwYiwweDkwLDB4MDIsMHgyNCwweDA4LDB4ODksMHgwMCwweDJlIH0sCisgIDE2LCAweGEzZTAsIDAsIHsweDQwLDB4MGQsMHg5YSwweDAyLDB4ZTQsMHgwOCwweGE5LDB4MDAsMHgyMiwweDc4LDB4MGQsMHg5NCwweDA2LDB4ZTQsMHgxMCwweGI5IH0sCisgIDE2LCAweGEzZjAsIDAsIHsweDAwLDB4MjIsMHg1MCwweDBiLDB4OTAsMHgwMiwweDI1LDB4ODAsMHhiOSwweDgwLDB4MzYsMHg0MCwweDBiLDB4OTAsMHgwMiwweGUwIH0sCisgIDE2LCAweGE0MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweGI1LDB4MDAsMHgyMywweDQyIH0sCisgIDE2LCAweGE0MTAsIDAsIHsweDBiLDB4ZDAsMHgwZSwweGI0LDB4MDAsMHg4OSwweDA0LDB4MmUsMHg2MCwweDA4LDB4OTEsMHgwMiwweGM0LDB4MDQsMHhiOSwweDA0IH0sCisgIDE2LCAweGE0MjAsIDAsIHsweDJhLDB4YzAsMHgwOCwweDk0LDB4MDIsMHhlNCwweDEwLDB4YjEsMHgwMCwweDI2LDB4NDIsMHgwYSwweDkwLDB4MDIsMHgyNCwweDAwIH0sCisgIDE2LCAweGE0MzAsIDAsIHsweGI5LDB4MjEsMHg2MiwweDQwLDB4MGIsMHg5MCwweDAyLDB4YzYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE0NDAsIDAsIHsweDA4LDB4MDQsMHgwNSwweDAwLDB4YjUsMHg0MCwweDIxLDB4NTAsMHg0YiwweDUwLDB4MDYsMHg5NCwweDAyLDB4ODEsMHgwMCwweDJjIH0sCisgIDE2LCAweGE0NTAsIDAsIHsweDYwLDB4MjksMHgxNCwweDA2LDB4YzUsMHgwMCwweGExLDB4MjIsMHgyMCwweDUxLDB4ODksMHgxNCwweDAyLDB4YzQsMHgwMCwweGIxIH0sCisgIDE2LCAweGE0NjAsIDAsIHsweDIwLDB4MjAsMHg0OCwweDBiLDB4MTQsMHgwMiwweDA0LDB4MDEsMHhiMSwweDAwLDB4MDQsMHg1MCwweDBiLDB4MTAsMHgwMiwweGMyIH0sCisgIDE2LCAweGE0NzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwOCwweGI4LDB4MDAsMHgzMiwweDAwIH0sCisgIDE2LCAweGE0ODAsIDAsIHsweDhmLDB4ODAsMHgwMywweGIwLDB4MDAsMHg4OCwweDAwLDB4M2UsMHgwMCwweDBjLDB4ODAsMHgwMywweGUwLDB4MDAsMHhlOCwweDA0IH0sCisgIDE2LCAweGE0OTAsIDAsIHsweDNhLDB4MDAsMHgwYywweDgwLDB4MDIsMHhlMCwweDAwLDB4ZjgsMHg1MCwweDM2LDB4MDAsMHgwZiwweDgwLDB4MDMsMHgyMCwweDA0IH0sCisgIDE2LCAweGE0YTAsIDAsIHsweGY4LDB4MDEsMHgxMiwweDAwLDB4NGYsMHg4MCwweDA3LDB4ZWUsMHgwNywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE0YjAsIDAsIHsweDk4LDB4MWQsMHhlNSwweDEwLDB4ZjksMHg0MCwweDNlLDB4NTAsMHgwZiwweDk0LDB4MDIsMHg2NSwweDAxLDB4ZmQsMHgwMSwweDNkIH0sCisgIDE2LCAweGE0YzAsIDAsIHsweDUwLDB4NGYsMHg1MCwweDEzLDB4ZTUsMHgwMCwweGZkLDB4MTAsMHgxZiwweDUwLDB4MDcsMHhkNCwweDQzLDB4ZDQsMHgwMCwweGY5IH0sCisgIDE2LCAweGE0ZDAsIDAsIHsweDEwLDB4MWUsMHg0NCwweDBmLDB4OTQsMHgwMywweGQ1LDB4MDAsMHhmZCwweDQwLDB4M2UsMHg1MCwweDBmLDB4NTIsMHg4MywweGVlIH0sCisgIDE2LCAweGE0ZTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4ZTQsMHg0MCwweGY5LDB4NjAsMHgzZiwweDQ0IH0sCisgIDE2LCAweGE0ZjAsIDAsIHsweDBmLDB4ZDAsMHhjMywweGU0LDB4MzAsMHhmOSwweDAxLDB4M2UsMHg0MiwweDBjLDB4ZDAsMHgwMywweGU3LDB4ODAsMHhkZCwweGEwIH0sCisgIDE2LCAweGE1MDAsIDAsIHsweDMzLDB4NDAsMHgwYywweGQwLDB4MDMsMHhmYywweDAwLDB4YzksMHg5MCwweDNmLDB4NjgsMHgxZSwweDkxLDB4MDMsMHgzNCwweDAwIH0sCisgIDE2LCAweGE1MTAsIDAsIHsweGZkLDB4MDAsMHgzZSwweDY4LDB4MGMsMHg5NCwweDAzLDB4MGUsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE1MjAsIDAsIHsweDM5LDB4MTAsMHhlMCwweDAwLDB4YjgsMHg0MiwweDJlLDB4MDksMHgwYiwweDg0LDB4MDIsMHhlMSwweDA0LDB4YmUsMHgwMCwweDJlIH0sCisgIDE2LCAweGE1MzAsIDAsIHsweDEwLDB4MDgsMHg4MCwweDIyLDB4YzIsMHg4MCwweDg4LDB4NDAsMHgyMiwweDAwLDB4MGEsMHg4MCwweDAyLDB4ZTAsMHgwMCwweGE4IH0sCisgIDE2LCAweGE1NDAsIDAsIHsweGQwLDB4MmUsMHgxMCwweDRiLDB4OGEsMHgwMywweDYwLDB4MDAsMHhiYSwweDAwLDB4MmUsMHgzMCwweDA4LDB4OGEsMHgwMiwweDg2IH0sCisgIDE2LCAweGE1NTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4YzUsMHg4MCwweGIxLDB4NjAsMHg2YywweGQwIH0sCisgIDE2LCAweGE1NjAsIDAsIHsweDBiLDB4MTAsMHgwMCwweGRjLDB4MGMsMHhiNSwweDAwLDB4MmMsMHg0MSwweDA4LDB4MTAsMHgwMiwweGM1LDB4ODAsMHg5MSwweDEwIH0sCisgIDE2LCAweGE1NzAsIDAsIHsweDY4LDB4YzAsMHgwOCwweDMwLDB4MDIsMHhlNCwweDBjLDB4ODEsMHgyMiwweDJjLDB4NTAsMHgwOCwweDEwLDB4NDIsMHgwNCwweDAwIH0sCisgIDE2LCAweGE1ODAsIDAsIHsweGExLDB4MDAsMHgyYywweDVhLDB4MjgsMHg5MCwweDAyLDB4NTIsMHgxMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE1OTAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4YjksMHgwMCwweDJlLDB4NDEsMHgwYiwweDkwLDB4MTIsMHhmNCwweDgwLDB4YmYsMHgwMCwweDJlIH0sCisgIDE2LCAweGE1YTAsIDAsIHsweDQwLDB4MDgsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGE5LDB4NjAsMHg2MCwweDQyLDB4MGEsMHg5NCwweDEyLDB4ZTUsMHgwMCwweGE5IH0sCisgIDE2LCAweGE1YjAsIDAsIHsweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweDY0LDB4MjAsMHhiOSwweDAwLDB4MGUsMHg0MCwweDA5LDB4OTAsMHgwMiwweGM2IH0sCisgIDE2LCAweGE1YzAsIDAsIHsweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDA1LDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQxIH0sCisgIDE2LCAweGE1ZDAsIDAsIHsweDBmLDB4OTAsMHgyMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMywweGU0LDB4MDQsMHhkMSwweGMwIH0sCisgIDE2LCAweGE1ZTAsIDAsIHsweGJhLDB4NzAsMHgwYywweDk4LDB4MDMsMHhjNCwweDAwLDB4YzksMHgwMCwweDNlLDB4NDAsMHgwZSwweDkwLDB4MDMsMHgyNSwweDQwIH0sCisgIDE2LCAweGE1ZjAsIDAsIHsweGU5LDB4NDAsMHgzZSwweDQwLDB4MGMsMHgxMCwweDAzLDB4NjgsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE2MDAsIDAsIHsweDY4LDB4MDEsMHhhNCwweDE0LDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MjMsMHhlNCwweDA4LDB4ZjksMHhhMCwweDNjIH0sCisgIDE2LCAweGE2MTAsIDAsIHsweGMyLDB4MmYsMHg5MCwweDAzLDB4YzQsMHgwMCwweGQ5LDB4ODAsMHgzZSwweDcwLDB4MGYsMHg5MSwweDQzLDB4ZTQsMHgwMCwweGY5IH0sCisgIDE2LCAweGE2MjAsIDAsIHsweDAwLDB4M2UsMHg0MCwweDFmLDB4OTAsMHgxMywweGU2LDB4MjAsMHhmOSwweGEwLDB4M2MsMHg0MCwweDRlLDB4OTAsMHgwMywweDlhIH0sCisgIDE2LCAweGE2MzAsIDAsIHsweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAwLDB4YTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAyIH0sCisgIDE2LCAweGE2NDAsIDAsIHsweDBmLDB4ODAsMHgxMywweDIwLDB4MGMsMHhmYywweDAxLDB4M2UsMHgwMCwweDBjLDB4ODAsMHgwMywweGUwLDB4MDAsMHhjOCwweDUwIH0sCisgIDE2LCAweGE2NTAsIDAsIHsweDMyLDB4MDAsMHgwZiwweDgwLDB4MGIsMHgyMCwweDA4LDB4ZjgsMHgwMCwweDMyLDB4MDAsMHgyYywweDgwLDB4NDMsMHhlMCwweDQwIH0sCisgIDE2LCAweGE2NjAsIDAsIHsweGY4LDB4MDIsMHgzYSwweDAwLDB4OGYsMHg4MCwweDAzLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE2NzAsIDAsIHsweGE4LDB4ODUsMHgyOCwweDA4LDB4M2EsMHgwMCwweDBmLDB4ODAsMHg0YiwweGExLDB4MDIsMHgyOCwweDAwLDB4YmEsMHg4MiwweDJlIH0sCisgIDE2LCAweGE2ODAsIDAsIHsweDg4LDB4NDgsMHhlNCwweDAyLDB4ZTgsMHgwMCwweGFlLDB4OTAsMHhhMywweDkwLDB4MGIsMHhlMCwweDAwLDB4MzgsMHgwMCwweGJhIH0sCisgIDE2LCAweGE2OTAsIDAsIHsweDAwLDB4MzcsMHhhMCwweDA4LDB4YTAsMHgwMiwweGY4LDB4MDAsMHg5ZSwweGUwLDB4MjIsMHg4MCwweDBiLDB4YTAsMHgyMywweDQyIH0sCisgIDE2LCAweGE2YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgxMCwweDMzLDB4MDAsMHgyYywweGQwIH0sCisgIDE2LCAweGE2YjAsIDAsIHsweDBiLDB4MTQsMHgwMiwweDBjLDB4MDAsMHhiMiwweDkxLDB4MmMsMHhkMCwweDA4LDB4M2UsMHgwMiwweDRjLDB4MDAsMHg4MywweDQwIH0sCisgIDE2LCAweGE2YzAsIDAsIHsweDI0LDB4YzIsMHgwYiwweDM2LDB4MDAsMHg4YywweDAwLDB4YjMsMHgwMCwweDIwLDB4YzAsMHgwOSwweGIwLDB4MDIsMHhjZSwweDAwIH0sCisgIDE2LCAweGE2ZDAsIDAsIHsweGIzLDB4Y2MsMHg2OCwweGMwLDB4MGIsMHgzMCwweDAyLDB4MDIsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE2ZTAsIDAsIHsweGUwLDB4MDEsMHgxYywweDg4LDB4YjcsMHgyNSwweDJkLDB4YzAsMHg4YiwweDU4LDB4MWEsMHgxYywweDA4LDB4YjYsMHgwMCwweDJkIH0sCisgIDE2LCAweGE2ZjAsIDAsIHsweGMwLDB4MDgsMHg3NCwweDAyLDB4ZGMsMHg0MCwweGE1LDB4MDAsMHgyNSwweGMwLDB4MWIsMHg3OCwweDAyLDB4OTQsMHgwOCwweGI3IH0sCisgIDE2LCAweGE3MDAsIDAsIHsweDgwLDB4MjUsMHhlMywweDBhLDB4NzEsMHgwMiwweGRjLDB4MDAsMHg5NywweDgzLDB4MjEsMHhjOCwweDhiLDB4ZjEsMHgwMiwweDQ4IH0sCisgIDE2LCAweGE3MTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWYsMHgwMCwweGY3LDB4ZTIsMHg3ZCwweGUwIH0sCisgIDE2LCAweGE3MjAsIDAsIHsweDBmLDB4NTgsMHg0MywweDFlLDB4MTgsMHhmNiwweDgwLDB4N2MsMHhlMCwweDJjLDB4NjgsMHgwMiwweDVlLDB4OTAsMHhjMywweDgwIH0sCisgIDE2LCAweGE3MzAsIDAsIHsweDM1LDB4ZTAsMHgwZiwweGY4LDB4MDMsMHg5ZSwweDA0LDB4ZmYsMHhhMSwweDIwLDB4YTEsMHgwZCwweDc4LDB4MDMsMHhkNiwweDAwIH0sCisgIDE2LCAweGE3NDAsIDAsIHsweGY3LDB4ODAsMHgzOSwweGY4LDB4MGYsMHg3OCwweDAzLDB4MGEsMHgwNiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE3NTAsIDAsIHsweDQ4LDB4MWQsMHhhYywweDAwLDB4ZmIsMHg0MCwweDdmLDB4NDEsMHgwZiwweDEwLDB4MDMsMHhlYywweDA0LDB4ZmEsMHgwMCwweDNlIH0sCisgIDE2LCAweGE3NjAsIDAsIHsweGQwLDB4MGYsMHhhMCwweDAzLDB4ZWQsMHgwMCwweGU5LDB4MDAsMHgyYSwweDAwLDB4MGYsMHhiMCwweDAzLDB4NjQsMHgwMCwweGZiIH0sCisgIDE2LCAweGE3NzAsIDAsIHsweDQwLDB4M2UsMHhjMCwweDBkLDB4YjAsMHgwMywweGU0LDB4MDAsMHhkMywweDAwLDB4MzYsMHhjMCwweDBmLDB4MzgsMHgwMywweGMyIH0sCisgIDE2LCAweGE3ODAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4ZmUsMHg0OCwweGNmLDB4YzAsMHgzMywweDYwIH0sCisgIDE2LCAweGE3OTAsIDAsIHsweDhjLDB4YzgsMHg0MywweGQ2LDB4MDAsMHhjYywweDk0LDB4M2YsMHhiMCwweDBkLDB4ZjgsMHgwMywweDdmLDB4MDAsMHhkZiwweDgwIH0sCisgIDE2LCAweGE3YTAsIDAsIHsweDNmLDB4NjAsMHgwZiwweGQ4LDB4MDMsMHhkZSwweDAwLDB4Y2YsMHhjYSwweDNkLDB4NjAsMHgwYywweGY4LDB4MTMsMHgzYSwweDQ0IH0sCisgIDE2LCAweGE3YjAsIDAsIHsweGRkLDB4ODAsMHgzZiwweGUwLDB4MGYsMHhmOCwweDQzLDB4MTgsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE3YzAsIDAsIHsweGE4LDB4MTEsMHg5YywweDAwLDB4OGYsMHgxMSwweDMzLDB4YzAsMHg0OCwweDQxLDB4MTIsMHhjNCwweDQ4LDB4ODQsMHgxMSwweDJjIH0sCisgIDE2LCAweGE3ZDAsIDAsIHsweGVjLDB4MmEsMHhiYSwweDAzLDB4M2MsMHg0MCwweGQ3LDB4NDgsMHgyZCwweDQxLDB4MGIsMHg2MCwweDAyLDB4ZDQsMHgwMCwweGQ3IH0sCisgIDE2LCAweGE3ZTAsIDAsIHsweDAxLDB4M2QsMHhjMCwweDBkLDB4ZjAsMHgwMywweDVhLDB4MDAsMHg4NCwweDE4LDB4MmQsMHhjMCwweDBiLDB4NzAsMHgwMywweDZhIH0sCisgIDE2LCAweGE3ZjAsIDAsIHsweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4OGMsMHgwOCwweDg3LDB4MDAsMHgyMSwweDQwIH0sCisgIDE2LCAweGE4MDAsIDAsIHsweDA5LDB4NDAsMHgwMiwweGQ0LDB4MDAsMHhhNCwweDkyLDB4MmQsMHhjOCwweDA5LDB4NjIsMHg4MiwweDVjLDB4MDAsMHg4NywweDAwIH0sCisgIDE2LCAweGE4MTAsIDAsIHsweDJkLDB4YzAsMHgwYiwweDUwLDB4MDIsMHhmYywweDAwLDB4ODcsMHgwMCwweDJkLDB4MDQsMHgwOCwweDcwLDB4MDIsMHgxYywweDgwIH0sCisgIDE2LCAweGE4MjAsIDAsIHsweGI1LDB4MDAsMHgyZCwweGMwLDB4MGIsMHhmMCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE4MzAsIDAsIHsweDYwLDB4MTAsMHhjYywweDAwLDB4ODMsMHgwMCwweDIwLDB4NDAsMHgwOSwweDAwLDB4MjIsMHhjNywweDAwLDB4YTAsMHg0MSwweDJjIH0sCisgIDE2LCAweGE4NDAsIDAsIHsweGMxLDB4NGIsMHgwOCwweDAyLDB4MmMsMHgwMCwweDkzLDB4NDAsMHgyYywweDdjLDB4MGIsMHgzOCwweDAyLDB4YzcsMHgyMCwweDkzIH0sCisgIDE2LCAweGE4NTAsIDAsIHsweDAwLDB4MmMsMHhjMCwweDA5LDB4MzAsMHgwMiwweDRmLDB4ODQsMHhiMCwweDgwLDB4MmMsMHhjMCwweDBiLDB4MzIsMHgxMCwweDUwIH0sCisgIDE2LCAweGE4NjAsIDAsIHsweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhYSwweDE1LDB4YmMsMHgwMiwweGNmLDB4MDAsMHhiMiwweDQwIH0sCisgIDE2LCAweGE4NzAsIDAsIHsweDBkLDB4MTAsMHgwMywweGU4LDB4MjQsMHhlYiwweGMxLDB4M2UsMHhjMCwweDJkLDB4OTgsMHgxMywweDdjLDB4MGEsMHhjMiwweDQzIH0sCisgIDE2LCAweGE4ODAsIDAsIHsweDNlLDB4YjAsMHgwZiwweGE5LDB4MDMsMHhlOSwweDIwLDB4Y2YsMHgwMCwweDNlLDB4YzAsMHg4YywweGYwLDB4MDMsMHgwZCwweDIwIH0sCisgIDE2LCAweGE4OTAsIDAsIHsweGZhLDB4YzAsMHgzZiwweGMwLDB4MGYsMHg3NCwweDAxLDB4MmEsMHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE4YTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwMiwweDNhLDB4NDAsMHg4ZSwweDkwLDB4MDMsMHhlOCwweDE0LDB4NWIsMHg1MCwweDNjIH0sCisgIDE2LCAweGE4YjAsIDAsIHsweDUwLDB4NGUsMHg4NCwweDAzLDB4ZWMsMHgwMCwweGY4LDB4NDAsMHgzZSwweDgwLDB4MDcsMHg4MSwweDAzLDB4ZWMsMHgwOCwweGYzIH0sCisgIDE2LCAweGE4YzAsIDAsIHsweDAwLDB4M2EsMHhjMCwweDlmLDB4MzAsMHgwMywweGVjLDB4MDAsMHhjYiwweDIwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgyMywweGU4IH0sCisgIDE2LCAweGE4ZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDkwLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgzZiwweDQwIH0sCisgIDE2LCAweGE4ZTAsIDAsIHsweDBmLDB4ZDAsMHgwMywweDM4LDB4MjAsMHhjZiwweDA4LDB4MzIsMHhjMSwweDBlLDB4ZDAsMHgwMywweGZjLDB4MDAsMHhmZSwweDA4IH0sCisgIDE2LCAweGE4ZjAsIDAsIHsweDMxLDB4ZTUsMHgwZSwweGU0LDB4MDMsMHgzYSwweDAwLDB4ZmYsMHgwMCwweDMzLDB4ODAsMHgwZiwweGYwLDB4MmIsMHgyNCwweDAwIH0sCisgIDE2LCAweGE5MDAsIDAsIHsweGNjLDB4YTAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE5MTAsIDAsIHsweDgwLDB4MDQsMHg2YywweDAwLDB4YmIsMHgwMCwweDNhLDB4NjksMHgwYiwweDkwLDB4NmUsMHgwOCwweDAwLDB4ODMsMHg0MSwweDM2IH0sCisgIDE2LCAweGE5MjAsIDAsIHsweDQwLDB4YzgsMHg4OCwweGM2LDB4ZWMsMHgwMCwweDg4LDB4NDAsMHgzNiwweDgwLDB4MGQsMHhhOCwweDAzLDB4NmUsMHg1MCwweGJiIH0sCisgIDE2LCAweGE5MzAsIDAsIHsweDAwLDB4MzYsMHhjMCwweDBiLDB4YjAsMHgwMiwweDI0LDB4MDAsMHhkOSwweDA4LDB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMywweGUwIH0sCisgIDE2LCAweGE5NDAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweGJiLDB4MDAsMHgyZSwweDYwIH0sCisgIDE2LCAweGE5NTAsIDAsIHsweDAzLDB4ODAsMHgwMiwweDIwLDB4MDAsMHg4OSwweDAxLDB4MjIsMHg1OCwweDA4LDB4OTgsMHgyMiwweGVjLDB4MDEsMHhhYiwweDAwIH0sCisgIDE2LCAweGE5NjAsIDAsIHsweDIyLDB4MDAsMHgwYSwweDEwLDB4MDIsMHgyOCwweDAwLDB4YmIsMHgwMCwweDIyLDB4NDAsMHgwYiwweGIwLDB4MDIsMHgyOCwweDAwIH0sCisgIDE2LCAweGE5NzAsIDAsIHsweDhhLDB4MDAsMHgyZSwweGMwLDB4MGIsMHhiMCwweDQyLDB4MjAsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE5ODAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAwLDB4YjMsMHgwMCwweDI4LDB4NDAsMHg4YiwweDAwLDB4MDIsMHgwMiwweDQwLDB4ODksMHgwMSwweDI0IH0sCisgIDE2LCAweGE5OTAsIDAsIHsweGQyLDB4MjgsMHgxMCwweDAyLDB4Y2MsMHgwMCwweDgzLDB4MTAsMHgyNCwweDIwLDB4MDgsMHgwOCwweDAyLDB4NGUsMHgwMCwweGIzIH0sCisgIDE2LCAweGE5YTAsIDAsIHsweDA0LDB4YTAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDA4LDB4ODgsMHg5MiwweDAwLDB4MmMsMHhjMCwweDBiLDB4YjAsMHgwMiwweGMyIH0sCisgIDE2LCAweGE5YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGZmLDB4MDAsMHgzZSwweDAwIH0sCisgIDE2LCAweGE5YzAsIDAsIHsweDBmLDB4ODAsMHgwMiwweDIwLDB4MTAsMHg4OSwweDUwLDB4MjIsMHhkOCwweDJlLDB4OTYsMHgyMiwweGZjLDB4MDAsMHhlYiwweDQwIH0sCisgIDE2LCAweGE5ZDAsIDAsIHsweDMyLDB4YzAsMHgwYSwweDkwLDB4MDMsMHgyOCwweDAwLDB4ZmYsMHgwMCwweDIyLDB4MDAsMHgwZiwweGIwLDB4MDMsMHgyYywweGEwIH0sCisgIDE2LCAweGE5ZTAsIDAsIHsweGM4LDB4MDAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4MDAsMHgwNiwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE5ZjAsIDAsIHsweGEwLDB4MTksMHhmYywweDAwLDB4ZmYsMHgwYywweDNiLDB4MDAsMHgwZiwweGMwLDB4MDIsMHg3MCwweDkwLDB4ZmQsMHgwMCwweDNlIH0sCisgIDE2LCAweGFhMDAsIDAsIHsweGM5LDB4MGYsMHg5NiwweGMzLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwNCwweGZmIH0sCisgIDE2LCAweGFhMTAsIDAsIHsweDA0LDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGVjLDB4MDAsMHhmYywweDAwLDB4M2YsMHhjMCwweDBmLDB4NzAsMHgwMywweGU4IH0sCisgIDE2LCAweGFhMjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZGMsMHg4MCwweGZiLDB4MjgsMHgzZiwweDAwIH0sCisgIDE2LCAweGFhMzAsIDAsIHsweDBjLDB4YzEsMHgwYiwweGYxLDB4MDIsMHhlZCwweDAwLDB4MzcsMHgzMCwweDJjLDB4ZjEsMHgwMywweGIyLDB4NDAsMHhmZiwweDAwIH0sCisgIDE2LCAweGFhNDAsIDAsIHsweGJiLDB4YzAsMHgwZiwweDQ4LDB4MDYsMHhiMiwweDAwLDB4ZmMsMHg4MCwweDNiLDB4Y2MsMHgwYywweGYwLDB4MDMsMHg3MCwweDgwIH0sCisgIDE2LCAweGFhNTAsIDAsIHsweGRmLDB4MjgsMHgzMywweDA0LDB4MGYsMHhmNCwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFhNjAsIDAsIHsweDgwLDB4MTAsMHhmZiwweDQwLDB4YmYsMHg2MCwweDJlLDB4MjEsMHgwOCwweDgyLDB4MDIsMHgyMCwweDAwLDB4YTksMHgyOCwweDJhIH0sCisgIDE2LCAweGFhNzAsIDAsIHsweDAwLDB4MDksMHhmYSwweDAyLDB4MjAsMHgwMCwweGJmLDB4NTEsMHgyMywweGQ4LDB4MDksMHg5OCwweDAyLDB4ZTQsMHgzMCwweGIwIH0sCisgIDE2LCAweGFhODAsIDAsIHsweDAwLDB4MjMsMHhkMCwweDA4LDB4ZjUsMHhhMiwweDI1LDB4YTQsMHg4ZiwweDQyLDB4M2MsMHgxMCwweDBiLDB4YjAsMHgwYSwweDIwIH0sCisgIDE2LCAweGFhOTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwMCwweGIzLDB4MDgsMHgyYywweDAwIH0sCisgIDE2LCAweGFhYTAsIDAsIHsweDI4LDB4MDAsMHgxYSwweGMwLDB4ODQsMHgyMCwweDAwLDB4MjQsMHhjOCwweDRiLDB4MzEsMHg0MiwweGMwLDB4MDAsMHg5MywweDAyIH0sCisgIDE2LCAweGFhYjAsIDAsIHsweDIwLDB4YzYsMHgwOCwweDAwLDB4MDYsMHhjMCwweDgxLDB4YjMsMHgwMCwweDJjLDB4ZDgsMHgwOSwweDMyLDB4MDIsMHhhMCwweDQwIH0sCisgIDE2LCAweGFhYzAsIDAsIHsweDkzLDB4MDEsMHgyNCwweDRjLDB4MGIsMHgzMiwweDAyLDB4MjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFhZDAsIDAsIHsweGMwLDB4MTEsMHhhYywweDAwLDB4YmIsMHgwMiwweDJlLDB4MGEsMHgwOCwweDgwLDB4ODIsMHg2MCwweDAwLDB4YTgsMHgwMCwweDJlIH0sCisgIDE2LCAweGFhZTAsIDAsIHsweGUwLDB4MWIsMHhiMCwweDAyLDB4NjIsMHgwMSwweDNiLDB4MDAsMHgyMiwweGMxLDB4MDksMHg5MCwweDAyLDB4ZTIsMHgwMCwweGJiIH0sCisgIDE2LCAweGFhZjAsIDAsIHsweDYwLDB4MjYsMHhjMSwweDA4LDB4YjAsMHgyYSwweDI2LDB4MDAsMHg5YiwweDA0LDB4MmUsMHgyMSwweDBiLDB4YjAsMHgwMiwweDMwIH0sCisgIDE2LCAweGFiMDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDExLDB4ZWMsMHgxMCwweGZiLDB4MDAsMHgzZSwweDEwIH0sCisgIDE2LCAweGFiMTAsIDAsIHsweDA4LDB4ODQsMHgxMywweGVjLDB4MDIsMHhhOSwweDA0LDB4MzYsMHgyMCwweDBmLDB4YjAsMHgwMywweGVlLDB4ODAsMHhmYiwweDAwIH0sCisgIDE2LCAweGFiMjAsIDAsIHsweDNhLDB4YzAsMHgwYywweGEwLDB4MDMsMHhhMiwweDgwLDB4NzksMHg0MCwweDFlLDB4YzAsMHg4YywweGIwLDB4NjMsMHg2YSwweDEwIH0sCisgIDE2LCAweGFiMzAsIDAsIHsweGQzLDB4MDAsMHgzNiwweGEyLDB4MDcsMHhiMCwweDAzLDB4MDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFiNDAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4ZmYsMHgwMCwweDNlLDB4MjAsMHg0ZCwweDQxLDB4MDMsMHg5YywweDAwLDB4ZmQsMHgyMCwweGFiIH0sCisgIDE2LCAweGFiNTAsIDAsIHsweDAwLDB4MGMsMHhmMCwweDAzLDB4YjgsMHgwMCwweGY3LDB4MDAsMHgzZiwweGMwLDB4NGQsMHhjOSwweDAzLDB4ZjQsMHgwMCwweGZmIH0sCisgIDE2LCAweGFiNjAsIDAsIHsweDAwLDB4M2IsMHhjMCwweDJlLDB4ZjAsMHgwMCwweGYwLDB4MDAsMHhlZiwweDAwLDB4M2YsMHgwMCwweDRiLDB4NzAsMHgwMywweGY4IH0sCisgIDE2LCAweGFiNzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHg4MCwweGViLDB4MDAsMHg3ZSwweDEwIH0sCisgIDE2LCAweGFiODAsIDAsIHsweDJlLDB4ODQsMHgwMywweGVjLDB4MDAsMHhlMCwweDAwLDB4MzIsMHg1MCwweDBmLDB4YjAsMHg4NiwweDI1LDB4MDAsMHhkYiwweDIwIH0sCisgIDE2LCAweGFiOTAsIDAsIHsweDNhLDB4YzAsMHgwZCwweGIwLDB4NjMsMHhlMSwweDEwLDB4ZmIsMHg0OCwweDM4LDB4YzEsMHgwZiwweDMwLDB4MDMsMHgyYywweDA0IH0sCisgIDE2LCAweGFiYTAsIDAsIHsweGZiLDB4MDgsMHgzMiwweGMwLDB4MGMsMHhiMCwweDBiLDB4OTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFiYjAsIDAsIHsweGM4LDB4MDUsMHgzYywweDAwLDB4OGYsMHgwMCwweDY0LDB4MjksMHgyOCwweDgwLDB4MDMsMHhlYywweDAyLDB4ZTgsMHgwNCwweGE4IH0sCisgIDE2LCAweGFiYzAsIDAsIHsweDU2LDB4MDgsMHhmYywweDA3LDB4ZTAsMHgwMCwweDBmLDB4YTAsMHhiZiwweGMwLDB4MGIsMHg5NSwweDAyLDB4YTAsMHgwMCwweGJiIH0sCisgIDE2LCAweGFiZDAsIDAsIHsweDA1LDB4MzcsMHhjMCwweDg5LDB4ZjAsMHgwYSwweDBkLDB4YzgsMHhiZiwweDA4LDB4MmEsMHg4MCwweDA4LDB4ZjAsMHgwMiwweDMyIH0sCisgIDE2LCAweGFiZTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMSwweGIzLDB4MDIsMHgyNCwweGUwIH0sCisgIDE2LCAweGFiZjAsIDAsIHsweDBhLDB4MzAsMHgxMiwweDgwLDB4MDMsMHhhMywweDAwLDB4YTgsMHgwMCwweDAyLDB4YjgsMHgyMiwweGMwLDB4MDAsMHhiMywweDAwIH0sCisgIDE2LCAweGFjMDAsIDAsIHsweDI4LDB4YzEsMHgwYiwweDA0LDB4MDIsMHgwOCwweDAwLDB4YjksMHg0MCwweDI4LDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwMywweDA0IH0sCisgIDE2LCAweGFjMTAsIDAsIHsweGIzLDB4NDQsMHgyMCwweDAwLDB4NGEsMHgzMCwweDAyLDB4MzgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFjMjAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDIwLDB4MTcsMHhhMCwweDY1LDB4ZWMsMHgwOCwweDM4LDB4MDIsMHhjMiwweDQxLDB4YjMsMHg5MiwweDJiIH0sCisgIDE2LCAweGFjMzAsIDAsIHsweDY0LDB4MGEsMHgzOCwweDAyLDB4MzYsMHgwMSwweGI3LDB4OTAsMHgyZCwweGUwLDB4MDMsMHhmOCwweDAwLDB4OWEsMHgwMCwweGI1IH0sCisgIDE2LCAweGFjNDAsIDAsIHsweDgwLDB4MmQsMHhlMCwweDg5LDB4NzgsMHgxMiwweDFlLDB4MDAsMHhiNywweDgwLDB4MjksMHhlMCwweDBhLDB4NzgsMHgwMiwweDA4IH0sCisgIDE2LCAweGFjNTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweDczLDB4YjAsMHgyNCwweGM4IH0sCisgIDE2LCAweGFjNjAsIDAsIHsweDRlLDB4MzAsMHgwYSwweDgwLDB4MDIsMHhlMiwweDAwLDB4MzgsMHg5NCwweDBlLDB4MzEsMHhhMiwweGM4LDB4MDAsMHg3MywweDAwIH0sCisgIDE2LCAweGFjNzAsIDAsIHsweDE4LDB4YzQsMHgwNSwweDAwLDB4MDMsMHgwMCwweDAwLDB4ZjMsMHgwMCwweDM4LDB4YzAsMHgwNywweGIxLDB4MDMsMHgwMCwweDAwIH0sCisgIDE2LCAweGFjODAsIDAsIHsweGYzLDB4MDEsMHgzMCwweDQxLDB4MGUsMHhiMCwweDAzLDB4OTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFjOTAsIDAsIHsweDQwLDB4MWQsMHhiZCwweDAwLDB4ZWYsMHgxMCwweDI2LDB4YzgsMHgwMywweGIxLDB4MDMsMHhlMCwweDAwLDB4ZWEsMHg4MSwweDc4IH0sCisgIDE2LCAweGFjYTAsIDAsIHsweGM1LDB4MGMsMHhiNSwweGUzLDB4ZGMsMHgwMCwweGMzLDB4MDAsMHgzZSwweGMxLDB4MGYsMHhmMCwweDgzLDB4YjAsMHgwMCwweGZmIH0sCisgIDE2LCAweGFjYjAsIDAsIHsweDAwLDB4MzcsMHhjMCwweDBkLDB4ZjQsMHgwMywweGU0LDB4MDAsMHhmNywweDAwLDB4M2YsMHg0MCwweDBkLDB4ZjAsMHgwMywweGQwIH0sCisgIDE2LCAweGFjYzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWQsMHgxMCwweGNiLDB4MjgsMHgzZSwweGMwIH0sCisgIDE2LCAweGFjZDAsIDAsIHsweDBkLDB4YjAsMHgxMywweGFjLDB4MTAsMHhmYiwweDAwLDB4M2EsMHg4MCwweDA0LDB4YjQsMHgwMywweGFjLDB4MDAsMHhmYiwweDA0IH0sCisgIDE2LCAweGFjZTAsIDAsIHsweDNlLDB4YzAsMHgwZiwweGE0LDB4YjMsMHhlMCwweDAwLDB4ZmIsMHg4MCwweDMyLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhlOCwweDAwIH0sCisgIDE2LCAweGFjZjAsIDAsIHsweGZiLDB4NDgsMHhiMiwweDgwLDB4MGYsMHhiMCwweDQzLDB4ZWEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFkMDAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDAyLDB4ODcsMHg0NCwweDM4LDB4YzAsMHg4ZCwweDMwLDB4MDIsMHg0YywweDAwLDB4ZmYsMHgwMCwweDIxIH0sCisgIDE2LCAweGFkMTAsIDAsIHsweGMwLDB4MDgsMHg3MCwweDAzLDB4OWMsMHgwMCwweGIzLDB4NTAsMHgyMSwweGQ0LDB4NGUsMHg2MiwweDAyLDB4ZDAsMHgwMCwweGJmIH0sCisgIDE2LCAweGFkMjAsIDAsIHsweDAwLDB4MzUsMHhkNCwweDA5LDB4NzAsMHgyMiwweGQ4LDB4MDAsMHhiZiwweDIyLDB4MjEsMHhjMCwweDBiLDB4NzIsMHgwMiwweGQyIH0sCisgIDE2LCAweGFkMzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHg0MCwweDg3LDB4ODAsMHgyZCwweGUwIH0sCisgIDE2LCAweGFkNDAsIDAsIHsweDA5LDB4NzgsMHgwMiwweGRlLDB4MDAsMHhiNiwweDgwLDB4MjksMHhhMSwweDI4LDB4N2EsMHgzMiwweGRlLDB4MDAsMHgzNywweGEwIH0sCisgIDE2LCAweGFkNTAsIDAsIHsweDI1LDB4ZTAsMHgwOSwweDc4LDB4MDYsMHhkMiwweDAwLDB4YjcsMHg4MCwweDIxLDB4ZTgsMHgwYiwweDc5LDB4MDIsMHhkZSwweDAwIH0sCisgIDE2LCAweGFkNjAsIDAsIHsweGI3LDB4OTAsMHgyMSwweGUwLDB4MGIsMHg3OSwweDAyLDB4ZjAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFkNzAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDA0LDB4ODMsMHgwMSwweDI4LDB4YzAsMHg4OSwweGIwLDB4MGEsMHg0ZiwweDAwLDB4YjIsMHgwMCwweDIwIH0sCisgIDE2LCAweGFkODAsIDAsIHsweGM0LDB4ODgsMHgzMCwweDE2LDB4Y2YsMHgwMCwweGJiLDB4MDQsMHgyMCwweGMxLDB4MGEsMHgzMiwweDA2LDB4YzIsMHgwMCwweGIzIH0sCisgIDE2LCAweGFkOTAsIDAsIHsweDAwLDB4MjQsMHhjMCwweDA5LDB4MzAsMHg0MiwweGVmLDB4MTAsMHhiMywweDAwLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweGQyIH0sCisgIDE2LCAweGFkYTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweDRhLDB4MDAsMHgzZSwweDgwIH0sCisgIDE2LCAweGFkYjAsIDAsIHsweDJkLDB4YTAsMHgwYiwweGFhLDB4ODAsMHhmZSwweDAwLDB4MmIsMHg4MCwweDBjLDB4YTAsMHg0MywweGZiLDB4MzAsMHhmYSwweDAwIH0sCisgIDE2LCAweGFkYzAsIDAsIHsweDNlLDB4ODAsMHgwZiwweGEwLDB4ODMsMHhmYSwweDA0LDB4ZmUsMHgxOCwweDIyLDB4ODAsMHgwZiwweGEwLDB4MDMsMHhmYSwweDg0IH0sCisgIDE2LCAweGFkZDAsIDAsIHsweGYyLDB4MDAsMHgzMywweGEyLDB4MGYsMHhhMCwweDAzLDB4ZjIsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFkZTAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjAsMHgwMCwweDNlLDB4MDAsMHgyZiwweDgwLDB4MDMsMHhhMCwweDIwLDB4ZmMsMHgwMiwweDNlIH0sCisgIDE2LCAweGFkZjAsIDAsIHsweDAwLDB4MWYsMHg4NCwweDAzLDB4YTAsMHgwMCwweGY4LDB4NDAsMHgzZSwweDAwLDB4NGYsMHg4MCwweDAxLDB4ZTAsMHg0MCwweGY4IH0sCisgIDE2LCAweGFlMDAsIDAsIHsweDQwLDB4M2UsMHgwMCwweDBkLDB4ODAsMHgxMywweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH0sCisgIDE2LCAweGFlMTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4YzYsMHgwMCwweGQ5LDB4MDAsMHgzNiwweDQwIH0sCisgIDE2LCAweGFlMjAsIDAsIHsweDBmLDB4OTAsMHgwYiwweDA0LDB4MDAsMHhjOSwweDAwLDB4MzYsMHg2OCwweDZjLDB4OTQsMHgwMywweGU0LDB4MjAsMHhiOSwweDkwIH0sCisgIDE2LCAweGFlMzAsIDAsIHsweDM2LDB4NDAsMHgwYywweDk0LDB4MDMsMHhlNCwweDAwLDB4MjksMHg4MCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHgyNCwweDIwIH0sCisgIDE2LCAweGFlNDAsIDAsIHsweGM5LDB4MDAsMHgzNiwweDQwLDB4MGYsMHg5MCwweDAzLDB4YzIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFlNTAsIDAsIHsweDgwLDB4MDQsMHg2NiwweDUwLDB4ODksMHgwMCwweDIwLDB4NTAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDA5LDB4ZDksMHgwMCwweDIwIH0sCisgIDE2LCAweGFlNjAsIDAsIHsweDQ4LDB4NDgsMHg5MCwweDA2LDB4ZTQsMHgwNCwweDk5LDB4YTAsMHgyMiwweDQwLDB4MGQsMHhiOCwweDIyLDB4NjQsMHgwMCwweDA5IH0sCisgIDE2LCAweGFlNzAsIDAsIHsweDUwLDB4MzIsMHg0MCwweDBiLDB4OTAsMHgwMiwweDI3LDB4OTAsMHg4OSwweDQwLDB4MmEsMHg0MCwweDBiLDB4OTAsMHgwMiwweGUwIH0sCisgIDE2LCAweGFlODAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4MjQsMHgwMCwweDk5LDB4MDAsMHg2NiwweDQyIH0sCisgIDE2LCAweGFlOTAsIDAsIHsweDBhLDB4ZDAsMHgxMiwweDM0LDB4MDAsMHg4NSwweDAwLDB4MjYsMHg0MCwweDRhLDB4OTAsMHgwMiwweGU0LDB4MDEsMHhiOSwweDAxIH0sCisgIDE2LCAweGFlYTAsIDAsIHsweDI0LDB4NDAsMHg1OCwweDkwLDB4MTIsMHhjNCwweDAwLDB4MjksMHg0MCwweDJlLDB4NDAsMHgwYiwweDEwLDB4MGEsMHgyNCwweDgwIH0sCisgIDE2LCAweGFlYjAsIDAsIHsweDg5LDB4MDUsMHgyNiwweDQxLDB4MGIsMHg5MCwweDAyLDB4YzYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFlYzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDgwLDB4ODEsMHgyMCwweDYxLDB4NDgsMHgwOCwweDUyLDB4MDIsMHgxNCwweDgxLDB4OTUsMHgyMCwweDIwIH0sCisgIDE2LCAweGFlZDAsIDAsIHsweDQwLDB4MGEsMHgzNiwweDAyLDB4YzQsMHgwMCwweGIxLDB4MjAsMHgwMCwweDQ4LDB4NDEsMHgxMCwweDQyLDB4NDQsMHgwMSwweGExIH0sCisgIDE2LCAweGFlZTAsIDAsIHsweDAwLDB4MjQsMHg0OCwweDBiLDB4MTIsMHgxMiwweDA0LDB4ODAsMHg4MSwweDIwLDB4MjgsMHg0OCwweDBiLDB4MTIsMHgwMiwweGNhIH0sCisgIDE2LCAweGFlZjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGQ4LDB4NTAsMHgzNiwweDAwIH0sCisgIDE2LCAweGFmMDAsIDAsIHsweDBlLDB4ODUsMHgyMywweDIxLDB4NDIsMHg4YywweDU0LDB4MzQsMHgxNCwweDBlLDB4ODAsMHgwMiwweGUxLDB4NDAsMHhmOCwweDUwIH0sCisgIDE2LCAweGFmMTAsIDAsIHsweDM2LDB4MTQsMHgwNCwweDgwLDB4MDMsMHhlMSwweDQ0LDB4ZTgsMHg1MCwweDdlLDB4MTUsMHgwZiwweDg1LDB4MDMsMHgyMSwweDQyIH0sCisgIDE2LCAweGFmMjAsIDAsIHsweDRhLDB4MDAsMHgzNiwweDE0LDB4MGYsMHg4MCwweDAzLDB4ZWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFmMzAsIDAsIHsweDk4LDB4MWQsMHhjNCwweDQwLDB4ZjksMHgxMCwweDFlLDB4NDQsMHg0ZSwweDkxLDB4MDMsMHhlNCwweDQwLDB4ZjksMHgxMCwweDNmIH0sCisgIDE2LCAweGFmNDAsIDAsIHsweGMwLDB4MGQsMHg5MSwweDAzLDB4ZjQsMHgwMCwweGQ5LDB4MTQsMHgzZSwweDQ0LDB4MGYsMHg5MCwweDAzLDB4NzQsMHgwMCwweGRkIH0sCisgIDE2LCAweGFmNTAsIDAsIHsweDAwLDB4N2EsMHg0NCwweDBmLDB4OTEsMHgwMywweGY0LDB4NDAsMHhmOSwweDM4LDB4M2YsMHg0NCwweDBmLDB4OTMsMHg4MywweGU3IH0sCisgIDE2LCAweGFmNjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4ZjYsMHg4MCwweGY5LDB4YTQsMHgzZiwweDY4IH0sCisgIDE2LCAweGFmNzAsIDAsIHsweDBlLDB4OWUsMHg0MywweDY3LDB4ODAsMHhkOSwweGU0LDB4M2YsMHg0MSwweDBmLDB4ZDgsMHg0MywweDA0LDB4MDAsMHhlZCwweGMwIH0sCisgIDE2LCAweGFmODAsIDAsIHsweDM2LDB4NDAsMHgwYywweDkwLDB4MDMsMHhlNCwweDAwLDB4ZDUsMHg0MCwweDMyLDB4NDAsMHgwYywweDkwLDB4MDMsMHhmNCwweDAwIH0sCisgIDE2LCAweGFmOTAsIDAsIHsweGRkLDB4MDAsMHgzMiwweDQwLDB4MmMsMHg5YSwweDAzLDB4YzYsMHgwMSwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFmYTAsIDAsIHsweDM4LDB4MTAsMHhlMCwweDAwLDB4ZTgsMHhjMCwweDJlLDB4MTQsMHg0ZCwweDhmLDB4MjIsMHgyMywweGMwLDB4ZjgsMHhmMCwweGFhIH0sCisgIDE2LCAweGFmYjAsIDAsIHsweDAwLDB4MGMsMHg4MCwweDAzLDB4YTIsMHhhMCwweGQ4LDB4ODIsMHgyMiwweDAwLDB4MDgsMHg4MCwweDAyLDB4ZTgsMHgwMCwweGQ4IH0sCisgIDE2LCAweGFmYzAsIDAsIHsweDgwLDB4MmEsMHgwMCwweDA4LDB4ODAsMHgwMiwweGU4LDB4MDgsMHg4OCwweGE4LDB4MzYsMHgwMCwweDQ4LDB4OGEsMHg4MiwweGNlIH0sCisgIDE2LCAweGFmZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzUsMHgwMCwweGIxLDB4NDgsMHgyZSwweDQwIH0sCisgIDE2LCAweGFmZTAsIDAsIHsweDBhLDB4MTIsMHgyMiwweDQ0LDB4MDAsMHg5MSwweDA0LDB4YTQsMHg0MSwweDBhLDB4OTQsMHgwNiwweDI0LDB4MDAsMHg5MSwweDQyIH0sCisgIDE2LCAweGFmZjAsIDAsIHsweDI0LDB4NDEsMHgwOSwweDEwLDB4MDIsMHhlNCwweDAxLDB4OTEsMHgyMCwweDI0LDB4NDAsMHgwOSwweDEwLDB4MDIsMHhjNCwweDAxIH0sCisgIDE2LCAweGIwMDAsIDAsIHsweDkxLDB4MDAsMHgyYywweDQwLDB4MDksMHgxNCwweDAyLDB4YzIsMHgwMSwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIwMTAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4YTksMHgwMCwweDJlLDB4NDAsMHg0OCwweDEwLDB4MDIsMHgyNCwweDAwLDB4YjksMHg0MCwweGFhIH0sCisgIDE2LCAweGIwMjAsIDAsIHsweDQwLDB4MTgsMHhiMCwweDAyLDB4ZTQsMHgwOCwweDk5LDB4MDAsMHgyMiwweDQwLDB4MTksMHg5MCwweDQ2LDB4ZTQsMHg4MCwweDk5IH0sCisgIDE2LCAweGIwMzAsIDAsIHsweDA0LDB4MmUsMHg0MCwweDA5LDB4OTAsMHgwMiwweGU0LDB4MDEsMHg5OSwweDA0LDB4MjYsMHg1MCwweDA5LDB4OTAsMHgwMiwweGM2IH0sCisgIDE2LCAweGIwNDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDExLDB4ZTQsMHgwMCwweGY5LDB4MDYsMHgzYywweDQwIH0sCisgIDE2LCAweGIwNTAsIDAsIHsweDBhLDB4OTAsMHgwMywweDY0LDB4MDIsMHhkOSwweDAwLDB4YjYsMHg1MCwweDBlLDB4OTAsMHgyMywweDI2LDB4MDEsMHhmOSwweDAwIH0sCisgIDE2LCAweGIwNjAsIDAsIHsweDM2LDB4NDAsMHgyOSwweDk0LDB4ODMsMHhlNCwweDAwLDB4ZDksMHg0OCwweDM2LDB4NDAsMHgwZCwweDkwLDB4MDMsMHhjNywweDAwIH0sCisgIDE2LCAweGIwNzAsIDAsIHsweGQxLDB4MDcsMHgzYSwweDUwLDB4Y2QsMHg5MCwweDAzLDB4ZTgsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIwODAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDA4LDB4ZTksMHgwMCwweDNlLDB4NDAsMHg4ZiwweDkwLDB4MDMsMHhjNCwweDA4LDB4ZjEsMHgwMCwweDNhIH0sCisgIDE2LCAweGIwOTAsIDAsIHsweDY4LDB4OGYsMHg5MCwweDAzLDB4YTQsMHg0MSwweGY5LDB4MDAsMHhiZSwweDQwLDB4MGUsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5IH0sCisgIDE2LCAweGIwYTAsIDAsIHsweGMwLDB4MzgsMHg0MCwweDJlLDB4OTAsMHgwMywweGU2LDB4NDAsMHhlOSwweDAwLDB4M2UsMHg2OCwweDA2LDB4OTAsMHgwMywweGNhIH0sCisgIDE2LCAweGIwYjAsIDAsIHsweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGQ4LDB4MDUsMHgzZSwweDAwIH0sCisgIDE2LCAweGIwYzAsIDAsIHsweDA3LDB4ODAsMHgwYiwweDIwLDB4MDAsMHhlOCwweDQwLDB4M2UsMHgxMCwweDBkLDB4ODIsMHgwMywweDYwLDB4MDAsMHhjOCwweDAwIH0sCisgIDE2LCAweGIwZDAsIDAsIHsweGIyLDB4MDAsMHg4ZCwweDgzLDB4MDMsMHhlMCwweDAwLDB4ZDgsMHg1MCwweDNhLDB4MDAsMHgxZSwweDgwLDB4MDMsMHhlMSwweDI0IH0sCisgIDE2LCAweGIwZTAsIDAsIHsweGY4LDB4MDAsMHhiMiwweDAwLDB4MGYsMHg4MCwweDAzLDB4MDIsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIwZjAsIDAsIHsweDI4LDB4MDUsMHgzOCwweDAwLDB4OGEsMHgwNCwweDJmLDB4ODQsMHg2YSwweGEwLDB4MGIsMHhlOCwweDA4LDB4OGUsMHgwMCwweDNkIH0sCisgIDE2LCAweGIxMDAsIDAsIHsweDgwLDB4ODgsMHhlYywweDAzLDB4NjgsMHgxMCwweGE2LDB4MDEsMHgzNiwweDgwLDB4MDgsMHhhOCwweDAwLDB4YzgsMHgxMCwweDhlIH0sCisgIDE2LCAweGIxMTAsIDAsIHsweDEwLDB4MjIsMHg4MCwweDA4LDB4YTAsMHgwMiwweGZiLDB4MjAsMHhiZSwweDUxLDB4MmEsMHg4MCwweDBiLDB4YTAsMHgwMiwweDgyIH0sCisgIDE2LCAweGIxMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NDEsMHgyMSwweDkzLDB4MDAsMHgyYywweGYwIH0sCisgIDE2LCAweGIxMzAsIDAsIHsweDM5LDB4MzAsMHgwNiwweDBjLDB4MDAsMHhhMywweDAwLDB4MjgsMHgwOCwweDI4LDB4YmMsMHgwMiwweDJjLDB4MDAsMHg4MywweDgwIH0sCisgIDE2LCAweGIxNDAsIDAsIHsweDJhLDB4YzAsMHgwOCwweDMwLDB4MDAsMHhjYywweDAwLDB4OWEsMHg4MCwweDI4LDB4YzAsMHgwYSwweDMwLDB4MDIsMHhjZCwweDAwIH0sCisgIDE2LCAweGIxNTAsIDAsIHsweGIzLDB4MDQsMHg2MiwweGMxLDB4MGIsMHgzMCwweDAyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIxNjAsIDAsIHsweGEwLDB4MDEsMHgxZSwweDA0LDB4MDcsMHgxMSwweDJjLDB4ZDAsMHgwYSwweDMyLDB4MjIsMHhkYywweGMxLDB4ODcsMHgwMCwweDZkIH0sCisgIDE2LCAweGIxNzAsIDAsIHsweGQwLDB4MDgsMHgzNCwweDAyLDB4N2MsMHgwMCwweGE3LDB4MDgsMHgyNCwweGM4LDB4MDgsMHg3MCwweDAyLDB4ZGMsMHg4MCwweDBmIH0sCisgIDE2LCAweGIxODAsIDAsIHsweDAwLDB4MjEsMHhjNCwweDA4LDB4NzMsMHgwNiwweGRjLDB4MDAsMHhiMiwweDAwLDB4NjEsMHhjOCwweDBiLDB4M2EsMHgwMiwweDg4IH0sCisgIDE2LCAweGIxOTAsIDAsIHsweDA0LDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MGEsMHgwMCwweDU3LDB4ODEsMHgyZCwweGEwIH0sCisgIDE2LCAweGIxYTAsIDAsIHsweDJkLDB4N2MsMHgwMiwweDNlLDB4ODIsMHhlMywweGUwLDB4M2IsMHhlMCwweDBjLDB4NzgsMHgwMywweDFlLDB4MjAsMHhjNywweDgwIH0sCisgIDE2LCAweGIxYjAsIDAsIHsweGI5LDB4ZTgsMHgyYywweDc4LDB4MDMsMHhmZiwweDgwLDB4ZDYsMHg4MCwweDNiLDB4ZWMsMHgwMiwweDdhLDB4MDMsMHhkZSwweDAwIH0sCisgIDE2LCAweGIxYzAsIDAsIHsweGY3LDB4ODEsMHgzMSwweGVjLDB4OGYsMHg3YywweDAzLDB4MGEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIxZDAsIDAsIHsweDA4LDB4MWQsMHhhYywweDAwLDB4ZmIsMHgwMCwweDFlLDB4ODAsMHgyMywweGI2LDB4ODMsMHhlZCwweGEwLDB4ZGIsMHg2NCwweDNlIH0sCisgIDE2LCAweGIxZTAsIDAsIHsweGMwLDB4MGUsMHhiMCwweDAzLDB4ZWQsMHhjMCwweGYyLDB4MDAsMHgzZSwweGQ0LDB4MGEsMHhiMCwweDAzLDB4ZWMsMHgzMCwweGVlIH0sCisgIDE2LCAweGIxZjAsIDAsIHsweDY0LDB4M2UsMHhjMCwweDA3LDB4YjAsMHhjMywweGU4LDB4MDAsMHhmYiwweDAxLDB4M2UsMHhjOCwweDBmLDB4YjgsMHgwMywweGMyIH0sCisgIDE2LCAweGIyMDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZjYsMHgwMCwweGVmLDB4ODAsMHgzYiwweGUwIH0sCisgIDE2LCAweGIyMTAsIDAsIHsweDBmLDB4ZjgsMHg2MywweDdlLDB4MDQsMHhjZiwweGMwLDB4YjcsMHgyMCwweDBlLDB4ZjgsMHgwMywweGZjLDB4MDAsMHhjNywweDgwIH0sCisgIDE2LCAweGIyMjAsIDAsIHsweDMzLDB4ZjAsMHgwYywweGNjLDB4MDMsMHhmZSwweDA4LDB4ZjcsMHhjMSwweDMzLDB4ZTAsMHg0ZiwweGY4LDB4MDMsMHhiMiwweDQwIH0sCisgIDE2LCAweGIyMzAsIDAsIHsweGZmLDB4YTAsMHgzMSwweGU2LDB4MGMsMHhmOCwweDAzLDB4MTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIyNDAsIDAsIHsweGE4LDB4MTEsMHg5YywweDAwLDB4ZWYsMHgwMiwweDIxLDB4NDAsMHgyZCwweDcwLDB4MDIsMHgxYywweDAwLDB4ZjcsMHgxMCwweDI5IH0sCisgIDE2LCAweGIyNTAsIDAsIHsweDQwLDB4MDgsMHg3MCwweDIyLDB4ZmMsMHhjMCwweGE3LDB4MDAsMHgzZCwweGMwLDB4MDgsMHg0MCwweDAyLDB4ZGMsMHgwMCwweGI3IH0sCisgIDE2LCAweGIyNjAsIDAsIHsweDQwLDB4MjEsMHhjMCwweDBiLDB4NzAsMHgwMiwweGRhLDB4ODAsMHhiNywweDI0LDB4MjksMHhjNiwweDQ4LDB4ZjAsMHgwMiwweDJhIH0sCisgIDE2LCAweGIyNzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweGE3LDB4MDAsMHgyOCwweDg0IH0sCisgIDE2LCAweGIyODAsIDAsIHsweDBiLDB4MzAsMHgwMiwweDBjLDB4MDAsMHg5MywweDAwLDB4MjUsMHg4MCwweDBhLDB4NjEsMHgwMiwweGRjLDB4MDEsMHhhNywweDEwIH0sCisgIDE2LCAweGIyOTAsIDAsIHsweDI0LDB4YzAsMHgwOCwweDQwLDB4ODIsMHhkYywweDAwLDB4OWYsMHgwMCwweDI1LDB4YzQsMHgwYiwweDcwLDB4MDIsMHg5NCwweDI1IH0sCisgIDE2LCAweGIyYTAsIDAsIHsweGI3LDB4MzIsMHgyMywweGM0LDB4MWIsMHg3MCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIyYjAsIDAsIHsweDIwLDB4MTQsMHhjYywweDBjLDB4YTMsMHgwMCwweDIwLDB4MDAsMHgyOSwweDMwLDB4MGEsMHgwYywweDAwLDB4YTMsMHgwMCwweDZjIH0sCisgIDE2LCAweGIyYzAsIDAsIHsweDAwLDB4MDgsMHgxMCwweDQyLDB4Y2QsMHgxMCwweGFhLDB4MDAsMHhhYywweGMwLDB4MDAsMHgwNCwweDAyLDB4Y2QsMHgwMCwweGJiIH0sCisgIDE2LCAweGIyZDAsIDAsIHsweDEwLDB4MjQsMHhjMCwweDAzLDB4MzAsMHg0MiwweGMzLDB4MDksMHhiMywweDAwLDB4MmMsMHhkMCwweDBhLDB4MzAsMHgwMiwweDE4IH0sCisgIDE2LCAweGIyZTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4ODAsMHgwMCwweGVmLDB4MDAsMHgzYSwweDQwIH0sCisgIDE2LCAweGIyZjAsIDAsIHsweDA3LDB4ZjAsMHg0MywweDNjLDB4MDAsMHg5ZiwweGMwLDB4YjYsMHgxNCwweDBlLDB4ODAsMHgwNiwweGZjLDB4MDEsMHhjYiwweDAxIH0sCisgIDE2LCAweGIzMDAsIDAsIHsweDM3LDB4YzAsMHhhYywweGI0LDB4MDIsMHhmYywweDAwLDB4ZDksMHgwMSwweDM3LDB4YzAsMHg0YiwweGYwLDB4MTMsMHhhZSwweDA4IH0sCisgIDE2LCAweGIzMTAsIDAsIHsweGZiLDB4MDAsMHgzMywweGQwLDB4MmUsMHhmMCwweDBiLDB4MmEsMHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIzMjAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwNSwweDNlLDB4NDAsMHgwZiwweDMwLDB4MDMsMHhhYywweDE0LDB4ZmIsMHhhMCwweDNhIH0sCisgIDE2LCAweGIzMzAsIDAsIHsweGMwLDB4MGYsMHg4NCwweDQzLDB4ZWMsMHgwMSwweGY5LDB4NDAsMHgzZSwweGMwLDB4MGYsMHhhMiwweDAzLDB4ZWMsMHgyMSwweGY5IH0sCisgIDE2LCAweGIzNDAsIDAsIHsweDAwLDB4M2EsMHhjMCwweDBmLDB4YjAsMHgwMywweGU0LDB4MjAsMHhmMCwweDAwLDB4YmEsMHhjMCwweDBkLDB4YjAsMHgwMywweGUwIH0sCisgIDE2LCAweGIzNTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZjgsMHgwMCwweGQ3LDB4MDEsMHgzNSwweDY4IH0sCisgIDE2LCAweGIzNjAsIDAsIHsweDZkLDB4ZjAsMHgwMywweDNjLDB4MDEsMHhlNywweDAwLDB4MzMsMHhjMCwweDBkLDB4YzAsMHgwMywweGZjLDB4MjQsMHhjZiwweDAyIH0sCisgIDE2LCAweGIzNzAsIDAsIHsweDM3LDB4YzAsMHgwZCwweGQyLDB4MDIsMHhmYywweDAwLDB4ZGYsMHgwMSwweDMzLDB4YzAsMHg1ZSwweDcwLDB4MzMsMHgxYywweDE4IH0sCisgIDE2LCAweGIzODAsIDAsIHsweGNmLDB4NDEsMHgzMSwweGMyLDB4MGMsMHhmMCwweDAzLDB4NDAsMHg0MCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIzOTAsIDAsIHsweDgxLDB4MDAsMHg2YywweDAwLDB4OGIsMHgwMCwweDIyLDB4NTIsMHgyYSwweGIwLDB4MDMsMHg2YywweDAwLDB4YWIsMHgwMCwweDI4IH0sCisgIDE2LCAweGIzYTAsIDAsIHsweGMwLDB4MGEsMHg4YywweDAyLDB4ZWMsMHgxMCwweDhiLDB4ZTAsMHgyMiwweGMwLDB4MGYsMHg4MCwweDAyLDB4Y2MsMHgwMCwweDhiIH0sCisgIDE2LCAweGIzYjAsIDAsIHsweDgwLDB4MjIsMHhjMCwweDA4LDB4YjAsMHgwMiwweDJhLDB4MTAsMHhkOSwweDgwLDB4MjIsMHhjMCwweGM4LDB4YjAsMHgwMiwweGUwIH0sCisgIDE2LCAweGIzYzAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MjQsMHgwMSwweDliLDB4MDAsMHgyNiwweDgwIH0sCisgIDE2LCAweGIzZDAsIDAsIHsweDI5LDB4YjAsMHg2MiwweDBjLDB4MDAsMHhhYiwweDAxLDB4NmEsMHgwMCwweDA4LDB4OTgsMHgwMiwweGNjLDB4MDAsMHg5YiwweDgzIH0sCisgIDE2LCAweGIzZTAsIDAsIHsweDJlLDB4YzAsMHhjYiwweGI0LDB4MTIsMHhlYywweDAzLDB4OGIsMHg4MCwweDI4LDB4YzAsMHgwYSwweGIwLDB4MDYsMHhhMiwweDAwIH0sCisgIDE2LCAweGIzZjAsIDAsIHsweDhiLDB4MDIsMHg2MiwweGMwLDB4MDgsMHhiMCwweDAyLDB4ZTAsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI0MDAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAxLDB4ODMsMHgxNCwweDIwLDB4MDAsMHgwYSwweDMwLDB4MDIsMHg0YywweDAwLDB4ODMsMHgwMCwweDJhIH0sCisgIDE2LCAweGI0MTAsIDAsIHsweDQwLDB4MGEsMHgxMCwweDAwLDB4Y2MsMHgwMiwweDkzLDB4MDAsMHgyOCwweGMwLDB4MGEsMHgyMCwweDAyLDB4ZWMsMHgwMCwweDAzIH0sCisgIDE2LCAweGI0MjAsIDAsIHsweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgxNiwweDAwLDB4ODAsMHg5MSwweDAwLDB4NjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweGMyIH0sCisgIDE2LCAweGI0MzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGRiLDB4MDAsMHgzNiwweDgwIH0sCisgIDE2LCAweGI0NDAsIDAsIHsweDJkLDB4ZjAsMHgwMywweDNjLDB4MDAsMHhhZiwweDAwLDB4M2EsMHg4MCwweDBkLDB4ODAsMHgwMywweGZjLDB4MDAsMHg1YiwweDAwIH0sCisgIDE2LCAweGI0NTAsIDAsIHsweDM3LDB4YzAsMHgwOSwweDkwLDB4MDMsMHhmYywweDAwLDB4ZGYsMHgwMCwweDMzLDB4YzAsMHgwYSwweGYwLDB4MDMsMHhhNCwweDIwIH0sCisgIDE2LCAweGI0NjAsIDAsIHsweGNiLDB4MDAsMHhiMywweGMwLDB4OGMsMHhiMCwweDAzLDB4NDAsMHgwMiwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI0NzAsIDAsIHsweGEwLDB4MWQsMHhmYywweDA0LDB4ZmYsMHgyMCwweDBmLDB4MDAsMHgyNywweGYwLDB4MDMsMHhmYywweDAwLDB4ZmYsMHgwMCwweDJkIH0sCisgIDE2LCAweGI0ODAsIDAsIHsweDAwLDB4MGIsMHhkMCwweDI3LDB4ZmMsMHgwMCwweGVmLDB4MDAsMHgzNywweGMwLDB4MGYsMHhjMCwweDQzLDB4ZmMsMHgwMCwweGZmIH0sCisgIDE2LCAweGI0OTAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBkLDB4ZjAsMHgwYiwweGUwLDB4MDAsMHhmNSwweDAwLDB4M2YsMHhjMCwweDFmLDB4ZjAsMHgwMywweGU4IH0sCisgIDE2LCAweGI0YTAsIDAsIHsweDA3LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAxLDB4ZjQsMHhjMCwweGZjLDB4MjIsMHg3ZiwweGMwIH0sCisgIDE2LCAweGI0YjAsIDAsIHsweDBjLDB4ZDAsMHg0MywweDM2LDB4MDAsMHhjNCwweDgxLDB4MzQsMHhjMCwweDFjLDB4ODksMHgwNywweGYyLDB4ODAsMHhjZiwweDgwIH0sCisgIDE2LCAweGI0YzAsIDAsIHsweDMzLDB4NjAsMHgwZiwweDc5LDB4MDMsMHgzYywweGUwLDB4Y2YsMHgwOCwweDMzLDB4NDgsMHgwZCwweGM0LDB4MDMsMHhmMCwweDUwIH0sCisgIDE2LCAweGI0ZDAsIDAsIHsweGRjLDB4OTAsMHgzNywweGNjLDB4MGYsMHhmOCwweDAzLDB4ZjAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI0ZTAsIDAsIHsweDgwLDB4MTAsMHhlOSwweDkwLDB4YjgsMHg4MCwweDdlLDB4ZTQsMHg4OCwweDk5LDB4MGEsMHgyNiwweDA4LDB4YTksMHg4MCwweDIyIH0sCisgIDE2LCAweGI0ZjAsIDAsIHsweGY0LDB4MmMsMHg5OSwweDAzLDB4YTcsMHgwMiwweDg5LDB4ODAsMHgyMiwweDM0LDB4MGIsMHg5YSwweDAzLDB4N2QsMHgwMCwweGRmIH0sCisgIDE2LCAweGI1MDAsIDAsIHsweDQ4LDB4MmIsMHg2MCwweDA4LDB4MDUsMHgwMiwweGU1LDB4MDAsMHg4MiwweDIwLDB4MjIsMHhjNCwweDhiLDB4YjAsMHgwMiwweGUwIH0sCisgIDE2LCAweGI1MTAsIDAsIHsweDA2LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzUsMHgwMCwweGIwLDB4MTAsMHgyYywweGMwIH0sCisgIDE2LCAweGI1MjAsIDAsIHsweDJhLDB4MDAsMHgwMiwweGE0LDB4MDgsMHhhOCwweDA0LDB4ZTAsMHg4MCwweDBiLDB4MDAsMHgwMiwweGM0LDB4NDEsMHhiMiwweDA0IH0sCisgIDE2LCAweGI1MzAsIDAsIHsweGE0LDB4MGEsMHgwYiwweGIwLDB4MDIsMHg4YywweDgxLDB4ODMsMHgyMCwweDYwLDB4NTAsMHg5OCwweDEyLDB4MTIsMHg4YiwweDgwIH0sCisgIDE2LCAweGI1NDAsIDAsIHsweDg5LDB4MDAsMHgyYywweGM4LDB4MGIsMHgzMCwweDAyLDB4ZTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI1NTAsIDAsIHsweGMwLDB4MTEsMHhhYywweDIwLDB4YmIsMHgwMiwweDJhLDB4YzAsMHgwYSwweDg4LDB4MDIsMHhhNCwweDA4LDB4YTksMHg4MCwweGEyIH0sCisgIDE2LCAweGI1NjAsIDAsIHsweGUxLDB4MWIsMHg5YywweDIyLDB4ZTYsMHgwMCwweGI4LDB4NDAsMHgyNiwweDMwLDB4MGIsMHg5MCwweDAyLDB4Y2MsMHgwMSwweDkzIH0sCisgIDE2LCAweGI1NzAsIDAsIHsweDA0LDB4MmEsMHg0MCwweDM5LDB4OTgsMHg4MiwweGVjLDB4MTQsMHg4YiwweDY1LDB4MmEsMHhjMCwweDBiLDB4YjIsMHgwMiwweGY4IH0sCisgIDE2LCAweGI1ODAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZTcsMHgwMCwweGI4LDB4NDgsMHgyZSwweDAwIH0sCisgIDE2LCAweGI1OTAsIDAsIHsweDBlLDB4ODgsMHg0MywweDg0LDB4MDAsMHhlMywweGMxLDB4MzYsMHhlOCwweDBmLDB4OWMsMHgxMiwweGUyLDB4ODAsMHhmMywweGMwIH0sCisgIDE2LCAweGI1YTAsIDAsIHsweDM2LDB4NzAsMHg1ZiwweGE4LDB4MjMsMHhhYywweDAxLDB4Y2IsMHgwNCwweDIyLDB4NDAsMHg0ZCwweDg0LDB4MDMsMHhlMiwweDAwIH0sCisgIDE2LCAweGI1YjAsIDAsIHsweGQ4LDB4MDAsMHgzZSwweGMwLDB4MGYsMHg5MCwweDAzLDB4ZDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI1YzAsIDAsIHsweGUwLDB4MDEsMHhiMywweDA5LDB4ZmUsMHgxMCwweDNlLDB4ODEsMHgwZCwweGMwLDB4MDMsMHg3NCwweDBjLDB4ZmYsMHgwMCwweDNkIH0sCisgIDE2LCAweGI1ZDAsIDAsIHsweGMxLDB4OGMsMHhkMCwweDgzLDB4MTQsMHgwMCwweGNkLDB4MjAsMHgzYSwweDQwLDB4MGQsMHhjYSwweDAxLDB4N2MsMHgwMCwweGZmIH0sCisgIDE2LCAweGI1ZTAsIDAsIHsweDAwLDB4MWYsMHg0MCwweDBlLDB4YzAsMHgyMywweGYyLDB4NDYsMHhmZSwweDg0LDB4MzcsMHhjMCwweDBmLDB4ZDgsMHgwMywweGY4IH0sCisgIDE2LCAweGI1ZjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGRkLDB4MDIsMHgzZCwweDQwIH0sCisgIDE2LCAweGI2MDAsIDAsIHsweDBlLDB4OTAsMHgwMywweGFjLDB4MDAsMHhlYiwweDQ4LDB4M2UsMHhkMCwweDBjLDB4ODAsMHg2MywweGEyLDB4MDgsMHhjYSwweDAwIH0sCisgIDE2LCAweGI2MTAsIDAsIHsweDMyLDB4MDgsMHgwYywweGIwLDB4MDMsMHhhYywweDA4LDB4ZWIsMHgwMCwweDNlLDB4NDAsMHgwYywweGQ0LDB4ODMsMHg1OCwweDIwIH0sCisgIDE2LCAweGI2MjAsIDAsIHsweGY5LDB4NDIsMHgzMiwweGMwLDB4MGMsMHhiMCwweDAzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI2MzAsIDAsIHsweGM4LDB4MDUsMHgyOCwweDAyLDB4ZGIsMHgwMCwweDJlLDB4ZTAsMHgyOCwweDNhLDB4MDIsMHgyZSwweDAwLDB4ZGIsMHg2MCwweDc2IH0sCisgIDE2LCAweGI2NDAsIDAsIHsweGUwLDB4MGQsMHg4YywweDAyLDB4ZTAsMHgwMCwweDg4LDB4MDIsMHgzNiwweDU4LDB4NjgsMHgxNSwweDgzLDB4N2MsMHgwOCwweGJmIH0sCisgIDE2LCAweGI2NTAsIDAsIHsweDAwLDB4MmQsMHg2MCwweDA4LDB4OTAsMHgwMiwweGE5LDB4MDAsMHhiMywweDA1LDB4MjMsMHhjMCwweDA4LDB4YjAsMHgwMiwweGYyIH0sCisgIDE2LCAweGI2NjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgxMCwweDgwLDB4MDAsMHgwYywweGMxIH0sCisgIDE2LCAweGI2NzAsIDAsIHsweDA4LDB4MWMsMHg4MiwweDA2LDB4MDAsMHg5MywweGMwLDB4MjAsMHhmNiwweDBhLDB4MjAsMHgwMiwweDA4LDB4MDAsMHg5MywweDAwIH0sCisgIDE2LCAweGI2ODAsIDAsIHsweDI0LDB4NjAsMHgwOSwweDNjLDB4MDIsMHgwYywweDAwLDB4ODMsMHgwMCwweDJjLDB4NjAsMHgwOSwweDAxLDB4MTIsMHgwMCwweDQwIH0sCisgIDE2LCAweGI2OTAsIDAsIHsweGIwLDB4MDAsMHhlMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4NzAsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI2YTAsIDAsIHsweDIwLDB4NDEsMHgwYSwweDQwLDB4ODYsMHg4MSwweDJkLDB4ZTAsMHg1OCwweDE4LDB4MGEsMHgxNiwweGEwLDB4OTcsMHg4MCwweDI1IH0sCisgIDE2LCAweGI2YjAsIDAsIHsweGU5LDB4MTksMHg3OCwweDgyLDB4ZDYsMHgwMCwweDk3LDB4ODAsMHgyNSwweGEwLDB4MTksMHhmOCwweDAyLDB4NWUsMHgwMCwweGI3IH0sCisgIDE2LCAweGI2YzAsIDAsIHsweDgwLDB4MmQsMHg2MCwweDI4LDB4NDgsMHgxMiwweDk2LDB4MDAsMHhiNCwweDgwLDB4MjEsMHhlMCwweDI4LDB4NzgsMHgwMiwweGM4IH0sCisgIDE2LCAweGI2ZDAsIDAsIHsweDA0LDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweDgxLDB4MzAsMHgzYywweGMyIH0sCisgIDE2LCAweGI2ZTAsIDAsIHsweDBlLDB4MDAsMHgwMiwweDg0LDB4MDAsMHhlMywweDQwLDB4MjgsMHhlOCwweDRjLDB4MjksMHgwMywweDBjLDB4MDAsMHhkMywweDAwIH0sCisgIDE2LCAweGI2ZjAsIDAsIHsweDM0LDB4YzQsMHgwZCwweDMxLDB4MDMsMHg4YywweDA4LDB4ZTMsMHgwMCwweDNjLDB4NDYsMHgwYywweDIwLDB4MDMsMHgwMCwweDgwIH0sCisgIDE2LCAweGI3MDAsIDAsIHsweGYyLDB4MDAsMHgzMiwweGMwLDB4MGMsMHgzMCwweDAzLDB4ZDIsMHgwMiwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI3MTAsIDAsIHsweDQwLDB4MTksMHhiOCwweDAwLDB4ZmYsMHgxMCwweDJmLDB4YzAsMHgwZiwweGMwLDB4MjMsMHhjNCwweDgwLDB4N2YsMHgxMCwweDNlIH0sCisgIDE2LCAweGI3MjAsIDAsIHsweGMwLDB4MGYsMHhiMSwweDAzLDB4ZGMsMHgwMCwweGU3LDB4MDAsMHgzZiwweDgwLDB4MDYsMHhmMSwweDQzLDB4ZmMsMHgwMCwweGZmIH0sCisgIDE2LCAweGI3MzAsIDAsIHsweDA4LDB4N2QsMHg1MCwweDBlLDB4ZTEsMHgyMywweGI0LDB4MDgsMHhmZSwweDEwLDB4M2YsMHhjNCwweDBmLDB4ZjAsMHgwMywweGQwIH0sCisgIDE2LCAweGI3NDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZTQsMHgwMiwweGNjLDB4MDAsMHgzZSwweDAwIH0sCisgIDE2LCAweGI3NTAsIDAsIHsweDJjLDB4YzAsMHgwMywweDA0LDB4MDEsMHhjYiwweDAwLDB4MzMsMHg2MCwweDJjLDB4OTAsMHgxMywweGU4LDB4MDAsMHg3MywweDAwIH0sCisgIDE2LCAweGI3NjAsIDAsIHsweGIyLDB4YzEsMHgwZiwweGEwLDB4MDMsMHhlYywweDgwLDB4ZmIsMHgyOCwweDNlLDB4NTQsMHgxZiwweGQwLDB4MDMsMHhmZSwweDAyIH0sCisgIDE2LCAweGI3NzAsIDAsIHsweGM5LDB4ODAsMHgzMiwweGMwLDB4MGYsMHhiMCwweDAzLDB4Y2EsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI3ODAsIDAsIHsweDQ4LDB4MTEsMHg4MCwweDAwLDB4ODYsMHgwMCwweDJkLDB4ODAsMHgwOCwweDIwLDB4MDIsMHgxNCwweDA4LDB4ODcsMHgwMCwweDI5IH0sCisgIDE2LCAweGI3OTAsIDAsIHsweDQwLDB4MDgsMHg3MCwweDAyLDB4ZGMsMHgwMCwweGI3LDB4MDAsMHgyMSwweGMwLDB4MGIsMHg2MCwweDAyLDB4NWMsMHhhMCwweDk3IH0sCisgIDE2LCAweGI3YTAsIDAsIHsweDIwLDB4MmQsMHg0OCwweDBiLDB4NTAsMHgwMiwweGRjLDB4MTAsMHg4ZCwweDAwLDB4MjEsMHhjOCwweDBiLDB4NzAsMHgwMiwweGQyIH0sCisgIDE2LCAweGI3YjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWYsMHgwMCwweDg1LDB4ODEsMHgyYywweDYwIH0sCisgIDE2LCAweGI3YzAsIDAsIHsweDE4LDB4NTgsMHgwMiwweGRlLDB4MjAsMHhiNywweDgyLDB4MjgsMHg2MCwweDVhLDB4NzgsMHg1MiwweGRlLDB4MTAsMHhiZiwweDgwIH0sCisgIDE2LCAweGI3ZDAsIDAsIHsweDIxLDB4ZTAsMHg0YiwweDc4LDB4MDYsMHhkZSwweDQwLDB4YjcsMHhhMCwweDJkLDB4NjksMHg5YiwweDc4LDB4MTIsMHhjZSwweDAwIH0sCisgIDE2LCAweGI3ZTAsIDAsIHsweDg3LDB4ODAsMHhlMSwweGU0LDB4MGIsMHg3OCwweDAyLDB4YzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI3ZjAsIDAsIHsweDQ4LDB4MTQsMHhlZSwweDAwLDB4ODMsMHgwMCwweDJjLDB4YzIsMHgwOCwweDM2LDB4MDIsMHg4YywweDA4LDB4ODMsMHhmMCwweDY4IH0sCisgIDE2LCAweGI4MDAsIDAsIHsweDQwLDB4MGEsMHgzZSwweDAyLDB4Y2QsMHg0MCwweGIzLDB4MDAsMHgyMCwweGUwLDB4MGIsMHgzMiwweDA2LDB4NGMsMHgwMCwweDliIH0sCisgIDE2LCAweGI4MTAsIDAsIHsweDAwLDB4MGMsMHg0MCwweDBiLDB4MzAsMHgwMiwweGNkLDB4ODAsMHg4MywweDA4LDB4MjAsMHhjMCwweDBiLDB4YjEsMHgwMiwweGRhIH0sCisgIDE2LCAweGI4MjAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YjgsMHgwMCwweGNlLDB4MDgsMHgzZiwweGIwIH0sCisgIDE2LCAweGI4MzAsIDAsIHsweDBjLDB4ZTQsMHgyMywweGRhLDB4MDIsMHhkZSwweDQwLDB4YmIsMHhiMiwweDBlLDB4ZTIsMHg0MywweGZhLDB4MDAsMHhmZSwweDAwIH0sCisgIDE2LCAweGI4NDAsIDAsIHsweDMzLDB4OTAsMHgwYiwweGUwLDB4MDMsMHhlOCwweDAwLDB4ZmEsMHgwMCwweDNlLDB4ODEsMHgwYiwweGUwLDB4MTMsMHhmOSwweDA4IH0sCisgIDE2LCAweGI4NTAsIDAsIHsweGNlLDB4NDAsMHgzMiwweDgwLDB4MGYsMHhhOCwweDAzLDB4ZmEsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI4NjAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDI0LDB4OTgsMHgwOCwweDNjLDB4MDQsMHgwZiwweDAwLDB4MGIsMHg2MCwweDAwLDB4ZjgsMHg0MCwweDJlIH0sCisgIDE2LCAweGI4NzAsIDAsIHsweDAzLDB4MGQsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDA2LDB4MGIsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGQ4IH0sCisgIDE2LCAweGI4ODAsIDAsIHsweDAwLDB4M2MsMHgwMCwweDAzLDB4OGMsMHgyMywweGUxLDB4MDAsMHhmOCwweDAwLDB4N2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH0sCisgIDE2LCAweGI4OTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMiwweGM5LDB4MDAsMHgzZSwweDQwIH0sCisgIDE2LCAweGI4YTAsIDAsIHsweDhjLDB4OTAsMHgwMywweDI1LDB4MDAsMHhlOSwweDgwLDB4MzIsMHg0NCwweDBmLDB4OTQsMHgwMiwweGU0LDB4MjAsMHhmOSwweDAwIH0sCisgIDE2LCAweGI4YjAsIDAsIHsweDMyLDB4NzAsMHgwZiwweDlhLDB4NDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDMyLDB4NDAsMHgwYywweDEwLDB4MzMsMHgyNCwweDEwIH0sCisgIDE2LCAweGI4YzAsIDAsIHsweGY5LDB4MDEsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4MDIsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI4ZDAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHg4MiwweDJlLDB4NDAsMHgyOCwweDkwLDB4MDIsMHgyNCwweDgyLDB4ODEsMHhjMCwweGEyIH0sCisgIDE2LCAweGI4ZTAsIDAsIHsweDcwLDB4MGIsMHg5YywweDAyLDB4ZTQsMHgwMCwweDMxLDB4NDIsMHhhMiwweDYwLDB4MGIsMHg5NCwweDgyLDB4ZTQsMHgwMCwweGI5IH0sCisgIDE2LCAweGI4ZjAsIDAsIHsweDAwLDB4MmEsMHg0MCwweDA4LDB4OTQsMHhhMiwweDI1LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwYSwweDIwIH0sCisgIDE2LCAweGI5MDAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweDg5LDB4NjQsMHgyZSwweDQwIH0sCisgIDE2LCAweGI5MTAsIDAsIHsweDA4LDB4OTAsMHg0MiwweGE0LDB4MDAsMHg4OSwweDYwLDB4MjIsMHg0MiwweDBiLDB4OTAsMHgwMiwweGU2LDB4MDAsMHhiOSwweDgwIH0sCisgIDE2LCAweGI5MjAsIDAsIHsweDIyLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhhNCwweDA0LDB4YjksMHgwMCwweDIyLDB4NDAsMHgyOCwweDkwLDB4MDIsMHgyNCwweDA0IH0sCisgIDE2LCAweGI5MzAsIDAsIHsweGI5LDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDAyLDB4MGUsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI5NDAsIDAsIHsweDA4LDB4MDQsMHgwNSwweDgwLDB4ODEsMHgwMCwweDJjLDB4YzEsMHg0OCwweDEwLDB4MDIsMHhhNCwweDAyLDB4ODEsMHgwMCwweDIwIH0sCisgIDE2LCAweGI5NTAsIDAsIHsweDQwLDB4ODMsMHgzNCwweDAyLDB4YzQsMHgwMCwweGJiLDB4MDAsMHgyMCwweGQwLDB4MGIsMHgxNCwweDAyLDB4YzQsMHg4MCwweGIxIH0sCisgIDE2LCAweGI5NjAsIDAsIHsweDIwLDB4YTAsMHg2OCwweDE4LDB4MTQsMHgxYSwweDBkLDB4MDAsMHhiMSwweDQwLDB4MmMsMHg1MCwweDBiLDB4MTAsMHgwMiwweDBhIH0sCisgIDE2LCAweGI5NzAsIDAsIHsweDA1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGM4LDB4MDAsMHgzZSwweDAwIH0sCisgIDE2LCAweGI5ODAsIDAsIHsweDhjLDB4ODAsMHgwYiwweGEwLDB4MDQsMHhlOCwweDAwLDB4MzIsMHgwMCwweDA3LDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwIH0sCisgIDE2LCAweGI5OTAsIDAsIHsweDMyLDB4MDAsMHgxZiwweDgwLDB4MDMsMHhhMSwweDQwLDB4ZjgsMHg1MCwweDMyLDB4MDAsMHgwYywweDgwLDB4MDMsMHgyMCwweDAwIH0sCisgIDE2LCAweGI5YTAsIDAsIHsweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI5YjAsIDAsIHsweDk4LDB4MWQsMHhmNCwweDQ2LDB4ZmQsMHg0MCwweDNmLDB4NTAsMHgyMywweGQ0LDB4MTMsMHg3NCwweDA0LDB4ZjUsMHgwMiwweDNmIH0sCisgIDE2LCAweGI5YzAsIDAsIHsweDUwLDB4MGYsMHhkNCwweDAzLDB4ZmQsMHgwMCwweGJkLDB4MDAsMHgyZiwweDUwLDB4MGYsMHhkMCwweDAzLDB4ZTQsMHg0MCwweGY5IH0sCisgIDE2LCAweGI5ZDAsIDAsIHsweDEwLDB4M2YsMHg0NCwweDBmLDB4ZDQsMHgwMywweGY1LDB4MDgsMHhmZCwweDA2LDB4M2UsMHg1MCwweDBmLDB4ZDIsMHg4MywweGU2IH0sCisgIDE2LCAweGI5ZTAsIDAsIHsweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZTYsMHg0MCwweGVkLDB4MDQsMHgzZSwweDQ4IH0sCisgIDE2LCAweGI5ZjAsIDAsIHsweDBjLDB4YjIsMHg4MywweGY0LDB4MDAsMHhjMSwweDAwLDB4MzIsMHg0MCwweDhjLDB4ZDAsMHgwMywweDM0LDB4MDAsMHhmZCwweDAwIH0sCisgIDE2LCAweGJhMDAsIDAsIHsweDM3LDB4NDAsMHgwZiwweGQwLDB4MDMsMHhlNiwweDIwLDB4ZjksMHg4OCwweDNkLDB4NjIsMHgwYywweGQ4LDB4MDMsMHhmZSwweDI0IH0sCisgIDE2LCAweGJhMTAsIDAsIHsweGMxLDB4MDAsMHgzZSwweDc4LDB4MGYsMHhkMCwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJhMjAsIDAsIHsweDM4LDB4MTAsMHhlMSwweDAwLDB4ODgsMHg0MCwweDJlLDB4MTAsMHgwOCwweGM0LDB4MjMsMHhhMCwweDA4LDB4ODgsMHgwNiwweDJhIH0sCisgIDE2LCAweGJhMzAsIDAsIHsweDE0LDB4MDgsMHg4MCwweDAzLDB4NjAsMHgwNCwweGI4LDB4MDAsMHgyMiwweDAwLDB4MGIsMHg4MCwweDAyLDB4ZTIsMHgwMCwweGI4IH0sCisgIDE2LCAweGJhNDAsIDAsIHsweDgwLDB4MmUsMHgwMCwweDA4LDB4OGMsMHgwMiwweGUzLDB4ODAsMHg4OCwweDAyLDB4MmUsMHgzOCwweDBiLDB4ODgsMHgwMiwweDBlIH0sCisgIDE2LCAweGJhNTAsIDAsIHsweDA2LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzUsMHg4MCwweGExLDB4YzAsMHgyZCwweDcwIH0sCisgIDE2LCAweGJhNjAsIDAsIHsweDA4LDB4NTAsMHg0MiwweGM0LDB4MDAsMHhhOSwweDAwLDB4MjAsMHhlMCwweDJhLDB4MTAsMHgwYSwweDA0LDB4MTAsMHhiMSwweDAwIH0sCisgIDE2LCAweGJhNzAsIDAsIHsweDI0LDB4NDAsMHg0YiwweDEwLDB4MDYsMHhjNCwweDIwLDB4YjEsMHgwOCwweDZlLDB4NDAsMHgwYiwweDE2LDB4ODIsMHhjNCwweDIwIH0sCisgIDE2LCAweGJhODAsIDAsIHsweDgxLDB4MDAsMHgyYywweDUwLDB4MGIsMHg5MiwweDgyLDB4NTIsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJhOTAsIDAsIHsweDE4LDB4MTEsMHhhNCwweDAwLDB4YTksMHgwMSwweDJlLDB4NDAsMHgyOCwweGQwLDB4MjAsMHhhNCwweDA0LDB4YTksMHgwMCwweDJhIH0sCisgIDE2LCAweGJhYTAsIDAsIHsweDQwLDB4MWEsMHhiMCwweDEyLDB4MjQsMHgwMCwweGI5LDB4MGMsMHgyMiwweDQyLDB4MGIsMHg5NCwweDAyLDB4ZTQsMHgwMCwweGI5IH0sCisgIDE2LCAweGJhYjAsIDAsIHsweDAwLDB4NmUsMHg0MCwweDBiLDB4OTYsMHgwMiwweGU0LDB4MTEsMHg4OSwweDIwLDB4NmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweDQ2IH0sCisgIDE2LCAweGJhYzAsIDAsIHsweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHhjMCwweGE5LDB4YzAsMHgzZSwweDUwIH0sCisgIDE2LCAweGJhZDAsIDAsIHsweDA4LDB4OWMsMHg4MywweGU0LDB4MDIsMHhlOSwweDAwLDB4YjIsMHg0MCwweDJhLDB4OTIsMHgxMiwweDI2LDB4NDAsMHhmOSwweDQwIH0sCisgIDE2LCAweGJhZTAsIDAsIHsweDM2LDB4NzAsMHgwZiwweDk0LDB4MDMsMHhlNCwweDA0LDB4ZjksMHgwMSwweDNjLDB4NDAsMHgwZiwweDk4LDB4MDMsMHhlNiwweDAyIH0sCisgIDE2LCAweGJhZjAsIDAsIHsweGM5LDB4MjIsMHgzZSwweDQwLDB4MGYsMHgxMCwweDAyLDB4NjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJiMDAsIDAsIHsweDI4LDB4MDEsMHg4NiwweDA0LDB4ZDksMHg0MCwweDFjLDB4NDAsMHgwZiwweDkyLDB4MjMsMHhhNCwweGIwLDB4ZGIsMHgwNCwweDNjIH0sCisgIDE2LCAweGJiMTAsIDAsIHsweGMwLDB4MGQsMHg5YSwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQ0LDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5IH0sCisgIDE2LCAweGJiMjAsIDAsIHsweDAwLDB4M2UsMHg0MiwweDJjLDB4OTAsMHgyMywweGU0LDB4ODAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDhmLDB4OTIsMHgwMywweDkyIH0sCisgIDE2LCAweGJiMzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTEsMHgwMCwweGM4LDB4MjAsMHgzMiwweDAwIH0sCisgIDE2LCAweGJiNDAsIDAsIHsweDRjLDB4YzAsMHg4YiwweDIwLDB4MDIsMHhjOCwweDMxLDB4MzIsMHgyMCwweDJkLDB4ODQsMHgwMywweGUxLDB4MDQsMHhmOCwweDQ4IH0sCisgIDE2LCAweGJiNTAsIDAsIHsweGJhLDB4MDAsMHgwZiwweDg5LDB4MDMsMHhlMCwweDAwLDB4YzgsMHgwMCwweDMyLDB4MDAsMHgwZCwweDgxLDB4MTMsMHgyMCwweDEwIH0sCisgIDE2LCAweGJiNjAsIDAsIHsweGY4LDB4MDAsMHgzYSwweDAwLDB4MGYsMHg4MSwweDIzLDB4MDIsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJiNzAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAwLDB4MGUsMHg0MCwweDIyLDB4ODAsMHgyOCwweGE0LDB4MDIsMHgxOSwweDAwLDB4NTIsMHg4MCwweGEyIH0sCisgIDE2LCAweGJiODAsIDAsIHsweDgwLDB4NGQsMHhlZCwweDgyLDB4ZTgsMHgwMCwweGI2LDB4NDIsMHgyMywweGJkLDB4MGIsMHhlOCwweDAyLDB4ZTgsMHgwNCwweGRhIH0sCisgIDE2LCAweGJiOTAsIDAsIHsweDAwLDB4MzcsMHg4MCwweDA4LDB4ZTAsMHgwMiwweDNhLDB4MjAsMHhiYSwweDAwLDB4MjIsMHg4MCwweDBiLDB4YTgsMHgwYSwweDBhIH0sCisgIDE2LCAweGJiYTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweDgzLDB4ODAsMHg2MCwweGMwIH0sCisgIDE2LCAweGJiYjAsIDAsIHsweDA4LDB4MjksMHgwMiwweDBkLDB4MDAsMHg5MiwweDQwLDB4MjQsMHhjMCwweDA4LDB4YjQsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwIH0sCisgIDE2LCAweGJiYzAsIDAsIHsweDY4LDB4ZTAsMHgxYiwweDMwLDB4MDIsMHhjYywweDAwLDB4OTMsMHgwMSwweDI0LDB4YzAsMHg2OSwweDM4LDB4MDIsMHg2YywweDAwIH0sCisgIDE2LCAweGJiZDAsIDAsIHsweGIzLDB4MDAsMHgyYywweGMwLDB4MGIsMHgzMCwweDAyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJiZTAsIDAsIHsweGEwLDB4MDEsMHgxYywweDQwLDB4ODMsMHhjMCwweDIwLDB4NDAsMHgwOCwweDI4LDB4MDYsMHg5YywweDE4LDB4OWMsMHgwMiwweDI0IH0sCisgIDE2LCAweGJiZjAsIDAsIHsweGMwLDB4MDksMHg3MCwweDAyLDB4ZDQsMHgwMCwweGI3LDB4MDAsMHgyMSwweGMwLDB4MGIsMHg3MCwweDAyLDB4Y2UsMHg0MCwweDk3IH0sCisgIDE2LCAweGJjMDAsIDAsIHsweGIwLDB4MjUsMHg0MCwweDA4LDB4NzgsMHgxYSwweDU4LDB4MDAsMHhiZiwweGEyLDB4NjUsMHhjOCwweDBiLDB4NzgsMHgwMiwweDIwIH0sCisgIDE2LCAweGJjMTAsIDAsIHsweDA0LDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MGUsMHgwMiwweDg3LDB4ODAsMHhiMSwweGEwIH0sCisgIDE2LCAweGJjMjAsIDAsIHsweDBjLDB4NjgsMHgwMywweDFhLDB4MDgsMHhkNiwweDkyLDB4MzUsMHhlNCwweDI4LDB4NzgsMHg0MiwweGQ2LDB4MTAsMHhmNSwweDgwIH0sCisgIDE2LCAweGJjMzAsIDAsIHsweDM5LDB4YTAsMHgwZiwweDc4LDB4MjMsMHhkZSwweDMwLDB4ZDMsMHhhMiwweDM1LDB4YTAsMHg0ZCwweGU4LDB4MDMsMHg1ZSwweDAwIH0sCisgIDE2LCAweGJjNDAsIDAsIHsweGY3LDB4ZDAsMHgzZCwweGY4LDB4MGYsMHhmMCwweDAzLDB4MjIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJjNTAsIDAsIHsweDA4LDB4MWQsMHhhYywweDAwLDB4ZmIsMHgwNCwweDNlLDB4MDAsMHgwYiwweGEwLDB4MDMsMHg0OCwweDA0LDB4ZmEsMHg0MSwweDNhIH0sCisgIDE2LCAweGJjNjAsIDAsIHsweDUwLDB4MGYsMHhiMCwweDAzLDB4ZTQsMHgwMCwweGYxLDB4MDAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4ZWQsMHg4OCwweGZiIH0sCisgIDE2LCAweGJjNzAsIDAsIHsweDRkLDB4M2UsMHgwMCwweDBmLDB4ZjAsMHgwMywweGJjLDB4MDgsMHhmYiwweDIwLDB4M2EsMHhjMCwweDBmLDB4YjAsMHgwMywweGMyIH0sCisgIDE2LCAweGJjODAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHgwMCwweGRjLDB4ODAsMHhiMywweGUwIH0sCisgIDE2LCAweGJjOTAsIDAsIHsweDBjLDB4ZDgsMHgwMywweGNlLDB4MDAsMHhjOCwweGEwLDB4MzEsMHhhMCwweDhkLDB4ZTksMHgwMywweGJlLDB4MDAsMHhiMiwweDgwIH0sCisgIDE2LCAweGJjYTAsIDAsIHsweDMzLDB4ZTAsMHgwYywweGU4LDB4NDMsMHg3ZSwweDA0LDB4MGYsMHg4MSwweDMxLDB4ZTQsMHgwYywweGQ4LDB4MDMsMHhmNiwweDAwIH0sCisgIDE2LCAweGJjYjAsIDAsIHsweGZmLDB4ODAsMHgzZiwweGUwLDB4MGYsMHhmOCwweDAzLDB4MDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJjYzAsIDAsIHsweGE4LDB4MTEsMHg5YywweDAwLDB4YjQsMHg0MCwweDM1LDB4NDAsMHgwOCwweDUwLDB4ODIsMHhkZSwweDgwLDB4ZDQsMHg5MCwweDIxIH0sCisgIDE2LCAweGJjZDAsIDAsIHsweGUwLDB4MGQsMHg1MSwweDAyLDB4ZDQsMHg0MCwweGI2LDB4YjAsMHgyYiwweDkwLDB4MGUsMHhlNSwweDAyLDB4OWMsMHg0MCwweGQ3IH0sCisgIDE2LCAweGJjZTAsIDAsIHsweDIyLDB4MTksMHg1YywweDBkLDB4NzAsMHgwMiwweGQ4LDB4MDAsMHhiNywweDIwLDB4MmQsMHhjMCwweDBiLDB4ZjAsMHgwMywweDZhIH0sCisgIDE2LCAweGJjZjAsIDAsIHsweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweDkzLDB4MTAsMHgyMSwweDgwIH0sCisgIDE2LCAweGJkMDAsIDAsIHsweDA4LDB4NTgsMHgwMiwweGRjLDB4YzAsMHg5NCwweDAwLDB4MjMsMHhkMCwweDA4LDB4NzAsMHhhMCwweGQ0LDB4MjAsMHhiNSwweDAyIH0sCisgIDE2LCAweGJkMTAsIDAsIHsweDI5LDB4ODAsMHgwOSwweDYwLDB4ODIsMHgwYywweDAwLDB4ODcsMHgwMiwweDI1LDB4YzAsMHgxOSwweDQwLDB4MDIsMHhkNCwweDAwIH0sCisgIDE2LCAweGJkMjAsIDAsIHsweGI3LDB4MDAsMHg2ZCwweGMwLDB4MGIsMHg3MCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJkMzAsIDAsIHsweDIwLDB4MTQsMHhlYywweDAwLDB4YjMsMHhjMCwweDIwLDB4MDEsMHg0OCwweDE4LDB4MDIsMHhjYywweDAyLDB4ODEsMHg0NCwweGEwIH0sCisgIDE2LCAweGJkNDAsIDAsIHsweGMwLDB4ODksMHgzOCwweDAyLDB4YzcsMHg4MCwweGIxLDB4MDAsMHgyYywweDA5LDB4NGEsMHgwMCwweDYyLDB4YWMsMHgwOSwweDkzIH0sCisgIDE2LCAweGJkNTAsIDAsIHsweDAxLDB4MjgsMHg0MCwweDE5LDB4MzAsMHgwMiwweGNkLDB4MTAsMHhiMywweDkwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGM4IH0sCisgIDE2LCAweGJkNjAsIDAsIHsweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmMsMHgyMCwweGRiLDB4NjIsMHgyMiwweGUwIH0sCisgIDE2LCAweGJkNzAsIDAsIHsweDZjLDB4YTAsMHgwMywweGU0LDB4MDAsMHg5OCwweDAwLDB4MzIsMHhjMCwweGVjLDB4OTgsMHgyMywweGFlLDB4MDgsMHhmYiwweDA4IH0sCisgIDE2LCAweGJkODAsIDAsIHsweDNhLDB4NzgsMHgwOSwweDkwLDB4MDMsMHg3YywweDEwLDB4Y2YsMHgwMCwweDI2LDB4NDAsMHgwYywweGIwLDB4MDMsMHhlYywweDAwIH0sCisgIDE2LCAweGJkOTAsIDAsIHsweGZmLDB4ODAsMHgzZiwweGMwLDB4MGYsMHg5MCwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJkYTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDIwLDB4ZmIsMHg0OCwweDNjLDB4NjEsMHgwZiwweGEwLDB4NDMsMHhlZCwweDAwLDB4ZjgsMHgyNCwweDNlIH0sCisgIDE2LCAweGJkYjAsIDAsIHsweDUwLDB4MGYsMHg5MCwweDgzLDB4ZTQsMHgwMCwweGZiLDB4MDAsMHgzYSwweDUwLDB4MGYsMHg4MCwweDQzLDB4ZWMsMHgwOCwweGZiIH0sCisgIDE2LCAweGJkYzAsIDAsIHsweDAwLDB4M2UsMHg0MCwweDBmLDB4NDAsMHgwMywweGYwLDB4MDAsMHhmYiwweDAwLDB4M2UsMHhjMSwweDBmLDB4OTAsMHgwMywweDYwIH0sCisgIDE2LCAweGJkZDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweGRkLDB4YTAsMHgzMiwweDgwIH0sCisgIDE2LCAweGJkZTAsIDAsIHsweDBjLDB4ZTAsMHgwMSwweGZjLDB4MDAsMHhkYywweDkxLDB4MzksMHhjMCwweDNjLDB4NDAsMHgwMywweDM0LDB4MDAsMHhmZiwweDgwIH0sCisgIDE2LCAweGJkZjAsIDAsIHsweDNmLDB4MDAsMHgwZiwweGQwLDB4MDcsMHhmYywweDAwLDB4Y2IsMHgwMCwweDNkLDB4NDAsMHgwYywweGUwLDB4MDMsMHgzOCwweDIwIH0sCisgIDE2LCAweGJlMDAsIDAsIHsweGNmLDB4MDIsMHgzZCwweGMwLDB4MGMsMHhkMCwweDAzLDB4MDgsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJlMTAsIDAsIHsweDgxLDB4MDQsMHg2YywweDAwLDB4MDEsMHg0MCwweDIyLDB4MDAsMHgyOCwweGEwLDB4MDIsMHhjZSwweDg2LDB4ODMsMHg2NCwweDIyIH0sCisgIDE2LCAweGJlMjAsIDAsIHsweGY0LDB4MDgsMHg4YywweDBmLDB4NjQsMHgwMCwweGJiLDB4MTAsMHgyZSwweDYwLDB4MGIsMHg5YywweDAzLDB4YWMsMHgwMSwweGRiIH0sCisgIDE2LCAweGJlMzAsIDAsIHsweDAwLDB4M2UsMHg2MCwweDA4LDB4OGYsMHgwMiwweDIzLDB4NDAsMHg4YiwweDAwLDB4M2EsMHhjMCwweDBkLDB4MTAsMHg0MywweDY4IH0sCisgIDE2LCAweGJlNDAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweDk5LDB4MDAsMHhhMiwweGMwIH0sCisgIDE2LCAweGJlNTAsIDAsIHsweDA4LDB4OTAsMHgwMiwweGE2LDB4MDcsMHg5OCwweDAwLDB4MDIsMHhjMiwweDQ4LDB4ODgsMHgwMiwweDJjLDB4MDAsMHhiYSwweDAyIH0sCisgIDE2LCAweGJlNjAsIDAsIHsweDZlLDB4NjAsMHgwYSwweDk4LDB4MDIsMHhlYywweDAwLDB4OGIsMHgwMSwweDJlLDB4NjAsMHgwOCwweDkwLDB4MDIsMHgwNSwweDAwIH0sCisgIDE2LCAweGJlNzAsIDAsIHsweDhiLDB4MDAsMHgyZSwweGMwLDB4MDgsMHhiMSwweDAyLDB4MjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJlODAsIDAsIHsweDA4LDB4MDQsMHgwYywweDEwLDB4ODEsMHgwMCwweDIwLDB4NDAsMHgyOCwweDEwLDB4MjYsMHhjYywweDgwLDB4ODAsMHgyMCwweGEwIH0sCisgIDE2LCAweGJlOTAsIDAsIHsweGNjLDB4MTgsMHgxNCwweDQyLDB4MDQsMHgwMCwweGIyLDB4MjAsMHg2YywweDQwLDB4MGIsMHgwMCwweDAyLDB4OGMsMHgwMCwweDgzIH0sCisgIDE2LCAweGJlYTAsIDAsIHsweDAwLDB4MjgsMHg0MCwweDI4LDB4MDAsMHgwMiwweDAwLDB4MDAsMHg4MywweDAwLDB4MjgsMHhjMCwweDA5LDB4YjAsMHgwMiwweDQyIH0sCisgIDE2LCAweGJlYjAsIDAsIHsweDA1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGQ5LDB4MDAsMHgyMiwweDgwIH0sCisgIDE2LCAweGJlYzAsIDAsIHsweDBjLDB4OTAsMHgwMywweGFjLDB4ODAsMHhkYSwweDI5LDB4MmEsMHhkMiwweDI4LDB4ODAsMHgwMiwweDI0LDB4MDAsMHhmYiwweDIwIH0sCisgIDE2LCAweGJlZDAsIDAsIHsweDNlLDB4MDAsMHgwZiwweDkwLDB4MDIsMHhmYywweDAwLDB4OGYsMHgwMCwweDJlLDB4NDAsMHgwYywweDgwLDB4MGIsMHgyMCwweDAyIH0sCisgIDE2LCAweGJlZTAsIDAsIHsweGNmLDB4MDAsMHgzZSwweGMwLDB4MGMsMHhiMCwweDAzLDB4MDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJlZjAsIDAsIHsweGEwLDB4MWQsMHhmYywweDAwLDB4ZmQsMHgwMCwweDNmLDB4MDAsMHgwZiwweGQwLDB4NjMsMHhmYywweDQ5LDB4ZjUsMHgwMCwweDNlIH0sCisgIDE2LCAweGJmMDAsIDAsIHsweGMwLDB4MGIsMHhjMCwweDAxLDB4ZjQsMHgwMCwweDdmLDB4NDAsMHgzZiwweDQwLDB4MWYsMHhkMCwweDAzLDB4YmMsMHgwMCwweGZmIH0sCisgIDE2LCAweGJmMTAsIDAsIHsweDAwLDB4M2YsMHg0MCwweDBmLDB4YzAsMHgwMywweGYwLDB4MDAsMHhmZiwweDAwLDB4M2IsMHhjMCwweDBmLDB4ZjAsMHgwMywweGU4IH0sCisgIDE2LCAweGJmMjAsIDAsIHsweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAxLDB4ZjIsMHg0MCwweGVjLDB4YTAsMHgzZiwweGUwIH0sCisgIDE2LCAweGJmMzAsIDAsIHsweDBkLDB4NDgsMHgwMywweDdkLDB4ODAsMHhmNCwweDgwLDB4MzMsMHg2YywweDBlLDB4YzgsMHgwMywweDMyLDB4MDAsMHhkZCwweDkwIH0sCisgIDE2LCAweGJmNDAsIDAsIHsweDNiLDB4YTAsMHgyZCwweGYwLDB4MDMsMHhmYywweGMwLDB4ZmYsMHgwMCwweDNiLDB4ZTAsMHg4ZSwweGYwLDB4MDMsMHgzYywweDA0IH0sCisgIDE2LCAweGJmNTAsIDAsIHsweGVjLDB4NjAsMHgzMSwweDAwLDB4MGMsMHhmMCwweDAzLDB4YjAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJmNjAsIDAsIHsweDgwLDB4MTAsMHhlYywweDAwLDB4ZDksMHhjMSwweDJlLDB4ZTEsMHgwZCwweDg4LDB4MDIsMHgzYywweDgwLDB4ZjgsMHg4MCwweDM2IH0sCisgIDE2LCAweGJmNzAsIDAsIHsweDdkLDB4MTgsMHhhMCwweDAyLDB4MjgsMHhiMCwweGVhLDB4MjAsMHgyMiwweDIwLDB4MDgsMHg3NywweDAyLDB4ZmQsMHg1MCwweGJiIH0sCisgIDE2LCAweGJmODAsIDAsIHsweDgwLDB4MjIsMHg0MCwweDBiLDB4ZjQsMHg0MiwweDNkLDB4ODAsMHg4OCwweDMxLDB4MjIsMHgxMiwweDA4LDB4ZjYsMHgwMiwweGUwIH0sCisgIDE2LCAweGJmOTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwMCwweDgwLDB4MTEsMHgyZSwweGMxIH0sCisgIDE2LCAweGJmYTAsIDAsIHsweDA4LDB4MDAsMHgwMiwweDRkLDB4ODAsMHhiOCwweDAwLDB4MjAsMHgwMCwweDBhLDB4MDIsMHg4MiwweDAwLDB4MDAsMHg5OSwweDIwIH0sCisgIDE2LCAweGJmYjAsIDAsIHsweDIyLDB4YzAsMHgwOSwweDMwLDB4ODIsMHhjYywweDAwLDB4YjMsMHgwMCwweDI4LDB4Y2EsMHgwYiwweDM0LDB4ODIsMHgwZCwweDIwIH0sCisgIDE2LCAweGJmYzAsIDAsIHsweDgwLDB4MDAsMHhhMCwweDhjLDB4MDgsMHgzNCwweDgyLDB4YTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJmZDAsIDAsIHsweGMwLDB4MTUsMHhhYywweDQwLDB4OTksMHg4MCwweDJlLDB4YzIsMHgwOSwweDk0LDB4MDIsMHgyYywweDAwLDB4YTksMHg4MCwweDI2IH0sCisgIDE2LCAweGJmZTAsIDAsIHsweDYwLDB4MDgsMHgzOCwweDQyLDB4MjIsMHgyMCwweGJhLDB4NDEsMHg2MiwweDQ2LDB4M2IsMHhiMCwweDAyLDB4ZWMsMHgwMSwweGJiIH0sCisgIDE2LCAweGJmZjAsIDAsIHsweDgwLDB4MjIsMHg0MCwweDBiLDB4YjAsMHg0NiwweDBjLDB4MTgsMHg4OCwweGMwLDB4MjIsMHgyMiwweDA4LDB4YjAsMHgwNiwweGYwIH0sCisgIDE2LCAweGMwMDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4Y2MsMHgwMCwweGM5LDB4ODEsMHgzYywweGMxIH0sCisgIDE2LCAweGMwMTAsIDAsIHsweDBjLDB4YTksMHgyMywweDZjLDB4MDAsMHhiMiwweDgwLDB4MzIsMHg3OCwweDBhLDB4OGEsMHgwYiwweDI2LDB4MDAsMHg5OSwweDAxIH0sCisgIDE2LCAweGMwMjAsIDAsIHsweDMwLDB4ZTAsMHgwZCwweGIwLDB4MDMsMHhlYywweDAwLDB4YjksMHgwMCwweDNhLDB4YzAsMHgxZSwweGIwLDB4MDMsMHgyYywweDAwIH0sCisgIDE2LCAweGMwMzAsIDAsIHsweGNiLDB4ODAsMHgzMiwweDYxLDB4MGMsMHhiMCwweDEzLDB4OTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMwNDAsIDAsIHsweGUwLDB4MDEsMHhiYywweDEwLDB4ZGQsMHgwMCwweDNmLDB4YzIsMHgwZiwweGU4LDB4MDMsMHhhYywweDAwLDB4ZmUsMHgwMCwweDNkIH0sCisgIDE2LCAweGMwNTAsIDAsIHsweDQwLDB4MGYsMHhjMCwweDQzLDB4ZjgsMHgxMCwweGVmLDB4MTQsMHhiNywweGUwLDB4MGMsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGY1IH0sCisgIDE2LCAweGMwNjAsIDAsIHsweDAyLDB4M2YsMHg0NCwweDRmLDB4YjAsMHg0YiwweGZjLDB4MDIsMHhkNCwweDA0LDB4M2QsMHg0MCwweDJmLDB4ZjAsMHgwMywweGY4IH0sCisgIDE2LCAweGMwNzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGY5LDB4MDgsMHgzZSwweDYwIH0sCisgIDE2LCAweGMwODAsIDAsIHsweDBkLDB4YTAsMHgwMywweGFjLDB4MDAsMHhlOCwweDUwLDB4MzIsMHgwMCwweDBjLDB4ODQsMHgwMywweGE1LDB4MDAsMHhlOSwweDAwIH0sCisgIDE2LCAweGMwOTAsIDAsIHsweDNhLDB4ZDgsMHgwZiwweGIwLDB4MDMsMHgyYywweDAwLDB4ZjksMHgwMCwweDNhLDB4YzAsMHgwZiwweDMwLDB4MDMsMHgyYywweDAwIH0sCisgIDE2LCAweGMwYTAsIDAsIHsweGNiLDB4NDQsMHgzZSwweGQ0LDB4MGUsMHhiMCwweDAzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMwYjAsIDAsIHsweGM4LDB4MDUsMHgyYywweDA4LDB4YjksMHg4MCwweDJlLDB4YzAsMHgwYSwweDMwLDB4NDIsMHgzYywweDAwLDB4ODksMHgwNCwweDc2IH0sCisgIDE2LCAweGMwYzAsIDAsIHsweDYwLDB4MDgsMHg5MCwweDYyLDB4MjAsMHgwMCwweDgyLDB4MDQsMHgyMiwweGQwLDB4MDgsMHhmMCwweDQzLDB4N2MsMHgwMCwweGJiIH0sCisgIDE2LCAweGMwZDAsIDAsIHsweDgyLDB4MjIsMHg0MCwweDBiLDB4ZjAsMHg0MiwweDNjLDB4MDAsMHg4YSwweGMwLDB4MmUsMHhjMSwweDA4LDB4ZjAsMHgwMiwweGYyIH0sCisgIDE2LCAweGMwZTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgxMCwweGIyLDB4ZDAsMHgyYywweGMwIH0sCisgIDE2LCAweGMwZjAsIDAsIHsweDI5LDB4MTgsMHgwMiwweDhjLDB4MDQsMHhhMSwweDAwLDB4MjQsMHg5YywweDA4LDB4MTAsMHgwMiwweDgwLDB4MDAsMHhhMSwweDAxIH0sCisgIDE2LCAweGMxMDAsIDAsIHsweDBjLDB4YzEsMHgyYiwweDMwLDB4NTIsMHg4YywweDA0LDB4YjMsMHgwMSwweDI4LDB4NDAsMHg0YiwweDMwLDB4MDIsMHg0YywweDAwIH0sCisgIDE2LCAweGMxMTAsIDAsIHsweDkwLDB4MjAsMHgyYywweDIwLDB4MGEsMHgzMCwweDAyLDB4ZjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMxMjAsIDAsIHsweDIwLDB4NDEsMHgxZSwweDAwLDB4YjcsMHhhMiwweDI1LDB4ZTgsMHg4YSwweDY4LDB4MDIsMHgxZSwweDAwLDB4ODUsMHg4MCwweDI1IH0sCisgIDE2LCAweGMxMzAsIDAsIHsweDgwLDB4ODgsMHhlOCwweDAyLDB4M2UsMHgwMCwweDg1LDB4ODAsMHgyZiwweGU0LDB4MjgsMHg3OCwweDAyLDB4ZGUsMHgwMCwweGI3IH0sCisgIDE2LCAweGMxNDAsIDAsIHsweDgwLDB4NjEsMHhlMCwweDAzLDB4NzgsMHgwMiwweDVlLDB4ODIsMHhiNywweDgyLDB4MmQsMHhlMCwweDA4LDB4NzgsMHgwMiwweGM4IH0sCisgIDE2LCAweGMxNTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGQsMHgwMCwweGYwLDB4MTAsMHgzYywweDgwIH0sCisgIDE2LCAweGMxNjAsIDAsIHsweDBkLDB4MTAsMHg4MywweDhjLDB4MDAsMHhlMiwweDUwLDB4MjYsMHgwNCwweDBjLDB4MTEsMHgwMywweDg4LDB4NDAsMHhlYiwweDAwIH0sCisgIDE2LCAweGMxNzAsIDAsIHsweDNjLDB4YzQsMHgwZiwweDMwLDB4MDMsMHg4YywweDAwLDB4ZjMsMHgwOCwweDM4LDB4NDAsMHgwNywweDMwLDB4MDMsMHg2ZSwweDQwIH0sCisgIDE2LCAweGMxODAsIDAsIHsweGQwLDB4MDgsMHgzYywweDg4LDB4MGUsMHgzMCwweDQzLDB4ZDIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMxOTAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZmIsMHgzNCwweDNjLDB4YzksMHg0ZSwweGIwLDB4MjMsMHhlZCwweDIwLDB4ZmIsMHgwNCwweDNmIH0sCisgIDE2LCAweGMxYTAsIDAsIHsweGM4LDB4OGYsMHg3MCwweDUzLDB4NGMsMHgwMCwweGViLDB4MTAsMHgzMSwweGM1LDB4MGUsMHhmNCwweDAzLDB4NmQsMHgwMCwweGYzIH0sCisgIDE2LCAweGMxYjAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjQsMHgwYiwweGJjLDB4MDAsMHhjZCwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjQsMHg4MywweGQwIH0sCisgIDE2LCAweGMxYzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4Y2UsMHgwNCwweGM5LDB4MDQsMHhiMCwweGMxIH0sCisgIDE2LCAweGMxZDAsIDAsIHsweDBmLDB4OTgsMHgxMywweDZjLDB4OTAsMHhjYiwweDAyLDB4M2UsMHhjMCwweDRmLDB4YjAsMHg2MywweGU0LDB4MDAsMHhmMSwweDgwIH0sCisgIDE2LCAweGMxZTAsIDAsIHsweDEyLDB4YzAsMHgwYywweGI1LDB4MDMsMHhlYywweGMwLDB4Y2YsMHg4MywweDMyLDB4NDAsMHgwZiwweGIzLDB4MjMsMHgyZCwweGE0IH0sCisgIDE2LCAweGMxZjAsIDAsIHsweGZiLDB4MDAsMHgzZSwweDAwLDB4MGYsMHhiNCwweDAzLDB4MmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMyMDAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDAwLDB4ODcsMHgwMCwweDIxLDB4YzAsMHgyZCwweDYwLDB4MDIsMHgxYywweDAwLDB4ZDcsMHgwMCwweDM5IH0sCisgIDE2LCAweGMyMTAsIDAsIHsweGMwLDB4MGIsMHg2MCwweDAyLDB4ZGMsMHgwMCwweGI1LDB4MDAsMHgyMSwweGMwLDB4MmEsMHg3MCwweDEyLDB4Y2MsMHg4MCwweDg3IH0sCisgIDE2LCAweGMyMjAsIDAsIHsweDAwLDB4MzUsMHhjMCwweDBiLDB4NzIsMHg1MiwweDFjLDB4MDAsMHhiNywweDAwLDB4MmQsMHg0MSwweDBiLDB4MzIsMHgwMiwweDEyIH0sCisgIDE2LCAweGMyMzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4YmUsMHgwMCwweDgxLDB4YzAsMHgyMywweDIwIH0sCisgIDE2LCAweGMyNDAsIDAsIHsweDBiLDB4ZDgsMHgwMiwweDVlLDB4MDAsMHgwNiwweGMwLDB4MmQsMHhhMCwweDBiLDB4N2MsMHgxMiwweGRlLDB4MDgsMHhiZiwweDgwIH0sCisgIDE2LCAweGMyNTAsIDAsIHsweGExLDB4ZTIsMHgyYSwweDdhLDB4MDIsMHhkZSwweDAwLDB4OTMsMHg4MCwweDI1LDB4NjAsMHgwYiwweDc4LDB4MWUsMHg1ZSwweDUwIH0sCisgIDE2LCAweGMyNjAsIDAsIHsweGI3LDB4ODAsMHgyZCwweGEwLDB4MGIsMHg3OCwweDAyLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMyNzAsIDAsIHsweDQ4LDB4MTQsMHhjZSwweDAwLDB4ODMsMHg2MCwweDIwLDB4YzAsMHgwOSwweDMxLDB4MDIsMHgyYywweDAwLDB4OTMsMHgwMCwweDI4IH0sCisgIDE2LCAweGMyODAsIDAsIHsweGMwLDB4MWIsMHhiMCwweDA2LDB4Y2MsMHg4MCwweGIzLDB4NDgsMHgyMCwweGYwLDB4MGEsMHgzMCwweDAyLDB4ZWMsMHgwMCwweDkzIH0sCisgIDE2LCAweGMyOTAsIDAsIHsweDgwLDB4MjQsMHhjMCwweDBiLDB4YjAsMHgwMiwweDRjLDB4MTAsMHhiMywweGM4LDB4MmMsMHhkMiwweDhiLDB4MzAsMHgwMiwweDEyIH0sCisgIDE2LCAweGMyYTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YmIsMHgwMCwweGM2LDB4YzQsMHgzMSwweDgxIH0sCisgIDE2LCAweGMyYjAsIDAsIHsweDBmLDB4ZTAsMHgwMywweDY4LDB4MDAsMHhjZSwweDgwLDB4M2YsMHhhMiwweDBiLDB4ZTgsMHgwMywweGY5LDB4MDAsMHhmZSwweDQwIH0sCisgIDE2LCAweGMyYzAsIDAsIHsweDMxLDB4ODAsMHg2ZSwweGEwLDB4MDcsMHhlOCwweDAwLDB4ZGEsMHgwMCwweDI2LDB4ODEsMHgwZiwweGEwLDB4MDIsMHg2OCwweDAxIH0sCisgIDE2LCAweGMyZDAsIDAsIHsweGY2LDB4ZTAsMHgzZCwweDkyLDB4MGYsMHhhMCwweDAzLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMyZTAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweGMyLDB4ZjgsMHgwNCwweDNlLDB4MTQsMHgwZiwweDgwLDB4MTMsMHhlMCwweDEwLDB4ZjgsMHgwMSwweDNlIH0sCisgIDE2LCAweGMyZjAsIDAsIHsweDEwLDB4MGYsMHg4MCwweDQzLDB4ZTAsMHgwMCwweGI4LDB4MDAsMHgzZSwweDAwLDB4NDcsMHg4MCwweDAzLDB4ZTAsMHgwMiwweGU4IH0sCisgIDE2LCAweGMzMDAsIDAsIHsweDEwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwNywweGEwLDB4MDAsMHhmOCwweDAwLDB4MmUsMHgwMCwweDBmLDB4ODAsMHgwYiwweGQyIH0sCisgIDE2LCAweGMzMTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGY5LDB4MDEsMHgzMiwweDQwIH0sCisgIDE2LCAweGMzMjAsIDAsIHsweDhjLDB4OTAsMHgwMywweGU0LDB4MDAsMHhjOSwweDAwLDB4MzYsMHg0MiwweDBmLDB4OTAsMHgwMywweGE0LDB4MDAsMHhjOSwweDAwIH0sCisgIDE2LCAweGMzMzAsIDAsIHsweDNlLDB4NDIsMHgwZCwweDkwLDB4MDMsMHg2NCwweDAwLDB4ZDksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MGIsMHg2NCwweDAwIH0sCisgIDE2LCAweGMzNDAsIDAsIHsweGY5LDB4OTAsMHgzMiwweDQxLDB4MGMsMHg5MCwweDAzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMzNTAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4YjksMHhjOCwweGEyLDB4NjAsMHgwYSwweDkyLDB4MDIsMHhlNCwweDAwLDB4ODksMHg0MCwweDJlIH0sCisgIDE2LCAweGMzNjAsIDAsIHsweDU4LDB4MGIsMHg5MCwweDAyLDB4MDQsMHgwMCwweGQ5LDB4MDAsMHgyZSwweDQyLDB4MDgsMHg5MCwweDAyLDB4ZTQsMHgwNCwweDg5IH0sCisgIDE2LCAweGMzNzAsIDAsIHsweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwNiwweDI0LDB4MDQsMHhiOSwweDA4LDB4MmEsMHg0MCwweDQ4LDB4OTAsMHgxMiwweDIwIH0sCisgIDE2LCAweGMzODAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweGI5LDB4MTAsMHgyMiwweDQ0IH0sCisgIDE2LCAweGMzOTAsIDAsIHsweDA4LDB4OTAsMHgwMiwweGU0LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg0NSwweDhiLDB4OTAsMHgwMiwweGE0LDB4MDAsMHg4OSwweDAwIH0sCisgIDE2LCAweGMzYTAsIDAsIHsweDJhLDB4NDAsMHgwOSwweDkwLDB4MDIsMHhlNCwweDAwLDB4OTksMHg4MCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MjYsMHgyNCwweDAwIH0sCisgIDE2LCAweGMzYjAsIDAsIHsweGI5LDB4MDEsMHgyMiwweDcwLDB4MDksMHgxMCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMzYzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDA4LDB4YjEsMHgyMCwweDIwLDB4NDAsMHgwYSwweDEwLDB4MDIsMHhjNCwweDgwLDB4ODMsMHgwMCwweDJjIH0sCisgIDE2LCAweGMzZDAsIDAsIHsweDUwLDB4NGIsMHgxMCwweDAyLDB4MjQsMHgwMCwweDkxLDB4MDAsMHgyZSwweDQwLDB4MDgsMHgxMiwweDAyLDB4YzQsMHg4MSwweDgxIH0sCisgIDE2LCAweGMzZTAsIDAsIHsweGEyLDB4NmMsMHg0MCwweDBiLDB4MTIsMHgwMiwweDA0LDB4ODAsMHhiOSwweDIwLDB4MmEsMHg0OCwweDI5LDB4MTIsMHgwMiwweDAyIH0sCisgIDE2LCAweGMzZjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjEsMHg0MCwweGY4LDB4MDAsMHgzMiwweDgwIH0sCisgIDE2LCAweGM0MDAsIDAsIHsweDA4LDB4ODAsMHgwMywweGUxLDB4NDIsMHhjOCwweDAwLDB4MzIsMHgwMCwweDFmLDB4ODUsMHgwMywweGExLDB4NDAsMHhjOCwweDUwIH0sCisgIDE2LCAweGM0MTAsIDAsIHsweDNhLDB4MDAsMHg4ZCwweDg1LDB4MDMsMHg2MSwweDQwLDB4ZDgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDA1LDB4MDMsMHgyMSwweDQwIH0sCisgIDE2LCAweGM0MjAsIDAsIHsweGY4LDB4NTAsMHgzMiwweDE0LDB4MGQsMHg4NSwweDBiLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM0MzAsIDAsIHsweDk4LDB4MWQsMHhmNCwweDA0LDB4ZmQsMHgxMCwweDNmLDB4NDAsMHgwZiwweDUwLDB4MDMsMHhjNCwweDQwLDB4ZmQsMHgwMCwweDNmIH0sCisgIDE2LCAweGM0NDAsIDAsIHsweDUxLDB4MGYsMHhkMCwweDAzLDB4ZjQsMHgwMCwweGZmLDB4MDEsMHgzZCwweDQwLDB4MGYsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGZkIH0sCisgIDE2LCAweGM0NTAsIDAsIHsweDEwLDB4M2YsMHg0YSwweDBmLDB4OTEsMHgwMywweGU0LDB4NDAsMHhmZCwweDEwLDB4M2YsMHg0NCwweDBlLDB4OTEsMHgwMywweGU2IH0sCisgIDE2LCAweGM0NjAsIDAsIHsweDAyLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4YzUsMHgwMCwweGNkLDB4MDAsMHgzMSwweDQwIH0sCisgIDE2LCAweGM0NzAsIDAsIHsweDBkLDB4ZDAsMHg0MywweGU0LDB4MDAsMHhjZCwweDAwLDB4MzMsMHg0MCwweDRmLDB4MTEsMHgwMiwweGU0LDB4MDQsMHhjMSwweDAwIH0sCisgIDE2LCAweGM0ODAsIDAsIHsweDNkLDB4NDAsMHgwYywweDkwLDB4MDMsMHhlNCwweDAwLDB4ZWQsMHhhNCwweDMyLDB4NTAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwIH0sCisgIDE2LCAweGM0OTAsIDAsIHsweGZkLDB4MDAsMHgzZiwweDQwLDB4MGYsMHg5MCwweDAzLDB4YzYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM0YTAsIDAsIHsweDM4LDB4MTAsMHhlMiwweDA4LDB4ZDgsMHgwMCwweDMyLDB4MDEsMHgwMCwweDgwLDB4MTIsMHhjMCwweDAwLDB4NDgsMHgwMCwweDM2IH0sCisgIDE2LCAweGM0YjAsIDAsIHsweDgwLDB4MGIsMHg4YSwweDAyLDB4ZTAsMHgwMCwweGE4LDB4MDAsMHgyZSwweDAwLDB4MGYsMHg4MCwweDAyLDB4ZTAsMHgwMCwweDg4IH0sCisgIDE2LCAweGM0YzAsIDAsIHsweDUwLDB4MzQsMHgyOCwweDBiLDB4ODAsMHgwMiwweGUwLDB4MDAsMHhiOCwweDAwLDB4MmUsMHgwMCwweDBiLDB4ODAsMHgwMiwweGNlIH0sCisgIDE2LCAweGM0ZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHg4MCwweDgxLDB4MDAsMHgyNiwweDQwIH0sCisgIDE2LCAweGM0ZTAsIDAsIHsweDA5LDB4MTgsMHgwMiwweGM0LDB4MDgsMHgyMSwweDAwLDB4MjgsMHg0MCwweDhiLDB4MTAsMHgwMiwweGM0LDB4MDAsMHhiMSwweDAxIH0sCisgIDE2LCAweGM0ZjAsIDAsIHsweDJlLDB4NDAsMHgxOCwweDEwLDB4MDIsMHhjNCwweDAwLDB4YTEsMHgwMSwweDIwLDB4NDgsMHgxYiwweDEwLDB4MDIsMHhjNCwweDAwIH0sCisgIDE2LCAweGM1MDAsIDAsIHsweGIxLDB4MDAsMHg2YywweDQwLDB4MGIsMHgxMCwweDEyLDB4YzIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM1MTAsIDAsIHsweDE4LDB4MTEsMHhhNCwweDAwLDB4OTksMHg4MCwweGEyLDB4NDIsMHg0OCwweDkwLDB4MDIsMHhlNCwweDAwLDB4YTksMHgyYSwweDI2IH0sCisgIDE2LCAweGM1MjAsIDAsIHsweDQ0LDB4MGIsMHg5MCwweDgyLDB4YzQsMHg4MSwweGI5LDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDQyLDB4YzQsMHgwMCwweDg5IH0sCisgIDE2LCAweGM1MzAsIDAsIHsweDAwLDB4MjYsMHg0MCwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAxLDB4MmUsMHg0MSwweDBiLDB4OTAsMHgwMiwweGM2IH0sCisgIDE2LCAweGM1NDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4YzUsMHgyMCwweGM5LDB4ODQsMHgzMCwweDcwIH0sCisgIDE2LCAweGM1NTAsIDAsIHsweDBkLDB4OTAsMHgxMywweGU0LDB4MDIsMHhlOSwweDAwLDB4MzIsMHg3MCwweDBmLDB4OTQsMHgwMywweGU0LDB4MDAsMHhmOSwweDQwIH0sCisgIDE2LCAweGM1NjAsIDAsIHsweDNjLDB4NDgsMHgwYywweDkwLDB4MDMsMHhlNCwweDAwLDB4ZTEsMHgwMCwweDMyLDB4NDAsMHgwZiwweDkwLDB4MDEsMHhlNCwweDAwIH0sCisgIDE2LCAweGM1NzAsIDAsIHsweGY5LDB4OTAsMHgzZSwweDYwLDB4MGYsMHg5MCwweDI2LDB4ZTgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM1ODAsIDAsIHsweDI4LDB4MDEsMHhhNSwweDAwLDB4ZjEsMHgwNCwweDNhLDB4NDQsMHg4ZiwweDkwLDB4MDMsMHhlNCwweDEwLDB4YzksMHgwNCwweDNlIH0sCisgIDE2LCAweGM1OTAsIDAsIHsweDYwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGU5LDB4MjAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgxMCwweGY5IH0sCisgIDE2LCAweGM1YTAsIDAsIHsweDkwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDgwLDB4M2UsMHg2NCwweDBmLDB4OTAsMHgwNywweGNhIH0sCisgIDE2LCAweGM1YjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTEsMHgwMCwweGM4LDB4MDQsMHgzYSwweDAwIH0sCisgIDE2LCAweGM1YzAsIDAsIHsweDFlLDB4ODAsMHgwMywweDgwLDB4MDMsMHhjOCwweDQwLDB4MmEsMHgwNCwweDFmLDB4ODAsMHgwMywweDIwLDB4MDAsMHg4OCwweDAwIH0sCisgIDE2LCAweGM1ZDAsIDAsIHsweDMyLDB4MzAsMHgwYywweDgwLDB4MDMsMHgyMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwYywweDgwLDB4MDMsMHhlMCwweDAwIH0sCisgIDE2LCAweGM1ZTAsIDAsIHsweGM4LDB4ODAsMHgzZSwweDIwLDB4MGYsMHg4MCwweDAzLDB4Y2EsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM1ZjAsIDAsIHsweDI4LDB4MDUsMHgzOCwweDAwLDB4YWUsMHhkMCwweDM3LDB4ODAsMHgwOCwweGVjLDB4NDYsMHgzOCwweDAwLDB4ZDYsMHgwNCwweDIzIH0sCisgIDE2LCAweGM2MDAsIDAsIHsweGEwLDB4MGIsMHhhMCwweDQxLDB4NzgsMHgwNCwweGZhLDB4MDAsMHgzNywweDgwLDB4MGQsMHhhMCwweDAyLDB4YTgsMHgxMCwweGVlIH0sCisgIDE2LCAweGM2MTAsIDAsIHsweDIxLDB4MmUsMHg4MCwweDA4LDB4YTAsMHgwMiwweGU4LDB4MDgsMHg4ZSwweDgwLDB4MmYsMHhhMCwweDhiLDB4YTAsMHgwMiwweGNhIH0sCisgIDE2LCAweGM2MjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAxLDB4NGMsMHgwMiwweDgzLDB4YzAsMHhhOCwweGU4IH0sCisgIDE2LCAweGM2MzAsIDAsIHsweDRhLDB4MzYsMHgwMiwweDhjLDB4MDAsMHgxMywweGEwLDB4MjgsMHhjMiwweDBiLDB4MzAsMHgwNiwweDBjLDB4MDAsMHhiMywweDAwIH0sCisgIDE2LCAweGM2NDAsIDAsIHsweDI0LDB4ODQsMHgwOSwweDMwLDB4MDIsMHgwYywweDAwLDB4YjMsMHgyMCwweDI4LDB4YzAsMHgwOSwweDMwLDB4MDIsMHhjYywweDAwIH0sCisgIDE2LCAweGM2NTAsIDAsIHsweDgzLDB4ODAsMHgyYywweGMwLDB4MGIsMHgzMCwweDAyLDB4Y2EsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM2NjAsIDAsIHsweGEwLDB4MDEsMHgzYywweDQ0LDB4YWYsMHg0MCwweDI1LDB4YzIsMHg0OCwweGY4LDB4ODIsMHgxYywweGM4LDB4OWYsMHgwOCwweDIxIH0sCisgIDE2LCAweGM2NzAsIDAsIHsweGMwLDB4OGIsMHhmOCwweDAyLDB4NWMsMHgwMCwweGJmLDB4YjAsMHgyNywweDgwLDB4MDksMHgzYSwweDAyLDB4OWMsMHgwMCwweGE1IH0sCisgIDE2LCAweGM2ODAsIDAsIHsweDAyLDB4MmQsMHhlOCwweDA5LDB4NzAsMHgwMiwweGNlLDB4ODAsMHg4NSwweDA4LDB4MmQsMHhjMiwweDBiLDB4NzMsMHgwMiwweGU4IH0sCisgIDE2LCAweGM2OTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMCwweGM3LDB4ODIsMHhhOSwweGUwIH0sCisgIDE2LCAweGM2YTAsIDAsIHsweDBhLDB4NzgsMHgwMiwweDllLDB4NDAsMHg5NywweDg0LDB4MzksMHhhMCwweDBiLDB4N2EsMHg4MywweDNmLDB4ODAsMHhkNywweDkxIH0sCisgIDE2LCAweGM2YjAsIDAsIHsweDM1LDB4YTAsMHgwZCwweDdhLDB4MDksMHgxZSwweDQ0LDB4ZjcsMHg4MCwweDNkLDB4ZTgsMHgyZCwweDdhLDB4MDMsMHhkZSwweDgyIH0sCisgIDE2LCAweGM2YzAsIDAsIHsweGM2LDB4ODAsMHgzZCwweDIwLDB4NGIsMHg3YiwweDIzLDB4ZWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM2ZDAsIDAsIHsweDA4LDB4MWQsMHhhYywweDAwLDB4ZDMsMHgwMCwweDNlLDB4YzEsMHgwZiwweDMwLDB4MDMsMHhlZCwweDgwLDB4ZTMsMHgwMCwweDNlIH0sCisgIDE2LCAweGM2ZTAsIDAsIHsweDgwLDB4MGYsMHhiNiwweDIxLDB4ZWMsMHgwOCwweGRiLDB4MjEsMHgzZSwweDgwLDB4MGYsMHhiNSwweDAzLDB4NmMsMHg0MCwweGY5IH0sCisgIDE2LCAweGM2ZjAsIDAsIHsweDAwLDB4M2UsMHhkYywweDBlLDB4YjIsMHgwMywweGVkLDB4NDAsMHhmOSwweDAyLDB4M2UsMHg4MCwweDBmLDB4YjAsMHgwMywweGMyIH0sCisgIDE2LCAweGM3MDAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHgwMCwweGNmLDB4ODAsMHgzZCwweGUwIH0sCisgIDE2LCAweGM3MTAsIDAsIHsweDBmLDB4YzgsMHg0MywweGZlLDB4MDAsMHhmZSwweDg0LDB4M2YsMHhlMCwweDBkLDB4ZjgsMHhjMywweGZmLDB4MTAsMHhhZiwweDkwIH0sCisgIDE2LCAweGM3MjAsIDAsIHsweDM1LDB4YTAsMHgwYywweGZjLDB4MDMsMHgzZSwweDE0LDB4ZWMsMHg4NCwweDNmLDB4ZjAsMHgwZSwweGZjLDB4YzMsMHhmZiwweDA4IH0sCisgIDE2LCAweGM3MzAsIDAsIHsweDRmLDB4ODAsMHgzMywweGU0LDB4MGMsMHhmOCwweDAzLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM3NDAsIDAsIHsweGE4LDB4MTEsMHg5YywweDAwLDB4ZDcsMHhhMiwweDJkLDB4YzQsMHgwYywweDQxLDB4YzIsMHhkYywweDAwLDB4NzQsMHgwMCwweDI1IH0sCisgIDE2LCAweGM3NTAsIDAsIHsweDgwLDB4MGYsMHg3MiwweDQyLDB4ZGMsMHg5MCwweGQ3LDB4MzgsMHgyZCwweDk4LDB4MGEsMHg3MCwweDAyLDB4MWMsMHgwNCwweDg2IH0sCisgIDE2LCAweGM3NjAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBkLDB4NzAsMHgwMiwweGNjLDB4MDAsMHg4NiwweDA4LDB4MzcsMHhjNiwweDI4LDB4NzAsMHgwMiwweDJhIH0sCisgIDE2LCAweGM3NzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweDg3LDB4NjAsMHgyZCwweGMyIH0sCisgIDE2LCAweGM3ODAsIDAsIHsweDBhLDB4NTAsMHgwMiwweGRjLDB4MDAsMHhiNiwweDEwLDB4MjUsMHhjMiwweDA5LDB4NzAsMHg4NiwweGRjLDB4MzAsMHg5NywweDAwIH0sCisgIDE2LCAweGM3OTAsIDAsIHsweDI1LDB4ODAsMHgwOCwweDMwLDB4MDIsMHg1YywweDAwLDB4ODcsMHgwOCwweDJkLDB4YzAsMHgwOCwweDcwLDB4MDIsMHhjYywweDQwIH0sCisgIDE2LCAweGM3YTAsIDAsIHsweDg2LDB4MDAsMHgyMSwweDAwLDB4MDksMHg3MCwweDBhLDB4MDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM3YjAsIDAsIHsweDIwLDB4MTQsMHhlZCwweDgwLDB4OTMsMHgwMCwweDBjLDB4ZTEsMHgyOCwweDE4LDB4MDIsMHhjYywweDA4LDB4YTAsMHgwMCwweDI0IH0sCisgIDE2LCAweGM3YzAsIDAsIHsweDEyLDB4MWEsMHgzNCwweDAyLDB4Y2YsMHgwNCwweDkzLDB4NDAsMHgyYywweDgwLDB4MGEsMHhiMCwweDIyLDB4NGMsMHgwMiwweDgxIH0sCisgIDE2LCAweGM3ZDAsIDAsIHsweDgwLDB4MjgsMHhlMCwweDI4LDB4MzAsMHgwMiwweGNjLDB4MDAsMHg4OCwweDgyLDB4MjQsMHgyMCwweDA4LDB4YjAsMHgwMiwweDA4IH0sCisgIDE2LCAweGM3ZTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmYsMHgyMCwweGM5LDB4ZTAsMHgyYywweGYxIH0sCisgIDE2LCAweGM3ZjAsIDAsIHsweDBlLDB4YmQsMHgwMywweGZjLDB4MDAsMHhiOSwweDQwLDB4MzYsMHg0MCwweDA5LDB4ZjUsMHgwMiwweGZkLDB4NDAsMHhmZiwweDgwIH0sCisgIDE2LCAweGM4MDAsIDAsIHsweDM2LDB4YTIsMHgwOCwweGYwLDB4MGIsMHg3YywweDAwLDB4ZWIsMHg4MCwweDJmLDB4ZTAsMHgwYSwweGYwLDB4NDMsMHhmYywweDAyIH0sCisgIDE2LCAweGM4MTAsIDAsIHsweDhiLDB4ZDAsMHgzMiwweGYwLDB4MGQsMHhmMCwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM4MjAsIDAsIHsweDgwLDB4MDAsMHhlYywweDEwLDB4ZmIsMHgwMCwweDNlLDB4YzgsMHgwZiwweDk0LDB4MTMsMHhlYywweDAwLDB4ZjksMHg0MCwweDM2IH0sCisgIDE2LCAweGM4MzAsIDAsIHsweDQwLDB4MWYsMHhiMCwweDAzLDB4ZWMsMHgxMCwweGZiLDB4MDEsMHgzZSwweGQwLDB4MGYsMHhiMCwweDAzLDB4YWMsMHgwMCwweGY5IH0sCisgIDE2LCAweGM4NDAsIDAsIHsweDAwLDB4M2UsMHhjNCwweDBmLDB4YjAsMHgwMSwweGVjLDB4MDAsMHhmOSwweDA0LDB4M2UsMHg0OCwweDBmLDB4YjAsMHgwMywweGUwIH0sCisgIDE2LCAweGM4NTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweGRmLDB4MDAsMHgzZiwweGMwIH0sCisgIDE2LCAweGM4NjAsIDAsIHsweDBjLDB4ZTAsMHgwNywweGZjLDB4MDAsMHhmYywweDBhLDB4MjcsMHgwMCwweDRmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZiwweDA4IH0sCisgIDE2LCAweGM4NzAsIDAsIHsweDMzLDB4ODAsMHgwYywweGYwLDB4MDAsMHgyYywweDAwLDB4NWYsMHgwMCwweDMzLDB4YzAsMHgwYywweGYwLDB4MDEsMHhmYywweDAwIH0sCisgIDE2LCAweGM4ODAsIDAsIHsweGZlLDB4MDAsMHgyMywweDQwLDB4MGYsMHhiMCwweDAzLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM4OTAsIDAsIHsweDgxLDB4MDQsMHg2YywweDAwLDB4OGIsMHg4NiwweDJlLDB4ZTAsMHg0OCwweDhmLDB4MDIsMHhlYywweDA4LDB4YjgsMHhhMCwweDM2IH0sCisgIDE2LCAweGM4YTAsIDAsIHsweDMwLDB4NGIsMHhiMCwweDAzLDB4YWMsMHgwYywweDliLDB4MDIsMHgzYywweGEwLDB4MGMsMHhiMCwweDQzLDB4NmMsMHgwMCwweGIxIH0sCisgIDE2LCAweGM4YjAsIDAsIHsweDAwLDB4MjgsMHhjMCwweDBkLDB4YjAsMHgxMiwweGVjLDB4MTAsMHhiOSwweDgwLDB4YTIsMHg2MSwweDBiLDB4YjAsMHgwMiwweDIwIH0sCisgIDE2LCAweGM4YzAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweDliLDB4ODgsMHgyZSwweGUwIH0sCisgIDE2LCAweGM4ZDAsIDAsIHsweDA4LDB4YTAsMHgwMiwweGVjLDB4MDEsMHhiYiwweDgwLDB4MjYsMHg2MiwweDBiLDB4YjAsMHgwMiwweGVjLDB4MDAsMHhiMywweDAxIH0sCisgIDE2LCAweGM4ZTAsIDAsIHsweDJhLDB4MjEsMHgwOCwweGIwLDB4MTIsMHgyYywweDAwLDB4YjgsMHgwMCwweDIyLDB4YzAsMHgwOCwweGIwLDB4MTIsMHhlYywweDE0IH0sCisgIDE2LCAweGM4ZjAsIDAsIHsweGI5LDB4ODQsMHgyMiwweGEyLDB4MGIsMHhiMCwweDAyLDB4YTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM5MDAsIDAsIHsweDA4LDB4MDQsMHgwYywweDA0LDB4OTMsMHgwMCwweDJjLDB4ZTAsMHgwOCwweDAwLDB4MDIsMHhjYywweDA5LDB4OTEsMHgwMCwweDIwIH0sCisgIDE2LCAweGM5MTAsIDAsIHsweDQwLDB4MGIsMHgzMCwweDA2LDB4NGMsMHgwNCwweDEzLDB4MDAsMHgyNiwweDAwLDB4MDgsMHgzMCwweDAyLDB4Y2MsMHgwNCwweGIyIH0sCisgIDE2LCAweGM5MjAsIDAsIHsweDAwLDB4MmEsMHhjMCwweDAxLDB4MzAsMHgwMCwweGNkLDB4MDAsMHhiMCwweDAwLDB4MjAsMHg4MCwweDBiLDB4MzAsMHgwYSwweDAyIH0sCisgIDE2LCAweGM5MzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGRiLDB4MjQsMHg2ZSwweGMwIH0sCisgIDE2LCAweGM5NDAsIDAsIHsweDJjLDB4YTAsMHgwMiwweGZjLDB4MDAsMHhiYSwweDA0LDB4MjYsMHg0MCwweDRmLDB4ZjAsMHg1NywweGZjLDB4MDAsMHgzZiwweDAxIH0sCisgIDE2LCAweGM5NTAsIDAsIHsweDNhLDB4MDAsMHgyYywweGYwLDB4MDEsMHgzYywweDAwLDB4ZGIsMHgwMCwweDMzLDB4YzAsMHg4NCwweGYwLDB4MDMsMHhmZCwweDA4IH0sCisgIDE2LCAweGM5NjAsIDAsIHsweGZhLDB4MDAsMHgzMiwweDAwLDB4MGYsMHhmMCwweDAzLDB4MDAsMHgwMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM5NzAsIDAsIHsweGEwLDB4MTksMHhkYywweDAwLDB4ZWEsMHg0MCwweDNmLDB4MDAsMHgwNywweGMwLDB4MDMsMHhmYywweDA0LDB4ZmMsMHgwMCwweDNmIH0sCisgIDE2LCAweGM5ODAsIDAsIHsweDQwLDB4MGYsMHhmMCwweDAzLDB4OWMsMHgwMCwweGZmLDB4MDAsMHgzZiwweDAwLDB4MGUsMHhmMCwweDAzLDB4N2MsMHgwMCwweGZkIH0sCisgIDE2LCAweGM5OTAsIDAsIHsweDAwLDB4M2YsMHhjMSwweDBmLDB4ZjAsMHgwMywweGZjLDB4ODQsMHhmNCwweDAwLDB4M2YsMHgwMCwweDBmLDB4ZjAsMHgwMywweGU4IH0sCisgIDE2LCAweGM5YTAsIDAsIHsweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAxLDB4ZjAsMHg4MCwweGZmLDB4MDAsMHgwMywweGMyIH0sCisgIDE2LCAweGM5YjAsIDAsIHsweDBmLDB4YzIsMHgwMywweDNlLDB4MDAsMHhkZiwweGMwLDB4M2UsMHhjMCwweDRkLDB4ZGIsMHgwMiwweGIwLDB4YzAsMHhkYywweDMwIH0sCisgIDE2LCAweGM5YzAsIDAsIHsweDNmLDB4ZTAsMHgwZiwweGRiLDB4MjMsMHhmNiwweDIwLDB4ZmYsMHgyNiwweDMzLDB4ZTAsMHgwZiwweDUyLDB4MDMsMHg1ZSwweDAwIH0sCisgIDE2LCAweGM5ZDAsIDAsIHsweGZmLDB4ODAsMHgzMywweGMwLDB4NGMsMHg0OSwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM5ZTAsIDAsIHsweDgwLDB4MTAsMHhlMSwweGUwLDB4YjcsMHgwOCwweDIzLDB4ZjAsMHgwYiwweGFkLDB4MGEsMHgyZSwweDAwLDB4OWEsMHgwNCwweDJlIH0sCisgIDE2LCAweGM5ZjAsIDAsIHsweGIwLDB4MDksMHg4ZiwweDAzLDB4YTAsMHg0MCwweGI5LDB4MzAsMHgyZSwweGEwLDB4MGIsMHg5ZiwweDAzLDB4YTcsMHgwMCwweGJiIH0sCisgIDE2LCAweGNhMDAsIDAsIHsweDgwLDB4MjYsMHhlMCwweDBiLDB4ZGQsMHgwMiwweDJlLDB4MDAsMHhiYiwweDgwLDB4MjIsMHhmNCwweDBhLDB4OTIsMHgwMiwweGEwIH0sCisgIDE2LCAweGNhMTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzgsMHg4MCwweGIzLDB4MTAsMHgyNCwweGMwIH0sCisgIDE2LCAweGNhMjAsIDAsIHsweDBiLDB4ODAsMHgwMiwweGFjLDB4MDAsMHhhMywweDI0LDB4MmMsMHhkMCwweDA4LDB4MTAsMHgwNiwweGMwLDB4ODAsMHhiMiwweDAxIH0sCisgIDE2LCAweGNhMzAsIDAsIHsweDJjLDB4ZWEsMHg0YiwweDAwLDB4MTIsMHhjMiwweDA0LDB4YjMsMHgxMCwweDA4LDB4YzAsMHgwYSwweDkwLDB4MDIsMHgwYywweDAwIH0sCisgIDE2LCAweGNhNDAsIDAsIHsweDkzLDB4MDQsMHgyNCwweGMwLDB4MDksMHg4MiwweDAyLDB4YTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNhNTAsIDAsIHsweGMwLDB4MTUsMHhhNSwweDAwLDB4YmIsMHgwMCwweDIyLDB4YzAsMHgwYiwweDgwLDB4MDIsMHhhYywweDA4LDB4YmIsMHgxOCwweDJlIH0sCisgIDE2LCAweGNhNjAsIDAsIHsweGUwLDB4MTgsMHg4OCwweDAyLDB4ZWMsMHgwMSwweGJhLDB4MDAsMHgyZSwweDgwLDB4MGIsMHg5OCwweDg2LDB4ZTIsMHgwMCwweGJiIH0sCisgIDE2LCAweGNhNzAsIDAsIHsweDAwLDB4MjIsMHhjNCwweDBiLDB4OTAsMHgwMiwweDZjLDB4MDAsMHhiYiwweDAwLDB4YTYsMHhjMCwweDBiLDB4OTAsMHgwMCwweGIwIH0sCisgIDE2LCAweGNhODAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDExLDB4ZTcsMHgwMCwweGZiLDB4MDAsMHhiMiwweGMwIH0sCisgIDE2LCAweGNhOTAsIDAsIHsweDBmLDB4YTgsMHgwMywweGFjLDB4MDIsMHhlYiwweDAwLDB4M2UsMHg2MCwweDBkLDB4OWUsMHgwMywweGVjLDB4MDAsMHhkOCwweDQwIH0sCisgIDE2LCAweGNhYTAsIDAsIHsweDNlLDB4NDAsMHgwZiwweDg4LDB4NDMsMHhlMiwweDAwLDB4ZmIsMHgyMCwweDMyLDB4YzAsMHgwZiwweDEwLDB4MGIsMHg2ZiwweDkwIH0sCisgIDE2LCAweGNhYjAsIDAsIHsweDViLDB4ODIsMHgzNiwweGMwLDB4MmQsMHgwOCwweDAxLDB4OTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNhYzAsIDAsIHsweGUwLDB4MDEsMHhiNywweDA4LDB4ZjcsMHgwMCwweDNmLDB4YzAsMHgwZiwweGY5LDB4MDMsMHg3YywweDA4LDB4Y2YsMHg4MiwweDNjIH0sCisgIDE2LCAweGNhZDAsIDAsIHsweDAwLDB4YWYsMHhkMCwweDIxLDB4YmMsMHgwOCwweGZkLDB4MTAsMHgzZiwweDgwLDB4OGYsMHhjMCwweDAzLDB4YTQsMHgwMCwweGY3IH0sCisgIDE2LCAweGNhZTAsIDAsIHsweDAxLDB4YmYsMHhjMCwweDA3LDB4ZDAsMHgwMywweGJkLDB4MzAsMHhmZiwweGE0LDB4MzgsMHhjMCwweDBlLDB4ZGEsMHgwMywweGY4IH0sCisgIDE2LCAweGNhZjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YTgsMHgwMCwweGZiLDB4MDAsMHhiMiwweGMxIH0sCisgIDE2LCAweGNiMDAsIDAsIHsweDBlLDB4ODEsMHgwMywweGVjLDB4NDAsMHhmYiwweDQ0LDB4M2EsMHhjMSwweDBlLDB4OTUsMHgwMywweGUwLDB4MDAsMHhjYiwweDQxIH0sCisgIDE2LCAweGNiMTAsIDAsIHsweDMyLDB4NGQsMHgwZiwweDgxLDB4MDMsMHhlMCwweDIwLDB4YzksMHgwMCwweDcyLDB4ZTgsMHg0NCwweDkxLDB4MDMsMHg2ZCwweDAwIH0sCisgIDE2LCAweGNiMjAsIDAsIHsweGNiLDB4MDIsMHgzZSwweGMwLDB4MGMsMHg4MCwweDAzLDB4OTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNiMzAsIDAsIHsweGM4LDB4MDUsMHgyNCwweDAwLDB4YmYsMHgwMCwweDMzLDB4YzQsMHgwOCwweDFkLDB4MDMsMHg4YywweDAwLDB4YmIsMHg5OCwweDM2IH0sCisgIDE2LCAweGNiNDAsIDAsIHsweDQ4LDB4NGQsMHg5OCwweDIyLDB4ZWQsMHg0MCwweGRiLDB4MDAsMHgzNiwweGIwLDB4MGIsMHg5OCwweDAyLDB4ZTMsMHgwMCwweGRiIH0sCisgIDE2LCAweGNiNTAsIDAsIHsweDAwLDB4MzIsMHhlMCwweDg4LDB4ZDgsMHgwMiwweDJjLDB4MDIsMHhjMywweDgwLDB4MmYsMHhjMCwweDA4LDB4OTAsMHgwMywweDcyIH0sCisgIDE2LCAweGNiNjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDAxLDB4NDQsMHgwMCwweGIzLDB4MDAsMHgyMCwweGYwIH0sCisgIDE2LCAweGNiNzAsIDAsIHsweDE4LDB4MDgsMHgwMiwweDRmLDB4ODQsMHhiMSwweGMwLDB4MjQsMHhjMCwweDg5LDB4MDYsMHgwMiwweGM0LDB4MDAsMHg5MSwweDAwIH0sCisgIDE2LCAweGNiODAsIDAsIHsweDIwLDB4ZjAsMHgxYiwweDE4LDB4ODIsMHhjNiwweDAwLDB4OTMsMHgwMCwweDJjLDB4ZDEsMHgwOCwweDFlLDB4MDIsMHgwZSwweDQ0IH0sCisgIDE2LCAweGNiOTAsIDAsIHsweDkzLDB4OTQsMHgyYywweGMwLDB4MDgsMHgyMCwweDAyLDB4YjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNiYTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDA0LDB4YjcsMHg4MCwweDIwLDB4ZTIsMHgwOCwweDY4LDB4MDYsMHg5ZSwweDgwLDB4YmYsMHg4NCwweDI1IH0sCisgIDE2LCAweGNiYjAsIDAsIHsweGE4LDB4MDksMHg2OCwweDAyLDB4YzYsMHgwMCwweDkzLDB4YTAsMHg2NSwweGU0LDB4MGIsMHg3OCwweDEyLDB4ZGUsMHgwMCwweDkzIH0sCisgIDE2LCAweGNiYzAsIDAsIHsweDAwLDB4YTEsMHhlMCwweDA4LDB4ZDgsMHgwMiwweDFlLDB4ZDAsMHhhNywweDgwLDB4MmQsMHhlMCwweDA4LDB4ZjgsMHgwMiwweDQ4IH0sCisgIDE2LCAweGNiZDAsIDAsIHsweDEwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MDgsMHgwMCwweGIzLDB4MjAsMHgzMCwweGMwIH0sCisgIDE2LCAweGNiZTAsIDAsIHsweDBhLDB4MjIsMHgwMiwweGNlLDB4NDAsMHhmMywweGEwLDB4M2MsMHhlOCwweDBiLDB4MzAsMHgwMiwweGMxLDB4MDAsMHhkMCwweGMxIH0sCisgIDE2LCAweGNiZjAsIDAsIHsweDMwLDB4YzAsMHgwYiwweDIxLDB4MTMsMHhjYywweDIxLDB4ZDMsMHgwMCwweDJjLDB4YzAsMHgyYywweDEwLDB4MGIsMHgwYywweDgwIH0sCisgIDE2LCAweGNjMDAsIDAsIHsweGQzLDB4NjEsMHgzYywweGM4LDB4MmMsMHgyMCwweDAzLDB4OTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNjMTAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZmYsMHg0MCwweDNiLDB4YzAsMHgwZiwweGUwLDB4MDMsMHhmYywweDAwLDB4ZjcsMHg1MCwweDdmIH0sCisgIDE2LCAweGNjMjAsIDAsIHsweGM0LDB4MmUsMHhmMCwweDAzLDB4ZmMsMHg0MCwweGZlLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDQ3LDB4ZmMsMHgwMCwweGZmIH0sCisgIDE2LCAweGNjMzAsIDAsIHsweDAwLDB4N2QsMHhjMiwweDBmLDB4ZDAsMHgwMSwweGJjLDB4ODAsMHg1ZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGQwIH0sCisgIDE2LCAweGNjNDAsIDAsIHsweDAyLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZTQsMHgwMCwweGZiLDB4YzAsMHgzMiwweGM4IH0sCisgIDE2LCAweGNjNTAsIDAsIHsweDBlLDB4ZTAsMHgwMywweGFjLDB4YTAsMHhlYiwweDIwLDB4MzIsMHg0MCwweDhjLDB4YTAsMHgxMywweDJjLDB4MDAsMHhkOSwweDAwIH0sCisgIDE2LCAweGNjNjAsIDAsIHsweDNlLDB4NjAsMHgwYywweGIwLDB4MDMsMHhlOCwweDAwLDB4ZmEsMHg4MCwweDMwLDB4YzAsMHgzYywweDkyLDB4MDMsMHhlZiwweDYwIH0sCisgIDE2LCAweGNjNzAsIDAsIHsweGMzLDB4MjAsMHgzMSwweGM0LDB4MGMsMHhhMCwweDAzLDB4MmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNjODAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDAwLDB4MzMsMHgyMCwweDIxLDB4ZGEsMHgwYiwweDcwLDB4NDMsMHg5YywweDAxLDB4YjUsMHgwMCwweDIxIH0sCisgIDE2LCAweGNjOTAsIDAsIHsweDAwLDB4MGEsMHhlMCwweDAyLDB4MWMsMHgwMCwweGI3LDB4MDAsMHgyZiwweGMwLDB4MGQsMHg3MCwweDAzLDB4OWMsMHgwMCwweGI2IH0sCisgIDE2LCAweGNjYTAsIDAsIHsweDAwLDB4MzEsMHhjOCwweDA4LDB4NTcsMHgwMiwweGRjLDB4MDAsMHg4NywweDUwLDB4MjEsMHhjMCwweDBhLDB4NzAsMHg0MiwweDkyIH0sCisgIDE2LCAweGNjYjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWEsMHgxMSwweGI3LDB4OTAsMHgyMSwweGUwIH0sCisgIDE2LCAweGNjYzAsIDAsIHsweDBiLDB4NjgsMHg4MiwweGRlLDB4MDgsMHhhNywweDgwLDB4MjQsMHg2MCwweDA4LDB4NzAsMHgxMiwweDEyLDB4MDgsMHg5NSwweDgwIH0sCisgIDE2LCAweGNjZDAsIDAsIHsweDJkLDB4NjAsMHgwOSwweDZjLDB4MDIsMHhkZSwweDAwLDB4YjEsMHg4MCwweDIzLDB4ZTAsMHgwYSwweDU4LDB4NjIsMHhmZSwweDAwIH0sCisgIDE2LCAweGNjZTAsIDAsIHsweDk3LDB4YTAsMHgyMSwweGU4LDB4MDksMHhlOCwweDAyLDB4MzAsMHgxMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNjZjAsIDAsIHsweDQ4LDB4MTQsMHhjZCwweDAwLDB4YjMsMHgwMCwweDIwLDB4YzAsMHg4YiwweDNjLDB4MDIsMHg4YywweDAwLDB4YmIsMHgwMCwweDI0IH0sCisgIDE2LCAweGNkMDAsIDAsIHsweGM0LDB4MWEsMHgzZCwweDAyLDB4MmYsMHg4OCwweGIzLDB4NDgsMHgyYywweGUwLDB4ODksMHgzZSwweDAyLDB4OGQsMHg4MCwweDkzIH0sCisgIDE2LCAweGNkMTAsIDAsIHsweGQ5LDB4YTQsMHg0MCwweDg4LDB4MTAsMHgwMiwweGNjLDB4MDQsMHg5MywweGM4LDB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDkyIH0sCisgIDE2LCAweGNkMjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YjksMHg0MCwweGZhLDB4MDAsMHhiMiwweDgwIH0sCisgIDE2LCAweGNkMzAsIDAsIHsweDBmLDB4ZTAsMHgwMywweGU4LDB4MDAsMHhlYSwweDgwLDB4MzcsMHhhMCwweDBjLDB4ZTgsMHgxMywweDNiLDB4MDgsMHhkZSwweDAxIH0sCisgIDE2LCAweGNkNDAsIDAsIHsweDNmLDB4ODIsMHgwYywweGUwLDB4NDMsMHhmYSwweDgwLDB4ZmUsMHg4MCwweDMxLDB4MjgsMHgwYywweGEwLDB4MDMsMHhmMCwweDAyIH0sCisgIDE2LCAweGNkNTAsIDAsIHsweGM0LDB4YzAsMHhiMiwweDgwLDB4MGQsMHhlMCwweDAzLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNkNjAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MTAsMHgwYiwweDgwLDB4ODMsMHhlMCwweDAwLDB4ZjgsMHgzMCwweDNhIH0sCisgIDE2LCAweGNkNzAsIDAsIHsweDAwLDB4NmQsMHg4MCwweDgzLDB4ZTEsMHg0NCwweGI4LDB4MDQsMHgzZSwweDEwLDB4MGYsMHg4MCwweDEzLDB4ZTAsMHgwMCwweGY4IH0sCisgIDE2LCAweGNkODAsIDAsIHsweDAwLDB4M2EsMHgxMCwweDRmLDB4MDQsMHgwMywweGUzLDB4MDAsMHhlOCwweDEwLDB4M2UsMHgwMCwweDBlLDB4ODAsMHgwMywweGQyIH0sCisgIDE2LCAweGNkOTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGM5LDB4MDAsMHgzOCwweDQwIH0sCisgIDE2LCAweGNkYTAsIDAsIHsweDBmLDB4MWEsMHgwMywweDJlLDB4MDAsMHhmYiwweGEwLDB4MzYsMHg2MCwweDBjLDB4OTgsMHgwMywweGU2LDB4MDQsMHhkMSwweDAwIH0sCisgIDE2LCAweGNkYjAsIDAsIHsweDM2LDB4NDgsMHgwZSwweDkxLDB4MDIsMHhlNiwweDAwLDB4ZjksMHgwMCwweDNlLDB4MDAsMHgwYywweDk5LDB4MDMsMHg2MiwweDQwIH0sCisgIDE2LCAweGNkYzAsIDAsIHsweGY4LDB4MDAsMHhhMCwweDY4LDB4MGMsMHg5MCwweDAzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNkZDAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAyLDB4ODksMHgwNCwweDJlLDB4NjQsMHg4OCwweDk0LDB4MDIsMHhhNSwweDAwLDB4YjksMHg4MCwweDIwIH0sCisgIDE2LCAweGNkZTAsIDAsIHsweDY0LDB4MGQsMHg5YywweDAyLDB4ZTYsMHg0MiwweDg5LDB4MDAsMHgyMiwweDYwLDB4MGIsMHg5YywweDAyLDB4ZTQsMHgxMCwweGI5IH0sCisgIDE2LCAweGNkZjAsIDAsIHsweDQwLDB4M2EsMHg1MCwweDA4LDB4OWMsMHgwMiwweDI3LDB4MjAsMHhiOSwweDAwLDB4MjIsMHg0MCwweDA4LDB4MTAsMHgwMywweDYwIH0sCisgIDE2LCAweGNlMDAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MDQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDQwIH0sCisgIDE2LCAweGNlMTAsIDAsIHsweDBhLDB4OTAsMHg4MiwweDI1LDB4NGMsMHhiOSwweDAwLDB4MDIsMHg0MCwweDA4LDB4OTYsMHgwMiwweGU0LDB4MTAsMHg4OSwweDAwIH0sCisgIDE2LCAweGNlMjAsIDAsIHsweDI2LDB4NTAsMHgxMywweDk0LDB4MDIsMHhlNCwweDQwLDB4YjksMHgwOCwweDJlLDB4NDAsMHgwOCwweDkwLDB4OGEsMHgyNCwweDAwIH0sCisgIDE2LCAweGNlMzAsIDAsIHsweGI5LDB4MDEsMHgyYSwweDQwLDB4MDgsMHg5MCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNlNDAsIDAsIHsweDA4LDB4MDQsMHgwNSwweDgwLDB4ODEsMHg0MCwweDJjLDB4YzgsMHgwOCwweDEwLDB4MDYsMHg4NCwweDAwLDB4YjEsMHgwNCwweDIwIH0sCisgIDE2LCAweGNlNTAsIDAsIHsweDQ5LDB4MDksMHgxNCwweDQyLDB4Y2MsMHg4OSwweDgxLDB4MjAsMHgyMCwweDUwLDB4MGIsMHgxNCwweDQ2LDB4YzQsMHgwMCwweGIxIH0sCisgIDE2LCAweGNlNjAsIDAsIHsweDAwLDB4MmEsMHhjMCwweDI4LDB4MTQsMHgwMiwweDAxLDB4MDEsMHhiMCwweDA0LDB4MjgsMHg0MCwweDM4LDB4OTQsMHgwMiwweDQyIH0sCisgIDE2LCAweGNlNzAsIDAsIHsweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweDg4LDB4MDAsMHgzYSwweDAwIH0sCisgIDE2LCAweGNlODAsIDAsIHsweDBlLDB4ODAsMHgyMywweDIwLDB4MDAsMHhmOCwweDUwLDB4YjIsMHgwMCwweDBjLDB4ODAsMHgxMiwweGUxLDB4NDAsMHhkOCwweDUwIH0sCisgIDE2LCAweGNlOTAsIDAsIHsweDM2LDB4MDAsMHgwZSwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDJlLDB4MDAsMHgwYywweDgwLDB4NTMsMHg2MCwweDA0IH0sCisgIDE2LCAweGNlYTAsIDAsIHsweGY4LDB4MDAsMHgzYSwweDAwLDB4MGMsMHg4MCwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNlYjAsIDAsIHsweDk4LDB4MWQsMHhmNCwweDQwLDB4ZjksMHg0NCwweDNlLDB4NDQsMHgwZiwweGQ0LDB4MDMsMHhlNCwweDAwLDB4ZjEsMHgwMCwweDNmIH0sCisgIDE2LCAweGNlYzAsIDAsIHsweDQ0LDB4MGYsMHhkNCwweDUzLDB4ZjQsMHg0NCwweGZkLDB4MTAsMHgyZiwweDQwLDB4MGYsMHhmNCwweDAzLDB4ZmQsMHgwMCwweGZkIH0sCisgIDE2LCAweGNlZDAsIDAsIHsweDQwLDB4M2IsMHgxMCwweDBmLDB4ZDQsMHgyMywweGQxLDB4MDQsMHg3YywweDQzLDB4MzYsMHg1MCwweDBmLDB4NTAsMHgwMywweGU2IH0sCisgIDE2LCAweGNlZTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4YTYsMHgwMCwweGY5LDB4MTAsMHgyZSwweDYyIH0sCisgIDE2LCAweGNlZjAsIDAsIHsweDBmLDB4ZDIsMHg4MywweGU0LDB4MDAsMHhiZCwweDQyLDB4M2UsMHg2MSwweDBmLDB4ZDAsMHgwMywweGY2LDB4YzAsMHhjOSwweGEyIH0sCisgIDE2LCAweGNmMDAsIDAsIHsweDJiLDB4NDAsMHgwYywweGQwLDB4MDMsMHgzNCwweDAwLDB4ZjksMHg4MSwweDNlLDB4NjgsMHgwOCwweGMxLDB4NDMsMHhmYSwweDAwIH0sCisgIDE2LCAweGNmMTAsIDAsIHsweGY1LDB4ODAsMHgzZiwweDYyLDB4MGMsMHgxNCwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNmMjAsIDAsIHsweDM4LDB4MTAsMHhlMSwweDIwLDB4ODgsMHgxMSwweDJlLDB4MTAsMHgwYiwweDgwLDB4MDIsMHhlMCwweDAwLDB4YjgsMHg4MiwweDJlIH0sCisgIDE2LCAweGNmMzAsIDAsIHsweDEwLDB4MGIsMHg4MCwweDAwLDB4ZTMsMHhjNCwweDg4LDB4ZjAsMHgyMiwweDAwLDB4MGIsMHg4MCwweDBhLDB4MjAsMHgwMCwweGU4IH0sCisgIDE2LCAweGNmNDAsIDAsIHsweDQwLDB4MmYsMHgxNCwweDA4LDB4ODgsMHgwMiwweGUyLDB4MDAsMHhiOCwweDAwLDB4MmUsMHgwMCwweDA4LDB4ODgsMHgwMiwweDhlIH0sCisgIDE2LCAweGNmNTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4YzUsMHgwMCwweGExLDB4MDAsMHgyYywweDQwIH0sCisgIDE2LCAweGNmNjAsIDAsIHsweDBiLDB4MTAsMHgwMiwweGM0LDB4MTgsMHhiMSwweDIyLDB4NmMsMHhkMSwweDBiLDB4MTAsMHgyNiwweGM0LDB4MDAsMHg4MSwweDA4IH0sCisgIDE2LCAweGNmNzAsIDAsIHsweDJhLDB4NDAsMHg4OCwweDEwLDB4MDIsMHgwNCwweDA0LDB4YjUsMHhjMCwweDBmLDB4NDAsMHgwYiwweDAyLDB4MDIsMHg0MSwweGEwIH0sCisgIDE2LCAweGNmODAsIDAsIHsweGIxLDB4NDAsMHgyYywweDQwLDB4MDgsMHgxMiwweDAyLDB4MDIsMHgxMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNmOTAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4ODksMHgwNiwweDJlLDB4NDAsMHgwYiwweDkwLDB4MTIsMHhlNCwweDAwLDB4YjksMHg0MCwweDJlIH0sCisgIDE2LCAweGNmYTAsIDAsIHsweDQwLDB4MGIsMHhiMCwweDgyLDB4YzQsMHgwMiwweDg5LDB4NDQsMHgyMiwweDQwLDB4MGEsMHg5MCwweDAyLDB4MjQsMHgwMCwweGE5IH0sCisgIDE2LCAweGNmYjAsIDAsIHsweDAwLDB4MjcsMHg0OCwweDA5LDB4YjAsMHgxMiwweGVjLDB4MTgsMHhiOSwweDAxLDB4MmUsMHg0MCwweDQwLDB4OTAsMHgwMiwweDg2IH0sCisgIDE2LCAweGNmYzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTcsMHg4NCwweGU5LDB4MDEsMHgzZSwweDQwIH0sCisgIDE2LCAweGNmZDAsIDAsIHsweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg3MiwweDBmLDB4OTAsMHgwMywweGU3LDB4NjAsMHg4OSwweDEwIH0sCisgIDE2LCAweGNmZTAsIDAsIHsweDNhLDB4NDAsMHgwYywweDkwLDB4MDMsMHgyNCwweDAwLDB4ZjksMHg0NCwweDNjLDB4NDAsMHgyZCwweDkwLDB4MDMsMHhlNywweDYwIH0sCisgIDE2LCAweGNmZjAsIDAsIHsweGY5LDB4NzEsMHgzZSwweDQwLDB4MjgsMHg5MCwweDAzLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQwMDAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDQ4LDB4YTksMHgwMCwweDNlLDB4YzAsMHgwZiwweDlhLDB4NDMsMHhlYywweDAwLDB4ZjksMHgyMCwweDdlIH0sCisgIDE2LCAweGQwMTAsIDAsIHsweGM4LDB4MGYsMHg5YSwweDA3LDB4NjYsMHgwMCwweDc5LDB4ODAsMHg3ZSwweDQwLDB4MGYsMHgxYywweDAzLDB4ZTcsMHgwMCwweGU5IH0sCisgIDE2LCAweGQwMjAsIDAsIHsweGEwLDB4M2UsMHg0MCwweDQ2LDB4ODAsMHgwMywweGUwLDB4MjAsMHhmOSwweDAwLDB4M2MsMHg0MCwweDBmLDB4OTAsMHgwMywweGNhIH0sCisgIDE2LCAweGQwMzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4ODAsMHgwMCwweGY4LDB4MDAsMHgzYSwweDAwIH0sCisgIDE2LCAweGQwNDAsIDAsIHsweDBmLDB4ODAsMHgwMywweGEwLDB4MDgsMHhlOCwweDQwLDB4M2EsMHgxMCwweDBjLDB4ODMsMHgwMywweGExLDB4YzAsMHhmMCwweDQwIH0sCisgIDE2LCAweGQwNTAsIDAsIHsweDNlLDB4MDYsMHgwZiwweDg0LDB4MDMsMHhlMSwweDAwLDB4ZjgsMHgwMCwweDNiLDB4MDAsMHgwZiwweDgxLDB4MDMsMHgyMCwweDAwIH0sCisgIDE2LCAweGQwNjAsIDAsIHsweGY4LDB4MTAsMHhiMiwweDAwLDB4NGMsMHg4MCwweDBiLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQwNzAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAwLDB4YmEsMHgwMCwweDJlLDB4YjAsMHgwYiwweGU4LDB4MDIsMHhlOSwweDAwLDB4M2UsMHg5MCwweDAyIH0sCisgIDE2LCAweGQwODAsIDAsIHsweDgxLDB4MDgsMHhlNCwweDEyLDB4NzgsMHgwMCwweGJhLDB4MDAsMHgyZCwweGIwLDB4ODksMHhlOCwweDIyLDB4ZjgsMHgwYywweGJhIH0sCisgIDE2LCAweGQwOTAsIDAsIHsweDAwLDB4NmUsMHg4MCwweDAzLDB4YzUsMHgwMywweDMwLDB4MDAsMHhiYSwweDAwLDB4MjIsMHhhOCwweDA4LDB4YTAsMHgyMiwweDhhIH0sCisgIDE2LCAweGQwYTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweGIzLDB4MDAsMHgyOCwweGU4IH0sCisgIDE2LCAweGQwYjAsIDAsIHsweDFiLDB4MzEsMHgxMiwweDhjLDB4YzQsMHhhMywweDkyLDB4MmMsMHg0MCwweDg4LDB4MzQsMHgwNiwweDhlLDB4MDAsMHg5MywweDAwIH0sCisgIDE2LCAweGQwYzAsIDAsIHsweDJjLDB4ZjAsMHgxOSwweDMxLDB4YTIsMHhjYywweDA0LDB4YjMsMHgwMCwweDI4LDB4ODAsMHgwMSwweDM4LDB4MDIsMHg0YywweDAwIH0sCisgIDE2LCAweGQwZDAsIDAsIHsweGIzLDB4ODAsMHgyMCwweGUwLDB4MGEsMHhiMCwweDEyLDB4MDIsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQwZTAsIDAsIHsweGEwLDB4MDEsMHgxYywweDAwLDB4YjcsMHgxNCwweDJkLDB4NDIsMHgwYiwweDYwLDB4MDIsMHhkYywweDAwLDB4YjcsMHg4MSwweDI3IH0sCisgIDE2LCAweGQwZjAsIDAsIHsweGUwLDB4MTgsMHg2MCwweDAyLDB4NTgsMHgxOCwweGI3LDB4MjIsMHgyZCwweDgwLDB4MDksMHg3MCwweDIyLDB4ZGMsMHgwMCwweGI3IH0sCisgIDE2LCAweGQxMDAsIDAsIHsweDAwLDB4MmQsMHg4MCwweDBiLDB4M2IsMHgwMiwweDFkLDB4ZDAsMHhiZiwweDgwLDB4MjgsMHhjMCwweDhhLDB4ZjIsMHgwMiwweGEwIH0sCisgIDE2LCAweGQxMTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWYsMHg4MCwweGY3LDB4YTAsMHgzOSwweGUyIH0sCisgIDE2LCAweGQxMjAsIDAsIHsweDBmLDB4NjgsMHgwMywweDllLDB4MDAsMHhlZCwweDg0LDB4M2QsMHhlMiwweDQ0LDB4NzgsMHgwMywweDllLDB4MDAsMHhmNywweGI0IH0sCisgIDE2LCAweGQxMzAsIDAsIHsweDJkLDB4ZTAsMHgwZCwweDY4LDB4MDMsMHhkNiwweDAwLDB4ZjYsMHg4MCwweDM5LDB4ZTAsMHgwZiwweDc5LDB4MDMsMHg1ZSwweDkwIH0sCisgIDE2LCAweGQxNDAsIDAsIHsweGY3LDB4ODEsMHgzMSwweDYwLDB4MmUsMHg3YywweDAzLDB4MmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQxNTAsIDAsIHsweDA4LDB4MWQsMHhhZCwweDAwLDB4ZmIsMHg0MiwweDNlLDB4YzgsMHgwZiwweGEwLDB4MDMsMHhlZCwweGEwLDB4YmIsMHgwMCwweDM4IH0sCisgIDE2LCAweGQxNjAsIDAsIHsweGM4LDB4MGYsMHhiMCwweDAzLDB4NjgsMHgwMCwweGZiLDB4MTEsMHgzZSwweDQwLDB4MDksMHhiMCwweDQxLDB4ZWMsMHgwMCwweGZhIH0sCisgIDE2LCAweGQxNzAsIDAsIHsweDAyLDB4M2UsMHhjMCwweDBmLDB4YjIsMHgwYiwweGVkLDB4ODAsMHgzYiwweDAwLDB4MzYsMHg0MCwweDBkLDB4YjAsMHgyMywweDQyIH0sCisgIDE2LCAweGQxODAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmYsMHgwMCwweGNmLDB4ZDAsMHgzMywweGU0IH0sCisgIDE2LCAweGQxOTAsIDAsIHsweDRmLDB4ZjksMHgwMywweGRlLDB4NDAsMHhkYywweDgwLDB4MzYsMHhlNCwweDBjLDB4YjksMHgxMywweGZlLDB4MDAsMHhjZiwweDkwIH0sCisgIDE2LCAweGQxYTAsIDAsIHsweDM3LDB4ZTUsMHgwZiwweGY4LDB4NDMsMHhmZSwweDAwLDB4Y2YsMHg5MiwweDNmLDB4YTQsMHgwZiwweDc4LDB4MDMsMHgxZiwweDAwIH0sCisgIDE2LCAweGQxYjAsIDAsIHsweGM1LDB4ODAsMHgzMywweDYwLDB4MGMsMHhmOCwweDIwLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQxYzAsIDAsIHsweGE4LDB4MTEsMHhiYywweDAwLDB4MGYsMHgxMCwweDIxLDB4ODEsMHgwYiwweDYwLDB4MDMsMHg4NCwweDAwLDB4OGIsMHgwOCwweDIxIH0sCisgIDE2LCAweGQxZDAsIDAsIHsweDYwLDB4MGEsMHg3YiwweDAzLDB4OTgsMHgwMCwweDhiLDB4MTAsMHgyOSwweDg0LDB4MGUsMHg2NCwweDIyLDB4ZGMsMHg0MCwweGQ3IH0sCisgIDE2LCAweGQxZTAsIDAsIHsweDAyLDB4MmQsMHg4NCwweDBiLDB4NzAsMHgwMiwweDFjLDB4MDAsMHg4NSwweDE4LDB4MjEsMHg0MCwweDBhLDB4ZjAsMHgyMiwweGFhIH0sCisgIDE2LCAweGQxZjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHgwMCwweGE3LDB4MTQsMHg2OSwweGMwIH0sCisgIDE2LCAweGQyMDAsIDAsIHsweDFhLDB4NjAsMHgxMiwweGZjLDB4MDEsMHhhNCwweDEwLDB4MmQsMHhjMCwweDBhLDB4NTIsMHgwMiwweDQ1LDB4NDAsMHg4NywweDBjIH0sCisgIDE2LCAweGQyMTAsIDAsIHsweDIxLDB4ODAsMHgxYiwweDYwLDB4ODIsMHhkNCwweDAwLDB4ODYsMHgwMywweDI1LDB4ZTAsMHgxYiwweDcwLDB4MDIsMHg1YywweDQwIH0sCisgIDE2LCAweGQyMjAsIDAsIHsweDlkLDB4MDAsMHgyOSwweDQwLDB4MDgsMHg3MCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQyMzAsIDAsIHsweDIwLDB4MTQsMHhjZCwweDAwLDB4YTMsMHgwMCwweDI4LDB4YzAsMHgxYiwweDIwLDB4MjIsMHg4YywweDExLDB4YTMsMHgwMCwweDY4IH0sCisgIDE2LCAweGQyNDAsIDAsIHsweGY2LDB4MGEsMHgzYywweDA2LDB4ODIsMHgwMCwweDgzLDB4ODAsMHgyOCwweDg0LDB4MGEsMHg4YywweDgyLDB4Y2MsMHg0NCwweDkyIH0sCisgIDE2LCAweGQyNTAsIDAsIHsweDAwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweDRlLDB4MDAsMHg5MSwweDAwLDB4MjgsMHg0MCwweDBhLDB4MzAsMHgwMiwweDg4IH0sCisgIDE2LCAweGQyNjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmUsMHgyMiwweGVmLDB4MDQsMHhiYSwweGMwIH0sCisgIDE2LCAweGQyNzAsIDAsIHsweDBmLDB4MTQsMHg5MywweGVjLDB4MDIsMHhmMSwweGMzLDB4M2UsMHhmMCwweDBlLDB4OTAsMHg4MywweDY2LDB4MDAsMHhjZiwweGQyIH0sCisgIDE2LCAweGQyODAsIDAsIHsweDMyLDB4NTAsMHgwZiwweDljLDB4MDMsMHhjYiwweDAwLDB4YzksMHg4MCwweDNlLDB4MjgsMHgwZiwweGIwLDB4MDMsMHg0ZiwweDAwIH0sCisgIDE2LCAweGQyOTAsIDAsIHsweGQxLDB4YzAsMHhhYSwweGMwLDB4MGMsMHg3MSwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQyYTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDIwLDB4ZGIsMHgwMCwweDI2LDB4ODAsMHgwZiwweGEwLDB4MDMsMHhlYywweDA4LDB4MWIsMHgwMCwweDM2IH0sCisgIDE2LCAweGQyYjAsIDAsIHsweGMwLDB4MGYsMHg4NiwweDAxLDB4ZTUsMHg0MCwweGZiLDB4MDIsMHgzYSwweDQ4LDB4MGUsMHg5NCwweDAzLDB4ZWMsMHg4MCwweGYxIH0sCisgIDE2LCAweGQyYzAsIDAsIHsweDg0LDB4M2UsMHgwMCwweDRmLDB4YjAsMHgwMywweGFkLDB4YzAsMHhlYiwweDIwLDB4MzYsMHhjMCwweDBmLDB4YjAsMHgyMywweGUwIH0sCisgIDE2LCAweGQyZDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZGMsMHgwMCwweGNmLDB4MDAsMHgzZiwweDYwIH0sCisgIDE2LCAweGQyZTAsIDAsIHsweDBjLDB4ZTAsMHg4MywweDNlLDB4ODAsMHhlZCwweDA4LDB4MzMsMHhkMCwweDhmLDB4NTAsMHgwMywweDllLDB4MDAsMHhkZiwweDAwIH0sCisgIDE2LCAweGQyZjAsIDAsIHsweDMzLDB4NDAsMHgwYywweGMwLDB4MDMsMHgzMCwweDAwLDB4Y2MsMHgxMCwweDMzLDB4NjgsMHgwYywweGYwLDB4MDMsMHgzYywweDg0IH0sCisgIDE2LCAweGQzMDAsIDAsIHsweDhkLDB4OTAsMHgzMCwweDQwLDB4MGMsMHhmMCwweDAzLDB4MDgsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQzMTAsIDAsIHsweDgxLDB4MDQsMHg2YywweDAwLDB4OGIsMHgwMiwweDJjLDB4ZjQsMHgwOCwweGE4LDB4NjIsMHgwYywweDgwLDB4OGIsMHg4MCwweDJhIH0sCisgIDE2LCAweGQzMjAsIDAsIHsweDYwLDB4MGYsMHg5YywweDAyLDB4MmUsMHgwMCwweDhiLDB4MDAsMHgyMCwweDYwLDB4MGQsMHg5OCwweDAyLDB4MmMsMHg4MCwweGQ4IH0sCisgIDE2LCAweGQzMzAsIDAsIHsweDAwLDB4MTQsMHg0MCwweDA4LDB4MzQsMHgxMiwweDJlLDB4MDAsMHg4YiwweDgyLDB4MzIsMHg0MCwweDBkLDB4YjAsMHgwMywweDYwIH0sCisgIDE2LCAweGQzNDAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweDhiLDB4MDAsMHgyZSwweGQwIH0sCisgIDE2LCAweGQzNTAsIDAsIHsweDA4LDB4YjgsMHgwMiwweDJjLDB4MDAsMHg4YSwweDg0LDB4MjIsMHhjMCwweDBiLDB4ODgsMHgwMiwweGU0LDB4YTAsMHg4MywweDAwIH0sCisgIDE2LCAweGQzNjAsIDAsIHsweDIyLDB4NjIsMHgwYSwweDk4LDB4MDIsMHgyOCwweDAwLDB4ODksMHgwMCwweDIyLDB4MDAsMHgwYSwweGIxLDB4MDYsMHgyYywweDAwIH0sCisgIDE2LCAweGQzNzAsIDAsIHsweGFiLDB4MDAsMHgyMiwweDQwLDB4MDgsMHhiMCwweDAyLDB4NjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQzODAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAyLDB4YTMsMHgwMCwweDJjLDB4YzEsMHgwOCwweDIwLDB4MDIsMHgwYywweDAyLDB4OGIsMHgwMCwweDI4IH0sCisgIDE2LCAweGQzOTAsIDAsIHsweGMyLDB4MGEsMHgwMCwweDAyLDB4NDQsMHgxMCwweDgzLDB4MTAsMHgyMiwweDQwLDB4MGIsMHgxMCwweDA2LDB4MGMsMHgwMCwweDkxIH0sCisgIDE2LCAweGQzYTAsIDAsIHsweDA0LDB4YWEsMHgwMCwweDI4LDB4MzAsMHgwMiwweDJjLDB4MDAsMHhhMSwweDAxLDB4MjAsMHg0MCwweDA5LDB4YjAsMHgwMiwweDQyIH0sCisgIDE2LCAweGQzYjAsIDAsIHsweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4N2MsMHgwMCwweDhmLDB4MDAsMHgzZSwweGMwIH0sCisgIDE2LCAweGQzYzAsIDAsIHsweDJjLDB4YTAsMHgwMywweDI5LDB4NDAsMHhhOCwweDQwLDB4MzIsMHhjYywweDhiLDB4ODAsMHgwMiwweGUwLDB4MDAsMHhjZiwweDQwIH0sCisgIDE2LCAweGQzZDAsIDAsIHsweDMyLDB4MDAsMHgwZSwweDgwLDB4MGEsMHgyMCwweDAwLDB4ODgsMHgwMCwweDIyLDB4NDAsMHgwYywweGIwLDB4MDMsMHgyYywweDA0IH0sCisgIDE2LCAweGQzZTAsIDAsIHsweGViLDB4MDAsMHhiMiwweDQwLDB4OGMsMHhiMCwweDAzLDB4NDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQzZjAsIDAsIHsweGEwLDB4MWQsMHhmYywweDAwLDB4ZGYsMHgwMCwweDNmLDB4NDAsMHgwZiwweGUwLDB4MDMsMHhmYywweDgwLDB4ZmYsMHgyOCwweDNkIH0sCisgIDE2LCAweGQ0MDAsIDAsIHsweGMwLDB4MGIsMHhjMSwweDAzLDB4YjAsMHgxNCwweGZmLDB4MDAsMHgzZiwweDAwLDB4MGQsMHhkMCwweDAzLDB4ZGMsMHgwMCwweGZjIH0sCisgIDE2LCAweGQ0MTAsIDAsIHsweDAwLDB4MzcsMHg0MCwweDBmLDB4ZjAsMHgyMSwweGZjLDB4MDAsMHgxZCwweDAwLDB4N2IsMHg0MCwweDhmLDB4ZjAsMHgwMywweGUwIH0sCisgIDE2LCAweGQ0MjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZDIsMHgwMCwweGRmLDB4MDAsMHgzMSwweGEwIH0sCisgIDE2LCAweGQ0MzAsIDAsIHsweDRkLDB4ZjAsMHg0MywweDMyLDB4MDAsMHhjZSwweDE0LDB4MWIsMHg2OCwweDBlLDB4ZGEsMHgyMywweGIyLDB4YzAsMHgyZiwweDAwIH0sCisgIDE2LCAweGQ0NDAsIDAsIHsweDNmLDB4YzIsMHgyYywweGU4LDB4MDMsMHgzYywweDQwLDB4ZmQsMHgwOCwweDNiLDB4YzgsMHg0YywweGYwLDB4ODMsMHgzYywweGEwIH0sCisgIDE2LCAweGQ0NTAsIDAsIHsweGNmLDB4MDAsMHgzMywweGM0LDB4MGMsMHhmMywweDA3LDB4ZjAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ0NjAsIDAsIHsweDgwLDB4MTAsMHhlMiwweDAwLDB4OGYsMHhjMCwweDIyLDB4YTAsMHgwOCwweGZkLDB4NDIsMHgyZiwweDAwLDB4OGIsMHg3MCwweDIyIH0sCisgIDE2LCAweGQ0NzAsIDAsIHsweDFlLDB4NDgsMHg4OSwweDAyLDB4MjcsMHhjMCwweDhmLDB4NWEsMHgyZSwweDUwLDB4NDgsMHgzMCwweDAyLDB4YmQsMHhjMCwweGJkIH0sCisgIDE2LCAweGQ0ODAsIDAsIHsweDQwLDB4MjMsMHhjNSwweDQ4LDB4ZjQsMHg4MiwweDNkLDB4MmMsMHg4NywweDcwLDB4MjIsMHhjMCwweDA4LDB4ZjEsMHgwMywweGUwIH0sCisgIDE2LCAweGQ0OTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4ZTAsMHgwMCwweDkzLDB4MTAsMHgyNiwweDgxIH0sCisgIDE2LCAweGQ0YTAsIDAsIHsweDQ5LDB4MzAsMHgwMiwweDgwLDB4NDAsMHg4MywweDIwLDB4MjgsMHg0MCwweDBhLDB4MTAsMHgwMiwweDgwLDB4MDAsMHhhMywweDI0IH0sCisgIDE2LCAweGQ0YjAsIDAsIHsweDJjLDB4Y2EsMHgwOCwweDMyLDB4ODIsMHgwYywweDAwLDB4OTEsMHgyOCwweDIwLDB4Y2EsMHgxYiwweDMyLDB4MDIsMHgwYywweDg4IH0sCisgIDE2LCAweGQ0YzAsIDAsIHsweDgzLDB4MDksMHgyMCwweGM4LDB4MDksMHgzMiwweDAyLDB4ZTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ0ZDAsIDAsIHsweGMwLDB4MTUsMHhhMywweDE0LDB4OGIsMHgwNCwweDI2LDB4ODksMHgwOCwweGIwLDB4MDIsMHhhYywweDIyLDB4OGIsMHg4OCwweDJhIH0sCisgIDE2LCAweGQ0ZTAsIDAsIHsweDIwLDB4MDgsMHg5OCwweDgyLDB4YTYsMHgxMCwweGFiLDB4MDAsMHgyZSwweGNhLDB4MDgsMHhiMCwweDgyLDB4YWMsMHgwMCwweGI5IH0sCisgIDE2LCAweGQ0ZjAsIDAsIHsweDAwLDB4MjIsMHhjMCwweDI5LDB4YjAsMHgwYSwweDJjLDB4MDEsMHg4YiwweDAwLDB4MjIsMHhjMCwweDA5LDB4YjAsMHgyMiwweGYwIH0sCisgIDE2LCAweGQ1MDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZTMsMHgwMCwweGRiLDB4MDAsMHgzNCwweGUyIH0sCisgIDE2LCAweGQ1MTAsIDAsIHsweDBkLDB4YjAsMHgwMywweGEzLDB4MDAsMHhjYSwweDgwLDB4YmEsMHg3MCwweDBlLDB4ODgsMHgwMywweGE2LDB4MDAsMHhlYiwweDAwIH0sCisgIDE2LCAweGQ1MjAsIDAsIHsweDNlLDB4OTAsMHgwYywweGI1LDB4MDMsMHgyYywweDAwLDB4ZmIsMHgxMCwweGJhLDB4YzAsMHgwZSwweGIwLDB4MDMsMHgyYywweDAyIH0sCisgIDE2LCAweGQ1MzAsIDAsIHsweGNiLDB4MDIsMHgzMiwweGMwLDB4MDksMHhiMCwweDAyLDB4ZDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ1NDAsIDAsIHsweGUwLDB4MDEsMHhiMCwweDA4LDB4ZmYsMHgwMCwweGJiLDB4ZTAsMHgwZiwweDcwLDB4MDMsMHg2NSwweDAwLDB4ZjQsMHgwMCwweDM1IH0sCisgIDE2LCAweGQ1NTAsIDAsIHsweDQwLDB4MGYsMHg0MCwweDAzLDB4NTQsMHgwMCwweGRmLDB4MDAsMHgzZSwweDQwLDB4MGYsMHhmOCwweDAzLDB4ZWMsMHgwMCwweGY3IH0sCisgIDE2LCAweGQ1NjAsIDAsIHsweDAxLDB4M2QsMHhjMSwweDBlLDB4MzAsMHgwMywweGVjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDhlLDB4ZjAsMHgwMywweGI4IH0sCisgIDE2LCAweGQ1NzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YTAsMHg0MCwweGViLDB4MDgsMHgzZSwweDgwIH0sCisgIDE2LCAweGQ1ODAsIDAsIHsweDBkLDB4YjAsMHgwMywweGUwLDB4MDAsMHhjOCwweDAwLDB4M2EsMHg1MSwweDBmLDB4ODIsMHgwMywweDY0LDB4MjAsMHhkYiwweDAwIH0sCisgIDE2LCAweGQ1OTAsIDAsIHsweDNkLDB4ODIsMHgwYywweGJjLDB4MDMsMHgyYywweDEwLDB4ZGIsMHgwMCwweDcyLDB4YzAsMHgwZCwweGIxLDB4MDMsMHgwYywweDIwIH0sCisgIDE2LCAweGQ1YTAsIDAsIHsweGQzLDB4MDAsMHgzMiwweGMwLDB4MGYsMHhiMCwweDBiLDB4NTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ1YjAsIDAsIHsweGM4LDB4MDUsMHgwMSwweDAwLDB4ODcsMHhjMCwweDJlLDB4YTgsMHgwOCwweGYxLDB4MTIsMHhjNSwweDQwLDB4ODgsMHgwMCwweDIyIH0sCisgIDE2LCAweGQ1YzAsIDAsIHsweDQwLDB4MGIsMHg4NCwweDAyLDB4MjcsMHgwMCwweGFmLDB4MDAsMHgyZSwweGMwLDB4MDgsMHhiYywweDEyLDB4M2MsMHgwMCwweDhiIH0sCisgIDE2LCAweGQ1ZDAsIDAsIHsweDAxLDB4MjMsMHhjMCwweDI4LDB4ZjUsMHg0YSwweDNkLDB4MjgsMHhkZiwweDAwLDB4MzMsMHhjMCwweDRiLDB4ZjAsMHgwMywweDMyIH0sCisgIDE2LCAweGQ1ZTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NDgsMHg4MCwweGEzLDB4OTAsMHgyYywweDAwIH0sCisgIDE2LCAweGQ1ZjAsIDAsIHsweDA4LDB4MzAsMHgwMiwweGMxLDB4MDAsMHg5MiwweDA0LDB4MjgsMHgwMCwweDBiLDB4MTQsMHgxMiwweDQzLDB4MDAsMHhiMywweDA0IH0sCisgIDE2LCAweGQ2MDAsIDAsIHsweDJjLDB4MzAsMHgwYSwweGIwLDB4MGEsMHg4YywweDAwLDB4OTMsMHgwMCwweDYwLDB4YzAsMHgwOCwweDNjLDB4MDYsMHgwZSwweDAxIH0sCisgIDE2LCAweGQ2MTAsIDAsIHsweGIzLDB4MDAsMHgyZSwweGMwLDB4OGIsMHgzMCwweDA2LDB4MzgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ2MjAsIDAsIHsweDIwLDB4MDEsMHgxMiwweDAwLDB4ODcsMHg4MCwweDJkLDB4MjQsMHgwOCwweDc4LDB4MDIsMHhkMiwweDAwLDB4OTUsMHg4MCwweDIxIH0sCisgIDE2LCAweGQ2MzAsIDAsIHsweGEwLDB4MGIsMHg2OCwweDAyLDB4NWEsMHgyMCwweDg3LDB4ODAsMHgyZCwweDY2LDB4MWEsMHg3YywweDAyLDB4OWUsMHgwMCwweDg3IH0sCisgIDE2LCAweGQ2NDAsIDAsIHsweDgwLDB4MjEsMHhlMSwweDE4LDB4NzksMHgwMiwweDllLDB4NDAsMHhiNywweDgwLDB4YTEsMHhlMCwweDBiLDB4NzgsMHgwMiwweDQ4IH0sCisgIDE2LCAweGQ2NTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MDAsMHgwMCwweGUzLDB4YTAsMHgzYywweDQwIH0sCisgIDE2LCAweGQ2NjAsIDAsIHsweDBjLDB4MzAsMHgwMywweGM0LDB4MjIsMHhkOSwweDAwLDB4MzgsMHhkNCwweDBmLDB4MzAsMHg4MywweDY4LDB4NDAsMHhmMywweDAwIH0sCisgIDE2LCAweGQ2NzAsIDAsIHsweDNjLDB4ODAsMHgwYSwweDMyLDB4MDIsMHg4YywweDAwLDB4ZGIsMHgwMCwweGEyLDB4YzQsMHgwYywweDMwLDB4MDMsMHgwYywweDAwIH0sCisgIDE2LCAweGQ2ODAsIDAsIHsweGYzLDB4MDAsMHgzYywweGMwLDB4MGYsMHhiMSwweDAzLDB4MTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ2OTAsIDAsIHsweDQwLDB4MGQsMHhiMCwweDAwLDB4ZmYsMHgxMCwweDNmLDB4NDAsMHgwZSwweGYwLDB4MDMsMHhmYywweDAwLDB4ZWQsMHgwMCwweDNmIH0sCisgIDE2LCAweGQ2YTAsIDAsIHsweGMwLDB4MGYsMHgzMCwweDEzLDB4YmMsMHg0MCwweDdmLDB4MTAsMHgzZiwweGMxLDB4MmQsMHhmMCwweDAzLDB4N2MsMHgwMCwweGZiIH0sCisgIDE2LCAweGQ2YjAsIDAsIHsweDQwLDB4M2YsMHhjMiwweDBlLDB4ZjQsMHg4MywweDdjLDB4MDAsMHhkZiwweDAwLDB4M2YsMHhjMiwweDBmLDB4ZjAsMHgwMywweDkwIH0sCisgIDE2LCAweGQ2YzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHgwMCwweGRiLDB4YTAsMHgzMiwweGMwIH0sCisgIDE2LCAweGQ2ZDAsIDAsIHsweDBkLDB4YjcsMHgwMywweGUwLDB4MDAsMHhjYSwweDA0LDB4M2UsMHg4MCwweDBmLDB4YjgsMHgwMywweDJjLDB4MTAsMHhmYiwweDAwIH0sCisgIDE2LCAweGQ2ZTAsIDAsIHsweDMzLDB4MDAsMHg4ZCwweGIwLDB4MDMsMHgyYywweDgwLDB4ZTksMHg0MCwweDNlLDB4ZDIsMHgwZiwweGI0LDB4MDMsMHgyZCwweDgwIH0sCisgIDE2LCAweGQ2ZjAsIDAsIHsweGViLDB4MjAsMHhiMiwweGMwLDB4MGYsMHhiMiwweDAzLDB4ZWEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ3MDAsIDAsIHsweDQ4LDB4MTEsMHg5MCwweDAwLDB4YjcsMHgxMCwweDExLDB4YzAsMHgwOCwweDcwLDB4ODIsMHhkOCwweDBhLDB4ODcsMHgwMSwweDJkIH0sCisgIDE2LCAweGQ3MTAsIDAsIHsweDgwLDB4ODksMHg3MCwweDAzLDB4ZDgsMHgwOCwweGI3LDB4MGEsMHgyMSwweDQwLDB4MmMsMHg3MCwweDAyLDB4MGQsMHhjMCwweDg1IH0sCisgIDE2LCAweGQ3MjAsIDAsIHsweDAxLDB4NzksMHhjOCwweDBiLDB4MzIsMHgwMiwweDBkLDB4MjAsMHg4ZiwweDI4LDB4MjEsMHhjMCwweDBiLDB4NzIsMHg4MiwweGQyIH0sCisgIDE2LCAweGQ3MzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDQwLDB4OTYsMHgxMCwweDk3LDB4OTAsMHgyMywweGUwIH0sCisgIDE2LCAweGQ3NDAsIDAsIHsweDA5LDB4N2EsMHgwMiwweGQ2LDB4MDAsMHg5NywweDgwLDB4MmQsMHhmMCwweDBiLDB4NzgsMHg4MiwweDFlLDB4MDAsMHhiMywweGIwIH0sCisgIDE2LCAweGQ3NTAsIDAsIHsweDIxLDB4YTAsMHgwOCwweDc4LDB4MDIsMHgxZSwweDAwLDB4YTUsMHg4MCwweDJkLDB4ZTAsMHgwYiwweDdhLDB4MDIsMHgxZSwweDgwIH0sCisgIDE2LCAweGQ3NjAsIDAsIHsweGE3LDB4YjAsMHgyMSwweGU4LDB4MGIsMHg3OSwweDAyLDB4ZjAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ3NzAsIDAsIHsweDQ4LDB4MTQsMHhjMCwweDAwLDB4YjMsMHgwMCwweDIwLDB4ZTIsMHgwOCwweDMwLDB4MDIsMHhjNiwweDQwLDB4OTMsMHg3MCwweDJjIH0sCisgIDE2LCAweGQ3ODAsIDAsIHsweGMwLDB4MDksMHgzYywweDAyLDB4OGUsMHgwMCwweGIzLDB4MDAsMHgyMCwweGQ4LDB4MDgsMHgxOCwweDAyLDB4MGMsMHgwMCwweDgxIH0sCisgIDE2LCAweGQ3OTAsIDAsIHsweDkwLDB4MmUsMHhjMCwweDBiLDB4MzAsMHgyYSwweDJjLDB4MTAsMHg4MywweDAwLDB4YTAsMHhjMCwweDBiLDB4MzAsMHgwMiwweGQyIH0sCisgIDE2LCAweGQ3YTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDExLDB4YjksMHgwMCwweGRhLDB4MDIsMHgzMywweGI4IH0sCisgIDE2LCAweGQ3YjAsIDAsIHsweDBkLDB4YTAsMHgwMywweGY4LDB4MDAsMHhkZSwweGMwLDB4M2YsMHhiMCwweDRmLDB4ZWMsMHgwNiwweDM4LDB4NDAsMHhmYSwweDAwIH0sCisgIDE2LCAweGQ3YzAsIDAsIHsweGIzLDB4OTAsMHgwYywweDZjLDB4MGIsMHgyOCwweDA4LDB4ZWEsMHgwMSwweDdlLDB4ODAsMHgwZiwweGEwLDB4MDMsMHgyOCwweDAwIH0sCisgIDE2LCAweGQ3ZDAsIDAsIHsweGVhLDB4MDAsMHgzMiwweDgwLDB4MGYsMHhhMCwweDAzLDB4ZmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ3ZTAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHg0MCwweDNhLDB4MDAsMHgwZiwweDg0LDB4MDMsMHhlMSwweDAwLDB4ZTgsMHgwMiwweDNlIH0sCisgIDE2LCAweGQ3ZjAsIDAsIHsweDAwLDB4MGYsMHg4NCwweDAzLDB4ZTEsMHg0MCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MSwweDAzLDB4ZTAsMHgwMCwweGY4IH0sCisgIDE2LCAweGQ4MDAsIDAsIHsweDAwLDB4M2EsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH0sCisgIDE2LCAweGQ4MTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgyMCwweGY5LDB4YzAsMHgzZSwweDcwIH0sCisgIDE2LCAweGQ4MjAsIDAsIHsweDBlLDB4OTAsMHgwMiwweGU0LDB4ODAsMHhjOSwweDAwLDB4MzIsMHg0MiwweDBjLDB4OTgsMHg4MywweGE0LDB4ODQsMHhmOSwweDAwIH0sCisgIDE2LCAweGQ4MzAsIDAsIHsweGIyLDB4NjAsMHgwYywweDkwLDB4ODMsMHgyNCwweDAwLDB4YzksMHgwMCwweDNlLDB4NDAsMHgwYywweDFhLDB4MDIsMHgyNCwweDAwIH0sCisgIDE2LCAweGQ4NDAsIDAsIHsweGMxLDB4MDAsMHhiMiwweDQwLDB4MGYsMHg5MCwweDAxLDB4YzIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ4NTAsIDAsIHsweDgwLDB4MDQsMHg2NSwweDAwLDB4YjksMHg4MSwweDJjLDB4NjAsMHgwZCwweDk0LDB4YzIsMHhjNywweDA4LDB4ODksMHgwMCwweDIyIH0sCisgIDE2LCAweGQ4NjAsIDAsIHsweDQwLDB4MDgsMHg5NSwweGM3LDB4YTQsMHgwMCwweGI5LDB4MDAsMHgyOCwweDcwLDB4YTgsMHg5NCwweDBhLDB4MjQsMHgwMCwweDg5IH0sCisgIDE2LCAweGQ4NzAsIDAsIHsweDA0LDB4MmUsMHg0MCwweDI4LDB4OTAsMHgyYSwweDI2LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg0MCwweDBiLDB4OTAsMHgwMiwweGUwIH0sCisgIDE2LCAweGQ4ODAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweGI5LDB4NDAsMHgyZSwweDQwIH0sCisgIDE2LCAweGQ4OTAsIDAsIHsweDBhLDB4OTAsMHgwMiwweGU1LDB4MDAsMHg4MSwweDAwLDB4YTAsMHg0MCwweDA5LDB4OTAsMHg0MiwweGVjLDB4MDAsMHhiMSwweDAwIH0sCisgIDE2LCAweGQ4YTAsIDAsIHsweDIyLDB4NTgsMHgwOCwweDkwLDB4YTIsMHgwNCwweDAyLDB4ODksMHgwMCwweDJlLDB4NDAsMHgwOCwweDkwLDB4MDIsMHhhNCwweGEwIH0sCisgIDE2LCAweGQ4YjAsIDAsIHsweDg5LDB4MDAsMHgyMiwweDQwLDB4MGIsMHg5MCwweDAyLDB4YzYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ4YzAsIDAsIHsweDA4LDB4MDQsMHgwNCwweDAwLDB4YjEsMHgyMCwweDJlLDB4YzAsMHg4OSwweDEyLDB4MDIsMHhjNCwweDgwLDB4ODEsMHgyMCwweDIwIH0sCisgIDE2LCAweGQ4ZDAsIDAsIHsweDQwLDB4NjEsMHgxMCwweDQyLDB4YzUsMHgwMCwweGIxLDB4MjAsMHgyOCwweDQ4LDB4MTgsMHg5MCwweDQyLDB4MDQsMHg4MCwweDgxIH0sCisgIDE2LCAweGQ4ZTAsIDAsIHsweDI4LDB4MmMsMHg0OCwweDA4LDB4MTIsMHg4MiwweDg0LDB4YTAsMHg4MSwweDIwLDB4MjAsMHg0OCwweDBiLDB4MTIsMHg4MiwweGMyIH0sCisgIDE2LCAweGQ4ZjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjgsMHgwMCwweGY4LDB4MDAsMHgyZSwweDAwIH0sCisgIDE2LCAweGQ5MDAsIDAsIHsweDBlLDB4ODAsMHgwMywweGUwLDB4MDgsMHhjOCwweDUwLDB4MzIsMHgxNCwweDBkLDB4ODAsMHgxNywweGU4LDB4MDQsMHhmOCwweDUwIH0sCisgIDE2LCAweGQ5MTAsIDAsIHsweDMyLDB4MTQsMHg0YywweDA1LDB4MGIsMHgyMSwweDQwLDB4YzgsMHgyMCwweDNlLDB4MDAsMHgwYywweDg3LDB4MDMsMHhhMSwweGMyIH0sCisgIDE2LCAweGQ5MjAsIDAsIHsweGM4LDB4MDAsMHgzMiwweDE0LDB4OGYsMHg4MiwweDAzLDB4ZWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ5MzAsIDAsIHsweDk4LDB4MWQsMHhmNCwweDAwLDB4ZjEsMHgxMCwweDNkLDB4NDAsMHgwZiwweDkxLDB4MDIsMHhkNCwweDQyLDB4ZmQsMHgxMCwweDNmIH0sCisgIDE2LCAweGQ5NDAsIDAsIHsweDUxLDB4MGUsMHg1NCwweDEzLDB4YjUsMHgwMCwweGY5LDB4MTAsMHgzNSwweDQ0LDB4MmYsMHhkMCwweDAzLDB4ZTQsMHg1MCwweGZkIH0sCisgIDE2LCAweGQ5NTAsIDAsIHsweDI4LDB4M2UsMHg0ZSwweDBmLDB4OTAsMHgwMywweDY0LDB4MDAsMHhmOSwweDM4LDB4M2UsMHg0NCwweDBmLDB4OTIsMHg4MywweGU2IH0sCisgIDE2LCAweGQ5NjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4ZjQsMHgwMCwweGZkLDB4MDAsMHgzZCwweDQwIH0sCisgIDE2LCAweGQ5NzAsIDAsIHsweDJjLDB4ZDAsMHgwMywweGI2LDB4MDAsMHhmOSwweDgyLDB4M2UsMHg0MCwweDBjLDB4ZDAsMHgwMywweGY0LDB4MDAsMHhmOSwweDgwIH0sCisgIDE2LCAweGQ5ODAsIDAsIHsweDMzLDB4NzAsMHgwYywweDUwLDB4MDMsMHgzNCwweDAwLDB4YzksMHhjMCwweDNlLDB4NDAsMHgwYywweGRhLDB4MDMsMHgxNiwweDgwIH0sCisgIDE2LCAweGQ5OTAsIDAsIHsweGM5LDB4NDAsMHgzZSwweDYyLDB4MmMsMHg5OCwweDgzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ5YTAsIDAsIHsweDM4LDB4MTAsMHhlMCwweDAwLDB4YjgsMHgwMCwweDJlLDB4MDAsMHgwOCwweDgwLDB4MDIsMHgyOCwweDAwLDB4YjgsMHg1MCwweDI2IH0sCisgIDE2LCAweGQ5YjAsIDAsIHsweDAwLDB4MDgsMHhhMCwweDAyLDB4ZTgsMHgwMCwweGI4LDB4MDAsMHgyYSwweDM0LDB4MmEsMHhhYSwweDBhLDB4MjAsMHgwMCwweDg4IH0sCisgIDE2LCAweGQ5YzAsIDAsIHsweGMwLDB4MmUsMHgyYSwweDA4LDB4ODAsMHgyMiwweDIxLDB4MDAsMHhhOCwweDgwLDB4MmUsMHgwMCwweDA4LDB4ODAsMHgwMiwweDBlIH0sCisgIDE2LCAweGQ5ZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHgwMCwweGIxLDB4MDAsMHgyZSwweDQwIH0sCisgIDE2LCAweGQ5ZTAsIDAsIHsweDQ4LDB4MTAsMHgwNiwweDhkLDB4MDAsMHhiMSwweDAwLDB4MmMsMHg0MCwweDI4LDB4MTAsMHgwMiwweGM0LDB4MDAsMHhiMSwweDQwIH0sCisgIDE2LCAweGQ5ZjAsIDAsIHsweDJjLDB4NDgsMHgwOCwweDEwLDB4ODIsMHg0NCwweDAwLDB4ODEsMHg2MCwweDJjLDB4NDAsMHgyOCwweDE0LDB4MGEsMHgwNCwweDQwIH0sCisgIDE2LCAweGRhMDAsIDAsIHsweDgxLDB4MjAsMHgyYywweDQwLDB4MDgsMHgxMCwweDAyLDB4MDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRhMTAsIDAsIHsweDE4LDB4MDUsMHhhNCwweDQwLDB4YjksMHgwMCwweDJlLDB4NDAsMHgwOCwweGIwLDB4MDIsMHgyNCwweDAwLDB4YjksMHgyOCwweDJlIH0sCisgIDE2LCAweGRhMjAsIDAsIHsweDUwLDB4MDgsMHg5MCwweDIyLDB4ZTQsMHgwMCwweGI5LDB4MDAsMHgyZSwweDYwLDB4MGIsMHgxMiwweDQyLDB4NjQsMHgwMCwweDg5IH0sCisgIDE2LCAweGRhMzAsIDAsIHsweDAwLDB4MmMsMHg0MCwweDA5LDB4OTAsMHgwMiwweDI0LDB4MDAsMHhhOSwweDAwLDB4MmMsMHg0MCwweDA4LDB4MTAsMHgwMiwweDQ2IH0sCisgIDE2LCAweGRhNDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDA1LDB4ZTYsMHgwMCwweGY5LDB4MDAsMHgzYywweDQyIH0sCisgIDE2LCAweGRhNTAsIDAsIHsweDBjLDB4OTAsMHgwMywweGE3LDB4NDAsMHhmOSwweDQwLDB4M2UsMHg3MCwweDBjLDB4OTgsMHgwMiwweGU1LDB4NDAsMHhmOSwweDAwIH0sCisgIDE2LCAweGRhNjAsIDAsIHsweDNlLDB4NDAsMHgwYywweDk4LDB4MDMsMHg2NCwweDA2LDB4YzksMHgwMSwweDJlLDB4NDAsMHgwYywweDkwLDB4MDMsMHgyNCwweDA0IH0sCisgIDE2LCAweGRhNzAsIDAsIHsweGM5LDB4MDAsMHgzZSwweDQwLDB4MGMsMHg5MCwweDBiLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRhODAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4ODMsMHhlNiwweDEwLDB4ZjksMHgwMCwweDM2IH0sCisgIDE2LCAweGRhOTAsIDAsIHsweDY4LDB4MGYsMHg5YywweDAzLDB4ZTYsMHgwMCwweGY5LDB4MDAsMHgzYSwweDQwLDB4MGUsMHg5OCwweDkzLDB4YTQsMHgwMCwweGY5IH0sCisgIDE2LCAweGRhYTAsIDAsIHsweDAwLDB4M2UsMHg0MCwweDBlLDB4OTAsMHg4MywweGM0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweDhhIH0sCisgIDE2LCAweGRhYjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAwLDB4YTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDA0IH0sCisgIDE2LCAweGRhYzAsIDAsIHsweDBjLDB4ODAsMHgwMywweDIxLDB4MDIsMHhjOCwweDQwLDB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweGUxLDB4MDAsMHhmMCwweDAwIH0sCisgIDE2LCAweGRhZDAsIDAsIHsweDNlLDB4MDIsMHgwYywweDgwLDB4MDMsMHgyMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwYywweDAwLDB4MDMsMHgyMCwweDAwIH0sCisgIDE2LCAweGRhZTAsIDAsIHsweGM4LDB4MDAsMHgzMiwweDAwLDB4MGYsMHg4MCwweDAzLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRhZjAsIDAsIHsweDI4LDB4MTUsMHgzYSwweDAwLDB4YmUsMHgwMiwweDJmLDB4YjAsMHgwOCwweDY4LDB4MTIsMHgzOCwweDAwLDB4OGEsMHgwNCwweDJhIH0sCisgIDE2LCAweGRiMDAsIDAsIHsweDgwLDB4MGIsMHhlMCwweDQyLDB4ZmIsMHgyMCwweGJhLDB4MDAsMHgyZiwweDkxLDB4MDgsMHhlMCwweDAyLDB4MjgsMHgwMCwweGJhIH0sCisgIDE2LCAweGRiMTAsIDAsIHsweDAwLDB4MjYsMHg4MCwweDA4LDB4ZWUsMHgwYSwweDM4LDB4MDAsMHg4YSwweDAwLDB4MjIsMHg4MCwweDBiLDB4YTAsMHgwMiwweDhhIH0sCisgIDE2LCAweGRiMjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NDIsMHgwMCwweGIzLDB4MDAsMHgyYywweGMyIH0sCisgIDE2LCAweGRiMzAsIDAsIHsweDI4LDB4MzgsMHgwYSwweDQ4LDB4MDAsMHg4MywweDA0LDB4MjIsMHhjMCwweDBiLDB4MTAsMHgwMiwweGNkLDB4ODAsMHhiMywweDAwIH0sCisgIDE2LCAweGRiNDAsIDAsIHsweDJlLDB4YzAsMHgwOCwweDFjLDB4MDIsMHgyNCwweDAwLDB4YjMsMHgwMCwweDJjLDB4YzAsMHgwOCwweDM0LDB4MTIsMHgwZSwweDQwIH0sCisgIDE2LCAweGRiNTAsIDAsIHsweDgzLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgzMCwweDEyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRiNjAsIDAsIHsweGEwLDB4MDEsMHgxMSwweDAwLDB4YjcsMHgwMCwweDJmLDB4YzAsMHgwOCwweDcwLDB4YTIsMHg0ZSwweDAwLDB4OGYsMHhiMCwweDIxIH0sCisgIDE2LCAweGRiNzAsIDAsIHsweGNjLDB4MGIsMHg2MCwweDEyLDB4ZGMsMHgxMCwweGI3LDB4MzAsMHgyZCwweGMwLDB4MDgsMHhkMCwweDgyLDB4MTQsMHg4MCwweGI3IH0sCisgIDE2LCAweGRiODAsIDAsIHsweDEyLDB4MjUsMHhjOCwweDI4LDB4NjAsMHgwMiwweDE0LDB4MDAsMHg4NywweGIyLDB4MjEsMHhjYywweDBiLDB4MzEsMHgwMiwweGE4IH0sCisgIDE2LCAweGRiOTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MTIsMHgwMCwweGY3LDB4ODAsMHgzZCwweGUwIH0sCisgIDE2LCAweGRiYTAsIDAsIHsweDBjLDB4MzgsMHgwMywweDU2LDB4MDAsMHhjNywweDkwLDB4YjEsMHhlNCwweDBmLDB4NzgsMHgwMywweGRlLDB4MDAsMHhmNywweDkwIH0sCisgIDE2LCAweGRiYjAsIDAsIHsweDFmLDB4NjAsMHgyYywweDQ4LDB4MGIsMHgxNiwweGEwLDB4ZjcsMHg4MCwweDNjLDB4ZjQsMHgwYywweDM4LDB4MDMsMHgxZSwweDAwIH0sCisgIDE2LCAweGRiYzAsIDAsIHsweGNmLDB4YTAsMHhiMSwweGU4LDB4MGYsMHg3YiwweDAzLDB4MmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRiZDAsIDAsIHsweDA4LDB4MGQsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4YzAsMHgwYiwweGIwLDB4MDMsMHhhYywweDAwLDB4ZjMsMHgyMSwweDNlIH0sCisgIDE2LCAweGRiZTAsIDAsIHsweGM4LDB4MDcsMHhiMCwweDAyLDB4ZTQsMHgwMCwweGZiLDB4MjAsMHgzZiwweDQwLDB4MGYsMHg4MCwweDAzLDB4ZTQsMHg4MCwweGZiIH0sCisgIDE2LCAweGRiZjAsIDAsIHsweDAwLDB4MzYsMHhkMCwweDBmLDB4YTAsMHgwMywweGUwLDB4MDgsMHhmYiwweDQyLDB4M2UsMHhkOCwweDBmLDB4YjAsMHgwMywweGMyIH0sCisgIDE2LCAweGRjMDAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZjAsMHg4MCwweGNmLDB4ODAsMHgzMSwweGUxIH0sCisgIDE2LCAweGRjMTAsIDAsIHsweDBjLDB4ZjgsMHgwMywweGRhLDB4MTAsMHhlZiwweDgwLDB4M2YsMHhlNCwweDBmLDB4ZDgsMHgwMywweGZlLDB4MTAsMHhmZiwweDgyIH0sCisgIDE2LCAweGRjMjAsIDAsIHsweDNmLDB4ZTAsMHg0YywweGQ4LDB4MWIsMHgxNiwweDIwLDB4Y2YsMHg4MCwweDNmLDB4ZTAsMHg0YywweGQ4LDB4MzAsMHhlZSwweDQwIH0sCisgIDE2LCAweGRjMzAsIDAsIHsweGZmLDB4YzAsMHhiMywweGY0LDB4MGYsMHhmOCwweDAzLDB4YzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRjNDAsIDAsIHsweGE4LDB4MDEsMHg5OCwweDIwLDB4ODMsMHg0MCwweDIxLDB4YzAsMHgwOCwweDcxLDB4MDIsMHhkYywweDg0LDB4ODcsMHgyMCwweDJkIH0sCisgIDE2LCAweGRjNTAsIDAsIHsweGMwLDB4MGIsMHg2MCwweDAyLDB4ZDksMHg2MCwweGY3LDB4MDAsMHgyZCwweGMwLDB4MDgsMHhmMCwweDgyLDB4MTQsMHgwNCwweDg3IH0sCisgIDE2LCAweGRjNjAsIDAsIHsweDAwLDB4MmQsMHhjMCwweDA4LDB4ZjAsMHgwMywweDFlLDB4MDAsMHhiNywweDIwLDB4MjEsMHhjMCwweDhiLDB4NzAsMHgwMiwweGVhIH0sCisgIDE2LCAweGRjNzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjAsMHgwMCwweDg3LDB4MDAsMHgyMSwweDgwIH0sCisgIDE2LCAweGRjODAsIDAsIHsweDA4LDB4NzAsMHgwMiwweGY1LDB4MDQsMHgyNywweDAwLDB4MmQsMHhjMCwweDhiLDB4NzAsMHgwMiwweGRjLDB4MDAsMHhiNywweDAwIH0sCisgIDE2LCAweGRjOTAsIDAsIHsweDJjLDB4NTAsMHgwOCwweDQwLDB4MDIsMHgxNCwweDAwLDB4ODcsMHgwMCwweDJkLDB4YzAsMHgwOCwweDUwLDB4MDIsMHg1YywweDA0IH0sCisgIDE2LCAweGRjYTAsIDAsIHsweGI3LDB4MDAsMHhhMSwweGMwLDB4OGIsMHg3MCwweDAyLDB4YzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRjYjAsIDAsIHsweDIwLDB4MTQsMHhjOCwweDAwLDB4ODAsMHgwMCwweDAwLDB4ODAsMHgwOCwweDMwLDB4MDIsMHhjZSwweDAwLDB4ODMsMHhjMCwweDJjIH0sCisgIDE2LCAweGRjYzAsIDAsIHsweGQwLDB4NGIsMHgzMCwweDAyLDB4Y2UsMHgwMCwweGFiLDB4MDIsMHgyYywweDQwLDB4NDgsMHhiYywweDAyLDB4MDQsMHgwMCwweDgzIH0sCisgIDE2LCAweGRjZDAsIDAsIHsweDAwLDB4MmMsMHhjMCwweDA4LDB4MTAsMHgwMiwweDAwLDB4MDgsMHhiMywweDAwLDB4MjAsMHhjMCwweDA5LDB4MzAsMHgwMiwweGM4IH0sCisgIDE2LCAweGRjZTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4ODMsMHg0MCwweGM4LDB4MDAsMHgzMCwweGMwIH0sCisgIDE2LCAweGRjZjAsIDAsIHsweDJjLDB4YjAsMHgwMywweGVjLDB4MDAsMHhlZiwweDg4LDB4M2YsMHhlNiwweDA3LDB4YjEsMHg4MywweGUxLDB4MDAsMHhiZiwweDAwIH0sCisgIDE2LCAweGRkMDAsIDAsIHsweDNlLDB4ZTAsMHgwYywweGI4LDB4MDMsMHgzNCwweDAwLDB4Y2YsMHgwMCwweDNmLDB4YzAsMHgyYywweGIwLDB4MDMsMHg2OCwweDEwIH0sCisgIDE2LCAweGRkMTAsIDAsIHsweGZmLDB4MDAsMHgzMywweGMwLDB4MGYsMHhmMCwweDAzLDB4ZWEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRkMjAsIDAsIHsweDgwLDB4MDAsMHhlNCwweDAwLDB4ZjEsMHg0MCwweDNlLDB4YzAsMHgwZiwweGI0LDB4MDMsMHhlZCwweDQwLDB4ZmIsMHgwOCwweDNlIH0sCisgIDE2LCAweGRkMzAsIDAsIHsweGMwLDB4MGYsMHhhMCwweDAzLDB4ZTUsMHgyMCwweGZiLDB4MDAsMHgzZSwweGUwLDB4MGQsMHhiMCwweDgzLDB4ZTQsMHgwMCwweGYzIH0sCisgIDE2LCAweGRkNDAsIDAsIHsweDAwLDB4M2UsMHhjMCwweDBmLDB4ODAsMHgwMywweGM0LDB4MDAsMHhmYiwweDAwLDB4M2UsMHhjMCwweDBmLDB4MzAsMHgwMywweGUwIH0sCisgIDE2LCAweGRkNTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZjAsMHgwMCwweGNhLDB4MDAsMHgzMywweGUwIH0sCisgIDE2LCAweGRkNjAsIDAsIHsweDRlLDB4ZjAsMHgwMywweDM0LDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDhmLDB4ZTgsMHgwMywweGYwLDB4MDAsMHhmZiwweDAwIH0sCisgIDE2LCAweGRkNzAsIDAsIHsweGIxLDB4NDAsMHgwYywweGUwLDB4MDMsMHgzNCwweDAwLDB4ZWYsMHgwMCwweGIzLDB4YzAsMHgwYywweGYwLDB4MDMsMHgzOCwweDAwIH0sCisgIDE2LCAweGRkODAsIDAsIHsweGNmLDB4MDAsMHgzZCwweGMwLDB4MGEsMHhmMCwweDAzLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRkOTAsIDAsIHsweDgxLDB4MDQsMHg2MiwweDIyLDB4ODgsMHg5MCwweDIyLDB4ZTAsMHgwOCwweDNjLDB4MDIsMHgyZSwweDA4LDB4YmIsMHgwMSwweDJlIH0sCisgIDE2LCAweGRkYTAsIDAsIHsweGMwLDB4MGIsMHhhMCwweDAyLDB4NjYsMHgwMCwweGJiLDB4MDAsMHgyMiwweGEwLDB4MDgsMHhhOSwweDAyLDB4MjQsMHgwMCwweGJiIH0sCisgIDE2LCAweGRkYjAsIDAsIHsweDAwLDB4MjIsMHhjMCwweDI4LDB4MmMsMHgwMiwweGEyLDB4MDAsMHhkYiwweDAwLDB4MmUsMHhjMCwweDBhLDB4YjAsMHgwMiwweGEwIH0sCisgIDE2LCAweGRkYzAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MjIsMHgwMCwweDk4LDB4MDAsMHgyMiwweGM4IH0sCisgIDE2LCAweGRkZDAsIDAsIHsweDBhLDB4OTgsMHgwMiwweDI3LDB4MDQsMHhiYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4YjEsMHgwMiwweGUyLDB4MDAsMHhiYiwweDAwIH0sCisgIDE2LCAweGRkZTAsIDAsIHsweDIyLDB4ZTIsMHgwOCwweGIwLDB4MDIsMHhhNCwweDAwLDB4YWIsMHgwMCwweDIwLDB4YzAsMHgwYSwweDg4LDB4ODIsMHgyMywweDAwIH0sCisgIDE2LCAweGRkZjAsIDAsIHsweDhiLDB4MDAsMHgyZSwweGMwLDB4MDgsMHhiMCwweDAyLDB4YTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRlMDAsIDAsIHsweDA4LDB4MTQsMHgwNCwweDAwLDB4OTEsMHg0MCwweDIyLDB4YzAsMHgwOCwweDEwLDB4MDIsMHgwYywweDAwLDB4YjMsMHgwMCwweDJjIH0sCisgIDE2LCAweGRlMTAsIDAsIHsweGMwLDB4NGIsMHgyOCwweDIyLDB4NDAsMHgwNCwweGIzLDB4MDAsMHgyMCwweGMwLDB4MjgsMHgzMCwweDBhLDB4MDQsMHgwNCwweGIzIH0sCisgIDE2LCAweGRlMjAsIDAsIHsweDAwLDB4NjAsMHhjMCwweDA4LDB4MDAsMHgwMiwweDg0LDB4MjAsMHg5MywweDAwLDB4MmMsMHhjMCwweDBhLDB4MzAsMHgwMiwweDgyIH0sCisgIDE2LCAweGRlMzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4NjAsMHgwMCwweGRhLDB4NDAsMHhiMiwweDgwIH0sCisgIDE2LCAweGRlNDAsIDAsIHsweDBlLDB4OTAsMHgwMywweDI0LDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDhmLDB4YTAsMHgwMywweGUwLDB4MDksMHhmZiwweDAwIH0sCisgIDE2LCAweGRlNTAsIDAsIHsweDMyLDB4NDAsMHgwOCwweGEwLDB4MGIsMHgzNCwweDAwLDB4ZWIsMHgwMCwweDMxLDB4YzAsMHgwYywweDgwLDB4MDMsMHgyOCwweDgwIH0sCisgIDE2LCAweGRlNjAsIDAsIHsweGM3LDB4MDAsMHgzZiwweGMwLDB4MGMsMHhmMCwweDAzLDB4MDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRlNzAsIDAsIHsweGEwLDB4MTUsMHhkMCwweDAwLDB4ZWMsMHgyMCwweDNmLDB4MDAsMHgwZiwweGMwLDB4MGIsMHhmYywweDEwLDB4ZmYsMHgwMSwweDNmIH0sCisgIDE2LCAweGRlODAsIDAsIHsweGMwLDB4MGYsMHhlMCwweDAzLDB4ZjQsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZjQsMHgwMCwweGZmIH0sCisgIDE2LCAweGRlOTAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDRmLDB4YzAsMHgwMSwweGYwLDB4MDgsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGU4IH0sCisgIDE2LCAweGRlYTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHgwMCwweGNjLDB4OTAsMHgzNywweDIwIH0sCisgIDE2LCAweGRlYjAsIDAsIHsweDBlLDB4ZjAsMHgxMywweGJkLDB4MDQsMHhkNCwweGMxLDB4MzMsMHgyYywweDRjLDB4ZDksMHgyMywweDMyLDB4NjAsMHhmZiwweDIwIH0sCisgIDE2LCAweGRlYzAsIDAsIHsweDNkLDB4ZTAsMHg0ZiwweGMxLDB4MDMsMHhiNiwweDQwLDB4Y2QsMHgwMCwweDM3LDB4ZTAsMHgwYywweGUyLDB4OGIsMHgxMCwweGMwIH0sCisgIDE2LCAweGRlZDAsIDAsIHsweGNkLDB4MDAsMHgzMywweGM2LDB4MGYsMHhkOCwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRlZTAsIDAsIHsweDgwLDB4MTAsMHhlZSwweDA4LDB4OGEsMHgyMCwweDIyLDB4MDAsMHgwOCwweGI3LDB4MDIsMHgyZCwweDAwLDB4OGEsMHgwMCwweGI2IH0sCisgIDE2LCAweGRlZjAsIDAsIHsweDNjLDB4MDgsMHg5OSwweDAyLDB4MjcsMHg4NCwweGJmLDB4NjgsMHgyZSwweDgyLDB4MGIsMHgwMSwweDAyLDB4MjQsMHg0MCwweGQ5IH0sCisgIDE2LCAweGRmMDAsIDAsIHsweDQyLDB4MjAsMHhjMCwweDhhLDB4YWMsMHgwMiwweDJkLDB4YzIsMHg4MiwweDQ4LDB4YTIsMHhkMCwweDBiLDB4ODIsMHgwMiwweDIwIH0sCisgIDE2LCAweGRmMTAsIDAsIHsweDA2LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwMCwweDg4LDB4MDQsMHgyNiwweDgwIH0sCisgIDE2LCAweGRmMjAsIDAsIHsweDJhLDB4MzAsMHhjMiwweGE1LDB4ODAsMHhhOSwweDIxLDB4MjgsMHgwMCwweDhhLDB4MDAsMHgwMiwweDAwLDB4MDAsMHhhMywweDEwIH0sCisgIDE2LCAweGRmMzAsIDAsIHsweDJjLDB4YzgsMHgwYiwweDAwLDB4MDIsMHhjNCwweDkwLDB4ODMsMHg0MiwweDI0LDB4YzEsMHgwOCwweDAwLDB4MDIsMHg0MCwweDg4IH0sCisgIDE2LCAweGRmNDAsIDAsIHsweGEzLDB4NjAsMHhhOCwweGMwLDB4MGIsMHgwMCwweGMyLDB4MjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRmNTAsIDAsIHsweGMwLDB4MTUsMHhhYywweDA2LDB4OGEsMHgwMCwweDIyLDB4ZTAsMHg0OCwweGIwLDB4MDIsMHgyZSwweDAyLDB4YWIsMHg4MCwweDJlIH0sCisgIDE2LCAweGRmNjAsIDAsIHsweDIwLDB4NGEsMHg4YywweDAyLDB4MjYsMHgyMCwweGJiLDB4MDAsMHg2ZSwweDgwLDB4MGIsMHgzMCwweGMyLDB4NDYsMHgwNCwweDliIH0sCisgIDE2LCAweGRmNzAsIDAsIHsweDBhLDB4YTIsMHhjMCwweDBhLDB4ODAsMHgxMiwweDZjLDB4NDAsMHhhOCwweDAwLDB4MmEsMHhjMCwweDBiLDB4OGMsMHgwMiwweDMwIH0sCisgIDE2LCAweGRmODAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwMCwweGMxLDB4MDksMHgzNiwweDYxIH0sCisgIDE2LCAweGRmOTAsIDAsIHsweDBlLDB4MzIsMHgwMywweGFiLDB4MjAsMHhmOCwweDg0LDB4M2EsMHg3OCwweDJlLDB4OTgsMHgwMywweDI2LDB4MDAsMHhlYiwweDAwIH0sCisgIDE2LCAweGRmYTAsIDAsIHsweDNlLDB4NDAsMHg0ZiwweDkwLDB4MDMsMHhlMiwweDAwLDB4YzksMHg0MCwweDM2LDB4ZTAsMHgwYywweGI0LDB4MDMsMHg2ZSwweDAwIH0sCisgIDE2LCAweGRmYjAsIDAsIHsweGViLDB4MDAsMHgzYSwweGMwLDB4MGYsMHg4OCwweDAzLDB4MTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRmYzAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4ZmQsMHgwMCwweDNmLDB4NDAsMHgwZiwweGZhLDB4MTMsMHhmOCwweDEwLDB4ZGMsMHgwNCwweDI3IH0sCisgIDE2LCAweGRmZDAsIDAsIHsweDQwLDB4MGQsMHg1MCwweDQzLDB4ZjQsMHgwMCwweGZmLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhkOSwweDAzLDB4YjAsMHgwMCwweGY5IH0sCisgIDE2LCAweGRmZTAsIDAsIHsweDAxLDB4M2YsMHhmMCwweDBmLDB4ZjAsMHgyMywweGIyLDB4MDAsMHhkNCwweGEwLDB4MzcsMHhjMCwweDBmLDB4YzAsMHgwYiwweGY4IH0sCisgIDE2LCAweGRmZjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgyMCwweGViLDB4MTAsMHhmMiwweDAwIH0sCisgIDE2LCAweGUwMDAsIDAsIHsweDBlLDB4YjQsMHgwMywweDIxLDB4ODAsMHhjOSwweDQwLDB4M2EsMHg0OCwweDBmLDB4OTAsMHgxMywweGUxLDB4MjAsMHhmYiwweDAwIH0sCisgIDE2LCAweGUwMTAsIDAsIHsweDNlLDB4YzAsMHgwYywweDg0LDB4MDMsMHgyNCwweDAwLDB4ZmIsMHgwMSwweDM2LDB4ZTAsMHgwYywweDc0LDB4MGIsMHg5YywweDAwIH0sCisgIDE2LCAweGUwMjAsIDAsIHsweGNmLDB4MDAsMHgzMiwweGUwLDB4MGYsMHg4NCwweDAzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUwMzAsIDAsIHsweGM4LDB4MDUsMHgxZSwweDAwLDB4OGIsMHg4MCwweDIwLDB4NDAsMHgwOCwweGI4LDB4MDIsMHg4MywweDgwLDB4ODEsMHhhMCwweDIyIH0sCisgIDE2LCAweGUwNDAsIDAsIHsweDc4LDB4MGIsMHg5MSwweDgzLDB4ZTMsMHgwMCwweGJmLDB4MDAsMHgwZSwweGMxLDB4MGEsMHhiNCwweDAzLDB4NjQsMHgwNCwweGI5IH0sCisgIDE2LCAweGUwNTAsIDAsIHsweDUwLDB4MzIsMHhjMCwweDBhLDB4YjIsMHgwMiwweDIwLDB4MDAsMHg4OCwweDAwLDB4MjMsMHhkNCwweDBiLDB4ODgsMHgwMiwweGYyIH0sCisgIDE2LCAweGUwNjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHg0MiwweGEwLDB4ODAsMHgyMCwweDAwIH0sCisgIDE2LCAweGUwNzAsIDAsIHsweDQ4LDB4MDAsMHgwMiwweDBkLDB4MDYsMHg4MCwweDgwLDB4MmEsMHhkMCwweDAzLDB4MDAsMHgwMiwweGM4LDB4MDAsMHhiMywweDAwIH0sCisgIDE2LCAweGUwODAsIDAsIHsweDJjLDB4YzAsMHgwOCwweDM2LDB4MDIsMHg0MCwweDAwLDB4YjksMHgwMiwweDIyLDB4YzIsMHg4YiwweDI2LDB4MDIsMHgwYywweDEwIH0sCisgIDE2LCAweGUwOTAsIDAsIHsweDAxLDB4MDIsMHgyNCwweGMwLDB4NGIsMHhhMSwweDAyLDB4ZjgsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUwYTAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDA4LDB4OGUsMHg4MCwweDIxLDB4MjEsMHgwOCwweDI4LDB4YzIsMHg5ZSwweDAwLDB4OGUsMHg4MCwweDIxIH0sCisgIDE2LCAweGUwYjAsIDAsIHsweDYwLDB4MGIsMHg3OCwweDAyLDB4OWUsMHgyMCwweGI3LDB4ODIsMHgyZiwweGExLDB4MGEsMHg3OCwweDAyLDB4NWUsMHgwMCwweGI1IH0sCisgIDE2LCAweGUwYzAsIDAsIHsweDkxLDB4YTEsMHhlMCwweDBiLDB4MjksMHgwMiwweDMyLDB4NDQsMHg4NiwweDgwLDB4YTUsMHhlMCwweDBiLDB4NGMsMHgwMiwweGM4IH0sCisgIDE2LCAweGUwZDAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweGUxLDB4MDAsMHgyMiwweDgwIH0sCisgIDE2LCAweGUwZTAsIDAsIHsweDBlLDB4MDAsMHgwYiwweDI0LDB4MDAsMHhjMCwweDQ0LDB4MjgsMHhhZCwweDBmLDB4MjAsMHgwMiwweGM4LDB4MDAsMHhmMywweDAwIH0sCisgIDE2LCAweGUwZjAsIDAsIHsweDFjLDB4YzAsMHgwYywweDAxLDB4MDMsMHg0OCwweDRjLDB4ZjIsMHgwNCwweDMwLDB4YzAsMHgwZiwweDE1LDB4MDMsMHg4MCwweDQwIH0sCisgIDE2LCAweGUxMDAsIDAsIHsweGMxLDB4MDAsMHgxNCwweGM4LDB4MGYsMHgwMCwweDAzLDB4ZGEsMHgwMiwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUxMTAsIDAsIHsweDQwLDB4MWQsMHg5YywweDQwLDB4ZjcsMHgwMCwweDNmLDB4YzAsMHg4ZiwweGMwLDB4MDMsMHhlNCwweDAwLDB4ZmEsMHgwMSwweDNmIH0sCisgIDE2LCAweGUxMjAsIDAsIHsweGMwLDB4MGYsMHhmMCwweDIzLDB4ZmMsMHgwOCwweGZiLDB4MDAsMHgzZiwweDgwLDB4MGYsMHhmMCwweDAxLDB4ZmMsMHgxMCwweGZmIH0sCisgIDE2LCAweGUxMzAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBlLDB4ZDEsMHgwMywweGZjLDB4NDIsMHhmZSwweDgwLDB4M2IsMHhjMCwweDBmLDB4YzAsMHgwMywweGQwIH0sCisgIDE2LCAweGUxNDAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHg0MCwweGM4LDB4MDAsMHgzZSwweGMwIH0sCisgIDE2LCAweGUxNTAsIDAsIHsweDBmLDB4OTAsMHgwMywweGVlLDB4MDgsMHhjYiwweDAwLDB4MzIsMHhjMCwweDBmLDB4YTAsMHgyMywweGU2LDB4MDMsMHhjYiwweDRjIH0sCisgIDE2LCAweGUxNjAsIDAsIHsweDMyLDB4NDAsMHgwZiwweGIwLDB4MDcsMHhlOCwweDAwLDB4ZjksMHgwMCwweDE2LDB4NDAsMHgwYywweGEwLDB4MGIsMHg2YywweDAwIH0sCisgIDE2LCAweGUxNzAsIDAsIHsweGNmLDB4MDIsMHgzMiwweGM1LDB4MGMsMHg4MCwweDAzLDB4MDIsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUxODAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDgwLDB4ODQsMHgwNCwweDJkLDB4YzEsMHgwYiwweDQwLDB4NDAsMHhkYywweDAwLDB4ODcsMHgwNCwweDIxIH0sCisgIDE2LCAweGUxOTAsIDAsIHsweGMwLDB4NGIsMHg3MCwweDEyLDB4ZmMsMHgwMSwweDhmLDB4NjAsMHgyOSwweDQwLDB4MGIsMHg3MCwweDEzLDB4OWMsMHgwMCwweGI1IH0sCisgIDE2LCAweGUxYTAsIDAsIHsweDAwLDB4YTMsMHg0MCwweDBhLDB4NjAsMHgwMiwweDAwLDB4MDAsMHg4NCwweDAwLDB4MjEsMHhjMCwweDA4LDB4NDAsMHgwMiwweDEyIH0sCisgIDE2LCAweGUxYjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OGUsMHgwMCwweDg3LDB4ODAsMHgyZCwweGEyIH0sCisgIDE2LCAweGUxYzAsIDAsIHsweDBiLDB4NGMsMHgxNiwweGQ2LDB4MDgsMHg5NywweDg4LDB4MjEsMHhhMCwweDRiLDB4NjgsMHgwMiwweGRlLDB4MDQsMHhhNywweDgwIH0sCisgIDE2LCAweGUxZDAsIDAsIHsweDIxLDB4ZTAsMHgwYiwweDQ4LDB4MDIsMHhkYSwweDA0LDB4YjYsMHg4MiwweDI1LDB4NjAsMHgwYSwweGU4LDB4NjIsMHgxZSwweDAwIH0sCisgIDE2LCAweGUxZTAsIDAsIHsweDg3LDB4ODAsMHgyMCwweGU4LDB4MDgsMHg0OCwweDAyLDB4MDgsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUxZjAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDAwLDB4OGIsMHg4MCwweDZjLDB4ZjAsMHgwYiwweDNjLDB4MDIsMHhjZSwweDQ2LDB4OWIsMHhjMCwweDIwIH0sCisgIDE2LCAweGUyMDAsIDAsIHsweGU0LDB4MGIsMHgzYywweDAyLDB4Y2MsMHgyMCwweGEzLDB4MDAsMHgyOCwweGUwLDB4MGIsMHgzMCwweDAyLDB4OGQsMHg4MCwweGIxIH0sCisgIDE2LCAweGUyMTAsIDAsIHsweDgwLDB4MjIsMHg0NCwweDBhLDB4MjEsMHgwYSwweDAzLDB4ODIsMHg4MCwweDgwLDB4YTAsMHhjMCwweDA4LDB4MDYsMHgwYSwweDEyIH0sCisgIDE2LCAweGUyMjAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMiwweGNlLDB4ODAsMHgzZiwweGEwIH0sCisgIDE2LCAweGUyMzAsIDAsIHsweDBmLDB4ZTAsMHgwMywweGZhLDB4NDAsMHhkZSwweGMwLDB4YjMsMHg5MCwweDBmLDB4ZWEsMHgxMywweGY5LDB4MDgsMHhlYSwweDA0IH0sCisgIDE2LCAweGUyNDAsIDAsIHsweDMzLDB4ODIsMHg4ZiwweGU0LDB4MDMsMHhmYiwweDA4LDB4ZmUsMHhhMCwweDM2LDB4YTAsMHgwYywweGFjLDB4MGIsMHg2YiwweDgyIH0sCisgIDE2LCAweGUyNTAsIDAsIHsweGM2LDB4YTAsMHgzMiwweDgwLDB4MmMsMHhlNCwweDAzLDB4M2EsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUyNjAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHg5MCwweDNlLDB4MDIsMHgwZiwweDgwLDB4ODMsMHhlMSwweDAwLDB4ZTgsMHgyMCwweDNlIH0sCisgIDE2LCAweGUyNzAsIDAsIHsweDAzLDB4MGYsMHg4MiwweDAzLDB4ZTEsMHg0MCwweGQ4LDB4MDAsMHgzZSwweDIwLDB4MGYsMHgwMCwweDkzLDB4YTAsMHg0MCwweGY4IH0sCisgIDE2LCAweGUyODAsIDAsIHsweDAwLDB4M2UsMHgxMCwweDhmLDB4MDgsMHgwYiwweGYwLDB4MDAsMHhmYywweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH0sCisgIDE2LCAweGUyOTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGU5LDB4MDAsMHgzNiwweDQwIH0sCisgIDE2LCAweGUyYTAsIDAsIHsweDBmLDB4OTQsMHgwNywweGU2LDB4MDAsMHhmOSwweDgwLDB4YjAsMHg0MCwweDBjLDB4OTQsMHgwMywweGU0LDB4NDAsMHhmOSwweDAwIH0sCisgIDE2LCAweGUyYjAsIDAsIHsweDMyLDB4NDAsMHgwZiwweDk0LDB4MGIsMHhhNCwweDAwLDB4NzEsMHhjMCwweDMyLDB4NDAsMHgyYywweDk0LDB4MjMsMHgyNCwweDAyIH0sCisgIDE2LCAweGUyYzAsIDAsIHsweGM5LDB4MDAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDAzLDB4MDIsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUyZDAsIDAsIHsweDgwLDB4MDQsMHg0NCwweDAwLDB4ODksMHgwMCwweDIyLDB4NDAsMHgwYiwweDk4LDB4MDIsMHhlNiwweDYwLDB4YjksMHgwMCwweDIyIH0sCisgIDE2LCAweGUyZTAsIDAsIHsweDYwLDB4MGEsMHg5YywweDAyLDB4ZTYsMHgyNCwweGI5LDB4MDQsMHgzNiwweDQwLDB4MGIsMHg5OCwweDAwLDB4MjQsMHgwMCwweGI5IH0sCisgIDE2LCAweGUyZjAsIDAsIHsweDgwLDB4YTIsMHg1MiwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHg4OSwweDQwLDB4MjIsMHg0MCwweDY4LDB4OTQsMHgwMiwweDIwIH0sCisgIDE2LCAweGUzMDAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMCwweGE5LDB4MDAsMHgyNiwweDQwIH0sCisgIDE2LCAweGUzMTAsIDAsIHsweDAzLDB4OTQsMHgwMiwweGU0LDB4MDEsMHhiOSwweDEwLDB4MjIsMHg1NSwweDA4LDB4OTAsMHgyMiwweGU0LDB4MDAsMHhiMSwweDAwIH0sCisgIDE2LCAweGUzMjAsIDAsIHsweDI2LDB4NDAsMHgwYiwweDkwLDB4MDAsMHgyYywweDA5LDB4YjksMHgwMCwweDIyLDB4NjAsMHgwOCwweDkwLDB4MGEsMHgxYywweDA0IH0sCisgIDE2LCAweGUzMzAsIDAsIHsweDhkLDB4MDgsMHhhMCwweDQwLDB4MDgsMHgxMCwweDgyLDB4MGUsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUzNDAsIDAsIHsweDA4LDB4MDQsMHgwNiwweDAwLDB4ODEsMHgwMCwweDIwLDB4NTAsMHgwYiwweDEyLDB4NDIsMHhjNCwweDgwLDB4YjEsMHgwNCwweDIwIH0sCisgIDE2LCAweGUzNTAsIDAsIHsweDUwLDB4MGEsMHgxNCwweDAyLDB4YzUsMHgwMCwweGIxLDB4MjIsMHgyNCwweDQwLDB4MGIsMHgxMiwweDIyLDB4MDQsMHgwMSwweGIxIH0sCisgIDE2LCAweGUzNjAsIDAsIHsweDQwLDB4MjAsMHg1MCwweDA4LDB4MTAsMHgwYSwweDE1LDB4MDAsMHg4NSwweDQwLDB4MjgsMHg1MCwweDA4LDB4MTQsMHgwYSwweDBhIH0sCisgIDE2LCAweGUzNzAsIDAsIHsweDA1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGU4LDB4NTAsMHgzNiwweDAwIH0sCisgIDE2LCAweGUzODAsIDAsIHsweDBmLDB4ODUsMHgwMiwweGUxLDB4NDAsMHhmOCwweDUwLDB4MzIsMHgwMCwweDBjLDB4YTAsMHgyMywweGUwLDB4MTAsMHhmOCwweDUwIH0sCisgIDE2LCAweGUzOTAsIDAsIHsweGIyLDB4MTQsMHgwZiwweGE1LDB4MDMsMHhhMSwweDQ4LDB4ZmEsMHgwMCwweGIyLDB4MDAsMHgwYywweDgwLDB4MDMsMHgyMCwweDA0IH0sCisgIDE2LCAweGUzYTAsIDAsIHsweGM0LDB4MDIsMHgzMiwweDAwLDB4MGMsMHgwMCwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUzYjAsIDAsIHsweDk4LDB4MWQsMHhlNSwweDAwLDB4ZmQsMHgwMCwweDNmLDB4NDAsMHgwZiwweGQxLDB4MDMsMHhkNCwweDQ0LDB4ZjUsMHgwMCwweDNmIH0sCisgIDE2LCAweGUzYzAsIDAsIHsweDUxLDB4MGYsMHhkNCwweDAzLDB4ZjUsMHgwMCwweGY5LDB4MTAsMHgzYiwweDQwLDB4MGYsMHhkMSwweDAwLDB4ZjUsMHgxMCwweGY1IH0sCisgIDE2LCAweGUzZDAsIDAsIHsweDQwLDB4N2YsMHg0MCwweDBmLDB4NTQsMHgyYiwweGU1LDB4MDAsMHhmOSwweDQwLDB4MzYsMHg1MCwweDBmLDB4ZDAsMHgwMywweGU2IH0sCisgIDE2LCAweGUzZTAsIDAsIHsweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZjYsMHgxMCwweGJkLDB4NDAsMHgzMywweDQwIH0sCisgIDE2LCAweGUzZjAsIDAsIHsweDBmLDB4ZGEsMHgwMywweDM3LDB4ODAsMHhjZCwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZDAsMHgwMywweGY0LDB4MDAsMHhlOSwweGEwIH0sCisgIDE2LCAweGU0MDAsIDAsIHsweDNlLDB4NDAsMHgwYywweGRlLDB4MTcsMHhhNCwweDA4LDB4ZmQsMHhjMCwweDMzLDB4NDEsMHg4ZCwweGRhLDB4MTMsMHgyNiwweGEwIH0sCisgIDE2LCAweGU0MTAsIDAsIHsweGY5LDB4YTgsMHgzMiwweDc4LDB4MGMsMHhiNCwweDBiLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU0MjAsIDAsIHsweDM4LDB4MTAsMHhlMSwweDAwLDB4YjgsMHhhMCwweDM2LDB4MjAsMHgwYiwweDhhLDB4ODIsMHhhMiwweDgwLDB4MmEsMHhhOCwweDJlIH0sCisgIDE2LCAweGU0MzAsIDAsIHsweDAwLDB4MGIsMHg4MCwweDEyLDB4ZTAsMHgwNCwweGI4LDB4YTEsMHgyZSwweDI4LDB4NGEsMHg4ZSwweDAyLDB4MmEsMHhhMCwweGJhIH0sCisgIDE2LCAweGU0NDAsIDAsIHsweGMwLDB4MjIsMHgyOCwweDA4LDB4ODUsMHgwMiwweDIxLDB4MDgsMHhiOCwweGU4LDB4YTIsMHgzYywweDA4LDB4YzgsMHgwMiwweDBlIH0sCisgIDE2LCAweGU0NTAsIDAsIHsweDA2LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzUsMHgwMCwweGI5LDB4MDAsMHgyMCwweDRhIH0sCisgIDE2LCAweGU0NjAsIDAsIHsweDBiLDB4MTQsMHgwMiwweDA1LDB4ODAsMHgwMSwweDAwLDB4MmMsMHg0MSwweDBiLDB4MTAsMHgwMiwweGM0LDB4MDQsMHhhMSwweDRhIH0sCisgIDE2LCAweGU0NzAsIDAsIHsweDJlLDB4NDIsMHgwOCwweDE0LDB4MDIsMHg4NCwweDEwLDB4YjEsMHg2MCwweGEwLDB4NGEsMHgwOSwweDEwLDB4MDIsMHg0NCwweDAwIH0sCisgIDE2LCAweGU0ODAsIDAsIHsweGI1LDB4MDEsMHgyOSwweDQwLDB4MTgsMHhkMiwweDAyLDB4MTIsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU0OTAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4YjksMHgyMSwweDI2LDB4NDAsMHgwYiwweDk2LDB4MDIsMHhhNCwweDEwLDB4YTksMHgwMCwweDJlIH0sCisgIDE2LCAweGU0YTAsIDAsIHsweDQwLDB4MGIsMHg5NiwweDEyLDB4ZTQsMHgyMCwweGI5LDB4MDAsMHgyZSwweDQxLDB4MGEsMHg5MCwweDQyLDB4MjQsMHgwMCwweGI5IH0sCisgIDE2LCAweGU0YjAsIDAsIHsweDAwLDB4MjIsMHg0MSwweDA4LDB4OTgsMHgyMiwweDY0LDB4MDAsMHhiOSwweDIwLDB4MmIsMHg0MSwweDI4LDB4ZDQsMHgwMiwweDA2IH0sCisgIDE2LCAweGU0YzAsIDAsIHsweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDExLDB4ZTQsMHgwMCwweGY5LDB4ZTAsMHgzMiwweDU4IH0sCisgIDE2LCAweGU0ZDAsIDAsIHsweDBmLDB4OTgsMHgwMywweDI2LDB4NDAsMHhjOSwweDQwLDB4M2UsMHg1OCwweDBmLDB4OWMsMHgwMywweGU0LDB4MDAsMHhlOSwweDAwIH0sCisgIDE2LCAweGU0ZTAsIDAsIHsweDZlLDB4NDAsMHgwYywweDlhLDB4MDIsMHhhNiwweDAwLDB4ZjksMHg0NCwweDMyLDB4NDAsMHgwZCwweDlhLDB4MGIsMHg2NCwweDg0IH0sCisgIDE2LCAweGU0ZjAsIDAsIHsweGY5LDB4MDAsMHhiYSwweDQwLDB4MGMsMHgxOCwweDAzLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU1MDAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NTAsMHgwZiwweDkwLDB4MDMsMHhlNiwweDAwLDB4ZjksMHgwNCwweDNlIH0sCisgIDE2LCAweGU1MTAsIDAsIHsweDQ4LDB4MGYsMHg5MCwweDAzLDB4ZTQsMHg0MCwweGY5LDB4MDAsMHgzZSwweDY1LDB4MGYsMHg5OSwweDgxLDB4ZTQsMHg1MCwweGY5IH0sCisgIDE2LCAweGU1MjAsIDAsIHsweDIwLDB4M2UsMHg0MCwweDhmLDB4OTAsMHgwMywweGE0LDB4ODAsMHhmOSwweDAwLDB4MzQsMHg0MCwweDBmLDB4OTIsMHgwMywweGQyIH0sCisgIDE2LCAweGU1MzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGY4LDB4NDAsMHgzZSwweDEwIH0sCisgIDE2LCAweGU1NDAsIDAsIHsweDBlLDB4ODQsMHgwMywweDYwLDB4MDgsMHhjOCwweDAwLDB4M2UsMHgwOCwweDBmLDB4ODAsMHg4MywweGUwLDB4MjgsMHhlOCwweDA0IH0sCisgIDE2LCAweGU1NTAsIDAsIHsweDNlLDB4MDAsMHgwYywweDg0LDB4MDMsMHgyMSwweDFjLDB4ZjAsMHg0OCwweDMyLDB4MDAsMHgwYiwweDAwLDB4MDMsMHhlMCwweDAyIH0sCisgIDE2LCAweGU1NjAsIDAsIHsweGMwLDB4MDAsMHgzMiwweDAwLDB4MGMsMHhjMCwweDBiLDB4MDIsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU1NzAsIDAsIHsweDI4LDB4MDUsMHgzOCwweDAwLDB4YjIsMHg4OCwweDJlLDB4ODAsMHgwOCwweGUwLDB4MDMsMHg3YSwweDgwLDB4OGUsMHgwMCwweDJmIH0sCisgIDE2LCAweGU1ODAsIDAsIHsweGEwLDB4MGIsMHhlOCwweDAyLDB4ZjksMHgxMCwweGJhLDB4MDAsMHgyYywweDgwLDB4MjgsMHhlNCwweDAyLDB4MjgsMHgwMCwweGJlIH0sCisgIDE2LCAweGU1OTAsIDAsIHsweDQwLDB4MjMsMHhiOCwweDA4LDB4ZTgsMHgwMiwweGU4LDB4MDQsMHhjYSwweDIwLDB4YTIsMHg4MCwweDA4LDB4ZTgsMHgwMiwweDBhIH0sCisgIDE2LCAweGU1YTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMSwweGIzLDB4MDAsMHgyYywweDQwIH0sCisgIDE2LCAweGU1YjAsIDAsIHsweDA4LDB4YjgsMHg0MiwweDZjLDB4MDIsMHg4MywweDAwLDB4MmMsMHhlMCwweDBiLDB4MzgsMHgwMCwweGNmLDB4NDAsMHhiMywweDAwIH0sCisgIDE2LCAweGU1YzAsIDAsIHsweDJjLDB4YzAsMHgwOCwweGI0LDB4MGEsMHgwYywweDAwLDB4YjMsMHg0MCwweGEyLDB4ODIsMHgwYSwweDM5LDB4MDIsMHhjYywweDAwIH0sCisgIDE2LCAweGU1ZDAsIDAsIHsweDkzLDB4ODAsMHhhMCwweGMwLDB4MjksMHgyMCwweDAyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU1ZTAsIDAsIHsweGEwLDB4MDEsMHgxZCwweDAwLDB4YjcsMHgwMCwweDJkLDB4NjQsMHgyOCwweDc0LDB4MDIsMHg0MCwweDAwLDB4ODcsMHgwNSwweDJkIH0sCisgIDE2LCAweGU1ZjAsIDAsIHsweDkwLDB4MGIsMHg3NCwweDAyLDB4ZGMsMHgxMCwweGI3LDB4MzAsMHgyZCwweGM4LDB4MDgsMHgzNCwweDA2LDB4MWMsMHg4MCwweGI3IH0sCisgIDE2LCAweGU2MDAsIDAsIHsweDAwLDB4YTEsMHhjMCwweDBhLDB4NzAsMHgwMiwweGRlLDB4ODAsMHg4MywweDAwLDB4MDEsMHgwMCwweDA5LDB4NjAsMHg4MiwweDIwIH0sCisgIDE2LCAweGU2MTAsIDAsIHsweDA0LDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWEsMHgwMCwweGY3LDB4ODAsMHgzZCwweDYwIH0sCisgIDE2LCAweGU2MjAsIDAsIHsweDBlLDB4ZDgsMHgwYiwweDVlLDB4MDAsMHhjNywweDgwLDB4M2QsMHhlMCwweDBmLDB4NjgsMHgwMywweGRlLDB4MTAsMHhmNywweGE5IH0sCisgIDE2LCAweGU2MzAsIDAsIHsweDdmLDB4ZTgsMHg0OCwweDc4LDB4MDMsMHgxZiwweDMwLDB4ZmYsMHg5NCwweDMzLDB4YTAsMHgwZSwweDc4LDB4MDMsMHhjZiwweDI0IH0sCisgIDE2LCAweGU2NDAsIDAsIHsweGQ2LDB4ODAsMHhiMSwweGUwLDB4MGQsMHhmOCwweDQzLDB4MjIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU2NTAsIDAsIHsweDA4LDB4MWQsMHhhYywweDAwLDB4YmIsMHgwMCwweDBjLDB4NDAsMHgwZiwweGIwLDB4MDMsMHhlYywweDA4LDB4ZjksMHgwMCwweDNlIH0sCisgIDE2LCAweGU2NjAsIDAsIHsweDAwLDB4MGYsMHg5MCwweDQxLDB4ZWMsMHgwMCwweGZiLDB4NjEsMHg3ZSwweGQwLDB4MGYsMHhiMCwweDAzLDB4ZWMsMHg4MCwweGZiIH0sCisgIDE2LCAweGU2NzAsIDAsIHsweDQwLDB4M2YsMHg5YiwweDBjLDB4YjAsMHgwMywweGVkLDB4OTAsMHhmYSwweDAwLDB4M2MsMHgwMCwweDBlLDB4YjAsMHgwMywweGMyIH0sCisgIDE2LCAweGU2ODAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZGUsMHgwMCwweGVmLDB4ODAsMHgzMywweDYwIH0sCisgIDE2LCAweGU2OTAsIDAsIHsweDBkLDB4ZDgsMHgwMywweDM2LDB4NDAsMHhlZiwweDkwLDB4M2UsMHhlMCwweDBmLDB4ZjksMHgwMywweGZlLDB4MDAsMHhmZiwweDgwIH0sCisgIDE2LCAweGU2YTAsIDAsIHsweDMzLDB4ZmUsMHgwYywweGZhLDB4MDMsMHhmZSwweDAwLDB4Y2YsMHg4MCwweGIzLDB4ZTAsMHgwZiwweGY4LDB4MDMsMHhmZSwweDAwIH0sCisgIDE2LCAweGU2YjAsIDAsIHsweGNkLDB4ODAsMHgzMywweGUwLDB4MGYsMHhjOCwweDQzLDB4YzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU2YzAsIDAsIHsweGE4LDB4MTEsMHg5YywweDAwLDB4ODUsMHgwOCwweDM1LDB4NDAsMHgwOCwweDcwLDB4MDMsMHg1MiwweDIwLDB4ODcsMHgxMSwweDJjIH0sCisgIDE2LCAweGU2ZDAsIDAsIHsweGVjLDB4MGIsMHg3MSwweDAyLDB4ZDAsMHgwMCwweGU3LDB4MDAsMHgzNSwweGM0LDB4MDgsMHg3NCwweDAyLDB4ZGMsMHg0MCwweDg3IH0sCisgIDE2LCAweGU2ZTAsIDAsIHsweDEwLDB4MjEsMHhjMCwweDBiLDB4NzAsMHgwMiwweGZjLDB4ODAsMHg4NSwweDA4LDB4MjEsMHgwMCwweDBiLDB4NDEsMHg4MiwweGVhIH0sCisgIDE2LCAweGU2ZjAsIDAsIHsweDA2LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTgsMHgwMCwweGFmLDB4MDAsMHgyMywweDUwIH0sCisgIDE2LCAweGU3MDAsIDAsIHsweDA5LDB4NTAsMHgwMiwweDFjLDB4ODAsMHhhNywweDAxLDB4MjksMHhjMCwweDFiLDB4NjAsMHgwNiwweGRjLDB4NDAsMHhiNywweDEwIH0sCisgIDE2LCAweGU3MTAsIDAsIHsweDIxLDB4YzgsMHg0YSwweDUyLDB4MDIsMHhkYywweDAwLDB4ODMsMHgwMCwweDIxLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhkYywweDEzIH0sCisgIDE2LCAweGU3MjAsIDAsIHsweDg0LDB4MDAsMHgyNSwweGMwLDB4MGIsMHg1OCwweDAyLDB4YzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU3MzAsIDAsIHsweDIwLDB4MTQsMHhjYywweDAwLDB4ODEsMHg4MCwweDI0LDB4NDAsMHgwOCwweDNlLDB4MDIsMHg2ZSwweDAwLDB4ODksMHgwMCwweDJjIH0sCisgIDE2LCAweGU3NDAsIDAsIHsweGMwLDB4MGIsMHhiNCwweDAyLDB4Y2EsMHg4MCwweGEzLDB4MDAsMHgyNCwweGMwLDB4MGEsMHgwNCwweDAyLDB4ZWMsMHg0MCwweDgyIH0sCisgIDE2LCAweGU3NTAsIDAsIHsweDBhLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNkLDB4MTAsMHg4MCwweGMwLDB4YTQsMHgwMCwweDBiLDB4MWMsMHgwMiwweGM4IH0sCisgIDE2LCAweGU3NjAsIDAsIHsweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4ODQsMHgwMCwweGViLDB4ODAsMHgzMywweDQwIH0sCisgIDE2LCAweGU3NzAsIDAsIHsweDBkLDB4OGMsMHg4MywweDI2LDB4MDAsMHhlOSwweGEwLDB4M2UsMHg3OCwweDhmLDB4OTAsMHg4MywweGUxLDB4MDAsMHhmZiwweDAwIH0sCisgIDE2LCAweGU3ODAsIDAsIHsweDMxLDB4ZDEsMHgwZSwweDg0LDB4MjMsMHhmYywweDAwLDB4Y2IsMHg4MiwweDMyLDB4YzAsMHg4ZiwweGIwLDB4MDIsMHhmZCwweDQwIH0sCisgIDE2LCAweGU3OTAsIDAsIHsweGNiLDB4ODAsMHhiNiwweGMwLDB4MGYsMHhhNCwweDAzLDB4ZWEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU3YTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwMCwweDNlLDB4NDAsMHgwZiwweGEwLDB4MDMsMHhlMCwweDAwLDB4ZjksMHgwMSwweDNlIH0sCisgIDE2LCAweGU3YjAsIDAsIHsweDQyLDB4MGYsMHg5MCwweDAzLDB4ZTUsMHg1NCwweGUzLDB4MDAsMHgzZSwweGM4LDB4MDUsMHg5MywweDAzLDB4ZWMsMHg4MCwweGZiIH0sCisgIDE2LCAweGU3YzAsIDAsIHsweGMxLDB4M2UsMHhjMCwweDBmLDB4MjAsMHgwMywweGNjLDB4NDgsMHhmMywweDA4LDB4M2EsMHgwMCwweDBmLDB4YTAsMHg0MywweGUwIH0sCisgIDE2LCAweGU3ZDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZjAsMHgwMCwweGNmLDB4MDAsMHgzZiwweDQwIH0sCisgIDE2LCAweGU3ZTAsIDAsIHsweDBmLDB4MzAsMHgwMSwweDJjLDB4MGEsMHhjZCwweDEwLDB4MzMsMHgwMCwweDBmLDB4ZDAsMHg4MywweDE0LDB4MDAsMHhjYiwweDAyIH0sCisgIDE2LCAweGU3ZjAsIDAsIHsweDMzLDB4YzAsMHgwYywweGUxLDB4MDMsMHhlYywweDEwLDB4Y2QsMHgwMCwweDMzLDB4YzAsMHgwYywweGYwLDB4MzMsMHgzYywweDAwIH0sCisgIDE2LCAweGU4MDAsIDAsIHsweGVhLDB4MDAsMHgzMywweGMwLDB4MGMsMHhmMCwweDgzLDB4YzgsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU4MTAsIDAsIHsweDgxLDB4MDQsMHg2ZSwweDAwLDB4OGIsMHgwMCwweDJlLDB4NDAsMHgwYiwweGJjLDB4MDIsMHgyZSwweDAwLDB4MGIsMHgwMCwweDIyIH0sCisgIDE2LCAweGU4MjAsIDAsIHsweDMwLDB4MGIsMHg5YywweDAyLDB4MjcsMHg4MCwweGFiLDB4MDAsMHgyYSwweGMwLDB4MDgsMHhiOCwweDAyLDB4ZWMsMHgwMCwweDg5IH0sCisgIDE2LCAweGU4MzAsIDAsIHsweGMwLDB4MjAsMHhlMCwweDA4LDB4YWUsMHgwMiwweDJjLDB4MDgsMHg4YSwweDAwLDB4MjIsMHgwMCwweDA4LDB4YjAsMHg0MiwweGU4IH0sCisgIDE2LCAweGU4NDAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmUsMHgwMCwweDhiLDB4MDQsMHgyZSwweDQwIH0sCisgIDE2LCAweGU4NTAsIDAsIHsweDhiLDB4OGMsMHgwMiwweGFlLDB4MTAsMHg4OSwweDAwLDB4MjIsMHg3MCwweDBiLDB4OGMsMHgwMiwweGEyLDB4MDAsMHg4YiwweDAxIH0sCisgIDE2LCAweGU4NjAsIDAsIHsweDIyLDB4YzAsMHgwOCwweDgwLDB4MDIsMHhlYywweDEwLDB4ODIsMHg4OCwweGEyLDB4NzAsMHgwOSwweGI4LDB4MDIsMHgyYywweDA4IH0sCisgIDE2LCAweGU4NzAsIDAsIHsweDg5LDB4MDAsMHgyMCwweGMwLDB4MjgsMHg4MCwweDIyLDB4ZTAsMHgxMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU4ODAsIDAsIHsweDA4LDB4MDQsMHgwYywweDA0LDB4ODEsMHgwMCwweDJjLDB4NDAsMHgwYiwweDIwLDB4MDIsMHg4MCwweDAwLDB4ODEsMHgwNCwweGEwIH0sCisgIDE2LCAweGU4OTAsIDAsIHsweDUwLDB4NGIsMHgwMCwweDBhLDB4ODAsMHgwMCwweGEzLDB4MDEsMHgyYSwweGMxLDB4MjAsMHgxMCwweDAyLDB4Y2MsMHgxNCwweDgzIH0sCisgIDE2LCAweGU4YTAsIDAsIHsweDAwLDB4MjIsMHhjMCwweDA4LDB4MjAsMHgwMiwweDBjLDB4MDAsMHg4MSwweDAwLDB4ZTAsMHgwMCwweDA4LDB4MDAsMHgwMiwweGMyIH0sCisgIDE2LCAweGU4YjAsIDAsIHsweDA1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjgsMHgwMCwweGNiLDB4MDAsMHgzZSwweDQwIH0sCisgIDE2LCAweGU4YzAsIDAsIHsweDBmLDB4OTAsMHgwYiwweGFjLDB4ODAsMHhjOSwweDAwLDB4MzIsMHgxMCwweDBmLDB4ODAsMHgwMywweGE0LDB4MDAsMHhjZiwweDAyIH0sCisgIDE2LCAweGU4ZDAsIDAsIHsweDMxLDB4YzAsMHgwYywweDgwLDB4MTMsMHhmYywweDAyLDB4Y2QsMHgwMCwweDMzLDB4YzAsMHgyYywweDkwLDB4MDMsMHgzYywweDAyIH0sCisgIDE2LCAweGU4ZTAsIDAsIHsweGU4LDB4MDAsMHhiMiwweGMwLDB4MGMsMHg5MCwweDAzLDB4YzAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU4ZjAsIDAsIHsweGEwLDB4MWQsMHhmYywweDAyLDB4ZjUsMHgwMCwweDNkLDB4NDAsMHg4ZiwweGYwLDB4MjMsMHg2ZCwweDAwLDB4ZmYsMHgwMCwweDNmIH0sCisgIDE2LCAweGU5MDAsIDAsIHsweDA0LDB4MGYsMHhjMCwweDAzLDB4NzAsMHgxYywweGZmLDB4MDEsMHgzZiwweGMwLDB4NGYsMHhjMCwweDAzLDB4ZmMsMHgwMCwweGZkIH0sCisgIDE2LCAweGU5MTAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBmLDB4ZTAsMHgwZiwweGZjLDB4MTgsMHhmYywweDAwLDB4M2YsMHgwMCwweDBmLDB4ZDAsMHgwMywweGU4IH0sCisgIDE2LCAweGU5MjAsIDAsIHsweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmUsMHgwMCwweGQ3LDB4MDIsMHgwZiwweDMwIH0sCisgIDE2LCAweGU5MzAsIDAsIHsweDBjLDB4ZjIsMHgwMSwweDdlLDB4MDYsMHg0NCwweDMwLDB4M2YsMHgyMCwweDBlLDB4ZjAsMHgwMiwweDdjLDB4ODQsMHhmZCwweDIwIH0sCisgIDE2LCAweGU5NDAsIDAsIHsweDI3LDB4MDgsMHgwYywweGQwLDB4MDEsMHgzNiwweDAwLDB4ZmYsMHg2MCwweDMzLDB4Y2MsMHgwYiwweGYxLDB4MTMsMHgyYywweGM0IH0sCisgIDE2LCAweGU5NTAsIDAsIHsweGZmLDB4MzAsMHgwZiwweGNkLDB4MGMsMHhmNCwweDAzLDB4ZjAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU5NjAsIDAsIHsweDgwLDB4MTAsMHhlZSwweDAwLDB4OGYsMHhjMCwweDJlLDB4MDAsMHgwOCwweGZjLDB4MDIsMHgyZSwweDAwLDB4OGEsMHgzMCwweDI4IH0sCisgIDE2LCAweGU5NzAsIDAsIHsweDUyLDB4MDgsMHhmNiwweDgyLDB4M2MsMHg2OCwweGJkLDB4OTAsMHgzMiwweDM0LDB4NDgsMHg5YywweDEyLDB4MjYsMHgwMCwweGNmIH0sCisgIDE2LCAweGU5ODAsIDAsIHsweDQwLDB4MjMsMHhjYywweDBiLDB4ZjYsMHgwMiwweDNkLDB4MDAsMHhiZiwweDEwLDB4MmYsMHhjYywweDg4LDB4ZjYsMHgwMiwweGUwIH0sCisgIDE2LCAweGU5OTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwMCwweDkzLDB4MTAsMHgyYywweDA4IH0sCisgIDE2LCAweGU5YTAsIDAsIHsweDA5LDB4MzEsMHgwMiwweDRjLDB4MDAsMHg5YiwweDIwLDB4NjQsMHg1OCwweDAzLDB4MzEsMHg2MiwweDRjLDB4ODEsMHhhMSwweDAwIH0sCisgIDE2LCAweGU5YjAsIDAsIHsweDIwLDB4MDAsMHg0OCwweDE0LDB4MDIsMHg0NCwweDAwLDB4OTMsMHgzMCwweDI0LDB4YzAsMHgwYiwweDMzLDB4MDIsMHg4ZCwweDg0IH0sCisgIDE2LCAweGU5YzAsIDAsIHsweGIzLDB4MjAsMHg2YywweGMwLDB4MmEsMHgzNiwweDAyLDB4ZTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU5ZDAsIDAsIHsweGMwLDB4MTUsMHhhYywweDEwLDB4OWIsMHgwMiwweDJlLDB4NDEsMHgwYiwweGIwLDB4MDIsMHhhNCwweDAwLDB4OWEsMHgwMCwweDRhIH0sCisgIDE2LCAweGU5ZTAsIDAsIHsweDYwLDB4ODgsMHhiMCwweDUyLDB4NmMsMHgwMSwweGI5LDB4MDAsMHgyNiwweDAwLDB4MDgsMHg5MSwweDIyLDB4ZWMsMHgwOCwweGJiIH0sCisgIDE2LCAweGU5ZjAsIDAsIHsweDAwLDB4MjYsMHhjMCwweDBiLDB4YjAsMHgwMiwweGFjLDB4MDAsMHhiYiwweDA1LDB4NmUsMHhjMSwweDBhLDB4YjAsMHgwMiwweGYwIH0sCisgIDE2LCAweGVhMDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwMCwweGRiLDB4MDEsMHgzZSwweDMwIH0sCisgIDE2LCAweGVhMTAsIDAsIHsweDJkLDB4MzAsMHgwMywweDQ3LDB4NjAsMHhkOCwweGEwLDB4MTYsMHgzOCwweDhmLDB4YjAsMHgwMywweDZjLDB4MDAsMHg3OSwweDAyIH0sCisgIDE2LCAweGVhMjAsIDAsIHsweDMxLDB4NjAsMHgwYywweGM4LDB4MGEsMHg2NiwweDAwLDB4YmIsMHgwMCwweGI2LDB4YzAsMHgwZiwweGIwLDB4MGIsMHhhYywweDAwIH0sCisgIDE2LCAweGVhMzAsIDAsIHsweGZiLDB4MDEsMHgzZSwweGMxLDB4MGUsMHhiMCwweDAzLDB4ZDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVhNDAsIDAsIHsweGUwLDB4MDEsMHhiYywweDEwLDB4ZWYsMHgwOCwweDNmLDB4MjQsMHgwYywweGYwLDB4MDMsMHg3NiwweDIwLDB4ZWUsMHg5MCwweDM1IH0sCisgIDE2LCAweGVhNTAsIDAsIHsweDQwLDB4MGUsMHg3MCwweDAzLDB4YWMsMHgwMCwweGZkLDB4MDAsMHhiYiwweDY0LDB4MGYsMHg4OCwweDEzLDB4MzQsMHg4MCwweGNiIH0sCisgIDE2LCAweGVhNjAsIDAsIHsweDAwLDB4M2IsMHhjMCwweDBmLDB4YjAsMHgwMywweDZjLDB4MDgsMHhmZiwweDAwLDB4M2UsMHhjMCwweDBkLDB4ZjAsMHgwMywweGY4IH0sCisgIDE2LCAweGVhNzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMSwweGZiLDB4ODAsMHgzMiwweDEwIH0sCisgIDE2LCAweGVhODAsIDAsIHsweDBlLDB4YjAsMHgwMywweGVkLDB4MDAsMHhjYiwweDUwLDB4M2UsMHg0MCwweDhjLDB4YjAsMHg0MywweDJjLDB4MTAsMHhmOSwweDAwIH0sCisgIDE2LCAweGVhOTAsIDAsIHsweDMyLDB4NjAsMHgwYywweDQwLDB4MGIsMHgyNiwweDAwLDB4YzMsMHgwNCwweDM2LDB4YzAsMHgwYywweDMwLDB4MDMsMHgyYywweDAwIH0sCisgIDE2LCAweGVhYTAsIDAsIHsweDliLDB4MDAsMHhiMCwweGMwLDB4MGMsMHhiMCwweDAzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVhYjAsIDAsIHsweGM4LDB4MDUsMHgwZSwweDgwLDB4YmYsMHgwNCwweDJhLDB4NDAsMHgwMCwweGY1LDB4MDAsMHhlNiwweDAwLDB4ODIsMHhkMiwweDIyIH0sCisgIDE2LCAweGVhYzAsIDAsIHsweDQwLDB4MGQsMHhmMCwweDIyLDB4M2MsMHgwMCwweDk1LDB4MDIsMHgzNiwweDQwLDB4MGEsMHg4MCwweDAyLDB4MmUsMHgwMCwweDhmIH0sCisgIDE2LCAweGVhZDAsIDAsIHsweDAwLDB4MzcsMHhjMCwweDBhLDB4ZjAsMHg0MiwweDNjLDB4MDAsMHg4ZiwweDAwLDB4MjMsMHhjMCwweDI4LDB4ZjAsMHgwMiwweGYyIH0sCisgIDE2LCAweGVhZTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGUsMHgwMCwweGIzLDB4MDAsMHgyMiwweDIwIH0sCisgIDE2LCAweGVhZjAsIDAsIHsweDRhLDB4MzAsMHgwMCwweGNjLDB4MDAsMHg4MSwweGMwLDB4MjgsMHgwMCwweDA4LDB4MzAsMHgwMiwweDBjLDB4MTAsMHhhMSwweDAwIH0sCisgIDE2LCAweGViMDAsIDAsIHsweDI4LDB4ODAsMHgxOCwweDMwLDB4MjIsMHgwNCwweDA0LDB4ODMsMHgwMCwweDI0LDB4YzAsMHgwOCwweDMwLDB4MDIsMHhjYywweDA4IH0sCisgIDE2LCAweGViMTAsIDAsIHsweDkzLDB4MDAsMHgyMCwweGMwLDB4MDgsMHgzMCwweDA2LDB4ZjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGViMjAsIDAsIHsweDIwLDB4MDEsMHgxZSwweDAwLDB4YjcsMHg4MCwweDI5LDB4YTAsMHgwOCwweDc4LDB4MDIsMHhmZSwweDIwLDB4OGQsMHg4MCwweDI5IH0sCisgIDE2LCAweGViMzAsIDAsIHsweGU1LDB4NWIsMHgzOCwweDQyLDB4MWUsMHg0MCwweGExLDB4ODEsMHgyNSwweGE4LDB4MDgsMHg3OSwweDAyLDB4MzcsMHgwMCwweDg3IH0sCisgIDE2LCAweGViNDAsIDAsIHsweDgwLDB4MjUsMHhlMCwweDBhLDB4NzgsMHgwYSwweGRlLDB4ODEsMHg4NywweDgwLDB4MjUsMHhlNSwweDQ4LDB4NzgsMHgwMiwweGM4IH0sCisgIDE2LCAweGViNTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweGIzLDB4MTAsMHgzMCwweDEyIH0sCisgIDE2LCAweGViNjAsIDAsIHsweDBlLDB4MzAsMHgxMiwweGNjLDB4YzAsMHhjMywweDAwLDB4MzgsMHg4MCwweDBjLDB4MzEsMHgwNiwweDBjLDB4NDAsMHhmMSwweDAwIH0sCisgIDE2LCAweGViNzAsIDAsIHsweDM4LDB4ODAsMHgwYywweDMwLDB4NDMsMHgwNCwweDQyLDB4YzMsMHgwMCwweDM2LDB4YzAsMHgwYywweDMyLDB4MDMsMHhjZSwweGMwIH0sCisgIDE2LCAweGViODAsIDAsIHsweGRiLDB4MDAsMHgzMCwweGMwLDB4MGMsMHgzMCwweDAzLDB4ZDIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGViOTAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZmYsMHgxMCwweDNkLDB4ODQsMHg0ZiwweGYxLDB4MDMsMHhkMCwweDQwLDB4ZmMsMHgxMCwweDMzIH0sCisgIDE2LCAweGViYTAsIDAsIHsweDgwLDB4NWQsMHhiMSwweDgzLDB4ZmMsMHg1MCwweGRkLDB4MGEsMHgyNSwweDg5LDB4MGYsMHhiOCwweDAzLDB4ZDQsMHgwMCwweGZmIH0sCisgIDE2LCAweGViYjAsIDAsIHsweDEwLDB4M2YsMHhjMCwweDBmLDB4ZjQsMHgwMywweDNjLDB4NDAsMHhmZiwweDAwLDB4M2IsMHhjMCwweDBmLDB4ZjAsMHgwMywweGQwIH0sCisgIDE2LCAweGViYzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHgwMCwweGZiLDB4MjAsMHgzZSwweDAwIH0sCisgIDE2LCAweGViZDAsIDAsIHsweDBmLDB4YjUsMHgwMywweDI5LDB4MjAsMHhmOSwweDAwLDB4MzIsMHhhMCwweDBjLDB4YjAsMHg4MywweGVjLDB4MDAsMHg0OSwweGM4IH0sCisgIDE2LCAweGViZTAsIDAsIHsweGIyLDB4YzAsMHg4YywweGEwLDB4MDMsMHg2NCwweDAwLDB4ZmIsMHgwOCwweDEyLDB4ZWEsMHgwYywweGIwLDB4MGIsMHgyYywweDgwIH0sCisgIDE2LCAweGViZjAsIDAsIHsweGZiLDB4MjAsMHgyZSwweGQyLDB4NmMsMHhiNiwweDQzLDB4ZWEsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVjMDAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDAwLDB4YjcsMHg0OSwweDJkLDB4MDAsMHgwYiwweDMwLDB4ODIsMHgxMCwweDAxLDB4YjUsMHgwMiwweDgzIH0sCisgIDE2LCAweGVjMTAsIDAsIHsweGMwLDB4MWEsMHg3MiwweDIyLDB4ZGQsMHg0MSwweDg1LDB4MDAsMHg2MSwweGMwLDB4MTgsMHgyMCwweDIwLDB4MTQsMHgwMCwweGJmIH0sCisgIDE2LCAweGVjMjAsIDAsIHsweDQwLDB4MzUsMHhkMCwweDBkLDB4MzQsMHgwMiwweDFkLDB4MjAsMHhiNywweDI4LDB4MjUsMHhjMSwweDA4LDB4NzQsMHg4MiwweGQyIH0sCisgIDE2LCAweGVjMzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgwNCwweDM3LDB4YTAsMHgyZCwweDIwIH0sCisgIDE2LCAweGVjNDAsIDAsIHsweDBiLDB4N2EsMHgxMiwweDE2LDB4MDEsMHhiMywweDgwLDB4MjEsMHhlMiwweDA4LDB4NzgsMHg0MiwweDllLDB4MDAsMHg4NSwweDgwIH0sCisgIDE2LCAweGVjNTAsIDAsIHsweDIwLDB4ZTEsMHgxOCwweDY4LDB4MDIsMHg1NiwweDAwLDB4YjcsMHhhMCwweDI1LDB4ZTAsMHgwOCwweDdhLDB4MDIsMHgxZSwweDAwIH0sCisgIDE2LCAweGVjNjAsIDAsIHsweGI3LDB4OTAsMHgyYywweGU1LDB4ODgsMHg3YSwweDAyLDB4ZjAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVjNzAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDAwLDB4YjMsMHgwMCwweDZjLDB4MjQsMHgxYiwweDMwLDB4MDIsMHgwMCwweDAwLDB4YjAsMHgwMCwweDIwIH0sCisgIDE2LCAweGVjODAsIDAsIHsweGY4LDB4MGEsMHgzMCwweDAyLDB4Y2MsMHgwMCwweDgxLDB4MDAsMHgyMCwweGQ4LDB4MTgsMHgyMCwweDAyLDB4MDQsMHgwMCwweGIzIH0sCisgIDE2LCAweGVjOTAsIDAsIHsweDAwLDB4MjQsMHhjMCwweDA5LDB4MzAsMHgwMiwweDBjLDB4MDAsMHhiMywweDAwLDB4MjYsMHhjMCwweDA4LDB4MzAsMHgwMiwweGQyIH0sCisgIDE2LCAweGVjYTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMCwweGZhLDB4MDAsMHgzZCwweDgwIH0sCisgIDE2LCAweGVjYjAsIDAsIHsweDBmLDB4MjAsMHgwYiwweDI4LDB4ODAsMHhmZSwweDAwLDB4MzMsMHhhMCwweDBjLDB4YTAsMHgwMywweGU4LDB4MDIsMHhjYSwweDAyIH0sCisgIDE2LCAweGVjYzAsIDAsIHsweDMyLDB4OTAsMHgyYywweGU0LDB4MDMsMHg3OCwweDAwLDB4ZmEsMHgwMCwweDMyLDB4ODAsMHgwYywweGEwLDB4MDMsMHgyOCwweDAwIH0sCisgIDE2LCAweGVjZDAsIDAsIHsweGZhLDB4MDAsMHgzZSwweDgwLDB4MGMsMHhhMCwweDAzLDB4ZmEsMHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVjZTAsIDAsIHsweDQ4LDB4MDAsMHhlMSwweDAwLDB4ZjAsMHgwMCwweDNlLDB4MDAsMHg0ZiwweDgwLDB4MDMsMHhlMCwweDgwLDB4ZjgsMHgwMCwweDNlIH0sCisgIDE2LCAweGVjZjAsIDAsIHsweDAwLDB4MGYsMHg4MCwweDIzLDB4YzAsMHgwMCwweGY4LDB4MDIsMHgzYywweDAwLDB4MGYsMHhjMCwweDgzLDB4NjAsMHgwMCwweGI4IH0sCisgIDE2LCAweGVkMDAsIDAsIHsweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgyMywweGUwLDB4MTgsMHhmOCwweDAxLDB4MzYsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH0sCisgIDE2LCAweGVkMTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTYsMHgwMCwweGY5LDB4MjEsMHgzMiwweDYwIH0sCisgIDE2LCAweGVkMjAsIDAsIHsweDBjLDB4OTAsMHgwMywweDJjLDB4NDQsMHhmOSwweDAwLDB4YjIsMHg0MCwweDBmLDB4OTAsMHgxYiwweDI0LDB4MDAsMHhlOSwweDAwIH0sCisgIDE2LCAweGVkMzAsIDAsIHsweDNlLDB4NDAsMHgwYywweDEwLDB4MDMsMHhhNCwweDAwLDB4ZjksMHgwMCwweDMyLDB4NDAsMHgwZiwweDEwLDB4MzMsMHgyNCwweDEwIH0sCisgIDE2LCAweGVkNDAsIDAsIHsweGYxLDB4MDAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDAzLDB4MDIsMHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVkNTAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4YjksMHg0MCwweGEyLDB4NDEsMHgwOCwweDkwLDB4MDIsMHgyNCwweDgwLDB4ZTksMHgwMCwweDIyIH0sCisgIDE2LCAweGVkNjAsIDAsIHsweDQwLDB4MGIsMHg5MCwweDEyLDB4MjQsMHgwMCwweDg5LDB4MDAsMHg2ZSwweDQxLDB4MTgsMHg5MCwweDQyLDB4MjQsMHgwMCwweGI5IH0sCisgIDE2LCAweGVkNzAsIDAsIHsweDA0LDB4MmEsMHg0MSwweDBiLDB4OTAsMHgwMywweDY0LDB4MDAsMHhmOSwweDAwLDB4MmEsMHg0MCwweDBhLDB4OTAsMHgwYSwweDIwIH0sCisgIDE2LCAweGVkODAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4MjQsMHg4MCwweGI5LDB4NDIsMHg2MiwweDQ4IH0sCisgIDE2LCAweGVkOTAsIDAsIHsweDI4LDB4OTAsMHgwYSwweDI0LDB4MDAsMHhiMSwweDAwLDB4MjIsMHg0MCwweDBiLDB4MTAsMHgwMiwweDI0LDB4MTAsMHhiOSwweDAyIH0sCisgIDE2LCAweGVkYTAsIDAsIHsweDJlLDB4NDAsMHgwOCwweGQwLDB4MDIsMHhhNCwweDAwLDB4YjEsMHgwMCwweDIyLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgyNCwweDA0IH0sCisgIDE2LCAweGVkYjAsIDAsIHsweGI5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHgxMCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVkYzAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAwLDB4YjEsMHgyMCwweDYwLDB4NDAsMHgwOCwweDEyLDB4MDIsMHgwNCwweDAwLDB4YTEsMHgyMCwweDIwIH0sCisgIDE2LCAweGVkZDAsIDAsIHsweDQwLDB4MGIsMHgxMiwweDAyLDB4MDQsMHg4MCwweDkxLDB4MjAsMHgyZCwweDY4LDB4MDgsMHg1MiwweDEyLDB4MDQsMHgwMCwweGIxIH0sCisgIDE2LCAweGVkZTAsIDAsIHsweDI4LDB4MjgsMHg0YSwweDA5LDB4MTIsMHg4MiwweDQ0LDB4YTAsMHhiMSwweDJjLDB4MjgsMHg0YSwweDBhLDB4MTIsMHg4MiwweDAyIH0sCisgIDE2LCAweGVkZjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGY4LDB4MDAsMHgzMiwweDE0IH0sCisgIDE2LCAweGVlMDAsIDAsIHsweDBjLDB4ODAsMHgwMywweDIwLDB4MDAsMHhmOCwweDUwLDB4MzIsMHgxNCwweDBmLDB4ODUsMHgwMywweDAxLDB4NDAsMHhmOCwweDAwIH0sCisgIDE2LCAweGVlMTAsIDAsIHsweDJlLDB4MDAsMHgyOCwweGMwLDB4MDMsMHhhMCwweDAwLDB4ZjgsMHgyNCwweDMwLDB4MDgsMHgwZiwweDgyLDB4MjMsMHgyMCwweDgwIH0sCisgIDE2LCAweGVlMjAsIDAsIHsweGY4LDB4MjAsMHgzMiwweDA4LDB4MGMsMHg4MiwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVlMzAsIDAsIHsweDk4LDB4MWQsMHhlNCwweDA4LDB4ZjksMHgxMCwweDNmLDB4NDAsMHg4ZiwweDkxLDB4MTMsMHhlNCwweDAwLDB4ZWQsMHgxMCwweDNmIH0sCisgIDE2LCAweGVlNDAsIDAsIHsweDUwLDB4MGYsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGE1LDB4MTAsMHgzZSwweDQ0LDB4MGYsMHg5MSwweDAzLDB4ZjQsMHgwNCwweGY5IH0sCisgIDE2LCAweGVlNTAsIDAsIHsweDI4LDB4M2UsMHg0YiwweDBiLDB4OTIsMHhhMywweGU0LDB4YTAsMHhlOSwweDI4LDB4M2UsMHg0YSwweDBmLDB4OTIsMHg4MywweGU2IH0sCisgIDE2LCAweGVlNjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZjQsMHgwMCwweGNkLDB4MDAsMHgzMywweDQwIH0sCisgIDE2LCAweGVlNzAsIDAsIHsweDgwLDB4ZDAsMHgwMSwweGY0LDB4MDAsMHhhNSwweDAwLDB4MjYsMHg0MCwweDBmLDB4OTAsMHgwMywweDI2LDB4MDAsMHhmMSwweDg4IH0sCisgIDE2LCAweGVlODAsIDAsIHsweDNlLDB4NjgsMHgwZCwweDk4LDB4ODMsMHg0NCwweDAwLDB4YzksMHhjMCwweDNhLDB4NDAsMHgwYywweDk4LDB4MDMsMHgyNCwweDA4IH0sCisgIDE2LCAweGVlOTAsIDAsIHsweGY5LDB4YTAsMHgzMiwweDc4LDB4MGYsMHg5YSwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVlYTAsIDAsIHsweDM4LDB4MTAsMHhlMCwweDAyLDB4ODgsMHgwMCwweGEyLDB4MDAsMHgwOCwweDgwLDB4MDIsMHhlMCwweDAwLDB4MGEsMHgwMCwweDIyIH0sCisgIDE2LCAweGVlYjAsIDAsIHsweDAwLDB4MGIsMHg4MCwweDAyLDB4MjAsMHgwMCwweGI4LDB4NDAsMHgyZSwweDE0LDB4MDgsMHg4MCwweDQzLDB4MzAsMHgwMCwweDg4IH0sCisgIDE2LCAweGVlYzAsIDAsIHsweGEwLDB4MjIsMHgyYSwweDBhLDB4OGEsMHg0MiwweGEwLDB4MDUsMHhiOCwweDQyLDB4MzIsMHgzOCwweDBiLDB4ODAsMHgwMiwweDBlIH0sCisgIDE2LCAweGVlZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHgwMywweDkxLDB4MDAsMHgyNCwweDQwIH0sCisgIDE2LCAweGVlZTAsIDAsIHsweDBiLDB4MTAsMHgwMiwweGM0LDB4MTEsMHhiMSwweDA0LDB4MjAsMHg0MSwweDFiLDB4MTAsMHgyMiwweDQ1LDB4MDAsMHhiNSwweDAwIH0sCisgIDE2LCAweGVlZjAsIDAsIHsweDI1LDB4NDAsMHgwOSwweDUwLDB4MDIsMHg1NCwweDAxLDB4ODEsMHg0MCwweDJjLDB4NDAsMHgwOSwweDE0LDB4OTIsMHg0NCwweDAwIH0sCisgIDE2LCAweGVmMDAsIDAsIHsweGIxLDB4NDAsMHgyNCwweDRjLDB4MGIsMHgxNCwweDBhLDB4NDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVmMTAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4OTksMHgwMCwweDI0LDB4NDIsMHgwYiwweDkwLDB4MDIsMHhlNCwweDAxLDB4OTksMHgyMCwweDI2IH0sCisgIDE2LCAweGVmMjAsIDAsIHsweDQwLDB4Y2IsMHg5MCwweDAyLDB4NjQsMHgwMCwweGJiLDB4MDAsMHgyZiwweDQxLDB4MGEsMHhkMCwweDAyLDB4MzQsMHgwMCwweDg5IH0sCisgIDE2LCAweGVmMzAsIDAsIHsweDAwLDB4MjYsMHg0MCwweDBiLDB4MTAsMHgwMiwweGU0LDB4MDAsMHgzMSwweDAwLDB4NjIsMHg0MCwweDBiLDB4OTAsMHgwMiwweDQ2IH0sCisgIDE2LCAweGVmNDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4YzQsMHgwMCwweGQ5LDB4MDEsMHgzNiwweDUwIH0sCisgIDE2LCAweGVmNTAsIDAsIHsweDJmLDB4OTAsMHgwMywweGU2LDB4NjAsMHhmOSwweDgwLDB4MzYsMHg1MiwweDBiLDB4OTAsMHgwYSwweDY0LDB4MDAsMHhmOSwweDAwIH0sCisgIDE2LCAweGVmNjAsIDAsIHsweDM2LDB4NDAsMHgwZCwweDkwLDB4MDMsMHg2NCwweDAyLDB4MDksMHgwMCwweDNlLDB4NDAsMHgwZCwweDkwLDB4MDMsMHg2NCwweDAwIH0sCisgIDE2LCAweGVmNzAsIDAsIHsweGI5LDB4MDAsMHhiNiwweDQwLDB4MGYsMHg5MCwweDAzLDB4NjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVmODAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAwLDB4ZTEsMHgwMCwweDNhLDB4NDEsMHgwYywweDkwLDB4MjMsMHhlNiwweDIwLDB4ZTksMHgwMCwweGJhIH0sCisgIDE2LCAweGVmOTAsIDAsIHsweDcwLDB4MGYsMHg5MCwweDAzLDB4YTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGQsMHgxMCwweDEzLDB4YTcsMHgwMCwweGY5IH0sCisgIDE2LCAweGVmYTAsIDAsIHsweDAwLDB4M2EsMHg0MCwweDBlLDB4OTAsMHg0MywweGE0LDB4MDgsMHhmOSwweDAwLDB4M2EsMHg0MCwweDBmLDB4OTAsMHgwMywweDhhIH0sCisgIDE2LCAweGVmYjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgyMCwweGY4LDB4MDAsMHgzMiwweDAwIH0sCisgIDE2LCAweGVmYzAsIDAsIHsweDBmLDB4ODAsMHg4MywweDIxLDB4MDAsMHhmMCwweDAwLDB4M2EsMHgxMSwweDA5LDB4ODAsMHgwMywweGUwLDB4MDAsMHhjOCwweDAxIH0sCisgIDE2LCAweGVmZDAsIDAsIHsweDMwLDB4MDEsMHgwYywweDgwLDB4MDMsMHhiMCwweDAwLDB4ZDAsMHgwMCwweDM0LDB4MDAsMHgwZCwweDgwLDB4MDMsMHgyMCwweDAwIH0sCisgIDE2LCAweGVmZTAsIDAsIHsweGM4LDB4MDAsMHgzMiwweDAwLDB4MGMsMHg4MCwweDAzLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVmZjAsIDAsIHsweDI4LDB4MDUsMHgzOCwweDAwLDB4YmUsMHgwMCwweDIyLDB4ODAsMHgwMywweGU4LDB4MDIsMHgxYSwweDA4LDB4YmUsMHg0OCwweDIyIH0sCisgIDE2LCAweGYwMDAsIDAsIHsweDgwLDB4MGEsMHhhMCwweDAzLDB4YjgsMHgwMCwweGNhLDB4MDgsMHgyMiwweDgwLDB4MGYsMHhhNCwweDAyLDB4MDgsMHgwMCwweDhhIH0sCisgIDE2LCAweGYwMTAsIDAsIHsweDAwLDB4MjIsMHg4MCwweDhkLDB4YTAsMHgwMiwweDI4LDB4MDAsMHhkYSwweDAwLDB4MmEsMHg4MSwweDA4LDB4YTAsMHgwMiwweDhhIH0sCisgIDE2LCAweGYwMjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NDQsMHgwMCwweGIzLDB4MDAsMHgyMCwweDQwIH0sCisgIDE2LCAweGYwMzAsIDAsIHsweDBiLDB4MzAsMHgwMiwweDA4LDB4MDAsMHhiMCwweDY0LDB4NjgsMHhjMSwweDA4LDB4YjAsMHgyMiwweGNjLDB4MGMsMHg5MywweDgwIH0sCisgIDE2LCAweGYwNDAsIDAsIHsweDAwLDB4YzAsMHg0OCwweDM2LDB4MDIsMHg4OCwweDAwLDB4YjMsMHgwMCwweDI0LDB4YzAsMHgwOCwweDMwLDB4MDYsMHgwYywweDAxIH0sCisgIDE2LCAweGYwNTAsIDAsIHsweGEzLDB4MDIsMHgyYywweGMwLDB4MDgsMHhiMCwweDAyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYwNjAsIDAsIHsweGEwLDB4MDEsMHgxNCwweDA4LDB4YjUsMHgwMCwweDIxLDB4NDAsMHgwYiwweDM4LDB4ODIsMHgxYywweDIxLDB4YjcsMHgwMCwweDIzIH0sCisgIDE2LCAweGYwNzAsIDAsIHsweGU4LDB4NGEsMHg3MiwweDI2LDB4OWUsMHg0MCwweDhmLDB4ODEsMHhhYiwweDQwLDB4NDIsMHg3MCwweDUyLDB4MzgsMHgwMCwweGEzIH0sCisgIDE2LCAweGYwODAsIDAsIHsweDIyLDB4MjAsMHhjNCwweDQ5LDB4MzEsMHgwMiwweDFlLDB4MGEsMHhiNywweDIyLDB4MmQsMHhlOCwweDA4LDB4NzIsMHgwMiwweGE4IH0sCisgIDE2LCAweGYwOTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MTIsMHgwMCwweGY2LDB4ODAsMHgyMSwweGUwIH0sCisgIDE2LCAweGYwYTAsIDAsIHsweDBiLDB4NzgsMHgwYiwweDFlLDB4MDAsMHhiNCwweDgyLDB4M2IsMHhlOCwweDRjLDB4N2MsMHgxMywweGZlLDB4MDIsMHg5NywweDgwIH0sCisgIDE2LCAweGYwYjAsIDAsIHsweDMzLDB4YTAsMHgwOCwweDM4LDB4MDMsMHg5YSwweDAwLDB4ZjcsMHg4OCwweDM1LDB4ZTIsMHgwYywweDc4LDB4ZTMsMHgwZSwweDAwIH0sCisgIDE2LCAweGYwYzAsIDAsIHsweGUzLDB4ZTgsMHgzNCwweGY4LDB4MGMsMHgzYywweDIzLDB4MmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYwZDAsIDAsIHsweDA4LDB4MWQsMHhhOCwweDA0LDB4ZjEsMHgwMCwweDNlLDB4NDIsMHgwZiwweGIwLDB4MTMsMHhlYywweDAwLDB4ZmIsMHgwMCwweGJlIH0sCisgIDE2LCAweGYwZTAsIDAsIHsweGNjLDB4MWUsMHhiNiwweDA3LDB4ZWQsMHg4MCwweGZiLDB4MDAsMHgzNiwweDAwLDB4MGYsMHhiMCwweDQzLDB4NjgsMHgwMCwweGNiIH0sCisgIDE2LCAweGYwZjAsIDAsIHsweDMwLDB4M2UsMHhkOCwweDBmLDB4YjYsMHgwYiwweGVkLDB4NDAsMHhjYiwweDAwLDB4M2EsMHhjMCwweDJmLDB4YjYsMHgwMywweGMyIH0sCisgIDE2LCAweGYxMDAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZjIsMHg0MCwweGZiLDB4OTEsMHgzZCwweDRjIH0sCisgIDE2LCAweGYxMTAsIDAsIHsweDgwLDB4ZjgsMHgwMywweGRlLDB4NDAsMHhjNiwweDgwLDB4MWIsMHhmMCwweDRmLDB4ZmQsMHgwNywweGZmLDB4MDAsMHhjZCwweDgwIH0sCisgIDE2LCAweGYxMjAsIDAsIHsweDMzLDB4ZTAsMHgwYywweDY4LDB4MDMsMHhiYSwweDAwLDB4ZmYsMHg4MCwweDMzLDB4ZTAsMHgwNywweGY4LDB4MDMsMHgzZiwweDEwIH0sCisgIDE2LCAweGYxMzAsIDAsIHsweGNmLDB4ODAsMHgzZiwweGUwLDB4MGMsMHhmYywweDAzLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYxNDAsIDAsIHsweGE4LDB4MTEsMHg5MCwweDAwLDB4YjUsMHhjMCwweDJkLDB4NDAsMHgwOCwweDYyLDB4MDIsMHhkYywweDIwLDB4ZDYsMHgwMiwweDIxIH0sCisgIDE2LCAweGYxNTAsIDAsIHsweGM4LDB4OGYsMHg3MCwweDAyLDB4ZGMsMHg4MSwweGI1LDB4MDAsMHg4MSwweDQ0LDB4MGQsMHg2MSwweDIyLDB4MTgsMHgwNCwweGI3IH0sCisgIDE2LCAweGYxNjAsIDAsIHsweDAwLDB4MzUsMHhjMCwweDBiLDB4NzAsMHgwMiwweGJjLDB4MDAsMHhhNywweDAxLDB4MmQsMHhjMCwweDA4LDB4NzAsMHgwMywweGVhIH0sCisgIDE2LCAweGYxNzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTAsMHgwMSwweGI2LDB4MDEsMHgyZiwweGMwIH0sCisgIDE2LCAweGYxODAsIDAsIHsweDE4LDB4NzAsMHgwMiwweGRjLDB4MGEsMHg5NiwweDEwLDB4MjksMHhjMSwweDRiLDB4NzAsMHgwNiwweGRjLDB4MTAsMHg4NSwweDAwIH0sCisgIDE2LCAweGYxOTAsIDAsIHsweDI1LDB4ODAsMHgwOCwweDYwLDB4ODIsMHgxYSwweDIwLDB4YTMsMHgwMCwweDI1LDB4YzAsMHgwYiwweDMxLDB4MDIsMHg1YywweDQwIH0sCisgIDE2LCAweGYxYTAsIDAsIHsweDg3LDB4MDAsMHgyZCwweGMwLDB4MDgsMHg3MCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYxYjAsIDAsIHsweDIwLDB4MTQsMHhjOCwweDAwLDB4YjEsMHgwMCwweDJjLDB4NDAsMHg4OCwweDIwLDB4MDIsMHhlZCwweDAwLDB4OGEsMHg2MCwweDIwIH0sCisgIDE2LCAweGYxYzAsIDAsIHsweGMwLDB4MGEsMHgzMCwweDAyLDB4Y2MsMHgwNCwweGIxLDB4MDAsMHgyNCwweDAwLDB4MjgsMHgyNCwweDAyLDB4MGEsMHgwMCwweDMzIH0sCisgIDE2LCAweGYxZDAsIDAsIHsweDAwLDB4MjQsMHhjMCwweDBiLDB4YjAsMHgwMiwweGNjLDB4MDAsMHhhMywweDAwLDB4MmMsMHhjMCwweDg4LDB4MzAsMHgwMiwweDg4IH0sCisgIDE2LCAweGYxZTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YTAsMHgwMCwweGZiLDB4MDAsMHgzZSwweGM2IH0sCisgIDE2LCAweGYxZjAsIDAsIHsweDBjLDB4ODAsMHgwMywweGU1LDB4MDAsMHgwOSwweGM4LDB4YWIsMHhlMiwweDBiLDB4ZjAsMHgwMiwweGZjLDB4MDAsMHg0YSwweDAwIH0sCisgIDE2LCAweGYyMDAsIDAsIHsweDM2LDB4YzAsMHgwOCwweDkwLDB4MDMsMHhhNiwweDAwLDB4ZmYsMHgwMCwweDMzLDB4YzAsMHgwZiwweGYwLDB4MDMsMHg3YywweDAwIH0sCisgIDE2LCAweGYyMTAsIDAsIHsweDhmLDB4MDAsMHgyZiwweGMwLDB4MjgsMHhmMCwweDAyLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYyMjAsIDAsIHsweDgwLDB4MDAsMHhlMSwweDAwLDB4ZmEsMHgwMSwweDNlLDB4YzAsMHgwZiwweDgwLDB4MDMsMHhlYywweDAwLDB4ZjksMHg0MCwweDNlIH0sCisgIDE2LCAweGYyMzAsIDAsIHsweGMwLDB4MDcsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGZhLDB4MDAsMHgzYSwweDQwLDB4MGYsMHg5MCwweDIzLDB4ZTUsMHgwMCwweGZiIH0sCisgIDE2LCAweGYyNDAsIDAsIHsweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGFjLDB4MDAsMHhmYiwweDAwLDB4M2MsMHhjMCwweDBmLDB4YjAsMHgyMywweGUwIH0sCisgIDE2LCAweGYyNTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZjAsMHgwMCwweGZjLDB4MjAsMHgzZiwweGMwIH0sCisgIDE2LCAweGYyNjAsIDAsIHsweDBjLDB4YzgsMHgwMywweGZjLDB4MjAsMHhjZCwweDgxLDB4YjMsMHhjMiwweDRmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhjYSwweDAwIH0sCisgIDE2LCAweGYyNzAsIDAsIHsweDNjLDB4ODAsMHgwYywweGQwLDB4ODIsMHgzNiwweDAxLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHgzYywweDA4IH0sCisgIDE2LCAweGYyODAsIDAsIHsweGNmLDB4MDQsMHgzYSwweGMwLDB4NWMsMHhiMCwweDAzLDB4YzAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYyOTAsIDAsIHsweDgxLDB4MDQsMHg2MiwweDA0LDB4YjgsMHg0MCwweDJjLDB4NjAsMHgwOCwweDg5LDB4MDIsMHhlZSwweDgwLDB4YTksMHg2MCwweDJhIH0sCisgIDE2LCAweGYyYTAsIDAsIHsweGMwLDB4MGIsMHhiMCwweDAzLDB4OGMsMHgwMCwweGFhLDB4NDAsMHgyZSwweDAwLDB4MDgsMHgxMCwweDAyLDB4MjYsMHg4MSwweGViIH0sCisgIDE2LCAweGYyYjAsIDAsIHsweDAwLDB4MjYsMHhjMCwweDhiLDB4YjAsMHgxMywweDZjLDB4MDAsMHhkYiwweDAwLDB4MmUsMHhjMCwweDNkLDB4YjAsMHgwMiwweGUwIH0sCisgIDE2LCAweGYyYzAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MjMsMHgwMCwweGJiLDB4MDMsMHgyZSwweGM4IH0sCisgIDE2LCAweGYyZDAsIDAsIHsweDA5LDB4YjAsMHgwMiwweGVlLDB4MDAsMHg4YiwweDEwLDB4MjYsMHhjMCwweDBiLDB4YjAsMHgwMiwweGVjLDB4MDAsMHhhOCwweDAwIH0sCisgIDE2LCAweGYyZTAsIDAsIHsweDJlLDB4YzAsMHgwOCwweDg4LDB4MjIsMHhhNCwweDgwLDB4YmIsMHgwMCwweDJlLDB4YzAsMHg0YiwweGIwLDB4MjIsMHgwYywweDAwIH0sCisgIDE2LCAweGYyZjAsIDAsIHsweDhiLDB4MDAsMHgyZSwweGMwLDB4MGIsMHhiMCwweDAyLDB4ZTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYzMDAsIDAsIHsweDA4LDB4MDQsMHgwMCwweDAwLDB4YjIsMHgwMCwweDJlLDB4YzAsMHgyOSwweDI4LDB4MDIsMHhlYywweDAxLDB4YTAsMHgwMiwweDIwIH0sCisgIDE2LCAweGYzMTAsIDAsIHsweGMwLDB4MDksMHgzMCwweDAyLDB4Y2MsMHgwMCwweGEwLDB4MDAsMHgyYywweDQwLDB4MDgsMHgwMCwweDQyLDB4ODQsMHgwMCwweDkzIH0sCisgIDE2LCAweGYzMjAsIDAsIHsweDAwLDB4NmMsMHhjMCwweDBiLDB4MzAsMHgwNiwweDRkLDB4MDAsMHg5MywweDAwLDB4MmMsMHhjMCwweDA4LDB4MzAsMHgwMiwweGMyIH0sCisgIDE2LCAweGYzMzAsIDAsIHsweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjAsMHgwMCwweGY4LDB4MjAsMHgyZiwweGMwIH0sCisgIDE2LCAweGYzNDAsIDAsIHsweDBkLDB4YjAsMHgwMywweGVjLDB4MDAsMHhjYiwweDAwLDB4MzMsMHhjMCwweDBiLDB4ZjAsMHgwMywweGZjLDB4MTgsMHhlOCwweDAwIH0sCisgIDE2LCAweGYzNTAsIDAsIHsweDJlLDB4ODAsMHgwOCwweDgwLDB4MDMsMHhhNCwweDAwLDB4YmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4NDMsMHgzZCwweDExIH0sCisgIDE2LCAweGYzNjAsIDAsIHsweGNmLDB4MDMsMHgzZSwweGMxLDB4NWQsMHhmMCwweDIzLDB4YzAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYzNzAsIDAsIHsweGEwLDB4MWQsMHhmMCwweDAwLDB4ZmMsMHgxMCwweDNmLDB4NDAsMHgwZSwweGUwLDB4MDMsMHhmYywweDAwLDB4ZmMsMHgwMCwweDNmIH0sCisgIDE2LCAweGYzODAsIDAsIHsweGMwLDB4MGYsMHhmMCwweDAzLDB4YmMsMHgwMCwweGZjLDB4MDAsMHgzZiwweDAwLDB4MmYsMHhjMCwweDAzLDB4NzQsMHgwMCwweGVmIH0sCisgIDE2LCAweGYzOTAsIDAsIHsweDAwLDB4MjcsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MTgsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGU4IH0sCisgIDE2LCAweGYzYTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDE1LDB4ZmMsMHg4OCwweDljLDB4MjksMHgzZiwweDA4IH0sCisgIDE2LCAweGYzYjAsIDAsIHsweDBmLDB4ZDIsMHg4MywweGVjLDB4MDAsMHhmZiwweDA4LDB4M2YsMHgyOCwweDBmLDB4Y2EsMHgwMywweDNjLDB4NDEsMHhjZiwweDIwIH0sCisgIDE2LCAweGYzYzAsIDAsIHsweDczLDB4MmMsMHgwYywweGMwLDB4MDMsMHgzMCwweDIwLDB4Y2YsMHg2MCwweDMzLDB4ZDgsMHgwZiwweDc4LDB4MDMsMHgzZiwweDgwIH0sCisgIDE2LCAweGYzZDAsIDAsIHsweGRkLDB4OTIsMHgzMywweGM4LDB4MGYsMHg1MCwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYzZTAsIDAsIHsweDgwLDB4MTAsMHhlNSwweDQwLDB4ODgsMHg0MCwweDJlLDB4MDQsMHg4YiwweDk0LDB4MDIsMHhlNCwweDAwLDB4YjksMHgwMCwweDBlIH0sCisgIDE2LCAweGYzZjAsIDAsIHsweDdmLDB4OGYsMHg5ZSwweDgzLDB4NjUsMHg4MiwweGNmLDB4NjgsMHgzZSwweDUwLDB4OGQsMHgwNCwweDkyLDB4MmYsMHgwNCwweGQzIH0sCisgIDE2LCAweGY0MDAsIDAsIHsweDQwLDB4NzQsMHhkYywweDBkLDB4YTIsMHgwMiwweDIwLDB4NDAsMHg4OSwweDAwLDB4MjIsMHhmMCwweDBiLDB4OTgsMHgwMiwweDIwIH0sCisgIDE2LCAweGY0MTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzgsMHgwOSwweGEwLDB4ODUsMHgyYywweDAxIH0sCisgIDE2LCAweGY0MjAsIDAsIHsweDBiLDB4MDAsMHgxMCwweGNjLDB4NDAsMHhhMiwweDA4LDB4MmMsMHgwMCwweGRiLDB4MTEsMHgwMiwweDg5LDB4MDAsMHg5MywweDMwIH0sCisgIDE2LCAweGY0MzAsIDAsIHsweDIwLDB4MDUsMHgwOCwweDEzLDB4MDIsMHg4MCwweDA4LDB4YTMsMHg2MCwweDYwLDB4YzAsMHgwYSwweGIwLDB4ODIsMHgwOCwweDg0IH0sCisgIDE2LCAweGY0NDAsIDAsIHsweDgxLDB4MjAsMHgyMCwweGQwLDB4MGIsMHgxMCwweDAyLDB4YTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY0NTAsIDAsIHsweGMwLDB4MTUsMHhhNCwweDEyLDB4ODgsMHg4MCwweDZlLDB4MjAsMHgwYiwweDg4LDB4ODIsMHhlZSwweDAwLDB4YmEsMHg4MSwweDJlIH0sCisgIDE2LCAweGY0NjAsIDAsIHsweDYwLDB4NWEsMHg5OCwweDAyLDB4YTIsMHgwMCwweDhiLDB4MDAsMHgyYSwweDYwLDB4MDgsMHgxMSwweDFhLDB4MmMsMHgwMCwweGJiIH0sCisgIDE2LCAweGY0NzAsIDAsIHsweDAwLDB4MjIsMHhjMCwweDA4LDB4YjgsMHgwYSwweDI4LDB4MDAsMHg4MSwweDIwLDB4MDIsMHhjMCwweDBiLDB4OTAsMHgwMiwweGIwIH0sCisgIDE2LCAweGY0ODAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4ZWQsMHgwMCwweGQ5LDB4ODAsMHgzZSwweDIwIH0sCisgIDE2LCAweGY0OTAsIDAsIHsweDRmLDB4OTgsMHgwMCwweGViLDB4MjAsMHhmYiwweGUwLDB4MmUsMHg2MCwweDBiLDB4OGMsMHg2MiwweGFlLDB4MjAsMHg4YiwweDAwIH0sCisgIDE2LCAweGY0YTAsIDAsIHsweDIyLDB4NjAsMHgwOCwweGJjLDB4MDMsMHhhMCwweDIwLDB4ZWIsMHgwMCwweDIyLDB4YzEsMHgwYSwweDE4LDB4MGIsMHgyNSwweDAwIH0sCisgIDE2LCAweGY0YjAsIDAsIHsweGQ5LDB4MDAsMHhiMiwweGMwLDB4MGYsMHg5MCwweDBiLDB4OTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY0YzAsIDAsIHsweGUwLDB4MDEsMHg5NCwweDg4LDB4ZmYsMHgwMCwweDNmLDB4MDEsMHgwZiwweGQwLDB4MDEsMHhmMCwweDA4LDB4ZGQsMHgwMSwweDNmIH0sCisgIDE2LCAweGY0ZDAsIDAsIHsweDQyLDB4MDcsMHg0MCwweDAzLDB4NWMsMHgwMCwweGFmLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhmOCwweDAwLDB4ZjAsMHgwMCwweGRmIH0sCisgIDE2LCAweGY0ZTAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBmLDB4YzAsMHgyMywweGY0LDB4NTAsMHhmZCwweDgwLDB4M2YsMHhjMCwweDBmLDB4ZDAsMHgwMywweDc4IH0sCisgIDE2LCAweGY0ZjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4YWMsMHgwMCwweGQ5LDB4MDAsMHgzZSwweDQwIH0sCisgIDE2LCAweGY1MDAsIDAsIHsweDBmLDB4OTQsMHgwMywweGE4LDB4MjAsMHhjYSwweDQwLDB4M2EsMHg0MCwweDBmLDB4OTQsMHgwMywweGVhLDB4MDgsMHhmYiwweDAwIH0sCisgIDE2LCAweGY1MTAsIDAsIHsweDNhLDB4MDAsMHg0YywweGY2LDB4MjMsMHgyYywweDMwLDB4Y2IsMHgwMCwweDM2LDB4YzAsMHgwZCwweDkwLDB4MDMsMHhhMSwweDAyIH0sCisgIDE2LCAweGY1MjAsIDAsIHsweGQ5LDB4MDAsMHhiYSwweGMwLDB4MGYsMHg5OCwweDAzLDB4MTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY1MzAsIDAsIHsweGM4LDB4MDUsMHgyNCwweDAwLDB4OGEsMHgwMCwweDJlLDB4NDAsMHgwYiwweDk1LDB4MDIsMHhlMCwweDA4LDB4ODgsMHg4MCwweDIyIH0sCisgIDE2LCAweGY1NDAsIDAsIHsweDcwLDB4OGYsMHg4YywweDAyLDB4ZTAsMHgwMCwweGJmLDB4MDIsMHgyMCwweDAwLDB4MDgsMHhiOCwweDAyLDB4MGUsMHgwMCwweGRmIH0sCisgIDE2LCAweGY1NTAsIDAsIHsweDAwLDB4MjMsMHhkZCwweDA4LDB4OTgsMHg4MiwweDJhLDB4MDAsMHg4OSwweDgwLDB4MjMsMHhjMCwweDBiLDB4NTAsMHgxYSwweDMyIH0sCisgIDE2LCAweGY1NjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NDQsMHgwMCwweDgzLDB4MDUsMHgyNCwweDQxIH0sCisgIDE2LCAweGY1NzAsIDAsIHsweDA5LDB4MTAsMHgwMiwweGNlLDB4MDAsMHg4MywweDkwLDB4MmMsMHg4MCwweDFiLDB4MjQsMHg4MiwweGNjLDB4MDAsMHhiYiwweDAwIH0sCisgIDE2LCAweGY1ODAsIDAsIHsweDJjLDB4ODAsMHgwOCwweDA0LDB4MDgsMHgwNCwweDAxLDB4OGIsMHgwMCwweDIyLDB4YzAsMHgyOCwweDEyLDB4MDIsMHg2YywweDgwIH0sCisgIDE2LCAweGY1OTAsIDAsIHsweDgxLDB4NDgsMHgyNCwweGM0LDB4MGIsMHgxMCwweDAyLDB4MzgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY1YTAsIDAsIHsweDIwLDB4MDEsMHgzZSwweDQyLDB4ODYsMHg4MCwweDJkLDB4NjAsMHgwYiwweDY4LDB4MDIsMHhmNiwweDkwLDB4OGQsMHg4MCwweDIxIH0sCisgIDE2LCAweGY1YjAsIDAsIHsweDIyLDB4MGIsMHg1OCwweDAyLDB4ZDcsMHg0MCwweGI3LDB4OTAsMHgyMSwweGUwLDB4MDgsMHg0OSwweDkyLDB4MWUsMHg1MywweDk3IH0sCisgIDE2LCAweGY1YzAsIDAsIHsweDgxLDB4MjEsMHhlMCwweDQ4LDB4YzgsMHgwYSwweDUyLDB4MjIsMHg4NSwweDg4LDB4MjUsMHhlMCwweDBiLDB4NTgsMHgwMiwweDA4IH0sCisgIDE2LCAweGY1ZDAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweDgzLDB4MDAsMHgzNCwweGMwIH0sCisgIDE2LCAweGY1ZTAsIDAsIHsweDBmLDB4MDAsMHgwMywweGNlLDB4MjAsMHhjMywweDMwLDB4N2MsMHg5NCwweDBiLDB4MzQsMHg4MywweGNjLDB4MTQsMHhmMywweDAyIH0sCisgIDE2LCAweGY1ZjAsIDAsIHsweDNjLDB4ODAsMHgwYywweDA0LDB4MDMsMHgwNCwweDYwLDB4YzMsMHgwMCwweGIwLDB4YzAsMHgwYywweDEwLDB4MDMsMHhlYywweDAwIH0sCisgIDE2LCAweGY2MDAsIDAsIHsweGM5LDB4MDAsMHgzYywweGM0LDB4MGYsMHgxMSwweDAzLDB4MTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY2MTAsIDAsIHsweDQwLDB4MWQsMHg5YywweDAwLDB4ZWUsMHgwMSwweDNmLDB4YzAsMHg0ZiwweGUxLDB4MDMsMHhkNCwweDQwLDB4ZjUsMHgxNiwweDdhIH0sCisgIDE2LCAweGY2MjAsIDAsIHsweGMwLDB4NGUsMHhmMCwweDAzLDB4ZjQsMHgxMCwweDM3LDB4MDUsMHgzZCwweGMwLDB4MGYsMHhjMCwweDBiLDB4ZGMsMHg0MCwweGZmIH0sCisgIDE2LCAweGY2MzAsIDAsIHsweDAwLDB4M2IsMHhjMiwweDBlLDB4ZDAsMHgwNywweGJjLDB4MDIsMHhlZiwweDAwLDB4M2IsMHhjNiwweDBmLDB4ZDAsMHgwMywweGQwIH0sCisgIDE2LCAweGY2NDAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZjQsMHgwMCwweGRkLDB4ODQsMHgzMywweDgwIH0sCisgIDE2LCAweGY2NTAsIDAsIHsweDA0LDB4ZjAsMHgwMywweDZjLDB4MDIsMHhjYiwweDAyLDB4N2UsMHhjMCwweDFmLDB4YTAsMHg1MywweGVjLDB4MDAsMHhjYiwweDIwIH0sCisgIDE2LCAweGY2NjAsIDAsIHsweDM0LDB4NDAsMHgwYywweGQwLDB4MGIsMHgyMCwweDEwLDB4ZWIsMHgwMCwweDFlLDB4ZTAsMHgwZiwweDMwLDB4MGIsMHgyYywweDAwIH0sCisgIDE2LCAweGY2NzAsIDAsIHsweGMxLDB4MDAsMHgzMiwweGMwLDB4MGYsMHg5MSwweDAzLDB4ZWEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY2ODAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDAwLDB4ODcsMHgwMCwweDIxLDB4ODAsMHgwOCwweDYwLDB4MDAsMHgxNCwweDAwLDB4ODUsMHgwMCwweDJkIH0sCisgIDE2LCAweGY2OTAsIDAsIHsweDgwLDB4MGIsMHg3MCwweDUyLDB4ZDQsMHgwNCwweDgzLDB4MjgsMHgyOSwweGMwLDB4MjgsMHg1MCwweDAzLDB4NTAsMHgwMCwweDg3IH0sCisgIDE2LCAweGY2YTAsIDAsIHsweDQwLDB4MjUsMHhjOCwweDBmLDB4NjAsMHgwMiwweDA0LDB4MDAsMHhhNywweDAwLDB4M2QsMHhjOCwweDBiLDB4NTIsMHgwMiwweGQyIH0sCisgIDE2LCAweGY2YjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OGUsMHgwMCwweDk1LDB4ODAsMHgyMSwweGUwIH0sCisgIDE2LCAweGY2YzAsIDAsIHsweDA5LDB4MzgsMHgwMiwweDFlLDB4MTEsMHhhNywweDgwLDB4MmQsMHhmMCwweDBiLDB4NzgsMHg1MiwweGNlLDB4MGEsMHg5NywweDk1IH0sCisgIDE2LCAweGY2ZDAsIDAsIHsweDIxLDB4ZTAsMHgxOSwweDVjLDB4MDIsMHgwZSwweDAwLDB4YTcsMHg4MCwweDI5LDB4YzgsMHgwYiwweGY4LDB4MDIsMHgxZSwweDIwIH0sCisgIDE2LCAweGY2ZTAsIDAsIHsweDhkLDB4ODAsMHgyMSwweGUwLDB4MGIsMHg1OCwweDAyLDB4ZjAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY2ZjAsIDAsIHsweDQ4LDB4MTQsMHhjYywweDAwLDB4ODIsMHhlMCwweGEwLDB4ZTgsMHgyOSwweDMwLDB4MDYsMHgwZSwweDUwLDB4YWIsMHg4MCwweDJjIH0sCisgIDE2LCAweGY3MDAsIDAsIHsweGYwLDB4MGIsMHgzMSwweDQyLDB4Y2MsMHgwMCwweDkzLDB4MDAsMHgyOCwweGM0LDB4MDksMHg5OCwweDAyLDB4NGMsMHgyOCwweDgzIH0sCisgIDE2LCAweGY3MTAsIDAsIHsweDAwLDB4MjQsMHhjMCwweDBhLDB4YjAsMHgwMiwweDBkLDB4MDAsMHhhMiwweDU4LDB4MjgsMHhjMCwweDBiLDB4MTAsMHgwMiwweGQyIH0sCisgIDE2LCAweGY3MjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YjksMHgwMCwweGRlLDB4ODAsMHgzMSwweGEwIH0sCisgIDE2LCAweGY3MzAsIDAsIHsweDA5LDB4ZTIsMHgwYiwweDc4LDB4MDQsMHhlZSwweGE0LDB4MmYsMHhhNCwweDhiLDB4ZWMsMHgwMiwweGQ4LDB4MDAsMHhkYSwweDAwIH0sCisgIDE2LCAweGY3NDAsIDAsIHsweDI3LDB4ODEsMHgwZCwweGVjLDB4MDYsMHgxYiwweDAwLDB4ZWEsMHgwNCwweDNlLDB4ODAsMHgwYiwweGUwLDB4MDMsMHgzYiwweDAwIH0sCisgIDE2LCAweGY3NTAsIDAsIHsweGNlLDB4YzAsMHgyMiwweDgwLDB4MGYsMHhhMCwweDAzLDB4ZmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY3NjAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDgwLDB4ZjgsMHgxMCwweDNlLDB4MDUsMHgwZSwweDg4LDB4MDMsMHhlMCwweDA4LDB4OTgsMHg0MCwweDNlIH0sCisgIDE2LCAweGY3NzAsIDAsIHsweDAwLDB4MGYsMHg4NCwweDgzLDB4ZTEsMHg0MCwweGU4LDB4MDAsMHgzYSwweDAyLDB4MGUsMHg4MCwweDQzLDB4ZTEsMHg0MCwweGY4IH0sCisgIDE2LCAweGY3ODAsIDAsIHsweDAwLDB4MzYsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MjAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH0sCisgIDE2LCAweGY3OTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4YzQsMHgwMCwweGU5LDB4MDAsMHgzZSwweDQwIH0sCisgIDE2LCAweGY3YTAsIDAsIHsweDBjLDB4OTAsMHgwMywweDA0LDB4MjAsMHhlOSwweDkwLDB4MzIsMHg2OCwweDBlLDB4OTgsMHgwMywweGE0LDB4MDAsMHhjMSwweDAwIH0sCisgIDE2LCAweGY3YjAsIDAsIHsweDMwLDB4NDAsMHgwYywweDk0LDB4ODMsMHgyNCwweDA4LDB4YzksMHgwMCwweDNlLDB4NDAsMHgwYywweDkwLDB4MDMsMHhhNCwweDAwIH0sCisgIDE2LCAweGY3YzAsIDAsIHsweGM5LDB4MDAsMHgzMCwweDUwLDB4MGMsMHgxYSwweDAzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY3ZDAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHg0MCwweDJlLDB4NTAsMHgyOCwweDkwLDB4MGEsMHgyNCwweDA4LDB4ODksMHgwNiwweDE2IH0sCisgIDE2LCAweGY3ZTAsIDAsIHsweDYxLDB4MGIsMHg5YywweDAyLDB4ZTQsMHgyMCwweGE5LDB4MDAsMHgzNiwweDQwLDB4MGQsMHg5MCwweDAyLDB4MjcsMHg2MCwweGE5IH0sCisgIDE2LCAweGY3ZjAsIDAsIHsweDAwLDB4MmUsMHg0MCwweDI4LDB4OTAsMHgxYSwweDI0LDB4MDAsMHg4OSwweDAwLDB4MzYsMHg0MCwweDI4LDB4OTgsMHgwMiwweDIwIH0sCisgIDE2LCAweGY4MDAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MmMsMHgwMCwweGE5LDB4MDgsMHgyZSwweGMyIH0sCisgIDE2LCAweGY4MTAsIDAsIHsweDA5LDB4MTAsMHgwMCwweDI0LDB4MDAsMHhhOSwweDAwLDB4MDYsMHg0MCwweDg5LDB4OTYsMHgwNiwweGU2LDB4MDAsMHg4OSwweDAwIH0sCisgIDE2LCAweGY4MjAsIDAsIHsweDIyLDB4YzAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDAyLDB4ODksMHgwMCwweDI0LDB4NDAsMHgwOCwweDkwLDB4MDIsMHgwYywweDA2IH0sCisgIDE2LCAweGY4MzAsIDAsIHsweDgzLDB4MDAsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY4NDAsIDAsIHsweDA4LDB4MDQsMHgwNSwweDAwLDB4ODEsMHg0NCwweDJjLDB4NTAsMHgwOCwweDE0LDB4MDIsMHgwNSwweDgwLDB4ODEsMHgyMCwweDY0IH0sCisgIDE2LCAweGY4NTAsIDAsIHsweDcwLDB4MWIsMHgxNCwweDAyLDB4ZTQsMHg4MCwweGExLDB4MjAsMHg2NCwweDQwLDB4MTksMHgxMiwweDBhLDB4MDQsMHg4MCwweGExIH0sCisgIDE2LCAweGY4NjAsIDAsIHsweDAwLDB4MmMsMHg1MCwweDE4LDB4MTQsMHgwMiwweDg1LDB4MDAsMHg4MSwweDQwLDB4MjQsMHg0MCwweDQwLDB4MTAsMHgwMiwweDAyIH0sCisgIDE2LCAweGY4NzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGUwLDB4MDAsMHgzYywweDAwIH0sCisgIDE2LCAweGY4ODAsIDAsIHsweDBkLDB4ODAsMHgwMiwweDAwLDB4MDAsMHhhYSwweDUwLDB4MzYsMHgwMCwweDBmLDB4ODAsMHgwMywweGUxLDB4NDAsMHhjOCwweDUyIH0sCisgIDE2LCAweGY4OTAsIDAsIHsweDcyLDB4MTQsMHgwYywweDA1LDB4MTYsMHgyMCwweDA4LDB4YzgsMHg1MCwweDNlLDB4MDEsMHgwYywweDgwLDB4MDMsMHhhMCwweDA0IH0sCisgIDE2LCAweGY4YTAsIDAsIHsweGM4LDB4MDAsMHhiMiwweDAwLDB4MGMsMHg4MCwweDBiLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY4YjAsIDAsIHsweDk4LDB4MTksMHhmNSwweDAyLDB4ZmQsMHg0MCwweDNmLDB4ZDAsMHgwZiwweGQ0LDB4MjMsMHhmNCwweDQ0LDB4ZmQsMHgxNCwweDdmIH0sCisgIDE2LCAweGY4YzAsIDAsIHsweDUwLDB4MGYsMHhkNCwweDA3LDB4ZjQsMHg0MCwweGY5LDB4MTAsMHgzZiwweDUwLDB4MDcsMHhkMSwweDIzLDB4ZjQsMHg0MCwweGY5IH0sCisgIDE2LCAweGY4ZDAsIDAsIHsweDQwLDB4MWUsMHg1MCwweDA3LDB4ZDAsMHgwYiwweDc1LDB4MDAsMHhmZCwweDAyLDB4M2UsMHg1MCwweDBmLDB4ZDQsMHgwMywweGU2IH0sCisgIDE2LCAweGY4ZTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZjYsMHgwMCwweGM5LDB4YTgsMHgzZSwweDcyIH0sCisgIDE2LCAweGY4ZjAsIDAsIHsweDBmLDB4OTgsMHgwMywweGU2LDB4YzAsMHhmZCwweGEwLDB4YjMsMHg0MCwweDBmLDB4ZDAsMHgwMywweDc3LDB4ODAsMHhjZCwweDkwIH0sCisgIDE2LCAweGY5MDAsIDAsIHsweDdmLDB4NDAsMHgwZiwweGRhLDB4YTMsMHgxNiwweDkwLDB4YTksMHhjMCwweDMyLDB4NjAsMHg0YywweGIxLDB4MDMsMHgyNCwweDAwIH0sCisgIDE2LCAweGY5MTAsIDAsIHsweGMxLDB4MDAsMHgzMywweDZhLDB4MGIsMHhkYSwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY5MjAsIDAsIHsweDM4LDB4MTAsMHhlMywweDQwLDB4ODgsMHhlMCwweDJlLDB4MzAsMHgwYiwweDhkLDB4MDIsMHhmMywweDQwLDB4YjgsMHhlOCwweDc2IH0sCisgIDE2LCAweGY5MzAsIDAsIHsweDAwLDB4NGYsMHg4MCwweDBhLDB4MjIsMHg4MCwweDg4LDB4OTAsMHg2ZSwweDI4LDB4OGYsMHg4YSwweDAzLDB4NjEsMHg0NCwweGY4IH0sCisgIDE2LCAweGY5NDAsIDAsIHsweGUxLDB4M2UsMHgyYSwweDA4LDB4ODgsMHgwMywweDQyLDB4YTAsMHhkYywweGEwLDB4M2UsMHgxMCwweDBiLDB4ODUsMHgwYSwweDBlIH0sCisgIDE2LCAweGY5NTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHhhMCwweDg1LDB4MDgsMHgyZCwweDQ4IH0sCisgIDE2LCAweGY5NjAsIDAsIHsweDFiLDB4NTIsMHg4MiwweGQ0LDB4ODAsMHhiMSwweDE0LDB4MjAsMHg0MCwweDBiLDB4MTgsMHgwMiwweDA1LDB4ODIsMHg4MSwweDAwIH0sCisgIDE2LCAweGY5NzAsIDAsIHsweDZjLDB4NDIsMHgwYiwweDEyLDB4ODIsMHgwNCwweDAwLDB4YTEsMHg2MCwweDIxLDB4NTAsMHgwYiwweDUwLDB4MDIsMHgxNCwweDkwIH0sCisgIDE2LCAweGY5ODAsIDAsIHsweDk1LDB4MmMsMHgyOCwweDQwLDB4MGIsMHgxMCwweDAyLDB4MDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY5OTAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAxLDB4OGQsMHg0NCwweDJmLDB4NDAsMHgwYiwweGQ0LDB4MDIsMHhmNCwweDA0LDB4YjksMHgwOCwweDIyIH0sCisgIDE2LCAweGY5YTAsIDAsIHsweDQwLDB4MGEsMHg5MiwweDAyLDB4MmMsMHg4NCwweDg5LDB4MDAsMHgyZSwweDQwLDB4MGEsMHgxNCwweDAyLDB4NmMsMHg4MCwweGE5IH0sCisgIDE2LCAweGY5YjAsIDAsIHsweDAxLDB4MmEsMHg0MCwweDA5LDB4NTAsMHgwYSwweDVjLDB4MDIsMHg4ZCwweDYwLDB4MmEsMHg0MCwweDBiLDB4OTAsMHg0MiwweDA2IH0sCisgIDE2LCAweGY5YzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTYsMHg2MiwweGM5LDB4MDIsMHgzZSwweDU0IH0sCisgIDE2LCAweGY5ZDAsIDAsIHsweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDQwLDB4MjIsMHg0NiwweDBiLDB4OTgsMHgwMywweDY3LDB4MjAsMHhjOSwweDAxIH0sCisgIDE2LCAweGY5ZTAsIDAsIHsweDJlLDB4NjksMHgwYiwweDk0LDB4MGIsMHgyNSwweDIwLDB4YTksMHgwMCwweDIyLDB4NDAsMHgyZCwweDkyLDB4MGEsMHgyNiwweDIyIH0sCisgIDE2LCAweGY5ZjAsIDAsIHsweDk5LDB4MDAsMHgyYSwweDQwLDB4OGYsMHg5MCwweDAzLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZhMDAsIDAsIHsweDI4LDB4MDEsMHg4NiwweDAyLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNiwweDgwLDB4ZjEsMHhhMCwweDNlIH0sCisgIDE2LCAweGZhMTAsIDAsIHsweDYyLDB4MGYsMHg5OCwweDgzLDB4YzYsMHgyMCwweGY5LDB4MDAsMHgzZSwweDQ5LDB4MGYsMHg5MCwweDgzLDB4ZTQsMHgwMCwweDcxIH0sCisgIDE2LCAweGZhMjAsIDAsIHsweDAyLDB4M2UsMHg0MCwweDBlLDB4OTAsMHgwYiwweGU2LDB4ODAsMHhmOSwweDgwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGNhIH0sCisgIDE2LCAweGZhMzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgxMCwweGM4LDB4MDAsMHgzZSwweDAwIH0sCisgIDE2LCAweGZhNDAsIDAsIHsweDRmLDB4ODAsMHg0MywweGIwLDB4MDAsMHhjOCwweDQxLDB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweDIxLDB4MDIsMHhjOCwweDAyIH0sCisgIDE2LCAweGZhNTAsIDAsIHsweDNlLDB4MTAsMHg0YywweDgwLDB4MDMsMHgwMSwweDIwLDB4YzgsMHgwMCwweDNiLDB4MDAsMHgwYywweGMwLDB4MDMsMHhiMCwweDAwIH0sCisgIDE2LCAweGZhNjAsIDAsIHsweGNjLDB4MDQsMHgzMiwweDAwLDB4MGYsMHg4MCwweDAzLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZhNzAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDAwLDB4OGEsMHg4MCwweDJlLDB4ODAsMHgwYiwweGEwLDB4MDIsMHhmOCwweDA0LDB4OGUsMHgwMCwweDIzIH0sCisgIDE2LCAweGZhODAsIDAsIHsweGIyLDB4MGUsMHhlMCwweDgyLDB4ZjksMHgwNCwweDhhLDB4MDAsMHgyZSwweDgxLDB4MGMsMHhlMCwweDBhLDB4M2EsMHg4MCwweGRhIH0sCisgIDE2LCAweGZhOTAsIDAsIHsweDAwLDB4MjIsMHhiNiwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDAsMHg4ZSwweDAwLDB4MmEsMHg4MCwweDBiLDB4NjAsMHgwYiwweDBhIH0sCisgIDE2LCAweGZhYTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NDQsMHgwMiwweDkzLDB4ODEsMHgyYywweGMwIH0sCisgIDE2LCAweGZhYjAsIDAsIHsweDRiLDB4MzAsMHgwMiwweGM4LDB4MDAsMHg4MywweGNhLDB4MjAsMHhlMCwweDE5LDB4YjAsMHgwNiwweDhjLDB4MDAsMHg4MSwweDA0IH0sCisgIDE2LCAweGZhYzAsIDAsIHsweDQ0LDB4NDAsMHgwOCwweDM0LDB4MDIsMHgwZCwweDAwLDB4ODMsMHgwMCwweDJhLDB4MDAsMHgwOCwweDAwLDB4MGEsMHg4MCwweDQwIH0sCisgIDE2LCAweGZhZDAsIDAsIHsweDg4LDB4MDAsMHgyMCwweGMwLDB4MGIsMHgzMCwweDAyLDB4NGIsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZhZTAsIDAsIHsweGEwLDB4MDEsMHgwNCwweDAyLDB4OTcsMHgwOCwweDJkLDB4YzAsMHgwYiwweDYwLDB4MDYsMHhjYSwweDAwLDB4ODMsMHgwOSwweDIxIH0sCisgIDE2LCAweGZhZjAsIDAsIHsweGMwLDB4MGEsMHg3MCwweDAyLDB4ZGMsMHgwMCwweDg1LDB4MzEsMHgyZCwweDY4LDB4MDksMHgzMCwweDAyLDB4MWMsMHgxNCwweDkzIH0sCisgIDE2LCAweGZiMDAsIDAsIHsweDIwLDB4MjAsMHhjMCwweDA4LDB4ZjAsMHg0MiwweDljLDB4MDIsMHg4ZiwweDAwLDB4MjksMHg0MCwweDAzLDB4NzAsMHgxMiwweDI4IH0sCisgIDE2LCAweGZiMTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MTYsMHgwMCwweDk2LDB4ODQsMHgzZCwweGEwIH0sCisgIDE2LCAweGZiMjAsIDAsIHsweDBmLDB4NzgsMHgwMywweDlhLDB4MDIsMHg4NywweDgwLDB4YjEsMHhlMCwweDBiLDB4NzgsMHgwMywweGI2LDB4MDAsMHhjNSwweGEwIH0sCisgIDE2LCAweGZiMzAsIDAsIHsweDM1LDB4NjEsMHgwYywweDc4LDB4MTMsMHgxZSwweDAyLDB4YzcsMHg4MCwweDI5LDB4MDAsMHgwYywweDQ4LDB4MDMsMHg5MCwweDAwIH0sCisgIDE2LCAweGZiNDAsIDAsIHsweGM0LDB4ODAsMHgzMSwweDYwLDB4MGYsMHg1OCwweDAzLDB4NmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZiNTAsIDAsIHsweDA4LDB4MWQsMHhhNCwweDAwLDB4ZWEsMHgwMCwweDNlLDB4ODAsMHgwZiwweGEwLDB4MDMsMHhlOCwweDA4LDB4ZmIsMHgwMCwweDNlIH0sCisgIDE2LCAweGZiNjAsIDAsIHsweDgwLDB4MGYsMHg5MCwweDEzLDB4ZTQsMHgwOCwweGY5LDB4MDAsMHgzYywweDUwLDB4MmUsMHhmMCwweDAzLDB4ZTgsMHgwOCwweGZiIH0sCisgIDE2LCAweGZiNzAsIDAsIHsweDQwLDB4M2UsMHhjMCwweDBiLDB4MzAsMHgxMywweDZjLDB4MDAsMHhmYiwweDAwLDB4M2UsMHg0MCwweDBmLDB4MzAsMHgwMywweGMyIH0sCisgIDE2LCAweGZiODAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZDYsMHgwMCwweGNkLDB4ODAsMHgzMywweGUwIH0sCisgIDE2LCAweGZiOTAsIDAsIHsweDBjLDB4ZjgsMHgwMywweGZhLDB4MDAsMHhmZCwweDgwLDB4M2YsMHhhMCwweDBkLDB4ZjgsMHgwMywweGZhLDB4NDAsMHhjZCwweGQwIH0sCisgIDE2LCAweGZiYTAsIDAsIHsweDc3LDB4N2UsMHgwYywweGU4LDB4NDMsMHgxZSwweDAwLDB4Y2YsMHhkOCwweDNmLDB4ZTAsMHgwYywweGM4LDB4MDMsMHgzYSwweGM0IH0sCisgIDE2LCAweGZiYjAsIDAsIHsweGNjLDB4ODAsMHgzMywweGUwLDB4MGMsMHhmOCwweDAzLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZiYzAsIDAsIHsweGE4LDB4MTEsMHg5NCwweDAyLDB4OGQsMHgwMCwweDIxLDB4YzAsMHgwOCwweDYwLDB4MDMsMHhkOCwweDEwLDB4MzUsMHgyMCwweDhiIH0sCisgIDE2LCAweGZiZDAsIDAsIHsweGQ0LDB4MGQsMHg2NCwweDAzLDB4ZDgsMHhjMCwweDg1LDB4MDAsMHgyZiwweDRlLDB4MDcsMHg2NCwweDAyLDB4OWMsMHgwMiwweGQ3IH0sCisgIDE2LCAweGZiZTAsIDAsIHsweDMwLDB4MmYsMHgwNCwweDBkLDB4ZjEsMHgwYiwweDU0LDB4NDAsMHhhZiwweDAwLDB4MzUsMHg0MCwweDA4LDB4NzAsMHgwMiwweDJhIH0sCisgIDE2LCAweGZiZjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTQsMHg0MCwweDg0LDB4MTgsMHgyMSwweDgwIH0sCisgIDE2LCAweGZjMDAsIDAsIHsweDA4LDB4NzAsMHgwMiwweGRhLDB4MjAsMHhiNSwweDAwLDB4MDksMHgwMCwweDA4LDB4NzAsMHgwMiwweGQ0LDB4MDQsMHg4NSwweDAwIH0sCisgIDE2LCAweGZjMTAsIDAsIHsweDZkLDB4NGMsMHg4OSwweDYwLDB4MDIsMHg1YywweDQwLDB4OTcsMHgwMCwweDZkLDB4YzAsMHgwOSwweDQwLDB4MDIsMHg1OCwweDgwIH0sCisgIDE2LCAweGZjMjAsIDAsIHsweDg0LDB4ODgsMHgyNSwweDQwLDB4MDgsMHhkMCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZjMzAsIDAsIHsweDIwLDB4MTQsMHhjNiwweDQ4LDB4ODAsMHgwMCwweDIwLDB4ODAsMHgwOCwweGFjLDB4MDIsMHhhOCwweDAwLDB4YjEsMHgwMCwweGE4IH0sCisgIDE2LCAweGZjNDAsIDAsIHsweDg4LDB4MDksMHgyMiwweDAyLDB4ODYsMHg0MiwweDgxLDB4MDAsMHg2YywweDUyLDB4MGIsMHgyMCwweDAyLDB4YzcsMHg1MiwweDgzIH0sCisgIDE2LCAweGZjNTAsIDAsIHsweDAwLDB4MmMsMHgwMCwweDA4LDB4MzQsMHg4MiwweDY3LDB4MDAsMHhhMywweDgwLDB4MjAsMHg0MCwweDA4LDB4MzAsMHgwMiwweDA4IH0sCisgIDE2LCAweGZjNjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YTMsMHgwMCwweGNiLDB4YzAsMHhiMiwweDQwIH0sCisgIDE2LCAweGZjNzAsIDAsIHsweDJjLDB4OTAsMHg4MiwweGU2LDB4MDAsMHhiYiwweDgwLDB4YmUsMHg3OCwweDA4LDB4OGUsMHgwMiwweGVlLDB4MDAsMHg4ZCwweDAwIH0sCisgIDE2LCAweGZjODAsIDAsIHsweDI3LDB4NjAsMHgwZCwweDkwLDB4MGEsMHg2ZiwweDAwLDB4OWYsMHgwMiwweDJlLDB4MDAsMHgwOSwweGI0LDB4MDMsMHg2NywweDgwIH0sCisgIDE2LCAweGZjOTAsIDAsIHsweGNhLDB4NDAsMHhlNCwweGMwLDB4MGMsMHgzMCwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZjYTAsIDAsIHsweDgwLDB4MDAsMHhlMCwweDgwLDB4ZmIsMHgyMiwweDNlLDB4NDAsMHgwZiwweDgwLDB4MTMsMHhlNCwweDAwLDB4ZmIsMHg4MCwweDNlIH0sCisgIDE2LCAweGZjYjAsIDAsIHsweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTUsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGUsMHg3MCwweDIzLDB4YWMsMHgyMCwweGZiIH0sCisgIDE2LCAweGZjYzAsIDAsIHsweDAwLDB4M2UsMHhjMCwweDhmLDB4ODAsMHgwMywweGU5LDB4MjAsMHhmOSwweDA4LDB4M2UsMHg0MCwweDBmLDB4YjAsMHgxMywweGUwIH0sCisgIDE2LCAweGZjZDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZjAsMHgwMCwweGM2LDB4MDAsMHgzMiwweDAwIH0sCisgIDE2LCAweGZjZTAsIDAsIHsweDBmLDB4ZDEsMHg4MywweDM0LDB4NDAsMHhjZiwweDAwLDB4M2QsMHg0MCwweDBjLDB4ZDAsMHgwMywweGRlLDB4NTAsMHgwZCwweDAwIH0sCisgIDE2LCAweGZjZjAsIDAsIHsweDczLDB4NDAsMHgwYywweGQxLDB4MDMsMHg3YywweDQwLDB4ODcsMHgwMiwweGIzLDB4MDAsMHgwZCwweGY0LDB4MDMsMHgyNCwweDAwIH0sCisgIDE2LCAweGZkMDAsIDAsIHsweGNlLDB4MjAsMHgzMiwweDQwLDB4MGMsMHhkMCwweDAzLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZkMTAsIDAsIHsweDgxLDB4MDQsMHg2MSwweDIyLDB4OGEsMHgwMCwweDIyLDB4MDAsMHgwYiwweDgwLDB4NDAsMHgyNSwweDAwLDB4ODksMHhjMywweDJlIH0sCisgIDE2LCAweGZkMjAsIDAsIHsweDIwLDB4MGEsMHg5OCwweDAzLDB4YTEsMHgwMCwweDg5LDB4MDAsMHgzNiwweDQwLDB4ODgsMHg5NCwweDAyLDB4MGYsMHgwMSwweGFiIH0sCisgIDE2LCAweGZkMzAsIDAsIHsweDAwLDB4MzIsMHhjMCwweDA4LDB4MDQsMHgwYSwweDI5LDB4MDAsMHhhOSwweDAyLDB4YTIsMHg0MCwweDBkLDB4YjAsMHgwYSwweDIwIH0sCisgIDE2LCAweGZkNDAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MDAsMHgwMCwweDg5LDB4MDAsMHgyMiwweDYxIH0sCisgIDE2LCAweGZkNTAsIDAsIHsweDBiLDB4OTAsMHgwMiwweDI1LDB4MDEsMHg5YiwweDg4LDB4MmUsMHg2MCwweDA4LDB4ODgsMHgwMiwweGU4LDB4MDAsMHhiMSwweDAyIH0sCisgIDE2LCAweGZkNjAsIDAsIHsweDI0LDB4NDAsMHgxOCwweDkwLDB4MDIsMHgyYywweDAwLDB4YWIsMHgwMSwweDIwLDB4YzEsMHgwOCwweGI0LDB4NDIsMHgyYywweDAwIH0sCisgIDE2LCAweGZkNzAsIDAsIHsweDgyLDB4MDAsMHgyMiwweGMwLDB4MDgsMHhiMCwweDAyLDB4MjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZkODAsIDAsIHsweDA4LDB4MDQsMHgwMCwweDAwLDB4MDEsMHgwMCwweDIwLDB4NDAsMHgwYiwweDAwLDB4MGEsMHgwNCwweDQ2LDB4ODMsMHgwMSwweDJjIH0sCisgIDE2LCAweGZkOTAsIDAsIHsweDQwLDB4MWEsMHgwMCwweDA2LDB4ODAsMHgwMCwweDgxLDB4MDAsMHgyNCwweDQwLDB4MDgsMHgyMCwweDBhLDB4MGMsMHgwMSwweGEzIH0sCisgIDE2LCAweGZkYTAsIDAsIHsweDAwLDB4MjQsMHgwMCwweDA4LDB4ODAsMHgwMiwweDAwLDB4MDAsMHhhMSwweDAwLDB4MjAsMHg0MCwweDA5LDB4MzAsMHgwMiwweDAyIH0sCisgIDE2LCAweGZkYjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjAsMHgwMiwweGM4LDB4MDAsMHgyMiwweDAwIH0sCisgIDE2LCAweGZkYzAsIDAsIHsweDBmLDB4OTAsMHgwMiwweDI1LDB4MDAsMHhkYSwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMiwweGNjLDB4MDAsMHhmZCwweDAwIH0sCisgIDE2LCAweGZkZDAsIDAsIHsweDM3LDB4NDAsMHgwYywweDEwLDB4MTMsMHgyYywweDAyLDB4YWYsMHgwMCwweDMyLDB4YzAsMHgwZCwweGIwLDB4MDMsMHgyYywweDAwIH0sCisgIDE2LCAweGZkZTAsIDAsIHsweGNhLDB4MDAsMHgzMiwweDQwLDB4NGMsMHg5MCwweDBiLDB4MDAsMHgwMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZkZjAsIDAsIHsweGEwLDB4MWQsMHhmMCwweDAwLDB4ZmMsMHgwMCwweDNmLDB4MDAsMHgwNywweGMwLDB4MDMsMHhmNCwweDFjLDB4ZjQsMHgwMCwweDNmIH0sCisgIDE2LCAweGZlMDAsIDAsIHsweDAwLDB4MWYsMHhjMCwweDIzLDB4YjAsMHgwMiwweDlkLDB4MDEsMHgzZiwweDQwLDB4OGYsMHhjMCwweDA3LDB4ZmMsMHgwMiwweGZmIH0sCisgIDE2LCAweGZlMTAsIDAsIHsweDAwLDB4N2IsMHgwMCwweDBmLDB4YzAsMHgwMywweGYwLDB4MDAsMHhmZCwweDAwLDB4M2YsMHg0MCwweDBmLDB4NzAsMHgwMywweGU4IH0sCisgIDE2LCAweGZlMjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmEsMHgwMCwweGNiLDB4ODAsMHgzZiwweDI0IH0sCisgIDE2LCAweGZlMzAsIDAsIHsweDBhLDB4YzEsMHgwMywweGZjLDB4MjQsMHhjZCwweDIwLDB4MzcsMHgwYSwweDBjLDB4YzIsMHg4MywweDMwLDB4ODAsMHhkYywweDAyIH0sCisgIDE2LCAweGZlNDAsIDAsIHsweDNmLDB4Y2MsMHgwZCwweGQ5LDB4MDMsMHgzYywweDU4LDB4ZGYsMHgzMCwweDMzLDB4YzgsMHgwZCwweGY0LDB4MjMsMHgzYywweDQwIH0sCisgIDE2LCAweGZlNTAsIDAsIHsweGZmLDB4MDAsMHgzZiwweGM1LDB4NGYsMHhmMCwweDIzLDB4YjAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZlNjAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAyLDB4MGIsMHg4MiwweDJlLDB4MDgsMHgwZCwweGI3LDB4MDIsMHhmZCwweDAwLDB4ODMsMHgxOCwweDBhIH0sCisgIDE2LCAweGZlNzAsIDAsIHsweDU4LDB4MGEsMHg4NCwweGEyLDB4YTUsMHhhMCwweDg5LDB4MzAsMHgyMiwweDU1LDB4MDgsMHgxMiwweDYyLDB4YmQsMHg5MCwweDhmIH0sCisgIDE2LCAweGZlODAsIDAsIHsweDYyLDB4MjEsMHhkNiwweDQ4LDB4ZjMsMHgwMiwweDNjLDB4YzUsMHhiZiwweDQ4LDB4MmYsMHhkOCwweDRiLDB4YjcsMHgwMiwweGUwIH0sCisgIDE2LCAweGZlOTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4ZWMsMHgwMCwweDgzLDB4MDAsMHgyZSwweDg5IH0sCisgIDE2LCAweGZlYTAsIDAsIHsweDI4LDB4MDAsMHgwMiwweGVjLDB4YTAsMHg4OSwweDIyLDB4MjgsMHg4MiwweDA4LDB4MTIsMHgwMiwweDI4LDB4NDAsMHg5YSwweDA4IH0sCisgIDE2LCAweGZlYjAsIDAsIHsweDI4LDB4YzgsMHg4OCwweGIyLDB4MGEsMHgwZCwweDEwLDB4OTMsMHgxMCwweGEwLDB4YzgsMHgyOCwweDMwLDB4MDIsMHg0YywweDAwIH0sCisgIDE2LCAweGZlYzAsIDAsIHsweGIzLDB4NjAsMHgyYywweGM0LDB4MGIsMHgzMCwweGMyLDB4ZTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZlZDAsIDAsIHsweGMwLDB4MTUsMHhhYywweDQwLDB4OGIsMHgwMCwweDJlLDB4ODAsMHgwOCwweGIxLDB4MDIsMHhlYywweDAyLDB4OGIsMHgwMCwweDIwIH0sCisgIDE2LCAweGZlZTAsIDAsIHsweGQwLDB4MGEsMHg5MCwweDAyLDB4YWMsMHgwMCwweDBiLDB4MDEsMHgyNiwweDQwLDB4MDgsMHg5NCwweDAyLDB4OGMsMHgwMCwweDhiIH0sCisgIDE2LCAweGZlZjAsIDAsIHsweDAwLDB4MjIsMHhjMCwweDA4LDB4YjAsMHgwMiwweDJjLDB4MTAsMHhiYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMiwweGYwIH0sCisgIDE2LCAweGZmMDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE0LDB4OGMsMHgyMCwweGNiLDB4MDIsMHgzZSwweDJkIH0sCisgIDE2LCAweGZmMTAsIDAsIHsweDA4LDB4ODAsMHgwMywweGVjLDB4MDgsMHhjOSwweDgwLDB4MWUsMHgwNCwweDBjLDB4YjAsMHgwMywweDAxLDB4MDgsMHg1MCwweDE4IH0sCisgIDE2LCAweGZmMjAsIDAsIHsweDNlLDB4NDAsMHgwYywweDA0LDB4MDMsMHgyYywweDAwLDB4ZGIsMHgwMSwweDMyLDB4YzAsMHgwYywweGIwLDB4MGIsMHgyYywweDA4IH0sCisgIDE2LCAweGZmMzAsIDAsIHsweGJiLDB4MDAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4ODAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZmNDAsIDAsIHsweGUxLDB4MDAsMHhiYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4NjAsMHgwZiwweGMwLDB4MjMsMHhlYywweDAwLDB4ZmYsMHhjMCwweGJlIH0sCisgIDE2LCAweGZmNTAsIDAsIHsweDYwLDB4OGYsMHhjOSwweDIzLDB4ZjYsMHg1MCwweGVkLDB4ODAsMHhiOCwweDUwLDB4YWYsMHhjMCwweDAzLDB4ZmMsMHgwMCwweGZmIH0sCisgIDE2LCAweGZmNjAsIDAsIHsweDAwLDB4M2YsMHhjMSwweDBlLDB4YjAsMHgwMywweGZjLDB4MDQsMHhmZiwweDAyLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGY4IH0sCisgIDE2LCAweGZmNzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGViLDB4MDAsMHgzMiwweDgwIH0sCisgIDE2LCAweGZmODAsIDAsIHsweDBkLDB4OTAsMHgwMywweDJjLDB4MDAsMHg4OSwweDAwLDB4M2UsMHg5OCwweDhjLDB4MzAsMHgwMywweDYxLDB4ODAsMHhmYSwweDQwIH0sCisgIDE2LCAweGZmOTAsIDAsIHsweDNlLDB4NDAsMHgyYywweGE1LDB4MDMsMHgyYywweDAwLDB4ZmIsMHgwMSwweDNjLDB4YzAsMHgyYywweDMwLDB4MDMsMHgyYywweDAwIH0sCisgIDE2LCAweGZmYTAsIDAsIHsweGRiLDB4MDIsMHgzMiwweGMwLDB4MGYsMHhiMCwweDAzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZmYjAsIDAsIHsweGNhLDB4MDAsMHgyZSwweDgwLDB4OGIsMHg4MiwweGEwLDB4YzAsMHg4YywweDkwLDB4MDIsMHgzYywweDAwLDB4OGIsMHhmMCwweDIyIH0sCisgIDE2LCAweGZmYzAsIDAsIHsweGMyLDB4MGQsMHg4MCwweDAyLDB4MjcsMHgwMCwweDhiLDB4MTAsMHgyMiwweDQwLDB4MDgsMHg4MCwweDIyLDB4M2MsMHgwMCwweGJmIH0sCisgIDE2LCAweGZmZDAsIDAsIHsweDAwLDB4MmYsMHhjMCwweDA4LDB4ZjAsMHgwMiwweDNjLDB4MDAsMHhiZiwweDAxLDB4YTMsMHhjMCwweDBiLDB4ZjAsMHgxMiwweGYyIH0sCisgIDE2LCAweGZmZTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGMsMHgwMCwweGIzLDB4MWMsMHgyMCwweDQwIH0sCisgIDE2LCAweGZmZjAsIDAsIHsweDA4LDB4MDAsMHgwNiwweDJjLDB4MDAsMHg5YiwweDAwLDB4MjAsMHhkMCwweDA4LDB4MjAsMHgwMiwweDRjLDB4MDAsMHhhMywweDAwIH0sCisgIDE2LCAweDgwMTAsIDAsIHsweDJjLDB4YzAsMHgwOCwweDEwLDB4MGEsMHgwYywweDAwLDB4YmIsMHgwMCwweDI4LDB4YzAsMHgwOSwweDMwLDB4MDIsMHgwYywweDAwIH0sCisgIDE2LCAweDgwMjAsIDAsIHsweGIzLDB4MDAsMHgyMCwweGMwLDB4MGIsMHgzMCwweDAyLDB4ZjgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgwMzAsIDAsIHsweDIyLDB4MTEsMHgxZSwweDAwLDB4OTcsMHhhMCwweDIxLDB4YTAsMHgwOCwweDc5LDB4MDIsMHgxZSwweDAwLDB4OTcsMHg5MCwweDIxIH0sCisgIDE2LCAweDgwNDAsIDAsIHsweDYwLDB4MDksMHhlOCwweDIyLDB4M2UsMHgwMCwweGFmLDB4ODQsMHgyMSwweGU0LDB4NDgsMHg1YywweDAyLDB4MWUsMHgwMCwweGI3IH0sCisgIDE2LCAweDgwNTAsIDAsIHsweDkwLDB4MmQsMHhlMCwweDA5LDB4NzgsMHgwMCwweDFlLDB4MDksMHhiMywweDkwLDB4MjEsMHhlNCwweDBiLDB4NzgsMHgwMiwweGQ4IH0sCisgIDE2LCAweDgwNjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDE4LDB4MmMsMHg0MCwweGIzLDB4YjAsMHgzMiwweDQwIH0sCisgIDE2LCAweDgwNzAsIDAsIHsweDJjLDB4ODEsMHgxMywweDBjLDB4NDIsMHhkMSwweDAwLDB4YjAsMHhjMCwweDhjLDB4MzAsMHgwMywweDQ4LDB4MjAsMHhlMywweDAxIH0sCisgIDE2LCAweDgwODAsIDAsIHsweDNjLDB4YzAsMHgwYywweDMwLDB4MDMsMHgwYywweDAwLDB4ZjMsMHgxMCwweDNjLDB4YzAsMHhjZCwweDMyLDB4MGIsMHgwYywweDQwIH0sCisgIDE2LCAweDgwOTAsIDAsIHsweGQzLDB4MDAsMHgzMCwweGMwLDB4MGYsMHgzMCwweDAzLDB4ZDIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgwYTAsIDAsIHsweDQwLDB4MTUsMHhiYywweDAwLDB4ZTcsMHgwMCwweDNmLDB4ODAsMHgwYiwweGYxLDB4MDMsMHhmZCwweDAwLDB4NmQsMHgwMCwweDMyIH0sCisgIDE2LCAweDgwYjAsIDAsIHsweDQwLDB4MWYsMHg3MCwweDA3LDB4ZDgsMHg0MSwweGMzLDB4MTAsMHgzYiwweGMwLDB4MGYsMHhkMSwweDAzLDB4ZmQsMHgwMCwweGZmIH0sCisgIDE2LCAweDgwYzAsIDAsIHsweDEwLDB4M2YsMHhjMCwweDBlLDB4ZjAsMHgwMywweGVjLDB4MTAsMHhmZiwweDA4LDB4M2YsMHhjMywweDBmLDB4ZjAsMHgwMywweGQwIH0sCisgIDE2LCAweDgwZDAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4ZWMsMHgwNCwweGZiLDB4MDIsMHgzZSwweDQwIH0sCisgIDE2LCAweDgwZTAsIDAsIHsweDBiLDB4YTAsMHgwMywweGFjLDB4MDAsMHhkYiwweDAwLDB4MzYsMHg4MCwweDBkLDB4YjAsMHgwMywweGFjLDB4MDAsMHhlOCwweDAwIH0sCisgIDE2LCAweDgwZjAsIDAsIHsweDM2LDB4YzEsMHgyZSwweDkwLDB4MDMsMHgyYywweDAwLDB4Y2IsMHhhMCwweDM2LDB4ZGMsMHgwZiwweGIwLDB4MDMsMHgyZCwweDY4IH0sCisgIDE2LCAweDgxMDAsIDAsIHsweGZiLDB4YTAsMHg5MiwweGMyLDB4MGMsMHhiMSwweDAzLDB4ZWEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgxMTAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDA4LDB4MzcsMHgwMCwweDJkLDB4YzAsMHgwYiwweGUwLDB4MDIsMHgxZCwweDgwLDB4YjcsMHgwNCwweDIzIH0sCisgIDE2LCAweDgxMjAsIDAsIHsweDAwLDB4MGEsMHg0MCwweDAyLDB4MWMsMHgxOCwweDg0LDB4MDAsMHgyNSwweGMwLDB4MTgsMHg1MCwweDMyLDB4MGQsMHg4MCwweGEzIH0sCisgIDE2LCAweDgxMzAsIDAsIHsweDMwLDB4MjEsMHhjYywweDBiLDB4MzQsMHg4MiwweDFjLDB4MTAsMHhiNywweDMwLDB4MjEsMHhjOCwweDA4LDB4NzAsMHgwMiwweGQyIH0sCisgIDE2LCAweDgxNDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgyMCwweGI3LDB4ODAsMHgyZCwweDYwIH0sCisgIDE2LCAweDgxNTAsIDAsIHsweDBiLDB4ZmMsMHgyMiwweDllLDB4MDAsMHg4ZCwweDgwLDB4MjUsMHhhMCwweDA4LDB4ZjgsMHgyMiwweDkyLDB4MDAsMHhiNCwweDgwIH0sCisgIDE2LCAweDgxNjAsIDAsIHsweDI1LDB4ZTAsMHgwOCwweGY4LDB4MDIsMHgxZSwweDAwLDB4ODcsMHhiMCwweDIxLDB4ZTAsMHgwOSwweDdhLDB4MDIsMHgxZSwweDE4IH0sCisgIDE2LCAweDgxNzAsIDAsIHsweGIzLDB4ODAsMHgyMSwweGUwLDB4MDgsMHg3OCwweDAyLDB4ZjAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgxODAsIDAsIHsweDQ4LDB4MDQsMHhjNSwweDIwLDB4YjMsMHgwMSwweDJjLDB4ZDgsMHgwYiwweDNjLDB4MDIsMHgyYywweDA4LDB4YjksMHgwMCwweDIwIH0sCisgIDE2LCAweDgxOTAsIDAsIHsweDAzLDB4MGEsMHgwMCwweDgyLDB4MjIsMHgwOCwweDkwLDB4MGQsMHgyNiwweGU0LDB4MDgsMHgxMCwweDAyLDB4MGMsMHgwMCwweGEzIH0sCisgIDE2LCAweDgxYTAsIDAsIHsweDAwLDB4MjIsMHhjMCwweDBiLDB4MzAsMHgwMiwweDZjLDB4MDAsMHhiMywweDAwLDB4MjIsMHhjMCwweDI4LDB4MzAsMHgwMiwweGMyIH0sCisgIDE2LCAweDgxYjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDA1LDB4OTksMHgwMCwweGZhLDB4MDIsMHgzZiwweDkwIH0sCisgIDE2LCAweDgxYzAsIDAsIHsweDBmLDB4ZWMsMHgyMywweGE4LDB4MDAsMHhkYSwweDAwLDB4MzUsMHg4MCwweDBkLDB4ZTAsMHgwMiwweGJhLDB4MDIsMHhmZSwweGMyIH0sCisgIDE2LCAweDgxZDAsIDAsIHsweGI2LDB4YTAsMHgwZSwweGU0LDB4MGIsMHgyOCwweDAwLDB4Y2EsMHgwMCwweGIyLDB4ODAsMHgwZiwweGEwLDB4MGIsMHgyOCwweDAwIH0sCisgIDE2LCAweDgxZTAsIDAsIHsweGZhLDB4MDAsMHgzMiwweDgwLDB4MGMsMHhhMCwweDAzLDB4ZmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgxZjAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgyLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlIH0sCisgIDE2LCAweDgyMDAsIDAsIHsweDAwLDB4MGYsMHg4MSwweDAzLDB4ZTAsMHg0MCwweGU4LDB4MTAsMHgzYSwweDAwLDB4NGYsMHg4NCwweDgzLDB4ZTAsMHgwMCwweGY4IH0sCisgIDE2LCAweDgyMTAsIDAsIHsweDAwLDB4M2EsMHgwMCwweDBmLDB4MDAsMHgwMywweGEwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH0sCisgIDE2LCAweDgyMjAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTUsMHgwMCwweGM5LDB4MDIsMHgzZSwweDQwIH0sCisgIDE2LCAweDgyMzAsIDAsIHsweDBmLDB4OTAsMHgyMywweDI0LDB4MDAsMHhjOSwweDAwLDB4MzIsMHg2OCwweDJmLDB4MTAsMHgwMywweDI0LDB4MDAsMHhlOSwweDE0IH0sCisgIDE2LCAweDgyNDAsIDAsIHsweDMyLDB4NDAsMHgwZCwweDkwLDB4MGIsMHgwNCwweDAwLDB4ZDksMHgwMCwweDFlLDB4NDAsMHgwYywweDkwLDB4MDMsMHgyNCwweDAwIH0sCisgIDE2LCAweDgyNTAsIDAsIHsweGM5LDB4MDAsMHgzNiwweDQwLDB4MGMsMHg5MCwweDAzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgyNjAsIDAsIHsweDgwLDB4MTQsMHg2NCwweDAwLDB4ODksMHgwMSwweDJlLDB4NDAsMHg0YiwweDkwLDB4MTIsMHgyNCwweDAwLDB4ODksMHhjMiwweGEyIH0sCisgIDE2LCAweDgyNzAsIDAsIHsweDYwLDB4ODgsMHg5MCwweDAzLDB4NjQsMHgwMCwweDg5LDB4YzEsMHhhMiwweDQwLDB4NDgsMHgxNiwweDAzLDB4NjQsMHgwMiwweDg5IH0sCisgIDE2LCAweDgyODAsIDAsIHsweDAwLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgyMiwweDI0LDB4MDAsMHg4OSwweDAwLDB4M2UsMHg0MCwweDI4LDB4OTAsMHgwYSwweDIwIH0sCisgIDE2LCAweDgyOTAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA0LDB4MjQsMHgwMCwweDg5LDB4MDIsMHgyZSwweDQwIH0sCisgIDE2LCAweDgyYTAsIDAsIHsweDBiLDB4MTAsMHgwMiwweDI0LDB4MDAsMHg4OSwweDEwLDB4MjIsMHg0MCwweDg5LDB4OTAsMHgwMiwweGFjLDB4MDAsMHhhMSwweDA4IH0sCisgIDE2LCAweDgyYjAsIDAsIHsweDIyLDB4NDAsMHgwOSwweDk4LDB4MDIsMHhhNCwweDAwLDB4ODksMHgwMCwweDJhLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDAwIH0sCisgIDE2LCAweDgyYzAsIDAsIHsweDg5LDB4MDAsMHgyNiwweDQwLDB4MDgsMHgxMCwweDAyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgyZDAsIDAsIHsweDA4LDB4MDAsMHgyNCwweDAwLDB4ODEsMHgwMCwweDJjLDB4NDEsMHgwYiwweDEyLDB4MDIsMHgwNCwweDgxLDB4ODEsMHgyMCwweDIyIH0sCisgIDE2LCAweDgyZTAsIDAsIHsweDQ4LDB4MDgsMHgxMiwweDAyLDB4YzQsMHg4MSwweDgxLDB4MjQsMHgwMiwweDQ4LDB4MGEsMHg5MCwweDAyLDB4ODQsMHhhMCwweDgxIH0sCisgIDE2LCAweDgyZjAsIDAsIHsweDI4LDB4NmMsMHg0YSwweDA4LDB4MTIsMHhkMiwweDA0LDB4YTEsMHg4MSwweDI4LDB4MmMsMHg0YSwweDA4LDB4MTIsMHg4MiwweDAyIH0sCisgIDE2LCAweDgzMDAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDA4LDB4NjEsMHg0MCwweGM4LDB4MDAsMHgyZSwweDE0IH0sCisgIDE2LCAweDgzMTAsIDAsIHsweDBmLDB4ODUsMHgwYiwweDIxLDB4NDIsMHhjYSwweDUwLDB4MjIsMHgxNCwweDBkLDB4ODUsMHg0MywweGExLDB4NDAsMHhlOCwweDUwIH0sCisgIDE2LCAweDgzMjAsIDAsIHsweDMwLDB4MDAsMHgwZCwweDg1LDB4MDIsMHhhMSwweGMwLDB4ZDgsMHgyMCwweDNhLDB4MDgsMHgyYywweDgyLDB4MGIsMHgyMCwweDgyIH0sCisgIDE2LCAweDgzMzAsIDAsIHsweGM4LDB4MjAsMHgzNCwweDA5LDB4OGMsMHg4MiwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgzNDAsIDAsIHsweDk4LDB4MGQsMHhmYywweDAyLDB4ZjksMHgwMCwweDNmLDB4NDAsMHg0ZiwweGQxLDB4MDMsMHhlNCwweDQwLDB4ZjUsMHgxNCwweGJmIH0sCisgIDE2LCAweDgzNTAsIDAsIHsweDQ0LDB4MGQsMHg1MSwweDIzLDB4NWMsMHg0MCwweGY1LDB4MTAsMHgxZiwweDRlLDB4NGQsMHg1MCwweDAzLDB4NjQsMHgwOCwweGY5IH0sCisgIDE2LCAweDgzNjAsIDAsIHsweDI4LDB4M2UsMHg0YSwweDhmLDB4OTIsMHg4MywweGU0LDB4YTAsMHhmOSwweDI4LDB4M2EsMHg0YiwweDBmLDB4OTIsMHg4MywweGU2IH0sCisgIDE2LCAweDgzNzAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4ZjQsMHg0MCwweGZkLDB4MDAsMHgzMCwweDQwIH0sCisgIDE2LCAweDgzODAsIDAsIHsweDBjLDB4OTAsMHgwMywweDI0LDB4MDAsMHhkZCwweDAwLDB4M2IsMHg0MCwweDBlLDB4OTAsMHgwMywweDc0LDB4MDAsMHg1ZCwweDAwIH0sCisgIDE2LCAweDgzOTAsIDAsIHsweDM2LDB4NjQsMHgwZCwweGQwLDB4MDAsMHhhNiwweDAwLDB4ZjksMHg0MCwweDMyLDB4NzgsMHgwYywweDk5LDB4MDMsMHgyNCwweDQwIH0sCisgIDE2LCAweDgzYTAsIDAsIHsweGM5LDB4OTAsMHgzMiwweDUwLDB4MGYsMHg5YiwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDgzYjAsIDAsIHsweDM4LDB4MTAsMHhlMiwweDgwLDB4YjgsMHgwMCwweDIyLDB4MDEsMHgwOCwweDgwLDB4MGEsMHgyMCwweDAwLDB4ODgsMHgwMCwweDJhIH0sCisgIDE2LCAweDgzYzAsIDAsIHsweDAwLDB4MDgsMHg4MCwweDAyLDB4MjAsMHgwMCwweDg4LDB4MDAsMHgyMiwweDIwLDB4MDgsMHg4YSwweDhiLDB4ZTEsMHgwMCwweGI4IH0sCisgIDE2LCAweDgzZDAsIDAsIHsweDgwLDB4MjIsMHgzMCwweDI4LDB4MGQsMHgwMiwweDIyLDB4MDAsMHhkOCwweGU0LDB4MjIsMHgyOCwweDBiLDB4OGYsMHgwYSwweDBlIH0sCisgIDE2LCAweDgzZTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHg4MCwweGIxLDB4MDAsMHhhMCwweDQwIH0sCisgIDE2LCAweDgzZjAsIDAsIHsweDA4LDB4MTAsMHgwMiwweDA0LDB4MDAsMHg4OSwweDAwLDB4MDgsMHg0MCwweDBhLDB4OTAsMHg0MiwweDQ0LDB4MDAsMHg5MSwweDAwIH0sCisgIDE2LCAweDg0MDAsIDAsIHsweDIwLDB4NTgsMHgyOCwweDkwLDB4MDIsMHg4NSwweDAwLDB4ODEsMHgyMCwweGEwLDB4NGMsMHgwOSwweDEyLDB4MGEsMHgwNCwweDgwIH0sCisgIDE2LCAweDg0MTAsIDAsIHsweDkxLDB4NDAsMHhhMCwweDQwLDB4MGIsMHgxMCwweDAyLDB4MDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg0MjAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAwLDB4YjksMHgwMiwweDIwLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgwNCwweDAwLDB4ODksMHgwMSwweDIyIH0sCisgIDE2LCAweDg0MzAsIDAsIHsweDQwLDB4MjgsMHg5MCwweDIyLDB4MDQsMHgwMCwweDg5LDB4MTAsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGIxIH0sCisgIDE2LCAweDg0NDAsIDAsIHsweDAwLDB4MjIsMHg0MCwweDgxLDB4OTAsMHgwMiwweDA0LDB4MDAsMHg5MSwweDAwLDB4MjIsMHg0MCwweDBiLDB4OTAsMHgwMiwweDA2IH0sCisgIDE2LCAweDg0NTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTUsMHgwMCwweGYxLDB4MDAsMHgzMiwweDYwIH0sCisgIDE2LCAweDg0NjAsIDAsIHsweDJjLDB4OTIsMHgxMywweDI0LDB4MDIsMHhkMSwweDEwLDB4M2EsMHg0MCwweDBlLDB4MTIsMHgwMywweDY2LDB4MDQsMHhkOSwweDAwIH0sCisgIDE2LCAweDg0NzAsIDAsIHsweGI2LDB4NDAsMHgwZCwweDE5LDB4MDMsMHhhNCwweDAwLDB4ZjksMHgwMCwweDMyLDB4NDAsMHgwOSwweDkwLDB4MDEsMHgyNCwweDAwIH0sCisgIDE2LCAweDg0ODAsIDAsIHsweGQ5LDB4MDIsMHgyMiwweDQwLDB4MGYsMHg5MCwweDAzLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg0OTAsIDAsIHsweDJhLDB4MDEsMHhhNSwweDAwLDB4ZjksMHgwMCwweDNlLDB4NjQsMHgwZiwweDEwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHg4MSwweDNlIH0sCisgIDE2LCAweDg0YTAsIDAsIHsweDY2LDB4OGYsMHg5MCwweDIzLDB4ZTQsMHg4MCwweGY5LDB4MDQsMHgzZSwweDQwLDB4OGYsMHg5MCwweDAzLDB4ZTQsMHgwNCwweGY5IH0sCisgIDE2LCAweDg0YjAsIDAsIHsweDAwLDB4M2MsMHg0MCwweDBlLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4MTAsMHgwMywweGNhIH0sCisgIDE2LCAweDg0YzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyYSwweDEwLDB4YTAsMHgwMCwweGY4LDB4MjQsMHgzZSwweDAwIH0sCisgIDE2LCAweDg0ZDAsIDAsIHsweDJjLDB4ODQsMHgwMywweDIwLDB4MDAsMHhiOCwweDIwLDB4M2UsMHgwMCwweDhjLDB4ODAsMHgwMywweGEwLDB4MDAsMHg3MCwweDgyIH0sCisgIDE2LCAweDg0ZTAsIDAsIHsweDMyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgyMCwweDA4LDB4ZjgsMHgwMCwweDMyLDB4MDAsMHgyYywweDgwLDB4MGIsMHgyMCwweDA4IH0sCisgIDE2LCAweDg0ZjAsIDAsIHsweGM4LDB4MDAsMHgzZSwweDAwLDB4MGMsMHg4MCwweDAzLDB4Y2EsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg1MDAsIDAsIHsweDI4LDB4MDUsMHgyOCwweDA0LDB4YmUsMHg4MCwweDNhLDB4ODAsMHgwOCwweGEwLDB4MDIsMHgyOCwweDA0LDB4OGUsMHgwMCwweDZkIH0sCisgIDE2LCAweDg1MTAsIDAsIHsweDkwLDB4MGQsMHhhMCwweDAyLDB4M2EsMHgwMCwweDhlLDB4ODAsMHhhMiwweDgwLDB4MGUsMHhlMCwweDBiLDB4NjgsMHgwMCwweGJhIH0sCisgIDE2LCAweDg1MjAsIDAsIHsweDAwLDB4MjIsMHg4MCwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDAsMHhkYSwweDAwLDB4MmUsMHg4MCwweDA4LDB4YTAsMHgwMiwweGNhIH0sCisgIDE2LCAweDg1MzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDgxLDB4NGMsMHgwMCwweGIxLDB4MDAsMHgyYywweGMwIH0sCisgIDE2LCAweDg1NDAsIDAsIHsweDA4LDB4MzAsMHgwMiwweDBjLDB4MTgsMHhhMywweDAyLDB4MmMsMHgxMCwweDg4LDB4MzAsMHgwNiwweDgyLDB4ODEsMHhhMCwweDAwIH0sCisgIDE2LCAweDg1NTAsIDAsIHsweDJhLDB4YzAsMHgwYiwweDMwLDB4MGEsMHg0YywweDAwLDB4YjMsMHgwMCwweDIwLDB4YzAsMHgxYSwweGIwLDB4MDIsMHg4YywweDAxIH0sCisgIDE2LCAweDg1NjAsIDAsIHsweDgzLDB4MDAsMHgyYywweGMwLDB4MDgsMHgzMCwweDAyLDB4Y2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg1NzAsIDAsIHsweDIwLDB4MDEsMHgxYywweDEwLDB4YjQsMHgwYSwweDJiLDB4YzgsMHgwOCwweDMxLDB4MjYsMHgxYywweDAwLDB4ODYsMHgwMCwweDJkIH0sCisgIDE2LCAweDg1ODAsIDAsIHsweGMwLDB4MDksMHg3MiwweDAyLDB4MWQsMHgwMCwweGE1LDB4NDAsMHgyOSwweGMwLDB4MGEsMHg2MCwweDAyLDB4NWMsMHg4OCwweGIzIH0sCisgIDE2LCAweDg1OTAsIDAsIHsweDIwLDB4MjUsMHhjOCwweDBhLDB4NzIsMHgwMiwweDljLDB4ODAsMHg5NywweDIwLDB4MmMsMHhlOCwweDgwLDB4NzIsMHgwMiwweGU4IH0sCisgIDE2LCAweDg1YTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA4LDB4MTYsMHgwMCwweGI1LDB4ODAsMHgzZCwweGUyIH0sCisgIDE2LCAweDg1YjAsIDAsIHsweDBjLDB4N2EsMHg4YiwweDBlLDB4YzAsMHhhNywweDgxLDB4MmMsMHgyMCwweDBjLDB4ZmMsMHgwMywweDkyLDB4MDIsMHhlZiwweDgwIH0sCisgIDE2LCAweDg1YzAsIDAsIHsweDM5LDB4ZTQsMHgwYiwweGQ4LDB4MDEsMHgxZiwweDAwLDB4ZjcsMHg4MCwweGIzLDB4ZjQsMHg4ZSwweDc5LDB4MDMsMHg4ZSwweDAwIH0sCisgIDE2LCAweDg1ZDAsIDAsIHsweGM3LDB4YzQsMHgzZCwweGU4LDB4MmMsMHg3YiwweDAzLDB4ZWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg1ZTAsIDAsIHsweDA4LDB4MWQsMHhhYywweDAwLDB4ZjgsMHgwMCwweDNlLDB4ZGQsMHg4NywweGI2LDB4MDMsMHhlZCwweGNjLDB4ZTksMHgwMCwweDNlIH0sCisgIDE2LCAweDg1ZjAsIDAsIHsweDQwLDB4MGYsMHhiMCwweDA3LDB4Y2MsMHgxMCwweDBiLDB4MDAsMHgzNiwweGQ4LDB4MGYsMHg4MCwweDQzLDB4YWQsMHg4MCwweGZiIH0sCisgIDE2LCAweDg2MDAsIDAsIHsweDI4LDB4M2EsMHhjMCwweDBkLDB4YjQsMHgwMywweDZjLDB4ZTIsMHhlYiwweDYwLDB4M2UsMHhkNCwweDBmLDB4YjAsMHgwMywweGMyIH0sCisgIDE2LCAweDg2MTAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4ZmUsMHgwMCwweGZlLDB4OTAsMHgzZiwweGU1IH0sCisgIDE2LCAweDg2MjAsIDAsIHsweDBlLDB4ZjgsMHgwMywweDNlLDB4MTAsMHhmZiwweDkwLDB4MTcsMHg2MCwweDBmLDB4ZmMsMHgwMywweDdhLDB4MDAsMHhlZSwweDgwIH0sCisgIDE2LCAweDg2MzAsIDAsIHsweDM3LDB4ZTIsMHgwZSwweDc4LDB4MGYsMHhmZiwweDQwLDB4ZWYsMHg4OCwweDFmLDB4ZTAsMHgwYywweGY4LDB4ODMsMHhmZSwweDgwIH0sCisgIDE2LCAweDg2NDAsIDAsIHsweGNmLDB4ZDAsMHhiMywweGYwLDB4MGMsMHhmOCwweGMzLDB4MTAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg2NTAsIDAsIHsweGE4LDB4MTEsMHg5YywweDQwLDB4YjQsMHgxMCwweDBmLDB4Y2MsMHgwMCwweDcyLDB4MDIsMHgxYywweDAwLDB4YjYsMHgwMiwweDA5IH0sCisgIDE2LCAweDg2NjAsIDAsIHsweGMwLDB4MjgsMHhmMCwweDAyLDB4OTgsMHgwMCwweGE2LDB4MDAsMHgyMSwweGMwLDB4MGIsMHg2MCwweDAzLDB4ZmMsMHgwMiwweDg3IH0sCisgIDE2LCAweDg2NzAsIDAsIHsweDAwLDB4MmQsMHhjMCwweDA4LDB4NzAsMHgwMiwweGRlLDB4MDAsMHg4ZiwweDEwLDB4MjEsMHhjMCwweDA4LDB4ZjAsMHgwMywweDZhIH0sCisgIDE2LCAweDg2ODAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4OTQsMHgwMCwweGI2LDB4MDIsMHgyZiwweGMyIH0sCisgIDE2LCAweDg2OTAsIDAsIHsweDFhLDB4MzAsMHg4MCwweDFjLDB4MDAsMHhiNiwweDA4LDB4MDEsMHg0MCwweDBhLDB4ZjAsMHgwMiwweDE4LDB4MDAsMHg4NywweDAwIH0sCisgIDE2LCAweDg2YTAsIDAsIHsweDIxLDB4YzAsMHgwYiwweGQwLDB4MDIsMHg5YywweDEwLDB4ODcsMHgwMCwweDI5LDB4YzAsMHgwOCwweDcwLDB4MDIsMHhkYywweDQ0IH0sCisgIDE2LCAweDg2YjAsIDAsIHsweDg3LDB4MTAsMHg2NCwweGMwLDB4MDgsMHg3MCwweDAyLDB4MDYsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg2YzAsIDAsIHsweDYwLDB4MTQsMHhjZSwweDYwLDB4YjAsMHgwMCwweDJjLDB4YzAsMHgwOCwweDM0LDB4MGEsMHgwYywweDA4LDB4YjAsMHgwNCwweDAwIH0sCisgIDE2LCAweDg2ZDAsIDAsIHsweDQwLDB4MDgsMHgzMCwweGEyLDB4ODksMHg4MCwweGEyLDB4NjIsMHgyMCwweGUwLDB4MGIsMHgwMCwweDBhLDB4Y2MsMHgwOCwweDgzIH0sCisgIDE2LCAweDg2ZTAsIDAsIHsweDAwLDB4NmMsMHhjMCwweDA4LDB4MzAsMHg1MiwweGNjLDB4MDAsMHg4MywweDAwLDB4MjQsMHhjMCwweDA4LDB4MzAsMHgwMiwweDU4IH0sCisgIDE2LCAweDg2ZjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YWUsMHgwMCwweGY4LDB4MDAsMHgzZiwweGQwIH0sCisgIDE2LCAweDg3MDAsIDAsIHsweDBlLDB4ZmMsMHgwMywweDNjLDB4MDAsMHhmOSwweDAwLDB4OTIsMHg4NCwweDBmLDB4ZmMsMHgwMywweDY0LDB4MDAsMHg4MCwweDAwIH0sCisgIDE2LCAweDg3MTAsIDAsIHsweGI3LDB4YzMsMHgwZiwweGI4LDB4ODMsMHhiYywweDA0LDB4ZWYsMHgwMCwweDNmLDB4YzAsMHgzYywweGYwLDB4MDMsMHhmYywweDAyIH0sCisgIDE2LCAweDg3MjAsIDAsIHsweGNmLDB4MDAsMHgzNywweGMwLDB4MjgsMHhmMCwweDEzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg3MzAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZjgsMHg0MSwweDNlLDB4YzgsMHgwZiwweDMyLDB4MDMsMHhlYywweDAwLDB4ZjgsMHgwMCwweDNhIH0sCisgIDE2LCAweDg3NDAsIDAsIHsweGM0LDB4MGYsMHhiMSwweDAzLDB4YzQsMHgwMCwweGY5LDB4MDAsMHgzNiwweGMwLDB4MGYsMHhlNCwweDBiLDB4ZWMsMHgwNCwweGZiIH0sCisgIDE2LCAweDg3NTAsIDAsIHsweDAwLDB4M2UsMHhjMSwweDBmLDB4YjAsMHg0MywweGVjLDB4MDQsMHhmYiwweDAwLDB4M2EsMHhjMCwweDBmLDB4YjAsMHgwMywweGU0IH0sCisgIDE2LCAweDg3NjAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZjQsMHgwMCwweGZjLDB4ODAsMHgzZiwweGMwIH0sCisgIDE2LCAweDg3NzAsIDAsIHsweDFmLDB4ZjAsMHgwMywweDNjLDB4MDgsMHhmYiwweDAwLDB4MzMsMHg4MCwweDJlLDB4ZjAsMHgxMywweGE0LDB4MDQsMHhjYiwweDAwIH0sCisgIDE2LCAweDg3ODAsIDAsIHsweGI5LDB4YzAsMHgyYywweGQ4LDB4MGIsMHgzYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwOSwweDcwLDB4MDAsMHgyYywweDA0IH0sCisgIDE2LCAweDg3OTAsIDAsIHsweGZmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4YzAsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg3YTAsIDAsIHsweGMxLDB4MDAsMHg2YywweDAwLDB4YjgsMHg4MCwweDJlLDB4YzAsMHgwYiwweGIwLDB4MDMsMHg2YywweDAwLDB4YjksMHgxNiwweDI4IH0sCisgIDE2LCAweDg3YjAsIDAsIHsweDcyLDB4MDgsMHhiMCwweDIyLDB4MjcsMHg0MCwweGRiLDB4MDAsMHgyMiwweGMwLDB4MDgsMHhiZCwweDgyLDB4MmMsMHgwOCwweGJiIH0sCisgIDE2LCAweDg3YzAsIDAsIHsweDAwLDB4MmUsMHhjMCwweDQ4LDB4YjAsMHgwMiwweDJjLDB4MDAsMHhiYiwweDAwLDB4MmUsMHhjMSwweDBiLDB4YjAsMHgwMiwweGUwIH0sCisgIDE2LCAweDg3ZDAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweGI4LDB4NjAsMHgyZSwweGMwIH0sCisgIDE2LCAweDg3ZTAsIDAsIHsweDBiLDB4YjAsMHgwMiwweDJjLDB4MDAsMHhiMSwweDAwLDB4MmEsMHg4NCwweDRhLDB4MzAsMHgyMiwweGFjLDB4MjAsMHg5OCwweDgwIH0sCisgIDE2LCAweDg3ZjAsIDAsIHsweDJhLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhhYywweDAwLDB4M2IsMHgwMCwweDJjLDB4YzAsMHgwYSwweGIwLDB4MDIsMHhhYywweDA4IH0sCisgIDE2LCAweDg4MDAsIDAsIHsweGJiLDB4MDAsMHgyZSwweGMwLDB4MGIsMHhiMCwweDQyLDB4ZTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg4MTAsIDAsIHsweDA4LDB4MDQsMHgwYywweDAxLDB4YjAsMHgwMCwweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHg0YywweDA0LDB4YjAsMHgwMCwweDJhIH0sCisgIDE2LCAweDg4MjAsIDAsIHsweDgwLDB4MDgsMHgzMCwweDAyLDB4MDAsMHgwMCwweDEwLDB4MDQsMHgyOCwweGMwLDB4MDgsMHgyMCwweDQyLDB4OGMsMHgwMCwweGIzIH0sCisgIDE2LCAweDg4MzAsIDAsIHsweDAwLDB4MmMsMHhjMCwweDQyLDB4MzAsMHgwYSwweDhjLDB4MDAsMHhiMywweDAwLDB4MmMsMHhjMCwweDhiLDB4MzAsMHgwMiwweGMyIH0sCisgIDE2LCAweDg4NDAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjQsMHgwMCwweGY4LDB4NTAsMHgzZiwweGMwIH0sCisgIDE2LCAweDg4NTAsIDAsIHsweDBiLDB4ZjAsMHgwMywweDNjLDB4MDAsMHhmYSwweDA0LDB4MzIsMHg4MCwweDBlLDB4ZjAsMHgyMywweGFjLDB4MDAsMHhkOSwweDAwIH0sCisgIDE2LCAweDg4NjAsIDAsIHsweDNiLDB4YzAsMHgwYywweDkwLDB4MDMsMHhiYywweDA0LDB4ZmYsMHgwMCwweDNkLDB4YzAsMHgyZSwweGYwLDB4MGIsMHgzYywweDAwIH0sCisgIDE2LCAweDg4NzAsIDAsIHsweGZmLDB4MDQsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4YzAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg4ODAsIDAsIHsweGEwLDB4MWQsMHhmYywweDAwLDB4ZmMsMHgwMCwweDNmLDB4YzAsMHgwNywweGYwLDB4MDMsMHhmYywweDA0LDB4N2MsMHgwMiwweGI1IH0sCisgIDE2LCAweDg4OTAsIDAsIHsweDAwLDB4MGYsMHhmMCwweDAzLDB4ZjAsMHgwMCwweGZjLDB4MDAsMHgzNywweGMwLDB4MGYsMHhmMCwweDEzLDB4N2MsMHgwMCwweGZmIH0sCisgIDE2LCAweDg4YTAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBkLDB4ZjAsMHgwMywweDZkLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDFmLDB4ZjAsMHgwMywweGU4IH0sCisgIDE2LCAweDg4YjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZDIsMHgwMCwweGQ1LDB4ODAsMHgzMywweDBhIH0sCisgIDE2LCAweDg4YzAsIDAsIHsweDRjLDB4ZjgsMHgwMywweGYyLDB4MDAsMHhmYywweDAwLDB4MzcsMHgyNiwweDFmLDB4Y2EsMHgwMywweGJjLDB4YzQsMHhjZiwweDIwIH0sCisgIDE2LCAweDg4ZDAsIDAsIHsweDMzLDB4ZTQsMHgwZiwweDc4LDB4MDMsMHgzZSwweDQ0LDB4Y2YsMHgwMCwweDNiLDB4Y2UsMHg5ZiwweDY4LDB4MTMsMHhkMCwweDAwIH0sCisgIDE2LCAweDg4ZTAsIDAsIHsweGNkLDB4ODAsMHhiMywweDYwLDB4MGYsMHhmYSwweDgzLDB4ZjAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg4ZjAsIDAsIHsweDgwLDB4MTAsMHhlMCwweDgwLDB4YzksMHgyOCwweDIyLDB4MzAsMHgwOCwweGIyLDB4MjIsMHhlYSwweDAxLDB4YjgsMHg4MiwweDIwIH0sCisgIDE2LCAweDg5MDAsIDAsIHsweDUwLDB4NGYsMHg5YywweDAwLDB4YTgsMHhkMSwweGRiLDB4MTAsMHhhNiwweGUwLDB4MTcsMHhiOCwweDAzLDB4ZWMsMHg4MCwweGRiIH0sCisgIDE2LCAweDg5MTAsIDAsIHsweDA4LDB4MWYsMHhkMCwweDBiLDB4YjgsMHgwMiwweGY2LDB4MDAsMHhmYiwweDgwLDB4MjIsMHg0MCwweDBiLDB4YjAsMHgwMiwweDYwIH0sCisgIDE2LCAweDg5MjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzQsMHgyMCwweDgxLDB4ODAsMHgyMCwweDAwIH0sCisgIDE2LCAweDg5MzAsIDAsIHsweDhiLDB4MzAsMHg4MiwweGMwLDB4MDAsMHhiMCwweDEwLDB4MjgsMHgwOCwweDhiLDB4MTEsMHgzMCwweGM0LDB4ODQsMHg5MCwweDI4IH0sCisgIDE2LCAweDg5NDAsIDAsIHsweDI0LDB4YzgsMHgwYiwweDMwLDB4MDIsMHg0YywweDAwLDB4ODMsMHgxMCwweDA0LDB4YzgsMHgwYiwweDMwLDB4MDIsMHhjYywweDAwIH0sCisgIDE2LCAweDg5NTAsIDAsIHsweGIzLDB4MDAsMHgyNCwweDQwLDB4MGIsMHgzMCwweDAyLDB4ZTIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg5NjAsIDAsIHsweGMwLDB4MTUsMHhhNiwweDAwLDB4ODEsMHgwMCwweDIyLDB4MTAsMHgwYiwweGIwLDB4MTIsMHhlYSwweDIwLDB4YmIsMHgwMCwweDJhIH0sCisgIDE2LCAweDg5NzAsIDAsIHsweDcwLDB4MGEsMHg5YywweDAyLDB4NjIsMHgwMCwweDk4LDB4ODgsMHgyNiwweGM4LDB4MDIsMHhiMiwweDAyLDB4OGUsMHgwOCwweDhiIH0sCisgIDE2LCAweDg5ODAsIDAsIHsweDE4LDB4MjIsMHhjMCwweDBiLDB4YTAsMHgwMiwweGVlLDB4MjAsMHgzYiwweDAwLDB4MjYsMHg0MCwweDBiLDB4YjAsMHgwMiwweDcwIH0sCisgIDE2LCAweDg5OTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZTAsMHgwMCwweGNiLDB4MDAsMHgzMiwweDgwIH0sCisgIDE2LCAweDg5YTAsIDAsIHsweDBmLDB4YjAsMHgwMywweGU3LDB4MDAsMHhiOCwweDUyLDB4M2UsMHgyMCwweDRiLDB4MGMsMHg0MywweGVmLDB4ODIsMHg5YiwweGMwIH0sCisgIDE2LCAweDg5YjAsIDAsIHsweDMyLDB4YzAsMHgwYiwweGIwLDB4MDIsMHg2YywweDAxLDB4OGIsMHg4MCwweDJlLDB4YzAsMHgwYiwweGEwLDB4ODMsMHhlNiwweDAwIH0sCisgIDE2LCAweDg5YzAsIDAsIHsweGZiLDB4MDAsMHgzNiwweDQwLDB4MGYsMHhmMCwweDAzLDB4ZDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDg5ZDAsIDAsIHsweGUwLDB4MDEsMHhiMCwweDAyLDB4ZmYsMHgwNCwweDNmLDB4OTAsMHgwYywweGYxLDB4MDEsMHhmNCwweDA4LDB4N2QsMHg4MCwweDM3IH0sCisgIDE2LCAweDg5ZTAsIDAsIHsweDAwLDB4MGYsMHhjMCwweDIzLDB4OTgsMHgwMCwweGY3LDB4MDAsMHgyYiwweGUwLDB4MGYsMHhmOCwweDIzLDB4ZmMsMHgwNiwweGZiIH0sCisgIDE2LCAweDg5ZjAsIDAsIHsweDgzLDB4YmYsMHhjMCwweDg3LDB4ZDAsMHgwMywweGRjLDB4MDAsMHhlZiwweDAwLDB4M2IsMHhjMCwweDBmLDB4YjAsMHgwMSwweGY4IH0sCisgIDE2LCAweDhhMDAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YTYsMHgwMCwweGNiLDB4MDAsMHgzMywweDgwIH0sCisgIDE2LCAweDhhMTAsIDAsIHsweDBmLDB4YjAsMHgwMywweGUxLDB4MTAsMHhmMiwweDQwLDB4YjIsMHgwMCwweDNkLDB4OTQsMHgxNywweDJkLDB4NDQsMHhmYSwweDQxIH0sCisgIDE2LCAweDhhMjAsIDAsIHsweDMyLDB4YzAsMHg5ZiwweGIwLDB4MjMsMHgyYywweDAyLDB4Y2IsMHg0MCwweDMyLDB4YzAsMHg0ZiwweDkwLDB4MDMsMHgzZCwweDAwIH0sCisgIDE2LCAweDhhMzAsIDAsIHsweGNiLDB4MDAsMHgzZSwweDQwLDB4MGYsMHhiMCwweDAzLDB4MTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhhNDAsIDAsIHsweDg4LDB4MDUsMHgyNiwweDAwLDB4OGIsMHg3MSwweDIwLDB4ZDUsMHgwMywweDk5LDB4MDIsMHhlMCwweDAwLDB4YmIsMHg4MCwweDIyIH0sCisgIDE2LCAweDhhNTAsIDAsIHsweDYwLDB4MWMsMHg4MCwweDAzLDB4NjAsMHgwMCwweGI4LDB4MDIsMHgyMiwweGMyLDB4MGIsMHgzMiwweDAyLDB4MmMsMHgwMSwweDhmIH0sCisgIDE2LCAweDhhNjAsIDAsIHsweDAyLDB4ZDcsMHhjMCwweDBiLDB4YTAsMHgwMywweDZkLDB4NDAsMHg1MywweDgwLDB4MmUsMHhjMCwweDBlLDB4ZjAsMHg0MywweDcyIH0sCisgIDE2LCAweDhhNzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NjgsMHgwMiwweDgwLDB4MDAsMHgyNCwweDAwIH0sCisgIDE2LCAweDhhODAsIDAsIHsweDBiLDB4MzUsMHgyNiwweGMyLDB4MDAsMHhiMCwweDkwLDB4MjAsMHhjMCwweDg4LDB4MDAsMHgwMiwweDRmLDB4MjAsMHhiMywweDAyIH0sCisgIDE2LCAweDhhOTAsIDAsIHsweDYwLDB4ZTIsMHgxYiwweDM4LDB4MDIsMHgwYywweDAwLDB4ODgsMHgwMCwweDYwLDB4YzAsMHgwYiwweDM0LDB4ODIsMHg0YywweDAyIH0sCisgIDE2LCAweDhhYTAsIDAsIHsweGExLDB4OTAsMHgyYywweDQwLDB4MGIsMHgzMCwweDAyLDB4MzAsMHgwMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhhYjAsIDAsIHsweDIwLDB4MDEsMHgzYSwweDA4LDB4OGMsMHhhMCwweDJkLDB4MjAsMHg0YiwweDc4LDB4MDIsMHhkYSwweDAwLDB4YjIsMHg5MCwweDIxIH0sCisgIDE2LCAweDhhYzAsIDAsIHsweDY2LDB4NDgsMHg3OSwweDAyLDB4ZGUsMHg0MCwweGI3LDB4OTEsMHhhMSwweGUwLDB4ZGIsMHhmOCwweDAyLDB4MWUsMHg0MCwweDg0IH0sCisgIDE2LCAweDhhZDAsIDAsIHsweDkwLDB4MDEsMHhlMCwweDhiLDB4ZjksMHgwMiwweDVlLDB4MDEsMHg5NywweDgwLDB4MmQsMHg2MCwweDBhLDB4NzgsMHgwMCwweDQ4IH0sCisgIDE2LCAweDhhZTAsIDAsIHsweDA0LDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweDgwLDB4MDAsMHgyNCwweDA0IH0sCisgIDE2LCAweDhhZjAsIDAsIHsweDBmLDB4MzIsMHgwMywweGM0LDB4YTAsMHhmMSwweDQyLDB4MzAsMHhjNCwweDJjLDB4MzEsMHgwMiwweDQ0LDB4MDAsMHhmMSwweDExIH0sCisgIDE2LCAweDhiMDAsIDAsIHsweGEwLDB4YzAsMHgwYiwweDMwLDB4MGIsMHgwYywweDQyLDB4ODMsMHgwMCwweDAwLDB4YzAsMHgwZiwweDMwLDB4MDMsMHg0YywweDAyIH0sCisgIDE2LCAweDhiMTAsIDAsIHsweGUzLDB4MDAsMHgzYywweDQwLDB4MGIsMHgzMCwweDAxLDB4MTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhiMjAsIDAsIHsweGMwLDB4MWQsMHhiYywweDAwLDB4ZmMsMHhhNSwweDMzLDB4YzAsMHgwZiwweGQwLDB4MDMsMHhmYywweDAxLDB4YmYsMHgwMCwweDNmIH0sCisgIDE2LCAweDhiMzAsIDAsIHsweGM0LDB4MGUsMHg3MSwweDAzLDB4NzQsMHgwMCwweDc1LDB4MTAsMHgzZiwweGMwLDB4MDUsMHhmMCwweDAzLDB4ZGMsMHg0MCwweGZmIH0sCisgIDE2LCAweDhiNDAsIDAsIHsweDA0LDB4M2YsMHhjMCwweDBmLDB4ZjAsMHg0MywweGZjLDB4MDAsMHg3ZiwweDAwLDB4M2YsMHg0MCwweDBlLDB4ZjAsMHgwMywweGQwIH0sCisgIDE2LCAweDhiNTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA0LDB4ZTgsMHgwMCwweGYyLDB4MDQsMHhiMywweDgwIH0sCisgIDE2LCAweDhiNjAsIDAsIHsweDBmLDB4YjgsMHgwYiwweDJjLDB4MDAsMHhlYiwweDgwLDB4MzIsMHhjMCwweDBjLDB4MjAsMHgxMywweDJlLDB4MDgsMHhjYiwweDAxIH0sCisgIDE2LCAweDhiNzAsIDAsIHsweDMyLDB4YzUsMHgwZiwweGIxLDB4MDMsMHhlYywweDQ4LDB4YzgsMHgxMCwweDMyLDB4ZmEsMHg4YywweDM4LDB4MDMsMHgzYywweDkwIH0sCisgIDE2LCAweDhiODAsIDAsIHsweGNiLDB4MDAsMHgzZSwweDQwLDB4MGYsMHhiMCwweDEzLDB4YzIsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhiOTAsIDAsIHsweGM4LDB4MTAsMHg5OCwweDAwLDB4ZjYsMHgwMCwweDYxLDB4ODEsMHgwYiwweGYwLDB4MDIsMHgxYywweDAwLDB4ZDcsMHgwMCwweGI3IH0sCisgIDE2LCAweDhiYTAsIDAsIHsweDgwLDB4MGMsMHg3MCwweDAyLDB4YmMsMHgxMCwweDhmLDB4MDAsMHgyMSwweGM4LDB4OGIsMHg3MiwweDQzLDB4ZmMsMHg4OCwweGRjIH0sCisgIDE2LCAweDhiYjAsIDAsIHsweDAwLDB4MzcsMHhjOCwweDBkLDB4NTAsMHgwMiwweDFjLDB4MjIsMHg4NywweDAwLDB4MmQsMHhjMCwweDBiLDB4NzAsMHgwMiwweGQzIH0sCisgIDE2LCAweDhiYzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4OWUsMHgwMCwweGI2LDB4ODAsMHhhOSwweGEwIH0sCisgIDE2LCAweDhiZDAsIDAsIHsweDRiLDB4N2MsMHgwMiwweDVlLDB4MzAsMHhhMywweDg4LDB4MjEsMHhmMCwweDA4LDB4NzgsMHgwMiwweDE2LDB4MDAsMHg4NSwweDgwIH0sCisgIDE2LCAweDhiZTAsIDAsIHsweDIxLDB4ZTAsMHgwYiwweDc4LDB4MDIsMHhkZSwweDAwLDB4ODcsMHg4MCwweGExLDB4ZTQsMHgwOCwweGQ4LDB4MDIsMHg0ZSwweDAwIH0sCisgIDE2LCAweDhiZjAsIDAsIHsweDk3LDB4ODAsMHgyZCwweDcwLDB4MGIsMHg3OCwweDAyLDB4YzgsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhjMDAsIDAsIHsweDQ4LDB4MTQsMHhlYywweDAwLDB4YjIsMHgwMCwweDI4LDB4YzAsMHgwYiwweDEwLDB4MDIsMHg0ZSwweDkwLDB4OTMsMHgwMiwweDIyIH0sCisgIDE2LCAweDhjMTAsIDAsIHsweGYwLDB4MDgsMHgzOCwweDQyLDB4OGMsMHg0MiwweDgzLDB4MDQsMHgyMiwweGU0LDB4NGIsMHgzOCwweDAyLDB4OGUsMHg0MCwweDgzIH0sCisgIDE2LCAweDhjMjAsIDAsIHsweDAwLDB4MjAsMHhjMCwweDA5LDB4MzgsMHgyMiwweDRlLDB4MjEsMHg5MywweDAwLDB4MmUsMHhlMCwweDBiLDB4MzAsMHgwMiwweGRiIH0sCisgIDE2LCAweDhjMzAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YTgsMHgwMSwweGZhLDB4MDAsMHgzYiwweDg5IH0sCisgIDE2LCAweDhjNDAsIDAsIHsweDBmLDB4YTAsMHgwMiwweDc4LDB4MDgsMHhhZSwweDQwLDB4MjMsMHg4MCwweDJjLDB4NmMsMHgwYiwweDNhLDB4MDAsMHg4ZSwweDhjIH0sCisgIDE2LCAweDhjNTAsIDAsIHsweGIyLDB4MDAsMHgwYiwweDgwLDB4ODIsMHhlMCwweDAyLDB4OGUsMHgwMCwweDIyLDB4ODAsMHgwYywweGU4LDB4MDIsMHg3YiwweDgwIH0sCisgIDE2LCAweDhjNjAsIDAsIHsweDlhLDB4ODAsMHgzZSwweDgwLDB4MGYsMHhhMCwweDAzLDB4ZmEsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhjNzAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDA5LDB4ZWMsMHgwMCwweDM2LDB4MjEsMHgwYiwweDgwLDB4MTMsMHhhMSwweDAwLDB4ZjgsMHg2MCwweDNlIH0sCisgIDE2LCAweDhjODAsIDAsIHsweDAwLDB4MGYsMHg4MSwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDQzLDB4ZTAsMHgxMCwweGY4IH0sCisgIDE2LCAweDhjOTAsIDAsIHsweDAwLDB4YmUsMHgwMCwweDBmLDB4ODUsMHgwYiwweDgwLDB4MDAsMHhlOCwweDEwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgwMywweGQyIH0sCisgIDE2LCAweDhjYTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMiwweGM5LDB4MDIsMHgzMCwweDQ4IH0sCisgIDE2LCAweDhjYjAsIDAsIHsweDBjLDB4OTksMHgxMywweGE0LDB4MDIsMHhjOSwweDAwLDB4M2UsMHg0MiwweDBjLDB4OTAsMHg4ZiwweDI0LDB4MDAsMHhmOSwweDAwIH0sCisgIDE2LCAweDhjYzAsIDAsIHsweDMyLDB4MjgsMHgwYywweDg4LDB4MDMsMHhlMCwweDAwLDB4YzksMHgwMCwweGIyLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNywweDAwIH0sCisgIDE2LCAweDhjZDAsIDAsIHsweGM5LDB4MTAsMHgzZSwweDQwLDB4MGMsMHgxMCwweDAzLDB4MDIsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhjZTAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAxLDB4ODksMHg4MCwweGEyLDB4NDgsMHgyOCwweDkyLDB4NDIsMHhjNSwweDAwLDB4ODksMHg0MCwweDJlIH0sCisgIDE2LCAweDhjZjAsIDAsIHsweDQwLDB4MmMsMHg5MCwweDA2LDB4MjUsMHgwMCwweGI5LDB4MDAsMHgyMiwweDUwLDB4MDgsMHg5OCwweDAyLDB4YzQsMHgwMCwweDg5IH0sCisgIDE2LCAweDhkMDAsIDAsIHsweDAxLDB4NzYsMHg0MCwweDRiLDB4OTIsMHgwMiwweGU1LDB4MDIsMHg4OSwweDAwLDB4MmUsMHg0MCwweDBkLDB4OTAsMHgwMywweDYwIH0sCisgIDE2LCAweDhkMTAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwYywweDg1LDB4MjAsMHhhMiwweDQwIH0sCisgIDE2LCAweDhkMjAsIDAsIHsweDA4LDB4OTAsMHgwNiwweGU1LDB4MDAsMHg4OSwweDQwLDB4MmUsMHg0MCwweDA5LDB4OTAsMHg0MiwweGE0LDB4YTAsMHgzMSwweDAwIH0sCisgIDE2LCAweDhkMzAsIDAsIHsweDIyLDB4NTAsMHgxOCwweDkxLDB4MDIsMHhlNCwweDAwLDB4ODEsMHgwMCwweDIyLDB4NDAsMHgwYiwweDkwLDB4MDYsMHhlNCwweDAwIH0sCisgIDE2LCAweDhkNDAsIDAsIHsweDg5LDB4MDAsMHgyZSwweDQwLDB4MDksMHg5MCwweDAyLDB4MGUsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhkNTAsIDAsIHsweDAwLDB4MDQsMHgxNSwweDAwLDB4ODUsMHg0MCwweDIwLDB4NDAsMHgwOCwweDE0LDB4MjYsMHhlNCwweDAwLDB4ODEsMHgwMCwweDJjIH0sCisgIDE2LCAweDhkNjAsIDAsIHsweDQwLDB4MTgsMHgxMCwweDAyLDB4ODQsMHg4MCwweGIxLDB4MjAsMHhhMCwweDUwLDB4MDgsMHgxNCwweDAyLDB4ZTUsMHgwMiwweDgxIH0sCisgIDE2LCAweDhkNzAsIDAsIHsweDQwLDB4MjAsMHg0OCwweDBiLDB4MTAsMHgwNiwweGNjLDB4MDAsMHg4MSwweDAxLDB4MmMsMHg1MCwweDA5LDB4MTQsMHgwMiwweDRhIH0sCisgIDE2LCAweDhkODAsIDAsIHsweDA1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweDhjLDB4MDAsMHgzMiwweDAwIH0sCisgIDE2LCAweDhkOTAsIDAsIHsweDBjLDB4ODAsMHgyMywweGUwLDB4MDAsMHhjOCwweDAwLDB4M2UsMHgxNCwweDBkLDB4ODAsMHgxMiwweGExLDB4NDQsMHhmOCwweDUxIH0sCisgIDE2LCAweDhkYTAsIDAsIHsweDMyLDB4MDAsMHgyYywweDgwLDB4MDMsMHhlMCwweDAwLDB4ODgsMHgwNCwweDIyLDB4MTQsMHgwZiwweDgwLDB4MDcsMHhlMCwweDAwIH0sCisgIDE2LCAweDhkYjAsIDAsIHsweGM4LDB4MDAsMHgzZSwweDAwLDB4MGQsMHg4MCwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhkYzAsIDAsIHsweDk4LDB4OWQsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNmLDB4NTAsMHgwZiwweGQwLDB4MDMsMHhkYywweDAxLDB4YmQsMHg0MiwweDNmIH0sCisgIDE2LCAweDhkZDAsIDAsIHsweDUwLDB4NGYsMHhkNCwweDQzLDB4NzQsMHg0MSwweGZkLDB4MTAsMHgzZiwweDEwLDB4MWYsMHhjNCwweDEzLDB4ZjEsMHgwMCwweGZkIH0sCisgIDE2LCAweDhkZTAsIDAsIHsweDQwLDB4N2UsMHg0NCwweDBmLDB4ZDAsMHg0MywweGY1LDB4MDEsMHhmZCwweDAwLDB4M2YsMHg0MCwweDBmLDB4OTQsMHgwMywweGU2IH0sCisgIDE2LCAweDhkZjAsIDAsIHsweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZjQsMHgwMCwweGRmLDB4MDUsMHgzMywweDYxIH0sCisgIDE2LCAweDhlMDAsIDAsIHsweDBmLDB4NTAsMHg1MywweDM0LDB4MTAsMHhmZCwweDA0LDB4MzMsMHg0NCwweDRmLDB4NTAsMHgwMywweDc2LDB4YzEsMHhjZCwweGUwIH0sCisgIDE2LCAweDhlMTAsIDAsIHsweDMzLDB4NjAsMHgwYywweGNlLDB4MDMsMHhmNiwweGMwLDB4ZTEsMHhjMCwweGI2LDB4NjQsMHg4ZiwweDUwLDB4MGIsMHgzNiwweDgyIH0sCisgIDE2LCAweDhlMjAsIDAsIHsweGNkLDB4MDAsMHgzZSwweDQ0LDB4NGMsMHg5ZSwweGMzLDB4YzYsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhlMzAsIDAsIHsweDM4LDB4MTAsMHhlYSwweDI4LDB4ODAsMHhhMCwweGIyLDB4MDQsMHgwYiwweDhhLDB4ODMsMHg2MCwweDAwLDB4ZmEsMHgwMCwweDM2IH0sCisgIDE2LCAweDhlNDAsIDAsIHsweDI4LDB4OGIsMHg4MCwweDAzLDB4ZTMsMHhjOCwweGM4LDB4ODQsMHgyMiwweDE0LDB4MDgsMHg4YSwweDAyLDB4ZTIsMHg4MCwweGQ4IH0sCisgIDE2LCAweDhlNTAsIDAsIHsweDgyLDB4MzQsMHgzNCwweDFiLDB4ODAsMHgwMywweDYwLDB4MDQsMHg4OCwweDAwLDB4MmUsMHgyMCwweDBhLDB4OGUsMHg0MiwweGNlIH0sCisgIDE2LCAweDhlNjAsIDAsIHsweDA2LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA1LDB4YzQsMHg4MCwweDgxLDB4MDgsMHgwNCwweDQxIH0sCisgIDE2LCAweDhlNzAsIDAsIHsweDBiLDB4OTIsMHgwMiwweDA0LDB4MDAsMHhiMSwweDAwLDB4MmMsMHg0MCwweDBiLDB4MTgsMHgwMiwweDI0LDB4MDAsMHhiMSwweDYwIH0sCisgIDE2LCAweDhlODAsIDAsIHsweDI2LDB4NDAsMHgwYSwweDE2LDB4MDIsMHhjNSwweDAwLDB4YTEsMHhjMCwweDIwLDB4NDgsMHgwYiwweDkwLDB4MDIsMHg0NywweDAwIH0sCisgIDE2LCAweDhlOTAsIDAsIHsweDkxLDB4MDEsMHgyYywweDQ4LDB4MTgsMHgxMiwweDAyLDB4ZDIsMHgwMSwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhlYTAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDBjLDB4OGIsMHgwNCwweGEyLDB4NTAsMHgwYiwweDkxLDB4MDIsMHgyNCwweDA0LDB4YTksMHgwMSwweDJlIH0sCisgIDE2LCAweDhlYjAsIDAsIHsweDQyLDB4MGIsMHg5MCwweDAyLDB4YTQsMHgwMCwweGE5LDB4MDAsMHgyNiwweDYwLDB4MGEsMHg5MCwweDAyLDB4ZTYsMHgwMCwweDgxIH0sCisgIDE2LCAweDhlYzAsIDAsIHsweDAwLDB4MjIsMHg0MCwweDhiLDB4YjAsMHgwMiwweDI0LDB4MDgsMHg5OSwweDEwLDB4MmUsMHg0MCwweDFhLDB4OTAsMHgwMiwweGM2IH0sCisgIDE2LCAweDhlZDAsIDAsIHsweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTUsMHgwMCwweGM5LDB4MDAsMHgzNiwweDQwIH0sCisgIDE2LCAweDhlZTAsIDAsIHsweDBmLDB4MTAsMHgwMiwweDI1LDB4MDAsMHhiMSwweDAwLDB4MmUsMHg2MCwweDBmLDB4MTAsMHgxMiwweDI0LDB4MDIsMHhiOSwweGEwIH0sCisgIDE2LCAweDhlZjAsIDAsIHsweGE0LDB4NDAsMHgyZSwweDkxLDB4MDMsMHhlNiwweDAwLDB4YTksMHgwMCwweDIyLDB4NDAsMHgwYiwweDE5LDB4ODAsMHg2NCwweDA0IH0sCisgIDE2LCAweDhmMDAsIDAsIHsweGQ5LDB4ODEsMHgyZSwweDQwLDB4NGMsMHg5MCwweDAzLDB4ZTgsMHgxNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhmMTAsIDAsIHsweDY4LDB4MDEsMHhhNCwweDBhLDB4ZTksMHgwMCwweGJlLDB4NDgsMHgwZiwweDk4LDB4MGIsMHhlNCwweDAwLDB4ZjksMHhjNCwweDM2IH0sCisgIDE2LCAweDhmMjAsIDAsIHsweDcwLDB4MWYsMHg5MiwweDAzLDB4ZTYsMHg5MCwweGMxLDB4OTAsMHgzYSwweDQwLDB4OGQsMHg4OCwweDAzLDB4ZTQsMHgwMCwweGY5IH0sCisgIDE2LCAweDhmMzAsIDAsIHsweDkwLDB4M2UsMHg0MCwweDBiLDB4OTgsMHgwMywweGU2LDB4NDAsMHhlOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGQyIH0sCisgIDE2LCAweDhmNDAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2OCwweDEwLDB4YTEsMHgwMiwweGQ4LDB4MjAsMHhiMiwweDEwIH0sCisgIDE2LCAweDhmNTAsIDAsIHsweDBjLDB4ODAsMHg4MywweDIxLDB4NDAsMHhjOCwweDU4LDB4YjIsMHgxMCwweDRjLDB4ODAsMHgwYiwweDIwLDB4MDAsMHhmOCwweDQyIH0sCisgIDE2LCAweDhmNjAsIDAsIHsweDMyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMCwweDAyLDB4ZDgsMHgwMCwweDcyLDB4MDAsMHgxYywweDgwLDB4MDAsMHgyMCwweDAwIH0sCisgIDE2LCAweDhmNzAsIDAsIHsweGY4LDB4MDQsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4MDIsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhmODAsIDAsIHsweDI4LDB4MDUsMHgzOCwweDA0LDB4Y2UsMHg0MSwweDIzLDB4ODAsMHgwOCwweGUwLDB4MDIsMHgzOSwweDEwLDB4YWUsMHg0MCwweDIyIH0sCisgIDE2LCAweDhmOTAsIDAsIHsweDgwLDB4MDgsMHhlMCwweDAyLDB4MWEsMHgwMCwweGJhLDB4MDAsMHgyYiwweGFkLDB4MDMsMHg4MCwweDAyLDB4ZTgsMHgwMCwweGNhIH0sCisgIDE2LCAweDhmYTAsIDAsIHsweDAwLDB4MmEsMHg4MCwweDBhLDB4ZTAsMHgwMiwweDE4LDB4MDAsMHhiYSwweDAwLDB4MWEsMHg4MCwweDBiLDB4YTAsMHgwMywweDRhIH0sCisgIDE2LCAweDhmYjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2OCwweDA1LDB4NmMsMHgxMiwweDg5LDB4MDAsMHhhMCwweGUwIH0sCisgIDE2LCAweDhmYzAsIDAsIHsweDA4LDB4MzgsMHgwMiwweDBkLDB4ODgsMHg4MywweDAwLDB4MDQsMHhlMCwweDA4LDB4MzgsMHgzMiwweDBlLDB4MjUsMHgzMSwweDAxIH0sCisgIDE2LCAweDhmZDAsIDAsIHsweDI0LDB4ZTAsMHg4YiwweDM4LDB4MDIsMHhlNCwweDAxLDB4ODMsMHgwMCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHg4YywweDAwIH0sCisgIDE2LCAweDhmZTAsIDAsIHsweGIzLDB4MDAsMHgyZSwweGMwLDB4MGIsMHgzMCwweDAyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDhmZjAsIDAsIHsweGEwLDB4MDEsMHgxNCwweDIwLDB4ODYsMHgyMCwweDI5LDB4YjAsMHgwOCwweGYwLDB4ODIsMHgzZSwweDA0LDB4YTcsMHgwMCwweDIxIH0sCisgIDE2LCAweDkwMDAsIDAsIHsweDcwLDB4ODgsMHg3MCwweDkyLDB4MWMsMHgyMCwweGJkLDB4MDAsMHg2OSwweGMwLDB4MGIsMHg3NiwweDAyLDB4ZDQsMHg4MCwweDhmIH0sCisgIDE2LCAweDkwMTAsIDAsIHsweDIxLDB4MjksMHhlMCwweDBhLDB4NjAsMHg4NiwweDk4LDB4MDEsMHhiNywweDAwLDB4MmQsMHhjOCwweDBiLDB4M2IsMHgwMiwweDYwIH0sCisgIDE2LCAweDkwMjAsIDAsIHsweDA0LDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4M2UsMHgwMCwweGM3LDB4YTAsMHhiMCwweGUwIH0sCisgIDE2LCAweDkwMzAsIDAsIHsweDJjLDB4NzgsMHgwYiwweDFhLDB4MDAsMHhjMywweDgwLDB4MzcsMHhlMCwweDI4LDB4NzgsMHgwMywweDFhLDB4MDgsMHhmNSwweDkwIH0sCisgIDE2LCAweDkwNDAsIDAsIHsweDM1LDB4ZTAsMHgwZiwweDdjLDB4MTIsMHhkNiwweDgyLDB4YzcsMHg5MCwweDIxLDB4ZTQsMHgwOCwweDc4LDB4MDMsMHg5ZSwweDAwIH0sCisgIDE2LCAweDkwNTAsIDAsIHsweGY1LDB4ODAsMHgzZCwweGYxLDB4MGYsMHg3OCwweDAzLDB4MjIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkwNjAsIDAsIHsweDA4LDB4MTksMHhhNCwweDAwLDB4ZWUsMHg4MCwweDM2LDB4YzEsMHg0ZiwweGQwLDB4MDMsMHhjOCwweDAwLDB4ZmIsMHgwMCwweDNlIH0sCisgIDE2LCAweDkwNzAsIDAsIHsweDUxLDB4MGYsMHhiMCwweDAzLDB4ZTQsMHgwOCwweGYxLDB4NjAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4YzUsMHgwMCwweGViIH0sCisgIDE2LCAweDkwODAsIDAsIHsweDEwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwOSwweDZjLDB4MDAsMHhmYiwweDAwLDB4M2EsMHhjMCwweDBmLDB4YjAsMHgwMywweGMyIH0sCisgIDE2LCAweDkwOTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4ZmUsMHgwMCwweGZkLDB4ODgsMHgzMywweDYwIH0sCisgIDE2LCAweDkwYTAsIDAsIHsweDBmLDB4ZjksMHgwMywweGNlLDB4NDAsMHhkNywweDg0LDB4MzcsMHg3MCwweDBjLDB4ZDgsMHgyMywweDM2LDB4MDAsMHhjNSwweDg4IH0sCisgIDE2LCAweDkwYjAsIDAsIHsweDMzLDB4ZTAsMHg0ZiwweGY4LDB4MTMsMHhmNywweDI4LDB4ZGYsMHg4MCwweDM3LDB4ZTIsMHgwYywweDU4LDB4MDMsMHgzZSwweDAwIH0sCisgIDE2LCAweDkwYzAsIDAsIHsweGZmLDB4OTAsMHgzZiwweGUwLDB4MGMsMHhmOCwweDAzLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkwZDAsIDAsIHsweGE5LDB4MTEsMHg5YywweDA4LDB4ZjYsMHgwMCwweGExLDB4MDAsMHgwYiwweDYzLDB4MDIsMHhkNiwweDMwLDB4ODUsMHg0MSwweDMxIH0sCisgIDE2LCAweDkwZTAsIDAsIHsweGM4LDB4MDgsMHg1MCwweDIzLDB4MWMsMHgwMCwweGQ1LDB4MjAsMHhiMSwweDgwLDB4MGYsMHg3MCwweDAzLDB4YjQsMHgwMCwweGM3IH0sCisgIDE2LCAweDkwZjAsIDAsIHsweDAwLDB4MjEsMHhjMCwweDBmLDB4NDAsMHhhMywweDU4LDB4NDAsMHhiNywweDAwLDB4M2YsMHhjNCwweDBhLDB4ZjAsMHgwMiwweDJhIH0sCisgIDE2LCAweDkxMDAsIDAsIHsweDA2LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWMsMHg0MCwweGI3LDB4MTAsMHgyMSwweGQyIH0sCisgIDE2LCAweDkxMTAsIDAsIHsweDBiLDB4NzAsMHgwMiwweGRjLDB4NDIsMHg4NiwweDAwLDB4MjUsMHg2MSwweDA4LDB4NTEsMHgwMiwweDUwLDB4MDAsMHg5NSwweDAwIH0sCisgIDE2LCAweDkxMjAsIDAsIHsweDI1LDB4YzAsMHgwOSwweDcwLDB4ODIsMHhkNCwweDAwLDB4ODcsMHgwMCwweDI0LDB4YzAsMHgwOCwweDUwLDB4MDIsMHg1YywweDAwIH0sCisgIDE2LCAweDkxMzAsIDAsIHsweDk1LDB4MDQsMHgyZCwweGMwLDB4MDgsMHg3MCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkxNDAsIDAsIHsweDIwLDB4MTQsMHhjYywweDA4LDB4YjIsMHhkMCwweDIwLDB4ZTAsMHg0YiwweDA4LDB4MDIsMHhjNCwweDAwLDB4ODAsMHg4MCwweDIwIH0sCisgIDE2LCAweDkxNTAsIDAsIHsweGYwLDB4MDgsMHgxYSwweDAyLDB4ODUsMHg0OCwweDgxLDB4MTAsMHgyMCwweDQwLDB4MGEsMHgzMCwweDAyLDB4YzYsMHgxMCwweDkzIH0sCisgIDE2LCAweDkxNjAsIDAsIHsweDAwLDB4MjAsMHhjMCwweDBhLDB4MWMsMHgwMiwweDBkLDB4NDAsMHhiMywweDAwLDB4NjgsMHhjNCwweDBhLDB4YjAsMHgwMiwweDA5IH0sCisgIDE2LCAweDkxNzAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YWMsMHgwMSwweGZlLDB4MDAsMHgzMiwweGYwIH0sCisgIDE2LCAweDkxODAsIDAsIHsweDBmLDB4ODgsMHgwMywweGU2LDB4MDAsMHhjOCwweGM4LDB4MzYsMHhmNiwweDI4LDB4YTYsMHgwYSwweDZkLDB4MDAsMHg5ZCwweDAwIH0sCisgIDE2LCAweDkxOTAsIDAsIHsweDMyLDB4MDAsMHgwYiwweGIwLDB4MDMsMHhmNiwweDAzLDB4YzcsMHgwMCwweDM3LDB4YzAsMHgwOCwweDljLDB4MGEsMHg2ZSwweDAwIH0sCisgIDE2LCAweDkxYTAsIDAsIHsweGJiLDB4MDAsMHgyZiwweGMwLDB4MGMsMHhmMCwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkxYjAsIDAsIHsweDgwLDB4MDAsMHhlNCwweDAxLDB4ZWIsMHg0MCwweDNlLDB4ODAsMHg0ZiwweGMxLDB4MDMsMHhlNCwweDAwLDB4YjgsMHgwOCwweDNhIH0sCisgIDE2LCAweDkxYzAsIDAsIHsweDQwLDB4OGYsMHhhNCwweDEzLDB4NmMsMHgyMCwweGY5LDB4MDAsMHgzZSwweDcwLDB4MGYsMHhiMCwweDAzLDB4YTQsMHg0MCwweGViIH0sCisgIDE2LCAweDkxZDAsIDAsIHsweDAwLDB4M2UsMHhjMCwweDBmLDB4OTIsMHgyMywweGU4LDB4MDAsMHhmOSwweDgwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHg2MywweGUwIH0sCisgIDE2LCAweDkxZTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwOCwweGNlLDB4MDgsMHgzMywweGMwIH0sCisgIDE2LCAweDkxZjAsIDAsIHsweDBmLDB4ZGEsMHgwMywweDMwLDB4MDAsMHhlNCwweDA0LDB4MzUsMHhjMCwweDBkLDB4YTAsMHgwMywweDI4LDB4MDAsMHhjNSwweDAwIH0sCisgIDE2LCAweDkyMDAsIDAsIHsweDMzLDB4MDAsMHgwYiwweGZhLDB4MDMsMHhmNCwweDAzLDB4Y2IsMHgwMCwweDMxLDB4YzAsMHgwYywweGQ0LDB4MDMsMHgxNCwweDIwIH0sCisgIDE2LCAweDkyMTAsIDAsIHsweGNkLDB4ODAsMHgyMywweGMxLDB4MGMsMHhmMCwweDAyLDB4MDgsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkyMjAsIDAsIHsweDgxLDB4MDQsMHg0NCwweDEwLDB4Y2IsMHhkMCwweDIyLDB4YzAsMHgwYiwweDk0LDB4MDIsMHgyMiwweDg0LDB4YjgsMHhjNiwweDAyIH0sCisgIDE2LCAweDkyMzAsIDAsIHsweDQwLDB4MDgsMHgyOCwweDAyLDB4YTUsMHg4MCwweDg5LDB4MDAsMHgyMiwweDYwLDB4MGIsMHhiOCwweDAyLDB4NjQsMHgwMCwweDhiIH0sCisgIDE2LCAweDkyNDAsIDAsIHsweDAwLDB4MmEsMHhjMCwweGM4LDB4MDAsMHgwMywweDY2LDB4MDAsMHg4MSwweDAwLDB4MDAsMHhjMCwweDBkLDB4YjAsMHgwYSwweGE4IH0sCisgIDE2LCAweDkyNTAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmMsMHgwMCwweDEzLDB4MDAsMHgyMiwweDQwIH0sCisgIDE2LCAweDkyNjAsIDAsIHsweDhiLDB4MjQsMHgwMiwweDJhLDB4MDAsMHhiYiwweDgyLDB4MjIsMHg0MCwweDAwLDB4YWMsMHgwMiwweDg0LDB4MDAsMHg4OSwweDAwIH0sCisgIDE2LCAweDkyNzAsIDAsIHsweDIyLDB4MjIsMHgwYiwweGIwLDB4MDIsMHhjNCwweDAwLDB4OWIsMHgwMCwweDJhLDB4YzAsMHgwOCwweGIwLDB4MDIsMHgyZSwweDAwIH0sCisgIDE2LCAweDkyODAsIDAsIHsweDhiLDB4MTAsMHgyYSwweGMwLDB4MDgsMHhiMCwweDAyLDB4YTAsMHgxMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkyOTAsIDAsIHsweDA4LDB4MDQsMHgwYywweDEwLDB4ODMsMHgwMCwweDIwLDB4MDEsMHgwYiwweDIwLDB4MDIsMHgwMCwweDgwLDB4YjEsMHgwMCwweDIwIH0sCisgIDE2LCAweDkyYTAsIDAsIHsweGMxLDB4MDgsMHgyMCwweDAyLDB4ODgsMHgwMSwweDgxLDB4MDAsMHhhMCwweDAwLDB4MGIsMHgzMCwweDAyLDB4NDQsMHgwMSwweDliIH0sCisgIDE2LCAweDkyYjAsIDAsIHsweDAwLDB4MjgsMHhjMCwweDA4LDB4YjAsMHgwMiwweDQ4LDB4MDYsMHg4OSwweDAwLDB4MmEsMHhjMCwweDA5LDB4MzAsMHgwMiwweDgyIH0sCisgIDE2LCAweDkyYzAsIDAsIHsweDA1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhkLDB4NmMsMHgwMCwweGMzLDB4MDAsMHhiMiwweGMwIH0sCisgIDE2LCAweDkyZDAsIDAsIHsweDBmLDB4YjAsMHgwMywweDI4LDB4MjAsMHhmYSwweDAwLDB4YjEsMHg0MCwweDBkLDB4YTAsMHgwNywweGEwLDB4MDAsMHhjZCwweDAwIH0sCisgIDE2LCAweDkyZTAsIDAsIHsweDIyLDB4MDAsMHgwZiwweGIwLDB4MDMsMHhmNCwweDAwLDB4OWYsMHgwMCwweDNiLDB4YzAsMHgyYywweGIwLDB4MGIsMHgyNCwweDAwIH0sCisgIDE2LCAweDkyZjAsIDAsIHsweGM5LDB4MDAsMHhiYSwweGMwLDB4MGMsMHhiMCwweDAzLDB4ODAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkzMDAsIDAsIHsweGEwLDB4MWQsMHhmYywweDA2LDB4ZmYsMHgwMiwweGFmLDB4YzAsMHgwZiwweGMwLDB4MDMsMHhmMCwweDEwLDB4ZmMsMHgwMCwweDNmIH0sCisgIDE2LCAweDkzMTAsIDAsIHsweGMwLDB4OWYsMHhlMCwweDEzLDB4ZjAsMHgwMCwweGZkLDB4MDQsMHgzZiwweDQwLDB4NGYsMHhmMCwweDAzLDB4NzQsMHgwMCwweGVmIH0sCisgIDE2LCAweDkzMjAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDhmLDB4ZTAsMHgwMiwweGI0LDB4MDEsMHhmZCwweDA0LDB4MzcsMHhjMCwweDBmLDB4ZjAsMHg0MywweDY4IH0sCisgIDE2LCAweDkzMzAsIDAsIHsweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHgwMCwweGM3LDB4MjAsMHhiMywweGM4IH0sCisgIDE2LCAweDkzNDAsIDAsIHsweDFjLDB4ZjEsMHgwMywweDdjLDB4MjAsMHhjZiwweDBhLDB4M2YsMHhkMCwweDBkLDB4ZjAsMHgwMywweDdjLDB4ODAsMHg4ZiwweDMyIH0sCisgIDE2LCAweDkzNTAsIDAsIHsweDMzLDB4YzQsMHgwZiwweGYxLDB4ODMsMHgzYywweGUwLDB4Y2YsMHgxMCwweDMzLDB4YzQsMHgwZCwweGYyLDB4ODMsMHgzYywweGUyIH0sCisgIDE2LCAweDkzNjAsIDAsIHsweGM3LDB4ODAsMHgxNywweGNjLDB4NGMsMHhmMywweDgzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkzNzAsIDAsIHsweDgwLDB4MTAsMHhlMywweDQwLDB4ODgsMHg2OCwweDIyLDB4MzAsMHgwOCwweDA2LDB4MDIsMHgwMSwweGExLDB4ODgsMHhjNCwweDBlIH0sCisgIDE2LCAweDkzODAsIDAsIHsweDE0LDB4MDgsMHg4NywweDgwLDB4MDEsMHhjMCwweDI4LDB4NTAsMHgwMiwweDA0LDB4OGIsMHg4NiwweDAyLDB4YTEsMHg5OCwweDg4IH0sCisgIDE2LCAweDkzOTAsIDAsIHsweDQxLDB4MmEsMHgwNCwweDBhLDB4ODQsMHg4MiwweGJkLDB4ODAsMHg4YiwweDA4LDB4MmIsMHhjNCwweDg4LDB4ZjQsMHgwMywweDYwIH0sCisgIDE2LCAweDkzYTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2MsMHgwOCwweDgyLDB4NDAsMHgyMCwweDEwIH0sCisgIDE2LCAweDkzYjAsIDAsIHsweDA4LDB4MjEsMHgxMiwweDQ0LDB4MDQsMHg4MiwweDA0LDB4MmMsMHgwOCwweDg5LDB4OTAsMHgwMiwweDQ0LDB4MjEsMHg4YiwweDAwIH0sCisgIDE2LCAweDkzYzAsIDAsIHsweDI0LDB4ODgsMHg4YiwweGEwLDB4MDAsMHg0MCwweDg0LDB4ODksMHgzMCwweDIyLDB4NDgsMHg4OCwweGIwLDB4MDIsMHhjYywweDA4IH0sCisgIDE2LCAweDkzZDAsIDAsIHsweDg4LDB4MjAsMHhhNCwweGM4LDB4MDAsMHgzMiwweDBhLDB4MjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDkzZTAsIDAsIHsweGMwLDB4MTUsMHhhMCwweDAwLDB4ODksMHgwMCwweDIyLDB4YzEsMHg4OCwweDkwLDB4NjIsMHgyOCwweDA4LDB4ODksMHgwOCwweDJlIH0sCisgIDE2LCAweDkzZjAsIDAsIHsweGMwLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwOCwweGE4LDB4MDAsMHgyNiwweDQyLDB4MGIsMHg5MCwweDAyLDB4Y2MsMHg1MCwweDhhIH0sCisgIDE2LCAweDk0MDAsIDAsIHsweDIyLDB4MmEsMHg4NiwweDBhLDB4ODAsMHgwMiwweGVjLDB4MDAsMHg4OCwweDg0LDB4MmEsMHhjMSwweDA4LDB4YjAsMHgyNiwweDMwIH0sCisgIDE2LCAweDk0MTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZjAsMHgwMiwweGNmLDB4MDAsMHgzMywweGMwIH0sCisgIDE2LCAweDk0MjAsIDAsIHsweDQ4LDB4ZjgsMHg0MywweDc5LDB4MDAsMHg4ZCwweGMwLDB4M2YsMHgzMCwweDhkLDB4NjAsMHg4MywweDc4LDB4NjAsMHhjNCwweDU4IH0sCisgIDE2LCAweDk0MzAsIDAsIHsweDM3LDB4MjAsMHgwZiwweDU4LDB4MTMsMHg3YiwweDAyLDB4Y2MsMHhjNCwweDMxLDB4MjAsMHgwYywweDQ0LDB4MDMsMHhlYywweDAyIH0sCisgIDE2LCAweDk0NDAsIDAsIHsweDhiLDB4ODAsMHgzNiwweGMwLDB4MjQsMHhiMCwweDEyLDB4MTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk0NTAsIDAsIHsweGUwLDB4MDEsMHg5YywweDAwLDB4ZjQsMHgxMCwweDNkLDB4MDAsMHg2ZiwweGM5LDB4MTMsMHhkNCwweDEyLDB4ZmUsMHg5MCwweDNmIH0sCisgIDE2LCAweDk0NjAsIDAsIHsweGYwLDB4MGYsMHhkYSwweDIzLDB4ZjQsMHgxNCwweGZmLDB4MDIsMHgzYiwweGYwLDB4MGYsMHhlYSwweDIzLDB4YjYsMHgwMCwweGZmIH0sCisgIDE2LCAweDk0NzAsIDAsIHsweDgyLDB4M2YsMHhlMSwweDhmLDB4ZjQsMHgwMywweGJjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweGFmLDB4NzAsMHgwMywweGY4IH0sCisgIDE2LCAweDk0ODAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YTAsMHgwMCwweGNhLDB4MDAsMHgzMiwweDA4IH0sCisgIDE2LCAweDk0OTAsIDAsIHsweDFjLDB4YTAsMHgwMywweGE1LDB4MjAsMHhjYiwweDQwLDB4YmEsMHgxMCwweDFmLDB4YjAsMHgwMywweGFjLDB4MDAsMHhlYiwweDAwIH0sCisgIDE2LCAweDk0YTAsIDAsIHsweDcyLDB4OTAsMHgwYywweGI0LDB4MDMsMHgyOSwweDA0LDB4YzksMHg1MiwweDMyLDB4NTAsMHgwYywweGI0LDB4MDMsMHgwYywweDAwIH0sCisgIDE2LCAweDk0YjAsIDAsIHsweGY4LDB4NDAsMHgzMiwweGMxLDB4MGUsMHhiMCwweDBiLDB4NTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk0YzAsIDAsIHsweGM4LDB4MDUsMHgyZCwweDgwLDB4ODksMHg4MCwweDIyLDB4ZDksMHgwOCwweDkwLDB4MjIsMHgyYSwweDAwLDB4ODgsMHg1NCwweDIyIH0sCisgIDE2LCAweDk0ZDAsIDAsIHsweGMwLDB4OGIsMHg4MCwweDIyLDB4MjAsMHgxOSwweGM4LDB4MDAsMHgyMiwweDQwLDB4OGQsMHg4MCwweDFhLDB4MjQsMHgxMCwweGQyIH0sCisgIDE2LCAweDk0ZTAsIDAsIHsweDQ0LDB4MjIsMHg4MSwweDBkLDB4ODAsMHgwMywweDdjLDB4MDAsMHhiMCwweDAwLDB4MzcsMHhjMCwweDg4LDB4ZjAsMHgwMiwweDMyIH0sCisgIDE2LCAweDk0ZjAsIDAsIHsweDEwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NGUsMHgwMCwweDgxLDB4MDAsMHhhMCwweGYwIH0sCisgIDE2LCAweDk1MDAsIDAsIHsweDA4LDB4OTAsMHgwMiwweDg5LDB4MDIsMHg4MCwweDAwLDB4MjIsMHhjMCwweDBiLDB4MDAsMHgyMiwweGEwLDB4MDAsMHhiMCwweDAwIH0sCisgIDE2LCAweDk1MTAsIDAsIHsweDIwLDB4NDAsMHgwOCwweDAwLDB4MDIsMHgwNCwweDAwLDB4ODIsMHg2MCwweDIwLDB4ODAsMHgwOCwweDAwLDB4MDIsMHgwYywweDA4IH0sCisgIDE2LCAweDk1MjAsIDAsIHsweGIyLDB4MDAsMHgyMiwweGMwLDB4MDgsMHgzMCwweDAyLDB4MzgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk1MzAsIDAsIHsweDIwLDB4MDEsMHgwMywweDEwLDB4OGUsMHg5MCwweDIzLDB4MjQsMHgwOCwweDZiLDB4MDIsMHgxNiwweDYwLDB4OGYsMHg4MCwweDIxIH0sCisgIDE2LCAweDk1NDAsIDAsIHsweDI4LDB4MGIsMHhmOSwweDA2LDB4MWUsMHg0MCwweDhmLDB4ODAsMHgyMywweGE0LDB4NDksMHg3OSwweDAyLDB4M2EsMHg0MCwweDlkIH0sCisgIDE2LCAweDk1NTAsIDAsIHsweDkwLDB4MjMsMHg2NCwweDA5LDB4ZjgsMHgwMiwweDVlLDB4NDAsMHhiZSwweDkwLDB4MjQsMHhlNCwweDI4LDB4NzksMHgwMiwweDA4IH0sCisgIDE2LCAweDk1NjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHg0MiwweGMwLDB4MDksMHgzMCwweDAwIH0sCisgIDE2LCAweDk1NzAsIDAsIHsweDI4LDB4MDIsMHgwMywweDg0LDB4MDAsMHg4YSwweDIwLDB4MzAsMHhjNCwweDhiLDB4MTEsMHgwMywweDg0LDB4NTAsMHhiMywweDAwIH0sCisgIDE2LCAweDk1ODAsIDAsIHsweDIwLDB4YzAsMHgwYywweGE0LDB4MjIsMHgwNCwweDAwLDB4Y2IsMHg0MCwweDMwLDB4YzUsMHgwYywweDMwLDB4MDMsMHgwZSwweDQwIH0sCisgIDE2LCAweDk1OTAsIDAsIHsweGYzLDB4MTAsMHgzMCwweGM0LDB4MGMsMHhiMCwweDAzLDB4MTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk1YTAsIDAsIHsweDQwLDB4MWQsMHhiMCwweDA0LDB4ZmIsMHgwNCwweDNkLDB4YzAsMHgwZiwweGYyLDB4NDMsMHhmOCwweDA0LDB4ZmQsMHgwMSwweDNmIH0sCisgIDE2LCAweDk1YjAsIDAsIHsweDBjLDB4MGYsMHg2MSwweDAzLDB4ZjgsMHg0OCwweGY0LDB4MDAsMHgzZCwweDAxLDB4MGYsMHhkMCwweDAzLDB4YzgsMHgwMCwweGZjIH0sCisgIDE2LCAweDk1YzAsIDAsIHsweDA0LDB4YmQsMHgwNCwweDBiLDB4NDgsMHgwMywweGZjLDB4MTgsMHhmZiwweDE0LDB4M2YsMHhkNSwweDBkLDB4ZjAsMHgwMywweDkwIH0sCisgIDE2LCAweDk1ZDAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZTAsMHgwMCwweGY5LDB4MDEsMHgzMiwweGMwIH0sCisgIDE2LCAweDk1ZTAsIDAsIHsweDhlLDB4OTAsMHgwMywweDI4LDB4MDIsMHhkMSwweDAwLDB4MzIsMHhjMCwweDBkLDB4YTgsMHgwYiwweDA4LDB4MDAsMHhlOCwweDAwIH0sCisgIDE2LCAweDk1ZjAsIDAsIHsweDJlLDB4NDAsMHgwYywweDk4LDB4MGIsMHgyZSwweDAyLDB4Y2EsMHgwMCwweGIyLDB4YTAsMHg2YywweDgwLDB4MjMsMHgyZCwweDgwIH0sCisgIDE2LCAweDk2MDAsIDAsIHsweGNhLDB4ODAsMHgzMiwweGQwLDB4MGMsMHhiYSwweDAzLDB4MmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk2MTAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDAwLDB4YjYsMHgwMCwweGEzLDB4MDAsMHgwOCwweDYwLDB4MDIsMHgwNCwweDAwLDB4ODYsMHgwNCwweDI5IH0sCisgIDE2LCAweDk2MjAsIDAsIHsweDAwLDB4MDgsMHg1MCwweDQyLDB4MTQsMHgwNCwweGE3LDB4MDAsMHgwZCwweDgwLDB4NGEsMHg2MCwweDAyLDB4MDAsMHgwMCwweDgxIH0sCisgIDE2LCAweDk2MzAsIDAsIHsweDAwLDB4MjEsMHg0MCwweDA4LDB4NzAsMHgwMiwweDlkLDB4NDIsMHg4NiwweDAxLDB4MjAsMHhjMCwweDA4LDB4MzIsMHg4MiwweDEyIH0sCisgIDE2LCAweDk2NDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OTIsMHgwMCwweGJjLDB4ODAsMHg2MywweDIwIH0sCisgIDE2LCAweDk2NTAsIDAsIHsweDgyLDB4MDgsMHgwMiwweDUyLDB4MDAsMHg4NCwweGMyLDB4MjMsMHgyMCwweDg4LDB4MGMsMHgwMiwweDMzLDB4MDAsMHg4NCwweDgwIH0sCisgIDE2LCAweDk2NjAsIDAsIHsweDJmLDB4MjEsMHg4OSwweDRjLDB4MDIsMHgxMiwweDE0LDB4OTQsMHhjNSwweDY0LDB4MjEsMHgwOCwweDRjLDB4MDIsMHgwZSwweDgwIH0sCisgIDE2LCAweDk2NzAsIDAsIHsweDk3LDB4ODIsMHhhMSwweGVjLDB4MDgsMHg3OSwweDAyLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk2ODAsIDAsIHsweDQ4LDB4MTQsMHhjZCwweDQ0LDB4YjMsMHgwMCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHg0ZCwweDgwLDB4MDMsMHg4OCwweDI4IH0sCisgIDE2LCAweDk2OTAsIDAsIHsweGMwLDB4MDgsMHgzYywweDA2LDB4MGYsMHgwMCwweGEzLDB4NDMsMHgyYywweGMyLDB4MWIsMHgzOCwweDAyLDB4MGYsMHgwMCwweDliIH0sCisgIDE2LCAweDk2YTAsIDAsIHsweDg4LDB4NjQsMHhkMCwweDA4LDB4YjgsMHgwMiwweDhjLDB4MTAsMHg5MywweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwYSwweDEyIH0sCisgIDE2LCAweDk2YjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YWEsMHgwMCwweGZhLDB4MDUsMHgzMiwweDgwIH0sCisgIDE2LCAweDk2YzAsIDAsIHsweDhlLDB4YTAsMHgwYiwweDY5LDB4MDAsMHhjYSwweDQwLDB4MzIsMHhhMCwweDNjLDB4YTgsMHgwMywweDJhLDB4MDAsMHhlYSwweDI2IH0sCisgIDE2LCAweDk2ZDAsIDAsIHsweDNlLDB4YjAsMHgwZCwweGExLDB4NjMsMHgyOCwweDIwLDB4Y2EsMHg0MCwweDM2LDB4YTAsMHgwYywweGUwLDB4MTMsMHgyOCwweDA5IH0sCisgIDE2LCAweDk2ZTAsIDAsIHsweGRlLDB4MDAsMHgzMiwweDgwLDB4MmMsMHhhMCwweDAzLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk2ZjAsIDAsIHsweDQ4LDB4MDAsMHhmMCwweDIwLDB4ZjQsMHgwMCwweDNmLDB4MDAsMHgwZiwweDQwLDB4MjMsMHhiMCwweDAwLDB4ZWMsMHgwMCwweDNmIH0sCisgIDE2LCAweDk3MDAsIDAsIHsweDA2LDB4MWUsMHhjMiwweDEzLDB4ZjAsMHg4OCwweGZjLDB4MjAsMHgzZiwweDA0LDB4OGUsMHhjMCwweDAzLDB4ZjAsMHg4MCwweGVjIH0sCisgIDE2LCAweDk3MTAsIDAsIHsweDQwLDB4M2IsMHgwYywweDBmLDB4YzAsMHhhMywweGUwLDB4MDAsMHhlOCwweDAwLDB4M2UsMHgwMCwweDRmLDB4ODAsMHgwMywweGQyIH0sCisgIDE2LCAweDk3MjAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzMiwweDQwIH0sCisgIDE2LCAweDk3MzAsIDAsIHsweDBjLDB4OTAsMHgwMywweDI0LDB4MDAsMHhjOSwweDgwLDB4MzIsMHg0MCwweDBmLDB4OTAsMHg1MywweGU0LDB4MTAsMHhjOSwweDAwIH0sCisgIDE2LCAweDk3NDAsIDAsIHsweDMyLDB4NDAsMHgwZCwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDM2LDB4NDAsMHg4ZiwweDkwLDB4MDMsMHgyNCwweDEwIH0sCisgIDE2LCAweDk3NTAsIDAsIHsweGM5LDB4MDEsMHgzYywweDQwLDB4MGMsMHg5MCwweDAzLDB4YzIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk3NjAsIDAsIHsweDgwLDB4MDQsMHg0NywweDQ0LDB4ODksMHgwMCwweDIwLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyNSwweDBhLDB4ODEsMHgxMCwweDIyIH0sCisgIDE2LCAweDk3NzAsIDAsIHsweDQwLDB4NDgsMHg5MCwweDAzLDB4YzQsMHgwMCwweDg5LDB4MDAsMHg3NiwweDQwLDB4MjgsMHg5MCwweDAyLDB4ZTQsMHgxMCwweGI5IH0sCisgIDE2LCAweDk3ODAsIDAsIHsweDQwLDB4YjIsMHg0MCwweDBiLDB4OTAsMHgwMywweDY0LDB4MDAsMHg4OSwweDAwLDB4MmUsMHg0MSwweDA4LDB4OTAsMHg0MiwweGUwIH0sCisgIDE2LCAweDk3OTAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjQsMHgwMiwweGJkLDB4MDAsMHgyMywweDQ4IH0sCisgIDE2LCAweDk3YTAsIDAsIHsweDA4LDB4ZDAsMHgwNiwweDFkLDB4MDQsMHg4ZCwweDAwLDB4MjksMHhjMCwweDRhLDB4ZDAsMHgyMiwweGY0LDB4MDAsMHg4NSwweDAwIH0sCisgIDE2LCAweDk3YjAsIDAsIHsweDYxLDB4NDAsMHgxOCwweGQwLDB4MTIsMHhmYywweDAwLDB4YmQsMHg0MCwweGEzLDB4NDAsMHg0YiwweGYwLDB4MDIsMHgwNCwweDAxIH0sCisgIDE2LCAweDk3YzAsIDAsIHsweDhiLDB4MDAsMHgyZSwweDQwLDB4MDgsMHg5MCwweDAyLDB4YzYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk3ZDAsIDAsIHsweDA4LDB4MDQsMHgzNiwweDgwLDB4ODUsMHgyMCwweGEzLDB4NDgsMHgwOCwweDUyLDB4MGEsMHgxNCwweDgxLDB4ODUsMHgyMCwweDI5IH0sCisgIDE2LCAweDk3ZTAsIDAsIHsweDQ4LDB4MDgsMHg1MiwweDAyLDB4YjQsMHg4MCwweDg1LDB4MjAsMHgyNSwweDQ4LDB4ODgsMHg1MiwweDAyLDB4ZDQsMHg4MCwweGI1IH0sCisgIDE2LCAweDk3ZjAsIDAsIHsweDIwLDB4MjEsMHg0OCwweDBiLDB4NTIsMHgwMiwweDQ0LDB4YTIsMHg4MSwweDAwLDB4MmMsMHg0YSwweDA4LDB4MTIsMHg4MiwweGMyIH0sCisgIDE2LCAweDk4MDAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGY4LDB4NTEsMHgyMiwweDAwIH0sCisgIDE2LCAweDk4MTAsIDAsIHsweDJjLDB4ODUsMHgwMiwweDIxLDB4NDgsMHhjOCwweDAwLDB4YmEsMHgxNCwweDBmLDB4ODUsMHgxMiwweGUxLDB4NDIsMHhjOCwweDUwIH0sCisgIDE2LCAweDk4MjAsIDAsIHsweDIyLDB4MDAsMHgwYywweDAwLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHg1MCwweDMyLDB4MDAsMHgwNywweDQ1LDB4MDMsMHgyMCwweDgwIH0sCisgIDE2LCAweDk4MzAsIDAsIHsweGMwLDB4MDEsMHgzZSwweDA4LDB4MmMsMHg4MiwweDAzLDB4ZWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk4NDAsIDAsIHsweDk4LDB4MGQsMHhlNCwweDQwLDB4ZjEsMHgxMCwweDNlLDB4NDQsMHgwNywweDkxLDB4NDMsMHhlNCwweDU4LDB4ZjksMHgxMSwweDM0IH0sCisgIDE2LCAweDk4NTAsIDAsIHsweDQ0LDB4NGYsMHg5MSwweDAyLDB4ZTQsMHg1MCwweGY5LDB4MTAsMHgzYywweDRmLDB4MGYsMHg5MywweDgzLDB4ZTQsMHhmMCwweGY5IH0sCisgIDE2LCAweDk4NjAsIDAsIHsweDExLDB4M2EsMHg0ZiwweDBmLDB4OTEsMHgwMywweGU0LDB4YTAsMHhmZCwweDI4LDB4M2UsMHg0YSwweDBmLDB4OTIsMHg4MywweGU2IH0sCisgIDE2LCAweDk4NzAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZjYsMHhhMCwweGNkLDB4YTAsMHhiMywweDY4IH0sCisgIDE2LCAweDk4ODAsIDAsIHsweDhjLDB4OWEsMHgwMywweDM2LDB4ODAsMHhjNSwweGEwLDB4MjIsMHg2MCwweDBjLDB4OWEsMHgyMywweDI2LDB4MDQsMHhmOSwweGEwIH0sCisgIDE2LCAweDk4OTAsIDAsIHsweDMyLDB4NjYsMHgwYywweDlhLDB4ODMsMHgwNiwweDIwLDB4YzUsMHhhMCwweDIyLDB4NjAsMHgwYywweDliLDB4MDMsMHgyNiwweDQ4IH0sCisgIDE2LCAweDk4YTAsIDAsIHsweGM5LDB4MDAsMHgzZSwweDc4LDB4MGMsMHg5YSwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk4YjAsIDAsIHsweDM4LDB4MDAsMHhlMSwweDAwLDB4ODgsMHg0NCwweDIyLDB4OTUsMHgwOCwweDg1LDB4MTIsMHhhMSwweDQyLDB4ODgsMHg0MCwweDAyIH0sCisgIDE2LCAweDk4YzAsIDAsIHsweDkwLDB4MDgsMHg4NCwweDAyLDB4MjMsMHhhMCwweGJhLDB4NDAsMHgyMiwweGEwLDB4MDgsMHg4ZSwweDkyLDB4YTMsMHhhMCwweGE4IH0sCisgIDE2LCAweDk4ZDAsIDAsIHsweDQwLDB4MmEsMHgxMCwweDA4LDB4YWUsMHgwMiwweDIzLDB4NDAsMHg4OCwweDAwLDB4MmUsMHgzOCwweDA4LDB4ODQsMHgxMiwweDBlIH0sCisgIDE2LCAweDk4ZTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDE1LDB4YzQsMHgwMCwweDhiLDB4MTIsMHgyMiwweDQwIH0sCisgIDE2LCAweDk4ZjAsIDAsIHsweDA4LDB4OTAsMHgwMiwweDQ0LDB4MDAsMHg4MSwweDQwLDB4YTAsMHg1MCwweDA4LDB4MTEsMHgwYSwweDA1LDB4MDAsMHhiMSwweDEwIH0sCisgIDE2LCAweDk5MDAsIDAsIHsweGEwLDB4NDgsMHgwOCwweDkwLDB4MDIsMHgwNCwweDAwLDB4ODEsMHg0MCwweDIwLDB4NTAsMHgyOCwweDExLDB4MDIsMHg0NCwweDgyIH0sCisgIDE2LCAweDk5MTAsIDAsIHsweDgxLDB4MDAsMHgyYywweDUwLDB4MDgsMHgxMSwweDAyLDB4MDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk5MjAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDAyLDB4ODksMHg0MCwweDIyLDB4NDAsMHgwOCwweDk0LDB4MTIsMHhhNSwweDAwLDB4ODksMHgyOCwweDIyIH0sCisgIDE2LCAweDk5MzAsIDAsIHsweDQ5LDB4MDgsMHg5NCwweDAyLDB4MjQsMHg0OCwweGI5LDB4MTQsMHgyMiwweDQwLDB4MDgsMHg5NCwweDAyLDB4YTQsMHg0MCwweGExIH0sCisgIDE2LCAweDk5NDAsIDAsIHsweDUwLDB4MmEsMHg1MCwweDA4LDB4OTEsMHg0MiwweDY0LDB4MDAsMHg4OSwweDQwLDB4MmUsMHg0MCwweDA4LDB4MTAsMHgwMiwweDA2IH0sCisgIDE2LCAweDk5NTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgwMCwweGM5LDB4MDAsMHgzMCwweDcwIH0sCisgIDE2LCAweDk5NjAsIDAsIHsweDJjLDB4MTAsMHgwYiwweDY2LDB4MDAsMHhjOSwweDQwLDB4MzIsMHg1MCwweDBjLDB4OTAsMHgwMywweDI2LDB4MjAsMHhmOSwweGMwIH0sCisgIDE2LCAweDk5NzAsIDAsIHsweDMyLDB4NzAsMHgwYywweDkwLDB4MDMsMHgyNiwweDIwLDB4YzksMHgwMCwweDMyLDB4NDAsMHgwYywweDljLDB4MDMsMHg2NCwweDAwIH0sCisgIDE2LCAweDk5ODAsIDAsIHsweGM5LDB4NDEsMHgzZSwweDQwLDB4MmMsMHg5MCwweDBiLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDk5OTAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwNCwweDNlLDB4NDgsMHgwZiwweDkwLDB4MDMsMHhlNCwweDg4LDB4ZjksMHgwMCwweDM0IH0sCisgIDE2LCAweDk5YTAsIDAsIHsweDQxLDB4MmYsMHg5YywweDAzLDB4ZTQsMHgxMCwweGY5LDB4MDAsMHgzZSwweDQ0LDB4MmYsMHg5OSwweDAzLDB4ZTQsMHgxMCwweGY5IH0sCisgIDE2LCAweDk5YjAsIDAsIHsweDAwLDB4M2UsMHg1MCwweDBmLDB4MTAsMHg0YiwweGE0LDB4MTAsMHhmOSwweDIwLDB4M2MsMHg0MCwweDBmLDB4OTAsMHgwMywweDRhIH0sCisgIDE2LCAweDk5YzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGM4LDB4MDAsMHgzZSwweDEwIH0sCisgIDE2LCAweDk5ZDAsIDAsIHsweDJjLDB4ODAsMHgwMywweDIwLDB4MDIsMHhjMCwweDQwLDB4MzIsMHgwMCwweDFjLDB4MDQsMHgwZiwweDIxLDB4MDAsMHhjMCwweDA0IH0sCisgIDE2LCAweDk5ZTAsIDAsIHsweDM4LDB4MDAsMHgwZiwweDgwLDB4MDMsMHgyMSwweDA4LDB4YzgsMHg2MCwweDMwLDB4MTAsMHgwZiwweDgwLDB4MDIsMHgyMCwweDAwIH0sCisgIDE2LCAweDk5ZjAsIDAsIHsweGY4LDB4MDAsMHgzMiwweDAwLDB4MGMsMHg4MCwweDAzLDB4Y2EsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlhMDAsIDAsIHsweDI4LDB4MDUsMHgxYSwweDIwLDB4ODIsMHgwNCwweDJmLDB4ODAsMHgwOCwweGEwLDB4MDIsMHgzOCwweDAwLDB4OGUsMHg4MCwweDIyIH0sCisgIDE2LCAweDlhMTAsIDAsIHsweDgwLDB4MDgsMHhlMCwweDAyLDB4MjgsMHgwMCwweDhhLDB4MDAsMHgyMiwweDgxLDB4MGIsMHgyMCwweDAyLDB4MjgsMHgwMCwweGRlIH0sCisgIDE2LCAweDlhMjAsIDAsIHsweGU0LDB4MzYsMHg4MCwweDBiLDB4YTAsMHg0MiwweDI4LDB4MDAsMHhiYSwweDA0LDB4MjIsMHg4MCwweDA4LDB4YTAsMHgwMiwweGNhIH0sCisgIDE2LCAweDlhMzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweDgzLDB4MDEsMHgyYywweDgwIH0sCisgIDE2LCAweDlhNDAsIDAsIHsweDA4LDB4MzAsMHgwMiwweDJlLDB4NjAsMHg4MiwweDkwLDB4YTAsMHhjMCwweDQ4LDB4MzAsMHgwMiwweDBjLDB4MDIsMHg4MywweDAwIH0sCisgIDE2LCAweDlhNTAsIDAsIHsweDI4LDB4YzAsMHgwYiwweDMwLDB4MGEsMHgyYywweDAwLDB4ODMsMHhjMiwweDIwLDB4YzAsMHgwYiwweDMwLDB4MmEsMHgyYywweDAwIH0sCisgIDE2LCAweDlhNjAsIDAsIHsweGIzLDB4MDAsMHhhMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4Y2EsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlhNzAsIDAsIHsweGEwLDB4MDEsMHgzYywweDAwLDB4ODcsMHgwMSwweDJkLDB4YzIsMHgwOCwweGYzLDB4MTIsMHgzYywweDAwLDB4OGYsMHgwMSwweDIxIH0sCisgIDE2LCAweDlhODAsIDAsIHsweGM4LDB4NjgsMHg3MiwweDIyLDB4MWUsMHgwNCwweDg3LDB4MjAsMHgyMSwweGM0LDB4MGIsMHg3MCwweDAyLDB4M2MsMHg4NCwweDlmIH0sCisgIDE2LCAweDlhOTAsIDAsIHsweDAwLDB4MjUsMHhjNCwweDRiLDB4NzAsMHgwMiwweDFjLDB4MDQsMHhiNywweDgxLDB4MjEsMHhjOCwweDA4LDB4NzIsMHgwMiwweGU4IH0sCisgIDE2LCAweDlhYTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDAwLDB4MWUsMHgwMCwweGM3LDB4ODEsMHgzYywweGEwIH0sCisgIDE2LCAweDlhYjAsIDAsIHsweDRjLDB4N2EsMHgwYiwweDFhLDB4MDAsMHhjNiwweDgwLDB4MzAsMHhlMCwweDA4LDB4ZjgsMHg4MiwweDBlLDB4NDAsMHhjZiwweGYwIH0sCisgIDE2LCAweDlhYzAsIDAsIHsweDM5LDB4ZTgsMHgwZiwweDNhLDB4MDMsMHgxZSwweDIwLDB4YzcsMHg4MCwweDMxLDB4ZTMsMHgwZiwweDM4LDB4MjMsMHgxZiwweDA4IH0sCisgIDE2LCAweDlhZDAsIDAsIHsweGZmLDB4YzAsMHgzMywweGYyLDB4MGMsMHg3ZSwweDAzLDB4ZWEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlhZTAsIDAsIHsweDA4LDB4MTUsMHg4OCwweDBhLDB4N2IsMHgwMCwweDNlLDB4YzEsMHgwYiwweDM0LDB4MjMsMHhjOCwweDEwLDB4ZmIsMHgwMiwweDNlIH0sCisgIDE2LCAweDlhZjAsIDAsIHsweGNhLDB4MGYsMHhiNywweDQzLDB4ZWMsMHg4MCwweGZiLDB4MDAsMHgyZSwweGMyLDB4MGIsMHhiNCwweDgzLDB4ZWQsMHhkMCwweGZhIH0sCisgIDE2LCAweDliMDAsIDAsIHsweDAwLDB4M2UsMHhkOSwweDBmLDB4YjMsMHg4MywweGVjLDB4ODAsMHhiYiwweDIwLDB4M2UsMHhkOCwweDJmLDB4YjQsMHgwMywweGMyIH0sCisgIDE2LCAweDliMTAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHgwMCwweGY1LDB4OTEsMHgzMSwweGEwIH0sCisgIDE2LCAweDliMjAsIDAsIHsweDBjLDB4ZmMsMHgwMywweGZlLDB4MDAsMHhjNCwweDgxLDB4MzEsMHhlZSwweDhkLDB4ZjgsMHgwYSwweDNlLDB4MzAsMHhjZiwweDg0IH0sCisgIDE2LCAweDliMzAsIDAsIHsweDMzLDB4ZTAsMHgyYywweGY4LDB4ODMsMHhmZSwweDEwLDB4ZmUsMHg4MCwweDMzLDB4ZTAsMHgwYywweGY5LDB4MTksMHgzZiwweDQ4IH0sCisgIDE2LCAweDliNDAsIDAsIHsweGNmLDB4YzAsMHgzMywweGUwLDB4MDQsMHhmYywweDAzLDB4YzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDliNTAsIDAsIHsweGE4LDB4MTEsMHg5YywweDA4LDB4YjcsMHhhMSwweDIxLDB4YzgsMHgwOCwweDcxLDB4MDIsMHhmMCwweGEwLDB4ODUsMHgyMCwweDIxIH0sCisgIDE2LCAweDliNjAsIDAsIHsweGNlLDB4MDgsMHg3MCwweDAyLDB4M2MsMHg4MCwweDhmLDB4MDAsMHgyYiwweGM1LDB4MDgsMHg3MSwweDAyLDB4ZGMsMHgxMCwweGI0IH0sCisgIDE2LCAweDliNzAsIDAsIHsweDAwLDB4MjEsMHhjMSwweDBhLDB4ZjMsMHg4MiwweDBjLDB4MDAsMHg4NywweDAxLDB4MjksMHhjMCwweDA4LDB4NzEsMHgwMiwweDZhIH0sCisgIDE2LCAweDliODAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWQsMHgwMCwweGJkLDB4MjEsMHgyNywweDgyIH0sCisgIDE2LCAweDliOTAsIDAsIHsweDAwLDB4NzAsMHgwMiwweGZjLDB4MDQsMHg4YywweDAwLDB4YTcsMHhjYywweGE4LDB4NzAsMHgwMiwweDNjLDB4MDgsMHhhZiwweDAwIH0sCisgIDE2LCAweDliYTAsIDAsIHsweDIxLDB4YzAsMHgwOCwweDcwLDB4MDIsMHhkYywweDAwLDB4YjcsMHgwMCwweDIxLDB4YzQsMHgwOCwweDcwLDB4MTYsMHgxYywweDBhIH0sCisgIDE2LCAweDliYjAsIDAsIHsweDhmLDB4MDAsMHgyMSwweGMwLDB4MDgsMHg3MCwweDAyLDB4YzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDliYzAsIDAsIHsweDIwLDB4MTAsMHhjOCwweDAwLDB4YmIsMHg0NCwweDI0LDB4ZTIsMHgwOCwweGIxLDB4MDIsMHhjMiwweDgwLDB4MDEsMHg4MCwweDI0IH0sCisgIDE2LCAweDliZDAsIDAsIHsweGQwLDB4ODgsMHgzMCwweDAyLDB4MGYsMHg1MiwweDgzLDB4OTEsMHgyOCwweGU0LDB4ODgsMHgzZCwweDAyLDB4Y2UsMHhkMCwweGIwIH0sCisgIDE2LCAweDliZTAsIDAsIHsweGIyLDB4YTIsMHhjMCwweDBhLDB4MzQsMHgxMiwweDBjLDB4MDIsMHg4MywweDAwLDB4MjgsMHhjMCwweDA4LDB4MzAsMHgwMiwweDQ4IH0sCisgIDE2LCAweDliZjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YWMsMHgwMCwweGZiLDB4MDEsMHhlNCwweDQwIH0sCisgIDE2LCAweDljMDAsIDAsIHsweDJjLDB4ZjAsMHg0MywweGU1LDB4MDAsMHg4YSwweDg4LDB4MzcsMHhlMCwweDAwLDB4ZmEsMHgwMiwweDNkLDB4MDAsMHhlZiwweDAwIH0sCisgIDE2LCAweDljMTAsIDAsIHsweDMzLDB4ZDEsMHgwYywweGY0LDB4MDMsMHhmZCwweDAwLDB4ZjksMHg0MCwweDMzLDB4ZTgsMHgwYywweGZjLDB4MDEsMHgzYywweDA0IH0sCisgIDE2LCAweDljMjAsIDAsIHsweGNmLDB4MDIsMHgzMywweGMwLDB4MmMsMHhmMCwweDAzLDB4ZWEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDljMzAsIDAsIHsweDgwLDB4MDAsMHhlZSwweDA4LDB4ZjksMHgxMCwweDNhLDB4ZDAsMHgwZiwweGIwLDB4OTMsMHhlYywweDAwLDB4ZmIsMHgwYiwweDNhIH0sCisgIDE2LCAweDljNDAsIDAsIHsweGMwLDB4OGUsMHhiMCwweDgzLDB4ZWMsMHg4MCwweGZiLDB4MDksMHg3ZSwweGM4LDB4MGYsMHhiMiwweDEzLDB4ZWMsMHgwMCwweGY5IH0sCisgIDE2LCAweDljNTAsIDAsIHsweDAwLDB4M2UsMHhjMiwweDhmLDB4YjIsMHg0YiwweGNjLDB4MDQsMHhmYiwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweDYwIH0sCisgIDE2LCAweDljNjAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweGZmLDB4MDgsMHgzMywweGMwIH0sCisgIDE2LCAweDljNzAsIDAsIHsweDFjLDB4ZjAsMHgwMywweDcwLDB4NDAsMHhjNCwweGMwLDB4MzMsMHhjMiwweDBmLDB4ZjAsMHgwMywweDFjLDB4MTAsMHhjNywweDAwIH0sCisgIDE2LCAweDljODAsIDAsIHsweDMxLDB4YzAsMHgwYywweDcwLDB4MDMsMHgxYywweDAwLDB4YzUsMHg0MSwweDMzLDB4YzAsMHgwYywweGYwLDB4MjMsMHgyYywweDAwIH0sCisgIDE2LCAweDljOTAsIDAsIHsweGNmLDB4MDAsMHhiMywweGMwLDB4NmMsMHhmMCwweDAzLDB4ODAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDljYTAsIDAsIHsweDgxLDB4MDQsMHg2YSwweDAwLDB4YjksMHg5MCwweDMyLDB4ZjEsMHgwOCwweGIwLDB4MDIsMHgwYSwweDEwLDB4ZDksMHgwMCwweDIyIH0sCisgIDE2LCAweDljYjAsIDAsIHsweGMxLDB4MGIsMHhiMCwweDAyLDB4MmMsMHgwMCwweGNiLDB4MDYsMHgyMiwweGMwLDB4ODgsMHhiMCwweDEyLDB4MmMsMHgwMCwweDg4IH0sCisgIDE2LCAweDljYzAsIDAsIHsweDgwLDB4MjIsMHhjMSwweDBkLDB4YjAsMHgwMiwweDJjLDB4MDAsMHg4MywweDAwLDB4MjIsMHhjMSwweDA4LDB4YjAsMHg0NiwweGUwIH0sCisgIDE2LCAweDljZDAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAxLDB4MmUsMHgwMCwweGI5LDB4MDAsMHgyMiwweGYwIH0sCisgIDE2LCAweDljZTAsIDAsIHsweDA4LDB4YjAsMHgxMiwweDY0LDB4MDAsMHg4YSwweDAwLDB4MjIsMHhjMCwweDBiLDB4MzAsMHg0MiwweDJjLDB4MDAsMHg4YiwweDAwIH0sCisgIDE2LCAweDljZjAsIDAsIHsweDIyLDB4YzAsMHgwOCwweGIwLDB4MDIsMHgyYywweDAwLDB4OGEsMHgwMCwweDIyLDB4YzAsMHg4OCwweDMwLDB4MGEsMHgyYywweDAwIH0sCisgIDE2LCAweDlkMDAsIDAsIHsweDhiLDB4MDAsMHgyMCwweGMwLDB4MDgsMHhiMCwweDAyLDB4ZTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlkMTAsIDAsIHsweDA4LDB4MDQsMHgwYywweDA0LDB4YjEsMHgwMiwweGU0LDB4YzEsMHgwOCwweGIwLDB4MjIsMHgyMCwweDAyLDB4OTMsMHgwMCwweDIwIH0sCisgIDE2LCAweDlkMjAsIDAsIHsweGMwLDB4MGIsMHgzMCwweDEyLDB4MGMsMHgwMiwweDgzLDB4MDIsMHhhMCwweGMwLDB4MjgsMHgzMCwweDBlLDB4MGMsMHgwMiwweDgwIH0sCisgIDE2LCAweDlkMzAsIDAsIHsweDAwLDB4YTAsMHhjMCwweDQ5LDB4MzAsMHgwYSwweDBjLDB4MDIsMHg4YiwweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweGMyIH0sCisgIDE2LCAweDlkNDAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGY5LDB4MjQsMHgzMiwweGMwIH0sCisgIDE2LCAweDlkNTAsIDAsIHsweDA4LDB4ZjAsMHgwMywweDY0LDB4MDAsMHhjOCwweDAwLDB4YjMsMHhjMCwweDFmLDB4ZjAsMHgwYiwweDNjLDB4MDAsMHg4ZiwweDAwIH0sCisgIDE2LCAweDlkNjAsIDAsIHsweDMzLDB4YzAsMHg0YywweGYwLDB4NDMsMHgzYywweDA4LDB4YzMsMHgwMCwweDMxLDB4YzAsMHgwYywweGYwLDB4MDMsMHgzZCwweDQ4IH0sCisgIDE2LCAweDlkNzAsIDAsIHsweGNmLDB4MDAsMHgzMSwweGMwLDB4MGMsMHhmMCwweDAzLDB4ODAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlkODAsIDAsIHsweGEwLDB4MWQsMHhmMCwweDA0LDB4ZjksMHg0MSwweDNiLDB4YzAsMHg0ZiwweGYwLDB4MDMsMHhmMCwweDExLDB4ZmQsMHgwMCwweDNmIH0sCisgIDE2LCAweDlkOTAsIDAsIHsweGMwLDB4ODcsMHg3MCwweDI3LDB4ZmMsMHgwMCwweGVmLDB4MDYsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAyLDB4ZmMsMHgwOCwweGZjIH0sCisgIDE2LCAweDlkYTAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDQ3LDB4ZjAsMHg0MywweGZjLDB4MDAsMHg3NywweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGU4IH0sCisgIDE2LCAweDlkYjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZDIsMHgwMCwweGM3LDB4MDEsMHgzNywweDBjIH0sCisgIDE2LCAweDlkYzAsIDAsIHsweDBmLDB4ZTgsMHgyMywweDEwLDB4NGEsMHhjNCwweGMwLDB4MzEsMHgzMCwweDBjLDB4YzksMHgwMywweDM0LDB4NDYsMHhjZiwweDEwIH0sCisgIDE2LCAweDlkZDAsIDAsIHsweDMzLDB4ZDAsMHgwYywweGY0LDB4MDMsMHgzYywweDU4LDB4Y2YsMHgwMCwweDMzLDB4YzAsMHgyZCwweGYxLDB4MDMsMHgzZSwweDAyIH0sCisgIDE2LCAweDlkZTAsIDAsIHsweGNmLDB4MjEsMHgzZiwweGU0LDB4MGYsMHhmMiwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlkZjAsIDAsIHsweDgwLDB4MTAsMHhlNCwweDg0LDB4MGIsMHg0MCwweDIyLDB4NGMsMHgwYiwweGE4LDB4MDIsMHgyYywweGMwLDB4OGIsMHgyMCwweDIyIH0sCisgIDE2LCAweDllMDAsIDAsIHsweGM4LDB4NGEsMHgzMiwweDAyLDB4MjQsMHg4MCwweDgzLDB4MjAsMHgyMCwweGMwLDB4MDgsMHgzMCwweDAyLDB4MjAsMHgwMCwweDhiIH0sCisgIDE2LCAweDllMTAsIDAsIHsweDIxLDB4MzIsMHhjYSwweDQ4LDB4MzIsMHgwMiwweDJjLDB4MzAsMHg4ZiwweDkwLDB4MmUsMHg4OCwweDBiLDB4YmQsMHgxMiwweDIwIH0sCisgIDE2LCAweDllMjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2UsMHgyMCwweGEzLDB4NDAsMHhlMCwweDQ4IH0sCisgIDE2LCAweDllMzAsIDAsIHsweDRiLDB4MjAsMHgyMiwweDBjLDB4MDIsMHg4MiwweDAwLDB4MmEsMHgwMCwweDA4LDB4MjAsMHgwMiwweDA0LDB4ODAsMHg4MCwweDIwIH0sCisgIDE2LCAweDllNDAsIDAsIHsweDIwLDB4YzgsMHgwOCwweDAyLDB4MDIsMHgwYywweDAwLDB4ODAsMHgwYywweDYwLDB4MDAsMHgwOCwweDIwLDB4MTIsMHgyYywweDg4IH0sCisgIDE2LCAweDllNTAsIDAsIHsweDgzLDB4MDAsMHgyYywweGU4LDB4MGIsMHgzMCwweDAyLDB4NjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDllNjAsIDAsIHsweGMwLDB4MTUsMHhhZSwweDAwLDB4YWIsMHgwMSwweGEyLDB4NjAsMHgwYiwweGEwLDB4MDIsMHgyMCwweDAxLDB4ODEsMHgwMCwweDIyIH0sCisgIDE2LCAweDllNzAsIDAsIHsweGMwLDB4MGEsMHg5MCwweDEyLDB4MDQsMHgyMCwweDhhLDB4MDgsMHgyMiwweGMxLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwMCwweDg4IH0sCisgIDE2LCAweDllODAsIDAsIHsweDAwLDB4MjQsMHg0NCwweDA4LDB4YTIsMHgwMiwweGFjLDB4MDAsMHg4YiwweDA0LDB4MmUsMHg4OCwweDAzLDB4YjAsMHgwMiwweDcwIH0sCisgIDE2LCAweDllOTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDE1LDB4ZWMsMHgwMCwweGVhLDB4OTAsMHgzMiwweDI4IH0sCisgIDE2LCAweDllYTAsIDAsIHsweDBmLDB4YjYsMHgwMywweDIwLDB4MDgsMHhjOSwweDA0LDB4M2EsMHhjMCwweDRjLDB4OTAsMHgyMiwweDI0LDB4MDAsMHhjYiwweDQwIH0sCisgIDE2LCAweDllYjAsIDAsIHsweDMyLDB4YTgsMHgwYywweGIyLDB4MDMsMHgyYywweDAwLDB4Y2IsMHg4MCwweGIyLDB4ZTAsMHgwYywweGIwLDB4MGIsMHgwNCwweDAwIH0sCisgIDE2LCAweDllYzAsIDAsIHsweGNiLDB4MDAsMHgzZSwweGMwLDB4NGYsMHhiMCwweDBiLDB4NTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDllZDAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4ZGYsMHg4MCwweDNiLDB4ODEsMHgwZiwweGYwLDB4YzMsMHhmYywweDAwLDB4YmUsMHgwMSwweDFmIH0sCisgIDE2LCAweDllZTAsIDAsIHsweDAwLDB4MGYsMHhlMCwweDIzLDB4ZjQsMHgwMCwweGZmLDB4MDAsMHgzZiwweGIwLDB4NGYsMHhmMCwweDQzLDB4ZDQsMHgwMiwweGZmIH0sCisgIDE2LCAweDllZjAsIDAsIHsweDkxLDB4M2EsMHhlMCwweDRlLDB4ZjAsMHgwMywweDdjLDB4MGMsMHhmZiwweDAwLDB4MmYsMHg4MCwweDBmLDB4MzAsMHgwMywweGI4IH0sCisgIDE2LCAweDlmMDAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMSwweGNhLDB4MDAsMHg3MiwweDUwIH0sCisgIDE2LCAweDlmMTAsIDAsIHsweDA0LDB4YjQsMHgwMywweDJjLDB4ODIsMHhjYiwweDAwLDB4MzIsMHhlMCwweDBjLDB4YjgsMHgwMywweDI3LDB4MDQsMHhjOCwweGM4IH0sCisgIDE2LCAweDlmMjAsIDAsIHsweGIyLDB4YTIsMHgwYywweDg4LDB4MDMsMHgyYywweDAwLDB4YzEsMHgwMCwweDNlLDB4MDAsMHgyYywweDMwLDB4MWIsMHgyYywweDA0IH0sCisgIDE2LCAweDlmMzAsIDAsIHsweGZiLDB4MTAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4MTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlmNDAsIDAsIHsweGM4LDB4MDUsMHgyYywweDA0LDB4MDMsMHg1MCwweGEyLDB4ZTAsMHgwOCwweDM0LDB4NDIsMHgzMywweDAwLDB4ODgsMHgwMCwweDIwIH0sCisgIDE2LCAweDlmNTAsIDAsIHsweDEwLDB4MGQsMHg4NCwweDAzLDB4MjUsMHgwMCwweDhhLDB4NDAsMHgyMiwweDkwLDB4MDgsMHhhNSwweDAyLDB4MmMsMHgwMCwweDg5IH0sCisgIDE2LCAweDlmNjAsIDAsIHsweGE0LDB4M2EsMHg0MCwweDA4LDB4YjAsMHgwMiwweDJjLDB4MDAsMHhiZiwweDg0LDB4MmUsMHg4MCwweDBiLDB4ZjAsMHg1MiwweDMyIH0sCisgIDE2LCAweDlmNzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NmMsMHg4MCwweDgxLDB4ODAsMHgyNCwweDg4IH0sCisgIDE2LCAweDlmODAsIDAsIHsweDg5LDB4M2MsMHgyNiwweDIxLDB4MDAsMHg5MCwweDAwLDB4MjAsMHgwMiwweDA4LDB4ODAsMHg4MiwweDAwLDB4MjAsMHg5YiwweDAwIH0sCisgIDE2LCAweDlmOTAsIDAsIHsweDIyLDB4NDAsMHg4OCwweGIwLDB4MTIsMHgwYywweDA4LDB4ODMsMHg4MCwweDJjLDB4YzAsMHgwOCwweDEwLDB4MDIsMHgwYywweDAwIH0sCisgIDE2LCAweDlmYTAsIDAsIHsweGIzLDB4ODAsMHgyYywweDQwLDB4MGIsMHgzMCwweDAyLDB4MzgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweDlmYjAsIDAsIHsweDIwLDB4MDEsMHgzZSwweDBhLDB4ODUsMHhhMCwweGE1LDB4NjAsMHgwOCwweGZiLDB4ODIsMHgzZSwweDg0LDB4OWYsMHg4MSwweDYzIH0sCisgIDE2LCAweDlmYzAsIDAsIHsweGUwLDB4ODksMHg3OSwweDEyLDB4NTIsMHg4MCwweDk3LDB4ODIsMHgyMSwweDZjLDB4MTgsMHg3OCwweDAyLDB4MTIsMHgwMCwweDg3IH0sCisgIDE2LCAweDlmZDAsIDAsIHsweGExLDB4MjksMHhlMCwweDA4LDB4NWIsMHgwMiwweDFlLDB4MDAsMHhiNywweGMwLDB4MmQsMHg2MCwweDBiLDB4NzgsMHgwMiwweDA4IH0sCisgIDE2LCAweDlmZTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MGMsMHgwMCwweDgxLDB4MDgsMHgyNiwweGMyIH0sCisgIDE2LCAweDlmZjAsIDAsIHsweDJjLDB4MzIsMHgxMywweDBlLDB4YTQsMHhkMiwweDAwLDB4YjAsMHgwMCwweDFjLDB4MjEsMHgxMiwweDI0LDB4MDIsMHhkMSwweDIwIH0sCisgIDE2LCAweGEwMDAsIDAsIHsweDMwLDB4YzgsMHgwYywweDEwLDB4MDMsMHgwYywweDAwLDB4YzIsMHgxMCwweDNjLDB4ODAsMHgwYywweDIzLDB4MDMsMHgwYywweDQwIH0sCisgIDE2LCAweGEwMTAsIDAsIHsweGYzLDB4MDAsMHgzYywweDQ4LDB4MGYsMHgzMCwweDBiLDB4MTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGEwMjAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZmQsMHgyMCwweGJiLDB4NDAsMHgwNywweDcyLDB4MDIsMHhmMCwweDEwLDB4ZWQsMHgxMCwweDNmIH0sCisgIDE2LCAweGEwMzAsIDAsIHsweGM0LDB4MGYsMHhkMSwweDYzLDB4YjQsMHg4MCwweGVmLDB4MDAsMHgzZiwweGM4LDB4MGYsMHhmMCwweDAzLDB4ZDgsMHgwMCwweGZlIH0sCisgIDE2LCAweGEwNDAsIDAsIHsweDM0LDB4M2YsMHhjNCwweDBmLDB4ZWIsMHg0MywweGZjLDB4MDAsMHhmZiwweDA4LDB4N2YsMHg0MCwweDBmLDB4ZjEsMHg4MywweGQwIH0sCisgIDE2LCAweGEwNTAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHgwMCwweGM4LDB4MDAsMHgzMywweDgwIH0sCisgIDE2LCAweGEwNjAsIDAsIHsweDhmLDB4MjgsMHgwMywweDIwLDB4MDAsMHg0OSwweDAyLDB4MzIsMHhjMCwweDBmLDB4OTAsMHgwMywweDIwLDB4MDAsMHhjYiwweDAwIH0sCisgIDE2LCAweGEwNzAsIDAsIHsweDMyLDB4NDAsMHg0YywweGIwLDB4MGIsMHgyYywweDAwLDB4Y2IsMHg4MCwweDMyLDB4YzAsMHgwZSwweDllLDB4MDMsMHgyNCwweDAwIH0sCisgIDE2LCAweGEwODAsIDAsIHsweGZiLDB4MjAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4MmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGEwOTAsIDAsIHsweDQ4LDB4MTEsMHg5YywweDAwLDB4OGQsMHgwMSwweDIxLDB4YzAsMHgwYiwweDYwLDB4MDIsMHgxZCwweDAwLDB4ZDYsMHgwMCwweDIxIH0sCisgIDE2LCAweGEwYTAsIDAsIHsweDAwLDB4MGIsMHhlMCwweDAyLDB4MDAsMHgwMCwweDgzLDB4MDQsMHgyMCwweDQwLDB4MDgsMHg3MCwweDQyLDB4MzQsMHgwMiwweDg3IH0sCisgIDE2LCAweGEwYjAsIDAsIHsweDAxLDB4MjMsMHhjMCwweDI4LDB4NTEsMHgwYSwweDFjLDB4MDQsMHhiNywweDMwLDB4MmQsMHhjMCwweDBiLDB4NzIsMHgwMywweDkyIH0sCisgIDE2LCAweGEwYzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OWUsMHgwMCwweGE2LDB4NDAsMHgyMSwweGEwIH0sCisgIDE2LCAweGEwZDAsIDAsIHsweDBiLDB4NjgsMHgwMiwweDBlLDB4MDAsMHg4ZiwweDgwLDB4MjEsMHhlMCwweDBiLDB4NzgsMHgwMiwweDE2LDB4MTAsMHhhNSwweDgwIH0sCisgIDE2LCAweGEwZTAsIDAsIHsweDIxLDB4ZTAsMHgwOCwweDE4LDB4MDIsMHgxZSwweDAwLDB4ODMsMHg4MCwweDIxLDB4YTAsMHgwOCwweDc4LDB4MDIsMHgxZiwweDAwIH0sCisgIDE2LCAweGEwZjAsIDAsIHsweGI3LDB4ODAsMHgyZCwweGUwLDB4MGIsMHgzOCwweDAyLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGExMDAsIDAsIHsweDQ4LDB4MTQsMHhlYywweDEyLDB4YTEsMHg2NCwweDIwLDB4ZTYsMHgwYiwweDIwLDB4MDIsMHgwMCwweDEwLDB4OTAsMHg0YSwweDIwIH0sCisgIDE2LCAweGExMTAsIDAsIHsweDIwLDB4NGIsMHgwMCwweDQyLDB4MDQsMHgwMCwweDgzLDB4MDAsMHgyMCwweGMyLDB4MDgsMHgzMCwweDAyLDB4OGMsMHgwMCwweDgzIH0sCisgIDE2LCAweGExMjAsIDAsIHsweDA0LDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweDBlLDB4MDAsMHhiMywweDAwLDB4MmMsMHhlMCwweDRiLDB4MzAsMHgwMiwweDkyIH0sCisgIDE2LCAweGExMzAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YjgsMHgwMCwweGVlLDB4YzAsMHgzMywweDkwIH0sCisgIDE2LCAweGExNDAsIDAsIHsweDBmLDB4YTAsMHgxYiwweDA4LDB4MDAsMHhjYSwweDQwLDB4YjIsMHg4MiwweDBmLDB4YTAsMHgwYiwweDI4LDB4MDIsMHhjYSwweDAwIH0sCisgIDE2LCAweGExNTAsIDAsIHsweGIyLDB4OTAsMHhhYywweGEwLDB4MDMsMHgyOSwweDAwLDB4Y2EsMHg0MCwweGIyLDB4ODAsMHg4ZSwweGE0LDB4MDMsMHgyYSwweDAwIH0sCisgIDE2LCAweGExNjAsIDAsIHsweGZhLDB4MDAsMHgzZiwweGE4LDB4MGYsMHhhMCwweDBiLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGExNzAsIDAsIHsweDQ4LDB4MDAsMHhlMiwweDAyLDB4OTAsMHgwMCwweDNlLDB4MDAsMHgwZiwweDg4LDB4MDMsMHhmMSwweDAwLDB4ZmMsMHgwMiwweDNmIH0sCisgIDE2LCAweGExODAsIDAsIHsweDIwLDB4MGYsMHhjOCwweDAzLDB4YzEsMHgwMCwweGYwLDB4MDAsMHgzZSwweDAwLDB4OGYsMHgwMCwweDAxLDB4NjAsMHgwMiwweGY4IH0sCisgIDE2LCAweGExOTAsIDAsIHsweDA4LDB4M2UsMHgwMCwweDBmLDB4ODAsMHg4MywweGUwLDB4MDAsMHhmOCwweDAwLDB4MmUsMHgwMCwweDhmLDB4ODAsMHgxMywweDkyIH0sCisgIDE2LCAweGExYTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMiwweGM5LDB4MDAsMHhiMiwweDY0IH0sCisgIDE2LCAweGExYjAsIDAsIHsweDBmLDB4OTEsMHgwMywweGU0LDB4MDQsMHhjOSwweDAwLDB4MzIsMHg0MCwweDZjLDB4OTAsMHgwMywweDI1LDB4MDIsMHhjOSwweDkwIH0sCisgIDE2LCAweGExYzAsIDAsIHsweGIwLDB4NDAsMHgwYywweDkwLDB4MDMsMHgyNCwweDIwLDB4YzksMHhhMCwweDNlLDB4NDAsMHg0YywweDkwLDB4MjMsMHhlNCwweDAwIH0sCisgIDE2LCAweGExZDAsIDAsIHsweGYxLDB4MDAsMHg5MiwweDQwLDB4MGMsMHgxMCwweDAzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGExZTAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHg4MCwweGEyLDB4NDAsMHgwYiwweDk2LDB4NDIsMHhlNSwweDA0LDB4ODksMHgwMCwweDIyIH0sCisgIDE2LCAweGExZjAsIDAsIHsweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwOCwweDA5LDB4NDEsMHgyMiwweDQwLDB4NDgsMHg5MCwweDQyLDB4MjQsMHgwNCwweDg5IH0sCisgIDE2LCAweGEyMDAsIDAsIHsweDgwLDB4MjYsMHg0MCwweDA4LDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTQsMHgwMiwweDIwIH0sCisgIDE2LCAweGEyMTAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MjUsMHgwMCwweDg5LDB4MjAsMHgyMiwweDQwIH0sCisgIDE2LCAweGEyMjAsIDAsIHsweDBiLDB4OTAsMHgwMiwweGY0LDB4ODQsMHg4NSwweDAwLDB4MjEsMHg0MCwweDQ4LDB4NTAsMHgwMiwweDI0LDB4MjAsMHg4ZCwweDA4IH0sCisgIDE2LCAweGEyMzAsIDAsIHsweDIzLDB4NDAsMHgwOCwweGQwLDB4MDIsMHg5NCwweDAwLDB4OGQsMHgwMCwweDI5LDB4NDAsMHgwYSwweGQwLDB4MDIsMHhhNCwweDA4IH0sCisgIDE2LCAweGEyNDAsIDAsIHsweGI5LDB4MDAsMHgyOCwweDQwLDB4MTgsMHg5MCwweGMyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGEyNTAsIDAsIHsweDA4LDB4MDQsMHgwNSwweDAwLDB4ODEsMHgwMCwweDIwLDB4NTEsMHgwYiwweDEwLDB4MDIsMHhmNSwweDgwLDB4ODUsMHhjMSwweGExIH0sCisgIDE2LCAweGEyNjAsIDAsIHsweDUwLDB4MDgsMHg1NCwweDBhLDB4MDUsMHgwNiwweDg1LDB4NDAsMHgyMSwweDUwLDB4ODgsMHg1NCwweDAyLDB4OTUsMHgwMCwweDg1IH0sCisgIDE2LCAweGEyNzAsIDAsIHsweDQ0LDB4MmQsMHg1MCwweDJhLDB4NTQsMHgxMiwweGM1LDB4MDEsMHhiMSwweDAwLDB4MDgsMHg1MCwweDA4LDB4MTAsMHgwMiwweDAyIH0sCisgIDE2LCAweGEyODAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGNhLDB4NTAsMHgzMiwweDgwIH0sCisgIDE2LCAweGEyOTAsIDAsIHsweDBmLDB4ODAsMHgwMywweGU4LDB4MDIsMHhjOCwweDAxLDB4MzIsMHgwMCwweDJjLDB4YzAsMHgwMywweDIwLDB4MDAsMHhjOCwweDAyIH0sCisgIDE2LCAweGEyYTAsIDAsIHsweDMyLDB4MDAsMHgyYywweDgwLDB4MGIsMHhhMCwweDAwLDB4YzgsMHgwMCwweDNhLDB4MDAsMHg0ZSwweDQwLDB4MjMsMHhhMCwweDA4IH0sCisgIDE2LCAweGEyYjAsIDAsIHsweGY4LDB4MDAsMHgzYSwweDAwLDB4MmMsMHg4MCwweDBiLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGEyYzAsIDAsIHsweDk4LDB4MWQsMHhkYywweDA0LDB4ZmQsMHg0MCwweDNmLDB4NTAsMHg0ZiwweDkwLDB4NjMsMHhlNCwweDQwLDB4ZjEsMHgwMiwweDNlIH0sCisgIDE2LCAweGEyZDAsIDAsIHsweDQxLDB4MGYsMHg5MCwweDEzLDB4ZjUsMHgwNCwweGY5LDB4NDEsMHgzZSwweDUwLDB4MGYsMHg5NCwweDQzLDB4NjUsMHgwMiwweGY5IH0sCisgIDE2LCAweGEyZTAsIDAsIHsweDQxLDB4MzYsMHg1MCwweDRkLDB4OTQsMHgwMywweGY0LDB4MDAsMHhmOSwweDQxLDB4MzcsMHg0MCwweDRmLDB4OTQsMHgwMywweGU2IH0sCisgIDE2LCAweGEyZjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4ZmMsMHgwMCwweGNkLDB4YTgsMHgzMywweDcwIH0sCisgIDE2LCAweGEzMDAsIDAsIHsweDBmLDB4ZDAsMHgxMywweGY2LDB4ODgsMHhjZCwweDAwLDB4MzIsMHg1MCwweDRmLDB4MTQsMHgyMywweDA3LDB4YTAsMHhjOSwweGMwIH0sCisgIDE2LCAweGEzMTAsIDAsIHsweDMyLDB4NzgsMHgwYywweDllLDB4MDMsMHgzNywweDAyLDB4Y2QsMHhjMCwweDMyLDB4NjQsMHgwZiwweDk4LDB4MDMsMHgyNCwweDAwIH0sCisgIDE2LCAweGEzMjAsIDAsIHsweGNkLDB4MDAsMHgzMiwweDQwLDB4MmMsMHhkYSwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGEzMzAsIDAsIHsweDM4LDB4MTAsMHhlMiwweDA4LDB4ODgsMHhlYiwweDIyLDB4MzAsMHgwYiwweDgwLDB4MTIsMHhlOCwweDA0LDB4YTAsMHhhMCwweDJhIH0sCisgIDE2LCAweGEzNDAsIDAsIHsweDIwLDB4MGIsMHg4YSwweDBhLDB4MjMsMHgwMCwweDg4LDB4ODAsMHgyMiwweDI4LDB4MDAsMHhjOCwweDQyLDB4MjMsMHg4MCwweDgwIH0sCisgIDE2LCAweGEzNTAsIDAsIHsweGQ0LDB4MjAsMHgyOCwweDA5LDB4ODAsMHgwMiwweDIyLDB4OTQsMHhhOCwweDAwLDB4MmEsMHgwMCwweDg4LDB4ODUsMHgwMiwweDBlIH0sCisgIDE2LCAweGEzNjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4YzQsMHhhMCwweDgzLDB4MDAsMHgyNCwweGQ4IH0sCisgIDE2LCAweGEzNzAsIDAsIHsweDhiLDB4MTAsMHgwMiwweGU1LDB4MTQsMHg4OSwweDBhLDB4MjEsMHg0OCwweDBiLDB4NTIsMHgwMiwweDU0LDB4ODAsMHg4NSwweDQwIH0sCisgIDE2LCAweGEzODAsIDAsIHsweDI1LDB4NTgsMHgwOSwweDU2LDB4MDIsMHg0NSwweDAyLDB4ODEsMHgyMCwweDIwLDB4NTAsMHgwYiwweDE0LDB4MDIsMHgwNCwweDMwIH0sCisgIDE2LCAweGEzOTAsIDAsIHsweDgxLDB4MDAsMHgyMCwweDQwLDB4MDgsMHgxMCwweDAyLDB4NDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGEzYTAsIDAsIHsweDE4LDB4MTUsMHhhNCwweDEyLDB4ODksMHgwMCwweGE2LDB4NDAsMHgwYiwweDkwLDB4NDIsMHhlNCwweDk4LDB4YTksMHg4MCwweDJiIH0sCisgIDE2LCAweGEzYjAsIDAsIHsweDQwLDB4MGIsMHg1MSwweDAyLDB4NTUsMHgwMCwweDlkLDB4MDgsMHgyNywweDQ4LDB4MDksMHhmNiwweDAyLDB4NDQsMHgwMCwweDgxIH0sCisgIDE2LCAweGEzYzAsIDAsIHsweDA0LDB4MjIsMHg0MCwweDE5LDB4OTEsMHg4YSwweDI0LDB4ODAsMHhhOSwweDAwLDB4MmEsMHg0MCwweDA4LDB4OTAsMHgwMiwweDQ2IH0sCisgIDE2LCAweGEzZDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTcsMHgwMiwweGM5LDB4MDQsMHgzNiwweDU4IH0sCisgIDE2LCAweGEzZTAsIDAsIHsweDBmLDB4OTAsMHgwMywweGM1LDB4MDAsMHhjOSwweDAwLDB4MzIsMHg0MCwweDBmLDB4OTAsMHgxMywweDY0LDB4MDIsMHhjOSwweDAwIH0sCisgIDE2LCAweGEzZjAsIDAsIHsweDM2LDB4NDAsMHgyZCwweDkwLDB4MGIsMHg2NiwweDA0LDB4YzksMHhlMCwweGIyLDB4NDgsMHg4ZiwweDk4LDB4NDcsMHgyNCwweDAwIH0sCisgIDE2LCAweGE0MDAsIDAsIHsweGM5LDB4MDAsMHg3MiwweDQwLDB4MGMsMHgxMCwweDAzLDB4NjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE0MTAsIDAsIHsweDI4LDB4MDEsMHhhNSwweDA4LDB4ZjksMHgyMSwweDNhLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNiwweDA0LDB4ZjksMHgwMCwweDNlIH0sCisgIDE2LCAweGE0MjAsIDAsIHsweDQwLDB4NGYsMHg5OCwweDgzLDB4YTQsMHgwMCwweGU5LDB4NDAsMHhiYSwweDYwLDB4MGUsMHg5MCwweDAzLDB4YTQsMHg4MCwweGY5IH0sCisgIDE2LCAweGE0MzAsIDAsIHsweGEzLDB4M2UsMHg0OCwweDBmLDB4OTgsMHgwYiwweGU0LDB4MDAsMHhmOSwweDAwLDB4MWUsMHg0MCwweDBmLDB4OTAsMHgwMywweDhhIH0sCisgIDE2LCAweGE0NDAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTIsMHg0OCwweGM4LDB4MjAsMHgzMiwweDA4IH0sCisgIDE2LCAweGE0NTAsIDAsIHsweDFmLDB4ODAsMHg4MywweGUxLDB4MjIsMHhjOCwweDAxLDB4MzMsMHgwMCwweDJjLDB4YzAsMHgwMywweDMwLDB4MDQsMHhjYywweDQwIH0sCisgIDE2LCAweGE0NjAsIDAsIHsweGIxLDB4MDAsMHgwYywweDQ0LDB4MDMsMHgyMCwweDEyLDB4YzgsMHg0MSwweDMyLDB4MDAsMHgyZCwweDg0LDB4MGIsMHg2MCwweDAwIH0sCisgIDE2LCAweGE0NzAsIDAsIHsweGY4LDB4MDAsMHhiMiwweDAwLDB4NGMsMHg4MCwweDBiLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE0ODAsIDAsIHsweDI4LDB4MDUsMHgzYSwweDAwLDB4YTYsMHgwMCwweDIzLDB4OTAsMHgwMywweGU0LDB4OTIsMHhmOCwweDAwLDB4ODIsMHgwMCwweDM2IH0sCisgIDE2LCAweGE0OTAsIDAsIHsweDgwLDB4MDgsMHhhMCwweDAzLDB4NjgsMHgwMCwweGNhLDB4MDAsMHgyMiwweDgzLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwMywweDhhIH0sCisgIDE2LCAweGE0YTAsIDAsIHsweDAwLDB4MjIsMHg4MCwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDAsMHhiNiwweDgwLDB4MjIsMHg4MCwweDBkLDB4ZTgsMHgwMiwweDBhIH0sCisgIDE2LCAweGE0YjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NmUsMHgwMCwweDgyLDB4NDIsMHgyMCwweGMwIH0sCisgIDE2LCAweGE0YzAsIDAsIHsweDBiLDB4MzQsMHgwMiwweGNkLDB4MDksMHg4MCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDIsMHg5OCwweDAwIH0sCisgIDE2LCAweGE0ZDAsIDAsIHsweDIwLDB4MjAsMHgyOCwweDAwLDB4MGEsMHgwNCwweDEwLDB4ODEsMHg4MCwweDIwLDB4YzAsMHgwOCwweGIwLDB4MDIsMHgyYywweDAwIH0sCisgIDE2LCAweGE0ZTAsIDAsIHsweGIzLDB4MDAsMHgyMiwweGMwLDB4MTgsMHgzMSwweDAyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE0ZjAsIDAsIHsweGEwLDB4MDEsMHgzOCwweDAyLDB4YTMsMHgwMCwweDIxLDB4NDAsMHgxYiwweDcwLDB4MDIsMHhkYywweDIwLDB4ODQsMHgwNSwweDY1IH0sCisgIDE2LCAweGE1MDAsIDAsIHsweGUwLDB4MDgsMHhmMCwweDAyLDB4N2MsMHgxMCwweDk3LDB4MDAsMHgyNCwweGMwLDB4MDgsMHgzMCwweDAyLDB4NTQsMHg4OCwweDg3IH0sCisgIDE2LCAweGE1MTAsIDAsIHsweDA5LDB4MjEsMHhlOCwweDA5LDB4MzMsMHgwMiwweDFjLDB4ODAsMHhiNiwweDA4LDB4NjMsMHhjOCwweDA5LDB4MzgsMHgxMiwweDI4IH0sCisgIDE2LCAweGE1MjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4MWUsMHgwMCwweGM3LDB4YTAsMHhhMSwweGUwIH0sCisgIDE2LCAweGE1MzAsIDAsIHsweDBiLDB4NzgsMHgwMywweGZlLDB4MDAsMHhjNSwweDgyLDB4MzMsMHgyMCwweDBjLDB4NDgsMHgwMywweDFlLDB4MDEsMHhkZiwweDgwIH0sCisgIDE2LCAweGE1NDAsIDAsIHsweDMxLDB4MjAsMHgwYywweDQ4LDB4MDMsMHgwNiwweDQwLDB4ODcsMHg4MiwweDMxLDB4ZjgsMHgwZCwweDdiLDB4MDMsMHg1ZiwweDAwIH0sCisgIDE2LCAweGE1NTAsIDAsIHsweGYzLDB4ODAsMHgzMSwweGYyLDB4MGMsMHg2MCwweDAzLDB4MmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE1NjAsIDAsIHsweDA4LDB4MWQsMHg5YywweDAwLDB4ZmIsMHgwMSwweDJmLDB4NDAsMHgwNywweGIwLDB4MDMsMHhlOCwweDA0LDB4ZjksMHgwMCwweDNlIH0sCisgIDE2LCAweGE1NzAsIDAsIHsweGMxLDB4MGYsMHhiMCwweDAzLDB4ZTAsMHgwNiwweGU4LDB4MDIsMHgzYSwweGMwLDB4MGYsMHhiMCwweDAxLDB4YTQsMHgxMCwweGY5IH0sCisgIDE2LCAweGE1ODAsIDAsIHsweDQwLDB4YmUsMHhkMCwweDA2LDB4YjAsMHgwMywweGVlLDB4MDAsMHhmYSwweDAwLDB4M2MsMHhkOCwweDBmLDB4YTAsMHgwMywweGMyIH0sCisgIDE2LCAweGE1OTAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZjYsMHgwMCwweGNmLDB4ODgsMHgzMywweDY0IH0sCisgIDE2LCAweGE1YTAsIDAsIHsweDJjLDB4ZjgsMHgwMywweGZlLDB4MDIsMHhjNCwweGIwLDB4MzMsMHgyMCwweDhjLDB4ZDgsMHgwMywweDMyLDB4MDAsMHhjYywweGI0IH0sCisgIDE2LCAweGE1YjAsIDAsIHsweDMzLDB4YTAsMHgwYywweGM4LDB4MDMsMHgxNiwweDIwLDB4Y2YsMHhjMCwweDMzLDB4ZjAsMHgwYywweGY4LDB4MDMsMHhmZSwweDAwIH0sCisgIDE2LCAweGE1YzAsIDAsIHsweGNkLDB4ODAsMHgzZiwweGUwLDB4MGYsMHhkOCwweDAzLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE1ZDAsIDAsIHsweGE4LDB4MTEsMHhiNSwweDA0LDB4ODcsMHgxMiwweGExLDB4NTAsMHgwYSwweDc0LDB4MTIsMHhjNCwweDQwLDB4ODQsMHgxMSwweDIzIH0sCisgIDE2LCAweGE1ZTAsIDAsIHsweGMwLDB4MjgsMHhlMCwweDAyLDB4MWMsMHgwMiwweGE3LDB4MTEsMHgyMSwweDU4LDB4NDgsMHg3MCwweDBhLDB4MTQsMHgwMCwweDhkIH0sCisgIDE2LCAweGE1ZjAsIDAsIHsweDAwLDB4MjMsMHhjMCwweDBiLDB4NzAsMHgwMiwweGZjLDB4NDAsMHg4NiwweDAwLDB4MmQsMHhjMCwweDBiLDB4NTAsMHgwMiwweDJhIH0sCisgIDE2LCAweGE2MDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTUsMHgwMCwweDg3LDB4NDAsMHgyMSwweDAwIH0sCisgIDE2LCAweGE2MTAsIDAsIHsweDE4LDB4NzEsMHgwMiwweGRjLDB4MDAsMHg5NSwweDI4LDB4ZTEsMHgwMiwweDA4LDB4NTAsMHgwMiwweDNjLDB4NDIsMHhhNywweDIyIH0sCisgIDE2LCAweGE2MjAsIDAsIHsweDIxLDB4ODAsMHg4OCwweDQxLDB4MDIsMHgxNCwweDAwLDB4ODUsMHgwMCwweGExLDB4YzAsMHgwOSwweDcxLDB4MDIsMHhkYywweDAwIH0sCisgIDE2LCAweGE2MzAsIDAsIHsweGI1LDB4MTAsMHgyZCwweGMwLDB4MGIsMHg0MCwweDAyLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE2NDAsIDAsIHsweDIwLDB4MTQsMHhjNCwweDEwLDB4ODMsMHg4NCwweDIwLDB4MTEsMHgwOCwweDMwLDB4MDIsMHhjMywweDEwLDB4OTEsMHgyMCwweDIwIH0sCisgIDE2LCAweGE2NTAsIDAsIHsweGMwLDB4MDgsMHgyOCwweDEyLDB4MDAsMHgwMCwweGEwLDB4ODQsMHgyMCwweDQwLDB4MDgsMHgzMCwweDAyLDB4MDQsMHgyNiwweDgzIH0sCisgIDE2LCAweGE2NjAsIDAsIHsweDAwLDB4MjAsMHhkMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMiwweDAwLDB4MmMsMHhjMCwweDBiLDB4MDAsMHgwMiwweDA4IH0sCisgIDE2LCAweGE2NzAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YWQsMHgwMCwweGNmLDB4ODgsMHhiMiwweGU4IH0sCisgIDE2LCAweGE2ODAsIDAsIHsweDBjLDB4MzAsMHgxMywweGNlLDB4YzIsMHhkMCwweDgyLDB4MzIsMHgwMCwweDBjLDB4MGUsMHgwYiwweDIwLDB4MDAsMHhjOCwweDg4IH0sCisgIDE2LCAweGE2OTAsIDAsIHsweGIyLDB4NDAsMHgyYywweGJhLDB4NDMsMHgzNywweDAyLDB4Y2IsMHgwMCwweGIzLDB4YzAsMHgyYywweGYwLDB4MDMsMHhmYywweDEyIH0sCisgIDE2LCAweGE2YTAsIDAsIHsweGZiLDB4MDAsMHg3ZiwweGQxLDB4MGYsMHgzMCwweDBiLDB4MmIsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE2YjAsIDAsIHsweDgwLDB4MDAsMHhlZCwweDAyLDB4ZjEsMHg0MCwweDNlLDB4NDEsMHgwZiwweGIwLDB4MjMsMHhlZCwweDAwLDB4ZTgsMHgwMSwweDNlIH0sCisgIDE2LCAweGE2YzAsIDAsIHsweGM4LDB4MGYsMHhiMCwweDEzLDB4ZWMsMHgwNCwweGRiLDB4MDAsMHgzYywweDgwLDB4MGYsMHgwNCwweDAzLDB4ZTQsMHg0MCwweGY5IH0sCisgIDE2LCAweGE2ZDAsIDAsIHsweDAwLDB4M2MsMHhjMiwweDBlLDB4YjAsMHgwMywweGVlLDB4MDAsMHg0YiwweDQxLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGUwIH0sCisgIDE2LCAweGE2ZTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweDRiLDB4MDAsMHgzMiwweDQyIH0sCisgIDE2LCAweGE2ZjAsIDAsIHsweDBjLDB4ZjAsMHgwMywweDM2LDB4ODAsMHhjZCwweDAwLDB4MzMsMHgwMCwweDRjLDB4YzAsMHg4MywweDNjLDB4MDQsMHhmNywweDAwIH0sCisgIDE2LCAweGE3MDAsIDAsIHsweDMyLDB4NDAsMHgwYywweGIxLDB4NDMsMHgxNCwweDAwLDB4Y2QsMHg4MCwweDMzLDB4YzAsMHgwYywweGYwLDB4MDMsMHhmYywweDAwIH0sCisgIDE2LCAweGE3MTAsIDAsIHsweGZmLDB4MDAsMHhiMywweGMyLDB4MGMsMHhhMCwweDAzLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE3MjAsIDAsIHsweDgxLDB4MDQsMHg0ZiwweDAyLDB4OGIsMHg4MCwweDIwLDB4MzAsMHgwOCwweGJjLDB4MDIsMHgyMCwweDEwLDB4ODksMHgwMCwweDIyIH0sCisgIDE2LCAweGE3MzAsIDAsIHsweGMwLDB4MDAsMHhiMCwweDAzLDB4NjAsMHgwNCwweGI4LDB4MDAsMHhhMiwweDkwLDB4MjgsMHg4YywweDFhLDB4MjQsMHgwMiwweDhiIH0sCisgIDE2LCAweGE3NDAsIDAsIHsweDgzLDB4MjIsMHhjMSwweDA4LDB4YjAsMHgwMiwweGZjLDB4MDAsMHhiMywweDYwLDB4MjAsMHhjMCwweDBkLDB4YTAsMHgwMywweGUwIH0sCisgIDE2LCAweGE3NTAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MmUsMHgwMCwweGFiLDB4YzAsMHgyMiwweDYwIH0sCisgIDE2LCAweGE3NjAsIDAsIHsweDA4LDB4YjgsMHgwMiwweDI5LDB4MDAsMHg4OCwweDAxLDB4MjAsMHgwMCwweDA4LDB4OTAsMHgwMiwweDIwLDB4MDAsMHhiOCwweDAwIH0sCisgIDE2LCAweGE3NzAsIDAsIHsweDIyLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhlNCwweDAwLDB4ODEsMHgyNCwweGEyLDB4YzAsMHgwOSwweGIwLDB4NDYsMHhlYywweDAwIH0sCisgIDE2LCAweGE3ODAsIDAsIHsweGI5LDB4MDAsMHgyMiwweGMwLDB4MDgsMHg5MCwweDAyLDB4MjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE3OTAsIDAsIHsweDA4LDB4MDQsMHgyYywweDAwLDB4YTEsMHgwMCwweGEwLDB4NDEsMHgwOCwweGIwLDB4MGEsMHgyMCwweDUzLDB4ODgsMHgwMCwweDIwIH0sCisgIDE2LCAweGE3YTAsIDAsIHsweGMwLDB4MjgsMHhhMCwweDAyLDB4NGMsMHgwMCwweGIzLDB4MDAsMHgyMCwweDAwLDB4ODgsMHgwMCwweDAyLDB4ODQsMHgwMCwweDgzIH0sCisgIDE2LCAweGE3YjAsIDAsIHsweDA0LDB4MjAsMHhjMCwweDI4LDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMywweDAyLDB4NjIsMHhjMCwweDA5LDB4MTAsMHgwMiwweGMyIH0sCisgIDE2LCAweGE3YzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NmMsMHgwMCwweGU5LDB4MDAsMHgyMiwweDAwIH0sCisgIDE2LCAweGE3ZDAsIDAsIHsweDBjLDB4YjAsMHgwMywweDAwLDB4MDQsMHhjOSwweDAwLDB4YjIsMHgwMCwweDBjLDB4OTAsMHgwMywweDJjLDB4MDAsMHhmMywweDAwIH0sCisgIDE2LCAweGE3ZTAsIDAsIHsweGIyLDB4YzAsMHg4YywweGIwLDB4MDMsMHhiNCwweDAyLDB4OGYsMHgwMCwweDIzLDB4YzAsMHgwNCwweGYwLDB4MDMsMHhlYywweDA4IH0sCisgIDE2LCAweGE3ZjAsIDAsIHsweGY5LDB4MDAsMHgzMywweGMwLDB4MGMsMHg4MCwweDAzLDB4MDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE4MDAsIDAsIHsweGEwLDB4MWQsMHhmYywweDEwLDB4ZGQsMHgwNCwweDNmLDB4MDAsMHgwZiwweGMwLDB4MjMsMHhmMCwweDkwLDB4ZmQsMHgwMCwweDJmIH0sCisgIDE2LCAweGE4MTAsIDAsIHsweGMwLDB4MGYsMHhlMCwweDQzLDB4ZDAsMHgwMCwweGZjLDB4MDAsMHgzZiwweDAwLDB4OGYsMHhjMCwweDIyLDB4NzQsMHgwMCwweGZkIH0sCisgIDE2LCAweGE4MjAsIDAsIHsweDA0LDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZiwweDA2LDB4M2YsMHhjMCwweDBmLDB4YzAsMHg0MywweGU4IH0sCisgIDE2LCAweGE4MzAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHg4MCwweGVmLDB4MjAsMHgxMSwweGMwIH0sCisgIDE2LCAweGE4NDAsIDAsIHsweDBlLDB4NzIsMHgwMywweGJkLDB4YjAsMHhjZiwweDMxLDB4YmYsMHhjYywweDAyLDB4ZjAsMHgwMywweGZjLDB4YzYsMHhjZiwweDAxIH0sCisgIDE2LCAweGE4NTAsIDAsIHsweDBiLDB4YzUsMHgwZiwweGYxLDB4MDMsMHgzYywweDA0LDB4ZWYsMHg2MSwweDMzLDB4ZDgsMHgwNywweGYwLDB4MDMsMHgzNCwweDgwIH0sCisgIDE2LCAweGE4NjAsIDAsIHsweGNkLDB4MzAsMHg3MywweGNjLDB4MGYsMHhlOCwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE4NzAsIDAsIHsweDgwLDB4MTgsMHhlOSwweDAwLDB4ODgsMHg2OSwweDIyLDB4MTAsMHgwOCwweDhjLDB4MDAsMHgyMSwweDg0LDB4ODgsMHg0MSwweDIyIH0sCisgIDE2LCAweGE4ODAsIDAsIHsweDEwLDB4ODgsMHg4NiwweDkyLDB4MDEsMHgwMCwweDg4LDB4NjIsMHgyMiwweDEwLDB4NGIsMHg4NywweDAyLDB4MjEsMHhhMCwweDg4IH0sCisgIDE2LCAweGE4OTAsIDAsIHsweDYwLDB4MjAsMHgxMCwweDBiLDB4ODYsMHhhMiwweDM1LDB4YTAsMHhhYiwweDYwLDB4YTEsMHhjNCwweDBiLDB4YjgsMHgwMiwweDIwIH0sCisgIDE2LCAweGE4YTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4Y2QsMHhhOCwweDMzLDB4NDEsMHgyMCwweGM2IH0sCisgIDE2LCAweGE4YjAsIDAsIHsweDRhLDB4MzEsMHgwMCwweDhjLDB4MTAsMHg5MywweDMzLDB4MjgsMHhjYywweDI5LDB4MzQsMHgxMiwweDhjLDB4NTAsMHg5MywweDFjIH0sCisgIDE2LCAweGE4YzAsIDAsIHsweDI4LDB4ODQsMHgwMSwweDIwLDB4NGEsMHg0YywweDQxLDB4ODMsMHgxMCwweDI0LDB4Y2MsMHg0YiwweDMxLDB4NDIsMHg0YywweDQwIH0sCisgIDE2LCAweGE4ZDAsIDAsIHsweDkxLDB4MTAsMHgyNCwweGMwLDB4MGIsMHg4MCwweDAyLDB4MjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE4ZTAsIDAsIHsweGMwLDB4MDUsMHhhOCwweDIwLDB4OTAsMHgwMiwweDIyLDB4MDAsMHgwOCwweDgwLDB4MDAsMHgyMCwweDMwLDB4YjgsMHgwOCwweDI2IH0sCisgIDE2LCAweGE4ZjAsIDAsIHsweDAwLDB4MDEsMHg4MCwweDgyLDB4MjAsMHgyMCwweDE4LDB4MDgsMHg0MiwweDQwLDB4MDMsMHg5MSwweDAyLDB4NjAsMHgwMCwweDA4IH0sCisgIDE2LCAweGE5MDAsIDAsIHsweDAxLDB4YTYsMHgwMCwweDBiLDB4ODAsMHgwMCwweDZjLDB4MTAsMHhiYiwweDAxLDB4MjYsMHhjMCwweDRiLDB4OTAsMHgwYSwweDMwIH0sCisgIDE2LCAweGE5MTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDExLDB4ZmQsMHgwMCwweGZkLDB4NDEsMHgzMywweGExIH0sCisgIDE2LCAweGE5MjAsIDAsIHsweDBlLDB4ZDIsMHgwMywweGI1LDB4MDIsMHhkZiwweDQyLDB4M2IsMHgwMSwweDBmLDB4ZDQsMHg0MywweGI1LDB4MDAsMHhjZCwweDQwIH0sCisgIDE2LCAweGE5MzAsIDAsIHsweDFiLDB4YzQsMHgwZCwweDc4LDB4MDMsMHg3MCwweDAyLDB4ZWMsMHgwMCwweDE3LDB4YTEsMHgwZiwweGU4LDB4MGIsMHgyYywweDAyIH0sCisgIDE2LCAweGE5NDAsIDAsIHsweGQ5LDB4OTAsMHgyNiwweGMwLDB4MGYsMHhhYywweDAzLDB4MDAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE5NTAsIDAsIHsweGUwLDB4MDEsMHhiOCwweDAwLDB4ZWUsMHgwMCwweDFmLDB4NjQsMHg0ZiwweGUwLDB4MDMsMHhkOCwweDEwLDB4YzQsMHgxOCwweDMzIH0sCisgIDE2LCAweGE5NjAsIDAsIHsweGMwLDB4MGMsMHhhMCwweGExLDB4YjgsMHgwOSwweGU2LDB4MDksMHgzNiwweDIyLDB4MGYsMHg4OCwweDIzLDB4YmMsMHgwMCwweGZiIH0sCisgIDE2LCAweGE5NzAsIDAsIHsweDAwLDB4M2IsMHg2NCwweDBmLDB4ZDksMHgwMywweDljLDB4MDAsMHhlMywweDA0LDB4M2IsMHhjMCwweDBmLDB4ZjQsMHgwMywweGY4IH0sCisgIDE2LCAweGE5ODAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4OGQsMHgwMCwweGM5LDB4NDAsMHhiNiwweDgwIH0sCisgIDE2LCAweGE5OTAsIDAsIHsweDBmLDB4MTAsMHgwMywweGE3LDB4MjAsMHhmYiwweDUwLDB4YjYsMHgwOCwweDRjLDB4MTQsMHgwMywweDY1LDB4MjIsMHhkOSwweDQwIH0sCisgIDE2LCAweGE5YTAsIDAsIHsweGI2LDB4ODAsMHgwZSwweGEwLDB4MGIsMHgwMCwweDAwLDB4ZDgsMHgwMCwweDc2LDB4ODIsMHgyOCwweGEwLDB4MjMsMHg2NCwweDAwIH0sCisgIDE2LCAweGE5YjAsIDAsIHsweGM5LDB4MDQsMHgxMiwweGMwLDB4OGUsMHg4MCwweDAzLDB4OTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGE5YzAsIDAsIHsweGM4LDB4MDUsMHgyYiwweDYwLDB4OGEsMHgwOSwweDIwLDB4NTAsMHgwOCwweGEwLDB4MjMsMHhlOSwweDAwLDB4YjgsMHhjMCwweDIyIH0sCisgIDE2LCAweGE5ZDAsIDAsIHsweGYwLDB4MDgsMHhhYywweDAyLDB4MjgsMHgwNCwweDhhLDB4YzIsMHgyMiwweDUwLDB4MDgsMHg5MCwweDA2LDB4MmMsMHgwMCwweDhiIH0sCisgIDE2LCAweGE5ZTAsIDAsIHsweDA0LDB4MjIsMHg1MSwweDA4LDB4OTQsMHgwMiwweGU0LDB4MDQsMHg4YiwweDA0LDB4MzcsMHhjMCwweDA4LDB4MTgsMHg0MiwweDI2IH0sCisgIDE2LCAweGE5ZjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA0LDB4NGIsMHgwMCwweDgyLDB4YzgsMHgyNCwweDQzIH0sCisgIDE2LCAweGFhMDAsIDAsIHsweDBiLDB4MjYsMHgwYSwweDg4LDB4MDAsMHhiMCwweDgwLDB4MjIsMHhlNCwweDBiLDB4MjAsMHg0MiwweDY5LDB4MDAsMHhhMiwweDkwIH0sCisgIDE2LCAweGFhMTAsIDAsIHsweDI4LDB4NDAsMHhlOCwweDEwLDB4MDIsMHgwYywweDAwLDB4YmIsMHgwMCwweDI4LDB4NTAsMHg4OCwweDkwLDB4ODIsMHhjNCwweDAxIH0sCisgIDE2LCAweGFhMjAsIDAsIHsweDgzLDB4MDAsMHgyMCwweGMwLDB4MGEsMHgxMCwweDAyLDB4YmEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFhMzAsIDAsIHsweDIwLDB4MTAsMHg0ZSwweDgwLDB4ODEsMHgwMCwweDIxLDB4YTgsMHgwOCwweDU4LDB4MDIsMHhkNiwweDAxLDB4YjcsMHg5MCwweDY4IH0sCisgIDE2LCAweGFhNDAsIDAsIHsweDIwLDB4MDMsMHg1OSwweDgyLDB4NTYsMHgwMCwweGE1LDB4ODQsMHgyZCwweGEyLDB4MTgsMHg2OSwweDIyLDB4MDIsMHgwMCwweDM0IH0sCisgIDE2LCAweGFhNTAsIDAsIHsweDgwLDB4MjksMHhhOCwweDA4LDB4NjgsMHgwNiwweGM2LDB4MTQsMHg4NSwweDgyLDB4MjUsMHhlMCwweDA4LDB4NTgsMHg4MiwweDFjIH0sCisgIDE2LCAweGFhNjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4NDgsMHgwMCwweGMyLDB4ZjAsMHgzNCwweDQwIH0sCisgIDE2LCAweGFhNzAsIDAsIHsweDBmLDB4MjAsMHgwMywweDg4LDB4ODAsMHhmOCwweDEwLDB4MzAsMHhjMCwweDI3LDB4MjEsMHgwYiwweDQ4LDB4ODAsMHhlYSwweDIwIH0sCisgIDE2LCAweGFhODAsIDAsIHsweDM4LDB4MDAsMHgwYywweDAwLDB4MTIsMHgwYywweDA4LDB4NzMsMHgwMCwweGI4LDB4NDAsMHgwYywweDEyLDB4MjMsMHg0YywweDAyIH0sCisgIDE2LCAweGFhOTAsIDAsIHsweDQzLDB4MzQsMHgzMCwweGMwLDB4MGUsMHgxMSwweDAzLDB4OTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFhYTAsIDAsIHsweDQwLDB4MTUsMHhhYywweDkwLDB4ZjksMHgwMSwweDJlLDB4ODgsMHg0YiwweDkwLDB4MTEsMHg2NCwweDAwLDB4ZmIsMHgxMCwweDMyIH0sCisgIDE2LCAweGFhYjAsIDAsIHsweDAwLDB4MDAsMHg5MSwweDAzLDB4YTQsMHgwMCwweGM5LDB4MDAsMHgzMiwweGM0LDB4NGQsMHhiMCwweDQzLDB4ZTAsMHgwNCwweGM4IH0sCisgIDE2LCAweGFhYzAsIDAsIHsweDAwLDB4MzYsMHg4OSwweDBmLDB4YTgsMHgwMywweGVkLDB4MDAsMHhmOSwweDE0LDB4M2UsMHhjMCwweDBmLDB4MTAsMHg0MywweGQwIH0sCisgIDE2LCAweGFhZDAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4ZTgsMHgwMCwweGM4LDB4MDAsMHgzYSwweDAwIH0sCisgIDE2LCAweGFhZTAsIDAsIHsweDBjLDB4MDAsMHg1MywweGEwLDB4MDAsMHhlOCwweDAxLDB4MzIsMHgwMSwweDBlLDB4ODAsMHg1MywweDIwLDB4MTAsMHhjOCwweDAwIH0sCisgIDE2LCAweGFhZjAsIDAsIHsweDNhLDB4NDAsMHgwYywweDkwLDB4MDMsMHgyMCwweDEwLDB4ZTgsMHgwNCwweGI2LDB4MDAsMHg4NCwweDgwLDB4MDMsMHgyZCwweDEyIH0sCisgIDE2LCAweGFiMDAsIDAsIHsweGNiLDB4MDAsMHgyZSwweGNhLDB4MDQsMHg5MCwweDAzLDB4ZWEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFiMTAsIDAsIHsweDRjLDB4MTksMHg4YywweDAwLDB4ODcsMHgwMiwweDIxLDB4YzAsMHgwOCwweDcwLDB4MDIsMHgwYywweDAwLDB4ODMsMHgwMCwweDIxIH0sCisgIDE2LCAweGFiMjAsIDAsIHsweGMwLDB4MDgsMHgzMCwweDYyLDB4NGMsMHgwNCwweDgzLDB4MDAsMHgyMSwweDgwLDB4NDgsMHhlMCwweDEyLDB4M2MsMHgwMCwweDg3IH0sCisgIDE2LCAweGFiMzAsIDAsIHsweDAwLDB4MjEsMHhjMCwweDA4LDB4NzAsMHgwMiwweDFjLDB4MDAsMHg4NSwweDAxLDB4MjQsMHhkMCwweDBhLDB4NTAsMHgwMiwweGYyIH0sCisgIDE2LCAweGFiNDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAwLDB4OWEsMHgwMCwweDgwLDB4ODAsMHgyOCwweDIwIH0sCisgIDE2LCAweGFiNTAsIDAsIHsweDA4LDB4NGMsMHgyMiwweGQyLDB4MDAsMHhhNCwweDgwLDB4MjQsMHgzMCwweDBiLDB4NDgsMHgwMiwweDUyLDB4MDAsMHg4NCwweGMwIH0sCisgIDE2LCAweGFiNjAsIDAsIHsweDIxLDB4MjAsMHgwOSwweDQ4LDB4NjgsMHgxMywweDAwLDB4YTQsMHg4MCwweDYwLDB4MjAsMHgwOSwweDA4LDB4MDIsMHg1NiwweDAwIH0sCisgIDE2LCAweGFiNzAsIDAsIHsweDk3LDB4ODAsMHgyZCwweGUwLDB4ODgsMHg1OCwweDAyLDB4ZTAsMHgxMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFiODAsIDAsIHsweDZjLDB4MDQsMHhjYywweDAwLDB4ODMsMHg4MCwweDIwLDB4ZDgsMHgwOCwweDMwLDB4MDIsMHg0YywweDQwLDB4ODMsMHgwMCwweDI0IH0sCisgIDE2LCAweGFiOTAsIDAsIHsweGQxLDB4MDksMHhiOSwweDQyLDB4NGUsMHgwMCwweDgzLDB4MDAsMHgyMCwweGMxLDB4ODksMHgzMCwweDQyLDB4MGMsMHgwMCwweDgzIH0sCisgIDE2LCAweGFiYTAsIDAsIHsweGYwLDB4YTAsMHhkOSwweDE5LDB4MzYsMHgyMiwweDY2LDB4MDYsMHg5MSwweDAwLDB4MGMsMHhjMSwweDBhLDB4MTAsMHgwMiwweGMyIH0sCisgIDE2LCAweGFiYjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4ZTgsMHgwMiwweGNhLDB4YTUsMHgyYSwweDkxIH0sCisgIDE2LCAweGFiYzAsIDAsIHsweDI4LDB4YTgsMHgwMywweGVhLDB4MDIsMHhhYSwweDAwLDB4YjYsMHhhMCwweDBmLDB4YTAsMHgwYSwweDJhLDB4OTIsMHhjYSwweDgzIH0sCisgIDE2LCAweGFiZDAsIDAsIHsweGJhLDB4ODAsMHgyOSwweGEwLDB4MDMsMHgyYiwweDAwLDB4ZWEsMHg0MCwweDY2LDB4OTAsMHgyZCwweGU0LDB4MGIsMHg2YSwweDgwIH0sCisgIDE2LCAweGFiZTAsIDAsIHsweGRhLDB4MDAsMHgzZSwweDgwLDB4MGMsMHhlMCwweDAzLDB4ZmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFiZjAsIDAsIHsweDQ4LDB4MDEsMHg4MCwweDAwLDB4ZmMsMHgwMCwweDNkLDB4MDAsMHgwZiwweGMwLDB4MDMsMHhiMCwweDE0LDB4ZmMsMHgwMCwweDNiIH0sCisgIDE2LCAweGFjMDAsIDAsIHsweDEyLDB4MGUsMHhjMCwweDQzLDB4YjEsMHgxNCwweGZjLDB4MDAsMHgzZCwweDAwLDB4MGUsMHhjMCwweDAzLDB4ZjAsMHgyMCwweGY0IH0sCisgIDE2LCAweGFjMTAsIDAsIHsweDAwLDB4MzEsMHgwMCwweDBlLDB4NDQsMHgxMywweGEwLDB4MDAsMHhlOCwweDA2LDB4MzYsMHgwMCwweDRmLDB4ODAsMHgxMywweGQyIH0sCisgIDE2LCAweGFjMjAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4YTQsMHgwMCwweGQxLDB4MDAsMHgzNiwweDYwIH0sCisgIDE2LCAweGFjMzAsIDAsIHsweDFjLDB4MTgsMHgwYiwweDQ2LDB4MDAsMHhkOSwweDgwLDB4MzAsMHg0MCwweDJjLDB4OTgsMHgwNSwweDg2LDB4MDAsMHhjMSwweDgwIH0sCisgIDE2LCAweGFjNDAsIDAsIHsweDkyLDB4NDAsMHgwZCwweDEwLDB4MDMsMHg0NCwweDAyLDB4ODksMHgwMCwweDMyLDB4NzAsMHgwYywweDk4LDB4MDEsMHgyNCwweDAwIH0sCisgIDE2LCAweGFjNTAsIDAsIHsweGM5LDB4MDQsMHgzMCwweDQwLDB4MGMsMHg5MCwweDAzLDB4YzIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFjNjAsIDAsIHsweDgwLDB4MDQsMHg2NCwweDAwLDB4ODksMHgwMCwweDIyLDB4NDAsMHgwOCwweDk0LDB4MDIsMHgyNCwweDgwLDB4ODksMHgwMSwweDIyIH0sCisgIDE2LCAweGFjNzAsIDAsIHsweDQwLDB4NDgsMHg5MSwweDAyLDB4MjQsMHgwMCwweGQ5LDB4OTAsMHgyMiwweDQxLDB4MDgsMHg5MCwweDEyLDB4MjQsMHgxMCwweDg5IH0sCisgIDE2LCAweGFjODAsIDAsIHsweDAwLDB4MzIsMHg0MCwweDA4LDB4OTUsMHgxMiwweDI0LDB4MDIsMHg4MSwweDAwLDB4YTIsMHg0MSwweDBkLDB4OTAsMHg0MiwweGUwIH0sCisgIDE2LCAweGFjOTAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDA1LDB4MjQsMHgwMiwweDlkLDB4MDAsMHgyMywweDQ0IH0sCisgIDE2LCAweGFjYTAsIDAsIHsweDA4LDB4ZDIsMHgwNiwweDc0LDB4ODAsMHhiNSwweDIwLDB4MjMsMHg0MCwweDFhLDB4ZDAsMHgwNiwweDM1LDB4OTAsMHg4ZCwweDAyIH0sCisgIDE2LCAweGFjYjAsIDAsIHsweDJmLDB4NDQsMHgxOSwweGQwLDB4MDIsMHg3NCwweDAwLDB4OGQsMHgwMCwweDYzLDB4NDAsMHgxOCwweGQ0LDB4MDIsMHhhNCwweDExIH0sCisgIDE2LCAweGFjYzAsIDAsIHsweDg5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHhiMCwweDAyLDB4YzYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFjZDAsIDAsIHsweDI4LDB4MTQsMHgwNCwweDgwLDB4ODUsMHgyMCwweDIxLDB4NjgsMHgwOCwweDUyLDB4MDIsMHgxNCwweDgwLDB4YTUsMHgyMCwweGExIH0sCisgIDE2LCAweGFjZTAsIDAsIHsweDQ4LDB4MGEsMHg3MiwweDM4LDB4MTQsMHg4MCwweDk1LDB4MjQsMHgyZCwweDQ4LDB4MjgsMHg1MiwweDAyLDB4MTQsMHg4MCwweDg1IH0sCisgIDE2LCAweGFjZjAsIDAsIHsweDIwLDB4MjEsMHg0OCwweDA4LDB4NTIsMHgwNiwweDg0LDB4ODAsMHg4MSwweDIwLDB4MjAsMHg0YSwweDA5LDB4MTAsMHgwMiwweGMyIH0sCisgIDE2LCAweGFkMDAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDBkLDB4NjEsMHg0MCwweGQ4LDB4NTAsMHhiMiwweDE0IH0sCisgIDE2LCAweGFkMTAsIDAsIHsweDI4LDB4YTAsMHgwMywweDYxLDB4NDAsMHhmOCwweDUwLDB4MzIsMHg5NCwweDRlLDB4ODUsMHgwNCwweDIxLDB4NDIsMHhjOCwweDUwIH0sCisgIDE2LCAweGFkMjAsIDAsIHsweDNjLDB4MTQsMHgwZCwweDgwLDB4MDMsMHg2MSwweDQwLDB4ODgsMHg1MCwweGIyLDB4MTQsMHgyYywweGM1LDB4MDksMHhhMSwweDQwIH0sCisgIDE2LCAweGFkMzAsIDAsIHsweGM4LDB4NTAsMHgzMiwweDFjLDB4MGMsMHg4MCwweDAzLDB4ZWUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFkNDAsIDAsIHsweDk4LDB4MTUsMHhlNCwweDQwLDB4ZjksMHgxMCwweDNhLDB4NDQsMHgwZiwweDkxLDB4MDMsMHhlNCwweDQwLDB4ZDksMHgxNCwweDNlIH0sCisgIDE2LCAweGFkNTAsIDAsIHsweDQ0LDB4MGQsMHg5MSwweDQzLDB4NjQsMHg0MCwweGU5LDB4MTAsMHgzMiwweDQ0LDB4MDcsMHg5MywweGMzLDB4ZTQsMHg1MCwweGQxIH0sCisgIDE2LCAweGFkNjAsIDAsIHsweDEwLDB4N2UsMHg0NCwweDAzLDB4OTEsMHgwMSwweDU0LDB4NDQsMHhmZCwweDE0LDB4M2UsMHg0MCwweDBmLDB4ZDAsMHgwMywweGU2IH0sCisgIDE2LCAweGFkNzAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZjYsMHg4MCwweGRkLDB4YTAsMHgzMywweDY4IH0sCisgIDE2LCAweGFkODAsIDAsIHsweDFlLDB4ZGEsMHgwMywweDM2LDB4OTAsMHhjZCwweGEwLDB4M2IsMHg2OCwweDBhLDB4ZDgsMHgyMywweDc2LDB4MGMsMHhlZCwweDgwIH0sCisgIDE2LCAweGFkOTAsIDAsIHsweDJiLDB4NjIsMHgwYiwweDk5LDB4MDIsMHhhNywweDgwLDB4ZjksMHhlMSwweDM3LDB4NjgsMHgwYywweGRhLDB4MDMsMHgyNywweDgwIH0sCisgIDE2LCAweGFkYTAsIDAsIHsweGM5LDB4YTIsMHgyMiwweDY4LDB4NGMsMHg1MCwweDAzLDB4YzYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFkYjAsIDAsIHsweDM4LDB4MTgsMHhlMSwweDQwLDB4ODgsMHg1MCwweDIyLDB4MTQsMHgwOCwweDgwLDB4MjIsMHg2MCwweDAwLDB4ODgsMHgwNCwweDIyIH0sCisgIDE2LCAweGFkYzAsIDAsIHsweDAwLDB4MDgsMHgwNCwweDI2LDB4MDEsMHgwMCwweDg4LDB4NTAsMHgyMiwweDEwLDB4MDgsMHhhZiwweDAyLDB4MjMsMHgwMCwweDg4IH0sCisgIDE2LCAweGFkZDAsIDAsIHsweGMwLDB4YTAsMHgxMCwweDg4LDB4ODQsMHgwMiwweDIzLDB4ODAsMHhhMCwweDQwLDB4MmEsMHgxMCwweDA4LDB4ODAsMHgxMiwweDRlIH0sCisgIDE2LCAweGFkZTAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4ODQsMHgwMCwweDgxLDB4MDEsMHgyMCwweDQwIH0sCisgIDE2LCAweGFkZjAsIDAsIHsweDBhLDB4MTQsMHgwMiwweDQ1LDB4MDAsMHg4MSwweDQxLDB4MmMsMHg1MCwweDBiLDB4MTQsMHgwMiwweDA1LDB4MDQsMHhhMSwweDAwIH0sCisgIDE2LCAweGFlMDAsIDAsIHsweDI4LDB4NDAsMHg4MiwweDEwLDB4MDIsMHg4NCwweDQwLDB4YTEsMHgzMiwweDgwLDB4NTAsMHgwOSwweDE0LDB4MDIsMHgwNCwweGM0IH0sCisgIDE2LCAweGFlMTAsIDAsIHsweDkxLDB4MTAsMHg2NCwweDQ0LDB4MjgsMHgxMCwweDAyLDB4ZDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFlMjAsIDAsIHsweDE4LDB4MDQsMHhhYywweDAyLDB4ODEsMHgwMCwweDIyLDB4YzEsMHgwOCwweDkwLDB4MDIsMHg0NCwweDAyLDB4ODksMHgwMiwweDI2IH0sCisgIDE2LCAweGFlMzAsIDAsIHsweDQxLDB4MDksMHg5MCwweDBhLDB4MjQsMHgwYywweDg5LDB4MDQsMHgyMiwweDUwLDB4MDgsMHg5MCwweDI2LDB4MjQsMHgwMCwweDg5IH0sCisgIDE2LCAweGFlNDAsIDAsIHsweDAwLDB4MjIsMHg0MSwweDA5LDB4MTAsMHgyMiwweDI0LDB4NDAsMHhiOSwweDAxLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweDQ2IH0sCisgIDE2LCAweGFlNTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDE1LDB4ZTQsMHgxMCwweDg5LDB4MDAsMHgzMiwweDQwIH0sCisgIDE2LCAweGFlNjAsIDAsIHsweDBhLDB4OTAsMHgwYiwweDI0LDB4MTAsMHg4OSwweDAwLDB4MWUsMHg0MCwweDliLDB4OTAsMHgwMiwweDI0LDB4MTAsMHgyOSwweDAwIH0sCisgIDE2LCAweGFlNzAsIDAsIHsweDFhLDB4NDAsMHgwZSwweDk0LDB4NDEsMHhhNCwweDAwLDB4MjksMHgwMCwweDEyLDB4NDAsMHgwNSwweDkwLDB4NDEsMHgyNiwweDAwIH0sCisgIDE2LCAweGFlODAsIDAsIHsweGQ5LDB4MDAsMHgyNCwweDQwLDB4MGMsMHg5MCwweDAzLDB4ZTgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFlOTAsIDAsIHsweDQ4LDB4MDEsMHhhNCwweDAyLDB4YTksMHgwMCwweGJjLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhhNCwweDA0LDB4ZjksMHgwMCwweDNhIH0sCisgIDE2LCAweGFlYTAsIDAsIHsweDQxLDB4MGUsMHg5MCwweDgzLDB4ODQsMHgwMCwweGY5LDB4MDAsMHgzYywweDQwLDB4MGUsMHg5MCwweDAyLDB4YzQsMHgwOCwweGU5IH0sCisgIDE2LCAweGFlYjAsIDAsIHsweDAwLDB4M2EsMHg0MCwweDJlLDB4OTAsMHgwYiwweGU2LDB4MDAsMHhlMSwweDA0LDB4M2EsMHg0MCwweDBmLDB4OTIsMHgwMywweDVhIH0sCisgIDE2LCAweGFlYzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4YTAsMHgyMCwweGQ4LDB4MDAsMHgzNiwweDAyIH0sCisgIDE2LCAweGFlZDAsIDAsIHsweDBlLDB4MDAsMHhhMywweGUwLDB4MTgsMHhjMCwweDAwLDB4MzAsMHgwMywweDBmLDB4ODAsMHgzMywweDIwLDB4MDAsMHg0MCwweDAwIH0sCisgIDE2LCAweGFlZTAsIDAsIHsweDMyLDB4MGQsMHgwZiwweDA0LDB4MGIsMHhhMCwweDAyLDB4YzgsMHgwMiwweDMyLDB4MDIsMHg4YywweDgyLDB4MDMsMHgyMCwweDAyIH0sCisgIDE2LCAweGFlZjAsIDAsIHsweGM4LDB4MDQsMHgxNiwweDAwLDB4NGUsMHg4MCwweDAxLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFmMDAsIDAsIHsweDI4LDB4MDUsMHgzYiwweDAwLDB4OGUsMHhkOCwweDIzLDB4ODAsMHgwOCwweGUwLDB4MDIsMHhmOCwweDgwLDB4OGUsMHgxMCwweDIzIH0sCisgIDE2LCAweGFmMTAsIDAsIHsweGEyLDB4MGIsMHhlMCwweDgyLDB4N2EsMHgyMCwweDhlLDB4MzAsMHgyMywweGExLDB4MGIsMHhlMCwweDAyLDB4MjgsMHgwMCwweDhlIH0sCisgIDE2LCAweGFmMjAsIDAsIHsweDAwLDB4MmIsMHg4OCwweDA4LDB4ZTQsMHg0MiwweDM4LDB4MDAsMHg4ZSwweDA0LDB4MjMsMHg4MCwweDA4LDB4YTAsMHgwMiwweDBhIH0sCisgIDE2LCAweGFmMzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NmYsMHg0MCwweDkzLDB4YzYsMHgyNCwweDQwIH0sCisgIDE2LCAweGFmNDAsIDAsIHsweDBhLDB4MzgsMHgwMiwweGNjLDB4MDAsMHg4MywweDAxLDB4YWMsMHhmMCwweDBiLDB4YjQsMHgwMiwweDRjLDB4MDQsMHhhMywweDgwIH0sCisgIDE2LCAweGFmNTAsIDAsIHsweDI4LDB4ZDAsMHg0YiwweDMwLDB4MDIsMHg0YywweDAwLDB4YWIsMHgwNCwweDJhLDB4YzAsMHgyYSwweDMwLDB4MGEsMHhhYywweDEwIH0sCisgIDE2LCAweGFmNjAsIDAsIHsweDkzLDB4MDAsMHgyMCwweGMxLDB4MGEsMHgzMSwweDAyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFmNzAsIDAsIHsweDgwLDB4MTEsMHgxYywweDAwLDB4ODIsMHgwMCwweDIxLDB4NDIsMHg4OCwweDc0LDB4MDYsMHhkYywweDBiLDB4ODYsMHgwMiwweDJkIH0sCisgIDE2LCAweGFmODAsIDAsIHsweDgwLDB4MGIsMHg3MCwweDJhLDB4NTgsMHgwMCwweGE2LDB4MDAsMHhhOSwweGMwLDB4MGIsMHg3MCwweDAyLDB4NWMsMHg4OCwweGE3IH0sCisgIDE2LCAweGFmOTAsIDAsIHsweDIwLDB4MjksMHhjMCwweDBhLDB4NzAsMHgwMiwweDljLDB4MTAsMHg5NywweDIwLDB4YTEsMHhjOCwweDA4LDB4ZDgsMHgwMiwweDI4IH0sCisgIDE2LCAweGFmYTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA4LDB4MGUsMHgwMCwweGQ3LDB4ODAsMHgzNywweDYwIH0sCisgIDE2LCAweGFmYjAsIDAsIHsweDBlLDB4NjgsMHgxMywweGZlLDB4MDAsMHhjZiwweDgwLDB4M2QsMHhlMCwweDBmLDB4NzgsMHgyMywweDFlLDB4MDAsMHhlZiwweDgyIH0sCisgIDE2LCAweGFmYzAsIDAsIHsweDMxLDB4ZTAsMHgwZiwweDNjLDB4YzMsMHg3ZSwweDA0LDB4ZWYsMHg4MCwweGIxLDB4ZTAsMHgwZSwweGU4LDB4MDMsMHhiZSwweDgwIH0sCisgIDE2LCAweGFmZDAsIDAsIHsweGQ3LDB4ZTAsMHgzMywweGVhLDB4MGUsMHg3OCwweDAzLDB4MmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGFmZTAsIDAsIHsweDA4LDB4MTUsMHhhYywweDAwLDB4ZmEsMHgwMSwweDNlLDB4MDAsMHgwZiwweGIwLDB4MDMsMHhlMCwweDA0LDB4ZjgsMHgwMCwweDMyIH0sCisgIDE2LCAweGFmZjAsIDAsIHsweDgwLDB4MGYsMHg4MCwweDQzLDB4YWMsMHgwYSwweGQ4LDB4MDAsMHgzNiwweDQwLDB4MGYsMHhiMCwweDAzLDB4MmMsMHgwYywweGRiIH0sCisgIDE2LCAweGIwMDAsIDAsIHsweDAwLDB4MjYsMHhjMSwweDA5LDB4YTAsMHgxMywweDZjLDB4NDAsMHhlYiwweDQwLDB4M2EsMHhkYywweDBmLDB4OTAsMHgwYiwweGMyIH0sCisgIDE2LCAweGIwMTAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA0LDB4YmUsMHgwMCwweGNmLDB4ODEsMHgzMywweGU5IH0sCisgIDE2LCAweGIwMjAsIDAsIHsweDFmLDB4ZjksMHgxMywweGI2LDB4NTAsMHhlZiwweDgwLDB4MWYsMHhlNCwweDA0LDB4YzgsMHgwMywweDdlLDB4MDAsMHg2ZCwweDgxIH0sCisgIDE2LCAweGIwMzAsIDAsIHsweDMzLDB4NjQsMHgwYywweGY4LDB4MWIsMHgzZSwweDIwLDB4MmYsMHg4OCwweDkzLDB4ZTgsMHgwZiwweGZiLDB4MDMsMHgyZSwweDgwIH0sCisgIDE2LCAweGIwNDAsIDAsIHsweGNmLDB4YzAsMHg3MywweGUwLDB4MmMsMHhkOSwweDAzLDB4ZDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIwNTAsIDAsIHsweGE4LDB4MTgsMHg5MCwweDQyLDB4ODksMHgxOCwweDIxLDB4YzAsMHgxZiwweDcxLDB4MDIsMHgxNCwweGMwLDB4ZjcsMHgyMCwweDI3IH0sCisgIDE2LCAweGIwNjAsIDAsIHsweDQwLDB4NDAsMHg3MSwweDEyLDB4MTgsMHgwMCwweDg3LDB4MjAsMHgyMSwweDgwLDB4NDgsMHg3MSwweDAyLDB4M2MsMHgwOCwweDg3IH0sCisgIDE2LCAweGIwNzAsIDAsIHsweDIwLDB4MjEsMHg4MiwweDBiLDB4NjEsMHhhMiwweDFlLDB4NDQsMHhkZiwweDAxLDB4MzEsMHhjOCwweDA4LDB4NzMsMHgwMiwweGVhIH0sCisgIDE2LCAweGIwODAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4OGMsMHgwMCwweDg3LDB4MDAsMHgyMSwweGM4IH0sCisgIDE2LCAweGIwOTAsIDAsIHsweDBiLDB4NzAsMHgwMiwweDljLDB4MDksMHg4NywweDAyLDB4MmQsMHg4MiwweDk5LDB4NDAsMHgwMiwweDA0LDB4MDAsMHhhNSwweDA5IH0sCisgIDE2LCAweGIwYTAsIDAsIHsweDIxLDB4NDAsMHgxOSwweDcwLDB4MDIsMHgxYywweDAwLDB4ODcsMHgwNSwweDI1LDB4NDgsMHg0YiwweDcyLDB4MDIsMHgwYywweDQwIH0sCisgIDE2LCAweGIwYjAsIDAsIHsweDg3LDB4MDAsMHhhMSwweGMwLDB4NDgsMHg1MCwweDAyLDB4YzQsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIwYzAsIDAsIHsweDY4LDB4MDQsMHhjMSwweDIwLDB4ODksMHg0YywweGEwLDB4YjQsMHgwYSwweDM4LDB4MDIsMHgyMiwweDAwLDB4YTEsMHhkMCwweDI0IH0sCisgIDE2LCAweGIwZDAsIDAsIHsweDMwLDB4MDksMHg4MCwweDAyLDB4MjcsMHg0NCwweDgxLDB4YzYsMHgyMiwweDE0LDB4MDksMHgzZCwweDJhLDB4MGYsMHgwMiwweDhiIH0sCisgIDE2LCAweGIwZTAsIDAsIHsweGMwLDB4YTYsMHgyMCwweDBiLDB4MjQsMHgwMCwweDBjLDB4MTAsMHg5MywweDgxLDB4MjAsMHhjMCwweDQ4LDB4MzAsMHgwNiwweGQ4IH0sCisgIDE2LCAweGIwZjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDE1LDB4YTEsMHgwMCwweDg5LDB4YzEsMHgzMiwweGQxIH0sCisgIDE2LCAweGIxMDAsIDAsIHsweDAzLDB4YmMsMHgwMywweGE5LDB4MjAsMHg4OSwweDQxLDB4M2UsMHg2MCwweDg1LDB4YmMsMHg4YiwweDI1LDB4NDAsMHhlYiwweDQxIH0sCisgIDE2LCAweGIxMTAsIDAsIHsweGEyLDB4YTAsMHgwZCwweGYwLDB4MTMsMHgzZSwweDIwLDB4Y2YsMHg5MCwweDM2LDB4MzAsMHg0ZiwweGJjLDB4MGIsMHgzYywweDAwIH0sCisgIDE2LCAweGIxMjAsIDAsIHsweGNmLDB4ODAsMHgzMywweGMxLDB4MGMsMHhiMSwweDAzLDB4ZWEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIxMzAsIDAsIHsweDgwLDB4MDAsMHhlZCwweDAwLDB4ZjgsMHgwMSwweDNjLDB4ZDAsMHgwZiwweGIzLDB4MDMsMHhlOCwweDgyLDB4ZDgsMHgyMCwweDM2IH0sCisgIDE2LCAweGIxNDAsIDAsIHsweDgwLDB4MmUsMHhiMiwweDEzLDB4ZTEsMHgwMCwweGZhLDB4MDAsMHg3ZSwweGM4LDB4MmUsMHhiMCwweDAzLDB4ZWMsMHg4MCwweGRiIH0sCisgIDE2LCAweGIxNTAsIDAsIHsweDEwLDB4M2EsMHgwOCwweDRmLDB4YjIsMHgyMywweGNjLDB4MDIsMHhmYiwweDEwLDB4M2EsMHhjMCwweDBmLDB4OTAsMHgwMywweGU0IH0sCisgIDE2LCAweGIxNjAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDEwLDB4ZjAsMHgwMCwweGNkLDB4MTAsMHgzMywweDQyIH0sCisgIDE2LCAweGIxNzAsIDAsIHsweDBjLDB4Y2EsMHgyMywweDdjLDB4MDAsMHhjZiwweDAwLDB4MzMsMHg2MiwweDA2LDB4ZjAsMHgwMSwweDNhLDB4MDAsMHhjZiwweDA4IH0sCisgIDE2LCAweGIxODAsIDAsIHsweDMzLDB4ODAsMHgxYywweGYwLDB4ODEsMHgzYywweDAwLDB4ZmYsMHgwMCwweDMzLDB4YTAsMHgwYywweGNhLDB4MDEsMHhmYywweDA0IH0sCisgIDE2LCAweGIxOTAsIDAsIHsweGNmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4YzAsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIxYTAsIDAsIHsweGExLDB4MDQsMHg2ZCwweDQwLDB4ODgsMHg0OCwweGEyLDB4MzEsMHgwOCwweDEwLDB4MDIsMHgyMCwweDEwLDB4ODgsMHhiNCwweDIyIH0sCisgIDE2LCAweGIxYjAsIDAsIHsweGEwLDB4MDgsMHg4MCwweDAwLDB4NmEsMHg4NCwweDg4LDB4MjAsMHgyMiwweDUyLDB4MDgsMHhiMCwweDBhLDB4MmMsMHgxMCwweGJiIH0sCisgIDE2LCAweGIxYzAsIDAsIHsweDAwLDB4MzIsMHhiMywweDg4LDB4ODAsMHgwMiwweGVjLDB4MDAsMHhkYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4OTAsMHgxMiwweGUxIH0sCisgIDE2LCAweGIxZDAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4MDAsMHgxMCwweDhhLDB4MDEsMHgyMiwweGEwIH0sCisgIDE2LCAweGIxZTAsIDAsIHsweDA4LDB4YjAsMHg0MiwweDYwLDB4MjAsMHg4MCwweDAwLDB4MjAsMHg0NCwweDFhLDB4ODAsMHgxYSwweGU0LDB4NDIsMHhhMCwweDA2IH0sCisgIDE2LCAweGIxZjAsIDAsIHsweDIyLDB4MDAsMHg3OCwweDMwLDB4MDIsMHhhYywweDAwLDB4YmIsMHgwMCwweGEyLDB4NDQsMHgwOCwweGIwLDB4MTIsMHhlYywweDAwIH0sCisgIDE2LCAweGIyMDAsIDAsIHsweDhiLDB4MDAsMHgwZSwweGMwLDB4MGIsMHg5MCwweDAyLDB4ZTAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIyMTAsIDAsIHsweDA4LDB4MTQsMHgwMCwweDA4LDB4ODAsMHgwMCwweDIwLDB4ODEsMHgwOCwweDMwLDB4MDIsMHg0MCwweDEyLDB4ODAsMHgwMCwweGEwIH0sCisgIDE2LCAweGIyMjAsIDAsIHsweDQwLDB4MDgsMHhiMCwweDAyLDB4YzAsMHgwMCwweDgyLDB4MDAsMHgwMCwweDgwLDB4MDgsMHgzMCwweDAyLDB4OGMsMHgwMCwweGJiIH0sCisgIDE2LCAweGIyMzAsIDAsIHsweDAwLDB4MjAsMHgwMCwweDA4LDB4MjAsMHgwMiwweGNjLDB4ODAsMHg5MywweDAwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGMyIH0sCisgIDE2LCAweGIyNDAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjAsMHgwMCwweGNhLDB4MTQsMHgzMiwweDAwIH0sCisgIDE2LCAweGIyNTAsIDAsIHsweDBjLDB4YjAsMHgwMywweDRjLDB4MDAsMHhjYSwweDAwLDB4MzIsMHgwMCwweDBlLDB4MDAsMHgxMiwweGEwLDB4MDAsMHhjMCwweDAwIH0sCisgIDE2LCAweGIyNjAsIDAsIHsweDcwLDB4MDAsMHgyOCwweGYwLDB4MTMsMHhhYywweDAwLDB4ZmIsMHgwMCwweDMyLDB4NDAsMHgyYywweDEwLDB4NDMsMHhlYywweDAwIH0sCisgIDE2LCAweGIyNzAsIDAsIHsweGNmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHg5MCwweDAzLDB4YzAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIyODAsIDAsIHsweDIwLDB4MTUsMHhmMCwweDAyLDB4ZmMsMHgwMCwweDFmLDB4MDAsMHg2NywweDcwLDB4MDMsMHhiMCwweDAwLDB4ZmMsMHgwMCwweDNmIH0sCisgIDE2LCAweGIyOTAsIDAsIHsweDAwLDB4MmQsMHhjMCwweDAzLDB4MzAsMHgxMCwweGZjLDB4MDEsMHhiZiwweDAwLDB4MGYsMHg3MCwweDAzLDB4N2MsMHgwMCwweGY3IH0sCisgIDE2LCAweGIyYTAsIDAsIHsweDA0LDB4M2IsMHgwMCwweDBmLDB4YzAsMHgxMywweGZkLDB4MTAsMHhmZiwweDAwLDB4M2QsMHhjMCwweDBmLDB4ZjAsMHgwMywweGU4IH0sCisgIDE2LCAweGIyYjAsIDAsIHsweDEyLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZjQsMHhjMCwweGNmLDB4ODAsMHgzMywweDYwIH0sCisgIDE2LCAweGIyYzAsIDAsIHsweDBlLDB4YzksMHgxMywweDM2LDB4NTAsMHhjZSwweDg2LDB4M2YsMHgwOCwweDBjLDB4YzAsMHgwMywweDNlLDB4MDIsMHhkNywweDgwIH0sCisgIDE2LCAweGIyZDAsIDAsIHsweDM5LDB4ZTAsMHgwZiwweGY4LDB4MTMsMHgzZSwweDQwLDB4YzcsMHgzMCwweDNiLDB4Y2UsMHgwZCwweGY2LDB4MDMsMHgzZCwweDg4IH0sCisgIDE2LCAweGIyZTAsIDAsIHsweGNmLDB4MzEsMHgzMywweGU0LDB4MGYsMHg3OCwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIyZjAsIDAsIHsweDgwLDB4MTAsMHhlNSwweGQwLDB4ZGIsMHg4MCwweDcyLDB4NjAsMHg4OCwweDkyLDB4MDIsMHhlNCwweDEwLDB4OGEsMHg4MCwweDJlIH0sCisgIDE2LCAweGIzMDAsIDAsIHsweDM0LDB4NGEsMHg4YywweDAzLDB4MmUsMHgwMCwweGFiLDB4ODAsMHgwMiwweGUwLDB4MGIsMHhiOCwweDAyLDB4MmMsMHg4MCwweDhmIH0sCisgIDE2LCAweGIzMTAsIDAsIHsweDYwLDB4MTMsMHhkOCwweDRhLDB4NzYsMHgwMiwweDlkLDB4ODQsMHhhZiwweDMwLDB4MjIsMHg0OCwweDBiLDB4ODgsMHgxMiwweGEwIH0sCisgIDE2LCAweGIzMjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4YzQsMHgwMCwweDhiLDB4MDAsMHgyNCwweDAwIH0sCisgIDE2LCAweGIzMzAsIDAsIHsweDRhLDB4MDAsMHgwMiwweGFjLDB4ODAsMHg4MywweDAwLDB4MmMsMHgwMSwweDI4LDB4MDQsMHgwMiwweGFjLDB4MDAsMHg4YiwweDAxIH0sCisgIDE2LCAweGIzNDAsIDAsIHsweDIwLDB4YzAsMHgwMywweGIwLDB4MDIsMHgwYywweDgwLDB4ODMsMHg0MCwweDIwLDB4YzEsMHhhOCwweDM0LDB4MjIsMHg4ZCwweDEzIH0sCisgIDE2LCAweGIzNTAsIDAsIHsweDgzLDB4MjAsMHhhYywweGM4LDB4MGIsMHhiMCwweDAyLDB4NjIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIzNjAsIDAsIHsweGMwLDB4MTUsMHg4NiwweDAwLDB4OWIsMHgwNCwweGFlLDB4MDAsMHgwYSwweDkwLDB4MDIsMHhlYywweDAwLDB4MGIsMHgxNCwweDJlIH0sCisgIDE2LCAweGIzNzAsIDAsIHsweGM2LDB4MDIsMHhiMSwweDEyLDB4NmMsMHgwMCwweGFiLDB4MjAsMHgyYSwweGMxLDB4MGIsMHhiMCwweDQyLDB4MmMsMHgwMCwweDhiIH0sCisgIDE2LCAweGIzODAsIDAsIHsweDAyLDB4MjYsMHhjMSwweDBhLDB4YjAsMHgwMiwweGFjLDB4MDAsMHhhYiwweDA0LDB4MmEsMHg0MCwweDBiLDB4OTAsMHgwMiwweGYwIH0sCisgIDE2LCAweGIzOTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDExLDB4ZTcsMHgwMCwweGMzLDB4MDEsMHgzNiwweDQwIH0sCisgIDE2LCAweGIzYTAsIDAsIHsweDBlLDB4ODgsMHgxMywweDI0LDB4MDIsMHhjYSwweDAwLDB4MWUsMHgyMCwweDJjLDB4OGUsMHgwYiwweDJjLDB4MDAsMHhjYiwweDAwIH0sCisgIDE2LCAweGIzYjAsIDAsIHsweDJhLDB4YzAsMHgwZiwweGI4LDB4MDMsMHgyZSwweDA2LDB4Y2IsMHgwMCwweDNhLDB4YzAsMHg0YywweGIwLDB4MTMsMHhhYywweDBjIH0sCisgIDE2LCAweGIzYzAsIDAsIHsweGNiLDB4MDAsMHgzZSwweGM4LDB4MGYsMHhiMCwweDQzLDB4NTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGIzZDAsIDAsIHsweGUwLDB4MDEsMHhiNCwweDA4LDB4ZmYsMHg5MSwweDMzLDB4NDAsMHgwOSwweGRjLDB4MDEsMHhmNCwweDIwLDB4N2UsMHgwMiwweDJlIH0sCisgIDE2LCAweGIzZTAsIDAsIHsweDQwLDB4MGQsMHg5OCwweDAxLDB4YmMsMHg4MCwweGVmLDB4ODAsMHhiNywweGU0LDB4OGYsMHhmNCwweDBiLDB4ZmUsMHg0MCwweDdmIH0sCisgIDE2LCAweGIzZjAsIDAsIHsweDAwLDB4YjksMHhjMCwweDRlLDB4ZjAsMHgwMywweGZjLDB4MDgsMHhmNywweDAwLDB4MzcsMHhjMCwweDBmLDB4ZTAsMHgwMiwweGI4IH0sCisgIDE2LCAweGI0MDAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YTEsMHg0NCwweGNiLDB4MDIsMHgzMiwweDAwIH0sCisgIDE2LCAweGI0MTAsIDAsIHsweDBkLDB4ODAsMHgwYSwweDZkLDB4MDAsMHhlYiwweDA0LDB4MTAsMHg5MCwweDI4LDB4MjIsMHgwYiwweDJjLDB4YzIsMHhjYiwweDIwIH0sCisgIDE2LCAweGI0MjAsIDAsIHsweDc2LDB4YzAsMHgwZSwweGIxLDB4MDMsMHhlYywweDAxLDB4Y2IsMHgwNiwweDMyLDB4YzEsMHgwYywweDMwLDB4MDMsMHgyYywweDAyIH0sCisgIDE2LCAweGI0MzAsIDAsIHsweGNiLDB4MDAsMHgzZSwweGQwLDB4MGMsMHhiMCwweDAzLDB4MTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI0NDAsIDAsIHsweGM4LDB4MDUsMHgyMSwweDQ4LDB4YWIsMHgwMCwweDIwLDB4MDAsMHgwMCwweDk1LDB4MjMsMHg0YywweDA4LDB4YmIsMHgwMSwweDIyIH0sCisgIDE2LCAweGI0NTAsIDAsIHsweGMwLDB4MDgsMHhiMiwweDAyLDB4MGMsMHgwOCwweDgzLDB4ODgsMHg5MiwweGQ1LDB4MjgsMHgzNCwweDAyLDB4ZWMsMHgwMiwweDhmIH0sCisgIDE2LCAweGI0NjAsIDAsIHsweDIwLDB4MjMsMHhjMCwweDRkLDB4ZjAsMHgwMSwweDdjLDB4MDAsMHhkZiwweDAwLDB4MmUsMHhjMCwweDBkLDB4MzAsMHgwMywweDcyIH0sCisgIDE2LCAweGI0NzAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA1LDB4NDQsMHgwMCwweDgzLDB4MTAsMHgyMCwweDYwIH0sCisgIDE2LCAweGI0ODAsIDAsIHsweDA5LDB4MjUsMHgwMiwweDAwLDB4MDgsMHhhMCwweDAwLDB4NGMsMHgwMCwweDBiLDB4MGMsMHgyMiwweDRmLDB4MTIsMHg5MywweDQwIH0sCisgIDE2LCAweGI0OTAsIDAsIHsweDAwLDB4YzAsMHgwOSwweDNlLDB4MDIsMHhlYywweDAwLDB4YWIsMHg4MCwweGE0LDB4YzAsMHgwOSwweDMwLDB4MjIsMHgyYywweDA4IH0sCisgIDE2LCAweGI0YTAsIDAsIHsweGIzLDB4MDEsMHgwYywweDgxLDB4MDgsMHgzMCwweDAyLDB4MzgsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI0YjAsIDAsIHsweDYwLDB4MDEsMHgxNiwweDA5LDB4YjcsMHg4MCwweDIxLDB4NjQsMHgwOCwweDc4LDB4MDYsMHgxMiwweDAwLDB4YjQsMHg4MiwweDJkIH0sCisgIDE2LCAweGI0YzAsIDAsIHsweGE0LDB4MWIsMHg2OSwweDA2LDB4N2UsMHgwNCwweDE3LDB4OTIsMHgyNSwweGU2LDB4MDksMHg3OCwweDA2LDB4ZGUsMHg4MCwweGE3IH0sCisgIDE2LCAweGI0ZDAsIDAsIHsweDkwLDB4MjUsMHhlMCwweDA5LDB4NzksMHg1MCwweDVlLDB4MDQsMHhiNywweDkyLDB4MmYsMHg2MSwweDA5LDB4YzgsMHgwMiwweDQ4IH0sCisgIDE2LCAweGI0ZTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MjUsMHgwMCwweGMzLDB4MDAsMHhiMCwweDAzIH0sCisgIDE2LCAweGI0ZjAsIDAsIHsweDBkLDB4YTMsMHg0MiwweDA5LDB4NDAsMHhlMSwweDAwLDB4YmMsMHg0MCwweDBmLDB4MTEsMHgwMywweDRjLDB4MDAsMHgxMywweDAwIH0sCisgIDE2LCAweGI1MDAsIDAsIHsweDIwLDB4YzAsMHgwOSwweDMyLDB4MDMsMHhjYywweDEwLDB4YTMsMHgwMCwweDI2LDB4YzQsMHg4ZCwweDMwLDB4MmIsMHgwYywweDgwIH0sCisgIDE2LCAweGI1MTAsIDAsIHsweGYzLDB4MDAsMHg3YywweDgwLDB4MGMsMHgzMCwweDAxLDB4MTIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI1MjAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZTcsMHgxMCwweDNkLDB4MDEsMHgyZiwweGYxLDB4NDIsMHhlOCwweDAwLDB4ZjUsMHg5MCwweDAzIH0sCisgIDE2LCAweGI1MzAsIDAsIHsweGMxLDB4MGMsMHhmMSwweDQzLDB4OWMsMHgwNCwweGVmLDB4MDgsMHgzYiwweGMyLDB4MGMsMHhmMCwweDgxLDB4ZGMsMHhhMCwweGRmIH0sCisgIDE2LCAweGI1NDAsIDAsIHsweDAwLDB4M2IsMHhjMywweDNmLDB4ZjAsMHg4MywweGZjLDB4MDUsMHhkZiwweDBjLDB4M2QsMHg0MCwweDBmLDB4ZDEsMHgwMywweGQwIH0sCisgIDE2LCAweGI1NTAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZjQsMHgwMCwweGNiLDB4ODAsMHgzMCwweDQwIH0sCisgIDE2LCAweGI1NjAsIDAsIHsweDJjLDB4YTAsMHgwMywweGUwLDB4MDAsMHhmOCwweDgwLDB4MzIsMHhjMCwweDJlLDB4YjgsMHgwYiwweDJjLDB4NDYsMHhkMywweDAwIH0sCisgIDE2LCAweGI1NzAsIDAsIHsweDMwLDB4YzAsMHgwYywweDMwLDB4MDMsMHgwYywweDAwLDB4ZGIsMHg0OCwweDMyLDB4YzAsMHgxZiwweGI0LDB4MDMsMHgyYywweDg4IH0sCisgIDE2LCAweGI1ODAsIDAsIHsweGNiLDB4NDgsMHgzMiwweDgwLDB4MGMsMHgzMCwweDEzLDB4MmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI1OTAsIDAsIHsweDQ4LDB4MTEsMHhiNCwweDAwLDB4ODcsMHgwMSwweDIxLDB4NDAsMHgwOCwweDcwLDB4NDIsMHhkMCwweDA4LDB4YjQsMHgwMCwweDI5IH0sCisgIDE2LCAweGI1YTAsIDAsIHsweGMwLDB4MDgsMHg3MCwweDAyLDB4MWMsMHgwMCwweDg3LDB4MDAsMHgyMSwweGM4LDB4MGMsMHg3MiwweDBhLDB4MWMsMHg4NCwweDhmIH0sCisgIDE2LCAweGI1YjAsIDAsIHsweDQwLDB4MDksMHhjNCwweDhmLDB4NzMsMHgxMiwweDljLDB4NDAsMHg4MywweDIwLDB4MjEsMHhjMCwweDA4LDB4NjAsMHgwMiwweDkyIH0sCisgIDE2LCAweGI1YzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4OTYsMHgwMSwweGFmLDB4ODAsMHgyMSwweDIwIH0sCisgIDE2LCAweGI1ZDAsIDAsIHsweDA4LDB4NjgsMHgwMiwweGRhLDB4MDAsMHhiZCwweDgwLDB4MjEsMHhlMCwweDA5LDB4NzgsMHgwMiwweDFlLDB4MDAsMHg4ZiwweDg4IH0sCisgIDE2LCAweGI1ZTAsIDAsIHsweDgzLDB4ZTIsMHgyOSwweGY4LDB4ODIsMHg1ZiwweDgwLDB4ODcsMHhhMCwweDI1LDB4ZTAsMHgwYiwweDNhLDB4MTIsMHgwZSwweDUwIH0sCisgIDE2LCAweGI1ZjAsIDAsIHsweDk3LDB4YTQsMHgyMSwweGEwLDB4MjksMHg3OCwweDAyLDB4MzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI2MDAsIDAsIHsweDA4LDB4MTQsMHhjYywweDAyLDB4YTEsMHg4MSwweDAwLDB4MDAsMHg0OCwweDcwLDB4MDIsMHhjOCwweDAwLDB4YjEsMHgwMCwweDJjIH0sCisgIDE2LCAweGI2MTAsIDAsIHsweGY4LDB4MDksMHgzMSwweDQyLDB4MGMsMHgxMCwweDgzLDB4MDAsMHgyMCwweGUwLDB4MDgsMHgzOCwweDEyLDB4NGUsMHgwMCwweDgzIH0sCisgIDE2LCAweGI2MjAsIDAsIHsweDAwLDB4NmEsMHhjMCwweDBiLDB4MzAsMHgwMiwweDhjLDB4MDQsMHg5MywweDAwLDB4MjAsMHhlMCwweDA5LDB4MzgsMHgwMiwweDkyIH0sCisgIDE2LCAweGI2MzAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDE1LDB4YjksMHg0MCwweGVlLDB4MjAsMHgzMCwweDgwIH0sCisgIDE2LCAweGI2NDAsIDAsIHsweDBjLDB4YTAsMHgwMywweGU4LDB4MDAsMHhmYSwweDAwLDB4MzMsMHhiMCwweDBkLDB4ZTQsMHgwMywweDMyLDB4ODgsMHhjYywweDgwIH0sCisgIDE2LCAweGI2NTAsIDAsIHsweDIzLDB4MDAsMHgwZCwweGMwLDB4MDMsMHg2MiwweDAyLDB4Y2EsMHgwMCwweDM2LDB4ODAsMHgwZiwweGEwLDB4NDMsMHgyOCwweDA2IH0sCisgIDE2LCAweGI2NjAsIDAsIHsweGRhLDB4MDAsMHgzMywweGEwLDB4MGQsMHg2YSwweDAzLDB4M2EsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI2NzAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4OTgsMHgwMSwweGJlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhmMCwweDAwLDB4YmMsMHgwMCwweDM4IH0sCisgIDE2LCAweGI2ODAsIDAsIHsweDA0LDB4MDgsMHg4MCwweGEzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDEzLDB4YTAsMHgwMCwweGUwIH0sCisgIDE2LCAweGI2OTAsIDAsIHsweDAwLDB4M2UsMHgwMCwweDBlLDB4MDAsMHgwMywweGMwLDB4MDAsMHhlOCwweDAwLDB4YmUsMHgwNCwweDRlLDB4ODAsMHgwNywweGQyIH0sCisgIDE2LCAweGI2YTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHg4MCwweGM5LDB4MDAsMHgzZSwweDY4IH0sCisgIDE2LCAweGI2YjAsIDAsIHsweDBjLDB4OTAsMHgwMywweDY0LDB4MDAsMHhjOSwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHg0MywweGUwLDB4MDAsMHhjOCwweDAwIH0sCisgIDE2LCAweGI2YzAsIDAsIHsweDMyLDB4MDAsMHgwYywweDgwLDB4MTMsMHgyMCwweDAwLDB4YzksMHgwMCwweDM2LDB4NDAsMHgwYywweDkwLDB4MDMsMHg2NCwweDAwIH0sCisgIDE2LCAweGI2ZDAsIDAsIHsweDgxLDB4MDAsMHgzMiwweDQwLDB4MDQsMHg5MCwweDEzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI2ZTAsIDAsIHsweDgwLDB4MDQsMHg2NSwweDA2LDB4ODksMHg0MCwweDJlLDB4NjAsMHgxYSwweDE0LDB4MmEsMHgwNSwweDIwLDB4ODksMHgwMCwweDJlIH0sCisgIDE2LCAweGI2ZjAsIDAsIHsweDQwLDB4MDgsMHg5MCwweDAyLDB4YzQsMHgwOCwweGMxLDB4MDIsMHgyMCwweDQwLDB4MDgsMHgxMCwweDFhLDB4MjQsMHgwMCwweDg5IH0sCisgIDE2LCAweGI3MDAsIDAsIHsweDEwLDB4MzIsMHg0MSwweDA4LDB4OTAsMHgxMiwweDI0LDB4MDAsMHg4OSwweDA0LDB4MzYsMHg0MCwweDg4LDB4OTQsMHgwYSwweDIwIH0sCisgIDE2LCAweGI3MTAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4MDQsMHgyMCwweDg5LDB4NTUsMHgyZSwweDQwIH0sCisgIDE2LCAweGI3MjAsIDAsIHsweDA4LDB4ZDUsMHgwMiwweDM0LDB4MDAsMHg4ZCwweDAwLDB4MmUsMHg0MCwweDE4LDB4OTAsMHgwMiwweGU0LDB4MDAsMHg5OSwweDAwIH0sCisgIDE2LCAweGI3MzAsIDAsIHsweDI2LDB4NDAsMHgwOCwweDkwLDB4MDIsMHgwNCwweDBhLDB4ODksMHgwMCwweDI2LDB4NDAsMHgzOCwweDkwLDB4MGEsMHgyNCwweDAwIH0sCisgIDE2LCAweGI3NDAsIDAsIHsweGE5LDB4MDAsMHgyMCwweDQwLDB4MGEsMHg5MCwweDgyLDB4MDYsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI3NTAsIDAsIHsweDA4LDB4MDQsMHgwNSwweDAwLDB4ODEsMHgwMCwweDJmLDB4NDAsMHgwYSwweGQ0LDB4MDIsMHgzNCwweDAwLDB4ODUsMHgwMSwweDJjIH0sCisgIDE2LCAweGI3NjAsIDAsIHsweDQwLDB4MDgsMHgxMCwweDQyLDB4ZTQsMHgwNiwweDk5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHgxMCwweDAyLDB4MDUsMHgwMCwweDgxIH0sCisgIDE2LCAweGI3NzAsIDAsIHsweDQwLDB4MjgsMHg1MCwweDA4LDB4MTQsMHgxMiwweDA1LDB4MDAsMHhhMSwweDQwLDB4MjQsMHg1MCwweDVhLDB4MTAsMHgwMiwweDAyIH0sCisgIDE2LCAweGI3ODAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBkLDB4NjAsMHgwMCwweGM4LDB4MDQsMHgzZSwweDAwIH0sCisgIDE2LCAweGI3OTAsIDAsIHsweDA4LDB4ODAsMHgwMywweDIxLDB4NDIsMHhjYywweDAwLDB4M2UsMHgwMCwweDJjLDB4ODAsMHgwMiwweGUwLDB4MDAsMHhkOCwweDAwIH0sCisgIDE2LCAweGI3YTAsIDAsIHsweGI2LDB4MDAsMHgyYywweDgwLDB4MDIsMHgyMCwweDAyLDB4YzgsMHgwMCwweDM2LDB4MDAsMHgwYywweDgwLDB4MDMsMHg2MCwweDAyIH0sCisgIDE2LCAweGI3YjAsIDAsIHsweGU4LDB4MDAsMHgzMiwweDAwLDB4OGUsMHg4MCwweDAzLDB4MmUsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI3YzAsIDAsIHsweDk4LDB4MWQsMHhmNSwweDAwLDB4ZjUsMHgwMCwweDNlLDB4NDAsMHg4NywweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjEsMHgwMCwweDNkIH0sCisgIDE2LCAweGI3ZDAsIDAsIHsweDUwLDB4MGYsMHg1NCwweDAzLDB4ZDEsMHgwMCwweGVjLDB4NDAsMHgzZiwweDEwLDB4MGIsMHhjNCwweDQzLDB4ZjEsMHgwMCwweGY5IH0sCisgIDE2LCAweGI3ZTAsIDAsIHsweDQwLDB4MzYsMHg1MCwweDBmLDB4OTQsMHgxMywweGU1LDB4MTAsMHhkOSwweDQ0LDB4M2QsMHg0MCwweDJkLDB4ZDAsMHgwMywweGU2IH0sCisgIDE2LCAweGI3ZjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZjYsMHg2MCwweGNkLDB4MDIsMHgzYiwweDQwIH0sCisgIDE2LCAweGI4MDAsIDAsIHsweDBjLDB4ZDAsMHgwMywweGI0LDB4NDAsMHhmZCwweDA2LDB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMywweDY2LDB4MDQsMHhjOSwweDgyIH0sCisgIDE2LCAweGI4MTAsIDAsIHsweGI2LDB4NjIsMHgwZiwweDE4LDB4MGIsMHgzNiwweDAwLDB4Y2QsMHg0MCwweDMyLDB4NjEsMHgwYywweDkwLDB4MjMsMHgyNCwweDBhIH0sCisgIDE2LCAweGI4MjAsIDAsIHsweGM5LDB4MDAsMHgzMiwweDQwLDB4NGMsMHhkMCwweDQzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI4MzAsIDAsIHsweDM5LDB4MTAsMHhlMywweDgwLDB4ZDgsMHgwMCwweDIyLDB4MDAsMHgwZCwweDgwLDB4MDIsMHgyMiwweDk0LDB4YjgsMHgwMCwweDJlIH0sCisgIDE2LCAweGI4NDAsIDAsIHsweDAwLDB4MGQsMHg4MCwweDAzLDB4MjEsMHgwMCwweDg4LDB4NDAsMHgyMiwweDAwLDB4MGIsMHhjNCwweDIyLDB4MjEsMHg1MCwweDg4IH0sCisgIDE2LCAweGI4NTAsIDAsIHsweDgwLDB4MjIsMHgyMiwweDA4LDB4ODAsMHgwMiwweDIwLDB4MTAsMHg4MCwweDAxLDB4MmEsMHgwMCwweDBhLDB4ODAsMHgwMywweDRlIH0sCisgIDE2LCAweGI4NjAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4YzYsMHgwMCwweDg5LDB4MDAsMHgyYSwweDQwIH0sCisgIDE2LCAweGI4NzAsIDAsIHsweDg4LDB4MTAsMHgwYSwweDg0LDB4MDgsMHhiMSwweDAwLDB4MjksMHg0MCwweDBhLDB4NzAsMHgwYSwweGI1LDB4MDAsMHg4ZiwweDQwIH0sCisgIDE2LCAweGI4ODAsIDAsIHsweDI5LDB4YzAsMHgwYiwweGY0LDB4MDIsMHgyNCwweDAwLDB4ODEsMHgyMCwweDI4LDB4NDQsMHg4OSwweDEwLDB4MDIsMHgwNCwweDA0IH0sCisgIDE2LCAweGI4OTAsIDAsIHsweDgxLDB4MDIsMHgyYSwweDQwLDB4MDgsMHgxMCwweDAyLDB4MDIsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI4YTAsIDAsIHsweDE4LDB4MTUsMHhhNiwweDAwLDB4OTksMHgyMCwweDIyLDB4NDAsMHgwOSwweDkwLDB4MTIsMHgyNCwweDgwLDB4YjksMHgwMCwweDJmIH0sCisgIDE2LCAweGI4YjAsIDAsIHsweDQ0LDB4MDMsMHhkMCwweDAyLDB4ZjQsMHgwMCwweDhkLDB4MDAsMHgyYiwweDQxLDB4MGIsMHhkMCwweDAyLDB4MjYsMHgxMCwweDg5IH0sCisgIDE2LCAweGI4YzAsIDAsIHsweDA0LDB4MmEsMHg0MCwweDA5LDB4OTAsMHg2ZSwweDI0LDB4MDAsMHg4OSwweDAwLDB4MmEsMHg0MCwweDBhLDB4OTQsMHgwMiwweDQ2IH0sCisgIDE2LCAweGI4ZDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMiwweDE1LDB4ZTYsMHgwMCwweGM5LDB4MDAsMHgzOCwweDQyIH0sCisgIDE2LCAweGI4ZTAsIDAsIHsweDBjLDB4MTAsMHgxMywweGE2LDB4MDQsMHg3OSwweDA4LDB4M2EsMHg3OCwweDA2LDB4OTIsMHgwMywweGE0LDB4MDgsMHhjOSwweDAwIH0sCisgIDE2LCAweGI4ZjAsIDAsIHsweDNhLDB4NjAsMHg4ZiwweDk4LDB4MjMsMHgwNiwweDAyLDB4YzksMHgwMiwweDNhLDB4NDAsMHgwZCwweDkwLDB4MDMsMHgwNCwweDAwIH0sCisgIDE2LCAweGI5MDAsIDAsIHsweGM5LDB4MDAsMHgzOCwweDQwLDB4MGMsMHg5MCwweDAzLDB4MjgsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI5MTAsIDAsIHsweDI4LDB4MDEsMHg4NCwweDEwLDB4ZjksMHg4MCwweGJlLDB4NDAsMHg0ZiwweDkwLDB4MDIsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNjIH0sCisgIDE2LCAweGI5MjAsIDAsIHsweDYwLDB4OGQsMHg5MiwweDAzLDB4MjQsMHg0MiwweGU5LDB4MTAsMHgzMiwweDUwLDB4MGYsMHg5NCwweDAzLDB4ZTQsMHgwMCwweGY5IH0sCisgIDE2LCAweGI5MzAsIDAsIHsweDAwLDB4YjYsMHg0MSwweDJlLDB4MTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4MmUsMHg0MCwweDBmLDB4OTAsMHgwMywweGNhIH0sCisgIDE2LCAweGI5NDAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwOCwweGM4LDB4MDAsMHgzZSwweDEwIH0sCisgIDE2LCAweGI5NTAsIDAsIHsweDBmLDB4ODgsMHgwMywweDIwLDB4MDgsMHhmOCwweGMwLDB4MWUsMHgxMCwweDJjLDB4NDAsMHgwMywweGYyLDB4MDAsMHhjYywweDAwIH0sCisgIDE2LCAweGI5NjAsIDAsIHsweDNmLDB4MDAsMHgwYywweGMwLDB4MTMsMHgyMCwweDAyLDB4YzAsMHgwMCwweDMwLDB4MDAsMHgwYywweDgwLDB4MmIsMHgyMCwweDEwIH0sCisgIDE2LCAweGI5NzAsIDAsIHsweGMwLDB4MDQsMHgzMiwweDAwLDB4MGYsMHg4MCwweDAzLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI5ODAsIDAsIHsweGE4LDB4MDUsMHgzYSwweDgwLDB4ODYsMHhlMCwweDJmLDB4YTAsMHgxYiwweGUwLDB4MDIsMHgzYSwweDgwLDB4YmEsMHgwNCwweDJlIH0sCisgIDE2LCAweGI5OTAsIDAsIHsweDgwLDB4MDgsMHhhMCwweDAzLDB4ODgsMHgwOCwweGMyLDB4MDAsMHgyZSwweDgxLDB4MDgsMHg2MCwweDAyLDB4MjgsMHgxMCwweDhlIH0sCisgIDE2LCAweGI5YTAsIDAsIHsweDgxLDB4MDMsMHg4MCwweDA4LDB4ZTAsMHgwMSwweDc4LDB4MDAsMHg4ZSwweDA0LDB4MDMsMHg4MCwweDA5LDB4NjgsMHgwMywweGNhIH0sCisgIDE2LCAweGI5YjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDA1LDB4NGMsMHgwMCwweDgzLDB4NjAsMHgyYywweDQ0IH0sCisgIDE2LCAweGI5YzAsIDAsIHsweDBiLDB4MzgsMHgwMiwweDBmLDB4ODAsMHhiMSwweDAwLDB4MmMsMHhlNSwweDAzLDB4MzAsMHgxMCwweGNjLDB4MTAsMHg4MywweDAwIH0sCisgIDE2LCAweGI5ZDAsIDAsIHsweDBjLDB4YzAsMHgyOSwweDMwLDB4MjIsMHgwNCwweDA5LDB4OTEsMHgxMCwweDI0LDB4YzAsMHhjOCwweDMwLDB4MDAsMHg0YywweDA0IH0sCisgIDE2LCAweGI5ZTAsIDAsIHsweDkzLDB4MDIsMHgyNCwweGMwLDB4MGIsMHgzMSwweDAyLDB4MGEsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGI5ZjAsIDAsIHsweGUwLDB4MDEsMHgxOCwweDgwLDB4ODcsMHgwMCwweDJkLDB4NDAsMHgwYiwweDc0LDB4NDIsMHgxYywweDAxLDB4YjUsMHgwMSwweDJjIH0sCisgIDE2LCAweGJhMDAsIDAsIHsweGMwLDB4MGIsMHg2MCwweDAyLDB4YjAsMHgwMCwweDk0LDB4MDQsMHgyZiwweDIwLDB4MDksMHhjMCwweDAyLDB4MTQsMHg5MCwweDk3IH0sCisgIDE2LCAweGJhMTAsIDAsIHsweDAwLDB4MjUsMHhjOCwweDA4LDB4NzAsMHgwMiwweDRjLDB4ODAsMHg5NywweDIwLDB4MjUsMHhjMCwweDA5LDB4NzAsMHgwMiwweGU4IH0sCisgIDE2LCAweGJhMjAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA4LDB4M2EsMHg4MiwweGM2LDB4ODAsMHgyZCwweDYwIH0sCisgIDE2LCAweGJhMzAsIDAsIHsweDBiLDB4ZjgsMHgwYiwweDFhLDB4MDAsMHhmNSwweDgwLDB4M2QsMHhlMCwweDhmLDB4NzgsMHgwMywweGRlLDB4MDIsMHhjNywweDgwIH0sCisgIDE2LCAweGJhNDAsIDAsIHsweDJkLDB4ZTAsMHgwZCwweDc4LDB4MGIsMHgxNywweDAyLDB4ZGYsMHg4MCwweDI0LDB4ZjgsMHgyYywweGZkLDB4MDMsMHg1ZSwweDBjIH0sCisgIDE2LCAweGJhNTAsIDAsIHsweGQ3LDB4ZTAsMHgzNSwweGUwLDB4MGYsMHg2OCwweDAzLDB4MmEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJhNjAsIDAsIHsweDQ4LDB4MWQsMHhhZSwweDQwLDB4ZmEsMHgwNCwweDNlLDB4NDAsMHgwZiwweDgwLDB4MTMsMHhlYywweDA0LDB4ZjksMHgwMCwweDNlIH0sCisgIDE2LCAweGJhNzAsIDAsIHsweGMxLDB4MGMsMHhhMCwweDEzLDB4YzAsMHgxMCwweGU4LDB4MDAsMHgzYywweDAwLDB4NGUsMHg4MCwweDQzLDB4YzQsMHgyMCwweDg5IH0sCisgIDE2LCAweGJhODAsIDAsIHsweDAwLDB4YmEsMHhjMCwweDA3LDB4YjYsMHgyMSwweGVkLDB4MDYsMHhlYiwweDY4LDB4YmEsMHhjYywweDBmLDB4MjAsMHgxMywweGMyIH0sCisgIDE2LCAweGJhOTAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4YmUsMHgwMCwweGM2LDB4ODAsMHgzMSwweDYwIH0sCisgIDE2LCAweGJhYTAsIDAsIHsweDJkLDB4NzgsMHgwYiwweDNlLDB4NDgsMHhlYywweDkyLDB4M2QsMHg2MCwweDBjLDB4NTgsMHgwMywweDVhLDB4NDAsMHhkNSwweDgwIH0sCisgIDE2LCAweGJhYjAsIDAsIHsweDMxLDB4NjEsMHgwYywweDU4LDB4MjMsMHgzNiwweDAwLDB4Y2YsMHg4MiwweDNmLDB4ZTAsMHgwYywweGY4LDB4MDMsMHhmZiwweDYwIH0sCisgIDE2LCAweGJhYzAsIDAsIHsweGNmLDB4OTAsMHgzMywweGYwLDB4MGMsMHg1MiwweDAzLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJhZDAsIDAsIHsweGE4LDB4MTEsMHhiOCwweDg0LDB4ODYsMHgxNCwweGI1LDB4YzAsMHgwOCwweDcwLDB4MDIsMHgxZSwweGMwLDB4YzQsMHgwMCwweDJkIH0sCisgIDE2LCAweGJhZTAsIDAsIHsweDQwLDB4MDgsMHg0MCwweDAyLDB4MTQsMHhkMCwweDg2LDB4MTAsMHgyMSwweDgwLDB4NGMsMHg2MiwweDQyLDB4MzQsMHg0MCwweGE1IH0sCisgIDE2LCAweGJhZjAsIDAsIHsweDAwLDB4MzUsMHhjMCwweDI4LDB4NzAsMHg0MiwweGRjLDB4YzIsMHg4ZiwweDMwLDB4MjMsMHhjMCwweDA4LDB4NTAsMHgwMiwweDJhIH0sCisgIDE2LCAweGJiMDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAwLDB4OTgsMHgyOCwweDhlLDB4MDAsMHhhNSwweDQwIH0sCisgIDE2LCAweGJiMTAsIDAsIHsweDA4LDB4ZjEsMHgwMiwweDE4LDB4NjQsMHhiNCwweDAwLDB4NmQsMHg0MiwweDA4LDB4NTAsMHgwMiwweDE4LDB4MDEsMHg4NSwweDA4IH0sCisgIDE2LCAweGJiMjAsIDAsIHsweDIxLDB4NDAsMHgwOSwweDU4LDB4MjIsMHg1NCwweDAwLDB4ODUsMHgxMCwweDJkLDB4YzQsMHgwOSwweDcwLDB4MDIsMHhkYywweDA0IH0sCisgIDE2LCAweGJiMzAsIDAsIHsweDk3LDB4MDAsMHgyNSwweGMwLDB4MDgsMHg0NCwweDAyLDB4MDAsMHgxMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJiNDAsIDAsIHsweDYwLDB4MTQsMHg4YywweDAwLDB4ODIsMHg4MCwweDI0LDB4YzAsMHgwOCwweDgwLDB4MDIsMHgyZCwweDAwLDB4ODAsMHg0YSwweDJjIH0sCisgIDE2LCAweGJiNTAsIDAsIHsweDQyLDB4MDgsMHgwYSwweDQyLDB4MDYsMHgwMCwweDkyLDB4ODQsMHgyMCwweGEwLDB4ODgsMHgyOCwweDQyLDB4NDQsMHgwMCwweGEzIH0sCisgIDE2LCAweGJiNjAsIDAsIHsweDA2LDB4MjQsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MTAsMHg5MywweDA0LDB4MjQsMHhjMSwweDA5LDB4MDAsMHgwMiwweDA4IH0sCisgIDE2LCAweGJiNzAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4YmMsMHgwMCwweGNiLDB4MDAsMHgzNiwweDQwIH0sCisgIDE2LCAweGJiODAsIDAsIHsweDBjLDB4YjQsMHgxMywweDJjLDB4MDAsMHhmOSwweDAwLDB4M2UsMHhhMCwweDBjLDB4YTIsMHgwMywweDA0LDB4MDgsMHhjMiwweDgwIH0sCisgIDE2LCAweGJiOTAsIDAsIHsweDMwLDB4YTgsMHgwZCwweDJhLDB4MDMsMHg1NCwweDAwLDB4Y2IsMHgwMCwweDNmLDB4YzAsMHgwZCwweGYwLDB4MDMsMHhmYywweDA4IH0sCisgIDE2LCAweGJiYTAsIDAsIHsweGRmLDB4MDAsMHgzNywweGQwLDB4MGMsMHhiMCwweDAzLDB4MmEsMHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJiYjAsIDAsIHsweDgwLDB4MDAsMHhlMCwweDAwLDB4ZmIsMHgxMCwweDNhLDB4NDAsMHgwZSwweGIwLDB4MDMsMHhlZCwweDkwLDB4ZjksMHgxMSwweDdlIH0sCisgIDE2LCAweGJiYzAsIDAsIHsweDgwLDB4NGYsMHhiMCwweDUzLDB4ZTgsMHg0MCwweGU5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4YTYsMHgwOCwweGY5IH0sCisgIDE2LCAweGJiZDAsIDAsIHsweDAxLDB4M2EsMHhjMCwweDBjLDB4YjAsMHgxMywweGNjLDB4MDAsMHhlYiwweDAyLDB4M2EsMHhjNiwweDhlLDB4YjgsMHgwMywweGUwIH0sCisgIDE2LCAweGJiZTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZjAsMHgwYywweGNlLDB4MDAsMHgzZiwweGUwIH0sCisgIDE2LCAweGJiZjAsIDAsIHsweDJjLDB4ZjAsMHg4MywweDNhLDB4NDgsMHhjZCwweDAxLDB4MzUsMHg4MCwweDBjLDB4NjAsMHgxMiwweDM0LDB4MGEsMHhjZSwweDAwIH0sCisgIDE2LCAweGJjMDAsIDAsIHsweGIzLDB4ODAsMHgyYywweGUwLDB4MGIsMHg3NCwweDAwLDB4YzksMHgxMCwweGIzLDB4YzEsMHgwZiwweGYwLDB4MWIsMHgzYywweDAwIH0sCisgIDE2LCAweGJjMTAsIDAsIHsweGNmLDB4MDAsMHhiNywweGMwLDB4MmMsMHhlMCwweDAzLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJjMjAsIDAsIHsweDgxLDB4MDQsMHg2ZSwweDEwLDB4ODgsMHg4MCwweDJjLDB4YzAsMHgxOCwweDk4LDB4MDIsMHgyZCwweDgwLDB4ODEsMHgwMCwweDM2IH0sCisgIDE2LCAweGJjMzAsIDAsIHsweDkxLDB4MDgsMHhiMCwweDAzLDB4NjgsMHgwMCwweGM5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCwweDgzIH0sCisgIDE2LCAweGJjNDAsIDAsIHsweDgwLDB4MzYsMHhjMCwweDBiLDB4MzAsMHgwMiwweDJjLDB4MDIsMHg4MywweDAwLDB4MjAsMHhjMCwweDA4LDB4MjAsMHgwMywweDYwIH0sCisgIDE2LCAweGJjNTAsIDAsIHsweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA1LDB4MDYsMHgwMCwweDhhLDB4ODAsMHgyZSwweDQ1IH0sCisgIDE2LCAweGJjNjAsIDAsIHsweDI4LDB4ODgsMHgwMiwweDI0LDB4MDIsMHg4OCwweDAyLDB4MDIsMHgwMiwweDA4LDB4ODAsMHgwMiwweGEyLDB4MDAsMHg5OCwweDAwIH0sCisgIDE2LCAweGJjNzAsIDAsIHsweDIyLDB4MDAsMHgwOCwweDgwLDB4MTIsMHgyNCwweDAwLDB4ODksMHgwMSwweDIyLDB4YzEsMHgwYSwweGIwLDB4MDIsMHg2YywweDAwIH0sCisgIDE2LCAweGJjODAsIDAsIHsweGFiLDB4MDAsMHgyMiwweGMxLDB4MDgsMHg5MCwweDEyLDB4NjAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJjOTAsIDAsIHsweDA4LDB4MDQsMHgwMCwweDAwLDB4ODAsMHgwMCwweDJjLDB4YzAsMHg0OCwweDA4LDB4MTIsMHgwMCwweDgwLDB4ODAsMHgwMiwweDI0IH0sCisgIDE2LCAweGJjYTAsIDAsIHsweDAwLDB4MDgsMHgxOCwweDQyLDB4YWMsMHgwMiwweDhiLDB4ODAsMHgyMiwweGUwLDB4MDgsMHhiOCwweDEyLDB4MDQsMHgwMiwweDgzIH0sCisgIDE2LCAweGJjYjAsIDAsIHsweDAwLDB4MjAsMHhjMCwweDBiLDB4MzAsMHg0MiwweDBjLDB4MDAsMHhhMywweDAxLDB4NjAsMHhjMCwweDQ4LDB4MTAsMHgwMiwweDQyIH0sCisgIDE2LCAweGJjYzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4NjgsMHgwOCwweGNhLDB4MDAsMHgyZSwweDQwIH0sCisgIDE2LCAweGJjZDAsIDAsIHsweDA4LDB4ODAsMHgwMywweDAwLDB4MDAsMHhjOCwweDA2LDB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMiwweGEwLDB4MDAsMHhkOCwweDAwIH0sCisgIDE2LCAweGJjZTAsIDAsIHsweDMyLDB4MDAsMHgwYywweDgwLDB4MDMsMHg3NCwweDAwLDB4Y2IsMHgwMCwweDIyLDB4YzAsMHgwZiwweGYwLDB4MDMsMHgzYywweDAwIH0sCisgIDE2LCAweGJjZjAsIDAsIHsweGVmLDB4MDAsMHgzNywweGMwLDB4MGMsMHg4MCwweDAxLDB4NDAsMHgwMywweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJkMDAsIDAsIHsweGEwLDB4MTksMHhmYywweDAwLDB4ZmMsMHgwNCwweDNmLDB4YzAsMHgwZiwweGMwLDB4MDMsMHhlMSwweDAwLDB4ZmMsMHgwMCwweDNiIH0sCisgIDE2LCAweGJkMTAsIDAsIHsweDAwLDB4MGYsMHhkMCwweDAzLDB4N2MsMHgwMCwweGVmLDB4MDAsMHgyZiwweGMwLDB4MGYsMHhmMCwweDExLDB4ZjQsMHgxMCwweGZkIH0sCisgIDE2LCAweGJkMjAsIDAsIHsweDAyLDB4M2QsMHhjMCwweDRmLDB4ZjAsMHgwMywweGRjLDB4MDAsMHhkZiwweDA0LDB4M2YsMHhjMCwweDBmLDB4YzAsMHg0MywweGU5IH0sCisgIDE2LCAweGJkMzAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDEsMHgwMiwweDcwLDB4MjAsMHhkYywweDEwIH0sCisgIDE2LCAweGJkNDAsIDAsIHsweDY3LDB4MDQsMHgwZCwweGMxLDB4MDIsMHg3MCwweDIwLDB4OWMsMHgxMCwweDM3LDB4MDQsMHgwZCwweGMxLDB4MDYsMHg3MCwweDQwIH0sCisgIDE2LCAweGJkNTAsIDAsIHsweDRjLDB4MTAsMHgzNywweDE0LDB4MTUsMHhjMSwweDAzLDB4NzAsMHg0MCwweGRjLDB4MTAsMHgxMywweDA0LDB4MGQsMHhjMSwweDA3IH0sCisgIDE2LCAweGJkNjAsIDAsIHsweDcwLDB4NDAsMHhkYywweDEwLDB4MzcsMHgwNCwweDBkLDB4YzAsMHgzMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJkNzAsIDAsIHsweDAwLDB4YzUsMHg0NCwweDA1LDB4NzEsMHgyMSwweDVjLDB4NDAsMHg1NywweDEwLDB4MTUsMHhjNCwweDA1LDB4NzEsMHgwNSwweDVjIH0sCisgIDE2LCAweGJkODAsIDAsIHsweDQwLDB4NTcsMHgxMCwweDE1LDB4YzQsMHgwNiwweDcxLDB4MDEsMHg0YywweDQwLDB4NTcsMHgxMCwweDBkLDB4YzQsMHgwNSwweDcxIH0sCisgIDE2LCAweGJkOTAsIDAsIHsweDA1LDB4NWMsMHg0MCwweDUzLDB4MTAsMHgxNSwweGM0LDB4MDcsMHg3MSwweDAxLDB4NWMsMHg0MCwweDU3LDB4MTAsMHgxNSwweGMwIH0sCisgIDE2LCAweGJkYTAsIDAsIHsweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwIH0sCisgIDE2LCAweGJkYjAsIDAsIHsweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwIH0sCisgIDE2LCAweGJkYzAsIDAsIHsweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MiwweDAxIH0sCisgIDE2LCAweGJkZDAsIDAsIHsweDIwLDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJkZTAsIDAsIHsweDAwLDB4ODQsMHgwMCwweDAxLDB4NjAsMHgwMCwweDU4LDB4MDAsMHg1NiwweDAwLDB4MDUsMHg4MCwweDAxLDB4NjAsMHgwNCwweDU4IH0sCisgIDE2LCAweGJkZjAsIDAsIHsweDAwLDB4MTYsMHgwMCwweDA1LDB4ODAsMHgwMSwweDIwLDB4MDEsMHg1OCwweDAwLDB4MTYsMHgwMCwweDA1LDB4ODAsMHgwMSwweDYwIH0sCisgIDE2LCAweGJlMDAsIDAsIHsweDAwLDB4NTgsMHgwMCwweDU2LDB4MDAsMHgwNSwweDgwLDB4MDEsMHg2MCwweDAwLDB4NTgsMHgwMCwweDE2LDB4MDAsMHgwMSwweDgwIH0sCisgIDE2LCAweGJlMTAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDgsMHgwNSwweDcyLDB4MTEsMHg1YywweDgwIH0sCisgIDE2LCAweGJlMjAsIDAsIHsweDE3LDB4MjAsMHgxNSwweGQ4LDB4MDUsMHgzMiwweDExLDB4MWMsMHg4MCwweDQ3LDB4MjAsMHgxNCwweDg4LDB4MDAsMHg3MiwweDAxIH0sCisgIDE2LCAweGJlMzAsIDAsIHsweDFjLDB4ODAsMHg1NywweDIwLDB4MDUsMHhjOCwweDA0LDB4NzIsMHgwMSwweDVjLDB4ODAsMHg1NywweDIwLDB4MTUsMHhjOCwweDAxIH0sCisgIDE2LCAweGJlNDAsIDAsIHsweDcyLDB4MDEsMHg1YywweDgwLDB4NTcsMHgyNCwweDE1LDB4YzAsMHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJlNTAsIDAsIHsweDAwLDB4YzEsMHg0MCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAsMHgwNiwweDAwLDB4MDEsMHg4MCwweDQwLDB4MjAsMHgwMCwweDE4IH0sCisgIDE2LCAweGJlNjAsIDAsIHsweDAwLDB4MDYsMHgwMCwweDAxLDB4OTAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwLDB4MDYsMHgwMCwweDQxLDB4ODAsMHgwMCwweDYwIH0sCisgIDE2LCAweGJlNzAsIDAsIHsweDAwLDB4MTgsMHgwMCwweDA2LDB4MDAsMHgwMSwweDgwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgxMCwweDA2LDB4MDAsMHgwMSwweDgwIH0sCisgIDE2LCAweGJlODAsIDAsIHsweDMxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDgsMHgwNCwweDIyLDB4MDEsMHgwOCwweDgwIH0sCisgIDE2LCAweGJlOTAsIDAsIHsweDAyLDB4MjAsMHgxMCwweDg4LDB4MDQsMHg2MiwweDAxLDB4MDgsMHg4MCwweDQyLDB4MjAsMHgxMCwweDg4LDB4MDAsMHgyMCwweDAxIH0sCisgIDE2LCAweGJlYTAsIDAsIHsweDA4LDB4ODAsMHg0MiwweDIwLDB4MDAsMHg4OCwweDA0LDB4MjIsMHgwMSwweDA4LDB4MDAsMHg0MiwweDIwLDB4MTAsMHg4OCwweDAwIH0sCisgIDE2LCAweGJlYjAsIDAsIHsweDIyLDB4MDEsMHgwOCwweDgwLDB4NDIsMHgzMCwweDEwLDB4ODAsMHgzMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJlYzAsIDAsIHsweDAwLDB4YzUsMHg0YSwweDA1LDB4NDIsMHg4MSwweDUwLDB4YTAsMHgwNCwweDI4LDB4MTUsMHgwYSwweDA1LDB4NTIsMHg4MSwweDEwIH0sCisgIDE2LCAweGJlZDAsIDAsIHsweGEwLDB4NDQsMHgyOCwweDExLDB4MWEsMHgwMCwweDQwLDB4ODAsMHgxMCwweGEwLDB4NTQsMHgyOCwweDA1LDB4MGEsMHgwNSwweDQyIH0sCisgIDE2LCAweGJlZTAsIDAsIHsweDgxLDB4NTEsMHgyMCwweDE0LDB4MjgsMHgxNSwweDBhLDB4MDEsMHg0MiwweDgxLDB4NTAsMHhhMCwweDU0LDB4MjgsMHgxNSwweDAwIH0sCisgIDE2LCAweGJlZjAsIDAsIHsweDMxLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MGMsMHgwMSwweDUzLDB4NDAsMHg1NCwweGMwIH0sCisgIDE2LCAweGJmMDAsIDAsIHsweDE1LDB4MzAsMHgwNSwweDVjLDB4MDEsMHg1NywweDQwLDB4NTQsMHhjMCwweDE1LDB4MzAsMHgwNSwweDVjLDB4MDEsMHg1MywweDAwIH0sCisgIDE2LCAweGJmMTAsIDAsIHsweDU1LDB4YzAsMHgxNSwweDc0LDB4MDUsMHg0YywweDAxLDB4NTMsMHgwMCwweDU1LDB4YzAsMHgxNSwweDc0LDB4MDUsMHg0YywweDAxIH0sCisgIDE2LCAweGJmMjAsIDAsIHsweDUzLDB4MDAsMHg1NCwweGMwLDB4MTEsMHgzMCwweDAxLDB4NDAsMHgyMSwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJmMzAsIDAsIHsweDAwLDB4ODAsMHgwMCwweDAwLDB4NDAsMHgwMCwweDEwLDB4MDAsMHgwNCwweDAwLDB4MDEsMHgwMCwweDAwLDB4NDAsMHgwMCwweDEwIH0sCisgIDE2LCAweGJmNDAsIDAsIHsweDAwLDB4MDQsMHgwMCwweDAxLDB4MDAsMHgwMCwweDQyLDB4MDAsMHgxMCwweDAwLDB4MDQsMHgwMCwweDExLDB4MDAsMHgwMCwweDQwIH0sCisgIDE2LCAweGJmNTAsIDAsIHsweDAwLDB4MTAsMHhjMSwweDA0LDB4MDAsMHgwMSwweDAwLDB4MDAsMHg0MCwweDAwLDB4MTAsMHgwMCwweDAxLDB4MTAsMHgwMSwweDAxIH0sCisgIDE2LCAweGJmNjAsIDAsIHsweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NjAsMHgwMiwweDA4LDB4MDAsMHg4MiwweDAwIH0sCisgIDE2LCAweGJmNzAsIDAsIHsweDIwLDB4ODAsMHgwOCwweDIwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwOCwweDIwLDB4MDIsMHgwOCwweDAwIH0sCisgIDE2LCAweGJmODAsIDAsIHsweDgyLDB4MDAsMHgyMCwweDg0LDB4MDAsMHgyMCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMCwweDg0LDB4MDgsMHgyMCwweDAyIH0sCisgIDE2LCAweGJmOTAsIDAsIHsweDA4LDB4MDAsMHg4MiwweDAwLDB4MjEsMHg4MCwweDA4LDB4MDEsMHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGJmYTAsIDAsIHsweDAwLDB4YzUsMHg0MCwweDA1LDB4NjAsMHgwMSwweDU4LDB4MDAsMHg5NiwweDAwLDB4MTUsMHg5MCwweDA1LDB4NjQsMHgwMiwweDU4IH0sCisgIDE2LCAweGJmYjAsIDAsIHsweDAwLDB4NTYsMHgwMCwweDU1LDB4OTAsMHgwNSwweDYwLDB4MDEsMHhkOSwweDAwLDB4MTYsMHg0MCwweDE1LDB4ODAsMHgwNSwweDYwIH0sCisgIDE2LCAweGJmYzAsIDAsIHsweDAxLDB4NTksMHgwMCwweDc2LDB4NDAsMHgxNSwweDgwLDB4MDUsMHg2MCwweDAxLDB4NTgsMHgwMCwweDU2LDB4MDAsMHgxNSwweDgwIH0sCisgIDE2LCAweGJmZDAsIDAsIHsweDMxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM0LDB4NDAsMHgwMywweDYwLDB4MDAsMHhkOCwweDAwIH0sCisgIDE2LCAweGJmZTAsIDAsIHsweDM2LDB4MDAsMHg0ZCwweDgwLDB4MDMsMHg2MCwweDAwLDB4ZDgsMHgwMCwweDM2LDB4MDAsMHgwZCwweDgwLDB4MDcsMHg2MiwweDAwIH0sCisgIDE2LCAweGJmZjAsIDAsIHsweDU4LDB4MDAsMHgzNiwweDAwLDB4MGQsMHg4MCwweDA3LDB4NjAsMHgwMCwweGQ4LDB4ODAsMHgxNiwweDAwLDB4MGQsMHg4MCwweDAzIH0sCisgIDE2LCAweGMwMDAsIDAsIHsweDYwLDB4MDAsMHhkOCwweDAwLDB4MzYsMHgwMCwweDFkLDB4ODAsMHgzMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMwMTAsIDAsIHsweDAwLDB4YzUsMHg0MiwweDA0LDB4MzAsMHg4MSwweDBjLDB4MjAsMHg0MywweDA4LDB4MTAsMHhjMiwweDA0LDB4MzAsMHg4MSwweDBjIH0sCisgIDE2LCAweGMwMjAsIDAsIHsweDIwLDB4NDMsMHgwOCwweDEwLDB4YzIsMHgwNCwweDMwLDB4YzEsMHgwYywweDIwLDB4NDMsMHgwOCwweDEwLDB4YzIsMHgwNiwweDMwIH0sCisgIDE2LCAweGMwMzAsIDAsIHsweDgxLDB4MGMsMHgyMCwweDQzLDB4MDgsMHgxMCwweGMyLDB4MDQsMHgzMCwweDgxLDB4MGMsMHgyMCwweDQzLDB4MDgsMHgxOCwweGMwIH0sCisgIDE2LCAweGMwNDAsIDAsIHsweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHgwYywweDAwIH0sCisgIDE2LCAweGMwNTAsIDAsIHsweDAzLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgzMCwweDAwLDB4MGMsMHgwMCwweDAzLDB4MDAsMHgwMCwweGMwLDB4NDAsMHgzMCwweDAwIH0sCisgIDE2LCAweGMwNjAsIDAsIHsweDBjLDB4MDAsMHgwMywweDAwLDB4MDAsMHhjMCwweDAwLDB4MzAsMHgwMCwweDBjLDB4MDAsMHgwMywweDAwLDB4MDAsMHhjMCwweDAwIH0sCisgIDE2LCAweGMwNzAsIDAsIHsweDMwLDB4MDAsMHgwYywweDAwLDB4MDMsMHgwMCwweDAwLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMwODAsIDAsIHsweDAwLDB4ODAsMHgwMiwweDAxLDB4MzAsMHg4MCwweDRjLDB4MjAsMHgxMywweDA4LDB4MDQsMHhjMiwweDAxLDB4MzAsMHg4MCwweDRjIH0sCisgIDE2LCAweGMwOTAsIDAsIHsweDIwLDB4MTMsMHgwOCwweDA0LDB4YzIsMHgyNSwweDMwLDB4ODEsMHg0YywweDIwLDB4MTMsMHgwOCwweDA0LDB4YzIsMHgwMSwweDMwIH0sCisgIDE2LCAweGMwYTAsIDAsIHsweDgwLDB4NGMsMHgzMiwweDUzLDB4MDgsMHgwNCwweGMyLDB4MDEsMHgzMCwweDgwLDB4NGMsMHgyMCwweDEzLDB4MDgsMHgwNCwweGMwIH0sCisgIDE2LCAweGMwYjAsIDAsIHsweDIwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDIsMHgwNSwweDYyLDB4ODEsMHg1OCwweDIwIH0sCisgIDE2LCAweGMwYzAsIDAsIHsweDU2LDB4MDgsMHgxNSwweDgyLDB4MDQsMHg2MCwweDgxLDB4NTgsMHgyMCwweDQ2LDB4MDgsMHgxNSwweDgyLDB4MDEsMHg2MCwweGMxIH0sCisgIDE2LCAweGMwZDAsIDAsIHsweDU4LDB4MjAsMHg0NiwweDA4LDB4MTUsMHg4MiwweDAxLDB4NjAsMHg4MSwweDU4LDB4MzAsMHg1NiwweDA4LDB4MTUsMHg4MiwweDA1IH0sCisgIDE2LCAweGMwZTAsIDAsIHsweDYwLDB4ODEsMHg1OCwweDIwLDB4NTYsMHgwOCwweDA1LDB4ODAsMHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMwZjAsIDAsIHsweDAwLDB4YzUsMHg0MiwweDAwLDB4MjAsMHg4MCwweDA4LDB4MjAsMHgwMiwweDA4LDB4MDAsMHg4MiwweDAwLDB4MjAsMHg4MCwweDA4IH0sCisgIDE2LCAweGMxMDAsIDAsIHsweDIwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwYywweDIwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwIH0sCisgIDE2LCAweGMxMTAsIDAsIHsweDgwLDB4MDgsMHgyMCwweDAzLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMCwweDgwLDB4MDgsMHgyMCwweDAyLDB4MDgsMHgwMCwweDgwIH0sCisgIDE2LCAweGMxMjAsIDAsIHsweDIxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDIsMHgwNCwweDY2LDB4ODEsMHgxOCwweDIwIH0sCisgIDE2LCAweGMxMzAsIDAsIHsweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDQsMHg2NCwweDgxLDB4MTgsMHgyMCwweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDAsMHg2MCwweDgxIH0sCisgIDE2LCAweGMxNDAsIDAsIHsweDBjLDB4MjAsMHg0NiwweDA4LDB4MTEsMHg4MiwweDAwLDB4NjAsMHg4MSwweDE5LDB4MjAsMHg0MywweDA4LDB4MTEsMHg4MiwweDA0IH0sCisgIDE2LCAweGMxNTAsIDAsIHsweDYwLDB4ODEsMHgxOSwweDIwLDB4NDYsMHg0OCwweDAxLDB4ODAsMHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMxNjAsIDAsIHsweDAwLDB4YzUsMHg2MCwweDA1LDB4NTgsMHgwMSwweDU2LDB4MDAsMHg1NSwweDgwLDB4MTUsMHg2MCwweDA0LDB4NTgsMHgwMSwweDU2IH0sCisgIDE2LCAweGMxNzAsIDAsIHsweDAwLDB4NDUsMHg4MCwweDExLDB4NjAsMHgwMCwweDU4LDB4MDAsMHgwNiwweDAwLDB4NDUsMHg4MCwweDE1LDB4NjAsMHgwMSwweDU4IH0sCisgIDE2LCAweGMxODAsIDAsIHsweDAxLDB4MTYsMHgwMCwweDAxLDB4ODAsMHgxNSwweDYwLDB4MDUsMHg1OCwweDAxLDB4NTYsMHgwMCwweDU1LDB4ODAsMHgwNSwweDQwIH0sCisgIDE2LCAweGMxOTAsIDAsIHsweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDYsMHgwMSwweDQ5LDB4ODAsMHgxMCwweDYwIH0sCisgIDE2LCAweGMxYTAsIDAsIHsweDE0LDB4MTgsMHgwNSwweDA2LDB4MDEsMHg3OSwweDgwLDB4NTAsMHg2MCwweDE0LDB4MTgsMHgwMSwweDA2LDB4MDEsMHg0MSwweDgwIH0sCisgIDE2LCAweGMxYjAsIDAsIHsweDUwLDB4NjAsMHgwNCwweDE4LDB4MDUsMHgwNiwweDAxLDB4NDEsMHg4MCwweDEwLDB4NjAsMHgxNCwweDE4LDB4MDUsMHgwNiwweDAxIH0sCisgIDE2LCAweGMxYzAsIDAsIHsweDQxLDB4ODAsMHg1MCwweDYwLDB4MTQsMHgxOCwweDA1LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMxZDAsIDAsIHsweDAwLDB4ODAsMHgwMiwweDAxLDB4MDQsMHg4MCwweDQwLDB4MjAsMHgxMCwweDA4LDB4MDQsMHgwMiwweDAwLDB4MDQsMHgwNCwweDQwIH0sCisgIDE2LCAweGMxZTAsIDAsIHsweDIwLDB4MTAsMHgwOCwweDA0LDB4MDIsMHgwMSwweDAwLDB4ODQsMHg0MCwweDIwLDB4MTAsMHgwOCwweDA0LDB4MDIsMHgwMSwweDAwIH0sCisgIDE2LCAweGMxZjAsIDAsIHsweDgwLDB4NDEsMHgyMCwweDEwLDB4MDgsMHgwNCwweDAyLDB4MTEsMHgwMCwweDgwLDB4NDEsMHgyMCwweDEwLDB4NDgsMHgwNCwweDAwIH0sCisgIDE2LCAweGMyMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDYsMHgwMywweDUxLDB4ODAsMHhkNCwweDYwIH0sCisgIDE2LCAweGMyMTAsIDAsIHsweDM1LDB4MTgsMHgwZCwweDQ2LDB4MDIsMHgxMSwweDgwLDB4ZDQsMHg2MCwweDM1LDB4MTgsMHgwZCwweDQ2LDB4MDMsMHgxMSwweDgwIH0sCisgIDE2LCAweGMyMjAsIDAsIHsweGQ0LDB4NjAsMHgzNSwweDE4LDB4MGQsMHg0NiwweDAzLDB4NTEsMHg4MCwweGQ0LDB4NjAsMHgzNSwweDE4LDB4MGQsMHg0NiwweDAzIH0sCisgIDE2LCAweGMyMzAsIDAsIHsweDUxLDB4ODAsMHhkNCwweDYwLDB4MzUsMHgxOCwweDBkLDB4NDAsMHgzMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMyNDAsIDAsIHsweDAwLDB4YzUsMHg0NiwweDA1LDB4NzAsMHg4MSwweDVjLDB4NjAsMHgwNywweDE4LDB4MTUsMHhjNiwweDA0LDB4NzEsMHg4MSwweDFjIH0sCisgIDE2LCAweGMyNTAsIDAsIHsweDYwLDB4MTcsMHgxOCwweDE1LDB4YzYsMHgwNSwweDMxLDB4ODEsMHhkYywweDYwLDB4NTcsMHgxOCwweDE1LDB4YzYsMHgwNSwweDcxIH0sCisgIDE2LCAweGMyNjAsIDAsIHsweDgwLDB4MWMsMHg2MCwweDc3LDB4MTgsMHgxNSwweGNlLDB4MDUsMHg3MSwweDgxLDB4NWMsMHg2MCwweDU3LDB4MTgsMHgxNSwweGMwIH0sCisgIDE2LCAweGMyNzAsIDAsIHsweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4NDYsMHgwMiwweDcxLDB4ODAsMHg5YywweDYxIH0sCisgIDE2LCAweGMyODAsIDAsIHsweDc3LDB4MTgsMHgwZCwweGM2LDB4MDIsMHg3MSwweDgwLDB4OWMsMHg2MCwweDM3LDB4MTgsMHgwZCwweGMyLDB4MDMsMHgzMSwweDgwIH0sCisgIDE2LCAweGMyOTAsIDAsIHsweDVjLDB4NjAsMHgyNywweDE4LDB4MGQsMHhjNiwweDAzLDB4NzEsMHg4MCwweDljLDB4NjAsMHgxNywweDE4LDB4MGQsMHhjZSwweDAzIH0sCisgIDE2LCAweGMyYTAsIDAsIHsweDcxLDB4ODAsMHhkYywweDYwLDB4MzcsMHgxOCwweDBkLDB4YzAsMHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMyYjAsIDAsIHsweDAwLDB4NDUsMHg0NiwweDA1LDB4NzUsMHg4MSwweDVjLDB4NjAsMHg3NywweDE4LDB4MTUsMHhjNiwweDA1LDB4NzUsMHg4MSwweDVjIH0sCisgIDE2LCAweGMyYzAsIDAsIHsweDYwLDB4NTcsMHgxOCwweDE1LDB4YzYsMHgwNSwweDMxLDB4ODEsMHgwYywweDYwLDB4NTcsMHgxOCwweDE1LDB4YzYsMHgwNSwweDcxIH0sCisgIDE2LCAweGMyZDAsIDAsIHsweDgxLDB4NWMsMHg2MCwweDQzLDB4MTgsMHgxNSwweGM2LDB4MDUsMHg3MSwweDgxLDB4NWMsMHg2MCwweDU3LDB4MTgsMHgxNSwweGMwIH0sCisgIDE2LCAweGMyZTAsIDAsIHsweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwIH0sCisgIDE2LCAweGMyZjAsIDAsIHsweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwIH0sCisgIDE2LCAweGMzMDAsIDAsIHsweDVjLDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MDAsMHgxNywweDA4LDB4MDQsMHg4MiwweDAxIH0sCisgIDE2LCAweGMzMTAsIDAsIHsweDIwLDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMzMjAsIDAsIHsweDAwLDB4MDAsMHgwNiwweDAxLDB4NjMsMHg4MCwweDU4LDB4NjAsMHgxNiwweDE4LDB4MDUsMHg4NiwweDAxLDB4NjEsMHg4MCwweDU4IH0sCisgIDE2LCAweGMzMzAsIDAsIHsweDYwLDB4MTYsMHgxOCwweDA1LDB4ODYsMHgwMSwweDYxLDB4ODEsMHg1OCwweDYwLDB4MTYsMHgxOCwweDA1LDB4ODYsMHgwMSwweDYxIH0sCisgIDE2LCAweGMzNDAsIDAsIHsweDgwLDB4NTgsMHg2MCwweDU2LDB4MTgsMHgwNSwweDg2LDB4MDEsMHg2MSwweDgwLDB4NTgsMHg2MCwweDE2LDB4MTgsMHgwNSwweDgwIH0sCisgIDE2LCAweGMzNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ1LDB4NDAsMHgwNSwweDcwLDB4MDEsMHg1YywweDAwIH0sCisgIDE2LCAweGMzNjAsIDAsIHsweDE3LDB4MDAsMHgxNSwweGMwLDB4ODUsMHg3NCwweDAxLDB4MWMsMHgwMCwweDQ3LDB4MDAsMHgxMSwweGMwLDB4MDUsMHg3MCwweDAxIH0sCisgIDE2LCAweGMzNzAsIDAsIHsweDVjLDB4MDAsMHg1MywweDAwLDB4MTAsMHhjMCwweDA1LDB4NzAsMHgwMSwweDVjLDB4MDAsMHg1NywweDAwLDB4MTQsMHhjOSwweDA0IH0sCisgIDE2LCAweGMzODAsIDAsIHsweDcwLDB4MDEsMHgxYywweDAwLDB4NTcsMHgwMCwweDE1LDB4YzAsMHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGMzOTAsIDAsIHsweDAwLDB4NDUsMHg0MiwweDAwLDB4NjAsMHhjMCwweDE4LDB4MjAsMHgwNiwweDA4LDB4MDEsMHg4MiwweDAwLDB4NjAsMHg4MCwweDE4IH0sCisgIDE2LCAweGMzYTAsIDAsIHsweDIwLDB4MDYsMHgwOCwweDAxLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgxOCwweDMwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgxMCwweDYwIH0sCisgIDE2LCAweGMzYjAsIDAsIHsweDgwLDB4MTgsMHgyMCwweDA2LDB4MDgsMHgwMCwweDgyLDB4MDAsMHg2MCwweDgwLDB4MTgsMHgyMCwweDA2LDB4MDgsMHgwMSwweDgwIH0sCisgIDE2LCAweGMzYzAsIDAsIHsweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ0LDB4NDIsMHgwNCwweDIwLDB4ODEsMHgwOCwweDIwIH0sCisgIDE2LCAweGMzZDAsIDAsIHsweDAyLDB4MDgsMHgxMCwweDgyLDB4MDQsMHgyMCwweDgxLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMCwweDgyLDB4MDQsMHgyMCwweDgxIH0sCisgIDE2LCAweGMzZTAsIDAsIHsweDA4LDB4MjAsMHg0NiwweDA4LDB4MTEsMHg4MiwweDA0LDB4MjAsMHg4MSwweDA4LDB4MjAsMHg0MiwweDA4LDB4MTEsMHg4MiwweDA0IH0sCisgIDE2LCAweGMzZjAsIDAsIHsweDIwLDB4ODEsMHgwOCwweDIwLDB4NDIsMHgwOCwweDEwLDB4ODAsMHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM0MDAsIDAsIHsweDAwLDB4NDUsMHg0MiwweDA1LDB4NDAsMHhjNSwweDUwLDB4MjAsMHgxNCwweDA4LDB4MTUsMHgwMCwweDA0LDB4NDAsMHg4MSwweDUwIH0sCisgIDE2LCAweGM0MTAsIDAsIHsweDIwLDB4NTQsMHgwOCwweDExLDB4MDIsMHgwNSwweDAwLDB4ODAsMHgxMCwweDIwLDB4NDUsMHgwYywweDExLDB4NDIsMHgwNCwweDQwIH0sCisgIDE2LCAweGM0MjAsIDAsIHsweDgxLDB4NTAsMHgyMCwweDE0LDB4MGMsMHgxNSwweDQyLDB4MDQsMHg0MCwweDgxLDB4MTAsMHgyMCwweDU0LDB4MDgsMHgxNSwweDAwIH0sCisgIDE2LCAweGM0MzAsIDAsIHsweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDMsMHgwMSwweDUwLDB4YzAsMHg0NCwweDMwIH0sCisgIDE2LCAweGM0NDAsIDAsIHsweDE1LDB4MGMsMHgwNSwweDQzLDB4MDEsMHg1MCwweGMwLDB4NGMsMHgzMCwweDE1LDB4MGMsMHgwNSwweDQzLDB4MjEsMHg1MCwweGMwIH0sCisgIDE2LCAweGM0NTAsIDAsIHsweDU0LDB4MzAsMHgxNSwweDBjLDB4MDUsMHg0MywweDAxLDB4NTAsMHhjMCwweDU0LDB4MzAsMHgxNSwweDBjLDB4MDUsMHg0MywweDAxIH0sCisgIDE2LCAweGM0NjAsIDAsIHsweDUwLDB4YzAsMHg1NCwweDIwLDB4MTUsMHgwYywweDA1LDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM0NzAsIDAsIHsweDAwLDB4MDAsMHgwOCwweDAwLDB4NDIsMHgwMCwweDA0LDB4ODAsMHgwNCwweDIwLDB4MDEsMHgwOCwweDAwLDB4NDIsMHgwMCwweDA0IH0sCisgIDE2LCAweGM0ODAsIDAsIHsweDgwLDB4MDQsMHgyMCwweDAxLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgxMCwweDAwLDB4MDQsMHgwMCwweDAxLDB4MDgsMHgwMCwweDQyIH0sCisgIDE2LCAweGM0OTAsIDAsIHsweDAwLDB4MTAsMHg4MCwweDA0LDB4MDAsMHgwMSwweDA4LDB4MDAsMHg0MiwweDAwLDB4MTAsMHg4MCwweDA0LDB4MjAsMHgwMSwweDAwIH0sCisgIDE2LCAweGM0YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ1LDB4NDIsMHgwMiwweDAwLDB4ODAsMHg4NCwweDIwIH0sCisgIDE2LCAweGM0YjAsIDAsIHsweDIwLDB4MDgsMHgwOCwweDAyLDB4MDIsMHgwMCwweDgwLDB4ODQsMHgyMCwweDIwLDB4MDgsMHgwOCwweDAyLDB4MDIsMHgwMCwweDgwIH0sCisgIDE2LCAweGM0YzAsIDAsIHsweDgwLDB4YTAsMHgyMCwweDI4LDB4MDgsMHgwMiwweDAyLDB4MDAsMHg4MCwweDgwLDB4MjAsMHgyMCwweDI4LDB4MDgsMHgwMiwweDAyIH0sCisgIDE2LCAweGM0ZDAsIDAsIHsweDAwLDB4ODAsMHg4MCwweDIwLDB4MjAsMHgwOCwweDA4LDB4MDAsMHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM0ZTAsIDAsIHsweDAwLDB4NDUsMHg0MCwweDA1LDB4NjAsMHg0MSwweDU4LDB4MDAsMHg1NiwweDAwLDB4MTUsMHg4MCwweDA1LDB4NjAsMHgwMSwweDU4IH0sCisgIDE2LCAweGM0ZjAsIDAsIHsweDAwLDB4NTYsMHgwMCwweDE1LDB4ODAsMHgwNSwweDIwLDB4MDEsMHhkOCwweDAwLDB4NTYsMHgwMCwweDE1LDB4ODAsMHgwNSwweDYwIH0sCisgIDE2LCAweGM1MDAsIDAsIHsweDAxLDB4NTgsMHgwMCwweDc2LDB4MDAsMHgxNSwweDgwLDB4MDUsMHg2MCwweDAxLDB4NTgsMHgwMCwweDU2LDB4MDAsMHgxNSwweDgwIH0sCisgIDE2LCAweGM1MTAsIDAsIHsweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDAsMHgwMywweDYwLDB4MDAsMHhkOCwweDAwIH0sCisgIDE2LCAweGM1MjAsIDAsIHsweDI2LDB4MDAsMHgwZCwweDgwLDB4MDIsMHg2MCwweDAwLDB4ZDgsMHgwMCwweDM2LDB4MDAsMHgwZCwweDgwLDB4MDcsMHg2MCwweDAxIH0sCisgIDE2LCAweGM1MzAsIDAsIHsweDVjLDB4MDAsMHgzNiwweDAwLDB4MGQsMHg4MCwweDAzLDB4NjAsMHgwMCwweGQ4LDB4MDAsMHg1NywweDAwLDB4MGQsMHg4MCwweDAyIH0sCisgIDE2LCAweGM1NDAsIDAsIHsweDYwLDB4MDAsMHg5OCwweDAwLDB4MzYsMHgwMCwweDBkLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM1NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDA0LDB4MzAsMHgyMSwweDBjLDB4MDAsMHg0MywweDAwLDB4MTAsMHhjMCwweDA0LDB4MzAsMHgwMSwweDBjIH0sCisgIDE2LCAweGM1NjAsIDAsIHsweDAwLDB4NDMsMHgwMCwweDEwLDB4YzAsMHgwNCwweDMwLDB4MDEsMHgxOCwweDAwLDB4NDMsMHgwMCwweDEwLDB4YzAsMHgwNCwweDMwIH0sCisgIDE2LCAweGM1NzAsIDAsIHsweDAxLDB4MGMsMHgwMCwweDQ2LDB4MDAsMHgxMCwweGMwLDB4MDQsMHgzMCwweDAxLDB4MGMsMHgwMCwweDQzLDB4MDAsMHgxMCwweGMwIH0sCisgIDE2LCAweGM1ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHgwYywweDAwIH0sCisgIDE2LCAweGM1OTAsIDAsIHsweDAzLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgzNSwweDA4LDB4MGMsMHgwMCwweDAzLDB4MDAsMHgwMCwweGM2LDB4MDAsMHgxNCwweDAwIH0sCisgIDE2LCAweGM1YTAsIDAsIHsweDA4LDB4MDAsMHgwMywweDQwLDB4MDAsMHhjMCwweDAwLDB4MzAsMHgwMCwweDBkLDB4NDAsMHgwMiwweDAwLDB4MDAsMHhjMCwweDAwIH0sCisgIDE2LCAweGM1YjAsIDAsIHsweDMwLDB4MDAsMHgwYywweDAwLDB4MDMsMHgwMCwweDAwLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM1YzAsIDAsIHsweDAwLDB4MDAsMHgwNSwweDAxLDB4MzEsMHg0MCwweDRjLDB4NTAsMHgxMywweDE0LDB4MDQsMHhjNSwweDAxLDB4MzEsMHhjMCwweDRjIH0sCisgIDE2LCAweGM1ZDAsIDAsIHsweDUwLDB4MTMsMHgxNCwweDA0LDB4YzUsMHgwNSwweDMxLDB4NDEsMHg0YywweDUwLDB4MTMsMHgxNCwweDA0LDB4YzUsMHgwMSwweDMxIH0sCisgIDE2LCAweGM1ZTAsIDAsIHsweDQwLDB4NGMsMHg3MCwweDUzLDB4MTQsMHgwNCwweGM1LDB4MDEsMHgzMSwweDQwLDB4NGMsMHg0MCwweDEzLDB4MTQsMHgwNCwweGMwIH0sCisgIDE2LCAweGM1ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjMsMHgwNSwweDY4LDB4YzEsMHg1YSwweDMwIH0sCisgIDE2LCAweGM2MDAsIDAsIHsweDU2LDB4OGMsMHgxNSwweGEzLDB4MDUsMHg2OSwweGMxLDB4NWEsMHgzMCwweDQ2LDB4OGMsMHgxMSwweGE3LDB4MDEsMHg2OCwweGMwIH0sCisgIDE2LCAweGM2MTAsIDAsIHsweDFhLDB4MzAsMHg1NiwweDhjLDB4MTEsMHhhMywweDA0LDB4NjgsMHhjMSwweDFhLDB4MzAsMHgxNiwweDhjLDB4MTUsMHhhMywweDA0IH0sCisgIDE2LCAweGM2MjAsIDAsIHsweDY4LDB4YzEsMHg1YSwweDMwLDB4NTYsMHg4YywweDExLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM2MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAsMHg4MCwweDAwLDB4MjQsMHgwMCwweDA4IH0sCisgIDE2LCAweGM2NDAsIDAsIHsweDAxLDB4MDIsMHgwMCwweDAwLDB4ODAsMHgwMCwweDI0LDB4MDAsMHgwOCwweDgwLDB4MDIsMHg2MCwweDAwLDB4ODAsMHgwMCwweDIwIH0sCisgIDE2LCAweGM2NTAsIDAsIHsweDAwLDB4MDksMHg0MCwweDAyLDB4MjAsMHgwMCwweDgwLDB4MDAsMHgyMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDgwIH0sCisgIDE2LCAweGM2NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHg0NCwweDYyLDB4MTEsMHgxOCwweDg0IH0sCisgIDE2LCAweGM2NzAsIDAsIHsweDQ2LDB4MjEsMHgxMSwweDg4LDB4NDQsMHg2MiwweDA5LDB4MTgsMHg4NCwweDQ2LDB4MjEsMHgxMSwweDg4LDB4NjAsMHg2MiwweDEwIH0sCisgIDE2LCAweGM2ODAsIDAsIHsweDE4LDB4MDQsMHg0NiwweDAxLDB4MTEsMHg4OCwweDQ0LDB4NjIsMHgxMSwweDE4LDB4ODAsMHgwNiwweDAxLDB4MTEsMHg4OCwweDQ0IH0sCisgIDE2LCAweGM2OTAsIDAsIHsweDYyLDB4MTEsMHgxOCwweDg0LDB4NDYsMHgyMSwweDExLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM2YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDQ1LDB4NTAsMHgxMSwweDU0LDB4MDQsMHg1NSwweDAxLDB4MTUsMHg0MCwweDQ0LDB4NTAsMHgxMSwweDU0IH0sCisgIDE2LCAweGM2YjAsIDAsIHsweDA0LDB4NDUsMHgwMSwweDExLDB4NDAsMHg0MCwweDUwLDB4MTAsMHg1NCwweDA0LDB4NDUsMHgwMSwweDE1LDB4NDAsMHg0NCwweDUwIH0sCisgIDE2LCAweGM2YzAsIDAsIHsweDExLDB4MTQsMHgwMCwweDE1LDB4MDEsMHgxNSwweDQwLDB4NDQsMHg1MCwweDExLDB4NTQsMHgwNCwweDU1LDB4MDAsMHgxMSwweDQwIH0sCisgIDE2LCAweGM2ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgyMSwweDQyLDB4MDgsMHg1MCwweDgyIH0sCisgIDE2LCAweGM2ZTAsIDAsIHsweDE0LDB4MjAsMHg4NSwweDA4LDB4MjEsMHg0MiwweDAwLDB4NTAsMHg4MiwweDE0LDB4MjAsMHg4NSwweDA4LDB4MjAsMHg0MiwweDA4IH0sCisgIDE2LCAweGM2ZjAsIDAsIHsweDUwLDB4ODIsMHgxNSwweDIwLDB4MDUsMHg0OCwweDIxLDB4NDIsMHgwOCwweDUwLDB4ODIsMHgxNCwweDIwLDB4ODEsMHg0MCwweDIxIH0sCisgIDE2LCAweGM3MDAsIDAsIHsweDQyLDB4MDgsMHg1MCwweDgyLDB4MTQsMHgyMCwweDg1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM3MTAsIDAsIHsweDAwLDB4MDAsMHgwYSwweDAxLDB4MDIsMHg4MCwweDQwLDB4YTAsMHgxMCwweDI4LDB4MDQsMHgwYSwweDAxLDB4MDIsMHg4NCwweDQwIH0sCisgIDE2LCAweGM3MjAsIDAsIHsweGExLDB4MTAsMHgyOCwweDA0LDB4MGEsMHgwMSwweDAyLDB4ODAsMHg0MCwweGEwLDB4MDAsMHgyOCwweDAwLDB4MGEsMHgwMSwweDAyIH0sCisgIDE2LCAweGM3MzAsIDAsIHsweDgwLDB4NDAsMHhiMCwweDEwLDB4MjgsMHgwMCwweDBhLDB4MDEsMHgwMiwweDgwLDB4NDAsMHhhMCwweDEwLDB4MjgsMHgwNCwweDAwIH0sCisgIDE2LCAweGM3NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwMywweDUzLDB4MDAsMHhkNCwweGMwIH0sCisgIDE2LCAweGM3NTAsIDAsIHsweDM1LDB4MzAsMHgwZCwweDRjLDB4MDMsMHg1MywweDAwLDB4ZDQsMHhjMCwweDM1LDB4MzAsMHgwZCwweDRjLDB4MDMsMHg1MywweDAwIH0sCisgIDE2LCAweGM3NjAsIDAsIHsweGQ0LDB4YzAsMHgyMSwweDMwLDB4MDgsMHg0YywweDAzLDB4NTMsMHgwMCwweGQ0LDB4YzAsMHgzNSwweDMwLDB4MDgsMHg0YywweDAzIH0sCisgIDE2LCAweGM3NzAsIDAsIHsweDUzLDB4MDAsMHhkNCwweGMwLDB4MzUsMHgzMCwweDBkLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM3ODAsIDAsIHsweDAwLDB4MDAsMHgwOCwweDA0LDB4NzAsMHgwMSwweDVjLDB4ODAsMHgwNywweDIwLDB4MjUsMHhjOSwweDA0LDB4NzIsMHgwMSwweDVjIH0sCisgIDE2LCAweGM3OTAsIDAsIHsweDgwLDB4NDcsMHgyMCwweDE1LDB4YzgsMHgwMCwweDcyLDB4MDUsMHhkYywweDgwLDB4NTcsMHgyMCwweDE1LDB4YzgsMHgwNSwweDcyIH0sCisgIDE2LCAweGM3YTAsIDAsIHsweDAxLDB4MWMsMHg5MCwweDY3LDB4MjAsMHgxNSwweGM4LDB4MDUsMHg3MiwweDAxLDB4MWMsMHg4MCwweDU3LDB4MjAsMHgxNSwweGMwIH0sCisgIDE2LCAweGM3YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjMsMHgxOCwweDQ4LDB4YzIsMHgxMiwweDMxIH0sCisgIDE2LCAweGM3YzAsIDAsIHsweDg0LDB4OGMsMHg2MSwweDAzLDB4MTgsMHg0MCwweGM4LDB4MTIsMHgzMSwweDg0LDB4OGMsMHg2MSwweDAzLDB4MTgsMHg0OCwweGM0IH0sCisgIDE2LCAweGM3ZDAsIDAsIHsweDEwLDB4MzEsMHg4NCwweDBjLDB4NDEsMHgyMywweDE4LDB4NDgsMHhjNiwweDEwLDB4MzAsMHgwNCwweDBjLDB4NjEsMHgyMywweDE4IH0sCisgIDE2LCAweGM3ZTAsIDAsIHsweDQ4LDB4YzYsMHgxMiwweDMwLDB4ODQsMHg4YywweDIxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM3ZjAsIDAsIHsweDAwLDB4MDAsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzLDB4ZmYsMHhmNCwweGZmLDB4ZmQsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzIH0sCisgIDE2LCAweGM4MDAsIDAsIHsweGZmLDB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMywweGZmLDB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmIH0sCisgIDE2LCAweGM4MTAsIDAsIHsweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhiZCwweDAwIH0sCisgIDE2LCAweGM4MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM4MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM4NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM4NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM4NjAsIDAsIHsweDAwLDB4MDAsMHgyYywweGRiLDB4MGIsMHgzNiwweGMyLDB4Y2QsMHhiMCwweGIzLDB4NmMsMHgyYywweGRiLDB4MDksMHgzNiwweGMyIH0sCisgIDE2LCAweGM4NzAsIDAsIHsweGNkLDB4YjAsMHhiMywweDZjLDB4MmMsMHhkYiwweDBiLDB4MzYsMHhjMiwweGNkLDB4YjAsMHhiMywweDZjLDB4MmMsMHhkYiwweDBiIH0sCisgIDE2LCAweGM4ODAsIDAsIHsweDM2LDB4YzIsMHhjZCwweGIwLDB4YjMsMHg2YywweDJjLDB4ZGIsMHgwYiwweDM2LDB4YzIsMHhjZCwweGIwLDB4YjMsMHgyYywweDAwIH0sCisgIDE2LCAweGM4OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzMsMHgzYywweDRjLDB4Y2YsMHgxMywweDMzIH0sCisgIDE2LCAweGM4YTAsIDAsIHsweGM0LDB4Y2MsMHhmMSwweDMzLDB4M2MsMHg0ZCwweDRlLDB4OTMsMHgzMywweGM0LDB4Y2MsMHhmMSwweDJiLDB4M2MsMHg0YywweGNmIH0sCisgIDE2LCAweGM4YjAsIDAsIHsweDEzLDB4MzMsMHhjNCwweGNjLDB4ZTksMHgzMywweDNjLDB4NGMsMHhjZiwweDEyLDB4YjUsMHhjNCwweGNjLDB4ZjEsMHgzMywweDNjIH0sCisgIDE2LCAweGM4YzAsIDAsIHsweDRjLDB4Y2YsMHgxMywweDMzLDB4YzQsMHhjZCwweDMxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM4ZDAsIDAsIHsweDAwLDB4MDAsMHgzYiwweDdlLDB4NGUsMHhjNywweDkzLDB4YjcsMHhlNCwweGVkLDB4ZjksMHgyMywweDdlLDB4NGUsMHg0NywweDkzIH0sCisgIDE2LCAweGM4ZTAsIDAsIHsweGI3LDB4ZTQsMHhlZCwweGY5LDB4M2YsMHg3ZSwweDRlLDB4ZGUsMHgxMiwweDM3LDB4ZTQsMHg4ZCwweGY5LDB4M2IsMHg3ZSwweDRlIH0sCisgIDE2LCAweGM4ZjAsIDAsIHsweGRmLDB4OTMsMHhmNywweDg0LDB4OGQsMHhmOSwweDNiLDB4N2UsMHg0ZSwweGRmLDB4OTMsMHhiMSwweGU0LDB4ZWQsMHhiOSwweDAwIH0sCisgIDE2LCAweGM5MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMiwweDcwLDB4NDAsMHg5YywweDExIH0sCisgIDE2LCAweGM5MTAsIDAsIHsweDY3LDB4MDQsMHgxOSwweGMzLDB4MDIsMHg3MCwweDQwLDB4OWMsMHgxMCwweDI3LDB4MDQsMHgwOSwweGMxLDB4MDIsMHg3MCwweDQwIH0sCisgIDE2LCAweGM5MjAsIDAsIHsweDFjLDB4MTAsMHgyNywweDE0LDB4MDEsMHhjMSwweDAyLDB4NzAsMHg0MCwweDljLDB4NTAsMHgwNywweDA0LDB4MDksMHhjMSwweDAyIH0sCisgIDE2LCAweGM5MzAsIDAsIHsweDcwLDB4NDAsMHg5YywweDEwLDB4NjcsMHgxNCwweDExLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM5NDAsIDAsIHsweDAwLDB4MDAsMHgwNCwweDA1LDB4NzEsMHgwMSwweDVjLDB4NDAsMHg1NywweDEwLDB4MTUsMHhjNCwweDA1LDB4NzEsMHgwMSwweDVjIH0sCisgIDE2LCAweGM5NTAsIDAsIHsweDQwLDB4NTcsMHgxMCwweDE1LDB4YzYsMHgwNSwweDcxLDB4MDEsMHg1YywweDQwLDB4NTcsMHgxMCwweDEwLDB4YzQsMHgwNSwweDcxIH0sCisgIDE2LCAweGM5NjAsIDAsIHsweDAxLDB4NWMsMHg2NCwweDAzLDB4MTAsMHg1NSwweGM0LDB4MDUsMHg3MSwweDAxLDB4NWMsMHg0MCwweDU3LDB4MTAsMHgxNSwweGMwIH0sCisgIDE2LCAweGM5NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwIH0sCisgIDE2LCAweGM5ODAsIDAsIHsweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMSwweDgwLDB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgwLDB4MDEsMHgyMCwweDgwIH0sCisgIDE2LCAweGM5OTAsIDAsIHsweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDUsMHhjMiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjQsMHgxNywweDA4LDB4MDQsMHg4MiwweDAxIH0sCisgIDE2LCAweGM5YTAsIDAsIHsweDIwLDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGM5YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAsMHg0NiwweDAwLDB4MTEsMHg4NCwweDAwLDB4NjAsMHgwMCwweDE4IH0sCisgIDE2LCAweGM5YzAsIDAsIHsweDAwLDB4MDYsMHgwMCwweDAxLDB4ODAsMHgwMCwweDYwLDB4MDEsMHgxOCwweDAwLDB4MDYsMHgxMCwweDkxLDB4ODAsMHgwMCwweDYwIH0sCisgIDE2LCAweGM5ZDAsIDAsIHsweDAwLDB4MTgsMHg0NiwweDQ2LDB4MTgsMHgwMSwweDgwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgwMCwweDA2LDB4MTAsMHgwMSwweDgwIH0sCisgIDE2LCAweGM5ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNCwweDczLDB4MDEsMHgxYywweDgwIH0sCisgIDE2LCAweGM5ZjAsIDAsIHsweDA3LDB4MjAsMHgwMSwweGM4LDB4MDQsMHg3MiwweDAxLDB4MWMsMHg4MCwweDQ3LDB4MjAsMHgxMSwweGM4LDB4MDQsMHg3MiwweDAxIH0sCisgIDE2LCAweGNhMDAsIDAsIHsweDFjLDB4ODAsMHg0NywweDIyLDB4MTEsMHhjOCwweDA0LDB4NzIsMHgwMSwweDFjLDB4ODAsMHgwNywweDIwLDB4MTEsMHhjOCwweDA0IH0sCisgIDE2LCAweGNhMTAsIDAsIHsweDcyLDB4MDEsMHgxYywweDgwLDB4MDcsMHgyOCwweDExLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNhMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAsMHgwNiwweDAwLDB4MDEsMHg4MCwweDAwLDB4NjAsMHgwMCwweDE4IH0sCisgIDE2LCAweGNhMzAsIDAsIHsweDAwLDB4MDYsMHgwMCwweDAxLDB4ODAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwLDB4MDYsMHgwMCwweDAxLDB4ODAsMHgwMCwweDYwIH0sCisgIDE2LCAweGNhNDAsIDAsIHsweDAwLDB4MTgsMHgwMCwweDQ2LDB4MDQsMHgwMSwweDgwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgwMCwweDA2LDB4MDAsMHgwMSwweDgwIH0sCisgIDE2LCAweGNhNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHgwNCwweDIyLDB4MDEsMHgwOCwweDgwIH0sCisgIDE2LCAweGNhNjAsIDAsIHsweDAyLDB4MjAsMHgwMCwweDkwLDB4MDQsMHgyNywweDgxLDB4MDgsMHg4MCwweDQyLDB4MjAsMHgxMCwweDk4LDB4MDQsMHgyNCwweDAxIH0sCisgIDE2LCAweGNhNzAsIDAsIHsweDA4LDB4ODAsMHg0MiwweDQ4LDB4MTAsMHg4OCwweDA0LDB4MjIsMHgwMSwweDA5LDB4NDAsMHg0MiwweDYwLDB4MTAsMHg4OCwweDA0IH0sCisgIDE2LCAweGNhODAsIDAsIHsweDIyLDB4MDEsMHgwOCwweGMwLDB4MDIsMHg0MCwweDEwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNhOTAsIDAsIHsweDAwLDB4MDAsMHgyYSwweDA0LDB4NGIsMHg4MSwweDEyLDB4YTAsMHgwNCwweGE4LDB4MDEsMHgyYSwweDA0LDB4NGEsMHg4MSwweDEyIH0sCisgIDE2LCAweGNhYTAsIDAsIHsweGEwLDB4NDQsMHhhOCwweDExLDB4MmEsMHgwNCwweDQ4LDB4ODAsMHgxMiwweGEwLDB4NDQsMHg4OCwweDAxLDB4MmEsMHgwNCwweDRhIH0sCisgIDE2LCAweGNhYjAsIDAsIHsweDgxLDB4MTIsMHgyMCwweDA0LDB4YWMsMHgxMSwweDJhLDB4MDQsMHg0YSwweDgxLDB4MTIsMHhiMCwweDQ0LDB4OWMsMHgxMSwweDAwIH0sCisgIDE2LCAweGNhYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweGMwLDB4MGMsMHgwMCwweDUzLDB4MDAsMHgxNCwweGMwIH0sCisgIDE2LCAweGNhZDAsIDAsIHsweDA1LDB4MzAsMHgwMSwweDQ0LDB4MDAsMHg1MywweDAwLDB4MTQsMHhjMCwweDA1LDB4MzAsMHgwNCwweDBjLDB4MDAsMHg1MywweDAwIH0sCisgIDE2LCAweGNhZTAsIDAsIHsweDE0LDB4YzAsMHgwNSwweGIwLDB4MDEsMHg0YywweDAwLDB4NTMsMHgwMCwweDE2LDB4YzAsMHgwMSwweDMwLDB4MDEsMHg0YywweDAwIH0sCisgIDE2LCAweGNhZjAsIDAsIHsweDUzLDB4MDAsMHgxNCwweGMwLDB4MDEsMHgzOCwweDAwLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNiMDAsIDAsIHsweDA4LDB4YzAsMHgwMCwweDEwLDB4NDAsMHgwMCwweDEwLDB4MDAsMHgwNCwweDAwLDB4MDEsMHgxMCwweDAwLDB4NDQsMHg4MCwweDEwIH0sCisgIDE2LCAweGNiMTAsIDAsIHsweDAwLDB4MDQsMHgwMCwweDAxLDB4MTAsMHgwMCwweDQ2LDB4MDAsMHgwMCwweDAwLDB4MDQsMHg2MCwweDAxLDB4MDAsMHgwMCwweDQwIH0sCisgIDE2LCAweGNiMjAsIDAsIHsweDAwLDB4MTEsMHg2MCwweDAyLDB4NDAsMHgwMSwweDAwLDB4MTAsMHg0MCwweDAwLDB4MTAsMHg2MCwweDAxLDB4NTAsMHgxMCwweDQwIH0sCisgIDE2LCAweGNiMzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweGMwLDB4NDAsMHgwMiwweDAwLDB4MDAsMHg4MCwweDAwIH0sCisgIDE2LCAweGNiNDAsIDAsIHsweDIwLDB4MDAsMHgwOCwweDA4LDB4MDIsMHgwMCwweDAwLDB4ODAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwMCwweDAwIH0sCisgIDE2LCAweGNiNTAsIDAsIHsweDgwLDB4MDAsMHgyMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDAyIH0sCisgIDE2LCAweGNiNjAsIDAsIHsweDAwLDB4MDAsMHg4MCwweDAwLDB4MjEsMHgwMCwweDA4LDB4NDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNiNzAsIDAsIHsweDA4LDB4YzAsMHg0MCwweDA0LDB4NjAsMHgwMSwweDE4LDB4MDAsMHg0NiwweDAwLDB4MTEsMHg4MCwweDA0LDB4NjAsMHgwMSwweDE4IH0sCisgIDE2LCAweGNiODAsIDAsIHsweDAwLDB4NDYsMHgwMCwweDExLDB4ODAsMHgwNCwweDYwLDB4MDEsMHhjOCwweDAwLDB4NDYsMHgwMCwweDE5LDB4ODAsMHgwMCwweDYwIH0sCisgIDE2LCAweGNiOTAsIDAsIHsweDAwLDB4MTgsMHgwMCwweDY2LDB4MDAsMHgxMSwweDgwLDB4MDQsMHg2MCwweDAxLDB4MTgsMHgwMCwweDA2LDB4MDAsMHgxMSwweDgwIH0sCisgIDE2LCAweGNiYTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAxLDB4MDAsMHgwMiwweDYwLDB4MDAsMHg5OCwweDAwIH0sCisgIDE2LCAweGNiYjAsIDAsIHsweDI2LDB4MDAsMHgwOSwweDgxLDB4MDIsMHg2MCwweDAxLDB4OTgsMHgwMCwweDI2LDB4MDAsMHgwOSwweDgwLDB4MDYsMHg2MiwweDAwIH0sCisgIDE2LCAweGNiYzAsIDAsIHsweDQ4LDB4MDAsMHgyNiwweDIwLDB4MDEsMHhjMCwweDAyLDB4NjAsMHgwMSwweDk4LDB4MDAsMHgwNywweDAwLDB4MDksMHg4MCwweDAyIH0sCisgIDE2LCAweGNiZDAsIDAsIHsweDYwLDB4MDAsMHg5OCwweDAwLDB4MjYsMHgwMCwweDExLDB4ODIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNiZTAsIDAsIHsweDQwLDB4NDUsMHg0MiwweDA0LDB4MzAsMHg4MSwweDBjLDB4MjAsMHg0MywweDA4LDB4MTAsMHhjMiwweDA0LDB4MzAsMHg4NSwweDhjIH0sCisgIDE2LCAweGNiZjAsIDAsIHsweDIwLDB4NDMsMHgwOCwweDEwLDB4YzIsMHgwNCwweDMwLDB4ODEsMHgwYywweDIwLDB4NDMsMHg0OCwweDExLDB4ODIsMHgwNCwweDMwIH0sCisgIDE2LCAweGNjMDAsIDAsIHsweDgxLDB4OGQsMHgyMCwweDQ2LDB4MDgsMHgxMCwweGMyLDB4MDQsMHgzMCwweDgxLDB4MGMsMHgyMCwweDQzLDB4MGMsMHgxMCwweGMwIH0sCisgIDE2LCAweGNjMTAsIDAsIHsweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA0LDB4MDAsMHgwMCwweDMwLDB4MDAsMHgwYywweDAwIH0sCisgIDE2LCAweGNjMjAsIDAsIHsweDAzLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgxMCwweDAwLDB4MGMsMHgwMCwweDAzLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgzMCwweDAwIH0sCisgIDE2LCAweGNjMzAsIDAsIHsweDA4LDB4MDAsMHgwMywweDAwLDB4MDAsMHg4MCwweDAwLDB4MzAsMHgwMCwweDBjLDB4ODAsMHgwMiwweDAwLDB4MDAsMHhjMCwweDAwIH0sCisgIDE2LCAweGNjNDAsIDAsIHsweDMwLDB4MDAsMHgwYywweDAwLDB4MDMsMHgyMCwweDAwLDB4YzAsMHgxMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNjNTAsIDAsIHsweDQwLDB4MDAsMHgwMiwweDAwLDB4MzAsMHg4MCwweDBjLDB4MjEsMHgwMywweDA4LDB4MDAsMHhjMiwweDAwLDB4MzAsMHg4MCwweDBjIH0sCisgIDE2LCAweGNjNjAsIDAsIHsweDIwLDB4MDMsMHgwOCwweDAwLDB4YzIsMHgwNCwweDMwLDB4YzEsMHgwYywweDIwLDB4MDMsMHgwYywweDEwLDB4YzIsMHgwMCwweDMwIH0sCisgIDE2LCAweGNjNzAsIDAsIHsweDgwLDB4MGMsMHhiMCwweDQzLDB4MDgsMHgwMCwweGMyLDB4MDAsMHgzMCwweDgwLDB4MGMsMHgyMCwweDAzLDB4MjgsMHgxMCwweGMwIH0sCisgIDE2LCAweGNjODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ1LDB4NDIsMHgwNCwweDYwLDB4ODEsMHgxOCwweDIwIH0sCisgIDE2LCAweGNjOTAsIDAsIHsweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDQsMHg2MCwweDgwLDB4MTgsMHgyMCwweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDAsMHg2MCwweDgxIH0sCisgIDE2LCAweGNjYTAsIDAsIHsweDE4LDB4MjAsMHg0NiwweDA4LDB4MTEsMHg4MiwweDA0LDB4NjAsMHg4MCwweDE4LDB4MjAsMHgwNiwweDA4LDB4MTEsMHg4MiwweDA0IH0sCisgIDE2LCAweGNjYjAsIDAsIHsweDYwLDB4ODEsMHgxOCwweDIwLDB4NDYsMHgwYywweDExLDB4YzAsMHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNjYzAsIDAsIHsweDQwLDB4MDEsMHg0MiwweDAwLDB4MjAsMHg4MCwweDA4LDB4MjAsMHgwMiwweDA4LDB4MDAsMHg4MiwweDAwLDB4MjAsMHg4MCwweDA4IH0sCisgIDE2LCAweGNjZDAsIDAsIHsweDIwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwYywweDIwLDB4MDIsMHgwOCwweDAwLDB4YzIsMHgwMCwweDIwIH0sCisgIDE2LCAweGNjZTAsIDAsIHsweDgwLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMCwweDgwLDB4MDgsMHgyMCwweDAyLDB4MDgsMHgwMSwweDgwIH0sCisgIDE2LCAweGNjZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1MCwweDAxLDB4NDIsMHgwNCwweDYwLDB4ODEsMHgxOCwweDIwIH0sCisgIDE2LCAweGNkMDAsIDAsIHsweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDQsMHg2MCwweDgwLDB4MTgsMHgyMCwweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDAsMHg2MCwweGMxIH0sCisgIDE2LCAweGNkMTAsIDAsIHsweDBjLDB4MjAsMHg0NiwweDBjLDB4MTAsMHhjMiwweDA0LDB4NjAsMHg4MCwweDE4LDB4MzAsMHg0MiwweDA4LDB4MTEsMHg4MiwweDA0IH0sCisgIDE2LCAweGNkMjAsIDAsIHsweDYwLDB4ODEsMHgxOCwweDIwLDB4NDYsMHgwOCwweDEwLDB4ODAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNkMzAsIDAsIHsweDQwLDB4NDUsMHg0MCwweDA0LDB4NTAsMHgwMSwweDE0LDB4MDAsMHg0NSwweDAwLDB4MTEsMHg0MCwweDA0LDB4NTAsMHgwMCwweDE0IH0sCisgIDE2LCAweGNkNDAsIDAsIHsweDAwLDB4NDUsMHgwMCwweDExLDB4NDAsMHgwMCwweDUwLDB4MDAsMHgwNCwweDAwLDB4NDUsMHgwMCwweDAwLDB4NDAsMHgwNCwweDUwIH0sCisgIDE2LCAweGNkNTAsIDAsIHsweDAwLDB4MTQsMHgwMCwweDAxLDB4MDAsMHgxMSwweDQwLDB4MDQsMHg1MCwweDAxLDB4MTQsMHgwMCwweDQ1LDB4MDAsMHgwMCwweDQyIH0sCisgIDE2LCAweGNkNjAsIDAsIHsweDAxLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4MDYsMHgwMCwweDQxLDB4ODAsMHgxMCwweDYwIH0sCisgIDE2LCAweGNkNzAsIDAsIHsweDA0LDB4MTgsMHgwMSwweDA2LDB4MDAsMHg0MSwweDgwLDB4MTAsMHg2MCwweDA0LDB4MTgsMHgwMSwweDA2LDB4MDAsMHg0MSwweDgwIH0sCisgIDE2LCAweGNkODAsIDAsIHsweDEwLDB4NjAsMHgwNCwweDE4LDB4MDEsMHgwNiwweDAwLDB4NDEsMHg4MCwweDEwLDB4NjAsMHgwNCwweDE4LDB4MDEsMHgwNiwweDAwIH0sCisgIDE2LCAweGNkOTAsIDAsIHsweDQxLDB4ODAsMHgxMCwweDYwLDB4MDQsMHgxOCwweDAxLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNkYTAsIDAsIHsweDQ4LDB4MDAsMHgwMiwweDAxLDB4MDAsMHg4MCwweDQwLDB4MjEsMHgxMCwweDA4LDB4MDQsMHgwMiwweDAxLDB4MDAsMHg4MCwweDQwIH0sCisgIDE2LCAweGNkYjAsIDAsIHsweDIwLDB4MTAsMHgwOCwweDA0LDB4MDIsMHgwMSwweDAwLDB4ODAsMHg0MCwweDIxLDB4MTAsMHgwOCwweDA0LDB4MDIsMHgwMSwweDAwIH0sCisgIDE2LCAweGNkYzAsIDAsIHsweDgwLDB4NDAsMHgzMCwweDEwLDB4MDgsMHgwNCwweDAyLDB4MTEsMHgwMCwweDg0LDB4NDAsMHgyMCwweDEwLDB4MDgsMHgxNCwweDAwIH0sCisgIDE2LCAweGNkZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ1LDB4NDYsMHgwMywweDUxLDB4ODAsMHhkNCwweDYwIH0sCisgIDE2LCAweGNkZTAsIDAsIHsweDM1LDB4MTgsMHgwZCwweDQ2LDB4MDMsMHg1MSwweDgwLDB4ZDQsMHg2MCwweDM1LDB4MTgsMHgwZCwweDQ2LDB4MDMsMHg1MSwweDgwIH0sCisgIDE2LCAweGNkZjAsIDAsIHsweGQ0LDB4NjAsMHgzNSwweDEwLDB4MGQsMHg0NiwweDAzLDB4NTEsMHg4MCwweGQ0LDB4NDAsMHgzNSwweDE4LDB4MGQsMHg0NiwweDAzIH0sCisgIDE2LCAweGNlMDAsIDAsIHsweDUxLDB4ODAsMHhkNCwweDYwLDB4MzUsMHgxOCwweDBkLDB4NDAsMHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNlMTAsIDAsIHsweDAwLDB4MDEsMHg0NiwweDA0LDB4NzEsMHg4MSwweDFjLDB4NjAsMHgwNywweDE4LDB4MTEsMHhjZSwweDA0LDB4NzEsMHg4MSwweDFjIH0sCisgIDE2LCAweGNlMjAsIDAsIHsweDYwLDB4NDcsMHgxOCwweDAxLDB4YzYsMHgwNCwweDcxLDB4ODEsMHg5YywweDYwLDB4NDcsMHgxOCwweDE5LDB4YzYsMHgwNCwweDcxIH0sCisgIDE2LCAweGNlMzAsIDAsIHsweDgwLDB4MWMsMHg2MCwweDY3LDB4MTgsMHgxMSwweGM2LDB4MDQsMHg3MSwweDgxLDB4MWMsMHg2MCwweDQ3LDB4MTgsMHgxMSwweGMwIH0sCisgIDE2LCAweGNlNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4NDYsMHgwMiwweDcxLDB4ODAsMHg5YywweDYwIH0sCisgIDE2LCAweGNlNTAsIDAsIHsweDI3LDB4MTgsMHgwOSwweGM2LDB4MDYsMHg3MSwweDgwLDB4MWMsMHg2MCwweDI3LDB4MTgsMHgwOSwweGM2LDB4MDEsMHgzMSwweDgwIH0sCisgIDE2LCAweGNlNjAsIDAsIHsweDFjLDB4NjAsMHgwNywweDE4LDB4MDksMHhjNiwweDAyLDB4NzEsMHg4MCwweDljLDB4NjAsMHgwNywweDE4LDB4MDksMHhjNiwweDEyIH0sCisgIDE2LCAweGNlNzAsIDAsIHsweDcxLDB4ODAsMHg5YywweDYwLDB4MzMsMHgxOCwweDAxLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNlODAsIDAsIHsweDUwLDB4NDUsMHg0NiwweDA1LDB4NzEsMHg4MSwweDVjLDB4NjAsMHg1NywweDE4LDB4MTUsMHhjNiwweDA1LDB4NzEsMHg4MCwweDVjIH0sCisgIDE2LCAweGNlOTAsIDAsIHsweDYwLDB4NTcsMHgxOCwweDE1LDB4YzYsMHgwMSwweDMxLDB4ODEsMHgwYywweDYwLDB4MTcsMHgxOCwweDEwLDB4YzYsMHgwNSwweDcxIH0sCisgIDE2LCAweGNlYTAsIDAsIHsweDgxLDB4NWMsMHg2MCwweDAzLDB4MTgsMHgxNSwweGM2LDB4MDUsMHg3MSwweDgxLDB4NWMsMHg2MCwweDUzLDB4MTgsMHgxOCwweDgyIH0sCisgIDE2LCAweGNlYjAsIDAsIHsweDEwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQwLDB4MTIsMHgwMSwweDI0LDB4ODAsMHg0OCwweDIwIH0sCisgIDE2LCAweGNlYzAsIDAsIHsweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyNCwweDgwLDB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgyLDB4MDEsMHgyMCwweDgwIH0sCisgIDE2LCAweGNlZDAsIDAsIHsweDU4LDB4MjAsMHg1MiwweDBjLDB4MDUsMHg4MiwweDAxLDB4MjAsMHg4MCwweDQ5LDB4MjAsMHgwMiwweDA4LDB4MDQsMHg4MiwweDAxIH0sCisgIDE2LCAweGNlZTAsIDAsIHsweDIwLDB4ODAsMHg0OSwweDIwLDB4MTIsMHg0OCwweDA0LDB4ODAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNlZjAsIDAsIHsweDQwLDB4MDQsMHgwNiwweDAwLDB4NjEsMHg4MCwweDE4LDB4NjAsMHgwNiwweDE4LDB4MDEsMHg4NiwweDA0LDB4NjEsMHg4MCwweDE4IH0sCisgIDE2LCAweGNmMDAsIDAsIHsweDYwLDB4MDYsMHgxOCwweDAxLDB4ODYsMHgwMCwweDYxLDB4ODEsMHg0OCwweDYwLDB4MDYsMHgxOCwweDE0LDB4ODYsMHgwMCwweDYxIH0sCisgIDE2LCAweGNmMTAsIDAsIHsweDgwLDB4MTgsMHg2MCwweDQyLDB4MTgsMHgwMSwweDg2LDB4MDAsMHg2MSwweDgwLDB4MTgsMHg2MCwweDA2LDB4MTgsMHgwMCwweDgwIH0sCisgIDE2LCAweGNmMjAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ1LDB4NjAsMHgwNCwweDc4LDB4MDEsMHgxZSwweDAwIH0sCisgIDE2LCAweGNmMzAsIDAsIHsweDQ3LDB4ODAsMHgxMSwweGU4LDB4MDAsMHg3OCwweDAxLDB4MWUsMHgwMCwweDQ3LDB4ODAsMHgxMSwweGUwLDB4MDQsMHg3OCwweDAxIH0sCisgIDE2LCAweGNmNDAsIDAsIHsweDFlLDB4MDAsMHg0MywweDgwLDB4MTEsMHhlMCwweDA0LDB4NzgsMHgwMSwweDFlLDB4MDAsMHgwMywweDgwLDB4MTUsMHhlMCwweDA0IH0sCisgIDE2LCAweGNmNTAsIDAsIHsweDc4LDB4MDEsMHgxZSwweDAwLDB4NDcsMHg4MCwweDExLDB4YzAsMHgxMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNmNjAsIDAsIHsweDQwLDB4MDEsMHgxMiwweDAwLDB4NjQsMHg4MCwweDE4LDB4MjAsMHgwNiwweDA4LDB4MDEsMHg4MiwweDAwLDB4NjQsMHg4MCwweDE4IH0sCisgIDE2LCAweGNmNzAsIDAsIHsweDIwLDB4MDYsMHgwOCwweDAxLDB4ODIsMHgwMCwweDYwLDB4ODAsMHgxOCwweDMwLDB4MDIsMHgwOCwweDAxLDB4ODIsMHgwMCwweDYwIH0sCisgIDE2LCAweGNmODAsIDAsIHsweDgwLDB4MTksMHgzMCwweDQyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHg2MCwweDgwLDB4MTksMHgyMCwweDA2LDB4NDgsMHgwMSwweDgwIH0sCisgIDE2LCAweGNmOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAxLDB4NDIsMHgwNCwweDIwLDB4ODEsMHgwOCwweDIwIH0sCisgIDE2LCAweGNmYTAsIDAsIHsweDQyLDB4MDgsMHgxMCwweDgyLDB4MDAsMHgyMCwweDgxLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMCwweDgyLDB4MDQsMHgyMCwweDgxIH0sCisgIDE2LCAweGNmYjAsIDAsIHsweDA4LDB4MjAsMHg0NiwweDA4LDB4MTAsMHg4MiwweDA0LDB4MjAsMHg4MSwweDA4LDB4MjAsMHg0MiwweDA4LDB4MTEsMHg4MiwweDA0IH0sCisgIDE2LCAweGNmYzAsIDAsIHsweDIwLDB4ODEsMHgwOCwweDIwLDB4NDIsMHgwOCwweDEwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGNmZDAsIDAsIHsweDQwLDB4NDUsMHg0MiwweDA0LDB4NDAsMHg4MSwweDEwLDB4MjAsMHg0NCwweDA4LDB4MTEsMHgwMiwweDAwLDB4NDAsMHg4MSwweDEwIH0sCisgIDE2LCAweGNmZTAsIDAsIHsweDIwLDB4NDQsMHgwOCwweDExLDB4MDIsMHgwNCwweDQwLDB4ODAsMHgxMCwweDIwLDB4NDUsMHgwOCwweDAxLDB4MDIsMHgwNCwweDQwIH0sCisgIDE2LCAweGNmZjAsIDAsIHsweDgxLDB4MTAsMHgyMSwweDAwLDB4MGMsMHgxMSwweDAyLDB4MDQsMHg0MCwweDgxLDB4MTAsMHgyMCwweDQ0LDB4MDgsMHgwMSwweDAwIH0sCisgIDE2LCAweGQwMDAsIDAsIHsweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4MDMsMHgwMCwweDUwLDB4YzAsMHgxNCwweDMwIH0sCisgIDE2LCAweGQwMTAsIDAsIHsweDA1LDB4MGMsMHgwMSwweDQzLDB4MDAsMHg1MCwweGMwLDB4MTQsMHgzMCwweDA1LDB4MGMsMHgwMSwweDQzLDB4MDAsMHg1MCwweGMwIH0sCisgIDE2LCAweGQwMjAsIDAsIHsweDE0LDB4MzAsMHgwNSwweDBjLDB4MDEsMHg0MywweDAwLDB4NTAsMHhjMCwweDE0LDB4MzAsMHgwNSwweDBjLDB4MDEsMHg0MywweDAwIH0sCisgIDE2LCAweGQwMzAsIDAsIHsweDUwLDB4YzAsMHgxNCwweDMwLDB4MDUsMHgwYywweDAxLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQwNDAsIDAsIHsweDQwLDB4MDAsMHgwOCwweDAwLDB4NDIsMHgwNCwweDEwLDB4ODAsMHgwNCwweDIwLDB4MDEsMHgwOSwweDAwLDB4NDIsMHgwMSwweDEwIH0sCisgIDE2LCAweGQwNTAsIDAsIHsweDgwLDB4MDQsMHgyMCwweDAxLDB4MDgsMHgwMCwweDQyLDB4MDAsMHgxMCwweDAwLDB4MDQsMHgyMCwweDAxLDB4MDgsMHgwMCwweDQyIH0sCisgIDE2LCAweGQwNjAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDA0LDB4MDAsMHgwMSwweDA4LDB4MDAsMHg0MiwweDAwLDB4MTAsMHg4MCwweDA0LDB4MjAsMHgxMSwweDAwIH0sCisgIDE2LCAweGQwNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ1LDB4NDIsMHgwMiwweDAwLDB4ODAsMHg4MCwweDIwIH0sCisgIDE2LCAweGQwODAsIDAsIHsweDIwLDB4MDgsMHgwOCwweDAyLDB4MDIsMHgwMCwweDgwLDB4MDAsMHgyMCwweDIwLDB4MDgsMHgwOCwweDAyLDB4MDAsMHgwMCwweDgwIH0sCisgIDE2LCAweGQwOTAsIDAsIHsweDgwLDB4YTAsMHgwMCwweDBhLDB4MDgsMHgwMiwweDAyLDB4MDAsMHg4MCwweDgwLDB4MzQsMHg2MiwweDI4LDB4MDgsMHgwMiwweDAyIH0sCisgIDE2LCAweGQwYTAsIDAsIHsweDAwLDB4ODAsMHg4MCwweDMwLDB4MjAsMHgwYywweDA4LDB4MDAsMHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQwYjAsIDAsIHsweDQwLDB4MDEsMHg0MCwweDA0LDB4NjAsMHgwMSwweDE4LDB4MDAsMHg0NiwweDAwLDB4MTEsMHg4MCwweDA0LDB4NjAsMHgwMywweDE4IH0sCisgIDE2LCAweGQwYzAsIDAsIHsweDAwLDB4NDYsMHgwMCwweDExLDB4ODAsMHgwNiwweDYwLDB4MDEsMHg5OCwweDAwLDB4NDYsMHgwMCwweDExLDB4ODAsMHgwNCwweDYwIH0sCisgIDE2LCAweGQwZDAsIDAsIHsweDAxLDB4MTgsMHgwMCwweDY2LDB4MDAsMHgxMSwweDgwLDB4MDQsMHg2MCwweDAxLDB4MTgsMHgwMCwweDQ2LDB4MDAsMHgxMSwweDgwIH0sCisgIDE2LCAweGQwZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAxLDB4MDAsMHgwMiwweDYwLDB4MDAsMHg5OCwweDAwIH0sCisgIDE2LCAweGQwZjAsIDAsIHsweDI2LDB4MDAsMHgwOSwweDgwLDB4MDIsMHg2NCwweDAwLDB4OTgsMHgwMCwweDI2LDB4MDAsMHgxOSwweDkwLDB4MDIsMHg2MCwweDAwIH0sCisgIDE2LCAweGQxMDAsIDAsIHsweDFkLDB4MDAsMHgyNiwweDAwLDB4MDEsMHhjMCwweDAyLDB4NjAsMHgwMCwweDk5LDB4MDAsMHgwNiwweDQwLDB4MTksMHg4MCwweDAyIH0sCisgIDE2LCAweGQxMTAsIDAsIHsweDYwLDB4MDAsMHg5OCwweDAwLDB4NjYsMHgwMCwweDAxLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQxMjAsIDAsIHsweDQwLDB4NDUsMHg2MCwweDA0LDB4MzgsMHgwMSwweDBlLDB4MDAsMHg0MywweDgwLDB4MTAsMHhlMCwweDA0LDB4MzgsMHgwMSwweDBlIH0sCisgIDE2LCAweGQxMzAsIDAsIHsweDAwLDB4NDMsMHg4MCwweDEwLDB4ZTAsMHgwNCwweDM4LDB4MDEsMHgxYSwweDAwLDB4NDMsMHg4MCwweDExLDB4YTAsMHgwNCwweDM4IH0sCisgIDE2LCAweGQxNDAsIDAsIHsweDAxLDB4MGUsMHgwMCwweDAyLDB4ODAsMHg0MCwweGUwLDB4MDQsMHgzOCwweDAxLDB4MGUsMHgwMCwweDQzLDB4ODAsMHgxOCwweDgwIH0sCisgIDE2LCAweGQxNTAsIDAsIHsweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1MCwweDA0LDB4MDEsMHgwMCwweDMwLDB4NDAsMHgwYywweDEwIH0sCisgIDE2LCAweGQxNjAsIDAsIHsweDAzLDB4MDQsMHgwMCwweGM5LDB4MDAsMHgzMCwweDQwLDB4MGMsMHgxMCwweDAzLDB4MDQsMHgwMCwweGMxLDB4MDAsMHgzMCwweDQwIH0sCisgIDE2LCAweGQxNzAsIDAsIHsweDA4LDB4MTAsMHgwMywweDA0LDB4MDAsMHg4MSwweDAwLDB4MzAsMHg0MCwweDBjLDB4NzgsMHgwMiwweDE0LDB4MDAsMHhjMSwweDAwIH0sCisgIDE2LCAweGQxODAsIDAsIHsweDMwLDB4NDAsMHgwYywweDEwLDB4MDMsMHgwNCwweDAwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQxOTAsIDAsIHsweDQwLDB4MDAsMHgwNSwweDAwLDB4MzEsMHg0MCwweDBjLDB4NTAsMHgwMywweDE0LDB4MDAsMHhjNSwweDAwLDB4MzUsMHg0MCwweDBjIH0sCisgIDE2LCAweGQxYTAsIDAsIHsweDUwLDB4MDMsMHgxNCwweDEwLDB4ZDUsMHgwMCwweDMxLDB4NDEsMHgwZCwweDUwLDB4MDMsMHgxNCwweDEwLDB4YzUsMHgwMCwweDMxIH0sCisgIDE2LCAweGQxYjAsIDAsIHsweDQwLDB4MGQsMHg0OCwweDQzLDB4NTQsMHgxMCwweGM1LDB4MDAsMHgzMSwweDQwLDB4MGMsMHg0MCwweDQzLDB4MTAsMHgwMCwweGMyIH0sCisgIDE2LCAweGQxYzAsIDAsIHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ1LDB4NDMsMHgwNCwweDYwLDB4YzEsMHgxOCwweDMwIH0sCisgIDE2LCAweGQxZDAsIDAsIHsweDQ2LDB4MGMsMHgxMSwweDgzLDB4MDQsMHg2MSwweGMxLDB4MTgsMHgzMCwweDQ2LDB4MGMsMHgwMSwweDg3LDB4MDQsMHg2MCwweGMxIH0sCisgIDE2LCAweGQxZTAsIDAsIHsweDE4LDB4MzAsMHg0NiwweDA4LDB4MTEsMHg4MywweDA0LDB4NjAsMHhjMSwweDE4LDB4MjAsMHgwNiwweDBjLDB4MDEsMHg4MywweDA0IH0sCisgIDE2LCAweGQxZjAsIDAsIHsweDYwLDB4YzEsMHgxOCwweDMwLDB4NDYsMHgwYywweDExLDB4ODAsMHgxMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQyMDAsIDAsIHsweDQwLDB4MDEsMHg0MCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAsMHg4MCwweDAwLDB4MjAsMHgwMCwweDA4IH0sCisgIDE2LCAweGQyMTAsIDAsIHsweDAwLDB4MDIsMHgwMCwweDAwLDB4ODEsMHgwMCwweDIwLDB4MDAsMHgwOCwweDgwLDB4MDIsMHgwMCwweDAwLDB4YzAsMHgwMCwweDIwIH0sCisgIDE2LCAweGQyMjAsIDAsIHsweDAwLDB4MDgsMHg0MCwweDQzLDB4MzAsMHgwMCwweDgwLDB4MDAsMHgyMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDgwIH0sCisgIDE2LCAweGQyMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAxLDB4NDgsMHg0NCwweDYyLDB4MTEsMHgxOCwweDg0IH0sCisgIDE2LCAweGQyNDAsIDAsIHsweDQ2LDB4MjEsMHgxMSwweDg4LDB4NDQsMHg2MywweDAxLDB4MTgsMHg4NCwweDQ2LDB4MjEsMHgwMSwweDg4LDB4MDQsMHg2MiwweDExIH0sCisgIDE2LCAweGQyNTAsIDAsIHsweDE4LDB4MDQsMHg0NiwweDIxLDB4MTAsMHhjOCwweDQ0LDB4NjIsMHgxMSwweDE4LDB4MDUsMHg0MywweDAxLDB4ODEsMHg4OCwweDQ0IH0sCisgIDE2LCAweGQyNjAsIDAsIHsweDYyLDB4MTEsMHgxOCwweDg0LDB4NDYsMHgyMSwweDExLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQyNzAsIDAsIHsweDQwLDB4NDUsMHg0MCwweDA0LDB4NTAsMHgwMSwweDE0LDB4MDQsMHg0NSwweDAxLDB4MTEsMHg0MCwweDQ0LDB4NTAsMHgwMSwweDE0IH0sCisgIDE2LCAweGQyODAsIDAsIHsweDA0LDB4NDUsMHgwMSwweDAxLDB4NDAsMHg0NSwweDAwLDB4MTAsMHgxNCwweDA0LDB4NDUsMHgwMywweDAwLDB4NDAsMHg0NCwweDUwIH0sCisgIDE2LCAweGQyOTAsIDAsIHsweDExLDB4MTQsMHgwNCwweDAxLDB4MDUsMHg0MSwweDQwLDB4NDQsMHg1MCwweDExLDB4MTQsMHgwNCwweDA1LDB4MDEsMHgwMSwweDQwIH0sCisgIDE2LCAweGQyYTAsIDAsIHsweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMCwweDgyIH0sCisgIDE2LCAweGQyYjAsIDAsIHsweDA0LDB4MjAsMHg4MSwweDA4LDB4MDAsMHg0MiwweDAwLDB4MTAsMHg4MiwweDA0LDB4MjAsMHg4MSwweDA4LDB4MDAsMHg0MiwweDA4IH0sCisgIDE2LCAweGQyYzAsIDAsIHsweDEwLDB4ODIsMHgwNSwweDIwLDB4ODEsMHgwOCwweDIwLDB4NDIsMHgwOCwweDEwLDB4OGEsMHgwNSwweDIwLDB4MDUsMHgwOCwweDIwIH0sCisgIDE2LCAweGQyZDAsIDAsIHsweDQyLDB4MDgsMHgxMCwweDgyLDB4MDQsMHgyMiwweDgxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQyZTAsIDAsIHsweDAwLDB4MDAsMHgwYSwweDAxLDB4MDIsMHg4MCwweDQwLDB4YTAsMHgxMCwweDI4LDB4MDQsMHgwMiwweDAxLDB4MDIsMHg4MCwweDQwIH0sCisgIDE2LCAweGQyZjAsIDAsIHsweGEwLDB4MTAsMHgyOCwweDA0LDB4MGEsMHgwMSwweDAyLDB4ODAsMHg0MCwweGEwLDB4MDAsMHgyOSwweDA0LDB4MGEsMHgwMSwweDAyIH0sCisgIDE2LCAweGQzMDAsIDAsIHsweDgwLDB4NDAsMHhhNCwweDAwLDB4MjgsMHgwNCwweDBhLDB4MDEsMHgwMiwweDgwLDB4NDAsMHhhOCwweDEwLDB4MmIsMHgxNCwweDAwIH0sCisgIDE2LCAweGQzMTAsIDAsIHsweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDQ1LDB4NGQsMHgwMywweDUzLDB4NDAsMHhkNCwweGQwIH0sCisgIDE2LCAweGQzMjAsIDAsIHsweDM1LDB4MzQsMHgwZCwweDRkLDB4MDMsMHg1MywweDQwLDB4ZDQsMHhkMCwweDM1LDB4MzQsMHgwZCwweDRkLDB4MDMsMHg1MywweDQwIH0sCisgIDE2LCAweGQzMzAsIDAsIHsweGQ0LDB4ZDAsMHgyMSwweDM0LDB4NGQsMHg0ZCwweDAzLDB4NTMsMHg0MCwweGQ0LDB4ZDksMHg2MSwweDM0LDB4MDQsMHgwZCwweDAzIH0sCisgIDE2LCAweGQzNDAsIDAsIHsweDUzLDB4NDAsMHhjMCwweGQ4LDB4MzUsMHgzNywweDBkLDB4NDAsMHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQzNTAsIDAsIHsweDQwLDB4MDEsMHg0OCwweDA0LDB4NzIsMHgwMCwweDFjLDB4ODAsMHg0NywweDIwLDB4MTEsMHhjOCwweDA0LDB4NzIsMHgwMSwweDFjIH0sCisgIDE2LCAweGQzNjAsIDAsIHsweDgwLDB4NDcsMHgyMCwweDExLDB4YzgsMHgwNCwweDcyLDB4MDAsMHg5YywweDgwLDB4NDcsMHgyMCwweDE5LDB4YzgsMHgwMCwweDcyIH0sCisgIDE2LCAweGQzNzAsIDAsIHsweDAxLDB4MWMsMHg4OCwweDY3LDB4MjAsMHgxMSwweGM4LDB4MDQsMHg3MiwweDAxLDB4NWMsMHg4MiwweDQ3LDB4MjIsMHgxMSwweGMwIH0sCisgIDE2LCAweGQzODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjMsMHgwOCwweDQ4LDB4YzIsMHgxMiwweDMxIH0sCisgIDE2LCAweGQzOTAsIDAsIHsweDg0LDB4OGMsMHg2MSwweDIzLDB4MTAsMHg0MCwweGMwLDB4MTIsMHgzMSwweDg0LDB4OGMsMHg2MSwweDAzLDB4MTAsMHg0OCwweGM0IH0sCisgIDE2LCAweGQzYTAsIDAsIHsweDEwLDB4MzEsMHg4NCwweDhjLDB4NDEsMHgyMywweDE4LDB4NDgsMHhjNiwweDEwLDB4MzAsMHgwNCwweDBjLDB4NDEsMHgyMywweDE4IH0sCisgIDE2LCAweGQzYjAsIDAsIHsweDQ4LDB4YzYsMHgxMiwweDMwLDB4ODQsMHg4YywweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQzYzAsIDAsIHsweDAwLDB4MDAsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzLDB4ZmYsMHhmNCwweGZmLDB4ZmQsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzIH0sCisgIDE2LCAweGQzZDAsIDAsIHsweGZmLDB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMywweGZmLDB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmIH0sCisgIDE2LCAweGQzZTAsIDAsIHsweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhkZCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDAwIH0sCisgIDE2LCAweGQzZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ0MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ0MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ0MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ0MzAsIDAsIHsweDAwLDB4MDAsMHgyYywweGRiLDB4MGIsMHgzNiwweGMyLDB4Y2QsMHhiMCwweGIzLDB4NmMsMHgyYywweGRiLDB4MGIsMHgzNiwweGMyIH0sCisgIDE2LCAweGQ0NDAsIDAsIHsweGNkLDB4YjAsMHhiMywweDZjLDB4MmMsMHhkYiwweDBiLDB4MzYsMHhjMiwweGNkLDB4YjAsMHhiMywweDZjLDB4MmMsMHhkYiwweDBiIH0sCisgIDE2LCAweGQ0NTAsIDAsIHsweDM2LDB4YzIsMHhjZCwweGIwLDB4YjMsMHg0YywweDJjLDB4ZGIsMHgwYiwweDM2LDB4YzIsMHhjZCwweGIwLDB4YjMsMHg2YywweDAwIH0sCisgIDE2LCAweGQ0NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzMsMHg1YywweDRjLDB4ZDcsMHgxMywweDMzIH0sCisgIDE2LCAweGQ0NzAsIDAsIHsweGM0LDB4Y2MsMHhmMSwweDMzLDB4M2EsMHg0YSwweGQ2LDB4OTMsMHgzMywweGM0LDB4Y2MsMHhmMSwweDJiLDB4M2EsMHg0YywweGNmIH0sCisgIDE2LCAweGQ0ODAsIDAsIHsweDEzLDB4MzMsMHhjNCwweGNjLDB4ZTksMHgzMywweDNjLDB4NGMsMHhjZiwweDEyLDB4YjUsMHhhNCwweGFjLDB4YzksMHgzMywweDNjIH0sCisgIDE2LCAweGQ0OTAsIDAsIHsweDRjLDB4Y2YsMHgxMywweDM1LDB4YzQsMHhjZCwweDY5LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ0YTAsIDAsIHsweDAwLDB4MDAsMHgzYiwweDdlLDB4NGUsMHhkZiwweDkzLDB4YjcsMHhlNCwweGVkLDB4ZjksMHgzYiwweDdlLDB4NGUsMHhkZiwweDkzIH0sCisgIDE2LCAweGQ0YjAsIDAsIHsweGI3LDB4ZTQsMHhlZCwweGY5LDB4M2IsMHg3ZSwweDRlLDB4ZGUsMHgxMiwweDM3LDB4ZTQsMHhlZCwweGUxLDB4M2IsMHg3ZSwweDRlIH0sCisgIDE2LCAweGQ0YzAsIDAsIHsweGRmLDB4OTIsMHgzMSwweDg0LDB4OGQsMHhkOSwweDNiLDB4N2UsMHg0ZSwweGRmLDB4OTMsMHhiMSwweGU0LDB4ZWMsMHg2MSwweDAwIH0sCisgIDE2LCAweGQ0ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4NCwweDA0LDB4YTEsMHg4MywweDJjIH0sCisgIDE2LCAweGQ0ZTAsIDAsIHsweDAzLDB4MGEsMHgxMCwweDgyLDB4YzEsMHgzNCwweDEwLDB4OGYsMHgwMCwweDQwLDB4MDksMHgxNCwweDAyLDB4MDMsMHgxNCwweDkxIH0sCisgIDE2LCAweGQ0ZjAsIDAsIHsweDAwLDB4MDgsMHg0MiwweDBiLDB4MTgsMHg4MiwweGM0LDB4MDAsMHgzMSwweGNhLDB4MGMsMHg1MiwweDAyLDB4MTAsMHg4MCwweDg1IH0sCisgIDE2LCAweGQ1MDAsIDAsIHsweDAwLDB4MjEsMHg4MiwweDI4LDB4NDAsMHgwYSwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ1MTAsIDAsIHsweDAwLDB4MDAsMHgwYSwweDA0LDB4MDIsMHgwMSwweDQwLDB4ODAsMHg3MywweDI4LDB4MTAsMHg0OCwweDA3LDB4MDYsMHgwMSwweDA0IH0sCisgIDE2LCAweGQ1MjAsIDAsIHsweGE0LDB4NDEsMHgyMSwweDE0LDB4MDgsMHg0NCwweDA2LDB4MTEsMHg0MCwweDgwLDB4NzAsMHgyMCwweDE0LDB4MGEsMHgwNCwweDAyIH0sCisgIDE2LCAweGQ1MzAsIDAsIHsweDAwLDB4YzgsMHg4NCwweDQxLDB4MjEsMHgxYywweDA4LDB4MDYsMHgxMiwweDAxLDB4YzAsMHg4MCwweDYwLDB4MjAsMHgxNCwweDAwIH0sCisgIDE2LCAweGQ1NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4NCwweDA0LDB4MjEsMHg4MiwweDA4IH0sCisgIDE2LCAweGQ1NTAsIDAsIHsweDUzLDB4MDIsMHgxMCwweDgwLDB4YzUsMHgwMCwweDgxLDB4NGEsMHgwNCwweDQyLDB4MDIsMHgxNCwweDAwLDB4MDQsMHgyMCwweDIxIH0sCisgIDE2LCAweGQ1NjAsIDAsIHsweDgwLDB4YTgsMHg3MiwweDIyLDB4MWMsMHg4OCwweGM0LDB4MDYsMHhhMSwweDQyLDB4OGMsMHg1MiwweDIyLDB4MWMsMHg4OCwweDg1IH0sCisgIDE2LCAweGQ1NzAsIDAsIHsweDI2LDB4MjEsMHhjMCwweDg4LDB4NTAsMHgyMiwweDE4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ1ODAsIDAsIHsweDAwLDB4MDAsMHgwMiwweDQ0LDB4MDAsMHgwMSwweDAxLDB4MDAsMHg2MiwweDAwLDB4MTAsMHgwMCwweDA0LDB4MDAsMHgwMSwweDAxIH0sCisgIDE2LCAweGQ1OTAsIDAsIHsweDIwLDB4NDAsMHgwMCwweDFjLDB4MDAsMHg0NCwweDA0LDB4MDEsMHgwMiwweDIwLDB4NjIsMHgwMCwweDFjLDB4ODAsMHgwNCwweDA0IH0sCisgIDE2LCAweGQ1YTAsIDAsIHsweDgwLDB4ODksMHgyMCwweDUwLDB4MDgsMHgxNCwweDgwLDB4MDQsMHgyNCwweDAxLDB4YzEsMHgwMCwweDUwLDB4MDAsMHgxOCwweDAwIH0sCisgIDE2LCAweGQ1YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4MCwweDM4LDB4MjAsMHgwNCwweDBjIH0sCisgIDE2LCAweGQ1YzAsIDAsIHsweDMxLDB4MGEsMHgwMCwweDAwLDB4MDIsMHgxOCwweDIwLDB4OGMsMHhhOCwweDEwLDB4MjgsMHgwOCwweDg4LDB4YzEsMHgxNCwweDEwIH0sCisgIDE2LCAweGQ1ZDAsIDAsIHsweGM2LDB4MDAsMHgyMiwweDAzLDB4MDgsMHgwMiwweDAxLDB4MDgsMHhiMCwweDAwLDB4MGMsMHgyMSwweDAyLDB4MDAsMHg4MiwweDgwIH0sCisgIDE2LCAweGQ1ZTAsIDAsIHsweDA4LDB4MDAsMHg0OSwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ1ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg4MCwweDA4LDB4MjAsMHgwMywweDAwLDB4MDQsMHgwMiwweDQzLDB4MjAsMHgwMCwweDQwIH0sCisgIDE2LCAweGQ2MDAsIDAsIHsweDAwLDB4MjAsMHgwMCwweDA0LDB4NDIsMHgwMSwweDEwLDB4ODAsMHg4NCwweDIwLDB4MTEsMHgwOCwweDA0LDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ2MTAsIDAsIHsweDAwLDB4NDQsMHgyNCwweDIwLDB4MDksMHgwOCwweDQwLDB4MDMsMHgwMCwweDkwLDB4YzQsMHgyMCwweDIwLDB4MDgsMHgwYywweDAyIH0sCisgIDE2LCAweGQ2MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDgsMHg4MSwweDA4LDB4MjAsMHgwNCwweDg4IH0sCisgIDE2LCAweGQ2MzAsIDAsIHsweDAyLDB4MjIsMHgwOCwweDA4LDB4YzMsMHgyYSwweDkwLDB4NDAsMHg4NCwweDEwLDB4MjAsMHgwNCwweDgwLDB4YzIsMHgyNiwweDIwIH0sCisgIDE2LCAweGQ2NDAsIDAsIHsweDQ5LDB4ODgsMHgyMiwweDIyLDB4MGMsMHgwOCwweGMxLDB4MjYsMHhhMCwweGM5LDB4OGMsMHgxMiwweDJhLDB4MDQsMHg4OCwweDQzIH0sCisgIDE2LCAweGQ2NTAsIDAsIHsweDBlLDB4YTAsMHhjYiwweDg4LDB4MTAsMHgyMiwweDBjLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ2NjAsIDAsIHsweDA4LDB4MDAsMHgwYSwweDQwLDB4MzIsMHgwMCwweDAxLDB4ODAsMHgzMSwweDI4LDB4MDAsMHgwMCwweDAxLDB4MTIsMHg4MCwweDhkIH0sCisgIDE2LCAweGQ2NzAsIDAsIHsweDg0LDB4MDAsMHgyOCwweDBjLDB4MDgsMHgwMSwweDMyLDB4MDAsMHg4YywweDgwLDB4MDIsMHgyMCwweDBjLDB4MDgsMHgwMSwweDJlIH0sCisgIDE2LCAweGQ2ODAsIDAsIHsweDAwLDB4YzMsMHg4MCwweDAyLDB4MjAsMHgwNCwweDA4LDB4NDMsMHgwMiwweDAwLDB4NDAsMHg4MCwweDEwLDB4MjAsMHgwNCwweDAyIH0sCisgIDE2LCAweGQ2OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDgsMHg4NywweDBhLDB4MjEsMHgwNCwweDg4IH0sCisgIDE2LCAweGQ2YTAsIDAsIHsweDExLDB4MmEsMHgxYywweDBhLDB4MDYsMHgyMiwweDIxLDB4NDAsMHhhMCwweDQyLDB4MmEsMHgxMCwweDg4LDB4ODUsMHgwYSwweGExIH0sCisgIDE2LCAweGQ2YjAsIDAsIHsweDA2LDB4YTQsMHg2MiwweDIyLDB4MWMsMHgwYSwweGM0LDB4MDIsMHgyMSwweDgwLDB4OGMsMHg1MiwweDIyLDB4MTQsMHg0OCwweDg2IH0sCisgIDE2LCAweGQ2YzAsIDAsIHsweDIyLDB4MjAsMHgwOCwweGE4LDB4NjAsMHgyYSwweDE0LDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ2ZDAsIDAsIHsweDAwLDB4MDAsMHgwOCwweDQ1LDB4MDYsMHgwMSwweDg5LDB4ODAsMHg2MywweDIwLDB4MWMsMHg4OCwweDQwLDB4MzQsMHgxMSwweDAxIH0sCisgIDE2LCAweGQ2ZTAsIDAsIHsweGE0LDB4NTAsMHgyOCwweDE4LDB4NDgsMHgwNCwweDBlLDB4MDEsMHg0YiwweDgwLDB4NzMsMHgyOCwweDFjLDB4OGEsMHgwNCwweDA2IH0sCisgIDE2LCAweGQ2ZjAsIDAsIHsweDkxLDB4NDksMHgwNCwweDYzLDB4MjAsMHgxYywweDhhLDB4MDYsMHgyNiwweDAxLDB4ODUsMHg4MCwweDcwLDB4MjAsMHgxOCwweDAyIH0sCisgIDE2LCAweGQ3MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHg4NSwweDAwLDB4YjEsMHg0NSwweDJjIH0sCisgIDE2LCAweGQ3MTAsIDAsIHsweDcwLDB4MDIsMHgxNCwweGMwLDB4MDcsMHgwOCwweDIxLDB4NDksMHgwMCwweDQyLDB4MDEsMHgxNCwweDgyLDB4MDUsMHgwMCwweDExIH0sCisgIDE2LCAweGQ3MjAsIDAsIHsweDg0LDB4MDAsMHg1MiwweDAyLDB4MWMsMHgwMCwweGM0LDB4MDAsMHgyMSwweGM0LDB4MmMsMHg1MywweDAyLDB4MWMsMHgwMiwweDgxIH0sCisgIDE2LCAweGQ3MzAsIDAsIHsweDA0LDB4YTEsMHhjZCwweDA4LDB4NTAsMHgwMiwweDE0LDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ3NDAsIDAsIHsweDA4LDB4MTAsMHgxMiwweDA0LDB4MzQsMHgwMSwweGNjLDB4MDAsMHg3MywweDQwLDB4MWMsMHg5MCwweDQ1LDB4MDQsMHgwMSwweDQ4IH0sCisgIDE2LCAweGQ3NTAsIDAsIHsweDA0LDB4NjAsMHg0MSwweDE4LDB4YzAsMHg0NCwweDA0LDB4MDEsMHgwNSwweDA0LDB4NzMsMHg0OCwweDE0LDB4NTAsMHg0NywweDM0IH0sCisgIDE2LCAweGQ3NjAsIDAsIHsweDAxLDB4NDUsMHgyMCwweDYyLDB4MDgsMHgxYywweGMyLDB4MDQsMHgwYywweDgxLDB4YzcsMHgwMCwweDczLDB4ODAsMHgxOCwweGMyIH0sCisgIDE2LCAweGQ3NzAsIDAsIHsweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MTAsMHg4NCwweDEwLDB4MjEsMHhjYywweDI4IH0sCisgIDE2LCAweGQ3ODAsIDAsIHsweDQyLDB4MDIsMHgxNCwweDEyLDB4YzUsMHgxMCwweDIxLDB4ODQsMHgwNCwweDQwLDB4MDAsMHgxYywweDgwLDB4ODQsMHgwMCwweDkxIH0sCisgIDE2LCAweGQ3OTAsIDAsIHsweDAwLDB4MDgsMHg3MywweDgyLDB4MWMsMHg5MCwweDA1LDB4MGMsMHgwMSwweGNmLDB4MGMsMHg0MCwweDAyLDB4MTQsMHgzMCwweDQ1IH0sCisgIDE2LCAweGQ3YTAsIDAsIHsweDIwLDB4YTEsMHhjMCwweDA4LDB4NTAsMHgwMiwweDEwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ3YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDQ1LDB4MGMsMHg4MSwweDAwLDB4MDAsMHgwMSwweDA4LDB4MDgsMHgwMCwweDA1LDB4MTgsMHg5MSwweDA1IH0sCisgIDE2LCAweGQ3YzAsIDAsIHsweDA0LDB4MDAsMHgwMSwweDA0LDB4NDAsMHgwNiwweDE4LDB4MDAsMHgwMiwweDI0LDB4NzAsMHg0MCwweDA0LDB4MDAsMHg0MCwweDAwIH0sCisgIDE2LCAweGQ3ZDAsIDAsIHsweDAxLDB4YzQsMHgyNCwweDAwLDB4ODgsMHgwNCwweDAwLDB4NDMsMHgxMCwweDAwLDB4NDAsMHgyMCwweDAwLDB4ODgsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ3ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTIsMHg4NSwweDI0LDB4MzEsMHgwMiwweDBjIH0sCisgIDE2LCAweGQ3ZjAsIDAsIHsweDAyLDB4YzIsMHgwNCwweDEwLDB4YzQsMHgyOCwweDIxLDB4NDksMHgwYywweDAyLDB4YzAsMHgwNCwweGIyLDB4MDYsMHgxYywweDIwIH0sCisgIDE2LCAweGQ4MDAsIDAsIHsweDAzLDB4MDgsMHg1MCwweDQyLDB4MGMsMHg4MCwweDAxLDB4MDQsMHhhMSwweDQ5LDB4MGMsMHgwMCwweGMyLDB4MGMsMHgxMCwweDQzIH0sCisgIDE2LCAweGQ4MTAsIDAsIHsweDI0LDB4YTAsMHhjMSwweDA4LDB4MTAsMHg0MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ4MjAsIDAsIHsweDAwLDB4MTAsMHhhMiwweDAwLDB4MjAsMHgwMCwweGNkLDB4MDAsMHgwMCwweDQwLDB4MDQsMHgyMCwweDAxLDB4MTAsMHgwMCwweDA5IH0sCisgIDE2LCAweGQ4MzAsIDAsIHsweDA0LDB4MDIsMHg0OSwweDBjLDB4OTIsMHgwNywweDMwLDB4MDAsMHgwMCwweDAwLDB4MzMsMHgwOCwweDBjLDB4OTIsMHg0MSwweDAwIH0sCisgIDE2LCAweGQ4NDAsIDAsIHsweDgwLDB4Y2MsMHgwMCwweDAwLDB4MDAsMHgwYywweDAwLDB4NDMsMHgyOCwweDgwLDB4YzIsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ4NTAsIDAsIHsweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgxMCwweDUwLDB4ODAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ4NjAsIDAsIHsweDEwLDB4MDAsMHgwMCwweGYwLDB4MDAsMHgxMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweGQwLDB4ODAsMHg4MCwweDAwIH0sCisgIDE2LCAweGQ4NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHg5MCwweDgwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHg5MCwweDgwIH0sCisgIDE2LCAweGQ4ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDEwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ4OTAsIDAsIHsweDNjLDB4M2MsMHgxMCwweDgwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg5MCwweGEwLDB4ODAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ4YTAsIDAsIHsweDAwLDB4MDAsMHg0MCwweDEwLDB4OTAsMHg4MCwweGEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDEwLDB4OTAsMHg4MCwweGEwIH0sCisgIDE2LCAweGQ4YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDIwLDB4ODAsMHgxMCwweDkwLDB4YTAsMHhhMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgxMCwweDhmIH0sCisgIDE2LCAweGQ4YzAsIDAsIHsweDBmLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmMsMHhjMiwweGU0LDB4ODEsMHg4MCwweDNmIH0sCisgIDE2LCAweGQ4ZDAsIDAsIHsweGQ5LDB4YmYsMHhkOSwweDk4LDB4NzEsMHg5ZCwweDQyLDB4ODAsMHgwMCwweDI2LDB4N2YsMHhlNiwweDcyLDB4YWIsMHg3YywweDNhIH0sCisgIDE2LCAweGQ4ZTAsIDAsIHsweDQwLDB4MDAsMHgxOSwweDgwLDB4MjYsMHg0OCwweGRkLDB4M2MsMHg5MSwweGMwLDB4MjYsMHg0MCwweDI2LDB4NDAsMHgzOCwweDMxIH0sCisgIDE2LCAweGQ4ZjAsIDAsIHsweGRiLDB4NjEsMHhjMCwweDE5LDB4OTksMHhiZiwweGM5LDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ5MDAsIDAsIHsweDAwLDB4MDAsMHgxMCwweDgwLDB4MTAsMHgxNCwweDgwLDB4MDYsMHg4NCwweDk3LDB4OTYsMHg4NiwweDk2LDB4MDYsMHg5MCwweDAwIH0sCisgIDE2LCAweGQ5MTAsIDAsIHsweDNmLDB4YTEsMHgyOCwweDAxLDB4MDIsMHg5MCwweDEyLDB4MDAsMHg4MCwweDE3LDB4ODgsMHgxNiwweDllLDB4OTAsMHg5MCwweDA0IH0sCisgIDE2LCAweGQ5MjAsIDAsIHsweDEwLDB4MDAsMHgzNiwweGJlLDB4YmUsMHg5ZSwweDg2LDB4MTYsMHgxMiwweDg0LDB4ODAsMHgxMywweGJlLDB4OTcsMHhhZSwweDgwIH0sCisgIDE2LCAweGQ5MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDgyIH0sCisgIDE2LCAweGQ5NDAsIDAsIHsweDgxLDB4ODQsMHgyMSwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHhhMSwweDM4LDB4MDEsMHg3OCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ5NTAsIDAsIHsweDA4LDB4YjgsMHgyMSwweDcyLDB4NjgsMHg4MCwweDAwLDB4MDAsMHgwMCwweDA4LDB4OTgsMHg0NCwweDg4LDB4NjgsMHg4MCwweDAwIH0sCisgIDE2LCAweGQ5NjAsIDAsIHsweDAwLDB4MDAsMHgwOCwweGI4LDB4MDEsMHg3OCwweDAxLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ5NzAsIDAsIHsweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGY3LDB4YWYsMHhmZiwweGMwIH0sCisgIDE2LCAweGQ5ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmIH0sCisgIDE2LCAweGQ5OTAsIDAsIHsweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhiZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ5YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH0sCisgIDE2LCAweGQ5YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweDdmLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmIH0sCisgIDE2LCAweGQ5YzAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmIH0sCisgIDE2LCAweGQ5ZDAsIDAsIHsweDJmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGQ5ZTAsIDAsIHsweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHg3ZiwweGMwIH0sCisgIDE2LCAweGQ5ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmIH0sCisgIDE2LCAweGRhMDAsIDAsIHsweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweDdmLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRhMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH0sCisgIDE2LCAweGRhMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhiZiwweGJmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZGYsMHhiZiwweGRmIH0sCisgIDE2LCAweGRhMzAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGVmLDB4ZmYsMHhmZiwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGRmIH0sCisgIDE2LCAweGRhNDAsIDAsIHsweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRhNTAsIDAsIHsweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweDNlLDB4YWYsMHhmZiwweGMwIH0sCisgIDE2LCAweGRhNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MWYsMHhmZiwweGRmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhlNywweGZlIH0sCisgIDE2LCAweGRhNzAsIDAsIHsweGVmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGRmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRhODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH0sCisgIDE2LCAweGRhOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJmLDB4ZjcsMHhmZiwweGZmIH0sCisgIDE2LCAweGRhYTAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZiwweGZmLDB4ZmYsMHhkZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGY3IH0sCisgIDE2LCAweGRhYjAsIDAsIHsweGRmLDB4ZjcsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRhYzAsIDAsIHsweDAwLDB4MDAsMHgwMiwweGM0LDB4MDAsMHhiMSwweGMzLDB4MmMsMHg1MCwweDA5LDB4MTQsMHg4MiwweGM0LDB4MzAsMHg5MSwweGM3IH0sCisgIDE2LCAweGRhZDAsIDAsIHsweDI0LDB4NjAsMHgwOCwweDFjLDB4ODIsMHgwNywweDM0LDB4OTEsMHg0YywweDA0LDB4NDMsMHgwYSwweDEwLDB4YzIsMHg4NCwweDA0IH0sCisgIDE2LCAweGRhZTAsIDAsIHsweDkxLDB4ODQsMHgyNCwweDUyLDB4MGIsMHgxOCwweDAyLDB4YzQsMHgyNCwweGIxLDB4YzMsMHgyYywweDQwLDB4MGEsMHgxMCwweDgwIH0sCisgIDE2LCAweGRhZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweDAyLDB4MDEsMHhjNCwweDgwIH0sCisgIDE2LCAweGRiMDAsIDAsIHsweDYwLDB4MjAsMHgxYywweDA4LDB4NDQsMHgyMiwweDAxLDB4YzAsMHg4NCwweDUwLDB4MDEsMHg5YywweDA4LDB4MDcsMHgwYSwweDAxIH0sCisgIDE2LCAweGRiMTAsIDAsIHsweGMwLDB4ODQsMHg3MiwweDIwLDB4MWMsMHhjOCwweDA0LDB4MTIsMHgxMSwweDQ0LDB4ODAsMHg0MSwweDAxLDB4MWMsMHg4MCwweDA3IH0sCisgIDE2LCAweGRiMjAsIDAsIHsweDA4LDB4MTEsMHhjNCwweDAwLDB4NzAsMHgwMCwweDEwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRiMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDg2LDB4MmMsMHgyMSwweDRhLDB4MGMsMHg1MiwweDAyLDB4MWMsMHg4MCwweDA0LDB4MjAsMHgyMSwweGNhIH0sCisgIDE2LCAweGRiNDAsIDAsIHsweDEwLDB4NjIsMHgwMiwweDFjLDB4ODEsMHg0NywweDA0LDB4MjEsMHhjMywweDIwLDB4NTEsMHgwMSwweDFjLDB4ODAsMHgwNCwweDJjIH0sCisgIDE2LCAweGRiNTAsIDAsIHsweDAxLDB4Y2IsMHgwNCwweDUyLDB4MDMsMHgxNCwweDQwLDB4YzcsMHgyMCwweDMxLDB4YzgsMHgwYywweDUwLDB4MjIsMHgxMCwweDgwIH0sCisgIDE2LCAweGRiNjAsIDAsIHsweDAxLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNiwweDIwLDB4MDEsMHg4OSwweDAwIH0sCisgIDE2LCAweGRiNzAsIDAsIHsweDUyLDB4MDAsMHgxNCwweDgwLDB4MDQsMHgyOCwweDAxLDB4NDUsMHgwNCwweDYyLDB4MDAsMHgxMCwweDgwLDB4NDYsMHgzMCwweDExIH0sCisgIDE2LCAweGRiODAsIDAsIHsweDBkLDB4MDAsMHg0MiwweDAxLDB4MTQsMHhjMCwweDQ0LDB4MDAsMHgxMSwweDA1LDB4MDAsMHg1MCwweDAwLDB4MWMsMHgwMCwweDQ0IH0sCisgIDE2LCAweGRiOTAsIDAsIHsweDI4LDB4MDEsMHg0OSwweDAwLDB4NzAsMHgwMCwweDEwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRiYTAsIDAsIHsweDAwLDB4MDAsMHgwOCwweGMwLDB4MDIsMHgzMCwweDBjLDB4OGMsMHgzMCwweDIyLDB4MDgsMHg4OCwweGMyLDB4MjYsMHgwMCwweDA4IH0sCisgIDE2LCAweGRiYjAsIDAsIHsweDgwLDB4MjAsMHgyMiwweDBjLDB4ODgsMHg4MSwweDAyLDB4MTAsMHhjNCwweDgwLDB4MTAsMHgyMiwweDBjLDB4MDgsMHg0MCwweDAyIH0sCisgIDE2LCAweGRiYzAsIDAsIHsweDEwLDB4NDgsMHg4OCwweDAxLDB4MjMsMHgwNCwweGM4LDB4NDIsMHgwMiwweDEwLDB4NDYsMHg4YywweDEyLDB4MjIsMHgwMCwweDAwIH0sCisgIDE2LCAweGRiZDAsIDAsIHsweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwMCwweDAwLDB4ODAsMHhjOCwweDIwIH0sCisgIDE2LCAweGRiZTAsIDAsIHsweDExLDB4MDksMHgwMCwweDgwLDB4NDEsMHgxMCwweDkwLDB4MDgsMHgyNCwweDMwLDB4MDgsMHgwNCwweDQyLDB4NDEsMHgwMCwweDkwIH0sCisgIDE2LCAweGRiZjAsIDAsIHsweGM0LDB4MjAsMHgwMCwweDA4LDB4MDQsMHg0MiwweDAwLDB4MTAsMHg4MCwweDRjLDB4MjAsMHgyMywweDA5LDB4MDQsMHhjMiwweDQzIH0sCisgIDE2LCAweGRjMDAsIDAsIHsweDMwLDB4ODAsMHg0MCwweDIwLDB4MTEsMHgwOCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRjMTAsIDAsIHsweDA4LDB4MDAsMHgwOCwweDgxLDB4MDIsMHgyMCwweGM5LDB4OGMsMHgxMiwweDIwLDB4MDQsMHg0OCwweDQxLDB4MjIsMHgwMCwweDA5IH0sCisgIDE2LCAweGRjMjAsIDAsIHsweDg4LDB4MzAsMHgyMCwweDBjLDB4ODgsMHgwMywweDBlLDB4MDAsMHg0OSwweDhjLDB4MTAsMHgyMiwweDBjLDB4ODgsMHg0MCwweDJlIH0sCisgIDE2LCAweGRjMzAsIDAsIHsweDAwLDB4YzksMHg4NCwweDEzLDB4MjEsMHgwNCwweGM4LDB4YzMsMHgyMiwweDAwLDB4Y2IsMHg4YywweDMyLDB4MjIsMHgwMCwweDAwIH0sCisgIDE2LCAweGRjNDAsIDAsIHsweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDgsMHgwMSwweDAyLDB4MDAsMHg0YiwweDgwIH0sCisgIDE2LCAweGRjNTAsIDAsIHsweDMyLDB4MjEsMHgwOCwweDg4LDB4NDEsMHgwMiwweDEwLDB4MGYsMHg4MCwweDEwLDB4MjEsMHg4YywweDA4LDB4NDEsMHgwMiwweDAwIH0sCisgIDE2LCAweGRjNjAsIDAsIHsweDg3LDB4ODQsMHgxMCwweDIwLDB4MDQsMHg4OCwweDAwLDB4MDIsMHgwMCwweDQ3LDB4ODAsMHgxMCwweDIxLDB4MGMsMHg4OCwweDQxIH0sCisgIDE2LCAweGRjNzAsIDAsIHsweDE2LDB4MTAsMHg0NiwweDgwLDB4MzAsMHgyMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRjODAsIDAsIHsweDAwLDB4MDAsMHgwYSwweGM0LDB4MjIsMHhhMSwweDA4LDB4YTQsMHg3MiwweDJhLDB4MTQsMHgwYSwweDg1LDB4MDIsMHg4MSwweDg0IH0sCisgIDE2LCAweGRjOTAsIDAsIHsweGEwLDB4NDIsMHgyOCwweDFjLDB4MGEsMHhjNSwweDAyLDB4OTEsMHg0MCwweGI4LDB4NzMsMHgyOSwweDEwLDB4Y2EsMHhjNCwweDAyIH0sCisgIDE2LCAweGRjYTAsIDAsIHsweGExLDB4ODAsMHhhNCwweDQyLDB4MmEsMHgxNCwweGNhLDB4ODUsMHgyMiwweDkxLDB4ODAsMHhhOCwweDcwLDB4MmEsMHgxOCwweDAyIH0sCisgIDE2LCAweGRjYjAsIDAsIHsweDAwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDgsMHgwNCwweDFlLDB4MDEsMHhjOCwweDgwIH0sCisgIDE2LCAweGRjYzAsIDAsIHsweDQzLDB4MjAsMHgxOCwweDA4LDB4NDUsMHgzZSwweDAxLDB4MGMsMHg4MCwweDYxLDB4MjAsMHg5YywweDQ4LDB4MDYsMHgxMiwweDgxIH0sCisgIDE2LCAweGRjZDAsIDAsIHsweGMwLDB4ODAsMHg3MywweDAwLDB4MTAsMHg4OCwweDA2LDB4MDIsMHgwMSwweGM4LDB4MDAsMHg0MiwweDIwLDB4MTAsMHhjOCwweDA3IH0sCisgIDE2LCAweGRjZTAsIDAsIHsweDAyLDB4MTEsMHhjZCwweDgwLDB4NTEsMHgyMCwweDE0LDB4ODIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRjZjAsIDAsIHsweDA4LDB4MDAsMHgwMCwweGM0LDB4MjQsMHgyMSwweGM4LDB4MGMsMHg0MiwweDAxLDB4MTQsMHgwMCwweDAwLDB4MjgsMHgxMCwweDRjIH0sCisgIDE2LCAweGRkMDAsIDAsIHsweDA4LDB4NTIsMHgwMiwweDE0LDB4ODAsMHg0NSwweDI0LDB4MjksMHg0MCwweDA0LDB4NzIsMHgwMCwweDEwLDB4YzAsMHgwNSwweDI0IH0sCisgIDE2LCAweGRkMTAsIDAsIHsweDExLDB4NDQsMHgwOCwweDQzLDB4MDEsMHgxNCwweGMwLDB4NDcsMHgyNCwweDIwLDB4NDgsMHgwOCwweDcyLDB4MDIsMHgxMCwweDAwIH0sCisgIDE2LCAweGRkMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4MDAsMHgwNywweDEwLDB4MTEsMHgwNiwweDAwIH0sCisgIDE2LCAweGRkMzAsIDAsIHsweDcyLDB4MDAsMHgxOCwweGQwLDB4NDYsMHgyMCwweDAxLDB4NGQsMHgwMCwweDcxLDB4NDAsMHgxMCwweDUwLDB4MDcsMHgzMCwweDExIH0sCisgIDE2LCAweGRkNDAsIDAsIHsweGMzLDB4MDAsMHg3MSwweDQxLDB4MTAsMHhiMCwweDA1LDB4MmMsMHgwMSwweDQ5LDB4MDAsMHg0MywweDAwLDB4MWMsMHg1MCwweDQ1IH0sCisgIDE2LCAweGRkNTAsIDAsIHsweDMwLDB4MDEsMHg4YywweDAwLDB4NjEsMHg0MCwweDE4LDB4NDIsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRkNjAsIDAsIHsweDAwLDB4MDAsMHgzMCwweGM1LDB4MDAsMHgyMSwweGMwLDB4MGMsMHg0MCwweDAxLDB4MTQsMHgxMiwweDQ0LDB4MDQsMHgzMSwweDg0IH0sCisgIDE2LCAweGRkNzAsIDAsIHsweDI0LDB4NDAsMHg4MCwweDE0LDB4YTEsMHhjNywweDAwLDB4MDEsMHg0MCwweDA4LDB4NDAsMHgwMSwweDE0LDB4MjAsMHgwNSwweDIwIH0sCisgIDE2LCAweGRkODAsIDAsIHsweDExLDB4YzAsMHgwMiwweDYwLDB4ODIsMHgxOCwweDAwLDB4ODcsMHgyNCwweDExLDB4NDAsMHgwOCwweDQwLDB4NDIsMHgxMCwweDAyIH0sCisgIDE2LCAweGRkOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDBjLDB4ODAsMHhjNCwweDI0IH0sCisgIDE2LCAweGRkYTAsIDAsIHsweDMxLDB4NDgsMHgwYywweDAwLDB4MDEsMHgwOCwweGMxLDB4NDEsMHgwMCwweDAwLDB4NDksMHgwMCwweDQyLDB4MDMsMHgwOCwweDEwIH0sCisgIDE2LCAweGRkYjAsIDAsIHsweDgwLDB4MjAsMHgyMSwweDA5LDB4MGMsMHgwMiwweDAyLDB4MTgsMHg4MCwweGMxLDB4MjQsMHgzMCwweDA4LDB4MGMsMHg0MiwweDAxIH0sCisgIDE2LCAweGRkYzAsIDAsIHsweDEwLDB4ODAsMHg4MywweDIwLDB4MTEsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRkZDAsIDAsIHsweDAwLDB4MDAsMHgxMCwweGMxLDB4MDQsMHgyMCwweDQ4LDB4MGMsMHgxMiwweDQyLDB4MDQsMHgwMCwweDgzLDB4MDAsMHgzMSwweDQ4IH0sCisgIDE2LCAweGRkZTAsIDAsIHsweDAwLDB4MDIsMHg0MSwweDA0LDB4YTAsMHgwNywweDBjLDB4MjAsMHg0MCwweDAwLDB4MTIsMHhjMiwweDBjLDB4ODAsMHhjMSwweDIwIH0sCisgIDE2LCAweGRkZjAsIDAsIHsweDIwLDB4YzgsMHgwMCwweDEyLDB4YzEsMHgwYywweGIwLDB4NDEsMHgyMCwweDAwLDB4NDksMHgwOCwweDAyLDB4NDIsMHgwMCwweDAwIH0sCisgIDE2LCAweGRlMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4ODAsMHgwMSwweDAwLDB4MTAsMHg4MSwweDAwIH0sCisgIDE2LCAweGRlMTAsIDAsIHsweDMwLDB4NDAsMHgwOCwweDIwLDB4MDMsMHgwMCwweDEwLDB4YzEsMHgyMCwweDAyLDB4MDAsMHgwNCwweDgwLDB4NDAsMHgzMCwweDkwIH0sCisgIDE2LCAweGRlMjAsIDAsIHsweDAxLDB4MTQsMHgwMiwweDQwLDB4MDQsMHg4MCwweDQwLDB4MjAsMHgwMCwweDA5LDB4MDQsMHgzMiwweDAxLDB4MDgsMHhhMCwweDAzIH0sCisgIDE2LCAweGRlMzAsIDAsIHsweDA0LDB4MTAsMHgwOCwweDAwLDB4MjIsMHg0MCwweDAwLDB4MDAsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRlNDAsIDAsIHsweDAwLDB4MDAsMHgzMCwweDAwLDB4MTAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHhmMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRlNTAsIDAsIHsweDAwLDB4MTAsMHg4MCwweDAwLDB4ZjAsMHgwMCwweDgwLDB4ODAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4ZjAsMHgxMCwweGEwIH0sCisgIDE2LCAweGRlNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweGYwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4ODAsMHgwMCwweGNjIH0sCisgIDE2LCAweGRlNzAsIDAsIHsweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDNjLDB4MTAsMHhhMCwweDgwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRlODAsIDAsIHsweDAwLDB4MDAsMHgxMCwweDkwLDB4ODAsMHhjMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDkwLDB4ODAsMHg4MCwweDAwIH0sCisgIDE2LCAweGRlOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg5MCwweDgwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg5MCwweDgwIH0sCisgIDE2LCAweGRlYTAsIDAsIHsweGUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4OGMsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRlYjAsIDAsIHsweDAwLDB4MDAsMHgwOSwweDRkLDB4YjEsMHhlOSwweDAwLDB4MjYsMHg0MCwweDJhLDB4N2YsMHhlMywweGYyLDB4NTQsMHg5OCwweGMwIH0sCisgIDE2LCAweGRlYzAsIDAsIHsweDNmLDB4ZTYsMHg0MCwweDAwLDB4MDEsMHg0MiwweDkxLDB4ZDAsMHhjMCwweDEzLDB4ZTUsMHg4NywweDYzLDB4ODMsMHhiOCwweGNkIH0sCisgIDE2LCAweGRlZDAsIDAsIHsweGY5LDB4MDAsMHgyNiwweDdmLDB4MDAsMHgwMCwweDM1LDB4MmUsMHhkNSwweDAzLDB4NDAsMHgzZiwweGQ5LDB4YmYsMHhiMSwweDgwIH0sCisgIDE2LCAweGRlZTAsIDAsIHsweDAxLDB4ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMiwweDE2LDB4MTQsMHgwMCwweDFjIH0sCisgIDE2LCAweGRlZjAsIDAsIHsweGE4LDB4M2YsMHg4OCwweDE2LDB4MDAsMHg4MCwweDg0LDB4ODAsMHgzNywweDllLDB4YmEsMHhhMCwweDUwLDB4MTAsMHgwMiwweDEyIH0sCisgIDE2LCAweGRmMDAsIDAsIHsweDAwLDB4MTcsMHg5NiwweDk3LDB4MjYsMHg1MCwweDEwLDB4MTAsMHg4MiwweDgwLDB4MWUsMHg4MCwweGRlLDB4YmUsMHg5NCwweDE0IH0sCisgIDE2LCAweGRmMTAsIDAsIHsweDAyLDB4MTAsMHg4MCwweDE3LDB4YmUsMHg4MSwweDk0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRmMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4YTgsMHg0NCwweDk0LDB4MjgsMHg4MCwweDAwLDB4MDAsMHgwMCwweDA4IH0sCisgIDE2LCAweGRmMzAsIDAsIHsweDk0LDB4MjEsMHg0NCwweDUxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDg0LDB4NDIsMHg0MSwweDAxLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRmNDAsIDAsIHsweDAwLDB4MDgsMHhhMSwweDcyLDB4MjMsMHg0MSwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHhiOCwweDAxLDB4NzgsMHgzMiwweDQwIH0sCisgIDE2LCAweGRmNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH0sCisgIDE2LCAweGRmNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDNmLDB4ZjcsMHhmZSwweGQ3LDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhkNywweGRmIH0sCisgIDE2LCAweGRmNzAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4N2YsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzNywweDdmIH0sCisgIDE2LCAweGRmODAsIDAsIHsweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRmOTAsIDAsIHsweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxZSwweGZmLDB4ZGUsMHg3NywweGMwIH0sCisgIDE2LCAweGRmYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MWYsMHhlZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmIH0sCisgIDE2LCAweGRmYjAsIDAsIHsweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweDdmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGRmYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH0sCisgIDE2LCAweGRmZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDFmLDB4Y2YsMHhkZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGJmIH0sCisgIDE2LCAweGRmZTAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhiZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmIH0sCisgIDE2LCAweGRmZjAsIDAsIHsweGZmLDB4YmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUwMDAsIDAsIHsweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwIH0sCisgIDE2LCAweGUwMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MWYsMHhmZiwweDFmIH0sCisgIDE2LCAweGUwMjAsIDAsIHsweDdmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJmLDB4ZGYsMHhmZiwweGNmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUwMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH0sCisgIDE2LCAweGUwNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDNmLDB4YmYsMHhhZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmIH0sCisgIDE2LCAweGUwNTAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZSwweGRlLDB4N2YsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmIH0sCisgIDE2LCAweGUwNjAsIDAsIHsweGZmLDB4ZjcsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUwNzAsIDAsIHsweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweDdmLDB4ZmYsMHhmZiwweGMwIH0sCisgIDE2LCAweGUwODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZSwweGJlIH0sCisgIDE2LCAweGUwOTAsIDAsIHsweDdmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNlLDB4ZmYsMHhkNywweDdmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUwYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUwYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUwYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUwZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUwZTAsIDAsIHsweDMwLDB4MDAsMHgyMCwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4NDMsMHg4ZSwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUwZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUxMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUxMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUxMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUxMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUxNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUxNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUxNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUxNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUxODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUxOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUxYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUxYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUxYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUxZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUxZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUxZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUyMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUyMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUyMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUyMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUyNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUyNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUyNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUyNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUyODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUyOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUyYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUyYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUyYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUyZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUyZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUyZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUzMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUzMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUzMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUzMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUzNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUzNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUzNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUzNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUzODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUzOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUzYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUzYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUzYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUzZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUzZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGUzZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU0MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU0MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU0MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU0MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU0NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU0NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU0NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU0NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU0ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU0OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU0YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU0YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU0YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU0ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU0ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU0ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU1MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU1MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU1MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU1MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU1NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU1NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU1NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU1NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU1ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU1OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU1YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU1YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU1YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU1ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU1ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU1ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU2MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU2MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU2MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU2MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU2NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU2NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU2NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU2NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU2ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU2OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU2YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU2YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU2YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU2ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU2ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU2ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU3MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU3MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU3MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU3MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU3NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU3NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU3NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU3NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU3ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU3OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU3YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU3YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU3YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU3ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU3ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU3ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU4MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU4MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU4MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU4MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU4NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU4NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU4NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU4NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU4ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU4OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU4YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU4YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU4YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU4ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU4ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU4ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU5MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU5MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU5MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU5MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU5NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU5NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU5NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU5NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU5ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU5OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU5YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU5YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU5YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU5ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU5ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGU5ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVhMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVhMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVhMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVhMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVhNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVhNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVhNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVhNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVhODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVhOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVhYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVhYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVhYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVhZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVhZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVhZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGViMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGViMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGViMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGViMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGViNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGViNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGViNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGViNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGViODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGViOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGViYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGViYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGViYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGViZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGViZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGViZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVjMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVjMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVjMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVjMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVjNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVjNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVjNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVjNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVjODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVjOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVjYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVjYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVjYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVjZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVjZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVjZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVkMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVkMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVkMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVkMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVkNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVkNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVkNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVkNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVkODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVkOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVkYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVkYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVkYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVkZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVkZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVkZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVlMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVlMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVlMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVlMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVlNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVlNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVlNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVlNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVlODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVlOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVlYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVlYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVlYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVlZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVlZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVlZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVmMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVmMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVmMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDIwLDB4MDEsMHgwMiwweDAyLDB4MDAsMHgwMCwweDMwLDB4MDAsMHg0MywweDgwIH0sCisgIDE2LCAweGVmMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVmNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVmNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVmNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVmNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVmODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVmOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVmYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVmYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVmYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVmZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVmZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGVmZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYwMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYwMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYwMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYwMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYwNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYwNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYwNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYwNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYwODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYwOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYwYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYwYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYwYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYwZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYwZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYwZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYxMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYxMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYxMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYxMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYxNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYxNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYxNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYxNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYxODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYxOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYxYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYxYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYxYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYxZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYxZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYxZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYyMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYyMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYyMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYyMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYyNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYyNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYyNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYyNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYyODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYyOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYyYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYyYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYyYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYyZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYyZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYyZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYzMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYzMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYzMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYzMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYzNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYzNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYzNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYzNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYzODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYzOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYzYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYzYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYzYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYzZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYzZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGYzZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY0MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY0MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY0MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY0MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY0NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY0NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY0NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY0NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY0ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY0OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY0YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY0YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY0YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY0ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY0ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY0ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY1MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY1MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY1MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY1MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY1NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY1NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY1NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY1NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY1ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY1OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY1YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY1YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY1YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY1ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY1ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY1ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY2MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY2MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY2MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY2MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY2NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY2NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY2NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY2NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY2ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY2OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY2YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY2YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY2YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY2ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY2ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY2ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY3MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY3MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY3MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY3MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY3NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY3NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY3NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY3NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY3ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY3OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY3YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY3YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY3YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY3ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY3ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY3ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY4MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY4MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY4MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY4MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY4NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY4NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY4NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY4NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY4ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY4OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY4YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY4YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY4YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY4ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY4ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY4ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY5MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY5MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY5MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY5MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY5NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY5NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY5NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY5NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY5ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY5OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY5YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY5YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY5YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY5ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY5ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGY5ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZhMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZhMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZhMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZhMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZhNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZhNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZhNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZhNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZhODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZhOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZhYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZhYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZhYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZhZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZhZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZhZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZiMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZiMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZiMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZiMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZiNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZiNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZiNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZiNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZiODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZiOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZiYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZiYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZiYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZiZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZiZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZiZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZjMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZjMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZjMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZjMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZjNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZjNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZjNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZjNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZjODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZjOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZjYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZjYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZjYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZjZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZjZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZjZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZkMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZkMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZkMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZkMzAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDVmLDB4YTcsMHgzMCwweDAwLDB4ODAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAzIH0sCisgIDE2LCAweGZkNDAsIDAsIHsweDMwLDB4MDAsMHg0MCwweDBlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZkNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZkNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDE2LCAweGZkNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHg4MCwweDAxIH0sCisgIDE2LCAweGZkODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDA1LDB4MzAsMHgwMCwweGEwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHgwMCwweDAxIH0sCisgIDE2LCAweGZkOTAsIDAsIHsweDAwLDB4MDAsMHg2YiwweDk3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH0sCisgIDQsIDB4ZmRhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgMCAsIDB4MDAwMCwgMSwgezB9Cit9OworLy8gVkVSU0lPTj0gMS4wLjAuMTkxCisvLyBEQVRFPSAyMDAyb2N0MjgKK3N0YXRpYyBJTlRFTF9IRVhfUkVDT1JEIGdfSGV4TWlkaUZ3NjJbXSA9IHsKKyAgIDMsMHgwMDAwLDAsezB4MDIsMHg0NiwweGI5fSwKKyAgIDMsMHgwMDAzLDAsezB4MDIsMHgwZiwweGZkfSwKKyAgIDMsMHgwMDBiLDAsezB4MDIsMHg0ZSwweDBmfSwKKyAgIDMsMHgwMDEzLDAsezB4MDIsMHgxNywweGZkfSwKKyAgIDMsMHgwMDFiLDAsezB4MDIsMHg0ZSwweDEyfSwKKyAgIDMsMHgwMDIzLDAsezB4MDIsMHg0ZCwweGVmfSwKKyAgIDMsMHgwMDJiLDAsezB4MDIsMHg0OCwweDAwfSwKKyAgIDMsMHgwMDMzLDAsezB4MDIsMHg0ZCwweGU2fSwKKyAgIDMsMHgwMDNiLDAsezB4MDIsMHg0ZCwweGY2fSwKKyAgIDMsMHgwMDQzLDAsezB4MDIsMHg0OSwweDAwfSwKKyAgIDMsMHgwMDRiLDAsezB4MDIsMHg0ZSwweDAzfSwKKyAgIDMsMHgwMDUzLDAsezB4MDIsMHg0OCwweGZhfSwKKyAgIDMsMHgwMDViLDAsezB4MDIsMHg0ZCwweGZkfSwKKyAgIDMsMHgwMDYzLDAsezB4MDIsMHg0ZSwweDA3fSwKKyAgMTYsMHgwNTAwLDAsezB4MTIsMHgwMSwweDEwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHg0MCwweDZhLDB4MDgsMHgxMSwweDAxLDB4MDAsMHgwMSwweDAxLDB4MDJ9LAorICAxNiwweDA1MTAsMCx7MHgwMCwweDAxLDB4MDksMHgwMiwweDA4LDB4MDIsMHgwNSwweDAxLDB4MDAsMHg4MCwweDMyLDB4MDksMHgwNCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MDUyMCwwLHsweDAxLDB4MDEsMHgwMCwweDAwLDB4MGEsMHgyNCwweDAxLDB4MDAsMHgwMSwweDU2LDB4MDAsMHgwMiwweDAxLDB4MDIsMHgwYywweDI0fSwKKyAgMTYsMHgwNTMwLDAsezB4MDIsMHgwMSwweDAxLDB4MDEsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDI0LDB4MDYsMHgwNSwweDAxLDB4MDJ9LAorICAxNiwweDA1NDAsMCx7MHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA5LDB4MjQsMHgwMywweDAyLDB4MDQsMHgwMywweDAwLDB4MDUsMHgwMH0sCisgIDE2LDB4MDU1MCwwLHsweDBjLDB4MjQsMHgwMiwweDAzLDB4MDUsMHgwMiwweDAwLDB4MDYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE1LDB4MjQsMHgwNiwweDA2fSwKKyAgMTYsMHgwNTYwLDAsezB4MDMsMHgwMiwweDAwLDB4MDAsMHgwMywweDAwLDB4MDMsMHgwMCwweDAzLDB4MDAsMHgwMywweDAwLDB4MDMsMHgwMCwweDAzLDB4MDB9LAorICAxNiwweDA1NzAsMCx7MHgwMCwweDA5LDB4MjQsMHgwMywweDA0LDB4MDEsMHgwMSwweDAwLDB4MDYsMHgwMCwweDA5LDB4MDQsMHgwMSwweDAwLDB4MDAsMHgwMX0sCisgIDE2LDB4MDU4MCwwLHsweDAyLDB4MDAsMHgwMCwweDA5LDB4MDQsMHgwMSwweDAxLDB4MDIsMHgwMSwweDAyLDB4MDAsMHgwMCwweDA3LDB4MjQsMHgwMSwweDAxfSwKKyAgMTYsMHgwNTkwLDAsezB4MDAsMHgwMSwweDAwLDB4MTEsMHgyNCwweDAyLDB4MDEsMHgwMiwweDAyLDB4MTAsMHgwMywweDQ0LDB4YWMsMHgwMCwweDgwLDB4YmJ9LAorICAxNiwweDA1YTAsMCx7MHgwMCwweDAwLDB4NzcsMHgwMSwweDA5LDB4MDUsMHgwYSwweDA1LDB4ODQsMHgwMSwweDAxLDB4MDAsMHg4ZiwweDA3LDB4MjUsMHgwMX0sCisgIDE2LDB4MDViMCwwLHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDksMHgwNSwweDhmLDB4MDEsMHgwMywweDAwLDB4MDEsMHgwNSwweDAwLDB4MDksMHgwNCwweDAxfSwKKyAgMTYsMHgwNWMwLDAsezB4MDIsMHgwMiwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDcsMHgyNCwweDAxLDB4MDEsMHgwMCwweDAxLDB4MDAsMHgxMSwweDI0LDB4MDJ9LAorICAxNiwweDA1ZDAsMCx7MHgwMSwweDAyLDB4MDMsMHgxOCwweDAzLDB4NDQsMHhhYywweDAwLDB4ODAsMHhiYiwweDAwLDB4MDAsMHg3NywweDAxLDB4MDksMHgwNX0sCisgIDE2LDB4MDVlMCwwLHsweDBhLDB4MDUsMHg0NiwweDAyLDB4MDEsMHgwMCwweDhmLDB4MDcsMHgyNSwweDAxLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwOSwweDA1fSwKKyAgMTYsMHgwNWYwLDAsezB4OGYsMHgwMSwweDAzLDB4MDAsMHgwMSwweDA1LDB4MDAsMHgwOSwweDA0LDB4MDIsMHgwMCwweDAwLDB4MDEsMHgwMiwweDAwLDB4MDB9LAorICAxNiwweDA2MDAsMCx7MHgwOSwweDA0LDB4MDIsMHgwMSwweDAxLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwNywweDI0LDB4MDEsMHgwNCwweDAwLDB4MDEsMHgwMH0sCisgIDE2LDB4MDYxMCwwLHsweDBlLDB4MjQsMHgwMiwweDAxLDB4MDYsMHgwMiwweDEwLDB4MDIsMHg0NCwweGFjLDB4MDAsMHg4MCwweGJiLDB4MDAsMHgwOSwweDA1fSwKKyAgMTYsMHgwNjIwLDAsezB4OGMsMHgwNSwweDRjLDB4MDIsMHgwMSwweDAwLDB4MDAsMHgwNywweDI1LDB4MDEsMHgwMCwweDAyLDB4MDAsMHgwMCwweDA5LDB4MDR9LAorICAxNiwweDA2MzAsMCx7MHgwMiwweDAyLDB4MDEsMHgwMSwweDAyLDB4MDAsMHgwMCwweDA3LDB4MjQsMHgwMSwweDA0LDB4MDAsMHgwMSwweDAwLDB4MGUsMHgyNH0sCisgIDE2LDB4MDY0MCwwLHsweDAyLDB4MDEsMHgwNiwweDAzLDB4MTgsMHgwMiwweDQ0LDB4YWMsMHgwMCwweDgwLDB4YmIsMHgwMCwweDA5LDB4MDUsMHg4YywweDA1fSwKKyAgMTYsMHgwNjUwLDAsezB4NzIsMHgwMywweDAxLDB4MDAsMHgwMCwweDA3LDB4MjUsMHgwMSwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDksMHgwNCwweDAyLDB4MDN9LAorICAxNiwweDA2NjAsMCx7MHgwMSwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDcsMHgyNCwweDAxLDB4MDQsMHgwMCwweDAxLDB4MDAsMHgxMSwweDI0LDB4MDIsMHgwMX0sCisgIDE2LDB4MDY3MCwwLHsweDAyLDB4MDIsMHgxMCwweDAzLDB4NDQsMHhhYywweDAwLDB4ODAsMHhiYiwweDAwLDB4MDAsMHg3NywweDAxLDB4MDksMHgwNSwweDhjfSwKKyAgMTYsMHgwNjgwLDAsezB4MDUsMHg4NCwweDAxLDB4MDEsMHgwMCwweDAwLDB4MDcsMHgyNSwweDAxLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwOSwweDA0LDB4MDJ9LAorICAxNiwweDA2OTAsMCx7MHgwNCwweDAxLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwNywweDI0LDB4MDEsMHgwNCwweDAwLDB4MDEsMHgwMCwweDExLDB4MjQsMHgwMn0sCisgIDE2LDB4MDZhMCwwLHsweDAxLDB4MDIsMHgwMywweDE4LDB4MDMsMHg0NCwweGFjLDB4MDAsMHg4MCwweGJiLDB4MDAsMHgwMCwweDc3LDB4MDEsMHgwOSwweDA1fSwKKyAgMTYsMHgwNmIwLDAsezB4OGMsMHgwNSwweDQ2LDB4MDIsMHgwMSwweDAwLDB4MDAsMHgwNywweDI1LDB4MDEsMHgwMCwweDAyLDB4MDAsMHgwMCwweDA5LDB4MDR9LAorICAxNiwweDA2YzAsMCx7MHgwMywweDAwLDB4MDAsMHgwMSwweDAxLDB4MDAsMHgwMCwweDA5LDB4MjQsMHgwMSwweDAwLDB4MDEsMHgwOSwweDAwLDB4MDEsMHgwNH0sCisgIDE2LDB4MDZkMCwwLHsweDA5LDB4MDQsMHgwNCwweDAwLDB4MDIsMHgwMSwweDAzLDB4MDAsMHgwMCwweDA3LDB4MjQsMHgwMSwweDAwLDB4MDEsMHgyNCwweDAwfSwKKyAgMTYsMHgwNmUwLDAsezB4MDYsMHgyNCwweDAyLDB4MDEsMHgwNywweDAwLDB4MDksMHgyNCwweDAzLDB4MDIsMHgwOCwweDAxLDB4MDcsMHgwMSwweDAwLDB4MDZ9LAorICAxNiwweDA2ZjAsMCx7MHgyNCwweDAyLDB4MDIsMHgwOSwweDAwLDB4MDksMHgyNCwweDAzLDB4MDEsMHgwYSwweDAxLDB4MDksMHgwMSwweDAwLDB4MDksMHgwNX0sCisgIDE2LDB4MDcwMCwwLHsweDAxLDB4MDIsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHgyNSwweDAxLDB4MDEsMHgwNywweDA5LDB4MDUsMHg4MSwweDAyfSwKKyAgMTYsMHgwNzEwLDAsezB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4MjUsMHgwMSwweDAxLDB4MGEsMHgwNCwweDAzLDB4MDksMHgwNCwweDE4LDB4MDN9LAorICAxNiwweDA3MjAsMCx7MHg0NSwweDAwLDB4NmQsMHgwMCwweDYxLDB4MDAsMHg2NywweDAwLDB4NjksMHgwMCwweDYzLDB4MDAsMHgyMCwweDAwLDB4NDcsMHgwMH0sCisgIDE2LDB4MDczMCwwLHsweDZkLDB4MDAsMHg2MiwweDAwLDB4NDgsMHgwMCwweDIyLDB4MDMsMHg0NSwweDAwLDB4NmQsMHgwMCwweDYxLDB4MDAsMHg2NywweDAwfSwKKyAgMTYsMHgwNzQwLDAsezB4NjksMHgwMCwweDYzLDB4MDAsMHgyMCwweDAwLDB4NDUsMHgwMCwweDRkLDB4MDAsMHg0OSwweDAwLDB4MjAsMHgwMCwweDM2LDB4MDB9LAorICAxNiwweDA3NTAsMCx7MHg3YywweDAwLDB4MzIsMHgwMCwweDIwLDB4MDAsMHg2ZCwweDAwLDB4MmEsMHgwMywweDQzLDB4MDAsMHg2ZiwweDAwLDB4NmUsMHgwMH0sCisgIDE2LDB4MDc2MCwwLHsweDY2LDB4MDAsMHg2OSwweDAwLDB4NjcsMHgwMCwweDc1LDB4MDAsMHg3MiwweDAwLDB4NjEsMHgwMCwweDc0LDB4MDAsMHg2OSwweDAwfSwKKyAgMTYsMHgwNzcwLDAsezB4NmYsMHgwMCwweDZlLDB4MDAsMHgyMCwweDAwLDB4NTMsMHgwMCwweDc0LDB4MDAsMHg3MiwweDAwLDB4NjksMHgwMCwweDZlLDB4MDB9LAorICAxNiwweDA3ODAsMCx7MHg2NywweDAwLDB4MjIsMHgwMywweDQ5LDB4MDAsMHg2ZSwweDAwLDB4NzQsMHgwMCwweDY1LDB4MDAsMHg3MiwweDAwLDB4NjYsMHgwMH0sCisgIDE2LDB4MDc5MCwwLHsweDYxLDB4MDAsMHg2MywweDAwLDB4NjUsMHgwMCwweDIwLDB4MDAsMHg1MywweDAwLDB4NzQsMHgwMCwweDcyLDB4MDAsMHg2OSwweDAwfSwKKyAgIDYsMHgwN2EwLDAsezB4NmUsMHgwMCwweDY3LDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgwN2E2LDAsezB4ZTQsMHg5MCwweDc2LDB4NjYsMHhmMCwweDEyLDB4NDQsMHhhZCwweDIwLDB4MjYsMHgxMywweDkwLDB4NzYsMHg2NiwweGUwLDB4YzN9LAorICAxNiwweDA3YjYsMCx7MHg5NCwweDAyLDB4NTAsMHgwYSwweGUwLDB4MDQsMHhmMCwweGQyLDB4NDIsMHgxMiwweDRiLDB4N2YsMHg4MCwweGVhLDB4MzAsMHgyNn0sCisgIDE2LDB4MDdjNiwwLHsweDA1LDB4MTIsMHgyOCwweDAxLDB4YzIsMHgyNiwweDMwLDB4MjUsMHgyYiwweDkwLDB4NzYsMHg5NiwweGUwLDB4NTQsMHhmYywweGYwfSwKKyAgMTYsMHgwN2Q2LDAsezB4OTAsMHg4MCwweDAzLDB4ZjAsMHgxMiwweDE0LDB4OTYsMHg5MCwweDc2LDB4OTYsMHhlMCwweDQ0LDB4MDMsMHhmMCwweDkwLDB4ODB9LAorICAxNiwweDA3ZTYsMCx7MHgwMywweGYwLDB4ZTQsMHg5MCwweDc2LDB4NjcsMHhmMCwweDkwLDB4NzYsMHg2NywweGUwLDB4MDQsMHhmMCwweGUwLDB4YjQsMHg0Yn0sCisgIDEwLDB4MDdmNiwwLHsweGY2LDB4MTIsMHg0NywweGZhLDB4MTIsMHg0MSwweDFiLDB4ODAsMHhjNSwweDIyfSwKKyAgMTYsMHgwODAwLDAsezB4ZTQsMHg5MCwweDc2LDB4MzEsMHhmMCwweDkwLDB4NzYsMHgzMSwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGZ9LAorICAxNiwweDA4MTAsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZWQsMHhlMCwweGZkLDB4ZWUsMHg2ZH0sCisgIDE2LDB4MDgyMCwwLHsweDYwLDB4MGUsMHhlZiwweGMzLDB4OTQsMHgwYiwweDUwLDB4MDgsMHg5MCwweDc2LDB4MzEsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGQ1fSwKKyAgMTYsMHgwODMwLDAsezB4ZWYsMHhiNCwweDBiLDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4ZWYsMHg3NSwweGYwLDB4MDN9LAorICAxNiwweDA4NDAsMCx7MHhhNCwweDI0LDB4MGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3NiwweDMzLDB4ZjAsMHgyNH0sCisgIDE2LDB4MDg1MCwwLHsweGYwLDB4NjAsMHgwYSwweDI0LDB4MGUsMHg2MCwweDAyLDB4ODEsMHg4NywweDEyLDB4NGIsMHhjNywweDIyLDB4OTAsMHg3ZiwweGVkfSwKKyAgMTYsMHgwODYwLDAsezB4ZTAsMHg2NCwweDA1LDB4NzAsMHg1MSwweDkwLDB4NzYsMHgxOCwweDc0LDB4MDUsMHhmMCwweDkwLDB4NzYsMHgzNywweDc0LDB4MDF9LAorICAxNiwweDA4NzAsMCx7MHhmMCwweDkwLDB4NzYsMHgzOSwweDc0LDB4MDMsMHhmMCwweDkwLDB4NzYsMHgyMSwweGYwLDB4ZTQsMHg5MCwweDc2LDB4MjAsMHhmMH0sCisgIDE2LDB4MDg4MCwwLHsweDkwLDB4N2YsMHhlYSwweGUwLDB4ZjQsMHg2MCwweDJmLDB4OTAsMHg3NiwweDIwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0fSwKKyAgMTYsMHgwODkwLDAsezB4MjQsMHhhYSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmR9LAorICAxNiwweDA4YTAsMCx7MHhlZSwweDZkLDB4NjAsMHgxMiwweDkwLDB4NzYsMHgyMSwweGUwLDB4ZmUsMHhlZiwweGMzLDB4OWUsMHg1MCwweDA4LDB4OTAsMHg3Nn0sCisgIDE2LDB4MDhiMCwwLHsweDIwLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhkMSwweDkwLDB4N2YsMHhlZCwweGUwLDB4NjQsMHgwNiwweDcwLDB4NTIsMHg5MCwweDc2fSwKKyAgMTYsMHgwOGMwLDAsezB4MTgsMHg3NCwweDA2LDB4ZjAsMHg5MCwweDc2LDB4MzcsMHg3NCwweDA0LDB4ZjAsMHg5MCwweDc2LDB4MzksMHg3NCwweDBhLDB4ZjB9LAorICAxNiwweDA4ZDAsMCx7MHg5MCwweDc2LDB4MjEsMHhmMCwweDkwLDB4NzYsMHgyMCwweDc0LDB4MDMsMHhmMCwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZjQsMHg2MH0sCisgIDE2LDB4MDhlMCwwLHsweDJmLDB4OTAsMHg3NiwweDIwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYSwweGY1LDB4ODIsMHhlNCwweDM0fSwKKyAgMTYsMHgwOGYwLDAsezB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmQsMHhlZSwweDZkLDB4NjAsMHgxMiwweDkwLDB4NzZ9LAorICAxNiwweDA5MDAsMCx7MHgyMSwweGUwLDB4ZmUsMHhlZiwweGMzLDB4OWUsMHg1MCwweDA4LDB4OTAsMHg3NiwweDIwLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhkMX0sCisgIDE2LDB4MDkxMCwwLHsweDkwLDB4NzYsMHgyMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1fSwKKyAgMTYsMHgwOTIwLDAsezB4ZjUsMHg4MywweGUwLDB4OTAsMHg3MiwweDI5LDB4ZjAsMHhlNCwweDkwLDB4NzYsMHgzYiwweGYwLDB4OTAsMHg3NiwweDIxLDB4ZTB9LAorICAxNiwweDA5MzAsMCx7MHhmZSwweGVmLDB4NmUsMHg3MCwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlYn0sCisgIDE2LDB4MDk0MCwwLHsweGUwLDB4MTQsMHg2MCwweDEzLDB4MTQsMHg3MCwweDAyLDB4MjEsMHhlMiwweDI0LDB4MDIsMHg2MCwweDAyLDB4ODEsMHg3ZiwweDkwfSwKKyAgMTYsMHgwOTUwLDAsezB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZTksMHhlMCwweDE0LDB4NzAsMHg3YywweDkwLDB4N2Z9LAorICAxNiwweDA5NjAsMCx7MHhlYSwweGUwLDB4ZjQsMHg3MCwweDQ4LDB4OTAsMHg3NiwweDM3LDB4ZTAsMHg5MCwweDc2LDB4MjAsMHhmMCwweDkwLDB4NzYsMHgzOX0sCisgIDE2LDB4MDk3MCwwLHsweGUwLDB4ZmUsMHg5MCwweDc2LDB4MjAsMHhlMCwweGZkLDB4YzMsMHg5ZSwweDUwLDB4MmIsMHg5MCwweDc2LDB4M2IsMHhlMCwweGZlfSwKKyAgMTYsMHgwOTgwLDAsezB4MDQsMHhmMCwweDc0LDB4YzAsMHgyZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2UsMHhmNSwweDgzLDB4ZTAsMHhmZSwweGVkLDB4NzV9LAorICAxNiwweDA5OTAsMCx7MHhmMCwweDBhLDB4YTQsMHgyNCwweGFiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZSwweGYwLDB4OTAsMHg3Nn0sCisgIDE2LDB4MDlhMCwwLHsweDIwLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhjNywweDkwLDB4NzYsMHgzZiwweDc0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZSwweGMwfSwKKyAgMTYsMHgwOWIwLDAsezB4ZTAsMHhmZSwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODN9LAorICAxNiwweDA5YzAsMCx7MHhlZSwweGYwLDB4ZTAsMHhiNCwweDAxLDB4MDgsMHg5MCwweDc2LDB4M2UsMHg3NCwweDAxLDB4ZjAsMHg4MCwweDA1LDB4ZTQsMHg5MH0sCisgIDE2LDB4MDlkMCwwLHsweDc2LDB4M2UsMHhmMCwweDkwLDB4NzYsMHgzZiwweDc0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxfSwKKyAgMTYsMHgwOWUwLDAsezB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHhmZSwweDcwLDB4MDIsMHg0MSwweGEzLDB4MTQsMHg3MCwweDAyLDB4NjF9LAorICAxNiwweDA5ZjAsMCx7MHgzZiwweDE0LDB4NzAsMHgwMiwweDYxLDB4ZGIsMHgyNCwweDAzLDB4NjAsMHgwMiwweDgxLDB4NzcsMHg5MCwweDdmLDB4ZWEsMHhlMH0sCisgIDE2LDB4MGEwMCwwLHsweGY0LDB4NzAsMHg2YiwweDkwLDB4NzYsMHgzNywweGUwLDB4OTAsMHg3NiwweDIwLDB4ZjAsMHg5MCwweDc2LDB4MzksMHhlMCwweGZmfSwKKyAgMTYsMHgwYTEwLDAsezB4OTAsMHg3NiwweDIwLDB4ZTAsMHhmZSwweGMzLDB4OWYsMHg1MCwweDRlLDB4OTAsMHg3NiwweDNiLDB4ZTAsMHhmZiwweDA0LDB4ZjB9LAorICAxNiwweDBhMjAsMCx7MHg3NCwweGMwLDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdlLDB4ZjUsMHg4MywweGUwLDB4ZmYsMHhlZSwweDc1LDB4ZjAsMHgwYX0sCisgIDE2LDB4MGEzMCwwLHsweGE0LDB4MjQsMHhhYywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHgzYiwweGUwfSwKKyAgMTYsMHgwYTQwLDAsezB4ZmYsMHgwNCwweGYwLDB4NzQsMHhjMCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZSwweGY1LDB4ODMsMHhlMCwweGZmLDB4ZWV9LAorICAxNiwweDBhNTAsMCx7MHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MH0sCisgIDE2LDB4MGE2MCwwLHsweDc2LDB4MjAsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGE0LDB4OTAsMHg3NiwweDQwLDB4NzQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdlfSwKKyAgMTYsMHgwYTcwLDAsezB4YzAsMHhlMCwweGZmLDB4OTAsMHg3NiwweDIwLDB4ZTAsMHhmZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYywweGY1LDB4ODJ9LAorICAxNiwweDBhODAsMCx7MHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4N2UsMHhjMSwweGUwLDB4ZmYsMHhlZSwweDc1LDB4ZjAsMHgwYX0sCisgIDE2LDB4MGE5MCwwLHsweGE0LDB4MjQsMHhhZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHg0MSwweDc0fSwKKyAgMTYsMHgwYWEwLDAsezB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmNCwweDcwLDB4NjYsMHg5MCwweDc2LDB4MzcsMHhlMCwweDkwLDB4NzZ9LAorICAxNiwweDBhYjAsMCx7MHgyMCwweGYwLDB4OTAsMHg3NiwweDM5LDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgyMCwweGUwLDB4ZmUsMHhjMywweDlmLDB4NDAsMHgwMn0sCisgIDE2LDB4MGFjMCwwLHsweDgxLDB4OGUsMHg5MCwweDc2LDB4M2IsMHhlMCwweGZmLDB4MDQsMHhmMCwweDc0LDB4YzAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0fSwKKyAgMTYsMHgwYWQwLDAsezB4N2UsMHhmNSwweDgzLDB4ZTAsMHhmZiwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFlLDB4ZjUsMHg4MiwweGU0LDB4MzR9LAorICAxNiwweDBhZTAsMCx7MHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDNiLDB4ZTAsMHhmZiwweDA0LDB4ZjAsMHg3NCwweGMwLDB4MmYsMHhmNX0sCisgIDE2LDB4MGFmMCwwLHsweDgyLDB4ZTQsMHgzNCwweDdlLDB4ZjUsMHg4MywweGUwLDB4ZmYsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZiwweGY1fSwKKyAgMTYsMHgwYjAwLDAsezB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHgyMCwweGUwLDB4MDQsMHhmMCwweDgwLDB4YTJ9LAorICAxNiwweDBiMTAsMCx7MHg5MCwweDdlLDB4YzAsMHhlMCwweGZmLDB4OTAsMHg3NiwweDIwLDB4ZTAsMHhmZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZX0sCisgIDE2LDB4MGIyMCwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4N2UsMHhjMSwweGUwLDB4ZmYsMHhlZSwweDc1fSwKKyAgMTYsMHgwYjMwLDAsezB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDIyLDB4OTB9LAorICAxNiwweDBiNDAsMCx7MHg3ZiwweGVhLDB4ZTAsMHhmNCwweDcwLDB4NjYsMHg5MCwweDc2LDB4MzcsMHhlMCwweDkwLDB4NzYsMHgyMCwweGYwLDB4OTAsMHg3Nn0sCisgIDE2LDB4MGI1MCwwLHsweDM5LDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgyMCwweGUwLDB4ZmUsMHhjMywweDlmLDB4NDAsMHgwMiwweDgxLDB4OGUsMHg5MCwweDc2fSwKKyAgMTYsMHgwYjYwLDAsezB4M2IsMHhlMCwweGZmLDB4MDQsMHhmMCwweDc0LDB4YzAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2UsMHhmNSwweDgzLDB4ZTB9LAorICAxNiwweDBiNzAsMCx7MHhmZiwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZn0sCisgIDE2LDB4MGI4MCwwLHsweGYwLDB4OTAsMHg3NiwweDNiLDB4ZTAsMHhmZiwweDA0LDB4ZjAsMHg3NCwweGMwLDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdlfSwKKyAgMTYsMHgwYjkwLDAsezB4ZjUsMHg4MywweGUwLDB4ZmYsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzV9LAorICAxNiwweDBiYTAsMCx7MHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHgyMCwweGUwLDB4MDQsMHhmMCwweDgwLDB4YTIsMHg5MCwweDdlLDB4YzAsMHhlMH0sCisgIDE2LDB4MGJiMCwwLHsweGZmLDB4OTAsMHg3NiwweDIwLDB4ZTAsMHhmZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMCwweGY1LDB4ODIsMHhlNCwweDM0fSwKKyAgMTYsMHgwYmMwLDAsezB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4N2UsMHhjMSwweGUwLDB4ZmYsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjR9LAorICAxNiwweDBiZDAsMCx7MHhiMSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmNH0sCisgIDE2LDB4MGJlMCwwLHsweDcwLDB4NjYsMHg5MCwweDc2LDB4MzcsMHhlMCwweDkwLDB4NzYsMHgyMCwweGYwLDB4OTAsMHg3NiwweDM5LDB4ZTAsMHhmZiwweDkwfSwKKyAgMTYsMHgwYmYwLDAsezB4NzYsMHgyMCwweGUwLDB4ZmUsMHhjMywweDlmLDB4NDAsMHgwMiwweDgxLDB4OGUsMHg5MCwweDc2LDB4M2IsMHhlMCwweGZmLDB4MDR9LAorICAxNiwweDBjMDAsMCx7MHhmMCwweDc0LDB4YzAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2UsMHhmNSwweDgzLDB4ZTAsMHhmZiwweGVlLDB4NzUsMHhmMH0sCisgIDE2LDB4MGMxMCwwLHsweDBhLDB4YTQsMHgyNCwweGIyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDNifSwKKyAgMTYsMHgwYzIwLDAsezB4ZTAsMHhmZiwweDA0LDB4ZjAsMHg3NCwweGMwLDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdlLDB4ZjUsMHg4MywweGUwLDB4ZmZ9LAorICAxNiwweDBjMzAsMCx7MHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMH0sCisgIDE2LDB4MGM0MCwwLHsweDkwLDB4NzYsMHgyMCwweGUwLDB4MDQsMHhmMCwweDgwLDB4YTIsMHg5MCwweDdlLDB4YzAsMHhlMCwweGZmLDB4OTAsMHg3NiwweDIwfSwKKyAgMTYsMHgwYzUwLDAsezB4ZTAsMHhmZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWZ9LAorICAxNiwweDBjNjAsMCx7MHhmMCwweDkwLDB4N2UsMHhjMSwweGUwLDB4ZmYsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMywweGY1LDB4ODIsMHhlNH0sCisgIDE2LDB4MGM3MCwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwfSwKKyAgMTUsMHgwYzgwLDAsezB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyfSwKKyAgMTYsMHgwYzhmLDAsezB4NDEsMHg3NiwweDY4LDB4MDEsMHg0MSwweDc2LDB4NmEsMHgwMiwweDQxLDB4NzYsMHg2YiwweDBhLDB4YzEsMHgyMCwweGMxLDB4MjF9LAorICAgMiwweDBjOWYsMCx7MHhjMSwweDJmfSwKKyAgIDQsMHgwY2ExLDAsezB4NDEsMHg3NiwweDIzLDB4MDB9LAorICAxNiwweDBjYTUsMCx7MHg0MSwweDcyLDB4MDEsMHgwMSwweDQ1LDB4NzIsMHgwNSwweDAwLDB4MDIsMHhjOSwweDAwLDB4MDAsMHg0NSwweDcyLDB4MGEsMHgwMH0sCisgIDE2LDB4MGNiNSwwLHsweDAxLDB4MDIsMHgwMywweDA0LDB4NGQsMHg3MiwweDBmLDB4ZDEsMHgwMCwweGQxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgwY2M1LDAsezB4MjgsMHgyOCwweDA5LDB4MDAsMHg0ZCwweDcyLDB4MWMsMHgwMSwweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDd9LAorICAxNiwweDBjZDUsMCx7MHgwOCwweDA5LDB4MGEsMHgwYiwweDQxLDB4NzIsMHgyZSwweDIyLDB4NDEsMHg3MiwweDJmLDB4MjMsMHg0MSwweDcyLDB4MzAsMHgyMH0sCisgIDE2LDB4MGNlNSwwLHsweDQxLDB4NzIsMHgzMSwweDIxLDB4NjIsMHhkMiwweDcyLDB4M2EsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgwY2Y1LDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDBkMDUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MGQxNSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgwZDI1LDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDBkMzUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MGQ0NSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgwZDU1LDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDBkNjUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MGQ3NSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxfSwKKyAgMTYsMHgwZDg1LDAsezB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDF9LAorICAxNiwweDBkOTUsMCx7MHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMX0sCisgIDE2LDB4MGRhNSwwLHsweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxfSwKKyAgMTYsMHgwZGI1LDAsezB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDJ9LAorICAxNiwweDBkYzUsMCx7MHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMn0sCisgIDE2LDB4MGRkNSwwLHsweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyfSwKKyAgMTYsMHgwZGU1LDAsezB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDJ9LAorICAxNiwweDBkZjUsMCx7MHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwM30sCisgIDE2LDB4MGUwNSwwLHsweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzfSwKKyAgMTYsMHgwZTE1LDAsezB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDN9LAorICAxNiwweDBlMjUsMCx7MHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwM30sCisgIDE2LDB4MGUzNSwwLHsweDAzLDB4MDMsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0fSwKKyAgMTYsMHgwZTQ1LDAsezB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDR9LAorICAxNiwweDBlNTUsMCx7MHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNH0sCisgIDE2LDB4MGU2NSwwLHsweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0fSwKKyAgMTYsMHgwZTc1LDAsezB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDV9LAorICAxNiwweDBlODUsMCx7MHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNX0sCisgIDE2LDB4MGU5NSwwLHsweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1fSwKKyAgMTYsMHgwZWE1LDAsezB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA2LDB4MDZ9LAorICAxNiwweDBlYjUsMCx7MHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNn0sCisgIDE2LDB4MGVjNSwwLHsweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2fSwKKyAgMTYsMHgwZWQ1LDAsezB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDZ9LAorICAxNiwweDBlZTUsMCx7MHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDcsMHgwNywweDA3LDB4MDgsMHgwOH0sCisgIDE2LDB4MGVmNSwwLHsweDA4LDB4MDksMHgwOSwweDA5LDB4MGEsMHgwYSwweDBhLDB4MGIsMHgwYiwweDBiLDB4MGMsMHgwYywweDBjLDB4MGQsMHgwZCwweDBkfSwKKyAgMTYsMHgwZjA1LDAsezB4MGUsMHgwZSwweDBlLDB4MGYsMHgwZiwweDBmLDB4MTAsMHgxMCwweDEwLDB4MTEsMHgxMSwweDExLDB4MTIsMHgxMiwweDEyLDB4MTN9LAorICAxNiwweDBmMTUsMCx7MHgxMywweDEzLDB4MTQsMHgxNCwweDE0LDB4MTUsMHgxNSwweDE1LDB4MTYsMHgxNiwweDE2LDB4MTcsMHgxNywweDE3LDB4MTgsMHgxOH0sCisgIDE2LDB4MGYyNSwwLHsweDE4LDB4MTksMHgxOSwweDE5LDB4MTksMHgxYSwweDFhLDB4MWEsMHgxYSwweDFiLDB4MWIsMHgxYiwweDFiLDB4MWMsMHgxYywweDFjfSwKKyAgMTYsMHgwZjM1LDAsezB4MWMsMHgxZCwweDFkLDB4MWQsMHgxZCwweDFlLDB4MWUsMHgxZSwweDFlLDB4MWYsMHgxZiwweDFmLDB4MWYsMHgyMCwweDIwLDB4MjB9LAorICAxNiwweDBmNDUsMCx7MHgyMSwweDIxLDB4MjEsMHgyMiwweDIyLDB4MjIsMHgyMywweDIzLDB4MjQsMHgyNCwweDI1LDB4MjUsMHgyNiwweDI2LDB4MjcsMHgyN30sCisgIDE2LDB4MGY1NSwwLHsweDI4LDB4MjgsMHgyOSwweDI5LDB4MmEsMHgyYSwweDJiLDB4MmIsMHgyYywweDJjLDB4MmQsMHgyZCwweDJlLDB4MmUsMHgyZiwweDJmfSwKKyAgMTYsMHgwZjY1LDAsezB4MzAsMHgzMCwweDMxLDB4MzEsMHgzMiwweDMyLDB4MzMsMHgzMywweDM0LDB4MzQsMHgzNSwweDM1LDB4MzYsMHgzNiwweDM3LDB4Mzd9LAorICAxNiwweDBmNzUsMCx7MHgzOCwweDM4LDB4MzksMHgzOSwweDNhLDB4M2EsMHgzYiwweDNjLDB4M2QsMHgzZSwweDNmLDB4NDAsMHg0MSwweDQyLDB4NDMsMHg0NH0sCisgIDE2LDB4MGY4NSwwLHsweDQ1LDB4NDYsMHg0NywweDQ4LDB4NDksMHg0OSwweDRhLDB4NGIsMHg0YiwweDRjLDB4NGQsMHg0ZSwweDRmLDB4NTAsMHg1MSwweDUyfSwKKyAgMTYsMHgwZjk1LDAsezB4NTMsMHg1NCwweDU1LDB4NTUsMHg1NiwweDU2LDB4NTcsMHg1NywweDU4LDB4NWEsMHg1YiwweDVkLDB4NWUsMHg1ZiwweDYxLDB4NjJ9LAorICAxNiwweDBmYTUsMCx7MHg2MywweDY0LDB4NjUsMHg2NiwweDY3LDB4NjgsMHg2OSwweDZhLDB4NmIsMHg2YywweDZkLDB4NmYsMHg3MSwweDcyLDB4NzMsMHg3NH0sCisgIDE2LDB4MGZiNSwwLHsweDc1LDB4NzYsMHg3NywweDc4LDB4NzksMHg3YSwweDdiLDB4N2MsMHg3ZSwweDgwLDB4MDEsMHgzNywweDAxLDB4MDEsMHgzOCwweDAwfSwKKyAgIDEsMHgwZmM1LDAsezB4MDB9LAorICAxNiwweDBmYzYsMCx7MHhlNCwweGZmLDB4NzQsMHg0NiwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NiwweGY1LDB4ODMsMHhlMCwweGZlLDB4NzQsMHgyMH0sCisgIDE2LDB4MGZkNiwwLHsweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlZSwweGYwLDB4NzQsMHg0ZSwweDJmLDB4ZjUsMHg4MiwweGU0fSwKKyAgMTYsMHgwZmU2LDAsezB4MzQsMHg3NiwweGY1LDB4ODMsMHhlMCwweGZlLDB4NzQsMHgzMCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODN9LAorICAgNiwweDBmZjYsMCx7MHhlZSwweGYwLDB4MGYsMHhiZiwweDA4LDB4Y2N9LAorICAgMSwweDBmZmMsMCx7MHgyMn0sCisgICAzLDB4MGZmZCwwLHsweGMyLDB4ODksMHgzMn0sCisgIDE2LDB4MTAwMCwwLHsweGU0LDB4OTAsMHg3NiwweDJjLDB4ZjAsMHg5MCwweDc2LDB4MmMsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBmfSwKKyAgMTYsMHgxMDEwLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3ZiwweGVkLDB4ZTAsMHhmZCwweGVlLDB4NmR9LAorICAxNiwweDEwMjAsMCx7MHg2MCwweDBlLDB4ZWYsMHhjMywweDk0LDB4MGIsMHg1MCwweDA4LDB4OTAsMHg3NiwweDJjLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhkNX0sCisgIDE2LDB4MTAzMCwwLHsweGVmLDB4YjQsMHgwYiwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweGVmLDB4NzUsMHhmMCwweDAzfSwKKyAgMTYsMHgxMDQwLDAsezB4YTQsMHgyNCwweDBlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4NzYsMHgyZSwweGYwLDB4MjR9LAorICAxNiwweDEwNTAsMCx7MHhmMCwweDYwLDB4MGEsMHgyNCwweDBmLDB4NjAsMHgwMiwweDgxLDB4N2QsMHgxMiwweDRiLDB4YTQsMHgyMiwweDkwLDB4N2YsMHhlZH0sCisgIDE2LDB4MTA2MCwwLHsweGUwLDB4NjQsMHgwNSwweDcwLDB4NTEsMHg5MCwweDc2LDB4MTgsMHg3NCwweDA1LDB4ZjAsMHg5MCwweDc2LDB4MzgsMHg3NCwweDAxfSwKKyAgMTYsMHgxMDcwLDAsezB4ZjAsMHg5MCwweDc2LDB4M2EsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDc2LDB4MWMsMHhmMCwweGU0LDB4OTAsMHg3NiwweDFiLDB4ZjB9LAorICAxNiwweDEwODAsMCx7MHg5MCwweDdmLDB4ZWEsMHhlMCwweGY0LDB4NjAsMHgyZiwweDkwLDB4NzYsMHgxYiwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNH0sCisgIDE2LDB4MTA5MCwwLHsweDI0LDB4YWEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGZkfSwKKyAgMTYsMHgxMGEwLDAsezB4ZWUsMHg2ZCwweDYwLDB4MTIsMHg5MCwweDc2LDB4MWMsMHhlMCwweGZlLDB4ZWYsMHhjMywweDllLDB4NTAsMHgwOCwweDkwLDB4NzZ9LAorICAxNiwweDEwYjAsMCx7MHgxYiwweGUwLDB4MDQsMHhmMCwweDgwLDB4ZDEsMHg5MCwweDdmLDB4ZWQsMHhlMCwweDY0LDB4MDYsMHg3MCwweDUyLDB4OTAsMHg3Nn0sCisgIDE2LDB4MTBjMCwwLHsweDE4LDB4NzQsMHgwNiwweGYwLDB4OTAsMHg3NiwweDM4LDB4NzQsMHgwNCwweGYwLDB4OTAsMHg3NiwweDNhLDB4NzQsMHgwYSwweGYwfSwKKyAgMTYsMHgxMGQwLDAsezB4OTAsMHg3NiwweDFjLDB4ZjAsMHg5MCwweDc2LDB4MWIsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGY0LDB4NjB9LAorICAxNiwweDEwZTAsMCx7MHgyZiwweDkwLDB4NzYsMHgxYiwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWEsMHhmNSwweDgyLDB4ZTQsMHgzNH0sCisgIDE2LDB4MTBmMCwwLHsweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGZkLDB4ZWUsMHg2ZCwweDYwLDB4MTIsMHg5MCwweDc2fSwKKyAgMTYsMHgxMTAwLDAsezB4MWMsMHhlMCwweGZlLDB4ZWYsMHhjMywweDllLDB4NTAsMHgwOCwweDkwLDB4NzYsMHgxYiwweGUwLDB4MDQsMHhmMCwweDgwLDB4ZDF9LAorICAxNiwweDExMTAsMCx7MHhlNCwweDkwLDB4NzYsMHgxZSwweGYwLDB4OTAsMHg3NiwweDFjLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgxYiwweGUwLDB4ZmUsMHg2Zn0sCisgIDE2LDB4MTEyMCwwLHsweDcwLDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGViLDB4ZTAsMHgxNCwweDYwfSwKKyAgMTYsMHgxMTMwLDAsezB4MTMsMHgxNCwweDcwLDB4MDIsMHgyMSwweGJmLDB4MjQsMHgwMiwweDYwLDB4MDIsMHg4MSwweDc1LDB4OTAsMHg3ZiwweGI0LDB4ZTB9LAorICAxNiwweDExNDAsMCx7MHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHg3ZiwweDcwLDB4NmIsMHg5MCwweDdmLDB4ZWEsMHhlMH0sCisgIDE2LDB4MTE1MCwwLHsweGY0LDB4NzAsMHg0YSwweDkwLDB4NzYsMHgzOCwweGUwLDB4OTAsMHg3NiwweDFiLDB4ZjAsMHg5MCwweDc2LDB4M2EsMHhlMCwweGZmfSwKKyAgMTYsMHgxMTYwLDAsezB4OTAsMHg3NiwweDFiLDB4ZTAsMHhmZCwweGMzLDB4OWYsMHg1MCwweDJiLDB4ZWQsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWJ9LAorICAxNiwweDExNzAsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmYsMHg5MCwweDc2LDB4MWUsMHhlMCwweGZkLDB4MDQsMHhmMH0sCisgIDE2LDB4MTE4MCwwLHsweDc0LDB4MDAsMHgyZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHgxYiwweGUwfSwKKyAgMTYsMHgxMTkwLDAsezB4MDQsMHhmMCwweDgwLDB4YzcsMHg5MCwweDc2LDB4MWUsMHhlMCwweDkwLDB4N2YsMHhiNSwweGYwLDB4MjIsMHhlZSwweDc1LDB4ZjB9LAorICAxNiwweDExYTAsMCx7MHgwYSwweGE0LDB4MjQsMHhhYiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4MDAsMHhmMH0sCisgIDE2LDB4MTFiMCwwLHsweDkwLDB4N2YsMHhiNSwweDc0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwfSwKKyAgMTYsMHgxMWMwLDAsezB4N2YsMHhlOSwweGUwLDB4MjQsMHg3ZSwweDcwLDB4MDIsMHg0MSwweDdlLDB4MTQsMHg3MCwweDAyLDB4NjEsMHgyMywweDE0LDB4NzB9LAorICAxNiwweDExZDAsMCx7MHgwMiwweDYxLDB4YzgsMHgyNCwweDAzLDB4NjAsMHgwMiwweDgxLDB4NmQsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGY0LDB4NzAsMHg2ZH0sCisgIDE2LDB4MTFlMCwwLHsweDkwLDB4NzYsMHgzOCwweGUwLDB4OTAsMHg3NiwweDFiLDB4ZjAsMHg5MCwweDc2LDB4M2EsMHhlMCwweGZmLDB4OTAsMHg3NiwweDFifSwKKyAgMTYsMHgxMWYwLDAsezB4ZTAsMHhjMywweDlmLDB4NTAsMHg0ZiwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWMsMHhmNSwweDgyLDB4ZTR9LAorICAxNiwweDEyMDAsMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDc2LDB4MWUsMHhlMCwweGZkLDB4MDQsMHhmMCwweDc0LDB4MDAsMHgyZH0sCisgIDE2LDB4MTIxMCwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZWUsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFkfSwKKyAgMTYsMHgxMjIwLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZmLDB4OTAsMHg3NiwweDFlLDB4ZTAsMHhmZSwweDA0LDB4ZjB9LAorICAxNiwweDEyMzAsMCx7MHg3NCwweDAwLDB4MmUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4MWIsMHhlMH0sCisgIDE2LDB4MTI0MCwwLHsweDA0LDB4ZjAsMHg4MCwweGE0LDB4OTAsMHg3NiwweDFlLDB4ZTAsMHg5MCwweDdmLDB4YjUsMHhmMCwweDIyLDB4OTAsMHg3NiwweDFifSwKKyAgMTYsMHgxMjUwLDAsezB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTB9LAorICAxNiwweDEyNjAsMCx7MHg5MCwweDdmLDB4MDAsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NX0sCisgIDE2LDB4MTI3MCwwLHsweGY1LDB4ODMsMHhlMCwweDkwLDB4N2YsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMiwweGYwLDB4MjIsMHg5MCwweDdmfSwKKyAgMTYsMHgxMjgwLDAsezB4ZWEsMHhlMCwweGY0LDB4NzAsMHg2ZCwweDkwLDB4NzYsMHgzOCwweGUwLDB4OTAsMHg3NiwweDFiLDB4ZjAsMHg5MCwweDc2LDB4M2F9LAorICAxNiwweDEyOTAsMCx7MHhlMCwweGZmLDB4OTAsMHg3NiwweDFiLDB4ZTAsMHhjMywweDlmLDB4NTAsMHg0ZiwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNH0sCisgIDE2LDB4MTJhMCwwLHsweDI0LDB4YWUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDc2LDB4MWUsMHhlMCwweGZkfSwKKyAgMTYsMHgxMmIwLDAsezB4MDQsMHhmMCwweDc0LDB4MDAsMHgyZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZWUsMHhmMCwweGVmLDB4NzV9LAorICAxNiwweDEyYzAsMCx7MHhmMCwweDBhLDB4YTQsMHgyNCwweGFmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZmLDB4OTAsMHg3Nn0sCisgIDE2LDB4MTJkMCwwLHsweDFlLDB4ZTAsMHhmZSwweDA0LDB4ZjAsMHg3NCwweDAwLDB4MmUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVmfSwKKyAgMTYsMHgxMmUwLDAsezB4ZjAsMHg5MCwweDc2LDB4MWIsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGE0LDB4OTAsMHg3NiwweDFlLDB4ZTAsMHg5MCwweDdmLDB4YjV9LAorICAxNiwweDEyZjAsMCx7MHhmMCwweDIyLDB4OTAsMHg3NiwweDFiLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZSwweGY1LDB4ODIsMHhlNH0sCisgIDE2LDB4MTMwMCwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4MDAsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFmfSwKKyAgMTYsMHgxMzEwLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4N2YsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzR9LAorICAxNiwweDEzMjAsMCx7MHgwMiwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGY0LDB4NzAsMHg2ZCwweDkwLDB4NzYsMHgzOCwweGUwLDB4OTAsMHg3Nn0sCisgIDE2LDB4MTMzMCwwLHsweDFiLDB4ZjAsMHg5MCwweDc2LDB4M2EsMHhlMCwweGZmLDB4OTAsMHg3NiwweDFiLDB4ZTAsMHhjMywweDlmLDB4NTAsMHg0ZiwweGUwfSwKKyAgMTYsMHgxMzQwLDAsezB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmV9LAorICAxNiwweDEzNTAsMCx7MHg5MCwweDc2LDB4MWUsMHhlMCwweGZkLDB4MDQsMHhmMCwweDc0LDB4MDAsMHgyZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNX0sCisgIDE2LDB4MTM2MCwwLHsweDgzLDB4ZWUsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fSwKKyAgMTYsMHgxMzcwLDAsezB4ODMsMHhlMCwweGZmLDB4OTAsMHg3NiwweDFlLDB4ZTAsMHhmZSwweDA0LDB4ZjAsMHg3NCwweDAwLDB4MmUsMHhmNSwweDgyLDB4ZTR9LAorICAxNiwweDEzODAsMCx7MHgzNCwweDdmLDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4MWIsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGE0LDB4OTAsMHg3Nn0sCisgIDE2LDB4MTM5MCwwLHsweDFlLDB4ZTAsMHg5MCwweDdmLDB4YjUsMHhmMCwweDIyLDB4OTAsMHg3NiwweDFiLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0fSwKKyAgMTYsMHgxM2EwLDAsezB4MjQsMHhiMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4MDAsMHhmMCwweGVmLDB4NzV9LAorICAxNiwweDEzYjAsMCx7MHhmMCwweDBhLDB4YTQsMHgyNCwweGIxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4N2YsMHgwMX0sCisgIDE2LDB4MTNjMCwwLHsweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMiwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGY0LDB4NzAsMHg2ZCwweDkwfSwKKyAgMTYsMHgxM2QwLDAsezB4NzYsMHgzOCwweGUwLDB4OTAsMHg3NiwweDFiLDB4ZjAsMHg5MCwweDc2LDB4M2EsMHhlMCwweGZmLDB4OTAsMHg3NiwweDFiLDB4ZTB9LAorICAxNiwweDEzZTAsMCx7MHhjMywweDlmLDB4NTAsMHg0ZiwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjIsMHhmNSwweDgyLDB4ZTQsMHgzNH0sCisgIDE2LDB4MTNmMCwwLHsweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDc2LDB4MWUsMHhlMCwweGZkLDB4MDQsMHhmMCwweDc0LDB4MDAsMHgyZCwweGY1fSwKKyAgMTYsMHgxNDAwLDAsezB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZWUsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIzLDB4ZjV9LAorICAxNiwweDE0MTAsMCx7MHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZmLDB4OTAsMHg3NiwweDFlLDB4ZTAsMHhmZSwweDA0LDB4ZjAsMHg3NH0sCisgIDE2LDB4MTQyMCwwLHsweDAwLDB4MmUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4MWIsMHhlMCwweDA0fSwKKyAgMTYsMHgxNDMwLDAsezB4ZjAsMHg4MCwweGE0LDB4OTAsMHg3NiwweDFlLDB4ZTAsMHg5MCwweDdmLDB4YjUsMHhmMCwweDIyLDB4OTAsMHg3NiwweDFiLDB4ZTB9LAorICAxNiwweDE0NDAsMCx7MHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MH0sCisgIDE2LDB4MTQ1MCwwLHsweDdmLDB4MDAsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIzLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fSwKKyAgMTYsMHgxNDYwLDAsezB4ODMsMHhlMCwweDkwLDB4N2YsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMiwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjR9LAorICAxNiwweDE0NzAsMCx7MHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNH0sCisgICA1LDB4MTQ4MCwwLHsweGUwLDB4NDQsMHgwMSwweGYwLDB4MjJ9LAorICAxNiwweDE0ODUsMCx7MHg3NCwweDAwLDB4ZjUsMHg4NiwweDkwLDB4ZmQsMHhhNSwweDdjLDB4MDUsMHhhMywweGU1LDB4ODIsMHg0NSwweDgzLDB4NzAsMHhmOX0sCisgICAxLDB4MTQ5NSwwLHsweDIyfSwKKyAgMTYsMHgxNDk2LDAsezB4OTAsMHg3ZiwweGQ2LDB4ZTAsMHg0NCwweDgwLDB4ZjAsMHg0MywweDg3LDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjJ9LAorICAxNiwweDE0YTYsMCx7MHhjMCwweGQwLDB4YzAsMHhlMCwweDhmLDB4ZTAsMHhjMCwweGUwLDB4OGUsMHhlMCwweGMwLDB4ZTAsMHg4ZCwweGUwLDB4YzAsMHhlMH0sCisgIDE2LDB4MTRiNiwwLHsweDhjLDB4ZTAsMHhjMCwweGUwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHgwNSwweDg2LDB4YzAsMHg4NCwweGMwLDB4ODUsMHg3ZCwweDAwfSwKKyAgMTYsMHgxNGM2LDAsezB4OTAsMHg3ZiwweGUzLDB4NzQsMHg3YiwweGYwLDB4YTMsMHg3NCwweDgwLDB4ZjAsMHg3YywweDExLDB4OTAsMHg3ZiwweDk5LDB4ZTB9LAorICAxNiwweDE0ZDYsMCx7MHg1NCwweDQwLDB4ZGMsMHgwMywweDAyLDB4MTQsMHhmMywweGI0LDB4MDAsMHgxMywweDkwLDB4N2YsMHhlMiwweDc0LDB4NDAsMHhmMH0sCisgIDE2LDB4MTRlNiwwLHsweDkwLDB4N2YsMHhlNSwweGYwLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHgwMCwweGYwLDB4MDIsMHgxNCwweGQyLDB4OTAsMHg3NiwweDkwfSwKKyAgMTYsMHgxNGY2LDAsezB4ZTAsMHhiNCwweDAxLDB4MTIsMHg5MCwweDc2LDB4OGYsMHhlMCwweDJkLDB4ZmQsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDgwLDB4ZjB9LAorICAxNiwweDE1MDYsMCx7MHg5MCwweDdmLDB4NmMsMHgwMiwweDE1LDB4NTcsMHhiNCwweDAyLDB4MTIsMHg5MCwweDc2LDB4OGYsMHhlMCwweDJkLDB4ZmQsMHg5MH0sCisgIDE2LDB4MTUxNiwwLHsweDdmLDB4ZTIsMHg3NCwweDgwLDB4ZjAsMHg5MCwweDdmLDB4NmMsMHgwMiwweDE1LDB4OTYsMHhiNCwweDAzLDB4MTIsMHg5MCwweDc2fSwKKyAgMTYsMHgxNTI2LDAsezB4OGYsMHhlMCwweDJkLDB4ZmQsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDgwLDB4ZjAsMHg5MCwweDdmLDB4NmMsMHgwMiwweDE1LDB4ZTF9LAorICAxNiwweDE1MzYsMCx7MHhiNCwweDA0LDB4MTIsMHg5MCwweDc2LDB4OGYsMHhlMCwweDJkLDB4ZmQsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDgwLDB4ZjAsMHg5MH0sCisgIDE2LDB4MTU0NiwwLHsweDdmLDB4NmMsMHgwMiwweDE2LDB4MTAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDgwLDB4ZjAsMHg5MCwweDdmLDB4NmMsMHgwMiwweDE2fSwKKyAgMTYsMHgxNTU2LDAsezB4NDAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhkZCwweGYyLDB4N2R9LAorICAxNiwweDE1NjYsMCx7MHgwMiwweDA1LDB4ODYsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjAsMHg5MCwweDdmLDB4OWIsMHhlMCwweDU0LDB4MDQsMHhiNH0sCisgIDE2LDB4MTU3NiwwLHsweDAwLDB4MDUsMHgwNSwweDg2LDB4MDIsMHgxNiwweDQwLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwLDB4MDUsMHg4NiwweGYwfSwKKyAgMTYsMHgxNTg2LDAsezB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGRkLDB4ZDQsMHgwMiwweDE2LDB4NDB9LAorICAxNiwweDE1OTYsMCx7MHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMH0sCisgIDE2LDB4MTVhNiwwLHsweGYwLDB4ZjAsMHhkZCwweGVjLDB4N2QsMHgwMiwweDA1LDB4ODYsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjAsMHg5MCwweDdmfSwKKyAgMTYsMHgxNWI2LDAsezB4OWIsMHhlMCwweDU0LDB4MDQsMHhiNCwweDAwLDB4MDUsMHgwNSwweDg2LDB4MDIsMHgxNiwweDQwLDB4OTAsMHg3ZiwweGUyLDB4NzR9LAorICAxNiwweDE1YzYsMCx7MHg4MCwweGYwLDB4MDUsMHg4NiwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMH0sCisgICA2LDB4MTVkNiwwLHsweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMH0sCisgIDE2LDB4MTVkYywwLHsweGRkLDB4Y2UsMHgwMiwweDE2LDB4NDAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGRkLDB4ZmEsMHg3ZCwweDAyLDB4MDUsMHg4NiwweDkwfSwKKyAgMTYsMHgxNWVjLDAsezB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMCwweDkwLDB4N2YsMHg5YiwweGUwLDB4NTQsMHgwNCwweGI0LDB4MDAsMHgwNSwweDA1LDB4ODZ9LAorICAxNiwweDE1ZmMsMCx7MHgwMiwweDE2LDB4NDAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDgwLDB4ZjAsMHgwNSwweDg2LDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhkZH0sCisgIDE2LDB4MTYwYywwLHsweGRjLDB4MDIsMHgxNiwweDQwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZGQsMHhmOCwweDdkLDB4MDIsMHgwNSwweDg2fSwKKyAgMTYsMHgxNjFjLDAsezB4OTAsMHg3ZiwweGUyLDB4NzQsMHgwMCwweGYwLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHg1NCwweDA0LDB4YjQsMHgwMCwweDA1LDB4MDV9LAorICAxNiwweDE2MmMsMCx7MHg4NiwweDAyLDB4MTYsMHg0MCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMCwweDA1LDB4ODYsMHhmMCwweGYwLDB4ZjAsMHhmMH0sCisgIDE2LDB4MTYzYywwLHsweGYwLDB4ZjAsMHhkZCwweGRhLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHgwMCwweGYwLDB4ZDAsMHg4NSwweGQwLDB4ODQsMHgwNSwweDg2fSwKKyAgMTYsMHgxNjRjLDAsezB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGUwLDB4ZmMsMHhkMCwweGUwLDB4ZmQsMHhkMCwweGUwLDB4ZmUsMHhkMCwweGUwLDB4ZmZ9LAorICAgNSwweDE2NWMsMCx7MHhkMCwweGUwLDB4ZDAsMHhkMCwweDIyfSwKKyAgMTYsMHgxNjYxLDAsezB4YzAsMHhkMCwweGMwLDB4ZTAsMHhjMCwweDgyLDB4YzAsMHg4MywweDkwLDB4NzYsMHg3YywweGUwLDB4OTAsMHg3ZiwweDZmLDB4ZjB9LAorICAxNiwweDE2NzEsMCx7MHg5MCwweDc2LDB4N2QsMHhlMCwweDkwLDB4N2YsMHg2ZiwweGYwLDB4OTAsMHg3NiwweDdlLDB4ZTAsMHg5MCwweDdmLDB4NmYsMHhmMH0sCisgICA5LDB4MTY4MSwwLHsweGQwLDB4ODMsMHhkMCwweDgyLDB4ZDAsMHhlMCwweGQwLDB4ZDAsMHgyMn0sCisgIDE2LDB4MTY4YSwwLHsweGMwLDB4ZDAsMHhjMCwweGUwLDB4OGYsMHhlMCwweGMwLDB4ZTAsMHg4ZSwweGUwLDB4YzAsMHhlMCwweGMwLDB4ODIsMHhjMCwweDgzfSwKKyAgMTYsMHgxNjlhLDAsezB4MDUsMHg4NiwweGMwLDB4ODQsMHhjMCwweDg1LDB4OTAsMHg3NiwweDg3LDB4ZTAsMHhmZiwweGJmLDB4MDAsMHgwMywweDAyLDB4MTd9LAorICAxNiwweDE2YWEsMCx7MHgwMSwweDkwLDB4N2YsMHg5NiwweGUwLDB4NDQsMHg4MCwweGYwLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwLDB4OTAsMHg3Zn0sCisgIDE2LDB4MTZiYSwwLHsweDYyLDB4ZTAsMHgwNSwweDg2LDB4OTAsMHg3ZiwweGUyLDB4NzQsMHgwMCwweGYwLDB4OTAsMHg3ZiwweDk2LDB4ZTAsMHg1NCwweDdmfSwKKyAgMTYsMHgxNmNhLDAsezB4ZjAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDgwLDB4ZjAsMHg5MCwweDc2LDB4OGUsMHhlMCwweGI0LDB4MDEsMHgwNSwweDA1LDB4ODZ9LAorICAxNiwweDE2ZGEsMCx7MHgwMiwweDE2LDB4ZjYsMHhiNCwweDAyLDB4MDUsMHgwNSwweDg2LDB4MDIsMHgxNiwweGViLDB4MDUsMHg4NiwweDAyLDB4MTYsMHhmYn0sCisgIDE2LDB4MTZlYSwwLHsweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGRmLDB4ZjgsMHgwMiwweDE2LDB4ZmIsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGRmfSwKKyAgMTYsMHgxNmZhLDAsezB4ZmEsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjAsMHhkMCwweDg1LDB4ZDAsMHg4NCwweDA1LDB4ODYsMHhkMCwweDgzLDB4ZDB9LAorICAxMiwweDE3MGEsMCx7MHg4MiwweGQwLDB4ZTAsMHhmZSwweGQwLDB4ZTAsMHhmZiwweGQwLDB4ZTAsMHhkMCwweGQwLDB4MjJ9LAorICAxNiwweDE3MTYsMCx7MHhjMCwweDgyLDB4YzAsMHg4MywweGMwLDB4ZTAsMHhlOCwweGMwLDB4ZTAsMHg3OCwweGQxLDB4ZTgsMHgxNCwweGY4LDB4NzAsMHhmYn0sCisgIDEwLDB4MTcyNiwwLHsweGQwLDB4ZTAsMHhmOCwweGQwLDB4ZTAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweDIyfSwKKyAgMTYsMHgxNzMwLDAsezB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweGUwLDB4ZTgsMHhjMCwweGUwLDB4NzgsMHg3OCwweGU4LDB4MTQsMHhmOCwweDcwLDB4ZmJ9LAorICAxMCwweDE3NDAsMCx7MHhkMCwweGUwLDB4ZjgsMHhkMCwweGUwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHgyMn0sCisgICA3LDB4MTc0YSwwLHsweDkwLDB4N2YsMHhjNSwweDc0LDB4MDIsMHhmMCwweDIyfSwKKyAgMTYsMHgxNzUxLDAsezB4OTAsMHg3ZSwweGMwLDB4ZTAsMHg5MCwweDc2LDB4NDUsMHhmMCwweDkwLDB4N2UsMHhjMSwweGUwLDB4OTAsMHg3NiwweDQ0LDB4ZjB9LAorICAxNiwweDE3NjEsMCx7MHg5MCwweDdlLDB4YzIsMHhlMCwweDkwLDB4NzYsMHg0MywweGYwLDB4YjQsMHgwMCwweDAzLDB4MDIsMHgxNywweDc4LDB4OTAsMHg3Nn0sCisgIDE2LDB4MTc3MSwwLHsweDE5LDB4NzQsMHgwMywweGYwLDB4MDIsMHgxNywweDhlLDB4OTAsMHg3NiwweDQ0LDB4ZTAsMHhiNCwweGJiLDB4MDksMHg5MCwweDc2fSwKKyAgMTYsMHgxNzgxLDAsezB4MTksMHg3NCwweDAyLDB4ZjAsMHgwMiwweDE3LDB4OGUsMHg5MCwweDc2LDB4MTksMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4NDJ9LAorICAgMywweDE3OTEsMCx7MHhlNCwweGYwLDB4MjJ9LAorICAgNCwweDE3OTQsMCx7MHg4ZCwweDI5LDB4OGIsMHgyYX0sCisgIDE2LDB4MTc5OCwwLHsweDEyLDB4NGEsMHg1NSwweGVhLDB4NDksMHg2MCwweDU3LDB4MTIsMHgzNiwweDkyLDB4N2UsMHgwMCwweDI5LDB4ZmYsMHhlZSwweDNhfSwKKyAgMTYsMHgxN2E4LDAsezB4YzksMHhlZiwweGM5LDB4NzUsMHgyYiwweGZmLDB4ZjUsMHgyYywweDg5LDB4MmQsMHhhYiwweDJiLDB4YWEsMHgyYywweGE5LDB4MmR9LAorICAxNiwweDE3YjgsMCx7MHg5MCwweDAwLDB4MDEsMHgxMiwweDM2LDB4YWIsMHhmZiwweDY0LDB4MDQsMHg2MCwweDA1LDB4ZWYsMHg2NCwweDA1LDB4NzAsMHgyZX0sCisgIDE2LDB4MTdjOCwwLHsweGVmLDB4YjQsMHgwNCwweDE1LDB4OTAsMHgwMCwweDAyLDB4MTIsMHgzNiwweGFiLDB4NjUsMHgyOSwweDcwLDB4MGIsMHg5MCwweDAwfSwKKyAgMTYsMHgxN2Q4LDAsezB4MDMsMHgxMiwweDM2LDB4YWIsMHg2NSwweDJhLDB4NzAsMHgwMSwweDIyLDB4MTIsMHgzNiwweDkyLDB4N2UsMHgwMCwweDI5LDB4ZmZ9LAorICAxNiwweDE3ZTgsMCx7MHhlZSwweDNhLDB4YzksMHhlZiwweGM5LDB4NzUsMHgyYiwweGZmLDB4ZjUsMHgyYywweDg5LDB4MmQsMHg4MCwweGJjLDB4N2IsMHgwMH0sCisgICA0LDB4MTdmOCwwLHsweDdhLDB4MDAsMHg3OSwweDAwfSwKKyAgIDEsMHgxN2ZjLDAsezB4MjJ9LAorICAgMywweDE3ZmQsMCx7MHhjMiwweDhiLDB4MzJ9LAorICAxNiwweDE4MDAsMCx7MHg5MCwweDc2LDB4OTAsMHhlMCwweDE0LDB4NjAsMHgzNywweDE0LDB4NzAsMHgwMiwweDAxLDB4ZDgsMHgxNCwweDcwLDB4MDIsMHgyMX0sCisgIDE2LDB4MTgxMCwwLHsweDcyLDB4MTQsMHg3MCwweDAyLDB4NDEsMHgzYiwweDI0LDB4MDQsMHg2MCwweDAyLDB4NjEsMHgwMywweDkwLDB4N2YsMHhmYywweDc0fSwKKyAgMTYsMHgxODIwLDAsezB4Y2MsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg5NSwweGUwLDB4NDQsMHgwMSwweGYwLDB4NTR9LAorICAxNiwweDE4MzAsMCx7MHgwNSwweGYwLDB4OTAsMHg4MCwweDAxLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHgxYSwweGYwLDB4YzIsMHgyZSwweDIyLDB4OTAsMHg3Nn0sCisgIDE2LDB4MTg0MCwwLHsweDk1LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0NCwweDAyLDB4ZjAsMHgzMCwweDNlLDB4MDYsMHhlMCwweDQ0LDB4MDQsMHhmMCwweDgwfSwKKyAgMTYsMHgxODUwLDAsezB4MDcsMHg5MCwweDc2LDB4OTUsMHhlMCwweDU0LDB4ZmIsMHhmMCwweDkwLDB4NzYsMHgxYSwweGUwLDB4YjQsMHgwMSwweDA4LDB4OTB9LAorICAxNiwweDE4NjAsMCx7MHg3NiwweDk1LDB4ZTAsMHg5MCwweDgwLDB4MDEsMHhmMCwweDkwLDB4NzYsMHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MjIsMHg5MH0sCisgIDE2LDB4MTg3MCwwLHsweDdmLDB4ZmMsMHg3NCwweDc0LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OGYsMHg3NCwweDJifSwKKyAgMTYsMHgxODgwLDAsezB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmQsMHhmMCwweGU0LDB4OTAsMHg3NiwweDgxLDB4ZjAsMHg5MCwweDc2LDB4ODB9LAorICAxNiwweDE4OTAsMCx7MHhmMCwweGVmLDB4YjQsMHgwMiwweDIyLDB4OTAsMHg3ZiwweGZjLDB4NzQsMHg2OCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmY30sCisgIDE2LDB4MThhMCwwLHsweGYwLDB4OTAsMHg3NiwweDhmLDB4NzQsMHgyZiwweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NCwweDAyLDB4ZjAsMHhlNCwweDkwfSwKKyAgMTYsMHgxOGIwLDAsezB4NzYsMHg4MSwweGYwLDB4OTAsMHg3NiwweDgwLDB4ZjAsMHgzMCwweDNmLDB4MDksMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmV9LAorICAxNiwweDE4YzAsMCx7MHhmMCwweDgwLDB4MDcsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmYn0sCisgIDE2LDB4MThkMCwwLHsweGYwLDB4OTAsMHg4MCwweDAyLDB4ZjAsMHhkMiwweDJlLDB4MjIsMHg5MCwweDc2LDB4OTUsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDQ0fSwKKyAgMTYsMHgxOGUwLDAsezB4MDIsMHhmMCwweDMwLDB4M2UsMHgwNiwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODAsMHgwNywweDkwLDB4NzYsMHg5NSwweGUwLDB4NTR9LAorICAxNiwweDE4ZjAsMCx7MHhmYiwweGYwLDB4OTAsMHg3NiwweDFhLDB4ZTAsMHhiNCwweDAxLDB4MDgsMHg5MCwweDc2LDB4OTUsMHhlMCwweDkwLDB4ODAsMHgwMX0sCisgIDE2LDB4MTkwMCwwLHsweGYwLDB4OTAsMHg3NiwweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDEsMHgyMiwweDkwLDB4N2YsMHhmYywweDc0LDB4MzAsMHhmMCwweDkwfSwKKyAgMTYsMHgxOTEwLDAsezB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg4ZiwweDc0LDB4MmIsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NTR9LAorICAxNiwweDE5MjAsMCx7MHhmZCwweGYwLDB4ZTQsMHg5MCwweDc2LDB4ODEsMHhmMCwweDkwLDB4NzYsMHg4MCwweGYwLDB4ZWYsMHhiNCwweDAyLDB4MjIsMHg5MH0sCisgIDE2LDB4MTkzMCwwLHsweDdmLDB4ZmMsMHg3NCwweDFjLDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OGYsMHg3NCwweDJmfSwKKyAgMTYsMHgxOTQwLDAsezB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0LDB4MDIsMHhmMCwweGU0LDB4OTAsMHg3NiwweDgxLDB4ZjAsMHg5MCwweDc2LDB4ODB9LAorICAxNiwweDE5NTAsMCx7MHhmMCwweDMwLDB4M2YsMHgwOSwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZSwweGYwLDB4ODAsMHgwNywweDkwLDB4NzYsMHg5N30sCisgIDE2LDB4MTk2MCwwLHsweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZiLDB4ZjAsMHg5MCwweDgwLDB4MDIsMHhmMCwweGQyfSwKKyAgMTYsMHgxOTcwLDAsezB4MmUsMHgyMiwweDkwLDB4NzYsMHg5NSwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDQsMHgwMiwweGYwLDB4NDQsMHgwOCwweGYwLDB4MzB9LAorICAxNiwweDE5ODAsMCx7MHgzZSwweDA2LDB4ZTAsMHg0NCwweDA0LDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg1NCwweGZiLDB4ZjAsMHg5MH0sCisgIDE2LDB4MTk5MCwwLHsweDc2LDB4MWEsMHhlMCwweGI0LDB4MDEsMHgwOCwweDkwLDB4NzYsMHg5NSwweGUwLDB4OTAsMHg4MCwweDAxLDB4ZjAsMHg5MCwweDc2fSwKKyAgMTYsMHgxOWEwLDAsezB4MTksMHhlMCwweGZmLDB4YjQsMHgwMSwweDI1LDB4OTAsMHg3ZiwweGZjLDB4NzQsMHhjYywweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzR9LAorICAxNiwweDE5YjAsMCx7MHhmYywweGYwLDB4OTAsMHg3NiwweDhmLDB4NzQsMHgyYiwweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHg1NH0sCisgIDE2LDB4MTljMCwwLHsweGZiLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4MSwweGYwLDB4OTAsMHg3NiwweDgwLDB4ZjAsMHhlZiwweGI0LDB4MDIsMHgyNSwweDkwfSwKKyAgMTYsMHgxOWQwLDAsezB4N2YsMHhmYywweDc0LDB4YzgsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg4ZiwweDc0LDB4MmZ9LAorICAxNiwweDE5ZTAsMCx7MHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NDQsMHgwMiwweGYwLDB4NTQsMHhmYiwweGYwLDB4ZTQsMHg5MCwweDc2LDB4ODEsMHhmMH0sCisgIDE2LDB4MTlmMCwwLHsweDkwLDB4NzYsMHg4MCwweGYwLDB4ZWYsMHhiNCwweDAzLDB4MjUsMHg5MCwweDdmLDB4ZmMsMHg3NCwweDk4LDB4ZjAsMHg5MCwweDdmfSwKKyAgMTYsMHgxYTAwLDAsezB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OGYsMHg3NCwweDVmLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmR9LAorICAxNiwweDFhMTAsMCx7MHhmMCwweDQ0LDB4MDQsMHhmMCwweGU0LDB4OTAsMHg3NiwweDgxLDB4ZjAsMHg5MCwweDc2LDB4ODAsMHhmMCwweDMwLDB4M2YsMHgwOX0sCisgIDE2LDB4MWEyMCwwLHsweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZSwweGYwLDB4ODAsMHgwNywweDkwLDB4NzYsMHg5NywweGUwLDB4NDQsMHgwMSwweGYwfSwKKyAgMTYsMHgxYTMwLDAsezB4OTAsMHg3NiwweDk3LDB4ZTAsMHg5MCwweDgwLDB4MDIsMHhmMCwweGQyLDB4MmUsMHgyMiwweDkwLDB4NzYsMHg5NSwweGUwLDB4NTR9LAorICAxNiwweDFhNDAsMCx7MHhmZSwweGYwLDB4NDQsMHgwMiwweGYwLDB4NDQsMHgwOCwweGYwLDB4MzAsMHgzZSwweDA2LDB4ZTAsMHg0NCwweDA0LDB4ZjAsMHg4MH0sCisgIDE2LDB4MWE1MCwwLHsweDA3LDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg1NCwweGZiLDB4ZjAsMHg5MCwweDc2LDB4MWEsMHhlMCwweGI0LDB4MDEsMHgwOCwweDkwfSwKKyAgMTYsMHgxYTYwLDAsezB4NzYsMHg5NSwweGUwLDB4OTAsMHg4MCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4MTksMHhlMCwweGZmLDB4YjQsMHgwMSwweDI1LDB4OTB9LAorICAxNiwweDFhNzAsMCx7MHg3ZiwweGZjLDB4NzQsMHhiNCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDhmLDB4NzQsMHgyYn0sCisgIDE2LDB4MWE4MCwwLHsweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHg1NCwweGZiLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4MSwweGYwfSwKKyAgMTYsMHgxYTkwLDAsezB4OTAsMHg3NiwweDgwLDB4ZjAsMHhlZiwweGI0LDB4MDIsMHgyNSwweDkwLDB4N2YsMHhmYywweDc0LDB4YjAsMHhmMCwweDkwLDB4N2Z9LAorICAxNiwweDFhYTAsMCx7MHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg4ZiwweDc0LDB4MmYsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NDQsMHgwMn0sCisgIDE2LDB4MWFiMCwwLHsweGYwLDB4NTQsMHhmYiwweGYwLDB4ZTQsMHg5MCwweDc2LDB4ODEsMHhmMCwweDkwLDB4NzYsMHg4MCwweGYwLDB4ZWYsMHhiNCwweDAzfSwKKyAgMTYsMHgxYWMwLDAsezB4MjUsMHg5MCwweDdmLDB4ZmMsMHg3NCwweDY4LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OGZ9LAorICAxNiwweDFhZDAsMCx7MHg3NCwweDVmLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmQsMHhmMCwweDQ0LDB4MDQsMHhmMCwweGU0LDB4OTAsMHg3Nn0sCisgIDE2LDB4MWFlMCwwLHsweDgxLDB4ZjAsMHg5MCwweDc2LDB4ODAsMHhmMCwweDMwLDB4M2YsMHgwOSwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZSwweGYwfSwKKyAgMTYsMHgxYWYwLDAsezB4ODAsMHgwNywweDkwLDB4NzYsMHg5NywweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg5MCwweDgwLDB4MDJ9LAorICAgNCwweDFiMDAsMCx7MHhmMCwweGQyLDB4MmUsMHgyMn0sCisgIDE2LDB4MWIwNCwwLHsweDMwLDB4MmMsMHgzOCwweGMyLDB4MmMsMHg5MCwweDc2LDB4MTksMHhlMCwweGZmLDB4YjQsMHgwMSwweDBlLDB4OTAsMHg3NiwweDdjfSwKKyAgMTYsMHgxYjE0LDAsezB4NzQsMHhjMCwweGYwLDB4YTMsMHg3NCwweDE0LDB4ZjAsMHhhMywweDc0LDB4MGIsMHhmMCwweGVmLDB4YjQsMHgwMiwweDBkLDB4ZTR9LAorICAxNiwweDFiMjQsMCx7MHg5MCwweDc2LDB4N2MsMHhmMCwweGEzLDB4NzQsMHgxMCwweGYwLDB4YTMsMHg3NCwweDBjLDB4ZjAsMHhlZiwweGI0LDB4MDMsMHgwYn0sCisgIDEyLDB4MWIzNCwwLHsweGU0LDB4OTAsMHg3NiwweDdjLDB4ZjAsMHhhMywweDc0LDB4MTgsMHhmMCwweGEzLDB4ZjAsMHgyMn0sCisgIDE2LDB4MWI0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxYjUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFiNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWI3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxYjgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFiOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWJhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxYmIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFiYzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWJkMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxYmUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFiZjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWMwMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxYzEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFjMjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWMzMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxYzQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFjNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWM2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxYzcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFjODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWM5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxY2EwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFjYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWNjMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxY2QwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFjZTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWNmMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZDAwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFkMTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWQyMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZDMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFkNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWQ1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZDYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFkNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWQ4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZDkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFkYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWRiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZGMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFkZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWRlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZGYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFlMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWUxMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZTIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFlMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWU0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZTUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFlNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWU3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZTgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFlOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWVhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTQsMHgxZWIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWViZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZWNlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFlZGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWVlZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZWZlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFmMGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWYxZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZjJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAgMiwweDFmM2UsMCx7MHgwMCwweDAwfSwKKyAgMTYsMHgxZjQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFmNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWY2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZjcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFmODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWY5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZmEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFmYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWZjMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgxZmQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDFmZTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MWZmMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMDAwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIwMTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjAyMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMDMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIwNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjA1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMDYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIwNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjA4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMDkwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIwYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjBiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMGMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIwZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjBlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMGYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIxMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjExMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMTIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIxMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjE0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMTUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIxNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjE3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMTgwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIxOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjFhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMWIwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIxYzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjFkMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMWUwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIxZjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjIwMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMjEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIyMjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjIzMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMjQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIyNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjI2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMjcwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIyODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjI5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMmEwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIyYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjJjMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMmQwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIyZTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjJmMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMzAwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIzMTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjMyMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMzMwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIzNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjM1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMzYwLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNCwweDIzNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyMzdlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIzOGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjM5ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyM2FlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIzYmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjNjZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyM2RlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDIzZWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjNmZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNDBlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI0MWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjQyZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNDNlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI0NGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjQ1ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNDZlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI0N2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjQ4ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNDllLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI0YWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjRiZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNGNlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI0ZGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjRlZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNGZlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI1MGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjUxZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNTJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI1M2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjU0ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNTVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI1NmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjU3ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNThlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI1OWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjVhZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNWJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI1Y2UsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjVkZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNWVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI1ZmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjYwZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNjFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI2MmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjYzZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNjRlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI2NWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjY2ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNjdlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI2OGUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjY5ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNmFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI2YmUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjZjZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNmRlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNCwweDI2ZWUsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNmZjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI3MGMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjcxYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNzJjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI3M2MsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4Mjc0YywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNzVjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI3NmMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4Mjc3YywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyNzhjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI3OWMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjdhYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyN2JjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAxNiwweDI3Y2MsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisgIDE2LDB4MjdkYywwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKyAgMTYsMHgyN2VjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorICAgNSwweDI3ZmMsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDIyfSwKKyAgMTYsMHgyODAxLDAsezB4YzIsMHgyMCwweGMyLDB4MjEsMHhjMiwweDJhLDB4OTAsMHg3ZiwweGU4LDB4ZTAsMHgxMiwweDM3LDB4ZjksMHgyOCwweDMwLDB4MDB9LAorICAxNiwweDI4MTEsMCx7MHgyOCwweDhjLDB4MDEsMHgyOCwweGEyLDB4MDIsMHgyYSwweDFmLDB4MjEsMHgyYSwweDZhLDB4MjIsMHgyOSwweDNkLDB4ODAsMHgyOX0sCisgIDE2LDB4MjgyMSwwLHsweDdkLDB4ODEsMHgyOSwweGQxLDB4ODIsMHgyYSwweDg0LDB4YTEsMHgyYSwweGJhLDB4YTIsMHgwMCwweDAwLDB4MmEsMHhiZiwweDkwfSwKKyAgMTYsMHgyODMxLDAsezB4N2YsMHhlOSwweGUwLDB4MTQsMHg2MCwweDExLDB4MjQsMHhmZSwweDYwLDB4MjgsMHgyNCwweGZlLDB4NjAsMHgzYiwweDI0LDB4ZmN9LAorICAxNiwweDI4NDEsMCx7MHg3MCwweDQwLDB4MTIsMHgzZiwweGU1LDB4NDEsMHhjYiwweDEyLDB4NGUsMHgxZCwweDQwLDB4MDIsMHg0MSwweGNiLDB4OTAsMHg3Zn0sCisgIDE2LDB4Mjg1MSwwLHsweGVhLDB4ZTAsMHhiNCwweDAxLDB4MDQsMHhjMiwweDIyLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfSwKKyAgMTYsMHgyODYxLDAsezB4NDEsMHhjYiwweDEyLDB4NGUsMHgxZiwweDkwLDB4N2YsMHhlYSwweGUwLDB4YjQsMHgwMSwweDA0LDB4ZDIsMHgyMiwweDQxLDB4Y2J9LAorICAxNiwweDI4NzEsMCx7MHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMH0sCisgIDE2LDB4Mjg4MSwwLHsweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0fSwKKyAgMTYsMHgyODkxLDAsezB4ZjUsMHg3MCwweDA1LDB4MTIsMHg0OCwweDYzLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDF9LAorICAxNiwweDI4YTEsMCx7MHhjYiwweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHhmZCwweDYwLDB4NTQsMHgyNCwweDAyLDB4NjAsMHgwMiwweDIxLDB4MzQsMHgxMn0sCisgIDE2LDB4MjhiMSwwLHsweDRlLDB4MWQsMHg0MCwweDAyLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhlYSwweGUwLDB4NzAsMHgzOCwweDkwLDB4N2YsMHhlYywweGUwfSwKKyAgMTYsMHgyOGMxLDAsezB4ZjQsMHg1NCwweDgwLDB4ZmYsMHhjNCwweDU0LDB4MGYsMHhmZiwweGUwLDB4NTQsMHgwNywweDJmLDB4MjUsMHhlMCwweDI0LDB4YjR9LAorICAxNiwweDI4ZDEsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg5MCwweDdmLDB4ZWMsMHhlMCwweDU0LDB4ODAsMHhmZn0sCisgIDE2LDB4MjhlMSwwLHsweDEzLDB4MTMsMHgxMywweDU0LDB4MWYsMHhmZiwweGUwLDB4NTQsMHgwNywweDJmLDB4OTAsMHg3ZiwweGQ3LDB4ZjAsMHhlMCwweDQ0fSwKKyAgMTYsMHgyOGYxLDAsezB4MjAsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2IsMHgxMiwweDRlLDB4MWZ9LAorICAxNiwweDI5MDEsMCx7MHg0MCwweDAyLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhlYSwweGUwLDB4NzAsMHgyMCwweDkwLDB4N2YsMHhlYywweGUwLDB4ZjQsMHg1NH0sCisgIDE2LDB4MjkxMSwwLHsweDgwLDB4ZmYsMHhjNCwweDU0LDB4MGYsMHhmZiwweGUwLDB4NTQsMHgwNywweDJmLDB4MjUsMHhlMCwweDI0LDB4YjQsMHhmNSwweDgyfSwKKyAgMTYsMHgyOTIxLDAsezB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweDc0LDB4MDEsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDF9LAorICAxNiwweDI5MzEsMCx7MHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4ZTksMHhlMH0sCisgIDE2LDB4Mjk0MSwwLHsweDYwLDB4MTIsMHgyNCwweGY4LDB4NjAsMHgwOSwweDI0LDB4MDIsMHg3MCwweDI5LDB4MTIsMHg0MywweGU3LDB4NDEsMHhjYiwweDEyfSwKKyAgMTYsMHgyOTUxLDAsezB4NGQsMHhjYSwweDQxLDB4Y2IsMHgxMiwweDRlLDB4MWIsMHhhMiwweDIyLDB4ZTQsMHgzMywweGZmLDB4MjUsMHhlMCwweGZmLDB4YTJ9LAorICAxNiwweDI5NjEsMCx7MHgyMywweGU0LDB4MzMsMHg0ZiwweDkwLDB4N2YsMHgwMCwweGYwLDB4ZTQsMHhhMywweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMn0sCisgIDE2LDB4Mjk3MSwwLHsweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhlOSwweGUwfSwKKyAgMTYsMHgyOTgxLDAsezB4NjAsMHgzMywweDI0LDB4ZjYsMHg2MCwweDJhLDB4MjQsMHgwNCwweDcwLDB4M2QsMHg5MCwweDdmLDB4ZWIsMHhlMCwweDI0LDB4ZGV9LAorICAxNiwweDI5OTEsMCx7MHg2MCwweDBjLDB4MDQsMHg3MCwweDEyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3Zn0sCisgIDE2LDB4MjlhMSwwLHsweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MSwweGNifSwKKyAgMTYsMHgyOWIxLDAsezB4MTIsMHg0NywweDQ1LDB4NDEsMHhjYiwweDEyLDB4NGUsMHgxYiwweGU0LDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhhMywweGYwLDB4OTB9LAorICAxNiwweDI5YzEsMCx7MHg3ZiwweGI1LDB4NzQsMHgwMiwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYn0sCisgIDE2LDB4MjlkMSwwLHsweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHhmNCwweDYwLDB4MzQsMHgyNCwweDBjLDB4NzAsMHgzOSwweDEyLDB4NGUsMHgxYiwweDkwfSwKKyAgMTYsMHgyOWUxLDAsezB4N2YsMHhlYywweGUwLDB4ZjQsMHg1NCwweDgwLDB4ZmYsMHhjNCwweDU0LDB4MGYsMHhmZiwweGUwLDB4NTQsMHgwNywweDJmLDB4MjV9LAorICAxNiwweDI5ZjEsMCx7MHhlMCwweDI0LDB4YjQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGUwLDB4NTQsMHhmZCwweDkwLDB4N2YsMHgwMH0sCisgIDE2LDB4MmEwMSwwLHsweGYwLDB4ZTQsMHhhMywweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMiwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwfSwKKyAgMTYsMHgyYTExLDAsezB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2Z9LAorICAxNiwweDJhMjEsMCx7MHhlOSwweGUwLDB4MjQsMHhmNiwweDYwLDB4MTIsMHgxNCwweDYwLDB4MWEsMHgyNCwweDAyLDB4NzAsMHgxZCwweGQyLDB4MjAsMHg5MH0sCisgIDE2LDB4MmEzMSwwLHsweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDgwLDB4MTIsMHhkMiwweDIwLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxfSwKKyAgMTYsMHgyYTQxLDAsezB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMCwweDIwLDB4MTgsMHg5MCwweDdmLDB4ZWV9LAorICAxNiwweDJhNTEsMCx7MHhlMCwweDcwLDB4MDQsMHhhMywweGUwLDB4NjAsMHgwYiwweGQyLDB4MjksMHhkMiwweDI3LDB4MTIsMHgxNywweDRhLDB4ZDIsMHgyYX0sCisgIDE2LDB4MmE2MSwwLHsweDgwLDB4MDMsMHgxMiwweDA4LDB4MDAsMHhjMiwweDIwLDB4ODAsMHg2MSwweDkwLDB4N2YsMHhlZSwweGUwLDB4NzAsMHgwNCwweGEzfSwKKyAgMTYsMHgyYTcxLDAsezB4ZTAsMHg2MCwweDBiLDB4ZDIsMHgyOSwweGQyLDB4MjgsMHgxMiwweDE3LDB4NGEsMHhkMiwweDJhLDB4ODAsMHg0YywweDEyLDB4Mzh9LAorICAxNiwweDJhODEsMCx7MHg3NCwweDgwLDB4NDcsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4ZmUsMHg2MCwweDEyLDB4MTQsMHg2MCwweDFhLDB4MjQsMHgwMn0sCisgIDE2LDB4MmE5MSwwLHsweDcwLDB4MWQsMHhkMiwweDIxLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg4MCwweDEyLDB4ZDIsMHgyMSwweDkwfSwKKyAgMTYsMHgyYWExLDAsezB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4ODAsMHgwNywweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjB9LAorICAxNiwweDJhYjEsMCx7MHgyMSwweDAzLDB4MTIsMHgxMCwweDAwLDB4YzIsMHgyMSwweDgwLDB4MTEsMHgxMiwweDJhLDB4ZDYsMHg4MCwweDBjLDB4MTIsMHg0ZX0sCisgIDE2LDB4MmFjMSwwLHsweDIxLDB4NTAsMHgwNywweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjAsMHgyYSwweDA3LDB4OTAsMHg3ZiwweGI0fSwKKyAgIDUsMHgyYWQxLDAsezB4ZTAsMHg0NCwweDAyLDB4ZjAsMHgyMn0sCisgIDE2LDB4MmFkNiwwLHsweGU0LDB4OTAsMHg3NiwweDI3LDB4ZjAsMHg5MCwweDc2LDB4MjcsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQyfSwKKyAgMTYsMHgyYWU2LDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHhmZCwweGVlLDB4NmR9LAorICAxNiwweDJhZjYsMCx7MHg2MCwweDBlLDB4ZWYsMHhjMywweDk0LDB4MDYsMHg1MCwweDA4LDB4OTAsMHg3NiwweDI3LDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhkNX0sCisgIDE2LDB4MmIwNiwwLHsweGVmLDB4YjQsMHgwNiwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweGVmLDB4NzUsMHhmMCwweDBmfSwKKyAgMTYsMHgyYjE2LDAsezB4YTQsMHgyNCwweDQxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4NzYsMHgyOCwweGYwLDB4MjR9LAorICAxNiwweDJiMjYsMCx7MHg5ZiwweDcwLDB4MDIsMHhhMSwweDc0LDB4MjQsMHgyMSwweDYwLDB4MDIsMHhhMSwweGExLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNH0sCisgIDE2LDB4MmIzNiwwLHsweDdlLDB4NzAsMHgwMiwweDYxLDB4ZmMsMHgxNCwweDcwLDB4MDIsMHg4MSwweGI1LDB4MjQsMHgwMiwweDYwLDB4MDIsMHhhMSwweDZjfSwKKyAgMTYsMHgyYjQ2LDAsezB4ZWYsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmN9LAorICAxNiwweDJiNTYsMCx7MHhhMywweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHg3YiwweDQ0LDB4N2EsMHhhYywweDc5LDB4MDAsMHg3OH0sCisgIDE2LDB4MmI2NiwwLHsweDAwLDB4YzMsMHgxMiwweDM3LDB4YWIsMHg3MCwweDEzLDB4OTAsMHg3ZiwweDAwLDB4NzQsMHg0NCwweGYwLDB4YTMsMHg3NCwweGFjfSwKKyAgMTYsMHgyYjc2LDAsezB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDc2LDB4MjcsMHhlMCwweDc1LDB4ZjB9LAorICAxNiwweDJiODYsMCx7MHgwZiwweGE0LDB4MjQsMHg0MywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmYywweGEzLDB4ZTAsMHhmZH0sCisgIDE2LDB4MmI5NiwwLHsweGEzLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDdiLDB4ODAsMHg3YSwweGJiLDB4NzksMHgwMCwweDc4LDB4MDAsMHhjMywweDEyfSwKKyAgMTYsMHgyYmE2LDAsezB4MzcsMHhhYiwweDcwLDB4MTMsMHg5MCwweDdmLDB4MDAsMHg3NCwweDgwLDB4ZjAsMHhhMywweDc0LDB4YmIsMHhmMCwweGU0LDB4YTN9LAorICAxNiwweDJiYjYsMCx7MHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDMsMHhmMCwweDkwLDB4NzYsMHgyNywweGUwLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNH0sCisgIDE2LDB4MmJjNiwwLHsweDQzLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZjLDB4YTMsMHhlMCwweGZkLDB4YTMsMHhlMCwweGZlfSwKKyAgMTYsMHgyYmQ2LDAsezB4YTMsMHhlMCwweGZmLDB4N2IsMHgwMCwweDdhLDB4NzcsMHg3OSwweDAxLDB4NzgsMHgwMCwweGMzLDB4MTIsMHgzNywweGFiLDB4NjB9LAorICAxNiwweDJiZTYsMCx7MHgwMiwweGExLDB4YTgsMHg5MCwweDdmLDB4MDAsMHhmMCwweGEzLDB4NzQsMHg3NywweGYwLDB4YTMsMHg3NCwweDAxLDB4ZjAsMHg5MH0sCisgIDE2LDB4MmJmNiwwLHsweDdmLDB4YjUsMHg3NCwweDAzLDB4ZjAsMHgyMiwweDkwLDB4NzYsMHgyNywweGUwLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQ3fSwKKyAgMTYsMHgyYzA2LDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZjLDB4YTMsMHhlMCwweGZkLDB4YTMsMHhlMCwweGZlLDB4YTN9LAorICAxNiwweDJjMTYsMCx7MHhlMCwweGZmLDB4N2IsMHg0NCwweDdhLDB4YWMsMHg3OSwweDAwLDB4NzgsMHgwMCwweGMzLDB4MTIsMHgzNywweGFiLDB4NzAsMHgxM30sCisgIDE2LDB4MmMyNiwwLHsweDkwLDB4N2YsMHgwMCwweDc0LDB4NDQsMHhmMCwweGEzLDB4NzQsMHhhYywweGYwLDB4ZTQsMHhhMywweGYwLDB4OTAsMHg3ZiwweGI1fSwKKyAgMTYsMHgyYzM2LDAsezB4NzQsMHgwMywweGYwLDB4OTAsMHg3NiwweDI3LDB4ZTAsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDcsMHhmNSwweDgyLDB4ZTR9LAorICAxNiwweDJjNDYsMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmMsMHhhMywweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHg3Yn0sCisgIDE2LDB4MmM1NiwwLHsweDgwLDB4N2EsMHhiYiwweDc5LDB4MDAsMHg3OCwweDAwLDB4YzMsMHgxMiwweDM3LDB4YWIsMHg3MCwweDEzLDB4OTAsMHg3ZiwweDAwfSwKKyAgMTYsMHgyYzY2LDAsezB4NzQsMHg4MCwweGYwLDB4YTMsMHg3NCwweGJiLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAzLDB4ZjB9LAorICAxNiwweDJjNzYsMCx7MHg5MCwweDc2LDB4MjcsMHhlMCwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0NywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX0sCisgIDE2LDB4MmM4NiwwLHsweDgzLDB4ZTAsMHhmYywweGEzLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDdiLDB4MDAsMHg3YSwweDc3fSwKKyAgMTYsMHgyYzk2LDAsezB4NzksMHgwMSwweDc4LDB4MDAsMHhjMywweDEyLDB4MzcsMHhhYiwweDYwLDB4MDIsMHhhMSwweGE4LDB4OTAsMHg3ZiwweDAwLDB4ZjB9LAorICAxNiwweDJjYTYsMCx7MHhhMywweDc0LDB4NzcsMHhmMCwweGEzLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMywweGYwLDB4MjIsMHg5MH0sCisgIDE2LDB4MmNiNiwwLHsweDc2LDB4MjcsMHhlMCwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0YiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzfSwKKyAgMTYsMHgyY2M2LDAsezB4ZTAsMHhmYywweGEzLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDdiLDB4NDQsMHg3YSwweGFjLDB4Nzl9LAorICAxNiwweDJjZDYsMCx7MHgwMCwweDc4LDB4MDAsMHhjMywweDEyLDB4MzcsMHhhYiwweDcwLDB4MTMsMHg5MCwweDdmLDB4MDAsMHg3NCwweDQ0LDB4ZjAsMHhhM30sCisgIDE2LDB4MmNlNiwwLHsweDc0LDB4YWMsMHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDMsMHhmMCwweDkwLDB4NzYsMHgyNywweGUwfSwKKyAgMTYsMHgyY2Y2LDAsezB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDRiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZjLDB4YTN9LAorICAxNiwweDJkMDYsMCx7MHhlMCwweGZkLDB4YTMsMHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4N2IsMHg4MCwweDdhLDB4YmIsMHg3OSwweDAwLDB4NzgsMHgwMH0sCisgIDE2LDB4MmQxNiwwLHsweGMzLDB4MTIsMHgzNywweGFiLDB4NzAsMHgxMywweDkwLDB4N2YsMHgwMCwweDc0LDB4ODAsMHhmMCwweGEzLDB4NzQsMHhiYiwweGYwfSwKKyAgMTYsMHgyZDI2LDAsezB4ZTQsMHhhMywweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMywweGYwLDB4OTAsMHg3NiwweDI3LDB4ZTAsMHg3NSwweGYwLDB4MGZ9LAorICAxNiwweDJkMzYsMCx7MHhhNCwweDI0LDB4NGIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmMsMHhhMywweGUwLDB4ZmQsMHhhM30sCisgIDE2LDB4MmQ0NiwwLHsweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHg3YiwweDAwLDB4N2EsMHg3NywweDc5LDB4MDEsMHg3OCwweDAwLDB4YzMsMHgxMiwweDM3fSwKKyAgMTYsMHgyZDU2LDAsezB4YWIsMHg3MCwweDRmLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhhMywweDc0LDB4NzcsMHhmMCwweGEzLDB4NzQsMHgwMSwweGYwLDB4OTB9LAorICAxNiwweDJkNjYsMCx7MHg3ZiwweGI1LDB4NzQsMHgwMywweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3Zn0sCisgIDE2LDB4MmQ3NiwwLHsweGU5LDB4ZTAsMHgyNCwweDdmLDB4NzAsMHgxZSwweDkwLDB4NzYsMHgyNywweGUwLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDRmfSwKKyAgMTYsMHgyZDg2LDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4N2YsMHgwMCwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzR9LAorICAxNiwweDJkOTYsMCx7MHgwMSwweGYwLDB4ODAsMHgwNywweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NH0sCisgICAzLDB4MmRhNiwwLHsweDAxLDB4ZjAsMHgyMn0sCisgIDE2LDB4MmRhOSwwLHsweGU0LDB4OTAsMHg3NiwweDM2LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBlLDB4ZjUsMHg4MiwweGU0fSwKKyAgMTYsMHgyZGI5LDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAxLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZiwweGY1LDB4ODJ9LAorICAxNiwweDJkYzksMCx7MHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMSwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MTAsMHhmNX0sCisgIDE2LDB4MmRkOSwwLHsweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmfSwKKyAgMTYsMHgyZGU5LDAsezB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDEwLDB4ZjB9LAorICAxNiwweDJkZjksMCx7MHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwNX0sCisgIDE2LDB4MmUwOSwwLHsweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MTAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGU0fSwKKyAgMTYsMHgyZTE5LDAsezB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBlLDB4ZjV9LAorICAxNiwweDJlMjksMCx7MHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAyLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZn0sCisgIDE2LDB4MmUzOSwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMiwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0fSwKKyAgMTYsMHgyZTQ5LDAsezB4MTAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjB9LAorICAxNiwweDJlNTksMCx7MHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NH0sCisgIDE2LDB4MmU2OSwwLHsweDAxLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzfSwKKyAgMTYsMHgyZTc5LDAsezB4NzQsMHgwMywweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MTAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9LAorICAxNiwweDJlODksMCx7MHg4MywweGU0LDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNH0sCisgIDE2LDB4MmU5OSwwLHsweDBlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDEwLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0fSwKKyAgMTYsMHgyZWE5LDAsezB4MjQsMHgwZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwNiwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDN9LAorICAxNiwweDJlYjksMCx7MHhhNCwweDI0LDB4MTAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMH0sCisgIDE2LDB4MmVjOSwwLHsweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fSwKKyAgMTYsMHgyZWQ5LDAsezB4ODMsMHg3NCwweDAyLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzV9LAorICAxNiwweDJlZTksMCx7MHhmNSwweDgzLDB4NzQsMHgwNCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MTAsMHhmNSwweDgyLDB4ZTQsMHgzNH0sCisgIDE2LDB4MmVmOSwwLHsweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzfSwKKyAgMTYsMHgyZjA5LDAsezB4YTQsMHgyNCwweDBlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAyLDB4ZjAsMHhlZiwweDc1LDB4ZjB9LAorICAxNiwweDJmMTksMCx7MHgwMywweGE0LDB4MjQsMHgwZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwOCwweGYwLDB4ZWYsMHg3NX0sCisgIDE2LDB4MmYyOSwwLHsweGYwLDB4MDMsMHhhNCwweDI0LDB4MTAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDQsMHhmMCwweDkwfSwKKyAgMTYsMHgyZjM5LDAsezB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGUsMHhmNSwweDgyLDB4ZTR9LAorICAxNiwweDJmNDksMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDIsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBmLDB4ZjUsMHg4Mn0sCisgIDE2LDB4MmY1OSwwLHsweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDBhLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgxMCwweGY1fSwKKyAgMTYsMHgyZjY5LDAsezB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwNCwweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTB9LAorICAxNiwweDJmNzksMCx7MHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMn0sCisgIDE2LDB4MmY4OSwwLHsweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0fSwKKyAgMTYsMHgyZjk5LDAsezB4MDksMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDEwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODN9LAorICAxNiwweDJmYTksMCx7MHg3NCwweDA0LDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNH0sCisgIDE2LDB4MmZiOSwwLHsweDBlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAyLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0fSwKKyAgMTYsMHgyZmM5LDAsezB4MjQsMHgwZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwNywweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDN9LAorICAxNCwweDJmZDksMCx7MHhhNCwweDI0LDB4MTAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDQsMHhmMCwweDIyfSwKKyAgMTYsMHgyZmU3LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4ZDIsMHgyNiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MDF9LAorICAgOCwweDJmZjcsMCx7MHhmMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgIDEsMHgyZmZmLDAsezB4MzJ9LAorICAxNiwweDMwMDAsMCx7MHg5MCwweDdmLDB4YjYsMHhlMCwweDIwLDB4ZTEsMHgwMiwweGMyLDB4M2QsMHhkMiwweDM2LDB4MjAsMHgzNiwweDAyLDB4NDEsMHg2ZX0sCisgIDE2LDB4MzAxMCwwLHsweDMwLDB4M2QsMHgwMiwweDQxLDB4NmUsMHg5MCwweDgwLDB4MDcsMHhlMCwweDYwLDB4MDQsMHhkMiwweDM2LDB4ODAsMHgwMiwweGMyfSwKKyAgMTYsMHgzMDIwLDAsezB4MzYsMHgyMCwweDM2LDB4MDIsMHg0MSwweDJlLDB4ZDIsMHgzNSwweGU0LDB4ZjUsMHgxYSwweDkwLDB4ODAsMHgwNCwweGUwLDB4ZjV9LAorICAxNiwweDMwMzAsMCx7MHgxOSwweDc0LDB4MDgsMHgyNSwweDBlLDB4ZjgsMHhhNiwweDE5LDB4ODUsMHgxOSwweDE4LDB4ZTUsMHgxOCwweDIwLDB4ZTcsMHgwNH0sCisgIDE2LDB4MzA0MCwwLHsweGQyLDB4MzgsMHg4MCwweDAyLDB4YzIsMHgzOCwweDMwLDB4MzgsMHgwMiwweDIxLDB4ZDQsMHhlNCwweGY1LDB4MTYsMHhlNSwweDE5fSwKKyAgMTYsMHgzMDUwLDAsezB4YjQsMHhmMCwweDBjLDB4ZDIsMHgzOSwweDc1LDB4MDgsMHgwNCwweDc1LDB4MDksMHhmMCwweDA1LDB4MGUsMHg4MCwweDAyLDB4MDV9LAorICAxNiwweDMwNjAsMCx7MHgxNiwweGU1LDB4MTksMHg2NCwweGY3LDB4NzAsMHgzZCwweGMyLDB4MzksMHhlNSwweDBlLDB4MjQsMHhmZSwweDYwLDB4MTcsMHgxNH0sCisgIDE2LDB4MzA3MCwwLHsweDYwLDB4MjIsMHgyNCwweDAzLDB4NzAsMHgyOSwweDc1LDB4MDgsMHgwNSwweDc1LDB4MDksMHhmNywweGU0LDB4ZjUsMHgwYSwweGY1fSwKKyAgMTYsMHgzMDgwLDAsezB4MGIsMHg3NSwweDBlLDB4MDQsMHg4MCwweDIwLDB4NzUsMHgwOCwweDA2LDB4NzUsMHgwYSwweGY3LDB4ZTQsMHhmNSwweDBiLDB4NzV9LAorICAxNiwweDMwOTAsMCx7MHgwZSwweDA0LDB4ODAsMHgxMiwweDc1LDB4MDgsMHgwNywweDc1LDB4MGIsMHhmNywweDc1LDB4MGUsMHgwNCwweDgwLDB4MDcsMHgxMn0sCisgIDE2LDB4MzBhMCwwLHsweDRkLDB4ZGEsMHg4MCwweDAyLDB4MDUsMHgxNiwweGU1LDB4MTksMHg1NCwweGY4LDB4NjQsMHhmOCwweDcwLDB4M2IsMHhjMiwweDM1fSwKKyAgMTYsMHgzMGIwLDAsezB4ZTUsMHgxOSwweDI0LDB4MDcsMHg2MCwweDBjLDB4MjQsMHhmYywweDYwLDB4MDgsMHgyNCwweDA1LDB4MjQsMHhmOCwweDUwLDB4MDZ9LAorICAxNiwweDMwYzAsMCx7MHg4MCwweDA4LDB4ZDIsMHgzYSwweDgwLDB4MDYsMHhjMiwweDNhLDB4ODAsMHgwMiwweGQyLDB4M2EsMHg3NSwweDFhLDB4MDEsMHgyMH0sCisgIDE2LDB4MzBkMCwwLHsweDNhLDB4MTksMHg5MCwweDdlLDB4ODAsMHg3NCwweDBmLDB4ZjAsMHhhMywweGU1LDB4MTksMHhmMCwweGU0LDB4YTMsMHhmMCwweGEzfSwKKyAgMTYsMHgzMGUwLDAsezB4ZjAsMHg5MCwweDdmLDB4YjcsMHg3NCwweDA0LDB4ZjAsMHg4MCwweDAyLDB4MDUsMHgxNiwweDIwLDB4MzksMHg2ZCwweGU1LDB4MTl9LAorICAxNiwweDMwZjAsMCx7MHg2NCwweGY3LDB4NjAsMHg2NywweGU1LDB4MWEsMHg3MCwweDYzLDB4ZTUsMHgxOCwweDU0LDB4ZjAsMHg2NCwweGYwLDB4NzAsMHg1OX0sCisgIDE2LDB4MzEwMCwwLHsweDg1LDB4MTgsMHgxOSwweGY1LDB4MGUsMHhlNSwweDE5LDB4MjQsMHgwZiwweDYwLDB4MWIsMHgyNCwweGZlLDB4NjAsMHgxNywweDI0fSwKKyAgMTYsMHgzMTEwLDAsezB4ZmQsMHg2MCwweDIyLDB4MTQsMHg2MCwweDFmLDB4MjQsMHgwNSwweDcwLDB4MmYsMHg3NSwweDA4LDB4MDMsMHgwNSwweDBlLDB4ODV9LAorICAxNiwweDMxMjAsMCx7MHgxOCwweDA5LDB4ZDIsMHgzNywweDgwLDB4MjgsMHg3NSwweDA4LDB4MDIsMHgwNSwweDBlLDB4ODUsMHgxOCwweDA5LDB4NzUsMHgxNH0sCisgIDE2LDB4MzEzMCwwLHsweDAxLDB4ZDIsMHgzNywweDgwLDB4MTksMHg3NSwweDA4LDB4MDUsMHgwNSwweDBlLDB4ODUsMHgxOCwweDA5LDB4ZTQsMHhmNSwweDBhfSwKKyAgMTYsMHgzMTQwLDAsezB4ZjUsMHgwYiwweDc1LDB4MGUsMHgwMywweGQyLDB4MzcsMHg4MCwweDA1LDB4MTIsMHg0ZCwweGRhLDB4YzIsMHgzNSwweDMwLDB4MzV9LAorICAxNiwweDMxNTAsMCx7MHgwYSwweDg1LDB4MDgsMHgxMywweDg1LDB4MTgsMHgxMiwweDgwLDB4MDIsMHgwNSwweDE2LDB4ODUsMHgxOCwweDE5LDB4ZTUsMHgxNn0sCisgIDE2LDB4MzE2MCwwLHsweDY0LDB4MDQsMHg3MCwweDYyLDB4ZjUsMHgwZSwweGU1LDB4MTksMHg1NCwweGYwLDB4ZjUsMHgxOSwweGY1LDB4MTUsMHg4NSwweDE4fSwKKyAgMTYsMHgzMTcwLDAsezB4MTksMHhlNSwweDE1LDB4MjQsMHg3MCwweDYwLDB4MTgsMHgyNCwweGYwLDB4NjAsMHgxNCwweDI0LDB4ZjAsMHg2MCwweDEwLDB4MjR9LAorICAxNiwweDMxODAsMCx7MHhmMCwweDYwLDB4MWUsMHgyNCwweGYwLDB4NjAsMHgxYSwweDI0LDB4ZjAsMHg2MCwweDA0LDB4MjQsMHg2MCwweDcwLDB4MjcsMHhlNX0sCisgIDE2LDB4MzE5MCwwLHsweDE1LDB4YzQsMHg1NCwweDBmLDB4ZjUsMHgxOSwweGY1LDB4MDgsMHgwNSwweDBlLDB4ODUsMHgxOCwweDA5LDB4ZDIsMHgzNywweDgwfSwKKyAgMTYsMHgzMWEwLDAsezB4MWEsMHhlNSwweDE1LDB4YzQsMHg1NCwweDBmLDB4ZjUsMHgxOSwweGY1LDB4MDgsMHgwNSwweDBlLDB4ODUsMHgxOCwweDA5LDB4NzV9LAorICAxNiwweDMxYjAsMCx7MHgxNCwweDAxLDB4ZDIsMHgzNywweDgwLDB4MDUsMHgxMiwweDRkLDB4ZGEsMHhjMiwweDM1LDB4MzAsMHgzNSwweDBhLDB4ODUsMHgxOX0sCisgIDE2LDB4MzFjMCwwLHsweDEzLDB4ODUsMHgxOCwweDEyLDB4ODAsMHgwMiwweDA1LDB4MTYsMHhlNSwweDE2LDB4ZDMsMHg5NCwweDA1LDB4NDAsMHg1NywweDEyfSwKKyAgMTYsMHgzMWQwLDAsezB4NGQsMHhkYSwweDgwLDB4NTIsMHgzMCwweDM5LDB4MTcsMHhlNSwweDBlLDB4NzAsMHgwYSwweDg1LDB4MDgsMHgwOSwweDc1LDB4MDh9LAorICAxNiwweDMxZTAsMCx7MHgwNCwweDA1LDB4MGUsMHg4MCwweDQxLDB4NzQsMHgwOCwweDI1LDB4MGUsMHhmOCwweGE2LDB4MTksMHg4MCwweDM4LDB4MjAsMHgzN30sCisgIDE2LDB4MzFmMCwwLHsweDJhLDB4ZTUsMHgwZSwweGI0LDB4MDEsMHgwZiwweDg1LDB4MDgsMHgwYSwweDg1LDB4MDksMHgwYiwweDg1LDB4MTMsMHgwOCwweDg1fSwKKyAgMTYsMHgzMjAwLDAsezB4MTIsMHgwOSwweDc1LDB4MGUsMHgwNCwweGU1LDB4MTQsMHhiNCwweDAxLDB4MWMsMHg4NSwweDA4LDB4MGEsMHhlNCwweGY1LDB4MGJ9LAorICAxNiwweDMyMTAsMCx7MHg4NSwweDEzLDB4MDgsMHg4NSwweDEyLDB4MDksMHg3NSwweDBlLDB4MDQsMHg4MCwweDBiLDB4ZTUsMHgxNCwweGI0LDB4MDEsMHgwNn0sCisgIDE2LDB4MzIyMCwwLHsweGU0LDB4ZjUsMHgwYiwweDc1LDB4MGUsMHgwNCwweGU0LDB4ZjUsMHgxYSwweDMwLDB4MzUsMHgwMiwweDA1LDB4MGUsMHhlNSwweDBlfSwKKyAgMTYsMHgzMjMwLDAsezB4ZDMsMHg5NCwweDAzLDB4NTAsMHgwMiwweDAxLDB4MGIsMHhjMiwweDM3LDB4ZTQsMHhmNSwweDBlLDB4ZjUsMHgxMCwweGMyLDB4MzZ9LAorICAxNiwweDMyNDAsMCx7MHhkMiwweDNkLDB4ZjUsMHgxNCwweDc0LDB4MDgsMHgyNSwweDEwLDB4ZjgsMHhlNiwweGZmLDB4NzQsMHg4MCwweDI1LDB4MTAsMHhmNX0sCisgIDE2LDB4MzI1MCwwLHsweDgyLDB4ZTQsMHgzNCwweDdlLDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg3NCwweDA4LDB4MjUsMHgxMCwweGY4LDB4ZTQsMHhmNiwweDA1fSwKKyAgMTUsMHgzMjYwLDAsezB4MTAsMHhlNSwweDEwLDB4YjQsMHgwNCwweGRlLDB4OTAsMHg3ZiwweGI3LDB4NzQsMHgwNCwweGYwLDB4MDEsMHgwYiwweDIyfSwKKyAgMTYsMHgzMjZmLDAsezB4OTAsMHg3NiwweDE4LDB4ZTAsMHhmZiwweDY0LDB4MDUsMHg3MCwweDQyLDB4OTAsMHg3NSwweGFiLDB4ZTAsMHhiNCwweDAxLDB4MTl9LAorICAxNiwweDMyN2YsMCx7MHg5MCwweDcyLDB4MzcsMHg3NCwweDAxLDB4ZjAsMHhlNCwweDkwLDB4ODAsMHgyMCwweGYwLDB4OTAsMHg4MCwweDMxLDB4ZjAsMHg5MH0sCisgIDE2LDB4MzI4ZiwwLHsweDgwLDB4MjgsMHhmMCwweDkwLDB4ODAsMHgzOSwweGYwLDB4ODAsMHgyMiwweGU0LDB4OTAsMHg3MiwweDM3LDB4ZjAsMHg5MCwweDc1fSwKKyAgMTYsMHgzMjlmLDAsezB4YWQsMHhlMCwweDkwLDB4NzIsMHgyYiwweGYwLDB4ZTAsMHgyNCwweDgwLDB4ZjAsMHhlMCwweDkwLDB4ODAsMHgyMCwweGYwLDB4OTB9LAorICAxNiwweDMyYWYsMCx7MHg4MCwweDMxLDB4ZjAsMHg5MCwweDgwLDB4MjgsMHhmMCwweDkwLDB4ODAsMHgzOSwweGYwLDB4ZWYsMHg2NCwweDA2LDB4NjAsMHgwMn0sCisgIDE2LDB4MzJiZiwwLHsweDgxLDB4OTksMHg5MCwweDcyLDB4MzksMHg3NCwweDA0LDB4ZjAsMHg5MCwweDcyLDB4MzksMHhlMCwweGZmLDB4MjQsMHhmZSwweDkwfSwKKyAgMTYsMHgzMmNmLDAsezB4NzIsMHgwNCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9LAorICAxNiwweDMyZGYsMCx7MHg4MywweGUwLDB4NjQsMHgwMSwweDcwLDB4NTQsMHg5MCwweDcyLDB4MzYsMHgwNCwweGYwLDB4OTAsMHg3MiwweDA0LDB4ZTAsMHhmZn0sCisgIDE2LDB4MzJlZiwwLHsweDI0LDB4ZmQsMHg2MCwweDI4LDB4MjQsMHhmZSwweDYwLDB4MjQsMHgyNCwweDAzLDB4MjQsMHhmYiwweDUwLDB4MDQsMHg2MCwweDFjfSwKKyAgMTYsMHgzMmZmLDAsezB4ODEsMHg4YywweDc0LDB4MjAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDc0LDB4Mjh9LAorICAxNiwweDMzMGYsMCx7MHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDgxLDB4OGMsMHg5MCwweDcyLDB4MDQsMHhlMH0sCisgIDE2LDB4MzMxZiwwLHsweGZmLDB4MjQsMHgzMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDc0LDB4MzgsMHgyZiwweGY1fSwKKyAgMTYsMHgzMzJmLDAsezB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDgxLDB4OGMsMHhlNCwweDkwLDB4NzIsMHgzNiwweGYwLDB4OTB9LAorICAxNiwweDMzM2YsMCx7MHg3MiwweDM5LDB4ZTAsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4M30sCisgIDE2LDB4MzM0ZiwwLHsweGUwLDB4ZmYsMHg3ZSwweDAwLDB4OTAsMHg3NSwweDBjLDB4ZWUsMHhmMCwweGEzLDB4ZWYsMHhmMCwweDcwLDB4MDYsMHg5MCwweDcyfSwKKyAgMTYsMHgzMzVmLDAsezB4MDIsMHg3NCwweDNiLDB4ZjAsMHg5MCwweDc1LDB4MGMsMHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4NjQsMHg4MCwweDRlLDB4NzB9LAorICAxNiwweDMzNmYsMCx7MHgwNCwweDkwLDB4NzIsMHgwMiwweGYwLDB4ZWYsMHg0ZSwweDcwLDB4MDIsMHg4MSwweDM1LDB4ZWYsMHg2NCwweDgwLDB4NGUsMHg3MH0sCisgIDE2LDB4MzM3ZiwwLHsweDAyLDB4ODEsMHgzNSwweGVmLDB4ZjgsMHhlNCwweDkwLDB4NzUsMHgwZCwweGYwLDB4ZTgsMHg5MCwweDc1LDB4MGMsMHhmMCwweDkwfSwKKyAgMTYsMHgzMzhmLDAsezB4NzIsMHgzNCwweGUwLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODN9LAorICAxNiwweDMzOWYsMCx7MHhlMCwweGZmLDB4OTAsMHg3MiwweDAyLDB4ZjAsMHg5MCwweDc1LDB4MGQsMHhlMCwweDJmLDB4ZjAsMHg5MCwweDc1LDB4MGMsMHhlMH0sCisgIDE2LDB4MzNhZiwwLHsweDM0LDB4MDAsMHhmMCwweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHhlNCwweGZjLDB4ZmQsMHg3YiwweGQ2LDB4N2EsMHhhNSwweGY5fSwKKyAgMTYsMHgzM2JmLDAsezB4ZjgsMHhkMywweDEyLDB4MzcsMHg5NSwweDQwLDB4MGEsMHg5MCwweDc1LDB4MGMsMHg3NCwweGE1LDB4ZjAsMHhhMywweDc0LDB4ZDZ9LAorICAxNiwweDMzY2YsMCx7MHhmMCwweDkwLDB4NzUsMHgwZCwweGUwLDB4MjQsMHgyYSwweGYwLDB4OTAsMHg3NSwweDBjLDB4ZTAsMHgzNCwweDVhLDB4ZjAsMHhlMH0sCisgIDE2LDB4MzNkZiwwLHsweGZlLDB4YTMsMHhlMCwweDc4LDB4MDUsMHhjZSwweGEyLDB4ZTcsMHgxMywweGNlLDB4MTMsMHhkOCwweGY4LDB4ZmYsMHg5MCwweDc1fSwKKyAgMTYsMHgzM2VmLDAsezB4MGMsMHhlZSwweGYwLDB4YTMsMHhlZiwweGYwLDB4OTAsMHg3MiwweDJjLDB4ZWUsMHhmMCwweGEzLDB4ZWYsMHhmMCwweGQzLDB4OTR9LAorICAxNiwweDMzZmYsMCx7MHhkMiwweGVlLDB4NjQsMHg4MCwweDk0LDB4ODIsMHg0MCwweDBhLDB4OTAsMHg3MiwweDJjLDB4NzQsMHgwMiwweGYwLDB4YTMsMHg3NH0sCisgIDE2LDB4MzQwZiwwLHsweGQyLDB4ZjAsMHhjMywweDkwLDB4NzIsMHgyYywweGUwLDB4NjQsMHg4MCwweDk0LDB4ODAsMHg1MCwweDA0LDB4ZTQsMHhmMCwweGEzfSwKKyAgMTYsMHgzNDFmLDAsezB4ZjAsMHg5MCwweDcyLDB4MmMsMHhlMCwweGZlLDB4YTMsMHhlMCwweDI0LDB4M2EsMHhmNSwweDgyLDB4ZWUsMHgzNCwweDcyLDB4ZjV9LAorICAxNiwweDM0MmYsMCx7MHg4MywweGUwLDB4OTAsMHg3MiwweDAyLDB4ZjAsMHg5MCwweDcyLDB4MDQsMHhlMCwweGZmLDB4MjQsMHhmZCwweDYwLDB4MmQsMHgyNH0sCisgIDE2LDB4MzQzZiwwLHsweGZlLDB4NjAsMHgyOSwweDI0LDB4MDMsMHgyNCwweGZiLDB4NTAsMHgwNCwweDYwLDB4MjEsMHg4MCwweDQwLDB4OTAsMHg3MiwweDAyfSwKKyAgMTYsMHgzNDRmLDAsezB4ZTAsMHhmZSwweDc0LDB4MjAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZWUsMHhmMCwweDc0LDB4Mjh9LAorICAxNiwweDM0NWYsMCx7MHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZWUsMHhmMCwweDgwLDB4MjEsMHg5MCwweDcyLDB4MDIsMHhlMH0sCisgIDE2LDB4MzQ2ZiwwLHsweGZmLDB4OTAsMHg3MiwweDA0LDB4ZTAsMHhmZSwweDI0LDB4MzAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGVmfSwKKyAgMTYsMHgzNDdmLDAsezB4ZjAsMHg3NCwweDM4LDB4MmUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDcyLDB4Mzl9LAorICAxMSwweDM0OGYsMCx7MHhlMCwweDA0LDB4ZjAsMHhlMCwweDY0LDB4MGEsMHg2MCwweDAyLDB4NDEsMHhjNywweDIyfSwKKyAgMTYsMHgzNDlhLDAsezB4OTAsMHg3NiwweDE4LDB4ZTAsMHhmZiwweGI0LDB4MDUsMHgyMywweDkwLDB4NzIsMHgzNywweGUwLDB4NzAsMHgxZCwweDkwLDB4NzV9LAorICAxNiwweDM0YWEsMCx7MHhhZCwweGUwLDB4OTAsMHg3MiwweDJiLDB4ZjAsMHhlMCwweDI0LDB4ODAsMHhmMCwweGUwLDB4OTAsMHg4MCwweDIwLDB4ZjAsMHg5MH0sCisgIDE2LDB4MzRiYSwwLHsweDgwLDB4MzEsMHhmMCwweDkwLDB4ODAsMHgyOCwweGYwLDB4OTAsMHg4MCwweDM5LDB4ZjAsMHhlZiwweDY0LDB4MDYsMHg2MCwweDAyfSwKKyAgMTYsMHgzNGNhLDAsezB4YzEsMHg5MSwweDkwLDB4NzIsMHgzNiwweGUwLDB4NjAsMHgwMiwweGMxLDB4OTEsMHg5MCwweDc2LDB4NDAsMHhlMCwweDcwLDB4MzF9LAorICAxNiwweDM0ZGEsMCx7MHg5MCwweDcyLDB4MDMsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDcyLDB4MDMsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNH0sCisgIDE2LDB4MzRlYSwwLHsweGFhLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3MiwweDI5LDB4ZTAsMHhmZCwweGVlfSwKKyAgMTYsMHgzNGZhLDAsezB4NmQsMHg2MCwweDBlLDB4ZWYsMHhjMywweDk0LDB4MGEsMHg1MCwweDA4LDB4OTAsMHg3MiwweDAzLDB4ZTAsMHgwNCwweGYwLDB4ODB9LAorICAxNiwweDM1MGEsMCx7MHhkNSwweDkwLDB4NzIsMHgzOSwweDc0LDB4MDQsMHhmMCwweDkwLDB4NzYsMHg0MCwweGUwLDB4NzAsMHgwOCwweDkwLDB4NzIsMHgwM30sCisgIDE2LDB4MzUxYSwwLHsweGUwLDB4OTAsMHg3MiwweDM5LDB4ZjAsMHg5MCwweDcyLDB4MzksMHhlMCwweGZkLDB4MjQsMHhmZSwweDkwLDB4NzIsMHgyYSwweGYwfSwKKyAgMTYsMHgzNTJhLDAsezB4ZWQsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmZ9LAorICAxNiwweDM1M2EsMCx7MHg3ZSwweDAwLDB4OTAsMHg3NSwweDBjLDB4ZWUsMHhmMCwweGEzLDB4ZWYsMHhmMCwweDcwLDB4MDYsMHg5MCwweDcyLDB4MDIsMHg3NH0sCisgIDE2LDB4MzU0YSwwLHsweDgwLDB4ZjAsMHg5MCwweDc1LDB4MGMsMHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4NjQsMHg4MCwweDRlLDB4NzAsMHgwNCwweDkwfSwKKyAgMTYsMHgzNTVhLDAsezB4NzIsMHgwMiwweGYwLDB4ZWYsMHg0ZSwweDcwLDB4MDIsMHhjMSwweDFiLDB4ZWYsMHg2NCwweDgwLDB4NGUsMHg3MCwweDAyLDB4YzF9LAorICAxNiwweDM1NmEsMCx7MHgxYiwweGVmLDB4ZjgsMHhlNCwweDkwLDB4NzUsMHgwZCwweGYwLDB4ZTgsMHg5MCwweDc1LDB4MGMsMHhmMCwweGVkLDB4NzUsMHhmMH0sCisgIDE2LDB4MzU3YSwwLHsweDBhLDB4YTQsMHgyNCwweGFjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZmLDB4OTAsMHg3MiwweDAyfSwKKyAgMTYsMHgzNThhLDAsezB4ZjAsMHg5MCwweDc1LDB4MGQsMHhlMCwweDJmLDB4ZjAsMHg5MCwweDc1LDB4MGMsMHhlMCwweDM0LDB4MDAsMHhmMCwweGUwLDB4ZmV9LAorICAxNiwweDM1OWEsMCx7MHhhMywweGUwLDB4ZmYsMHhlNCwweGZjLDB4ZmQsMHg3YiwweGQ2LDB4N2EsMHhhNSwweGY5LDB4ZjgsMHhkMywweDEyLDB4MzcsMHg5NX0sCisgIDE2LDB4MzVhYSwwLHsweDQwLDB4MGEsMHg5MCwweDc1LDB4MGMsMHg3NCwweGE1LDB4ZjAsMHhhMywweDc0LDB4ZDYsMHhmMCwweDkwLDB4NzUsMHgwZCwweGUwfSwKKyAgMTYsMHgzNWJhLDAsezB4MjQsMHgyYSwweGYwLDB4OTAsMHg3NSwweDBjLDB4ZTAsMHgzNCwweDVhLDB4ZjAsMHhlMCwweGZlLDB4YTMsMHhlMCwweDc4LDB4MDV9LAorICAxNiwweDM1Y2EsMCx7MHhjZSwweGEyLDB4ZTcsMHgxMywweGNlLDB4MTMsMHhkOCwweGY4LDB4ZmYsMHg5MCwweDc1LDB4MGMsMHhlZSwweGYwLDB4YTMsMHhlZn0sCisgIDE2LDB4MzVkYSwwLHsweGYwLDB4OTAsMHg3MiwweDJjLDB4ZWUsMHhmMCwweGEzLDB4ZWYsMHhmMCwweGQzLDB4OTQsMHhkMiwweGVlLDB4NjQsMHg4MCwweDk0fSwKKyAgMTYsMHgzNWVhLDAsezB4ODIsMHg0MCwweDBhLDB4OTAsMHg3MiwweDJjLDB4NzQsMHgwMiwweGYwLDB4YTMsMHg3NCwweGQyLDB4ZjAsMHhjMywweDkwLDB4NzJ9LAorICAxNiwweDM1ZmEsMCx7MHgyYywweGUwLDB4NjQsMHg4MCwweDk0LDB4ODAsMHg1MCwweDA0LDB4ZTQsMHhmMCwweGEzLDB4ZjAsMHg5MCwweDcyLDB4MmMsMHhlMH0sCisgIDE2LDB4MzYwYSwwLHsweGZlLDB4YTMsMHhlMCwweDI0LDB4M2EsMHhmNSwweDgyLDB4ZWUsMHgzNCwweDcyLDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3MiwweDAyfSwKKyAgMTYsMHgzNjFhLDAsezB4ZjAsMHg5MCwweDcyLDB4MmEsMHhlMCwweGZmLDB4MjQsMHhmZCwweDYwLDB4MmQsMHgyNCwweGZlLDB4NjAsMHgyOSwweDI0LDB4MDN9LAorICAxNiwweDM2MmEsMCx7MHgyNCwweGZiLDB4NTAsMHgwNCwweDYwLDB4MjEsMHg4MCwweDQwLDB4OTAsMHg3MiwweDAyLDB4ZTAsMHhmZSwweDc0LDB4MjAsMHgyZn0sCisgIDE2LDB4MzYzYSwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZWUsMHhmMCwweDc0LDB4MjgsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0fSwKKyAgMTYsMHgzNjRhLDAsezB4ODAsMHhmNSwweDgzLDB4ZWUsMHhmMCwweDgwLDB4MjEsMHg5MCwweDcyLDB4MDIsMHhlMCwweGZmLDB4OTAsMHg3MiwweDJhLDB4ZTB9LAorICAxNiwweDM2NWEsMCx7MHhmZSwweDI0LDB4MzAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg3NCwweDM4LDB4MmUsMHhmNX0sCisgIDE2LDB4MzY2YSwwLHsweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4NDAsMHhlMCwweDcwLDB4MDYsMHg5MCwweDcyfSwKKyAgMTYsMHgzNjdhLDAsezB4MzksMHg3NCwweDBhLDB4ZjAsMHg5MCwweDcyLDB4MzksMHhlMCwweDA0LDB4ZjAsMHhlMCwweGMzLDB4OTQsMHgwYSwweDUwLDB4MDJ9LAorICAgOCwweDM2OGEsMCx7MHhhMSwweDExLDB4ZTQsMHg5MCwweDc2LDB4NDAsMHhmMCwweDIyfSwKKyAgMTYsMHgzNjkyLDAsezB4YmIsMHgwMSwweDA2LDB4ODksMHg4MiwweDhhLDB4ODMsMHhlMCwweDIyLDB4NTAsMHgwMiwweGU3LDB4MjIsMHhiYiwweGZlLDB4MDJ9LAorICAgOSwweDM2YTIsMCx7MHhlMywweDIyLDB4ODksMHg4MiwweDhhLDB4ODMsMHhlNCwweDkzLDB4MjJ9LAorICAxNiwweDM2YWIsMCx7MHhiYiwweDAxLDB4MGMsMHhlNSwweDgyLDB4MjksMHhmNSwweDgyLDB4ZTUsMHg4MywweDNhLDB4ZjUsMHg4MywweGUwLDB4MjIsMHg1MH0sCisgIDE2LDB4MzZiYiwwLHsweDA2LDB4ZTksMHgyNSwweDgyLDB4ZjgsMHhlNiwweDIyLDB4YmIsMHhmZSwweDA2LDB4ZTksMHgyNSwweDgyLDB4ZjgsMHhlMiwweDIyfSwKKyAgMTMsMHgzNmNiLDAsezB4ZTUsMHg4MiwweDI5LDB4ZjUsMHg4MiwweGU1LDB4ODMsMHgzYSwweGY1LDB4ODMsMHhlNCwweDkzLDB4MjJ9LAorICAxNiwweDM2ZDgsMCx7MHhjMiwweGQ1LDB4ZWMsMHgzMCwweGU3LDB4MDksMHhiMiwweGQ1LDB4ZTQsMHhjMywweDlkLDB4ZmQsMHhlNCwweDljLDB4ZmMsMHhlZX0sCisgIDE2LDB4MzZlOCwwLHsweDMwLDB4ZTcsMHgxNSwweGIyLDB4ZDUsMHhlNCwweGMzLDB4OWYsMHhmZiwweGU0LDB4OWUsMHhmZSwweDEyLDB4MzgsMHgxZiwweGMzfSwKKyAgMTYsMHgzNmY4LDAsezB4ZTQsMHg5ZCwweGZkLDB4ZTQsMHg5YywweGZjLDB4ODAsMHgwMywweDEyLDB4MzgsMHgxZiwweDMwLDB4ZDUsMHgwNywweGMzLDB4ZTR9LAorICAgNiwweDM3MDgsMCx7MHg5ZiwweGZmLDB4ZTQsMHg5ZSwweGZlLDB4MjJ9LAorICAxNiwweDM3MGUsMCx7MHhiYiwweDAxLDB4MTAsMHhlNSwweDgyLDB4MjksMHhmNSwweDgyLDB4ZTUsMHg4MywweDNhLDB4ZjUsMHg4MywweGUwLDB4ZjUsMHhmMH0sCisgIDE2LDB4MzcxZSwwLHsweGEzLDB4ZTAsMHgyMiwweDUwLDB4MDksMHhlOSwweDI1LDB4ODIsMHhmOCwweDg2LDB4ZjAsMHgwOCwweGU2LDB4MjIsMHhiYiwweGZlfSwKKyAgMTYsMHgzNzJlLDAsezB4MGEsMHhlOSwweDI1LDB4ODIsMHhmOCwweGUyLDB4ZjUsMHhmMCwweDA4LDB4ZTIsMHgyMiwweGU1LDB4ODMsMHgyYSwweGY1LDB4ODN9LAorICAgOCwweDM3M2UsMCx7MHhlOSwweDkzLDB4ZjUsMHhmMCwweGEzLDB4ZTksMHg5MywweDIyfSwKKyAgMTYsMHgzNzQ2LDAsezB4ZTgsMHg4ZiwweGYwLDB4YTQsMHhjYywweDhiLDB4ZjAsMHhhNCwweDJjLDB4ZmMsMHhlOSwweDhlLDB4ZjAsMHhhNCwweDJjLDB4ZmN9LAorICAxNiwweDM3NTYsMCx7MHg4YSwweGYwLDB4ZWQsMHhhNCwweDJjLDB4ZmMsMHhlYSwweDhlLDB4ZjAsMHhhNCwweGNkLDB4YTgsMHhmMCwweDhiLDB4ZjAsMHhhNH0sCisgIDE2LDB4Mzc2NiwwLHsweDJkLDB4Y2MsMHgzOCwweDI1LDB4ZjAsMHhmZCwweGU5LDB4OGYsMHhmMCwweGE0LDB4MmMsMHhjZCwweDM1LDB4ZjAsMHhmYywweGVifSwKKyAgMTYsMHgzNzc2LDAsezB4OGUsMHhmMCwweGE0LDB4ZmUsMHhhOSwweGYwLDB4ZWIsMHg4ZiwweGYwLDB4YTQsMHhjZiwweGM1LDB4ZjAsMHgyZSwweGNkLDB4Mzl9LAorICAxNSwweDM3ODYsMCx7MHhmZSwweGU0LDB4M2MsMHhmYywweGVhLDB4YTQsMHgyZCwweGNlLDB4MzUsMHhmMCwweGZkLDB4ZTQsMHgzYywweGZjLDB4MjJ9LAorICAxNiwweDM3OTUsMCx7MHhlYiwweDlmLDB4ZjUsMHhmMCwweGVhLDB4OWUsMHg0MiwweGYwLDB4ZTksMHg5ZCwweDQyLDB4ZjAsMHhlYywweDY0LDB4ODAsMHhjOH0sCisgICA2LDB4MzdhNSwwLHsweDY0LDB4ODAsMHg5OCwweDQ1LDB4ZjAsMHgyMn0sCisgIDE2LDB4MzdhYiwwLHsweGViLDB4OWYsMHhmNSwweGYwLDB4ZWEsMHg5ZSwweDQyLDB4ZjAsMHhlOSwweDlkLDB4NDIsMHhmMCwweGU4LDB4OWMsMHg0NSwweGYwfSwKKyAgIDEsMHgzN2JiLDAsezB4MjJ9LAorICAxMiwweDM3YmMsMCx7MHhlYywweGYwLDB4YTMsMHhlZCwweGYwLDB4YTMsMHhlZSwweGYwLDB4YTMsMHhlZiwweGYwLDB4MjJ9LAorICAxNiwweDM3YzgsMCx7MHhhOCwweDgyLDB4ODUsMHg4MywweGYwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHgxMiwweDM3LDB4ZGYsMHgxMiwweDM3LDB4ZGYsMHgxMn0sCisgIDE2LDB4MzdkOCwwLHsweDM3LDB4ZGYsMHgxMiwweDM3LDB4ZGYsMHhlNCwweDczLDB4ZTQsMHg5MywweGEzLDB4YzUsMHg4MywweGM1LDB4ZjAsMHhjNSwweDgzfSwKKyAgMTYsMHgzN2U4LDAsezB4YzgsMHhjNSwweDgyLDB4YzgsMHhmMCwweGEzLDB4YzUsMHg4MywweGM1LDB4ZjAsMHhjNSwweDgzLDB4YzgsMHhjNSwweDgyLDB4Yzh9LAorICAgMSwweDM3ZjgsMCx7MHgyMn0sCisgIDE2LDB4MzdmOSwwLHsweGQwLDB4ODMsMHhkMCwweDgyLDB4ZjgsMHhlNCwweDkzLDB4NzAsMHgxMiwweDc0LDB4MDEsMHg5MywweDcwLDB4MGQsMHhhMywweGEzfSwKKyAgMTYsMHgzODA5LDAsezB4OTMsMHhmOCwweDc0LDB4MDEsMHg5MywweGY1LDB4ODIsMHg4OCwweDgzLDB4ZTQsMHg3MywweDc0LDB4MDIsMHg5MywweDY4LDB4NjB9LAorICAgNiwweDM4MTksMCx7MHhlZiwweGEzLDB4YTMsMHhhMywweDgwLDB4ZGZ9LAorICAxNiwweDM4MWYsMCx7MHhiYywweDAwLDB4MGIsMHhiZSwweDAwLDB4MjksMHhlZiwweDhkLDB4ZjAsMHg4NCwweGZmLDB4YWQsMHhmMCwweDIyLDB4ZTQsMHhjY30sCisgIDE2LDB4MzgyZiwwLHsweGY4LDB4NzUsMHhmMCwweDA4LDB4ZWYsMHgyZiwweGZmLDB4ZWUsMHgzMywweGZlLDB4ZWMsMHgzMywweGZjLDB4ZWUsMHg5ZCwweGVjfSwKKyAgMTYsMHgzODNmLDAsezB4OTgsMHg0MCwweDA1LDB4ZmMsMHhlZSwweDlkLDB4ZmUsMHgwZiwweGQ1LDB4ZjAsMHhlOSwweGU0LDB4Y2UsMHhmZCwweDIyLDB4ZWR9LAorICAxNiwweDM4NGYsMCx7MHhmOCwweGY1LDB4ZjAsMHhlZSwweDg0LDB4MjAsMHhkMiwweDFjLDB4ZmUsMHhhZCwweGYwLDB4NzUsMHhmMCwweDA4LDB4ZWYsMHgyZn0sCisgIDE2LDB4Mzg1ZiwwLHsweGZmLDB4ZWQsMHgzMywweGZkLDB4NDAsMHgwNywweDk4LDB4NTAsMHgwNiwweGQ1LDB4ZjAsMHhmMiwweDIyLDB4YzMsMHg5OCwweGZkfSwKKyAgIDUsMHgzODZmLDAsezB4MGYsMHhkNSwweGYwLDB4ZWEsMHgyMn0sCisgIDE2LDB4Mzg3NCwwLHsweGU0LDB4OTAsMHg3NiwweDI5LDB4ZjAsMHg5MCwweDc2LDB4MjksMHhlMCwweGZmLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQyfSwKKyAgMTYsMHgzODg0LDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHhmZCwweGVlLDB4NmR9LAorICAxNiwweDM4OTQsMCx7MHg2MCwweDBlLDB4ZWYsMHhjMywweDk0LDB4MDYsMHg1MCwweDA4LDB4OTAsMHg3NiwweDI5LDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhkNX0sCisgIDE2LDB4MzhhNCwwLHsweGVmLDB4YjQsMHgwNiwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweGVmLDB4NzUsMHhmMCwweDBmfSwKKyAgMTYsMHgzOGI0LDAsezB4YTQsMHgyNCwweDQxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4NzYsMHgyYSwweGYwLDB4MjR9LAorICAxNiwweDM4YzQsMCx7MHhiZiwweDcwLDB4MDIsMHg0MSwweDQxLDB4MjQsMHhlMCwweDcwLDB4MDIsMHg0MSwweDEyLDB4MjQsMHgyMSwweDYwLDB4MDIsMHg0MX0sCisgIDE2LDB4MzhkNCwwLHsweDNhLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNCwweGZlLDB4NjAsMHg3ZCwweDE0LDB4NzAsMHgwMiwweDIxLDB4YjIsMHgyNCwweDAyfSwKKyAgMTYsMHgzOGU0LDAsezB4NjAsMHgwMiwweDQxLDB4MGEsMHgxMiwweDE3LDB4NTEsMHg5MCwweDc2LDB4NDIsMHhlMCwweGZjLDB4YTMsMHhlMCwweGZkLDB4YTN9LAorICAxNiwweDM4ZjQsMCx7MHhlMCwweGZlLDB4YTMsMHhlMCwweGZmLDB4OTAsMHg3NiwweDI5LDB4ZTAsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDMsMHhmNX0sCisgIDE2LDB4MzkwNCwwLHsweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDEyLDB4MzcsMHhiYywweDkwLDB4NzYsMHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxfSwKKyAgMTYsMHgzOTE0LDAsezB4MTIsMHg5MCwweDc2LDB4N2MsMHg3NCwweDY3LDB4ZjAsMHg5MCwweDc2LDB4N2QsMHg3NCwweDA2LDB4ZjAsMHg5MCwweDc2LDB4N2V9LAorICAxNiwweDM5MjQsMCx7MHg3NCwweDBiLDB4ZjAsMHhlZiwweGI0LDB4MDIsMHgwZiwweGU0LDB4OTAsMHg3NiwweDdjLDB4ZjAsMHg5MCwweDc2LDB4N2QsMHhmMH0sCisgIDE2LDB4MzkzNCwwLHsweDkwLDB4NzYsMHg3ZSwweDc0LDB4MGMsMHhmMCwweGVmLDB4YjQsMHgwMywweDBmLDB4ZTQsMHg5MCwweDc2LDB4N2MsMHhmMCwweDkwfSwKKyAgMTYsMHgzOTQ0LDAsezB4NzYsMHg3ZCwweGYwLDB4OTAsMHg3NiwweDdlLDB4NzQsMHgxOCwweGYwLDB4OTAsMHg3NiwweDFhLDB4NzQsMHgwMSwweGYwLDB4MTJ9LAorICAxNiwweDM5NTQsMCx7MHgzZSwweDlmLDB4MTIsMHgxOCwweDAwLDB4MjIsMHg5MCwweDdlLDB4YzIsMHhlMCwweGZmLDB4ZTQsMHhmYywweGZkLDB4ZmUsMHhmYn0sCisgIDE2LDB4Mzk2NCwwLHsweGZhLDB4NzksMHgwMSwweGY4LDB4MTIsMHgzNywweDQ2LDB4YzgsMHhlYywweGM4LDB4YzksMHhlZCwweGM5LDB4Y2EsMHhlZSwweGNhfSwKKyAgMTYsMHgzOTc0LDAsezB4Y2IsMHhlZiwweGNiLDB4OTAsMHg3ZSwweGMxLDB4ZTAsMHhmZSwweGU0LDB4ZmMsMHhmZCwweDJiLDB4ZmIsMHhlYSwweDNlLDB4ZmF9LAorICAxNiwweDM5ODQsMCx7MHhlZCwweDM5LDB4ZjksMHhlYywweDM4LDB4ZjgsMHg5MCwweDdlLDB4YzAsMHhlMCwweGZmLDB4ZTQsMHhmZSwweGViLDB4MmYsMHhmZn0sCisgIDE2LDB4Mzk5NCwwLHsweGVlLDB4M2EsMHhmZSwweGVkLDB4MzksMHhmZCwweGVjLDB4MzgsMHhmYywweDkwLDB4NzYsMHgyOSwweGUwLDB4NzUsMHhmMCwweDBmfSwKKyAgMTYsMHgzOWE0LDAsezB4YTQsMHgyNCwweDQ3LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHgxMiwweDM3LDB4YmMsMHgyMiwweDkwLDB4N2V9LAorICAxNiwweDM5YjQsMCx7MHhjMiwweGUwLDB4ZmYsMHhlNCwweGZjLDB4ZmQsMHhmZSwweGZiLDB4ZmEsMHg3OSwweDAxLDB4ZjgsMHgxMiwweDM3LDB4NDYsMHhjOH0sCisgIDE2LDB4MzljNCwwLHsweGVjLDB4YzgsMHhjOSwweGVkLDB4YzksMHhjYSwweGVlLDB4Y2EsMHhjYiwweGVmLDB4Y2IsMHg5MCwweDdlLDB4YzEsMHhlMCwweGZlfSwKKyAgMTYsMHgzOWQ0LDAsezB4ZTQsMHhmYywweGZkLDB4MmIsMHhmYiwweGVhLDB4M2UsMHhmYSwweGVkLDB4MzksMHhmOSwweGVjLDB4MzgsMHhmOCwweDkwLDB4N2V9LAorICAxNiwweDM5ZTQsMCx7MHhjMCwweGUwLDB4ZmYsMHhlNCwweGZlLDB4ZWIsMHgyZiwweGZmLDB4ZWUsMHgzYSwweGZlLDB4ZWQsMHgzOSwweGZkLDB4ZWMsMHgzOH0sCisgIDE2LDB4MzlmNCwwLHsweGZjLDB4OTAsMHg3NiwweDI5LDB4ZTAsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NGIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1fSwKKyAgMTYsMHgzYTA0LDAsezB4ZjUsMHg4MywweDEyLDB4MzcsMHhiYywweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2Z9LAorICAxNiwweDNhMTQsMCx7MHhlOSwweGUwLDB4MTQsMHg3MCwweDE5LDB4OTAsMHg3ZSwweGMwLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgyOSwweGUwLDB4NzUsMHhmMH0sCisgIDE2LDB4M2EyNCwwLHsweDBmLDB4YTQsMHgyNCwweDRmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4MjIsMHg5MCwweDdmfSwKKyAgMTQsMHgzYTM0LDAsezB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMn0sCisgIDE2LDB4M2E0MiwwLHsweGU0LDB4OTAsMHg3NiwweDM1LDB4ZjAsMHg5MCwweDc2LDB4MzUsMHhlMCwweGZmLDB4YzMsMHg5NCwweDAzLDB4NDAsMHgwMiwweDQxfSwKKyAgMTYsMHgzYTUyLDAsezB4ZmYsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWZ9LAorICAxNiwweDNhNjIsMCx7MHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNH0sCisgIDE2LDB4M2E3MiwwLHsweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0fSwKKyAgMTYsMHgzYTgyLDAsezB4ZjAsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODN9LAorICAxNiwweDNhOTIsMCx7MHg3NCwweGZmLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX0sCisgIDE2LDB4M2FhMiwwLHsweDgzLDB4ZTQsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fSwKKyAgMTYsMHgzYWIyLDAsezB4ODMsMHg3NCwweDgwLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzV9LAorICAxNiwweDNhYzIsMCx7MHhmNSwweDgzLDB4ZTQsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NX0sCisgIDE2LDB4M2FkMiwwLHsweGY1LDB4ODMsMHhlNCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1fSwKKyAgMTYsMHgzYWUyLDAsezB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzV9LAorICAxNiwweDNhZjIsMCx7MHhmNSwweDgzLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDM1LDB4ZTAsMHgwNCwweGYwLDB4NDEsMHg0NywweDkwLDB4NzYsMHgzY30sCisgIDE2LDB4M2IwMiwwLHsweDc0LDB4MGEsMHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4NzYsMHgzNSwweDc0LDB4MDMsMHhmMCwweDkwLDB4NzYsMHgzYywweGUwfSwKKyAgMTYsMHgzYjEyLDAsezB4ZmYsMHg5MCwweDc2LDB4MzUsMHhlMCwweGZlLDB4YzMsMHg5ZiwweDQwLDB4MDIsMHg2MSwweGQyLDB4OTAsMHg3NiwweDNkLDB4ZTB9LAorICAxNiwweDNiMjIsMCx7MHhmZiwweDA0LDB4ZjAsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX0sCisgIDE2LDB4M2IzMiwwLHsweDgzLDB4ZWYsMHhmMCwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fSwKKyAgMTYsMHgzYjQyLDAsezB4ODMsMHhlNCwweGYwLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9LAorICAxNiwweDNiNTIsMCx7MHg4MywweDc0LDB4NWUsMHhmMCwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NX0sCisgIDE2LDB4M2I2MiwwLHsweGY1LDB4ODMsMHg3NCwweGJhLDB4ZjAsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZSwweGY1LDB4ODIsMHhlNCwweDM0fSwKKyAgMTYsMHgzYjcyLDAsezB4NzUsMHhmNSwweDgzLDB4NzQsMHgwNSwweGYwLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWYsMHhmNSwweDgyLDB4ZTR9LAorICAxNiwweDNiODIsMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4ODAsMHhmMCwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIwLDB4ZjUsMHg4Mn0sCisgIDE2LDB4M2I5MiwwLHsweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjEsMHhmNSwweDgyfSwKKyAgMTYsMHgzYmEyLDAsezB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMiwweGY1LDB4ODJ9LAorICAxNiwweDNiYjIsMCx7MHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgxNSwweGYwLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjMsMHhmNX0sCisgIDE2LDB4M2JjMiwwLHsweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg5MCwweDc2LDB4MzUsMHhlMCwweDA0LDB4ZjAsMHg2MSwweDBlfSwKKyAgIDEsMHgzYmQyLDAsezB4MjJ9LAorICAxNiwweDNiZDMsMCx7MHhlNCwweDkwLDB4NzYsMHgzNiwweGYwLDB4ZTAsMHhmYiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MSwweGY1LDB4ODIsMHhlNH0sCisgIDE2LDB4M2JlMywwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHg0MCwweGYwLDB4ZWIsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDIsMHhmNSwweDgyfSwKKyAgMTYsMHgzYmYzLDAsezB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MGEsMHhmMCwweGViLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQzLDB4ZjV9LAorICAxNiwweDNjMDMsMCx7MHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHgxMiwweDM3LDB4YzgsMHgwMCwweDAwLDB4YWMsMHg0NCwweGViLDB4NzUsMHhmMH0sCisgIDE2LDB4M2MxMywwLHsweDBmLDB4YTQsMHgyNCwweDQ3LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHgxMiwweDM3LDB4YzgsMHgwMCwweDAwfSwKKyAgMTYsMHgzYzIzLDAsezB4YWMsMHg0NCwweGViLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDRiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODN9LAorICAxNiwweDNjMzMsMCx7MHgxMiwweDM3LDB4YzgsMHgwMCwweDAxLDB4NzcsMHgwMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmIsMHg3NX0sCisgIDE2LDB4M2M0MywwLHsweGYwLDB4MGYsMHhhNCwweDI0LDB4NDEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4NDAsMHhmMCwweGVifSwKKyAgMTYsMHgzYzUzLDAsezB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDhjLDB4ZjB9LAorICAxNiwweDNjNjMsMCx7MHhlYiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4MTIsMHgzN30sCisgIDE2LDB4M2M3MywwLHsweGM4LDB4MDAsMHgwMCwweGFjLDB4NDQsMHhlYiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0NywweGY1LDB4ODIsMHhlNCwweDM0fSwKKyAgMTYsMHgzYzgzLDAsezB4NzUsMHhmNSwweDgzLDB4MTIsMHgzNywweGM4LDB4MDAsMHgwMCwweGFjLDB4NDQsMHhlYiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjR9LAorICAxNiwweDNjOTMsMCx7MHg0YiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4MTIsMHgzNywweGM4LDB4MDAsMHgwMSwweDc3LDB4MDAsMHg5MH0sCisgIDE2LDB4M2NhMywwLHsweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQxLDB4ZjUsMHg4MiwweGU0fSwKKyAgMTYsMHgzY2IzLDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDQwLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MiwweGY1LDB4ODJ9LAorICAxNiwweDNjYzMsMCx7MHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHg4ZiwweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZn0sCisgIDE2LDB4M2NkMywwLHsweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHg0MSwweGYwfSwKKyAgMTYsMHgzY2UzLDAsezB4ZWYsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4ODR9LAorICAxNiwweDNjZjMsMCx7MHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDEsMHhmNX0sCisgIDE2LDB4M2QwMywwLHsweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4NjEsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQyfSwKKyAgMTYsMHgzZDEzLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDgxLDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjB9LAorICAxNiwweDNkMjMsMCx7MHhlMCwweGZmLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NH0sCisgIDE2LDB4M2QzMywwLHsweDYxLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzfSwKKyAgIDQsMHgzZDQzLDAsezB4NzQsMHgwMSwweGYwLDB4MjJ9LAorICAxNiwweDNkNDcsMCx7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4YzAsMHhkMCwweGU4LDB4YzAsMHhlMCwweGU5LDB4YzAsMHhlMH0sCisgIDE2LDB4M2Q1NywwLHsweGVhLDB4YzAsMHhlMCwweGViLDB4YzAsMHhlMCwweGVjLDB4YzAsMHhlMCwweGVkLDB4YzAsMHhlMCwweGVlLDB4YzAsMHhlMCwweGVmfSwKKyAgMTYsMHgzZDY3LDAsezB4YzAsMHhlMCwweDkwLDB4N2YsMHhhMiwweGUwLDB4OTAsMHg3NiwweDdmLDB4ZjAsMHg5MCwweDdmLDB4NzQsMHhlMCwweDkwLDB4NzZ9LAorICAxNiwweDNkNzcsMCx7MHg4NywweGYwLDB4OTAsMHg3ZiwweDc1LDB4ZTAsMHg5MCwweDc2LDB4ODgsMHhmMCwweDkwLDB4N2YsMHg5OCwweGUwLDB4NDQsMHgwMn0sCisgIDE2LDB4M2Q4NywwLHsweGYwLDB4OTAsMHg3NiwweDk2LDB4ZTAsMHhmZiwweDIwLDB4ZTEsMHgwYywweDQ0LDB4MDIsMHhmMCwweDkwLDB4ODAsMHgwMywweGYwfSwKKyAgMTYsMHgzZDk3LDAsezB4ZDIsMHgzMiwweDEyLDB4NGIsMHgyOCwweDkwLDB4NzYsMHg3ZiwweGUwLDB4MjAsMHhlMiwweDUwLDB4OTAsMHg3NiwweDg3LDB4ZTB9LAorICAxNiwweDNkYTcsMCx7MHhmZSwweGEzLDB4ZTAsMHg3YywweDAwLDB4MjQsMHgwMCwweGY1LDB4MzQsMHhlYywweDNlLDB4ZjUsMHgzMywweDkwLDB4NzYsMHg5OH0sCisgIDE2LDB4M2RiNywwLHsweGUwLDB4ZmQsMHhhZSwweDMzLDB4YWYsMHgzNCwweDEyLDB4MzYsMHhkOCwweDkwLDB4NzYsMHg4NywweGVmLDB4ZjAsMHhkMiwweDJmfSwKKyAgMTYsMHgzZGM3LDAsezB4MzAsMHgzMSwweDI5LDB4MjAsMHgzZiwweDI2LDB4YzIsMHgzMSwweDkwLDB4N2YsMHg5NCwweGUwLDB4NTQsMHhjZiwweGYwLDB4OTB9LAorICAxNiwweDNkZDcsMCx7MHg3ZiwweDlhLDB4ZTAsMHgzMCwweGU0LDB4MDQsMHhkMiwweDJkLDB4YzIsMHgyYywweDkwLDB4N2YsMHg5YSwweGUwLDB4MjAsMHhlNX0sCisgIDE2LDB4M2RlNywwLHsweDA0LDB4YzIsMHgyZCwweGQyLDB4MmMsMHg5MCwweDdmLDB4OTQsMHhlMCwweDQ0LDB4MzAsMHhmMCwweDEyLDB4NDgsMHhiZCwweDEyfSwKKyAgMTYsMHgzZGY3LDAsezB4MWIsMHgwNCwweDMwLDB4MmYsMHgxMiwweDEyLDB4NDIsMHgxZiwweGMyLDB4MmYsMHg3NSwweGU4LDB4MDEsMHgxMiwweDE2LDB4OGF9LAorICAxNiwweDNlMDcsMCx7MHg3NSwweGU4LDB4MGQsMHhkMiwweDJiLDB4ODAsMHgwNSwweDc1LDB4ZTgsMHgwMSwweGMyLDB4MmIsMHgyMCwweDJiLDB4MzQsMHg5MH0sCisgIDE2LDB4M2UxNywwLHsweDc2LDB4MTksMHhlMCwweGZmLDB4YjQsMHgwMSwweDBlLDB4OTAsMHg3NiwweDdjLDB4NzQsMHg2NywweGYwLDB4YTMsMHg3NCwweDA2fSwKKyAgMTYsMHgzZTI3LDAsezB4ZjAsMHhhMywweDc0LDB4MGIsMHhmMCwweGVmLDB4YjQsMHgwMiwweDBiLDB4OTAsMHg3NiwweDdjLDB4ZTQsMHhmMCwweGEzLDB4ZjB9LAorICAxNiwweDNlMzcsMCx7MHhhMywweDc0LDB4MGMsMHhmMCwweGVmLDB4YjQsMHgwMywweDBiLDB4OTAsMHg3NiwweDdjLDB4ZTQsMHhmMCwweGEzLDB4ZjAsMHhhM30sCisgIDE2LDB4M2U0NywwLHsweDc0LDB4MTgsMHhmMCwweDc1LDB4Y2EsMHhkMywweDc1LDB4Y2IsMHhmZSwweGQyLDB4Y2EsMHgzMCwweDM0LDB4MDQsMHhjMiwweDM0fSwKKyAgMTYsMHgzZTU3LDAsezB4ODAsMHgwMiwweGQyLDB4MzQsMHgzMCwweDM0LDB4MGQsMHg5MCwweDc2LDB4ODksMHhlMCwweGMzLDB4OTQsMHgwMywweDQwLDB4MDR9LAorICAxNiwweDNlNjcsMCx7MHhlMCwweDI0LDB4ZmQsMHhmMCwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MDIsMHhmMCwweGYwLDB4OTAsMHg3Zn0sCisgIDE2LDB4M2U3NywwLHsweDk4LDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHhkMCwweGUwLDB4ZmYsMHhkMCwweGUwLDB4ZmUsMHhkMCwweGUwLDB4ZmQsMHhkMCwweGUwfSwKKyAgMTYsMHgzZTg3LDAsezB4ZmMsMHhkMCwweGUwLDB4ZmIsMHhkMCwweGUwLDB4ZmEsMHhkMCwweGUwLDB4ZjksMHhkMCwweGUwLDB4ZjgsMHhkMCwweGQwLDB4ZDB9LAorICAgOCwweDNlOTcsMCx7MHg4MiwweGQwLDB4ODMsMHhkMCwweGYwLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHgzZTlmLDAsezB4OTAsMHg3NiwweDkyLDB4ZTAsMHgxNCwweDYwLDB4MWQsMHgxNCwweDcwLDB4MDIsMHhlMSwweDU0LDB4MjQsMHgwMiwweDYwLDB4MDJ9LAorICAxNiwweDNlYWYsMCx7MHhlMSwweGU0LDB4OTAsMHg3NiwweDk0LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg4MCwweDAwLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4ZX0sCisgIDE2LDB4M2ViZiwwLHsweGYwLDB4ZDIsMHgzMSwweDIyLDB4OTAsMHg3NiwweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDEsMHgxYiwweGU0LDB4OTAsMHg3ZiwweGYyfSwKKyAgMTYsMHgzZWNmLDAsezB4ZjAsMHg5MCwweDdmLDB4ZjMsMHg3NCwweDMwLDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OTd9LAorICAxNiwweDNlZGYsMCx7MHhlMCwweDU0LDB4ZmQsMHhmMCwweDU0LDB4ZmIsMHhmMCwweGVmLDB4YjQsMHgwMiwweDFiLDB4ZTQsMHg5MCwweDdmLDB4ZjIsMHhmMH0sCisgIDE2LDB4M2VlZiwwLHsweDkwLDB4N2YsMHhmMywweDc0LDB4MzQsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwfSwKKyAgMTYsMHgzZWZmLDAsezB4NDQsMHgwMiwweGYwLDB4NTQsMHhmYiwweGYwLDB4ZWYsMHhiNCwweDAzLDB4MTgsMHhlNCwweDkwLDB4N2YsMHhmMiwweGYwLDB4OTB9LAorICAxNiwweDNmMGYsMCx7MHg3ZiwweGYzLDB4NzQsMHg2NCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NH0sCisgIDE2LDB4M2YxZiwwLHsweDA0LDB4ZjAsMHg5MCwweDc2LDB4OTQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4ODAsMHgwMCwweGYwLDB4MzAsMHgzZiwweDA5fSwKKyAgMTYsMHgzZjJmLDAsezB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NCwweDAxLDB4ZjB9LAorICAxNiwweDNmM2YsMCx7MHg5MCwweDc2LDB4OTcsMHhlMCwweDkwLDB4ODAsMHgwMiwweGYwLDB4OTAsMHg3NiwweDk4LDB4NzQsMHgwNCwweGYwLDB4OTAsMHg3Nn0sCisgIDE2LDB4M2Y0ZiwwLHsweDhlLDB4NzQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDc2LDB4MTksMHhlMCwweGZmLDB4YjQsMHgwMSwweDFiLDB4ZTQsMHg5MCwweDdmfSwKKyAgMTYsMHgzZjVmLDAsezB4ZjIsMHhmMCwweDkwLDB4N2YsMHhmMywweDc0LDB4NDQsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzZ9LAorICAxNiwweDNmNmYsMCx7MHg5NywweGUwLDB4NTQsMHhmZCwweGYwLDB4NTQsMHhmYiwweGYwLDB4ZWYsMHhiNCwweDAyLDB4MWIsMHhlNCwweDkwLDB4N2YsMHhmMn0sCisgIDE2LDB4M2Y3ZiwwLHsweGYwLDB4OTAsMHg3ZiwweGYzLDB4NzQsMHg0YywweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDk3fSwKKyAgMTYsMHgzZjhmLDAsezB4ZTAsMHg0NCwweDAyLDB4ZjAsMHg1NCwweGZiLDB4ZjAsMHhlZiwweGI0LDB4MDMsMHgxOCwweGU0LDB4OTAsMHg3ZiwweGYyLDB4ZjB9LAorICAxNiwweDNmOWYsMCx7MHg5MCwweDdmLDB4ZjMsMHg3NCwweDk0LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMH0sCisgIDE2LDB4M2ZhZiwwLHsweDQ0LDB4MDQsMHhmMCwweDkwLDB4NzYsMHg5NCwweGUwLDB4NTQsMHhmZSwweGYwLDB4OTAsMHg4MCwweDAwLDB4ZjAsMHgzMCwweDNmfSwKKyAgMTYsMHgzZmJmLDAsezB4MDksMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0LDB4MDF9LAorICAxNiwweDNmY2YsMCx7MHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4OTAsMHg4MCwweDAyLDB4ZjAsMHg5MCwweDc2LDB4OTgsMHg3NCwweDA2LDB4ZjAsMHg5MH0sCisgICA2LDB4M2ZkZiwwLHsweDc2LDB4OGUsMHg3NCwweDAyLDB4ZjAsMHgyMn0sCisgIDE2LDB4M2ZlNSwwLHsweDkwLDB4N2YsMHhlYSwweGUwLDB4OTAsMHg3NiwweDgyLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg5MSwweGYwLDB4OTAsMHg3NiwweDkyfSwKKyAgMTEsMHgzZmY1LDAsezB4ZjAsMHg5MCwweDc2LDB4OTAsMHhmMCwweDkwLDB4NzYsMHg5MywweGYwLDB4ZDMsMHgyMn0sCisgIDE2LDB4NDAwMCwwLHsweGU1LDB4MTEsMHhkMywweDk0LDB4MDAsMHg1MCwweDAyLDB4MjEsMHgwNiwweDkwLDB4NzYsMHg4OSwweGUwLDB4YzMsMHg5NCwweDA4fSwKKyAgMTYsMHg0MDEwLDAsezB4NDAsMHgwMiwweDIxLDB4MDYsMHg3NCwweDQwLDB4MjUsMHgwZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2UsMHhmNSwweDgzLDB4ZTB9LAorICAxNiwweDQwMjAsMCx7MHhmNSwweDE3LDB4ZTUsMHgwZCwweDYwLDB4MGUsMHg5MCwweDgwLDB4MDUsMHhlNSwweDE3LDB4ZjAsMHg5MCwweDc2LDB4ODksMHhlMH0sCisgIDE2LDB4NDAzMCwwLHsweDA0LDB4ZjAsMHgwMSwweGRhLDB4ZTUsMHgxNywweDEyLDB4MzcsMHhmOSwweDQwLDB4YzEsMHgwMiwweDQwLDB4NjcsMHgwNSwweDQwfSwKKyAgMTYsMHg0MDQwLDAsezB4N2EsMHgwNiwweDQwLDB4OTgsMHgwNywweDQwLDB4YzEsMHgwYywweDQwLDB4YzEsMHgwZCwweDQwLDB4YzcsMHgwZiwweDQwLDB4Y2J9LAorICAxNiwweDQwNTAsMCx7MHhmNiwweDQwLDB4Y2IsMHhmOCwweDQwLDB4Y2IsMHhmYSwweDQwLDB4Y2IsMHhmYiwweDQwLDB4Y2IsMHhmYywweDQwLDB4Y2IsMHhmZX0sCisgIDE2LDB4NDA2MCwwLHsweDQwLDB4Y2IsMHhmZiwweDAwLDB4MDAsMHg0MCwweGRhLDB4OTAsMHg3ZSwweDQxLDB4ZTAsMHg5MCwweDgwLDB4MDUsMHhmMCwweDkwfSwKKyAgMTYsMHg0MDcwLDAsezB4NzYsMHg4OSwweGUwLDB4MDQsMHhmMCwweDc1LDB4MTEsMHgwMSwweDgwLDB4NjAsMHg5MCwweDdlLDB4NDEsMHhlMCwweDkwLDB4ODB9LAorICAxNiwweDQwODAsMCx7MHgwNSwweGYwLDB4OTAsMHg3ZSwweDQyLDB4ZTAsMHg5MCwweDgwLDB4MDUsMHhmMCwweDkwLDB4NzYsMHg4OSwweGUwLDB4MDQsMHhmMH0sCisgIDE2LDB4NDA5MCwwLHsweGUwLDB4MDQsMHhmMCwweDc1LDB4MTEsMHgwMSwweDgwLDB4NDIsMHg5MCwweDdlLDB4NDEsMHhlMCwweDkwLDB4ODAsMHgwNSwweGYwfSwKKyAgMTYsMHg0MGEwLDAsezB4OTAsMHg3ZSwweDQyLDB4ZTAsMHg5MCwweDgwLDB4MDUsMHhmMCwweDkwLDB4N2UsMHg0MywweGUwLDB4OTAsMHg4MCwweDA1LDB4ZjB9LAorICAxNiwweDQwYjAsMCx7MHg5MCwweDc2LDB4ODksMHhlMCwweDA0LDB4ZjAsMHhlMCwweDA0LDB4ZjAsMHhlMCwweDA0LDB4ZjAsMHg3NSwweDExLDB4MDEsMHg4MH0sCisgIDE2LDB4NDBjMCwwLHsweDE5LDB4ZDIsMHgzYiwweGQyLDB4M2MsMHg4MCwweDEzLDB4ZDIsMHgzYiwweDgwLDB4MGYsMHg5MCwweDgwLDB4MDUsMHhlNSwweDE3fSwKKyAgMTYsMHg0MGQwLDAsezB4ZjAsMHg5MCwweDc2LDB4ODksMHhlMCwweDA0LDB4ZjAsMHg3NSwweDExLDB4MDEsMHgyMCwweDNiLDB4MDQsMHgwNSwweDBkLDB4ODB9LAorICAxNiwweDQwZTAsMCx7MHgxZiwweDMwLDB4M2MsMHgxYywweDkwLDB4N2UsMHg0MSwweGUwLDB4OTAsMHg4MCwweDA1LDB4ZjAsMHg5MCwweDdlLDB4NDIsMHhlMH0sCisgIDE2LDB4NDBmMCwwLHsweDkwLDB4ODAsMHgwNSwweGYwLDB4OTAsMHg3NiwweDg5LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHgwNCwweGYwLDB4NzUsMHgxMSwweDAxfSwKKyAgMTYsMHg0MTAwLDAsezB4MDUsMHgwZiwweDE1LDB4MTEsMHgwMSwweDAwLDB4ZTUsMHgxMSwweDcwLDB4MTAsMHhjMiwweDMzLDB4ZjUsMHgwZCwweGY1LDB4MGZ9LAorICAxMSwweDQxMTAsMCx7MHg5MCwweDdmLDB4YzcsMHg3NCwweDA0LDB4ZjAsMHhjMiwweDNiLDB4YzIsMHgzYywweDIyfSwKKyAgMTYsMHg0MTFiLDAsezB4OTAsMHg3NiwweDhkLDB4ZTAsMHg2NCwweDAxLDB4NzAsMHgyNywweDMwLDB4MjcsMHgwOCwweGMyLDB4MjcsMHgxMiwweDA4LDB4MDB9LAorICAxNiwweDQxMmIsMCx7MHgxMiwweDE3LDB4NGEsMHgzMCwweDI4LDB4MDgsMHhjMiwweDI4LDB4MTIsMHgzOCwweDc0LDB4MTIsMHgxNywweDRhLDB4MzAsMHgyYX0sCisgIDE2LDB4NDEzYiwwLHsweDBlLDB4ZTQsMHg5MCwweDc2LDB4OGQsMHhmMCwweGMyLDB4MmEsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDIsMHhmMCwweDkwfSwKKyAgMTYsMHg0MTRiLDAsezB4NzYsMHgzZiwweGUwLDB4YjQsMHgwMSwweDA1LDB4ZTQsMHhmMCwweDEyLDB4MzIsMHg2ZiwweDkwLDB4NzYsMHg0MSwweGUwLDB4YjR9LAorICAxNiwweDQxNWIsMCx7MHgwMSwweDA1LDB4ZTQsMHhmMCwweDEyLDB4MzQsMHg5YSwweDkwLDB4NzYsMHg0MCwweGUwLDB4YjQsMHgwMSwweDAzLDB4MTIsMHgzNH0sCisgIDE2LDB4NDE2YiwwLHsweDlhLDB4MTIsMHgzMCwweDAwLDB4MzAsMHgzMywweDAzLDB4MTIsMHg0MCwweDAwLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHgyMCwweGU0fSwKKyAgMTYsMHg0MTdiLDAsezB4MDIsMHhjMiwweDNmLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHgzMCwweGU0LDB4MDIsMHhkMiwweDNmLDB4OTAsMHg3ZiwweDliLDB4ZTB9LAorICAxNiwweDQxOGIsMCx7MHgyMCwweGU1LDB4MDIsMHhjMiwweDNlLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHgzMCwweGU1LDB4MDIsMHhkMiwweDNlLDB4YTIsMHg0MX0sCisgIDE2LDB4NDE5YiwwLHsweDMwLDB4M2YsMHgwMSwweGIzLDB4NTAsMHgxZiwweGEyLDB4M2YsMHg5MiwweDQxLDB4MzAsMHgzZiwweDA5LDB4OTAsMHg3NiwweDk3fSwKKyAgMTYsMHg0MWFiLDAsezB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4OTd9LAorICAxNiwweDQxYmIsMCx7MHhlMCwweDkwLDB4ODAsMHgwMiwweGYwLDB4MzAsMHgzZiwweDM0LDB4OTAsMHg3NiwweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDEsMHgwZX0sCisgIDE2LDB4NDFjYiwwLHsweDkwLDB4NzYsMHg3YywweDc0LDB4NjcsMHhmMCwweGEzLDB4NzQsMHgwNiwweGYwLDB4YTMsMHg3NCwweDBiLDB4ZjAsMHhlZiwweGI0fSwKKyAgMTYsMHg0MWRiLDAsezB4MDIsMHgwYiwweGU0LDB4OTAsMHg3NiwweDdjLDB4ZjAsMHhhMywweGYwLDB4YTMsMHg3NCwweDBjLDB4ZjAsMHhlZiwweGI0LDB4MDN9LAorICAxNiwweDQxZWIsMCx7MHgwYiwweGU0LDB4OTAsMHg3NiwweDdjLDB4ZjAsMHhhMywweGYwLDB4YTMsMHg3NCwweDE4LDB4ZjAsMHhhMiwweDQwLDB4MzAsMHgzZX0sCisgIDE2LDB4NDFmYiwwLHsweDAxLDB4YjMsMHg1MCwweDFmLDB4YTIsMHgzZSwweDkyLDB4NDAsMHgzMCwweDNlLDB4MDksMHg5MCwweDc2LDB4OTUsMHhlMCwweDQ0fSwKKyAgMTYsMHg0MjBiLDAsezB4MDQsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc2LDB4OTUsMHhlMCwweDU0LDB4ZmIsMHhmMCwweDkwLDB4NzYsMHg5NSwweGUwLDB4OTB9LAorICAgNCwweDQyMWIsMCx7MHg4MCwweDAxLDB4ZjAsMHgyMn0sCisgIDE2LDB4NDIxZiwwLHsweDkwLDB4NzYsMHgxOSwweGUwLDB4NjQsMHgwMSwweDcwLDB4MzUsMHg5MCwweDc2LDB4ODcsMHhlMCwweGZmLDB4ZDMsMHg5NCwweDJkfSwKKyAgMTYsMHg0MjJmLDAsezB4NDAsMHgyYiwweDkwLDB4NzYsMHg4NiwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHg4NSwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZDN9LAorICAxNiwweDQyM2YsMCx7MHg5NCwweDBmLDB4NDAsMHgxOSwweGU0LDB4ZjAsMHhlZiwweGQzLDB4OTQsMHgzMSwweDQwLDB4MDgsMHg5MCwweDc2LDB4MTksMHg3NH0sCisgIDE2LDB4NDI0ZiwwLHsweDAzLDB4ZjAsMHg4MCwweDA2LDB4OTAsMHg3NiwweDE5LDB4NzQsMHgwMiwweGYwLDB4MTIsMHgzZSwweDlmLDB4OTAsMHg3NiwweDE5fSwKKyAgMTYsMHg0MjVmLDAsezB4ZTAsMHhiNCwweDAyLDB4MmMsMHg5MCwweDc2LDB4ODcsMHhlMCwweGZmLDB4YzMsMHg5NCwweDJmLDB4NTAsMHgyMiwweGVmLDB4ZDN9LAorICAxNiwweDQyNmYsMCx7MHg5NCwweDJhLDB4NDAsMHgxYywweDkwLDB4NzYsMHg4NiwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHg4NSwweGUwLDB4MDQsMHhmMH0sCisgIDE2LDB4NDI3ZiwwLHsweGUwLDB4ZDMsMHg5NCwweDBmLDB4NDAsMHgwYSwweGU0LDB4ZjAsMHg5MCwweDc2LDB4MTksMHgwNCwweGYwLDB4MTIsMHgzZSwweDlmfSwKKyAgMTYsMHg0MjhmLDAsezB4OTAsMHg3NiwweDE5LDB4ZTAsMHhiNCwweDAyLDB4MjYsMHg5MCwweDc2LDB4ODcsMHhlMCwweGQzLDB4OTQsMHgzMSwweDQwLDB4MWR9LAorICAxNiwweDQyOWYsMCx7MHg5MCwweDc2LDB4ODYsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4ODUsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGQzLDB4OTQsMHgwZn0sCisgIDE2LDB4NDJhZiwwLHsweDQwLDB4MGIsMHhlNCwweGYwLDB4OTAsMHg3NiwweDE5LDB4NzQsMHgwMywweGYwLDB4MTIsMHgzZSwweDlmLDB4OTAsMHg3NiwweDE5fSwKKyAgMTYsMHg0MmJmLDAsezB4ZTAsMHg2NCwweDAzLDB4NzAsMHgzZiwweDkwLDB4NzYsMHg4NywweGUwLDB4ZmYsMHhjMywweDk0LDB4NWYsMHg1MCwweDM1LDB4OTB9LAorICAxNiwweDQyY2YsMCx7MHg3NiwweDg2LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDg1LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhkMywweDk0LDB4MGYsMHg0MH0sCisgIDE2LDB4NDJkZiwwLHsweDIzLDB4ZTQsMHhmMCwweGVmLDB4YzMsMHg5NCwweDJmLDB4NTAsMHgwYywweGVmLDB4ZDMsMHg5NCwweDJhLDB4NDAsMHgwNiwweDkwfSwKKyAgMTYsMHg0MmVmLDAsezB4NzYsMHgxOSwweDc0LDB4MDEsMHhmMCwweGVmLDB4ZDMsMHg5NCwweDJmLDB4NDAsMHgwNiwweDkwLDB4NzYsMHgxOSwweDc0LDB4MDJ9LAorICAxNiwweDQyZmYsMCx7MHhmMCwweDEyLDB4M2UsMHg5ZiwweDkwLDB4NzYsMHg4NiwweGUwLDB4NzAsMHgwNSwweDkwLDB4NzYsMHg4NSwweGYwLDB4MjIsMHhlNH0sCisgICA1LDB4NDMwZiwwLHsweDkwLDB4NzYsMHg4NiwweGYwLDB4MjJ9LAorICAxNiwweDQzMTQsMCx7MHhlNCwweDkwLDB4NzYsMHg5NiwweGYwLDB4OTAsMHg4MCwweDAzLDB4ZjAsMHg5MCwweDdmLDB4ZTAsMHg3NCwweDkwLDB4ZjAsMHg5MH0sCisgIDE2LDB4NDMyNCwwLHsweDdmLDB4ZTEsMHg3NCwweDA0LDB4ZjAsMHhlNCwweDkwLDB4N2YsMHhkZCwweGYwLDB4OTAsMHg3ZiwweGExLDB4ZjAsMHg1MywweDhlfSwKKyAgMTYsMHg0MzM0LDAsezB4ZjgsMHg3NSwweDg4LDB4MDUsMHg3NSwweGI4LDB4MjAsMHg3NSwweGY4LDB4MDEsMHg0MywweDhlLDB4MzAsMHhmNSwweGM4LDB4NzV9LAorICAxNiwweDQzNDQsMCx7MHhjYSwweDdmLDB4NzUsMHhjYiwweGY4LDB4NDMsMHhhOCwweDIwLDB4MTIsMHg0NSwweDY1LDB4YzIsMHgyYywweGMyLDB4MmQsMHhjMn0sCisgIDE2LDB4NDM1NCwwLHsweDJiLDB4YzIsMHgyZiwweDkwLDB4N2YsMHhmYywweDc0LDB4ZGQsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmYsMHhmMCwweDkwfSwKKyAgMTYsMHg0MzY0LDAsezB4N2YsMHg5NywweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDE5LDB4NzQsMHgwMSwweGYwLDB4ZTQsMHg5MCwweDc2LDB4ODV9LAorICAxNiwweDQzNzQsMCx7MHhmMCwweGEzLDB4ZjAsMHg5MCwweDc2LDB4ODEsMHhmMCwweDkwLDB4NzYsMHg4MCwweGYwLDB4MTIsMHg0OSwweGFlLDB4MTIsMHgwZn0sCisgIDE2LDB4NDM4NCwwLHsweGM2LDB4MTIsMHg0YSwweGYxLDB4OTAsMHg3ZiwweDk3LDB4ZTAsMHg0NCwweDA4LDB4ZjAsMHhlMCwweDU0LDB4YjksMHhmMCwweGQyfSwKKyAgMTYsMHg0Mzk0LDAsezB4MzAsMHgyMCwweDMwLDB4MTgsMHgxMiwweDRhLDB4YTYsMHgxMiwweDMwLDB4MDAsMHgxMiwweDQwLDB4MDAsMHgxMiwweDQyLDB4MWZ9LAorICAxNiwweDQzYTQsMCx7MHgxMiwweDQ4LDB4YmQsMHgxMiwweDFiLDB4MDQsMHgxMiwweDE2LDB4NjEsMHgxMiwweDQyLDB4MWYsMHgxMiwweDRhLDB4YTYsMHhjMn0sCisgIDE2LDB4NDNiNCwwLHsweDJmLDB4YzIsMHgzMSwweGMyLDB4MzIsMHhjMiwweDM0LDB4YzIsMHgzMywweGMyLDB4MjksMHhjMiwweDI3LDB4YzIsMHgyOCwweGU0fSwKKyAgMTYsMHg0M2M0LDAsezB4ZjUsMHgxMSwweDkwLDB4NzYsMHg4OSwweGYwLDB4OTAsMHg3NiwweDNmLDB4ZjAsMHg5MCwweDc2LDB4NDEsMHhmMCwweDkwLDB4NzZ9LAorICAxNiwweDQzZDQsMCx7MHg0MCwweGYwLDB4OTAsMHg3NiwweDhhLDB4ZjAsMHhhMywweGYwLDB4YTMsMHgwNCwweGYwLDB4ZTQsMHhhMywweGYwLDB4OTAsMHg3Nn0sCisgICAzLDB4NDNlNCwwLHsweDk5LDB4ZjAsMHgyMn0sCisgIDE2LDB4NDNlNywwLHsweDEyLDB4NGUsMHgxOSwweDQwLDB4MDIsMHg4MSwweGFjLDB4OTAsMHg3ZiwweGViLDB4ZTAsMHgyNCwweGZlLDB4NjAsMHgxZSwweDE0fSwKKyAgMTYsMHg0M2Y3LDAsezB4NjAsMHg0NiwweDE0LDB4NjAsMHg2ZSwweDE0LDB4NzAsMHgwMiwweDgxLDB4OWQsMHgyNCwweDA0LDB4NjAsMHgwMiwweDgxLDB4YTV9LAorICAxNiwweDQ0MDcsMCx7MHg3NCwweDA1LDB4OTAsMHg3ZiwweGQ0LDB4ZjAsMHg3NCwweDAwLDB4OTAsMHg3ZiwweGQ1LDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlYX0sCisgIDE2LDB4NDQxNywwLHsweGUwLDB4ZmYsMHgxMiwweDRhLDB4NTUsMHg4YiwweDIwLDB4OGEsMHgyMSwweDg5LDB4MjIsMHhlYSwweDQ5LDB4NjAsMHgxMSwweGNlfSwKKyAgMTYsMHg0NDI3LDAsezB4ZWEsMHhjZSwweGVlLDB4OTAsMHg3ZiwweGQ0LDB4ZjAsMHhjZiwweGU5LDB4Y2YsMHhlZiwweDkwLDB4N2YsMHhkNSwweGYwLDB4MjJ9LAorICAxNiwweDQ0MzcsMCx7MHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmZiwweDEyLDB4NDcsMHhiN30sCisgIDE2LDB4NDQ0NywwLHsweDhiLDB4MjAsMHg4YSwweDIxLDB4ODksMHgyMiwweGVhLDB4NDksMHg2MCwweDExLDB4Y2UsMHhlYSwweGNlLDB4ZWUsMHg5MCwweDdmfSwKKyAgMTYsMHg0NDU3LDAsezB4ZDQsMHhmMCwweGNmLDB4ZTksMHhjZiwweGVmLDB4OTAsMHg3ZiwweGQ1LDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDR9LAorICAxNiwweDQ0NjcsMCx7MHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGZmLDB4OTAsMHg3ZSwweGMwLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmYn0sCisgIDE2LDB4NDQ3NywwLHsweDEyLDB4MTcsMHg5NCwweDhiLDB4MjAsMHg4YSwweDIxLDB4ODksMHgyMiwweGVhLDB4NDksMHg2MCwweDExLDB4Y2UsMHhlYSwweGNlfSwKKyAgMTYsMHg0NDg3LDAsezB4ZWUsMHg5MCwweDdmLDB4ZDQsMHhmMCwweGNmLDB4ZTksMHhjZiwweGVmLDB4OTAsMHg3ZiwweGQ1LDB4ZjAsMHgyMiwweDkwLDB4N2Z9LAorICAxNiwweDQ0OTcsMCx7MHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3Zn0sCisgICA1LDB4NDRhNywwLHsweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjB9LAorICAgMSwweDQ0YWMsMCx7MHgyMn0sCisgIDE2LDB4NDRhZCwwLHsweGMyLDB4YWYsMHhkMiwweDI0LDB4OTAsMHg3ZiwweDkzLDB4NzQsMHgzMCwweGYwLDB4OTAsMHg3ZiwweDljLDB4NzQsMHhiYiwweGYwfSwKKyAgMTYsMHg0NGJkLDAsezB4OTAsMHg3ZiwweDk2LDB4ZTAsMHg0NCwweDMwLDB4ZjAsMHhlMCwweDU0LDB4MzAsMHhmMCwweDkwLDB4N2YsMHg5NCwweDc0LDB4MzB9LAorICAxNiwweDQ0Y2QsMCx7MHhmMCwweDkwLDB4N2YsMHg5ZCwweDc0LDB4Y2YsMHhmMCwweDkwLDB4N2YsMHg5NywweDc0LDB4YTAsMHhmMCwweDkwLDB4N2YsMHg5NX0sCisgIDE2LDB4NDRkZCwwLHsweDc0LDB4YzAsMHhmMCwweDkwLDB4N2YsMHg5ZSwweDc0LDB4MDMsMHhmMCwweDkwLDB4N2YsMHg5OSwweGUwLDB4MzAsMHhlMiwweDA5fSwKKyAgMTYsMHg0NGVkLDAsezB4OTAsMHgwNSwweDE5LDB4NzQsMHhhMCwweGYwLDB4ZTQsMHhhMywweGYwLDB4YzIsMHgyNSwweGMyLDB4MjIsMHhjMiwweDIzLDB4YzJ9LAorICAxNiwweDQ0ZmQsMCx7MHgyNiwweDEyLDB4NGIsMHgyOCwweDEyLDB4MmQsMHhhOSwweDEyLDB4M2IsMHhkMywweDEyLDB4NDYsMHgxOSwweDEyLDB4M2EsMHg0Mn0sCisgIDE2LDB4NDUwZCwwLHsweDkwLDB4NzYsMHg2OCwweDc0LDB4MDEsMHhmMCwweDcwLDB4MGYsMHgxMiwweDRjLDB4MjksMHgxMiwweDRlLDB4MTUsMHgxMiwweDRlfSwKKyAgMTYsMHg0NTFkLDAsezB4MTcsMHgxMiwweDFiLDB4NDAsMHgxMiwweDE0LDB4OTYsMHgxMiwweDQzLDB4MTQsMHg5MCwweDdmLDB4YWYsMHhlMCwweDQ0LDB4MDF9LAorICAxNiwweDQ1MmQsMCx7MHhmMCwweDkwLDB4N2YsMHhhZSwweGUwLDB4NDQsMHgxZiwweGYwLDB4OTAsMHg3ZiwweGFjLDB4NzQsMHhmZiwweGYwLDB4OTAsMHg3Zn0sCisgIDE2LDB4NDUzZCwwLHsweGFkLDB4ZjAsMHg5MCwweDdmLDB4ZGUsMHhmMCwweDkwLDB4N2YsMHhkZiwweGYwLDB4OTAsMHg3ZiwweGFiLDB4ZjAsMHg5MCwweDdmfSwKKyAgMTYsMHg0NTRkLDAsezB4YTksMHhmMCwweDkwLDB4N2YsMHhhYSwweGYwLDB4NTMsMHg5MSwweGVmLDB4NDMsMHhkOCwweDIwLDB4ZDIsMHhlOCwweDQzLDB4ZDh9LAorICAgOCwweDQ1NWQsMCx7MHgyMCwweDUzLDB4YTgsMHhhMCwweDQzLDB4YTgsMHg4MCwweDIyfSwKKyAgMTYsMHg0NTY1LDAsezB4OTAsMHg3NiwweDlhLDB4NzQsMHgwMiwweGYwLDB4ZTQsMHg5MCwweDc2LDB4OTEsMHhmMCwweGEzLDB4ZjAsMHg5MCwweDc2LDB4OTB9LAorICAxNiwweDQ1NzUsMCx7MHhmMCwweDkwLDB4NzYsMHg5MywweGYwLDB4OTAsMHg3NiwweDk2LDB4NzQsMHgwMywweGYwLDB4OTAsMHg4MCwweDAzLDB4ZjAsMHhlNH0sCisgIDE2LDB4NDU4NSwwLHsweDkwLDB4NzYsMHg5NywweGYwLDB4OTAsMHg4MCwweDAyLDB4ZjAsMHg5MCwweDc2LDB4OTQsMHgwNCwweGYwLDB4OTAsMHg4MCwweDAwfSwKKyAgMTYsMHg0NTk1LDAsezB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4ZSwweGYwLDB4OTAsMHg3NiwweDFhLDB4ZjAsMHg5MCwweDc2LDB4OTUsMHgwNCwweGYwLDB4YzJ9LAorICAxNiwweDQ1YTUsMCx7MHgyZSwweDkwLDB4N2YsMHg5YiwweGUwLDB4ZmYsMHg1NCwweDEwLDB4ZmYsMHg3MCwweDAyLDB4YzIsMHgzZiwweDkwLDB4N2YsMHg5Yn0sCisgIDE2LDB4NDViNSwwLHsweGUwLDB4ZmYsMHg1NCwweDEwLDB4ZmUsMHhmZiwweGJlLDB4MTAsMHgwMiwweGQyLDB4M2YsMHg5MCwweDdmLDB4OWIsMHhlMCwweGZmfSwKKyAgMTYsMHg0NWM1LDAsezB4NTQsMHgyMCwweGZmLDB4NzAsMHgwMiwweGMyLDB4M2UsMHg5MCwweDdmLDB4OWIsMHhlMCwweGZmLDB4NTQsMHgyMCwweGZlLDB4ZmZ9LAorICAxNiwweDQ1ZDUsMCx7MHhiZSwweDIwLDB4MDIsMHhkMiwweDNlLDB4MzAsMHgzZiwweDA5LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MH0sCisgIDE2LDB4NDVlNSwwLHsweDA3LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDkwLDB4ODAsMHgwMiwweGYwfSwKKyAgMTYsMHg0NWY1LDAsezB4MzAsMHgzZSwweDA5LDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg0NCwweDA0LDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3NiwweDk1LDB4ZTB9LAorICAxNiwweDQ2MDUsMCx7MHg1NCwweGZiLDB4ZjAsMHg5MCwweDc2LDB4OTUsMHhlMCwweDkwLDB4ODAsMHgwMSwweGYwLDB4YTIsMHgzZSwweDkyLDB4NDAsMHhhMn0sCisgICAzLDB4NDYxNSwwLHsweDNmLDB4OTIsMHg0MX0sCisgICAxLDB4NDYxOCwwLHsweDIyfSwKKyAgMTYsMHg0NjE5LDAsezB4ZTQsMHg5MCwweDc2LDB4MzYsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MzIsMHhmNSwweDgyLDB4ZTR9LAorICAxNiwweDQ2MjksMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgzMywweGY1LDB4ODIsMHhlNH0sCisgIDE2LDB4NDYzOSwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1fSwKKyAgMTYsMHg0NjQ5LDAsezB4ZjAsMHgwMywweGE0LDB4MjQsMHgzMiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweGVmLDB4NzV9LAorICAxNiwweDQ2NTksMCx7MHhmMCwweDAzLDB4YTQsMHgyNCwweDMzLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAyLDB4ZjAsMHg5MH0sCisgIDE2LDB4NDY2OSwwLHsweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDMyLDB4ZjUsMHg4MiwweGU0fSwKKyAgMTYsMHg0Njc5LDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MzMsMHhmNSwweDgyLDB4ZTR9LAorICAxNiwweDQ2ODksMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDMsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NX0sCisgIDE2LDB4NDY5OSwwLHsweGYwLDB4MDMsMHhhNCwweDI0LDB4MzIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlZiwweDc1fSwKKyAgMTYsMHg0NmE5LDAsezB4ZjAsMHgwMywweGE0LDB4MjQsMHgzMywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwNCwweGYwLDB4MjJ9LAorICAxMiwweDQ2YjksMCx7MHg3OCwweDdmLDB4ZTQsMHhmNiwweGQ4LDB4ZmQsMHg3NSwweDgxLDB4MzgsMHgwMiwweDQ3LDB4MDB9LAorICAxNiwweDQ2YzUsMCx7MHgwMiwweDA3LDB4YTYsMHhlNCwweDkzLDB4YTMsMHhmOCwweGU0LDB4OTMsMHhhMywweDQwLDB4MDMsMHhmNiwweDgwLDB4MDEsMHhmMn0sCisgIDE2LDB4NDZkNSwwLHsweDA4LDB4ZGYsMHhmNCwweDgwLDB4MjksMHhlNCwweDkzLDB4YTMsMHhmOCwweDU0LDB4MDcsMHgyNCwweDBjLDB4YzgsMHhjMywweDMzfSwKKyAgMTYsMHg0NmU1LDAsezB4YzQsMHg1NCwweDBmLDB4NDQsMHgyMCwweGM4LDB4ODMsMHg0MCwweDA0LDB4ZjQsMHg1NiwweDgwLDB4MDEsMHg0NiwweGY2LDB4ZGZ9LAorICAxNiwweDQ2ZjUsMCx7MHhlNCwweDgwLDB4MGIsMHgwMSwweDAyLDB4MDQsMHgwOCwweDEwLDB4MjAsMHg0MCwweDgwLDB4OTAsMHgwYywweDhmLDB4ZTQsMHg3ZX0sCisgIDE2LDB4NDcwNSwwLHsweDAxLDB4OTMsMHg2MCwweGJjLDB4YTMsMHhmZiwweDU0LDB4M2YsMHgzMCwweGU1LDB4MDksMHg1NCwweDFmLDB4ZmUsMHhlNCwweDkzfSwKKyAgMTYsMHg0NzE1LDAsezB4YTMsMHg2MCwweDAxLDB4MGUsMHhjZiwweDU0LDB4YzAsMHgyNSwweGUwLDB4NjAsMHhhOCwweDQwLDB4YjgsMHhlNCwweDkzLDB4YTN9LAorICAxNiwweDQ3MjUsMCx7MHhmYSwweGU0LDB4OTMsMHhhMywweGY4LDB4ZTQsMHg5MywweGEzLDB4YzgsMHhjNSwweDgyLDB4YzgsMHhjYSwweGM1LDB4ODMsMHhjYX0sCisgIDE2LDB4NDczNSwwLHsweGYwLDB4YTMsMHhjOCwweGM1LDB4ODIsMHhjOCwweGNhLDB4YzUsMHg4MywweGNhLDB4ZGYsMHhlOSwweGRlLDB4ZTcsMHg4MCwweGJlfSwKKyAgMTYsMHg0NzQ1LDAsezB4OTAsMHg3ZiwweGVjLDB4ZTAsMHg5MCwweDc2LDB4ODMsMHhmMCwweGUwLDB4MTQsMHg2MCwweDFkLDB4MTQsMHg2MCwweDJhLDB4MTR9LAorICAxNiwweDQ3NTUsMCx7MHg2MCwweDM3LDB4MTQsMHg2MCwweDQ0LDB4MjQsMHgwNCwweDcwLDB4NTAsMHg5MCwweDc2LDB4OTEsMHhlMCwweDkwLDB4N2YsMHgwMH0sCisgIDE2LDB4NDc2NSwwLHsweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwLDB4ODAsMHg0NywweDkwLDB4NzYsMHg5MiwweGUwLDB4OTAsMHg3ZiwweDAwfSwKKyAgMTYsMHg0Nzc1LDAsezB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAxLDB4ZjAsMHg4MCwweDM3LDB4OTAsMHg3NiwweDkwLDB4ZTAsMHg5MCwweDdmLDB4MDB9LAorICAxNiwweDQ3ODUsMCx7MHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDEsMHhmMCwweDgwLDB4MjcsMHg5MCwweDc2LDB4ODQsMHhlMCwweDkwLDB4N2YsMHgwMH0sCisgIDE2LDB4NDc5NSwwLHsweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwLDB4ODAsMHgxNywweDkwLDB4NzYsMHg5MywweGUwLDB4OTAsMHg3ZiwweDAwfSwKKyAgMTYsMHg0N2E1LDAsezB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAxLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjB9LAorICAgMiwweDQ3YjUsMCx7MHhkMywweDIyfSwKKyAgIDIsMHg0N2I3LDAsezB4OGYsMHgyZX0sCisgIDE2LDB4NDdiOSwwLHsweGU0LDB4ZjUsMHgyZiwweDc1LDB4MzAsMHhmZiwweDc1LDB4MzEsMHgwNywweDc1LDB4MzIsMHgxYSwweGFiLDB4MzAsMHhhYSwweDMxfSwKKyAgMTYsMHg0N2M5LDAsezB4YTksMHgzMiwweDkwLDB4MDAsMHgwMSwweDEyLDB4MzYsMHhhYiwweGI0LDB4MDMsMHgxZiwweGFmLDB4MmYsMHgwNSwweDJmLDB4ZWZ9LAorICAxNiwweDQ3ZDksMCx7MHg2NSwweDJlLDB4NzAsMHgwMSwweDIyLDB4MTIsMHgzNiwweDkyLDB4N2UsMHgwMCwweDI5LDB4ZmYsMHhlZSwweDNhLDB4YzksMHhlZn0sCisgIDE2LDB4NDdlOSwwLHsweGM5LDB4NzUsMHgzMCwweGZmLDB4ZjUsMHgzMSwweDg5LDB4MzIsMHg4MCwweGQyLDB4N2IsMHgwMCwweDdhLDB4MDAsMHg3OSwweDAwfSwKKyAgIDEsMHg0N2Y5LDAsezB4MjJ9LAorICAgNiwweDQ3ZmEsMCx7MHgxMiwweDRiLDB4MjgsMHhjMiwweDMxLDB4MjJ9LAorICAxNiwweDQ4MDAsMCx7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4YzAsMHhkMCwweGU4LDB4YzAsMHhlMCwweGU5LDB4YzAsMHhlMH0sCisgIDE2LDB4NDgxMCwwLHsweGVhLDB4YzAsMHhlMCwweGViLDB4YzAsMHhlMCwweGVjLDB4YzAsMHhlMCwweGVkLDB4YzAsMHhlMCwweGVlLDB4YzAsMHhlMCwweGVmfSwKKyAgMTYsMHg0ODIwLDAsezB4YzAsMHhlMCwweGMyLDB4Y2EsMHhjMiwweGNmLDB4OTAsMHg3ZiwweDk4LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgzMCwweDJlLDB4MDN9LAorICAxNiwweDQ4MzAsMCx7MHgxMiwweDE0LDB4YTYsMHg5MCwweDdmLDB4OTgsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDUzLDB4YTgsMHhmYSwweDEyLDB4MTYsMHg2MX0sCisgIDE2LDB4NDg0MCwwLHsweGQwLDB4ZTAsMHhmZiwweGQwLDB4ZTAsMHhmZSwweGQwLDB4ZTAsMHhmZCwweGQwLDB4ZTAsMHhmYywweGQwLDB4ZTAsMHhmYiwweGQwfSwKKyAgMTYsMHg0ODUwLDAsezB4ZTAsMHhmYSwweGQwLDB4ZTAsMHhmOSwweGQwLDB4ZTAsMHhmOCwweGQwLDB4ZDAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZjB9LAorICAgMywweDQ4NjAsMCx7MHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDQ4NjMsMCx7MHg5MCwweDdmLDB4ZWMsMHhlMCwweDkwLDB4NzYsMHg4MywweGYwLDB4ZTAsMHgxNCwweDYwLDB4MTcsMHgxNCwweDYwLDB4MjEsMHgxNH0sCisgIDE2LDB4NDg3MywwLHsweDYwLDB4MmIsMHgxNCwweDYwLDB4MzIsMHgyNCwweDA0LDB4NzAsMHgzOCwweDkwLDB4N2YsMHhlYSwweGUwLDB4OTAsMHg3NiwweDkxfSwKKyAgMTYsMHg0ODgzLDAsezB4ZjAsMHg4MCwweDM1LDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHg5MCwweDc2LDB4OTIsMHhmMCwweDEyLDB4M2UsMHg5ZiwweDgwLDB4Mjh9LAorICAxNiwweDQ4OTMsMCx7MHg5MCwweDdmLDB4ZWEsMHhlMCwweDkwLDB4NzYsMHg5MCwweGYwLDB4MTIsMHgxOCwweDAwLDB4ODAsMHgxYiwweDkwLDB4N2YsMHhlYX0sCisgIDE2LDB4NDhhMywwLHsweGUwLDB4OTAsMHg3NiwweDg0LDB4ZjAsMHg4MCwweDExLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHg5MCwweDc2LDB4OTMsMHhmMCwweDgwfSwKKyAgMTAsMHg0OGIzLDAsezB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweGQzLDB4MjJ9LAorICAxNiwweDQ4YmQsMCx7MHgzMCwweDJkLDB4MzksMHhjMiwweDJkLDB4OTAsMHg3NiwweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDEsMHgwZCwweGU0LDB4OTAsMHg3Nn0sCisgIDE2LDB4NDhjZCwwLHsweDdjLDB4ZjAsMHhhMywweDc0LDB4ZjgsMHhmMCwweGEzLDB4NzQsMHgwYSwweGYwLDB4ZWYsMHhiNCwweDAyLDB4MGQsMHhlNCwweDkwfSwKKyAgMTYsMHg0OGRkLDAsezB4NzYsMHg3YywweGYwLDB4YTMsMHg3NCwweGYwLDB4ZjAsMHhhMywweDc0LDB4MGIsMHhmMCwweGVmLDB4YjQsMHgwMywweDBkLDB4ZTR9LAorICAxMywweDQ4ZWQsMCx7MHg5MCwweDc2LDB4N2MsMHhmMCwweGEzLDB4NzQsMHhmOCwweGYwLDB4YTMsMHg3NCwweDE3LDB4ZjAsMHgyMn0sCisgICA2LDB4NDhmYSwwLHsweDUzLDB4OTEsMHhiZiwweGQyLDB4MmQsMHgzMn0sCisgIDE2LDB4NDkwMCwwLHsweDAyLDB4MmYsMHhlNywweDAwLDB4MDIsMHgzZCwweDQ3LDB4MDAsMHgwMiwweDRkLDB4YjQsMHgwMCwweDAyLDB4NGMsMHg0MywweDAwfSwKKyAgMTYsMHg0OTEwLDAsezB4MDIsMHg0YiwweGU5LDB4MDAsMHgwMiwweDJmLDB4ZmYsMHgwMCwweDAyLDB4NGMsMHg1YiwweDAwLDB4MDIsMHg0YywweDBhLDB4MDB9LAorICAxNiwweDQ5MjAsMCx7MHgwMiwweDRjLDB4NzIsMHgwMCwweDAyLDB4NGIsMHg1YSwweDAwLDB4MDIsMHg0YywweDg5LDB4MDAsMHgwMiwweDRjLDB4YTAsMHgwMH0sCisgIDE2LDB4NDkzMCwwLHsweDAyLDB4NGMsMHhiNywweDAwLDB4MDIsMHg0YywweGNlLDB4MDAsMHgwMiwweDRjLDB4ZTUsMHgwMCwweDAyLDB4NGMsMHhmYywweDAwfSwKKyAgMTYsMHg0OTQwLDAsezB4MDIsMHg0ZCwweDEzLDB4MDAsMHgwMiwweDRkLDB4MmEsMHgwMCwweDAyLDB4NGQsMHg0MSwweDAwLDB4MDIsMHg0ZCwweDU4LDB4MDB9LAorICAgOCwweDQ5NTAsMCx7MHgwMiwweDRkLDB4NmYsMHgwMCwweDAyLDB4NGQsMHg4NiwweDAwfSwKKyAgMTYsMHg0OTU4LDAsezB4ZTQsMHg5MCwweDc2LDB4MjYsMHhmMCwweDkwLDB4NzYsMHgyNiwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MzR9LAorICAxNiwweDQ5NjgsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZWMsMHhlMCwweGZkLDB4ZWUsMHg2ZH0sCisgIDE2LDB4NDk3OCwwLHsweDYwLDB4MGUsMHhlZiwweGMzLDB4OTQsMHgwNCwweDUwLDB4MDgsMHg5MCwweDc2LDB4MjYsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGQ1fSwKKyAgMTYsMHg0OTg4LDAsezB4ZWYsMHhiNCwweDA0LDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4ZWYsMHg3NSwweGYwLDB4MDN9LAorICAxNiwweDQ5OTgsMCx7MHhhNCwweDI0LDB4MzIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweDAwLDB4ZjAsMHg5MH0sCisgICA2LDB4NDlhOCwwLHsweDdmLDB4YjUsMHg3NCwweDAxLDB4ZjAsMHgyMn0sCisgIDE2LDB4NDlhZSwwLHsweDkwLDB4NzYsMHg0NiwweDc0LDB4ODAsMHhmMCwweGU0LDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzfSwKKyAgMTYsMHg0OWJlLDAsezB4ZjAsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweDc0LDB4ODAsMHhmMCwweGU0LDB4YTMsMHhmMCwweGEzLDB4ZjB9LAorICAxNiwweDQ5Y2UsMCx7MHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHg3NCwweDQwLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHhhM30sCisgIDE2LDB4NDlkZSwwLHsweDc0LDB4NDAsMHhmMCwweGU0LDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweGYwfSwKKyAgMTYsMHg0OWVlLDAsezB4YTMsMHg3NCwweDQwLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHhhMywweDc0LDB4NDAsMHhmMCwweGU0LDB4YTMsMHhmMCwweGEzLDB4ZjB9LAorICAgNSwweDQ5ZmUsMCx7MHhhMywweGYwLDB4YTMsMHhmMCwweDIyfSwKKyAgMTYsMHg0YTAzLDAsezB4ZTQsMHg5MCwweDc2LDB4MjUsMHhmMCwweDkwLDB4NzYsMHgyNSwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MzR9LAorICAxNiwweDRhMTMsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZWMsMHhlMCwweGZkLDB4ZWUsMHg2ZH0sCisgIDE2LDB4NGEyMywwLHsweDYwLDB4MGUsMHhlZiwweGMzLDB4OTQsMHgwNCwweDUwLDB4MDgsMHg5MCwweDc2LDB4MjUsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGQ1fSwKKyAgMTYsMHg0YTMzLDAsezB4ZWYsMHhiNCwweDA0LDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZSwweGMwLDB4ZTB9LAorICAxNiwweDRhNDMsMCx7MHhmZSwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDMyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZX0sCisgICAyLDB4NGE1MywwLHsweGYwLDB4MjJ9LAorICAxNiwweDRhNTUsMCx7MHhlNCwweGZlLDB4NzUsMHgxZCwweGZmLDB4NzUsMHgxZSwweDA1LDB4NzUsMHgxZiwweDEyLDB4YWIsMHgxZCwweGFhLDB4MWUsMHhhOX0sCisgIDE2LDB4NGE2NSwwLHsweDFmLDB4OTAsMHgwMCwweDAxLDB4MTIsMHgzNiwweGFiLDB4NjQsMHgwMiwweDcwLDB4MmYsMHhjZCwweGVlLDB4Y2QsMHgwZSwweGVkfSwKKyAgMTYsMHg0YTc1LDAsezB4NmYsMHg3MCwweDAxLDB4MjIsMHg5MCwweDAwLDB4MDIsMHgxMiwweDM3LDB4MGUsMHg4NSwweGYwLDB4MWIsMHhmNSwweDFjLDB4NjJ9LAorICAxNiwweDRhODUsMCx7MHgxYiwweGU1LDB4MWIsMHg2MiwweDFjLDB4ZTUsMHgxYywweDYyLDB4MWIsMHgyOSwweGZkLDB4ZTUsMHgxYiwweDNhLDB4YzksMHhlZH0sCisgIDE2LDB4NGE5NSwwLHsweGM5LDB4NzUsMHgxZCwweGZmLDB4ZjUsMHgxZSwweDg5LDB4MWYsMHg4MCwweGMxLDB4N2IsMHgwMCwweDdhLDB4MDAsMHg3OSwweDAwfSwKKyAgIDEsMHg0YWE1LDAsezB4MjJ9LAorICAxNiwweDRhYTYsMCx7MHhlNCwweDkwLDB4NzYsMHg5YiwweGYwLDB4OTAsMHg3NiwweDliLDB4ZTAsMHhmZiwweDA0LDB4ZjAsMHhlZiwweDYwLDB4MDgsMHhlMH0sCisgIDE2LDB4NGFiNiwwLHsweDI0LDB4MDgsMHhmOCwweGU0LDB4ZjYsMHg4MCwweGVlLDB4OTAsMHg3NiwweDk2LDB4ZTAsMHg0NCwweDA0LDB4ZjAsMHg0NCwweDA4fSwKKyAgMTYsMHg0YWM2LDAsezB4ZjAsMHg5MCwweDgwLDB4MDMsMHhmMCwweGU0LDB4ZjUsMHgxOCwweGQyLDB4MzUsMHhmNSwweDBlLDB4ZjUsMHgxMCwweGQyLDB4MzZ9LAorICAxNiwweDRhZDYsMCx7MHg3NSwweDEyLDB4MTEsMHg3NSwweDEzLDB4MjIsMHhjMiwweDM3LDB4YzIsMHgzOSwweGMyLDB4MzgsMHhmNSwweDE2LDB4ZjUsMHgxNH0sCisgIDExLDB4NGFlNiwwLHsweGY1LDB4MWEsMHhmNSwweDBkLDB4YzIsMHgzYiwweGMyLDB4M2MsMHhjMiwweDNkLDB4MjJ9LAorICAxNiwweDRhZjEsMCx7MHhlNCwweGZmLDB4NzQsMHg1NiwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NiwweGY1LDB4ODMsMHhlMCwweGZlLDB4NzQsMHgyOH0sCisgIDE2LDB4NGIwMSwwLHsweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlZSwweGYwLDB4NzQsMHg1ZSwweDJmLDB4ZjUsMHg4MiwweGU0fSwKKyAgMTYsMHg0YjExLDAsezB4MzQsMHg3NiwweGY1LDB4ODMsMHhlMCwweGZlLDB4NzQsMHgzOCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODN9LAorICAgNiwweDRiMjEsMCx7MHhlZSwweGYwLDB4MGYsMHhiZiwweDA4LDB4Y2N9LAorICAgMSwweDRiMjcsMCx7MHgyMn0sCisgIDE2LDB4NGIyOCwwLHsweGU0LDB4OTAsMHg3MiwweDM2LDB4ZjAsMHhhMywweGYwLDB4OTAsMHg3ZiwweDk3LDB4ZTAsMHg1NCwweGZiLDB4ZjAsMHhlNCwweDkwfSwKKyAgMTYsMHg0YjM4LDAsezB4NzIsMHgzMywweGYwLDB4OTAsMHg3MiwweDMyLDB4ZjAsMHg5MCwweDcyLDB4MDEsMHgwNCwweGYwLDB4ZTQsMHg5MCwweDcyLDB4MzN9LAorICAxNiwweDRiNDgsMCx7MHhmMCwweDkwLDB4NzIsMHgzMiwweGYwLDB4OTAsMHg3MiwweDAxLDB4MDQsMHhmMCwweDkwLDB4N2YsMHg5NywweGUwLDB4NDQsMHgwNH0sCisgICAyLDB4NGI1OCwwLHsweGYwLDB4MjJ9LAorICAxNiwweDRiNWEsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4MDIsMHhmMH0sCisgIDE2LDB4NGI2YSwwLHsweDkwLDB4N2YsMHhjNywweGUwLDB4ZjUsMHgxMSwweDc1LDB4MGYsMHgwMCwweDc1LDB4MGQsMHgwMCwweGQyLDB4MzMsMHhkMCwweDgyfSwKKyAgIDUsMHg0YjdhLDAsezB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4NGI3ZiwwLHsweDkwLDB4N2YsMHhkNiwweGUwLDB4NTQsMHhmYiwweGYwLDB4ZTAsMHg0NCwweDA4LDB4ZjAsMHgzMCwweDQyLDB4MDQsMHhlMCwweDQ0fSwKKyAgMTYsMHg0YjhmLDAsezB4MDIsMHhmMCwweDdmLDB4ZGMsMHg3ZSwweDA1LDB4MTIsMHg0ZCwweDlkLDB4OTAsMHg3ZiwweGQ2LDB4ZTAsMHg1NCwweGY3LDB4ZjB9LAorICAgNSwweDRiOWYsMCx7MHhlMCwweDQ0LDB4MDQsMHhmMCwweDIyfSwKKyAgMTYsMHg0YmE0LDAsezB4OTAsMHg3ZiwweGViLDB4ZTAsMHgxNCwweDcwLDB4MTQsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4N2YsMHg3MCwweDA0LDB4MTJ9LAorICAxNiwweDRiYjQsMCx7MHg0OSwweDU4LDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NH0sCisgICAzLDB4NGJjNCwwLHsweDAxLDB4ZjAsMHgyMn0sCisgIDE2LDB4NGJjNywwLHsweDkwLDB4N2YsMHhlYiwweGUwLDB4MTQsMHg3MCwweDEzLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgxNCwweDcwLDB4MDQsMHgxMiwweDRhfSwKKyAgMTYsMHg0YmQ3LDAsezB4MDMsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDF9LAorICAgMiwweDRiZTcsMCx7MHhmMCwweDIyfSwKKyAgMTYsMHg0YmU5LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgxMCwweGYwLDB4OTB9LAorICAxNiwweDRiZjksMCx7MHg3NiwweDk2LDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHg5MCwweDgwLDB4MDMsMHhmMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMH0sCisgICAxLDB4NGMwOSwwLHsweDMyfSwKKyAgMTYsMHg0YzBhLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDAxLDB4ZjB9LAorICAxNSwweDRjMWEsMCx7MHhjMiwweDI5LDB4OTAsMHg3NiwweDhkLDB4NzQsMHgwMSwweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDRjMjksMCx7MHg5MCwweDdmLDB4ZDYsMHhlMCwweDMwLDB4ZTcsMHgxMiwweGUwLDB4NDQsMHgwMSwweGYwLDB4N2YsMHgxNCwweDdlLDB4MDAsMHgxMn0sCisgIDEwLDB4NGMzOSwwLHsweDRkLDB4OWQsMHg5MCwweDdmLDB4ZDYsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDIyfSwKKyAgMTYsMHg0YzQzLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4ZDIsMHgyNSwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MDh9LAorICAgOCwweDRjNTMsMCx7MHhmMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHg0YzViLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDAxLDB4ZjB9LAorICAgNywweDRjNmIsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4NGM3MiwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHgwMiwweGYwfSwKKyAgIDcsMHg0YzgyLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDRjODksMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4MDQsMHhmMH0sCisgICA3LDB4NGM5OSwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHg0Y2EwLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDA0LDB4ZjB9LAorICAgNywweDRjYjAsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4NGNiNywwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHgwOCwweGYwfSwKKyAgIDcsMHg0Y2M3LDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDRjY2UsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4MDgsMHhmMH0sCisgICA3LDB4NGNkZSwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHg0Y2U1LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDEwLDB4ZjB9LAorICAgNywweDRjZjUsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4NGNmYywwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHgxMCwweGYwfSwKKyAgIDcsMHg0ZDBjLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDRkMTMsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4MjAsMHhmMH0sCisgICA3LDB4NGQyMywwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHg0ZDJhLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDIwLDB4ZjB9LAorICAgNywweDRkM2EsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4NGQ0MSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhOSwweGUwLDB4NDQsMHg0MCwweGYwfSwKKyAgIDcsMHg0ZDUxLDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDRkNTgsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4NDAsMHhmMH0sCisgICA3LDB4NGQ2OCwwLHsweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHg0ZDZmLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGE5LDB4ZTAsMHg0NCwweDgwLDB4ZjB9LAorICAgNywweDRkN2YsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4NGQ4NiwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYSwweGUwLDB4NDQsMHg4MCwweGYwfSwKKyAgIDcsMHg0ZDk2LDAsezB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDRkOWQsMCx7MHg4ZSwweDM1LDB4OGYsMHgzNiwweGU1LDB4MzYsMHgxNSwweDM2LDB4YWUsMHgzNSwweDcwLDB4MDIsMHgxNSwweDM1LDB4NGUsMHg2MH0sCisgICA3LDB4NGRhZCwwLHsweDA1LDB4MTIsMHgxNCwweDg1LDB4ODAsMHhlZSwweDIyfSwKKyAgMTYsMHg0ZGI0LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwNCwweGYwLDB4ZDB9LAorICAgNiwweDRkYzQsMCx7MHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDRkY2EsMCx7MHg5MCwweDc2LDB4ODIsMHhlMCwweDkwLDB4N2YsMHgwMCwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwLDB4ZDMsMHgyMn0sCisgIDEyLDB4NGRkYSwwLHsweGMyLDB4MzcsMHhlNCwweGY1LDB4MGUsMHhmNSwweDEwLDB4YzIsMHgzNiwweGY1LDB4MTQsMHgyMn0sCisgICA5LDB4NGRlNiwwLHsweGMyLDB4MjUsMHg1MywweGQ4LDB4ZWYsMHg0MywweGQ4LDB4MjAsMHgzMn0sCisgICA3LDB4NGRlZiwwLHsweDUzLDB4OTgsMHhmZSwweDUzLDB4OTgsMHhmZCwweDMyfSwKKyAgIDcsMHg0ZGY2LDAsezB4NTMsMHhjMCwweGZlLDB4NTMsMHhjMCwweGZkLDB4MzJ9LAorICAgNiwweDRkZmQsMCx7MHg1MywweDkxLDB4N2YsMHhkMiwweDJjLDB4MzJ9LAorICAgNCwweDRlMDMsMCx7MHg1MywweDkxLDB4ZGYsMHgzMn0sCisgICA0LDB4NGUwNywwLHsweDUzLDB4ZDgsMHhmNywweDMyfSwKKyAgIDQsMHg0ZTBiLDAsezB4MTIsMHgxNywweDMwLDB4MjJ9LAorICAgMywweDRlMGYsMCx7MHhjMiwweDhkLDB4MzJ9LAorICAgMywweDRlMTIsMCx7MHhjMiwweDhmLDB4MzJ9LAorICAgMiwweDRlMTUsMCx7MHhkMywweDIyfSwKKyAgIDIsMHg0ZTE3LDAsezB4ZDMsMHgyMn0sCisgICAyLDB4NGUxOSwwLHsweGQzLDB4MjJ9LAorICAgMiwweDRlMWIsMCx7MHhkMywweDIyfSwKKyAgIDIsMHg0ZTFkLDAsezB4ZDMsMHgyMn0sCisgICAyLDB4NGUxZiwwLHsweGQzLDB4MjJ9LAorICAgMiwweDRlMjEsMCx7MHhjMywweDIyfSwKKyAgIDAsMHgwMDAwLDEsezB9Cit9OworLyogU291cmNlOiBFTUk2Mk1GVy5IRVggCis6MTAwQzhGMDA0MTc2NjgwMTQxNzY2QTAyNDE3NjZCMEFDMTIwQzEyMTIzCis6MTA0NEFEMDBDMkFGRDIyNDkwN0Y5Mzc0MzBGMDkwN0Y5Qzc0QkJGMDk4Cis6MTA0NEJEMDA5MDdGOTZFMDQ0MzBGMEUwNTQzMEYwOTA3Rjk0NzQzMDZCCis6MTA0NENEMDBGMDkwN0Y5RDc0Q0ZGMDkwN0Y5Nzc0QTBGMDkwN0Y5NUMyCis6MTA0NEREMDA3NEMwRjA5MDdGOUU3NDAzRjA5MDdGOTlFMDMwRTIwOUY0Cis6MTA0NEVEMDA5MDA1MTk3NEEwRjBFNEEzRjBDMjI1QzIyMkMyMjNDMjI0Cis6MTA0NEZEMDAyNjEyNEIyODEyMkRBOTEyM0JEMzEyNDYxOTEyM0E0MkZECis6MTA0NTBEMDA5MDc2Njg3NDAxRjA3MDBGMTI0QzI5MTI0RTE1MTI0RUYwCis6MTA0NTFEMDAxNzEyMUI0MDEyMTQ5NjEyNDMxNDkwN0ZBRkUwNDQwMTAyCis6MTA0NTJEMDBGMDkwN0ZBRUUwNDQxRkYwOTA3RkFDNzRGRkYwOTA3RjcxCis6MTA0NTNEMDBBREYwOTA3RkRFRjA5MDdGREZGMDkwN0ZBQkYwOTA3RjVECis6MTA0NTREMDBBOUYwOTA3RkFBRjA1MzkxRUY0M0Q4MjBEMkU4NDNEODM5Cis6MDg0NTVEMDAyMDUzQThBMDQzQTg4MDIyMEUKKzoxMDA3QTYwMEU0OTA3NjY2RjAxMjQ0QUQyMDI2MTM5MDc2NjZFMEMzOTgKKzoxMDA3QjYwMDk0MDI1MDBBRTAwNEYwRDI0MjEyNEI3RjgwRUEzMDI2QkYKKzoxMDA3QzYwMDA1MTIyODAxQzIyNjMwMjUyQjkwNzY5NkUwNTRGQ0YwQkYKKzoxMDA3RDYwMDkwODAwM0YwMTIxNDk2OTA3Njk2RTA0NDAzRjA5MDgwOTEKKzoxMDA3RTYwMDAzRjBFNDkwNzY2N0YwOTA3NjY3RTAwNEYwRTBCNDRCQUYKKzowQTA3RjYwMEY2MTI0N0ZBMTI0MTFCODBDNTIyREIKKzoxMDI4MDEwMEMyMjBDMjIxQzIyQTkwN0ZFOEUwMTIzN0Y5MjgzMDAwQTUKKzoxMDI4MTEwMDI4OEMwMTI4QTIwMjJBMUYyMTJBNkEyMjI5M0Q4MDI5MDcKKzoxMDI4MjEwMDdEODEyOUQxODIyQTg0QTEyQUJBQTIwMDAwMkFCRjkwREYKKzoxMDI4MzEwMDdGRTlFMDE0NjAxMTI0RkU2MDI4MjRGRTYwM0IyNEZDNDMKKzoxMDI4NDEwMDcwNDAxMjNGRTU0MUNCMTI0RTFENDAwMjQxQ0I5MDdGQkIKKzoxMDI4NTEwMEVBRTBCNDAxMDRDMjIyNDFDQjkwN0ZCNEUwNDQwMUYwMkMKKzoxMDI4NjEwMDQxQ0IxMjRFMUY5MDdGRUFFMEI0MDEwNEQyMjI0MUNCNEEKKzoxMDI4NzEwMDkwN0ZCNEUwNDQwMUYwNDFDQjkwN0ZCNEUwNDQwMUYwOUIKKzoxMDI4ODEwMDQxQ0I5MDdGQjRFMDQ0MDFGMDQxQ0I5MDdGRTlFMDI0NUIKKzoxMDI4OTEwMEY1NzAwNTEyNDg2MzQxQ0I5MDdGQjRFMDQ0MDFGMDQxRUIKKzoxMDI4QTEwMENCOTA3RkU5RTAyNEZENjA1NDI0MDI2MDAyMjEzNDEyQzAKKzoxMDI4QjEwMDRFMUQ0MDAyNDFDQjkwN0ZFQUUwNzAzODkwN0ZFQ0UwMDIKKzoxMDI4QzEwMEY0NTQ4MEZGQzQ1NDBGRkZFMDU0MDcyRjI1RTAyNEI0RDMKKzoxMDI4RDEwMEY1ODJFNDM0N0ZGNTgzRTRGMDkwN0ZFQ0UwNTQ4MEZGRUYKKzoxMDI4RTEwMDEzMTMxMzU0MUZGRkUwNTQwNzJGOTA3RkQ3RjBFMDQ0RDgKKzoxMDI4RjEwMDIwRjA0MUNCOTA3RkI0RTA0NDAxRjA0MUNCMTI0RTFGNTgKKzoxMDI5MDEwMDQwMDI0MUNCOTA3RkVBRTA3MDIwOTA3RkVDRTBGNDU0RUMKKzoxMDI5MTEwMDgwRkZDNDU0MEZGRkUwNTQwNzJGMjVFMDI0QjRGNTgyNTMKKzoxMDI5MjEwMEU0MzQ3RkY1ODM3NDAxRjA0MUNCOTA3RkI0RTA0NDAxM0UKKzoxMDI5MzEwMEYwNDFDQjkwN0ZCNEUwNDQwMUYwNDFDQjkwN0ZFOUUwREUKKzoxMDI5NDEwMDYwMTIyNEY4NjAwOTI0MDI3MDI5MTI0M0U3NDFDQjEyNzYKKzoxMDI5NTEwMDREQ0E0MUNCMTI0RTFCQTIyMkU0MzNGRjI1RTBGRkEyNTgKKzoxMDI5NjEwMDIzRTQzMzRGOTA3RjAwRjBFNEEzRjA5MDdGQjU3NDAyMkQKKzoxMDI5NzEwMEYwNDFDQjkwN0ZCNEUwNDQwMUYwNDFDQjkwN0ZFOUUwOUUKKzoxMDI5ODEwMDYwMzMyNEY2NjAyQTI0MDQ3MDNEOTA3RkVCRTAyNERFNUUKKzoxMDI5OTEwMDYwMEMwNDcwMTI5MDdGQjRFMDQ0MDFGMDQxQ0I5MDdGNTEKKzoxMDI5QTEwMEI0RTA0NDAxRjA0MUNCOTA3RkI0RTA0NDAxRjA0MUNCNkQKKzoxMDI5QjEwMDEyNDc0NTQxQ0IxMjRFMUJFNDkwN0YwMEYwQTNGMDkwRUIKKzoxMDI5QzEwMDdGQjU3NDAyRjA0MUNCOTA3RkI0RTA0NDAxRjA0MUNCN0MKKzoxMDI5RDEwMDkwN0ZFOUUwMjRGNDYwMzQyNDBDNzAzOTEyNEUxQjkwOEUKKzoxMDI5RTEwMDdGRUNFMEY0NTQ4MEZGQzQ1NDBGRkZFMDU0MDcyRjI1MUYKKzoxMDI5RjEwMEUwMjRCNEY1ODJFNDM0N0ZGNTgzRTA1NEZEOTA3RjAwNTgKKzoxMDJBMDEwMEYwRTRBM0YwOTA3RkI1NzQwMkYwNDFDQjkwN0ZCNEUwODUKKzoxMDJBMTEwMDQ0MDFGMDQxQ0I5MDdGQjRFMDQ0MDFGMDQxQ0I5MDdGODEKKzoxMDJBMjEwMEU5RTAyNEY2NjAxMjE0NjAxQTI0MDI3MDFERDIyMDkwOEQKKzoxMDJBMzEwMDdGQjRFMDQ0MDFGMDgwMTJEMjIwOTA3RkI0RTA0NDAxRTEKKzoxMDJBNDEwMEYwODAwNzkwN0ZCNEUwNDQwMUYwMjAyMDE4OTA3RkVFRTEKKzoxMDJBNTEwMEUwNzAwNEEzRTA2MDBCRDIyOUQyMjcxMjE3NEFEMjJBRDAKKzoxMDJBNjEwMDgwMDMxMjA4MDBDMjIwODA2MTkwN0ZFRUUwNzAwNEEzMTEKKzoxMDJBNzEwMEUwNjAwQkQyMjlEMjI4MTIxNzRBRDIyQTgwNEMxMjM4OTAKKzoxMDJBODEwMDc0ODA0NzkwN0ZFOUUwMjRGRTYwMTIxNDYwMUEyNDAyRUEKKzoxMDJBOTEwMDcwMUREMjIxOTA3RkI0RTA0NDAxRjA4MDEyRDIyMTkwQzgKKzoxMDJBQTEwMDdGQjRFMDQ0MDFGMDgwMDc5MDdGQjRFMDQ0MDFGMDIwNUUKKzoxMDJBQjEwMDIxMDMxMjEwMDBDMjIxODAxMTEyMkFENjgwMEMxMjRFNUQKKzoxMDJBQzEwMDIxNTAwNzkwN0ZCNEUwNDQwMUYwMjAyQTA3OTA3RkI0QTEKKzowNTJBRDEwMEUwNDQwMkYwMjJDOAorOjEwNDNFNzAwMTI0RTE5NDAwMjgxQUM5MDdGRUJFMDI0RkU2MDFFMTQ1MAorOjEwNDNGNzAwNjA0NjE0NjA2RTE0NzAwMjgxOUQyNDA0NjAwMjgxQTVEQQorOjEwNDQwNzAwNzQwNTkwN0ZENEYwNzQwMDkwN0ZENUYwMjI5MDdGRUFGNgorOjEwNDQxNzAwRTBGRjEyNEE1NThCMjA4QTIxODkyMkVBNDk2MDExQ0U5MgorOjEwNDQyNzAwRUFDRUVFOTA3RkQ0RjBDRkU5Q0ZFRjkwN0ZENUYwMjJBMAorOjEwNDQzNzAwOTA3RkI0RTA0NDAxRjAyMjkwN0ZFQUUwRkYxMjQ3Qjc5MworOjEwNDQ0NzAwOEIyMDhBMjE4OTIyRUE0OTYwMTFDRUVBQ0VFRTkwN0YzRAorOjEwNDQ1NzAwRDRGMENGRTlDRkVGOTA3RkQ1RjAyMjkwN0ZCNEUwNDQzRQorOjEwNDQ2NzAwMDFGMDIyOTA3RkVBRTBGRjkwN0VDMEUwRkRBM0UwRkIzMQorOjEwNDQ3NzAwMTIxNzk0OEIyMDhBMjE4OTIyRUE0OTYwMTFDRUVBQ0U0RAorOjEwNDQ4NzAwRUU5MDdGRDRGMENGRTlDRkVGOTA3RkQ1RjAyMjkwN0ZFOQorOjEwNDQ5NzAwQjRFMDQ0MDFGMDIyOTA3RkI0RTA0NDAxRjAyMjkwN0YyMQorOjA1NDRBNzAwQjRFMDQ0MDFGMDQ3Cis6MDE0NEFDMDAyMkVECis6MDMwMDMzMDAwMjRERTY5NQorOjA5NERFNjAwQzIyNTUzRDhFRjQzRDgyMDMyNTYKKzowMjBDOUYwMEMxMkY2MworOjA2NDdGQTAwMTI0QjI4QzIzMTIyMUYKKzoxMDQzMTQwMEU0OTA3Njk2RjA5MDgwMDNGMDkwN0ZFMDc0OTBGMDkwQjMKKzoxMDQzMjQwMDdGRTE3NDA0RjBFNDkwN0ZEREYwOTA3RkExRjA1MzhFODAKKzoxMDQzMzQwMEY4NzU4ODA1NzVCODIwNzVGODAxNDM4RTMwRjVDODc1OTEKKzoxMDQzNDQwMENBN0Y3NUNCRjg0M0E4MjAxMjQ1NjVDMjJDQzIyREMyODIKKzoxMDQzNTQwMDJCQzIyRjkwN0ZGQzc0RERGMDkwN0ZGRjc0RkZGMDkwRjAKKzoxMDQzNjQwMDdGOTdFMDQ0MDFGMDkwNzYxOTc0MDFGMEU0OTA3Njg1MkIKKzoxMDQzNzQwMEYwQTNGMDkwNzY4MUYwOTA3NjgwRjAxMjQ5QUUxMjBGOUYKKzoxMDQzODQwMEM2MTI0QUYxOTA3Rjk3RTA0NDA4RjBFMDU0QjlGMEQyQTUKKzoxMDQzOTQwMDMwMjAzMDE4MTI0QUE2MTIzMDAwMTI0MDAwMTI0MjFGNzgKKzoxMDQzQTQwMDEyNDhCRDEyMUIwNDEyMTY2MTEyNDIxRjEyNEFBNkMyMDEKKzoxMDQzQjQwMDJGQzIzMUMyMzJDMjM0QzIzM0MyMjlDMjI3QzIyOEU0NTYKKzoxMDQzQzQwMEY1MTE5MDc2ODlGMDkwNzYzRkYwOTA3NjQxRjA5MDc2RjIKKzoxMDQzRDQwMDQwRjA5MDc2OEFGMEEzRjBBMzA0RjBFNEEzRjA5MDc2ODIKKzowMzQzRTQwMDk5RjAyMjJCCis6MTA0OEJEMDAzMDJEMzlDMjJEOTA3NjE5RTBGRkI0MDEwREU0OTA3NkJDCis6MTA0OENEMDA3Q0YwQTM3NEY4RjBBMzc0MEFGMEVGQjQwMjBERTQ5MDM5Cis6MTA0OEREMDA3NjdDRjBBMzc0RjBGMEEzNzQwQkYwRUZCNDAzMERFNDQ5Cis6MEQ0OEVEMDA5MDc2N0NGMEEzNzRGOEYwQTM3NDE3RjAyMjBECis6MTAxQjA0MDAzMDJDMzhDMjJDOTA3NjE5RTBGRkI0MDEwRTkwNzY3QzBDCis6MTAxQjE0MDA3NEMwRjBBMzc0MTRGMEEzNzQwQkYwRUZCNDAyMERFNERBCis6MTAxQjI0MDA5MDc2N0NGMEEzNzQxMEYwQTM3NDBDRjBFRkI0MDMwQjY0Cis6MEMxQjM0MDBFNDkwNzY3Q0YwQTM3NDE4RjBBM0YwMjI3QgorOjEwNDExQjAwOTA3NjhERTA2NDAxNzAyNzMwMjcwOEMyMjcxMjA4MDBDMworOjEwNDEyQjAwMTIxNzRBMzAyODA4QzIyODEyMzg3NDEyMTc0QTMwMkEzQworOjEwNDEzQjAwMEVFNDkwNzY4REYwQzIyQTkwN0ZCNEUwNDQwMkYwOTBBQQorOjEwNDE0QjAwNzYzRkUwQjQwMTA1RTRGMDEyMzI2RjkwNzY0MUUwQjRCMworOjEwNDE1QjAwMDEwNUU0RjAxMjM0OUE5MDc2NDBFMEI0MDEwMzEyMzQ3NgorOjEwNDE2QjAwOUExMjMwMDAzMDMzMDMxMjQwMDA5MDdGOUJFMDIwRTQyMgorOjEwNDE3QjAwMDJDMjNGOTA3RjlCRTAzMEU0MDJEMjNGOTA3RjlCRTBGNgorOjEwNDE4QjAwMjBFNTAyQzIzRTkwN0Y5QkUwMzBFNTAyRDIzRUEyNDE4OQorOjEwNDE5QjAwMzAzRjAxQjM1MDFGQTIzRjkyNDEzMDNGMDk5MDc2OTdCOQorOjEwNDFBQjAwRTA1NEZFRjA4MDA3OTA3Njk3RTA0NDAxRjA5MDc2OTcwQworOjEwNDFCQjAwRTA5MDgwMDJGMDMwM0YzNDkwNzYxOUUwRkZCNDAxMEVBRQorOjEwNDFDQjAwOTA3NjdDNzQ2N0YwQTM3NDA2RjBBMzc0MEJGMEVGQjRENQorOjEwNDFEQjAwMDIwQkU0OTA3NjdDRjBBM0YwQTM3NDBDRjBFRkI0MDMyNQorOjEwNDFFQjAwMEJFNDkwNzY3Q0YwQTNGMEEzNzQxOEYwQTI0MDMwM0U2MQorOjEwNDFGQjAwMDFCMzUwMUZBMjNFOTI0MDMwM0UwOTkwNzY5NUUwNDRBOQorOjEwNDIwQjAwMDRGMDgwMDc5MDc2OTVFMDU0RkJGMDkwNzY5NUUwOTA2MworOjA0NDIxQjAwODAwMUYwMjIwQworOjAyNEUxNTAwRDMyMkE2Cis6MDI0RTE3MDBEMzIyQTQKKzowMjRFMTkwMEQzMjJBMgorOjEwM0ZFNTAwOTA3RkVBRTA5MDc2ODJGMEU0OTA3NjkxRjA5MDc2OTI3OAorOjBCM0ZGNTAwRjA5MDc2OTBGMDkwNzY5M0YwRDMyMkNECis6MTA0RENBMDA5MDc2ODJFMDkwN0YwMEYwOTA3RkI1NzQwMUYwRDMyMjU0Cis6MTA0ODYzMDA5MDdGRUNFMDkwNzY4M0YwRTAxNDYwMTcxNDYwMjExNERECis6MTA0ODczMDA2MDJCMTQ2MDMyMjQwNDcwMzg5MDdGRUFFMDkwNzY5MUM0Cis6MTA0ODgzMDBGMDgwMzU5MDdGRUFFMDkwNzY5MkYwMTIzRTlGODAyODg4Cis6MTA0ODkzMDA5MDdGRUFFMDkwNzY5MEYwMTIxODAwODAxQjkwN0ZFQUY4Cis6MTA0OEEzMDBFMDkwNzY4NEYwODAxMTkwN0ZFQUUwOTA3NjkzRjA4MDM4Cis6MEE0OEIzMDAwNzkwN0ZCNEUwNDQwMUYwRDMyMjI3Cis6MTA0NzQ1MDA5MDdGRUNFMDkwNzY4M0YwRTAxNDYwMUQxNDYwMkExNEVECis6MTA0NzU1MDA2MDM3MTQ2MDQ0MjQwNDcwNTA5MDc2OTFFMDkwN0YwMDk3Cis6MTA0NzY1MDBGMDkwN0ZCNTc0MDFGMDgwNDc5MDc2OTJFMDkwN0YwMERECis6MTA0Nzc1MDBGMDkwN0ZCNTc0MDFGMDgwMzc5MDc2OTBFMDkwN0YwMERGCis6MTA0Nzg1MDBGMDkwN0ZCNTc0MDFGMDgwMjc5MDc2ODRFMDkwN0YwMEVCCis6MTA0Nzk1MDBGMDkwN0ZCNTc0MDFGMDgwMTc5MDc2OTNFMDkwN0YwMERDCis6MTA0N0E1MDBGMDkwN0ZCNTc0MDFGMDgwMDc5MDdGQjRFMDQ0MDFGMDhDCis6MDI0N0I1MDBEMzIyMEQKKzowMjRFMUIwMEQzMjJBMAorOjAyNEUxRDAwRDMyMjlFCis6MDI0RTFGMDBEMzIyOUMKKzowMjRFMjEwMEMzMjJBQQorOjEwMkZFNzAwQzBFMEMwODNDMDgyRDIyNjUzOTFFRjkwN0ZBQjc0MDFCQgorOjA4MkZGNzAwRjBEMDgyRDA4M0QwRTAzMjVCCis6MTA0REI0MDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUI3NDA0RjBEMDA1Cis6MDY0REM0MDA4MkQwODNEMEUwMzIzMgorOjEwM0Q0NzAwQzBFMEMwRjBDMDgzQzA4MkMwRDBFOEMwRTBFOUMwRTBGNgorOjEwM0Q1NzAwRUFDMEUwRUJDMEUwRUNDMEUwRURDMEUwRUVDMEUwRUZCMQorOjEwM0Q2NzAwQzBFMDkwN0ZBMkUwOTA3NjdGRjA5MDdGNzRFMDkwNzYzRAorOjEwM0Q3NzAwODdGMDkwN0Y3NUUwOTA3Njg4RjA5MDdGOThFMDQ0MDIxNgorOjEwM0Q4NzAwRjA5MDc2OTZFMEZGMjBFMTBDNDQwMkYwOTA4MDAzRjA3QgorOjEwM0Q5NzAwRDIzMjEyNEIyODkwNzY3RkUwMjBFMjUwOTA3Njg3RTA2RgorOjEwM0RBNzAwRkVBM0UwN0MwMDI0MDBGNTM0RUMzRUY1MzM5MDc2OThEMgorOjEwM0RCNzAwRTBGREFFMzNBRjM0MTIzNkQ4OTA3Njg3RUZGMEQyMkZDRQorOjEwM0RDNzAwMzAzMTI5MjAzRjI2QzIzMTkwN0Y5NEUwNTRDRkYwOTBDNAorOjEwM0RENzAwN0Y5QUUwMzBFNDA0RDIyREMyMkM5MDdGOUFFMDIwRTU1MAorOjEwM0RFNzAwMDRDMjJERDIyQzkwN0Y5NEUwNDQzMEYwMTI0OEJEMTJDQgorOjEwM0RGNzAwMUIwNDMwMkYxMjEyNDIxRkMyMkY3NUU4MDExMjE2OEFCOAorOjEwM0UwNzAwNzVFODBERDIyQjgwMDU3NUU4MDFDMjJCMjAyQjM0OTA2NQorOjEwM0UxNzAwNzYxOUUwRkZCNDAxMEU5MDc2N0M3NDY3RjBBMzc0MDYwMAorOjEwM0UyNzAwRjBBMzc0MEJGMEVGQjQwMjBCOTA3NjdDRTRGMEEzRjBGMAorOjEwM0UzNzAwQTM3NDBDRjBFRkI0MDMwQjkwNzY3Q0U0RjBBM0YwQTMyQgorOjEwM0U0NzAwNzQxOEYwNzVDQUQzNzVDQkZFRDJDQTMwMzQwNEMyMzRBNQorOjEwM0U1NzAwODAwMkQyMzQzMDM0MEQ5MDc2ODlFMEMzOTQwMzQwMDQ1NQorOjEwM0U2NzAwRTAyNEZERjA1MzkxRUY5MDdGQUI3NDAyRjBGMDkwN0Y2OAorOjEwM0U3NzAwOThFMDU0RkRGMEQwRTBGRkQwRTBGRUQwRTBGREQwRTBDOAorOjEwM0U4NzAwRkNEMEUwRkJEMEUwRkFEMEUwRjlEMEUwRjhEMEQwRDAxOQorOjA4M0U5NzAwODJEMDgzRDBGMEQwRTAzMkFDCis6MTA0QkU5MDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUI3NDEwRjA5MDA2Cis6MTA0QkY5MDA3Njk2RTA1NEZERjA5MDgwMDNGMEQwODJEMDgzRDBFMDI3Cis6MDE0QzA5MDAzMjc4Cis6MDEyRkZGMDAzMjlGCis6MTA0QzQzMDBDMEUwQzA4M0MwODJEMjI1NTM5MUVGOTA3RkFCNzQwODNDCis6MDg0QzUzMDBGMEQwODJEMDgzRDBFMDMyRTIKKzoxMDRDNUIwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBOUUwNDQwMUYwODQKKzowNzRDNkIwMEQwODJEMDgzRDBFMDMyQkIKKzoxMDRDMEEwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQUUwNDQwMUYwRDQKKzowRjRDMUEwMEMyMjk5MDc2OEQ3NDAxRjBEMDgyRDA4M0QwRTAzMjIxCis6MTA0QzcyMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQTlFMDQ0MDJGMDZDCis6MDc0QzgyMDBEMDgyRDA4M0QwRTAzMkE0Cis6MTA0QjVBMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUFFMDQ0MDJGMDg0Cis6MTA0QjZBMDA5MDdGQzdFMEY1MTE3NTBGMDA3NTBEMDBEMjMzRDA4MjIyCis6MDU0QjdBMDBEMDgzRDBFMDMyMDEKKzoxMDRDODkwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBOUUwNDQwNEYwNTMKKzowNzRDOTkwMEQwODJEMDgzRDBFMDMyOEQKKzoxMDRDQTAwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQUUwNDQwNEYwM0IKKzowNzRDQjAwMEQwODJEMDgzRDBFMDMyNzYKKzoxMDRDQjcwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBOUUwNDQwOEYwMjEKKzowNzRDQzcwMEQwODJEMDgzRDBFMDMyNUYKKzoxMDRDQ0UwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQUUwNDQwOEYwMDkKKzowNzRDREUwMEQwODJEMDgzRDBFMDMyNDgKKzoxMDRDRTUwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBOUUwNDQxMEYwRUIKKzowNzRDRjUwMEQwODJEMDgzRDBFMDMyMzEKKzoxMDRDRkMwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQUUwNDQxMEYwRDMKKzowNzREMEMwMEQwODJEMDgzRDBFMDMyMTkKKzoxMDREMTMwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBOUUwNDQyMEYwQUMKKzowNzREMjMwMEQwODJEMDgzRDBFMDMyMDIKKzoxMDREMkEwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQUUwNDQyMEYwOTQKKzowNzREM0EwMEQwODJEMDgzRDBFMDMyRUIKKzoxMDRENDEwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBOUUwNDQ0MEYwNUUKKzowNzRENTEwMEQwODJEMDgzRDBFMDMyRDQKKzoxMDRENTgwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQUUwNDQ0MEYwNDYKKzowNzRENjgwMEQwODJEMDgzRDBFMDMyQkQKKzoxMDRENkYwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBOUUwNDQ4MEYwRjAKKzowNzREN0YwMEQwODJEMDgzRDBFMDMyQTYKKzoxMDREODYwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQUUwNDQ4MEYwRDgKKzowNzREOTYwMEQwODJEMDgzRDBFMDMyOEYKKzoxMDQyMUYwMDkwNzYxOUUwNjQwMTcwMzU5MDc2ODdFMEZGRDM5NDJEODYKKzoxMDQyMkYwMDQwMkI5MDc2ODY3NDAxRjA5MDc2ODVFMDA0RjBFMEQzMTEKKzoxMDQyM0YwMDk0MEY0MDE5RTRGMEVGRDM5NDMxNDAwODkwNzYxOTc0M0QKKzoxMDQyNEYwMDAzRjA4MDA2OTA3NjE5NzQwMkYwMTIzRTlGOTA3NjE5NTMKKzoxMDQyNUYwMEUwQjQwMjJDOTA3Njg3RTBGRkMzOTQyRjUwMjJFRkQzNjcKKzoxMDQyNkYwMDk0MkE0MDFDOTA3Njg2NzQwMUYwOTA3Njg1RTAwNEYwRDUKKzoxMDQyN0YwMEUwRDM5NDBGNDAwQUU0RjA5MDc2MTkwNEYwMTIzRTlGQjkKKzoxMDQyOEYwMDkwNzYxOUUwQjQwMjI2OTA3Njg3RTBEMzk0MzE0MDFERTIKKzoxMDQyOUYwMDkwNzY4Njc0MDFGMDkwNzY4NUUwMDRGMEUwRDM5NDBGNjkKKzoxMDQyQUYwMDQwMEJFNEYwOTA3NjE5NzQwM0YwMTIzRTlGOTA3NjE5NEMKKzoxMDQyQkYwMEUwNjQwMzcwM0Y5MDc2ODdFMEZGQzM5NDVGNTAzNTkwQzIKKzoxMDQyQ0YwMDc2ODY3NDAxRjA5MDc2ODVFMDA0RjBFMEQzOTQwRjQwODkKKzoxMDQyREYwMDIzRTRGMEVGQzM5NDJGNTAwQ0VGRDM5NDJBNDAwNjkwQjEKKzoxMDQyRUYwMDc2MTk3NDAxRjBFRkQzOTQyRjQwMDY5MDc2MTk3NDAyNkIKKzoxMDQyRkYwMEYwMTIzRTlGOTA3Njg2RTA3MDA1OTA3Njg1RjAyMkU0NkUKKzowNTQzMEYwMDkwNzY4NkYwMjIwQgorOjEwNDU2NTAwOTA3NjlBNzQwMkYwRTQ5MDc2OTFGMEEzRjA5MDc2OTBBQworOjEwNDU3NTAwRjA5MDc2OTNGMDkwNzY5Njc0MDNGMDkwODAwM0YwRTREMworOjEwNDU4NTAwOTA3Njk3RjA5MDgwMDJGMDkwNzY5NDA0RjA5MDgwMDBGOQorOjEwNDU5NTAwRjBFNDkwNzY4RUYwOTA3NjFBRjA5MDc2OTUwNEYwQzI1RAorOjEwNDVBNTAwMkU5MDdGOUJFMEZGNTQxMEZGNzAwMkMyM0Y5MDdGOUJDRgorOjEwNDVCNTAwRTBGRjU0MTBGRUZGQkUxMDAyRDIzRjkwN0Y5QkUwRkY0QworOjEwNDVDNTAwNTQyMEZGNzAwMkMyM0U5MDdGOUJFMEZGNTQyMEZFRkYwNworOjEwNDVENTAwQkUyMDAyRDIzRTMwM0YwOTkwNzY5N0UwNTRGRUYwODAyRgorOjEwNDVFNTAwMDc5MDc2OTdFMDQ0MDFGMDkwNzY5N0UwOTA4MDAyRjA4RQorOjEwNDVGNTAwMzAzRTA5OTA3Njk1RTA0NDA0RjA4MDA3OTA3Njk1RTA4QQorOjEwNDYwNTAwNTRGQkYwOTA3Njk1RTA5MDgwMDFGMEEyM0U5MjQwQTI5NgorOjAzNDYxNTAwM0Y5MjQxOTAKKzowMTQ2MTgwMDIyN0YKKzoxMDNFOUYwMDkwNzY5MkUwMTQ2MDFEMTQ3MDAyRTE1NDI0MDI2MDAyQzcKKzoxMDNFQUYwMEUxRTQ5MDc2OTQ3NDAxRjA5MDgwMDBGMEU0OTA3NjhFQzcKKzoxMDNFQkYwMEYwRDIzMTIyOTA3NjE5RTBGRkI0MDExQkU0OTA3RkYyMkIKKzoxMDNFQ0YwMEYwOTA3RkYzNzQzMEYwOTA3RkZGNzRGQ0YwOTA3Njk3NTIKKzoxMDNFREYwMEUwNTRGREYwNTRGQkYwRUZCNDAyMUJFNDkwN0ZGMkYwREUKKzoxMDNFRUYwMDkwN0ZGMzc0MzRGMDkwN0ZGRjc0RkNGMDkwNzY5N0UwM0UKKzoxMDNFRkYwMDQ0MDJGMDU0RkJGMEVGQjQwMzE4RTQ5MDdGRjJGMDkwMUIKKzoxMDNGMEYwMDdGRjM3NDY0RjA5MDdGRkY3NEZDRjA5MDc2OTdFMDQ0MzkKKzoxMDNGMUYwMDA0RjA5MDc2OTRFMDQ0MDFGMDkwODAwMEYwMzAzRjA5NzcKKzoxMDNGMkYwMDkwNzY5N0UwNTRGRUYwODAwNzkwNzY5N0UwNDQwMUYwOEEKKzoxMDNGM0YwMDkwNzY5N0UwOTA4MDAyRjA5MDc2OTg3NDA0RjA5MDc2RTcKKzoxMDNGNEYwMDhFNzQwMUYwMjI5MDc2MTlFMEZGQjQwMTFCRTQ5MDdGOEMKKzoxMDNGNUYwMEYyRjA5MDdGRjM3NDQ0RjA5MDdGRkY3NEZDRjA5MDc2NTIKKzoxMDNGNkYwMDk3RTA1NEZERjA1NEZCRjBFRkI0MDIxQkU0OTA3RkYyQTYKKzoxMDNGN0YwMEYwOTA3RkYzNzQ0Q0YwOTA3RkZGNzRGQ0YwOTA3Njk3ODUKKzoxMDNGOEYwMEUwNDQwMkYwNTRGQkYwRUZCNDAzMThFNDkwN0ZGMkYwM0EKKzoxMDNGOUYwMDkwN0ZGMzc0OTRGMDkwN0ZGRjc0RkNGMDkwNzY5N0UwMkQKKzoxMDNGQUYwMDQ0MDRGMDkwNzY5NEUwNTRGRUYwOTA4MDAwRjAzMDNGOUYKKzoxMDNGQkYwMDA5OTA3Njk3RTA1NEZFRjA4MDA3OTA3Njk3RTA0NDAxRTEKKzoxMDNGQ0YwMEYwOTA3Njk3RTA5MDgwMDJGMDkwNzY5ODc0MDZGMDkwREIKKzowNjNGREYwMDc2OEU3NDAyRjAyMjUwCis6MTAxODAwMDA5MDc2OTBFMDE0NjAzNzE0NzAwMjAxRDgxNDcwMDIyMUIxCis6MTAxODEwMDA3MjE0NzAwMjQxM0IyNDA0NjAwMjYxMDM5MDdGRkM3NEU3Cis6MTAxODIwMDBDQ0YwOTA3RkZGNzRGQ0YwOTA3Njk1RTA0NDAxRjA1NDhBCis6MTAxODMwMDAwNUYwOTA4MDAxRjBFNDkwNzYxQUYwQzIyRTIyOTA3NkE2Cis6MTAxODQwMDA5NUUwNDQwMUYwNDQwMkYwMzAzRTA2RTA0NDA0RjA4MEFDCis6MTAxODUwMDAwNzkwNzY5NUUwNTRGQkYwOTA3NjFBRTBCNDAxMDg5MDdBCis6MTAxODYwMDA3Njk1RTA5MDgwMDFGMDkwNzYxOUUwRkZCNDAxMjI5MDI3Cis6MTAxODcwMDA3RkZDNzQ3NEYwOTA3RkZGNzRGQ0YwOTA3NjhGNzQyQjczCis6MTAxODgwMDBGMDkwNzY5N0UwNTRGREYwRTQ5MDc2ODFGMDkwNzY4MEM5Cis6MTAxODkwMDBGMEVGQjQwMjIyOTA3RkZDNzQ2OEYwOTA3RkZGNzRGQzNDCis6MTAxOEEwMDBGMDkwNzY4Rjc0MkZGMDkwNzY5N0UwNDQwMkYwRTQ5MEY5Cis6MTAxOEIwMDA3NjgxRjA5MDc2ODBGMDMwM0YwOTkwNzY5N0UwNTRGRTg0Cis6MTAxOEMwMDBGMDgwMDc5MDc2OTdFMDQ0MDFGMDkwNzY5N0UwNTRGQjIzCis6MTAxOEQwMDBGMDkwODAwMkYwRDIyRTIyOTA3Njk1RTA1NEZFRjA0NEYzCis6MTAxOEUwMDAwMkYwMzAzRTA2RTA0NDA0RjA4MDA3OTA3Njk1RTA1NDI0Cis6MTAxOEYwMDBGQkYwOTA3NjFBRTBCNDAxMDg5MDc2OTVFMDkwODAwMUI0Cis6MTAxOTAwMDBGMDkwNzYxOUUwRkZCNDAxMjI5MDdGRkM3NDMwRjA5MEUzCis6MTAxOTEwMDA3RkZGNzRGQ0YwOTA3NjhGNzQyQkYwOTA3Njk3RTA1NEY0Cis6MTAxOTIwMDBGREYwRTQ5MDc2ODFGMDkwNzY4MEYwRUZCNDAyMjI5MEEyCis6MTAxOTMwMDA3RkZDNzQxQ0YwOTA3RkZGNzRGQ0YwOTA3NjhGNzQyRjA2Cis6MTAxOTQwMDBGMDkwNzY5N0UwNDQwMkYwRTQ5MDc2ODFGMDkwNzY4MDEzCis6MTAxOTUwMDBGMDMwM0YwOTkwNzY5N0UwNTRGRUYwODAwNzkwNzY5NzNDCis6MTAxOTYwMDBFMDQ0MDFGMDkwNzY5N0UwNTRGQkYwOTA4MDAyRjBEMkQyCis6MTAxOTcwMDAyRTIyOTA3Njk1RTA0NDAxRjA0NDAyRjA0NDA4RjAzMEM1Cis6MTAxOTgwMDAzRTA2RTA0NDA0RjA4MDA3OTA3Njk1RTA1NEZCRjA5MDJBCis6MTAxOTkwMDA3NjFBRTBCNDAxMDg5MDc2OTVFMDkwODAwMUYwOTA3Njk4Cis6MTAxOUEwMDAxOUUwRkZCNDAxMjU5MDdGRkM3NENDRjA5MDdGRkY3NEE4Cis6MTAxOUIwMDBGQ0YwOTA3NjhGNzQyQkYwOTA3Njk3RTA1NEZERjA1NDA1Cis6MTAxOUMwMDBGQkYwRTQ5MDc2ODFGMDkwNzY4MEYwRUZCNDAyMjU5MDAxCis6MTAxOUQwMDA3RkZDNzRDOEYwOTA3RkZGNzRGQ0YwOTA3NjhGNzQyRkJBCis6MTAxOUUwMDBGMDkwNzY5N0UwNDQwMkYwNTRGQkYwRTQ5MDc2ODFGMEJBCis6MTAxOUYwMDA5MDc2ODBGMEVGQjQwMzI1OTA3RkZDNzQ5OEYwOTA3RjkwCis6MTAxQTAwMDBGRjc0RkNGMDkwNzY4Rjc0NUZGMDkwNzY5N0UwNTRGRDUxCis6MTAxQTEwMDBGMDQ0MDRGMEU0OTA3NjgxRjA5MDc2ODBGMDMwM0YwOTU1Cis6MTAxQTIwMDA5MDc2OTdFMDU0RkVGMDgwMDc5MDc2OTdFMDQ0MDFGMEJFCis6MTAxQTMwMDA5MDc2OTdFMDkwODAwMkYwRDIyRTIyOTA3Njk1RTA1NDM2Cis6MTAxQTQwMDBGRUYwNDQwMkYwNDQwOEYwMzAzRTA2RTA0NDA0RjA4MDJBCis6MTAxQTUwMDAwNzkwNzY5NUUwNTRGQkYwOTA3NjFBRTBCNDAxMDg5MDc4Cis6MTAxQTYwMDA3Njk1RTA5MDgwMDFGMDkwNzYxOUUwRkZCNDAxMjU5MDIyCis6MTAxQTcwMDA3RkZDNzRCNEYwOTA3RkZGNzRGQ0YwOTA3NjhGNzQyQjMxCis6MTAxQTgwMDBGMDkwNzY5N0UwNTRGREYwNTRGQkYwRTQ5MDc2ODFGMDBFCis6MTAxQTkwMDA5MDc2ODBGMEVGQjQwMjI1OTA3RkZDNzRCMEYwOTA3RkQ4Cis6MTAxQUEwMDBGRjc0RkNGMDkwNzY4Rjc0MkZGMDkwNzY5N0UwNDQwMkVDCis6MTAxQUIwMDBGMDU0RkJGMEU0OTA3NjgxRjA5MDc2ODBGMEVGQjQwMzgwCis6MTAxQUMwMDAyNTkwN0ZGQzc0NjhGMDkwN0ZGRjc0RkNGMDkwNzY4RjE3Cis6MTAxQUQwMDA3NDVGRjA5MDc2OTdFMDU0RkRGMDQ0MDRGMEU0OTA3NjYzCis6MTAxQUUwMDA4MUYwOTA3NjgwRjAzMDNGMDk5MDc2OTdFMDU0RkVGMEQ4Cis6MTAxQUYwMDA4MDA3OTA3Njk3RTA0NDAxRjA5MDc2OTdFMDkwODAwMjFFCis6MDQxQjAwMDBGMEQyMkUyMkNGCis6MDQwQ0ExMDA0MTc2MjMwMDc1Cis6MTAyREE5MDBFNDkwNzYzNkYwRTBGRjc1RjAwM0E0MjQwRUY1ODJFNDkyCis6MTAyREI5MDAzNDc1RjU4Mzc0MDFGMEVGNzVGMDAzQTQyNDBGRjU4MkRGCis6MTAyREM5MDBFNDM0NzVGNTgzNzQwMUYwRUY3NUYwMDNBNDI0MTBGNTZDCis6MTAyREQ5MDA4MkU0MzQ3NUY1ODNFNEYwOTA3NjM2RTAwNEYwRTBGRkEwCis6MTAyREU5MDA3NUYwMDNBNDI0MEVGNTgyRTQzNDc1RjU4Mzc0MTBGMEFDCis6MTAyREY5MDBFRjc1RjAwM0E0MjQwRkY1ODJFNDM0NzVGNTgzNzQwNUE3Cis6MTAyRTA5MDBGMEVGNzVGMDAzQTQyNDEwRjU4MkU0MzQ3NUY1ODNFNDNBCis6MTAyRTE5MDBGMDkwNzYzNkUwMDRGMEUwRkY3NUYwMDNBNDI0MEVGNTk3Cis6MTAyRTI5MDA4MkU0MzQ3NUY1ODM3NDAyRjBFRjc1RjAwM0E0MjQwRjdFCis6MTAyRTM5MDBGNTgyRTQzNDc1RjU4Mzc0MDJGMEVGNzVGMDAzQTQyNDg4Cis6MTAyRTQ5MDAxMEY1ODJFNDM0NzVGNTgzRTRGMDkwNzYzNkUwMDRGMDA5Cis6MTAyRTU5MDBFMEZGNzVGMDAzQTQyNDBFRjU4MkU0MzQ3NUY1ODM3NDVDCis6MTAyRTY5MDAwMUYwRUY3NUYwMDNBNDI0MEZGNTgyRTQzNDc1RjU4M0JFCis6MTAyRTc5MDA3NDAzRjBFRjc1RjAwM0E0MjQxMEY1ODJFNDM0NzVGNUJBCis6MTAyRTg5MDA4M0U0RjA5MDc2MzZFMDA0RjBFMEZGNzVGMDAzQTQyNEMzCis6MTAyRTk5MDAwRUY1ODJFNDM0NzVGNTgzNzQxMEYwRUY3NUYwMDNBNDMwCis6MTAyRUE5MDAyNDBGRjU4MkU0MzQ3NUY1ODM3NDA2RjBFRjc1RjAwM0E5Cis6MTAyRUI5MDBBNDI0MTBGNTgyRTQzNDc1RjU4M0U0RjA5MDc2MzZFMEM1Cis6MTAyRUM5MDAwNEYwRTBGRjc1RjAwM0E0MjQwRUY1ODJFNDM0NzVGNUVGCis6MTAyRUQ5MDA4Mzc0MDJGMEVGNzVGMDAzQTQyNDBGRjU4MkU0MzQ3NUNFCis6MTAyRUU5MDBGNTgzNzQwNEYwRUY3NUYwMDNBNDI0MTBGNTgyRTQzNDNCCis6MTAyRUY5MDA3NUY1ODNFNEYwOTA3NjM2RTAwNEYwRTBGRjc1RjAwM0IxCis6MTAyRjA5MDBBNDI0MEVGNTgyRTQzNDc1RjU4Mzc0MDJGMEVGNzVGMEFDCis6MTAyRjE5MDAwM0E0MjQwRkY1ODJFNDM0NzVGNTgzNzQwOEYwRUY3NTgyCis6MTAyRjI5MDBGMDAzQTQyNDEwRjU4MkU0MzQ3NUY1ODM3NDA0RjA5MDU5Cis6MTAyRjM5MDA3NjM2RTAwNEYwRTBGRjc1RjAwM0E0MjQwRUY1ODJFNDkwCis6MTAyRjQ5MDAzNDc1RjU4Mzc0MDJGMEVGNzVGMDAzQTQyNDBGRjU4MjRDCis6MTAyRjU5MDBFNDM0NzVGNTgzNzQwQUYwRUY3NUYwMDNBNDI0MTBGNUQxCis6MTAyRjY5MDA4MkU0MzQ3NUY1ODM3NDA0RjA5MDc2MzZFMDA0RjBFMDc5Cis6MTAyRjc5MDBGRjc1RjAwM0E0MjQwRUY1ODJFNDM0NzVGNTgzNzQwMjE5Cis6MTAyRjg5MDBGMEVGNzVGMDAzQTQyNDBGRjU4MkU0MzQ3NUY1ODM3NDJBCis6MTAyRjk5MDAwOUYwRUY3NUYwMDNBNDI0MTBGNTgyRTQzNDc1RjU4Mzg0Cis6MTAyRkE5MDA3NDA0RjA5MDc2MzZFMDA0RjBFMEZGNzVGMDAzQTQyNDkxCis6MTAyRkI5MDAwRUY1ODJFNDM0NzVGNTgzNzQwMkYwRUY3NUYwMDNBNDFECis6MTAyRkM5MDAyNDBGRjU4MkU0MzQ3NUY1ODM3NDA3RjBFRjc1RjAwMzg3Cis6MEUyRkQ5MDBBNDI0MTBGNTgyRTQzNDc1RjU4Mzc0MDRGMDIyMEMKKzoxMDNCRDMwMEU0OTA3NjM2RjBFMEZCNzVGMDBGQTQyNDQxRjU4MkU0MUYKKzoxMDNCRTMwMDM0NzVGNTgzNzQ0MEYwRUI3NUYwMEZBNDI0NDJGNTgyMkQKKzoxMDNCRjMwMEU0MzQ3NUY1ODM3NDBBRjBFQjc1RjAwRkE0MjQ0M0Y1RjAKKzoxMDNDMDMwMDgyRTQzNDc1RjU4MzEyMzdDODAwMDBBQzQ0RUI3NUYwRDkKKzoxMDNDMTMwMDBGQTQyNDQ3RjU4MkU0MzQ3NUY1ODMxMjM3QzgwMDAwRjYKKzoxMDNDMjMwMEFDNDRFQjc1RjAwRkE0MjQ0QkY1ODJFNDM0NzVGNTgzQjMKKzoxMDNDMzMwMDEyMzdDODAwMDE3NzAwOTA3NjM2RTAwNEYwRTBGQjc1OTgKKzoxMDNDNDMwMEYwMEZBNDI0NDFGNTgyRTQzNDc1RjU4Mzc0NDBGMEVCNUUKKzoxMDNDNTMwMDc1RjAwRkE0MjQ0MkY1ODJFNDM0NzVGNTgzNzQ4Q0YwNzcKKzoxMDNDNjMwMEVCNzVGMDBGQTQyNDQzRjU4MkU0MzQ3NUY1ODMxMjM3MjIKKzoxMDNDNzMwMEM4MDAwMEFDNDRFQjc1RjAwRkE0MjQ0N0Y1ODJFNDM0OEMKKzoxMDNDODMwMDc1RjU4MzEyMzdDODAwMDBBQzQ0RUI3NUYwMEZBNDI0MUMKKzoxMDNDOTMwMDRCRjU4MkU0MzQ3NUY1ODMxMjM3QzgwMDAxNzcwMDkwNDEKKzoxMDNDQTMwMDc2MzZFMDA0RjBFMEZGNzVGMDBGQTQyNDQxRjU4MkU0REEKKzoxMDNDQjMwMDM0NzVGNTgzNzQ0MEYwRUY3NUYwMEZBNDI0NDJGNTgyNTgKKzoxMDNDQzMwMEU0MzQ3NUY1ODM3NDhGRjA5MDc2MzZFMDA0RjBFMEZGMEEKKzoxMDNDRDMwMDc1RjAwRkE0MjQ0MUY1ODJFNDM0NzVGNTgzNzQ0MUYwNDMKKzoxMDNDRTMwMEVGNzVGMDBGQTQyNDQyRjU4MkU0MzQ3NUY1ODM3NDg0RjAKKzoxMDNDRjMwMEYwOTA3NjM2RTAwNEYwRTBGRjc1RjAwRkE0MjQ0MUY1NzAKKzoxMDNEMDMwMDgyRTQzNDc1RjU4Mzc0NjFGMEVGNzVGMDBGQTQyNDQyRjcKKzoxMDNEMTMwMEY1ODJFNDM0NzVGNTgzNzQ4MUYwOTA3NjM2RTAwNEYwMkYKKzoxMDNEMjMwMEUwRkY3NUYwMEZBNDI0NDFGNTgyRTQzNDc1RjU4Mzc0NDQKKzoxMDNEMzMwMDYxRjBFRjc1RjAwRkE0MjQ0MkY1ODJFNDM0NzVGNTgzNDYKKzowNDNENDMwMDc0MDFGMDIyRjUKKzoxMDQ2MTkwMEU0OTA3NjM2RjBFMEZGNzVGMDAzQTQyNDMyRjU4MkU0RTUKKzoxMDQ2MjkwMDM0NzVGNTgzRTRGMEVGNzVGMDAzQTQyNDMzRjU4MkU0REYKKzoxMDQ2MzkwMDM0NzVGNTgzNzQwMUYwOTA3NjM2RTAwNEYwRTBGRjc1ODcKKzoxMDQ2NDkwMEYwMDNBNDI0MzJGNTgyRTQzNDc1RjU4M0U0RjBFRjc1QzAKKzoxMDQ2NTkwMEYwMDNBNDI0MzNGNTgyRTQzNDc1RjU4Mzc0MDJGMDkwRjEKKzoxMDQ2NjkwMDc2MzZFMDA0RjBFMEZGNzVGMDAzQTQyNDMyRjU4MkU0MjUKKzoxMDQ2NzkwMDM0NzVGNTgzRTRGMEVGNzVGMDAzQTQyNDMzRjU4MkU0OEYKKzoxMDQ2ODkwMDM0NzVGNTgzNzQwM0YwOTA3NjM2RTAwNEYwRTBGRjc1MzUKKzoxMDQ2OTkwMEYwMDNBNDI0MzJGNTgyRTQzNDc1RjU4M0U0RjBFRjc1NzAKKzoxMDQ2QTkwMEYwMDNBNDI0MzNGNTgyRTQzNDc1RjU4Mzc0MDRGMDIyMEQKKzoxMDNBNDIwMEU0OTA3NjM1RjA5MDc2MzVFMEZGQzM5NDAzNDAwMjQxNkUKKzoxMDNBNTIwMEZGRUY3NUYwMEFBNDI0QUFGNTgyRTQzNDc1RjU4M0VGMkEKKzoxMDNBNjIwMEYwRUY3NUYwMEFBNDI0QUJGNTgyRTQzNDc1RjU4M0U0MzMKKzoxMDNBNzIwMEYwRUY3NUYwMEFBNDI0QUNGNTgyRTQzNDc1RjU4Mzc0OTIKKzoxMDNBODIwMEYwRjBFRjc1RjAwQUE0MjRBREY1ODJFNDM0NzVGNTgzMDUKKzoxMDNBOTIwMDc0RkZGMEVGNzVGMDBBQTQyNEFFRjU4MkU0MzQ3NUY1RjQKKzoxMDNBQTIwMDgzRTRGMEVGNzVGMDBBQTQyNEFGRjU4MkU0MzQ3NUY1RUYKKzoxMDNBQjIwMDgzNzQ4MEYwRUY3NUYwMEFBNDI0QjBGNTgyRTQzNDc1QzMKKzoxMDNBQzIwMEY1ODNFNEYwRUY3NUYwMEFBNDI0QjFGNTgyRTQzNDc1Q0QKKzoxMDNBRDIwMEY1ODNFNEYwRUY3NUYwMEFBNDI0QjJGNTgyRTQzNDc1QkMKKzoxMDNBRTIwMEY1ODNFNEYwRUY3NUYwMEFBNDI0QjNGNTgyRTQzNDc1QUIKKzoxMDNBRjIwMEY1ODM3NDAxRjA5MDc2MzVFMDA0RjA0MTQ3OTA3NjNDMEUKKzoxMDNCMDIwMDc0MEFGMEU0QTNGMDkwNzYzNTc0MDNGMDkwNzYzQ0UwMEEKKzoxMDNCMTIwMEZGOTA3NjM1RTBGRUMzOUY0MDAyNjFEMjkwNzYzREUwOTEKKzoxMDNCMjIwMEZGMDRGMEVFNzVGMDBBQTQyNEFBRjU4MkU0MzQ3NUY1RDgKKzoxMDNCMzIwMDgzRUZGMEVFNzVGMDBBQTQyNEFCRjU4MkU0MzQ3NUY1NTgKKzoxMDNCNDIwMDgzRTRGMEVFNzVGMDBBQTQyNEFDRjU4MkU0MzQ3NUY1NTIKKzoxMDNCNTIwMDgzNzQ1RUYwRUU3NUYwMEFBNDI0QURGNTgyRTQzNDc1NDgKKzoxMDNCNjIwMEY1ODM3NEJBRjBFRTc1RjAwQUE0MjRBRUY1ODJFNDM0NUIKKzoxMDNCNzIwMDc1RjU4Mzc0MDVGMEVFNzVGMDBBQTQyNEFGRjU4MkU0QkUKKzoxMDNCODIwMDM0NzVGNTgzNzQ4MEYwRUU3NUYwMEFBNDI0QjBGNTgyRTIKKzoxMDNCOTIwMEU0MzQ3NUY1ODNFNEYwRUU3NUYwMEFBNDI0QjFGNTgyRkQKKzoxMDNCQTIwMEU0MzQ3NUY1ODNFNEYwRUU3NUYwMEFBNDI0QjJGNTgyRUMKKzoxMDNCQjIwMEU0MzQ3NUY1ODM3NDE1RjBFRTc1RjAwQUE0MjRCM0Y1QjgKKzoxMDNCQzIwMDgyRTQzNDc1RjU4M0U0RjA5MDc2MzVFMDA0RjA2MTBFMUEKKzowMTNCRDIwMDIyRDAKKzoxMDA4MDAwMEU0OTA3NjMxRjA5MDc2MzFFMEZGNzVGMDAzQTQyNDBGODgKKzoxMDA4MTAwMEY1ODJFNDM0NzVGNTgzRTBGRTkwN0ZFREUwRkRFRTZENEEKKzoxMDA4MjAwMDYwMEVFRkMzOTQwQjUwMDg5MDc2MzFFMDA0RjA4MEQ1NTEKKzoxMDA4MzAwMEVGQjQwQjA4OTA3RkI0RTA0NDAxRjAyMkVGNzVGMDAzQjEKKzoxMDA4NDAwMEE0MjQwRUY1ODJFNDM0NzVGNTgzRTA5MDc2MzNGMDI0MjkKKzoxMDA4NTAwMEYwNjAwQTI0MEU2MDAyODE4NzEyNEJDNzIyOTA3RkVENjAKKzoxMDA4NjAwMEUwNjQwNTcwNTE5MDc2MTg3NDA1RjA5MDc2Mzc3NDAxNDUKKzoxMDA4NzAwMEYwOTA3NjM5NzQwM0YwOTA3NjIxRjBFNDkwNzYyMEYwRDEKKzoxMDA4ODAwMDkwN0ZFQUUwRjQ2MDJGOTA3NjIwRTBGRjc1RjAwQUE0RjQKKzoxMDA4OTAwMDI0QUFGNTgyRTQzNDc1RjU4M0UwRkU5MDdGRUFFMEZENUEKKzoxMDA4QTAwMEVFNkQ2MDEyOTA3NjIxRTBGRUVGQzM5RTUwMDg5MDc2QzgKKzoxMDA4QjAwMDIwRTAwNEYwODBEMTkwN0ZFREUwNjQwNjcwNTI5MDc2RTUKKzoxMDA4QzAwMDE4NzQwNkYwOTA3NjM3NzQwNEYwOTA3NjM5NzQwQUYwNTQKKzoxMDA4RDAwMDkwNzYyMUYwOTA3NjIwNzQwM0YwOTA3RkVBRTBGNDYwNDcKKzoxMDA4RTAwMDJGOTA3NjIwRTBGRjc1RjAwQUE0MjRBQUY1ODJFNDM0NjQKKzoxMDA4RjAwMDc1RjU4M0UwRkU5MDdGRUFFMEZERUU2RDYwMTI5MDc2ODQKKzoxMDA5MDAwMDIxRTBGRUVGQzM5RTUwMDg5MDc2MjBFMDA0RjA4MEQxRjUKKzoxMDA5MTAwMDkwNzYyMEUwRkY3NUYwMEFBNDI0QUFGNTgyRTQzNDc1RUQKKzoxMDA5MjAwMEY1ODNFMDkwNzIyOUYwRTQ5MDc2M0JGMDkwNzYyMUUwMzgKKzoxMDA5MzAwMEZFRUY2RTcwMDg5MDdGQjRFMDQ0MDFGMDIyOTA3RkVCRjAKKzoxMDA5NDAwMEUwMTQ2MDEzMTQ3MDAyMjFFMjI0MDI2MDAyODE3RjkwOUYKKzoxMDA5NTAwMDdGQjRFMDQ0MDFGMDIyOTA3RkU5RTAxNDcwN0M5MDdGNDYKKzoxMDA5NjAwMEVBRTBGNDcwNDg5MDc2MzdFMDkwNzYyMEYwOTA3NjM5OUYKKzoxMDA5NzAwMEUwRkU5MDc2MjBFMEZEQzM5RTUwMkI5MDc2M0JFMEZFOUIKKzoxMDA5ODAwMDA0RjA3NEMwMkVGNTgyRTQzNDdFRjU4M0UwRkVFRDc1NEMKKzoxMDA5OTAwMEYwMEFBNDI0QUJGNTgyRTQzNDc1RjU4M0VFRjA5MDc2OEEKKzoxMDA5QTAwMDIwRTAwNEYwODBDNzkwNzYzRjc0MDFGMDIyOTA3RUMwNzIKKzoxMDA5QjAwMEUwRkVFRjc1RjAwQUE0MjRBQkY1ODJFNDM0NzVGNTgzMEMKKzoxMDA5QzAwMEVFRjBFMEI0MDEwODkwNzYzRTc0MDFGMDgwMDVFNDkwMEEKKzoxMDA5RDAwMDc2M0VGMDkwNzYzRjc0MDFGMDIyOTA3RkI0RTA0NDAxQkYKKzoxMDA5RTAwMEYwMjI5MDdGRTlFMDI0RkU3MDAyNDFBMzE0NzAwMjYxQkUKKzoxMDA5RjAwMDNGMTQ3MDAyNjFEQjI0MDM2MDAyODE3NzkwN0ZFQUUwOUMKKzoxMDBBMDAwMEY0NzA2QjkwNzYzN0UwOTA3NjIwRjA5MDc2MzlFMEZGQzYKKzoxMDBBMTAwMDkwNzYyMEUwRkVDMzlGNTA0RTkwNzYzQkUwRkYwNEYwQkUKKzoxMDBBMjAwMDc0QzAyRkY1ODJFNDM0N0VGNTgzRTBGRkVFNzVGMDBBQTIKKzoxMDBBMzAwMEE0MjRBQ0Y1ODJFNDM0NzVGNTgzRUZGMDkwNzYzQkUwQzYKKzoxMDBBNDAwMEZGMDRGMDc0QzAyRkY1ODJFNDM0N0VGNTgzRTBGRkVFRkUKKzoxMDBBNTAwMDc1RjAwQUE0MjRBREY1ODJFNDM0NzVGNTgzRUZGMDkwQzcKKzoxMDBBNjAwMDc2MjBFMDA0RjA4MEE0OTA3NjQwNzQwMUYwMjI5MDdFMUQKKzoxMDBBNzAwMEMwRTBGRjkwNzYyMEUwRkU3NUYwMEFBNDI0QUNGNTgyNzkKKzoxMDBBODAwMEU0MzQ3NUY1ODNFRkYwOTA3RUMxRTBGRkVFNzVGMDBBNzcKKzoxMDBBOTAwMEE0MjRBREY1ODJFNDM0NzVGNTgzRUZGMDkwNzY0MTc0Q0IKKzoxMDBBQTAwMDAxRjAyMjkwN0ZFQUUwRjQ3MDY2OTA3NjM3RTA5MDc2NkQKKzoxMDBBQjAwMDIwRjA5MDc2MzlFMEZGOTA3NjIwRTBGRUMzOUY0MDAyNjAKKzoxMDBBQzAwMDgxOEU5MDc2M0JFMEZGMDRGMDc0QzAyRkY1ODJFNDM0MTEKKzoxMDBBRDAwMDdFRjU4M0UwRkZFRTc1RjAwQUE0MjRBRUY1ODJFNDM0REYKKzoxMDBBRTAwMDc1RjU4M0VGRjA5MDc2M0JFMEZGMDRGMDc0QzAyRkY1Q0UKKzoxMDBBRjAwMDgyRTQzNDdFRjU4M0UwRkZFRTc1RjAwQUE0MjRBRkY1QkUKKzoxMDBCMDAwMDgyRTQzNDc1RjU4M0VGRjA5MDc2MjBFMDA0RjA4MEEyNjMKKzoxMDBCMTAwMDkwN0VDMEUwRkY5MDc2MjBFMEZFNzVGMDBBQTQyNEFFM0YKKzoxMDBCMjAwMEY1ODJFNDM0NzVGNTgzRUZGMDkwN0VDMUUwRkZFRTc1NTkKKzoxMDBCMzAwMEYwMEFBNDI0QUZGNTgyRTQzNDc1RjU4M0VGRjAyMjkwMzcKKzoxMDBCNDAwMDdGRUFFMEY0NzA2NjkwNzYzN0UwOTA3NjIwRjA5MDc2NTkKKzoxMDBCNTAwMDM5RTBGRjkwNzYyMEUwRkVDMzlGNDAwMjgxOEU5MDc2QzAKKzoxMDBCNjAwMDNCRTBGRjA0RjA3NEMwMkZGNTgyRTQzNDdFRjU4M0UwQUYKKzoxMDBCNzAwMEZGRUU3NUYwMEFBNDI0QjBGNTgyRTQzNDc1RjU4M0VGMzYKKzoxMDBCODAwMEYwOTA3NjNCRTBGRjA0RjA3NEMwMkZGNTgyRTQzNDdFRjEKKzoxMDBCOTAwMEY1ODNFMEZGRUU3NUYwMEFBNDI0QjFGNTgyRTQzNDc1MjQKKzoxMDBCQTAwMEY1ODNFRkYwOTA3NjIwRTAwNEYwODBBMjkwN0VDMEUwMjQKKzoxMDBCQjAwMEZGOTA3NjIwRTBGRTc1RjAwQUE0MjRCMEY1ODJFNDM0QkMKKzoxMDBCQzAwMDc1RjU4M0VGRjA5MDdFQzFFMEZGRUU3NUYwMEFBNDI0ODYKKzoxMDBCRDAwMEIxRjU4MkU0MzQ3NUY1ODNFRkYwMjI5MDdGRUFFMEY0MUEKKzoxMDBCRTAwMDcwNjY5MDc2MzdFMDkwNzYyMEYwOTA3NjM5RTBGRjkwNEUKKzoxMDBCRjAwMDc2MjBFMEZFQzM5RjQwMDI4MThFOTA3NjNCRTBGRjA0QUEKKzoxMDBDMDAwMEYwNzRDMDJGRjU4MkU0MzQ3RUY1ODNFMEZGRUU3NUYwREEKKzoxMDBDMTAwMDBBQTQyNEIyRjU4MkU0MzQ3NUY1ODNFRkYwOTA3NjNCQjQKKzoxMDBDMjAwMEUwRkYwNEYwNzRDMDJGRjU4MkU0MzQ3RUY1ODNFMEZGMkEKKzoxMDBDMzAwMEVFNzVGMDBBQTQyNEIzRjU4MkU0MzQ3NUY1ODNFRkYwODEKKzoxMDBDNDAwMDkwNzYyMEUwMDRGMDgwQTI5MDdFQzBFMEZGOTA3NjIwQjUKKzoxMDBDNTAwMEUwRkU3NUYwMEFBNDI0QjJGNTgyRTQzNDc1RjU4M0VGNjIKKzoxMDBDNjAwMEYwOTA3RUMxRTBGRkVFNzVGMDBBQTQyNEIzRjU4MkU0QjMKKzoxMDBDNzAwMDM0NzVGNTgzRUZGMDIyOTA3RkI0RTA0NDAxRjAyMjkwQzgKKzowRjBDODAwMDdGQjRFMDQ0MDFGMDIyOTA3RkI0RTA0NDAxRjAyMjAxCis6MTAxMDAwMDBFNDkwNzYyQ0YwOTA3NjJDRTBGRjc1RjAwM0E0MjQwRjhBCis6MTAxMDEwMDBGNTgyRTQzNDc1RjU4M0UwRkU5MDdGRURFMEZERUU2RDQyCis6MTAxMDIwMDA2MDBFRUZDMzk0MEI1MDA4OTA3NjJDRTAwNEYwODBENTRFCis6MTAxMDMwMDBFRkI0MEIwODkwN0ZCNEUwNDQwMUYwMjJFRjc1RjAwM0E5Cis6MTAxMDQwMDBBNDI0MEVGNTgyRTQzNDc1RjU4M0UwOTA3NjJFRjAyNDI2Cis6MTAxMDUwMDBGMDYwMEEyNDBGNjAwMjgxN0QxMjRCQTQyMjkwN0ZFRDg0Cis6MTAxMDYwMDBFMDY0MDU3MDUxOTA3NjE4NzQwNUYwOTA3NjM4NzQwMTNDCis6MTAxMDcwMDBGMDkwNzYzQTc0MDNGMDkwNzYxQ0YwRTQ5MDc2MUJGMEQyCis6MTAxMDgwMDA5MDdGRUFFMEY0NjAyRjkwNzYxQkUwRkY3NUYwMEFBNEYxCis6MTAxMDkwMDAyNEFBRjU4MkU0MzQ3NUY1ODNFMEZFOTA3RkVBRTBGRDUyCis6MTAxMEEwMDBFRTZENjAxMjkwNzYxQ0UwRkVFRkMzOUU1MDA4OTA3NkM1Cis6MTAxMEIwMDAxQkUwMDRGMDgwRDE5MDdGRURFMDY0MDY3MDUyOTA3NkUyCis6MTAxMEMwMDAxODc0MDZGMDkwNzYzODc0MDRGMDkwNzYzQTc0MEFGMDRBCis6MTAxMEQwMDA5MDc2MUNGMDkwNzYxQjc0MDNGMDkwN0ZFQUUwRjQ2MDQ5Cis6MTAxMEUwMDAyRjkwNzYxQkUwRkY3NUYwMEFBNDI0QUFGNTgyRTQzNDYxCis6MTAxMEYwMDA3NUY1ODNFMEZFOTA3RkVBRTBGREVFNkQ2MDEyOTA3NjdDCis6MTAxMTAwMDAxQ0UwRkVFRkMzOUU1MDA4OTA3NjFCRTAwNEYwODBEMUY3Cis6MTAxMTEwMDBFNDkwNzYxRUYwOTA3NjFDRTBGRjkwNzYxQkUwRkU2RjY4Cis6MTAxMTIwMDA3MDA4OTA3RkI0RTA0NDAxRjAyMjkwN0ZFQkUwMTQ2MEZGCis6MTAxMTMwMDAxMzE0NzAwMjIxQkYyNDAyNjAwMjgxNzU5MDdGQjRFMDE1Cis6MTAxMTQwMDA0NDAxRjAyMjkwN0ZFOUUwMjQ3RjcwNkI5MDdGRUFFMDE5Cis6MTAxMTUwMDBGNDcwNEE5MDc2MzhFMDkwNzYxQkYwOTA3NjNBRTBGRjkzCis6MTAxMTYwMDA5MDc2MUJFMEZEQzM5RjUwMkJFRDc1RjAwQUE0MjRBQkQ1Cis6MTAxMTcwMDBGNTgyRTQzNDc1RjU4M0UwRkY5MDc2MUVFMEZEMDRGMDFGCis6MTAxMTgwMDA3NDAwMkRGNTgyRTQzNDdGRjU4M0VGRjA5MDc2MUJFMDU4Cis6MTAxMTkwMDAwNEYwODBDNzkwNzYxRUUwOTA3RkI1RjAyMkVFNzVGMEU3Cis6MTAxMUEwMDAwQUE0MjRBQkY1ODJFNDM0NzVGNTgzRTA5MDdGMDBGMDY3Cis6MTAxMUIwMDA5MDdGQjU3NDAxRjAyMjkwN0ZCNEUwNDQwMUYwMjI5MDVBCis6MTAxMUMwMDA3RkU5RTAyNDdFNzAwMjQxN0UxNDcwMDI2MTIzMTQ3MDc2Cis6MTAxMUQwMDAwMjYxQzgyNDAzNjAwMjgxNkQ5MDdGRUFFMEY0NzA2REMzCis6MTAxMUUwMDA5MDc2MzhFMDkwNzYxQkYwOTA3NjNBRTBGRjkwNzYxQjkwCis6MTAxMUYwMDBFMEMzOUY1MDRGRTBGRjc1RjAwQUE0MjRBQ0Y1ODJFNEYxCis6MTAxMjAwMDAzNDc1RjU4M0UwRkU5MDc2MUVFMEZEMDRGMDc0MDAyRDQ5Cis6MTAxMjEwMDBGNTgyRTQzNDdGRjU4M0VFRjBFRjc1RjAwQUE0MjRBRDk3Cis6MTAxMjIwMDBGNTgyRTQzNDc1RjU4M0UwRkY5MDc2MUVFMEZFMDRGMDZECis6MTAxMjMwMDA3NDAwMkVGNTgyRTQzNDdGRjU4M0VGRjA5MDc2MUJFMEE2Cis6MTAxMjQwMDAwNEYwODBBNDkwNzYxRUUwOTA3RkI1RjAyMjkwNzYxQjhCCis6MTAxMjUwMDBFMEZGNzVGMDBBQTQyNEFDRjU4MkU0MzQ3NUY1ODNFMDcwCis6MTAxMjYwMDA5MDdGMDBGMEVGNzVGMDBBQTQyNEFERjU4MkU0MzQ3NUE4Cis6MTAxMjcwMDBGNTgzRTA5MDdGMDFGMDkwN0ZCNTc0MDJGMDIyOTA3RkJCCis6MTAxMjgwMDBFQUUwRjQ3MDZEOTA3NjM4RTA5MDc2MUJGMDkwNzYzQTU0Cis6MTAxMjkwMDBFMEZGOTA3NjFCRTBDMzlGNTA0RkUwRkY3NUYwMEFBNDdCCis6MTAxMkEwMDAyNEFFRjU4MkU0MzQ3NUY1ODNFMEZFOTA3NjFFRTBGRDExCis6MTAxMkIwMDAwNEYwNzQwMDJERjU4MkU0MzQ3RkY1ODNFRUYwRUY3NUQxCis6MTAxMkMwMDBGMDBBQTQyNEFGRjU4MkU0MzQ3NUY1ODNFMEZGOTA3NjRDCis6MTAxMkQwMDAxRUUwRkUwNEYwNzQwMDJFRjU4MkU0MzQ3RkY1ODNFRjA3Cis6MTAxMkUwMDBGMDkwNzYxQkUwMDRGMDgwQTQ5MDc2MUVFMDkwN0ZCNTJECis6MTAxMkYwMDBGMDIyOTA3NjFCRTBGRjc1RjAwQUE0MjRBRUY1ODJFNDlDCis6MTAxMzAwMDAzNDc1RjU4M0UwOTA3RjAwRjBFRjc1RjAwQUE0MjRBRjA4Cis6MTAxMzEwMDBGNTgyRTQzNDc1RjU4M0UwOTA3RjAxRjA5MDdGQjU3NDM5Cis6MTAxMzIwMDAwMkYwMjI5MDdGRUFFMEY0NzA2RDkwNzYzOEUwOTA3NkRCCis6MTAxMzMwMDAxQkYwOTA3NjNBRTBGRjkwNzYxQkUwQzM5RjUwNEZFMEExCis6MTAxMzQwMDBGRjc1RjAwQUE0MjRCMEY1ODJFNDM0NzVGNTgzRTBGRTVECis6MTAxMzUwMDA5MDc2MUVFMEZEMDRGMDc0MDAyREY1ODJFNDM0N0ZGNUY0Cis6MTAxMzYwMDA4M0VFRjBFRjc1RjAwQUE0MjRCMUY1ODJFNDM0NzVGNTRDCis6MTAxMzcwMDA4M0UwRkY5MDc2MUVFMEZFMDRGMDc0MDAyRUY1ODJFNDE4Cis6MTAxMzgwMDAzNDdGRjU4M0VGRjA5MDc2MUJFMDA0RjA4MEE0OTA3NjM0Cis6MTAxMzkwMDAxRUUwOTA3RkI1RjAyMjkwNzYxQkUwRkY3NUYwMEFBNDY2Cis6MTAxM0EwMDAyNEIwRjU4MkU0MzQ3NUY1ODNFMDkwN0YwMEYwRUY3NUFBCis6MTAxM0IwMDBGMDBBQTQyNEIxRjU4MkU0MzQ3NUY1ODNFMDkwN0YwMTRFCis6MTAxM0MwMDBGMDkwN0ZCNTc0MDJGMDIyOTA3RkVBRTBGNDcwNkQ5MEE3Cis6MTAxM0QwMDA3NjM4RTA5MDc2MUJGMDkwNzYzQUUwRkY5MDc2MUJFMDRFCis6MTAxM0UwMDBDMzlGNTA0RkUwRkY3NUYwMEFBNDI0QjJGNTgyRTQzNEE1Cis6MTAxM0YwMDA3NUY1ODNFMEZFOTA3NjFFRTBGRDA0RjA3NDAwMkRGNTk3Cis6MTAxNDAwMDA4MkU0MzQ3RkY1ODNFRUYwRUY3NUYwMEFBNDI0QjNGNTlGCis6MTAxNDEwMDA4MkU0MzQ3NUY1ODNFMEZGOTA3NjFFRTBGRTA0RjA3NEZDCis6MTAxNDIwMDAwMDJFRjU4MkU0MzQ3RkY1ODNFRkYwOTA3NjFCRTAwNDI0Cis6MTAxNDMwMDBGMDgwQTQ5MDc2MUVFMDkwN0ZCNUYwMjI5MDc2MUJFMEJECis6MTAxNDQwMDBGRjc1RjAwQUE0MjRCMkY1ODJFNDM0NzVGNTgzRTA5MEM4Cis6MTAxNDUwMDA3RjAwRjBFRjc1RjAwQUE0MjRCM0Y1ODJFNDM0NzVGNTRCCis6MTAxNDYwMDA4M0UwOTA3RjAxRjA5MDdGQjU3NDAyRjAyMjkwN0ZCNDBBCis6MTAxNDcwMDBFMDQ0MDFGMDIyOTA3RkI0RTA0NDAxRjAyMjkwN0ZCNDc4Cis6MDUxNDgwMDBFMDQ0MDFGMDIyMzAKKzoxMDM4NzQwMEU0OTA3NjI5RjA5MDc2MjlFMEZGNzVGMDBGQTQyNDQyQjUKKzoxMDM4ODQwMEY1ODJFNDM0NzVGNTgzRTBGRTkwN0ZFQ0UwRkRFRTZEQTcKKzoxMDM4OTQwMDYwMEVFRkMzOTQwNjUwMDg5MDc2MjlFMDA0RjA4MEQ1QkEKKzoxMDM4QTQwMEVGQjQwNjA4OTA3RkI0RTA0NDAxRjAyMkVGNzVGMDBGMDYKKzoxMDM4QjQwMEE0MjQ0MUY1ODJFNDM0NzVGNTgzRTA5MDc2MkFGMDI0NUIKKzoxMDM4QzQwMEJGNzAwMjQxNDEyNEUwNzAwMjQxMTIyNDIxNjAwMjQxOTAKKzoxMDM4RDQwMDNBOTA3RkU5RTAyNEZFNjA3RDE0NzAwMjIxQjIyNDAyNTQKKzoxMDM4RTQwMDYwMDI0MTBBMTIxNzUxOTA3NjQyRTBGQ0EzRTBGREEzNjYKKzoxMDM4RjQwMEUwRkVBM0UwRkY5MDc2MjlFMDc1RjAwRkE0MjQ0M0Y1RTEKKzoxMDM5MDQwMDgyRTQzNDc1RjU4MzEyMzdCQzkwNzYxOUUwRkZCNDAxNzQKKzoxMDM5MTQwMDEyOTA3NjdDNzQ2N0YwOTA3NjdENzQwNkYwOTA3NjdFRDMKKzoxMDM5MjQwMDc0MEJGMEVGQjQwMjBGRTQ5MDc2N0NGMDkwNzY3REYwQTcKKzoxMDM5MzQwMDkwNzY3RTc0MENGMEVGQjQwMzBGRTQ5MDc2N0NGMDkwRjQKKzoxMDM5NDQwMDc2N0RGMDkwNzY3RTc0MThGMDkwNzYxQTc0MDFGMDEyRjkKKzoxMDM5NTQwMDNFOUYxMjE4MDAyMjkwN0VDMkUwRkZFNEZDRkRGRUZCQjUKKzoxMDM5NjQwMEZBNzkwMUY4MTIzNzQ2QzhFQ0M4QzlFREM5Q0FFRUNBREIKKzoxMDM5NzQwMENCRUZDQjkwN0VDMUUwRkVFNEZDRkQyQkZCRUEzRUZBRUMKKzoxMDM5ODQwMEVEMzlGOUVDMzhGODkwN0VDMEUwRkZFNEZFRUIyRkZGNTAKKzoxMDM5OTQwMEVFM0FGRUVEMzlGREVDMzhGQzkwNzYyOUUwNzVGMDBGMzcKKzoxMDM5QTQwMEE0MjQ0N0Y1ODJFNDM0NzVGNTgzMTIzN0JDMjI5MDdFNTMKKzoxMDM5QjQwMEMyRTBGRkU0RkNGREZFRkJGQTc5MDFGODEyMzc0NkM4QzkKKzoxMDM5QzQwMEVDQzhDOUVEQzlDQUVFQ0FDQkVGQ0I5MDdFQzFFMEZFMEMKKzoxMDM5RDQwMEU0RkNGRDJCRkJFQTNFRkFFRDM5RjlFQzM4Rjg5MDdFNzUKKzoxMDM5RTQwMEMwRTBGRkU0RkVFQjJGRkZFRTNBRkVFRDM5RkRFQzM4Q0MKKzoxMDM5RjQwMEZDOTA3NjI5RTA3NUYwMEZBNDI0NEJGNTgyRTQzNDc1MkQKKzoxMDNBMDQwMEY1ODMxMjM3QkMyMjkwN0ZCNEUwNDQwMUYwMjI5MDdGMEEKKzoxMDNBMTQwMEU5RTAxNDcwMTk5MDdFQzBFMEZGOTA3NjI5RTA3NUYwMUIKKzoxMDNBMjQwMDBGQTQyNDRGRjU4MkU0MzQ3NUY1ODNFRkYwMjI5MDdGRTAKKzowRTNBMzQwMEI0RTA0NDAxRjAyMjkwN0ZCNEUwNDQwMUYwMjI5RgorOjEwMkFENjAwRTQ5MDc2MjdGMDkwNzYyN0UwRkY3NUYwMEZBNDI0NDI2NQorOjEwMkFFNjAwRjU4MkU0MzQ3NUY1ODNFMEZFOTA3RkVDRTBGREVFNkQ1MworOjEwMkFGNjAwNjAwRUVGQzM5NDA2NTAwODkwNzYyN0UwMDRGMDgwRDU2OAorOjEwMkIwNjAwRUZCNDA2MDg5MDdGQjRFMDQ0MDFGMDIyRUY3NUYwMEZCMQorOjEwMkIxNjAwQTQyNDQxRjU4MkU0MzQ3NUY1ODNFMDkwNzYyOEYwMjQwOAorOjEwMkIyNjAwOUY3MDAyQTE3NDI0MjE2MDAyQTFBMTkwN0ZFOUUwMjQ5NAorOjEwMkIzNjAwN0U3MDAyNjFGQzE0NzAwMjgxQjUyNDAyNjAwMkExNkNGMQorOjEwMkI0NjAwRUY3NUYwMEZBNDI0NDNGNTgyRTQzNDc1RjU4M0UwRkNCOQorOjEwMkI1NjAwQTNFMEZEQTNFMEZFQTNFMEZGN0I0NDdBQUM3OTAwNzgxNgorOjEwMkI2NjAwMDBDMzEyMzdBQjcwMTM5MDdGMDA3NDQ0RjBBMzc0QUNBQgorOjEwMkI3NjAwRjBFNEEzRjA5MDdGQjU3NDAzRjA5MDc2MjdFMDc1RjA0QgorOjEwMkI4NjAwMEZBNDI0NDNGNTgyRTQzNDc1RjU4M0UwRkNBM0UwRkQ0RAorOjEwMkI5NjAwQTNFMEZFQTNFMEZGN0I4MDdBQkI3OTAwNzgwMEMzMTIzNgorOjEwMkJBNjAwMzdBQjcwMTM5MDdGMDA3NDgwRjBBMzc0QkJGMEU0QTM3RQorOjEwMkJCNjAwRjA5MDdGQjU3NDAzRjA5MDc2MjdFMDc1RjAwRkE0MjRBQgorOjEwMkJDNjAwNDNGNTgyRTQzNDc1RjU4M0UwRkNBM0UwRkRBM0UwRkU2MworOjEwMkJENjAwQTNFMEZGN0IwMDdBNzc3OTAxNzgwMEMzMTIzN0FCNjBGOAorOjEwMkJFNjAwMDJBMUE4OTA3RjAwRjBBMzc0NzdGMEEzNzQwMUYwOTA3RgorOjEwMkJGNjAwN0ZCNTc0MDNGMDIyOTA3NjI3RTA3NUYwMEZBNDI0NDc4MgorOjEwMkMwNjAwRjU4MkU0MzQ3NUY1ODNFMEZDQTNFMEZEQTNFMEZFQTNDMgorOjEwMkMxNjAwRTBGRjdCNDQ3QUFDNzkwMDc4MDBDMzEyMzdBQjcwMTNCRgorOjEwMkMyNjAwOTA3RjAwNzQ0NEYwQTM3NEFDRjBFNEEzRjA5MDdGQjVGOQorOjEwMkMzNjAwNzQwM0YwOTA3NjI3RTA3NUYwMEZBNDI0NDdGNTgyRTQzQworOjEwMkM0NjAwMzQ3NUY1ODNFMEZDQTNFMEZEQTNFMEZFQTNFMEZGN0I4MworOjEwMkM1NjAwODA3QUJCNzkwMDc4MDBDMzEyMzdBQjcwMTM5MDdGMDA3RgorOjEwMkM2NjAwNzQ4MEYwQTM3NEJCRjBFNEEzRjA5MDdGQjU3NDAzRjAxNgorOjEwMkM3NjAwOTA3NjI3RTA3NUYwMEZBNDI0NDdGNTgyRTQzNDc1RjVDNQorOjEwMkM4NjAwODNFMEZDQTNFMEZEQTNFMEZFQTNFMEZGN0IwMDdBNzdGMAorOjEwMkM5NjAwNzkwMTc4MDBDMzEyMzdBQjYwMDJBMUE4OTA3RjAwRjBEQgorOjEwMkNBNjAwQTM3NDc3RjBBMzc0MDFGMDkwN0ZCNTc0MDNGMDIyOTBCQgorOjEwMkNCNjAwNzYyN0UwNzVGMDBGQTQyNDRCRjU4MkU0MzQ3NUY1ODM4RQorOjEwMkNDNjAwRTBGQ0EzRTBGREEzRTBGRUEzRTBGRjdCNDQ3QUFDNzk0MQorOjEwMkNENjAwMDA3ODAwQzMxMjM3QUI3MDEzOTA3RjAwNzQ0NEYwQTNFMgorOjEwMkNFNjAwNzRBQ0YwRTRBM0YwOTA3RkI1NzQwM0YwOTA3NjI3RTAxRgorOjEwMkNGNjAwNzVGMDBGQTQyNDRCRjU4MkU0MzQ3NUY1ODNFMEZDQTM0QworOjEwMkQwNjAwRTBGREEzRTBGRUEzRTBGRjdCODA3QUJCNzkwMDc4MDBCQworOjEwMkQxNjAwQzMxMjM3QUI3MDEzOTA3RjAwNzQ4MEYwQTM3NEJCRjBCRQorOjEwMkQyNjAwRTRBM0YwOTA3RkI1NzQwM0YwOTA3NjI3RTA3NUYwMEY3QQorOjEwMkQzNjAwQTQyNDRCRjU4MkU0MzQ3NUY1ODNFMEZDQTNFMEZEQTNGRgorOjEwMkQ0NjAwRTBGRUEzRTBGRjdCMDA3QTc3NzkwMTc4MDBDMzEyMzdCMworOjEwMkQ1NjAwQUI3MDRGOTA3RjAwRjBBMzc0NzdGMEEzNzQwMUYwOTBFRQorOjEwMkQ2NjAwN0ZCNTc0MDNGMDIyOTA3RkI0RTA0NDAxRjAyMjkwN0Y5NworOjEwMkQ3NjAwRTlFMDI0N0Y3MDFFOTA3NjI3RTA3NUYwMEZBNDI0NEZCQgorOjEwMkQ4NjAwRjU4MkU0MzQ3NUY1ODNFMDkwN0YwMEYwOTA3RkI1NzRBQQorOjEwMkQ5NjAwMDFGMDgwMDc5MDdGQjRFMDQ0MDFGMDkwN0ZCNEUwNDRGNgorOjAzMkRBNjAwMDFGMDIyMTcKKzoxMDRCQTQwMDkwN0ZFQkUwMTQ3MDE0OTA3RkU5RTAyNDdGNzAwNDEyOEUKKzoxMDRCQjQwMDQ5NTgyMjkwN0ZCNEUwNDQwMUYwMjI5MDdGQjRFMDQ0NEQKKzowMzRCQzQwMDAxRjAyMkRCCis6MTA0QkM3MDA5MDdGRUJFMDE0NzAxMzkwN0ZFOUUwMTQ3MDA0MTI0QUIxCis6MTA0QkQ3MDAwMzIyOTA3RkI0RTA0NDAxRjAyMjkwN0ZCNEUwNDQwMUM3Cis6MDI0QkU3MDBGMDIyQkEKKzoxMDQ5NTgwMEU0OTA3NjI2RjA5MDc2MjZFMEZGNzVGMDAzQTQyNDM0RTAKKzoxMDQ5NjgwMEY1ODJFNDM0NzVGNTgzRTBGRTkwN0ZFQ0UwRkRFRTZEQjIKKzoxMDQ5NzgwMDYwMEVFRkMzOTQwNDUwMDg5MDc2MjZFMDA0RjA4MEQ1Q0EKKzoxMDQ5ODgwMEVGQjQwNDA4OTA3RkI0RTA0NDAxRjAyMkVGNzVGMDAzMUYKKzoxMDQ5OTgwMEE0MjQzMkY1ODJFNDM0NzVGNTgzRTA5MDdGMDBGMDkwMkEKKzowNjQ5QTgwMDdGQjU3NDAxRjAyMjRFCis6MTA0QTAzMDBFNDkwNzYyNUYwOTA3NjI1RTBGRjc1RjAwM0E0MjQzNDM2Cis6MTA0QTEzMDBGNTgyRTQzNDc1RjU4M0UwRkU5MDdGRUNFMEZERUU2RDA2Cis6MTA0QTIzMDA2MDBFRUZDMzk0MDQ1MDA4OTA3NjI1RTAwNEYwODBENTFGCis6MTA0QTMzMDBFRkI0MDQwODkwN0ZCNEUwNDQwMUYwMjI5MDdFQzBFMDFDCis6MTA0QTQzMDBGRUVGNzVGMDAzQTQyNDMyRjU4MkU0MzQ3NUY1ODNFRUFBCis6MDI0QTUzMDBGMDIyNEYKKzowMzAwMDMwMDAyMEZGREVDCis6MDMwRkZEMDBDMjg5MzI3NAorOjAzMDAxMzAwMDIxN0ZERDQKKzowMzE3RkQwMEMyOEIzMjZBCis6MDMwMDRCMDAwMjRFMDM1RgorOjA0NEUwMzAwNTM5MURGMzJCNgorOjAzMDA1MzAwMDI0OEZBNjYKKzowNjQ4RkEwMDUzOTFCRkQyMkQzMkU0Cis6MDMwMDVCMDAwMjRERkQ1NgorOjA2NERGRDAwNTM5MTdGRDIyQzMyMUQKKzowMzAwNjMwMDAyNEUwNzQzCis6MDQ0RTA3MDA1M0Q4RjczMjUzCis6MDMwMDBCMDAwMjRFMEY5MworOjAzNEUwRjAwQzI4RDMyMUYKKzowMzAwMUIwMDAyNEUxMjgwCis6MDM0RTEyMDBDMjhGMzIxQQorOjAzMDAyMzAwMDI0REVGOUMKKzowNzRERUYwMDUzOThGRTUzOThGRDMyQkEKKzowMzAwM0IwMDAyNERGNjdECis6MDc0REY2MDA1M0MwRkU1M0MwRkQzMjYzCis6MDMwMDJCMDAwMjQ4MDA4OAorOjEwNDgwMDAwQzBFMEMwRjBDMDgzQzA4MkMwRDBFOEMwRTBFOUMwRTAzMgorOjEwNDgxMDAwRUFDMEUwRUJDMEUwRUNDMEUwRURDMEUwRUVDMEUwRUZFRAorOjEwNDgyMDAwQzBFMEMyQ0FDMkNGOTA3Rjk4RTA0NDAxRjAzMDJFMDNBRQorOjEwNDgzMDAwMTIxNEE2OTA3Rjk4RTA1NEZFRjA1M0E4RkExMjE2NjE2NQorOjEwNDg0MDAwRDBFMEZGRDBFMEZFRDBFMEZERDBFMEZDRDBFMEZCRDAzNworOjEwNDg1MDAwRTBGQUQwRTBGOUQwRTBGOEQwRDBEMDgyRDA4M0QwRjAyOAorOjAzNDg2MDAwRDBFMDMyNzMKKzoxMDRBQTYwMEU0OTA3NjlCRjA5MDc2OUJFMEZGMDRGMEVGNjAwOEUwRTAKKzoxMDRBQjYwMDI0MDhGOEU0RjY4MEVFOTA3Njk2RTA0NDA0RjA0NDA4ODQKKzoxMDRBQzYwMEYwOTA4MDAzRjBFNEY1MThEMjM1RjUwRUY1MTBEMjM2RTUKKzoxMDRBRDYwMDc1MTIxMTc1MTMyMkMyMzdDMjM5QzIzOEY1MTZGNTE0OEMKKzowQjRBRTYwMEY1MUFGNTBEQzIzQkMyM0NDMjNEMjI5OAorOjEwMzAwMDAwOTA3RkI2RTAyMEUxMDJDMjNERDIzNjIwMzYwMjQxNkUwQQorOjEwMzAxMDAwMzAzRDAyNDE2RTkwODAwN0UwNjAwNEQyMzY4MDAyQzJFQgorOjEwMzAyMDAwMzYyMDM2MDI0MTJFRDIzNUU0RjUxQTkwODAwNEUwRjVDMAorOjEwMzAzMDAwMTk3NDA4MjUwRUY4QTYxOTg1MTkxOEU1MTgyMEU3MDQ1MworOjEwMzA0MDAwRDIzODgwMDJDMjM4MzAzODAyMjFENEU0RjUxNkU1MTlBRQorOjEwMzA1MDAwQjRGMDBDRDIzOTc1MDgwNDc1MDlGMDA1MEU4MDAyMDUyQworOjEwMzA2MDAwMTZFNTE5NjRGNzcwM0RDMjM5RTUwRTI0RkU2MDE3MTRBOQorOjEwMzA3MDAwNjAyMjI0MDM3MDI5NzUwODA1NzUwOUY3RTRGNTBBRjUzRgorOjEwMzA4MDAwMEI3NTBFMDQ4MDIwNzUwODA2NzUwQUY3RTRGNTBCNzVCQworOjEwMzA5MDAwMEUwNDgwMTI3NTA4MDc3NTBCRjc3NTBFMDQ4MDA3MTI3MQorOjEwMzBBMDAwNEREQTgwMDIwNTE2RTUxOTU0Rjg2NEY4NzAzQkMyMzUxNAorOjEwMzBCMDAwRTUxOTI0MDc2MDBDMjRGQzYwMDgyNDA1MjRGODUwMDY1OAorOjEwMzBDMDAwODAwOEQyM0E4MDA2QzIzQTgwMDJEMjNBNzUxQTAxMjBBQworOjEwMzBEMDAwM0ExOTkwN0U4MDc0MEZGMEEzRTUxOUYwRTRBM0YwQTNGMQorOjEwMzBFMDAwRjA5MDdGQjc3NDA0RjA4MDAyMDUxNjIwMzk2REU1MTk2MQorOjEwMzBGMDAwNjRGNzYwNjdFNTFBNzA2M0U1MTg1NEYwNjRGMDcwNTk3RQorOjEwMzEwMDAwODUxODE5RjUwRUU1MTkyNDBGNjAxQjI0RkU2MDE3MjQ5RAorOjEwMzExMDAwRkQ2MDIyMTQ2MDFGMjQwNTcwMkY3NTA4MDMwNTBFODVCRAorOjEwMzEyMDAwMTgwOUQyMzc4MDI4NzUwODAyMDUwRTg1MTgwOTc1MTQwQworOjEwMzEzMDAwMDFEMjM3ODAxOTc1MDgwNTA1MEU4NTE4MDlFNEY1MEFDRQorOjEwMzE0MDAwRjUwQjc1MEUwM0QyMzc4MDA1MTI0RERBQzIzNTMwMzVENgorOjEwMzE1MDAwMEE4NTA4MTM4NTE4MTI4MDAyMDUxNjg1MTgxOUU1MTZDOAorOjEwMzE2MDAwNjQwNDcwNjJGNTBFRTUxOTU0RjBGNTE5RjUxNTg1MTgyQgorOjEwMzE3MDAwMTlFNTE1MjQ3MDYwMTgyNEYwNjAxNDI0RjA2MDEwMjQwMAorOjEwMzE4MDAwRjA2MDFFMjRGMDYwMUEyNEYwNjAwNDI0NjA3MDI3RTVDQgorOjEwMzE5MDAwMTVDNDU0MEZGNTE5RjUwODA1MEU4NTE4MDlEMjM3ODBBNgorOjEwMzFBMDAwMUFFNTE1QzQ1NDBGRjUxOUY1MDgwNTBFODUxODA5NzVBQgorOjEwMzFCMDAwMTQwMUQyMzc4MDA1MTI0RERBQzIzNTMwMzUwQTg1MTkyRgorOjEwMzFDMDAwMTM4NTE4MTI4MDAyMDUxNkU1MTZEMzk0MDU0MDU3MTI5MAorOjEwMzFEMDAwNEREQTgwNTIzMDM5MTdFNTBFNzAwQTg1MDgwOTc1MDhGNgorOjEwMzFFMDAwMDQwNTBFODA0MTc0MDgyNTBFRjhBNjE5ODAzODIwMzc5MgorOjEwMzFGMDAwMkFFNTBFQjQwMTBGODUwODBBODUwOTBCODUxMzA4ODU5OQorOjEwMzIwMDAwMTIwOTc1MEUwNEU1MTRCNDAxMUM4NTA4MEFFNEY1MEJENworOjEwMzIxMDAwODUxMzA4ODUxMjA5NzUwRTA0ODAwQkU1MTRCNDAxMDZBOAorOjEwMzIyMDAwRTRGNTBCNzUwRTA0RTRGNTFBMzAzNTAyMDUwRUU1MEVEMworOjEwMzIzMDAwRDM5NDAzNTAwMjAxMEJDMjM3RTRGNTBFRjUxMEMyMzZFOQorOjEwMzI0MDAwRDIzREY1MTQ3NDA4MjUxMEY4RTZGRjc0ODAyNTEwRjVCQQorOjEwMzI1MDAwODJFNDM0N0VGNTgzRUZGMDc0MDgyNTEwRjhFNEY2MDU3NworOjBGMzI2MDAwMTBFNTEwQjQwNERFOTA3RkI3NzQwNEYwMDEwQjIyNjgKKzowQzREREEwMEMyMzdFNEY1MEVGNTEwQzIzNkY1MTQyMkM1Cis6MTA0MDAwMDBFNTExRDM5NDAwNTAwMjIxMDY5MDc2ODlFMEMzOTQwODBDCis6MTA0MDEwMDA0MDAyMjEwNjc0NDAyNTBGRjU4MkU0MzQ3RUY1ODNFMEVBCis6MTA0MDIwMDBGNTE3RTUwRDYwMEU5MDgwMDVFNTE3RjA5MDc2ODlFMEI0Cis6MTA0MDMwMDAwNEYwMDFEQUU1MTcxMjM3Rjk0MEMxMDI0MDY3MDU0MDg0Cis6MTA0MDQwMDA3QTA2NDA5ODA3NDBDMTBDNDBDMTBENDBDNzBGNDBDQkQ1Cis6MTA0MDUwMDBGNjQwQ0JGODQwQ0JGQTQwQ0JGQjQwQ0JGQzQwQ0JGRTRDCis6MTA0MDYwMDA0MENCRkYwMDAwNDBEQTkwN0U0MUUwOTA4MDA1RjA5MDY4Cis6MTA0MDcwMDA3Njg5RTAwNEYwNzUxMTAxODA2MDkwN0U0MUUwOTA4MEM3Cis6MTA0MDgwMDAwNUYwOTA3RTQyRTA5MDgwMDVGMDkwNzY4OUUwMDRGMEEzCis6MTA0MDkwMDBFMDA0RjA3NTExMDE4MDQyOTA3RTQxRTA5MDgwMDVGMENGCis6MTA0MEEwMDA5MDdFNDJFMDkwODAwNUYwOTA3RTQzRTA5MDgwMDVGMEE1Cis6MTA0MEIwMDA5MDc2ODlFMDA0RjBFMDA0RjBFMDA0RjA3NTExMDE4MEVFCis6MTA0MEMwMDAxOUQyM0JEMjNDODAxM0QyM0I4MDBGOTA4MDA1RTUxNzdDCis6MTA0MEQwMDBGMDkwNzY4OUUwMDRGMDc1MTEwMTIwM0IwNDA1MEQ4MDE1Cis6MTA0MEUwMDAxRjMwM0MxQzkwN0U0MUUwOTA4MDA1RjA5MDdFNDJFMEM1Cis6MTA0MEYwMDA5MDgwMDVGMDkwNzY4OUUwMDRGMEUwMDRGMDc1MTEwMUZECis6MTA0MTAwMDAwNTBGMTUxMTAxMDBFNTExNzAxMEMyMzNGNTBERjUwRjAzCis6MEI0MTEwMDA5MDdGQzc3NDA0RjBDMjNCQzIzQzIyNDkKKzoxMDRDMjkwMDkwN0ZENkUwMzBFNzEyRTA0NDAxRjA3RjE0N0UwMDEyNTUKKzowQTRDMzkwMDREOUQ5MDdGRDZFMDU0RkVGMDIyNUUKKzoxMDRCN0YwMDkwN0ZENkUwNTRGQkYwRTA0NDA4RjAzMDQyMDRFMDQ0NkMKKzoxMDRCOEYwMDAyRjA3RkRDN0UwNTEyNEQ5RDkwN0ZENkUwNTRGN0YwNEEKKzowNTRCOUYwMEUwNDQwNEYwMjJENworOjEwNEQ5RDAwOEUzNThGMzZFNTM2MTUzNkFFMzU3MDAyMTUzNTRFNjBDQgorOjA3NERBRDAwMDUxMjE0ODU4MEVFMjJCRgorOjEwNEE1NTAwRTRGRTc1MURGRjc1MUUwNTc1MUYxMkFCMURBQTFFQTk2NworOjEwNEE2NTAwMUY5MDAwMDExMjM2QUI2NDAyNzAyRkNERUVDRDBFRUQxNgorOjEwNEE3NTAwNkY3MDAxMjI5MDAwMDIxMjM3MEU4NUYwMUJGNTFDNjI0MworOjEwNEE4NTAwMUJFNTFCNjIxQ0U1MUM2MjFCMjlGREU1MUIzQUM5RURGNAorOjEwNEE5NTAwQzk3NTFERkZGNTFFODkxRjgwQzE3QjAwN0EwMDc5MDA0RAorOjAxNEFBNTAwMjJFRQorOjA0MTc5NDAwOEQyOThCMkFFNgorOjEwMTc5ODAwMTI0QTU1RUE0OTYwNTcxMjM2OTI3RTAwMjlGRkVFM0FGRQorOjEwMTdBODAwQzlFRkM5NzUyQkZGRjUyQzg5MkRBQjJCQUEyQ0E5MkRCOAorOjEwMTdCODAwOTAwMDAxMTIzNkFCRkY2NDA0NjAwNUVGNjQwNTcwMkVEQgorOjEwMTdDODAwRUZCNDA0MTU5MDAwMDIxMjM2QUI2NTI5NzAwQjkwMDAzNworOjEwMTdEODAwMDMxMjM2QUI2NTJBNzAwMTIyMTIzNjkyN0UwMDI5RkY2OQorOjEwMTdFODAwRUUzQUM5RUZDOTc1MkJGRkY1MkM4OTJEODBCQzdCMDAxQgorOjA0MTdGODAwN0EwMDc5MDBGQQorOjAxMTdGQzAwMjJDQQorOjAyNDdCNzAwOEYyRTQzCis6MTA0N0I5MDBFNEY1MkY3NTMwRkY3NTMxMDc3NTMyMUFBQjMwQUEzMTIwCis6MTA0N0M5MDBBOTMyOTAwMDAxMTIzNkFCQjQwMzFGQUYyRjA1MkZFRkFBCis6MTA0N0Q5MDA2NTJFNzAwMTIyMTIzNjkyN0UwMDI5RkZFRTNBQzlFRjRBCis6MTA0N0U5MDBDOTc1MzBGRkY1MzE4OTMyODBEMjdCMDA3QTAwNzkwMEIyCis6MDE0N0Y5MDAyMjlECis6MTAwNTAwMDAxMjAxMTAwMTAwMDAwMDQwNkEwODExMDEwMDAxMDEwMkZGCis6MTAwNTEwMDAwMDAxMDkwMjA4MDIwNTAxMDA4MDMyMDkwNDAwMDAwMDAwCis6MTAwNTIwMDAwMTAxMDAwMDBBMjQwMTAwMDE1NjAwMDIwMTAyMEMyNDBFCis6MTAwNTMwMDAwMjAxMDEwMTAwMDIwMDAwMDAwMDBEMjQwNjA1MDEwMjc1Cis6MTAwNTQwMDAwMzAwMDAwMDAwMDAwMDA5MjQwMzAyMDQwMzAwMDUwMDZBCis6MTAwNTUwMDAwQzI0MDIwMzA1MDIwMDA2MDAwMDAwMDAxNTI0MDYwNjE0Cis6MTAwNTYwMDAwMzAyMDAwMDAzMDAwMzAwMDMwMDAzMDAwMzAwMDMwMDc0Cis6MTAwNTcwMDAwMDA5MjQwMzA0MDEwMTAwMDYwMDA5MDQwMTAwMDAwMTMwCis6MTAwNTgwMDAwMjAwMDAwOTA0MDEwMTAyMDEwMjAwMDAwNzI0MDEwMTI4Cis6MTAwNTkwMDAwMDAxMDAxMTI0MDIwMTAyMDIxMDAzNDRBQzAwODBCQkUwCis6MTAwNUEwMDAwMDAwNzcwMTA5MDUwQTA1ODQwMTAxMDA4RjA3MjUwMTc0Cis6MTAwNUIwMDAwMTAwMDAwMDA5MDU4RjAxMDMwMDAxMDUwMDA5MDQwMTg1Cis6MTAwNUMwMDAwMjAyMDEwMjAwMDAwNzI0MDEwMTAwMDEwMDExMjQwMkJGCis6MTAwNUQwMDAwMTAyMDMxODAzNDRBQzAwODBCQjAwMDA3NzAxMDkwNTQ5Cis6MTAwNUUwMDAwQTA1NDYwMjAxMDA4RjA3MjUwMTAxMDAwMDAwMDkwNUU4Cis6MTAwNUYwMDA4RjAxMDMwMDAxMDUwMDA5MDQwMjAwMDAwMTAyMDAwMDUwCis6MTAwNjAwMDAwOTA0MDIwMTAxMDEwMjAwMDAwNzI0MDEwNDAwMDEwMEE1Cis6MTAwNjEwMDAwRTI0MDIwMTA2MDIxMDAyNDRBQzAwODBCQjAwMDkwNTUyCis6MTAwNjIwMDA4QzA1NEMwMjAxMDAwMDA3MjUwMTAwMDIwMDAwMDkwNEFFCis6MTAwNjMwMDAwMjAyMDEwMTAyMDAwMDA3MjQwMTA0MDAwMTAwMEUyNDRGCis6MTAwNjQwMDAwMjAxMDYwMzE4MDI0NEFDMDA4MEJCMDAwOTA1OEMwNUJBCis6MTAwNjUwMDA3MjAzMDEwMDAwMDcyNTAxMDAwMjAwMDAwOTA0MDIwM0UzCis6MTAwNjYwMDAwMTAxMDIwMDAwMDcyNDAxMDQwMDAxMDAxMTI0MDIwMTFECis6MTAwNjcwMDAwMjAyMTAwMzQ0QUMwMDgwQkIwMDAwNzcwMTA5MDU4QzI2Cis6MTAwNjgwMDAwNTg0MDEwMTAwMDAwNzI1MDEwMDAyMDAwMDA5MDQwMkExCis6MTAwNjkwMDAwNDAxMDEwMjAwMDAwNzI0MDEwNDAwMDEwMDExMjQwMkVBCis6MTAwNkEwMDAwMTAyMDMxODAzNDRBQzAwODBCQjAwMDA3NzAxMDkwNTc4Cis6MTAwNkIwMDA4QzA1NDYwMjAxMDAwMDA3MjUwMTAwMDIwMDAwMDkwNDI0Cis6MTAwNkMwMDAwMzAwMDAwMTAxMDAwMDA5MjQwMTAwMDEwOTAwMDEwNEU4Cis6MTAwNkQwMDAwOTA0MDQwMDAyMDEwMzAwMDAwNzI0MDEwMDAxMjQwMEIyCis6MTAwNkUwMDAwNjI0MDIwMTA3MDAwOTI0MDMwMjA4MDEwNzAxMDAwNjhECis6MTAwNkYwMDAyNDAyMDIwOTAwMDkyNDAzMDEwQTAxMDkwMTAwMDkwNTc1Cis6MTAwNzAwMDAwMTAyMDQwMDAwMDAwMDA1MjUwMTAxMDcwOTA1ODEwMjFFCis6MTAwNzEwMDAwNDAwMDAwMDAwMDUyNTAxMDEwQTA0MDMwOTA0MTgwMzcwCis6MTAwNzIwMDA0NTAwNkQwMDYxMDA2NzAwNjkwMDYzMDAyMDAwNDcwMDFDCis6MTAwNzMwMDA2RDAwNjIwMDQ4MDAyMjAzNDUwMDZEMDA2MTAwNjcwMDAzCis6MTAwNzQwMDA2OTAwNjMwMDIwMDA0NTAwNEQwMDQ5MDAyMDAwMzYwMDhDCis6MTAwNzUwMDA3QzAwMzIwMDIwMDA2RDAwMkEwMzQzMDA2RjAwNkUwMDExCis6MTAwNzYwMDA2NjAwNjkwMDY3MDA3NTAwNzIwMDYxMDA3NDAwNjkwMDJFCis6MTAwNzcwMDA2RjAwNkUwMDIwMDA1MzAwNzQwMDcyMDA2OTAwNkUwMDZDCis6MTAwNzgwMDA2NzAwMjIwMzQ5MDA2RTAwNzQwMDY1MDA3MjAwNjYwMDc1Cis6MTAwNzkwMDA2MTAwNjMwMDY1MDAyMDAwNTMwMDc0MDA3MjAwNjkwMDZFCis6MDYwN0EwMDA2RTAwNjcwMDAwMDA3RQorOjEwMTQ4NTAwNzQwMEY1ODY5MEZEQTU3QzA1QTNFNTgyNDU4MzcwRjk3QQorOjAxMTQ5NTAwMjIzNAorOjEwMTQ5NjAwOTA3RkQ2RTA0NDgwRjA0Mzg3MDEwMDAwMDAwMDAwMjJFMAorOjEwMTRBNjAwQzBEMEMwRTA4RkUwQzBFMDhFRTBDMEUwOERFMEMwRTBEQworOjEwMTRCNjAwOENFMEMwRTBDMDgyQzA4MzA1ODZDMDg0QzA4NTdEMDAwNAorOjEwMTRDNjAwOTA3RkUzNzQ3QkYwQTM3NDgwRjA3QzExOTA3Rjk5RTBBOQorOjEwMTRENjAwNTQ0MERDMDMwMjE0RjNCNDAwMTM5MDdGRTI3NDQwRjAyRQorOjEwMTRFNjAwOTA3RkU1RjA5MDdGRTI3NDAwRjAwMjE0RDI5MDc2OTAzRgorOjEwMTRGNjAwRTBCNDAxMTI5MDc2OEZFMDJERkQ5MDdGRTI3NDgwRjBDQgorOjEwMTUwNjAwOTA3RjZDMDIxNTU3QjQwMjEyOTA3NjhGRTAyREZEOTBGNQorOjEwMTUxNjAwN0ZFMjc0ODBGMDkwN0Y2QzAyMTU5NkI0MDMxMjkwNzY4OQorOjEwMTUyNjAwOEZFMDJERkQ5MDdGRTI3NDgwRjA5MDdGNkMwMjE1RTFENAorOjEwMTUzNjAwQjQwNDEyOTA3NjhGRTAyREZEOTA3RkUyNzQ4MEYwOTBENworOjEwMTU0NjAwN0Y2QzAyMTYxMDkwN0ZFMjc0ODBGMDkwN0Y2QzAyMTYxQQorOjEwMTU1NjAwNDBGMEYwRjBGMEYwRjBGMEYwRjBGMEYwRjBEREYyN0RCOQorOjEwMTU2NjAwMDIwNTg2OTA3RkUyNzQwMEYwOTA3RjlCRTA1NDA0QjRGRAorOjEwMTU3NjAwMDAwNTA1ODYwMjE2NDA5MDdGRTI3NDgwRjAwNTg2RjAyRAorOjEwMTU4NjAwRjBGMEYwRjBGMEYwRjBGMEYwRjBGMERERDQwMjE2NDBGQworOjEwMTU5NjAwRjBGMEYwRjBGMEYwRjBGMEYwRjBGMEYwRjBGMEYwRjA0NQorOjEwMTVBNjAwRjBGMERERUM3RDAyMDU4NjkwN0ZFMjc0MDBGMDkwN0YxRQorOjEwMTVCNjAwOUJFMDU0MDRCNDAwMDUwNTg2MDIxNjQwOTA3RkUyNzQ1MQorOjEwMTVDNjAwODBGMDA1ODZGMEYwRjBGMEYwRjBGMEYwRjBGMEYwRjBEQQorOjA2MTVENjAwRjBGMEYwRjBGMEYwNkYKKzoxMDE1REMwMEREQ0UwMjE2NDBGMEYwRjBGMERERkE3RDAyMDU4NjkwQ0IKKzoxMDE1RUMwMDdGRTI3NDAwRjA5MDdGOUJFMDU0MDRCNDAwMDUwNTg2MDQKKzoxMDE1RkMwMDAyMTY0MDkwN0ZFMjc0ODBGMDA1ODZGMEYwRjBGMEREOEEKKzoxMDE2MEMwMERDMDIxNjQwRjBGMEYwRjBGMEYwRERGODdEMDIwNTg2MUIKKzoxMDE2MUMwMDkwN0ZFMjc0MDBGMDkwN0Y5QkUwNTQwNEI0MDAwNTA1QzkKKzoxMDE2MkMwMDg2MDIxNjQwOTA3RkUyNzQ4MEYwMDU4NkYwRjBGMEYwQjAKKzoxMDE2M0MwMEYwRjBERERBOTA3RkUyNzQwMEYwRDA4NUQwODQwNTg2N0UKKzoxMDE2NEMwMEQwODNEMDgyRDBFMEZDRDBFMEZERDBFMEZFRDBFMEZGMzMKKzowNTE2NUMwMEQwRTBEMEQwMjIxNworOjEwMTY2MTAwQzBEMEMwRTBDMDgyQzA4MzkwNzY3Q0UwOTA3RjZGRjBGNAorOjEwMTY3MTAwOTA3NjdERTA5MDdGNkZGMDkwNzY3RUUwOTA3RjZGRjBDNgorOjA5MTY4MTAwRDA4M0QwODJEMEUwRDBEMDIyNDkKKzoxMDE2OEEwMEMwRDBDMEUwOEZFMEMwRTA4RUUwQzBFMEMwODJDMDgzN0UKKzoxMDE2OUEwMDA1ODZDMDg0QzA4NTkwNzY4N0UwRkZCRjAwMDMwMjE3RTUKKzoxMDE2QUEwMDAxOTA3Rjk2RTA0NDgwRjA5MDdGRTI3NDgwRjA5MDdGMTIKKzoxMDE2QkEwMDYyRTAwNTg2OTA3RkUyNzQwMEYwOTA3Rjk2RTA1NDdGQTYKKzoxMDE2Q0EwMEYwOTA3RkUyNzQ4MEYwOTA3NjhFRTBCNDAxMDUwNTg2OTIKKzoxMDE2REEwMDAyMTZGNkI0MDIwNTA1ODYwMjE2RUIwNTg2MDIxNkZCMEIKKzoxMDE2RUEwMEUwRTBFMEUwRTBFMERGRjgwMjE2RkJFMEUwRTBFMERGNjcKKzoxMDE2RkEwMEZBOTA3RkUyNzQwMEYwRDA4NUQwODQwNTg2RDA4M0QwM0EKKzowQzE3MEEwMDgyRDBFMEZFRDBFMEZGRDBFMEQwRDAyMjgyCis6MTAxNzE2MDBDMDgyQzA4M0MwRTBFOEMwRTA3OEQxRTgxNEY4NzBGQjZFCis6MEExNzI2MDBEMEUwRjhEMEUwRDA4M0QwODIyMjlBCis6MTAwQ0E1MDA0MTcyMDEwMTQ1NzIwNTAwMDJDOTAwMDA0NTcyMEEwMDQyCis6MTAwQ0I1MDAwMTAyMDMwNDRENzIwRkQxMDBEMTAwMDAwMDAwMDAwMEI1Cis6MTAwQ0M1MDAyODI4MDkwMDRENzIxQzAxMDAwMTAyMDMwNDA1MDYwN0NFCis6MTAwQ0Q1MDAwODA5MEEwQjQxNzIyRTIyNDE3MjJGMjM0MTcyMzAyMERFCis6MTAwQ0U1MDA0MTcyMzEyMTYyRDI3MjNBMDAwMDAwMDAwMDAwMDAwMDFBCis6MTAwQ0Y1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTAwRDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTAwRDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTAwRDI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTAwRDM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTAwRDQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAwRDU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTAwRDY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTAwRDc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDEwMTAxMDEwMTY4Cis6MTAwRDg1MDAwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTRFCis6MTAwRDk1MDAwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTNFCis6MTAwREE1MDAwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTJFCis6MTAwREI1MDAwMTAxMDEwMTAxMDEwMTAxMDIwMjAyMDIwMjAyMDIwMjE2Cis6MTAwREM1MDAwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMkZFCis6MTAwREQ1MDAwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMkVFCis6MTAwREU1MDAwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMkRFCis6MTAwREY1MDAwMjAyMDIwMjAyMDMwMzAzMDMwMzAzMDMwMzAzMDMwM0MzCis6MTAwRTA1MDAwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwM0FECis6MTAwRTE1MDAwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzlECis6MTAwRTI1MDAwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzhECis6MTAwRTM1MDAwMzAzMDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDZGCis6MTAwRTQ1MDAwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDVECis6MTAwRTU1MDAwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDRECis6MTAwRTY1MDAwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDNECis6MTAwRTc1MDAwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTFECis6MTAwRTg1MDAwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTBECis6MTAwRTk1MDAwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNUZECis6MTAwRUE1MDAwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDYwNkVCCis6MTAwRUI1MDAwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNkNECis6MTAwRUM1MDAwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNkJECis6MTAwRUQ1MDAwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNkFECis6MTAwRUU1MDAwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDcwNzA3MDgwODk2Cis6MTAwRUY1MDAwODA5MDkwOTBBMEEwQTBCMEIwQjBDMEMwQzBEMEQwRDQwCis6MTAwRjA1MDAwRTBFMEUwRjBGMEYxMDEwMTAxMTExMTExMjEyMTIxM0Q5Cis6MTAwRjE1MDAxMzEzMTQxNDE0MTUxNTE1MTYxNjE2MTcxNzE3MTgxODc0Cis6MTAwRjI1MDAxODE5MTkxOTE5MUExQTFBMUExQjFCMUIxQjFDMUMxQzE4Cis6MTAwRjM1MDAxQzFEMUQxRDFEMUUxRTFFMUUxRjFGMUYxRjIwMjAyMEM4Cis6MTAwRjQ1MDAyMTIxMjEyMjIyMjIyMzIzMjQyNDI1MjUyNjI2MjcyNzYxCis6MTAwRjU1MDAyODI4MjkyOTJBMkEyQjJCMkMyQzJEMkQyRTJFMkYyRkQ0Cis6MTAwRjY1MDAzMDMwMzEzMTMyMzIzMzMzMzQzNDM1MzUzNjM2MzczNzQ0Cis6MTAwRjc1MDAzODM4MzkzOTNBM0EzQjNDM0QzRTNGNDA0MTQyNDM0NDlCCis6MTAwRjg1MDA0NTQ2NDc0ODQ5NDk0QTRCNEI0QzRENEU0RjUwNTE1MkE3Cis6MTAwRjk1MDA1MzU0NTU1NTU2NTY1NzU3NTg1QTVCNUQ1RTVGNjE2MkI3Cis6MTAwRkE1MDA2MzY0NjU2NjY3Njg2OTZBNkI2QzZENkY3MTcyNzM3NDhCCis6MTAwRkI1MDA3NTc2Nzc3ODc5N0E3QjdDN0U4MDAxMzcwMTAxMzgwMEY4Cis6MTA0QjI4MDBFNDkwNzIzNkYwQTNGMDkwN0Y5N0UwNTRGQkYwRTQ5MEE1Cis6MTA0QjM4MDA3MjMzRjA5MDcyMzJGMDkwNzIwMTA0RjBFNDkwNzIzM0E0Cis6MTA0QjQ4MDBGMDkwNzIzMkYwOTA3MjAxMDRGMDkwN0Y5N0UwNDQwNDg0Cis6MDI0QjU4MDBGMDIyNDkKKzoxMDMyNkYwMDkwNzYxOEUwRkY2NDA1NzA0MjkwNzVBQkUwQjQwMTE5RDkKKzoxMDMyN0YwMDkwNzIzNzc0MDFGMEU0OTA4MDIwRjA5MDgwMzFGMDkwREMKKzoxMDMyOEYwMDgwMjhGMDkwODAzOUYwODAyMkU0OTA3MjM3RjA5MDc1QUEKKzoxMDMyOUYwMEFERTA5MDcyMkJGMEUwMjQ4MEYwRTA5MDgwMjBGMDkwNzEKKzoxMDMyQUYwMDgwMzFGMDkwODAyOEYwOTA4MDM5RjBFRjY0MDY2MDAyNTIKKzoxMDMyQkYwMDgxOTk5MDcyMzk3NDA0RjA5MDcyMzlFMEZGMjRGRTkwNzYKKzoxMDMyQ0YwMDcyMDRGMEVGNzVGMDBBQTQyNEFCRjU4MkU0MzQ3NUY1QkYKKzoxMDMyREYwMDgzRTA2NDAxNzA1NDkwNzIzNjA0RjA5MDcyMDRFMEZGNDIKKzoxMDMyRUYwMDI0RkQ2MDI4MjRGRTYwMjQyNDAzMjRGQjUwMDQ2MDFDNkEKKzoxMDMyRkYwMDgxOEM3NDIwMkZGNTgyRTQzNDgwRjU4M0U0RjA3NDI4RjgKKzoxMDMzMEYwMDJGRjU4MkU0MzQ4MEY1ODNFNEYwODE4QzkwNzIwNEUwMzEKKzoxMDMzMUYwMEZGMjQzMEY1ODJFNDM0ODBGNTgzRTRGMDc0MzgyRkY1MjAKKzoxMDMzMkYwMDgyRTQzNDgwRjU4M0U0RjA4MThDRTQ5MDcyMzZGMDkwN0YKKzoxMDMzM0YwMDcyMzlFMDc1RjAwQUE0MjRBREY1ODJFNDM0NzVGNTgzOTMKKzoxMDMzNEYwMEUwRkY3RTAwOTA3NTBDRUVGMEEzRUZGMDcwMDY5MDcyMjgKKzoxMDMzNUYwMDAyNzQzQkYwOTA3NTBDRTBGRUEzRTBGRjY0ODA0RTcwQUEKKzoxMDMzNkYwMDA0OTA3MjAyRjBFRjRFNzAwMjgxMzVFRjY0ODA0RTcwNjAKKzoxMDMzN0YwMDAyODEzNUVGRjhFNDkwNzUwREYwRTg5MDc1MENGMDkwNDAKKzoxMDMzOEYwMDcyMzRFMDc1RjAwQUE0MjRBQ0Y1ODJFNDM0NzVGNTgzNDkKKzoxMDMzOUYwMEUwRkY5MDcyMDJGMDkwNzUwREUwMkZGMDkwNzUwQ0UwNDkKKzoxMDMzQUYwMDM0MDBGMEUwRkVBM0UwRkZFNEZDRkQ3QkQ2N0FBNUY5NDQKKzoxMDMzQkYwMEY4RDMxMjM3OTU0MDBBOTA3NTBDNzRBNUYwQTM3NEQ2MDQKKzoxMDMzQ0YwMEYwOTA3NTBERTAyNDJBRjA5MDc1MENFMDM0NUFGMEUwN0YKKzoxMDMzREYwMEZFQTNFMDc4MDVDRUEyRTcxM0NFMTNEOEY4RkY5MDc1QzEKKzoxMDMzRUYwMDBDRUVGMEEzRUZGMDkwNzIyQ0VFRjBBM0VGRjBEMzk0NkQKKzoxMDMzRkYwMEQyRUU2NDgwOTQ4MjQwMEE5MDcyMkM3NDAyRjBBMzc0MEYKKzoxMDM0MEYwMEQyRjBDMzkwNzIyQ0UwNjQ4MDk0ODA1MDA0RTRGMEEzNTcKKzoxMDM0MUYwMEYwOTA3MjJDRTBGRUEzRTAyNDNBRjU4MkVFMzQ3MkY1QzAKKzoxMDM0MkYwMDgzRTA5MDcyMDJGMDkwNzIwNEUwRkYyNEZENjAyRDI0N0YKKzoxMDM0M0YwMEZFNjAyOTI0MDMyNEZCNTAwNDYwMjE4MDQwOTA3MjAyMTcKKzoxMDM0NEYwMEUwRkU3NDIwMkZGNTgyRTQzNDgwRjU4M0VFRjA3NDI4Q0IKKzoxMDM0NUYwMDJGRjU4MkU0MzQ4MEY1ODNFRUYwODAyMTkwNzIwMkUwNDQKKzoxMDM0NkYwMEZGOTA3MjA0RTBGRTI0MzBGNTgyRTQzNDgwRjU4M0VGQTAKKzoxMDM0N0YwMEYwNzQzODJFRjU4MkU0MzQ4MEY1ODNFRkYwOTA3MjM5RDIKKzowQjM0OEYwMEUwMDRGMEUwNjQwQTYwMDI0MUM3MjI4NAorOjEwMzQ5QTAwOTA3NjE4RTBGRkI0MDUyMzkwNzIzN0UwNzAxRDkwNzU5RQorOjEwMzRBQTAwQURFMDkwNzIyQkYwRTAyNDgwRjBFMDkwODAyMEYwOTA2NAorOjEwMzRCQTAwODAzMUYwOTA4MDI4RjA5MDgwMzlGMEVGNjQwNjYwMDI0NQorOjEwMzRDQTAwQzE5MTkwNzIzNkUwNjAwMkMxOTE5MDc2NDBFMDcwMzEwRAorOjEwMzREQTAwOTA3MjAzNzQwM0YwOTA3MjAzRTBGRjc1RjAwQUE0MjQ1QgorOjEwMzRFQTAwQUFGNTgyRTQzNDc1RjU4M0UwRkU5MDcyMjlFMEZERUVEOAorOjEwMzRGQTAwNkQ2MDBFRUZDMzk0MEE1MDA4OTA3MjAzRTAwNEYwODBFNgorOjEwMzUwQTAwRDU5MDcyMzk3NDA0RjA5MDc2NDBFMDcwMDg5MDcyMDM5NgorOjEwMzUxQTAwRTA5MDcyMzlGMDkwNzIzOUUwRkQyNEZFOTA3MjJBRjA0MAorOjEwMzUyQTAwRUQ3NUYwMEFBNDI0QURGNTgyRTQzNDc1RjU4M0UwRkY2NQorOjEwMzUzQTAwN0UwMDkwNzUwQ0VFRjBBM0VGRjA3MDA2OTA3MjAyNzRBNAorOjEwMzU0QTAwODBGMDkwNzUwQ0UwRkVBM0UwRkY2NDgwNEU3MDA0OTA1QQorOjEwMzU1QTAwNzIwMkYwRUY0RTcwMDJDMTFCRUY2NDgwNEU3MDAyQzExRQorOjEwMzU2QTAwMUJFRkY4RTQ5MDc1MERGMEU4OTA3NTBDRjBFRDc1RjAyRQorOjEwMzU3QTAwMEFBNDI0QUNGNTgyRTQzNDc1RjU4M0UwRkY5MDcyMDI2NAorOjEwMzU4QTAwRjA5MDc1MERFMDJGRjA5MDc1MENFMDM0MDBGMEUwRkUzRAorOjEwMzU5QTAwQTNFMEZGRTRGQ0ZEN0JENjdBQTVGOUY4RDMxMjM3OTVCMAorOjEwMzVBQTAwNDAwQTkwNzUwQzc0QTVGMEEzNzRENkYwOTA3NTBERTBERQorOjEwMzVCQTAwMjQyQUYwOTA3NTBDRTAzNDVBRjBFMEZFQTNFMDc4MDU3NgorOjEwMzVDQTAwQ0VBMkU3MTNDRTEzRDhGOEZGOTA3NTBDRUVGMEEzRUY1NgorOjEwMzVEQTAwRjA5MDcyMkNFRUYwQTNFRkYwRDM5NEQyRUU2NDgwOTRDNAorOjEwMzVFQTAwODI0MDBBOTA3MjJDNzQwMkYwQTM3NEQyRjBDMzkwNzJEMworOjEwMzVGQTAwMkNFMDY0ODA5NDgwNTAwNEU0RjBBM0YwOTA3MjJDRTBGNAorOjEwMzYwQTAwRkVBM0UwMjQzQUY1ODJFRTM0NzJGNTgzRTA5MDcyMDI2QQorOjEwMzYxQTAwRjA5MDcyMkFFMEZGMjRGRDYwMkQyNEZFNjAyOTI0MDMyNQorOjEwMzYyQTAwMjRGQjUwMDQ2MDIxODA0MDkwNzIwMkUwRkU3NDIwMkYzNworOjEwMzYzQTAwRjU4MkU0MzQ4MEY1ODNFRUYwNzQyODJGRjU4MkU0MzRDMQorOjEwMzY0QTAwODBGNTgzRUVGMDgwMjE5MDcyMDJFMEZGOTA3MjJBRTAwQQorOjEwMzY1QTAwRkUyNDMwRjU4MkU0MzQ4MEY1ODNFRkYwNzQzODJFRjVEOQorOjEwMzY2QTAwODJFNDM0ODBGNTgzRUZGMDkwNzY0MEUwNzAwNjkwNzI0MQorOjEwMzY3QTAwMzk3NDBBRjA5MDcyMzlFMDA0RjBFMEMzOTQwQTUwMDJGNworOjA4MzY4QTAwQTExMUU0OTA3NjQwRjAyMjRBCis6MDQ0RTBCMDAxMjE3MzAyMjI4Cis6MTA0OUFFMDA5MDc2NDY3NDgwRjBFNEEzRjBBM0YwQTNGMEEzRjBBM0Y2Cis6MTA0OUJFMDBGMEEzRjBBM0YwQTNGMEEzNzQ4MEYwRTRBM0YwQTNGMEFGCis6MTA0OUNFMDBBM0YwQTNGMEEzRjBBM0YwQTM3NDQwRjBFNEEzRjBBMzJDCis6MTA0OURFMDA3NDQwRjBFNEEzRjBBM0YwQTNGMEEzRjBBM0YwQTNGMENGCis6MTA0OUVFMDBBMzc0NDBGMEU0QTNGMEEzNzQ0MEYwRTRBM0YwQTNGMEFBCis6MDU0OUZFMDBBM0YwQTNGMDIyNkMKKzoxMDBGQzYwMEU0RkY3NDQ2MkZGNTgyRTQzNDc2RjU4M0UwRkU3NDIwNjAKKzoxMDBGRDYwMDJGRjU4MkU0MzQ4MEY1ODNFRUYwNzQ0RTJGRjU4MkU0MkIKKzoxMDBGRTYwMDM0NzZGNTgzRTBGRTc0MzAyRkY1ODJFNDM0ODBGNTgzQTEKKzowNjBGRjYwMEVFRjAwRkJGMDhDQzc1Cis6MDEwRkZDMDAyMkQyCis6MTA0QUYxMDBFNEZGNzQ1NjJGRjU4MkU0MzQ3NkY1ODNFMEZFNzQyOEUyCis6MTA0QjAxMDAyRkY1ODJFNDM0ODBGNTgzRUVGMDc0NUUyRkY1ODJFNEI0Cis6MTA0QjExMDAzNDc2RjU4M0UwRkU3NDM4MkZGNTgyRTQzNDgwRjU4MzMyCis6MDY0QjIxMDBFRUYwMEZCRjA4Q0MwRQorOjAxNEIyNzAwMjI2QgorOjEwMTczMDAwQzA4MkMwODNDMEUwRThDMEUwNzg3OEU4MTRGODcwRkJBRAorOjBBMTc0MDAwRDBFMEY4RDBFMEQwODNEMDgyMjI4MAorOjAzMDA0MzAwMDI0OTAwNkYKKzoxMDQ5MDAwMDAyMkZFNzAwMDIzRDQ3MDAwMjREQjQwMDAyNEM0MzAwNzUKKzoxMDQ5MTAwMDAyNEJFOTAwMDIyRkZGMDAwMjRDNUIwMDAyNEMwQTAwMzAKKzoxMDQ5MjAwMDAyNEM3MjAwMDI0QjVBMDAwMjRDODkwMDAyNENBMDAwNUIKKzoxMDQ5MzAwMDAyNENCNzAwMDI0Q0NFMDAwMjRDRTUwMDAyNENGQzAwRDkKKzoxMDQ5NDAwMDAyNEQxMzAwMDI0RDJBMDAwMjRENDEwMDAyNEQ1ODAwNTUKKzowODQ5NTAwMDAyNEQ2RjAwMDI0RDg2MDBDQworOjEwMUI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQorOjEwMUI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwMUI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwMUI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwMUI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwMUI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwMUJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwMUJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwMUJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMUJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwMUJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwMUJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwMUMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAorOjEwMUMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwMUMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwMUM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAorOjEwMUM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwMUM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAorOjEwMUM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwMUM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwMUM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAorOjEwMUNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwMUNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwMUNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAorOjEwMUNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMUNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwMUNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMworOjEwMUQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMworOjEwMUQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwMUQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjEwMUQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwMUQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwMUQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwMUQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MworOjEwMUQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwMUQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwMURBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwMURCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwMURDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwMUREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwMURFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwMURGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwMUUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwMUUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgorOjEwMUUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwMUU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwMUU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgorOjEwMUU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwMUU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwMUU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwMUU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwMUVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgorOjBFMUVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTAxRUJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Cis6MTAxRUNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAxRURFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTAxRUVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTAxRUZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTAxRjBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTAxRjFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTAxRjJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MDIxRjNFMDAwMDAwQTEKKzoxMDFGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKKzoxMDFGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKKzoxMDFGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKKzoxMDFGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKKzoxMDFGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKKzoxMDFGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKKzoxMDFGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKKzoxMDFGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKKzoxMDFGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKKzoxMDFGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKKzoxMDFGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKKzoxMDFGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKKzoxMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKKzoxMDIwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDIwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDIwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKKzoxMDIwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKKzoxMDIwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKKzoxMDIwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKKzoxMDIwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKKzoxMDIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKKzoxMDIwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKKzoxMDIwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKKzoxMDIwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKKzoxMDIwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDIwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDIwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKKzoxMDIwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMDIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKKzoxMDIxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKKzoxMDIxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDIxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDIxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMDIxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMDIxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKKzoxMDIxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDIxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMDIxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKKzoxMDIxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMDIxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMDIxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKKzoxMDIxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMDIxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDIxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKKzoxMDIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKKzoxMDIyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKKzoxMDIyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKKzoxMDIyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDIyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDIyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMDIyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDIyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDIyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDIyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDIyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMDIyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMDIyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDIyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDIyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKKzoxMDIyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDIzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDIzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKKzoxMDIzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKKzoxMDIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDIzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDIzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKKzowRTIzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwMjM3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwMjM4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwMjM5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwMjNBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwMjNCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwMjNDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwMjNERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwMjNFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwMjNGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwMjQwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQorOjEwMjQxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwMjQyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwMjQzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwMjQ0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwMjQ1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwMjQ2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwMjQ3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwMjQ4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwMjQ5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwMjRBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwMjRCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwMjRDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwMjRERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQorOjEwMjRFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwMjRGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwMjUwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwMjUxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwMjUyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwMjUzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMjU0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwMjU1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjEwMjU2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwMjU3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMjU4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwMjU5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAorOjEwMjVBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwMjVCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwMjVDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAorOjEwMjVERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwMjVFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwMjVGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwMjYwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwMjYxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQworOjEwMjYyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QworOjEwMjYzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwMjY0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwMjY1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QworOjEwMjY2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QworOjEwMjY3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QworOjEwMjY4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQworOjEwMjY5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQworOjEwMjZBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQworOjEwMjZCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwMjZDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQworOjEwMjZERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQworOjBFMjZFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTAyNkZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTAyNzBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTAyNzFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTAyNzJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTAyNzNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAyNzRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTAyNzVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTAyNzZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTAyNzdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTAyNzhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTAyNzlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTAyN0FDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTAyN0JDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTAyN0NDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTAyN0RDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTAyN0VDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MDUyN0ZDMDAwMDAwMDAwMDIyQjYKKzowNzE3NEEwMDkwN0ZDNTc0MDJGMDIyM0MKKzoxMDE3NTEwMDkwN0VDMEUwOTA3NjQ1RjA5MDdFQzFFMDkwNzY0NEYwQjYKKzoxMDE3NjEwMDkwN0VDMkUwOTA3NjQzRjBCNDAwMDMwMjE3Nzg5MDc2NDEKKzoxMDE3NzEwMDE5NzQwM0YwMDIxNzhFOTA3NjQ0RTBCNEJCMDk5MDc2OTkKKzoxMDE3ODEwMDE5NzQwMkYwMDIxNzhFOTA3NjE5NzQwMUYwOTA3NjQyNjYKKzowMzE3OTEwMEU0RjAyMjVGCis6MDMwMDAwMDAwMjQ2QjlGQworOjBDNDZCOTAwNzg3RkU0RjZEOEZENzU4MTM4MDI0NzAwRDgKKzoxMDM2OTIwMEJCMDEwNjg5ODI4QTgzRTAyMjUwMDJFNzIyQkJGRTAyMzYKKzowOTM2QTIwMEUzMjI4OTgyOEE4M0U0OTMyMjY5Cis6MTAzNkFCMDBCQjAxMENFNTgyMjlGNTgyRTU4MzNBRjU4M0UwMjI1MEQ0Cis6MTAzNkJCMDAwNkU5MjU4MkY4RTYyMkJCRkUwNkU5MjU4MkY4RTIyMjFFCis6MEQzNkNCMDBFNTgyMjlGNTgyRTU4MzNBRjU4M0U0OTMyMjM4Cis6MTAzNkQ4MDBDMkQ1RUMzMEU3MDlCMkQ1RTRDMzlERkRFNDlDRkNFRTBECis6MTAzNkU4MDAzMEU3MTVCMkQ1RTRDMzlGRkZFNDlFRkUxMjM4MUZDMzJFCis6MTAzNkY4MDBFNDlERkRFNDlDRkM4MDAzMTIzODFGMzBENTA3QzNFNDI5Cis6MDYzNzA4MDA5RkZGRTQ5RUZFMjI3QgorOjEwMzcwRTAwQkIwMTEwRTU4MjI5RjU4MkU1ODMzQUY1ODNFMEY1RjBGOQorOjEwMzcxRTAwQTNFMDIyNTAwOUU5MjU4MkY4ODZGMDA4RTYyMkJCRkVENgorOjEwMzcyRTAwMEFFOTI1ODJGOEUyRjVGMDA4RTIyMkU1ODMyQUY1ODMxQworOjA4MzczRTAwRTk5M0Y1RjBBM0U5OTMyMkUxCis6MTAzNzQ2MDBFODhGRjBBNENDOEJGMEE0MkNGQ0U5OEVGMEE0MkNGQzIyCis6MTAzNzU2MDA4QUYwRURBNDJDRkNFQThFRjBBNENEQThGMDhCRjBBNEEwCis6MTAzNzY2MDAyRENDMzgyNUYwRkRFOThGRjBBNDJDQ0QzNUYwRkNFQkZGCis6MTAzNzc2MDA4RUYwQTRGRUE5RjBFQjhGRjBBNENGQzVGMDJFQ0QzOUM0Cis6MEYzNzg2MDBGRUU0M0NGQ0VBQTQyRENFMzVGMEZERTQzQ0ZDMjIzMQorOjEwMzc5NTAwRUI5RkY1RjBFQTlFNDJGMEU5OUQ0MkYwRUM2NDgwQzhBQgorOjA2MzdBNTAwNjQ4MDk4NDVGMDIyNEIKKzoxMDM3QUIwMEVCOUZGNUYwRUE5RTQyRjBFOTlENDJGMEU4OUM0NUYwNzQKKzowMTM3QkIwMDIyRUIKKzowQzM3QkMwMEVDRjBBM0VERjBBM0VFRjBBM0VGRjAyMjgwCis6MTAzN0M4MDBBODgyODU4M0YwRDA4M0QwODIxMjM3REYxMjM3REYxMkM4Cis6MTAzN0Q4MDAzN0RGMTIzN0RGRTQ3M0U0OTNBM0M1ODNDNUYwQzU4M0VECis6MTAzN0U4MDBDOEM1ODJDOEYwQTNDNTgzQzVGMEM1ODNDOEM1ODJDODRCCis6MDEzN0Y4MDAyMkFFCis6MTAzN0Y5MDBEMDgzRDA4MkY4RTQ5MzcwMTI3NDAxOTM3MDBEQTNBMzVGCis6MTAzODA5MDA5M0Y4NzQwMTkzRjU4Mjg4ODNFNDczNzQwMjkzNjg2MDcyCis6MDYzODE5MDBFRkEzQTNBMzgwREY3MgorOjEwNDZDNTAwMDIwN0E2RTQ5M0EzRjhFNDkzQTM0MDAzRjY4MDAxRjI1RQorOjEwNDZENTAwMDhERkY0ODAyOUU0OTNBM0Y4NTQwNzI0MENDOEMzMzNGNgorOjEwNDZFNTAwQzQ1NDBGNDQyMEM4ODM0MDA0RjQ1NjgwMDE0NkY2REZDNQorOjEwNDZGNTAwRTQ4MDBCMDEwMjA0MDgxMDIwNDA4MDkwMEM4RkU0N0VCQQorOjEwNDcwNTAwMDE5MzYwQkNBM0ZGNTQzRjMwRTUwOTU0MUZGRUU0OTNCOQorOjEwNDcxNTAwQTM2MDAxMEVDRjU0QzAyNUUwNjBBODQwQjhFNDkzQTM4MAorOjEwNDcyNTAwRkFFNDkzQTNGOEU0OTNBM0M4QzU4MkM4Q0FDNTgzQ0FBQgorOjEwNDczNTAwRjBBM0M4QzU4MkM4Q0FDNTgzQ0FERkU5REVFNzgwQkU2MworOjAxMEZDNTAwMDAyQgorOjEwMzgxRjAwQkMwMDBCQkUwMDI5RUY4REYwODRGRkFERjAyMkU0Q0M4RAorOjEwMzgyRjAwRjg3NUYwMDhFRjJGRkZFRTMzRkVFQzMzRkNFRTlERUM1NgorOjEwMzgzRjAwOTg0MDA1RkNFRTlERkUwRkQ1RjBFOUU0Q0VGRDIyRUQ5QworOjEwMzg0RjAwRjhGNUYwRUU4NDIwRDIxQ0ZFQURGMDc1RjAwOEVGMkZFNgorOjEwMzg1RjAwRkZFRDMzRkQ0MDA3OTg1MDA2RDVGMEYyMjJDMzk4RkRENworOjA1Mzg2RjAwMEZENUYwRUEyMjc0Cis6MDAwMDAwMDFGRgorLyoKK1ZFUlNJT049MS4wNC4wNjIKK0RBVEU9MTYuMTAuMjAwMiAgCisqLworc3RhdGljIElOVEVMX0hFWF9SRUNPUkQgZ19lbWk2Ml9sb2FkZXJbXSA9IHsKKyAgIDMsMHgwMDAwLDAsezB4MDIsMHgwMiwweDg3fSwKKyAgIDMsMHgwMDQzLDAsezB4MDIsMHgwNCwweDAwfSwKKyAgMTYsMHgwMTAwLDAsezB4ZTQsMHhmZiwweGZlLDB4YzIsMHgyMCwweGQyLDB4ZTgsMHg0MywweGQ4LDB4MjAsMHg5MCwweDdmLDB4YWIsMHg3NCwweGZmLDB4ZjB9LAorICAxNiwweDAxMTAsMCx7MHg5MCwweDdmLDB4YTksMHhmMCwweDkwLDB4N2YsMHhhYSwweGYwLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweDk1LDB4NzQsMHhjMH0sCisgIDE2LDB4MDEyMCwwLHsweGYwLDB4OTAsMHg3ZiwweDllLDB4ZjAsMHg5MCwweDdmLDB4OTgsMHhmMCwweGU0LDB4OTAsMHg3ZiwweDk0LDB4ZjAsMHg5MCwweDdmfSwKKyAgMTYsMHgwMTMwLDAsezB4OWQsMHg3NCwweGZmLDB4ZjAsMHg5MCwweDdmLDB4OTcsMHg3NCwweGEwLDB4ZjAsMHg5MCwweDdmLDB4OTMsMHhlMCwweDU0LDB4ZmN9LAorICAxNiwweDAxNDAsMCx7MHhmMCwweDkwLDB4N2YsMHg5YywweDc0LDB4MDMsMHhmMCwweGU0LDB4OTAsMHg3ZiwweDk2LDB4ZjAsMHg5MCwweDdmLDB4YWYsMHhlMH0sCisgIDE2LDB4MDE1MCwwLHsweDQ0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHhhZSwweGUwLDB4NDQsMHgwZCwweGYwLDB4ZDIsMHhhZiwweDBmLDB4YmYsMHgwMCwweDAxfSwKKyAgMTYsMHgwMTYwLDAsezB4MGUsMHhiZSwweDA3LDB4ZjgsMHhiZiwweDA4LDB4ZjUsMHgyMCwweDIwLDB4NDIsMHg3NSwweDE0LDB4MDAsMHg3NSwweDEzLDB4MDB9LAorICAxNiwweDAxNzAsMCx7MHg3NSwweDEyLDB4MDAsMHg3NSwweDExLDB4MDAsMHg3ZiwweDQ4LDB4N2UsMHg5MiwweDdkLDB4MDAsMHg3YywweDAwLDB4YWIsMHgxNH0sCisgIDE2LDB4MDE4MCwwLHsweGFhLDB4MTMsMHhhOSwweDEyLDB4YTgsMHgxMSwweGMzLDB4MTIsMHgwMywweGVkLDB4NTAsMHhkYiwweDIwLDB4MjAsMHhkOCwweDdhfSwKKyAgMTYsMHgwMTkwLDAsezB4MDAsMHg3OSwweDAwLDB4NzgsMHgwMCwweGU1LDB4MTQsMHgyNCwweDAxLDB4ZjUsMHgxNCwweGVhLDB4MzUsMHgxMywweGY1LDB4MTN9LAorICAxNiwweDAxYTAsMCx7MHhlOSwweDM1LDB4MTIsMHhmNSwweDEyLDB4ZTgsMHgzNSwweDExLDB4ZjUsMHgxMSwweDgwLDB4Y2EsMHgzMCwweDIwLDB4ZmQsMHgxMn0sCisgIDE2LDB4MDFiMCwwLHsweDAxLDB4YzcsMHg1MCwweDA3LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0fSwKKyAgIDYsMHgwMWMwLDAsezB4MDIsMHhmMCwweGMyLDB4MjAsMHg4MCwweGU2fSwKKyAgIDEsMHgwMWM2LDAsezB4MjJ9LAorICAxNiwweDAxYzcsMCx7MHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4NWIsMHg2MCwweDYwLDB4MjQsMHgwMiwweDYwLDB4MDMsMHgwMiwweDAyLDB4ODUsMHg5MH0sCisgIDE2LDB4MDFkNywwLHsweDdmLDB4ZWEsMHhlMCwweDc1LDB4MGEsMHgwMCwweGY1LDB4MGIsMHhhMywweGUwLDB4ZmUsMHhlNCwweGVlLDB4NDIsMHgwYSwweDkwfSwKKyAgMTYsMHgwMWU3LDAsezB4N2YsMHhlZSwweGUwLDB4NzUsMHgxNSwweDAwLDB4ZjUsMHgxNiwweGEzLDB4ZTAsMHhmZSwweGU0LDB4ZWUsMHg0MiwweDE1LDB4ZTV9LAorICAxNiwweDAxZjcsMCx7MHgxNiwweDQ1LDB4MTUsMHg3MCwweDAzLDB4MDIsMHgwMiwweDg1LDB4ZTQsMHg5MCwweDdmLDB4YzUsMHhmMCwweDkwLDB4N2YsMHhiNH0sCisgIDE2LDB4MDIwNywwLHsweGUwLDB4MjAsMHhlMywweGY5LDB4OTAsMHg3ZiwweGM1LDB4ZTAsMHhmNSwweDBjLDB4MTIsMHgwMywweDEzLDB4YWYsMHgwYywweDdlfSwKKyAgMTYsMHgwMjE3LDAsezB4MDAsMHhlZiwweDI1LDB4MGIsMHhmNSwweDBiLDB4ZWUsMHgzNSwweDBhLDB4ZjUsMHgwYSwweGMzLDB4ZTUsMHgxNiwweDlmLDB4ZjV9LAorICAxNiwweDAyMjcsMCx7MHgxNiwweGU1LDB4MTUsMHg5ZSwweGY1LDB4MTUsMHg4MCwweGM3LDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHg3NSwweDBhLDB4MDAsMHhmNX0sCisgIDE2LDB4MDIzNywwLHsweDBiLDB4YTMsMHhlMCwweGZlLDB4ZTQsMHhlZSwweDQyLDB4MGEsMHg5MCwweDdmLDB4ZWUsMHhlMCwweDc1LDB4MTUsMHgwMCwweGY1fSwKKyAgMTYsMHgwMjQ3LDAsezB4MTYsMHhhMywweGUwLDB4ZmUsMHhlNCwweGVlLDB4NDIsMHgxNSwweGU1LDB4MTYsMHg0NSwweDE1LDB4NjAsMHgzMCwweGU0LDB4OTB9LAorICAxNiwweDAyNTcsMCx7MHg3ZiwweGM1LDB4ZjAsMHg5MCwweDdmLDB4YjQsMHhlMCwweDIwLDB4ZTMsMHhmOSwweDkwLDB4N2YsMHhjNSwweGUwLDB4ZjUsMHgwY30sCisgIDE2LDB4MDI2NywwLHsweDEyLDB4MDMsMHgyYiwweGFmLDB4MGMsMHg3ZSwweDAwLDB4ZWYsMHgyNSwweDBiLDB4ZjUsMHgwYiwweGVlLDB4MzUsMHgwYSwweGY1fSwKKyAgMTUsMHgwMjc3LDAsezB4MGEsMHhjMywweGU1LDB4MTYsMHg5ZiwweGY1LDB4MTYsMHhlNSwweDE1LDB4OWUsMHhmNSwweDE1LDB4ODAsMHhjYSwweGMzfSwKKyAgIDEsMHgwMjg2LDAsezB4MjJ9LAorICAxMiwweDAyODcsMCx7MHg3OCwweDdmLDB4ZTQsMHhmNiwweGQ4LDB4ZmQsMHg3NSwweDgxLDB4MjksMHgwMiwweDAyLDB4Y2V9LAorICAxNiwweDAyOTMsMCx7MHgwMiwweDAxLDB4MDAsMHhlNCwweDkzLDB4YTMsMHhmOCwweGU0LDB4OTMsMHhhMywweDQwLDB4MDMsMHhmNiwweDgwLDB4MDEsMHhmMn0sCisgIDE2LDB4MDJhMywwLHsweDA4LDB4ZGYsMHhmNCwweDgwLDB4MjksMHhlNCwweDkzLDB4YTMsMHhmOCwweDU0LDB4MDcsMHgyNCwweDBjLDB4YzgsMHhjMywweDMzfSwKKyAgMTYsMHgwMmIzLDAsezB4YzQsMHg1NCwweDBmLDB4NDQsMHgyMCwweGM4LDB4ODMsMHg0MCwweDA0LDB4ZjQsMHg1NiwweDgwLDB4MDEsMHg0NiwweGY2LDB4ZGZ9LAorICAxNiwweDAyYzMsMCx7MHhlNCwweDgwLDB4MGIsMHgwMSwweDAyLDB4MDQsMHgwOCwweDEwLDB4MjAsMHg0MCwweDgwLDB4OTAsMHgwNCwweDZlLDB4ZTQsMHg3ZX0sCisgIDE2LDB4MDJkMywwLHsweDAxLDB4OTMsMHg2MCwweGJjLDB4YTMsMHhmZiwweDU0LDB4M2YsMHgzMCwweGU1LDB4MDksMHg1NCwweDFmLDB4ZmUsMHhlNCwweDkzfSwKKyAgMTYsMHgwMmUzLDAsezB4YTMsMHg2MCwweDAxLDB4MGUsMHhjZiwweDU0LDB4YzAsMHgyNSwweGUwLDB4NjAsMHhhOCwweDQwLDB4YjgsMHhlNCwweDkzLDB4YTN9LAorICAxNiwweDAyZjMsMCx7MHhmYSwweGU0LDB4OTMsMHhhMywweGY4LDB4ZTQsMHg5MywweGEzLDB4YzgsMHhjNSwweDgyLDB4YzgsMHhjYSwweGM1LDB4ODMsMHhjYX0sCisgIDE2LDB4MDMwMywwLHsweGYwLDB4YTMsMHhjOCwweGM1LDB4ODIsMHhjOCwweGNhLDB4YzUsMHg4MywweGNhLDB4ZGYsMHhlOSwweGRlLDB4ZTcsMHg4MCwweGJlfSwKKyAgMTYsMHgwMzEzLDAsezB4ZTUsMHgwYywweGZmLDB4ZTUsMHgwYiwweGY1LDB4ODIsMHhlNSwweDBhLDB4ZjUsMHg4MywweDc1LDB4OTIsMHg3ZSwweDc0LDB4YzB9LAorICAgOCwweDAzMjMsMCx7MHhmOCwweGUyLDB4MDgsMHhmMCwweGEzLDB4ZGYsMHhmYSwweDIyfSwKKyAgMTYsMHgwMzJiLDAsezB4OTAsMHg3ZiwweDk2LDB4ODUsMHg4MywweDkyLDB4YTgsMHg4MiwweDc5LDB4MDIsMHg5MCwweDAwLDB4MDAsMHhlMCwweGI0LDB4MDB9LAorICAxNiwweDAzM2IsMCx7MHgwZCwweDc0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHg5NywweGUwLDB4NTQsMHg3ZiwweGYwLDB4NDQsMHg4MCwweGYwLDB4ZTUsMHgwY30sCisgIDE2LDB4MDM0YiwwLHsweGZmLDB4OTAsMHg3ZSwweGMwLDB4ZTAsMHhmNSwweDI4LDB4ZTQsMHhhMiwweDQ3LDB4MzMsMHhmMiwweDY5LDB4ZjIsMHhlNCwweGEyfSwKKyAgMTYsMHgwMzViLDAsezB4NDYsMHgzMywweGYyLDB4NjksMHhmMiwweGU0LDB4YTIsMHg0NSwweDMzLDB4ZjIsMHg2OSwweGYyLDB4ZTQsMHhhMiwweDQ0LDB4MzN9LAorICAxNiwweDAzNmIsMCx7MHhmMiwweDY5LDB4ZjIsMHhlNCwweGEyLDB4NDMsMHgzMywweGYyLDB4NjksMHhmMiwweGU0LDB4YTIsMHg0MiwweDMzLDB4ZjIsMHg2OX0sCisgIDE2LDB4MDM3YiwwLHsweGYyLDB4ZTQsMHhhMiwweDQxLDB4MzMsMHhmMiwweDY5LDB4ZjIsMHhlNCwweGEyLDB4NDAsMHgzMywweGYyLDB4NjksMHhmMiwweGEzfSwKKyAgIDMsMHgwMzhiLDAsezB4ZGYsMHhjMiwweDIyfSwKKyAgMTYsMHgwMzhlLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4OTAsMHg3ZiwweGM0LDB4ZTQsMHhmMCwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2Z9LAorICAxMSwweDAzOWUsMCx7MHhhYiwweDc0LDB4MDQsMHhmMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHgwM2E5LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4ZDIsMHgyMCwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MDF9LAorICAgOCwweDAzYjksMCx7MHhmMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfSwKKyAgMTYsMHgwM2MxLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwMiwweGYwLDB4ZDB9LAorICAgNiwweDAzZDEsMCx7MHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9LAorICAxNiwweDAzZDcsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDEwLDB4ZjAsMHhkMH0sCisgICA2LDB4MDNlNywwLHsweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4MDNlZCwwLHsweGViLDB4OWYsMHhmNSwweGYwLDB4ZWEsMHg5ZSwweDQyLDB4ZjAsMHhlOSwweDlkLDB4NDIsMHhmMCwweGU4LDB4OWMsMHg0NSwweGYwfSwKKyAgIDEsMHgwM2ZkLDAsezB4MjJ9LAorICAgMSwweDAzZmUsMCx7MHgzMn0sCisgICAxLDB4MDNmZiwwLHsweDMyfSwKKyAgMTYsMHgwNDAwLDAsezB4MDIsMHgwMywweGE5LDB4MDAsMHgwMiwweDAzLDB4YzEsMHgwMCwweDAyLDB4MDMsMHg4ZSwweDAwLDB4MDIsMHgwNCwweDU4LDB4MDB9LAorICAxNiwweDA0MTAsMCx7MHgwMiwweDAzLDB4ZDcsMHgwMCwweDAyLDB4MDMsMHhmZSwweDAwLDB4MDIsMHgwMywweGZmLDB4MDAsMHgwMiwweDA0LDB4ODQsMHgwMH0sCisgIDE2LDB4MDQyMCwwLHsweDAyLDB4MDQsMHg4NSwweDAwLDB4MDIsMHgwNCwweDg2LDB4MDAsMHgwMiwweDA0LDB4ODcsMHgwMCwweDAyLDB4MDQsMHg4OCwweDAwfSwKKyAgMTYsMHgwNDMwLDAsezB4MDIsMHgwNCwweDg5LDB4MDAsMHgwMiwweDA0LDB4OGEsMHgwMCwweDAyLDB4MDQsMHg4YiwweDAwLDB4MDIsMHgwNCwweDhjLDB4MDB9LAorICAxNiwweDA0NDAsMCx7MHgwMiwweDA0LDB4OGQsMHgwMCwweDAyLDB4MDQsMHg4ZSwweDAwLDB4MDIsMHgwNCwweDhmLDB4MDAsMHgwMiwweDA0LDB4OTAsMHgwMH0sCisgICA4LDB4MDQ1MCwwLHsweDAyLDB4MDQsMHg5MSwweDAwLDB4MDIsMHgwNCwweDkyLDB4MDB9LAorICAxNiwweDA0NTgsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDA4LDB4ZjAsMHhkMH0sCisgICA2LDB4MDQ2OCwwLHsweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn0sCisgIDE2LDB4MDQ2ZSwwLHsweDAyLDB4MGEsMHgwMCwweDBmLDB4MDEsMHgwYywweDExLDB4MDQsMHgwZCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDEsMHgwMCwweDAwfSwKKyAgIDEsMHgwNDdlLDAsezB4MDB9LAorICAgNCwweDA0N2YsMCx7MHgwMiwweDE3LDB4MDAsMHgwMH0sCisgICAxLDB4MDQ4MywwLHsweDAwfSwKKyAgIDEsMHgwNDg0LDAsezB4MzJ9LAorICAgMSwweDA0ODUsMCx7MHgzMn0sCisgICAxLDB4MDQ4NiwwLHsweDMyfSwKKyAgIDEsMHgwNDg3LDAsezB4MzJ9LAorICAgMSwweDA0ODgsMCx7MHgzMn0sCisgICAxLDB4MDQ4OSwwLHsweDMyfSwKKyAgIDEsMHgwNDhhLDAsezB4MzJ9LAorICAgMSwweDA0OGIsMCx7MHgzMn0sCisgICAxLDB4MDQ4YywwLHsweDMyfSwKKyAgIDEsMHgwNDhkLDAsezB4MzJ9LAorICAgMSwweDA0OGUsMCx7MHgzMn0sCisgICAxLDB4MDQ4ZiwwLHsweDMyfSwKKyAgIDEsMHgwNDkwLDAsezB4MzJ9LAorICAgMSwweDA0OTEsMCx7MHgzMn0sCisgICAxLDB4MDQ5MiwwLHsweDMyfSwKKyAgMTYsMHgxMTAwLDAsezB4MTIsMHgwMSwweDEwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHg0MCwweDZhLDB4MDgsMHgwMSwweDAxLDB4MDAsMHgwMSwweDAxLDB4MDJ9LAorICAxNiwweDExMTAsMCx7MHgwMCwweDAxLDB4MDksMHgwMiwweDIwLDB4MDAsMHgwMSwweDAxLDB4MDMsMHhhMCwweDAwLDB4MDksMHgwNCwweDAwLDB4MDAsMHgwMn0sCisgIDE2LDB4MTEyMCwwLHsweGZmLDB4MDAsMHgwMCwweDA0LDB4MDcsMHgwNSwweDgyLDB4MDIsMHg0MCwweDAwLDB4MDAsMHgwNywweDA1LDB4MDIsMHgwMiwweDQwfSwKKyAgMTYsMHgxMTMwLDAsezB4MDAsMHgwMCwweDA0LDB4MDMsMHgwOSwweDA0LDB4MjYsMHgwMywweDQxLDB4MDAsMHg2ZSwweDAwLDB4NjMsMHgwMCwweDY4LDB4MDB9LAorICAxNiwweDExNDAsMCx7MHg2ZiwweDAwLDB4NzIsMHgwMCwweDIwLDB4MDAsMHg0MywweDAwLDB4NjgsMHgwMCwweDY5LDB4MDAsMHg3MCwweDAwLDB4NzMsMHgwMH0sCisgIDE2LDB4MTE1MCwwLHsweDJjLDB4MDAsMHgyMCwweDAwLDB4NDksMHgwMCwweDZlLDB4MDAsMHg2MywweDAwLDB4MmUsMHgwMCwweDI4LDB4MDMsMHg0NiwweDAwfSwKKyAgMTYsMHgxMTYwLDAsezB4NjksMHgwMCwweDcyLDB4MDAsMHg2ZCwweDAwLDB4NzcsMHgwMCwweDYxLDB4MDAsMHg3MiwweDAwLDB4NjUsMHgwMCwweDIwLDB4MDB9LAorICAxNiwweDExNzAsMCx7MHg0NiwweDAwLDB4NzIsMHgwMCwweDYxLDB4MDAsMHg2ZCwweDAwLDB4NjUsMHgwMCwweDU3LDB4MDAsMHg2ZiwweDAwLDB4NzIsMHgwMH0sCisgIDE2LDB4MTE4MCwwLHsweDZiLDB4MDAsMHg3MywweDAwLDB4MmEsMHgwMywweDQzLDB4MDAsMHg2ZiwweDAwLDB4NmUsMHgwMCwweDY2LDB4MDAsMHg2OSwweDAwfSwKKyAgMTYsMHgxMTkwLDAsezB4NjcsMHgwMCwweDc1LDB4MDAsMHg3MiwweDAwLDB4NjEsMHgwMCwweDc0LDB4MDAsMHg2OSwweDAwLDB4NmYsMHgwMCwweDZlLDB4MDB9LAorICAxNiwweDExYTAsMCx7MHgyMCwweDAwLDB4NTMsMHgwMCwweDc0LDB4MDAsMHg3MiwweDAwLDB4NjksMHgwMCwweDZlLDB4MDAsMHg2NywweDAwLDB4MjIsMHgwM30sCisgIDE2LDB4MTFiMCwwLHsweDQ5LDB4MDAsMHg2ZSwweDAwLDB4NzQsMHgwMCwweDY1LDB4MDAsMHg3MiwweDAwLDB4NjYsMHgwMCwweDYxLDB4MDAsMHg2MywweDAwfSwKKyAgMTYsMHgxMWMwLDAsezB4NjUsMHgwMCwweDIwLDB4MDAsMHg1MywweDAwLDB4NzQsMHgwMCwweDcyLDB4MDAsMHg2OSwweDAwLDB4NmUsMHgwMCwweDY3LDB4MDB9LAorICAgMiwweDExZDAsMCx7MHgwMCwweDAwfSwKKyAgIDAsMHgwMDAwLDEsezB9Cit9OworLyogU291cmNlOiBFTUlMT0FELkhFWCAKKzoxMDA0NkUwMDAyMEEwMDBGMDEwQzExMDQwRDAwMDAwMDAwNDEwMDAwRjMKKzowMTA0N0UwMDAwN0QKKzoxMDAxQzcwMDkwN0ZFOUUwMjQ1QjYwNjAyNDAyNjAwMzAyMDI4NTkwNkYKKzoxMDAxRDcwMDdGRUFFMDc1MEEwMEY1MEJBM0UwRkVFNEVFNDIwQTkwMjEKKzoxMDAxRTcwMDdGRUVFMDc1MTUwMEY1MTZBM0UwRkVFNEVFNDIxNUU1OTcKKzoxMDAxRjcwMDE2NDUxNTcwMDMwMjAyODVFNDkwN0ZDNUYwOTA3RkI0MjEKKzoxMDAyMDcwMEUwMjBFM0Y5OTA3RkM1RTBGNTBDMTIwMzEzQUYwQzdFRjUKKzoxMDAyMTcwMDAwRUYyNTBCRjUwQkVFMzUwQUY1MEFDM0U1MTY5RkY1M0EKKzoxMDAyMjcwMDE2RTUxNTlFRjUxNTgwQzc5MDdGRUFFMDc1MEEwMEY1N0IKKzoxMDAyMzcwMDBCQTNFMEZFRTRFRTQyMEE5MDdGRUVFMDc1MTUwMEY1QjEKKzoxMDAyNDcwMDE2QTNFMEZFRTRFRTQyMTVFNTE2NDUxNTYwMzBFNDkwOEUKKzoxMDAyNTcwMDdGQzVGMDkwN0ZCNEUwMjBFM0Y5OTA3RkM1RTBGNTBDMEYKKzoxMDAyNjcwMDEyMDMyQkFGMEM3RTAwRUYyNTBCRjUwQkVFMzUwQUY1Q0QKKzowRjAyNzcwMDBBQzNFNTE2OUZGNTE2RTUxNTlFRjUxNTgwQ0FDMzU3Cis6MDEwMjg2MDAyMjU1Cis6MTAwM0E5MDBDMEUwQzA4M0MwODJEMjIwNTM5MUVGOTA3RkFCNzQwMTJCCis6MDgwM0I5MDBGMEQwODJEMDgzRDBFMDMyQzUKKzoxMDAzOEUwMEMwRTBDMDgzQzA4MjkwN0ZDNEU0RjA1MzkxRUY5MDdGQjEKKzowQjAzOUUwMEFCNzQwNEYwRDA4MkQwODNEMEUwMzJCQQorOjEwMDNDMTAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFCNzQwMkYwRDA0NAorOjA2MDNEMTAwODJEMDgzRDBFMDMyNkYKKzoxMDAzRDcwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQjc0MTBGMEQwMjAKKzowNjAzRTcwMDgyRDA4M0QwRTAzMjU5Cis6MDEwM0ZFMDAzMkNDCis6MTAwNDU4MDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUI3NDA4RjBEMEE2Cis6MDYwNDY4MDA4MkQwODNEMEUwMzJENworOjAxMDNGRjAwMzJDQgorOjAxMDQ4NDAwMzI0NQorOjAxMDQ4NTAwMzI0NAorOjAxMDQ4NjAwMzI0MworOjAxMDQ4NzAwMzI0MgorOjAxMDQ4ODAwMzI0MQorOjAxMDQ4OTAwMzI0MAorOjAxMDQ4QTAwMzIzRgorOjAxMDQ4QjAwMzIzRQorOjAxMDQ4QzAwMzIzRAorOjAxMDQ4RDAwMzIzQworOjAxMDQ4RTAwMzIzQgorOjAxMDQ4RjAwMzIzQQorOjAxMDQ5MDAwMzIzOQorOjAxMDQ5MTAwMzIzOAorOjAxMDQ5MjAwMzIzNworOjA0MDQ3RjAwMDIxNzAwMDA2MAorOjEwMDEwMDAwRTRGRkZFQzIyMEQyRTg0M0Q4MjA5MDdGQUI3NEZGRjAxQQorOjEwMDExMDAwOTA3RkE5RjA5MDdGQUFGMDUzOTFFRjkwN0Y5NTc0QzBFMworOjEwMDEyMDAwRjA5MDdGOUVGMDkwN0Y5OEYwRTQ5MDdGOTRGMDkwN0YyNQorOjEwMDEzMDAwOUQ3NEZGRjA5MDdGOTc3NEEwRjA5MDdGOTNFMDU0RkM0MworOjEwMDE0MDAwRjA5MDdGOUM3NDAzRjBFNDkwN0Y5NkYwOTA3RkFGRTA5NgorOjEwMDE1MDAwNDQwMUYwOTA3RkFFRTA0NDBERjBEMkFGMEZCRjAwMDEzQworOjEwMDE2MDAwMEVCRTA3RjhCRjA4RjUyMDIwNDI3NTE0MDA3NTEzMDA3NQorOjEwMDE3MDAwNzUxMjAwNzUxMTAwN0Y0ODdFOTI3RDAwN0MwMEFCMTRFMworOjEwMDE4MDAwQUExM0E5MTJBODExQzMxMjAzRUQ1MERCMjAyMEQ4N0FCQworOjEwMDE5MDAwMDA3OTAwNzgwMEU1MTQyNDAxRjUxNEVBMzUxM0Y1MTMwRAorOjEwMDFBMDAwRTkzNTEyRjUxMkU4MzUxMUY1MTE4MENBMzAyMEZEMTIzQgorOjEwMDFCMDAwMDFDNzUwMDc5MDdGQjRFMDQ0MDFGMDkwN0ZCNEUwNDQ2MQorOjA2MDFDMDAwMDJGMEMyMjA4MEU2RkYKKzowMTAxQzYwMDIyMTYKKzoxMDExMDAwMDEyMDExMDAxMDAwMDAwNDA2QTA4MDEwMTAwMDEwMTAyMDMKKzoxMDExMTAwMDAwMDEwOTAyMjAwMDAxMDEwM0EwMDAwOTA0MDAwMDAyRUYKKzoxMDExMjAwMEZGMDAwMDA0MDcwNTgyMDI0MDAwMDAwNzA1MDIwMjQwOUMKKzoxMDExMzAwMDAwMDAwNDAzMDkwNDI2MDM0MTAwNkUwMDYzMDA2ODAwRjgKKzoxMDExNDAwMDZGMDA3MjAwMjAwMDQzMDA2ODAwNjkwMDcwMDA3MzAwQTcKKzoxMDExNTAwMDJDMDAyMDAwNDkwMDZFMDA2MzAwMkUwMDI4MDM0NjAwOEEKKzoxMDExNjAwMDY5MDA3MjAwNkQwMDc3MDA2MTAwNzIwMDY1MDAyMDAwNjgKKzoxMDExNzAwMDQ2MDA3MjAwNjEwMDZEMDA2NTAwNTcwMDZGMDA3MjAwNEMKKzoxMDExODAwMDZCMDA3MzAwMkEwMzQzMDA2RjAwNkUwMDY2MDA2OTAwNjUKKzoxMDExOTAwMDY3MDA3NTAwNzIwMDYxMDA3NDAwNjkwMDZGMDA2RTAwRTYKKzoxMDExQTAwMDIwMDA1MzAwNzQwMDcyMDA2OTAwNkUwMDY3MDAyMjAzODMKKzoxMDExQjAwMDQ5MDA2RTAwNzQwMDY1MDA3MjAwNjYwMDYxMDA2MzAwMDMKKzoxMDExQzAwMDY1MDAyMDAwNTMwMDc0MDA3MjAwNjkwMDZFMDA2NzAwMjMKKzowMjExRDAwMDAwMDAxRAorOjEwMDMxMzAwRTUwQ0ZGRTUwQkY1ODJFNTBBRjU4Mzc1OTI3RTc0QzA2MworOjA4MDMyMzAwRjhFMjA4RjBBM0RGRkEyMjYyCis6MTAwMzJCMDA5MDdGOTY4NTgzOTJBODgyNzkwMjkwMDAwMEUwQjQwMEJBCis6MTAwMzNCMDAwRDc0MDFGMDkwN0Y5N0UwNTQ3RkYwNDQ4MEYwRTUwQzUyCis6MTAwMzRCMDBGRjkwN0VDMEUwRjUyOEU0QTI0NzMzRjI2OUYyRTRBMjA1Cis6MTAwMzVCMDA0NjMzRjI2OUYyRTRBMjQ1MzNGMjY5RjJFNEEyNDQzMzg0Cis6MTAwMzZCMDBGMjY5RjJFNEEyNDMzM0YyNjlGMkU0QTI0MjMzRjI2OTk2Cis6MTAwMzdCMDBGMkU0QTI0MTMzRjI2OUYyRTRBMjQwMzNGMjY5RjJBMzUwCis6MDMwMzhCMDBERkMyMjJBQworOjAzMDA0MzAwMDIwNDAwQjQKKzoxMDA0MDAwMDAyMDNBOTAwMDIwM0MxMDAwMjAzOEUwMDAyMDQ1ODAwODcKKzoxMDA0MTAwMDAyMDNENzAwMDIwM0ZFMDAwMjAzRkYwMDAyMDQ4NDAwNkYKKzoxMDA0MjAwMDAyMDQ4NTAwMDIwNDg2MDAwMjA0ODcwMDAyMDQ4ODAwOUEKKzoxMDA0MzAwMDAyMDQ4OTAwMDIwNDhBMDAwMjA0OEIwMDAyMDQ4QzAwN0EKKzoxMDA0NDAwMDAyMDQ4RDAwMDIwNDhFMDAwMjA0OEYwMDAyMDQ5MDAwNUEKKzowODA0NTAwMDAyMDQ5MTAwMDIwNDkyMDA3NQorOjAzMDAwMDAwMDIwMjg3NzIKKzowQzAyODcwMDc4N0ZFNEY2RDhGRDc1ODEyOTAyMDJDRUQ0Cis6MTAwM0VEMDBFQjlGRjVGMEVBOUU0MkYwRTk5RDQyRjBFODlDNDVGMDY2Cis6MDEwM0ZEMDAyMkRECis6MTAwMjkzMDAwMjAxMDBFNDkzQTNGOEU0OTNBMzQwMDNGNjgwMDFGMjgwCis6MTAwMkEzMDAwOERGRjQ4MDI5RTQ5M0EzRjg1NDA3MjQwQ0M4QzMzMzZDCis6MTAwMkIzMDBDNDU0MEY0NDIwQzg4MzQwMDRGNDU2ODAwMTQ2RjZERjNCCis6MTAwMkMzMDBFNDgwMEIwMTAyMDQwODEwMjA0MDgwOTAwNDZFRTQ3RTU5Cis6MTAwMkQzMDAwMTkzNjBCQ0EzRkY1NDNGMzBFNTA5NTQxRkZFRTQ5MzMwCis6MTAwMkUzMDBBMzYwMDEwRUNGNTRDMDI1RTA2MEE4NDBCOEU0OTNBM0Y3Cis6MTAwMkYzMDBGQUU0OTNBM0Y4RTQ5M0EzQzhDNTgyQzhDQUM1ODNDQTIyCis6MTAwMzAzMDBGMEEzQzhDNTgyQzhDQUM1ODNDQURGRTlERUU3ODBCRUQ5Cis6MDEwNDgzMDAwMDc4Cis6MDAwMDAwMDFGRgorLyoKK1ZFUlNJT049MS4wLjIuMDAyCitEQVRFPTEwLjAxLjIwMDIKK0VNSTI2XzYyCisqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9lbWk2Ml9md19zLmggYi9kcml2ZXJzL3VzYi9taXNjL2VtaTYyX2Z3X3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWYwNWU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9lbWk2Ml9md19zLmgKQEAgLTAsMCArMSw4ODM3IEBACisvKgorICogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHRocmVlIGRpZmZlcmVudCBmaWxlcywgcHJvdmlkZWQgYnkgRW1hZ2ljLgorICovCisvKiBnZW5lcmF0ZWQgVHVlIEFwciAxNSAyMTo1OTo0MiBFRVNUIDIwMDMgKi8KKworc3RhdGljIElOVEVMX0hFWF9SRUNPUkQgZ19lbWk2MmJzW109eworIHsxNiwgMHg4MDEwLCAwLCB7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGFhLDB4OTksMHg1NSwweDY2LDB4MzAsMHgwMCwweDgwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwNyB9fSwKKyB7MTYsIDB4ODAyMCwgMCwgezB4MzAsMHgwMSwweDYwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwZCwweDMwLDB4MDEsMHgyMCwweDAxLDB4MDAsMHg4MCwweDNmLDB4MmQgfX0sCisgezE2LCAweDgwMzAsIDAsIHsweDMwLDB4MDAsMHhjMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4ODAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDA5IH19LAorIHsxNiwgMHg4MDQwLCAwLCB7MHgzMCwweDAwLDB4MjAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDgwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMSB9fSwKKyB7MTYsIDB4ODA1MCwgMCwgezB4MzAsMHgwMCwweDQwLDB4MDAsMHg1MCwweDAwLDB4NTgsMHgxYSwweDgwLDB4MTIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgwNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MDcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODA4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHg0MCwweDA0LDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgwOTAsIDAsIHsweDAwLDB4MTIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MGEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODBiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4NDggfX0sCisgezE2LCAweDgwYzAsIDAsIHsweDA0LDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MGQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODBlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgwZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MTAwLCAwLCB7MHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgxMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MTMwLCAwLCB7MHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODE0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgxNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODE3MCwgMCwgezB4ODAsMHgxMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgxODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODFhMCwgMCwgezB4MDAsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgxYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODFkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgxZTAsIDAsIHsweDdmLDB4MTAsMHgwMCwweDM0LDB4MDAsMHgwZCwweDAwLDB4MDMsMHg0MCwweDAwLDB4ZDAsMHgwMCwweDM0LDB4MDAsMHgwNSwweDAwIH19LAorIHsxNiwgMHg4MWYwLCAwLCB7MHgwNywweDQwLDB4MDEsMHhkMCwweDAwLDB4NzQsMHgwMCwweDFkLDB4MDAsMHgwNywweDQwLDB4MDEsMHhkMCwweDAwLDB4NzQsMHgwMCB9fSwKKyB7MTYsIDB4ODIwMCwgMCwgezB4MWQsMHg4MCwweDA3LDB4ZTAsMHgwMSwweGI4LDB4MDAsMHg2ZSwweDAwLDB4MWIsMHg4MCwweDA2LDB4ZTAsMHgwMSwweDM4LDB4MzcgfX0sCisgezE2LCAweDgyMTAsIDAsIHsweGM0LDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAxLDB4ZmMsMHg4MCwweGZiLDB4MzAsMHgzNiwweGM4IH19LAorIHsxNiwgMHg4MjIwLCAwLCB7MHg0ZSwweDA5LDB4MDMsMHhmYywweDg0LDB4ZmYsMHgxMCwweDNiLDB4YzAsMHgwZSwweGM4LDB4MDcsMHgyMiwweDgwLDB4ZmYsMHgyMiB9fSwKKyB7MTYsIDB4ODIzMCwgMCwgezB4MzMsMHhjMCwweDBmLDB4YzgsMHgzMywweDZlLDB4MDAsMHhmYiwweDgwLDB4M2YsMHgyMCwweDBkLDB4YzIsMHg1MywweGQ0LDB4ODAgfX0sCisgezE2LCAweDgyNDAsIDAsIHsweGNjLDB4M2EsMHgzZiwweDAwLDB4MGMsMHhmMSwweDAzLDB4ZjAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MjUwLCAwLCB7MHg4MCwweDAwLDB4ZWQsMHg2MCwweGJmLDB4NjAsMHgyMywweGYwLDB4MGQsMHg4MiwweDEyLDB4M2MsMHg2MCwweDhmLDB4NzAsMHgyMyB9fSwKKyB7MTYsIDB4ODI2MCwgMCwgezB4ZjAsMHgwOCwweDg4LDB4MDIsMHhhNSwweDQwLDB4YmYsMHhkMCwweDYzLDB4ZDYsMHgwYiwweDg4LDB4MDIsMHgyZSwweDBjLDB4YmIgfX0sCisgezE2LCAweDgyNzAsIDAsIHsweDgwLDB4MmUsMHgyMCwweDg4LDB4OGQsMHgwMiwweGU2LDB4NDAsMHg4MCwweDYwLDB4MmUsMHgzMCwweDBhLDB4YjEsMHgxMiwweDIwIH19LAorIHsxNiwgMHg4MjgwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4ODAsMHhhMywweDQwLDB4MmMsMHhjNCB9fSwKKyB7MTYsIDB4ODI5MCwgMCwgezB4NGEsMHgwMCwweDEyLDB4OGMsMHg4OCwweGEzLDB4MjIsMHgyMCwweGM0LDB4MGEsMHg5MCwweDQyLDB4MDQsMHhhOSwweGEzLDB4MDAgfX0sCisgezE2LCAweDgyYTAsIDAsIHsweDI0LDB4YzgsMHg4YiwweDgwLDB4MDIsMHhjYywweDAwLDB4YjMsMHgwMCwweDJlLDB4MDEsMHgwOSwweDA4LDB4MDIsMHg4NCwweDAwIH19LAorIHsxNiwgMHg4MmIwLCAwLCB7MHg4MCwweDIwLDB4MmMsMHgxMCwweDBhLDB4MzIsMHg0MiwweDIyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODJjMCwgMCwgezB4YzAsMHgxNSwweGFjLDB4MDQsMHhiMywweDAwLDB4MmEsMHhjMCwweDA4LDB4MDgsMHhhMiwweDhjLDB4MDAsMHg4YiwweDAwLDB4YTIgfX0sCisgezE2LCAweDgyZDAsIDAsIHsweGMxLDB4MTAsMHg5OCwweDQyLDB4YTcsMHgwMCwweGJiLDB4MDEsMHg2NiwweGMxLDB4MGIsMHg4MCwweDAyLDB4YWMsMHgwNCwweGJiIH19LAorIHsxNiwgMHg4MmUwLCAwLCB7MHgwMCwweDJlLDB4MDAsMHgwYiwweGI4LDB4MTIsMHhlNCwweDAyLDB4ODksMHgwOCwweDBlLDB4NDAsMHgwYSwweGIwLDB4MDIsMHgzMCB9fSwKKyB7MTYsIDB4ODJmMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHhhYywweDAwLDB4ZWIsMHgwMCwweDNlLDB4YzAgfX0sCisgezE2LCAweDgzMDAsIDAsIHsweDRhLDB4YjgsMHgyMywweGVjLDB4MTgsMHhlYiwweDAwLDB4MzIsMHhjMCwweDBlLDB4MmMsMHgxMiwweDIyLDB4MTAsMHhlYiwweDAwIH19LAorIHsxNiwgMHg4MzEwLCAwLCB7MHgyNiwweGMwLDB4NGYsMHgwMCwweDQzLDB4ZWQsMHgwMCwweGZiLDB4MDAsMHgyZSwweDI0LDB4MGQsMHg4MCwweDEzLDB4ZTQsMHgwMCB9fSwKKyB7MTYsIDB4ODMyMCwgMCwgezB4YzgsMHhkMCwweDdjLDB4MTIsMHgwZSwweGIwLDB4MDMsMHg0MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgzMzAsIDAsIHsweGUxLDB4MDAsMHhiYywweDAwLDB4ZmYsMHgwMCwweDM1LDB4YzAsMHg0ZiwweGUwLDB4MDMsMHg3YywweDA4LDB4ZmYsMHgwMSwweDE3IH19LAorIHsxNiwgMHg4MzQwLCAwLCB7MHhjMiwweDRkLDB4YzAsMHgwMywweGY0LDB4MDgsMHhmNywweDAwLDB4M2IsMHhjMCwweDA3LDB4YzAsMHgwMywweDdjLDB4ODAsMHhmZiB9fSwKKyB7MTYsIDB4ODM1MCwgMCwgezB4MjQsMHgzZiwweDQwLDB4MGMsMHhmMCwweDAxLDB4ZjQsMHgwNCwweGJjLDB4MDgsMHgzZiwweDI4LDB4MGYsMHhmMCwweDAzLDB4NzggfX0sCisgezE2LCAweDgzNjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwOCwweGZiLDB4MDQsMHgzYSwweGM4IH19LAorIHsxNiwgMHg4MzcwLCAwLCB7MHgwZiwweDk0LDB4MDMsMHhlYywweDEwLDB4ZjMsMHgwMCwweDM0LDB4YzAsMHgwZSwweGIwLDB4MDMsMHg2MSwweDA0LDB4ZmIsMHgwMCB9fSwKKyB7MTYsIDB4ODM4MCwgMCwgezB4MzYsMHhjMCwweDBlLDB4YTMsMHgwMywweDJjLDB4ODAsMHhmYiwweDcyLDB4M2UsMHgwMiwweDBmLDB4OGEsMHgwMywweGU0LDB4MDIgfX0sCisgezE2LCAweDgzOTAsIDAsIHsweGM5LDB4ODAsMHgyYSwweDUwLDB4MGYsMHhiMCwweDAzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4M2EwLCAwLCB7MHhjYSwweDQ0LDB4M2MsMHgwMCwweGJmLDB4MDAsMHgwMywweGMwLDB4MDgsMHg4MCwweDAzLDB4N2MsMHgwMCwweGJmLDB4MDAsMHgzZiB9fSwKKyB7MTYsIDB4ODNiMCwgMCwgezB4ZTIsMHgwOCwweDkwLDB4NDMsMHg2MCwweDAwLDB4YmYsMHgwMCwweDM3LDB4YzAsMHgwOCwweDkwLDB4MDEsMHg2ZCwweDAwLDB4YmIgfX0sCisgezE2LCAweDgzYzAsIDAsIHsweDQwLDB4MmMsMHgxMCwweDBiLDB4YjAsMHg0MiwweGQ3LDB4YzAsMHg4OSwweDAwLDB4MmEsMHg3YywweDBiLDB4ZjAsMHgwMiwweGYyIH19LAorIHsxNiwgMHg4M2QwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTIsMHgwNSwweDRjLDB4MDAsMHhiMywweDAwLDB4MjAsMHhkNSB9fSwKKyB7MTYsIDB4ODNlMCwgMCwgezB4NGEsMHgwMCwweDAwLDB4MGMsMHgwNCwweDkzLDB4MDAsMHgwYywweGYwLDB4MGIsMHgwOSwweDAyLDB4MDgsMHgwMSwweGIzLDB4MjAgfX0sCisgezE2LCAweDgzZjAsIDAsIHsweDI4LDB4YzAsMHgwYSwweDBjLDB4MGEsMHgwZSwweDAwLDB4YjMsMHgwMCwweDI0LDB4MzAsMHgwOSwweDAwLDB4MDIsMHhjNiwweDEwIH19LAorIHsxNiwgMHg4NDAwLCAwLCB7MHg4MCwweDQyLDB4MjAsMHgwMCwweDhiLDB4YjAsMHgwMiwweGY4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODQxMCwgMCwgezB4MjIsMHgwMSwweDFlLDB4MDAsMHhiNywweDk0LDB4MjEsMHhlNCwweDQ4LDB4ZDksMHgxMiwweDVlLDB4NDAsMHhiNywweDkwLDB4MjkgfX0sCisgezE2LCAweDg0MjAsIDAsIHsweGUwLDB4OGIsMHg2OSwweDEyLDB4ZDYsMHg4MCwweDM3LDB4ODIsMHgyYywweGU4LDB4MDgsMHg0YSwweDAyLDB4NWUsMHgwMCwweGI3IH19LAorIHsxNiwgMHg4NDMwLCAwLCB7MHhhNCwweDJkLDB4MjAsMHgwYiwweDc5LDB4MDIsMHhkNiwweDA4LDB4ODYsMHg5MCwweDI5LDB4YTAsMHgwYiwweDc5LDB4MDIsMHhkOCB9fSwKKyB7MTYsIDB4ODQ0MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHgwYywweDAwLDB4ZmIsMHhhMCwweDI4LDB4ZTggfX0sCisgezE2LCAweDg0NTAsIDAsIHsweDBlLDB4MmEsMHgwMiwweDhjLDB4MDAsMHhkMywweDAwLDB4NjQsMHhjMCwweDBmLDB4MDAsMHg0MywweDBlLDB4YzQsMHhmMywweDAwIH19LAorIHsxNiwgMHg4NDYwLCAwLCB7MHg3OCwweGVjLDB4MGUsMHgwYSwweDQzLDB4MGUsMHgyMCwweDczLDB4ZTAsMHgzYywweDAyLDB4NGYsMHgwMCwweDAzLDB4YzQsMHg0MCB9fSwKKyB7MTYsIDB4ODQ3MCwgMCwgezB4YzMsMHgwMCwweDM4LDB4YzAsMHgwZiwweDMwLDB4MDMsMHhkMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg0ODAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZmYsMHgwMCwweGJjLDB4Y2MsMHgwZSwweGIwLDB4MDMsMHhlYywweDIwLDB4ZmIsMHgwMCwweDNjIH19LAorIHsxNiwgMHg4NDkwLCAwLCB7MHhjMiwweDBjLDB4MjAsMHgwMywweDZjLDB4NTAsMHhmMywweDAwLDB4MzYsMHhjNCwweDBmLDB4NDAsMHgwMywweGZjLDB4MDgsMHhmZiB9fSwKKyB7MTYsIDB4ODRhMCwgMCwgezB4MWEsMHgzZiwweDgwLDB4MGYsMHhmMCwweDAxLDB4ZTQsMHgzMCwweGZmLDB4MDIsMHgzZiwweGMwLDB4MGYsMHhmMCwweDYzLDB4ZDAgfX0sCisgezE2LCAweDg0YjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4ZWMsMHg0MCwweGZiLDB4MDAsMHhiMiwweGQ4IH19LAorIHsxNiwgMHg4NGMwLCAwLCB7MHgwYywweGIwLDB4MDEsMHgyZCwweDIwLDB4ZGIsMHgwMSwweDNhLDB4YzgsMHg4YywweDM4LDB4MDMsMHhhOCwweDAwLDB4ZmIsMHg0OCB9fSwKKyB7MTYsIDB4ODRkMCwgMCwgezB4M2UsMHhjOSwweDBmLDB4ODAsMHgwMywweGVjLDB4NDAsMHhmYiwweDAxLDB4M2UsMHgwMCwweDBmLDB4MDgsMHgwMywweGE0LDB4MDggfX0sCisgezE2LCAweDg0ZTAsIDAsIHsweGZhLDB4ODAsMHhiMiwweDgwLDB4MGYsMHhiMSwweDAyLDB4NmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NGYwLCAwLCB7MHg0OCwweDE5LDB4MWMsMHg4MCwweGJmLDB4MzAsMHgyMSwweGNhLDB4MDgsMHhmMCwweDBhLDB4MGMsMHg4MCwweDhmLDB4NTAsMHgyMSB9fSwKKyB7MTYsIDB4ODUwMCwgMCwgezB4YzIsMHgwOCwweDcwLDB4NTAsMHg5YywweDAwLDB4YjcsMHgwMCwweDM5LDB4YzQsMHgwYiwweDQwLDB4MDIsMHg5YywweDA0LDB4YjcgfX0sCisgezE2LCAweDg1MTAsIDAsIHsweDIwLDB4MjUsMHg0MCwweDBiLDB4NzAsMHgwMiwweDE0LDB4ODAsMHhiNiwweDAwLDB4MjEsMHg4MCwweDBiLDB4ZjgsMHgwMiwweDEyIH19LAorIHsxNiwgMHg4NTIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4MDAsMHhiNywweGIwLDB4MjEsMHhlYyB9fSwKKyB7MTYsIDB4ODUzMCwgMCwgezB4MGIsMHg3OCwweDEyLDB4ZGUsMHg4NCwweDk3LDB4ODAsMHgwZCwweGUwLDB4MjgsMHhmOCwweDAyLDB4ZGUsMHgwMCwweGI3LDB4OTAgfX0sCisgezE2LCAweDg1NDAsIDAsIHsweDJkLDB4ZTQsMHgwYiwweDY4LDB4ODIsMHg1ZSwweDgwLDB4YjcsMHhhMCwweDI5LDB4MjAsMHgwYiwweDQ4LDB4MDIsMHg5NiwweDAwIH19LAorIHsxNiwgMHg4NTUwLCAwLCB7MHhiNywweDgwLDB4MjEsMHhlMSwweDBiLDB4N2EsMHgwMiwweDcwLDB4NDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODU2MCwgMCwgezB4NDgsMHgwNCwweGNjLDB4MDAsMHhiMywweDAwLDB4MjAsMHhjMCwweDBiLDB4MzgsMHgwMiwweDhjLDB4MDQsMHg4MywweDAwLDB4MjggfX0sCisgezE2LCAweDg1NzAsIDAsIHsweGMwLDB4ODgsMHgzOSwweDAyLDB4NGMsMHg0MCwweGIzLDB4MDQsMHgyOCwweGMwLDB4MWIsMHgxMCwweDAyLDB4OGMsMHgwMSwweGIzIH19LAorIHsxNiwgMHg4NTgwLCAwLCB7MHgwNCwweDI0LDB4ODgsMHg0YiwweDMxLDB4MDIsMHgwNCwweDAwLDB4YjMsMHg4MCwweDIwLDB4ZjIsMHgwYiwweDMwLDB4MDIsMHgwMiB9fSwKKyB7MTYsIDB4ODU5MCwgMCwgezB4MjQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MDUsMHhhOCwweDAwLDB4ZmEsMHgwMCwweDMyLDB4ODAgfX0sCisgezE2LCAweDg1YTAsIDAsIHsweDBmLDB4ZTgsMHgwMywweGU4LDB4MDAsMHhkYSwweDAxLDB4M2EsMHg4MCwweDhjLDB4ZWQsMHgwMywweGZiLDB4MDQsMHhmYSwweDAwIH19LAorIHsxNiwgMHg4NWIwLCAwLCB7MHgzZSwweDgwLDB4MGYsMHg2YywweDAzLDB4ZmIsMHhjOCwweGJlLDB4YzIsMHgxZiwweDgwLDB4MGYsMHhlNSwweDAzLDB4YTgsMHgwMCB9fSwKKyB7MTYsIDB4ODVjMCwgMCwgezB4ZmUsMHg0OCwweDMzLDB4ODAsMHg0ZiwweGEwLDB4MDMsMHg3YSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg1ZDAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNjLDB4MDAsMHgwYywweDgxLDB4OTMsMHg2MCwweDAwLDB4ZjgsMHgwMSwweDM2IH19LAorIHsxNiwgMHg4NWUwLCAwLCB7MHgxMCwweDBmLDB4ODAsMHgwMywweGEwLDB4MjAsMHhmOCwweDAwLDB4MmEsMHgwMSwweDhmLDB4ODQsMHgxMywweGUxLDB4MDAsMHhmOCB9fSwKKyB7MTYsIDB4ODVmMCwgMCwgezB4MTgsMHgzNiwweDAwLDB4MGYsMHg4MCwweDEzLDB4ZTAsMHgwMCwweGY4LDB4MjAsMHgzZSwweDE0LDB4MGYsMHg4MCwweDAzLDB4ZDIgfX0sCisgezE2LCAweDg2MDAsIDAsIHsweDgwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTQsMHgwMCwweGYxLDB4MDAsMHhhYSwweDQwIH19LAorIHsxNiwgMHg4NjEwLCAwLCB7MHgwYywweDkwLDB4MDMsMHgyNCwweDAwLDB4ZTEsMHgwMCwweDM4LDB4NDAsMHgxYywweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHhhMCB9fSwKKyB7MTYsIDB4ODYyMCwgMCwgezB4M2EsMHg0MCwweDQ3LDB4OWEsMHg5MywweGEyLDB4ODAsMHhmOCwweDEwLDB4M2UsMHg0MCwweDBiLDB4OTQsMHgwMywweGU2LDB4NDAgfX0sCisgezE2LCAweDg2MzAsIDAsIHsweGY5LDB4YzAsMHgzZSwweDY4LDB4MGIsMHgxMCwweDAzLDB4MDIsMHg4NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NjQwLCAwLCB7MHg4MCwweDA0LDB4ZTQsMHgwNCwweGI5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwNCwweDg5LDB4MDAsMHgzNiB9fSwKKyB7MTYsIDB4ODY1MCwgMCwgezB4NDAsMHgwOCwweDkwLDB4MDIsMHhlNCwweDA0LDB4YjksMHg4MCwweDJlLDB4NDAsMHg0ZiwweDk0LDB4MDMsMHg2MSwweDEwLDB4ZTggfX0sCisgezE2LCAweDg2NjAsIDAsIHsweDQwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHg0MiwweGU2LDB4MDQsMHhiOSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweDIwIH19LAorIHsxNiwgMHg4NjcwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNCwweDI0LDB4MDAsMHhiOSwweDAwLDB4MjIsMHg0MCB9fSwKKyB7MTYsIDB4ODY4MCwgMCwgezB4MGEsMHgxMCwweDUyLDB4MDQsMHgwNCwweGE5LDB4MDQsMHgyYSwweDQwLDB4MDgsMHhiMCwweDAyLDB4ZTQsMHgwMSwweGI5LDB4MDAgfX0sCisgezE2LCAweDg2OTAsIDAsIHsweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhhOCwweDBkLDB4YjgsMHg0MCwweDJlLDB4NDAsMHgwOSwweDk0LDB4MDIsMHhlNSwweDAwIH19LAorIHsxNiwgMHg4NmEwLCAwLCB7MHhiOSwweDA0LDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODZiMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHhiMSwweDIwLDB4MjAsMHhjOCwweDBhLDB4MTAsMHg0MiwweDA0LDB4OTAsMHg4MSwweDIwLDB4MDQgfX0sCisgezE2LCAweDg2YzAsIDAsIHsweGM4LDB4MDgsMHgzMCwweDI2LDB4YzQsMHgwMCwweGIxLDB4MjAsMHgyYywweDQ4LDB4MGIsMHg5MCwweDAyLDB4NDUsMHgwMSwweGIxIH19LAorIHsxNiwgMHg4NmQwLCAwLCB7MHg0MCwweDJjLDB4NDAsMHgwYiwweDEyLDB4ODIsMHhjNCwweDAwLDB4YjEsMHgyYiwweDJjLDB4NGEsMHgwYiwweDEyLDB4ODIsMHgwMiB9fSwKKyB7MTYsIDB4ODZlMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MDgsMHgyMSwweDQ4LDB4ZjgsMHg1MCwweDMyLDB4MDAgfX0sCisgezE2LCAweDg2ZjAsIDAsIHsweDRlLDB4ODUsMHgwYiwweDIxLDB4NDAsMHhhOCwweDUyLDB4MmEsMHgwMCwweDA4LDB4ODAsMHgyMywweGUxLDB4NDAsMHhmOCwweDAwIH19LAorIHsxNiwgMHg4NzAwLCAwLCB7MHgzYSwweDE0LDB4MGYsMHhhMCwweDQzLDB4YTgsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MiwweDAzLDB4ZTAsMHgwMCB9fSwKKyB7MTYsIDB4ODcxMCwgMCwgezB4ZjAsMHgyMCwweDNlLDB4ODgsMHg0ZiwweDgyLDB4MGIsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg3MjAsIDAsIHsweDk4LDB4MTksMHhlNCwweDQwLDB4ZjksMHgxMSwweDM0LDB4NDQsMHgyZCwweGQwLDB4MDMsMHhlNCwweDUwLDB4NzksMHgxMCwweDM4IH19LAorIHsxNiwgMHg4NzMwLCAwLCB7MHg0NCwweDJmLDB4ZDAsMHgwMywweGY1LDB4MTAsMHhmOSwweDEwLDB4M2UsMHg0NSwweDA2LDB4NTAsMHgwMywweGU1LDB4MDAsMHhlOSB9fSwKKyB7MTYsIDB4ODc0MCwgMCwgezB4NDAsMHgzZiwweDQwLDB4MGYsMHhkMCwweDQzLDB4ZjUsMHgwMCwweGZkLDB4MjgsMHgzZiwweDQwLDB4MGYsMHg5MiwweDgzLDB4ZTYgfX0sCisgezE2LCAweDg3NTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAxLDB4ZTYsMHgwMCwweGQ5LDB4OTAsMHgzNywweDY5IH19LAorIHsxNiwgMHg4NzYwLCAwLCB7MHg0ZCwweDkwLDB4MjMsMHg2NywweDgwLDB4ZDksMHhlMCwweDM3LDB4NjgsMHgwZSwweGQwLDB4MDcsMHhhNCwweDAwLDB4MDUsMHg4NiB9fSwKKyB7MTYsIDB4ODc3MCwgMCwgezB4M2UsMHg2NiwweDBkLDB4NTAsMHgyMywweDI2LDB4MDAsMHhjOSwweDgyLDB4M2QsMHg0MCwweDBkLDB4ZDgsMHgwNywweDM2LDB4MDIgfX0sCisgezE2LCAweDg3ODAsIDAsIHsweGNkLDB4YzAsMHgzMywweDYwLDB4MGMsMHg5YywweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NzkwLCAwLCB7MHgzOCwweDEwLDB4ZTIsMHg4MCwweDg4LDB4YTIsMHgyMiwweDEwLDB4MjgsMHg4YSwweDgyLDB4MjMsMHg4NCwweDg4LDB4YTAsMHgyMiB9fSwKKyB7MTYsIDB4ODdhMCwgMCwgezB4MTQsMHg0OCwweDgwLDB4NDIsMHg4MiwweDAwLDB4ODgsMHg0MCwweDJlLDB4MzAsMHgwOCwweDgwLDB4MDIsMHhhMiwweDAwLDB4ZDggfX0sCisgezE2LCAweDg3YjAsIDAsIHsweDkwLDB4MjYsMHgwMCwweDA4LDB4ODQsMHgwYSwweDIxLDB4MDAsMHhjOCwweGEwLDB4YTIsMHgxNCwweDI4LDB4OGMsMHgwMiwweDBlIH19LAorIHsxNiwgMHg4N2MwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM1LDB4MjAsMHg5MSwweDQwLDB4MmMsMHg0NCB9fSwKKyB7MTYsIDB4ODdkMCwgMCwgezB4MTgsMHgxMCwweDAyLDB4ODUsMHgwNCwweGIxLDB4NDAsMHgwYywweDQwLDB4MGEsMHgxMCwweDA2LDB4ODQsMHgzMCwweDgxLDB4NDAgfX0sCisgezE2LCAweDg3ZTAsIDAsIHsweDJjLDB4NDgsMHg1OSwweDEwLDB4MWEsMHgwNCwweDYwLDB4ODEsMHgwOSwweDJlLDB4NDAsMHgxYiwweDE0LDB4MDIsMHgyNSwweDAwIH19LAorIHsxNiwgMHg4N2YwLCAwLCB7MHg5MSwweGUwLDB4MjAsMHg2MCwweDA4LDB4MTYsMHgwMiwweDAwLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODgwMCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHg4MSwweDAwLDB4MmEsMHg0MSwweDA4LDB4OTAsMHgwMiwweGE0LDB4MDAsMHhhMSwweDAwLDB4MmEgfX0sCisgezE2LCAweDg4MTAsIDAsIHsweDQxLDB4MDgsMHhiMCwweDgyLDB4MjQsMHgxMSwweDhiLDB4MDAsMHgyZSwweDQwLDB4MTgsMHg5MSwweDAyLDB4YTAsMHgwNCwweDk4IH19LAorIHsxNiwgMHg4ODIwLCAwLCB7MHgyMCwweDJlLDB4NTQsMHgxYiwweDkwLDB4ODIsMHgyYywweDAwLDB4ODksMHgxMCwweDIyLDB4NDQsMHg4OCwweDkwLDB4MDIsMHgwNiB9fSwKKyB7MTYsIDB4ODgzMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZDksMHgwMCwweDNlLDB4NDAgfX0sCisgezE2LCAweDg4NDAsIDAsIHsweDRjLDB4OTAsMHgwMywweGE0LDB4MTAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDhlLDB4MTAsMHgwMiwweGE0LDB4YzIsMHhjOSwweDAwIH19LAorIHsxNiwgMHg4ODUwLCAwLCB7MHgzZSwweDQwLDB4MGQsMHgxNiwweDEzLDB4MDEsMHg4NCwweGM4LDB4MjAsMHgzYywweDYwLDB4MGYsMHg5MCwweDEyLDB4MDQsMHgwMCB9fSwKKyB7MTYsIDB4ODg2MCwgMCwgezB4ZDksMHg0MCwweDMyLDB4NTAsMHgwYywweDkwLDB4MDMsMHgyOCwweDg0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg4NzAsIDAsIHsweDI4LDB4MDEsMHg4NCwweDAwLDB4ZjksMHgwMCwweDM2LDB4NDAsMHg0ZiwweDk5LDB4NGEsMHg0NCwweDAwLDB4OTksMHgwMCwweGI0IH19LAorIHsxNiwgMHg4ODgwLCAwLCB7MHg0MCwweDBmLDB4OTAsMHgxMywweGU2LDB4MDAsMHhmOSwweDAwLDB4M2MsMHg0MCwweDBmLDB4OTAsMHgwMywweGUzLDB4MDAsMHhmOCB9fSwKKyB7MTYsIDB4ODg5MCwgMCwgezB4MDEsMHgzNiwweDQwLDB4MGMsMHg5OSwweDAzLDB4ZTQsMHgwMiwweGY5LDB4ODAsMHgzZSwweDYwLDB4NGYsMHg5MCwweDBiLDB4Y2EgfX0sCisgezE2LCAweDg4YTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGQ4LDB4MDAsMHgzYywweDAwIH19LAorIHsxNiwgMHg4OGIwLCAwLCB7MHgxZCwweDgwLDB4MDMsMHgyMCwweDAwLDB4ZTgsMHgwMCwweDMyLDB4MDAsMHgwYywweDg0LDB4ODMsMHhlMCwweDEwLDB4ZTgsMHgyMCB9fSwKKyB7MTYsIDB4ODhjMCwgMCwgezB4MzIsMHgwMCwweDhlLDB4ODQsMHgwMywweDIxLDB4ODAsMHhjOCwweDAwLDB4M2EsMHgxOSwweDBmLDB4MDQsMHgwMywweGUwLDB4MjQgfX0sCisgezE2LCAweDg4ZDAsIDAsIHsweGYwLDB4MDIsMHgzYywweDAwLDB4MGYsMHg4MCwweDEzLDB4OGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4OGUwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMiwweDhhLDB4MDEsMHgwZiwweGEyLDB4NjgsMHhhMCwweDAwLDB4MjgsMHgwMCwweDhhLDB4MDAsMHg3NyB9fSwKKyB7MTYsIDB4ODhmMCwgMCwgezB4ODAsMHg2OCwweGUwLDB4MTIsMHhlOCwweDAwLDB4ZGUsMHgwMCwweDM2LDB4ODEsMHgwOCwweGUwLDB4MDMsMHg3YSwweDA4LDB4YWUgfX0sCisgezE2LCAweDg5MDAsIDAsIHsweGM0LDB4MmYsMHg4MCwweDA4LDB4ZWQsMHgwMiwweGZhLDB4MDAsMHhiZSwweGEwLDB4M2IsMHg4MCwweDBiLDB4YTAsMHg0MiwweDBhIH19LAorIHsxNiwgMHg4OTEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHg4NSwweDRjLDB4MDAsMHg5MywweDAwLDB4MmMsMHhjMCB9fSwKKyB7MTYsIDB4ODkyMCwgMCwgezB4ODgsMHhiMCwweDAyLDB4MGMsMHgxNCwweGEzLDB4MDQsMHgyMCwweGM0LDB4MTgsMHgzOCwweDAyLDB4ZWMsMHgxMCwweDkzLDB4NTQgfX0sCisgezE2LCAweDg5MzAsIDAsIHsweDI4LDB4YzAsMHgwYSwweDAwLDB4MDIsMHg0ZSwweDAwLDB4ODMsMHg0OSwweDY4LDB4YzAsMHgwMiwweDM5LDB4NDIsMHhjZSwweDQwIH19LAorIHsxNiwgMHg4OTQwLCAwLCB7MHhiMywweDAwLDB4MmMsMHhlNiwweDBiLDB4YjAsMHgwMiwweDhiLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODk1MCwgMCwgezB4MjAsMHgwMSwweDFjLDB4MDgsMHg4NywweDIwLDB4MmMsMHg4MCwweDE4LDB4ZjIsMHgyMiwweDFjLDB4MDAsMHg4NywweDEwLDB4MjEgfX0sCisgezE2LCAweDg5NjAsIDAsIHsweGMwLDB4MDgsMHg3MCwweDgyLDB4ZGMsMHg4MCwweDk2LDB4ODAsMHgyZCwweGMwLDB4MGEsMHg0MCwweDAyLDB4N2QsMHg0MCwweDI3IH19LAorIHsxNiwgMHg4OTcwLCAwLCB7MHg2NCwweDZkLDB4ZDAsMHg0OCwweDYwLDB4NDIsMHhkOCwweDA1LDB4YjYsMHgwNCwweDI5LDB4YzAsMHg0YiwweDcyLDB4MDIsMHgyOCB9fSwKKyB7MTYsIDB4ODk4MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDgsMHgzZSwweDg4LDB4ZDcsMHhlMCwweDNkLDB4ZTAgfX0sCisgezE2LCAweDg5OTAsIDAsIHsweDA4LDB4N2MsMHg0MiwweDNlLDB4MDAsMHhlMywweDgyLDB4MjAsMHhlMCwweDBjLDB4NjgsMHgwMywweGRmLDB4MDQsMHhkNywweDgwIH19LAorIHsxNiwgMHg4OWEwLCAwLCB7MHgzYiwweGUwLDB4NGUsMHg0OCwweDBhLDB4NWUsMHg4MCwweGM3LDB4YzIsMHgxOSwweGUwLDB4MGUsMHg3OCwweDAzLDB4ZDYsMHgwOCB9fSwKKyB7MTYsIDB4ODliMCwgMCwgezB4ZjcsMHg4MCwweDNkLDB4ZTAsMHgwZiwweGY4LDB4MDMsMHhhYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg5YzAsIDAsIHsweDA4LDB4MWQsMHhhYywweDQwLDB4ZmIsMHg0MCwweDdlLDB4ODAsMHgwZSwweDM2LDB4ODMsMHhlZCwweDQwLDB4ZGIsMHg2MCwweDNlIH19LAorIHsxNiwgMHg4OWQwLCAwLCB7MHg4MCwweDBmLDB4YTAsMHgwMywweGVkLDB4MjgsMHhkYSwweDAwLDB4MzIsMHhjNCwweDBjLDB4YjAsMHgwYiwweGNjLDB4MDAsMHhmYiB9fSwKKyB7MTYsIDB4ODllMCwgMCwgezB4MDAsMHgzZSwweGMwLDB4MGUsMHg4MCwweDEzLDB4ZTAsMHgxMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHhiMSwweDUzLDB4YzIgfX0sCisgezE2LCAweDg5ZjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4ZmUsMHgwMCwweGZmLDB4YzAsMHgzMywweGUwIH19LAorIHsxNiwgMHg4YTAwLCAwLCB7MHgwYywweGY5LDB4MDMsMHg3ZiwweDA0LDB4Y2YsMHhkMCwweDNmLDB4ZTQsMHgwZiwweGI4LDB4MDMsMHhmZSwweDAwLDB4ZmYsMHg5NCB9fSwKKyB7MTYsIDB4OGExMCwgMCwgezB4M2YsMHhlMCwweDBmLDB4YzgsMHgwMywweDdlLDB4MTAsMHhmMywweDgwLDB4M2IsMHhlMCwweDBmLDB4ZjgsMHgwMywweGZlLDB4NDggfX0sCisgezE2LCAweDhhMjAsIDAsIHsweGVkLDB4ODAsMHgzMywweDI0LDB4MDQsMHhmOCwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4YTMwLCAwLCB7MHhhOCwweDExLDB4OWMsMHg4MCwweGJmLDB4MDQsMHgyMSwweDI4LDB4MDgsMHhmOCwweDAyLDB4MWUsMHhjMCwweGNmLDB4OTAsMHgyMSB9fSwKKyB7MTYsIDB4OGE0MCwgMCwgezB4NGMsMHgwYiwweDVhLDB4NDIsMHhkZSwweDAwLDB4YjcsMHg4MCwweDJjLDB4ZTgsMHgwYiwweDA0LDB4MDIsMHgxYywweDAwLDB4YjcgfX0sCisgezE2LCAweDhhNTAsIDAsIHsweGEwLDB4MzUsMHgxMCwweDhmLDB4NzEsMHgxMywweGRlLDB4YzAsMHg4NCwweDEwLDB4MjEsMHg4MCwweDBkLDB4NzEsMHgwMiwweDJhIH19LAorIHsxNiwgMHg4YTYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHg0MCwweDljLDB4MDgsMHhiNywweDAwLDB4MjUsMHhjOCB9fSwKKyB7MTYsIDB4OGE3MCwgMCwgezB4MDgsMHg3MSwweDAyLDB4Y2MsMHg4MCwweDk3LDB4MDAsMHgyOSwweGMwLDB4OGIsMHg3MiwweDA2LDB4ZGMsMHgwOCwweGI1LDB4MDAgfX0sCisgezE2LCAweDhhODAsIDAsIHsweDJkLDB4YzgsMHgwYiwweDQwLDB4MDIsMHgxYywweDQwLDB4YmYsMHgxMCwweDIxLDB4YzAsMHgwYiwweDc0LDB4MDIsMHhkNCwweDgwIH19LAorIHsxNiwgMHg4YTkwLCAwLCB7MHhhNywweDQwLDB4MjEsMHg0MSwweDA4LDB4NzAsMHgwMiwweDA0LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGFhMCwgMCwgezB4NjAsMHgxNCwweGNjLDB4MDAsMHhiMywweDAwLDB4MjQsMHgwMCwweDA4LDB4MzQsMHg4MiwweGFjLDB4MTEsMHg4MywweDAwLDB4MjAgfX0sCisgezE2LCAweDhhYjAsIDAsIHsweDAwLDB4NGIsMHgxOCwweDI2LDB4Y2YsMHgyMCwweGIxLDB4MDYsMHgyYywweGMxLDB4MGIsMHgzMiwweDAyLDB4MGUsMHgwOCwweGIzIH19LAorIHsxNiwgMHg4YWMwLCAwLCB7MHg4OCwweDI0LDB4MzIsMHgwYSwweDMwLDB4MTIsMHg4NCwweDA4LDB4ODAsMHgwMCwweGEwLDB4MzQsMHgyOCwweDMwLDB4MDIsMHgxOCB9fSwKKyB7MTYsIDB4OGFkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHhiYywweDAwLDB4ZmYsMHgwMCwweGI2LDB4NDAgfX0sCisgezE2LCAweDhhZTAsIDAsIHsweDJjLDB4ZjQsMHg0MywweGZjLDB4MDEsMHhkZiwweDAwLDB4M2EsMHgwMCwweDAzLDB4OTIsMHgwMywweGZmLDB4ODgsMHhmOSwweDAwIH19LAorIHsxNiwgMHg4YWYwLCAwLCB7MHgyZiwweGMwLDB4MWIsMHgwZSwweDRiLDB4MmUsMHg5MCwweGZiLDB4ZTAsMHgzMCwweDMyLDB4MGIsMHg5OCwweDAyLDB4ZWMsMHgwOCB9fSwKKyB7MTYsIDB4OGIwMCwgMCwgezB4NmIsMHhjMCwweDMyLDB4YzAsMHgwOCwweGYwLDB4MDksMHgzZSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhiMTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZjMsMHgwMCwweDNhLDB4YzAsMHgwZiwweGIwLDB4MDEsMHg2YywweDAwLDB4ZmIsMHgwMCwweDNhIH19LAorIHsxNiwgMHg4YjIwLCAwLCB7MHgxMCwweDBmLDB4YjQsMHgwMywweGVjLDB4MDAsMHhmMCwweDAwLDB4M2MsMHhjMCwweDBmLDB4ODAsMHgwYiwweGFkLDB4MjAsMHhmYiB9fSwKKyB7MTYsIDB4OGIzMCwgMCwgezB4NDAsMHgzZSwweDEwLDB4MDcsMHhhOCwweDYzLDB4ZTAsMHgwMCwweGZiLDB4ODAsMHgzZSwweGQ4LDB4MGYsMHhiMCwweDAzLDB4ZTAgfX0sCisgezE2LCAweDhiNDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHg3MiwweDAwIH19LAorIHsxNiwgMHg4YjUwLCAwLCB7MHgwZiwweGYwLDB4MjMsMHhmYywweDAwLDB4ZGYsMHgwMCwweDNmLDB4NDAsMHgwZiwweGMwLDB4MDMsMHhkYywweDAwLDB4OGYsMHgwMCB9fSwKKyB7MTYsIDB4OGI2MCwgMCwgezB4MzMsMHhjMSwweDBjLDB4YzAsMHgwMywweGJlLDB4MDAsMHhmZiwweDkwLDB4M2IsMHgyOCwweDBlLDB4NTksMHgwMywweDJlLDB4MDAgfX0sCisgezE2LCAweDhiNzAsIDAsIHsweDdiLDB4MDAsMHgzMiwweGM0LDB4MGYsMHhiMCwweDAzLDB4ZDAsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4YjgwLCAwLCB7MHhjMSwweDA0LDB4NmMsMHgwMCwweGJiLDB4MDAsMHg2MiwweGEwLDB4MGYsMHhiMCwweDAyLDB4ZWMsMHgwOSwweDhiLDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4OGI5MCwgMCwgezB4MzAsMHgwYiwweGE4LDB4MDMsMHhhYywweDAwLDB4ZmEsMHhjMSwweDIyLDB4YzEsMHgwOCwweDhjLDB4MDIsMHgyYywweDAwLDB4YjMgfX0sCisgezE2LCAweDhiYTAsIDAsIHsweDgxLDB4MmEsMHgwMCwweDBkLDB4ODgsMHhiMiwweDIyLDB4MDAsMHhiMywweGMwLDB4MjIsMHhjOCwweDBiLDB4YjAsMHg0MiwweDYxIH19LAorIHsxNiwgMHg4YmIwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDZjLDB4MDAsMHhiYiwweDAxLDB4MjIsMHg2MiB9fSwKKyB7MTYsIDB4OGJjMCwgMCwgezB4MGIsMHhiMCwweDAyLDB4ZWMsMHgwNCwweDhiLDB4MDAsMHgyZSwweGEyLDB4NDksMHg4OCwweDI2LDB4ZWMsMHgwMCwweGE4LDB4ODAgfX0sCisgezE2LCAweDhiZDAsIDAsIHsweDIyLDB4YzAsMHgyOCwweDgyLDB4MGEsMHhhYywweGEwLDB4YmIsMHgwOCwweDIyLDB4YzAsMHgwOCwweDgwLDB4MGEsMHgyOCwweDg0IH19LAorIHsxNiwgMHg4YmUwLCAwLCB7MHhiOSwweGMwLDB4YTIsMHgwMCwweDBiLDB4YjAsMHgwMiwweGUwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGJmMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDAsMHhiMywweDEwLDB4MjAsMHg0OCwweDBhLDB4MzIsMHgwMiwweGNjLDB4ODAsMHg4MywweDAxLDB4MjQgfX0sCisgezE2LCAweDhjMDAsIDAsIHsweDAwLDB4MGIsMHgwMiwweDA2LDB4OGMsMHg2MCwweGEwLDB4MjAsMHgyMCwweGM4LDB4MDgsMHgwMSwweDAyLDB4MGMsMHgwMCwweGIzIH19LAorIHsxNiwgMHg4YzEwLCAwLCB7MHgwMCwweDI4LDB4MDAsMHgwOSwweDIwLDB4MDIsMHgwOCwweDgwLDB4YjEsMHgwMCwweGEwLDB4ODAsMHgwYiwweDMwLDB4MDIsMHg0MiB9fSwKKyB7MTYsIDB4OGMyMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDksMHg2YywweDAwLDB4ZmYsMHgwMCwweGEyLDB4MGUgfX0sCisgezE2LCAweDhjMzAsIDAsIHsweDBiLDB4ZjEsMHgwMywweGZjLDB4MDgsMHhjZiwweDIwLDB4M2UsMHhjMCwweDBmLDB4ODAsMHgwMywweGZjLDB4ODQsMHhhOCwweDIwIH19LAorIHsxNiwgMHg4YzQwLCAwLCB7MHhiMiwweGM4LDB4OGMsMHg4MCwweDAzLDB4YWMsMHg0NCwweGZiLDB4NzAsMHgzYSwweGMwLDB4MGUsMHg5MCwweDAzLDB4MmMsMHhhNCB9fSwKKyB7MTYsIDB4OGM1MCwgMCwgezB4ZmIsMHgwMCwweGIyLDB4NDAsMHgwZiwweGIwLDB4MDMsMHhjMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhjNjAsIDAsIHsweGEwLDB4MWQsMHhmYywweDAwLDB4ZmYsMHgyNiwweDNlLDB4MDAsMHgwZiwweGI2LDB4MTMsMHhlZCwweDAwLDB4ZmIsMHgxMCwweDNmIH19LAorIHsxNiwgMHg4YzcwLCAwLCB7MHgwMCwweDBmLDB4YzEsMHgxMywweGFjLDB4ODAsMHhmOCwweDEyLDB4M2UsMHhjNiwweDRmLDB4NDIsMHg0MywweGZjLDB4MDQsMHhmZiB9fSwKKyB7MTYsIDB4OGM4MCwgMCwgezB4MzEsMHgzZiwweDAwLDB4MGYsMHhmMCwweDAzLDB4ZWMsMHgwMCwweGZmLDB4MDAsMHhiZiwweGMwLDB4OGYsMHhmMCwweDAzLDB4ZTggfX0sCisgezE2LCAweDhjOTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAxLDB4ZmMsMHg0MCwweGZjLDB4ODAsMHgzNiwweGM4IH19LAorIHsxNiwgMHg4Y2EwLCAwLCB7MHgwZiwweDA5LDB4MDMsMHhjMiwweDAwLDB4ZjgsMHhjMCwweDMzLDB4Y2MsMHgyYywweDRjLDB4MDMsMHg2MywweDkwLDB4ZTAsMHg5MCB9fSwKKyB7MTYsIDB4OGNiMCwgMCwgezB4M2EsMHhjMCwweDBkLDB4NTAsMHgwYiwweDNjLDB4MDQsMHhkZiwweDY0LDB4M2YsMHhjOCwweDhkLDB4ZjEsMHg0MywweDJjLDB4MDAgfX0sCisgezE2LCAweDhjYzAsIDAsIHsweGQ1LDB4MDAsMHgzMywweGMwLDB4NDUsMHhmMiwweDIzLDB4NzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4Y2QwLCAwLCB7MHg4MCwweDEwLDB4ZWQsMHg4MCwweGJhLDB4MDIsMHgyMSwweGRlLDB4OGIsMHg4MiwweDIyLDB4ZTAsMHgyMCwweGIwLDB4MDAsMHgyYiB9fSwKKyB7MTYsIDB4OGNlMCwgMCwgezB4ZWMsMHgwOSwweDgwLDB4MDIsMHhlMywweDQwLDB4YmEsMHgyMCwweDJmLDB4ZGMsMHgwOCwweDk4LDB4MTIsMHgyYywweDAwLDB4OGIgfX0sCisgezE2LCAweDhjZjAsIDAsIHsweDUxLDB4MmEsMHhkMCwweDA4LDB4NzIsMHgyMiwweDJlLDB4MDAsMHg4ZCwweDgwLDB4MjEsMHhkMCwweDA4LDB4YjYsMHg4MiwweDIwIH19LAorIHsxNiwgMHg4ZDAwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4NDAsMHhiOSwweDI4LDB4MjQsMHhjMCB9fSwKKyB7MTYsIDB4OGQxMCwgMCwgezB4NGEsMHgxMiwweDEyLDB4ODgsMHg4NSwweGE4LDB4MjAsMHgyMCwweGMwLDB4MGIsMHgyMiwweDAyLDB4YzAsMHg5MSwweGExLDB4MDAgfX0sCisgezE2LCAweDhkMjAsIDAsIHsweDI4LDB4YzIsMHgwYiwweDAwLDB4MTIsMHg4YywweDQwLDB4YTMsMHgyMCwweDIwLDB4YzQsMHgwYiwweDMwLDB4MGEsMHgwYywweDExIH19LAorIHsxNiwgMHg4ZDMwLCAwLCB7MHg5OSwweDAwLDB4MjAsMHhjNSwweDA5LDB4MDEsMHgwMiwweDYyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGQ0MCwgMCwgezB4YzAsMHgxMSwweGFjLDB4MDAsMHhiOCwweDgwLDB4MjIsMHhjMCwweDBiLDB4ODgsMHgwMiwweGVlLDB4MDEsMHhiOCwweGMxLDB4MmEgfX0sCisgezE2LCAweDhkNTAsIDAsIHsweGMwLDB4MWIsMHhhOCwweDA2LDB4ZTIsMHgwMCwweGJiLDB4ODAsMHgyZSwweGMwLDB4OGEsMHg4MCwweDAyLDB4YWMsMHgwMCwweGFiIH19LAorIHsxNiwgMHg4ZDYwLCAwLCB7MHgwMCwweDJlLDB4YzAsMHgwYSwweGIwLDB4MDIsMHgyYywweDAwLDB4OTksMHgwMCwweDI0LDB4YzAsMHgwOCwweDgwLDB4MDIsMHgzMCB9fSwKKyB7MTYsIDB4OGQ3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4YjAsMHg4MCwweDM2LDB4YzAgfX0sCisgezE2LCAweDhkODAsIDAsIHsweDBlLDB4YTgsMHgxMywweGUyLDB4ODUsMHhmMywweGMwLDB4MzIsMHhjMCwweDBlLDB4OWMsMHgyMywweGU3LDB4MjQsMHhlOCwweDgyIH19LAorIHsxNiwgMHg4ZDkwLCAwLCB7MHgzYSwweGMxLDB4MGYsMHg5NCwweDAzLDB4YWMsMHgwMiwweGViLDB4MDAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4MmUsMHgxMCB9fSwKKyB7MTYsIDB4OGRhMCwgMCwgezB4NTEsMHgwMCwweGIyLDB4YzAsMHgwZCwweGIwLDB4MDMsMHg1MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhkYjAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHg4ZiwweGQwLDB4MDMsMHhmMCwweDA0LDB4ZmQsMHgwNCwweDNmIH19LAorIHsxNiwgMHg4ZGMwLCAwLCB7MHhjMCwweDRjLDB4YzAsMHgwMywweGYwLDB4MTAsMHhmYywweDAwLDB4MWYsMHhjMCwweDBkLDB4ZDEsMHgyMywweDFjLDB4MDAsMHhjNyB9fSwKKyB7MTYsIDB4OGRkMCwgMCwgezB4MDAsMHgzOSwweGMwLDB4MGQsMHhmMCwweDgzLDB4ZmUsMHg0NCwweGVkLDB4MDAsMHgzYiwweGMwLDB4MGYsMHg3NCwweDAzLDB4ZjggfX0sCisgezE2LCAweDhkZTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGY5LDB4MDEsMHhiYSwweGMxIH19LAorIHsxNiwgMHg4ZGYwLCAwLCB7MHgwYywweGIwLDB4MDMsMHhhMSwweDA4LDB4ZmEsMHgwMCwweDMwLDB4YzgsMHg4ZiwweDk0LDB4MDMsMHgyNSwweDAwLDB4ZjksMHgwMCB9fSwKKyB7MTYsIDB4OGUwMCwgMCwgezB4M2MsMHhjMCwweDBmLDB4MDQsMHg4MywweGVjLDB4MDAsMHhmYiwweDAwLDB4M2UsMHhlMCwweDBmLDB4NzEsMHgwYiwweDJjLDB4NDAgfX0sCisgezE2LCAweDhlMTAsIDAsIHsweGZkLDB4MDgsMHgzNywweGMwLDB4NGUsMHg5MSwweDAzLDB4OTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ZTIwLCAwLCB7MHhjOCwweDA1LDB4M2MsMHgwMCwweGI5LDB4MDAsMHgyMywweGMwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCwweGM4LDB4MDAsMHgzNyB9fSwKKyB7MTYsIDB4OGUzMCwgMCwgezB4ZjAsMHgwYiwweDgwLDB4MDEsMHg2NCwweDAwLDB4NDksMHgwMiwweDMzLDB4YzAsMHg4NCwweDljLDB4MDMsMHgzYywweDAwLDB4YmYgfX0sCisgezE2LCAweDhlNDAsIDAsIHsweDAyLDB4MGYsMHhkMCwweDA4LDB4ZjQsMHgwMiwweDBlLDB4MTAsMHhiZCwweDgwLDB4MzMsMHhlMCwweDA4LDB4OTAsMHgwYSwweDMyIH19LAorIHsxNiwgMHg4ZTUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MDAsMHhiMCwweDA2LDB4MjAsMHhjMCB9fSwKKyB7MTYsIDB4OGU2MCwgMCwgezB4MDgsMHgwMCwweDQyLDB4ODQsMHgwMCwweGEwLDB4MDAsMHgyMCwweGYwLDB4MGIsMHgwMCwweDIyLDB4Y2MsMHgwMCwweDkwLDB4MDAgfX0sCisgezE2LCAweDhlNzAsIDAsIHsweDI4LDB4YzAsMHgwMiwweDNkLDB4MDIsMHg4YywweDAwLDB4YjMsMHgwMCwweDJjLDB4YzIsMHg5YSwweDM4LDB4MDIsMHgwNiwweDA0IH19LAorIHsxNiwgMHg4ZTgwLCAwLCB7MHhiMSwweDEyLDB4MjAsMHhlMCwweDA4LDB4MzAsMHgwMiwweDM4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGU5MCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDAsMHhiNiwweDgwLDB4MjEsMHhlMCwweDI4LDB4ZWEsMHgwMiwweDM2LDB4ODAsMHg4NiwweDkwLDB4NjUgfX0sCisgezE2LCAweDhlYTAsIDAsIHsweGUwLDB4MWIsMHhkYSwweDA2LDB4NWUsMHgwMSwweDllLDB4ODQsMHgyNSwweGVjLDB4MGEsMHg3OCwweDAyLDB4NWUsMHgwMCwweGI3IH19LAorIHsxNiwgMHg4ZWIwLCAwLCB7MHg4MCwweDJkLDB4ZTAsMHgwOCwweDc5LDB4NGEsMHgxNiwweDQwLDB4YmQsMHg4MCwweDI1LDB4ZTAsMHgwOCwweDM4LDB4MDIsMHgwOCB9fSwKKyB7MTYsIDB4OGVjMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ZmIsMHgwMCwweDI4LDB4ZTAgfX0sCisgezE2LCAweDhlZDAsIDAsIHsweDA4LDB4MTgsMHgwMiwweDhhLDB4ODgsMHhhMSwweGEwLDB4MjAsMHhjMiwweDFmLDB4MmEsMHgyMywweGU2LDB4YzgsMHhmMCwweGMwIH19LAorIHsxNiwgMHg4ZWUwLCAwLCB7MHgzYSwweGVkLDB4NGUsMHgzNCwweDAyLDB4OGMsMHgwOCwweGYzLDB4ODEsMHgxZSwweGMwLDB4MGUsMHgzMCwweDAzLDB4MGUsMHhjMCB9fSwKKyB7MTYsIDB4OGVmMCwgMCwgezB4ZjEsMHgwMCwweGIwLDB4Y2EsMHgwZSwweDIxLDB4MDMsMHg5MiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhmMDAsIDAsIHsweDQwLDB4MWQsMHhiYywweDA4LDB4ZmUsMHgxMCwweDNmLDB4ZDIsMHgwZiwweGUwLDB4MDMsMHhlYywweDA0LDB4ZmYsMHgxNCwweDdlIH19LAorIHsxNiwgMHg4ZjEwLCAwLCB7MHhjMCwweDBmLDB4YjEsMHgyMywweGZjLDB4MDEsMHhlZSwweDAwLDB4M2EsMHhjNCwweDBkLDB4YjAsMHgxMywweGJjLDB4MDAsMHhmZiB9fSwKKyB7MTYsIDB4OGYyMCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGUsMHhmMCwweDgzLDB4ZmMsMHgwYywweGZkLDB4MTAsMHgzYiwweGMwLDB4MmYsMHhlMSwweDAzLDB4ZDAgfX0sCisgezE2LCAweDhmMzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHg0MCwweGYwLDB4ODAsMHgzMiwweGQwIH19LAorIHsxNiwgMHg4ZjQwLCAwLCB7MHgwYywweGEwLDB4MDMsMHg2YywweDAwLDB4ZjMsMHg4MCwweDMyLDB4ZGEsMHgwZiwweGIwLDB4MDMsMHhlYywweDAwLDB4ZmIsMHgwMCB9fSwKKyB7MTYsIDB4OGY1MCwgMCwgezB4M2UsMHhjYywweDRjLDB4OTgsMHgxMywweDJjLDB4MTAsMHhmYiwweDA0LDB4M2UsMHhjNCwweDBjLDB4ZjIsMHg4MywweGE2LDB4MTAgfX0sCisgezE2LCAweDhmNjAsIDAsIHsweGRkLDB4MjAsMHgzZiwweGQxLDB4MGMsMHhiMCwweDAzLDB4ZWEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ZjcwLCAwLCB7MHg0OCwweDExLDB4OWMsMHg4MCwweGI3LDB4MDAsMHgyMSwweGM4LDB4MGMsMHg3MCwweDAyLDB4ZGMsMHgwOCwweGI3LDB4MDAsMHgyMSB9fSwKKyB7MTYsIDB4OGY4MCwgMCwgezB4YzgsMHgwZSwweDcwLDB4MjIsMHhkOCwweDAwLDB4YjcsMHgwMCwweDJjLDB4YzIsMHgwYSwweDcwLDB4MGEsMHgxZiwweDA4LDB4YjcgfX0sCisgezE2LCAweDhmOTAsIDAsIHsweDAwLDB4MzksMHhjOCwweDBhLDB4NzAsMHgwMiwweDE0LDB4MDAsMHhjNSwweDY5LDB4MmMsMHhjYSwweDJhLDB4NzAsMHgwMiwweGQyIH19LAorIHsxNiwgMHg4ZmEwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4MDAsMHhiZiwweDgxLDB4NjQsMHhlMSB9fSwKKyB7MTYsIDB4OGZiMCwgMCwgezB4MDgsMHg3OCwweDAyLDB4NWEsMHgwMSwweGJmLDB4ODAsMHgyMSwweGVjLDB4NGIsMHg3OCwweDQ2LDB4OWYsMHgwOCwweDM3LDB4ODAgfX0sCisgezE2LCAweDhmYzAsIDAsIHsweDJkLDB4ZTgsMHg4OCwweDE4LDB4MDIsMHgxZSwweDgxLDB4YjcsMHhiMCwweDJkLDB4ZTAsMHgwOSwweDdhLDB4MDIsMHg4ZSwweDAwIH19LAorIHsxNiwgMHg4ZmQwLCAwLCB7MHg5NSwweGEwLDB4MmQsMHhlNCwweDA4LDB4NzgsMHgwMiwweGYwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGZlMCwgMCwgezB4NDgsMHgxNCwweGVjLDB4MDAsMHhiMywweDYwLDB4MjAsMHhjMCwweDA4LDB4YjYsMHgwMiwweGNjLDB4MDAsMHhiMywweDAxLDB4MjAgfX0sCisgezE2LCAweDhmZjAsIDAsIHsweGMwLDB4OGEsMHhiMCwweDg2LDB4Y2YsMHgwMCwweGJiLDB4MTAsMHg2YywweGMxLDB4MGEsMHgzOCwweDAyLDB4MGMsMHgwMSwweGIzIH19LAorIHsxNiwgMHg5MDAwLCAwLCB7MHgwMiwweDI4LDB4YzAsMHgwYiwweGIwLDB4MGEsMHgwYywweDAwLDB4ODEsMHgwMCwweDJlLDB4YzAsMHgwYSwweGI0LDB4ODIsMHhkMiB9fSwKKyB7MTYsIDB4OTAxMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZmUsMHg0MCwweGI2LDB4ODAgfX0sCisgezE2LCAweDkwMjAsIDAsIHsweDBjLDB4ZTQsMHgwMywweDc4LDB4ODAsMHhmZSwweDc0LDB4MzIsMHg4MCwweDBiLDB4ZTYsMHgwMywweGY5LDB4MDAsMHhmZSwweDAwIH19LAorIHsxNiwgMHg5MDMwLCAwLCB7MHgzZSwweDgwLDB4MGMsMHhlMCwweDAzLDB4MjgsMHgwMCwweGZhLDB4MDAsMHgzZSwweDgwLDB4NGQsMHhhMCwweDAzLDB4YTgsMHgwMCB9fSwKKyB7MTYsIDB4OTA0MCwgMCwgezB4ZGEsMHgwNCwweDNlLDB4ODAsMHgwYywweGU0LDB4MDMsMHhmYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkwNTAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgyZSwweDgwLDB4MjMsMHhlMCwweDAwLDB4ZjgsMHgwMSwweDNjIH19LAorIHsxNiwgMHg5MDYwLCAwLCB7MHgwMCwweDBlLDB4ODAsMHgwMywweGUwLDB4MjAsMHhmOCwweDIwLDB4M2UsMHgwMSwweDhmLDB4ODksMHgwMywweGUwLDB4MDAsMHhmOCB9fSwKKyB7MTYsIDB4OTA3MCwgMCwgezB4MDAsMHgzYSwweDEwLDB4MGUsMHg4MCwweDAxLDB4ZTAsMHgwMCwweGU4LDB4NDAsMHg3ZSwweDAwLDB4NGYsMHg4MCwweDAzLDB4ZDIgfX0sCisgezE2LCAweDkwODAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMiwweGM5LDB4MDEsMHg3ZSwweDQwIH19LAorIHsxNiwgMHg5MDkwLCAwLCB7MHgyYywweDkwLDB4MGIsMHgyNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NjgsMHgwNSwweDkwLDB4MTMsMHhhNCwweDA0LDB4ZDksMHgwMCB9fSwKKyB7MTYsIDB4OTBhMCwgMCwgezB4MzIsMHg0MSwweDBlLDB4OTEsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg2MCwweDBlLDB4OTAsMHgwMywweDI0LDB4MDAgfX0sCisgezE2LCAweDkwYjAsIDAsIHsweGYxLDB4MDAsMHgzMiwweDQwLDB4NjgsMHg5MCwweDQzLDB4ODIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MGMwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4MDAsMHg2ZSwweDQwLDB4MDgsMHg5MCwweDQyLDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4OTBkMCwgMCwgezB4NzAsMHg4OCwweDkwLDB4MDMsMHgyNCwweDAwLDB4YjksMHgwMCwweDIyLDB4NDAsMHgwOCwweDk4LDB4MTIsMHhlNCwweDAwLDB4YjkgfX0sCisgezE2LCAweDkwZTAsIDAsIHsweDAwLDB4MmUsMHg0MCwweDBhLDB4OTAsMHgwYSwweDI2LDB4MDAsMHhiOSwweDgwLDB4YTIsMHg0MCwweDA4LDB4OTAsMHgxMiwweDIwIH19LAorIHsxNiwgMHg5MGYwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDAsMHg4OSwweDA0LDB4MmMsMHg0MCB9fSwKKyB7MTYsIDB4OTEwMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMSwweGI5LDB4MDAsMHgyYSwweDQwLDB4MGIsMHhiMCwweDAyLDB4YTQsMHgwMSwweGI5LDB4MDAgfX0sCisgezE2LCAweDkxMTAsIDAsIHsweGUwLDB4NDAsMHgwYSwweDkwLDB4ODIsMHhhNCwweDAwLDB4YjksMHgwMCwweDJjLDB4NDgsMHgwYSwweDk4LDB4MDIsMHgyNCwweDgwIH19LAorIHsxNiwgMHg5MTIwLCAwLCB7MHgzOSwweDIwLDB4MjIsMHg0MCwweDJhLDB4OTAsMHgwMiwweDg2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTEzMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHg4MSwweDAwLDB4MmMsMHg0OCwweDA4LDB4MTAsMHgxMiwweDA0LDB4MTAsMHhiMSwweDA0LDB4MmMgfX0sCisgezE2LCAweDkxNDAsIDAsIHsweGQ4LDB4MGEsMHgxMCwweDAyLDB4MDQsMHgwMCwweGIxLDB4MDAsMHgyMCwweDQ4LDB4MDgsMHgxMCwweDAyLDB4YzQsMHg4MCwweGIxIH19LAorIHsxNiwgMHg5MTUwLCAwLCB7MHgyMiwweDJjLDB4NTAsMHg4YSwweDMyLDB4ODIsMHgwNSwweGEwLDB4YjEsMHgyYSwweDIwLDB4NGEsMHgwYSwweDEyLDB4ODIsMHgwMiB9fSwKKyB7MTYsIDB4OTE2MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDUwLDB4YzgsMHg1MiwweDJlLDB4MTQgfX0sCisgezE2LCAweDkxNzAsIDAsIHsweDBjLDB4ODUsMHgwMywweDIxLDB4NDAsMHhmOCwweDUwLDB4M2EsMHgwMCwweDFmLDB4ODUsMHgwMywweGExLDB4NDAsMHhmOCwweDUwIH19LAorIHsxNiwgMHg5MTgwLCAwLCB7MHgzMiwweDE0LDB4MGUsMHg4MCwweDAzLDB4YTEsMHg0MCwweGY4LDB4NTAsMHgzYywweDgwLDB4MGUsMHgwMiwweDAzLDB4MjAsMHg4MCB9fSwKKyB7MTYsIDB4OTE5MCwgMCwgezB4ZmEsMHgyMCwweDMyLDB4MDgsMHgwZSwweDgyLDB4MTMsMHhhZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkxYTAsIDAsIHsweDk4LDB4MWQsMHhlNCwweDUwLDB4ZmQsMHgwMCwweDNlLDB4NDQsMHgwZiwweGQwLDB4MDMsMHhmNCwweDAwLDB4ZmQsMHgwMCwweDNlIH19LAorIHsxNiwgMHg5MWIwLCAwLCB7MHg0NCwweDhkLDB4ZDAsMHgwMSwweGJkLDB4MDAsMHhmZCwweDAyLDB4M2UsMHg0NCwweDBmLDB4ZDQsMHgwMCwweGU0LDB4NDgsMHg3OSB9fSwKKyB7MTYsIDB4OTFjMCwgMCwgezB4MTQsMHgzZSwweDUwLDB4MGYsMHg5MiwweGEyLDB4ZjQsMHgwOCwweGZkLDB4MDAsMHgzZSwweDRhLDB4MGQsMHhkMiwweDgzLDB4ZTYgfX0sCisgezE2LCAweDkxZDAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZTcsMHgwMCwweGY5LDB4MTAsMHgzYSwweDZlIH19LAorIHsxNiwgMHg5MWUwLCAwLCB7MHgwYywweGIxLDB4MDMsMHhlNCwweDQwLDB4ZjksMHg0NCwweDNiLDB4NjEsMHg4ZSwweDk0LDB4MDMsMHhlNCwweDAwLDB4ZTksMHg0MCB9fSwKKyB7MTYsIDB4OTFmMCwgMCwgezB4MzIsMHg2NiwweDBmLDB4ZGEsMHgwYiwweGE3LDB4MjgsMHhjOSwweGUwLDB4M2YsMHg2OCwweDBjLDB4ZGEsMHg4MywweGIzLDB4MjAgfX0sCisgezE2LCAweDkyMDAsIDAsIHsweGVkLDB4YTAsMHgzMywweDc5LDB4MDgsMHhkOCwweDAzLDB4NDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MjEwLCAwLCB7MHgzOCwweDEwLDB4ZTIsMHgwMCwweGI4LDB4YTAsMHgyZSwweDM4LDB4MDgsMHg4YSwweDAyLDB4ZTIsMHg4OCwweGU4LDB4ODEsMHgyZSB9fSwKKyB7MTYsIDB4OTIyMCwgMCwgezB4MTQsMHgwOSwweDBhLDB4MDMsMHhlMiwweDgwLDB4YjgsMHg4MCwweDMyLDB4MzAsMHgwYiwweDg1LDB4MDIsMHgyMSwweDAxLDB4YTggfX0sCisgezE2LCAweDkyMzAsIDAsIHsweGY0LDB4MzgsMHgyYSwweDA4LDB4MGUsMHhjYSwweDIzLDB4OTAsMHhjOCwweDU0LDB4MzQsMHgzOCwweDA4LDB4OGEsMHg5MiwweDBlIH19LAorIHsxNiwgMHg5MjQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM1LDB4MDAsMHhiMSwweDAwLDB4MjgsMHg0MCB9fSwKKyB7MTYsIDB4OTI1MCwgMCwgezB4MTksMHgxMCwweDAyLDB4YzQsMHgwMCwweGIxLDB4MjAsMHgyOCwweDQwLDB4MGIsMHgxMCwweDA2LDB4YzQsMHgyMCwweGExLDB4YTIgfX0sCisgezE2LCAweDkyNjAsIDAsIHsweDZjLDB4NDgsMHgwYiwweDEwLDB4MDIsMHg4NCwweDA4LDB4ODEsMHgyMCwweDJjLDB4NTAsMHgwOSwweDEwLDB4MDIsMHhjNCwweDA0IH19LAorIHsxNiwgMHg5MjcwLCAwLCB7MHhiMSwweDAwLDB4MjQsMHg1OCwweDA4LDB4M2MsMHgwMiwweDQyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTI4MCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDEsMHhiOSwweDIwLDB4MmMsMHg0MCwweDA5LDB4OTAsMHgwMiwweGU0LDB4MTAsMHhhOSwweDQwLDB4MmUgfX0sCisgezE2LCAweDkyOTAsIDAsIHsweDQwLDB4MGIsMHg5MCwweDAyLDB4YTQsMHgwMCwweGIxLDB4MDEsMHgyYSwweDQwLDB4MGIsMHg5NCwweDAyLDB4MjQsMHgwMCwweGE5IH19LAorIHsxNiwgMHg5MmEwLCAwLCB7MHgwMCwweDJhLDB4NDAsMHgwMSwweDEwLDB4NTIsMHg2NCwweDAwLDB4ODksMHgwMCwweDI2LDB4NDAsMHgwMCwweDk4LDB4MDIsMHg0NiB9fSwKKyB7MTYsIDB4OTJiMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZjksMHg2MSwweDNhLDB4NDAgfX0sCisgezE2LCAweDkyYzAsIDAsIHsweDBkLDB4OTAsMHg4MywweGU1LDB4MjAsMHhmOSwweDAxLDB4M2EsMHg0MCwweDJlLDB4OTAsMHgwMiwweGU0LDB4NDAsMHhlOSwweDAxIH19LAorIHsxNiwgMHg5MmQwLCAwLCB7MHg5ZSwweDQwLDB4MGYsMHg5NCwweDAzLDB4YTQsMHgwMCwweDg5LDB4MDAsMHgzZSwweDQwLDB4MmQsMHg5MCwweDAyLDB4ZTYsMHgwOCB9fSwKKyB7MTYsIDB4OTJlMCwgMCwgezB4YjksMHgwMSwweDM2LDB4NDAsMHgyYywweDkwLDB4MDEsMHg2OCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkyZjAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgyZSwweDkwLDB4MDMsMHhlNCwweDgwLDB4ZjksMHgwMCwweDNjIH19LAorIHsxNiwgMHg5MzAwLCAwLCB7MHg0MCwweDBjLDB4OWMsMHgyMywweGU0LDB4MDAsMHhmOSwweDAwLDB4MzYsMHg0MCwweDBmLDB4MTAsMHg0MywweDg0LDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4OTMxMCwgMCwgezB4MDIsMHgzZSwweDQwLDB4MGUsMHg5MCwweDAzLDB4ODAsMHg4MCwweGY5LDB4MDAsMHgzYywweDQwLDB4MmYsMHg5MCwweDAzLDB4OGEgfX0sCisgezE2LCAweDkzMjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGM4LDB4NDAsMHgzNiwweDAxIH19LAorIHsxNiwgMHg5MzMwLCAwLCB7MHgwZCwweDg0LDB4MDMsMHhlMSwweDAwLDB4ZTgsMHg0MCwweDNlLDB4MDgsMHgwYywweDgwLDB4MDMsMHhlMSwweDAwLDB4ZjgsMHgwMCB9fSwKKyB7MTYsIDB4OTM0MCwgMCwgezB4MzIsMHgwMCwweDhmLDB4ODAsMHgwMywweGEwLDB4MTAsMHhmOCwweDAwLDB4MzIsMHgwNCwweDBlLDB4ODAsMHg4MywweDYwLDB4MDAgfX0sCisgezE2LCAweDkzNTAsIDAsIHsweGY4LDB4MDAsMHgzZSwweDAwLDB4MGMsMHgwMCwweDAzLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MzYwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMCwweDhhLDB4MDEsMHgyMiwweDgwLDB4MDgsMHhhMCwweDI0LDB4ZTgsMHgwMCwweDBhLDB4MDAsMHgyZiB9fSwKKyB7MTYsIDB4OTM3MCwgMCwgezB4ODAsMHgxYSwweGEwLDB4MDIsMHgyOCwweDAwLDB4YmEsMHgwMCwweDE2LDB4ODAsMHgwYiwweGUwLDB4MDMsMHgyOCwweDA4LDB4ZWEgfX0sCisgezE2LCAweDkzODAsIDAsIHsweDAwLDB4MzMsMHg5MCwweDA4LDB4ZWMsMHgxYiwweDIyLDB4ODAsMHhjNiwweDE0LDB4MmYsMHg5MSwweDA4LDB4YTAsMHg0MywweDRhIH19LAorIHsxNiwgMHg5MzkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHg5MywweDAwLDB4MjQsMHhjMCB9fSwKKyB7MTYsIDB4OTNhMCwgMCwgezB4MDksMHgzMCwweDEyLDB4Y2MsMHgwNCwweGEzLDB4MDQsMHg2YywweGMwLDB4MDksMHgzMCwweDAyLDB4OGMsMHgwMCwweGIzLDB4MDAgfX0sCisgezE2LCAweDkzYjAsIDAsIHsweDJjLDB4YzAsMHgxMywweDMwLDB4MDIsMHg4YywweDAwLDB4YjMsMHgwMCwweGU2LDB4YjgsMHgwYSwweDM4LDB4MDIsMHg0NCwweDA4IH19LAorIHsxNiwgMHg5M2MwLCAwLCB7MHg4MiwweDUwLDB4MmMsMHhkMiwweDNhLDB4MzAsMHgwMiwweDhhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTNkMCwgMCwgezB4YTAsMHgwMSwweDBlLDB4ODAsMHg5NywweGI0LDB4MjEsMHhjNCwweDQ5LDB4NzEsMHgwMiwweGRlLDB4ODEsMHg4NywweDIxLDB4MmQgfX0sCisgezE2LCAweDkzZTAsIDAsIHsweGQwLDB4MGIsMHg3YiwweDAyLDB4MWMsMHgwMSwweGJmLDB4MjAsMHgyOSwweGM0LDB4MGIsMHgzMCwweDAyLDB4NWMsMHgwMCwweGE3IH19LAorIHsxNiwgMHg5M2YwLCAwLCB7MHhhMSwweDIxLDB4YzAsMHg0YSwweDcwLDB4OGEsMHgwYywweDgxLDB4ODQsMHgwMCwweDJkLDB4ZDAsMHgwYSwweDUwLDB4MDIsMHhlOCB9fSwKKyB7MTYsIDB4OTQwMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDgyLDB4ZGYsMHhhMCwweDM0LDB4ZWMgfX0sCisgezE2LCAweDk0MTAsIDAsIHsweDBkLDB4NzksMHgwMiwweGZlLDB4ODAsMHhlNywweGU4LDB4MmYsMHhhMCwweDA5LDB4N2EsMHgwMiwweDllLDB4MDAsMHhmNywweGEyIH19LAorIHsxNiwgMHg5NDIwLCAwLCB7MHgyNSwweGVhLDB4MGIsMHg0OCwweDAzLDB4OWUsMHgwNCwweGZmLDB4YzAsMHg2NSwweGU0LDB4MGUsMHg2OCwweDAzLDB4NWYsMHgwMCB9fSwKKyB7MTYsIDB4OTQzMCwgMCwgezB4ZTQsMHg4MCwweDNkLDB4ZTAsMHgwZSwweGY4LDB4MDMsMHhhYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk0NDAsIDAsIHsweDA4LDB4MWQsMHhhYywweDQ4LDB4ZWIsMHgwNSwweDNlLDB4ZDksMHgwZSwweGIyLDB4MDMsMHhlYywweDAwLDB4ZmIsMHg2MCwweDNlIH19LAorIHsxNiwgMHg5NDUwLCAwLCB7MHhjMCwweDBlLDB4YjIsMHg4MywweGFjLDB4MDAsMHhmMywweDUwLDB4YTYsMHhjMCwweDRmLDB4YjAsMHgwMywweGFjLDB4MDAsMHhmYiB9fSwKKyB7MTYsIDB4OTQ2MCwgMCwgezB4ODAsMHgzZiwweGQ4LDB4MGQsMHhhMCwweDAzLDB4ZWMsMHgwYSwweGY5LDB4MDAsMHgzZSwweGMwLDB4MGQsMHg5MCwweDAzLDB4NDIgfX0sCisgezE2LCAweDk0NzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHgwMCwweGJiLDB4OTAsMHgzZSwweGUwIH19LAorIHsxNiwgMHg5NDgwLCAwLCB7MHgwOCwweDM5LDB4MDMsMHg5ZSwweDIwLDB4Y2YsMHg4MiwweDc3LDB4ZTAsMHgxZiwweGY4LDB4MDMsMHhlZSwweDAwLDB4ZmYsMHhjMCB9fSwKKyB7MTYsIDB4OTQ5MCwgMCwgezB4M2YsMHhlNSwweDBkLDB4ZjksMHgwMywweGVlLDB4MDAsMHhmYiwweDkwLDB4MzcsMHhhMCwweDA4LDB4ZjgsMHgwZiwweDFlLDB4MDAgfX0sCisgezE2LCAweDk0YTAsIDAsIHsweGNjLDB4OTQsMHgzMywweDYwLDB4MGQsMHhmOCwweDAzLDB4YzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NGIwLCAwLCB7MHhhOCwweDExLDB4OWMsMHgwMCwweGI3LDB4OTAsMHgyZiwweGU0LDB4MDgsMHg3YSwweDAyLDB4MWUsMHgwMCwweDhmLDB4MTIsMHgyNSB9fSwKKyB7MTYsIDB4OTRjMCwgMCwgezB4ZDgsMHgwYiwweGJiLDB4MDIsMHgxZSwweDAwLDB4YjcsMHgwMCwweDJkLDB4ZTgsMHgwOCwweDdkLDB4ODIsMHhkZSwweDQwLDB4YmIgfX0sCisgezE2LCAweDk0ZDAsIDAsIHsweGEwLDB4MjcsMHg5MCwweDBhLDB4NzYsMHgwMiwweDVjLDB4ODAsMHg4NSwweDAwLDB4MzcsMHhjNCwweDRkLDB4NzEsMHgwMywweGVhIH19LAorIHsxNiwgMHg5NGUwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4MDAsMHhiNywweDIwLDB4MmQsMHhjMCB9fSwKKyB7MTYsIDB4OTRmMCwgMCwgezB4MjksMHhmMiwweDIyLDB4YmMsMHg4MCwweDk3LDB4MDAsMHgyNSwweDQxLDB4MGIsMHg3MCwweDEyLDB4OWMsMHgwMCwweGI3LDB4MDggfX0sCisgezE2LCAweDk1MDAsIDAsIHsweDI5LDB4YzAsMHgwOCwweDQyLDB4MTIsMHhkYywweDQwLDB4YjcsMHgwMCwweDI5LDB4YzAsMHgwOSwweDYwLDB4MjIsMHhkYywweDEwIH19LAorIHsxNiwgMHg5NTEwLCAwLCB7MHg4MCwweDAwLDB4MjEsMHg0MCwweDA5LDB4NzAsMHgwMiwweGMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTUyMCwgMCwgezB4MjAsMHgxNCwweGNjLDB4MDAsMHhiMywweGMwLDB4MmUsMHhjMCwweDA4LDB4MzQsMHg4MiwweDJkLDB4MDAsMHg5MywweDAwLDB4MjQgfX0sCisgezE2LCAweDk1MzAsIDAsIHsweGMwLDB4MGIsMHgzMCwweDAyLDB4MGYsMHg4MCwweDEzLDB4MDAsMHgyYywweGMwLDB4MGEsMHgzNCwweGEyLDB4ZWMsMHgwMCwweGIzIH19LAorIHsxNiwgMHg5NTQwLCAwLCB7MHgwMCwweDI4LDB4YzAsMHgwYiwweDAwLDB4MDIsMHhjYywweDAwLDB4ODEsMHgwMCwweDIwLDB4YzAsMHgwOSwweDMwLDB4MDIsMHg4OSB9fSwKKyB7MTYsIDB4OTU1MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHhiYywweDAwLDB4ZmYsMHhlMCwweDNmLDB4YzAgfX0sCisgezE2LCAweDk1NjAsIDAsIHsweDBjLDB4ZjQsMHg4MywweGJkLDB4MDAsMHhkZiwweDA4LDB4MzYsMHg0MCwweDBiLDB4NzUsMHg0MiwweGZjLDB4MjAsMHhmZiwweDgwIH19LAorIHsxNiwgMHg5NTcwLCAwLCB7MHgzYiwweGMwLDB4MmMsMHgzYywweDAzLDB4ZmMsMHgwMCwweGJmLDB4MDAsMHhiZSwweGMwLDB4OGQsMHg5MCwweDBiLDB4YWMsMHgwMiB9fSwKKyB7MTYsIDB4OTU4MCwgMCwgezB4Y2EsMHgwMCwweDIyLDB4ODAsMHgwZCwweGIwLDB4MDIsMHhlYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk1OTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwOCwweDFlLDB4YzAsMHgwZiwweGIwLDB4MTMsMHhlYywweDAwLDB4ZWIsMHgwMCwweDNhIH19LAorIHsxNiwgMHg5NWEwLCAwLCB7MHgxMCwweDBmLDB4YjAsMHgyMywweGFjLDB4MDEsMHhmYiwweDAwLDB4M2UsMHhjMCwweDNjLDB4ODQsMHgwMywweGVjLDB4MDAsMHhmYiB9fSwKKyB7MTYsIDB4OTViMCwgMCwgezB4MDAsMHgyNiwweDQwLDB4MGUsMHg5NCwweDBiLDB4MmMsMHgwMCwweGY5LDB4NDAsMHgzZSwweDkwLDB4MGUsMHg5MCwweDEzLDB4ZTAgfX0sCisgezE2LCAweDk1YzAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZGMsMHgwMiwweGNmLDB4MDAsMHgzZiwweGMwIH19LAorIHsxNiwgMHg5NWQwLCAwLCB7MHgwZCwweGYwLDB4MGIsMHgzYywweDIwLDB4Y2YsMHgwMCwweDNkLDB4MDAsMHgwZSwweGYwLDB4MDcsMHg5YywweDAxLDB4Y2YsMHgwMiB9fSwKKyB7MTYsIDB4OTVlMCwgMCwgezB4M2UsMHhjMCwweDBmLDB4YzQsMHgwMywweDNjLDB4MDAsMHhjZiwweDAwLDB4MGYsMHhjMCwweDBlLDB4NDQsMHgwMywweDFmLDB4MDIgfX0sCisgezE2LCAweDk1ZjAsIDAsIHsweGNjLDB4MDAsMHgzZiwweDgwLDB4MmMsMHg3MCwweDAzLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NjAwLCAwLCB7MHg4MSwweDA0LDB4NmMsMHgwMCwweDhiLDB4MDIsMHgyZSwweGMwLDB4MGQsMHhiMCwweDAyLDB4MmMsMHgwMCwweGFiLDB4MDAsMHgwNiB9fSwKKyB7MTYsIDB4OTYxMCwgMCwgezB4MjAsMHgwOCwweGIwLDB4MDMsMHhmYywweDAwLDB4YWIsMHgwMCwweDJlLDB4YzAsMHgwZiwweDgwLDB4MDYsMHhiYywweDAwLDB4YWIgfX0sCisgezE2LCAweDk2MjAsIDAsIHsweDA0LDB4M2EsMHhmMCwweDBjLDB4ODgsMHgwMiwweDJjLDB4MDAsMHhjOSwweDgwLDB4M2EsMHg5MiwweDA4LDB4OTAsMHgwYSwweGEwIH19LAorIHsxNiwgMHg5NjMwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHhhYiwweDAwLDB4MmUsMHhjMCB9fSwKKyB7MTYsIDB4OTY0MCwgMCwgezB4MDksMHgzMCwweDAyLDB4MmMsMHgwMCwweDhiLDB4MDAsMHgyNiwweDYwLDB4MGIsMHhiMCwweDAyLDB4YWMsMHgwMCwweDhiLDB4MDAgfX0sCisgezE2LCAweDk2NTAsIDAsIHsweDZlLDB4YzAsMHgwYiwweGIwLDB4NDIsMHgyYywweDAwLDB4OWIsMHgwMCwweDRjLDB4ZTAsMHgwYSwweDkwLDB4MjIsMHgyYywweDAwIH19LAorIHsxNiwgMHg5NjYwLCAwLCB7MHg4YSwweGMyLDB4MmMsMHg0MCwweDA4LDB4YjAsMHg0MiwweDIwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTY3MCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDAsMHg4MywweDBkLDB4MmMsMHhjNiwweDA5LDB4MzEsMHgwMiwweDBkLDB4ODEsMHhhMywweDExLDB4MjQgfX0sCisgezE2LCAweDk2ODAsIDAsIHsweDAwLDB4OGEsMHhiMSwweGUyLDB4NGMsMHg4MCwweGEzLDB4MDAsMHgyYywweGNjLDB4MGIsMHgwMiwweDAyLDB4OGMsMHg4MCwweGEzIH19LAorIHsxNiwgMHg5NjkwLCAwLCB7MHg0OCwweDA4LDB4YzAsMHgwOCwweDAwLDB4MGEsMHgwZCwweDAwLDB4ODEsMHgwMCwweDI4LDB4YzAsMHgwOCwweDMwLDB4MDIsMHg4MiB9fSwKKyB7MTYsIDB4OTZhMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4Y2IsMHgyMCwweDJmLDB4YzggfX0sCisgezE2LCAweDk2YjAsIDAsIHsweDhkLDB4ZjYsMHgxMywweDJkLDB4YjAsMHg4ZiwweDAwLDB4MzYsMHg0MCwweDBmLDB4ZjAsMHgwMiwweGFkLDB4YTgsMHg4ZiwweDEwIH19LAorIHsxNiwgMHg5NmMwLCAwLCB7MHgzZiwweGNhLDB4MGIsMHg4MCwweDkyLDB4MmMsMHgxMCwweGRiLDB4NDAsMHgzZiwweGMwLDB4MGUsMHgwMCwweDAzLDB4MmQsMHgwNCB9fSwKKyB7MTYsIDB4OTZkMCwgMCwgezB4YzgsMHgwMiwweDNlLDB4NDAsMHgwYywweGIwLDB4MDMsMHgwMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk2ZTAsIDAsIHsweGEwLDB4MWQsMHhmYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzgsMHgwZSwweGYxLDB4MDMsMHhlYywweDg0LDB4ZmYsMHgyMCwweDM3IH19LAorIHsxNiwgMHg5NmYwLCAwLCB7MHgwMCwweDBkLDB4YjIsMHgwMywweGJjLDB4YTAsMHhmZiwweDAwLDB4M2UsMHhjOSwweDBlLDB4ODAsMHgwMywweGZkLDB4MTEsMHhmZiB9fSwKKyB7MTYsIDB4OTcwMCwgMCwgezB4MDAsMHgzYiwweGMwLDB4MGUsMHhjMCwweDAzLDB4ZmMsMHg4MCwweGVkLDB4MDAsMHgzYiwweGMwLDB4MGYsMHhmMCwweDQzLDB4NjggfX0sCisgezE2LCAweDk3MTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAxLDB4ZmMsMHg5MCwweGNjLDB4OTIsMHgzYiwweGM4IH19LAorIHsxNiwgMHg5NzIwLCAwLCB7MHgwZCwweGYwLDB4ODMsMHg3MywweDEwLDB4ZmYsMHgyOCwweDM3LDB4Y2EsMHg0ZiwweGIyLDB4MDMsMHhmYywweDAwLDB4ZGYsMHgyMCB9fSwKKyB7MTYsIDB4OTczMCwgMCwgezB4YjMsMHhjNCwweDBkLDB4NjgsMHg0MywweGZlLDB4MTQsMHhjYiwweDg0LDB4MzMsMHhlMCwweDBkLDB4NzgsMHgwMywweGJlLDB4MDAgfX0sCisgezE2LCAweDk3NDAsIDAsIHsweGZmLDB4ODAsMHgzNywweGEwLDB4MGMsMHhmMywweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NzUwLCAwLCB7MHg4MCwweDAwLDB4ZmMsMHg0OCwweDgyLDB4MjEsMHgwMywweGY0LDB4MGYsMHhmNiwweDQyLDB4MjAsMHgwNCwweDhhLDB4NjAsMHgyYiB9fSwKKyB7MTYsIDB4OTc2MCwgMCwgezB4ZGEsMHgwYiwweGY5LDB4MDIsMHgzZiwweDA0LDB4OGYsMHg1MiwweDIzLDB4ZDUsMHg0ZCwweDg4LDB4MDIsMHhhZSwweDAwLDB4ZGIgfX0sCisgezE2LCAweDk3NzAsIDAsIHsweDgwLDB4MzYsMHhjMCwweDA4LDB4ODAsMHgwMiwweDIwLDB4MDQsMHhiOCwweDAwLDB4MjIsMHg2MCwweDBkLDB4NzQsMHgwMywweGUwIH19LAorIHsxNiwgMHg5NzgwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4YTAsMHg4MCwweDAxLDB4MDgsMHhjMCB9fSwKKyB7MTYsIDB4OTc5MCwgMCwgezB4NGIsMHgzMCwweDgyLDB4NDIsMHg5MCwweGEzLDB4MDgsMHgyYywweGM4LDB4MWEsMHgzMCwweDIyLDB4OGQsMHgwMCwweDkzLDB4MDAgfX0sCisgezE2LCAweDk3YTAsIDAsIHsweDI0LDB4YzgsMHgwOSwweGEwLDB4MTIsMHgwYywweDA0LDB4YWIsMHgwMCwweDYyLDB4YzAsMHgwOSwweGIwLDB4MDIsMHhjYywweDAwIH19LAorIHsxNiwgMHg5N2IwLCAwLCB7MHhiMywweDAwLDB4MjgsMHg4MCwweDA4LDB4MzYsMHgwNiwweGEyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTdjMCwgMCwgezB4YzAsMHgxNSwweGFjLDB4MDAsMHg4OCwweDA4LDB4MjIsMHhjMCwweDBhLDB4MzAsMHgxYSwweDAwLDB4MTEsMHg4MiwweDAwLDB4MGEgfX0sCisgezE2LCAweDk3ZDAsIDAsIHsweGMwLDB4MGIsMHhiMCwweDQyLDB4MmMsMHgwMCwweDhiLDB4MDAsMHgyNiwweGMwLDB4MDksMHg5MSwweDAyLDB4ZWMsMHgyMCwweGJiIH19LAorIHsxNiwgMHg5N2UwLCAwLCB7MHgyOCwweDY2LDB4YzAsMHgwOCwweDgwLDB4MDIsMHg2MCwweDAwLDB4YjgsMHgwMCwweDJhLDB4NDAsMHg4MSwweGIwLDB4MDYsMHhmOCB9fSwKKyB7MTYsIDB4OTdmMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTUsMHhlYywweDAyLDB4YzgsMHgwNCwweDNhLDB4YzAgfX0sCisgezE2LCAweDk4MDAsIDAsIHsweDg5LDB4YjAsMHgwMywweDY4LDB4MDAsMHhlOSwweGMxLDB4MWUsMHhjMSwweDBlLDB4MzAsMHgwMywweGVjLDB4MDAsMHhkYiwweDAwIH19LAorIHsxNiwgMHg5ODEwLCAwLCB7MHgzNiwweGMxLDB4MGQsMHgwMCwweDIzLDB4MGUsMHgwMCwweGViLDB4ODAsMHgzMiwweGM4LDB4Y2QsMHgzMCwweDMyLDB4ZWMsMHgwOCB9fSwKKyB7MTYsIDB4OTgyMCwgMCwgezB4ZjMsMHgwMCwweDNjLDB4ODAsMHgwYywweGIwLDB4MDYsMHg4MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk4MzAsIDAsIHsweGUwLDB4MDEsMHg5YywweDAwLDB4N2MsMHgwMCwweDNmLDB4YzAsMHgwYiwweGIwLDB4NDMsMHhmZCwweDAwLDB4YmUsMHhjNCwweDM3IH19LAorIHsxNiwgMHg5ODQwLCAwLCB7MHhjMCwweDFmLDB4ZjAsMHgwMywweDVjLDB4MDAsMHhmZiwweDAxLDB4M2IsMHhjMCwweDBlLDB4YzgsMHgwMywweGJmLDB4MjAsMHhkZiB9fSwKKyB7MTYsIDB4OTg1MCwgMCwgezB4MDAsMHgzZiwweGQwLDB4MGYsMHhjMCwweDEzLDB4YjAsMHgwMCwweDdjLDB4MDAsMHhiNywweDQwLDB4MGYsMHhmMCwweDFiLDB4YjAgfX0sCisgezE2LCAweDk4NjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwYywweGQ4LDB4NDEsMHgzMiwweGMwIH19LAorIHsxNiwgMHg5ODcwLCAwLCB7MHgwZSwweGIwLDB4MDcsMHhhOCwweDAxLDB4NjksMHg0MCwweGIyLDB4YzAsMHg4ZCwweGIwLDB4YTMsMHhlYywweDA4LDB4ZjMsMHgwMCB9fSwKKyB7MTYsIDB4OTg4MCwgMCwgezB4MzIsMHhjMCwweDBmLDB4ODAsMHgwMywweGVkLDB4MDAsMHhmYiwweDQ4LDB4M2EsMHhjMCwweDBkLDB4YjAsMHg4MywweDJjLDB4MDAgfX0sCisgezE2LCAweDk4OTAsIDAsIHsweGZiLDB4MjAsMHgzZSwweDgwLDB4MGYsMHg3MCwweDIzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5OGEwLCAwLCB7MHhjOCwweDA1LDB4M2MsMHgwMCwweDg4LDB4MDAsMHgyMywweGMwLDB4MDgsMHhmMCwweDA2LDB4MmMsMHgxMCwweDg4LDB4NTEsMHgzNyB9fSwKKyB7MTYsIDB4OThiMCwgMCwgezB4YzAsMHgwOCwweGYwLDB4MDcsMHg3ZCwweDYwLDB4OGYsMHgwMiwweDM3LDB4YzAsMHgwYiwweDhjLDB4MDAsMHgyZCwweDAwLDB4YjMgfX0sCisgezE2LCAweDk4YzAsIDAsIHsweDAwLDB4MzgsMHhjMCwweDA4LDB4ODAsMHg4MiwweDIwLDB4MDAsMHhiOCwweDAwLDB4MmUsMHg1MCwweDBiLDB4ZjAsMHgwMCwweDMyIH19LAorIHsxNiwgMHg5OGQwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MDAsMHg5OCwweDAwLDB4MjgsMHhjMCB9fSwKKyB7MTYsIDB4OThlMCwgMCwgezB4MGEsMHgzMCwweDAyLDB4ODQsMHgwNCwweGEzLDB4MDAsMHgwMCwweGMwLDB4NjgsMHgzOSwweDA2LDB4MGMsMHgxMCwweDkzLDB4MjAgfX0sCisgezE2LCAweDk4ZjAsIDAsIHsweDIyLDB4YzAsMHg5YiwweDAxLDB4YTAsMHg4ZiwweDE0LDB4MzMsMHgxNCwweDI4LDB4YzAsMHgwOSwweDNjLDB4MDIsMHgwYywweDAxIH19LAorIHsxNiwgMHg5OTAwLCAwLCB7MHg5MywweDQwLDB4MmMsMHg4OCwweDBiLDB4MzAsMHgwMiwweGI4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTkxMCwgMCwgezB4NjAsMHgwMSwweDFlLDB4MTAsMHg4NywweDgwLDB4MjksMHhlMCwweDA4LDB4NzgsMHgwMiwweDNlLDB4MDAsMHg4MywweDkwLDB4MjQgfX0sCisgezE2LCAweDk5MjAsIDAsIHsweGUwLDB4MDgsMHg3OCwweDEwLDB4Y2UsMHgwNCwweDA3LDB4OTEsMHgyNSwweGUwLDB4ODMsMHhjOSwweDAyLDB4MWUsMHgwNCwweGI3IH19LAorIHsxNiwgMHg5OTMwLCAwLCB7MHg4NCwweDJiLDB4YTQsMHgwOCwweDQ4LDB4NDIsMHgxMiwweGNjLDB4YjQsMHg4MCwweDJkLDB4NjQsMHgwYiwweDc4LDB4MDIsMHgxOSB9fSwKKyB7MTYsIDB4OTk0MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHgyYywweDAwLDB4ZDAsMHgxMCwweDI4LDB4YzggfX0sCisgezE2LCAweDk5NTAsIDAsIHsweDBlLDB4M2IsMHgwMiwweDg0LDB4MDAsMHhlMywweDQwLDB4MzAsMHhjOCwweDBjLDB4MzgsMHg2MiwweDhjLDB4MDAsMHg1MywweDAwIH19LAorIHsxNiwgMHg5OTYwLCAwLCB7MHgzMCwweGM0LDB4MWYsMHgwMCwweDIzLDB4OGMsMHgzYywweGYzLDB4ODAsMHgxOCwweGMwLDB4MGQsMHgzMCwweDAzLDB4MGUsMHg4MCB9fSwKKyB7MTYsIDB4OTk3MCwgMCwgezB4ZDMsMHgxMCwweDNjLDB4ODAsMHgwZiwweDMwLDB4MDMsMHg5MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk5ODAsIDAsIHsweDQwLDB4MWQsMHhiZCwweDAwLDB4ZjksMHgxMiwweGI0LDB4YzAsMHgwNywweGIwLDB4MDMsMHhjYywweDAwLDB4NGEsMHgwMCwweDc3IH19LAorIHsxNiwgMHg5OTkwLCAwLCB7MHhjMCwweDBlLDB4NzEsMHg0MywweDZjLDB4MDAsMHhmMywweDAwLDB4M2YsMHhkMCwweDFmLDB4ZDAsMHg1MywweGFjLDB4NjgsMHhmYiB9fSwKKyB7MTYsIDB4OTlhMCwgMCwgezB4MTgsMHgzZCwweGMwLDB4MGYsMHhjMCwweDEzLDB4ZjAsMHg1MCwweGZjLDB4MDQsMHgzZiwweDQwLDB4MGYsMHhmNCwweDAzLDB4OTAgfX0sCisgezE2LCAweDk5YjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWQsMHg0MCwweGY4LDB4MDQsMHgzZSwweGQyIH19LAorIHsxNiwgMHg5OWMwLCAwLCB7MHgwZiwweGIzLDB4MTMsMHhlMCwweDEwLDB4ZjksMHgwMCwweGIyLDB4Y2MsMHgwZSwweGJhLDB4MDMsMHg2ZCwweDgwLDB4ZGIsMHgwMiB9fSwKKyB7MTYsIDB4OTlkMCwgMCwgezB4MzIsMHhkYywweDRmLDB4MDAsMHgwMywweDZjLDB4MDQsMHhmMywweDAyLDB4MzYsMHg0MCwweDBlLDB4YjAsMHgwMywweGNjLDB4MDAgfX0sCisgezE2LCAweDk5ZTAsIDAsIHsweDRiLDB4MDAsMHgzYywweDgwLDB4MGMsMHhmMSwweDAzLDB4NjIsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5OWYwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwMCwweGI0LDB4MDAsMHgyZCwweGM5LDB4MGIsMHg3MCwweDgyLDB4ZGMsMHgwMCwweGJjLDB4MDQsMHgyMSB9fSwKKyB7MTYsIDB4OWEwMCwgMCwgezB4YzQsMHg0YiwweDM3LDB4MDIsMHgwYywweGEwLDB4OGYsMHg3NCwweDIxLDB4YzAsMHgwYiwweDQwLDB4MDIsMHgxYywweDgxLDB4YjcgfX0sCisgezE2LCAweDlhMTAsIDAsIHsweDIwLDB4MmIsMHhjMCwweDA4LDB4NDAsMHgwMiwweGQwLDB4MDIsMHg4NCwweDAwLDB4MmQsMHg0MCwweDBhLDB4ZjIsMHgwMiwweDEyIH19LAorIHsxNiwgMHg5YTIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4ODAsMHhiNCwweGMwLDB4MmQsMHhlNCB9fSwKKyB7MTYsIDB4OWEzMCwgMCwgezB4MGIsMHg3YSwweDAyLDB4ZDIsMHgwMCwweGI1LDB4ODgsMHgyMSwweGU4LDB4MGEsMHg3OCwweDAyLDB4ZGUsMHg0MCwweDk3LDB4MDAgfX0sCisgezE2LCAweDlhNDAsIDAsIHsweDIxLDB4ZTgsMHgwYiwweGNjLDB4NDYsMHg1ZSwweDI4LDB4YjcsMHhjNCwweDIxLDB4ZjAsMHgwYSwweDc4LDB4MDIsMHhmZSwweDA4IH19LAorIHsxNiwgMHg5YTUwLCAwLCB7MHg5NywweDg0LDB4MmQsMHhhMCwweDA4LDB4NzgsMHgwMiwweDcwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWE2MCwgMCwgezB4MDgsMHgxNCwweGNjLDB4MDAsMHhiMCwweGMwLDB4MmMsMHhjMCwweDliLDB4YjAsMHgwMiwweGNjLDB4MjAsMHhiMywweDYwLDB4MjIgfX0sCisgezE2LCAweDlhNzAsIDAsIHsweGMwLDB4MGIsMHgzMCwweDAyLDB4OGMsMHgwMCwweDgzLDB4MDEsMHgyMCwweGMwLDB4MWIsMHgwNiwweDE2LDB4NGYsMHgwMCwweGIzIH19LAorIHsxNiwgMHg5YTgwLCAwLCB7MHhhMCwweDJhLDB4ZjAsMHgwOCwweDAwLDB4MDIsMHhlMCwweDAwLDB4OTAsMHgwMCwweDJjLDB4NDAsMHgwYSwweDMwLDB4MDIsMHgwMiB9fSwKKyB7MTYsIDB4OWE5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDEwLDB4ZmUsMHhjMCwweDNlLDB4ODAgfX0sCisgezE2LCAweDlhYTAsIDAsIHsweDBmLDB4YTAsMHgwMywweGY5LDB4MDgsMHhmZSwweDQwLDB4MjIsMHg4MCwweDBlLDB4YTAsMHgwMywweGU4LDB4MDAsMHhkMiwweDAwIH19LAorIHsxNiwgMHg5YWIwLCAwLCB7MHgzMiwweDgwLDB4OGYsMHhlMCwweDAzLDB4NTgsMHgwMCwweGY2LDB4MDAsMHgzMywweGIwLDB4MGUsMHgyMCwweDAyLDB4ZTgsMHgwYyB9fSwKKyB7MTYsIDB4OWFjMCwgMCwgezB4ZDIsMHgwMiwweDNjLDB4ODAsMHgwYywweGEwLDB4MDMsMHg3YSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlhZDAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgyMCwweDNlLDB4MDEsMHgwYiwweDgwLDB4MDMsMHhlMCwweDAwLDB4ZjAsMHg0MCwweDNlIH19LAorIHsxNiwgMHg5YWUwLCAwLCB7MHgwMCwweDU3LDB4ODAsMHgyMywweDAwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODQsMHgwMywweGEwLDB4MzAsMHgzOCB9fSwKKyB7MTYsIDB4OWFmMCwgMCwgezB4MDAsMHgzYSwweDA4LDB4MGYsMHhjNCwweDAzLDB4ZjAsMHgwMCwweGVjLDB4MDAsMHgzZiwweDEwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfX0sCisgezE2LCAweDliMDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGQ5LDB4MDEsMHgzYywweDQ4IH19LAorIHsxNiwgMHg5YjEwLCAwLCB7MHg0YywweDkwLDB4MGIsMHgyNCwweDAxLDB4YzksMHhjMCwweDMyLDB4NDAsMHhhYywweDkwLDB4MDMsMHhlNCwweDAwLDB4ZDksMHg0MCB9fSwKKyB7MTYsIDB4OWIyMCwgMCwgezB4MzAsMHg0MCwweDBkLDB4OWEsMHgwMywweDIyLDB4ODQsMHhjOCwweDE0LDB4MzIsMHg0MCwweDBlLDB4OTAsMHgwMywweDI0LDB4MDAgfX0sCisgezE2LCAweDliMzAsIDAsIHsweGM5LDB4MDAsMHg4MiwweDY4LDB4MmMsMHg5MCwweDAzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5YjQwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4MDAsMHgyZSwweDQwLDB4MDgsMHg5MCwweDIyLDB4MjQsMHgwMCwweDg5LDB4MDIsMHg4MiB9fSwKKyB7MTYsIDB4OWI1MCwgMCwgezB4NDAsMHgwOCwweDkwLDB4MDIsMHhlNywweDQwLDB4ODksMHg4MCwweDM2LDB4NDEsMHg4ZCwweDE4LDB4MDIsMHhhMCwweDI0LDB4YTggfX0sCisgezE2LCAweDliNjAsIDAsIHsweDA0LDB4NjIsMHg0MCwweDA4LDB4OTQsMHg4MywweDI0LDB4MDAsMHg4OSwweDAxLDB4MjIsMHg3MiwweDA4LDB4OTAsMHgwYiwweDIwIH19LAorIHsxNiwgMHg5YjcwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDA0LDB4MDAsMHg5OSwweDAwLDB4MmEsMHg0MCB9fSwKKyB7MTYsIDB4OWI4MCwgMCwgezB4MjgsMHg5MCwweDEyLDB4MDQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAyLDB4YTQsMHgyMCwweDk5LDB4MDAgfX0sCisgezE2LCAweDliOTAsIDAsIHsweDIyLDB4NDAsMHgxOCwweDkwLDB4MDYsMHgyMCwweDAxLDB4ODgsMHgwOCwweDYyLDB4NDAsMHgwYSwweDkwLDB4MDIsMHgzNCwweDEwIH19LAorIHsxNiwgMHg5YmEwLCAwLCB7MHg4ZCwweDgxLDB4MjMsMHg0MSwweDA4LDB4MTAsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWJiMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHg4MSwweDA0LDB4MmMsMHg0OCwweDA4LDB4MTIsMHgwMiwweDA0LDB4MDIsMHg4MywweDIwLDB4MjAgfX0sCisgezE2LCAweDliYzAsIDAsIHsweDQ4LDB4MDgsMHgxMiwweDAyLDB4YzQsMHg4MCwweDgzLDB4NjAsMHgyNCwweDQ4LDB4MTksMHgzNCwweDYyLDB4YTUsMHgwNCwweGExIH19LAorIHsxNiwgMHg5YmQwLCAwLCB7MHgwMiwweDYwLDB4NDAsMHgwOCwweGQwLDB4MDIsMHg1NCwweDAwLDB4OGQsMHgwMCwweDI5LDB4NDAsMHgwOCwweDEyLDB4ODIsMHgwMiB9fSwKKyB7MTYsIDB4OWJlMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZDgsMHg1MCwweDNhLDB4ODAgfX0sCisgezE2LCAweDliZjAsIDAsIHsweDBjLDB4ODUsMHgwMiwweDIxLDB4NDQsMHg4OCwweDUwLDB4MzIsMHgxNCwweDRjLDB4ODAsMHg0MywweGUwLDB4MDAsMHhkOCwweDAwIH19LAorIHsxNiwgMHg5YzAwLCAwLCB7MHgyMiwweDE0LDB4MGMsMHg4MCwweDAzLDB4MjAsMHgwMCwweGM4LDB4MDAsMHhhMiwweDAwLDB4MGUsMHg4MCwweDAzLDB4MjAsMHgwMCB9fSwKKyB7MTYsIDB4OWMxMCwgMCwgezB4YzgsMHgwMCwweDMzLDB4MDAsMHgwYywweDgyLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDljMjAsIDAsIHsweDk4LDB4MWQsMHhlNCwweDQ0LDB4ZmQsMHgwMCwweDNlLDB4NDQsMHgwZiwweDkxLDB4MDMsMHhmNCwweDEwLDB4ZmYsMHgxMCwweDNlIH19LAorIHsxNiwgMHg5YzMwLCAwLCB7MHg0NCwweDBmLDB4OTEsMHgwMywweGU0LDB4NDAsMHhmOSwweDEwLDB4M2UsMHg0NCwweDBiLDB4ZjAsMHgxMywweGU1LDB4MTAsMHhmOSB9fSwKKyB7MTYsIDB4OWM0MCwgMCwgezB4NDAsMHgzZiwweDRhLDB4MmYsMHg5MiwweDhhLDB4YTQsMHhhMiwweGY5LDB4MjgsMHgzNiwweDQwLDB4MGYsMHg5MiwweDgzLDB4YTYgfX0sCisgezE2LCAweDljNTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDExLDB4ZTYsMHhjMCwweGMxLDB4MDAsMHgzZiwweDY5IH19LAorIHsxNiwgMHg5YzYwLCAwLCB7MHgwYywweDlhLDB4NDMsMHg2YywweDAwLDB4ZmQsMHhhMCwweDNlLDB4NzgsMHgyYywweGQ4LDB4MDcsMHhkNiwweDAyLDB4ZDUsMHg5NiB9fSwKKyB7MTYsIDB4OWM3MCwgMCwgezB4MzIsMHg3OCwweDBkLDB4OTAsMHgwMywweDI3LDB4MDAsMHhmZCwweGEwLDB4MzUsMHg1MCwweDA2LDB4ZDQsMHgwMywweGU1LDB4MDAgfX0sCisgezE2LCAweDljODAsIDAsIHsweGZkLDB4NDAsMHhiMywweDQwLDB4MGYsMHg5OCwweGEzLDB4NDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5YzkwLCAwLCB7MHgzOCwweDEwLDB4ZTMsMHhjMiwweDg4LDB4ODgsMHgyZSwweDE0LDB4YTgsMHg4YSwweGMyLDB4MjIsMHhhMCwweGI4LDB4YzAsMHgyYyB9fSwKKyB7MTYsIDB4OWNhMCwgMCwgezB4MjQsMHg0OCwweDg0LDB4MDIsMHhlMSwweDAwLDB4OTgsMHhjNCwweDIwLDB4M2MsMHgwOCwweDhhLDB4ODIsMHgyMywweDgwLDB4YjggfX0sCisgezE2LCAweDljYjAsIDAsIHsweDA0LDB4MjIsMHgyMCwweDA4LDB4ODgsMHgwMywweGEyLDB4MDAsMHhiOCwweGEwLDB4MjIsMHgwMCwweDBiLDB4ODgsMHgwMiwweDBlIH19LAorIHsxNiwgMHg5Y2MwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4ODAsMHhhMSwweDIwLDB4NmMsMHg0MCB9fSwKKyB7MTYsIDB4OWNkMCwgMCwgezB4MGEsMHgxNCwweDAyLDB4NDQsMHgwNCwweGExLDB4NjgsMHgyYywweDQ4LDB4MDgsMHgxNCwweDAyLDB4YzUsMHgwMCwweDgxLDB4NjAgfX0sCisgezE2LCAweDljZTAsIDAsIHsweDIwLDB4NDgsMHgxOSwweDkwLDB4MDIsMHg4NSwweDgxLDB4YjEsMHg0MCwweDI0LDB4NjgsMHgwYSwweDEyLDB4NDIsMHhjNCwweDgwIH19LAorIHsxNiwgMHg5Y2YwLCAwLCB7MHhiOSwweDIwLDB4MjAsMHg0MCwweDhiLDB4MTAsMHg4MiwweDQyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWQwMCwgMCwgezB4MTgsMHgwNSwweGE0LDB4MTAsMHhhOSwweDAwLDB4NmUsMHhjMCwweDBhLDB4MTAsMHgwMiwweDI0LDB4MTQsMHhiOSwweDAwLDB4MmUgfX0sCisgezE2LCAweDlkMTAsIDAsIHsweDQwLDB4MDgsMHg5MCwweDEyLDB4ZTQsMHgwMCwweDk5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHg4MCwweDA2LDB4YTAsMHg2MCwweGI5IH19LAorIHsxNiwgMHg5ZDIwLCAwLCB7MHgwOSwweDIyLDB4NjAsMHgwOCwweDkwLDB4MDIsMHhhNCwweDAwLDB4YjksMHgwMCwweDAyLDB4NDAsMHgwYiwweDEwLDB4MDYsMHgwNiB9fSwKKyB7MTYsIDB4OWQzMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDUsMHhlNCwweDAwLDB4ZTksMHg4MCwweDNlLDB4NDEgfX0sCisgezE2LCAweDlkNDAsIDAsIHsweDBlLDB4OTAsMHgwMywweDY0LDB4MDAsMHhlOSwweGMwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhjOSwweDAwIH19LAorIHsxNiwgMHg5ZDUwLCAwLCB7MHgyMiwweDQxLDB4MGQsMHg4MCwweDAyLDB4YTMsMHgwNCwweGYxLDB4NDAsMHgzNiwweDQwLDB4MGUsMHg5MCwweDAyLDB4ZTQsMHgwMCB9fSwKKyB7MTYsIDB4OWQ2MCwgMCwgezB4ZjEsMHgwMCwweDEyLDB4NDAsMHgwZiwweDkwLDB4MDMsMHg2OCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlkNzAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAwLDB4ZDksMHgyMiwweDNlLDB4NDIsMHgwZCwweDkwLDB4MDMsMHhlNCwweDAwLDB4YjksMHhjNCwweDNjIH19LAorIHsxNiwgMHg5ZDgwLCAwLCB7MHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhlOSwweDAyLDB4YWUsMHg0MCwweDBmLDB4ODAsMHg0YiwweDYyLDB4MTAsMHhmOSB9fSwKKyB7MTYsIDB4OWQ5MCwgMCwgezB4MjAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDIsMHg3ZSwweDQxLDB4MGYsMHg5MCwweDEzLDB4Y2EgfX0sCisgezE2LCAweDlkYTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAwLDB4ODAsMHgwMCwweGM4LDB4MDAsMHgzOCwweDAwIH19LAorIHsxNiwgMHg5ZGIwLCAwLCB7MHgwZiwweDgwLDB4MjAsMHhlMCwweDAwLDB4YTgsMHgyMCwweDMyLDB4MDAsMHgwYywweDgwLDB4MDcsMHhlMCwweDgwLDB4YzgsMHgwMCB9fSwKKyB7MTYsIDB4OWRjMCwgMCwgezB4MzgsMHgwMCwweDBkLDB4ODAsMHg4MywweDIxLDB4MTAsMHhmOCwweDYwLDB4MzIsMHgwMCwweDhlLDB4ODAsMHhiMywweDIwLDB4MDggfX0sCisgezE2LCAweDlkZDAsIDAsIHsweGY4LDB4MDAsMHgzZSwweDAwLDB4MGMsMHg4MCwweDAzLDB4Y2EsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ZGUwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwNCwweDhhLDB4MDAsMHgzMywweDkwLDB4NDMsMHhhMCwweDIyLDB4MjgsMHgwMCwweDhlLDB4ODAsMHg3NiB9fSwKKyB7MTYsIDB4OWRmMCwgMCwgezB4ODAsMHgwOCwweGUxLDB4MDMsMHgxOSwweDAwLDB4ODYsMHg4MCwweDIyLDB4ODAsMHgwZCwweDYwLDB4MDEsMHg3OCwweDAwLDB4YmUgfX0sCisgezE2LCAweDllMDAsIDAsIHsweDAwLDB4MzYsMHg4MCwweDBjLDB4ZTQsMHgwMiwweGE4LDB4MTAsMHhiZSwweGEwLDB4MmYsMHg4MCwweDBkLDB4YTAsMHgwMiwweDBhIH19LAorIHsxNiwgMHg5ZTEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgxMSwweDRjLDB4MDQsMHgwMywweDA0LDB4MmMsMHhkNCB9fSwKKyB7MTYsIDB4OWUyMCwgMCwgezB4MGIsMHgzMCwweDAyLDB4NGMsMHgwMSwweGEzLDB4YzQsMHgyMCwweGMwLDB4MjgsMHgzNSwweDAyLDB4ODYsMHgwMCwweDgzLDB4ODAgfX0sCisgezE2LCAweDllMzAsIDAsIHsweDI4LDB4YzAsMHgwOCwweDM4LDB4MDYsMHgwZSwweDk0LDB4MzAsMHhjMCwweGEyLDB4YzAsMHgwYiwweDNjLDB4MDIsMHgwYywweDAwIH19LAorIHsxNiwgMHg5ZTQwLCAwLCB7MHhiMywweDgwLDB4MmMsMHg0OCwweDA4LDB4MzAsMHgwMiwweDhhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWU1MCwgMCwgezB4YTAsMHgwMSwweDBjLDB4MDQsMHg4ZiwweDgwLDB4MjEsMHhjMSwweDFiLDB4NzIsMHg0MiwweDFlLDB4YzAsMHg4MywweDg4LDB4MjEgfX0sCisgezE2LCAweDllNjAsIDAsIHsweGMwLDB4MTgsMHgyOCwweDA2LDB4MTAsMHgyMSwweDg2LDB4MzgsMHgyMSwweGMwLDB4MTksMHhmNywweDAyLDB4NWQsMHhjMCwweGI0IH19LAorIHsxNiwgMHg5ZTcwLCAwLCB7MHg0MSwweDI3LDB4ZDAsMHgwOCwweDc4LDB4YzYsMHg5YywweDAwLDB4YjcsMHgwMCwweDJmLDB4NjAsMHgwOSwweDcyLDB4MDIsMHgyOCB9fSwKKyB7MTYsIDB4OWU4MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAyLDB4YzcsMHg4MCwweDJkLDB4YTAgfX0sCisgezE2LCAweDllOTAsIDAsIHsweDBmLDB4M2UsMHgwMywweGZlLDB4ODAsMHhhNywweDgwLDB4YTEsMHhlMCwweDBjLDB4NzgsMHgwMiwweDk0LDB4MDAsMHg4NSwweGEwIH19LAorIHsxNiwgMHg5ZWEwLCAwLCB7MHgzOSwweGU0LDB4MGMsMHg3OCwweDEzLDB4MWUsMHg5MCwweGI1LDB4ODQsMHgzMSwweGUwLDB4MGYsMHhmOCwweDg3LDB4MWUsMHgwNCB9fSwKKyB7MTYsIDB4OWViMCwgMCwgezB4ZjcsMHg4MCwweDNkLDB4NjAsMHgwYywweDNiLDB4MDMsMHhhYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDllYzAsIDAsIHsweDA4LDB4MWQsMHhhZCwweGU0LDB4ZmIsMHg1NCwweDNlLDB4ODAsMHgwZiwweGI0LDB4MjMsMHhlYywweDMyLDB4ZmIsMHgwMCwweDNlIH19LAorIHsxNiwgMHg5ZWQwLCAwLCB7MHhkOCwweDRmLDB4YTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHhjMCwweDBmLDB4MzAsMHgzMywweGVjLDB4MDQsMHhmMiB9fSwKKyB7MTYsIDB4OWVlMCwgMCwgezB4MDEsMHgzZSwweGMwLDB4MGYsMHhiMiwweDAzLDB4ZmUsMHgxMCwweGZiLDB4NjgsMHgzYywweDQxLDB4MGYsMHhmMCwweDQzLDB4ODIgfX0sCisgezE2LCAweDllZjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4ZmUsMHgwMCwweGNmLDB4ZTQsMHgzZiwweGU0IH19LAorIHsxNiwgMHg5ZjAwLCAwLCB7MHgwYywweGZjLDB4MDMsMHg3ZSwweDgwLDB4Y2YsMHg4MSwweDMzLDB4ZmEsMHgwZiwweGY4LDB4MDMsMHhmNiwweDAwLDB4ZmYsMHg4MCB9fSwKKyB7MTYsIDB4OWYxMCwgMCwgezB4M2YsMHhlMiwweDBmLDB4NzksMHgwMywweDNlLDB4NDAsMHhmNCwweDgwLDB4MzMsMHg2MCwweDBjLDB4ZTgsMHgwMywweDNlLDB4MDAgfX0sCisgezE2LCAweDlmMjAsIDAsIHsweGZmLDB4ODAsMHgzMywweDYwLDB4MGMsMHhmOCwweDgzLDB4NTAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ZjMwLCAwLCB7MHhhOCwweDExLDB4OWMsMHgwMCwweGQ3LDB4YTAsMHgyZCwweGM0LDB4MDgsMHhiYSwweDAyLDB4M2MsMHhhMCwweDg3LDB4MjAsMHgyMSB9fSwKKyB7MTYsIDB4OWY0MCwgMCwgezB4YzAsMHgwZiwweDUyLDB4MDMsMHhkNCwweDAwLDB4YjYsMHgxMCwweDJkLDB4YzAsMHg4YiwweDczLDB4MDMsMHg1YywweDQwLDB4YjQgfX0sCisgezE2LCAweDlmNTAsIDAsIHsweGIwLDB4MmIsMHg0OCwweDI4LDB4NDEsMHgwMiwweDBjLDB4MDAsMHhiZiwweDE4LDB4MzUsMHg0NiwweDI4LDB4NzIsMHg0MiwweDJhIH19LAorIHsxNiwgMHg5ZjYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMCwweDljLDB4MDAsMHg4NywweDQxLDB4MmQsMHg0NCB9fSwKKyB7MTYsIDB4OWY3MCwgMCwgezB4MGEsMHg3MywweDAyLDB4OWMsMHhjNCwweDgxLDB4MDAsMHg2ZCwweGM4LDB4OGIsMHg3MCwweDAyLDB4ZDQsMHgwMCwweGI3LDB4MDAgfX0sCisgezE2LCAweDlmODAsIDAsIHsweDJkLDB4YzAsMHgwYiwweGYwLDB4NDYsMHg5YywweDU1LDB4YjQsMHgyMCwweDI1LDB4NDAsMHgxOCwweDYwLDB4ODIsMHgxYywweDAwIH19LAorIHsxNiwgMHg5ZjkwLCAwLCB7MHhiNywweDAwLDB4MjMsMHg0MCwweDA4LDB4NzAsMHg0NiwweDQ0LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWZhMCwgMCwgezB4NjAsMHgxNCwweGNjLDB4MDAsMHg5MywweDAwLDB4MmMsMHg0MCwweDBiLDB4YjAsMHgwMiwweDBjLDB4ODIsMHg4MCwweGMwLDB4MjAgfX0sCisgezE2LCAweDlmYjAsIDAsIHsweGMwLDB4MGEsMHgxMCwweDAyLDB4MDQsMHgwMCwweGIzLDB4MDAsMHgyYywweGMwLDB4MWIsMHgzMCwweDAwLDB4Y2QsMHgwMSwweGIwIH19LAorIHsxNiwgMHg5ZmMwLCAwLCB7MHg0MCwweGFjLDB4NzgsMHg4OCwweDhjLDB4MDYsMHgwZCwweDYwLDB4YjMsMHg0YywweDI0LDB4MTIsMHgwOCwweDMwLDB4MGEsMHgxOCB9fSwKKyB7MTYsIDB4OWZkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MTUsMHhiYywweDAwLDB4YzcsMHgwMCwweDJlLDB4NDAgfX0sCisgezE2LCAweDlmZTAsIDAsIHsweDBlLDB4ZjAsMHgyYSwweGJmLDB4MDAsMHhjOCwweGM4LDB4YmYsMHhjMCwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDQsMHhiZiwweDAwIH19LAorIHsxNiwgMHg5ZmYwLCAwLCB7MHgzZiwweGMwLDB4MGYsMHhiMiwweDBhLDB4YWMsMHgwMCwweGY4LDB4ODAsMHgzNCwweDQ5LDB4MGMsMHhiOSwweDBiLDB4M2YsMHgwMCB9fSwKKyB7MTYsIDB4YTAwMCwgMCwgezB4ZmIsMHhjMCwweDMwLDB4ZjAsMHgwYywweGYwLDB4MDMsMHg2ZSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGEwMTAsIDAsIHsweDgwLDB4MDAsMHhjYywweDAwLDB4ZmIsMHg4MCwweDNlLDB4NDEsMHgyYywweGIwLDB4MTMsMHhhYywweDAwLDB4ZjgsMHgwMCwweDNlIH19LAorIHsxNiwgMHhhMDIwLCAwLCB7MHhjMSwweDBmLDB4YTAsMHgwMywweGU4LDB4MDAsMHhmYSwweDQwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwYiwweDZkLDB4NDAsMHhmOCB9fSwKKyB7MTYsIDB4YTAzMCwgMCwgezB4MTAsMHgzYSwweDQwLDB4MGYsMHhiMCwweDAzLDB4ZWMsMHgxMCwweGZlLDB4NDAsMHgzZSwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZTEgfX0sCisgezE2LCAweGEwNDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4ZWMsMHgwYywweGRmLDB4MDAsMHgzYiwweDgwIH19LAorIHsxNiwgMHhhMDUwLCAwLCB7MHgwZiwweGYwLDB4MGIsMHgzYywweDA4LDB4ZTcsMHgwOCwweDMzLDB4YzAsMHgwYiwweGQwLDB4MjMsMHg3NCwweDAwLDB4NTQsMHgwMCB9fSwKKyB7MTYsIDB4YTA2MCwgMCwgezB4MzMsMHhjMCwweDBmLDB4ZjAsMHg4MywweGJlLDB4MjAsMHhmZCwweDBjLDB4M2IsMHg2MCwweDJjLDB4ZTAsMHgwMywweDNjLDB4MDAgfX0sCisgezE2LCAweGEwNzAsIDAsIHsweGNmLDB4MTIsMHgzMywweDUwLDB4MGMsMHgzMCwweDAzLDB4ODAsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMDgwLCAwLCB7MHg4MSwweDA0LDB4NmMsMHgwNCwweGFiLDB4MDAsMHgyMiwweGEwLDB4MGIsMHhiMCwweDA2LDB4MGMsMHgwMCwweGFiLDB4NDAsMHgzNiB9fSwKKyB7MTYsIDB4YTA5MCwgMCwgezB4YzAsMHgwYiwweGE4LDB4MDIsMHg2NiwweDAwLDB4YjgsMHgwMCwweDM2LDB4YzEsMHgwYiwweDM0LDB4NDMsMHhlZSwweDAwLDB4YjIgfX0sCisgezE2LCAweGEwYTAsIDAsIHsweDAwLDB4MjIsMHg2MCwweDA4LDB4YjQsMHg4MiwweDhjLDB4MDQsMHg4YSwweDIxLDB4MjIsMHg0MCwweDA4LDB4YjAsMHgwMiwweDIwIH19LAorIHsxNiwgMHhhMGIwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHg5YiwweDAwLDB4MmEsMHgyMCB9fSwKKyB7MTYsIDB4YTBjMCwgMCwgezB4MGIsMHhiMCwweDAyLDB4MmMsMHgwMCwweDg4LDB4YzUsMHgyMiwweGMwLDB4MGIsMHg4OCwweDgyLDB4ZTYsMHgwMSwweGJiLDB4MDggfX0sCisgezE2LCAweGEwZDAsIDAsIHsweDIyLDB4YzAsMHgwYSwweGIyLDB4ODIsMHhhYywweDYwLDB4YjgsMHgwMiwweDRhLDB4YzQsMHgwOCwweGIxLDB4MDIsMHgyYywweDAwIH19LAorIHsxNiwgMHhhMGUwLCAwLCB7MHg4MywweDAwLDB4MjIsMHhjMCwweDA4LDB4YjAsMHgwMiwweGEwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTBmMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDAsMHhhYiwweDIwLDB4MjAsMHgwMSwweDBiLDB4MzIsMHgwNiwweDJjLDB4MDAsMHhhMCwweDAwLDB4MjAgfX0sCisgezE2LCAweGExMDAsIDAsIHsweGMwLDB4MDksMHgwNCwweDIyLDB4YzQsMHgwMCwweGIyLDB4MDAsMHgyNCwweGMxLDB4OGIsMHhiMCwweDAyLDB4NGMsMHgwMCwweGIwIH19LAorIHsxNiwgMHhhMTEwLCAwLCB7MHgwMCwweDYyLDB4YzAsMHg0OCwweDMwLDB4MDIsMHhhYywweDEwLDB4ODIsMHgwMCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHgwMiB9fSwKKyB7MTYsIDB4YTEyMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg3YywweDA4LDB4ZGYsMHgyYSwweDNhLDB4MDAgfX0sCisgezE2LCAweGExMzAsIDAsIHsweDBmLDB4ZjUsMHgxMiwweDNjLDB4MTAsMHhjOSwweDAwLDB4YTMsMHhjMCwweDBmLDB4ODAsMHg1MywweGVjLDB4MDEsMHhkYSwweDAwIH19LAorIHsxNiwgMHhhMTQwLCAwLCB7MHgzMywweGMwLDB4MGUsMHhiMCwweDAzLDB4YWMsMHgwNCwweGY4LDB4NzAsMHgzYSwweGMwLDB4MGMsMHg2MCwweDQzLDB4MmMsMHg0MiB9fSwKKyB7MTYsIDB4YTE1MCwgMCwgezB4Y2QsMHgwMCwweGIyLDB4NDAsMHgyYywweGYwLDB4MDMsMHg4MCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGExNjAsIDAsIHsweGEwLDB4MTksMHhmYywweDAwLDB4ZmIsMHgwMSwweDNkLDB4MDAsMHgwZiwweGI0LDB4MTcsMHhmYywweDAwLDB4M2MsMHgwMCwweDNmIH19LAorIHsxNiwgMHhhMTcwLCAwLCB7MHhjMCwweDRmLDB4YzAsMHgwMywweDc0LDB4MDgsMHhmZSwweDAwLDB4M2YsMHhjMCwweDRmLDB4ZjAsMHgwMywweGZjLDB4MDgsMHhmOCB9fSwKKyB7MTYsIDB4YTE4MCwgMCwgezB4MzAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwNCwweGZjLDB4MDAsMHgzZCwweDAwLDB4MGYsMHhmMCwweDAzLDB4ZTggfX0sCisgezE2LCAweGExOTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZjQsMHg5MCwweGVmLDB4MDAsMHgzZiwweGQ4IH19LAorIHsxNiwgMHhhMWEwLCAwLCB7MHgwZSwweGYzLDB4MDMsMHgyYywweDAxLDB4ZDQsMHg4MCwweDM3LDB4Y2MsMHgwZCwweDg5LDB4NDMsMHgxMiwweDUwLDB4ZWMsMHgyYyB9fSwKKyB7MTYsIDB4YTFiMCwgMCwgezB4MzIsMHgwNSwweDBkLDB4YjAsMHg1MywweDNjLDB4ZDQsMHhjNSwweDk0LDB4N2YsMHhhMCwweDhmLDB4ZjAsMHg0MywweDMwLDB4MDAgfX0sCisgezE2LCAweGExYzAsIDAsIHsweGRjLDB4MDAsMHgzMywweDAwLDB4MGMsMHg0OCwweDA3LDB4ZjAsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMWQwLCAwLCB7MHg4MCwweDEwLDB4ZTYsMHg0MCwweDhiLDB4NzAsMHgyZiwweGRjLDB4MDgsMHhmNywweDAyLDB4MGMsMHg4MCwweDhhLDB4MjAsMHgwMCB9fSwKKyB7MTYsIDB4YTFlMCwgMCwgezB4YzgsMHg0YSwweDIyLDB4MDIsMHhhMCwweDAwLDB4OGEsMHg0OCwweDIyLDB4NTgsMHg4OCwweGZkLDB4MDIsMHhhZCwweDAyLDB4YTkgfX0sCisgezE2LCAweGExZjAsIDAsIHsweDIwLDB4MWUsMHhhMCwweDAzLDB4ODAsMHgwMiwweDJjLDB4MDQsMHg4YiwweDAwLDB4MjIsMHhjMCwweDRjLDB4ODgsMHgwNywweDYwIH19LAorIHsxNiwgMHhhMjAwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGMwLDB4MDAsMHgyMywweDJjLDB4MmMsMHhjOSB9fSwKKyB7MTYsIDB4YTIxMCwgMCwgezB4MDIsMHgzMCwweDAyLDB4MGMsMHg2OCwweGEwLDB4MjgsMHgyYywweGQwLDB4MDksMHgxMiwweDAyLDB4ODQsMHgwMCwweGEwLDB4MjEgfX0sCisgezE2LCAweGEyMjAsIDAsIHsweDIwLDB4MTgsMHgxOSwweDMwLDB4MjIsMHg4MCwweGQwLDB4ODMsMHgwNiwweDBjLDB4YTAsMHgwYiwweGIwLDB4MDYsMHgwMCwweDEyIH19LAorIHsxNiwgMHhhMjMwLCAwLCB7MHhhMCwweDAwLDB4MjAsMHgwMCwweDI5LDB4MDAsMHgwZSwweGEyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTI0MCwgMCwgezB4YzAsMHgxMSwweGE4LDB4MzAsMHg4YiwweDAwLDB4MmUsMHhjMCwweDRhLDB4MzAsMHgwYSwweDJjLDB4MTQsMHhhMCwweDgwLDB4MGEgfX0sCisgezE2LCAweGEyNTAsIDAsIHsweGMxLDB4MDgsMHg4OCwweDg2LDB4ODcsMHgwMCwweDgzLDB4MDAsMHgyMiwweDQ5LDB4MDgsMHhiMCwweDA2LDB4YTAsMHg0MCwweGFiIH19LAorIHsxNiwgMHhhMjYwLCAwLCB7MHgyMCwweDIyLDB4MjAsMHgwYiwweDgwLDB4MGEsMHgwYywweDA0LDB4YWIsMHgwMiwweDIyLDB4YzAsMHg4OCwweDgwLDB4MDIsMHhmMCB9fSwKKyB7MTYsIDB4YTI3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlZiwweDQwLDB4ZWIsMHgwNiwweDNlLDB4YzAgfX0sCisgezE2LCAweGEyODAsIDAsIHsweDBlLDB4YjAsMHgwMywweDJjLDB4MDIsMHhmOSwweGEwLDB4M2UsMHhjMCwweDBkLDB4OGMsMHgwMywweGFhLDB4MTAsMHhlOSwweDQwIH19LAorIHsxNiwgMHhhMjkwLCAwLCB7MHhiMiwweDQ4LDB4MGQsMHhiMCwweDQzLDB4YWQsMHgwMCwweGNiLDB4ODYsMHgyZSwweDIwLDB4MGYsMHgzMCwweDAzLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4YTJhMCwgMCwgezB4ZjksMHg4MCwweDMyLDB4YzAsMHgwZCwweDBjLDB4YzIsMHg5MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGEyYjAsIDAsIHsweGUwLDB4MDEsMHg5NCwweDAwLDB4ZmYsMHgwMCwweDNkLDB4YzAsMHgwZCwweGYwLDB4MDMsMHg3YywweDAwLDB4ZGYsMHgwMCwweDM3IH19LAorIHsxNiwgMHhhMmMwLCAwLCB7MHhjMCwweDBmLDB4ZTAsMHgwMywweGYwLDB4MDAsMHhmZSwweDIwLDB4M2YsMHg0MCwweDBmLDB4NzAsMHgwMywweGZlLDB4MDAsMHhmZiB9fSwKKyB7MTYsIDB4YTJkMCwgMCwgezB4ODIsMHg3ZiwweDAwLDB4MGYsMHhjMCwweDAzLDB4ZjksMHgwNCwweGRlLDB4MjAsMHhiZCwweDAwLDB4MGYsMHhkOSwweDBiLDB4N2MgfX0sCisgezE2LCAweGEyZTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMSwweGNiLDB4MDAsMHgzZSwweGMwIH19LAorIHsxNiwgMHhhMmYwLCAwLCB7MHgyYywweGIwLDB4MGIsMHgyYywweDAwLDB4ZTgsMHg0MCwweDNlLDB4YzAsMHgwZiwweDk0LDB4MDcsMHgyOSwweDAwLDB4YzksMHg0MCB9fSwKKyB7MTYsIDB4YTMwMCwgMCwgezB4YjIsMHhjMCwweDBmLDB4YjAsMHgwMywweDAxLDB4MDIsMHhjYiwweDAwLDB4MzIsMHgwNCwweDRmLDB4ZjAsMHg0MywweDM0LDB4YzAgfX0sCisgezE2LCAweGEzMTAsIDAsIHsweGI1LDB4MWEsMHgzZiwweGMxLDB4MGYsMHg4MCwweDkzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMzIwLCAwLCB7MHhjOCwweDA1LDB4MjgsMHgwMCwweDhmLDB4MDAsMHgyZiwweGMwLDB4MDgsMHhmMCwweDAyLDB4M2MsMHgwNCwweGQ4LDB4MDAsMHgyYiB9fSwKKyB7MTYsIDB4YTMzMCwgMCwgezB4YzAsMHgwYywweDgwLDB4NDUsMHg2MCwweDAwLDB4N2IsMHg1OCwweDIyLDB4YzgsMHgwYiwweGZhLDB4MDEsMHg2MSwweDQwLDB4OGIgfX0sCisgezE2LCAweGEzNDAsIDAsIHsweDAwLDB4MzIsMHgwNCwweDRiLDB4Y2UsMHgwMiwweDI4LDB4MDAsMHgzYSwweDQwLDB4MmUsMHgwNywweDBiLDB4OTAsMHgwMiwweDI2IH19LAorIHsxNiwgMHhhMzUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MDAsMHg4MywweDAxLDB4NGMsMHhjMCB9fSwKKyB7MTYsIDB4YTM2MCwgMCwgezB4MGIsMHgzMCwweDAyLDB4ZWMsMHgxMCwweDkwLDB4MDAsMHgyYSwweGMwLDB4MGEsMHg4MCwweDA2LDB4YzAsMHgwNCwweDgzLDB4MDQgfX0sCisgezE2LCAweGEzNzAsIDAsIHsweGEyLDB4ODksMHgxOSwweDMwLDB4MDYsMHhjYywweDAwLDB4ODMsMHgwMCwweDIwLDB4OTAsMHgwYiwweDMwLDB4YzIsMHg0OCwweDAwIH19LAorIHsxNiwgMHhhMzgwLCAwLCB7MHhiMiwweDQwLDB4MjQsMHgyMCwweDBiLDB4MDksMHgwMCwweGI4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTM5MCwgMCwgezB4MjAsMHgwMSwweDA2LDB4MDQsMHg4NywweGE0LDB4MmQsMHhlMCwweDA5LDB4MzgsMHgwMiwweGRlLDB4MDAsMHg5ZSwweDgxLDB4MjkgfX0sCisgezE2LCAweGEzYTAsIDAsIHsweGUwLDB4MDgsMHg3OCwweDUyLDB4ZmEsMHhjMCwweDk2LDB4ODAsMHgwMSwweGEwLDB4OGIsMHgzYSwweDIyLDB4Y2UsMHg0MCwweDhmIH19LAorIHsxNiwgMHhhM2IwLCAwLCB7MHhiMCwweDI1LDB4YTAsMHgwYiwweDA4LDB4MDIsMHg1NiwweDA4LDB4YjUsMHg5MCwweDJkLDB4ZTQsMHg0YiwweGQ4LDB4MjIsMHgwYyB9fSwKKyB7MTYsIDB4YTNjMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwOCwweDAyLDB4ODMsMHg4MCwweDJlLDB4ZTggfX0sCisgezE2LCAweGEzZDAsIDAsIHsweDBiLDB4MzgsMHgxMywweGNlLDB4NDEsMHhkMywweDEwLDB4MjgsMHhjMCwweDBlLDB4M2EsMHgwMiwweGM2LDB4MDgsMHg0YiwweDQwIH19LAorIHsxNiwgMHhhM2UwLCAwLCB7MHgzMCwweDYwLDB4MGQsMHgzYiwweDI3LDB4Y2YsMHhjNCwweGMzLDB4YTAsMHgzMCwweDAwLDB4MGYsMHgzMCwweDQzLDB4NDgsMHg0MCB9fSwKKyB7MTYsIDB4YTNmMCwgMCwgezB4ZjIsMHgwMCwweDNjLDB4MDQsMHgwZiwweDAyLDB4MDMsMHg5MiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE0MDAsIDAsIHsweDQwLDB4MWQsMHhiOCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzQsMHgwZSwweGYxLDB4MDMsMHgzYywweDAwLDB4ZmYsMHgwMSwweDMzIH19LAorIHsxNiwgMHhhNDEwLCAwLCB7MHhjMCwweDRkLDB4YjEsMHgwNywweDdjLDB4OTAsMHhmZiwweDAwLDB4M2YsMHg0MCwweDAzLDB4ZjEsMHgwMywweDcwLDB4MDAsMHhmYiB9fSwKKyB7MTYsIDB4YTQyMCwgMCwgezB4MTAsMHgzYiwweDAwLDB4MGYsMHhjMCwweDBiLDB4YjQsMHgwMCwweGZkLDB4MDAsMHgzZiwweGM0LDB4MGYsMHhkMCwweDAzLDB4OTAgfX0sCisgezE2LCAweGE0MzAsIDAsIHsweDAyLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHgwNCwweGZiLDB4ODQsMHgzYSwweGMyIH19LAorIHsxNiwgMHhhNDQwLCAwLCB7MHg0YywweGI0LDB4OTMsMHgyYywweDA0LDB4ZTksMHgwMCwweDNhLDB4YzQsMHg4ZCwweDA4LDB4MDMsMHgyZSwweDAwLDB4Y2IsMHgwMSB9fSwKKyB7MTYsIDB4YTQ1MCwgMCwgezB4MzIsMHg4MCwweDhmLDB4YjIsMHg4MywweGVjLDB4MDAsMHhjYiwweDgwLDB4MzIsMHgwMCwweDBmLDB4ZjksMHgwMywweDNjLDB4MTAgfX0sCisgezE2LCAweGE0NjAsIDAsIHsweGRmLDB4ODEsMHhiMywweGUwLDB4OGMsMHhhMCwweDAzLDB4ZWEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNDcwLCAwLCB7MHg0OCwweDExLDB4OTQsMHgwOCwweGI3LDB4MDQsMHgyNCwweGM4LDB4MWEsMHgzMCwweDRhLDB4MWQsMHgwMCwweGI3LDB4MDEsMHgyZCB9fSwKKyB7MTYsIDB4YTQ4MCwgMCwgezB4YzAsMHg4OCwweDcwLDB4MDYsMHgxYywweDAwLDB4ODIsMHgwMCwweDIxLDB4ODAsMHg0YiwweDc2LDB4MTIsMHhkYywweDAwLDB4ODcgfX0sCisgezE2LCAweGE0OTAsIDAsIHsweDAwLDB4MjksMHg0MCwweDhiLDB4NDAsMHgwMiwweDEwLDB4MDAsMHhiYywweDAwLDB4MjAsMHgwMSwweDI4LDB4NzAsMHgwMywweGIyIH19LAorIHsxNiwgMHhhNGEwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDlhLDB4MDAsMHhiMywweDkwLDB4MmQsMHhlNCB9fSwKKyB7MTYsIDB4YTRiMCwgMCwgezB4MDksMHg3OSwweDAyLDB4MWUsMHg4MCwweGE3LDB4ODAsMHgyYywweGU4LDB4MTksMHhmOCwweDEyLDB4NWUsMHgwMSwweDg3LDB4ODAgfX0sCisgezE2LCAweGE0YzAsIDAsIHsweDI1LDB4ZTAsMHg0YiwweDc4LDB4MDYsMHhkMiwweDAwLDB4OTcsMHg4MCwweDIxLDB4NjIsMHgwYiwweDNhLDB4MDIsMHgxZSwweDAwIH19LAorIHsxNiwgMHhhNGQwLCAwLCB7MHhiNywweDg2LDB4MjksMHhmMCwweDA4LDB4NjgsMHgwNiwweGUwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTRlMCwgMCwgezB4NDgsMHgxNCwweGNmLDB4YzAsMHhiMywweDAwLDB4MjQsMHhjMCwweDhhLDB4MzAsMHgzMiwweDBjLDB4MDAsMHhiMywweDA4LDB4MmMgfX0sCisgezE2LCAweGE0ZjAsIDAsIHsweGMwLDB4MDgsMHgzMCwweDEyLDB4MGUsMHgyMCwweDgzLDB4MDAsMHgyNCwweGYxLDB4MGIsMHgzMCwweDA2LDB4Y2UsMHgwMCwweDgzIH19LAorIHsxNiwgMHhhNTAwLCAwLCB7MHg5MCwweDI4LDB4NjAsMHgwYiwweDAwLDB4MmEsMHgyMSwweDgwLDB4YjAsMHgwOCwweDI4LDB4MDAsMHgwOCwweDM3LDB4MDIsMHg5MiB9fSwKKyB7MTYsIDB4YTUxMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOSwweDAwLDB4ZmEsMHgwMCwweDNlLDB4ODAgfX0sCisgezE2LCAweGE1MjAsIDAsIHsweDRkLDB4YTAsMHgwMywweDI4LDB4MDAsMHhlZSwweDQxLDB4M2UsMHg4MCwweDBkLDB4ZTAsMHgwMywweDc4LDB4MDAsMHg4ZSwweDQwIH19LAorIHsxNiwgMHhhNTMwLCAwLCB7MHgyNywweGE4LDB4MGIsMHhhMCwweDAzLDB4ZmIsMHgwMiwweGNhLDB4ODIsMHgzMywweGEwLDB4MGYsMHhhMCwweDEzLDB4MjksMHgwMCB9fSwKKyB7MTYsIDB4YTU0MCwgMCwgezB4ZmEsMHg0MCwweDNhLDB4ODAsMHgwYywweDZjLDB4MDMsMHhmYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE1NTAsIDAsIHsweDQ4LDB4MDAsMHhjMCwweDAwLDB4ZjgsMHgwMCwweDNhLDB4MDAsMHgwYywweDgwLDB4MDMsMHhlMCwweDA4LDB4ZjgsMHgwMCwweDNlIH19LAorIHsxNiwgMHhhNTYwLCAwLCB7MHgwMCwweDhmLDB4ODAsMHgyMywweGEwLDB4NDIsMHhmOCwweDA5LDB4YmEsMHgxMCwweDRmLDB4ODAsMHgwMywweGUwLDB4NjAsMHhmOCB9fSwKKyB7MTYsIDB4YTU3MCwgMCwgezB4MDAsMHgzZSwweDIwLDB4MGYsMHhjMCwweDAzLDB4ZjAsMHgwMCwweGZjLDB4MDAsMHgyNywweDAwLDB4OGYsMHg4MCwweDAzLDB4OTIgfX0sCisgezE2LCAweGE1ODAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTUsMHgwMCwweDg5LDB4MDAsMHgzZSwweDQwIH19LAorIHsxNiwgMHhhNTkwLCAwLCB7MHg2ZSwweDkwLDB4MDMsMHhhNCwweDA4LDB4YzksMHgwMCwweDNjLDB4NDAsMHgwZCwweDkwLDB4MDMsMHgyNCwweDEwLDB4ZjksMHhhMCB9fSwKKyB7MTYsIDB4YTVhMCwgMCwgezB4MzIsMHg0MiwweDBjLDB4OTAsMHgxMywweGM0LDB4MDAsMHhjOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4NDAgfX0sCisgezE2LCAweGE1YjAsIDAsIHsweGM5LDB4MjAsMHgzZSwweDUyLDB4Y2YsMHg5MCwweDA5LDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNWMwLCAwLCB7MHg4MCwweDA0LDB4NjYsMHgwMCwweDg5LDB4MDQsMHgyZSwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCwweGQ5LDB4MDAsMHgzYSB9fSwKKyB7MTYsIDB4YTVkMCwgMCwgezB4NDEsMHgwOCwweDkwLDB4MDUsMHhhNCwweDAwLDB4YjksMHg0MCwweGEyLDB4NDAsMHgwZCwweDkwLDB4MDIsMHhlNSwweDQ2LDB4ODkgfX0sCisgezE2LCAweGE1ZTAsIDAsIHsweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgxMiwweGU1LDB4MDAsMHhhOSwweGM4LDB4MmUsMHg2MSwweDhiLDB4OTQsMHg0MiwweDIwIH19LAorIHsxNiwgMHhhNWYwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMSwweDI0LDB4MDAsMHhhOSwweDAwLDB4NmMsMHg0MCB9fSwKKyB7MTYsIDB4YTYwMCwgMCwgezB4NDgsMHgxMCwweDIyLDB4ODQsMHgwMywweGE5LDB4MDAsMHgyZSwweDQwLDB4MDksMHg5MCwweDAyLDB4ZTQsMHgwNCwweGIxLDB4MDggfX0sCisgezE2LCAweGE2MTAsIDAsIHsweDI4LDB4NDAsMHgxOCwweDk4LDB4MDIsMHhlNSwweDAwLDB4ODksMHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhmNCwweDIwIH19LAorIHsxNiwgMHhhNjIwLCAwLCB7MHg4ZCwweDAwLDB4MmYsMHg0MCwweDBiLDB4OTQsMHg0MiwweDg2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTYzMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHhhMSwweDI0LDB4MmMsMHg0OCwweDE4LDB4MTIsMHgwMiwweDA0LDB4ODAsMHhhMSwweDAwLDB4MjggfX0sCisgezE2LCAweGE2NDAsIDAsIHsweDQ4LDB4MDgsMHgxMCwweDAyLDB4ODQsMHgwMCwweDkxLDB4MjAsMHgyMCwweDQ4LDB4MDksMHgxMiwweDAyLDB4YzQsMHg5NCwweDgxIH19LAorIHsxNiwgMHhhNjUwLCAwLCB7MHgwMCwweDJjLDB4NjEsMHgwYiwweDVhLDB4ODIsMHhkNCwweGEwLDB4YTUsMHgyOCwweDJkLDB4NGEsMHgwYiwweDkwLDB4MDIsMHg4MiB9fSwKKyB7MTYsIDB4YTY2MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAyLDB4ZTgsMHg1MCwweDJlLDB4MTQgfX0sCisgezE2LCAweGE2NzAsIDAsIHsweDBlLDB4ODUsMHgwMywweGExLDB4NDAsMHhhOCwweDUwLDB4M2UsMHgxNCwweDBkLDB4ODUsMHgwMSwweDgxLDB4NDAsMHhmOCwweDUyIH19LAorIHsxNiwgMHhhNjgwLCAwLCB7MHgzMiwweDk0LDB4MGMsMHg4MCwweDEzLDB4YzEsMHg0MiwweGMwLDB4NTEsMHgzZSwweDAwLDB4OGYsMHg4MiwweDAzLDB4ZTAsMHg4MCB9fSwKKyB7MTYsIDB4YTY5MCwgMCwgezB4YzgsMHgyMCwweDNmLDB4MDgsMHgwZiwweDgwLDB4MDMsMHhhZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE2YTAsIDAsIHsweDk4LDB4MTksMHhmNCwweDUwLDB4ZDksMHgxMSwweDNlLDB4NDQsMHg4ZiwweDkxLDB4NDMsMHhlNCwweDQwLDB4ZGQsMHgwMCwweDNhIH19LAorIHsxNiwgMHhhNmIwLCAwLCB7MHg0NCwweDRmLDB4ZDAsMHgyNywweGI0LDB4MDAsMHhmZCwweDEyLDB4M2YsMHg0NCwweDRmLDB4OTEsMHg0MywweGY0LDB4NDAsMHhmZCB9fSwKKyB7MTYsIDB4YTZjMCwgMCwgezB4MDAsMHgzZiwweDQxLDB4MGYsMHg5MiwweDgzLDB4ZTQsMHhhMCwweGY5LDB4MjgsMHgzZSwweDRhLDB4MGYsMHhkMCwweDAzLDB4NjYgfX0sCisgezE2LCAweGE2ZDAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDExLDB4ZjYsMHg4MCwweGU5LDB4YzAsMHgzZSwweDc4IH19LAorIHsxNiwgMHhhNmUwLCAwLCB7MHg4ZiwweDliLDB4MDMsMHhhNywweDgwLDB4YzksMHg0MCwweDM2LDB4NzgsMHgwZiwweDEwLDB4MjMsMHhlNSwweDA0LDB4ZGQsMHhhNCB9fSwKKyB7MTYsIDB4YTZmMCwgMCwgezB4MzMsMHg2MiwweDBmLDB4ZGEsMHgwMywweGY2LDB4NjAsMHhjOSwweDEwLDB4MzMsMHg0MCwweDBlLDB4OTgsMHg5MywweGU2LDB4MzAgfX0sCisgezE2LCAweGE3MDAsIDAsIHsweGM5LDB4YzksMHgzMiwweDc4LDB4OGMsMHhkMCwweDBiLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNzEwLCAwLCB7MHgzOCwweDEwLDB4ZTAsMHgwMCwweDg4LDB4ZTIsMHgyZSwweDMwLDB4MGIsMHg4OCwweDQyLDB4MjMsMHg0MCwweGEwLDB4YTEsMHgyMiB9fSwKKyB7MTYsIDB4YTcyMCwgMCwgezB4MzgsMHgwYiwweDhhLDB4MDIsMHhlMiwweDgwLDB4YWEsMHhlMCwweDIyLDB4MzAsMHgwYiwweDgwLDB4MjMsMHhhYiwweDAyLDB4ODggfX0sCisgezE2LCAweGE3MzAsIDAsIHsweGEwLDB4MmEsMHgwMCwweDBiLDB4OGMsMHgwMiwweGUzLDB4MDAsMHg4OCwweGUwLDB4MjMsMHgzOCwweDA4LDB4ODAsMHgwMiwweDBlIH19LAorIHsxNiwgMHhhNzQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM1LDB4MDAsMHhhMSwweDQ0LDB4MjgsMHg1OCB9fSwKKyB7MTYsIDB4YTc1MCwgMCwgezB4NDMsMHgxNiwweDIyLDB4ODQsMHg4MSwweDgxLDB4MjAsMHgyYywweDU4LDB4NDksMHgxMCwweDgwLDB4YzQsMHg4MSwweDkxLDB4NDggfX0sCisgezE2LCAweGE3NjAsIDAsIHsweDZjLDB4NGEsMHgwYiwweDE0LDB4MDIsMHg0NCwweDg0LDB4ODEsMHgwMSwweDYwLDB4NDAsMHgwYSwweDUyLDB4ODYsMHhkNCwweGEwIH19LAorIHsxNiwgMHhhNzcwLCAwLCB7MHg4NSwweDAwLDB4YTEsMHg1MCwweDY4LDB4OTAsMHgwNiwweGQyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTc4MCwgMCwgezB4MTgsMHgwNSwweGE2LDB4MDAsMHg4OSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweDA0LDB4MDAsMHhhOSwweDYwLDB4MjIgfX0sCisgezE2LCAweGE3OTAsIDAsIHsweDQwLDB4MGIsMHg5NSwweDAyLDB4ZTQsMHgxMCwweGIxLDB4MDAsMHg0ZSwweDQwLDB4MGIsMHg5MCwweDY2LDB4YWMsMHg4MCwweDg5IH19LAorIHsxNiwgMHhhN2EwLCAwLCB7MHgwMCwweDJhLDB4NjAsMHgwYiwweDkwLDB4NTIsMHhmNCwweDAwLDB4ODUsMHgwMCwweDIxLDB4NDAsMHgwOCwweDkwLDB4MDIsMHhjNiB9fSwKKyB7MTYsIDB4YTdiMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDUsMHhlNiwweDIwLDB4ZTksMHgwMCwweDNlLDB4NDAgfX0sCisgezE2LCAweGE3YzAsIDAsIHsweDBmLDB4OTAsMHgwMywweGE0LDB4MTAsMHhjOSwweDAwLDB4MzYsMHg0MCwweDBmLDB4OTQsMHgwMSwweGU1LDB4MjAsMHhkOSwweDQwIH19LAorIHsxNiwgMHhhN2QwLCAwLCB7MHhiYSwweDY4LDB4OGYsMHg5MCwweDA3LDB4ZTYsMHgwMCwweGM5LDB4MTAsMHgzMiwweDYyLDB4MGUsMHg5MCwweDAyLDB4ZTQsMHgxOCB9fSwKKyB7MTYsIDB4YTdlMCwgMCwgezB4YzksMHgwMCwweDMyLDB4NDAsMHgwYywweDkwLDB4MDMsMHhlOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE3ZjAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwNCwweDNlLDB4NDAsMHgwYiwweDkwLDB4MDMsMHg2NCwweDAwLDB4ZjksMHgwMCwweDNlIH19LAorIHsxNiwgMHhhODAwLCAwLCB7MHg0MCwweDhmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhlOSwweDAyLDB4NzIsMHg2OCwweDBmLDB4OTAsMHgwMywweGU2LDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4YTgxMCwgMCwgezB4MDEsMHgzZSwweDQyLDB4MGYsMHg5MCwweDAzLDB4YzQsMHgwMiwweGY5LDB4MDQsMHgzZSwweDQwLDB4NGYsMHg5MCwweDAzLDB4MWEgfX0sCisgezE2LCAweGE4MjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAwLDB4ODAsMHgwMiwweGM4LDB4MDAsMHgzMiwweDAwIH19LAorIHsxNiwgMHhhODMwLCAwLCB7MHgwYywweDgwLDB4MDMsMHg2MCwweDAwLDB4YzgsMHg0MCwweDM2LDB4MDAsMHgwZiwweDg0LDB4MDMsMHhhMCwweDAwLDB4ZDgsMHg1MCB9fSwKKyB7MTYsIDB4YTg0MCwgMCwgezB4YjIsMHgxMCwweDhjLDB4ODEsMHgwMywweGMxLDB4MjAsMHhjOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4YzAsMHgxMywweGYwLDB4MDQgfX0sCisgezE2LCAweGE4NTAsIDAsIHsweDRjLDB4MDAsMHgzZiwweDAwLDB4MGYsMHg4MCwweDAzLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhODYwLCAwLCB7MHgyOCwweDE1LDB4MmEsMHgwMCwweDhhLDB4MDQsMHgyMiwweDgxLDB4MjgsMHhhMCwweDEyLDB4MjgsMHgwMCwweDhhLDB4MDEsMHgzNiB9fSwKKyB7MTYsIDB4YTg3MCwgMCwgezB4ODAsMHgwYiwweGEwLDB4MTAsMHgyOCwweDEwLDB4Y2UsMHgwMSwweDIzLDB4ODEsMHgwYywweGE4LDB4MTIsMHhmYiwweDAwLDB4OGEgfX0sCisgezE2LCAweGE4ODAsIDAsIHsweDAxLDB4M2IsMHg4MCwweDgzLDB4YTAsMHg0MiwweGU4LDB4MTAsMHg4YSwweDAwLDB4MmYsMHg4MCwweDBiLDB4NjAsMHg0MiwweDBhIH19LAorIHsxNiwgMHhhODkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHg4MywweDAwLDB4YTAsMHhjMCB9fSwKKyB7MTYsIDB4YThhMCwgMCwgezB4MTgsMHhiMCwweDAwLDB4Y2MsMHgwMCwweDliLDB4MDAsMHgyNCwweGMwLDB4MGIsMHgzMCwweDA2LDB4NmMsMHgwMCwweGEzLDB4MDggfX0sCisgezE2LCAweGE4YjAsIDAsIHsweDI4LDB4YzgsMHgwOSwweDMwLDB4MDIsMHhjYywweDQzLDB4OGIsMHgwMCwweDJjLDB4ODAsMHgwYiwweDMwLDB4MDIsMHhjYywweDAyIH19LAorIHsxNiwgMHhhOGMwLCAwLCB7MHg4MywweDAxLDB4MmMsMHhjMCwweDRiLDB4MzAsMHgwMCwweDRhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YThkMCwgMCwgezB4YTAsMHgwMSwweDBjLDB4MjQsMHg4NywweDk0LDB4MjEsMHhlNCwweDE4LDB4MzEsMHgwMiwweGRjLDB4ODAsMHg5NywweDEwLDB4MjUgfX0sCisgezE2LCAweGE4ZTAsIDAsIHsweGNkLDB4MGIsMHhmMiwweDAyLDB4N2MsMHgwMCwweGEwLDB4MDAsMHgyOCwweGUwLDB4MTgsMHg3MCwweDAyLDB4ZGMsMHgwMSwweDg3IH19LAorIHsxNiwgMHhhOGYwLCAwLCB7MHgzNCwweDI5LDB4NDAsMHgwOSwweDQwLDB4MDIsMHhkMCwweDA0LDB4ODQsMHgwNCwweDJkLDB4MDAsMHg0YiwweGQwLDB4MjIsMHg2OCB9fSwKKyB7MTYsIDB4YTkwMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxNiwweDAwLDB4Y2YsMHhhMCwweDcwLDB4ZTkgfX0sCisgezE2LCAweGE5MTAsIDAsIHsweDE4LDB4N2IsMHgwMywweGZmLDB4NDAsMHg5NywweGEwLDB4MzUsMHhlOCwweDBmLDB4NzQsMHgwMiwweDVlLDB4MjAsMHhlNCwweDgwIH19LAorIHsxNiwgMHhhOTIwLCAwLCB7MHgzOSwweGEwLDB4MmQsMHg3OCwweDAzLDB4ZmUsMHgwMCwweGM3LDB4ODAsMHgzZCwweGUwLDB4NWYsMHg2OCwweDQzLDB4YzIsMHgwMCB9fSwKKyB7MTYsIDB4YTkzMCwgMCwgezB4YzQsMHg4NCwweDFkLDB4NjAsMHgwZiwweDc4LDB4MDMsMHg2YSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE5NDAsIDAsIHsweDA4LDB4MGQsMHhhNCwweDAwLDB4M2IsMHgwMCwweDJlLDB4ZDgsMHgwZiwweGI0LDB4MDMsMHgyZCwweDhhLDB4ZWIsMHg2MiwweDNhIH19LAorIHsxNiwgMHhhOTUwLCAwLCB7MHhkMCwweDBmLDB4YjIsMHg4NywweDBjLDB4ZDAsMHhkOCwweDAwLDB4MzIsMHhjMCwweDRmLDB4OTAsMHg0MywweGVjLDB4MDAsMHhmYiB9fSwKKyB7MTYsIDB4YTk2MCwgMCwgezB4MDgsMHgzZSwweDQwLDB4OGYsMHg5MCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDQsMHgzZiwweDgwLDB4MGYsMHgwMCwweDJiLDB4ODIgfX0sCisgezE2LCAweGE5NzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZjYsMHgwMCwweGZmLDB4YTAsMHgzZSwweGY0IH19LAorIHsxNiwgMHhhOTgwLCAwLCB7MHgwZSwweGI4LDB4MDMsMHhlZSwweDA4LDB4NGIsMHhmMCwweDdmLDB4ZjQsMHgwYywweGY5LDB4MjMsMHhlZSwweDQ4LDB4NzgsMHg5MCB9fSwKKyB7MTYsIDB4YTk5MCwgMCwgezB4MzIsMHhlNCwweDBjLDB4ZjksMHgwMywweGZlLDB4MDAsMHhmZiwweDgwLDB4M2YsMHhlNCwweDFjLDB4NzksMHgwMywweDJlLDB4NDAgfX0sCisgezE2LCAweGE5YTAsIDAsIHsweGZmLDB4ODAsMHgzMywweGUwLDB4MmMsMHg3OCwweDA3LDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhOWIwLCAwLCB7MHhhOCwweDExLDB4OTQsMHgwMCwweGIzLDB4MDAsMHgwYywweGU1LDB4MGIsMHgzOCwweDAyLDB4ZmUsMHg4MCwweDhmLDB4ODAsMHg2MSB9fSwKKyB7MTYsIDB4YTljMCwgMCwgezB4YzQsMHgyOCwweDc4LDB4MDAsMHg0ZSwweDAwLDB4ZjQsMHg4NCwweDI1LDB4YTgsMHgwYywweDcwLDB4MDIsMHhjYywweDA0LDB4YjMgfX0sCisgezE2LCAweGE5ZDAsIDAsIHsweDkwLDB4MjUsMHg0MCwweDBjLDB4NDEsMHg4MywweDUyLDB4NDAsMHhiNCwweDEwLDB4YTMsMHgwMCwweDBjLDB4NTIsMHgwMywweDZhIH19LAorIHsxNiwgMHhhOWUwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk0LDB4MDAsMHhiNywweDIxLDB4NmQsMHhjOCB9fSwKKyB7MTYsIDB4YTlmMCwgMCwgezB4NGIsMHg3MCwweDAyLDB4ZGMsMHg0MiwweGE3LDB4MzEsMHgyOSwweGM0LDB4MDgsMHg3MiwweDAyLDB4ZGMsMHgwMCwweGI3LDB4MjggfX0sCisgezE2LCAweGFhMDAsIDAsIHsweDI0LDB4ODAsMHgwOCwweDcwLDB4MDYsMHhkNCwweDIwLDB4YjcsMHgwMSwweDJkLDB4YzEsMHgwOCwweDYwLDB4MDIsMHg1MCwweDgwIH19LAorIHsxNiwgMHhhYTEwLCAwLCB7MHhiNCwweDA4LDB4MjEsMHg2MiwweDA5LDB4NzQsMHgwNiwweDgwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWEyMCwgMCwgezB4MjAsMHgxNCwweGM3LDB4MDQsMHhiMywweDAwLDB4MmMsMHhjMCwweDBiLDB4YjAsMHgwMiwweGNjLDB4MDAsMHhhMywweDAyLDB4NjAgfX0sCisgezE2LCAweGFhMzAsIDAsIHsweGMwLDB4MDgsMHgzOCwweDAyLDB4NGUsMHg0NCwweGEwLDB4YzAsMHgyNCwweDkxLDB4MDgsMHgzMCwweDAyLDB4YzAsMHgwMCwweGIzIH19LAorIHsxNiwgMHhhYTQwLCAwLCB7MHgwMCwweDI0LDB4NjAsMHgwOCwweDFjLDB4MDIsMHg0YywweDg4LDB4YjMsMHhjMCwweDIwLDB4YTAsMHgwOCwweDAwLDB4MGEsMHg4OCB9fSwKKyB7MTYsIDB4YWE1MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhYywweDAwLDB4ZmYsMHgwMCwweDJmLDB4YzAgfX0sCisgezE2LCAweGFhNjAsIDAsIHsweDRmLDB4ZjAsMHgxMywweGZjLDB4MDgsMHhlNywweDhhLDB4M2YsMHhjMCwweDBjLDB4ZjUsMHhjMiwweGZlLDB4MTAsMHhiYiwweGMwIH19LAorIHsxNiwgMHhhYTcwLCAwLCB7MHgzMiwweGQ0LDB4MGMsMHgzMCwweDEzLDB4ZTMsMHgwNCwweGJmLDB4MDAsMHgyZSwweDYyLDB4MDgsMHhiOSwweDAyLDB4NmUsMHgwMCB9fSwKKyB7MTYsIDB4YWE4MCwgMCwgezB4ZmIsMHgwMSwweDMyLDB4YTQsMHg0ZCwweDk0LDB4MDIsMHhhYiwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFhOTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDYwLDB4ZmIsMHgwMCwweDFlLDB4YzAsMHgwZiwweGIwLDB4MTMsMHhlYywweDAwLDB4NWIsMHgwMCwweDNhIH19LAorIHsxNiwgMHhhYWEwLCAwLCB7MHhjMCwweDBmLDB4YjAsMHg0MSwweGVjLDB4MDAsMHg3YiwweDQ1LDB4YmEsMHg0MCwweDJlLDB4YjAsMHgxNSwweGUwLDB4MDEsMHhmYiB9fSwKKyB7MTYsIDB4YWFiMCwgMCwgezB4MDAsMHgzZSwweDUwLDB4MGUsMHhjMCwweDAzLDB4ZjAsMHg0MCwweGZjLDB4MjAsMHgzZiwweDUwLDB4OGYsMHg5MCwweDAxLDB4NjAgfX0sCisgezE2LCAweGFhYzAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZjQsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwIH19LAorIHsxNiwgMHhhYWQwLCAwLCB7MHg4ZiwweGYwLDB4MDMsMHgxYywweDAyLDB4Y2YsMHgwMCwweDM2LDB4YzAsMHgwZCwweGYwLDB4MDMsMHg3YywweDAwLDB4N2YsMHgyYSB9fSwKKyB7MTYsIDB4YWFlMCwgMCwgezB4M2YsMHg4MCwweDBmLDB4ZjgsMHgxMywweDkwLDB4MjEsMHhjZiwweDAwLDB4M2YsMHg2MiwweDBjLDB4ZTAsMHgwMywweDMwLDB4MDAgfX0sCisgezE2LCAweGFhZjAsIDAsIHsweGY4LDB4MDAsMHgzZiwweDAwLDB4MGYsMHhkMCwweDAzLDB4ODAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhYjAwLCAwLCB7MHg4MSwweDA0LDB4NjQsMHgxMSwweGJiLDB4MDAsMHgyZSwweGMwLDB4MGIsMHhiMCwweDAyLDB4MmMsMHgwMCwweGRiLDB4MDQsMHgzMiB9fSwKKyB7MTYsIDB4YWIxMCwgMCwgezB4YzAsMHgwZSwweGIwLDB4MDIsMHhlYywweDAwLDB4YmIsMHg4NCwweDJlLDB4NDAsMHgwYiwweGI5LDB4NDIsMHgyMiwweDQyLDB4OGIgfX0sCisgezE2LCAweGFiMjAsIDAsIHsweDAxLDB4MmMsMHg3MiwweDBhLDB4OTAsMHg0MiwweDJjLDB4MDAsMHhiYiwweDAwLDB4MmUsMHhjMiwweDhmLDB4ODgsMHgwNiwweGUwIH19LAorIHsxNiwgMHhhYjMwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMSwweDI0LDB4MDAsMHhiYiwweDAwLDB4NmUsMHhjMCB9fSwKKyB7MTYsIDB4YWI0MCwgMCwgezB4NDgsMHhiMCwweDQyLDB4MmMsMHgwMCwweDhiLDB4MDAsMHgyNiwweGMwLDB4MGEsMHhiMCwweDEyLDB4ZWMsMHgwMCwweGJiLDB4NDAgfX0sCisgezE2LCAweGFiNTAsIDAsIHsweDJlLDB4YzgsMHgwYiwweGIwLDB4MTIsMHgyYywweDAwLDB4OGIsMHgwMCwweDJlLDB4NDgsMHgwYSwweDMwLDB4MDIsMHg2YywweDAwIH19LAorIHsxNiwgMHhhYjYwLCAwLCB7MHhiYiwweDAwLDB4MmUsMHg4MCwweDRiLDB4OTgsMHgwMiwweGUwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWI3MCwgMCwgezB4MDgsMHgwNCwweDA0LDB4MDAsMHhiMywweDAwLDB4NmMsMHhjMiwweDRiLDB4MzEsMHgwMiwweDBjLDB4NTAsMHg5YiwweDIwLDB4MjAgfX0sCisgezE2LCAweGFiODAsIDAsIHsweGMwLDB4MGEsMHgzMiwweDEyLDB4Y2MsMHg4MCwweGIzLDB4MDAsMHg2YywweDBjLDB4MGIsMHgzMSwweDAyLDB4MGMsMHg0MiwweDgzIH19LAorIHsxNiwgMHhhYjkwLCAwLCB7MHgwOCwweDJlLDB4NDAsMHgwYSwweDAwLDB4MDIsMHgwMCwweDgwLDB4YjAsMHgwMCwweDJjLDB4NDEsMHgwYiwweDEwLDB4MDIsMHg0MiB9fSwKKyB7MTYsIDB4YWJhMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2NCwweDAwLDB4YmIsMHg0MCwweDNmLDB4Y2MgfX0sCisgezE2LCAweGFiYjAsIDAsIHsweDBlLDB4ZjAsMHg4MywweDNkLDB4YTAsMHhjZiwweDIwLDB4MzcsMHhjMCwweDBjLDB4ZjcsMHhjMywweGZkLDB4NDgsMHhmMywweDAwIH19LAorIHsxNiwgMHhhYmMwLCAwLCB7MHgzZSwweDg4LDB4MGYsMHhiNCwweDEzLDB4YTUsMHgwMCwweDhmLDB4MzAsMHgzZSwweDQwLDB4MGMsMHhhMCwweDAzLDB4NjAsMHg4MCB9fSwKKyB7MTYsIDB4YWJkMCwgMCwgezB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDkwLDB4MjMsMHhjMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFiZTAsIDAsIHsweGEwLDB4MTksMHhmNCwweDAwLDB4ZmYsMHgyOSwweDNmLDB4YzksMHgwZiwweGYwLDB4MTMsMHhmYywweDk0LDB4ZWYsMHgxMiwweDNiIH19LAorIHsxNiwgMHhhYmYwLCAwLCB7MHhjMCwweDhlLDB4YjIsMHgwNywweGZkLDB4MDQsMHhmZiwweDEwLDB4M2YsMHgwYywweDBmLDB4ZjAsMHgwMywweGYwLDB4MDAsMHhmYiB9fSwKKyB7MTYsIDB4YWMwMCwgMCwgezB4MjAsMHgzZCwweDQwLDB4MGYsMHhkMCwweDQzLDB4ZmMsMHg0MCwweGZmLDB4MDQsMHgzZiwweGMwLDB4MGUsMHhjMCwweDQzLDB4ZTggfX0sCisgezE2LCAweGFjMTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHhhMiwweGM3LDB4MjAsMHgzZiwweDI0IH19LAorIHsxNiwgMHhhYzIwLCAwLCB7MHgwYywweGYwLDB4MDMsMHgzYywweDgwLDB4Y2MsMHgwOSwweDMzLDB4ZDEsMHgwYywweGYxLDB4MjMsMHhmYywweDIwLDB4ZGYsMHgzNiB9fSwKKyB7MTYsIDB4YWMzMCwgMCwgezB4M2YsMHhjMCwweDBlLDB4NDgsMHgwMywweGZlLDB4MDAsMHhmZiwweDgwLDB4MzcsMHhlNCwweDBkLDB4NzgsMHgwMywweDExLDB4YTAgfX0sCisgezE2LCAweGFjNDAsIDAsIHsweGNmLDB4MDAsMHgzNywweGM4LDB4MGMsMHhmMCwweDAzLDB4MzAsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhYzUwLCAwLCB7MHg4MCwweDEwLDB4ZmYsMHgwMCwweDhmLDB4ZDEsMHgyZSwweDA4LDB4MGQsMHhiNiwweDEyLDB4M2QsMHg0NSwweGY5LDB4NjQsMHgyNyB9fSwKKyB7MTYsIDB4YWM2MCwgMCwgezB4ZDAsMHg4OCwweGJhLDB4MTQsMHhjYywweDA0LDB4OGYsMHg0MCwweDIzLDB4ZjAsMHgwYiwweDg4LDB4MDIsMHgyZSwweDA0LDB4YmIgfX0sCisgezE2LCAweGFjNzAsIDAsIHsweDgwLDB4YWUsMHhjMCwweDA4LDB4YjgsMHgwYSwweDIxLDB4MDAsMHg4OCwweGQwLDB4MjIsMHgyMCwweDI4LDB4YjAsMHgwMiwweDIwIH19LAorIHsxNiwgMHhhYzgwLCAwLCB7MHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MDAsMHg5MywweDAwLDB4MmUsMHgwMCB9fSwKKyB7MTYsIDB4YWM5MCwgMCwgezB4MGEsMHgzNCwweDgyLDB4OGMsMHhhMCwweGEwLDB4MDgsMHgyNCwweGQ4LDB4MDksMHgzMSwweDAyLDB4Y2MsMHgyMCwweGIzLDB4MzIgfX0sCisgezE2LCAweGFjYTAsIDAsIHsweDI4LDB4ZDAsMHg0YSwweDgwLDB4MDIsMHhjYywweDBjLDB4YmIsMHgwMCwweDIyLDB4NDAsMHg4OSwweGIwLDB4MDIsMHg2MCwweDgwIH19LAorIHsxNiwgMHhhY2IwLCAwLCB7MHg5MywweDAwLDB4MjQsMHhkMCwweDBiLDB4MzAsMHgwMiwweGEyLDB4MDEsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWNjMCwgMCwgezB4YzAsMHgxMSwweGFjLDB4MDAsMHg5YiwweDAwLDB4MmUsMHgyMCwweDA5LDB4YjAsMHg0YSwweDJjLDB4MDIsMHhhMCwweDAwLDB4MDYgfX0sCisgezE2LCAweGFjZDAsIDAsIHsweGMwLDB4MDksMHhiMCwweDAwLDB4ZWMsMHgwMCwweGFiLDB4MDAsMHgyYSwweGMwLDB4MGIsMHg4OCwweDAyLDB4NmMsMHgwMCwweGJiIH19LAorIHsxNiwgMHhhY2UwLCAwLCB7MHgyMCwweDJhLDB4ZTIsMHg0MSwweGI4LDB4MmEsMHg2MCwweDBhLDB4OTgsMHgwMCwweDI2LDB4MDAsMHgwYiwweGIwLDB4MDIsMHhiOCB9fSwKKyB7MTYsIDB4YWNmMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDA4LDB4ZGIsMHgwMiwweDNlLDB4MjAgfX0sCisgezE2LCAweGFkMDAsIDAsIHsweDRjLDB4YjAsMHgwMywweDJjLDB4MDIsMHg4YiwweDIwLDB4MTIsMHhjMCwweDI5LDB4YjAsMHgxMiwweGVjLDB4MDAsMHhmYiwweDAwIH19LAorIHsxNiwgMHhhZDEwLCAwLCB7MHgzYSwweGMwLDB4MGUsMHg4OCwweDAzLDB4ZWQsMHgyMCwweGZiLDB4YzgsMHgzNCwweGYwLDB4MGQsMHhiYSwweDAzLDB4NDcsMHg2MCB9fSwKKyB7MTYsIDB4YWQyMCwgMCwgezB4YzksMHgwMCwweDM2LDB4NDAsMHgwZiwweGIwLDB4MGIsMHg5MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFkMzAsIDAsIHsweGUwLDB4MDEsMHg5YywweDAwLDB4ZWYsMHgwMCwweDBmLDB4MDAsMHgwZiwweDMwLDB4MDAsMHhmYywweDAwLDB4ZGYsMHg5MCwweGJiIH19LAorIHsxNiwgMHhhZDQwLCAwLCB7MHhjMCwweGNlLDB4ZjAsMHgwMywweGZjLDB4MDQsMHhjYiwweDAwLDB4MTcsMHhjMCwweDBmLDB4YzAsMHgwMywweGJjLDB4ODQsMHhmZiB9fSwKKyB7MTYsIDB4YWQ1MCwgMCwgezB4MDAsMHgzNywweGMwLDB4MGUsMHhkMCwweDYzLDB4YjgsMHgwMCwweGVhLDB4MDAsMHgzYSwweDgwLDB4MGMsMHgzMCwweDAzLDB4NzAgfX0sCisgezE2LCAweGFkNjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGZiLDB4MDIsMHgzMiwweDAwIH19LAorIHsxNiwgMHhhZDcwLCAwLCB7MHgwZiwweGIwLDB4NTMsMHgyYywweDAwLDB4ZmEsMHgwMCwweDMyLDB4YzAsMHg4ZiwweGIwLDB4MDcsMHgyYywweDAwLDB4ZmIsMHgwMCB9fSwKKyB7MTYsIDB4YWQ4MCwgMCwgezB4YjIsMHhjMCwweDBmLDB4ODAsMHgwNywweGFjLDB4ODAsMHhkYiwweDI0LDB4N2UsMHhkMCwweDBlLDB4YjAsMHgyMywweDc0LDB4MDQgfX0sCisgezE2LCAweGFkOTAsIDAsIHsweGRkLDB4MDgsMHhiNSwweDQwLDB4MGMsMHhiMCwweDAzLDB4MTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhZGEwLCAwLCB7MHhjOCwweDA1LDB4M2MsMHgwMCwweGJmLDB4YzAsMHhhMCwweDAwLDB4MWIsMHhmMCwweDAyLDB4M2YsMHg2MCwweGVhLDB4NTAsMHgyMyB9fSwKKyB7MTYsIDB4YWRiMCwgMCwgezB4YzAsMHgwOCwweGZhLDB4MDcsMHhmYywweDAwLDB4ZGYsMHgwMCwweDYzLDB4YzAsMHg0OCwweDE4LDB4MDIsMHgyZCwweDAwLDB4YjMgfX0sCisgezE2LCAweGFkYzAsIDAsIHsweDAwLDB4NmUsMHhjMCwweDBkLDB4M2EsMHgwMywweDI0LDB4MDAsMHg4MiwweDgwLDB4MzIsMHg4MCwweDBkLDB4ZjAsMHgwMywweDMyIH19LAorIHsxNiwgMHhhZGQwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MTQsMHhiMywweDU5LDB4MjAsMHg4MCB9fSwKKyB7MTYsIDB4YWRlMCwgMCwgezB4MDksMHgzMCwweDAyLDB4MmUsMHgwNSwweGIwLDB4NDQsMHgyZSwweGMwLDB4MDksMHgzNCwweDgyLDB4ZWMsMHgwMCwweGFiLDB4MDQgfX0sCisgezE2LCAweGFkZjAsIDAsIHsweDIwLDB4YzAsMHgwOSwweDIxLDB4YjIsMHg4ZSwweDA0LDB4OTMsMHhjMCwweDI0LDB4YzAsMHgwYSwweDE4LDB4MDYsMHg0YywweDAwIH19LAorIHsxNiwgMHhhZTAwLCAwLCB7MHg5MiwweDUwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweDcwLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWUxMCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDAsMHhiNywweDgwLDB4NjEsMHhlMCwweDBiLDB4NzgsMHgwYSwweDVlLDB4MDEsMHhiMSwweGEwLDB4MmQgfX0sCisgezE2LCAweGFlMjAsIDAsIHsweGUwLDB4MGEsMHg3OCwweDAyLDB4NWUsMHgwMCwweDA3LDB4OTAsMHgyMSwweGUwLDB4MTgsMHhjOCwweDAyLDB4MWUsMHgwMCwweGI3IH19LAorIHsxNiwgMHhhZTMwLCAwLCB7MHg4MCwweDJkLDB4ZTAsMHg4YSwweGQ4LDB4MDIsMHgzZSwweGMwLDB4ODUsMHg4MCwweDIxLDB4MjAsMHgxOSwweDc4LDB4MjIsMHgwMCB9fSwKKyB7MTYsIDB4YWU0MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ZjMsMHg5NCwweDIwLDB4MTAgfX0sCisgezE2LCAweGFlNTAsIDAsIHsweDRiLDB4MzAsMHgwNywweDBjLDB4MDAsMHhmMywweDAwLDB4M2UsMHhjOCwweDBmLDB4MzAsMHgwMywweGNjLDB4MDAsMHgyMywweDEwIH19LAorIHsxNiwgMHhhZTYwLCAwLCB7MHgwMCwweGNiLDB4MDUsMHgyMCwweDAyLDB4OGMsMHg2MCwweDkzLDB4MGEsMHgyZSwweGM0LDB4MGEsMHgwMSwweDA3LDB4NGMsMHg4MCB9fSwKKyB7MTYsIDB4YWU3MCwgMCwgezB4ZDIsMHgwMSwweDMwLDB4YzAsMHgyYywweDMwLDB4MGIsMHg1YSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFlODAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZmYsMHgwMSwweDBmLDB4NDAsMHgwZiwweGYwLDB4MTMsMHhiYywweDAwLDB4ZWYsMHgyNiwweDczIH19LAorIHsxNiwgMHhhZTkwLCAwLCB7MHhjMiwweDBjLDB4YjAsMHg4MywweGJjLDB4NDAsMHhmZiwweDE4LDB4M2QsMHhjMCwweDRhLDB4YzEsMHgwMywweGZjLDB4MDAsMHhmYiB9fSwKKyB7MTYsIDB4YWVhMCwgMCwgezB4MTIsMHgzZiwweGM0LDB4NGQsMHhjMSwweDBiLDB4ZmMsMHg4MSwweGZkLDB4MDAsMHgzZiwweDIwLDB4MGYsMHhmMCwweDAzLDB4ZDAgfX0sCisgezE2LCAweGFlYjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHgyMCwweGNiLDB4NDgsMHgzZSwweDAwIH19LAorIHsxNiwgMHhhZWMwLCAwLCB7MHgwYywweGIwLDB4MDMsMHgyZCwweDIwLDB4ZTksMHg4MCwweGZhLDB4YzgsMHgwZCwweGIwLDB4MDMsMHhlZSwweDAwLDB4ZGIsMHgyNCB9fSwKKyB7MTYsIDB4YWVkMCwgMCwgezB4NzYsMHhmMywweDhlLDB4ODAsMHgzMywweGVjLDB4NDQsMHhlYiwweDEwLDB4M2UsMHhjMCwweDBmLDB4OTAsMHgwMywweGU4LDB4MDQgfX0sCisgezE2LCAweGFlZTAsIDAsIHsweGRjLDB4MDAsMHhiMywweDYxLDB4MGMsMHhiMCwweDAzLDB4MmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhZWYwLCAwLCB7MHg0OCwweDExLDB4OGQsMHgwMCwweDg3LDB4MjAsMHgyZiwweDAxLDB4MjgsMHg3MCwweDAyLDB4MGMsMHg4NCwweDhkLDB4MDQsMHgzMSB9fSwKKyB7MTYsIDB4YWYwMCwgMCwgezB4Y2MsMHhjOSwweDcyLDB4MDIsMHhkZCwweDAwLDB4MzcsMHgzMywweDIxLDB4ZDgsMHgwOCwweDQwLDB4MDIsMHhkYywweDAwLDB4YjcgfX0sCisgezE2LCAweGFmMTAsIDAsIHsweDIwLDB4M2QsMHhjMCwweDA5LDB4NTAsMHgyMiwweGYwLDB4MDAsMHg5NywweDAwLDB4MjEsMHg4MCwweDBhLDB4ZmMsMHgwMiwweDkyIH19LAorIHsxNiwgMHhhZjIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDFlLDB4ODIsMHg4NywweGIwLDB4MmQsMHgyMCB9fSwKKyB7MTYsIDB4YWYzMCwgMCwgezB4MDgsMHgzOSwweDAyLDB4MWUsMHg0MSwweGE3LDB4ODAsMHgyNCwweGUwLDB4MDksMHg3YSwweDMyLDB4OGUsMHg4MiwweDA3LDB4YTAgfX0sCisgezE2LCAweGFmNDAsIDAsIHsweDI1LDB4ZTAsMHg4YiwweDQ4LDB4MDIsMHgxZSwweDAwLDB4YTcsMHhlMSwweDJkLDB4ZTAsMHg0YiwweDU4LDB4MDAsMHhkYSwweDAwIH19LAorIHsxNiwgMHhhZjUwLCAwLCB7MHhhMCwweDgwLDB4MjQsMHg2MCwweDA4LDB4N2EsMHgwMiwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWY2MCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MDAsMHg4MywweDAwLDB4MmMsMHgwMCwweDA4LDB4MzAsMHgwMiwweDhjLDB4MDAsMHg5MywweDAwLDB4MjIgfX0sCisgezE2LCAweGFmNzAsIDAsIHsweGMxLDB4MDksMHgzMCwweDQyLDB4Y2MsMHgwMCwweDgzLDB4MDAsMHg2MCwweGMwLDB4MDgsMHgxYSwweDAyLDB4Y2UsMHgwNCwweGIzIH19LAorIHsxNiwgMHhhZjgwLCAwLCB7MHhlMCwweDI4LDB4YTAsMHgwOSwweDFjLDB4ODIsMHg0YiwweDA4LDB4YTMsMHg4MCwweDI0LDB4YTAsMHgyYSwweDMwLDB4MDIsMHg5YSB9fSwKKyB7MTYsIDB4YWY5MCwgMCwgezB4MDQsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4Y2EsMHgwMCwweDJmLDB4ODggfX0sCisgezE2LCAweGFmYTAsIDAsIHsweDBjLDB4YTAsMHgxMywweDI4LDB4MDAsMHhlZSwweDAwLDB4MmUsMHg4MCwweDJkLDB4YTAsMHgwMywweGU4LDB4MDAsMHhkYSwweDAwIH19LAorIHsxNiwgMHhhZmIwLCAwLCB7MHg3NiwweDgwLDB4MGUsMHhlOCwweDAzLDB4YmIsMHg4MCwweGVlLDB4NDAsMHgyZiwweGEyLDB4OGYsMHhlNiwweDAzLDB4ZWIsMHg4NiB9fSwKKyB7MTYsIDB4YWZjMCwgMCwgezB4ZmEsMHg4MCwweDM3LDB4ODIsMHgwYywweDIwLDB4MDcsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFmZDAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHg0MCwweDFlLDB4MDAsMHgwZiwweDgwLDB4MGIsMHg2MSwweDAwLDB4ZTgsMHhjMCwweDNhIH19LAorIHsxNiwgMHhhZmUwLCAwLCB7MHgwMCwweDBlLDB4ODAsMHgwMywweGUwLDB4MDEsMHhmOCwweDAwLDB4N2UsMHgxMCwweDFlLDB4ODEsMHgwMywweGUwLDB4MDgsMHhmOCB9fSwKKyB7MTYsIDB4YWZmMCwgMCwgezB4MDAsMHgzZSwweDAwLDB4MGQsMHg4MCwweDAzLDB4YzAsMHgyOCwweGRjLDB4NTAsMHgzYiwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfX0sCisgezE2LCAweGIwMDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4YzQsMHgwMiwweGM5LDB4MDAsMHgzZSwweDQyIH19LAorIHsxNiwgMHhiMDEwLCAwLCB7MHgwZiwweDEwLDB4MDMsMHhhNiwweDAwLDB4YzksMHgwMSwweDNhLDB4NDAsMHgwZSwweDk0LDB4MDEsMHhlNCwweDEwLDB4ZjEsMHgwNCB9fSwKKyB7MTYsIDB4YjAyMCwgMCwgezB4MzIsMHg0MCwweDBmLDB4OWEsMHgyMywweDIwLDB4NjAsMHhmOCwweDA0LDB4MGEsMHg0MiwweDBlLDB4OTAsMHgxMywweDI0LDB4MDAgfX0sCisgezE2LCAweGIwMzAsIDAsIHsweGMxLDB4MDAsMHgzMiwweDQwLDB4MGYsMHg5MCwweDAzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMDQwLCAwLCB7MHg4MCwweDA0LDB4NjcsMHgwOCwweGE5LDB4MDAsMHg2ZSwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjcsMHg4MiwweDg5LDB4MDAsMHgyNiB9fSwKKyB7MTYsIDB4YjA1MCwgMCwgezB4NDAsMHgwOCwweDljLDB4MDMsMHhhNCwweDEwLDB4YjksMHgwMCwweDM2LDB4NDAsMHg5YiwweDFjLDB4MWEsMHgyMywweDA0LDB4YjggfX0sCisgezE2LCAweGIwNjAsIDAsIHsweDAwLDB4M2EsMHg0MCwweDBlLDB4MTAsMHgwMiwweDI0LDB4MDIsMHhjOSwweGEwLDB4YTIsMHg0MCwweDBiLDB4OTAsMHgwYSwweDIwIH19LAorIHsxNiwgMHhiMDcwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI1LDB4ODAsMHg4OSwweDA0LDB4MmMsMHg0MCB9fSwKKyB7MTYsIDB4YjA4MCwgMCwgezB4MDgsMHg5MCwweDAyLDB4ODQsMHg4MSwweDk5LDB4NDAsMHgyZSwweDQwLDB4MWEsMHg5MCwweDA2LDB4ZTQsMHgwMSwweGI5LDB4MDAgfX0sCisgezE2LCAweGIwOTAsIDAsIHsweGE2LDB4NDEsMHgxYiwweDkwLDB4ODIsMHgyMSwweDAwLDB4YjgsMHgxMCwweDJlLDB4NDAsMHgwYSwweDkyLDB4MGEsMHhhNCwweDAxIH19LAorIHsxNiwgMHhiMGEwLCAwLCB7MHg4ZiwweDIyLDB4MjMsMHg0MCwweDBiLDB4OTAsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjBiMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHhhMywweDIwLDB4MmMsMHg0MSwweDA5LDB4MTIsMHgwMiwweDA0LDB4ODAsMHg4MSwweDIwLDB4MjQgfX0sCisgezE2LCAweGIwYzAsIDAsIHsweDQ4LDB4MGEsMHgzNiwweDAyLDB4YzQsMHg4MCwweGIxLDB4MjAsMHgwNCwweGM4LDB4NGIsMHgxNCwweDAyLDB4MDUsMHgwMCwweGIxIH19LAorIHsxNiwgMHhiMGQwLCAwLCB7MHgwNSwweDI4LDB4NTAsMHgwYSwweDkwLDB4MDIsMHgwNSwweDAyLDB4ODUsMHgwMCwweDIxLDB4NDAsMHgwYiwweDEyLDB4MDIsMHgwMiB9fSwKKyB7MTYsIDB4YjBlMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4YzgsMHgwMCwweDZlLDB4MTQgfX0sCisgezE2LCAweGIwZjAsIDAsIHsweDJjLDB4ODUsMHgwMiwweGExLDB4NDAsMHhjOCwweDUwLDB4M2EsMHgxNCwweDBlLDB4ODAsMHgwMiwweGUxLDB4NDAsMHhiMCwweDUwIH19LAorIHsxNiwgMHhiMTAwLCAwLCB7MHgzMiwweDAwLDB4MGIsMHg4MCwweDAzLDB4MjAsMHgwMCwweGZhLDB4MDAsMHgzZSwweDAwLDB4MGUsMHg4MCwweDAzLDB4YTAsMHgwMiB9fSwKKyB7MTYsIDB4YjExMCwgMCwgezB4YzgsMHgwMCwweDEzLDB4MDAsMHgwZiwweDgyLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIxMjAsIDAsIHsweDk4LDB4MWQsMHhlNCwweDQ4LDB4ZjksMHgxNCwweDNmLDB4NDAsMHgwYywweDkxLDB4MDMsMHhlNCwweDQyLDB4ZmQsMHgxMCwweDM2IH19LAorIHsxNiwgMHhiMTMwLCAwLCB7MHg0NCwweDBkLDB4OTEsMHgyMywweGE0LDB4NDgsMHhmOSwweDExLDB4MzgsMHg0NCwweDBmLDB4ZDAsMHgwMywweGU1LDB4MTQsMHgzOSB9fSwKKyB7MTYsIDB4YjE0MCwgMCwgezB4NDIsMHg3YiwweDQwLDB4OGUsMHhkMCwweDAxLDB4ZjUsMHgwMCwweGE5LDB4NDAsMHgzZSwweDUwLDB4MDcsMHg5NiwweDgzLDB4ZTYgfX0sCisgezE2LCAweGIxNTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4ZjYsMHg4MCwweGRkLDB4YWUsMHgzYSwweDUwIH19LAorIHsxNiwgMHhiMTYwLCAwLCB7MHgwZCwweDlhLDB4MGIsMHg3NiwweDgwLDB4Y2YsMHg4OCwweDMyLDB4NzAsMHgyZCwweGRhLDB4MDMsMHhhNywweDAxLDB4ZTksMHg5MiB9fSwKKyB7MTYsIDB4YjE3MCwgMCwgezB4MzcsMHg2OCwweDBkLDB4OTQsMHgwMywweGU3LDB4MDAsMHhlZCwweGEwLDB4M2EsMHg1MCwweDBmLDB4ZDAsMHgwMywweGU3LDB4MDIgfX0sCisgezE2LCAweGIxODAsIDAsIHsweGNkLDB4ODAsMHgzMywweDY4LDB4MGMsMHhkOCwweDgzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMTkwLCAwLCB7MHgzOCwweDEwLDB4ZTEsMHgwMCwweDg4LDB4NDAsMHgyMCwweDIwLDB4MGMsMHg4YywweDAyLDB4MjMsMHgwMCwweDg4LDB4ZTAsMHgyMiB9fSwKKyB7MTYsIDB4YjFhMCwgMCwgezB4MzAsMHgwOCwweDg0LDB4MDIsMHhlMywweDAwLDB4YjgsMHhlMCwweDIyLDB4MTQsMHg4ZCwweDg4LDB4MDIsMHhlMywweDAwLDB4YjggfX0sCisgezE2LCAweGIxYjAsIDAsIHsweDUwLDB4MmUsMHhhOCwweDhiLDB4ODAsMHgyMiwweGUzLDB4NDgsMHg4OCwweDUwLDB4MjIsMHgwMCwweDA4LDB4OGMsMHgwMiwweDBlIH19LAorIHsxNiwgMHhiMWMwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4NDAsMHg5MSwweDAwLDB4MmEsMHg0OCB9fSwKKyB7MTYsIDB4YjFkMCwgMCwgezB4MDksMHgxNCwweDgyLDB4MDUsMHgyMCwweDgxLDB4MDgsMHgyMCwweDU4LDB4MDksMHgxMSwweDAyLDB4ODUsMHg4OCwweGIxLDB4NDAgfX0sCisgezE2LCAweGIxZTAsIDAsIHsweGEwLDB4NDAsMHgwOCwweDEyLDB4MDIsMHhjNSwweDgwLDB4YTEsMHgwMCwweDI4LDB4NDAsMHgwYiwweDE4LDB4MDIsMHhjNCwweDg0IH19LAorIHsxNiwgMHhiMWYwLCAwLCB7MHhhMSwweDAwLDB4MjQsMHg1MCwweDA4LDB4MTAsMHg5MiwweDAzLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjIwMCwgMCwgezB4MTgsMHgxNSwweGFjLDB4MTAsMHg5YiwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweDA0LDB4MDYsMHg4OSwweDA0LDB4MjAgfX0sCisgezE2LCAweGIyMTAsIDAsIHsweDQwLDB4MDksMHg5MCwweDAyLDB4ZTQsMHgwMSwweGI5LDB4MDIsMHgyMiwweDQxLDB4ODksMHhhMCwweDgyLDB4ZTAsMHhhMCwweGI5IH19LAorIHsxNiwgMHhiMjIwLCAwLCB7MHgyOCwweDJlLDB4NDQsMHgwYiwweGIwLDB4MDIsMHhlNCwweDAyLDB4YjksMHgwMCwweDI2LDB4NDAsMHgyOCwweDEwLDB4MDIsMHgwNiB9fSwKKyB7MTYsIDB4YjIzMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZDksMHgwMCwweDM4LDB4NDAgfX0sCisgezE2LCAweGIyNDAsIDAsIHsweDBkLDB4OTAsMHgwMywweDI0LDB4MDAsMHhjOSwweGEwLDB4YTIsMHg0MCwweDhkLDB4OTAsMHgwMywweGE0LDB4MDAsMHhmOSwweDAwIH19LAorIHsxNiwgMHhiMjUwLCAwLCB7MHgzNiwweDQwLDB4MGMsMHg4NCwweDEzLDB4ZTIsMHgwMCwweGU5LDB4MDAsMHgzYSwweDUwLDB4MGYsMHg5YywweDAyLDB4ZTYsMHg4NCB9fSwKKyB7MTYsIDB4YjI2MCwgMCwgezB4ZTksMHgwMCwweGI2LDB4NDAsMHgwYywweDkwLDB4MDMsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIyNzAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAwLDB4ZTEsMHgwMCwweDNlLDB4NjgsMHgwZSwweDEwLDB4MDMsMHhhNCwweDAwLDB4ZjEsMHgyOCwweDNhIH19LAorIHsxNiwgMHhiMjgwLCAwLCB7MHg0MCwweDBlLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MiwweDBmLDB4ODAsMHgyMywweGUyLDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4YjI5MCwgMCwgezB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MSwweDIzLDB4ZTQsMHg0MCwweGMxLDB4MDAsMHgzYSwweDQwLDB4MGYsMHg5MCwweDBiLDB4Y2EgfX0sCisgezE2LCAweGIyYTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4ODAsMHgwMCwweGM4LDB4MDAsMHgzMiwweDAwIH19LAorIHsxNiwgMHhiMmIwLCAwLCB7MHgwYywweDgwLDB4MDMsMHhhMCwweDIwLDB4YzgsMHg0MCwweDNlLDB4MDAsMHgwZSwweDgxLDB4NjMsMHg2MCwweDAwLDB4ZjAsMHgwNCB9fSwKKyB7MTYsIDB4YjJjMCwgMCwgezB4M2MsMHgwMSwweDBjLDB4ODQsMHgwMywweGUwLDB4MDAsMHhjOCwweDAwLDB4M2UsMHgwMCwweDBlLDB4ODAsMHgwMywweGMxLDB4MDAgfX0sCisgezE2LCAweGIyZDAsIDAsIHsweGQ4LDB4MTAsMHgzMiwweDAwLDB4MGMsMHg4MCwweDIzLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMmUwLCAwLCB7MHgyOCwweDA1LDB4MzgsMHg2MCwweDhlLDB4MDAsMHgyMiwweDgwLDB4MGEsMHhhMCwweDAyLDB4MzgsMHg4MCwweGJlLDB4MDAsMHgzYSB9fSwKKyB7MTYsIDB4YjJmMCwgMCwgezB4ODAsMHgwOCwweGUwLDB4MDIsMHgyOCwweDAwLDB4YmEsMHgwMCwweDIzLDB4OTgsMHgxOCwweGVjLDB4MDIsMHhmOCwweDIwLDB4YWUgfX0sCisgezE2LCAweGIzMDAsIDAsIHsweDAwLDB4MjIsMHg4MCwweDBiLDB4ZTQsMHg4MiwweGU4LDB4MDIsMHhjZSwweDQ0LDB4MjgsMHg4MCwweDBkLDB4YTAsMHgwYSwweDBhIH19LAorIHsxNiwgMHhiMzEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDQwLDB4MDAsMHg4MiwweDA0LDB4YTAsMHhjMCB9fSwKKyB7MTYsIDB4YjMyMCwgMCwgezB4MDksMHgzMCwweDAyLDB4OGUsMHgwNCwweDgzLDB4NTAsMHg2YywweGMwLDB4MGEsMHgzMCwweDg2LDB4MGMsMHgwMCwweGIzLDB4MDAgfX0sCisgezE2LCAweGIzMzAsIDAsIHsweDI4LDB4MzAsMHgwYSwweDM2LDB4MTIsMHhjYywweDgwLDB4ODEsMHgwMCwweDI0LDB4YzAsMHgwYiwweDMyLDB4MDYsMHhjYywweDAwIH19LAorIHsxNiwgMHhiMzQwLCAwLCB7MHg4MCwweDg4LDB4NjQsMHg2MCwweDI4LDB4MTAsMHgwMiwweDAyLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjM1MCwgMCwgezB4YTAsMHgwMSwweDEwLDB4MTIsMHg4NCwweDQwLDB4MjEsMHhjOCwweDBhLDB4NzIsMHgwMiwweDEwLDB4MDAsMHhiNywweDAwLDB4MmQgfX0sCisgezE2LCAweGIzNjAsIDAsIHsweGNjLDB4MDgsMHgzOCwweDEyLDB4MWMsMHgwMCwweGIzLDB4MzAsMHgyMCwweDAwLDB4MDgsMHg3MSwweDgyLDB4ZmUsMHgwMCwweGE0IH19LAorIHsxNiwgMHhiMzcwLCAwLCB7MHg4MCwweDIxLDB4YzgsMHgwYiwweDcwLDB4MDIsMHhkYywweDAxLDB4ODcsMHgwMCwweDJjLDB4NDIsMHgwOSwweDUxLDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4YjM4MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxMiwweDAwLDB4YzIsMHg4MCwweDMxLDB4ZjggfX0sCisgezE2LCAweGIzOTAsIDAsIHsweDRjLDB4ZmMsMHgxMywweDkyLDB4MDksMHhjNywweDgwLDB4M2MsMHhlZCwweDFlLDB4NzgsMHgyNywweDFlLDB4MDAsMHhmNywweDhjIH19LAorIHsxNiwgMHhiM2EwLCAwLCB7MHg3OSwweDIwLDB4MDgsMHg3YSwweDAzLDB4ZGUsMHg4MSwweDg0LDB4ODAsMHgzZCwweGUwLDB4MGUsMHg3OCwweDAzLDB4ZmUsMHgyMCB9fSwKKyB7MTYsIDB4YjNiMCwgMCwgezB4YzUsMHg4MSwweDM1LDB4NjAsMHgyYywweDU4LDB4MDMsMHgyYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIzYzAsIDAsIHsweDA4LDB4MWQsMHg4MCwweDAwLDB4ZjgsMHgwNCwweDNlLDB4ZDAsMHgwZiwweGIwLDB4MTMsMHhlMCwweDAwLDB4ZmIsMHgwMiwweDNhIH19LAorIHsxNiwgMHhiM2QwLCAwLCB7MHhkMCwweDBmLDB4YTAsMHgwYiwweGFjLDB4NDAsMHhmYiwweDAwLDB4M2EsMHgwMCwweDJmLDB4YjAsMHgwMywweGNjLDB4MDAsMHhmMCB9fSwKKyB7MTYsIDB4YjNlMCwgMCwgezB4MDAsMHgzYSwweGM0LDB4MGYsMHhiMCwweDAzLDB4ZmMsMHg0MSwweGYzLDB4MDAsMHgzYSwweDQwLDB4MGYsMHg1MCwweDkzLDB4YzIgfX0sCisgezE2LCAweGIzZjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZjYsMHgwMCwweGNjLDB4ODEsMHgzZiwweGZjIH19LAorIHsxNiwgMHhiNDAwLCAwLCB7MHgxYywweGY4LDB4MDMsMHg3NiwweDQwLDB4ZWYsMHg5MiwweDNmLDB4ZTQsMHg4YywweGY4LDB4MDMsMHhiZiwweDEwLDB4ZmYsMHg4MCB9fSwKKyB7MTYsIDB4YjQxMCwgMCwgezB4YjMsMHgyMCwweDBlLDB4ZjksMHgxMywweGZlLDB4MjQsMHhmZCwweDk0LDB4MzcsMHhlMCwweDFjLDB4ZjksMHgwMywweGVlLDB4MDAgfX0sCisgezE2LCAweGI0MjAsIDAsIHsweGNkLDB4ODAsMHhiMywweGUwLDB4MGMsMHg1OCwweDAyLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNDMwLCAwLCB7MHhhOCwweDExLDB4OTQsMHg0MCwweDgwLDB4MDAsMHgyZiwweGM0LDB4MDgsMHg3MiwweDAyLDB4ZGQsMHgwOCwweGQ3LDB4MDAsMHgyZCB9fSwKKyB7MTYsIDB4YjQ0MCwgMCwgezB4Y2MsMHgwOCwweGRlLDB4MDMsMHg1YywweDAwLDB4YjcsMHgwNCwweDIxLDB4ODAsMHhjOCwweDcwLDB4ODMsMHhkYywweDAwLDB4YjQgfX0sCisgezE2LCAweGI0NTAsIDAsIHsweGEwLDB4MmYsMHhjMCwweDBjLDB4NzAsMHgwMiwweGRlLDB4ODAsMHg4NywweDAwLDB4MjEsMHhjMiwweDBhLDB4NTEsMHg0MiwweDJhIH19LAorIHsxNiwgMHhiNDYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkwLDB4MDAsMHg4NCwweDAwLDB4MmQsMHhjOCB9fSwKKyB7MTYsIDB4YjQ3MCwgMCwgezB4NDgsMHg3MCwweDAyLDB4NTQsMHgwYywweGE3LDB4MDAsMHgyYywweGMwLDB4ODksMHg3MiwweDAyLDB4NWMsMHgwMCwweGIzLDB4MTAgfX0sCisgezE2LCAweGI0ODAsIDAsIHsweDIwLDB4MDAsMHgwYSwweDcwLDB4MDYsMHhkYywweDAwLDB4YjQsMHgyMCwweDJkLDB4YzAsMHgwOCwweDcwLDB4MDIsMHhkYywweDgwIH19LAorIHsxNiwgMHhiNDkwLCAwLCB7MHg5MywweDAwLDB4MjAsMHhjMCwweDA4LDB4NTAsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjRhMCwgMCwgezB4MjAsMHgxNCwweGMwLDB4MDAsMHg4MCwweDAwLDB4MmUsMHhjMCwweDA4LDB4MzAsMHgwMiwweGM0LDB4MDgsMHhhMiwweDQyLDB4MmMgfX0sCisgezE2LCAweGI0YjAsIDAsIHsweGMxLDB4MDksMHgyMCwweDAyLDB4NGMsMHgwMCwweGIzLDB4MDAsMHgyMCwweDgwLDB4MDgsMHgzYywweDIyLDB4OGMsMHgyMCwweGIwIH19LAorIHsxNiwgMHhiNGMwLCAwLCB7MHgwOCwweDJlLDB4ZTAsMHgwOCwweDM4LDB4MTAsMHhjZiwweDBhLDB4OTMsMHg0MCwweGEwLDB4ZjAsMHgwYSwweDEwLDB4MDIsMHgwOCB9fSwKKyB7MTYsIDB4YjRkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhOCwweDAwLDB4YzEsMHgwMCwweDNmLDB4YzAgfX0sCisgezE2LCAweGI0ZTAsIDAsIHsweDJjLDB4ZjAsMHgwMywweDY4LDB4MDAsMHhhYSwweDAwLDB4M2YsMHhjMCwweDJkLDB4ODAsMHgwMywweDdjLDB4MDAsMHhmZiwweDAwIH19LAorIHsxNiwgMHhiNGYwLCAwLCB7MHgzMiwweDAwLDB4MGUsMHhiMCwweDEyLDB4ZWQsMHgyNCwweGZhLDB4MDgsMHgyNywweGM4LDB4MTAsMHhiOCwweGEyLDB4ZmYsMHg2MCB9fSwKKyB7MTYsIDB4YjUwMCwgMCwgezB4OTgsMHhhMCwweGEyLDB4ZTAsMHgwYywweDUwLDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI1MTAsIDAsIHsweDgwLDB4MDAsMHhjOSwweDA2LDB4ZjgsMHg0MSwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHhlOSwweDEwLDB4NWEsMHgyMCwweDNlIH19LAorIHsxNiwgMHhiNTIwLCAwLCB7MHhjMCwweDBlLDB4ODAsMHgwMywweGVjLDB4MDAsMHhmMywweDAwLDB4N2UsMHgwMSwweDBmLDB4YjAsMHg5MywweGVkLDB4MDAsMHhmOCB9fSwKKyB7MTYsIDB4YjUzMCwgMCwgezB4NDAsMHgzZSwweGMwLDB4MGUsMHhiMCwweDAzLDB4ZmMsMHgwMCwweGUzLDB4MDgsMHgzYywweGMyLDB4MGYsMHhkMCwweDEzLDB4ZTAgfX0sCisgezE2LCAweGI1NDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZjMsMHgwMiwweGNjLDB4MDAsMHgzYiwweGMyIH19LAorIHsxNiwgMHhiNTUwLCAwLCB7MHgwYywweGYwLDB4MjMsMHhhZSwweDQwLDB4ZGYsMHg4MSwweDM5LDB4YzAsMHgwNiwweGQwLDB4MDMsMHhmYywweDAwLDB4ZmYsMHgwNCB9fSwKKyB7MTYsIDB4YjU2MCwgMCwgezB4MzEsMHg0MSwweDBjLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhjYywweGEwLDB4MzcsMHhjMiwweDBjLDB4ZjAsMHgwMywweDdjLDB4MDQgfX0sCisgezE2LCAweGI1NzAsIDAsIHsweGNkLDB4MDAsMHgzMywweGYwLDB4MGMsMHhkMCwweDAzLDB4MDgsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNTgwLCAwLCB7MHg4MSwweDA0LDB4NjAsMHgwMCwweDg4LDB4ODAsMHgyMiwweGMwLDB4MGEsMHhiMCwweDAyLDB4ZTksMHgwMCwweGFiLDB4NDQsMHgyZSB9fSwKKyB7MTYsIDB4YjU5MCwgMCwgezB4YzAsMHgwOCwweDg4LDB4MDIsMHhlYywweDAwLDB4YmIsMHgwMCwweGEyLDB4NzAsMHgwYSwweGI0LDB4MDIsMHhjYywweDAwLDB4YTAgfX0sCisgezE2LCAweGI1YTAsIDAsIHsweDIwLDB4MjIsMHhjMCwweDBmLDB4YmMsMHgwMiwweGNjLDB4MGEsMHg4YiwweDgwLDB4YTIsMHhjMCwweDBkLDB4OTAsMHgwMiwweDIwIH19LAorIHsxNiwgMHhiNWIwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDIwLDB4MDAsMHg4OSwweDgwLDB4MmEsMHhjMCB9fSwKKyB7MTYsIDB4YjVjMCwgMCwgezB4MDgsMHhiMCwweDAyLDB4Y2MsMHgwNiwweDg4LDB4NjAsMHgyZSwweGMwLDB4MGEsMHg5OCwweDA2LDB4ZWMsMHgwMSwweGJiLDB4MDAgfX0sCisgezE2LCAweGI1ZDAsIDAsIHsweDIyLDB4MzEsMHgwMiwweGIyLDB4MDIsMHhlYywweGEwLDB4OGEsMHgwMCwweDI2LDB4YzAsMHg0OCwweGE4LDB4MDIsMHhlYywweDA0IH19LAorIHsxNiwgMHhiNWUwLCAwLCB7MHhhOSwweDgwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweDIwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjVmMCwgMCwgezB4MDgsMHgwNCwweDAwLDB4MDAsMHg4MCwweDAwLDB4MjAsMHhjMCwweDBhLDB4MzAsMHg0MiwweGNjLDB4MDAsMHg4MCwweDAxLDB4MmMgfX0sCisgezE2LCAweGI2MDAsIDAsIHsweGMwLDB4MWEsMHgxMiwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDAsMHgyMCwweDAwLDB4NGEsMHgzMCwweDAyLDB4Y2MsMHgwMCwweGEwIH19LAorIHsxNiwgMHhiNjEwLCAwLCB7MHgwMCwweDA4LDB4YzAsMHgwYiwweDIwLDB4MDYsMHhlYywweGEwLDB4YTMsMHgwMCwweGEwLDB4NDAsMHgyOSwweDEwLDB4MDAsMHgwMiB9fSwKKyB7MTYsIDB4YjYyMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2MCwweDAwLDB4YzgsMHg1MCwweDNiLDB4YzAgfX0sCisgezE2LCAweGI2MzAsIDAsIHsweDBjLDB4YjAsMHgwMywweGFjLDB4MDAsMHhjOSwweDAwLDB4M2IsMHhjMCwweDBlLDB4OTIsMHg4MywweGZjLDB4MDAsMHhiZiwweDAwIH19LAorIHsxNiwgMHhiNjQwLCAwLCB7MHgxMiwweDAwLDB4MGMsMHhiMCwweDAzLDB4ZWMsMHgwMCwweDg4LDB4MjYsMHgxNiwweGMwLDB4MGMsMHg4MCwweDE3LDB4NWMsMHg4MCB9fSwKKyB7MTYsIDB4YjY1MCwgMCwgezB4ZTksMHgwMSwweDMyLDB4NDAsMHgyYywweGQwLDB4MDMsMHgwMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI2NjAsIDAsIHsweGEwLDB4MWQsMHhkMCwweDAwLDB4ZmMsMHgyMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmYywweDAwLDB4ZmMsMHgwMCwweDNmIH19LAorIHsxNiwgMHhiNjcwLCAwLCB7MHhjMCwweDBkLDB4ODAsMHgwMywweGZjLDB4MDgsMHhmZiwweDAwLDB4M2YsMHgwMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MTAsMHhmOCB9fSwKKyB7MTYsIDB4YjY4MCwgMCwgezB4NDAsMHgzNywweGMwLDB4MGUsMHhlMCwweDIxLDB4ZmMsMHgwOCwweGRmLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhkMCwweDAzLDB4ZTAgfX0sCisgezE2LCAweGI2OTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHhjMCwweGZmLDB4MjEsMHg3MSwweDI0IH19LAorIHsxNiwgMHhiNmEwLCAwLCB7MHgwZiwweGYxLDB4ODMsMHhmMiwweDQwLDB4ZmYsMHgwMCwweDM3LDB4YzQsMHg5ZiwweGYyLDB4NDcsMHgzZCwweDA0LDB4YzcsMHgyMCB9fSwKKyB7MTYsIDB4YjZiMCwgMCwgezB4MzMsMHhjMCwweDBjLDB4NzgsMHgyMywweGZlLDB4NDAsMHhlOCwweDEwLDB4MjcsMHhjNCwweDBmLDB4ZjIsMHgxMywweDNjLDB4ODQgfX0sCisgezE2LCAweGI2YzAsIDAsIHsweGM0LDB4ODEsMHgzMywweDIwLDB4NGMsMHhmMCwweDIzLDB4NzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNmQwLCAwLCB7MHg4MCwweDEwLDB4ZWQsMHg0MCwweGJmLDB4NTQsMHg2MiwweGM4LDB4MGIsMHhmNiwweDAyLDB4ZTAsMHgwMCwweGJiLDB4ZDAsMHgyMiB9fSwKKyB7MTYsIDB4YjZlMCwgMCwgezB4ZjAsMHgxZiwweGY5LDB4MTIsMHgzZCwweDgwLDB4OWYsMHg4MSwweDJiLDB4ZTAsMHgwYSwweGI4LDB4MTIsMHhlOCwweDAwLDB4OGYgfX0sCisgezE2LCAweGI2ZjAsIDAsIHsweDA0LDB4MjIsMHhkMCwweDA4LDB4YjMsMHg4YSwweGJmLDB4NDIsMHg4YiwweDgyLDB4MjIsMHhlMCwweDI4LDB4OGMsMHgwMiwweDIwIH19LAorIHsxNiwgMHhiNzAwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MDAsMHhiMywweDI4LDB4MjgsMHgwOCB9fSwKKyB7MTYsIDB4YjcxMCwgMCwgezB4MGIsMHgzMCwweDA2LDB4ODAsMHg4MCwweGIzLDB4MDIsMHgyNCwweGQxLDB4MGIsMHgzMCwweDAyLDB4OGQsMHg4MCwweDkzLDB4MTAgfX0sCisgezE2LCAweGI3MjAsIDAsIHsweDIwLDB4Y2UsMHg4YiwweDMwLDB4MDIsMHhjYywweDg0LDB4YTEsMHgyMSwweDJjLDB4Y2MsMHgwYSwweDMwLDB4MGEsMHg0YywweDAwIH19LAorIHsxNiwgMHhiNzMwLCAwLCB7MHg5MywweDAwLDB4MjgsMHhjMCwweDA4LDB4M2MsMHgwMiwweDIyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Yjc0MCwgMCwgezB4YzAsMHgxNSwweGFjLDB4MTAsMHhiYiwweDAyLDB4NmEsMHhlMCwweDBiLDB4YjAsMHgwMiwweGUxLDB4MDgsMHhiYiwweDA0LDB4MmEgfX0sCisgezE2LCAweGI3NTAsIDAsIHsweGMwLDB4MGEsMHhiMCwweDEyLDB4OGMsMHgwMCwweDliLDB4MDAsMHgyYSwweGMwLDB4MGIsMHhiMSwweDA2LDB4YzgsMHg4MCwweDhiIH19LAorIHsxNiwgMHhiNzYwLCAwLCB7MHg4MiwweDZhLDB4YzEsMHgwYSwweDMwLDB4MDIsMHhhYywweDE4LDB4ODgsMHgxMCwweDJhLDB4NDgsMHgwOCwweDgwLDB4MDIsMHgzMCB9fSwKKyB7MTYsIDB4Yjc3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4ZmIsMHgwMCwweGFhLDB4MzAgfX0sCisgezE2LCAweGI3ODAsIDAsIHsweDBmLDB4YjAsMHgwMywweGE4LDB4MDAsMHhmMywweDAxLDB4YjYsMHhjMSwweDBiLDB4YjAsMHgwMiwweGFjLDB4MDgsMHg0YiwweDAwIH19LAorIHsxNiwgMHhiNzkwLCAwLCB7MHhiMiwweGMwLDB4MGYsMHhiOCwweDAyLDB4ZWMsMHgxMCwweGE5LDB4ODEsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4MGMsMHgwMCB9fSwKKyB7MTYsIDB4YjdhMCwgMCwgezB4Y2IsMHhhMCwweDE4LDB4ZDAsMHgwYywweGIwLDB4MDMsMHgxMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI3YjAsIDAsIHsweGUwLDB4MDEsMHhiYywweDA4LDB4ZjcsMHgwMCwweDM3LDB4MDAsMHgwZiwweGYwLDB4MDMsMHhmZCwweDAwLDB4ZmYsMHgwMCwweDM3IH19LAorIHsxNiwgMHhiN2MwLCAwLCB7MHhjMCwweDBmLDB4YjAsMHgwNywweDdjLDB4MDAsMHhlNywweDAwLDB4M2UsMHhjMCwweDBhLDB4ZjAsMHgwMywweGZlLDB4MDAsMHhmNyB9fSwKKyB7MTYsIDB4YjdkMCwgMCwgezB4MDAsMHgzNiwweGMwLDB4MGMsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4ODAsMHgzNywweGUwLDB4MGYsMHhhMCwweDAzLDB4YjggfX0sCisgezE2LCAweGI3ZTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGRiLDB4MDAsMHgzNiwweDAwIH19LAorIHsxNiwgMHhiN2YwLCAwLCB7MHgwZSwweGIwLDB4MDMsMHg2OSwweDAwLDB4ZGIsMHgwOSwweDNhLDB4YzAsMHgxZiwweDMwLDB4MjMsMHhlYywweDA4LDB4Y2IsMHgyMCB9fSwKKyB7MTYsIDB4YjgwMCwgMCwgezB4MzQsMHhjMCwweDJmLDB4YjAsMHgwMywweGVjLDB4NDAsMHhlYiwweDQ4LDB4M2UsMHhjNCwweDRkLDB4YjAsMHg4YiwweDZjLDB4MDAgfX0sCisgezE2LCAweGI4MTAsIDAsIHsweGNiLDB4MDAsMHgzMiwweDkwLDB4MGYsMHgzMCwweDAzLDB4OTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiODIwLCAwLCB7MHhjOCwweDA1LDB4M2MsMHgwMCwweDhmLDB4MDAsMHgyMiwweDAwLDB4NDgsMHhmMCwweDIyLDB4MmMsMHgwMCwweDhmLDB4MDAsMHgyMyB9fSwKKyB7MTYsIDB4YjgzMCwgMCwgezB4ZTAsMHg4YiwweGY1LDB4MTAsMHgzYywweDAwLDB4OGYsMHg4MCwweDIzLDB4ZjAsMHg4MCwweDk4LDB4MDMsMHgyZCwweDQ0LDB4ZGIgfX0sCisgezE2LCAweGI4NDAsIDAsIHsweDAwLDB4MjMsMHhkNCwweDA4LDB4ZjgsMHgwMiwweDNjLDB4MDAsMHg4MywweDAwLDB4MjIsMHhjMCwweDBiLDB4YTQsMHg4MiwweDMyIH19LAorIHsxNiwgMHhiODUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MDAsMHg5MywweDAwLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4Yjg2MCwgMCwgezB4MGIsMHgzMCwweDAyLDB4ODQsMHgwMCwweGIzLDB4MDEsMHgyOCwweGY2LDB4MDksMHgzNCwweDMyLDB4OGMsMHgwMSwweGIzLDB4ZDAgfX0sCisgezE2LCAweGI4NzAsIDAsIHsweDI0LDB4ZTgsMHgwYSwweDMxLDB4MGEsMHg4NiwweDAwLDB4ODMsMHgwMCwweDJhLDB4ZTAsMHgwMCwweDMwLDB4MDIsMHg4YywweDAwIH19LAorIHsxNiwgMHhiODgwLCAwLCB7MHg4MywweDAwLDB4MjgsMHhjMCwweDg5LDB4MzgsMHhhMiwweDc4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Yjg5MCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDAsMHg5NywweDk0LDB4MjMsMHhlMCwweDA5LDB4MzgsMHgwMiwweDMyLDB4MDAsMHg5NywweGExLDB4MjEgfX0sCisgezE2LCAweGI4YTAsIDAsIHsweGU0LDB4MGIsMHg3OCwweDAyLDB4MWUsMHg0MCwweGI3LDB4YTAsMHgyNSwweGVjLDB4MDgsMHhmYywweDAyLDB4M2EsMHgwMCwweDkzIH19LAorIHsxNiwgMHhiOGIwLCAwLCB7MHhiOCwweDIxLDB4ZTAsMHgwOCwweDc4LDB4ODIsMHg5ZSwweDQwLDB4ODcsMHhjMCwweDI5LDB4YTAsMHgwYiwweDU4LDB4MDIsMHg0OCB9fSwKKyB7MTYsIDB4YjhjMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgyYywweDAwLDB4ZGIsMHgwMCwweDM0LDB4MjAgfX0sCisgezE2LCAweGI4ZDAsIDAsIHsweDBmLDB4M2EsMHgwMywweDhlLDB4MDAsMHhmMywweGIwLDB4MjgsMHhjNCwweDBiLDB4M2EsMHgwMywweGFlLDB4NDAsMHhmMywweGEwIH19LAorIHsxNiwgMHhiOGUwLCAwLCB7MHgzNCwweGVlLDB4MGYsMHgzMCwweDIzLDB4ODQsMHgwMCwweGUzLDB4ZjAsMHgzOCwweGMwLDB4MGMsMHhiMCwweDBiLDB4OGUsMHg0MiB9fSwKKyB7MTYsIDB4YjhmMCwgMCwgezB4YzMsMHgwMCwweDM4LDB4YzAsMHgwZiwweDMwLDB4NjMsMHhkMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI5MDAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZWIsMHg0MiwweDNhLDB4YzQsMHgxZSwweGIxLDB4MDcsMHg4OCwweGQxLDB4ZTMsMHgwMCwweDNmIH19LAorIHsxNiwgMHhiOTEwLCAwLCB7MHhjNSwweDhmLDB4ZjEsMHg2MywweGFjLDB4MTAsMHhjYiwweDUwLDB4M2IsMHhjMywweDBmLDB4ZDEsMHgwMywweGM4LDB4MDAsMHhiYiB9fSwKKyB7MTYsIDB4YjkyMCwgMCwgezB4MjAsMHgzYiwweGMwLDB4MmUsMHhmMSwweDAzLDB4MWMsMHgwMCwweGZmLDB4MDAsMHgzNywweGMwLDB4NGYsMHhkMSwweDAzLDB4OTAgfX0sCisgezE2LCAweGI5MzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHg0MCwweGZiLDB4NDQsMHhiMiwweGMwIH19LAorIHsxNiwgMHhiOTQwLCAwLCB7MHg0ZiwweGIzLDB4NDMsMHgyNCwweDAwLDB4ZGIsMHgxMCwweDM2LDB4YzAsMHg0YywweGJlLDB4MjIsMHg2ZCwweDIwLDB4Y2IsMHg1MCB9fSwKKyB7MTYsIDB4Yjk1MCwgMCwgezB4M2UsMHhjOSwweDRjLDB4YjAsMHgxMywweDI0LDB4MDAsMHhjZiwweDIwLDB4MzMsMHhjMCwweDNkLDB4ZjAsMHgyMywweDJjLDB4YzAgfX0sCisgezE2LCAweGI5NjAsIDAsIHsweGQ4LDB4MDAsMHgzZSwweDQwLDB4OGYsMHgzMCwweDAzLDB4MmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiOTcwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwNCwweGI3LDB4NjAsMHgyMSwweGMxLDB4OGIsMHhmMCwweGEyLDB4MTQsMHgxMCwweDg3LDB4MDAsMHgwZiB9fSwKKyB7MTYsIDB4Yjk4MCwgMCwgezB4YzgsMHgwZCwweDcxLDB4MGEsMHgxZCwweDAwLDB4ODcsMHgwMCwweDJjLDB4Y2MsMHg0OCwweDcwLDB4MmEsMHg5YywweDAwLDB4ODcgfX0sCisgezE2LCAweGI5OTAsIDAsIHsweDBjLDB4MjEsMHhjMCwweDBjLDB4NzIsMHgwMiwweDBjLDB4YTIsMHg4NywweDAwLDB4MmQsMHhjMCwweDBiLDB4NzAsMHgwMiwweDEyIH19LAorIHsxNiwgMHhiOWEwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4MDAsMHhiMywweDgwLDB4MjEsMHhlMCB9fSwKKyB7MTYsIDB4YjliMCwgMCwgezB4MGIsMHg3YSwweDAyLDB4ZGUsMHgwMCwweGI3LDB4ODEsMHgwNSwweGU0LDB4MDgsMHg3OSwweDAyLDB4NWMsMHg4MCwweDg3LDB4YTAgfX0sCisgezE2LCAweGI5YzAsIDAsIHsweDJkLDB4ZTAsMHgwOCwweGY4LDB4MDYsMHhiNiwweDAwLDB4ODcsMHg4MCwweDIwLDB4ZTQsMHgwYSwweDdiLDB4MTIsMHgxZSwweDkwIH19LAorIHsxNiwgMHhiOWQwLCAwLCB7MHg5NywweDg4LDB4MmQsMHhlMCwweDBiLDB4NzgsMHgwZSwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjllMCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MDAsMHhiMywweDAwLDB4MjAsMHhkMCwweDBiLDB4YjAsMHgwMiwweDZlLDB4MzQsMHhhMywweDAwLDB4MmMgfX0sCisgezE2LCAweGI5ZjAsIDAsIHsweGMxLDB4MDksMHgzMCwweDAyLDB4NGMsMHgwMCwweDgzLDB4MDAsMHgyYywweGMwLDB4NDgsMHgxMCwweDAyLDB4OGQsMHg4MCwweDgzIH19LAorIHsxNiwgMHhiYTAwLCAwLCB7MHhjMCwweDAwLDB4YzAsMHg4YSwweDMwLDB4MTIsMHgwYywweDAwLDB4ODAsMHgwMCwweDJjLDB4MTYsMHgwYiwweDM4LDB4MDIsMHgxMiB9fSwKKyB7MTYsIDB4YmExMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZmEsMHgwMCwweDMzLDB4ODggfX0sCisgezE2LCAweGJhMjAsIDAsIHsweDBmLDB4YTAsMHgwMywweDc5LDB4OTAsMHhmYSwweDAxLDB4MzYsMHg4MCwweDFjLDB4YTAsMHgwMywweDY4LDB4MDAsMHhjYSwweDAwIH19LAorIHsxNiwgMHhiYTMwLCAwLCB7MHgzZSwweDgxLDB4MmMsMHhhMCwweDBiLDB4YjksMHgwYywweGNlLDB4ZTIsMHhiMiwweDgwLDB4OGUsMHhhMCwweDBiLDB4MjgsMHgwMCB9fSwKKyB7MTYsIDB4YmE0MCwgMCwgezB4ZGEsMHg4MCwweDNjLDB4YjAsMHgwZiwweGUwLDB4ODMsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJhNTAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjAsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhhMCwweDAwLDB4YzgsMHgwMCwweDJlIH19LAorIHsxNiwgMHhiYTYwLCAwLCB7MHgwMCwweDBmLDB4ODQsMHgyMywweGEwLDB4MDAsMHhmMCwweDQwLDB4M2UsMHgxMCwweDBmLDB4ODQsMHgwMywweGUxLDB4MDIsMHhmOCB9fSwKKyB7MTYsIDB4YmE3MCwgMCwgezB4NDgsMHgzZSwweDEwLDB4MGMsMHg4MCwweDAzLDB4YzAsMHgxMCwweGY4LDB4ODAsMHgzZSwweDAwLDB4MGYsMHgwMCwweDAzLDB4ZDIgfX0sCisgezE2LCAweGJhODAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGQ5LDB4MDAsMHgzNiwweDQyIH19LAorIHsxNiwgMHhiYTkwLCAwLCB7MHgwZiwweDkwLDB4MDMsMHgyNCwweDE4LDB4ZjksMHgxMCwweDNjLDB4NDgsMHg2OCwweDkyLDB4MTMsMHhlNCwweDAwLDB4YTksMHgxMSB9fSwKKyB7MTYsIDB4YmFhMCwgMCwgezB4YjIsMHg2MCwweDBlLDB4OTEsMHgwMywweDI2LDB4MDAsMHhjOSwweDAwLDB4MzIsMHg2MCwweDBjLDB4MTAsMHgwMywweDI0LDB4MDggfX0sCisgezE2LCAweGJhYjAsIDAsIHsweGM5LDB4MDAsMHgzZSwweDQwLDB4MGMsMHg5MCwweDIzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiYWMwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDQwLDB4MGIsMHg5MCwweDAyLDB4YTQsMHgwOCwweDg5LDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4YmFkMCwgMCwgezB4NDIsMHg0OCwweDk0LDB4MDIsMHhlNCwweDAwLDB4ODksMHg4MCwweDIyLDB4NzAsMHgwOCwweDE0LDB4MjIsMHhhNCwweDAyLDB4ODkgfX0sCisgezE2LCAweGJhZTAsIDAsIHsweDQyLDB4MmEsMHg3MCwweDI4LDB4OTAsMHgwYSwweDI0LDB4MDAsMHhhOSwweDAwLDB4MmUsMHg0MCwweDI4LDB4OTAsMHgwMiwweGEwIH19LAorIHsxNiwgMHhiYWYwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDA0LDB4MDAsMHg5OSwweDAwLDB4MjYsMHhjMCB9fSwKKyB7MTYsIDB4YmIwMCwgMCwgezB4MDMsMHg5MCwweDAyLDB4MjQsMHgwMSwweGE5LDB4MDAsMHgwZSwweDQwLDB4MGEsMHg5MCwweDQ2LDB4YzQsMHgwYSwweDg5LDB4MDAgfX0sCisgezE2LCAweGJiMTAsIDAsIHsweDIwLDB4NDgsMHgwYSwweDkwLDB4MDIsMHgwNSwweDgwLDB4ODEsMHg0MSwweGEwLDB4NTgsMHg4OCwweDkwLDB4MDIsMHgyNCwweDA4IH19LAorIHsxNiwgMHhiYjIwLCAwLCB7MHg4ZCwweDgwLDB4MmYsMHhjMCwweDA4LDB4OTgsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmIzMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHg4MSwweDIwLDB4MjAsMHg0MCwweDBiLDB4MTIsMHgwMiwweDg0LDB4MDAsMHg4MSwweDI0LDB4MmMgfX0sCisgezE2LCAweGJiNDAsIDAsIHsweDU4LDB4MGEsMHgzMiwweDIyLDB4YzUsMHg4NCwweGExLDB4MDAsMHgyMCwweDUwLDB4MDgsMHhiMCwweDAyLDB4ODUsMHgwOCwweDgxIH19LAorIHsxNiwgMHhiYjUwLCAwLCB7MHg0MCwweDIwLDB4NWEsMHgwOCwweDE2LDB4ODIsMHgwNCwweDAwLDB4YTUsMHgwMCwweDJkLDB4NDAsMHgwOCwweDEyLDB4ODIsMHg4MiB9fSwKKyB7MTYsIDB4YmI2MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZDgsMHg1MCwweDM2LDB4MTQgfX0sCisgezE2LCAweGJiNzAsIDAsIHsweDBmLDB4ODUsMHgyMywweDAxLDB4NDAsMHhlOCwweDAwLDB4M2UsMHgwMCwweDBlLDB4ODAsMHg0MywweGMwLDB4MDgsMHhjYSwweDAwIH19LAorIHsxNiwgMHhiYjgwLCAwLCB7MHgzMiwweDgwLDB4MGUsMHg4MCwweDAzLDB4MjAsMHgwMCwweGMwLDB4MDAsMHgzMiwweDA4LDB4MmMsMHgwMiwweDAzLDB4MjAsMHgwOCB9fSwKKyB7MTYsIDB4YmI5MCwgMCwgezB4YzgsMHgwMCwweDNmLDB4MDAsMHgwYywweDgyLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJiYTAsIDAsIHsweDk4LDB4MWQsMHhlNCwweDQwLDB4ZjksMHgxMCwweDNmLDB4NDAsMHgwZiwweDkxLDB4NDMsMHhmNCwweDA0LDB4ZjksMHgxMCwweDNlIH19LAorIHsxNiwgMHhiYmIwLCAwLCB7MHg0NCwweDBkLDB4MTEsMHgwMywweGU0LDB4NDQsMHg1OSwweDQwLDB4M2UsMHg1MCwweDRmLDB4NTAsMHg0MywweGQ0LDB4MDIsMHhmZCB9fSwKKyB7MTYsIDB4YmJjMCwgMCwgezB4NDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDBiLDB4ZTUsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4NGYsMHhkMCwweDAzLDB4ZTYgfX0sCisgezE2LCAweGJiZDAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4NjYsMHg2MCwweGM5LDB4ZTAsMHgzMiwweDQ0IH19LAorIHsxNiwgMHhiYmUwLCAwLCB7MHgwZiwweDljLDB4MDMsMHhlNCwweDAwLDB4ZGQsMHg4NCwweDNmLDB4NjgsMHg4ZiwweGQ4LDB4NDIsMHhlNiwweGEwLDB4ZGQsMHhhNCB9fSwKKyB7MTYsIDB4YmJmMCwgMCwgezB4MzMsMHg2OCwweDBkLDB4NzAsMHgwMywweDI1LDB4MDAsMHhjOSwweGUwLDB4YjIsMHg2OCwweDBjLDB4OWEsMHhjMywweDI2LDB4MDAgfX0sCisgezE2LCAweGJjMDAsIDAsIHsweDk5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5YSwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiYzEwLCAwLCB7MHgzOCwweDEwLDB4ZTMsMHgwMCwweDg4LDB4ODAsMHhhYSwweDIwLDB4OGIsMHg4OCwweDAyLDB4ZTIsMHg4OCwweGI4LDB4MDEsMHgyZSB9fSwKKyB7MTYsIDB4YmMyMCwgMCwgezB4MDAsMHgwYiwweDg0LDB4MDIsMHhlMiwweGIwLDB4ODgsMHg1MCwweDIyLDB4MTQsMHgwOCwweDgwLDB4MDIsMHg4MiwweDgwLDB4ODggfX0sCisgezE2LCAweGJjMzAsIDAsIHsweGUwLDB4YjYsMHgzYSwweDA4LDB4Y2UsMHhhMiwweDIxLDB4MDgsMHg4OCwweDAwLDB4MmUsMHgwMCwweDBiLDB4YzQsMHgwMiwweDBlIH19LAorIHsxNiwgMHhiYzQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4ODAsMHg4MSwweDYwLDB4NjgsMHg0OCB9fSwKKyB7MTYsIDB4YmM1MCwgMCwgezB4NWIsMHgxNiwweDAyLDB4YzQsMHgyMCwweGExLDB4NDAsMHg2YywweDUwLDB4MGIsMHgxNCwweDAyLDB4YzQsMHgwMCwweGExLDB4MDAgfX0sCisgezE2LCAweGJjNjAsIDAsIHsweDI0LDB4NDAsMHgwYiwweDkwLDB4MjIsMHgxNCwweDkwLDB4ODUsMHg0MiwweDIxLDB4NTAsMHg1YiwweDUwLDB4MWEsMHgxNSwweDAwIH19LAorIHsxNiwgMHhiYzcwLCAwLCB7MHg5NSwweDAwLDB4MmQsMHg0MCwweDBiLDB4NTEsMHgwYSwweDgyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmM4MCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDEsMHg4OSwweDAwLDB4MmEsMHg0MCwweDBiLDB4OTAsMHg0NiwweGU0LDB4MDAsMHhiOSwweDAxLDB4MmUgfX0sCisgezE2LCAweGJjOTAsIDAsIHsweDQwLDB4MGIsMHg5MCwweDIwLDB4ZTQsMHgwMCwweGI5LDB4MDAsMHgyNiwweDQwLDB4MTgsMHhiOCwweDAyLDB4YTQsMHgwMiwweDhkIH19LAorIHsxNiwgMHhiY2EwLCAwLCB7MHgwOCwweDJmLDB4NDAsMHg4YiwweGQwLDB4MDIsMHgyNCwweDAwLDB4OGQsMHgyMCwweDJmLDB4NDgsMHgwYiwweGQwLDB4MDIsMHg4NiB9fSwKKyB7MTYsIDB4YmNiMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4YzksMHgwMCwweDMyLDB4NDAgfX0sCisgezE2LCAweGJjYzAsIDAsIHsweDBmLDB4OTAsMHgwMiwweGU0LDB4MTAsMHg0OSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhlOSwweDAxIH19LAorIHsxNiwgMHhiY2QwLCAwLCB7MHgzNiwweDQwLDB4MGYsMHgxOCwweDEzLDB4MjQsMHgxMCwweGM5LDB4ODIsMHgzMiwweDQwLDB4N2YsMHg5MCwweDIzLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4YmNlMCwgMCwgezB4ZDksMHgyMCwweDNlLDB4NzIsMHgwZiwweDkwLDB4MDMsMHhhOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJjZjAsIDAsIHsweDI4LDB4MDEsMHg4NCwweDAyLDB4ZjEsMHgwMSwweDE2LDB4NDAsMHg0ZiwweDkwLDB4MDMsMHhlNSwweDEwLDB4ZjksMHgwOCwweDJlIH19LAorIHsxNiwgMHhiZDAwLCAwLCB7MHg0MCwweDBmLDB4OTAsMHgxMywweGU0LDB4MDAsMHhjOSwweDAxLDB4M2EsMHg0MCwweDFmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4YmQxMCwgMCwgezB4MjAsMHgzNCwweDQwLDB4OGMsMHg5MCwweDAzLDB4YzQsMHgwOCwweGY5LDB4MDAsMHgzZSwweDYwLDB4MGYsMHgxMCwweDAzLDB4NGEgfX0sCisgezE2LCAweGJkMjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwOCwweGY4LDB4MDAsMHgzZSwweDAwIH19LAorIHsxNiwgMHhiZDMwLCAwLCB7MHgwYywweDgwLDB4MDMsMHg2MCwweDAwLDB4ZTgsMHgwMCwweDNlLDB4MDIsMHg0ZiwweDgwLDB4MTMsMHhlMCwweDAwLDB4ZDAsMHgwMCB9fSwKKyB7MTYsIDB4YmQ0MCwgMCwgezB4M2UsMHgwMCwweDBlLDB4ODEsMHgwMywweDMwLDB4MDAsMHhjYywweDQwLDB4MzMsMHgwMCwweDBjLDB4YzAsMHgwYiwweDIwLDB4MjAgfX0sCisgezE2LCAweGJkNTAsIDAsIHsweGU4LDB4MDAsMHgzZSwweDEwLDB4MGYsMHhjMCwweDAzLDB4Y2EsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiZDYwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwNCwweGJhLDB4MDAsMHgyMiwweDgwLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwMCwweGJlLDB4YzgsMHg2ZiB9fSwKKyB7MTYsIDB4YmQ3MCwgMCwgezB4ODAsMHgwYiwweGUxLDB4MjIsMHhhOCwweDAwLDB4OGUsMHgyMCwweDJmLDB4ODAsMHgwYiwweGUwLDB4MjMsMHg2OCwweDAwLDB4OGEgfX0sCisgezE2LCAweGJkODAsIDAsIHsweDAwLDB4MjIsMHg4MCwweDA4LDB4ZTAsMHgwMiwweDI5LDB4MDAsMHg4YSwweDAwLDB4MmUsMHhhOCwweDBiLDB4YTAsMHgwMCwweGNhIH19LAorIHsxNiwgMHhiZDkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHhiMywweDAwLDB4MjQsMHhjMCB9fSwKKyB7MTYsIDB4YmRhMCwgMCwgezB4MDksMHgzMCwweDAyLDB4MGMsMHgwMCwweGIzLDB4YzEsMHgyYywweGUwLDB4MGIsMHgzOCwweDU2LDB4MmMsMHgxMCwweDEzLDB4MDAgfX0sCisgezE2LCAweGJkYjAsIDAsIHsweDJlLDB4YzAsMHgwYSwweDM4LDB4NmEsMHgyMCwweDAwLDB4ODgsMHgwMCwweDIwLDB4MDAsMHgwOSwweDgwLDB4MjIsMHg0YywweDQyIH19LAorIHsxNiwgMHhiZGMwLCAwLCB7MHhhMywweDAwLDB4MmMsMHhlMCwweDBiLDB4MjQsMHg4MCwweGNhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmRkMCwgMCwgezB4YTAsMHgwMSwweDFjLDB4MDgsMHhiNywweDI0LDB4MmYsMHhlMCwweDA5LDB4MzksMHgwMiwweDFjLDB4MDEsMHhiNiwweDAwLDB4MmQgfX0sCisgezE2LCAweGJkZTAsIDAsIHsweDkwLDB4MGIsMHg2MCwweDkyLDB4OGUsMHgwMCwweDg2LDB4ODIsMHgyZCwweGMyLDB4MGIsMHhmMCwweDAyLDB4NWMsMHgwNiwweDg3IH19LAorIHsxNiwgMHhiZGYwLCAwLCB7MHgwMCwweDYwLDB4YzAsMHgyOSwweDcwLDB4MDIsMHg1YywweDAwLDB4ODYsMHgwMCwweDJkLDB4YzAsMHgwYiwweDYwLDB4MDIsMHhlOCB9fSwKKyB7MTYsIDB4YmUwMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZiwweDQwLDB4ZjMsMHhlNCwweDNkLDB4ZTggfX0sCisgezE2LCAweGJlMTAsIDAsIHsweDBkLDB4NzksMHgwYiwweDFlLDB4YzAsMHg2NywweDgwLDB4MmQsMHhlMCwweDBmLDB4NzAsMHg0MywweDFkLDB4ODAsMHhkNSwweDAwIH19LAorIHsxNiwgMHhiZTIwLCAwLCB7MHgzZCwweDYwLDB4MGUsMHg3OCwweDAzLDB4MWUsMHgwMCwweGNkLDB4ODAsMHgzMSwweGUwLDB4MGQsMHhjOCwweDAzLDB4NGUsMHgwMCB9fSwKKyB7MTYsIDB4YmUzMCwgMCwgezB4ZTUsMHg4MCwweDNkLDB4ZTAsMHgwZiwweDQ4LDB4MDMsMHhlYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJlNDAsIDAsIHsweDA4LDB4MWQsMHhhYywweDgwLDB4ZmIsMHgwMCwweDcwLDB4YzAsMHg2ZSwweGI2LDB4MTMsMHhhZCwweDQwLDB4ZmEsMHgwMCwweDNlIH19LAorIHsxNiwgMHhiZTUwLCAwLCB7MHhjMCwweDBmLDB4MjAsMHg0MywweDJkLDB4MTgsMHg1OSwweDAwLDB4M2UsMHgwMCwweDAzLDB4YjAsMHgwYiwweGUwLDB4MDAsMHhmYSB9fSwKKyB7MTYsIDB4YmU2MCwgMCwgezB4MDAsMHhiZSwweDAwLDB4MGUsMHhiMCwweDEzLDB4YWMsMHgwMCwweGY4LDB4MDAsMHgzZSwweGMwLDB4MGYsMHg4MCwweDAzLDB4YzIgfX0sCisgezE2LCAweGJlNzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHg0MCwweGZmLDB4ODAsMHgzZiwweGU2IH19LAorIHsxNiwgMHhiZTgwLCAwLCB7MHgwZiwweGY4LDB4MjMsMHgyZSwweDA0LDB4ZmYsMHg5MCwweDNmLDB4ZTQsMHgwZCwweGJhLDB4MDMsMHhmZiwweDQwLDB4Y2YsMHg4MCB9fSwKKyB7MTYsIDB4YmU5MCwgMCwgezB4MjIsMHhlMSwweDBjLDB4MzksMHg0MywweDMyLDB4MTAsMHhlYywweDkwLDB4MzMsMHgyMCwweDhlLDB4YzgsMHgwMywweGYyLDB4MDAgfX0sCisgezE2LCAweGJlYTAsIDAsIHsweGRmLDB4ODAsMHgzZiwweDYwLDB4MGYsMHhmOCwweDAzLDB4YzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiZWIwLCAwLCB7MHhhOCwweDExLDB4OWMsMHg0MCwweGI3LDB4OTAsMHgzYywweGUwLDB4MGIsMHgzYSwweDAzLDB4NGUsMHg4MCwweGYzLDB4YjEsMHgyZCB9fSwKKyB7MTYsIDB4YmVjMCwgMCwgezB4MDQsMHg0YywweDM4LDB4MjMsMHhhZSwweDAwLDB4ODAsMHg4MCwweDM0LDB4ZTgsMHg0ZCwweDc4LDB4MDIsMHgzZSwweDgwLDB4ODcgfX0sCisgezE2LCAweGJlZDAsIDAsIHsweGEwLDB4MjksMHhjMCwweDA4LDB4NzAsMHgwMiwweGMwLDB4ODAsMHg4NiwweDAyLDB4MmQsMHg0MSwweDBiLDB4NzAsMHgwMiwweGVhIH19LAorIHsxNiwgMHhiZWUwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4NDgsMHgzNywweDAxLDB4MmQsMHhjOSB9fSwKKyB7MTYsIDB4YmVmMCwgMCwgezB4MGIsMHg3MiwweDIyLDB4MWMsMHg4NCwweGI1LDB4MTYsMHgwZCwweGM0LDB4MTksMHg0MCwweDQyLDB4ZGMsMHg4MCwweDg3LDB4MDAgfX0sCisgezE2LCAweGJmMDAsIDAsIHsweDIwLDB4YzgsMHg4OCwweDczLDB4MGEsMHg5YywweDgwLDB4YjUsMHgwMCwweDI5LDB4YzAsMHgwYSwweDQ4LDB4MDIsMHhjMCwweDAyIH19LAorIHsxNiwgMHhiZjEwLCAwLCB7MHg5NSwweDAwLDB4MmQsMHg0MiwweDBiLDB4NTgsMHgwMiwweGMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmYyMCwgMCwgezB4MjAsMHgxNCwweGNjLDB4MDAsMHhiMywweDAwLDB4MmEsMHhlMCwweDBiLDB4MzAsMHgwMiwweDRjLDB4MjAsMHhhMSwweDAxLDB4MjQgfX0sCisgezE2LCAweGJmMzAsIDAsIHsweGMxLDB4MDgsMHgwMCwweDAyLDB4OGMsMHgwMCwweDgxLDB4MDAsMHgyNCwweDgwLDB4MDksMHgzOCwweDBhLDB4NjAsMHg4MCwweDkyIH19LAorIHsxNiwgMHhiZjQwLCAwLCB7MHg0MCwweDJhLDB4MDAsMHgwYSwweDMwLDB4MDIsMHhjMCwweDAwLDB4ODAsMHhjOCwweDJjLDB4NzIsMHgwYiwweDE0LDB4MDIsMHhjOCB9fSwKKyB7MTYsIDB4YmY1MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAwLDB4ZmYsMHgwMCwweDJmLDB4ZjQgfX0sCisgezE2LCAweGJmNjAsIDAsIHsweDhmLDB4ZjAsMHgwMywweDNjLDB4MDAsMHhiOSwweDAwLDB4M2UsMHg0MCwweDA5LDB4OTAsMHgwMywweGZjLDB4MDIsMHhjMywweDAxIH19LAorIHsxNiwgMHhiZjcwLCAwLCB7MHgzMiwweGMwLDB4NDgsMHhiOCwweDEzLDB4YTEsMHgwMCwweGJhLDB4MDAsMHgyYSwweDAwLDB4MGEsMHhhMCwweDA3LDB4ZWMsMHgwMCB9fSwKKyB7MTYsIDB4YmY4MCwgMCwgezB4ZGIsMHhjOCwweDNlLDB4OTAsMHgwZiwweGEyLDB4MDIsMHhlYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJmOTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwMiwweDNlLDB4YzQsMHgwZiwweGIwLDB4NjMsMHhlYywweDAxLDB4ZjgsMHg0MCwweDNlIH19LAorIHsxNiwgMHhiZmEwLCAwLCB7MHg0MCwweDBiLDB4ODAsMHgwMywweGNjLDB4MDAsMHhmYSwweDQyLDB4M2UsMHhjMCwweDBmLDB4YjUsMHgwMCwweGFjLDB4NTgsMHhlOSB9fSwKKyB7MTYsIDB4YmZiMCwgMCwgezB4ODIsMHgzZSwweGMwLDB4MWQsMHg5MCwweDAzLDB4ZWMsMHgwNCwweGZhLDB4MDAsMHgzZSwweDgwLDB4MGYsMHhhMCwweDAzLDB4ZTAgfX0sCisgezE2LCAweGJmYzAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwYywweGRmLDB4MDAsMHg3ZiwweGMwIH19LAorIHsxNiwgMHhiZmQwLCAwLCB7MHgyYywweGYwLDB4MDMsMHg3YywweDAxLDB4YzcsMHgwMCwweDMzLDB4NDAsMHg4ZiwweGQwLDB4MDMsMHhmYywweDAwLDB4ZDgsMHgwMCB9fSwKKyB7MTYsIDB4YmZlMCwgMCwgezB4MTUsMHg0NCwweDBjLDB4ZTAsMHgxYiwweDNjLDB4MDAsMHhjYiwweDBlLDB4MzMsMHhjMCwweDVjLDB4NjIsMHgwMiwweDFjLDB4MDIgfX0sCisgezE2LCAweGJmZjAsIDAsIHsweGM1LDB4MDAsMHgyYiwweDgwLDB4MGYsMHhjMCwweDg3LDB4ODAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMDAwLCAwLCB7MHg4MSwweDQ0LDB4NmMsMHgxMCwweGJiLDB4MDAsMHgyZSwweGMwLDB4MDgsMHhiMCwweDUyLDB4MGMsMHgwMSwweGZhLDB4YzQsMHgyMiB9fSwKKyB7MTYsIDB4YzAxMCwgMCwgezB4NjEsMHgwYiwweDg4LDB4MDMsMHg2YywweDAwLDB4ODgsMHg0NywweDJhLDB4MDAsMHgwZSwweDFjLDB4MDIsMHgyMCwweDAyLDB4ODggfX0sCisgezE2LCAweGMwMjAsIDAsIHsweDAwLDB4YWEsMHgwMCwweDI4LDB4OTAsMHgwYSwweDJjLDB4MDQsMHhhOCwweDAwLDB4MjIsMHg5MCwweDBiLDB4ODAsMHgwMiwweGUwIH19LAorIHsxNiwgMHhjMDMwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMSwweDJjLDB4MDAsMHhiYiwweDAwLDB4MmUsMHhjMSB9fSwKKyB7MTYsIDB4YzA0MCwgMCwgezB4MDgsMHgzMCwweDEyLDB4NmMsMHgwMCwweDg4LDB4ODgsMHgyYSwweDMwLDB4MGIsMHhiOCwweDAyLDB4ZWMsMHgwMCwweDliLDB4MDggfX0sCisgezE2LCAweGMwNTAsIDAsIHsweDJhLDB4NDAsMHgwOCwweGI4LDB4MDIsMHgyMCwweDAwLDB4ODIsMHgxMCwweDIyLDB4MDAsMHgwOCwweGEwLDB4MjIsMHhhMCwweDAwIH19LAorIHsxNiwgMHhjMDYwLCAwLCB7MHg4YiwweDAwLDB4MmEsMHgwMiwweDBiLDB4YjAsMHgwMiwweGUwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzA3MCwgMCwgezB4MDgsMHgwMCwweDBjLDB4MDAsMHhiMywweDIwLDB4MmMsMHhjMiwweDA4LDB4MzYsMHgwMiwweDJjLDB4YzAsMHhhMCwweDA4LDB4MjAgfX0sCisgezE2LCAweGMwODAsIDAsIHsweDAwLDB4MGIsMHgzMywweDQ2LDB4Y2QsMHgyOCwweDgwLDB4MjAsMHgyOCwweGMwLDB4MGIsMHgzMiwweDAyLDB4MGMsMHgyMCwweDgxIH19LAorIHsxNiwgMHhjMDkwLCAwLCB7MHgzMCwweDI4LDB4YzAsMHgwOCwweDEwLDB4MDIsMHg4MSwweDAwLDB4YWEsMHgwMCwweDI4LDB4MDAsMHgwMywweDMwLDB4MDIsMHhjMiB9fSwKKyB7MTYsIDB4YzBhMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHg3YywweDAwLDB4ZmIsMHgyOCwweDJlLDB4Y2MgfX0sCisgezE2LCAweGMwYjAsIDAsIHsweDBjLDB4NzAsMHg1MywweDdkLDB4MDksMHg4OCwweDAwLDB4YmEsMHgwMCwweDBmLDB4ODAsMHgwMywweGZkLDB4ODAsMHhkYSwweDYwIH19LAorIHsxNiwgMHhjMGMwLCAwLCB7MHgzYSwweDUwLDB4OGMsMHhhMiwweDgzLDB4MmMsMHg4MCwweDRiLDB4MjAsMHgzMCwweGMwLDB4MjgsMHhhMCwweDAzLDB4YTEsMHgwMCB9fSwKKyB7MTYsIDB4YzBkMCwgMCwgezB4YzksMHgwMCwweDNhLDB4MDAsMHgwZiwweDkwLDB4MDMsMHhjMCwweDAzLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMwZTAsIDAsIHsweGEwLDB4MWQsMHhmYywweDA0LDB4ZmIsMHgwMCwweDdlLDB4YzksMHgwYiwweGI2LDB4MDMsMHhmYywweGMwLDB4ZjgsMHgwYywweDNmIH19LAorIHsxNiwgMHhjMGYwLCAwLCB7MHgwMCwweDRmLDB4YzMsMHg0MywweDJjLDB4MDAsMHhiOCwweDM4LDB4M2YsMHg4ZSwweDVlLDB4ZjAsMHg0MywweGUwLDB4MTAsMHhmOCB9fSwKKyB7MTYsIDB4YzEwMCwgMCwgezB4MzAsMHgzZiwweDAxLDB4MGYsMHhkMCwweDAzLDB4NzAsMHgwMCwweGZjLDB4MDAsMHgzNywweDAwLDB4MGQsMHhkMCwweDA3LDB4ZTkgfX0sCisgezE2LCAweGMxMTAsIDAsIHsweDAzLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHhlMCwweGNjLDB4ODAsMHgzMywweGMwIH19LAorIHsxNiwgMHhjMTIwLCAwLCB7MHgwZCwweGYwLDB4ODMsMHhmYywweDgwLDB4ZGMsMHg5NCwweDMzLDB4YzAsMHgxYywweGYxLDB4MDMsMHg3ZCwweDhjLDB4ZmYsMHgzMCB9fSwKKyB7MTYsIDB4YzEzMCwgMCwgezB4M2YsMHgzMCwweDhmLDB4YzgsMHgwMywweDdlLDB4MTAsMHhjZiwweDkwLDB4MzksMHhhMCwweDhkLDB4ZjgsMHgwMywweGFlLDB4MDAgfX0sCisgezE2LCAweGMxNDAsIDAsIHsweGQ1LDB4ODAsMHgxMywweGUwLDB4MGMsMHg1OCwweDAzLDB4ZjAsMHgwMSwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMTUwLCAwLCB7MHg4MCwweDEwLDB4ZGQsMHgwOCwweDg4LDB4MDAsMHgyMywweGM0LDB4MDgsMHhmYywweDAyLDB4ZWMsMHhhOCwweGNiLDB4MjAsMHgyMSB9fSwKKyB7MTYsIDB4YzE2MCwgMCwgezB4YzIsMHgwZCwweGY3LDB4MTIsMHgxYywweDQwLDB4ZGYsMHgzMCwweDIyLDB4YTAsMHgwYiwweDg4LDB4MDIsMHgyZSwweDA0LDB4ZGIgfX0sCisgezE2LCAweGMxNzAsIDAsIHsweDIxLDB4MjIsMHhjMCwweDA4LDB4YjgsMHgyMiwweDJlLDB4MDAsMHhiOSwweDgwLDB4MmEsMHg2MCwweDBhLDB4ODgsMHgwMiwweGUwIH19LAorIHsxNiwgMHhjMTgwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHg0NSwweGNjLDB4MTAsMHg4MCwweDJjLDB4MjgsMHhjYSB9fSwKKyB7MTYsIDB4YzE5MCwgMCwgezB4NjgsMHgzMCwweDAyLDB4OGQsMHgwMCwweDliLDB4MjAsMHgyOCwweGM0LDB4MDgsMHgzMiwweDAyLDB4Y2MsMHgxMCwweGIzLDB4MDAgfX0sCisgezE2LCAweGMxYTAsIDAsIHsweDI0LDB4MDgsMHgwYiwweDgwLDB4NDIsMHg2YywweDAwLDB4ODMsMHgwMCwweDJhLDB4Y2EsMHgzYSwweGIwLDB4MDIsMHg4YywweDA0IH19LAorIHsxNiwgMHhjMWIwLCAwLCB7MHhiMCwweDA0LDB4MjgsMHhjMCwweDA4LDB4MTAsMHgwMiwweGUzLDB4MDEsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzFjMCwgMCwgezB4YzAsMHgxNSwweDhjLDB4MDIsMHg4MCwweDQwLDB4YWEsMHhjMCwweDA4LDB4YjAsMHgwMiwweGVjLDB4MDAsMHg5YiwweDIwLDB4MmEgfX0sCisgezE2LCAweGMxZDAsIDAsIHsweGMwLDB4ODgsMHhiMCwweDAyLDB4YWMsMHgwMCwweDliLDB4MDAsMHgyNiwweGUwLDB4MDMsMHg4MCwweDgyLDB4MmMsMHgyOCwweDliIH19LAorIHsxNiwgMHhjMWUwLCAwLCB7MHgyMCwweDIyLDB4ZTEsMHgwYiwweGIyLDB4MDIsMHhhYywweDgwLDB4YjgsMHg4MCwweDJhLDB4YzEsMHgwYSwweDk4LDB4MDIsMHhmMCB9fSwKKyB7MTYsIDB4YzFmMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4YzgsMHg1MCwweDNhLDB4YzAgfX0sCisgezE2LCAweGMyMDAsIDAsIHsweDBkLDB4YjAsMHgwMywweGVjLDB4MDAsMHhkYiwweDg4LDB4YmEsMHhjMCwweDA4LDB4YjAsMHgwMywweDZjLDB4MDgsMHhmYiwweDAwIH19LAorIHsxNiwgMHhjMjEwLCAwLCB7MHgzNiwweDYwLDB4MGYsMHg4YywweDYzLDB4NmMsMHgwMCwweGNiLDB4YzAsMHgzYSwweDgwLDB4MGUsMHhiZSwweDAzLDB4YWYsMHg4NCB9fSwKKyB7MTYsIDB4YzIyMCwgMCwgezB4NzksMHg4MCwweDNhLDB4ODgsMHgwNCwweDk4LDB4MDEsMHhkMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMyMzAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4ZmMsMHg4MCwweDM1LDB4YzAsMHg0ZiwweGYwLDB4MDMsMHhkYywweDAwLDB4ZWYsMHgwMCwweDM3IH19LAorIHsxNiwgMHhjMjQwLCAwLCB7MHhjMCwweGFmLDB4ZjAsMHgwMywweDFjLDB4MDEsMHg2ZiwweDAwLDB4MTMsMHgwMCwweDBmLDB4YzEsMHgyMywweGZjLDB4YjgsMHhmZiB9fSwKKyB7MTYsIDB4YzI1MCwgMCwgezB4MDQsMHgzNywweGMwLDB4MGMsMHhmOCwweDQzLDB4N2UsMHgwNCwweGZkLDB4MDAsMHgzZiwweDA0LDB4MGYsMHhkMCwweDAzLDB4ZjggfX0sCisgezE2LCAweGMyNjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGM4LDB4NDAsMHgzYSwweGMwIH19LAorIHsxNiwgMHhjMjcwLCAwLCB7MHgwYywweGIwLDB4MDMsMHhlYywweDAwLDB4ZmIsMHg0MCwweDM4LDB4YzEsMHgwZSwweGIwLDB4NDMsMHgyYywweDA4LDB4YzMsMHgwMCB9fSwKKyB7MTYsIDB4YzI4MCwgMCwgezB4M2UsMHg0MCwweDBlLDB4ODIsMHgwMywweDZkLDB4MDAsMHhkYiwweDQwLDB4MzIsMHhjMSwweDVmLDB4YjQsMHhhMywweGVkLDB4MjAgfX0sCisgezE2LCAweGMyOTAsIDAsIHsweGM5LDB4NDAsMHgzMiwweGUwLDB4OGYsMHg5OCwweDQzLDB4OTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMmEwLCAwLCB7MHhjOCwweDA1LDB4M2MsMHgwMCwweDg4LDB4MDAsMHgyMywweGMwLDB4MjgsMHhmNSwweGMyLDB4ZmMsMHgwMCwweGIzLDB4MDQsMHgyMyB9fSwKKyB7MTYsIDB4YzJiMCwgMCwgezB4YzEsMHg0OCwweGYwLDB4MjIsMHhiYywweDA2LDB4YWYsMHgwMCwweDBlLDB4NDAsMHgwOCwweDAwLDB4MDIsMHhjZCwweDAwLDB4YmIgfX0sCisgezE2LCAweGMyYzAsIDAsIHsweDAxLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweGVlLDB4MDAsMHg4MSwweGUwLDB4MzQsMHhhMCwweDBiLDB4OTAsMHgwMiwweDMyIH19LAorIHsxNiwgMHhjMmQwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MDIsMHg4MCwweDAwLDB4MjgsMHhjMCB9fSwKKyB7MTYsIDB4YzJlMCwgMCwgezB4MDksMHgzYywweDAyLDB4NGMsMHgwMCwweGIzLDB4MDAsMHgyYywweGMwLDB4MGEsMHhiMCwweDAyLDB4MGMsMHgwMCwweDgzLDB4MDEgfX0sCisgezE2LCAweGMyZjAsIDAsIHsweDJjLDB4MDAsMHgwYSwweDA1LDB4MDIsMHhjZCwweDU4LDB4YmIsMHgwMCwweDIwLDB4MDAsMHgwYSwweDNkLDB4MDIsMHhjZiwweDQwIH19LAorIHsxNiwgMHhjMzAwLCAwLCB7MHgyMSwweDIwLDB4NjAsMHhjMCwweDA5LDB4MTAsMHgwMiwweGY4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzMxMCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDAsMHg4NCwweDgwLDB4MjgsMHhlNCwweDg4LDB4NzgsMHg0MiwweGRlLDB4MDAsMHhiNywweDkwLDB4NjUgfX0sCisgezE2LCAweGMzMjAsIDAsIHsweGU0LDB4ODgsMHg3YSwweDQyLDB4OWUsMHg0MCwweGE3LDB4OTAsMHgyZCwweGEwLDB4MGEsMHg0OCwweDIyLDB4ZGUsMHgwNCwweGI3IH19LAorIHsxNiwgMHhjMzMwLCAwLCB7MHg4MCwweDIzLDB4NjAsMHg0OCwweDc4LDB4NDIsMHhmZSwweDgwLDB4YWYsMHg5MCwweDY1LDB4ZTAsMHgwYiwweGU4LDB4MDIsMHhjOCB9fSwKKyB7MTYsIDB4YzM0MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4YzgsMHgwMCwweDM4LDB4YzAgfX0sCisgezE2LCAweGMzNTAsIDAsIHsweDBjLDB4MzAsMHgwMywweGNjLDB4MDAsMHhmYiwweDAwLDB4M2MsMHhjMCwweDBlLDB4YmEsMHgwMywweDBjLDB4MDAsMHhjMywweDAwIH19LAorIHsxNiwgMHhjMzYwLCAwLCB7MHgzZSwweDAwLDB4NGUsMHgyMiwweDAyLDB4Y2MsMHhjMCwweGZiLDB4NDAsMHgzMCwweGMwLDB4MGEsMHgzMCwweDAzLDB4Y2UsMHg4MCB9fSwKKyB7MTYsIDB4YzM3MCwgMCwgezB4ZTEsMHg0MSwweDMwLDB4YzksMHgwZiwweDMwLDB4MDMsMHhkMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMzODAsIDAsIHsweDQwLDB4MWQsMHhiYywweDIwLDB4ZmMsMHgwMCwweDM3LDB4YzIsMHgwZSwweGYxLDB4MjMsMHhlYywweDQwLDB4ZmYsMHgwNCwweDNhIH19LAorIHsxNiwgMHhjMzkwLCAwLCB7MHhjMCwweDBmLDB4YjAsMHgyMywweGZjLDB4MDAsMHhmZiwweDA0LDB4M2UsMHhjMCwweDBkLDB4YTAsMHgwMywweGZjLDB4NTgsMHhmZiB9fSwKKyB7MTYsIDB4YzNhMCwgMCwgezB4MDAsMHhiZiwweGMwLDB4MDYsMHhmMCwweDgzLDB4ZGMsMHg2MiwweGRmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4MTAgfX0sCisgezE2LCAweGMzYjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWQsMHg4MCwweGM5LDB4MDEsMHgzZSwweGMwIH19LAorIHsxNiwgMHhjM2MwLCAwLCB7MHg4YywweGIyLDB4MDcsMHhhZSwweDA0LDB4Y2IsMHg4MCwweDNhLDB4YzgsMHg0YywweGIyLDB4MDMsMHgyYywweDg0LDB4Y2IsMHgzMCB9fSwKKyB7MTYsIDB4YzNkMCwgMCwgezB4YjAsMHhlMCwweDBkLDB4ODgsMHgwYiwweDJjLDB4MDAsMHhlYiwweDAwLDB4MzAsMHgwMCwweDBjLDB4YmMsMHg4MywweDJkLDB4ODAgfX0sCisgezE2LCAweGMzZTAsIDAsIHsweGZiLDB4MDAsMHgzMiwweGMwLDB4MGMsMHg5MCwweDAzLDB4ZWEsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjM2YwLCAwLCB7MHg0OCwweDExLDB4OWMsMHg0MCwweDg3LDB4MDAsMHgyYywweGNjLDB4MDgsMHg3NiwweDgyLDB4M2MsMHg4MiwweDg3LDB4MDAsMHgyMSB9fSwKKyB7MTYsIDB4YzQwMCwgMCwgezB4YzIsMHg4ZCwweDMyLDB4ODIsMHgwZCwweDRjLDB4YTcsMHgyOCwweDIxLDB4ODAsMHgwOCwweDQwLDB4MDIsMHgxZCwweDgwLDB4YmYgfX0sCisgezE2LCAweGM0MTAsIDAsIHsweDIwLDB4MzUsMHg0MCwweDA5LDB4NzIsMHg0MywweDVjLDB4YTAsMHhiNywweDAwLDB4MjksMHhjMCwweDA4LDB4NzAsMHgwMiwweGQyIH19LAorIHsxNiwgMHhjNDIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDhlLDB4MDAsMHg4NCwweDgwLDB4MmQsMHhlMCB9fSwKKyB7MTYsIDB4YzQzMCwgMCwgezB4MDgsMHg3OCwweDAyLDB4ZGUsMHhjMCwweDhmLDB4ODAsMHgyOCwweGVjLDB4MjgsMHg3YiwweDBhLDB4OWUsMHg5NCwweDgzLDB4ODQgfX0sCisgezE2LCAweGM0NDAsIDAsIHsweDIzLDB4ZTAsMHgwOSwweDU4LDB4NTAsMHg5ZSwweDEwLDB4YTcsMHhiMCwweDIzLDB4ZTAsMHgwYiwweDc4LDB4MDIsMHgxZSwweDIwIH19LAorIHsxNiwgMHhjNDUwLCAwLCB7MHhiNywweDgwLDB4MjEsMHhlMCwweDA5LDB4NzgsMHgwMiwweGYwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzQ2MCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MDIsMHg4MiwweDFjLDB4MmMsMHhjMCwweDI4LDB4MzAsMHgwMiwweDRjLDB4MDAsMHg4MywweGMwLDB4MjAgfX0sCisgezE2LCAweGM0NzAsIDAsIHsweGMwLDB4MDgsMHgzMCwweDAyLDB4MGMsMHgwMCwweGEzLDB4MDAsMHg2MCwweGQyLDB4MDgsMHgxZCwweDAyLDB4MGYsMHgyMCwweGJiIH19LAorIHsxNiwgMHhjNDgwLCAwLCB7MHgyNCwweDI0LDB4YzAsMHgwYiwweDNjLDB4MDIsMHg0ZiwweDAwLDB4YjMsMHg4MCwweDI4LDB4ZDgsMHgwOSwweDMyLDB4MDIsMHhkMiB9fSwKKyB7MTYsIDB4YzQ5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTEsMHhhOCwweDAwLDB4Y2UsMHg4NCwweDNlLDB4ODAgfX0sCisgezE2LCAweGM0YTAsIDAsIHsweDBjLDB4YTAsMHgwMywweGU4LDB4MDAsMHhjZSwweGMwLDB4M2EsMHg4MCwweDA4LDB4YTAsMHgwMywweGE4LDB4MDAsMHhjYSwweDAwIH19LAorIHsxNiwgMHhjNGIwLCAwLCB7MHgzMywweDgwLDB4MGQsMHhlYywweDAzLDB4M2IsMHg4MCwweGVlLDB4ODIsMHgzMywweDgwLDB4MGEsMHhjMCwweDg3LDB4MTAsMHg0MCB9fSwKKyB7MTYsIDB4YzRjMCwgMCwgezB4ZjYsMHhjMCwweDMzLDB4OTAsMHhhZCwweDY0LDB4MDMsMHhmYSwweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM0ZDAsIDAsIHsweDQ4LDB4MDAsMHhjMCwweDAyLDB4ZjgsMHgwMCwweDNjLDB4MDAsMHgxZiwweDA0LDB4MDMsMHhhMCwweDA0LDB4ZjgsMHgzMCwweDNlIH19LAorIHsxNiwgMHhjNGUwLCAwLCB7MHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwNCwweDBmLDB4ODAsMHg5MywweGUwLDB4MDAsMHhmOCB9fSwKKyB7MTYsIDB4YzRmMCwgMCwgezB4MTAsMHgzZSwweDAwLDB4MmMsMHg4NCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MTgsMHgzZSwweDEwLDB4MGUsMHg4MCwweDAzLDB4ZDIgfX0sCisgezE2LCAweGM1MDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGQ5LDB4MDAsMHgzZSwweDQwIH19LAorIHsxNiwgMHhjNTEwLCAwLCB7MHgwZSwweDkwLDB4MDMsMHhhNCwweDEwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwNCwweDkwLDB4MDMsMHgyNCwweDAwLDB4NDEsMHgwMCB9fSwKKyB7MTYsIDB4YzUyMCwgMCwgezB4M2UsMHg0MCwweDBmLDB4OTEsMHgxMywweGUxLDB4MDgsMHhmOCwweDAwLDB4MzIsMHg0MCwweDA4LDB4ODksMHg4MywweGEyLDB4MDAgfX0sCisgezE2LCAweGM1MzAsIDAsIHsweGM5LDB4ODAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDBiLDB4MDIsMHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNTQwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMiwweDg5LDB4MDAsMHgyZSwweDQwLDB4MGQsMHg5MCwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4YzU1MCwgMCwgezB4NDAsMHg0OCwweDkwLDB4MDIsMHhhNCwweDAwLDB4ODksMHgwMCwweDIyLDB4NDAsMHg4YiwweDk0LDB4NDIsMHhlMiwweDIwLDB4YjggfX0sCisgezE2LCAweGM1NjAsIDAsIHsweDAwLDB4YTIsMHg0MCwweDA4LDB4OTQsMHgwMiwweGU1LDB4MDQsMHhhOSwweDkwLDB4MzQsMHg2MCwweDA4LDB4OTAsMHgwMiwweDIwIH19LAorIHsxNiwgMHhjNTcwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MTAsMHg5OSwweDAwLDB4MmUsMHg0MCB9fSwKKyB7MTYsIDB4YzU4MCwgMCwgezB4MGEsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDAsMHgyNCwweDQwLDB4MGEsMHgxMCwweDAyLDB4MDQsMHgwMCwweGE5LDB4MDAgfX0sCisgezE2LCAweGM1OTAsIDAsIHsweDJhLDB4NDAsMHgwYiwweDkwLDB4ODIsMHhlMCwweDAxLDB4YjgsMHgwMCwweDIwLDB4NDAsMHgzYSwweDkwLDB4MDIsMHhhNCwweDQ0IH19LAorIHsxNiwgMHhjNWEwLCAwLCB7MHg4OSwweDA0LDB4MjIsMHg2MiwweDA4LDB4OTgsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzViMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4OGEsMHg4MSwweDAwLDB4MmMsMHg0OCwweDA5LDB4MzIsMHgwNiwweDQ0LDB4ODAsMHhiMSwweDAwLDB4MmMgfX0sCisgezE2LCAweGM1YzAsIDAsIHsweDQ4LDB4MGEsMHgxMiwweDAyLDB4ODQsMHg4MCwweGExLDB4MjAsMHgyMCwweDUwLDB4MGIsMHgxNCwweDAyLDB4YzUsMHgwMCwweGIxIH19LAorIHsxNiwgMHhjNWQwLCAwLCB7MHg0MCwweDIwLDB4NTAsMHgwYSwweDI0LDB4MDIsMHhjOSwweDAwLDB4YTMsMHgwMCwweDI0LDB4NDAsMHgwOCwweDExLDB4MDIsMHgwMiB9fSwKKyB7MTYsIDB4YzVlMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZDgsMHg1MCwweDNlLDB4MTQgfX0sCisgezE2LCAweGM1ZjAsIDAsIHsweDBlLDB4ODAsMHgwMywweGUxLDB4NDAsMHhmOCwweDUxLDB4MzYsMHgxNCwweDJlLDB4ODUsMHg0MywweDIxLDB4NDIsMHhlOCwweDUwIH19LAorIHsxNiwgMHhjNjAwLCAwLCB7MHgzYSwweDAwLDB4MGYsMHg4MCwweDEyLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzMiwweDAwLDB4MWUsMHg4MCwweDQzLDB4YTAsMHgwMCB9fSwKKyB7MTYsIDB4YzYxMCwgMCwgezB4YzgsMHgwMSwweDMyLDB4MDAsMHgwYywweDgwLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM2MjAsIDAsIHsweDk4LDB4MWQsMHhlNCwweDQwLDB4ZmQsMHgwMCwweDNlLDB4NDQsMHg0ZSwweDExLDB4MDMsMHhhNCwweDQwLDB4YjUsMHgwMCwweDNlIH19LAorIHsxNiwgMHhjNjMwLCAwLCB7MHg0NCwweDBkLDB4OTEsMHgwMywweGU0LDB4NDAsMHhkOSwweDEwLDB4M2YsMHg0MCwweDBmLDB4NTAsMHgwMywweGU1LDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4YzY0MCwgMCwgezB4NDAsMHgzZiwweDQwLDB4MGQsMHg0NCwweDAzLDB4ZjEsMHgwMCwweGY1LDB4MDIsMHgzZCwweGMwLDB4MmYsMHhkMiwweDAzLDB4ZTYgfX0sCisgezE2LCAweGM2NTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZTcsMHgwMCwweGU5LDB4MDAsMHgzNiwweDYwIH19LAorIHsxNiwgMHhjNjYwLCAwLCB7MHgwZCwweGRhLDB4MDMsMHhlNiwweDQwLDB4ZjksMHg0MCwweDNlLDB4NjgsMHgwYywweDlhLDB4MDMsMHg2NiwweDIwLDB4ODksMHhhMCB9fSwKKyB7MTYsIDB4YzY3MCwgMCwgezB4MzMsMHg0MCwweDBlLDB4OTAsMHgwNywweGE2LDB4MDAsMHhmOSwweDgwLDB4M2UsMHg1MCwweDBjLDB4Y2EsMHgwMywweGYzLDB4ODAgfX0sCisgezE2LCAweGM2ODAsIDAsIHsweGM1LDB4MDIsMHgzMywweDQwLDB4MGMsMHhjMCwweDAzLDB4YzYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNjkwLCAwLCB7MHgzOCwweDEwLDB4ZTMsMHgwNCwweDg4LDB4YTIsMHgyMCwweDM4LDB4MDgsMHg4MCwweDAyLDB4ZTMsMHg0MCwweGIwLDB4ODAsMHgyZSB9fSwKKyB7MTYsIDB4YzZhMCwgMCwgezB4MjgsMHgwOCwweDhhLDB4ODIsMHgyMywweDgwLDB4ODgsMHg4MCwweDIyLDB4MDAsMHhkYiwweDg4LDB4MDIsMHg2MiwweDA0LDB4YjggfX0sCisgezE2LCAweGM2YjAsIDAsIHsweGIwLDB4MmUsMHhhOCwweDg4LDB4OGUsMHhhMiwweGVhLDB4ODAsMHg4OCwweDAwLDB4MmEsMHgwMCwweDI4LDB4ODgsMHgwMywweDhlIH19LAorIHsxNiwgMHhjNmMwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM1LDB4ODIsMHhhOSwweDA4LDB4MmMsMHg1MiB9fSwKKyB7MTYsIDB4YzZkMCwgMCwgezB4MGIsMHgxNCwweDAyLDB4YzQsMHg4MCwweGIxLDB4MjEsMHgwYywweDUyLDB4ODgsMHgxNCwweDAyLDB4NDQsMHgyMCwweDkxLDB4NjkgfX0sCisgezE2LCAweGM2ZTAsIDAsIHsweDIwLDB4NDAsMHgwYSwweDEwLDB4ODIsMHhjNiwweGUwLDB4YjEsMHgwYywweDJjLDB4NDgsMHgwOCwweDAxLDB4MDIsMHhlMSwweDkzIH19LAorIHsxNiwgMHhjNmYwLCAwLCB7MHhhMSwweDAxLDB4MjQsMHg0MSwweDBhLDB4MTAsMHgwMiwweGMyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzcwMCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHg4OSwweDA0LDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMCwweGU0LDB4MDAsMHgzOSwweDAyLDB4MGUgfX0sCisgezE2LCAweGM3MTAsIDAsIHsweDQwLDB4MDgsMHgxMCwweDYyLDB4MjQsMHgwMCwweDkxLDB4MDAsMHg2MiwweDQwLDB4OGIsMHg4MCwweDAyLDB4ZTAsMHg1NCwweGI5IH19LAorIHsxNiwgMHhjNzIwLCAwLCB7MHgwYywweDJlLDB4NDAsMHgwOSwweGI2LDB4NTIsMHhlYywweDAwLDB4YTksMHgwMCwweDJhLDB4NDAsMHgwYSwweDkyLDB4ODAsMHg4NiB9fSwKKyB7MTYsIDB4YzczMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTEsMHhlNCwweDAwLDB4ZTEsMHg2MCwweDM2LDB4NDAgfX0sCisgezE2LCAweGM3NDAsIDAsIHsweDBkLDB4OTAsMHgyMywweGU0LDB4MDAsMHhmOSwweDMwLDB4M2UsMHg0MCwweDJjLDB4OTAsMHg0MywweDY0LDB4MDYsMHhjOSwweDAwIH19LAorIHsxNiwgMHhjNzUwLCAwLCB7MHgzMiwweDQ5LDB4MGUsMHg4ZCwweDkzLDB4ZTAsMHgwMCwweGY5LDB4MDAsMHgyZSwweDQwLDB4MmMsMHg5NCwweDAzLDB4YzcsMHg0MCB9fSwKKyB7MTYsIDB4Yzc2MCwgMCwgezB4ZTksMHgyMCwweDMwLDB4NTUsMHgwZSwweDkwLDB4MDMsMHhlOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM3NzAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwMCwweDFlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHg4MCwweDNjIH19LAorIHsxNiwgMHhjNzgwLCAwLCB7MHg0MCwweDRmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhlOSwweDA0LDB4YmUsMHg0MCwweDBmLDB4ODgsMHgzMywweDYyLDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4Yzc5MCwgMCwgezB4YzIsMHgzZSwweDQ4LDB4MmUsMHg4OCwweDMzLDB4ZTIsMHgwMCwweGQ5LDB4MDAsMHgzZSwweDYwLDB4MGQsMHg4MCwweDAzLDB4Y2EgfX0sCisgezE2LCAweGM3YTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGM4LDB4MDAsMHgzZSwweDAwIH19LAorIHsxNiwgMHhjN2IwLCAwLCB7MHgwZCwweDgwLDB4MDMsMHhhMCwweDA0LDB4ZTgsMHg0MCwweGJhLDB4MDAsMHgwYywweDgwLDB4MDMsMHhlMCwweDA0LDB4YzgsMHgwMCB9fSwKKyB7MTYsIDB4YzdjMCwgMCwgezB4M2EsMHgwMCwweDBlLDB4OGMsMHgwMywweGUwLDB4MDAsMHhmOCwweDAyLDB4MzIsMHgwMCwweDBlLDB4ODAsMHgwMywweDYxLDB4MjAgfX0sCisgezE2LCAweGM3ZDAsIDAsIHsweGY4LDB4MDAsMHgzMiwweDE2LDB4MGYsMHg4MCwweDAzLDB4Y2EsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjN2UwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMCwweDhhLDB4MDAsMHgyZSwweDgwLDB4MDgsMHhlMiwweDAzLDB4MjgsMHgwMCwweDhhLDB4MDAsMHgyMiB9fSwKKyB7MTYsIDB4YzdmMCwgMCwgezB4ODAsMHgwOCwweGEwLDB4MDIsMHhlOCwweDA0LDB4OGEsMHgwMCwweDJlLDB4YTIsMHgwOSwweGU4LDB4MDIsMHhmYSwweDA0LDB4YmUgfX0sCisgezE2LCAweGM4MDAsIDAsIHsweDAwLDB4YTIsMHg4MCwweDA4LDB4Y2QsMHg4MiwweDMzLDB4MjAsMHhiNiwweGMwLDB4MzcsMHhhMCwweDRiLDB4YzgsMHg4MiwweGNhIH19LAorIHsxNiwgMHhjODEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDZjLDB4MDAsMHg4MywweDAwLDB4MjYsMHhjMCB9fSwKKyB7MTYsIDB4YzgyMCwgMCwgezB4MDksMHgzOCwweDAyLDB4NGMsMHgwMCwweGIzLDB4MDAsMHgyNCwweGMwLDB4MDgsMHgzMCwweDAyLDB4ZWMsMHgwMCwweDgzLDB4MDAgfX0sCisgezE2LCAweGM4MzAsIDAsIHsweDI4LDB4ZTAsMHgwYiwweDMwLDB4MDIsMHhjZSwweDgxLDB4YjMsMHgwMCwweDYyLDB4YzAsMHgwOCwweDNjLDB4MDIsMHg0ZiwweDAwIH19LAorIHsxNiwgMHhjODQwLCAwLCB7MHhiMywweGEwLDB4MjAsMHhiMCwweDAzLDB4MzAsMHgwMiwweGNhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Yzg1MCwgMCwgezB4YTAsMHgwMSwweDBjLDB4NDEsMHg4NywweDM0LDB4MmQsMHhjMCwweDA4LDB4NjAsMHgwMiwweDllLDB4NDAsMHhiNywweGEwLDB4MmQgfX0sCisgezE2LCAweGM4NjAsIDAsIHsweGMwLDB4MDgsMHg3MywweDAyLDB4ZGMsMHgwMCwweDg3LDB4MjAsMHgyZCwweGMwLDB4MGIsMHg3MCwweDgyLDB4ZGQsMHg4NSwweGJmIH19LAorIHsxNiwgMHhjODcwLCAwLCB7MHg4MSwweDYzLDB4YzgsMHg4OCwweDdiLDB4MDIsMHgxYywweDAwLDB4YjcsMHg0MCwweDY1LDB4MDAsMHgxYiwweDcyLDB4MDIsMHhlOCB9fSwKKyB7MTYsIDB4Yzg4MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4YzcsMHg4MSwweDNkLDB4ZTAgfX0sCisgezE2LCAweGM4OTAsIDAsIHsweGRkLDB4NzAsMHgwMywweGZlLDB4ODAsMHhmNywweDkwLDB4M2YsMHhlMCwweDJjLDB4NzksMHgwMywweGZlLDB4ODAsMHhjNywweGEwIH19LAorIHsxNiwgMHhjOGEwLCAwLCB7MHgzOSwweGUwLDB4MGYsMHg3YSwweDAyLDB4ZGUsMHg4NCwweGY3LDB4YzIsMHgzMSwweGYyLDB4MGMsMHg3OSwweDAzLDB4NWUsMHgwNCB9fSwKKyB7MTYsIDB4YzhiMCwgMCwgezB4ZjcsMHg4NCwweDMxLDB4NjAsMHgwZiwweDdlLDB4MDMsMHhlYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM4YzAsIDAsIHsweDA4LDB4MWQsMHhhZCwweDBhLDB4ZmIsMHg2MCwweDdlLDB4ZDQsMHgwZiwweDMwLDB4MDMsMHg2YywweDAwLDB4Y2IsMHgwMCwweDMyIH19LAorIHsxNiwgMHhjOGQwLCAwLCB7MHhkZSwweDJmLDB4YjIsMHgwMywweGVkLDB4NDIsMHgxYiwweDYwLDB4M2UsMHhjMSwweDBkLDB4YjEsMHgwMywweGVjLDB4NTAsMHhmNyB9fSwKKyB7MTYsIDB4YzhlMCwgMCwgezB4ODAsMHgzZCwweGQ4LDB4MmUsMHgzMiwweDAzLDB4ZWMsMHgzMCwweGZiLDB4MDAsMHgzZSwweDQwLDB4MGYsMHhiMCwweDAzLDB4YzIgfX0sCisgezE2LCAweGM4ZjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmYsMHgwMCwweGNiLDB4ZDAsMHgzZiwweGYwIH19LAorIHsxNiwgMHhjOTAwLCAwLCB7MHg0YywweGY4LDB4MTMsMHhmZSwweDAwLDB4Y2YsMHg4OCwweDNmLDB4ZTAsMHgwYywweGY4LDB4NDMsMHgzZiwweDAwLDB4Y2YsMHhjOCB9fSwKKyB7MTYsIDB4YzkxMCwgMCwgezB4MzMsMHhlMCwweDBjLDB4ZjgsMHgwMywweGZlLDB4MDAsMHhmZiwweDgwLDB4M2YsMHhlMCwweDJjLDB4ZjgsMHgwMywweGJlLDB4MjAgfX0sCisgezE2LCAweGM5MjAsIDAsIHsweGM3LDB4ODAsMHgzMywweGUwLDB4MGMsMHhmOCwweDAxLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjOTMwLCAwLCB7MHhhOCwweDAxLDB4YmMsMHg0MCwweDg3LDB4OTAsMHgzZCwweGMwLDB4MDgsMHg0MCwweDAyLDB4ZGMsMHg4MCwweGQ3LDB4MDAsMHgyZCB9fSwKKyB7MTYsIDB4Yzk0MCwgMCwgezB4YzAsMHgwYywweDMwLDB4MDMsMHg3YywweDAwLDB4ODcsMHgxMCwweDIxLDB4YzQsMHgxZSwweDcwLDB4MjAsMHhkYywweDQ0LDB4YjcgfX0sCisgezE2LCAweGM5NTAsIDAsIHsweDAwLDB4MzksMHhjMCwweDBjLDB4NzEsMHgwMiwweDFjLDB4NDAsMHhkNywweDAyLDB4MjksMHg0MCwweDA4LDB4NzAsMHgwMiwweDJhIH19LAorIHsxNiwgMHhjOTYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4MDAsMHg4NywweDMyLDB4MmQsMHhjMCB9fSwKKyB7MTYsIDB4Yzk3MCwgMCwgezB4MDgsMHg3MCwweDAyLDB4ZGMsMHgwMSwweDg3LDB4MDAsMHgyYywweGMwLDB4MmIsMHg3MCwweDBhLDB4NWMsMHgwMCwweDgzLDB4MDAgfX0sCisgezE2LCAweGM5ODAsIDAsIHsweDIzLDB4YzAsMHgwOCwweDcwLDB4MDIsMHhkZCwweDAwLDB4YjcsMHgwMCwweDJkLDB4YzQsMHgwYiwweGYwLDB4MDIsMHg5YywweDIwIH19LAorIHsxNiwgMHhjOTkwLCAwLCB7MHg4NywweDE4LDB4MjksMHg0MCwweDA4LDB4NzAsMHg4MiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzlhMCwgMCwgezB4MjAsMHgxNCwweGNjLDB4MDAsMHg4MywweDAyLDB4MjgsMHhjMCwweDA4LDB4MTAsMHgwMiwweGNjLDB4MDgsMHg4MywweDQwLDB4MmUgfX0sCisgezE2LCAweGM5YjAsIDAsIHsweGMwLDB4MmEsMHgzMCwweDAyLDB4MGMsMHgwMCwweDhiLDB4MDAsMHgyMCwweGYyLDB4MGEsMHgzMCwweDAyLDB4Y2UsMHgwMCwweGIzIH19LAorIHsxNiwgMHhjOWMwLCAwLCB7MHg4OCwweDJhLDB4ZDAsMHgwYSwweDMwLDB4MDYsMHgwYywweDAwLDB4OTIsMHgwMCwweDI4LDB4NzgsMHgwOCwweDNjLDB4NDIsMHgwOCB9fSwKKyB7MTYsIDB4YzlkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAyLDB4YzcsMHgwMCwweDJmLDB4YzAgfX0sCisgezE2LCAweGM5ZTAsIDAsIHsweDJjLDB4OTAsMHgwMiwweGZjLDB4MDIsMHg4ZiwweGQ4LDB4M2YsMHhjMCwweDRiLDB4ZjAsMHgwMiwweDdjLDB4MDIsMHhjZiwweDAwIH19LAorIHsxNiwgMHhjOWYwLCAwLCB7MHgyMCwweGYyLDB4MDgsMHhiMCwweDEzLDB4ZWUsMHg4MCwweGZmLDB4MDAsMHgzZiwweGQ0LDB4MmUsMHhiZCwweDgzLDB4YWMsMHgwMCB9fSwKKyB7MTYsIDB4Y2EwMCwgMCwgezB4Y2IsMHg4MCwweDNhLDB4YTAsMHhhYywweGI4LDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNhMTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgxMCwweDNlLDB4YzAsMHgwZiwweDg0LDB4MDMsMHhlYywweDEwLDB4ZmIsMHgwMCwweDNlIH19LAorIHsxNiwgMHhjYTIwLCAwLCB7MHhjMCwweDAxLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmYiwweDAwLDB4YmUsMHhjMCwweDBlLDB4YjAsMHgyMywweGVjLDB4MDgsMHhmYiB9fSwKKyB7MTYsIDB4Y2EzMCwgMCwgezB4MTAsMHgzZiwweGMwLDB4MGQsMHhiNCwweDAzLDB4ZWQsMHgwNCwweGY5LDB4MDAsMHgxZSwweDE0LDB4Y2YsMHhiMCwweDgzLDB4ZTAgfX0sCisgezE2LCAweGNhNDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweGNmLDB4MDAsMHgzMCwweGMwIH19LAorIHsxNiwgMHhjYTUwLCAwLCB7MHgwYywweDQwLDB4MDMsMHhhYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgyYywweGIwLDB4MDMsMHhiYywweDAwLDB4ZmYsMHgwMCB9fSwKKyB7MTYsIDB4Y2E2MCwgMCwgezB4YjMsMHhlMCwweDBkLDB4ZmEsMHgwMywweDdlLDB4ODAsMHhjZiwweDAwLDB4MzMsMHhjMCwweDBjLDB4ZmMsMHg0MywweGZmLDB4MjAgfX0sCisgezE2LCAweGNhNzAsIDAsIHsweGZmLDB4MDAsMHgzZiwweDQwLDB4MDgsMHhmOCwweDAzLDB4YzAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjYTgwLCAwLCB7MHg4MSwweDA0LDB4NmMsMHgxMCwweGFiLDB4MDAsMHgyYSwweGMwLDB4MGEsMHg4ZSwweDQyLDB4MmMsMHgwNCwweGJiLDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4Y2E5MCwgMCwgezB4YzAsMHgwOCwweGIwLDB4MDIsMHg2YywweDAwLDB4YmIsMHgwMCwweDNhLDB4YzAsMHgwZSwweDMwLDB4MDIsMHgwZCwweDA4LDB4ODMgfX0sCisgezE2LCAweGNhYTAsIDAsIHsweDAyLDB4MjIsMHhjMCwweDBhLDB4YmMsMHgwMiwweGVmLDB4MDAsMHhiYiwweGMwLDB4MmMsMHg2OCwweDBhLDB4YjksMHgwMiwweGUwIH19LAorIHsxNiwgMHhjYWIwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDBjLDB4MDAsMHg4YiwweDAwLDB4MjIsMHhjMCB9fSwKKyB7MTYsIDB4Y2FjMCwgMCwgezB4MDgsMHhiOCwweDAyLDB4YWMsMHgwMCwweGJiLDB4MDIsMHgyZSwweGMwLDB4MDgsMHhiMCwweDAyLDB4ZWMsMHgwMCwweGJiLDB4MDAgfX0sCisgezE2LCAweGNhZDAsIDAsIHsweDI2LDB4NDgsMHgxOSwweGIwLDB4MDIsMHg2ZCwweDAwLDB4OGIsMHgwMCwweDIyLDB4YzAsMHgwYSwweGIwLDB4MDIsMHhlYywweDA0IH19LAorIHsxNiwgMHhjYWUwLCAwLCB7MHhiYiwweDFjLDB4MmUsMHgyMCwweDBhLDB4YjAsMHgwMiwweGUwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2FmMCwgMCwgezB4MDgsMHgxNCwweDBjLDB4MDAsMHhhYiwweDIwLDB4MjgsMHhjMCwweDBhLDB4MDAsMHgwMiwweDBjLDB4MDAsMHg5MywweDA0LDB4MmMgfX0sCisgezE2LCAweGNiMDAsIDAsIHsweGMxLDB4MDgsMHgzMCwweDAyLDB4NGMsMHgwMCwweGIzLDB4MDAsMHgyNCwweDQxLDB4MDksMHhiOCwweDAyLDB4MGMsMHgwMiwweDgzIH19LAorIHsxNiwgMHhjYjEwLCAwLCB7MHgwMSwweGEwLDB4YzAsMHgwYSwweDMwLDB4MDIsMHhjYywweDEwLDB4OTMsMHgwMCwweDJjLDB4MDAsMHgwYSwweDMwLDB4MDIsMHhjMiB9fSwKKyB7MTYsIDB4Y2IyMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHg3YywweDAwLDB4Y2YsMHgyOCwweDMzLDB4YzAgfX0sCisgezE2LCAweGNiMzAsIDAsIHsweDBjLDB4YTAsMHg0NiwweGFjLDB4MTEsMHhiZiwweDAwLDB4M2YsMHhjMCwweDVjLDB4ZjAsMHg0MywweGZjLDB4MDAsMHhmZiwweDA0IH19LAorIHsxNiwgMHhjYjQwLCAwLCB7MHgzMiwweDQwLDB4MGQsMHhiMCwweDAzLDB4NmMsMHgwOCwweGNiLDB4MDQsMHgzMSwweGMwLDB4MGMsMHhiMCwweDMzLDB4ZWQsMHg0MCB9fSwKKyB7MTYsIDB4Y2I1MCwgMCwgezB4ZmIsMHgwNCwweDNlLDB4NDAsMHgwZSwweGIwLDB4MDMsMHhjMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNiNjAsIDAsIHsweGEwLDB4MTUsMHhmYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGMwLDB4MjMsMHhmYywweDAxLDB4ZmYsMHgwMCwweDNmIH19LAorIHsxNiwgMHhjYjcwLCAwLCB7MHhjMCwweDRmLDB4ZjAsMHg4NywweDdjLDB4MDAsMHhmZiwweDAwLDB4MzksMHg0MCwweDBlLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmZiB9fSwKKyB7MTYsIDB4Y2I4MCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGYsMHg3MCwweDAzLDB4ZGMsMHg4MCwweGZmLDB4MDAsMHgzZCwweDQwLDB4MGYsMHg3MCwweDAzLDB4ZTggfX0sCisgezE2LCAweGNiOTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHg0MCwweGViLDB4NDgsMHgzZSwweGMyIH19LAorIHsxNiwgMHhjYmEwLCAwLCB7MHgwZSwweDA5LDB4MDMsMHhiYywweDYwLDB4YzAsMHgyMCwweDM1LDB4MjQsMHgwZSwweGQyLDB4MTMsMHgyYywweDYwLDB4ZmIsMHg2YSB9fSwKKyB7MTYsIDB4Y2JiMCwgMCwgezB4MzMsMHhjMCwweDBmLDB4Y2EsMHgwMywweDIyLDB4MjAsMHhjMCwweDgwLDB4MzcsMHhjMCwweDBkLDB4ZjAsMHgwMywweDdjLDB4MDAgfX0sCisgezE2LCAweGNiYzAsIDAsIHsweGVmLDB4MDAsMHgzMywweDI0LDB4MGYsMHhjOCwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjYmQwLCAwLCB7MHg4MCwweDEwLDB4ZGQsMHgwMCwweDhmLDB4NjAsMHgyZiwweGQ4LDB4MDgsMHhhMiwweDAyLDB4ZmQsMHg4MCwweGM4LDB4NzAsMHgyMiB9fSwKKyB7MTYsIDB4Y2JlMCwgMCwgezB4MDAsMHgyYywweGZkLDB4MDcsMHhkYywweDg0LDB4YmYsMHg2MCwweDIzLDB4ZDIsMHgwYiwweGJkLDB4MDIsMHgyMywweDAwLDB4ODggfX0sCisgezE2LCAweGNiZjAsIDAsIHsweDgwLDB4YTIsMHgyMCwweDg4LDB4YjAsMHgyMiwweDM0LDB4MDAsMHhiYiwweDUwLDB4MjIsMHhjOCwweDBiLDB4YjAsMHgwMiwweDIwIH19LAorIHsxNiwgMHhjYzAwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4NDAsMHhhMywweDAzLDB4MmMsMHhjMiB9fSwKKyB7MTYsIDB4Y2MxMCwgMCwgezB4MGEsMHgwMCwweDQyLDB4OGMsMHg4MiwweGEzLDB4MGEsMHgyNCwweDgwLDB4MGIsMHgzMCwweDAyLDB4Y2MsMHg5MCwweGIzLDB4MDAgfX0sCisgezE2LCAweGNjMjAsIDAsIHsweDI4LDB4ZDgsMHgwYiwweDEwLDB4MDIsMHg4YywweDAyLDB4OTAsMHgwMCwweDIwLDB4YzAsMHgwYiwweDEwLDB4NDIsMHg0YywweDAwIH19LAorIHsxNiwgMHhjYzMwLCAwLCB7MHhiMywweDA0LDB4MjQsMHhjMCwweDBiLDB4MzAsMHgwZSwweGEyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2M0MCwgMCwgezB4YzAsMHgxNSwweGFjLDB4MTAsMHg5YiwweDA0LDB4MmMsMHhjMCwweGY4LDB4OTgsMHgwNiwweGVjLDB4MDAsMHhhYiwweDgwLDB4MjYgfX0sCisgezE2LCAweGNjNTAsIDAsIHsweDIwLDB4MDgsMHg5MCwweDJhLDB4YWMsMHgxMCwweGJiLDB4MDAsMHgwYSwweGMwLDB4MWIsMHhiMCwweDIyLDB4YWQsMHgwMCwweDk4IH19LAorIHsxNiwgMHhjYzYwLCAwLCB7MHg0MCwweDJhLDB4NzAsMHg0YiwweGIwLDB4MDIsMHgyYywweDAwLDB4YjMsMHgwMCwweGE2LDB4ODYsMHgxYiwweGIwLDB4ODIsMHhiMCB9fSwKKyB7MTYsIDB4Y2M3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4ZWIsMHgwMCwweDNlLDB4YzAgfX0sCisgezE2LCAweGNjODAsIDAsIHsweDhlLDB4OTgsMHgwMywweGFjLDB4MDgsMHhlOCwweGMwLDB4MzYsMHgzMCwweDRmLDB4YjAsMHg0MiwweGVjLDB4MDAsMHhmOSwweDgwIH19LAorIHsxNiwgMHhjYzkwLCAwLCB7MHgzYSwweGMwLDB4OGYsMHg4OCwweDQyLDB4MjAsMHgxMCwweGM4LDB4MTAsMHgzMCwweGYwLDB4MGYsMHgzMCwweDEzLDB4NmMsMHgxMCB9fSwKKyB7MTYsIDB4Y2NhMCwgMCwgezB4ZWIsMHgwMCwweDM2LDB4ZjAsMHgwZiwweGJkLDB4MDMsMHg5MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNjYjAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4ZWYsMHgwNCwweDdmLDB4YzAsMHgwZiwweGYwLDB4NDMsMHhkYywweDAwLDB4YzQsMHgwMCwweDNiIH19LAorIHsxNiwgMHhjY2MwLCAwLCB7MHg0MCwweDhiLDB4ZGMsMHgwMywweDdjLDB4MTAsMHhmOSwweDkwLDB4MzYsMHhjMiwweDRmLDB4ZjksMHgyMywweDYyLDB4NDEsMHhhYyB9fSwKKyB7MTYsIDB4Y2NkMCwgMCwgezB4MDEsMHgxMywweDQwLDB4MDQsMHhiMCwweDAzLDB4ZTQsMHgwMCwweGZmLDB4MDAsMHgzYiwweGMwLDB4MGYsMHhjMCwweDAzLDB4NzggfX0sCisgezE2LCAweGNjZTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4OGMsMHgxMiwweGNiLDB4MDAsMHhmMiwweGMwIH19LAorIHsxNiwgMHhjY2YwLCAwLCB7MHgwZiwweDgwLDB4MDMsMHhhYywweDA4LDB4ZDksMHgwMCwweDNhLDB4ODAsMHgwZiwweDEyLDB4MDMsMHhhYywweDAwLDB4ZTEsMHgwMCB9fSwKKyB7MTYsIDB4Y2QwMCwgMCwgezB4MzIsMHhjMCwweDBjLDB4OTAsMHgwMywweGVkLDB4MDIsMHhjOCwweDQwLDB4M2UsMHhkMCwweDBmLDB4OTAsMHgxMywweDJjLDB4MDIgfX0sCisgezE2LCAweGNkMTAsIDAsIHsweGRiLDB4MDAsMHgzZSwweDUwLDB4MGMsMHhiNCwweDAzLDB4MTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjZDIwLCAwLCB7MHhjOCwweDA1LDB4M2MsMHgwMCwweDhmLDB4MDAsMHgxNywweGMwLDB4MDgsMHg5MCwweDAyLDB4M2MsMHgwOCwweDhkLDB4MDAsMHgyMiB9fSwKKyB7MTYsIDB4Y2QzMCwgMCwgezB4NTQsMHgwOCwweGI0LDB4MDMsMHgzYywweDAwLDB4ODksMHgwMCwweDIzLDB4YzAsMHg0MCwweDM1LDB4MDIsMHhjYywweDI0LDB4ODAgfX0sCisgezE2LCAweGNkNDAsIDAsIHsweDAwLDB4MjIsMHg3NCwweDRjLDB4YjAsMHgwMiwweDJjLDB4MDAsMHg4ZiwweDAwLDB4MmUsMHhkNCwweDBhLDB4YjAsMHgwYSwweDMyIH19LAorIHsxNiwgMHhjZDUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwMSwweDRjLDB4MDIsMHg4MywweDAwLDB4MjQsMHhjMCB9fSwKKyB7MTYsIDB4Y2Q2MCwgMCwgezB4MDksMHgwMCwweDAyLDB4OGMsMHgwMSwweDkwLDB4MDAsMHg2YSwweDQxLDB4MGEsMHgzMCwweDIwLDB4NGUsMHgxMCwweDMxLDB4MDIgfX0sCisgezE2LCAweGNkNzAsIDAsIHsweDJjLDB4YzAsMHgwOSwweDIwLDB4MDYsMHhjZSwweDAwLDB4ODAsMHgwMCwweDYwLDB4ZTAsMHgwYSwweDMwLDB4ODIsMHgwYywweDA4IH19LAorIHsxNiwgMHhjZDgwLCAwLCB7MHg4MywweDA4LDB4MmMsMHhkMCwweDA5LDB4YjAsMHgwMiwweDc4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2Q5MCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDQsMHg4NywweGIwLDB4MjAsMHhlYywweDA5LDB4ZTksMHgwMiwweDhlLDB4NTgsMHg5ZCwweGIwLDB4MmIgfX0sCisgezE2LCAweGNkYTAsIDAsIHsweGE1LDB4NDAsMHg1YiwweDA2LDB4ZGUsMHg0MCwweDk1LDB4OTQsMHgyZCwweGU0LDB4MTksMHg3YiwweDA2LDB4ZGUsMHgwMCwweDg0IH19LAorIHsxNiwgMHhjZGIwLCAwLCB7MHg4MCwweDYwLDB4ZTAsMHgwYSwweDc4LDB4MGEsMHgxNiwweDEwLDB4ODcsMHg4MCwweDJkLDB4NjgsMHgwYiwweDc5LDB4MDIsMHg0OCB9fSwKKyB7MTYsIDB4Y2RjMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4Y2IsMHhhMCwweDI0LDB4ZTAgfX0sCisgezE2LCAweGNkZDAsIDAsIHsweDBmLDB4MmEsMHgwMywweDhlLDB4MDAsMHhkMiwweGQwLDB4MzgsMHhmYSwweDBmLDB4MTgsMHhjMywweGNlLDB4MjQsMHgzMSwweGIwIH19LAorIHsxNiwgMHhjZGUwLCAwLCB7MHgzYywweGU1LDB4MGMsMHgzYiwweDE3LDB4Y2UsMHgwNCwweGMwLDB4ODIsMHgzOCwweGMyLDB4OWUsMHgxMCwweDAzLDB4MGMsMHgwMCB9fSwKKyB7MTYsIDB4Y2RmMCwgMCwgezB4YzMsMHgwMSwweDNlLDB4YzAsMHgwZCwweDgxLDB4MDMsMHg1MiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNlMDAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZWYsMHgxMCwweDNlLDB4YzIsMHgwZSwweGIxLDB4MjMsMHgyYywweGMxLDB4YWIsMHgwMSwweDM2IH19LAorIHsxNiwgMHhjZTEwLCAwLCB7MHg4MCwweDBmLDB4YjAsMHgyMywweDJkLDB4OTAsMHhlOSwweDg0LDB4NzIsMHhjOCwweDYyLDB4ZjEsMHgxNywweGZjLDB4MDAsMHhmYyB9fSwKKyB7MTYsIDB4Y2UyMCwgMCwgezB4MDAsMHgzYiwweGM0LDB4MWQsMHhmMCwweDAzLDB4ZWMsMHgwMCwweGVmLDB4MDgsMHgzZiwweGM4LDB4MGUsMHhmMSwweDAzLDB4OTAgfX0sCisgezE2LCAweGNlMzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHg4MCwweGZiLDB4YTQsMHgzYSwweGM4IH19LAorIHsxNiwgMHhjZTQwLCAwLCB7MHgwZSwweDkwLDB4MDMsMHgyYywweDA0LDB4Y2EsMHgwMCwweDMwLDB4NjAsMHgyZCwweDFhLDB4MjcsMHg2YywweDg0LDB4Y2IsMHg2MCB9fSwKKyB7MTYsIDB4Y2U1MCwgMCwgezB4MzIsMHhkMiwweDBjLDB4YTAsMHgxMywweDJkLDB4ODQsMHhjYiwweDAyLDB4M2UsMHhjMCwweDBkLDB4YjgsMHgwMywweGFjLDB4ODAgfX0sCisgezE2LCAweGNlNjAsIDAsIHsweGNiLDB4ODEsMHgzMiwweDgwLDB4MGMsMHhiMCwweDAzLDB4YWEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjZTcwLCAwLCB7MHg0OCwweDExLDB4OWMsMHhhNCwweGI3LDB4MjgsMHg3MywweGMyLDB4MDgsMHhmMCwweDAyLDB4M2MsMHhjMCwweDhmLDB4MDAsMHgzMSB9fSwKKyB7MTYsIDB4Y2U4MCwgMCwgezB4YzAsMHgwOSwweDcwLDB4ODIsMHg5YywweDgwLDB4ODcsMHgwYywweDIwLDB4ZDgsMHgwOSwweDcwLDB4MjIsMHgxYywweDMwLDB4ODQgfX0sCisgezE2LCAweGNlOTAsIDAsIHsweDAwLDB4M2QsMHhjMCwweDA4LDB4NzAsMHgwMiwweDE0LDB4MjQsMHg4NywweGEwLDB4MjEsMHhjMCwweDA4LDB4NzAsMHgxMiwweDEyIH19LAorIHsxNiwgMHhjZWEwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4NDAsMHhiMywweDk1LDB4MjksMHhlOSB9fSwKKyB7MTYsIDB4Y2ViMCwgMCwgezB4MGEsMHg2OCwweDAyLDB4OWUsMHhkMCwweDg2LDB4ZjAsMHhhMywweGUwLDB4MDgsMHg3OCwweDEyLDB4OWUsMHg0NCwweGEzLDB4ODIgfX0sCisgezE2LCAweGNlYzAsIDAsIHsweDIxLDB4ZTgsMHgwYiwweDM4LDB4MDIsMHgwZSwweDEwLDB4ODcsMHg4MCwweDJmLDB4ZTAsMHgwYiwweDE4LDB4MDIsMHg4ZSwweDAyIH19LAorIHsxNiwgMHhjZWQwLCAwLCB7MHg4NywweDAwLDB4MjEsMHhlMCwweDA4LDB4NzgsMHgwMiwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2VlMCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MDAsMHhiMywweDAwLDB4MjQsMHhjMCwweDQ4LDB4MzAsMHgwMiwweDBjLDB4MDQsMHg4MywweDgwLDB4MjAgfX0sCisgezE2LCAweGNlZjAsIDAsIHsweGQwLDB4MDksMHgxMCwweDAyLDB4OGMsMHgwNiwweGEzLDB4ODAsMHgyMCwweGMwLDB4MGIsMHgzMCwweDAyLDB4MGMsMHgwMiwweDgwIH19LAorIHsxNiwgMHhjZjAwLCAwLCB7MHg0MCwweDI4LDB4ZDIsMHgwYSwweDMwLDB4MDIsMHgwYywweDAxLDB4ODMsMHgwMCwweDIyLDB4M2MsMHgwOCwweDg3LDB4MDIsMHgxMiB9fSwKKyB7MTYsIDB4Y2YxMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDE4LDB4ZmEsMHgwMCwweDNhLDB4ODAgfX0sCisgezE2LCAweGNmMjAsIDAsIHsweDhlLDB4ZTQsMHg0MiwweDI4LDB4MDIsMHhjZSwweDgwLDB4MzMsMHg4MCwweDRkLDB4YTAsMHg4MywweGU4LDB4MDAsMHhlYSwweGEwIH19LAorIHsxNiwgMHhjZjMwLCAwLCB7MHhiMiwweDgwLDB4MGEsMHhhMCwweDBhLDB4MjgsMHgwMCwweGNlLDB4MTgsMHgyZiwweDgwLDB4MGYsMHhhMCwweDEzLDB4YTgsMHgwMCB9fSwKKyB7MTYsIDB4Y2Y0MCwgMCwgezB4Y2EsMHgwMCwweDMyLDB4OTAsMHgyYywweGFjLDB4MGIsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNmNTAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgwNCwweDNhLDB4MDAsMHgwZiwweDgwLDB4ODMsMHhjMCwweDA4LDB4ZTgsMHgwMywweDNhIH19LAorIHsxNiwgMHhjZjYwLCAwLCB7MHgwMCwweDBlLDB4ODAsMHgyMiwweGMwLDB4MDAsMHhkMCwweDAwLDB4N2UsMHgxMCwweGE0LDB4ODAsMHgwMywweGMwLDB4MDAsMHhmOCB9fSwKKyB7MTYsIDB4Y2Y3MCwgMCwgezB4MDAsMHgzZSwweDEwLDB4MGQsMHg4NCwweDAzLDB4YzAsMHgwMCwweGY4LDB4MDAsMHhiZSwweDAwLDB4MGYsMHg4MCwweDAxLDB4NTIgfX0sCisgezE2LCAweGNmODAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4YzQsMHgwMiwweGM5LDB4MDAsMHgzNiwweDQwIH19LAorIHsxNiwgMHhjZjkwLCAwLCB7MHgwYywweDkwLDB4MDMsMHg2NCwweDAyLDB4ODksMHgwNCwweDMyLDB4NDIsMHgwZCwweDkyLDB4MDMsMHhlNiwweDQyLDB4YzksMHgwMCB9fSwKKyB7MTYsIDB4Y2ZhMCwgMCwgezB4MzIsMHg3MCwweDBlLDB4MTIsMHgwYiwweDI0LDB4MDgsMHhjOSwweDAwLDB4M2UsMHg0NSwweDBlLDB4OTksMHgwMywweGU0LDB4MDIgfX0sCisgezE2LCAweGNmYjAsIDAsIHsweGMxLDB4MDAsMHgzMiwweDUwLDB4MDQsMHg5NCwweDAzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjZmMwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4MDAsMHg2ZSwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwMCwweDg5LDB4MDAsMHgyMiB9fSwKKyB7MTYsIDB4Y2ZkMCwgMCwgezB4NTQsMHgwYiwweDkwLDB4MDMsMHhlNiwweDAwLDB4ODksMHgwMCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MGEsMHgyNCwweDAwLDB4ODkgfX0sCisgezE2LCAweGNmZTAsIDAsIHsweDAwLDB4MzgsMHg0OCwweDA4LDB4OTAsMHg4MiwweGU0LDB4MDQsMHhkOSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweDIwIH19LAorIHsxNiwgMHhjZmYwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDAsMHg4OSwweDAxLDB4MmMsMHg0MCB9fSwKKyB7MTYsIDB4ZDAwMCwgMCwgezB4MjgsMHgxMCwweDQyLDB4NjQsMHgwMCwweGExLDB4MDQsMHgyMiwweDUwLDB4MDEsMHg5MCwweDQyLDB4ZTQsMHgwMCwweDg5LDB4MDQgfX0sCisgezE2LCAweGQwMTAsIDAsIHsweDIwLDB4NDIsMHgwYSwweDkwLDB4NDIsMHgzNCwweDAwLDB4ODksMHgwMCwweDZlLDB4NDAsMHgwYSwweDkwLDB4MDAsMHhlNCwweDAwIH19LAorIHsxNiwgMHhkMDIwLCAwLCB7MHg4OSwweDAwLDB4MjMsMHg0MCwweDBhLDB4ZDAsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDAzMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHg4MSwweDI0LDB4MmMsMHg0OCwweDA4LDB4MTAsMHgwMiwweDA0LDB4ODAsMHhhMSwweDIwLDB4MjggfX0sCisgezE2LCAweGQwNDAsIDAsIHsweDQwLDB4MGIsMHgxMCwweDAyLDB4ODUsMHg4MCwweDgxLDB4MjAsMHgyMCwweDQ4LDB4MDgsMHg1MCwweDYyLDB4MTQsMHgwMiwweDgxIH19LAorIHsxNiwgMHhkMDUwLCAwLCB7MHgwMywweDJlLDB4NDAsMHg4OCwweDE2LDB4ODIsMHhjNCwweGEwLDB4OTEsMHgyOCwweDIxLDB4NDAsMHgyYSwweDUwLDB4MDIsMHgwMiB9fSwKKyB7MTYsIDB4ZDA2MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4YzgsMHg1MCwweDJlLDB4MTQgfX0sCisgezE2LCAweGQwNzAsIDAsIHsweDBjLDB4ODUsMHgwMywweDYxLDB4NDAsMHhlOCwweDUwLDB4YjIsMHgxNSwweDRkLDB4ODAsMHgwMiwweGMwLDB4MDAsMHg0OCwweDUwIH19LAorIHsxNiwgMHhkMDgwLCAwLCB7MHhiMiwweDE1LDB4MWEsMHg4MCwweDEzLDB4MzAsMHgwOCwweGM4LDB4MDAsMHgzZSwweDAwLDB4MGUsMHg4MiwweDAzLDB4ZTAsMHg4MCB9fSwKKyB7MTYsIDB4ZDA5MCwgMCwgezB4YzAsMHgyMCwweDMwLDB4MDAsMHgwZSwweDQwLDB4MGIsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQwYTAsIDAsIHsweDk4LDB4MWQsMHhlNCwweDQwLDB4ZjksMHgxMCwweDNlLDB4NDQsMHgwZiwweGQwLDB4MDMsMHhlNCwweDQ4LDB4ZGQsMHgxMCwweDM3IH19LAorIHsxNiwgMHhkMGIwLCAwLCB7MHg0MCwweDBmLDB4ZDQsMHgwNywweGU0LDB4NDAsMHhmZCwweDEwLDB4M2UsMHg0NSwweDBmLDB4OTQsMHgwMywweGU1LDB4MDgsMHhmZCB9fSwKKyB7MTYsIDB4ZDBjMCwgMCwgezB4MDIsMHgzOSwweGQwLDB4MGYsMHhkMCwweDQzLDB4ZjQsMHhhMCwweGY5LDB4MjgsMHgzZSwweDRiLDB4MGQsMHg5MiwweDgzLDB4ZTYgfX0sCisgezE2LCAweGQwZDAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZTYsMHg4MCwweGM5LDB4YTYsMHgzMiwweDY4IH19LAorIHsxNiwgMHhkMGUwLCAwLCB7MHgwYywweDkwLDB4MDMsMHhhNiwweDgxLDB4ZTksMHhlOSwweDNiLDB4NDAsMHgwZSwweDU4LDB4MDMsMHgzNiwweDIwLDB4YzksMHhhMCB9fSwKKyB7MTYsIDB4ZDBmMCwgMCwgezB4MzcsMHg3OCwweDBkLDB4ZGEsMHgwMywweDM2LDB4MjYsMHhjNSwweDAwLDB4MzcsMHg2OSwweDBlLDB4ZGUsMHgwMywweGE2LDB4ODIgfX0sCisgezE2LCAweGQxMDAsIDAsIHsweGNkLDB4YzAsMHgzMywweDUwLDB4MGYsMHhkMCwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMTEwLCAwLCB7MHgzOCwweDEwLDB4ZTMsMHhhNCwweDg4LDB4YTksMHgyMiwweDNhLDB4MDgsMHgwOCwweDAwLDB4MjIsMHhhMCwweGI4LDB4ZTUsMHgzMCB9fSwKKyB7MTYsIDB4ZDEyMCwgMCwgezB4MjAsMHgyOCwweDgwLDB4MjIsMHg0MywweGEwLDB4MDgsMHhlOCwweDJhLDB4M2QsMHgwOCwweGE0LDB4NjIsMHgyMCwweDAwLDB4ODggfX0sCisgezE2LCAweGQxMzAsIDAsIHsweDAwLDB4MmUsMHgxMCwweDA4LDB4OGUsMHgwMywweDIzLDB4YTAsMHg4OCwweGEwLDB4MjAsMHgyOCwweDBiLDB4OGEsMHg4MiwweDBlIH19LAorIHsxNiwgMHhkMTQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4NDAsMHg5MSwweDQwLDB4MjAsMHg0NCB9fSwKKyB7MTYsIDB4ZDE1MCwgMCwgezB4MDgsMHg5MCwweGEyLDB4ODUsMHgxMCwweGExLDB4MjAsMHgyYywweDQyLDB4MGIsMHgxNCwweDEyLDB4OGMsMHgwMSwweDkxLDB4MTAgfX0sCisgezE2LCAweGQxNjAsIDAsIHsweDJjLDB4NDgsMHgwOSwweDExLDB4MGEsMHhjNCwweDAwLDB4ODEsMHgwMCwweDJjLDB4NTAsMHgwYiwweDExLDB4MTIsMHhjNSwweDAxIH19LAorIHsxNiwgMHhkMTcwLCAwLCB7MHhiMSwweDQwLDB4MjQsMHg0OCwweDBiLDB4MTgsMHgwZSwweDAyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDE4MCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHg5MSwweDAwLDB4MjIsMHg0MSwweDA4LDB4OTQsMHg0MiwweDI0LDB4MDAsMHhiMSwweDQwLDB4MjAgfX0sCisgezE2LCAweGQxOTAsIDAsIHsweDQwLDB4NDksMHhiMiwweDYyLDB4MjQsMHgwMCwweDk5LDB4MDAsMHgwYSwweDQwLDB4MDgsMHg5MCwweDAyLDB4ZTUsMHg4MCwweDg5IH19LAorIHsxNiwgMHhkMWEwLCAwLCB7MHgwMCwweDJlLDB4NDAsMHgwOSwweGIwLDB4MDIsMHgyNCwweDgwLDB4YjksMHgwMCwweDI2LDB4NTAsMHg0YiwweDkwLDB4MDIsMHgwNiB9fSwKKyB7MTYsIDB4ZDFiMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAyLDB4ZDksMHgwMCwweGIyLDB4NDAgfX0sCisgezE2LCAweGQxYzAsIDAsIHsweDJjLDB4OTUsMHgxMywweGE0LDB4MTAsMHhlOSwweDAwLDB4YmUsMHg2MCwweDhmLDB4OTAsMHgwYiwweGE0LDB4MTAsMHg1OSwweDAwIH19LAorIHsxNiwgMHhkMWQwLCAwLCB7MHgxZSwweDQwLDB4OWQsMHg5NCwweDIzLDB4ZTQsMHgwMiwweDg5LDB4MDAsMHgzNCwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTYsMHgwOCB9fSwKKyB7MTYsIDB4ZDFlMCwgMCwgezB4NzksMHgwMCwweGI2LDB4NDAsMHgwNywweDk4LDB4MDMsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQxZjAsIDAsIHsweDI4LDB4MDEsMHg4NCwweDAwLDB4ZTksMHgwMiwweDNjLDB4NDAsMHgyZiwweDk4LDB4MDIsMHhlNCwweDAwLDB4ZjksMHg0MiwweDNhIH19LAorIHsxNiwgMHhkMjAwLCAwLCB7MHg2OCwweDBhLDB4MTAsMHgwMywweGU0LDB4MTAsMHhlOSwweDAwLDB4M2UsMHg0MCwweDBlLDB4OTAsMHgwZiwweDI2LDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4ZDIxMCwgMCwgezB4MDQsMHgzZSwweDQwLDB4MGUsMHgxYywweDAzLDB4ZTYsMHgwMCwweGMxLDB4MDAsMHgzYSwweDUwLDB4MGYsMHg5OSwweDgzLDB4Y2EgfX0sCisgezE2LCAweGQyMjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGU4LDB4MDAsMHgzYSwweDAwIH19LAorIHsxNiwgMHhkMjMwLCAwLCB7MHgwYywweDg0LDB4MDMsMHgyMCwweDAwLDB4ZDgsMHg0MiwweDMyLDB4MDQsMHgwYywweDg4LDB4MTMsMHhlMCwweDAwLDB4YzgsMHgwMCB9fSwKKyB7MTYsIDB4ZDI0MCwgMCwgezB4MzAsMHgwMCwweDBjLDB4MDQsMHgwYiwweDAwLDB4MDAsMHhkOCwweDAwLDB4MzYsMHgwMCwweDBlLDB4ODAsMHgyMywweDAwLDB4MDAgfX0sCisgezE2LCAweGQyNTAsIDAsIHsweGM4LDB4ODAsMHgzMiwweDAwLDB4MGMsMHg4MCwweDAxLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMjYwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgxMCwweDhhLDB4MDAsMHgyZSwweDgwLDB4MjgsMHgyMCwweDIyLDB4MjgsMHgwMCwweDhhLDB4MDAsMHgyMyB9fSwKKyB7MTYsIDB4ZDI3MCwgMCwgezB4YjAsMHg4OCwweGUwLDB4MDIsMHgyOCwweDEwLDB4ZGEsMHgwMCwweGEzLDB4YjQsMHgwOCwweGU4LDB4MTAsMHgyOCwweDAwLDB4OGUgfX0sCisgezE2LCAweGQyODAsIDAsIHsweDIwLDB4MjMsMHhhMCwweDQ4LDB4ZWQsMHgxYSwweDI4LDB4MDAsMHhkZSwweDAwLDB4MjMsMHg5MCwweDBhLDB4ZTAsMHgwMiwweDBhIH19LAorIHsxNiwgMHhkMjkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHhhMywweDAwLDB4MjgsMHhjMCB9fSwKKyB7MTYsIDB4ZDJhMCwgMCwgezB4MDgsMHgzMCwweDBhLDB4MGMsMHgwMCwweDkzLDB4MDAsMHgyMCwweGMyLDB4MmEsMHgzMCwweDIyLDB4YTQsMHgwMCwweGJiLDB4MDAgfX0sCisgezE2LCAweGQyYjAsIDAsIHsweDA4LDB4ZTAsMHgxOCwweDA5LDB4MGEsMHg0YywweDAwLDB4OTMsMHgwMiwweDI0LDB4ZTgsMHgwMiwweDA4LDB4MDYsMHg0YywweDAwIH19LAorIHsxNiwgMHhkMmMwLCAwLCB7MHg5MywweDAwLDB4MjAsMHhkOCwweDBhLDB4OTAsMHgwMiwweDRhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDJkMCwgMCwgezB4YTAsMHgwMSwweDFjLDB4ODAsMHg4NywweDA0LDB4MmQsMHhjMCwweDA4LDB4NzAsMHgwMiwweDBlLDB4MDAsMHg4NywweDEwLDB4MjUgfX0sCisgezE2LCAweGQyZTAsIDAsIHsweDAwLDB4MGEsMHg2MCwweDAyLDB4NWUsMHgwMCwweDk3LDB4MDAsMHgyOSwweDgyLDB4MDgsMHg1MCwweDEyLDB4NTQsMHgwMCwweDhmIH19LAorIHsxNiwgMHhkMmYwLCAwLCB7MHg4MCwweDYxLDB4ZDAsMHgwOCwweDA0LDB4MDIsMHg1YywweDAxLDB4YjcsMHgwOCwweGE5LDB4YTAsMHgwYSwweDUwLDB4ODIsMHg2OCB9fSwKKyB7MTYsIDB4ZDMwMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgzZSwweDgwLDB4ZTcsMHg4MCwweDM4LDB4ZTQgfX0sCisgezE2LCAweGQzMTAsIDAsIHsweDA4LDB4N2UsMHgwMywweDFmLDB4MDAsMHhkZiwweDgwLDB4YjEsMHgyMSwweDFlLDB4NzgsMHgwMywweGRjLDB4MDQsMHhmMywweDgwIH19LAorIHsxNiwgMHhkMzIwLCAwLCB7MHg1YiwweGUxLDB4MDgsMHgyOCwweDAzLDB4NWUsMHgwMCwweGQ3LDB4ODAsMHgzNSwweDYwLDB4MGUsMHg2OCwweDAzLDB4NGUsMHgwMCB9fSwKKyB7MTYsIDB4ZDMzMCwgMCwgezB4ZGYsMHg4MCwweDMxLDB4ZTAsMHgwZSwweGY4LDB4MGIsMHg2YSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQzNDAsIDAsIHsweDA4LDB4MWQsMHhhZCwweDAyLDB4ZmIsMHg3NCwweDNlLDB4ZDAsMHg0ZiwweGIyLDB4ODMsMHhlZCwweDAwLDB4N2IsMHg2OCwweDNhIH19LAorIHsxNiwgMHhkMzUwLCAwLCB7MHgwMCwweDhkLDB4ODAsMHgwMywweGE0LDB4MjAsMHhkYiwweDAxLDB4MzYsMHg4MCwweDZmLDB4YjAsMHg0MSwweDg0LDB4MDAsMHhlYiB9fSwKKyB7MTYsIDB4ZDM2MCwgMCwgezB4MDAsMHgzYywweGMwLDB4MGYsMHhlNiwweDgzLDB4YmMsMHg0MCwweGRiLDB4MDAsMHhiNiwweDgwLDB4MGYsMHhiMCwweDAzLDB4ODIgfX0sCisgezE2LCAweGQzNzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmYsMHgyMCwweGRmLDB4YzAsMHgzYiwweGU2IH19LAorIHsxNiwgMHhkMzgwLCAwLCB7MHgwZSwweGY4LDB4MTMsMHhmZiwweDQ0LDB4YzcsMHg4MiwweDNiLDB4ZTAsMHgwZiwweGY5LDB4MDMsMHhiZSwweDEwLDB4Y2YsMHhjOCB9fSwKKyB7MTYsIDB4ZDM5MCwgMCwgezB4MzMsMHg2MCwweDhkLDB4ZWIsMHgwMywweDNlLDB4MDAsMHhkYiwweDgyLDB4M2YsMHhlMCwweDBjLDB4ZDgsMHgwMywweDNlLDB4NDAgfX0sCisgezE2LCAweGQzYTAsIDAsIHsweGNlLDB4ODAsMHgzMywweGU0LDB4MGYsMHhmOCwweDAzLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkM2IwLCAwLCB7MHhhOCwweDExLDB4YmMsMHg0MCwweDg3LDB4MDAsMHgyMSwweGU0LDB4MGIsMHg3OCwweGEyLDB4Y2UsMHg5MCwweGM3LDB4YjAsMHgyMCB9fSwKKyB7MTYsIDB4ZDNjMCwgMCwgezB4ZTgsMHgwYiwweDI4LDB4OTIsMHhiNiwweDg4LDB4ODcsMHhhMCwweDIwLDB4NjQsMHgwYiwweDM1LDB4MDMsMHgxNCwweDAwLDB4ODcgfX0sCisgezE2LCAweGQzZDAsIDAsIHsweGIyLDB4MzksMHhjMCwweDJjLDB4YzAsMHgwMywweDVlLDB4MDIsMHhjZiwweDAwLDB4MzEsMHhjZSwweDBiLDB4NzYsMHgxMiwweDJhIH19LAorIHsxNiwgMHhkM2UwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4MDAsMHhhMywweDEwLDB4MjksMHhjOCB9fSwKKyB7MTYsIDB4ZDNmMCwgMCwgezB4MGIsMHg3NCwweDAyLDB4ZGMsMHg4MCwweDhmLDB4MDAsMHgyOSwweGNjLDB4MGEsMHgzMCwweDA2LDB4MTQsMHg4MCwweDg3LDB4MTAgfX0sCisgezE2LCAweGQ0MDAsIDAsIHsweDIxLDB4YzAsMHgwYiwweDY2LDB4MDIsMHg1YywweDAwLDB4ODcsMHgwMCwweDJkLDB4YzAsMHgwYiwweDUxLDB4MDIsMHgxYywweDgwIH19LAorIHsxNiwgMHhkNDEwLCAwLCB7MHg5NiwweDAwLDB4MjEsMHhjMCwweDViLDB4NzQsMHg4MiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDQyMCwgMCwgezB4MjAsMHgxNCwweGNjLDB4MDgsMHhhMywweDAwLDB4MjAsMHhjMCwweDBiLDB4YjgsMHgwMiwweGNjLDB4MDAsMHg4YiwweDQwLDB4YTggfX0sCisgezE2LCAweGQ0MzAsIDAsIHsweGMwLDB4OGIsMHgwOCwweDIyLDB4OGMsMHgwMiwweDgzLDB4MDAsMHg2MCwweGMwLDB4MGIsMHgzMCwweDQyLDB4MDQsMHgwMCwweDgzIH19LAorIHsxNiwgMHhkNDQwLCAwLCB7MHg0MCwweDI4LDB4ZmMsMHg4YSwweDAwLDB4MDIsMHg2ZSwweDAwLDB4ODMsMHgwMCwweGEwLDB4ZDAsMHg4YiwweDM4LDB4MDIsMHgwOCB9fSwKKyB7MTYsIDB4ZDQ1MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHhiYywweDAyLDB4ZWYsMHgwMCwweDNiLDB4YzAgfX0sCisgezE2LCAweGQ0NjAsIDAsIHsweDRmLDB4ZjgsMHgwMiwweGZjLDB4MDIsMHhjZiwweDAwLDB4MzgsMHgxMiwweDBlLDB4OTgsMHgwMiwweDJjLDB4MDAsMHhjZiwweDAwIH19LAorIHsxNiwgMHhkNDcwLCAwLCB7MHgzMiwweGMwLDB4MDksMHg5MCwweDAzLDB4NjQsMHgwMiwweDgxLDB4YzAsMHgzZSwweGQwLDB4MGYsMHg5MCwweDA3LDB4M2MsMHgwMyB9fSwKKyB7MTYsIDB4ZDQ4MCwgMCwgezB4ZDksMHgwMCwweDMyLDB4NjAsMHgwZiwweDg4LDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ0OTAsIDAsIHsweDgwLDB4MDAsMHhjYywweDAwLDB4ZGIsMHgwMCwweDNlLDB4YzAsMHg4ZiwweGIwLDB4MDMsMHhlYywweDAwLDB4ZmIsMHgwMiwweDM2IH19LAorIHsxNiwgMHhkNGEwLCAwLCB7MHhjMCwweDRmLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhmYiwweDAwLDB4YmUsMHg5MCwweDBmLDB4OWMsMHgxMywweGVjLDB4MDAsMHhlOSB9fSwKKyB7MTYsIDB4ZDRiMCwgMCwgezB4MTgsMHgzYSwweGQwLDB4MDQsMHhkNSwweDAzLDB4ZWMsMHg0MCwweGU5LDB4MDAsMHgzYSwweDAwLDB4OGYsMHg4MCwweDAzLDB4ZTAgfX0sCisgezE2LCAweGQ0YzAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweGNmLDB4MDAsMHgzZCwweGMxIH19LAorIHsxNiwgMHhkNGQwLCAwLCB7MHg4YywweGYwLDB4MDMsMHgyYywweDAwLDB4ZWYsMHgwYSwweGIzLDB4MTIsMHgyYywweDcwLDB4MjMsMHgxNCwweDBhLDB4NGYsMHgwMCB9fSwKKyB7MTYsIDB4ZDRlMCwgMCwgezB4MzUsMHg2MCwweDBkLDB4YjAsMHgwMywweDA0LDB4MDAsMHhjZCwweDgwLDB4MDcsMHhlOCwweDBjLDB4YzQsMHgwMywweDJjLDB4MDAgfX0sCisgezE2LCAweGQ0ZjAsIDAsIHsweGNkLDB4MDAsMHgzMSwweGUyLDB4MmMsMHhlMCwweDAzLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNTAwLCAwLCB7MHg4MSwweDA0LDB4NmMsMHgwMiwweGFiLDB4MDIsMHgyZSwweGMwLDB4MGUsMHhiMCwweDAyLDB4MmMsMHgwMCwweDhiLDB4MDAsMHgzMiB9fSwKKyB7MTYsIDB4ZDUxMCwgMCwgezB4MzAsMHgwMCwweDljLDB4MDMsMHg2YywweDAwLDB4OGIsMHgwNCwweDIyLDB4MzYsMHgwOCwweDM0LDB4NGEsMHgyYywweDA4LDB4ODkgfX0sCisgezE2LCAweGQ1MjAsIDAsIHsweDkwLDB4MjAsMHhiOCwweDBmLDB4ODQsMHgwMCwweGFjLDB4MDIsMHg4OSwweDAwLDB4MzYsMHhhMCwweDA4LDB4YTQsMHgwMiwweDIwIH19LAorIHsxNiwgMHhkNTMwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHg4YiwweDAwLDB4MmUsMHhjMCB9fSwKKyB7MTYsIDB4ZDU0MCwgMCwgezB4MDgsMHhiMCwweDAyLDB4MGMsMHgwMCwweDhiLDB4MDAsMHgyMiwweGQxLDB4MDgsMHg4OCwweDEyLDB4MjYsMHgwMCwweGEzLDB4MDAgfX0sCisgezE2LCAweGQ1NTAsIDAsIHsweDI2LDB4NDAsMHgwYiwweGIwLDB4MDIsMHgyNiwweDAwLDB4OGIsMHgwMCwweDI2LDB4YzAsMHg1OCwweDEwLDB4MTIsMHgyYywweDA0IH19LAorIHsxNiwgMHhkNTYwLCAwLCB7MHg4MiwweDgwLDB4MmEsMHg0OSwweDA4LDB4MzAsMHgwMiwweDIwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDU3MCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDAsMHhhMywweDE0LDB4MmMsMHhjOCwweDFhLDB4MzQsMHg4YSwweDBjLDB4ODQsMHg4MywweDQwLDB4MjIgfX0sCisgezE2LCAweGQ1ODAsIDAsIHsweGM4LDB4MDgsMHgwMywweDYyLDB4NGMsMHhjMCwweGEzLDB4NjAsMHgyMCwweDQwLDB4MGEsMHgzMCwweDAyLDB4MGMsMHgwMCwweDhiIH19LAorIHsxNiwgMHhkNTkwLCAwLCB7MHg0NSwweDA4LDB4YzAsMHgwYiwweDEwLDB4MDIsMHg4YywweGEwLDB4ODMsMHgwMCwweDI2LDB4NDAsMHgwOCwweDMwLDB4MGEsMHgwMiB9fSwKKyB7MTYsIDB4ZDVhMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg3YywweDAwLDB4Y2YsMHg0MCwweDJmLDB4ZDIgfX0sCisgezE2LCAweGQ1YjAsIDAsIHsweDhjLDB4ZjYsMHgwMywweDNjLDB4MjIsMHhjZiwweDQwLDB4MzIsMHhkNiwweDRjLDB4YTYsMHhjMSwweDNkLDB4YTAsMHg4NywweDQ4IH19LAorIHsxNiwgMHhkNWMwLCAwLCB7MHgzNiwweDBkLDB4MGYsMHhiMSwweDAyLDB4MjQsMHg0MiwweGNiLDB4NjAsMHgxNiwweGMwLDB4MGMsMHhkMCwweDAzLDB4MmMsMHg4MCB9fSwKKyB7MTYsIDB4ZDVkMCwgMCwgezB4Y2EsMHgwMCwweDMyLDB4YzAsMHgwYywweDMwLDB4MDMsMHgwMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ1ZTAsIDAsIHsweGEwLDB4MTksMHhmYywweDAwLDB4ZmYsMHgyMCwweDNlLDB4Y2EsMHgwZSwweGIwLDB4MDMsMHhlYywweDIwLDB4ZGIsMHgzNCwweDNhIH19LAorIHsxNiwgMHhkNWYwLCAwLCB7MHhjOCwweDBmLDB4ODAsMHgwMywweGU0LDB4MTAsMHhkYiwweDIxLDB4M2UsMHgxOCwweDBkLDB4ZjIsMHgwMywweGZjLDB4ODAsMHhmZiB9fSwKKyB7MTYsIDB4ZDYwMCwgMCwgezB4MzAsMHgzNSwweGMwLDB4MGYsMHhjMCwweDEzLDB4ZWMsMHgwMCwweGZmLDB4MDAsMHgzYiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZTggfX0sCisgezE2LCAweGQ2MTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDExLDB4ZmMsMHgwMCwweGZiLDB4MGIsMHgyZiwweGNhIH19LAorIHsxNiwgMHhkNjIwLCAwLCB7MHg4ZCwweGYyLDB4MDMsMHhmYSwweDAwLDB4OTYsMHg4MCwweDNiLDB4YzQsMHgwZCwweGYxLDB4MDMsMHg3YywweDgwLDB4ZWMsMHg4MCB9fSwKKyB7MTYsIDB4ZDYzMCwgMCwgezB4M2IsMHgwOCwweDBjLDB4YzIsMHgwMywweDc0LDB4MDIsMHhjYywweDgwLDB4M2YsMHg0OCwweDBlLDB4ZjAsMHgwMywweDMwLDB4YTAgfX0sCisgezE2LCAweGQ2NDAsIDAsIHsweGQ1LDB4ODAsMHgzZiwweDQwLDB4MGMsMHhmOCwweDAzLDB4ZjAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNjUwLCAwLCB7MHg4MCwweDA4LDB4ZWUsMHg0MCwweGJmLDB4ODAsMHgyZiwweGYwLDB4MGIsMHhmNywweDIyLDB4ZWUsMHgyMCwweDhhLDB4ODAsMHgyMyB9fSwKKyB7MTYsIDB4ZDY2MCwgMCwgezB4ZmMsMHg4OCwweDc1LDB4MTIsMHgzZCwweDAwLDB4ODgsMHgwMCwweDIyLDB4MDAsMHgyOCwweDgwLDB4MDIsMHgyNCwweDA4LDB4ODggfX0sCisgezE2LCAweGQ2NzAsIDAsIHsweDAwLDB4NmYsMHg1MCwweDAwLDB4ZjUsMHgwMiwweDI5LDB4MDAsMHg4OSwweDAwLDB4MmUsMHg1NCwweDBkLDB4OTAsMHgxMSwweGEwIH19LAorIHsxNiwgMHhkNjgwLCAwLCB7MHgwNCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MDAsMHhiMywweDAwLDB4MmMsMHhjMSB9fSwKKyB7MTYsIDB4ZDY5MCwgMCwgezB4MDksMHgzMCwweDgyLDB4Y2MsMHg4MiwweGJiLDB4MDAsMHgyOCwweGMwLDB4NDksMHgzMiwweDAyLDB4Y2QsMHgwMCwweGI4LDB4MDAgfX0sCisgezE2LCAweGQ2YTAsIDAsIHsweDJjLDB4NTAsMHgwOSwweDAxLDB4MDIsMHgwYywweDQwLDB4ODAsMHgwMCwweDZjLDB4NDQsMHgwOSwweDMwLDB4MDIsMHgyMCwweDAwIH19LAorIHsxNiwgMHhkNmIwLCAwLCB7MHhiMCwweDAwLDB4MmMsMHg0MCwweDE4LDB4MzAsMHgwNiwweGUyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDZjMCwgMCwgezB4YzAsMHgwMSwweGFjLDB4MDAsMHhiYiwweDAxLDB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMiwweGVlLDB4MDAsMHhhYSwweDAwLDB4NGEgfX0sCisgezE2LCAweGQ2ZDAsIDAsIHsweGMwLDB4MDgsMHhiMCwweDUyLDB4ZWMsMHgwMCwweDk4LDB4MDIsMHgyNiwweDQwLDB4MDksMHg4MCwweDAyLDB4NmMsMHgwMSwweGFhIH19LAorIHsxNiwgMHhkNmUwLCAwLCB7MHgwNCwweDJlLDB4NDAsMHgwOSwweGIwLDB4MDIsMHgyMiwweDAwLDB4YTksMHg4MCwweDJlLDB4NDEsMHgwOSwweDkwLDB4MDIsMHhmMCB9fSwKKyB7MTYsIDB4ZDZmMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhlYywweDAwLDB4ZmIsMHgwMCwweDNlLDB4YzAgfX0sCisgezE2LCAweGQ3MDAsIDAsIHsweDBkLDB4YjAsMHgwMywweGNlLDB4ODQsMHhmYSwweDAwLDB4MWEsMHhjMCwweDhkLDB4YjAsMHg0MywweGVjLDB4MDAsMHhmMCwweDAyIH19LAorIHsxNiwgMHhkNzEwLCAwLCB7MHgzZiwweDAwLDB4MGQsMHhkMSwweDAzLDB4MzUsMHgwMCwweGNiLDB4NDgsMHgyZSwweDQwLDB4MmYsMHhiMCwweDA5LDB4MjIsMHg4MCB9fSwKKyB7MTYsIDB4ZDcyMCwgMCwgezB4ZjksMHhjOCwweDFlLDB4ZTAsMHgwOCwweGIxLDB4ZTIsMHhkMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ3MzAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4N2IsMHgwMCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MjMsMHhmYywweDAwLDB4ZGUsMHgwMCwweDI0IH19LAorIHsxNiwgMHhkNzQwLCAwLCB7MHhjMCwweDRmLDB4ZjAsMHgwMywweDJjLDB4MDAsMHhlYywweDIwLDB4M2IsMHgwMCwweDBlLDB4OTgsMHgwMywweDk0LDB4MDIsMHhkZCB9fSwKKyB7MTYsIDB4ZDc1MCwgMCwgezB4MDAsMHgzZiwweDQwLDB4NGUsMHhmMCwweDAxLDB4ZjgsMHgwMCwweGRkLDB4MDAsMHgzYywweGU0LDB4MGYsMHhkOCwweDAzLDB4YjggfX0sCisgezE2LCAweGQ3NjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4YWMsMHhjMCwweGZiLDB4MjAsMHgzMiwweGM4IH19LAorIHsxNiwgMHhkNzcwLCAwLCB7MHg4ZCwweGIwLDB4MDMsMHhlYywweDAwLDB4ZjksMHgwMCwweDNhLDB4YzIsMHgyYywweDMwLDB4MDMsMHg2YywweDA0LDB4ZDgsMHgwMiB9fSwKKyB7MTYsIDB4ZDc4MCwgMCwgezB4M2MsMHg0NCwweDhkLDB4MTAsMHgwMywweGFkLDB4MDMsMHhlYSwweDAwLDB4M2MsMHg0MCwweDBjLDB4NzAsMHgyMywweGU0LDB4MDAgfX0sCisgezE2LCAweGQ3OTAsIDAsIHsweGM4LDB4NDAsMHgzYSwweGMwLDB4MGQsMHhiYywweDAzLDB4NTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkN2EwLCAwLCB7MHhjOCwweDAxLDB4M2QsMHgwMCwweGJmLDB4NDIsMHgyMywweGYwLDB4MGQsMHhmMCwweDAyLDB4ZTUsMHgwMCwweGUyLDB4MDEsMHgzNyB9fSwKKyB7MTYsIDB4ZDdiMCwgMCwgezB4ZjEsMHgwOCwweGYwLDB4MGUsMHgzZCwweGMwLDB4YTgsMHgwMCwweDJlLDB4NTQsMHgyOCwweDkwLDB4MDIsMHgyYywweDAwLDB4OGEgfX0sCisgezE2LCAweGQ3YzAsIDAsIHsweDA1LDB4M2IsMHg0MSwweDQ4LDB4ZjUsMHgwMywweDhjLDB4MDAsMHg4OSwweDAwLDB4MjIsMHhkNCwweDBlLDB4OTUsMHgwMiwweGYyIH19LAorIHsxNiwgMHhkN2QwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MDAsMHhiMywweDA0LDB4MjAsMHhjMCB9fSwKKyB7MTYsIDB4ZDdlMCwgMCwgezB4ODksMHgzMCwweDAyLDB4Y2MsMHg0MCwweGIyLDB4MDAsMHgyYywweGM0LDB4NDgsMHgzMCwweDAyLDB4MmMsMHgwMiwweGEyLDB4MDAgfX0sCisgezE2LCAweGQ3ZjAsIDAsIHsweDJjLDB4MjAsMHgxOSwweDIwLDB4MWEsMHg4MCwweDA4LDB4YjAsMHgwMCwweDZjLDB4NDAsMHgwOCwweDMwLDB4MDIsMHhjNCwweDAwIH19LAorIHsxNiwgMHhkODAwLCAwLCB7MHg4MSwweDAwLDB4MmMsMHg0MCwweDA4LDB4MzAsMHgwMiwweGY4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDgxMCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDAsMHhiNywweGEwLDB4ZTEsMHhlMCwweDA5LDB4NzgsMHgwMiwweGRmLDB4MDQsMHhhZSwweDgwLDB4MmQgfX0sCisgezE2LCAweGQ4MjAsIDAsIHsweGUwLDB4MDgsMHg3OSwweDAyLDB4MWUsMHgxMCwweDg3LDB4OTAsMHgyYywweDI4LDB4MjksMHg2OCwweDAyLDB4ODIsMHg4MSwweGI0IH19LAorIHsxNiwgMHhkODMwLCAwLCB7MHg4MCwweDJkLDB4NjAsMHgwOCwweDc4LDB4MTAsMHhiYywweDAwLDB4OGYsMHg4MCwweDJkLDB4NjAsMHgwYiwweDY4LDB4MDIsMHhjOCB9fSwKKyB7MTYsIDB4ZDg0MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHgwYywweDA1LDB4ZjMsMHg5MiwweDMwLDB4Y2EgfX0sCisgezE2LCAweGQ4NTAsIDAsIHsweDBkLDB4MzAsMHgwMywweGNjLDB4MDAsMHhmMywweDAwLDB4M2MsMHhjMCwweDBjLDB4MzAsMHgwMiwweDBjLDB4ODAsMHg3MCwweDAwIH19LAorIHsxNiwgMHhkODYwLCAwLCB7MHgyYywweDQwLDB4MGQsMHgyMCwweDAzLDB4ODksMHgwMCwweGIxLDB4MDAsMHgzZSwweDQwLDB4MmMsMHgzMCwweDAzLDB4ZWMsMHg1MCB9fSwKKyB7MTYsIDB4ZDg3MCwgMCwgezB4YzMsMHgyMCwweDNjLDB4NDAsMHgwYywweDMwLDB4MDMsMHhkMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ4ODAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZmYsMHgwMCwweDNjLDB4YzAsMHgwZSwweGIwLDB4ODMsMHhlYywweDQwLDB4ZWEsMHgwMCwweDM2IH19LAorIHsxNiwgMHhkODkwLCAwLCB7MHhjMiwweDBmLDB4YjAsMHg4MywweGFjLDB4MDAsMHhmOCwweDAwLDB4M2UsMHg0OCwweDBlLDB4ZTAsMHgwYiwweDdhLDB4ODAsMHhjZiB9fSwKKyB7MTYsIDB4ZDhhMCwgMCwgezB4MDAsMHgzYiwweDQ0LDB4MGYsMHhmMCwweDAzLDB4ZWMsMHhjMCwweGZmLDB4MDAsMHgwMywweDQ0LDB4MGUsMHhlMCwweDAzLDB4ZDAgfX0sCisgezE2LCAweGQ4YjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHgwMCwweGZiLDB4MjMsMHgzZSwweGM4IH19LAorIHsxNiwgMHhkOGMwLCAwLCB7MHgxZCwweGIwLDB4MDMsMHhlZSwweDAwLDB4Y2EsMHgwMCwweDNlLDB4YzgsMHgwYywweGIyLDB4MDMsMHgyZCwweDkwLDB4YzgsMHg4NCB9fSwKKyB7MTYsIDB4ZDhkMCwgMCwgezB4MzYsMHgwMCwweDJkLDB4YjAsMHgwMywweDYwLDB4MTgsMHg5YiwweDgwLDB4MzMsMHg1MCwweDBjLDB4ZjIsMHgwMywweGUyLDB4MDAgfX0sCisgezE2LCAweGQ4ZTAsIDAsIHsweGM5LDB4ODAsMHgzMiwweDQwLDB4MGMsMHhiOCwweDAzLDB4MmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkOGYwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwMCwweGI3LDB4MjgsMHgwYywweGQyLDB4MjgsMHg3MywweDAyLDB4ZmMsMHgwMCwweDg2LDB4MDQsMHgyYyB9fSwKKyB7MTYsIDB4ZDkwMCwgMCwgezB4Y2MsMHgyOCwweDcwLDB4ODMsMHgwYywweDIwLDB4OTUsMHgwMSwweDIwLDB4MDAsMHgwOSwweDMwLDB4MTIsMHgxMCwweDA0LDB4ODUgfX0sCisgezE2LCAweGQ5MTAsIDAsIHsweDAwLDB4MjEsMHg1MiwweDA4LDB4NzUsMHgwMiwweGQ4LDB4MDAsMHg4NywweDAwLDB4MjEsMHg0MCwweDA4LDB4NjAsMHgwMiwweDEyIH19LAorIHsxNiwgMHhkOTIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4ZDQsMHhiNywweGIxLDB4MDksMHhlMSB9fSwKKyB7MTYsIDB4ZDkzMCwgMCwgezB4MDgsMHg3OCwweDIyLDB4ZGUsMHgwMCwweDk1LDB4ODAsMHgyZCwweGUwLDB4MDgsMHg3OCwweDBhLDB4NWUsMHg0MiwweDk0LDB4YzAgfX0sCisgezE2LCAweGQ5NDAsIDAsIHsweDIxLDB4NjAsMHgwOCwweDc4LDB4MDIsMHg1YSwweDAwLDB4ODcsMHg4MCwweDJkLDB4NjgsMHgwOCwweDdhLDB4MDIsMHhkNywweDAwIH19LAorIHsxNiwgMHhkOTUwLCAwLCB7MHg5NywweDgwLDB4MjAsMHg2MCwweDA5LDB4NzgsMHgwMiwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDk2MCwgMCwgezB4NDgsMHgxMCwweGNjLDB4MDAsMHhiMywweDAwLDB4MmMsMHhjMCwweDA4LDB4YjAsMHgwMiwweGNkLDB4ODAsMHg5MiwweDAwLDB4MmMgfX0sCisgezE2LCAweGQ5NzAsIDAsIHsweGMwLDB4MDgsMHhiMCwweDAyLDB4Y2MsMHgwMCwweDkwLDB4ODAsMHhhMCwweDQwLDB4MDksMHgzNiwweDAyLDB4NDgsMHgwMiwweDgzIH19LAorIHsxNiwgMHhkOTgwLCAwLCB7MHhhMCwweGFjLDB4NDAsMHgyYSwweDMwLDB4MDYsMHhjZSwweDAyLDB4OTMsMHgwNCwweGEwLDB4NDAsMHgwOSwweDIwLDB4MGEsMHgxMiB9fSwKKyB7MTYsIDB4ZDk5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZmEsMHgwMCwweDNhLDB4ODAgfX0sCisgezE2LCAweGQ5YTAsIDAsIHsweDBkLDB4YTAsMHgwMywweGZiLDB4MDIsMHhkZSwweDgwLDB4M2UsMHg4MCwweDBjLDB4YTAsMHgwMywweDI4LDB4MDAsMHhjZSwweDgwIH19LAorIHsxNiwgMHhkOWIwLCAwLCB7MHgzMiwweDgwLDB4MGMsMHhhNCwweDAzLDB4NzgsMHgwMCwweGNlLDB4YTQsMHgzZiwweDgwLDB4MGMsMHhhMCwweDA3LDB4ZjksMHgwMCB9fSwKKyB7MTYsIDB4ZDljMCwgMCwgezB4ZGUsMHgwMCwweDMyLDB4ODAsMHgyZCwweGUwLDB4MDIsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ5ZDAsIDAsIHsweDQ4LDB4MDAsMHhlMSwweDAwLDB4ZjgsMHgwMCwweDdjLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMCwweDQwLDB4ZTgsMHgxMCwweDNjIH19LAorIHsxNiwgMHhkOWUwLCAwLCB7MHgwMSwweGNmLDB4ODAsMHgwZiwweDIwLDB4MDAsMHhlOCwweDAwLDB4M2UsMHgwMCwweDBlLDB4MDQsMHgwMywweDkwLDB4MDAsMHhlOCB9fSwKKyB7MTYsIDB4ZDlmMCwgMCwgezB4MDAsMHgyMCwweDAwLDB4MGQsMHg4MCwweDA3LDB4ZTAsMHgwMCwweGU4LDB4MDAsMHgzZSwweDA0LDB4MGUsMHg4MCwweDAzLDB4ZDIgfX0sCisgezE2LCAweGRhMDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGY5LDB4MTAsMHg3ZSwweDQxIH19LAorIHsxNiwgMHhkYTEwLCAwLCB7MHgwZSwweDkwLDB4MDMsMHgyNCwweDAwLDB4ZjksMHgwMCwweDM2LDB4NjgsMHgwZSwweDkwLDB4MGYsMHhhNCwweDA4LDB4YzksMHgwMCB9fSwKKyB7MTYsIDB4ZGEyMCwgMCwgezB4M2EsMHg0MCwweDBjLDB4OTAsMHgwYiwweDI0LDB4MTIsMHhlOSwweDAwLDB4M2UsMHg0NCwweDJjLDB4OTAsMHgwMywweDY0LDB4MjQgfX0sCisgezE2LCAweGRhMzAsIDAsIHsweGY5LDB4MDIsMHgyZSwweDQwLDB4MGMsMHg5MCwweDAzLDB4YzIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYTQwLCAwLCB7MHg4MCwweDA0LDB4NjUsMHgxMCwweGI5LDB4ODAsMHgzZSwweDQwLDB4MDgsMHg5MCwweDBhLDB4MjYsMHgwMCwweGIxLDB4MTAsMHgyYSB9fSwKKyB7MTYsIDB4ZGE1MCwgMCwgezB4NzIsMHgwOCwweDkwLDB4MDcsMHg2NCwweDAyLDB4ODksMHg0MCwweDJlLDB4NDAsMHgyOCwweDkwLDB4MTIsMHgyNSwweDAwLDB4ODkgfX0sCisgezE2LCAweGRhNjAsIDAsIHsweDQ1LDB4M2UsMHg1MCwweDBkLDB4OTAsMHgwYSwweDI1LDB4MDAsMHhiOSwweDQwLDB4MmUsMHg0MCwweDI4LDB4OTQsMHgwMywweGUwIH19LAorIHsxNiwgMHhkYTcwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg0MCB9fSwKKyB7MTYsIDB4ZGE4MCwgMCwgezB4NDgsMHg5MCwweDQyLDB4MjYsMHgwMSwweGI5LDB4NDAsMHgyNiwweDQwLDB4MGEsMHg5MCwweDQyLDB4ODQsMHgwMSwweDhiLDB4MDggfX0sCisgezE2LCAweGRhOTAsIDAsIHsweDJjLDB4NDAsMHgwOSwweGQwLDB4ODIsMHgzNCwweDMyLDB4YTksMHgwOCwweDZlLDB4NDIsMHgwOCwweDEwLDB4MDIsMHgyNCwweDIwIH19LAorIHsxNiwgMHhkYWEwLCAwLCB7MHhiOSwweDA4LDB4MmMsMHg0MCwweDE4LDB4OTAsMHg4MiwweGM2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGFiMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHhiMywweDIwLDB4MjgsMHg0OCwweDA4LDB4MTIsMHgwMiwweDA0LDB4MDEsMHhiMSwweDAwLDB4MjggfX0sCisgezE2LCAweGRhYzAsIDAsIHsweDU4LDB4MDgsMHgxMiwweDAyLDB4MDUsMHg4OSwweDgxLDB4NDAsMHgyYywweDU4LDB4MDgsMHg1NiwweDA2LDB4MTUsMHg4MCwweDgxIH19LAorIHsxNiwgMHhkYWQwLCAwLCB7MHg0MCwweDI4LDB4NTAsMHgwOSwweDE0LDB4MDIsMHgwNSwweDgwLDB4YjEsMHg0MCwweDJjLDB4NWEsMHgwOCwweDE0LDB4MDIsMHhjMiB9fSwKKyB7MTYsIDB4ZGFlMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2OCwweDAwLDB4ZjgsMHgwMCwweDJlLDB4MDAgfX0sCisgezE2LCAweGRhZjAsIDAsIHsweDJlLDB4ODUsMHgwMywweDIxLDB4NDgsMHhmOCwweDAwLDB4MzYsMHgwMCwweDhlLDB4MDUsMHgwMiwweGEwLDB4MDgsMHg4MCwweDAwIH19LAorIHsxNiwgMHhkYjAwLCAwLCB7MHgzZSwweDAwLDB4MGQsMHg4MCwweDBiLDB4MTAsMHgwNCwweGUwLDB4MDAsMHgyYywweDAwLDB4NGMsMHg4MCwweDAzLDB4NDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGIxMCwgMCwgezB4ZjAsMHgwMCwweDNlLDB4MDgsMHgwYywweDAwLDB4MDMsMHhlZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRiMjAsIDAsIHsweDk4LDB4MWQsMHhlNCwweDQwLDB4ZjksMHgxMCwweDNlLDB4NDQsMHgwZiwweDkxLDB4MDMsMHhmNCwweDAwLDB4ZmQsMHgwMCwweDNlIH19LAorIHsxNiwgMHhkYjMwLCAwLCB7MHg0NCwweDBmLDB4OTEsMHgwMywweGU0LDB4NDAsMHhmZCwweDAzLDB4M2YsMHg0NCwweDFmLDB4OTEsMHgxYiwweGU0LDB4NDAsMHhmZCB9fSwKKyB7MTYsIDB4ZGI0MCwgMCwgezB4MDEsMHgzZiwweDUwLDB4MGUsMHg5NCwweDAzLDB4ZjQsMHg0MCwweGZkLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhkMCwweDAzLDB4YTYgfX0sCisgezE2LCAweGRiNTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4ZjQsMHgwMCwweGNkLDB4YTAsMHg3MSwweDY4IH19LAorIHsxNiwgMHhkYjYwLCAwLCB7MHg4ZCwweDk4LDB4MDMsMHhkNCwweDAwLDB4Y2QsMHgwMCwweDMzLDB4NjAsMHgwYywweDk4LDB4OGYsMHgyNywweDIwLDB4YzksMHg0MCB9fSwKKyB7MTYsIDB4ZGI3MCwgMCwgezB4M2UsMHg3OCwweDBjLDB4OWUsMHg4YiwweDI3LDB4MjAsMHhkMSwweDExLDB4MzAsMHg2MCwweDhjLDB4OWMsMHgwMywweDI1LDB4MDAgfX0sCisgezE2LCAweGRiODAsIDAsIHsweGY5LDB4NDAsMHgzZSwweDc4LDB4MGYsMHg5MCwweDAzLDB4NDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYjkwLCAwLCB7MHgzOCwweDEwLDB4ZTAsMHgxMCwweDg4LDB4MDEsMHgyMiwweDAxLDB4MDgsMHg4YywweDIyLDB4ZTgsMHgwMCwweDg4LDB4MDIsMHgyYSB9fSwKKyB7MTYsIDB4ZGJhMCwgMCwgezB4MTQsMHgwOCwweDhjLDB4MGIsMHgyMywweDkwLDB4ODgsMHhhMCwweDJlLDB4YjAsMHgwOCwweDhjLDB4NDIsMHgyMywweDAwLDB4ODggfX0sCisgezE2LCAweGRiYjAsIDAsIHsweGEwLDB4MzYsMHgyYSwweDE4LDB4OGEsMHgwMiwweDIyLDB4MDAsMHhiOCwweGEwLDB4MmUsMHgzNCwweDBiLDB4Y2EsMHg4MiwweDBlIH19LAorIHsxNiwgMHhkYmMwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4MDAsMHg4MSwweDQwLDB4MjQsMHg1MCB9fSwKKyB7MTYsIDB4ZGJkMCwgMCwgezB4MDksMHgxNiwweDgyLDB4YzQsMHgwMCwweGE5LDB4MDAsMHgyMCwweDQwLDB4MDgsMHgxMiwweDkyLDB4NTQsMHgwOCwweDg1LDB4MDAgfX0sCisgezE2LCAweGRiZTAsIDAsIHsweDJmLDB4NGMsMHgwOSwweDUyLDB4MTIsMHgxNCwweDgwLDB4OWQsMHgwMCwweDIxLDB4NTAsMHgwOCwweDU0LDB4MjIsMHgxNCwweDgwIH19LAorIHsxNiwgMHhkYmYwLCAwLCB7MHhiNSwweDAwLDB4MmQsMHg0OCwweDBiLDB4ZDAsMHgwMiwweDQyLDB4MDUsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGMwMCwgMCwgezB4MTgsMHgwNSwweGE0LDB4MDIsMHg4OSwweDAxLDB4YTIsMHg0MCwweDQ4LDB4OTAsMHgwMiwweGU0LDB4MDIsMHhhOSwweDAwLDB4MmEgfX0sCisgezE2LCAweGRjMTAsIDAsIHsweDQwLDB4NjgsMHg5MCwweDAyLDB4NjQsMHgxMCwweGFkLDB4MDAsMHgyZiwweDQxLDB4MjgsMHg1MCwweDAyLDB4MzQsMHgwMCwweDhkIH19LAorIHsxNiwgMHhkYzIwLCAwLCB7MHg0NCwweDI3LDB4NDAsMHgzOSwweGQwLDB4MDIsMHgzNSwweDAwLDB4YmQsMHgxNCwweDJmLDB4NDAsMHgwYiwweGQwLDB4MDIsMHg0NiB9fSwKKyB7MTYsIDB4ZGMzMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDUsMHhjNCwweDAwLDB4YzksMHgwMCwweDM2LDB4NDAgfX0sCisgezE2LCAweGRjNDAsIDAsIHsweDJkLDB4OTAsMHgwMywweGU3LDB4MDAsMHhlMSwweGUwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwYiwweDY0LDB4MDIsMHhjOSwweDA4IH19LAorIHsxNiwgMHhkYzUwLCAwLCB7MHgzYywweDUwLDB4MGMsMHg5MCwweDAyLDB4MjYsMHgwMiwweGQ5LDB4YzAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDEzLDB4MjcsMHgwMCB9fSwKKyB7MTYsIDB4ZGM2MCwgMCwgezB4ZjksMHgyMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHg2OCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRjNzAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAyLDB4ZjksMHgwMCwweDM4LDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNiwweDgwLDB4ZDksMHhhMCwweDNjIH19LAorIHsxNiwgMHhkYzgwLCAwLCB7MHg0MCwweDBmLDB4MTAsMHgwMywweGE0LDB4MDAsMHhkOSwweDEwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGM0LDB4OTIsMHhmOSB9fSwKKyB7MTYsIDB4ZGM5MCwgMCwgezB4MjEsMHgzYywweDQwLDB4MmUsMHg5MCwweDBmLDB4ZTYsMHg4MCwweGY5LDB4ODAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4OGEgfX0sCisgezE2LCAweGRjYTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAwLDB4YTAsMHg0MCwweGU4LDB4MTAsMHgzZSwweDA0IH19LAorIHsxNiwgMHhkY2IwLCAwLCB7MHg0ZSwweDgwLDB4MDMsMHgyMCwweDgwLDB4ZDgsMHg2MCwweDNhLDB4MDIsMHgwYywweDgwLDB4MTMsMHgyMCwweDAwLDB4ZjgsMHg0MCB9fSwKKyB7MTYsIDB4ZGNjMCwgMCwgezB4MzYsMHgxMCwweDJkLDB4ODAsMHgwMywweGEwLDB4MDgsMHhlOCwweDQwLDB4MzIsMHgwMCwweDBkLDB4MDAsMHgwMywweDIxLDB4MDIgfX0sCisgezE2LCAweGRjZDAsIDAsIHsweGM4LDB4NDAsMHhiMiwweDAwLDB4MGYsMHhjMCwweDAzLDB4Y2EsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkY2UwLCAwLCB7MHgyOCwweDExLDB4M2IsMHgxMCwweDg2LDB4MDEsMHgyZiwweGEwLDB4MGQsMHhhMCwweDAyLDB4MzgsMHgwMCwweDhlLDB4ZTAsMHgyMyB9fSwKKyB7MTYsIDB4ZGNmMCwgMCwgezB4YTIsMHgwOCwweGEwLDB4MDIsMHgyOCwweDAwLDB4YmEsMHg4MCwweDIyLDB4ODAsMHgwOCwweGEwLDB4MDIsMHgyOCwweDAwLDB4ODIgfX0sCisgezE2LCAweGRkMDAsIDAsIHsweDAwLDB4MmEsMHg4MCwweDI4LDB4YTAsMHgwMiwweDJhLDB4MDQsMHg4YSwweDgwLDB4MjIsMHhhMCwweDBiLDB4NjAsMHgwMiwweGNhIH19LAorIHsxNiwgMHhkZDEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDQzLDB4ODAsMHhhMiwweDAwLDB4MmMsMHhhMCB9fSwKKyB7MTYsIDB4ZGQyMCwgMCwgezB4MDgsMHgzMCwweDAyLDB4MmUsMHgwMCwweDkyLDB4MDAsMHgyOCwweGMwLDB4MjgsMHgzMCwweDAyLDB4MmMsMHgwMCwweGIzLDB4ODAgfX0sCisgezE2LCAweGRkMzAsIDAsIHsweDI0LDB4YzAsMHgwOSwweDMwLDB4MGEsMHg4YywweDAwLDB4YTMsMHgwMCwweDYwLDB4YzAsMHgwOCwweDMwLDB4MGEsMHg0YywweDAwIH19LAorIHsxNiwgMHhkZDQwLCAwLCB7MHg4MywweDAwLDB4MjAsMHhlMCwweDBiLDB4MjAsMHgwMiwweGNhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGQ1MCwgMCwgezB4YTAsMHgwMSwweDEwLDB4MDAsMHg4NiwweDAwLDB4MmQsMHhjMCwweDA5LDB4M2EsMHgwMiwweDM1LDB4MDAsMHg4NiwweDAwLDB4MjEgfX0sCisgezE2LCAweGRkNjAsIDAsIHsweGMwLDB4MDgsMHg3MywweDAyLDB4MTAsMHgwMCwweGJmLDB4ODgsMHgyMSwweDAwLDB4MDgsMHg3MCwweDAyLDB4MWMsMHgwOCwweDhmIH19LAorIHsxNiwgMHhkZDcwLCAwLCB7MHgwMCwweDJiLDB4YzAsMHgwOCwweDIwLDB4MTIsMHg1ZSwweDIwLDB4ODcsMHg4OCwweDIxLDB4ODMsMHgwYiwweDYwLDB4MDIsMHhlOCB9fSwKKyB7MTYsIDB4ZGQ4MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxMiwweDAwLDB4ZTUsMHg4MSwweDNkLDB4YTAgfX0sCisgezE2LCAweGRkOTAsIDAsIHsweDJjLDB4N2EsMHgwYiwweDFlLDB4MDAsMHhkNCwweDgwLDB4MzgsMHhlMCwweDBjLDB4ZmEsMHgwYiwweDFlLDB4MDAsMHhmNiwweDgwIH19LAorIHsxNiwgMHhkZGEwLCAwLCB7MHgzNCwweGUwLDB4MGQsMHgyOCwweDAzLDB4OGEsMHgwMCwweGU2LDB4ODAsMHgzMSwweDIwLDB4MGMsMHg3OCwweDAzLDB4N2EsMHgwNCB9fSwKKyB7MTYsIDB4ZGRiMCwgMCwgezB4Y2UsMHg4NCwweDMxLDB4ZTAsMHg0ZiwweDc4LDB4NDMsMHhlYSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRkYzAsIDAsIHsweDA4LDB4MGQsMHg4MCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4YzAsMHgwZiwweGI1LDB4MjMsMHhlNCwweDAwLDB4ZjAsMHgwNCwweDM2IH19LAorIHsxNiwgMHhkZGQwLCAwLCB7MHg0MCwweDBmLDB4YjYsMHg4NywweGUwLDB4MDAsMHhmMiwweDAwLDB4M2UsMHgwMCwweDFmLDB4YTAsMHgwYiwweGU4LDB4MDAsMHhmYSB9fSwKKyB7MTYsIDB4ZGRlMCwgMCwgezB4MDAsMHgzZSwweDAwLDB4MGUsMHhhMCwweDAzLDB4YTgsMHgwMCwweGZhLDB4MDAsMHgzZSwweDgwLDB4MGYsMHhiMCwweDAzLDB4YzIgfX0sCisgezE2LCAweGRkZjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZjYsMHgwMCwweGNjLDB4ODAsMHgzMywweGEwIH19LAorIHsxNiwgMHhkZTAwLCAwLCB7MHgwYywweGZjLDB4MDMsMHgzZSwweDAwLDB4ZmMsMHg4MCwweDM3LDB4ZTAsMHgwZiwweGI5LDB4MjEsMHgzZSwweDAwLDB4ZmQsMHg4MiB9fSwKKyB7MTYsIDB4ZGUxMCwgMCwgezB4MzMsMHhlMCwweDJjLDB4ZjgsMHgwMywweDdlLDB4MTAsMHhkZiwweDg0LDB4M2QsMHhlMCwweDBjLDB4ZjgsMHgwMywweGY2LDB4MDAgfX0sCisgezE2LCAweGRlMjAsIDAsIHsweGZkLDB4ODAsMHgzZiwweDYwLDB4MGMsMHhlOCwweDIzLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZTMwLCAwLCB7MHhhOCwweDExLDB4OTgsMHg0MCwweDg0LDB4MTAsMHgyMSwweGMwLDB4MDgsMHg3MCwweDAyLDB4MTAsMHg4MCwweGI0LDB4MDAsMHgyMSB9fSwKKyB7MTYsIDB4ZGU0MCwgMCwgezB4YzgsMHgwYiwweDdhLDB4MDIsMHgxMCwweDAwLDB4ZmQsMHgwMCwweDIxLDB4MDQsMHgwOCwweDcwLDB4MDIsMHgxYywweDQyLDB4ODcgfX0sCisgezE2LCAweGRlNTAsIDAsIHsweDAwLDB4MmQsMHhjNCwweDQ4LDB4NjEsMHgwMiwweGQ2LDB4ODAsMHhiNSwweDAwLDB4MmYsMHgwNCwweDA4LDB4NjEsMHg4MiwweDJhIH19LAorIHsxNiwgMHhkZTYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkwLDB4MDAsMHg4MSwweDAwLDB4MjEsMHg4MCB9fSwKKyB7MTYsIDB4ZGU3MCwgMCwgezB4MDgsMHgzMCwweDAyLDB4MWMsMHgxMCwweGJjLDB4MDgsMHgyNSwweDgwLDB4NGIsMHgzMCwweDBlLDB4MWMsMHgwMCwweGI0LDB4MDAgfX0sCisgezE2LCAweGRlODAsIDAsIHsweDIwLDB4YzAsMHgwOCwweDIwLDB4MDIsMHg1OCwweDAwLDB4OTYsMHgwMCwweDJmLDB4MDAsMHgwYSwweDcwLDB4MDIsMHhkMCwweDgwIH19LAorIHsxNiwgMHhkZTkwLCAwLCB7MHhiNCwweDE4LDB4MmQsMHg0MCwweDA5LDB4ZjgsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGVhMCwgMCwgezB4MjAsMHgxNCwweGM4LDB4MDIsMHg4MCwweDAwLDB4YTAsMHhjMCwweDA4LDB4MzAsMHgyMiwweDBiLDB4YzAsMHhiMCwweGMwLDB4MjIgfX0sCisgezE2LCAweGRlYjAsIDAsIHsweDgwLDB4MGIsMHgzMCwweDAyLDB4MDAsMHgwMCwweGEwLDB4MDQsMHgyMiwweDAwLDB4MjgsMHhhMCwweDAyLDB4MmIsMHgwMCwweDhhIH19LAorIHsxNiwgMHhkZWMwLCAwLCB7MHgwMCwweDJjLDB4MDAsMHgwOCwweGEwLDB4MDYsMHhjMCwweDAwLDB4YjAsMHhjMiwweDJjLDB4MDAsMHgwOSwweGJjLDB4MWEsMHgwOCB9fSwKKyB7MTYsIDB4ZGVkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhMCwweDAwLDB4YzgsMHgwMCwweDMyLDB4YzAgfX0sCisgezE2LCAweGRlZTAsIDAsIHsweDBjLDB4ZjAsMHgwYiwweDI2LDB4MDAsMHhmOSwweGMwLDB4MzYsMHgwMCwweDBmLDB4ZjAsMHgxMywweDJjLDB4MTAsMHhiYiwweDQwIH19LAorIHsxNiwgMHhkZWYwLCAwLCB7MHhmMiwweGMwLDB4MDgsMHg5MCwweDAzLDB4NjcsMHgwMCwweGQ5LDB4ODAsMHgzZSwweGMwLDB4MDgsMHg5MCwweDAyLDB4ZWMsMHgwMCB9fSwKKyB7MTYsIDB4ZGYwMCwgMCwgezB4ZmIsMHhkMCwweDNlLDB4YzAsMHgyOSwweDhjLDB4MDAsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRmMTAsIDAsIHsweDgwLDB4MDAsMHhlMCwweDAwLDB4ZjgsMHg0NCwweDNjLDB4ZDAsMHgyZiwweGIwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgyMCwweDNlIH19LAorIHsxNiwgMHhkZjIwLCAwLCB7MHg0MCwweDBmLDB4MzAsMHgwMywweGUwLDB4MDAsMHhmYiwweDA4LDB4M2UsMHgwMCwweDBmLDB4OTAsMHgxMywweGU0LDB4NDIsMHhmOSB9fSwKKyB7MTYsIDB4ZGYzMCwgMCwgezB4MTAsMHgzZSwweGMwLDB4MGYsMHg4MCwweDAzLDB4ZWUsMHgwMCwweGZiLDB4MDAsMHgzZSwweDgwLDB4MGUsMHg4MiwweDAzLDB4ZTAgfX0sCisgezE2LCAweGRmNDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZTAsMHgwOCwweGZjLDB4ODAsMHgzMiwweGU0IH19LAorIHsxNiwgMHhkZjUwLCAwLCB7MHgwZSwweGYwLDB4MDMsMHg3NCwweDAwLDB4ZmMsMHgwMCwweDNmLDB4NDAsMHgwYywweGYwLDB4MGIsMHgzYywweDAwLDB4ZmUsMHgwMCB9fSwKKyB7MTYsIDB4ZGY2MCwgMCwgezB4M2YsMHhjMCwweDBkLDB4YzEsMHgwMywweDIwLDB4MjAsMHhjYywweDEwLDB4MzMsMHgwMCwweDBjLDB4ZDEsMHgwMywweDU4LDB4MDAgfX0sCisgezE2LCAweGRmNzAsIDAsIHsweGNlLDB4MDAsMHgyZiwweGMwLDB4MGYsMHhkMSwweDAzLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZjgwLCAwLCB7MHg4MSwweDQ0LDB4NjIsMHgwMCwweGIwLDB4NDAsMHgyYSwweGYxLDB4MDgsMHhiMCwweDEyLDB4MjYsMHgwOCwweGI4LDB4YzgsMHgyZSB9fSwKKyB7MTYsIDB4ZGY5MCwgMCwgezB4NzAsMHgwYSwweGIwLDB4MDIsMHgyMCwweDAwLDB4YmEsMHgwMCwweDJlLDB4MDAsMHgyOCwweDgwLDB4MDMsMHgyMiwweDQwLDB4ODggfX0sCisgezE2LCAweGRmYTAsIDAsIHsweDAxLDB4MjAsMHgwMCwweDBhLDB4ODAsMHgwMiwweDI4LDB4MDAsMHg4YSwweDAxLDB4MmUsMHg4MCwweDhiLDB4OTAsMHgwMiwweDIwIH19LAorIHsxNiwgMHhkZmIwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDI2LDB4MDAsMHhiOCwweDI4LDB4MjIsMHg0MiB9fSwKKyB7MTYsIDB4ZGZjMCwgMCwgezB4MDgsMHgzMCwweDAyLDB4NjYsMHgwMCwweGI4LDB4ODAsMHgyZSwweDMwLDB4ODgsMHhiMCwweDAyLDB4MmMsMHgwMCwweGI5LDB4MDEgfX0sCisgezE2LCAweGRmZDAsIDAsIHsweDJlLDB4YzAsMHg4OCwweDkwLDB4MDIsMHhhNCwweDAwLDB4ODksMHgwMCwweDIyLDB4YzAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDBjIH19LAorIHsxNiwgMHhkZmUwLCAwLCB7MHg4OSwweDAxLDB4MmUsMHg0MCwweDFiLDB4ODAsMHgwMiwweDYwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGZmMCwgMCwgezB4MDgsMHgwNCwweDAwLDB4MDAsMHhiMCwweDAwLDB4MjgsMHhjMCwweDI4LDB4MzAsMHgwMiwweDAwLDB4MDAsMHhiMCwweDAwLDB4MmMgfX0sCisgezE2LCAweGUwMDAsIDAsIHsweDQwLDB4MGEsMHgzMCwweDAyLDB4MDAsMHgwMCwweGIxLDB4MDAsMHgyYywweDAwLDB4MDgsMHgxMCwweDBhLDB4MDQsMHgwMCwweDgxIH19LAorIHsxNiwgMHhlMDEwLCAwLCB7MHgwMSwweGEyLDB4YzAsMHgwOCwweDAwLDB4MGEsMHgwNCwweDgwLDB4ODEsMHgwMCwweDJjLDB4MDAsMHgxYiwweDAwLDB4MGEsMHgwMiB9fSwKKyB7MTYsIDB4ZTAyMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2MCwweDAwLDB4ZjgsMHgwMCwweDMyLDB4NDAgfX0sCisgezE2LCAweGUwMzAsIDAsIHsweDBlLDB4ZjAsMHgyMywweDY0LDB4MDgsMHhmOCwweDAwLDB4MmUsMHgwMCwweDBjLDB4ZjAsMHgwMywweDJjLDB4MDAsMHhmOCwweDAwIH19LAorIHsxNiwgMHhlMDQwLCAwLCB7MHgzZSwweGMwLDB4MGMsMHg4MCwweDAzLDB4MjAsMHgwMiwweGM4LDB4MDQsMHgzMiwweDAwLDB4MWMsMHg5MCwweDAzLDB4MjAsMHgwMCB9fSwKKyB7MTYsIDB4ZTA1MCwgMCwgezB4YzgsMHgwMSwweDNlLDB4NDEsMHg5ZiwweDkwLDB4NDMsMHg0MCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUwNjAsIDAsIHsweGEwLDB4MWQsMHhmMCwweDAwLDB4ZmMsMHgwYywweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhmMCwweDEwLDB4ZjQsMHgwMCwweDNmIH19LAorIHsxNiwgMHhlMDcwLCAwLCB7MHgwMCwweDBmLDB4ZjQsMHgyMywweGYwLDB4MDAsMHhmYywweDAwLDB4M2YsMHgwMCwweDBlLDB4YzAsMHgwMywweGIwLDB4MDAsMHhmYyB9fSwKKyB7MTYsIDB4ZTA4MCwgMCwgezB4MDAsMHgzZiwweDAwLDB4MGYsMHhjMCwweDAzLDB4ZTEsMHgwMCwweGZjLDB4MDAsMHgzZiwweDAxLDB4MWYsMHg1MCwweDAzLDB4ZTggfX0sCisgezE2LCAweGUwOTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDBkLDB4ZjAsMHhkMCwweGZmLDB4MjAsMHgzZSwweGQwIH19LAorIHsxNiwgMHhlMGEwLCAwLCB7MHg4ZSwweGIwLDB4MDMsMHhlYywweGEwLDB4ZGIsMHgyOCwweDNlLDB4Y2MsMHgwYywweGIzLDB4MDMsMHhhZCwweDA4LDB4ZjgsMHgzYyB9fSwKKyB7MTYsIDB4ZTBiMCwgMCwgezB4MzIsMHgyMywweDBlLDB4NDgsMHgyMywweDdhLDB4MDAsMHhmZCwweDk0LDB4M2YsMHhlMCwweDBmLDB4NzgsMHgzMywweGVlLDB4MDggfX0sCisgezE2LCAweGUwYzAsIDAsIHsweGJmLDB4ODAsMHgzZiwweGU0LDB4MGYsMHhmOSwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMGQwLCAwLCB7MHhhMCwweDAwLDB4ZWMsMHhjOCwweGJmLDB4ZDEsMHgwZiwweGM4LDB4MGMsMHgyNiwweDgyLDB4ZmQsMHgyNCwweDhmLDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4ZTBlMCwgMCwgezB4OTksMHgwYSwweGYyLDB4NjIsMHgxZCwweGQwLDB4OTksMHg2MSwweDIyLDB4NzEsMHg4OCwweDg4LDB4MDIsMHhhYywweDAwLDB4YjggfX0sCisgezE2LCAweGUwZjAsIDAsIHsweDIyLDB4MmUsMHgyMCwweDRiLDB4ODgsMHgwMywweGEwLDB4MDAsMHg4MCwweDAwLDB4MmUsMHgwOCwweDBiLDB4ODAsMHgyMywweDYwIH19LAorIHsxNiwgMHhlMTAwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MDQsMHhiMywweDAzLDB4MGMsMHhjYyB9fSwKKyB7MTYsIDB4ZTExMCwgMCwgezB4MGEsMHgxMywweDEyLDB4Y2MsMHgxNCwweGEzLDB4MGUsMHgwYywweDU4LDB4MGEsMHgzMywweDAyLDB4OGMsMHgxMCwweGEzLDB4MjAgfX0sCisgezE2LCAweGUxMjAsIDAsIHsweGEwLDB4MGEsMHgxOCwweDkwLDB4MDIsMHg0OCwweGEwLDB4YjAsMHgyMCwweDI0LDB4ODAsMHgwYSwweDIwLDB4MDIsMHhjYywweDA5IH19LAorIHsxNiwgMHhlMTMwLCAwLCB7MHhhMSwweDAwLDB4MmMsMHg4MCwweDBiLDB4MzIsMHg0MiwweGEyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTE0MCwgMCwgezB4ZTAsMHgxMSwweGFjLDB4MjAsMHhiYiwweDAwLDB4MmUsMHhjMCwweDRiLDB4ODAsMHhhMiwweGVjLDB4MDAsMHhhYiwweDAwLDB4NGUgfX0sCisgezE2LCAweGUxNTAsIDAsIHsweDQ2LDB4MmEsMHhiMCwweDAyLDB4MmMsMHgwNCwweDliLDB4ODAsMHgyYSwweDYwLDB4OGEsMHg5YywweDAyLDB4YWMsMHgwMCwweGI5IH19LAorIHsxNiwgMHhlMTYwLCAwLCB7MHg4MSwweDJlLDB4NDAsMHgwYiwweDk4LDB4MDIsMHhhMywweDAwLDB4OGEsMHgwMCwweDJlLDB4NDAsMHgwYiwweDgwLDB4MDQsMHhmMCB9fSwKKyB7MTYsIDB4ZTE3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlMSwweDAwLDB4ZmIsMHgwNCwweDNlLDB4YzAgfX0sCisgezE2LCAweGUxODAsIDAsIHsweDBlLDB4YjQsMHgwMywweGVjLDB4MGEsMHhkYiwweDAyLDB4MmUsMHhkMSwweDBlLDB4YjAsMHgwMywweGFjLDB4MDAsMHhmYiwweDgyIH19LAorIHsxNiwgMHhlMTkwLCAwLCB7MHgzMiwweDI4LDB4MWUsMHgwYywweDAzLDB4NjgsMHgwMCwweGI5LDB4MDAsMHgzZSwweDQwLDB4NGYsMHhiMCwweDQzLDB4ZWQsMHgwMCB9fSwKKyB7MTYsIDB4ZTFhMCwgMCwgezB4ZWEsMHgwMCwweDNlLDB4NDAsMHgwZiwweDgwLDB4MDMsMHg5MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUxYjAsIDAsIHsweGMwLDB4MDEsMHhiOCwweDE4LDB4ZmYsMHgwMiwweDFmLDB4YzAsMHgwYywweGUyLDB4MDMsMHhmYywweDAwLDB4ZGYsMHgwMywweDJmIH19LAorIHsxNiwgMHhlMWMwLCAwLCB7MHhhMSwweDBmLDB4NzAsMHgwMywweGZjLDB4MDQsMHhhYiwweDA0LDB4MzcsMHg0MiwweDJkLDB4ZDAsMHgwMiwweDdjLDB4MDAsMHhmYyB9fSwKKyB7MTYsIDB4ZTFkMCwgMCwgezB4MDAsMHgzZiwweDgwLDB4MGYsMHhjMCwweDAzLDB4YjAsMHgwMCwweGZkLDB4MDAsMHgzZiwweDgwLDB4MGYsMHhmMCwweDAzLDB4NzggfX0sCisgezE2LCAweGUxZTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YTksMHgwMCwweGRiLDB4MDAsMHgzYywweGMwIH19LAorIHsxNiwgMHhlMWYwLCAwLCB7MHgyZSwweDk0LDB4MDEsMHg2YywweDExLDB4Y2IsMHgwMCwweGI4LDB4YzAsMHgwYywweGIwLDB4MDMsMHg2YywweDAwLDB4ZWIsMHgwMSB9fSwKKyB7MTYsIDB4ZTIwMCwgMCwgezB4MzIsMHgxMCwweDA3LDB4OTIsMHgwMywweGE4LDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwYywweDA3LDB4YTIsMHgwMywweGFkLDB4MDAgfX0sCisgezE2LCAweGUyMTAsIDAsIHsweGQ4LDB4MDAsMHgzMiwweDAwLDB4MGMsMHg4MCwweDAzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMjIwLCAwLCB7MHhjOCwweDA1LDB4MjgsMHgwOCwweGJmLDB4MDAsMHgyZiwweGMwLDB4ODgsMHg4MCwweDAyLDB4M2MsMHgwOCwweGVmLDB4MDMsMHgyMiB9fSwKKyB7MTYsIDB4ZTIzMCwgMCwgezB4MDAsMHgwZCwweGY1LDB4MDAsMHgzYywweDAwLDB4OGIsMHg4MiwweDIyLDB4NjAsMHgwMywweDljLDB4MDIsMHgyYywweDEwLDB4YjkgfX0sCisgezE2LCAweGUyNDAsIDAsIHsweGIwLDB4MjIsMHhmMCwweDBiLDB4OTAsMHgwMiwweDIwLDB4MDAsMHhiYiwweDAwLDB4MjIsMHhlMiwweDBkLDB4YjAsMHgwMiwweGYyIH19LAorIHsxNiwgMHhlMjUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDQwLDB4MDAsMHhiMywweDAyLDB4MmMsMHhjMCB9fSwKKyB7MTYsIDB4ZTI2MCwgMCwgezB4MDgsMHgzMCwweDAyLDB4NmMsMHgwMCwweDgzLDB4MDAsMHgyMCwweGMwLDB4MDksMHgzNCwweDA0LDB4ZWMsMHgwMCwweGE4LDB4MDAgfX0sCisgezE2LCAweGUyNzAsIDAsIHsweDIyLDB4ZjAsMHgwYiwweDAwLDB4MDIsMHg4OCwweDAwLDB4YjMsMHgwMCwweDI4LDB4ZTAsMHgwYiwweDE0LDB4MDIsMHhhMCwweDAwIH19LAorIHsxNiwgMHhlMjgwLCAwLCB7MHg5MywweDAwLDB4MjAsMHhjMCwweDA4LDB4YjAsMHgwMiwweGY4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTI5MCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDQsMHhiNywweDgwLDB4MmQsMHhlOCwweDA4LDB4NzgsMHgwMiwweDBlLDB4YzgsMHhhNywweDkwLDB4MjEgfX0sCisgezE2LCAweGUyYTAsIDAsIHsweGE4LDB4MTksMHgzOCwweDUyLDB4OWUsMHhjMSwweDg3LDB4ODAsMHgyMSwweGUyLDB4MGIsMHhkOSwweDgyLDB4OWUsMHgwMCwweGI2IH19LAorIHsxNiwgMHhlMmIwLCAwLCB7MHhhMCwweDJkLDB4MjAsMHgwYiwweDY4LDB4MDIsMHgxZSwweDAwLDB4YjQsMHhjMSwweDIxLDB4MjAsMHgwOSwweDQ4LDB4MDIsMHhjOCB9fSwKKyB7MTYsIDB4ZTJjMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHgwYywweDgwLDB4YjMsMHgxMCwweDNlLDB4ZTAgfX0sCisgezE2LCAweGUyZDAsIDAsIHsweDBlLDB4M2EsMHgwNywweDRlLDB4MDAsMHhjYiwweDkwLDB4M2EsMHg2MSwweDBkLDB4MzgsMHgwMywweGNlLDB4ZDEsMHhlMSwweDk4IH19LAorIHsxNiwgMHhlMmUwLCAwLCB7MHgzMCwweGE0LDB4OGYsMHgxMCwweDAzLDB4ODgsMHgwMCwweGJhLDB4YTEsMHgzYywweDg0LDB4MDcsMHgwMCwweDAzLDB4ODIsMHhkNCB9fSwKKyB7MTYsIDB4ZTJmMCwgMCwgezB4ZDEsMHgwMCwweDcyLDB4ODAsMHgwYywweDMwLDB4MDMsMHhkMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUzMDAsIDAsIHsweDQwLDB4MTUsMHhiYywweDA0LDB4ZmYsMHgwMCwweDNmLDB4YzAsMHgwZiwweGMyLDB4MjMsMHhlYywweGIwLDB4ZmYsMHgwMCwweDMyIH19LAorIHsxNiwgMHhlMzEwLCAwLCB7MHgwNCwweDA2LDB4YjQsMHgyMywweDdjLDB4MTAsMHhiZiwweDAwLDB4M2UsMHg4NCwweDBmLDB4YjAsMHgwMywweDdjLDB4NDAsMHhmZiB9fSwKKyB7MTYsIDB4ZTMyMCwgMCwgezB4MDAsMHgzMywweDQwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZlLDB4MDAsMHhiZiwweDQwLDB4MGYsMHhjOCwweDAzLDB4ZDAgfX0sCisgezE2LCAweGUzMzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDA1LDB4ZTQsMHgwMCwweGNiLDB4MzMsMHgzZSwweGM4IH19LAorIHsxNiwgMHhlMzQwLCAwLCB7MHg0YywweGIwLDB4MDMsMHhhYywweDkwLDB4ZGIsMHhhMCwweDM2LDB4YzAsMHgwZSwweGJhLDB4NDMsMHg2YywweDAwLDB4YzksMHgwMCB9fSwKKyB7MTYsIDB4ZTM1MCwgMCwgezB4M2UsMHg0MCwweDBmLDB4MDAsMHgwZiwweDI4LDB4MDAsMHhmYiwweDAwLDB4M2UsMHg0MCwweDBmLDB4MTgsMHg0MywweDYwLDB4MDAgfX0sCisgezE2LCAweGUzNjAsIDAsIHsweGZhLDB4MDAsMHgzZSwweDQwLDB4NGYsMHgwOCwweDBiLDB4MmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMzcwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgxMCwweDA3LDB4MDgsMHgyYywweGNhLDB4MDgsMHgyMCwweDAyLDB4MWMsMHgyMCwweDg3LDB4MjgsMHgzZiB9fSwKKyB7MTYsIDB4ZTM4MCwgMCwgezB4ODAsMHg4YSwweGYwLDB4MDIsMHgxZCwweDQwLDB4ODcsMHgwNCwweDJkLDB4YzAsMHgwYiwweDcwLDB4MDIsMHgxYywweDAwLDB4YjYgfX0sCisgezE2LCAweGUzOTAsIDAsIHsweDAwLDB4MmQsMHg4MCwweDBiLDB4NjAsMHgwMywweDFjLDB4MDAsMHhiNSwweDAwLDB4MmQsMHg4MCwweDBiLDB4NzAsMHgwMiwweDEyIH19LAorIHsxNiwgMHhlM2EwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDhlLDB4MDAsMHg4NywweGEwLDB4MmQsMHhlNCB9fSwKKyB7MTYsIDB4ZTNiMCwgMCwgezB4MGEsMHg1OCwweDAyLDB4MWUsMHgwMSwweDgzLDB4OTAsMHgyMSwweDcwLDB4MGIsMHg3OSwweDAyLDB4OWUsMHgwMSwweDg1LDB4YzAgfX0sCisgezE2LCAweGUzYzAsIDAsIHsweDJkLDB4ZTAsMHg0YiwweDU4LDB4MTIsMHgxYSwweDAwLDB4YjYsMHg4MCwweDJkLDB4MjAsMHgwYiwweDQ4LDB4MDIsMHg1MiwweDAwIH19LAorIHsxNiwgMHhlM2QwLCAwLCB7MHhiNCwweDgwLDB4MmQsMHgyMCwweDBiLDB4NDgsMHgwMiwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTNlMCwgMCwgezB4NDgsMHgxNCwweGVjLDB4MDAsMHg4MywweDAwLDB4MmMsMHhjMCwweDg4LDB4MzYsMHgwMiwweDBjLDB4MDIsMHg4MywweDAwLDB4NmMgfX0sCisgezE2LCAweGUzZjAsIDAsIHsweGMwLDB4MGIsMHgzMCwweDBhLDB4YWMsMHgwMCwweDliLDB4ZTAsMHg2YywweGM4LDB4MGIsMHgzMiwweDAyLDB4MGMsMHgwMSwweGIzIH19LAorIHsxNiwgMHhlNDAwLCAwLCB7MHgwMCwweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwYywweDEwLDB4YjMsMHg0MCwweDJjLDB4YzAsMHgwYiwweDNjLDB4ODIsMHgxMiB9fSwKKyB7MTYsIDB4ZTQxMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOCwweDAyLDB4Y2EsMHgwMCwweDNlLDB4ODAgfX0sCisgezE2LCAweGU0MjAsIDAsIHsweDBlLDB4ZTQsMHg4YiwweDI4LDB4MDAsMHhjYSwweDAwLDB4MzMsMHg5NSwweDBmLDB4YTAsMHgwNywweGE4LDB4MDIsMHhjZSwweDQwIH19LAorIHsxNiwgMHhlNDMwLCAwLCB7MHgzZiwweGIwLDB4MGYsMHhlNCwweDgyLDB4MjgsMHgwMCwweGZhLDB4MDAsMHgzZSwweDgwLDB4MGYsMHhhMCwweDIzLDB4NjgsMHgwMCB9fSwKKyB7MTYsIDB4ZTQ0MCwgMCwgezB4ZmEsMHg0MCwweDNlLDB4ODEsMHg0ZiwweGE0LDB4ZTMsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU0NTAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDgwLDB4ZjAsMHgwMCwweDNjLDB4MDAsMHgyZiwweDAwLDB4MDIsMHg2MCwweDAwLDB4ZTgsMHgwMCwweDNjIH19LAorIHsxNiwgMHhlNDYwLCAwLCB7MHgwMCwweDBlLDB4ODAsMHgwMSwweDIwLDB4MDAsMHhlOCwweDA0LDB4NWUsMHgwNCwweDBmLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmYyB9fSwKKyB7MTYsIDB4ZTQ3MCwgMCwgezB4MDEsMHgzZiwweDEwLDB4MGYsMHhjNCwweDAzLDB4YjAsMHgwMCwweGZjLDB4MDksMHgzZiwweDAwLDB4MGYsMHhjMCwweDAzLDB4ZDIgfX0sCisgezE2LCAweGU0ODAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGE5LDB4MjAsMHgzNiwweDQwIH19LAorIHsxNiwgMHhlNDkwLCAwLCB7MHgwZSwweDkwLDB4MDMsMHg0NCwweDA0LDB4ZDksMHgwMCwweDNlLDB4NDAsMHgwZCwweDkwLDB4MDMsMHhlNCwweDA0LDB4YzksMHgwMCB9fSwKKyB7MTYsIDB4ZTRhMCwgMCwgezB4MzIsMHg0MCwweDhmLDB4OTAsMHgwYiwweGU0LDB4MDgsMHhmOSwweDAwLDB4M2UsMHg0NCwweDBlLDB4OTgsMHgwMywweGU2LDB4MDAgfX0sCisgezE2LCAweGU0YjAsIDAsIHsweGY5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4YzIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNGMwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDQwLDB4MTgsMHg5MCwweDAyLDB4MjQsMHgwMCwweDg5LDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4ZTRkMCwgMCwgezB4NDAsMHgwOCwweDk0LDB4MDIsMHhlNCwweDAwLDB4ZDksMHgwNCwweDIyLDB4NDAsMHgwYiwweDFjLDB4MGIsMHg2NCwweDAwLDB4YjkgfX0sCisgezE2LCAweGU0ZTAsIDAsIHsweDk0LDB4MmMsMHg1MCwweDA4LDB4OWMsMHgwMiwweGU0LDB4MTQsMHhiOSwweDkwLDB4MGUsMHg0MCwweDBiLDB4OTAsMHgwMiwweGUwIH19LAorIHsxNiwgMHhlNGYwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDIsMHg4OSwweDAwLDB4MjYsMHg0MCB9fSwKKyB7MTYsIDB4ZTUwMCwgMCwgezB4NGEsMHg5MCwweDAyLDB4NjQsMHgwMCwweDk5LDB4MDQsMHgyZSwweDQwLDB4MDgsMHg5OCwweDgyLDB4ZTQsMHgwMCwweDg5LDB4MDAgfX0sCisgezE2LCAweGU1MTAsIDAsIHsweDZhLDB4NDAsMHgwYSwweDkyLDB4ODIsMHhlNCwweDAwLDB4YmQsMHgwMSwweDJmLDB4NTAsMHgxMiwweGQ2LDB4MDIsMHhmNCwweDQwIH19LAorIHsxNiwgMHhlNTIwLCAwLCB7MHhiZCwweDAwLDB4MGYsMHg0MCwweDBiLDB4ZDAsMHgwMiwweGM2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTUzMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHg4MSwweDIwLDB4MjAsMHg0OCwweDA4LDB4MTIsMHgwMiwweDA0LDB4ODAsMHg4MSwweDIyLDB4MmMgfX0sCisgezE2LCAweGU1NDAsIDAsIHsweDQ4LDB4YTgsMHgxMiwweDA2LDB4YzQsMHg5MCwweDkxLDB4MjAsMHgyOCwweDUwLDB4MGIsMHg5MCwweDAyLDB4NDUsMHgwMCwweGI1IH19LAorIHsxNiwgMHhlNTUwLCAwLCB7MHg0MCwweDZkLDB4NDAsMHgwOCwweDUwLDB4MTIsMHhkNCwweDA0LDB4YjUsMHgwMiwweDJkLDB4NDAsMHgwYiwweDUwLDB4MDIsMHhjMiB9fSwKKyB7MTYsIDB4ZTU2MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4YzgsMHgwMCwweDM2LDB4MTQgfX0sCisgezE2LCAweGU1NzAsIDAsIHsweDBhLDB4ODUsMHgwMywweDQxLDB4NDAsMHhkOCwweDUwLDB4MmUsMHgxNCwweDBjLDB4ODUsMHgwMywweGMxLDB4NDAsMHhjOCwweDUwIH19LAorIHsxNiwgMHhlNTgwLCAwLCB7MHhiYSwweDAwLDB4MGUsMHg4MCwweDIzLDB4ZTAsMHgwMCwweDc4LDB4MDAsMHgzZSwweDAwLDB4MGUsMHg4MCwweDAzLDB4ZTAsMHgwNCB9fSwKKyB7MTYsIDB4ZTU5MCwgMCwgezB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweGMwLDB4MDMsMHhlZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU1YTAsIDAsIHsweDk4LDB4MWQsMHhmNCwweDQwLDB4ZDksMHgxMCwweDNlLDB4NDQsMHgwNywweGYxLDB4MDMsMHhlNCwweDQwLDB4ZjksMHgxMCwweDNmIH19LAorIHsxNiwgMHhlNWIwLCAwLCB7MHg0NCwweGFmLDB4OTEsMHgwMywweGU0LDB4NDAsMHhmZCwweDEwLDB4MzcsMHg1MCwweDBmLDB4ZDAsMHgwMywweGU0LDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4ZTVjMCwgMCwgezB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHhhMCwweGY5LDB4MjgsMHgzZSwweDRhLDB4MGYsMHg5MiwweDgzLDB4ZTYgfX0sCisgezE2LCAweGU1ZDAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZTYsMHhkNCwweGZkLDB4YTIsMHgzYSwweDcwIH19LAorIHsxNiwgMHhlNWUwLCAwLCB7MHg4YywweDllLDB4MDMsMHgyNiwweDgwLDB4YzksMHhhMCwweDMyLDB4NjgsMHgwYywweGRiLDB4NDMsMHgyNywweDgwLDB4OWQsMHhhMiB9fSwKKyB7MTYsIDB4ZTVmMCwgMCwgezB4YjcsMHg0MCwweDBmLDB4NTAsMHgwMywweDY1LDB4MDAsMHhmZCwweDAwLDB4M2YsMHhjMSwweDA3LDB4ZDAsMHgwMywweGY1LDB4MDQgfX0sCisgezE2LCAweGU2MDAsIDAsIHsweGZkLDB4NDAsMHgyZiwweGMwLDB4MGMsMHhkMCwweDAzLDB4YzYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNjEwLCAwLCB7MHgzOCwweDEwLDB4ZTMsMHg4OCwweGI4LDB4NTAsMHgyMiwweDM4LDB4MDgsMHg4ZSwweDAwLDB4YTIsMHhhMCwweDg4LDB4ZTgsMHgyMiB9fSwKKyB7MTYsIDB4ZTYyMCwgMCwgezB4MzgsMHg0OCwweDg4LDB4MDMsMHg2MiwweDEwLDB4YTgsMHhlOCwweDNjLDB4MDAsMHgwYiwweDgwLDB4MDMsMHg2MiwweDgwLDB4YjggfX0sCisgezE2LCAweGU2MzAsIDAsIHsweDAxLDB4MmUsMHg4MCwweDBiLDB4ODAsMHgyMSwweGEyLDB4MDAsMHhiMCwweDg0LDB4MmUsMHgyYSwweDI4LDB4OGEsMHg4MiwweGNlIH19LAorIHsxNiwgMHhlNjQwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4NDAsMHhiMSwweDAwLDB4MjgsMHg1OCB9fSwKKyB7MTYsIDB4ZTY1MCwgMCwgezB4ODAsMHgxMywweDQwLDB4MDUsMHgwMCwweDgxLDB4NDAsMHgyMCwweDUyLDB4MjgsMHgxNiwweDAyLDB4ODUsMHg4MCwweDliLDB4YzIgfX0sCisgezE2LCAweGU2NjAsIDAsIHsweDY0LDB4NDEsMHg4YiwweDk4LDB4MDIsMHgwNCwweDAwLDB4YjEsMHgwOSwweDJjLDB4NDAsMHgxYiwweDEwLDB4MjAsMHhjNCwweDAwIH19LAorIHsxNiwgMHhlNjcwLCAwLCB7MHhiMSwweDAwLDB4MmMsMHg0MCwweDQ4LDB4MTAsMHgwMiwweGMyLDB4MDUsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTY4MCwgMCwgezB4MTgsMHgxNSwweGE1LDB4ODQsMHhiOSwweDAwLDB4MjAsMHg0MCwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHgwMSwweDAwLDB4MjAgfX0sCisgezE2LCAweGU2OTAsIDAsIHsweDUwLDB4MDgsMHg5MCwweDQyLDB4NjQsMHgwMCwweGE5LDB4MTAsMHhhZSwweDU4LDB4MDMsMHg5OCwweDAyLDB4NjQsMHgwMCwweGI5IH19LAorIHsxNiwgMHhlNmEwLCAwLCB7MHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4NDYsMHhhNCwweDEwLDB4YjksMHgwMCwweDJlLDB4NDEsMHgwOCwweDkwLDB4MDIsMHhjNiB9fSwKKyB7MTYsIDB4ZTZiMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTEsMHhlNywweDAwLDB4ZjksMHgwMCwweDJhLDB4NDAgfX0sCisgezE2LCAweGU2YzAsIDAsIHsweDJjLDB4OTQsMHgwYiwweDI0LDB4MDIsMHhjOSwweDAwLDB4YjIsMHg0NCwweDBjLDB4OTAsMHgwMywweDI0LDB4MDQsMHhkOSwweDgwIH19LAorIHsxNiwgMHhlNmQwLCAwLCB7MHhiNiwweDQxLDB4OGYsMHgxOCwweDAzLDB4MjQsMHgwMCwweGY5LDB4NjAsMHgzZSwweDQwLDB4MGYsMHg5NiwweDAzLDB4ZTQsMHgwMCB9fSwKKyB7MTYsIDB4ZTZlMCwgMCwgezB4ZjksMHg4MCwweDNlLDB4NDIsMHg4YywweDkwLDB4MDMsMHhlOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU2ZjAsIDAsIHsweDI4LDB4MDEsMHhhNiwweDAwLDB4ZjEsMHgwMCwweDNlLDB4NDAsMHgwZiwweDFjLDB4MDMsMHhjNCwweDAwLDB4ZjksMHgwMCwweDNlIH19LAorIHsxNiwgMHhlNzAwLCAwLCB7MHg0MCwweDhmLDB4OTAsMHgyMywweGM0LDB4MTAsMHhmOSwweDAwLDB4YmUsMHg0MCwweDBmLDB4OTAsMHgwYiwweGU0LDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4ZTcxMCwgMCwgezB4MDAsMHgzZSwweDQwLDB4MDcsMHg5MCwweDIzLDB4ZTQsMHgwMCwweGY5LDB4MjAsMHgzZSwweDQwLDB4OGYsMHg5MCwweDAzLDB4Y2EgfX0sCisgezE2LCAweGU3MjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTEsMHgwMCwweGY4LDB4MDAsMHhiZSwweDAwIH19LAorIHsxNiwgMHhlNzMwLCAwLCB7MHgwZSwweDg0LDB4MDMsMHgyMCwweDAwLDB4YzgsMHgwMCwweDMyLDB4MDAsMHgwYywweDAwLDB4ODMsMHgyMCwweDAwLDB4ZjgsMHgwMCB9fSwKKyB7MTYsIDB4ZTc0MCwgMCwgezB4M2UsMHgwMCwweDBjLDB4ODAsMHgwMywweGEwLDB4MDAsMHhmOCwweDAwLDB4MzYsMHgxMCwweDBmLDB4ODAsMHg0MywweGUwLDB4MDggfX0sCisgezE2LCAweGU3NTAsIDAsIHsweGY4LDB4MDAsMHgzMiwweDAwLDB4MGYsMHg4MCwweDAzLDB4Y2EsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNzYwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMCwweGJhLDB4MDAsMHgyMiwweDgwLDB4NDgsMHhhMCwweDAzLDB4NjgsMHgwMCwweGFhLDB4MDAsMHgyYSB9fSwKKyB7MTYsIDB4ZTc3MCwgMCwgezB4ODAsMHgwOCwweGUwLDB4MDMsMHg2OCwweDAwLDB4ODIsMHgwMCwweDJmLDB4ODAsMHgwOCwweGU2LDB4MDIsMHgyOCwweDA0LDB4YmUgfX0sCisgezE2LCAweGU3ODAsIDAsIHsweDQwLDB4MjMsMHg4MCwweDBiLDB4ZTgsMHgwMiwweGVhLDB4MDAsMHhiZSwweDAxLDB4MjIsMHg4MCwweDBiLDB4ZTAsMHgwMiwweGNhIH19LAorIHsxNiwgMHhlNzkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDEsMHg5MywweDAxLDB4MjAsMHhjMSB9fSwKKyB7MTYsIDB4ZTdhMCwgMCwgezB4MGEsMHgzMCwweDAyLDB4MGMsMHgwMCwweGEzLDB4MDAsMHgyMCwweGMwLDB4ODgsMHgzOCwweDQyLDB4MGMsMHgwMCwweGEzLDB4MDAgfX0sCisgezE2LCAweGU3YjAsIDAsIHsweDI0LDB4YzAsMHgwYSwweDNlLDB4NDIsMHg4YywweDAwLDB4YjIsMHg0YywweDI0LDB4ZTAsMHg0YiwweDM4LDB4MDIsMHhjNCwweDQxIH19LAorIHsxNiwgMHhlN2MwLCAwLCB7MHhiMywweDAwLDB4MjIsMHhjMCwweDBiLDB4MTAsMHgwMiwweGNhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTdkMCwgMCwgezB4YTAsMHgwMSwweDFjLDB4MDAsMHhiNywweDAwLDB4MjAsMHhjOSwweDQ4LDB4NzAsMHgwMiwweGRjLDB4NDAsMHhhNywweDE0LDB4MmMgfX0sCisgezE2LCAweGU3ZTAsIDAsIHsweGM4LDB4MjgsMHgzMCwweDgyLDB4NWMsMHhjMSwweDg1LDB4MDAsMHgyZCwweGUwLDB4MmEsMHhmMCwweDEyLDB4MWMsMHg4MCwweGI3IH19LAorIHsxNiwgMHhlN2YwLCAwLCB7MHhhMCwweDIxLDB4ODIsMHgwYiwweDcwLDB4ODIsMHhkNCwweDExLDB4YjYsMHg4MCwweDIxLDB4NDAsMHg0YiwweDUwLDB4MDIsMHhlOCB9fSwKKyB7MTYsIDB4ZTgwMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDgwLDB4ZDUsMHg4MCwweDI5LDB4ZWEgfX0sCisgezE2LCAweGU4MTAsIDAsIHsweDRlLDB4M2EsMHgwNywweDBlLDB4ODAsMHhlMywweGIwLDB4MzEsMHhmYywweDBjLDB4NDgsMHgwMywweDBlLDB4NDEsMHhlNywweDgwIH19LAorIHsxNiwgMHhlODIwLCAwLCB7MHgzZCwweGUwLDB4MGUsMHg3OCwweDAzLDB4OWUsMHg4MCwweGY0LDB4YzQsMHgzNSwweGUwLDB4MGYsMHg3OCwweDI3LDB4ZGUsMHgwMCB9fSwKKyB7MTYsIDB4ZTgzMCwgMCwgezB4ZjUsMHg4MCwweGIxLDB4ZTAsMHgwZiwweDU4LDB4MDMsMHhlYSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU4NDAsIDAsIHsweDA4LDB4MWQsMHhhYywweDAwLDB4MzEsMHgwNCwweDNhLDB4YzQsMHgwZiwweGI1LDB4OTMsMHg2ZCwweDA4LDB4ZmIsMHg0MCwweDNhIH19LAorIHsxNiwgMHhlODUwLCAwLCB7MHhjOCwweDYzLDB4ODAsMHgyMywweGVjLDB4OTgsMHhlOSwweDAwLDB4M2UsMHhjMCwweDBkLDB4YjAsMHg0MywweGVjLDB4MDAsMHhmMyB9fSwKKyB7MTYsIDB4ZTg2MCwgMCwgezB4ODAsMHgzZSwweDQwLDB4NGYsMHhhMCwweDAzLDB4ZWMsMHgwMCwweGY4LDB4NjgsMHgzZSwweDQwLDB4OGYsMHg5OCwweDAzLDB4YzIgfX0sCisgezE2LCAweGU4NzAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHg2MCwweGViLDB4OTAsMHgzZSwweGU0IH19LAorIHsxNiwgMHhlODgwLCAwLCB7MHgwZiwweGI4LDB4MDAsMHgzZiwweDQwLDB4Y2IsMHg4MCwweDdmLDB4ZTAsMHgwZSwweGZiLDB4MDMsMHgyZSwweDQwLDB4Y2IsMHg4MCB9fSwKKyB7MTYsIDB4ZTg5MCwgMCwgezB4M2YsMHhlMCwweDBmLDB4NzksMHg0MywweDJlLDB4NjAsMHhjYSwweDgxLDB4MzMsMHg2NCwweDhmLDB4ZDksMHgwMywweGZlLDB4MDAgfX0sCisgezE2LCAweGU4YTAsIDAsIHsweGZmLDB4ODEsMHgzMywweGUwLDB4MGYsMHhkOSwweDhiLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOGIwLCAwLCB7MHhhOCwweDAxLDB4OWMsMHgwMCwweDg3LDB4ODEsMHgxOSwweGU0LDB4MGIsMHhmYSwweDEzLDB4NWUsMHg4MCwweDg3LDB4YjIsMHgyZCB9fSwKKyB7MTYsIDB4ZThjMCwgMCwgezB4ZWMsMHgwZCwweDc5LDB4MDEsMHg5ZSwweDAwLDB4ZDUsMHg5MCwweDJkLDB4ZjgsMHgwYiwweDc4LDB4MDMsMHg3ZSwweDA4LDB4YWIgfX0sCisgezE2LCAweGU4ZDAsIDAsIHsweDkxLDB4MjksMHg4NSwweDBiLDB4NTEsMHgwMiwweGRjLDB4NDgsMHhiNiwweDQwLDB4MjEsMHg0MCwweDBiLDB4NTAsMHgwMiwweDJhIH19LAorIHsxNiwgMHhlOGUwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhjLDB4MTQsMHhiNSwweDIwLDB4NmQsMHhjOCB9fSwKKyB7MTYsIDB4ZThmMCwgMCwgezB4MGIsMHg3MiwweDAyLDB4NWMsMHg4MCwweDg3LDB4MjAsMHg2OSwweGMwLDB4ODgsMHg1MywweDAyLDB4Y2MsMHg4MSwweDk3LDB4NTAgfX0sCisgezE2LCAweGU5MDAsIDAsIHsweDJkLDB4YzgsMHgwYiwweGY3LDB4MGEsMHhkYywweGMwLDB4ODQsMHgwMSwweDIxLDB4NDQsMHgxYiwweDcwLDB4MjIsMHhkYywweDAwIH19LAorIHsxNiwgMHhlOTEwLCAwLCB7MHhiNSwweDAwLDB4MjEsMHhjNCwweDBiLDB4NTAsMHg4NiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTkyMCwgMCwgezB4MjAsMHgxNCwweGNmLDB4MzAsMHg5MSwweDAwLDB4MmMsMHhjMCwweDBiLDB4MzQsMHgwMiwweDRjLDB4MDAsMHg4MywweDAwLDB4MmMgfX0sCisgezE2LCAweGU5MzAsIDAsIHsweGYyLDB4MGIsMHgxMCwweDIyLDB4MGMsMHgwMCwweDkxLDB4MDAsMHgyYywweGM4LDB4MGIsMHgxOCwweDBhLDB4Y2QsMHgwMSwweGEzIH19LAorIHsxNiwgMHhlOTQwLCAwLCB7MHgwMCwweDI4LDB4NjAsMHgwYiwweDIxLDB4MDIsMHhjZSwweDIwLDB4YjgsMHg0MCwweGEwLDB4NTQsMHgwYiwweDE4LDB4MDIsMHgwOCB9fSwKKyB7MTYsIDB4ZTk1MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTEsMHhiZCwweDAwLDB4ZjksMHgwMCwweDJmLDB4YzAgfX0sCisgezE2LCAweGU5NjAsIDAsIHsweDBmLDB4ZjQsMHgwMiwweDdjLDB4MTIsMHhjZiwweDAzLDB4M2YsMHhjMiwweDBlLDB4YjAsMHgwMywweGZjLDB4MDQsMHg5YiwweDAyIH19LAorIHsxNiwgMHhlOTcwLCAwLCB7MHgyZSwweGYyLDB4MGYsMHhhNCwweDBiLDB4ZGMsMHgwMCwweGNlLDB4MDAsMHhiMCwweGM4LDB4OGYsMHhhNCwweDAzLDB4ZWYsMHgwMCB9fSwKKyB7MTYsIDB4ZTk4MCwgMCwgezB4ZjgsMHg4MCwweDMyLDB4ZjUsMHgxZiwweGRkLDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU5OTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDQwLDB4ZTksMHgwMCwweDNhLDB4YzAsMHgwZiwweGIxLDB4MDMsMHhjYywweDAwLDB4ZjMsMHgwMCwweDNlIH19LAorIHsxNiwgMHhlOWEwLCAwLCB7MHhjMCwweDBkLDB4YjQsMHgwOSwweGVjLDB4MTgsMHhmOSwweDEwLDB4M2UsMHgxMCwweDRmLDB4YjEsMHgwYSwweDZjLDB4ODAsMHhmOSB9fSwKKyB7MTYsIDB4ZTliMCwgMCwgezB4ODksMHgzNiwweDgyLDB4MGIsMHhhNiwweDAzLDB4ZWMsMHg1MCwweGY5LDB4NTAsMHgzZSwweGMwLDB4MWYsMHg5MCwweDAzLDB4NjAgfX0sCisgezE2LCAweGU5YzAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweGZkLDB4YTAsMHgzZCwweGMwIH19LAorIHsxNiwgMHhlOWQwLCAwLCB7MHgwYywweDcwLDB4ODMsMHgyYywweDAwLDB4ZWYsMHgwMiwweDM1LDB4YzAsMHgwZCwweGUyLDB4MDMsMHhmYywweDA0LDB4ZmYsMHgwMiB9fSwKKyB7MTYsIDB4ZTllMCwgMCwgezB4MmQsMHhlMCwweDhlLDB4ZjAsMHgwMywweDNjLDB4MTAsMHhkYywweDAwLDB4M2YsMHg4MCwweDBjLDB4ZDgsMHgwMywweGZjLDB4MDAgfX0sCisgezE2LCAweGU5ZjAsIDAsIHsweGRlLDB4MTgsMHgzMywweGYwLDB4NGYsMHhkMCwweDAzLDB4YzAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYTAwLCAwLCB7MHg4MSwweDAwLDB4NmMsMHgwMCwweGI5LDB4MDAsMHgyZSwweGMwLDB4NGMsMHhiMCwweDAzLDB4NmMsMHgwMCwweDhiLDB4MDIsMHgzNiB9fSwKKyB7MTYsIDB4ZWExMCwgMCwgezB4YzAsMHgwZCwweGFjLDB4MTIsMHhlYywweDAwLDB4NzksMHgwMCwweDJlLDB4MzAsMHgwZCwweDNkLDB4NDIsMHhhYywweDAwLDB4ODkgfX0sCisgezE2LCAweGVhMjAsIDAsIHsweDg4LDB4MWEsMHgxMCwweDBkLDB4ODYsMHgwMiwweGVlLDB4MDQsMHhiYiwweDQwLDB4MjIsMHhlMCwweDBiLDB4OTAsMHgwMiwweGUwIH19LAorIHsxNiwgMHhlYTMwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDEsMHhiOSwweDAwLDB4MmUsMHhjMCB9fSwKKyB7MTYsIDB4ZWE0MCwgMCwgezB4MDgsMHhiMCwweDQyLDB4YWMsMHgwMCwweDBiLDB4MDUsMHgyNiwweGMwLDB4MDksMHg5NCwweDIwLDB4ZWMsMHgwMCwweGI5LDB4ODAgfX0sCisgezE2LCAweGVhNTAsIDAsIHsweDZlLDB4YzQsMHg4OCwweGIwLDB4ODIsMHgyYywweDAwLDB4OWIsMHg4MiwweDJlLDB4NDIsMHgwOCwweDgxLDB4MDIsMHhlNCwweDgwIH19LAorIHsxNiwgMHhlYTYwLCAwLCB7MHhiOCwweDAwLDB4MjIsMHhjMSwweDBiLDB4OTAsMHgwMiwweGUwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWE3MCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MTAsMHhiMSwweDI1LDB4MmMsMHhjYSwweDA4LDB4MzQsMHg0NiwweGNjLDB4MDgsMHg4MywweDAwLDB4MjQgfX0sCisgezE2LCAweGVhODAsIDAsIHsweGMyLDB4MGIsMHgwMiwweDUyLDB4Y2MsMHg4MSwweDgzLDB4MDAsMHgyYywweDAwLDB4MTksMHhiMiwweDQyLDB4YWMsMHg4MCwweDgxIH19LAorIHsxNiwgMHhlYTkwLCAwLCB7MHgwOCwweDI4LDB4ODAsMHgwOSwweDAwLDB4MDIsMHhjNCwweDQwLDB4YjEsMHgwMCwweDIwLDB4YzAsMHgwYiwweDEwLDB4MDIsMHhjMiB9fSwKKyB7MTYsIDB4ZWFhMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHg2YywweDAwLDB4YjksMHgwMCwweDNmLDB4ZDAgfX0sCisgezE2LCAweGVhYjAsIDAsIHsweDA4LDB4ZjYsMHgwNywweGJjLDB4YzIsMHhhZiwweDMwLDB4NzUsMHhkYywweDBkLDB4MTYsMHgwMiwweGZjLDB4ZTAsMHhiOSwweDUwIH19LAorIHsxNiwgMHhlYWMwLCAwLCB7MHgzZSwweGNjLDB4MGMsMHhiMCwweDIzLDB4MmMsMHgxMCwweGQ5LDB4MDAsMHgzZSwweDAwLDB4MGMsMHg5MCwweDAzLDB4ZWMsMHgwMCB9fSwKKyB7MTYsIDB4ZWFkMCwgMCwgezB4ZGUsMHgwMSwweDMyLDB4YzAsMHgwZiwweDkwLDB4MDMsMHhjMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVhZTAsIDAsIHsweGEwLDB4MTksMHhmYywweDAwLDB4ZmQsMHgxMCwweDNmLDB4Y2EsMHgyZSwweGY2LDB4MDMsMHg2ZCwweDk0LDB4OWYsMHgzMCwweDNhIH19LAorIHsxNiwgMHhlYWYwLCAwLCB7MHhjOSwweDBjLDB4ODMsMHg5MywweGZjLDB4ODAsMHhmZiwweDExLDB4N2UsMHgxOSwweDBiLDB4YjEsMHgwMywweGZjLDB4NDAsMHhmZCB9fSwKKyB7MTYsIDB4ZWIwMCwgMCwgezB4MDgsMHgzYiwweDAwLDB4MGYsMHhjMCwweDAzLDB4ZmMsMHg4MCwweDc3LDB4MDAsMHhiZiwweGMwLDB4MGYsMHg1MCwweDAzLDB4ZTggfX0sCisgezE2LCAweGViMTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAxLDB4ZmMsMHgwMCwweGY0LDB4OTQsMHgzNywweGM4IH19LAorIHsxNiwgMHhlYjIwLCAwLCB7MHgwZCwweDY5LDB4NjMsMHg3YywweDEwLDB4ZmYsMHg2MiwweDM3LDB4YzAsMHgwZCwweGI0LDB4MDMsMHg3YywweDYwLDB4ZDQsMHg4MCB9fSwKKyB7MTYsIDB4ZWIzMCwgMCwgezB4M2YsMHg0MCwweDBmLDB4NDgsMHgyMywweDMyLDB4MDAsMHhjZSwweDAwLDB4YmYsMHg0MCwweDhmLDB4ZDEsMHgwMywweDMwLDB4ZTAgfX0sCisgezE2LCAweGViNDAsIDAsIHsweGZmLDB4MzAsMHgzYiwweDYwLDB4MGYsMHhkOCwweDAzLDB4YjAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYjUwLCAwLCB7MHg4MCwweDEwLDB4ZWQsMHgyMCwweGI4LDB4MjQsMHgyMywweGY0LDB4NDksMHhhMiwweDAyLDB4M2YsMHg0MCwweDhmLDB4NTEsMHgyMyB9fSwKKyB7MTYsIDB4ZWI2MCwgMCwgezB4ZGEsMHgwOCwweGY2LDB4MTIsMHgzZCwweDgwLDB4OWIsMHg4MCwweDJlLDB4NDksMHg0YiwweDgwLDB4MDMsMHg0MCwweDAwLDB4ZDkgfX0sCisgezE2LCAweGViNzAsIDAsIHsweDAxLDB4MjIsMHg3NCwweDBiLDB4ZDUsMHgwMiwweDIxLDB4MDAsMHhiZiwweDQyLDB4MmUsMHg0OSwweDBiLDB4OWMsMHgwMiwweGUwIH19LAorIHsxNiwgMHhlYjgwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNkLDB4ODAsMHhiOCwweDIwLDB4MjgsMHhjMSB9fSwKKyB7MTYsIDB4ZWI5MCwgMCwgezB4MWIsMHhhMCwweDAyLDB4NGMsMHgwMCwweDkzLDB4MjAsMHgyYywweGQ4LDB4MGIsMHgzNCwweDAyLDB4Y2MsMHgwMCwweDkwLDB4MDEgfX0sCisgezE2LCAweGViYTAsIDAsIHsweDJjLDB4YzYsMHgxYSwweGEwLDB4MDIsMHg2OCwweDA4LDB4ODMsMHgwMCwweGE0LDB4NDAsMHgwYiwweDEwLDB4MDIsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYmIwLCAwLCB7MHhiMywweDEwLDB4MjgsMHg0MiwweDBiLDB4MTQsMHgwMiwweGEyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWJjMCwgMCwgezB4YzAsMHgxNSwweGFjLDB4MDAsMHhiOCwweDYwLDB4MmEsMHhjMCwweDFiLDB4YTAsMHg4ZSwweGFjLDB4MDEsMHg5YiwweDA1LDB4MjYgfX0sCisgezE2LCAweGViZDAsIDAsIHsweGMwLDB4MDMsMHhiMCwweDQyLDB4NmMsMHgwMCwweDliLDB4ODAsMHgyZSwweGMwLDB4MDMsMHhhMCwweDA2LDB4NjksMHgwMCwweDk5IH19LAorIHsxNiwgMHhlYmUwLCAwLCB7MHg4MCwweGFhLDB4YzAsMHgwYiwweDkwLDB4MDIsMHg2MywweDAwLDB4M2IsMHgwMCwweDJlLDB4NTgsMHg0YiwweDkwLDB4MDIsMHhmMCB9fSwKKyB7MTYsIDB4ZWJmMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTEsMHhlYywweDA0LDB4ZjgsMHg4MCwweGJhLDB4YzAgfX0sCisgezE2LCAweGVjMDAsIDAsIHsweDBmLDB4MzAsMHgwMywweDZjLDB4MTAsMHhkYiwweDAzLDB4MzYsMHhjMCwweDhmLDB4YjAsMHgwMywweGVjLDB4MDgsMHhkOCwweDgwIH19LAorIHsxNiwgMHhlYzEwLCAwLCB7MHg3ZSwweGUwLDB4MDYsMHg4OCwweDAzLDB4NDEsMHgwOCwweGNiLDB4YTAsMHgzZSwweDY0LDB4MGYsMHg5MCwweDBiLDB4MmEsMHgwMCB9fSwKKyB7MTYsIDB4ZWMyMCwgMCwgezB4N2IsMHgwMCwweDNhLDB4MDEsMHgwZiwweDkwLDB4MDMsMHg5MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVjMzAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4ZmMsMHg4NCwweDMyLDB4YzAsMHgwYywweGY5LDB4MDMsMHg1YywweDEwLDB4ZWYsMHgwMCwweDNiIH19LAorIHsxNiwgMHhlYzQwLCAwLCB7MHhjMCwweDBjLDB4NzAsMHgwMywweDljLDB4MDAsMHhlYywweDAxLDB4M2YsMHhlNCwweDRmLDB4ZDEsMHgwMywweGYxLDB4MDAsMHhmMyB9fSwKKyB7MTYsIDB4ZWM1MCwgMCwgezB4MDUsMHgzMywweDYwLDB4MGYsMHhkMCwweDAzLDB4YmMsMHgwNCwweGZmLDB4MDAsMHgzZiwweDIxLDB4MGYsMHhkMCwweDAzLDB4ZjggfX0sCisgezE2LCAweGVjNjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGM4LDB4NDAsMHgzYSwweGM2IH19LAorIHsxNiwgMHhlYzcwLCAwLCB7MHgwZCwweGI0LDB4MDMsMHg2YywweDAwLDB4ZjMsMHgwMCwweDM0LDB4YzAsMHgwZSwweGIwLDB4MDMsMHg2YywweDAwLDB4ZTksMHgxMCB9fSwKKyB7MTYsIDB4ZWM4MCwgMCwgezB4M2EsMHhjMCwweDBmLDB4ODQsMHgwMywweDJjLDB4NjAsMHhjYiwweDAwLDB4MzIsMHg2MCwweDBjLDB4NTAsMHgwMywweDYxLDB4MDAgfX0sCisgezE2LCAweGVjOTAsIDAsIHsweGNiLDB4MDAsMHgzZSwweDkwLDB4MGUsMHg5MCwweGEzLDB4OTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlY2EwLCAwLCB7MHhjOCwweDA1LDB4M2MsMHgwMiwweDg4LDB4MDEsMHgwMSwweGYwLDB4MjAsMHhiMCwweDAxLDB4M2UsMHgwMCwweDNmLDB4MDAsMHgzMyB9fSwKKyB7MTYsIDB4ZWNiMCwgMCwgezB4YzAsMHgwYiwweGYwLDB4MzIsMHgzYywweDA4LDB4ODksMHg4MCwweDIyLDB4YzAsMHgwMSwweDE1LDB4MTIsMHhhYywweDAwLDB4OGIgfX0sCisgezE2LCAweGVjYzAsIDAsIHsweDAwLDB4MjIsMHhjMCwweDQ4LDB4ZGIsMHgwMiwweDJmLDB4NDAsMHg4ZiwweDAwLDB4MmUsMHgwMSwweDA4LDB4ZDQsMHg4MCwweDMyIH19LAorIHsxNiwgMHhlY2QwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MDAsMHgwOCwweDAwLDB4MDgsMHhmMCB9fSwKKyB7MTYsIDB4ZWNlMCwgMCwgezB4MDgsMHgwMCwweDEyLDB4NGMsMHgwMCwweDMzLDB4MDEsMHgyNCwweGMwLDB4NGEsMHgzMCwweDAyLDB4NGMsMHgwMCwweGEwLDB4MjAgfX0sCisgezE2LCAweGVjZjAsIDAsIHsweDI4LDB4YzAsMHgwYiwweDEwLDB4MDIsMHg0NiwweDA0LDB4ODMsMHgwNCwweDIwLDB4YzAsMHgyOSwweDE4LDB4MDIsMHgwNCwweDQwIH19LAorIHsxNiwgMHhlZDAwLCAwLCB7MHhiMywweDAwLDB4MmMsMHg0MCwweDBhLDB4MWMsMHg0MiwweGIxLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWQxMCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDEsMHg4ZCwweDgwLDB4MjEsMHhlMCwweDE4LDB4YzgsMHgwMiwweDFlLDB4MDAsMHhiMywweGEwLDB4MjEgfX0sCisgezE2LCAweGVkMjAsIDAsIHsweGUwLDB4MWIsMHgzOCwweDAyLDB4MGUsMHgwMSwweGE3LDB4ODAsMHgyMSwweGUwLDB4MDksMHhkOCwweDQwLDB4ZDYsMHg0MCwweDg3IH19LAorIHsxNiwgMHhlZDMwLCAwLCB7MHg4MCwweDAxLDB4ZTAsMHgwOSwweDU5LDB4MDIsMHgxNiwweDAwLDB4OTcsMHg4NCwweDJkLDB4NjAsMHgwOCwweDU4LDB4NDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWQ0MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgyYywweDQwLDB4YzAsMHgwMCwweDM4LDB4YzQgfX0sCisgezE2LCAweGVkNTAsIDAsIHsweDBjLDB4MzAsMHgyNywweDRjLDB4MjAsMHhmMywweDAxLDB4MzQsMHhjMSwweDBlLDB4M2EsMHgwMywweDRjLDB4YzQsMHhlMCwweDAwIH19LAorIHsxNiwgMHhlZDYwLCAwLCB7MHgxOCwweGM4LDB4MGYsMHgzNCwweDAzLDB4NDQsMHg0MCwweGMzLDB4MDAsMHgzMCwweGMwLDB4MGQsMHg5MCwweDAzLDB4MmUsMHgwMCB9fSwKKyB7MTYsIDB4ZWQ3MCwgMCwgezB4ZjMsMHgwMCwweDNlLDB4NDAsMHgwZSwweDEwLDB4MDEsMHg5YSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVkODAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZjksMHgwMCwweDBlLDB4ZDQsMHgwZSwweGIwLDB4MDMsMHhlYywweDIwLDB4ZmIsMHgyMCwweDNmIH19LAorIHsxNiwgMHhlZDkwLCAwLCB7MHhjNCwweDBmLDB4ZjEsMHgwMywweGVjLDB4NjAsMHhkYiwweDEwLDB4M2YsMHhjMCwweDRmLDB4ZjAsMHgwMywweGE0LDB4NDYsMHhmYiB9fSwKKyB7MTYsIDB4ZWRhMCwgMCwgezB4MDAsMHhiZCwweGMwLDB4MGUsMHhkMCwweDBiLDB4YjQsMHgwMCwweGVmLDB4NDgsMHgzZiwweDQwLDB4MGYsMHg1MCwweDAzLDB4ZDAgfX0sCisgezE2LCAweGVkYjAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHgwMCwweGY4LDB4MDAsMHgzMiwweGQ0IH19LAorIHsxNiwgMHhlZGMwLCAwLCB7MHgwZiwweDgwLDB4MDMsMHhhZCwweDAwLDB4ZWIsMHgwOCwweDIyLDB4ZDIsMHgwYywweGI2LDB4MDMsMHg2YywweDAwLDB4ZjIsMHg4MCB9fSwKKyB7MTYsIDB4ZWRkMCwgMCwgezB4MzYsMHhjMCwweDBlLDB4YTAsMHgwMywweDI4LDB4MTAsMHhjYiwweDAwLDB4YjIsMHhjMCwweDBmLDB4ZDYsMHgwMywweDI4LDB4MTAgfX0sCisgezE2LCAweGVkZTAsIDAsIHsweGZiLDB4MjAsMHgzZSwweDQwLDB4NGYsMHg5OSwweDEzLDB4MmIsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZGYwLCAwLCB7MHg0OCwweDExLDB4OWQsMHgxMCwweGI0LDB4MDEsMHgyMSwweGMxLDB4OGIsMHhjMCwweDAyLDB4MWMsMHhhMCwweGJmLDB4MDQsMHgyNyB9fSwKKyB7MTYsIDB4ZWUwMCwgMCwgezB4YzgsMHgwOCwweDc1LDB4MDIsMHgxYywweGMwLDB4YjYsMHgwMCwweDIxLDB4YzAsMHgwOCwweGYwLDB4NDIsMHgxOCwweDEwLDB4OGYgfX0sCisgezE2LCAweGVlMTAsIDAsIHsweDAwLDB4MjEsMHhjMCwweDBiLDB4NTQsMHhhMiwweDFjLDB4MDAsMHhiNywweDA0LDB4MmQsMHg0MSwweDBiLDB4NTIsMHgwMiwweDEyIH19LAorIHsxNiwgMHhlZTIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4ODAsMHhiNiwweDg4LDB4YTUsMHhlMCB9fSwKKyB7MTYsIDB4ZWUzMCwgMCwgezB4MGIsMHg3OCwweDEyLDB4OWUsMHg4MSwweGE3LDB4OTAsMHgyNSwweGU0LDB4ODgsMHg3OCwweDAyLDB4MWUsMHg4MCwweGJmLDB4ODAgfX0sCisgezE2LCAweGVlNDAsIDAsIHsweDI0LDB4NjAsMHgwYiwweDY4LDB4MDIsMHgxZSwweDAwLDB4ODcsMHg4NCwweDYxLDB4ZTAsMHgwYSwweDFhLDB4MGEsMHgxYSwweDAwIH19LAorIHsxNiwgMHhlZTUwLCAwLCB7MHhiNywweGEwLDB4MmQsMHhlMCwweDBiLDB4ZGEsMHgwMiwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWU2MCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MDAsMHhiYSwweGMwLDB4YTQsMHhjMCwweDBiLDB4MzQsMHgwMiwweDBjLDB4MDAsMHhiMywweDAwLDB4MjQgfX0sCisgezE2LCAweGVlNzAsIDAsIHsweGMwLDB4MDgsMHhiMCwweDBlLDB4MmMsMHgwMCwweGIzLDB4OTgsMHgyMCwweDYwLDB4MDksMHgzMywweDAyLDB4MmMsMHgwMCwweGEzIH19LAorIHsxNiwgMHhlZTgwLCAwLCB7MHhjOCwweDIwLDB4YzAsMHgwYiwweDEwLDB4MDIsMHgwYywweDAwLDB4YjMsMHgwMCwweDJjLDB4ZjAsMHgwYiwweDEwLDB4MDIsMHgxMiB9fSwKKyB7MTYsIDB4ZWU5MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZmUsMHg4MCwweDM2LDB4ODEgfX0sCisgezE2LCAweGVlYTAsIDAsIHsweDBiLDB4ZTAsMHgwMywweGE4LDB4MDAsMHhlYSwweDAwLDB4YjIsMHg4MCwweDA4LDB4YTAsMHgwMywweDY4LDB4MDAsMHhmZSwweDAwIH19LAorIHsxNiwgMHhlZWIwLCAwLCB7MHgzNiwweGEwLDB4MWYsMHhlOCwweDEzLDB4M2IsMHg4MiwweGNlLDB4ZTAsMHgyMiwweDgwLDB4OGUsMHhhMCwweDAzLDB4MzgsMHgwMCB9fSwKKyB7MTYsIDB4ZWVjMCwgMCwgezB4YmEsMHgwMCwweDNmLDB4YTIsMHgwZiwweGEwLDB4MDMsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVlZDAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgyMCwweDNhLDB4MTAsMHgwNywweDgwLDB4MDMsMHhjMSwweDAwLDB4ZjgsMHgwMCwweDM4IH19LAorIHsxNiwgMHhlZWUwLCAwLCB7MHgwMCwweDJmLDB4ODAsMHgwMywweGEwLDB4MDEsMHhmOCwweDQyLDB4M2UsMHgwNSwweDBlLDB4ODAsMHgwYiwweGUwLDB4ODAsMHhkOCB9fSwKKyB7MTYsIDB4ZWVmMCwgMCwgezB4MDAsMHgzZSwweDAwLDB4MGYsMHg4NCwweDAzLDB4ZTEsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4NCwweDBiLDB4ZDIgfX0sCisgezE2LCAweGVmMDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGM5LDB4MDAsMHgzYSwweDUwIH19LAorIHsxNiwgMHhlZjEwLCAwLCB7MHg4ZiwweDkwLDB4ODMsMHhhNCwweDAyLDB4ZDEsMHgwMCwweGIyLDB4NDAsMHg0YywweDkwLDB4MjMsMHgyNCwweDA4LDB4YzksMHgwMSB9fSwKKyB7MTYsIDB4ZWYyMCwgMCwgezB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMywweDI0LDB4MDAsMHhjMSwweDAwLDB4MzIsMHg0MCwweDBmLDB4MTQsMHgwYSwweDI1LDB4MjAgfX0sCisgezE2LCAweGVmMzAsIDAsIHsweGU5LDB4MDAsMHgzZSwweDQyLDB4MGYsMHg5MCwweDAzLDB4YzIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZjQwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwYSwweDg5LDB4MDAsMHgyMiwweDcwLDB4MGIsMHg5MCwweDEyLDB4MjUsMHg4MCwweGM5LDB4MDAsMHgyMiB9fSwKKyB7MTYsIDB4ZWY1MCwgMCwgezB4NDAsMHgwYSwweDkwLDB4MDMsMHg2NCwweDAwLDB4ODksMHgyMCwweDJjLDB4NDAsMHgwYSwweDkwLDB4MGEsMHgyNCwweDAwLDB4ODkgfX0sCisgezE2LCAweGVmNjAsIDAsIHsweGMxLDB4MzIsMHg0MCwweDBiLDB4OTgsMHgwMiwweDA2LDB4MDAsMHg4OSwweDkwLDB4MmUsMHg0MCwweDBiLDB4OTQsMHgxMiwweGUwIH19LAorIHsxNiwgMHhlZjcwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMSwweDA0LDB4MDAsMHg4OSwweDAwLDB4NmEsMHg0MiB9fSwKKyB7MTYsIDB4ZWY4MCwgMCwgezB4MGEsMHgxMCwweDAyLDB4YTQsMHgwMCwweDg5LDB4MDAsMHhhMiwweDQwLDB4MGEsMHg5MCwweDAyLDB4MjQsMHgwMCwweDA5LDB4MDAgfX0sCisgezE2LCAweGVmOTAsIDAsIHsweDJlLDB4NDAsMHg1OCwweDEwLDB4MDIsMHgyNCwweDAwLDB4ODksMHg4MCwweGFhLDB4NjAsMHgwYiwweDkwLDB4MDIsMHhhNCwweDA0IH19LAorIHsxNiwgMHhlZmEwLCAwLCB7MHhhOSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTQsMHgwMiwweGM2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWZiMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHg4MSwweDAwLDB4NjAsMHg0OCwweDBiLDB4MTAsMHgwMiwweDA0LDB4ODEsMHg4MSwweDIwLDB4NjAgfX0sCisgezE2LCAweGVmYzAsIDAsIHsweDQ4LDB4MGEsMHgxMiwweDAyLDB4NDQsMHg4OCwweDgxLDB4MDAsMHgwZSwweDU5LDB4MGEsMHgxNCwweDAyLDB4MDUsMHgwMCwweDgxIH19LAorIHsxNiwgMHhlZmQwLCAwLCB7MHhjMCwweDI4LDB4NTAsMHg0OSwweDMwLDB4MDIsMHg4YywweDg0LDB4MDEsMHg2MCwweDJjLDB4NTAsMHgwYiwweDEwLDB4MDIsMHhjMiB9fSwKKyB7MTYsIDB4ZWZlMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4YzAsMHg1NCwweDJhLDB4MDAgfX0sCisgezE2LCAweGVmZjAsIDAsIHsweDBlLDB4ODUsMHgwMywweGEwLDB4MDAsMHhjOCwweDUwLDB4MzIsMHgxNSwweDFlLDB4MDUsMHgyMiwweDIxLDB4NDIsMHhjOCwweDAwIH19LAorIHsxNiwgMHhmMDAwLCAwLCB7MHgzZSwweDAwLDB4MGMsMHg4MCwweDAzLDB4MDAsMHgwNCwweGM4LDB4MDAsMHgzYSwweDAwLDB4NGYsMHg4NSwweDAzLDB4YTEsMHg0MCB9fSwKKyB7MTYsIDB4ZjAxMCwgMCwgezB4NjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYwMjAsIDAsIHsweDk4LDB4MWQsMHhlNCwweDQwLDB4ZmQsMHgwMywweDNlLDB4NDQsMHgwZiwweGQwLDB4MDMsMHhlNCwweDQ4LDB4ZTksMHgxMCwweDNlIH19LAorIHsxNiwgMHhmMDMwLCAwLCB7MHg0NSwweDBmLDB4OTEsMHgxMywweGU0LDB4NDAsMHhmZCwweDAwLDB4M2YsMHg0NCwweDBmLDB4ZDAsMHgwMywweGY0LDB4MDIsMHhmZCB9fSwKKyB7MTYsIDB4ZjA0MCwgMCwgezB4NDAsMHgzMywweDUwLDB4MGYsMHhkNCwweDIzLDB4NzQsMHg0MCwweGY5LDB4MTAsMHgzZiwweDQwLDB4MGYsMHg1NCwweDAzLDB4ZTYgfX0sCisgezE2LCAweGYwNTAsIDAsIHsweDAyLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZTQsMHgwMCwweGY5LDB4MDEsMHgzMywweDZhIH19LAorIHsxNiwgMHhmMDYwLCAwLCB7MHgwOSwweDkwLDB4MDMsMHhiNiwweDM0LDB4ZjksMHhjOCwweDMyLDB4NjQsMHgwYywweDlhLDB4MDMsMHhlNiwweGEwLDB4ZGQsMHgwMCB9fSwKKyB7MTYsIDB4ZjA3MCwgMCwgezB4M2MsMHg3MCwweDBmLDB4OTAsMHgwMywweGE1LDB4MDAsMHg4OSwweDgwLDB4MzMsMHgzMiwweDBmLDB4ZDgsMHgxMywweDNjLDB4MDAgfX0sCisgezE2LCAweGYwODAsIDAsIHsweGZkLDB4MDAsMHg3MCwweDUwLDB4MGYsMHhkMCwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMDkwLCAwLCB7MHgzOCwweDEwLDB4ZTIsMHg4MCwweGI4LDB4YTgsMHgyMiwweDEwLDB4MDgsMHg4OCwweDAyLDB4MjEsMHgwMCwweGI4LDB4YzAsMHgyMCB9fSwKKyB7MTYsIDB4ZjBhMCwgMCwgezB4MzAsMHgwZCwweDhlLDB4ODcsMHg4MywweDg4LDB4ODgsMHgwMCwweDJlLDB4MzQsMHgwYiwweDhhLDB4ODIsMHgyMiwweDgwLDB4ZGMgfX0sCisgezE2LCAweGYwYjAsIDAsIHsweGUwLDB4MjIsMHgzOCwweDBiLDB4ODAsMHgwMiwweDIwLDB4MDAsMHhmOCwweGE4LDB4MmEsMHgyOCwweDBiLDB4ODAsMHgwMiwweDBlIH19LAorIHsxNiwgMHhmMGMwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4MjAsMHhiMSwweDAwLDB4MjAsMHg0MCB9fSwKKyB7MTYsIDB4ZjBkMCwgMCwgezB4MGEsMHg5MiwweDkyLDB4ODQsMHgxMSwweGIxLDB4MjQsMHg2OCwweDU4LDB4MDksMHgxMSwweDAyLDB4YzQsMHgyMCwweDkxLDB4MDEgfX0sCisgezE2LCAweGYwZTAsIDAsIHsweDJjLDB4NDgsMHgxYiwweDUwLDB4MDIsMHg3NCwweDg0LDB4OTUsMHg0OCwweGFjLDB4NDgsMHgwYiwweDk0LDB4MDIsMHgwNCwweDA0IH19LAorIHsxNiwgMHhmMGYwLCAwLCB7MHhiMSwweDAyLDB4MjQsMHg0OCwweDBiLDB4MTAsMHgwMiwweDAyLDB4MDUsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjEwMCwgMCwgezB4MTgsMHgxMSwweGE0LDB4MDAsMHhiMSwweDIwLDB4MjIsMHg0MCwweDBhLDB4OTAsMHgwNiwweDJjLDB4MDEsMHhiOSwweDAwLDB4MmEgfX0sCisgezE2LCAweGYxMTAsIDAsIHsweDQwLDB4MDksMHg5MCwweDAyLDB4YTQsMHgwMCwweDliLDB4MDgsMHgyZSwweDQ4LDB4MGIsMHgxMiwweDFhLDB4NzQsMHgwMCwweDk1IH19LAorIHsxNiwgMHhmMTIwLCAwLCB7MHg0NSwweDJlLDB4NjAsMHgwMywweDkwLDB4MDIsMHgyNCwweDAwLDB4YjksMHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgwNiB9fSwKKyB7MTYsIDB4ZjEzMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZjksMHg4MCwweDMwLDB4NDAgfX0sCisgezE2LCAweGYxNDAsIDAsIHsweDBlLDB4MTYsMHgwMywweGE0LDB4MDAsMHhiOSwweDA0LDB4MzIsMHg0MCwweDBkLDB4OTAsMHgwMiwweGU0LDB4MDAsMHhkOSwweDQwIH19LAorIHsxNiwgMHhmMTUwLCAwLCB7MHgyZSwweDQwLDB4MWYsMHg5OCwweDAzLDB4ZTUsMHg4MCwweGQ5LDB4MDAsMHhhZSwweDYwLDB4MDcsMHgxMCwweDBiLDB4MjYsMHgwMSB9fSwKKyB7MTYsIDB4ZjE2MCwgMCwgezB4YjksMHgwMCwweGE2LDB4NDAsMHgwZiwweDkwLDB4MGIsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYxNzAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwMCwweGJlLDB4NDAsMHhhYywweDkyLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweGI0IH19LAorIHsxNiwgMHhmMTgwLCAwLCB7MHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhlOSwweDAwLDB4M2UsMHg2MCwweDBmLDB4OTAsMHgwMywweGE0LDB4ODAsMHhmOSB9fSwKKyB7MTYsIDB4ZjE5MCwgMCwgezB4MDAsMHgzMiwweDAwLDB4MGYsMHg5MCwweDgzLDB4ZTYsMHg4NSwweGUxLDB4MDAsMHgzMiwweDQ0LDB4MGYsMHgxMCwweDAzLDB4Y2EgfX0sCisgezE2LCAweGYxYTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGY4LDB4MDAsMHgzMiwweDAwIH19LAorIHsxNiwgMHhmMWIwLCAwLCB7MHgwZiwweDgwLDB4MTMsMHhlMCwweDk0LDB4ZTAsMHgwMCwweDMyLDB4MDAsMHgwYywweDgwLDB4MDMsMHg2MCwweDAwLDB4YzgsMHgwMCB9fSwKKyB7MTYsIDB4ZjFjMCwgMCwgezB4M2UsMHgwMCwweDBkLDB4ODAsMHg0MywweDIwLDB4MDgsMHhmOCwweDAwLDB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4NDAgfX0sCisgezE2LCAweGYxZDAsIDAsIHsweGY4LDB4MDAsMHgzMiwweDAwLDB4NGMsMHg4MCwweDIzLDB4Y2EsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMWUwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMCwweGJhLDB4MDAsMHgyMywweDgwLDB4MGIsMHhhMCwweDAyLDB4ZmIsMHgwNCwweDZhLDB4MDAsMHgyMiB9fSwKKyB7MTYsIDB4ZjFmMCwgMCwgezB4ODAsMHgwYSwweGEwLDB4MDMsMHg2OCwweDBhLDB4OGUsMHg4OCwweDNhLDB4ODAsMHgwOCwweGEwLDB4MDIsMHgwOCwweDAwLDB4YmEgfX0sCisgezE2LCAweGYyMDAsIDAsIHsweDAwLDB4YjcsMHgyMiwweDAzLDB4ZTQsMHgwMiwweGZhLDB4MDAsMHg4YSwweDAwLDB4MjIsMHg4MCwweDA4LDB4ZTgsMHgwMiwweGNhIH19LAorIHsxNiwgMHhmMjEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHhiMywweDAwLDB4NjAsMHg0MSB9fSwKKyB7MTYsIDB4ZjIyMCwgMCwgezB4MDMsMHgzMCwweDAyLDB4Y2MsMHg0MSwweGEzLDB4MDAsMHgwNCwweGMwLDB4MGIsMHgzMCwweDAyLDB4MmMsMHgwMCwweGEzLDB4ODAgfX0sCisgezE2LCAweGYyMzAsIDAsIHsweDJjLDB4YzAsMHgwOSwweDM4LDB4MDIsMHgwYywweDAwLDB4YjMsMHgwMCwweGEwLDB4YzAsMHgwYiwweDM0LDB4MDIsMHhjYywweDgwIH19LAorIHsxNiwgMHhmMjQwLCAwLCB7MHhhMSwweDAwLDB4MjAsMHhjMCwweDA4LDB4MzgsMHgwMiwweGNhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjI1MCwgMCwgezB4YTAsMHgwMSwweDFjLDB4NDAsMHhiNywweDAwLDB4NjEsMHgwMCwweDBiLDB4NzEsMHgwMiwweGRjLDB4MDAsMHhhMywweDAwLDB4MjUgfX0sCisgezE2LCAweGYyNjAsIDAsIHsweGM4LDB4MTksMHgzOCwweDAyLDB4NWMsMHg4MCwweGE3LDB4MDAsMHgwZiwweGU4LDB4MDksMHg2NCwweDIyLDB4MTAsMHgwMCwweGIzIH19LAorIHsxNiwgMHhmMjcwLCAwLCB7MHgwMCwweDI1LDB4YzgsMHgwYiwweDYwLDB4MDIsMHhmMiwweDAwLDB4ODUsMHgwMSwweDIzLDB4ZTgsMHgwOCwweDcwLDB4ODIsMHhlOCB9fSwKKyB7MTYsIDB4ZjI4MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDIwLDB4ZmYsMHg4MCwweGExLDB4YTAgfX0sCisgezE2LCAweGYyOTAsIDAsIHsweDBmLDB4N2EsMHg0MiwweGRhLDB4MDAsMHhlNywweGU4LDB4MzUsMHhmMCwweDJmLDB4N2IsMHg2MiwweDFlLDB4ODIsMHhlNiwweDgwIH19LAorIHsxNiwgMHhmMmEwLCAwLCB7MHgxZCwweGUwLDB4MGQsMHhmOCwweDBiLDB4MWUsMHgwMCwweGY3LDB4ODAsMHgzMSwweGYwLDB4MGYsMHg3OCwweDAzLDB4ZGUsMHgwYyB9fSwKKyB7MTYsIDB4ZjJiMCwgMCwgezB4ZWYsMHg4MCwweDMxLDB4ZjgsMHgyYywweDc4LDB4MDMsMHhlYSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYyYzAsIDAsIHsweDA4LDB4MWQsMHhhZCwweDg0LDB4ZmIsMHg2OCwweDNlLDB4MDAsMHgwZiwweGIwLDB4MDMsMHhlOCwweDAwLDB4ZmIsMHgwMCwweGZhIH19LAorIHsxNiwgMHhmMmQwLCAwLCB7MHhkOCwweDBlLDB4YjUsMHgwMywweGVkLDB4MDAsMHhkYiwweDAwLDB4M2EsMHhjMCwweDhlLDB4YTAsMHgwMywweGUwLDB4MDAsMHhmYiB9fSwKKyB7MTYsIDB4ZjJlMCwgMCwgezB4NDAsMHgzZSwweGMwLDB4MGIsMHhiMCwweDQzLDB4YzQsMHgwNCwweGVmLDB4MDIsMHhiZiwweGMwLDB4MGYsMHhiMCwweDAzLDB4YzIgfX0sCisgezE2LCAweGYyZjAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHg0MiwweGM3LDB4MzgsMHgzMywweDY0IH19LAorIHsxNiwgMHhmMzAwLCAwLCB7MHgwZSwweDdjLDB4MDMsMHg1ZSwweDAwLDB4ZGYsMHhhMCwweDM3LDB4ZjAsMHgwZCwweGY4LDB4MDMsMHhmZiwweDIwLDB4Y2YsMHg4MSB9fSwKKyB7MTYsIDB4ZjMxMCwgMCwgezB4MzMsMHhlMiwweDBjLDB4ZDgsMHgwMywweGJlLDB4MDAsMHg3ZiwweGMwLDB4MzMsMHhlMCwweDBjLDB4ZjksMHgwMywweDdlLDB4MDAgfX0sCisgezE2LCAweGYzMjAsIDAsIHsweGZkLDB4ODAsMHgzZiwweGUwLDB4MGYsMHhmOCwweDAzLDB4YzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMzMwLCAwLCB7MHhhOCwweDExLDB4OWMsMHgwMCwweDg3LDB4YTAsMHgyMSwweDE0LDB4MDgsMHg3MSwweDAyLDB4MTQsMHgxMCwweGQ3LDB4MjAsMHgzNSB9fSwKKyB7MTYsIDB4ZjM0MCwgMCwgezB4YzAsMHgwYywweDcwLDB4MDMsMHhiYywweDAwLDB4ODUsMHgwOCwweDJiLDB4YzAsMHg0ZCwweDQ2LDB4MDIsMHhkMSwweDAwLDB4YjcgfX0sCisgezE2LCAweGYzNTAsIDAsIHsweDAwLDB4MjEsMHhjMCwweDA4LDB4NjAsMHgwMiwweDA4LDB4ODAsMHhmNSwweDIwLDB4M2QsMHhjYSwweDBmLDB4NTQsMHgwMywweGVhIH19LAorIHsxNiwgMHhmMzYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4MTEsMHg4ZiwweDAxLDB4MjAsMHg4NCB9fSwKKyB7MTYsIDB4ZjM3MCwgMCwgezB4MWEsMHhmMCwweDAyLDB4MTgsMHgwMCwweGE3LDB4MzQsMHg2NSwweGMwLDB4MDksMHg3MSwweDAyLDB4ZGMsMHgwMCwweDhlLDB4MDAgfX0sCisgezE2LCAweGYzODAsIDAsIHsweDI5LDB4YzAsMHgwOCwweDUwLDB4MDYsMHg5YywweDAwLDB4YmYsMHg4OCwweDJkLDB4YzQsMHgwYSwweDYwLDB4MjYsMHg1OCwweDI0IH19LAorIHsxNiwgMHhmMzkwLCAwLCB7MHg5NywweDAwLDB4NmQsMHhjMCwweDliLDB4NzAsMHgwMiwweGMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjNhMCwgMCwgezB4MjAsMHgxNCwweGNjLDB4MDAsMHg4YiwweDQwLDB4MjAsMHgwMCwweDE4LDB4MzAsMHgwMiwweDAwLDB4MDAsMHhiYiwweDAyLDB4MjQgfX0sCisgezE2LCAweGYzYjAsIDAsIHsweGMwLDB4MDgsMHgzMCwweDIwLDB4Y2MsMHgwMCwweDgxLDB4YzAsMHgyOCwweGMwLDB4MGIsMHgwNCwweDgyLDB4ZTAsMHgxMCwweGJiIH19LAorIHsxNiwgMHhmM2MwLCAwLCB7MHhhMCwweDJjLDB4ZTAsMHgwYSwweDIwLDB4MDYsMHgwMCwweDAwLDB4YjMsMHgwMCwweDI4LDB4YzAsMHgwYSwweDEwLDB4MDIsMHg4OCB9fSwKKyB7MTYsIDB4ZjNkMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAwLDB4Y2YsMHgxMCwweDMyLDB4MDAgfX0sCisgezE2LCAweGYzZTAsIDAsIHsweDBlLDB4ZjAsMHgwYiwweDI0LDB4MDAsMHhlZiwweDAwLDB4MzcsMHhjMCwweDBkLDB4ZjAsMHgwMywweGZjLDB4MDYsMHhjMSwweDUwIH19LAorIHsxNiwgMHhmM2YwLCAwLCB7MHgzYiwweGMwLDB4MGMsMHhiNCwweDAzLDB4YWMsMHgwMCwweGY4LDB4YzAsMHhiZSwweGM4LDB4MmUsMHhiMCwweDAzLDB4NmUsMHgwMSB9fSwKKyB7MTYsIDB4ZjQwMCwgMCwgezB4ZmIsMHgwMCwweDJkLDB4YzAsMHg0YiwweDkwLDB4MDIsMHhlYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY0MTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDA0LDB4ZmIsMHgwMCwweDNlLDB4MDAsMHgwZiwweGIwLDB4MDMsMHhhZCwweDAwLDB4OWIsMHgwMCwweDNlIH19LAorIHsxNiwgMHhmNDIwLCAwLCB7MHhjMCwweDBmLDB4MzAsMHgwMywweGFjLDB4MDAsMHhmOCwweDAwLDB4MmUsMHhjMCwweDA1LDB4YjQsMHgwMywweGVkLDB4MDAsMHhmOCB9fSwKKyB7MTYsIDB4ZjQzMCwgMCwgezB4NDAsMHgzMiwweGMwLDB4MDksMHgwMCwweDAzLDB4ZTAsMHg5MSwweGUzLDB4MDAsMHgzZSwweGMwLDB4MGYsMHg5MCwweDExLDB4ZTAgfX0sCisgezE2LCAweGY0NDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZWMsMHgwMCwweGVmLDB4MDAsMHgzMywweDIwIH19LAorIHsxNiwgMHhmNDUwLCAwLCB7MHg0ZiwweGYwLDB4MDMsMHhiNCwweDAwLDB4ZWYsMHgwMywweDNhLDB4YzAsMHgwZiwweGYwLDB4MDMsMHgzYywweDAwLDB4ZGMsMHgwMCB9fSwKKyB7MTYsIDB4ZjQ2MCwgMCwgezB4MzEsMHhjMCwweDhkLDB4ZjgsMHgwMywweGZlLDB4MDQsMHhjZiwweDAwLDB4MzIsMHhjOCwweDBjLDB4ZjAsMHgwYiwweDFjLDB4MDAgfX0sCisgezE2LCAweGY0NzAsIDAsIHsweGNmLDB4OTMsMHgzMywweGMwLDB4OGMsMHg0MCwweDAyLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNDgwLCAwLCB7MHg4MSwweDA0LDB4NmMsMHgwMCwweGJiLDB4MDAsMHhhMiwweDA0LDB4MGIsMHgzMCwweDAyLDB4MGUsMHgwMCwweGFiLDB4MDAsMHgyYSB9fSwKKyB7MTYsIDB4ZjQ5MCwgMCwgezB4YzAsMHgwOSwweGIwLDB4MDMsMHg2YywweDA4LDB4YTgsMHhjMCwweDM2LDB4YzAsMHgwOCwweGJjLDB4MDIsMHhlZiwweDAyLDB4YWIgfX0sCisgezE2LCAweGY0YTAsIDAsIHsweGQwLDB4MjAsMHhlMCwweDA4LDB4YjgsMHgyMiwweDI2LDB4MTAsMHg4YiwweDAwLDB4MjIsMHhjMCwweDIwLDB4OWMsMHgwMiwweDIwIH19LAorIHsxNiwgMHhmNGIwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHhiYiwweDAwLDB4MjYsMHgwMCB9fSwKKyB7MTYsIDB4ZjRjMCwgMCwgezB4MGEsMHhiMCwweDAyLDB4YTIsMHgwOCwweGFiLDB4MDAsMHg2YSwweGMwLDB4MGIsMHhiMCwweDBhLDB4MGMsMHgwMCwweDhiLDB4ODAgfX0sCisgezE2LCAweGY0ZDAsIDAsIHsweDIyLDB4YzAsMHgwOSwweGIxLDB4MDIsMHhlYywweDQwLDB4ODgsMHgwOCwweDIyLDB4YzAsMHgwOCwweGI4LDB4MDIsMHgyNiwweDAwIH19LAorIHsxNiwgMHhmNGUwLCAwLCB7MHg4YiwweDAwLDB4MjIsMHhjMCwweDA4LDB4OTgsMHgwMiwweGEwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjRmMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDAsMHhiMywweDAwLDB4MjQsMHgwMCwweDBiLDB4YjAsMHgwMiwweDAwLDB4MDEsMHg4MywweDAwLDB4MjAgfX0sCisgezE2LCAweGY1MDAsIDAsIHsweGMwLDB4MDksMHgzMCwweDAyLDB4NGMsMHgwMCwweDAwLDB4MDQsMHgyNCwweGMwLDB4MDgsMHgzMCwweDA2LDB4NGMsMHgwMCwweDgwIH19LAorIHsxNiwgMHhmNTEwLCAwLCB7MHgwMCwweDJjLDB4YzAsMHgwOCwweDAwLDB4MDIsMHgwMCwweDQxLDB4ODMsMHgwMCwweGEyLDB4YzAsMHgwOCwweDEwLDB4MGEsMHg4MiB9fSwKKyB7MTYsIDB4ZjUyMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg3YywweDAwLDB4ZWYsMHgwOCwweDI2LDB4MDAgfX0sCisgezE2LCAweGY1MzAsIDAsIHsweDBlLDB4ZjAsMHgwMiwweGEwLDB4MDAsMHhlNywweDAwLDB4M2IsMHhjMCwweDBmLDB4ZjUsMHg0MywweDNjLDB4MDIsMHhkYSwweDAwIH19LAorIHsxNiwgMHhmNTQwLCAwLCB7MHgzMiwweGMwLDB4MGQsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGNiLDB4MDAsMHhiMiwweGMwLDB4MGMsMHhhMCwweDAzLDB4MjgsMHgxMCB9fSwKKyB7MTYsIDB4ZjU1MCwgMCwgezB4Y2IsMHgwMCwweDMyLDB4YzAsMHgwYywweDgwLDB4MDMsMHg4MCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY1NjAsIDAsIHsweGEwLDB4MGQsMHhmYywweDAwLDB4ZmIsMHgwMCwweDNiLDB4MDAsMHgwZiwweGYwLDB4MDMsMHhmMCwweDAwLDB4ZmYsMHgwMiwweDNmIH19LAorIHsxNiwgMHhmNTcwLCAwLCB7MHhjMCwweDBkLDB4ZjIsMHgwMywweGJjLDB4MDAsMHhmNCwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmNyB9fSwKKyB7MTYsIDB4ZjU4MCwgMCwgezB4MDAsMHgzMywweGMwLDB4MGYsMHg2MCwweDAzLDB4ZjAsMHg4OCwweGZmLDB4MDAsMHgzZiwweGMwLDB4NGYsMHhkMCwweDAzLDB4NjggfX0sCisgezE2LCAweGY1OTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHg0MCwweGZjLDB4MzEsMHgzYiwweDA4IH19LAorIHsxNiwgMHhmNWEwLCAwLCB7MHg0ZiwweGY5LDB4NDMsMHhlZiwweDAwLDB4ZGYsMHgzMCwweDMyLDB4MjEsMHgwZiwweDk0LDB4MDcsMHg3ZCwweDgwLDB4ZWYsMHgzOCB9fSwKKyB7MTYsIDB4ZjViMCwgMCwgezB4MzIsMHgwOSwweDFjLDB4MzgsMHgwMywweGYyLDB4MjEsMHhmZCwweDAwLDB4MzMsMHhjNCwweDBjLDB4ZjAsMHgwMiwweGZjLDB4MDAgfX0sCisgezE2LCAweGY1YzAsIDAsIHsweGRmLDB4MDAsMHgzMywweGMwLDB4MGYsMHhmMCwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNWQwLCAwLCB7MHg4MCwweDEwLDB4ZWMsMHg4OCwweDhiLDB4NjAsMHgyMiwweGU1LDB4MGUsMHhiMiwweDIyLDB4ZWMsMHg4MCwweGFmLDB4MTEsMHgyYSB9fSwKKyB7MTYsIDB4ZjVlMCwgMCwgezB4MjAsMHgwYiwweGIxLDB4MTMsMHhhYywweDQ4LDB4OGIsMHg0NSwweDM0LDB4Y2MsMHg0OCwweGIwLDB4MDIsMHg2YiwweDAwLDB4YmEgfX0sCisgezE2LCAweGY1ZjAsIDAsIHsweDgyLDB4MzYsMHgwMCwweDA4LDB4ODgsMHgyMiwweGMwLDB4MDQsMHg4OCwweDAwLDB4YTIsMHgwOCwweDhiLDB4ODgsMHg2MiwweDIwIH19LAorIHsxNiwgMHhmNjAwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MDAsMHhhMSwweDMwLDB4MjgsMHgwMCB9fSwKKyB7MTYsIDB4ZjYxMCwgMCwgezB4MGIsMHgzMiwweDAyLDB4Y2MsMHgwMCwweGEzLDB4MjIsMHgyYywweDAwLDB4OGIsMHgxMiwweDA2LDB4YzgsMHg4MCwweGEzLDB4MDAgfX0sCisgezE2LCAweGY2MjAsIDAsIHsweDIwLDB4MDIsMHhjYSwweDMwLDB4MDYsMHhjNCwweDAxLDB4YjEsMHgwMCwweDY4LDB4ODAsMHgwOSwweDIwLDB4MDIsMHg4OCwweDAwIH19LAorIHsxNiwgMHhmNjMwLCAwLCB7MHg4MywweDAwLDB4MjAsMHhjMiwweDBiLDB4MDAsMHgwYSwweGEyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjY0MCwgMCwgezB4YzAsMHgxNSwweGFjLDB4MDAsMHg4YiwweDYxLDB4NjIsMHhjMCwweDBiLDB4YjIsMHgwMiwweGU4LDB4MDAsMHhhYiwweDAyLDB4MmEgfX0sCisgezE2LCAweGY2NTAsIDAsIHsweDYxLDB4MWIsMHg5MCwweDAyLDB4YTgsMHgwMCwweGFiLDB4MDAsMHgyMCwweGMwLDB4MGEsMHhiMCwweDAyLDB4NmMsMHgwNCwweGJhIH19LAorIHsxNiwgMHhmNjYwLCAwLCB7MHgwMCwweDJlLDB4NDAsMHg4OSwweDkwLDB4MDIsMHhlNiwweDA4LDB4OTgsMHgwMCwweDIyLDB4MDAsMHgwYiwweGIwLDB4MDIsMHhiMCB9fSwKKyB7MTYsIDB4ZjY3MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlZSwweDAwLDB4ZjgsMHgwMSwweDNhLDB4MDQgfX0sCisgezE2LCAweGY2ODAsIDAsIHsweDBmLDB4YWMsMHgwMywweGVjLDB4OTAsMHhmYiwweDAyLDB4M2UsMHhlMCwweDBiLDB4OTAsMHg0MiwweDY3LDB4ODAsMHhhOCwweGM0IH19LAorIHsxNiwgMHhmNjkwLCAwLCB7MHgyMiwweDQ4LDB4MjIsMHg4NiwweDAzLDB4ZTEsMHg0MCwweGI4LDB4MDIsMHgyYSwweDQwLDB4MjksMHg5MCwweDAzLDB4ZWMsMHgwMiB9fSwKKyB7MTYsIDB4ZjZhMCwgMCwgezB4YzksMHg0OCwweDMyLDB4NDAsMHgwZiwweGIwLDB4MTMsMHg5MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY2YjAsIDAsIHsweGUwLDB4MDEsMHhhYywweDQwLDB4ZmIsMHgwMCwweDFmLDB4YTIsMHgwZSwweGY4LDB4ODIsMHhmYywweDA4LDB4ZmYsMHgwMCwweDNmIH19LAorIHsxNiwgMHhmNmMwLCAwLCB7MHhjMCwweDBmLDB4ZmEsMHg0MywweDk2LDB4NDQsMHhkNCwweDkxLDB4M2YsMHg0MCwweDBkLDB4YzAsMHgwMywweGZhLDB4MDAsMHhmZiB9fSwKKyB7MTYsIDB4ZjZkMCwgMCwgezB4MDgsMHgyNSwweDgwLDB4MGUsMHhlMCwweDAzLDB4ZDAsMHgwMCwweGVhLDB4MDAsMHgzZiwweDgwLDB4MGYsMHhjMCwweDAzLDB4NzggfX0sCisgezE2LCAweGY2ZTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGUxLDB4MjAsMHgzYSwweDUwIH19LAorIHsxNiwgMHhmNmYwLCAwLCB7MHgwZiwweDkwLDB4MDMsMHgyYywweDAwLDB4ZWIsMHgwOCwweDc2LDB4MDUsMHgwZSwweGIwLDB4MjcsMHhlMCwweDEwLDB4ZWEsMHg0MCB9fSwKKyB7MTYsIDB4ZjcwMCwgMCwgezB4YjIsMHhjMCwweDBjLDB4YTQsMHg0MywweDI1LDB4MDAsMHhmOCwweDAwLDB4MzIsMHgwOCwweDBmLDB4ODAsMHg0MywweGU4LDB4MDAgfX0sCisgezE2LCAweGY3MTAsIDAsIHsweGQxLDB4MDgsMHhlZSwweDQwLDB4MGYsMHgwMCwweDAzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNzIwLCAwLCB7MHhjOCwweDA1LDB4MmMsMHgwMCwweDhiLDB4MDAsMHgyMiwweGQwLDB4MGIsMHg5MCwweDgyLDB4MmMsMHgwMCwweDg3LDB4NDAsMHgyMiB9fSwKKyB7MTYsIDB4ZjczMCwgMCwgezB4NjAsMHg4YiwweGIwLDB4MDIsMHhlMCwweDAwLDB4ZDgsMHg1MCwweDIyLDB4ZDAsMHgwYywweGEwLDB4MDMsMHg2YywweDAwLDB4YjMgfX0sCisgezE2LCAweGY3NDAsIDAsIHsweGM4LDB4M2UsMHhkMCwweDBiLDB4YjgsMHgwMiwweDI1LDB4MDgsMHg4YSwweDIwLDB4MmEsMHg4MCwweDhiLDB4YjgsMHg4MiwweGYyIH19LAorIHsxNiwgMHhmNzUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDY0LDB4MDAsMHhhMCwweGMwLDB4MjQsMHhjMCB9fSwKKyB7MTYsIDB4Zjc2MCwgMCwgezB4MDksMHgzOCwweDAyLDB4MmMsMHgwMCwweDgzLDB4MDMsMHgyMCwweDAwLDB4MTAsMHgzMCwweDIyLDB4Y2MsMHgwMCwweDgzLDB4MDAgfX0sCisgezE2LCAweGY3NzAsIDAsIHsweDYwLDB4MDgsMHgwYSwweDMwLDB4ODIsMHg0YywweDAwLDB4YjEsMHhjMCwweDAwLDB4ZDEsMHgwYiwweDM4LDB4MDIsMHg4NCwweDgwIH19LAorIHsxNiwgMHhmNzgwLCAwLCB7MHg4MiwweDAxLDB4MjAsMHg4MCwweDAzLDB4MzgsMHgwMiwweGY4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjc5MCwgMCwgezB4MjAsMHgwMSwweDE2LDB4NDAsMHg4NCwweDk4LDB4MjUsMHhlMCwweDBiLDB4N2EsMHgwMiwweGZhLDB4NDgsMHhhMywweDIwLDB4NjEgfX0sCisgezE2LCAweGY3YTAsIDAsIHsweDI0LDB4MGIsMHg3OSwweDAwLDB4Y2UsMHhjMCwweDkzLDB4YTQsMHgyMSwweGE2LDB4MGIsMHg3OCwweDEyLDB4ZGUsMHg4MCwweGI2IH19LAorIHsxNiwgMHhmN2IwLCAwLCB7MHg4MCwweDJkLDB4MjQsMHgwYiwweDRiLDB4MDIsMHgxYSwweDQwLDB4ODUsMHg4MSwweDIxLDB4NjAsMHgwYiwweDQ4LDB4MDIsMHhjOCB9fSwKKyB7MTYsIDB4ZjdjMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ZTIsMHhhMCwweGI0LDB4ZmUgfX0sCisgezE2LCAweGY3ZDAsIDAsIHsweDRiLDB4YjgsMHgwYiwweDBlLDB4MDAsMHhhMywweGIwLDB4MjQsMHhhOCwweDBlLDB4MWIsMHgwMiwweGNlLDB4YzEsMHhjMywweGMwIH19LAorIHsxNiwgMHhmN2UwLCAwLCB7MHgzMCwweDY4LDB4MmUsMHgzYSwweDQ3LDB4NGUsMHg4MCwweGYxLDB4ODAsMHgzMCwweDgwLDB4MGYsMHgyMiwweDgzLDB4ODAsMHgwMCB9fSwKKyB7MTYsIDB4ZjdmMCwgMCwgezB4YzIsMHgxMCwweDM4LDB4ODAsMHg0ZiwweDAwLDB4MDcsMHhkMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY4MDAsIDAsIHsweDQwLDB4MGQsMHhiYywweDEwLDB4ZmUsMHgwNCwweDNiLDB4YzEsMHgwNywweGYwLDB4MDMsMHgxYywweGM4LDB4ZGYsMHgyYSwweDBiIH19LAorIHsxNiwgMHhmODEwLCAwLCB7MHhjNCwweDhmLDB4ZDEsMHg0MywweGY4LDB4MDIsMHg3ZiwweDAwLDB4M2YsMHhjMCwweDBjLDB4ZjEsMHgwZiwweDNjLDB4MDAsMHhmMiB9fSwKKyB7MTYsIDB4ZjgyMCwgMCwgezB4MTEsMHgzZiwweDQxLDB4MWYsMHg1MiwweDAzLDB4YmMsMHgwZSwweGVkLDB4MTQsMHgzZiwweDQwLDB4MGYsMHhmOCwweDAzLDB4ZDAgfX0sCisgezE2LCAweGY4MzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZTQsMHgwMCwweGU5LDB4MDAsMHgzMiwweDgwIH19LAorIHsxNiwgMHhmODQwLCAwLCB7MHgwZSwweGJlLDB4NGIsMHg2ZiwweDAwLDB4Y2IsMHg4MiwweDdhLDB4YzAsMHgyYywweGIwLDB4MDMsMHgyYywweDAwLDB4YzksMHgwMCB9fSwKKyB7MTYsIDB4Zjg1MCwgMCwgezB4MzIsMHgwMCwweDJjLDB4MTAsMHgwMywweDJjLDB4MDgsMHhjMCwweDAwLDB4MjYsMHg0MCwweDZjLDB4OTAsMHgxMywweDI0LDB4MTIgfX0sCisgezE2LCAweGY4NjAsIDAsIHsweGM4LDB4MDEsMHgzZSwweDAwLDB4MGYsMHhiOCwweDBiLDB4MmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmODcwLCAwLCB7MHg0OCwweDExLDB4OTQsMHgwMCwweDhkLDB4MDAsMHgyMSwweDgwLDB4MGIsMHg3MCwweDgyLDB4M2MsMHgyMCwweDgzLDB4MzIsMHgyOSB9fSwKKyB7MTYsIDB4Zjg4MCwgMCwgezB4YzAsMHgwOCwweGYwLDB4MjAsMHgxNCwweDAwLDB4ODAsMHgwMCwweDIzLDB4MDAsMHgwOCwweDUwLDB4MDYsMHg5YywweDA0LDB4ZDcgfX0sCisgezE2LCAweGY4OTAsIDAsIHsweDAyLDB4MjgsMHg4MCwweDA4LDB4NjAsMHgwMiwweDA4LDB4MTAsMHg4NywweDAwLDB4MmQsMHhjMCwweDBiLDB4NDAsMHgwMiwweDEyIH19LAorIHsxNiwgMHhmOGEwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4MDAsMHhhNywweDgwLDB4MjEsMHhlMCB9fSwKKyB7MTYsIDB4ZjhiMCwgMCwgezB4MGIsMHg1YywweDEyLDB4MWUsMHgwNCwweDg3LDB4ODIsMHgwZCwweGEwLDB4MDksMHg3OCwweDE2LDB4MDIsMHgwMCwweGI0LDB4ODAgfX0sCisgezE2LCAweGY4YzAsIDAsIHsweDI1LDB4ZTAsMHgwYiwweDc4LDB4MDIsMHg5ZSwweDAwLDB4ODQsMHg4MCwweDIxLDB4MjIsMHgwOCwweDA4LDB4MDIsMHgxMiwweDAxIH19LAorIHsxNiwgMHhmOGQwLCAwLCB7MHg4NCwweGMwLDB4MmQsMHgyMCwweDBiLDB4MDgsMHgwMiwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjhlMCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MDAsMHg4MywweDQyLDB4YTAsMHhkOCwweDBiLDB4MzQsMHg4MiwweDBjLDB4MDAsMHhhMywweDAyLDB4MjAgfX0sCisgezE2LCAweGY4ZjAsIDAsIHsweGUwLDB4MDgsMHhiMCwweDAyLDB4MGMsMHg4OCwweGIzLDB4MjEsMHgyNCwweGQ4LDB4MGIsMHgzZSwweDAyLDB4OGMsMHgwMCwweDkzIH19LAorIHsxNiwgMHhmOTAwLCAwLCB7MHgwOCwweDI4LDB4YzAsMHgwOCwweDM4LDB4MDIsMHgyYywweDA1LDB4OGIsMHgwMSwweDJjLDB4ZTAsMHgwYiwweDMwLDB4MDIsMHgxMiB9fSwKKyB7MTYsIDB4ZjkxMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZWUsMHgwMCwweDMzLDB4OTAgfX0sCisgezE2LCAweGY5MjAsIDAsIHsweDBmLDB4YTAsMHgwYiwweDY4LDB4MDAsMHhjYSwweDAxLDB4N2YsMHhhOCwweDBjLDB4YWEsMHgwMywweDNhLDB4MTIsMHhmZSwweGUyIH19LAorIHsxNiwgMHhmOTMwLCAwLCB7MHgzNywweGIwLDB4MGYsMHhlZSwweDAyLDB4MTgsMHgwMCwweGNhLDB4NDAsMHgzNiwweGEwLDB4MDgsMHhhMCwweDhiLDB4MjgsMHgwMCB9fSwKKyB7MTYsIDB4Zjk0MCwgMCwgezB4Y2EsMHg4MSwweDJlLDB4YTAsMHgwZiwweGUwLDB4MDMsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY5NTAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgwOCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhhMiwweDAyLDB4ZDgsMHg0MCwweDNlIH19LAorIHsxNiwgMHhmOTYwLCAwLCB7MHgwOCwweDBmLDB4ODAsMHgxMywweGUwLDB4NDAsMHg0OCwweDQwLDB4YjgsMHgwNCwweDA4LDB4ODQsMHgwMywweDYxLDB4MDAsMHhmYyB9fSwKKyB7MTYsIDB4Zjk3MCwgMCwgezB4MDAsMHgzZiwweDAwLDB4NGYsMHhjMCwweDAzLDB4ZjEsMHgwMCwweGZjLDB4MDAsMHgzZiwweDA0LDB4MGYsMHhjMCwweDAzLDB4ZDIgfX0sCisgezE2LCAweGY5ODAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4YzQsMHgwMCwweGY5LDB4MDAsMHgzMCwweDUwIH19LAorIHsxNiwgMHhmOTkwLCAwLCB7MHg0YywweGI5LDB4MDMsMHg2YywweDE4LDB4ZjksMHgwMCwweDM2LDB4NDAsMHgwZSwweDljLDB4MjMsMHhhNCwweDAyLDB4NDEsMHgwMCB9fSwKKyB7MTYsIDB4ZjlhMCwgMCwgezB4YjIsMHg0NCwweDBlLDB4OWEsMHgwMywweGE2LDB4ODAsMHhjOSwweDAwLDB4M2EsMHg2MCwweDBhLDB4OTAsMHgwMywweGE0LDB4ODAgfX0sCisgezE2LCAweGY5YjAsIDAsIHsweGM5LDB4MDAsMHgzNCwweDQwLDB4MGMsMHg5MCwweDAzLDB4YzIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOWMwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4NDAsMHgyMiwweDc4LDB4MDgsMHg5NCwweDAyLDB4ZTQsMHgxMCwweGI5LDB4MDAsMHgzYyB9fSwKKyB7MTYsIDB4ZjlkMCwgMCwgezB4NjIsMHgxOCwweDk0LDB4ODIsMHhhNCwweDAwLDB4ODksMHhjOCwweDIyLDB4NzAsMHg0OCwweDFlLDB4MDEsMHg2NywweDgwLDB4ZDEgfX0sCisgezE2LCAweGY5ZTAsIDAsIHsweDAwLDB4YmMsMHg0MiwweDA4LDB4MTAsMHgwMiwweDI1LDB4MjAsMHg4OSwweDAyLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweGUwIH19LAorIHsxNiwgMHhmOWYwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDAsMHhiMSwweDI4LDB4MjIsMHg0MCB9fSwKKyB7MTYsIDB4ZmEwMCwgMCwgezB4MDgsMHhiMCwweDgyLDB4NjQsMHgwNCwweDM5LDB4NDEsMHgyZSwweDQ4LDB4MGEsMHg5MCwweDAyLDB4MDQsMHgxOCwweGE5LDB4MjAgfX0sCisgezE2LCAweGZhMTAsIDAsIHsweDIyLDB4NDIsMHg0YSwweDkwLDB4MDIsMHgyYywweDA0LDB4ODksMHgwNCwweDJiLDB4NDgsMHgwMiwweGQwLDB4MDIsMHhiNCwweDBhIH19LAorIHsxNiwgMHhmYTIwLCAwLCB7MHg4ZCwweDgwLDB4MjMsMHhjMCwweDQ4LDB4ZDAsMHgwMiwweGM2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmEzMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHg4MSwweDIwLDB4YTAsMHg0OCwweDI4LDB4MTAsMHgwMiwweGM0LDB4MDAsMHhiMSwweDI0LDB4MmEgfX0sCisgezE2LCAweGZhNDAsIDAsIHsweDQwLDB4MDgsMHgxMiwweDQyLDB4ODUsMHg4MCwweGExLDB4MjAsMHhhMCwweDQ4LDB4MDgsMHg5MCwweDAyLDB4NDQsMHgwMCwweDk1IH19LAorIHsxNiwgMHhmYTUwLCAwLCB7MHgyYywweDJkLDB4NWEsMHgwYSwweDcyLDB4ODIsMHgxNCwweGEwLDB4ODUsMHhhOCwweDIxLDB4NGEsMHgwOCwweDUyLDB4ODIsMHhjMiB9fSwKKyB7MTYsIDB4ZmE2MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg0MSwweDQwLDB4ZjgsMHg1MCwweDMyLDB4MDAgfX0sCisgezE2LCAweGZhNzAsIDAsIHsweDhjLDB4MDUsMHgwMywweDYxLDB4NDAsMHhmOCwweDUxLDB4MmUsMHgwMCwweDBhLDB4ODUsMHgwMiwweDIwLDB4MDAsMHhlOCwweDUwIH19LAorIHsxNiwgMHhmYTgwLCAwLCB7MHgzMiwweDE0LDB4MDYsMHg4NSwweDE3LDB4YTAsMHgwMCwweGM4LDB4MjAsMHgzYSwweDA4LDB4MGUsMHg4MiwweDAzLDB4YTAsMHg4MCB9fSwKKyB7MTYsIDB4ZmE5MCwgMCwgezB4YzgsMHgyMCwweDMyLDB4MDgsMHgyYywweGMyLDB4MDMsMHhlZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZhYTAsIDAsIHsweDk4LDB4MTksMHhmNCwweDQwLDB4ZmYsMHgxMCwweDNmLDB4NDQsMHgwYiwweGIwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgxMCwweDNkIH19LAorIHsxNiwgMHhmYWIwLCAwLCB7MHg0MCwweDBmLDB4ZDEsMHgwMywweGY0LDB4NTgsMHg5ZCwweDEwLDB4M2YsMHg0NCwweDRmLDB4ZDAsMHgwMywweGQ1LDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4ZmFjMCwgMCwgezB4MDAsMHgzZSwweDQwLDB4OGQsMHg5MCwweDAzLDB4ZTQsMHhiOCwweGY5LDB4MjgsMHhiYSwweDZhLDB4MGYsMHg5MCwweDAzLDB4ZTYgfX0sCisgezE2LCAweGZhZDAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4ZTcsMHgwMCwweGZkLDB4ODgsMHgzZSwweDYwIH19LAorIHsxNiwgMHhmYWUwLCAwLCB7MHg4ZiwweGQwLDB4MDMsMHgyNCwweDAxLDB4ZGQsMHg4MCwweDczLDB4NDAsMHgwZiwweGQ4LDB4MDMsMHhhNiwweDA0LDB4Y2QsMHhhMiB9fSwKKyB7MTYsIDB4ZmFmMCwgMCwgezB4MzMsMHg3OCwweDFjLDB4ZDAsMHgwMywweDM0LDB4MDEsMHhmNSwweDg4LDB4M2IsMHg2OCwweDBjLDB4ZGEsMHg0NywweDM3LDB4ODAgfX0sCisgezE2LCAweGZiMDAsIDAsIHsweGNkLDB4ODgsMHgzMiwweDYyLDB4MGMsMHhkYSwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYjEwLCAwLCB7MHgzOCwweDEwLDB4ZTMsMHg4MCwweGI4LDB4ODAsMHgyZSwweDE0LDB4MGIsMHgwYSwweDgyLDB4MjIsMHg4MCwweGI4LDB4ZjgsMHhhMiB9fSwKKyB7MTYsIDB4ZmIyMCwgMCwgezB4MDAsMHgwYiwweDhmLDB4YTMsMHg4MywweGUwLDB4ODgsMHhlYiwweDIyLDB4YTksMHgwOCwweDg4LDB4MTIsMHhhMCwweDA1LDB4YjggfX0sCisgezE2LCAweGZiMzAsIDAsIHsweDAwLDB4MmEsMHhhYSwweDg4LDB4ODAsMHgxMywweDYyLDB4ODIsMHg4OCwweDgwLDB4MjIsMHgyOCwweDg4LDB4YTQsMHgwMiwweDBlIH19LAorIHsxNiwgMHhmYjQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM1LDB4MDAsMHhiMSwweDBhLDB4MmMsMHg0MSB9fSwKKyB7MTYsIDB4ZmI1MCwgMCwgezB4MGIsMHgxMCwweDA2LDB4MDQsMHgyMCwweGExLDB4MDAsMHgwMCwweDQwLDB4OGIsMHgxMCwweDQ2LDB4YzQsMHgwMSwweDkxLDB4MTEgfX0sCisgezE2LCAweGZiNjAsIDAsIHsweDI0LDB4NTgsMHg2OCwweDkwLDB4YzIsMHgwNCwweDAwLDB4YjEsMHgwMCwweGE4LDB4NTAsMHgwOSwweDE0LDB4MGEsMHgwNSwweDk1IH19LAorIHsxNiwgMHhmYjcwLCAwLCB7MHhhMSwweDA4LDB4YTAsMHg0MiwweDI4LDB4MTEsMHgwYSwweDAyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmI4MCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MTgsMHhiOSwweDIwLDB4MmUsMHg1MCwweDBiLDB4OTAsMHgwNiwweDI0LDB4MDksMHhiOSwweDAwLDB4MjIgfX0sCisgezE2LCAweGZiOTAsIDAsIHsweDQwLDB4OGIsMHg5MSwweDAyLDB4ODQsMHgwMCwweDk5LDB4NjQsMHgyNCwweDQwLDB4NTgsMHg5MCwweDAyLDB4YTQsMHgyMCwweGJiIH19LAorIHsxNiwgMHhmYmEwLCAwLCB7MHgwMCwweDJhLDB4NDAsMHgwOSwweGIwLDB4MDIsMHgwNSwweDAxLDB4YTksMHgwMCwweDIyLDB4NDAsMHg4OCwweDkyLDB4MDIsMHgwNiB9fSwKKyB7MTYsIDB4ZmJiMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNiwweDAwLDB4ZjksMHg0MCwweDNlLDB4NDAgfX0sCisgezE2LCAweGZiYzAsIDAsIHsweDRmLDB4OTgsMHgwYiwweDI0LDB4ODAsMHhkOSwweDAwLDB4MjIsMHg3MiwweDBiLDB4OTgsMHgwMywweGU0LDB4ODQsMHhkOSwweDAwIH19LAorIHsxNiwgMHhmYmQwLCAwLCB7MHhiNiwweDcwLDB4MDgsMHg5OSwweDAyLDB4MjQsMHgwMCwweGI5LDB4MDAsMHgyYSwweDQwLDB4MGQsMHg5NCwweGMyLDB4MjUsMHgwMCB9fSwKKyB7MTYsIDB4ZmJlMCwgMCwgezB4YTksMHgwMCwweDIyLDB4NDAsMHgwYywweDk0LDB4MDMsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZiZjAsIDAsIHsweDI4LDB4MDEsMHhhNiwweDgwLDB4ZjksMHgwOCwweDNlLDB4YzAsMHgwZiwweDkxLDB4NDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlIH19LAorIHsxNiwgMHhmYzAwLCAwLCB7MHg1MCwweDBmLDB4OTgsMHgwMywweGE1LDB4MDAsMHhlOSwweDAwLDB4M2EsMHg2NCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4ZmMxMCwgMCwgezB4MDAsMHgzYywweDQwLDB4NmUsMHg5MCwweDAzLDB4ZTQsMHgyMCwweGQ5LDB4MDAsMHgzYywweDQwLDB4MGYsMHg5MCwweDgyLDB4Y2EgfX0sCisgezE2LCAweGZjMjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGU4LDB4MDAsMHgzZSwweDAwIH19LAorIHsxNiwgMHhmYzMwLCAwLCB7MHg0ZiwweDg0LDB4MGIsMHgyMCwweDAwLDB4ZjgsMHgwMCwweDM2LDB4MDEsMHgwZSwweDgwLDB4MDMsMHhlMCwweDAwLDB4YzgsMHg0MCB9fSwKKyB7MTYsIDB4ZmM0MCwgMCwgezB4MzIsMHgxMCwweDJkLDB4ODAsMHgwMywweGUwLDB4NTQsMHhjOCwweDAwLDB4MzYsMHgxMCwweDBmLDB4MDQsMHg4MywweGUwLDB4NTAgfX0sCisgezE2LCAweGZjNTAsIDAsIHsweGQ4LDB4MDQsMHgxMiwweDAwLDB4MGMsMHgwMCwweDBiLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYzYwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMCwweDhlLDB4NDIsMHgyZSwweGEyLDB4OGIsMHhlYSwweDAyLDB4MjgsMHgwOCwweGJlLDB4ODksMHgzNyB9fSwKKyB7MTYsIDB4ZmM3MCwgMCwgezB4ODQsMHg0OCwweGUwLDB4MTIsMHgyOCwweDAyLDB4OGUsMHhjMCwweDIzLDB4YjAsMHg0ZCwweDYwLDB4NjIsMHhmOCwweDAwLDB4ODYgfX0sCisgezE2LCAweGZjODAsIDAsIHsweDAwLDB4MjMsMHg4MCwweDBiLDB4ZTAsMHgwMiwweGY4LDB4MDAsMHgwZSwweDAwLDB4MjIsMHg4MCwweDA4LDB4ZTQsMHgwMiwweDBhIH19LAorIHsxNiwgMHhmYzkwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHhhMywweDAwLDB4MmMsMHg4MCB9fSwKKyB7MTYsIDB4ZmNhMCwgMCwgezB4MWIsMHhiMCwweDlhLDB4NGMsMHgxMCwweDliLDB4ODAsMHgyNCwweGMwLDB4MGEsMHgzMCwweDAwLDB4MGMsMHgwNCwweDliLDB4MjAgfX0sCisgezE2LCAweGZjYjAsIDAsIHsweDIwLDB4ZDYsMHgwOCwweDMwLDB4MDIsMHg4ZSwweDA4LDB4YTMsMHgwNCwweDI0LDB4YzAsMHgxOSwweDM0LDB4MDIsMHhjNywweDA3IH19LAorIHsxNiwgMHhmY2MwLCAwLCB7MHhhYSwweGE0LDB4YTAsMHhjMCwweDQ4LDB4MzQsMHgwMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmNkMCwgMCwgezB4YTAsMHgwMSwweDBlLDB4MDAsMHg4NywweDAwLDB4MmQsMHhjMCwweDBiLDB4NDAsMHgwMiwweDVjLDB4NDAsMHhiMywweDE0LDB4MjUgfX0sCisgezE2LCAweGZjZTAsIDAsIHsweGUwLDB4MDgsMHg3YSwweDAyLDB4OWUsMHhjMCwweDkyLDB4NDAsMHhhMCwweDAwLDB4NDksMHg2MCwweDAyLDB4Y2UsMHgwMiwweDhlIH19LAorIHsxNiwgMHhmY2YwLCAwLCB7MHgwMSwweDIxLDB4YzAsMHg4YiwweDU0LDB4MDIsMHhjNCwweDA4LDB4ODYsMHg0MCwweDIxLDB4YzgsMHg4OCwweDEwLDB4MDIsMHgyOCB9fSwKKyB7MTYsIDB4ZmQwMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweGMwLDB4ZTQsMHg4MCwweDNkLDB4ZTIgfX0sCisgezE2LCAweGZkMTAsIDAsIHsweDBmLDB4NTgsMHgwMywweDVlLDB4OTAsMHhiNiwweGEyLDB4MzUsMHhlMCwweDBlLDB4N2MsMHgyMywweDFjLDB4MDAsMHhkNiwweDgwIH19LAorIHsxNiwgMHhmZDIwLCAwLCB7MHgzMSwweGUwLDB4ODQsMHg3OCwweDAzLDB4ZGUsMHgwMCwweGM3LDB4ODAsMHgzNSwweGUwLDB4MGYsMHg2OCwweDAzLDB4ZGUsMHgwMCB9fSwKKyB7MTYsIDB4ZmQzMCwgMCwgezB4ZTMsMHg4MCwweDMzLDB4ZTgsMHgyYywweDc4LDB4MDMsMHgyYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZkNDAsIDAsIHsweDA4LDB4MWQsMHhhYywweDkwLDB4ZmEsMHgwMCwweDdlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhhYywweDAxLDB4ZmIsMHgwMCwweDNjIH19LAorIHsxNiwgMHhmZDUwLCAwLCB7MHg0MSwweDBmLDB4MzAsMHgwYiwweDJkLDB4MDQsMHhlYiwweDAxLDB4M2UsMHhjMCwweDBlLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmYSB9fSwKKyB7MTYsIDB4ZmQ2MCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGYsMHg4MCwweDAzLDB4ZWMsMHgwMCwweGU5LDB4NjAsMHgzZSwweGU0LDB4MGYsMHg5MCwweDAzLDB4YzIgfX0sCisgezE2LCAweGZkNzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHgyMCwweGZmLDB4OTAsMHgzZSwweDIwIH19LAorIHsxNiwgMHhmZDgwLCAwLCB7MHgwYywweGE5LDB4MDcsMHgyZSwweDQ0LDB4YzksMHg5MSwweDMwLDB4YTAsMHgwYywweGI4LDB4NjMsMHgyZiwweDQ0LDB4Y2IsMHhhMSB9fSwKKyB7MTYsIDB4ZmQ5MCwgMCwgezB4MzYsMHgyMCwweDhjLDB4ZjgsMHgwMywweDM2LDB4MDAsMHhjZiwweDgyLDB4MzMsMHhlMCwweDBjLDB4ZjgsMHgyMywweDJlLDB4MDAgfX0sCisgezE2LCAweGZkYTAsIDAsIHsweGNlLDB4YzAsMHgzYiwweGUwLDB4MGMsMHg2OCwweDAzLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmZGIwLCAwLCB7MHhhOCwweDExLDB4OWMsMHg4NCwweGIzLDB4NTQsMHgyYywweGY0LDB4MjgsMHhiYSwweDhhLDB4M2UsMHg0MCwweDgxLDB4YTAsMHgyOSB9fSwKKyB7MTYsIDB4ZmRjMCwgMCwgezB4YjAsMHgwZiwweDc4LDB4NDIsMHhhZSwweDAwLDB4ODMsMHg5MCwweDMzLDB4ZTgsMHgwZCwweGUxLDB4MDAsMHg4NSwweDQwLDB4ODIgfX0sCisgezE2LCAweGZkZDAsIDAsIHsweDI0LDB4MjMsMHhjNiwweDBkLDB4NzEsMHgwMywweDVlLDB4ZTAsMHg4NywweDAwLDB4MmIsMHhjMSwweDBkLDB4NDQsMHgwMiwweDJhIH19LAorIHsxNiwgMHhmZGUwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4MDgsMHgzNSwweDE0LDB4NmQsMHhjMCB9fSwKKyB7MTYsIDB4ZmRmMCwgMCwgezB4ODgsMHg3MiwweDMyLDB4NWMsMHg4MCwweDg0LDB4MzAsMHgyYiwweDg4LDB4MGEsMHg3MCwweDQyLDB4NWMsMHhhOCwweDkxLDB4MDggfX0sCisgezE2LCAweGZlMDAsIDAsIHsweDI1LDB4YzgsMHgwOSwweDcwLDB4MDIsMHg0YywweDIyLDB4ODMsMHgwYSwweDYxLDB4YzAsMHgwOSwweDIwLDB4MDIsMHgwNCwweDAwIH19LAorIHsxNiwgMHhmZTEwLCAwLCB7MHg4NywweDAwLDB4MjEsMHhjMCwweDA4LDB4NjAsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmUyMCwgMCwgezB4MjAsMHgxNCwweGNjLDB4MTAsMHhiMywweDg1LDB4NmMsMHhkYywweDA4LDB4MzQsMHgwMiwweDRkLDB4MjEsMHg4MSwweDAwLDB4MjggfX0sCisgezE2LCAweGZlMzAsIDAsIHsweDAyLDB4NGEsMHgzMSwweDEyLDB4ZWYsMHgwYywweDkxLDB4YzIsMHgyMCwweGYwLDB4MDgsMHgzMCwweDQyLDB4OGUsMHgwMCwweDgyIH19LAorIHsxNiwgMHhmZTQwLCAwLCB7MHg0MCwweDIwLDB4YzgsMHgxOSwweDI4LDB4MDIsMHgyMiwweDgxLDB4ODMsMHhjMCwweDI4LDB4ZDQsMHgwOSwweDAwLDB4MGEsMHgwOCB9fSwKKyB7MTYsIDB4ZmU1MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAwLDB4ZmIsMHhhMCwweDNlLDB4YzAgfX0sCisgezE2LCAweGZlNjAsIDAsIHsweDhjLDB4MDQsMHgxMiwweDdkLDB4MTAsMHhjZiwweDAyLDB4M2EsMHg1MCwweDA4LDB4YzAsMHg0MiwweDdkLDB4NTIsMHg1OCwweDAxIH19LAorIHsxNiwgMHhmZTcwLCAwLCB7MHgzNiwweDIyLDB4NjksMHhkMCwweDEzLDB4MmEsMHgwMCwweDg4LDB4ODIsMHgzMiwweGYwLDB4MDksMHhiOCwweDgyLDB4MmYsMHgwMCB9fSwKKyB7MTYsIDB4ZmU4MCwgMCwgezB4YzksMHhjOCwweDIzLDB4YzAsMHgwYywweDhhLDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZlOTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4YjksMHg0MCwweDNjLDB4NTAsMHg0ZiwweDgwLDB4MjMsMHhhYywweDEyLDB4ZmIsMHgwMCwweDJhIH19LAorIHsxNiwgMHhmZWEwLCAwLCB7MHhjMCwweDZkLDB4ODAsMHgxMywweGFjLDB4MDAsMHhlOCwweDA0LDB4YmEsMHgxMCwweDBmLDB4ODAsMHgwMywweGU4LDB4MDAsMHhmMyB9fSwKKyB7MTYsIDB4ZmViMCwgMCwgezB4MDgsMHgzYywweDgwLDB4MGYsMHg5MCwweDgzLDB4ZWMsMHgwNCwweGY5LDB4NjAsMHgyYywweGMyLDB4MGYsMHg4MCwweDgzLDB4ZTAgfX0sCisgezE2LCAweGZlYzAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZGMsMHgwMCwweGVjLDB4MmMsMHgzZiwweGYwIH19LAorIHsxNiwgMHhmZWQwLCAwLCB7MHg4YywweGZhLDB4OGIsMHhiYywweDAwLDB4ZmUsMHgwMCwweDNmLDB4MDAsMHgwZiwweDc5LDB4MDMsMHgzYywweDAwLDB4Y2UsMHgwOCB9fSwKKyB7MTYsIDB4ZmVlMCwgMCwgezB4MGIsMHhjMiwweDBjLDB4ZjAsMHgwMywweGJjLDB4MDAsMHhmYywweDAwLDB4MzMsMHg0MCwweDhjLDB4N2EsMHgwMywweDNhLDB4MDAgfX0sCisgezE2LCAweGZlZjAsIDAsIHsweGM1LDB4MDAsMHgzMywweGMwLDB4NGMsMHhjOCwweDAzLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmZjAwLCAwLCB7MHg4MSwweDA0LDB4NmMsMHgwMCwweDg4LDB4YzAsMHgyZSwweGUwLDB4MDgsMHg5NCwweDAyLDB4MmMsMHgwMCwweGJiLDB4ODAsMHg2NiB9fSwKKyB7MTYsIDB4ZmYxMCwgMCwgezB4MzAsMHgxNiwweGIwLDB4MDIsMHgyYywweDAwLDB4ZGEsMHg0YywweDIyLDB4ZjAsMHgwOCwweGYwLDB4MDMsMHhlYywweDAwLDB4ZWIgfX0sCisgezE2LCAweGZmMjAsIDAsIHsweGMwLDB4MjIsMHg2OCwweDAwLDB4OTQsMHgwMiwweDJjLDB4MDIsMHhhOSwweDgwLDB4MjIsMHhjMCwweDA4LDB4MGMsMHgwMiwweGEwIH19LAorIHsxNiwgMHhmZjMwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHhhYiwweDA0LDB4MmUsMHhjMCB9fSwKKyB7MTYsIDB4ZmY0MCwgMCwgezB4MDgsMHhhNCwweDA2LDB4MmMsMHgwNCwweGFiLDB4MTAsMHgyZSwweDYwLDB4NDMsMHg4MCwweDgyLDB4NmMsMHgwMSwweDgxLDB4ODAgfX0sCisgezE2LCAweGZmNTAsIDAsIHsweDI4LDB4MGEsMHgwOCwweDkxLDB4MDAsMHhlMCwweDAwLDB4YjgsMHg4MCwweDAyLDB4ZTAsMHgwOCwweDgwLDB4MDIsMHgyZCwweDgwIH19LAorIHsxNiwgMHhmZjYwLCAwLCB7MHg4OCwweGMwLDB4MjIsMHhjMCwweDA4LDB4ODIsMHgwMiwweDIwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmY3MCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDAsMHg4MCwweDQ0LDB4MmMsMHhjOCwweDI4LDB4YTAsMHgyMiwweDBjLDB4MDQsMHhiMywweDI2LDB4MmMgfX0sCisgezE2LCAweGZmODAsIDAsIHsweGM4LDB4ODgsMHgwMSwweDA2LDB4MGMsMHhlMCwweDkxLDB4MjAsMHgyMCwweDBjLDB4MzgsMHgwNCwweDIyLDB4YzAsMHg0OCwweGEzIH19LAorIHsxNiwgMHhmZjkwLCAwLCB7MHg0MiwweGEwLDB4ODEsMHgwOCwweDAwLDB4MDIsMHgwYywweDgwLDB4ODEsMHgwMCwweDIwLDB4YzAsMHgyOCwweDAwLDB4MDIsMHg4MiB9fSwKKyB7MTYsIDB4ZmZhMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg3YywweDAwLDB4YTksMHg0MCwweDNlLDB4NDQgfX0sCisgezE2LCAweGZmYjAsIDAsIHsweDA4LDB4YjEsMHgwMywweDJjLDB4NDAsMHhlYSwweDQ5LDB4MmUsMHgwZCwweDBiLDB4YjYsMHgxMywweDdkLDB4ODAsMHhjOSwweDQwIH19LAorIHsxNiwgMHhmZmMwLCAwLCB7MHhiYSwweGQwLDB4MGMsMHhiNCwweDAzLDB4YWMsMHgwMCwweGY4LDB4MDAsMHgzMiwweDQwLDB4MGMsMHg4MCwweDBiLDB4MjAsMHgwMCB9fSwKKyB7MTYsIDB4ZmZkMCwgMCwgezB4YzUsMHgwMCwweGIyLDB4YzAsMHgwYywweDgwLDB4MDMsMHgwMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZmZTAsIDAsIHsweGEwLDB4MWQsMHhmYywweDA0LDB4ZmMsMHgwMCwweDNkLDB4YzUsMHgwYiwweGYxLDB4MDAsMHhmYywweGQwLDB4NzcsMHgyOSwweDM3IH19LAorIHsxNiwgMHhmZmYwLCAwLCB7MHgwYywweDhlLDB4NzQsMHgwMywweGZjLDB4MDgsMHhmZCwweDY5LDB4M2YsMHhkOCwweDBmLDB4ZjAsMHgwMywweGJjLDB4MDAsMHhlZiB9fSwKKyB7MTYsIDB4ODAxMCwgMCwgezB4MDAsMHgzZiwweDQwLDB4MDcsMHhjMCwweDAzLDB4ZjAsMHg0MCwweGZkLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhjMCwweDAzLDB4ZTggfX0sCisgezE2LCAweDgwMjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDBkLDB4ZmMsMHhjMCwweGRjLDB4ODAsMHgzZiwweGM4IH19LAorIHsxNiwgMHg4MDMwLCAwLCB7MHgwZiwweDQ4LDB4MDMsMHg3YywweDIwLDB4ZmYsMHg2OCwweDM3LDB4ZTAsMHgwZSwweGYxLDB4MDMsMHg5YywweDAwLDB4YmYsMHgyMCB9fSwKKyB7MTYsIDB4ODA0MCwgMCwgezB4MzcsMHhlMCwweDBjLDB4YzgsMHgxMywweDNjLDB4NDAsMHhlZCwweDYwLDB4YmIsMHhlNCwweDJjLDB4NDMsMHg0YiwweDcwLDB4YTAgfX0sCisgezE2LCAweDgwNTAsIDAsIHsweGNjLDB4MmMsMHgzZiwweDA5LDB4MGYsMHhkOCwweDQzLDB4NzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MDYwLCAwLCB7MHg4MCwweDAwLDB4ZWQsMHhjMCwweGI4LDB4ODAsMHgyZiwweGY0LDB4MGYsMHg5OCwweDAyLDB4M2YsMHgwMCwweGJmLDB4NDIsMHgyMiB9fSwKKyB7MTYsIDB4ODA3MCwgMCwgezB4Y2EsMHgwOCwweGY0LDB4MDIsMHgzZSwweDAwLDB4YmYsMHhkMCwweDIyLDB4NjAsMHgyOCwweDg4LDB4MGEsMHgzZCwweDgwLDB4OGQgfX0sCisgezE2LCAweDgwODAsIDAsIHsweDQwLDB4MjIsMHhjOCwweDA4LDB4ODEsMHgwMiwweDIxLDB4ODAsMHhkYiwweGMwLDB4MmUsMHhhNSwweDBiLDB4OTgsMHg0MiwweDIwIH19LAorIHsxNiwgMHg4MDkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MTAsMHhiMCwweDAwLDB4MmMsMHhjMCB9fSwKKyB7MTYsIDB4ODBhMCwgMCwgezB4MGIsMHgyMCwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MjAsMHgyNiwweGMwLDB4OGEsMHgzNiwweDEyLDB4OGMsMHg0MSwweGIzLDB4MDAgfX0sCisgezE2LCAweDgwYjAsIDAsIHsweDJlLDB4NDAsMHgwOCwweDAwLDB4MDIsMHgwZCwweDgxLDB4YTEsMHgzMCwweDIyLDB4YzgsMHg4OSwweGEyLDB4NDIsMHgwOCwweDIwIH19LAorIHsxNiwgMHg4MGMwLCAwLCB7MHhiMCwweDAwLDB4MmMsMHg0MCwweDBiLDB4OTAsMHgyNiwweDYyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODBkMCwgMCwgezB4YzAsMHgxNSwweGFjLDB4MDAsMHhiOCwweDUwLDB4MmUsMHhjMCwweDBhLDB4OTAsMHgwMiwweGFjLDB4MDAsMHhiYiwweDAwLDB4MjIgfX0sCisgezE2LCAweDgwZTAsIDAsIHsweGMwLDB4MDgsMHhiMCwweDYyLDB4MmMsMHgxMCwweGJiLDB4MDQsMHgyYSwweGYwLDB4NGEsMHg4OCwweDAyLDB4MGMsMHgwMCwweDgxIH19LAorIHsxNiwgMHg4MGYwLCAwLCB7MHgwMCwweDIyLDB4YzAsMHgwOSwweGI4LDB4ODAsMHgyNiwweDAwLDB4YjgsMHg4MCwweDJlLDB4MjEsMHgwYiwweDkwLDB4MDIsMHgzMCB9fSwKKyB7MTYsIDB4ODEwMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTUsMHhlYywweDAwLDB4ZDgsMHhjMCwweDNlLDB4YzAgfX0sCisgezE2LCAweDgxMTAsIDAsIHsweDBiLDB4ODAsMHgwMywweGVjLDB4MDAsMHhmYiwweDAwLDB4MzYsMHg4MCwweDBlLDB4YjAsMHgwMywweGFjLDB4MDAsMHhmYiwweDAwIH19LAorIHsxNiwgMHg4MTIwLCAwLCB7MHgzYywweGUwLDB4MGMsMHgwYywweDAzLDB4MmMsMHgwMCwweGU5LDB4MDAsMHgxMCwweGMwLDB4MGMsMHg4YywweDAzLDB4MDYsMHgwMCB9fSwKKyB7MTYsIDB4ODEzMCwgMCwgezB4ZjgsMHhjZCwweDNlLDB4MjIsMHgwZiwweDE4LDB4MDMsMHg0MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgxNDAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4ZmYsMHgwMCwweDNlLDB4YzAsMHgwZiwweGYwLDB4MDMsMHg3YywweDAwLDB4ZjcsMHgwMiwweDNmIH19LAorIHsxNiwgMHg4MTUwLCAwLCB7MHhlNCwweDBmLDB4NzAsMHgwMywweDdjLDB4MDQsMHhiNywweDAwLDB4MzcsMHg0MCwweDBkLDB4YzAsMHgwMywweGZjLDB4MDAsMHhmZCB9fSwKKyB7MTYsIDB4ODE2MCwgMCwgezB4MDAsMHgzNywweGQwLDB4MGUsMHhjMCwweDQzLDB4ZjQsMHgwMCwweGRmLDB4MDAsMHgzZiwweDgwLDB4OGYsMHhkYSwweDAzLDB4ZjggfX0sCisgezE2LCAweDgxNzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGY4LDB4MTAsMHgzYSwweGMwIH19LAorIHsxNiwgMHg4MTgwLCAwLCB7MHg2ZCwweGE2LDB4MTMsMHhlYywweDAwLDB4Y2IsMHgwMCwweDNhLDB4ZDAsMHgwZiwweGIwLDB4MDMsMHgyYywweDEwLDB4ZGIsMHgxMCB9fSwKKyB7MTYsIDB4ODE5MCwgMCwgezB4MzYsMHhkOCwweDBkLDB4ODQsMHgwMywweGVjLDB4MDYsMHhjOSwweDA4LDB4M2EsMHhjMCwweDBlLDB4ODYsMHgwMywweGE4LDB4NjAgfX0sCisgezE2LCAweDgxYTAsIDAsIHsweGY4LDB4MjAsMHgzYSwweDQwLDB4MGMsMHg5MCwweDAzLDB4NTQsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MWIwLCAwLCB7MHg5OCwweDA1LDB4M2MsMHgwMCwweGJiLDB4NDAsMHgyMywweGQwLDB4MDgsMHgzMCwweDAyLDB4M2UsMHgxMCwweGFmLDB4MDAsMHgyMCB9fSwKKyB7MTYsIDB4ODFjMCwgMCwgezB4YzAsMHgwYiwweGYwLDB4MDIsMHgzYywweDAwLDB4OGYsMHg1MCwweDJlLDB4YzgsMHgwNiwweDhhLDB4MDIsMHhmYywweDAwLDB4OGQgfX0sCisgezE2LCAweDgxZDAsIDAsIHsweDI0LDB4ODIsMHhkNiwweDA4LDB4MzIsMHgwMiwweDJkLDB4MDgsMHgzYSwweDQwLDB4MjIsMHg4MCwweDBkLDB4OTAsMHgwMywweDYyIH19LAorIHsxNiwgMHg4MWUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgwNSwweDRjLDB4MDAsMHhiMCwweDIwLDB4MjgsMHhjMiB9fSwKKyB7MTYsIDB4ODFmMCwgMCwgezB4MDgsMHgwNCwweDAyLDB4OGMsMHgwMCwweDEzLDB4MDIsMHgyOCwweGMwLDB4MGIsMHgzMCwweDAyLDB4MGMsMHgzMCwweDkzLDB4ODAgfX0sCisgezE2LCAweDgyMDAsIDAsIHsweDI0LDB4ZDAsMHgwOSwweDIwLDB4MDIsMHhjYywweDAwLDB4OTEsMHg0MCwweDA4LDB4YzAsMHgyYSwweDE0LDB4MDIsMHg4MSwweDAwIH19LAorIHsxNiwgMHg4MjEwLCAwLCB7MHg5MCwweDAwLDB4NjgsMHgwMCwweDA4LDB4MTgsMHgwMiwweDNhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODIyMCwgMCwgezB4NzAsMHgwMSwweDFlLDB4MDAsMHhiNCwweGEwLDB4MjEsMHhlMCwweDA4LDB4YzgsMHgxMiwweDllLDB4MDAsMHhiMywweDgyLDB4MjEgfX0sCisgezE2LCAweDgyMzAsIDAsIHsweGUwLDB4MGIsMHg3YSwweDBhLDB4MWUsMHgwMCwweDk3LDB4ODAsMHgyZCwweGUxLDB4MGEsMHg0OCwweDAyLDB4Y2UsMHg0MCwweDk1IH19LAorIHsxNiwgMHg4MjQwLCAwLCB7MHg5MCwweDI5LDB4ZTQsMHgwOCwweDU4LDB4MDIsMHg5YSwweDAwLDB4YjcsMHg4OCwweDIxLDB4ZTAsMHgwOSwweDU4LDB4MDIsMHg1YyB9fSwKKyB7MTYsIDB4ODI1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDRhLDB4MDAsMHgwYywweDAwLDB4ZjAsMHg4MCwweDM4LDB4YzQgfX0sCisgezE2LCAweDgyNjAsIDAsIHsweDBjLDB4MjUsMHgwMywweDhjLDB4MjAsMHg5MywweDAwLDB4MzgsMHhjNCwweDBmLDB4YjAsMHgwMywweDBjLDB4ODAsMHhkMywweDAwIH19LAorIHsxNiwgMHg4MjcwLCAwLCB7MHgzNCwweGMwLDB4MGQsMHgwNCwweDEzLDB4Y2MsMHgwOCwweDk5LDB4MDAsMHgyYSwweGMwLDB4MGUsMHgyMSwweDAzLDB4ODgsMHgwNCB9fSwKKyB7MTYsIDB4ODI4MCwgMCwgezB4ZjMsMHgwMCwweDM4LDB4YzAsMHgwYywweDExLDB4ODMsMHgxMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgyOTAsIDAsIHsweDQyLDB4MTUsMHhiYywweDAwLDB4ZjQsMHgwMCwweDNmLDB4YzMsMHgwZSwweGMwLDB4MDMsMHgxYywweDAwLDB4YWYsMHg0YSwweDdmIH19LAorIHsxNiwgMHg4MmEwLCAwLCB7MHhjNCwweDBmLDB4YjIsMHgwMywweGZkLDB4MDEsMHhlZiwweDEwLDB4M2YsMHg4NCwweDBmLDB4YzAsMHgwMywweGZjLDB4MDAsMHhlOSB9fSwKKyB7MTYsIDB4ODJiMCwgMCwgezB4MDAsMHgzNywweGMyLDB4MGUsMHhmMSwweDQ3LDB4N2MsMHgwMCwweGY3LDB4MDAsMHgzZCwweGMwLDB4MGYsMHg1MCwweDAzLDB4ZDAgfX0sCisgezE2LCAweDgyYzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhYSwweDE1LDB4ZWMsMHgwOCwweGY4LDB4MDAsMHgzZSwweGNhIH19LAorIHsxNiwgMHg4MmQwLCAwLCB7MHgwZiwweDkwLDB4MDMsMHhlZiwweDIxLDB4ZmIsMHg4MCwweDdhLDB4NDAsMHg4ZiwweGIyLDB4YTEsMHgyZiwweDAwLDB4Y2IsMHg2MCB9fSwKKyB7MTYsIDB4ODJlMCwgMCwgezB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGVkLDB4YTAsMHhlOSwweDMwLDB4MzIsMHhjMCwweDJkLDB4YjAsMHgwMywweGU0LDB4MDAgfX0sCisgezE2LCAweDgyZjAsIDAsIHsweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHhiMCwweDAzLDB4ZWEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MzAwLCAwLCB7MHhjOCwweDkxLDB4OWQsMHgwMCwweGI0LDB4MDEsMHgyZCwweGM4LDB4MGIsMHg3MCwweDAyLDB4Y2MsMHg4MCwweDhmLDB4MjAsMHgyMSB9fSwKKyB7MTYsIDB4ODMxMCwgMCwgezB4YzAsMHg4YiwweDc2LDB4MDMsMHg1ZCwweDAwLDB4ODcsMHgwYSwweDJkLDB4YzAsMHgwYiwweDQwLDB4MjIsMHhmZCwweDAwLDB4OGQgfX0sCisgezE2LCAweDgzMjAsIDAsIHsweDEwLDB4MjMsMHhjOCwweDA4LDB4NTAsMHgxMiwweGQ0LDB4MDAsMHhiNywweDAwLDB4MmQsMHhjMCwweDBiLDB4NzAsMHgwMiwweGYyIH19LAorIHsxNiwgMHg4MzMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODEsMHgwMCwweDllLDB4MDAsMHhiNCwweDgwLDB4MmQsMHhlMCB9fSwKKyB7MTYsIDB4ODM0MCwgMCwgezB4MGIsMHg3YywweDAyLDB4ZGUsMHg0MCwweGE3LDB4ODIsMHgyZCwweGUwLDB4MGIsMHgzYSwweDAyLDB4OGUsMHgwMCwweDg3LDB4OTAgfX0sCisgezE2LCAweDgzNTAsIDAsIHsweDJkLDB4ZTAsMHgwYiwweDU4LDB4MDIsMHg1ZSwweDAwLDB4YTUsMHhhMiwweDY1LDB4ZTAsMHgwOCwweDY4LDB4ODIsMHhkYSwweDAwIH19LAorIHsxNiwgMHg4MzYwLCAwLCB7MHg5NSwweDgwLDB4MmQsMHg2MCwweDBiLDB4NzgsMHgwMiwweGUwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODM3MCwgMCwgezB4MDgsMHg4NCwweGNjLDB4MDAsMHhiMCwweDA5LDB4MmMsMHhjMCwweDBiLDB4MzgsMHgwMiwweGNjLDB4MDAsMHg4MywweDAwLDB4MmUgfX0sCisgezE2LCAweDgzODAsIDAsIHsweGMwLDB4MGIsMHgzMCwweDQyLDB4NGMsMHgwMCwweDgzLDB4MDAsMHgyYywweGEwLDB4MGIsMHgwNCwweDAyLDB4Y2MsMHgwMCwweDgxIH19LAorIHsxNiwgMHg4MzkwLCAwLCB7MHgwMCwweGEwLDB4YzAsMHgwOCwweGIwLDB4MDYsMHhjZiwweDgwLDB4YjMsMHgxMCwweDJjLDB4YzQsMHgwYiwweDMxLDB4MDIsMHhjMyB9fSwKKyB7MTYsIDB4ODNhMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MDUsMHhhOCwweDAwLDB4ZmUsMHg4MCwweDNlLDB4ODAgfX0sCisgezE2LCAweDgzYjAsIDAsIHsweDBmLDB4ZTgsMHgxMywweGU4LDB4MDAsMHhlYSwweDAwLDB4M2YsMHhiMCwweDBmLDB4YTAsMHgwMywweGE4LDB4MDIsMHhjMiwweDAwIH19LAorIHsxNiwgMHg4M2MwLCAwLCB7MHgyZiwweDg4LDB4MGYsMHhlMCwweDAzLDB4ZTgsMHgwMCwweGVhLDB4MDAsMHgzNiwweDAwLDB4MGMsMHhlMCwweDAzLDB4ZjksMHgyMCB9fSwKKyB7MTYsIDB4ODNkMCwgMCwgezB4ZGUsMHg4MCwweDNmLDB4YTAsMHg0ZiwweGE4LDB4MDMsMHhmYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgzZTAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgxMCwweDNjLDB4MTAsMHgwZiwweDgwLDB4ODMsMHhlMSwweDAwLDB4ZTgsMHgwMCwweDIyIH19LAorIHsxNiwgMHg4M2YwLCAwLCB7MHgwNiwweDBmLDB4MDAsMHgxMywweGUwLDB4MDEsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHg4MywweGUwLDB4MDAsMHhmOCB9fSwKKyB7MTYsIDB4ODQwMCwgMCwgezB4MDAsMHgzZSwweDAwLDB4MGYsMHg4NCwweDIzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDEwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfX0sCisgezE2LCAweDg0MTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTQsMHgwMCwweGY5LDB4MTAsMHgzZSwweDQ0IH19LAorIHsxNiwgMHg4NDIwLCAwLCB7MHgwZCwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwYywweDkwLDB4MTIsMHgyNCwweDAwLDB4ZjksMHgxMCB9fSwKKyB7MTYsIDB4ODQzMCwgMCwgezB4MzIsMHg0MCwweDhmLDB4OTAsMHgwMywweGM0LDB4MDAsMHhjOSwweDAwLDB4MzIsMHgxMCwweDBjLDB4OWMsMHgwMSwweDI0LDB4MDAgfX0sCisgezE2LCAweDg0NDAsIDAsIHsweGY5LDB4MTAsMHgzZSwweDcwLDB4MGYsMHg5MCwweDAyLDB4YzIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NDUwLCAwLCB7MHg4MCwweDE0LDB4NjQsMHgwMCwweGI5LDB4YzAsMHgyZSwweDQ4LDB4MDgsMHg5MSwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4ODQ2MCwgMCwgezB4NDAsMHgwZCwweDkwLDB4MDMsMHg2NywweDAwLDB4YjksMHg4MCwweDJhLDB4NjAsMHgwYiwweDk5LDB4MDIsMHhlNCwweDAwLDB4ODEgfX0sCisgezE2LCAweDg0NzAsIDAsIHsweDAwLDB4MjIsMHg0MCwweDJjLDB4OTAsMHgxMiwweDI1LDB4MjAsMHhiOSwweDQ4LDB4MmUsMHg1MiwweDBiLDB4OTQsMHgwMiwweGUwIH19LAorIHsxNiwgMHg4NDgwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg0MCB9fSwKKyB7MTYsIDB4ODQ5MCwgMCwgezB4NjgsMHg5MCwweDQ2LDB4ZTQsMHgwMCwweGI5LDB4MDAsMHgyZSwweGMwLDB4MDgsMHg5MCwweDAyLDB4YTQsMHg2MCwweGI5LDB4MDAgfX0sCisgezE2LCAweDg0YTAsIDAsIHsweDIyLDB4NDgsMHgwYiwweDkwLDB4MDYsMHhlNCwweDAyLDB4ODksMHgwMCwweGEwLDB4NDAsMHgwOCwweDkwLDB4MDIsMHhhNiwweDEwIH19LAorIHsxNiwgMHg4NGIwLCAwLCB7MHhiOSwweDAwLDB4MGUsMHg0MCwweDBiLDB4OTAsMHgwMiwweGM2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODRjMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHhiMSwweDAwLDB4MmMsMHg0OCwweDA4LDB4MTAsMHgwMiwweGM0LDB4ODQsMHhiMSwweDIwLDB4MmMgfX0sCisgezE2LCAweDg0ZDAsIDAsIHsweDQwLDB4MDksMHgxMiwweDAyLDB4YzQsMHg4MCwweGIxLDB4MjAsMHgyOCwweDQwLDB4MGIsMHgxMCwweDAyLDB4YzQsMHg4MCwweDg5IH19LAorIHsxNiwgMHg4NGUwLCAwLCB7MHgyMCwweDIwLDB4NDAsMHg0YiwweDEyLDB4MGEsMHg4NCwweDg0LDB4YjEsMHgyMCwweDJjLDB4NDgsMHg4YiwweDEwLDB4MDIsMHhjMiB9fSwKKyB7MTYsIDB4ODRmMCwgMCwgezB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4YmEsMHgwMCwweDJlLDB4MDAgfX0sCisgezE2LCAweDg1MDAsIDAsIHsweDBjLDB4ODAsMHgwMywweGU4LDB4MDgsMHhmOCwweDUwLDB4M2UsMHgxNCwweDBjLDB4ODUsMHgwMywweDIwLDB4MDAsMHhiOCwweDAwIH19LAorIHsxNiwgMHg4NTEwLCAwLCB7MHgzMiwweDAwLDB4MGYsMHhhMCwweDAzLDB4ZTEsMHg0MCwweGM4LDB4NTAsMHgzMiwweDE0LDB4MGMsMHhhNSwweDAzLDB4YTEsMHg0MCB9fSwKKyB7MTYsIDB4ODUyMCwgMCwgezB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweGEwLDB4MDMsMHhlZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg1MzAsIDAsIHsweDg4LDB4MGQsMHhlNCwweDQwLDB4ZmQsMHgwMCwweDNlLDB4NDQsMHgwZiwweGQwLDB4MDMsMHhlNCwweDQwLDB4YjksMHgxMSwweDNmIH19LAorIHsxNiwgMHg4NTQwLCAwLCB7MHg0MCwweDBmLDB4OTEsMHgwMywweDY0LDB4NDQsMHhmOSwweDEwLDB4M2YsMHg0MCwweDBmLDB4ZDAsMHgwMywweGU0LDB4NDAsMHhmZCB9fSwKKyB7MTYsIDB4ODU1MCwgMCwgezB4MTAsMHgzZiwweDEwLDB4OGMsMHhkMSwweDAzLDB4NzQsMHg0MCwweGZmLDB4MTAsMHgzZiwweDQ0LDB4MGYsMHhkMCwweDAzLDB4ZTYgfX0sCisgezE2LCAweDg1NjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4NjYsMHgyMCwweGVkLDB4MDAsMHgzMywweDY5IH19LAorIHsxNiwgMHg4NTcwLCAwLCB7MHg0ZCwweDUwLDB4NDMsMHg1NiwweDAwLDB4ZjksMHhhMCwweDM0LDB4NDAsMHgwZiwweDlhLDB4MGIsMHgzNCwweDAwLDB4ZGQsMHg4MCB9fSwKKyB7MTYsIDB4ODU4MCwgMCwgezB4M2IsMHg0MCwweDBiLDB4NTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4MzIsMHhlMCwweDBlLDB4ZDAsMHgwMywweGY0LDB4MDAgfX0sCisgezE2LCAweDg1OTAsIDAsIHsweGZkLDB4MDAsMHgzZiwweDQwLDB4MGMsMHhkMCwweDAzLDB4YzYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NWEwLCAwLCB7MHg3OCwweDEwLDB4ZTIsMHg4MCwweDg4LDB4MDQsMHgyMiwweDEwLDB4MGIsMHg4MCwweDAyLDB4MjAsMHgwOSwweGI4LDB4ZjAsMHgyMiB9fSwKKyB7MTYsIDB4ODViMCwgMCwgezB4MDAsMHgwYiwweDhlLDB4MTIsMHhhMCwweDAwLDB4YjgsMHg1MiwweDJlLDB4MDAsMHgwYiwweDgwLDB4MDIsMHhlMCwweDA1LDB4YjggfX0sCisgezE2LCAweDg1YzAsIDAsIHsweGFhLDB4MjMsMHgzZSwweDBkLDB4ODAsMHgwMiwweGUwLDB4MDAsMHhiOCwweDAwLDB4M2EsMHgwMCwweDA4LDB4ODAsMHgwMiwweGNlIH19LAorIHsxNiwgMHg4NWQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwNSwweGM0LDB4MjAsMHhhOSwweDAwLDB4YTQsMHg0NCB9fSwKKyB7MTYsIDB4ODVlMCwgMCwgezB4MDksMHg5MCwweDAyLDB4YzUsMHgwMCwweGExLDB4MDgsMHgyYywweDQwLDB4MGIsMHgxMSwweDgyLDB4MDQsMHgwMCwweGIxLDB4MDAgfX0sCisgezE2LCAweDg1ZjAsIDAsIHsweDI4LDB4NDAsMHgwYSwweDEwLDB4NDIsMHhjNCwweDAwLDB4YjUsMHgwMCwweGExLDB4NDAsMHgwOCwweDEwLDB4MDIsMHhjNCwweDAwIH19LAorIHsxNiwgMHg4NjAwLCAwLCB7MHhiMSwweDAxLDB4MmMsMHg0MCwweDA4LDB4MTAsMHgyMCwweGQyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODYxMCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHg4OSwweDA0LDB4MjIsMHg0MCwweDBiLDB4OTAsMHgwMCwweGFjLDB4MDAsMHgzOSwweDAwLDB4MmEgfX0sCisgezE2LCAweDg2MjAsIDAsIHsweDQwLDB4MGIsMHgxMCwweDAyLDB4YTQsMHgwMCwweGI5LDB4MDAsMHgyZSwweDQ4LDB4MGIsMHg5MCwweDEyLDB4ZTQsMHgwMCwweGI5IH19LAorIHsxNiwgMHg4NjMwLCAwLCB7MHgwMCwweDIxLDB4NjAsMHgwOSwweDkyLDB4MjIsMHhlNCwweDI4LDB4YjksMHgwMCwweDBhLDB4NTAsMHgwOCwweDkwLDB4MDYsMHhjNiB9fSwKKyB7MTYsIDB4ODY0MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4ZTksMHgwMCwweDM2LDB4NDAgfX0sCisgezE2LCAweDg2NTAsIDAsIHsweDBkLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0OCwweDBmLDB4OTAsMHgwMywweDI0LDB4MDAsMHhkOSwweDAwIH19LAorIHsxNiwgMHg4NjYwLCAwLCB7MHgzYSwweDc4LDB4MGUsMHg5OCwweDAzLDB4ZTQsMHgwMCwweGI5LDB4MDAsMHhiMiwweDQwLDB4MGUsMHg5MiwweDIzLDB4ZTYsMHgwMCB9fSwKKyB7MTYsIDB4ODY3MCwgMCwgezB4YjksMHg1MCwweDNlLDB4NzAsMHgyYywweDkwLDB4MDMsMHhlOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg2ODAsIDAsIHsweDY4LDB4MDEsMHg4NCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHg0ZiwweDljLDB4MjMsMHg2NCwweDAwLDB4ZjksMHgwNCwweDM2IH19LAorIHsxNiwgMHg4NjkwLCAwLCB7MHg0OCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg2MCwweDBmLDB4OTIsMHgwMywweGU0LDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4ODZhMCwgMCwgezB4MDAsMHgzZSwweDQwLDB4OGYsMHg5MCwweDgzLDB4ZTQsMHg0NCwweGY5LDB4MDAsMHg3OCwweDY0LDB4MGYsMHg5MCwweDAzLDB4ZGEgfX0sCisgezE2LCAweDg2YjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwIH19LAorIHsxNiwgMHg4NmMwLCAwLCB7MHgwZiwweDgyLDB4MDMsMHhhMCwweDQwLDB4ZTgsMHgwMCwweDNlLDB4MDAsMHgwZCwweDgwLDB4MDMsMHgyMCwweGMwLDB4YzgsMHg4MCB9fSwKKyB7MTYsIDB4ODZkMCwgMCwgezB4M2UsMHgxMiwweDBmLDB4ODAsMHgwMywweDYwLDB4MDAsMHg3YywweDAwLDB4MzMsMHgwMCwweDBkLDB4ODAsMHgxMywweGUwLDB4MTAgfX0sCisgezE2LCAweDg2ZTAsIDAsIHsweGM4LDB4NjQsMHgzZSwweDA4LDB4MGMsMHg4MiwweDAzLDB4Y2EsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NmYwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMCwweGI2LDB4ZTAsMHgwZiwweGEwLDB4MGIsMHg2MCwweDgyLDB4MzgsMHgwMCwweGFhLDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4ODcwMCwgMCwgezB4ODAsMHgwOCwweGEwLDB4NDIsMHhiYSwweDAwLDB4YWUsMHgyMCwweDJmLDB4ODgsMHgwYiwweGU1LDB4MDIsMHgyOCwweDAwLDB4YmEgfX0sCisgezE2LCAweDg3MTAsIDAsIHsweGQ4LDB4MzcsMHg4MCwweDA4LDB4ZWMsMHgwMiwweGY4LDB4MDQsMHg4ZSwweDAwLDB4MmYsMHg5MCwweDBkLDB4ZTAsMHgwMiwweGNhIH19LAorIHsxNiwgMHg4NzIwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHhiMCwweDI0LDB4MmMsMHg2MCB9fSwKKyB7MTYsIDB4ODczMCwgMCwgezB4MGIsMHgzOCwweDAyLDB4OGUsMHg4MCwweGFiLDB4MDAsMHgyYywweGMwLDB4MDksMHgzMCwweDAyLDB4MGQsMHgwOCwweDAwLDB4ODAgfX0sCisgezE2LCAweDg3NDAsIDAsIHsweDZjLDB4ZDAsMHgwYiwweDM0LDB4MDIsMHhjYywweDAwLDB4YjgsMHhjMCwweDIwLDB4MDAsMHg0OCwweDM0LDB4MTIsMHhjYywweDQwIH19LAorIHsxNiwgMHg4NzUwLCAwLCB7MHg4MywweDAwLDB4MmMsMHhlMCwweDBhLDB4MzUsMHgwMiwweGNhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODc2MCwgMCwgezB4YTAsMHgwMSwweDFjLDB4NDAsMHhiNywweDAwLDB4MmQsMHgwMiwweDhiLDB4NjAsMHgwMiwweDllLDB4MDAsMHg4NywweDIwLDB4MmYgfX0sCisgezE2LCAweDg3NzAsIDAsIHsweGUwLDB4MDgsMHg3MiwweDAyLDB4OWUsMHgwMCwweGE0LDB4MDAsMHgyZCwweGMwLDB4MGIsMHhmOCwweDAyLDB4OWMsMHhjMCwweGIzIH19LAorIHsxNiwgMHg4NzgwLCAwLCB7MHgwMiwweGE1LDB4YzAsMHgwOCwweDUwLDB4ODYsMHhmZSwweDAwLDB4ODcsMHgwMCwweDJmLDB4ZDAsMHgwOSwweDcwLDB4MDIsMHhlOCB9fSwKKyB7MTYsIDB4ODc5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4ZjQsMHg4MCwweDNkLDB4MjAgfX0sCisgezE2LCAweDg3YTAsIDAsIHsweDBmLDB4NTgsMHgwMywweDllLDB4MDAsMHg2NywweDgwLDB4M2QsMHhmOCwweDBkLDB4MzgsMHgwMiwweDFhLDB4MTAsMHg0NCwweDgwIH19LAorIHsxNiwgMHg4N2IwLCAwLCB7MHgzZCwweGUwLDB4MGYsMHg1OCwweDAzLDB4ZGUsMHgyMCwweGI0LDB4ODAsMHgzMywweGEwLDB4MmMsMHg2OCwweDAzLDB4ZDYsMHgwMCB9fSwKKyB7MTYsIDB4ODdjMCwgMCwgezB4YzcsMHg4MSwweDNkLDB4ZTAsMHgwYywweDc4LDB4MDMsMHhlYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg3ZDAsIDAsIHsweDA4LDB4MWQsMHhhYywweDA4LDB4ZjgsMHgwMCwweDNlLDB4MDAsMHg4ZiwweDgwLDB4MDMsMHg2YywweDAwLDB4M2IsMHgxMiwweDNlIH19LAorIHsxNiwgMHg4N2UwLCAwLCB7MHhjYSwweDBmLDB4YjUsMHgwMywweGM4LDB4MDAsMHhmOCwweDA0LDB4N2UsMHhjMCwweDBmLDB4OTAsMHgwMywweDZjLDB4ODAsMHhmYiB9fSwKKyB7MTYsIDB4ODdmMCwgMCwgezB4MDQsMHgzYSwweDQwLDB4MGYsMHg5MCwweDIzLDB4YzgsMHgwMCwweGY5LDB4MDEsMHgzYywweGMwLDB4MGYsMHhiMCwweDAzLDB4YzIgfX0sCisgezE2LCAweDg4MDAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmUsMHgwMCwweGFjLDB4OTAsMHgzMSwweDQ4IH19LAorIHsxNiwgMHg4ODEwLCAwLCB7MHgwOCwweGY4LDB4MDMsMHhmYSwweDAwLDB4Y2YsMHg4MCwweDNmLDB4ZTAsMHgwYywweGZjLDB4MTMsMHgzZSwweDA0LDB4ZmMsMHg4MCB9fSwKKyB7MTYsIDB4ODgyMCwgMCwgezB4MzUsMHhhMCwweDBjLDB4NzgsMHgwMywweGJlLDB4MDAsMHhkZiwweDgwLDB4M2IsMHgyMCwweDI0LDB4ZjgsMHgwMywweDJlLDB4NDAgfX0sCisgezE2LCAweDg4MzAsIDAsIHsweGNmLDB4ODAsMHgzMywweGUwLDB4MDMsMHhmOSwweDAzLDB4ZDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ODQwLCAwLCB7MHhhOCwweDExLDB4YmMsMHgwMCwweDgwLDB4MDAsMHgwMSwweDAwLDB4MDgsMHg3MiwweDAyLDB4ZDAsMHgwMCwweDg3LDB4MDAsMHgyZCB9fSwKKyB7MTYsIDB4ODg1MCwgMCwgezB4YzgsMHgwYSwweGYwLDB4MDIsMHg5OCwweDQwLDB4ZjUsMHgwMCwweDYxLDB4NDEsMHgwMCwweDc0LDB4MDIsMHgxYywweDAwLDB4YjQgfX0sCisgezE2LCAweDg4NjAsIDAsIHsweDAwLDB4MjEsMHhjOCwweDA4LDB4NjAsMHgwMiwweDNlLDB4MjAsMHg4NiwweDA4LDB4MjEsMHhkOCwweDBmLDB4NTAsMHgwMiwweGVhIH19LAorIHsxNiwgMHg4ODcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMCwweDljLDB4MDAsMHhhNCwweDAwLDB4MjEsMHgwMCB9fSwKKyB7MTYsIDB4ODg4MCwgMCwgezB4MDgsMHg1MCwweDAyLDB4ZDgsMHgwMCwweDk3LDB4MDAsMHgyZCwweGMwLDB4ODgsMHg3MSwweDAyLDB4MTQsMHgwMCwweGIwLDB4MDAgfX0sCisgezE2LCAweDg4OTAsIDAsIHsweDI1LDB4OTAsMHgwOCwweGMwLDB4ODIsMHg5YywweDQwLDB4OTMsMHgwMCwweDI5LDB4YTEsMHg4OCwweDYwLDB4MDIsMHgxNCwweDEyIH19LAorIHsxNiwgMHg4OGEwLCAwLCB7MHg4NywweDQwLDB4MjksMHg0MCwweDBiLDB4NjAsMHgwMiwweGM0LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODhiMCwgMCwgezB4NjAsMHgxNCwweGNjLDB4MDAsMHg4MCwweGQwLDB4YTAsMHgwMCwweDA4LDB4MWMsMHgwMiwweGMwLDB4MDAsMHg5MywweDAwLDB4MmMgfX0sCisgezE2LCAweDg4YzAsIDAsIHsweGQwLDB4MGEsMHhiMCwweDI2LDB4ODAsMHgwMCwweGIzLDB4MDAsMHgyNCwweGU0LDB4MDgsMHgwOCwweDAyLDB4OGMsMHgwMCwweGIwIH19LAorIHsxNiwgMHg4OGQwLCAwLCB7MHgwMiwweDAyLDB4NDEsMHgwOCwweDA4LDB4MDIsMHgwMywweDAxLDB4ODEsMHgwMCwweDI4LDB4NDIsMHgxYSwweDAwLDB4NDIsMHhkOCB9fSwKKyB7MTYsIDB4ODhlMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGY4LDB4MTUsMHhiYywweDAwLDB4ZTgsMHhjMCwweDMyLDB4ODAgfX0sCisgezE2LCAweDg4ZjAsIDAsIHsweDBjLDB4YjUsMHgwMywweGU0LDB4MDAsMHg5ZiwweDAwLDB4M2QsMHhlMCwweDBjLDB4ZjAsMHgwYiwweDI0LDB4MDAsMHhmOCwweDAwIH19LAorIHsxNiwgMHg4OTAwLCAwLCB7MHgzNiwweGUwLDB4MGMsMHgyNSwweDAzLDB4YmMsMHgwNSwweGQ4LDB4MDIsMHgyYSwweDAwLDB4MDgsMHhiYSwweDAyLDB4MmEsMHgwMCB9fSwKKyB7MTYsIDB4ODkxMCwgMCwgezB4YzEsMHgwMiwweDNhLDB4NTAsMHg4YiwweDkwLDB4MDMsMHhlZSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg5MjAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwOCwweDNlLDB4ODAsMHgwZiwweGExLDB4MDMsMHhlYywweDA0LDB4ZWIsMHgwMiwweDJlIH19LAorIHsxNiwgMHg4OTMwLCAwLCB7MHhjNiwweDBmLDB4YjAsMHgxNywweDQ0LDB4MDAsMHhlOCwweDAwLDB4M2EsMHg0MCwweDBmLDB4ODAsMHgwMiwweDZjLDB4MDAsMHhmYiB9fSwKKyB7MTYsIDB4ODk0MCwgMCwgezB4MDAsMHgzZSwweGUwLDB4MGYsMHg5MCwweDkzLDB4ZTEsMHgwMCwweGQ5LDB4MDAsMHgyNiwweDcwLDB4OGYsMHg5MCwweDAxLDB4ZTEgfX0sCisgezE2LCAweDg5NTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4ZmMsMHgwMCwweGZjLDB4MDMsMHgzNywweDI0IH19LAorIHsxNiwgMHg4OTYwLCAwLCB7MHgwZCwweGY4LDB4MDMsMHhlMCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzEsMHg4ZCwweGYwLDB4MGIsMHgzOCwweDAwLDB4Y2MsMHgwMCB9fSwKKyB7MTYsIDB4ODk3MCwgMCwgezB4M2YsMHhjMCwweDBmLDB4ZmEsMHgwMywweDNjLDB4MGMsMHhmYywweDA0LDB4M2IsMHg4MCwweDBjLDB4YTAsMHgwMywweDk0LDB4MjAgfX0sCisgezE2LCAweDg5ODAsIDAsIHsweDg5LDB4MDUsMHgzYiwweDAwLDB4NGYsMHhkMCwweDIzLDB4YzAsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4OTkwLCAwLCB7MHg4MCwweDA0LDB4NmMsMHgwMCwweGIwLDB4MDYsMHgyMCwweDEzLDB4ODgsMHhhOCwweDAyLDB4ZWIsMHgwMCwweGJiLDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4ODlhMCwgMCwgezB4YzAsMHgwOCwweGIwLDB4MDIsMHgyYSwweDAwLDB4YTgsMHg4MCwweDJlLDB4ZTAsMHgwYiwweDk0LDB4MWEsMHgyYywweDAwLDB4YmIgfX0sCisgezE2LCAweDg5YjAsIDAsIHsweDAwLDB4YTIsMHg0MCwweDI5LDB4OTgsMHgwMiwweGUyLDB4MDAsMHhhOSwweDg0LDB4MjIsMHgyMCwweDBiLDB4OTgsMHgwMiwweGUwIH19LAorIHsxNiwgMHg4OWMwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHhiOCwweDAwLDB4MjIsMHgwMCB9fSwKKyB7MTYsIDB4ODlkMCwgMCwgezB4MDksMHg4MiwweDAyLDB4ZTYsMHgwMCwweGJiLDB4MDAsMHgyZSwweGMwLDB4MGIsMHhiMCwweDAyLDB4MjYsMHgwMCwweDg4LDB4ODAgfX0sCisgezE2LCAweDg5ZTAsIDAsIHsweDJlLDB4YTAsMHgwYiwweGEwLDB4MDIsMHgyYywweDAwLDB4YjMsMHgwMCwweDJhLDB4MDAsMHgwOSwweDk4LDB4MDIsMHhlYSwweDIwIH19LAorIHsxNiwgMHg4OWYwLCAwLCB7MHhhOSwweDgwLDB4MmEsMHg2MCwweDliLDB4OTgsMHg4MiwweGUwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGEwMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDAsMHhiOCwweDAwLDB4MjAsMHgwMCwweDA5LDB4MDgsMHgwMiwweGM0LDB4MDAsMHhiMywweDAwLDB4MjYgfX0sCisgezE2LCAweDhhMTAsIDAsIHsweGMwLDB4MDAsMHgzMCwweDAyLDB4MDAsMHgwMCwweDgxLDB4MDAsMHgyYywweDQxLDB4MGIsMHgwMCwweDAyLDB4MGMsMHgwMCwweGIwIH19LAorIHsxNiwgMHg4YTIwLCAwLCB7MHgwMCwweDIwLDB4YzAsMHgwYiwweDAwLDB4MDIsMHhjOCwweDgwLDB4YTgsMHgwMCwweDIwLDB4NDEsMHgwYiwweDEwLDB4MDIsMHhjMiB9fSwKKyB7MTYsIDB4OGEzMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDEwLDB4ZjgsMHg1MCwweGIyLDB4MDAgfX0sCisgezE2LCAweDhhNDAsIDAsIHsweDBkLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmYiwweDAwLDB4M2QsMHhjMCwweDBkLDB4ZjAsMHgxMywweDI0LDB4MDIsMHhjOCwweDA2IH19LAorIHsxNiwgMHg4YTUwLCAwLCB7MHgzZSwweDgwLDB4MGYsMHhhMCwweDAzLDB4M2MsMHgwNCwweGZiLDB4MDAsMHg3OCwweDgwLDB4MGMsMHhhMCwweDAzLDB4ZTQsMHgwMCB9fSwKKyB7MTYsIDB4OGE2MCwgMCwgezB4ZTksMHgwMCwweDFhLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhjMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhhNzAsIDAsIHsweGEwLDB4MWQsMHhmYywweDAwLDB4ZjQsMHgyMCwweDNmLDB4MDAsMHgwZSwweGMwLDB4MDIsMHhmMCwweDAxLDB4ZmYsMHgwMCwweDNmIH19LAorIHsxNiwgMHg4YTgwLCAwLCB7MHhjMCwweDBmLDB4ZjAsMHgyMywweGYwLDB4MDAsMHhmZCwweDAwLDB4M2YsMHhjMCwweDBmLDB4YzAsMHgwMywweGZjLDB4MDAsMHhmYyB9fSwKKyB7MTYsIDB4OGE5MCwgMCwgezB4MDAsMHgzZiwweDQwLDB4OWMsMHhjMCwweDAzLDB4ZjAsMHg0MCwweGZkLDB4MDAsMHgzZiwweDQwLDB4MGYsMHhkMCwweDQzLDB4ZTggfX0sCisgezE2LCAweDhhYTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZjAsMHgwMCwweGVkLDB4MjMsMHhiNywweDQ4IH19LAorIHsxNiwgMHg4YWIwLCAwLCB7MHgwYywweGUxLDB4YzMsMHg3YywweGMwLDB4ZGQsMHg4MCwweDM3LDB4ZTAsMHgwZiwweGNiLDB4MDMsMHhmZSwweDA4LDB4ZmMsMHgyOCB9fSwKKyB7MTYsIDB4OGFjMCwgMCwgezB4M2YsMHhmMCwweDFjLDB4ZmIsMHgyMywweDdjLDB4MDEsMHhmZiwweDE0LDB4NzcsMHhlMiwweDRmLDB4ZTgsMHgyMywweDdjLDB4MDAgfX0sCisgezE2LCAweDhhZDAsIDAsIHsweGM0LDB4ODAsMHgzMywweDQ4LDB4MmMsMHhmOCwweDIyLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4YWUwLCAwLCB7MHg4MCwweDEwLDB4ZTAsMHhlMCwweGM5LDB4YzAsMHgyMiwweDViLDB4ODgsMHg5NiwweDIyLDB4MmQsMHgwMCwweDg5LDB4MjIsMHgyMiB9fSwKKyB7MTYsIDB4OGFmMCwgMCwgezB4Y2EsMHgwYiwweDllLDB4MjIsMHhlMiwweGEwLDB4YjksMHg2MSwweDJjLDB4ZTAsMHg4OCwweDlmLDB4MDIsMHgzZCwweDg1LDB4YmYgfX0sCisgezE2LCAweDhiMDAsIDAsIHsweDYwLDB4MjYsMHg1MCwweDQ4LDB4YTAsMHgwMiwweDNjLDB4MDAsMHg4OCwweDAwLDB4MjIsMHg1MCwweDA4LDB4YjAsMHgwMiwweDIwIH19LAorIHsxNiwgMHg4YjEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGMwLDB4ODAsMHhiMSwweDEwLDB4MjAsMHg0NCB9fSwKKyB7MTYsIDB4OGIyMCwgMCwgezB4MGIsMHhiMiwweDAyLDB4Y2UsMHhkMCwweDgxLDB4MDgsMHgyYywweGMwLDB4MGIsMHgwMSwweDAyLDB4OGMsMHgwOCwweGIzLDB4MDggfX0sCisgezE2LCAweDhiMzAsIDAsIHsweDJjLDB4YzksMHgwOCwweDEwLDB4NjIsMHg4YywweDYwLDB4YjMsMHgzMiwweDI0LDB4ODAsMHgwYSwweGEwLDB4MDIsMHg2YywweDAzIH19LAorIHsxNiwgMHg4YjQwLCAwLCB7MHg5YSwweDAxLDB4MjYsMHg0NCwweDQ4LDB4YjAsMHg0MiwweDYyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGI1MCwgMCwgezB4YzAsMHgxNSwweGE0LDB4YTAsMHg4YiwweDAyLDB4MjIsMHhlMCwweDBiLDB4YjAsMHg2MiwweGFjLDB4OTgsMHg5OSwweDAwLDB4MmEgfX0sCisgezE2LCAweDhiNjAsIDAsIHsweGMyLDB4MGIsMHg5OCwweDA2LDB4ZTQsMHgwMCwweGJiLDB4MDIsMHgyZSwweGMwLDB4MDgsMHg5MSwweDQyLDB4MmMsMHgxMCwweGJiIH19LAorIHsxNiwgMHg4YjcwLCAwLCB7MHgwMCwweDZlLDB4ODAsMHgwYSwweDgwLDB4MDIsMHg2YywweDAwLDB4MWIsMHgwMCwweDA2LDB4NDAsMHg0OCwweGI4LDB4MGEsMHg3MCB9fSwKKyB7MTYsIDB4OGI4MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTEsMHhlNywweDAwLDB4YTEsMHgwMCwweDc2LDB4NzggfX0sCisgezE2LCAweDhiOTAsIDAsIHsweDBmLDB4YjAsMHgwMywweGU4LDB4MTAsMHhkOSwweDAwLDB4M2UsMHhkMCwweDRiLDB4OWUsMHgxMywweGFjLDB4MDgsMHhiOCwweGEwIH19LAorIHsxNiwgMHg4YmEwLCAwLCB7MHg3ZSwweGM2LDB4MDgsMHhhOCwweDAyLDB4MmMsMHgwMSwweGJiLDB4MDAsMHgyNiwweDMwLDB4NGUsMHgyMCwweDAzLDB4NGMsMHgxOCB9fSwKKyB7MTYsIDB4OGJiMCwgMCwgezB4OTksMHg4MCwweGI0LDB4NDAsMHg0YywweDNhLDB4MDMsMHg0MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhiYzAsIDAsIHsweGUwLDB4MDEsMHhiMiwweDAwLDB4ZmQsMHhjNSwweDNiLDB4YzAsMHg0YywweGQwLDB4MDMsMHg2YSwweDAyLDB4ZWQsMHgwNiwweDMzIH19LAorIHsxNiwgMHg4YmQwLCAwLCB7MHhjNCwweDBmLDB4ZDAsMHg1MywweGY4LDB4MDAsMHhmYywweDkwLDB4N2YsMHhjMSwweDBmLDB4NzgsMHgwMywweGJjLDB4MDQsMHhmZiB9fSwKKyB7MTYsIDB4OGJlMCwgMCwgezB4MDAsMHgzNywweDY0LDB4MGMsMHhmMSwweDAzLDB4YTQsMHgwMCwweGVkLDB4YTEsMHgzYiwweDQwLDB4MGIsMHhmMCwweDgzLDB4YjggfX0sCisgezE2LCAweDhiZjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4OGMsMHgwMCwweGNiLDB4MjAsMHgzZSwweDcxIH19LAorIHsxNiwgMHg4YzAwLCAwLCB7MHgwZiwweGIzLDB4MDMsMHg5OCwweDAyLDB4ZmIsMHgwMiwweDM2LDB4NDgsMHgwZiwweDkwLDB4MDMsMHhlYywweDIwLDB4ZjgsMHgwMCB9fSwKKyB7MTYsIDB4OGMxMCwgMCwgezB4M2UsMHhjYywweDA0LDB4ODQsMHgwMywweDJjLDB4MDAsMHhkYiwweDA0LDB4M2MsMHgxMCwweDBmLDB4YTAsMHgwMywweGVjLDB4MDAgfX0sCisgezE2LCAweDhjMjAsIDAsIHsweDliLDB4MDAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDAzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4YzMwLCAwLCB7MHg4OCwweDA1LDB4MmMsMHgwMiwweDhiLDB4NDgsMHgyZSwweGUwLDB4MGIsMHgzNCwweDAzLDB4NmIsMHgwMCwweDhiLDB4ZjUsMHgyMiB9fSwKKyB7MTYsIDB4OGM0MCwgMCwgezB4ZjIsMHgwYiwweDljLDB4MDMsMHhhZiwweDAwLDB4YjgsMHg1MCwweDJlLDB4YzAsMHgwOCwweGIwLDB4MDIsMHg3YywweDAwLDB4OGYgfX0sCisgezE2LCAweDhjNTAsIDAsIHsweDAwLDB4MGUsMHg1ZCwweDBiLDB4ODAsMHgwMiwweGY1LDB4NDAsMHg4MywweDUwLDB4MjMsMHg1NCwweDA4LDB4OWMsMHgwMiwweGU2IH19LAorIHsxNiwgMHg4YzYwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNCwweDRjLDB4MDAsMHg4MSwweDgxLDB4MmUsMHg0MCB9fSwKKyB7MTYsIDB4OGM3MCwgMCwgezB4MDMsMHgyYywweDAyLDB4MDQsMHgzMywweDk5LDB4MDAsMHgyMCwweGYwLDB4NGEsMHgyOCwweDgwLDB4Y2MsMHg0MCwweGIwLDB4MDAgfX0sCisgezE2LCAweDhjODAsIDAsIHsweDI2LDB4MTAsMHgwOCwweDIwLDB4MDIsMHg0YywweDAwLDB4ODMsMHgwMCwweDJjLDB4YzAsMHgwOSwweDIwLDB4MDIsMHhjYywweDAwIH19LAorIHsxNiwgMHg4YzkwLCAwLCB7MHhhMCwweDAyLDB4MjgsMHg0MCwweDA4LDB4MDgsMHgwMiwweDdhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGNhMCwgMCwgezB4MjAsMHgwMSwweDBhLDB4MDAsMHg4NSwweDgwLDB4MmQsMHhmOCwweDBiLDB4ZGEsMHgwMiwweGQ2LDB4NDAsMHg4NSwweGEwLDB4MjEgfX0sCisgezE2LCAweDhjYjAsIDAsIHsweGUwLDB4MGIsMHg0OCwweDA2LDB4OTIsMHgwNCwweGI1LDB4ODAsMHgyZCwweDIxLDB4MDgsMHgwMCwweDAyLDB4NGUsMHgwMCwweDg3IH19LAorIHsxNiwgMHg4Y2MwLCAwLCB7MHhhNCwweDJkLDB4NjAsMHgwYiwweDY4LDB4MDIsMHhkZSwweGMyLDB4YWQsMHg5MCwweDJiLDB4NjAsMHgyOCwweDU4LDB4ODIsMHhkYyB9fSwKKyB7MTYsIDB4OGNkMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHg0YywweDQwLDB4YzMsMHgxMCwweDJjLDB4NmMgfX0sCisgezE2LCAweDhjZTAsIDAsIHsweDBmLDB4MzAsMHgwMywweDg2LDB4YTIsMHhmOSwweGIwLDB4YjAsMHhlMCwweDBmLDB4MjksMHg4MywweGNlLDB4NDQsMHhmMywweDgwIH19LAorIHsxNiwgMHg4Y2YwLCAwLCB7MHgzYywweGFjLDB4MGMsMHgzMCwweDAzLDB4MGMsMHgwMCwweGMzLDB4MDAsMHgzYywweGQ1LDB4MGYsMHgyMCwweDAzLDB4Y2UsMHhjMSB9fSwKKyB7MTYsIDB4OGQwMCwgMCwgezB4ZTAsMHgxMCwweGI4LDB4NDAsMHgwYywweDAwLDB4MDMsMHhkMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhkMTAsIDAsIHsweGMwLDB4MWQsMHhiYywweDAwLDB4ZWIsMHgwMCwweDNlLDB4Y2MsMHgwZiwweDMyLDB4MDMsMHg2NCwweDA4LDB4ZjksMHgwMCwweDNiIH19LAorIHsxNiwgMHg4ZDIwLCAwLCB7MHg5MCwweDBmLDB4ZjAsMHg0MywweGU0LDB4NDAsMHhmYiwweDM0LDB4M2YsMHg4MSwweDA3LDB4ZDEsMHgwMywweGFkLDB4MjAsMHhlYiB9fSwKKyB7MTYsIDB4OGQzMCwgMCwgezB4MjAsMHg3ZiwweGM0LDB4MGYsMHhlMSwweDAzLDB4ZmMsMHg1MCwweGNkLDB4MTAsMHgzNSwweDQwLDB4MGYsMHhkMCwweDAzLDB4ZDAgfX0sCisgezE2LCAweDhkNDAsIDAsIHsweDAyLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZTQsMHgwNCwweGZkLDB4MDQsMHgzZCwweDQwIH19LAorIHsxNiwgMHg4ZDUwLCAwLCB7MHgyZCwweDMwLDB4MDIsMHgzYywweDAwLDB4YzksMHgwMSwweDNlLDB4YzAsMHg0ZiwweGI4LDB4NDMsMHhlYywweDEwLDB4ZmIsMHgwMCB9fSwKKyB7MTYsIDB4OGQ2MCwgMCwgezB4MzIsMHg0MCwweDBmLDB4YTAsMHgyMywweGVjLDB4ODAsMHhjYiwweDM2LDB4MzIsMHg4MCwweDRkLDB4YTgsMHgwMywweDJjLDB4MTAgfX0sCisgezE2LCAweDhkNzAsIDAsIHsweGNiLDB4MDAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDAzLDB4NmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ZDgwLCAwLCB7MHhjOCwweDExLDB4OTAsMHgwOCwweGI1LDB4MDAsMHgyZCwweGMwLDB4MDgsMHg1MCwweDAyLDB4YmMsMHgwMiwweDg1LDB4MDQsMHgyZCB9fSwKKyB7MTYsIDB4OGQ5MCwgMCwgezB4YzAsMHg4ZSwweDYwLDB4MDYsMHhkOCwweDA0LDB4YjcsMHgwNCwweDIxLDB4NDAsMHgwYiwweDcwLDB4MDIsMHhmYywweDgwLDB4YWYgfX0sCisgezE2LCAweDhkYTAsIDAsIHsweDI4LDB4MjEsMHhjMCwweDBiLDB4NzAsMHgwMiwweDA2LDB4NDAsMHg4NywweDAwLDB4MjEsMHg1MCwweDA4LDB4NTAsMHgwMiwweDMyIH19LAorIHsxNiwgMHg4ZGIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDllLDB4MjAsMHhiNywweDgwLDB4MmIsMHg3MCB9fSwKKyB7MTYsIDB4OGRjMCwgMCwgezB4MDgsMHhmOCwweDA2LDB4MWUsMHgwMCwweDg3LDB4ODAsMHgyZCwweGUwLDB4MGIsMHg3MCwweDMyLDB4ZGUsMHgwNCwweDM3LDB4ODQgfX0sCisgezE2LCAweDhkZDAsIDAsIHsweDI1LDB4ZTAsMHgwYiwweDY4LDB4MDYsMHhkZSwweDgwLDB4ODcsMHg4MCwweDIxLDB4YTEsMHgxYiwweDY4LDB4MDIsMHgxZSwweDQwIH19LAorIHsxNiwgMHg4ZGUwLCAwLCB7MHg5ZiwweDgwLDB4MjAsMHg2MCwweDA4LDB4NTgsMHgwMiwweDIwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGRmMCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MjAsMHhiMywweDAwLDB4MmMsMHg4MCwweDg4LDB4YjQsMHgyMiwweDhkLDB4MDAsMHg4MywweDkwLDB4MmMgfX0sCisgezE2LCAweDhlMDAsIDAsIHsweGMwLDB4MGEsMHgzOCwweDAyLDB4Y2UsMHgwOCwweGJiLDB4MjAsMHgyNCwweGQwLDB4MGIsMHhiMywweDAyLDB4Y2MsMHgwMCwweGEzIH19LAorIHsxNiwgMHg4ZTEwLCAwLCB7MHgwMCwweDYwLDB4ZDIsMHgwYiwweDIwLDB4MmEsMHgwNCwweDA4LDB4OTMsMHg1MCwweDIwLDB4NDAsMHgwOCwweDE3LDB4MGEsMHgwMiB9fSwKKyB7MTYsIDB4OGUyMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiYSwweDAwLDB4YmEsMHhhMCwweDNmLDB4ODQgfX0sCisgezE2LCAweDhlMzAsIDAsIHsweDFjLDB4ZTAsMHgwYiwweDM4LDB4NDAsMHg4ZSwweDA2LDB4MmUsMHg4MCwweDBiLDB4ZTMsMHgwMywweGY4LDB4ODAsMHhmZSwweGU0IH19LAorIHsxNiwgMHg4ZTQwLCAwLCB7MHhiNywweDkwLDB4MGYsMHhlYywweDAyLDB4ZTgsMHgwMCwweDhhLDB4MDAsMHhhMywweGEwLDB4MDksMHhlNCwweDAzLDB4MmEsMHgwMiB9fSwKKyB7MTYsIDB4OGU1MCwgMCwgezB4ZGUsMHhjMCwweGYzLDB4ODAsMHgwYywweDZjLDB4MDMsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhlNjAsIDAsIHsweDQ4LDB4MDEsMHhlMCwweDAwLDB4ZjgsMHg0MCwweDNlLDB4MDAsMHgwZiwweDg0LDB4MTMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDJlIH19LAorIHsxNiwgMHg4ZTcwLCAwLCB7MHgzMCwweDBhLDB4ODQsMHgwMywweGUwLDB4MDQsMHhmOCwweDAwLDB4M2EsMHgwMiwweDBmLDB4ODAsMHgxMywweGUwLDB4MDAsMHhmOCB9fSwKKyB7MTYsIDB4OGU4MCwgMCwgezB4MDAsMHgzZSwweDA0LDB4MGQsMHg4MCwweDgzLDB4ZTAsMHg0MCwweGU4LDB4MjAsMHgzZSwweDAwLDB4MmYsMHg4MCwweDAzLDB4ZDIgfX0sCisgezE2LCAweDhlOTAsIDAsIHsweDEwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4YTQsMHgwMCwweGY5LDB4MDAsMHgzYywweDY0IH19LAorIHsxNiwgMHg4ZWEwLCAwLCB7MHg0ZSwweDkwLDB4ODMsMHgyNCwweDgwLDB4YzksMHgwMCwweDMyLDB4ZTAsMHgwZiwweDEwLDB4MDMsMHgyNSwweDAwLDB4ZjksMHgwMCB9fSwKKyB7MTYsIDB4OGViMCwgMCwgezB4MzIsMHg0NCwweDBmLDB4OTIsMHgyMywweDY0LDB4MDAsMHhjMSwweDAwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgxMywweGU0LDB4MDAgfX0sCisgezE2LCAweDhlYzAsIDAsIHsweGM5LDB4MDAsMHgyMiwweDQwLDB4MGMsMHg5MCwweDAzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ZWQwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweGI5LDB4MjAsMHgyZSwweDQwLDB4NDgsMHg5NiwweDIyLDB4MjUsMHgwMCwweGQ5LDB4YzAsMHhhMiB9fSwKKyB7MTYsIDB4OGVlMCwgMCwgezB4NzAsMHgwYiwweDk4LDB4MDIsMHgyNCwweDAwLDB4YjksMHg0MCwweGEyLDB4NzAsMHg0YiwweDkwLDB4MDIsMHgyNCwweDAwLDB4ZDkgfX0sCisgezE2LCAweDhlZjAsIDAsIHsweDAwLDB4YTIsMHg0MCwweDJjLDB4OTQsMHgyMiwweGU0LDB4MDIsMHg4OSwweDAwLDB4YTIsMHg0MCwweDI4LDB4OTQsMHgxMywweDIwIH19LAorIHsxNiwgMHg4ZjAwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMSwweDI0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg0MCB9fSwKKyB7MTYsIDB4OGYxMCwgMCwgezB4MGEsMHg5MCwweDAyLDB4MDQsMHgwMCwweDgxLDB4ODAsMHhhMiwweDQ0LDB4MGIsMHg5MSwweDAyLDB4MjUsMHgwMCwweDE5LDB4NDAgfX0sCisgezE2LCAweDhmMjAsIDAsIHsweDYyLDB4NDAsMHgwYiwweGI0LDB4MDIsMHg0NCwweDAwLDB4ODksMHgwMCwweDIwLDB4NDAsMHgwOCwweDkwLDB4ODIsMHhjNCwweDAxIH19LAorIHsxNiwgMHg4ZjMwLCAwLCB7MHg4MywweDAyLDB4MjgsMHg0MCwweDQ4LDB4OTAsMHg4MiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGY0MCwgMCwgezB4MDAsMHgwNCwweDA1LDB4ODAsMHhiMSwweDAwLDB4NmMsMHg1MSwweDA4LDB4MTQsMHgxYSwweDA1LDB4MDAsMHg5MywweDAwLDB4MjAgfX0sCisgezE2LCAweDhmNTAsIDAsIHsweDQwLDB4OGIsMHgxNCwweDAyLDB4MDUsMHgwMCwweGIxLDB4MjAsMHgyMCwweDUwLDB4MGIsMHgxNCwweDA2LDB4MDQsMHg4MCwweDkxIH19LAorIHsxNiwgMHg4ZjYwLCAwLCB7MHgyMCwweDIwLDB4NDAsMHgwOSwweDEwLDB4MDIsMHhjNCwweGE4LDB4ODEsMHgwMCwweDI4LDB4NGEsMHgwOCwweDkwLDB4NGEsMHg0MiB9fSwKKyB7MTYsIDB4OGY3MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAgfX0sCisgezE2LCAweDhmODAsIDAsIHsweDBlLDB4ODAsMHgwMywweDI4LDB4MDEsMHhjOCwweDUwLDB4MzIsMHg5NCwweDhiLDB4YTAsMHgwMywweDIwLDB4MDAsMHhiMCwweDUwIH19LAorIHsxNiwgMHg4ZjkwLCAwLCB7MHgzMiwweDgwLDB4MGYsMHg4MCwweDA3LDB4NjEsMHg1MSwweGM4LDB4NTAsMHgyMiwweDAwLDB4MGMsMHgwMCwweDAzLDB4ZTAsMHg4NCB9fSwKKyB7MTYsIDB4OGZhMCwgMCwgezB4YzgsMHgwNCwweDNhLDB4MDgsMHgwYywweDAwLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhmYjAsIDAsIHsweDk4LDB4OWQsMHhmNCwweDQwLDB4YmQsMHg0MSwweDNmLDB4NTAsMHgwZiwweGY0LDB4MDMsMHhmNSwweDEwLDB4ZmQsMHgwMCwweDNlIH19LAorIHsxNiwgMHg4ZmMwLCAwLCB7MHg0MCwweDBmLDB4ZDQsMHgwMywweGY0LDB4MDAsMHhmZiwweDEwLDB4MmYsMHg0MCwweDRmLDB4ZDQsMHg0MCwweGE0LDB4NDgsMHhmOSB9fSwKKyB7MTYsIDB4OGZkMCwgMCwgezB4MTIsMHgzZiwweDVhLDB4OGUsMHhkMiwweDgzLDB4ZjQsMHhhOCwweGY1LDB4MmMsMHgzNywweDRhLDB4MGYsMHhkMiwweDgzLDB4YTYgfX0sCisgezE2LCAweDhmZTAsIDAsIHsweDEyLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZTYsMHg4MCwweGZkLDB4MjgsMHgzZiwweDRjIH19LAorIHsxNiwgMHg4ZmYwLCAwLCB7MHgwZiwweDUwLDB4MDMsMHgzYywweDQ0LDB4Y2QsMHg0MCwweDNmLDB4ZDAsMHgwZCwweGQwLDB4MDIsMHgxNCwweDAxLDB4ZmQsMHhhMCB9fSwKKyB7MTYsIDB4OTAwMCwgMCwgezB4MzEsMHg0MCwweDAzLDB4ZDAsMHgwMywweGU3LDB4ODksMHhmOSwweDkwLDB4N2UsMHg1MCwweDBjLDB4OTQsMHgwMywweGU2LDB4YzAgfX0sCisgezE2LCAweDkwMTAsIDAsIHsweGM5LDB4MTAsMHgzMiwweDZkLDB4MGYsMHg5MSwweDAyLDB4YzYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MDIwLCAwLCB7MHgzOCwweDEwLDB4ZTAsMHg4MCwweGI4LDB4MDEsMHgyZSwweDBjLDB4OGIsMHg4NCwweDgyLDB4MjAsMHg0MiwweDg4LDB4YTAsMHg2ZSB9fSwKKyB7MTYsIDB4OTAzMCwgMCwgezB4MjAsMHgwOCwweDgwLDB4MDMsMHg2MCwweDAwLDB4OTgsMHhlOCwweDIyLDB4MDAsMHgwOSwweDgwLDB4MDIsMHhlMywweGMwLDB4ZTggfX0sCisgezE2LCAweDkwNDAsIDAsIHsweGQwLDB4MmUsMHgyOCwweDA4LDB4OGEsMHgyMywweGUyLDB4ODQsMHhkOCwweGEwLDB4MjIsMHgzZCwweDBiLDB4YzgsMHgwMiwweGNlIH19LAorIHsxNiwgMHg5MDUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwNSwweGM1LDB4YjAsMHhiMSwweDAwLDB4MmMsMHg0OCB9fSwKKyB7MTYsIDB4OTA2MCwgMCwgezB4MGIsMHgxMywweDAyLDB4MDQsMHgwMiwweGIxLDB4MjAsMHgyZSwweDQwLDB4ODgsMHgxMCwweDIyLDB4YzQsMHgwMCwweGIxLDB4MTQgfX0sCisgezE2LCAweDkwNzAsIDAsIHsweDI0LDB4NDAsMHgwYiwweDEwLDB4NTIsMHhjNCwweDAwLDB4YjEsMHgyMSwweDJkLDB4NDgsMHgwYSwweDUyLDB4MDIsMHhkNSwweDAwIH19LAorIHsxNiwgMHg5MDgwLCAwLCB7MHhiZCwweDAwLDB4YWQsMHg0MCwweDBiLDB4NTIsMHgwMiwweGQyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTA5MCwgMCwgezB4MTgsMHg1NSwweGE1LDB4MDAsMHhiOSwweDgyLDB4MmUsMHg0OSwweDhiLDB4YjAsMHgxMiwweDI0LDB4MTAsMHg5OSwweDAyLDB4MmUgfX0sCisgezE2LCAweDkwYTAsIDAsIHsweDQwLDB4MDgsMHhiMiwweDAwLDB4NjUsMHgwMCwweDk5LDB4ODAsMHgyNiwweDQ0LDB4MDksMHg5MSwweDAyLDB4ZTQsMHgwOSwweGE5IH19LAorIHsxNiwgMHg5MGIwLCAwLCB7MHgwNCwweDJlLDB4NDYsMHgwYSwweGQ0LDB4MDIsMHhiNCwweDAwLDB4YmQsMHg0MCwweDJmLDB4NDAsMHgwYiwweGQwLDB4MDIsMHhjNiB9fSwKKyB7MTYsIDB4OTBjMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNywweDQwLDB4ZjksMHg4MCwweDJlLDB4NjIgfX0sCisgezE2LCAweDkwZDAsIDAsIHsweDBmLDB4OWMsMHg0MiwweDI0LDB4MDAsMHg5OSwweDAxLDB4MmUsMHg2OCwweDJjLDB4OTIsMHgwMiwweDY0LDB4MDAsMHhiOSwweDQwIH19LAorIHsxNiwgMHg5MGUwLCAwLCB7MHhiNiwweDYwLDB4MGYsMHg5YSwweDAzLDB4ZTQsMHgwMCwweGI5LDB4MDAsMHgyZSwweDcwLDB4M2UsMHg5OSwweDA2LDB4ZTQsMHgwMiB9fSwKKyB7MTYsIDB4OTBmMCwgMCwgezB4ZjksMHgwMCwweDNlLDB4NDAsMHgwZiwweDk4LDB4MDMsMHhlOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkxMDAsIDAsIHsweDY4LDB4MDEsMHhhNiwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgxZiwweDEyLDB4YWIsMHhlNCwweDAwLDB4ZTksMHg5MCwweDNlIH19LAorIHsxNiwgMHg5MTEwLCAwLCB7MHg0OSwweDBlLDB4OTgsMHgwMywweGU0LDB4MDAsMHhmMSwweDAwLDB4M2EsMHg0MCwweDBkLDB4OTgsMHgwMywweGU0LDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4OTEyMCwgMCwgezB4MDEsMHgzZSwweDYwLDB4MDUsMHg5MCwweDEzLDB4ZTQsMHgwMCwweDU5LDB4MjAsMHgzMiwweDQwLDB4OGYsMHg5MSwweDAzLDB4ZGEgfX0sCisgezE2LCAweDkxMzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2OCwweDEwLDB4YTAsMHgwMCwweGM4LDB4MDgsMHgzZSwweDAxIH19LAorIHsxNiwgMHg5MTQwLCAwLCB7MHgwZiwweDg0LDB4NjMsMHgwMCwweDIyLDB4ZTgsMHgyMCwweDNlLDB4MTMsMHgwZiwweDg0LDB4MDMsMHhlMSwweGMwLDB4ZDgsMHg0YyB9fSwKKyB7MTYsIDB4OTE1MCwgMCwgezB4MzIsMHgwMCwweDBjLDB4ODQsMHg0MywweGUwLDB4MDAsMHhmOCwweDAwLDB4MjIsMHgxMCwweDBmLDB4ODQsMHgwMywweDAwLDB4MDAgfX0sCisgezE2LCAweDkxNjAsIDAsIHsweGM4LDB4MDAsMHhiMiwweDAwLDB4MGMsMHhjMCwweDAzLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MTcwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMCwweDhlLDB4MDAsMHgyZiwweDg2LDB4NGIsMHhlMCwweDAyLDB4MzksMHgwOCwweDhlLDB4MjAsMHgyZCB9fSwKKyB7MTYsIDB4OTE4MCwgMCwgezB4OTAsMHgwYiwweGVkLDB4OTIsMHhmOCwweDAyLDB4OGUsMHhlMCwweGEzLDB4OTgsMHgwOCwweGUwLDB4MDIsMHhlOCwweDA4LDB4YmEgfX0sCisgezE2LCAweDkxOTAsIDAsIHsweDAwLDB4NjIsMHg4MCwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDAsMHgwMiwweDgwLDB4MDIsMHg4MCwweDQ4LDB4ZTAsMHgwMywweDRhIH19LAorIHsxNiwgMHg5MWEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjgsMHgwNSwweDRjLDB4MDAsMHg4MywweDEwLDB4MmMsMHhmMCB9fSwKKyB7MTYsIDB4OTFiMCwgMCwgezB4MGEsMHgxNCwweDJhLDB4MGQsMHgxYSwweGIzLDB4MDEsMHgyNCwweGQwLDB4MGIsMHhiYywweDMyLDB4Y2MsMHgwOCwweDAzLDB4MDAgfX0sCisgezE2LCAweDkxYzAsIDAsIHsweDIwLDB4YzgsMHgwYiwweDMwLDB4MDIsMHhjYywweDAwLDB4YjMsMHgwMiwweDIyLDB4YzAsMHgwOSwweDMwLDB4MDIsMHgwYywweDExIH19LAorIHsxNiwgMHg5MWQwLCAwLCB7MHg4MywweDAwLDB4MjAsMHhjMCwweDI4LDB4MjAsMHgwMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTFlMCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDEsMHg4NSwweDAwLDB4MmQsMHgwMCwweDBiLDB4NzAsMHgwMiwweDE4LDB4MzIsMHg4NiwweDAwLDB4MmQgfX0sCisgezE2LCAweDkxZjAsIDAsIHsweGMwLDB4MGIsMHg2MCwweDE2LDB4ZmUsMHgwNCwweDg2LDB4MDAsMHgyNywweGEwLDB4OGIsMHg3MCwweDQyLDB4ZGMsMHg4MCwweGI3IH19LAorIHsxNiwgMHg5MjAwLCAwLCB7MHg4MCwweDIxLDB4MDEsMHgwOCwweGY4LDB4MGEsMHgxOCwweDAwLDB4ODYsMHgwOCwweDIwLDB4YTAsMHgwOCwweGU4LDB4MGEsMHg2OCB9fSwKKyB7MTYsIDB4OTIxMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDgsMHgzZSwweDAyLDB4YzYsMHg4MCwweDNkLDB4ZTAgfX0sCisgezE2LCAweDkyMjAsIDAsIHsweDBmLDB4NDgsMHgwMywweDA2LDB4MDQsMHhmNSwweDgyLDB4MzUsMHhlMCwweDBmLDB4NzgsMHgwMywweGRhLDB4MDAsMHhkMywweDgwIH19LAorIHsxNiwgMHg5MjMwLCAwLCB7MHgzMSwweDYwLDB4MDcsMHg3OCwweDAzLDB4ZGUsMHgyMCwweGYzLDB4YjAsMHg4MSwweGUwLDB4NGYsMHg2OCwweDA3LDB4MGUsMHgwMiB9fSwKKyB7MTYsIDB4OTI0MCwgMCwgezB4Y2YsMHg4MCwweDMxLDB4ZTAsMHgwYywweDc4LDB4MTMsMHgyYSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkyNTAsIDAsIHsweDA4LDB4MWQsMHhhZCwweGEwLDB4ZjksMHgwMCwweDNmLDB4MDAsMHgwZiwweGIwLDB4NTMsMHhmOCwweDEwLDB4YTksMHgwMCwweDNlIH19LAorIHsxNiwgMHg5MjYwLCAwLCB7MHgwMCwweDBmLDB4ODAsMHgwMSwweGVjLDB4MDAsMHhmYiwweDAyLDB4M2EsMHhjMCwweDBjLDB4YjAsMHgwMywweGVjLDB4MDAsMHhmYiB9fSwKKyB7MTYsIDB4OTI3MCwgMCwgezB4NzQsMHgzYywweDAwLDB4MGYsMHgyMCwweDAzLDB4ZTgsMHgwMCwweGZhLDB4MDAsMHgzZSwweDgwLDB4MGYsMHgzMCwweDAzLDB4YzIgfX0sCisgezE2LCAweDkyODAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4ZmUsMHgwMiwweDhmLDB4ODAsMHgzNSwweGUwIH19LAorIHsxNiwgMHg5MjkwLCAwLCB7MHg4ZCwweGQ5LDB4MDMsMHgyZSwweGM0LDB4ZjYsMHg4MCwweDMyLDB4YTQsMHgwYywweGI4LDB4MDMsMHhkZSwweDAwLDB4Y2YsMHg5MCB9fSwKKyB7MTYsIDB4OTJhMCwgMCwgezB4M2MsMHhlNCwweDBjLDB4YjgsMHgwMywweGZlLDB4NjUsMHhmZiwweDgwLDB4MGYsMHhlYywweDhmLDB4ZjgsMHgwMywweGZlLDB4MDAgfX0sCisgezE2LCAweDkyYjAsIDAsIHsweGM1LDB4ODAsMHgzMywweGUwLDB4MGYsMHg2OCwweDAzLDB4MTAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MmMwLCAwLCB7MHhhYSwweDExLDB4OWMsMHg4MCwweDg0LDB4YjAsMHgyMCwweDIwLDB4MjksMHg3MywweDBhLDB4MGUsMHg4MiwweGEyLDB4YTAsMHhhMiB9fSwKKyB7MTYsIDB4OTJkMCwgMCwgezB4YTAsMHg0ZiwweDNiLDB4MDMsMHg4NywweDg0LDB4YjIsMHg4MCwweDJjLDB4YTAsMHgwYSwweDdkLDB4MDIsMHhkZSwweDgwLDB4ZjcgfX0sCisgezE2LCAweDkyZTAsIDAsIHsweDIwLDB4MjUsMHgwNiwweDA4LDB4NzAsMHgwMiwweGM4LDB4NDAsMHg4NCwweDAwLDB4MzUsMHg4MCwweDBiLDB4NjAsMHgwMywweDZhIH19LAorIHsxNiwgMHg5MmYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4MTAsMHg4NiwweDM4LDB4MjcsMHhjMCB9fSwKKyB7MTYsIDB4OTMwMCwgMCwgezB4NDksMHg1NCwweDA2LDB4NTQsMHg0MCwweDFkLDB4MjAsMHgyMSwweGNhLDB4MDksMHg2MSwweDQwLDB4ZjgsMHg4MCwweGI3LDB4MjAgfX0sCisgezE2LCAweDkzMTAsIDAsIHsweDJmLDB4MDAsMHg4OSwweDcwLDB4MTIsMHhkYywweDgxLDB4YjcsMHgwNCwweDJkLDB4YzksMHgwYSwweDYwLDB4MDIsMHhjYywweDAwIH19LAorIHsxNiwgMHg5MzIwLCAwLCB7MHg4ZCwweDAwLDB4MmQsMHhjMCwweDBiLDB4ZjgsMHgwMiwweDA0LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTMzMCwgMCwgezB4NjAsMHgxNCwweGNkLDB4MjgsMHg4MCwweDAwLDB4MjQsMHgwMCwweDA5LDB4YjAsMHgyMiwweDRjLDB4MDIsMHhhMSwweDAxLDB4MjAgfX0sCisgezE2LCAweDkzNDAsIDAsIHsweDMwLDB4MWIsMHgyMywweDAyLDB4YWYsMHgyMCwweGIzLDB4MDgsMHgyYywweDgwLDB4MWIsMHgzMCwweDAwLDB4Y2MsMHgwNCwweGEzIH19LAorIHsxNiwgMHg5MzUwLCAwLCB7MHgwMSwweDI2LDB4MzAsMHgwOCwweGFjLDB4MjIsMHhlOCwweDAyLDB4ODAsMHgwOCwweDJlLDB4ODAsMHg0YiwweGI0LDB4MDIsMHg1OCB9fSwKKyB7MTYsIDB4OTM2MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDEwLDB4OGIsMHg4MCwweDM2LDB4ZjAgfX0sCisgezE2LCAweDkzNzAsIDAsIHsweDJkLDB4YmMsMHgwYiwweDZjLDB4MDEsMHhkYSwweDA0LDB4MjIsMHg0MCwweDdkLDB4OTQsMHgyMiwweGU0LDB4MDAsMHhhYiwweDQ0IH19LAorIHsxNiwgMHg5MzgwLCAwLCB7MHgyZSwweGMwLDB4MDksMHhiOCwweDAyLDB4ZmMsMHgwMCwweGJmLDB4MDAsMHgzZSwweGYwLDB4Y2EsMHg5MiwweDAyLDB4ZTQsMHgwMiB9fSwKKyB7MTYsIDB4OTM5MCwgMCwgezB4Y2IsMHgwMCwweDZlLDB4NDAsMHgwZiwweDg0LDB4MDEsMHgyZSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkzYTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwMCwweDNhLDB4ZTAsMHgyZSwweGJjLDB4MDMsMHg5OCwweDA4LDB4ZWEsMHg0MCwweDM2IH19LAorIHsxNiwgMHg5M2IwLCAwLCB7MHg0MywweDhjLDB4OTAsMHgwMywweGE0LDB4NDQsMHgyYSwweDQwLDB4M2UsMHgxMCwweDBlLDB4YjUsMHg4MywweGVjLDB4MTQsMHhmYiB9fSwKKyB7MTYsIDB4OTNjMCwgMCwgezB4MDAsMHgyNiwweDAwLDB4MGUsMHg5MiwweDAzLDB4ZTAsMHg0MCwweGZhLDB4MDAsMHgxNiwweDAwLDB4MGYsMHg4MCwweDEzLDB4ZTAgfX0sCisgezE2LCAweDkzZDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZWMsMHgwMiwweGZhLDB4ODAsMHgzZiwweGUyIH19LAorIHsxNiwgMHg5M2UwLCAwLCB7MHgwZiwweGIwLDB4MGIsMHgyNCwweDAwLDB4ZWYsMHg5MiwweGJiLDB4ZTAsMHgxYywweGQwLDB4MDMsMHg3NCwweDAwLDB4Y2YsMHgwNSB9fSwKKyB7MTYsIDB4OTNmMCwgMCwgezB4M2IsMHg0MCwweDBmLDB4YzgsMHgwMywweDVjLDB4MDAsMHhjZiwweDAwLDB4MzIsMHhjMiwweDRkLDB4YzEsMHgyMywweDM0LDB4NDAgfX0sCisgezE2LCAweDk0MDAsIDAsIHsweGNmLDB4MDAsMHgxNywweDQ0LDB4MGMsMHhkMSwweDgzLDB4MDAsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NDEwLCAwLCB7MHg4MSwweDA0LDB4NmMsMHgwMCwweDhiLDB4ODQsMHgyZSwweDU0LDB4MGIsMHhiYywweDBhLDB4MjksMHg4MCwweDhiLDB4ODAsMHgzMiB9fSwKKyB7MTYsIDB4OTQyMCwgMCwgezB4MDAsMHgwOCwweDljLDB4MDMsMHhhNywweDAwLDB4YWIsMHg4NCwweDJlLDB4N2MsMHgwYiwweDgwLDB4MDIsMHgyYywweDEwLDB4ZGIgfX0sCisgezE2LCAweDk0MzAsIDAsIHsweDAxLDB4MzYsMHgwMCwweDA4LDB4ODAsMHgwMiwweDIwLDB4MDAsMHg4MiwweDAwLDB4MjIsMHgwMCwweDA4LDB4OTAsMHgwMiwweDI0IH19LAorIHsxNiwgMHg5NDQwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDBjLDB4MDAsMHg4OSwweDEwLDB4NjYsMHg5MCB9fSwKKyB7MTYsIDB4OTQ1MCwgMCwgezB4MGIsMHhiOCwweDAyLDB4NmUsMHgxMiwweGEzLDB4NDEsMHgyMCwweDA0LDB4MGEsMHg5OCwweDIyLDB4ZTIsMHgwMCwweDg5LDB4MTkgfX0sCisgezE2LCAweDk0NjAsIDAsIHsweDJlLDB4YzAsMHg0YiwweDMxLDB4MjIsMHg2YywweDA4LDB4ODMsMHgwMCwweDIyLDB4YzAsMHgwOSwweDkwLDB4MDIsMHgyNCwweDAwIH19LAorIHsxNiwgMHg5NDcwLCAwLCB7MHg4OSwweDAwLDB4MmEsMHg0MCwweDA4LDB4ODAsMHgwMiwweDIwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTQ4MCwgMCwgezB4MDgsMHgxMCwweDBjLDB4MDAsMHg4MCwweDIwLDB4MmMsMHgwZSwweDFiLDB4MzAsMHgwMiwweDA0LDB4NDEsMHg4MCwweDIwLDB4MjAgfX0sCisgezE2LCAweDk0OTAsIDAsIHsweDEyLDB4MTgsMHgxNiwweDQyLDB4MDAsMHg1MCwweGEwLDB4NDAsMHgyYywweDg4LDB4MWIsMHgzMCwweDAyLDB4MGMsMHg4MSwweDkzIH19LAorIHsxNiwgMHg5NGEwLCAwLCB7MHgwMCwweDI0LDB4MDAsMHgwOCwweDEwLDB4MmEsMHgwMCwweDBhLDB4ODgsMHgwMCwweDI4LDB4MDAsMHgyOCwweDAwLDB4MGEsMHgwMiB9fSwKKyB7MTYsIDB4OTRiMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHg3YywweDExLDB4ZTgsMHgwMCwweDI2LDB4OTggfX0sCisgezE2LCAweDk0YzAsIDAsIHsweDBmLDB4YjAsMHgxMywweDIxLDB4MGMsMHhlYiwweDYwLDB4M2EsMHhkOCwweDI4LDB4ODQsMHhhMiwweGUxLDB4ODAsMHhjOCwweDIwIH19LAorIHsxNiwgMHg5NGQwLCAwLCB7MHgzZSwweDVlLDB4MWYsMHg4MiwweDAzLDB4N2MsMHgwMCwweGNmLDB4MDAsMHgzMiwweGMwLDB4NGQsMHg4MCwweDA3LDB4MjUsMHgwMCB9fSwKKyB7MTYsIDB4OTRlMCwgMCwgezB4YzksMHgwMCwweDMyLDB4NDAsMHgwYywweDkwLDB4MDMsMHgwMCwweDAxLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk0ZjAsIDAsIHsweGExLDB4MTEsMHhmYywweDAwLDB4ZjgsMHgxMywweDFlLDB4MDAsMHgwYiwweGYwLDB4MDEsMHhmMCwweGQwLDB4ZjksMHgxOSwweDFmIH19LAorIHsxNiwgMHg5NTAwLCAwLCB7MHgwOCwweDRmLDB4YzAsMHgxMywweGExLDB4MDAsMHhmOCwweDYyLDB4M2YsMHhjMCwweDBiLDB4YzQsMHgwNywweGVkLDB4MDAsMHhmZiB9fSwKKyB7MTYsIDB4OTUxMCwgMCwgezB4MDAsMHgzZiwweDAwLDB4MGYsMHhjMCwweDIzLDB4ZjAsMHhhMCwweGZjLDB4MDAsMHgzMywweDAwLDB4MGYsMHhkMCwweDAzLDB4ZTggfX0sCisgezE2LCAweDk1MjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHgwMCwweGZmLDB4MGMsMHgzZiwweDIwIH19LAorIHsxNiwgMHg5NTMwLCAwLCB7MHgwYywweGM5LDB4MDMsMHgzMiwweDAwLDB4Y2YsMHgzOCwweDNmLDB4ZDAsMHgwZiwweDQ4LDB4MDMsMHhmYywweGEwLDB4Y2UsMHgyMiB9fSwKKyB7MTYsIDB4OTU0MCwgMCwgezB4MzMsMHgwMCwweDBmLDB4YzEsMHgwMywweDNjLDB4MDAsMHhmZiwweDAwLDB4M2QsMHhjNCwweDRjLDB4YzAsMHgyMywweDhjLDB4ZTQgfX0sCisgezE2LCAweDk1NTAsIDAsIHsweGZmLDB4MTAsMHgzNywweDIwLDB4MDgsMHhmMSwweDAzLDB4ZjAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NTYwLCAwLCB7MHg4MCwweDEwLDB4ZmUsMHgwMCwweGJmLDB4ODAsMHgyZSwweDc0LDB4MDUsMHgyMiwweDAyLDB4YTIsMHgxMCwweGRmLDB4NjEsMHgyZiB9fSwKKyB7MTYsIDB4OTU3MCwgMCwgezB4ZDAsMHg4YiwweDkwLDB4MDIsMHgzZCwweGE0LDB4YWEsMHg5MCwweDIyLDB4ZjQsMHgwYiwweDA3LDB4MTIsMHgxZCwweDIwLDB4YmIgfX0sCisgezE2LCAweDk1ODAsIDAsIHsweGMwLDB4MmYsMHhkOCwweDg4LDB4OTcsMHg4MiwweGZkLDB4ODAsMHhlZiwweDcyLDB4MjIsMHgwOCwweDI4LDB4ZjYsMHgyMywweGUwIH19LAorIHsxNiwgMHg5NTkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4NDAsMHhiMywweDAwLDB4MmMsMHgwMCB9fSwKKyB7MTYsIDB4OTVhMCwgMCwgezB4MDgsMHg4MiwweDAyLDB4MjIsMHgwMCwweDgzLDB4MDEsMHgwOCwweGNjLDB4OGIsMHgyMCwweDgyLDB4Y2MsMHgwMCwweDkwLDB4MDAgfX0sCisgezE2LCAweDk1YjAsIDAsIHsweDIwLDB4MDAsMHg0YiwweDEyLDB4MDIsMHgwZCwweDgwLDB4YjMsMHg0MCwweDJjLDB4ZDgsMHgwOCwweDIwLDB4NDIsMHg4YywweDgwIH19LAorIHsxNiwgMHg5NWMwLCAwLCB7MHhiMywweDIwLDB4MjYsMHgwMiwweDE4LDB4MzMsMHgyNiwweGUyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTVkMCwgMCwgezB4YzAsMHgxNSwweGFjLDB4MDksMHhiYiwweDAwLDB4MmUsMHg2MCwweDA4LDB4ODAsMHgwMiwweGEyLDB4MDAsMHg5YiwweDAwLDB4MmUgfX0sCisgezE2LCAweDk1ZTAsIDAsIHsweGMwLDB4MGIsMHhhYywweDAyLDB4MmMsMHgwMCwweGJhLDB4MDYsMHgyMiwweGMyLDB4MGIsMHg5NCwweDAyLDB4YWMsMHgxMCwweGJiIH19LAorIHsxNiwgMHg5NWYwLCAwLCB7MHgwMCwweDJlLDB4YzEsMHgwOCwweGE4LDB4MDIsMHhlYywweDAwLDB4YWIsMHgwMCwweDIyLDB4MDAsMHgwOCwweGIwLDB4MDYsMHhmMCB9fSwKKyB7MTYsIDB4OTYwMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkwLDB4MTUsMHhlYywweDAwLDB4ZmIsMHgwNCwweDNlLDB4NjAgfX0sCisgezE2LCAweDk2MTAsIDAsIHsweDI4LDB4ODIsMHgxMywweDBlLDB4MDgsMHhjYiwweDAwLDB4M2EsMHhjMCwweDBmLDB4OGMsMHgwMywweGVjLDB4MTEsMHhkYiwweDIwIH19LAorIHsxNiwgMHg5NjIwLCAwLCB7MHhiMiwweDkwLDB4NGIsMHhhOCwweDBiLDB4MmMsMHgwMCwweGJiLDB4MDAsMHgyYywweGMwLDB4MGMsMHg4OCwweDEzLDB4YWMsMHgwMCB9fSwKKyB7MTYsIDB4OTYzMCwgMCwgezB4ZjMsMHgwMCwweDM2LDB4MDYsMHg0OCwweGIwLDB4MTIsMHhjNCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk2NDAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4ZmIsMHgwOCwweDNkLDB4NDAsMHg4ZiwweGVhLDB4MDEsMHhmNCwweDAwLDB4ZmYsMHgwMSwweDJmIH19LAorIHsxNiwgMHg5NjUwLCAwLCB7MHhjMCwweDBmLDB4ZDAsMHgyMiwweGZjLDB4MDQsMHhhZiwweDAwLDB4M2YsMHhjMCwweDhmLDB4ZTksMHgwMywweDdjLDB4MDAsMHhmZiB9fSwKKyB7MTYsIDB4OTY2MCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGYsMHg5MCwweDQzLDB4ZmMsMHgyMCwweGVmLDB4MDIsMHgzZiwweDAwLDB4OGYsMHhmMCwweDAzLDB4YjggfX0sCisgezE2LCAweDk2NzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1MCwweDEwLDB4YWMsMHgwOCwweGViLDB4MDAsMHgxMiwweDQwIH19LAorIHsxNiwgMHg5NjgwLCAwLCB7MHgwZiwweDkwLDB4MDMsMHgyOCwweDIwLDB4YWIsMHgwMCwweDNhLDB4YzAsMHg4ZiwweDg1LDB4ODMsMHhhYywweDEwLDB4ZjMsMHg1MCB9fSwKKyB7MTYsIDB4OTY5MCwgMCwgezB4MzIsMHg5MCwweDRjLDB4MzQsMHgxMywweDZjLDB4MDAsMHhmYiwweDAwLDB4M2UsMHhjMCwweDBjLDB4OTgsMHgwMywweDJjLDB4NDAgfX0sCisgezE2LCAweDk2YTAsIDAsIHsweGViLDB4ODAsMHgzMiwweDEyLDB4MGQsMHhiMCwweDBiLDB4NTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NmIwLCAwLCB7MHg4OCwweDAxLDB4M2MsMHgxMCwweDBmLDB4MDUsMHhhMiwweDUwLDB4MGMsMHgxMCwweDAyLDB4MjIsMHgxMCwweDhmLDB4MDAsMHgyMyB9fSwKKyB7MTYsIDB4OTZjMCwgMCwgezB4YzAsMHgwYiwweDg4LDB4MTIsMHgzYywweDAwLDB4OWIsMHg4MiwweDIyLDB4YzAsMHgwOCwweGIwLDB4MDIsMHgzYywweDAwLDB4OGYgfX0sCisgezE2LCAweDk2ZDAsIDAsIHsweGEwLDB4MmYsMHhjMCwweDA4LDB4YjAsMHgwMiwweDNjLDB4MDgsMHg4ZiwweDAyLDB4MjAsMHgwMCwweDA4LDB4ZjAsMHgwMywweDI2IH19LAorIHsxNiwgMHg5NmUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRkLDB4MjAsMHg5MywweDAwLDB4MjAsMHhiMiB9fSwKKyB7MTYsIDB4OTZmMCwgMCwgezB4MGIsMHgxMCwweDAyLDB4MDEsMHgwMCwweGEzLDB4MDAsMHg2OCwweGMwLDB4MGIsMHg4NCwweDAyLDB4YWMsMHgwMCwweGIzLDB4ODAgfX0sCisgezE2LCAweDk3MDAsIDAsIHsweDIwLDB4NDAsMHgwYSwweDMwLDB4MDIsMHg0YywweDAwLDB4YTMsMHgwNCwweDJjLDB4YzAsMHgwOCwweDAwLDB4MDIsMHgwZCwweDAwIH19LAorIHsxNiwgMHg5NzEwLCAwLCB7MHhhMywweDAwLDB4MjAsMHgyNCwweDA4LDB4MzAsMHgwMiwweDM4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTcyMCwgMCwgezB4NzAsMHgwMSwweDFjLDB4MjAsMHg5NywweDgwLDB4MjMsMHg2MCwweDA4LDB4NzgsMHgxMiwweDNhLDB4MDAsMHg4MywweDkxLDB4MjkgfX0sCisgezE2LCAweDk3MzAsIDAsIHsweGU0LDB4MGIsMHg1OSwweDAyLDB4MWUsMHgwMCwweDk3LDB4OTAsMHgyMCwweGZjLDB4MGEsMHg3OCwweDAyLDB4MWUsMHgwMCwweDg3IH19LAorIHsxNiwgMHg5NzQwLCAwLCB7MHg5MCwweDJkLDB4ZTAsMHgxOSwweDU5LDB4MDIsMHgxZSwweDgwLDB4ODMsMHg4MCwweDYxLDB4YTAsMHgwOCwweDc4LDB4MDIsMHgxOCB9fSwKKyB7MTYsIDB4OTc1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDQwLDB4ZDMsMHgzMiwweDMwLDB4MDYgfX0sCisgezE2LCAweDk3NjAsIDAsIHsweDBmLDB4MzAsMHgwMywweDA0LDB4NjQsMHhlMywweDAxLDB4MzgsMHhjNCwweDFmLDB4MzAsMHgwNywweDhjLDB4MTgsMHhmMSwweDAwIH19LAorIHsxNiwgMHg5NzcwLCAwLCB7MHgzMCwweDRjLDB4MGUsMHgzMCwweDAzLDB4NGMsMHgwMCwweGUzLDB4MDAsMHgyYywweGMwLDB4MGMsMHgyMCwweDAzLDB4MGUsMHgwMCB9fSwKKyB7MTYsIDB4OTc4MCwgMCwgezB4ZTMsMHgwMCwweDMyLDB4MDgsMHgwYywweGIxLDB4MDMsMHgxMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk3OTAsIDAsIHsweDQwLDB4MWQsMHg5YywweDgwLDB4ZWYsMHgxMCwweDNkLDB4NDQsMHg0ZiwweGYxLDB4MDcsMHhjYywweDAwLDB4ZmYsMHgwOCwweDM2IH19LAorIHsxNiwgMHg5N2EwLCAwLCB7MHhjNiwweGNmLDB4YjAsMHgwMywweGZjLDB4MDAsMHg5NywweDAwLDB4YmUsMHhjYywweDBkLDB4YjEsMHgwMywweGZkLDB4MDQsMHhmZiB9fSwKKyB7MTYsIDB4OTdiMCwgMCwgezB4MGMsMHgzZiwweGQyLDB4OWUsMHhlMCwweDRiLDB4ZmQsMHgyMCwweGZmLDB4MDIsMHgzZiwweDgwLDB4MGUsMHhmMCwweDEzLDB4ZDAgfX0sCisgezE2LCAweDk3YzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4ZWMsMHhjMCwweGNiLDB4MjgsMHgzZSwweGMwIH19LAorIHsxNiwgMHg5N2QwLCAwLCB7MHgwZiwweDgwLDB4MDMsMHhlYywweDAwLDB4ZmIsMHgwMSwweDMyLDB4ZTksMHgwYywweDI4LDB4MDMsMHgyYywweDAwLDB4ZmIsMHgwMCB9fSwKKyB7MTYsIDB4OTdlMCwgMCwgezB4MzIsMHhjMCwweDBjLDB4YjQsMHg4MywweDJjLDB4MDEsMHhlZiwweDAwLDB4YjIsMHhjOCwweDBjLDB4MjAsMHgwMywweDZkLDB4MDAgfX0sCisgezE2LCAweDk3ZjAsIDAsIHsweGNiLDB4MTAsMHgzZSwweDAwLDB4MGYsMHhiMiwweDAzLDB4ZWEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ODAwLCAwLCB7MHhjOCwweDkxLDB4OWMsMHhjNCwweDg3LDB4NjAsMHgyZCwweGMwLDB4MGIsMHg2MCwweDAyLDB4ZGMsMHgwMCwweGI3LDB4MTIsMHgyMCB9fSwKKyB7MTYsIDB4OTgxMCwgMCwgezB4Y2MsMHgwYSwweDcwLDB4MDIsMHgxYywweGMwLDB4YjMsMHgwMCwweGEwLDB4YzAsMHhjOCwweDcwLDB4MjIsMHgxYywweDgwLDB4YjcgfX0sCisgezE2LCAweDk4MjAsIDAsIHsweDI0LDB4MjEsMHhjOCwweDQ4LDB4NTAsMHgwMiwweDBjLDB4ODAsMHg4NywweDEwLDB4MmQsMHg0MCwweDBiLDB4NzIsMHg4MiwweGYyIH19LAorIHsxNiwgMHg5ODMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODEsMHgwMCwweDhlLDB4MDIsMHg4NywweDgwLDB4MmQsMHhlMCB9fSwKKyB7MTYsIDB4OTg0MCwgMCwgezB4MGIsMHg3OCwweDEyLDB4ZGUsMHgwMCwweGI3LDB4YTAsMHgyMSwweGUwLDB4MDgsMHhmOCwweDhlLDB4MWUsMHg0MCwweGI3LDB4ODggfX0sCisgezE2LCAweDk4NTAsIDAsIHsweDIxLDB4ZTAsMHgwOCwweDM4LDB4MDIsMHgxZSwweDQwLDB4YjMsMHhhMSwweDIwLDB4ZTgsMHg0OCwweGY4LDB4ODIsMHg1ZSwweDAyIH19LAorIHsxNiwgMHg5ODYwLCAwLCB7MHg4NywweDgwLDB4MmQsMHgyMiwweDBiLDB4NzksMHgwMiwweGUwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTg3MCwgMCwgezB4MDgsMHgwNCwweGNjLDB4MDQsMHg4MywweDAyLDB4MmMsMHhkNCwweDBiLDB4MzAsMHgwMiwweGNjLDB4MDAsMHhiMywweDAwLDB4YTAgfX0sCisgezE2LCAweDk4ODAsIDAsIHsweGMwLDB4OGEsMHgzOCwweDA2LDB4MGMsMHgwMCwweGIzLDB4ODAsMHgyMCwweGUxLDB4NDgsMHgzOSwweDEyLDB4MmMsMHgwMCwweGIzIH19LAorIHsxNiwgMHg5ODkwLCAwLCB7MHgwMCwweDIyLDB4YzAsMHgwOCwweGIwLDB4ODIsMHg2YywweDAwLDB4ODMsMHgwMCwweDJjLDB4NDgsMHgwYiwweDMwLDB4MDIsMHhjMiB9fSwKKyB7MTYsIDB4OThhMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MDUsMHhhOCwweDAwLDB4Y2EsMHgwMCwweDNmLDB4YTAgfX0sCisgezE2LCAweDk4YjAsIDAsIHsweDBmLDB4ZTQsMHgwMywweGQ4LDB4MDAsMHhmYSwweDAwLDB4MzIsMHg4MCwweDBjLDB4ZTgsMHgwMywweDI4LDB4MDAsMHhmYSwweDQwIH19LAorIHsxNiwgMHg5OGMwLCAwLCB7MHgzMiwweGE4LDB4MmMsMHhhMCwweDA5LDB4MjgsMHgwOCwweGYyLDB4MDAsMHgzMiwweDgwLDB4MGMsMHhlNCwweDAzLDB4NjgsMHgwMCB9fSwKKyB7MTYsIDB4OThkMCwgMCwgezB4Y2EsMHgwMCwweDNmLDB4ODAsMHgwZiwweGEwLDB4MDMsMHhmYiwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk4ZTAsIDAsIHsweDQ4LDB4MDAsMHhjMCwweDAwLDB4ZjgsMHgwMSwweDNlLDB4MTIsMHgwYiwweDgwLDB4MDMsMHhlMCwweDQwLDB4ZjgsMHgwMCwweDNlIH19LAorIHsxNiwgMHg5OGYwLCAwLCB7MHgwMCwweDRmLDB4ODQsMHgwMywweGUwLDB4MDQsMHhmMCwweDA4LDB4M2UsMHgwMCwweDRmLDB4MDAsMHgwMywweGUwLDB4MDAsMHhmOCB9fSwKKyB7MTYsIDB4OTkwMCwgMCwgezB4NDEsMHgzZSwweDAwLDB4MmYsMHg4NCwweDAzLDB4YTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfX0sCisgezE2LCAweDk5MTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTYsMHgwMCwweGM5LDB4MTIsMHgzZSwweDUwIH19LAorIHsxNiwgMHg5OTIwLCAwLCB7MHg4ZiwweDkwLDB4ODMsMHhlNCwweDIwLDB4YzEsMHgwMCwweDNhLDB4NDEsMHgwZiwweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCB9fSwKKyB7MTYsIDB4OTkzMCwgMCwgezB4MzAsMHg2OCwweDBjLDB4OTAsMHgwMywweDI0LDB4MDAsMHhkOSwweDAwLDB4M2EsMHg0MCwweDBlLDB4OTgsMHgwMywweDI0LDB4MDAgfX0sCisgezE2LCAweDk5NDAsIDAsIHsweGM5LDB4OTAsMHgzZSwweDY5LDB4MGMsMHgxMCwweDAzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5OTUwLCAwLCB7MHg4MCwweDA0LDB4NjcsMHg0YSwweDg5LDB4ODAsMHgyZSwweDUwLDB4MGIsMHg5MCwweDAyLDB4ZTQsMHg4MCwweGE5LDB4MDAsMHgyMiB9fSwKKyB7MTYsIDB4OTk2MCwgMCwgezB4NDAsMHgwYiwweDkwLDB4MDIsMHhlNCwweDAwLDB4YjksMHgwMSwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDEwLDB4ODkgfX0sCisgezE2LCAweDk5NzAsIDAsIHsweDAwLDB4MjIsMHg0MCwweDA4LDB4OTMsMHgwMiwweDI0LDB4MjIsMHg4OSwweDQyLDB4MmMsMHg2MCwweDQ4LDB4OTAsMHgwMiwweDIwIH19LAorIHsxNiwgMHg5OTgwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgxNSwweDI0LDB4MDAsMHg5OSwweDAwLDB4MmUsMHg0MCB9fSwKKyB7MTYsIDB4OTk5MCwgMCwgezB4MGIsMHg5MCwweDAyLDB4ZTQsMHgwMCwweDg5LDB4MDAsMHgyYSwweDQwLDB4MGIsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDAgfX0sCisgezE2LCAweDk5YTAsIDAsIHsweDIzLDB4NDAsMHgwOCwweGQwLDB4MDIsMHgyNCwweDAwLDB4OTksMHgwMCwweDJhLDB4NDAsMHgwYSwweDkwLDB4MDYsMHgyNCwweDQwIH19LAorIHsxNiwgMHg5OWIwLCAwLCB7MHg4OSwweDQxLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTljMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4ODAsMHg5MSwweDIwLDB4MmMsMHg0OCwweDBiLDB4MTAsMHgwMiwweGM0LDB4MDAsMHhhMSwweDIwLDB4MjAgfX0sCisgezE2LCAweDk5ZDAsIDAsIHsweDQ4LDB4MGIsMHgxMCwweDAyLDB4YzQsMHg4MCwweGIxLDB4MjAsMHhhMSwweDQ5LDB4MDgsMHg1MiwweDRhLDB4MDQsMHg4MCwweDgxIH19LAorIHsxNiwgMHg5OWUwLCAwLCB7MHgwMCwweDIwLDB4NDgsMHg0OCwweDEyLDB4MGEsMHgwNCwweDgwLDB4ODEsMHgyMCwweDJjLDB4NDAsMHgyOCwweDEyLDB4MDIsMHgwMiB9fSwKKyB7MTYsIDB4OTlmMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDA4LDB4ZDgsMHgwNCwweDNlLDB4ODAgfX0sCisgezE2LCAweDlhMDAsIDAsIHsweDBmLDB4ODUsMHgwMywweGUwLDB4MDAsMHhjMCwweDUwLDB4M2EsMHgxNCwweDBmLDB4YTUsMHgwMywweGUxLDB4NDAsMHhmOCwweDAyIH19LAorIHsxNiwgMHg5YTEwLCAwLCB7MHgzMiwweDgwLDB4MmMsMHhjNSwweDAzLDB4MjEsMHg0MCwweGRhLDB4MDAsMHgzYSwweDE0LDB4MGUsMHg4NSwweDQzLDB4MjEsMHg0MCB9fSwKKyB7MTYsIDB4OWEyMCwgMCwgezB4YzgsMHg1MiwweDNlLDB4MTQsMHgwYywweDg1LDB4MGIsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlhMzAsIDAsIHsweDg4LDB4MWQsMHhlNCwweDQ0LDB4ZTksMHgxMCwweDNmLDB4NDQsMHg0ZiwweGQwLDB4MDIsMHhmYywweDAwLDB4ZjksMHgxMiwweDNlIH19LAorIHsxNiwgMHg5YTQwLCAwLCB7MHg0NCwweDBmLDB4ZDAsMHgwMywweGU0LDB4NDAsMHhmZCwweDEwLDB4M2UsMHg0NCwweDRmLDB4OTEsMHgwMywweGU0LDB4NDAsMHhlOSB9fSwKKyB7MTYsIDB4OWE1MCwgMCwgezB4NDAsMHgzZSwweDQ0LDB4MGYsMHhkMSwweDAzLDB4ZTQsMHg0MCwweGY5LDB4MTIsMHgzZiwweDQwLDB4MGYsMHg5MSwweDAzLDB4ZTYgfX0sCisgezE2LCAweDlhNjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4ZjYsMHhhMCwweGZkLDB4ODAsMHhiMywweDQwIH19LAorIHsxNiwgMHg5YTcwLCAwLCB7MHgwYywweDEwLDB4MDMsMHgxNCwweDAwLDB4ZmQsMHhhMCwweDMyLDB4NDAsMHgwZiwweGQxLDB4MDMsMHhlNCwweDAwLDB4ZjUsMHg4NiB9fSwKKyB7MTYsIDB4OWE4MCwgMCwgezB4MzMsMHg2MCwweDJjLDB4OWEsMHg4MywweDI0LDB4MDQsMHhmZCwweGE4LDB4MjIsMHg0MCwweDBkLDB4NTAsMHg0MywweGY0LDB4MDAgfX0sCisgezE2LCAweDlhOTAsIDAsIHsweGZkLDB4MDAsMHgzMywweDQwLDB4MGYsMHg5MCwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5YWEwLCAwLCB7MHg3OCwweDEwLDB4ZTEsMHgwMCwweGI4LDB4MDAsMHgyMiwweDAwLDB4MjgsMHg4MCwweDAyLDB4MjAsMHgwMCwweGI4LDB4MDAsMHhhMiB9fSwKKyB7MTYsIDB4OWFiMCwgMCwgezB4MDAsMHgwYiwweDhhLDB4MTIsMHhlMCwweDAwLDB4YjgsMHgwNCwweDIyLDB4MTQsMHgwOCwweDg0LDB4MDIsMHgyMCwweDAwLDB4YjggfX0sCisgezE2LCAweDlhYzAsIDAsIHsweDQwLDB4MjAsMHgwMCwweDg4LDB4ODAsMHgwMiwweGUwLDB4MDAsMHhiOCwweDAwLDB4YTIsMHgwMCwweDBiLDB4ODAsMHgwMiwweDBlIH19LAorIHsxNiwgMHg5YWQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwNSwweGM0LDB4MDAsMHhiMSwweDQyLDB4MjAsMHg0MCB9fSwKKyB7MTYsIDB4OWFlMCwgMCwgezB4MDgsMHgxMCwweDAyLDB4MDQsMHgwMCwweGIxLDB4NDAsMHgyMCwweDQwLDB4MGIsMHgxMCwweDA2LDB4YzQsMHgwMCwweGIxLDB4NDAgfX0sCisgezE2LCAweDlhZjAsIDAsIHsweDI0LDB4NDAsMHgwOCwweDEwLDB4MDIsMHg0NCwweDA0LDB4YjEsMHgwMCwweDYwLDB4NDAsMHgwOSwweDEwLDB4MDIsMHhjNCwweDAwIH19LAorIHsxNiwgMHg5YjAwLCAwLCB7MHhiMSwweDAwLDB4MjAsMHg0MCwweDBiLDB4MTAsMHgwMiwweDEyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWIxMCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHhiOSwweDAyLDB4MjIsMHg2MCwweDA4LDB4OTQsMHgwMiwweDI0LDB4MDAsMHhiOSwweDAxLDB4MjIgfX0sCisgezE2LCAweDliMjAsIDAsIHsweDQwLDB4MGIsMHg5MCwweDA2LDB4ZTQsMHgwMCwweGI5LDB4MjAsMHgyNiwweDQwLDB4MDgsMHg5NCwweDAyLDB4NjQsMHgwOCwweGI5IH19LAorIHsxNiwgMHg5YjMwLCAwLCB7MHgwMCwweDIyLDB4NDAsMHgwOCwweDkyLDB4MDIsMHhlYywweDA4LDB4YjksMHgwNCwweDIyLDB4NDEsMHgwYiwweDEwLDB4MDIsMHgwNiB9fSwKKyB7MTYsIDB4OWI0MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDEwLDB4ZjEsMHgwMCwweDMyLDB4NjAgfX0sCisgezE2LCAweDliNTAsIDAsIHsweDBjLDB4OTQsMHgwYiwweDI1LDB4MDAsMHhmOSwweDAwLDB4MzIsMHg0MCwweDhmLDB4OTQsMHhkMywweGU0LDB4MDAsMHhmOSwweDAwIH19LAorIHsxNiwgMHg5YjYwLCAwLCB7MHgzNiwweDQwLDB4NGMsMHg5MCwweDBiLDB4NjQsMHgwMCwweGYxLDB4MDAsMHgzMiwweDQwLDB4MGQsMHg5MiwweDEyLDB4ZTQsMHgwMCB9fSwKKyB7MTYsIDB4OWI3MCwgMCwgezB4ZjksMHgwMCwweDMyLDB4NDAsMHgwZiwweDkwLDB4MGIsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDliODAsIDAsIHsweDY4LDB4NDEsMHhhNCwweDAwLDB4ZjksMHgwMCwweDNjLDB4NDAsMHg4ZiwweDkyLDB4MDMsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlIH19LAorIHsxNiwgMHg5YjkwLCAwLCB7MHg0MCwweDBmLDB4OWMsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4YmEsMHg0MCwweDJmLDB4OTAsMHgyMywweGE0LDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4OWJhMCwgMCwgezB4MDgsMHhiZSwweDQwLDB4Y2YsMHg5MCwweDAzLDB4ZTQsMHgxMCwweGYxLDB4MDEsMHgzZSwweDQxLDB4MGYsMHg5MCwweDAzLDB4ZGEgfX0sCisgezE2LCAweDliYjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHhjOCwweGY4LDB4MDAsMHgzZSwweDAzIH19LAorIHsxNiwgMHg5YmMwLCAwLCB7MHgwYywweDg0LDB4MDMsMHhhMSwweDEwLDB4ZTgsMHgwMCwweDMyLDB4MDAsMHg4YywweDg1LDB4ODMsMHhlMCwweDAwLDB4YzAsMHgwMCB9fSwKKyB7MTYsIDB4OWJkMCwgMCwgezB4MzgsMHgwYywweDJjLDB4MDAsMHgwMywweDYwLDB4MDAsMHhjOCwweDAwLDB4M2MsMHgwMCwweDBkLDB4ODAsMHgwMiwweDIwLDB4MTAgfX0sCisgezE2LCAweDliZTAsIDAsIHsweGM4LDB4MjAsMHhiMiwweDAyLDB4MGYsMHg4MCwweDAzLDB4Y2EsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5YmYwLCAwLCB7MHgyOCwweDA1LDB4MzksMHgxMCwweGJlLDB4MDQsMHg2ZiwweGEwLDB4MDgsMHhhMCwweDAyLDB4M2EsMHgwMCwweDgyLDB4MDAsMHhhMiB9fSwKKyB7MTYsIDB4OWMwMCwgMCwgezB4ODAsMHg4ZCwweGVjLDB4MDMsMHhhOCwweDAwLDB4OGEsMHgwMCwweDIzLDB4ODAsMHgwOCwweGEwLDB4MjIsMHgyOCwweDAwLDB4OGUgfX0sCisgezE2LCAweDljMTAsIDAsIHsweGNjLDB4MmYsMHg4MCwweDA4LDB4ZTgsMHhjMiwweGI4LDB4MDAsMHg4ZSwweDYwLDB4MjMsMHg5MCwweDBiLDB4YTAsMHgwMiwweGNhIH19LAorIHsxNiwgMHg5YzIwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRlLDB4MDgsMHhiMCwweDcyLDB4MmMsMHhkMCB9fSwKKyB7MTYsIDB4OWMzMCwgMCwgezB4MjgsMHhiMCwweDA2LDB4OGMsMHgwMSwweGExLDB4MDIsMHgyMCwweGMwLDB4MDgsMHgzOCwweDAyLDB4Y2MsMHgwMCwweDgzLDB4MDAgfX0sCisgezE2LCAweDljNDAsIDAsIHsweDIwLDB4YzAsMHgyOSwweDMwLDB4MDIsMHg0YywweDAwLDB4ODEsMHgwMCwweDJjLDB4YzAsMHgwOCwweDMyLDB4MDIsMHgwYywweDQwIH19LAorIHsxNiwgMHg5YzUwLCAwLCB7MHg4MywweDAwLDB4MjAsMHhmNCwweDBiLDB4MzAsMHgwMiwweGNhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWM2MCwgMCwgezB4YTAsMHgwMSwweDFjLDB4MDAsMHhiNCwweDAwLDB4MmQsMHhkMCwweDQ4LDB4ZjIsMHgwMiwweDFlLDB4MjEsMHg4NSwweDIwLDB4MjAgfX0sCisgezE2LCAweDljNzAsIDAsIHsweGU4LDB4MDksMHg3MiwweDAyLDB4OGUsMHg4MCwweDhmLDB4MDEsMHgyMCwweGMwLDB4MDksMHg3MiwweDAyLDB4MGUsMHg4MCwweDg3IH19LAorIHsxNiwgMHg5YzgwLCAwLCB7MHgwMCwweDJkLDB4Y2MsMHgxOCwweDU4LDB4MDIsMHg4ZSwweDAwLDB4ODUsMHgwMCwweDIxLDB4YzAsMHgwYiwweDcyLDB4MDIsMHhlOCB9fSwKKyB7MTYsIDB4OWM5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4YjQsMHg4MCwweDJkLDB4ZTAgfX0sCisgezE2LCAweDljYTAsIDAsIHsweDBjLDB4NzgsMHg4MywweDlhLDB4MDAsMHhlZCwweGQwLDB4MzEsMHhmNCwweDBjLDB4NmEsMHgwMywweGRlLDB4ODIsMHhjNywweDgwIH19LAorIHsxNiwgMHg5Y2IwLCAwLCB7MHgzOSwweGUwLDB4MGQsMHhmOCwweDgzLDB4NWUsMHhjMiwweGM1LDB4ODAsMHgzZCwweGU4LDB4MGMsMHg2OCwweDAzLDB4MTIsMHgwMCB9fSwKKyB7MTYsIDB4OWNjMCwgMCwgezB4Y2YsMHg4MCwweDMxLDB4ZTAsMHgwZiwweDdlLDB4ODMsMHhlYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDljZDAsIDAsIHsweDA4LDB4MGQsMHhhYywweDA4LDB4ZjgsMHgwMCwweDNjLDB4YzAsMHgwZiwweGIzLDB4MDMsMHhlYywweDAwLDB4ZjksMHgwMiwweDNlIH19LAorIHsxNiwgMHg5Y2UwLCAwLCB7MHhjOCwweDBmLDB4YjAsMHgwMywweGVkLDB4NDAsMHhmYiwweDAwLDB4YmUsMHg4MCwweDBlLDB4YjMsMHgwMywweGVkLDB4YzAsMHhmYiB9fSwKKyB7MTYsIDB4OWNmMCwgMCwgezB4MDAsMHgzZSwweGQyLDB4MmUsMHg4MCwweDAzLDB4ZWMsMHgwMiwweGY5LDB4MDAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4YzIgfX0sCisgezE2LCAweDlkMDAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmUsMHgwMCwweGYwLDB4OTEsMHgzMywweGUwIH19LAorIHsxNiwgMHg5ZDEwLCAwLCB7MHg4ZiwweGY4LDB4MDMsMHhmZSwweDAwLDB4ZmQsMHg4MCwweDNmLDB4ZTAsMHgwYywweDc4LDB4ODMsMHgzZiwweDAwLDB4Y2YsMHg4MCB9fSwKKyB7MTYsIDB4OWQyMCwgMCwgezB4M2YsMHhhMCwweDBjLDB4ZjgsMHgwMywweDNlLDB4MDAsMHhjZCwweDgwLDB4M2YsMHhlMCwweDBmLDB4ZjgsMHgxMywweGZlLDB4MTAgfX0sCisgezE2LCAweDlkMzAsIDAsIHsweGZmLDB4ODAsMHgzZiwweDIwLDB4MGYsMHhmOSwweDQzLDB4ZDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ZDQwLCAwLCB7MHhhOCwweDExLDB4OWMsMHgwMCwweGI0LDB4YzEsMHgzMSwweGMwLDB4MGIsMHg3MCwweDAyLDB4ZDQsMHgxMCwweGU1LDB4MjAsMHgyZiB9fSwKKyB7MTYsIDB4OWQ1MCwgMCwgezB4YzgsMHgwZiwweDQwLDB4MDMsMHg1YywweDAwLDB4ODcsMHgwMCwweDJkLDB4ODAsMHgwOCwweDcwLDB4MDIsMHgxYywweDQwLDB4ODcgfX0sCisgezE2LCAweDlkNjAsIDAsIHsweDEwLDB4MmQsMHhjMCwweDBiLDB4NzYsMHgwMiwweGRjLDB4ODAsMHhiNywweDAwLDB4MmQsMHhjMCwweDBiLDB4NzAsMHgwMiwweGVhIH19LAorIHsxNiwgMHg5ZDcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMCwweDljLDB4MDAsMHhiNiwweDIyLDB4MjEsMHhkMCB9fSwKKyB7MTYsIDB4OWQ4MCwgMCwgezB4MGIsMHg3MCwweDgyLDB4ZDgsMHg0MCwweGI1LDB4MDIsMHgyZCwweGMwLDB4ODgsMHg2NSwweDAyLDB4MGMsMHgwMCwweDg3LDB4MTggfX0sCisgezE2LCAweDlkOTAsIDAsIHsweDJjLDB4MDQsMHgwOCwweDMwLDB4MDIsMHg4YywweDAyLDB4ODUsMHgwMCwweDJkLDB4YzAsMHgwYiwweDcwLDB4NDYsMHg5MCwweDEwIH19LAorIHsxNiwgMHg5ZGEwLCAwLCB7MHhiNiwweDAwLDB4MmQsMHgwMCwweDBiLDB4NzAsMHgyMiwweGM0LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWRiMCwgMCwgezB4NjAsMHgxNCwweGNjLDB4MDgsMHhiMiwweDAwLDB4YTQsMHhjMCwweDBiLDB4MzAsMHg0MiwweGM2LDB4MTAsMHhhMSwweDAwLDB4MmMgfX0sCisgezE2LCAweDlkYzAsIDAsIHsweGMwLDB4MGEsMHgwMCwweDAyLDB4NGMsMHgwMCwweDgzLDB4MDAsMHgyYywweDA4LDB4MDgsMHgzMCwweDAyLDB4OGMsMHgwMCwweDgzIH19LAorIHsxNiwgMHg5ZGQwLCAwLCB7MHgwMCwweDJjLDB4YzAsMHgwYiwweDE4LDB4ODIsMHhjNCwweDAwLDB4YjAsMHgwMCwweDJjLDB4NDAsMHgwYiwweDMwLDB4MTIsMHhkOCB9fSwKKyB7MTYsIDB4OWRlMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGY4LDB4MTUsMHhhYywweDAwLDB4MzgsMHgwMCwweDMyLDB4NTAgfX0sCisgezE2LCAweDlkZjAsIDAsIHsweDBmLDB4ZjAsMHgwMywweGU2LDB4MjAsMHhmZCwweDAwLDB4M2YsMHhjMCwweDA4LDB4ZDAsMHgwMiwweDNjLDB4MDIsMHhjYiwweDgwIH19LAorIHsxNiwgMHg5ZTAwLCAwLCB7MHgzYywweDUwLDB4MmMsMHhmMCwweDBhLDB4YmMsMHgwMCwweGM5LDB4MDAsMHgzZiwweGMwLDB4MGYsMHhiZSwweDAzLDB4YWMsMHgwMCB9fSwKKyB7MTYsIDB4OWUxMCwgMCwgezB4ZmEsMHgwMiwweDJlLDB4ZjcsMHg0ZiwweGYwLDB4MDMsMHhlZSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDllMjAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZjEsMHgwMCwweDNhLDB4ZjAsMHgwZiwweGIwLDB4MDMsMHhlOSwweDAwLDB4ZjksMHgwMSwweDNlIH19LAorIHsxNiwgMHg5ZTMwLCAwLCB7MHhjMCwweDBmLDB4OTAsMHgxMywweGVjLDB4MDAsMHhmOSwweDAwLDB4M2UsMHg1NSwweDBmLDB4YjAsMHgwMSwweDZjLDB4MDAsMHhmYiB9fSwKKyB7MTYsIDB4OWU0MCwgMCwgezB4MDIsMHgzZSwweGMwLDB4MGYsMHg5MCwweDczLDB4ZTAsMHgwMCwweGY4LDB4NDEsMHgzZSwweDAwLDB4MGYsMHgzMCwweDAxLDB4ZTAgfX0sCisgezE2LCAweDllNTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4ZmMsMHgwMCwweGZjLDB4MDAsMHgzMywweGMwIH19LAorIHsxNiwgMHg5ZTYwLCAwLCB7MHgxZiwweGYwLDB4MTMsMHhmMCwweDA4LDB4ZmQsMHgwMiwweDNmLDB4YzAsMHg4ZCwweGMwLDB4MDMsMHgzYywweDAwLDB4Y2YsMHhhMCB9fSwKKyB7MTYsIDB4OWU3MCwgMCwgezB4M2YsMHg4MCwweDBjLDB4NzAsMHgwMywweDNjLDB4MTAsMHhmYywweDAwLDB4MzcsMHhjMCwweDBmLDB4ZTAsMHgwMywweGIwLDB4MDAgfX0sCisgezE2LCAweDllODAsIDAsIHsweGZlLDB4MDAsMHgzZiwweGMwLDB4MGMsMHhmMCwweDAzLDB4MDQsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ZTkwLCAwLCB7MHg4NCwweDA0LDB4NmUsMHgwMCwweGI5LDB4YzIsMHhhMiwweGYwLDB4MGIsMHhiMCwweDQyLDB4ZWIsMHgwMCwweGI5LDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4OWVhMCwgMCwgezB4YzAsMHgwZiwweDE4LDB4MDMsMHg2YywweDAwLDB4ZDksMHg4MSwweDJlLDB4YjAsMHgwYSwweGIwLDB4NDIsMHgyYywweDAwLDB4YmEgfX0sCisgezE2LCAweDllYjAsIDAsIHsweGM2LDB4MmUsMHhjMCwweDBiLDB4OGMsMHgwMiwweGUzLDB4MDAsMHhiOCwweGMwLDB4M2MsMHhhMCwweDBkLDB4YjAsMHgwMiwweDIwIH19LAorIHsxNiwgMHg5ZWMwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJmLDB4MDAsMHhiOCwweDgwLDB4MjIsMHhlMiB9fSwKKyB7MTYsIDB4OWVkMCwgMCwgezB4MGIsMHhiMCwweDAyLDB4ZTYsMHgyMCwweGI5LDB4MDAsMHgyYywweGMwLDB4MDgsMHhiOCwweDAyLDB4MGMsMHgwMCwweDhiLDB4MDAgfX0sCisgezE2LCAweDllZTAsIDAsIHsweDJlLDB4MzAsMHg0OCwweGIwLDB4MDIsMHgyYywweDAwLDB4YjksMHhjMCwweDJlLDB4YzEsMHgwYiwweDg4LDB4MDIsMHhlZSwweDEwIH19LAorIHsxNiwgMHg5ZWYwLCAwLCB7MHhiOSwweGMwLDB4MmUsMHgyMCwweDE5LDB4YjAsMHgwMiwweDIwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWYwMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDAsMHhiMCwweDAwLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgwNiwweGMwLDB4MDAsMHg5MSwweDAwLDB4MmMgfX0sCisgezE2LCAweDlmMTAsIDAsIHsweGMwLDB4NDksMHg4MCwweDAyLDB4NGMsMHgwNCwweDkxLDB4MDAsMHgyYywweDAwLDB4OGEsMHgzMCwweDBhLDB4MGMsMHgwNCwweGIxIH19LAorIHsxNiwgMHg5ZjIwLCAwLCB7MHgwMCwweDJjLDB4YzAsMHgxYiwweDAwLDB4MTIsMHg0OSwweDEwLDB4YjEsMHgwMCwweDJlLDB4MjAsMHgwOSwweDMwLDB4MDIsMHgwMiB9fSwKKyB7MTYsIDB4OWYzMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4YjgsMHgyMCwweDIyLDB4YzAgfX0sCisgezE2LCAweDlmNDAsIDAsIHsweDhiLDB4ZjAsMHgwMywweGUwLDB4MDgsMHhmZCwweDAwLDB4M2YsMHhjMCwweDBjLDB4YTAsMHgwMywweDNjLDB4MDAsMHhjYiwweDAwIH19LAorIHsxNiwgMHg5ZjUwLCAwLCB7MHgzZSwweDAwLDB4NGMsMHhmMCwweDBhLDB4M2MsMHgwMCwweGI5LDB4MDAsMHgzNywweGMxLDB4MGYsMHhhMCwweDAzLDB4ZTAsMHgwMCB9fSwKKyB7MTYsIDB4OWY2MCwgMCwgezB4ZmEsMHgwMCwweDNlLDB4MDAsMHgwZCwweGYwLDB4MGIsMHgwMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlmNzAsIDAsIHsweGEwLDB4MWQsMHhmMCwweDAxLDB4ZmMsMHg0MCwweDNmLDB4ODAsMHg0ZiwweGYwLDB4MDIsMHhmMCwweDAwLDB4ZmQsMHgwMCwweDNmIH19LAorIHsxNiwgMHg5ZjgwLCAwLCB7MHhjMSwweDBmLDB4YzAsMHgwMywweGZjLDB4MDAsMHhmZCwweDAwLDB4M2YsMHgwMCwweDRmLDB4ZjAsMHg2MywweGZjLDB4MDAsMHhmZCB9fSwKKyB7MTYsIDB4OWY5MCwgMCwgezB4MDQsMHgzZiwweGMwLDB4MGYsMHhjMCwweDAzLDB4ZjAsMHg4MCwweGZjLDB4MDAsMHg3YiwweDAwLDB4MGYsMHhmMCwweDQzLDB4ZTggfX0sCisgezE2LCAweDlmYTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZjgsMHgwMCwweGM4LDB4MTAsMHgzMywweDA0IH19LAorIHsxNiwgMHg5ZmIwLCAwLCB7MHgwYywweDQwLDB4MDIsMHgzNCwweDAwLDB4YzgsMHg4NSwweDFmLDB4YzAsMHgyZCwweGQ5LDB4MDMsMHhmYywweGMwLDB4ZGIsMHgyOCB9fSwKKyB7MTYsIDB4OWZjMCwgMCwgezB4MzcsMHg2NCwweDBmLDB4ZGIsMHgwMywweDNlLDB4MDAsMHhmZiwweDI1LDB4M2YsMHhjOCwweDBlLDB4ZjIsMHgwMywweGZlLDB4MjAgfX0sCisgezE2LCAweDlmZDAsIDAsIHsweGZmLDB4YTQsMHgzNywweGM0LDB4MGMsMHhjOCwweDAzLDB4MzAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ZmUwLCAwLCB7MHg4MCwweDEwLDB4ZTgsMHgwMCwweDg4LDB4MjAsMHgyMiwweDAwLDB4MDgsMHg4OCwweDEyLDB4MjYsMHgwNCwweDg5LDB4ODIsMHgyZSB9fSwKKyB7MTYsIDB4OWZmMCwgMCwgezB4ZjQsMHg0OCwweGI4LDB4MDIsMHhmYywweGM0LDB4OTgsMHhjMiwweDIyLDB4N2MsMHg0YiwweDlkLDB4NDIsMHgyNiwweDA4LDB4YmYgfX0sCisgezE2LCAweGEwMDAsIDAsIHsweDE4LDB4NzcsMHhlNCwweDA4LDB4ZjEsMHg4MiwweGVmLDB4MDAsMHhiYiwweGQwLDB4MjIsMHhkOCwweDA4LDB4OTAsMHg4MywweDYwIH19LAorIHsxNiwgMHhhMDEwLCAwLCB7MHgwMiwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHg0NSwweGM4LDB4MDQsMHhhMCwweDAwLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4YTAyMCwgMCwgezB4MGEsMHgwMCwweDAyLDB4MGMsMHgwMCwweDgyLDB4MDQsMHgyYywweGUwLDB4MDgsMHgxMCwweDAyLDB4Y2MsMHg4MCwweDgzLDB4MDAgfX0sCisgezE2LCAweGEwMzAsIDAsIHsweDI0LDB4MDAsMHgwYiwweDEwLDB4MDYsMHhjOCwweDAxLDB4YjMsMHgyMCwweDJjLDB4YzAsMHgyOSwweDMyLDB4MDIsMHhjOCwweDA4IH19LAorIHsxNiwgMHhhMDQwLCAwLCB7MHhiMSwweDAwLDB4MjQsMHhkMCwweDA4LDB4ODIsMHgwMiwweDYyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTA1MCwgMCwgezB4YzAsMHgxNSwweGE4LDB4MDAsMHhhOCwweDBjLDB4MjYsMHgwMCwweDBhLDB4ODAsMHgwMiwweDJjLDB4MTQsMHg4YSwweDAyLDB4NmUgfX0sCisgezE2LCAweGEwNjAsIDAsIHsweGUwLDB4MDgsMHhiMCwweDAyLDB4NGMsMHgwOCwweGE4LDB4MDAsMHgyNiwweDIwLDB4MGIsMHg5YywweDAyLDB4ZTQsMHgwMCwweGJiIH19LAorIHsxNiwgMHhhMDcwLCAwLCB7MHgwNCwweDIyLDB4YzAsMHgxOSwweGIwLDB4MDIsMHhlOCwweDAxLDB4YmIsMHgxMSwweDAyLDB4YzAsMHg4OCwweDkwLDB4MDIsMHhmMCB9fSwKKyB7MTYsIDB4YTA4MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTUsMHhlYywweDAyLDB4ZWEsMHg0MCwweGI2LDB4NjAgfX0sCisgezE2LCAweGEwOTAsIDAsIHsweDJlLDB4OTgsMHgwYiwweDIwLDB4MDIsMHhjOCwweDAyLDB4M2UsMHhjMCwweDBkLDB4OTgsMHgwMywweGVjLDB4MDIsMHhkYiwweDg4IH19LAorIHsxNiwgMHhhMGEwLCAwLCB7MHhiNiwweDIxLDB4MGYsMHg4OCwweDAzLDB4YWMsMHgwOCwweGZiLDB4MDAsMHgyYywweGMwLDB4MGUsMHhiMCwweDQzLDB4ZTUsMHg4MCB9fSwKKyB7MTYsIDB4YTBiMCwgMCwgezB4ZjAsMHg2MCwweDM2LDB4YzAsMHgwYywweDAxLDB4NDMsMHg0OCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGEwYzAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4ZDYsMHgwMSwweDNiLDB4NjQsMHg4NSwweGQ5LDB4MDMsMHhmMCwweDBjLDB4ZmYsMHgwMCwweDNlIH19LAorIHsxNiwgMHhhMGQwLCAwLCB7MHhjMSwweDBmLDB4ZmMsMHgyMSwweGVjLDB4MDAsMHhkNywweDkwLDB4M2IsMHg0MCwweDBmLDB4NTAsMHgwMywweDNjLDB4MDAsMHhmZiB9fSwKKyB7MTYsIDB4YTBlMCwgMCwgezB4MDAsMHgzZiwweGMwLDB4OGUsMHhmMCwweDAzLDB4ZjQsMHg0MCwweGZkLDB4ODgsMHgzZiwweGMwLDB4MmYsMHhkMCwweDAyLDB4NzggfX0sCisgezE2LCAweGEwZjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4OGMsMHgwMCwweGRhLDB4NDAsMHgzYywweDQwIH19LAorIHsxNiwgMHhhMTAwLCAwLCB7MHgwZiwweDEwLDB4MDMsMHg0OCwweDAwLDB4ZjksMHgyMiwweDNjLDB4YzIsMHgwZSwweDkwLDB4ODMsMHhlYywweDAyLDB4ZGIsMHgwNCB9fSwKKyB7MTYsIDB4YTExMCwgMCwgezB4M2EsMHgwOCwweDBmLDB4ODQsMHg4NywweGU4LDB4MDAsMHhjYiwweDAwLDB4M2UsMHhjNCwweDBlLDB4YjAsMHgwMywweGVkLDB4MDAgfX0sCisgezE2LCAweGExMjAsIDAsIHsweGU4LDB4NDIsMHgzYSwweGMwLDB4MGYsMHg4MCwweDBiLDB4MTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMTMwLCAwLCB7MHg4OCwweDA1LDB4MmMsMHgwOCwweDhhLDB4MDAsMHgyZSwweDQyLDB4OGIsMHg5MCwweDAyLDB4MjgsMHgxOCwweGJiLDB4NDksMHgyMiB9fSwKKyB7MTYsIDB4YTE0MCwgMCwgezB4ZDAsMHgzOCwweGJjLDB4ODIsMHhmYywweDAwLDB4ZTgsMHgwMiwweDIyLDB4NjIsMHhjYiwweDljLDB4MDAsMHhlZiwweDYwLDB4ZGYgfX0sCisgezE2LCAweGExNTAsIDAsIHsweDAwLDB4MmYsMHhjMCwweDBiLDB4ZjAsMHgwMiwweGVjLDB4MDAsMHgwOSwweDQwLDB4MzcsMHhjMCwweDBiLDB4OTAsMHgwMiwweDMyIH19LAorIHsxNiwgMHhhMTYwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDQ4LDB4MTAsMHgxMSwweDAwLDB4MmMsMHhhMCB9fSwKKyB7MTYsIDB4YTE3MCwgMCwgezB4MGIsMHgyMCwweDAyLDB4NDQsMHgwMCwweDkwLDB4YzAsMHg2NCwweDM0LDB4MjgsMHgzNCwweDAyLDB4Y2MsMHgwMCwweDkzLDB4ODQgfX0sCisgezE2LCAweGExODAsIDAsIHsweDI4LDB4NDAsMHgwYiwweDA4LDB4MDAsMHhjZSwweDAwLDB4OTMsMHgwMCwweDJjLDB4YzIsMHgwYSwweDMwLDB4MDIsMHhjMCwweDAwIH19LAorIHsxNiwgMHhhMTkwLCAwLCB7MHhiMiwweDQwLDB4MjIsMHhjMCwweDBiLDB4MjAsMHgwMiwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTFhMCwgMCwgezB4NzAsMHgwMSwweDFhLDB4NDAsMHg4NSwweDgwLDB4MmQsMHhhMCwweDBiLDB4NjgsMHgwNiwweDE2LDB4ODAsMHhiZCwweDkwLDB4MjUgfX0sCisgezE2LCAweGExYjAsIDAsIHsweDI0LDB4MTgsMHg3YiwweDQyLDB4ZGUsMHg0MCwweGEwLDB4ODAsMHgyMSwweGUwLDB4MGIsMHg2OCwweDAyLDB4ZDYsMHgwMCwweDk3IH19LAorIHsxNiwgMHhhMWMwLCAwLCB7MHg5MCwweDJkLDB4ZTAsMHgwYiwweDc4LDB4MDIsMHhjZSwweDQwLDB4OTIsMHg4MCwweDZkLDB4ZTQsMHgwYiwweDc4LDB4MDIsMHgwOCB9fSwKKyB7MTYsIDB4YTFkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgyOCwweDAwLDB4ZDEsMHg4MCwweDNjLDB4ODggfX0sCisgezE2LCAweGExZTAsIDAsIHsweDBiLDB4MjIsMHgwMywweDRlLDB4ODAsMHhmMiwweGExLDB4M2MsMHgyNCwweDJhLDB4MzksMHgwMywweGNjLDB4NDAsMHhkMywweGFjIH19LAorIHsxNiwgMHhhMWYwLCAwLCB7MHgzOCwweGM1LDB4MGYsMHgzMCwweDgyLDB4YzgsMHgwMCwweGQzLDB4MDAsMHgzYywweGMwLDB4MGUsMHgzMCwweDEzLDB4YzAsMHgwMCB9fSwKKyB7MTYsIDB4YTIwMCwgMCwgezB4ZjEsMHgwMCwweDM4LDB4YzAsMHgwZiwweGEwLDB4MDMsMHgxYSwweDA2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGEyMTAsIDAsIHsweDQwLDB4MWQsMHhiOCwweDEwLDB4ZmQsMHgzNCwweDNlLDB4ODAsMHgwZiwweGUwLDB4MDMsMHhlZSwweDAwLDB4NzIsMHgwMCwweDNhIH19LAorIHsxNiwgMHhhMjIwLCAwLCB7MHgwMCwweDBmLDB4YjAsMHg2MywweGVjLDB4NDAsMHhmOCwweDIyLDB4M2UsMHhjMCwweDBmLDB4ZjAsMHgwMywweGQ0LDB4NDAsMHhmZiB9fSwKKyB7MTYsIDB4YTIzMCwgMCwgezB4MDAsMHgzZiwweGQyLDB4MGYsMHhmMCwweDAzLDB4ZWMsMHgwMCwweGNmLDB4MDAsMHgzNywweGMwLDB4MGYsMHhmMCwweDAzLDB4ZDAgfX0sCisgezE2LCAweGEyNDAsIDAsIHsweDA2LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWUsMHgwMCwweGViLDB4MDAsMHgzNiwweGUwIH19LAorIHsxNiwgMHhhMjUwLCAwLCB7MHgwZCwweGIwLDB4MDMsMHgyMCwweDAwLDB4ZjAsMHg4MCwweDMzLDB4YzAsMHgwOCwweGI4LDB4MDMsMHgyYywweDgwLDB4Y2IsMHgwMCB9fSwKKyB7MTYsIDB4YTI2MCwgMCwgezB4MzIsMHg4MCwweDBmLDB4YTAsMHgxMywweDZlLDB4MDgsMHhjYiwweDI4LDB4MzIsMHhlMCwweDBkLDB4YjQsMHg4MywweGUyLDB4MDAgfX0sCisgezE2LCAweGEyNzAsIDAsIHsweGNhLDB4MDAsMHgzZSwweGUwLDB4MGMsMHhhOCwweDAzLDB4MDIsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMjgwLCAwLCB7MHhjOCwweDExLDB4OGMsMHgwNCwweDgzLDB4MDAsMHgyMSwweGMwLDB4NDgsMHg3MCwweDAyLDB4MTAsMHgwMCwweGI3LDB4MDIsMHgyMSB9fSwKKyB7MTYsIDB4YTI5MCwgMCwgezB4YzAsMHg0YSwweDcwLDB4MDIsMHgwZCwweDQ4LDB4ZDQsMHgwMCwweDM1LDB4YzAsMHgwZSwweDYwLDB4MDIsMHhkYywweDAwLDB4YTcgfX0sCisgezE2LCAweGEyYTAsIDAsIHsweDQwLDB4MjksMHhjMCwweDA5LDB4NzIsMHgwMiwweGQ0LDB4MTAsMHhhNiwweDAyLDB4MmYsMHhjOCwweDA4LDB4NzAsMHgwMiwweDEyIH19LAorIHsxNiwgMHhhMmIwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDllLDB4MDAsMHhhNywweDgwLDB4MjAsMHhlMCB9fSwKKyB7MTYsIDB4YTJjMCwgMCwgezB4MGEsMHgzOCwweDAyLDB4MWEsMHgwMCwweGI1LDB4ODAsMHgyMSwweGUwLDB4MDgsMHhmOCwweDIyLDB4NWMsMHg4MSwweDgzLDB4ODAgfX0sCisgezE2LCAweGEyZDAsIDAsIHsweDIxLDB4YTEsMHgwYiwweDc4LDB4ODIsMHg1YSwweDEwLDB4ODMsMHhhMCwweDIwLDB4ZTgsMHgwYSwweDdiLDB4MDIsMHhkYSwweDAwIH19LAorIHsxNiwgMHhhMmUwLCAwLCB7MHg5NywweGMwLDB4MmQsMHhlNCwweDA4LDB4ZTgsMHgwMiwweDA4LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTJmMCwgMCwgezB4MDgsMHgxNCwweGNjLDB4MDAsMHg4MywweDEwLDB4MjAsMHhjMCwweDBhLDB4MzAsMHgwMiwweDA4LDB4MDgsMHhiMywweDcwLDB4MjAgfX0sCisgezE2LCAweGEzMDAsIDAsIHsweGY4LDB4MGEsMHgzMCwweDQyLDB4NGMsMHgwNCwweDkzLDB4MTQsMHgyNiwweGM0LDB4MGEsMHgzOCwweDAyLDB4Y2MsMHgwMCwweGEzIH19LAorIHsxNiwgMHhhMzEwLCAwLCB7MHgwMCwweDI4LDB4YzAsMHhhYSwweDMwLDB4MDIsMHhjZSwweDQwLDB4YjMsMHg4OCwweDJjLDB4YzAsMHgyOCwweDMwLDB4MGEsMHgxMiB9fSwKKyB7MTYsIDB4YTMyMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOSwweDAwLDB4ZWEsMHg4MCwweGI2LDB4OTAgfX0sCisgezE2LCAweGEzMzAsIDAsIHsweDJmLDB4MjQsMHgwYiwweDM5LDB4MDQsMHhiZSwweGMwLDB4MzMsMHg5MiwweDBjLDB4YTAsMHgwYiwweDY4LDB4MTgsMHhjZSwweGMwIH19LAorIHsxNiwgMHhhMzQwLCAwLCB7MHgzMywweDgwLDB4MGYsMHhlOSwweDQzLDB4NzgsMHgwMCwweGNhLDB4MDAsMHgzMiwweDgwLDB4MGYsMHhhMCwweDEzLDB4ZjgsMHg0OCB9fSwKKyB7MTYsIDB4YTM1MCwgMCwgezB4ZGUsMHgwMCwweDNlLDB4ODAsMHgwYywweGUwLDB4MDIsMHgzYSwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGEzNjAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDI0LDB4ZjgsMHgwMCwweDNlLDB4MTIsMHgwZCwweDgwLDB4OTMsMHhiMCwweDI4LDB4ZjgsMHgwMCwweGJjIH19LAorIHsxNiwgMHhhMzcwLCAwLCB7MHgwMCwweDBmLDB4ODQsMHgwMywweGEwLDB4MDAsMHhmMCwweDAwLDB4M2UsMHgwMiwweDBlLDB4ODAsMHgwMCwweGUwLDB4MDAsMHhmOCB9fSwKKyB7MTYsIDB4YTM4MCwgMCwgezB4MDEsMHgzZSwweDAwLDB4MGQsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGU4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfX0sCisgezE2LCAweGEzOTAsIDAsIHsweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHhiMiwweDcwIH19LAorIHsxNiwgMHhhM2EwLCAwLCB7MHgwZiwweDkwLDB4MDEsMHgwNCwweDAwLDB4YzksMHgwMCwweDNlLDB4NDAsMHgwYywweDk4LDB4MDMsMHhlNCwweDA0LDB4ZTksMHgwOCB9fSwKKyB7MTYsIDB4YTNiMCwgMCwgezB4M2EsMHg0OCwweDBjLDB4OWEsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4MzYsMHg0MCwweDBiLDB4MTAsMHgwYiwweDI2LDB4ODAgfX0sCisgezE2LCAweGEzYzAsIDAsIHsweGYxLDB4ODAsMHgzMiwweDQwLDB4MGYsMHg5MCwweDAzLDB4YzIsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhM2QwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweGI5LDB4MDAsMHgyMiwweDYxLDB4MGIsMHg5MCwweDAyLDB4MjQsMHgwOCwweDg5LDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4YTNlMCwgMCwgezB4NDAsMHgwZCwweDlhLDB4MDIsMHhlNCwweDA4LDB4YTksMHgwMCwweDIyLDB4NzgsMHgwZCwweDk0LDB4MDYsMHhlNCwweDEwLDB4YjkgfX0sCisgezE2LCAweGEzZjAsIDAsIHsweDAwLDB4MjIsMHg1MCwweDBiLDB4OTAsMHgwMiwweDI1LDB4ODAsMHhiOSwweDgwLDB4MzYsMHg0MCwweDBiLDB4OTAsMHgwMiwweGUwIH19LAorIHsxNiwgMHhhNDAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDAsMHhiNSwweDAwLDB4MjMsMHg0MiB9fSwKKyB7MTYsIDB4YTQxMCwgMCwgezB4MGIsMHhkMCwweDBlLDB4YjQsMHgwMCwweDg5LDB4MDQsMHgyZSwweDYwLDB4MDgsMHg5MSwweDAyLDB4YzQsMHgwNCwweGI5LDB4MDQgfX0sCisgezE2LCAweGE0MjAsIDAsIHsweDJhLDB4YzAsMHgwOCwweDk0LDB4MDIsMHhlNCwweDEwLDB4YjEsMHgwMCwweDI2LDB4NDIsMHgwYSwweDkwLDB4MDIsMHgyNCwweDAwIH19LAorIHsxNiwgMHhhNDMwLCAwLCB7MHhiOSwweDIxLDB4NjIsMHg0MCwweDBiLDB4OTAsMHgwMiwweGM2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTQ0MCwgMCwgezB4MDgsMHgwNCwweDA1LDB4MDAsMHhiNSwweDQwLDB4MjEsMHg1MCwweDRiLDB4NTAsMHgwNiwweDk0LDB4MDIsMHg4MSwweDAwLDB4MmMgfX0sCisgezE2LCAweGE0NTAsIDAsIHsweDYwLDB4MjksMHgxNCwweDA2LDB4YzUsMHgwMCwweGExLDB4MjIsMHgyMCwweDUxLDB4ODksMHgxNCwweDAyLDB4YzQsMHgwMCwweGIxIH19LAorIHsxNiwgMHhhNDYwLCAwLCB7MHgyMCwweDIwLDB4NDgsMHgwYiwweDE0LDB4MDIsMHgwNCwweDAxLDB4YjEsMHgwMCwweDA0LDB4NTAsMHgwYiwweDEwLDB4MDIsMHhjMiB9fSwKKyB7MTYsIDB4YTQ3MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDA4LDB4YjgsMHgwMCwweDMyLDB4MDAgfX0sCisgezE2LCAweGE0ODAsIDAsIHsweDhmLDB4ODAsMHgwMywweGIwLDB4MDAsMHg4OCwweDAwLDB4M2UsMHgwMCwweDBjLDB4ODAsMHgwMywweGUwLDB4MDAsMHhlOCwweDA0IH19LAorIHsxNiwgMHhhNDkwLCAwLCB7MHgzYSwweDAwLDB4MGMsMHg4MCwweDAyLDB4ZTAsMHgwMCwweGY4LDB4NTAsMHgzNiwweDAwLDB4MGYsMHg4MCwweDAzLDB4MjAsMHgwNCB9fSwKKyB7MTYsIDB4YTRhMCwgMCwgezB4ZjgsMHgwMSwweDEyLDB4MDAsMHg0ZiwweDgwLDB4MDcsMHhlZSwweDA3LDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE0YjAsIDAsIHsweDk4LDB4MWQsMHhlNSwweDEwLDB4ZjksMHg0MCwweDNlLDB4NTAsMHgwZiwweDk0LDB4MDIsMHg2NSwweDAxLDB4ZmQsMHgwMSwweDNkIH19LAorIHsxNiwgMHhhNGMwLCAwLCB7MHg1MCwweDRmLDB4NTAsMHgxMywweGU1LDB4MDAsMHhmZCwweDEwLDB4MWYsMHg1MCwweDA3LDB4ZDQsMHg0MywweGQ0LDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4YTRkMCwgMCwgezB4MTAsMHgxZSwweDQ0LDB4MGYsMHg5NCwweDAzLDB4ZDUsMHgwMCwweGZkLDB4NDAsMHgzZSwweDUwLDB4MGYsMHg1MiwweDgzLDB4ZWUgfX0sCisgezE2LCAweGE0ZTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4ZTQsMHg0MCwweGY5LDB4NjAsMHgzZiwweDQ0IH19LAorIHsxNiwgMHhhNGYwLCAwLCB7MHgwZiwweGQwLDB4YzMsMHhlNCwweDMwLDB4ZjksMHgwMSwweDNlLDB4NDIsMHgwYywweGQwLDB4MDMsMHhlNywweDgwLDB4ZGQsMHhhMCB9fSwKKyB7MTYsIDB4YTUwMCwgMCwgezB4MzMsMHg0MCwweDBjLDB4ZDAsMHgwMywweGZjLDB4MDAsMHhjOSwweDkwLDB4M2YsMHg2OCwweDFlLDB4OTEsMHgwMywweDM0LDB4MDAgfX0sCisgezE2LCAweGE1MTAsIDAsIHsweGZkLDB4MDAsMHgzZSwweDY4LDB4MGMsMHg5NCwweDAzLDB4MGUsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNTIwLCAwLCB7MHgzOSwweDEwLDB4ZTAsMHgwMCwweGI4LDB4NDIsMHgyZSwweDA5LDB4MGIsMHg4NCwweDAyLDB4ZTEsMHgwNCwweGJlLDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4YTUzMCwgMCwgezB4MTAsMHgwOCwweDgwLDB4MjIsMHhjMiwweDgwLDB4ODgsMHg0MCwweDIyLDB4MDAsMHgwYSwweDgwLDB4MDIsMHhlMCwweDAwLDB4YTggfX0sCisgezE2LCAweGE1NDAsIDAsIHsweGQwLDB4MmUsMHgxMCwweDRiLDB4OGEsMHgwMywweDYwLDB4MDAsMHhiYSwweDAwLDB4MmUsMHgzMCwweDA4LDB4OGEsMHgwMiwweDg2IH19LAorIHsxNiwgMHhhNTUwLCAwLCB7MHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNSwweGM1LDB4ODAsMHhiMSwweDYwLDB4NmMsMHhkMCB9fSwKKyB7MTYsIDB4YTU2MCwgMCwgezB4MGIsMHgxMCwweDAwLDB4ZGMsMHgwYywweGI1LDB4MDAsMHgyYywweDQxLDB4MDgsMHgxMCwweDAyLDB4YzUsMHg4MCwweDkxLDB4MTAgfX0sCisgezE2LCAweGE1NzAsIDAsIHsweDY4LDB4YzAsMHgwOCwweDMwLDB4MDIsMHhlNCwweDBjLDB4ODEsMHgyMiwweDJjLDB4NTAsMHgwOCwweDEwLDB4NDIsMHgwNCwweDAwIH19LAorIHsxNiwgMHhhNTgwLCAwLCB7MHhhMSwweDAwLDB4MmMsMHg1YSwweDI4LDB4OTAsMHgwMiwweDUyLDB4MTAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTU5MCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg0MSwweDBiLDB4OTAsMHgxMiwweGY0LDB4ODAsMHhiZiwweDAwLDB4MmUgfX0sCisgezE2LCAweGE1YTAsIDAsIHsweDQwLDB4MDgsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGE5LDB4NjAsMHg2MCwweDQyLDB4MGEsMHg5NCwweDEyLDB4ZTUsMHgwMCwweGE5IH19LAorIHsxNiwgMHhhNWIwLCAwLCB7MHgwMCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHg2NCwweDIwLDB4YjksMHgwMCwweDBlLDB4NDAsMHgwOSwweDkwLDB4MDIsMHhjNiB9fSwKKyB7MTYsIDB4YTVjMCwgMCwgezB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDUsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDEgfX0sCisgezE2LCAweGE1ZDAsIDAsIHsweDBmLDB4OTAsMHgyMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMywweGU0LDB4MDQsMHhkMSwweGMwIH19LAorIHsxNiwgMHhhNWUwLCAwLCB7MHhiYSwweDcwLDB4MGMsMHg5OCwweDAzLDB4YzQsMHgwMCwweGM5LDB4MDAsMHgzZSwweDQwLDB4MGUsMHg5MCwweDAzLDB4MjUsMHg0MCB9fSwKKyB7MTYsIDB4YTVmMCwgMCwgezB4ZTksMHg0MCwweDNlLDB4NDAsMHgwYywweDEwLDB4MDMsMHg2OCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE2MDAsIDAsIHsweDY4LDB4MDEsMHhhNCwweDE0LDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MjMsMHhlNCwweDA4LDB4ZjksMHhhMCwweDNjIH19LAorIHsxNiwgMHhhNjEwLCAwLCB7MHhjMiwweDJmLDB4OTAsMHgwMywweGM0LDB4MDAsMHhkOSwweDgwLDB4M2UsMHg3MCwweDBmLDB4OTEsMHg0MywweGU0LDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4YTYyMCwgMCwgezB4MDAsMHgzZSwweDQwLDB4MWYsMHg5MCwweDEzLDB4ZTYsMHgyMCwweGY5LDB4YTAsMHgzYywweDQwLDB4NGUsMHg5MCwweDAzLDB4OWEgfX0sCisgezE2LCAweGE2MzAsIDAsIHsweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAwLDB4YTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAyIH19LAorIHsxNiwgMHhhNjQwLCAwLCB7MHgwZiwweDgwLDB4MTMsMHgyMCwweDBjLDB4ZmMsMHgwMSwweDNlLDB4MDAsMHgwYywweDgwLDB4MDMsMHhlMCwweDAwLDB4YzgsMHg1MCB9fSwKKyB7MTYsIDB4YTY1MCwgMCwgezB4MzIsMHgwMCwweDBmLDB4ODAsMHgwYiwweDIwLDB4MDgsMHhmOCwweDAwLDB4MzIsMHgwMCwweDJjLDB4ODAsMHg0MywweGUwLDB4NDAgfX0sCisgezE2LCAweGE2NjAsIDAsIHsweGY4LDB4MDIsMHgzYSwweDAwLDB4OGYsMHg4MCwweDAzLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNjcwLCAwLCB7MHhhOCwweDg1LDB4MjgsMHgwOCwweDNhLDB4MDAsMHgwZiwweDgwLDB4NGIsMHhhMSwweDAyLDB4MjgsMHgwMCwweGJhLDB4ODIsMHgyZSB9fSwKKyB7MTYsIDB4YTY4MCwgMCwgezB4ODgsMHg0OCwweGU0LDB4MDIsMHhlOCwweDAwLDB4YWUsMHg5MCwweGEzLDB4OTAsMHgwYiwweGUwLDB4MDAsMHgzOCwweDAwLDB4YmEgfX0sCisgezE2LCAweGE2OTAsIDAsIHsweDAwLDB4MzcsMHhhMCwweDA4LDB4YTAsMHgwMiwweGY4LDB4MDAsMHg5ZSwweGUwLDB4MjIsMHg4MCwweDBiLDB4YTAsMHgyMywweDQyIH19LAorIHsxNiwgMHhhNmEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MTAsMHgzMywweDAwLDB4MmMsMHhkMCB9fSwKKyB7MTYsIDB4YTZiMCwgMCwgezB4MGIsMHgxNCwweDAyLDB4MGMsMHgwMCwweGIyLDB4OTEsMHgyYywweGQwLDB4MDgsMHgzZSwweDAyLDB4NGMsMHgwMCwweDgzLDB4NDAgfX0sCisgezE2LCAweGE2YzAsIDAsIHsweDI0LDB4YzIsMHgwYiwweDM2LDB4MDAsMHg4YywweDAwLDB4YjMsMHgwMCwweDIwLDB4YzAsMHgwOSwweGIwLDB4MDIsMHhjZSwweDAwIH19LAorIHsxNiwgMHhhNmQwLCAwLCB7MHhiMywweGNjLDB4NjgsMHhjMCwweDBiLDB4MzAsMHgwMiwweDAyLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTZlMCwgMCwgezB4ZTAsMHgwMSwweDFjLDB4ODgsMHhiNywweDI1LDB4MmQsMHhjMCwweDhiLDB4NTgsMHgxYSwweDFjLDB4MDgsMHhiNiwweDAwLDB4MmQgfX0sCisgezE2LCAweGE2ZjAsIDAsIHsweGMwLDB4MDgsMHg3NCwweDAyLDB4ZGMsMHg0MCwweGE1LDB4MDAsMHgyNSwweGMwLDB4MWIsMHg3OCwweDAyLDB4OTQsMHgwOCwweGI3IH19LAorIHsxNiwgMHhhNzAwLCAwLCB7MHg4MCwweDI1LDB4ZTMsMHgwYSwweDcxLDB4MDIsMHhkYywweDAwLDB4OTcsMHg4MywweDIxLDB4YzgsMHg4YiwweGYxLDB4MDIsMHg0OCB9fSwKKyB7MTYsIDB4YTcxMCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZiwweDAwLDB4ZjcsMHhlMiwweDdkLDB4ZTAgfX0sCisgezE2LCAweGE3MjAsIDAsIHsweDBmLDB4NTgsMHg0MywweDFlLDB4MTgsMHhmNiwweDgwLDB4N2MsMHhlMCwweDJjLDB4NjgsMHgwMiwweDVlLDB4OTAsMHhjMywweDgwIH19LAorIHsxNiwgMHhhNzMwLCAwLCB7MHgzNSwweGUwLDB4MGYsMHhmOCwweDAzLDB4OWUsMHgwNCwweGZmLDB4YTEsMHgyMCwweGExLDB4MGQsMHg3OCwweDAzLDB4ZDYsMHgwMCB9fSwKKyB7MTYsIDB4YTc0MCwgMCwgezB4ZjcsMHg4MCwweDM5LDB4ZjgsMHgwZiwweDc4LDB4MDMsMHgwYSwweDA2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE3NTAsIDAsIHsweDQ4LDB4MWQsMHhhYywweDAwLDB4ZmIsMHg0MCwweDdmLDB4NDEsMHgwZiwweDEwLDB4MDMsMHhlYywweDA0LDB4ZmEsMHgwMCwweDNlIH19LAorIHsxNiwgMHhhNzYwLCAwLCB7MHhkMCwweDBmLDB4YTAsMHgwMywweGVkLDB4MDAsMHhlOSwweDAwLDB4MmEsMHgwMCwweDBmLDB4YjAsMHgwMywweDY0LDB4MDAsMHhmYiB9fSwKKyB7MTYsIDB4YTc3MCwgMCwgezB4NDAsMHgzZSwweGMwLDB4MGQsMHhiMCwweDAzLDB4ZTQsMHgwMCwweGQzLDB4MDAsMHgzNiwweGMwLDB4MGYsMHgzOCwweDAzLDB4YzIgfX0sCisgezE2LCAweGE3ODAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4ZmUsMHg0OCwweGNmLDB4YzAsMHgzMywweDYwIH19LAorIHsxNiwgMHhhNzkwLCAwLCB7MHg4YywweGM4LDB4NDMsMHhkNiwweDAwLDB4Y2MsMHg5NCwweDNmLDB4YjAsMHgwZCwweGY4LDB4MDMsMHg3ZiwweDAwLDB4ZGYsMHg4MCB9fSwKKyB7MTYsIDB4YTdhMCwgMCwgezB4M2YsMHg2MCwweDBmLDB4ZDgsMHgwMywweGRlLDB4MDAsMHhjZiwweGNhLDB4M2QsMHg2MCwweDBjLDB4ZjgsMHgxMywweDNhLDB4NDQgfX0sCisgezE2LCAweGE3YjAsIDAsIHsweGRkLDB4ODAsMHgzZiwweGUwLDB4MGYsMHhmOCwweDQzLDB4MTgsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhN2MwLCAwLCB7MHhhOCwweDExLDB4OWMsMHgwMCwweDhmLDB4MTEsMHgzMywweGMwLDB4NDgsMHg0MSwweDEyLDB4YzQsMHg0OCwweDg0LDB4MTEsMHgyYyB9fSwKKyB7MTYsIDB4YTdkMCwgMCwgezB4ZWMsMHgyYSwweGJhLDB4MDMsMHgzYywweDQwLDB4ZDcsMHg0OCwweDJkLDB4NDEsMHgwYiwweDYwLDB4MDIsMHhkNCwweDAwLDB4ZDcgfX0sCisgezE2LCAweGE3ZTAsIDAsIHsweDAxLDB4M2QsMHhjMCwweDBkLDB4ZjAsMHgwMywweDVhLDB4MDAsMHg4NCwweDE4LDB4MmQsMHhjMCwweDBiLDB4NzAsMHgwMywweDZhIH19LAorIHsxNiwgMHhhN2YwLCAwLCB7MHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDhjLDB4MDgsMHg4NywweDAwLDB4MjEsMHg0MCB9fSwKKyB7MTYsIDB4YTgwMCwgMCwgezB4MDksMHg0MCwweDAyLDB4ZDQsMHgwMCwweGE0LDB4OTIsMHgyZCwweGM4LDB4MDksMHg2MiwweDgyLDB4NWMsMHgwMCwweDg3LDB4MDAgfX0sCisgezE2LCAweGE4MTAsIDAsIHsweDJkLDB4YzAsMHgwYiwweDUwLDB4MDIsMHhmYywweDAwLDB4ODcsMHgwMCwweDJkLDB4MDQsMHgwOCwweDcwLDB4MDIsMHgxYywweDgwIH19LAorIHsxNiwgMHhhODIwLCAwLCB7MHhiNSwweDAwLDB4MmQsMHhjMCwweDBiLDB4ZjAsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTgzMCwgMCwgezB4NjAsMHgxMCwweGNjLDB4MDAsMHg4MywweDAwLDB4MjAsMHg0MCwweDA5LDB4MDAsMHgyMiwweGM3LDB4MDAsMHhhMCwweDQxLDB4MmMgfX0sCisgezE2LCAweGE4NDAsIDAsIHsweGMxLDB4NGIsMHgwOCwweDAyLDB4MmMsMHgwMCwweDkzLDB4NDAsMHgyYywweDdjLDB4MGIsMHgzOCwweDAyLDB4YzcsMHgyMCwweDkzIH19LAorIHsxNiwgMHhhODUwLCAwLCB7MHgwMCwweDJjLDB4YzAsMHgwOSwweDMwLDB4MDIsMHg0ZiwweDg0LDB4YjAsMHg4MCwweDJjLDB4YzAsMHgwYiwweDMyLDB4MTAsMHg1MCB9fSwKKyB7MTYsIDB4YTg2MCwgMCwgezB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGFhLDB4MTUsMHhiYywweDAyLDB4Y2YsMHgwMCwweGIyLDB4NDAgfX0sCisgezE2LCAweGE4NzAsIDAsIHsweDBkLDB4MTAsMHgwMywweGU4LDB4MjQsMHhlYiwweGMxLDB4M2UsMHhjMCwweDJkLDB4OTgsMHgxMywweDdjLDB4MGEsMHhjMiwweDQzIH19LAorIHsxNiwgMHhhODgwLCAwLCB7MHgzZSwweGIwLDB4MGYsMHhhOSwweDAzLDB4ZTksMHgyMCwweGNmLDB4MDAsMHgzZSwweGMwLDB4OGMsMHhmMCwweDAzLDB4MGQsMHgyMCB9fSwKKyB7MTYsIDB4YTg5MCwgMCwgezB4ZmEsMHhjMCwweDNmLDB4YzAsMHgwZiwweDc0LDB4MDEsMHgyYSwweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE4YTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwMiwweDNhLDB4NDAsMHg4ZSwweDkwLDB4MDMsMHhlOCwweDE0LDB4NWIsMHg1MCwweDNjIH19LAorIHsxNiwgMHhhOGIwLCAwLCB7MHg1MCwweDRlLDB4ODQsMHgwMywweGVjLDB4MDAsMHhmOCwweDQwLDB4M2UsMHg4MCwweDA3LDB4ODEsMHgwMywweGVjLDB4MDgsMHhmMyB9fSwKKyB7MTYsIDB4YThjMCwgMCwgezB4MDAsMHgzYSwweGMwLDB4OWYsMHgzMCwweDAzLDB4ZWMsMHgwMCwweGNiLDB4MjAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDIzLDB4ZTggfX0sCisgezE2LCAweGE4ZDAsIDAsIHsweDA0LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDkwLDB4ZmMsMHgwMCwweGZmLDB4MDAsMHgzZiwweDQwIH19LAorIHsxNiwgMHhhOGUwLCAwLCB7MHgwZiwweGQwLDB4MDMsMHgzOCwweDIwLDB4Y2YsMHgwOCwweDMyLDB4YzEsMHgwZSwweGQwLDB4MDMsMHhmYywweDAwLDB4ZmUsMHgwOCB9fSwKKyB7MTYsIDB4YThmMCwgMCwgezB4MzEsMHhlNSwweDBlLDB4ZTQsMHgwMywweDNhLDB4MDAsMHhmZiwweDAwLDB4MzMsMHg4MCwweDBmLDB4ZjAsMHgyYiwweDI0LDB4MDAgfX0sCisgezE2LCAweGE5MDAsIDAsIHsweGNjLDB4YTAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhOTEwLCAwLCB7MHg4MCwweDA0LDB4NmMsMHgwMCwweGJiLDB4MDAsMHgzYSwweDY5LDB4MGIsMHg5MCwweDZlLDB4MDgsMHgwMCwweDgzLDB4NDEsMHgzNiB9fSwKKyB7MTYsIDB4YTkyMCwgMCwgezB4NDAsMHhjOCwweDg4LDB4YzYsMHhlYywweDAwLDB4ODgsMHg0MCwweDM2LDB4ODAsMHgwZCwweGE4LDB4MDMsMHg2ZSwweDUwLDB4YmIgfX0sCisgezE2LCAweGE5MzAsIDAsIHsweDAwLDB4MzYsMHhjMCwweDBiLDB4YjAsMHgwMiwweDI0LDB4MDAsMHhkOSwweDA4LDB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMywweGUwIH19LAorIHsxNiwgMHhhOTQwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHhiYiwweDAwLDB4MmUsMHg2MCB9fSwKKyB7MTYsIDB4YTk1MCwgMCwgezB4MDMsMHg4MCwweDAyLDB4MjAsMHgwMCwweDg5LDB4MDEsMHgyMiwweDU4LDB4MDgsMHg5OCwweDIyLDB4ZWMsMHgwMSwweGFiLDB4MDAgfX0sCisgezE2LCAweGE5NjAsIDAsIHsweDIyLDB4MDAsMHgwYSwweDEwLDB4MDIsMHgyOCwweDAwLDB4YmIsMHgwMCwweDIyLDB4NDAsMHgwYiwweGIwLDB4MDIsMHgyOCwweDAwIH19LAorIHsxNiwgMHhhOTcwLCAwLCB7MHg4YSwweDAwLDB4MmUsMHhjMCwweDBiLDB4YjAsMHg0MiwweDIwLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTk4MCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDAsMHhiMywweDAwLDB4MjgsMHg0MCwweDhiLDB4MDAsMHgwMiwweDAyLDB4NDAsMHg4OSwweDAxLDB4MjQgfX0sCisgezE2LCAweGE5OTAsIDAsIHsweGQyLDB4MjgsMHgxMCwweDAyLDB4Y2MsMHgwMCwweDgzLDB4MTAsMHgyNCwweDIwLDB4MDgsMHgwOCwweDAyLDB4NGUsMHgwMCwweGIzIH19LAorIHsxNiwgMHhhOWEwLCAwLCB7MHgwNCwweGEwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwOCwweDg4LDB4OTIsMHgwMCwweDJjLDB4YzAsMHgwYiwweGIwLDB4MDIsMHhjMiB9fSwKKyB7MTYsIDB4YTliMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4ZmYsMHgwMCwweDNlLDB4MDAgfX0sCisgezE2LCAweGE5YzAsIDAsIHsweDBmLDB4ODAsMHgwMiwweDIwLDB4MTAsMHg4OSwweDUwLDB4MjIsMHhkOCwweDJlLDB4OTYsMHgyMiwweGZjLDB4MDAsMHhlYiwweDQwIH19LAorIHsxNiwgMHhhOWQwLCAwLCB7MHgzMiwweGMwLDB4MGEsMHg5MCwweDAzLDB4MjgsMHgwMCwweGZmLDB4MDAsMHgyMiwweDAwLDB4MGYsMHhiMCwweDAzLDB4MmMsMHhhMCB9fSwKKyB7MTYsIDB4YTllMCwgMCwgezB4YzgsMHgwMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHgwMCwweDA2LDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE5ZjAsIDAsIHsweGEwLDB4MTksMHhmYywweDAwLDB4ZmYsMHgwYywweDNiLDB4MDAsMHgwZiwweGMwLDB4MDIsMHg3MCwweDkwLDB4ZmQsMHgwMCwweDNlIH19LAorIHsxNiwgMHhhYTAwLCAwLCB7MHhjOSwweDBmLDB4OTYsMHhjMywweGZjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGZjLDB4MDQsMHhmZiB9fSwKKyB7MTYsIDB4YWExMCwgMCwgezB4MDQsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZWMsMHgwMCwweGZjLDB4MDAsMHgzZiwweGMwLDB4MGYsMHg3MCwweDAzLDB4ZTggfX0sCisgezE2LCAweGFhMjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZGMsMHg4MCwweGZiLDB4MjgsMHgzZiwweDAwIH19LAorIHsxNiwgMHhhYTMwLCAwLCB7MHgwYywweGMxLDB4MGIsMHhmMSwweDAyLDB4ZWQsMHgwMCwweDM3LDB4MzAsMHgyYywweGYxLDB4MDMsMHhiMiwweDQwLDB4ZmYsMHgwMCB9fSwKKyB7MTYsIDB4YWE0MCwgMCwgezB4YmIsMHhjMCwweDBmLDB4NDgsMHgwNiwweGIyLDB4MDAsMHhmYywweDgwLDB4M2IsMHhjYywweDBjLDB4ZjAsMHgwMywweDcwLDB4ODAgfX0sCisgezE2LCAweGFhNTAsIDAsIHsweGRmLDB4MjgsMHgzMywweDA0LDB4MGYsMHhmNCwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhYTYwLCAwLCB7MHg4MCwweDEwLDB4ZmYsMHg0MCwweGJmLDB4NjAsMHgyZSwweDIxLDB4MDgsMHg4MiwweDAyLDB4MjAsMHgwMCwweGE5LDB4MjgsMHgyYSB9fSwKKyB7MTYsIDB4YWE3MCwgMCwgezB4MDAsMHgwOSwweGZhLDB4MDIsMHgyMCwweDAwLDB4YmYsMHg1MSwweDIzLDB4ZDgsMHgwOSwweDk4LDB4MDIsMHhlNCwweDMwLDB4YjAgfX0sCisgezE2LCAweGFhODAsIDAsIHsweDAwLDB4MjMsMHhkMCwweDA4LDB4ZjUsMHhhMiwweDI1LDB4YTQsMHg4ZiwweDQyLDB4M2MsMHgxMCwweDBiLDB4YjAsMHgwYSwweDIwIH19LAorIHsxNiwgMHhhYTkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MDAsMHhiMywweDA4LDB4MmMsMHgwMCB9fSwKKyB7MTYsIDB4YWFhMCwgMCwgezB4MjgsMHgwMCwweDFhLDB4YzAsMHg4NCwweDIwLDB4MDAsMHgyNCwweGM4LDB4NGIsMHgzMSwweDQyLDB4YzAsMHgwMCwweDkzLDB4MDIgfX0sCisgezE2LCAweGFhYjAsIDAsIHsweDIwLDB4YzYsMHgwOCwweDAwLDB4MDYsMHhjMCwweDgxLDB4YjMsMHgwMCwweDJjLDB4ZDgsMHgwOSwweDMyLDB4MDIsMHhhMCwweDQwIH19LAorIHsxNiwgMHhhYWMwLCAwLCB7MHg5MywweDAxLDB4MjQsMHg0YywweDBiLDB4MzIsMHgwMiwweDIyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWFkMCwgMCwgezB4YzAsMHgxMSwweGFjLDB4MDAsMHhiYiwweDAyLDB4MmUsMHgwYSwweDA4LDB4ODAsMHg4MiwweDYwLDB4MDAsMHhhOCwweDAwLDB4MmUgfX0sCisgezE2LCAweGFhZTAsIDAsIHsweGUwLDB4MWIsMHhiMCwweDAyLDB4NjIsMHgwMSwweDNiLDB4MDAsMHgyMiwweGMxLDB4MDksMHg5MCwweDAyLDB4ZTIsMHgwMCwweGJiIH19LAorIHsxNiwgMHhhYWYwLCAwLCB7MHg2MCwweDI2LDB4YzEsMHgwOCwweGIwLDB4MmEsMHgyNiwweDAwLDB4OWIsMHgwNCwweDJlLDB4MjEsMHgwYiwweGIwLDB4MDIsMHgzMCB9fSwKKyB7MTYsIDB4YWIwMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTEsMHhlYywweDEwLDB4ZmIsMHgwMCwweDNlLDB4MTAgfX0sCisgezE2LCAweGFiMTAsIDAsIHsweDA4LDB4ODQsMHgxMywweGVjLDB4MDIsMHhhOSwweDA0LDB4MzYsMHgyMCwweDBmLDB4YjAsMHgwMywweGVlLDB4ODAsMHhmYiwweDAwIH19LAorIHsxNiwgMHhhYjIwLCAwLCB7MHgzYSwweGMwLDB4MGMsMHhhMCwweDAzLDB4YTIsMHg4MCwweDc5LDB4NDAsMHgxZSwweGMwLDB4OGMsMHhiMCwweDYzLDB4NmEsMHgxMCB9fSwKKyB7MTYsIDB4YWIzMCwgMCwgezB4ZDMsMHgwMCwweDM2LDB4YTIsMHgwNywweGIwLDB4MDMsMHgwMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFiNDAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4ZmYsMHgwMCwweDNlLDB4MjAsMHg0ZCwweDQxLDB4MDMsMHg5YywweDAwLDB4ZmQsMHgyMCwweGFiIH19LAorIHsxNiwgMHhhYjUwLCAwLCB7MHgwMCwweDBjLDB4ZjAsMHgwMywweGI4LDB4MDAsMHhmNywweDAwLDB4M2YsMHhjMCwweDRkLDB4YzksMHgwMywweGY0LDB4MDAsMHhmZiB9fSwKKyB7MTYsIDB4YWI2MCwgMCwgezB4MDAsMHgzYiwweGMwLDB4MmUsMHhmMCwweDAwLDB4ZjAsMHgwMCwweGVmLDB4MDAsMHgzZiwweDAwLDB4NGIsMHg3MCwweDAzLDB4ZjggfX0sCisgezE2LCAweGFiNzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHg4MCwweGViLDB4MDAsMHg3ZSwweDEwIH19LAorIHsxNiwgMHhhYjgwLCAwLCB7MHgyZSwweDg0LDB4MDMsMHhlYywweDAwLDB4ZTAsMHgwMCwweDMyLDB4NTAsMHgwZiwweGIwLDB4ODYsMHgyNSwweDAwLDB4ZGIsMHgyMCB9fSwKKyB7MTYsIDB4YWI5MCwgMCwgezB4M2EsMHhjMCwweDBkLDB4YjAsMHg2MywweGUxLDB4MTAsMHhmYiwweDQ4LDB4MzgsMHhjMSwweDBmLDB4MzAsMHgwMywweDJjLDB4MDQgfX0sCisgezE2LCAweGFiYTAsIDAsIHsweGZiLDB4MDgsMHgzMiwweGMwLDB4MGMsMHhiMCwweDBiLDB4OTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhYmIwLCAwLCB7MHhjOCwweDA1LDB4M2MsMHgwMCwweDhmLDB4MDAsMHg2NCwweDI5LDB4MjgsMHg4MCwweDAzLDB4ZWMsMHgwMiwweGU4LDB4MDQsMHhhOCB9fSwKKyB7MTYsIDB4YWJjMCwgMCwgezB4NTYsMHgwOCwweGZjLDB4MDcsMHhlMCwweDAwLDB4MGYsMHhhMCwweGJmLDB4YzAsMHgwYiwweDk1LDB4MDIsMHhhMCwweDAwLDB4YmIgfX0sCisgezE2LCAweGFiZDAsIDAsIHsweDA1LDB4MzcsMHhjMCwweDg5LDB4ZjAsMHgwYSwweDBkLDB4YzgsMHhiZiwweDA4LDB4MmEsMHg4MCwweDA4LDB4ZjAsMHgwMiwweDMyIH19LAorIHsxNiwgMHhhYmUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MDEsMHhiMywweDAyLDB4MjQsMHhlMCB9fSwKKyB7MTYsIDB4YWJmMCwgMCwgezB4MGEsMHgzMCwweDEyLDB4ODAsMHgwMywweGEzLDB4MDAsMHhhOCwweDAwLDB4MDIsMHhiOCwweDIyLDB4YzAsMHgwMCwweGIzLDB4MDAgfX0sCisgezE2LCAweGFjMDAsIDAsIHsweDI4LDB4YzEsMHgwYiwweDA0LDB4MDIsMHgwOCwweDAwLDB4YjksMHg0MCwweDI4LDB4YzAsMHgwYiwweDMwLDB4MDIsMHgwMywweDA0IH19LAorIHsxNiwgMHhhYzEwLCAwLCB7MHhiMywweDQ0LDB4MjAsMHgwMCwweDRhLDB4MzAsMHgwMiwweDM4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWMyMCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MjAsMHgxNywweGEwLDB4NjUsMHhlYywweDA4LDB4MzgsMHgwMiwweGMyLDB4NDEsMHhiMywweDkyLDB4MmIgfX0sCisgezE2LCAweGFjMzAsIDAsIHsweDY0LDB4MGEsMHgzOCwweDAyLDB4MzYsMHgwMSwweGI3LDB4OTAsMHgyZCwweGUwLDB4MDMsMHhmOCwweDAwLDB4OWEsMHgwMCwweGI1IH19LAorIHsxNiwgMHhhYzQwLCAwLCB7MHg4MCwweDJkLDB4ZTAsMHg4OSwweDc4LDB4MTIsMHgxZSwweDAwLDB4YjcsMHg4MCwweDI5LDB4ZTAsMHgwYSwweDc4LDB4MDIsMHgwOCB9fSwKKyB7MTYsIDB4YWM1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4NzMsMHhiMCwweDI0LDB4YzggfX0sCisgezE2LCAweGFjNjAsIDAsIHsweDRlLDB4MzAsMHgwYSwweDgwLDB4MDIsMHhlMiwweDAwLDB4MzgsMHg5NCwweDBlLDB4MzEsMHhhMiwweGM4LDB4MDAsMHg3MywweDAwIH19LAorIHsxNiwgMHhhYzcwLCAwLCB7MHgxOCwweGM0LDB4MDUsMHgwMCwweDAzLDB4MDAsMHgwMCwweGYzLDB4MDAsMHgzOCwweGMwLDB4MDcsMHhiMSwweDAzLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWM4MCwgMCwgezB4ZjMsMHgwMSwweDMwLDB4NDEsMHgwZSwweGIwLDB4MDMsMHg5MiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFjOTAsIDAsIHsweDQwLDB4MWQsMHhiZCwweDAwLDB4ZWYsMHgxMCwweDI2LDB4YzgsMHgwMywweGIxLDB4MDMsMHhlMCwweDAwLDB4ZWEsMHg4MSwweDc4IH19LAorIHsxNiwgMHhhY2EwLCAwLCB7MHhjNSwweDBjLDB4YjUsMHhlMywweGRjLDB4MDAsMHhjMywweDAwLDB4M2UsMHhjMSwweDBmLDB4ZjAsMHg4MywweGIwLDB4MDAsMHhmZiB9fSwKKyB7MTYsIDB4YWNiMCwgMCwgezB4MDAsMHgzNywweGMwLDB4MGQsMHhmNCwweDAzLDB4ZTQsMHgwMCwweGY3LDB4MDAsMHgzZiwweDQwLDB4MGQsMHhmMCwweDAzLDB4ZDAgfX0sCisgezE2LCAweGFjYzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWQsMHgxMCwweGNiLDB4MjgsMHgzZSwweGMwIH19LAorIHsxNiwgMHhhY2QwLCAwLCB7MHgwZCwweGIwLDB4MTMsMHhhYywweDEwLDB4ZmIsMHgwMCwweDNhLDB4ODAsMHgwNCwweGI0LDB4MDMsMHhhYywweDAwLDB4ZmIsMHgwNCB9fSwKKyB7MTYsIDB4YWNlMCwgMCwgezB4M2UsMHhjMCwweDBmLDB4YTQsMHhiMywweGUwLDB4MDAsMHhmYiwweDgwLDB4MzIsMHhjMCwweDBmLDB4YjAsMHgwMywweGU4LDB4MDAgfX0sCisgezE2LCAweGFjZjAsIDAsIHsweGZiLDB4NDgsMHhiMiwweDgwLDB4MGYsMHhiMCwweDQzLDB4ZWEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhZDAwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwMiwweDg3LDB4NDQsMHgzOCwweGMwLDB4OGQsMHgzMCwweDAyLDB4NGMsMHgwMCwweGZmLDB4MDAsMHgyMSB9fSwKKyB7MTYsIDB4YWQxMCwgMCwgezB4YzAsMHgwOCwweDcwLDB4MDMsMHg5YywweDAwLDB4YjMsMHg1MCwweDIxLDB4ZDQsMHg0ZSwweDYyLDB4MDIsMHhkMCwweDAwLDB4YmYgfX0sCisgezE2LCAweGFkMjAsIDAsIHsweDAwLDB4MzUsMHhkNCwweDA5LDB4NzAsMHgyMiwweGQ4LDB4MDAsMHhiZiwweDIyLDB4MjEsMHhjMCwweDBiLDB4NzIsMHgwMiwweGQyIH19LAorIHsxNiwgMHhhZDMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4NDAsMHg4NywweDgwLDB4MmQsMHhlMCB9fSwKKyB7MTYsIDB4YWQ0MCwgMCwgezB4MDksMHg3OCwweDAyLDB4ZGUsMHgwMCwweGI2LDB4ODAsMHgyOSwweGExLDB4MjgsMHg3YSwweDMyLDB4ZGUsMHgwMCwweDM3LDB4YTAgfX0sCisgezE2LCAweGFkNTAsIDAsIHsweDI1LDB4ZTAsMHgwOSwweDc4LDB4MDYsMHhkMiwweDAwLDB4YjcsMHg4MCwweDIxLDB4ZTgsMHgwYiwweDc5LDB4MDIsMHhkZSwweDAwIH19LAorIHsxNiwgMHhhZDYwLCAwLCB7MHhiNywweDkwLDB4MjEsMHhlMCwweDBiLDB4NzksMHgwMiwweGYwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWQ3MCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MDQsMHg4MywweDAxLDB4MjgsMHhjMCwweDg5LDB4YjAsMHgwYSwweDRmLDB4MDAsMHhiMiwweDAwLDB4MjAgfX0sCisgezE2LCAweGFkODAsIDAsIHsweGM0LDB4ODgsMHgzMCwweDE2LDB4Y2YsMHgwMCwweGJiLDB4MDQsMHgyMCwweGMxLDB4MGEsMHgzMiwweDA2LDB4YzIsMHgwMCwweGIzIH19LAorIHsxNiwgMHhhZDkwLCAwLCB7MHgwMCwweDI0LDB4YzAsMHgwOSwweDMwLDB4NDIsMHhlZiwweDEwLDB4YjMsMHgwMCwweDIwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhkMiB9fSwKKyB7MTYsIDB4YWRhMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4NGEsMHgwMCwweDNlLDB4ODAgfX0sCisgezE2LCAweGFkYjAsIDAsIHsweDJkLDB4YTAsMHgwYiwweGFhLDB4ODAsMHhmZSwweDAwLDB4MmIsMHg4MCwweDBjLDB4YTAsMHg0MywweGZiLDB4MzAsMHhmYSwweDAwIH19LAorIHsxNiwgMHhhZGMwLCAwLCB7MHgzZSwweDgwLDB4MGYsMHhhMCwweDgzLDB4ZmEsMHgwNCwweGZlLDB4MTgsMHgyMiwweDgwLDB4MGYsMHhhMCwweDAzLDB4ZmEsMHg4NCB9fSwKKyB7MTYsIDB4YWRkMCwgMCwgezB4ZjIsMHgwMCwweDMzLDB4YTIsMHgwZiwweGEwLDB4MDMsMHhmMiwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFkZTAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjAsMHgwMCwweDNlLDB4MDAsMHgyZiwweDgwLDB4MDMsMHhhMCwweDIwLDB4ZmMsMHgwMiwweDNlIH19LAorIHsxNiwgMHhhZGYwLCAwLCB7MHgwMCwweDFmLDB4ODQsMHgwMywweGEwLDB4MDAsMHhmOCwweDQwLDB4M2UsMHgwMCwweDRmLDB4ODAsMHgwMSwweGUwLDB4NDAsMHhmOCB9fSwKKyB7MTYsIDB4YWUwMCwgMCwgezB4NDAsMHgzZSwweDAwLDB4MGQsMHg4MCwweDEzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfX0sCisgezE2LCAweGFlMTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4YzYsMHgwMCwweGQ5LDB4MDAsMHgzNiwweDQwIH19LAorIHsxNiwgMHhhZTIwLCAwLCB7MHgwZiwweDkwLDB4MGIsMHgwNCwweDAwLDB4YzksMHgwMCwweDM2LDB4NjgsMHg2YywweDk0LDB4MDMsMHhlNCwweDIwLDB4YjksMHg5MCB9fSwKKyB7MTYsIDB4YWUzMCwgMCwgezB4MzYsMHg0MCwweDBjLDB4OTQsMHgwMywweGU0LDB4MDAsMHgyOSwweDgwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweDI0LDB4MjAgfX0sCisgezE2LCAweGFlNDAsIDAsIHsweGM5LDB4MDAsMHgzNiwweDQwLDB4MGYsMHg5MCwweDAzLDB4YzIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhZTUwLCAwLCB7MHg4MCwweDA0LDB4NjYsMHg1MCwweDg5LDB4MDAsMHgyMCwweDUwLDB4MDgsMHg5MCwweDAyLDB4MjQsMHgwOSwweGQ5LDB4MDAsMHgyMCB9fSwKKyB7MTYsIDB4YWU2MCwgMCwgezB4NDgsMHg0OCwweDkwLDB4MDYsMHhlNCwweDA0LDB4OTksMHhhMCwweDIyLDB4NDAsMHgwZCwweGI4LDB4MjIsMHg2NCwweDAwLDB4MDkgfX0sCisgezE2LCAweGFlNzAsIDAsIHsweDUwLDB4MzIsMHg0MCwweDBiLDB4OTAsMHgwMiwweDI3LDB4OTAsMHg4OSwweDQwLDB4MmEsMHg0MCwweDBiLDB4OTAsMHgwMiwweGUwIH19LAorIHsxNiwgMHhhZTgwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMSwweDI0LDB4MDAsMHg5OSwweDAwLDB4NjYsMHg0MiB9fSwKKyB7MTYsIDB4YWU5MCwgMCwgezB4MGEsMHhkMCwweDEyLDB4MzQsMHgwMCwweDg1LDB4MDAsMHgyNiwweDQwLDB4NGEsMHg5MCwweDAyLDB4ZTQsMHgwMSwweGI5LDB4MDEgfX0sCisgezE2LCAweGFlYTAsIDAsIHsweDI0LDB4NDAsMHg1OCwweDkwLDB4MTIsMHhjNCwweDAwLDB4MjksMHg0MCwweDJlLDB4NDAsMHgwYiwweDEwLDB4MGEsMHgyNCwweDgwIH19LAorIHsxNiwgMHhhZWIwLCAwLCB7MHg4OSwweDA1LDB4MjYsMHg0MSwweDBiLDB4OTAsMHgwMiwweGM2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWVjMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4ODAsMHg4MSwweDIwLDB4NjEsMHg0OCwweDA4LDB4NTIsMHgwMiwweDE0LDB4ODEsMHg5NSwweDIwLDB4MjAgfX0sCisgezE2LCAweGFlZDAsIDAsIHsweDQwLDB4MGEsMHgzNiwweDAyLDB4YzQsMHgwMCwweGIxLDB4MjAsMHgwMCwweDQ4LDB4NDEsMHgxMCwweDQyLDB4NDQsMHgwMSwweGExIH19LAorIHsxNiwgMHhhZWUwLCAwLCB7MHgwMCwweDI0LDB4NDgsMHgwYiwweDEyLDB4MTIsMHgwNCwweDgwLDB4ODEsMHgyMCwweDI4LDB4NDgsMHgwYiwweDEyLDB4MDIsMHhjYSB9fSwKKyB7MTYsIDB4YWVmMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4ZDgsMHg1MCwweDM2LDB4MDAgfX0sCisgezE2LCAweGFmMDAsIDAsIHsweDBlLDB4ODUsMHgyMywweDIxLDB4NDIsMHg4YywweDU0LDB4MzQsMHgxNCwweDBlLDB4ODAsMHgwMiwweGUxLDB4NDAsMHhmOCwweDUwIH19LAorIHsxNiwgMHhhZjEwLCAwLCB7MHgzNiwweDE0LDB4MDQsMHg4MCwweDAzLDB4ZTEsMHg0NCwweGU4LDB4NTAsMHg3ZSwweDE1LDB4MGYsMHg4NSwweDAzLDB4MjEsMHg0MiB9fSwKKyB7MTYsIDB4YWYyMCwgMCwgezB4NGEsMHgwMCwweDM2LDB4MTQsMHgwZiwweDgwLDB4MDMsMHhlZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFmMzAsIDAsIHsweDk4LDB4MWQsMHhjNCwweDQwLDB4ZjksMHgxMCwweDFlLDB4NDQsMHg0ZSwweDkxLDB4MDMsMHhlNCwweDQwLDB4ZjksMHgxMCwweDNmIH19LAorIHsxNiwgMHhhZjQwLCAwLCB7MHhjMCwweDBkLDB4OTEsMHgwMywweGY0LDB4MDAsMHhkOSwweDE0LDB4M2UsMHg0NCwweDBmLDB4OTAsMHgwMywweDc0LDB4MDAsMHhkZCB9fSwKKyB7MTYsIDB4YWY1MCwgMCwgezB4MDAsMHg3YSwweDQ0LDB4MGYsMHg5MSwweDAzLDB4ZjQsMHg0MCwweGY5LDB4MzgsMHgzZiwweDQ0LDB4MGYsMHg5MywweDgzLDB4ZTcgfX0sCisgezE2LCAweGFmNjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4ZjYsMHg4MCwweGY5LDB4YTQsMHgzZiwweDY4IH19LAorIHsxNiwgMHhhZjcwLCAwLCB7MHgwZSwweDllLDB4NDMsMHg2NywweDgwLDB4ZDksMHhlNCwweDNmLDB4NDEsMHgwZiwweGQ4LDB4NDMsMHgwNCwweDAwLDB4ZWQsMHhjMCB9fSwKKyB7MTYsIDB4YWY4MCwgMCwgezB4MzYsMHg0MCwweDBjLDB4OTAsMHgwMywweGU0LDB4MDAsMHhkNSwweDQwLDB4MzIsMHg0MCwweDBjLDB4OTAsMHgwMywweGY0LDB4MDAgfX0sCisgezE2LCAweGFmOTAsIDAsIHsweGRkLDB4MDAsMHgzMiwweDQwLDB4MmMsMHg5YSwweDAzLDB4YzYsMHgwMSwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhZmEwLCAwLCB7MHgzOCwweDEwLDB4ZTAsMHgwMCwweGU4LDB4YzAsMHgyZSwweDE0LDB4NGQsMHg4ZiwweDIyLDB4MjMsMHhjMCwweGY4LDB4ZjAsMHhhYSB9fSwKKyB7MTYsIDB4YWZiMCwgMCwgezB4MDAsMHgwYywweDgwLDB4MDMsMHhhMiwweGEwLDB4ZDgsMHg4MiwweDIyLDB4MDAsMHgwOCwweDgwLDB4MDIsMHhlOCwweDAwLDB4ZDggfX0sCisgezE2LCAweGFmYzAsIDAsIHsweDgwLDB4MmEsMHgwMCwweDA4LDB4ODAsMHgwMiwweGU4LDB4MDgsMHg4OCwweGE4LDB4MzYsMHgwMCwweDQ4LDB4OGEsMHg4MiwweGNlIH19LAorIHsxNiwgMHhhZmQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM1LDB4MDAsMHhiMSwweDQ4LDB4MmUsMHg0MCB9fSwKKyB7MTYsIDB4YWZlMCwgMCwgezB4MGEsMHgxMiwweDIyLDB4NDQsMHgwMCwweDkxLDB4MDQsMHhhNCwweDQxLDB4MGEsMHg5NCwweDA2LDB4MjQsMHgwMCwweDkxLDB4NDIgfX0sCisgezE2LCAweGFmZjAsIDAsIHsweDI0LDB4NDEsMHgwOSwweDEwLDB4MDIsMHhlNCwweDAxLDB4OTEsMHgyMCwweDI0LDB4NDAsMHgwOSwweDEwLDB4MDIsMHhjNCwweDAxIH19LAorIHsxNiwgMHhiMDAwLCAwLCB7MHg5MSwweDAwLDB4MmMsMHg0MCwweDA5LDB4MTQsMHgwMiwweGMyLDB4MDEsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjAxMCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHhhOSwweDAwLDB4MmUsMHg0MCwweDQ4LDB4MTAsMHgwMiwweDI0LDB4MDAsMHhiOSwweDQwLDB4YWEgfX0sCisgezE2LCAweGIwMjAsIDAsIHsweDQwLDB4MTgsMHhiMCwweDAyLDB4ZTQsMHgwOCwweDk5LDB4MDAsMHgyMiwweDQwLDB4MTksMHg5MCwweDQ2LDB4ZTQsMHg4MCwweDk5IH19LAorIHsxNiwgMHhiMDMwLCAwLCB7MHgwNCwweDJlLDB4NDAsMHgwOSwweDkwLDB4MDIsMHhlNCwweDAxLDB4OTksMHgwNCwweDI2LDB4NTAsMHgwOSwweDkwLDB4MDIsMHhjNiB9fSwKKyB7MTYsIDB4YjA0MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTEsMHhlNCwweDAwLDB4ZjksMHgwNiwweDNjLDB4NDAgfX0sCisgezE2LCAweGIwNTAsIDAsIHsweDBhLDB4OTAsMHgwMywweDY0LDB4MDIsMHhkOSwweDAwLDB4YjYsMHg1MCwweDBlLDB4OTAsMHgyMywweDI2LDB4MDEsMHhmOSwweDAwIH19LAorIHsxNiwgMHhiMDYwLCAwLCB7MHgzNiwweDQwLDB4MjksMHg5NCwweDgzLDB4ZTQsMHgwMCwweGQ5LDB4NDgsMHgzNiwweDQwLDB4MGQsMHg5MCwweDAzLDB4YzcsMHgwMCB9fSwKKyB7MTYsIDB4YjA3MCwgMCwgezB4ZDEsMHgwNywweDNhLDB4NTAsMHhjZCwweDkwLDB4MDMsMHhlOCwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIwODAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDA4LDB4ZTksMHgwMCwweDNlLDB4NDAsMHg4ZiwweDkwLDB4MDMsMHhjNCwweDA4LDB4ZjEsMHgwMCwweDNhIH19LAorIHsxNiwgMHhiMDkwLCAwLCB7MHg2OCwweDhmLDB4OTAsMHgwMywweGE0LDB4NDEsMHhmOSwweDAwLDB4YmUsMHg0MCwweDBlLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4YjBhMCwgMCwgezB4YzAsMHgzOCwweDQwLDB4MmUsMHg5MCwweDAzLDB4ZTYsMHg0MCwweGU5LDB4MDAsMHgzZSwweDY4LDB4MDYsMHg5MCwweDAzLDB4Y2EgfX0sCisgezE2LCAweGIwYjAsIDAsIHsweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGQ4LDB4MDUsMHgzZSwweDAwIH19LAorIHsxNiwgMHhiMGMwLCAwLCB7MHgwNywweDgwLDB4MGIsMHgyMCwweDAwLDB4ZTgsMHg0MCwweDNlLDB4MTAsMHgwZCwweDgyLDB4MDMsMHg2MCwweDAwLDB4YzgsMHgwMCB9fSwKKyB7MTYsIDB4YjBkMCwgMCwgezB4YjIsMHgwMCwweDhkLDB4ODMsMHgwMywweGUwLDB4MDAsMHhkOCwweDUwLDB4M2EsMHgwMCwweDFlLDB4ODAsMHgwMywweGUxLDB4MjQgfX0sCisgezE2LCAweGIwZTAsIDAsIHsweGY4LDB4MDAsMHhiMiwweDAwLDB4MGYsMHg4MCwweDAzLDB4MDIsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMGYwLCAwLCB7MHgyOCwweDA1LDB4MzgsMHgwMCwweDhhLDB4MDQsMHgyZiwweDg0LDB4NmEsMHhhMCwweDBiLDB4ZTgsMHgwOCwweDhlLDB4MDAsMHgzZCB9fSwKKyB7MTYsIDB4YjEwMCwgMCwgezB4ODAsMHg4OCwweGVjLDB4MDMsMHg2OCwweDEwLDB4YTYsMHgwMSwweDM2LDB4ODAsMHgwOCwweGE4LDB4MDAsMHhjOCwweDEwLDB4OGUgfX0sCisgezE2LCAweGIxMTAsIDAsIHsweDEwLDB4MjIsMHg4MCwweDA4LDB4YTAsMHgwMiwweGZiLDB4MjAsMHhiZSwweDUxLDB4MmEsMHg4MCwweDBiLDB4YTAsMHgwMiwweDgyIH19LAorIHsxNiwgMHhiMTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDQxLDB4MjEsMHg5MywweDAwLDB4MmMsMHhmMCB9fSwKKyB7MTYsIDB4YjEzMCwgMCwgezB4MzksMHgzMCwweDA2LDB4MGMsMHgwMCwweGEzLDB4MDAsMHgyOCwweDA4LDB4MjgsMHhiYywweDAyLDB4MmMsMHgwMCwweDgzLDB4ODAgfX0sCisgezE2LCAweGIxNDAsIDAsIHsweDJhLDB4YzAsMHgwOCwweDMwLDB4MDAsMHhjYywweDAwLDB4OWEsMHg4MCwweDI4LDB4YzAsMHgwYSwweDMwLDB4MDIsMHhjZCwweDAwIH19LAorIHsxNiwgMHhiMTUwLCAwLCB7MHhiMywweDA0LDB4NjIsMHhjMSwweDBiLDB4MzAsMHgwMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjE2MCwgMCwgezB4YTAsMHgwMSwweDFlLDB4MDQsMHgwNywweDExLDB4MmMsMHhkMCwweDBhLDB4MzIsMHgyMiwweGRjLDB4YzEsMHg4NywweDAwLDB4NmQgfX0sCisgezE2LCAweGIxNzAsIDAsIHsweGQwLDB4MDgsMHgzNCwweDAyLDB4N2MsMHgwMCwweGE3LDB4MDgsMHgyNCwweGM4LDB4MDgsMHg3MCwweDAyLDB4ZGMsMHg4MCwweDBmIH19LAorIHsxNiwgMHhiMTgwLCAwLCB7MHgwMCwweDIxLDB4YzQsMHgwOCwweDczLDB4MDYsMHhkYywweDAwLDB4YjIsMHgwMCwweDYxLDB4YzgsMHgwYiwweDNhLDB4MDIsMHg4OCB9fSwKKyB7MTYsIDB4YjE5MCwgMCwgezB4MDQsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgwYSwweDAwLDB4NTcsMHg4MSwweDJkLDB4YTAgfX0sCisgezE2LCAweGIxYTAsIDAsIHsweDJkLDB4N2MsMHgwMiwweDNlLDB4ODIsMHhlMywweGUwLDB4M2IsMHhlMCwweDBjLDB4NzgsMHgwMywweDFlLDB4MjAsMHhjNywweDgwIH19LAorIHsxNiwgMHhiMWIwLCAwLCB7MHhiOSwweGU4LDB4MmMsMHg3OCwweDAzLDB4ZmYsMHg4MCwweGQ2LDB4ODAsMHgzYiwweGVjLDB4MDIsMHg3YSwweDAzLDB4ZGUsMHgwMCB9fSwKKyB7MTYsIDB4YjFjMCwgMCwgezB4ZjcsMHg4MSwweDMxLDB4ZWMsMHg4ZiwweDdjLDB4MDMsMHgwYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIxZDAsIDAsIHsweDA4LDB4MWQsMHhhYywweDAwLDB4ZmIsMHgwMCwweDFlLDB4ODAsMHgyMywweGI2LDB4ODMsMHhlZCwweGEwLDB4ZGIsMHg2NCwweDNlIH19LAorIHsxNiwgMHhiMWUwLCAwLCB7MHhjMCwweDBlLDB4YjAsMHgwMywweGVkLDB4YzAsMHhmMiwweDAwLDB4M2UsMHhkNCwweDBhLDB4YjAsMHgwMywweGVjLDB4MzAsMHhlZSB9fSwKKyB7MTYsIDB4YjFmMCwgMCwgezB4NjQsMHgzZSwweGMwLDB4MDcsMHhiMCwweGMzLDB4ZTgsMHgwMCwweGZiLDB4MDEsMHgzZSwweGM4LDB4MGYsMHhiOCwweDAzLDB4YzIgfX0sCisgezE2LCAweGIyMDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZjYsMHgwMCwweGVmLDB4ODAsMHgzYiwweGUwIH19LAorIHsxNiwgMHhiMjEwLCAwLCB7MHgwZiwweGY4LDB4NjMsMHg3ZSwweDA0LDB4Y2YsMHhjMCwweGI3LDB4MjAsMHgwZSwweGY4LDB4MDMsMHhmYywweDAwLDB4YzcsMHg4MCB9fSwKKyB7MTYsIDB4YjIyMCwgMCwgezB4MzMsMHhmMCwweDBjLDB4Y2MsMHgwMywweGZlLDB4MDgsMHhmNywweGMxLDB4MzMsMHhlMCwweDRmLDB4ZjgsMHgwMywweGIyLDB4NDAgfX0sCisgezE2LCAweGIyMzAsIDAsIHsweGZmLDB4YTAsMHgzMSwweGU2LDB4MGMsMHhmOCwweDAzLDB4MTAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMjQwLCAwLCB7MHhhOCwweDExLDB4OWMsMHgwMCwweGVmLDB4MDIsMHgyMSwweDQwLDB4MmQsMHg3MCwweDAyLDB4MWMsMHgwMCwweGY3LDB4MTAsMHgyOSB9fSwKKyB7MTYsIDB4YjI1MCwgMCwgezB4NDAsMHgwOCwweDcwLDB4MjIsMHhmYywweGMwLDB4YTcsMHgwMCwweDNkLDB4YzAsMHgwOCwweDQwLDB4MDIsMHhkYywweDAwLDB4YjcgfX0sCisgezE2LCAweGIyNjAsIDAsIHsweDQwLDB4MjEsMHhjMCwweDBiLDB4NzAsMHgwMiwweGRhLDB4ODAsMHhiNywweDI0LDB4MjksMHhjNiwweDQ4LDB4ZjAsMHgwMiwweDJhIH19LAorIHsxNiwgMHhiMjcwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4MDAsMHhhNywweDAwLDB4MjgsMHg4NCB9fSwKKyB7MTYsIDB4YjI4MCwgMCwgezB4MGIsMHgzMCwweDAyLDB4MGMsMHgwMCwweDkzLDB4MDAsMHgyNSwweDgwLDB4MGEsMHg2MSwweDAyLDB4ZGMsMHgwMSwweGE3LDB4MTAgfX0sCisgezE2LCAweGIyOTAsIDAsIHsweDI0LDB4YzAsMHgwOCwweDQwLDB4ODIsMHhkYywweDAwLDB4OWYsMHgwMCwweDI1LDB4YzQsMHgwYiwweDcwLDB4MDIsMHg5NCwweDI1IH19LAorIHsxNiwgMHhiMmEwLCAwLCB7MHhiNywweDMyLDB4MjMsMHhjNCwweDFiLDB4NzAsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjJiMCwgMCwgezB4MjAsMHgxNCwweGNjLDB4MGMsMHhhMywweDAwLDB4MjAsMHgwMCwweDI5LDB4MzAsMHgwYSwweDBjLDB4MDAsMHhhMywweDAwLDB4NmMgfX0sCisgezE2LCAweGIyYzAsIDAsIHsweDAwLDB4MDgsMHgxMCwweDQyLDB4Y2QsMHgxMCwweGFhLDB4MDAsMHhhYywweGMwLDB4MDAsMHgwNCwweDAyLDB4Y2QsMHgwMCwweGJiIH19LAorIHsxNiwgMHhiMmQwLCAwLCB7MHgxMCwweDI0LDB4YzAsMHgwMywweDMwLDB4NDIsMHhjMywweDA5LDB4YjMsMHgwMCwweDJjLDB4ZDAsMHgwYSwweDMwLDB4MDIsMHgxOCB9fSwKKyB7MTYsIDB4YjJlMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHg4MCwweDAwLDB4ZWYsMHgwMCwweDNhLDB4NDAgfX0sCisgezE2LCAweGIyZjAsIDAsIHsweDA3LDB4ZjAsMHg0MywweDNjLDB4MDAsMHg5ZiwweGMwLDB4YjYsMHgxNCwweDBlLDB4ODAsMHgwNiwweGZjLDB4MDEsMHhjYiwweDAxIH19LAorIHsxNiwgMHhiMzAwLCAwLCB7MHgzNywweGMwLDB4YWMsMHhiNCwweDAyLDB4ZmMsMHgwMCwweGQ5LDB4MDEsMHgzNywweGMwLDB4NGIsMHhmMCwweDEzLDB4YWUsMHgwOCB9fSwKKyB7MTYsIDB4YjMxMCwgMCwgezB4ZmIsMHgwMCwweDMzLDB4ZDAsMHgyZSwweGYwLDB4MGIsMHgyYSwweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIzMjAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwNSwweDNlLDB4NDAsMHgwZiwweDMwLDB4MDMsMHhhYywweDE0LDB4ZmIsMHhhMCwweDNhIH19LAorIHsxNiwgMHhiMzMwLCAwLCB7MHhjMCwweDBmLDB4ODQsMHg0MywweGVjLDB4MDEsMHhmOSwweDQwLDB4M2UsMHhjMCwweDBmLDB4YTIsMHgwMywweGVjLDB4MjEsMHhmOSB9fSwKKyB7MTYsIDB4YjM0MCwgMCwgezB4MDAsMHgzYSwweGMwLDB4MGYsMHhiMCwweDAzLDB4ZTQsMHgyMCwweGYwLDB4MDAsMHhiYSwweGMwLDB4MGQsMHhiMCwweDAzLDB4ZTAgfX0sCisgezE2LCAweGIzNTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZjgsMHgwMCwweGQ3LDB4MDEsMHgzNSwweDY4IH19LAorIHsxNiwgMHhiMzYwLCAwLCB7MHg2ZCwweGYwLDB4MDMsMHgzYywweDAxLDB4ZTcsMHgwMCwweDMzLDB4YzAsMHgwZCwweGMwLDB4MDMsMHhmYywweDI0LDB4Y2YsMHgwMiB9fSwKKyB7MTYsIDB4YjM3MCwgMCwgezB4MzcsMHhjMCwweDBkLDB4ZDIsMHgwMiwweGZjLDB4MDAsMHhkZiwweDAxLDB4MzMsMHhjMCwweDVlLDB4NzAsMHgzMywweDFjLDB4MTggfX0sCisgezE2LCAweGIzODAsIDAsIHsweGNmLDB4NDEsMHgzMSwweGMyLDB4MGMsMHhmMCwweDAzLDB4NDAsMHg0MCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMzkwLCAwLCB7MHg4MSwweDAwLDB4NmMsMHgwMCwweDhiLDB4MDAsMHgyMiwweDUyLDB4MmEsMHhiMCwweDAzLDB4NmMsMHgwMCwweGFiLDB4MDAsMHgyOCB9fSwKKyB7MTYsIDB4YjNhMCwgMCwgezB4YzAsMHgwYSwweDhjLDB4MDIsMHhlYywweDEwLDB4OGIsMHhlMCwweDIyLDB4YzAsMHgwZiwweDgwLDB4MDIsMHhjYywweDAwLDB4OGIgfX0sCisgezE2LCAweGIzYjAsIDAsIHsweDgwLDB4MjIsMHhjMCwweDA4LDB4YjAsMHgwMiwweDJhLDB4MTAsMHhkOSwweDgwLDB4MjIsMHhjMCwweGM4LDB4YjAsMHgwMiwweGUwIH19LAorIHsxNiwgMHhiM2MwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDI0LDB4MDEsMHg5YiwweDAwLDB4MjYsMHg4MCB9fSwKKyB7MTYsIDB4YjNkMCwgMCwgezB4MjksMHhiMCwweDYyLDB4MGMsMHgwMCwweGFiLDB4MDEsMHg2YSwweDAwLDB4MDgsMHg5OCwweDAyLDB4Y2MsMHgwMCwweDliLDB4ODMgfX0sCisgezE2LCAweGIzZTAsIDAsIHsweDJlLDB4YzAsMHhjYiwweGI0LDB4MTIsMHhlYywweDAzLDB4OGIsMHg4MCwweDI4LDB4YzAsMHgwYSwweGIwLDB4MDYsMHhhMiwweDAwIH19LAorIHsxNiwgMHhiM2YwLCAwLCB7MHg4YiwweDAyLDB4NjIsMHhjMCwweDA4LDB4YjAsMHgwMiwweGUwLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjQwMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDEsMHg4MywweDE0LDB4MjAsMHgwMCwweDBhLDB4MzAsMHgwMiwweDRjLDB4MDAsMHg4MywweDAwLDB4MmEgfX0sCisgezE2LCAweGI0MTAsIDAsIHsweDQwLDB4MGEsMHgxMCwweDAwLDB4Y2MsMHgwMiwweDkzLDB4MDAsMHgyOCwweGMwLDB4MGEsMHgyMCwweDAyLDB4ZWMsMHgwMCwweDAzIH19LAorIHsxNiwgMHhiNDIwLCAwLCB7MHgwMCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MTYsMHgwMCwweDgwLDB4OTEsMHgwMCwweDYwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhjMiB9fSwKKyB7MTYsIDB4YjQzMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4ZGIsMHgwMCwweDM2LDB4ODAgfX0sCisgezE2LCAweGI0NDAsIDAsIHsweDJkLDB4ZjAsMHgwMywweDNjLDB4MDAsMHhhZiwweDAwLDB4M2EsMHg4MCwweDBkLDB4ODAsMHgwMywweGZjLDB4MDAsMHg1YiwweDAwIH19LAorIHsxNiwgMHhiNDUwLCAwLCB7MHgzNywweGMwLDB4MDksMHg5MCwweDAzLDB4ZmMsMHgwMCwweGRmLDB4MDAsMHgzMywweGMwLDB4MGEsMHhmMCwweDAzLDB4YTQsMHgyMCB9fSwKKyB7MTYsIDB4YjQ2MCwgMCwgezB4Y2IsMHgwMCwweGIzLDB4YzAsMHg4YywweGIwLDB4MDMsMHg0MCwweDAyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI0NzAsIDAsIHsweGEwLDB4MWQsMHhmYywweDA0LDB4ZmYsMHgyMCwweDBmLDB4MDAsMHgyNywweGYwLDB4MDMsMHhmYywweDAwLDB4ZmYsMHgwMCwweDJkIH19LAorIHsxNiwgMHhiNDgwLCAwLCB7MHgwMCwweDBiLDB4ZDAsMHgyNywweGZjLDB4MDAsMHhlZiwweDAwLDB4MzcsMHhjMCwweDBmLDB4YzAsMHg0MywweGZjLDB4MDAsMHhmZiB9fSwKKyB7MTYsIDB4YjQ5MCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGQsMHhmMCwweDBiLDB4ZTAsMHgwMCwweGY1LDB4MDAsMHgzZiwweGMwLDB4MWYsMHhmMCwweDAzLDB4ZTggfX0sCisgezE2LCAweGI0YTAsIDAsIHsweDA3LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAxLDB4ZjQsMHhjMCwweGZjLDB4MjIsMHg3ZiwweGMwIH19LAorIHsxNiwgMHhiNGIwLCAwLCB7MHgwYywweGQwLDB4NDMsMHgzNiwweDAwLDB4YzQsMHg4MSwweDM0LDB4YzAsMHgxYywweDg5LDB4MDcsMHhmMiwweDgwLDB4Y2YsMHg4MCB9fSwKKyB7MTYsIDB4YjRjMCwgMCwgezB4MzMsMHg2MCwweDBmLDB4NzksMHgwMywweDNjLDB4ZTAsMHhjZiwweDA4LDB4MzMsMHg0OCwweDBkLDB4YzQsMHgwMywweGYwLDB4NTAgfX0sCisgezE2LCAweGI0ZDAsIDAsIHsweGRjLDB4OTAsMHgzNywweGNjLDB4MGYsMHhmOCwweDAzLDB4ZjAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNGUwLCAwLCB7MHg4MCwweDEwLDB4ZTksMHg5MCwweGI4LDB4ODAsMHg3ZSwweGU0LDB4ODgsMHg5OSwweDBhLDB4MjYsMHgwOCwweGE5LDB4ODAsMHgyMiB9fSwKKyB7MTYsIDB4YjRmMCwgMCwgezB4ZjQsMHgyYywweDk5LDB4MDMsMHhhNywweDAyLDB4ODksMHg4MCwweDIyLDB4MzQsMHgwYiwweDlhLDB4MDMsMHg3ZCwweDAwLDB4ZGYgfX0sCisgezE2LCAweGI1MDAsIDAsIHsweDQ4LDB4MmIsMHg2MCwweDA4LDB4MDUsMHgwMiwweGU1LDB4MDAsMHg4MiwweDIwLDB4MjIsMHhjNCwweDhiLDB4YjAsMHgwMiwweGUwIH19LAorIHsxNiwgMHhiNTEwLCAwLCB7MHgwNiwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGM1LDB4MDAsMHhiMCwweDEwLDB4MmMsMHhjMCB9fSwKKyB7MTYsIDB4YjUyMCwgMCwgezB4MmEsMHgwMCwweDAyLDB4YTQsMHgwOCwweGE4LDB4MDQsMHhlMCwweDgwLDB4MGIsMHgwMCwweDAyLDB4YzQsMHg0MSwweGIyLDB4MDQgfX0sCisgezE2LCAweGI1MzAsIDAsIHsweGE0LDB4MGEsMHgwYiwweGIwLDB4MDIsMHg4YywweDgxLDB4ODMsMHgyMCwweDYwLDB4NTAsMHg5OCwweDEyLDB4MTIsMHg4YiwweDgwIH19LAorIHsxNiwgMHhiNTQwLCAwLCB7MHg4OSwweDAwLDB4MmMsMHhjOCwweDBiLDB4MzAsMHgwMiwweGUyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjU1MCwgMCwgezB4YzAsMHgxMSwweGFjLDB4MjAsMHhiYiwweDAyLDB4MmEsMHhjMCwweDBhLDB4ODgsMHgwMiwweGE0LDB4MDgsMHhhOSwweDgwLDB4YTIgfX0sCisgezE2LCAweGI1NjAsIDAsIHsweGUxLDB4MWIsMHg5YywweDIyLDB4ZTYsMHgwMCwweGI4LDB4NDAsMHgyNiwweDMwLDB4MGIsMHg5MCwweDAyLDB4Y2MsMHgwMSwweDkzIH19LAorIHsxNiwgMHhiNTcwLCAwLCB7MHgwNCwweDJhLDB4NDAsMHgzOSwweDk4LDB4ODIsMHhlYywweDE0LDB4OGIsMHg2NSwweDJhLDB4YzAsMHgwYiwweGIyLDB4MDIsMHhmOCB9fSwKKyB7MTYsIDB4YjU4MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlNywweDAwLDB4YjgsMHg0OCwweDJlLDB4MDAgfX0sCisgezE2LCAweGI1OTAsIDAsIHsweDBlLDB4ODgsMHg0MywweDg0LDB4MDAsMHhlMywweGMxLDB4MzYsMHhlOCwweDBmLDB4OWMsMHgxMiwweGUyLDB4ODAsMHhmMywweGMwIH19LAorIHsxNiwgMHhiNWEwLCAwLCB7MHgzNiwweDcwLDB4NWYsMHhhOCwweDIzLDB4YWMsMHgwMSwweGNiLDB4MDQsMHgyMiwweDQwLDB4NGQsMHg4NCwweDAzLDB4ZTIsMHgwMCB9fSwKKyB7MTYsIDB4YjViMCwgMCwgezB4ZDgsMHgwMCwweDNlLDB4YzAsMHgwZiwweDkwLDB4MDMsMHhkMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI1YzAsIDAsIHsweGUwLDB4MDEsMHhiMywweDA5LDB4ZmUsMHgxMCwweDNlLDB4ODEsMHgwZCwweGMwLDB4MDMsMHg3NCwweDBjLDB4ZmYsMHgwMCwweDNkIH19LAorIHsxNiwgMHhiNWQwLCAwLCB7MHhjMSwweDhjLDB4ZDAsMHg4MywweDE0LDB4MDAsMHhjZCwweDIwLDB4M2EsMHg0MCwweDBkLDB4Y2EsMHgwMSwweDdjLDB4MDAsMHhmZiB9fSwKKyB7MTYsIDB4YjVlMCwgMCwgezB4MDAsMHgxZiwweDQwLDB4MGUsMHhjMCwweDIzLDB4ZjIsMHg0NiwweGZlLDB4ODQsMHgzNywweGMwLDB4MGYsMHhkOCwweDAzLDB4ZjggfX0sCisgezE2LCAweGI1ZjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGRkLDB4MDIsMHgzZCwweDQwIH19LAorIHsxNiwgMHhiNjAwLCAwLCB7MHgwZSwweDkwLDB4MDMsMHhhYywweDAwLDB4ZWIsMHg0OCwweDNlLDB4ZDAsMHgwYywweDgwLDB4NjMsMHhhMiwweDA4LDB4Y2EsMHgwMCB9fSwKKyB7MTYsIDB4YjYxMCwgMCwgezB4MzIsMHgwOCwweDBjLDB4YjAsMHgwMywweGFjLDB4MDgsMHhlYiwweDAwLDB4M2UsMHg0MCwweDBjLDB4ZDQsMHg4MywweDU4LDB4MjAgfX0sCisgezE2LCAweGI2MjAsIDAsIHsweGY5LDB4NDIsMHgzMiwweGMwLDB4MGMsMHhiMCwweDAzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNjMwLCAwLCB7MHhjOCwweDA1LDB4MjgsMHgwMiwweGRiLDB4MDAsMHgyZSwweGUwLDB4MjgsMHgzYSwweDAyLDB4MmUsMHgwMCwweGRiLDB4NjAsMHg3NiB9fSwKKyB7MTYsIDB4YjY0MCwgMCwgezB4ZTAsMHgwZCwweDhjLDB4MDIsMHhlMCwweDAwLDB4ODgsMHgwMiwweDM2LDB4NTgsMHg2OCwweDE1LDB4ODMsMHg3YywweDA4LDB4YmYgfX0sCisgezE2LCAweGI2NTAsIDAsIHsweDAwLDB4MmQsMHg2MCwweDA4LDB4OTAsMHgwMiwweGE5LDB4MDAsMHhiMywweDA1LDB4MjMsMHhjMCwweDA4LDB4YjAsMHgwMiwweGYyIH19LAorIHsxNiwgMHhiNjYwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MTAsMHg4MCwweDAwLDB4MGMsMHhjMSB9fSwKKyB7MTYsIDB4YjY3MCwgMCwgezB4MDgsMHgxYywweDgyLDB4MDYsMHgwMCwweDkzLDB4YzAsMHgyMCwweGY2LDB4MGEsMHgyMCwweDAyLDB4MDgsMHgwMCwweDkzLDB4MDAgfX0sCisgezE2LCAweGI2ODAsIDAsIHsweDI0LDB4NjAsMHgwOSwweDNjLDB4MDIsMHgwYywweDAwLDB4ODMsMHgwMCwweDJjLDB4NjAsMHgwOSwweDAxLDB4MTIsMHgwMCwweDQwIH19LAorIHsxNiwgMHhiNjkwLCAwLCB7MHhiMCwweDAwLDB4ZTAsMHhjMCwweDA4LDB4MzAsMHgwMiwweDcwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjZhMCwgMCwgezB4MjAsMHg0MSwweDBhLDB4NDAsMHg4NiwweDgxLDB4MmQsMHhlMCwweDU4LDB4MTgsMHgwYSwweDE2LDB4YTAsMHg5NywweDgwLDB4MjUgfX0sCisgezE2LCAweGI2YjAsIDAsIHsweGU5LDB4MTksMHg3OCwweDgyLDB4ZDYsMHgwMCwweDk3LDB4ODAsMHgyNSwweGEwLDB4MTksMHhmOCwweDAyLDB4NWUsMHgwMCwweGI3IH19LAorIHsxNiwgMHhiNmMwLCAwLCB7MHg4MCwweDJkLDB4NjAsMHgyOCwweDQ4LDB4MTIsMHg5NiwweDAwLDB4YjQsMHg4MCwweDIxLDB4ZTAsMHgyOCwweDc4LDB4MDIsMHhjOCB9fSwKKyB7MTYsIDB4YjZkMCwgMCwgezB4MDQsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ODEsMHgzMCwweDNjLDB4YzIgfX0sCisgezE2LCAweGI2ZTAsIDAsIHsweDBlLDB4MDAsMHgwMiwweDg0LDB4MDAsMHhlMywweDQwLDB4MjgsMHhlOCwweDRjLDB4MjksMHgwMywweDBjLDB4MDAsMHhkMywweDAwIH19LAorIHsxNiwgMHhiNmYwLCAwLCB7MHgzNCwweGM0LDB4MGQsMHgzMSwweDAzLDB4OGMsMHgwOCwweGUzLDB4MDAsMHgzYywweDQ2LDB4MGMsMHgyMCwweDAzLDB4MDAsMHg4MCB9fSwKKyB7MTYsIDB4YjcwMCwgMCwgezB4ZjIsMHgwMCwweDMyLDB4YzAsMHgwYywweDMwLDB4MDMsMHhkMiwweDAyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI3MTAsIDAsIHsweDQwLDB4MTksMHhiOCwweDAwLDB4ZmYsMHgxMCwweDJmLDB4YzAsMHgwZiwweGMwLDB4MjMsMHhjNCwweDgwLDB4N2YsMHgxMCwweDNlIH19LAorIHsxNiwgMHhiNzIwLCAwLCB7MHhjMCwweDBmLDB4YjEsMHgwMywweGRjLDB4MDAsMHhlNywweDAwLDB4M2YsMHg4MCwweDA2LDB4ZjEsMHg0MywweGZjLDB4MDAsMHhmZiB9fSwKKyB7MTYsIDB4YjczMCwgMCwgezB4MDgsMHg3ZCwweDUwLDB4MGUsMHhlMSwweDIzLDB4YjQsMHgwOCwweGZlLDB4MTAsMHgzZiwweGM0LDB4MGYsMHhmMCwweDAzLDB4ZDAgfX0sCisgezE2LCAweGI3NDAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZTQsMHgwMiwweGNjLDB4MDAsMHgzZSwweDAwIH19LAorIHsxNiwgMHhiNzUwLCAwLCB7MHgyYywweGMwLDB4MDMsMHgwNCwweDAxLDB4Y2IsMHgwMCwweDMzLDB4NjAsMHgyYywweDkwLDB4MTMsMHhlOCwweDAwLDB4NzMsMHgwMCB9fSwKKyB7MTYsIDB4Yjc2MCwgMCwgezB4YjIsMHhjMSwweDBmLDB4YTAsMHgwMywweGVjLDB4ODAsMHhmYiwweDI4LDB4M2UsMHg1NCwweDFmLDB4ZDAsMHgwMywweGZlLDB4MDIgfX0sCisgezE2LCAweGI3NzAsIDAsIHsweGM5LDB4ODAsMHgzMiwweGMwLDB4MGYsMHhiMCwweDAzLDB4Y2EsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNzgwLCAwLCB7MHg0OCwweDExLDB4ODAsMHgwMCwweDg2LDB4MDAsMHgyZCwweDgwLDB4MDgsMHgyMCwweDAyLDB4MTQsMHgwOCwweDg3LDB4MDAsMHgyOSB9fSwKKyB7MTYsIDB4Yjc5MCwgMCwgezB4NDAsMHgwOCwweDcwLDB4MDIsMHhkYywweDAwLDB4YjcsMHgwMCwweDIxLDB4YzAsMHgwYiwweDYwLDB4MDIsMHg1YywweGEwLDB4OTcgfX0sCisgezE2LCAweGI3YTAsIDAsIHsweDIwLDB4MmQsMHg0OCwweDBiLDB4NTAsMHgwMiwweGRjLDB4MTAsMHg4ZCwweDAwLDB4MjEsMHhjOCwweDBiLDB4NzAsMHgwMiwweGQyIH19LAorIHsxNiwgMHhiN2IwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDlmLDB4MDAsMHg4NSwweDgxLDB4MmMsMHg2MCB9fSwKKyB7MTYsIDB4YjdjMCwgMCwgezB4MTgsMHg1OCwweDAyLDB4ZGUsMHgyMCwweGI3LDB4ODIsMHgyOCwweDYwLDB4NWEsMHg3OCwweDUyLDB4ZGUsMHgxMCwweGJmLDB4ODAgfX0sCisgezE2LCAweGI3ZDAsIDAsIHsweDIxLDB4ZTAsMHg0YiwweDc4LDB4MDYsMHhkZSwweDQwLDB4YjcsMHhhMCwweDJkLDB4NjksMHg5YiwweDc4LDB4MTIsMHhjZSwweDAwIH19LAorIHsxNiwgMHhiN2UwLCAwLCB7MHg4NywweDgwLDB4ZTEsMHhlNCwweDBiLDB4NzgsMHgwMiwweGMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjdmMCwgMCwgezB4NDgsMHgxNCwweGVlLDB4MDAsMHg4MywweDAwLDB4MmMsMHhjMiwweDA4LDB4MzYsMHgwMiwweDhjLDB4MDgsMHg4MywweGYwLDB4NjggfX0sCisgezE2LCAweGI4MDAsIDAsIHsweDQwLDB4MGEsMHgzZSwweDAyLDB4Y2QsMHg0MCwweGIzLDB4MDAsMHgyMCwweGUwLDB4MGIsMHgzMiwweDA2LDB4NGMsMHgwMCwweDliIH19LAorIHsxNiwgMHhiODEwLCAwLCB7MHgwMCwweDBjLDB4NDAsMHgwYiwweDMwLDB4MDIsMHhjZCwweDgwLDB4ODMsMHgwOCwweDIwLDB4YzAsMHgwYiwweGIxLDB4MDIsMHhkYSB9fSwKKyB7MTYsIDB4YjgyMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOCwweDAwLDB4Y2UsMHgwOCwweDNmLDB4YjAgfX0sCisgezE2LCAweGI4MzAsIDAsIHsweDBjLDB4ZTQsMHgyMywweGRhLDB4MDIsMHhkZSwweDQwLDB4YmIsMHhiMiwweDBlLDB4ZTIsMHg0MywweGZhLDB4MDAsMHhmZSwweDAwIH19LAorIHsxNiwgMHhiODQwLCAwLCB7MHgzMywweDkwLDB4MGIsMHhlMCwweDAzLDB4ZTgsMHgwMCwweGZhLDB4MDAsMHgzZSwweDgxLDB4MGIsMHhlMCwweDEzLDB4ZjksMHgwOCB9fSwKKyB7MTYsIDB4Yjg1MCwgMCwgezB4Y2UsMHg0MCwweDMyLDB4ODAsMHgwZiwweGE4LDB4MDMsMHhmYSwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI4NjAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDI0LDB4OTgsMHgwOCwweDNjLDB4MDQsMHgwZiwweDAwLDB4MGIsMHg2MCwweDAwLDB4ZjgsMHg0MCwweDJlIH19LAorIHsxNiwgMHhiODcwLCAwLCB7MHgwMywweDBkLDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwNiwweDBiLDB4ODAsMHgwMywweGUwLDB4MDAsMHhkOCB9fSwKKyB7MTYsIDB4Yjg4MCwgMCwgezB4MDAsMHgzYywweDAwLDB4MDMsMHg4YywweDIzLDB4ZTEsMHgwMCwweGY4LDB4MDAsMHg3ZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfX0sCisgezE2LCAweGI4OTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMiwweGM5LDB4MDAsMHgzZSwweDQwIH19LAorIHsxNiwgMHhiOGEwLCAwLCB7MHg4YywweDkwLDB4MDMsMHgyNSwweDAwLDB4ZTksMHg4MCwweDMyLDB4NDQsMHgwZiwweDk0LDB4MDIsMHhlNCwweDIwLDB4ZjksMHgwMCB9fSwKKyB7MTYsIDB4YjhiMCwgMCwgezB4MzIsMHg3MCwweDBmLDB4OWEsMHg0MywweGU0LDB4MDAsMHhmOSwweDAwLDB4MzIsMHg0MCwweDBjLDB4MTAsMHgzMywweDI0LDB4MTAgfX0sCisgezE2LCAweGI4YzAsIDAsIHsweGY5LDB4MDEsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4MDIsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiOGQwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4ODIsMHgyZSwweDQwLDB4MjgsMHg5MCwweDAyLDB4MjQsMHg4MiwweDgxLDB4YzAsMHhhMiB9fSwKKyB7MTYsIDB4YjhlMCwgMCwgezB4NzAsMHgwYiwweDljLDB4MDIsMHhlNCwweDAwLDB4MzEsMHg0MiwweGEyLDB4NjAsMHgwYiwweDk0LDB4ODIsMHhlNCwweDAwLDB4YjkgfX0sCisgezE2LCAweGI4ZjAsIDAsIHsweDAwLDB4MmEsMHg0MCwweDA4LDB4OTQsMHhhMiwweDI1LDB4MDAsMHhiOSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwYSwweDIwIH19LAorIHsxNiwgMHhiOTAwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDAsMHg4OSwweDY0LDB4MmUsMHg0MCB9fSwKKyB7MTYsIDB4YjkxMCwgMCwgezB4MDgsMHg5MCwweDQyLDB4YTQsMHgwMCwweDg5LDB4NjAsMHgyMiwweDQyLDB4MGIsMHg5MCwweDAyLDB4ZTYsMHgwMCwweGI5LDB4ODAgfX0sCisgezE2LCAweGI5MjAsIDAsIHsweDIyLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhhNCwweDA0LDB4YjksMHgwMCwweDIyLDB4NDAsMHgyOCwweDkwLDB4MDIsMHgyNCwweDA0IH19LAorIHsxNiwgMHhiOTMwLCAwLCB7MHhiOSwweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwMiwweDBlLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Yjk0MCwgMCwgezB4MDgsMHgwNCwweDA1LDB4ODAsMHg4MSwweDAwLDB4MmMsMHhjMSwweDQ4LDB4MTAsMHgwMiwweGE0LDB4MDIsMHg4MSwweDAwLDB4MjAgfX0sCisgezE2LCAweGI5NTAsIDAsIHsweDQwLDB4ODMsMHgzNCwweDAyLDB4YzQsMHgwMCwweGJiLDB4MDAsMHgyMCwweGQwLDB4MGIsMHgxNCwweDAyLDB4YzQsMHg4MCwweGIxIH19LAorIHsxNiwgMHhiOTYwLCAwLCB7MHgyMCwweGEwLDB4NjgsMHgxOCwweDE0LDB4MWEsMHgwZCwweDAwLDB4YjEsMHg0MCwweDJjLDB4NTAsMHgwYiwweDEwLDB4MDIsMHgwYSB9fSwKKyB7MTYsIDB4Yjk3MCwgMCwgezB4MDUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4YzgsMHgwMCwweDNlLDB4MDAgfX0sCisgezE2LCAweGI5ODAsIDAsIHsweDhjLDB4ODAsMHgwYiwweGEwLDB4MDQsMHhlOCwweDAwLDB4MzIsMHgwMCwweDA3LDB4ODAsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwIH19LAorIHsxNiwgMHhiOTkwLCAwLCB7MHgzMiwweDAwLDB4MWYsMHg4MCwweDAzLDB4YTEsMHg0MCwweGY4LDB4NTAsMHgzMiwweDAwLDB4MGMsMHg4MCwweDAzLDB4MjAsMHgwMCB9fSwKKyB7MTYsIDB4YjlhMCwgMCwgezB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI5YjAsIDAsIHsweDk4LDB4MWQsMHhmNCwweDQ2LDB4ZmQsMHg0MCwweDNmLDB4NTAsMHgyMywweGQ0LDB4MTMsMHg3NCwweDA0LDB4ZjUsMHgwMiwweDNmIH19LAorIHsxNiwgMHhiOWMwLCAwLCB7MHg1MCwweDBmLDB4ZDQsMHgwMywweGZkLDB4MDAsMHhiZCwweDAwLDB4MmYsMHg1MCwweDBmLDB4ZDAsMHgwMywweGU0LDB4NDAsMHhmOSB9fSwKKyB7MTYsIDB4YjlkMCwgMCwgezB4MTAsMHgzZiwweDQ0LDB4MGYsMHhkNCwweDAzLDB4ZjUsMHgwOCwweGZkLDB4MDYsMHgzZSwweDUwLDB4MGYsMHhkMiwweDgzLDB4ZTYgfX0sCisgezE2LCAweGI5ZTAsIDAsIHsweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZTYsMHg0MCwweGVkLDB4MDQsMHgzZSwweDQ4IH19LAorIHsxNiwgMHhiOWYwLCAwLCB7MHgwYywweGIyLDB4ODMsMHhmNCwweDAwLDB4YzEsMHgwMCwweDMyLDB4NDAsMHg4YywweGQwLDB4MDMsMHgzNCwweDAwLDB4ZmQsMHgwMCB9fSwKKyB7MTYsIDB4YmEwMCwgMCwgezB4MzcsMHg0MCwweDBmLDB4ZDAsMHgwMywweGU2LDB4MjAsMHhmOSwweDg4LDB4M2QsMHg2MiwweDBjLDB4ZDgsMHgwMywweGZlLDB4MjQgfX0sCisgezE2LCAweGJhMTAsIDAsIHsweGMxLDB4MDAsMHgzZSwweDc4LDB4MGYsMHhkMCwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiYTIwLCAwLCB7MHgzOCwweDEwLDB4ZTEsMHgwMCwweDg4LDB4NDAsMHgyZSwweDEwLDB4MDgsMHhjNCwweDIzLDB4YTAsMHgwOCwweDg4LDB4MDYsMHgyYSB9fSwKKyB7MTYsIDB4YmEzMCwgMCwgezB4MTQsMHgwOCwweDgwLDB4MDMsMHg2MCwweDA0LDB4YjgsMHgwMCwweDIyLDB4MDAsMHgwYiwweDgwLDB4MDIsMHhlMiwweDAwLDB4YjggfX0sCisgezE2LCAweGJhNDAsIDAsIHsweDgwLDB4MmUsMHgwMCwweDA4LDB4OGMsMHgwMiwweGUzLDB4ODAsMHg4OCwweDAyLDB4MmUsMHgzOCwweDBiLDB4ODgsMHgwMiwweDBlIH19LAorIHsxNiwgMHhiYTUwLCAwLCB7MHgwNiwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM1LDB4ODAsMHhhMSwweGMwLDB4MmQsMHg3MCB9fSwKKyB7MTYsIDB4YmE2MCwgMCwgezB4MDgsMHg1MCwweDQyLDB4YzQsMHgwMCwweGE5LDB4MDAsMHgyMCwweGUwLDB4MmEsMHgxMCwweDBhLDB4MDQsMHgxMCwweGIxLDB4MDAgfX0sCisgezE2LCAweGJhNzAsIDAsIHsweDI0LDB4NDAsMHg0YiwweDEwLDB4MDYsMHhjNCwweDIwLDB4YjEsMHgwOCwweDZlLDB4NDAsMHgwYiwweDE2LDB4ODIsMHhjNCwweDIwIH19LAorIHsxNiwgMHhiYTgwLCAwLCB7MHg4MSwweDAwLDB4MmMsMHg1MCwweDBiLDB4OTIsMHg4MiwweDUyLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmE5MCwgMCwgezB4MTgsMHgxMSwweGE0LDB4MDAsMHhhOSwweDAxLDB4MmUsMHg0MCwweDI4LDB4ZDAsMHgyMCwweGE0LDB4MDQsMHhhOSwweDAwLDB4MmEgfX0sCisgezE2LCAweGJhYTAsIDAsIHsweDQwLDB4MWEsMHhiMCwweDEyLDB4MjQsMHgwMCwweGI5LDB4MGMsMHgyMiwweDQyLDB4MGIsMHg5NCwweDAyLDB4ZTQsMHgwMCwweGI5IH19LAorIHsxNiwgMHhiYWIwLCAwLCB7MHgwMCwweDZlLDB4NDAsMHgwYiwweDk2LDB4MDIsMHhlNCwweDExLDB4ODksMHgyMCwweDZlLDB4NDAsMHgwYiwweDkwLDB4MDIsMHg0NiB9fSwKKyB7MTYsIDB4YmFjMCwgMCwgezB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweGMwLDB4YTksMHhjMCwweDNlLDB4NTAgfX0sCisgezE2LCAweGJhZDAsIDAsIHsweDA4LDB4OWMsMHg4MywweGU0LDB4MDIsMHhlOSwweDAwLDB4YjIsMHg0MCwweDJhLDB4OTIsMHgxMiwweDI2LDB4NDAsMHhmOSwweDQwIH19LAorIHsxNiwgMHhiYWUwLCAwLCB7MHgzNiwweDcwLDB4MGYsMHg5NCwweDAzLDB4ZTQsMHgwNCwweGY5LDB4MDEsMHgzYywweDQwLDB4MGYsMHg5OCwweDAzLDB4ZTYsMHgwMiB9fSwKKyB7MTYsIDB4YmFmMCwgMCwgezB4YzksMHgyMiwweDNlLDB4NDAsMHgwZiwweDEwLDB4MDIsMHg2OCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJiMDAsIDAsIHsweDI4LDB4MDEsMHg4NiwweDA0LDB4ZDksMHg0MCwweDFjLDB4NDAsMHgwZiwweDkyLDB4MjMsMHhhNCwweGIwLDB4ZGIsMHgwNCwweDNjIH19LAorIHsxNiwgMHhiYjEwLCAwLCB7MHhjMCwweDBkLDB4OWEsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0NCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4YmIyMCwgMCwgezB4MDAsMHgzZSwweDQyLDB4MmMsMHg5MCwweDIzLDB4ZTQsMHg4MCwweGY5LDB4MDAsMHgzZSwweDQwLDB4OGYsMHg5MiwweDAzLDB4OTIgfX0sCisgezE2LCAweGJiMzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTEsMHgwMCwweGM4LDB4MjAsMHgzMiwweDAwIH19LAorIHsxNiwgMHhiYjQwLCAwLCB7MHg0YywweGMwLDB4OGIsMHgyMCwweDAyLDB4YzgsMHgzMSwweDMyLDB4MjAsMHgyZCwweDg0LDB4MDMsMHhlMSwweDA0LDB4ZjgsMHg0OCB9fSwKKyB7MTYsIDB4YmI1MCwgMCwgezB4YmEsMHgwMCwweDBmLDB4ODksMHgwMywweGUwLDB4MDAsMHhjOCwweDAwLDB4MzIsMHgwMCwweDBkLDB4ODEsMHgxMywweDIwLDB4MTAgfX0sCisgezE2LCAweGJiNjAsIDAsIHsweGY4LDB4MDAsMHgzYSwweDAwLDB4MGYsMHg4MSwweDIzLDB4MDIsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiYjcwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMCwweDBlLDB4NDAsMHgyMiwweDgwLDB4MjgsMHhhNCwweDAyLDB4MTksMHgwMCwweDUyLDB4ODAsMHhhMiB9fSwKKyB7MTYsIDB4YmI4MCwgMCwgezB4ODAsMHg0ZCwweGVkLDB4ODIsMHhlOCwweDAwLDB4YjYsMHg0MiwweDIzLDB4YmQsMHgwYiwweGU4LDB4MDIsMHhlOCwweDA0LDB4ZGEgfX0sCisgezE2LCAweGJiOTAsIDAsIHsweDAwLDB4MzcsMHg4MCwweDA4LDB4ZTAsMHgwMiwweDNhLDB4MjAsMHhiYSwweDAwLDB4MjIsMHg4MCwweDBiLDB4YTgsMHgwYSwweDBhIH19LAorIHsxNiwgMHhiYmEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHg4MywweDgwLDB4NjAsMHhjMCB9fSwKKyB7MTYsIDB4YmJiMCwgMCwgezB4MDgsMHgyOSwweDAyLDB4MGQsMHgwMCwweDkyLDB4NDAsMHgyNCwweGMwLDB4MDgsMHhiNCwweDAyLDB4Y2MsMHgwMCwweGIzLDB4MDAgfX0sCisgezE2LCAweGJiYzAsIDAsIHsweDY4LDB4ZTAsMHgxYiwweDMwLDB4MDIsMHhjYywweDAwLDB4OTMsMHgwMSwweDI0LDB4YzAsMHg2OSwweDM4LDB4MDIsMHg2YywweDAwIH19LAorIHsxNiwgMHhiYmQwLCAwLCB7MHhiMywweDAwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmJlMCwgMCwgezB4YTAsMHgwMSwweDFjLDB4NDAsMHg4MywweGMwLDB4MjAsMHg0MCwweDA4LDB4MjgsMHgwNiwweDljLDB4MTgsMHg5YywweDAyLDB4MjQgfX0sCisgezE2LCAweGJiZjAsIDAsIHsweGMwLDB4MDksMHg3MCwweDAyLDB4ZDQsMHgwMCwweGI3LDB4MDAsMHgyMSwweGMwLDB4MGIsMHg3MCwweDAyLDB4Y2UsMHg0MCwweDk3IH19LAorIHsxNiwgMHhiYzAwLCAwLCB7MHhiMCwweDI1LDB4NDAsMHgwOCwweDc4LDB4MWEsMHg1OCwweDAwLDB4YmYsMHhhMiwweDY1LDB4YzgsMHgwYiwweDc4LDB4MDIsMHgyMCB9fSwKKyB7MTYsIDB4YmMxMCwgMCwgezB4MDQsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgwZSwweDAyLDB4ODcsMHg4MCwweGIxLDB4YTAgfX0sCisgezE2LCAweGJjMjAsIDAsIHsweDBjLDB4NjgsMHgwMywweDFhLDB4MDgsMHhkNiwweDkyLDB4MzUsMHhlNCwweDI4LDB4NzgsMHg0MiwweGQ2LDB4MTAsMHhmNSwweDgwIH19LAorIHsxNiwgMHhiYzMwLCAwLCB7MHgzOSwweGEwLDB4MGYsMHg3OCwweDIzLDB4ZGUsMHgzMCwweGQzLDB4YTIsMHgzNSwweGEwLDB4NGQsMHhlOCwweDAzLDB4NWUsMHgwMCB9fSwKKyB7MTYsIDB4YmM0MCwgMCwgezB4ZjcsMHhkMCwweDNkLDB4ZjgsMHgwZiwweGYwLDB4MDMsMHgyMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJjNTAsIDAsIHsweDA4LDB4MWQsMHhhYywweDAwLDB4ZmIsMHgwNCwweDNlLDB4MDAsMHgwYiwweGEwLDB4MDMsMHg0OCwweDA0LDB4ZmEsMHg0MSwweDNhIH19LAorIHsxNiwgMHhiYzYwLCAwLCB7MHg1MCwweDBmLDB4YjAsMHgwMywweGU0LDB4MDAsMHhmMSwweDAwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGVkLDB4ODgsMHhmYiB9fSwKKyB7MTYsIDB4YmM3MCwgMCwgezB4NGQsMHgzZSwweDAwLDB4MGYsMHhmMCwweDAzLDB4YmMsMHgwOCwweGZiLDB4MjAsMHgzYSwweGMwLDB4MGYsMHhiMCwweDAzLDB4YzIgfX0sCisgezE2LCAweGJjODAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHgwMCwweGRjLDB4ODAsMHhiMywweGUwIH19LAorIHsxNiwgMHhiYzkwLCAwLCB7MHgwYywweGQ4LDB4MDMsMHhjZSwweDAwLDB4YzgsMHhhMCwweDMxLDB4YTAsMHg4ZCwweGU5LDB4MDMsMHhiZSwweDAwLDB4YjIsMHg4MCB9fSwKKyB7MTYsIDB4YmNhMCwgMCwgezB4MzMsMHhlMCwweDBjLDB4ZTgsMHg0MywweDdlLDB4MDQsMHgwZiwweDgxLDB4MzEsMHhlNCwweDBjLDB4ZDgsMHgwMywweGY2LDB4MDAgfX0sCisgezE2LCAweGJjYjAsIDAsIHsweGZmLDB4ODAsMHgzZiwweGUwLDB4MGYsMHhmOCwweDAzLDB4MDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiY2MwLCAwLCB7MHhhOCwweDExLDB4OWMsMHgwMCwweGI0LDB4NDAsMHgzNSwweDQwLDB4MDgsMHg1MCwweDgyLDB4ZGUsMHg4MCwweGQ0LDB4OTAsMHgyMSB9fSwKKyB7MTYsIDB4YmNkMCwgMCwgezB4ZTAsMHgwZCwweDUxLDB4MDIsMHhkNCwweDQwLDB4YjYsMHhiMCwweDJiLDB4OTAsMHgwZSwweGU1LDB4MDIsMHg5YywweDQwLDB4ZDcgfX0sCisgezE2LCAweGJjZTAsIDAsIHsweDIyLDB4MTksMHg1YywweDBkLDB4NzAsMHgwMiwweGQ4LDB4MDAsMHhiNywweDIwLDB4MmQsMHhjMCwweDBiLDB4ZjAsMHgwMywweDZhIH19LAorIHsxNiwgMHhiY2YwLCAwLCB7MHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4MDAsMHg5MywweDEwLDB4MjEsMHg4MCB9fSwKKyB7MTYsIDB4YmQwMCwgMCwgezB4MDgsMHg1OCwweDAyLDB4ZGMsMHhjMCwweDk0LDB4MDAsMHgyMywweGQwLDB4MDgsMHg3MCwweGEwLDB4ZDQsMHgyMCwweGI1LDB4MDIgfX0sCisgezE2LCAweGJkMTAsIDAsIHsweDI5LDB4ODAsMHgwOSwweDYwLDB4ODIsMHgwYywweDAwLDB4ODcsMHgwMiwweDI1LDB4YzAsMHgxOSwweDQwLDB4MDIsMHhkNCwweDAwIH19LAorIHsxNiwgMHhiZDIwLCAwLCB7MHhiNywweDAwLDB4NmQsMHhjMCwweDBiLDB4NzAsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmQzMCwgMCwgezB4MjAsMHgxNCwweGVjLDB4MDAsMHhiMywweGMwLDB4MjAsMHgwMSwweDQ4LDB4MTgsMHgwMiwweGNjLDB4MDIsMHg4MSwweDQ0LDB4YTAgfX0sCisgezE2LCAweGJkNDAsIDAsIHsweGMwLDB4ODksMHgzOCwweDAyLDB4YzcsMHg4MCwweGIxLDB4MDAsMHgyYywweDA5LDB4NGEsMHgwMCwweDYyLDB4YWMsMHgwOSwweDkzIH19LAorIHsxNiwgMHhiZDUwLCAwLCB7MHgwMSwweDI4LDB4NDAsMHgxOSwweDMwLDB4MDIsMHhjZCwweDEwLDB4YjMsMHg5MCwweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhjOCB9fSwKKyB7MTYsIDB4YmQ2MCwgMCwgezB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDIwLDB4ZGIsMHg2MiwweDIyLDB4ZTAgfX0sCisgezE2LCAweGJkNzAsIDAsIHsweDZjLDB4YTAsMHgwMywweGU0LDB4MDAsMHg5OCwweDAwLDB4MzIsMHhjMCwweGVjLDB4OTgsMHgyMywweGFlLDB4MDgsMHhmYiwweDA4IH19LAorIHsxNiwgMHhiZDgwLCAwLCB7MHgzYSwweDc4LDB4MDksMHg5MCwweDAzLDB4N2MsMHgxMCwweGNmLDB4MDAsMHgyNiwweDQwLDB4MGMsMHhiMCwweDAzLDB4ZWMsMHgwMCB9fSwKKyB7MTYsIDB4YmQ5MCwgMCwgezB4ZmYsMHg4MCwweDNmLDB4YzAsMHgwZiwweDkwLDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJkYTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDIwLDB4ZmIsMHg0OCwweDNjLDB4NjEsMHgwZiwweGEwLDB4NDMsMHhlZCwweDAwLDB4ZjgsMHgyNCwweDNlIH19LAorIHsxNiwgMHhiZGIwLCAwLCB7MHg1MCwweDBmLDB4OTAsMHg4MywweGU0LDB4MDAsMHhmYiwweDAwLDB4M2EsMHg1MCwweDBmLDB4ODAsMHg0MywweGVjLDB4MDgsMHhmYiB9fSwKKyB7MTYsIDB4YmRjMCwgMCwgezB4MDAsMHgzZSwweDQwLDB4MGYsMHg0MCwweDAzLDB4ZjAsMHgwMCwweGZiLDB4MDAsMHgzZSwweGMxLDB4MGYsMHg5MCwweDAzLDB4NjAgfX0sCisgezE2LCAweGJkZDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweGRkLDB4YTAsMHgzMiwweDgwIH19LAorIHsxNiwgMHhiZGUwLCAwLCB7MHgwYywweGUwLDB4MDEsMHhmYywweDAwLDB4ZGMsMHg5MSwweDM5LDB4YzAsMHgzYywweDQwLDB4MDMsMHgzNCwweDAwLDB4ZmYsMHg4MCB9fSwKKyB7MTYsIDB4YmRmMCwgMCwgezB4M2YsMHgwMCwweDBmLDB4ZDAsMHgwNywweGZjLDB4MDAsMHhjYiwweDAwLDB4M2QsMHg0MCwweDBjLDB4ZTAsMHgwMywweDM4LDB4MjAgfX0sCisgezE2LCAweGJlMDAsIDAsIHsweGNmLDB4MDIsMHgzZCwweGMwLDB4MGMsMHhkMCwweDAzLDB4MDgsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiZTEwLCAwLCB7MHg4MSwweDA0LDB4NmMsMHgwMCwweDAxLDB4NDAsMHgyMiwweDAwLDB4MjgsMHhhMCwweDAyLDB4Y2UsMHg4NiwweDgzLDB4NjQsMHgyMiB9fSwKKyB7MTYsIDB4YmUyMCwgMCwgezB4ZjQsMHgwOCwweDhjLDB4MGYsMHg2NCwweDAwLDB4YmIsMHgxMCwweDJlLDB4NjAsMHgwYiwweDljLDB4MDMsMHhhYywweDAxLDB4ZGIgfX0sCisgezE2LCAweGJlMzAsIDAsIHsweDAwLDB4M2UsMHg2MCwweDA4LDB4OGYsMHgwMiwweDIzLDB4NDAsMHg4YiwweDAwLDB4M2EsMHhjMCwweDBkLDB4MTAsMHg0MywweDY4IH19LAorIHsxNiwgMHhiZTQwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHg5OSwweDAwLDB4YTIsMHhjMCB9fSwKKyB7MTYsIDB4YmU1MCwgMCwgezB4MDgsMHg5MCwweDAyLDB4YTYsMHgwNywweDk4LDB4MDAsMHgwMiwweGMyLDB4NDgsMHg4OCwweDAyLDB4MmMsMHgwMCwweGJhLDB4MDIgfX0sCisgezE2LCAweGJlNjAsIDAsIHsweDZlLDB4NjAsMHgwYSwweDk4LDB4MDIsMHhlYywweDAwLDB4OGIsMHgwMSwweDJlLDB4NjAsMHgwOCwweDkwLDB4MDIsMHgwNSwweDAwIH19LAorIHsxNiwgMHhiZTcwLCAwLCB7MHg4YiwweDAwLDB4MmUsMHhjMCwweDA4LDB4YjEsMHgwMiwweDIwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmU4MCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MTAsMHg4MSwweDAwLDB4MjAsMHg0MCwweDI4LDB4MTAsMHgyNiwweGNjLDB4ODAsMHg4MCwweDIwLDB4YTAgfX0sCisgezE2LCAweGJlOTAsIDAsIHsweGNjLDB4MTgsMHgxNCwweDQyLDB4MDQsMHgwMCwweGIyLDB4MjAsMHg2YywweDQwLDB4MGIsMHgwMCwweDAyLDB4OGMsMHgwMCwweDgzIH19LAorIHsxNiwgMHhiZWEwLCAwLCB7MHgwMCwweDI4LDB4NDAsMHgyOCwweDAwLDB4MDIsMHgwMCwweDAwLDB4ODMsMHgwMCwweDI4LDB4YzAsMHgwOSwweGIwLDB4MDIsMHg0MiB9fSwKKyB7MTYsIDB4YmViMCwgMCwgezB4MDUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4ZDksMHgwMCwweDIyLDB4ODAgfX0sCisgezE2LCAweGJlYzAsIDAsIHsweDBjLDB4OTAsMHgwMywweGFjLDB4ODAsMHhkYSwweDI5LDB4MmEsMHhkMiwweDI4LDB4ODAsMHgwMiwweDI0LDB4MDAsMHhmYiwweDIwIH19LAorIHsxNiwgMHhiZWQwLCAwLCB7MHgzZSwweDAwLDB4MGYsMHg5MCwweDAyLDB4ZmMsMHgwMCwweDhmLDB4MDAsMHgyZSwweDQwLDB4MGMsMHg4MCwweDBiLDB4MjAsMHgwMiB9fSwKKyB7MTYsIDB4YmVlMCwgMCwgezB4Y2YsMHgwMCwweDNlLDB4YzAsMHgwYywweGIwLDB4MDMsMHgwMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJlZjAsIDAsIHsweGEwLDB4MWQsMHhmYywweDAwLDB4ZmQsMHgwMCwweDNmLDB4MDAsMHgwZiwweGQwLDB4NjMsMHhmYywweDQ5LDB4ZjUsMHgwMCwweDNlIH19LAorIHsxNiwgMHhiZjAwLCAwLCB7MHhjMCwweDBiLDB4YzAsMHgwMSwweGY0LDB4MDAsMHg3ZiwweDQwLDB4M2YsMHg0MCwweDFmLDB4ZDAsMHgwMywweGJjLDB4MDAsMHhmZiB9fSwKKyB7MTYsIDB4YmYxMCwgMCwgezB4MDAsMHgzZiwweDQwLDB4MGYsMHhjMCwweDAzLDB4ZjAsMHgwMCwweGZmLDB4MDAsMHgzYiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZTggfX0sCisgezE2LCAweGJmMjAsIDAsIHsweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAxLDB4ZjIsMHg0MCwweGVjLDB4YTAsMHgzZiwweGUwIH19LAorIHsxNiwgMHhiZjMwLCAwLCB7MHgwZCwweDQ4LDB4MDMsMHg3ZCwweDgwLDB4ZjQsMHg4MCwweDMzLDB4NmMsMHgwZSwweGM4LDB4MDMsMHgzMiwweDAwLDB4ZGQsMHg5MCB9fSwKKyB7MTYsIDB4YmY0MCwgMCwgezB4M2IsMHhhMCwweDJkLDB4ZjAsMHgwMywweGZjLDB4YzAsMHhmZiwweDAwLDB4M2IsMHhlMCwweDhlLDB4ZjAsMHgwMywweDNjLDB4MDQgfX0sCisgezE2LCAweGJmNTAsIDAsIHsweGVjLDB4NjAsMHgzMSwweDAwLDB4MGMsMHhmMCwweDAzLDB4YjAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiZjYwLCAwLCB7MHg4MCwweDEwLDB4ZWMsMHgwMCwweGQ5LDB4YzEsMHgyZSwweGUxLDB4MGQsMHg4OCwweDAyLDB4M2MsMHg4MCwweGY4LDB4ODAsMHgzNiB9fSwKKyB7MTYsIDB4YmY3MCwgMCwgezB4N2QsMHgxOCwweGEwLDB4MDIsMHgyOCwweGIwLDB4ZWEsMHgyMCwweDIyLDB4MjAsMHgwOCwweDc3LDB4MDIsMHhmZCwweDUwLDB4YmIgfX0sCisgezE2LCAweGJmODAsIDAsIHsweDgwLDB4MjIsMHg0MCwweDBiLDB4ZjQsMHg0MiwweDNkLDB4ODAsMHg4OCwweDMxLDB4MjIsMHgxMiwweDA4LDB4ZjYsMHgwMiwweGUwIH19LAorIHsxNiwgMHhiZjkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MDAsMHg4MCwweDExLDB4MmUsMHhjMSB9fSwKKyB7MTYsIDB4YmZhMCwgMCwgezB4MDgsMHgwMCwweDAyLDB4NGQsMHg4MCwweGI4LDB4MDAsMHgyMCwweDAwLDB4MGEsMHgwMiwweDgyLDB4MDAsMHgwMCwweDk5LDB4MjAgfX0sCisgezE2LCAweGJmYjAsIDAsIHsweDIyLDB4YzAsMHgwOSwweDMwLDB4ODIsMHhjYywweDAwLDB4YjMsMHgwMCwweDI4LDB4Y2EsMHgwYiwweDM0LDB4ODIsMHgwZCwweDIwIH19LAorIHsxNiwgMHhiZmMwLCAwLCB7MHg4MCwweDAwLDB4YTAsMHg4YywweDA4LDB4MzQsMHg4MiwweGEyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmZkMCwgMCwgezB4YzAsMHgxNSwweGFjLDB4NDAsMHg5OSwweDgwLDB4MmUsMHhjMiwweDA5LDB4OTQsMHgwMiwweDJjLDB4MDAsMHhhOSwweDgwLDB4MjYgfX0sCisgezE2LCAweGJmZTAsIDAsIHsweDYwLDB4MDgsMHgzOCwweDQyLDB4MjIsMHgyMCwweGJhLDB4NDEsMHg2MiwweDQ2LDB4M2IsMHhiMCwweDAyLDB4ZWMsMHgwMSwweGJiIH19LAorIHsxNiwgMHhiZmYwLCAwLCB7MHg4MCwweDIyLDB4NDAsMHgwYiwweGIwLDB4NDYsMHgwYywweDE4LDB4ODgsMHhjMCwweDIyLDB4MjIsMHgwOCwweGIwLDB4MDYsMHhmMCB9fSwKKyB7MTYsIDB4YzAwMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhjYywweDAwLDB4YzksMHg4MSwweDNjLDB4YzEgfX0sCisgezE2LCAweGMwMTAsIDAsIHsweDBjLDB4YTksMHgyMywweDZjLDB4MDAsMHhiMiwweDgwLDB4MzIsMHg3OCwweDBhLDB4OGEsMHgwYiwweDI2LDB4MDAsMHg5OSwweDAxIH19LAorIHsxNiwgMHhjMDIwLCAwLCB7MHgzMCwweGUwLDB4MGQsMHhiMCwweDAzLDB4ZWMsMHgwMCwweGI5LDB4MDAsMHgzYSwweGMwLDB4MWUsMHhiMCwweDAzLDB4MmMsMHgwMCB9fSwKKyB7MTYsIDB4YzAzMCwgMCwgezB4Y2IsMHg4MCwweDMyLDB4NjEsMHgwYywweGIwLDB4MTMsMHg5MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMwNDAsIDAsIHsweGUwLDB4MDEsMHhiYywweDEwLDB4ZGQsMHgwMCwweDNmLDB4YzIsMHgwZiwweGU4LDB4MDMsMHhhYywweDAwLDB4ZmUsMHgwMCwweDNkIH19LAorIHsxNiwgMHhjMDUwLCAwLCB7MHg0MCwweDBmLDB4YzAsMHg0MywweGY4LDB4MTAsMHhlZiwweDE0LDB4YjcsMHhlMCwweDBjLDB4ZjAsMHgwMywweGZjLDB4MDAsMHhmNSB9fSwKKyB7MTYsIDB4YzA2MCwgMCwgezB4MDIsMHgzZiwweDQ0LDB4NGYsMHhiMCwweDRiLDB4ZmMsMHgwMiwweGQ0LDB4MDQsMHgzZCwweDQwLDB4MmYsMHhmMCwweDAzLDB4ZjggfX0sCisgezE2LCAweGMwNzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGY5LDB4MDgsMHgzZSwweDYwIH19LAorIHsxNiwgMHhjMDgwLCAwLCB7MHgwZCwweGEwLDB4MDMsMHhhYywweDAwLDB4ZTgsMHg1MCwweDMyLDB4MDAsMHgwYywweDg0LDB4MDMsMHhhNSwweDAwLDB4ZTksMHgwMCB9fSwKKyB7MTYsIDB4YzA5MCwgMCwgezB4M2EsMHhkOCwweDBmLDB4YjAsMHgwMywweDJjLDB4MDAsMHhmOSwweDAwLDB4M2EsMHhjMCwweDBmLDB4MzAsMHgwMywweDJjLDB4MDAgfX0sCisgezE2LCAweGMwYTAsIDAsIHsweGNiLDB4NDQsMHgzZSwweGQ0LDB4MGUsMHhiMCwweDAzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMGIwLCAwLCB7MHhjOCwweDA1LDB4MmMsMHgwOCwweGI5LDB4ODAsMHgyZSwweGMwLDB4MGEsMHgzMCwweDQyLDB4M2MsMHgwMCwweDg5LDB4MDQsMHg3NiB9fSwKKyB7MTYsIDB4YzBjMCwgMCwgezB4NjAsMHgwOCwweDkwLDB4NjIsMHgyMCwweDAwLDB4ODIsMHgwNCwweDIyLDB4ZDAsMHgwOCwweGYwLDB4NDMsMHg3YywweDAwLDB4YmIgfX0sCisgezE2LCAweGMwZDAsIDAsIHsweDgyLDB4MjIsMHg0MCwweDBiLDB4ZjAsMHg0MiwweDNjLDB4MDAsMHg4YSwweGMwLDB4MmUsMHhjMSwweDA4LDB4ZjAsMHgwMiwweGYyIH19LAorIHsxNiwgMHhjMGUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MTAsMHhiMiwweGQwLDB4MmMsMHhjMCB9fSwKKyB7MTYsIDB4YzBmMCwgMCwgezB4MjksMHgxOCwweDAyLDB4OGMsMHgwNCwweGExLDB4MDAsMHgyNCwweDljLDB4MDgsMHgxMCwweDAyLDB4ODAsMHgwMCwweGExLDB4MDEgfX0sCisgezE2LCAweGMxMDAsIDAsIHsweDBjLDB4YzEsMHgyYiwweDMwLDB4NTIsMHg4YywweDA0LDB4YjMsMHgwMSwweDI4LDB4NDAsMHg0YiwweDMwLDB4MDIsMHg0YywweDAwIH19LAorIHsxNiwgMHhjMTEwLCAwLCB7MHg5MCwweDIwLDB4MmMsMHgyMCwweDBhLDB4MzAsMHgwMiwweGY4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzEyMCwgMCwgezB4MjAsMHg0MSwweDFlLDB4MDAsMHhiNywweGEyLDB4MjUsMHhlOCwweDhhLDB4NjgsMHgwMiwweDFlLDB4MDAsMHg4NSwweDgwLDB4MjUgfX0sCisgezE2LCAweGMxMzAsIDAsIHsweDgwLDB4ODgsMHhlOCwweDAyLDB4M2UsMHgwMCwweDg1LDB4ODAsMHgyZiwweGU0LDB4MjgsMHg3OCwweDAyLDB4ZGUsMHgwMCwweGI3IH19LAorIHsxNiwgMHhjMTQwLCAwLCB7MHg4MCwweDYxLDB4ZTAsMHgwMywweDc4LDB4MDIsMHg1ZSwweDgyLDB4YjcsMHg4MiwweDJkLDB4ZTAsMHgwOCwweDc4LDB4MDIsMHhjOCB9fSwKKyB7MTYsIDB4YzE1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwZCwweDAwLDB4ZjAsMHgxMCwweDNjLDB4ODAgfX0sCisgezE2LCAweGMxNjAsIDAsIHsweDBkLDB4MTAsMHg4MywweDhjLDB4MDAsMHhlMiwweDUwLDB4MjYsMHgwNCwweDBjLDB4MTEsMHgwMywweDg4LDB4NDAsMHhlYiwweDAwIH19LAorIHsxNiwgMHhjMTcwLCAwLCB7MHgzYywweGM0LDB4MGYsMHgzMCwweDAzLDB4OGMsMHgwMCwweGYzLDB4MDgsMHgzOCwweDQwLDB4MDcsMHgzMCwweDAzLDB4NmUsMHg0MCB9fSwKKyB7MTYsIDB4YzE4MCwgMCwgezB4ZDAsMHgwOCwweDNjLDB4ODgsMHgwZSwweDMwLDB4NDMsMHhkMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMxOTAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZmIsMHgzNCwweDNjLDB4YzksMHg0ZSwweGIwLDB4MjMsMHhlZCwweDIwLDB4ZmIsMHgwNCwweDNmIH19LAorIHsxNiwgMHhjMWEwLCAwLCB7MHhjOCwweDhmLDB4NzAsMHg1MywweDRjLDB4MDAsMHhlYiwweDEwLDB4MzEsMHhjNSwweDBlLDB4ZjQsMHgwMywweDZkLDB4MDAsMHhmMyB9fSwKKyB7MTYsIDB4YzFiMCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGYsMHhmNCwweDBiLDB4YmMsMHgwMCwweGNkLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmNCwweDgzLDB4ZDAgfX0sCisgezE2LCAweGMxYzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4Y2UsMHgwNCwweGM5LDB4MDQsMHhiMCwweGMxIH19LAorIHsxNiwgMHhjMWQwLCAwLCB7MHgwZiwweDk4LDB4MTMsMHg2YywweDkwLDB4Y2IsMHgwMiwweDNlLDB4YzAsMHg0ZiwweGIwLDB4NjMsMHhlNCwweDAwLDB4ZjEsMHg4MCB9fSwKKyB7MTYsIDB4YzFlMCwgMCwgezB4MTIsMHhjMCwweDBjLDB4YjUsMHgwMywweGVjLDB4YzAsMHhjZiwweDgzLDB4MzIsMHg0MCwweDBmLDB4YjMsMHgyMywweDJkLDB4YTQgfX0sCisgezE2LCAweGMxZjAsIDAsIHsweGZiLDB4MDAsMHgzZSwweDAwLDB4MGYsMHhiNCwweDAzLDB4MmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMjAwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwMCwweDg3LDB4MDAsMHgyMSwweGMwLDB4MmQsMHg2MCwweDAyLDB4MWMsMHgwMCwweGQ3LDB4MDAsMHgzOSB9fSwKKyB7MTYsIDB4YzIxMCwgMCwgezB4YzAsMHgwYiwweDYwLDB4MDIsMHhkYywweDAwLDB4YjUsMHgwMCwweDIxLDB4YzAsMHgyYSwweDcwLDB4MTIsMHhjYywweDgwLDB4ODcgfX0sCisgezE2LCAweGMyMjAsIDAsIHsweDAwLDB4MzUsMHhjMCwweDBiLDB4NzIsMHg1MiwweDFjLDB4MDAsMHhiNywweDAwLDB4MmQsMHg0MSwweDBiLDB4MzIsMHgwMiwweDEyIH19LAorIHsxNiwgMHhjMjMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweGJlLDB4MDAsMHg4MSwweGMwLDB4MjMsMHgyMCB9fSwKKyB7MTYsIDB4YzI0MCwgMCwgezB4MGIsMHhkOCwweDAyLDB4NWUsMHgwMCwweDA2LDB4YzAsMHgyZCwweGEwLDB4MGIsMHg3YywweDEyLDB4ZGUsMHgwOCwweGJmLDB4ODAgfX0sCisgezE2LCAweGMyNTAsIDAsIHsweGExLDB4ZTIsMHgyYSwweDdhLDB4MDIsMHhkZSwweDAwLDB4OTMsMHg4MCwweDI1LDB4NjAsMHgwYiwweDc4LDB4MWUsMHg1ZSwweDUwIH19LAorIHsxNiwgMHhjMjYwLCAwLCB7MHhiNywweDgwLDB4MmQsMHhhMCwweDBiLDB4NzgsMHgwMiwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzI3MCwgMCwgezB4NDgsMHgxNCwweGNlLDB4MDAsMHg4MywweDYwLDB4MjAsMHhjMCwweDA5LDB4MzEsMHgwMiwweDJjLDB4MDAsMHg5MywweDAwLDB4MjggfX0sCisgezE2LCAweGMyODAsIDAsIHsweGMwLDB4MWIsMHhiMCwweDA2LDB4Y2MsMHg4MCwweGIzLDB4NDgsMHgyMCwweGYwLDB4MGEsMHgzMCwweDAyLDB4ZWMsMHgwMCwweDkzIH19LAorIHsxNiwgMHhjMjkwLCAwLCB7MHg4MCwweDI0LDB4YzAsMHgwYiwweGIwLDB4MDIsMHg0YywweDEwLDB4YjMsMHhjOCwweDJjLDB4ZDIsMHg4YiwweDMwLDB4MDIsMHgxMiB9fSwKKyB7MTYsIDB4YzJhMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiYiwweDAwLDB4YzYsMHhjNCwweDMxLDB4ODEgfX0sCisgezE2LCAweGMyYjAsIDAsIHsweDBmLDB4ZTAsMHgwMywweDY4LDB4MDAsMHhjZSwweDgwLDB4M2YsMHhhMiwweDBiLDB4ZTgsMHgwMywweGY5LDB4MDAsMHhmZSwweDQwIH19LAorIHsxNiwgMHhjMmMwLCAwLCB7MHgzMSwweDgwLDB4NmUsMHhhMCwweDA3LDB4ZTgsMHgwMCwweGRhLDB4MDAsMHgyNiwweDgxLDB4MGYsMHhhMCwweDAyLDB4NjgsMHgwMSB9fSwKKyB7MTYsIDB4YzJkMCwgMCwgezB4ZjYsMHhlMCwweDNkLDB4OTIsMHgwZiwweGEwLDB4MDMsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMyZTAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweGMyLDB4ZjgsMHgwNCwweDNlLDB4MTQsMHgwZiwweDgwLDB4MTMsMHhlMCwweDEwLDB4ZjgsMHgwMSwweDNlIH19LAorIHsxNiwgMHhjMmYwLCAwLCB7MHgxMCwweDBmLDB4ODAsMHg0MywweGUwLDB4MDAsMHhiOCwweDAwLDB4M2UsMHgwMCwweDQ3LDB4ODAsMHgwMywweGUwLDB4MDIsMHhlOCB9fSwKKyB7MTYsIDB4YzMwMCwgMCwgezB4MTAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDA3LDB4YTAsMHgwMCwweGY4LDB4MDAsMHgyZSwweDAwLDB4MGYsMHg4MCwweDBiLDB4ZDIgfX0sCisgezE2LCAweGMzMTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGY5LDB4MDEsMHgzMiwweDQwIH19LAorIHsxNiwgMHhjMzIwLCAwLCB7MHg4YywweDkwLDB4MDMsMHhlNCwweDAwLDB4YzksMHgwMCwweDM2LDB4NDIsMHgwZiwweDkwLDB4MDMsMHhhNCwweDAwLDB4YzksMHgwMCB9fSwKKyB7MTYsIDB4YzMzMCwgMCwgezB4M2UsMHg0MiwweDBkLDB4OTAsMHgwMywweDY0LDB4MDAsMHhkOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwYiwweDY0LDB4MDAgfX0sCisgezE2LCAweGMzNDAsIDAsIHsweGY5LDB4OTAsMHgzMiwweDQxLDB4MGMsMHg5MCwweDAzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMzUwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweGI5LDB4YzgsMHhhMiwweDYwLDB4MGEsMHg5MiwweDAyLDB4ZTQsMHgwMCwweDg5LDB4NDAsMHgyZSB9fSwKKyB7MTYsIDB4YzM2MCwgMCwgezB4NTgsMHgwYiwweDkwLDB4MDIsMHgwNCwweDAwLDB4ZDksMHgwMCwweDJlLDB4NDIsMHgwOCwweDkwLDB4MDIsMHhlNCwweDA0LDB4ODkgfX0sCisgezE2LCAweGMzNzAsIDAsIHsweDAwLDB4MmUsMHg0MCwweDBiLDB4OTAsMHgwNiwweDI0LDB4MDQsMHhiOSwweDA4LDB4MmEsMHg0MCwweDQ4LDB4OTAsMHgxMiwweDIwIH19LAorIHsxNiwgMHhjMzgwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDAsMHhiOSwweDEwLDB4MjIsMHg0NCB9fSwKKyB7MTYsIDB4YzM5MCwgMCwgezB4MDgsMHg5MCwweDAyLDB4ZTQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDQ1LDB4OGIsMHg5MCwweDAyLDB4YTQsMHgwMCwweDg5LDB4MDAgfX0sCisgezE2LCAweGMzYTAsIDAsIHsweDJhLDB4NDAsMHgwOSwweDkwLDB4MDIsMHhlNCwweDAwLDB4OTksMHg4MCwweDJlLDB4NDAsMHgwYiwweDkwLDB4MjYsMHgyNCwweDAwIH19LAorIHsxNiwgMHhjM2IwLCAwLCB7MHhiOSwweDAxLDB4MjIsMHg3MCwweDA5LDB4MTAsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzNjMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4MDgsMHhiMSwweDIwLDB4MjAsMHg0MCwweDBhLDB4MTAsMHgwMiwweGM0LDB4ODAsMHg4MywweDAwLDB4MmMgfX0sCisgezE2LCAweGMzZDAsIDAsIHsweDUwLDB4NGIsMHgxMCwweDAyLDB4MjQsMHgwMCwweDkxLDB4MDAsMHgyZSwweDQwLDB4MDgsMHgxMiwweDAyLDB4YzQsMHg4MSwweDgxIH19LAorIHsxNiwgMHhjM2UwLCAwLCB7MHhhMiwweDZjLDB4NDAsMHgwYiwweDEyLDB4MDIsMHgwNCwweDgwLDB4YjksMHgyMCwweDJhLDB4NDgsMHgyOSwweDEyLDB4MDIsMHgwMiB9fSwKKyB7MTYsIDB4YzNmMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MSwweDQwLDB4ZjgsMHgwMCwweDMyLDB4ODAgfX0sCisgezE2LCAweGM0MDAsIDAsIHsweDA4LDB4ODAsMHgwMywweGUxLDB4NDIsMHhjOCwweDAwLDB4MzIsMHgwMCwweDFmLDB4ODUsMHgwMywweGExLDB4NDAsMHhjOCwweDUwIH19LAorIHsxNiwgMHhjNDEwLCAwLCB7MHgzYSwweDAwLDB4OGQsMHg4NSwweDAzLDB4NjEsMHg0MCwweGQ4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHgwNSwweDAzLDB4MjEsMHg0MCB9fSwKKyB7MTYsIDB4YzQyMCwgMCwgezB4ZjgsMHg1MCwweDMyLDB4MTQsMHgwZCwweDg1LDB4MGIsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM0MzAsIDAsIHsweDk4LDB4MWQsMHhmNCwweDA0LDB4ZmQsMHgxMCwweDNmLDB4NDAsMHgwZiwweDUwLDB4MDMsMHhjNCwweDQwLDB4ZmQsMHgwMCwweDNmIH19LAorIHsxNiwgMHhjNDQwLCAwLCB7MHg1MSwweDBmLDB4ZDAsMHgwMywweGY0LDB4MDAsMHhmZiwweDAxLDB4M2QsMHg0MCwweDBmLDB4OTEsMHgwMywweGU0LDB4NDAsMHhmZCB9fSwKKyB7MTYsIDB4YzQ1MCwgMCwgezB4MTAsMHgzZiwweDRhLDB4MGYsMHg5MSwweDAzLDB4ZTQsMHg0MCwweGZkLDB4MTAsMHgzZiwweDQ0LDB4MGUsMHg5MSwweDAzLDB4ZTYgfX0sCisgezE2LCAweGM0NjAsIDAsIHsweDAyLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4YzUsMHgwMCwweGNkLDB4MDAsMHgzMSwweDQwIH19LAorIHsxNiwgMHhjNDcwLCAwLCB7MHgwZCwweGQwLDB4NDMsMHhlNCwweDAwLDB4Y2QsMHgwMCwweDMzLDB4NDAsMHg0ZiwweDExLDB4MDIsMHhlNCwweDA0LDB4YzEsMHgwMCB9fSwKKyB7MTYsIDB4YzQ4MCwgMCwgezB4M2QsMHg0MCwweDBjLDB4OTAsMHgwMywweGU0LDB4MDAsMHhlZCwweGE0LDB4MzIsMHg1MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAgfX0sCisgezE2LCAweGM0OTAsIDAsIHsweGZkLDB4MDAsMHgzZiwweDQwLDB4MGYsMHg5MCwweDAzLDB4YzYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNGEwLCAwLCB7MHgzOCwweDEwLDB4ZTIsMHgwOCwweGQ4LDB4MDAsMHgzMiwweDAxLDB4MDAsMHg4MCwweDEyLDB4YzAsMHgwMCwweDQ4LDB4MDAsMHgzNiB9fSwKKyB7MTYsIDB4YzRiMCwgMCwgezB4ODAsMHgwYiwweDhhLDB4MDIsMHhlMCwweDAwLDB4YTgsMHgwMCwweDJlLDB4MDAsMHgwZiwweDgwLDB4MDIsMHhlMCwweDAwLDB4ODggfX0sCisgezE2LCAweGM0YzAsIDAsIHsweDUwLDB4MzQsMHgyOCwweDBiLDB4ODAsMHgwMiwweGUwLDB4MDAsMHhiOCwweDAwLDB4MmUsMHgwMCwweDBiLDB4ODAsMHgwMiwweGNlIH19LAorIHsxNiwgMHhjNGQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4ODAsMHg4MSwweDAwLDB4MjYsMHg0MCB9fSwKKyB7MTYsIDB4YzRlMCwgMCwgezB4MDksMHgxOCwweDAyLDB4YzQsMHgwOCwweDIxLDB4MDAsMHgyOCwweDQwLDB4OGIsMHgxMCwweDAyLDB4YzQsMHgwMCwweGIxLDB4MDEgfX0sCisgezE2LCAweGM0ZjAsIDAsIHsweDJlLDB4NDAsMHgxOCwweDEwLDB4MDIsMHhjNCwweDAwLDB4YTEsMHgwMSwweDIwLDB4NDgsMHgxYiwweDEwLDB4MDIsMHhjNCwweDAwIH19LAorIHsxNiwgMHhjNTAwLCAwLCB7MHhiMSwweDAwLDB4NmMsMHg0MCwweDBiLDB4MTAsMHgxMiwweGMyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzUxMCwgMCwgezB4MTgsMHgxMSwweGE0LDB4MDAsMHg5OSwweDgwLDB4YTIsMHg0MiwweDQ4LDB4OTAsMHgwMiwweGU0LDB4MDAsMHhhOSwweDJhLDB4MjYgfX0sCisgezE2LCAweGM1MjAsIDAsIHsweDQ0LDB4MGIsMHg5MCwweDgyLDB4YzQsMHg4MSwweGI5LDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5MCwweDQyLDB4YzQsMHgwMCwweDg5IH19LAorIHsxNiwgMHhjNTMwLCAwLCB7MHgwMCwweDI2LDB4NDAsMHgwYiwweDkwLDB4MDIsMHhlNCwweDAwLDB4YjksMHgwMSwweDJlLDB4NDEsMHgwYiwweDkwLDB4MDIsMHhjNiB9fSwKKyB7MTYsIDB4YzU0MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhjNSwweDIwLDB4YzksMHg4NCwweDMwLDB4NzAgfX0sCisgezE2LCAweGM1NTAsIDAsIHsweDBkLDB4OTAsMHgxMywweGU0LDB4MDIsMHhlOSwweDAwLDB4MzIsMHg3MCwweDBmLDB4OTQsMHgwMywweGU0LDB4MDAsMHhmOSwweDQwIH19LAorIHsxNiwgMHhjNTYwLCAwLCB7MHgzYywweDQ4LDB4MGMsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGUxLDB4MDAsMHgzMiwweDQwLDB4MGYsMHg5MCwweDAxLDB4ZTQsMHgwMCB9fSwKKyB7MTYsIDB4YzU3MCwgMCwgezB4ZjksMHg5MCwweDNlLDB4NjAsMHgwZiwweDkwLDB4MjYsMHhlOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM1ODAsIDAsIHsweDI4LDB4MDEsMHhhNSwweDAwLDB4ZjEsMHgwNCwweDNhLDB4NDQsMHg4ZiwweDkwLDB4MDMsMHhlNCwweDEwLDB4YzksMHgwNCwweDNlIH19LAorIHsxNiwgMHhjNTkwLCAwLCB7MHg2MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhlOSwweDIwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGU0LDB4MTAsMHhmOSB9fSwKKyB7MTYsIDB4YzVhMCwgMCwgezB4OTAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4ODAsMHgzZSwweDY0LDB4MGYsMHg5MCwweDA3LDB4Y2EgfX0sCisgezE2LCAweGM1YjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTEsMHgwMCwweGM4LDB4MDQsMHgzYSwweDAwIH19LAorIHsxNiwgMHhjNWMwLCAwLCB7MHgxZSwweDgwLDB4MDMsMHg4MCwweDAzLDB4YzgsMHg0MCwweDJhLDB4MDQsMHgxZiwweDgwLDB4MDMsMHgyMCwweDAwLDB4ODgsMHgwMCB9fSwKKyB7MTYsIDB4YzVkMCwgMCwgezB4MzIsMHgzMCwweDBjLDB4ODAsMHgwMywweDIwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBjLDB4ODAsMHgwMywweGUwLDB4MDAgfX0sCisgezE2LCAweGM1ZTAsIDAsIHsweGM4LDB4ODAsMHgzZSwweDIwLDB4MGYsMHg4MCwweDAzLDB4Y2EsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNWYwLCAwLCB7MHgyOCwweDA1LDB4MzgsMHgwMCwweGFlLDB4ZDAsMHgzNywweDgwLDB4MDgsMHhlYywweDQ2LDB4MzgsMHgwMCwweGQ2LDB4MDQsMHgyMyB9fSwKKyB7MTYsIDB4YzYwMCwgMCwgezB4YTAsMHgwYiwweGEwLDB4NDEsMHg3OCwweDA0LDB4ZmEsMHgwMCwweDM3LDB4ODAsMHgwZCwweGEwLDB4MDIsMHhhOCwweDEwLDB4ZWUgfX0sCisgezE2LCAweGM2MTAsIDAsIHsweDIxLDB4MmUsMHg4MCwweDA4LDB4YTAsMHgwMiwweGU4LDB4MDgsMHg4ZSwweDgwLDB4MmYsMHhhMCwweDhiLDB4YTAsMHgwMiwweGNhIH19LAorIHsxNiwgMHhjNjIwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwMSwweDRjLDB4MDIsMHg4MywweGMwLDB4YTgsMHhlOCB9fSwKKyB7MTYsIDB4YzYzMCwgMCwgezB4NGEsMHgzNiwweDAyLDB4OGMsMHgwMCwweDEzLDB4YTAsMHgyOCwweGMyLDB4MGIsMHgzMCwweDA2LDB4MGMsMHgwMCwweGIzLDB4MDAgfX0sCisgezE2LCAweGM2NDAsIDAsIHsweDI0LDB4ODQsMHgwOSwweDMwLDB4MDIsMHgwYywweDAwLDB4YjMsMHgyMCwweDI4LDB4YzAsMHgwOSwweDMwLDB4MDIsMHhjYywweDAwIH19LAorIHsxNiwgMHhjNjUwLCAwLCB7MHg4MywweDgwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweGNhLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzY2MCwgMCwgezB4YTAsMHgwMSwweDNjLDB4NDQsMHhhZiwweDQwLDB4MjUsMHhjMiwweDQ4LDB4ZjgsMHg4MiwweDFjLDB4YzgsMHg5ZiwweDA4LDB4MjEgfX0sCisgezE2LCAweGM2NzAsIDAsIHsweGMwLDB4OGIsMHhmOCwweDAyLDB4NWMsMHgwMCwweGJmLDB4YjAsMHgyNywweDgwLDB4MDksMHgzYSwweDAyLDB4OWMsMHgwMCwweGE1IH19LAorIHsxNiwgMHhjNjgwLCAwLCB7MHgwMiwweDJkLDB4ZTgsMHgwOSwweDcwLDB4MDIsMHhjZSwweDgwLDB4ODUsMHgwOCwweDJkLDB4YzIsMHgwYiwweDczLDB4MDIsMHhlOCB9fSwKKyB7MTYsIDB4YzY5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4YzcsMHg4MiwweGE5LDB4ZTAgfX0sCisgezE2LCAweGM2YTAsIDAsIHsweDBhLDB4NzgsMHgwMiwweDllLDB4NDAsMHg5NywweDg0LDB4MzksMHhhMCwweDBiLDB4N2EsMHg4MywweDNmLDB4ODAsMHhkNywweDkxIH19LAorIHsxNiwgMHhjNmIwLCAwLCB7MHgzNSwweGEwLDB4MGQsMHg3YSwweDA5LDB4MWUsMHg0NCwweGY3LDB4ODAsMHgzZCwweGU4LDB4MmQsMHg3YSwweDAzLDB4ZGUsMHg4MiB9fSwKKyB7MTYsIDB4YzZjMCwgMCwgezB4YzYsMHg4MCwweDNkLDB4MjAsMHg0YiwweDdiLDB4MjMsMHhlYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM2ZDAsIDAsIHsweDA4LDB4MWQsMHhhYywweDAwLDB4ZDMsMHgwMCwweDNlLDB4YzEsMHgwZiwweDMwLDB4MDMsMHhlZCwweDgwLDB4ZTMsMHgwMCwweDNlIH19LAorIHsxNiwgMHhjNmUwLCAwLCB7MHg4MCwweDBmLDB4YjYsMHgyMSwweGVjLDB4MDgsMHhkYiwweDIxLDB4M2UsMHg4MCwweDBmLDB4YjUsMHgwMywweDZjLDB4NDAsMHhmOSB9fSwKKyB7MTYsIDB4YzZmMCwgMCwgezB4MDAsMHgzZSwweGRjLDB4MGUsMHhiMiwweDAzLDB4ZWQsMHg0MCwweGY5LDB4MDIsMHgzZSwweDgwLDB4MGYsMHhiMCwweDAzLDB4YzIgfX0sCisgezE2LCAweGM3MDAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHgwMCwweGNmLDB4ODAsMHgzZCwweGUwIH19LAorIHsxNiwgMHhjNzEwLCAwLCB7MHgwZiwweGM4LDB4NDMsMHhmZSwweDAwLDB4ZmUsMHg4NCwweDNmLDB4ZTAsMHgwZCwweGY4LDB4YzMsMHhmZiwweDEwLDB4YWYsMHg5MCB9fSwKKyB7MTYsIDB4YzcyMCwgMCwgezB4MzUsMHhhMCwweDBjLDB4ZmMsMHgwMywweDNlLDB4MTQsMHhlYywweDg0LDB4M2YsMHhmMCwweDBlLDB4ZmMsMHhjMywweGZmLDB4MDggfX0sCisgezE2LCAweGM3MzAsIDAsIHsweDRmLDB4ODAsMHgzMywweGU0LDB4MGMsMHhmOCwweDAzLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNzQwLCAwLCB7MHhhOCwweDExLDB4OWMsMHgwMCwweGQ3LDB4YTIsMHgyZCwweGM0LDB4MGMsMHg0MSwweGMyLDB4ZGMsMHgwMCwweDc0LDB4MDAsMHgyNSB9fSwKKyB7MTYsIDB4Yzc1MCwgMCwgezB4ODAsMHgwZiwweDcyLDB4NDIsMHhkYywweDkwLDB4ZDcsMHgzOCwweDJkLDB4OTgsMHgwYSwweDcwLDB4MDIsMHgxYywweDA0LDB4ODYgfX0sCisgezE2LCAweGM3NjAsIDAsIHsweDAwLDB4M2YsMHhjMCwweDBkLDB4NzAsMHgwMiwweGNjLDB4MDAsMHg4NiwweDA4LDB4MzcsMHhjNiwweDI4LDB4NzAsMHgwMiwweDJhIH19LAorIHsxNiwgMHhjNzcwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4MDAsMHg4NywweDYwLDB4MmQsMHhjMiB9fSwKKyB7MTYsIDB4Yzc4MCwgMCwgezB4MGEsMHg1MCwweDAyLDB4ZGMsMHgwMCwweGI2LDB4MTAsMHgyNSwweGMyLDB4MDksMHg3MCwweDg2LDB4ZGMsMHgzMCwweDk3LDB4MDAgfX0sCisgezE2LCAweGM3OTAsIDAsIHsweDI1LDB4ODAsMHgwOCwweDMwLDB4MDIsMHg1YywweDAwLDB4ODcsMHgwOCwweDJkLDB4YzAsMHgwOCwweDcwLDB4MDIsMHhjYywweDQwIH19LAorIHsxNiwgMHhjN2EwLCAwLCB7MHg4NiwweDAwLDB4MjEsMHgwMCwweDA5LDB4NzAsMHgwYSwweDAwLDB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzdiMCwgMCwgezB4MjAsMHgxNCwweGVkLDB4ODAsMHg5MywweDAwLDB4MGMsMHhlMSwweDI4LDB4MTgsMHgwMiwweGNjLDB4MDgsMHhhMCwweDAwLDB4MjQgfX0sCisgezE2LCAweGM3YzAsIDAsIHsweDEyLDB4MWEsMHgzNCwweDAyLDB4Y2YsMHgwNCwweDkzLDB4NDAsMHgyYywweDgwLDB4MGEsMHhiMCwweDIyLDB4NGMsMHgwMiwweDgxIH19LAorIHsxNiwgMHhjN2QwLCAwLCB7MHg4MCwweDI4LDB4ZTAsMHgyOCwweDMwLDB4MDIsMHhjYywweDAwLDB4ODgsMHg4MiwweDI0LDB4MjAsMHgwOCwweGIwLDB4MDIsMHgwOCB9fSwKKyB7MTYsIDB4YzdlMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiZiwweDIwLDB4YzksMHhlMCwweDJjLDB4ZjEgfX0sCisgezE2LCAweGM3ZjAsIDAsIHsweDBlLDB4YmQsMHgwMywweGZjLDB4MDAsMHhiOSwweDQwLDB4MzYsMHg0MCwweDA5LDB4ZjUsMHgwMiwweGZkLDB4NDAsMHhmZiwweDgwIH19LAorIHsxNiwgMHhjODAwLCAwLCB7MHgzNiwweGEyLDB4MDgsMHhmMCwweDBiLDB4N2MsMHgwMCwweGViLDB4ODAsMHgyZiwweGUwLDB4MGEsMHhmMCwweDQzLDB4ZmMsMHgwMiB9fSwKKyB7MTYsIDB4YzgxMCwgMCwgezB4OGIsMHhkMCwweDMyLDB4ZjAsMHgwZCwweGYwLDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM4MjAsIDAsIHsweDgwLDB4MDAsMHhlYywweDEwLDB4ZmIsMHgwMCwweDNlLDB4YzgsMHgwZiwweDk0LDB4MTMsMHhlYywweDAwLDB4ZjksMHg0MCwweDM2IH19LAorIHsxNiwgMHhjODMwLCAwLCB7MHg0MCwweDFmLDB4YjAsMHgwMywweGVjLDB4MTAsMHhmYiwweDAxLDB4M2UsMHhkMCwweDBmLDB4YjAsMHgwMywweGFjLDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4Yzg0MCwgMCwgezB4MDAsMHgzZSwweGM0LDB4MGYsMHhiMCwweDAxLDB4ZWMsMHgwMCwweGY5LDB4MDQsMHgzZSwweDQ4LDB4MGYsMHhiMCwweDAzLDB4ZTAgfX0sCisgezE2LCAweGM4NTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweGRmLDB4MDAsMHgzZiwweGMwIH19LAorIHsxNiwgMHhjODYwLCAwLCB7MHgwYywweGUwLDB4MDcsMHhmYywweDAwLDB4ZmMsMHgwYSwweDI3LDB4MDAsMHg0ZiwweGYwLDB4MDMsMHhmYywweDAwLDB4ZmYsMHgwOCB9fSwKKyB7MTYsIDB4Yzg3MCwgMCwgezB4MzMsMHg4MCwweDBjLDB4ZjAsMHgwMCwweDJjLDB4MDAsMHg1ZiwweDAwLDB4MzMsMHhjMCwweDBjLDB4ZjAsMHgwMSwweGZjLDB4MDAgfX0sCisgezE2LCAweGM4ODAsIDAsIHsweGZlLDB4MDAsMHgyMywweDQwLDB4MGYsMHhiMCwweDAzLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjODkwLCAwLCB7MHg4MSwweDA0LDB4NmMsMHgwMCwweDhiLDB4ODYsMHgyZSwweGUwLDB4NDgsMHg4ZiwweDAyLDB4ZWMsMHgwOCwweGI4LDB4YTAsMHgzNiB9fSwKKyB7MTYsIDB4YzhhMCwgMCwgezB4MzAsMHg0YiwweGIwLDB4MDMsMHhhYywweDBjLDB4OWIsMHgwMiwweDNjLDB4YTAsMHgwYywweGIwLDB4NDMsMHg2YywweDAwLDB4YjEgfX0sCisgezE2LCAweGM4YjAsIDAsIHsweDAwLDB4MjgsMHhjMCwweDBkLDB4YjAsMHgxMiwweGVjLDB4MTAsMHhiOSwweDgwLDB4YTIsMHg2MSwweDBiLDB4YjAsMHgwMiwweDIwIH19LAorIHsxNiwgMHhjOGMwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHg5YiwweDg4LDB4MmUsMHhlMCB9fSwKKyB7MTYsIDB4YzhkMCwgMCwgezB4MDgsMHhhMCwweDAyLDB4ZWMsMHgwMSwweGJiLDB4ODAsMHgyNiwweDYyLDB4MGIsMHhiMCwweDAyLDB4ZWMsMHgwMCwweGIzLDB4MDEgfX0sCisgezE2LCAweGM4ZTAsIDAsIHsweDJhLDB4MjEsMHgwOCwweGIwLDB4MTIsMHgyYywweDAwLDB4YjgsMHgwMCwweDIyLDB4YzAsMHgwOCwweGIwLDB4MTIsMHhlYywweDE0IH19LAorIHsxNiwgMHhjOGYwLCAwLCB7MHhiOSwweDg0LDB4MjIsMHhhMiwweDBiLDB4YjAsMHgwMiwweGEwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzkwMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDQsMHg5MywweDAwLDB4MmMsMHhlMCwweDA4LDB4MDAsMHgwMiwweGNjLDB4MDksMHg5MSwweDAwLDB4MjAgfX0sCisgezE2LCAweGM5MTAsIDAsIHsweDQwLDB4MGIsMHgzMCwweDA2LDB4NGMsMHgwNCwweDEzLDB4MDAsMHgyNiwweDAwLDB4MDgsMHgzMCwweDAyLDB4Y2MsMHgwNCwweGIyIH19LAorIHsxNiwgMHhjOTIwLCAwLCB7MHgwMCwweDJhLDB4YzAsMHgwMSwweDMwLDB4MDAsMHhjZCwweDAwLDB4YjAsMHgwMCwweDIwLDB4ODAsMHgwYiwweDMwLDB4MGEsMHgwMiB9fSwKKyB7MTYsIDB4YzkzMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4ZGIsMHgyNCwweDZlLDB4YzAgfX0sCisgezE2LCAweGM5NDAsIDAsIHsweDJjLDB4YTAsMHgwMiwweGZjLDB4MDAsMHhiYSwweDA0LDB4MjYsMHg0MCwweDRmLDB4ZjAsMHg1NywweGZjLDB4MDAsMHgzZiwweDAxIH19LAorIHsxNiwgMHhjOTUwLCAwLCB7MHgzYSwweDAwLDB4MmMsMHhmMCwweDAxLDB4M2MsMHgwMCwweGRiLDB4MDAsMHgzMywweGMwLDB4ODQsMHhmMCwweDAzLDB4ZmQsMHgwOCB9fSwKKyB7MTYsIDB4Yzk2MCwgMCwgezB4ZmEsMHgwMCwweDMyLDB4MDAsMHgwZiwweGYwLDB4MDMsMHgwMCwweDAxLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM5NzAsIDAsIHsweGEwLDB4MTksMHhkYywweDAwLDB4ZWEsMHg0MCwweDNmLDB4MDAsMHgwNywweGMwLDB4MDMsMHhmYywweDA0LDB4ZmMsMHgwMCwweDNmIH19LAorIHsxNiwgMHhjOTgwLCAwLCB7MHg0MCwweDBmLDB4ZjAsMHgwMywweDljLDB4MDAsMHhmZiwweDAwLDB4M2YsMHgwMCwweDBlLDB4ZjAsMHgwMywweDdjLDB4MDAsMHhmZCB9fSwKKyB7MTYsIDB4Yzk5MCwgMCwgezB4MDAsMHgzZiwweGMxLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHg4NCwweGY0LDB4MDAsMHgzZiwweDAwLDB4MGYsMHhmMCwweDAzLDB4ZTggfX0sCisgezE2LCAweGM5YTAsIDAsIHsweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAxLDB4ZjAsMHg4MCwweGZmLDB4MDAsMHgwMywweGMyIH19LAorIHsxNiwgMHhjOWIwLCAwLCB7MHgwZiwweGMyLDB4MDMsMHgzZSwweDAwLDB4ZGYsMHhjMCwweDNlLDB4YzAsMHg0ZCwweGRiLDB4MDIsMHhiMCwweGMwLDB4ZGMsMHgzMCB9fSwKKyB7MTYsIDB4YzljMCwgMCwgezB4M2YsMHhlMCwweDBmLDB4ZGIsMHgyMywweGY2LDB4MjAsMHhmZiwweDI2LDB4MzMsMHhlMCwweDBmLDB4NTIsMHgwMywweDVlLDB4MDAgfX0sCisgezE2LCAweGM5ZDAsIDAsIHsweGZmLDB4ODAsMHgzMywweGMwLDB4NGMsMHg0OSwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjOWUwLCAwLCB7MHg4MCwweDEwLDB4ZTEsMHhlMCwweGI3LDB4MDgsMHgyMywweGYwLDB4MGIsMHhhZCwweDBhLDB4MmUsMHgwMCwweDlhLDB4MDQsMHgyZSB9fSwKKyB7MTYsIDB4YzlmMCwgMCwgezB4YjAsMHgwOSwweDhmLDB4MDMsMHhhMCwweDQwLDB4YjksMHgzMCwweDJlLDB4YTAsMHgwYiwweDlmLDB4MDMsMHhhNywweDAwLDB4YmIgfX0sCisgezE2LCAweGNhMDAsIDAsIHsweDgwLDB4MjYsMHhlMCwweDBiLDB4ZGQsMHgwMiwweDJlLDB4MDAsMHhiYiwweDgwLDB4MjIsMHhmNCwweDBhLDB4OTIsMHgwMiwweGEwIH19LAorIHsxNiwgMHhjYTEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGM4LDB4ODAsMHhiMywweDEwLDB4MjQsMHhjMCB9fSwKKyB7MTYsIDB4Y2EyMCwgMCwgezB4MGIsMHg4MCwweDAyLDB4YWMsMHgwMCwweGEzLDB4MjQsMHgyYywweGQwLDB4MDgsMHgxMCwweDA2LDB4YzAsMHg4MCwweGIyLDB4MDEgfX0sCisgezE2LCAweGNhMzAsIDAsIHsweDJjLDB4ZWEsMHg0YiwweDAwLDB4MTIsMHhjMiwweDA0LDB4YjMsMHgxMCwweDA4LDB4YzAsMHgwYSwweDkwLDB4MDIsMHgwYywweDAwIH19LAorIHsxNiwgMHhjYTQwLCAwLCB7MHg5MywweDA0LDB4MjQsMHhjMCwweDA5LDB4ODIsMHgwMiwweGEyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2E1MCwgMCwgezB4YzAsMHgxNSwweGE1LDB4MDAsMHhiYiwweDAwLDB4MjIsMHhjMCwweDBiLDB4ODAsMHgwMiwweGFjLDB4MDgsMHhiYiwweDE4LDB4MmUgfX0sCisgezE2LCAweGNhNjAsIDAsIHsweGUwLDB4MTgsMHg4OCwweDAyLDB4ZWMsMHgwMSwweGJhLDB4MDAsMHgyZSwweDgwLDB4MGIsMHg5OCwweDg2LDB4ZTIsMHgwMCwweGJiIH19LAorIHsxNiwgMHhjYTcwLCAwLCB7MHgwMCwweDIyLDB4YzQsMHgwYiwweDkwLDB4MDIsMHg2YywweDAwLDB4YmIsMHgwMCwweGE2LDB4YzAsMHgwYiwweDkwLDB4MDAsMHhiMCB9fSwKKyB7MTYsIDB4Y2E4MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTEsMHhlNywweDAwLDB4ZmIsMHgwMCwweGIyLDB4YzAgfX0sCisgezE2LCAweGNhOTAsIDAsIHsweDBmLDB4YTgsMHgwMywweGFjLDB4MDIsMHhlYiwweDAwLDB4M2UsMHg2MCwweDBkLDB4OWUsMHgwMywweGVjLDB4MDAsMHhkOCwweDQwIH19LAorIHsxNiwgMHhjYWEwLCAwLCB7MHgzZSwweDQwLDB4MGYsMHg4OCwweDQzLDB4ZTIsMHgwMCwweGZiLDB4MjAsMHgzMiwweGMwLDB4MGYsMHgxMCwweDBiLDB4NmYsMHg5MCB9fSwKKyB7MTYsIDB4Y2FiMCwgMCwgezB4NWIsMHg4MiwweDM2LDB4YzAsMHgyZCwweDA4LDB4MDEsMHg5MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNhYzAsIDAsIHsweGUwLDB4MDEsMHhiNywweDA4LDB4ZjcsMHgwMCwweDNmLDB4YzAsMHgwZiwweGY5LDB4MDMsMHg3YywweDA4LDB4Y2YsMHg4MiwweDNjIH19LAorIHsxNiwgMHhjYWQwLCAwLCB7MHgwMCwweGFmLDB4ZDAsMHgyMSwweGJjLDB4MDgsMHhmZCwweDEwLDB4M2YsMHg4MCwweDhmLDB4YzAsMHgwMywweGE0LDB4MDAsMHhmNyB9fSwKKyB7MTYsIDB4Y2FlMCwgMCwgezB4MDEsMHhiZiwweGMwLDB4MDcsMHhkMCwweDAzLDB4YmQsMHgzMCwweGZmLDB4YTQsMHgzOCwweGMwLDB4MGUsMHhkYSwweDAzLDB4ZjggfX0sCisgezE2LCAweGNhZjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YTgsMHgwMCwweGZiLDB4MDAsMHhiMiwweGMxIH19LAorIHsxNiwgMHhjYjAwLCAwLCB7MHgwZSwweDgxLDB4MDMsMHhlYywweDQwLDB4ZmIsMHg0NCwweDNhLDB4YzEsMHgwZSwweDk1LDB4MDMsMHhlMCwweDAwLDB4Y2IsMHg0MSB9fSwKKyB7MTYsIDB4Y2IxMCwgMCwgezB4MzIsMHg0ZCwweDBmLDB4ODEsMHgwMywweGUwLDB4MjAsMHhjOSwweDAwLDB4NzIsMHhlOCwweDQ0LDB4OTEsMHgwMywweDZkLDB4MDAgfX0sCisgezE2LCAweGNiMjAsIDAsIHsweGNiLDB4MDIsMHgzZSwweGMwLDB4MGMsMHg4MCwweDAzLDB4OTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjYjMwLCAwLCB7MHhjOCwweDA1LDB4MjQsMHgwMCwweGJmLDB4MDAsMHgzMywweGM0LDB4MDgsMHgxZCwweDAzLDB4OGMsMHgwMCwweGJiLDB4OTgsMHgzNiB9fSwKKyB7MTYsIDB4Y2I0MCwgMCwgezB4NDgsMHg0ZCwweDk4LDB4MjIsMHhlZCwweDQwLDB4ZGIsMHgwMCwweDM2LDB4YjAsMHgwYiwweDk4LDB4MDIsMHhlMywweDAwLDB4ZGIgfX0sCisgezE2LCAweGNiNTAsIDAsIHsweDAwLDB4MzIsMHhlMCwweDg4LDB4ZDgsMHgwMiwweDJjLDB4MDIsMHhjMywweDgwLDB4MmYsMHhjMCwweDA4LDB4OTAsMHgwMywweDcyIH19LAorIHsxNiwgMHhjYjYwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwMSwweDQ0LDB4MDAsMHhiMywweDAwLDB4MjAsMHhmMCB9fSwKKyB7MTYsIDB4Y2I3MCwgMCwgezB4MTgsMHgwOCwweDAyLDB4NGYsMHg4NCwweGIxLDB4YzAsMHgyNCwweGMwLDB4ODksMHgwNiwweDAyLDB4YzQsMHgwMCwweDkxLDB4MDAgfX0sCisgezE2LCAweGNiODAsIDAsIHsweDIwLDB4ZjAsMHgxYiwweDE4LDB4ODIsMHhjNiwweDAwLDB4OTMsMHgwMCwweDJjLDB4ZDEsMHgwOCwweDFlLDB4MDIsMHgwZSwweDQ0IH19LAorIHsxNiwgMHhjYjkwLCAwLCB7MHg5MywweDk0LDB4MmMsMHhjMCwweDA4LDB4MjAsMHgwMiwweGI4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2JhMCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDQsMHhiNywweDgwLDB4MjAsMHhlMiwweDA4LDB4NjgsMHgwNiwweDllLDB4ODAsMHhiZiwweDg0LDB4MjUgfX0sCisgezE2LCAweGNiYjAsIDAsIHsweGE4LDB4MDksMHg2OCwweDAyLDB4YzYsMHgwMCwweDkzLDB4YTAsMHg2NSwweGU0LDB4MGIsMHg3OCwweDEyLDB4ZGUsMHgwMCwweDkzIH19LAorIHsxNiwgMHhjYmMwLCAwLCB7MHgwMCwweGExLDB4ZTAsMHgwOCwweGQ4LDB4MDIsMHgxZSwweGQwLDB4YTcsMHg4MCwweDJkLDB4ZTAsMHgwOCwweGY4LDB4MDIsMHg0OCB9fSwKKyB7MTYsIDB4Y2JkMCwgMCwgezB4MTAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwOCwweDAwLDB4YjMsMHgyMCwweDMwLDB4YzAgfX0sCisgezE2LCAweGNiZTAsIDAsIHsweDBhLDB4MjIsMHgwMiwweGNlLDB4NDAsMHhmMywweGEwLDB4M2MsMHhlOCwweDBiLDB4MzAsMHgwMiwweGMxLDB4MDAsMHhkMCwweGMxIH19LAorIHsxNiwgMHhjYmYwLCAwLCB7MHgzMCwweGMwLDB4MGIsMHgyMSwweDEzLDB4Y2MsMHgyMSwweGQzLDB4MDAsMHgyYywweGMwLDB4MmMsMHgxMCwweDBiLDB4MGMsMHg4MCB9fSwKKyB7MTYsIDB4Y2MwMCwgMCwgezB4ZDMsMHg2MSwweDNjLDB4YzgsMHgyYywweDIwLDB4MDMsMHg5MiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNjMTAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZmYsMHg0MCwweDNiLDB4YzAsMHgwZiwweGUwLDB4MDMsMHhmYywweDAwLDB4ZjcsMHg1MCwweDdmIH19LAorIHsxNiwgMHhjYzIwLCAwLCB7MHhjNCwweDJlLDB4ZjAsMHgwMywweGZjLDB4NDAsMHhmZSwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHg0NywweGZjLDB4MDAsMHhmZiB9fSwKKyB7MTYsIDB4Y2MzMCwgMCwgezB4MDAsMHg3ZCwweGMyLDB4MGYsMHhkMCwweDAxLDB4YmMsMHg4MCwweDVmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZDAgfX0sCisgezE2LCAweGNjNDAsIDAsIHsweDAyLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZTQsMHgwMCwweGZiLDB4YzAsMHgzMiwweGM4IH19LAorIHsxNiwgMHhjYzUwLCAwLCB7MHgwZSwweGUwLDB4MDMsMHhhYywweGEwLDB4ZWIsMHgyMCwweDMyLDB4NDAsMHg4YywweGEwLDB4MTMsMHgyYywweDAwLDB4ZDksMHgwMCB9fSwKKyB7MTYsIDB4Y2M2MCwgMCwgezB4M2UsMHg2MCwweDBjLDB4YjAsMHgwMywweGU4LDB4MDAsMHhmYSwweDgwLDB4MzAsMHhjMCwweDNjLDB4OTIsMHgwMywweGVmLDB4NjAgfX0sCisgezE2LCAweGNjNzAsIDAsIHsweGMzLDB4MjAsMHgzMSwweGM0LDB4MGMsMHhhMCwweDAzLDB4MmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjYzgwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwMCwweDMzLDB4MjAsMHgyMSwweGRhLDB4MGIsMHg3MCwweDQzLDB4OWMsMHgwMSwweGI1LDB4MDAsMHgyMSB9fSwKKyB7MTYsIDB4Y2M5MCwgMCwgezB4MDAsMHgwYSwweGUwLDB4MDIsMHgxYywweDAwLDB4YjcsMHgwMCwweDJmLDB4YzAsMHgwZCwweDcwLDB4MDMsMHg5YywweDAwLDB4YjYgfX0sCisgezE2LCAweGNjYTAsIDAsIHsweDAwLDB4MzEsMHhjOCwweDA4LDB4NTcsMHgwMiwweGRjLDB4MDAsMHg4NywweDUwLDB4MjEsMHhjMCwweDBhLDB4NzAsMHg0MiwweDkyIH19LAorIHsxNiwgMHhjY2IwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDlhLDB4MTEsMHhiNywweDkwLDB4MjEsMHhlMCB9fSwKKyB7MTYsIDB4Y2NjMCwgMCwgezB4MGIsMHg2OCwweDgyLDB4ZGUsMHgwOCwweGE3LDB4ODAsMHgyNCwweDYwLDB4MDgsMHg3MCwweDEyLDB4MTIsMHgwOCwweDk1LDB4ODAgfX0sCisgezE2LCAweGNjZDAsIDAsIHsweDJkLDB4NjAsMHgwOSwweDZjLDB4MDIsMHhkZSwweDAwLDB4YjEsMHg4MCwweDIzLDB4ZTAsMHgwYSwweDU4LDB4NjIsMHhmZSwweDAwIH19LAorIHsxNiwgMHhjY2UwLCAwLCB7MHg5NywweGEwLDB4MjEsMHhlOCwweDA5LDB4ZTgsMHgwMiwweDMwLDB4MTAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2NmMCwgMCwgezB4NDgsMHgxNCwweGNkLDB4MDAsMHhiMywweDAwLDB4MjAsMHhjMCwweDhiLDB4M2MsMHgwMiwweDhjLDB4MDAsMHhiYiwweDAwLDB4MjQgfX0sCisgezE2LCAweGNkMDAsIDAsIHsweGM0LDB4MWEsMHgzZCwweDAyLDB4MmYsMHg4OCwweGIzLDB4NDgsMHgyYywweGUwLDB4ODksMHgzZSwweDAyLDB4OGQsMHg4MCwweDkzIH19LAorIHsxNiwgMHhjZDEwLCAwLCB7MHhkOSwweGE0LDB4NDAsMHg4OCwweDEwLDB4MDIsMHhjYywweDA0LDB4OTMsMHhjOCwweDIwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHg5MiB9fSwKKyB7MTYsIDB4Y2QyMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOSwweDQwLDB4ZmEsMHgwMCwweGIyLDB4ODAgfX0sCisgezE2LCAweGNkMzAsIDAsIHsweDBmLDB4ZTAsMHgwMywweGU4LDB4MDAsMHhlYSwweDgwLDB4MzcsMHhhMCwweDBjLDB4ZTgsMHgxMywweDNiLDB4MDgsMHhkZSwweDAxIH19LAorIHsxNiwgMHhjZDQwLCAwLCB7MHgzZiwweDgyLDB4MGMsMHhlMCwweDQzLDB4ZmEsMHg4MCwweGZlLDB4ODAsMHgzMSwweDI4LDB4MGMsMHhhMCwweDAzLDB4ZjAsMHgwMiB9fSwKKyB7MTYsIDB4Y2Q1MCwgMCwgezB4YzQsMHhjMCwweGIyLDB4ODAsMHgwZCwweGUwLDB4MDMsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNkNjAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MTAsMHgwYiwweDgwLDB4ODMsMHhlMCwweDAwLDB4ZjgsMHgzMCwweDNhIH19LAorIHsxNiwgMHhjZDcwLCAwLCB7MHgwMCwweDZkLDB4ODAsMHg4MywweGUxLDB4NDQsMHhiOCwweDA0LDB4M2UsMHgxMCwweDBmLDB4ODAsMHgxMywweGUwLDB4MDAsMHhmOCB9fSwKKyB7MTYsIDB4Y2Q4MCwgMCwgezB4MDAsMHgzYSwweDEwLDB4NGYsMHgwNCwweDAzLDB4ZTMsMHgwMCwweGU4LDB4MTAsMHgzZSwweDAwLDB4MGUsMHg4MCwweDAzLDB4ZDIgfX0sCisgezE2LCAweGNkOTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGM5LDB4MDAsMHgzOCwweDQwIH19LAorIHsxNiwgMHhjZGEwLCAwLCB7MHgwZiwweDFhLDB4MDMsMHgyZSwweDAwLDB4ZmIsMHhhMCwweDM2LDB4NjAsMHgwYywweDk4LDB4MDMsMHhlNiwweDA0LDB4ZDEsMHgwMCB9fSwKKyB7MTYsIDB4Y2RiMCwgMCwgezB4MzYsMHg0OCwweDBlLDB4OTEsMHgwMiwweGU2LDB4MDAsMHhmOSwweDAwLDB4M2UsMHgwMCwweDBjLDB4OTksMHgwMywweDYyLDB4NDAgfX0sCisgezE2LCAweGNkYzAsIDAsIHsweGY4LDB4MDAsMHhhMCwweDY4LDB4MGMsMHg5MCwweDAzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjZGQwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMiwweDg5LDB4MDQsMHgyZSwweDY0LDB4ODgsMHg5NCwweDAyLDB4YTUsMHgwMCwweGI5LDB4ODAsMHgyMCB9fSwKKyB7MTYsIDB4Y2RlMCwgMCwgezB4NjQsMHgwZCwweDljLDB4MDIsMHhlNiwweDQyLDB4ODksMHgwMCwweDIyLDB4NjAsMHgwYiwweDljLDB4MDIsMHhlNCwweDEwLDB4YjkgfX0sCisgezE2LCAweGNkZjAsIDAsIHsweDQwLDB4M2EsMHg1MCwweDA4LDB4OWMsMHgwMiwweDI3LDB4MjAsMHhiOSwweDAwLDB4MjIsMHg0MCwweDA4LDB4MTAsMHgwMywweDYwIH19LAorIHsxNiwgMHhjZTAwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDA0LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg0MCB9fSwKKyB7MTYsIDB4Y2UxMCwgMCwgezB4MGEsMHg5MCwweDgyLDB4MjUsMHg0YywweGI5LDB4MDAsMHgwMiwweDQwLDB4MDgsMHg5NiwweDAyLDB4ZTQsMHgxMCwweDg5LDB4MDAgfX0sCisgezE2LCAweGNlMjAsIDAsIHsweDI2LDB4NTAsMHgxMywweDk0LDB4MDIsMHhlNCwweDQwLDB4YjksMHgwOCwweDJlLDB4NDAsMHgwOCwweDkwLDB4OGEsMHgyNCwweDAwIH19LAorIHsxNiwgMHhjZTMwLCAwLCB7MHhiOSwweDAxLDB4MmEsMHg0MCwweDA4LDB4OTAsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2U0MCwgMCwgezB4MDgsMHgwNCwweDA1LDB4ODAsMHg4MSwweDQwLDB4MmMsMHhjOCwweDA4LDB4MTAsMHgwNiwweDg0LDB4MDAsMHhiMSwweDA0LDB4MjAgfX0sCisgezE2LCAweGNlNTAsIDAsIHsweDQ5LDB4MDksMHgxNCwweDQyLDB4Y2MsMHg4OSwweDgxLDB4MjAsMHgyMCwweDUwLDB4MGIsMHgxNCwweDQ2LDB4YzQsMHgwMCwweGIxIH19LAorIHsxNiwgMHhjZTYwLCAwLCB7MHgwMCwweDJhLDB4YzAsMHgyOCwweDE0LDB4MDIsMHgwMSwweDAxLDB4YjAsMHgwNCwweDI4LDB4NDAsMHgzOCwweDk0LDB4MDIsMHg0MiB9fSwKKyB7MTYsIDB4Y2U3MCwgMCwgezB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4ODgsMHgwMCwweDNhLDB4MDAgfX0sCisgezE2LCAweGNlODAsIDAsIHsweDBlLDB4ODAsMHgyMywweDIwLDB4MDAsMHhmOCwweDUwLDB4YjIsMHgwMCwweDBjLDB4ODAsMHgxMiwweGUxLDB4NDAsMHhkOCwweDUwIH19LAorIHsxNiwgMHhjZTkwLCAwLCB7MHgzNiwweDAwLDB4MGUsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgyZSwweDAwLDB4MGMsMHg4MCwweDUzLDB4NjAsMHgwNCB9fSwKKyB7MTYsIDB4Y2VhMCwgMCwgezB4ZjgsMHgwMCwweDNhLDB4MDAsMHgwYywweDgwLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNlYjAsIDAsIHsweDk4LDB4MWQsMHhmNCwweDQwLDB4ZjksMHg0NCwweDNlLDB4NDQsMHgwZiwweGQ0LDB4MDMsMHhlNCwweDAwLDB4ZjEsMHgwMCwweDNmIH19LAorIHsxNiwgMHhjZWMwLCAwLCB7MHg0NCwweDBmLDB4ZDQsMHg1MywweGY0LDB4NDQsMHhmZCwweDEwLDB4MmYsMHg0MCwweDBmLDB4ZjQsMHgwMywweGZkLDB4MDAsMHhmZCB9fSwKKyB7MTYsIDB4Y2VkMCwgMCwgezB4NDAsMHgzYiwweDEwLDB4MGYsMHhkNCwweDIzLDB4ZDEsMHgwNCwweDdjLDB4NDMsMHgzNiwweDUwLDB4MGYsMHg1MCwweDAzLDB4ZTYgfX0sCisgezE2LCAweGNlZTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4YTYsMHgwMCwweGY5LDB4MTAsMHgyZSwweDYyIH19LAorIHsxNiwgMHhjZWYwLCAwLCB7MHgwZiwweGQyLDB4ODMsMHhlNCwweDAwLDB4YmQsMHg0MiwweDNlLDB4NjEsMHgwZiwweGQwLDB4MDMsMHhmNiwweGMwLDB4YzksMHhhMiB9fSwKKyB7MTYsIDB4Y2YwMCwgMCwgezB4MmIsMHg0MCwweDBjLDB4ZDAsMHgwMywweDM0LDB4MDAsMHhmOSwweDgxLDB4M2UsMHg2OCwweDA4LDB4YzEsMHg0MywweGZhLDB4MDAgfX0sCisgezE2LCAweGNmMTAsIDAsIHsweGY1LDB4ODAsMHgzZiwweDYyLDB4MGMsMHgxNCwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjZjIwLCAwLCB7MHgzOCwweDEwLDB4ZTEsMHgyMCwweDg4LDB4MTEsMHgyZSwweDEwLDB4MGIsMHg4MCwweDAyLDB4ZTAsMHgwMCwweGI4LDB4ODIsMHgyZSB9fSwKKyB7MTYsIDB4Y2YzMCwgMCwgezB4MTAsMHgwYiwweDgwLDB4MDAsMHhlMywweGM0LDB4ODgsMHhmMCwweDIyLDB4MDAsMHgwYiwweDgwLDB4MGEsMHgyMCwweDAwLDB4ZTggfX0sCisgezE2LCAweGNmNDAsIDAsIHsweDQwLDB4MmYsMHgxNCwweDA4LDB4ODgsMHgwMiwweGUyLDB4MDAsMHhiOCwweDAwLDB4MmUsMHgwMCwweDA4LDB4ODgsMHgwMiwweDhlIH19LAorIHsxNiwgMHhjZjUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNCwweGM1LDB4MDAsMHhhMSwweDAwLDB4MmMsMHg0MCB9fSwKKyB7MTYsIDB4Y2Y2MCwgMCwgezB4MGIsMHgxMCwweDAyLDB4YzQsMHgxOCwweGIxLDB4MjIsMHg2YywweGQxLDB4MGIsMHgxMCwweDI2LDB4YzQsMHgwMCwweDgxLDB4MDggfX0sCisgezE2LCAweGNmNzAsIDAsIHsweDJhLDB4NDAsMHg4OCwweDEwLDB4MDIsMHgwNCwweDA0LDB4YjUsMHhjMCwweDBmLDB4NDAsMHgwYiwweDAyLDB4MDIsMHg0MSwweGEwIH19LAorIHsxNiwgMHhjZjgwLCAwLCB7MHhiMSwweDQwLDB4MmMsMHg0MCwweDA4LDB4MTIsMHgwMiwweDAyLDB4MTEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2Y5MCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHg4OSwweDA2LDB4MmUsMHg0MCwweDBiLDB4OTAsMHgxMiwweGU0LDB4MDAsMHhiOSwweDQwLDB4MmUgfX0sCisgezE2LCAweGNmYTAsIDAsIHsweDQwLDB4MGIsMHhiMCwweDgyLDB4YzQsMHgwMiwweDg5LDB4NDQsMHgyMiwweDQwLDB4MGEsMHg5MCwweDAyLDB4MjQsMHgwMCwweGE5IH19LAorIHsxNiwgMHhjZmIwLCAwLCB7MHgwMCwweDI3LDB4NDgsMHgwOSwweGIwLDB4MTIsMHhlYywweDE4LDB4YjksMHgwMSwweDJlLDB4NDAsMHg0MCwweDkwLDB4MDIsMHg4NiB9fSwKKyB7MTYsIDB4Y2ZjMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNywweDg0LDB4ZTksMHgwMSwweDNlLDB4NDAgfX0sCisgezE2LCAweGNmZDAsIDAsIHsweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg3MiwweDBmLDB4OTAsMHgwMywweGU3LDB4NjAsMHg4OSwweDEwIH19LAorIHsxNiwgMHhjZmUwLCAwLCB7MHgzYSwweDQwLDB4MGMsMHg5MCwweDAzLDB4MjQsMHgwMCwweGY5LDB4NDQsMHgzYywweDQwLDB4MmQsMHg5MCwweDAzLDB4ZTcsMHg2MCB9fSwKKyB7MTYsIDB4Y2ZmMCwgMCwgezB4ZjksMHg3MSwweDNlLDB4NDAsMHgyOCwweDkwLDB4MDMsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQwMDAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDQ4LDB4YTksMHgwMCwweDNlLDB4YzAsMHgwZiwweDlhLDB4NDMsMHhlYywweDAwLDB4ZjksMHgyMCwweDdlIH19LAorIHsxNiwgMHhkMDEwLCAwLCB7MHhjOCwweDBmLDB4OWEsMHgwNywweDY2LDB4MDAsMHg3OSwweDgwLDB4N2UsMHg0MCwweDBmLDB4MWMsMHgwMywweGU3LDB4MDAsMHhlOSB9fSwKKyB7MTYsIDB4ZDAyMCwgMCwgezB4YTAsMHgzZSwweDQwLDB4NDYsMHg4MCwweDAzLDB4ZTAsMHgyMCwweGY5LDB4MDAsMHgzYywweDQwLDB4MGYsMHg5MCwweDAzLDB4Y2EgfX0sCisgezE2LCAweGQwMzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4ODAsMHgwMCwweGY4LDB4MDAsMHgzYSwweDAwIH19LAorIHsxNiwgMHhkMDQwLCAwLCB7MHgwZiwweDgwLDB4MDMsMHhhMCwweDA4LDB4ZTgsMHg0MCwweDNhLDB4MTAsMHgwYywweDgzLDB4MDMsMHhhMSwweGMwLDB4ZjAsMHg0MCB9fSwKKyB7MTYsIDB4ZDA1MCwgMCwgezB4M2UsMHgwNiwweDBmLDB4ODQsMHgwMywweGUxLDB4MDAsMHhmOCwweDAwLDB4M2IsMHgwMCwweDBmLDB4ODEsMHgwMywweDIwLDB4MDAgfX0sCisgezE2LCAweGQwNjAsIDAsIHsweGY4LDB4MTAsMHhiMiwweDAwLDB4NGMsMHg4MCwweDBiLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMDcwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMCwweGJhLDB4MDAsMHgyZSwweGIwLDB4MGIsMHhlOCwweDAyLDB4ZTksMHgwMCwweDNlLDB4OTAsMHgwMiB9fSwKKyB7MTYsIDB4ZDA4MCwgMCwgezB4ODEsMHgwOCwweGU0LDB4MTIsMHg3OCwweDAwLDB4YmEsMHgwMCwweDJkLDB4YjAsMHg4OSwweGU4LDB4MjIsMHhmOCwweDBjLDB4YmEgfX0sCisgezE2LCAweGQwOTAsIDAsIHsweDAwLDB4NmUsMHg4MCwweDAzLDB4YzUsMHgwMywweDMwLDB4MDAsMHhiYSwweDAwLDB4MjIsMHhhOCwweDA4LDB4YTAsMHgyMiwweDhhIH19LAorIHsxNiwgMHhkMGEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHhiMywweDAwLDB4MjgsMHhlOCB9fSwKKyB7MTYsIDB4ZDBiMCwgMCwgezB4MWIsMHgzMSwweDEyLDB4OGMsMHhjNCwweGEzLDB4OTIsMHgyYywweDQwLDB4ODgsMHgzNCwweDA2LDB4OGUsMHgwMCwweDkzLDB4MDAgfX0sCisgezE2LCAweGQwYzAsIDAsIHsweDJjLDB4ZjAsMHgxOSwweDMxLDB4YTIsMHhjYywweDA0LDB4YjMsMHgwMCwweDI4LDB4ODAsMHgwMSwweDM4LDB4MDIsMHg0YywweDAwIH19LAorIHsxNiwgMHhkMGQwLCAwLCB7MHhiMywweDgwLDB4MjAsMHhlMCwweDBhLDB4YjAsMHgxMiwweDAyLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDBlMCwgMCwgezB4YTAsMHgwMSwweDFjLDB4MDAsMHhiNywweDE0LDB4MmQsMHg0MiwweDBiLDB4NjAsMHgwMiwweGRjLDB4MDAsMHhiNywweDgxLDB4MjcgfX0sCisgezE2LCAweGQwZjAsIDAsIHsweGUwLDB4MTgsMHg2MCwweDAyLDB4NTgsMHgxOCwweGI3LDB4MjIsMHgyZCwweDgwLDB4MDksMHg3MCwweDIyLDB4ZGMsMHgwMCwweGI3IH19LAorIHsxNiwgMHhkMTAwLCAwLCB7MHgwMCwweDJkLDB4ODAsMHgwYiwweDNiLDB4MDIsMHgxZCwweGQwLDB4YmYsMHg4MCwweDI4LDB4YzAsMHg4YSwweGYyLDB4MDIsMHhhMCB9fSwKKyB7MTYsIDB4ZDExMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZiwweDgwLDB4ZjcsMHhhMCwweDM5LDB4ZTIgfX0sCisgezE2LCAweGQxMjAsIDAsIHsweDBmLDB4NjgsMHgwMywweDllLDB4MDAsMHhlZCwweDg0LDB4M2QsMHhlMiwweDQ0LDB4NzgsMHgwMywweDllLDB4MDAsMHhmNywweGI0IH19LAorIHsxNiwgMHhkMTMwLCAwLCB7MHgyZCwweGUwLDB4MGQsMHg2OCwweDAzLDB4ZDYsMHgwMCwweGY2LDB4ODAsMHgzOSwweGUwLDB4MGYsMHg3OSwweDAzLDB4NWUsMHg5MCB9fSwKKyB7MTYsIDB4ZDE0MCwgMCwgezB4ZjcsMHg4MSwweDMxLDB4NjAsMHgyZSwweDdjLDB4MDMsMHgyYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQxNTAsIDAsIHsweDA4LDB4MWQsMHhhZCwweDAwLDB4ZmIsMHg0MiwweDNlLDB4YzgsMHgwZiwweGEwLDB4MDMsMHhlZCwweGEwLDB4YmIsMHgwMCwweDM4IH19LAorIHsxNiwgMHhkMTYwLCAwLCB7MHhjOCwweDBmLDB4YjAsMHgwMywweDY4LDB4MDAsMHhmYiwweDExLDB4M2UsMHg0MCwweDA5LDB4YjAsMHg0MSwweGVjLDB4MDAsMHhmYSB9fSwKKyB7MTYsIDB4ZDE3MCwgMCwgezB4MDIsMHgzZSwweGMwLDB4MGYsMHhiMiwweDBiLDB4ZWQsMHg4MCwweDNiLDB4MDAsMHgzNiwweDQwLDB4MGQsMHhiMCwweDIzLDB4NDIgfX0sCisgezE2LCAweGQxODAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmYsMHgwMCwweGNmLDB4ZDAsMHgzMywweGU0IH19LAorIHsxNiwgMHhkMTkwLCAwLCB7MHg0ZiwweGY5LDB4MDMsMHhkZSwweDQwLDB4ZGMsMHg4MCwweDM2LDB4ZTQsMHgwYywweGI5LDB4MTMsMHhmZSwweDAwLDB4Y2YsMHg5MCB9fSwKKyB7MTYsIDB4ZDFhMCwgMCwgezB4MzcsMHhlNSwweDBmLDB4ZjgsMHg0MywweGZlLDB4MDAsMHhjZiwweDkyLDB4M2YsMHhhNCwweDBmLDB4NzgsMHgwMywweDFmLDB4MDAgfX0sCisgezE2LCAweGQxYjAsIDAsIHsweGM1LDB4ODAsMHgzMywweDYwLDB4MGMsMHhmOCwweDIwLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMWMwLCAwLCB7MHhhOCwweDExLDB4YmMsMHgwMCwweDBmLDB4MTAsMHgyMSwweDgxLDB4MGIsMHg2MCwweDAzLDB4ODQsMHgwMCwweDhiLDB4MDgsMHgyMSB9fSwKKyB7MTYsIDB4ZDFkMCwgMCwgezB4NjAsMHgwYSwweDdiLDB4MDMsMHg5OCwweDAwLDB4OGIsMHgxMCwweDI5LDB4ODQsMHgwZSwweDY0LDB4MjIsMHhkYywweDQwLDB4ZDcgfX0sCisgezE2LCAweGQxZTAsIDAsIHsweDAyLDB4MmQsMHg4NCwweDBiLDB4NzAsMHgwMiwweDFjLDB4MDAsMHg4NSwweDE4LDB4MjEsMHg0MCwweDBhLDB4ZjAsMHgyMiwweGFhIH19LAorIHsxNiwgMHhkMWYwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4MDAsMHhhNywweDE0LDB4NjksMHhjMCB9fSwKKyB7MTYsIDB4ZDIwMCwgMCwgezB4MWEsMHg2MCwweDEyLDB4ZmMsMHgwMSwweGE0LDB4MTAsMHgyZCwweGMwLDB4MGEsMHg1MiwweDAyLDB4NDUsMHg0MCwweDg3LDB4MGMgfX0sCisgezE2LCAweGQyMTAsIDAsIHsweDIxLDB4ODAsMHgxYiwweDYwLDB4ODIsMHhkNCwweDAwLDB4ODYsMHgwMywweDI1LDB4ZTAsMHgxYiwweDcwLDB4MDIsMHg1YywweDQwIH19LAorIHsxNiwgMHhkMjIwLCAwLCB7MHg5ZCwweDAwLDB4MjksMHg0MCwweDA4LDB4NzAsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDIzMCwgMCwgezB4MjAsMHgxNCwweGNkLDB4MDAsMHhhMywweDAwLDB4MjgsMHhjMCwweDFiLDB4MjAsMHgyMiwweDhjLDB4MTEsMHhhMywweDAwLDB4NjggfX0sCisgezE2LCAweGQyNDAsIDAsIHsweGY2LDB4MGEsMHgzYywweDA2LDB4ODIsMHgwMCwweDgzLDB4ODAsMHgyOCwweDg0LDB4MGEsMHg4YywweDgyLDB4Y2MsMHg0NCwweDkyIH19LAorIHsxNiwgMHhkMjUwLCAwLCB7MHgwMCwweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHg0ZSwweDAwLDB4OTEsMHgwMCwweDI4LDB4NDAsMHgwYSwweDMwLDB4MDIsMHg4OCB9fSwKKyB7MTYsIDB4ZDI2MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiZSwweDIyLDB4ZWYsMHgwNCwweGJhLDB4YzAgfX0sCisgezE2LCAweGQyNzAsIDAsIHsweDBmLDB4MTQsMHg5MywweGVjLDB4MDIsMHhmMSwweGMzLDB4M2UsMHhmMCwweDBlLDB4OTAsMHg4MywweDY2LDB4MDAsMHhjZiwweGQyIH19LAorIHsxNiwgMHhkMjgwLCAwLCB7MHgzMiwweDUwLDB4MGYsMHg5YywweDAzLDB4Y2IsMHgwMCwweGM5LDB4ODAsMHgzZSwweDI4LDB4MGYsMHhiMCwweDAzLDB4NGYsMHgwMCB9fSwKKyB7MTYsIDB4ZDI5MCwgMCwgezB4ZDEsMHhjMCwweGFhLDB4YzAsMHgwYywweDcxLDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQyYTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDIwLDB4ZGIsMHgwMCwweDI2LDB4ODAsMHgwZiwweGEwLDB4MDMsMHhlYywweDA4LDB4MWIsMHgwMCwweDM2IH19LAorIHsxNiwgMHhkMmIwLCAwLCB7MHhjMCwweDBmLDB4ODYsMHgwMSwweGU1LDB4NDAsMHhmYiwweDAyLDB4M2EsMHg0OCwweDBlLDB4OTQsMHgwMywweGVjLDB4ODAsMHhmMSB9fSwKKyB7MTYsIDB4ZDJjMCwgMCwgezB4ODQsMHgzZSwweDAwLDB4NGYsMHhiMCwweDAzLDB4YWQsMHhjMCwweGViLDB4MjAsMHgzNiwweGMwLDB4MGYsMHhiMCwweDIzLDB4ZTAgfX0sCisgezE2LCAweGQyZDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZGMsMHgwMCwweGNmLDB4MDAsMHgzZiwweDYwIH19LAorIHsxNiwgMHhkMmUwLCAwLCB7MHgwYywweGUwLDB4ODMsMHgzZSwweDgwLDB4ZWQsMHgwOCwweDMzLDB4ZDAsMHg4ZiwweDUwLDB4MDMsMHg5ZSwweDAwLDB4ZGYsMHgwMCB9fSwKKyB7MTYsIDB4ZDJmMCwgMCwgezB4MzMsMHg0MCwweDBjLDB4YzAsMHgwMywweDMwLDB4MDAsMHhjYywweDEwLDB4MzMsMHg2OCwweDBjLDB4ZjAsMHgwMywweDNjLDB4ODQgfX0sCisgezE2LCAweGQzMDAsIDAsIHsweDhkLDB4OTAsMHgzMCwweDQwLDB4MGMsMHhmMCwweDAzLDB4MDgsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMzEwLCAwLCB7MHg4MSwweDA0LDB4NmMsMHgwMCwweDhiLDB4MDIsMHgyYywweGY0LDB4MDgsMHhhOCwweDYyLDB4MGMsMHg4MCwweDhiLDB4ODAsMHgyYSB9fSwKKyB7MTYsIDB4ZDMyMCwgMCwgezB4NjAsMHgwZiwweDljLDB4MDIsMHgyZSwweDAwLDB4OGIsMHgwMCwweDIwLDB4NjAsMHgwZCwweDk4LDB4MDIsMHgyYywweDgwLDB4ZDggfX0sCisgezE2LCAweGQzMzAsIDAsIHsweDAwLDB4MTQsMHg0MCwweDA4LDB4MzQsMHgxMiwweDJlLDB4MDAsMHg4YiwweDgyLDB4MzIsMHg0MCwweDBkLDB4YjAsMHgwMywweDYwIH19LAorIHsxNiwgMHhkMzQwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHg4YiwweDAwLDB4MmUsMHhkMCB9fSwKKyB7MTYsIDB4ZDM1MCwgMCwgezB4MDgsMHhiOCwweDAyLDB4MmMsMHgwMCwweDhhLDB4ODQsMHgyMiwweGMwLDB4MGIsMHg4OCwweDAyLDB4ZTQsMHhhMCwweDgzLDB4MDAgfX0sCisgezE2LCAweGQzNjAsIDAsIHsweDIyLDB4NjIsMHgwYSwweDk4LDB4MDIsMHgyOCwweDAwLDB4ODksMHgwMCwweDIyLDB4MDAsMHgwYSwweGIxLDB4MDYsMHgyYywweDAwIH19LAorIHsxNiwgMHhkMzcwLCAwLCB7MHhhYiwweDAwLDB4MjIsMHg0MCwweDA4LDB4YjAsMHgwMiwweDYwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDM4MCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDIsMHhhMywweDAwLDB4MmMsMHhjMSwweDA4LDB4MjAsMHgwMiwweDBjLDB4MDIsMHg4YiwweDAwLDB4MjggfX0sCisgezE2LCAweGQzOTAsIDAsIHsweGMyLDB4MGEsMHgwMCwweDAyLDB4NDQsMHgxMCwweDgzLDB4MTAsMHgyMiwweDQwLDB4MGIsMHgxMCwweDA2LDB4MGMsMHgwMCwweDkxIH19LAorIHsxNiwgMHhkM2EwLCAwLCB7MHgwNCwweGFhLDB4MDAsMHgyOCwweDMwLDB4MDIsMHgyYywweDAwLDB4YTEsMHgwMSwweDIwLDB4NDAsMHgwOSwweGIwLDB4MDIsMHg0MiB9fSwKKyB7MTYsIDB4ZDNiMCwgMCwgezB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg3YywweDAwLDB4OGYsMHgwMCwweDNlLDB4YzAgfX0sCisgezE2LCAweGQzYzAsIDAsIHsweDJjLDB4YTAsMHgwMywweDI5LDB4NDAsMHhhOCwweDQwLDB4MzIsMHhjYywweDhiLDB4ODAsMHgwMiwweGUwLDB4MDAsMHhjZiwweDQwIH19LAorIHsxNiwgMHhkM2QwLCAwLCB7MHgzMiwweDAwLDB4MGUsMHg4MCwweDBhLDB4MjAsMHgwMCwweDg4LDB4MDAsMHgyMiwweDQwLDB4MGMsMHhiMCwweDAzLDB4MmMsMHgwNCB9fSwKKyB7MTYsIDB4ZDNlMCwgMCwgezB4ZWIsMHgwMCwweGIyLDB4NDAsMHg4YywweGIwLDB4MDMsMHg0MCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQzZjAsIDAsIHsweGEwLDB4MWQsMHhmYywweDAwLDB4ZGYsMHgwMCwweDNmLDB4NDAsMHgwZiwweGUwLDB4MDMsMHhmYywweDgwLDB4ZmYsMHgyOCwweDNkIH19LAorIHsxNiwgMHhkNDAwLCAwLCB7MHhjMCwweDBiLDB4YzEsMHgwMywweGIwLDB4MTQsMHhmZiwweDAwLDB4M2YsMHgwMCwweDBkLDB4ZDAsMHgwMywweGRjLDB4MDAsMHhmYyB9fSwKKyB7MTYsIDB4ZDQxMCwgMCwgezB4MDAsMHgzNywweDQwLDB4MGYsMHhmMCwweDIxLDB4ZmMsMHgwMCwweDFkLDB4MDAsMHg3YiwweDQwLDB4OGYsMHhmMCwweDAzLDB4ZTAgfX0sCisgezE2LCAweGQ0MjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZDIsMHgwMCwweGRmLDB4MDAsMHgzMSwweGEwIH19LAorIHsxNiwgMHhkNDMwLCAwLCB7MHg0ZCwweGYwLDB4NDMsMHgzMiwweDAwLDB4Y2UsMHgxNCwweDFiLDB4NjgsMHgwZSwweGRhLDB4MjMsMHhiMiwweGMwLDB4MmYsMHgwMCB9fSwKKyB7MTYsIDB4ZDQ0MCwgMCwgezB4M2YsMHhjMiwweDJjLDB4ZTgsMHgwMywweDNjLDB4NDAsMHhmZCwweDA4LDB4M2IsMHhjOCwweDRjLDB4ZjAsMHg4MywweDNjLDB4YTAgfX0sCisgezE2LCAweGQ0NTAsIDAsIHsweGNmLDB4MDAsMHgzMywweGM0LDB4MGMsMHhmMywweDA3LDB4ZjAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNDYwLCAwLCB7MHg4MCwweDEwLDB4ZTIsMHgwMCwweDhmLDB4YzAsMHgyMiwweGEwLDB4MDgsMHhmZCwweDQyLDB4MmYsMHgwMCwweDhiLDB4NzAsMHgyMiB9fSwKKyB7MTYsIDB4ZDQ3MCwgMCwgezB4MWUsMHg0OCwweDg5LDB4MDIsMHgyNywweGMwLDB4OGYsMHg1YSwweDJlLDB4NTAsMHg0OCwweDMwLDB4MDIsMHhiZCwweGMwLDB4YmQgfX0sCisgezE2LCAweGQ0ODAsIDAsIHsweDQwLDB4MjMsMHhjNSwweDQ4LDB4ZjQsMHg4MiwweDNkLDB4MmMsMHg4NywweDcwLDB4MjIsMHhjMCwweDA4LDB4ZjEsMHgwMywweGUwIH19LAorIHsxNiwgMHhkNDkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGUwLDB4MDAsMHg5MywweDEwLDB4MjYsMHg4MSB9fSwKKyB7MTYsIDB4ZDRhMCwgMCwgezB4NDksMHgzMCwweDAyLDB4ODAsMHg0MCwweDgzLDB4MjAsMHgyOCwweDQwLDB4MGEsMHgxMCwweDAyLDB4ODAsMHgwMCwweGEzLDB4MjQgfX0sCisgezE2LCAweGQ0YjAsIDAsIHsweDJjLDB4Y2EsMHgwOCwweDMyLDB4ODIsMHgwYywweDAwLDB4OTEsMHgyOCwweDIwLDB4Y2EsMHgxYiwweDMyLDB4MDIsMHgwYywweDg4IH19LAorIHsxNiwgMHhkNGMwLCAwLCB7MHg4MywweDA5LDB4MjAsMHhjOCwweDA5LDB4MzIsMHgwMiwweGUyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDRkMCwgMCwgezB4YzAsMHgxNSwweGEzLDB4MTQsMHg4YiwweDA0LDB4MjYsMHg4OSwweDA4LDB4YjAsMHgwMiwweGFjLDB4MjIsMHg4YiwweDg4LDB4MmEgfX0sCisgezE2LCAweGQ0ZTAsIDAsIHsweDIwLDB4MDgsMHg5OCwweDgyLDB4YTYsMHgxMCwweGFiLDB4MDAsMHgyZSwweGNhLDB4MDgsMHhiMCwweDgyLDB4YWMsMHgwMCwweGI5IH19LAorIHsxNiwgMHhkNGYwLCAwLCB7MHgwMCwweDIyLDB4YzAsMHgyOSwweGIwLDB4MGEsMHgyYywweDAxLDB4OGIsMHgwMCwweDIyLDB4YzAsMHgwOSwweGIwLDB4MjIsMHhmMCB9fSwKKyB7MTYsIDB4ZDUwMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlMywweDAwLDB4ZGIsMHgwMCwweDM0LDB4ZTIgfX0sCisgezE2LCAweGQ1MTAsIDAsIHsweDBkLDB4YjAsMHgwMywweGEzLDB4MDAsMHhjYSwweDgwLDB4YmEsMHg3MCwweDBlLDB4ODgsMHgwMywweGE2LDB4MDAsMHhlYiwweDAwIH19LAorIHsxNiwgMHhkNTIwLCAwLCB7MHgzZSwweDkwLDB4MGMsMHhiNSwweDAzLDB4MmMsMHgwMCwweGZiLDB4MTAsMHhiYSwweGMwLDB4MGUsMHhiMCwweDAzLDB4MmMsMHgwMiB9fSwKKyB7MTYsIDB4ZDUzMCwgMCwgezB4Y2IsMHgwMiwweDMyLDB4YzAsMHgwOSwweGIwLDB4MDIsMHhkMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ1NDAsIDAsIHsweGUwLDB4MDEsMHhiMCwweDA4LDB4ZmYsMHgwMCwweGJiLDB4ZTAsMHgwZiwweDcwLDB4MDMsMHg2NSwweDAwLDB4ZjQsMHgwMCwweDM1IH19LAorIHsxNiwgMHhkNTUwLCAwLCB7MHg0MCwweDBmLDB4NDAsMHgwMywweDU0LDB4MDAsMHhkZiwweDAwLDB4M2UsMHg0MCwweDBmLDB4ZjgsMHgwMywweGVjLDB4MDAsMHhmNyB9fSwKKyB7MTYsIDB4ZDU2MCwgMCwgezB4MDEsMHgzZCwweGMxLDB4MGUsMHgzMCwweDAzLDB4ZWMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4OGUsMHhmMCwweDAzLDB4YjggfX0sCisgezE2LCAweGQ1NzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YTAsMHg0MCwweGViLDB4MDgsMHgzZSwweDgwIH19LAorIHsxNiwgMHhkNTgwLCAwLCB7MHgwZCwweGIwLDB4MDMsMHhlMCwweDAwLDB4YzgsMHgwMCwweDNhLDB4NTEsMHgwZiwweDgyLDB4MDMsMHg2NCwweDIwLDB4ZGIsMHgwMCB9fSwKKyB7MTYsIDB4ZDU5MCwgMCwgezB4M2QsMHg4MiwweDBjLDB4YmMsMHgwMywweDJjLDB4MTAsMHhkYiwweDAwLDB4NzIsMHhjMCwweDBkLDB4YjEsMHgwMywweDBjLDB4MjAgfX0sCisgezE2LCAweGQ1YTAsIDAsIHsweGQzLDB4MDAsMHgzMiwweGMwLDB4MGYsMHhiMCwweDBiLDB4NTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNWIwLCAwLCB7MHhjOCwweDA1LDB4MDEsMHgwMCwweDg3LDB4YzAsMHgyZSwweGE4LDB4MDgsMHhmMSwweDEyLDB4YzUsMHg0MCwweDg4LDB4MDAsMHgyMiB9fSwKKyB7MTYsIDB4ZDVjMCwgMCwgezB4NDAsMHgwYiwweDg0LDB4MDIsMHgyNywweDAwLDB4YWYsMHgwMCwweDJlLDB4YzAsMHgwOCwweGJjLDB4MTIsMHgzYywweDAwLDB4OGIgfX0sCisgezE2LCAweGQ1ZDAsIDAsIHsweDAxLDB4MjMsMHhjMCwweDI4LDB4ZjUsMHg0YSwweDNkLDB4MjgsMHhkZiwweDAwLDB4MzMsMHhjMCwweDRiLDB4ZjAsMHgwMywweDMyIH19LAorIHsxNiwgMHhkNWUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDQ4LDB4ODAsMHhhMywweDkwLDB4MmMsMHgwMCB9fSwKKyB7MTYsIDB4ZDVmMCwgMCwgezB4MDgsMHgzMCwweDAyLDB4YzEsMHgwMCwweDkyLDB4MDQsMHgyOCwweDAwLDB4MGIsMHgxNCwweDEyLDB4NDMsMHgwMCwweGIzLDB4MDQgfX0sCisgezE2LCAweGQ2MDAsIDAsIHsweDJjLDB4MzAsMHgwYSwweGIwLDB4MGEsMHg4YywweDAwLDB4OTMsMHgwMCwweDYwLDB4YzAsMHgwOCwweDNjLDB4MDYsMHgwZSwweDAxIH19LAorIHsxNiwgMHhkNjEwLCAwLCB7MHhiMywweDAwLDB4MmUsMHhjMCwweDhiLDB4MzAsMHgwNiwweDM4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDYyMCwgMCwgezB4MjAsMHgwMSwweDEyLDB4MDAsMHg4NywweDgwLDB4MmQsMHgyNCwweDA4LDB4NzgsMHgwMiwweGQyLDB4MDAsMHg5NSwweDgwLDB4MjEgfX0sCisgezE2LCAweGQ2MzAsIDAsIHsweGEwLDB4MGIsMHg2OCwweDAyLDB4NWEsMHgyMCwweDg3LDB4ODAsMHgyZCwweDY2LDB4MWEsMHg3YywweDAyLDB4OWUsMHgwMCwweDg3IH19LAorIHsxNiwgMHhkNjQwLCAwLCB7MHg4MCwweDIxLDB4ZTEsMHgxOCwweDc5LDB4MDIsMHg5ZSwweDQwLDB4YjcsMHg4MCwweGExLDB4ZTAsMHgwYiwweDc4LDB4MDIsMHg0OCB9fSwKKyB7MTYsIDB4ZDY1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwMCwweDAwLDB4ZTMsMHhhMCwweDNjLDB4NDAgfX0sCisgezE2LCAweGQ2NjAsIDAsIHsweDBjLDB4MzAsMHgwMywweGM0LDB4MjIsMHhkOSwweDAwLDB4MzgsMHhkNCwweDBmLDB4MzAsMHg4MywweDY4LDB4NDAsMHhmMywweDAwIH19LAorIHsxNiwgMHhkNjcwLCAwLCB7MHgzYywweDgwLDB4MGEsMHgzMiwweDAyLDB4OGMsMHgwMCwweGRiLDB4MDAsMHhhMiwweGM0LDB4MGMsMHgzMCwweDAzLDB4MGMsMHgwMCB9fSwKKyB7MTYsIDB4ZDY4MCwgMCwgezB4ZjMsMHgwMCwweDNjLDB4YzAsMHgwZiwweGIxLDB4MDMsMHgxMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ2OTAsIDAsIHsweDQwLDB4MGQsMHhiMCwweDAwLDB4ZmYsMHgxMCwweDNmLDB4NDAsMHgwZSwweGYwLDB4MDMsMHhmYywweDAwLDB4ZWQsMHgwMCwweDNmIH19LAorIHsxNiwgMHhkNmEwLCAwLCB7MHhjMCwweDBmLDB4MzAsMHgxMywweGJjLDB4NDAsMHg3ZiwweDEwLDB4M2YsMHhjMSwweDJkLDB4ZjAsMHgwMywweDdjLDB4MDAsMHhmYiB9fSwKKyB7MTYsIDB4ZDZiMCwgMCwgezB4NDAsMHgzZiwweGMyLDB4MGUsMHhmNCwweDgzLDB4N2MsMHgwMCwweGRmLDB4MDAsMHgzZiwweGMyLDB4MGYsMHhmMCwweDAzLDB4OTAgfX0sCisgezE2LCAweGQ2YzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHgwMCwweGRiLDB4YTAsMHgzMiwweGMwIH19LAorIHsxNiwgMHhkNmQwLCAwLCB7MHgwZCwweGI3LDB4MDMsMHhlMCwweDAwLDB4Y2EsMHgwNCwweDNlLDB4ODAsMHgwZiwweGI4LDB4MDMsMHgyYywweDEwLDB4ZmIsMHgwMCB9fSwKKyB7MTYsIDB4ZDZlMCwgMCwgezB4MzMsMHgwMCwweDhkLDB4YjAsMHgwMywweDJjLDB4ODAsMHhlOSwweDQwLDB4M2UsMHhkMiwweDBmLDB4YjQsMHgwMywweDJkLDB4ODAgfX0sCisgezE2LCAweGQ2ZjAsIDAsIHsweGViLDB4MjAsMHhiMiwweGMwLDB4MGYsMHhiMiwweDAzLDB4ZWEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNzAwLCAwLCB7MHg0OCwweDExLDB4OTAsMHgwMCwweGI3LDB4MTAsMHgxMSwweGMwLDB4MDgsMHg3MCwweDgyLDB4ZDgsMHgwYSwweDg3LDB4MDEsMHgyZCB9fSwKKyB7MTYsIDB4ZDcxMCwgMCwgezB4ODAsMHg4OSwweDcwLDB4MDMsMHhkOCwweDA4LDB4YjcsMHgwYSwweDIxLDB4NDAsMHgyYywweDcwLDB4MDIsMHgwZCwweGMwLDB4ODUgfX0sCisgezE2LCAweGQ3MjAsIDAsIHsweDAxLDB4NzksMHhjOCwweDBiLDB4MzIsMHgwMiwweDBkLDB4MjAsMHg4ZiwweDI4LDB4MjEsMHhjMCwweDBiLDB4NzIsMHg4MiwweGQyIH19LAorIHsxNiwgMHhkNzMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHg0MCwweDk2LDB4MTAsMHg5NywweDkwLDB4MjMsMHhlMCB9fSwKKyB7MTYsIDB4ZDc0MCwgMCwgezB4MDksMHg3YSwweDAyLDB4ZDYsMHgwMCwweDk3LDB4ODAsMHgyZCwweGYwLDB4MGIsMHg3OCwweDgyLDB4MWUsMHgwMCwweGIzLDB4YjAgfX0sCisgezE2LCAweGQ3NTAsIDAsIHsweDIxLDB4YTAsMHgwOCwweDc4LDB4MDIsMHgxZSwweDAwLDB4YTUsMHg4MCwweDJkLDB4ZTAsMHgwYiwweDdhLDB4MDIsMHgxZSwweDgwIH19LAorIHsxNiwgMHhkNzYwLCAwLCB7MHhhNywweGIwLDB4MjEsMHhlOCwweDBiLDB4NzksMHgwMiwweGYwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDc3MCwgMCwgezB4NDgsMHgxNCwweGMwLDB4MDAsMHhiMywweDAwLDB4MjAsMHhlMiwweDA4LDB4MzAsMHgwMiwweGM2LDB4NDAsMHg5MywweDcwLDB4MmMgfX0sCisgezE2LCAweGQ3ODAsIDAsIHsweGMwLDB4MDksMHgzYywweDAyLDB4OGUsMHgwMCwweGIzLDB4MDAsMHgyMCwweGQ4LDB4MDgsMHgxOCwweDAyLDB4MGMsMHgwMCwweDgxIH19LAorIHsxNiwgMHhkNzkwLCAwLCB7MHg5MCwweDJlLDB4YzAsMHgwYiwweDMwLDB4MmEsMHgyYywweDEwLDB4ODMsMHgwMCwweGEwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhkMiB9fSwKKyB7MTYsIDB4ZDdhMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTEsMHhiOSwweDAwLDB4ZGEsMHgwMiwweDMzLDB4YjggfX0sCisgezE2LCAweGQ3YjAsIDAsIHsweDBkLDB4YTAsMHgwMywweGY4LDB4MDAsMHhkZSwweGMwLDB4M2YsMHhiMCwweDRmLDB4ZWMsMHgwNiwweDM4LDB4NDAsMHhmYSwweDAwIH19LAorIHsxNiwgMHhkN2MwLCAwLCB7MHhiMywweDkwLDB4MGMsMHg2YywweDBiLDB4MjgsMHgwOCwweGVhLDB4MDEsMHg3ZSwweDgwLDB4MGYsMHhhMCwweDAzLDB4MjgsMHgwMCB9fSwKKyB7MTYsIDB4ZDdkMCwgMCwgezB4ZWEsMHgwMCwweDMyLDB4ODAsMHgwZiwweGEwLDB4MDMsMHhmYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ3ZTAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHg0MCwweDNhLDB4MDAsMHgwZiwweDg0LDB4MDMsMHhlMSwweDAwLDB4ZTgsMHgwMiwweDNlIH19LAorIHsxNiwgMHhkN2YwLCAwLCB7MHgwMCwweDBmLDB4ODQsMHgwMywweGUxLDB4NDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODEsMHgwMywweGUwLDB4MDAsMHhmOCB9fSwKKyB7MTYsIDB4ZDgwMCwgMCwgezB4MDAsMHgzYSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfX0sCisgezE2LCAweGQ4MTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgyMCwweGY5LDB4YzAsMHgzZSwweDcwIH19LAorIHsxNiwgMHhkODIwLCAwLCB7MHgwZSwweDkwLDB4MDIsMHhlNCwweDgwLDB4YzksMHgwMCwweDMyLDB4NDIsMHgwYywweDk4LDB4ODMsMHhhNCwweDg0LDB4ZjksMHgwMCB9fSwKKyB7MTYsIDB4ZDgzMCwgMCwgezB4YjIsMHg2MCwweDBjLDB4OTAsMHg4MywweDI0LDB4MDAsMHhjOSwweDAwLDB4M2UsMHg0MCwweDBjLDB4MWEsMHgwMiwweDI0LDB4MDAgfX0sCisgezE2LCAweGQ4NDAsIDAsIHsweGMxLDB4MDAsMHhiMiwweDQwLDB4MGYsMHg5MCwweDAxLDB4YzIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkODUwLCAwLCB7MHg4MCwweDA0LDB4NjUsMHgwMCwweGI5LDB4ODEsMHgyYywweDYwLDB4MGQsMHg5NCwweGMyLDB4YzcsMHgwOCwweDg5LDB4MDAsMHgyMiB9fSwKKyB7MTYsIDB4ZDg2MCwgMCwgezB4NDAsMHgwOCwweDk1LDB4YzcsMHhhNCwweDAwLDB4YjksMHgwMCwweDI4LDB4NzAsMHhhOCwweDk0LDB4MGEsMHgyNCwweDAwLDB4ODkgfX0sCisgezE2LCAweGQ4NzAsIDAsIHsweDA0LDB4MmUsMHg0MCwweDI4LDB4OTAsMHgyYSwweDI2LDB4MDAsMHg4OSwweDAwLDB4MjIsMHg0MCwweDBiLDB4OTAsMHgwMiwweGUwIH19LAorIHsxNiwgMHhkODgwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDAsMHhiOSwweDQwLDB4MmUsMHg0MCB9fSwKKyB7MTYsIDB4ZDg5MCwgMCwgezB4MGEsMHg5MCwweDAyLDB4ZTUsMHgwMCwweDgxLDB4MDAsMHhhMCwweDQwLDB4MDksMHg5MCwweDQyLDB4ZWMsMHgwMCwweGIxLDB4MDAgfX0sCisgezE2LCAweGQ4YTAsIDAsIHsweDIyLDB4NTgsMHgwOCwweDkwLDB4YTIsMHgwNCwweDAyLDB4ODksMHgwMCwweDJlLDB4NDAsMHgwOCwweDkwLDB4MDIsMHhhNCwweGEwIH19LAorIHsxNiwgMHhkOGIwLCAwLCB7MHg4OSwweDAwLDB4MjIsMHg0MCwweDBiLDB4OTAsMHgwMiwweGM2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDhjMCwgMCwgezB4MDgsMHgwNCwweDA0LDB4MDAsMHhiMSwweDIwLDB4MmUsMHhjMCwweDg5LDB4MTIsMHgwMiwweGM0LDB4ODAsMHg4MSwweDIwLDB4MjAgfX0sCisgezE2LCAweGQ4ZDAsIDAsIHsweDQwLDB4NjEsMHgxMCwweDQyLDB4YzUsMHgwMCwweGIxLDB4MjAsMHgyOCwweDQ4LDB4MTgsMHg5MCwweDQyLDB4MDQsMHg4MCwweDgxIH19LAorIHsxNiwgMHhkOGUwLCAwLCB7MHgyOCwweDJjLDB4NDgsMHgwOCwweDEyLDB4ODIsMHg4NCwweGEwLDB4ODEsMHgyMCwweDIwLDB4NDgsMHgwYiwweDEyLDB4ODIsMHhjMiB9fSwKKyB7MTYsIDB4ZDhmMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2OCwweDAwLDB4ZjgsMHgwMCwweDJlLDB4MDAgfX0sCisgezE2LCAweGQ5MDAsIDAsIHsweDBlLDB4ODAsMHgwMywweGUwLDB4MDgsMHhjOCwweDUwLDB4MzIsMHgxNCwweDBkLDB4ODAsMHgxNywweGU4LDB4MDQsMHhmOCwweDUwIH19LAorIHsxNiwgMHhkOTEwLCAwLCB7MHgzMiwweDE0LDB4NGMsMHgwNSwweDBiLDB4MjEsMHg0MCwweGM4LDB4MjAsMHgzZSwweDAwLDB4MGMsMHg4NywweDAzLDB4YTEsMHhjMiB9fSwKKyB7MTYsIDB4ZDkyMCwgMCwgezB4YzgsMHgwMCwweDMyLDB4MTQsMHg4ZiwweDgyLDB4MDMsMHhlZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ5MzAsIDAsIHsweDk4LDB4MWQsMHhmNCwweDAwLDB4ZjEsMHgxMCwweDNkLDB4NDAsMHgwZiwweDkxLDB4MDIsMHhkNCwweDQyLDB4ZmQsMHgxMCwweDNmIH19LAorIHsxNiwgMHhkOTQwLCAwLCB7MHg1MSwweDBlLDB4NTQsMHgxMywweGI1LDB4MDAsMHhmOSwweDEwLDB4MzUsMHg0NCwweDJmLDB4ZDAsMHgwMywweGU0LDB4NTAsMHhmZCB9fSwKKyB7MTYsIDB4ZDk1MCwgMCwgezB4MjgsMHgzZSwweDRlLDB4MGYsMHg5MCwweDAzLDB4NjQsMHgwMCwweGY5LDB4MzgsMHgzZSwweDQ0LDB4MGYsMHg5MiwweDgzLDB4ZTYgfX0sCisgezE2LCAweGQ5NjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDE1LDB4ZjQsMHgwMCwweGZkLDB4MDAsMHgzZCwweDQwIH19LAorIHsxNiwgMHhkOTcwLCAwLCB7MHgyYywweGQwLDB4MDMsMHhiNiwweDAwLDB4ZjksMHg4MiwweDNlLDB4NDAsMHgwYywweGQwLDB4MDMsMHhmNCwweDAwLDB4ZjksMHg4MCB9fSwKKyB7MTYsIDB4ZDk4MCwgMCwgezB4MzMsMHg3MCwweDBjLDB4NTAsMHgwMywweDM0LDB4MDAsMHhjOSwweGMwLDB4M2UsMHg0MCwweDBjLDB4ZGEsMHgwMywweDE2LDB4ODAgfX0sCisgezE2LCAweGQ5OTAsIDAsIHsweGM5LDB4NDAsMHgzZSwweDYyLDB4MmMsMHg5OCwweDgzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkOWEwLCAwLCB7MHgzOCwweDEwLDB4ZTAsMHgwMCwweGI4LDB4MDAsMHgyZSwweDAwLDB4MDgsMHg4MCwweDAyLDB4MjgsMHgwMCwweGI4LDB4NTAsMHgyNiB9fSwKKyB7MTYsIDB4ZDliMCwgMCwgezB4MDAsMHgwOCwweGEwLDB4MDIsMHhlOCwweDAwLDB4YjgsMHgwMCwweDJhLDB4MzQsMHgyYSwweGFhLDB4MGEsMHgyMCwweDAwLDB4ODggfX0sCisgezE2LCAweGQ5YzAsIDAsIHsweGMwLDB4MmUsMHgyYSwweDA4LDB4ODAsMHgyMiwweDIxLDB4MDAsMHhhOCwweDgwLDB4MmUsMHgwMCwweDA4LDB4ODAsMHgwMiwweDBlIH19LAorIHsxNiwgMHhkOWQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4MDAsMHhiMSwweDAwLDB4MmUsMHg0MCB9fSwKKyB7MTYsIDB4ZDllMCwgMCwgezB4NDgsMHgxMCwweDA2LDB4OGQsMHgwMCwweGIxLDB4MDAsMHgyYywweDQwLDB4MjgsMHgxMCwweDAyLDB4YzQsMHgwMCwweGIxLDB4NDAgfX0sCisgezE2LCAweGQ5ZjAsIDAsIHsweDJjLDB4NDgsMHgwOCwweDEwLDB4ODIsMHg0NCwweDAwLDB4ODEsMHg2MCwweDJjLDB4NDAsMHgyOCwweDE0LDB4MGEsMHgwNCwweDQwIH19LAorIHsxNiwgMHhkYTAwLCAwLCB7MHg4MSwweDIwLDB4MmMsMHg0MCwweDA4LDB4MTAsMHgwMiwweDAyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGExMCwgMCwgezB4MTgsMHgwNSwweGE0LDB4NDAsMHhiOSwweDAwLDB4MmUsMHg0MCwweDA4LDB4YjAsMHgwMiwweDI0LDB4MDAsMHhiOSwweDI4LDB4MmUgfX0sCisgezE2LCAweGRhMjAsIDAsIHsweDUwLDB4MDgsMHg5MCwweDIyLDB4ZTQsMHgwMCwweGI5LDB4MDAsMHgyZSwweDYwLDB4MGIsMHgxMiwweDQyLDB4NjQsMHgwMCwweDg5IH19LAorIHsxNiwgMHhkYTMwLCAwLCB7MHgwMCwweDJjLDB4NDAsMHgwOSwweDkwLDB4MDIsMHgyNCwweDAwLDB4YTksMHgwMCwweDJjLDB4NDAsMHgwOCwweDEwLDB4MDIsMHg0NiB9fSwKKyB7MTYsIDB4ZGE0MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDUsMHhlNiwweDAwLDB4ZjksMHgwMCwweDNjLDB4NDIgfX0sCisgezE2LCAweGRhNTAsIDAsIHsweDBjLDB4OTAsMHgwMywweGE3LDB4NDAsMHhmOSwweDQwLDB4M2UsMHg3MCwweDBjLDB4OTgsMHgwMiwweGU1LDB4NDAsMHhmOSwweDAwIH19LAorIHsxNiwgMHhkYTYwLCAwLCB7MHgzZSwweDQwLDB4MGMsMHg5OCwweDAzLDB4NjQsMHgwNiwweGM5LDB4MDEsMHgyZSwweDQwLDB4MGMsMHg5MCwweDAzLDB4MjQsMHgwNCB9fSwKKyB7MTYsIDB4ZGE3MCwgMCwgezB4YzksMHgwMCwweDNlLDB4NDAsMHgwYywweDkwLDB4MGIsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRhODAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4ODMsMHhlNiwweDEwLDB4ZjksMHgwMCwweDM2IH19LAorIHsxNiwgMHhkYTkwLCAwLCB7MHg2OCwweDBmLDB4OWMsMHgwMywweGU2LDB4MDAsMHhmOSwweDAwLDB4M2EsMHg0MCwweDBlLDB4OTgsMHg5MywweGE0LDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4ZGFhMCwgMCwgezB4MDAsMHgzZSwweDQwLDB4MGUsMHg5MCwweDgzLDB4YzQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4OGEgfX0sCisgezE2LCAweGRhYjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAwLDB4YTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDA0IH19LAorIHsxNiwgMHhkYWMwLCAwLCB7MHgwYywweDgwLDB4MDMsMHgyMSwweDAyLDB4YzgsMHg0MCwweDMyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhlMSwweDAwLDB4ZjAsMHgwMCB9fSwKKyB7MTYsIDB4ZGFkMCwgMCwgezB4M2UsMHgwMiwweDBjLDB4ODAsMHgwMywweDIwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBjLDB4MDAsMHgwMywweDIwLDB4MDAgfX0sCisgezE2LCAweGRhZTAsIDAsIHsweGM4LDB4MDAsMHgzMiwweDAwLDB4MGYsMHg4MCwweDAzLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYWYwLCAwLCB7MHgyOCwweDE1LDB4M2EsMHgwMCwweGJlLDB4MDIsMHgyZiwweGIwLDB4MDgsMHg2OCwweDEyLDB4MzgsMHgwMCwweDhhLDB4MDQsMHgyYSB9fSwKKyB7MTYsIDB4ZGIwMCwgMCwgezB4ODAsMHgwYiwweGUwLDB4NDIsMHhmYiwweDIwLDB4YmEsMHgwMCwweDJmLDB4OTEsMHgwOCwweGUwLDB4MDIsMHgyOCwweDAwLDB4YmEgfX0sCisgezE2LCAweGRiMTAsIDAsIHsweDAwLDB4MjYsMHg4MCwweDA4LDB4ZWUsMHgwYSwweDM4LDB4MDAsMHg4YSwweDAwLDB4MjIsMHg4MCwweDBiLDB4YTAsMHgwMiwweDhhIH19LAorIHsxNiwgMHhkYjIwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDQyLDB4MDAsMHhiMywweDAwLDB4MmMsMHhjMiB9fSwKKyB7MTYsIDB4ZGIzMCwgMCwgezB4MjgsMHgzOCwweDBhLDB4NDgsMHgwMCwweDgzLDB4MDQsMHgyMiwweGMwLDB4MGIsMHgxMCwweDAyLDB4Y2QsMHg4MCwweGIzLDB4MDAgfX0sCisgezE2LCAweGRiNDAsIDAsIHsweDJlLDB4YzAsMHgwOCwweDFjLDB4MDIsMHgyNCwweDAwLDB4YjMsMHgwMCwweDJjLDB4YzAsMHgwOCwweDM0LDB4MTIsMHgwZSwweDQwIH19LAorIHsxNiwgMHhkYjUwLCAwLCB7MHg4MywweDAwLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgxMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGI2MCwgMCwgezB4YTAsMHgwMSwweDExLDB4MDAsMHhiNywweDAwLDB4MmYsMHhjMCwweDA4LDB4NzAsMHhhMiwweDRlLDB4MDAsMHg4ZiwweGIwLDB4MjEgfX0sCisgezE2LCAweGRiNzAsIDAsIHsweGNjLDB4MGIsMHg2MCwweDEyLDB4ZGMsMHgxMCwweGI3LDB4MzAsMHgyZCwweGMwLDB4MDgsMHhkMCwweDgyLDB4MTQsMHg4MCwweGI3IH19LAorIHsxNiwgMHhkYjgwLCAwLCB7MHgxMiwweDI1LDB4YzgsMHgyOCwweDYwLDB4MDIsMHgxNCwweDAwLDB4ODcsMHhiMiwweDIxLDB4Y2MsMHgwYiwweDMxLDB4MDIsMHhhOCB9fSwKKyB7MTYsIDB4ZGI5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxMiwweDAwLDB4ZjcsMHg4MCwweDNkLDB4ZTAgfX0sCisgezE2LCAweGRiYTAsIDAsIHsweDBjLDB4MzgsMHgwMywweDU2LDB4MDAsMHhjNywweDkwLDB4YjEsMHhlNCwweDBmLDB4NzgsMHgwMywweGRlLDB4MDAsMHhmNywweDkwIH19LAorIHsxNiwgMHhkYmIwLCAwLCB7MHgxZiwweDYwLDB4MmMsMHg0OCwweDBiLDB4MTYsMHhhMCwweGY3LDB4ODAsMHgzYywweGY0LDB4MGMsMHgzOCwweDAzLDB4MWUsMHgwMCB9fSwKKyB7MTYsIDB4ZGJjMCwgMCwgezB4Y2YsMHhhMCwweGIxLDB4ZTgsMHgwZiwweDdiLDB4MDMsMHgyYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRiZDAsIDAsIHsweDA4LDB4MGQsMHhhMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4YzAsMHgwYiwweGIwLDB4MDMsMHhhYywweDAwLDB4ZjMsMHgyMSwweDNlIH19LAorIHsxNiwgMHhkYmUwLCAwLCB7MHhjOCwweDA3LDB4YjAsMHgwMiwweGU0LDB4MDAsMHhmYiwweDIwLDB4M2YsMHg0MCwweDBmLDB4ODAsMHgwMywweGU0LDB4ODAsMHhmYiB9fSwKKyB7MTYsIDB4ZGJmMCwgMCwgezB4MDAsMHgzNiwweGQwLDB4MGYsMHhhMCwweDAzLDB4ZTAsMHgwOCwweGZiLDB4NDIsMHgzZSwweGQ4LDB4MGYsMHhiMCwweDAzLDB4YzIgfX0sCisgezE2LCAweGRjMDAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZjAsMHg4MCwweGNmLDB4ODAsMHgzMSwweGUxIH19LAorIHsxNiwgMHhkYzEwLCAwLCB7MHgwYywweGY4LDB4MDMsMHhkYSwweDEwLDB4ZWYsMHg4MCwweDNmLDB4ZTQsMHgwZiwweGQ4LDB4MDMsMHhmZSwweDEwLDB4ZmYsMHg4MiB9fSwKKyB7MTYsIDB4ZGMyMCwgMCwgezB4M2YsMHhlMCwweDRjLDB4ZDgsMHgxYiwweDE2LDB4MjAsMHhjZiwweDgwLDB4M2YsMHhlMCwweDRjLDB4ZDgsMHgzMCwweGVlLDB4NDAgfX0sCisgezE2LCAweGRjMzAsIDAsIHsweGZmLDB4YzAsMHhiMywweGY0LDB4MGYsMHhmOCwweDAzLDB4YzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYzQwLCAwLCB7MHhhOCwweDAxLDB4OTgsMHgyMCwweDgzLDB4NDAsMHgyMSwweGMwLDB4MDgsMHg3MSwweDAyLDB4ZGMsMHg4NCwweDg3LDB4MjAsMHgyZCB9fSwKKyB7MTYsIDB4ZGM1MCwgMCwgezB4YzAsMHgwYiwweDYwLDB4MDIsMHhkOSwweDYwLDB4ZjcsMHgwMCwweDJkLDB4YzAsMHgwOCwweGYwLDB4ODIsMHgxNCwweDA0LDB4ODcgfX0sCisgezE2LCAweGRjNjAsIDAsIHsweDAwLDB4MmQsMHhjMCwweDA4LDB4ZjAsMHgwMywweDFlLDB4MDAsMHhiNywweDIwLDB4MjEsMHhjMCwweDhiLDB4NzAsMHgwMiwweGVhIH19LAorIHsxNiwgMHhkYzcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGIwLDB4MDAsMHg4NywweDAwLDB4MjEsMHg4MCB9fSwKKyB7MTYsIDB4ZGM4MCwgMCwgezB4MDgsMHg3MCwweDAyLDB4ZjUsMHgwNCwweDI3LDB4MDAsMHgyZCwweGMwLDB4OGIsMHg3MCwweDAyLDB4ZGMsMHgwMCwweGI3LDB4MDAgfX0sCisgezE2LCAweGRjOTAsIDAsIHsweDJjLDB4NTAsMHgwOCwweDQwLDB4MDIsMHgxNCwweDAwLDB4ODcsMHgwMCwweDJkLDB4YzAsMHgwOCwweDUwLDB4MDIsMHg1YywweDA0IH19LAorIHsxNiwgMHhkY2EwLCAwLCB7MHhiNywweDAwLDB4YTEsMHhjMCwweDhiLDB4NzAsMHgwMiwweGMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGNiMCwgMCwgezB4MjAsMHgxNCwweGM4LDB4MDAsMHg4MCwweDAwLDB4MDAsMHg4MCwweDA4LDB4MzAsMHgwMiwweGNlLDB4MDAsMHg4MywweGMwLDB4MmMgfX0sCisgezE2LCAweGRjYzAsIDAsIHsweGQwLDB4NGIsMHgzMCwweDAyLDB4Y2UsMHgwMCwweGFiLDB4MDIsMHgyYywweDQwLDB4NDgsMHhiYywweDAyLDB4MDQsMHgwMCwweDgzIH19LAorIHsxNiwgMHhkY2QwLCAwLCB7MHgwMCwweDJjLDB4YzAsMHgwOCwweDEwLDB4MDIsMHgwMCwweDA4LDB4YjMsMHgwMCwweDIwLDB4YzAsMHgwOSwweDMwLDB4MDIsMHhjOCB9fSwKKyB7MTYsIDB4ZGNlMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHg4MywweDQwLDB4YzgsMHgwMCwweDMwLDB4YzAgfX0sCisgezE2LCAweGRjZjAsIDAsIHsweDJjLDB4YjAsMHgwMywweGVjLDB4MDAsMHhlZiwweDg4LDB4M2YsMHhlNiwweDA3LDB4YjEsMHg4MywweGUxLDB4MDAsMHhiZiwweDAwIH19LAorIHsxNiwgMHhkZDAwLCAwLCB7MHgzZSwweGUwLDB4MGMsMHhiOCwweDAzLDB4MzQsMHgwMCwweGNmLDB4MDAsMHgzZiwweGMwLDB4MmMsMHhiMCwweDAzLDB4NjgsMHgxMCB9fSwKKyB7MTYsIDB4ZGQxMCwgMCwgezB4ZmYsMHgwMCwweDMzLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhlYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRkMjAsIDAsIHsweDgwLDB4MDAsMHhlNCwweDAwLDB4ZjEsMHg0MCwweDNlLDB4YzAsMHgwZiwweGI0LDB4MDMsMHhlZCwweDQwLDB4ZmIsMHgwOCwweDNlIH19LAorIHsxNiwgMHhkZDMwLCAwLCB7MHhjMCwweDBmLDB4YTAsMHgwMywweGU1LDB4MjAsMHhmYiwweDAwLDB4M2UsMHhlMCwweDBkLDB4YjAsMHg4MywweGU0LDB4MDAsMHhmMyB9fSwKKyB7MTYsIDB4ZGQ0MCwgMCwgezB4MDAsMHgzZSwweGMwLDB4MGYsMHg4MCwweDAzLDB4YzQsMHgwMCwweGZiLDB4MDAsMHgzZSwweGMwLDB4MGYsMHgzMCwweDAzLDB4ZTAgfX0sCisgezE2LCAweGRkNTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZjAsMHgwMCwweGNhLDB4MDAsMHgzMywweGUwIH19LAorIHsxNiwgMHhkZDYwLCAwLCB7MHg0ZSwweGYwLDB4MDMsMHgzNCwweDAwLDB4ZmYsMHgwMCwweDNmLDB4YzAsMHg4ZiwweGU4LDB4MDMsMHhmMCwweDAwLDB4ZmYsMHgwMCB9fSwKKyB7MTYsIDB4ZGQ3MCwgMCwgezB4YjEsMHg0MCwweDBjLDB4ZTAsMHgwMywweDM0LDB4MDAsMHhlZiwweDAwLDB4YjMsMHhjMCwweDBjLDB4ZjAsMHgwMywweDM4LDB4MDAgfX0sCisgezE2LCAweGRkODAsIDAsIHsweGNmLDB4MDAsMHgzZCwweGMwLDB4MGEsMHhmMCwweDAzLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZDkwLCAwLCB7MHg4MSwweDA0LDB4NjIsMHgyMiwweDg4LDB4OTAsMHgyMiwweGUwLDB4MDgsMHgzYywweDAyLDB4MmUsMHgwOCwweGJiLDB4MDEsMHgyZSB9fSwKKyB7MTYsIDB4ZGRhMCwgMCwgezB4YzAsMHgwYiwweGEwLDB4MDIsMHg2NiwweDAwLDB4YmIsMHgwMCwweDIyLDB4YTAsMHgwOCwweGE5LDB4MDIsMHgyNCwweDAwLDB4YmIgfX0sCisgezE2LCAweGRkYjAsIDAsIHsweDAwLDB4MjIsMHhjMCwweDI4LDB4MmMsMHgwMiwweGEyLDB4MDAsMHhkYiwweDAwLDB4MmUsMHhjMCwweDBhLDB4YjAsMHgwMiwweGEwIH19LAorIHsxNiwgMHhkZGMwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDIyLDB4MDAsMHg5OCwweDAwLDB4MjIsMHhjOCB9fSwKKyB7MTYsIDB4ZGRkMCwgMCwgezB4MGEsMHg5OCwweDAyLDB4MjcsMHgwNCwweGJiLDB4MDAsMHgyZSwweGMwLDB4MGIsMHhiMSwweDAyLDB4ZTIsMHgwMCwweGJiLDB4MDAgfX0sCisgezE2LCAweGRkZTAsIDAsIHsweDIyLDB4ZTIsMHgwOCwweGIwLDB4MDIsMHhhNCwweDAwLDB4YWIsMHgwMCwweDIwLDB4YzAsMHgwYSwweDg4LDB4ODIsMHgyMywweDAwIH19LAorIHsxNiwgMHhkZGYwLCAwLCB7MHg4YiwweDAwLDB4MmUsMHhjMCwweDA4LDB4YjAsMHgwMiwweGEwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGUwMCwgMCwgezB4MDgsMHgxNCwweDA0LDB4MDAsMHg5MSwweDQwLDB4MjIsMHhjMCwweDA4LDB4MTAsMHgwMiwweDBjLDB4MDAsMHhiMywweDAwLDB4MmMgfX0sCisgezE2LCAweGRlMTAsIDAsIHsweGMwLDB4NGIsMHgyOCwweDIyLDB4NDAsMHgwNCwweGIzLDB4MDAsMHgyMCwweGMwLDB4MjgsMHgzMCwweDBhLDB4MDQsMHgwNCwweGIzIH19LAorIHsxNiwgMHhkZTIwLCAwLCB7MHgwMCwweDYwLDB4YzAsMHgwOCwweDAwLDB4MDIsMHg4NCwweDIwLDB4OTMsMHgwMCwweDJjLDB4YzAsMHgwYSwweDMwLDB4MDIsMHg4MiB9fSwKKyB7MTYsIDB4ZGUzMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHg2MCwweDAwLDB4ZGEsMHg0MCwweGIyLDB4ODAgfX0sCisgezE2LCAweGRlNDAsIDAsIHsweDBlLDB4OTAsMHgwMywweDI0LDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDhmLDB4YTAsMHgwMywweGUwLDB4MDksMHhmZiwweDAwIH19LAorIHsxNiwgMHhkZTUwLCAwLCB7MHgzMiwweDQwLDB4MDgsMHhhMCwweDBiLDB4MzQsMHgwMCwweGViLDB4MDAsMHgzMSwweGMwLDB4MGMsMHg4MCwweDAzLDB4MjgsMHg4MCB9fSwKKyB7MTYsIDB4ZGU2MCwgMCwgezB4YzcsMHgwMCwweDNmLDB4YzAsMHgwYywweGYwLDB4MDMsMHgwMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRlNzAsIDAsIHsweGEwLDB4MTUsMHhkMCwweDAwLDB4ZWMsMHgyMCwweDNmLDB4MDAsMHgwZiwweGMwLDB4MGIsMHhmYywweDEwLDB4ZmYsMHgwMSwweDNmIH19LAorIHsxNiwgMHhkZTgwLCAwLCB7MHhjMCwweDBmLDB4ZTAsMHgwMywweGY0LDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweGY0LDB4MDAsMHhmZiB9fSwKKyB7MTYsIDB4ZGU5MCwgMCwgezB4MDAsMHgzZiwweGMwLDB4NGYsMHhjMCwweDAxLDB4ZjAsMHgwOCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZTggfX0sCisgezE2LCAweGRlYTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHgwMCwweGNjLDB4OTAsMHgzNywweDIwIH19LAorIHsxNiwgMHhkZWIwLCAwLCB7MHgwZSwweGYwLDB4MTMsMHhiZCwweDA0LDB4ZDQsMHhjMSwweDMzLDB4MmMsMHg0YywweGQ5LDB4MjMsMHgzMiwweDYwLDB4ZmYsMHgyMCB9fSwKKyB7MTYsIDB4ZGVjMCwgMCwgezB4M2QsMHhlMCwweDRmLDB4YzEsMHgwMywweGI2LDB4NDAsMHhjZCwweDAwLDB4MzcsMHhlMCwweDBjLDB4ZTIsMHg4YiwweDEwLDB4YzAgfX0sCisgezE2LCAweGRlZDAsIDAsIHsweGNkLDB4MDAsMHgzMywweGM2LDB4MGYsMHhkOCwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZWUwLCAwLCB7MHg4MCwweDEwLDB4ZWUsMHgwOCwweDhhLDB4MjAsMHgyMiwweDAwLDB4MDgsMHhiNywweDAyLDB4MmQsMHgwMCwweDhhLDB4MDAsMHhiNiB9fSwKKyB7MTYsIDB4ZGVmMCwgMCwgezB4M2MsMHgwOCwweDk5LDB4MDIsMHgyNywweDg0LDB4YmYsMHg2OCwweDJlLDB4ODIsMHgwYiwweDAxLDB4MDIsMHgyNCwweDQwLDB4ZDkgfX0sCisgezE2LCAweGRmMDAsIDAsIHsweDQyLDB4MjAsMHhjMCwweDhhLDB4YWMsMHgwMiwweDJkLDB4YzIsMHg4MiwweDQ4LDB4YTIsMHhkMCwweDBiLDB4ODIsMHgwMiwweDIwIH19LAorIHsxNiwgMHhkZjEwLCAwLCB7MHgwNiwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MDAsMHg4OCwweDA0LDB4MjYsMHg4MCB9fSwKKyB7MTYsIDB4ZGYyMCwgMCwgezB4MmEsMHgzMCwweGMyLDB4YTUsMHg4MCwweGE5LDB4MjEsMHgyOCwweDAwLDB4OGEsMHgwMCwweDAyLDB4MDAsMHgwMCwweGEzLDB4MTAgfX0sCisgezE2LCAweGRmMzAsIDAsIHsweDJjLDB4YzgsMHgwYiwweDAwLDB4MDIsMHhjNCwweDkwLDB4ODMsMHg0MiwweDI0LDB4YzEsMHgwOCwweDAwLDB4MDIsMHg0MCwweDg4IH19LAorIHsxNiwgMHhkZjQwLCAwLCB7MHhhMywweDYwLDB4YTgsMHhjMCwweDBiLDB4MDAsMHhjMiwweDIyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGY1MCwgMCwgezB4YzAsMHgxNSwweGFjLDB4MDYsMHg4YSwweDAwLDB4MjIsMHhlMCwweDQ4LDB4YjAsMHgwMiwweDJlLDB4MDIsMHhhYiwweDgwLDB4MmUgfX0sCisgezE2LCAweGRmNjAsIDAsIHsweDIwLDB4NGEsMHg4YywweDAyLDB4MjYsMHgyMCwweGJiLDB4MDAsMHg2ZSwweDgwLDB4MGIsMHgzMCwweGMyLDB4NDYsMHgwNCwweDliIH19LAorIHsxNiwgMHhkZjcwLCAwLCB7MHgwYSwweGEyLDB4YzAsMHgwYSwweDgwLDB4MTIsMHg2YywweDQwLDB4YTgsMHgwMCwweDJhLDB4YzAsMHgwYiwweDhjLDB4MDIsMHgzMCB9fSwKKyB7MTYsIDB4ZGY4MCwgMCwgezB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4YzEsMHgwOSwweDM2LDB4NjEgfX0sCisgezE2LCAweGRmOTAsIDAsIHsweDBlLDB4MzIsMHgwMywweGFiLDB4MjAsMHhmOCwweDg0LDB4M2EsMHg3OCwweDJlLDB4OTgsMHgwMywweDI2LDB4MDAsMHhlYiwweDAwIH19LAorIHsxNiwgMHhkZmEwLCAwLCB7MHgzZSwweDQwLDB4NGYsMHg5MCwweDAzLDB4ZTIsMHgwMCwweGM5LDB4NDAsMHgzNiwweGUwLDB4MGMsMHhiNCwweDAzLDB4NmUsMHgwMCB9fSwKKyB7MTYsIDB4ZGZiMCwgMCwgezB4ZWIsMHgwMCwweDNhLDB4YzAsMHgwZiwweDg4LDB4MDMsMHgxMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRmYzAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4ZmQsMHgwMCwweDNmLDB4NDAsMHgwZiwweGZhLDB4MTMsMHhmOCwweDEwLDB4ZGMsMHgwNCwweDI3IH19LAorIHsxNiwgMHhkZmQwLCAwLCB7MHg0MCwweDBkLDB4NTAsMHg0MywweGY0LDB4MDAsMHhmZiwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZDksMHgwMywweGIwLDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4ZGZlMCwgMCwgezB4MDEsMHgzZiwweGYwLDB4MGYsMHhmMCwweDIzLDB4YjIsMHgwMCwweGQ0LDB4YTAsMHgzNywweGMwLDB4MGYsMHhjMCwweDBiLDB4ZjggfX0sCisgezE2LCAweGRmZjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgyMCwweGViLDB4MTAsMHhmMiwweDAwIH19LAorIHsxNiwgMHhlMDAwLCAwLCB7MHgwZSwweGI0LDB4MDMsMHgyMSwweDgwLDB4YzksMHg0MCwweDNhLDB4NDgsMHgwZiwweDkwLDB4MTMsMHhlMSwweDIwLDB4ZmIsMHgwMCB9fSwKKyB7MTYsIDB4ZTAxMCwgMCwgezB4M2UsMHhjMCwweDBjLDB4ODQsMHgwMywweDI0LDB4MDAsMHhmYiwweDAxLDB4MzYsMHhlMCwweDBjLDB4NzQsMHgwYiwweDljLDB4MDAgfX0sCisgezE2LCAweGUwMjAsIDAsIHsweGNmLDB4MDAsMHgzMiwweGUwLDB4MGYsMHg4NCwweDAzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMDMwLCAwLCB7MHhjOCwweDA1LDB4MWUsMHgwMCwweDhiLDB4ODAsMHgyMCwweDQwLDB4MDgsMHhiOCwweDAyLDB4ODMsMHg4MCwweDgxLDB4YTAsMHgyMiB9fSwKKyB7MTYsIDB4ZTA0MCwgMCwgezB4NzgsMHgwYiwweDkxLDB4ODMsMHhlMywweDAwLDB4YmYsMHgwMCwweDBlLDB4YzEsMHgwYSwweGI0LDB4MDMsMHg2NCwweDA0LDB4YjkgfX0sCisgezE2LCAweGUwNTAsIDAsIHsweDUwLDB4MzIsMHhjMCwweDBhLDB4YjIsMHgwMiwweDIwLDB4MDAsMHg4OCwweDAwLDB4MjMsMHhkNCwweDBiLDB4ODgsMHgwMiwweGYyIH19LAorIHsxNiwgMHhlMDYwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4NDIsMHhhMCwweDgwLDB4MjAsMHgwMCB9fSwKKyB7MTYsIDB4ZTA3MCwgMCwgezB4NDgsMHgwMCwweDAyLDB4MGQsMHgwNiwweDgwLDB4ODAsMHgyYSwweGQwLDB4MDMsMHgwMCwweDAyLDB4YzgsMHgwMCwweGIzLDB4MDAgfX0sCisgezE2LCAweGUwODAsIDAsIHsweDJjLDB4YzAsMHgwOCwweDM2LDB4MDIsMHg0MCwweDAwLDB4YjksMHgwMiwweDIyLDB4YzIsMHg4YiwweDI2LDB4MDIsMHgwYywweDEwIH19LAorIHsxNiwgMHhlMDkwLCAwLCB7MHgwMSwweDAyLDB4MjQsMHhjMCwweDRiLDB4YTEsMHgwMiwweGY4LDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTBhMCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDgsMHg4ZSwweDgwLDB4MjEsMHgyMSwweDA4LDB4MjgsMHhjMiwweDllLDB4MDAsMHg4ZSwweDgwLDB4MjEgfX0sCisgezE2LCAweGUwYjAsIDAsIHsweDYwLDB4MGIsMHg3OCwweDAyLDB4OWUsMHgyMCwweGI3LDB4ODIsMHgyZiwweGExLDB4MGEsMHg3OCwweDAyLDB4NWUsMHgwMCwweGI1IH19LAorIHsxNiwgMHhlMGMwLCAwLCB7MHg5MSwweGExLDB4ZTAsMHgwYiwweDI5LDB4MDIsMHgzMiwweDQ0LDB4ODYsMHg4MCwweGE1LDB4ZTAsMHgwYiwweDRjLDB4MDIsMHhjOCB9fSwKKyB7MTYsIDB4ZTBkMCwgMCwgezB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ZTEsMHgwMCwweDIyLDB4ODAgfX0sCisgezE2LCAweGUwZTAsIDAsIHsweDBlLDB4MDAsMHgwYiwweDI0LDB4MDAsMHhjMCwweDQ0LDB4MjgsMHhhZCwweDBmLDB4MjAsMHgwMiwweGM4LDB4MDAsMHhmMywweDAwIH19LAorIHsxNiwgMHhlMGYwLCAwLCB7MHgxYywweGMwLDB4MGMsMHgwMSwweDAzLDB4NDgsMHg0YywweGYyLDB4MDQsMHgzMCwweGMwLDB4MGYsMHgxNSwweDAzLDB4ODAsMHg0MCB9fSwKKyB7MTYsIDB4ZTEwMCwgMCwgezB4YzEsMHgwMCwweDE0LDB4YzgsMHgwZiwweDAwLDB4MDMsMHhkYSwweDAyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUxMTAsIDAsIHsweDQwLDB4MWQsMHg5YywweDQwLDB4ZjcsMHgwMCwweDNmLDB4YzAsMHg4ZiwweGMwLDB4MDMsMHhlNCwweDAwLDB4ZmEsMHgwMSwweDNmIH19LAorIHsxNiwgMHhlMTIwLCAwLCB7MHhjMCwweDBmLDB4ZjAsMHgyMywweGZjLDB4MDgsMHhmYiwweDAwLDB4M2YsMHg4MCwweDBmLDB4ZjAsMHgwMSwweGZjLDB4MTAsMHhmZiB9fSwKKyB7MTYsIDB4ZTEzMCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGUsMHhkMSwweDAzLDB4ZmMsMHg0MiwweGZlLDB4ODAsMHgzYiwweGMwLDB4MGYsMHhjMCwweDAzLDB4ZDAgfX0sCisgezE2LCAweGUxNDAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHg0MCwweGM4LDB4MDAsMHgzZSwweGMwIH19LAorIHsxNiwgMHhlMTUwLCAwLCB7MHgwZiwweDkwLDB4MDMsMHhlZSwweDA4LDB4Y2IsMHgwMCwweDMyLDB4YzAsMHgwZiwweGEwLDB4MjMsMHhlNiwweDAzLDB4Y2IsMHg0YyB9fSwKKyB7MTYsIDB4ZTE2MCwgMCwgezB4MzIsMHg0MCwweDBmLDB4YjAsMHgwNywweGU4LDB4MDAsMHhmOSwweDAwLDB4MTYsMHg0MCwweDBjLDB4YTAsMHgwYiwweDZjLDB4MDAgfX0sCisgezE2LCAweGUxNzAsIDAsIHsweGNmLDB4MDIsMHgzMiwweGM1LDB4MGMsMHg4MCwweDAzLDB4MDIsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMTgwLCAwLCB7MHg0OCwweDExLDB4OWMsMHg4MCwweDg0LDB4MDQsMHgyZCwweGMxLDB4MGIsMHg0MCwweDQwLDB4ZGMsMHgwMCwweDg3LDB4MDQsMHgyMSB9fSwKKyB7MTYsIDB4ZTE5MCwgMCwgezB4YzAsMHg0YiwweDcwLDB4MTIsMHhmYywweDAxLDB4OGYsMHg2MCwweDI5LDB4NDAsMHgwYiwweDcwLDB4MTMsMHg5YywweDAwLDB4YjUgfX0sCisgezE2LCAweGUxYTAsIDAsIHsweDAwLDB4YTMsMHg0MCwweDBhLDB4NjAsMHgwMiwweDAwLDB4MDAsMHg4NCwweDAwLDB4MjEsMHhjMCwweDA4LDB4NDAsMHgwMiwweDEyIH19LAorIHsxNiwgMHhlMWIwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDhlLDB4MDAsMHg4NywweDgwLDB4MmQsMHhhMiB9fSwKKyB7MTYsIDB4ZTFjMCwgMCwgezB4MGIsMHg0YywweDE2LDB4ZDYsMHgwOCwweDk3LDB4ODgsMHgyMSwweGEwLDB4NGIsMHg2OCwweDAyLDB4ZGUsMHgwNCwweGE3LDB4ODAgfX0sCisgezE2LCAweGUxZDAsIDAsIHsweDIxLDB4ZTAsMHgwYiwweDQ4LDB4MDIsMHhkYSwweDA0LDB4YjYsMHg4MiwweDI1LDB4NjAsMHgwYSwweGU4LDB4NjIsMHgxZSwweDAwIH19LAorIHsxNiwgMHhlMWUwLCAwLCB7MHg4NywweDgwLDB4MjAsMHhlOCwweDA4LDB4NDgsMHgwMiwweDA4LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTFmMCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MDAsMHg4YiwweDgwLDB4NmMsMHhmMCwweDBiLDB4M2MsMHgwMiwweGNlLDB4NDYsMHg5YiwweGMwLDB4MjAgfX0sCisgezE2LCAweGUyMDAsIDAsIHsweGU0LDB4MGIsMHgzYywweDAyLDB4Y2MsMHgyMCwweGEzLDB4MDAsMHgyOCwweGUwLDB4MGIsMHgzMCwweDAyLDB4OGQsMHg4MCwweGIxIH19LAorIHsxNiwgMHhlMjEwLCAwLCB7MHg4MCwweDIyLDB4NDQsMHgwYSwweDIxLDB4MGEsMHgwMywweDgyLDB4ODAsMHg4MCwweGEwLDB4YzAsMHgwOCwweDA2LDB4MGEsMHgxMiB9fSwKKyB7MTYsIDB4ZTIyMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAyLDB4Y2UsMHg4MCwweDNmLDB4YTAgfX0sCisgezE2LCAweGUyMzAsIDAsIHsweDBmLDB4ZTAsMHgwMywweGZhLDB4NDAsMHhkZSwweGMwLDB4YjMsMHg5MCwweDBmLDB4ZWEsMHgxMywweGY5LDB4MDgsMHhlYSwweDA0IH19LAorIHsxNiwgMHhlMjQwLCAwLCB7MHgzMywweDgyLDB4OGYsMHhlNCwweDAzLDB4ZmIsMHgwOCwweGZlLDB4YTAsMHgzNiwweGEwLDB4MGMsMHhhYywweDBiLDB4NmIsMHg4MiB9fSwKKyB7MTYsIDB4ZTI1MCwgMCwgezB4YzYsMHhhMCwweDMyLDB4ODAsMHgyYywweGU0LDB4MDMsMHgzYSwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUyNjAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHg5MCwweDNlLDB4MDIsMHgwZiwweDgwLDB4ODMsMHhlMSwweDAwLDB4ZTgsMHgyMCwweDNlIH19LAorIHsxNiwgMHhlMjcwLCAwLCB7MHgwMywweDBmLDB4ODIsMHgwMywweGUxLDB4NDAsMHhkOCwweDAwLDB4M2UsMHgyMCwweDBmLDB4MDAsMHg5MywweGEwLDB4NDAsMHhmOCB9fSwKKyB7MTYsIDB4ZTI4MCwgMCwgezB4MDAsMHgzZSwweDEwLDB4OGYsMHgwOCwweDBiLDB4ZjAsMHgwMCwweGZjLDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfX0sCisgezE2LCAweGUyOTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGU5LDB4MDAsMHgzNiwweDQwIH19LAorIHsxNiwgMHhlMmEwLCAwLCB7MHgwZiwweDk0LDB4MDcsMHhlNiwweDAwLDB4ZjksMHg4MCwweGIwLDB4NDAsMHgwYywweDk0LDB4MDMsMHhlNCwweDQwLDB4ZjksMHgwMCB9fSwKKyB7MTYsIDB4ZTJiMCwgMCwgezB4MzIsMHg0MCwweDBmLDB4OTQsMHgwYiwweGE0LDB4MDAsMHg3MSwweGMwLDB4MzIsMHg0MCwweDJjLDB4OTQsMHgyMywweDI0LDB4MDIgfX0sCisgezE2LCAweGUyYzAsIDAsIHsweGM5LDB4MDAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDAzLDB4MDIsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMmQwLCAwLCB7MHg4MCwweDA0LDB4NDQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDQwLDB4MGIsMHg5OCwweDAyLDB4ZTYsMHg2MCwweGI5LDB4MDAsMHgyMiB9fSwKKyB7MTYsIDB4ZTJlMCwgMCwgezB4NjAsMHgwYSwweDljLDB4MDIsMHhlNiwweDI0LDB4YjksMHgwNCwweDM2LDB4NDAsMHgwYiwweDk4LDB4MDAsMHgyNCwweDAwLDB4YjkgfX0sCisgezE2LCAweGUyZjAsIDAsIHsweDgwLDB4YTIsMHg1MiwweDA4LDB4OTAsMHgwMiwweDI0LDB4MDAsMHg4OSwweDQwLDB4MjIsMHg0MCwweDY4LDB4OTQsMHgwMiwweDIwIH19LAorIHsxNiwgMHhlMzAwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDAsMHhhOSwweDAwLDB4MjYsMHg0MCB9fSwKKyB7MTYsIDB4ZTMxMCwgMCwgezB4MDMsMHg5NCwweDAyLDB4ZTQsMHgwMSwweGI5LDB4MTAsMHgyMiwweDU1LDB4MDgsMHg5MCwweDIyLDB4ZTQsMHgwMCwweGIxLDB4MDAgfX0sCisgezE2LCAweGUzMjAsIDAsIHsweDI2LDB4NDAsMHgwYiwweDkwLDB4MDAsMHgyYywweDA5LDB4YjksMHgwMCwweDIyLDB4NjAsMHgwOCwweDkwLDB4MGEsMHgxYywweDA0IH19LAorIHsxNiwgMHhlMzMwLCAwLCB7MHg4ZCwweDA4LDB4YTAsMHg0MCwweDA4LDB4MTAsMHg4MiwweDBlLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTM0MCwgMCwgezB4MDgsMHgwNCwweDA2LDB4MDAsMHg4MSwweDAwLDB4MjAsMHg1MCwweDBiLDB4MTIsMHg0MiwweGM0LDB4ODAsMHhiMSwweDA0LDB4MjAgfX0sCisgezE2LCAweGUzNTAsIDAsIHsweDUwLDB4MGEsMHgxNCwweDAyLDB4YzUsMHgwMCwweGIxLDB4MjIsMHgyNCwweDQwLDB4MGIsMHgxMiwweDIyLDB4MDQsMHgwMSwweGIxIH19LAorIHsxNiwgMHhlMzYwLCAwLCB7MHg0MCwweDIwLDB4NTAsMHgwOCwweDEwLDB4MGEsMHgxNSwweDAwLDB4ODUsMHg0MCwweDI4LDB4NTAsMHgwOCwweDE0LDB4MGEsMHgwYSB9fSwKKyB7MTYsIDB4ZTM3MCwgMCwgezB4MDUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4ZTgsMHg1MCwweDM2LDB4MDAgfX0sCisgezE2LCAweGUzODAsIDAsIHsweDBmLDB4ODUsMHgwMiwweGUxLDB4NDAsMHhmOCwweDUwLDB4MzIsMHgwMCwweDBjLDB4YTAsMHgyMywweGUwLDB4MTAsMHhmOCwweDUwIH19LAorIHsxNiwgMHhlMzkwLCAwLCB7MHhiMiwweDE0LDB4MGYsMHhhNSwweDAzLDB4YTEsMHg0OCwweGZhLDB4MDAsMHhiMiwweDAwLDB4MGMsMHg4MCwweDAzLDB4MjAsMHgwNCB9fSwKKyB7MTYsIDB4ZTNhMCwgMCwgezB4YzQsMHgwMiwweDMyLDB4MDAsMHgwYywweDAwLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUzYjAsIDAsIHsweDk4LDB4MWQsMHhlNSwweDAwLDB4ZmQsMHgwMCwweDNmLDB4NDAsMHgwZiwweGQxLDB4MDMsMHhkNCwweDQ0LDB4ZjUsMHgwMCwweDNmIH19LAorIHsxNiwgMHhlM2MwLCAwLCB7MHg1MSwweDBmLDB4ZDQsMHgwMywweGY1LDB4MDAsMHhmOSwweDEwLDB4M2IsMHg0MCwweDBmLDB4ZDEsMHgwMCwweGY1LDB4MTAsMHhmNSB9fSwKKyB7MTYsIDB4ZTNkMCwgMCwgezB4NDAsMHg3ZiwweDQwLDB4MGYsMHg1NCwweDJiLDB4ZTUsMHgwMCwweGY5LDB4NDAsMHgzNiwweDUwLDB4MGYsMHhkMCwweDAzLDB4ZTYgfX0sCisgezE2LCAweGUzZTAsIDAsIHsweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZjYsMHgxMCwweGJkLDB4NDAsMHgzMywweDQwIH19LAorIHsxNiwgMHhlM2YwLCAwLCB7MHgwZiwweGRhLDB4MDMsMHgzNywweDgwLDB4Y2QsMHgwMCwweDNmLDB4NDAsMHgwZiwweGQwLDB4MDMsMHhmNCwweDAwLDB4ZTksMHhhMCB9fSwKKyB7MTYsIDB4ZTQwMCwgMCwgezB4M2UsMHg0MCwweDBjLDB4ZGUsMHgxNywweGE0LDB4MDgsMHhmZCwweGMwLDB4MzMsMHg0MSwweDhkLDB4ZGEsMHgxMywweDI2LDB4YTAgfX0sCisgezE2LCAweGU0MTAsIDAsIHsweGY5LDB4YTgsMHgzMiwweDc4LDB4MGMsMHhiNCwweDBiLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNDIwLCAwLCB7MHgzOCwweDEwLDB4ZTEsMHgwMCwweGI4LDB4YTAsMHgzNiwweDIwLDB4MGIsMHg4YSwweDgyLDB4YTIsMHg4MCwweDJhLDB4YTgsMHgyZSB9fSwKKyB7MTYsIDB4ZTQzMCwgMCwgezB4MDAsMHgwYiwweDgwLDB4MTIsMHhlMCwweDA0LDB4YjgsMHhhMSwweDJlLDB4MjgsMHg0YSwweDhlLDB4MDIsMHgyYSwweGEwLDB4YmEgfX0sCisgezE2LCAweGU0NDAsIDAsIHsweGMwLDB4MjIsMHgyOCwweDA4LDB4ODUsMHgwMiwweDIxLDB4MDgsMHhiOCwweGU4LDB4YTIsMHgzYywweDA4LDB4YzgsMHgwMiwweDBlIH19LAorIHsxNiwgMHhlNDUwLCAwLCB7MHgwNiwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM1LDB4MDAsMHhiOSwweDAwLDB4MjAsMHg0YSB9fSwKKyB7MTYsIDB4ZTQ2MCwgMCwgezB4MGIsMHgxNCwweDAyLDB4MDUsMHg4MCwweDAxLDB4MDAsMHgyYywweDQxLDB4MGIsMHgxMCwweDAyLDB4YzQsMHgwNCwweGExLDB4NGEgfX0sCisgezE2LCAweGU0NzAsIDAsIHsweDJlLDB4NDIsMHgwOCwweDE0LDB4MDIsMHg4NCwweDEwLDB4YjEsMHg2MCwweGEwLDB4NGEsMHgwOSwweDEwLDB4MDIsMHg0NCwweDAwIH19LAorIHsxNiwgMHhlNDgwLCAwLCB7MHhiNSwweDAxLDB4MjksMHg0MCwweDE4LDB4ZDIsMHgwMiwweDEyLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTQ5MCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHhiOSwweDIxLDB4MjYsMHg0MCwweDBiLDB4OTYsMHgwMiwweGE0LDB4MTAsMHhhOSwweDAwLDB4MmUgfX0sCisgezE2LCAweGU0YTAsIDAsIHsweDQwLDB4MGIsMHg5NiwweDEyLDB4ZTQsMHgyMCwweGI5LDB4MDAsMHgyZSwweDQxLDB4MGEsMHg5MCwweDQyLDB4MjQsMHgwMCwweGI5IH19LAorIHsxNiwgMHhlNGIwLCAwLCB7MHgwMCwweDIyLDB4NDEsMHgwOCwweDk4LDB4MjIsMHg2NCwweDAwLDB4YjksMHgyMCwweDJiLDB4NDEsMHgyOCwweGQ0LDB4MDIsMHgwNiB9fSwKKyB7MTYsIDB4ZTRjMCwgMCwgezB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTEsMHhlNCwweDAwLDB4ZjksMHhlMCwweDMyLDB4NTggfX0sCisgezE2LCAweGU0ZDAsIDAsIHsweDBmLDB4OTgsMHgwMywweDI2LDB4NDAsMHhjOSwweDQwLDB4M2UsMHg1OCwweDBmLDB4OWMsMHgwMywweGU0LDB4MDAsMHhlOSwweDAwIH19LAorIHsxNiwgMHhlNGUwLCAwLCB7MHg2ZSwweDQwLDB4MGMsMHg5YSwweDAyLDB4YTYsMHgwMCwweGY5LDB4NDQsMHgzMiwweDQwLDB4MGQsMHg5YSwweDBiLDB4NjQsMHg4NCB9fSwKKyB7MTYsIDB4ZTRmMCwgMCwgezB4ZjksMHgwMCwweGJhLDB4NDAsMHgwYywweDE4LDB4MDMsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU1MDAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwMCwweDNlLDB4NTAsMHgwZiwweDkwLDB4MDMsMHhlNiwweDAwLDB4ZjksMHgwNCwweDNlIH19LAorIHsxNiwgMHhlNTEwLCAwLCB7MHg0OCwweDBmLDB4OTAsMHgwMywweGU0LDB4NDAsMHhmOSwweDAwLDB4M2UsMHg2NSwweDBmLDB4OTksMHg4MSwweGU0LDB4NTAsMHhmOSB9fSwKKyB7MTYsIDB4ZTUyMCwgMCwgezB4MjAsMHgzZSwweDQwLDB4OGYsMHg5MCwweDAzLDB4YTQsMHg4MCwweGY5LDB4MDAsMHgzNCwweDQwLDB4MGYsMHg5MiwweDAzLDB4ZDIgfX0sCisgezE2LCAweGU1MzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGY4LDB4NDAsMHgzZSwweDEwIH19LAorIHsxNiwgMHhlNTQwLCAwLCB7MHgwZSwweDg0LDB4MDMsMHg2MCwweDA4LDB4YzgsMHgwMCwweDNlLDB4MDgsMHgwZiwweDgwLDB4ODMsMHhlMCwweDI4LDB4ZTgsMHgwNCB9fSwKKyB7MTYsIDB4ZTU1MCwgMCwgezB4M2UsMHgwMCwweDBjLDB4ODQsMHgwMywweDIxLDB4MWMsMHhmMCwweDQ4LDB4MzIsMHgwMCwweDBiLDB4MDAsMHgwMywweGUwLDB4MDIgfX0sCisgezE2LCAweGU1NjAsIDAsIHsweGMwLDB4MDAsMHgzMiwweDAwLDB4MGMsMHhjMCwweDBiLDB4MDIsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNTcwLCAwLCB7MHgyOCwweDA1LDB4MzgsMHgwMCwweGIyLDB4ODgsMHgyZSwweDgwLDB4MDgsMHhlMCwweDAzLDB4N2EsMHg4MCwweDhlLDB4MDAsMHgyZiB9fSwKKyB7MTYsIDB4ZTU4MCwgMCwgezB4YTAsMHgwYiwweGU4LDB4MDIsMHhmOSwweDEwLDB4YmEsMHgwMCwweDJjLDB4ODAsMHgyOCwweGU0LDB4MDIsMHgyOCwweDAwLDB4YmUgfX0sCisgezE2LCAweGU1OTAsIDAsIHsweDQwLDB4MjMsMHhiOCwweDA4LDB4ZTgsMHgwMiwweGU4LDB4MDQsMHhjYSwweDIwLDB4YTIsMHg4MCwweDA4LDB4ZTgsMHgwMiwweDBhIH19LAorIHsxNiwgMHhlNWEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDEsMHhiMywweDAwLDB4MmMsMHg0MCB9fSwKKyB7MTYsIDB4ZTViMCwgMCwgezB4MDgsMHhiOCwweDQyLDB4NmMsMHgwMiwweDgzLDB4MDAsMHgyYywweGUwLDB4MGIsMHgzOCwweDAwLDB4Y2YsMHg0MCwweGIzLDB4MDAgfX0sCisgezE2LCAweGU1YzAsIDAsIHsweDJjLDB4YzAsMHgwOCwweGI0LDB4MGEsMHgwYywweDAwLDB4YjMsMHg0MCwweGEyLDB4ODIsMHgwYSwweDM5LDB4MDIsMHhjYywweDAwIH19LAorIHsxNiwgMHhlNWQwLCAwLCB7MHg5MywweDgwLDB4YTAsMHhjMCwweDI5LDB4MjAsMHgwMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTVlMCwgMCwgezB4YTAsMHgwMSwweDFkLDB4MDAsMHhiNywweDAwLDB4MmQsMHg2NCwweDI4LDB4NzQsMHgwMiwweDQwLDB4MDAsMHg4NywweDA1LDB4MmQgfX0sCisgezE2LCAweGU1ZjAsIDAsIHsweDkwLDB4MGIsMHg3NCwweDAyLDB4ZGMsMHgxMCwweGI3LDB4MzAsMHgyZCwweGM4LDB4MDgsMHgzNCwweDA2LDB4MWMsMHg4MCwweGI3IH19LAorIHsxNiwgMHhlNjAwLCAwLCB7MHgwMCwweGExLDB4YzAsMHgwYSwweDcwLDB4MDIsMHhkZSwweDgwLDB4ODMsMHgwMCwweDAxLDB4MDAsMHgwOSwweDYwLDB4ODIsMHgyMCB9fSwKKyB7MTYsIDB4ZTYxMCwgMCwgezB4MDQsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxYSwweDAwLDB4ZjcsMHg4MCwweDNkLDB4NjAgfX0sCisgezE2LCAweGU2MjAsIDAsIHsweDBlLDB4ZDgsMHgwYiwweDVlLDB4MDAsMHhjNywweDgwLDB4M2QsMHhlMCwweDBmLDB4NjgsMHgwMywweGRlLDB4MTAsMHhmNywweGE5IH19LAorIHsxNiwgMHhlNjMwLCAwLCB7MHg3ZiwweGU4LDB4NDgsMHg3OCwweDAzLDB4MWYsMHgzMCwweGZmLDB4OTQsMHgzMywweGEwLDB4MGUsMHg3OCwweDAzLDB4Y2YsMHgyNCB9fSwKKyB7MTYsIDB4ZTY0MCwgMCwgezB4ZDYsMHg4MCwweGIxLDB4ZTAsMHgwZCwweGY4LDB4NDMsMHgyMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU2NTAsIDAsIHsweDA4LDB4MWQsMHhhYywweDAwLDB4YmIsMHgwMCwweDBjLDB4NDAsMHgwZiwweGIwLDB4MDMsMHhlYywweDA4LDB4ZjksMHgwMCwweDNlIH19LAorIHsxNiwgMHhlNjYwLCAwLCB7MHgwMCwweDBmLDB4OTAsMHg0MSwweGVjLDB4MDAsMHhmYiwweDYxLDB4N2UsMHhkMCwweDBmLDB4YjAsMHgwMywweGVjLDB4ODAsMHhmYiB9fSwKKyB7MTYsIDB4ZTY3MCwgMCwgezB4NDAsMHgzZiwweDliLDB4MGMsMHhiMCwweDAzLDB4ZWQsMHg5MCwweGZhLDB4MDAsMHgzYywweDAwLDB4MGUsMHhiMCwweDAzLDB4YzIgfX0sCisgezE2LCAweGU2ODAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZGUsMHgwMCwweGVmLDB4ODAsMHgzMywweDYwIH19LAorIHsxNiwgMHhlNjkwLCAwLCB7MHgwZCwweGQ4LDB4MDMsMHgzNiwweDQwLDB4ZWYsMHg5MCwweDNlLDB4ZTAsMHgwZiwweGY5LDB4MDMsMHhmZSwweDAwLDB4ZmYsMHg4MCB9fSwKKyB7MTYsIDB4ZTZhMCwgMCwgezB4MzMsMHhmZSwweDBjLDB4ZmEsMHgwMywweGZlLDB4MDAsMHhjZiwweDgwLDB4YjMsMHhlMCwweDBmLDB4ZjgsMHgwMywweGZlLDB4MDAgfX0sCisgezE2LCAweGU2YjAsIDAsIHsweGNkLDB4ODAsMHgzMywweGUwLDB4MGYsMHhjOCwweDQzLDB4YzAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNmMwLCAwLCB7MHhhOCwweDExLDB4OWMsMHgwMCwweDg1LDB4MDgsMHgzNSwweDQwLDB4MDgsMHg3MCwweDAzLDB4NTIsMHgyMCwweDg3LDB4MTEsMHgyYyB9fSwKKyB7MTYsIDB4ZTZkMCwgMCwgezB4ZWMsMHgwYiwweDcxLDB4MDIsMHhkMCwweDAwLDB4ZTcsMHgwMCwweDM1LDB4YzQsMHgwOCwweDc0LDB4MDIsMHhkYywweDQwLDB4ODcgfX0sCisgezE2LCAweGU2ZTAsIDAsIHsweDEwLDB4MjEsMHhjMCwweDBiLDB4NzAsMHgwMiwweGZjLDB4ODAsMHg4NSwweDA4LDB4MjEsMHgwMCwweDBiLDB4NDEsMHg4MiwweGVhIH19LAorIHsxNiwgMHhlNmYwLCAwLCB7MHgwNiwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MDAsMHhhZiwweDAwLDB4MjMsMHg1MCB9fSwKKyB7MTYsIDB4ZTcwMCwgMCwgezB4MDksMHg1MCwweDAyLDB4MWMsMHg4MCwweGE3LDB4MDEsMHgyOSwweGMwLDB4MWIsMHg2MCwweDA2LDB4ZGMsMHg0MCwweGI3LDB4MTAgfX0sCisgezE2LCAweGU3MTAsIDAsIHsweDIxLDB4YzgsMHg0YSwweDUyLDB4MDIsMHhkYywweDAwLDB4ODMsMHgwMCwweDIxLDB4YzAsMHgwYiwweDcwLDB4MDIsMHhkYywweDEzIH19LAorIHsxNiwgMHhlNzIwLCAwLCB7MHg4NCwweDAwLDB4MjUsMHhjMCwweDBiLDB4NTgsMHgwMiwweGMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTczMCwgMCwgezB4MjAsMHgxNCwweGNjLDB4MDAsMHg4MSwweDgwLDB4MjQsMHg0MCwweDA4LDB4M2UsMHgwMiwweDZlLDB4MDAsMHg4OSwweDAwLDB4MmMgfX0sCisgezE2LCAweGU3NDAsIDAsIHsweGMwLDB4MGIsMHhiNCwweDAyLDB4Y2EsMHg4MCwweGEzLDB4MDAsMHgyNCwweGMwLDB4MGEsMHgwNCwweDAyLDB4ZWMsMHg0MCwweDgyIH19LAorIHsxNiwgMHhlNzUwLCAwLCB7MHgwYSwweDIwLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhjZCwweDEwLDB4ODAsMHhjMCwweGE0LDB4MDAsMHgwYiwweDFjLDB4MDIsMHhjOCB9fSwKKyB7MTYsIDB4ZTc2MCwgMCwgezB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHg4NCwweDAwLDB4ZWIsMHg4MCwweDMzLDB4NDAgfX0sCisgezE2LCAweGU3NzAsIDAsIHsweDBkLDB4OGMsMHg4MywweDI2LDB4MDAsMHhlOSwweGEwLDB4M2UsMHg3OCwweDhmLDB4OTAsMHg4MywweGUxLDB4MDAsMHhmZiwweDAwIH19LAorIHsxNiwgMHhlNzgwLCAwLCB7MHgzMSwweGQxLDB4MGUsMHg4NCwweDIzLDB4ZmMsMHgwMCwweGNiLDB4ODIsMHgzMiwweGMwLDB4OGYsMHhiMCwweDAyLDB4ZmQsMHg0MCB9fSwKKyB7MTYsIDB4ZTc5MCwgMCwgezB4Y2IsMHg4MCwweGI2LDB4YzAsMHgwZiwweGE0LDB4MDMsMHhlYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU3YTAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZmIsMHgwMCwweDNlLDB4NDAsMHgwZiwweGEwLDB4MDMsMHhlMCwweDAwLDB4ZjksMHgwMSwweDNlIH19LAorIHsxNiwgMHhlN2IwLCAwLCB7MHg0MiwweDBmLDB4OTAsMHgwMywweGU1LDB4NTQsMHhlMywweDAwLDB4M2UsMHhjOCwweDA1LDB4OTMsMHgwMywweGVjLDB4ODAsMHhmYiB9fSwKKyB7MTYsIDB4ZTdjMCwgMCwgezB4YzEsMHgzZSwweGMwLDB4MGYsMHgyMCwweDAzLDB4Y2MsMHg0OCwweGYzLDB4MDgsMHgzYSwweDAwLDB4MGYsMHhhMCwweDQzLDB4ZTAgfX0sCisgezE2LCAweGU3ZDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZjAsMHgwMCwweGNmLDB4MDAsMHgzZiwweDQwIH19LAorIHsxNiwgMHhlN2UwLCAwLCB7MHgwZiwweDMwLDB4MDEsMHgyYywweDBhLDB4Y2QsMHgxMCwweDMzLDB4MDAsMHgwZiwweGQwLDB4ODMsMHgxNCwweDAwLDB4Y2IsMHgwMiB9fSwKKyB7MTYsIDB4ZTdmMCwgMCwgezB4MzMsMHhjMCwweDBjLDB4ZTEsMHgwMywweGVjLDB4MTAsMHhjZCwweDAwLDB4MzMsMHhjMCwweDBjLDB4ZjAsMHgzMywweDNjLDB4MDAgfX0sCisgezE2LCAweGU4MDAsIDAsIHsweGVhLDB4MDAsMHgzMywweGMwLDB4MGMsMHhmMCwweDgzLDB4YzgsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlODEwLCAwLCB7MHg4MSwweDA0LDB4NmUsMHgwMCwweDhiLDB4MDAsMHgyZSwweDQwLDB4MGIsMHhiYywweDAyLDB4MmUsMHgwMCwweDBiLDB4MDAsMHgyMiB9fSwKKyB7MTYsIDB4ZTgyMCwgMCwgezB4MzAsMHgwYiwweDljLDB4MDIsMHgyNywweDgwLDB4YWIsMHgwMCwweDJhLDB4YzAsMHgwOCwweGI4LDB4MDIsMHhlYywweDAwLDB4ODkgfX0sCisgezE2LCAweGU4MzAsIDAsIHsweGMwLDB4MjAsMHhlMCwweDA4LDB4YWUsMHgwMiwweDJjLDB4MDgsMHg4YSwweDAwLDB4MjIsMHgwMCwweDA4LDB4YjAsMHg0MiwweGU4IH19LAorIHsxNiwgMHhlODQwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJlLDB4MDAsMHg4YiwweDA0LDB4MmUsMHg0MCB9fSwKKyB7MTYsIDB4ZTg1MCwgMCwgezB4OGIsMHg4YywweDAyLDB4YWUsMHgxMCwweDg5LDB4MDAsMHgyMiwweDcwLDB4MGIsMHg4YywweDAyLDB4YTIsMHgwMCwweDhiLDB4MDEgfX0sCisgezE2LCAweGU4NjAsIDAsIHsweDIyLDB4YzAsMHgwOCwweDgwLDB4MDIsMHhlYywweDEwLDB4ODIsMHg4OCwweGEyLDB4NzAsMHgwOSwweGI4LDB4MDIsMHgyYywweDA4IH19LAorIHsxNiwgMHhlODcwLCAwLCB7MHg4OSwweDAwLDB4MjAsMHhjMCwweDI4LDB4ODAsMHgyMiwweGUwLDB4MTAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTg4MCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDQsMHg4MSwweDAwLDB4MmMsMHg0MCwweDBiLDB4MjAsMHgwMiwweDgwLDB4MDAsMHg4MSwweDA0LDB4YTAgfX0sCisgezE2LCAweGU4OTAsIDAsIHsweDUwLDB4NGIsMHgwMCwweDBhLDB4ODAsMHgwMCwweGEzLDB4MDEsMHgyYSwweGMxLDB4MjAsMHgxMCwweDAyLDB4Y2MsMHgxNCwweDgzIH19LAorIHsxNiwgMHhlOGEwLCAwLCB7MHgwMCwweDIyLDB4YzAsMHgwOCwweDIwLDB4MDIsMHgwYywweDAwLDB4ODEsMHgwMCwweGUwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHhjMiB9fSwKKyB7MTYsIDB4ZThiMCwgMCwgezB4MDUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2OCwweDAwLDB4Y2IsMHgwMCwweDNlLDB4NDAgfX0sCisgezE2LCAweGU4YzAsIDAsIHsweDBmLDB4OTAsMHgwYiwweGFjLDB4ODAsMHhjOSwweDAwLDB4MzIsMHgxMCwweDBmLDB4ODAsMHgwMywweGE0LDB4MDAsMHhjZiwweDAyIH19LAorIHsxNiwgMHhlOGQwLCAwLCB7MHgzMSwweGMwLDB4MGMsMHg4MCwweDEzLDB4ZmMsMHgwMiwweGNkLDB4MDAsMHgzMywweGMwLDB4MmMsMHg5MCwweDAzLDB4M2MsMHgwMiB9fSwKKyB7MTYsIDB4ZThlMCwgMCwgezB4ZTgsMHgwMCwweGIyLDB4YzAsMHgwYywweDkwLDB4MDMsMHhjMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU4ZjAsIDAsIHsweGEwLDB4MWQsMHhmYywweDAyLDB4ZjUsMHgwMCwweDNkLDB4NDAsMHg4ZiwweGYwLDB4MjMsMHg2ZCwweDAwLDB4ZmYsMHgwMCwweDNmIH19LAorIHsxNiwgMHhlOTAwLCAwLCB7MHgwNCwweDBmLDB4YzAsMHgwMywweDcwLDB4MWMsMHhmZiwweDAxLDB4M2YsMHhjMCwweDRmLDB4YzAsMHgwMywweGZjLDB4MDAsMHhmZCB9fSwKKyB7MTYsIDB4ZTkxMCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGYsMHhlMCwweDBmLDB4ZmMsMHgxOCwweGZjLDB4MDAsMHgzZiwweDAwLDB4MGYsMHhkMCwweDAzLDB4ZTggfX0sCisgezE2LCAweGU5MjAsIDAsIHsweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmUsMHgwMCwweGQ3LDB4MDIsMHgwZiwweDMwIH19LAorIHsxNiwgMHhlOTMwLCAwLCB7MHgwYywweGYyLDB4MDEsMHg3ZSwweDA2LDB4NDQsMHgzMCwweDNmLDB4MjAsMHgwZSwweGYwLDB4MDIsMHg3YywweDg0LDB4ZmQsMHgyMCB9fSwKKyB7MTYsIDB4ZTk0MCwgMCwgezB4MjcsMHgwOCwweDBjLDB4ZDAsMHgwMSwweDM2LDB4MDAsMHhmZiwweDYwLDB4MzMsMHhjYywweDBiLDB4ZjEsMHgxMywweDJjLDB4YzQgfX0sCisgezE2LCAweGU5NTAsIDAsIHsweGZmLDB4MzAsMHgwZiwweGNkLDB4MGMsMHhmNCwweDAzLDB4ZjAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOTYwLCAwLCB7MHg4MCwweDEwLDB4ZWUsMHgwMCwweDhmLDB4YzAsMHgyZSwweDAwLDB4MDgsMHhmYywweDAyLDB4MmUsMHgwMCwweDhhLDB4MzAsMHgyOCB9fSwKKyB7MTYsIDB4ZTk3MCwgMCwgezB4NTIsMHgwOCwweGY2LDB4ODIsMHgzYywweDY4LDB4YmQsMHg5MCwweDMyLDB4MzQsMHg0OCwweDljLDB4MTIsMHgyNiwweDAwLDB4Y2YgfX0sCisgezE2LCAweGU5ODAsIDAsIHsweDQwLDB4MjMsMHhjYywweDBiLDB4ZjYsMHgwMiwweDNkLDB4MDAsMHhiZiwweDEwLDB4MmYsMHhjYywweDg4LDB4ZjYsMHgwMiwweGUwIH19LAorIHsxNiwgMHhlOTkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MDAsMHg5MywweDEwLDB4MmMsMHgwOCB9fSwKKyB7MTYsIDB4ZTlhMCwgMCwgezB4MDksMHgzMSwweDAyLDB4NGMsMHgwMCwweDliLDB4MjAsMHg2NCwweDU4LDB4MDMsMHgzMSwweDYyLDB4NGMsMHg4MSwweGExLDB4MDAgfX0sCisgezE2LCAweGU5YjAsIDAsIHsweDIwLDB4MDAsMHg0OCwweDE0LDB4MDIsMHg0NCwweDAwLDB4OTMsMHgzMCwweDI0LDB4YzAsMHgwYiwweDMzLDB4MDIsMHg4ZCwweDg0IH19LAorIHsxNiwgMHhlOWMwLCAwLCB7MHhiMywweDIwLDB4NmMsMHhjMCwweDJhLDB4MzYsMHgwMiwweGUyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTlkMCwgMCwgezB4YzAsMHgxNSwweGFjLDB4MTAsMHg5YiwweDAyLDB4MmUsMHg0MSwweDBiLDB4YjAsMHgwMiwweGE0LDB4MDAsMHg5YSwweDAwLDB4NGEgfX0sCisgezE2LCAweGU5ZTAsIDAsIHsweDYwLDB4ODgsMHhiMCwweDUyLDB4NmMsMHgwMSwweGI5LDB4MDAsMHgyNiwweDAwLDB4MDgsMHg5MSwweDIyLDB4ZWMsMHgwOCwweGJiIH19LAorIHsxNiwgMHhlOWYwLCAwLCB7MHgwMCwweDI2LDB4YzAsMHgwYiwweGIwLDB4MDIsMHhhYywweDAwLDB4YmIsMHgwNSwweDZlLDB4YzEsMHgwYSwweGIwLDB4MDIsMHhmMCB9fSwKKyB7MTYsIDB4ZWEwMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4ZGIsMHgwMSwweDNlLDB4MzAgfX0sCisgezE2LCAweGVhMTAsIDAsIHsweDJkLDB4MzAsMHgwMywweDQ3LDB4NjAsMHhkOCwweGEwLDB4MTYsMHgzOCwweDhmLDB4YjAsMHgwMywweDZjLDB4MDAsMHg3OSwweDAyIH19LAorIHsxNiwgMHhlYTIwLCAwLCB7MHgzMSwweDYwLDB4MGMsMHhjOCwweDBhLDB4NjYsMHgwMCwweGJiLDB4MDAsMHhiNiwweGMwLDB4MGYsMHhiMCwweDBiLDB4YWMsMHgwMCB9fSwKKyB7MTYsIDB4ZWEzMCwgMCwgezB4ZmIsMHgwMSwweDNlLDB4YzEsMHgwZSwweGIwLDB4MDMsMHhkMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVhNDAsIDAsIHsweGUwLDB4MDEsMHhiYywweDEwLDB4ZWYsMHgwOCwweDNmLDB4MjQsMHgwYywweGYwLDB4MDMsMHg3NiwweDIwLDB4ZWUsMHg5MCwweDM1IH19LAorIHsxNiwgMHhlYTUwLCAwLCB7MHg0MCwweDBlLDB4NzAsMHgwMywweGFjLDB4MDAsMHhmZCwweDAwLDB4YmIsMHg2NCwweDBmLDB4ODgsMHgxMywweDM0LDB4ODAsMHhjYiB9fSwKKyB7MTYsIDB4ZWE2MCwgMCwgezB4MDAsMHgzYiwweGMwLDB4MGYsMHhiMCwweDAzLDB4NmMsMHgwOCwweGZmLDB4MDAsMHgzZSwweGMwLDB4MGQsMHhmMCwweDAzLDB4ZjggfX0sCisgezE2LCAweGVhNzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMSwweGZiLDB4ODAsMHgzMiwweDEwIH19LAorIHsxNiwgMHhlYTgwLCAwLCB7MHgwZSwweGIwLDB4MDMsMHhlZCwweDAwLDB4Y2IsMHg1MCwweDNlLDB4NDAsMHg4YywweGIwLDB4NDMsMHgyYywweDEwLDB4ZjksMHgwMCB9fSwKKyB7MTYsIDB4ZWE5MCwgMCwgezB4MzIsMHg2MCwweDBjLDB4NDAsMHgwYiwweDI2LDB4MDAsMHhjMywweDA0LDB4MzYsMHhjMCwweDBjLDB4MzAsMHgwMywweDJjLDB4MDAgfX0sCisgezE2LCAweGVhYTAsIDAsIHsweDliLDB4MDAsMHhiMCwweGMwLDB4MGMsMHhiMCwweDAzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYWIwLCAwLCB7MHhjOCwweDA1LDB4MGUsMHg4MCwweGJmLDB4MDQsMHgyYSwweDQwLDB4MDAsMHhmNSwweDAwLDB4ZTYsMHgwMCwweDgyLDB4ZDIsMHgyMiB9fSwKKyB7MTYsIDB4ZWFjMCwgMCwgezB4NDAsMHgwZCwweGYwLDB4MjIsMHgzYywweDAwLDB4OTUsMHgwMiwweDM2LDB4NDAsMHgwYSwweDgwLDB4MDIsMHgyZSwweDAwLDB4OGYgfX0sCisgezE2LCAweGVhZDAsIDAsIHsweDAwLDB4MzcsMHhjMCwweDBhLDB4ZjAsMHg0MiwweDNjLDB4MDAsMHg4ZiwweDAwLDB4MjMsMHhjMCwweDI4LDB4ZjAsMHgwMiwweGYyIH19LAorIHsxNiwgMHhlYWUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRlLDB4MDAsMHhiMywweDAwLDB4MjIsMHgyMCB9fSwKKyB7MTYsIDB4ZWFmMCwgMCwgezB4NGEsMHgzMCwweDAwLDB4Y2MsMHgwMCwweDgxLDB4YzAsMHgyOCwweDAwLDB4MDgsMHgzMCwweDAyLDB4MGMsMHgxMCwweGExLDB4MDAgfX0sCisgezE2LCAweGViMDAsIDAsIHsweDI4LDB4ODAsMHgxOCwweDMwLDB4MjIsMHgwNCwweDA0LDB4ODMsMHgwMCwweDI0LDB4YzAsMHgwOCwweDMwLDB4MDIsMHhjYywweDA4IH19LAorIHsxNiwgMHhlYjEwLCAwLCB7MHg5MywweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwNiwweGY4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWIyMCwgMCwgezB4MjAsMHgwMSwweDFlLDB4MDAsMHhiNywweDgwLDB4MjksMHhhMCwweDA4LDB4NzgsMHgwMiwweGZlLDB4MjAsMHg4ZCwweDgwLDB4MjkgfX0sCisgezE2LCAweGViMzAsIDAsIHsweGU1LDB4NWIsMHgzOCwweDQyLDB4MWUsMHg0MCwweGExLDB4ODEsMHgyNSwweGE4LDB4MDgsMHg3OSwweDAyLDB4MzcsMHgwMCwweDg3IH19LAorIHsxNiwgMHhlYjQwLCAwLCB7MHg4MCwweDI1LDB4ZTAsMHgwYSwweDc4LDB4MGEsMHhkZSwweDgxLDB4ODcsMHg4MCwweDI1LDB4ZTUsMHg0OCwweDc4LDB4MDIsMHhjOCB9fSwKKyB7MTYsIDB4ZWI1MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4YjMsMHgxMCwweDMwLDB4MTIgfX0sCisgezE2LCAweGViNjAsIDAsIHsweDBlLDB4MzAsMHgxMiwweGNjLDB4YzAsMHhjMywweDAwLDB4MzgsMHg4MCwweDBjLDB4MzEsMHgwNiwweDBjLDB4NDAsMHhmMSwweDAwIH19LAorIHsxNiwgMHhlYjcwLCAwLCB7MHgzOCwweDgwLDB4MGMsMHgzMCwweDQzLDB4MDQsMHg0MiwweGMzLDB4MDAsMHgzNiwweGMwLDB4MGMsMHgzMiwweDAzLDB4Y2UsMHhjMCB9fSwKKyB7MTYsIDB4ZWI4MCwgMCwgezB4ZGIsMHgwMCwweDMwLDB4YzAsMHgwYywweDMwLDB4MDMsMHhkMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGViOTAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZmYsMHgxMCwweDNkLDB4ODQsMHg0ZiwweGYxLDB4MDMsMHhkMCwweDQwLDB4ZmMsMHgxMCwweDMzIH19LAorIHsxNiwgMHhlYmEwLCAwLCB7MHg4MCwweDVkLDB4YjEsMHg4MywweGZjLDB4NTAsMHhkZCwweDBhLDB4MjUsMHg4OSwweDBmLDB4YjgsMHgwMywweGQ0LDB4MDAsMHhmZiB9fSwKKyB7MTYsIDB4ZWJiMCwgMCwgezB4MTAsMHgzZiwweGMwLDB4MGYsMHhmNCwweDAzLDB4M2MsMHg0MCwweGZmLDB4MDAsMHgzYiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZDAgfX0sCisgezE2LCAweGViYzAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHgwMCwweGZiLDB4MjAsMHgzZSwweDAwIH19LAorIHsxNiwgMHhlYmQwLCAwLCB7MHgwZiwweGI1LDB4MDMsMHgyOSwweDIwLDB4ZjksMHgwMCwweDMyLDB4YTAsMHgwYywweGIwLDB4ODMsMHhlYywweDAwLDB4NDksMHhjOCB9fSwKKyB7MTYsIDB4ZWJlMCwgMCwgezB4YjIsMHhjMCwweDhjLDB4YTAsMHgwMywweDY0LDB4MDAsMHhmYiwweDA4LDB4MTIsMHhlYSwweDBjLDB4YjAsMHgwYiwweDJjLDB4ODAgfX0sCisgezE2LCAweGViZjAsIDAsIHsweGZiLDB4MjAsMHgyZSwweGQyLDB4NmMsMHhiNiwweDQzLDB4ZWEsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYzAwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwMCwweGI3LDB4NDksMHgyZCwweDAwLDB4MGIsMHgzMCwweDgyLDB4MTAsMHgwMSwweGI1LDB4MDIsMHg4MyB9fSwKKyB7MTYsIDB4ZWMxMCwgMCwgezB4YzAsMHgxYSwweDcyLDB4MjIsMHhkZCwweDQxLDB4ODUsMHgwMCwweDYxLDB4YzAsMHgxOCwweDIwLDB4MjAsMHgxNCwweDAwLDB4YmYgfX0sCisgezE2LCAweGVjMjAsIDAsIHsweDQwLDB4MzUsMHhkMCwweDBkLDB4MzQsMHgwMiwweDFkLDB4MjAsMHhiNywweDI4LDB4MjUsMHhjMSwweDA4LDB4NzQsMHg4MiwweGQyIH19LAorIHsxNiwgMHhlYzMwLCAwLCB7MHgwNiwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4MDQsMHgzNywweGEwLDB4MmQsMHgyMCB9fSwKKyB7MTYsIDB4ZWM0MCwgMCwgezB4MGIsMHg3YSwweDEyLDB4MTYsMHgwMSwweGIzLDB4ODAsMHgyMSwweGUyLDB4MDgsMHg3OCwweDQyLDB4OWUsMHgwMCwweDg1LDB4ODAgfX0sCisgezE2LCAweGVjNTAsIDAsIHsweDIwLDB4ZTEsMHgxOCwweDY4LDB4MDIsMHg1NiwweDAwLDB4YjcsMHhhMCwweDI1LDB4ZTAsMHgwOCwweDdhLDB4MDIsMHgxZSwweDAwIH19LAorIHsxNiwgMHhlYzYwLCAwLCB7MHhiNywweDkwLDB4MmMsMHhlNSwweDg4LDB4N2EsMHgwMiwweGYwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWM3MCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MDAsMHhiMywweDAwLDB4NmMsMHgyNCwweDFiLDB4MzAsMHgwMiwweDAwLDB4MDAsMHhiMCwweDAwLDB4MjAgfX0sCisgezE2LCAweGVjODAsIDAsIHsweGY4LDB4MGEsMHgzMCwweDAyLDB4Y2MsMHgwMCwweDgxLDB4MDAsMHgyMCwweGQ4LDB4MTgsMHgyMCwweDAyLDB4MDQsMHgwMCwweGIzIH19LAorIHsxNiwgMHhlYzkwLCAwLCB7MHgwMCwweDI0LDB4YzAsMHgwOSwweDMwLDB4MDIsMHgwYywweDAwLDB4YjMsMHgwMCwweDI2LDB4YzAsMHgwOCwweDMwLDB4MDIsMHhkMiB9fSwKKyB7MTYsIDB4ZWNhMCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAwLDB4ZmEsMHgwMCwweDNkLDB4ODAgfX0sCisgezE2LCAweGVjYjAsIDAsIHsweDBmLDB4MjAsMHgwYiwweDI4LDB4ODAsMHhmZSwweDAwLDB4MzMsMHhhMCwweDBjLDB4YTAsMHgwMywweGU4LDB4MDIsMHhjYSwweDAyIH19LAorIHsxNiwgMHhlY2MwLCAwLCB7MHgzMiwweDkwLDB4MmMsMHhlNCwweDAzLDB4NzgsMHgwMCwweGZhLDB4MDAsMHgzMiwweDgwLDB4MGMsMHhhMCwweDAzLDB4MjgsMHgwMCB9fSwKKyB7MTYsIDB4ZWNkMCwgMCwgezB4ZmEsMHgwMCwweDNlLDB4ODAsMHgwYywweGEwLDB4MDMsMHhmYSwweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVjZTAsIDAsIHsweDQ4LDB4MDAsMHhlMSwweDAwLDB4ZjAsMHgwMCwweDNlLDB4MDAsMHg0ZiwweDgwLDB4MDMsMHhlMCwweDgwLDB4ZjgsMHgwMCwweDNlIH19LAorIHsxNiwgMHhlY2YwLCAwLCB7MHgwMCwweDBmLDB4ODAsMHgyMywweGMwLDB4MDAsMHhmOCwweDAyLDB4M2MsMHgwMCwweDBmLDB4YzAsMHg4MywweDYwLDB4MDAsMHhiOCB9fSwKKyB7MTYsIDB4ZWQwMCwgMCwgezB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDIzLDB4ZTAsMHgxOCwweGY4LDB4MDEsMHgzNiwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfX0sCisgezE2LCAweGVkMTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTYsMHgwMCwweGY5LDB4MjEsMHgzMiwweDYwIH19LAorIHsxNiwgMHhlZDIwLCAwLCB7MHgwYywweDkwLDB4MDMsMHgyYywweDQ0LDB4ZjksMHgwMCwweGIyLDB4NDAsMHgwZiwweDkwLDB4MWIsMHgyNCwweDAwLDB4ZTksMHgwMCB9fSwKKyB7MTYsIDB4ZWQzMCwgMCwgezB4M2UsMHg0MCwweDBjLDB4MTAsMHgwMywweGE0LDB4MDAsMHhmOSwweDAwLDB4MzIsMHg0MCwweDBmLDB4MTAsMHgzMywweDI0LDB4MTAgfX0sCisgezE2LCAweGVkNDAsIDAsIHsweGYxLDB4MDAsMHgzMiwweDQwLDB4MGMsMHg5MCwweDAzLDB4MDIsMHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZDUwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweGI5LDB4NDAsMHhhMiwweDQxLDB4MDgsMHg5MCwweDAyLDB4MjQsMHg4MCwweGU5LDB4MDAsMHgyMiB9fSwKKyB7MTYsIDB4ZWQ2MCwgMCwgezB4NDAsMHgwYiwweDkwLDB4MTIsMHgyNCwweDAwLDB4ODksMHgwMCwweDZlLDB4NDEsMHgxOCwweDkwLDB4NDIsMHgyNCwweDAwLDB4YjkgfX0sCisgezE2LCAweGVkNzAsIDAsIHsweDA0LDB4MmEsMHg0MSwweDBiLDB4OTAsMHgwMywweDY0LDB4MDAsMHhmOSwweDAwLDB4MmEsMHg0MCwweDBhLDB4OTAsMHgwYSwweDIwIH19LAorIHsxNiwgMHhlZDgwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMSwweDI0LDB4ODAsMHhiOSwweDQyLDB4NjIsMHg0OCB9fSwKKyB7MTYsIDB4ZWQ5MCwgMCwgezB4MjgsMHg5MCwweDBhLDB4MjQsMHgwMCwweGIxLDB4MDAsMHgyMiwweDQwLDB4MGIsMHgxMCwweDAyLDB4MjQsMHgxMCwweGI5LDB4MDIgfX0sCisgezE2LCAweGVkYTAsIDAsIHsweDJlLDB4NDAsMHgwOCwweGQwLDB4MDIsMHhhNCwweDAwLDB4YjEsMHgwMCwweDIyLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgyNCwweDA0IH19LAorIHsxNiwgMHhlZGIwLCAwLCB7MHhiOSwweDAwLDB4MjIsMHg0MCwweDA4LDB4MTAsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWRjMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDAsMHhiMSwweDIwLDB4NjAsMHg0MCwweDA4LDB4MTIsMHgwMiwweDA0LDB4MDAsMHhhMSwweDIwLDB4MjAgfX0sCisgezE2LCAweGVkZDAsIDAsIHsweDQwLDB4MGIsMHgxMiwweDAyLDB4MDQsMHg4MCwweDkxLDB4MjAsMHgyZCwweDY4LDB4MDgsMHg1MiwweDEyLDB4MDQsMHgwMCwweGIxIH19LAorIHsxNiwgMHhlZGUwLCAwLCB7MHgyOCwweDI4LDB4NGEsMHgwOSwweDEyLDB4ODIsMHg0NCwweGEwLDB4YjEsMHgyYywweDI4LDB4NGEsMHgwYSwweDEyLDB4ODIsMHgwMiB9fSwKKyB7MTYsIDB4ZWRmMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4ZjgsMHgwMCwweDMyLDB4MTQgfX0sCisgezE2LCAweGVlMDAsIDAsIHsweDBjLDB4ODAsMHgwMywweDIwLDB4MDAsMHhmOCwweDUwLDB4MzIsMHgxNCwweDBmLDB4ODUsMHgwMywweDAxLDB4NDAsMHhmOCwweDAwIH19LAorIHsxNiwgMHhlZTEwLCAwLCB7MHgyZSwweDAwLDB4MjgsMHhjMCwweDAzLDB4YTAsMHgwMCwweGY4LDB4MjQsMHgzMCwweDA4LDB4MGYsMHg4MiwweDIzLDB4MjAsMHg4MCB9fSwKKyB7MTYsIDB4ZWUyMCwgMCwgezB4ZjgsMHgyMCwweDMyLDB4MDgsMHgwYywweDgyLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVlMzAsIDAsIHsweDk4LDB4MWQsMHhlNCwweDA4LDB4ZjksMHgxMCwweDNmLDB4NDAsMHg4ZiwweDkxLDB4MTMsMHhlNCwweDAwLDB4ZWQsMHgxMCwweDNmIH19LAorIHsxNiwgMHhlZTQwLCAwLCB7MHg1MCwweDBmLDB4OTEsMHgwMywweGU0LDB4NDAsMHhhNSwweDEwLDB4M2UsMHg0NCwweDBmLDB4OTEsMHgwMywweGY0LDB4MDQsMHhmOSB9fSwKKyB7MTYsIDB4ZWU1MCwgMCwgezB4MjgsMHgzZSwweDRiLDB4MGIsMHg5MiwweGEzLDB4ZTQsMHhhMCwweGU5LDB4MjgsMHgzZSwweDRhLDB4MGYsMHg5MiwweDgzLDB4ZTYgfX0sCisgezE2LCAweGVlNjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZjQsMHgwMCwweGNkLDB4MDAsMHgzMywweDQwIH19LAorIHsxNiwgMHhlZTcwLCAwLCB7MHg4MCwweGQwLDB4MDEsMHhmNCwweDAwLDB4YTUsMHgwMCwweDI2LDB4NDAsMHgwZiwweDkwLDB4MDMsMHgyNiwweDAwLDB4ZjEsMHg4OCB9fSwKKyB7MTYsIDB4ZWU4MCwgMCwgezB4M2UsMHg2OCwweDBkLDB4OTgsMHg4MywweDQ0LDB4MDAsMHhjOSwweGMwLDB4M2EsMHg0MCwweDBjLDB4OTgsMHgwMywweDI0LDB4MDggfX0sCisgezE2LCAweGVlOTAsIDAsIHsweGY5LDB4YTAsMHgzMiwweDc4LDB4MGYsMHg5YSwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZWEwLCAwLCB7MHgzOCwweDEwLDB4ZTAsMHgwMiwweDg4LDB4MDAsMHhhMiwweDAwLDB4MDgsMHg4MCwweDAyLDB4ZTAsMHgwMCwweDBhLDB4MDAsMHgyMiB9fSwKKyB7MTYsIDB4ZWViMCwgMCwgezB4MDAsMHgwYiwweDgwLDB4MDIsMHgyMCwweDAwLDB4YjgsMHg0MCwweDJlLDB4MTQsMHgwOCwweDgwLDB4NDMsMHgzMCwweDAwLDB4ODggfX0sCisgezE2LCAweGVlYzAsIDAsIHsweGEwLDB4MjIsMHgyYSwweDBhLDB4OGEsMHg0MiwweGEwLDB4MDUsMHhiOCwweDQyLDB4MzIsMHgzOCwweDBiLDB4ODAsMHgwMiwweDBlIH19LAorIHsxNiwgMHhlZWQwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4MDMsMHg5MSwweDAwLDB4MjQsMHg0MCB9fSwKKyB7MTYsIDB4ZWVlMCwgMCwgezB4MGIsMHgxMCwweDAyLDB4YzQsMHgxMSwweGIxLDB4MDQsMHgyMCwweDQxLDB4MWIsMHgxMCwweDIyLDB4NDUsMHgwMCwweGI1LDB4MDAgfX0sCisgezE2LCAweGVlZjAsIDAsIHsweDI1LDB4NDAsMHgwOSwweDUwLDB4MDIsMHg1NCwweDAxLDB4ODEsMHg0MCwweDJjLDB4NDAsMHgwOSwweDE0LDB4OTIsMHg0NCwweDAwIH19LAorIHsxNiwgMHhlZjAwLCAwLCB7MHhiMSwweDQwLDB4MjQsMHg0YywweDBiLDB4MTQsMHgwYSwweDQyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWYxMCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHg5OSwweDAwLDB4MjQsMHg0MiwweDBiLDB4OTAsMHgwMiwweGU0LDB4MDEsMHg5OSwweDIwLDB4MjYgfX0sCisgezE2LCAweGVmMjAsIDAsIHsweDQwLDB4Y2IsMHg5MCwweDAyLDB4NjQsMHgwMCwweGJiLDB4MDAsMHgyZiwweDQxLDB4MGEsMHhkMCwweDAyLDB4MzQsMHgwMCwweDg5IH19LAorIHsxNiwgMHhlZjMwLCAwLCB7MHgwMCwweDI2LDB4NDAsMHgwYiwweDEwLDB4MDIsMHhlNCwweDAwLDB4MzEsMHgwMCwweDYyLDB4NDAsMHgwYiwweDkwLDB4MDIsMHg0NiB9fSwKKyB7MTYsIDB4ZWY0MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhjNCwweDAwLDB4ZDksMHgwMSwweDM2LDB4NTAgfX0sCisgezE2LCAweGVmNTAsIDAsIHsweDJmLDB4OTAsMHgwMywweGU2LDB4NjAsMHhmOSwweDgwLDB4MzYsMHg1MiwweDBiLDB4OTAsMHgwYSwweDY0LDB4MDAsMHhmOSwweDAwIH19LAorIHsxNiwgMHhlZjYwLCAwLCB7MHgzNiwweDQwLDB4MGQsMHg5MCwweDAzLDB4NjQsMHgwMiwweDA5LDB4MDAsMHgzZSwweDQwLDB4MGQsMHg5MCwweDAzLDB4NjQsMHgwMCB9fSwKKyB7MTYsIDB4ZWY3MCwgMCwgezB4YjksMHgwMCwweGI2LDB4NDAsMHgwZiwweDkwLDB4MDMsMHg2OCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVmODAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAwLDB4ZTEsMHgwMCwweDNhLDB4NDEsMHgwYywweDkwLDB4MjMsMHhlNiwweDIwLDB4ZTksMHgwMCwweGJhIH19LAorIHsxNiwgMHhlZjkwLCAwLCB7MHg3MCwweDBmLDB4OTAsMHgwMywweGE0LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBkLDB4MTAsMHgxMywweGE3LDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4ZWZhMCwgMCwgezB4MDAsMHgzYSwweDQwLDB4MGUsMHg5MCwweDQzLDB4YTQsMHgwOCwweGY5LDB4MDAsMHgzYSwweDQwLDB4MGYsMHg5MCwweDAzLDB4OGEgfX0sCisgezE2LCAweGVmYjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgyMCwweGY4LDB4MDAsMHgzMiwweDAwIH19LAorIHsxNiwgMHhlZmMwLCAwLCB7MHgwZiwweDgwLDB4ODMsMHgyMSwweDAwLDB4ZjAsMHgwMCwweDNhLDB4MTEsMHgwOSwweDgwLDB4MDMsMHhlMCwweDAwLDB4YzgsMHgwMSB9fSwKKyB7MTYsIDB4ZWZkMCwgMCwgezB4MzAsMHgwMSwweDBjLDB4ODAsMHgwMywweGIwLDB4MDAsMHhkMCwweDAwLDB4MzQsMHgwMCwweDBkLDB4ODAsMHgwMywweDIwLDB4MDAgfX0sCisgezE2LCAweGVmZTAsIDAsIHsweGM4LDB4MDAsMHgzMiwweDAwLDB4MGMsMHg4MCwweDAzLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZmYwLCAwLCB7MHgyOCwweDA1LDB4MzgsMHgwMCwweGJlLDB4MDAsMHgyMiwweDgwLDB4MDMsMHhlOCwweDAyLDB4MWEsMHgwOCwweGJlLDB4NDgsMHgyMiB9fSwKKyB7MTYsIDB4ZjAwMCwgMCwgezB4ODAsMHgwYSwweGEwLDB4MDMsMHhiOCwweDAwLDB4Y2EsMHgwOCwweDIyLDB4ODAsMHgwZiwweGE0LDB4MDIsMHgwOCwweDAwLDB4OGEgfX0sCisgezE2LCAweGYwMTAsIDAsIHsweDAwLDB4MjIsMHg4MCwweDhkLDB4YTAsMHgwMiwweDI4LDB4MDAsMHhkYSwweDAwLDB4MmEsMHg4MSwweDA4LDB4YTAsMHgwMiwweDhhIH19LAorIHsxNiwgMHhmMDIwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDQ0LDB4MDAsMHhiMywweDAwLDB4MjAsMHg0MCB9fSwKKyB7MTYsIDB4ZjAzMCwgMCwgezB4MGIsMHgzMCwweDAyLDB4MDgsMHgwMCwweGIwLDB4NjQsMHg2OCwweGMxLDB4MDgsMHhiMCwweDIyLDB4Y2MsMHgwYywweDkzLDB4ODAgfX0sCisgezE2LCAweGYwNDAsIDAsIHsweDAwLDB4YzAsMHg0OCwweDM2LDB4MDIsMHg4OCwweDAwLDB4YjMsMHgwMCwweDI0LDB4YzAsMHgwOCwweDMwLDB4MDYsMHgwYywweDAxIH19LAorIHsxNiwgMHhmMDUwLCAwLCB7MHhhMywweDAyLDB4MmMsMHhjMCwweDA4LDB4YjAsMHgwMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjA2MCwgMCwgezB4YTAsMHgwMSwweDE0LDB4MDgsMHhiNSwweDAwLDB4MjEsMHg0MCwweDBiLDB4MzgsMHg4MiwweDFjLDB4MjEsMHhiNywweDAwLDB4MjMgfX0sCisgezE2LCAweGYwNzAsIDAsIHsweGU4LDB4NGEsMHg3MiwweDI2LDB4OWUsMHg0MCwweDhmLDB4ODEsMHhhYiwweDQwLDB4NDIsMHg3MCwweDUyLDB4MzgsMHgwMCwweGEzIH19LAorIHsxNiwgMHhmMDgwLCAwLCB7MHgyMiwweDIwLDB4YzQsMHg0OSwweDMxLDB4MDIsMHgxZSwweDBhLDB4YjcsMHgyMiwweDJkLDB4ZTgsMHgwOCwweDcyLDB4MDIsMHhhOCB9fSwKKyB7MTYsIDB4ZjA5MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxMiwweDAwLDB4ZjYsMHg4MCwweDIxLDB4ZTAgfX0sCisgezE2LCAweGYwYTAsIDAsIHsweDBiLDB4NzgsMHgwYiwweDFlLDB4MDAsMHhiNCwweDgyLDB4M2IsMHhlOCwweDRjLDB4N2MsMHgxMywweGZlLDB4MDIsMHg5NywweDgwIH19LAorIHsxNiwgMHhmMGIwLCAwLCB7MHgzMywweGEwLDB4MDgsMHgzOCwweDAzLDB4OWEsMHgwMCwweGY3LDB4ODgsMHgzNSwweGUyLDB4MGMsMHg3OCwweGUzLDB4MGUsMHgwMCB9fSwKKyB7MTYsIDB4ZjBjMCwgMCwgezB4ZTMsMHhlOCwweDM0LDB4ZjgsMHgwYywweDNjLDB4MjMsMHgyYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYwZDAsIDAsIHsweDA4LDB4MWQsMHhhOCwweDA0LDB4ZjEsMHgwMCwweDNlLDB4NDIsMHgwZiwweGIwLDB4MTMsMHhlYywweDAwLDB4ZmIsMHgwMCwweGJlIH19LAorIHsxNiwgMHhmMGUwLCAwLCB7MHhjYywweDFlLDB4YjYsMHgwNywweGVkLDB4ODAsMHhmYiwweDAwLDB4MzYsMHgwMCwweDBmLDB4YjAsMHg0MywweDY4LDB4MDAsMHhjYiB9fSwKKyB7MTYsIDB4ZjBmMCwgMCwgezB4MzAsMHgzZSwweGQ4LDB4MGYsMHhiNiwweDBiLDB4ZWQsMHg0MCwweGNiLDB4MDAsMHgzYSwweGMwLDB4MmYsMHhiNiwweDAzLDB4YzIgfX0sCisgezE2LCAweGYxMDAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZjIsMHg0MCwweGZiLDB4OTEsMHgzZCwweDRjIH19LAorIHsxNiwgMHhmMTEwLCAwLCB7MHg4MCwweGY4LDB4MDMsMHhkZSwweDQwLDB4YzYsMHg4MCwweDFiLDB4ZjAsMHg0ZiwweGZkLDB4MDcsMHhmZiwweDAwLDB4Y2QsMHg4MCB9fSwKKyB7MTYsIDB4ZjEyMCwgMCwgezB4MzMsMHhlMCwweDBjLDB4NjgsMHgwMywweGJhLDB4MDAsMHhmZiwweDgwLDB4MzMsMHhlMCwweDA3LDB4ZjgsMHgwMywweDNmLDB4MTAgfX0sCisgezE2LCAweGYxMzAsIDAsIHsweGNmLDB4ODAsMHgzZiwweGUwLDB4MGMsMHhmYywweDAzLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMTQwLCAwLCB7MHhhOCwweDExLDB4OTAsMHgwMCwweGI1LDB4YzAsMHgyZCwweDQwLDB4MDgsMHg2MiwweDAyLDB4ZGMsMHgyMCwweGQ2LDB4MDIsMHgyMSB9fSwKKyB7MTYsIDB4ZjE1MCwgMCwgezB4YzgsMHg4ZiwweDcwLDB4MDIsMHhkYywweDgxLDB4YjUsMHgwMCwweDgxLDB4NDQsMHgwZCwweDYxLDB4MjIsMHgxOCwweDA0LDB4YjcgfX0sCisgezE2LCAweGYxNjAsIDAsIHsweDAwLDB4MzUsMHhjMCwweDBiLDB4NzAsMHgwMiwweGJjLDB4MDAsMHhhNywweDAxLDB4MmQsMHhjMCwweDA4LDB4NzAsMHgwMywweGVhIH19LAorIHsxNiwgMHhmMTcwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDkwLDB4MDEsMHhiNiwweDAxLDB4MmYsMHhjMCB9fSwKKyB7MTYsIDB4ZjE4MCwgMCwgezB4MTgsMHg3MCwweDAyLDB4ZGMsMHgwYSwweDk2LDB4MTAsMHgyOSwweGMxLDB4NGIsMHg3MCwweDA2LDB4ZGMsMHgxMCwweDg1LDB4MDAgfX0sCisgezE2LCAweGYxOTAsIDAsIHsweDI1LDB4ODAsMHgwOCwweDYwLDB4ODIsMHgxYSwweDIwLDB4YTMsMHgwMCwweDI1LDB4YzAsMHgwYiwweDMxLDB4MDIsMHg1YywweDQwIH19LAorIHsxNiwgMHhmMWEwLCAwLCB7MHg4NywweDAwLDB4MmQsMHhjMCwweDA4LDB4NzAsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjFiMCwgMCwgezB4MjAsMHgxNCwweGM4LDB4MDAsMHhiMSwweDAwLDB4MmMsMHg0MCwweDg4LDB4MjAsMHgwMiwweGVkLDB4MDAsMHg4YSwweDYwLDB4MjAgfX0sCisgezE2LCAweGYxYzAsIDAsIHsweGMwLDB4MGEsMHgzMCwweDAyLDB4Y2MsMHgwNCwweGIxLDB4MDAsMHgyNCwweDAwLDB4MjgsMHgyNCwweDAyLDB4MGEsMHgwMCwweDMzIH19LAorIHsxNiwgMHhmMWQwLCAwLCB7MHgwMCwweDI0LDB4YzAsMHgwYiwweGIwLDB4MDIsMHhjYywweDAwLDB4YTMsMHgwMCwweDJjLDB4YzAsMHg4OCwweDMwLDB4MDIsMHg4OCB9fSwKKyB7MTYsIDB4ZjFlMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhMCwweDAwLDB4ZmIsMHgwMCwweDNlLDB4YzYgfX0sCisgezE2LCAweGYxZjAsIDAsIHsweDBjLDB4ODAsMHgwMywweGU1LDB4MDAsMHgwOSwweGM4LDB4YWIsMHhlMiwweDBiLDB4ZjAsMHgwMiwweGZjLDB4MDAsMHg0YSwweDAwIH19LAorIHsxNiwgMHhmMjAwLCAwLCB7MHgzNiwweGMwLDB4MDgsMHg5MCwweDAzLDB4YTYsMHgwMCwweGZmLDB4MDAsMHgzMywweGMwLDB4MGYsMHhmMCwweDAzLDB4N2MsMHgwMCB9fSwKKyB7MTYsIDB4ZjIxMCwgMCwgezB4OGYsMHgwMCwweDJmLDB4YzAsMHgyOCwweGYwLDB4MDIsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYyMjAsIDAsIHsweDgwLDB4MDAsMHhlMSwweDAwLDB4ZmEsMHgwMSwweDNlLDB4YzAsMHgwZiwweDgwLDB4MDMsMHhlYywweDAwLDB4ZjksMHg0MCwweDNlIH19LAorIHsxNiwgMHhmMjMwLCAwLCB7MHhjMCwweDA3LDB4YjAsMHgwMywweGVjLDB4MDAsMHhmYSwweDAwLDB4M2EsMHg0MCwweDBmLDB4OTAsMHgyMywweGU1LDB4MDAsMHhmYiB9fSwKKyB7MTYsIDB4ZjI0MCwgMCwgezB4MDAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4YWMsMHgwMCwweGZiLDB4MDAsMHgzYywweGMwLDB4MGYsMHhiMCwweDIzLDB4ZTAgfX0sCisgezE2LCAweGYyNTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZjAsMHgwMCwweGZjLDB4MjAsMHgzZiwweGMwIH19LAorIHsxNiwgMHhmMjYwLCAwLCB7MHgwYywweGM4LDB4MDMsMHhmYywweDIwLDB4Y2QsMHg4MSwweGIzLDB4YzIsMHg0ZiwweGYwLDB4MDMsMHhmYywweDAwLDB4Y2EsMHgwMCB9fSwKKyB7MTYsIDB4ZjI3MCwgMCwgezB4M2MsMHg4MCwweDBjLDB4ZDAsMHg4MiwweDM2LDB4MDEsMHhmZiwweDAwLDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMywweDNjLDB4MDggfX0sCisgezE2LCAweGYyODAsIDAsIHsweGNmLDB4MDQsMHgzYSwweGMwLDB4NWMsMHhiMCwweDAzLDB4YzAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMjkwLCAwLCB7MHg4MSwweDA0LDB4NjIsMHgwNCwweGI4LDB4NDAsMHgyYywweDYwLDB4MDgsMHg4OSwweDAyLDB4ZWUsMHg4MCwweGE5LDB4NjAsMHgyYSB9fSwKKyB7MTYsIDB4ZjJhMCwgMCwgezB4YzAsMHgwYiwweGIwLDB4MDMsMHg4YywweDAwLDB4YWEsMHg0MCwweDJlLDB4MDAsMHgwOCwweDEwLDB4MDIsMHgyNiwweDgxLDB4ZWIgfX0sCisgezE2LCAweGYyYjAsIDAsIHsweDAwLDB4MjYsMHhjMCwweDhiLDB4YjAsMHgxMywweDZjLDB4MDAsMHhkYiwweDAwLDB4MmUsMHhjMCwweDNkLDB4YjAsMHgwMiwweGUwIH19LAorIHsxNiwgMHhmMmMwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDIzLDB4MDAsMHhiYiwweDAzLDB4MmUsMHhjOCB9fSwKKyB7MTYsIDB4ZjJkMCwgMCwgezB4MDksMHhiMCwweDAyLDB4ZWUsMHgwMCwweDhiLDB4MTAsMHgyNiwweGMwLDB4MGIsMHhiMCwweDAyLDB4ZWMsMHgwMCwweGE4LDB4MDAgfX0sCisgezE2LCAweGYyZTAsIDAsIHsweDJlLDB4YzAsMHgwOCwweDg4LDB4MjIsMHhhNCwweDgwLDB4YmIsMHgwMCwweDJlLDB4YzAsMHg0YiwweGIwLDB4MjIsMHgwYywweDAwIH19LAorIHsxNiwgMHhmMmYwLCAwLCB7MHg4YiwweDAwLDB4MmUsMHhjMCwweDBiLDB4YjAsMHgwMiwweGUwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjMwMCwgMCwgezB4MDgsMHgwNCwweDAwLDB4MDAsMHhiMiwweDAwLDB4MmUsMHhjMCwweDI5LDB4MjgsMHgwMiwweGVjLDB4MDEsMHhhMCwweDAyLDB4MjAgfX0sCisgezE2LCAweGYzMTAsIDAsIHsweGMwLDB4MDksMHgzMCwweDAyLDB4Y2MsMHgwMCwweGEwLDB4MDAsMHgyYywweDQwLDB4MDgsMHgwMCwweDQyLDB4ODQsMHgwMCwweDkzIH19LAorIHsxNiwgMHhmMzIwLCAwLCB7MHgwMCwweDZjLDB4YzAsMHgwYiwweDMwLDB4MDYsMHg0ZCwweDAwLDB4OTMsMHgwMCwweDJjLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhjMiB9fSwKKyB7MTYsIDB4ZjMzMCwgMCwgezB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2MCwweDAwLDB4ZjgsMHgyMCwweDJmLDB4YzAgfX0sCisgezE2LCAweGYzNDAsIDAsIHsweDBkLDB4YjAsMHgwMywweGVjLDB4MDAsMHhjYiwweDAwLDB4MzMsMHhjMCwweDBiLDB4ZjAsMHgwMywweGZjLDB4MTgsMHhlOCwweDAwIH19LAorIHsxNiwgMHhmMzUwLCAwLCB7MHgyZSwweDgwLDB4MDgsMHg4MCwweDAzLDB4YTQsMHgwMCwweGJmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDQzLDB4M2QsMHgxMSB9fSwKKyB7MTYsIDB4ZjM2MCwgMCwgezB4Y2YsMHgwMywweDNlLDB4YzEsMHg1ZCwweGYwLDB4MjMsMHhjMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYzNzAsIDAsIHsweGEwLDB4MWQsMHhmMCwweDAwLDB4ZmMsMHgxMCwweDNmLDB4NDAsMHgwZSwweGUwLDB4MDMsMHhmYywweDAwLDB4ZmMsMHgwMCwweDNmIH19LAorIHsxNiwgMHhmMzgwLCAwLCB7MHhjMCwweDBmLDB4ZjAsMHgwMywweGJjLDB4MDAsMHhmYywweDAwLDB4M2YsMHgwMCwweDJmLDB4YzAsMHgwMywweDc0LDB4MDAsMHhlZiB9fSwKKyB7MTYsIDB4ZjM5MCwgMCwgezB4MDAsMHgyNywweGMwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgxOCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZTggfX0sCisgezE2LCAweGYzYTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDE1LDB4ZmMsMHg4OCwweDljLDB4MjksMHgzZiwweDA4IH19LAorIHsxNiwgMHhmM2IwLCAwLCB7MHgwZiwweGQyLDB4ODMsMHhlYywweDAwLDB4ZmYsMHgwOCwweDNmLDB4MjgsMHgwZiwweGNhLDB4MDMsMHgzYywweDQxLDB4Y2YsMHgyMCB9fSwKKyB7MTYsIDB4ZjNjMCwgMCwgezB4NzMsMHgyYywweDBjLDB4YzAsMHgwMywweDMwLDB4MjAsMHhjZiwweDYwLDB4MzMsMHhkOCwweDBmLDB4NzgsMHgwMywweDNmLDB4ODAgfX0sCisgezE2LCAweGYzZDAsIDAsIHsweGRkLDB4OTIsMHgzMywweGM4LDB4MGYsMHg1MCwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmM2UwLCAwLCB7MHg4MCwweDEwLDB4ZTUsMHg0MCwweDg4LDB4NDAsMHgyZSwweDA0LDB4OGIsMHg5NCwweDAyLDB4ZTQsMHgwMCwweGI5LDB4MDAsMHgwZSB9fSwKKyB7MTYsIDB4ZjNmMCwgMCwgezB4N2YsMHg4ZiwweDllLDB4ODMsMHg2NSwweDgyLDB4Y2YsMHg2OCwweDNlLDB4NTAsMHg4ZCwweDA0LDB4OTIsMHgyZiwweDA0LDB4ZDMgfX0sCisgezE2LCAweGY0MDAsIDAsIHsweDQwLDB4NzQsMHhkYywweDBkLDB4YTIsMHgwMiwweDIwLDB4NDAsMHg4OSwweDAwLDB4MjIsMHhmMCwweDBiLDB4OTgsMHgwMiwweDIwIH19LAorIHsxNiwgMHhmNDEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGM4LDB4MDksMHhhMCwweDg1LDB4MmMsMHgwMSB9fSwKKyB7MTYsIDB4ZjQyMCwgMCwgezB4MGIsMHgwMCwweDEwLDB4Y2MsMHg0MCwweGEyLDB4MDgsMHgyYywweDAwLDB4ZGIsMHgxMSwweDAyLDB4ODksMHgwMCwweDkzLDB4MzAgfX0sCisgezE2LCAweGY0MzAsIDAsIHsweDIwLDB4MDUsMHgwOCwweDEzLDB4MDIsMHg4MCwweDA4LDB4YTMsMHg2MCwweDYwLDB4YzAsMHgwYSwweGIwLDB4ODIsMHgwOCwweDg0IH19LAorIHsxNiwgMHhmNDQwLCAwLCB7MHg4MSwweDIwLDB4MjAsMHhkMCwweDBiLDB4MTAsMHgwMiwweGEyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjQ1MCwgMCwgezB4YzAsMHgxNSwweGE0LDB4MTIsMHg4OCwweDgwLDB4NmUsMHgyMCwweDBiLDB4ODgsMHg4MiwweGVlLDB4MDAsMHhiYSwweDgxLDB4MmUgfX0sCisgezE2LCAweGY0NjAsIDAsIHsweDYwLDB4NWEsMHg5OCwweDAyLDB4YTIsMHgwMCwweDhiLDB4MDAsMHgyYSwweDYwLDB4MDgsMHgxMSwweDFhLDB4MmMsMHgwMCwweGJiIH19LAorIHsxNiwgMHhmNDcwLCAwLCB7MHgwMCwweDIyLDB4YzAsMHgwOCwweGI4LDB4MGEsMHgyOCwweDAwLDB4ODEsMHgyMCwweDAyLDB4YzAsMHgwYiwweDkwLDB4MDIsMHhiMCB9fSwKKyB7MTYsIDB4ZjQ4MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHhlZCwweDAwLDB4ZDksMHg4MCwweDNlLDB4MjAgfX0sCisgezE2LCAweGY0OTAsIDAsIHsweDRmLDB4OTgsMHgwMCwweGViLDB4MjAsMHhmYiwweGUwLDB4MmUsMHg2MCwweDBiLDB4OGMsMHg2MiwweGFlLDB4MjAsMHg4YiwweDAwIH19LAorIHsxNiwgMHhmNGEwLCAwLCB7MHgyMiwweDYwLDB4MDgsMHhiYywweDAzLDB4YTAsMHgyMCwweGViLDB4MDAsMHgyMiwweGMxLDB4MGEsMHgxOCwweDBiLDB4MjUsMHgwMCB9fSwKKyB7MTYsIDB4ZjRiMCwgMCwgezB4ZDksMHgwMCwweGIyLDB4YzAsMHgwZiwweDkwLDB4MGIsMHg5MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY0YzAsIDAsIHsweGUwLDB4MDEsMHg5NCwweDg4LDB4ZmYsMHgwMCwweDNmLDB4MDEsMHgwZiwweGQwLDB4MDEsMHhmMCwweDA4LDB4ZGQsMHgwMSwweDNmIH19LAorIHsxNiwgMHhmNGQwLCAwLCB7MHg0MiwweDA3LDB4NDAsMHgwMywweDVjLDB4MDAsMHhhZiwweDAwLDB4M2YsMHg0MCwweDBmLDB4ZjgsMHgwMCwweGYwLDB4MDAsMHhkZiB9fSwKKyB7MTYsIDB4ZjRlMCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGYsMHhjMCwweDIzLDB4ZjQsMHg1MCwweGZkLDB4ODAsMHgzZiwweGMwLDB4MGYsMHhkMCwweDAzLDB4NzggfX0sCisgezE2LCAweGY0ZjAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4YWMsMHgwMCwweGQ5LDB4MDAsMHgzZSwweDQwIH19LAorIHsxNiwgMHhmNTAwLCAwLCB7MHgwZiwweDk0LDB4MDMsMHhhOCwweDIwLDB4Y2EsMHg0MCwweDNhLDB4NDAsMHgwZiwweDk0LDB4MDMsMHhlYSwweDA4LDB4ZmIsMHgwMCB9fSwKKyB7MTYsIDB4ZjUxMCwgMCwgezB4M2EsMHgwMCwweDRjLDB4ZjYsMHgyMywweDJjLDB4MzAsMHhjYiwweDAwLDB4MzYsMHhjMCwweDBkLDB4OTAsMHgwMywweGExLDB4MDIgfX0sCisgezE2LCAweGY1MjAsIDAsIHsweGQ5LDB4MDAsMHhiYSwweGMwLDB4MGYsMHg5OCwweDAzLDB4MTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNTMwLCAwLCB7MHhjOCwweDA1LDB4MjQsMHgwMCwweDhhLDB4MDAsMHgyZSwweDQwLDB4MGIsMHg5NSwweDAyLDB4ZTAsMHgwOCwweDg4LDB4ODAsMHgyMiB9fSwKKyB7MTYsIDB4ZjU0MCwgMCwgezB4NzAsMHg4ZiwweDhjLDB4MDIsMHhlMCwweDAwLDB4YmYsMHgwMiwweDIwLDB4MDAsMHgwOCwweGI4LDB4MDIsMHgwZSwweDAwLDB4ZGYgfX0sCisgezE2LCAweGY1NTAsIDAsIHsweDAwLDB4MjMsMHhkZCwweDA4LDB4OTgsMHg4MiwweDJhLDB4MDAsMHg4OSwweDgwLDB4MjMsMHhjMCwweDBiLDB4NTAsMHgxYSwweDMyIH19LAorIHsxNiwgMHhmNTYwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDQ0LDB4MDAsMHg4MywweDA1LDB4MjQsMHg0MSB9fSwKKyB7MTYsIDB4ZjU3MCwgMCwgezB4MDksMHgxMCwweDAyLDB4Y2UsMHgwMCwweDgzLDB4OTAsMHgyYywweDgwLDB4MWIsMHgyNCwweDgyLDB4Y2MsMHgwMCwweGJiLDB4MDAgfX0sCisgezE2LCAweGY1ODAsIDAsIHsweDJjLDB4ODAsMHgwOCwweDA0LDB4MDgsMHgwNCwweDAxLDB4OGIsMHgwMCwweDIyLDB4YzAsMHgyOCwweDEyLDB4MDIsMHg2YywweDgwIH19LAorIHsxNiwgMHhmNTkwLCAwLCB7MHg4MSwweDQ4LDB4MjQsMHhjNCwweDBiLDB4MTAsMHgwMiwweDM4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjVhMCwgMCwgezB4MjAsMHgwMSwweDNlLDB4NDIsMHg4NiwweDgwLDB4MmQsMHg2MCwweDBiLDB4NjgsMHgwMiwweGY2LDB4OTAsMHg4ZCwweDgwLDB4MjEgfX0sCisgezE2LCAweGY1YjAsIDAsIHsweDIyLDB4MGIsMHg1OCwweDAyLDB4ZDcsMHg0MCwweGI3LDB4OTAsMHgyMSwweGUwLDB4MDgsMHg0OSwweDkyLDB4MWUsMHg1MywweDk3IH19LAorIHsxNiwgMHhmNWMwLCAwLCB7MHg4MSwweDIxLDB4ZTAsMHg0OCwweGM4LDB4MGEsMHg1MiwweDIyLDB4ODUsMHg4OCwweDI1LDB4ZTAsMHgwYiwweDU4LDB4MDIsMHgwOCB9fSwKKyB7MTYsIDB4ZjVkMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ODMsMHgwMCwweDM0LDB4YzAgfX0sCisgezE2LCAweGY1ZTAsIDAsIHsweDBmLDB4MDAsMHgwMywweGNlLDB4MjAsMHhjMywweDMwLDB4N2MsMHg5NCwweDBiLDB4MzQsMHg4MywweGNjLDB4MTQsMHhmMywweDAyIH19LAorIHsxNiwgMHhmNWYwLCAwLCB7MHgzYywweDgwLDB4MGMsMHgwNCwweDAzLDB4MDQsMHg2MCwweGMzLDB4MDAsMHhiMCwweGMwLDB4MGMsMHgxMCwweDAzLDB4ZWMsMHgwMCB9fSwKKyB7MTYsIDB4ZjYwMCwgMCwgezB4YzksMHgwMCwweDNjLDB4YzQsMHgwZiwweDExLDB4MDMsMHgxMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY2MTAsIDAsIHsweDQwLDB4MWQsMHg5YywweDAwLDB4ZWUsMHgwMSwweDNmLDB4YzAsMHg0ZiwweGUxLDB4MDMsMHhkNCwweDQwLDB4ZjUsMHgxNiwweDdhIH19LAorIHsxNiwgMHhmNjIwLCAwLCB7MHhjMCwweDRlLDB4ZjAsMHgwMywweGY0LDB4MTAsMHgzNywweDA1LDB4M2QsMHhjMCwweDBmLDB4YzAsMHgwYiwweGRjLDB4NDAsMHhmZiB9fSwKKyB7MTYsIDB4ZjYzMCwgMCwgezB4MDAsMHgzYiwweGMyLDB4MGUsMHhkMCwweDA3LDB4YmMsMHgwMiwweGVmLDB4MDAsMHgzYiwweGM2LDB4MGYsMHhkMCwweDAzLDB4ZDAgfX0sCisgezE2LCAweGY2NDAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZjQsMHgwMCwweGRkLDB4ODQsMHgzMywweDgwIH19LAorIHsxNiwgMHhmNjUwLCAwLCB7MHgwNCwweGYwLDB4MDMsMHg2YywweDAyLDB4Y2IsMHgwMiwweDdlLDB4YzAsMHgxZiwweGEwLDB4NTMsMHhlYywweDAwLDB4Y2IsMHgyMCB9fSwKKyB7MTYsIDB4ZjY2MCwgMCwgezB4MzQsMHg0MCwweDBjLDB4ZDAsMHgwYiwweDIwLDB4MTAsMHhlYiwweDAwLDB4MWUsMHhlMCwweDBmLDB4MzAsMHgwYiwweDJjLDB4MDAgfX0sCisgezE2LCAweGY2NzAsIDAsIHsweGMxLDB4MDAsMHgzMiwweGMwLDB4MGYsMHg5MSwweDAzLDB4ZWEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNjgwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwMCwweDg3LDB4MDAsMHgyMSwweDgwLDB4MDgsMHg2MCwweDAwLDB4MTQsMHgwMCwweDg1LDB4MDAsMHgyZCB9fSwKKyB7MTYsIDB4ZjY5MCwgMCwgezB4ODAsMHgwYiwweDcwLDB4NTIsMHhkNCwweDA0LDB4ODMsMHgyOCwweDI5LDB4YzAsMHgyOCwweDUwLDB4MDMsMHg1MCwweDAwLDB4ODcgfX0sCisgezE2LCAweGY2YTAsIDAsIHsweDQwLDB4MjUsMHhjOCwweDBmLDB4NjAsMHgwMiwweDA0LDB4MDAsMHhhNywweDAwLDB4M2QsMHhjOCwweDBiLDB4NTIsMHgwMiwweGQyIH19LAorIHsxNiwgMHhmNmIwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDhlLDB4MDAsMHg5NSwweDgwLDB4MjEsMHhlMCB9fSwKKyB7MTYsIDB4ZjZjMCwgMCwgezB4MDksMHgzOCwweDAyLDB4MWUsMHgxMSwweGE3LDB4ODAsMHgyZCwweGYwLDB4MGIsMHg3OCwweDUyLDB4Y2UsMHgwYSwweDk3LDB4OTUgfX0sCisgezE2LCAweGY2ZDAsIDAsIHsweDIxLDB4ZTAsMHgxOSwweDVjLDB4MDIsMHgwZSwweDAwLDB4YTcsMHg4MCwweDI5LDB4YzgsMHgwYiwweGY4LDB4MDIsMHgxZSwweDIwIH19LAorIHsxNiwgMHhmNmUwLCAwLCB7MHg4ZCwweDgwLDB4MjEsMHhlMCwweDBiLDB4NTgsMHgwMiwweGYwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjZmMCwgMCwgezB4NDgsMHgxNCwweGNjLDB4MDAsMHg4MiwweGUwLDB4YTAsMHhlOCwweDI5LDB4MzAsMHgwNiwweDBlLDB4NTAsMHhhYiwweDgwLDB4MmMgfX0sCisgezE2LCAweGY3MDAsIDAsIHsweGYwLDB4MGIsMHgzMSwweDQyLDB4Y2MsMHgwMCwweDkzLDB4MDAsMHgyOCwweGM0LDB4MDksMHg5OCwweDAyLDB4NGMsMHgyOCwweDgzIH19LAorIHsxNiwgMHhmNzEwLCAwLCB7MHgwMCwweDI0LDB4YzAsMHgwYSwweGIwLDB4MDIsMHgwZCwweDAwLDB4YTIsMHg1OCwweDI4LDB4YzAsMHgwYiwweDEwLDB4MDIsMHhkMiB9fSwKKyB7MTYsIDB4ZjcyMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOSwweDAwLDB4ZGUsMHg4MCwweDMxLDB4YTAgfX0sCisgezE2LCAweGY3MzAsIDAsIHsweDA5LDB4ZTIsMHgwYiwweDc4LDB4MDQsMHhlZSwweGE0LDB4MmYsMHhhNCwweDhiLDB4ZWMsMHgwMiwweGQ4LDB4MDAsMHhkYSwweDAwIH19LAorIHsxNiwgMHhmNzQwLCAwLCB7MHgyNywweDgxLDB4MGQsMHhlYywweDA2LDB4MWIsMHgwMCwweGVhLDB4MDQsMHgzZSwweDgwLDB4MGIsMHhlMCwweDAzLDB4M2IsMHgwMCB9fSwKKyB7MTYsIDB4Zjc1MCwgMCwgezB4Y2UsMHhjMCwweDIyLDB4ODAsMHgwZiwweGEwLDB4MDMsMHhmYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY3NjAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDgwLDB4ZjgsMHgxMCwweDNlLDB4MDUsMHgwZSwweDg4LDB4MDMsMHhlMCwweDA4LDB4OTgsMHg0MCwweDNlIH19LAorIHsxNiwgMHhmNzcwLCAwLCB7MHgwMCwweDBmLDB4ODQsMHg4MywweGUxLDB4NDAsMHhlOCwweDAwLDB4M2EsMHgwMiwweDBlLDB4ODAsMHg0MywweGUxLDB4NDAsMHhmOCB9fSwKKyB7MTYsIDB4Zjc4MCwgMCwgezB4MDAsMHgzNiwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZTAsMHgyMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfX0sCisgezE2LCAweGY3OTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4YzQsMHgwMCwweGU5LDB4MDAsMHgzZSwweDQwIH19LAorIHsxNiwgMHhmN2EwLCAwLCB7MHgwYywweDkwLDB4MDMsMHgwNCwweDIwLDB4ZTksMHg5MCwweDMyLDB4NjgsMHgwZSwweDk4LDB4MDMsMHhhNCwweDAwLDB4YzEsMHgwMCB9fSwKKyB7MTYsIDB4ZjdiMCwgMCwgezB4MzAsMHg0MCwweDBjLDB4OTQsMHg4MywweDI0LDB4MDgsMHhjOSwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMywweGE0LDB4MDAgfX0sCisgezE2LCAweGY3YzAsIDAsIHsweGM5LDB4MDAsMHgzMCwweDUwLDB4MGMsMHgxYSwweDAzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmN2QwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4NDAsMHgyZSwweDUwLDB4MjgsMHg5MCwweDBhLDB4MjQsMHgwOCwweDg5LDB4MDYsMHgxNiB9fSwKKyB7MTYsIDB4ZjdlMCwgMCwgezB4NjEsMHgwYiwweDljLDB4MDIsMHhlNCwweDIwLDB4YTksMHgwMCwweDM2LDB4NDAsMHgwZCwweDkwLDB4MDIsMHgyNywweDYwLDB4YTkgfX0sCisgezE2LCAweGY3ZjAsIDAsIHsweDAwLDB4MmUsMHg0MCwweDI4LDB4OTAsMHgxYSwweDI0LDB4MDAsMHg4OSwweDAwLDB4MzYsMHg0MCwweDI4LDB4OTgsMHgwMiwweDIwIH19LAorIHsxNiwgMHhmODAwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDJjLDB4MDAsMHhhOSwweDA4LDB4MmUsMHhjMiB9fSwKKyB7MTYsIDB4ZjgxMCwgMCwgezB4MDksMHgxMCwweDAwLDB4MjQsMHgwMCwweGE5LDB4MDAsMHgwNiwweDQwLDB4ODksMHg5NiwweDA2LDB4ZTYsMHgwMCwweDg5LDB4MDAgfX0sCisgezE2LCAweGY4MjAsIDAsIHsweDIyLDB4YzAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDAyLDB4ODksMHgwMCwweDI0LDB4NDAsMHgwOCwweDkwLDB4MDIsMHgwYywweDA2IH19LAorIHsxNiwgMHhmODMwLCAwLCB7MHg4MywweDAwLDB4MjIsMHg0MCwweDA4LDB4OTAsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjg0MCwgMCwgezB4MDgsMHgwNCwweDA1LDB4MDAsMHg4MSwweDQ0LDB4MmMsMHg1MCwweDA4LDB4MTQsMHgwMiwweDA1LDB4ODAsMHg4MSwweDIwLDB4NjQgfX0sCisgezE2LCAweGY4NTAsIDAsIHsweDcwLDB4MWIsMHgxNCwweDAyLDB4ZTQsMHg4MCwweGExLDB4MjAsMHg2NCwweDQwLDB4MTksMHgxMiwweDBhLDB4MDQsMHg4MCwweGExIH19LAorIHsxNiwgMHhmODYwLCAwLCB7MHgwMCwweDJjLDB4NTAsMHgxOCwweDE0LDB4MDIsMHg4NSwweDAwLDB4ODEsMHg0MCwweDI0LDB4NDAsMHg0MCwweDEwLDB4MDIsMHgwMiB9fSwKKyB7MTYsIDB4Zjg3MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4ZTAsMHgwMCwweDNjLDB4MDAgfX0sCisgezE2LCAweGY4ODAsIDAsIHsweDBkLDB4ODAsMHgwMiwweDAwLDB4MDAsMHhhYSwweDUwLDB4MzYsMHgwMCwweDBmLDB4ODAsMHgwMywweGUxLDB4NDAsMHhjOCwweDUyIH19LAorIHsxNiwgMHhmODkwLCAwLCB7MHg3MiwweDE0LDB4MGMsMHgwNSwweDE2LDB4MjAsMHgwOCwweGM4LDB4NTAsMHgzZSwweDAxLDB4MGMsMHg4MCwweDAzLDB4YTAsMHgwNCB9fSwKKyB7MTYsIDB4ZjhhMCwgMCwgezB4YzgsMHgwMCwweGIyLDB4MDAsMHgwYywweDgwLDB4MGIsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY4YjAsIDAsIHsweDk4LDB4MTksMHhmNSwweDAyLDB4ZmQsMHg0MCwweDNmLDB4ZDAsMHgwZiwweGQ0LDB4MjMsMHhmNCwweDQ0LDB4ZmQsMHgxNCwweDdmIH19LAorIHsxNiwgMHhmOGMwLCAwLCB7MHg1MCwweDBmLDB4ZDQsMHgwNywweGY0LDB4NDAsMHhmOSwweDEwLDB4M2YsMHg1MCwweDA3LDB4ZDEsMHgyMywweGY0LDB4NDAsMHhmOSB9fSwKKyB7MTYsIDB4ZjhkMCwgMCwgezB4NDAsMHgxZSwweDUwLDB4MDcsMHhkMCwweDBiLDB4NzUsMHgwMCwweGZkLDB4MDIsMHgzZSwweDUwLDB4MGYsMHhkNCwweDAzLDB4ZTYgfX0sCisgezE2LCAweGY4ZTAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZjYsMHgwMCwweGM5LDB4YTgsMHgzZSwweDcyIH19LAorIHsxNiwgMHhmOGYwLCAwLCB7MHgwZiwweDk4LDB4MDMsMHhlNiwweGMwLDB4ZmQsMHhhMCwweGIzLDB4NDAsMHgwZiwweGQwLDB4MDMsMHg3NywweDgwLDB4Y2QsMHg5MCB9fSwKKyB7MTYsIDB4ZjkwMCwgMCwgezB4N2YsMHg0MCwweDBmLDB4ZGEsMHhhMywweDE2LDB4OTAsMHhhOSwweGMwLDB4MzIsMHg2MCwweDRjLDB4YjEsMHgwMywweDI0LDB4MDAgfX0sCisgezE2LCAweGY5MTAsIDAsIHsweGMxLDB4MDAsMHgzMywweDZhLDB4MGIsMHhkYSwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOTIwLCAwLCB7MHgzOCwweDEwLDB4ZTMsMHg0MCwweDg4LDB4ZTAsMHgyZSwweDMwLDB4MGIsMHg4ZCwweDAyLDB4ZjMsMHg0MCwweGI4LDB4ZTgsMHg3NiB9fSwKKyB7MTYsIDB4ZjkzMCwgMCwgezB4MDAsMHg0ZiwweDgwLDB4MGEsMHgyMiwweDgwLDB4ODgsMHg5MCwweDZlLDB4MjgsMHg4ZiwweDhhLDB4MDMsMHg2MSwweDQ0LDB4ZjggfX0sCisgezE2LCAweGY5NDAsIDAsIHsweGUxLDB4M2UsMHgyYSwweDA4LDB4ODgsMHgwMywweDQyLDB4YTAsMHhkYywweGEwLDB4M2UsMHgxMCwweDBiLDB4ODUsMHgwYSwweDBlIH19LAorIHsxNiwgMHhmOTUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4YTAsMHg4NSwweDA4LDB4MmQsMHg0OCB9fSwKKyB7MTYsIDB4Zjk2MCwgMCwgezB4MWIsMHg1MiwweDgyLDB4ZDQsMHg4MCwweGIxLDB4MTQsMHgyMCwweDQwLDB4MGIsMHgxOCwweDAyLDB4MDUsMHg4MiwweDgxLDB4MDAgfX0sCisgezE2LCAweGY5NzAsIDAsIHsweDZjLDB4NDIsMHgwYiwweDEyLDB4ODIsMHgwNCwweDAwLDB4YTEsMHg2MCwweDIxLDB4NTAsMHgwYiwweDUwLDB4MDIsMHgxNCwweDkwIH19LAorIHsxNiwgMHhmOTgwLCAwLCB7MHg5NSwweDJjLDB4MjgsMHg0MCwweDBiLDB4MTAsMHgwMiwweDAyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjk5MCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDEsMHg4ZCwweDQ0LDB4MmYsMHg0MCwweDBiLDB4ZDQsMHgwMiwweGY0LDB4MDQsMHhiOSwweDA4LDB4MjIgfX0sCisgezE2LCAweGY5YTAsIDAsIHsweDQwLDB4MGEsMHg5MiwweDAyLDB4MmMsMHg4NCwweDg5LDB4MDAsMHgyZSwweDQwLDB4MGEsMHgxNCwweDAyLDB4NmMsMHg4MCwweGE5IH19LAorIHsxNiwgMHhmOWIwLCAwLCB7MHgwMSwweDJhLDB4NDAsMHgwOSwweDUwLDB4MGEsMHg1YywweDAyLDB4OGQsMHg2MCwweDJhLDB4NDAsMHgwYiwweDkwLDB4NDIsMHgwNiB9fSwKKyB7MTYsIDB4ZjljMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNiwweDYyLDB4YzksMHgwMiwweDNlLDB4NTQgfX0sCisgezE2LCAweGY5ZDAsIDAsIHsweDBmLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDQwLDB4MjIsMHg0NiwweDBiLDB4OTgsMHgwMywweDY3LDB4MjAsMHhjOSwweDAxIH19LAorIHsxNiwgMHhmOWUwLCAwLCB7MHgyZSwweDY5LDB4MGIsMHg5NCwweDBiLDB4MjUsMHgyMCwweGE5LDB4MDAsMHgyMiwweDQwLDB4MmQsMHg5MiwweDBhLDB4MjYsMHgyMiB9fSwKKyB7MTYsIDB4ZjlmMCwgMCwgezB4OTksMHgwMCwweDJhLDB4NDAsMHg4ZiwweDkwLDB4MDMsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZhMDAsIDAsIHsweDI4LDB4MDEsMHg4NiwweDAyLDB4ZjksMHgwMCwweDNlLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNiwweDgwLDB4ZjEsMHhhMCwweDNlIH19LAorIHsxNiwgMHhmYTEwLCAwLCB7MHg2MiwweDBmLDB4OTgsMHg4MywweGM2LDB4MjAsMHhmOSwweDAwLDB4M2UsMHg0OSwweDBmLDB4OTAsMHg4MywweGU0LDB4MDAsMHg3MSB9fSwKKyB7MTYsIDB4ZmEyMCwgMCwgezB4MDIsMHgzZSwweDQwLDB4MGUsMHg5MCwweDBiLDB4ZTYsMHg4MCwweGY5LDB4ODAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4Y2EgfX0sCisgezE2LCAweGZhMzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgxMCwweGM4LDB4MDAsMHgzZSwweDAwIH19LAorIHsxNiwgMHhmYTQwLCAwLCB7MHg0ZiwweDgwLDB4NDMsMHhiMCwweDAwLDB4YzgsMHg0MSwweDMyLDB4MDAsMHgwZiwweDgwLDB4MDMsMHgyMSwweDAyLDB4YzgsMHgwMiB9fSwKKyB7MTYsIDB4ZmE1MCwgMCwgezB4M2UsMHgxMCwweDRjLDB4ODAsMHgwMywweDAxLDB4MjAsMHhjOCwweDAwLDB4M2IsMHgwMCwweDBjLDB4YzAsMHgwMywweGIwLDB4MDAgfX0sCisgezE2LCAweGZhNjAsIDAsIHsweGNjLDB4MDQsMHgzMiwweDAwLDB4MGYsMHg4MCwweDAzLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYTcwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwMCwweDhhLDB4ODAsMHgyZSwweDgwLDB4MGIsMHhhMCwweDAyLDB4ZjgsMHgwNCwweDhlLDB4MDAsMHgyMyB9fSwKKyB7MTYsIDB4ZmE4MCwgMCwgezB4YjIsMHgwZSwweGUwLDB4ODIsMHhmOSwweDA0LDB4OGEsMHgwMCwweDJlLDB4ODEsMHgwYywweGUwLDB4MGEsMHgzYSwweDgwLDB4ZGEgfX0sCisgezE2LCAweGZhOTAsIDAsIHsweDAwLDB4MjIsMHhiNiwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDAsMHg4ZSwweDAwLDB4MmEsMHg4MCwweDBiLDB4NjAsMHgwYiwweDBhIH19LAorIHsxNiwgMHhmYWEwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDQ0LDB4MDIsMHg5MywweDgxLDB4MmMsMHhjMCB9fSwKKyB7MTYsIDB4ZmFiMCwgMCwgezB4NGIsMHgzMCwweDAyLDB4YzgsMHgwMCwweDgzLDB4Y2EsMHgyMCwweGUwLDB4MTksMHhiMCwweDA2LDB4OGMsMHgwMCwweDgxLDB4MDQgfX0sCisgezE2LCAweGZhYzAsIDAsIHsweDQ0LDB4NDAsMHgwOCwweDM0LDB4MDIsMHgwZCwweDAwLDB4ODMsMHgwMCwweDJhLDB4MDAsMHgwOCwweDAwLDB4MGEsMHg4MCwweDQwIH19LAorIHsxNiwgMHhmYWQwLCAwLCB7MHg4OCwweDAwLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweDRiLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmFlMCwgMCwgezB4YTAsMHgwMSwweDA0LDB4MDIsMHg5NywweDA4LDB4MmQsMHhjMCwweDBiLDB4NjAsMHgwNiwweGNhLDB4MDAsMHg4MywweDA5LDB4MjEgfX0sCisgezE2LCAweGZhZjAsIDAsIHsweGMwLDB4MGEsMHg3MCwweDAyLDB4ZGMsMHgwMCwweDg1LDB4MzEsMHgyZCwweDY4LDB4MDksMHgzMCwweDAyLDB4MWMsMHgxNCwweDkzIH19LAorIHsxNiwgMHhmYjAwLCAwLCB7MHgyMCwweDIwLDB4YzAsMHgwOCwweGYwLDB4NDIsMHg5YywweDAyLDB4OGYsMHgwMCwweDI5LDB4NDAsMHgwMywweDcwLDB4MTIsMHgyOCB9fSwKKyB7MTYsIDB4ZmIxMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxNiwweDAwLDB4OTYsMHg4NCwweDNkLDB4YTAgfX0sCisgezE2LCAweGZiMjAsIDAsIHsweDBmLDB4NzgsMHgwMywweDlhLDB4MDIsMHg4NywweDgwLDB4YjEsMHhlMCwweDBiLDB4NzgsMHgwMywweGI2LDB4MDAsMHhjNSwweGEwIH19LAorIHsxNiwgMHhmYjMwLCAwLCB7MHgzNSwweDYxLDB4MGMsMHg3OCwweDEzLDB4MWUsMHgwMiwweGM3LDB4ODAsMHgyOSwweDAwLDB4MGMsMHg0OCwweDAzLDB4OTAsMHgwMCB9fSwKKyB7MTYsIDB4ZmI0MCwgMCwgezB4YzQsMHg4MCwweDMxLDB4NjAsMHgwZiwweDU4LDB4MDMsMHg2YSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZiNTAsIDAsIHsweDA4LDB4MWQsMHhhNCwweDAwLDB4ZWEsMHgwMCwweDNlLDB4ODAsMHgwZiwweGEwLDB4MDMsMHhlOCwweDA4LDB4ZmIsMHgwMCwweDNlIH19LAorIHsxNiwgMHhmYjYwLCAwLCB7MHg4MCwweDBmLDB4OTAsMHgxMywweGU0LDB4MDgsMHhmOSwweDAwLDB4M2MsMHg1MCwweDJlLDB4ZjAsMHgwMywweGU4LDB4MDgsMHhmYiB9fSwKKyB7MTYsIDB4ZmI3MCwgMCwgezB4NDAsMHgzZSwweGMwLDB4MGIsMHgzMCwweDEzLDB4NmMsMHgwMCwweGZiLDB4MDAsMHgzZSwweDQwLDB4MGYsMHgzMCwweDAzLDB4YzIgfX0sCisgezE2LCAweGZiODAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZDYsMHgwMCwweGNkLDB4ODAsMHgzMywweGUwIH19LAorIHsxNiwgMHhmYjkwLCAwLCB7MHgwYywweGY4LDB4MDMsMHhmYSwweDAwLDB4ZmQsMHg4MCwweDNmLDB4YTAsMHgwZCwweGY4LDB4MDMsMHhmYSwweDQwLDB4Y2QsMHhkMCB9fSwKKyB7MTYsIDB4ZmJhMCwgMCwgezB4NzcsMHg3ZSwweDBjLDB4ZTgsMHg0MywweDFlLDB4MDAsMHhjZiwweGQ4LDB4M2YsMHhlMCwweDBjLDB4YzgsMHgwMywweDNhLDB4YzQgfX0sCisgezE2LCAweGZiYjAsIDAsIHsweGNjLDB4ODAsMHgzMywweGUwLDB4MGMsMHhmOCwweDAzLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYmMwLCAwLCB7MHhhOCwweDExLDB4OTQsMHgwMiwweDhkLDB4MDAsMHgyMSwweGMwLDB4MDgsMHg2MCwweDAzLDB4ZDgsMHgxMCwweDM1LDB4MjAsMHg4YiB9fSwKKyB7MTYsIDB4ZmJkMCwgMCwgezB4ZDQsMHgwZCwweDY0LDB4MDMsMHhkOCwweGMwLDB4ODUsMHgwMCwweDJmLDB4NGUsMHgwNywweDY0LDB4MDIsMHg5YywweDAyLDB4ZDcgfX0sCisgezE2LCAweGZiZTAsIDAsIHsweDMwLDB4MmYsMHgwNCwweDBkLDB4ZjEsMHgwYiwweDU0LDB4NDAsMHhhZiwweDAwLDB4MzUsMHg0MCwweDA4LDB4NzAsMHgwMiwweDJhIH19LAorIHsxNiwgMHhmYmYwLCAwLCB7MHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk0LDB4NDAsMHg4NCwweDE4LDB4MjEsMHg4MCB9fSwKKyB7MTYsIDB4ZmMwMCwgMCwgezB4MDgsMHg3MCwweDAyLDB4ZGEsMHgyMCwweGI1LDB4MDAsMHgwOSwweDAwLDB4MDgsMHg3MCwweDAyLDB4ZDQsMHgwNCwweDg1LDB4MDAgfX0sCisgezE2LCAweGZjMTAsIDAsIHsweDZkLDB4NGMsMHg4OSwweDYwLDB4MDIsMHg1YywweDQwLDB4OTcsMHgwMCwweDZkLDB4YzAsMHgwOSwweDQwLDB4MDIsMHg1OCwweDgwIH19LAorIHsxNiwgMHhmYzIwLCAwLCB7MHg4NCwweDg4LDB4MjUsMHg0MCwweDA4LDB4ZDAsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmMzMCwgMCwgezB4MjAsMHgxNCwweGM2LDB4NDgsMHg4MCwweDAwLDB4MjAsMHg4MCwweDA4LDB4YWMsMHgwMiwweGE4LDB4MDAsMHhiMSwweDAwLDB4YTggfX0sCisgezE2LCAweGZjNDAsIDAsIHsweDg4LDB4MDksMHgyMiwweDAyLDB4ODYsMHg0MiwweDgxLDB4MDAsMHg2YywweDUyLDB4MGIsMHgyMCwweDAyLDB4YzcsMHg1MiwweDgzIH19LAorIHsxNiwgMHhmYzUwLCAwLCB7MHgwMCwweDJjLDB4MDAsMHgwOCwweDM0LDB4ODIsMHg2NywweDAwLDB4YTMsMHg4MCwweDIwLDB4NDAsMHgwOCwweDMwLDB4MDIsMHgwOCB9fSwKKyB7MTYsIDB4ZmM2MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhMywweDAwLDB4Y2IsMHhjMCwweGIyLDB4NDAgfX0sCisgezE2LCAweGZjNzAsIDAsIHsweDJjLDB4OTAsMHg4MiwweGU2LDB4MDAsMHhiYiwweDgwLDB4YmUsMHg3OCwweDA4LDB4OGUsMHgwMiwweGVlLDB4MDAsMHg4ZCwweDAwIH19LAorIHsxNiwgMHhmYzgwLCAwLCB7MHgyNywweDYwLDB4MGQsMHg5MCwweDBhLDB4NmYsMHgwMCwweDlmLDB4MDIsMHgyZSwweDAwLDB4MDksMHhiNCwweDAzLDB4NjcsMHg4MCB9fSwKKyB7MTYsIDB4ZmM5MCwgMCwgezB4Y2EsMHg0MCwweGU0LDB4YzAsMHgwYywweDMwLDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZjYTAsIDAsIHsweDgwLDB4MDAsMHhlMCwweDgwLDB4ZmIsMHgyMiwweDNlLDB4NDAsMHgwZiwweDgwLDB4MTMsMHhlNCwweDAwLDB4ZmIsMHg4MCwweDNlIH19LAorIHsxNiwgMHhmY2IwLCAwLCB7MHg0MCwweDBmLDB4OTAsMHgwMywweGU1LDB4MDAsMHhmOSwweDAwLDB4M2UsMHg0MCwweDBlLDB4NzAsMHgyMywweGFjLDB4MjAsMHhmYiB9fSwKKyB7MTYsIDB4ZmNjMCwgMCwgezB4MDAsMHgzZSwweGMwLDB4OGYsMHg4MCwweDAzLDB4ZTksMHgyMCwweGY5LDB4MDgsMHgzZSwweDQwLDB4MGYsMHhiMCwweDEzLDB4ZTAgfX0sCisgezE2LCAweGZjZDAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZjAsMHgwMCwweGM2LDB4MDAsMHgzMiwweDAwIH19LAorIHsxNiwgMHhmY2UwLCAwLCB7MHgwZiwweGQxLDB4ODMsMHgzNCwweDQwLDB4Y2YsMHgwMCwweDNkLDB4NDAsMHgwYywweGQwLDB4MDMsMHhkZSwweDUwLDB4MGQsMHgwMCB9fSwKKyB7MTYsIDB4ZmNmMCwgMCwgezB4NzMsMHg0MCwweDBjLDB4ZDEsMHgwMywweDdjLDB4NDAsMHg4NywweDAyLDB4YjMsMHgwMCwweDBkLDB4ZjQsMHgwMywweDI0LDB4MDAgfX0sCisgezE2LCAweGZkMDAsIDAsIHsweGNlLDB4MjAsMHgzMiwweDQwLDB4MGMsMHhkMCwweDAzLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmZDEwLCAwLCB7MHg4MSwweDA0LDB4NjEsMHgyMiwweDhhLDB4MDAsMHgyMiwweDAwLDB4MGIsMHg4MCwweDQwLDB4MjUsMHgwMCwweDg5LDB4YzMsMHgyZSB9fSwKKyB7MTYsIDB4ZmQyMCwgMCwgezB4MjAsMHgwYSwweDk4LDB4MDMsMHhhMSwweDAwLDB4ODksMHgwMCwweDM2LDB4NDAsMHg4OCwweDk0LDB4MDIsMHgwZiwweDAxLDB4YWIgfX0sCisgezE2LCAweGZkMzAsIDAsIHsweDAwLDB4MzIsMHhjMCwweDA4LDB4MDQsMHgwYSwweDI5LDB4MDAsMHhhOSwweDAyLDB4YTIsMHg0MCwweDBkLDB4YjAsMHgwYSwweDIwIH19LAorIHsxNiwgMHhmZDQwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDAwLDB4MDAsMHg4OSwweDAwLDB4MjIsMHg2MSB9fSwKKyB7MTYsIDB4ZmQ1MCwgMCwgezB4MGIsMHg5MCwweDAyLDB4MjUsMHgwMSwweDliLDB4ODgsMHgyZSwweDYwLDB4MDgsMHg4OCwweDAyLDB4ZTgsMHgwMCwweGIxLDB4MDIgfX0sCisgezE2LCAweGZkNjAsIDAsIHsweDI0LDB4NDAsMHgxOCwweDkwLDB4MDIsMHgyYywweDAwLDB4YWIsMHgwMSwweDIwLDB4YzEsMHgwOCwweGI0LDB4NDIsMHgyYywweDAwIH19LAorIHsxNiwgMHhmZDcwLCAwLCB7MHg4MiwweDAwLDB4MjIsMHhjMCwweDA4LDB4YjAsMHgwMiwweDIwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmQ4MCwgMCwgezB4MDgsMHgwNCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MjAsMHg0MCwweDBiLDB4MDAsMHgwYSwweDA0LDB4NDYsMHg4MywweDAxLDB4MmMgfX0sCisgezE2LCAweGZkOTAsIDAsIHsweDQwLDB4MWEsMHgwMCwweDA2LDB4ODAsMHgwMCwweDgxLDB4MDAsMHgyNCwweDQwLDB4MDgsMHgyMCwweDBhLDB4MGMsMHgwMSwweGEzIH19LAorIHsxNiwgMHhmZGEwLCAwLCB7MHgwMCwweDI0LDB4MDAsMHgwOCwweDgwLDB4MDIsMHgwMCwweDAwLDB4YTEsMHgwMCwweDIwLDB4NDAsMHgwOSwweDMwLDB4MDIsMHgwMiB9fSwKKyB7MTYsIDB4ZmRiMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2MCwweDAyLDB4YzgsMHgwMCwweDIyLDB4MDAgfX0sCisgezE2LCAweGZkYzAsIDAsIHsweDBmLDB4OTAsMHgwMiwweDI1LDB4MDAsMHhkYSwweDAwLDB4M2UsMHg0MCwweDBjLDB4OTAsMHgwMiwweGNjLDB4MDAsMHhmZCwweDAwIH19LAorIHsxNiwgMHhmZGQwLCAwLCB7MHgzNywweDQwLDB4MGMsMHgxMCwweDEzLDB4MmMsMHgwMiwweGFmLDB4MDAsMHgzMiwweGMwLDB4MGQsMHhiMCwweDAzLDB4MmMsMHgwMCB9fSwKKyB7MTYsIDB4ZmRlMCwgMCwgezB4Y2EsMHgwMCwweDMyLDB4NDAsMHg0YywweDkwLDB4MGIsMHgwMCwweDAxLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZkZjAsIDAsIHsweGEwLDB4MWQsMHhmMCwweDAwLDB4ZmMsMHgwMCwweDNmLDB4MDAsMHgwNywweGMwLDB4MDMsMHhmNCwweDFjLDB4ZjQsMHgwMCwweDNmIH19LAorIHsxNiwgMHhmZTAwLCAwLCB7MHgwMCwweDFmLDB4YzAsMHgyMywweGIwLDB4MDIsMHg5ZCwweDAxLDB4M2YsMHg0MCwweDhmLDB4YzAsMHgwNywweGZjLDB4MDIsMHhmZiB9fSwKKyB7MTYsIDB4ZmUxMCwgMCwgezB4MDAsMHg3YiwweDAwLDB4MGYsMHhjMCwweDAzLDB4ZjAsMHgwMCwweGZkLDB4MDAsMHgzZiwweDQwLDB4MGYsMHg3MCwweDAzLDB4ZTggfX0sCisgezE2LCAweGZlMjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmEsMHgwMCwweGNiLDB4ODAsMHgzZiwweDI0IH19LAorIHsxNiwgMHhmZTMwLCAwLCB7MHgwYSwweGMxLDB4MDMsMHhmYywweDI0LDB4Y2QsMHgyMCwweDM3LDB4MGEsMHgwYywweGMyLDB4ODMsMHgzMCwweDgwLDB4ZGMsMHgwMiB9fSwKKyB7MTYsIDB4ZmU0MCwgMCwgezB4M2YsMHhjYywweDBkLDB4ZDksMHgwMywweDNjLDB4NTgsMHhkZiwweDMwLDB4MzMsMHhjOCwweDBkLDB4ZjQsMHgyMywweDNjLDB4NDAgfX0sCisgezE2LCAweGZlNTAsIDAsIHsweGZmLDB4MDAsMHgzZiwweGM1LDB4NGYsMHhmMCwweDIzLDB4YjAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmZTYwLCAwLCB7MHg4MCwweDAwLDB4ZWMsMHgwMiwweDBiLDB4ODIsMHgyZSwweDA4LDB4MGQsMHhiNywweDAyLDB4ZmQsMHgwMCwweDgzLDB4MTgsMHgwYSB9fSwKKyB7MTYsIDB4ZmU3MCwgMCwgezB4NTgsMHgwYSwweDg0LDB4YTIsMHhhNSwweGEwLDB4ODksMHgzMCwweDIyLDB4NTUsMHgwOCwweDEyLDB4NjIsMHhiZCwweDkwLDB4OGYgfX0sCisgezE2LCAweGZlODAsIDAsIHsweDYyLDB4MjEsMHhkNiwweDQ4LDB4ZjMsMHgwMiwweDNjLDB4YzUsMHhiZiwweDQ4LDB4MmYsMHhkOCwweDRiLDB4YjcsMHgwMiwweGUwIH19LAorIHsxNiwgMHhmZTkwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGVjLDB4MDAsMHg4MywweDAwLDB4MmUsMHg4OSB9fSwKKyB7MTYsIDB4ZmVhMCwgMCwgezB4MjgsMHgwMCwweDAyLDB4ZWMsMHhhMCwweDg5LDB4MjIsMHgyOCwweDgyLDB4MDgsMHgxMiwweDAyLDB4MjgsMHg0MCwweDlhLDB4MDggfX0sCisgezE2LCAweGZlYjAsIDAsIHsweDI4LDB4YzgsMHg4OCwweGIyLDB4MGEsMHgwZCwweDEwLDB4OTMsMHgxMCwweGEwLDB4YzgsMHgyOCwweDMwLDB4MDIsMHg0YywweDAwIH19LAorIHsxNiwgMHhmZWMwLCAwLCB7MHhiMywweDYwLDB4MmMsMHhjNCwweDBiLDB4MzAsMHhjMiwweGUyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmVkMCwgMCwgezB4YzAsMHgxNSwweGFjLDB4NDAsMHg4YiwweDAwLDB4MmUsMHg4MCwweDA4LDB4YjEsMHgwMiwweGVjLDB4MDIsMHg4YiwweDAwLDB4MjAgfX0sCisgezE2LCAweGZlZTAsIDAsIHsweGQwLDB4MGEsMHg5MCwweDAyLDB4YWMsMHgwMCwweDBiLDB4MDEsMHgyNiwweDQwLDB4MDgsMHg5NCwweDAyLDB4OGMsMHgwMCwweDhiIH19LAorIHsxNiwgMHhmZWYwLCAwLCB7MHgwMCwweDIyLDB4YzAsMHgwOCwweGIwLDB4MDIsMHgyYywweDEwLDB4YmIsMHgwMCwweDJlLDB4YzAsMHgwYiwweGIwLDB4MDIsMHhmMCB9fSwKKyB7MTYsIDB4ZmYwMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTQsMHg4YywweDIwLDB4Y2IsMHgwMiwweDNlLDB4MmQgfX0sCisgezE2LCAweGZmMTAsIDAsIHsweDA4LDB4ODAsMHgwMywweGVjLDB4MDgsMHhjOSwweDgwLDB4MWUsMHgwNCwweDBjLDB4YjAsMHgwMywweDAxLDB4MDgsMHg1MCwweDE4IH19LAorIHsxNiwgMHhmZjIwLCAwLCB7MHgzZSwweDQwLDB4MGMsMHgwNCwweDAzLDB4MmMsMHgwMCwweGRiLDB4MDEsMHgzMiwweGMwLDB4MGMsMHhiMCwweDBiLDB4MmMsMHgwOCB9fSwKKyB7MTYsIDB4ZmYzMCwgMCwgezB4YmIsMHgwMCwweDNlLDB4YzAsMHgwZiwweGIwLDB4MDMsMHg4MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZmNDAsIDAsIHsweGUxLDB4MDAsMHhiYywweDAwLDB4ZmYsMHgwMCwweDNmLDB4NjAsMHgwZiwweGMwLDB4MjMsMHhlYywweDAwLDB4ZmYsMHhjMCwweGJlIH19LAorIHsxNiwgMHhmZjUwLCAwLCB7MHg2MCwweDhmLDB4YzksMHgyMywweGY2LDB4NTAsMHhlZCwweDgwLDB4YjgsMHg1MCwweGFmLDB4YzAsMHgwMywweGZjLDB4MDAsMHhmZiB9fSwKKyB7MTYsIDB4ZmY2MCwgMCwgezB4MDAsMHgzZiwweGMxLDB4MGUsMHhiMCwweDAzLDB4ZmMsMHgwNCwweGZmLDB4MDIsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZjggfX0sCisgezE2LCAweGZmNzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMCwweGViLDB4MDAsMHgzMiwweDgwIH19LAorIHsxNiwgMHhmZjgwLCAwLCB7MHgwZCwweDkwLDB4MDMsMHgyYywweDAwLDB4ODksMHgwMCwweDNlLDB4OTgsMHg4YywweDMwLDB4MDMsMHg2MSwweDgwLDB4ZmEsMHg0MCB9fSwKKyB7MTYsIDB4ZmY5MCwgMCwgezB4M2UsMHg0MCwweDJjLDB4YTUsMHgwMywweDJjLDB4MDAsMHhmYiwweDAxLDB4M2MsMHhjMCwweDJjLDB4MzAsMHgwMywweDJjLDB4MDAgfX0sCisgezE2LCAweGZmYTAsIDAsIHsweGRiLDB4MDIsMHgzMiwweGMwLDB4MGYsMHhiMCwweDAzLDB4ZDAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmZmIwLCAwLCB7MHhjYSwweDAwLDB4MmUsMHg4MCwweDhiLDB4ODIsMHhhMCwweGMwLDB4OGMsMHg5MCwweDAyLDB4M2MsMHgwMCwweDhiLDB4ZjAsMHgyMiB9fSwKKyB7MTYsIDB4ZmZjMCwgMCwgezB4YzIsMHgwZCwweDgwLDB4MDIsMHgyNywweDAwLDB4OGIsMHgxMCwweDIyLDB4NDAsMHgwOCwweDgwLDB4MjIsMHgzYywweDAwLDB4YmYgfX0sCisgezE2LCAweGZmZDAsIDAsIHsweDAwLDB4MmYsMHhjMCwweDA4LDB4ZjAsMHgwMiwweDNjLDB4MDAsMHhiZiwweDAxLDB4YTMsMHhjMCwweDBiLDB4ZjAsMHgxMiwweGYyIH19LAorIHsxNiwgMHhmZmUwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRjLDB4MDAsMHhiMywweDFjLDB4MjAsMHg0MCB9fSwKKyB7MTYsIDB4ZmZmMCwgMCwgezB4MDgsMHgwMCwweDA2LDB4MmMsMHgwMCwweDliLDB4MDAsMHgyMCwweGQwLDB4MDgsMHgyMCwweDAyLDB4NGMsMHgwMCwweGEzLDB4MDAgfX0sCisgezE2LCAweDgwMTAsIDAsIHsweDJjLDB4YzAsMHgwOCwweDEwLDB4MGEsMHgwYywweDAwLDB4YmIsMHgwMCwweDI4LDB4YzAsMHgwOSwweDMwLDB4MDIsMHgwYywweDAwIH19LAorIHsxNiwgMHg4MDIwLCAwLCB7MHhiMywweDAwLDB4MjAsMHhjMCwweDBiLDB4MzAsMHgwMiwweGY4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODAzMCwgMCwgezB4MjIsMHgxMSwweDFlLDB4MDAsMHg5NywweGEwLDB4MjEsMHhhMCwweDA4LDB4NzksMHgwMiwweDFlLDB4MDAsMHg5NywweDkwLDB4MjEgfX0sCisgezE2LCAweDgwNDAsIDAsIHsweDYwLDB4MDksMHhlOCwweDIyLDB4M2UsMHgwMCwweGFmLDB4ODQsMHgyMSwweGU0LDB4NDgsMHg1YywweDAyLDB4MWUsMHgwMCwweGI3IH19LAorIHsxNiwgMHg4MDUwLCAwLCB7MHg5MCwweDJkLDB4ZTAsMHgwOSwweDc4LDB4MDAsMHgxZSwweDA5LDB4YjMsMHg5MCwweDIxLDB4ZTQsMHgwYiwweDc4LDB4MDIsMHhkOCB9fSwKKyB7MTYsIDB4ODA2MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MTgsMHgyYywweDQwLDB4YjMsMHhiMCwweDMyLDB4NDAgfX0sCisgezE2LCAweDgwNzAsIDAsIHsweDJjLDB4ODEsMHgxMywweDBjLDB4NDIsMHhkMSwweDAwLDB4YjAsMHhjMCwweDhjLDB4MzAsMHgwMywweDQ4LDB4MjAsMHhlMywweDAxIH19LAorIHsxNiwgMHg4MDgwLCAwLCB7MHgzYywweGMwLDB4MGMsMHgzMCwweDAzLDB4MGMsMHgwMCwweGYzLDB4MTAsMHgzYywweGMwLDB4Y2QsMHgzMiwweDBiLDB4MGMsMHg0MCB9fSwKKyB7MTYsIDB4ODA5MCwgMCwgezB4ZDMsMHgwMCwweDMwLDB4YzAsMHgwZiwweDMwLDB4MDMsMHhkMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgwYTAsIDAsIHsweDQwLDB4MTUsMHhiYywweDAwLDB4ZTcsMHgwMCwweDNmLDB4ODAsMHgwYiwweGYxLDB4MDMsMHhmZCwweDAwLDB4NmQsMHgwMCwweDMyIH19LAorIHsxNiwgMHg4MGIwLCAwLCB7MHg0MCwweDFmLDB4NzAsMHgwNywweGQ4LDB4NDEsMHhjMywweDEwLDB4M2IsMHhjMCwweDBmLDB4ZDEsMHgwMywweGZkLDB4MDAsMHhmZiB9fSwKKyB7MTYsIDB4ODBjMCwgMCwgezB4MTAsMHgzZiwweGMwLDB4MGUsMHhmMCwweDAzLDB4ZWMsMHgxMCwweGZmLDB4MDgsMHgzZiwweGMzLDB4MGYsMHhmMCwweDAzLDB4ZDAgfX0sCisgezE2LCAweDgwZDAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDE1LDB4ZWMsMHgwNCwweGZiLDB4MDIsMHgzZSwweDQwIH19LAorIHsxNiwgMHg4MGUwLCAwLCB7MHgwYiwweGEwLDB4MDMsMHhhYywweDAwLDB4ZGIsMHgwMCwweDM2LDB4ODAsMHgwZCwweGIwLDB4MDMsMHhhYywweDAwLDB4ZTgsMHgwMCB9fSwKKyB7MTYsIDB4ODBmMCwgMCwgezB4MzYsMHhjMSwweDJlLDB4OTAsMHgwMywweDJjLDB4MDAsMHhjYiwweGEwLDB4MzYsMHhkYywweDBmLDB4YjAsMHgwMywweDJkLDB4NjggfX0sCisgezE2LCAweDgxMDAsIDAsIHsweGZiLDB4YTAsMHg5MiwweGMyLDB4MGMsMHhiMSwweDAzLDB4ZWEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MTEwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwOCwweDM3LDB4MDAsMHgyZCwweGMwLDB4MGIsMHhlMCwweDAyLDB4MWQsMHg4MCwweGI3LDB4MDQsMHgyMyB9fSwKKyB7MTYsIDB4ODEyMCwgMCwgezB4MDAsMHgwYSwweDQwLDB4MDIsMHgxYywweDE4LDB4ODQsMHgwMCwweDI1LDB4YzAsMHgxOCwweDUwLDB4MzIsMHgwZCwweDgwLDB4YTMgfX0sCisgezE2LCAweDgxMzAsIDAsIHsweDMwLDB4MjEsMHhjYywweDBiLDB4MzQsMHg4MiwweDFjLDB4MTAsMHhiNywweDMwLDB4MjEsMHhjOCwweDA4LDB4NzAsMHgwMiwweGQyIH19LAorIHsxNiwgMHg4MTQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4MjAsMHhiNywweDgwLDB4MmQsMHg2MCB9fSwKKyB7MTYsIDB4ODE1MCwgMCwgezB4MGIsMHhmYywweDIyLDB4OWUsMHgwMCwweDhkLDB4ODAsMHgyNSwweGEwLDB4MDgsMHhmOCwweDIyLDB4OTIsMHgwMCwweGI0LDB4ODAgfX0sCisgezE2LCAweDgxNjAsIDAsIHsweDI1LDB4ZTAsMHgwOCwweGY4LDB4MDIsMHgxZSwweDAwLDB4ODcsMHhiMCwweDIxLDB4ZTAsMHgwOSwweDdhLDB4MDIsMHgxZSwweDE4IH19LAorIHsxNiwgMHg4MTcwLCAwLCB7MHhiMywweDgwLDB4MjEsMHhlMCwweDA4LDB4NzgsMHgwMiwweGYwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODE4MCwgMCwgezB4NDgsMHgwNCwweGM1LDB4MjAsMHhiMywweDAxLDB4MmMsMHhkOCwweDBiLDB4M2MsMHgwMiwweDJjLDB4MDgsMHhiOSwweDAwLDB4MjAgfX0sCisgezE2LCAweDgxOTAsIDAsIHsweDAzLDB4MGEsMHgwMCwweDgyLDB4MjIsMHgwOCwweDkwLDB4MGQsMHgyNiwweGU0LDB4MDgsMHgxMCwweDAyLDB4MGMsMHgwMCwweGEzIH19LAorIHsxNiwgMHg4MWEwLCAwLCB7MHgwMCwweDIyLDB4YzAsMHgwYiwweDMwLDB4MDIsMHg2YywweDAwLDB4YjMsMHgwMCwweDIyLDB4YzAsMHgyOCwweDMwLDB4MDIsMHhjMiB9fSwKKyB7MTYsIDB4ODFiMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MDUsMHg5OSwweDAwLDB4ZmEsMHgwMiwweDNmLDB4OTAgfX0sCisgezE2LCAweDgxYzAsIDAsIHsweDBmLDB4ZWMsMHgyMywweGE4LDB4MDAsMHhkYSwweDAwLDB4MzUsMHg4MCwweDBkLDB4ZTAsMHgwMiwweGJhLDB4MDIsMHhmZSwweGMyIH19LAorIHsxNiwgMHg4MWQwLCAwLCB7MHhiNiwweGEwLDB4MGUsMHhlNCwweDBiLDB4MjgsMHgwMCwweGNhLDB4MDAsMHhiMiwweDgwLDB4MGYsMHhhMCwweDBiLDB4MjgsMHgwMCB9fSwKKyB7MTYsIDB4ODFlMCwgMCwgezB4ZmEsMHgwMCwweDMyLDB4ODAsMHgwYywweGEwLDB4MDMsMHhmYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgxZjAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlLDB4MDAsMHgwZiwweDgyLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHgwMCwweDNlIH19LAorIHsxNiwgMHg4MjAwLCAwLCB7MHgwMCwweDBmLDB4ODEsMHgwMywweGUwLDB4NDAsMHhlOCwweDEwLDB4M2EsMHgwMCwweDRmLDB4ODQsMHg4MywweGUwLDB4MDAsMHhmOCB9fSwKKyB7MTYsIDB4ODIxMCwgMCwgezB4MDAsMHgzYSwweDAwLDB4MGYsMHgwMCwweDAzLDB4YTAsMHgwMCwweGY4LDB4MDAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfX0sCisgezE2LCAweDgyMjAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTUsMHgwMCwweGM5LDB4MDIsMHgzZSwweDQwIH19LAorIHsxNiwgMHg4MjMwLCAwLCB7MHgwZiwweDkwLDB4MjMsMHgyNCwweDAwLDB4YzksMHgwMCwweDMyLDB4NjgsMHgyZiwweDEwLDB4MDMsMHgyNCwweDAwLDB4ZTksMHgxNCB9fSwKKyB7MTYsIDB4ODI0MCwgMCwgezB4MzIsMHg0MCwweDBkLDB4OTAsMHgwYiwweDA0LDB4MDAsMHhkOSwweDAwLDB4MWUsMHg0MCwweDBjLDB4OTAsMHgwMywweDI0LDB4MDAgfX0sCisgezE2LCAweDgyNTAsIDAsIHsweGM5LDB4MDAsMHgzNiwweDQwLDB4MGMsMHg5MCwweDAzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4MjYwLCAwLCB7MHg4MCwweDE0LDB4NjQsMHgwMCwweDg5LDB4MDEsMHgyZSwweDQwLDB4NGIsMHg5MCwweDEyLDB4MjQsMHgwMCwweDg5LDB4YzIsMHhhMiB9fSwKKyB7MTYsIDB4ODI3MCwgMCwgezB4NjAsMHg4OCwweDkwLDB4MDMsMHg2NCwweDAwLDB4ODksMHhjMSwweGEyLDB4NDAsMHg0OCwweDE2LDB4MDMsMHg2NCwweDAyLDB4ODkgfX0sCisgezE2LCAweDgyODAsIDAsIHsweDAwLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgyMiwweDI0LDB4MDAsMHg4OSwweDAwLDB4M2UsMHg0MCwweDI4LDB4OTAsMHgwYSwweDIwIH19LAorIHsxNiwgMHg4MjkwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNCwweDI0LDB4MDAsMHg4OSwweDAyLDB4MmUsMHg0MCB9fSwKKyB7MTYsIDB4ODJhMCwgMCwgezB4MGIsMHgxMCwweDAyLDB4MjQsMHgwMCwweDg5LDB4MTAsMHgyMiwweDQwLDB4ODksMHg5MCwweDAyLDB4YWMsMHgwMCwweGExLDB4MDggfX0sCisgezE2LCAweDgyYjAsIDAsIHsweDIyLDB4NDAsMHgwOSwweDk4LDB4MDIsMHhhNCwweDAwLDB4ODksMHgwMCwweDJhLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDAwIH19LAorIHsxNiwgMHg4MmMwLCAwLCB7MHg4OSwweDAwLDB4MjYsMHg0MCwweDA4LDB4MTAsMHgwMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODJkMCwgMCwgezB4MDgsMHgwMCwweDI0LDB4MDAsMHg4MSwweDAwLDB4MmMsMHg0MSwweDBiLDB4MTIsMHgwMiwweDA0LDB4ODEsMHg4MSwweDIwLDB4MjIgfX0sCisgezE2LCAweDgyZTAsIDAsIHsweDQ4LDB4MDgsMHgxMiwweDAyLDB4YzQsMHg4MSwweDgxLDB4MjQsMHgwMiwweDQ4LDB4MGEsMHg5MCwweDAyLDB4ODQsMHhhMCwweDgxIH19LAorIHsxNiwgMHg4MmYwLCAwLCB7MHgyOCwweDZjLDB4NGEsMHgwOCwweDEyLDB4ZDIsMHgwNCwweGExLDB4ODEsMHgyOCwweDJjLDB4NGEsMHgwOCwweDEyLDB4ODIsMHgwMiB9fSwKKyB7MTYsIDB4ODMwMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MDgsMHg2MSwweDQwLDB4YzgsMHgwMCwweDJlLDB4MTQgfX0sCisgezE2LCAweDgzMTAsIDAsIHsweDBmLDB4ODUsMHgwYiwweDIxLDB4NDIsMHhjYSwweDUwLDB4MjIsMHgxNCwweDBkLDB4ODUsMHg0MywweGExLDB4NDAsMHhlOCwweDUwIH19LAorIHsxNiwgMHg4MzIwLCAwLCB7MHgzMCwweDAwLDB4MGQsMHg4NSwweDAyLDB4YTEsMHhjMCwweGQ4LDB4MjAsMHgzYSwweDA4LDB4MmMsMHg4MiwweDBiLDB4MjAsMHg4MiB9fSwKKyB7MTYsIDB4ODMzMCwgMCwgezB4YzgsMHgyMCwweDM0LDB4MDksMHg4YywweDgyLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDgzNDAsIDAsIHsweDk4LDB4MGQsMHhmYywweDAyLDB4ZjksMHgwMCwweDNmLDB4NDAsMHg0ZiwweGQxLDB4MDMsMHhlNCwweDQwLDB4ZjUsMHgxNCwweGJmIH19LAorIHsxNiwgMHg4MzUwLCAwLCB7MHg0NCwweDBkLDB4NTEsMHgyMywweDVjLDB4NDAsMHhmNSwweDEwLDB4MWYsMHg0ZSwweDRkLDB4NTAsMHgwMywweDY0LDB4MDgsMHhmOSB9fSwKKyB7MTYsIDB4ODM2MCwgMCwgezB4MjgsMHgzZSwweDRhLDB4OGYsMHg5MiwweDgzLDB4ZTQsMHhhMCwweGY5LDB4MjgsMHgzYSwweDRiLDB4MGYsMHg5MiwweDgzLDB4ZTYgfX0sCisgezE2LCAweDgzNzAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4ZjQsMHg0MCwweGZkLDB4MDAsMHgzMCwweDQwIH19LAorIHsxNiwgMHg4MzgwLCAwLCB7MHgwYywweDkwLDB4MDMsMHgyNCwweDAwLDB4ZGQsMHgwMCwweDNiLDB4NDAsMHgwZSwweDkwLDB4MDMsMHg3NCwweDAwLDB4NWQsMHgwMCB9fSwKKyB7MTYsIDB4ODM5MCwgMCwgezB4MzYsMHg2NCwweDBkLDB4ZDAsMHgwMCwweGE2LDB4MDAsMHhmOSwweDQwLDB4MzIsMHg3OCwweDBjLDB4OTksMHgwMywweDI0LDB4NDAgfX0sCisgezE2LCAweDgzYTAsIDAsIHsweGM5LDB4OTAsMHgzMiwweDUwLDB4MGYsMHg5YiwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4M2IwLCAwLCB7MHgzOCwweDEwLDB4ZTIsMHg4MCwweGI4LDB4MDAsMHgyMiwweDAxLDB4MDgsMHg4MCwweDBhLDB4MjAsMHgwMCwweDg4LDB4MDAsMHgyYSB9fSwKKyB7MTYsIDB4ODNjMCwgMCwgezB4MDAsMHgwOCwweDgwLDB4MDIsMHgyMCwweDAwLDB4ODgsMHgwMCwweDIyLDB4MjAsMHgwOCwweDhhLDB4OGIsMHhlMSwweDAwLDB4YjggfX0sCisgezE2LCAweDgzZDAsIDAsIHsweDgwLDB4MjIsMHgzMCwweDI4LDB4MGQsMHgwMiwweDIyLDB4MDAsMHhkOCwweGU0LDB4MjIsMHgyOCwweDBiLDB4OGYsMHgwYSwweDBlIH19LAorIHsxNiwgMHg4M2UwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4ODAsMHhiMSwweDAwLDB4YTAsMHg0MCB9fSwKKyB7MTYsIDB4ODNmMCwgMCwgezB4MDgsMHgxMCwweDAyLDB4MDQsMHgwMCwweDg5LDB4MDAsMHgwOCwweDQwLDB4MGEsMHg5MCwweDQyLDB4NDQsMHgwMCwweDkxLDB4MDAgfX0sCisgezE2LCAweDg0MDAsIDAsIHsweDIwLDB4NTgsMHgyOCwweDkwLDB4MDIsMHg4NSwweDAwLDB4ODEsMHgyMCwweGEwLDB4NGMsMHgwOSwweDEyLDB4MGEsMHgwNCwweDgwIH19LAorIHsxNiwgMHg4NDEwLCAwLCB7MHg5MSwweDQwLDB4YTAsMHg0MCwweDBiLDB4MTAsMHgwMiwweDAyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODQyMCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDAsMHhiOSwweDAyLDB4MjAsMHg0MCwweDA4LDB4OTAsMHgwMiwweDA0LDB4MDAsMHg4OSwweDAxLDB4MjIgfX0sCisgezE2LCAweDg0MzAsIDAsIHsweDQwLDB4MjgsMHg5MCwweDIyLDB4MDQsMHgwMCwweDg5LDB4MTAsMHgyMiwweDQwLDB4MDgsMHg5MCwweDAyLDB4ZTQsMHgwMCwweGIxIH19LAorIHsxNiwgMHg4NDQwLCAwLCB7MHgwMCwweDIyLDB4NDAsMHg4MSwweDkwLDB4MDIsMHgwNCwweDAwLDB4OTEsMHgwMCwweDIyLDB4NDAsMHgwYiwweDkwLDB4MDIsMHgwNiB9fSwKKyB7MTYsIDB4ODQ1MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNSwweDAwLDB4ZjEsMHgwMCwweDMyLDB4NjAgfX0sCisgezE2LCAweDg0NjAsIDAsIHsweDJjLDB4OTIsMHgxMywweDI0LDB4MDIsMHhkMSwweDEwLDB4M2EsMHg0MCwweDBlLDB4MTIsMHgwMywweDY2LDB4MDQsMHhkOSwweDAwIH19LAorIHsxNiwgMHg4NDcwLCAwLCB7MHhiNiwweDQwLDB4MGQsMHgxOSwweDAzLDB4YTQsMHgwMCwweGY5LDB4MDAsMHgzMiwweDQwLDB4MDksMHg5MCwweDAxLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4ODQ4MCwgMCwgezB4ZDksMHgwMiwweDIyLDB4NDAsMHgwZiwweDkwLDB4MDMsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg0OTAsIDAsIHsweDJhLDB4MDEsMHhhNSwweDAwLDB4ZjksMHgwMCwweDNlLDB4NjQsMHgwZiwweDEwLDB4MDMsMHhlNCwweDAwLDB4ZjksMHg4MSwweDNlIH19LAorIHsxNiwgMHg4NGEwLCAwLCB7MHg2NiwweDhmLDB4OTAsMHgyMywweGU0LDB4ODAsMHhmOSwweDA0LDB4M2UsMHg0MCwweDhmLDB4OTAsMHgwMywweGU0LDB4MDQsMHhmOSB9fSwKKyB7MTYsIDB4ODRiMCwgMCwgezB4MDAsMHgzYywweDQwLDB4MGUsMHg5MCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHgxMCwweDAzLDB4Y2EgfX0sCisgezE2LCAweDg0YzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyYSwweDEwLDB4YTAsMHgwMCwweGY4LDB4MjQsMHgzZSwweDAwIH19LAorIHsxNiwgMHg4NGQwLCAwLCB7MHgyYywweDg0LDB4MDMsMHgyMCwweDAwLDB4YjgsMHgyMCwweDNlLDB4MDAsMHg4YywweDgwLDB4MDMsMHhhMCwweDAwLDB4NzAsMHg4MiB9fSwKKyB7MTYsIDB4ODRlMCwgMCwgezB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweDIwLDB4MDgsMHhmOCwweDAwLDB4MzIsMHgwMCwweDJjLDB4ODAsMHgwYiwweDIwLDB4MDggfX0sCisgezE2LCAweDg0ZjAsIDAsIHsweGM4LDB4MDAsMHgzZSwweDAwLDB4MGMsMHg4MCwweDAzLDB4Y2EsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NTAwLCAwLCB7MHgyOCwweDA1LDB4MjgsMHgwNCwweGJlLDB4ODAsMHgzYSwweDgwLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwNCwweDhlLDB4MDAsMHg2ZCB9fSwKKyB7MTYsIDB4ODUxMCwgMCwgezB4OTAsMHgwZCwweGEwLDB4MDIsMHgzYSwweDAwLDB4OGUsMHg4MCwweGEyLDB4ODAsMHgwZSwweGUwLDB4MGIsMHg2OCwweDAwLDB4YmEgfX0sCisgezE2LCAweDg1MjAsIDAsIHsweDAwLDB4MjIsMHg4MCwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDAsMHhkYSwweDAwLDB4MmUsMHg4MCwweDA4LDB4YTAsMHgwMiwweGNhIH19LAorIHsxNiwgMHg4NTMwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHg4MSwweDRjLDB4MDAsMHhiMSwweDAwLDB4MmMsMHhjMCB9fSwKKyB7MTYsIDB4ODU0MCwgMCwgezB4MDgsMHgzMCwweDAyLDB4MGMsMHgxOCwweGEzLDB4MDIsMHgyYywweDEwLDB4ODgsMHgzMCwweDA2LDB4ODIsMHg4MSwweGEwLDB4MDAgfX0sCisgezE2LCAweDg1NTAsIDAsIHsweDJhLDB4YzAsMHgwYiwweDMwLDB4MGEsMHg0YywweDAwLDB4YjMsMHgwMCwweDIwLDB4YzAsMHgxYSwweGIwLDB4MDIsMHg4YywweDAxIH19LAorIHsxNiwgMHg4NTYwLCAwLCB7MHg4MywweDAwLDB4MmMsMHhjMCwweDA4LDB4MzAsMHgwMiwweGNhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODU3MCwgMCwgezB4MjAsMHgwMSwweDFjLDB4MTAsMHhiNCwweDBhLDB4MmIsMHhjOCwweDA4LDB4MzEsMHgyNiwweDFjLDB4MDAsMHg4NiwweDAwLDB4MmQgfX0sCisgezE2LCAweDg1ODAsIDAsIHsweGMwLDB4MDksMHg3MiwweDAyLDB4MWQsMHgwMCwweGE1LDB4NDAsMHgyOSwweGMwLDB4MGEsMHg2MCwweDAyLDB4NWMsMHg4OCwweGIzIH19LAorIHsxNiwgMHg4NTkwLCAwLCB7MHgyMCwweDI1LDB4YzgsMHgwYSwweDcyLDB4MDIsMHg5YywweDgwLDB4OTcsMHgyMCwweDJjLDB4ZTgsMHg4MCwweDcyLDB4MDIsMHhlOCB9fSwKKyB7MTYsIDB4ODVhMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDgsMHgxNiwweDAwLDB4YjUsMHg4MCwweDNkLDB4ZTIgfX0sCisgezE2LCAweDg1YjAsIDAsIHsweDBjLDB4N2EsMHg4YiwweDBlLDB4YzAsMHhhNywweDgxLDB4MmMsMHgyMCwweDBjLDB4ZmMsMHgwMywweDkyLDB4MDIsMHhlZiwweDgwIH19LAorIHsxNiwgMHg4NWMwLCAwLCB7MHgzOSwweGU0LDB4MGIsMHhkOCwweDAxLDB4MWYsMHgwMCwweGY3LDB4ODAsMHhiMywweGY0LDB4OGUsMHg3OSwweDAzLDB4OGUsMHgwMCB9fSwKKyB7MTYsIDB4ODVkMCwgMCwgezB4YzcsMHhjNCwweDNkLDB4ZTgsMHgyYywweDdiLDB4MDMsMHhlYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg1ZTAsIDAsIHsweDA4LDB4MWQsMHhhYywweDAwLDB4ZjgsMHgwMCwweDNlLDB4ZGQsMHg4NywweGI2LDB4MDMsMHhlZCwweGNjLDB4ZTksMHgwMCwweDNlIH19LAorIHsxNiwgMHg4NWYwLCAwLCB7MHg0MCwweDBmLDB4YjAsMHgwNywweGNjLDB4MTAsMHgwYiwweDAwLDB4MzYsMHhkOCwweDBmLDB4ODAsMHg0MywweGFkLDB4ODAsMHhmYiB9fSwKKyB7MTYsIDB4ODYwMCwgMCwgezB4MjgsMHgzYSwweGMwLDB4MGQsMHhiNCwweDAzLDB4NmMsMHhlMiwweGViLDB4NjAsMHgzZSwweGQ0LDB4MGYsMHhiMCwweDAzLDB4YzIgfX0sCisgezE2LCAweDg2MTAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4ZmUsMHgwMCwweGZlLDB4OTAsMHgzZiwweGU1IH19LAorIHsxNiwgMHg4NjIwLCAwLCB7MHgwZSwweGY4LDB4MDMsMHgzZSwweDEwLDB4ZmYsMHg5MCwweDE3LDB4NjAsMHgwZiwweGZjLDB4MDMsMHg3YSwweDAwLDB4ZWUsMHg4MCB9fSwKKyB7MTYsIDB4ODYzMCwgMCwgezB4MzcsMHhlMiwweDBlLDB4NzgsMHgwZiwweGZmLDB4NDAsMHhlZiwweDg4LDB4MWYsMHhlMCwweDBjLDB4ZjgsMHg4MywweGZlLDB4ODAgfX0sCisgezE2LCAweDg2NDAsIDAsIHsweGNmLDB4ZDAsMHhiMywweGYwLDB4MGMsMHhmOCwweGMzLDB4MTAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4NjUwLCAwLCB7MHhhOCwweDExLDB4OWMsMHg0MCwweGI0LDB4MTAsMHgwZiwweGNjLDB4MDAsMHg3MiwweDAyLDB4MWMsMHgwMCwweGI2LDB4MDIsMHgwOSB9fSwKKyB7MTYsIDB4ODY2MCwgMCwgezB4YzAsMHgyOCwweGYwLDB4MDIsMHg5OCwweDAwLDB4YTYsMHgwMCwweDIxLDB4YzAsMHgwYiwweDYwLDB4MDMsMHhmYywweDAyLDB4ODcgfX0sCisgezE2LCAweDg2NzAsIDAsIHsweDAwLDB4MmQsMHhjMCwweDA4LDB4NzAsMHgwMiwweGRlLDB4MDAsMHg4ZiwweDEwLDB4MjEsMHhjMCwweDA4LDB4ZjAsMHgwMywweDZhIH19LAorIHsxNiwgMHg4NjgwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDk0LDB4MDAsMHhiNiwweDAyLDB4MmYsMHhjMiB9fSwKKyB7MTYsIDB4ODY5MCwgMCwgezB4MWEsMHgzMCwweDgwLDB4MWMsMHgwMCwweGI2LDB4MDgsMHgwMSwweDQwLDB4MGEsMHhmMCwweDAyLDB4MTgsMHgwMCwweDg3LDB4MDAgfX0sCisgezE2LCAweDg2YTAsIDAsIHsweDIxLDB4YzAsMHgwYiwweGQwLDB4MDIsMHg5YywweDEwLDB4ODcsMHgwMCwweDI5LDB4YzAsMHgwOCwweDcwLDB4MDIsMHhkYywweDQ0IH19LAorIHsxNiwgMHg4NmIwLCAwLCB7MHg4NywweDEwLDB4NjQsMHhjMCwweDA4LDB4NzAsMHgwMiwweDA2LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODZjMCwgMCwgezB4NjAsMHgxNCwweGNlLDB4NjAsMHhiMCwweDAwLDB4MmMsMHhjMCwweDA4LDB4MzQsMHgwYSwweDBjLDB4MDgsMHhiMCwweDA0LDB4MDAgfX0sCisgezE2LCAweDg2ZDAsIDAsIHsweDQwLDB4MDgsMHgzMCwweGEyLDB4ODksMHg4MCwweGEyLDB4NjIsMHgyMCwweGUwLDB4MGIsMHgwMCwweDBhLDB4Y2MsMHgwOCwweDgzIH19LAorIHsxNiwgMHg4NmUwLCAwLCB7MHgwMCwweDZjLDB4YzAsMHgwOCwweDMwLDB4NTIsMHhjYywweDAwLDB4ODMsMHgwMCwweDI0LDB4YzAsMHgwOCwweDMwLDB4MDIsMHg1OCB9fSwKKyB7MTYsIDB4ODZmMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhZSwweDAwLDB4ZjgsMHgwMCwweDNmLDB4ZDAgfX0sCisgezE2LCAweDg3MDAsIDAsIHsweDBlLDB4ZmMsMHgwMywweDNjLDB4MDAsMHhmOSwweDAwLDB4OTIsMHg4NCwweDBmLDB4ZmMsMHgwMywweDY0LDB4MDAsMHg4MCwweDAwIH19LAorIHsxNiwgMHg4NzEwLCAwLCB7MHhiNywweGMzLDB4MGYsMHhiOCwweDgzLDB4YmMsMHgwNCwweGVmLDB4MDAsMHgzZiwweGMwLDB4M2MsMHhmMCwweDAzLDB4ZmMsMHgwMiB9fSwKKyB7MTYsIDB4ODcyMCwgMCwgezB4Y2YsMHgwMCwweDM3LDB4YzAsMHgyOCwweGYwLDB4MTMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg3MzAsIDAsIHsweDgwLDB4MDAsMHhlYywweDAwLDB4ZjgsMHg0MSwweDNlLDB4YzgsMHgwZiwweDMyLDB4MDMsMHhlYywweDAwLDB4ZjgsMHgwMCwweDNhIH19LAorIHsxNiwgMHg4NzQwLCAwLCB7MHhjNCwweDBmLDB4YjEsMHgwMywweGM0LDB4MDAsMHhmOSwweDAwLDB4MzYsMHhjMCwweDBmLDB4ZTQsMHgwYiwweGVjLDB4MDQsMHhmYiB9fSwKKyB7MTYsIDB4ODc1MCwgMCwgezB4MDAsMHgzZSwweGMxLDB4MGYsMHhiMCwweDQzLDB4ZWMsMHgwNCwweGZiLDB4MDAsMHgzYSwweGMwLDB4MGYsMHhiMCwweDAzLDB4ZTQgfX0sCisgezE2LCAweDg3NjAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZjQsMHgwMCwweGZjLDB4ODAsMHgzZiwweGMwIH19LAorIHsxNiwgMHg4NzcwLCAwLCB7MHgxZiwweGYwLDB4MDMsMHgzYywweDA4LDB4ZmIsMHgwMCwweDMzLDB4ODAsMHgyZSwweGYwLDB4MTMsMHhhNCwweDA0LDB4Y2IsMHgwMCB9fSwKKyB7MTYsIDB4ODc4MCwgMCwgezB4YjksMHhjMCwweDJjLDB4ZDgsMHgwYiwweDNjLDB4MDAsMHhmZiwweDAwLDB4M2YsMHhjMCwweDA5LDB4NzAsMHgwMCwweDJjLDB4MDQgfX0sCisgezE2LCAweDg3OTAsIDAsIHsweGZmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4YzAsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4N2EwLCAwLCB7MHhjMSwweDAwLDB4NmMsMHgwMCwweGI4LDB4ODAsMHgyZSwweGMwLDB4MGIsMHhiMCwweDAzLDB4NmMsMHgwMCwweGI5LDB4MTYsMHgyOCB9fSwKKyB7MTYsIDB4ODdiMCwgMCwgezB4NzIsMHgwOCwweGIwLDB4MjIsMHgyNywweDQwLDB4ZGIsMHgwMCwweDIyLDB4YzAsMHgwOCwweGJkLDB4ODIsMHgyYywweDA4LDB4YmIgfX0sCisgezE2LCAweDg3YzAsIDAsIHsweDAwLDB4MmUsMHhjMCwweDQ4LDB4YjAsMHgwMiwweDJjLDB4MDAsMHhiYiwweDAwLDB4MmUsMHhjMSwweDBiLDB4YjAsMHgwMiwweGUwIH19LAorIHsxNiwgMHg4N2QwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHhiOCwweDYwLDB4MmUsMHhjMCB9fSwKKyB7MTYsIDB4ODdlMCwgMCwgezB4MGIsMHhiMCwweDAyLDB4MmMsMHgwMCwweGIxLDB4MDAsMHgyYSwweDg0LDB4NGEsMHgzMCwweDIyLDB4YWMsMHgyMCwweDk4LDB4ODAgfX0sCisgezE2LCAweDg3ZjAsIDAsIHsweDJhLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhhYywweDAwLDB4M2IsMHgwMCwweDJjLDB4YzAsMHgwYSwweGIwLDB4MDIsMHhhYywweDA4IH19LAorIHsxNiwgMHg4ODAwLCAwLCB7MHhiYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4YjAsMHg0MiwweGUwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODgxMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDEsMHhiMCwweDAwLDB4MmMsMHhjMCwweDBiLDB4MzAsMHgwMiwweDRjLDB4MDQsMHhiMCwweDAwLDB4MmEgfX0sCisgezE2LCAweDg4MjAsIDAsIHsweDgwLDB4MDgsMHgzMCwweDAyLDB4MDAsMHgwMCwweDEwLDB4MDQsMHgyOCwweGMwLDB4MDgsMHgyMCwweDQyLDB4OGMsMHgwMCwweGIzIH19LAorIHsxNiwgMHg4ODMwLCAwLCB7MHgwMCwweDJjLDB4YzAsMHg0MiwweDMwLDB4MGEsMHg4YywweDAwLDB4YjMsMHgwMCwweDJjLDB4YzAsMHg4YiwweDMwLDB4MDIsMHhjMiB9fSwKKyB7MTYsIDB4ODg0MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2NCwweDAwLDB4ZjgsMHg1MCwweDNmLDB4YzAgfX0sCisgezE2LCAweDg4NTAsIDAsIHsweDBiLDB4ZjAsMHgwMywweDNjLDB4MDAsMHhmYSwweDA0LDB4MzIsMHg4MCwweDBlLDB4ZjAsMHgyMywweGFjLDB4MDAsMHhkOSwweDAwIH19LAorIHsxNiwgMHg4ODYwLCAwLCB7MHgzYiwweGMwLDB4MGMsMHg5MCwweDAzLDB4YmMsMHgwNCwweGZmLDB4MDAsMHgzZCwweGMwLDB4MmUsMHhmMCwweDBiLDB4M2MsMHgwMCB9fSwKKyB7MTYsIDB4ODg3MCwgMCwgezB4ZmYsMHgwNCwweDNmLDB4YzAsMHgwZiwweGYwLDB4MDMsMHhjMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg4ODAsIDAsIHsweGEwLDB4MWQsMHhmYywweDAwLDB4ZmMsMHgwMCwweDNmLDB4YzAsMHgwNywweGYwLDB4MDMsMHhmYywweDA0LDB4N2MsMHgwMiwweGI1IH19LAorIHsxNiwgMHg4ODkwLCAwLCB7MHgwMCwweDBmLDB4ZjAsMHgwMywweGYwLDB4MDAsMHhmYywweDAwLDB4MzcsMHhjMCwweDBmLDB4ZjAsMHgxMywweDdjLDB4MDAsMHhmZiB9fSwKKyB7MTYsIDB4ODhhMCwgMCwgezB4MDAsMHgzZiwweGMwLDB4MGQsMHhmMCwweDAzLDB4NmQsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4MWYsMHhmMCwweDAzLDB4ZTggfX0sCisgezE2LCAweDg4YjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZDIsMHgwMCwweGQ1LDB4ODAsMHgzMywweDBhIH19LAorIHsxNiwgMHg4OGMwLCAwLCB7MHg0YywweGY4LDB4MDMsMHhmMiwweDAwLDB4ZmMsMHgwMCwweDM3LDB4MjYsMHgxZiwweGNhLDB4MDMsMHhiYywweGM0LDB4Y2YsMHgyMCB9fSwKKyB7MTYsIDB4ODhkMCwgMCwgezB4MzMsMHhlNCwweDBmLDB4NzgsMHgwMywweDNlLDB4NDQsMHhjZiwweDAwLDB4M2IsMHhjZSwweDlmLDB4NjgsMHgxMywweGQwLDB4MDAgfX0sCisgezE2LCAweDg4ZTAsIDAsIHsweGNkLDB4ODAsMHhiMywweDYwLDB4MGYsMHhmYSwweDgzLDB4ZjAsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4OGYwLCAwLCB7MHg4MCwweDEwLDB4ZTAsMHg4MCwweGM5LDB4MjgsMHgyMiwweDMwLDB4MDgsMHhiMiwweDIyLDB4ZWEsMHgwMSwweGI4LDB4ODIsMHgyMCB9fSwKKyB7MTYsIDB4ODkwMCwgMCwgezB4NTAsMHg0ZiwweDljLDB4MDAsMHhhOCwweGQxLDB4ZGIsMHgxMCwweGE2LDB4ZTAsMHgxNywweGI4LDB4MDMsMHhlYywweDgwLDB4ZGIgfX0sCisgezE2LCAweDg5MTAsIDAsIHsweDA4LDB4MWYsMHhkMCwweDBiLDB4YjgsMHgwMiwweGY2LDB4MDAsMHhmYiwweDgwLDB4MjIsMHg0MCwweDBiLDB4YjAsMHgwMiwweDYwIH19LAorIHsxNiwgMHg4OTIwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGM0LDB4MjAsMHg4MSwweDgwLDB4MjAsMHgwMCB9fSwKKyB7MTYsIDB4ODkzMCwgMCwgezB4OGIsMHgzMCwweDgyLDB4YzAsMHgwMCwweGIwLDB4MTAsMHgyOCwweDA4LDB4OGIsMHgxMSwweDMwLDB4YzQsMHg4NCwweDkwLDB4MjggfX0sCisgezE2LCAweDg5NDAsIDAsIHsweDI0LDB4YzgsMHgwYiwweDMwLDB4MDIsMHg0YywweDAwLDB4ODMsMHgxMCwweDA0LDB4YzgsMHgwYiwweDMwLDB4MDIsMHhjYywweDAwIH19LAorIHsxNiwgMHg4OTUwLCAwLCB7MHhiMywweDAwLDB4MjQsMHg0MCwweDBiLDB4MzAsMHgwMiwweGUyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ODk2MCwgMCwgezB4YzAsMHgxNSwweGE2LDB4MDAsMHg4MSwweDAwLDB4MjIsMHgxMCwweDBiLDB4YjAsMHgxMiwweGVhLDB4MjAsMHhiYiwweDAwLDB4MmEgfX0sCisgezE2LCAweDg5NzAsIDAsIHsweDcwLDB4MGEsMHg5YywweDAyLDB4NjIsMHgwMCwweDk4LDB4ODgsMHgyNiwweGM4LDB4MDIsMHhiMiwweDAyLDB4OGUsMHgwOCwweDhiIH19LAorIHsxNiwgMHg4OTgwLCAwLCB7MHgxOCwweDIyLDB4YzAsMHgwYiwweGEwLDB4MDIsMHhlZSwweDIwLDB4M2IsMHgwMCwweDI2LDB4NDAsMHgwYiwweGIwLDB4MDIsMHg3MCB9fSwKKyB7MTYsIDB4ODk5MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlMCwweDAwLDB4Y2IsMHgwMCwweDMyLDB4ODAgfX0sCisgezE2LCAweDg5YTAsIDAsIHsweDBmLDB4YjAsMHgwMywweGU3LDB4MDAsMHhiOCwweDUyLDB4M2UsMHgyMCwweDRiLDB4MGMsMHg0MywweGVmLDB4ODIsMHg5YiwweGMwIH19LAorIHsxNiwgMHg4OWIwLCAwLCB7MHgzMiwweGMwLDB4MGIsMHhiMCwweDAyLDB4NmMsMHgwMSwweDhiLDB4ODAsMHgyZSwweGMwLDB4MGIsMHhhMCwweDgzLDB4ZTYsMHgwMCB9fSwKKyB7MTYsIDB4ODljMCwgMCwgezB4ZmIsMHgwMCwweDM2LDB4NDAsMHgwZiwweGYwLDB4MDMsMHhkMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDg5ZDAsIDAsIHsweGUwLDB4MDEsMHhiMCwweDAyLDB4ZmYsMHgwNCwweDNmLDB4OTAsMHgwYywweGYxLDB4MDEsMHhmNCwweDA4LDB4N2QsMHg4MCwweDM3IH19LAorIHsxNiwgMHg4OWUwLCAwLCB7MHgwMCwweDBmLDB4YzAsMHgyMywweDk4LDB4MDAsMHhmNywweDAwLDB4MmIsMHhlMCwweDBmLDB4ZjgsMHgyMywweGZjLDB4MDYsMHhmYiB9fSwKKyB7MTYsIDB4ODlmMCwgMCwgezB4ODMsMHhiZiwweGMwLDB4ODcsMHhkMCwweDAzLDB4ZGMsMHgwMCwweGVmLDB4MDAsMHgzYiwweGMwLDB4MGYsMHhiMCwweDAxLDB4ZjggfX0sCisgezE2LCAweDhhMDAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YTYsMHgwMCwweGNiLDB4MDAsMHgzMywweDgwIH19LAorIHsxNiwgMHg4YTEwLCAwLCB7MHgwZiwweGIwLDB4MDMsMHhlMSwweDEwLDB4ZjIsMHg0MCwweGIyLDB4MDAsMHgzZCwweDk0LDB4MTcsMHgyZCwweDQ0LDB4ZmEsMHg0MSB9fSwKKyB7MTYsIDB4OGEyMCwgMCwgezB4MzIsMHhjMCwweDlmLDB4YjAsMHgyMywweDJjLDB4MDIsMHhjYiwweDQwLDB4MzIsMHhjMCwweDRmLDB4OTAsMHgwMywweDNkLDB4MDAgfX0sCisgezE2LCAweDhhMzAsIDAsIHsweGNiLDB4MDAsMHgzZSwweDQwLDB4MGYsMHhiMCwweDAzLDB4MTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4YTQwLCAwLCB7MHg4OCwweDA1LDB4MjYsMHgwMCwweDhiLDB4NzEsMHgyMCwweGQ1LDB4MDMsMHg5OSwweDAyLDB4ZTAsMHgwMCwweGJiLDB4ODAsMHgyMiB9fSwKKyB7MTYsIDB4OGE1MCwgMCwgezB4NjAsMHgxYywweDgwLDB4MDMsMHg2MCwweDAwLDB4YjgsMHgwMiwweDIyLDB4YzIsMHgwYiwweDMyLDB4MDIsMHgyYywweDAxLDB4OGYgfX0sCisgezE2LCAweDhhNjAsIDAsIHsweDAyLDB4ZDcsMHhjMCwweDBiLDB4YTAsMHgwMywweDZkLDB4NDAsMHg1MywweDgwLDB4MmUsMHhjMCwweDBlLDB4ZjAsMHg0MywweDcyIH19LAorIHsxNiwgMHg4YTcwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDY4LDB4MDIsMHg4MCwweDAwLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4OGE4MCwgMCwgezB4MGIsMHgzNSwweDI2LDB4YzIsMHgwMCwweGIwLDB4OTAsMHgyMCwweGMwLDB4ODgsMHgwMCwweDAyLDB4NGYsMHgyMCwweGIzLDB4MDIgfX0sCisgezE2LCAweDhhOTAsIDAsIHsweDYwLDB4ZTIsMHgxYiwweDM4LDB4MDIsMHgwYywweDAwLDB4ODgsMHgwMCwweDYwLDB4YzAsMHgwYiwweDM0LDB4ODIsMHg0YywweDAyIH19LAorIHsxNiwgMHg4YWEwLCAwLCB7MHhhMSwweDkwLDB4MmMsMHg0MCwweDBiLDB4MzAsMHgwMiwweDMwLDB4MDEsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGFiMCwgMCwgezB4MjAsMHgwMSwweDNhLDB4MDgsMHg4YywweGEwLDB4MmQsMHgyMCwweDRiLDB4NzgsMHgwMiwweGRhLDB4MDAsMHhiMiwweDkwLDB4MjEgfX0sCisgezE2LCAweDhhYzAsIDAsIHsweDY2LDB4NDgsMHg3OSwweDAyLDB4ZGUsMHg0MCwweGI3LDB4OTEsMHhhMSwweGUwLDB4ZGIsMHhmOCwweDAyLDB4MWUsMHg0MCwweDg0IH19LAorIHsxNiwgMHg4YWQwLCAwLCB7MHg5MCwweDAxLDB4ZTAsMHg4YiwweGY5LDB4MDIsMHg1ZSwweDAxLDB4OTcsMHg4MCwweDJkLDB4NjAsMHgwYSwweDc4LDB4MDAsMHg0OCB9fSwKKyB7MTYsIDB4OGFlMCwgMCwgezB4MDQsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ODAsMHgwMCwweDI0LDB4MDQgfX0sCisgezE2LCAweDhhZjAsIDAsIHsweDBmLDB4MzIsMHgwMywweGM0LDB4YTAsMHhmMSwweDQyLDB4MzAsMHhjNCwweDJjLDB4MzEsMHgwMiwweDQ0LDB4MDAsMHhmMSwweDExIH19LAorIHsxNiwgMHg4YjAwLCAwLCB7MHhhMCwweGMwLDB4MGIsMHgzMCwweDBiLDB4MGMsMHg0MiwweDgzLDB4MDAsMHgwMCwweGMwLDB4MGYsMHgzMCwweDAzLDB4NGMsMHgwMiB9fSwKKyB7MTYsIDB4OGIxMCwgMCwgezB4ZTMsMHgwMCwweDNjLDB4NDAsMHgwYiwweDMwLDB4MDEsMHgxMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhiMjAsIDAsIHsweGMwLDB4MWQsMHhiYywweDAwLDB4ZmMsMHhhNSwweDMzLDB4YzAsMHgwZiwweGQwLDB4MDMsMHhmYywweDAxLDB4YmYsMHgwMCwweDNmIH19LAorIHsxNiwgMHg4YjMwLCAwLCB7MHhjNCwweDBlLDB4NzEsMHgwMywweDc0LDB4MDAsMHg3NSwweDEwLDB4M2YsMHhjMCwweDA1LDB4ZjAsMHgwMywweGRjLDB4NDAsMHhmZiB9fSwKKyB7MTYsIDB4OGI0MCwgMCwgezB4MDQsMHgzZiwweGMwLDB4MGYsMHhmMCwweDQzLDB4ZmMsMHgwMCwweDdmLDB4MDAsMHgzZiwweDQwLDB4MGUsMHhmMCwweDAzLDB4ZDAgfX0sCisgezE2LCAweDhiNTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA0LDB4ZTgsMHgwMCwweGYyLDB4MDQsMHhiMywweDgwIH19LAorIHsxNiwgMHg4YjYwLCAwLCB7MHgwZiwweGI4LDB4MGIsMHgyYywweDAwLDB4ZWIsMHg4MCwweDMyLDB4YzAsMHgwYywweDIwLDB4MTMsMHgyZSwweDA4LDB4Y2IsMHgwMSB9fSwKKyB7MTYsIDB4OGI3MCwgMCwgezB4MzIsMHhjNSwweDBmLDB4YjEsMHgwMywweGVjLDB4NDgsMHhjOCwweDEwLDB4MzIsMHhmYSwweDhjLDB4MzgsMHgwMywweDNjLDB4OTAgfX0sCisgezE2LCAweDhiODAsIDAsIHsweGNiLDB4MDAsMHgzZSwweDQwLDB4MGYsMHhiMCwweDEzLDB4YzIsMHgwNCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4YjkwLCAwLCB7MHhjOCwweDEwLDB4OTgsMHgwMCwweGY2LDB4MDAsMHg2MSwweDgxLDB4MGIsMHhmMCwweDAyLDB4MWMsMHgwMCwweGQ3LDB4MDAsMHhiNyB9fSwKKyB7MTYsIDB4OGJhMCwgMCwgezB4ODAsMHgwYywweDcwLDB4MDIsMHhiYywweDEwLDB4OGYsMHgwMCwweDIxLDB4YzgsMHg4YiwweDcyLDB4NDMsMHhmYywweDg4LDB4ZGMgfX0sCisgezE2LCAweDhiYjAsIDAsIHsweDAwLDB4MzcsMHhjOCwweDBkLDB4NTAsMHgwMiwweDFjLDB4MjIsMHg4NywweDAwLDB4MmQsMHhjMCwweDBiLDB4NzAsMHgwMiwweGQzIH19LAorIHsxNiwgMHg4YmMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDllLDB4MDAsMHhiNiwweDgwLDB4YTksMHhhMCB9fSwKKyB7MTYsIDB4OGJkMCwgMCwgezB4NGIsMHg3YywweDAyLDB4NWUsMHgzMCwweGEzLDB4ODgsMHgyMSwweGYwLDB4MDgsMHg3OCwweDAyLDB4MTYsMHgwMCwweDg1LDB4ODAgfX0sCisgezE2LCAweDhiZTAsIDAsIHsweDIxLDB4ZTAsMHgwYiwweDc4LDB4MDIsMHhkZSwweDAwLDB4ODcsMHg4MCwweGExLDB4ZTQsMHgwOCwweGQ4LDB4MDIsMHg0ZSwweDAwIH19LAorIHsxNiwgMHg4YmYwLCAwLCB7MHg5NywweDgwLDB4MmQsMHg3MCwweDBiLDB4NzgsMHgwMiwweGM4LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGMwMCwgMCwgezB4NDgsMHgxNCwweGVjLDB4MDAsMHhiMiwweDAwLDB4MjgsMHhjMCwweDBiLDB4MTAsMHgwMiwweDRlLDB4OTAsMHg5MywweDAyLDB4MjIgfX0sCisgezE2LCAweDhjMTAsIDAsIHsweGYwLDB4MDgsMHgzOCwweDQyLDB4OGMsMHg0MiwweDgzLDB4MDQsMHgyMiwweGU0LDB4NGIsMHgzOCwweDAyLDB4OGUsMHg0MCwweDgzIH19LAorIHsxNiwgMHg4YzIwLCAwLCB7MHgwMCwweDIwLDB4YzAsMHgwOSwweDM4LDB4MjIsMHg0ZSwweDIxLDB4OTMsMHgwMCwweDJlLDB4ZTAsMHgwYiwweDMwLDB4MDIsMHhkYiB9fSwKKyB7MTYsIDB4OGMzMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhOCwweDAxLDB4ZmEsMHgwMCwweDNiLDB4ODkgfX0sCisgezE2LCAweDhjNDAsIDAsIHsweDBmLDB4YTAsMHgwMiwweDc4LDB4MDgsMHhhZSwweDQwLDB4MjMsMHg4MCwweDJjLDB4NmMsMHgwYiwweDNhLDB4MDAsMHg4ZSwweDhjIH19LAorIHsxNiwgMHg4YzUwLCAwLCB7MHhiMiwweDAwLDB4MGIsMHg4MCwweDgyLDB4ZTAsMHgwMiwweDhlLDB4MDAsMHgyMiwweDgwLDB4MGMsMHhlOCwweDAyLDB4N2IsMHg4MCB9fSwKKyB7MTYsIDB4OGM2MCwgMCwgezB4OWEsMHg4MCwweDNlLDB4ODAsMHgwZiwweGEwLDB4MDMsMHhmYSwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhjNzAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDA5LDB4ZWMsMHgwMCwweDM2LDB4MjEsMHgwYiwweDgwLDB4MTMsMHhhMSwweDAwLDB4ZjgsMHg2MCwweDNlIH19LAorIHsxNiwgMHg4YzgwLCAwLCB7MHgwMCwweDBmLDB4ODEsMHgwMywweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHg0MywweGUwLDB4MTAsMHhmOCB9fSwKKyB7MTYsIDB4OGM5MCwgMCwgezB4MDAsMHhiZSwweDAwLDB4MGYsMHg4NSwweDBiLDB4ODAsMHgwMCwweGU4LDB4MTAsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4ZDIgfX0sCisgezE2LCAweDhjYTAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMiwweGM5LDB4MDIsMHgzMCwweDQ4IH19LAorIHsxNiwgMHg4Y2IwLCAwLCB7MHgwYywweDk5LDB4MTMsMHhhNCwweDAyLDB4YzksMHgwMCwweDNlLDB4NDIsMHgwYywweDkwLDB4OGYsMHgyNCwweDAwLDB4ZjksMHgwMCB9fSwKKyB7MTYsIDB4OGNjMCwgMCwgezB4MzIsMHgyOCwweDBjLDB4ODgsMHgwMywweGUwLDB4MDAsMHhjOSwweDAwLDB4YjIsMHg0MCwweDBmLDB4OTAsMHgwMywweGU3LDB4MDAgfX0sCisgezE2LCAweDhjZDAsIDAsIHsweGM5LDB4MTAsMHgzZSwweDQwLDB4MGMsMHgxMCwweDAzLDB4MDIsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4Y2UwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMSwweDg5LDB4ODAsMHhhMiwweDQ4LDB4MjgsMHg5MiwweDQyLDB4YzUsMHgwMCwweDg5LDB4NDAsMHgyZSB9fSwKKyB7MTYsIDB4OGNmMCwgMCwgezB4NDAsMHgyYywweDkwLDB4MDYsMHgyNSwweDAwLDB4YjksMHgwMCwweDIyLDB4NTAsMHgwOCwweDk4LDB4MDIsMHhjNCwweDAwLDB4ODkgfX0sCisgezE2LCAweDhkMDAsIDAsIHsweDAxLDB4NzYsMHg0MCwweDRiLDB4OTIsMHgwMiwweGU1LDB4MDIsMHg4OSwweDAwLDB4MmUsMHg0MCwweDBkLDB4OTAsMHgwMywweDYwIH19LAorIHsxNiwgMHg4ZDEwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MGMsMHg4NSwweDIwLDB4YTIsMHg0MCB9fSwKKyB7MTYsIDB4OGQyMCwgMCwgezB4MDgsMHg5MCwweDA2LDB4ZTUsMHgwMCwweDg5LDB4NDAsMHgyZSwweDQwLDB4MDksMHg5MCwweDQyLDB4YTQsMHhhMCwweDMxLDB4MDAgfX0sCisgezE2LCAweDhkMzAsIDAsIHsweDIyLDB4NTAsMHgxOCwweDkxLDB4MDIsMHhlNCwweDAwLDB4ODEsMHgwMCwweDIyLDB4NDAsMHgwYiwweDkwLDB4MDYsMHhlNCwweDAwIH19LAorIHsxNiwgMHg4ZDQwLCAwLCB7MHg4OSwweDAwLDB4MmUsMHg0MCwweDA5LDB4OTAsMHgwMiwweDBlLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGQ1MCwgMCwgezB4MDAsMHgwNCwweDE1LDB4MDAsMHg4NSwweDQwLDB4MjAsMHg0MCwweDA4LDB4MTQsMHgyNiwweGU0LDB4MDAsMHg4MSwweDAwLDB4MmMgfX0sCisgezE2LCAweDhkNjAsIDAsIHsweDQwLDB4MTgsMHgxMCwweDAyLDB4ODQsMHg4MCwweGIxLDB4MjAsMHhhMCwweDUwLDB4MDgsMHgxNCwweDAyLDB4ZTUsMHgwMiwweDgxIH19LAorIHsxNiwgMHg4ZDcwLCAwLCB7MHg0MCwweDIwLDB4NDgsMHgwYiwweDEwLDB4MDYsMHhjYywweDAwLDB4ODEsMHgwMSwweDJjLDB4NTAsMHgwOSwweDE0LDB4MDIsMHg0YSB9fSwKKyB7MTYsIDB4OGQ4MCwgMCwgezB4MDUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4OGMsMHgwMCwweDMyLDB4MDAgfX0sCisgezE2LCAweDhkOTAsIDAsIHsweDBjLDB4ODAsMHgyMywweGUwLDB4MDAsMHhjOCwweDAwLDB4M2UsMHgxNCwweDBkLDB4ODAsMHgxMiwweGExLDB4NDQsMHhmOCwweDUxIH19LAorIHsxNiwgMHg4ZGEwLCAwLCB7MHgzMiwweDAwLDB4MmMsMHg4MCwweDAzLDB4ZTAsMHgwMCwweDg4LDB4MDQsMHgyMiwweDE0LDB4MGYsMHg4MCwweDA3LDB4ZTAsMHgwMCB9fSwKKyB7MTYsIDB4OGRiMCwgMCwgezB4YzgsMHgwMCwweDNlLDB4MDAsMHgwZCwweDgwLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhkYzAsIDAsIHsweDk4LDB4OWQsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNmLDB4NTAsMHgwZiwweGQwLDB4MDMsMHhkYywweDAxLDB4YmQsMHg0MiwweDNmIH19LAorIHsxNiwgMHg4ZGQwLCAwLCB7MHg1MCwweDRmLDB4ZDQsMHg0MywweDc0LDB4NDEsMHhmZCwweDEwLDB4M2YsMHgxMCwweDFmLDB4YzQsMHgxMywweGYxLDB4MDAsMHhmZCB9fSwKKyB7MTYsIDB4OGRlMCwgMCwgezB4NDAsMHg3ZSwweDQ0LDB4MGYsMHhkMCwweDQzLDB4ZjUsMHgwMSwweGZkLDB4MDAsMHgzZiwweDQwLDB4MGYsMHg5NCwweDAzLDB4ZTYgfX0sCisgezE2LCAweDhkZjAsIDAsIHsweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZjQsMHgwMCwweGRmLDB4MDUsMHgzMywweDYxIH19LAorIHsxNiwgMHg4ZTAwLCAwLCB7MHgwZiwweDUwLDB4NTMsMHgzNCwweDEwLDB4ZmQsMHgwNCwweDMzLDB4NDQsMHg0ZiwweDUwLDB4MDMsMHg3NiwweGMxLDB4Y2QsMHhlMCB9fSwKKyB7MTYsIDB4OGUxMCwgMCwgezB4MzMsMHg2MCwweDBjLDB4Y2UsMHgwMywweGY2LDB4YzAsMHhlMSwweGMwLDB4YjYsMHg2NCwweDhmLDB4NTAsMHgwYiwweDM2LDB4ODIgfX0sCisgezE2LCAweDhlMjAsIDAsIHsweGNkLDB4MDAsMHgzZSwweDQ0LDB4NGMsMHg5ZSwweGMzLDB4YzYsMHgwMSwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ZTMwLCAwLCB7MHgzOCwweDEwLDB4ZWEsMHgyOCwweDgwLDB4YTAsMHhiMiwweDA0LDB4MGIsMHg4YSwweDgzLDB4NjAsMHgwMCwweGZhLDB4MDAsMHgzNiB9fSwKKyB7MTYsIDB4OGU0MCwgMCwgezB4MjgsMHg4YiwweDgwLDB4MDMsMHhlMywweGM4LDB4YzgsMHg4NCwweDIyLDB4MTQsMHgwOCwweDhhLDB4MDIsMHhlMiwweDgwLDB4ZDggfX0sCisgezE2LCAweDhlNTAsIDAsIHsweDgyLDB4MzQsMHgzNCwweDFiLDB4ODAsMHgwMywweDYwLDB4MDQsMHg4OCwweDAwLDB4MmUsMHgyMCwweDBhLDB4OGUsMHg0MiwweGNlIH19LAorIHsxNiwgMHg4ZTYwLCAwLCB7MHgwNiwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwNSwweGM0LDB4ODAsMHg4MSwweDA4LDB4MDQsMHg0MSB9fSwKKyB7MTYsIDB4OGU3MCwgMCwgezB4MGIsMHg5MiwweDAyLDB4MDQsMHgwMCwweGIxLDB4MDAsMHgyYywweDQwLDB4MGIsMHgxOCwweDAyLDB4MjQsMHgwMCwweGIxLDB4NjAgfX0sCisgezE2LCAweDhlODAsIDAsIHsweDI2LDB4NDAsMHgwYSwweDE2LDB4MDIsMHhjNSwweDAwLDB4YTEsMHhjMCwweDIwLDB4NDgsMHgwYiwweDkwLDB4MDIsMHg0NywweDAwIH19LAorIHsxNiwgMHg4ZTkwLCAwLCB7MHg5MSwweDAxLDB4MmMsMHg0OCwweDE4LDB4MTIsMHgwMiwweGQyLDB4MDEsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGVhMCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MGMsMHg4YiwweDA0LDB4YTIsMHg1MCwweDBiLDB4OTEsMHgwMiwweDI0LDB4MDQsMHhhOSwweDAxLDB4MmUgfX0sCisgezE2LCAweDhlYjAsIDAsIHsweDQyLDB4MGIsMHg5MCwweDAyLDB4YTQsMHgwMCwweGE5LDB4MDAsMHgyNiwweDYwLDB4MGEsMHg5MCwweDAyLDB4ZTYsMHgwMCwweDgxIH19LAorIHsxNiwgMHg4ZWMwLCAwLCB7MHgwMCwweDIyLDB4NDAsMHg4YiwweGIwLDB4MDIsMHgyNCwweDA4LDB4OTksMHgxMCwweDJlLDB4NDAsMHgxYSwweDkwLDB4MDIsMHhjNiB9fSwKKyB7MTYsIDB4OGVkMCwgMCwgezB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNSwweDAwLDB4YzksMHgwMCwweDM2LDB4NDAgfX0sCisgezE2LCAweDhlZTAsIDAsIHsweDBmLDB4MTAsMHgwMiwweDI1LDB4MDAsMHhiMSwweDAwLDB4MmUsMHg2MCwweDBmLDB4MTAsMHgxMiwweDI0LDB4MDIsMHhiOSwweGEwIH19LAorIHsxNiwgMHg4ZWYwLCAwLCB7MHhhNCwweDQwLDB4MmUsMHg5MSwweDAzLDB4ZTYsMHgwMCwweGE5LDB4MDAsMHgyMiwweDQwLDB4MGIsMHgxOSwweDgwLDB4NjQsMHgwNCB9fSwKKyB7MTYsIDB4OGYwMCwgMCwgezB4ZDksMHg4MSwweDJlLDB4NDAsMHg0YywweDkwLDB4MDMsMHhlOCwweDE0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDhmMTAsIDAsIHsweDY4LDB4MDEsMHhhNCwweDBhLDB4ZTksMHgwMCwweGJlLDB4NDgsMHgwZiwweDk4LDB4MGIsMHhlNCwweDAwLDB4ZjksMHhjNCwweDM2IH19LAorIHsxNiwgMHg4ZjIwLCAwLCB7MHg3MCwweDFmLDB4OTIsMHgwMywweGU2LDB4OTAsMHhjMSwweDkwLDB4M2EsMHg0MCwweDhkLDB4ODgsMHgwMywweGU0LDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4OGYzMCwgMCwgezB4OTAsMHgzZSwweDQwLDB4MGIsMHg5OCwweDAzLDB4ZTYsMHg0MCwweGU5LDB4MDAsMHgzZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4ZDIgfX0sCisgezE2LCAweDhmNDAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2OCwweDEwLDB4YTEsMHgwMiwweGQ4LDB4MjAsMHhiMiwweDEwIH19LAorIHsxNiwgMHg4ZjUwLCAwLCB7MHgwYywweDgwLDB4ODMsMHgyMSwweDQwLDB4YzgsMHg1OCwweGIyLDB4MTAsMHg0YywweDgwLDB4MGIsMHgyMCwweDAwLDB4ZjgsMHg0MiB9fSwKKyB7MTYsIDB4OGY2MCwgMCwgezB4MzIsMHgwMCwweDBmLDB4ODAsMHgwMywweGUwLDB4MDIsMHhkOCwweDAwLDB4NzIsMHgwMCwweDFjLDB4ODAsMHgwMCwweDIwLDB4MDAgfX0sCisgezE2LCAweDhmNzAsIDAsIHsweGY4LDB4MDQsMHgzZSwweDAwLDB4MGYsMHg4MCwweDAzLDB4MDIsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg4ZjgwLCAwLCB7MHgyOCwweDA1LDB4MzgsMHgwNCwweGNlLDB4NDEsMHgyMywweDgwLDB4MDgsMHhlMCwweDAyLDB4MzksMHgxMCwweGFlLDB4NDAsMHgyMiB9fSwKKyB7MTYsIDB4OGY5MCwgMCwgezB4ODAsMHgwOCwweGUwLDB4MDIsMHgxYSwweDAwLDB4YmEsMHgwMCwweDJiLDB4YWQsMHgwMywweDgwLDB4MDIsMHhlOCwweDAwLDB4Y2EgfX0sCisgezE2LCAweDhmYTAsIDAsIHsweDAwLDB4MmEsMHg4MCwweDBhLDB4ZTAsMHgwMiwweDE4LDB4MDAsMHhiYSwweDAwLDB4MWEsMHg4MCwweDBiLDB4YTAsMHgwMywweDRhIH19LAorIHsxNiwgMHg4ZmIwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjgsMHgwNSwweDZjLDB4MTIsMHg4OSwweDAwLDB4YTAsMHhlMCB9fSwKKyB7MTYsIDB4OGZjMCwgMCwgezB4MDgsMHgzOCwweDAyLDB4MGQsMHg4OCwweDgzLDB4MDAsMHgwNCwweGUwLDB4MDgsMHgzOCwweDMyLDB4MGUsMHgyNSwweDMxLDB4MDEgfX0sCisgezE2LCAweDhmZDAsIDAsIHsweDI0LDB4ZTAsMHg4YiwweDM4LDB4MDIsMHhlNCwweDAxLDB4ODMsMHgwMCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHg4YywweDAwIH19LAorIHsxNiwgMHg4ZmUwLCAwLCB7MHhiMywweDAwLDB4MmUsMHhjMCwweDBiLDB4MzAsMHgwMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OGZmMCwgMCwgezB4YTAsMHgwMSwweDE0LDB4MjAsMHg4NiwweDIwLDB4MjksMHhiMCwweDA4LDB4ZjAsMHg4MiwweDNlLDB4MDQsMHhhNywweDAwLDB4MjEgfX0sCisgezE2LCAweDkwMDAsIDAsIHsweDcwLDB4ODgsMHg3MCwweDkyLDB4MWMsMHgyMCwweGJkLDB4MDAsMHg2OSwweGMwLDB4MGIsMHg3NiwweDAyLDB4ZDQsMHg4MCwweDhmIH19LAorIHsxNiwgMHg5MDEwLCAwLCB7MHgyMSwweDI5LDB4ZTAsMHgwYSwweDYwLDB4ODYsMHg5OCwweDAxLDB4YjcsMHgwMCwweDJkLDB4YzgsMHgwYiwweDNiLDB4MDIsMHg2MCB9fSwKKyB7MTYsIDB4OTAyMCwgMCwgezB4MDQsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgzZSwweDAwLDB4YzcsMHhhMCwweGIwLDB4ZTAgfX0sCisgezE2LCAweDkwMzAsIDAsIHsweDJjLDB4NzgsMHgwYiwweDFhLDB4MDAsMHhjMywweDgwLDB4MzcsMHhlMCwweDI4LDB4NzgsMHgwMywweDFhLDB4MDgsMHhmNSwweDkwIH19LAorIHsxNiwgMHg5MDQwLCAwLCB7MHgzNSwweGUwLDB4MGYsMHg3YywweDEyLDB4ZDYsMHg4MiwweGM3LDB4OTAsMHgyMSwweGU0LDB4MDgsMHg3OCwweDAzLDB4OWUsMHgwMCB9fSwKKyB7MTYsIDB4OTA1MCwgMCwgezB4ZjUsMHg4MCwweDNkLDB4ZjEsMHgwZiwweDc4LDB4MDMsMHgyMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkwNjAsIDAsIHsweDA4LDB4MTksMHhhNCwweDAwLDB4ZWUsMHg4MCwweDM2LDB4YzEsMHg0ZiwweGQwLDB4MDMsMHhjOCwweDAwLDB4ZmIsMHgwMCwweDNlIH19LAorIHsxNiwgMHg5MDcwLCAwLCB7MHg1MSwweDBmLDB4YjAsMHgwMywweGU0LDB4MDgsMHhmMSwweDYwLDB4M2UsMHhjMCwweDBmLDB4YjAsMHgwMywweGM1LDB4MDAsMHhlYiB9fSwKKyB7MTYsIDB4OTA4MCwgMCwgezB4MTAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDA5LDB4NmMsMHgwMCwweGZiLDB4MDAsMHgzYSwweGMwLDB4MGYsMHhiMCwweDAzLDB4YzIgfX0sCisgezE2LCAweDkwOTAsIDAsIHsweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4ZmUsMHgwMCwweGZkLDB4ODgsMHgzMywweDYwIH19LAorIHsxNiwgMHg5MGEwLCAwLCB7MHgwZiwweGY5LDB4MDMsMHhjZSwweDQwLDB4ZDcsMHg4NCwweDM3LDB4NzAsMHgwYywweGQ4LDB4MjMsMHgzNiwweDAwLDB4YzUsMHg4OCB9fSwKKyB7MTYsIDB4OTBiMCwgMCwgezB4MzMsMHhlMCwweDRmLDB4ZjgsMHgxMywweGY3LDB4MjgsMHhkZiwweDgwLDB4MzcsMHhlMiwweDBjLDB4NTgsMHgwMywweDNlLDB4MDAgfX0sCisgezE2LCAweDkwYzAsIDAsIHsweGZmLDB4OTAsMHgzZiwweGUwLDB4MGMsMHhmOCwweDAzLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MGQwLCAwLCB7MHhhOSwweDExLDB4OWMsMHgwOCwweGY2LDB4MDAsMHhhMSwweDAwLDB4MGIsMHg2MywweDAyLDB4ZDYsMHgzMCwweDg1LDB4NDEsMHgzMSB9fSwKKyB7MTYsIDB4OTBlMCwgMCwgezB4YzgsMHgwOCwweDUwLDB4MjMsMHgxYywweDAwLDB4ZDUsMHgyMCwweGIxLDB4ODAsMHgwZiwweDcwLDB4MDMsMHhiNCwweDAwLDB4YzcgfX0sCisgezE2LCAweDkwZjAsIDAsIHsweDAwLDB4MjEsMHhjMCwweDBmLDB4NDAsMHhhMywweDU4LDB4NDAsMHhiNywweDAwLDB4M2YsMHhjNCwweDBhLDB4ZjAsMHgwMiwweDJhIH19LAorIHsxNiwgMHg5MTAwLCAwLCB7MHgwNiwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4NDAsMHhiNywweDEwLDB4MjEsMHhkMiB9fSwKKyB7MTYsIDB4OTExMCwgMCwgezB4MGIsMHg3MCwweDAyLDB4ZGMsMHg0MiwweDg2LDB4MDAsMHgyNSwweDYxLDB4MDgsMHg1MSwweDAyLDB4NTAsMHgwMCwweDk1LDB4MDAgfX0sCisgezE2LCAweDkxMjAsIDAsIHsweDI1LDB4YzAsMHgwOSwweDcwLDB4ODIsMHhkNCwweDAwLDB4ODcsMHgwMCwweDI0LDB4YzAsMHgwOCwweDUwLDB4MDIsMHg1YywweDAwIH19LAorIHsxNiwgMHg5MTMwLCAwLCB7MHg5NSwweDA0LDB4MmQsMHhjMCwweDA4LDB4NzAsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTE0MCwgMCwgezB4MjAsMHgxNCwweGNjLDB4MDgsMHhiMiwweGQwLDB4MjAsMHhlMCwweDRiLDB4MDgsMHgwMiwweGM0LDB4MDAsMHg4MCwweDgwLDB4MjAgfX0sCisgezE2LCAweDkxNTAsIDAsIHsweGYwLDB4MDgsMHgxYSwweDAyLDB4ODUsMHg0OCwweDgxLDB4MTAsMHgyMCwweDQwLDB4MGEsMHgzMCwweDAyLDB4YzYsMHgxMCwweDkzIH19LAorIHsxNiwgMHg5MTYwLCAwLCB7MHgwMCwweDIwLDB4YzAsMHgwYSwweDFjLDB4MDIsMHgwZCwweDQwLDB4YjMsMHgwMCwweDY4LDB4YzQsMHgwYSwweGIwLDB4MDIsMHgwOSB9fSwKKyB7MTYsIDB4OTE3MCwgMCwgezB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhYywweDAxLDB4ZmUsMHgwMCwweDMyLDB4ZjAgfX0sCisgezE2LCAweDkxODAsIDAsIHsweDBmLDB4ODgsMHgwMywweGU2LDB4MDAsMHhjOCwweGM4LDB4MzYsMHhmNiwweDI4LDB4YTYsMHgwYSwweDZkLDB4MDAsMHg5ZCwweDAwIH19LAorIHsxNiwgMHg5MTkwLCAwLCB7MHgzMiwweDAwLDB4MGIsMHhiMCwweDAzLDB4ZjYsMHgwMywweGM3LDB4MDAsMHgzNywweGMwLDB4MDgsMHg5YywweDBhLDB4NmUsMHgwMCB9fSwKKyB7MTYsIDB4OTFhMCwgMCwgezB4YmIsMHgwMCwweDJmLDB4YzAsMHgwYywweGYwLDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkxYjAsIDAsIHsweDgwLDB4MDAsMHhlNCwweDAxLDB4ZWIsMHg0MCwweDNlLDB4ODAsMHg0ZiwweGMxLDB4MDMsMHhlNCwweDAwLDB4YjgsMHgwOCwweDNhIH19LAorIHsxNiwgMHg5MWMwLCAwLCB7MHg0MCwweDhmLDB4YTQsMHgxMywweDZjLDB4MjAsMHhmOSwweDAwLDB4M2UsMHg3MCwweDBmLDB4YjAsMHgwMywweGE0LDB4NDAsMHhlYiB9fSwKKyB7MTYsIDB4OTFkMCwgMCwgezB4MDAsMHgzZSwweGMwLDB4MGYsMHg5MiwweDIzLDB4ZTgsMHgwMCwweGY5LDB4ODAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDYzLDB4ZTAgfX0sCisgezE2LCAweDkxZTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwOCwweGNlLDB4MDgsMHgzMywweGMwIH19LAorIHsxNiwgMHg5MWYwLCAwLCB7MHgwZiwweGRhLDB4MDMsMHgzMCwweDAwLDB4ZTQsMHgwNCwweDM1LDB4YzAsMHgwZCwweGEwLDB4MDMsMHgyOCwweDAwLDB4YzUsMHgwMCB9fSwKKyB7MTYsIDB4OTIwMCwgMCwgezB4MzMsMHgwMCwweDBiLDB4ZmEsMHgwMywweGY0LDB4MDMsMHhjYiwweDAwLDB4MzEsMHhjMCwweDBjLDB4ZDQsMHgwMywweDE0LDB4MjAgfX0sCisgezE2LCAweDkyMTAsIDAsIHsweGNkLDB4ODAsMHgyMywweGMxLDB4MGMsMHhmMCwweDAyLDB4MDgsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MjIwLCAwLCB7MHg4MSwweDA0LDB4NDQsMHgxMCwweGNiLDB4ZDAsMHgyMiwweGMwLDB4MGIsMHg5NCwweDAyLDB4MjIsMHg4NCwweGI4LDB4YzYsMHgwMiB9fSwKKyB7MTYsIDB4OTIzMCwgMCwgezB4NDAsMHgwOCwweDI4LDB4MDIsMHhhNSwweDgwLDB4ODksMHgwMCwweDIyLDB4NjAsMHgwYiwweGI4LDB4MDIsMHg2NCwweDAwLDB4OGIgfX0sCisgezE2LCAweDkyNDAsIDAsIHsweDAwLDB4MmEsMHhjMCwweGM4LDB4MDAsMHgwMywweDY2LDB4MDAsMHg4MSwweDAwLDB4MDAsMHhjMCwweDBkLDB4YjAsMHgwYSwweGE4IH19LAorIHsxNiwgMHg5MjUwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJjLDB4MDAsMHgxMywweDAwLDB4MjIsMHg0MCB9fSwKKyB7MTYsIDB4OTI2MCwgMCwgezB4OGIsMHgyNCwweDAyLDB4MmEsMHgwMCwweGJiLDB4ODIsMHgyMiwweDQwLDB4MDAsMHhhYywweDAyLDB4ODQsMHgwMCwweDg5LDB4MDAgfX0sCisgezE2LCAweDkyNzAsIDAsIHsweDIyLDB4MjIsMHgwYiwweGIwLDB4MDIsMHhjNCwweDAwLDB4OWIsMHgwMCwweDJhLDB4YzAsMHgwOCwweGIwLDB4MDIsMHgyZSwweDAwIH19LAorIHsxNiwgMHg5MjgwLCAwLCB7MHg4YiwweDEwLDB4MmEsMHhjMCwweDA4LDB4YjAsMHgwMiwweGEwLDB4MTAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTI5MCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MTAsMHg4MywweDAwLDB4MjAsMHgwMSwweDBiLDB4MjAsMHgwMiwweDAwLDB4ODAsMHhiMSwweDAwLDB4MjAgfX0sCisgezE2LCAweDkyYTAsIDAsIHsweGMxLDB4MDgsMHgyMCwweDAyLDB4ODgsMHgwMSwweDgxLDB4MDAsMHhhMCwweDAwLDB4MGIsMHgzMCwweDAyLDB4NDQsMHgwMSwweDliIH19LAorIHsxNiwgMHg5MmIwLCAwLCB7MHgwMCwweDI4LDB4YzAsMHgwOCwweGIwLDB4MDIsMHg0OCwweDA2LDB4ODksMHgwMCwweDJhLDB4YzAsMHgwOSwweDMwLDB4MDIsMHg4MiB9fSwKKyB7MTYsIDB4OTJjMCwgMCwgezB4MDUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OGQsMHg2YywweDAwLDB4YzMsMHgwMCwweGIyLDB4YzAgfX0sCisgezE2LCAweDkyZDAsIDAsIHsweDBmLDB4YjAsMHgwMywweDI4LDB4MjAsMHhmYSwweDAwLDB4YjEsMHg0MCwweDBkLDB4YTAsMHgwNywweGEwLDB4MDAsMHhjZCwweDAwIH19LAorIHsxNiwgMHg5MmUwLCAwLCB7MHgyMiwweDAwLDB4MGYsMHhiMCwweDAzLDB4ZjQsMHgwMCwweDlmLDB4MDAsMHgzYiwweGMwLDB4MmMsMHhiMCwweDBiLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4OTJmMCwgMCwgezB4YzksMHgwMCwweGJhLDB4YzAsMHgwYywweGIwLDB4MDMsMHg4MCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDkzMDAsIDAsIHsweGEwLDB4MWQsMHhmYywweDA2LDB4ZmYsMHgwMiwweGFmLDB4YzAsMHgwZiwweGMwLDB4MDMsMHhmMCwweDEwLDB4ZmMsMHgwMCwweDNmIH19LAorIHsxNiwgMHg5MzEwLCAwLCB7MHhjMCwweDlmLDB4ZTAsMHgxMywweGYwLDB4MDAsMHhmZCwweDA0LDB4M2YsMHg0MCwweDRmLDB4ZjAsMHgwMywweDc0LDB4MDAsMHhlZiB9fSwKKyB7MTYsIDB4OTMyMCwgMCwgezB4MDAsMHgzZiwweGMwLDB4OGYsMHhlMCwweDAyLDB4YjQsMHgwMSwweGZkLDB4MDQsMHgzNywweGMwLDB4MGYsMHhmMCwweDQzLDB4NjggfX0sCisgezE2LCAweDkzMzAsIDAsIHsweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHgwMCwweGM3LDB4MjAsMHhiMywweGM4IH19LAorIHsxNiwgMHg5MzQwLCAwLCB7MHgxYywweGYxLDB4MDMsMHg3YywweDIwLDB4Y2YsMHgwYSwweDNmLDB4ZDAsMHgwZCwweGYwLDB4MDMsMHg3YywweDgwLDB4OGYsMHgzMiB9fSwKKyB7MTYsIDB4OTM1MCwgMCwgezB4MzMsMHhjNCwweDBmLDB4ZjEsMHg4MywweDNjLDB4ZTAsMHhjZiwweDEwLDB4MzMsMHhjNCwweDBkLDB4ZjIsMHg4MywweDNjLDB4ZTIgfX0sCisgezE2LCAweDkzNjAsIDAsIHsweGM3LDB4ODAsMHgxNywweGNjLDB4NGMsMHhmMywweDgzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5MzcwLCAwLCB7MHg4MCwweDEwLDB4ZTMsMHg0MCwweDg4LDB4NjgsMHgyMiwweDMwLDB4MDgsMHgwNiwweDAyLDB4MDEsMHhhMSwweDg4LDB4YzQsMHgwZSB9fSwKKyB7MTYsIDB4OTM4MCwgMCwgezB4MTQsMHgwOCwweDg3LDB4ODAsMHgwMSwweGMwLDB4MjgsMHg1MCwweDAyLDB4MDQsMHg4YiwweDg2LDB4MDIsMHhhMSwweDk4LDB4ODggfX0sCisgezE2LCAweDkzOTAsIDAsIHsweDQxLDB4MmEsMHgwNCwweDBhLDB4ODQsMHg4MiwweGJkLDB4ODAsMHg4YiwweDA4LDB4MmIsMHhjNCwweDg4LDB4ZjQsMHgwMywweDYwIH19LAorIHsxNiwgMHg5M2EwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNjLDB4MDgsMHg4MiwweDQwLDB4MjAsMHgxMCB9fSwKKyB7MTYsIDB4OTNiMCwgMCwgezB4MDgsMHgyMSwweDEyLDB4NDQsMHgwNCwweDgyLDB4MDQsMHgyYywweDA4LDB4ODksMHg5MCwweDAyLDB4NDQsMHgyMSwweDhiLDB4MDAgfX0sCisgezE2LCAweDkzYzAsIDAsIHsweDI0LDB4ODgsMHg4YiwweGEwLDB4MDAsMHg0MCwweDg0LDB4ODksMHgzMCwweDIyLDB4NDgsMHg4OCwweGIwLDB4MDIsMHhjYywweDA4IH19LAorIHsxNiwgMHg5M2QwLCAwLCB7MHg4OCwweDIwLDB4YTQsMHhjOCwweDAwLDB4MzIsMHgwYSwweDIyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTNlMCwgMCwgezB4YzAsMHgxNSwweGEwLDB4MDAsMHg4OSwweDAwLDB4MjIsMHhjMSwweDg4LDB4OTAsMHg2MiwweDI4LDB4MDgsMHg4OSwweDA4LDB4MmUgfX0sCisgezE2LCAweDkzZjAsIDAsIHsweGMwLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwOCwweGE4LDB4MDAsMHgyNiwweDQyLDB4MGIsMHg5MCwweDAyLDB4Y2MsMHg1MCwweDhhIH19LAorIHsxNiwgMHg5NDAwLCAwLCB7MHgyMiwweDJhLDB4ODYsMHgwYSwweDgwLDB4MDIsMHhlYywweDAwLDB4ODgsMHg4NCwweDJhLDB4YzEsMHgwOCwweGIwLDB4MjYsMHgzMCB9fSwKKyB7MTYsIDB4OTQxMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhmMCwweDAyLDB4Y2YsMHgwMCwweDMzLDB4YzAgfX0sCisgezE2LCAweDk0MjAsIDAsIHsweDQ4LDB4ZjgsMHg0MywweDc5LDB4MDAsMHg4ZCwweGMwLDB4M2YsMHgzMCwweDhkLDB4NjAsMHg4MywweDc4LDB4NjAsMHhjNCwweDU4IH19LAorIHsxNiwgMHg5NDMwLCAwLCB7MHgzNywweDIwLDB4MGYsMHg1OCwweDEzLDB4N2IsMHgwMiwweGNjLDB4YzQsMHgzMSwweDIwLDB4MGMsMHg0NCwweDAzLDB4ZWMsMHgwMiB9fSwKKyB7MTYsIDB4OTQ0MCwgMCwgezB4OGIsMHg4MCwweDM2LDB4YzAsMHgyNCwweGIwLDB4MTIsMHgxMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk0NTAsIDAsIHsweGUwLDB4MDEsMHg5YywweDAwLDB4ZjQsMHgxMCwweDNkLDB4MDAsMHg2ZiwweGM5LDB4MTMsMHhkNCwweDEyLDB4ZmUsMHg5MCwweDNmIH19LAorIHsxNiwgMHg5NDYwLCAwLCB7MHhmMCwweDBmLDB4ZGEsMHgyMywweGY0LDB4MTQsMHhmZiwweDAyLDB4M2IsMHhmMCwweDBmLDB4ZWEsMHgyMywweGI2LDB4MDAsMHhmZiB9fSwKKyB7MTYsIDB4OTQ3MCwgMCwgezB4ODIsMHgzZiwweGUxLDB4OGYsMHhmNCwweDAzLDB4YmMsMHgwMCwweGZmLDB4MDAsMHgzZiwweGMwLDB4YWYsMHg3MCwweDAzLDB4ZjggfX0sCisgezE2LCAweDk0ODAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YTAsMHgwMCwweGNhLDB4MDAsMHgzMiwweDA4IH19LAorIHsxNiwgMHg5NDkwLCAwLCB7MHgxYywweGEwLDB4MDMsMHhhNSwweDIwLDB4Y2IsMHg0MCwweGJhLDB4MTAsMHgxZiwweGIwLDB4MDMsMHhhYywweDAwLDB4ZWIsMHgwMCB9fSwKKyB7MTYsIDB4OTRhMCwgMCwgezB4NzIsMHg5MCwweDBjLDB4YjQsMHgwMywweDI5LDB4MDQsMHhjOSwweDUyLDB4MzIsMHg1MCwweDBjLDB4YjQsMHgwMywweDBjLDB4MDAgfX0sCisgezE2LCAweDk0YjAsIDAsIHsweGY4LDB4NDAsMHgzMiwweGMxLDB4MGUsMHhiMCwweDBiLDB4NTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NGMwLCAwLCB7MHhjOCwweDA1LDB4MmQsMHg4MCwweDg5LDB4ODAsMHgyMiwweGQ5LDB4MDgsMHg5MCwweDIyLDB4MmEsMHgwMCwweDg4LDB4NTQsMHgyMiB9fSwKKyB7MTYsIDB4OTRkMCwgMCwgezB4YzAsMHg4YiwweDgwLDB4MjIsMHgyMCwweDE5LDB4YzgsMHgwMCwweDIyLDB4NDAsMHg4ZCwweDgwLDB4MWEsMHgyNCwweDEwLDB4ZDIgfX0sCisgezE2LCAweDk0ZTAsIDAsIHsweDQ0LDB4MjIsMHg4MSwweDBkLDB4ODAsMHgwMywweDdjLDB4MDAsMHhiMCwweDAwLDB4MzcsMHhjMCwweDg4LDB4ZjAsMHgwMiwweDMyIH19LAorIHsxNiwgMHg5NGYwLCAwLCB7MHgxMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDRlLDB4MDAsMHg4MSwweDAwLDB4YTAsMHhmMCB9fSwKKyB7MTYsIDB4OTUwMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4ODksMHgwMiwweDgwLDB4MDAsMHgyMiwweGMwLDB4MGIsMHgwMCwweDIyLDB4YTAsMHgwMCwweGIwLDB4MDAgfX0sCisgezE2LCAweDk1MTAsIDAsIHsweDIwLDB4NDAsMHgwOCwweDAwLDB4MDIsMHgwNCwweDAwLDB4ODIsMHg2MCwweDIwLDB4ODAsMHgwOCwweDAwLDB4MDIsMHgwYywweDA4IH19LAorIHsxNiwgMHg5NTIwLCAwLCB7MHhiMiwweDAwLDB4MjIsMHhjMCwweDA4LDB4MzAsMHgwMiwweDM4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTUzMCwgMCwgezB4MjAsMHgwMSwweDAzLDB4MTAsMHg4ZSwweDkwLDB4MjMsMHgyNCwweDA4LDB4NmIsMHgwMiwweDE2LDB4NjAsMHg4ZiwweDgwLDB4MjEgfX0sCisgezE2LCAweDk1NDAsIDAsIHsweDI4LDB4MGIsMHhmOSwweDA2LDB4MWUsMHg0MCwweDhmLDB4ODAsMHgyMywweGE0LDB4NDksMHg3OSwweDAyLDB4M2EsMHg0MCwweDlkIH19LAorIHsxNiwgMHg5NTUwLCAwLCB7MHg5MCwweDIzLDB4NjQsMHgwOSwweGY4LDB4MDIsMHg1ZSwweDQwLDB4YmUsMHg5MCwweDI0LDB4ZTQsMHgyOCwweDc5LDB4MDIsMHgwOCB9fSwKKyB7MTYsIDB4OTU2MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDQyLDB4YzAsMHgwOSwweDMwLDB4MDAgfX0sCisgezE2LCAweDk1NzAsIDAsIHsweDI4LDB4MDIsMHgwMywweDg0LDB4MDAsMHg4YSwweDIwLDB4MzAsMHhjNCwweDhiLDB4MTEsMHgwMywweDg0LDB4NTAsMHhiMywweDAwIH19LAorIHsxNiwgMHg5NTgwLCAwLCB7MHgyMCwweGMwLDB4MGMsMHhhNCwweDIyLDB4MDQsMHgwMCwweGNiLDB4NDAsMHgzMCwweGM1LDB4MGMsMHgzMCwweDAzLDB4MGUsMHg0MCB9fSwKKyB7MTYsIDB4OTU5MCwgMCwgezB4ZjMsMHgxMCwweDMwLDB4YzQsMHgwYywweGIwLDB4MDMsMHgxMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk1YTAsIDAsIHsweDQwLDB4MWQsMHhiMCwweDA0LDB4ZmIsMHgwNCwweDNkLDB4YzAsMHgwZiwweGYyLDB4NDMsMHhmOCwweDA0LDB4ZmQsMHgwMSwweDNmIH19LAorIHsxNiwgMHg5NWIwLCAwLCB7MHgwYywweDBmLDB4NjEsMHgwMywweGY4LDB4NDgsMHhmNCwweDAwLDB4M2QsMHgwMSwweDBmLDB4ZDAsMHgwMywweGM4LDB4MDAsMHhmYyB9fSwKKyB7MTYsIDB4OTVjMCwgMCwgezB4MDQsMHhiZCwweDA0LDB4MGIsMHg0OCwweDAzLDB4ZmMsMHgxOCwweGZmLDB4MTQsMHgzZiwweGQ1LDB4MGQsMHhmMCwweDAzLDB4OTAgfX0sCisgezE2LCAweDk1ZDAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZTAsMHgwMCwweGY5LDB4MDEsMHgzMiwweGMwIH19LAorIHsxNiwgMHg5NWUwLCAwLCB7MHg4ZSwweDkwLDB4MDMsMHgyOCwweDAyLDB4ZDEsMHgwMCwweDMyLDB4YzAsMHgwZCwweGE4LDB4MGIsMHgwOCwweDAwLDB4ZTgsMHgwMCB9fSwKKyB7MTYsIDB4OTVmMCwgMCwgezB4MmUsMHg0MCwweDBjLDB4OTgsMHgwYiwweDJlLDB4MDIsMHhjYSwweDAwLDB4YjIsMHhhMCwweDZjLDB4ODAsMHgyMywweDJkLDB4ODAgfX0sCisgezE2LCAweDk2MDAsIDAsIHsweGNhLDB4ODAsMHgzMiwweGQwLDB4MGMsMHhiYSwweDAzLDB4MmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NjEwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwMCwweGI2LDB4MDAsMHhhMywweDAwLDB4MDgsMHg2MCwweDAyLDB4MDQsMHgwMCwweDg2LDB4MDQsMHgyOSB9fSwKKyB7MTYsIDB4OTYyMCwgMCwgezB4MDAsMHgwOCwweDUwLDB4NDIsMHgxNCwweDA0LDB4YTcsMHgwMCwweDBkLDB4ODAsMHg0YSwweDYwLDB4MDIsMHgwMCwweDAwLDB4ODEgfX0sCisgezE2LCAweDk2MzAsIDAsIHsweDAwLDB4MjEsMHg0MCwweDA4LDB4NzAsMHgwMiwweDlkLDB4NDIsMHg4NiwweDAxLDB4MjAsMHhjMCwweDA4LDB4MzIsMHg4MiwweDEyIH19LAorIHsxNiwgMHg5NjQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDkyLDB4MDAsMHhiYywweDgwLDB4NjMsMHgyMCB9fSwKKyB7MTYsIDB4OTY1MCwgMCwgezB4ODIsMHgwOCwweDAyLDB4NTIsMHgwMCwweDg0LDB4YzIsMHgyMywweDIwLDB4ODgsMHgwYywweDAyLDB4MzMsMHgwMCwweDg0LDB4ODAgfX0sCisgezE2LCAweDk2NjAsIDAsIHsweDJmLDB4MjEsMHg4OSwweDRjLDB4MDIsMHgxMiwweDE0LDB4OTQsMHhjNSwweDY0LDB4MjEsMHgwOCwweDRjLDB4MDIsMHgwZSwweDgwIH19LAorIHsxNiwgMHg5NjcwLCAwLCB7MHg5NywweDgyLDB4YTEsMHhlYywweDA4LDB4NzksMHgwMiwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTY4MCwgMCwgezB4NDgsMHgxNCwweGNkLDB4NDQsMHhiMywweDAwLDB4MjAsMHhjMCwweDA4LDB4MzAsMHgwMiwweDRkLDB4ODAsMHgwMywweDg4LDB4MjggfX0sCisgezE2LCAweDk2OTAsIDAsIHsweGMwLDB4MDgsMHgzYywweDA2LDB4MGYsMHgwMCwweGEzLDB4NDMsMHgyYywweGMyLDB4MWIsMHgzOCwweDAyLDB4MGYsMHgwMCwweDliIH19LAorIHsxNiwgMHg5NmEwLCAwLCB7MHg4OCwweDY0LDB4ZDAsMHgwOCwweGI4LDB4MDIsMHg4YywweDEwLDB4OTMsMHgwMCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MGEsMHgxMiB9fSwKKyB7MTYsIDB4OTZiMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhhYSwweDAwLDB4ZmEsMHgwNSwweDMyLDB4ODAgfX0sCisgezE2LCAweDk2YzAsIDAsIHsweDhlLDB4YTAsMHgwYiwweDY5LDB4MDAsMHhjYSwweDQwLDB4MzIsMHhhMCwweDNjLDB4YTgsMHgwMywweDJhLDB4MDAsMHhlYSwweDI2IH19LAorIHsxNiwgMHg5NmQwLCAwLCB7MHgzZSwweGIwLDB4MGQsMHhhMSwweDYzLDB4MjgsMHgyMCwweGNhLDB4NDAsMHgzNiwweGEwLDB4MGMsMHhlMCwweDEzLDB4MjgsMHgwOSB9fSwKKyB7MTYsIDB4OTZlMCwgMCwgezB4ZGUsMHgwMCwweDMyLDB4ODAsMHgyYywweGEwLDB4MDMsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk2ZjAsIDAsIHsweDQ4LDB4MDAsMHhmMCwweDIwLDB4ZjQsMHgwMCwweDNmLDB4MDAsMHgwZiwweDQwLDB4MjMsMHhiMCwweDAwLDB4ZWMsMHgwMCwweDNmIH19LAorIHsxNiwgMHg5NzAwLCAwLCB7MHgwNiwweDFlLDB4YzIsMHgxMywweGYwLDB4ODgsMHhmYywweDIwLDB4M2YsMHgwNCwweDhlLDB4YzAsMHgwMywweGYwLDB4ODAsMHhlYyB9fSwKKyB7MTYsIDB4OTcxMCwgMCwgezB4NDAsMHgzYiwweDBjLDB4MGYsMHhjMCwweGEzLDB4ZTAsMHgwMCwweGU4LDB4MDAsMHgzZSwweDAwLDB4NGYsMHg4MCwweDAzLDB4ZDIgfX0sCisgezE2LCAweDk3MjAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgzMiwweDQwIH19LAorIHsxNiwgMHg5NzMwLCAwLCB7MHgwYywweDkwLDB4MDMsMHgyNCwweDAwLDB4YzksMHg4MCwweDMyLDB4NDAsMHgwZiwweDkwLDB4NTMsMHhlNCwweDEwLDB4YzksMHgwMCB9fSwKKyB7MTYsIDB4OTc0MCwgMCwgezB4MzIsMHg0MCwweDBkLDB4OTAsMHgwMywweGU0LDB4MDAsMHhmOSwweDAwLDB4MzYsMHg0MCwweDhmLDB4OTAsMHgwMywweDI0LDB4MTAgfX0sCisgezE2LCAweDk3NTAsIDAsIHsweGM5LDB4MDEsMHgzYywweDQwLDB4MGMsMHg5MCwweDAzLDB4YzIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5NzYwLCAwLCB7MHg4MCwweDA0LDB4NDcsMHg0NCwweDg5LDB4MDAsMHgyMCwweDQwLDB4MDgsMHg5MCwweDAyLDB4MjUsMHgwYSwweDgxLDB4MTAsMHgyMiB9fSwKKyB7MTYsIDB4OTc3MCwgMCwgezB4NDAsMHg0OCwweDkwLDB4MDMsMHhjNCwweDAwLDB4ODksMHgwMCwweDc2LDB4NDAsMHgyOCwweDkwLDB4MDIsMHhlNCwweDEwLDB4YjkgfX0sCisgezE2LCAweDk3ODAsIDAsIHsweDQwLDB4YjIsMHg0MCwweDBiLDB4OTAsMHgwMywweDY0LDB4MDAsMHg4OSwweDAwLDB4MmUsMHg0MSwweDA4LDB4OTAsMHg0MiwweGUwIH19LAorIHsxNiwgMHg5NzkwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI0LDB4MDIsMHhiZCwweDAwLDB4MjMsMHg0OCB9fSwKKyB7MTYsIDB4OTdhMCwgMCwgezB4MDgsMHhkMCwweDA2LDB4MWQsMHgwNCwweDhkLDB4MDAsMHgyOSwweGMwLDB4NGEsMHhkMCwweDIyLDB4ZjQsMHgwMCwweDg1LDB4MDAgfX0sCisgezE2LCAweDk3YjAsIDAsIHsweDYxLDB4NDAsMHgxOCwweGQwLDB4MTIsMHhmYywweDAwLDB4YmQsMHg0MCwweGEzLDB4NDAsMHg0YiwweGYwLDB4MDIsMHgwNCwweDAxIH19LAorIHsxNiwgMHg5N2MwLCAwLCB7MHg4YiwweDAwLDB4MmUsMHg0MCwweDA4LDB4OTAsMHgwMiwweGM2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTdkMCwgMCwgezB4MDgsMHgwNCwweDM2LDB4ODAsMHg4NSwweDIwLDB4YTMsMHg0OCwweDA4LDB4NTIsMHgwYSwweDE0LDB4ODEsMHg4NSwweDIwLDB4MjkgfX0sCisgezE2LCAweDk3ZTAsIDAsIHsweDQ4LDB4MDgsMHg1MiwweDAyLDB4YjQsMHg4MCwweDg1LDB4MjAsMHgyNSwweDQ4LDB4ODgsMHg1MiwweDAyLDB4ZDQsMHg4MCwweGI1IH19LAorIHsxNiwgMHg5N2YwLCAwLCB7MHgyMCwweDIxLDB4NDgsMHgwYiwweDUyLDB4MDIsMHg0NCwweGEyLDB4ODEsMHgwMCwweDJjLDB4NGEsMHgwOCwweDEyLDB4ODIsMHhjMiB9fSwKKyB7MTYsIDB4OTgwMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4ZjgsMHg1MSwweDIyLDB4MDAgfX0sCisgezE2LCAweDk4MTAsIDAsIHsweDJjLDB4ODUsMHgwMiwweDIxLDB4NDgsMHhjOCwweDAwLDB4YmEsMHgxNCwweDBmLDB4ODUsMHgxMiwweGUxLDB4NDIsMHhjOCwweDUwIH19LAorIHsxNiwgMHg5ODIwLCAwLCB7MHgyMiwweDAwLDB4MGMsMHgwMCwweDAzLDB4ZTAsMHgwMCwweGY4LDB4NTAsMHgzMiwweDAwLDB4MDcsMHg0NSwweDAzLDB4MjAsMHg4MCB9fSwKKyB7MTYsIDB4OTgzMCwgMCwgezB4YzAsMHgwMSwweDNlLDB4MDgsMHgyYywweDgyLDB4MDMsMHhlZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk4NDAsIDAsIHsweDk4LDB4MGQsMHhlNCwweDQwLDB4ZjEsMHgxMCwweDNlLDB4NDQsMHgwNywweDkxLDB4NDMsMHhlNCwweDU4LDB4ZjksMHgxMSwweDM0IH19LAorIHsxNiwgMHg5ODUwLCAwLCB7MHg0NCwweDRmLDB4OTEsMHgwMiwweGU0LDB4NTAsMHhmOSwweDEwLDB4M2MsMHg0ZiwweDBmLDB4OTMsMHg4MywweGU0LDB4ZjAsMHhmOSB9fSwKKyB7MTYsIDB4OTg2MCwgMCwgezB4MTEsMHgzYSwweDRmLDB4MGYsMHg5MSwweDAzLDB4ZTQsMHhhMCwweGZkLDB4MjgsMHgzZSwweDRhLDB4MGYsMHg5MiwweDgzLDB4ZTYgfX0sCisgezE2LCAweDk4NzAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZjYsMHhhMCwweGNkLDB4YTAsMHhiMywweDY4IH19LAorIHsxNiwgMHg5ODgwLCAwLCB7MHg4YywweDlhLDB4MDMsMHgzNiwweDgwLDB4YzUsMHhhMCwweDIyLDB4NjAsMHgwYywweDlhLDB4MjMsMHgyNiwweDA0LDB4ZjksMHhhMCB9fSwKKyB7MTYsIDB4OTg5MCwgMCwgezB4MzIsMHg2NiwweDBjLDB4OWEsMHg4MywweDA2LDB4MjAsMHhjNSwweGEwLDB4MjIsMHg2MCwweDBjLDB4OWIsMHgwMywweDI2LDB4NDggfX0sCisgezE2LCAweDk4YTAsIDAsIHsweGM5LDB4MDAsMHgzZSwweDc4LDB4MGMsMHg5YSwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5OGIwLCAwLCB7MHgzOCwweDAwLDB4ZTEsMHgwMCwweDg4LDB4NDQsMHgyMiwweDk1LDB4MDgsMHg4NSwweDEyLDB4YTEsMHg0MiwweDg4LDB4NDAsMHgwMiB9fSwKKyB7MTYsIDB4OThjMCwgMCwgezB4OTAsMHgwOCwweDg0LDB4MDIsMHgyMywweGEwLDB4YmEsMHg0MCwweDIyLDB4YTAsMHgwOCwweDhlLDB4OTIsMHhhMywweGEwLDB4YTggfX0sCisgezE2LCAweDk4ZDAsIDAsIHsweDQwLDB4MmEsMHgxMCwweDA4LDB4YWUsMHgwMiwweDIzLDB4NDAsMHg4OCwweDAwLDB4MmUsMHgzOCwweDA4LDB4ODQsMHgxMiwweDBlIH19LAorIHsxNiwgMHg5OGUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxNSwweGM0LDB4MDAsMHg4YiwweDEyLDB4MjIsMHg0MCB9fSwKKyB7MTYsIDB4OThmMCwgMCwgezB4MDgsMHg5MCwweDAyLDB4NDQsMHgwMCwweDgxLDB4NDAsMHhhMCwweDUwLDB4MDgsMHgxMSwweDBhLDB4MDUsMHgwMCwweGIxLDB4MTAgfX0sCisgezE2LCAweDk5MDAsIDAsIHsweGEwLDB4NDgsMHgwOCwweDkwLDB4MDIsMHgwNCwweDAwLDB4ODEsMHg0MCwweDIwLDB4NTAsMHgyOCwweDExLDB4MDIsMHg0NCwweDgyIH19LAorIHsxNiwgMHg5OTEwLCAwLCB7MHg4MSwweDAwLDB4MmMsMHg1MCwweDA4LDB4MTEsMHgwMiwweDAyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OTkyMCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MDIsMHg4OSwweDQwLDB4MjIsMHg0MCwweDA4LDB4OTQsMHgxMiwweGE1LDB4MDAsMHg4OSwweDI4LDB4MjIgfX0sCisgezE2LCAweDk5MzAsIDAsIHsweDQ5LDB4MDgsMHg5NCwweDAyLDB4MjQsMHg0OCwweGI5LDB4MTQsMHgyMiwweDQwLDB4MDgsMHg5NCwweDAyLDB4YTQsMHg0MCwweGExIH19LAorIHsxNiwgMHg5OTQwLCAwLCB7MHg1MCwweDJhLDB4NTAsMHgwOCwweDkxLDB4NDIsMHg2NCwweDAwLDB4ODksMHg0MCwweDJlLDB4NDAsMHgwOCwweDEwLDB4MDIsMHgwNiB9fSwKKyB7MTYsIDB4OTk1MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDAwLDB4YzksMHgwMCwweDMwLDB4NzAgfX0sCisgezE2LCAweDk5NjAsIDAsIHsweDJjLDB4MTAsMHgwYiwweDY2LDB4MDAsMHhjOSwweDQwLDB4MzIsMHg1MCwweDBjLDB4OTAsMHgwMywweDI2LDB4MjAsMHhmOSwweGMwIH19LAorIHsxNiwgMHg5OTcwLCAwLCB7MHgzMiwweDcwLDB4MGMsMHg5MCwweDAzLDB4MjYsMHgyMCwweGM5LDB4MDAsMHgzMiwweDQwLDB4MGMsMHg5YywweDAzLDB4NjQsMHgwMCB9fSwKKyB7MTYsIDB4OTk4MCwgMCwgezB4YzksMHg0MSwweDNlLDB4NDAsMHgyYywweDkwLDB4MGIsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDk5OTAsIDAsIHsweDI4LDB4MDEsMHhhNCwweDAwLDB4ZjksMHgwNCwweDNlLDB4NDgsMHgwZiwweDkwLDB4MDMsMHhlNCwweDg4LDB4ZjksMHgwMCwweDM0IH19LAorIHsxNiwgMHg5OWEwLCAwLCB7MHg0MSwweDJmLDB4OWMsMHgwMywweGU0LDB4MTAsMHhmOSwweDAwLDB4M2UsMHg0NCwweDJmLDB4OTksMHgwMywweGU0LDB4MTAsMHhmOSB9fSwKKyB7MTYsIDB4OTliMCwgMCwgezB4MDAsMHgzZSwweDUwLDB4MGYsMHgxMCwweDRiLDB4YTQsMHgxMCwweGY5LDB4MjAsMHgzYywweDQwLDB4MGYsMHg5MCwweDAzLDB4NGEgfX0sCisgezE2LCAweDk5YzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwMCwweGM4LDB4MDAsMHgzZSwweDEwIH19LAorIHsxNiwgMHg5OWQwLCAwLCB7MHgyYywweDgwLDB4MDMsMHgyMCwweDAyLDB4YzAsMHg0MCwweDMyLDB4MDAsMHgxYywweDA0LDB4MGYsMHgyMSwweDAwLDB4YzAsMHgwNCB9fSwKKyB7MTYsIDB4OTllMCwgMCwgezB4MzgsMHgwMCwweDBmLDB4ODAsMHgwMywweDIxLDB4MDgsMHhjOCwweDYwLDB4MzAsMHgxMCwweDBmLDB4ODAsMHgwMiwweDIwLDB4MDAgfX0sCisgezE2LCAweDk5ZjAsIDAsIHsweGY4LDB4MDAsMHgzMiwweDAwLDB4MGMsMHg4MCwweDAzLDB4Y2EsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5YTAwLCAwLCB7MHgyOCwweDA1LDB4MWEsMHgyMCwweDgyLDB4MDQsMHgyZiwweDgwLDB4MDgsMHhhMCwweDAyLDB4MzgsMHgwMCwweDhlLDB4ODAsMHgyMiB9fSwKKyB7MTYsIDB4OWExMCwgMCwgezB4ODAsMHgwOCwweGUwLDB4MDIsMHgyOCwweDAwLDB4OGEsMHgwMCwweDIyLDB4ODEsMHgwYiwweDIwLDB4MDIsMHgyOCwweDAwLDB4ZGUgfX0sCisgezE2LCAweDlhMjAsIDAsIHsweGU0LDB4MzYsMHg4MCwweDBiLDB4YTAsMHg0MiwweDI4LDB4MDAsMHhiYSwweDA0LDB4MjIsMHg4MCwweDA4LDB4YTAsMHgwMiwweGNhIH19LAorIHsxNiwgMHg5YTMwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHg4MywweDAxLDB4MmMsMHg4MCB9fSwKKyB7MTYsIDB4OWE0MCwgMCwgezB4MDgsMHgzMCwweDAyLDB4MmUsMHg2MCwweDgyLDB4OTAsMHhhMCwweGMwLDB4NDgsMHgzMCwweDAyLDB4MGMsMHgwMiwweDgzLDB4MDAgfX0sCisgezE2LCAweDlhNTAsIDAsIHsweDI4LDB4YzAsMHgwYiwweDMwLDB4MGEsMHgyYywweDAwLDB4ODMsMHhjMiwweDIwLDB4YzAsMHgwYiwweDMwLDB4MmEsMHgyYywweDAwIH19LAorIHsxNiwgMHg5YTYwLCAwLCB7MHhiMywweDAwLDB4YTAsMHhjMCwweDA4LDB4MzAsMHgwMiwweGNhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWE3MCwgMCwgezB4YTAsMHgwMSwweDNjLDB4MDAsMHg4NywweDAxLDB4MmQsMHhjMiwweDA4LDB4ZjMsMHgxMiwweDNjLDB4MDAsMHg4ZiwweDAxLDB4MjEgfX0sCisgezE2LCAweDlhODAsIDAsIHsweGM4LDB4NjgsMHg3MiwweDIyLDB4MWUsMHgwNCwweDg3LDB4MjAsMHgyMSwweGM0LDB4MGIsMHg3MCwweDAyLDB4M2MsMHg4NCwweDlmIH19LAorIHsxNiwgMHg5YTkwLCAwLCB7MHgwMCwweDI1LDB4YzQsMHg0YiwweDcwLDB4MDIsMHgxYywweDA0LDB4YjcsMHg4MSwweDIxLDB4YzgsMHgwOCwweDcyLDB4MDIsMHhlOCB9fSwKKyB7MTYsIDB4OWFhMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDAsMHgxZSwweDAwLDB4YzcsMHg4MSwweDNjLDB4YTAgfX0sCisgezE2LCAweDlhYjAsIDAsIHsweDRjLDB4N2EsMHgwYiwweDFhLDB4MDAsMHhjNiwweDgwLDB4MzAsMHhlMCwweDA4LDB4ZjgsMHg4MiwweDBlLDB4NDAsMHhjZiwweGYwIH19LAorIHsxNiwgMHg5YWMwLCAwLCB7MHgzOSwweGU4LDB4MGYsMHgzYSwweDAzLDB4MWUsMHgyMCwweGM3LDB4ODAsMHgzMSwweGUzLDB4MGYsMHgzOCwweDIzLDB4MWYsMHgwOCB9fSwKKyB7MTYsIDB4OWFkMCwgMCwgezB4ZmYsMHhjMCwweDMzLDB4ZjIsMHgwYywweDdlLDB4MDMsMHhlYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlhZTAsIDAsIHsweDA4LDB4MTUsMHg4OCwweDBhLDB4N2IsMHgwMCwweDNlLDB4YzEsMHgwYiwweDM0LDB4MjMsMHhjOCwweDEwLDB4ZmIsMHgwMiwweDNlIH19LAorIHsxNiwgMHg5YWYwLCAwLCB7MHhjYSwweDBmLDB4YjcsMHg0MywweGVjLDB4ODAsMHhmYiwweDAwLDB4MmUsMHhjMiwweDBiLDB4YjQsMHg4MywweGVkLDB4ZDAsMHhmYSB9fSwKKyB7MTYsIDB4OWIwMCwgMCwgezB4MDAsMHgzZSwweGQ5LDB4MGYsMHhiMywweDgzLDB4ZWMsMHg4MCwweGJiLDB4MjAsMHgzZSwweGQ4LDB4MmYsMHhiNCwweDAzLDB4YzIgfX0sCisgezE2LCAweDliMTAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZmUsMHgwMCwweGY1LDB4OTEsMHgzMSwweGEwIH19LAorIHsxNiwgMHg5YjIwLCAwLCB7MHgwYywweGZjLDB4MDMsMHhmZSwweDAwLDB4YzQsMHg4MSwweDMxLDB4ZWUsMHg4ZCwweGY4LDB4MGEsMHgzZSwweDMwLDB4Y2YsMHg4NCB9fSwKKyB7MTYsIDB4OWIzMCwgMCwgezB4MzMsMHhlMCwweDJjLDB4ZjgsMHg4MywweGZlLDB4MTAsMHhmZSwweDgwLDB4MzMsMHhlMCwweDBjLDB4ZjksMHgxOSwweDNmLDB4NDggfX0sCisgezE2LCAweDliNDAsIDAsIHsweGNmLDB4YzAsMHgzMywweGUwLDB4MDQsMHhmYywweDAzLDB4YzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5YjUwLCAwLCB7MHhhOCwweDExLDB4OWMsMHgwOCwweGI3LDB4YTEsMHgyMSwweGM4LDB4MDgsMHg3MSwweDAyLDB4ZjAsMHhhMCwweDg1LDB4MjAsMHgyMSB9fSwKKyB7MTYsIDB4OWI2MCwgMCwgezB4Y2UsMHgwOCwweDcwLDB4MDIsMHgzYywweDgwLDB4OGYsMHgwMCwweDJiLDB4YzUsMHgwOCwweDcxLDB4MDIsMHhkYywweDEwLDB4YjQgfX0sCisgezE2LCAweDliNzAsIDAsIHsweDAwLDB4MjEsMHhjMSwweDBhLDB4ZjMsMHg4MiwweDBjLDB4MDAsMHg4NywweDAxLDB4MjksMHhjMCwweDA4LDB4NzEsMHgwMiwweDZhIH19LAorIHsxNiwgMHg5YjgwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDlkLDB4MDAsMHhiZCwweDIxLDB4MjcsMHg4MiB9fSwKKyB7MTYsIDB4OWI5MCwgMCwgezB4MDAsMHg3MCwweDAyLDB4ZmMsMHgwNCwweDhjLDB4MDAsMHhhNywweGNjLDB4YTgsMHg3MCwweDAyLDB4M2MsMHgwOCwweGFmLDB4MDAgfX0sCisgezE2LCAweDliYTAsIDAsIHsweDIxLDB4YzAsMHgwOCwweDcwLDB4MDIsMHhkYywweDAwLDB4YjcsMHgwMCwweDIxLDB4YzQsMHgwOCwweDcwLDB4MTYsMHgxYywweDBhIH19LAorIHsxNiwgMHg5YmIwLCAwLCB7MHg4ZiwweDAwLDB4MjEsMHhjMCwweDA4LDB4NzAsMHgwMiwweGMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWJjMCwgMCwgezB4MjAsMHgxMCwweGM4LDB4MDAsMHhiYiwweDQ0LDB4MjQsMHhlMiwweDA4LDB4YjEsMHgwMiwweGMyLDB4ODAsMHgwMSwweDgwLDB4MjQgfX0sCisgezE2LCAweDliZDAsIDAsIHsweGQwLDB4ODgsMHgzMCwweDAyLDB4MGYsMHg1MiwweDgzLDB4OTEsMHgyOCwweGU0LDB4ODgsMHgzZCwweDAyLDB4Y2UsMHhkMCwweGIwIH19LAorIHsxNiwgMHg5YmUwLCAwLCB7MHhiMiwweGEyLDB4YzAsMHgwYSwweDM0LDB4MTIsMHgwYywweDAyLDB4ODMsMHgwMCwweDI4LDB4YzAsMHgwOCwweDMwLDB4MDIsMHg0OCB9fSwKKyB7MTYsIDB4OWJmMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhYywweDAwLDB4ZmIsMHgwMSwweGU0LDB4NDAgfX0sCisgezE2LCAweDljMDAsIDAsIHsweDJjLDB4ZjAsMHg0MywweGU1LDB4MDAsMHg4YSwweDg4LDB4MzcsMHhlMCwweDAwLDB4ZmEsMHgwMiwweDNkLDB4MDAsMHhlZiwweDAwIH19LAorIHsxNiwgMHg5YzEwLCAwLCB7MHgzMywweGQxLDB4MGMsMHhmNCwweDAzLDB4ZmQsMHgwMCwweGY5LDB4NDAsMHgzMywweGU4LDB4MGMsMHhmYywweDAxLDB4M2MsMHgwNCB9fSwKKyB7MTYsIDB4OWMyMCwgMCwgezB4Y2YsMHgwMiwweDMzLDB4YzAsMHgyYywweGYwLDB4MDMsMHhlYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDljMzAsIDAsIHsweDgwLDB4MDAsMHhlZSwweDA4LDB4ZjksMHgxMCwweDNhLDB4ZDAsMHgwZiwweGIwLDB4OTMsMHhlYywweDAwLDB4ZmIsMHgwYiwweDNhIH19LAorIHsxNiwgMHg5YzQwLCAwLCB7MHhjMCwweDhlLDB4YjAsMHg4MywweGVjLDB4ODAsMHhmYiwweDA5LDB4N2UsMHhjOCwweDBmLDB4YjIsMHgxMywweGVjLDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4OWM1MCwgMCwgezB4MDAsMHgzZSwweGMyLDB4OGYsMHhiMiwweDRiLDB4Y2MsMHgwNCwweGZiLDB4MDAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4NjAgfX0sCisgezE2LCAweDljNjAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweGZmLDB4MDgsMHgzMywweGMwIH19LAorIHsxNiwgMHg5YzcwLCAwLCB7MHgxYywweGYwLDB4MDMsMHg3MCwweDQwLDB4YzQsMHhjMCwweDMzLDB4YzIsMHgwZiwweGYwLDB4MDMsMHgxYywweDEwLDB4YzcsMHgwMCB9fSwKKyB7MTYsIDB4OWM4MCwgMCwgezB4MzEsMHhjMCwweDBjLDB4NzAsMHgwMywweDFjLDB4MDAsMHhjNSwweDQxLDB4MzMsMHhjMCwweDBjLDB4ZjAsMHgyMywweDJjLDB4MDAgfX0sCisgezE2LCAweDljOTAsIDAsIHsweGNmLDB4MDAsMHhiMywweGMwLDB4NmMsMHhmMCwweDAzLDB4ODAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5Y2EwLCAwLCB7MHg4MSwweDA0LDB4NmEsMHgwMCwweGI5LDB4OTAsMHgzMiwweGYxLDB4MDgsMHhiMCwweDAyLDB4MGEsMHgxMCwweGQ5LDB4MDAsMHgyMiB9fSwKKyB7MTYsIDB4OWNiMCwgMCwgezB4YzEsMHgwYiwweGIwLDB4MDIsMHgyYywweDAwLDB4Y2IsMHgwNiwweDIyLDB4YzAsMHg4OCwweGIwLDB4MTIsMHgyYywweDAwLDB4ODggfX0sCisgezE2LCAweDljYzAsIDAsIHsweDgwLDB4MjIsMHhjMSwweDBkLDB4YjAsMHgwMiwweDJjLDB4MDAsMHg4MywweDAwLDB4MjIsMHhjMSwweDA4LDB4YjAsMHg0NiwweGUwIH19LAorIHsxNiwgMHg5Y2QwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMSwweDJlLDB4MDAsMHhiOSwweDAwLDB4MjIsMHhmMCB9fSwKKyB7MTYsIDB4OWNlMCwgMCwgezB4MDgsMHhiMCwweDEyLDB4NjQsMHgwMCwweDhhLDB4MDAsMHgyMiwweGMwLDB4MGIsMHgzMCwweDQyLDB4MmMsMHgwMCwweDhiLDB4MDAgfX0sCisgezE2LCAweDljZjAsIDAsIHsweDIyLDB4YzAsMHgwOCwweGIwLDB4MDIsMHgyYywweDAwLDB4OGEsMHgwMCwweDIyLDB4YzAsMHg4OCwweDMwLDB4MGEsMHgyYywweDAwIH19LAorIHsxNiwgMHg5ZDAwLCAwLCB7MHg4YiwweDAwLDB4MjAsMHhjMCwweDA4LDB4YjAsMHgwMiwweGUwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWQxMCwgMCwgezB4MDgsMHgwNCwweDBjLDB4MDQsMHhiMSwweDAyLDB4ZTQsMHhjMSwweDA4LDB4YjAsMHgyMiwweDIwLDB4MDIsMHg5MywweDAwLDB4MjAgfX0sCisgezE2LCAweDlkMjAsIDAsIHsweGMwLDB4MGIsMHgzMCwweDEyLDB4MGMsMHgwMiwweDgzLDB4MDIsMHhhMCwweGMwLDB4MjgsMHgzMCwweDBlLDB4MGMsMHgwMiwweDgwIH19LAorIHsxNiwgMHg5ZDMwLCAwLCB7MHgwMCwweGEwLDB4YzAsMHg0OSwweDMwLDB4MGEsMHgwYywweDAyLDB4OGIsMHgwMCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHhjMiB9fSwKKyB7MTYsIDB4OWQ0MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4ZjksMHgyNCwweDMyLDB4YzAgfX0sCisgezE2LCAweDlkNTAsIDAsIHsweDA4LDB4ZjAsMHgwMywweDY0LDB4MDAsMHhjOCwweDAwLDB4YjMsMHhjMCwweDFmLDB4ZjAsMHgwYiwweDNjLDB4MDAsMHg4ZiwweDAwIH19LAorIHsxNiwgMHg5ZDYwLCAwLCB7MHgzMywweGMwLDB4NGMsMHhmMCwweDQzLDB4M2MsMHgwOCwweGMzLDB4MDAsMHgzMSwweGMwLDB4MGMsMHhmMCwweDAzLDB4M2QsMHg0OCB9fSwKKyB7MTYsIDB4OWQ3MCwgMCwgezB4Y2YsMHgwMCwweDMxLDB4YzAsMHgwYywweGYwLDB4MDMsMHg4MCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDlkODAsIDAsIHsweGEwLDB4MWQsMHhmMCwweDA0LDB4ZjksMHg0MSwweDNiLDB4YzAsMHg0ZiwweGYwLDB4MDMsMHhmMCwweDExLDB4ZmQsMHgwMCwweDNmIH19LAorIHsxNiwgMHg5ZDkwLCAwLCB7MHhjMCwweDg3LDB4NzAsMHgyNywweGZjLDB4MDAsMHhlZiwweDA2LDB4M2YsMHhjMCwweDBmLDB4ZjAsMHgwMiwweGZjLDB4MDgsMHhmYyB9fSwKKyB7MTYsIDB4OWRhMCwgMCwgezB4MDAsMHgzZiwweGMwLDB4NDcsMHhmMCwweDQzLDB4ZmMsMHgwMCwweDc3LDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZTggfX0sCisgezE2LCAweDlkYjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZDIsMHgwMCwweGM3LDB4MDEsMHgzNywweDBjIH19LAorIHsxNiwgMHg5ZGMwLCAwLCB7MHgwZiwweGU4LDB4MjMsMHgxMCwweDRhLDB4YzQsMHhjMCwweDMxLDB4MzAsMHgwYywweGM5LDB4MDMsMHgzNCwweDQ2LDB4Y2YsMHgxMCB9fSwKKyB7MTYsIDB4OWRkMCwgMCwgezB4MzMsMHhkMCwweDBjLDB4ZjQsMHgwMywweDNjLDB4NTgsMHhjZiwweDAwLDB4MzMsMHhjMCwweDJkLDB4ZjEsMHgwMywweDNlLDB4MDIgfX0sCisgezE2LCAweDlkZTAsIDAsIHsweGNmLDB4MjEsMHgzZiwweGU0LDB4MGYsMHhmMiwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ZGYwLCAwLCB7MHg4MCwweDEwLDB4ZTQsMHg4NCwweDBiLDB4NDAsMHgyMiwweDRjLDB4MGIsMHhhOCwweDAyLDB4MmMsMHhjMCwweDhiLDB4MjAsMHgyMiB9fSwKKyB7MTYsIDB4OWUwMCwgMCwgezB4YzgsMHg0YSwweDMyLDB4MDIsMHgyNCwweDgwLDB4ODMsMHgyMCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHgyMCwweDAwLDB4OGIgfX0sCisgezE2LCAweDllMTAsIDAsIHsweDIxLDB4MzIsMHhjYSwweDQ4LDB4MzIsMHgwMiwweDJjLDB4MzAsMHg4ZiwweDkwLDB4MmUsMHg4OCwweDBiLDB4YmQsMHgxMiwweDIwIH19LAorIHsxNiwgMHg5ZTIwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNlLDB4MjAsMHhhMywweDQwLDB4ZTAsMHg0OCB9fSwKKyB7MTYsIDB4OWUzMCwgMCwgezB4NGIsMHgyMCwweDIyLDB4MGMsMHgwMiwweDgyLDB4MDAsMHgyYSwweDAwLDB4MDgsMHgyMCwweDAyLDB4MDQsMHg4MCwweDgwLDB4MjAgfX0sCisgezE2LCAweDllNDAsIDAsIHsweDIwLDB4YzgsMHgwOCwweDAyLDB4MDIsMHgwYywweDAwLDB4ODAsMHgwYywweDYwLDB4MDAsMHgwOCwweDIwLDB4MTIsMHgyYywweDg4IH19LAorIHsxNiwgMHg5ZTUwLCAwLCB7MHg4MywweDAwLDB4MmMsMHhlOCwweDBiLDB4MzAsMHgwMiwweDYyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWU2MCwgMCwgezB4YzAsMHgxNSwweGFlLDB4MDAsMHhhYiwweDAxLDB4YTIsMHg2MCwweDBiLDB4YTAsMHgwMiwweDIwLDB4MDEsMHg4MSwweDAwLDB4MjIgfX0sCisgezE2LCAweDllNzAsIDAsIHsweGMwLDB4MGEsMHg5MCwweDEyLDB4MDQsMHgyMCwweDhhLDB4MDgsMHgyMiwweGMxLDB4MDgsMHhhMCwweDAyLDB4MjgsMHgwMCwweDg4IH19LAorIHsxNiwgMHg5ZTgwLCAwLCB7MHgwMCwweDI0LDB4NDQsMHgwOCwweGEyLDB4MDIsMHhhYywweDAwLDB4OGIsMHgwNCwweDJlLDB4ODgsMHgwMywweGIwLDB4MDIsMHg3MCB9fSwKKyB7MTYsIDB4OWU5MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTUsMHhlYywweDAwLDB4ZWEsMHg5MCwweDMyLDB4MjggfX0sCisgezE2LCAweDllYTAsIDAsIHsweDBmLDB4YjYsMHgwMywweDIwLDB4MDgsMHhjOSwweDA0LDB4M2EsMHhjMCwweDRjLDB4OTAsMHgyMiwweDI0LDB4MDAsMHhjYiwweDQwIH19LAorIHsxNiwgMHg5ZWIwLCAwLCB7MHgzMiwweGE4LDB4MGMsMHhiMiwweDAzLDB4MmMsMHgwMCwweGNiLDB4ODAsMHhiMiwweGUwLDB4MGMsMHhiMCwweDBiLDB4MDQsMHgwMCB9fSwKKyB7MTYsIDB4OWVjMCwgMCwgezB4Y2IsMHgwMCwweDNlLDB4YzAsMHg0ZiwweGIwLDB4MGIsMHg1MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweDllZDAsIDAsIHsweGUwLDB4MDEsMHhiYywweDAwLDB4ZGYsMHg4MCwweDNiLDB4ODEsMHgwZiwweGYwLDB4YzMsMHhmYywweDAwLDB4YmUsMHgwMSwweDFmIH19LAorIHsxNiwgMHg5ZWUwLCAwLCB7MHgwMCwweDBmLDB4ZTAsMHgyMywweGY0LDB4MDAsMHhmZiwweDAwLDB4M2YsMHhiMCwweDRmLDB4ZjAsMHg0MywweGQ0LDB4MDIsMHhmZiB9fSwKKyB7MTYsIDB4OWVmMCwgMCwgezB4OTEsMHgzYSwweGUwLDB4NGUsMHhmMCwweDAzLDB4N2MsMHgwYywweGZmLDB4MDAsMHgyZiwweDgwLDB4MGYsMHgzMCwweDAzLDB4YjggfX0sCisgezE2LCAweDlmMDAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YWMsMHgwMSwweGNhLDB4MDAsMHg3MiwweDUwIH19LAorIHsxNiwgMHg5ZjEwLCAwLCB7MHgwNCwweGI0LDB4MDMsMHgyYywweDgyLDB4Y2IsMHgwMCwweDMyLDB4ZTAsMHgwYywweGI4LDB4MDMsMHgyNywweDA0LDB4YzgsMHhjOCB9fSwKKyB7MTYsIDB4OWYyMCwgMCwgezB4YjIsMHhhMiwweDBjLDB4ODgsMHgwMywweDJjLDB4MDAsMHhjMSwweDAwLDB4M2UsMHgwMCwweDJjLDB4MzAsMHgxYiwweDJjLDB4MDQgfX0sCisgezE2LCAweDlmMzAsIDAsIHsweGZiLDB4MTAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4MTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHg5ZjQwLCAwLCB7MHhjOCwweDA1LDB4MmMsMHgwNCwweDAzLDB4NTAsMHhhMiwweGUwLDB4MDgsMHgzNCwweDQyLDB4MzMsMHgwMCwweDg4LDB4MDAsMHgyMCB9fSwKKyB7MTYsIDB4OWY1MCwgMCwgezB4MTAsMHgwZCwweDg0LDB4MDMsMHgyNSwweDAwLDB4OGEsMHg0MCwweDIyLDB4OTAsMHgwOCwweGE1LDB4MDIsMHgyYywweDAwLDB4ODkgfX0sCisgezE2LCAweDlmNjAsIDAsIHsweGE0LDB4M2EsMHg0MCwweDA4LDB4YjAsMHgwMiwweDJjLDB4MDAsMHhiZiwweDg0LDB4MmUsMHg4MCwweDBiLDB4ZjAsMHg1MiwweDMyIH19LAorIHsxNiwgMHg5ZjcwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDZjLDB4ODAsMHg4MSwweDgwLDB4MjQsMHg4OCB9fSwKKyB7MTYsIDB4OWY4MCwgMCwgezB4ODksMHgzYywweDI2LDB4MjEsMHgwMCwweDkwLDB4MDAsMHgyMCwweDAyLDB4MDgsMHg4MCwweDgyLDB4MDAsMHgyMCwweDliLDB4MDAgfX0sCisgezE2LCAweDlmOTAsIDAsIHsweDIyLDB4NDAsMHg4OCwweGIwLDB4MTIsMHgwYywweDA4LDB4ODMsMHg4MCwweDJjLDB4YzAsMHgwOCwweDEwLDB4MDIsMHgwYywweDAwIH19LAorIHsxNiwgMHg5ZmEwLCAwLCB7MHhiMywweDgwLDB4MmMsMHg0MCwweDBiLDB4MzAsMHgwMiwweDM4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4OWZiMCwgMCwgezB4MjAsMHgwMSwweDNlLDB4MGEsMHg4NSwweGEwLDB4YTUsMHg2MCwweDA4LDB4ZmIsMHg4MiwweDNlLDB4ODQsMHg5ZiwweDgxLDB4NjMgfX0sCisgezE2LCAweDlmYzAsIDAsIHsweGUwLDB4ODksMHg3OSwweDEyLDB4NTIsMHg4MCwweDk3LDB4ODIsMHgyMSwweDZjLDB4MTgsMHg3OCwweDAyLDB4MTIsMHgwMCwweDg3IH19LAorIHsxNiwgMHg5ZmQwLCAwLCB7MHhhMSwweDI5LDB4ZTAsMHgwOCwweDViLDB4MDIsMHgxZSwweDAwLDB4YjcsMHhjMCwweDJkLDB4NjAsMHgwYiwweDc4LDB4MDIsMHgwOCB9fSwKKyB7MTYsIDB4OWZlMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwYywweDAwLDB4ODEsMHgwOCwweDI2LDB4YzIgfX0sCisgezE2LCAweDlmZjAsIDAsIHsweDJjLDB4MzIsMHgxMywweDBlLDB4YTQsMHhkMiwweDAwLDB4YjAsMHgwMCwweDFjLDB4MjEsMHgxMiwweDI0LDB4MDIsMHhkMSwweDIwIH19LAorIHsxNiwgMHhhMDAwLCAwLCB7MHgzMCwweGM4LDB4MGMsMHgxMCwweDAzLDB4MGMsMHgwMCwweGMyLDB4MTAsMHgzYywweDgwLDB4MGMsMHgyMywweDAzLDB4MGMsMHg0MCB9fSwKKyB7MTYsIDB4YTAxMCwgMCwgezB4ZjMsMHgwMCwweDNjLDB4NDgsMHgwZiwweDMwLDB4MGIsMHgxMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGEwMjAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZmQsMHgyMCwweGJiLDB4NDAsMHgwNywweDcyLDB4MDIsMHhmMCwweDEwLDB4ZWQsMHgxMCwweDNmIH19LAorIHsxNiwgMHhhMDMwLCAwLCB7MHhjNCwweDBmLDB4ZDEsMHg2MywweGI0LDB4ODAsMHhlZiwweDAwLDB4M2YsMHhjOCwweDBmLDB4ZjAsMHgwMywweGQ4LDB4MDAsMHhmZSB9fSwKKyB7MTYsIDB4YTA0MCwgMCwgezB4MzQsMHgzZiwweGM0LDB4MGYsMHhlYiwweDQzLDB4ZmMsMHgwMCwweGZmLDB4MDgsMHg3ZiwweDQwLDB4MGYsMHhmMSwweDgzLDB4ZDAgfX0sCisgezE2LCAweGEwNTAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZWMsMHgwMCwweGM4LDB4MDAsMHgzMywweDgwIH19LAorIHsxNiwgMHhhMDYwLCAwLCB7MHg4ZiwweDI4LDB4MDMsMHgyMCwweDAwLDB4NDksMHgwMiwweDMyLDB4YzAsMHgwZiwweDkwLDB4MDMsMHgyMCwweDAwLDB4Y2IsMHgwMCB9fSwKKyB7MTYsIDB4YTA3MCwgMCwgezB4MzIsMHg0MCwweDRjLDB4YjAsMHgwYiwweDJjLDB4MDAsMHhjYiwweDgwLDB4MzIsMHhjMCwweDBlLDB4OWUsMHgwMywweDI0LDB4MDAgfX0sCisgezE2LCAweGEwODAsIDAsIHsweGZiLDB4MjAsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4MmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMDkwLCAwLCB7MHg0OCwweDExLDB4OWMsMHgwMCwweDhkLDB4MDEsMHgyMSwweGMwLDB4MGIsMHg2MCwweDAyLDB4MWQsMHgwMCwweGQ2LDB4MDAsMHgyMSB9fSwKKyB7MTYsIDB4YTBhMCwgMCwgezB4MDAsMHgwYiwweGUwLDB4MDIsMHgwMCwweDAwLDB4ODMsMHgwNCwweDIwLDB4NDAsMHgwOCwweDcwLDB4NDIsMHgzNCwweDAyLDB4ODcgfX0sCisgezE2LCAweGEwYjAsIDAsIHsweDAxLDB4MjMsMHhjMCwweDI4LDB4NTEsMHgwYSwweDFjLDB4MDQsMHhiNywweDMwLDB4MmQsMHhjMCwweDBiLDB4NzIsMHgwMywweDkyIH19LAorIHsxNiwgMHhhMGMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDllLDB4MDAsMHhhNiwweDQwLDB4MjEsMHhhMCB9fSwKKyB7MTYsIDB4YTBkMCwgMCwgezB4MGIsMHg2OCwweDAyLDB4MGUsMHgwMCwweDhmLDB4ODAsMHgyMSwweGUwLDB4MGIsMHg3OCwweDAyLDB4MTYsMHgxMCwweGE1LDB4ODAgfX0sCisgezE2LCAweGEwZTAsIDAsIHsweDIxLDB4ZTAsMHgwOCwweDE4LDB4MDIsMHgxZSwweDAwLDB4ODMsMHg4MCwweDIxLDB4YTAsMHgwOCwweDc4LDB4MDIsMHgxZiwweDAwIH19LAorIHsxNiwgMHhhMGYwLCAwLCB7MHhiNywweDgwLDB4MmQsMHhlMCwweDBiLDB4MzgsMHgwMiwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTEwMCwgMCwgezB4NDgsMHgxNCwweGVjLDB4MTIsMHhhMSwweDY0LDB4MjAsMHhlNiwweDBiLDB4MjAsMHgwMiwweDAwLDB4MTAsMHg5MCwweDRhLDB4MjAgfX0sCisgezE2LCAweGExMTAsIDAsIHsweDIwLDB4NGIsMHgwMCwweDQyLDB4MDQsMHgwMCwweDgzLDB4MDAsMHgyMCwweGMyLDB4MDgsMHgzMCwweDAyLDB4OGMsMHgwMCwweDgzIH19LAorIHsxNiwgMHhhMTIwLCAwLCB7MHgwNCwweDIwLDB4YzAsMHgwOCwweDMwLDB4MDIsMHgwZSwweDAwLDB4YjMsMHgwMCwweDJjLDB4ZTAsMHg0YiwweDMwLDB4MDIsMHg5MiB9fSwKKyB7MTYsIDB4YTEzMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOCwweDAwLDB4ZWUsMHhjMCwweDMzLDB4OTAgfX0sCisgezE2LCAweGExNDAsIDAsIHsweDBmLDB4YTAsMHgxYiwweDA4LDB4MDAsMHhjYSwweDQwLDB4YjIsMHg4MiwweDBmLDB4YTAsMHgwYiwweDI4LDB4MDIsMHhjYSwweDAwIH19LAorIHsxNiwgMHhhMTUwLCAwLCB7MHhiMiwweDkwLDB4YWMsMHhhMCwweDAzLDB4MjksMHgwMCwweGNhLDB4NDAsMHhiMiwweDgwLDB4OGUsMHhhNCwweDAzLDB4MmEsMHgwMCB9fSwKKyB7MTYsIDB4YTE2MCwgMCwgezB4ZmEsMHgwMCwweDNmLDB4YTgsMHgwZiwweGEwLDB4MGIsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGExNzAsIDAsIHsweDQ4LDB4MDAsMHhlMiwweDAyLDB4OTAsMHgwMCwweDNlLDB4MDAsMHgwZiwweDg4LDB4MDMsMHhmMSwweDAwLDB4ZmMsMHgwMiwweDNmIH19LAorIHsxNiwgMHhhMTgwLCAwLCB7MHgyMCwweDBmLDB4YzgsMHgwMywweGMxLDB4MDAsMHhmMCwweDAwLDB4M2UsMHgwMCwweDhmLDB4MDAsMHgwMSwweDYwLDB4MDIsMHhmOCB9fSwKKyB7MTYsIDB4YTE5MCwgMCwgezB4MDgsMHgzZSwweDAwLDB4MGYsMHg4MCwweDgzLDB4ZTAsMHgwMCwweGY4LDB4MDAsMHgyZSwweDAwLDB4OGYsMHg4MCwweDEzLDB4OTIgfX0sCisgezE2LCAweGExYTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHgwMiwweGM5LDB4MDAsMHhiMiwweDY0IH19LAorIHsxNiwgMHhhMWIwLCAwLCB7MHgwZiwweDkxLDB4MDMsMHhlNCwweDA0LDB4YzksMHgwMCwweDMyLDB4NDAsMHg2YywweDkwLDB4MDMsMHgyNSwweDAyLDB4YzksMHg5MCB9fSwKKyB7MTYsIDB4YTFjMCwgMCwgezB4YjAsMHg0MCwweDBjLDB4OTAsMHgwMywweDI0LDB4MjAsMHhjOSwweGEwLDB4M2UsMHg0MCwweDRjLDB4OTAsMHgyMywweGU0LDB4MDAgfX0sCisgezE2LCAweGExZDAsIDAsIHsweGYxLDB4MDAsMHg5MiwweDQwLDB4MGMsMHgxMCwweDAzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMWUwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4ODAsMHhhMiwweDQwLDB4MGIsMHg5NiwweDQyLDB4ZTUsMHgwNCwweDg5LDB4MDAsMHgyMiB9fSwKKyB7MTYsIDB4YTFmMCwgMCwgezB4NDAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDA4LDB4MDksMHg0MSwweDIyLDB4NDAsMHg0OCwweDkwLDB4NDIsMHgyNCwweDA0LDB4ODkgfX0sCisgezE2LCAweGEyMDAsIDAsIHsweDgwLDB4MjYsMHg0MCwweDA4LDB4OTAsMHgwMiwweGU0LDB4MDAsMHhiOSwweDAwLDB4MjIsMHg0MCwweDA4LDB4OTQsMHgwMiwweDIwIH19LAorIHsxNiwgMHhhMjEwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDI1LDB4MDAsMHg4OSwweDIwLDB4MjIsMHg0MCB9fSwKKyB7MTYsIDB4YTIyMCwgMCwgezB4MGIsMHg5MCwweDAyLDB4ZjQsMHg4NCwweDg1LDB4MDAsMHgyMSwweDQwLDB4NDgsMHg1MCwweDAyLDB4MjQsMHgyMCwweDhkLDB4MDggfX0sCisgezE2LCAweGEyMzAsIDAsIHsweDIzLDB4NDAsMHgwOCwweGQwLDB4MDIsMHg5NCwweDAwLDB4OGQsMHgwMCwweDI5LDB4NDAsMHgwYSwweGQwLDB4MDIsMHhhNCwweDA4IH19LAorIHsxNiwgMHhhMjQwLCAwLCB7MHhiOSwweDAwLDB4MjgsMHg0MCwweDE4LDB4OTAsMHhjMiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTI1MCwgMCwgezB4MDgsMHgwNCwweDA1LDB4MDAsMHg4MSwweDAwLDB4MjAsMHg1MSwweDBiLDB4MTAsMHgwMiwweGY1LDB4ODAsMHg4NSwweGMxLDB4YTEgfX0sCisgezE2LCAweGEyNjAsIDAsIHsweDUwLDB4MDgsMHg1NCwweDBhLDB4MDUsMHgwNiwweDg1LDB4NDAsMHgyMSwweDUwLDB4ODgsMHg1NCwweDAyLDB4OTUsMHgwMCwweDg1IH19LAorIHsxNiwgMHhhMjcwLCAwLCB7MHg0NCwweDJkLDB4NTAsMHgyYSwweDU0LDB4MTIsMHhjNSwweDAxLDB4YjEsMHgwMCwweDA4LDB4NTAsMHgwOCwweDEwLDB4MDIsMHgwMiB9fSwKKyB7MTYsIDB4YTI4MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4Y2EsMHg1MCwweDMyLDB4ODAgfX0sCisgezE2LCAweGEyOTAsIDAsIHsweDBmLDB4ODAsMHgwMywweGU4LDB4MDIsMHhjOCwweDAxLDB4MzIsMHgwMCwweDJjLDB4YzAsMHgwMywweDIwLDB4MDAsMHhjOCwweDAyIH19LAorIHsxNiwgMHhhMmEwLCAwLCB7MHgzMiwweDAwLDB4MmMsMHg4MCwweDBiLDB4YTAsMHgwMCwweGM4LDB4MDAsMHgzYSwweDAwLDB4NGUsMHg0MCwweDIzLDB4YTAsMHgwOCB9fSwKKyB7MTYsIDB4YTJiMCwgMCwgezB4ZjgsMHgwMCwweDNhLDB4MDAsMHgyYywweDgwLDB4MGIsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGEyYzAsIDAsIHsweDk4LDB4MWQsMHhkYywweDA0LDB4ZmQsMHg0MCwweDNmLDB4NTAsMHg0ZiwweDkwLDB4NjMsMHhlNCwweDQwLDB4ZjEsMHgwMiwweDNlIH19LAorIHsxNiwgMHhhMmQwLCAwLCB7MHg0MSwweDBmLDB4OTAsMHgxMywweGY1LDB4MDQsMHhmOSwweDQxLDB4M2UsMHg1MCwweDBmLDB4OTQsMHg0MywweDY1LDB4MDIsMHhmOSB9fSwKKyB7MTYsIDB4YTJlMCwgMCwgezB4NDEsMHgzNiwweDUwLDB4NGQsMHg5NCwweDAzLDB4ZjQsMHgwMCwweGY5LDB4NDEsMHgzNywweDQwLDB4NGYsMHg5NCwweDAzLDB4ZTYgfX0sCisgezE2LCAweGEyZjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAxLDB4ZmMsMHgwMCwweGNkLDB4YTgsMHgzMywweDcwIH19LAorIHsxNiwgMHhhMzAwLCAwLCB7MHgwZiwweGQwLDB4MTMsMHhmNiwweDg4LDB4Y2QsMHgwMCwweDMyLDB4NTAsMHg0ZiwweDE0LDB4MjMsMHgwNywweGEwLDB4YzksMHhjMCB9fSwKKyB7MTYsIDB4YTMxMCwgMCwgezB4MzIsMHg3OCwweDBjLDB4OWUsMHgwMywweDM3LDB4MDIsMHhjZCwweGMwLDB4MzIsMHg2NCwweDBmLDB4OTgsMHgwMywweDI0LDB4MDAgfX0sCisgezE2LCAweGEzMjAsIDAsIHsweGNkLDB4MDAsMHgzMiwweDQwLDB4MmMsMHhkYSwweDAzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhMzMwLCAwLCB7MHgzOCwweDEwLDB4ZTIsMHgwOCwweDg4LDB4ZWIsMHgyMiwweDMwLDB4MGIsMHg4MCwweDEyLDB4ZTgsMHgwNCwweGEwLDB4YTAsMHgyYSB9fSwKKyB7MTYsIDB4YTM0MCwgMCwgezB4MjAsMHgwYiwweDhhLDB4MGEsMHgyMywweDAwLDB4ODgsMHg4MCwweDIyLDB4MjgsMHgwMCwweGM4LDB4NDIsMHgyMywweDgwLDB4ODAgfX0sCisgezE2LCAweGEzNTAsIDAsIHsweGQ0LDB4MjAsMHgyOCwweDA5LDB4ODAsMHgwMiwweDIyLDB4OTQsMHhhOCwweDAwLDB4MmEsMHgwMCwweDg4LDB4ODUsMHgwMiwweDBlIH19LAorIHsxNiwgMHhhMzYwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNSwweGM0LDB4YTAsMHg4MywweDAwLDB4MjQsMHhkOCB9fSwKKyB7MTYsIDB4YTM3MCwgMCwgezB4OGIsMHgxMCwweDAyLDB4ZTUsMHgxNCwweDg5LDB4MGEsMHgyMSwweDQ4LDB4MGIsMHg1MiwweDAyLDB4NTQsMHg4MCwweDg1LDB4NDAgfX0sCisgezE2LCAweGEzODAsIDAsIHsweDI1LDB4NTgsMHgwOSwweDU2LDB4MDIsMHg0NSwweDAyLDB4ODEsMHgyMCwweDIwLDB4NTAsMHgwYiwweDE0LDB4MDIsMHgwNCwweDMwIH19LAorIHsxNiwgMHhhMzkwLCAwLCB7MHg4MSwweDAwLDB4MjAsMHg0MCwweDA4LDB4MTAsMHgwMiwweDQyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTNhMCwgMCwgezB4MTgsMHgxNSwweGE0LDB4MTIsMHg4OSwweDAwLDB4YTYsMHg0MCwweDBiLDB4OTAsMHg0MiwweGU0LDB4OTgsMHhhOSwweDgwLDB4MmIgfX0sCisgezE2LCAweGEzYjAsIDAsIHsweDQwLDB4MGIsMHg1MSwweDAyLDB4NTUsMHgwMCwweDlkLDB4MDgsMHgyNywweDQ4LDB4MDksMHhmNiwweDAyLDB4NDQsMHgwMCwweDgxIH19LAorIHsxNiwgMHhhM2MwLCAwLCB7MHgwNCwweDIyLDB4NDAsMHgxOSwweDkxLDB4OGEsMHgyNCwweDgwLDB4YTksMHgwMCwweDJhLDB4NDAsMHgwOCwweDkwLDB4MDIsMHg0NiB9fSwKKyB7MTYsIDB4YTNkMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNywweDAyLDB4YzksMHgwNCwweDM2LDB4NTggfX0sCisgezE2LCAweGEzZTAsIDAsIHsweDBmLDB4OTAsMHgwMywweGM1LDB4MDAsMHhjOSwweDAwLDB4MzIsMHg0MCwweDBmLDB4OTAsMHgxMywweDY0LDB4MDIsMHhjOSwweDAwIH19LAorIHsxNiwgMHhhM2YwLCAwLCB7MHgzNiwweDQwLDB4MmQsMHg5MCwweDBiLDB4NjYsMHgwNCwweGM5LDB4ZTAsMHhiMiwweDQ4LDB4OGYsMHg5OCwweDQ3LDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4YTQwMCwgMCwgezB4YzksMHgwMCwweDcyLDB4NDAsMHgwYywweDEwLDB4MDMsMHg2OCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE0MTAsIDAsIHsweDI4LDB4MDEsMHhhNSwweDA4LDB4ZjksMHgyMSwweDNhLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhlNiwweDA0LDB4ZjksMHgwMCwweDNlIH19LAorIHsxNiwgMHhhNDIwLCAwLCB7MHg0MCwweDRmLDB4OTgsMHg4MywweGE0LDB4MDAsMHhlOSwweDQwLDB4YmEsMHg2MCwweDBlLDB4OTAsMHgwMywweGE0LDB4ODAsMHhmOSB9fSwKKyB7MTYsIDB4YTQzMCwgMCwgezB4YTMsMHgzZSwweDQ4LDB4MGYsMHg5OCwweDBiLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgxZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4OGEgfX0sCisgezE2LCAweGE0NDAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTIsMHg0OCwweGM4LDB4MjAsMHgzMiwweDA4IH19LAorIHsxNiwgMHhhNDUwLCAwLCB7MHgxZiwweDgwLDB4ODMsMHhlMSwweDIyLDB4YzgsMHgwMSwweDMzLDB4MDAsMHgyYywweGMwLDB4MDMsMHgzMCwweDA0LDB4Y2MsMHg0MCB9fSwKKyB7MTYsIDB4YTQ2MCwgMCwgezB4YjEsMHgwMCwweDBjLDB4NDQsMHgwMywweDIwLDB4MTIsMHhjOCwweDQxLDB4MzIsMHgwMCwweDJkLDB4ODQsMHgwYiwweDYwLDB4MDAgfX0sCisgezE2LCAweGE0NzAsIDAsIHsweGY4LDB4MDAsMHhiMiwweDAwLDB4NGMsMHg4MCwweDBiLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNDgwLCAwLCB7MHgyOCwweDA1LDB4M2EsMHgwMCwweGE2LDB4MDAsMHgyMywweDkwLDB4MDMsMHhlNCwweDkyLDB4ZjgsMHgwMCwweDgyLDB4MDAsMHgzNiB9fSwKKyB7MTYsIDB4YTQ5MCwgMCwgezB4ODAsMHgwOCwweGEwLDB4MDMsMHg2OCwweDAwLDB4Y2EsMHgwMCwweDIyLDB4ODMsMHgwOCwweGEwLDB4MDIsMHgyOCwweDAzLDB4OGEgfX0sCisgezE2LCAweGE0YTAsIDAsIHsweDAwLDB4MjIsMHg4MCwweDA4LDB4YTAsMHgwMiwweDI4LDB4MDAsMHhiNiwweDgwLDB4MjIsMHg4MCwweDBkLDB4ZTgsMHgwMiwweDBhIH19LAorIHsxNiwgMHhhNGIwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDZlLDB4MDAsMHg4MiwweDQyLDB4MjAsMHhjMCB9fSwKKyB7MTYsIDB4YTRjMCwgMCwgezB4MGIsMHgzNCwweDAyLDB4Y2QsMHgwOSwweDgwLDB4MDAsMHgyMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMiwweDk4LDB4MDAgfX0sCisgezE2LCAweGE0ZDAsIDAsIHsweDIwLDB4MjAsMHgyOCwweDAwLDB4MGEsMHgwNCwweDEwLDB4ODEsMHg4MCwweDIwLDB4YzAsMHgwOCwweGIwLDB4MDIsMHgyYywweDAwIH19LAorIHsxNiwgMHhhNGUwLCAwLCB7MHhiMywweDAwLDB4MjIsMHhjMCwweDE4LDB4MzEsMHgwMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTRmMCwgMCwgezB4YTAsMHgwMSwweDM4LDB4MDIsMHhhMywweDAwLDB4MjEsMHg0MCwweDFiLDB4NzAsMHgwMiwweGRjLDB4MjAsMHg4NCwweDA1LDB4NjUgfX0sCisgezE2LCAweGE1MDAsIDAsIHsweGUwLDB4MDgsMHhmMCwweDAyLDB4N2MsMHgxMCwweDk3LDB4MDAsMHgyNCwweGMwLDB4MDgsMHgzMCwweDAyLDB4NTQsMHg4OCwweDg3IH19LAorIHsxNiwgMHhhNTEwLCAwLCB7MHgwOSwweDIxLDB4ZTgsMHgwOSwweDMzLDB4MDIsMHgxYywweDgwLDB4YjYsMHgwOCwweDYzLDB4YzgsMHgwOSwweDM4LDB4MTIsMHgyOCB9fSwKKyB7MTYsIDB4YTUyMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgxZSwweDAwLDB4YzcsMHhhMCwweGExLDB4ZTAgfX0sCisgezE2LCAweGE1MzAsIDAsIHsweDBiLDB4NzgsMHgwMywweGZlLDB4MDAsMHhjNSwweDgyLDB4MzMsMHgyMCwweDBjLDB4NDgsMHgwMywweDFlLDB4MDEsMHhkZiwweDgwIH19LAorIHsxNiwgMHhhNTQwLCAwLCB7MHgzMSwweDIwLDB4MGMsMHg0OCwweDAzLDB4MDYsMHg0MCwweDg3LDB4ODIsMHgzMSwweGY4LDB4MGQsMHg3YiwweDAzLDB4NWYsMHgwMCB9fSwKKyB7MTYsIDB4YTU1MCwgMCwgezB4ZjMsMHg4MCwweDMxLDB4ZjIsMHgwYywweDYwLDB4MDMsMHgyYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE1NjAsIDAsIHsweDA4LDB4MWQsMHg5YywweDAwLDB4ZmIsMHgwMSwweDJmLDB4NDAsMHgwNywweGIwLDB4MDMsMHhlOCwweDA0LDB4ZjksMHgwMCwweDNlIH19LAorIHsxNiwgMHhhNTcwLCAwLCB7MHhjMSwweDBmLDB4YjAsMHgwMywweGUwLDB4MDYsMHhlOCwweDAyLDB4M2EsMHhjMCwweDBmLDB4YjAsMHgwMSwweGE0LDB4MTAsMHhmOSB9fSwKKyB7MTYsIDB4YTU4MCwgMCwgezB4NDAsMHhiZSwweGQwLDB4MDYsMHhiMCwweDAzLDB4ZWUsMHgwMCwweGZhLDB4MDAsMHgzYywweGQ4LDB4MGYsMHhhMCwweDAzLDB4YzIgfX0sCisgezE2LCAweGE1OTAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4ZjYsMHgwMCwweGNmLDB4ODgsMHgzMywweDY0IH19LAorIHsxNiwgMHhhNWEwLCAwLCB7MHgyYywweGY4LDB4MDMsMHhmZSwweDAyLDB4YzQsMHhiMCwweDMzLDB4MjAsMHg4YywweGQ4LDB4MDMsMHgzMiwweDAwLDB4Y2MsMHhiNCB9fSwKKyB7MTYsIDB4YTViMCwgMCwgezB4MzMsMHhhMCwweDBjLDB4YzgsMHgwMywweDE2LDB4MjAsMHhjZiwweGMwLDB4MzMsMHhmMCwweDBjLDB4ZjgsMHgwMywweGZlLDB4MDAgfX0sCisgezE2LCAweGE1YzAsIDAsIHsweGNkLDB4ODAsMHgzZiwweGUwLDB4MGYsMHhkOCwweDAzLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNWQwLCAwLCB7MHhhOCwweDExLDB4YjUsMHgwNCwweDg3LDB4MTIsMHhhMSwweDUwLDB4MGEsMHg3NCwweDEyLDB4YzQsMHg0MCwweDg0LDB4MTEsMHgyMyB9fSwKKyB7MTYsIDB4YTVlMCwgMCwgezB4YzAsMHgyOCwweGUwLDB4MDIsMHgxYywweDAyLDB4YTcsMHgxMSwweDIxLDB4NTgsMHg0OCwweDcwLDB4MGEsMHgxNCwweDAwLDB4OGQgfX0sCisgezE2LCAweGE1ZjAsIDAsIHsweDAwLDB4MjMsMHhjMCwweDBiLDB4NzAsMHgwMiwweGZjLDB4NDAsMHg4NiwweDAwLDB4MmQsMHhjMCwweDBiLDB4NTAsMHgwMiwweDJhIH19LAorIHsxNiwgMHhhNjAwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDk1LDB4MDAsMHg4NywweDQwLDB4MjEsMHgwMCB9fSwKKyB7MTYsIDB4YTYxMCwgMCwgezB4MTgsMHg3MSwweDAyLDB4ZGMsMHgwMCwweDk1LDB4MjgsMHhlMSwweDAyLDB4MDgsMHg1MCwweDAyLDB4M2MsMHg0MiwweGE3LDB4MjIgfX0sCisgezE2LCAweGE2MjAsIDAsIHsweDIxLDB4ODAsMHg4OCwweDQxLDB4MDIsMHgxNCwweDAwLDB4ODUsMHgwMCwweGExLDB4YzAsMHgwOSwweDcxLDB4MDIsMHhkYywweDAwIH19LAorIHsxNiwgMHhhNjMwLCAwLCB7MHhiNSwweDEwLDB4MmQsMHhjMCwweDBiLDB4NDAsMHgwMiwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTY0MCwgMCwgezB4MjAsMHgxNCwweGM0LDB4MTAsMHg4MywweDg0LDB4MjAsMHgxMSwweDA4LDB4MzAsMHgwMiwweGMzLDB4MTAsMHg5MSwweDIwLDB4MjAgfX0sCisgezE2LCAweGE2NTAsIDAsIHsweGMwLDB4MDgsMHgyOCwweDEyLDB4MDAsMHgwMCwweGEwLDB4ODQsMHgyMCwweDQwLDB4MDgsMHgzMCwweDAyLDB4MDQsMHgyNiwweDgzIH19LAorIHsxNiwgMHhhNjYwLCAwLCB7MHgwMCwweDIwLDB4ZDAsMHgwYiwweDMwLDB4MDIsMHhjYywweDAwLDB4YjIsMHgwMCwweDJjLDB4YzAsMHgwYiwweDAwLDB4MDIsMHgwOCB9fSwKKyB7MTYsIDB4YTY3MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhhZCwweDAwLDB4Y2YsMHg4OCwweGIyLDB4ZTggfX0sCisgezE2LCAweGE2ODAsIDAsIHsweDBjLDB4MzAsMHgxMywweGNlLDB4YzIsMHhkMCwweDgyLDB4MzIsMHgwMCwweDBjLDB4MGUsMHgwYiwweDIwLDB4MDAsMHhjOCwweDg4IH19LAorIHsxNiwgMHhhNjkwLCAwLCB7MHhiMiwweDQwLDB4MmMsMHhiYSwweDQzLDB4MzcsMHgwMiwweGNiLDB4MDAsMHhiMywweGMwLDB4MmMsMHhmMCwweDAzLDB4ZmMsMHgxMiB9fSwKKyB7MTYsIDB4YTZhMCwgMCwgezB4ZmIsMHgwMCwweDdmLDB4ZDEsMHgwZiwweDMwLDB4MGIsMHgyYiwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE2YjAsIDAsIHsweDgwLDB4MDAsMHhlZCwweDAyLDB4ZjEsMHg0MCwweDNlLDB4NDEsMHgwZiwweGIwLDB4MjMsMHhlZCwweDAwLDB4ZTgsMHgwMSwweDNlIH19LAorIHsxNiwgMHhhNmMwLCAwLCB7MHhjOCwweDBmLDB4YjAsMHgxMywweGVjLDB4MDQsMHhkYiwweDAwLDB4M2MsMHg4MCwweDBmLDB4MDQsMHgwMywweGU0LDB4NDAsMHhmOSB9fSwKKyB7MTYsIDB4YTZkMCwgMCwgezB4MDAsMHgzYywweGMyLDB4MGUsMHhiMCwweDAzLDB4ZWUsMHgwMCwweDRiLDB4NDEsMHgzZSwweGMwLDB4MGYsMHhiMCwweDAzLDB4ZTAgfX0sCisgezE2LCAweGE2ZTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZmMsMHgwMCwweDRiLDB4MDAsMHgzMiwweDQyIH19LAorIHsxNiwgMHhhNmYwLCAwLCB7MHgwYywweGYwLDB4MDMsMHgzNiwweDgwLDB4Y2QsMHgwMCwweDMzLDB4MDAsMHg0YywweGMwLDB4ODMsMHgzYywweDA0LDB4ZjcsMHgwMCB9fSwKKyB7MTYsIDB4YTcwMCwgMCwgezB4MzIsMHg0MCwweDBjLDB4YjEsMHg0MywweDE0LDB4MDAsMHhjZCwweDgwLDB4MzMsMHhjMCwweDBjLDB4ZjAsMHgwMywweGZjLDB4MDAgfX0sCisgezE2LCAweGE3MTAsIDAsIHsweGZmLDB4MDAsMHhiMywweGMyLDB4MGMsMHhhMCwweDAzLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhNzIwLCAwLCB7MHg4MSwweDA0LDB4NGYsMHgwMiwweDhiLDB4ODAsMHgyMCwweDMwLDB4MDgsMHhiYywweDAyLDB4MjAsMHgxMCwweDg5LDB4MDAsMHgyMiB9fSwKKyB7MTYsIDB4YTczMCwgMCwgezB4YzAsMHgwMCwweGIwLDB4MDMsMHg2MCwweDA0LDB4YjgsMHgwMCwweGEyLDB4OTAsMHgyOCwweDhjLDB4MWEsMHgyNCwweDAyLDB4OGIgfX0sCisgezE2LCAweGE3NDAsIDAsIHsweDgzLDB4MjIsMHhjMSwweDA4LDB4YjAsMHgwMiwweGZjLDB4MDAsMHhiMywweDYwLDB4MjAsMHhjMCwweDBkLDB4YTAsMHgwMywweGUwIH19LAorIHsxNiwgMHhhNzUwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDJlLDB4MDAsMHhhYiwweGMwLDB4MjIsMHg2MCB9fSwKKyB7MTYsIDB4YTc2MCwgMCwgezB4MDgsMHhiOCwweDAyLDB4MjksMHgwMCwweDg4LDB4MDEsMHgyMCwweDAwLDB4MDgsMHg5MCwweDAyLDB4MjAsMHgwMCwweGI4LDB4MDAgfX0sCisgezE2LCAweGE3NzAsIDAsIHsweDIyLDB4YzAsMHgwOCwweGIwLDB4MDIsMHhlNCwweDAwLDB4ODEsMHgyNCwweGEyLDB4YzAsMHgwOSwweGIwLDB4NDYsMHhlYywweDAwIH19LAorIHsxNiwgMHhhNzgwLCAwLCB7MHhiOSwweDAwLDB4MjIsMHhjMCwweDA4LDB4OTAsMHgwMiwweDIwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YTc5MCwgMCwgezB4MDgsMHgwNCwweDJjLDB4MDAsMHhhMSwweDAwLDB4YTAsMHg0MSwweDA4LDB4YjAsMHgwYSwweDIwLDB4NTMsMHg4OCwweDAwLDB4MjAgfX0sCisgezE2LCAweGE3YTAsIDAsIHsweGMwLDB4MjgsMHhhMCwweDAyLDB4NGMsMHgwMCwweGIzLDB4MDAsMHgyMCwweDAwLDB4ODgsMHgwMCwweDAyLDB4ODQsMHgwMCwweDgzIH19LAorIHsxNiwgMHhhN2IwLCAwLCB7MHgwNCwweDIwLDB4YzAsMHgyOCwweDMwLDB4MDIsMHhjYywweDAwLDB4YjMsMHgwMiwweDYyLDB4YzAsMHgwOSwweDEwLDB4MDIsMHhjMiB9fSwKKyB7MTYsIDB4YTdjMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2YywweDAwLDB4ZTksMHgwMCwweDIyLDB4MDAgfX0sCisgezE2LCAweGE3ZDAsIDAsIHsweDBjLDB4YjAsMHgwMywweDAwLDB4MDQsMHhjOSwweDAwLDB4YjIsMHgwMCwweDBjLDB4OTAsMHgwMywweDJjLDB4MDAsMHhmMywweDAwIH19LAorIHsxNiwgMHhhN2UwLCAwLCB7MHhiMiwweGMwLDB4OGMsMHhiMCwweDAzLDB4YjQsMHgwMiwweDhmLDB4MDAsMHgyMywweGMwLDB4MDQsMHhmMCwweDAzLDB4ZWMsMHgwOCB9fSwKKyB7MTYsIDB4YTdmMCwgMCwgezB4ZjksMHgwMCwweDMzLDB4YzAsMHgwYywweDgwLDB4MDMsMHgwMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE4MDAsIDAsIHsweGEwLDB4MWQsMHhmYywweDEwLDB4ZGQsMHgwNCwweDNmLDB4MDAsMHgwZiwweGMwLDB4MjMsMHhmMCwweDkwLDB4ZmQsMHgwMCwweDJmIH19LAorIHsxNiwgMHhhODEwLCAwLCB7MHhjMCwweDBmLDB4ZTAsMHg0MywweGQwLDB4MDAsMHhmYywweDAwLDB4M2YsMHgwMCwweDhmLDB4YzAsMHgyMiwweDc0LDB4MDAsMHhmZCB9fSwKKyB7MTYsIDB4YTgyMCwgMCwgezB4MDQsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZmMsMHgwMCwweGZmLDB4MDYsMHgzZiwweGMwLDB4MGYsMHhjMCwweDQzLDB4ZTggfX0sCisgezE2LCAweGE4MzAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZmMsMHg4MCwweGVmLDB4MjAsMHgxMSwweGMwIH19LAorIHsxNiwgMHhhODQwLCAwLCB7MHgwZSwweDcyLDB4MDMsMHhiZCwweGIwLDB4Y2YsMHgzMSwweGJmLDB4Y2MsMHgwMiwweGYwLDB4MDMsMHhmYywweGM2LDB4Y2YsMHgwMSB9fSwKKyB7MTYsIDB4YTg1MCwgMCwgezB4MGIsMHhjNSwweDBmLDB4ZjEsMHgwMywweDNjLDB4MDQsMHhlZiwweDYxLDB4MzMsMHhkOCwweDA3LDB4ZjAsMHgwMywweDM0LDB4ODAgfX0sCisgezE2LCAweGE4NjAsIDAsIHsweGNkLDB4MzAsMHg3MywweGNjLDB4MGYsMHhlOCwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhODcwLCAwLCB7MHg4MCwweDE4LDB4ZTksMHgwMCwweDg4LDB4NjksMHgyMiwweDEwLDB4MDgsMHg4YywweDAwLDB4MjEsMHg4NCwweDg4LDB4NDEsMHgyMiB9fSwKKyB7MTYsIDB4YTg4MCwgMCwgezB4MTAsMHg4OCwweDg2LDB4OTIsMHgwMSwweDAwLDB4ODgsMHg2MiwweDIyLDB4MTAsMHg0YiwweDg3LDB4MDIsMHgyMSwweGEwLDB4ODggfX0sCisgezE2LCAweGE4OTAsIDAsIHsweDYwLDB4MjAsMHgxMCwweDBiLDB4ODYsMHhhMiwweDM1LDB4YTAsMHhhYiwweDYwLDB4YTEsMHhjNCwweDBiLDB4YjgsMHgwMiwweDIwIH19LAorIHsxNiwgMHhhOGEwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGNkLDB4YTgsMHgzMywweDQxLDB4MjAsMHhjNiB9fSwKKyB7MTYsIDB4YThiMCwgMCwgezB4NGEsMHgzMSwweDAwLDB4OGMsMHgxMCwweDkzLDB4MzMsMHgyOCwweGNjLDB4MjksMHgzNCwweDEyLDB4OGMsMHg1MCwweDkzLDB4MWMgfX0sCisgezE2LCAweGE4YzAsIDAsIHsweDI4LDB4ODQsMHgwMSwweDIwLDB4NGEsMHg0YywweDQxLDB4ODMsMHgxMCwweDI0LDB4Y2MsMHg0YiwweDMxLDB4NDIsMHg0YywweDQwIH19LAorIHsxNiwgMHhhOGQwLCAwLCB7MHg5MSwweDEwLDB4MjQsMHhjMCwweDBiLDB4ODAsMHgwMiwweDIyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YThlMCwgMCwgezB4YzAsMHgwNSwweGE4LDB4MjAsMHg5MCwweDAyLDB4MjIsMHgwMCwweDA4LDB4ODAsMHgwMCwweDIwLDB4MzAsMHhiOCwweDA4LDB4MjYgfX0sCisgezE2LCAweGE4ZjAsIDAsIHsweDAwLDB4MDEsMHg4MCwweDgyLDB4MjAsMHgyMCwweDE4LDB4MDgsMHg0MiwweDQwLDB4MDMsMHg5MSwweDAyLDB4NjAsMHgwMCwweDA4IH19LAorIHsxNiwgMHhhOTAwLCAwLCB7MHgwMSwweGE2LDB4MDAsMHgwYiwweDgwLDB4MDAsMHg2YywweDEwLDB4YmIsMHgwMSwweDI2LDB4YzAsMHg0YiwweDkwLDB4MGEsMHgzMCB9fSwKKyB7MTYsIDB4YTkxMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTEsMHhmZCwweDAwLDB4ZmQsMHg0MSwweDMzLDB4YTEgfX0sCisgezE2LCAweGE5MjAsIDAsIHsweDBlLDB4ZDIsMHgwMywweGI1LDB4MDIsMHhkZiwweDQyLDB4M2IsMHgwMSwweDBmLDB4ZDQsMHg0MywweGI1LDB4MDAsMHhjZCwweDQwIH19LAorIHsxNiwgMHhhOTMwLCAwLCB7MHgxYiwweGM0LDB4MGQsMHg3OCwweDAzLDB4NzAsMHgwMiwweGVjLDB4MDAsMHgxNywweGExLDB4MGYsMHhlOCwweDBiLDB4MmMsMHgwMiB9fSwKKyB7MTYsIDB4YTk0MCwgMCwgezB4ZDksMHg5MCwweDI2LDB4YzAsMHgwZiwweGFjLDB4MDMsMHgwMCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGE5NTAsIDAsIHsweGUwLDB4MDEsMHhiOCwweDAwLDB4ZWUsMHgwMCwweDFmLDB4NjQsMHg0ZiwweGUwLDB4MDMsMHhkOCwweDEwLDB4YzQsMHgxOCwweDMzIH19LAorIHsxNiwgMHhhOTYwLCAwLCB7MHhjMCwweDBjLDB4YTAsMHhhMSwweGI4LDB4MDksMHhlNiwweDA5LDB4MzYsMHgyMiwweDBmLDB4ODgsMHgyMywweGJjLDB4MDAsMHhmYiB9fSwKKyB7MTYsIDB4YTk3MCwgMCwgezB4MDAsMHgzYiwweDY0LDB4MGYsMHhkOSwweDAzLDB4OWMsMHgwMCwweGUzLDB4MDQsMHgzYiwweGMwLDB4MGYsMHhmNCwweDAzLDB4ZjggfX0sCisgezE2LCAweGE5ODAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4OGQsMHgwMCwweGM5LDB4NDAsMHhiNiwweDgwIH19LAorIHsxNiwgMHhhOTkwLCAwLCB7MHgwZiwweDEwLDB4MDMsMHhhNywweDIwLDB4ZmIsMHg1MCwweGI2LDB4MDgsMHg0YywweDE0LDB4MDMsMHg2NSwweDIyLDB4ZDksMHg0MCB9fSwKKyB7MTYsIDB4YTlhMCwgMCwgezB4YjYsMHg4MCwweDBlLDB4YTAsMHgwYiwweDAwLDB4MDAsMHhkOCwweDAwLDB4NzYsMHg4MiwweDI4LDB4YTAsMHgyMywweDY0LDB4MDAgfX0sCisgezE2LCAweGE5YjAsIDAsIHsweGM5LDB4MDQsMHgxMiwweGMwLDB4OGUsMHg4MCwweDAzLDB4OTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhOWMwLCAwLCB7MHhjOCwweDA1LDB4MmIsMHg2MCwweDhhLDB4MDksMHgyMCwweDUwLDB4MDgsMHhhMCwweDIzLDB4ZTksMHgwMCwweGI4LDB4YzAsMHgyMiB9fSwKKyB7MTYsIDB4YTlkMCwgMCwgezB4ZjAsMHgwOCwweGFjLDB4MDIsMHgyOCwweDA0LDB4OGEsMHhjMiwweDIyLDB4NTAsMHgwOCwweDkwLDB4MDYsMHgyYywweDAwLDB4OGIgfX0sCisgezE2LCAweGE5ZTAsIDAsIHsweDA0LDB4MjIsMHg1MSwweDA4LDB4OTQsMHgwMiwweGU0LDB4MDQsMHg4YiwweDA0LDB4MzcsMHhjMCwweDA4LDB4MTgsMHg0MiwweDI2IH19LAorIHsxNiwgMHhhOWYwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwNCwweDRiLDB4MDAsMHg4MiwweGM4LDB4MjQsMHg0MyB9fSwKKyB7MTYsIDB4YWEwMCwgMCwgezB4MGIsMHgyNiwweDBhLDB4ODgsMHgwMCwweGIwLDB4ODAsMHgyMiwweGU0LDB4MGIsMHgyMCwweDQyLDB4NjksMHgwMCwweGEyLDB4OTAgfX0sCisgezE2LCAweGFhMTAsIDAsIHsweDI4LDB4NDAsMHhlOCwweDEwLDB4MDIsMHgwYywweDAwLDB4YmIsMHgwMCwweDI4LDB4NTAsMHg4OCwweDkwLDB4ODIsMHhjNCwweDAxIH19LAorIHsxNiwgMHhhYTIwLCAwLCB7MHg4MywweDAwLDB4MjAsMHhjMCwweDBhLDB4MTAsMHgwMiwweGJhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWEzMCwgMCwgezB4MjAsMHgxMCwweDRlLDB4ODAsMHg4MSwweDAwLDB4MjEsMHhhOCwweDA4LDB4NTgsMHgwMiwweGQ2LDB4MDEsMHhiNywweDkwLDB4NjggfX0sCisgezE2LCAweGFhNDAsIDAsIHsweDIwLDB4MDMsMHg1OSwweDgyLDB4NTYsMHgwMCwweGE1LDB4ODQsMHgyZCwweGEyLDB4MTgsMHg2OSwweDIyLDB4MDIsMHgwMCwweDM0IH19LAorIHsxNiwgMHhhYTUwLCAwLCB7MHg4MCwweDI5LDB4YTgsMHgwOCwweDY4LDB4MDYsMHhjNiwweDE0LDB4ODUsMHg4MiwweDI1LDB4ZTAsMHgwOCwweDU4LDB4ODIsMHgxYyB9fSwKKyB7MTYsIDB4YWE2MCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHg0OCwweDAwLDB4YzIsMHhmMCwweDM0LDB4NDAgfX0sCisgezE2LCAweGFhNzAsIDAsIHsweDBmLDB4MjAsMHgwMywweDg4LDB4ODAsMHhmOCwweDEwLDB4MzAsMHhjMCwweDI3LDB4MjEsMHgwYiwweDQ4LDB4ODAsMHhlYSwweDIwIH19LAorIHsxNiwgMHhhYTgwLCAwLCB7MHgzOCwweDAwLDB4MGMsMHgwMCwweDEyLDB4MGMsMHgwOCwweDczLDB4MDAsMHhiOCwweDQwLDB4MGMsMHgxMiwweDIzLDB4NGMsMHgwMiB9fSwKKyB7MTYsIDB4YWE5MCwgMCwgezB4NDMsMHgzNCwweDMwLDB4YzAsMHgwZSwweDExLDB4MDMsMHg5MiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFhYTAsIDAsIHsweDQwLDB4MTUsMHhhYywweDkwLDB4ZjksMHgwMSwweDJlLDB4ODgsMHg0YiwweDkwLDB4MTEsMHg2NCwweDAwLDB4ZmIsMHgxMCwweDMyIH19LAorIHsxNiwgMHhhYWIwLCAwLCB7MHgwMCwweDAwLDB4OTEsMHgwMywweGE0LDB4MDAsMHhjOSwweDAwLDB4MzIsMHhjNCwweDRkLDB4YjAsMHg0MywweGUwLDB4MDQsMHhjOCB9fSwKKyB7MTYsIDB4YWFjMCwgMCwgezB4MDAsMHgzNiwweDg5LDB4MGYsMHhhOCwweDAzLDB4ZWQsMHgwMCwweGY5LDB4MTQsMHgzZSwweGMwLDB4MGYsMHgxMCwweDQzLDB4ZDAgfX0sCisgezE2LCAweGFhZDAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4ZTgsMHgwMCwweGM4LDB4MDAsMHgzYSwweDAwIH19LAorIHsxNiwgMHhhYWUwLCAwLCB7MHgwYywweDAwLDB4NTMsMHhhMCwweDAwLDB4ZTgsMHgwMSwweDMyLDB4MDEsMHgwZSwweDgwLDB4NTMsMHgyMCwweDEwLDB4YzgsMHgwMCB9fSwKKyB7MTYsIDB4YWFmMCwgMCwgezB4M2EsMHg0MCwweDBjLDB4OTAsMHgwMywweDIwLDB4MTAsMHhlOCwweDA0LDB4YjYsMHgwMCwweDg0LDB4ODAsMHgwMywweDJkLDB4MTIgfX0sCisgezE2LCAweGFiMDAsIDAsIHsweGNiLDB4MDAsMHgyZSwweGNhLDB4MDQsMHg5MCwweDAzLDB4ZWEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhYjEwLCAwLCB7MHg0YywweDE5LDB4OGMsMHgwMCwweDg3LDB4MDIsMHgyMSwweGMwLDB4MDgsMHg3MCwweDAyLDB4MGMsMHgwMCwweDgzLDB4MDAsMHgyMSB9fSwKKyB7MTYsIDB4YWIyMCwgMCwgezB4YzAsMHgwOCwweDMwLDB4NjIsMHg0YywweDA0LDB4ODMsMHgwMCwweDIxLDB4ODAsMHg0OCwweGUwLDB4MTIsMHgzYywweDAwLDB4ODcgfX0sCisgezE2LCAweGFiMzAsIDAsIHsweDAwLDB4MjEsMHhjMCwweDA4LDB4NzAsMHgwMiwweDFjLDB4MDAsMHg4NSwweDAxLDB4MjQsMHhkMCwweDBhLDB4NTAsMHgwMiwweGYyIH19LAorIHsxNiwgMHhhYjQwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDlhLDB4MDAsMHg4MCwweDgwLDB4MjgsMHgyMCB9fSwKKyB7MTYsIDB4YWI1MCwgMCwgezB4MDgsMHg0YywweDIyLDB4ZDIsMHgwMCwweGE0LDB4ODAsMHgyNCwweDMwLDB4MGIsMHg0OCwweDAyLDB4NTIsMHgwMCwweDg0LDB4YzAgfX0sCisgezE2LCAweGFiNjAsIDAsIHsweDIxLDB4MjAsMHgwOSwweDQ4LDB4NjgsMHgxMywweDAwLDB4YTQsMHg4MCwweDYwLDB4MjAsMHgwOSwweDA4LDB4MDIsMHg1NiwweDAwIH19LAorIHsxNiwgMHhhYjcwLCAwLCB7MHg5NywweDgwLDB4MmQsMHhlMCwweDg4LDB4NTgsMHgwMiwweGUwLDB4MTAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWI4MCwgMCwgezB4NmMsMHgwNCwweGNjLDB4MDAsMHg4MywweDgwLDB4MjAsMHhkOCwweDA4LDB4MzAsMHgwMiwweDRjLDB4NDAsMHg4MywweDAwLDB4MjQgfX0sCisgezE2LCAweGFiOTAsIDAsIHsweGQxLDB4MDksMHhiOSwweDQyLDB4NGUsMHgwMCwweDgzLDB4MDAsMHgyMCwweGMxLDB4ODksMHgzMCwweDQyLDB4MGMsMHgwMCwweDgzIH19LAorIHsxNiwgMHhhYmEwLCAwLCB7MHhmMCwweGEwLDB4ZDksMHgxOSwweDM2LDB4MjIsMHg2NiwweDA2LDB4OTEsMHgwMCwweDBjLDB4YzEsMHgwYSwweDEwLDB4MDIsMHhjMiB9fSwKKyB7MTYsIDB4YWJiMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhlOCwweDAyLDB4Y2EsMHhhNSwweDJhLDB4OTEgfX0sCisgezE2LCAweGFiYzAsIDAsIHsweDI4LDB4YTgsMHgwMywweGVhLDB4MDIsMHhhYSwweDAwLDB4YjYsMHhhMCwweDBmLDB4YTAsMHgwYSwweDJhLDB4OTIsMHhjYSwweDgzIH19LAorIHsxNiwgMHhhYmQwLCAwLCB7MHhiYSwweDgwLDB4MjksMHhhMCwweDAzLDB4MmIsMHgwMCwweGVhLDB4NDAsMHg2NiwweDkwLDB4MmQsMHhlNCwweDBiLDB4NmEsMHg4MCB9fSwKKyB7MTYsIDB4YWJlMCwgMCwgezB4ZGEsMHgwMCwweDNlLDB4ODAsMHgwYywweGUwLDB4MDMsMHhmYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFiZjAsIDAsIHsweDQ4LDB4MDEsMHg4MCwweDAwLDB4ZmMsMHgwMCwweDNkLDB4MDAsMHgwZiwweGMwLDB4MDMsMHhiMCwweDE0LDB4ZmMsMHgwMCwweDNiIH19LAorIHsxNiwgMHhhYzAwLCAwLCB7MHgxMiwweDBlLDB4YzAsMHg0MywweGIxLDB4MTQsMHhmYywweDAwLDB4M2QsMHgwMCwweDBlLDB4YzAsMHgwMywweGYwLDB4MjAsMHhmNCB9fSwKKyB7MTYsIDB4YWMxMCwgMCwgezB4MDAsMHgzMSwweDAwLDB4MGUsMHg0NCwweDEzLDB4YTAsMHgwMCwweGU4LDB4MDYsMHgzNiwweDAwLDB4NGYsMHg4MCwweDEzLDB4ZDIgfX0sCisgezE2LCAweGFjMjAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4YTQsMHgwMCwweGQxLDB4MDAsMHgzNiwweDYwIH19LAorIHsxNiwgMHhhYzMwLCAwLCB7MHgxYywweDE4LDB4MGIsMHg0NiwweDAwLDB4ZDksMHg4MCwweDMwLDB4NDAsMHgyYywweDk4LDB4MDUsMHg4NiwweDAwLDB4YzEsMHg4MCB9fSwKKyB7MTYsIDB4YWM0MCwgMCwgezB4OTIsMHg0MCwweDBkLDB4MTAsMHgwMywweDQ0LDB4MDIsMHg4OSwweDAwLDB4MzIsMHg3MCwweDBjLDB4OTgsMHgwMSwweDI0LDB4MDAgfX0sCisgezE2LCAweGFjNTAsIDAsIHsweGM5LDB4MDQsMHgzMCwweDQwLDB4MGMsMHg5MCwweDAzLDB4YzIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhYzYwLCAwLCB7MHg4MCwweDA0LDB4NjQsMHgwMCwweDg5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHg5NCwweDAyLDB4MjQsMHg4MCwweDg5LDB4MDEsMHgyMiB9fSwKKyB7MTYsIDB4YWM3MCwgMCwgezB4NDAsMHg0OCwweDkxLDB4MDIsMHgyNCwweDAwLDB4ZDksMHg5MCwweDIyLDB4NDEsMHgwOCwweDkwLDB4MTIsMHgyNCwweDEwLDB4ODkgfX0sCisgezE2LCAweGFjODAsIDAsIHsweDAwLDB4MzIsMHg0MCwweDA4LDB4OTUsMHgxMiwweDI0LDB4MDIsMHg4MSwweDAwLDB4YTIsMHg0MSwweDBkLDB4OTAsMHg0MiwweGUwIH19LAorIHsxNiwgMHhhYzkwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzgsMHgwNSwweDI0LDB4MDIsMHg5ZCwweDAwLDB4MjMsMHg0NCB9fSwKKyB7MTYsIDB4YWNhMCwgMCwgezB4MDgsMHhkMiwweDA2LDB4NzQsMHg4MCwweGI1LDB4MjAsMHgyMywweDQwLDB4MWEsMHhkMCwweDA2LDB4MzUsMHg5MCwweDhkLDB4MDIgfX0sCisgezE2LCAweGFjYjAsIDAsIHsweDJmLDB4NDQsMHgxOSwweGQwLDB4MDIsMHg3NCwweDAwLDB4OGQsMHgwMCwweDYzLDB4NDAsMHgxOCwweGQ0LDB4MDIsMHhhNCwweDExIH19LAorIHsxNiwgMHhhY2MwLCAwLCB7MHg4OSwweDAwLDB4MjIsMHg0MCwweDA4LDB4YjAsMHgwMiwweGM2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWNkMCwgMCwgezB4MjgsMHgxNCwweDA0LDB4ODAsMHg4NSwweDIwLDB4MjEsMHg2OCwweDA4LDB4NTIsMHgwMiwweDE0LDB4ODAsMHhhNSwweDIwLDB4YTEgfX0sCisgezE2LCAweGFjZTAsIDAsIHsweDQ4LDB4MGEsMHg3MiwweDM4LDB4MTQsMHg4MCwweDk1LDB4MjQsMHgyZCwweDQ4LDB4MjgsMHg1MiwweDAyLDB4MTQsMHg4MCwweDg1IH19LAorIHsxNiwgMHhhY2YwLCAwLCB7MHgyMCwweDIxLDB4NDgsMHgwOCwweDUyLDB4MDYsMHg4NCwweDgwLDB4ODEsMHgyMCwweDIwLDB4NGEsMHgwOSwweDEwLDB4MDIsMHhjMiB9fSwKKyB7MTYsIDB4YWQwMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MGQsMHg2MSwweDQwLDB4ZDgsMHg1MCwweGIyLDB4MTQgfX0sCisgezE2LCAweGFkMTAsIDAsIHsweDI4LDB4YTAsMHgwMywweDYxLDB4NDAsMHhmOCwweDUwLDB4MzIsMHg5NCwweDRlLDB4ODUsMHgwNCwweDIxLDB4NDIsMHhjOCwweDUwIH19LAorIHsxNiwgMHhhZDIwLCAwLCB7MHgzYywweDE0LDB4MGQsMHg4MCwweDAzLDB4NjEsMHg0MCwweDg4LDB4NTAsMHhiMiwweDE0LDB4MmMsMHhjNSwweDA5LDB4YTEsMHg0MCB9fSwKKyB7MTYsIDB4YWQzMCwgMCwgezB4YzgsMHg1MCwweDMyLDB4MWMsMHgwYywweDgwLDB4MDMsMHhlZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFkNDAsIDAsIHsweDk4LDB4MTUsMHhlNCwweDQwLDB4ZjksMHgxMCwweDNhLDB4NDQsMHgwZiwweDkxLDB4MDMsMHhlNCwweDQwLDB4ZDksMHgxNCwweDNlIH19LAorIHsxNiwgMHhhZDUwLCAwLCB7MHg0NCwweDBkLDB4OTEsMHg0MywweDY0LDB4NDAsMHhlOSwweDEwLDB4MzIsMHg0NCwweDA3LDB4OTMsMHhjMywweGU0LDB4NTAsMHhkMSB9fSwKKyB7MTYsIDB4YWQ2MCwgMCwgezB4MTAsMHg3ZSwweDQ0LDB4MDMsMHg5MSwweDAxLDB4NTQsMHg0NCwweGZkLDB4MTQsMHgzZSwweDQwLDB4MGYsMHhkMCwweDAzLDB4ZTYgfX0sCisgezE2LCAweGFkNzAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZjYsMHg4MCwweGRkLDB4YTAsMHgzMywweDY4IH19LAorIHsxNiwgMHhhZDgwLCAwLCB7MHgxZSwweGRhLDB4MDMsMHgzNiwweDkwLDB4Y2QsMHhhMCwweDNiLDB4NjgsMHgwYSwweGQ4LDB4MjMsMHg3NiwweDBjLDB4ZWQsMHg4MCB9fSwKKyB7MTYsIDB4YWQ5MCwgMCwgezB4MmIsMHg2MiwweDBiLDB4OTksMHgwMiwweGE3LDB4ODAsMHhmOSwweGUxLDB4MzcsMHg2OCwweDBjLDB4ZGEsMHgwMywweDI3LDB4ODAgfX0sCisgezE2LCAweGFkYTAsIDAsIHsweGM5LDB4YTIsMHgyMiwweDY4LDB4NGMsMHg1MCwweDAzLDB4YzYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhZGIwLCAwLCB7MHgzOCwweDE4LDB4ZTEsMHg0MCwweDg4LDB4NTAsMHgyMiwweDE0LDB4MDgsMHg4MCwweDIyLDB4NjAsMHgwMCwweDg4LDB4MDQsMHgyMiB9fSwKKyB7MTYsIDB4YWRjMCwgMCwgezB4MDAsMHgwOCwweDA0LDB4MjYsMHgwMSwweDAwLDB4ODgsMHg1MCwweDIyLDB4MTAsMHgwOCwweGFmLDB4MDIsMHgyMywweDAwLDB4ODggfX0sCisgezE2LCAweGFkZDAsIDAsIHsweGMwLDB4YTAsMHgxMCwweDg4LDB4ODQsMHgwMiwweDIzLDB4ODAsMHhhMCwweDQwLDB4MmEsMHgxMCwweDA4LDB4ODAsMHgxMiwweDRlIH19LAorIHsxNiwgMHhhZGUwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwMCwweDg0LDB4MDAsMHg4MSwweDAxLDB4MjAsMHg0MCB9fSwKKyB7MTYsIDB4YWRmMCwgMCwgezB4MGEsMHgxNCwweDAyLDB4NDUsMHgwMCwweDgxLDB4NDEsMHgyYywweDUwLDB4MGIsMHgxNCwweDAyLDB4MDUsMHgwNCwweGExLDB4MDAgfX0sCisgezE2LCAweGFlMDAsIDAsIHsweDI4LDB4NDAsMHg4MiwweDEwLDB4MDIsMHg4NCwweDQwLDB4YTEsMHgzMiwweDgwLDB4NTAsMHgwOSwweDE0LDB4MDIsMHgwNCwweGM0IH19LAorIHsxNiwgMHhhZTEwLCAwLCB7MHg5MSwweDEwLDB4NjQsMHg0NCwweDI4LDB4MTAsMHgwMiwweGQyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWUyMCwgMCwgezB4MTgsMHgwNCwweGFjLDB4MDIsMHg4MSwweDAwLDB4MjIsMHhjMSwweDA4LDB4OTAsMHgwMiwweDQ0LDB4MDIsMHg4OSwweDAyLDB4MjYgfX0sCisgezE2LCAweGFlMzAsIDAsIHsweDQxLDB4MDksMHg5MCwweDBhLDB4MjQsMHgwYywweDg5LDB4MDQsMHgyMiwweDUwLDB4MDgsMHg5MCwweDI2LDB4MjQsMHgwMCwweDg5IH19LAorIHsxNiwgMHhhZTQwLCAwLCB7MHgwMCwweDIyLDB4NDEsMHgwOSwweDEwLDB4MjIsMHgyNCwweDQwLDB4YjksMHgwMSwweDJlLDB4NDAsMHgwOCwweDkwLDB4MDIsMHg0NiB9fSwKKyB7MTYsIDB4YWU1MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTUsMHhlNCwweDEwLDB4ODksMHgwMCwweDMyLDB4NDAgfX0sCisgezE2LCAweGFlNjAsIDAsIHsweDBhLDB4OTAsMHgwYiwweDI0LDB4MTAsMHg4OSwweDAwLDB4MWUsMHg0MCwweDliLDB4OTAsMHgwMiwweDI0LDB4MTAsMHgyOSwweDAwIH19LAorIHsxNiwgMHhhZTcwLCAwLCB7MHgxYSwweDQwLDB4MGUsMHg5NCwweDQxLDB4YTQsMHgwMCwweDI5LDB4MDAsMHgxMiwweDQwLDB4MDUsMHg5MCwweDQxLDB4MjYsMHgwMCB9fSwKKyB7MTYsIDB4YWU4MCwgMCwgezB4ZDksMHgwMCwweDI0LDB4NDAsMHgwYywweDkwLDB4MDMsMHhlOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFlOTAsIDAsIHsweDQ4LDB4MDEsMHhhNCwweDAyLDB4YTksMHgwMCwweGJjLDB4NDAsMHgwZiwweDkwLDB4MDMsMHhhNCwweDA0LDB4ZjksMHgwMCwweDNhIH19LAorIHsxNiwgMHhhZWEwLCAwLCB7MHg0MSwweDBlLDB4OTAsMHg4MywweDg0LDB4MDAsMHhmOSwweDAwLDB4M2MsMHg0MCwweDBlLDB4OTAsMHgwMiwweGM0LDB4MDgsMHhlOSB9fSwKKyB7MTYsIDB4YWViMCwgMCwgezB4MDAsMHgzYSwweDQwLDB4MmUsMHg5MCwweDBiLDB4ZTYsMHgwMCwweGUxLDB4MDQsMHgzYSwweDQwLDB4MGYsMHg5MiwweDAzLDB4NWEgfX0sCisgezE2LCAweGFlYzAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4YTAsMHgyMCwweGQ4LDB4MDAsMHgzNiwweDAyIH19LAorIHsxNiwgMHhhZWQwLCAwLCB7MHgwZSwweDAwLDB4YTMsMHhlMCwweDE4LDB4YzAsMHgwMCwweDMwLDB4MDMsMHgwZiwweDgwLDB4MzMsMHgyMCwweDAwLDB4NDAsMHgwMCB9fSwKKyB7MTYsIDB4YWVlMCwgMCwgezB4MzIsMHgwZCwweDBmLDB4MDQsMHgwYiwweGEwLDB4MDIsMHhjOCwweDAyLDB4MzIsMHgwMiwweDhjLDB4ODIsMHgwMywweDIwLDB4MDIgfX0sCisgezE2LCAweGFlZjAsIDAsIHsweGM4LDB4MDQsMHgxNiwweDAwLDB4NGUsMHg4MCwweDAxLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhhZjAwLCAwLCB7MHgyOCwweDA1LDB4M2IsMHgwMCwweDhlLDB4ZDgsMHgyMywweDgwLDB4MDgsMHhlMCwweDAyLDB4ZjgsMHg4MCwweDhlLDB4MTAsMHgyMyB9fSwKKyB7MTYsIDB4YWYxMCwgMCwgezB4YTIsMHgwYiwweGUwLDB4ODIsMHg3YSwweDIwLDB4OGUsMHgzMCwweDIzLDB4YTEsMHgwYiwweGUwLDB4MDIsMHgyOCwweDAwLDB4OGUgfX0sCisgezE2LCAweGFmMjAsIDAsIHsweDAwLDB4MmIsMHg4OCwweDA4LDB4ZTQsMHg0MiwweDM4LDB4MDAsMHg4ZSwweDA0LDB4MjMsMHg4MCwweDA4LDB4YTAsMHgwMiwweDBhIH19LAorIHsxNiwgMHhhZjMwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDZmLDB4NDAsMHg5MywweGM2LDB4MjQsMHg0MCB9fSwKKyB7MTYsIDB4YWY0MCwgMCwgezB4MGEsMHgzOCwweDAyLDB4Y2MsMHgwMCwweDgzLDB4MDEsMHhhYywweGYwLDB4MGIsMHhiNCwweDAyLDB4NGMsMHgwNCwweGEzLDB4ODAgfX0sCisgezE2LCAweGFmNTAsIDAsIHsweDI4LDB4ZDAsMHg0YiwweDMwLDB4MDIsMHg0YywweDAwLDB4YWIsMHgwNCwweDJhLDB4YzAsMHgyYSwweDMwLDB4MGEsMHhhYywweDEwIH19LAorIHsxNiwgMHhhZjYwLCAwLCB7MHg5MywweDAwLDB4MjAsMHhjMSwweDBhLDB4MzEsMHgwMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YWY3MCwgMCwgezB4ODAsMHgxMSwweDFjLDB4MDAsMHg4MiwweDAwLDB4MjEsMHg0MiwweDg4LDB4NzQsMHgwNiwweGRjLDB4MGIsMHg4NiwweDAyLDB4MmQgfX0sCisgezE2LCAweGFmODAsIDAsIHsweDgwLDB4MGIsMHg3MCwweDJhLDB4NTgsMHgwMCwweGE2LDB4MDAsMHhhOSwweGMwLDB4MGIsMHg3MCwweDAyLDB4NWMsMHg4OCwweGE3IH19LAorIHsxNiwgMHhhZjkwLCAwLCB7MHgyMCwweDI5LDB4YzAsMHgwYSwweDcwLDB4MDIsMHg5YywweDEwLDB4OTcsMHgyMCwweGExLDB4YzgsMHgwOCwweGQ4LDB4MDIsMHgyOCB9fSwKKyB7MTYsIDB4YWZhMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDgsMHgwZSwweDAwLDB4ZDcsMHg4MCwweDM3LDB4NjAgfX0sCisgezE2LCAweGFmYjAsIDAsIHsweDBlLDB4NjgsMHgxMywweGZlLDB4MDAsMHhjZiwweDgwLDB4M2QsMHhlMCwweDBmLDB4NzgsMHgyMywweDFlLDB4MDAsMHhlZiwweDgyIH19LAorIHsxNiwgMHhhZmMwLCAwLCB7MHgzMSwweGUwLDB4MGYsMHgzYywweGMzLDB4N2UsMHgwNCwweGVmLDB4ODAsMHhiMSwweGUwLDB4MGUsMHhlOCwweDAzLDB4YmUsMHg4MCB9fSwKKyB7MTYsIDB4YWZkMCwgMCwgezB4ZDcsMHhlMCwweDMzLDB4ZWEsMHgwZSwweDc4LDB4MDMsMHgyYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGFmZTAsIDAsIHsweDA4LDB4MTUsMHhhYywweDAwLDB4ZmEsMHgwMSwweDNlLDB4MDAsMHgwZiwweGIwLDB4MDMsMHhlMCwweDA0LDB4ZjgsMHgwMCwweDMyIH19LAorIHsxNiwgMHhhZmYwLCAwLCB7MHg4MCwweDBmLDB4ODAsMHg0MywweGFjLDB4MGEsMHhkOCwweDAwLDB4MzYsMHg0MCwweDBmLDB4YjAsMHgwMywweDJjLDB4MGMsMHhkYiB9fSwKKyB7MTYsIDB4YjAwMCwgMCwgezB4MDAsMHgyNiwweGMxLDB4MDksMHhhMCwweDEzLDB4NmMsMHg0MCwweGViLDB4NDAsMHgzYSwweGRjLDB4MGYsMHg5MCwweDBiLDB4YzIgfX0sCisgezE2LCAweGIwMTAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA0LDB4YmUsMHgwMCwweGNmLDB4ODEsMHgzMywweGU5IH19LAorIHsxNiwgMHhiMDIwLCAwLCB7MHgxZiwweGY5LDB4MTMsMHhiNiwweDUwLDB4ZWYsMHg4MCwweDFmLDB4ZTQsMHgwNCwweGM4LDB4MDMsMHg3ZSwweDAwLDB4NmQsMHg4MSB9fSwKKyB7MTYsIDB4YjAzMCwgMCwgezB4MzMsMHg2NCwweDBjLDB4ZjgsMHgxYiwweDNlLDB4MjAsMHgyZiwweDg4LDB4OTMsMHhlOCwweDBmLDB4ZmIsMHgwMywweDJlLDB4ODAgfX0sCisgezE2LCAweGIwNDAsIDAsIHsweGNmLDB4YzAsMHg3MywweGUwLDB4MmMsMHhkOSwweDAzLDB4ZDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMDUwLCAwLCB7MHhhOCwweDE4LDB4OTAsMHg0MiwweDg5LDB4MTgsMHgyMSwweGMwLDB4MWYsMHg3MSwweDAyLDB4MTQsMHhjMCwweGY3LDB4MjAsMHgyNyB9fSwKKyB7MTYsIDB4YjA2MCwgMCwgezB4NDAsMHg0MCwweDcxLDB4MTIsMHgxOCwweDAwLDB4ODcsMHgyMCwweDIxLDB4ODAsMHg0OCwweDcxLDB4MDIsMHgzYywweDA4LDB4ODcgfX0sCisgezE2LCAweGIwNzAsIDAsIHsweDIwLDB4MjEsMHg4MiwweDBiLDB4NjEsMHhhMiwweDFlLDB4NDQsMHhkZiwweDAxLDB4MzEsMHhjOCwweDA4LDB4NzMsMHgwMiwweGVhIH19LAorIHsxNiwgMHhiMDgwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMCwweDhjLDB4MDAsMHg4NywweDAwLDB4MjEsMHhjOCB9fSwKKyB7MTYsIDB4YjA5MCwgMCwgezB4MGIsMHg3MCwweDAyLDB4OWMsMHgwOSwweDg3LDB4MDIsMHgyZCwweDgyLDB4OTksMHg0MCwweDAyLDB4MDQsMHgwMCwweGE1LDB4MDkgfX0sCisgezE2LCAweGIwYTAsIDAsIHsweDIxLDB4NDAsMHgxOSwweDcwLDB4MDIsMHgxYywweDAwLDB4ODcsMHgwNSwweDI1LDB4NDgsMHg0YiwweDcyLDB4MDIsMHgwYywweDQwIH19LAorIHsxNiwgMHhiMGIwLCAwLCB7MHg4NywweDAwLDB4YTEsMHhjMCwweDQ4LDB4NTAsMHgwMiwweGM0LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjBjMCwgMCwgezB4NjgsMHgwNCwweGMxLDB4MjAsMHg4OSwweDRjLDB4YTAsMHhiNCwweDBhLDB4MzgsMHgwMiwweDIyLDB4MDAsMHhhMSwweGQwLDB4MjQgfX0sCisgezE2LCAweGIwZDAsIDAsIHsweDMwLDB4MDksMHg4MCwweDAyLDB4MjcsMHg0NCwweDgxLDB4YzYsMHgyMiwweDE0LDB4MDksMHgzZCwweDJhLDB4MGYsMHgwMiwweDhiIH19LAorIHsxNiwgMHhiMGUwLCAwLCB7MHhjMCwweGE2LDB4MjAsMHgwYiwweDI0LDB4MDAsMHgwYywweDEwLDB4OTMsMHg4MSwweDIwLDB4YzAsMHg0OCwweDMwLDB4MDYsMHhkOCB9fSwKKyB7MTYsIDB4YjBmMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MTUsMHhhMSwweDAwLDB4ODksMHhjMSwweDMyLDB4ZDEgfX0sCisgezE2LCAweGIxMDAsIDAsIHsweDAzLDB4YmMsMHgwMywweGE5LDB4MjAsMHg4OSwweDQxLDB4M2UsMHg2MCwweDg1LDB4YmMsMHg4YiwweDI1LDB4NDAsMHhlYiwweDQxIH19LAorIHsxNiwgMHhiMTEwLCAwLCB7MHhhMiwweGEwLDB4MGQsMHhmMCwweDEzLDB4M2UsMHgyMCwweGNmLDB4OTAsMHgzNiwweDMwLDB4NGYsMHhiYywweDBiLDB4M2MsMHgwMCB9fSwKKyB7MTYsIDB4YjEyMCwgMCwgezB4Y2YsMHg4MCwweDMzLDB4YzEsMHgwYywweGIxLDB4MDMsMHhlYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIxMzAsIDAsIHsweDgwLDB4MDAsMHhlZCwweDAwLDB4ZjgsMHgwMSwweDNjLDB4ZDAsMHgwZiwweGIzLDB4MDMsMHhlOCwweDgyLDB4ZDgsMHgyMCwweDM2IH19LAorIHsxNiwgMHhiMTQwLCAwLCB7MHg4MCwweDJlLDB4YjIsMHgxMywweGUxLDB4MDAsMHhmYSwweDAwLDB4N2UsMHhjOCwweDJlLDB4YjAsMHgwMywweGVjLDB4ODAsMHhkYiB9fSwKKyB7MTYsIDB4YjE1MCwgMCwgezB4MTAsMHgzYSwweDA4LDB4NGYsMHhiMiwweDIzLDB4Y2MsMHgwMiwweGZiLDB4MTAsMHgzYSwweGMwLDB4MGYsMHg5MCwweDAzLDB4ZTQgfX0sCisgezE2LCAweGIxNjAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDEwLDB4ZjAsMHgwMCwweGNkLDB4MTAsMHgzMywweDQyIH19LAorIHsxNiwgMHhiMTcwLCAwLCB7MHgwYywweGNhLDB4MjMsMHg3YywweDAwLDB4Y2YsMHgwMCwweDMzLDB4NjIsMHgwNiwweGYwLDB4MDEsMHgzYSwweDAwLDB4Y2YsMHgwOCB9fSwKKyB7MTYsIDB4YjE4MCwgMCwgezB4MzMsMHg4MCwweDFjLDB4ZjAsMHg4MSwweDNjLDB4MDAsMHhmZiwweDAwLDB4MzMsMHhhMCwweDBjLDB4Y2EsMHgwMSwweGZjLDB4MDQgfX0sCisgezE2LCAweGIxOTAsIDAsIHsweGNmLDB4MDAsMHgzZiwweGMwLDB4MGYsMHhmMCwweDAzLDB4YzAsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMWEwLCAwLCB7MHhhMSwweDA0LDB4NmQsMHg0MCwweDg4LDB4NDgsMHhhMiwweDMxLDB4MDgsMHgxMCwweDAyLDB4MjAsMHgxMCwweDg4LDB4YjQsMHgyMiB9fSwKKyB7MTYsIDB4YjFiMCwgMCwgezB4YTAsMHgwOCwweDgwLDB4MDAsMHg2YSwweDg0LDB4ODgsMHgyMCwweDIyLDB4NTIsMHgwOCwweGIwLDB4MGEsMHgyYywweDEwLDB4YmIgfX0sCisgezE2LCAweGIxYzAsIDAsIHsweDAwLDB4MzIsMHhiMywweDg4LDB4ODAsMHgwMiwweGVjLDB4MDAsMHhkYiwweDAwLDB4MmUsMHhjMCwweDBiLDB4OTAsMHgxMiwweGUxIH19LAorIHsxNiwgMHhiMWQwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDAwLDB4MTAsMHg4YSwweDAxLDB4MjIsMHhhMCB9fSwKKyB7MTYsIDB4YjFlMCwgMCwgezB4MDgsMHhiMCwweDQyLDB4NjAsMHgyMCwweDgwLDB4MDAsMHgyMCwweDQ0LDB4MWEsMHg4MCwweDFhLDB4ZTQsMHg0MiwweGEwLDB4MDYgfX0sCisgezE2LCAweGIxZjAsIDAsIHsweDIyLDB4MDAsMHg3OCwweDMwLDB4MDIsMHhhYywweDAwLDB4YmIsMHgwMCwweGEyLDB4NDQsMHgwOCwweGIwLDB4MTIsMHhlYywweDAwIH19LAorIHsxNiwgMHhiMjAwLCAwLCB7MHg4YiwweDAwLDB4MGUsMHhjMCwweDBiLDB4OTAsMHgwMiwweGUwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjIxMCwgMCwgezB4MDgsMHgxNCwweDAwLDB4MDgsMHg4MCwweDAwLDB4MjAsMHg4MSwweDA4LDB4MzAsMHgwMiwweDQwLDB4MTIsMHg4MCwweDAwLDB4YTAgfX0sCisgezE2LCAweGIyMjAsIDAsIHsweDQwLDB4MDgsMHhiMCwweDAyLDB4YzAsMHgwMCwweDgyLDB4MDAsMHgwMCwweDgwLDB4MDgsMHgzMCwweDAyLDB4OGMsMHgwMCwweGJiIH19LAorIHsxNiwgMHhiMjMwLCAwLCB7MHgwMCwweDIwLDB4MDAsMHgwOCwweDIwLDB4MDIsMHhjYywweDgwLDB4OTMsMHgwMCwweDJjLDB4YzAsMHgwYiwweDMwLDB4MDIsMHhjMiB9fSwKKyB7MTYsIDB4YjI0MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2MCwweDAwLDB4Y2EsMHgxNCwweDMyLDB4MDAgfX0sCisgezE2LCAweGIyNTAsIDAsIHsweDBjLDB4YjAsMHgwMywweDRjLDB4MDAsMHhjYSwweDAwLDB4MzIsMHgwMCwweDBlLDB4MDAsMHgxMiwweGEwLDB4MDAsMHhjMCwweDAwIH19LAorIHsxNiwgMHhiMjYwLCAwLCB7MHg3MCwweDAwLDB4MjgsMHhmMCwweDEzLDB4YWMsMHgwMCwweGZiLDB4MDAsMHgzMiwweDQwLDB4MmMsMHgxMCwweDQzLDB4ZWMsMHgwMCB9fSwKKyB7MTYsIDB4YjI3MCwgMCwgezB4Y2YsMHgwMCwweDNmLDB4YzAsMHgwZiwweDkwLDB4MDMsMHhjMCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIyODAsIDAsIHsweDIwLDB4MTUsMHhmMCwweDAyLDB4ZmMsMHgwMCwweDFmLDB4MDAsMHg2NywweDcwLDB4MDMsMHhiMCwweDAwLDB4ZmMsMHgwMCwweDNmIH19LAorIHsxNiwgMHhiMjkwLCAwLCB7MHgwMCwweDJkLDB4YzAsMHgwMywweDMwLDB4MTAsMHhmYywweDAxLDB4YmYsMHgwMCwweDBmLDB4NzAsMHgwMywweDdjLDB4MDAsMHhmNyB9fSwKKyB7MTYsIDB4YjJhMCwgMCwgezB4MDQsMHgzYiwweDAwLDB4MGYsMHhjMCwweDEzLDB4ZmQsMHgxMCwweGZmLDB4MDAsMHgzZCwweGMwLDB4MGYsMHhmMCwweDAzLDB4ZTggfX0sCisgezE2LCAweGIyYjAsIDAsIHsweDEyLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDA1LDB4ZjQsMHhjMCwweGNmLDB4ODAsMHgzMywweDYwIH19LAorIHsxNiwgMHhiMmMwLCAwLCB7MHgwZSwweGM5LDB4MTMsMHgzNiwweDUwLDB4Y2UsMHg4NiwweDNmLDB4MDgsMHgwYywweGMwLDB4MDMsMHgzZSwweDAyLDB4ZDcsMHg4MCB9fSwKKyB7MTYsIDB4YjJkMCwgMCwgezB4MzksMHhlMCwweDBmLDB4ZjgsMHgxMywweDNlLDB4NDAsMHhjNywweDMwLDB4M2IsMHhjZSwweDBkLDB4ZjYsMHgwMywweDNkLDB4ODggfX0sCisgezE2LCAweGIyZTAsIDAsIHsweGNmLDB4MzEsMHgzMywweGU0LDB4MGYsMHg3OCwweDAzLDB4MzAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiMmYwLCAwLCB7MHg4MCwweDEwLDB4ZTUsMHhkMCwweGRiLDB4ODAsMHg3MiwweDYwLDB4ODgsMHg5MiwweDAyLDB4ZTQsMHgxMCwweDhhLDB4ODAsMHgyZSB9fSwKKyB7MTYsIDB4YjMwMCwgMCwgezB4MzQsMHg0YSwweDhjLDB4MDMsMHgyZSwweDAwLDB4YWIsMHg4MCwweDAyLDB4ZTAsMHgwYiwweGI4LDB4MDIsMHgyYywweDgwLDB4OGYgfX0sCisgezE2LCAweGIzMTAsIDAsIHsweDYwLDB4MTMsMHhkOCwweDRhLDB4NzYsMHgwMiwweDlkLDB4ODQsMHhhZiwweDMwLDB4MjIsMHg0OCwweDBiLDB4ODgsMHgxMiwweGEwIH19LAorIHsxNiwgMHhiMzIwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwNSwweGM0LDB4MDAsMHg4YiwweDAwLDB4MjQsMHgwMCB9fSwKKyB7MTYsIDB4YjMzMCwgMCwgezB4NGEsMHgwMCwweDAyLDB4YWMsMHg4MCwweDgzLDB4MDAsMHgyYywweDAxLDB4MjgsMHgwNCwweDAyLDB4YWMsMHgwMCwweDhiLDB4MDEgfX0sCisgezE2LCAweGIzNDAsIDAsIHsweDIwLDB4YzAsMHgwMywweGIwLDB4MDIsMHgwYywweDgwLDB4ODMsMHg0MCwweDIwLDB4YzEsMHhhOCwweDM0LDB4MjIsMHg4ZCwweDEzIH19LAorIHsxNiwgMHhiMzUwLCAwLCB7MHg4MywweDIwLDB4YWMsMHhjOCwweDBiLDB4YjAsMHgwMiwweDYyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjM2MCwgMCwgezB4YzAsMHgxNSwweDg2LDB4MDAsMHg5YiwweDA0LDB4YWUsMHgwMCwweDBhLDB4OTAsMHgwMiwweGVjLDB4MDAsMHgwYiwweDE0LDB4MmUgfX0sCisgezE2LCAweGIzNzAsIDAsIHsweGM2LDB4MDIsMHhiMSwweDEyLDB4NmMsMHgwMCwweGFiLDB4MjAsMHgyYSwweGMxLDB4MGIsMHhiMCwweDQyLDB4MmMsMHgwMCwweDhiIH19LAorIHsxNiwgMHhiMzgwLCAwLCB7MHgwMiwweDI2LDB4YzEsMHgwYSwweGIwLDB4MDIsMHhhYywweDAwLDB4YWIsMHgwNCwweDJhLDB4NDAsMHgwYiwweDkwLDB4MDIsMHhmMCB9fSwKKyB7MTYsIDB4YjM5MCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTEsMHhlNywweDAwLDB4YzMsMHgwMSwweDM2LDB4NDAgfX0sCisgezE2LCAweGIzYTAsIDAsIHsweDBlLDB4ODgsMHgxMywweDI0LDB4MDIsMHhjYSwweDAwLDB4MWUsMHgyMCwweDJjLDB4OGUsMHgwYiwweDJjLDB4MDAsMHhjYiwweDAwIH19LAorIHsxNiwgMHhiM2IwLCAwLCB7MHgyYSwweGMwLDB4MGYsMHhiOCwweDAzLDB4MmUsMHgwNiwweGNiLDB4MDAsMHgzYSwweGMwLDB4NGMsMHhiMCwweDEzLDB4YWMsMHgwYyB9fSwKKyB7MTYsIDB4YjNjMCwgMCwgezB4Y2IsMHgwMCwweDNlLDB4YzgsMHgwZiwweGIwLDB4NDMsMHg1MCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGIzZDAsIDAsIHsweGUwLDB4MDEsMHhiNCwweDA4LDB4ZmYsMHg5MSwweDMzLDB4NDAsMHgwOSwweGRjLDB4MDEsMHhmNCwweDIwLDB4N2UsMHgwMiwweDJlIH19LAorIHsxNiwgMHhiM2UwLCAwLCB7MHg0MCwweDBkLDB4OTgsMHgwMSwweGJjLDB4ODAsMHhlZiwweDgwLDB4YjcsMHhlNCwweDhmLDB4ZjQsMHgwYiwweGZlLDB4NDAsMHg3ZiB9fSwKKyB7MTYsIDB4YjNmMCwgMCwgezB4MDAsMHhiOSwweGMwLDB4NGUsMHhmMCwweDAzLDB4ZmMsMHgwOCwweGY3LDB4MDAsMHgzNywweGMwLDB4MGYsMHhlMCwweDAyLDB4YjggfX0sCisgezE2LCAweGI0MDAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDEwLDB4YTEsMHg0NCwweGNiLDB4MDIsMHgzMiwweDAwIH19LAorIHsxNiwgMHhiNDEwLCAwLCB7MHgwZCwweDgwLDB4MGEsMHg2ZCwweDAwLDB4ZWIsMHgwNCwweDEwLDB4OTAsMHgyOCwweDIyLDB4MGIsMHgyYywweGMyLDB4Y2IsMHgyMCB9fSwKKyB7MTYsIDB4YjQyMCwgMCwgezB4NzYsMHhjMCwweDBlLDB4YjEsMHgwMywweGVjLDB4MDEsMHhjYiwweDA2LDB4MzIsMHhjMSwweDBjLDB4MzAsMHgwMywweDJjLDB4MDIgfX0sCisgezE2LCAweGI0MzAsIDAsIHsweGNiLDB4MDAsMHgzZSwweGQwLDB4MGMsMHhiMCwweDAzLDB4MTAsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNDQwLCAwLCB7MHhjOCwweDA1LDB4MjEsMHg0OCwweGFiLDB4MDAsMHgyMCwweDAwLDB4MDAsMHg5NSwweDIzLDB4NGMsMHgwOCwweGJiLDB4MDEsMHgyMiB9fSwKKyB7MTYsIDB4YjQ1MCwgMCwgezB4YzAsMHgwOCwweGIyLDB4MDIsMHgwYywweDA4LDB4ODMsMHg4OCwweDkyLDB4ZDUsMHgyOCwweDM0LDB4MDIsMHhlYywweDAyLDB4OGYgfX0sCisgezE2LCAweGI0NjAsIDAsIHsweDIwLDB4MjMsMHhjMCwweDRkLDB4ZjAsMHgwMSwweDdjLDB4MDAsMHhkZiwweDAwLDB4MmUsMHhjMCwweDBkLDB4MzAsMHgwMywweDcyIH19LAorIHsxNiwgMHhiNDcwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwNSwweDQ0LDB4MDAsMHg4MywweDEwLDB4MjAsMHg2MCB9fSwKKyB7MTYsIDB4YjQ4MCwgMCwgezB4MDksMHgyNSwweDAyLDB4MDAsMHgwOCwweGEwLDB4MDAsMHg0YywweDAwLDB4MGIsMHgwYywweDIyLDB4NGYsMHgxMiwweDkzLDB4NDAgfX0sCisgezE2LCAweGI0OTAsIDAsIHsweDAwLDB4YzAsMHgwOSwweDNlLDB4MDIsMHhlYywweDAwLDB4YWIsMHg4MCwweGE0LDB4YzAsMHgwOSwweDMwLDB4MjIsMHgyYywweDA4IH19LAorIHsxNiwgMHhiNGEwLCAwLCB7MHhiMywweDAxLDB4MGMsMHg4MSwweDA4LDB4MzAsMHgwMiwweDM4LDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjRiMCwgMCwgezB4NjAsMHgwMSwweDE2LDB4MDksMHhiNywweDgwLDB4MjEsMHg2NCwweDA4LDB4NzgsMHgwNiwweDEyLDB4MDAsMHhiNCwweDgyLDB4MmQgfX0sCisgezE2LCAweGI0YzAsIDAsIHsweGE0LDB4MWIsMHg2OSwweDA2LDB4N2UsMHgwNCwweDE3LDB4OTIsMHgyNSwweGU2LDB4MDksMHg3OCwweDA2LDB4ZGUsMHg4MCwweGE3IH19LAorIHsxNiwgMHhiNGQwLCAwLCB7MHg5MCwweDI1LDB4ZTAsMHgwOSwweDc5LDB4NTAsMHg1ZSwweDA0LDB4YjcsMHg5MiwweDJmLDB4NjEsMHgwOSwweGM4LDB4MDIsMHg0OCB9fSwKKyB7MTYsIDB4YjRlMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgyNSwweDAwLDB4YzMsMHgwMCwweGIwLDB4MDMgfX0sCisgezE2LCAweGI0ZjAsIDAsIHsweDBkLDB4YTMsMHg0MiwweDA5LDB4NDAsMHhlMSwweDAwLDB4YmMsMHg0MCwweDBmLDB4MTEsMHgwMywweDRjLDB4MDAsMHgxMywweDAwIH19LAorIHsxNiwgMHhiNTAwLCAwLCB7MHgyMCwweGMwLDB4MDksMHgzMiwweDAzLDB4Y2MsMHgxMCwweGEzLDB4MDAsMHgyNiwweGM0LDB4OGQsMHgzMCwweDJiLDB4MGMsMHg4MCB9fSwKKyB7MTYsIDB4YjUxMCwgMCwgezB4ZjMsMHgwMCwweDdjLDB4ODAsMHgwYywweDMwLDB4MDEsMHgxMiwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI1MjAsIDAsIHsweDQwLDB4MWQsMHhiYywweDAwLDB4ZTcsMHgxMCwweDNkLDB4MDEsMHgyZiwweGYxLDB4NDIsMHhlOCwweDAwLDB4ZjUsMHg5MCwweDAzIH19LAorIHsxNiwgMHhiNTMwLCAwLCB7MHhjMSwweDBjLDB4ZjEsMHg0MywweDljLDB4MDQsMHhlZiwweDA4LDB4M2IsMHhjMiwweDBjLDB4ZjAsMHg4MSwweGRjLDB4YTAsMHhkZiB9fSwKKyB7MTYsIDB4YjU0MCwgMCwgezB4MDAsMHgzYiwweGMzLDB4M2YsMHhmMCwweDgzLDB4ZmMsMHgwNSwweGRmLDB4MGMsMHgzZCwweDQwLDB4MGYsMHhkMSwweDAzLDB4ZDAgfX0sCisgezE2LCAweGI1NTAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOCwweDA1LDB4ZjQsMHgwMCwweGNiLDB4ODAsMHgzMCwweDQwIH19LAorIHsxNiwgMHhiNTYwLCAwLCB7MHgyYywweGEwLDB4MDMsMHhlMCwweDAwLDB4ZjgsMHg4MCwweDMyLDB4YzAsMHgyZSwweGI4LDB4MGIsMHgyYywweDQ2LDB4ZDMsMHgwMCB9fSwKKyB7MTYsIDB4YjU3MCwgMCwgezB4MzAsMHhjMCwweDBjLDB4MzAsMHgwMywweDBjLDB4MDAsMHhkYiwweDQ4LDB4MzIsMHhjMCwweDFmLDB4YjQsMHgwMywweDJjLDB4ODggfX0sCisgezE2LCAweGI1ODAsIDAsIHsweGNiLDB4NDgsMHgzMiwweDgwLDB4MGMsMHgzMCwweDEzLDB4MmEsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNTkwLCAwLCB7MHg0OCwweDExLDB4YjQsMHgwMCwweDg3LDB4MDEsMHgyMSwweDQwLDB4MDgsMHg3MCwweDQyLDB4ZDAsMHgwOCwweGI0LDB4MDAsMHgyOSB9fSwKKyB7MTYsIDB4YjVhMCwgMCwgezB4YzAsMHgwOCwweDcwLDB4MDIsMHgxYywweDAwLDB4ODcsMHgwMCwweDIxLDB4YzgsMHgwYywweDcyLDB4MGEsMHgxYywweDg0LDB4OGYgfX0sCisgezE2LCAweGI1YjAsIDAsIHsweDQwLDB4MDksMHhjNCwweDhmLDB4NzMsMHgxMiwweDljLDB4NDAsMHg4MywweDIwLDB4MjEsMHhjMCwweDA4LDB4NjAsMHgwMiwweDkyIH19LAorIHsxNiwgMHhiNWMwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDk2LDB4MDEsMHhhZiwweDgwLDB4MjEsMHgyMCB9fSwKKyB7MTYsIDB4YjVkMCwgMCwgezB4MDgsMHg2OCwweDAyLDB4ZGEsMHgwMCwweGJkLDB4ODAsMHgyMSwweGUwLDB4MDksMHg3OCwweDAyLDB4MWUsMHgwMCwweDhmLDB4ODggfX0sCisgezE2LCAweGI1ZTAsIDAsIHsweDgzLDB4ZTIsMHgyOSwweGY4LDB4ODIsMHg1ZiwweDgwLDB4ODcsMHhhMCwweDI1LDB4ZTAsMHgwYiwweDNhLDB4MTIsMHgwZSwweDUwIH19LAorIHsxNiwgMHhiNWYwLCAwLCB7MHg5NywweGE0LDB4MjEsMHhhMCwweDI5LDB4NzgsMHgwMiwweDMwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjYwMCwgMCwgezB4MDgsMHgxNCwweGNjLDB4MDIsMHhhMSwweDgxLDB4MDAsMHgwMCwweDQ4LDB4NzAsMHgwMiwweGM4LDB4MDAsMHhiMSwweDAwLDB4MmMgfX0sCisgezE2LCAweGI2MTAsIDAsIHsweGY4LDB4MDksMHgzMSwweDQyLDB4MGMsMHgxMCwweDgzLDB4MDAsMHgyMCwweGUwLDB4MDgsMHgzOCwweDEyLDB4NGUsMHgwMCwweDgzIH19LAorIHsxNiwgMHhiNjIwLCAwLCB7MHgwMCwweDZhLDB4YzAsMHgwYiwweDMwLDB4MDIsMHg4YywweDA0LDB4OTMsMHgwMCwweDIwLDB4ZTAsMHgwOSwweDM4LDB4MDIsMHg5MiB9fSwKKyB7MTYsIDB4YjYzMCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4MTUsMHhiOSwweDQwLDB4ZWUsMHgyMCwweDMwLDB4ODAgfX0sCisgezE2LCAweGI2NDAsIDAsIHsweDBjLDB4YTAsMHgwMywweGU4LDB4MDAsMHhmYSwweDAwLDB4MzMsMHhiMCwweDBkLDB4ZTQsMHgwMywweDMyLDB4ODgsMHhjYywweDgwIH19LAorIHsxNiwgMHhiNjUwLCAwLCB7MHgyMywweDAwLDB4MGQsMHhjMCwweDAzLDB4NjIsMHgwMiwweGNhLDB4MDAsMHgzNiwweDgwLDB4MGYsMHhhMCwweDQzLDB4MjgsMHgwNiB9fSwKKyB7MTYsIDB4YjY2MCwgMCwgezB4ZGEsMHgwMCwweDMzLDB4YTAsMHgwZCwweDZhLDB4MDMsMHgzYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI2NzAsIDAsIHsweDQ4LDB4MDAsMHhlMCwweDAwLDB4OTgsMHgwMSwweGJlLDB4MDAsMHgwZiwweDgwLDB4MDMsMHhmMCwweDAwLDB4YmMsMHgwMCwweDM4IH19LAorIHsxNiwgMHhiNjgwLCAwLCB7MHgwNCwweDA4LDB4ODAsMHhhMywweGUwLDB4MDAsMHhmOCwweDAwLDB4M2UsMHgwMCwweDBmLDB4ODAsMHgxMywweGEwLDB4MDAsMHhlMCB9fSwKKyB7MTYsIDB4YjY5MCwgMCwgezB4MDAsMHgzZSwweDAwLDB4MGUsMHgwMCwweDAzLDB4YzAsMHgwMCwweGU4LDB4MDAsMHhiZSwweDA0LDB4NGUsMHg4MCwweDA3LDB4ZDIgfX0sCisgezE2LCAweGI2YTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ZTQsMHg4MCwweGM5LDB4MDAsMHgzZSwweDY4IH19LAorIHsxNiwgMHhiNmIwLCAwLCB7MHgwYywweDkwLDB4MDMsMHg2NCwweDAwLDB4YzksMHgwMCwweDNlLDB4NDAsMHgwYywweDkwLDB4NDMsMHhlMCwweDAwLDB4YzgsMHgwMCB9fSwKKyB7MTYsIDB4YjZjMCwgMCwgezB4MzIsMHgwMCwweDBjLDB4ODAsMHgxMywweDIwLDB4MDAsMHhjOSwweDAwLDB4MzYsMHg0MCwweDBjLDB4OTAsMHgwMywweDY0LDB4MDAgfX0sCisgezE2LCAweGI2ZDAsIDAsIHsweDgxLDB4MDAsMHgzMiwweDQwLDB4MDQsMHg5MCwweDEzLDB4MDIsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiNmUwLCAwLCB7MHg4MCwweDA0LDB4NjUsMHgwNiwweDg5LDB4NDAsMHgyZSwweDYwLDB4MWEsMHgxNCwweDJhLDB4MDUsMHgyMCwweDg5LDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4YjZmMCwgMCwgezB4NDAsMHgwOCwweDkwLDB4MDIsMHhjNCwweDA4LDB4YzEsMHgwMiwweDIwLDB4NDAsMHgwOCwweDEwLDB4MWEsMHgyNCwweDAwLDB4ODkgfX0sCisgezE2LCAweGI3MDAsIDAsIHsweDEwLDB4MzIsMHg0MSwweDA4LDB4OTAsMHgxMiwweDI0LDB4MDAsMHg4OSwweDA0LDB4MzYsMHg0MCwweDg4LDB4OTQsMHgwYSwweDIwIH19LAorIHsxNiwgMHhiNzEwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwNSwweDA0LDB4MjAsMHg4OSwweDU1LDB4MmUsMHg0MCB9fSwKKyB7MTYsIDB4YjcyMCwgMCwgezB4MDgsMHhkNSwweDAyLDB4MzQsMHgwMCwweDhkLDB4MDAsMHgyZSwweDQwLDB4MTgsMHg5MCwweDAyLDB4ZTQsMHgwMCwweDk5LDB4MDAgfX0sCisgezE2LCAweGI3MzAsIDAsIHsweDI2LDB4NDAsMHgwOCwweDkwLDB4MDIsMHgwNCwweDBhLDB4ODksMHgwMCwweDI2LDB4NDAsMHgzOCwweDkwLDB4MGEsMHgyNCwweDAwIH19LAorIHsxNiwgMHhiNzQwLCAwLCB7MHhhOSwweDAwLDB4MjAsMHg0MCwweDBhLDB4OTAsMHg4MiwweDA2LDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Yjc1MCwgMCwgezB4MDgsMHgwNCwweDA1LDB4MDAsMHg4MSwweDAwLDB4MmYsMHg0MCwweDBhLDB4ZDQsMHgwMiwweDM0LDB4MDAsMHg4NSwweDAxLDB4MmMgfX0sCisgezE2LCAweGI3NjAsIDAsIHsweDQwLDB4MDgsMHgxMCwweDQyLDB4ZTQsMHgwNiwweDk5LDB4MDAsMHgyMiwweDQwLDB4MDgsMHgxMCwweDAyLDB4MDUsMHgwMCwweDgxIH19LAorIHsxNiwgMHhiNzcwLCAwLCB7MHg0MCwweDI4LDB4NTAsMHgwOCwweDE0LDB4MTIsMHgwNSwweDAwLDB4YTEsMHg0MCwweDI0LDB4NTAsMHg1YSwweDEwLDB4MDIsMHgwMiB9fSwKKyB7MTYsIDB4Yjc4MCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4MGQsMHg2MCwweDAwLDB4YzgsMHgwNCwweDNlLDB4MDAgfX0sCisgezE2LCAweGI3OTAsIDAsIHsweDA4LDB4ODAsMHgwMywweDIxLDB4NDIsMHhjYywweDAwLDB4M2UsMHgwMCwweDJjLDB4ODAsMHgwMiwweGUwLDB4MDAsMHhkOCwweDAwIH19LAorIHsxNiwgMHhiN2EwLCAwLCB7MHhiNiwweDAwLDB4MmMsMHg4MCwweDAyLDB4MjAsMHgwMiwweGM4LDB4MDAsMHgzNiwweDAwLDB4MGMsMHg4MCwweDAzLDB4NjAsMHgwMiB9fSwKKyB7MTYsIDB4YjdiMCwgMCwgezB4ZTgsMHgwMCwweDMyLDB4MDAsMHg4ZSwweDgwLDB4MDMsMHgyZSwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI3YzAsIDAsIHsweDk4LDB4MWQsMHhmNSwweDAwLDB4ZjUsMHgwMCwweDNlLDB4NDAsMHg4NywweDkwLDB4MDMsMHhlNCwweDAwLDB4ZjEsMHgwMCwweDNkIH19LAorIHsxNiwgMHhiN2QwLCAwLCB7MHg1MCwweDBmLDB4NTQsMHgwMywweGQxLDB4MDAsMHhlYywweDQwLDB4M2YsMHgxMCwweDBiLDB4YzQsMHg0MywweGYxLDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4YjdlMCwgMCwgezB4NDAsMHgzNiwweDUwLDB4MGYsMHg5NCwweDEzLDB4ZTUsMHgxMCwweGQ5LDB4NDQsMHgzZCwweDQwLDB4MmQsMHhkMCwweDAzLDB4ZTYgfX0sCisgezE2LCAweGI3ZjAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDA1LDB4ZjYsMHg2MCwweGNkLDB4MDIsMHgzYiwweDQwIH19LAorIHsxNiwgMHhiODAwLCAwLCB7MHgwYywweGQwLDB4MDMsMHhiNCwweDQwLDB4ZmQsMHgwNiwweDNlLDB4NDAsMHgwYywweDkwLDB4MDMsMHg2NiwweDA0LDB4YzksMHg4MiB9fSwKKyB7MTYsIDB4YjgxMCwgMCwgezB4YjYsMHg2MiwweDBmLDB4MTgsMHgwYiwweDM2LDB4MDAsMHhjZCwweDQwLDB4MzIsMHg2MSwweDBjLDB4OTAsMHgyMywweDI0LDB4MGEgfX0sCisgezE2LCAweGI4MjAsIDAsIHsweGM5LDB4MDAsMHgzMiwweDQwLDB4NGMsMHhkMCwweDQzLDB4MDYsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiODMwLCAwLCB7MHgzOSwweDEwLDB4ZTMsMHg4MCwweGQ4LDB4MDAsMHgyMiwweDAwLDB4MGQsMHg4MCwweDAyLDB4MjIsMHg5NCwweGI4LDB4MDAsMHgyZSB9fSwKKyB7MTYsIDB4Yjg0MCwgMCwgezB4MDAsMHgwZCwweDgwLDB4MDMsMHgyMSwweDAwLDB4ODgsMHg0MCwweDIyLDB4MDAsMHgwYiwweGM0LDB4MjIsMHgyMSwweDUwLDB4ODggfX0sCisgezE2LCAweGI4NTAsIDAsIHsweDgwLDB4MjIsMHgyMiwweDA4LDB4ODAsMHgwMiwweDIwLDB4MTAsMHg4MCwweDAxLDB4MmEsMHgwMCwweDBhLDB4ODAsMHgwMywweDRlIH19LAorIHsxNiwgMHhiODYwLCAwLCB7MHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweGM2LDB4MDAsMHg4OSwweDAwLDB4MmEsMHg0MCB9fSwKKyB7MTYsIDB4Yjg3MCwgMCwgezB4ODgsMHgxMCwweDBhLDB4ODQsMHgwOCwweGIxLDB4MDAsMHgyOSwweDQwLDB4MGEsMHg3MCwweDBhLDB4YjUsMHgwMCwweDhmLDB4NDAgfX0sCisgezE2LCAweGI4ODAsIDAsIHsweDI5LDB4YzAsMHgwYiwweGY0LDB4MDIsMHgyNCwweDAwLDB4ODEsMHgyMCwweDI4LDB4NDQsMHg4OSwweDEwLDB4MDIsMHgwNCwweDA0IH19LAorIHsxNiwgMHhiODkwLCAwLCB7MHg4MSwweDAyLDB4MmEsMHg0MCwweDA4LDB4MTAsMHgwMiwweDAyLDB4MDEsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjhhMCwgMCwgezB4MTgsMHgxNSwweGE2LDB4MDAsMHg5OSwweDIwLDB4MjIsMHg0MCwweDA5LDB4OTAsMHgxMiwweDI0LDB4ODAsMHhiOSwweDAwLDB4MmYgfX0sCisgezE2LCAweGI4YjAsIDAsIHsweDQ0LDB4MDMsMHhkMCwweDAyLDB4ZjQsMHgwMCwweDhkLDB4MDAsMHgyYiwweDQxLDB4MGIsMHhkMCwweDAyLDB4MjYsMHgxMCwweDg5IH19LAorIHsxNiwgMHhiOGMwLCAwLCB7MHgwNCwweDJhLDB4NDAsMHgwOSwweDkwLDB4NmUsMHgyNCwweDAwLDB4ODksMHgwMCwweDJhLDB4NDAsMHgwYSwweDk0LDB4MDIsMHg0NiB9fSwKKyB7MTYsIDB4YjhkMCwgMCwgezB4MDQsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEyLDB4MTUsMHhlNiwweDAwLDB4YzksMHgwMCwweDM4LDB4NDIgfX0sCisgezE2LCAweGI4ZTAsIDAsIHsweDBjLDB4MTAsMHgxMywweGE2LDB4MDQsMHg3OSwweDA4LDB4M2EsMHg3OCwweDA2LDB4OTIsMHgwMywweGE0LDB4MDgsMHhjOSwweDAwIH19LAorIHsxNiwgMHhiOGYwLCAwLCB7MHgzYSwweDYwLDB4OGYsMHg5OCwweDIzLDB4MDYsMHgwMiwweGM5LDB4MDIsMHgzYSwweDQwLDB4MGQsMHg5MCwweDAzLDB4MDQsMHgwMCB9fSwKKyB7MTYsIDB4YjkwMCwgMCwgezB4YzksMHgwMCwweDM4LDB4NDAsMHgwYywweDkwLDB4MDMsMHgyOCwweDA0LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGI5MTAsIDAsIHsweDI4LDB4MDEsMHg4NCwweDEwLDB4ZjksMHg4MCwweGJlLDB4NDAsMHg0ZiwweDkwLDB4MDIsMHhlNCwweDAwLDB4ZjksMHgwMCwweDNjIH19LAorIHsxNiwgMHhiOTIwLCAwLCB7MHg2MCwweDhkLDB4OTIsMHgwMywweDI0LDB4NDIsMHhlOSwweDEwLDB4MzIsMHg1MCwweDBmLDB4OTQsMHgwMywweGU0LDB4MDAsMHhmOSB9fSwKKyB7MTYsIDB4YjkzMCwgMCwgezB4MDAsMHhiNiwweDQxLDB4MmUsMHgxMCwweDAzLDB4ZTQsMHgwMCwweGY5LDB4MDAsMHgyZSwweDQwLDB4MGYsMHg5MCwweDAzLDB4Y2EgfX0sCisgezE2LCAweGI5NDAsIDAsIHsweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDEwLDB4YTAsMHgwOCwweGM4LDB4MDAsMHgzZSwweDEwIH19LAorIHsxNiwgMHhiOTUwLCAwLCB7MHgwZiwweDg4LDB4MDMsMHgyMCwweDA4LDB4ZjgsMHhjMCwweDFlLDB4MTAsMHgyYywweDQwLDB4MDMsMHhmMiwweDAwLDB4Y2MsMHgwMCB9fSwKKyB7MTYsIDB4Yjk2MCwgMCwgezB4M2YsMHgwMCwweDBjLDB4YzAsMHgxMywweDIwLDB4MDIsMHhjMCwweDAwLDB4MzAsMHgwMCwweDBjLDB4ODAsMHgyYiwweDIwLDB4MTAgfX0sCisgezE2LCAweGI5NzAsIDAsIHsweGMwLDB4MDQsMHgzMiwweDAwLDB4MGYsMHg4MCwweDAzLDB4MGEsMHgwNCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiOTgwLCAwLCB7MHhhOCwweDA1LDB4M2EsMHg4MCwweDg2LDB4ZTAsMHgyZiwweGEwLDB4MWIsMHhlMCwweDAyLDB4M2EsMHg4MCwweGJhLDB4MDQsMHgyZSB9fSwKKyB7MTYsIDB4Yjk5MCwgMCwgezB4ODAsMHgwOCwweGEwLDB4MDMsMHg4OCwweDA4LDB4YzIsMHgwMCwweDJlLDB4ODEsMHgwOCwweDYwLDB4MDIsMHgyOCwweDEwLDB4OGUgfX0sCisgezE2LCAweGI5YTAsIDAsIHsweDgxLDB4MDMsMHg4MCwweDA4LDB4ZTAsMHgwMSwweDc4LDB4MDAsMHg4ZSwweDA0LDB4MDMsMHg4MCwweDA5LDB4NjgsMHgwMywweGNhIH19LAorIHsxNiwgMHhiOWIwLCAwLCB7MHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwNSwweDRjLDB4MDAsMHg4MywweDYwLDB4MmMsMHg0NCB9fSwKKyB7MTYsIDB4YjljMCwgMCwgezB4MGIsMHgzOCwweDAyLDB4MGYsMHg4MCwweGIxLDB4MDAsMHgyYywweGU1LDB4MDMsMHgzMCwweDEwLDB4Y2MsMHgxMCwweDgzLDB4MDAgfX0sCisgezE2LCAweGI5ZDAsIDAsIHsweDBjLDB4YzAsMHgyOSwweDMwLDB4MjIsMHgwNCwweDA5LDB4OTEsMHgxMCwweDI0LDB4YzAsMHhjOCwweDMwLDB4MDAsMHg0YywweDA0IH19LAorIHsxNiwgMHhiOWUwLCAwLCB7MHg5MywweDAyLDB4MjQsMHhjMCwweDBiLDB4MzEsMHgwMiwweDBhLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YjlmMCwgMCwgezB4ZTAsMHgwMSwweDE4LDB4ODAsMHg4NywweDAwLDB4MmQsMHg0MCwweDBiLDB4NzQsMHg0MiwweDFjLDB4MDEsMHhiNSwweDAxLDB4MmMgfX0sCisgezE2LCAweGJhMDAsIDAsIHsweGMwLDB4MGIsMHg2MCwweDAyLDB4YjAsMHgwMCwweDk0LDB4MDQsMHgyZiwweDIwLDB4MDksMHhjMCwweDAyLDB4MTQsMHg5MCwweDk3IH19LAorIHsxNiwgMHhiYTEwLCAwLCB7MHgwMCwweDI1LDB4YzgsMHgwOCwweDcwLDB4MDIsMHg0YywweDgwLDB4OTcsMHgyMCwweDI1LDB4YzAsMHgwOSwweDcwLDB4MDIsMHhlOCB9fSwKKyB7MTYsIDB4YmEyMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MDgsMHgzYSwweDgyLDB4YzYsMHg4MCwweDJkLDB4NjAgfX0sCisgezE2LCAweGJhMzAsIDAsIHsweDBiLDB4ZjgsMHgwYiwweDFhLDB4MDAsMHhmNSwweDgwLDB4M2QsMHhlMCwweDhmLDB4NzgsMHgwMywweGRlLDB4MDIsMHhjNywweDgwIH19LAorIHsxNiwgMHhiYTQwLCAwLCB7MHgyZCwweGUwLDB4MGQsMHg3OCwweDBiLDB4MTcsMHgwMiwweGRmLDB4ODAsMHgyNCwweGY4LDB4MmMsMHhmZCwweDAzLDB4NWUsMHgwYyB9fSwKKyB7MTYsIDB4YmE1MCwgMCwgezB4ZDcsMHhlMCwweDM1LDB4ZTAsMHgwZiwweDY4LDB4MDMsMHgyYSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJhNjAsIDAsIHsweDQ4LDB4MWQsMHhhZSwweDQwLDB4ZmEsMHgwNCwweDNlLDB4NDAsMHgwZiwweDgwLDB4MTMsMHhlYywweDA0LDB4ZjksMHgwMCwweDNlIH19LAorIHsxNiwgMHhiYTcwLCAwLCB7MHhjMSwweDBjLDB4YTAsMHgxMywweGMwLDB4MTAsMHhlOCwweDAwLDB4M2MsMHgwMCwweDRlLDB4ODAsMHg0MywweGM0LDB4MjAsMHg4OSB9fSwKKyB7MTYsIDB4YmE4MCwgMCwgezB4MDAsMHhiYSwweGMwLDB4MDcsMHhiNiwweDIxLDB4ZWQsMHgwNiwweGViLDB4NjgsMHhiYSwweGNjLDB4MGYsMHgyMCwweDEzLDB4YzIgfX0sCisgezE2LCAweGJhOTAsIDAsIHsweDA2LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDA1LDB4YmUsMHgwMCwweGM2LDB4ODAsMHgzMSwweDYwIH19LAorIHsxNiwgMHhiYWEwLCAwLCB7MHgyZCwweDc4LDB4MGIsMHgzZSwweDQ4LDB4ZWMsMHg5MiwweDNkLDB4NjAsMHgwYywweDU4LDB4MDMsMHg1YSwweDQwLDB4ZDUsMHg4MCB9fSwKKyB7MTYsIDB4YmFiMCwgMCwgezB4MzEsMHg2MSwweDBjLDB4NTgsMHgyMywweDM2LDB4MDAsMHhjZiwweDgyLDB4M2YsMHhlMCwweDBjLDB4ZjgsMHgwMywweGZmLDB4NjAgfX0sCisgezE2LCAweGJhYzAsIDAsIHsweGNmLDB4OTAsMHgzMywweGYwLDB4MGMsMHg1MiwweDAzLDB4MDAsMHgwMCwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiYWQwLCAwLCB7MHhhOCwweDExLDB4YjgsMHg4NCwweDg2LDB4MTQsMHhiNSwweGMwLDB4MDgsMHg3MCwweDAyLDB4MWUsMHhjMCwweGM0LDB4MDAsMHgyZCB9fSwKKyB7MTYsIDB4YmFlMCwgMCwgezB4NDAsMHgwOCwweDQwLDB4MDIsMHgxNCwweGQwLDB4ODYsMHgxMCwweDIxLDB4ODAsMHg0YywweDYyLDB4NDIsMHgzNCwweDQwLDB4YTUgfX0sCisgezE2LCAweGJhZjAsIDAsIHsweDAwLDB4MzUsMHhjMCwweDI4LDB4NzAsMHg0MiwweGRjLDB4YzIsMHg4ZiwweDMwLDB4MjMsMHhjMCwweDA4LDB4NTAsMHgwMiwweDJhIH19LAorIHsxNiwgMHhiYjAwLCAwLCB7MHgwNCwweDYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDk4LDB4MjgsMHg4ZSwweDAwLDB4YTUsMHg0MCB9fSwKKyB7MTYsIDB4YmIxMCwgMCwgezB4MDgsMHhmMSwweDAyLDB4MTgsMHg2NCwweGI0LDB4MDAsMHg2ZCwweDQyLDB4MDgsMHg1MCwweDAyLDB4MTgsMHgwMSwweDg1LDB4MDggfX0sCisgezE2LCAweGJiMjAsIDAsIHsweDIxLDB4NDAsMHgwOSwweDU4LDB4MjIsMHg1NCwweDAwLDB4ODUsMHgxMCwweDJkLDB4YzQsMHgwOSwweDcwLDB4MDIsMHhkYywweDA0IH19LAorIHsxNiwgMHhiYjMwLCAwLCB7MHg5NywweDAwLDB4MjUsMHhjMCwweDA4LDB4NDQsMHgwMiwweDAwLDB4MTAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmI0MCwgMCwgezB4NjAsMHgxNCwweDhjLDB4MDAsMHg4MiwweDgwLDB4MjQsMHhjMCwweDA4LDB4ODAsMHgwMiwweDJkLDB4MDAsMHg4MCwweDRhLDB4MmMgfX0sCisgezE2LCAweGJiNTAsIDAsIHsweDQyLDB4MDgsMHgwYSwweDQyLDB4MDYsMHgwMCwweDkyLDB4ODQsMHgyMCwweGEwLDB4ODgsMHgyOCwweDQyLDB4NDQsMHgwMCwweGEzIH19LAorIHsxNiwgMHhiYjYwLCAwLCB7MHgwNiwweDI0LDB4YzAsMHgwYiwweDMwLDB4MDIsMHhjYywweDEwLDB4OTMsMHgwNCwweDI0LDB4YzEsMHgwOSwweDAwLDB4MDIsMHgwOCB9fSwKKyB7MTYsIDB4YmI3MCwgMCwgezB4MDQsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MTUsMHhiYywweDAwLDB4Y2IsMHgwMCwweDM2LDB4NDAgfX0sCisgezE2LCAweGJiODAsIDAsIHsweDBjLDB4YjQsMHgxMywweDJjLDB4MDAsMHhmOSwweDAwLDB4M2UsMHhhMCwweDBjLDB4YTIsMHgwMywweDA0LDB4MDgsMHhjMiwweDgwIH19LAorIHsxNiwgMHhiYjkwLCAwLCB7MHgzMCwweGE4LDB4MGQsMHgyYSwweDAzLDB4NTQsMHgwMCwweGNiLDB4MDAsMHgzZiwweGMwLDB4MGQsMHhmMCwweDAzLDB4ZmMsMHgwOCB9fSwKKyB7MTYsIDB4YmJhMCwgMCwgezB4ZGYsMHgwMCwweDM3LDB4ZDAsMHgwYywweGIwLDB4MDMsMHgyYSwweDA0LDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJiYjAsIDAsIHsweDgwLDB4MDAsMHhlMCwweDAwLDB4ZmIsMHgxMCwweDNhLDB4NDAsMHgwZSwweGIwLDB4MDMsMHhlZCwweDkwLDB4ZjksMHgxMSwweDdlIH19LAorIHsxNiwgMHhiYmMwLCAwLCB7MHg4MCwweDRmLDB4YjAsMHg1MywweGU4LDB4NDAsMHhlOSwweDAwLDB4M2UsMHg0MCwweDBmLDB4OTAsMHgwMywweGE2LDB4MDgsMHhmOSB9fSwKKyB7MTYsIDB4YmJkMCwgMCwgezB4MDEsMHgzYSwweGMwLDB4MGMsMHhiMCwweDEzLDB4Y2MsMHgwMCwweGViLDB4MDIsMHgzYSwweGM2LDB4OGUsMHhiOCwweDAzLDB4ZTAgfX0sCisgezE2LCAweGJiZTAsIDAsIHsweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDEwLDB4ZjAsMHgwYywweGNlLDB4MDAsMHgzZiwweGUwIH19LAorIHsxNiwgMHhiYmYwLCAwLCB7MHgyYywweGYwLDB4ODMsMHgzYSwweDQ4LDB4Y2QsMHgwMSwweDM1LDB4ODAsMHgwYywweDYwLDB4MTIsMHgzNCwweDBhLDB4Y2UsMHgwMCB9fSwKKyB7MTYsIDB4YmMwMCwgMCwgezB4YjMsMHg4MCwweDJjLDB4ZTAsMHgwYiwweDc0LDB4MDAsMHhjOSwweDEwLDB4YjMsMHhjMSwweDBmLDB4ZjAsMHgxYiwweDNjLDB4MDAgfX0sCisgezE2LCAweGJjMTAsIDAsIHsweGNmLDB4MDAsMHhiNywweGMwLDB4MmMsMHhlMCwweDAzLDB4MDAsMHg0NCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiYzIwLCAwLCB7MHg4MSwweDA0LDB4NmUsMHgxMCwweDg4LDB4ODAsMHgyYywweGMwLDB4MTgsMHg5OCwweDAyLDB4MmQsMHg4MCwweDgxLDB4MDAsMHgzNiB9fSwKKyB7MTYsIDB4YmMzMCwgMCwgezB4OTEsMHgwOCwweGIwLDB4MDMsMHg2OCwweDAwLDB4YzksMHgwMCwweDIyLDB4NDAsMHgwOCwweDkwLDB4MDIsMHgyNCwweDAwLDB4ODMgfX0sCisgezE2LCAweGJjNDAsIDAsIHsweDgwLDB4MzYsMHhjMCwweDBiLDB4MzAsMHgwMiwweDJjLDB4MDIsMHg4MywweDAwLDB4MjAsMHhjMCwweDA4LDB4MjAsMHgwMywweDYwIH19LAorIHsxNiwgMHhiYzUwLCAwLCB7MHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNSwweDA2LDB4MDAsMHg4YSwweDgwLDB4MmUsMHg0NSB9fSwKKyB7MTYsIDB4YmM2MCwgMCwgezB4MjgsMHg4OCwweDAyLDB4MjQsMHgwMiwweDg4LDB4MDIsMHgwMiwweDAyLDB4MDgsMHg4MCwweDAyLDB4YTIsMHgwMCwweDk4LDB4MDAgfX0sCisgezE2LCAweGJjNzAsIDAsIHsweDIyLDB4MDAsMHgwOCwweDgwLDB4MTIsMHgyNCwweDAwLDB4ODksMHgwMSwweDIyLDB4YzEsMHgwYSwweGIwLDB4MDIsMHg2YywweDAwIH19LAorIHsxNiwgMHhiYzgwLCAwLCB7MHhhYiwweDAwLDB4MjIsMHhjMSwweDA4LDB4OTAsMHgxMiwweDYwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmM5MCwgMCwgezB4MDgsMHgwNCwweDAwLDB4MDAsMHg4MCwweDAwLDB4MmMsMHhjMCwweDQ4LDB4MDgsMHgxMiwweDAwLDB4ODAsMHg4MCwweDAyLDB4MjQgfX0sCisgezE2LCAweGJjYTAsIDAsIHsweDAwLDB4MDgsMHgxOCwweDQyLDB4YWMsMHgwMiwweDhiLDB4ODAsMHgyMiwweGUwLDB4MDgsMHhiOCwweDEyLDB4MDQsMHgwMiwweDgzIH19LAorIHsxNiwgMHhiY2IwLCAwLCB7MHgwMCwweDIwLDB4YzAsMHgwYiwweDMwLDB4NDIsMHgwYywweDAwLDB4YTMsMHgwMSwweDYwLDB4YzAsMHg0OCwweDEwLDB4MDIsMHg0MiB9fSwKKyB7MTYsIDB4YmNjMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHg2OCwweDA4LDB4Y2EsMHgwMCwweDJlLDB4NDAgfX0sCisgezE2LCAweGJjZDAsIDAsIHsweDA4LDB4ODAsMHgwMywweDAwLDB4MDAsMHhjOCwweDA2LDB4MzIsMHgwMCwweDBjLDB4ODAsMHgwMiwweGEwLDB4MDAsMHhkOCwweDAwIH19LAorIHsxNiwgMHhiY2UwLCAwLCB7MHgzMiwweDAwLDB4MGMsMHg4MCwweDAzLDB4NzQsMHgwMCwweGNiLDB4MDAsMHgyMiwweGMwLDB4MGYsMHhmMCwweDAzLDB4M2MsMHgwMCB9fSwKKyB7MTYsIDB4YmNmMCwgMCwgezB4ZWYsMHgwMCwweDM3LDB4YzAsMHgwYywweDgwLDB4MDEsMHg0MCwweDAzLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJkMDAsIDAsIHsweGEwLDB4MTksMHhmYywweDAwLDB4ZmMsMHgwNCwweDNmLDB4YzAsMHgwZiwweGMwLDB4MDMsMHhlMSwweDAwLDB4ZmMsMHgwMCwweDNiIH19LAorIHsxNiwgMHhiZDEwLCAwLCB7MHgwMCwweDBmLDB4ZDAsMHgwMywweDdjLDB4MDAsMHhlZiwweDAwLDB4MmYsMHhjMCwweDBmLDB4ZjAsMHgxMSwweGY0LDB4MTAsMHhmZCB9fSwKKyB7MTYsIDB4YmQyMCwgMCwgezB4MDIsMHgzZCwweGMwLDB4NGYsMHhmMCwweDAzLDB4ZGMsMHgwMCwweGRmLDB4MDQsMHgzZiwweGMwLDB4MGYsMHhjMCwweDQzLDB4ZTkgfX0sCisgezE2LCAweGJkMzAsIDAsIHsweDA2LDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDEsMHgwMiwweDcwLDB4MjAsMHhkYywweDEwIH19LAorIHsxNiwgMHhiZDQwLCAwLCB7MHg2NywweDA0LDB4MGQsMHhjMSwweDAyLDB4NzAsMHgyMCwweDljLDB4MTAsMHgzNywweDA0LDB4MGQsMHhjMSwweDA2LDB4NzAsMHg0MCB9fSwKKyB7MTYsIDB4YmQ1MCwgMCwgezB4NGMsMHgxMCwweDM3LDB4MTQsMHgxNSwweGMxLDB4MDMsMHg3MCwweDQwLDB4ZGMsMHgxMCwweDEzLDB4MDQsMHgwZCwweGMxLDB4MDcgfX0sCisgezE2LCAweGJkNjAsIDAsIHsweDcwLDB4NDAsMHhkYywweDEwLDB4MzcsMHgwNCwweDBkLDB4YzAsMHgzMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiZDcwLCAwLCB7MHgwMCwweGM1LDB4NDQsMHgwNSwweDcxLDB4MjEsMHg1YywweDQwLDB4NTcsMHgxMCwweDE1LDB4YzQsMHgwNSwweDcxLDB4MDUsMHg1YyB9fSwKKyB7MTYsIDB4YmQ4MCwgMCwgezB4NDAsMHg1NywweDEwLDB4MTUsMHhjNCwweDA2LDB4NzEsMHgwMSwweDRjLDB4NDAsMHg1NywweDEwLDB4MGQsMHhjNCwweDA1LDB4NzEgfX0sCisgezE2LCAweGJkOTAsIDAsIHsweDA1LDB4NWMsMHg0MCwweDUzLDB4MTAsMHgxNSwweGM0LDB4MDcsMHg3MSwweDAxLDB4NWMsMHg0MCwweDU3LDB4MTAsMHgxNSwweGMwIH19LAorIHsxNiwgMHhiZGEwLCAwLCB7MHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyMCB9fSwKKyB7MTYsIDB4YmRiMCwgMCwgezB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAgfX0sCisgezE2LCAweGJkYzAsIDAsIHsweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MiwweDAxIH19LAorIHsxNiwgMHhiZGQwLCAwLCB7MHgyMCwweDgwLDB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmRlMCwgMCwgezB4MDAsMHg4NCwweDAwLDB4MDEsMHg2MCwweDAwLDB4NTgsMHgwMCwweDU2LDB4MDAsMHgwNSwweDgwLDB4MDEsMHg2MCwweDA0LDB4NTggfX0sCisgezE2LCAweGJkZjAsIDAsIHsweDAwLDB4MTYsMHgwMCwweDA1LDB4ODAsMHgwMSwweDIwLDB4MDEsMHg1OCwweDAwLDB4MTYsMHgwMCwweDA1LDB4ODAsMHgwMSwweDYwIH19LAorIHsxNiwgMHhiZTAwLCAwLCB7MHgwMCwweDU4LDB4MDAsMHg1NiwweDAwLDB4MDUsMHg4MCwweDAxLDB4NjAsMHgwMCwweDU4LDB4MDAsMHgxNiwweDAwLDB4MDEsMHg4MCB9fSwKKyB7MTYsIDB4YmUxMCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0OCwweDA1LDB4NzIsMHgxMSwweDVjLDB4ODAgfX0sCisgezE2LCAweGJlMjAsIDAsIHsweDE3LDB4MjAsMHgxNSwweGQ4LDB4MDUsMHgzMiwweDExLDB4MWMsMHg4MCwweDQ3LDB4MjAsMHgxNCwweDg4LDB4MDAsMHg3MiwweDAxIH19LAorIHsxNiwgMHhiZTMwLCAwLCB7MHgxYywweDgwLDB4NTcsMHgyMCwweDA1LDB4YzgsMHgwNCwweDcyLDB4MDEsMHg1YywweDgwLDB4NTcsMHgyMCwweDE1LDB4YzgsMHgwMSB9fSwKKyB7MTYsIDB4YmU0MCwgMCwgezB4NzIsMHgwMSwweDVjLDB4ODAsMHg1NywweDI0LDB4MTUsMHhjMCwweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJlNTAsIDAsIHsweDAwLDB4YzEsMHg0MCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAsMHgwNiwweDAwLDB4MDEsMHg4MCwweDQwLDB4MjAsMHgwMCwweDE4IH19LAorIHsxNiwgMHhiZTYwLCAwLCB7MHgwMCwweDA2LDB4MDAsMHgwMSwweDkwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgwMCwweDA2LDB4MDAsMHg0MSwweDgwLDB4MDAsMHg2MCB9fSwKKyB7MTYsIDB4YmU3MCwgMCwgezB4MDAsMHgxOCwweDAwLDB4MDYsMHgwMCwweDAxLDB4ODAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDEwLDB4MDYsMHgwMCwweDAxLDB4ODAgfX0sCisgezE2LCAweGJlODAsIDAsIHsweDMxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDgsMHgwNCwweDIyLDB4MDEsMHgwOCwweDgwIH19LAorIHsxNiwgMHhiZTkwLCAwLCB7MHgwMiwweDIwLDB4MTAsMHg4OCwweDA0LDB4NjIsMHgwMSwweDA4LDB4ODAsMHg0MiwweDIwLDB4MTAsMHg4OCwweDAwLDB4MjAsMHgwMSB9fSwKKyB7MTYsIDB4YmVhMCwgMCwgezB4MDgsMHg4MCwweDQyLDB4MjAsMHgwMCwweDg4LDB4MDQsMHgyMiwweDAxLDB4MDgsMHgwMCwweDQyLDB4MjAsMHgxMCwweDg4LDB4MDAgfX0sCisgezE2LCAweGJlYjAsIDAsIHsweDIyLDB4MDEsMHgwOCwweDgwLDB4NDIsMHgzMCwweDEwLDB4ODAsMHgzMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhiZWMwLCAwLCB7MHgwMCwweGM1LDB4NGEsMHgwNSwweDQyLDB4ODEsMHg1MCwweGEwLDB4MDQsMHgyOCwweDE1LDB4MGEsMHgwNSwweDUyLDB4ODEsMHgxMCB9fSwKKyB7MTYsIDB4YmVkMCwgMCwgezB4YTAsMHg0NCwweDI4LDB4MTEsMHgxYSwweDAwLDB4NDAsMHg4MCwweDEwLDB4YTAsMHg1NCwweDI4LDB4MDUsMHgwYSwweDA1LDB4NDIgfX0sCisgezE2LCAweGJlZTAsIDAsIHsweDgxLDB4NTEsMHgyMCwweDE0LDB4MjgsMHgxNSwweDBhLDB4MDEsMHg0MiwweDgxLDB4NTAsMHhhMCwweDU0LDB4MjgsMHgxNSwweDAwIH19LAorIHsxNiwgMHhiZWYwLCAwLCB7MHgzMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDBjLDB4MDEsMHg1MywweDQwLDB4NTQsMHhjMCB9fSwKKyB7MTYsIDB4YmYwMCwgMCwgezB4MTUsMHgzMCwweDA1LDB4NWMsMHgwMSwweDU3LDB4NDAsMHg1NCwweGMwLDB4MTUsMHgzMCwweDA1LDB4NWMsMHgwMSwweDUzLDB4MDAgfX0sCisgezE2LCAweGJmMTAsIDAsIHsweDU1LDB4YzAsMHgxNSwweDc0LDB4MDUsMHg0YywweDAxLDB4NTMsMHgwMCwweDU1LDB4YzAsMHgxNSwweDc0LDB4MDUsMHg0YywweDAxIH19LAorIHsxNiwgMHhiZjIwLCAwLCB7MHg1MywweDAwLDB4NTQsMHhjMCwweDExLDB4MzAsMHgwMSwweDQwLDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YmYzMCwgMCwgezB4MDAsMHg4MCwweDAwLDB4MDAsMHg0MCwweDAwLDB4MTAsMHgwMCwweDA0LDB4MDAsMHgwMSwweDAwLDB4MDAsMHg0MCwweDAwLDB4MTAgfX0sCisgezE2LCAweGJmNDAsIDAsIHsweDAwLDB4MDQsMHgwMCwweDAxLDB4MDAsMHgwMCwweDQyLDB4MDAsMHgxMCwweDAwLDB4MDQsMHgwMCwweDExLDB4MDAsMHgwMCwweDQwIH19LAorIHsxNiwgMHhiZjUwLCAwLCB7MHgwMCwweDEwLDB4YzEsMHgwNCwweDAwLDB4MDEsMHgwMCwweDAwLDB4NDAsMHgwMCwweDEwLDB4MDAsMHgwMSwweDEwLDB4MDEsMHgwMSB9fSwKKyB7MTYsIDB4YmY2MCwgMCwgezB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg2MCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MDAgfX0sCisgezE2LCAweGJmNzAsIDAsIHsweDIwLDB4ODAsMHgwOCwweDIwLDB4MDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwOCwweDIwLDB4MDIsMHgwOCwweDAwIH19LAorIHsxNiwgMHhiZjgwLCAwLCB7MHg4MiwweDAwLDB4MjAsMHg4NCwweDAwLDB4MjAsMHgwMiwweDA4LDB4MDAsMHg4MiwweDAwLDB4MjAsMHg4NCwweDA4LDB4MjAsMHgwMiB9fSwKKyB7MTYsIDB4YmY5MCwgMCwgezB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMSwweDgwLDB4MDgsMHgwMSwweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGJmYTAsIDAsIHsweDAwLDB4YzUsMHg0MCwweDA1LDB4NjAsMHgwMSwweDU4LDB4MDAsMHg5NiwweDAwLDB4MTUsMHg5MCwweDA1LDB4NjQsMHgwMiwweDU4IH19LAorIHsxNiwgMHhiZmIwLCAwLCB7MHgwMCwweDU2LDB4MDAsMHg1NSwweDkwLDB4MDUsMHg2MCwweDAxLDB4ZDksMHgwMCwweDE2LDB4NDAsMHgxNSwweDgwLDB4MDUsMHg2MCB9fSwKKyB7MTYsIDB4YmZjMCwgMCwgezB4MDEsMHg1OSwweDAwLDB4NzYsMHg0MCwweDE1LDB4ODAsMHgwNSwweDYwLDB4MDEsMHg1OCwweDAwLDB4NTYsMHgwMCwweDE1LDB4ODAgfX0sCisgezE2LCAweGJmZDAsIDAsIHsweDMxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM0LDB4NDAsMHgwMywweDYwLDB4MDAsMHhkOCwweDAwIH19LAorIHsxNiwgMHhiZmUwLCAwLCB7MHgzNiwweDAwLDB4NGQsMHg4MCwweDAzLDB4NjAsMHgwMCwweGQ4LDB4MDAsMHgzNiwweDAwLDB4MGQsMHg4MCwweDA3LDB4NjIsMHgwMCB9fSwKKyB7MTYsIDB4YmZmMCwgMCwgezB4NTgsMHgwMCwweDM2LDB4MDAsMHgwZCwweDgwLDB4MDcsMHg2MCwweDAwLDB4ZDgsMHg4MCwweDE2LDB4MDAsMHgwZCwweDgwLDB4MDMgfX0sCisgezE2LCAweGMwMDAsIDAsIHsweDYwLDB4MDAsMHhkOCwweDAwLDB4MzYsMHgwMCwweDFkLDB4ODAsMHgzMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMDEwLCAwLCB7MHgwMCwweGM1LDB4NDIsMHgwNCwweDMwLDB4ODEsMHgwYywweDIwLDB4NDMsMHgwOCwweDEwLDB4YzIsMHgwNCwweDMwLDB4ODEsMHgwYyB9fSwKKyB7MTYsIDB4YzAyMCwgMCwgezB4MjAsMHg0MywweDA4LDB4MTAsMHhjMiwweDA0LDB4MzAsMHhjMSwweDBjLDB4MjAsMHg0MywweDA4LDB4MTAsMHhjMiwweDA2LDB4MzAgfX0sCisgezE2LCAweGMwMzAsIDAsIHsweDgxLDB4MGMsMHgyMCwweDQzLDB4MDgsMHgxMCwweGMyLDB4MDQsMHgzMCwweDgxLDB4MGMsMHgyMCwweDQzLDB4MDgsMHgxOCwweGMwIH19LAorIHsxNiwgMHhjMDQwLCAwLCB7MHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4MGMsMHgwMCB9fSwKKyB7MTYsIDB4YzA1MCwgMCwgezB4MDMsMHgwMCwweDAwLDB4YzAsMHgwMCwweDMwLDB4MDAsMHgwYywweDAwLDB4MDMsMHgwMCwweDAwLDB4YzAsMHg0MCwweDMwLDB4MDAgfX0sCisgezE2LCAweGMwNjAsIDAsIHsweDBjLDB4MDAsMHgwMywweDAwLDB4MDAsMHhjMCwweDAwLDB4MzAsMHgwMCwweDBjLDB4MDAsMHgwMywweDAwLDB4MDAsMHhjMCwweDAwIH19LAorIHsxNiwgMHhjMDcwLCAwLCB7MHgzMCwweDAwLDB4MGMsMHgwMCwweDAzLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzA4MCwgMCwgezB4MDAsMHg4MCwweDAyLDB4MDEsMHgzMCwweDgwLDB4NGMsMHgyMCwweDEzLDB4MDgsMHgwNCwweGMyLDB4MDEsMHgzMCwweDgwLDB4NGMgfX0sCisgezE2LCAweGMwOTAsIDAsIHsweDIwLDB4MTMsMHgwOCwweDA0LDB4YzIsMHgyNSwweDMwLDB4ODEsMHg0YywweDIwLDB4MTMsMHgwOCwweDA0LDB4YzIsMHgwMSwweDMwIH19LAorIHsxNiwgMHhjMGEwLCAwLCB7MHg4MCwweDRjLDB4MzIsMHg1MywweDA4LDB4MDQsMHhjMiwweDAxLDB4MzAsMHg4MCwweDRjLDB4MjAsMHgxMywweDA4LDB4MDQsMHhjMCB9fSwKKyB7MTYsIDB4YzBiMCwgMCwgezB4MjAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0MiwweDA1LDB4NjIsMHg4MSwweDU4LDB4MjAgfX0sCisgezE2LCAweGMwYzAsIDAsIHsweDU2LDB4MDgsMHgxNSwweDgyLDB4MDQsMHg2MCwweDgxLDB4NTgsMHgyMCwweDQ2LDB4MDgsMHgxNSwweDgyLDB4MDEsMHg2MCwweGMxIH19LAorIHsxNiwgMHhjMGQwLCAwLCB7MHg1OCwweDIwLDB4NDYsMHgwOCwweDE1LDB4ODIsMHgwMSwweDYwLDB4ODEsMHg1OCwweDMwLDB4NTYsMHgwOCwweDE1LDB4ODIsMHgwNSB9fSwKKyB7MTYsIDB4YzBlMCwgMCwgezB4NjAsMHg4MSwweDU4LDB4MjAsMHg1NiwweDA4LDB4MDUsMHg4MCwweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMwZjAsIDAsIHsweDAwLDB4YzUsMHg0MiwweDAwLDB4MjAsMHg4MCwweDA4LDB4MjAsMHgwMiwweDA4LDB4MDAsMHg4MiwweDAwLDB4MjAsMHg4MCwweDA4IH19LAorIHsxNiwgMHhjMTAwLCAwLCB7MHgyMCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMCwweDgwLDB4MGMsMHgyMCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMCB9fSwKKyB7MTYsIDB4YzExMCwgMCwgezB4ODAsMHgwOCwweDIwLDB4MDMsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwOCwweDIwLDB4MDIsMHgwOCwweDAwLDB4ODAgfX0sCisgezE2LCAweGMxMjAsIDAsIHsweDIxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDIsMHgwNCwweDY2LDB4ODEsMHgxOCwweDIwIH19LAorIHsxNiwgMHhjMTMwLCAwLCB7MHg0NiwweDA4LDB4MTEsMHg4MiwweDA0LDB4NjQsMHg4MSwweDE4LDB4MjAsMHg0NiwweDA4LDB4MTEsMHg4MiwweDAwLDB4NjAsMHg4MSB9fSwKKyB7MTYsIDB4YzE0MCwgMCwgezB4MGMsMHgyMCwweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDAsMHg2MCwweDgxLDB4MTksMHgyMCwweDQzLDB4MDgsMHgxMSwweDgyLDB4MDQgfX0sCisgezE2LCAweGMxNTAsIDAsIHsweDYwLDB4ODEsMHgxOSwweDIwLDB4NDYsMHg0OCwweDAxLDB4ODAsMHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMTYwLCAwLCB7MHgwMCwweGM1LDB4NjAsMHgwNSwweDU4LDB4MDEsMHg1NiwweDAwLDB4NTUsMHg4MCwweDE1LDB4NjAsMHgwNCwweDU4LDB4MDEsMHg1NiB9fSwKKyB7MTYsIDB4YzE3MCwgMCwgezB4MDAsMHg0NSwweDgwLDB4MTEsMHg2MCwweDAwLDB4NTgsMHgwMCwweDA2LDB4MDAsMHg0NSwweDgwLDB4MTUsMHg2MCwweDAxLDB4NTggfX0sCisgezE2LCAweGMxODAsIDAsIHsweDAxLDB4MTYsMHgwMCwweDAxLDB4ODAsMHgxNSwweDYwLDB4MDUsMHg1OCwweDAxLDB4NTYsMHgwMCwweDU1LDB4ODAsMHgwNSwweDQwIH19LAorIHsxNiwgMHhjMTkwLCAwLCB7MHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA2LDB4MDEsMHg0OSwweDgwLDB4MTAsMHg2MCB9fSwKKyB7MTYsIDB4YzFhMCwgMCwgezB4MTQsMHgxOCwweDA1LDB4MDYsMHgwMSwweDc5LDB4ODAsMHg1MCwweDYwLDB4MTQsMHgxOCwweDAxLDB4MDYsMHgwMSwweDQxLDB4ODAgfX0sCisgezE2LCAweGMxYjAsIDAsIHsweDUwLDB4NjAsMHgwNCwweDE4LDB4MDUsMHgwNiwweDAxLDB4NDEsMHg4MCwweDEwLDB4NjAsMHgxNCwweDE4LDB4MDUsMHgwNiwweDAxIH19LAorIHsxNiwgMHhjMWMwLCAwLCB7MHg0MSwweDgwLDB4NTAsMHg2MCwweDE0LDB4MTgsMHgwNSwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzFkMCwgMCwgezB4MDAsMHg4MCwweDAyLDB4MDEsMHgwNCwweDgwLDB4NDAsMHgyMCwweDEwLDB4MDgsMHgwNCwweDAyLDB4MDAsMHgwNCwweDA0LDB4NDAgfX0sCisgezE2LCAweGMxZTAsIDAsIHsweDIwLDB4MTAsMHgwOCwweDA0LDB4MDIsMHgwMSwweDAwLDB4ODQsMHg0MCwweDIwLDB4MTAsMHgwOCwweDA0LDB4MDIsMHgwMSwweDAwIH19LAorIHsxNiwgMHhjMWYwLCAwLCB7MHg4MCwweDQxLDB4MjAsMHgxMCwweDA4LDB4MDQsMHgwMiwweDExLDB4MDAsMHg4MCwweDQxLDB4MjAsMHgxMCwweDQ4LDB4MDQsMHgwMCB9fSwKKyB7MTYsIDB4YzIwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHg0NiwweDAzLDB4NTEsMHg4MCwweGQ0LDB4NjAgfX0sCisgezE2LCAweGMyMTAsIDAsIHsweDM1LDB4MTgsMHgwZCwweDQ2LDB4MDIsMHgxMSwweDgwLDB4ZDQsMHg2MCwweDM1LDB4MTgsMHgwZCwweDQ2LDB4MDMsMHgxMSwweDgwIH19LAorIHsxNiwgMHhjMjIwLCAwLCB7MHhkNCwweDYwLDB4MzUsMHgxOCwweDBkLDB4NDYsMHgwMywweDUxLDB4ODAsMHhkNCwweDYwLDB4MzUsMHgxOCwweDBkLDB4NDYsMHgwMyB9fSwKKyB7MTYsIDB4YzIzMCwgMCwgezB4NTEsMHg4MCwweGQ0LDB4NjAsMHgzNSwweDE4LDB4MGQsMHg0MCwweDMxLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMyNDAsIDAsIHsweDAwLDB4YzUsMHg0NiwweDA1LDB4NzAsMHg4MSwweDVjLDB4NjAsMHgwNywweDE4LDB4MTUsMHhjNiwweDA0LDB4NzEsMHg4MSwweDFjIH19LAorIHsxNiwgMHhjMjUwLCAwLCB7MHg2MCwweDE3LDB4MTgsMHgxNSwweGM2LDB4MDUsMHgzMSwweDgxLDB4ZGMsMHg2MCwweDU3LDB4MTgsMHgxNSwweGM2LDB4MDUsMHg3MSB9fSwKKyB7MTYsIDB4YzI2MCwgMCwgezB4ODAsMHgxYywweDYwLDB4NzcsMHgxOCwweDE1LDB4Y2UsMHgwNSwweDcxLDB4ODEsMHg1YywweDYwLDB4NTcsMHgxOCwweDE1LDB4YzAgfX0sCisgezE2LCAweGMyNzAsIDAsIHsweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4NDYsMHgwMiwweDcxLDB4ODAsMHg5YywweDYxIH19LAorIHsxNiwgMHhjMjgwLCAwLCB7MHg3NywweDE4LDB4MGQsMHhjNiwweDAyLDB4NzEsMHg4MCwweDljLDB4NjAsMHgzNywweDE4LDB4MGQsMHhjMiwweDAzLDB4MzEsMHg4MCB9fSwKKyB7MTYsIDB4YzI5MCwgMCwgezB4NWMsMHg2MCwweDI3LDB4MTgsMHgwZCwweGM2LDB4MDMsMHg3MSwweDgwLDB4OWMsMHg2MCwweDE3LDB4MTgsMHgwZCwweGNlLDB4MDMgfX0sCisgezE2LCAweGMyYTAsIDAsIHsweDcxLDB4ODAsMHhkYywweDYwLDB4MzcsMHgxOCwweDBkLDB4YzAsMHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjMmIwLCAwLCB7MHgwMCwweDQ1LDB4NDYsMHgwNSwweDc1LDB4ODEsMHg1YywweDYwLDB4NzcsMHgxOCwweDE1LDB4YzYsMHgwNSwweDc1LDB4ODEsMHg1YyB9fSwKKyB7MTYsIDB4YzJjMCwgMCwgezB4NjAsMHg1NywweDE4LDB4MTUsMHhjNiwweDA1LDB4MzEsMHg4MSwweDBjLDB4NjAsMHg1NywweDE4LDB4MTUsMHhjNiwweDA1LDB4NzEgfX0sCisgezE2LCAweGMyZDAsIDAsIHsweDgxLDB4NWMsMHg2MCwweDQzLDB4MTgsMHgxNSwweGM2LDB4MDUsMHg3MSwweDgxLDB4NWMsMHg2MCwweDU3LDB4MTgsMHgxNSwweGMwIH19LAorIHsxNiwgMHhjMmUwLCAwLCB7MHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyMCB9fSwKKyB7MTYsIDB4YzJmMCwgMCwgezB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAgfX0sCisgezE2LCAweGMzMDAsIDAsIHsweDVjLDB4MjAsMHgxMiwweDA4LDB4MDQsMHg4MiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MDAsMHgxNywweDA4LDB4MDQsMHg4MiwweDAxIH19LAorIHsxNiwgMHhjMzEwLCAwLCB7MHgyMCwweDgwLDB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzMyMCwgMCwgezB4MDAsMHgwMCwweDA2LDB4MDEsMHg2MywweDgwLDB4NTgsMHg2MCwweDE2LDB4MTgsMHgwNSwweDg2LDB4MDEsMHg2MSwweDgwLDB4NTggfX0sCisgezE2LCAweGMzMzAsIDAsIHsweDYwLDB4MTYsMHgxOCwweDA1LDB4ODYsMHgwMSwweDYxLDB4ODEsMHg1OCwweDYwLDB4MTYsMHgxOCwweDA1LDB4ODYsMHgwMSwweDYxIH19LAorIHsxNiwgMHhjMzQwLCAwLCB7MHg4MCwweDU4LDB4NjAsMHg1NiwweDE4LDB4MDUsMHg4NiwweDAxLDB4NjEsMHg4MCwweDU4LDB4NjAsMHgxNiwweDE4LDB4MDUsMHg4MCB9fSwKKyB7MTYsIDB4YzM1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg0MCwweDA1LDB4NzAsMHgwMSwweDVjLDB4MDAgfX0sCisgezE2LCAweGMzNjAsIDAsIHsweDE3LDB4MDAsMHgxNSwweGMwLDB4ODUsMHg3NCwweDAxLDB4MWMsMHgwMCwweDQ3LDB4MDAsMHgxMSwweGMwLDB4MDUsMHg3MCwweDAxIH19LAorIHsxNiwgMHhjMzcwLCAwLCB7MHg1YywweDAwLDB4NTMsMHgwMCwweDEwLDB4YzAsMHgwNSwweDcwLDB4MDEsMHg1YywweDAwLDB4NTcsMHgwMCwweDE0LDB4YzksMHgwNCB9fSwKKyB7MTYsIDB4YzM4MCwgMCwgezB4NzAsMHgwMSwweDFjLDB4MDAsMHg1NywweDAwLDB4MTUsMHhjMCwweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGMzOTAsIDAsIHsweDAwLDB4NDUsMHg0MiwweDAwLDB4NjAsMHhjMCwweDE4LDB4MjAsMHgwNiwweDA4LDB4MDEsMHg4MiwweDAwLDB4NjAsMHg4MCwweDE4IH19LAorIHsxNiwgMHhjM2EwLCAwLCB7MHgyMCwweDA2LDB4MDgsMHgwMSwweDgyLDB4MDAsMHgyMCwweDgwLDB4MTgsMHgzMCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MTAsMHg2MCB9fSwKKyB7MTYsIDB4YzNiMCwgMCwgezB4ODAsMHgxOCwweDIwLDB4MDYsMHgwOCwweDAwLDB4ODIsMHgwMCwweDYwLDB4ODAsMHgxOCwweDIwLDB4MDYsMHgwOCwweDAxLDB4ODAgfX0sCisgezE2LCAweGMzYzAsIDAsIHsweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ0LDB4NDIsMHgwNCwweDIwLDB4ODEsMHgwOCwweDIwIH19LAorIHsxNiwgMHhjM2QwLCAwLCB7MHgwMiwweDA4LDB4MTAsMHg4MiwweDA0LDB4MjAsMHg4MSwweDA4LDB4MjAsMHg0MiwweDA4LDB4MTAsMHg4MiwweDA0LDB4MjAsMHg4MSB9fSwKKyB7MTYsIDB4YzNlMCwgMCwgezB4MDgsMHgyMCwweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDQsMHgyMCwweDgxLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMSwweDgyLDB4MDQgfX0sCisgezE2LCAweGMzZjAsIDAsIHsweDIwLDB4ODEsMHgwOCwweDIwLDB4NDIsMHgwOCwweDEwLDB4ODAsMHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNDAwLCAwLCB7MHgwMCwweDQ1LDB4NDIsMHgwNSwweDQwLDB4YzUsMHg1MCwweDIwLDB4MTQsMHgwOCwweDE1LDB4MDAsMHgwNCwweDQwLDB4ODEsMHg1MCB9fSwKKyB7MTYsIDB4YzQxMCwgMCwgezB4MjAsMHg1NCwweDA4LDB4MTEsMHgwMiwweDA1LDB4MDAsMHg4MCwweDEwLDB4MjAsMHg0NSwweDBjLDB4MTEsMHg0MiwweDA0LDB4NDAgfX0sCisgezE2LCAweGM0MjAsIDAsIHsweDgxLDB4NTAsMHgyMCwweDE0LDB4MGMsMHgxNSwweDQyLDB4MDQsMHg0MCwweDgxLDB4MTAsMHgyMCwweDU0LDB4MDgsMHgxNSwweDAwIH19LAorIHsxNiwgMHhjNDMwLCAwLCB7MHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAzLDB4MDEsMHg1MCwweGMwLDB4NDQsMHgzMCB9fSwKKyB7MTYsIDB4YzQ0MCwgMCwgezB4MTUsMHgwYywweDA1LDB4NDMsMHgwMSwweDUwLDB4YzAsMHg0YywweDMwLDB4MTUsMHgwYywweDA1LDB4NDMsMHgyMSwweDUwLDB4YzAgfX0sCisgezE2LCAweGM0NTAsIDAsIHsweDU0LDB4MzAsMHgxNSwweDBjLDB4MDUsMHg0MywweDAxLDB4NTAsMHhjMCwweDU0LDB4MzAsMHgxNSwweDBjLDB4MDUsMHg0MywweDAxIH19LAorIHsxNiwgMHhjNDYwLCAwLCB7MHg1MCwweGMwLDB4NTQsMHgyMCwweDE1LDB4MGMsMHgwNSwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzQ3MCwgMCwgezB4MDAsMHgwMCwweDA4LDB4MDAsMHg0MiwweDAwLDB4MDQsMHg4MCwweDA0LDB4MjAsMHgwMSwweDA4LDB4MDAsMHg0MiwweDAwLDB4MDQgfX0sCisgezE2LCAweGM0ODAsIDAsIHsweDgwLDB4MDQsMHgyMCwweDAxLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgxMCwweDAwLDB4MDQsMHgwMCwweDAxLDB4MDgsMHgwMCwweDQyIH19LAorIHsxNiwgMHhjNDkwLCAwLCB7MHgwMCwweDEwLDB4ODAsMHgwNCwweDAwLDB4MDEsMHgwOCwweDAwLDB4NDIsMHgwMCwweDEwLDB4ODAsMHgwNCwweDIwLDB4MDEsMHgwMCB9fSwKKyB7MTYsIDB4YzRhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg0MiwweDAyLDB4MDAsMHg4MCwweDg0LDB4MjAgfX0sCisgezE2LCAweGM0YjAsIDAsIHsweDIwLDB4MDgsMHgwOCwweDAyLDB4MDIsMHgwMCwweDgwLDB4ODQsMHgyMCwweDIwLDB4MDgsMHgwOCwweDAyLDB4MDIsMHgwMCwweDgwIH19LAorIHsxNiwgMHhjNGMwLCAwLCB7MHg4MCwweGEwLDB4MjAsMHgyOCwweDA4LDB4MDIsMHgwMiwweDAwLDB4ODAsMHg4MCwweDIwLDB4MjAsMHgyOCwweDA4LDB4MDIsMHgwMiB9fSwKKyB7MTYsIDB4YzRkMCwgMCwgezB4MDAsMHg4MCwweDgwLDB4MjAsMHgyMCwweDA4LDB4MDgsMHgwMCwweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM0ZTAsIDAsIHsweDAwLDB4NDUsMHg0MCwweDA1LDB4NjAsMHg0MSwweDU4LDB4MDAsMHg1NiwweDAwLDB4MTUsMHg4MCwweDA1LDB4NjAsMHgwMSwweDU4IH19LAorIHsxNiwgMHhjNGYwLCAwLCB7MHgwMCwweDU2LDB4MDAsMHgxNSwweDgwLDB4MDUsMHgyMCwweDAxLDB4ZDgsMHgwMCwweDU2LDB4MDAsMHgxNSwweDgwLDB4MDUsMHg2MCB9fSwKKyB7MTYsIDB4YzUwMCwgMCwgezB4MDEsMHg1OCwweDAwLDB4NzYsMHgwMCwweDE1LDB4ODAsMHgwNSwweDYwLDB4MDEsMHg1OCwweDAwLDB4NTYsMHgwMCwweDE1LDB4ODAgfX0sCisgezE2LCAweGM1MTAsIDAsIHsweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM1LDB4NDAsMHgwMywweDYwLDB4MDAsMHhkOCwweDAwIH19LAorIHsxNiwgMHhjNTIwLCAwLCB7MHgyNiwweDAwLDB4MGQsMHg4MCwweDAyLDB4NjAsMHgwMCwweGQ4LDB4MDAsMHgzNiwweDAwLDB4MGQsMHg4MCwweDA3LDB4NjAsMHgwMSB9fSwKKyB7MTYsIDB4YzUzMCwgMCwgezB4NWMsMHgwMCwweDM2LDB4MDAsMHgwZCwweDgwLDB4MDMsMHg2MCwweDAwLDB4ZDgsMHgwMCwweDU3LDB4MDAsMHgwZCwweDgwLDB4MDIgfX0sCisgezE2LCAweGM1NDAsIDAsIHsweDYwLDB4MDAsMHg5OCwweDAwLDB4MzYsMHgwMCwweDBkLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwNCwweDMwLDB4MjEsMHgwYywweDAwLDB4NDMsMHgwMCwweDEwLDB4YzAsMHgwNCwweDMwLDB4MDEsMHgwYyB9fSwKKyB7MTYsIDB4YzU2MCwgMCwgezB4MDAsMHg0MywweDAwLDB4MTAsMHhjMCwweDA0LDB4MzAsMHgwMSwweDE4LDB4MDAsMHg0MywweDAwLDB4MTAsMHhjMCwweDA0LDB4MzAgfX0sCisgezE2LCAweGM1NzAsIDAsIHsweDAxLDB4MGMsMHgwMCwweDQ2LDB4MDAsMHgxMCwweGMwLDB4MDQsMHgzMCwweDAxLDB4MGMsMHgwMCwweDQzLDB4MDAsMHgxMCwweGMwIH19LAorIHsxNiwgMHhjNTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4MGMsMHgwMCB9fSwKKyB7MTYsIDB4YzU5MCwgMCwgezB4MDMsMHgwMCwweDAwLDB4YzAsMHgwMCwweDM1LDB4MDgsMHgwYywweDAwLDB4MDMsMHgwMCwweDAwLDB4YzYsMHgwMCwweDE0LDB4MDAgfX0sCisgezE2LCAweGM1YTAsIDAsIHsweDA4LDB4MDAsMHgwMywweDQwLDB4MDAsMHhjMCwweDAwLDB4MzAsMHgwMCwweDBkLDB4NDAsMHgwMiwweDAwLDB4MDAsMHhjMCwweDAwIH19LAorIHsxNiwgMHhjNWIwLCAwLCB7MHgzMCwweDAwLDB4MGMsMHgwMCwweDAzLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzVjMCwgMCwgezB4MDAsMHgwMCwweDA1LDB4MDEsMHgzMSwweDQwLDB4NGMsMHg1MCwweDEzLDB4MTQsMHgwNCwweGM1LDB4MDEsMHgzMSwweGMwLDB4NGMgfX0sCisgezE2LCAweGM1ZDAsIDAsIHsweDUwLDB4MTMsMHgxNCwweDA0LDB4YzUsMHgwNSwweDMxLDB4NDEsMHg0YywweDUwLDB4MTMsMHgxNCwweDA0LDB4YzUsMHgwMSwweDMxIH19LAorIHsxNiwgMHhjNWUwLCAwLCB7MHg0MCwweDRjLDB4NzAsMHg1MywweDE0LDB4MDQsMHhjNSwweDAxLDB4MzEsMHg0MCwweDRjLDB4NDAsMHgxMywweDE0LDB4MDQsMHhjMCB9fSwKKyB7MTYsIDB4YzVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMywweDA1LDB4NjgsMHhjMSwweDVhLDB4MzAgfX0sCisgezE2LCAweGM2MDAsIDAsIHsweDU2LDB4OGMsMHgxNSwweGEzLDB4MDUsMHg2OSwweGMxLDB4NWEsMHgzMCwweDQ2LDB4OGMsMHgxMSwweGE3LDB4MDEsMHg2OCwweGMwIH19LAorIHsxNiwgMHhjNjEwLCAwLCB7MHgxYSwweDMwLDB4NTYsMHg4YywweDExLDB4YTMsMHgwNCwweDY4LDB4YzEsMHgxYSwweDMwLDB4MTYsMHg4YywweDE1LDB4YTMsMHgwNCB9fSwKKyB7MTYsIDB4YzYyMCwgMCwgezB4NjgsMHhjMSwweDVhLDB4MzAsMHg1NiwweDhjLDB4MTEsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM2MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAsMHg4MCwweDAwLDB4MjQsMHgwMCwweDA4IH19LAorIHsxNiwgMHhjNjQwLCAwLCB7MHgwMSwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgyNCwweDAwLDB4MDgsMHg4MCwweDAyLDB4NjAsMHgwMCwweDgwLDB4MDAsMHgyMCB9fSwKKyB7MTYsIDB4YzY1MCwgMCwgezB4MDAsMHgwOSwweDQwLDB4MDIsMHgyMCwweDAwLDB4ODAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwMCwweDAwLDB4ODAgfX0sCisgezE2LCAweGM2NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHg0NCwweDYyLDB4MTEsMHgxOCwweDg0IH19LAorIHsxNiwgMHhjNjcwLCAwLCB7MHg0NiwweDIxLDB4MTEsMHg4OCwweDQ0LDB4NjIsMHgwOSwweDE4LDB4ODQsMHg0NiwweDIxLDB4MTEsMHg4OCwweDYwLDB4NjIsMHgxMCB9fSwKKyB7MTYsIDB4YzY4MCwgMCwgezB4MTgsMHgwNCwweDQ2LDB4MDEsMHgxMSwweDg4LDB4NDQsMHg2MiwweDExLDB4MTgsMHg4MCwweDA2LDB4MDEsMHgxMSwweDg4LDB4NDQgfX0sCisgezE2LCAweGM2OTAsIDAsIHsweDYyLDB4MTEsMHgxOCwweDg0LDB4NDYsMHgyMSwweDExLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjNmEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHg0NSwweDUwLDB4MTEsMHg1NCwweDA0LDB4NTUsMHgwMSwweDE1LDB4NDAsMHg0NCwweDUwLDB4MTEsMHg1NCB9fSwKKyB7MTYsIDB4YzZiMCwgMCwgezB4MDQsMHg0NSwweDAxLDB4MTEsMHg0MCwweDQwLDB4NTAsMHgxMCwweDU0LDB4MDQsMHg0NSwweDAxLDB4MTUsMHg0MCwweDQ0LDB4NTAgfX0sCisgezE2LCAweGM2YzAsIDAsIHsweDExLDB4MTQsMHgwMCwweDE1LDB4MDEsMHgxNSwweDQwLDB4NDQsMHg1MCwweDExLDB4NTQsMHgwNCwweDU1LDB4MDAsMHgxMSwweDQwIH19LAorIHsxNiwgMHhjNmQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MjEsMHg0MiwweDA4LDB4NTAsMHg4MiB9fSwKKyB7MTYsIDB4YzZlMCwgMCwgezB4MTQsMHgyMCwweDg1LDB4MDgsMHgyMSwweDQyLDB4MDAsMHg1MCwweDgyLDB4MTQsMHgyMCwweDg1LDB4MDgsMHgyMCwweDQyLDB4MDggfX0sCisgezE2LCAweGM2ZjAsIDAsIHsweDUwLDB4ODIsMHgxNSwweDIwLDB4MDUsMHg0OCwweDIxLDB4NDIsMHgwOCwweDUwLDB4ODIsMHgxNCwweDIwLDB4ODEsMHg0MCwweDIxIH19LAorIHsxNiwgMHhjNzAwLCAwLCB7MHg0MiwweDA4LDB4NTAsMHg4MiwweDE0LDB4MjAsMHg4NSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzcxMCwgMCwgezB4MDAsMHgwMCwweDBhLDB4MDEsMHgwMiwweDgwLDB4NDAsMHhhMCwweDEwLDB4MjgsMHgwNCwweDBhLDB4MDEsMHgwMiwweDg0LDB4NDAgfX0sCisgezE2LCAweGM3MjAsIDAsIHsweGExLDB4MTAsMHgyOCwweDA0LDB4MGEsMHgwMSwweDAyLDB4ODAsMHg0MCwweGEwLDB4MDAsMHgyOCwweDAwLDB4MGEsMHgwMSwweDAyIH19LAorIHsxNiwgMHhjNzMwLCAwLCB7MHg4MCwweDQwLDB4YjAsMHgxMCwweDI4LDB4MDAsMHgwYSwweDAxLDB4MDIsMHg4MCwweDQwLDB4YTAsMHgxMCwweDI4LDB4MDQsMHgwMCB9fSwKKyB7MTYsIDB4Yzc0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYywweDAzLDB4NTMsMHgwMCwweGQ0LDB4YzAgfX0sCisgezE2LCAweGM3NTAsIDAsIHsweDM1LDB4MzAsMHgwZCwweDRjLDB4MDMsMHg1MywweDAwLDB4ZDQsMHhjMCwweDM1LDB4MzAsMHgwZCwweDRjLDB4MDMsMHg1MywweDAwIH19LAorIHsxNiwgMHhjNzYwLCAwLCB7MHhkNCwweGMwLDB4MjEsMHgzMCwweDA4LDB4NGMsMHgwMywweDUzLDB4MDAsMHhkNCwweGMwLDB4MzUsMHgzMCwweDA4LDB4NGMsMHgwMyB9fSwKKyB7MTYsIDB4Yzc3MCwgMCwgezB4NTMsMHgwMCwweGQ0LDB4YzAsMHgzNSwweDMwLDB4MGQsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM3ODAsIDAsIHsweDAwLDB4MDAsMHgwOCwweDA0LDB4NzAsMHgwMSwweDVjLDB4ODAsMHgwNywweDIwLDB4MjUsMHhjOSwweDA0LDB4NzIsMHgwMSwweDVjIH19LAorIHsxNiwgMHhjNzkwLCAwLCB7MHg4MCwweDQ3LDB4MjAsMHgxNSwweGM4LDB4MDAsMHg3MiwweDA1LDB4ZGMsMHg4MCwweDU3LDB4MjAsMHgxNSwweGM4LDB4MDUsMHg3MiB9fSwKKyB7MTYsIDB4YzdhMCwgMCwgezB4MDEsMHgxYywweDkwLDB4NjcsMHgyMCwweDE1LDB4YzgsMHgwNSwweDcyLDB4MDEsMHgxYywweDgwLDB4NTcsMHgyMCwweDE1LDB4YzAgfX0sCisgezE2LCAweGM3YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjMsMHgxOCwweDQ4LDB4YzIsMHgxMiwweDMxIH19LAorIHsxNiwgMHhjN2MwLCAwLCB7MHg4NCwweDhjLDB4NjEsMHgwMywweDE4LDB4NDAsMHhjOCwweDEyLDB4MzEsMHg4NCwweDhjLDB4NjEsMHgwMywweDE4LDB4NDgsMHhjNCB9fSwKKyB7MTYsIDB4YzdkMCwgMCwgezB4MTAsMHgzMSwweDg0LDB4MGMsMHg0MSwweDIzLDB4MTgsMHg0OCwweGM2LDB4MTAsMHgzMCwweDA0LDB4MGMsMHg2MSwweDIzLDB4MTggfX0sCisgezE2LCAweGM3ZTAsIDAsIHsweDQ4LDB4YzYsMHgxMiwweDMwLDB4ODQsMHg4YywweDIxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjN2YwLCAwLCB7MHgwMCwweDAwLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMywweGZmLDB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMyB9fSwKKyB7MTYsIDB4YzgwMCwgMCwgezB4ZmYsMHhmNCwweGZmLDB4ZmQsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzLDB4ZmYsMHhmNCwweGZmLDB4ZmQsMHgzZiwweGZmLDB4NGYgfX0sCisgezE2LCAweGM4MTAsIDAsIHsweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhiZCwweDAwIH19LAorIHsxNiwgMHhjODIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzgzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM4NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjODUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Yzg2MCwgMCwgezB4MDAsMHgwMCwweDJjLDB4ZGIsMHgwYiwweDM2LDB4YzIsMHhjZCwweGIwLDB4YjMsMHg2YywweDJjLDB4ZGIsMHgwOSwweDM2LDB4YzIgfX0sCisgezE2LCAweGM4NzAsIDAsIHsweGNkLDB4YjAsMHhiMywweDZjLDB4MmMsMHhkYiwweDBiLDB4MzYsMHhjMiwweGNkLDB4YjAsMHhiMywweDZjLDB4MmMsMHhkYiwweDBiIH19LAorIHsxNiwgMHhjODgwLCAwLCB7MHgzNiwweGMyLDB4Y2QsMHhiMCwweGIzLDB4NmMsMHgyYywweGRiLDB4MGIsMHgzNiwweGMyLDB4Y2QsMHhiMCwweGIzLDB4MmMsMHgwMCB9fSwKKyB7MTYsIDB4Yzg5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMywweDNjLDB4NGMsMHhjZiwweDEzLDB4MzMgfX0sCisgezE2LCAweGM4YTAsIDAsIHsweGM0LDB4Y2MsMHhmMSwweDMzLDB4M2MsMHg0ZCwweDRlLDB4OTMsMHgzMywweGM0LDB4Y2MsMHhmMSwweDJiLDB4M2MsMHg0YywweGNmIH19LAorIHsxNiwgMHhjOGIwLCAwLCB7MHgxMywweDMzLDB4YzQsMHhjYywweGU5LDB4MzMsMHgzYywweDRjLDB4Y2YsMHgxMiwweGI1LDB4YzQsMHhjYywweGYxLDB4MzMsMHgzYyB9fSwKKyB7MTYsIDB4YzhjMCwgMCwgezB4NGMsMHhjZiwweDEzLDB4MzMsMHhjNCwweGNkLDB4MzEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGM4ZDAsIDAsIHsweDAwLDB4MDAsMHgzYiwweDdlLDB4NGUsMHhjNywweDkzLDB4YjcsMHhlNCwweGVkLDB4ZjksMHgyMywweDdlLDB4NGUsMHg0NywweDkzIH19LAorIHsxNiwgMHhjOGUwLCAwLCB7MHhiNywweGU0LDB4ZWQsMHhmOSwweDNmLDB4N2UsMHg0ZSwweGRlLDB4MTIsMHgzNywweGU0LDB4OGQsMHhmOSwweDNiLDB4N2UsMHg0ZSB9fSwKKyB7MTYsIDB4YzhmMCwgMCwgezB4ZGYsMHg5MywweGY3LDB4ODQsMHg4ZCwweGY5LDB4M2IsMHg3ZSwweDRlLDB4ZGYsMHg5MywweGIxLDB4ZTQsMHhlZCwweGI5LDB4MDAgfX0sCisgezE2LCAweGM5MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMiwweDcwLDB4NDAsMHg5YywweDExIH19LAorIHsxNiwgMHhjOTEwLCAwLCB7MHg2NywweDA0LDB4MTksMHhjMywweDAyLDB4NzAsMHg0MCwweDljLDB4MTAsMHgyNywweDA0LDB4MDksMHhjMSwweDAyLDB4NzAsMHg0MCB9fSwKKyB7MTYsIDB4YzkyMCwgMCwgezB4MWMsMHgxMCwweDI3LDB4MTQsMHgwMSwweGMxLDB4MDIsMHg3MCwweDQwLDB4OWMsMHg1MCwweDA3LDB4MDQsMHgwOSwweGMxLDB4MDIgfX0sCisgezE2LCAweGM5MzAsIDAsIHsweDcwLDB4NDAsMHg5YywweDEwLDB4NjcsMHgxNCwweDExLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjOTQwLCAwLCB7MHgwMCwweDAwLDB4MDQsMHgwNSwweDcxLDB4MDEsMHg1YywweDQwLDB4NTcsMHgxMCwweDE1LDB4YzQsMHgwNSwweDcxLDB4MDEsMHg1YyB9fSwKKyB7MTYsIDB4Yzk1MCwgMCwgezB4NDAsMHg1NywweDEwLDB4MTUsMHhjNiwweDA1LDB4NzEsMHgwMSwweDVjLDB4NDAsMHg1NywweDEwLDB4MTAsMHhjNCwweDA1LDB4NzEgfX0sCisgezE2LCAweGM5NjAsIDAsIHsweDAxLDB4NWMsMHg2NCwweDAzLDB4MTAsMHg1NSwweGM0LDB4MDUsMHg3MSwweDAxLDB4NWMsMHg0MCwweDU3LDB4MTAsMHgxNSwweGMwIH19LAorIHsxNiwgMHhjOTcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MDEsMHgyMCwweDgwLDB4NDgsMHgyMCB9fSwKKyB7MTYsIDB4Yzk4MCwgMCwgezB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIxLDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODAsMHgwMSwweDIwLDB4ODAgfX0sCisgezE2LCAweGM5OTAsIDAsIHsweDQ4LDB4MjAsMHgxMiwweDA4LDB4MDUsMHhjMiwweDAxLDB4MjAsMHg4MCwweDQ4LDB4MjQsMHgxNywweDA4LDB4MDQsMHg4MiwweDAxIH19LAorIHsxNiwgMHhjOWEwLCAwLCB7MHgyMCwweDgwLDB4NDgsMHgyMCwweDEyLDB4MDgsMHgwNCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4YzliMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgwMCwweDQ2LDB4MDAsMHgxMSwweDg0LDB4MDAsMHg2MCwweDAwLDB4MTggfX0sCisgezE2LCAweGM5YzAsIDAsIHsweDAwLDB4MDYsMHgwMCwweDAxLDB4ODAsMHgwMCwweDYwLDB4MDEsMHgxOCwweDAwLDB4MDYsMHgxMCwweDkxLDB4ODAsMHgwMCwweDYwIH19LAorIHsxNiwgMHhjOWQwLCAwLCB7MHgwMCwweDE4LDB4NDYsMHg0NiwweDE4LDB4MDEsMHg4MCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAsMHgwNiwweDEwLDB4MDEsMHg4MCB9fSwKKyB7MTYsIDB4YzllMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4NzMsMHgwMSwweDFjLDB4ODAgfX0sCisgezE2LCAweGM5ZjAsIDAsIHsweDA3LDB4MjAsMHgwMSwweGM4LDB4MDQsMHg3MiwweDAxLDB4MWMsMHg4MCwweDQ3LDB4MjAsMHgxMSwweGM4LDB4MDQsMHg3MiwweDAxIH19LAorIHsxNiwgMHhjYTAwLCAwLCB7MHgxYywweDgwLDB4NDcsMHgyMiwweDExLDB4YzgsMHgwNCwweDcyLDB4MDEsMHgxYywweDgwLDB4MDcsMHgyMCwweDExLDB4YzgsMHgwNCB9fSwKKyB7MTYsIDB4Y2ExMCwgMCwgezB4NzIsMHgwMSwweDFjLDB4ODAsMHgwNywweDI4LDB4MTEsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNhMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4NjAsMHgwMCwweDE4LDB4MDAsMHgwNiwweDAwLDB4MDEsMHg4MCwweDAwLDB4NjAsMHgwMCwweDE4IH19LAorIHsxNiwgMHhjYTMwLCAwLCB7MHgwMCwweDA2LDB4MDAsMHgwMSwweDgwLDB4MDAsMHg2MCwweDAwLDB4MTgsMHgwMCwweDA2LDB4MDAsMHgwMSwweDgwLDB4MDAsMHg2MCB9fSwKKyB7MTYsIDB4Y2E0MCwgMCwgezB4MDAsMHgxOCwweDAwLDB4NDYsMHgwNCwweDAxLDB4ODAsMHgwMCwweDYwLDB4MDAsMHgxOCwweDAwLDB4MDYsMHgwMCwweDAxLDB4ODAgfX0sCisgezE2LCAweGNhNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHgwNCwweDIyLDB4MDEsMHgwOCwweDgwIH19LAorIHsxNiwgMHhjYTYwLCAwLCB7MHgwMiwweDIwLDB4MDAsMHg5MCwweDA0LDB4MjcsMHg4MSwweDA4LDB4ODAsMHg0MiwweDIwLDB4MTAsMHg5OCwweDA0LDB4MjQsMHgwMSB9fSwKKyB7MTYsIDB4Y2E3MCwgMCwgezB4MDgsMHg4MCwweDQyLDB4NDgsMHgxMCwweDg4LDB4MDQsMHgyMiwweDAxLDB4MDksMHg0MCwweDQyLDB4NjAsMHgxMCwweDg4LDB4MDQgfX0sCisgezE2LCAweGNhODAsIDAsIHsweDIyLDB4MDEsMHgwOCwweGMwLDB4MDIsMHg0MCwweDEwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjYTkwLCAwLCB7MHgwMCwweDAwLDB4MmEsMHgwNCwweDRiLDB4ODEsMHgxMiwweGEwLDB4MDQsMHhhOCwweDAxLDB4MmEsMHgwNCwweDRhLDB4ODEsMHgxMiB9fSwKKyB7MTYsIDB4Y2FhMCwgMCwgezB4YTAsMHg0NCwweGE4LDB4MTEsMHgyYSwweDA0LDB4NDgsMHg4MCwweDEyLDB4YTAsMHg0NCwweDg4LDB4MDEsMHgyYSwweDA0LDB4NGEgfX0sCisgezE2LCAweGNhYjAsIDAsIHsweDgxLDB4MTIsMHgyMCwweDA0LDB4YWMsMHgxMSwweDJhLDB4MDQsMHg0YSwweDgxLDB4MTIsMHhiMCwweDQ0LDB4OWMsMHgxMSwweDAwIH19LAorIHsxNiwgMHhjYWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHhjMCwweDBjLDB4MDAsMHg1MywweDAwLDB4MTQsMHhjMCB9fSwKKyB7MTYsIDB4Y2FkMCwgMCwgezB4MDUsMHgzMCwweDAxLDB4NDQsMHgwMCwweDUzLDB4MDAsMHgxNCwweGMwLDB4MDUsMHgzMCwweDA0LDB4MGMsMHgwMCwweDUzLDB4MDAgfX0sCisgezE2LCAweGNhZTAsIDAsIHsweDE0LDB4YzAsMHgwNSwweGIwLDB4MDEsMHg0YywweDAwLDB4NTMsMHgwMCwweDE2LDB4YzAsMHgwMSwweDMwLDB4MDEsMHg0YywweDAwIH19LAorIHsxNiwgMHhjYWYwLCAwLCB7MHg1MywweDAwLDB4MTQsMHhjMCwweDAxLDB4MzgsMHgwMCwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2IwMCwgMCwgezB4MDgsMHhjMCwweDAwLDB4MTAsMHg0MCwweDAwLDB4MTAsMHgwMCwweDA0LDB4MDAsMHgwMSwweDEwLDB4MDAsMHg0NCwweDgwLDB4MTAgfX0sCisgezE2LCAweGNiMTAsIDAsIHsweDAwLDB4MDQsMHgwMCwweDAxLDB4MTAsMHgwMCwweDQ2LDB4MDAsMHgwMCwweDAwLDB4MDQsMHg2MCwweDAxLDB4MDAsMHgwMCwweDQwIH19LAorIHsxNiwgMHhjYjIwLCAwLCB7MHgwMCwweDExLDB4NjAsMHgwMiwweDQwLDB4MDEsMHgwMCwweDEwLDB4NDAsMHgwMCwweDEwLDB4NjAsMHgwMSwweDUwLDB4MTAsMHg0MCB9fSwKKyB7MTYsIDB4Y2IzMCwgMCwgezB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4YzAsMHg0MCwweDAyLDB4MDAsMHgwMCwweDgwLDB4MDAgfX0sCisgezE2LCAweGNiNDAsIDAsIHsweDIwLDB4MDAsMHgwOCwweDA4LDB4MDIsMHgwMCwweDAwLDB4ODAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjYjUwLCAwLCB7MHg4MCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMiB9fSwKKyB7MTYsIDB4Y2I2MCwgMCwgezB4MDAsMHgwMCwweDgwLDB4MDAsMHgyMSwweDAwLDB4MDgsMHg0MCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNiNzAsIDAsIHsweDA4LDB4YzAsMHg0MCwweDA0LDB4NjAsMHgwMSwweDE4LDB4MDAsMHg0NiwweDAwLDB4MTEsMHg4MCwweDA0LDB4NjAsMHgwMSwweDE4IH19LAorIHsxNiwgMHhjYjgwLCAwLCB7MHgwMCwweDQ2LDB4MDAsMHgxMSwweDgwLDB4MDQsMHg2MCwweDAxLDB4YzgsMHgwMCwweDQ2LDB4MDAsMHgxOSwweDgwLDB4MDAsMHg2MCB9fSwKKyB7MTYsIDB4Y2I5MCwgMCwgezB4MDAsMHgxOCwweDAwLDB4NjYsMHgwMCwweDExLDB4ODAsMHgwNCwweDYwLDB4MDEsMHgxOCwweDAwLDB4MDYsMHgwMCwweDExLDB4ODAgfX0sCisgezE2LCAweGNiYTAsIDAsIHsweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAxLDB4MDAsMHgwMiwweDYwLDB4MDAsMHg5OCwweDAwIH19LAorIHsxNiwgMHhjYmIwLCAwLCB7MHgyNiwweDAwLDB4MDksMHg4MSwweDAyLDB4NjAsMHgwMSwweDk4LDB4MDAsMHgyNiwweDAwLDB4MDksMHg4MCwweDA2LDB4NjIsMHgwMCB9fSwKKyB7MTYsIDB4Y2JjMCwgMCwgezB4NDgsMHgwMCwweDI2LDB4MjAsMHgwMSwweGMwLDB4MDIsMHg2MCwweDAxLDB4OTgsMHgwMCwweDA3LDB4MDAsMHgwOSwweDgwLDB4MDIgfX0sCisgezE2LCAweGNiZDAsIDAsIHsweDYwLDB4MDAsMHg5OCwweDAwLDB4MjYsMHgwMCwweDExLDB4ODIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjYmUwLCAwLCB7MHg0MCwweDQ1LDB4NDIsMHgwNCwweDMwLDB4ODEsMHgwYywweDIwLDB4NDMsMHgwOCwweDEwLDB4YzIsMHgwNCwweDMwLDB4ODUsMHg4YyB9fSwKKyB7MTYsIDB4Y2JmMCwgMCwgezB4MjAsMHg0MywweDA4LDB4MTAsMHhjMiwweDA0LDB4MzAsMHg4MSwweDBjLDB4MjAsMHg0MywweDQ4LDB4MTEsMHg4MiwweDA0LDB4MzAgfX0sCisgezE2LCAweGNjMDAsIDAsIHsweDgxLDB4OGQsMHgyMCwweDQ2LDB4MDgsMHgxMCwweGMyLDB4MDQsMHgzMCwweDgxLDB4MGMsMHgyMCwweDQzLDB4MGMsMHgxMCwweGMwIH19LAorIHsxNiwgMHhjYzEwLCAwLCB7MHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwNCwweDAwLDB4MDAsMHgzMCwweDAwLDB4MGMsMHgwMCB9fSwKKyB7MTYsIDB4Y2MyMCwgMCwgezB4MDMsMHgwMCwweDAwLDB4YzAsMHgwMCwweDEwLDB4MDAsMHgwYywweDAwLDB4MDMsMHgwMCwweDAwLDB4YzAsMHgwMCwweDMwLDB4MDAgfX0sCisgezE2LCAweGNjMzAsIDAsIHsweDA4LDB4MDAsMHgwMywweDAwLDB4MDAsMHg4MCwweDAwLDB4MzAsMHgwMCwweDBjLDB4ODAsMHgwMiwweDAwLDB4MDAsMHhjMCwweDAwIH19LAorIHsxNiwgMHhjYzQwLCAwLCB7MHgzMCwweDAwLDB4MGMsMHgwMCwweDAzLDB4MjAsMHgwMCwweGMwLDB4MTAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2M1MCwgMCwgezB4NDAsMHgwMCwweDAyLDB4MDAsMHgzMCwweDgwLDB4MGMsMHgyMSwweDAzLDB4MDgsMHgwMCwweGMyLDB4MDAsMHgzMCwweDgwLDB4MGMgfX0sCisgezE2LCAweGNjNjAsIDAsIHsweDIwLDB4MDMsMHgwOCwweDAwLDB4YzIsMHgwNCwweDMwLDB4YzEsMHgwYywweDIwLDB4MDMsMHgwYywweDEwLDB4YzIsMHgwMCwweDMwIH19LAorIHsxNiwgMHhjYzcwLCAwLCB7MHg4MCwweDBjLDB4YjAsMHg0MywweDA4LDB4MDAsMHhjMiwweDAwLDB4MzAsMHg4MCwweDBjLDB4MjAsMHgwMywweDI4LDB4MTAsMHhjMCB9fSwKKyB7MTYsIDB4Y2M4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0MiwweDA0LDB4NjAsMHg4MSwweDE4LDB4MjAgfX0sCisgezE2LCAweGNjOTAsIDAsIHsweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDQsMHg2MCwweDgwLDB4MTgsMHgyMCwweDQ2LDB4MDgsMHgxMSwweDgyLDB4MDAsMHg2MCwweDgxIH19LAorIHsxNiwgMHhjY2EwLCAwLCB7MHgxOCwweDIwLDB4NDYsMHgwOCwweDExLDB4ODIsMHgwNCwweDYwLDB4ODAsMHgxOCwweDIwLDB4MDYsMHgwOCwweDExLDB4ODIsMHgwNCB9fSwKKyB7MTYsIDB4Y2NiMCwgMCwgezB4NjAsMHg4MSwweDE4LDB4MjAsMHg0NiwweDBjLDB4MTEsMHhjMCwweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNjYzAsIDAsIHsweDQwLDB4MDEsMHg0MiwweDAwLDB4MjAsMHg4MCwweDA4LDB4MjAsMHgwMiwweDA4LDB4MDAsMHg4MiwweDAwLDB4MjAsMHg4MCwweDA4IH19LAorIHsxNiwgMHhjY2QwLCAwLCB7MHgyMCwweDAyLDB4MDgsMHgwMCwweDgyLDB4MDAsMHgyMCwweDgwLDB4MGMsMHgyMCwweDAyLDB4MDgsMHgwMCwweGMyLDB4MDAsMHgyMCB9fSwKKyB7MTYsIDB4Y2NlMCwgMCwgezB4ODAsMHgwOCwweDIwLDB4NDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDIwLDB4ODAsMHgwOCwweDIwLDB4MDIsMHgwOCwweDAxLDB4ODAgfX0sCisgezE2LCAweGNjZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1MCwweDAxLDB4NDIsMHgwNCwweDYwLDB4ODEsMHgxOCwweDIwIH19LAorIHsxNiwgMHhjZDAwLCAwLCB7MHg0NiwweDA4LDB4MTEsMHg4MiwweDA0LDB4NjAsMHg4MCwweDE4LDB4MjAsMHg0NiwweDA4LDB4MTEsMHg4MiwweDAwLDB4NjAsMHhjMSB9fSwKKyB7MTYsIDB4Y2QxMCwgMCwgezB4MGMsMHgyMCwweDQ2LDB4MGMsMHgxMCwweGMyLDB4MDQsMHg2MCwweDgwLDB4MTgsMHgzMCwweDQyLDB4MDgsMHgxMSwweDgyLDB4MDQgfX0sCisgezE2LCAweGNkMjAsIDAsIHsweDYwLDB4ODEsMHgxOCwweDIwLDB4NDYsMHgwOCwweDEwLDB4ODAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjZDMwLCAwLCB7MHg0MCwweDQ1LDB4NDAsMHgwNCwweDUwLDB4MDEsMHgxNCwweDAwLDB4NDUsMHgwMCwweDExLDB4NDAsMHgwNCwweDUwLDB4MDAsMHgxNCB9fSwKKyB7MTYsIDB4Y2Q0MCwgMCwgezB4MDAsMHg0NSwweDAwLDB4MTEsMHg0MCwweDAwLDB4NTAsMHgwMCwweDA0LDB4MDAsMHg0NSwweDAwLDB4MDAsMHg0MCwweDA0LDB4NTAgfX0sCisgezE2LCAweGNkNTAsIDAsIHsweDAwLDB4MTQsMHgwMCwweDAxLDB4MDAsMHgxMSwweDQwLDB4MDQsMHg1MCwweDAxLDB4MTQsMHgwMCwweDQ1LDB4MDAsMHgwMCwweDQyIH19LAorIHsxNiwgMHhjZDYwLCAwLCB7MHgwMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwMCwweDA2LDB4MDAsMHg0MSwweDgwLDB4MTAsMHg2MCB9fSwKKyB7MTYsIDB4Y2Q3MCwgMCwgezB4MDQsMHgxOCwweDAxLDB4MDYsMHgwMCwweDQxLDB4ODAsMHgxMCwweDYwLDB4MDQsMHgxOCwweDAxLDB4MDYsMHgwMCwweDQxLDB4ODAgfX0sCisgezE2LCAweGNkODAsIDAsIHsweDEwLDB4NjAsMHgwNCwweDE4LDB4MDEsMHgwNiwweDAwLDB4NDEsMHg4MCwweDEwLDB4NjAsMHgwNCwweDE4LDB4MDEsMHgwNiwweDAwIH19LAorIHsxNiwgMHhjZDkwLCAwLCB7MHg0MSwweDgwLDB4MTAsMHg2MCwweDA0LDB4MTgsMHgwMSwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2RhMCwgMCwgezB4NDgsMHgwMCwweDAyLDB4MDEsMHgwMCwweDgwLDB4NDAsMHgyMSwweDEwLDB4MDgsMHgwNCwweDAyLDB4MDEsMHgwMCwweDgwLDB4NDAgfX0sCisgezE2LCAweGNkYjAsIDAsIHsweDIwLDB4MTAsMHgwOCwweDA0LDB4MDIsMHgwMSwweDAwLDB4ODAsMHg0MCwweDIxLDB4MTAsMHgwOCwweDA0LDB4MDIsMHgwMSwweDAwIH19LAorIHsxNiwgMHhjZGMwLCAwLCB7MHg4MCwweDQwLDB4MzAsMHgxMCwweDA4LDB4MDQsMHgwMiwweDExLDB4MDAsMHg4NCwweDQwLDB4MjAsMHgxMCwweDA4LDB4MTQsMHgwMCB9fSwKKyB7MTYsIDB4Y2RkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0NiwweDAzLDB4NTEsMHg4MCwweGQ0LDB4NjAgfX0sCisgezE2LCAweGNkZTAsIDAsIHsweDM1LDB4MTgsMHgwZCwweDQ2LDB4MDMsMHg1MSwweDgwLDB4ZDQsMHg2MCwweDM1LDB4MTgsMHgwZCwweDQ2LDB4MDMsMHg1MSwweDgwIH19LAorIHsxNiwgMHhjZGYwLCAwLCB7MHhkNCwweDYwLDB4MzUsMHgxMCwweDBkLDB4NDYsMHgwMywweDUxLDB4ODAsMHhkNCwweDQwLDB4MzUsMHgxOCwweDBkLDB4NDYsMHgwMyB9fSwKKyB7MTYsIDB4Y2UwMCwgMCwgezB4NTEsMHg4MCwweGQ0LDB4NjAsMHgzNSwweDE4LDB4MGQsMHg0MCwweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNlMTAsIDAsIHsweDAwLDB4MDEsMHg0NiwweDA0LDB4NzEsMHg4MSwweDFjLDB4NjAsMHgwNywweDE4LDB4MTEsMHhjZSwweDA0LDB4NzEsMHg4MSwweDFjIH19LAorIHsxNiwgMHhjZTIwLCAwLCB7MHg2MCwweDQ3LDB4MTgsMHgwMSwweGM2LDB4MDQsMHg3MSwweDgxLDB4OWMsMHg2MCwweDQ3LDB4MTgsMHgxOSwweGM2LDB4MDQsMHg3MSB9fSwKKyB7MTYsIDB4Y2UzMCwgMCwgezB4ODAsMHgxYywweDYwLDB4NjcsMHgxOCwweDExLDB4YzYsMHgwNCwweDcxLDB4ODEsMHgxYywweDYwLDB4NDcsMHgxOCwweDExLDB4YzAgfX0sCisgezE2LCAweGNlNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4NDYsMHgwMiwweDcxLDB4ODAsMHg5YywweDYwIH19LAorIHsxNiwgMHhjZTUwLCAwLCB7MHgyNywweDE4LDB4MDksMHhjNiwweDA2LDB4NzEsMHg4MCwweDFjLDB4NjAsMHgyNywweDE4LDB4MDksMHhjNiwweDAxLDB4MzEsMHg4MCB9fSwKKyB7MTYsIDB4Y2U2MCwgMCwgezB4MWMsMHg2MCwweDA3LDB4MTgsMHgwOSwweGM2LDB4MDIsMHg3MSwweDgwLDB4OWMsMHg2MCwweDA3LDB4MTgsMHgwOSwweGM2LDB4MTIgfX0sCisgezE2LCAweGNlNzAsIDAsIHsweDcxLDB4ODAsMHg5YywweDYwLDB4MzMsMHgxOCwweDAxLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjZTgwLCAwLCB7MHg1MCwweDQ1LDB4NDYsMHgwNSwweDcxLDB4ODEsMHg1YywweDYwLDB4NTcsMHgxOCwweDE1LDB4YzYsMHgwNSwweDcxLDB4ODAsMHg1YyB9fSwKKyB7MTYsIDB4Y2U5MCwgMCwgezB4NjAsMHg1NywweDE4LDB4MTUsMHhjNiwweDAxLDB4MzEsMHg4MSwweDBjLDB4NjAsMHgxNywweDE4LDB4MTAsMHhjNiwweDA1LDB4NzEgfX0sCisgezE2LCAweGNlYTAsIDAsIHsweDgxLDB4NWMsMHg2MCwweDAzLDB4MTgsMHgxNSwweGM2LDB4MDUsMHg3MSwweDgxLDB4NWMsMHg2MCwweDUzLDB4MTgsMHgxOCwweDgyIH19LAorIHsxNiwgMHhjZWIwLCAwLCB7MHgxMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHg0MCwweDEyLDB4MDEsMHgyNCwweDgwLDB4NDgsMHgyMCB9fSwKKyB7MTYsIDB4Y2VjMCwgMCwgezB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDI0LDB4ODAsMHg0OCwweDIwLDB4MTIsMHgwOCwweDA0LDB4ODIsMHgwMSwweDIwLDB4ODAgfX0sCisgezE2LCAweGNlZDAsIDAsIHsweDU4LDB4MjAsMHg1MiwweDBjLDB4MDUsMHg4MiwweDAxLDB4MjAsMHg4MCwweDQ5LDB4MjAsMHgwMiwweDA4LDB4MDQsMHg4MiwweDAxIH19LAorIHsxNiwgMHhjZWUwLCAwLCB7MHgyMCwweDgwLDB4NDksMHgyMCwweDEyLDB4NDgsMHgwNCwweDgwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Y2VmMCwgMCwgezB4NDAsMHgwNCwweDA2LDB4MDAsMHg2MSwweDgwLDB4MTgsMHg2MCwweDA2LDB4MTgsMHgwMSwweDg2LDB4MDQsMHg2MSwweDgwLDB4MTggfX0sCisgezE2LCAweGNmMDAsIDAsIHsweDYwLDB4MDYsMHgxOCwweDAxLDB4ODYsMHgwMCwweDYxLDB4ODEsMHg0OCwweDYwLDB4MDYsMHgxOCwweDE0LDB4ODYsMHgwMCwweDYxIH19LAorIHsxNiwgMHhjZjEwLCAwLCB7MHg4MCwweDE4LDB4NjAsMHg0MiwweDE4LDB4MDEsMHg4NiwweDAwLDB4NjEsMHg4MCwweDE4LDB4NjAsMHgwNiwweDE4LDB4MDAsMHg4MCB9fSwKKyB7MTYsIDB4Y2YyMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg2MCwweDA0LDB4NzgsMHgwMSwweDFlLDB4MDAgfX0sCisgezE2LCAweGNmMzAsIDAsIHsweDQ3LDB4ODAsMHgxMSwweGU4LDB4MDAsMHg3OCwweDAxLDB4MWUsMHgwMCwweDQ3LDB4ODAsMHgxMSwweGUwLDB4MDQsMHg3OCwweDAxIH19LAorIHsxNiwgMHhjZjQwLCAwLCB7MHgxZSwweDAwLDB4NDMsMHg4MCwweDExLDB4ZTAsMHgwNCwweDc4LDB4MDEsMHgxZSwweDAwLDB4MDMsMHg4MCwweDE1LDB4ZTAsMHgwNCB9fSwKKyB7MTYsIDB4Y2Y1MCwgMCwgezB4NzgsMHgwMSwweDFlLDB4MDAsMHg0NywweDgwLDB4MTEsMHhjMCwweDEwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGNmNjAsIDAsIHsweDQwLDB4MDEsMHgxMiwweDAwLDB4NjQsMHg4MCwweDE4LDB4MjAsMHgwNiwweDA4LDB4MDEsMHg4MiwweDAwLDB4NjQsMHg4MCwweDE4IH19LAorIHsxNiwgMHhjZjcwLCAwLCB7MHgyMCwweDA2LDB4MDgsMHgwMSwweDgyLDB4MDAsMHg2MCwweDgwLDB4MTgsMHgzMCwweDAyLDB4MDgsMHgwMSwweDgyLDB4MDAsMHg2MCB9fSwKKyB7MTYsIDB4Y2Y4MCwgMCwgezB4ODAsMHgxOSwweDMwLDB4NDIsMHgwOCwweDAwLDB4ODIsMHgwMCwweDYwLDB4ODAsMHgxOSwweDIwLDB4MDYsMHg0OCwweDAxLDB4ODAgfX0sCisgezE2LCAweGNmOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAxLDB4NDIsMHgwNCwweDIwLDB4ODEsMHgwOCwweDIwIH19LAorIHsxNiwgMHhjZmEwLCAwLCB7MHg0MiwweDA4LDB4MTAsMHg4MiwweDAwLDB4MjAsMHg4MSwweDA4LDB4MjAsMHg0MiwweDA4LDB4MTAsMHg4MiwweDA0LDB4MjAsMHg4MSB9fSwKKyB7MTYsIDB4Y2ZiMCwgMCwgezB4MDgsMHgyMCwweDQ2LDB4MDgsMHgxMCwweDgyLDB4MDQsMHgyMCwweDgxLDB4MDgsMHgyMCwweDQyLDB4MDgsMHgxMSwweDgyLDB4MDQgfX0sCisgezE2LCAweGNmYzAsIDAsIHsweDIwLDB4ODEsMHgwOCwweDIwLDB4NDIsMHgwOCwweDEwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhjZmQwLCAwLCB7MHg0MCwweDQ1LDB4NDIsMHgwNCwweDQwLDB4ODEsMHgxMCwweDIwLDB4NDQsMHgwOCwweDExLDB4MDIsMHgwMCwweDQwLDB4ODEsMHgxMCB9fSwKKyB7MTYsIDB4Y2ZlMCwgMCwgezB4MjAsMHg0NCwweDA4LDB4MTEsMHgwMiwweDA0LDB4NDAsMHg4MCwweDEwLDB4MjAsMHg0NSwweDA4LDB4MDEsMHgwMiwweDA0LDB4NDAgfX0sCisgezE2LCAweGNmZjAsIDAsIHsweDgxLDB4MTAsMHgyMSwweDAwLDB4MGMsMHgxMSwweDAyLDB4MDQsMHg0MCwweDgxLDB4MTAsMHgyMCwweDQ0LDB4MDgsMHgwMSwweDAwIH19LAorIHsxNiwgMHhkMDAwLCAwLCB7MHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweDAzLDB4MDAsMHg1MCwweGMwLDB4MTQsMHgzMCB9fSwKKyB7MTYsIDB4ZDAxMCwgMCwgezB4MDUsMHgwYywweDAxLDB4NDMsMHgwMCwweDUwLDB4YzAsMHgxNCwweDMwLDB4MDUsMHgwYywweDAxLDB4NDMsMHgwMCwweDUwLDB4YzAgfX0sCisgezE2LCAweGQwMjAsIDAsIHsweDE0LDB4MzAsMHgwNSwweDBjLDB4MDEsMHg0MywweDAwLDB4NTAsMHhjMCwweDE0LDB4MzAsMHgwNSwweDBjLDB4MDEsMHg0MywweDAwIH19LAorIHsxNiwgMHhkMDMwLCAwLCB7MHg1MCwweGMwLDB4MTQsMHgzMCwweDA1LDB4MGMsMHgwMSwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDA0MCwgMCwgezB4NDAsMHgwMCwweDA4LDB4MDAsMHg0MiwweDA0LDB4MTAsMHg4MCwweDA0LDB4MjAsMHgwMSwweDA5LDB4MDAsMHg0MiwweDAxLDB4MTAgfX0sCisgezE2LCAweGQwNTAsIDAsIHsweDgwLDB4MDQsMHgyMCwweDAxLDB4MDgsMHgwMCwweDQyLDB4MDAsMHgxMCwweDAwLDB4MDQsMHgyMCwweDAxLDB4MDgsMHgwMCwweDQyIH19LAorIHsxNiwgMHhkMDYwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwNCwweDAwLDB4MDEsMHgwOCwweDAwLDB4NDIsMHgwMCwweDEwLDB4ODAsMHgwNCwweDIwLDB4MTEsMHgwMCB9fSwKKyB7MTYsIDB4ZDA3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0MiwweDAyLDB4MDAsMHg4MCwweDgwLDB4MjAgfX0sCisgezE2LCAweGQwODAsIDAsIHsweDIwLDB4MDgsMHgwOCwweDAyLDB4MDIsMHgwMCwweDgwLDB4MDAsMHgyMCwweDIwLDB4MDgsMHgwOCwweDAyLDB4MDAsMHgwMCwweDgwIH19LAorIHsxNiwgMHhkMDkwLCAwLCB7MHg4MCwweGEwLDB4MDAsMHgwYSwweDA4LDB4MDIsMHgwMiwweDAwLDB4ODAsMHg4MCwweDM0LDB4NjIsMHgyOCwweDA4LDB4MDIsMHgwMiB9fSwKKyB7MTYsIDB4ZDBhMCwgMCwgezB4MDAsMHg4MCwweDgwLDB4MzAsMHgyMCwweDBjLDB4MDgsMHgwMCwweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQwYjAsIDAsIHsweDQwLDB4MDEsMHg0MCwweDA0LDB4NjAsMHgwMSwweDE4LDB4MDAsMHg0NiwweDAwLDB4MTEsMHg4MCwweDA0LDB4NjAsMHgwMywweDE4IH19LAorIHsxNiwgMHhkMGMwLCAwLCB7MHgwMCwweDQ2LDB4MDAsMHgxMSwweDgwLDB4MDYsMHg2MCwweDAxLDB4OTgsMHgwMCwweDQ2LDB4MDAsMHgxMSwweDgwLDB4MDQsMHg2MCB9fSwKKyB7MTYsIDB4ZDBkMCwgMCwgezB4MDEsMHgxOCwweDAwLDB4NjYsMHgwMCwweDExLDB4ODAsMHgwNCwweDYwLDB4MDEsMHgxOCwweDAwLDB4NDYsMHgwMCwweDExLDB4ODAgfX0sCisgezE2LCAweGQwZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAxLDB4MDAsMHgwMiwweDYwLDB4MDAsMHg5OCwweDAwIH19LAorIHsxNiwgMHhkMGYwLCAwLCB7MHgyNiwweDAwLDB4MDksMHg4MCwweDAyLDB4NjQsMHgwMCwweDk4LDB4MDAsMHgyNiwweDAwLDB4MTksMHg5MCwweDAyLDB4NjAsMHgwMCB9fSwKKyB7MTYsIDB4ZDEwMCwgMCwgezB4MWQsMHgwMCwweDI2LDB4MDAsMHgwMSwweGMwLDB4MDIsMHg2MCwweDAwLDB4OTksMHgwMCwweDA2LDB4NDAsMHgxOSwweDgwLDB4MDIgfX0sCisgezE2LCAweGQxMTAsIDAsIHsweDYwLDB4MDAsMHg5OCwweDAwLDB4NjYsMHgwMCwweDAxLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMTIwLCAwLCB7MHg0MCwweDQ1LDB4NjAsMHgwNCwweDM4LDB4MDEsMHgwZSwweDAwLDB4NDMsMHg4MCwweDEwLDB4ZTAsMHgwNCwweDM4LDB4MDEsMHgwZSB9fSwKKyB7MTYsIDB4ZDEzMCwgMCwgezB4MDAsMHg0MywweDgwLDB4MTAsMHhlMCwweDA0LDB4MzgsMHgwMSwweDFhLDB4MDAsMHg0MywweDgwLDB4MTEsMHhhMCwweDA0LDB4MzggfX0sCisgezE2LCAweGQxNDAsIDAsIHsweDAxLDB4MGUsMHgwMCwweDAyLDB4ODAsMHg0MCwweGUwLDB4MDQsMHgzOCwweDAxLDB4MGUsMHgwMCwweDQzLDB4ODAsMHgxOCwweDgwIH19LAorIHsxNiwgMHhkMTUwLCAwLCB7MHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NTAsMHgwNCwweDAxLDB4MDAsMHgzMCwweDQwLDB4MGMsMHgxMCB9fSwKKyB7MTYsIDB4ZDE2MCwgMCwgezB4MDMsMHgwNCwweDAwLDB4YzksMHgwMCwweDMwLDB4NDAsMHgwYywweDEwLDB4MDMsMHgwNCwweDAwLDB4YzEsMHgwMCwweDMwLDB4NDAgfX0sCisgezE2LCAweGQxNzAsIDAsIHsweDA4LDB4MTAsMHgwMywweDA0LDB4MDAsMHg4MSwweDAwLDB4MzAsMHg0MCwweDBjLDB4NzgsMHgwMiwweDE0LDB4MDAsMHhjMSwweDAwIH19LAorIHsxNiwgMHhkMTgwLCAwLCB7MHgzMCwweDQwLDB4MGMsMHgxMCwweDAzLDB4MDQsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDE5MCwgMCwgezB4NDAsMHgwMCwweDA1LDB4MDAsMHgzMSwweDQwLDB4MGMsMHg1MCwweDAzLDB4MTQsMHgwMCwweGM1LDB4MDAsMHgzNSwweDQwLDB4MGMgfX0sCisgezE2LCAweGQxYTAsIDAsIHsweDUwLDB4MDMsMHgxNCwweDEwLDB4ZDUsMHgwMCwweDMxLDB4NDEsMHgwZCwweDUwLDB4MDMsMHgxNCwweDEwLDB4YzUsMHgwMCwweDMxIH19LAorIHsxNiwgMHhkMWIwLCAwLCB7MHg0MCwweDBkLDB4NDgsMHg0MywweDU0LDB4MTAsMHhjNSwweDAwLDB4MzEsMHg0MCwweDBjLDB4NDAsMHg0MywweDEwLDB4MDAsMHhjMiB9fSwKKyB7MTYsIDB4ZDFjMCwgMCwgezB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0MywweDA0LDB4NjAsMHhjMSwweDE4LDB4MzAgfX0sCisgezE2LCAweGQxZDAsIDAsIHsweDQ2LDB4MGMsMHgxMSwweDgzLDB4MDQsMHg2MSwweGMxLDB4MTgsMHgzMCwweDQ2LDB4MGMsMHgwMSwweDg3LDB4MDQsMHg2MCwweGMxIH19LAorIHsxNiwgMHhkMWUwLCAwLCB7MHgxOCwweDMwLDB4NDYsMHgwOCwweDExLDB4ODMsMHgwNCwweDYwLDB4YzEsMHgxOCwweDIwLDB4MDYsMHgwYywweDAxLDB4ODMsMHgwNCB9fSwKKyB7MTYsIDB4ZDFmMCwgMCwgezB4NjAsMHhjMSwweDE4LDB4MzAsMHg0NiwweDBjLDB4MTEsMHg4MCwweDEwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQyMDAsIDAsIHsweDQwLDB4MDEsMHg0MCwweDAwLDB4MjAsMHgwMCwweDA4LDB4MDAsMHgwMiwweDAwLDB4MDAsMHg4MCwweDAwLDB4MjAsMHgwMCwweDA4IH19LAorIHsxNiwgMHhkMjEwLCAwLCB7MHgwMCwweDAyLDB4MDAsMHgwMCwweDgxLDB4MDAsMHgyMCwweDAwLDB4MDgsMHg4MCwweDAyLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgyMCB9fSwKKyB7MTYsIDB4ZDIyMCwgMCwgezB4MDAsMHgwOCwweDQwLDB4NDMsMHgzMCwweDAwLDB4ODAsMHgwMCwweDIwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHgwMCwweDAwLDB4ODAgfX0sCisgezE2LCAweGQyMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAxLDB4NDgsMHg0NCwweDYyLDB4MTEsMHgxOCwweDg0IH19LAorIHsxNiwgMHhkMjQwLCAwLCB7MHg0NiwweDIxLDB4MTEsMHg4OCwweDQ0LDB4NjMsMHgwMSwweDE4LDB4ODQsMHg0NiwweDIxLDB4MDEsMHg4OCwweDA0LDB4NjIsMHgxMSB9fSwKKyB7MTYsIDB4ZDI1MCwgMCwgezB4MTgsMHgwNCwweDQ2LDB4MjEsMHgxMCwweGM4LDB4NDQsMHg2MiwweDExLDB4MTgsMHgwNSwweDQzLDB4MDEsMHg4MSwweDg4LDB4NDQgfX0sCisgezE2LCAweGQyNjAsIDAsIHsweDYyLDB4MTEsMHgxOCwweDg0LDB4NDYsMHgyMSwweDExLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkMjcwLCAwLCB7MHg0MCwweDQ1LDB4NDAsMHgwNCwweDUwLDB4MDEsMHgxNCwweDA0LDB4NDUsMHgwMSwweDExLDB4NDAsMHg0NCwweDUwLDB4MDEsMHgxNCB9fSwKKyB7MTYsIDB4ZDI4MCwgMCwgezB4MDQsMHg0NSwweDAxLDB4MDEsMHg0MCwweDQ1LDB4MDAsMHgxMCwweDE0LDB4MDQsMHg0NSwweDAzLDB4MDAsMHg0MCwweDQ0LDB4NTAgfX0sCisgezE2LCAweGQyOTAsIDAsIHsweDExLDB4MTQsMHgwNCwweDAxLDB4MDUsMHg0MSwweDQwLDB4NDQsMHg1MCwweDExLDB4MTQsMHgwNCwweDA1LDB4MDEsMHgwMSwweDQwIH19LAorIHsxNiwgMHhkMmEwLCAwLCB7MHgxMSwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweDA4LDB4MjAsMHg0MiwweDA4LDB4MTAsMHg4MiB9fSwKKyB7MTYsIDB4ZDJiMCwgMCwgezB4MDQsMHgyMCwweDgxLDB4MDgsMHgwMCwweDQyLDB4MDAsMHgxMCwweDgyLDB4MDQsMHgyMCwweDgxLDB4MDgsMHgwMCwweDQyLDB4MDggfX0sCisgezE2LCAweGQyYzAsIDAsIHsweDEwLDB4ODIsMHgwNSwweDIwLDB4ODEsMHgwOCwweDIwLDB4NDIsMHgwOCwweDEwLDB4OGEsMHgwNSwweDIwLDB4MDUsMHgwOCwweDIwIH19LAorIHsxNiwgMHhkMmQwLCAwLCB7MHg0MiwweDA4LDB4MTAsMHg4MiwweDA0LDB4MjIsMHg4MSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDJlMCwgMCwgezB4MDAsMHgwMCwweDBhLDB4MDEsMHgwMiwweDgwLDB4NDAsMHhhMCwweDEwLDB4MjgsMHgwNCwweDAyLDB4MDEsMHgwMiwweDgwLDB4NDAgfX0sCisgezE2LCAweGQyZjAsIDAsIHsweGEwLDB4MTAsMHgyOCwweDA0LDB4MGEsMHgwMSwweDAyLDB4ODAsMHg0MCwweGEwLDB4MDAsMHgyOSwweDA0LDB4MGEsMHgwMSwweDAyIH19LAorIHsxNiwgMHhkMzAwLCAwLCB7MHg4MCwweDQwLDB4YTQsMHgwMCwweDI4LDB4MDQsMHgwYSwweDAxLDB4MDIsMHg4MCwweDQwLDB4YTgsMHgxMCwweDJiLDB4MTQsMHgwMCB9fSwKKyB7MTYsIDB4ZDMxMCwgMCwgezB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4NDUsMHg0ZCwweDAzLDB4NTMsMHg0MCwweGQ0LDB4ZDAgfX0sCisgezE2LCAweGQzMjAsIDAsIHsweDM1LDB4MzQsMHgwZCwweDRkLDB4MDMsMHg1MywweDQwLDB4ZDQsMHhkMCwweDM1LDB4MzQsMHgwZCwweDRkLDB4MDMsMHg1MywweDQwIH19LAorIHsxNiwgMHhkMzMwLCAwLCB7MHhkNCwweGQwLDB4MjEsMHgzNCwweDRkLDB4NGQsMHgwMywweDUzLDB4NDAsMHhkNCwweGQ5LDB4NjEsMHgzNCwweDA0LDB4MGQsMHgwMyB9fSwKKyB7MTYsIDB4ZDM0MCwgMCwgezB4NTMsMHg0MCwweGMwLDB4ZDgsMHgzNSwweDM3LDB4MGQsMHg0MCwweDExLDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQzNTAsIDAsIHsweDQwLDB4MDEsMHg0OCwweDA0LDB4NzIsMHgwMCwweDFjLDB4ODAsMHg0NywweDIwLDB4MTEsMHhjOCwweDA0LDB4NzIsMHgwMSwweDFjIH19LAorIHsxNiwgMHhkMzYwLCAwLCB7MHg4MCwweDQ3LDB4MjAsMHgxMSwweGM4LDB4MDQsMHg3MiwweDAwLDB4OWMsMHg4MCwweDQ3LDB4MjAsMHgxOSwweGM4LDB4MDAsMHg3MiB9fSwKKyB7MTYsIDB4ZDM3MCwgMCwgezB4MDEsMHgxYywweDg4LDB4NjcsMHgyMCwweDExLDB4YzgsMHgwNCwweDcyLDB4MDEsMHg1YywweDgyLDB4NDcsMHgyMiwweDExLDB4YzAgfX0sCisgezE2LCAweGQzODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjMsMHgwOCwweDQ4LDB4YzIsMHgxMiwweDMxIH19LAorIHsxNiwgMHhkMzkwLCAwLCB7MHg4NCwweDhjLDB4NjEsMHgyMywweDEwLDB4NDAsMHhjMCwweDEyLDB4MzEsMHg4NCwweDhjLDB4NjEsMHgwMywweDEwLDB4NDgsMHhjNCB9fSwKKyB7MTYsIDB4ZDNhMCwgMCwgezB4MTAsMHgzMSwweDg0LDB4OGMsMHg0MSwweDIzLDB4MTgsMHg0OCwweGM2LDB4MTAsMHgzMCwweDA0LDB4MGMsMHg0MSwweDIzLDB4MTggfX0sCisgezE2LCAweGQzYjAsIDAsIHsweDQ4LDB4YzYsMHgxMiwweDMwLDB4ODQsMHg4YywweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkM2MwLCAwLCB7MHgwMCwweDAwLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMywweGZmLDB4ZjQsMHhmZiwweGZkLDB4M2YsMHhmZiwweDRmLDB4ZmYsMHhkMyB9fSwKKyB7MTYsIDB4ZDNkMCwgMCwgezB4ZmYsMHhmNCwweGZmLDB4ZmQsMHgzZiwweGZmLDB4NGYsMHhmZiwweGQzLDB4ZmYsMHhmNCwweGZmLDB4ZmQsMHgzZiwweGZmLDB4NGYgfX0sCisgezE2LCAweGQzZTAsIDAsIHsweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhkZCwweDNmLDB4ZmYsMHg0ZiwweGZmLDB4ZDMsMHhmZiwweGY0LDB4ZmYsMHhmZCwweDAwIH19LAorIHsxNiwgMHhkM2YwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDQwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ0MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNDIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDQzMCwgMCwgezB4MDAsMHgwMCwweDJjLDB4ZGIsMHgwYiwweDM2LDB4YzIsMHhjZCwweGIwLDB4YjMsMHg2YywweDJjLDB4ZGIsMHgwYiwweDM2LDB4YzIgfX0sCisgezE2LCAweGQ0NDAsIDAsIHsweGNkLDB4YjAsMHhiMywweDZjLDB4MmMsMHhkYiwweDBiLDB4MzYsMHhjMiwweGNkLDB4YjAsMHhiMywweDZjLDB4MmMsMHhkYiwweDBiIH19LAorIHsxNiwgMHhkNDUwLCAwLCB7MHgzNiwweGMyLDB4Y2QsMHhiMCwweGIzLDB4NGMsMHgyYywweGRiLDB4MGIsMHgzNiwweGMyLDB4Y2QsMHhiMCwweGIzLDB4NmMsMHgwMCB9fSwKKyB7MTYsIDB4ZDQ2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMywweDVjLDB4NGMsMHhkNywweDEzLDB4MzMgfX0sCisgezE2LCAweGQ0NzAsIDAsIHsweGM0LDB4Y2MsMHhmMSwweDMzLDB4M2EsMHg0YSwweGQ2LDB4OTMsMHgzMywweGM0LDB4Y2MsMHhmMSwweDJiLDB4M2EsMHg0YywweGNmIH19LAorIHsxNiwgMHhkNDgwLCAwLCB7MHgxMywweDMzLDB4YzQsMHhjYywweGU5LDB4MzMsMHgzYywweDRjLDB4Y2YsMHgxMiwweGI1LDB4YTQsMHhhYywweGM5LDB4MzMsMHgzYyB9fSwKKyB7MTYsIDB4ZDQ5MCwgMCwgezB4NGMsMHhjZiwweDEzLDB4MzUsMHhjNCwweGNkLDB4NjksMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ0YTAsIDAsIHsweDAwLDB4MDAsMHgzYiwweDdlLDB4NGUsMHhkZiwweDkzLDB4YjcsMHhlNCwweGVkLDB4ZjksMHgzYiwweDdlLDB4NGUsMHhkZiwweDkzIH19LAorIHsxNiwgMHhkNGIwLCAwLCB7MHhiNywweGU0LDB4ZWQsMHhmOSwweDNiLDB4N2UsMHg0ZSwweGRlLDB4MTIsMHgzNywweGU0LDB4ZWQsMHhlMSwweDNiLDB4N2UsMHg0ZSB9fSwKKyB7MTYsIDB4ZDRjMCwgMCwgezB4ZGYsMHg5MiwweDMxLDB4ODQsMHg4ZCwweGQ5LDB4M2IsMHg3ZSwweDRlLDB4ZGYsMHg5MywweGIxLDB4ZTQsMHhlYywweDYxLDB4MDAgfX0sCisgezE2LCAweGQ0ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4NCwweDA0LDB4YTEsMHg4MywweDJjIH19LAorIHsxNiwgMHhkNGUwLCAwLCB7MHgwMywweDBhLDB4MTAsMHg4MiwweGMxLDB4MzQsMHgxMCwweDhmLDB4MDAsMHg0MCwweDA5LDB4MTQsMHgwMiwweDAzLDB4MTQsMHg5MSB9fSwKKyB7MTYsIDB4ZDRmMCwgMCwgezB4MDAsMHgwOCwweDQyLDB4MGIsMHgxOCwweDgyLDB4YzQsMHgwMCwweDMxLDB4Y2EsMHgwYywweDUyLDB4MDIsMHgxMCwweDgwLDB4ODUgfX0sCisgezE2LCAweGQ1MDAsIDAsIHsweDAwLDB4MjEsMHg4MiwweDI4LDB4NDAsMHgwYSwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNTEwLCAwLCB7MHgwMCwweDAwLDB4MGEsMHgwNCwweDAyLDB4MDEsMHg0MCwweDgwLDB4NzMsMHgyOCwweDEwLDB4NDgsMHgwNywweDA2LDB4MDEsMHgwNCB9fSwKKyB7MTYsIDB4ZDUyMCwgMCwgezB4YTQsMHg0MSwweDIxLDB4MTQsMHgwOCwweDQ0LDB4MDYsMHgxMSwweDQwLDB4ODAsMHg3MCwweDIwLDB4MTQsMHgwYSwweDA0LDB4MDIgfX0sCisgezE2LCAweGQ1MzAsIDAsIHsweDAwLDB4YzgsMHg4NCwweDQxLDB4MjEsMHgxYywweDA4LDB4MDYsMHgxMiwweDAxLDB4YzAsMHg4MCwweDYwLDB4MjAsMHgxNCwweDAwIH19LAorIHsxNiwgMHhkNTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4ODQsMHgwNCwweDIxLDB4ODIsMHgwOCB9fSwKKyB7MTYsIDB4ZDU1MCwgMCwgezB4NTMsMHgwMiwweDEwLDB4ODAsMHhjNSwweDAwLDB4ODEsMHg0YSwweDA0LDB4NDIsMHgwMiwweDE0LDB4MDAsMHgwNCwweDIwLDB4MjEgfX0sCisgezE2LCAweGQ1NjAsIDAsIHsweDgwLDB4YTgsMHg3MiwweDIyLDB4MWMsMHg4OCwweGM0LDB4MDYsMHhhMSwweDQyLDB4OGMsMHg1MiwweDIyLDB4MWMsMHg4OCwweDg1IH19LAorIHsxNiwgMHhkNTcwLCAwLCB7MHgyNiwweDIxLDB4YzAsMHg4OCwweDUwLDB4MjIsMHgxOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDU4MCwgMCwgezB4MDAsMHgwMCwweDAyLDB4NDQsMHgwMCwweDAxLDB4MDEsMHgwMCwweDYyLDB4MDAsMHgxMCwweDAwLDB4MDQsMHgwMCwweDAxLDB4MDEgfX0sCisgezE2LCAweGQ1OTAsIDAsIHsweDIwLDB4NDAsMHgwMCwweDFjLDB4MDAsMHg0NCwweDA0LDB4MDEsMHgwMiwweDIwLDB4NjIsMHgwMCwweDFjLDB4ODAsMHgwNCwweDA0IH19LAorIHsxNiwgMHhkNWEwLCAwLCB7MHg4MCwweDg5LDB4MjAsMHg1MCwweDA4LDB4MTQsMHg4MCwweDA0LDB4MjQsMHgwMSwweGMxLDB4MDAsMHg1MCwweDAwLDB4MTgsMHgwMCB9fSwKKyB7MTYsIDB4ZDViMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDgwLDB4MzgsMHgyMCwweDA0LDB4MGMgfX0sCisgezE2LCAweGQ1YzAsIDAsIHsweDMxLDB4MGEsMHgwMCwweDAwLDB4MDIsMHgxOCwweDIwLDB4OGMsMHhhOCwweDEwLDB4MjgsMHgwOCwweDg4LDB4YzEsMHgxNCwweDEwIH19LAorIHsxNiwgMHhkNWQwLCAwLCB7MHhjNiwweDAwLDB4MjIsMHgwMywweDA4LDB4MDIsMHgwMSwweDA4LDB4YjAsMHgwMCwweDBjLDB4MjEsMHgwMiwweDAwLDB4ODIsMHg4MCB9fSwKKyB7MTYsIDB4ZDVlMCwgMCwgezB4MDgsMHgwMCwweDQ5LDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ1ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg4MCwweDA4LDB4MjAsMHgwMywweDAwLDB4MDQsMHgwMiwweDQzLDB4MjAsMHgwMCwweDQwIH19LAorIHsxNiwgMHhkNjAwLCAwLCB7MHgwMCwweDIwLDB4MDAsMHgwNCwweDQyLDB4MDEsMHgxMCwweDgwLDB4ODQsMHgyMCwweDExLDB4MDgsMHgwNCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDYxMCwgMCwgezB4MDAsMHg0NCwweDI0LDB4MjAsMHgwOSwweDA4LDB4NDAsMHgwMywweDAwLDB4OTAsMHhjNCwweDIwLDB4MjAsMHgwOCwweDBjLDB4MDIgfX0sCisgezE2LCAweGQ2MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDgsMHg4MSwweDA4LDB4MjAsMHgwNCwweDg4IH19LAorIHsxNiwgMHhkNjMwLCAwLCB7MHgwMiwweDIyLDB4MDgsMHgwOCwweGMzLDB4MmEsMHg5MCwweDQwLDB4ODQsMHgxMCwweDIwLDB4MDQsMHg4MCwweGMyLDB4MjYsMHgyMCB9fSwKKyB7MTYsIDB4ZDY0MCwgMCwgezB4NDksMHg4OCwweDIyLDB4MjIsMHgwYywweDA4LDB4YzEsMHgyNiwweGEwLDB4YzksMHg4YywweDEyLDB4MmEsMHgwNCwweDg4LDB4NDMgfX0sCisgezE2LCAweGQ2NTAsIDAsIHsweDBlLDB4YTAsMHhjYiwweDg4LDB4MTAsMHgyMiwweDBjLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkNjYwLCAwLCB7MHgwOCwweDAwLDB4MGEsMHg0MCwweDMyLDB4MDAsMHgwMSwweDgwLDB4MzEsMHgyOCwweDAwLDB4MDAsMHgwMSwweDEyLDB4ODAsMHg4ZCB9fSwKKyB7MTYsIDB4ZDY3MCwgMCwgezB4ODQsMHgwMCwweDI4LDB4MGMsMHgwOCwweDAxLDB4MzIsMHgwMCwweDhjLDB4ODAsMHgwMiwweDIwLDB4MGMsMHgwOCwweDAxLDB4MmUgfX0sCisgezE2LCAweGQ2ODAsIDAsIHsweDAwLDB4YzMsMHg4MCwweDAyLDB4MjAsMHgwNCwweDA4LDB4NDMsMHgwMiwweDAwLDB4NDAsMHg4MCwweDEwLDB4MjAsMHgwNCwweDAyIH19LAorIHsxNiwgMHhkNjkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDA4LDB4ODcsMHgwYSwweDIxLDB4MDQsMHg4OCB9fSwKKyB7MTYsIDB4ZDZhMCwgMCwgezB4MTEsMHgyYSwweDFjLDB4MGEsMHgwNiwweDIyLDB4MjEsMHg0MCwweGEwLDB4NDIsMHgyYSwweDEwLDB4ODgsMHg4NSwweDBhLDB4YTEgfX0sCisgezE2LCAweGQ2YjAsIDAsIHsweDA2LDB4YTQsMHg2MiwweDIyLDB4MWMsMHgwYSwweGM0LDB4MDIsMHgyMSwweDgwLDB4OGMsMHg1MiwweDIyLDB4MTQsMHg0OCwweDg2IH19LAorIHsxNiwgMHhkNmMwLCAwLCB7MHgyMiwweDIwLDB4MDgsMHhhOCwweDYwLDB4MmEsMHgxNCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDZkMCwgMCwgezB4MDAsMHgwMCwweDA4LDB4NDUsMHgwNiwweDAxLDB4ODksMHg4MCwweDYzLDB4MjAsMHgxYywweDg4LDB4NDAsMHgzNCwweDExLDB4MDEgfX0sCisgezE2LCAweGQ2ZTAsIDAsIHsweGE0LDB4NTAsMHgyOCwweDE4LDB4NDgsMHgwNCwweDBlLDB4MDEsMHg0YiwweDgwLDB4NzMsMHgyOCwweDFjLDB4OGEsMHgwNCwweDA2IH19LAorIHsxNiwgMHhkNmYwLCAwLCB7MHg5MSwweDQ5LDB4MDQsMHg2MywweDIwLDB4MWMsMHg4YSwweDA2LDB4MjYsMHgwMSwweDg1LDB4ODAsMHg3MCwweDIwLDB4MTgsMHgwMiB9fSwKKyB7MTYsIDB4ZDcwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDg1LDB4MDAsMHhiMSwweDQ1LDB4MmMgfX0sCisgezE2LCAweGQ3MTAsIDAsIHsweDcwLDB4MDIsMHgxNCwweGMwLDB4MDcsMHgwOCwweDIxLDB4NDksMHgwMCwweDQyLDB4MDEsMHgxNCwweDgyLDB4MDUsMHgwMCwweDExIH19LAorIHsxNiwgMHhkNzIwLCAwLCB7MHg4NCwweDAwLDB4NTIsMHgwMiwweDFjLDB4MDAsMHhjNCwweDAwLDB4MjEsMHhjNCwweDJjLDB4NTMsMHgwMiwweDFjLDB4MDIsMHg4MSB9fSwKKyB7MTYsIDB4ZDczMCwgMCwgezB4MDQsMHhhMSwweGNkLDB4MDgsMHg1MCwweDAyLDB4MTQsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ3NDAsIDAsIHsweDA4LDB4MTAsMHgxMiwweDA0LDB4MzQsMHgwMSwweGNjLDB4MDAsMHg3MywweDQwLDB4MWMsMHg5MCwweDQ1LDB4MDQsMHgwMSwweDQ4IH19LAorIHsxNiwgMHhkNzUwLCAwLCB7MHgwNCwweDYwLDB4NDEsMHgxOCwweGMwLDB4NDQsMHgwNCwweDAxLDB4MDUsMHgwNCwweDczLDB4NDgsMHgxNCwweDUwLDB4NDcsMHgzNCB9fSwKKyB7MTYsIDB4ZDc2MCwgMCwgezB4MDEsMHg0NSwweDIwLDB4NjIsMHgwOCwweDFjLDB4YzIsMHgwNCwweDBjLDB4ODEsMHhjNywweDAwLDB4NzMsMHg4MCwweDE4LDB4YzIgfX0sCisgezE2LCAweGQ3NzAsIDAsIHsweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MTAsMHg4NCwweDEwLDB4MjEsMHhjYywweDI4IH19LAorIHsxNiwgMHhkNzgwLCAwLCB7MHg0MiwweDAyLDB4MTQsMHgxMiwweGM1LDB4MTAsMHgyMSwweDg0LDB4MDQsMHg0MCwweDAwLDB4MWMsMHg4MCwweDg0LDB4MDAsMHg5MSB9fSwKKyB7MTYsIDB4ZDc5MCwgMCwgezB4MDAsMHgwOCwweDczLDB4ODIsMHgxYywweDkwLDB4MDUsMHgwYywweDAxLDB4Y2YsMHgwYywweDQwLDB4MDIsMHgxNCwweDMwLDB4NDUgfX0sCisgezE2LCAweGQ3YTAsIDAsIHsweDIwLDB4YTEsMHhjMCwweDA4LDB4NTAsMHgwMiwweDEwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkN2IwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHg0NSwweDBjLDB4ODEsMHgwMCwweDAwLDB4MDEsMHgwOCwweDA4LDB4MDAsMHgwNSwweDE4LDB4OTEsMHgwNSB9fSwKKyB7MTYsIDB4ZDdjMCwgMCwgezB4MDQsMHgwMCwweDAxLDB4MDQsMHg0MCwweDA2LDB4MTgsMHgwMCwweDAyLDB4MjQsMHg3MCwweDQwLDB4MDQsMHgwMCwweDQwLDB4MDAgfX0sCisgezE2LCAweGQ3ZDAsIDAsIHsweDAxLDB4YzQsMHgyNCwweDAwLDB4ODgsMHgwNCwweDAwLDB4NDMsMHgxMCwweDAwLDB4NDAsMHgyMCwweDAwLDB4ODgsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkN2UwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEyLDB4ODUsMHgyNCwweDMxLDB4MDIsMHgwYyB9fSwKKyB7MTYsIDB4ZDdmMCwgMCwgezB4MDIsMHhjMiwweDA0LDB4MTAsMHhjNCwweDI4LDB4MjEsMHg0OSwweDBjLDB4MDIsMHhjMCwweDA0LDB4YjIsMHgwNiwweDFjLDB4MjAgfX0sCisgezE2LCAweGQ4MDAsIDAsIHsweDAzLDB4MDgsMHg1MCwweDQyLDB4MGMsMHg4MCwweDAxLDB4MDQsMHhhMSwweDQ5LDB4MGMsMHgwMCwweGMyLDB4MGMsMHgxMCwweDQzIH19LAorIHsxNiwgMHhkODEwLCAwLCB7MHgyNCwweGEwLDB4YzEsMHgwOCwweDEwLDB4NDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDgyMCwgMCwgezB4MDAsMHgxMCwweGEyLDB4MDAsMHgyMCwweDAwLDB4Y2QsMHgwMCwweDAwLDB4NDAsMHgwNCwweDIwLDB4MDEsMHgxMCwweDAwLDB4MDkgfX0sCisgezE2LCAweGQ4MzAsIDAsIHsweDA0LDB4MDIsMHg0OSwweDBjLDB4OTIsMHgwNywweDMwLDB4MDAsMHgwMCwweDAwLDB4MzMsMHgwOCwweDBjLDB4OTIsMHg0MSwweDAwIH19LAorIHsxNiwgMHhkODQwLCAwLCB7MHg4MCwweGNjLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwMCwweDQzLDB4MjgsMHg4MCwweGMyLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDg1MCwgMCwgezB4MDQsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDEwLDB4NTAsMHg4MCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ4NjAsIDAsIHsweDEwLDB4MDAsMHgwMCwweGYwLDB4MDAsMHgxMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweGQwLDB4ODAsMHg4MCwweDAwIH19LAorIHsxNiwgMHhkODcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4OTAsMHg4MCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4OTAsMHg4MCB9fSwKKyB7MTYsIDB4ZDg4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ4OTAsIDAsIHsweDNjLDB4M2MsMHgxMCwweDgwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg5MCwweGEwLDB4ODAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkOGEwLCAwLCB7MHgwMCwweDAwLDB4NDAsMHgxMCwweDkwLDB4ODAsMHhhMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgxMCwweDkwLDB4ODAsMHhhMCB9fSwKKyB7MTYsIDB4ZDhiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MjAsMHg4MCwweDEwLDB4OTAsMHhhMCwweGEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4OGYgfX0sCisgezE2LCAweGQ4YzAsIDAsIHsweDBmLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmMsMHhjMiwweGU0LDB4ODEsMHg4MCwweDNmIH19LAorIHsxNiwgMHhkOGQwLCAwLCB7MHhkOSwweGJmLDB4ZDksMHg5OCwweDcxLDB4OWQsMHg0MiwweDgwLDB4MDAsMHgyNiwweDdmLDB4ZTYsMHg3MiwweGFiLDB4N2MsMHgzYSB9fSwKKyB7MTYsIDB4ZDhlMCwgMCwgezB4NDAsMHgwMCwweDE5LDB4ODAsMHgyNiwweDQ4LDB4ZGQsMHgzYywweDkxLDB4YzAsMHgyNiwweDQwLDB4MjYsMHg0MCwweDM4LDB4MzEgfX0sCisgezE2LCAweGQ4ZjAsIDAsIHsweGRiLDB4NjEsMHhjMCwweDE5LDB4OTksMHhiZiwweGM5LDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkOTAwLCAwLCB7MHgwMCwweDAwLDB4MTAsMHg4MCwweDEwLDB4MTQsMHg4MCwweDA2LDB4ODQsMHg5NywweDk2LDB4ODYsMHg5NiwweDA2LDB4OTAsMHgwMCB9fSwKKyB7MTYsIDB4ZDkxMCwgMCwgezB4M2YsMHhhMSwweDI4LDB4MDEsMHgwMiwweDkwLDB4MTIsMHgwMCwweDgwLDB4MTcsMHg4OCwweDE2LDB4OWUsMHg5MCwweDkwLDB4MDQgfX0sCisgezE2LCAweGQ5MjAsIDAsIHsweDEwLDB4MDAsMHgzNiwweGJlLDB4YmUsMHg5ZSwweDg2LDB4MTYsMHgxMiwweDg0LDB4ODAsMHgxMywweGJlLDB4OTcsMHhhZSwweDgwIH19LAorIHsxNiwgMHhkOTMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHg4MiB9fSwKKyB7MTYsIDB4ZDk0MCwgMCwgezB4ODEsMHg4NCwweDIxLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweGExLDB4MzgsMHgwMSwweDc4LDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ5NTAsIDAsIHsweDA4LDB4YjgsMHgyMSwweDcyLDB4NjgsMHg4MCwweDAwLDB4MDAsMHgwMCwweDA4LDB4OTgsMHg0NCwweDg4LDB4NjgsMHg4MCwweDAwIH19LAorIHsxNiwgMHhkOTYwLCAwLCB7MHgwMCwweDAwLDB4MDgsMHhiOCwweDAxLDB4NzgsMHgwMSwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDk3MCwgMCwgezB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZjcsMHhhZiwweGZmLDB4YzAgfX0sCisgezE2LCAweGQ5ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmIH19LAorIHsxNiwgMHhkOTkwLCAwLCB7MHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4YmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZDlhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfX0sCisgezE2LCAweGQ5YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweDdmLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmIH19LAorIHsxNiwgMHhkOWMwLCAwLCB7MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiB9fSwKKyB7MTYsIDB4ZDlkMCwgMCwgezB4MmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGQ5ZTAsIDAsIHsweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHg3ZiwweGMwIH19LAorIHsxNiwgMHhkOWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiB9fSwKKyB7MTYsIDB4ZGEwMCwgMCwgezB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4N2YsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRhMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH19LAorIHsxNiwgMHhkYTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4YmYsMHhiZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGRmLDB4YmYsMHhkZiB9fSwKKyB7MTYsIDB4ZGEzMCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZWYsMHhmZiwweGZmLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZGYgfX0sCisgezE2LCAweGRhNDAsIDAsIHsweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYTUwLCAwLCB7MHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHgzZSwweGFmLDB4ZmYsMHhjMCB9fSwKKyB7MTYsIDB4ZGE2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgxZiwweGZmLDB4ZGYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGU3LDB4ZmUgfX0sCisgezE2LCAweGRhNzAsIDAsIHsweGVmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGRmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCB9fSwKKyB7MTYsIDB4ZGE5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmYsMHhmNywweGZmLDB4ZmYgfX0sCisgezE2LCAweGRhYTAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZiwweGZmLDB4ZmYsMHhkZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGY3IH19LAorIHsxNiwgMHhkYWIwLCAwLCB7MHhkZiwweGY3LDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGFjMCwgMCwgezB4MDAsMHgwMCwweDAyLDB4YzQsMHgwMCwweGIxLDB4YzMsMHgyYywweDUwLDB4MDksMHgxNCwweDgyLDB4YzQsMHgzMCwweDkxLDB4YzcgfX0sCisgezE2LCAweGRhZDAsIDAsIHsweDI0LDB4NjAsMHgwOCwweDFjLDB4ODIsMHgwNywweDM0LDB4OTEsMHg0YywweDA0LDB4NDMsMHgwYSwweDEwLDB4YzIsMHg4NCwweDA0IH19LAorIHsxNiwgMHhkYWUwLCAwLCB7MHg5MSwweDg0LDB4MjQsMHg1MiwweDBiLDB4MTgsMHgwMiwweGM0LDB4MjQsMHhiMSwweGMzLDB4MmMsMHg0MCwweDBhLDB4MTAsMHg4MCB9fSwKKyB7MTYsIDB4ZGFmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA1LDB4MDIsMHgwMSwweGM0LDB4ODAgfX0sCisgezE2LCAweGRiMDAsIDAsIHsweDYwLDB4MjAsMHgxYywweDA4LDB4NDQsMHgyMiwweDAxLDB4YzAsMHg4NCwweDUwLDB4MDEsMHg5YywweDA4LDB4MDcsMHgwYSwweDAxIH19LAorIHsxNiwgMHhkYjEwLCAwLCB7MHhjMCwweDg0LDB4NzIsMHgyMCwweDFjLDB4YzgsMHgwNCwweDEyLDB4MTEsMHg0NCwweDgwLDB4NDEsMHgwMSwweDFjLDB4ODAsMHgwNyB9fSwKKyB7MTYsIDB4ZGIyMCwgMCwgezB4MDgsMHgxMSwweGM0LDB4MDAsMHg3MCwweDAwLDB4MTAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRiMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDg2LDB4MmMsMHgyMSwweDRhLDB4MGMsMHg1MiwweDAyLDB4MWMsMHg4MCwweDA0LDB4MjAsMHgyMSwweGNhIH19LAorIHsxNiwgMHhkYjQwLCAwLCB7MHgxMCwweDYyLDB4MDIsMHgxYywweDgxLDB4NDcsMHgwNCwweDIxLDB4YzMsMHgyMCwweDUxLDB4MDEsMHgxYywweDgwLDB4MDQsMHgyYyB9fSwKKyB7MTYsIDB4ZGI1MCwgMCwgezB4MDEsMHhjYiwweDA0LDB4NTIsMHgwMywweDE0LDB4NDAsMHhjNywweDIwLDB4MzEsMHhjOCwweDBjLDB4NTAsMHgyMiwweDEwLDB4ODAgfX0sCisgezE2LCAweGRiNjAsIDAsIHsweDAxLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNiwweDIwLDB4MDEsMHg4OSwweDAwIH19LAorIHsxNiwgMHhkYjcwLCAwLCB7MHg1MiwweDAwLDB4MTQsMHg4MCwweDA0LDB4MjgsMHgwMSwweDQ1LDB4MDQsMHg2MiwweDAwLDB4MTAsMHg4MCwweDQ2LDB4MzAsMHgxMSB9fSwKKyB7MTYsIDB4ZGI4MCwgMCwgezB4MGQsMHgwMCwweDQyLDB4MDEsMHgxNCwweGMwLDB4NDQsMHgwMCwweDExLDB4MDUsMHgwMCwweDUwLDB4MDAsMHgxYywweDAwLDB4NDQgfX0sCisgezE2LCAweGRiOTAsIDAsIHsweDI4LDB4MDEsMHg0OSwweDAwLDB4NzAsMHgwMCwweDEwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYmEwLCAwLCB7MHgwMCwweDAwLDB4MDgsMHhjMCwweDAyLDB4MzAsMHgwYywweDhjLDB4MzAsMHgyMiwweDA4LDB4ODgsMHhjMiwweDI2LDB4MDAsMHgwOCB9fSwKKyB7MTYsIDB4ZGJiMCwgMCwgezB4ODAsMHgyMCwweDIyLDB4MGMsMHg4OCwweDgxLDB4MDIsMHgxMCwweGM0LDB4ODAsMHgxMCwweDIyLDB4MGMsMHgwOCwweDQwLDB4MDIgfX0sCisgezE2LCAweGRiYzAsIDAsIHsweDEwLDB4NDgsMHg4OCwweDAxLDB4MjMsMHgwNCwweGM4LDB4NDIsMHgwMiwweDEwLDB4NDYsMHg4YywweDEyLDB4MjIsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkYmQwLCAwLCB7MHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDgwLDB4YzgsMHgyMCB9fSwKKyB7MTYsIDB4ZGJlMCwgMCwgezB4MTEsMHgwOSwweDAwLDB4ODAsMHg0MSwweDEwLDB4OTAsMHgwOCwweDI0LDB4MzAsMHgwOCwweDA0LDB4NDIsMHg0MSwweDAwLDB4OTAgfX0sCisgezE2LCAweGRiZjAsIDAsIHsweGM0LDB4MjAsMHgwMCwweDA4LDB4MDQsMHg0MiwweDAwLDB4MTAsMHg4MCwweDRjLDB4MjAsMHgyMywweDA5LDB4MDQsMHhjMiwweDQzIH19LAorIHsxNiwgMHhkYzAwLCAwLCB7MHgzMCwweDgwLDB4NDAsMHgyMCwweDExLDB4MDgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGMxMCwgMCwgezB4MDgsMHgwMCwweDA4LDB4ODEsMHgwMiwweDIwLDB4YzksMHg4YywweDEyLDB4MjAsMHgwNCwweDQ4LDB4NDEsMHgyMiwweDAwLDB4MDkgfX0sCisgezE2LCAweGRjMjAsIDAsIHsweDg4LDB4MzAsMHgyMCwweDBjLDB4ODgsMHgwMywweDBlLDB4MDAsMHg0OSwweDhjLDB4MTAsMHgyMiwweDBjLDB4ODgsMHg0MCwweDJlIH19LAorIHsxNiwgMHhkYzMwLCAwLCB7MHgwMCwweGM5LDB4ODQsMHgxMywweDIxLDB4MDQsMHhjOCwweGMzLDB4MjIsMHgwMCwweGNiLDB4OGMsMHgzMiwweDIyLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGM0MCwgMCwgezB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwOCwweDAxLDB4MDIsMHgwMCwweDRiLDB4ODAgfX0sCisgezE2LCAweGRjNTAsIDAsIHsweDMyLDB4MjEsMHgwOCwweDg4LDB4NDEsMHgwMiwweDEwLDB4MGYsMHg4MCwweDEwLDB4MjEsMHg4YywweDA4LDB4NDEsMHgwMiwweDAwIH19LAorIHsxNiwgMHhkYzYwLCAwLCB7MHg4NywweDg0LDB4MTAsMHgyMCwweDA0LDB4ODgsMHgwMCwweDAyLDB4MDAsMHg0NywweDgwLDB4MTAsMHgyMSwweDBjLDB4ODgsMHg0MSB9fSwKKyB7MTYsIDB4ZGM3MCwgMCwgezB4MTYsMHgxMCwweDQ2LDB4ODAsMHgzMCwweDIwLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRjODAsIDAsIHsweDAwLDB4MDAsMHgwYSwweGM0LDB4MjIsMHhhMSwweDA4LDB4YTQsMHg3MiwweDJhLDB4MTQsMHgwYSwweDg1LDB4MDIsMHg4MSwweDg0IH19LAorIHsxNiwgMHhkYzkwLCAwLCB7MHhhMCwweDQyLDB4MjgsMHgxYywweDBhLDB4YzUsMHgwMiwweDkxLDB4NDAsMHhiOCwweDczLDB4MjksMHgxMCwweGNhLDB4YzQsMHgwMiB9fSwKKyB7MTYsIDB4ZGNhMCwgMCwgezB4YTEsMHg4MCwweGE0LDB4NDIsMHgyYSwweDE0LDB4Y2EsMHg4NSwweDIyLDB4OTEsMHg4MCwweGE4LDB4NzAsMHgyYSwweDE4LDB4MDIgfX0sCisgezE2LCAweGRjYjAsIDAsIHsweDAwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDgsMHgwNCwweDFlLDB4MDEsMHhjOCwweDgwIH19LAorIHsxNiwgMHhkY2MwLCAwLCB7MHg0MywweDIwLDB4MTgsMHgwOCwweDQ1LDB4M2UsMHgwMSwweDBjLDB4ODAsMHg2MSwweDIwLDB4OWMsMHg0OCwweDA2LDB4MTIsMHg4MSB9fSwKKyB7MTYsIDB4ZGNkMCwgMCwgezB4YzAsMHg4MCwweDczLDB4MDAsMHgxMCwweDg4LDB4MDYsMHgwMiwweDAxLDB4YzgsMHgwMCwweDQyLDB4MjAsMHgxMCwweGM4LDB4MDcgfX0sCisgezE2LCAweGRjZTAsIDAsIHsweDAyLDB4MTEsMHhjZCwweDgwLDB4NTEsMHgyMCwweDE0LDB4ODIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkY2YwLCAwLCB7MHgwOCwweDAwLDB4MDAsMHhjNCwweDI0LDB4MjEsMHhjOCwweDBjLDB4NDIsMHgwMSwweDE0LDB4MDAsMHgwMCwweDI4LDB4MTAsMHg0YyB9fSwKKyB7MTYsIDB4ZGQwMCwgMCwgezB4MDgsMHg1MiwweDAyLDB4MTQsMHg4MCwweDQ1LDB4MjQsMHgyOSwweDQwLDB4MDQsMHg3MiwweDAwLDB4MTAsMHhjMCwweDA1LDB4MjQgfX0sCisgezE2LCAweGRkMTAsIDAsIHsweDExLDB4NDQsMHgwOCwweDQzLDB4MDEsMHgxNCwweGMwLDB4NDcsMHgyNCwweDIwLDB4NDgsMHgwOCwweDcyLDB4MDIsMHgxMCwweDAwIH19LAorIHsxNiwgMHhkZDIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxMCwweDAwLDB4MDcsMHgxMCwweDExLDB4MDYsMHgwMCB9fSwKKyB7MTYsIDB4ZGQzMCwgMCwgezB4NzIsMHgwMCwweDE4LDB4ZDAsMHg0NiwweDIwLDB4MDEsMHg0ZCwweDAwLDB4NzEsMHg0MCwweDEwLDB4NTAsMHgwNywweDMwLDB4MTEgfX0sCisgezE2LCAweGRkNDAsIDAsIHsweGMzLDB4MDAsMHg3MSwweDQxLDB4MTAsMHhiMCwweDA1LDB4MmMsMHgwMSwweDQ5LDB4MDAsMHg0MywweDAwLDB4MWMsMHg1MCwweDQ1IH19LAorIHsxNiwgMHhkZDUwLCAwLCB7MHgzMCwweDAxLDB4OGMsMHgwMCwweDYxLDB4NDAsMHgxOCwweDQyLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGQ2MCwgMCwgezB4MDAsMHgwMCwweDMwLDB4YzUsMHgwMCwweDIxLDB4YzAsMHgwYywweDQwLDB4MDEsMHgxNCwweDEyLDB4NDQsMHgwNCwweDMxLDB4ODQgfX0sCisgezE2LCAweGRkNzAsIDAsIHsweDI0LDB4NDAsMHg4MCwweDE0LDB4YTEsMHhjNywweDAwLDB4MDEsMHg0MCwweDA4LDB4NDAsMHgwMSwweDE0LDB4MjAsMHgwNSwweDIwIH19LAorIHsxNiwgMHhkZDgwLCAwLCB7MHgxMSwweGMwLDB4MDIsMHg2MCwweDgyLDB4MTgsMHgwMCwweDg3LDB4MjQsMHgxMSwweDQwLDB4MDgsMHg0MCwweDQyLDB4MTAsMHgwMiB9fSwKKyB7MTYsIDB4ZGQ5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAwLDB4MGMsMHg4MCwweGM0LDB4MjQgfX0sCisgezE2LCAweGRkYTAsIDAsIHsweDMxLDB4NDgsMHgwYywweDAwLDB4MDEsMHgwOCwweGMxLDB4NDEsMHgwMCwweDAwLDB4NDksMHgwMCwweDQyLDB4MDMsMHgwOCwweDEwIH19LAorIHsxNiwgMHhkZGIwLCAwLCB7MHg4MCwweDIwLDB4MjEsMHgwOSwweDBjLDB4MDIsMHgwMiwweDE4LDB4ODAsMHhjMSwweDI0LDB4MzAsMHgwOCwweDBjLDB4NDIsMHgwMSB9fSwKKyB7MTYsIDB4ZGRjMCwgMCwgezB4MTAsMHg4MCwweDgzLDB4MjAsMHgxMSwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRkZDAsIDAsIHsweDAwLDB4MDAsMHgxMCwweGMxLDB4MDQsMHgyMCwweDQ4LDB4MGMsMHgxMiwweDQyLDB4MDQsMHgwMCwweDgzLDB4MDAsMHgzMSwweDQ4IH19LAorIHsxNiwgMHhkZGUwLCAwLCB7MHgwMCwweDAyLDB4NDEsMHgwNCwweGEwLDB4MDcsMHgwYywweDIwLDB4NDAsMHgwMCwweDEyLDB4YzIsMHgwYywweDgwLDB4YzEsMHgyMCB9fSwKKyB7MTYsIDB4ZGRmMCwgMCwgezB4MjAsMHhjOCwweDAwLDB4MTIsMHhjMSwweDBjLDB4YjAsMHg0MSwweDIwLDB4MDAsMHg0OSwweDA4LDB4MDIsMHg0MiwweDAwLDB4MDAgfX0sCisgezE2LCAweGRlMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4ODAsMHgwMSwweDAwLDB4MTAsMHg4MSwweDAwIH19LAorIHsxNiwgMHhkZTEwLCAwLCB7MHgzMCwweDQwLDB4MDgsMHgyMCwweDAzLDB4MDAsMHgxMCwweGMxLDB4MjAsMHgwMiwweDAwLDB4MDQsMHg4MCwweDQwLDB4MzAsMHg5MCB9fSwKKyB7MTYsIDB4ZGUyMCwgMCwgezB4MDEsMHgxNCwweDAyLDB4NDAsMHgwNCwweDgwLDB4NDAsMHgyMCwweDAwLDB4MDksMHgwNCwweDMyLDB4MDEsMHgwOCwweGEwLDB4MDMgfX0sCisgezE2LCAweGRlMzAsIDAsIHsweDA0LDB4MTAsMHgwOCwweDAwLDB4MjIsMHg0MCwweDAwLDB4MDAsMHgwNCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZTQwLCAwLCB7MHgwMCwweDAwLDB4MzAsMHgwMCwweDEwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGU1MCwgMCwgezB4MDAsMHgxMCwweDgwLDB4MDAsMHhmMCwweDAwLDB4ODAsMHg4MCwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHhmMCwweDEwLDB4YTAgfX0sCisgezE2LCAweGRlNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweGYwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4ODAsMHgwMCwweGNjIH19LAorIHsxNiwgMHhkZTcwLCAwLCB7MHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2MsMHgzYywweDEwLDB4YTAsMHg4MCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGU4MCwgMCwgezB4MDAsMHgwMCwweDEwLDB4OTAsMHg4MCwweGMwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4OTAsMHg4MCwweDgwLDB4MDAgfX0sCisgezE2LCAweGRlOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg5MCwweDgwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg5MCwweDgwIH19LAorIHsxNiwgMHhkZWEwLCAwLCB7MHhlMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDhjLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGViMCwgMCwgezB4MDAsMHgwMCwweDA5LDB4NGQsMHhiMSwweGU5LDB4MDAsMHgyNiwweDQwLDB4MmEsMHg3ZiwweGUzLDB4ZjIsMHg1NCwweDk4LDB4YzAgfX0sCisgezE2LCAweGRlYzAsIDAsIHsweDNmLDB4ZTYsMHg0MCwweDAwLDB4MDEsMHg0MiwweDkxLDB4ZDAsMHhjMCwweDEzLDB4ZTUsMHg4NywweDYzLDB4ODMsMHhiOCwweGNkIH19LAorIHsxNiwgMHhkZWQwLCAwLCB7MHhmOSwweDAwLDB4MjYsMHg3ZiwweDAwLDB4MDAsMHgzNSwweDJlLDB4ZDUsMHgwMywweDQwLDB4M2YsMHhkOSwweGJmLDB4YjEsMHg4MCB9fSwKKyB7MTYsIDB4ZGVlMCwgMCwgezB4MDEsMHhmMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAyLDB4MTYsMHgxNCwweDAwLDB4MWMgfX0sCisgezE2LCAweGRlZjAsIDAsIHsweGE4LDB4M2YsMHg4OCwweDE2LDB4MDAsMHg4MCwweDg0LDB4ODAsMHgzNywweDllLDB4YmEsMHhhMCwweDUwLDB4MTAsMHgwMiwweDEyIH19LAorIHsxNiwgMHhkZjAwLCAwLCB7MHgwMCwweDE3LDB4OTYsMHg5NywweDI2LDB4NTAsMHgxMCwweDEwLDB4ODIsMHg4MCwweDFlLDB4ODAsMHhkZSwweGJlLDB4OTQsMHgxNCB9fSwKKyB7MTYsIDB4ZGYxMCwgMCwgezB4MDIsMHgxMCwweDgwLDB4MTcsMHhiZSwweDgxLDB4OTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGRmMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4YTgsMHg0NCwweDk0LDB4MjgsMHg4MCwweDAwLDB4MDAsMHgwMCwweDA4IH19LAorIHsxNiwgMHhkZjMwLCAwLCB7MHg5NCwweDIxLDB4NDQsMHg1MSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHg4NCwweDQyLDB4NDEsMHgwMSwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZGY0MCwgMCwgezB4MDAsMHgwOCwweGExLDB4NzIsMHgyMywweDQxLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweGI4LDB4MDEsMHg3OCwweDMyLDB4NDAgfX0sCisgezE2LCAweGRmNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwIH19LAorIHsxNiwgMHhkZjYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgzZiwweGY3LDB4ZmUsMHhkNywweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZDcsMHhkZiB9fSwKKyB7MTYsIDB4ZGY3MCwgMCwgezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHg3ZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM3LDB4N2YgfX0sCisgezE2LCAweGRmODAsIDAsIHsweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZjkwLCAwLCB7MHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MWUsMHhmZiwweGRlLDB4NzcsMHhjMCB9fSwKKyB7MTYsIDB4ZGZhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgxZiwweGVmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYgfX0sCisgezE2LCAweGRmYjAsIDAsIHsweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweDdmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhkZmMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCB9fSwKKyB7MTYsIDB4ZGZkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MWYsMHhjZiwweGRmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4YmYgfX0sCisgezE2LCAweGRmZTAsIDAsIHsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhiZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmIH19LAorIHsxNiwgMHhkZmYwLCAwLCB7MHhmZiwweGJmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTAwMCwgMCwgezB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAgfX0sCisgezE2LCAweGUwMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MWYsMHhmZiwweDFmIH19LAorIHsxNiwgMHhlMDIwLCAwLCB7MHg3ZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZiwweGRmLDB4ZmYsMHhjZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTAzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAgfX0sCisgezE2LCAweGUwNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDNmLDB4YmYsMHhhZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmIH19LAorIHsxNiwgMHhlMDUwLCAwLCB7MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2UsMHhkZSwweDdmLDB4ZmYsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHhmZiB9fSwKKyB7MTYsIDB4ZTA2MCwgMCwgezB4ZmYsMHhmNywweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUwNzAsIDAsIHsweDAwLDB4MDAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweDdmLDB4ZmYsMHhmZiwweGMwIH19LAorIHsxNiwgMHhlMDgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4ZmUsMHhiZSB9fSwKKyB7MTYsIDB4ZTA5MCwgMCwgezB4N2YsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2UsMHhmZiwweGQ3LDB4N2YsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUwYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMGIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTBjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUwZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMGUwLCAwLCB7MHgzMCwweDAwLDB4MjAsMHgwMSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDQzLDB4OGUsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTBmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUxMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUxMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTE1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUxNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMTcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUxOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMWEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTFiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUxYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTFlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUxZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMjAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTIxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUyMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMjMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTI0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUyNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMjYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTI3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUyODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMjkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTJhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUyYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMmMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTJkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUyZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMmYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTMwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUzMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMzIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTMzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUzNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMzUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUzNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlMzgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTM5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUzYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlM2IwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTNjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGUzZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlM2UwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU0MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNDEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTQyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU0MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNDQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTQ1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU0NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNDcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTQ4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU0OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNGEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTRiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU0YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNGQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTRlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU0ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTUxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU1MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNTMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTU0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU1NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTU3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU1ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTVhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU1YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTVkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU1ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTYwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU2MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNjIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTYzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU2NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNjUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTY2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU2NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNjgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTY5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU2YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNmIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTZjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU2ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNmUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTZmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU3MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNzEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTcyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU3MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNzQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTc1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU3NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlNzcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTc4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU3OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlN2EwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTdiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU3YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlN2QwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTdlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU3ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlODAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTgxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU4MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlODMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTg0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU4NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlODYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTg3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU4ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlODkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZThhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU4YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOGMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZThkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU4ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOGYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTkwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU5MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTkzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU5NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTk2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU5NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTk5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU5YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTljMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGU5ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlOWUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZTlmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVhMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWEyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVhMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWE1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVhNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYTcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWE4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVhOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYWEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWFiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVhYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWFlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVhZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYjAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWIxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGViMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYjMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWI0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGViNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYjYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWI3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGViODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYjkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWJhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGViYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYmMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWJkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGViZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYmYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWMwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVjMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYzIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWMzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVjNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYzUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWM2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVjNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlYzgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWM5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVjYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlY2IwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWNjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVjZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlY2UwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWNmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVkMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZDEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWQyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVkMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZDQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWQ1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVkNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZDcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWQ4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVkOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZGEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWRiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVkYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZGQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWRlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVkZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWUxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVlMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZTMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWU0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVlNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWU3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVlODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWVhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVlYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWVkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVlZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWYwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVmMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZjIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHgyMCwweDAxLDB4MDIsMHgwMiwweDAwLDB4MDAsMHgzMCwweDAwLDB4NDMsMHg4MCB9fSwKKyB7MTYsIDB4ZWYzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVmNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZjUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWY2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVmNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZjgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWY5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVmYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZmIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWZjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGVmZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhlZmUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZWZmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYwMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMDEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjAyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYwMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMDQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjA1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYwNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMDcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjA4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYwOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMGEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjBiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYwYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMGQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjBlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYwZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYxMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMTMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjE0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYxNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYxODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjFhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYxYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjFkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYxZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjIwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYyMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMjIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjIzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYyNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMjUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjI2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYyNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMjgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjI5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYyYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMmIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjJjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYyZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMmUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjJmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYzMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMzEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjMyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYzMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMzQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjM1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYzNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmMzcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjM4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYzOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmM2EwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjNiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYzYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmM2QwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjNlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGYzZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNDAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjQxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY0MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNDMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjQ0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY0NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNDYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY0ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNDkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjRhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY0YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNGMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjRkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY0ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNGYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjUwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY1MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNTIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjUzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY1NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNTUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjU2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY1NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNTgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjU5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY1YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNWIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjVjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY1ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNWUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjVmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY2MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNjEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjYyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY2MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNjQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjY1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY2NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNjcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjY4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY2OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNmEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjZiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY2YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNmQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjZlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY2ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNzAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjcxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY3MjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNzMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjc0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY3NTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNzYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjc3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY3ODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmNzkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjdhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY3YjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmN2MwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjdkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY3ZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmN2YwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjgwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY4MTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmODIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjgzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY4NDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmODUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjg2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY4NzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmODgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjg5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY4YTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOGIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjhjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY4ZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOGUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjhmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY5MDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOTEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjkyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY5MzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOTQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjk1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY5NjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOTcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4Zjk4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY5OTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOWEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjliMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY5YzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmOWQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZjllMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGY5ZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYTAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmExMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZhMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYTMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmE0MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZhNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYTYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmE3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZhODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYTkwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmFhMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZhYjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYWMwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmFkMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZhZTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYWYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmIwMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZiMTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYjIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmIzMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZiNDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYjUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmI2MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZiNzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYjgwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmI5MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZiYTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYmIwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmJjMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZiZDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYmUwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmJmMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZjMDAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYzEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmMyMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZjMzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYzQwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmM1MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZjNjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmYzcwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmM4MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZjOTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmY2EwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmNiMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZjYzAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmY2QwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmNlMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZjZjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmZDAwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmQxMCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZkMjAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmZDMwLCAwLCB7MHgzMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHg1ZiwweGE3LDB4MzAsMHgwMCwweDgwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMyB9fSwKKyB7MTYsIDB4ZmQ0MCwgMCwgezB4MzAsMHgwMCwweDQwLDB4MGUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfX0sCisgezE2LCAweGZkNTAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwIH19LAorIHsxNiwgMHhmZDYwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MTYsIDB4ZmQ3MCwgMCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDgwLDB4MDEgfX0sCisgezE2LCAweGZkODAsIDAsIHsweDAwLDB4MDAsMHgwMCwweDA1LDB4MzAsMHgwMCwweGEwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHgwMCwweDAxIH19LAorIHsxNiwgMHhmZDkwLCAwLCB7MHgwMCwweDAwLDB4NmIsMHg5NywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7NCwgMHhmZGEwLCAwLCB7MHgwMCwweDAwLDB4MDAsMHgwMCB9fSwKKyB7MCAsIDB4MDAwMCwgMSwgezB9fQorfTsKKy8vIFZFUlNJT049IDEuMC4wLjE5MQorLy8gREFURT0gMjAwMm9jdDI4CitzdGF0aWMgSU5URUxfSEVYX1JFQ09SRCBnX0hleFNwZGlmRnc2MltdID0geworICB7MywweDAwMDAsMCx7MHgwMiwweDQ1LDB4Zjl9fSwKKyB7IDMsMHgwMDAzLDAsezB4MDIsMHgwZiwweGZkfX0sCisgeyAzLDB4MDAwYiwwLHsweDAyLDB4NGQsMHg5Yn19LAorIHsgMywweDAwMTMsMCx7MHgwMiwweDE3LDB4ZmR9fSwKKyB7IDMsMHgwMDFiLDAsezB4MDIsMHg0ZCwweDllfX0sCisgeyAzLDB4MDAyMywwLHsweDAyLDB4NGQsMHg3NX19LAorIHsgMywweDAwMmIsMCx7MHgwMiwweDQ2LDB4Zjd9fSwKKyB7IDMsMHgwMDMzLDAsezB4MDIsMHg0ZCwweDZjfX0sCisgeyAzLDB4MDAzYiwwLHsweDAyLDB4NGQsMHg3Y319LAorIHsgMywweDAwNDMsMCx7MHgwMiwweDQ5LDB4MDB9fSwKKyB7IDMsMHgwMDRiLDAsezB4MDIsMHg0ZCwweDhmfX0sCisgeyAzLDB4MDA1MywwLHsweDAyLDB4NGQsMHg4M319LAorIHsgMywweDAwNWIsMCx7MHgwMiwweDRkLDB4ODl9fSwKKyB7IDMsMHgwMDYzLDAsezB4MDIsMHg0ZCwweDkzfX0sCisgezE2LDB4MDUwMCwwLHsweDEyLDB4MDEsMHgxMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4NDAsMHg2YSwweDA4LDB4MTEsMHgwMSwweDAwLDB4MDEsMHgwMSwweDAyfX0sCisgezE2LDB4MDUxMCwwLHsweDAwLDB4MDEsMHgwOSwweDAyLDB4YWMsMHgwMSwweDAzLDB4MDEsMHgwMCwweDgwLDB4MzIsMHgwOSwweDA0LDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MDUyMCwwLHsweDAxLDB4MDEsMHgwMCwweDAwLDB4MGEsMHgyNCwweDAxLDB4MDAsMHgwMSwweDU2LDB4MDAsMHgwMiwweDAxLDB4MDIsMHgwYywweDI0fX0sCisgezE2LDB4MDUzMCwwLHsweDAyLDB4MDEsMHgwMSwweDAxLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHgyNCwweDA2LDB4MDUsMHgwMSwweDAyfX0sCisgezE2LDB4MDU0MCwwLHsweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDksMHgyNCwweDAzLDB4MDIsMHgwNCwweDAzLDB4MDAsMHgwNSwweDAwfX0sCisgezE2LDB4MDU1MCwwLHsweDBjLDB4MjQsMHgwMiwweDAzLDB4MDUsMHgwMiwweDAwLDB4MDYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE1LDB4MjQsMHgwNiwweDA2fX0sCisgezE2LDB4MDU2MCwwLHsweDAzLDB4MDIsMHgwMCwweDAwLDB4MDMsMHgwMCwweDAzLDB4MDAsMHgwMywweDAwLDB4MDMsMHgwMCwweDAzLDB4MDAsMHgwMywweDAwfX0sCisgezE2LDB4MDU3MCwwLHsweDAwLDB4MDksMHgyNCwweDAzLDB4MDQsMHgwMSwweDAxLDB4MDAsMHgwNiwweDAwLDB4MDksMHgwNCwweDAxLDB4MDAsMHgwMCwweDAxfX0sCisgezE2LDB4MDU4MCwwLHsweDAyLDB4MDAsMHgwMCwweDA5LDB4MDQsMHgwMSwweDAxLDB4MDIsMHgwMSwweDAyLDB4MDAsMHgwMCwweDA3LDB4MjQsMHgwMSwweDAxfX0sCisgezE2LDB4MDU5MCwwLHsweDAwLDB4MDEsMHgwMCwweDExLDB4MjQsMHgwMiwweDAxLDB4MDIsMHgwMiwweDEwLDB4MDMsMHg0NCwweGFjLDB4MDAsMHg4MCwweGJifX0sCisgezE2LDB4MDVhMCwwLHsweDAwLDB4MDAsMHg3NywweDAxLDB4MDksMHgwNSwweDBhLDB4MDUsMHg4NCwweDAxLDB4MDEsMHgwMCwweDhmLDB4MDcsMHgyNSwweDAxfX0sCisgezE2LDB4MDViMCwwLHsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDksMHgwNSwweDhmLDB4MDEsMHgwMywweDAwLDB4MDEsMHgwNSwweDAwLDB4MDksMHgwNCwweDAxfX0sCisgezE2LDB4MDVjMCwwLHsweDAyLDB4MDIsMHgwMSwweDAyLDB4MDAsMHgwMCwweDA3LDB4MjQsMHgwMSwweDAxLDB4MDAsMHgwMSwweDAwLDB4MTEsMHgyNCwweDAyfX0sCisgezE2LDB4MDVkMCwwLHsweDAxLDB4MDIsMHgwMywweDE4LDB4MDMsMHg0NCwweGFjLDB4MDAsMHg4MCwweGJiLDB4MDAsMHgwMCwweDc3LDB4MDEsMHgwOSwweDA1fX0sCisgezE2LDB4MDVlMCwwLHsweDBhLDB4MDUsMHg0NiwweDAyLDB4MDEsMHgwMCwweDhmLDB4MDcsMHgyNSwweDAxLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwOSwweDA1fX0sCisgezE2LDB4MDVmMCwwLHsweDhmLDB4MDEsMHgwMywweDAwLDB4MDEsMHgwNSwweDAwLDB4MDksMHgwNCwweDAyLDB4MDAsMHgwMCwweDAxLDB4MDIsMHgwMCwweDAwfX0sCisgezE2LDB4MDYwMCwwLHsweDA5LDB4MDQsMHgwMiwweDAxLDB4MDEsMHgwMSwweDAyLDB4MDAsMHgwMCwweDA3LDB4MjQsMHgwMSwweDA0LDB4MDAsMHgwMSwweDAwfX0sCisgezE2LDB4MDYxMCwwLHsweDBlLDB4MjQsMHgwMiwweDAxLDB4MDYsMHgwMiwweDEwLDB4MDIsMHg0NCwweGFjLDB4MDAsMHg4MCwweGJiLDB4MDAsMHgwOSwweDA1fX0sCisgezE2LDB4MDYyMCwwLHsweDhjLDB4MDUsMHg0YywweDAyLDB4MDEsMHgwMCwweDAwLDB4MDcsMHgyNSwweDAxLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwOSwweDA0fX0sCisgezE2LDB4MDYzMCwwLHsweDAyLDB4MDIsMHgwMSwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDcsMHgyNCwweDAxLDB4MDQsMHgwMCwweDAxLDB4MDAsMHgwZSwweDI0fX0sCisgezE2LDB4MDY0MCwwLHsweDAyLDB4MDEsMHgwNiwweDAzLDB4MTgsMHgwMiwweDQ0LDB4YWMsMHgwMCwweDgwLDB4YmIsMHgwMCwweDA5LDB4MDUsMHg4YywweDA1fX0sCisgezE2LDB4MDY1MCwwLHsweDcyLDB4MDMsMHgwMSwweDAwLDB4MDAsMHgwNywweDI1LDB4MDEsMHgwMCwweDAyLDB4MDAsMHgwMCwweDA5LDB4MDQsMHgwMiwweDAzfX0sCisgezE2LDB4MDY2MCwwLHsweDAxLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwNywweDI0LDB4MDEsMHgwNCwweDAwLDB4MDEsMHgwMCwweDExLDB4MjQsMHgwMiwweDAxfX0sCisgezE2LDB4MDY3MCwwLHsweDAyLDB4MDIsMHgxMCwweDAzLDB4NDQsMHhhYywweDAwLDB4ODAsMHhiYiwweDAwLDB4MDAsMHg3NywweDAxLDB4MDksMHgwNSwweDhjfX0sCisgezE2LDB4MDY4MCwwLHsweDA1LDB4ODQsMHgwMSwweDAxLDB4MDAsMHgwMCwweDA3LDB4MjUsMHgwMSwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDksMHgwNCwweDAyfX0sCisgezE2LDB4MDY5MCwwLHsweDA0LDB4MDEsMHgwMSwweDAyLDB4MDAsMHgwMCwweDA3LDB4MjQsMHgwMSwweDA0LDB4MDAsMHgwMSwweDAwLDB4MTEsMHgyNCwweDAyfX0sCisgezE2LDB4MDZhMCwwLHsweDAxLDB4MDIsMHgwMywweDE4LDB4MDMsMHg0NCwweGFjLDB4MDAsMHg4MCwweGJiLDB4MDAsMHgwMCwweDc3LDB4MDEsMHgwOSwweDA1fX0sCisgezE2LDB4MDZiMCwwLHsweDhjLDB4MDUsMHg0NiwweDAyLDB4MDEsMHgwMCwweDAwLDB4MDcsMHgyNSwweDAxLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwNCwweDAzfX0sCisgezE2LDB4MDZjMCwwLHsweDA5LDB4MDQsMHgxOCwweDAzLDB4NDUsMHgwMCwweDZkLDB4MDAsMHg2MSwweDAwLDB4NjcsMHgwMCwweDY5LDB4MDAsMHg2MywweDAwfX0sCisgezE2LDB4MDZkMCwwLHsweDIwLDB4MDAsMHg0NywweDAwLDB4NmQsMHgwMCwweDYyLDB4MDAsMHg0OCwweDAwLDB4MjIsMHgwMywweDQ1LDB4MDAsMHg2ZCwweDAwfX0sCisgezE2LDB4MDZlMCwwLHsweDYxLDB4MDAsMHg2NywweDAwLDB4NjksMHgwMCwweDYzLDB4MDAsMHgyMCwweDAwLDB4NDUsMHgwMCwweDRkLDB4MDAsMHg0OSwweDAwfX0sCisgezE2LDB4MDZmMCwwLHsweDIwLDB4MDAsMHgzNiwweDAwLDB4N2MsMHgwMCwweDMyLDB4MDAsMHgyMCwweDAwLDB4NmQsMHgwMCwweDJhLDB4MDMsMHg0MywweDAwfX0sCisgezE2LDB4MDcwMCwwLHsweDZmLDB4MDAsMHg2ZSwweDAwLDB4NjYsMHgwMCwweDY5LDB4MDAsMHg2NywweDAwLDB4NzUsMHgwMCwweDcyLDB4MDAsMHg2MSwweDAwfX0sCisgezE2LDB4MDcxMCwwLHsweDc0LDB4MDAsMHg2OSwweDAwLDB4NmYsMHgwMCwweDZlLDB4MDAsMHgyMCwweDAwLDB4NTMsMHgwMCwweDc0LDB4MDAsMHg3MiwweDAwfX0sCisgezE2LDB4MDcyMCwwLHsweDY5LDB4MDAsMHg2ZSwweDAwLDB4NjcsMHgwMCwweDIyLDB4MDMsMHg0OSwweDAwLDB4NmUsMHgwMCwweDc0LDB4MDAsMHg2NSwweDAwfX0sCisgezE2LDB4MDczMCwwLHsweDcyLDB4MDAsMHg2NiwweDAwLDB4NjEsMHgwMCwweDYzLDB4MDAsMHg2NSwweDAwLDB4MjAsMHgwMCwweDUzLDB4MDAsMHg3NCwweDAwfX0sCisgezEwLDB4MDc0MCwwLHsweDcyLDB4MDAsMHg2OSwweDAwLDB4NmUsMHgwMCwweDY3LDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MDc0YSwwLHsweDkwLDB4NzYsMHg5YSwweDc0LDB4MDIsMHhmMCwweGU0LDB4OTAsMHg3NiwweDkxLDB4ZjAsMHhhMywweGYwLDB4OTAsMHg3NiwweDkwfX0sCisgezE2LDB4MDc1YSwwLHsweGYwLDB4OTAsMHg3NiwweDkzLDB4ZjAsMHg5MCwweDc2LDB4OTYsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDgwLDB4MDMsMHhmMCwweGU0fX0sCisgezE2LDB4MDc2YSwwLHsweDkwLDB4NzYsMHg5NywweGYwLDB4OTAsMHg4MCwweDAyLDB4ZjAsMHg5MCwweDc2LDB4OTQsMHgwNCwweGYwLDB4OTAsMHg4MCwweDAwfX0sCisgezE2LDB4MDc3YSwwLHsweGYwLDB4ZTQsMHg5MCwweDc2LDB4OGUsMHhmMCwweDkwLDB4NzYsMHgxYSwweGYwLDB4OTAsMHg3NiwweDk1LDB4MDQsMHhmMCwweGMyfX0sCisgezE2LDB4MDc4YSwwLHsweDJlLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHhmZiwweDU0LDB4MTAsMHhmZiwweDcwLDB4MDIsMHhjMiwweDNmLDB4OTAsMHg3ZiwweDlifX0sCisgezE2LDB4MDc5YSwwLHsweGUwLDB4ZmYsMHg1NCwweDEwLDB4ZmUsMHhmZiwweGJlLDB4MTAsMHgwMiwweGQyLDB4M2YsMHg5MCwweDdmLDB4OWIsMHhlMCwweGZmfX0sCisgezE2LDB4MDdhYSwwLHsweDU0LDB4MjAsMHhmZiwweDcwLDB4MDIsMHhjMiwweDNlLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHhmZiwweDU0LDB4MjAsMHhmZSwweGZmfX0sCisgezE2LDB4MDdiYSwwLHsweGJlLDB4MjAsMHgwMiwweGQyLDB4M2UsMHgzMCwweDNmLDB4MDksMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwfX0sCisgezE2LDB4MDdjYSwwLHsweDA3LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDkwLDB4ODAsMHgwMiwweGYwfX0sCisgezE2LDB4MDdkYSwwLHsweDMwLDB4M2UsMHgwOSwweDkwLDB4NzYsMHg5NSwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODAsMHgwNywweDkwLDB4NzYsMHg5NSwweGUwfX0sCisgezE2LDB4MDdlYSwwLHsweDU0LDB4ZmIsMHhmMCwweDkwLDB4NzYsMHg5NSwweGUwLDB4OTAsMHg4MCwweDAxLDB4ZjAsMHhhMiwweDNlLDB4OTIsMHg0MCwweGEyfX0sCisgeyAzLDB4MDdmYSwwLHsweDNmLDB4OTIsMHg0MX19LAorIHsgMSwweDA3ZmQsMCx7MHgyMn19LAorIHsgMiwweDA3ZmUsMCx7MHhkMywweDIyfX0sCisgezE2LDB4MDgwMCwwLHsweGU0LDB4OTAsMHg3NiwweDMxLDB4ZjAsMHg5MCwweDc2LDB4MzEsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBmfX0sCisgezE2LDB4MDgxMCwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4N2YsMHhlZCwweGUwLDB4ZmQsMHhlZSwweDZkfX0sCisgezE2LDB4MDgyMCwwLHsweDYwLDB4MGUsMHhlZiwweGMzLDB4OTQsMHgwYiwweDUwLDB4MDgsMHg5MCwweDc2LDB4MzEsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGQ1fX0sCisgezE2LDB4MDgzMCwwLHsweGVmLDB4YjQsMHgwYiwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweGVmLDB4NzUsMHhmMCwweDAzfX0sCisgezE2LDB4MDg0MCwwLHsweGE0LDB4MjQsMHgwZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDc2LDB4MzMsMHhmMCwweDI0fX0sCisgezE2LDB4MDg1MCwwLHsweGYwLDB4NjAsMHgwYSwweDI0LDB4MGUsMHg2MCwweDAyLDB4ODEsMHg4NywweDEyLDB4NGIsMHgzZSwweDIyLDB4OTAsMHg3ZiwweGVkfX0sCisgezE2LDB4MDg2MCwwLHsweGUwLDB4NjQsMHgwNSwweDcwLDB4NTEsMHg5MCwweDc2LDB4MTgsMHg3NCwweDA1LDB4ZjAsMHg5MCwweDc2LDB4MzcsMHg3NCwweDAxfX0sCisgezE2LDB4MDg3MCwwLHsweGYwLDB4OTAsMHg3NiwweDM5LDB4NzQsMHgwMywweGYwLDB4OTAsMHg3NiwweDIxLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHgyMCwweGYwfX0sCisgezE2LDB4MDg4MCwwLHsweDkwLDB4N2YsMHhlYSwweGUwLDB4ZjQsMHg2MCwweDJmLDB4OTAsMHg3NiwweDIwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0fX0sCisgezE2LDB4MDg5MCwwLHsweDI0LDB4YWEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGZkfX0sCisgezE2LDB4MDhhMCwwLHsweGVlLDB4NmQsMHg2MCwweDEyLDB4OTAsMHg3NiwweDIxLDB4ZTAsMHhmZSwweGVmLDB4YzMsMHg5ZSwweDUwLDB4MDgsMHg5MCwweDc2fX0sCisgezE2LDB4MDhiMCwwLHsweDIwLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhkMSwweDkwLDB4N2YsMHhlZCwweGUwLDB4NjQsMHgwNiwweDcwLDB4NTIsMHg5MCwweDc2fX0sCisgezE2LDB4MDhjMCwwLHsweDE4LDB4NzQsMHgwNiwweGYwLDB4OTAsMHg3NiwweDM3LDB4NzQsMHgwNCwweGYwLDB4OTAsMHg3NiwweDM5LDB4NzQsMHgwYSwweGYwfX0sCisgezE2LDB4MDhkMCwwLHsweDkwLDB4NzYsMHgyMSwweGYwLDB4OTAsMHg3NiwweDIwLDB4NzQsMHgwMywweGYwLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmNCwweDYwfX0sCisgezE2LDB4MDhlMCwwLHsweDJmLDB4OTAsMHg3NiwweDIwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYSwweGY1LDB4ODIsMHhlNCwweDM0fX0sCisgezE2LDB4MDhmMCwwLHsweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGZkLDB4ZWUsMHg2ZCwweDYwLDB4MTIsMHg5MCwweDc2fX0sCisgezE2LDB4MDkwMCwwLHsweDIxLDB4ZTAsMHhmZSwweGVmLDB4YzMsMHg5ZSwweDUwLDB4MDgsMHg5MCwweDc2LDB4MjAsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGQxfX0sCisgezE2LDB4MDkxMCwwLHsweDkwLDB4NzYsMHgyMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1fX0sCisgezE2LDB4MDkyMCwwLHsweGY1LDB4ODMsMHhlMCwweDkwLDB4NzIsMHgyOSwweGYwLDB4ZTQsMHg5MCwweDc2LDB4M2IsMHhmMCwweDkwLDB4NzYsMHgyMSwweGUwfX0sCisgezE2LDB4MDkzMCwwLHsweGZlLDB4ZWYsMHg2ZSwweDcwLDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGVifX0sCisgezE2LDB4MDk0MCwwLHsweGUwLDB4MTQsMHg2MCwweDEzLDB4MTQsMHg3MCwweDAyLDB4MjEsMHhlMiwweDI0LDB4MDIsMHg2MCwweDAyLDB4ODEsMHg3ZiwweDkwfX0sCisgezE2LDB4MDk1MCwwLHsweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgxNCwweDcwLDB4N2MsMHg5MCwweDdmfX0sCisgezE2LDB4MDk2MCwwLHsweGVhLDB4ZTAsMHhmNCwweDcwLDB4NDgsMHg5MCwweDc2LDB4MzcsMHhlMCwweDkwLDB4NzYsMHgyMCwweGYwLDB4OTAsMHg3NiwweDM5fX0sCisgezE2LDB4MDk3MCwwLHsweGUwLDB4ZmUsMHg5MCwweDc2LDB4MjAsMHhlMCwweGZkLDB4YzMsMHg5ZSwweDUwLDB4MmIsMHg5MCwweDc2LDB4M2IsMHhlMCwweGZlfX0sCisgezE2LDB4MDk4MCwwLHsweDA0LDB4ZjAsMHg3NCwweGMwLDB4MmUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdlLDB4ZjUsMHg4MywweGUwLDB4ZmUsMHhlZCwweDc1fX0sCisgezE2LDB4MDk5MCwwLHsweGYwLDB4MGEsMHhhNCwweDI0LDB4YWIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVlLDB4ZjAsMHg5MCwweDc2fX0sCisgezE2LDB4MDlhMCwwLHsweDIwLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhjNywweDkwLDB4NzYsMHgzZiwweDc0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZSwweGMwfX0sCisgezE2LDB4MDliMCwwLHsweGUwLDB4ZmUsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzfX0sCisgezE2LDB4MDljMCwwLHsweGVlLDB4ZjAsMHhlMCwweGI0LDB4MDEsMHgwOCwweDkwLDB4NzYsMHgzZSwweDc0LDB4MDEsMHhmMCwweDgwLDB4MDUsMHhlNCwweDkwfX0sCisgezE2LDB4MDlkMCwwLHsweDc2LDB4M2UsMHhmMCwweDkwLDB4NzYsMHgzZiwweDc0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxfX0sCisgezE2LDB4MDllMCwwLHsweGYwLDB4MjIsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4ZmUsMHg3MCwweDAyLDB4NDEsMHhhMywweDE0LDB4NzAsMHgwMiwweDYxfX0sCisgezE2LDB4MDlmMCwwLHsweDNmLDB4MTQsMHg3MCwweDAyLDB4NjEsMHhkYiwweDI0LDB4MDMsMHg2MCwweDAyLDB4ODEsMHg3NywweDkwLDB4N2YsMHhlYSwweGUwfX0sCisgezE2LDB4MGEwMCwwLHsweGY0LDB4NzAsMHg2YiwweDkwLDB4NzYsMHgzNywweGUwLDB4OTAsMHg3NiwweDIwLDB4ZjAsMHg5MCwweDc2LDB4MzksMHhlMCwweGZmfX0sCisgezE2LDB4MGExMCwwLHsweDkwLDB4NzYsMHgyMCwweGUwLDB4ZmUsMHhjMywweDlmLDB4NTAsMHg0ZSwweDkwLDB4NzYsMHgzYiwweGUwLDB4ZmYsMHgwNCwweGYwfX0sCisgezE2LDB4MGEyMCwwLHsweDc0LDB4YzAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2UsMHhmNSwweDgzLDB4ZTAsMHhmZiwweGVlLDB4NzUsMHhmMCwweDBhfX0sCisgezE2LDB4MGEzMCwwLHsweGE0LDB4MjQsMHhhYywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHgzYiwweGUwfX0sCisgezE2LDB4MGE0MCwwLHsweGZmLDB4MDQsMHhmMCwweDc0LDB4YzAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2UsMHhmNSwweDgzLDB4ZTAsMHhmZiwweGVlfX0sCisgezE2LDB4MGE1MCwwLHsweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwfX0sCisgezE2LDB4MGE2MCwwLHsweDc2LDB4MjAsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGE0LDB4OTAsMHg3NiwweDQwLDB4NzQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdlfX0sCisgezE2LDB4MGE3MCwwLHsweGMwLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgyMCwweGUwLDB4ZmUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWMsMHhmNSwweDgyfX0sCisgezE2LDB4MGE4MCwwLHsweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3ZSwweGMxLDB4ZTAsMHhmZiwweGVlLDB4NzUsMHhmMCwweDBhfX0sCisgezE2LDB4MGE5MCwwLHsweGE0LDB4MjQsMHhhZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHg0MSwweDc0fX0sCisgezE2LDB4MGFhMCwwLHsweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZjQsMHg3MCwweDY2LDB4OTAsMHg3NiwweDM3LDB4ZTAsMHg5MCwweDc2fX0sCisgezE2LDB4MGFiMCwwLHsweDIwLDB4ZjAsMHg5MCwweDc2LDB4MzksMHhlMCwweGZmLDB4OTAsMHg3NiwweDIwLDB4ZTAsMHhmZSwweGMzLDB4OWYsMHg0MCwweDAyfX0sCisgezE2LDB4MGFjMCwwLHsweDgxLDB4OGUsMHg5MCwweDc2LDB4M2IsMHhlMCwweGZmLDB4MDQsMHhmMCwweDc0LDB4YzAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0fX0sCisgezE2LDB4MGFkMCwwLHsweDdlLDB4ZjUsMHg4MywweGUwLDB4ZmYsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZSwweGY1LDB4ODIsMHhlNCwweDM0fX0sCisgezE2LDB4MGFlMCwwLHsweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4M2IsMHhlMCwweGZmLDB4MDQsMHhmMCwweDc0LDB4YzAsMHgyZiwweGY1fX0sCisgezE2LDB4MGFmMCwwLHsweDgyLDB4ZTQsMHgzNCwweDdlLDB4ZjUsMHg4MywweGUwLDB4ZmYsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZiwweGY1fX0sCisgezE2LDB4MGIwMCwwLHsweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDc2LDB4MjAsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGEyfX0sCisgezE2LDB4MGIxMCwwLHsweDkwLDB4N2UsMHhjMCwweGUwLDB4ZmYsMHg5MCwweDc2LDB4MjAsMHhlMCwweGZlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFlfX0sCisgezE2LDB4MGIyMCwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4N2UsMHhjMSwweGUwLDB4ZmYsMHhlZSwweDc1fX0sCisgezE2LDB4MGIzMCwwLHsweGYwLDB4MGEsMHhhNCwweDI0LDB4YWYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHgyMiwweDkwfX0sCisgezE2LDB4MGI0MCwwLHsweDdmLDB4ZWEsMHhlMCwweGY0LDB4NzAsMHg2NiwweDkwLDB4NzYsMHgzNywweGUwLDB4OTAsMHg3NiwweDIwLDB4ZjAsMHg5MCwweDc2fX0sCisgezE2LDB4MGI1MCwwLHsweDM5LDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgyMCwweGUwLDB4ZmUsMHhjMywweDlmLDB4NDAsMHgwMiwweDgxLDB4OGUsMHg5MCwweDc2fX0sCisgezE2LDB4MGI2MCwwLHsweDNiLDB4ZTAsMHhmZiwweDA0LDB4ZjAsMHg3NCwweGMwLDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdlLDB4ZjUsMHg4MywweGUwfX0sCisgezE2LDB4MGI3MCwwLHsweGZmLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmfX0sCisgezE2LDB4MGI4MCwwLHsweGYwLDB4OTAsMHg3NiwweDNiLDB4ZTAsMHhmZiwweDA0LDB4ZjAsMHg3NCwweGMwLDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdlfX0sCisgezE2LDB4MGI5MCwwLHsweGY1LDB4ODMsMHhlMCwweGZmLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1fX0sCisgezE2LDB4MGJhMCwwLHsweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDIwLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhhMiwweDkwLDB4N2UsMHhjMCwweGUwfX0sCisgezE2LDB4MGJiMCwwLHsweGZmLDB4OTAsMHg3NiwweDIwLDB4ZTAsMHhmZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMCwweGY1LDB4ODIsMHhlNCwweDM0fX0sCisgezE2LDB4MGJjMCwwLHsweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHg5MCwweDdlLDB4YzEsMHhlMCwweGZmLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0fX0sCisgezE2LDB4MGJkMCwwLHsweGIxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGY0fX0sCisgezE2LDB4MGJlMCwwLHsweDcwLDB4NjYsMHg5MCwweDc2LDB4MzcsMHhlMCwweDkwLDB4NzYsMHgyMCwweGYwLDB4OTAsMHg3NiwweDM5LDB4ZTAsMHhmZiwweDkwfX0sCisgezE2LDB4MGJmMCwwLHsweDc2LDB4MjAsMHhlMCwweGZlLDB4YzMsMHg5ZiwweDQwLDB4MDIsMHg4MSwweDhlLDB4OTAsMHg3NiwweDNiLDB4ZTAsMHhmZiwweDA0fX0sCisgezE2LDB4MGMwMCwwLHsweGYwLDB4NzQsMHhjMCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZSwweGY1LDB4ODMsMHhlMCwweGZmLDB4ZWUsMHg3NSwweGYwfX0sCisgezE2LDB4MGMxMCwwLHsweDBhLDB4YTQsMHgyNCwweGIyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDNifX0sCisgezE2LDB4MGMyMCwwLHsweGUwLDB4ZmYsMHgwNCwweGYwLDB4NzQsMHhjMCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZSwweGY1LDB4ODMsMHhlMCwweGZmfX0sCisgezE2LDB4MGMzMCwwLHsweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIzLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZiwweGYwfX0sCisgezE2LDB4MGM0MCwwLHsweDkwLDB4NzYsMHgyMCwweGUwLDB4MDQsMHhmMCwweDgwLDB4YTIsMHg5MCwweDdlLDB4YzAsMHhlMCwweGZmLDB4OTAsMHg3NiwweDIwfX0sCisgezE2LDB4MGM1MCwwLHsweGUwLDB4ZmUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmfX0sCisgezE2LDB4MGM2MCwwLHsweGYwLDB4OTAsMHg3ZSwweGMxLDB4ZTAsMHhmZiwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIzLDB4ZjUsMHg4MiwweGU0fX0sCisgezE2LDB4MGM3MCwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwfX0sCisgezE1LDB4MGM4MCwwLHsweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMn19LAorIHsxNiwweDBjOGYsMCx7MHg0MSwweDc2LDB4NjgsMHgwMSwweDQxLDB4NzYsMHg2YSwweDAyLDB4NDEsMHg3NiwweDZiLDB4MGEsMHhjMSwweDIwLDB4YzEsMHgyMX19LAorIHsgMiwweDBjOWYsMCx7MHhjMSwweDJmfX0sCisgeyA0LDB4MGNhMSwwLHsweDQxLDB4NzYsMHgyMywweDAwfX0sCisgezE2LDB4MGNhNSwwLHsweDQxLDB4NzIsMHgwMSwweDAxLDB4NDUsMHg3MiwweDA1LDB4MDAsMHgwMiwweGM5LDB4MDAsMHgwMCwweDQ1LDB4NzIsMHgwYSwweDAwfX0sCisgezE2LDB4MGNiNSwwLHsweDAxLDB4MDIsMHgwMywweDA0LDB4NGQsMHg3MiwweDBmLDB4ZDEsMHgwMCwweGQxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MGNjNSwwLHsweDI4LDB4MjgsMHgwOSwweDAwLDB4NGQsMHg3MiwweDFjLDB4MDEsMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3fX0sCisgezE2LDB4MGNkNSwwLHsweDA4LDB4MDksMHgwYSwweDBiLDB4NDEsMHg3MiwweDJlLDB4MjIsMHg0MSwweDcyLDB4MmYsMHgyMywweDQxLDB4NzIsMHgzMCwweDIwfX0sCisgezE2LDB4MGNlNSwwLHsweDQxLDB4NzIsMHgzMSwweDIxLDB4NjIsMHhkMiwweDcyLDB4M2EsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MGNmNSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MGQwNSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MGQxNSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MGQyNSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MGQzNSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MGQ0NSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MGQ1NSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MGQ2NSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MGQ3NSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxfX0sCisgezE2LDB4MGQ4NSwwLHsweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxfX0sCisgezE2LDB4MGQ5NSwwLHsweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxfX0sCisgezE2LDB4MGRhNSwwLHsweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxfX0sCisgezE2LDB4MGRiNSwwLHsweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyfX0sCisgezE2LDB4MGRjNSwwLHsweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyfX0sCisgezE2LDB4MGRkNSwwLHsweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyfX0sCisgezE2LDB4MGRlNSwwLHsweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyfX0sCisgezE2LDB4MGRmNSwwLHsweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzfX0sCisgezE2LDB4MGUwNSwwLHsweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzfX0sCisgezE2LDB4MGUxNSwwLHsweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzfX0sCisgezE2LDB4MGUyNSwwLHsweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzLDB4MDMsMHgwMywweDAzfX0sCisgezE2LDB4MGUzNSwwLHsweDAzLDB4MDMsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0fX0sCisgezE2LDB4MGU0NSwwLHsweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0fX0sCisgezE2LDB4MGU1NSwwLHsweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0fX0sCisgezE2LDB4MGU2NSwwLHsweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0fX0sCisgezE2LDB4MGU3NSwwLHsweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1fX0sCisgezE2LDB4MGU4NSwwLHsweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1fX0sCisgezE2LDB4MGU5NSwwLHsweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1fX0sCisgezE2LDB4MGVhNSwwLHsweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNSwweDA1LDB4MDUsMHgwNiwweDA2fX0sCisgezE2LDB4MGViNSwwLHsweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2fX0sCisgezE2LDB4MGVjNSwwLHsweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2fX0sCisgezE2LDB4MGVkNSwwLHsweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2fX0sCisgezE2LDB4MGVlNSwwLHsweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNywweDA3LDB4MDcsMHgwOCwweDA4fX0sCisgezE2LDB4MGVmNSwwLHsweDA4LDB4MDksMHgwOSwweDA5LDB4MGEsMHgwYSwweDBhLDB4MGIsMHgwYiwweDBiLDB4MGMsMHgwYywweDBjLDB4MGQsMHgwZCwweDBkfX0sCisgezE2LDB4MGYwNSwwLHsweDBlLDB4MGUsMHgwZSwweDBmLDB4MGYsMHgwZiwweDEwLDB4MTAsMHgxMCwweDExLDB4MTEsMHgxMSwweDEyLDB4MTIsMHgxMiwweDEzfX0sCisgezE2LDB4MGYxNSwwLHsweDEzLDB4MTMsMHgxNCwweDE0LDB4MTQsMHgxNSwweDE1LDB4MTUsMHgxNiwweDE2LDB4MTYsMHgxNywweDE3LDB4MTcsMHgxOCwweDE4fX0sCisgezE2LDB4MGYyNSwwLHsweDE4LDB4MTksMHgxOSwweDE5LDB4MTksMHgxYSwweDFhLDB4MWEsMHgxYSwweDFiLDB4MWIsMHgxYiwweDFiLDB4MWMsMHgxYywweDFjfX0sCisgezE2LDB4MGYzNSwwLHsweDFjLDB4MWQsMHgxZCwweDFkLDB4MWQsMHgxZSwweDFlLDB4MWUsMHgxZSwweDFmLDB4MWYsMHgxZiwweDFmLDB4MjAsMHgyMCwweDIwfX0sCisgezE2LDB4MGY0NSwwLHsweDIxLDB4MjEsMHgyMSwweDIyLDB4MjIsMHgyMiwweDIzLDB4MjMsMHgyNCwweDI0LDB4MjUsMHgyNSwweDI2LDB4MjYsMHgyNywweDI3fX0sCisgezE2LDB4MGY1NSwwLHsweDI4LDB4MjgsMHgyOSwweDI5LDB4MmEsMHgyYSwweDJiLDB4MmIsMHgyYywweDJjLDB4MmQsMHgyZCwweDJlLDB4MmUsMHgyZiwweDJmfX0sCisgezE2LDB4MGY2NSwwLHsweDMwLDB4MzAsMHgzMSwweDMxLDB4MzIsMHgzMiwweDMzLDB4MzMsMHgzNCwweDM0LDB4MzUsMHgzNSwweDM2LDB4MzYsMHgzNywweDM3fX0sCisgezE2LDB4MGY3NSwwLHsweDM4LDB4MzgsMHgzOSwweDM5LDB4M2EsMHgzYSwweDNiLDB4M2MsMHgzZCwweDNlLDB4M2YsMHg0MCwweDQxLDB4NDIsMHg0MywweDQ0fX0sCisgezE2LDB4MGY4NSwwLHsweDQ1LDB4NDYsMHg0NywweDQ4LDB4NDksMHg0OSwweDRhLDB4NGIsMHg0YiwweDRjLDB4NGQsMHg0ZSwweDRmLDB4NTAsMHg1MSwweDUyfX0sCisgezE2LDB4MGY5NSwwLHsweDUzLDB4NTQsMHg1NSwweDU1LDB4NTYsMHg1NiwweDU3LDB4NTcsMHg1OCwweDVhLDB4NWIsMHg1ZCwweDVlLDB4NWYsMHg2MSwweDYyfX0sCisgezE2LDB4MGZhNSwwLHsweDYzLDB4NjQsMHg2NSwweDY2LDB4NjcsMHg2OCwweDY5LDB4NmEsMHg2YiwweDZjLDB4NmQsMHg2ZiwweDcxLDB4NzIsMHg3MywweDc0fX0sCisgezE2LDB4MGZiNSwwLHsweDc1LDB4NzYsMHg3NywweDc4LDB4NzksMHg3YSwweDdiLDB4N2MsMHg3ZSwweDgwLDB4MDEsMHgzNywweDAxLDB4MDEsMHgzOCwweDAwfX0sCisgeyAxLDB4MGZjNSwwLHsweDAwfX0sCisgezE2LDB4MGZjNiwwLHsweGU0LDB4ZmYsMHg3NCwweDQ2LDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc2LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg3NCwweDIwfX0sCisgezE2LDB4MGZkNiwwLHsweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlZSwweGYwLDB4NzQsMHg0ZSwweDJmLDB4ZjUsMHg4MiwweGU0fX0sCisgezE2LDB4MGZlNiwwLHsweDM0LDB4NzYsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDc0LDB4MzAsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzfX0sCisgeyA2LDB4MGZmNiwwLHsweGVlLDB4ZjAsMHgwZiwweGJmLDB4MDgsMHhjY319LAorIHsgMSwweDBmZmMsMCx7MHgyMn19LAorIHsgMywweDBmZmQsMCx7MHhjMiwweDg5LDB4MzJ9fSwKKyB7MTYsMHgxMDAwLDAsezB4ZTQsMHg5MCwweDc2LDB4MmMsMHhmMCwweDkwLDB4NzYsMHgyYywweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGZ9fSwKKyB7MTYsMHgxMDEwLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3ZiwweGVkLDB4ZTAsMHhmZCwweGVlLDB4NmR9fSwKKyB7MTYsMHgxMDIwLDAsezB4NjAsMHgwZSwweGVmLDB4YzMsMHg5NCwweDBiLDB4NTAsMHgwOCwweDkwLDB4NzYsMHgyYywweGUwLDB4MDQsMHhmMCwweDgwLDB4ZDV9fSwKKyB7MTYsMHgxMDMwLDAsezB4ZWYsMHhiNCwweDBiLDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4ZWYsMHg3NSwweGYwLDB4MDN9fSwKKyB7MTYsMHgxMDQwLDAsezB4YTQsMHgyNCwweDBlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4NzYsMHgyZSwweGYwLDB4MjR9fSwKKyB7MTYsMHgxMDUwLDAsezB4ZjAsMHg2MCwweDBhLDB4MjQsMHgwZiwweDYwLDB4MDIsMHg4MSwweDdkLDB4MTIsMHg0YiwweDFiLDB4MjIsMHg5MCwweDdmLDB4ZWR9fSwKKyB7MTYsMHgxMDYwLDAsezB4ZTAsMHg2NCwweDA1LDB4NzAsMHg1MSwweDkwLDB4NzYsMHgxOCwweDc0LDB4MDUsMHhmMCwweDkwLDB4NzYsMHgzOCwweDc0LDB4MDF9fSwKKyB7MTYsMHgxMDcwLDAsezB4ZjAsMHg5MCwweDc2LDB4M2EsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDc2LDB4MWMsMHhmMCwweGU0LDB4OTAsMHg3NiwweDFiLDB4ZjB9fSwKKyB7MTYsMHgxMDgwLDAsezB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmNCwweDYwLDB4MmYsMHg5MCwweDc2LDB4MWIsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTR9fSwKKyB7MTYsMHgxMDkwLDAsezB4MjQsMHhhYSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmR9fSwKKyB7MTYsMHgxMGEwLDAsezB4ZWUsMHg2ZCwweDYwLDB4MTIsMHg5MCwweDc2LDB4MWMsMHhlMCwweGZlLDB4ZWYsMHhjMywweDllLDB4NTAsMHgwOCwweDkwLDB4NzZ9fSwKKyB7MTYsMHgxMGIwLDAsezB4MWIsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGQxLDB4OTAsMHg3ZiwweGVkLDB4ZTAsMHg2NCwweDA2LDB4NzAsMHg1MiwweDkwLDB4NzZ9fSwKKyB7MTYsMHgxMGMwLDAsezB4MTgsMHg3NCwweDA2LDB4ZjAsMHg5MCwweDc2LDB4MzgsMHg3NCwweDA0LDB4ZjAsMHg5MCwweDc2LDB4M2EsMHg3NCwweDBhLDB4ZjB9fSwKKyB7MTYsMHgxMGQwLDAsezB4OTAsMHg3NiwweDFjLDB4ZjAsMHg5MCwweDc2LDB4MWIsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGY0LDB4NjB9fSwKKyB7MTYsMHgxMGUwLDAsezB4MmYsMHg5MCwweDc2LDB4MWIsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFhLDB4ZjUsMHg4MiwweGU0LDB4MzR9fSwKKyB7MTYsMHgxMGYwLDAsezB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZmQsMHhlZSwweDZkLDB4NjAsMHgxMiwweDkwLDB4NzZ9fSwKKyB7MTYsMHgxMTAwLDAsezB4MWMsMHhlMCwweGZlLDB4ZWYsMHhjMywweDllLDB4NTAsMHgwOCwweDkwLDB4NzYsMHgxYiwweGUwLDB4MDQsMHhmMCwweDgwLDB4ZDF9fSwKKyB7MTYsMHgxMTEwLDAsezB4ZTQsMHg5MCwweDc2LDB4MWUsMHhmMCwweDkwLDB4NzYsMHgxYywweGUwLDB4ZmYsMHg5MCwweDc2LDB4MWIsMHhlMCwweGZlLDB4NmZ9fSwKKyB7MTYsMHgxMTIwLDAsezB4NzAsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZWIsMHhlMCwweDE0LDB4NjB9fSwKKyB7MTYsMHgxMTMwLDAsezB4MTMsMHgxNCwweDcwLDB4MDIsMHgyMSwweGJmLDB4MjQsMHgwMiwweDYwLDB4MDIsMHg4MSwweDc1LDB4OTAsMHg3ZiwweGI0LDB4ZTB9fSwKKyB7MTYsMHgxMTQwLDAsezB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4N2YsMHg3MCwweDZiLDB4OTAsMHg3ZiwweGVhLDB4ZTB9fSwKKyB7MTYsMHgxMTUwLDAsezB4ZjQsMHg3MCwweDRhLDB4OTAsMHg3NiwweDM4LDB4ZTAsMHg5MCwweDc2LDB4MWIsMHhmMCwweDkwLDB4NzYsMHgzYSwweGUwLDB4ZmZ9fSwKKyB7MTYsMHgxMTYwLDAsezB4OTAsMHg3NiwweDFiLDB4ZTAsMHhmZCwweGMzLDB4OWYsMHg1MCwweDJiLDB4ZWQsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWJ9fSwKKyB7MTYsMHgxMTcwLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZmLDB4OTAsMHg3NiwweDFlLDB4ZTAsMHhmZCwweDA0LDB4ZjB9fSwKKyB7MTYsMHgxMTgwLDAsezB4NzQsMHgwMCwweDJkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDFiLDB4ZTB9fSwKKyB7MTYsMHgxMTkwLDAsezB4MDQsMHhmMCwweDgwLDB4YzcsMHg5MCwweDc2LDB4MWUsMHhlMCwweDkwLDB4N2YsMHhiNSwweGYwLDB4MjIsMHhlZSwweDc1LDB4ZjB9fSwKKyB7MTYsMHgxMWEwLDAsezB4MGEsMHhhNCwweDI0LDB4YWIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweDAwLDB4ZjB9fSwKKyB7MTYsMHgxMWIwLDAsezB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTB9fSwKKyB7MTYsMHgxMWMwLDAsezB4N2YsMHhlOSwweGUwLDB4MjQsMHg3ZSwweDcwLDB4MDIsMHg0MSwweDdlLDB4MTQsMHg3MCwweDAyLDB4NjEsMHgyMywweDE0LDB4NzB9fSwKKyB7MTYsMHgxMWQwLDAsezB4MDIsMHg2MSwweGM4LDB4MjQsMHgwMywweDYwLDB4MDIsMHg4MSwweDZkLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmNCwweDcwLDB4NmR9fSwKKyB7MTYsMHgxMWUwLDAsezB4OTAsMHg3NiwweDM4LDB4ZTAsMHg5MCwweDc2LDB4MWIsMHhmMCwweDkwLDB4NzYsMHgzYSwweGUwLDB4ZmYsMHg5MCwweDc2LDB4MWJ9fSwKKyB7MTYsMHgxMWYwLDAsezB4ZTAsMHhjMywweDlmLDB4NTAsMHg0ZiwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWMsMHhmNSwweDgyLDB4ZTR9fSwKKyB7MTYsMHgxMjAwLDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3NiwweDFlLDB4ZTAsMHhmZCwweDA0LDB4ZjAsMHg3NCwweDAwLDB4MmR9fSwKKyB7MTYsMHgxMjEwLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZSwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWR9fSwKKyB7MTYsMHgxMjIwLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZmLDB4OTAsMHg3NiwweDFlLDB4ZTAsMHhmZSwweDA0LDB4ZjB9fSwKKyB7MTYsMHgxMjMwLDAsezB4NzQsMHgwMCwweDJlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDFiLDB4ZTB9fSwKKyB7MTYsMHgxMjQwLDAsezB4MDQsMHhmMCwweDgwLDB4YTQsMHg5MCwweDc2LDB4MWUsMHhlMCwweDkwLDB4N2YsMHhiNSwweGYwLDB4MjIsMHg5MCwweDc2LDB4MWJ9fSwKKyB7MTYsMHgxMjUwLDAsezB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTB9fSwKKyB7MTYsMHgxMjYwLDAsezB4OTAsMHg3ZiwweDAwLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzV9fSwKKyB7MTYsMHgxMjcwLDAsezB4ZjUsMHg4MywweGUwLDB4OTAsMHg3ZiwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAyLDB4ZjAsMHgyMiwweDkwLDB4N2Z9fSwKKyB7MTYsMHgxMjgwLDAsezB4ZWEsMHhlMCwweGY0LDB4NzAsMHg2ZCwweDkwLDB4NzYsMHgzOCwweGUwLDB4OTAsMHg3NiwweDFiLDB4ZjAsMHg5MCwweDc2LDB4M2F9fSwKKyB7MTYsMHgxMjkwLDAsezB4ZTAsMHhmZiwweDkwLDB4NzYsMHgxYiwweGUwLDB4YzMsMHg5ZiwweDUwLDB4NGYsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTR9fSwKKyB7MTYsMHgxMmEwLDAsezB4MjQsMHhhZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4NzYsMHgxZSwweGUwLDB4ZmR9fSwKKyB7MTYsMHgxMmIwLDAsezB4MDQsMHhmMCwweDc0LDB4MDAsMHgyZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZWUsMHhmMCwweGVmLDB4NzV9fSwKKyB7MTYsMHgxMmMwLDAsezB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZiwweDkwLDB4NzZ9fSwKKyB7MTYsMHgxMmQwLDAsezB4MWUsMHhlMCwweGZlLDB4MDQsMHhmMCwweDc0LDB4MDAsMHgyZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZWZ9fSwKKyB7MTYsMHgxMmUwLDAsezB4ZjAsMHg5MCwweDc2LDB4MWIsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGE0LDB4OTAsMHg3NiwweDFlLDB4ZTAsMHg5MCwweDdmLDB4YjV9fSwKKyB7MTYsMHgxMmYwLDAsezB4ZjAsMHgyMiwweDkwLDB4NzYsMHgxYiwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWUsMHhmNSwweDgyLDB4ZTR9fSwKKyB7MTYsMHgxMzAwLDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4N2YsMHgwMCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWZ9fSwKKyB7MTYsMHgxMzEwLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4N2YsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzR9fSwKKyB7MTYsMHgxMzIwLDAsezB4MDIsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmNCwweDcwLDB4NmQsMHg5MCwweDc2LDB4MzgsMHhlMCwweDkwLDB4NzZ9fSwKKyB7MTYsMHgxMzMwLDAsezB4MWIsMHhmMCwweDkwLDB4NzYsMHgzYSwweGUwLDB4ZmYsMHg5MCwweDc2LDB4MWIsMHhlMCwweGMzLDB4OWYsMHg1MCwweDRmLDB4ZTB9fSwKKyB7MTYsMHgxMzQwLDAsezB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmV9fSwKKyB7MTYsMHgxMzUwLDAsezB4OTAsMHg3NiwweDFlLDB4ZTAsMHhmZCwweDA0LDB4ZjAsMHg3NCwweDAwLDB4MmQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjV9fSwKKyB7MTYsMHgxMzYwLDAsezB4ODMsMHhlZSwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9fSwKKyB7MTYsMHgxMzcwLDAsezB4ODMsMHhlMCwweGZmLDB4OTAsMHg3NiwweDFlLDB4ZTAsMHhmZSwweDA0LDB4ZjAsMHg3NCwweDAwLDB4MmUsMHhmNSwweDgyLDB4ZTR9fSwKKyB7MTYsMHgxMzgwLDAsezB4MzQsMHg3ZiwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3NiwweDFiLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhhNCwweDkwLDB4NzZ9fSwKKyB7MTYsMHgxMzkwLDAsezB4MWUsMHhlMCwweDkwLDB4N2YsMHhiNSwweGYwLDB4MjIsMHg5MCwweDc2LDB4MWIsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTR9fSwKKyB7MTYsMHgxM2EwLDAsezB4MjQsMHhiMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4MDAsMHhmMCwweGVmLDB4NzV9fSwKKyB7MTYsMHgxM2IwLDAsezB4ZjAsMHgwYSwweGE0LDB4MjQsMHhiMSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4MDF9fSwKKyB7MTYsMHgxM2MwLDAsezB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAyLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlYSwweGUwLDB4ZjQsMHg3MCwweDZkLDB4OTB9fSwKKyB7MTYsMHgxM2QwLDAsezB4NzYsMHgzOCwweGUwLDB4OTAsMHg3NiwweDFiLDB4ZjAsMHg5MCwweDc2LDB4M2EsMHhlMCwweGZmLDB4OTAsMHg3NiwweDFiLDB4ZTB9fSwKKyB7MTYsMHgxM2UwLDAsezB4YzMsMHg5ZiwweDUwLDB4NGYsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIyLDB4ZjUsMHg4MiwweGU0LDB4MzR9fSwKKyB7MTYsMHgxM2YwLDAsezB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4NzYsMHgxZSwweGUwLDB4ZmQsMHgwNCwweGYwLDB4NzQsMHgwMCwweDJkLDB4ZjV9fSwKKyB7MTYsMHgxNDAwLDAsezB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZWUsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIzLDB4ZjV9fSwKKyB7MTYsMHgxNDEwLDAsezB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgxZSwweGUwLDB4ZmUsMHgwNCwweGYwLDB4NzR9fSwKKyB7MTYsMHgxNDIwLDAsezB4MDAsMHgyZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHgxYiwweGUwLDB4MDR9fSwKKyB7MTYsMHgxNDMwLDAsezB4ZjAsMHg4MCwweGE0LDB4OTAsMHg3NiwweDFlLDB4ZTAsMHg5MCwweDdmLDB4YjUsMHhmMCwweDIyLDB4OTAsMHg3NiwweDFiLDB4ZTB9fSwKKyB7MTYsMHgxNDQwLDAsezB4ZmYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4OTB9fSwKKyB7MTYsMHgxNDUwLDAsezB4N2YsMHgwMCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjV9fSwKKyB7MTYsMHgxNDYwLDAsezB4ODMsMHhlMCwweDkwLDB4N2YsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMiwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjR9fSwKKyB7MTYsMHgxNDcwLDAsezB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjR9fSwKKyB7IDUsMHgxNDgwLDAsezB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMn19LAorIHsxNiwweDE0ODUsMCx7MHg3NCwweDAwLDB4ZjUsMHg4NiwweDkwLDB4ZmQsMHhhNSwweDdjLDB4MDUsMHhhMywweGU1LDB4ODIsMHg0NSwweDgzLDB4NzAsMHhmOX19LAorIHsgMSwweDE0OTUsMCx7MHgyMn19LAorIHsxNiwweDE0OTYsMCx7MHg5MCwweDdmLDB4ZDYsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDQzLDB4ODcsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMn19LAorIHsxNiwweDE0YTYsMCx7MHhjMCwweGQwLDB4YzAsMHhlMCwweDhmLDB4ZTAsMHhjMCwweGUwLDB4OGUsMHhlMCwweGMwLDB4ZTAsMHg4ZCwweGUwLDB4YzAsMHhlMH19LAorIHsxNiwweDE0YjYsMCx7MHg4YywweGUwLDB4YzAsMHhlMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4MDUsMHg4NiwweGMwLDB4ODQsMHhjMCwweDg1LDB4N2QsMHgwMH19LAorIHsxNiwweDE0YzYsMCx7MHg5MCwweDdmLDB4ZTMsMHg3NCwweDdiLDB4ZjAsMHhhMywweDc0LDB4ODAsMHhmMCwweDdjLDB4MTEsMHg5MCwweDdmLDB4OTksMHhlMH19LAorIHsxNiwweDE0ZDYsMCx7MHg1NCwweDQwLDB4ZGMsMHgwMywweDAyLDB4MTQsMHhmMywweGI0LDB4MDAsMHgxMywweDkwLDB4N2YsMHhlMiwweDc0LDB4NDAsMHhmMH19LAorIHsxNiwweDE0ZTYsMCx7MHg5MCwweDdmLDB4ZTUsMHhmMCwweDkwLDB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMCwweDAyLDB4MTQsMHhkMiwweDkwLDB4NzYsMHg5MH19LAorIHsxNiwweDE0ZjYsMCx7MHhlMCwweGI0LDB4MDEsMHgxMiwweDkwLDB4NzYsMHg4ZiwweGUwLDB4MmQsMHhmZCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMH19LAorIHsxNiwweDE1MDYsMCx7MHg5MCwweDdmLDB4NmMsMHgwMiwweDE1LDB4NTcsMHhiNCwweDAyLDB4MTIsMHg5MCwweDc2LDB4OGYsMHhlMCwweDJkLDB4ZmQsMHg5MH19LAorIHsxNiwweDE1MTYsMCx7MHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwLDB4OTAsMHg3ZiwweDZjLDB4MDIsMHgxNSwweDk2LDB4YjQsMHgwMywweDEyLDB4OTAsMHg3Nn19LAorIHsxNiwweDE1MjYsMCx7MHg4ZiwweGUwLDB4MmQsMHhmZCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMCwweDkwLDB4N2YsMHg2YywweDAyLDB4MTUsMHhlMX19LAorIHsxNiwweDE1MzYsMCx7MHhiNCwweDA0LDB4MTIsMHg5MCwweDc2LDB4OGYsMHhlMCwweDJkLDB4ZmQsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDgwLDB4ZjAsMHg5MH19LAorIHsxNiwweDE1NDYsMCx7MHg3ZiwweDZjLDB4MDIsMHgxNiwweDEwLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwLDB4OTAsMHg3ZiwweDZjLDB4MDIsMHgxNn19LAorIHsxNiwweDE1NTYsMCx7MHg0MCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGRkLDB4ZjIsMHg3ZH19LAorIHsxNiwweDE1NjYsMCx7MHgwMiwweDA1LDB4ODYsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjAsMHg5MCwweDdmLDB4OWIsMHhlMCwweDU0LDB4MDQsMHhiNH19LAorIHsxNiwweDE1NzYsMCx7MHgwMCwweDA1LDB4MDUsMHg4NiwweDAyLDB4MTYsMHg0MCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMCwweDA1LDB4ODYsMHhmMH19LAorIHsxNiwweDE1ODYsMCx7MHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZGQsMHhkNCwweDAyLDB4MTYsMHg0MH19LAorIHsxNiwweDE1OTYsMCx7MHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMH19LAorIHsxNiwweDE1YTYsMCx7MHhmMCwweGYwLDB4ZGQsMHhlYywweDdkLDB4MDIsMHgwNSwweDg2LDB4OTAsMHg3ZiwweGUyLDB4NzQsMHgwMCwweGYwLDB4OTAsMHg3Zn19LAorIHsxNiwweDE1YjYsMCx7MHg5YiwweGUwLDB4NTQsMHgwNCwweGI0LDB4MDAsMHgwNSwweDA1LDB4ODYsMHgwMiwweDE2LDB4NDAsMHg5MCwweDdmLDB4ZTIsMHg3NH19LAorIHsxNiwweDE1YzYsMCx7MHg4MCwweGYwLDB4MDUsMHg4NiwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhmMH19LAorIHsgNiwweDE1ZDYsMCx7MHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjB9fSwKKyB7MTYsMHgxNWRjLDAsezB4ZGQsMHhjZSwweDAyLDB4MTYsMHg0MCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZGQsMHhmYSwweDdkLDB4MDIsMHgwNSwweDg2LDB4OTB9fSwKKyB7MTYsMHgxNWVjLDAsezB4N2YsMHhlMiwweDc0LDB4MDAsMHhmMCwweDkwLDB4N2YsMHg5YiwweGUwLDB4NTQsMHgwNCwweGI0LDB4MDAsMHgwNSwweDA1LDB4ODZ9fSwKKyB7MTYsMHgxNWZjLDAsezB4MDIsMHgxNiwweDQwLDB4OTAsMHg3ZiwweGUyLDB4NzQsMHg4MCwweGYwLDB4MDUsMHg4NiwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZGR9fSwKKyB7MTYsMHgxNjBjLDAsezB4ZGMsMHgwMiwweDE2LDB4NDAsMHhmMCwweGYwLDB4ZjAsMHhmMCwweGYwLDB4ZjAsMHhkZCwweGY4LDB4N2QsMHgwMiwweDA1LDB4ODZ9fSwKKyB7MTYsMHgxNjFjLDAsezB4OTAsMHg3ZiwweGUyLDB4NzQsMHgwMCwweGYwLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHg1NCwweDA0LDB4YjQsMHgwMCwweDA1LDB4MDV9fSwKKyB7MTYsMHgxNjJjLDAsezB4ODYsMHgwMiwweDE2LDB4NDAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDgwLDB4ZjAsMHgwNSwweDg2LDB4ZjAsMHhmMCwweGYwLDB4ZjB9fSwKKyB7MTYsMHgxNjNjLDAsezB4ZjAsMHhmMCwweGRkLDB4ZGEsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjAsMHhkMCwweDg1LDB4ZDAsMHg4NCwweDA1LDB4ODZ9fSwKKyB7MTYsMHgxNjRjLDAsezB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGUwLDB4ZmMsMHhkMCwweGUwLDB4ZmQsMHhkMCwweGUwLDB4ZmUsMHhkMCwweGUwLDB4ZmZ9fSwKKyB7IDUsMHgxNjVjLDAsezB4ZDAsMHhlMCwweGQwLDB4ZDAsMHgyMn19LAorIHsxNiwweDE2NjEsMCx7MHhjMCwweGQwLDB4YzAsMHhlMCwweGMwLDB4ODIsMHhjMCwweDgzLDB4OTAsMHg3NiwweDdjLDB4ZTAsMHg5MCwweDdmLDB4NmYsMHhmMH19LAorIHsxNiwweDE2NzEsMCx7MHg5MCwweDc2LDB4N2QsMHhlMCwweDkwLDB4N2YsMHg2ZiwweGYwLDB4OTAsMHg3NiwweDdlLDB4ZTAsMHg5MCwweDdmLDB4NmYsMHhmMH19LAorIHsgOSwweDE2ODEsMCx7MHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZTAsMHhkMCwweGQwLDB4MjJ9fSwKKyB7MTYsMHgxNjhhLDAsezB4YzAsMHhkMCwweGMwLDB4ZTAsMHg4ZiwweGUwLDB4YzAsMHhlMCwweDhlLDB4ZTAsMHhjMCwweGUwLDB4YzAsMHg4MiwweGMwLDB4ODN9fSwKKyB7MTYsMHgxNjlhLDAsezB4MDUsMHg4NiwweGMwLDB4ODQsMHhjMCwweDg1LDB4OTAsMHg3NiwweDg3LDB4ZTAsMHhmZiwweGJmLDB4MDAsMHgwMywweDAyLDB4MTd9fSwKKyB7MTYsMHgxNmFhLDAsezB4MDEsMHg5MCwweDdmLDB4OTYsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDkwLDB4N2YsMHhlMiwweDc0LDB4ODAsMHhmMCwweDkwLDB4N2Z9fSwKKyB7MTYsMHgxNmJhLDAsezB4NjIsMHhlMCwweDA1LDB4ODYsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjAsMHg5MCwweDdmLDB4OTYsMHhlMCwweDU0LDB4N2Z9fSwKKyB7MTYsMHgxNmNhLDAsezB4ZjAsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDgwLDB4ZjAsMHg5MCwweDc2LDB4OGUsMHhlMCwweGI0LDB4MDEsMHgwNSwweDA1LDB4ODZ9fSwKKyB7MTYsMHgxNmRhLDAsezB4MDIsMHgxNiwweGY2LDB4YjQsMHgwMiwweDA1LDB4MDUsMHg4NiwweDAyLDB4MTYsMHhlYiwweDA1LDB4ODYsMHgwMiwweDE2LDB4ZmJ9fSwKKyB7MTYsMHgxNmVhLDAsezB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZGYsMHhmOCwweDAyLDB4MTYsMHhmYiwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZGZ9fSwKKyB7MTYsMHgxNmZhLDAsezB4ZmEsMHg5MCwweDdmLDB4ZTIsMHg3NCwweDAwLDB4ZjAsMHhkMCwweDg1LDB4ZDAsMHg4NCwweDA1LDB4ODYsMHhkMCwweDgzLDB4ZDB9fSwKKyB7MTIsMHgxNzBhLDAsezB4ODIsMHhkMCwweGUwLDB4ZmUsMHhkMCwweGUwLDB4ZmYsMHhkMCwweGUwLDB4ZDAsMHhkMCwweDIyfX0sCisgezE2LDB4MTcxNiwwLHsweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHhlMCwweGU4LDB4YzAsMHhlMCwweDc4LDB4ZDEsMHhlOCwweDE0LDB4ZjgsMHg3MCwweGZifX0sCisgezEwLDB4MTcyNiwwLHsweGQwLDB4ZTAsMHhmOCwweGQwLDB4ZTAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweDIyfX0sCisgezE2LDB4MTczMCwwLHsweGMwLDB4ODIsMHhjMCwweDgzLDB4YzAsMHhlMCwweGU4LDB4YzAsMHhlMCwweDc4LDB4NzgsMHhlOCwweDE0LDB4ZjgsMHg3MCwweGZifX0sCisgezEwLDB4MTc0MCwwLHsweGQwLDB4ZTAsMHhmOCwweGQwLDB4ZTAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweDIyfX0sCisgeyA3LDB4MTc0YSwwLHsweDkwLDB4N2YsMHhjNSwweDc0LDB4MDIsMHhmMCwweDIyfX0sCisgezE2LDB4MTc1MSwwLHsweDkwLDB4N2UsMHhjMCwweGUwLDB4OTAsMHg3NiwweDQ1LDB4ZjAsMHg5MCwweDdlLDB4YzEsMHhlMCwweDkwLDB4NzYsMHg0NCwweGYwfX0sCisgezE2LDB4MTc2MSwwLHsweDkwLDB4N2UsMHhjMiwweGUwLDB4OTAsMHg3NiwweDQzLDB4ZjAsMHhiNCwweDAwLDB4MDMsMHgwMiwweDE3LDB4NzgsMHg5MCwweDc2fX0sCisgezE2LDB4MTc3MSwwLHsweDE5LDB4NzQsMHgwMywweGYwLDB4MDIsMHgxNywweDhlLDB4OTAsMHg3NiwweDQ0LDB4ZTAsMHhiNCwweGJiLDB4MDksMHg5MCwweDc2fX0sCisgezE2LDB4MTc4MSwwLHsweDE5LDB4NzQsMHgwMiwweGYwLDB4MDIsMHgxNywweDhlLDB4OTAsMHg3NiwweDE5LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDQyfX0sCisgeyAzLDB4MTc5MSwwLHsweGU0LDB4ZjAsMHgyMn19LAorIHsgNCwweDE3OTQsMCx7MHg4ZCwweDI5LDB4OGIsMHgyYX19LAorIHsxNiwweDE3OTgsMCx7MHgxMiwweDQ5LDB4ZmYsMHhlYSwweDQ5LDB4NjAsMHg1NywweDEyLDB4MzYsMHg5MiwweDdlLDB4MDAsMHgyOSwweGZmLDB4ZWUsMHgzYX19LAorIHsxNiwweDE3YTgsMCx7MHhjOSwweGVmLDB4YzksMHg3NSwweDJiLDB4ZmYsMHhmNSwweDJjLDB4ODksMHgyZCwweGFiLDB4MmIsMHhhYSwweDJjLDB4YTksMHgyZH19LAorIHsxNiwweDE3YjgsMCx7MHg5MCwweDAwLDB4MDEsMHgxMiwweDM2LDB4YWIsMHhmZiwweDY0LDB4MDQsMHg2MCwweDA1LDB4ZWYsMHg2NCwweDA1LDB4NzAsMHgyZX19LAorIHsxNiwweDE3YzgsMCx7MHhlZiwweGI0LDB4MDQsMHgxNSwweDkwLDB4MDAsMHgwMiwweDEyLDB4MzYsMHhhYiwweDY1LDB4MjksMHg3MCwweDBiLDB4OTAsMHgwMH19LAorIHsxNiwweDE3ZDgsMCx7MHgwMywweDEyLDB4MzYsMHhhYiwweDY1LDB4MmEsMHg3MCwweDAxLDB4MjIsMHgxMiwweDM2LDB4OTIsMHg3ZSwweDAwLDB4MjksMHhmZn19LAorIHsxNiwweDE3ZTgsMCx7MHhlZSwweDNhLDB4YzksMHhlZiwweGM5LDB4NzUsMHgyYiwweGZmLDB4ZjUsMHgyYywweDg5LDB4MmQsMHg4MCwweGJjLDB4N2IsMHgwMH19LAorIHsgNCwweDE3ZjgsMCx7MHg3YSwweDAwLDB4NzksMHgwMH19LAorIHsgMSwweDE3ZmMsMCx7MHgyMn19LAorIHsgMywweDE3ZmQsMCx7MHhjMiwweDhiLDB4MzJ9fSwKKyB7MTYsMHgxODAwLDAsezB4OTAsMHg3NiwweDkwLDB4ZTAsMHgxNCwweDYwLDB4MzcsMHgxNCwweDcwLDB4MDIsMHgwMSwweGQ4LDB4MTQsMHg3MCwweDAyLDB4MjF9fSwKKyB7MTYsMHgxODEwLDAsezB4NzIsMHgxNCwweDcwLDB4MDIsMHg0MSwweDNiLDB4MjQsMHgwNCwweDYwLDB4MDIsMHg2MSwweDAzLDB4OTAsMHg3ZiwweGZjLDB4NzR9fSwKKyB7MTYsMHgxODIwLDAsezB4Y2MsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg5NSwweGUwLDB4NDQsMHgwMSwweGYwLDB4NTR9fSwKKyB7MTYsMHgxODMwLDAsezB4MDUsMHhmMCwweDkwLDB4ODAsMHgwMSwweGYwLDB4ZTQsMHg5MCwweDc2LDB4MWEsMHhmMCwweGMyLDB4MmUsMHgyMiwweDkwLDB4NzZ9fSwKKyB7MTYsMHgxODQwLDAsezB4OTUsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQ0LDB4MDIsMHhmMCwweDMwLDB4M2UsMHgwNiwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODB9fSwKKyB7MTYsMHgxODUwLDAsezB4MDcsMHg5MCwweDc2LDB4OTUsMHhlMCwweDU0LDB4ZmIsMHhmMCwweDkwLDB4NzYsMHgxYSwweGUwLDB4YjQsMHgwMSwweDA4LDB4OTB9fSwKKyB7MTYsMHgxODYwLDAsezB4NzYsMHg5NSwweGUwLDB4OTAsMHg4MCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4MTksMHhlMCwweGZmLDB4YjQsMHgwMSwweDIyLDB4OTB9fSwKKyB7MTYsMHgxODcwLDAsezB4N2YsMHhmYywweDc0LDB4NzQsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg4ZiwweDc0LDB4MmJ9fSwKKyB7MTYsMHgxODgwLDAsezB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmQsMHhmMCwweGU0LDB4OTAsMHg3NiwweDgxLDB4ZjAsMHg5MCwweDc2LDB4ODB9fSwKKyB7MTYsMHgxODkwLDAsezB4ZjAsMHhlZiwweGI0LDB4MDIsMHgyMiwweDkwLDB4N2YsMHhmYywweDc0LDB4NjgsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmN9fSwKKyB7MTYsMHgxOGEwLDAsezB4ZjAsMHg5MCwweDc2LDB4OGYsMHg3NCwweDJmLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0LDB4MDIsMHhmMCwweGU0LDB4OTB9fSwKKyB7MTYsMHgxOGIwLDAsezB4NzYsMHg4MSwweGYwLDB4OTAsMHg3NiwweDgwLDB4ZjAsMHgzMCwweDNmLDB4MDksMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmV9fSwKKyB7MTYsMHgxOGMwLDAsezB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmJ9fSwKKyB7MTYsMHgxOGQwLDAsezB4ZjAsMHg5MCwweDgwLDB4MDIsMHhmMCwweGQyLDB4MmUsMHgyMiwweDkwLDB4NzYsMHg5NSwweGUwLDB4NTQsMHhmZSwweGYwLDB4NDR9fSwKKyB7MTYsMHgxOGUwLDAsezB4MDIsMHhmMCwweDMwLDB4M2UsMHgwNiwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODAsMHgwNywweDkwLDB4NzYsMHg5NSwweGUwLDB4NTR9fSwKKyB7MTYsMHgxOGYwLDAsezB4ZmIsMHhmMCwweDkwLDB4NzYsMHgxYSwweGUwLDB4YjQsMHgwMSwweDA4LDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg5MCwweDgwLDB4MDF9fSwKKyB7MTYsMHgxOTAwLDAsezB4ZjAsMHg5MCwweDc2LDB4MTksMHhlMCwweGZmLDB4YjQsMHgwMSwweDIyLDB4OTAsMHg3ZiwweGZjLDB4NzQsMHgzMCwweGYwLDB4OTB9fSwKKyB7MTYsMHgxOTEwLDAsezB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg4ZiwweDc0LDB4MmIsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NTR9fSwKKyB7MTYsMHgxOTIwLDAsezB4ZmQsMHhmMCwweGU0LDB4OTAsMHg3NiwweDgxLDB4ZjAsMHg5MCwweDc2LDB4ODAsMHhmMCwweGVmLDB4YjQsMHgwMiwweDIyLDB4OTB9fSwKKyB7MTYsMHgxOTMwLDAsezB4N2YsMHhmYywweDc0LDB4MWMsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg4ZiwweDc0LDB4MmZ9fSwKKyB7MTYsMHgxOTQwLDAsezB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0LDB4MDIsMHhmMCwweGU0LDB4OTAsMHg3NiwweDgxLDB4ZjAsMHg5MCwweDc2LDB4ODB9fSwKKyB7MTYsMHgxOTUwLDAsezB4ZjAsMHgzMCwweDNmLDB4MDksMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc2LDB4OTd9fSwKKyB7MTYsMHgxOTYwLDAsezB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmIsMHhmMCwweDkwLDB4ODAsMHgwMiwweGYwLDB4ZDJ9fSwKKyB7MTYsMHgxOTcwLDAsezB4MmUsMHgyMiwweDkwLDB4NzYsMHg5NSwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDQsMHgwMiwweGYwLDB4NDQsMHgwOCwweGYwLDB4MzB9fSwKKyB7MTYsMHgxOTgwLDAsezB4M2UsMHgwNiwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODAsMHgwNywweDkwLDB4NzYsMHg5NSwweGUwLDB4NTQsMHhmYiwweGYwLDB4OTB9fSwKKyB7MTYsMHgxOTkwLDAsezB4NzYsMHgxYSwweGUwLDB4YjQsMHgwMSwweDA4LDB4OTAsMHg3NiwweDk1LDB4ZTAsMHg5MCwweDgwLDB4MDEsMHhmMCwweDkwLDB4NzZ9fSwKKyB7MTYsMHgxOWEwLDAsezB4MTksMHhlMCwweGZmLDB4YjQsMHgwMSwweDI1LDB4OTAsMHg3ZiwweGZjLDB4NzQsMHhjYywweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzR9fSwKKyB7MTYsMHgxOWIwLDAsezB4ZmMsMHhmMCwweDkwLDB4NzYsMHg4ZiwweDc0LDB4MmIsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZCwweGYwLDB4NTR9fSwKKyB7MTYsMHgxOWMwLDAsezB4ZmIsMHhmMCwweGU0LDB4OTAsMHg3NiwweDgxLDB4ZjAsMHg5MCwweDc2LDB4ODAsMHhmMCwweGVmLDB4YjQsMHgwMiwweDI1LDB4OTB9fSwKKyB7MTYsMHgxOWQwLDAsezB4N2YsMHhmYywweDc0LDB4YzgsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg4ZiwweDc0LDB4MmZ9fSwKKyB7MTYsMHgxOWUwLDAsezB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0LDB4MDIsMHhmMCwweDU0LDB4ZmIsMHhmMCwweGU0LDB4OTAsMHg3NiwweDgxLDB4ZjB9fSwKKyB7MTYsMHgxOWYwLDAsezB4OTAsMHg3NiwweDgwLDB4ZjAsMHhlZiwweGI0LDB4MDMsMHgyNSwweDkwLDB4N2YsMHhmYywweDc0LDB4OTgsMHhmMCwweDkwLDB4N2Z9fSwKKyB7MTYsMHgxYTAwLDAsezB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OGYsMHg3NCwweDVmLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmR9fSwKKyB7MTYsMHgxYTEwLDAsezB4ZjAsMHg0NCwweDA0LDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4MSwweGYwLDB4OTAsMHg3NiwweDgwLDB4ZjAsMHgzMCwweDNmLDB4MDl9fSwKKyB7MTYsMHgxYTIwLDAsezB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NCwweDAxLDB4ZjB9fSwKKyB7MTYsMHgxYTMwLDAsezB4OTAsMHg3NiwweDk3LDB4ZTAsMHg5MCwweDgwLDB4MDIsMHhmMCwweGQyLDB4MmUsMHgyMiwweDkwLDB4NzYsMHg5NSwweGUwLDB4NTR9fSwKKyB7MTYsMHgxYTQwLDAsezB4ZmUsMHhmMCwweDQ0LDB4MDIsMHhmMCwweDQ0LDB4MDgsMHhmMCwweDMwLDB4M2UsMHgwNiwweGUwLDB4NDQsMHgwNCwweGYwLDB4ODB9fSwKKyB7MTYsMHgxYTUwLDAsezB4MDcsMHg5MCwweDc2LDB4OTUsMHhlMCwweDU0LDB4ZmIsMHhmMCwweDkwLDB4NzYsMHgxYSwweGUwLDB4YjQsMHgwMSwweDA4LDB4OTB9fSwKKyB7MTYsMHgxYTYwLDAsezB4NzYsMHg5NSwweGUwLDB4OTAsMHg4MCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4MTksMHhlMCwweGZmLDB4YjQsMHgwMSwweDI1LDB4OTB9fSwKKyB7MTYsMHgxYTcwLDAsezB4N2YsMHhmYywweDc0LDB4YjQsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg4ZiwweDc0LDB4MmJ9fSwKKyB7MTYsMHgxYTgwLDAsezB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDU0LDB4ZmQsMHhmMCwweDU0LDB4ZmIsMHhmMCwweGU0LDB4OTAsMHg3NiwweDgxLDB4ZjB9fSwKKyB7MTYsMHgxYTkwLDAsezB4OTAsMHg3NiwweDgwLDB4ZjAsMHhlZiwweGI0LDB4MDIsMHgyNSwweDkwLDB4N2YsMHhmYywweDc0LDB4YjAsMHhmMCwweDkwLDB4N2Z9fSwKKyB7MTYsMHgxYWEwLDAsezB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OGYsMHg3NCwweDJmLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0LDB4MDJ9fSwKKyB7MTYsMHgxYWIwLDAsezB4ZjAsMHg1NCwweGZiLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4MSwweGYwLDB4OTAsMHg3NiwweDgwLDB4ZjAsMHhlZiwweGI0LDB4MDN9fSwKKyB7MTYsMHgxYWMwLDAsezB4MjUsMHg5MCwweDdmLDB4ZmMsMHg3NCwweDY4LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OGZ9fSwKKyB7MTYsMHgxYWQwLDAsezB4NzQsMHg1ZiwweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHg0NCwweDA0LDB4ZjAsMHhlNCwweDkwLDB4NzZ9fSwKKyB7MTYsMHgxYWUwLDAsezB4ODEsMHhmMCwweDkwLDB4NzYsMHg4MCwweGYwLDB4MzAsMHgzZiwweDA5LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZlLDB4ZjB9fSwKKyB7MTYsMHgxYWYwLDAsezB4ODAsMHgwNywweDkwLDB4NzYsMHg5NywweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg5MCwweDgwLDB4MDJ9fSwKKyB7IDQsMHgxYjAwLDAsezB4ZjAsMHhkMiwweDJlLDB4MjJ9fSwKKyB7MTYsMHgxYjA0LDAsezB4MzAsMHgyYywweDM4LDB4YzIsMHgyYywweDkwLDB4NzYsMHgxOSwweGUwLDB4ZmYsMHhiNCwweDAxLDB4MGUsMHg5MCwweDc2LDB4N2N9fSwKKyB7MTYsMHgxYjE0LDAsezB4NzQsMHhjMCwweGYwLDB4YTMsMHg3NCwweDE0LDB4ZjAsMHhhMywweDc0LDB4MGIsMHhmMCwweGVmLDB4YjQsMHgwMiwweDBkLDB4ZTR9fSwKKyB7MTYsMHgxYjI0LDAsezB4OTAsMHg3NiwweDdjLDB4ZjAsMHhhMywweDc0LDB4MTAsMHhmMCwweGEzLDB4NzQsMHgwYywweGYwLDB4ZWYsMHhiNCwweDAzLDB4MGJ9fSwKKyB7MTIsMHgxYjM0LDAsezB4ZTQsMHg5MCwweDc2LDB4N2MsMHhmMCwweGEzLDB4NzQsMHgxOCwweGYwLDB4YTMsMHhmMCwweDIyfX0sCisgezE2LDB4MWI0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWI1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWI2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWI3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWI4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWI5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWJhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWJiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWJjMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWJkMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWJlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWJmMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWMwMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWMxMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWMyMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWMzMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWM0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWM1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWM2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWM3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWM4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWM5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWNhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWNiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWNjMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWNkMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWNlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWNmMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWQwMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWQxMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWQyMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWQzMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWQ0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWQ1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWQ2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWQ3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWQ4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWQ5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWRhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWRiMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWRjMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWRkMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWRlMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWRmMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWUwMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWUxMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWUyMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWUzMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWU0MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWU1MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWU2MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWU3MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWU4MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWU5MCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MWVhMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE0LDB4MWViMCwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZWJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZWNlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZWRlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZWVlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZWZlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZjBlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZjFlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgxZjJlLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7IDIsMHgxZjNlLDAsezB4MDAsMHgwMH19LAorIHsxNiwweDFmNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFmNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFmNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFmNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFmODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFmOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFmYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFmYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFmYzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFmZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFmZTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDFmZjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIwMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIwMTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIwMjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIwMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIwNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIwNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIwNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIwNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIwODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIwOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIwYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIwYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIwYzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIwZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIwZTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIwZjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIxMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIxMTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIxMjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIxMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIxNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIxNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIxNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIxNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIxODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIxOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIxYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIxYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIxYzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIxZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIxZTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIxZjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIyMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIyMTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIyMjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIyMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIyNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIyNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIyNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIyNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIyODAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIyOTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIyYTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIyYjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIyYzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIyZDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIyZTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIyZjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIzMDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIzMTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIzMjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIzMzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIzNDAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIzNTAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNiwweDIzNjAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19LAorIHsxNCwweDIzNzAsMCx7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjM3ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjM4ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjM5ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjNhZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjNiZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjNjZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjNkZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjNlZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjNmZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjQwZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjQxZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjQyZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjQzZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjQ0ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjQ1ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjQ2ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjQ3ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjQ4ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjQ5ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjRhZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjRiZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjRjZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjRkZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjRlZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjRmZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjUwZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjUxZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjUyZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjUzZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjU0ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjU1ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjU2ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjU3ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjU4ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjU5ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjVhZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjViZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjVjZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjVkZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjVlZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjVmZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjYwZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjYxZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjYyZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjYzZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjY0ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjY1ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjY2ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjY3ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjY4ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjY5ZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjZhZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjZiZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjZjZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE2LDB4MjZkZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX0sCisgezE0LDB4MjZlZSwwLHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNmZjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNzBjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNzFjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNzJjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNzNjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNzRjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNzVjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNzZjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNzdjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNzhjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyNzljLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyN2FjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyN2JjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyN2NjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyN2RjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7MTYsMHgyN2VjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9fSwKKyB7IDUsMHgyN2ZjLDAsezB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMn19LAorIHsxNiwweDI4MDEsMCx7MHhjMiwweDIwLDB4YzIsMHgyMSwweGMyLDB4MmEsMHg5MCwweDdmLDB4ZTgsMHhlMCwweDEyLDB4MzcsMHhmOSwweDI4LDB4MzAsMHgwMH19LAorIHsxNiwweDI4MTEsMCx7MHgyOCwweDhjLDB4MDEsMHgyOCwweGEyLDB4MDIsMHgyYSwweDFmLDB4MjEsMHgyYSwweDZhLDB4MjIsMHgyOSwweDNkLDB4ODAsMHgyOX19LAorIHsxNiwweDI4MjEsMCx7MHg3ZCwweDgxLDB4MjksMHhkMSwweDgyLDB4MmEsMHg4NCwweGExLDB4MmEsMHhiYSwweGEyLDB4MDAsMHgwMCwweDJhLDB4YmYsMHg5MH19LAorIHsxNiwweDI4MzEsMCx7MHg3ZiwweGU5LDB4ZTAsMHgxNCwweDYwLDB4MTEsMHgyNCwweGZlLDB4NjAsMHgyOCwweDI0LDB4ZmUsMHg2MCwweDNiLDB4MjQsMHhmY319LAorIHsxNiwweDI4NDEsMCx7MHg3MCwweDQwLDB4MTIsMHg0YiwweGEwLDB4NDEsMHhjYiwweDEyLDB4NGQsMHhhNywweDQwLDB4MDIsMHg0MSwweGNiLDB4OTAsMHg3Zn19LAorIHsxNiwweDI4NTEsMCx7MHhlYSwweGUwLDB4YjQsMHgwMSwweDA0LDB4YzIsMHgyMiwweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMH19LAorIHsxNiwweDI4NjEsMCx7MHg0MSwweGNiLDB4MTIsMHg0ZCwweGE5LDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhiNCwweDAxLDB4MDQsMHhkMiwweDIyLDB4NDEsMHhjYn19LAorIHsxNiwweDI4NzEsMCx7MHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMH19LAorIHsxNiwweDI4ODEsMCx7MHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgyNH19LAorIHsxNiwweDI4OTEsMCx7MHhmNSwweDcwLDB4MDUsMHgxMiwweDQ4LDB4MDAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MX19LAorIHsxNiwweDI4YTEsMCx7MHhjYiwweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHhmZCwweDYwLDB4NTQsMHgyNCwweDAyLDB4NjAsMHgwMiwweDIxLDB4MzQsMHgxMn19LAorIHsxNiwweDI4YjEsMCx7MHg0ZCwweGE3LDB4NDAsMHgwMiwweDQxLDB4Y2IsMHg5MCwweDdmLDB4ZWEsMHhlMCwweDcwLDB4MzgsMHg5MCwweDdmLDB4ZWMsMHhlMH19LAorIHsxNiwweDI4YzEsMCx7MHhmNCwweDU0LDB4ODAsMHhmZiwweGM0LDB4NTQsMHgwZiwweGZmLDB4ZTAsMHg1NCwweDA3LDB4MmYsMHgyNSwweGUwLDB4MjQsMHhiNH19LAorIHsxNiwweDI4ZDEsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg5MCwweDdmLDB4ZWMsMHhlMCwweDU0LDB4ODAsMHhmZn19LAorIHsxNiwweDI4ZTEsMCx7MHgxMywweDEzLDB4MTMsMHg1NCwweDFmLDB4ZmYsMHhlMCwweDU0LDB4MDcsMHgyZiwweDkwLDB4N2YsMHhkNywweGYwLDB4ZTAsMHg0NH19LAorIHsxNiwweDI4ZjEsMCx7MHgyMCwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYiwweDEyLDB4NGQsMHhhOX19LAorIHsxNiwweDI5MDEsMCx7MHg0MCwweDAyLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhlYSwweGUwLDB4NzAsMHgyMCwweDkwLDB4N2YsMHhlYywweGUwLDB4ZjQsMHg1NH19LAorIHsxNiwweDI5MTEsMCx7MHg4MCwweGZmLDB4YzQsMHg1NCwweDBmLDB4ZmYsMHhlMCwweDU0LDB4MDcsMHgyZiwweDI1LDB4ZTAsMHgyNCwweGI0LDB4ZjUsMHg4Mn19LAorIHsxNiwweDI5MjEsMCx7MHhlNCwweDM0LDB4N2YsMHhmNSwweDgzLDB4NzQsMHgwMSwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMX19LAorIHsxNiwweDI5MzEsMCx7MHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4ZTksMHhlMH19LAorIHsxNiwweDI5NDEsMCx7MHg2MCwweDEyLDB4MjQsMHhmOCwweDYwLDB4MDksMHgyNCwweDAyLDB4NzAsMHgyOSwweDEyLDB4NDMsMHhkYiwweDQxLDB4Y2IsMHgxMn19LAorIHsxNiwweDI5NTEsMCx7MHg0ZCwweDVjLDB4NDEsMHhjYiwweDEyLDB4NGQsMHhhNSwweGEyLDB4MjIsMHhlNCwweDMzLDB4ZmYsMHgyNSwweGUwLDB4ZmYsMHhhMn19LAorIHsxNiwweDI5NjEsMCx7MHgyMywweGU0LDB4MzMsMHg0ZiwweDkwLDB4N2YsMHgwMCwweGYwLDB4ZTQsMHhhMywweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMn19LAorIHsxNiwweDI5NzEsMCx7MHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4ZTksMHhlMH19LAorIHsxNiwweDI5ODEsMCx7MHg2MCwweDMzLDB4MjQsMHhmNiwweDYwLDB4MmEsMHgyNCwweDA0LDB4NzAsMHgzZCwweDkwLDB4N2YsMHhlYiwweGUwLDB4MjQsMHhkZX19LAorIHsxNiwweDI5OTEsMCx7MHg2MCwweDBjLDB4MDQsMHg3MCwweDEyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3Zn19LAorIHsxNiwweDI5YTEsMCx7MHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYn19LAorIHsxNiwweDI5YjEsMCx7MHgxMiwweDQ2LDB4ODUsMHg0MSwweGNiLDB4MTIsMHg0ZCwweGE1LDB4ZTQsMHg5MCwweDdmLDB4MDAsMHhmMCwweGEzLDB4ZjAsMHg5MH19LAorIHsxNiwweDI5YzEsMCx7MHg3ZiwweGI1LDB4NzQsMHgwMiwweGYwLDB4NDEsMHhjYiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NDEsMHhjYn19LAorIHsxNiwweDI5ZDEsMCx7MHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4ZjQsMHg2MCwweDM0LDB4MjQsMHgwYywweDcwLDB4MzksMHgxMiwweDRkLDB4YTUsMHg5MH19LAorIHsxNiwweDI5ZTEsMCx7MHg3ZiwweGVjLDB4ZTAsMHhmNCwweDU0LDB4ODAsMHhmZiwweGM0LDB4NTQsMHgwZiwweGZmLDB4ZTAsMHg1NCwweDA3LDB4MmYsMHgyNX19LAorIHsxNiwweDI5ZjEsMCx7MHhlMCwweDI0LDB4YjQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDdmLDB4ZjUsMHg4MywweGUwLDB4NTQsMHhmZCwweDkwLDB4N2YsMHgwMH19LAorIHsxNiwweDJhMDEsMCx7MHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDIsMHhmMCwweDQxLDB4Y2IsMHg5MCwweDdmLDB4YjQsMHhlMH19LAorIHsxNiwweDJhMTEsMCx7MHg0NCwweDAxLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg0MSwweGNiLDB4OTAsMHg3Zn19LAorIHsxNiwweDJhMjEsMCx7MHhlOSwweGUwLDB4MjQsMHhmNiwweDYwLDB4MTIsMHgxNCwweDYwLDB4MWEsMHgyNCwweDAyLDB4NzAsMHgxZCwweGQyLDB4MjAsMHg5MH19LAorIHsxNiwweDJhMzEsMCx7MHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg4MCwweDEyLDB4ZDIsMHgyMCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMX19LAorIHsxNiwweDJhNDEsMCx7MHhmMCwweDgwLDB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIwLDB4MjAsMHgxOCwweDkwLDB4N2YsMHhlZX19LAorIHsxNiwweDJhNTEsMCx7MHhlMCwweDcwLDB4MDQsMHhhMywweGUwLDB4NjAsMHgwYiwweGQyLDB4MjksMHhkMiwweDI3LDB4MTIsMHgxNywweDRhLDB4ZDIsMHgyYX19LAorIHsxNiwweDJhNjEsMCx7MHg4MCwweDAzLDB4MTIsMHgwOCwweDAwLDB4YzIsMHgyMCwweDgwLDB4NjEsMHg5MCwweDdmLDB4ZWUsMHhlMCwweDcwLDB4MDQsMHhhM319LAorIHsxNiwweDJhNzEsMCx7MHhlMCwweDYwLDB4MGIsMHhkMiwweDI5LDB4ZDIsMHgyOCwweDEyLDB4MTcsMHg0YSwweGQyLDB4MmEsMHg4MCwweDRjLDB4MTIsMHgzOH19LAorIHsxNiwweDJhODEsMCx7MHg3NCwweDgwLDB4NDcsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4ZmUsMHg2MCwweDEyLDB4MTQsMHg2MCwweDFhLDB4MjQsMHgwMn19LAorIHsxNiwweDJhOTEsMCx7MHg3MCwweDFkLDB4ZDIsMHgyMSwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4ODAsMHgxMiwweGQyLDB4MjEsMHg5MH19LAorIHsxNiwweDJhYTEsMCx7MHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMH19LAorIHsxNiwweDJhYjEsMCx7MHgyMSwweDAzLDB4MTIsMHgxMCwweDAwLDB4YzIsMHgyMSwweDgwLDB4MTEsMHgxMiwweDJhLDB4ZDYsMHg4MCwweDBjLDB4MTIsMHg0ZH19LAorIHsxNiwweDJhYzEsMCx7MHhhYiwweDUwLDB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIwLDB4MmEsMHgwNywweDkwLDB4N2YsMHhiNH19LAorIHsgNSwweDJhZDEsMCx7MHhlMCwweDQ0LDB4MDIsMHhmMCwweDIyfX0sCisgezE2LDB4MmFkNiwwLHsweGU0LDB4OTAsMHg3NiwweDI3LDB4ZjAsMHg5MCwweDc2LDB4MjcsMHhlMCwweGZmLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQyfX0sCisgezE2LDB4MmFlNiwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDkwLDB4N2YsMHhlYywweGUwLDB4ZmQsMHhlZSwweDZkfX0sCisgezE2LDB4MmFmNiwwLHsweDYwLDB4MGUsMHhlZiwweGMzLDB4OTQsMHgwNiwweDUwLDB4MDgsMHg5MCwweDc2LDB4MjcsMHhlMCwweDA0LDB4ZjAsMHg4MCwweGQ1fX0sCisgezE2LDB4MmIwNiwwLHsweGVmLDB4YjQsMHgwNiwweDA4LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweGVmLDB4NzUsMHhmMCwweDBmfX0sCisgezE2LDB4MmIxNiwwLHsweGE0LDB4MjQsMHg0MSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDc2LDB4MjgsMHhmMCwweDI0fX0sCisgezE2LDB4MmIyNiwwLHsweDlmLDB4NzAsMHgwMiwweGExLDB4NzQsMHgyNCwweDIxLDB4NjAsMHgwMiwweGExLDB4YTEsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0fX0sCisgezE2LDB4MmIzNiwwLHsweDdlLDB4NzAsMHgwMiwweDYxLDB4ZmMsMHgxNCwweDcwLDB4MDIsMHg4MSwweGI1LDB4MjQsMHgwMiwweDYwLDB4MDIsMHhhMSwweDZjfX0sCisgezE2LDB4MmI0NiwwLHsweGVmLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQzLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZjfX0sCisgezE2LDB4MmI1NiwwLHsweGEzLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDdiLDB4NDQsMHg3YSwweGFjLDB4NzksMHgwMCwweDc4fX0sCisgezE2LDB4MmI2NiwwLHsweDAwLDB4YzMsMHgxMiwweDM3LDB4YWIsMHg3MCwweDEzLDB4OTAsMHg3ZiwweDAwLDB4NzQsMHg0NCwweGYwLDB4YTMsMHg3NCwweGFjfX0sCisgezE2LDB4MmI3NiwwLHsweGYwLDB4ZTQsMHhhMywweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMywweGYwLDB4OTAsMHg3NiwweDI3LDB4ZTAsMHg3NSwweGYwfX0sCisgezE2LDB4MmI4NiwwLHsweDBmLDB4YTQsMHgyNCwweDQzLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZjLDB4YTMsMHhlMCwweGZkfX0sCisgezE2LDB4MmI5NiwwLHsweGEzLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDdiLDB4ODAsMHg3YSwweGJiLDB4NzksMHgwMCwweDc4LDB4MDAsMHhjMywweDEyfX0sCisgezE2LDB4MmJhNiwwLHsweDM3LDB4YWIsMHg3MCwweDEzLDB4OTAsMHg3ZiwweDAwLDB4NzQsMHg4MCwweGYwLDB4YTMsMHg3NCwweGJiLDB4ZjAsMHhlNCwweGEzfX0sCisgezE2LDB4MmJiNiwwLHsweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMywweGYwLDB4OTAsMHg3NiwweDI3LDB4ZTAsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0fX0sCisgezE2LDB4MmJjNiwwLHsweDQzLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZjLDB4YTMsMHhlMCwweGZkLDB4YTMsMHhlMCwweGZlfX0sCisgezE2LDB4MmJkNiwwLHsweGEzLDB4ZTAsMHhmZiwweDdiLDB4MDAsMHg3YSwweDc3LDB4NzksMHgwMSwweDc4LDB4MDAsMHhjMywweDEyLDB4MzcsMHhhYiwweDYwfX0sCisgezE2LDB4MmJlNiwwLHsweDAyLDB4YTEsMHhhOCwweDkwLDB4N2YsMHgwMCwweGYwLDB4YTMsMHg3NCwweDc3LDB4ZjAsMHhhMywweDc0LDB4MDEsMHhmMCwweDkwfX0sCisgezE2LDB4MmJmNiwwLHsweDdmLDB4YjUsMHg3NCwweDAzLDB4ZjAsMHgyMiwweDkwLDB4NzYsMHgyNywweGUwLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQ3fX0sCisgezE2LDB4MmMwNiwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmYywweGEzLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmZSwweGEzfX0sCisgezE2LDB4MmMxNiwwLHsweGUwLDB4ZmYsMHg3YiwweDQ0LDB4N2EsMHhhYywweDc5LDB4MDAsMHg3OCwweDAwLDB4YzMsMHgxMiwweDM3LDB4YWIsMHg3MCwweDEzfX0sCisgezE2LDB4MmMyNiwwLHsweDkwLDB4N2YsMHgwMCwweDc0LDB4NDQsMHhmMCwweGEzLDB4NzQsMHhhYywweGYwLDB4ZTQsMHhhMywweGYwLDB4OTAsMHg3ZiwweGI1fX0sCisgezE2LDB4MmMzNiwwLHsweDc0LDB4MDMsMHhmMCwweDkwLDB4NzYsMHgyNywweGUwLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQ3LDB4ZjUsMHg4MiwweGU0fX0sCisgezE2LDB4MmM0NiwwLHsweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmYywweGEzLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDdifX0sCisgezE2LDB4MmM1NiwwLHsweDgwLDB4N2EsMHhiYiwweDc5LDB4MDAsMHg3OCwweDAwLDB4YzMsMHgxMiwweDM3LDB4YWIsMHg3MCwweDEzLDB4OTAsMHg3ZiwweDAwfX0sCisgezE2LDB4MmM2NiwwLHsweDc0LDB4ODAsMHhmMCwweGEzLDB4NzQsMHhiYiwweGYwLDB4ZTQsMHhhMywweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMywweGYwfX0sCisgezE2LDB4MmM3NiwwLHsweDkwLDB4NzYsMHgyNywweGUwLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQ3LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fX0sCisgezE2LDB4MmM4NiwwLHsweDgzLDB4ZTAsMHhmYywweGEzLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDdiLDB4MDAsMHg3YSwweDc3fX0sCisgezE2LDB4MmM5NiwwLHsweDc5LDB4MDEsMHg3OCwweDAwLDB4YzMsMHgxMiwweDM3LDB4YWIsMHg2MCwweDAyLDB4YTEsMHhhOCwweDkwLDB4N2YsMHgwMCwweGYwfX0sCisgezE2LDB4MmNhNiwwLHsweGEzLDB4NzQsMHg3NywweGYwLDB4YTMsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YjUsMHg3NCwweDAzLDB4ZjAsMHgyMiwweDkwfX0sCisgezE2LDB4MmNiNiwwLHsweDc2LDB4MjcsMHhlMCwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0YiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzfX0sCisgezE2LDB4MmNjNiwwLHsweGUwLDB4ZmMsMHhhMywweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHg3YiwweDQ0LDB4N2EsMHhhYywweDc5fX0sCisgezE2LDB4MmNkNiwwLHsweDAwLDB4NzgsMHgwMCwweGMzLDB4MTIsMHgzNywweGFiLDB4NzAsMHgxMywweDkwLDB4N2YsMHgwMCwweDc0LDB4NDQsMHhmMCwweGEzfX0sCisgezE2LDB4MmNlNiwwLHsweDc0LDB4YWMsMHhmMCwweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDMsMHhmMCwweDkwLDB4NzYsMHgyNywweGUwfX0sCisgezE2LDB4MmNmNiwwLHsweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0YiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmYywweGEzfX0sCisgezE2LDB4MmQwNiwwLHsweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHg3YiwweDgwLDB4N2EsMHhiYiwweDc5LDB4MDAsMHg3OCwweDAwfX0sCisgezE2LDB4MmQxNiwwLHsweGMzLDB4MTIsMHgzNywweGFiLDB4NzAsMHgxMywweDkwLDB4N2YsMHgwMCwweDc0LDB4ODAsMHhmMCwweGEzLDB4NzQsMHhiYiwweGYwfX0sCisgezE2LDB4MmQyNiwwLHsweGU0LDB4YTMsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDMsMHhmMCwweDkwLDB4NzYsMHgyNywweGUwLDB4NzUsMHhmMCwweDBmfX0sCisgezE2LDB4MmQzNiwwLHsweGE0LDB4MjQsMHg0YiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHhmYywweGEzLDB4ZTAsMHhmZCwweGEzfX0sCisgezE2LDB4MmQ0NiwwLHsweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHg3YiwweDAwLDB4N2EsMHg3NywweDc5LDB4MDEsMHg3OCwweDAwLDB4YzMsMHgxMiwweDM3fX0sCisgezE2LDB4MmQ1NiwwLHsweGFiLDB4NzAsMHg0ZiwweDkwLDB4N2YsMHgwMCwweGYwLDB4YTMsMHg3NCwweDc3LDB4ZjAsMHhhMywweDc0LDB4MDEsMHhmMCwweDkwfX0sCisgezE2LDB4MmQ2NiwwLHsweDdmLDB4YjUsMHg3NCwweDAzLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmfX0sCisgezE2LDB4MmQ3NiwwLHsweGU5LDB4ZTAsMHgyNCwweDdmLDB4NzAsMHgxZSwweDkwLDB4NzYsMHgyNywweGUwLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDRmfX0sCisgezE2LDB4MmQ4NiwwLHsweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDdmLDB4MDAsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0fX0sCisgezE2LDB4MmQ5NiwwLHsweDAxLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0fX0sCisgeyAzLDB4MmRhNiwwLHsweDAxLDB4ZjAsMHgyMn19LAorIHsxNiwweDJkYTksMCx7MHhlNCwweDkwLDB4NzYsMHgzNiwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZSwweGY1LDB4ODIsMHhlNH19LAorIHsxNiwweDJkYjksMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDEsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBmLDB4ZjUsMHg4Mn19LAorIHsxNiwweDJkYzksMCx7MHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMSwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MTAsMHhmNX19LAorIHsxNiwweDJkZDksMCx7MHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZn19LAorIHsxNiwweDJkZTksMCx7MHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MTAsMHhmMH19LAorIHsxNiwweDJkZjksMCx7MHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwNX19LAorIHsxNiwweDJlMDksMCx7MHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDEwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNH19LAorIHsxNiwweDJlMTksMCx7MHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGUsMHhmNX19LAorIHsxNiwweDJlMjksMCx7MHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAyLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZn19LAorIHsxNiwweDJlMzksMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDIsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNH19LAorIHsxNiwweDJlNDksMCx7MHgxMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMH19LAorIHsxNiwweDJlNTksMCx7MHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NH19LAorIHsxNiwweDJlNjksMCx7MHgwMSwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4M319LAorIHsxNiwweDJlNzksMCx7MHg3NCwweDAzLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgxMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX19LAorIHsxNiwweDJlODksMCx7MHg4MywweGU0LDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNH19LAorIHsxNiwweDJlOTksMCx7MHgwZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgxMCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNH19LAorIHsxNiwweDJlYTksMCx7MHgyNCwweDBmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDA2LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwM319LAorIHsxNiwweDJlYjksMCx7MHhhNCwweDI0LDB4MTAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMH19LAorIHsxNiwweDJlYzksMCx7MHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX19LAorIHsxNiwweDJlZDksMCx7MHg4MywweDc0LDB4MDIsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NX19LAorIHsxNiwweDJlZTksMCx7MHhmNSwweDgzLDB4NzQsMHgwNCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MTAsMHhmNSwweDgyLDB4ZTQsMHgzNH19LAorIHsxNiwweDJlZjksMCx7MHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwM319LAorIHsxNiwweDJmMDksMCx7MHhhNCwweDI0LDB4MGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDIsMHhmMCwweGVmLDB4NzUsMHhmMH19LAorIHsxNiwweDJmMTksMCx7MHgwMywweGE0LDB4MjQsMHgwZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwOCwweGYwLDB4ZWYsMHg3NX19LAorIHsxNiwweDJmMjksMCx7MHhmMCwweDAzLDB4YTQsMHgyNCwweDEwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDA0LDB4ZjAsMHg5MH19LAorIHsxNiwweDJmMzksMCx7MHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZSwweGY1LDB4ODIsMHhlNH19LAorIHsxNiwweDJmNDksMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDIsMHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBmLDB4ZjUsMHg4Mn19LAorIHsxNiwweDJmNTksMCx7MHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwYSwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MTAsMHhmNX19LAorIHsxNiwweDJmNjksMCx7MHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDA0LDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMH19LAorIHsxNiwweDJmNzksMCx7MHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgwZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMn19LAorIHsxNiwweDJmODksMCx7MHhmMCwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDBmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NH19LAorIHsxNiwweDJmOTksMCx7MHgwOSwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MTAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4M319LAorIHsxNiwweDJmYTksMCx7MHg3NCwweDA0LDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNH19LAorIHsxNiwweDJmYjksMCx7MHgwZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMiwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNH19LAorIHsxNiwweDJmYzksMCx7MHgyNCwweDBmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDA3LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwM319LAorIHsxNCwweDJmZDksMCx7MHhhNCwweDI0LDB4MTAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4MDQsMHhmMCwweDIyfX0sCisgezE2LDB4MmZlNywwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweGQyLDB4MjYsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDAxfX0sCisgeyA4LDB4MmZmNywwLHsweGYwLDB4ZDAsMHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7IDEsMHgyZmZmLDAsezB4MzJ9fSwKKyB7MTYsMHgzMDAwLDAsezB4OTAsMHg3ZiwweGI2LDB4ZTAsMHgyMCwweGUxLDB4MDIsMHhjMiwweDNkLDB4ZDIsMHgzNiwweDIwLDB4MzYsMHgwMiwweDQxLDB4NmV9fSwKKyB7MTYsMHgzMDEwLDAsezB4MzAsMHgzZCwweDAyLDB4NDEsMHg2ZSwweDkwLDB4ODAsMHgwNywweGUwLDB4NjAsMHgwNCwweGQyLDB4MzYsMHg4MCwweDAyLDB4YzJ9fSwKKyB7MTYsMHgzMDIwLDAsezB4MzYsMHgyMCwweDM2LDB4MDIsMHg0MSwweDJlLDB4ZDIsMHgzNSwweGU0LDB4ZjUsMHgxYSwweDkwLDB4ODAsMHgwNCwweGUwLDB4ZjV9fSwKKyB7MTYsMHgzMDMwLDAsezB4MTksMHg3NCwweDA4LDB4MjUsMHgwZSwweGY4LDB4YTYsMHgxOSwweDg1LDB4MTksMHgxOCwweGU1LDB4MTgsMHgyMCwweGU3LDB4MDR9fSwKKyB7MTYsMHgzMDQwLDAsezB4ZDIsMHgzOCwweDgwLDB4MDIsMHhjMiwweDM4LDB4MzAsMHgzOCwweDAyLDB4MjEsMHhkNCwweGU0LDB4ZjUsMHgxNiwweGU1LDB4MTl9fSwKKyB7MTYsMHgzMDUwLDAsezB4YjQsMHhmMCwweDBjLDB4ZDIsMHgzOSwweDc1LDB4MDgsMHgwNCwweDc1LDB4MDksMHhmMCwweDA1LDB4MGUsMHg4MCwweDAyLDB4MDV9fSwKKyB7MTYsMHgzMDYwLDAsezB4MTYsMHhlNSwweDE5LDB4NjQsMHhmNywweDcwLDB4M2QsMHhjMiwweDM5LDB4ZTUsMHgwZSwweDI0LDB4ZmUsMHg2MCwweDE3LDB4MTR9fSwKKyB7MTYsMHgzMDcwLDAsezB4NjAsMHgyMiwweDI0LDB4MDMsMHg3MCwweDI5LDB4NzUsMHgwOCwweDA1LDB4NzUsMHgwOSwweGY3LDB4ZTQsMHhmNSwweDBhLDB4ZjV9fSwKKyB7MTYsMHgzMDgwLDAsezB4MGIsMHg3NSwweDBlLDB4MDQsMHg4MCwweDIwLDB4NzUsMHgwOCwweDA2LDB4NzUsMHgwYSwweGY3LDB4ZTQsMHhmNSwweDBiLDB4NzV9fSwKKyB7MTYsMHgzMDkwLDAsezB4MGUsMHgwNCwweDgwLDB4MTIsMHg3NSwweDA4LDB4MDcsMHg3NSwweDBiLDB4ZjcsMHg3NSwweDBlLDB4MDQsMHg4MCwweDA3LDB4MTJ9fSwKKyB7MTYsMHgzMGEwLDAsezB4NDgsMHhmMywweDgwLDB4MDIsMHgwNSwweDE2LDB4ZTUsMHgxOSwweDU0LDB4ZjgsMHg2NCwweGY4LDB4NzAsMHgzYiwweGMyLDB4MzV9fSwKKyB7MTYsMHgzMGIwLDAsezB4ZTUsMHgxOSwweDI0LDB4MDcsMHg2MCwweDBjLDB4MjQsMHhmYywweDYwLDB4MDgsMHgyNCwweDA1LDB4MjQsMHhmOCwweDUwLDB4MDZ9fSwKKyB7MTYsMHgzMGMwLDAsezB4ODAsMHgwOCwweGQyLDB4M2EsMHg4MCwweDA2LDB4YzIsMHgzYSwweDgwLDB4MDIsMHhkMiwweDNhLDB4NzUsMHgxYSwweDAxLDB4MjB9fSwKKyB7MTYsMHgzMGQwLDAsezB4M2EsMHgxOSwweDkwLDB4N2UsMHg4MCwweDc0LDB4MGYsMHhmMCwweGEzLDB4ZTUsMHgxOSwweGYwLDB4ZTQsMHhhMywweGYwLDB4YTN9fSwKKyB7MTYsMHgzMGUwLDAsezB4ZjAsMHg5MCwweDdmLDB4YjcsMHg3NCwweDA0LDB4ZjAsMHg4MCwweDAyLDB4MDUsMHgxNiwweDIwLDB4MzksMHg2ZCwweGU1LDB4MTl9fSwKKyB7MTYsMHgzMGYwLDAsezB4NjQsMHhmNywweDYwLDB4NjcsMHhlNSwweDFhLDB4NzAsMHg2MywweGU1LDB4MTgsMHg1NCwweGYwLDB4NjQsMHhmMCwweDcwLDB4NTl9fSwKKyB7MTYsMHgzMTAwLDAsezB4ODUsMHgxOCwweDE5LDB4ZjUsMHgwZSwweGU1LDB4MTksMHgyNCwweDBmLDB4NjAsMHgxYiwweDI0LDB4ZmUsMHg2MCwweDE3LDB4MjR9fSwKKyB7MTYsMHgzMTEwLDAsezB4ZmQsMHg2MCwweDIyLDB4MTQsMHg2MCwweDFmLDB4MjQsMHgwNSwweDcwLDB4MmYsMHg3NSwweDA4LDB4MDMsMHgwNSwweDBlLDB4ODV9fSwKKyB7MTYsMHgzMTIwLDAsezB4MTgsMHgwOSwweGQyLDB4MzcsMHg4MCwweDI4LDB4NzUsMHgwOCwweDAyLDB4MDUsMHgwZSwweDg1LDB4MTgsMHgwOSwweDc1LDB4MTR9fSwKKyB7MTYsMHgzMTMwLDAsezB4MDEsMHhkMiwweDM3LDB4ODAsMHgxOSwweDc1LDB4MDgsMHgwNSwweDA1LDB4MGUsMHg4NSwweDE4LDB4MDksMHhlNCwweGY1LDB4MGF9fSwKKyB7MTYsMHgzMTQwLDAsezB4ZjUsMHgwYiwweDc1LDB4MGUsMHgwMywweGQyLDB4MzcsMHg4MCwweDA1LDB4MTIsMHg0OCwweGYzLDB4YzIsMHgzNSwweDMwLDB4MzV9fSwKKyB7MTYsMHgzMTUwLDAsezB4MGEsMHg4NSwweDA4LDB4MTMsMHg4NSwweDE4LDB4MTIsMHg4MCwweDAyLDB4MDUsMHgxNiwweDg1LDB4MTgsMHgxOSwweGU1LDB4MTZ9fSwKKyB7MTYsMHgzMTYwLDAsezB4NjQsMHgwNCwweDcwLDB4NjIsMHhmNSwweDBlLDB4ZTUsMHgxOSwweDU0LDB4ZjAsMHhmNSwweDE5LDB4ZjUsMHgxNSwweDg1LDB4MTh9fSwKKyB7MTYsMHgzMTcwLDAsezB4MTksMHhlNSwweDE1LDB4MjQsMHg3MCwweDYwLDB4MTgsMHgyNCwweGYwLDB4NjAsMHgxNCwweDI0LDB4ZjAsMHg2MCwweDEwLDB4MjR9fSwKKyB7MTYsMHgzMTgwLDAsezB4ZjAsMHg2MCwweDFlLDB4MjQsMHhmMCwweDYwLDB4MWEsMHgyNCwweGYwLDB4NjAsMHgwNCwweDI0LDB4NjAsMHg3MCwweDI3LDB4ZTV9fSwKKyB7MTYsMHgzMTkwLDAsezB4MTUsMHhjNCwweDU0LDB4MGYsMHhmNSwweDE5LDB4ZjUsMHgwOCwweDA1LDB4MGUsMHg4NSwweDE4LDB4MDksMHhkMiwweDM3LDB4ODB9fSwKKyB7MTYsMHgzMWEwLDAsezB4MWEsMHhlNSwweDE1LDB4YzQsMHg1NCwweDBmLDB4ZjUsMHgxOSwweGY1LDB4MDgsMHgwNSwweDBlLDB4ODUsMHgxOCwweDA5LDB4NzV9fSwKKyB7MTYsMHgzMWIwLDAsezB4MTQsMHgwMSwweGQyLDB4MzcsMHg4MCwweDA1LDB4MTIsMHg0OCwweGYzLDB4YzIsMHgzNSwweDMwLDB4MzUsMHgwYSwweDg1LDB4MTl9fSwKKyB7MTYsMHgzMWMwLDAsezB4MTMsMHg4NSwweDE4LDB4MTIsMHg4MCwweDAyLDB4MDUsMHgxNiwweGU1LDB4MTYsMHhkMywweDk0LDB4MDUsMHg0MCwweDU3LDB4MTJ9fSwKKyB7MTYsMHgzMWQwLDAsezB4NDgsMHhmMywweDgwLDB4NTIsMHgzMCwweDM5LDB4MTcsMHhlNSwweDBlLDB4NzAsMHgwYSwweDg1LDB4MDgsMHgwOSwweDc1LDB4MDh9fSwKKyB7MTYsMHgzMWUwLDAsezB4MDQsMHgwNSwweDBlLDB4ODAsMHg0MSwweDc0LDB4MDgsMHgyNSwweDBlLDB4ZjgsMHhhNiwweDE5LDB4ODAsMHgzOCwweDIwLDB4Mzd9fSwKKyB7MTYsMHgzMWYwLDAsezB4MmEsMHhlNSwweDBlLDB4YjQsMHgwMSwweDBmLDB4ODUsMHgwOCwweDBhLDB4ODUsMHgwOSwweDBiLDB4ODUsMHgxMywweDA4LDB4ODV9fSwKKyB7MTYsMHgzMjAwLDAsezB4MTIsMHgwOSwweDc1LDB4MGUsMHgwNCwweGU1LDB4MTQsMHhiNCwweDAxLDB4MWMsMHg4NSwweDA4LDB4MGEsMHhlNCwweGY1LDB4MGJ9fSwKKyB7MTYsMHgzMjEwLDAsezB4ODUsMHgxMywweDA4LDB4ODUsMHgxMiwweDA5LDB4NzUsMHgwZSwweDA0LDB4ODAsMHgwYiwweGU1LDB4MTQsMHhiNCwweDAxLDB4MDZ9fSwKKyB7MTYsMHgzMjIwLDAsezB4ZTQsMHhmNSwweDBiLDB4NzUsMHgwZSwweDA0LDB4ZTQsMHhmNSwweDFhLDB4MzAsMHgzNSwweDAyLDB4MDUsMHgwZSwweGU1LDB4MGV9fSwKKyB7MTYsMHgzMjMwLDAsezB4ZDMsMHg5NCwweDAzLDB4NTAsMHgwMiwweDAxLDB4MGIsMHhjMiwweDM3LDB4ZTQsMHhmNSwweDBlLDB4ZjUsMHgxMCwweGMyLDB4MzZ9fSwKKyB7MTYsMHgzMjQwLDAsezB4ZDIsMHgzZCwweGY1LDB4MTQsMHg3NCwweDA4LDB4MjUsMHgxMCwweGY4LDB4ZTYsMHhmZiwweDc0LDB4ODAsMHgyNSwweDEwLDB4ZjV9fSwKKyB7MTYsMHgzMjUwLDAsezB4ODIsMHhlNCwweDM0LDB4N2UsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDc0LDB4MDgsMHgyNSwweDEwLDB4ZjgsMHhlNCwweGY2LDB4MDV9fSwKKyB7MTUsMHgzMjYwLDAsezB4MTAsMHhlNSwweDEwLDB4YjQsMHgwNCwweGRlLDB4OTAsMHg3ZiwweGI3LDB4NzQsMHgwNCwweGYwLDB4MDEsMHgwYiwweDIyfX0sCisgezE2LDB4MzI2ZiwwLHsweDkwLDB4NzYsMHgxOCwweGUwLDB4ZmYsMHg2NCwweDA1LDB4NzAsMHg0MiwweDkwLDB4NzUsMHhhYiwweGUwLDB4YjQsMHgwMSwweDE5fX0sCisgezE2LDB4MzI3ZiwwLHsweDkwLDB4NzIsMHgzNywweDc0LDB4MDEsMHhmMCwweGU0LDB4OTAsMHg4MCwweDIwLDB4ZjAsMHg5MCwweDgwLDB4MzEsMHhmMCwweDkwfX0sCisgezE2LDB4MzI4ZiwwLHsweDgwLDB4MjgsMHhmMCwweDkwLDB4ODAsMHgzOSwweGYwLDB4ODAsMHgyMiwweGU0LDB4OTAsMHg3MiwweDM3LDB4ZjAsMHg5MCwweDc1fX0sCisgezE2LDB4MzI5ZiwwLHsweGFkLDB4ZTAsMHg5MCwweDcyLDB4MmIsMHhmMCwweGUwLDB4MjQsMHg4MCwweGYwLDB4ZTAsMHg5MCwweDgwLDB4MjAsMHhmMCwweDkwfX0sCisgezE2LDB4MzJhZiwwLHsweDgwLDB4MzEsMHhmMCwweDkwLDB4ODAsMHgyOCwweGYwLDB4OTAsMHg4MCwweDM5LDB4ZjAsMHhlZiwweDY0LDB4MDYsMHg2MCwweDAyfX0sCisgezE2LDB4MzJiZiwwLHsweDgxLDB4OTksMHg5MCwweDcyLDB4MzksMHg3NCwweDA0LDB4ZjAsMHg5MCwweDcyLDB4MzksMHhlMCwweGZmLDB4MjQsMHhmZSwweDkwfX0sCisgezE2LDB4MzJjZiwwLHsweDcyLDB4MDQsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1fX0sCisgezE2LDB4MzJkZiwwLHsweDgzLDB4ZTAsMHg2NCwweDAxLDB4NzAsMHg1NCwweDkwLDB4NzIsMHgzNiwweDA0LDB4ZjAsMHg5MCwweDcyLDB4MDQsMHhlMCwweGZmfX0sCisgezE2LDB4MzJlZiwwLHsweDI0LDB4ZmQsMHg2MCwweDI4LDB4MjQsMHhmZSwweDYwLDB4MjQsMHgyNCwweDAzLDB4MjQsMHhmYiwweDUwLDB4MDQsMHg2MCwweDFjfX0sCisgezE2LDB4MzJmZiwwLHsweDgxLDB4OGMsMHg3NCwweDIwLDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg3NCwweDI4fX0sCisgezE2LDB4MzMwZiwwLHsweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlNCwweGYwLDB4ODEsMHg4YywweDkwLDB4NzIsMHgwNCwweGUwfX0sCisgezE2LDB4MzMxZiwwLHsweGZmLDB4MjQsMHgzMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDc0LDB4MzgsMHgyZiwweGY1fX0sCisgezE2LDB4MzMyZiwwLHsweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg4MSwweDhjLDB4ZTQsMHg5MCwweDcyLDB4MzYsMHhmMCwweDkwfX0sCisgezE2LDB4MzMzZiwwLHsweDcyLDB4MzksMHhlMCwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzfX0sCisgezE2LDB4MzM0ZiwwLHsweGUwLDB4ZmYsMHg3ZSwweDAwLDB4OTAsMHg3NSwweDBjLDB4ZWUsMHhmMCwweGEzLDB4ZWYsMHhmMCwweDcwLDB4MDYsMHg5MCwweDcyfX0sCisgezE2LDB4MzM1ZiwwLHsweDAyLDB4NzQsMHgzYiwweGYwLDB4OTAsMHg3NSwweDBjLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDY0LDB4ODAsMHg0ZSwweDcwfX0sCisgezE2LDB4MzM2ZiwwLHsweDA0LDB4OTAsMHg3MiwweDAyLDB4ZjAsMHhlZiwweDRlLDB4NzAsMHgwMiwweDgxLDB4MzUsMHhlZiwweDY0LDB4ODAsMHg0ZSwweDcwfX0sCisgezE2LDB4MzM3ZiwwLHsweDAyLDB4ODEsMHgzNSwweGVmLDB4ZjgsMHhlNCwweDkwLDB4NzUsMHgwZCwweGYwLDB4ZTgsMHg5MCwweDc1LDB4MGMsMHhmMCwweDkwfX0sCisgezE2LDB4MzM4ZiwwLHsweDcyLDB4MzQsMHhlMCwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzfX0sCisgezE2LDB4MzM5ZiwwLHsweGUwLDB4ZmYsMHg5MCwweDcyLDB4MDIsMHhmMCwweDkwLDB4NzUsMHgwZCwweGUwLDB4MmYsMHhmMCwweDkwLDB4NzUsMHgwYywweGUwfX0sCisgezE2LDB4MzNhZiwwLHsweDM0LDB4MDAsMHhmMCwweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHhlNCwweGZjLDB4ZmQsMHg3YiwweGQ2LDB4N2EsMHhhNSwweGY5fX0sCisgezE2LDB4MzNiZiwwLHsweGY4LDB4ZDMsMHgxMiwweDM3LDB4OTUsMHg0MCwweDBhLDB4OTAsMHg3NSwweDBjLDB4NzQsMHhhNSwweGYwLDB4YTMsMHg3NCwweGQ2fX0sCisgezE2LDB4MzNjZiwwLHsweGYwLDB4OTAsMHg3NSwweDBkLDB4ZTAsMHgyNCwweDJhLDB4ZjAsMHg5MCwweDc1LDB4MGMsMHhlMCwweDM0LDB4NWEsMHhmMCwweGUwfX0sCisgezE2LDB4MzNkZiwwLHsweGZlLDB4YTMsMHhlMCwweDc4LDB4MDUsMHhjZSwweGEyLDB4ZTcsMHgxMywweGNlLDB4MTMsMHhkOCwweGY4LDB4ZmYsMHg5MCwweDc1fX0sCisgezE2LDB4MzNlZiwwLHsweDBjLDB4ZWUsMHhmMCwweGEzLDB4ZWYsMHhmMCwweDkwLDB4NzIsMHgyYywweGVlLDB4ZjAsMHhhMywweGVmLDB4ZjAsMHhkMywweDk0fX0sCisgezE2LDB4MzNmZiwwLHsweGQyLDB4ZWUsMHg2NCwweDgwLDB4OTQsMHg4MiwweDQwLDB4MGEsMHg5MCwweDcyLDB4MmMsMHg3NCwweDAyLDB4ZjAsMHhhMywweDc0fX0sCisgezE2LDB4MzQwZiwwLHsweGQyLDB4ZjAsMHhjMywweDkwLDB4NzIsMHgyYywweGUwLDB4NjQsMHg4MCwweDk0LDB4ODAsMHg1MCwweDA0LDB4ZTQsMHhmMCwweGEzfX0sCisgezE2LDB4MzQxZiwwLHsweGYwLDB4OTAsMHg3MiwweDJjLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHgyNCwweDNhLDB4ZjUsMHg4MiwweGVlLDB4MzQsMHg3MiwweGY1fX0sCisgezE2LDB4MzQyZiwwLHsweDgzLDB4ZTAsMHg5MCwweDcyLDB4MDIsMHhmMCwweDkwLDB4NzIsMHgwNCwweGUwLDB4ZmYsMHgyNCwweGZkLDB4NjAsMHgyZCwweDI0fX0sCisgezE2LDB4MzQzZiwwLHsweGZlLDB4NjAsMHgyOSwweDI0LDB4MDMsMHgyNCwweGZiLDB4NTAsMHgwNCwweDYwLDB4MjEsMHg4MCwweDQwLDB4OTAsMHg3MiwweDAyfX0sCisgezE2LDB4MzQ0ZiwwLHsweGUwLDB4ZmUsMHg3NCwweDIwLDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHg3NCwweDI4fX0sCisgezE2LDB4MzQ1ZiwwLHsweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlZSwweGYwLDB4ODAsMHgyMSwweDkwLDB4NzIsMHgwMiwweGUwfX0sCisgezE2LDB4MzQ2ZiwwLHsweGZmLDB4OTAsMHg3MiwweDA0LDB4ZTAsMHhmZSwweDI0LDB4MzAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDgwLDB4ZjUsMHg4MywweGVmfX0sCisgezE2LDB4MzQ3ZiwwLHsweGYwLDB4NzQsMHgzOCwweDJlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlZiwweGYwLDB4OTAsMHg3MiwweDM5fX0sCisgezExLDB4MzQ4ZiwwLHsweGUwLDB4MDQsMHhmMCwweGUwLDB4NjQsMHgwYSwweDYwLDB4MDIsMHg0MSwweGM3LDB4MjJ9fSwKKyB7MTYsMHgzNDlhLDAsezB4OTAsMHg3NiwweDE4LDB4ZTAsMHhmZiwweGI0LDB4MDUsMHgyMywweDkwLDB4NzIsMHgzNywweGUwLDB4NzAsMHgxZCwweDkwLDB4NzV9fSwKKyB7MTYsMHgzNGFhLDAsezB4YWQsMHhlMCwweDkwLDB4NzIsMHgyYiwweGYwLDB4ZTAsMHgyNCwweDgwLDB4ZjAsMHhlMCwweDkwLDB4ODAsMHgyMCwweGYwLDB4OTB9fSwKKyB7MTYsMHgzNGJhLDAsezB4ODAsMHgzMSwweGYwLDB4OTAsMHg4MCwweDI4LDB4ZjAsMHg5MCwweDgwLDB4MzksMHhmMCwweGVmLDB4NjQsMHgwNiwweDYwLDB4MDJ9fSwKKyB7MTYsMHgzNGNhLDAsezB4YzEsMHg5MSwweDkwLDB4NzIsMHgzNiwweGUwLDB4NjAsMHgwMiwweGMxLDB4OTEsMHg5MCwweDc2LDB4NDAsMHhlMCwweDcwLDB4MzF9fSwKKyB7MTYsMHgzNGRhLDAsezB4OTAsMHg3MiwweDAzLDB4NzQsMHgwMywweGYwLDB4OTAsMHg3MiwweDAzLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjR9fSwKKyB7MTYsMHgzNGVhLDAsezB4YWEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDcyLDB4MjksMHhlMCwweGZkLDB4ZWV9fSwKKyB7MTYsMHgzNGZhLDAsezB4NmQsMHg2MCwweDBlLDB4ZWYsMHhjMywweDk0LDB4MGEsMHg1MCwweDA4LDB4OTAsMHg3MiwweDAzLDB4ZTAsMHgwNCwweGYwLDB4ODB9fSwKKyB7MTYsMHgzNTBhLDAsezB4ZDUsMHg5MCwweDcyLDB4MzksMHg3NCwweDA0LDB4ZjAsMHg5MCwweDc2LDB4NDAsMHhlMCwweDcwLDB4MDgsMHg5MCwweDcyLDB4MDN9fSwKKyB7MTYsMHgzNTFhLDAsezB4ZTAsMHg5MCwweDcyLDB4MzksMHhmMCwweDkwLDB4NzIsMHgzOSwweGUwLDB4ZmQsMHgyNCwweGZlLDB4OTAsMHg3MiwweDJhLDB4ZjB9fSwKKyB7MTYsMHgzNTJhLDAsezB4ZWQsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmZ9fSwKKyB7MTYsMHgzNTNhLDAsezB4N2UsMHgwMCwweDkwLDB4NzUsMHgwYywweGVlLDB4ZjAsMHhhMywweGVmLDB4ZjAsMHg3MCwweDA2LDB4OTAsMHg3MiwweDAyLDB4NzR9fSwKKyB7MTYsMHgzNTRhLDAsezB4ODAsMHhmMCwweDkwLDB4NzUsMHgwYywweGUwLDB4ZmUsMHhhMywweGUwLDB4ZmYsMHg2NCwweDgwLDB4NGUsMHg3MCwweDA0LDB4OTB9fSwKKyB7MTYsMHgzNTVhLDAsezB4NzIsMHgwMiwweGYwLDB4ZWYsMHg0ZSwweDcwLDB4MDIsMHhjMSwweDFiLDB4ZWYsMHg2NCwweDgwLDB4NGUsMHg3MCwweDAyLDB4YzF9fSwKKyB7MTYsMHgzNTZhLDAsezB4MWIsMHhlZiwweGY4LDB4ZTQsMHg5MCwweDc1LDB4MGQsMHhmMCwweGU4LDB4OTAsMHg3NSwweDBjLDB4ZjAsMHhlZCwweDc1LDB4ZjB9fSwKKyB7MTYsMHgzNTdhLDAsezB4MGEsMHhhNCwweDI0LDB4YWMsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmYsMHg5MCwweDcyLDB4MDJ9fSwKKyB7MTYsMHgzNThhLDAsezB4ZjAsMHg5MCwweDc1LDB4MGQsMHhlMCwweDJmLDB4ZjAsMHg5MCwweDc1LDB4MGMsMHhlMCwweDM0LDB4MDAsMHhmMCwweGUwLDB4ZmV9fSwKKyB7MTYsMHgzNTlhLDAsezB4YTMsMHhlMCwweGZmLDB4ZTQsMHhmYywweGZkLDB4N2IsMHhkNiwweDdhLDB4YTUsMHhmOSwweGY4LDB4ZDMsMHgxMiwweDM3LDB4OTV9fSwKKyB7MTYsMHgzNWFhLDAsezB4NDAsMHgwYSwweDkwLDB4NzUsMHgwYywweDc0LDB4YTUsMHhmMCwweGEzLDB4NzQsMHhkNiwweGYwLDB4OTAsMHg3NSwweDBkLDB4ZTB9fSwKKyB7MTYsMHgzNWJhLDAsezB4MjQsMHgyYSwweGYwLDB4OTAsMHg3NSwweDBjLDB4ZTAsMHgzNCwweDVhLDB4ZjAsMHhlMCwweGZlLDB4YTMsMHhlMCwweDc4LDB4MDV9fSwKKyB7MTYsMHgzNWNhLDAsezB4Y2UsMHhhMiwweGU3LDB4MTMsMHhjZSwweDEzLDB4ZDgsMHhmOCwweGZmLDB4OTAsMHg3NSwweDBjLDB4ZWUsMHhmMCwweGEzLDB4ZWZ9fSwKKyB7MTYsMHgzNWRhLDAsezB4ZjAsMHg5MCwweDcyLDB4MmMsMHhlZSwweGYwLDB4YTMsMHhlZiwweGYwLDB4ZDMsMHg5NCwweGQyLDB4ZWUsMHg2NCwweDgwLDB4OTR9fSwKKyB7MTYsMHgzNWVhLDAsezB4ODIsMHg0MCwweDBhLDB4OTAsMHg3MiwweDJjLDB4NzQsMHgwMiwweGYwLDB4YTMsMHg3NCwweGQyLDB4ZjAsMHhjMywweDkwLDB4NzJ9fSwKKyB7MTYsMHgzNWZhLDAsezB4MmMsMHhlMCwweDY0LDB4ODAsMHg5NCwweDgwLDB4NTAsMHgwNCwweGU0LDB4ZjAsMHhhMywweGYwLDB4OTAsMHg3MiwweDJjLDB4ZTB9fSwKKyB7MTYsMHgzNjBhLDAsezB4ZmUsMHhhMywweGUwLDB4MjQsMHgzYSwweGY1LDB4ODIsMHhlZSwweDM0LDB4NzIsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDcyLDB4MDJ9fSwKKyB7MTYsMHgzNjFhLDAsezB4ZjAsMHg5MCwweDcyLDB4MmEsMHhlMCwweGZmLDB4MjQsMHhmZCwweDYwLDB4MmQsMHgyNCwweGZlLDB4NjAsMHgyOSwweDI0LDB4MDN9fSwKKyB7MTYsMHgzNjJhLDAsezB4MjQsMHhmYiwweDUwLDB4MDQsMHg2MCwweDIxLDB4ODAsMHg0MCwweDkwLDB4NzIsMHgwMiwweGUwLDB4ZmUsMHg3NCwweDIwLDB4MmZ9fSwKKyB7MTYsMHgzNjNhLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlZSwweGYwLDB4NzQsMHgyOCwweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzR9fSwKKyB7MTYsMHgzNjRhLDAsezB4ODAsMHhmNSwweDgzLDB4ZWUsMHhmMCwweDgwLDB4MjEsMHg5MCwweDcyLDB4MDIsMHhlMCwweGZmLDB4OTAsMHg3MiwweDJhLDB4ZTB9fSwKKyB7MTYsMHgzNjVhLDAsezB4ZmUsMHgyNCwweDMwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlZiwweGYwLDB4NzQsMHgzOCwweDJlLDB4ZjV9fSwKKyB7MTYsMHgzNjZhLDAsezB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzLDB4ZWYsMHhmMCwweDkwLDB4NzYsMHg0MCwweGUwLDB4NzAsMHgwNiwweDkwLDB4NzJ9fSwKKyB7MTYsMHgzNjdhLDAsezB4MzksMHg3NCwweDBhLDB4ZjAsMHg5MCwweDcyLDB4MzksMHhlMCwweDA0LDB4ZjAsMHhlMCwweGMzLDB4OTQsMHgwYSwweDUwLDB4MDJ9fSwKKyB7IDgsMHgzNjhhLDAsezB4YTEsMHgxMSwweGU0LDB4OTAsMHg3NiwweDQwLDB4ZjAsMHgyMn19LAorIHsxNiwweDM2OTIsMCx7MHhiYiwweDAxLDB4MDYsMHg4OSwweDgyLDB4OGEsMHg4MywweGUwLDB4MjIsMHg1MCwweDAyLDB4ZTcsMHgyMiwweGJiLDB4ZmUsMHgwMn19LAorIHsgOSwweDM2YTIsMCx7MHhlMywweDIyLDB4ODksMHg4MiwweDhhLDB4ODMsMHhlNCwweDkzLDB4MjJ9fSwKKyB7MTYsMHgzNmFiLDAsezB4YmIsMHgwMSwweDBjLDB4ZTUsMHg4MiwweDI5LDB4ZjUsMHg4MiwweGU1LDB4ODMsMHgzYSwweGY1LDB4ODMsMHhlMCwweDIyLDB4NTB9fSwKKyB7MTYsMHgzNmJiLDAsezB4MDYsMHhlOSwweDI1LDB4ODIsMHhmOCwweGU2LDB4MjIsMHhiYiwweGZlLDB4MDYsMHhlOSwweDI1LDB4ODIsMHhmOCwweGUyLDB4MjJ9fSwKKyB7MTMsMHgzNmNiLDAsezB4ZTUsMHg4MiwweDI5LDB4ZjUsMHg4MiwweGU1LDB4ODMsMHgzYSwweGY1LDB4ODMsMHhlNCwweDkzLDB4MjJ9fSwKKyB7MTYsMHgzNmQ4LDAsezB4YzIsMHhkNSwweGVjLDB4MzAsMHhlNywweDA5LDB4YjIsMHhkNSwweGU0LDB4YzMsMHg5ZCwweGZkLDB4ZTQsMHg5YywweGZjLDB4ZWV9fSwKKyB7MTYsMHgzNmU4LDAsezB4MzAsMHhlNywweDE1LDB4YjIsMHhkNSwweGU0LDB4YzMsMHg5ZiwweGZmLDB4ZTQsMHg5ZSwweGZlLDB4MTIsMHgzOCwweDFmLDB4YzN9fSwKKyB7MTYsMHgzNmY4LDAsezB4ZTQsMHg5ZCwweGZkLDB4ZTQsMHg5YywweGZjLDB4ODAsMHgwMywweDEyLDB4MzgsMHgxZiwweDMwLDB4ZDUsMHgwNywweGMzLDB4ZTR9fSwKKyB7IDYsMHgzNzA4LDAsezB4OWYsMHhmZiwweGU0LDB4OWUsMHhmZSwweDIyfX0sCisgezE2LDB4MzcwZSwwLHsweGJiLDB4MDEsMHgxMCwweGU1LDB4ODIsMHgyOSwweGY1LDB4ODIsMHhlNSwweDgzLDB4M2EsMHhmNSwweDgzLDB4ZTAsMHhmNSwweGYwfX0sCisgezE2LDB4MzcxZSwwLHsweGEzLDB4ZTAsMHgyMiwweDUwLDB4MDksMHhlOSwweDI1LDB4ODIsMHhmOCwweDg2LDB4ZjAsMHgwOCwweGU2LDB4MjIsMHhiYiwweGZlfX0sCisgezE2LDB4MzcyZSwwLHsweDBhLDB4ZTksMHgyNSwweDgyLDB4ZjgsMHhlMiwweGY1LDB4ZjAsMHgwOCwweGUyLDB4MjIsMHhlNSwweDgzLDB4MmEsMHhmNSwweDgzfX0sCisgeyA4LDB4MzczZSwwLHsweGU5LDB4OTMsMHhmNSwweGYwLDB4YTMsMHhlOSwweDkzLDB4MjJ9fSwKKyB7MTYsMHgzNzQ2LDAsezB4ZTgsMHg4ZiwweGYwLDB4YTQsMHhjYywweDhiLDB4ZjAsMHhhNCwweDJjLDB4ZmMsMHhlOSwweDhlLDB4ZjAsMHhhNCwweDJjLDB4ZmN9fSwKKyB7MTYsMHgzNzU2LDAsezB4OGEsMHhmMCwweGVkLDB4YTQsMHgyYywweGZjLDB4ZWEsMHg4ZSwweGYwLDB4YTQsMHhjZCwweGE4LDB4ZjAsMHg4YiwweGYwLDB4YTR9fSwKKyB7MTYsMHgzNzY2LDAsezB4MmQsMHhjYywweDM4LDB4MjUsMHhmMCwweGZkLDB4ZTksMHg4ZiwweGYwLDB4YTQsMHgyYywweGNkLDB4MzUsMHhmMCwweGZjLDB4ZWJ9fSwKKyB7MTYsMHgzNzc2LDAsezB4OGUsMHhmMCwweGE0LDB4ZmUsMHhhOSwweGYwLDB4ZWIsMHg4ZiwweGYwLDB4YTQsMHhjZiwweGM1LDB4ZjAsMHgyZSwweGNkLDB4Mzl9fSwKKyB7MTUsMHgzNzg2LDAsezB4ZmUsMHhlNCwweDNjLDB4ZmMsMHhlYSwweGE0LDB4MmQsMHhjZSwweDM1LDB4ZjAsMHhmZCwweGU0LDB4M2MsMHhmYywweDIyfX0sCisgezE2LDB4Mzc5NSwwLHsweGViLDB4OWYsMHhmNSwweGYwLDB4ZWEsMHg5ZSwweDQyLDB4ZjAsMHhlOSwweDlkLDB4NDIsMHhmMCwweGVjLDB4NjQsMHg4MCwweGM4fX0sCisgeyA2LDB4MzdhNSwwLHsweDY0LDB4ODAsMHg5OCwweDQ1LDB4ZjAsMHgyMn19LAorIHsxNiwweDM3YWIsMCx7MHhlYiwweDlmLDB4ZjUsMHhmMCwweGVhLDB4OWUsMHg0MiwweGYwLDB4ZTksMHg5ZCwweDQyLDB4ZjAsMHhlOCwweDljLDB4NDUsMHhmMH19LAorIHsgMSwweDM3YmIsMCx7MHgyMn19LAorIHsxMiwweDM3YmMsMCx7MHhlYywweGYwLDB4YTMsMHhlZCwweGYwLDB4YTMsMHhlZSwweGYwLDB4YTMsMHhlZiwweGYwLDB4MjJ9fSwKKyB7MTYsMHgzN2M4LDAsezB4YTgsMHg4MiwweDg1LDB4ODMsMHhmMCwweGQwLDB4ODMsMHhkMCwweDgyLDB4MTIsMHgzNywweGRmLDB4MTIsMHgzNywweGRmLDB4MTJ9fSwKKyB7MTYsMHgzN2Q4LDAsezB4MzcsMHhkZiwweDEyLDB4MzcsMHhkZiwweGU0LDB4NzMsMHhlNCwweDkzLDB4YTMsMHhjNSwweDgzLDB4YzUsMHhmMCwweGM1LDB4ODN9fSwKKyB7MTYsMHgzN2U4LDAsezB4YzgsMHhjNSwweDgyLDB4YzgsMHhmMCwweGEzLDB4YzUsMHg4MywweGM1LDB4ZjAsMHhjNSwweDgzLDB4YzgsMHhjNSwweDgyLDB4Yzh9fSwKKyB7IDEsMHgzN2Y4LDAsezB4MjJ9fSwKKyB7MTYsMHgzN2Y5LDAsezB4ZDAsMHg4MywweGQwLDB4ODIsMHhmOCwweGU0LDB4OTMsMHg3MCwweDEyLDB4NzQsMHgwMSwweDkzLDB4NzAsMHgwZCwweGEzLDB4YTN9fSwKKyB7MTYsMHgzODA5LDAsezB4OTMsMHhmOCwweDc0LDB4MDEsMHg5MywweGY1LDB4ODIsMHg4OCwweDgzLDB4ZTQsMHg3MywweDc0LDB4MDIsMHg5MywweDY4LDB4NjB9fSwKKyB7IDYsMHgzODE5LDAsezB4ZWYsMHhhMywweGEzLDB4YTMsMHg4MCwweGRmfX0sCisgezE2LDB4MzgxZiwwLHsweGJjLDB4MDAsMHgwYiwweGJlLDB4MDAsMHgyOSwweGVmLDB4OGQsMHhmMCwweDg0LDB4ZmYsMHhhZCwweGYwLDB4MjIsMHhlNCwweGNjfX0sCisgezE2LDB4MzgyZiwwLHsweGY4LDB4NzUsMHhmMCwweDA4LDB4ZWYsMHgyZiwweGZmLDB4ZWUsMHgzMywweGZlLDB4ZWMsMHgzMywweGZjLDB4ZWUsMHg5ZCwweGVjfX0sCisgezE2LDB4MzgzZiwwLHsweDk4LDB4NDAsMHgwNSwweGZjLDB4ZWUsMHg5ZCwweGZlLDB4MGYsMHhkNSwweGYwLDB4ZTksMHhlNCwweGNlLDB4ZmQsMHgyMiwweGVkfX0sCisgezE2LDB4Mzg0ZiwwLHsweGY4LDB4ZjUsMHhmMCwweGVlLDB4ODQsMHgyMCwweGQyLDB4MWMsMHhmZSwweGFkLDB4ZjAsMHg3NSwweGYwLDB4MDgsMHhlZiwweDJmfX0sCisgezE2LDB4Mzg1ZiwwLHsweGZmLDB4ZWQsMHgzMywweGZkLDB4NDAsMHgwNywweDk4LDB4NTAsMHgwNiwweGQ1LDB4ZjAsMHhmMiwweDIyLDB4YzMsMHg5OCwweGZkfX0sCisgeyA1LDB4Mzg2ZiwwLHsweDBmLDB4ZDUsMHhmMCwweGVhLDB4MjJ9fSwKKyB7MTYsMHgzODc0LDAsezB4ZTQsMHg5MCwweDc2LDB4MjksMHhmMCwweDkwLDB4NzYsMHgyOSwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDJ9fSwKKyB7MTYsMHgzODg0LDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHhmZCwweGVlLDB4NmR9fSwKKyB7MTYsMHgzODk0LDAsezB4NjAsMHgwZSwweGVmLDB4YzMsMHg5NCwweDA2LDB4NTAsMHgwOCwweDkwLDB4NzYsMHgyOSwweGUwLDB4MDQsMHhmMCwweDgwLDB4ZDV9fSwKKyB7MTYsMHgzOGE0LDAsezB4ZWYsMHhiNCwweDA2LDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4ZWYsMHg3NSwweGYwLDB4MGZ9fSwKKyB7MTYsMHgzOGI0LDAsezB4YTQsMHgyNCwweDQxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4NzYsMHgyYSwweGYwLDB4MjR9fSwKKyB7MTYsMHgzOGM0LDAsezB4YmYsMHg3MCwweDAyLDB4NDEsMHg0MSwweDI0LDB4ZTAsMHg3MCwweDAyLDB4NDEsMHgxMiwweDI0LDB4MjEsMHg2MCwweDAyLDB4NDF9fSwKKyB7MTYsMHgzOGQ0LDAsezB4M2EsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4ZmUsMHg2MCwweDdkLDB4MTQsMHg3MCwweDAyLDB4MjEsMHhiMiwweDI0LDB4MDJ9fSwKKyB7MTYsMHgzOGU0LDAsezB4NjAsMHgwMiwweDQxLDB4MGEsMHgxMiwweDE3LDB4NTEsMHg5MCwweDc2LDB4NDIsMHhlMCwweGZjLDB4YTMsMHhlMCwweGZkLDB4YTN9fSwKKyB7MTYsMHgzOGY0LDAsezB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZiwweDkwLDB4NzYsMHgyOSwweGUwLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQzLDB4ZjV9fSwKKyB7MTYsMHgzOTA0LDAsezB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4MTIsMHgzNywweGJjLDB4OTAsMHg3NiwweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDF9fSwKKyB7MTYsMHgzOTE0LDAsezB4MTIsMHg5MCwweDc2LDB4N2MsMHg3NCwweDY3LDB4ZjAsMHg5MCwweDc2LDB4N2QsMHg3NCwweDA2LDB4ZjAsMHg5MCwweDc2LDB4N2V9fSwKKyB7MTYsMHgzOTI0LDAsezB4NzQsMHgwYiwweGYwLDB4ZWYsMHhiNCwweDAyLDB4MGYsMHhlNCwweDkwLDB4NzYsMHg3YywweGYwLDB4OTAsMHg3NiwweDdkLDB4ZjB9fSwKKyB7MTYsMHgzOTM0LDAsezB4OTAsMHg3NiwweDdlLDB4NzQsMHgwYywweGYwLDB4ZWYsMHhiNCwweDAzLDB4MGYsMHhlNCwweDkwLDB4NzYsMHg3YywweGYwLDB4OTB9fSwKKyB7MTYsMHgzOTQ0LDAsezB4NzYsMHg3ZCwweGYwLDB4OTAsMHg3NiwweDdlLDB4NzQsMHgxOCwweGYwLDB4OTAsMHg3NiwweDFhLDB4NzQsMHgwMSwweGYwLDB4MTJ9fSwKKyB7MTYsMHgzOTU0LDAsezB4M2UsMHg4ZiwweDEyLDB4MTgsMHgwMCwweDIyLDB4OTAsMHg3ZSwweGMyLDB4ZTAsMHhmZiwweGU0LDB4ZmMsMHhmZCwweGZlLDB4ZmJ9fSwKKyB7MTYsMHgzOTY0LDAsezB4ZmEsMHg3OSwweDAxLDB4ZjgsMHgxMiwweDM3LDB4NDYsMHhjOCwweGVjLDB4YzgsMHhjOSwweGVkLDB4YzksMHhjYSwweGVlLDB4Y2F9fSwKKyB7MTYsMHgzOTc0LDAsezB4Y2IsMHhlZiwweGNiLDB4OTAsMHg3ZSwweGMxLDB4ZTAsMHhmZSwweGU0LDB4ZmMsMHhmZCwweDJiLDB4ZmIsMHhlYSwweDNlLDB4ZmF9fSwKKyB7MTYsMHgzOTg0LDAsezB4ZWQsMHgzOSwweGY5LDB4ZWMsMHgzOCwweGY4LDB4OTAsMHg3ZSwweGMwLDB4ZTAsMHhmZiwweGU0LDB4ZmUsMHhlYiwweDJmLDB4ZmZ9fSwKKyB7MTYsMHgzOTk0LDAsezB4ZWUsMHgzYSwweGZlLDB4ZWQsMHgzOSwweGZkLDB4ZWMsMHgzOCwweGZjLDB4OTAsMHg3NiwweDI5LDB4ZTAsMHg3NSwweGYwLDB4MGZ9fSwKKyB7MTYsMHgzOWE0LDAsezB4YTQsMHgyNCwweDQ3LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHgxMiwweDM3LDB4YmMsMHgyMiwweDkwLDB4N2V9fSwKKyB7MTYsMHgzOWI0LDAsezB4YzIsMHhlMCwweGZmLDB4ZTQsMHhmYywweGZkLDB4ZmUsMHhmYiwweGZhLDB4NzksMHgwMSwweGY4LDB4MTIsMHgzNywweDQ2LDB4Yzh9fSwKKyB7MTYsMHgzOWM0LDAsezB4ZWMsMHhjOCwweGM5LDB4ZWQsMHhjOSwweGNhLDB4ZWUsMHhjYSwweGNiLDB4ZWYsMHhjYiwweDkwLDB4N2UsMHhjMSwweGUwLDB4ZmV9fSwKKyB7MTYsMHgzOWQ0LDAsezB4ZTQsMHhmYywweGZkLDB4MmIsMHhmYiwweGVhLDB4M2UsMHhmYSwweGVkLDB4MzksMHhmOSwweGVjLDB4MzgsMHhmOCwweDkwLDB4N2V9fSwKKyB7MTYsMHgzOWU0LDAsezB4YzAsMHhlMCwweGZmLDB4ZTQsMHhmZSwweGViLDB4MmYsMHhmZiwweGVlLDB4M2EsMHhmZSwweGVkLDB4MzksMHhmZCwweGVjLDB4Mzh9fSwKKyB7MTYsMHgzOWY0LDAsezB4ZmMsMHg5MCwweDc2LDB4MjksMHhlMCwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0YiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzV9fSwKKyB7MTYsMHgzYTA0LDAsezB4ZjUsMHg4MywweDEyLDB4MzcsMHhiYywweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2Z9fSwKKyB7MTYsMHgzYTE0LDAsezB4ZTksMHhlMCwweDE0LDB4NzAsMHgxOSwweDkwLDB4N2UsMHhjMCwweGUwLDB4ZmYsMHg5MCwweDc2LDB4MjksMHhlMCwweDc1LDB4ZjB9fSwKKyB7MTYsMHgzYTI0LDAsezB4MGYsMHhhNCwweDI0LDB4NGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGVmLDB4ZjAsMHgyMiwweDkwLDB4N2Z9fSwKKyB7MTQsMHgzYTM0LDAsezB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMn19LAorIHsxNiwweDNhNDIsMCx7MHhlNCwweDkwLDB4NzYsMHgzNSwweGYwLDB4OTAsMHg3NiwweDM1LDB4ZTAsMHhmZiwweGMzLDB4OTQsMHgwMywweDQwLDB4MDIsMHg0MX19LAorIHsxNiwweDNhNTIsMCx7MHhmZiwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFhLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZn19LAorIHsxNiwweDNhNjIsMCx7MHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFiLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNH19LAorIHsxNiwweDNhNzIsMCx7MHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NH19LAorIHsxNiwweDNhODIsMCx7MHhmMCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4M319LAorIHsxNiwweDNhOTIsMCx7MHg3NCwweGZmLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX19LAorIHsxNiwweDNhYTIsMCx7MHg4MywweGU0LDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX19LAorIHsxNiwweDNhYjIsMCx7MHg4MywweDc0LDB4ODAsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NX19LAorIHsxNiwweDNhYzIsMCx7MHhmNSwweDgzLDB4ZTQsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NX19LAorIHsxNiwweDNhZDIsMCx7MHhmNSwweDgzLDB4ZTQsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NX19LAorIHsxNiwweDNhZTIsMCx7MHhmNSwweDgzLDB4ZTQsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIzLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NX19LAorIHsxNiwweDNhZjIsMCx7MHhmNSwweDgzLDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDM1LDB4ZTAsMHgwNCwweGYwLDB4NDEsMHg0NywweDkwLDB4NzYsMHgzY319LAorIHsxNiwweDNiMDIsMCx7MHg3NCwweDBhLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHg5MCwweDc2LDB4MzUsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDc2LDB4M2MsMHhlMH19LAorIHsxNiwweDNiMTIsMCx7MHhmZiwweDkwLDB4NzYsMHgzNSwweGUwLDB4ZmUsMHhjMywweDlmLDB4NDAsMHgwMiwweDYxLDB4ZDIsMHg5MCwweDc2LDB4M2QsMHhlMH19LAorIHsxNiwweDNiMjIsMCx7MHhmZiwweDA0LDB4ZjAsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYSwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX19LAorIHsxNiwweDNiMzIsMCx7MHg4MywweGVmLDB4ZjAsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX19LAorIHsxNiwweDNiNDIsMCx7MHg4MywweGU0LDB4ZjAsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhYywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNX19LAorIHsxNiwweDNiNTIsMCx7MHg4MywweDc0LDB4NWUsMHhmMCwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGFkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NX19LAorIHsxNiwweDNiNjIsMCx7MHhmNSwweDgzLDB4NzQsMHhiYSwweGYwLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YWUsMHhmNSwweDgyLDB4ZTQsMHgzNH19LAorIHsxNiwweDNiNzIsMCx7MHg3NSwweGY1LDB4ODMsMHg3NCwweDA1LDB4ZjAsMHhlZSwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHhhZiwweGY1LDB4ODIsMHhlNH19LAorIHsxNiwweDNiODIsMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4ODAsMHhmMCwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIwLDB4ZjUsMHg4Mn19LAorIHsxNiwweDNiOTIsMCx7MHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIxLDB4ZjUsMHg4Mn19LAorIHsxNiwweDNiYTIsMCx7MHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweGVlLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweGIyLDB4ZjUsMHg4Mn19LAorIHsxNiwweDNiYjIsMCx7MHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgxNSwweGYwLDB4ZWUsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4YjMsMHhmNX19LAorIHsxNiwweDNiYzIsMCx7MHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4OTAsMHg3NiwweDM1LDB4ZTAsMHgwNCwweGYwLDB4NjEsMHgwZX19LAorIHsgMSwweDNiZDIsMCx7MHgyMn19LAorIHsxNiwweDNiZDMsMCx7MHhlNCwweDkwLDB4NzYsMHgzNiwweGYwLDB4ZTAsMHhmYiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MSwweGY1LDB4ODIsMHhlNH19LAorIHsxNiwweDNiZTMsMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4NDAsMHhmMCwweGViLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQyLDB4ZjUsMHg4Mn19LAorIHsxNiwweDNiZjMsMCx7MHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwYSwweGYwLDB4ZWIsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDMsMHhmNX19LAorIHsxNiwweDNjMDMsMCx7MHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHgxMiwweDM3LDB4YzgsMHgwMCwweDAwLDB4YWMsMHg0NCwweGViLDB4NzUsMHhmMH19LAorIHsxNiwweDNjMTMsMCx7MHgwZiwweGE0LDB4MjQsMHg0NywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4MTIsMHgzNywweGM4LDB4MDAsMHgwMH19LAorIHsxNiwweDNjMjMsMCx7MHhhYywweDQ0LDB4ZWIsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NGIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4M319LAorIHsxNiwweDNjMzMsMCx7MHgxMiwweDM3LDB4YzgsMHgwMCwweDAxLDB4NzcsMHgwMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmIsMHg3NX19LAorIHsxNiwweDNjNDMsMCx7MHhmMCwweDBmLDB4YTQsMHgyNCwweDQxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDQwLDB4ZjAsMHhlYn19LAorIHsxNiwweDNjNTMsMCx7MHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4OGMsMHhmMH19LAorIHsxNiwweDNjNjMsMCx7MHhlYiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4MTIsMHgzN319LAorIHsxNiwweDNjNzMsMCx7MHhjOCwweDAwLDB4MDAsMHhhYywweDQ0LDB4ZWIsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDcsMHhmNSwweDgyLDB4ZTQsMHgzNH19LAorIHsxNiwweDNjODMsMCx7MHg3NSwweGY1LDB4ODMsMHgxMiwweDM3LDB4YzgsMHgwMCwweDAwLDB4YWMsMHg0NCwweGViLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNH19LAorIHsxNiwweDNjOTMsMCx7MHg0YiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4MTIsMHgzNywweGM4LDB4MDAsMHgwMSwweDc3LDB4MDAsMHg5MH19LAorIHsxNiwweDNjYTMsMCx7MHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MSwweGY1LDB4ODIsMHhlNH19LAorIHsxNiwweDNjYjMsMCx7MHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4NDAsMHhmMCwweGVmLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQyLDB4ZjUsMHg4Mn19LAorIHsxNiwweDNjYzMsMCx7MHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHg4ZiwweGYwLDB4OTAsMHg3NiwweDM2LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhmZn19LAorIHsxNiwweDNjZDMsMCx7MHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4NDEsMHhmMH19LAorIHsxNiwweDNjZTMsMCx7MHhlZiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0MiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHg4NH19LAorIHsxNiwweDNjZjMsMCx7MHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDEsMHhmNX19LAorIHsxNiwweDNkMDMsMCx7MHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDYxLDB4ZjAsMHhlZiwweDc1LDB4ZjAsMHgwZiwweGE0LDB4MjQsMHg0Mn19LAorIHsxNiwweDNkMTMsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweDc0LDB4ODEsMHhmMCwweDkwLDB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMH19LAorIHsxNiwweDNkMjMsMCx7MHhlMCwweGZmLDB4NzUsMHhmMCwweDBmLDB4YTQsMHgyNCwweDQxLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NH19LAorIHsxNiwweDNkMzMsMCx7MHg2MSwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MGYsMHhhNCwweDI0LDB4NDIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4M319LAorIHsgNCwweDNkNDMsMCx7MHg3NCwweDAxLDB4ZjAsMHgyMn19LAorIHsxNiwweDNkNDcsMCx7MHhjMCwweGUwLDB4YzAsMHhmMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4YzAsMHhkMCwweGU4LDB4YzAsMHhlMCwweGU5LDB4YzAsMHhlMH19LAorIHsxNiwweDNkNTcsMCx7MHhlYSwweGMwLDB4ZTAsMHhlYiwweGMwLDB4ZTAsMHhlYywweGMwLDB4ZTAsMHhlZCwweGMwLDB4ZTAsMHhlZSwweGMwLDB4ZTAsMHhlZn19LAorIHsxNiwweDNkNjcsMCx7MHhjMCwweGUwLDB4OTAsMHg3ZiwweGEyLDB4ZTAsMHg5MCwweDc2LDB4N2YsMHhmMCwweDkwLDB4N2YsMHg3NCwweGUwLDB4OTAsMHg3Nn19LAorIHsxNiwweDNkNzcsMCx7MHg4NywweGYwLDB4OTAsMHg3ZiwweDc1LDB4ZTAsMHg5MCwweDc2LDB4ODgsMHhmMCwweDkwLDB4N2YsMHg5OCwweGUwLDB4NDQsMHgwMn19LAorIHsxNiwweDNkODcsMCx7MHhmMCwweDkwLDB4NzYsMHg5NiwweGUwLDB4ZmYsMHgyMCwweGUxLDB4MGMsMHg0NCwweDAyLDB4ZjAsMHg5MCwweDgwLDB4MDMsMHhmMH19LAorIHsxNiwweDNkOTcsMCx7MHhkMiwweDMyLDB4MTIsMHg0YSwweGM0LDB4OTAsMHg3NiwweDdmLDB4ZTAsMHgyMCwweGUyLDB4NTAsMHg5MCwweDc2LDB4ODcsMHhlMH19LAorIHsxNiwweDNkYTcsMCx7MHhmZSwweGEzLDB4ZTAsMHg3YywweDAwLDB4MjQsMHgwMCwweGY1LDB4MzQsMHhlYywweDNlLDB4ZjUsMHgzMywweDkwLDB4NzYsMHg5OH19LAorIHsxNiwweDNkYjcsMCx7MHhlMCwweGZkLDB4YWUsMHgzMywweGFmLDB4MzQsMHgxMiwweDM2LDB4ZDgsMHg5MCwweDc2LDB4ODcsMHhlZiwweGYwLDB4ZDIsMHgyZn19LAorIHsxNiwweDNkYzcsMCx7MHgzMCwweDMxLDB4MjksMHgyMCwweDNmLDB4MjYsMHhjMiwweDMxLDB4OTAsMHg3ZiwweDk0LDB4ZTAsMHg1NCwweGNmLDB4ZjAsMHg5MH19LAorIHsxNiwweDNkZDcsMCx7MHg3ZiwweDlhLDB4ZTAsMHgzMCwweGU0LDB4MDQsMHhkMiwweDJkLDB4YzIsMHgyYywweDkwLDB4N2YsMHg5YSwweGUwLDB4MjAsMHhlNX19LAorIHsxNiwweDNkZTcsMCx7MHgwNCwweGMyLDB4MmQsMHhkMiwweDJjLDB4OTAsMHg3ZiwweDk0LDB4ZTAsMHg0NCwweDMwLDB4ZjAsMHgxMiwweDRhLDB4NTAsMHgxMn19LAorIHsxNiwweDNkZjcsMCx7MHgxYiwweDA0LDB4MzAsMHgyZiwweDEyLDB4MTIsMHg0MiwweDE2LDB4YzIsMHgyZiwweDc1LDB4ZTgsMHgwMSwweDEyLDB4MTYsMHg4YX19LAorIHsxNiwweDNlMDcsMCx7MHg3NSwweGU4LDB4MGQsMHhkMiwweDJiLDB4ODAsMHgwNSwweDc1LDB4ZTgsMHgwMSwweGMyLDB4MmIsMHgyMCwweDJiLDB4MzQsMHg5MH19LAorIHsxNiwweDNlMTcsMCx7MHg3NiwweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDEsMHgwZSwweDkwLDB4NzYsMHg3YywweDc0LDB4NjcsMHhmMCwweGEzLDB4NzQsMHgwNn19LAorIHsxNiwweDNlMjcsMCx7MHhmMCwweGEzLDB4NzQsMHgwYiwweGYwLDB4ZWYsMHhiNCwweDAyLDB4MGIsMHg5MCwweDc2LDB4N2MsMHhlNCwweGYwLDB4YTMsMHhmMH19LAorIHsxNiwweDNlMzcsMCx7MHhhMywweDc0LDB4MGMsMHhmMCwweGVmLDB4YjQsMHgwMywweDBiLDB4OTAsMHg3NiwweDdjLDB4ZTQsMHhmMCwweGEzLDB4ZjAsMHhhM319LAorIHsxNiwweDNlNDcsMCx7MHg3NCwweDE4LDB4ZjAsMHg3NSwweGNhLDB4ZDMsMHg3NSwweGNiLDB4ZmUsMHhkMiwweGNhLDB4MzAsMHgzNCwweDA0LDB4YzIsMHgzNH19LAorIHsxNiwweDNlNTcsMCx7MHg4MCwweDAyLDB4ZDIsMHgzNCwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MDIsMHhmMCwweGYwLDB4OTAsMHg3Zn19LAorIHsxNiwweDNlNjcsMCx7MHg5OCwweGUwLDB4NTQsMHhmZCwweGYwLDB4ZDAsMHhlMCwweGZmLDB4ZDAsMHhlMCwweGZlLDB4ZDAsMHhlMCwweGZkLDB4ZDAsMHhlMH19LAorIHsxNiwweDNlNzcsMCx7MHhmYywweGQwLDB4ZTAsMHhmYiwweGQwLDB4ZTAsMHhmYSwweGQwLDB4ZTAsMHhmOSwweGQwLDB4ZTAsMHhmOCwweGQwLDB4ZDAsMHhkMH19LAorIHsgOCwweDNlODcsMCx7MHg4MiwweGQwLDB4ODMsMHhkMCwweGYwLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4M2U4ZiwwLHsweDkwLDB4NzYsMHg5MiwweGUwLDB4MTQsMHg2MCwweDFkLDB4MTQsMHg3MCwweDAyLDB4ZTEsMHg0NCwweDI0LDB4MDIsMHg2MCwweDAyfX0sCisgezE2LDB4M2U5ZiwwLHsweGUxLDB4ZDQsMHg5MCwweDc2LDB4OTQsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDgwLDB4MDAsMHhmMCwweGU0LDB4OTAsMHg3NiwweDhlfX0sCisgezE2LDB4M2VhZiwwLHsweGYwLDB4ZDIsMHgzMSwweDIyLDB4OTAsMHg3NiwweDE5LDB4ZTAsMHhmZiwweGI0LDB4MDEsMHgxYiwweGU0LDB4OTAsMHg3ZiwweGYyfX0sCisgezE2LDB4M2ViZiwwLHsweGYwLDB4OTAsMHg3ZiwweGYzLDB4NzQsMHgzMCwweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDk3fX0sCisgezE2LDB4M2VjZiwwLHsweGUwLDB4NTQsMHhmZCwweGYwLDB4NTQsMHhmYiwweGYwLDB4ZWYsMHhiNCwweDAyLDB4MWIsMHhlNCwweDkwLDB4N2YsMHhmMiwweGYwfX0sCisgezE2LDB4M2VkZiwwLHsweDkwLDB4N2YsMHhmMywweDc0LDB4MzQsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwfX0sCisgezE2LDB4M2VlZiwwLHsweDQ0LDB4MDIsMHhmMCwweDU0LDB4ZmIsMHhmMCwweGVmLDB4YjQsMHgwMywweDE4LDB4ZTQsMHg5MCwweDdmLDB4ZjIsMHhmMCwweDkwfX0sCisgezE2LDB4M2VmZiwwLHsweDdmLDB4ZjMsMHg3NCwweDY0LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2LDB4OTcsMHhlMCwweDQ0fX0sCisgezE2LDB4M2YwZiwwLHsweDA0LDB4ZjAsMHg5MCwweDc2LDB4OTQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4ODAsMHgwMCwweGYwLDB4MzAsMHgzZiwweDA5fX0sCisgezE2LDB4M2YxZiwwLHsweDkwLDB4NzYsMHg5NywweGUwLDB4NTQsMHhmZSwweGYwLDB4ODAsMHgwNywweDkwLDB4NzYsMHg5NywweGUwLDB4NDQsMHgwMSwweGYwfX0sCisgezE2LDB4M2YyZiwwLHsweDkwLDB4NzYsMHg5NywweGUwLDB4OTAsMHg4MCwweDAyLDB4ZjAsMHg5MCwweDc2LDB4OTgsMHg3NCwweDA0LDB4ZjAsMHg5MCwweDc2fX0sCisgezE2LDB4M2YzZiwwLHsweDhlLDB4NzQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDc2LDB4MTksMHhlMCwweGZmLDB4YjQsMHgwMSwweDFiLDB4ZTQsMHg5MCwweDdmfX0sCisgezE2LDB4M2Y0ZiwwLHsweGYyLDB4ZjAsMHg5MCwweDdmLDB4ZjMsMHg3NCwweDQ0LDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZjLDB4ZjAsMHg5MCwweDc2fX0sCisgezE2LDB4M2Y1ZiwwLHsweDk3LDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHg1NCwweGZiLDB4ZjAsMHhlZiwweGI0LDB4MDIsMHgxYiwweGU0LDB4OTAsMHg3ZiwweGYyfX0sCisgezE2LDB4M2Y2ZiwwLHsweGYwLDB4OTAsMHg3ZiwweGYzLDB4NzQsMHg0YywweGYwLDB4OTAsMHg3ZiwweGZmLDB4NzQsMHhmYywweGYwLDB4OTAsMHg3NiwweDk3fX0sCisgezE2LDB4M2Y3ZiwwLHsweGUwLDB4NDQsMHgwMiwweGYwLDB4NTQsMHhmYiwweGYwLDB4ZWYsMHhiNCwweDAzLDB4MTgsMHhlNCwweDkwLDB4N2YsMHhmMiwweGYwfX0sCisgezE2LDB4M2Y4ZiwwLHsweDkwLDB4N2YsMHhmMywweDc0LDB4OTQsMHhmMCwweDkwLDB4N2YsMHhmZiwweDc0LDB4ZmMsMHhmMCwweDkwLDB4NzYsMHg5NywweGUwfX0sCisgezE2LDB4M2Y5ZiwwLHsweDQ0LDB4MDQsMHhmMCwweDkwLDB4NzYsMHg5NCwweGUwLDB4NTQsMHhmZSwweGYwLDB4OTAsMHg4MCwweDAwLDB4ZjAsMHgzMCwweDNmfX0sCisgezE2LDB4M2ZhZiwwLHsweDA5LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg0NCwweDAxfX0sCisgezE2LDB4M2ZiZiwwLHsweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg5MCwweDgwLDB4MDIsMHhmMCwweDkwLDB4NzYsMHg5OCwweDc0LDB4MDYsMHhmMCwweDkwfX0sCisgeyA2LDB4M2ZjZiwwLHsweDc2LDB4OGUsMHg3NCwweDAyLDB4ZjAsMHgyMn19LAorIHsxNiwweDNmZDUsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4MDIsMHhmMH19LAorIHsxNiwweDNmZTUsMCx7MHg5MCwweDdmLDB4YzcsMHhlMCwweGY1LDB4MTEsMHg3NSwweDBmLDB4MDAsMHg3NSwweDBkLDB4MDAsMHhkMiwweDMzLDB4ZDAsMHg4Mn19LAorIHsgNSwweDNmZjUsMCx7MHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgeyA2LDB4M2ZmYSwwLHsweDEyLDB4NGEsMHhjNCwweGMyLDB4MzEsMHgyMn19LAorIHsxNiwweDQwMDAsMCx7MHhlNSwweDExLDB4ZDMsMHg5NCwweDAwLDB4NTAsMHgwMiwweDIxLDB4MDYsMHg5MCwweDc2LDB4ODksMHhlMCwweGMzLDB4OTQsMHgwOH19LAorIHsxNiwweDQwMTAsMCx7MHg0MCwweDAyLDB4MjEsMHgwNiwweDc0LDB4NDAsMHgyNSwweDBmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3ZSwweGY1LDB4ODMsMHhlMH19LAorIHsxNiwweDQwMjAsMCx7MHhmNSwweDE3LDB4ZTUsMHgwZCwweDYwLDB4MGUsMHg5MCwweDgwLDB4MDUsMHhlNSwweDE3LDB4ZjAsMHg5MCwweDc2LDB4ODksMHhlMH19LAorIHsxNiwweDQwMzAsMCx7MHgwNCwweGYwLDB4MDEsMHhkYSwweGU1LDB4MTcsMHgxMiwweDM3LDB4ZjksMHg0MCwweGMxLDB4MDIsMHg0MCwweDY3LDB4MDUsMHg0MH19LAorIHsxNiwweDQwNDAsMCx7MHg3YSwweDA2LDB4NDAsMHg5OCwweDA3LDB4NDAsMHhjMSwweDBjLDB4NDAsMHhjMSwweDBkLDB4NDAsMHhjNywweDBmLDB4NDAsMHhjYn19LAorIHsxNiwweDQwNTAsMCx7MHhmNiwweDQwLDB4Y2IsMHhmOCwweDQwLDB4Y2IsMHhmYSwweDQwLDB4Y2IsMHhmYiwweDQwLDB4Y2IsMHhmYywweDQwLDB4Y2IsMHhmZX19LAorIHsxNiwweDQwNjAsMCx7MHg0MCwweGNiLDB4ZmYsMHgwMCwweDAwLDB4NDAsMHhkYSwweDkwLDB4N2UsMHg0MSwweGUwLDB4OTAsMHg4MCwweDA1LDB4ZjAsMHg5MH19LAorIHsxNiwweDQwNzAsMCx7MHg3NiwweDg5LDB4ZTAsMHgwNCwweGYwLDB4NzUsMHgxMSwweDAxLDB4ODAsMHg2MCwweDkwLDB4N2UsMHg0MSwweGUwLDB4OTAsMHg4MH19LAorIHsxNiwweDQwODAsMCx7MHgwNSwweGYwLDB4OTAsMHg3ZSwweDQyLDB4ZTAsMHg5MCwweDgwLDB4MDUsMHhmMCwweDkwLDB4NzYsMHg4OSwweGUwLDB4MDQsMHhmMH19LAorIHsxNiwweDQwOTAsMCx7MHhlMCwweDA0LDB4ZjAsMHg3NSwweDExLDB4MDEsMHg4MCwweDQyLDB4OTAsMHg3ZSwweDQxLDB4ZTAsMHg5MCwweDgwLDB4MDUsMHhmMH19LAorIHsxNiwweDQwYTAsMCx7MHg5MCwweDdlLDB4NDIsMHhlMCwweDkwLDB4ODAsMHgwNSwweGYwLDB4OTAsMHg3ZSwweDQzLDB4ZTAsMHg5MCwweDgwLDB4MDUsMHhmMH19LAorIHsxNiwweDQwYjAsMCx7MHg5MCwweDc2LDB4ODksMHhlMCwweDA0LDB4ZjAsMHhlMCwweDA0LDB4ZjAsMHhlMCwweDA0LDB4ZjAsMHg3NSwweDExLDB4MDEsMHg4MH19LAorIHsxNiwweDQwYzAsMCx7MHgxOSwweGQyLDB4M2IsMHhkMiwweDNjLDB4ODAsMHgxMywweGQyLDB4M2IsMHg4MCwweDBmLDB4OTAsMHg4MCwweDA1LDB4ZTUsMHgxN319LAorIHsxNiwweDQwZDAsMCx7MHhmMCwweDkwLDB4NzYsMHg4OSwweGUwLDB4MDQsMHhmMCwweDc1LDB4MTEsMHgwMSwweDIwLDB4M2IsMHgwNCwweDA1LDB4MGQsMHg4MH19LAorIHsxNiwweDQwZTAsMCx7MHgxZiwweDMwLDB4M2MsMHgxYywweDkwLDB4N2UsMHg0MSwweGUwLDB4OTAsMHg4MCwweDA1LDB4ZjAsMHg5MCwweDdlLDB4NDIsMHhlMH19LAorIHsxNiwweDQwZjAsMCx7MHg5MCwweDgwLDB4MDUsMHhmMCwweDkwLDB4NzYsMHg4OSwweGUwLDB4MDQsMHhmMCwweGUwLDB4MDQsMHhmMCwweDc1LDB4MTEsMHgwMX19LAorIHsxNiwweDQxMDAsMCx7MHgwNSwweDBmLDB4MTUsMHgxMSwweDAxLDB4MDAsMHhlNSwweDExLDB4NzAsMHgxMCwweGMyLDB4MzMsMHhmNSwweDBkLDB4ZjUsMHgwZn19LAorIHsxMSwweDQxMTAsMCx7MHg5MCwweDdmLDB4YzcsMHg3NCwweDA0LDB4ZjAsMHhjMiwweDNiLDB4YzIsMHgzYywweDIyfX0sCisgezE2LDB4NDExYiwwLHsweDkwLDB4NzYsMHg4ZCwweGUwLDB4NjQsMHgwMSwweDcwLDB4MjcsMHgzMCwweDI3LDB4MDgsMHhjMiwweDI3LDB4MTIsMHgwOCwweDAwfX0sCisgezE2LDB4NDEyYiwwLHsweDEyLDB4MTcsMHg0YSwweDMwLDB4MjgsMHgwOCwweGMyLDB4MjgsMHgxMiwweDM4LDB4NzQsMHgxMiwweDE3LDB4NGEsMHgzMCwweDJhfX0sCisgezE2LDB4NDEzYiwwLHsweDBlLDB4ZTQsMHg5MCwweDc2LDB4OGQsMHhmMCwweGMyLDB4MmEsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDIsMHhmMCwweDkwfX0sCisgezE2LDB4NDE0YiwwLHsweDc2LDB4M2YsMHhlMCwweGI0LDB4MDEsMHgwNSwweGU0LDB4ZjAsMHgxMiwweDMyLDB4NmYsMHg5MCwweDc2LDB4NDEsMHhlMCwweGI0fX0sCisgezE2LDB4NDE1YiwwLHsweDAxLDB4MDUsMHhlNCwweGYwLDB4MTIsMHgzNCwweDlhLDB4OTAsMHg3NiwweDQwLDB4ZTAsMHhiNCwweDAxLDB4MDMsMHgxMiwweDM0fX0sCisgezE2LDB4NDE2YiwwLHsweDlhLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHgyMCwweGU0LDB4MDIsMHhjMiwweDNmLDB4OTAsMHg3ZiwweDliLDB4ZTAsMHgzMCwweGU0fX0sCisgezE2LDB4NDE3YiwwLHsweDAyLDB4ZDIsMHgzZiwweDkwLDB4N2YsMHg5YiwweGUwLDB4MjAsMHhlNSwweDAyLDB4YzIsMHgzZSwweDkwLDB4N2YsMHg5YiwweGUwfX0sCisgezE2LDB4NDE4YiwwLHsweDMwLDB4ZTUsMHgwMiwweGQyLDB4M2UsMHhhMiwweDQxLDB4MzAsMHgzZiwweDAxLDB4YjMsMHg1MCwweDFmLDB4YTIsMHgzZiwweDkyfX0sCisgezE2LDB4NDE5YiwwLHsweDQxLDB4MzAsMHgzZiwweDA5LDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHg3NiwweDk3fX0sCisgezE2LDB4NDFhYiwwLHsweGUwLDB4NDQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDk3LDB4ZTAsMHg5MCwweDgwLDB4MDIsMHhmMCwweDMwLDB4M2YsMHgzNCwweDkwfX0sCisgezE2LDB4NDFiYiwwLHsweDc2LDB4MTksMHhlMCwweGZmLDB4YjQsMHgwMSwweDBlLDB4OTAsMHg3NiwweDdjLDB4NzQsMHg2NywweGYwLDB4YTMsMHg3NCwweDA2fX0sCisgezE2LDB4NDFjYiwwLHsweGYwLDB4YTMsMHg3NCwweDBiLDB4ZjAsMHhlZiwweGI0LDB4MDIsMHgwYiwweGU0LDB4OTAsMHg3NiwweDdjLDB4ZjAsMHhhMywweGYwfX0sCisgezE2LDB4NDFkYiwwLHsweGEzLDB4NzQsMHgwYywweGYwLDB4ZWYsMHhiNCwweDAzLDB4MGIsMHhlNCwweDkwLDB4NzYsMHg3YywweGYwLDB4YTMsMHhmMCwweGEzfX0sCisgezE2LDB4NDFlYiwwLHsweDc0LDB4MTgsMHhmMCwweGEyLDB4NDAsMHgzMCwweDNlLDB4MDEsMHhiMywweDUwLDB4MWYsMHhhMiwweDNlLDB4OTIsMHg0MCwweDMwfX0sCisgezE2LDB4NDFmYiwwLHsweDNlLDB4MDksMHg5MCwweDc2LDB4OTUsMHhlMCwweDQ0LDB4MDQsMHhmMCwweDgwLDB4MDcsMHg5MCwweDc2LDB4OTUsMHhlMCwweDU0fX0sCisgezExLDB4NDIwYiwwLHsweGZiLDB4ZjAsMHg5MCwweDc2LDB4OTUsMHhlMCwweDkwLDB4ODAsMHgwMSwweGYwLDB4MjJ9fSwKKyB7MTYsMHg0MjE2LDAsezB4OTAsMHg3NiwweDE5LDB4ZTAsMHg2NCwweDAxLDB4NzAsMHgzNSwweDkwLDB4NzYsMHg4NywweGUwLDB4ZmYsMHhkMywweDk0LDB4MmR9fSwKKyB7MTYsMHg0MjI2LDAsezB4NDAsMHgyYiwweDkwLDB4NzYsMHg4NiwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHg4NSwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZDN9fSwKKyB7MTYsMHg0MjM2LDAsezB4OTQsMHgwZiwweDQwLDB4MTksMHhlNCwweGYwLDB4ZWYsMHhkMywweDk0LDB4MzEsMHg0MCwweDA4LDB4OTAsMHg3NiwweDE5LDB4NzR9fSwKKyB7MTYsMHg0MjQ2LDAsezB4MDMsMHhmMCwweDgwLDB4MDYsMHg5MCwweDc2LDB4MTksMHg3NCwweDAyLDB4ZjAsMHgxMiwweDNlLDB4OGYsMHg5MCwweDc2LDB4MTl9fSwKKyB7MTYsMHg0MjU2LDAsezB4ZTAsMHhiNCwweDAyLDB4MmMsMHg5MCwweDc2LDB4ODcsMHhlMCwweGZmLDB4YzMsMHg5NCwweDJmLDB4NTAsMHgyMiwweGVmLDB4ZDN9fSwKKyB7MTYsMHg0MjY2LDAsezB4OTQsMHgyYSwweDQwLDB4MWMsMHg5MCwweDc2LDB4ODYsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4ODUsMHhlMCwweDA0LDB4ZjB9fSwKKyB7MTYsMHg0Mjc2LDAsezB4ZTAsMHhkMywweDk0LDB4MGYsMHg0MCwweDBhLDB4ZTQsMHhmMCwweDkwLDB4NzYsMHgxOSwweDA0LDB4ZjAsMHgxMiwweDNlLDB4OGZ9fSwKKyB7MTYsMHg0Mjg2LDAsezB4OTAsMHg3NiwweDE5LDB4ZTAsMHhiNCwweDAyLDB4MjYsMHg5MCwweDc2LDB4ODcsMHhlMCwweGQzLDB4OTQsMHgzMSwweDQwLDB4MWR9fSwKKyB7MTYsMHg0Mjk2LDAsezB4OTAsMHg3NiwweDg2LDB4NzQsMHgwMSwweGYwLDB4OTAsMHg3NiwweDg1LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhkMywweDk0LDB4MGZ9fSwKKyB7MTYsMHg0MmE2LDAsezB4NDAsMHgwYiwweGU0LDB4ZjAsMHg5MCwweDc2LDB4MTksMHg3NCwweDAzLDB4ZjAsMHgxMiwweDNlLDB4OGYsMHg5MCwweDc2LDB4MTl9fSwKKyB7MTYsMHg0MmI2LDAsezB4ZTAsMHg2NCwweDAzLDB4NzAsMHgzZiwweDkwLDB4NzYsMHg4NywweGUwLDB4ZmYsMHhjMywweDk0LDB4NWYsMHg1MCwweDM1LDB4OTB9fSwKKyB7MTYsMHg0MmM2LDAsezB4NzYsMHg4NiwweDc0LDB4MDEsMHhmMCwweDkwLDB4NzYsMHg4NSwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZDMsMHg5NCwweDBmLDB4NDB9fSwKKyB7MTYsMHg0MmQ2LDAsezB4MjMsMHhlNCwweGYwLDB4ZWYsMHhjMywweDk0LDB4MmYsMHg1MCwweDBjLDB4ZWYsMHhkMywweDk0LDB4MmEsMHg0MCwweDA2LDB4OTB9fSwKKyB7MTYsMHg0MmU2LDAsezB4NzYsMHgxOSwweDc0LDB4MDEsMHhmMCwweGVmLDB4ZDMsMHg5NCwweDJmLDB4NDAsMHgwNiwweDkwLDB4NzYsMHgxOSwweDc0LDB4MDJ9fSwKKyB7MTYsMHg0MmY2LDAsezB4ZjAsMHgxMiwweDNlLDB4OGYsMHg5MCwweDc2LDB4ODYsMHhlMCwweDcwLDB4MDUsMHg5MCwweDc2LDB4ODUsMHhmMCwweDIyLDB4ZTR9fSwKKyB7IDUsMHg0MzA2LDAsezB4OTAsMHg3NiwweDg2LDB4ZjAsMHgyMn19LAorIHsxNiwweDQzMGIsMCx7MHhlNCwweDkwLDB4NzYsMHg5NiwweGYwLDB4OTAsMHg4MCwweDAzLDB4ZjAsMHg5MCwweDdmLDB4ZTAsMHg3NCwweDkwLDB4ZjAsMHg5MH19LAorIHsxNiwweDQzMWIsMCx7MHg3ZiwweGUxLDB4NzQsMHgwNCwweGYwLDB4ZTQsMHg5MCwweDdmLDB4ZGQsMHhmMCwweDkwLDB4N2YsMHhhMSwweGYwLDB4NTMsMHg4ZX19LAorIHsxNiwweDQzMmIsMCx7MHhmOCwweDc1LDB4ODgsMHgwNSwweDc1LDB4YjgsMHgyMCwweDc1LDB4ZjgsMHgwMSwweDQzLDB4OGUsMHgzMCwweGY1LDB4YzgsMHg3NX19LAorIHsxNiwweDQzM2IsMCx7MHhjYSwweDdmLDB4NzUsMHhjYiwweGY4LDB4NDMsMHhhOCwweDIwLDB4MTIsMHgwNywweDRhLDB4YzIsMHgyYywweGMyLDB4MmQsMHhjMn19LAorIHsxNiwweDQzNGIsMCx7MHgyYiwweGMyLDB4MmYsMHg5MCwweDdmLDB4ZmMsMHg3NCwweGRkLDB4ZjAsMHg5MCwweDdmLDB4ZmYsMHg3NCwweGZmLDB4ZjAsMHg5MH19LAorIHsxNiwweDQzNWIsMCx7MHg3ZiwweDk3LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4MTksMHg3NCwweDAxLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg4NX19LAorIHsxNiwweDQzNmIsMCx7MHhmMCwweGEzLDB4ZjAsMHg5MCwweDc2LDB4ODEsMHhmMCwweDkwLDB4NzYsMHg4MCwweGYwLDB4MTIsMHg0OSwweDU4LDB4MTIsMHgwZn19LAorIHsxNiwweDQzN2IsMCx7MHhjNiwweDEyLDB4NGEsMHg4ZCwweDkwLDB4N2YsMHg5NywweGUwLDB4NDQsMHgwOCwweGYwLDB4ZTAsMHg1NCwweGI5LDB4ZjAsMHhkMn19LAorIHsxNiwweDQzOGIsMCx7MHgzMCwweDIwLDB4MzAsMHgxOCwweDEyLDB4NDcsMHhiNCwweDEyLDB4MzAsMHgwMCwweDEyLDB4NDAsMHgwMCwweDEyLDB4NDIsMHgxNn19LAorIHsxNiwweDQzOWIsMCx7MHgxMiwweDRhLDB4NTAsMHgxMiwweDFiLDB4MDQsMHgxMiwweDE2LDB4NjEsMHgxMiwweDQyLDB4MTYsMHhjMiwweDJmLDB4YzIsMHgzMX19LAorIHsxNiwweDQzYWIsMCx7MHhjMiwweDMyLDB4YzIsMHgzNCwweGMyLDB4MzMsMHhjMiwweDI5LDB4YzIsMHgyNywweGMyLDB4MjgsMHhlNCwweGY1LDB4MTEsMHg5MH19LAorIHsxNiwweDQzYmIsMCx7MHg3NiwweDg5LDB4ZjAsMHg5MCwweDc2LDB4M2YsMHhmMCwweDkwLDB4NzYsMHg0MSwweGYwLDB4OTAsMHg3NiwweDQwLDB4ZjAsMHg5MH19LAorIHsxNiwweDQzY2IsMCx7MHg3NiwweDhhLDB4ZjAsMHhhMywweGYwLDB4YTMsMHgwNCwweGYwLDB4ZTQsMHhhMywweGYwLDB4OTAsMHg3NiwweDk5LDB4ZjAsMHgyMn19LAorIHsxNiwweDQzZGIsMCx7MHgxMiwweDRkLDB4YTMsMHg0MCwweDAyLDB4ODEsMHhhMCwweDkwLDB4N2YsMHhlYiwweGUwLDB4MjQsMHhmZSwweDYwLDB4MWUsMHgxNH19LAorIHsxNiwweDQzZWIsMCx7MHg2MCwweDQ2LDB4MTQsMHg2MCwweDZlLDB4MTQsMHg3MCwweDAyLDB4ODEsMHg5MSwweDI0LDB4MDQsMHg2MCwweDAyLDB4ODEsMHg5OX19LAorIHsxNiwweDQzZmIsMCx7MHg3NCwweDA1LDB4OTAsMHg3ZiwweGQ0LDB4ZjAsMHg3NCwweDAwLDB4OTAsMHg3ZiwweGQ1LDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhlYX19LAorIHsxNiwweDQ0MGIsMCx7MHhlMCwweGZmLDB4MTIsMHg0OSwweGZmLDB4OGIsMHgyMCwweDhhLDB4MjEsMHg4OSwweDIyLDB4ZWEsMHg0OSwweDYwLDB4MTEsMHhjZX19LAorIHsxNiwweDQ0MWIsMCx7MHhlYSwweGNlLDB4ZWUsMHg5MCwweDdmLDB4ZDQsMHhmMCwweGNmLDB4ZTksMHhjZiwweGVmLDB4OTAsMHg3ZiwweGQ1LDB4ZjAsMHgyMn19LAorIHsxNiwweDQ0MmIsMCx7MHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHhmZiwweDEyLDB4NDgsMHhiMH19LAorIHsxNiwweDQ0M2IsMCx7MHg4YiwweDIwLDB4OGEsMHgyMSwweDg5LDB4MjIsMHhlYSwweDQ5LDB4NjAsMHgxMSwweGNlLDB4ZWEsMHhjZSwweGVlLDB4OTAsMHg3Zn19LAorIHsxNiwweDQ0NGIsMCx7MHhkNCwweGYwLDB4Y2YsMHhlOSwweGNmLDB4ZWYsMHg5MCwweDdmLDB4ZDUsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NH19LAorIHsxNiwweDQ0NWIsMCx7MHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4ZWEsMHhlMCwweGZmLDB4OTAsMHg3ZSwweGMwLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmYn19LAorIHsxNiwweDQ0NmIsMCx7MHgxMiwweDE3LDB4OTQsMHg4YiwweDIwLDB4OGEsMHgyMSwweDg5LDB4MjIsMHhlYSwweDQ5LDB4NjAsMHgxMSwweGNlLDB4ZWEsMHhjZX19LAorIHsxNiwweDQ0N2IsMCx7MHhlZSwweDkwLDB4N2YsMHhkNCwweGYwLDB4Y2YsMHhlOSwweGNmLDB4ZWYsMHg5MCwweDdmLDB4ZDUsMHhmMCwweDIyLDB4OTAsMHg3Zn19LAorIHsxNiwweDQ0OGIsMCx7MHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3Zn19LAorIHsgNSwweDQ0OWIsMCx7MHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfX0sCisgeyAxLDB4NDRhMCwwLHsweDIyfX0sCisgezE2LDB4NDRhMSwwLHsweGMyLDB4YWYsMHhkMiwweDI0LDB4OTAsMHg3ZiwweDkzLDB4NzQsMHgzMCwweGYwLDB4OTAsMHg3ZiwweDljLDB4NzQsMHhiYiwweGYwfX0sCisgezE2LDB4NDRiMSwwLHsweDkwLDB4N2YsMHg5NiwweGUwLDB4NDQsMHgzMCwweGYwLDB4ZTAsMHg1NCwweDMwLDB4ZjAsMHg5MCwweDdmLDB4OTQsMHg3NCwweDMwfX0sCisgezE2LDB4NDRjMSwwLHsweGYwLDB4OTAsMHg3ZiwweDlkLDB4NzQsMHhjZiwweGYwLDB4OTAsMHg3ZiwweDk3LDB4NzQsMHhhMCwweGYwLDB4OTAsMHg3ZiwweDk1fX0sCisgezE2LDB4NDRkMSwwLHsweDc0LDB4YzAsMHhmMCwweDkwLDB4N2YsMHg5ZSwweDc0LDB4MDMsMHhmMCwweDkwLDB4N2YsMHg5OSwweGUwLDB4MzAsMHhlMiwweDA5fX0sCisgezE2LDB4NDRlMSwwLHsweDkwLDB4MDUsMHgxOSwweDc0LDB4YTAsMHhmMCwweGU0LDB4YTMsMHhmMCwweGMyLDB4MjUsMHhjMiwweDIyLDB4YzIsMHgyMywweGMyfX0sCisgezE2LDB4NDRmMSwwLHsweDI2LDB4MTIsMHg0YSwweGM0LDB4MTIsMHgyZCwweGE5LDB4MTIsMHgzYiwweGQzLDB4MTIsMHg0NSwweDU5LDB4MTIsMHgzYSwweDQyfX0sCisgezE2LDB4NDUwMSwwLHsweDkwLDB4NzYsMHg2OCwweDc0LDB4MDEsMHhmMCwweDcwLDB4MGYsMHgxMiwweDRiLDB4YmIsMHgxMiwweDA3LDB4ZmUsMHgxMiwweDRkfX0sCisgezE2LDB4NDUxMSwwLHsweGExLDB4MTIsMHgxYiwweDQwLDB4MTIsMHgxNCwweDk2LDB4MTIsMHg0MywweDBiLDB4OTAsMHg3ZiwweGFmLDB4ZTAsMHg0NCwweDAxfX0sCisgezE2LDB4NDUyMSwwLHsweGYwLDB4OTAsMHg3ZiwweGFlLDB4ZTAsMHg0NCwweDFmLDB4ZjAsMHg5MCwweDdmLDB4YWMsMHg3NCwweGZmLDB4ZjAsMHg5MCwweDdmfX0sCisgezE2LDB4NDUzMSwwLHsweGFkLDB4ZjAsMHg5MCwweDdmLDB4ZGUsMHhmMCwweDkwLDB4N2YsMHhkZiwweGYwLDB4OTAsMHg3ZiwweGFiLDB4ZjAsMHg5MCwweDdmfX0sCisgezE2LDB4NDU0MSwwLHsweGE5LDB4ZjAsMHg5MCwweDdmLDB4YWEsMHhmMCwweDUzLDB4OTEsMHhlZiwweDQzLDB4ZDgsMHgyMCwweGQyLDB4ZTgsMHg0MywweGQ4fX0sCisgeyA4LDB4NDU1MSwwLHsweDIwLDB4NTMsMHhhOCwweGEwLDB4NDMsMHhhOCwweDgwLDB4MjJ9fSwKKyB7MTYsMHg0NTU5LDAsezB4ZTQsMHg5MCwweDc2LDB4MzYsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MzIsMHhmNSwweDgyLDB4ZTR9fSwKKyB7MTYsMHg0NTY5LDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MzMsMHhmNSwweDgyLDB4ZTR9fSwKKyB7MTYsMHg0NTc5LDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAxLDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzV9fSwKKyB7MTYsMHg0NTg5LDAsezB4ZjAsMHgwMywweGE0LDB4MjQsMHgzMiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweGVmLDB4NzV9fSwKKyB7MTYsMHg0NTk5LDAsezB4ZjAsMHgwMywweGE0LDB4MjQsMHgzMywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwMiwweGYwLDB4OTB9fSwKKyB7MTYsMHg0NWE5LDAsezB4NzYsMHgzNiwweGUwLDB4MDQsMHhmMCwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MzIsMHhmNSwweDgyLDB4ZTR9fSwKKyB7MTYsMHg0NWI5LDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHhlNCwweGYwLDB4ZWYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MzMsMHhmNSwweDgyLDB4ZTR9fSwKKyB7MTYsMHg0NWM5LDAsezB4MzQsMHg3NSwweGY1LDB4ODMsMHg3NCwweDAzLDB4ZjAsMHg5MCwweDc2LDB4MzYsMHhlMCwweDA0LDB4ZjAsMHhlMCwweGZmLDB4NzV9fSwKKyB7MTYsMHg0NWQ5LDAsezB4ZjAsMHgwMywweGE0LDB4MjQsMHgzMiwweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4ZTQsMHhmMCwweGVmLDB4NzV9fSwKKyB7MTYsMHg0NWU5LDAsezB4ZjAsMHgwMywweGE0LDB4MjQsMHgzMywweGY1LDB4ODIsMHhlNCwweDM0LDB4NzUsMHhmNSwweDgzLDB4NzQsMHgwNCwweGYwLDB4MjJ9fSwKKyB7MTIsMHg0NWY5LDAsezB4NzgsMHg3ZiwweGU0LDB4ZjYsMHhkOCwweGZkLDB4NzUsMHg4MSwweDM4LDB4MDIsMHg0NiwweDQwfX0sCisgezE2LDB4NDYwNSwwLHsweDAyLDB4NDcsMHg1YSwweGU0LDB4OTMsMHhhMywweGY4LDB4ZTQsMHg5MywweGEzLDB4NDAsMHgwMywweGY2LDB4ODAsMHgwMSwweGYyfX0sCisgezE2LDB4NDYxNSwwLHsweDA4LDB4ZGYsMHhmNCwweDgwLDB4MjksMHhlNCwweDkzLDB4YTMsMHhmOCwweDU0LDB4MDcsMHgyNCwweDBjLDB4YzgsMHhjMywweDMzfX0sCisgezE2LDB4NDYyNSwwLHsweGM0LDB4NTQsMHgwZiwweDQ0LDB4MjAsMHhjOCwweDgzLDB4NDAsMHgwNCwweGY0LDB4NTYsMHg4MCwweDAxLDB4NDYsMHhmNiwweGRmfX0sCisgezE2LDB4NDYzNSwwLHsweGU0LDB4ODAsMHgwYiwweDAxLDB4MDIsMHgwNCwweDA4LDB4MTAsMHgyMCwweDQwLDB4ODAsMHg5MCwweDBjLDB4OGYsMHhlNCwweDdlfX0sCisgezE2LDB4NDY0NSwwLHsweDAxLDB4OTMsMHg2MCwweGJjLDB4YTMsMHhmZiwweDU0LDB4M2YsMHgzMCwweGU1LDB4MDksMHg1NCwweDFmLDB4ZmUsMHhlNCwweDkzfX0sCisgezE2LDB4NDY1NSwwLHsweGEzLDB4NjAsMHgwMSwweDBlLDB4Y2YsMHg1NCwweGMwLDB4MjUsMHhlMCwweDYwLDB4YTgsMHg0MCwweGI4LDB4ZTQsMHg5MywweGEzfX0sCisgezE2LDB4NDY2NSwwLHsweGZhLDB4ZTQsMHg5MywweGEzLDB4ZjgsMHhlNCwweDkzLDB4YTMsMHhjOCwweGM1LDB4ODIsMHhjOCwweGNhLDB4YzUsMHg4MywweGNhfX0sCisgezE2LDB4NDY3NSwwLHsweGYwLDB4YTMsMHhjOCwweGM1LDB4ODIsMHhjOCwweGNhLDB4YzUsMHg4MywweGNhLDB4ZGYsMHhlOSwweGRlLDB4ZTcsMHg4MCwweGJlfX0sCisgezE2LDB4NDY4NSwwLHsweDkwLDB4N2YsMHhlYywweGUwLDB4OTAsMHg3NiwweDgzLDB4ZjAsMHhlMCwweDE0LDB4NjAsMHgxZCwweDE0LDB4NjAsMHgyYSwweDE0fX0sCisgezE2LDB4NDY5NSwwLHsweDYwLDB4MzcsMHgxNCwweDYwLDB4NDQsMHgyNCwweDA0LDB4NzAsMHg1MCwweDkwLDB4NzYsMHg5MSwweGUwLDB4OTAsMHg3ZiwweDAwfX0sCisgezE2LDB4NDZhNSwwLHsweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwLDB4ODAsMHg0NywweDkwLDB4NzYsMHg5MiwweGUwLDB4OTAsMHg3ZiwweDAwfX0sCisgezE2LDB4NDZiNSwwLHsweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwLDB4ODAsMHgzNywweDkwLDB4NzYsMHg5MCwweGUwLDB4OTAsMHg3ZiwweDAwfX0sCisgezE2LDB4NDZjNSwwLHsweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwLDB4ODAsMHgyNywweDkwLDB4NzYsMHg4NCwweGUwLDB4OTAsMHg3ZiwweDAwfX0sCisgezE2LDB4NDZkNSwwLHsweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwLDB4ODAsMHgxNywweDkwLDB4NzYsMHg5MywweGUwLDB4OTAsMHg3ZiwweDAwfX0sCisgezE2LDB4NDZlNSwwLHsweGYwLDB4OTAsMHg3ZiwweGI1LDB4NzQsMHgwMSwweGYwLDB4ODAsMHgwNywweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwfX0sCisgeyAyLDB4NDZmNSwwLHsweGQzLDB4MjJ9fSwKKyB7MTYsMHg0NmY3LDAsezB4YzAsMHhlMCwweGMwLDB4ZjAsMHhjMCwweDgzLDB4YzAsMHg4MiwweGMwLDB4ZDAsMHhlOCwweGMwLDB4ZTAsMHhlOSwweGMwLDB4ZTB9fSwKKyB7MTYsMHg0NzA3LDAsezB4ZWEsMHhjMCwweGUwLDB4ZWIsMHhjMCwweGUwLDB4ZWMsMHhjMCwweGUwLDB4ZWQsMHhjMCwweGUwLDB4ZWUsMHhjMCwweGUwLDB4ZWZ9fSwKKyB7MTYsMHg0NzE3LDAsezB4YzAsMHhlMCwweGMyLDB4Y2EsMHhjMiwweGNmLDB4OTAsMHg3ZiwweDk4LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgzMCwweDJlLDB4MDN9fSwKKyB7MTYsMHg0NzI3LDAsezB4MTIsMHgxNCwweGE2LDB4OTAsMHg3ZiwweDk4LDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg1MywweGE4LDB4ZmEsMHgxMiwweDE2LDB4NjF9fSwKKyB7MTYsMHg0NzM3LDAsezB4ZDAsMHhlMCwweGZmLDB4ZDAsMHhlMCwweGZlLDB4ZDAsMHhlMCwweGZkLDB4ZDAsMHhlMCwweGZjLDB4ZDAsMHhlMCwweGZiLDB4ZDB9fSwKKyB7MTYsMHg0NzQ3LDAsezB4ZTAsMHhmYSwweGQwLDB4ZTAsMHhmOSwweGQwLDB4ZTAsMHhmOCwweGQwLDB4ZDAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZjB9fSwKKyB7IDMsMHg0NzU3LDAsezB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4NDc1YSwwLHsweGU0LDB4OTAsMHg3NiwweDY2LDB4ZjAsMHgxMiwweDQ0LDB4YTEsMHgyMCwweDI2LDB4MTMsMHg5MCwweDc2LDB4NjYsMHhlMCwweGMzfX0sCisgezE2LDB4NDc2YSwwLHsweDk0LDB4MDIsMHg1MCwweDBhLDB4ZTAsMHgwNCwweGYwLDB4ZDIsMHg0MiwweDEyLDB4NGEsMHhmNiwweDgwLDB4ZWEsMHgzMCwweDI2fX0sCisgezE2LDB4NDc3YSwwLHsweDA1LDB4MTIsMHgyOCwweDAxLDB4YzIsMHgyNiwweDMwLDB4MjUsMHgyYiwweDkwLDB4NzYsMHg5NiwweGUwLDB4NTQsMHhmYywweGYwfX0sCisgezE2LDB4NDc4YSwwLHsweDkwLDB4ODAsMHgwMywweGYwLDB4MTIsMHgxNCwweDk2LDB4OTAsMHg3NiwweDk2LDB4ZTAsMHg0NCwweDAzLDB4ZjAsMHg5MCwweDgwfX0sCisgezE2LDB4NDc5YSwwLHsweDAzLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg2NywweGYwLDB4OTAsMHg3NiwweDY3LDB4ZTAsMHgwNCwweGYwLDB4ZTAsMHhiNCwweDRifX0sCisgezEwLDB4NDdhYSwwLHsweGY2LDB4MTIsMHgzZiwweGZhLDB4MTIsMHg0MSwweDFiLDB4ODAsMHhjNSwweDIyfX0sCisgezE2LDB4NDdiNCwwLHsweGU0LDB4OTAsMHg3NiwweDliLDB4ZjAsMHg5MCwweDc2LDB4OWIsMHhlMCwweGZmLDB4MDQsMHhmMCwweGVmLDB4NjAsMHgwOCwweGUwfX0sCisgezE2LDB4NDdjNCwwLHsweDI0LDB4MDgsMHhmOCwweGU0LDB4ZjYsMHg4MCwweGVlLDB4OTAsMHg3NiwweDk2LDB4ZTAsMHg1NCwweGZiLDB4ZjAsMHg1NCwweGY3fX0sCisgezE2LDB4NDdkNCwwLHsweGYwLDB4OTAsMHg4MCwweDAzLDB4ZjAsMHhlNCwweGY1LDB4MTgsMHhkMiwweDM1LDB4ZjUsMHgwZSwweGY1LDB4MTAsMHhkMiwweDM2fX0sCisgezE2LDB4NDdlNCwwLHsweDc1LDB4MTIsMHgxMSwweDc1LDB4MTMsMHgyMiwweGMyLDB4MzcsMHhjMiwweDM5LDB4YzIsMHgzOCwweGY1LDB4MTYsMHhmNSwweDE0fX0sCisgezExLDB4NDdmNCwwLHsweGY1LDB4MWEsMHhmNSwweDBkLDB4YzIsMHgzYiwweGMyLDB4M2MsMHhjMiwweDNkLDB4MjJ9fSwKKyB7MTYsMHg0ODAwLDAsezB4OTAsMHg3ZiwweGVjLDB4ZTAsMHg5MCwweDc2LDB4ODMsMHhmMCwweGUwLDB4MTQsMHg2MCwweDE3LDB4MTQsMHg2MCwweDIxLDB4MTR9fSwKKyB7MTYsMHg0ODEwLDAsezB4NjAsMHgyYiwweDE0LDB4NjAsMHgzMiwweDI0LDB4MDQsMHg3MCwweDM4LDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHg5MCwweDc2LDB4OTF9fSwKKyB7MTYsMHg0ODIwLDAsezB4ZjAsMHg4MCwweDM1LDB4OTAsMHg3ZiwweGVhLDB4ZTAsMHg5MCwweDc2LDB4OTIsMHhmMCwweDEyLDB4M2UsMHg4ZiwweDgwLDB4Mjh9fSwKKyB7MTYsMHg0ODMwLDAsezB4OTAsMHg3ZiwweGVhLDB4ZTAsMHg5MCwweDc2LDB4OTAsMHhmMCwweDEyLDB4MTgsMHgwMCwweDgwLDB4MWIsMHg5MCwweDdmLDB4ZWF9fSwKKyB7MTYsMHg0ODQwLDAsezB4ZTAsMHg5MCwweDc2LDB4ODQsMHhmMCwweDgwLDB4MTEsMHg5MCwweDdmLDB4ZWEsMHhlMCwweDkwLDB4NzYsMHg5MywweGYwLDB4ODB9fSwKKyB7MTAsMHg0ODUwLDAsezB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweGQzLDB4MjJ9fSwKKyB7MTYsMHg0ODVhLDAsezB4ZTQsMHg5MCwweDc2LDB4MjYsMHhmMCwweDkwLDB4NzYsMHgyNiwweGUwLDB4ZmYsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4MzR9fSwKKyB7MTYsMHg0ODZhLDAsezB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweGZlLDB4OTAsMHg3ZiwweGVjLDB4ZTAsMHhmZCwweGVlLDB4NmR9fSwKKyB7MTYsMHg0ODdhLDAsezB4NjAsMHgwZSwweGVmLDB4YzMsMHg5NCwweDA0LDB4NTAsMHgwOCwweDkwLDB4NzYsMHgyNiwweGUwLDB4MDQsMHhmMCwweDgwLDB4ZDV9fSwKKyB7MTYsMHg0ODhhLDAsezB4ZWYsMHhiNCwweDA0LDB4MDgsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4ZWYsMHg3NSwweGYwLDB4MDN9fSwKKyB7MTYsMHg0ODlhLDAsezB4YTQsMHgyNCwweDMyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlMCwweDkwLDB4N2YsMHgwMCwweGYwLDB4OTB9fSwKKyB7IDYsMHg0OGFhLDAsezB4N2YsMHhiNSwweDc0LDB4MDEsMHhmMCwweDIyfX0sCisgeyAyLDB4NDhiMCwwLHsweDhmLDB4MmV9fSwKKyB7MTYsMHg0OGIyLDAsezB4ZTQsMHhmNSwweDJmLDB4NzUsMHgzMCwweGZmLDB4NzUsMHgzMSwweDA2LDB4NzUsMHgzMiwweGJlLDB4YWIsMHgzMCwweGFhLDB4MzF9fSwKKyB7MTYsMHg0OGMyLDAsezB4YTksMHgzMiwweDkwLDB4MDAsMHgwMSwweDEyLDB4MzYsMHhhYiwweGI0LDB4MDMsMHgxZiwweGFmLDB4MmYsMHgwNSwweDJmLDB4ZWZ9fSwKKyB7MTYsMHg0OGQyLDAsezB4NjUsMHgyZSwweDcwLDB4MDEsMHgyMiwweDEyLDB4MzYsMHg5MiwweDdlLDB4MDAsMHgyOSwweGZmLDB4ZWUsMHgzYSwweGM5LDB4ZWZ9fSwKKyB7MTYsMHg0OGUyLDAsezB4YzksMHg3NSwweDMwLDB4ZmYsMHhmNSwweDMxLDB4ODksMHgzMiwweDgwLDB4ZDIsMHg3YiwweDAwLDB4N2EsMHgwMCwweDc5LDB4MDB9fSwKKyB7IDEsMHg0OGYyLDAsezB4MjJ9fSwKKyB7MTIsMHg0OGYzLDAsezB4YzIsMHgzNywweGU0LDB4ZjUsMHgwZSwweGY1LDB4MTAsMHhjMiwweDM2LDB4ZjUsMHgxNCwweDIyfX0sCisgezE2LDB4NDkwMCwwLHsweDAyLDB4MmYsMHhlNywweDAwLDB4MDIsMHgzZCwweDQ3LDB4MDAsMHgwMiwweDRkLDB4NDYsMHgwMCwweDAyLDB4NGIsMHhkNSwweDAwfX0sCisgezE2LDB4NDkxMCwwLHsweDAyLDB4NGIsMHg2MCwweDAwLDB4MDIsMHgyZiwweGZmLDB4MDAsMHgwMiwweDRiLDB4ZWQsMHgwMCwweDAyLDB4NGIsMHg4MSwweDAwfX0sCisgezE2LDB4NDkyMCwwLHsweDAyLDB4NGMsMHgwNCwweDAwLDB4MDIsMHgzZiwweGQ1LDB4MDAsMHgwMiwweDRjLDB4MWIsMHgwMCwweDAyLDB4NGMsMHgzMiwweDAwfX0sCisgezE2LDB4NDkzMCwwLHsweDAyLDB4NGMsMHg0OSwweDAwLDB4MDIsMHg0YywweDYwLDB4MDAsMHgwMiwweDRjLDB4NzcsMHgwMCwweDAyLDB4NGMsMHg4ZSwweDAwfX0sCisgezE2LDB4NDk0MCwwLHsweDAyLDB4NGMsMHhhNSwweDAwLDB4MDIsMHg0YywweGJjLDB4MDAsMHgwMiwweDRjLDB4ZDMsMHgwMCwweDAyLDB4NGMsMHhlYSwweDAwfX0sCisgeyA4LDB4NDk1MCwwLHsweDAyLDB4NGQsMHgwMSwweDAwLDB4MDIsMHg0ZCwweDE4LDB4MDB9fSwKKyB7MTYsMHg0OTU4LDAsezB4OTAsMHg3NiwweDQ2LDB4NzQsMHg4MCwweGYwLDB4ZTQsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTN9fSwKKyB7MTYsMHg0OTY4LDAsezB4ZjAsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweDc0LDB4ODAsMHhmMCwweGU0LDB4YTMsMHhmMCwweGEzLDB4ZjB9fSwKKyB7MTYsMHg0OTc4LDAsezB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4NzQsMHg0MCwweGYwLDB4ZTQsMHhhMywweGYwLDB4YTN9fSwKKyB7MTYsMHg0OTg4LDAsezB4NzQsMHg0MCwweGYwLDB4ZTQsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjAsMHhhMywweGYwLDB4YTMsMHhmMCwweGEzLDB4ZjB9fSwKKyB7MTYsMHg0OTk4LDAsezB4YTMsMHg3NCwweDQwLDB4ZjAsMHhlNCwweGEzLDB4ZjAsMHhhMywweDc0LDB4NDAsMHhmMCwweGU0LDB4YTMsMHhmMCwweGEzLDB4ZjB9fSwKKyB7IDUsMHg0OWE4LDAsezB4YTMsMHhmMCwweGEzLDB4ZjAsMHgyMn19LAorIHsxNiwweDQ5YWQsMCx7MHhlNCwweDkwLDB4NzYsMHgyNSwweGYwLDB4OTAsMHg3NiwweDI1LDB4ZTAsMHhmZiwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHgzNH19LAorIHsxNiwweDQ5YmQsMCx7MHhmNSwweDgyLDB4ZTQsMHgzNCwweDc1LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg5MCwweDdmLDB4ZWMsMHhlMCwweGZkLDB4ZWUsMHg2ZH19LAorIHsxNiwweDQ5Y2QsMCx7MHg2MCwweDBlLDB4ZWYsMHhjMywweDk0LDB4MDQsMHg1MCwweDA4LDB4OTAsMHg3NiwweDI1LDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhkNX19LAorIHsxNiwweDQ5ZGQsMCx7MHhlZiwweGI0LDB4MDQsMHgwOCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDQsMHgwMSwweGYwLDB4MjIsMHg5MCwweDdlLDB4YzAsMHhlMH19LAorIHsxNiwweDQ5ZWQsMCx7MHhmZSwweGVmLDB4NzUsMHhmMCwweDAzLDB4YTQsMHgyNCwweDMyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg3NSwweGY1LDB4ODMsMHhlZX19LAorIHsgMiwweDQ5ZmQsMCx7MHhmMCwweDIyfX0sCisgezE2LDB4NDlmZiwwLHsweGU0LDB4ZmUsMHg3NSwweDFkLDB4ZmYsMHg3NSwweDFlLDB4MDUsMHg3NSwweDFmLDB4MTIsMHhhYiwweDFkLDB4YWEsMHgxZSwweGE5fX0sCisgezE2LDB4NGEwZiwwLHsweDFmLDB4OTAsMHgwMCwweDAxLDB4MTIsMHgzNiwweGFiLDB4NjQsMHgwMiwweDcwLDB4MmYsMHhjZCwweGVlLDB4Y2QsMHgwZSwweGVkfX0sCisgezE2LDB4NGExZiwwLHsweDZmLDB4NzAsMHgwMSwweDIyLDB4OTAsMHgwMCwweDAyLDB4MTIsMHgzNywweDBlLDB4ODUsMHhmMCwweDFiLDB4ZjUsMHgxYywweDYyfX0sCisgezE2LDB4NGEyZiwwLHsweDFiLDB4ZTUsMHgxYiwweDYyLDB4MWMsMHhlNSwweDFjLDB4NjIsMHgxYiwweDI5LDB4ZmQsMHhlNSwweDFiLDB4M2EsMHhjOSwweGVkfX0sCisgezE2LDB4NGEzZiwwLHsweGM5LDB4NzUsMHgxZCwweGZmLDB4ZjUsMHgxZSwweDg5LDB4MWYsMHg4MCwweGMxLDB4N2IsMHgwMCwweDdhLDB4MDAsMHg3OSwweDAwfX0sCisgeyAxLDB4NGE0ZiwwLHsweDIyfX0sCisgezE2LDB4NGE1MCwwLHsweDMwLDB4MmQsMHgzOSwweGMyLDB4MmQsMHg5MCwweDc2LDB4MTksMHhlMCwweGZmLDB4YjQsMHgwMSwweDBkLDB4ZTQsMHg5MCwweDc2fX0sCisgezE2LDB4NGE2MCwwLHsweDdjLDB4ZjAsMHhhMywweDc0LDB4ZjgsMHhmMCwweGEzLDB4NzQsMHgwYSwweGYwLDB4ZWYsMHhiNCwweDAyLDB4MGQsMHhlNCwweDkwfX0sCisgezE2LDB4NGE3MCwwLHsweDc2LDB4N2MsMHhmMCwweGEzLDB4NzQsMHhmMCwweGYwLDB4YTMsMHg3NCwweDBiLDB4ZjAsMHhlZiwweGI0LDB4MDMsMHgwZCwweGU0fX0sCisgezEzLDB4NGE4MCwwLHsweDkwLDB4NzYsMHg3YywweGYwLDB4YTMsMHg3NCwweGY4LDB4ZjAsMHhhMywweDc0LDB4MTcsMHhmMCwweDIyfX0sCisgezE2LDB4NGE4ZCwwLHsweGU0LDB4ZmYsMHg3NCwweDU2LDB4MmYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweDc2LDB4ZjUsMHg4MywweGUwLDB4ZmUsMHg3NCwweDI4fX0sCisgezE2LDB4NGE5ZCwwLHsweDJmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHg4MCwweGY1LDB4ODMsMHhlZSwweGYwLDB4NzQsMHg1ZSwweDJmLDB4ZjUsMHg4MiwweGU0fX0sCisgezE2LDB4NGFhZCwwLHsweDM0LDB4NzYsMHhmNSwweDgzLDB4ZTAsMHhmZSwweDc0LDB4MzgsMHgyZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ODAsMHhmNSwweDgzfX0sCisgeyA2LDB4NGFiZCwwLHsweGVlLDB4ZjAsMHgwZiwweGJmLDB4MDgsMHhjY319LAorIHsgMSwweDRhYzMsMCx7MHgyMn19LAorIHsxNiwweDRhYzQsMCx7MHhlNCwweDkwLDB4NzIsMHgzNiwweGYwLDB4YTMsMHhmMCwweDkwLDB4N2YsMHg5NywweGUwLDB4NTQsMHhmYiwweGYwLDB4ZTQsMHg5MH19LAorIHsxNiwweDRhZDQsMCx7MHg3MiwweDMzLDB4ZjAsMHg5MCwweDcyLDB4MzIsMHhmMCwweDkwLDB4NzIsMHgwMSwweDA0LDB4ZjAsMHhlNCwweDkwLDB4NzIsMHgzM319LAorIHsxNiwweDRhZTQsMCx7MHhmMCwweDkwLDB4NzIsMHgzMiwweGYwLDB4OTAsMHg3MiwweDAxLDB4MDQsMHhmMCwweDkwLDB4N2YsMHg5NywweGUwLDB4NDQsMHgwNH19LAorIHsgMiwweDRhZjQsMCx7MHhmMCwweDIyfX0sCisgezE2LDB4NGFmNiwwLHsweDkwLDB4N2YsMHhkNiwweGUwLDB4NTQsMHhmYiwweGYwLDB4ZTAsMHg0NCwweDA4LDB4ZjAsMHgzMCwweDQyLDB4MDQsMHhlMCwweDQ0fX0sCisgezE2LDB4NGIwNiwwLHsweDAyLDB4ZjAsMHg3ZiwweGRjLDB4N2UsMHgwNSwweDEyLDB4NGQsMHgyZiwweDkwLDB4N2YsMHhkNiwweGUwLDB4NTQsMHhmNywweGYwfX0sCisgeyA1LDB4NGIxNiwwLHsweGUwLDB4NDQsMHgwNCwweGYwLDB4MjJ9fSwKKyB7MTYsMHg0YjFiLDAsezB4OTAsMHg3ZiwweGViLDB4ZTAsMHgxNCwweDcwLDB4MTQsMHg5MCwweDdmLDB4ZTksMHhlMCwweDI0LDB4N2YsMHg3MCwweDA0LDB4MTJ9fSwKKyB7MTYsMHg0YjJiLDAsezB4NDgsMHg1YSwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHgyMiwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDR9fSwKKyB7IDMsMHg0YjNiLDAsezB4MDEsMHhmMCwweDIyfX0sCisgezE2LDB4NGIzZSwwLHsweDkwLDB4N2YsMHhlYiwweGUwLDB4MTQsMHg3MCwweDEzLDB4OTAsMHg3ZiwweGU5LDB4ZTAsMHgxNCwweDcwLDB4MDQsMHgxMiwweDQ5fX0sCisgezE2LDB4NGI0ZSwwLHsweGFkLDB4MjIsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDIyLDB4OTAsMHg3ZiwweGI0LDB4ZTAsMHg0NCwweDAxfX0sCisgeyAyLDB4NGI1ZSwwLHsweGYwLDB4MjJ9fSwKKyB7MTYsMHg0YjYwLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgxMCwweGYwLDB4OTB9fSwKKyB7MTYsMHg0YjcwLDAsezB4NzYsMHg5NiwweGUwLDB4NTQsMHhmZCwweGYwLDB4OTAsMHg4MCwweDAzLDB4ZjAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTB9fSwKKyB7IDEsMHg0YjgwLDAsezB4MzJ9fSwKKyB7MTYsMHg0YjgxLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFhLDB4ZTAsMHg0NCwweDAxLDB4ZjB9fSwKKyB7MTUsMHg0YjkxLDAsezB4YzIsMHgyOSwweDkwLDB4NzYsMHg4ZCwweDc0LDB4MDEsMHhmMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4NGJhMCwwLHsweDkwLDB4N2YsMHhlYSwweGUwLDB4OTAsMHg3NiwweDgyLDB4ZjAsMHhlNCwweDkwLDB4NzYsMHg5MSwweGYwLDB4OTAsMHg3NiwweDkyfX0sCisgezExLDB4NGJiMCwwLHsweGYwLDB4OTAsMHg3NiwweDkwLDB4ZjAsMHg5MCwweDc2LDB4OTMsMHhmMCwweGQzLDB4MjJ9fSwKKyB7MTYsMHg0YmJiLDAsezB4OTAsMHg3ZiwweGQ2LDB4ZTAsMHgzMCwweGU3LDB4MTIsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDdmLDB4MTQsMHg3ZSwweDAwLDB4MTJ9fSwKKyB7MTAsMHg0YmNiLDAsezB4NGQsMHgyZiwweDkwLDB4N2YsMHhkNiwweGUwLDB4NTQsMHhmZSwweGYwLDB4MjJ9fSwKKyB7MTYsMHg0YmQ1LDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4ZDIsMHgyNSwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MDh9fSwKKyB7IDgsMHg0YmU1LDAsezB4ZjAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDRiZWQsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4MDEsMHhmMH19LAorIHsgNywweDRiZmQsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDRjMDQsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4MDIsMHhmMH19LAorIHsgNywweDRjMTQsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDRjMWIsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4MDQsMHhmMH19LAorIHsgNywweDRjMmIsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDRjMzIsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4MDQsMHhmMH19LAorIHsgNywweDRjNDIsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDRjNDksMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4MDgsMHhmMH19LAorIHsgNywweDRjNTksMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDRjNjAsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4MDgsMHhmMH19LAorIHsgNywweDRjNzAsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDRjNzcsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4MTAsMHhmMH19LAorIHsgNywweDRjODcsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDRjOGUsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4MTAsMHhmMH19LAorIHsgNywweDRjOWUsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDRjYTUsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4MjAsMHhmMH19LAorIHsgNywweDRjYjUsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDRjYmMsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4MjAsMHhmMH19LAorIHsgNywweDRjY2MsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDRjZDMsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4NDAsMHhmMH19LAorIHsgNywweDRjZTMsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDRjZWEsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4NDAsMHhmMH19LAorIHsgNywweDRjZmEsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDRkMDEsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YTksMHhlMCwweDQ0LDB4ODAsMHhmMH19LAorIHsgNywweDRkMTEsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDRkMTgsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWEsMHhlMCwweDQ0LDB4ODAsMHhmMH19LAorIHsgNywweDRkMjgsMCx7MHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDRkMmYsMCx7MHg4ZSwweDM1LDB4OGYsMHgzNiwweGU1LDB4MzYsMHgxNSwweDM2LDB4YWUsMHgzNSwweDcwLDB4MDIsMHgxNSwweDM1LDB4NGUsMHg2MH19LAorIHsgNywweDRkM2YsMCx7MHgwNSwweDEyLDB4MTQsMHg4NSwweDgwLDB4ZWUsMHgyMn19LAorIHsxNiwweDRkNDYsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDA0LDB4ZjAsMHhkMH19LAorIHsgNiwweDRkNTYsMCx7MHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHg0ZDVjLDAsezB4OTAsMHg3NiwweDgyLDB4ZTAsMHg5MCwweDdmLDB4MDAsMHhmMCwweDkwLDB4N2YsMHhiNSwweDc0LDB4MDEsMHhmMCwweGQzLDB4MjJ9fSwKKyB7IDksMHg0ZDZjLDAsezB4YzIsMHgyNSwweDUzLDB4ZDgsMHhlZiwweDQzLDB4ZDgsMHgyMCwweDMyfX0sCisgeyA3LDB4NGQ3NSwwLHsweDUzLDB4OTgsMHhmZSwweDUzLDB4OTgsMHhmZCwweDMyfX0sCisgeyA3LDB4NGQ3YywwLHsweDUzLDB4YzAsMHhmZSwweDUzLDB4YzAsMHhmZCwweDMyfX0sCisgeyA2LDB4NGQ4MywwLHsweDUzLDB4OTEsMHhiZiwweGQyLDB4MmQsMHgzMn19LAorIHsgNiwweDRkODksMCx7MHg1MywweDkxLDB4N2YsMHhkMiwweDJjLDB4MzJ9fSwKKyB7IDQsMHg0ZDhmLDAsezB4NTMsMHg5MSwweGRmLDB4MzJ9fSwKKyB7IDQsMHg0ZDkzLDAsezB4NTMsMHhkOCwweGY3LDB4MzJ9fSwKKyB7IDQsMHg0ZDk3LDAsezB4MTIsMHgxNywweDMwLDB4MjJ9fSwKKyB7IDMsMHg0ZDliLDAsezB4YzIsMHg4ZCwweDMyfX0sCisgeyAzLDB4NGQ5ZSwwLHsweGMyLDB4OGYsMHgzMn19LAorIHsgMiwweDRkYTEsMCx7MHhkMywweDIyfX0sCisgeyAyLDB4NGRhMywwLHsweGQzLDB4MjJ9fSwKKyB7IDIsMHg0ZGE1LDAsezB4ZDMsMHgyMn19LAorIHsgMiwweDRkYTcsMCx7MHhkMywweDIyfX0sCisgeyAyLDB4NGRhOSwwLHsweGQzLDB4MjJ9fSwKKyB7IDIsMHg0ZGFiLDAsezB4YzMsMHgyMn19LAorIHsgMCwweDAwMDAsMSx7MH19Cit9OworLyogU291cmNlOiBFTUk2MlNGVy5IRVggCis6MTAwQzhGMDA0MTc2NjgwMTQxNzY2QTAyNDE3NjZCMEFDMTIwQzEyMTIzCis6MTA0NEExMDBDMkFGRDIyNDkwN0Y5Mzc0MzBGMDkwN0Y5Qzc0QkJGMEE0Cis6MTA0NEIxMDA5MDdGOTZFMDQ0MzBGMEUwNTQzMEYwOTA3Rjk0NzQzMDc3Cis6MTA0NEMxMDBGMDkwN0Y5RDc0Q0ZGMDkwN0Y5Nzc0QTBGMDkwN0Y5NUNFCis6MTA0NEQxMDA3NEMwRjA5MDdGOUU3NDAzRjA5MDdGOTlFMDMwRTIwOTAwCis6MTA0NEUxMDA5MDA1MTk3NEEwRjBFNEEzRjBDMjI1QzIyMkMyMjNDMjMwCis6MTA0NEYxMDAyNjEyNEFDNDEyMkRBOTEyM0JEMzEyNDU1OTEyM0E0MjJGCis6MTA0NTAxMDA5MDc2Njg3NDAxRjA3MDBGMTI0QkJCMTIwN0ZFMTI0RENBCis6MTA0NTExMDBBMTEyMUI0MDEyMTQ5NjEyNDMwQjkwN0ZBRkUwNDQwMThECis6MTA0NTIxMDBGMDkwN0ZBRUUwNDQxRkYwOTA3RkFDNzRGRkYwOTA3RjdECis6MTA0NTMxMDBBREYwOTA3RkRFRjA5MDdGREZGMDkwN0ZBQkYwOTA3RjY5Cis6MTA0NTQxMDBBOUYwOTA3RkFBRjA1MzkxRUY0M0Q4MjBEMkU4NDNEODQ1Cis6MDg0NTUxMDAyMDUzQThBMDQzQTg4MDIyMUEKKzoxMDQ3NUEwMEU0OTA3NjY2RjAxMjQ0QTEyMDI2MTM5MDc2NjZFMEMzQjAKKzoxMDQ3NkEwMDk0MDI1MDBBRTAwNEYwRDI0MjEyNEFGNjgwRUEzMDI2NTUKKzoxMDQ3N0EwMDA1MTIyODAxQzIyNjMwMjUyQjkwNzY5NkUwNTRGQ0YwQ0IKKzoxMDQ3OEEwMDkwODAwM0YwMTIxNDk2OTA3Njk2RTA0NDAzRjA5MDgwOUQKKzoxMDQ3OUEwMDAzRjBFNDkwNzY2N0YwOTA3NjY3RTAwNEYwRTBCNDRCQkIKKzowQTQ3QUEwMEY2MTIzRkZBMTI0MTFCODBDNTIyRUYKKzoxMDI4MDEwMEMyMjBDMjIxQzIyQTkwN0ZFOEUwMTIzN0Y5MjgzMDAwQTUKKzoxMDI4MTEwMDI4OEMwMTI4QTIwMjJBMUYyMTJBNkEyMjI5M0Q4MDI5MDcKKzoxMDI4MjEwMDdEODEyOUQxODIyQTg0QTEyQUJBQTIwMDAwMkFCRjkwREYKKzoxMDI4MzEwMDdGRTlFMDE0NjAxMTI0RkU2MDI4MjRGRTYwM0IyNEZDNDMKKzoxMDI4NDEwMDcwNDAxMjRCQTA0MUNCMTI0REE3NDAwMjQxQ0I5MDdGNkIKKzoxMDI4NTEwMEVBRTBCNDAxMDRDMjIyNDFDQjkwN0ZCNEUwNDQwMUYwMkMKKzoxMDI4NjEwMDQxQ0IxMjREQTk5MDdGRUFFMEI0MDEwNEQyMjI0MUNCQzEKKzoxMDI4NzEwMDkwN0ZCNEUwNDQwMUYwNDFDQjkwN0ZCNEUwNDQwMUYwOUIKKzoxMDI4ODEwMDQxQ0I5MDdGQjRFMDQ0MDFGMDQxQ0I5MDdGRTlFMDI0NUIKKzoxMDI4OTEwMEY1NzAwNTEyNDgwMDQxQ0I5MDdGQjRFMDQ0MDFGMDQxNEUKKzoxMDI4QTEwMENCOTA3RkU5RTAyNEZENjA1NDI0MDI2MDAyMjEzNDEyQzAKKzoxMDI4QjEwMDREQTc0MDAyNDFDQjkwN0ZFQUUwNzAzODkwN0ZFQ0UwNzkKKzoxMDI4QzEwMEY0NTQ4MEZGQzQ1NDBGRkZFMDU0MDcyRjI1RTAyNEI0RDMKKzoxMDI4RDEwMEY1ODJFNDM0N0ZGNTgzRTRGMDkwN0ZFQ0UwNTQ4MEZGRUYKKzoxMDI4RTEwMDEzMTMxMzU0MUZGRkUwNTQwNzJGOTA3RkQ3RjBFMDQ0RDgKKzoxMDI4RjEwMDIwRjA0MUNCOTA3RkI0RTA0NDAxRjA0MUNCMTI0REE5Q0YKKzoxMDI5MDEwMDQwMDI0MUNCOTA3RkVBRTA3MDIwOTA3RkVDRTBGNDU0RUMKKzoxMDI5MTEwMDgwRkZDNDU0MEZGRkUwNTQwNzJGMjVFMDI0QjRGNTgyNTMKKzoxMDI5MjEwMEU0MzQ3RkY1ODM3NDAxRjA0MUNCOTA3RkI0RTA0NDAxM0UKKzoxMDI5MzEwMEYwNDFDQjkwN0ZCNEUwNDQwMUYwNDFDQjkwN0ZFOUUwREUKKzoxMDI5NDEwMDYwMTIyNEY4NjAwOTI0MDI3MDI5MTI0M0RCNDFDQjEyODIKKzoxMDI5NTEwMDRENUM0MUNCMTI0REE1QTIyMkU0MzNGRjI1RTBGRkEyM0QKKzoxMDI5NjEwMDIzRTQzMzRGOTA3RjAwRjBFNEEzRjA5MDdGQjU3NDAyMkQKKzoxMDI5NzEwMEYwNDFDQjkwN0ZCNEUwNDQwMUYwNDFDQjkwN0ZFOUUwOUUKKzoxMDI5ODEwMDYwMzMyNEY2NjAyQTI0MDQ3MDNEOTA3RkVCRTAyNERFNUUKKzoxMDI5OTEwMDYwMEMwNDcwMTI5MDdGQjRFMDQ0MDFGMDQxQ0I5MDdGNTEKKzoxMDI5QTEwMEI0RTA0NDAxRjA0MUNCOTA3RkI0RTA0NDAxRjA0MUNCNkQKKzoxMDI5QjEwMDEyNDY4NTQxQ0IxMjREQTVFNDkwN0YwMEYwQTNGMDkwMjMKKzoxMDI5QzEwMDdGQjU3NDAyRjA0MUNCOTA3RkI0RTA0NDAxRjA0MUNCN0MKKzoxMDI5RDEwMDkwN0ZFOUUwMjRGNDYwMzQyNDBDNzAzOTEyNERBNTkwMDUKKzoxMDI5RTEwMDdGRUNFMEY0NTQ4MEZGQzQ1NDBGRkZFMDU0MDcyRjI1MUYKKzoxMDI5RjEwMEUwMjRCNEY1ODJFNDM0N0ZGNTgzRTA1NEZEOTA3RjAwNTgKKzoxMDJBMDEwMEYwRTRBM0YwOTA3RkI1NzQwMkYwNDFDQjkwN0ZCNEUwODUKKzoxMDJBMTEwMDQ0MDFGMDQxQ0I5MDdGQjRFMDQ0MDFGMDQxQ0I5MDdGODEKKzoxMDJBMjEwMEU5RTAyNEY2NjAxMjE0NjAxQTI0MDI3MDFERDIyMDkwOEQKKzoxMDJBMzEwMDdGQjRFMDQ0MDFGMDgwMTJEMjIwOTA3RkI0RTA0NDAxRTEKKzoxMDJBNDEwMEYwODAwNzkwN0ZCNEUwNDQwMUYwMjAyMDE4OTA3RkVFRTEKKzoxMDJBNTEwMEUwNzAwNEEzRTA2MDBCRDIyOUQyMjcxMjE3NEFEMjJBRDAKKzoxMDJBNjEwMDgwMDMxMjA4MDBDMjIwODA2MTkwN0ZFRUUwNzAwNEEzMTEKKzoxMDJBNzEwMEUwNjAwQkQyMjlEMjI4MTIxNzRBRDIyQTgwNEMxMjM4OTAKKzoxMDJBODEwMDc0ODA0NzkwN0ZFOUUwMjRGRTYwMTIxNDYwMUEyNDAyRUEKKzoxMDJBOTEwMDcwMUREMjIxOTA3RkI0RTA0NDAxRjA4MDEyRDIyMTkwQzgKKzoxMDJBQTEwMDdGQjRFMDQ0MDFGMDgwMDc5MDdGQjRFMDQ0MDFGMDIwNUUKKzoxMDJBQjEwMDIxMDMxMjEwMDBDMjIxODAxMTEyMkFENjgwMEMxMjRENUUKKzoxMDJBQzEwMEFCNTAwNzkwN0ZCNEUwNDQwMUYwMjAyQTA3OTA3RkI0MTcKKzowNTJBRDEwMEUwNDQwMkYwMjJDOAorOjEwNDNEQjAwMTI0REEzNDAwMjgxQTA5MDdGRUJFMDI0RkU2MDFFMTRERgorOjEwNDNFQjAwNjA0NjE0NjA2RTE0NzAwMjgxOTEyNDA0NjAwMjgxOTlGRQorOjEwNDNGQjAwNzQwNTkwN0ZENEYwNzQwMDkwN0ZENUYwMjI5MDdGRUEwMworOjEwNDQwQjAwRTBGRjEyNDlGRjhCMjA4QTIxODkyMkVBNDk2MDExQ0VGNQorOjEwNDQxQjAwRUFDRUVFOTA3RkQ0RjBDRkU5Q0ZFRjkwN0ZENUYwMjJBQworOjEwNDQyQjAwOTA3RkI0RTA0NDAxRjAyMjkwN0ZFQUUwRkYxMjQ4QjBBNQorOjEwNDQzQjAwOEIyMDhBMjE4OTIyRUE0OTYwMTFDRUVBQ0VFRTkwN0Y0OQorOjEwNDQ0QjAwRDRGMENGRTlDRkVGOTA3RkQ1RjAyMjkwN0ZCNEUwNDQ0QQorOjEwNDQ1QjAwMDFGMDIyOTA3RkVBRTBGRjkwN0VDMEUwRkRBM0UwRkIzRAorOjEwNDQ2QjAwMTIxNzk0OEIyMDhBMjE4OTIyRUE0OTYwMTFDRUVBQ0U1OQorOjEwNDQ3QjAwRUU5MDdGRDRGMENGRTlDRkVGOTA3RkQ1RjAyMjkwN0ZGNQorOjEwNDQ4QjAwQjRFMDQ0MDFGMDIyOTA3RkI0RTA0NDAxRjAyMjkwN0YyRAorOjA1NDQ5QjAwQjRFMDQ0MDFGMDUzCis6MDE0NEEwMDAyMkY5Cis6MDMwMDMzMDAwMjRENkMwRgorOjA5NEQ2QzAwQzIyNTUzRDhFRjQzRDgyMDMyRDAKKzowMjBDOUYwMEMxMkY2MworOjA2M0ZGQTAwMTI0QUM0QzIzMTIyOEMKKzoxMDQzMEIwMEU0OTA3Njk2RjA5MDgwMDNGMDkwN0ZFMDc0OTBGMDkwQkMKKzoxMDQzMUIwMDdGRTE3NDA0RjBFNDkwN0ZEREYwOTA3RkExRjA1MzhFODkKKzoxMDQzMkIwMEY4NzU4ODA1NzVCODIwNzVGODAxNDM4RTMwRjVDODc1OUEKKzoxMDQzM0IwMENBN0Y3NUNCRjg0M0E4MjAxMjA3NEFDMjJDQzIyREMyRTQKKzoxMDQzNEIwMDJCQzIyRjkwN0ZGQzc0RERGMDkwN0ZGRjc0RkZGMDkwRjkKKzoxMDQzNUIwMDdGOTdFMDQ0MDFGMDkwNzYxOTc0MDFGMEU0OTA3Njg1MzQKKzoxMDQzNkIwMEYwQTNGMDkwNzY4MUYwOTA3NjgwRjAxMjQ5NTgxMjBGRkUKKzoxMDQzN0IwMEM2MTI0QThEOTA3Rjk3RTA0NDA4RjBFMDU0QjlGMEQyMTIKKzoxMDQzOEIwMDMwMjAzMDE4MTI0N0I0MTIzMDAwMTI0MDAwMTI0MjE2N0YKKzoxMDQzOUIwMDEyNEE1MDEyMUIwNDEyMTY2MTEyNDIxNkMyMkZDMjMxNUUKKzoxMDQzQUIwMEMyMzJDMjM0QzIzM0MyMjlDMjI3QzIyOEU0RjUxMTkwRUIKKzoxMDQzQkIwMDc2ODlGMDkwNzYzRkYwOTA3NjQxRjA5MDc2NDBGMDkwRDEKKzoxMDQzQ0IwMDc2OEFGMEEzRjBBMzA0RjBFNEEzRjA5MDc2OTlGMDIyQTAKKzoxMDRBNTAwMDMwMkQzOUMyMkQ5MDc2MTlFMEZGQjQwMTBERTQ5MDc2MjcKKzoxMDRBNjAwMDdDRjBBMzc0RjhGMEEzNzQwQUYwRUZCNDAyMERFNDkwQTQKKzoxMDRBNzAwMDc2N0NGMEEzNzRGMEYwQTM3NDBCRjBFRkI0MDMwREU0QjQKKzowRDRBODAwMDkwNzY3Q0YwQTM3NEY4RjBBMzc0MTdGMDIyNzgKKzoxMDFCMDQwMDMwMkMzOEMyMkM5MDc2MTlFMEZGQjQwMTBFOTA3NjdDMEMKKzoxMDFCMTQwMDc0QzBGMEEzNzQxNEYwQTM3NDBCRjBFRkI0MDIwREU0REEKKzoxMDFCMjQwMDkwNzY3Q0YwQTM3NDEwRjBBMzc0MENGMEVGQjQwMzBCNjQKKzowQzFCMzQwMEU0OTA3NjdDRjBBMzc0MThGMEEzRjAyMjdCCis6MTA0MTFCMDA5MDc2OERFMDY0MDE3MDI3MzAyNzA4QzIyNzEyMDgwMEMzCis6MTA0MTJCMDAxMjE3NEEzMDI4MDhDMjI4MTIzODc0MTIxNzRBMzAyQTNDCis6MTA0MTNCMDAwRUU0OTA3NjhERjBDMjJBOTA3RkI0RTA0NDAyRjA5MEFBCis6MTA0MTRCMDA3NjNGRTBCNDAxMDVFNEYwMTIzMjZGOTA3NjQxRTBCNEIzCis6MTA0MTVCMDAwMTA1RTRGMDEyMzQ5QTkwNzY0MEUwQjQwMTAzMTIzNDc2Cis6MTA0MTZCMDA5QTkwN0Y5QkUwMjBFNDAyQzIzRjkwN0Y5QkUwMzBFNDdCCis6MTA0MTdCMDAwMkQyM0Y5MDdGOUJFMDIwRTUwMkMyM0U5MDdGOUJFMDA2Cis6MTA0MThCMDAzMEU1MDJEMjNFQTI0MTMwM0YwMUIzNTAxRkEyM0Y5MjE1Cis6MTA0MTlCMDA0MTMwM0YwOTkwNzY5N0UwNTRGRUYwODAwNzkwNzY5Nzc4Cis6MTA0MUFCMDBFMDQ0MDFGMDkwNzY5N0UwOTA4MDAyRjAzMDNGMzQ5MDNECis6MTA0MUJCMDA3NjE5RTBGRkI0MDEwRTkwNzY3Qzc0NjdGMEEzNzQwNjU5Cis6MTA0MUNCMDBGMEEzNzQwQkYwRUZCNDAyMEJFNDkwNzY3Q0YwQTNGMDQ5Cis6MTA0MURCMDBBMzc0MENGMEVGQjQwMzBCRTQ5MDc2N0NGMEEzRjBBMzg0Cis6MTA0MUVCMDA3NDE4RjBBMjQwMzAzRTAxQjM1MDFGQTIzRTkyNDAzMEYzCis6MTA0MUZCMDAzRTA5OTA3Njk1RTA0NDA0RjA4MDA3OTA3Njk1RTA1NDY0Cis6MEI0MjBCMDBGQkYwOTA3Njk1RTA5MDgwMDFGMDIyMUYKKzowMjA3RkUwMEQzMjIwNAorOjAyNERBMTAwRDMyMjFCCis6MDI0REEzMDBEMzIyMTkKKzoxMDRCQTAwMDkwN0ZFQUUwOTA3NjgyRjBFNDkwNzY5MUYwOTA3NjkyQjEKKzowQjRCQjAwMEYwOTA3NjkwRjA5MDc2OTNGMEQzMjIwNgorOjEwNEQ1QzAwOTA3NjgyRTA5MDdGMDBGMDkwN0ZCNTc0MDFGMEQzMjJDMgorOjEwNDgwMDAwOTA3RkVDRTA5MDc2ODNGMEUwMTQ2MDE3MTQ2MDIxMTQ0MAorOjEwNDgxMDAwNjAyQjE0NjAzMjI0MDQ3MDM4OTA3RkVBRTA5MDc2OTEyNworOjEwNDgyMDAwRjA4MDM1OTA3RkVBRTA5MDc2OTJGMDEyM0U4RjgwMjhGQgorOjEwNDgzMDAwOTA3RkVBRTA5MDc2OTBGMDEyMTgwMDgwMUI5MDdGRUE1QgorOjEwNDg0MDAwRTA5MDc2ODRGMDgwMTE5MDdGRUFFMDkwNzY5M0YwODA5QgorOjBBNDg1MDAwMDc5MDdGQjRFMDQ0MDFGMEQzMjI4QQorOjEwNDY4NTAwOTA3RkVDRTA5MDc2ODNGMEUwMTQ2MDFEMTQ2MDJBMTRBRQorOjEwNDY5NTAwNjAzNzE0NjA0NDI0MDQ3MDUwOTA3NjkxRTA5MDdGMDA1OAorOjEwNDZBNTAwRjA5MDdGQjU3NDAxRjA4MDQ3OTA3NjkyRTA5MDdGMDA5RQorOjEwNDZCNTAwRjA5MDdGQjU3NDAxRjA4MDM3OTA3NjkwRTA5MDdGMDBBMAorOjEwNDZDNTAwRjA5MDdGQjU3NDAxRjA4MDI3OTA3Njg0RTA5MDdGMDBBQworOjEwNDZENTAwRjA5MDdGQjU3NDAxRjA4MDE3OTA3NjkzRTA5MDdGMDA5RAorOjEwNDZFNTAwRjA5MDdGQjU3NDAxRjA4MDA3OTA3RkI0RTA0NDAxRjA0RAorOjAyNDZGNTAwRDMyMkNFCis6MDI0REE1MDBEMzIyMTcKKzowMjREQTcwMEQzMjIxNQorOjAyNERBOTAwRDMyMjEzCis6MDI0REFCMDBDMzIyMjEKKzoxMDJGRTcwMEMwRTBDMDgzQzA4MkQyMjY1MzkxRUY5MDdGQUI3NDAxQkIKKzowODJGRjcwMEYwRDA4MkQwODNEMEUwMzI1QgorOjEwNEQ0NjAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFCNzQwNEYwRDA3MworOjA2NEQ1NjAwODJEMDgzRDBFMDMyQTAKKzoxMDNENDcwMEMwRTBDMEYwQzA4M0MwODJDMEQwRThDMEUwRTlDMEUwRjYKKzoxMDNENTcwMEVBQzBFMEVCQzBFMEVDQzBFMEVEQzBFMEVFQzBFMEVGQjEKKzoxMDNENjcwMEMwRTA5MDdGQTJFMDkwNzY3RkYwOTA3Rjc0RTA5MDc2M0QKKzoxMDNENzcwMDg3RjA5MDdGNzVFMDkwNzY4OEYwOTA3Rjk4RTA0NDAyMTYKKzoxMDNEODcwMEYwOTA3Njk2RTBGRjIwRTEwQzQ0MDJGMDkwODAwM0YwN0IKKzoxMDNEOTcwMEQyMzIxMjRBQzQ5MDc2N0ZFMDIwRTI1MDkwNzY4N0UwRDQKKzoxMDNEQTcwMEZFQTNFMDdDMDAyNDAwRjUzNEVDM0VGNTMzOTA3Njk4RDIKKzoxMDNEQjcwMEUwRkRBRTMzQUYzNDEyMzZEODkwNzY4N0VGRjBEMjJGQ0UKKzoxMDNEQzcwMDMwMzEyOTIwM0YyNkMyMzE5MDdGOTRFMDU0Q0ZGMDkwQzQKKzoxMDNERDcwMDdGOUFFMDMwRTQwNEQyMkRDMjJDOTA3RjlBRTAyMEU1NTAKKzoxMDNERTcwMDA0QzIyREQyMkM5MDdGOTRFMDQ0MzBGMDEyNEE1MDEyMzYKKzoxMDNERjcwMDFCMDQzMDJGMTIxMjQyMTZDMjJGNzVFODAxMTIxNjhBQzEKKzoxMDNFMDcwMDc1RTgwREQyMkI4MDA1NzVFODAxQzIyQjIwMkIzNDkwNjUKKzoxMDNFMTcwMDc2MTlFMEZGQjQwMTBFOTA3NjdDNzQ2N0YwQTM3NDA2MDAKKzoxMDNFMjcwMEYwQTM3NDBCRjBFRkI0MDIwQjkwNzY3Q0U0RjBBM0YwRjAKKzoxMDNFMzcwMEEzNzQwQ0YwRUZCNDAzMEI5MDc2N0NFNEYwQTNGMEEzMkIKKzoxMDNFNDcwMDc0MThGMDc1Q0FEMzc1Q0JGRUQyQ0EzMDM0MDRDMjM0QTUKKzoxMDNFNTcwMDgwMDJEMjM0NTM5MUVGOTA3RkFCNzQwMkYwRjA5MDdGRTEKKzoxMDNFNjcwMDk4RTA1NEZERjBEMEUwRkZEMEUwRkVEMEUwRkREMEUwRDgKKzoxMDNFNzcwMEZDRDBFMEZCRDBFMEZBRDBFMEY5RDBFMEY4RDBEMEQwMjkKKzowODNFODcwMDgyRDA4M0QwRjBEMEUwMzJCQworOjEwNEI2MDAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFCNzQxMEYwOTA4RgorOjEwNEI3MDAwNzY5NkUwNTRGREYwOTA4MDAzRjBEMDgyRDA4M0QwRTBCMAorOjAxNEI4MDAwMzIwMgorOjAxMkZGRjAwMzI5RgorOjEwNEJENTAwQzBFMEMwODNDMDgyRDIyNTUzOTFFRjkwN0ZBQjc0MDhBQgorOjA4NEJFNTAwRjBEMDgyRDA4M0QwRTAzMjUxCis6MTA0QkVEMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQTlFMDQ0MDFGMEYzCis6MDc0QkZEMDBEMDgyRDA4M0QwRTAzMjJBCis6MTA0QjgxMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUFFMDQ0MDFGMDVFCis6MEY0QjkxMDBDMjI5OTA3NjhENzQwMUYwRDA4MkQwODNEMEUwMzJBQgorOjEwNEMwNDAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkE5RTA0NDAyRjBEQQorOjA3NEMxNDAwRDA4MkQwODNEMEUwMzIxMgorOjEwM0ZENTAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFBRTA0NDAyRjAxNQorOjEwM0ZFNTAwOTA3RkM3RTBGNTExNzUwRjAwNzUwRDAwRDIzM0QwODJCMworOjA1M0ZGNTAwRDA4M0QwRTAzMjkyCis6MTA0QzFCMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQTlFMDQ0MDRGMEMxCis6MDc0QzJCMDBEMDgyRDA4M0QwRTAzMkZCCis6MTA0QzMyMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUFFMDQ0MDRGMEE5Cis6MDc0QzQyMDBEMDgyRDA4M0QwRTAzMkU0Cis6MTA0QzQ5MDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQTlFMDQ0MDhGMDhGCis6MDc0QzU5MDBEMDgyRDA4M0QwRTAzMkNECis6MTA0QzYwMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUFFMDQ0MDhGMDc3Cis6MDc0QzcwMDBEMDgyRDA4M0QwRTAzMkI2Cis6MTA0Qzc3MDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQTlFMDQ0MTBGMDU5Cis6MDc0Qzg3MDBEMDgyRDA4M0QwRTAzMjlGCis6MTA0QzhFMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUFFMDQ0MTBGMDQxCis6MDc0QzlFMDBEMDgyRDA4M0QwRTAzMjg4Cis6MTA0Q0E1MDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQTlFMDQ0MjBGMDFCCis6MDc0Q0I1MDBEMDgyRDA4M0QwRTAzMjcxCis6MTA0Q0JDMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUFFMDQ0MjBGMDAzCis6MDc0Q0NDMDBEMDgyRDA4M0QwRTAzMjVBCis6MTA0Q0QzMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQTlFMDQ0NDBGMENECis6MDc0Q0UzMDBEMDgyRDA4M0QwRTAzMjQzCis6MTA0Q0VBMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUFFMDQ0NDBGMEI1Cis6MDc0Q0ZBMDBEMDgyRDA4M0QwRTAzMjJDCis6MTA0RDAxMDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQTlFMDQ0ODBGMDVFCis6MDc0RDExMDBEMDgyRDA4M0QwRTAzMjE0Cis6MTA0RDE4MDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUFFMDQ0ODBGMDQ2Cis6MDc0RDI4MDBEMDgyRDA4M0QwRTAzMkZECis6MTA0MjE2MDA5MDc2MTlFMDY0MDE3MDM1OTA3Njg3RTBGRkQzOTQyRDhGCis6MTA0MjI2MDA0MDJCOTA3Njg2NzQwMUYwOTA3Njg1RTAwNEYwRTBEMzFBCis6MTA0MjM2MDA5NDBGNDAxOUU0RjBFRkQzOTQzMTQwMDg5MDc2MTk3NDQ2Cis6MTA0MjQ2MDAwM0YwODAwNjkwNzYxOTc0MDJGMDEyM0U4RjkwNzYxOTZDCis6MTA0MjU2MDBFMEI0MDIyQzkwNzY4N0UwRkZDMzk0MkY1MDIyRUZEMzcwCis6MTA0MjY2MDA5NDJBNDAxQzkwNzY4Njc0MDFGMDkwNzY4NUUwMDRGMERFCis6MTA0Mjc2MDBFMEQzOTQwRjQwMEFFNEYwOTA3NjE5MDRGMDEyM0U4RkQyCis6MTA0Mjg2MDA5MDc2MTlFMEI0MDIyNjkwNzY4N0UwRDM5NDMxNDAxREVCCis6MTA0Mjk2MDA5MDc2ODY3NDAxRjA5MDc2ODVFMDA0RjBFMEQzOTQwRjcyCis6MTA0MkE2MDA0MDBCRTRGMDkwNzYxOTc0MDNGMDEyM0U4RjkwNzYxOTY1Cis6MTA0MkI2MDBFMDY0MDM3MDNGOTA3Njg3RTBGRkMzOTQ1RjUwMzU5MENCCis6MTA0MkM2MDA3Njg2NzQwMUYwOTA3Njg1RTAwNEYwRTBEMzk0MEY0MDkyCis6MTA0MkQ2MDAyM0U0RjBFRkMzOTQyRjUwMENFRkQzOTQyQTQwMDY5MEJBCis6MTA0MkU2MDA3NjE5NzQwMUYwRUZEMzk0MkY0MDA2OTA3NjE5NzQwMjc0Cis6MTA0MkY2MDBGMDEyM0U4RjkwNzY4NkUwNzAwNTkwNzY4NUYwMjJFNDg3Cis6MDU0MzA2MDA5MDc2ODZGMDIyMTQKKzoxMDA3NEEwMDkwNzY5QTc0MDJGMEU0OTA3NjkxRjBBM0YwOTA3NjkwMDUKKzoxMDA3NUEwMEYwOTA3NjkzRjA5MDc2OTY3NDAzRjA5MDgwMDNGMEU0MkMKKzoxMDA3NkEwMDkwNzY5N0YwOTA4MDAyRjA5MDc2OTQwNEYwOTA4MDAwNTIKKzoxMDA3N0EwMEYwRTQ5MDc2OEVGMDkwNzYxQUYwOTA3Njk1MDRGMEMyQjYKKzoxMDA3OEEwMDJFOTA3RjlCRTBGRjU0MTBGRjcwMDJDMjNGOTA3RjlCMjgKKzoxMDA3OUEwMEUwRkY1NDEwRkVGRkJFMTAwMkQyM0Y5MDdGOUJFMEZGQTUKKzoxMDA3QUEwMDU0MjBGRjcwMDJDMjNFOTA3RjlCRTBGRjU0MjBGRUZGNjAKKzoxMDA3QkEwMEJFMjAwMkQyM0UzMDNGMDk5MDc2OTdFMDU0RkVGMDgwODgKKzoxMDA3Q0EwMDA3OTA3Njk3RTA0NDAxRjA5MDc2OTdFMDkwODAwMkYwRTcKKzoxMDA3REEwMDMwM0UwOTkwNzY5NUUwNDQwNEYwODAwNzkwNzY5NUUwRTMKKzoxMDA3RUEwMDU0RkJGMDkwNzY5NUUwOTA4MDAxRjBBMjNFOTI0MEEyRjAKKzowMzA3RkEwMDNGOTI0MUVBCis6MDEwN0ZEMDAyMkQ5Cis6MTAzRThGMDA5MDc2OTJFMDE0NjAxRDE0NzAwMkUxNDQyNDAyNjAwMkU3Cis6MTAzRTlGMDBFMUQ0OTA3Njk0NzQwMUYwOTA4MDAwRjBFNDkwNzY4RUU3Cis6MTAzRUFGMDBGMEQyMzEyMjkwNzYxOUUwRkZCNDAxMUJFNDkwN0ZGMjNCCis6MTAzRUJGMDBGMDkwN0ZGMzc0MzBGMDkwN0ZGRjc0RkNGMDkwNzY5NzYyCis6MTAzRUNGMDBFMDU0RkRGMDU0RkJGMEVGQjQwMjFCRTQ5MDdGRjJGMEVFCis6MTAzRURGMDA5MDdGRjM3NDM0RjA5MDdGRkY3NEZDRjA5MDc2OTdFMDRFCis6MTAzRUVGMDA0NDAyRjA1NEZCRjBFRkI0MDMxOEU0OTA3RkYyRjA5MDJCCis6MTAzRUZGMDA3RkYzNzQ2NEYwOTA3RkZGNzRGQ0YwOTA3Njk3RTA0NDRBCis6MTAzRjBGMDAwNEYwOTA3Njk0RTA0NDAxRjA5MDgwMDBGMDMwM0YwOTg3Cis6MTAzRjFGMDA5MDc2OTdFMDU0RkVGMDgwMDc5MDc2OTdFMDQ0MDFGMDlBCis6MTAzRjJGMDA5MDc2OTdFMDkwODAwMkYwOTA3Njk4NzQwNEYwOTA3NkY3Cis6MTAzRjNGMDA4RTc0MDFGMDIyOTA3NjE5RTBGRkI0MDExQkU0OTA3RjlDCis6MTAzRjRGMDBGMkYwOTA3RkYzNzQ0NEYwOTA3RkZGNzRGQ0YwOTA3NjYyCis6MTAzRjVGMDA5N0UwNTRGREYwNTRGQkYwRUZCNDAyMUJFNDkwN0ZGMkI2Cis6MTAzRjZGMDBGMDkwN0ZGMzc0NENGMDkwN0ZGRjc0RkNGMDkwNzY5Nzk1Cis6MTAzRjdGMDBFMDQ0MDJGMDU0RkJGMEVGQjQwMzE4RTQ5MDdGRjJGMDRBCis6MTAzRjhGMDA5MDdGRjM3NDk0RjA5MDdGRkY3NEZDRjA5MDc2OTdFMDNECis6MTAzRjlGMDA0NDA0RjA5MDc2OTRFMDU0RkVGMDkwODAwMEYwMzAzRkFGCis6MTAzRkFGMDAwOTkwNzY5N0UwNTRGRUYwODAwNzkwNzY5N0UwNDQwMUYxCis6MTAzRkJGMDBGMDkwNzY5N0UwOTA4MDAyRjA5MDc2OTg3NDA2RjA5MEVCCis6MDYzRkNGMDA3NjhFNzQwMkYwMjI2MAorOjEwMTgwMDAwOTA3NjkwRTAxNDYwMzcxNDcwMDIwMUQ4MTQ3MDAyMjFCMQorOjEwMTgxMDAwNzIxNDcwMDI0MTNCMjQwNDYwMDI2MTAzOTA3RkZDNzRFNworOjEwMTgyMDAwQ0NGMDkwN0ZGRjc0RkNGMDkwNzY5NUUwNDQwMUYwNTQ4QQorOjEwMTgzMDAwMDVGMDkwODAwMUYwRTQ5MDc2MUFGMEMyMkUyMjkwNzZBNgorOjEwMTg0MDAwOTVFMDQ0MDFGMDQ0MDJGMDMwM0UwNkUwNDQwNEYwODBBQworOjEwMTg1MDAwMDc5MDc2OTVFMDU0RkJGMDkwNzYxQUUwQjQwMTA4OTA3QQorOjEwMTg2MDAwNzY5NUUwOTA4MDAxRjA5MDc2MTlFMEZGQjQwMTIyOTAyNworOjEwMTg3MDAwN0ZGQzc0NzRGMDkwN0ZGRjc0RkNGMDkwNzY4Rjc0MkI3MworOjEwMTg4MDAwRjA5MDc2OTdFMDU0RkRGMEU0OTA3NjgxRjA5MDc2ODBDOQorOjEwMTg5MDAwRjBFRkI0MDIyMjkwN0ZGQzc0NjhGMDkwN0ZGRjc0RkMzQworOjEwMThBMDAwRjA5MDc2OEY3NDJGRjA5MDc2OTdFMDQ0MDJGMEU0OTBGOQorOjEwMThCMDAwNzY4MUYwOTA3NjgwRjAzMDNGMDk5MDc2OTdFMDU0RkU4NAorOjEwMThDMDAwRjA4MDA3OTA3Njk3RTA0NDAxRjA5MDc2OTdFMDU0RkIyMworOjEwMThEMDAwRjA5MDgwMDJGMEQyMkUyMjkwNzY5NUUwNTRGRUYwNDRGMworOjEwMThFMDAwMDJGMDMwM0UwNkUwNDQwNEYwODAwNzkwNzY5NUUwNTQyNAorOjEwMThGMDAwRkJGMDkwNzYxQUUwQjQwMTA4OTA3Njk1RTA5MDgwMDFCNAorOjEwMTkwMDAwRjA5MDc2MTlFMEZGQjQwMTIyOTA3RkZDNzQzMEYwOTBFMworOjEwMTkxMDAwN0ZGRjc0RkNGMDkwNzY4Rjc0MkJGMDkwNzY5N0UwNTRGNAorOjEwMTkyMDAwRkRGMEU0OTA3NjgxRjA5MDc2ODBGMEVGQjQwMjIyOTBBMgorOjEwMTkzMDAwN0ZGQzc0MUNGMDkwN0ZGRjc0RkNGMDkwNzY4Rjc0MkYwNgorOjEwMTk0MDAwRjA5MDc2OTdFMDQ0MDJGMEU0OTA3NjgxRjA5MDc2ODAxMworOjEwMTk1MDAwRjAzMDNGMDk5MDc2OTdFMDU0RkVGMDgwMDc5MDc2OTczQworOjEwMTk2MDAwRTA0NDAxRjA5MDc2OTdFMDU0RkJGMDkwODAwMkYwRDJEMgorOjEwMTk3MDAwMkUyMjkwNzY5NUUwNDQwMUYwNDQwMkYwNDQwOEYwMzBDNQorOjEwMTk4MDAwM0UwNkUwNDQwNEYwODAwNzkwNzY5NUUwNTRGQkYwOTAyQQorOjEwMTk5MDAwNzYxQUUwQjQwMTA4OTA3Njk1RTA5MDgwMDFGMDkwNzY5OAorOjEwMTlBMDAwMTlFMEZGQjQwMTI1OTA3RkZDNzRDQ0YwOTA3RkZGNzRBOAorOjEwMTlCMDAwRkNGMDkwNzY4Rjc0MkJGMDkwNzY5N0UwNTRGREYwNTQwNQorOjEwMTlDMDAwRkJGMEU0OTA3NjgxRjA5MDc2ODBGMEVGQjQwMjI1OTAwMQorOjEwMTlEMDAwN0ZGQzc0QzhGMDkwN0ZGRjc0RkNGMDkwNzY4Rjc0MkZCQQorOjEwMTlFMDAwRjA5MDc2OTdFMDQ0MDJGMDU0RkJGMEU0OTA3NjgxRjBCQQorOjEwMTlGMDAwOTA3NjgwRjBFRkI0MDMyNTkwN0ZGQzc0OThGMDkwN0Y5MAorOjEwMUEwMDAwRkY3NEZDRjA5MDc2OEY3NDVGRjA5MDc2OTdFMDU0RkQ1MQorOjEwMUExMDAwRjA0NDA0RjBFNDkwNzY4MUYwOTA3NjgwRjAzMDNGMDk1NQorOjEwMUEyMDAwOTA3Njk3RTA1NEZFRjA4MDA3OTA3Njk3RTA0NDAxRjBCRQorOjEwMUEzMDAwOTA3Njk3RTA5MDgwMDJGMEQyMkUyMjkwNzY5NUUwNTQzNgorOjEwMUE0MDAwRkVGMDQ0MDJGMDQ0MDhGMDMwM0UwNkUwNDQwNEYwODAyQQorOjEwMUE1MDAwMDc5MDc2OTVFMDU0RkJGMDkwNzYxQUUwQjQwMTA4OTA3OAorOjEwMUE2MDAwNzY5NUUwOTA4MDAxRjA5MDc2MTlFMEZGQjQwMTI1OTAyMgorOjEwMUE3MDAwN0ZGQzc0QjRGMDkwN0ZGRjc0RkNGMDkwNzY4Rjc0MkIzMQorOjEwMUE4MDAwRjA5MDc2OTdFMDU0RkRGMDU0RkJGMEU0OTA3NjgxRjAwRQorOjEwMUE5MDAwOTA3NjgwRjBFRkI0MDIyNTkwN0ZGQzc0QjBGMDkwN0ZEOAorOjEwMUFBMDAwRkY3NEZDRjA5MDc2OEY3NDJGRjA5MDc2OTdFMDQ0MDJFQworOjEwMUFCMDAwRjA1NEZCRjBFNDkwNzY4MUYwOTA3NjgwRjBFRkI0MDM4MAorOjEwMUFDMDAwMjU5MDdGRkM3NDY4RjA5MDdGRkY3NEZDRjA5MDc2OEYxNworOjEwMUFEMDAwNzQ1RkYwOTA3Njk3RTA1NEZERjA0NDA0RjBFNDkwNzY2MworOjEwMUFFMDAwODFGMDkwNzY4MEYwMzAzRjA5OTA3Njk3RTA1NEZFRjBEOAorOjEwMUFGMDAwODAwNzkwNzY5N0UwNDQwMUYwOTA3Njk3RTA5MDgwMDIxRQorOjA0MUIwMDAwRjBEMjJFMjJDRgorOjA0MENBMTAwNDE3NjIzMDA3NQorOjEwMkRBOTAwRTQ5MDc2MzZGMEUwRkY3NUYwMDNBNDI0MEVGNTgyRTQ5MgorOjEwMkRCOTAwMzQ3NUY1ODM3NDAxRjBFRjc1RjAwM0E0MjQwRkY1ODJERgorOjEwMkRDOTAwRTQzNDc1RjU4Mzc0MDFGMEVGNzVGMDAzQTQyNDEwRjU2QworOjEwMkREOTAwODJFNDM0NzVGNTgzRTRGMDkwNzYzNkUwMDRGMEUwRkZBMAorOjEwMkRFOTAwNzVGMDAzQTQyNDBFRjU4MkU0MzQ3NUY1ODM3NDEwRjBBQworOjEwMkRGOTAwRUY3NUYwMDNBNDI0MEZGNTgyRTQzNDc1RjU4Mzc0MDVBNworOjEwMkUwOTAwRjBFRjc1RjAwM0E0MjQxMEY1ODJFNDM0NzVGNTgzRTQzQQorOjEwMkUxOTAwRjA5MDc2MzZFMDA0RjBFMEZGNzVGMDAzQTQyNDBFRjU5NworOjEwMkUyOTAwODJFNDM0NzVGNTgzNzQwMkYwRUY3NUYwMDNBNDI0MEY3RQorOjEwMkUzOTAwRjU4MkU0MzQ3NUY1ODM3NDAyRjBFRjc1RjAwM0E0MjQ4OAorOjEwMkU0OTAwMTBGNTgyRTQzNDc1RjU4M0U0RjA5MDc2MzZFMDA0RjAwOQorOjEwMkU1OTAwRTBGRjc1RjAwM0E0MjQwRUY1ODJFNDM0NzVGNTgzNzQ1QworOjEwMkU2OTAwMDFGMEVGNzVGMDAzQTQyNDBGRjU4MkU0MzQ3NUY1ODNCRQorOjEwMkU3OTAwNzQwM0YwRUY3NUYwMDNBNDI0MTBGNTgyRTQzNDc1RjVCQQorOjEwMkU4OTAwODNFNEYwOTA3NjM2RTAwNEYwRTBGRjc1RjAwM0E0MjRDMworOjEwMkU5OTAwMEVGNTgyRTQzNDc1RjU4Mzc0MTBGMEVGNzVGMDAzQTQzMAorOjEwMkVBOTAwMjQwRkY1ODJFNDM0NzVGNTgzNzQwNkYwRUY3NUYwMDNBOQorOjEwMkVCOTAwQTQyNDEwRjU4MkU0MzQ3NUY1ODNFNEYwOTA3NjM2RTBDNQorOjEwMkVDOTAwMDRGMEUwRkY3NUYwMDNBNDI0MEVGNTgyRTQzNDc1RjVFRgorOjEwMkVEOTAwODM3NDAyRjBFRjc1RjAwM0E0MjQwRkY1ODJFNDM0NzVDRQorOjEwMkVFOTAwRjU4Mzc0MDRGMEVGNzVGMDAzQTQyNDEwRjU4MkU0MzQzQgorOjEwMkVGOTAwNzVGNTgzRTRGMDkwNzYzNkUwMDRGMEUwRkY3NUYwMDNCMQorOjEwMkYwOTAwQTQyNDBFRjU4MkU0MzQ3NUY1ODM3NDAyRjBFRjc1RjBBQworOjEwMkYxOTAwMDNBNDI0MEZGNTgyRTQzNDc1RjU4Mzc0MDhGMEVGNzU4MgorOjEwMkYyOTAwRjAwM0E0MjQxMEY1ODJFNDM0NzVGNTgzNzQwNEYwOTA1OQorOjEwMkYzOTAwNzYzNkUwMDRGMEUwRkY3NUYwMDNBNDI0MEVGNTgyRTQ5MAorOjEwMkY0OTAwMzQ3NUY1ODM3NDAyRjBFRjc1RjAwM0E0MjQwRkY1ODI0QworOjEwMkY1OTAwRTQzNDc1RjU4Mzc0MEFGMEVGNzVGMDAzQTQyNDEwRjVEMQorOjEwMkY2OTAwODJFNDM0NzVGNTgzNzQwNEYwOTA3NjM2RTAwNEYwRTA3OQorOjEwMkY3OTAwRkY3NUYwMDNBNDI0MEVGNTgyRTQzNDc1RjU4Mzc0MDIxOQorOjEwMkY4OTAwRjBFRjc1RjAwM0E0MjQwRkY1ODJFNDM0NzVGNTgzNzQyQQorOjEwMkY5OTAwMDlGMEVGNzVGMDAzQTQyNDEwRjU4MkU0MzQ3NUY1ODM4NAorOjEwMkZBOTAwNzQwNEYwOTA3NjM2RTAwNEYwRTBGRjc1RjAwM0E0MjQ5MQorOjEwMkZCOTAwMEVGNTgyRTQzNDc1RjU4Mzc0MDJGMEVGNzVGMDAzQTQxRAorOjEwMkZDOTAwMjQwRkY1ODJFNDM0NzVGNTgzNzQwN0YwRUY3NUYwMDM4NworOjBFMkZEOTAwQTQyNDEwRjU4MkU0MzQ3NUY1ODM3NDA0RjAyMjBDCis6MTAzQkQzMDBFNDkwNzYzNkYwRTBGQjc1RjAwRkE0MjQ0MUY1ODJFNDFGCis6MTAzQkUzMDAzNDc1RjU4Mzc0NDBGMEVCNzVGMDBGQTQyNDQyRjU4MjJECis6MTAzQkYzMDBFNDM0NzVGNTgzNzQwQUYwRUI3NUYwMEZBNDI0NDNGNUYwCis6MTAzQzAzMDA4MkU0MzQ3NUY1ODMxMjM3QzgwMDAwQUM0NEVCNzVGMEQ5Cis6MTAzQzEzMDAwRkE0MjQ0N0Y1ODJFNDM0NzVGNTgzMTIzN0M4MDAwMEY2Cis6MTAzQzIzMDBBQzQ0RUI3NUYwMEZBNDI0NEJGNTgyRTQzNDc1RjU4M0IzCis6MTAzQzMzMDAxMjM3QzgwMDAxNzcwMDkwNzYzNkUwMDRGMEUwRkI3NTk4Cis6MTAzQzQzMDBGMDBGQTQyNDQxRjU4MkU0MzQ3NUY1ODM3NDQwRjBFQjVFCis6MTAzQzUzMDA3NUYwMEZBNDI0NDJGNTgyRTQzNDc1RjU4Mzc0OENGMDc3Cis6MTAzQzYzMDBFQjc1RjAwRkE0MjQ0M0Y1ODJFNDM0NzVGNTgzMTIzNzIyCis6MTAzQzczMDBDODAwMDBBQzQ0RUI3NUYwMEZBNDI0NDdGNTgyRTQzNDhDCis6MTAzQzgzMDA3NUY1ODMxMjM3QzgwMDAwQUM0NEVCNzVGMDBGQTQyNDFDCis6MTAzQzkzMDA0QkY1ODJFNDM0NzVGNTgzMTIzN0M4MDAwMTc3MDA5MDQxCis6MTAzQ0EzMDA3NjM2RTAwNEYwRTBGRjc1RjAwRkE0MjQ0MUY1ODJFNERBCis6MTAzQ0IzMDAzNDc1RjU4Mzc0NDBGMEVGNzVGMDBGQTQyNDQyRjU4MjU4Cis6MTAzQ0MzMDBFNDM0NzVGNTgzNzQ4RkYwOTA3NjM2RTAwNEYwRTBGRjBBCis6MTAzQ0QzMDA3NUYwMEZBNDI0NDFGNTgyRTQzNDc1RjU4Mzc0NDFGMDQzCis6MTAzQ0UzMDBFRjc1RjAwRkE0MjQ0MkY1ODJFNDM0NzVGNTgzNzQ4NEYwCis6MTAzQ0YzMDBGMDkwNzYzNkUwMDRGMEUwRkY3NUYwMEZBNDI0NDFGNTcwCis6MTAzRDAzMDA4MkU0MzQ3NUY1ODM3NDYxRjBFRjc1RjAwRkE0MjQ0MkY3Cis6MTAzRDEzMDBGNTgyRTQzNDc1RjU4Mzc0ODFGMDkwNzYzNkUwMDRGMDJGCis6MTAzRDIzMDBFMEZGNzVGMDBGQTQyNDQxRjU4MkU0MzQ3NUY1ODM3NDQ0Cis6MTAzRDMzMDA2MUYwRUY3NUYwMEZBNDI0NDJGNTgyRTQzNDc1RjU4MzQ2Cis6MDQzRDQzMDA3NDAxRjAyMkY1Cis6MTA0NTU5MDBFNDkwNzYzNkYwRTBGRjc1RjAwM0E0MjQzMkY1ODJFNEE2Cis6MTA0NTY5MDAzNDc1RjU4M0U0RjBFRjc1RjAwM0E0MjQzM0Y1ODJFNEEwCis6MTA0NTc5MDAzNDc1RjU4Mzc0MDFGMDkwNzYzNkUwMDRGMEUwRkY3NTQ4Cis6MTA0NTg5MDBGMDAzQTQyNDMyRjU4MkU0MzQ3NUY1ODNFNEYwRUY3NTgxCis6MTA0NTk5MDBGMDAzQTQyNDMzRjU4MkU0MzQ3NUY1ODM3NDAyRjA5MEIyCis6MTA0NUE5MDA3NjM2RTAwNEYwRTBGRjc1RjAwM0E0MjQzMkY1ODJFNEU2Cis6MTA0NUI5MDAzNDc1RjU4M0U0RjBFRjc1RjAwM0E0MjQzM0Y1ODJFNDUwCis6MTA0NUM5MDAzNDc1RjU4Mzc0MDNGMDkwNzYzNkUwMDRGMEUwRkY3NUY2Cis6MTA0NUQ5MDBGMDAzQTQyNDMyRjU4MkU0MzQ3NUY1ODNFNEYwRUY3NTMxCis6MTA0NUU5MDBGMDAzQTQyNDMzRjU4MkU0MzQ3NUY1ODM3NDA0RjAyMkNFCis6MTAzQTQyMDBFNDkwNzYzNUYwOTA3NjM1RTBGRkMzOTQwMzQwMDI0MTZFCis6MTAzQTUyMDBGRkVGNzVGMDBBQTQyNEFBRjU4MkU0MzQ3NUY1ODNFRjJBCis6MTAzQTYyMDBGMEVGNzVGMDBBQTQyNEFCRjU4MkU0MzQ3NUY1ODNFNDMzCis6MTAzQTcyMDBGMEVGNzVGMDBBQTQyNEFDRjU4MkU0MzQ3NUY1ODM3NDkyCis6MTAzQTgyMDBGMEYwRUY3NUYwMEFBNDI0QURGNTgyRTQzNDc1RjU4MzA1Cis6MTAzQTkyMDA3NEZGRjBFRjc1RjAwQUE0MjRBRUY1ODJFNDM0NzVGNUY0Cis6MTAzQUEyMDA4M0U0RjBFRjc1RjAwQUE0MjRBRkY1ODJFNDM0NzVGNUVGCis6MTAzQUIyMDA4Mzc0ODBGMEVGNzVGMDBBQTQyNEIwRjU4MkU0MzQ3NUMzCis6MTAzQUMyMDBGNTgzRTRGMEVGNzVGMDBBQTQyNEIxRjU4MkU0MzQ3NUNECis6MTAzQUQyMDBGNTgzRTRGMEVGNzVGMDBBQTQyNEIyRjU4MkU0MzQ3NUJDCis6MTAzQUUyMDBGNTgzRTRGMEVGNzVGMDBBQTQyNEIzRjU4MkU0MzQ3NUFCCis6MTAzQUYyMDBGNTgzNzQwMUYwOTA3NjM1RTAwNEYwNDE0NzkwNzYzQzBFCis6MTAzQjAyMDA3NDBBRjBFNEEzRjA5MDc2MzU3NDAzRjA5MDc2M0NFMDBBCis6MTAzQjEyMDBGRjkwNzYzNUUwRkVDMzlGNDAwMjYxRDI5MDc2M0RFMDkxCis6MTAzQjIyMDBGRjA0RjBFRTc1RjAwQUE0MjRBQUY1ODJFNDM0NzVGNUQ4Cis6MTAzQjMyMDA4M0VGRjBFRTc1RjAwQUE0MjRBQkY1ODJFNDM0NzVGNTU4Cis6MTAzQjQyMDA4M0U0RjBFRTc1RjAwQUE0MjRBQ0Y1ODJFNDM0NzVGNTUyCis6MTAzQjUyMDA4Mzc0NUVGMEVFNzVGMDBBQTQyNEFERjU4MkU0MzQ3NTQ4Cis6MTAzQjYyMDBGNTgzNzRCQUYwRUU3NUYwMEFBNDI0QUVGNTgyRTQzNDVCCis6MTAzQjcyMDA3NUY1ODM3NDA1RjBFRTc1RjAwQUE0MjRBRkY1ODJFNEJFCis6MTAzQjgyMDAzNDc1RjU4Mzc0ODBGMEVFNzVGMDBBQTQyNEIwRjU4MkUyCis6MTAzQjkyMDBFNDM0NzVGNTgzRTRGMEVFNzVGMDBBQTQyNEIxRjU4MkZECis6MTAzQkEyMDBFNDM0NzVGNTgzRTRGMEVFNzVGMDBBQTQyNEIyRjU4MkVDCis6MTAzQkIyMDBFNDM0NzVGNTgzNzQxNUYwRUU3NUYwMEFBNDI0QjNGNUI4Cis6MTAzQkMyMDA4MkU0MzQ3NUY1ODNFNEYwOTA3NjM1RTAwNEYwNjEwRTFBCis6MDEzQkQyMDAyMkQwCis6MTAwODAwMDBFNDkwNzYzMUYwOTA3NjMxRTBGRjc1RjAwM0E0MjQwRjg4Cis6MTAwODEwMDBGNTgyRTQzNDc1RjU4M0UwRkU5MDdGRURFMEZERUU2RDRBCis6MTAwODIwMDA2MDBFRUZDMzk0MEI1MDA4OTA3NjMxRTAwNEYwODBENTUxCis6MTAwODMwMDBFRkI0MEIwODkwN0ZCNEUwNDQwMUYwMjJFRjc1RjAwM0IxCis6MTAwODQwMDBBNDI0MEVGNTgyRTQzNDc1RjU4M0UwOTA3NjMzRjAyNDI5Cis6MTAwODUwMDBGMDYwMEEyNDBFNjAwMjgxODcxMjRCM0UyMjkwN0ZFREU5Cis6MTAwODYwMDBFMDY0MDU3MDUxOTA3NjE4NzQwNUYwOTA3NjM3NzQwMTQ1Cis6MTAwODcwMDBGMDkwNzYzOTc0MDNGMDkwNzYyMUYwRTQ5MDc2MjBGMEQxCis6MTAwODgwMDA5MDdGRUFFMEY0NjAyRjkwNzYyMEUwRkY3NUYwMEFBNEY0Cis6MTAwODkwMDAyNEFBRjU4MkU0MzQ3NUY1ODNFMEZFOTA3RkVBRTBGRDVBCis6MTAwOEEwMDBFRTZENjAxMjkwNzYyMUUwRkVFRkMzOUU1MDA4OTA3NkM4Cis6MTAwOEIwMDAyMEUwMDRGMDgwRDE5MDdGRURFMDY0MDY3MDUyOTA3NkU1Cis6MTAwOEMwMDAxODc0MDZGMDkwNzYzNzc0MDRGMDkwNzYzOTc0MEFGMDU0Cis6MTAwOEQwMDA5MDc2MjFGMDkwNzYyMDc0MDNGMDkwN0ZFQUUwRjQ2MDQ3Cis6MTAwOEUwMDAyRjkwNzYyMEUwRkY3NUYwMEFBNDI0QUFGNTgyRTQzNDY0Cis6MTAwOEYwMDA3NUY1ODNFMEZFOTA3RkVBRTBGREVFNkQ2MDEyOTA3Njg0Cis6MTAwOTAwMDAyMUUwRkVFRkMzOUU1MDA4OTA3NjIwRTAwNEYwODBEMUY1Cis6MTAwOTEwMDA5MDc2MjBFMEZGNzVGMDBBQTQyNEFBRjU4MkU0MzQ3NUVECis6MTAwOTIwMDBGNTgzRTA5MDcyMjlGMEU0OTA3NjNCRjA5MDc2MjFFMDM4Cis6MTAwOTMwMDBGRUVGNkU3MDA4OTA3RkI0RTA0NDAxRjAyMjkwN0ZFQkYwCis6MTAwOTQwMDBFMDE0NjAxMzE0NzAwMjIxRTIyNDAyNjAwMjgxN0Y5MDlGCis6MTAwOTUwMDA3RkI0RTA0NDAxRjAyMjkwN0ZFOUUwMTQ3MDdDOTA3RjQ2Cis6MTAwOTYwMDBFQUUwRjQ3MDQ4OTA3NjM3RTA5MDc2MjBGMDkwNzYzOTlGCis6MTAwOTcwMDBFMEZFOTA3NjIwRTBGREMzOUU1MDJCOTA3NjNCRTBGRTlCCis6MTAwOTgwMDAwNEYwNzRDMDJFRjU4MkU0MzQ3RUY1ODNFMEZFRUQ3NTRDCis6MTAwOTkwMDBGMDBBQTQyNEFCRjU4MkU0MzQ3NUY1ODNFRUYwOTA3NjhBCis6MTAwOUEwMDAyMEUwMDRGMDgwQzc5MDc2M0Y3NDAxRjAyMjkwN0VDMDcyCis6MTAwOUIwMDBFMEZFRUY3NUYwMEFBNDI0QUJGNTgyRTQzNDc1RjU4MzBDCis6MTAwOUMwMDBFRUYwRTBCNDAxMDg5MDc2M0U3NDAxRjA4MDA1RTQ5MDBBCis6MTAwOUQwMDA3NjNFRjA5MDc2M0Y3NDAxRjAyMjkwN0ZCNEUwNDQwMUJGCis6MTAwOUUwMDBGMDIyOTA3RkU5RTAyNEZFNzAwMjQxQTMxNDcwMDI2MUJFCis6MTAwOUYwMDAzRjE0NzAwMjYxREIyNDAzNjAwMjgxNzc5MDdGRUFFMDlDCis6MTAwQTAwMDBGNDcwNkI5MDc2MzdFMDkwNzYyMEYwOTA3NjM5RTBGRkM2Cis6MTAwQTEwMDA5MDc2MjBFMEZFQzM5RjUwNEU5MDc2M0JFMEZGMDRGMEJFCis6MTAwQTIwMDA3NEMwMkZGNTgyRTQzNDdFRjU4M0UwRkZFRTc1RjAwQUEyCis6MTAwQTMwMDBBNDI0QUNGNTgyRTQzNDc1RjU4M0VGRjA5MDc2M0JFMEM2Cis6MTAwQTQwMDBGRjA0RjA3NEMwMkZGNTgyRTQzNDdFRjU4M0UwRkZFRUZFCis6MTAwQTUwMDA3NUYwMEFBNDI0QURGNTgyRTQzNDc1RjU4M0VGRjA5MEM3Cis6MTAwQTYwMDA3NjIwRTAwNEYwODBBNDkwNzY0MDc0MDFGMDIyOTA3RTFECis6MTAwQTcwMDBDMEUwRkY5MDc2MjBFMEZFNzVGMDBBQTQyNEFDRjU4Mjc5Cis6MTAwQTgwMDBFNDM0NzVGNTgzRUZGMDkwN0VDMUUwRkZFRTc1RjAwQTc3Cis6MTAwQTkwMDBBNDI0QURGNTgyRTQzNDc1RjU4M0VGRjA5MDc2NDE3NENCCis6MTAwQUEwMDAwMUYwMjI5MDdGRUFFMEY0NzA2NjkwNzYzN0UwOTA3NjZECis6MTAwQUIwMDAyMEYwOTA3NjM5RTBGRjkwNzYyMEUwRkVDMzlGNDAwMjYwCis6MTAwQUMwMDA4MThFOTA3NjNCRTBGRjA0RjA3NEMwMkZGNTgyRTQzNDExCis6MTAwQUQwMDA3RUY1ODNFMEZGRUU3NUYwMEFBNDI0QUVGNTgyRTQzNERGCis6MTAwQUUwMDA3NUY1ODNFRkYwOTA3NjNCRTBGRjA0RjA3NEMwMkZGNUNFCis6MTAwQUYwMDA4MkU0MzQ3RUY1ODNFMEZGRUU3NUYwMEFBNDI0QUZGNUJFCis6MTAwQjAwMDA4MkU0MzQ3NUY1ODNFRkYwOTA3NjIwRTAwNEYwODBBMjYzCis6MTAwQjEwMDA5MDdFQzBFMEZGOTA3NjIwRTBGRTc1RjAwQUE0MjRBRTNGCis6MTAwQjIwMDBGNTgyRTQzNDc1RjU4M0VGRjA5MDdFQzFFMEZGRUU3NTU5Cis6MTAwQjMwMDBGMDBBQTQyNEFGRjU4MkU0MzQ3NUY1ODNFRkYwMjI5MDM3Cis6MTAwQjQwMDA3RkVBRTBGNDcwNjY5MDc2MzdFMDkwNzYyMEYwOTA3NjU5Cis6MTAwQjUwMDAzOUUwRkY5MDc2MjBFMEZFQzM5RjQwMDI4MThFOTA3NkMwCis6MTAwQjYwMDAzQkUwRkYwNEYwNzRDMDJGRjU4MkU0MzQ3RUY1ODNFMEFGCis6MTAwQjcwMDBGRkVFNzVGMDBBQTQyNEIwRjU4MkU0MzQ3NUY1ODNFRjM2Cis6MTAwQjgwMDBGMDkwNzYzQkUwRkYwNEYwNzRDMDJGRjU4MkU0MzQ3RUYxCis6MTAwQjkwMDBGNTgzRTBGRkVFNzVGMDBBQTQyNEIxRjU4MkU0MzQ3NTI0Cis6MTAwQkEwMDBGNTgzRUZGMDkwNzYyMEUwMDRGMDgwQTI5MDdFQzBFMDI0Cis6MTAwQkIwMDBGRjkwNzYyMEUwRkU3NUYwMEFBNDI0QjBGNTgyRTQzNEJDCis6MTAwQkMwMDA3NUY1ODNFRkYwOTA3RUMxRTBGRkVFNzVGMDBBQTQyNDg2Cis6MTAwQkQwMDBCMUY1ODJFNDM0NzVGNTgzRUZGMDIyOTA3RkVBRTBGNDFBCis6MTAwQkUwMDA3MDY2OTA3NjM3RTA5MDc2MjBGMDkwNzYzOUUwRkY5MDRFCis6MTAwQkYwMDA3NjIwRTBGRUMzOUY0MDAyODE4RTkwNzYzQkUwRkYwNEFBCis6MTAwQzAwMDBGMDc0QzAyRkY1ODJFNDM0N0VGNTgzRTBGRkVFNzVGMERBCis6MTAwQzEwMDAwQUE0MjRCMkY1ODJFNDM0NzVGNTgzRUZGMDkwNzYzQkI0Cis6MTAwQzIwMDBFMEZGMDRGMDc0QzAyRkY1ODJFNDM0N0VGNTgzRTBGRjJBCis6MTAwQzMwMDBFRTc1RjAwQUE0MjRCM0Y1ODJFNDM0NzVGNTgzRUZGMDgxCis6MTAwQzQwMDA5MDc2MjBFMDA0RjA4MEEyOTA3RUMwRTBGRjkwNzYyMEI1Cis6MTAwQzUwMDBFMEZFNzVGMDBBQTQyNEIyRjU4MkU0MzQ3NUY1ODNFRjYyCis6MTAwQzYwMDBGMDkwN0VDMUUwRkZFRTc1RjAwQUE0MjRCM0Y1ODJFNEIzCis6MTAwQzcwMDAzNDc1RjU4M0VGRjAyMjkwN0ZCNEUwNDQwMUYwMjI5MEM4Cis6MEYwQzgwMDA3RkI0RTA0NDAxRjAyMjkwN0ZCNEUwNDQwMUYwMjIwMQorOjEwMTAwMDAwRTQ5MDc2MkNGMDkwNzYyQ0UwRkY3NUYwMDNBNDI0MEY4QQorOjEwMTAxMDAwRjU4MkU0MzQ3NUY1ODNFMEZFOTA3RkVERTBGREVFNkQ0MgorOjEwMTAyMDAwNjAwRUVGQzM5NDBCNTAwODkwNzYyQ0UwMDRGMDgwRDU0RQorOjEwMTAzMDAwRUZCNDBCMDg5MDdGQjRFMDQ0MDFGMDIyRUY3NUYwMDNBOQorOjEwMTA0MDAwQTQyNDBFRjU4MkU0MzQ3NUY1ODNFMDkwNzYyRUYwMjQyNgorOjEwMTA1MDAwRjA2MDBBMjQwRjYwMDI4MTdEMTI0QjFCMjI5MDdGRUQwRAorOjEwMTA2MDAwRTA2NDA1NzA1MTkwNzYxODc0MDVGMDkwNzYzODc0MDEzQworOjEwMTA3MDAwRjA5MDc2M0E3NDAzRjA5MDc2MUNGMEU0OTA3NjFCRjBEMgorOjEwMTA4MDAwOTA3RkVBRTBGNDYwMkY5MDc2MUJFMEZGNzVGMDBBQTRGMQorOjEwMTA5MDAwMjRBQUY1ODJFNDM0NzVGNTgzRTBGRTkwN0ZFQUUwRkQ1MgorOjEwMTBBMDAwRUU2RDYwMTI5MDc2MUNFMEZFRUZDMzlFNTAwODkwNzZDNQorOjEwMTBCMDAwMUJFMDA0RjA4MEQxOTA3RkVERTA2NDA2NzA1MjkwNzZFMgorOjEwMTBDMDAwMTg3NDA2RjA5MDc2Mzg3NDA0RjA5MDc2M0E3NDBBRjA0QQorOjEwMTBEMDAwOTA3NjFDRjA5MDc2MUI3NDAzRjA5MDdGRUFFMEY0NjA0OQorOjEwMTBFMDAwMkY5MDc2MUJFMEZGNzVGMDBBQTQyNEFBRjU4MkU0MzQ2MQorOjEwMTBGMDAwNzVGNTgzRTBGRTkwN0ZFQUUwRkRFRTZENjAxMjkwNzY3QworOjEwMTEwMDAwMUNFMEZFRUZDMzlFNTAwODkwNzYxQkUwMDRGMDgwRDFGNworOjEwMTExMDAwRTQ5MDc2MUVGMDkwNzYxQ0UwRkY5MDc2MUJFMEZFNkY2OAorOjEwMTEyMDAwNzAwODkwN0ZCNEUwNDQwMUYwMjI5MDdGRUJFMDE0NjBGRgorOjEwMTEzMDAwMTMxNDcwMDIyMUJGMjQwMjYwMDI4MTc1OTA3RkI0RTAxNQorOjEwMTE0MDAwNDQwMUYwMjI5MDdGRTlFMDI0N0Y3MDZCOTA3RkVBRTAxOQorOjEwMTE1MDAwRjQ3MDRBOTA3NjM4RTA5MDc2MUJGMDkwNzYzQUUwRkY5MworOjEwMTE2MDAwOTA3NjFCRTBGREMzOUY1MDJCRUQ3NUYwMEFBNDI0QUJENQorOjEwMTE3MDAwRjU4MkU0MzQ3NUY1ODNFMEZGOTA3NjFFRTBGRDA0RjAxRgorOjEwMTE4MDAwNzQwMDJERjU4MkU0MzQ3RkY1ODNFRkYwOTA3NjFCRTA1OAorOjEwMTE5MDAwMDRGMDgwQzc5MDc2MUVFMDkwN0ZCNUYwMjJFRTc1RjBFNworOjEwMTFBMDAwMEFBNDI0QUJGNTgyRTQzNDc1RjU4M0UwOTA3RjAwRjA2NworOjEwMTFCMDAwOTA3RkI1NzQwMUYwMjI5MDdGQjRFMDQ0MDFGMDIyOTA1QQorOjEwMTFDMDAwN0ZFOUUwMjQ3RTcwMDI0MTdFMTQ3MDAyNjEyMzE0NzA3NgorOjEwMTFEMDAwMDI2MUM4MjQwMzYwMDI4MTZEOTA3RkVBRTBGNDcwNkRDMworOjEwMTFFMDAwOTA3NjM4RTA5MDc2MUJGMDkwNzYzQUUwRkY5MDc2MUI5MAorOjEwMTFGMDAwRTBDMzlGNTA0RkUwRkY3NUYwMEFBNDI0QUNGNTgyRTRGMQorOjEwMTIwMDAwMzQ3NUY1ODNFMEZFOTA3NjFFRTBGRDA0RjA3NDAwMkQ0OQorOjEwMTIxMDAwRjU4MkU0MzQ3RkY1ODNFRUYwRUY3NUYwMEFBNDI0QUQ5NworOjEwMTIyMDAwRjU4MkU0MzQ3NUY1ODNFMEZGOTA3NjFFRTBGRTA0RjA2RAorOjEwMTIzMDAwNzQwMDJFRjU4MkU0MzQ3RkY1ODNFRkYwOTA3NjFCRTBBNgorOjEwMTI0MDAwMDRGMDgwQTQ5MDc2MUVFMDkwN0ZCNUYwMjI5MDc2MUI4QgorOjEwMTI1MDAwRTBGRjc1RjAwQUE0MjRBQ0Y1ODJFNDM0NzVGNTgzRTA3MAorOjEwMTI2MDAwOTA3RjAwRjBFRjc1RjAwQUE0MjRBREY1ODJFNDM0NzVBOAorOjEwMTI3MDAwRjU4M0UwOTA3RjAxRjA5MDdGQjU3NDAyRjAyMjkwN0ZCQgorOjEwMTI4MDAwRUFFMEY0NzA2RDkwNzYzOEUwOTA3NjFCRjA5MDc2M0E1NAorOjEwMTI5MDAwRTBGRjkwNzYxQkUwQzM5RjUwNEZFMEZGNzVGMDBBQTQ3QgorOjEwMTJBMDAwMjRBRUY1ODJFNDM0NzVGNTgzRTBGRTkwNzYxRUUwRkQxMQorOjEwMTJCMDAwMDRGMDc0MDAyREY1ODJFNDM0N0ZGNTgzRUVGMEVGNzVEMQorOjEwMTJDMDAwRjAwQUE0MjRBRkY1ODJFNDM0NzVGNTgzRTBGRjkwNzY0QworOjEwMTJEMDAwMUVFMEZFMDRGMDc0MDAyRUY1ODJFNDM0N0ZGNTgzRUYwNworOjEwMTJFMDAwRjA5MDc2MUJFMDA0RjA4MEE0OTA3NjFFRTA5MDdGQjUyRAorOjEwMTJGMDAwRjAyMjkwNzYxQkUwRkY3NUYwMEFBNDI0QUVGNTgyRTQ5QworOjEwMTMwMDAwMzQ3NUY1ODNFMDkwN0YwMEYwRUY3NUYwMEFBNDI0QUYwOAorOjEwMTMxMDAwRjU4MkU0MzQ3NUY1ODNFMDkwN0YwMUYwOTA3RkI1NzQzOQorOjEwMTMyMDAwMDJGMDIyOTA3RkVBRTBGNDcwNkQ5MDc2MzhFMDkwNzZEQgorOjEwMTMzMDAwMUJGMDkwNzYzQUUwRkY5MDc2MUJFMEMzOUY1MDRGRTBBMQorOjEwMTM0MDAwRkY3NUYwMEFBNDI0QjBGNTgyRTQzNDc1RjU4M0UwRkU1RAorOjEwMTM1MDAwOTA3NjFFRTBGRDA0RjA3NDAwMkRGNTgyRTQzNDdGRjVGNAorOjEwMTM2MDAwODNFRUYwRUY3NUYwMEFBNDI0QjFGNTgyRTQzNDc1RjU0QworOjEwMTM3MDAwODNFMEZGOTA3NjFFRTBGRTA0RjA3NDAwMkVGNTgyRTQxOAorOjEwMTM4MDAwMzQ3RkY1ODNFRkYwOTA3NjFCRTAwNEYwODBBNDkwNzYzNAorOjEwMTM5MDAwMUVFMDkwN0ZCNUYwMjI5MDc2MUJFMEZGNzVGMDBBQTQ2NgorOjEwMTNBMDAwMjRCMEY1ODJFNDM0NzVGNTgzRTA5MDdGMDBGMEVGNzVBQQorOjEwMTNCMDAwRjAwQUE0MjRCMUY1ODJFNDM0NzVGNTgzRTA5MDdGMDE0RQorOjEwMTNDMDAwRjA5MDdGQjU3NDAyRjAyMjkwN0ZFQUUwRjQ3MDZEOTBBNworOjEwMTNEMDAwNzYzOEUwOTA3NjFCRjA5MDc2M0FFMEZGOTA3NjFCRTA0RQorOjEwMTNFMDAwQzM5RjUwNEZFMEZGNzVGMDBBQTQyNEIyRjU4MkU0MzRBNQorOjEwMTNGMDAwNzVGNTgzRTBGRTkwNzYxRUUwRkQwNEYwNzQwMDJERjU5NworOjEwMTQwMDAwODJFNDM0N0ZGNTgzRUVGMEVGNzVGMDBBQTQyNEIzRjU5RgorOjEwMTQxMDAwODJFNDM0NzVGNTgzRTBGRjkwNzYxRUUwRkUwNEYwNzRGQworOjEwMTQyMDAwMDAyRUY1ODJFNDM0N0ZGNTgzRUZGMDkwNzYxQkUwMDQyNAorOjEwMTQzMDAwRjA4MEE0OTA3NjFFRTA5MDdGQjVGMDIyOTA3NjFCRTBCRAorOjEwMTQ0MDAwRkY3NUYwMEFBNDI0QjJGNTgyRTQzNDc1RjU4M0UwOTBDOAorOjEwMTQ1MDAwN0YwMEYwRUY3NUYwMEFBNDI0QjNGNTgyRTQzNDc1RjU0QgorOjEwMTQ2MDAwODNFMDkwN0YwMUYwOTA3RkI1NzQwMkYwMjI5MDdGQjQwQQorOjEwMTQ3MDAwRTA0NDAxRjAyMjkwN0ZCNEUwNDQwMUYwMjI5MDdGQjQ3OAorOjA1MTQ4MDAwRTA0NDAxRjAyMjMwCis6MTAzODc0MDBFNDkwNzYyOUYwOTA3NjI5RTBGRjc1RjAwRkE0MjQ0MkI1Cis6MTAzODg0MDBGNTgyRTQzNDc1RjU4M0UwRkU5MDdGRUNFMEZERUU2REE3Cis6MTAzODk0MDA2MDBFRUZDMzk0MDY1MDA4OTA3NjI5RTAwNEYwODBENUJBCis6MTAzOEE0MDBFRkI0MDYwODkwN0ZCNEUwNDQwMUYwMjJFRjc1RjAwRjA2Cis6MTAzOEI0MDBBNDI0NDFGNTgyRTQzNDc1RjU4M0UwOTA3NjJBRjAyNDVCCis6MTAzOEM0MDBCRjcwMDI0MTQxMjRFMDcwMDI0MTEyMjQyMTYwMDI0MTkwCis6MTAzOEQ0MDAzQTkwN0ZFOUUwMjRGRTYwN0QxNDcwMDIyMUIyMjQwMjU0Cis6MTAzOEU0MDA2MDAyNDEwQTEyMTc1MTkwNzY0MkUwRkNBM0UwRkRBMzY2Cis6MTAzOEY0MDBFMEZFQTNFMEZGOTA3NjI5RTA3NUYwMEZBNDI0NDNGNUUxCis6MTAzOTA0MDA4MkU0MzQ3NUY1ODMxMjM3QkM5MDc2MTlFMEZGQjQwMTc0Cis6MTAzOTE0MDAxMjkwNzY3Qzc0NjdGMDkwNzY3RDc0MDZGMDkwNzY3RUQzCis6MTAzOTI0MDA3NDBCRjBFRkI0MDIwRkU0OTA3NjdDRjA5MDc2N0RGMEE3Cis6MTAzOTM0MDA5MDc2N0U3NDBDRjBFRkI0MDMwRkU0OTA3NjdDRjA5MEY0Cis6MTAzOTQ0MDA3NjdERjA5MDc2N0U3NDE4RjA5MDc2MUE3NDAxRjAxMkY5Cis6MTAzOTU0MDAzRThGMTIxODAwMjI5MDdFQzJFMEZGRTRGQ0ZERkVGQkM1Cis6MTAzOTY0MDBGQTc5MDFGODEyMzc0NkM4RUNDOEM5RURDOUNBRUVDQURCCis6MTAzOTc0MDBDQkVGQ0I5MDdFQzFFMEZFRTRGQ0ZEMkJGQkVBM0VGQUVDCis6MTAzOTg0MDBFRDM5RjlFQzM4Rjg5MDdFQzBFMEZGRTRGRUVCMkZGRjUwCis6MTAzOTk0MDBFRTNBRkVFRDM5RkRFQzM4RkM5MDc2MjlFMDc1RjAwRjM3Cis6MTAzOUE0MDBBNDI0NDdGNTgyRTQzNDc1RjU4MzEyMzdCQzIyOTA3RTUzCis6MTAzOUI0MDBDMkUwRkZFNEZDRkRGRUZCRkE3OTAxRjgxMjM3NDZDOEM5Cis6MTAzOUM0MDBFQ0M4QzlFREM5Q0FFRUNBQ0JFRkNCOTA3RUMxRTBGRTBDCis6MTAzOUQ0MDBFNEZDRkQyQkZCRUEzRUZBRUQzOUY5RUMzOEY4OTA3RTc1Cis6MTAzOUU0MDBDMEUwRkZFNEZFRUIyRkZGRUUzQUZFRUQzOUZERUMzOENDCis6MTAzOUY0MDBGQzkwNzYyOUUwNzVGMDBGQTQyNDRCRjU4MkU0MzQ3NTJECis6MTAzQTA0MDBGNTgzMTIzN0JDMjI5MDdGQjRFMDQ0MDFGMDIyOTA3RjBBCis6MTAzQTE0MDBFOUUwMTQ3MDE5OTA3RUMwRTBGRjkwNzYyOUUwNzVGMDFCCis6MTAzQTI0MDAwRkE0MjQ0RkY1ODJFNDM0NzVGNTgzRUZGMDIyOTA3RkUwCis6MEUzQTM0MDBCNEUwNDQwMUYwMjI5MDdGQjRFMDQ0MDFGMDIyOUYKKzoxMDJBRDYwMEU0OTA3NjI3RjA5MDc2MjdFMEZGNzVGMDBGQTQyNDQyNjUKKzoxMDJBRTYwMEY1ODJFNDM0NzVGNTgzRTBGRTkwN0ZFQ0UwRkRFRTZENTMKKzoxMDJBRjYwMDYwMEVFRkMzOTQwNjUwMDg5MDc2MjdFMDA0RjA4MEQ1NjgKKzoxMDJCMDYwMEVGQjQwNjA4OTA3RkI0RTA0NDAxRjAyMkVGNzVGMDBGQjEKKzoxMDJCMTYwMEE0MjQ0MUY1ODJFNDM0NzVGNTgzRTA5MDc2MjhGMDI0MDgKKzoxMDJCMjYwMDlGNzAwMkExNzQyNDIxNjAwMkExQTE5MDdGRTlFMDI0OTQKKzoxMDJCMzYwMDdFNzAwMjYxRkMxNDcwMDI4MUI1MjQwMjYwMDJBMTZDRjEKKzoxMDJCNDYwMEVGNzVGMDBGQTQyNDQzRjU4MkU0MzQ3NUY1ODNFMEZDQjkKKzoxMDJCNTYwMEEzRTBGREEzRTBGRUEzRTBGRjdCNDQ3QUFDNzkwMDc4MTYKKzoxMDJCNjYwMDAwQzMxMjM3QUI3MDEzOTA3RjAwNzQ0NEYwQTM3NEFDQUIKKzoxMDJCNzYwMEYwRTRBM0YwOTA3RkI1NzQwM0YwOTA3NjI3RTA3NUYwNEIKKzoxMDJCODYwMDBGQTQyNDQzRjU4MkU0MzQ3NUY1ODNFMEZDQTNFMEZENEQKKzoxMDJCOTYwMEEzRTBGRUEzRTBGRjdCODA3QUJCNzkwMDc4MDBDMzEyMzYKKzoxMDJCQTYwMDM3QUI3MDEzOTA3RjAwNzQ4MEYwQTM3NEJCRjBFNEEzN0UKKzoxMDJCQjYwMEYwOTA3RkI1NzQwM0YwOTA3NjI3RTA3NUYwMEZBNDI0QUIKKzoxMDJCQzYwMDQzRjU4MkU0MzQ3NUY1ODNFMEZDQTNFMEZEQTNFMEZFNjMKKzoxMDJCRDYwMEEzRTBGRjdCMDA3QTc3NzkwMTc4MDBDMzEyMzdBQjYwRjgKKzoxMDJCRTYwMDAyQTFBODkwN0YwMEYwQTM3NDc3RjBBMzc0MDFGMDkwN0YKKzoxMDJCRjYwMDdGQjU3NDAzRjAyMjkwNzYyN0UwNzVGMDBGQTQyNDQ3ODIKKzoxMDJDMDYwMEY1ODJFNDM0NzVGNTgzRTBGQ0EzRTBGREEzRTBGRUEzQzIKKzoxMDJDMTYwMEUwRkY3QjQ0N0FBQzc5MDA3ODAwQzMxMjM3QUI3MDEzQkYKKzoxMDJDMjYwMDkwN0YwMDc0NDRGMEEzNzRBQ0YwRTRBM0YwOTA3RkI1RjkKKzoxMDJDMzYwMDc0MDNGMDkwNzYyN0UwNzVGMDBGQTQyNDQ3RjU4MkU0M0MKKzoxMDJDNDYwMDM0NzVGNTgzRTBGQ0EzRTBGREEzRTBGRUEzRTBGRjdCODMKKzoxMDJDNTYwMDgwN0FCQjc5MDA3ODAwQzMxMjM3QUI3MDEzOTA3RjAwN0YKKzoxMDJDNjYwMDc0ODBGMEEzNzRCQkYwRTRBM0YwOTA3RkI1NzQwM0YwMTYKKzoxMDJDNzYwMDkwNzYyN0UwNzVGMDBGQTQyNDQ3RjU4MkU0MzQ3NUY1QzUKKzoxMDJDODYwMDgzRTBGQ0EzRTBGREEzRTBGRUEzRTBGRjdCMDA3QTc3RjAKKzoxMDJDOTYwMDc5MDE3ODAwQzMxMjM3QUI2MDAyQTFBODkwN0YwMEYwREIKKzoxMDJDQTYwMEEzNzQ3N0YwQTM3NDAxRjA5MDdGQjU3NDAzRjAyMjkwQkIKKzoxMDJDQjYwMDc2MjdFMDc1RjAwRkE0MjQ0QkY1ODJFNDM0NzVGNTgzOEUKKzoxMDJDQzYwMEUwRkNBM0UwRkRBM0UwRkVBM0UwRkY3QjQ0N0FBQzc5NDEKKzoxMDJDRDYwMDAwNzgwMEMzMTIzN0FCNzAxMzkwN0YwMDc0NDRGMEEzRTIKKzoxMDJDRTYwMDc0QUNGMEU0QTNGMDkwN0ZCNTc0MDNGMDkwNzYyN0UwMUYKKzoxMDJDRjYwMDc1RjAwRkE0MjQ0QkY1ODJFNDM0NzVGNTgzRTBGQ0EzNEMKKzoxMDJEMDYwMEUwRkRBM0UwRkVBM0UwRkY3QjgwN0FCQjc5MDA3ODAwQkMKKzoxMDJEMTYwMEMzMTIzN0FCNzAxMzkwN0YwMDc0ODBGMEEzNzRCQkYwQkUKKzoxMDJEMjYwMEU0QTNGMDkwN0ZCNTc0MDNGMDkwNzYyN0UwNzVGMDBGN0EKKzoxMDJEMzYwMEE0MjQ0QkY1ODJFNDM0NzVGNTgzRTBGQ0EzRTBGREEzRkYKKzoxMDJENDYwMEUwRkVBM0UwRkY3QjAwN0E3Nzc5MDE3ODAwQzMxMjM3QjMKKzoxMDJENTYwMEFCNzA0RjkwN0YwMEYwQTM3NDc3RjBBMzc0MDFGMDkwRUUKKzoxMDJENjYwMDdGQjU3NDAzRjAyMjkwN0ZCNEUwNDQwMUYwMjI5MDdGOTcKKzoxMDJENzYwMEU5RTAyNDdGNzAxRTkwNzYyN0UwNzVGMDBGQTQyNDRGQkIKKzoxMDJEODYwMEY1ODJFNDM0NzVGNTgzRTA5MDdGMDBGMDkwN0ZCNTc0QUEKKzoxMDJEOTYwMDAxRjA4MDA3OTA3RkI0RTA0NDAxRjA5MDdGQjRFMDQ0RjYKKzowMzJEQTYwMDAxRjAyMjE3Cis6MTA0QjFCMDA5MDdGRUJFMDE0NzAxNDkwN0ZFOUUwMjQ3RjcwMDQxMjE3Cis6MTA0QjJCMDA0ODVBMjI5MDdGQjRFMDQ0MDFGMDIyOTA3RkI0RTA0NEQ1Cis6MDM0QjNCMDAwMUYwMjI2NAorOjEwNEIzRTAwOTA3RkVCRTAxNDcwMTM5MDdGRTlFMDE0NzAwNDEyNDkzQgorOjEwNEI0RTAwQUQyMjkwN0ZCNEUwNDQwMUYwMjI5MDdGQjRFMDQ0MDFBNgorOjAyNEI1RTAwRjAyMjQzCis6MTA0ODVBMDBFNDkwNzYyNkYwOTA3NjI2RTBGRjc1RjAwM0E0MjQzNERGCis6MTA0ODZBMDBGNTgyRTQzNDc1RjU4M0UwRkU5MDdGRUNFMEZERUU2REIxCis6MTA0ODdBMDA2MDBFRUZDMzk0MDQ1MDA4OTA3NjI2RTAwNEYwODBENUM5Cis6MTA0ODhBMDBFRkI0MDQwODkwN0ZCNEUwNDQwMUYwMjJFRjc1RjAwMzFFCis6MTA0ODlBMDBBNDI0MzJGNTgyRTQzNDc1RjU4M0UwOTA3RjAwRjA5MDI5Cis6MDY0OEFBMDA3RkI1NzQwMUYwMjI0RAorOjEwNDlBRDAwRTQ5MDc2MjVGMDkwNzYyNUUwRkY3NUYwMDNBNDI0MzQ4RAorOjEwNDlCRDAwRjU4MkU0MzQ3NUY1ODNFMEZFOTA3RkVDRTBGREVFNkQ1RAorOjEwNDlDRDAwNjAwRUVGQzM5NDA0NTAwODkwNzYyNUUwMDRGMDgwRDU3NgorOjEwNDlERDAwRUZCNDA0MDg5MDdGQjRFMDQ0MDFGMDIyOTA3RUMwRTA3MworOjEwNDlFRDAwRkVFRjc1RjAwM0E0MjQzMkY1ODJFNDM0NzVGNTgzRUUwMQorOjAyNDlGRDAwRjAyMkE2Cis6MDMwMDAzMDAwMjBGRkRFQworOjAzMEZGRDAwQzI4OTMyNzQKKzowMzAwMTMwMDAyMTdGREQ0Cis6MDMxN0ZEMDBDMjhCMzI2QQorOjAzMDA0QjAwMDI0RDhGRDQKKzowNDREOEYwMDUzOTFERjMyMkIKKzowMzAwNTMwMDAyNEQ4M0Q4Cis6MDY0RDgzMDA1MzkxQkZEMjJEMzI1NgorOjAzMDA1QjAwMDI0RDg5Q0EKKzowNjREODkwMDUzOTE3RkQyMkMzMjkxCis6MDMwMDYzMDAwMjREOTNCOAorOjA0NEQ5MzAwNTNEOEY3MzJDOAorOjAzMDAwQjAwMDI0RDlCMDgKKzowMzREOUIwMEMyOEQzMjk0Cis6MDMwMDFCMDAwMjREOUVGNQorOjAzNEQ5RTAwQzI4RjMyOEYKKzowMzAwMjMwMDAyNEQ3NTE2Cis6MDc0RDc1MDA1Mzk4RkU1Mzk4RkQzMjM0Cis6MDMwMDNCMDAwMjREN0NGNworOjA3NEQ3QzAwNTNDMEZFNTNDMEZEMzJERAorOjAzMDAyQjAwMDI0NkY3OTMKKzoxMDQ2RjcwMEMwRTBDMEYwQzA4M0MwODJDMEQwRThDMEUwRTlDMEUwM0QKKzoxMDQ3MDcwMEVBQzBFMEVCQzBFMEVDQzBFMEVEQzBFMEVFQzBFMEVGRjcKKzoxMDQ3MTcwMEMwRTBDMkNBQzJDRjkwN0Y5OEUwNDQwMUYwMzAyRTAzQjgKKzoxMDQ3MjcwMDEyMTRBNjkwN0Y5OEUwNTRGRUYwNTNBOEZBMTIxNjYxNkYKKzoxMDQ3MzcwMEQwRTBGRkQwRTBGRUQwRTBGREQwRTBGQ0QwRTBGQkQwNDEKKzoxMDQ3NDcwMEUwRkFEMEUwRjlEMEUwRjhEMEQwRDA4MkQwODNEMEYwMzIKKzowMzQ3NTcwMEQwRTAzMjdECis6MTA0N0I0MDBFNDkwNzY5QkYwOTA3NjlCRTBGRjA0RjBFRjYwMDhFMEQ1Cis6MTA0N0M0MDAyNDA4RjhFNEY2ODBFRTkwNzY5NkUwNTRGQkYwNTRGNzczCis6MTA0N0Q0MDBGMDkwODAwM0YwRTRGNTE4RDIzNUY1MEVGNTEwRDIzNkRBCis6MTA0N0U0MDA3NTEyMTE3NTEzMjJDMjM3QzIzOUMyMzhGNTE2RjUxNDgxCis6MEI0N0Y0MDBGNTFBRjUwREMyM0JDMjNDQzIzRDIyOEQKKzoxMDMwMDAwMDkwN0ZCNkUwMjBFMTAyQzIzREQyMzYyMDM2MDI0MTZFMEEKKzoxMDMwMTAwMDMwM0QwMjQxNkU5MDgwMDdFMDYwMDREMjM2ODAwMkMyRUIKKzoxMDMwMjAwMDM2MjAzNjAyNDEyRUQyMzVFNEY1MUE5MDgwMDRFMEY1QzAKKzoxMDMwMzAwMDE5NzQwODI1MEVGOEE2MTk4NTE5MThFNTE4MjBFNzA0NTMKKzoxMDMwNDAwMEQyMzg4MDAyQzIzODMwMzgwMjIxRDRFNEY1MTZFNTE5QUUKKzoxMDMwNTAwMEI0RjAwQ0QyMzk3NTA4MDQ3NTA5RjAwNTBFODAwMjA1MkMKKzoxMDMwNjAwMDE2RTUxOTY0Rjc3MDNEQzIzOUU1MEUyNEZFNjAxNzE0QTkKKzoxMDMwNzAwMDYwMjIyNDAzNzAyOTc1MDgwNTc1MDlGN0U0RjUwQUY1M0YKKzoxMDMwODAwMDBCNzUwRTA0ODAyMDc1MDgwNjc1MEFGN0U0RjUwQjc1QkMKKzoxMDMwOTAwMDBFMDQ4MDEyNzUwODA3NzUwQkY3NzUwRTA0ODAwNzEyNzEKKzoxMDMwQTAwMDQ4RjM4MDAyMDUxNkU1MTk1NEY4NjRGODcwM0JDMjM1MDAKKzoxMDMwQjAwMEU1MTkyNDA3NjAwQzI0RkM2MDA4MjQwNTI0Rjg1MDA2NTgKKzoxMDMwQzAwMDgwMDhEMjNBODAwNkMyM0E4MDAyRDIzQTc1MUEwMTIwQUMKKzoxMDMwRDAwMDNBMTk5MDdFODA3NDBGRjBBM0U1MTlGMEU0QTNGMEEzRjEKKzoxMDMwRTAwMEYwOTA3RkI3NzQwNEYwODAwMjA1MTYyMDM5NkRFNTE5NjEKKzoxMDMwRjAwMDY0Rjc2MDY3RTUxQTcwNjNFNTE4NTRGMDY0RjA3MDU5N0UKKzoxMDMxMDAwMDg1MTgxOUY1MEVFNTE5MjQwRjYwMUIyNEZFNjAxNzI0OUQKKzoxMDMxMTAwMEZENjAyMjE0NjAxRjI0MDU3MDJGNzUwODAzMDUwRTg1QkQKKzoxMDMxMjAwMDE4MDlEMjM3ODAyODc1MDgwMjA1MEU4NTE4MDk3NTE0MEMKKzoxMDMxMzAwMDAxRDIzNzgwMTk3NTA4MDUwNTBFODUxODA5RTRGNTBBQ0UKKzoxMDMxNDAwMEY1MEI3NTBFMDNEMjM3ODAwNTEyNDhGM0MyMzUzMDM1QzIKKzoxMDMxNTAwMDBBODUwODEzODUxODEyODAwMjA1MTY4NTE4MTlFNTE2QzgKKzoxMDMxNjAwMDY0MDQ3MDYyRjUwRUU1MTk1NEYwRjUxOUY1MTU4NTE4MkIKKzoxMDMxNzAwMDE5RTUxNTI0NzA2MDE4MjRGMDYwMTQyNEYwNjAxMDI0MDAKKzoxMDMxODAwMEYwNjAxRTI0RjA2MDFBMjRGMDYwMDQyNDYwNzAyN0U1Q0IKKzoxMDMxOTAwMDE1QzQ1NDBGRjUxOUY1MDgwNTBFODUxODA5RDIzNzgwQTYKKzoxMDMxQTAwMDFBRTUxNUM0NTQwRkY1MTlGNTA4MDUwRTg1MTgwOTc1QUIKKzoxMDMxQjAwMDE0MDFEMjM3ODAwNTEyNDhGM0MyMzUzMDM1MEE4NTE5MUIKKzoxMDMxQzAwMDEzODUxODEyODAwMjA1MTZFNTE2RDM5NDA1NDA1NzEyOTAKKzoxMDMxRDAwMDQ4RjM4MDUyMzAzOTE3RTUwRTcwMEE4NTA4MDk3NTA4RTIKKzoxMDMxRTAwMDA0MDUwRTgwNDE3NDA4MjUwRUY4QTYxOTgwMzgyMDM3OTIKKzoxMDMxRjAwMDJBRTUwRUI0MDEwRjg1MDgwQTg1MDkwQjg1MTMwODg1OTkKKzoxMDMyMDAwMDEyMDk3NTBFMDRFNTE0QjQwMTFDODUwODBBRTRGNTBCRDcKKzoxMDMyMTAwMDg1MTMwODg1MTIwOTc1MEUwNDgwMEJFNTE0QjQwMTA2QTgKKzoxMDMyMjAwMEU0RjUwQjc1MEUwNEU0RjUxQTMwMzUwMjA1MEVFNTBFRDMKKzoxMDMyMzAwMEQzOTQwMzUwMDIwMTBCQzIzN0U0RjUwRUY1MTBDMjM2RTkKKzoxMDMyNDAwMEQyM0RGNTE0NzQwODI1MTBGOEU2RkY3NDgwMjUxMEY1QkEKKzoxMDMyNTAwMDgyRTQzNDdFRjU4M0VGRjA3NDA4MjUxMEY4RTRGNjA1NzcKKzowRjMyNjAwMDEwRTUxMEI0MDRERTkwN0ZCNzc0MDRGMDAxMEIyMjY4Cis6MEM0OEYzMDBDMjM3RTRGNTBFRjUxMEMyMzZGNTE0MjJCMQorOjEwNDAwMDAwRTUxMUQzOTQwMDUwMDIyMTA2OTA3Njg5RTBDMzk0MDgwQworOjEwNDAxMDAwNDAwMjIxMDY3NDQwMjUwRkY1ODJFNDM0N0VGNTgzRTBFQQorOjEwNDAyMDAwRjUxN0U1MEQ2MDBFOTA4MDA1RTUxN0YwOTA3Njg5RTBCNAorOjEwNDAzMDAwMDRGMDAxREFFNTE3MTIzN0Y5NDBDMTAyNDA2NzA1NDA4NAorOjEwNDA0MDAwN0EwNjQwOTgwNzQwQzEwQzQwQzEwRDQwQzcwRjQwQ0JENQorOjEwNDA1MDAwRjY0MENCRjg0MENCRkE0MENCRkI0MENCRkM0MENCRkU0QworOjEwNDA2MDAwNDBDQkZGMDAwMDQwREE5MDdFNDFFMDkwODAwNUYwOTA2OAorOjEwNDA3MDAwNzY4OUUwMDRGMDc1MTEwMTgwNjA5MDdFNDFFMDkwODBDNworOjEwNDA4MDAwMDVGMDkwN0U0MkUwOTA4MDA1RjA5MDc2ODlFMDA0RjBBMworOjEwNDA5MDAwRTAwNEYwNzUxMTAxODA0MjkwN0U0MUUwOTA4MDA1RjBDRgorOjEwNDBBMDAwOTA3RTQyRTA5MDgwMDVGMDkwN0U0M0UwOTA4MDA1RjBBNQorOjEwNDBCMDAwOTA3Njg5RTAwNEYwRTAwNEYwRTAwNEYwNzUxMTAxODBFRQorOjEwNDBDMDAwMTlEMjNCRDIzQzgwMTNEMjNCODAwRjkwODAwNUU1MTc3QworOjEwNDBEMDAwRjA5MDc2ODlFMDA0RjA3NTExMDEyMDNCMDQwNTBEODAxNQorOjEwNDBFMDAwMUYzMDNDMUM5MDdFNDFFMDkwODAwNUYwOTA3RTQyRTBDNQorOjEwNDBGMDAwOTA4MDA1RjA5MDc2ODlFMDA0RjBFMDA0RjA3NTExMDFGRAorOjEwNDEwMDAwMDUwRjE1MTEwMTAwRTUxMTcwMTBDMjMzRjUwREY1MEYwMworOjBCNDExMDAwOTA3RkM3NzQwNEYwQzIzQkMyM0MyMjQ5Cis6MTA0QkJCMDA5MDdGRDZFMDMwRTcxMkUwNDQwMUYwN0YxNDdFMDAxMkM0Cis6MEE0QkNCMDA0RDJGOTA3RkQ2RTA1NEZFRjAyMjNCCis6MTA0QUY2MDA5MDdGRDZFMDU0RkJGMEUwNDQwOEYwMzA0MjA0RTA0NEY2Cis6MTA0QjA2MDAwMkYwN0ZEQzdFMDUxMjREMkY5MDdGRDZFMDU0RjdGMDQxCis6MDU0QjE2MDBFMDQ0MDRGMDIyNjAKKzoxMDREMkYwMDhFMzU4RjM2RTUzNjE1MzZBRTM1NzAwMjE1MzU0RTYwMzkKKzowNzREM0YwMDA1MTIxNDg1ODBFRTIyMkQKKzoxMDQ5RkYwMEU0RkU3NTFERkY3NTFFMDU3NTFGMTJBQjFEQUExRUE5QkUKKzoxMDRBMEYwMDFGOTAwMDAxMTIzNkFCNjQwMjcwMkZDREVFQ0QwRUVENkMKKzoxMDRBMUYwMDZGNzAwMTIyOTAwMDAyMTIzNzBFODVGMDFCRjUxQzYyOTkKKzoxMDRBMkYwMDFCRTUxQjYyMUNFNTFDNjIxQjI5RkRFNTFCM0FDOUVENEEKKzoxMDRBM0YwMEM5NzUxREZGRjUxRTg5MUY4MEMxN0IwMDdBMDA3OTAwQTMKKzowMTRBNEYwMDIyNDQKKzowNDE3OTQwMDhEMjk4QjJBRTYKKzoxMDE3OTgwMDEyNDlGRkVBNDk2MDU3MTIzNjkyN0UwMDI5RkZFRTNBNTUKKzoxMDE3QTgwMEM5RUZDOTc1MkJGRkY1MkM4OTJEQUIyQkFBMkNBOTJEQjgKKzoxMDE3QjgwMDkwMDAwMTEyMzZBQkZGNjQwNDYwMDVFRjY0MDU3MDJFREIKKzoxMDE3QzgwMEVGQjQwNDE1OTAwMDAyMTIzNkFCNjUyOTcwMEI5MDAwMzcKKzoxMDE3RDgwMDAzMTIzNkFCNjUyQTcwMDEyMjEyMzY5MjdFMDAyOUZGNjkKKzoxMDE3RTgwMEVFM0FDOUVGQzk3NTJCRkZGNTJDODkyRDgwQkM3QjAwMUIKKzowNDE3RjgwMDdBMDA3OTAwRkEKKzowMTE3RkMwMDIyQ0EKKzowMjQ4QjAwMDhGMkU0OQorOjEwNDhCMjAwRTRGNTJGNzUzMEZGNzUzMTA2NzUzMkJFQUIzMEFBMzE4MworOjEwNDhDMjAwQTkzMjkwMDAwMTEyMzZBQkI0MDMxRkFGMkYwNTJGRUZCMAorOjEwNDhEMjAwNjUyRTcwMDEyMjEyMzY5MjdFMDAyOUZGRUUzQUM5RUY1MAorOjEwNDhFMjAwQzk3NTMwRkZGNTMxODkzMjgwRDI3QjAwN0EwMDc5MDBCOAorOjAxNDhGMjAwMjJBMworOjEwMDUwMDAwMTIwMTEwMDEwMDAwMDA0MDZBMDgxMTAxMDAwMTAxMDJGRgorOjEwMDUxMDAwMDAwMTA5MDJBQzAxMDMwMTAwODAzMjA5MDQwMDAwMDA1RgorOjEwMDUyMDAwMDEwMTAwMDAwQTI0MDEwMDAxNTYwMDAyMDEwMjBDMjQwRQorOjEwMDUzMDAwMDIwMTAxMDEwMDAyMDAwMDAwMDAwRDI0MDYwNTAxMDI3NQorOjEwMDU0MDAwMDMwMDAwMDAwMDAwMDAwOTI0MDMwMjA0MDMwMDA1MDA2QQorOjEwMDU1MDAwMEMyNDAyMDMwNTAyMDAwNjAwMDAwMDAwMTUyNDA2MDYxNAorOjEwMDU2MDAwMDMwMjAwMDAwMzAwMDMwMDAzMDAwMzAwMDMwMDAzMDA3NAorOjEwMDU3MDAwMDAwOTI0MDMwNDAxMDEwMDA2MDAwOTA0MDEwMDAwMDEzMAorOjEwMDU4MDAwMDIwMDAwMDkwNDAxMDEwMjAxMDIwMDAwMDcyNDAxMDEyOAorOjEwMDU5MDAwMDAwMTAwMTEyNDAyMDEwMjAyMTAwMzQ0QUMwMDgwQkJFMAorOjEwMDVBMDAwMDAwMDc3MDEwOTA1MEEwNTg0MDEwMTAwOEYwNzI1MDE3NAorOjEwMDVCMDAwMDEwMDAwMDAwOTA1OEYwMTAzMDAwMTA1MDAwOTA0MDE4NQorOjEwMDVDMDAwMDIwMjAxMDIwMDAwMDcyNDAxMDEwMDAxMDAxMTI0MDJCRgorOjEwMDVEMDAwMDEwMjAzMTgwMzQ0QUMwMDgwQkIwMDAwNzcwMTA5MDU0OQorOjEwMDVFMDAwMEEwNTQ2MDIwMTAwOEYwNzI1MDEwMTAwMDAwMDA5MDVFOAorOjEwMDVGMDAwOEYwMTAzMDAwMTA1MDAwOTA0MDIwMDAwMDEwMjAwMDA1MAorOjEwMDYwMDAwMDkwNDAyMDEwMTAxMDIwMDAwMDcyNDAxMDQwMDAxMDBBNQorOjEwMDYxMDAwMEUyNDAyMDEwNjAyMTAwMjQ0QUMwMDgwQkIwMDA5MDU1MgorOjEwMDYyMDAwOEMwNTRDMDIwMTAwMDAwNzI1MDEwMDAyMDAwMDA5MDRBRQorOjEwMDYzMDAwMDIwMjAxMDEwMjAwMDAwNzI0MDEwNDAwMDEwMDBFMjQ0RgorOjEwMDY0MDAwMDIwMTA2MDMxODAyNDRBQzAwODBCQjAwMDkwNThDMDVCQQorOjEwMDY1MDAwNzIwMzAxMDAwMDA3MjUwMTAwMDIwMDAwMDkwNDAyMDNFMworOjEwMDY2MDAwMDEwMTAyMDAwMDA3MjQwMTA0MDAwMTAwMTEyNDAyMDExRAorOjEwMDY3MDAwMDIwMjEwMDM0NEFDMDA4MEJCMDAwMDc3MDEwOTA1OEMyNgorOjEwMDY4MDAwMDU4NDAxMDEwMDAwMDcyNTAxMDAwMjAwMDAwOTA0MDJBMQorOjEwMDY5MDAwMDQwMTAxMDIwMDAwMDcyNDAxMDQwMDAxMDAxMTI0MDJFQQorOjEwMDZBMDAwMDEwMjAzMTgwMzQ0QUMwMDgwQkIwMDAwNzcwMTA5MDU3OAorOjEwMDZCMDAwOEMwNTQ2MDIwMTAwMDAwNzI1MDEwMDAyMDAwMDA0MDMyQQorOjEwMDZDMDAwMDkwNDE4MDM0NTAwNkQwMDYxMDA2NzAwNjkwMDYzMDBCQworOjEwMDZEMDAwMjAwMDQ3MDA2RDAwNjIwMDQ4MDAyMjAzNDUwMDZEMDBDNQorOjEwMDZFMDAwNjEwMDY3MDA2OTAwNjMwMDIwMDA0NTAwNEQwMDQ5MDA3QgorOjEwMDZGMDAwMjAwMDM2MDA3QzAwMzIwMDIwMDA2RDAwMkEwMzQzMDBGOQorOjEwMDcwMDAwNkYwMDZFMDA2NjAwNjkwMDY3MDA3NTAwNzIwMDYxMDA4RQorOjEwMDcxMDAwNzQwMDY5MDA2RjAwNkUwMDIwMDA1MzAwNzQwMDcyMDBDNgorOjEwMDcyMDAwNjkwMDZFMDA2NzAwMjIwMzQ5MDA2RTAwNzQwMDY1MDBENgorOjEwMDczMDAwNzIwMDY2MDA2MTAwNjMwMDY1MDAyMDAwNTMwMDc0MDBEMQorOjBBMDc0MDAwNzIwMDY5MDA2RTAwNjcwMDAwMDBGRgorOjEwMTQ4NTAwNzQwMEY1ODY5MEZEQTU3QzA1QTNFNTgyNDU4MzcwRjk3QQorOjAxMTQ5NTAwMjIzNAorOjEwMTQ5NjAwOTA3RkQ2RTA0NDgwRjA0Mzg3MDEwMDAwMDAwMDAwMjJFMAorOjEwMTRBNjAwQzBEMEMwRTA4RkUwQzBFMDhFRTBDMEUwOERFMEMwRTBEQworOjEwMTRCNjAwOENFMEMwRTBDMDgyQzA4MzA1ODZDMDg0QzA4NTdEMDAwNAorOjEwMTRDNjAwOTA3RkUzNzQ3QkYwQTM3NDgwRjA3QzExOTA3Rjk5RTBBOQorOjEwMTRENjAwNTQ0MERDMDMwMjE0RjNCNDAwMTM5MDdGRTI3NDQwRjAyRQorOjEwMTRFNjAwOTA3RkU1RjA5MDdGRTI3NDAwRjAwMjE0RDI5MDc2OTAzRgorOjEwMTRGNjAwRTBCNDAxMTI5MDc2OEZFMDJERkQ5MDdGRTI3NDgwRjBDQgorOjEwMTUwNjAwOTA3RjZDMDIxNTU3QjQwMjEyOTA3NjhGRTAyREZEOTBGNQorOjEwMTUxNjAwN0ZFMjc0ODBGMDkwN0Y2QzAyMTU5NkI0MDMxMjkwNzY4OQorOjEwMTUyNjAwOEZFMDJERkQ5MDdGRTI3NDgwRjA5MDdGNkMwMjE1RTFENAorOjEwMTUzNjAwQjQwNDEyOTA3NjhGRTAyREZEOTA3RkUyNzQ4MEYwOTBENworOjEwMTU0NjAwN0Y2QzAyMTYxMDkwN0ZFMjc0ODBGMDkwN0Y2QzAyMTYxQQorOjEwMTU1NjAwNDBGMEYwRjBGMEYwRjBGMEYwRjBGMEYwRjBEREYyN0RCOQorOjEwMTU2NjAwMDIwNTg2OTA3RkUyNzQwMEYwOTA3RjlCRTA1NDA0QjRGRAorOjEwMTU3NjAwMDAwNTA1ODYwMjE2NDA5MDdGRTI3NDgwRjAwNTg2RjAyRAorOjEwMTU4NjAwRjBGMEYwRjBGMEYwRjBGMEYwRjBGMERERDQwMjE2NDBGQworOjEwMTU5NjAwRjBGMEYwRjBGMEYwRjBGMEYwRjBGMEYwRjBGMEYwRjA0NQorOjEwMTVBNjAwRjBGMERERUM3RDAyMDU4NjkwN0ZFMjc0MDBGMDkwN0YxRQorOjEwMTVCNjAwOUJFMDU0MDRCNDAwMDUwNTg2MDIxNjQwOTA3RkUyNzQ1MQorOjEwMTVDNjAwODBGMDA1ODZGMEYwRjBGMEYwRjBGMEYwRjBGMEYwRjBEQQorOjA2MTVENjAwRjBGMEYwRjBGMEYwNkYKKzoxMDE1REMwMEREQ0UwMjE2NDBGMEYwRjBGMERERkE3RDAyMDU4NjkwQ0IKKzoxMDE1RUMwMDdGRTI3NDAwRjA5MDdGOUJFMDU0MDRCNDAwMDUwNTg2MDQKKzoxMDE1RkMwMDAyMTY0MDkwN0ZFMjc0ODBGMDA1ODZGMEYwRjBGMEREOEEKKzoxMDE2MEMwMERDMDIxNjQwRjBGMEYwRjBGMEYwRERGODdEMDIwNTg2MUIKKzoxMDE2MUMwMDkwN0ZFMjc0MDBGMDkwN0Y5QkUwNTQwNEI0MDAwNTA1QzkKKzoxMDE2MkMwMDg2MDIxNjQwOTA3RkUyNzQ4MEYwMDU4NkYwRjBGMEYwQjAKKzoxMDE2M0MwMEYwRjBERERBOTA3RkUyNzQwMEYwRDA4NUQwODQwNTg2N0UKKzoxMDE2NEMwMEQwODNEMDgyRDBFMEZDRDBFMEZERDBFMEZFRDBFMEZGMzMKKzowNTE2NUMwMEQwRTBEMEQwMjIxNworOjEwMTY2MTAwQzBEMEMwRTBDMDgyQzA4MzkwNzY3Q0UwOTA3RjZGRjBGNAorOjEwMTY3MTAwOTA3NjdERTA5MDdGNkZGMDkwNzY3RUUwOTA3RjZGRjBDNgorOjA5MTY4MTAwRDA4M0QwODJEMEUwRDBEMDIyNDkKKzoxMDE2OEEwMEMwRDBDMEUwOEZFMEMwRTA4RUUwQzBFMEMwODJDMDgzN0UKKzoxMDE2OUEwMDA1ODZDMDg0QzA4NTkwNzY4N0UwRkZCRjAwMDMwMjE3RTUKKzoxMDE2QUEwMDAxOTA3Rjk2RTA0NDgwRjA5MDdGRTI3NDgwRjA5MDdGMTIKKzoxMDE2QkEwMDYyRTAwNTg2OTA3RkUyNzQwMEYwOTA3Rjk2RTA1NDdGQTYKKzoxMDE2Q0EwMEYwOTA3RkUyNzQ4MEYwOTA3NjhFRTBCNDAxMDUwNTg2OTIKKzoxMDE2REEwMDAyMTZGNkI0MDIwNTA1ODYwMjE2RUIwNTg2MDIxNkZCMEIKKzoxMDE2RUEwMEUwRTBFMEUwRTBFMERGRjgwMjE2RkJFMEUwRTBFMERGNjcKKzoxMDE2RkEwMEZBOTA3RkUyNzQwMEYwRDA4NUQwODQwNTg2RDA4M0QwM0EKKzowQzE3MEEwMDgyRDBFMEZFRDBFMEZGRDBFMEQwRDAyMjgyCis6MTAxNzE2MDBDMDgyQzA4M0MwRTBFOEMwRTA3OEQxRTgxNEY4NzBGQjZFCis6MEExNzI2MDBEMEUwRjhEMEUwRDA4M0QwODIyMjlBCis6MTAwQ0E1MDA0MTcyMDEwMTQ1NzIwNTAwMDJDOTAwMDA0NTcyMEEwMDQyCis6MTAwQ0I1MDAwMTAyMDMwNDRENzIwRkQxMDBEMTAwMDAwMDAwMDAwMEI1Cis6MTAwQ0M1MDAyODI4MDkwMDRENzIxQzAxMDAwMTAyMDMwNDA1MDYwN0NFCis6MTAwQ0Q1MDAwODA5MEEwQjQxNzIyRTIyNDE3MjJGMjM0MTcyMzAyMERFCis6MTAwQ0U1MDA0MTcyMzEyMTYyRDI3MjNBMDAwMDAwMDAwMDAwMDAwMDFBCis6MTAwQ0Y1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTAwRDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTAwRDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTAwRDI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTAwRDM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTAwRDQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTAwRDU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTAwRDY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTAwRDc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDEwMTAxMDEwMTY4Cis6MTAwRDg1MDAwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTRFCis6MTAwRDk1MDAwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTNFCis6MTAwREE1MDAwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTJFCis6MTAwREI1MDAwMTAxMDEwMTAxMDEwMTAxMDIwMjAyMDIwMjAyMDIwMjE2Cis6MTAwREM1MDAwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMkZFCis6MTAwREQ1MDAwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMkVFCis6MTAwREU1MDAwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMkRFCis6MTAwREY1MDAwMjAyMDIwMjAyMDMwMzAzMDMwMzAzMDMwMzAzMDMwM0MzCis6MTAwRTA1MDAwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwM0FECis6MTAwRTE1MDAwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzlECis6MTAwRTI1MDAwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzAzMDMwMzhECis6MTAwRTM1MDAwMzAzMDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDZGCis6MTAwRTQ1MDAwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDVECis6MTAwRTU1MDAwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDRECis6MTAwRTY1MDAwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDNECis6MTAwRTc1MDAwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTFECis6MTAwRTg1MDAwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTBECis6MTAwRTk1MDAwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNUZECis6MTAwRUE1MDAwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDUwNTA1MDYwNkVCCis6MTAwRUI1MDAwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNkNECis6MTAwRUM1MDAwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNkJECis6MTAwRUQ1MDAwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDYwNkFECis6MTAwRUU1MDAwNjA2MDYwNjA2MDYwNjA2MDYwNjA2MDcwNzA3MDgwODk2Cis6MTAwRUY1MDAwODA5MDkwOTBBMEEwQTBCMEIwQjBDMEMwQzBEMEQwRDQwCis6MTAwRjA1MDAwRTBFMEUwRjBGMEYxMDEwMTAxMTExMTExMjEyMTIxM0Q5Cis6MTAwRjE1MDAxMzEzMTQxNDE0MTUxNTE1MTYxNjE2MTcxNzE3MTgxODc0Cis6MTAwRjI1MDAxODE5MTkxOTE5MUExQTFBMUExQjFCMUIxQjFDMUMxQzE4Cis6MTAwRjM1MDAxQzFEMUQxRDFEMUUxRTFFMUUxRjFGMUYxRjIwMjAyMEM4Cis6MTAwRjQ1MDAyMTIxMjEyMjIyMjIyMzIzMjQyNDI1MjUyNjI2MjcyNzYxCis6MTAwRjU1MDAyODI4MjkyOTJBMkEyQjJCMkMyQzJEMkQyRTJFMkYyRkQ0Cis6MTAwRjY1MDAzMDMwMzEzMTMyMzIzMzMzMzQzNDM1MzUzNjM2MzczNzQ0Cis6MTAwRjc1MDAzODM4MzkzOTNBM0EzQjNDM0QzRTNGNDA0MTQyNDM0NDlCCis6MTAwRjg1MDA0NTQ2NDc0ODQ5NDk0QTRCNEI0QzRENEU0RjUwNTE1MkE3Cis6MTAwRjk1MDA1MzU0NTU1NTU2NTY1NzU3NTg1QTVCNUQ1RTVGNjE2MkI3Cis6MTAwRkE1MDA2MzY0NjU2NjY3Njg2OTZBNkI2QzZENkY3MTcyNzM3NDhCCis6MTAwRkI1MDA3NTc2Nzc3ODc5N0E3QjdDN0U4MDAxMzcwMTAxMzgwMEY4Cis6MTA0QUM0MDBFNDkwNzIzNkYwQTNGMDkwN0Y5N0UwNTRGQkYwRTQ5MDBBCis6MTA0QUQ0MDA3MjMzRjA5MDcyMzJGMDkwNzIwMTA0RjBFNDkwNzIzMzA5Cis6MTA0QUU0MDBGMDkwNzIzMkYwOTA3MjAxMDRGMDkwN0Y5N0UwNDQwNEU5Cis6MDI0QUY0MDBGMDIyQUUKKzoxMDMyNkYwMDkwNzYxOEUwRkY2NDA1NzA0MjkwNzVBQkUwQjQwMTE5RDkKKzoxMDMyN0YwMDkwNzIzNzc0MDFGMEU0OTA4MDIwRjA5MDgwMzFGMDkwREMKKzoxMDMyOEYwMDgwMjhGMDkwODAzOUYwODAyMkU0OTA3MjM3RjA5MDc1QUEKKzoxMDMyOUYwMEFERTA5MDcyMkJGMEUwMjQ4MEYwRTA5MDgwMjBGMDkwNzEKKzoxMDMyQUYwMDgwMzFGMDkwODAyOEYwOTA4MDM5RjBFRjY0MDY2MDAyNTIKKzoxMDMyQkYwMDgxOTk5MDcyMzk3NDA0RjA5MDcyMzlFMEZGMjRGRTkwNzYKKzoxMDMyQ0YwMDcyMDRGMEVGNzVGMDBBQTQyNEFCRjU4MkU0MzQ3NUY1QkYKKzoxMDMyREYwMDgzRTA2NDAxNzA1NDkwNzIzNjA0RjA5MDcyMDRFMEZGNDIKKzoxMDMyRUYwMDI0RkQ2MDI4MjRGRTYwMjQyNDAzMjRGQjUwMDQ2MDFDNkEKKzoxMDMyRkYwMDgxOEM3NDIwMkZGNTgyRTQzNDgwRjU4M0U0RjA3NDI4RjgKKzoxMDMzMEYwMDJGRjU4MkU0MzQ4MEY1ODNFNEYwODE4QzkwNzIwNEUwMzEKKzoxMDMzMUYwMEZGMjQzMEY1ODJFNDM0ODBGNTgzRTRGMDc0MzgyRkY1MjAKKzoxMDMzMkYwMDgyRTQzNDgwRjU4M0U0RjA4MThDRTQ5MDcyMzZGMDkwN0YKKzoxMDMzM0YwMDcyMzlFMDc1RjAwQUE0MjRBREY1ODJFNDM0NzVGNTgzOTMKKzoxMDMzNEYwMEUwRkY3RTAwOTA3NTBDRUVGMEEzRUZGMDcwMDY5MDcyMjgKKzoxMDMzNUYwMDAyNzQzQkYwOTA3NTBDRTBGRUEzRTBGRjY0ODA0RTcwQUEKKzoxMDMzNkYwMDA0OTA3MjAyRjBFRjRFNzAwMjgxMzVFRjY0ODA0RTcwNjAKKzoxMDMzN0YwMDAyODEzNUVGRjhFNDkwNzUwREYwRTg5MDc1MENGMDkwNDAKKzoxMDMzOEYwMDcyMzRFMDc1RjAwQUE0MjRBQ0Y1ODJFNDM0NzVGNTgzNDkKKzoxMDMzOUYwMEUwRkY5MDcyMDJGMDkwNzUwREUwMkZGMDkwNzUwQ0UwNDkKKzoxMDMzQUYwMDM0MDBGMEUwRkVBM0UwRkZFNEZDRkQ3QkQ2N0FBNUY5NDQKKzoxMDMzQkYwMEY4RDMxMjM3OTU0MDBBOTA3NTBDNzRBNUYwQTM3NEQ2MDQKKzoxMDMzQ0YwMEYwOTA3NTBERTAyNDJBRjA5MDc1MENFMDM0NUFGMEUwN0YKKzoxMDMzREYwMEZFQTNFMDc4MDVDRUEyRTcxM0NFMTNEOEY4RkY5MDc1QzEKKzoxMDMzRUYwMDBDRUVGMEEzRUZGMDkwNzIyQ0VFRjBBM0VGRjBEMzk0NkQKKzoxMDMzRkYwMEQyRUU2NDgwOTQ4MjQwMEE5MDcyMkM3NDAyRjBBMzc0MEYKKzoxMDM0MEYwMEQyRjBDMzkwNzIyQ0UwNjQ4MDk0ODA1MDA0RTRGMEEzNTcKKzoxMDM0MUYwMEYwOTA3MjJDRTBGRUEzRTAyNDNBRjU4MkVFMzQ3MkY1QzAKKzoxMDM0MkYwMDgzRTA5MDcyMDJGMDkwNzIwNEUwRkYyNEZENjAyRDI0N0YKKzoxMDM0M0YwMEZFNjAyOTI0MDMyNEZCNTAwNDYwMjE4MDQwOTA3MjAyMTcKKzoxMDM0NEYwMEUwRkU3NDIwMkZGNTgyRTQzNDgwRjU4M0VFRjA3NDI4Q0IKKzoxMDM0NUYwMDJGRjU4MkU0MzQ4MEY1ODNFRUYwODAyMTkwNzIwMkUwNDQKKzoxMDM0NkYwMEZGOTA3MjA0RTBGRTI0MzBGNTgyRTQzNDgwRjU4M0VGQTAKKzoxMDM0N0YwMEYwNzQzODJFRjU4MkU0MzQ4MEY1ODNFRkYwOTA3MjM5RDIKKzowQjM0OEYwMEUwMDRGMEUwNjQwQTYwMDI0MUM3MjI4NAorOjEwMzQ5QTAwOTA3NjE4RTBGRkI0MDUyMzkwNzIzN0UwNzAxRDkwNzU5RQorOjEwMzRBQTAwQURFMDkwNzIyQkYwRTAyNDgwRjBFMDkwODAyMEYwOTA2NAorOjEwMzRCQTAwODAzMUYwOTA4MDI4RjA5MDgwMzlGMEVGNjQwNjYwMDI0NQorOjEwMzRDQTAwQzE5MTkwNzIzNkUwNjAwMkMxOTE5MDc2NDBFMDcwMzEwRAorOjEwMzREQTAwOTA3MjAzNzQwM0YwOTA3MjAzRTBGRjc1RjAwQUE0MjQ1QgorOjEwMzRFQTAwQUFGNTgyRTQzNDc1RjU4M0UwRkU5MDcyMjlFMEZERUVEOAorOjEwMzRGQTAwNkQ2MDBFRUZDMzk0MEE1MDA4OTA3MjAzRTAwNEYwODBFNgorOjEwMzUwQTAwRDU5MDcyMzk3NDA0RjA5MDc2NDBFMDcwMDg5MDcyMDM5NgorOjEwMzUxQTAwRTA5MDcyMzlGMDkwNzIzOUUwRkQyNEZFOTA3MjJBRjA0MAorOjEwMzUyQTAwRUQ3NUYwMEFBNDI0QURGNTgyRTQzNDc1RjU4M0UwRkY2NQorOjEwMzUzQTAwN0UwMDkwNzUwQ0VFRjBBM0VGRjA3MDA2OTA3MjAyNzRBNAorOjEwMzU0QTAwODBGMDkwNzUwQ0UwRkVBM0UwRkY2NDgwNEU3MDA0OTA1QQorOjEwMzU1QTAwNzIwMkYwRUY0RTcwMDJDMTFCRUY2NDgwNEU3MDAyQzExRQorOjEwMzU2QTAwMUJFRkY4RTQ5MDc1MERGMEU4OTA3NTBDRjBFRDc1RjAyRQorOjEwMzU3QTAwMEFBNDI0QUNGNTgyRTQzNDc1RjU4M0UwRkY5MDcyMDI2NAorOjEwMzU4QTAwRjA5MDc1MERFMDJGRjA5MDc1MENFMDM0MDBGMEUwRkUzRAorOjEwMzU5QTAwQTNFMEZGRTRGQ0ZEN0JENjdBQTVGOUY4RDMxMjM3OTVCMAorOjEwMzVBQTAwNDAwQTkwNzUwQzc0QTVGMEEzNzRENkYwOTA3NTBERTBERQorOjEwMzVCQTAwMjQyQUYwOTA3NTBDRTAzNDVBRjBFMEZFQTNFMDc4MDU3NgorOjEwMzVDQTAwQ0VBMkU3MTNDRTEzRDhGOEZGOTA3NTBDRUVGMEEzRUY1NgorOjEwMzVEQTAwRjA5MDcyMkNFRUYwQTNFRkYwRDM5NEQyRUU2NDgwOTRDNAorOjEwMzVFQTAwODI0MDBBOTA3MjJDNzQwMkYwQTM3NEQyRjBDMzkwNzJEMworOjEwMzVGQTAwMkNFMDY0ODA5NDgwNTAwNEU0RjBBM0YwOTA3MjJDRTBGNAorOjEwMzYwQTAwRkVBM0UwMjQzQUY1ODJFRTM0NzJGNTgzRTA5MDcyMDI2QQorOjEwMzYxQTAwRjA5MDcyMkFFMEZGMjRGRDYwMkQyNEZFNjAyOTI0MDMyNQorOjEwMzYyQTAwMjRGQjUwMDQ2MDIxODA0MDkwNzIwMkUwRkU3NDIwMkYzNworOjEwMzYzQTAwRjU4MkU0MzQ4MEY1ODNFRUYwNzQyODJGRjU4MkU0MzRDMQorOjEwMzY0QTAwODBGNTgzRUVGMDgwMjE5MDcyMDJFMEZGOTA3MjJBRTAwQQorOjEwMzY1QTAwRkUyNDMwRjU4MkU0MzQ4MEY1ODNFRkYwNzQzODJFRjVEOQorOjEwMzY2QTAwODJFNDM0ODBGNTgzRUZGMDkwNzY0MEUwNzAwNjkwNzI0MQorOjEwMzY3QTAwMzk3NDBBRjA5MDcyMzlFMDA0RjBFMEMzOTQwQTUwMDJGNworOjA4MzY4QTAwQTExMUU0OTA3NjQwRjAyMjRBCis6MDQ0RDk3MDAxMjE3MzAyMjlECis6MTA0OTU4MDA5MDc2NDY3NDgwRjBFNEEzRjBBM0YwQTNGMEEzRjBBMzRDCis6MTA0OTY4MDBGMEEzRjBBM0YwQTNGMEEzNzQ4MEYwRTRBM0YwQTNGMDA1Cis6MTA0OTc4MDBBM0YwQTNGMEEzRjBBM0YwQTM3NDQwRjBFNEEzRjBBMzgyCis6MTA0OTg4MDA3NDQwRjBFNEEzRjBBM0YwQTNGMEEzRjBBM0YwQTNGMDI1Cis6MTA0OTk4MDBBMzc0NDBGMEU0QTNGMEEzNzQ0MEYwRTRBM0YwQTNGMDAwCis6MDU0OUE4MDBBM0YwQTNGMDIyQzIKKzoxMDBGQzYwMEU0RkY3NDQ2MkZGNTgyRTQzNDc2RjU4M0UwRkU3NDIwNjAKKzoxMDBGRDYwMDJGRjU4MkU0MzQ4MEY1ODNFRUYwNzQ0RTJGRjU4MkU0MkIKKzoxMDBGRTYwMDM0NzZGNTgzRTBGRTc0MzAyRkY1ODJFNDM0ODBGNTgzQTEKKzowNjBGRjYwMEVFRjAwRkJGMDhDQzc1Cis6MDEwRkZDMDAyMkQyCis6MTA0QThEMDBFNEZGNzQ1NjJGRjU4MkU0MzQ3NkY1ODNFMEZFNzQyODQ2Cis6MTA0QTlEMDAyRkY1ODJFNDM0ODBGNTgzRUVGMDc0NUUyRkY1ODJFNDE5Cis6MTA0QUFEMDAzNDc2RjU4M0UwRkU3NDM4MkZGNTgyRTQzNDgwRjU4Mzk3Cis6MDY0QUJEMDBFRUYwMEZCRjA4Q0M3MworOjAxNEFDMzAwMjJEMAorOjEwMTczMDAwQzA4MkMwODNDMEUwRThDMEUwNzg3OEU4MTRGODcwRkJBRAorOjBBMTc0MDAwRDBFMEY4RDBFMEQwODNEMDgyMjI4MAorOjAzMDA0MzAwMDI0OTAwNkYKKzoxMDQ5MDAwMDAyMkZFNzAwMDIzRDQ3MDAwMjRENDYwMDAyNEJENTAwNTIKKzoxMDQ5MTAwMDAyNEI2MDAwMDIyRkZGMDAwMjRCRUQwMDAyNEI4MTAwQjIKKzoxMDQ5MjAwMDAyNEMwNDAwMDIzRkQ1MDAwMjRDMUIwMDAyNEMzMjAwMzYKKzoxMDQ5MzAwMDAyNEM0OTAwMDI0QzYwMDAwMjRDNzcwMDAyNEM4RTAwOTEKKzoxMDQ5NDAwMDAyNENBNTAwMDI0Q0JDMDAwMjRDRDMwMDAyNENFQTAwMTEKKzowODQ5NTAwMDAyNEQwMTAwMDI0RDE4MDBBOAorOjEwMUI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQorOjEwMUI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwMUI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwMUI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwMUI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwMUI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwMUJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwMUJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwMUJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMUJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwMUJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwMUJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwMUMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAorOjEwMUMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwMUMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwMUM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAorOjEwMUM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwMUM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAorOjEwMUM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwMUM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwMUM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAorOjEwMUNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwMUNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwMUNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAorOjEwMUNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMUNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwMUNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMworOjEwMUQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMworOjEwMUQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwMUQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjEwMUQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwMUQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwMUQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwMUQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MworOjEwMUQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwMUQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwMURBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwMURCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwMURDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwMUREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwMURFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwMURGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwMUUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwMUUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgorOjEwMUUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwMUU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwMUU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgorOjEwMUU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwMUU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwMUU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwMUU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwMUVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgorOjBFMUVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTAxRUJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Cis6MTAxRUNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAxRURFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTAxRUVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTAxRUZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTAxRjBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTAxRjFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTAxRjJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MDIxRjNFMDAwMDAwQTEKKzoxMDFGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKKzoxMDFGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKKzoxMDFGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKKzoxMDFGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKKzoxMDFGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKKzoxMDFGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKKzoxMDFGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKKzoxMDFGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKKzoxMDFGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKKzoxMDFGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKKzoxMDFGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKKzoxMDFGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKKzoxMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKKzoxMDIwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDIwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDIwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKKzoxMDIwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKKzoxMDIwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKKzoxMDIwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKKzoxMDIwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKKzoxMDIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKKzoxMDIwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKKzoxMDIwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKKzoxMDIwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKKzoxMDIwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDIwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDIwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKKzoxMDIwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMDIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKKzoxMDIxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKKzoxMDIxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDIxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDIxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMDIxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMDIxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKKzoxMDIxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDIxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMDIxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKKzoxMDIxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMDIxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMDIxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKKzoxMDIxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMDIxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDIxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKKzoxMDIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKKzoxMDIyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKKzoxMDIyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKKzoxMDIyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDIyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDIyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMDIyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDIyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDIyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDIyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDIyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMDIyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMDIyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDIyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDIyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKKzoxMDIyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDIzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKKzoxMDIzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKKzoxMDIzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKKzoxMDIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDIzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDIzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKKzowRTIzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwMjM3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwMjM4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwMjM5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwMjNBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwMjNCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwMjNDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwMjNERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwMjNFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwMjNGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwMjQwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQorOjEwMjQxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwMjQyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwMjQzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwMjQ0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwMjQ1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwMjQ2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwMjQ3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwMjQ4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwMjQ5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwMjRBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwMjRCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwMjRDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwMjRERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQorOjEwMjRFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwMjRGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwMjUwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwMjUxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwMjUyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwMjUzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMjU0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwMjU1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjEwMjU2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwMjU3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMjU4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwMjU5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAorOjEwMjVBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwMjVCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwMjVDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAorOjEwMjVERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwMjVFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwMjVGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwMjYwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwMjYxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQworOjEwMjYyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QworOjEwMjYzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwMjY0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwMjY1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QworOjEwMjY2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QworOjEwMjY3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QworOjEwMjY4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQworOjEwMjY5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQworOjEwMjZBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQworOjEwMjZCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwMjZDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQworOjEwMjZERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQworOjBFMjZFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTAyNkZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTAyNzBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTAyNzFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTAyNzJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTAyNzNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAyNzRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTAyNzVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTAyNzZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTAyNzdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTAyNzhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTAyNzlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTAyN0FDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTAyN0JDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTAyN0NDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTAyN0RDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTAyN0VDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MDUyN0ZDMDAwMDAwMDAwMDIyQjYKKzowNzE3NEEwMDkwN0ZDNTc0MDJGMDIyM0MKKzoxMDE3NTEwMDkwN0VDMEUwOTA3NjQ1RjA5MDdFQzFFMDkwNzY0NEYwQjYKKzoxMDE3NjEwMDkwN0VDMkUwOTA3NjQzRjBCNDAwMDMwMjE3Nzg5MDc2NDEKKzoxMDE3NzEwMDE5NzQwM0YwMDIxNzhFOTA3NjQ0RTBCNEJCMDk5MDc2OTkKKzoxMDE3ODEwMDE5NzQwMkYwMDIxNzhFOTA3NjE5NzQwMUYwOTA3NjQyNjYKKzowMzE3OTEwMEU0RjAyMjVGCis6MDMwMDAwMDAwMjQ1RjlCRAorOjBDNDVGOTAwNzg3RkU0RjZEOEZENzU4MTM4MDI0NjQwNUEKKzoxMDM2OTIwMEJCMDEwNjg5ODI4QTgzRTAyMjUwMDJFNzIyQkJGRTAyMzYKKzowOTM2QTIwMEUzMjI4OTgyOEE4M0U0OTMyMjY5Cis6MTAzNkFCMDBCQjAxMENFNTgyMjlGNTgyRTU4MzNBRjU4M0UwMjI1MEQ0Cis6MTAzNkJCMDAwNkU5MjU4MkY4RTYyMkJCRkUwNkU5MjU4MkY4RTIyMjFFCis6MEQzNkNCMDBFNTgyMjlGNTgyRTU4MzNBRjU4M0U0OTMyMjM4Cis6MTAzNkQ4MDBDMkQ1RUMzMEU3MDlCMkQ1RTRDMzlERkRFNDlDRkNFRTBECis6MTAzNkU4MDAzMEU3MTVCMkQ1RTRDMzlGRkZFNDlFRkUxMjM4MUZDMzJFCis6MTAzNkY4MDBFNDlERkRFNDlDRkM4MDAzMTIzODFGMzBENTA3QzNFNDI5Cis6MDYzNzA4MDA5RkZGRTQ5RUZFMjI3QgorOjEwMzcwRTAwQkIwMTEwRTU4MjI5RjU4MkU1ODMzQUY1ODNFMEY1RjBGOQorOjEwMzcxRTAwQTNFMDIyNTAwOUU5MjU4MkY4ODZGMDA4RTYyMkJCRkVENgorOjEwMzcyRTAwMEFFOTI1ODJGOEUyRjVGMDA4RTIyMkU1ODMyQUY1ODMxQworOjA4MzczRTAwRTk5M0Y1RjBBM0U5OTMyMkUxCis6MTAzNzQ2MDBFODhGRjBBNENDOEJGMEE0MkNGQ0U5OEVGMEE0MkNGQzIyCis6MTAzNzU2MDA4QUYwRURBNDJDRkNFQThFRjBBNENEQThGMDhCRjBBNEEwCis6MTAzNzY2MDAyRENDMzgyNUYwRkRFOThGRjBBNDJDQ0QzNUYwRkNFQkZGCis6MTAzNzc2MDA4RUYwQTRGRUE5RjBFQjhGRjBBNENGQzVGMDJFQ0QzOUM0Cis6MEYzNzg2MDBGRUU0M0NGQ0VBQTQyRENFMzVGMEZERTQzQ0ZDMjIzMQorOjEwMzc5NTAwRUI5RkY1RjBFQTlFNDJGMEU5OUQ0MkYwRUM2NDgwQzhBQgorOjA2MzdBNTAwNjQ4MDk4NDVGMDIyNEIKKzoxMDM3QUIwMEVCOUZGNUYwRUE5RTQyRjBFOTlENDJGMEU4OUM0NUYwNzQKKzowMTM3QkIwMDIyRUIKKzowQzM3QkMwMEVDRjBBM0VERjBBM0VFRjBBM0VGRjAyMjgwCis6MTAzN0M4MDBBODgyODU4M0YwRDA4M0QwODIxMjM3REYxMjM3REYxMkM4Cis6MTAzN0Q4MDAzN0RGMTIzN0RGRTQ3M0U0OTNBM0M1ODNDNUYwQzU4M0VECis6MTAzN0U4MDBDOEM1ODJDOEYwQTNDNTgzQzVGMEM1ODNDOEM1ODJDODRCCis6MDEzN0Y4MDAyMkFFCis6MTAzN0Y5MDBEMDgzRDA4MkY4RTQ5MzcwMTI3NDAxOTM3MDBEQTNBMzVGCis6MTAzODA5MDA5M0Y4NzQwMTkzRjU4Mjg4ODNFNDczNzQwMjkzNjg2MDcyCis6MDYzODE5MDBFRkEzQTNBMzgwREY3MgorOjEwNDYwNTAwMDI0NzVBRTQ5M0EzRjhFNDkzQTM0MDAzRjY4MDAxRjIyQQorOjEwNDYxNTAwMDhERkY0ODAyOUU0OTNBM0Y4NTQwNzI0MENDOEMzMzNCNgorOjEwNDYyNTAwQzQ1NDBGNDQyMEM4ODM0MDA0RjQ1NjgwMDE0NkY2REY4NQorOjEwNDYzNTAwRTQ4MDBCMDEwMjA0MDgxMDIwNDA4MDkwMEM4RkU0N0U3QQorOjEwNDY0NTAwMDE5MzYwQkNBM0ZGNTQzRjMwRTUwOTU0MUZGRUU0OTM3QQorOjEwNDY1NTAwQTM2MDAxMEVDRjU0QzAyNUUwNjBBODQwQjhFNDkzQTM0MQorOjEwNDY2NTAwRkFFNDkzQTNGOEU0OTNBM0M4QzU4MkM4Q0FDNTgzQ0E2QworOjEwNDY3NTAwRjBBM0M4QzU4MkM4Q0FDNTgzQ0FERkU5REVFNzgwQkUyNAorOjAxMEZDNTAwMDAyQgorOjEwMzgxRjAwQkMwMDBCQkUwMDI5RUY4REYwODRGRkFERjAyMkU0Q0M4RAorOjEwMzgyRjAwRjg3NUYwMDhFRjJGRkZFRTMzRkVFQzMzRkNFRTlERUM1NgorOjEwMzgzRjAwOTg0MDA1RkNFRTlERkUwRkQ1RjBFOUU0Q0VGRDIyRUQ5QworOjEwMzg0RjAwRjhGNUYwRUU4NDIwRDIxQ0ZFQURGMDc1RjAwOEVGMkZFNgorOjEwMzg1RjAwRkZFRDMzRkQ0MDA3OTg1MDA2RDVGMEYyMjJDMzk4RkRENworOjA1Mzg2RjAwMEZENUYwRUEyMjc0Cis6MDAwMDAwMDFGRgorKi8KKy8qCitWRVJTSU9OPTEuMDQuMDYyCitEQVRFPTE2LjEwLjIwMDIgIAorKi8KK3N0YXRpYyBJTlRFTF9IRVhfUkVDT1JEIGdfZW1pNjJfbG9hZGVyW10gPSB7CisgeyAzLDB4MDAwMCwwLHsweDAyLDB4MDIsMHg4N319LAorIHsgMywweDAwNDMsMCx7MHgwMiwweDA0LDB4MDB9fSwKKyB7MTYsMHgwMTAwLDAsezB4ZTQsMHhmZiwweGZlLDB4YzIsMHgyMCwweGQyLDB4ZTgsMHg0MywweGQ4LDB4MjAsMHg5MCwweDdmLDB4YWIsMHg3NCwweGZmLDB4ZjB9fSwKKyB7MTYsMHgwMTEwLDAsezB4OTAsMHg3ZiwweGE5LDB4ZjAsMHg5MCwweDdmLDB4YWEsMHhmMCwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHg5NSwweDc0LDB4YzB9fSwKKyB7MTYsMHgwMTIwLDAsezB4ZjAsMHg5MCwweDdmLDB4OWUsMHhmMCwweDkwLDB4N2YsMHg5OCwweGYwLDB4ZTQsMHg5MCwweDdmLDB4OTQsMHhmMCwweDkwLDB4N2Z9fSwKKyB7MTYsMHgwMTMwLDAsezB4OWQsMHg3NCwweGZmLDB4ZjAsMHg5MCwweDdmLDB4OTcsMHg3NCwweGEwLDB4ZjAsMHg5MCwweDdmLDB4OTMsMHhlMCwweDU0LDB4ZmN9fSwKKyB7MTYsMHgwMTQwLDAsezB4ZjAsMHg5MCwweDdmLDB4OWMsMHg3NCwweDAzLDB4ZjAsMHhlNCwweDkwLDB4N2YsMHg5NiwweGYwLDB4OTAsMHg3ZiwweGFmLDB4ZTB9fSwKKyB7MTYsMHgwMTUwLDAsezB4NDQsMHgwMSwweGYwLDB4OTAsMHg3ZiwweGFlLDB4ZTAsMHg0NCwweDBkLDB4ZjAsMHhkMiwweGFmLDB4MGYsMHhiZiwweDAwLDB4MDF9fSwKKyB7MTYsMHgwMTYwLDAsezB4MGUsMHhiZSwweDA3LDB4ZjgsMHhiZiwweDA4LDB4ZjUsMHgyMCwweDIwLDB4NDIsMHg3NSwweDE0LDB4MDAsMHg3NSwweDEzLDB4MDB9fSwKKyB7MTYsMHgwMTcwLDAsezB4NzUsMHgxMiwweDAwLDB4NzUsMHgxMSwweDAwLDB4N2YsMHg0OCwweDdlLDB4OTIsMHg3ZCwweDAwLDB4N2MsMHgwMCwweGFiLDB4MTR9fSwKKyB7MTYsMHgwMTgwLDAsezB4YWEsMHgxMywweGE5LDB4MTIsMHhhOCwweDExLDB4YzMsMHgxMiwweDAzLDB4ZWQsMHg1MCwweGRiLDB4MjAsMHgyMCwweGQ4LDB4N2F9fSwKKyB7MTYsMHgwMTkwLDAsezB4MDAsMHg3OSwweDAwLDB4NzgsMHgwMCwweGU1LDB4MTQsMHgyNCwweDAxLDB4ZjUsMHgxNCwweGVhLDB4MzUsMHgxMywweGY1LDB4MTN9fSwKKyB7MTYsMHgwMWEwLDAsezB4ZTksMHgzNSwweDEyLDB4ZjUsMHgxMiwweGU4LDB4MzUsMHgxMSwweGY1LDB4MTEsMHg4MCwweGNhLDB4MzAsMHgyMCwweGZkLDB4MTJ9fSwKKyB7MTYsMHgwMWIwLDAsezB4MDEsMHhjNywweDUwLDB4MDcsMHg5MCwweDdmLDB4YjQsMHhlMCwweDQ0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHhiNCwweGUwLDB4NDR9fSwKKyB7IDYsMHgwMWMwLDAsezB4MDIsMHhmMCwweGMyLDB4MjAsMHg4MCwweGU2fX0sCisgeyAxLDB4MDFjNiwwLHsweDIyfX0sCisgezE2LDB4MDFjNywwLHsweDkwLDB4N2YsMHhlOSwweGUwLDB4MjQsMHg1YiwweDYwLDB4NjAsMHgyNCwweDAyLDB4NjAsMHgwMywweDAyLDB4MDIsMHg4NSwweDkwfX0sCisgezE2LDB4MDFkNywwLHsweDdmLDB4ZWEsMHhlMCwweDc1LDB4MGEsMHgwMCwweGY1LDB4MGIsMHhhMywweGUwLDB4ZmUsMHhlNCwweGVlLDB4NDIsMHgwYSwweDkwfX0sCisgezE2LDB4MDFlNywwLHsweDdmLDB4ZWUsMHhlMCwweDc1LDB4MTUsMHgwMCwweGY1LDB4MTYsMHhhMywweGUwLDB4ZmUsMHhlNCwweGVlLDB4NDIsMHgxNSwweGU1fX0sCisgezE2LDB4MDFmNywwLHsweDE2LDB4NDUsMHgxNSwweDcwLDB4MDMsMHgwMiwweDAyLDB4ODUsMHhlNCwweDkwLDB4N2YsMHhjNSwweGYwLDB4OTAsMHg3ZiwweGI0fX0sCisgezE2LDB4MDIwNywwLHsweGUwLDB4MjAsMHhlMywweGY5LDB4OTAsMHg3ZiwweGM1LDB4ZTAsMHhmNSwweDBjLDB4MTIsMHgwMywweDEzLDB4YWYsMHgwYywweDdlfX0sCisgezE2LDB4MDIxNywwLHsweDAwLDB4ZWYsMHgyNSwweDBiLDB4ZjUsMHgwYiwweGVlLDB4MzUsMHgwYSwweGY1LDB4MGEsMHhjMywweGU1LDB4MTYsMHg5ZiwweGY1fX0sCisgezE2LDB4MDIyNywwLHsweDE2LDB4ZTUsMHgxNSwweDllLDB4ZjUsMHgxNSwweDgwLDB4YzcsMHg5MCwweDdmLDB4ZWEsMHhlMCwweDc1LDB4MGEsMHgwMCwweGY1fX0sCisgezE2LDB4MDIzNywwLHsweDBiLDB4YTMsMHhlMCwweGZlLDB4ZTQsMHhlZSwweDQyLDB4MGEsMHg5MCwweDdmLDB4ZWUsMHhlMCwweDc1LDB4MTUsMHgwMCwweGY1fX0sCisgezE2LDB4MDI0NywwLHsweDE2LDB4YTMsMHhlMCwweGZlLDB4ZTQsMHhlZSwweDQyLDB4MTUsMHhlNSwweDE2LDB4NDUsMHgxNSwweDYwLDB4MzAsMHhlNCwweDkwfX0sCisgezE2LDB4MDI1NywwLHsweDdmLDB4YzUsMHhmMCwweDkwLDB4N2YsMHhiNCwweGUwLDB4MjAsMHhlMywweGY5LDB4OTAsMHg3ZiwweGM1LDB4ZTAsMHhmNSwweDBjfX0sCisgezE2LDB4MDI2NywwLHsweDEyLDB4MDMsMHgyYiwweGFmLDB4MGMsMHg3ZSwweDAwLDB4ZWYsMHgyNSwweDBiLDB4ZjUsMHgwYiwweGVlLDB4MzUsMHgwYSwweGY1fX0sCisgezE1LDB4MDI3NywwLHsweDBhLDB4YzMsMHhlNSwweDE2LDB4OWYsMHhmNSwweDE2LDB4ZTUsMHgxNSwweDllLDB4ZjUsMHgxNSwweDgwLDB4Y2EsMHhjM319LAorIHsgMSwweDAyODYsMCx7MHgyMn19LAorIHsxMiwweDAyODcsMCx7MHg3OCwweDdmLDB4ZTQsMHhmNiwweGQ4LDB4ZmQsMHg3NSwweDgxLDB4MjksMHgwMiwweDAyLDB4Y2V9fSwKKyB7MTYsMHgwMjkzLDAsezB4MDIsMHgwMSwweDAwLDB4ZTQsMHg5MywweGEzLDB4ZjgsMHhlNCwweDkzLDB4YTMsMHg0MCwweDAzLDB4ZjYsMHg4MCwweDAxLDB4ZjJ9fSwKKyB7MTYsMHgwMmEzLDAsezB4MDgsMHhkZiwweGY0LDB4ODAsMHgyOSwweGU0LDB4OTMsMHhhMywweGY4LDB4NTQsMHgwNywweDI0LDB4MGMsMHhjOCwweGMzLDB4MzN9fSwKKyB7MTYsMHgwMmIzLDAsezB4YzQsMHg1NCwweDBmLDB4NDQsMHgyMCwweGM4LDB4ODMsMHg0MCwweDA0LDB4ZjQsMHg1NiwweDgwLDB4MDEsMHg0NiwweGY2LDB4ZGZ9fSwKKyB7MTYsMHgwMmMzLDAsezB4ZTQsMHg4MCwweDBiLDB4MDEsMHgwMiwweDA0LDB4MDgsMHgxMCwweDIwLDB4NDAsMHg4MCwweDkwLDB4MDQsMHg2ZSwweGU0LDB4N2V9fSwKKyB7MTYsMHgwMmQzLDAsezB4MDEsMHg5MywweDYwLDB4YmMsMHhhMywweGZmLDB4NTQsMHgzZiwweDMwLDB4ZTUsMHgwOSwweDU0LDB4MWYsMHhmZSwweGU0LDB4OTN9fSwKKyB7MTYsMHgwMmUzLDAsezB4YTMsMHg2MCwweDAxLDB4MGUsMHhjZiwweDU0LDB4YzAsMHgyNSwweGUwLDB4NjAsMHhhOCwweDQwLDB4YjgsMHhlNCwweDkzLDB4YTN9fSwKKyB7MTYsMHgwMmYzLDAsezB4ZmEsMHhlNCwweDkzLDB4YTMsMHhmOCwweGU0LDB4OTMsMHhhMywweGM4LDB4YzUsMHg4MiwweGM4LDB4Y2EsMHhjNSwweDgzLDB4Y2F9fSwKKyB7MTYsMHgwMzAzLDAsezB4ZjAsMHhhMywweGM4LDB4YzUsMHg4MiwweGM4LDB4Y2EsMHhjNSwweDgzLDB4Y2EsMHhkZiwweGU5LDB4ZGUsMHhlNywweDgwLDB4YmV9fSwKKyB7MTYsMHgwMzEzLDAsezB4ZTUsMHgwYywweGZmLDB4ZTUsMHgwYiwweGY1LDB4ODIsMHhlNSwweDBhLDB4ZjUsMHg4MywweDc1LDB4OTIsMHg3ZSwweDc0LDB4YzB9fSwKKyB7IDgsMHgwMzIzLDAsezB4ZjgsMHhlMiwweDA4LDB4ZjAsMHhhMywweGRmLDB4ZmEsMHgyMn19LAorIHsxNiwweDAzMmIsMCx7MHg5MCwweDdmLDB4OTYsMHg4NSwweDgzLDB4OTIsMHhhOCwweDgyLDB4NzksMHgwMiwweDkwLDB4MDAsMHgwMCwweGUwLDB4YjQsMHgwMH19LAorIHsxNiwweDAzM2IsMCx7MHgwZCwweDc0LDB4MDEsMHhmMCwweDkwLDB4N2YsMHg5NywweGUwLDB4NTQsMHg3ZiwweGYwLDB4NDQsMHg4MCwweGYwLDB4ZTUsMHgwY319LAorIHsxNiwweDAzNGIsMCx7MHhmZiwweDkwLDB4N2UsMHhjMCwweGUwLDB4ZjUsMHgyOCwweGU0LDB4YTIsMHg0NywweDMzLDB4ZjIsMHg2OSwweGYyLDB4ZTQsMHhhMn19LAorIHsxNiwweDAzNWIsMCx7MHg0NiwweDMzLDB4ZjIsMHg2OSwweGYyLDB4ZTQsMHhhMiwweDQ1LDB4MzMsMHhmMiwweDY5LDB4ZjIsMHhlNCwweGEyLDB4NDQsMHgzM319LAorIHsxNiwweDAzNmIsMCx7MHhmMiwweDY5LDB4ZjIsMHhlNCwweGEyLDB4NDMsMHgzMywweGYyLDB4NjksMHhmMiwweGU0LDB4YTIsMHg0MiwweDMzLDB4ZjIsMHg2OX19LAorIHsxNiwweDAzN2IsMCx7MHhmMiwweGU0LDB4YTIsMHg0MSwweDMzLDB4ZjIsMHg2OSwweGYyLDB4ZTQsMHhhMiwweDQwLDB4MzMsMHhmMiwweDY5LDB4ZjIsMHhhM319LAorIHsgMywweDAzOGIsMCx7MHhkZiwweGMyLDB4MjJ9fSwKKyB7MTYsMHgwMzhlLDAsezB4YzAsMHhlMCwweGMwLDB4ODMsMHhjMCwweDgyLDB4OTAsMHg3ZiwweGM0LDB4ZTQsMHhmMCwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2Z9fSwKKyB7MTEsMHgwMzllLDAsezB4YWIsMHg3NCwweDA0LDB4ZjAsMHhkMCwweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDAzYTksMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHhkMiwweDIwLDB4NTMsMHg5MSwweGVmLDB4OTAsMHg3ZiwweGFiLDB4NzQsMHgwMX19LAorIHsgOCwweDAzYjksMCx7MHhmMCwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZDAsMHhlMCwweDMyfX0sCisgezE2LDB4MDNjMSwwLHsweGMwLDB4ZTAsMHhjMCwweDgzLDB4YzAsMHg4MiwweDUzLDB4OTEsMHhlZiwweDkwLDB4N2YsMHhhYiwweDc0LDB4MDIsMHhmMCwweGQwfX0sCisgeyA2LDB4MDNkMSwwLHsweDgyLDB4ZDAsMHg4MywweGQwLDB4ZTAsMHgzMn19LAorIHsxNiwweDAzZDcsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDEwLDB4ZjAsMHhkMH19LAorIHsgNiwweDAzZTcsMCx7MHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHgwM2VkLDAsezB4ZWIsMHg5ZiwweGY1LDB4ZjAsMHhlYSwweDllLDB4NDIsMHhmMCwweGU5LDB4OWQsMHg0MiwweGYwLDB4ZTgsMHg5YywweDQ1LDB4ZjB9fSwKKyB7IDEsMHgwM2ZkLDAsezB4MjJ9fSwKKyB7IDEsMHgwM2ZlLDAsezB4MzJ9fSwKKyB7IDEsMHgwM2ZmLDAsezB4MzJ9fSwKKyB7MTYsMHgwNDAwLDAsezB4MDIsMHgwMywweGE5LDB4MDAsMHgwMiwweDAzLDB4YzEsMHgwMCwweDAyLDB4MDMsMHg4ZSwweDAwLDB4MDIsMHgwNCwweDU4LDB4MDB9fSwKKyB7MTYsMHgwNDEwLDAsezB4MDIsMHgwMywweGQ3LDB4MDAsMHgwMiwweDAzLDB4ZmUsMHgwMCwweDAyLDB4MDMsMHhmZiwweDAwLDB4MDIsMHgwNCwweDg0LDB4MDB9fSwKKyB7MTYsMHgwNDIwLDAsezB4MDIsMHgwNCwweDg1LDB4MDAsMHgwMiwweDA0LDB4ODYsMHgwMCwweDAyLDB4MDQsMHg4NywweDAwLDB4MDIsMHgwNCwweDg4LDB4MDB9fSwKKyB7MTYsMHgwNDMwLDAsezB4MDIsMHgwNCwweDg5LDB4MDAsMHgwMiwweDA0LDB4OGEsMHgwMCwweDAyLDB4MDQsMHg4YiwweDAwLDB4MDIsMHgwNCwweDhjLDB4MDB9fSwKKyB7MTYsMHgwNDQwLDAsezB4MDIsMHgwNCwweDhkLDB4MDAsMHgwMiwweDA0LDB4OGUsMHgwMCwweDAyLDB4MDQsMHg4ZiwweDAwLDB4MDIsMHgwNCwweDkwLDB4MDB9fSwKKyB7IDgsMHgwNDUwLDAsezB4MDIsMHgwNCwweDkxLDB4MDAsMHgwMiwweDA0LDB4OTIsMHgwMH19LAorIHsxNiwweDA0NTgsMCx7MHhjMCwweGUwLDB4YzAsMHg4MywweGMwLDB4ODIsMHg1MywweDkxLDB4ZWYsMHg5MCwweDdmLDB4YWIsMHg3NCwweDA4LDB4ZjAsMHhkMH19LAorIHsgNiwweDA0NjgsMCx7MHg4MiwweGQwLDB4ODMsMHhkMCwweGUwLDB4MzJ9fSwKKyB7MTYsMHgwNDZlLDAsezB4MDIsMHgwYSwweDAwLDB4MGYsMHgwMSwweDBjLDB4MTEsMHgwNCwweDBkLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MSwweDAwLDB4MDB9fSwKKyB7IDEsMHgwNDdlLDAsezB4MDB9fSwKKyB7IDQsMHgwNDdmLDAsezB4MDIsMHgxNywweDAwLDB4MDB9fSwKKyB7IDEsMHgwNDgzLDAsezB4MDB9fSwKKyB7IDEsMHgwNDg0LDAsezB4MzJ9fSwKKyB7IDEsMHgwNDg1LDAsezB4MzJ9fSwKKyB7IDEsMHgwNDg2LDAsezB4MzJ9fSwKKyB7IDEsMHgwNDg3LDAsezB4MzJ9fSwKKyB7IDEsMHgwNDg4LDAsezB4MzJ9fSwKKyB7IDEsMHgwNDg5LDAsezB4MzJ9fSwKKyB7IDEsMHgwNDhhLDAsezB4MzJ9fSwKKyB7IDEsMHgwNDhiLDAsezB4MzJ9fSwKKyB7IDEsMHgwNDhjLDAsezB4MzJ9fSwKKyB7IDEsMHgwNDhkLDAsezB4MzJ9fSwKKyB7IDEsMHgwNDhlLDAsezB4MzJ9fSwKKyB7IDEsMHgwNDhmLDAsezB4MzJ9fSwKKyB7IDEsMHgwNDkwLDAsezB4MzJ9fSwKKyB7IDEsMHgwNDkxLDAsezB4MzJ9fSwKKyB7IDEsMHgwNDkyLDAsezB4MzJ9fSwKKyB7MTYsMHgxMTAwLDAsezB4MTIsMHgwMSwweDEwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHg0MCwweDZhLDB4MDgsMHgwMSwweDAxLDB4MDAsMHgwMSwweDAxLDB4MDJ9fSwKKyB7MTYsMHgxMTEwLDAsezB4MDAsMHgwMSwweDA5LDB4MDIsMHgyMCwweDAwLDB4MDEsMHgwMSwweDAzLDB4YTAsMHgwMCwweDA5LDB4MDQsMHgwMCwweDAwLDB4MDJ9fSwKKyB7MTYsMHgxMTIwLDAsezB4ZmYsMHgwMCwweDAwLDB4MDQsMHgwNywweDA1LDB4ODIsMHgwMiwweDQwLDB4MDAsMHgwMCwweDA3LDB4MDUsMHgwMiwweDAyLDB4NDB9fSwKKyB7MTYsMHgxMTMwLDAsezB4MDAsMHgwMCwweDA0LDB4MDMsMHgwOSwweDA0LDB4MjYsMHgwMywweDQxLDB4MDAsMHg2ZSwweDAwLDB4NjMsMHgwMCwweDY4LDB4MDB9fSwKKyB7MTYsMHgxMTQwLDAsezB4NmYsMHgwMCwweDcyLDB4MDAsMHgyMCwweDAwLDB4NDMsMHgwMCwweDY4LDB4MDAsMHg2OSwweDAwLDB4NzAsMHgwMCwweDczLDB4MDB9fSwKKyB7MTYsMHgxMTUwLDAsezB4MmMsMHgwMCwweDIwLDB4MDAsMHg0OSwweDAwLDB4NmUsMHgwMCwweDYzLDB4MDAsMHgyZSwweDAwLDB4MjgsMHgwMywweDQ2LDB4MDB9fSwKKyB7MTYsMHgxMTYwLDAsezB4NjksMHgwMCwweDcyLDB4MDAsMHg2ZCwweDAwLDB4NzcsMHgwMCwweDYxLDB4MDAsMHg3MiwweDAwLDB4NjUsMHgwMCwweDIwLDB4MDB9fSwKKyB7MTYsMHgxMTcwLDAsezB4NDYsMHgwMCwweDcyLDB4MDAsMHg2MSwweDAwLDB4NmQsMHgwMCwweDY1LDB4MDAsMHg1NywweDAwLDB4NmYsMHgwMCwweDcyLDB4MDB9fSwKKyB7MTYsMHgxMTgwLDAsezB4NmIsMHgwMCwweDczLDB4MDAsMHgyYSwweDAzLDB4NDMsMHgwMCwweDZmLDB4MDAsMHg2ZSwweDAwLDB4NjYsMHgwMCwweDY5LDB4MDB9fSwKKyB7MTYsMHgxMTkwLDAsezB4NjcsMHgwMCwweDc1LDB4MDAsMHg3MiwweDAwLDB4NjEsMHgwMCwweDc0LDB4MDAsMHg2OSwweDAwLDB4NmYsMHgwMCwweDZlLDB4MDB9fSwKKyB7MTYsMHgxMWEwLDAsezB4MjAsMHgwMCwweDUzLDB4MDAsMHg3NCwweDAwLDB4NzIsMHgwMCwweDY5LDB4MDAsMHg2ZSwweDAwLDB4NjcsMHgwMCwweDIyLDB4MDN9fSwKKyB7MTYsMHgxMWIwLDAsezB4NDksMHgwMCwweDZlLDB4MDAsMHg3NCwweDAwLDB4NjUsMHgwMCwweDcyLDB4MDAsMHg2NiwweDAwLDB4NjEsMHgwMCwweDYzLDB4MDB9fSwKKyB7MTYsMHgxMWMwLDAsezB4NjUsMHgwMCwweDIwLDB4MDAsMHg1MywweDAwLDB4NzQsMHgwMCwweDcyLDB4MDAsMHg2OSwweDAwLDB4NmUsMHgwMCwweDY3LDB4MDB9fSwKKyB7IDIsMHgxMWQwLDAsezB4MDAsMHgwMH19LAorIHsgMCwweDAwMDAsMSx7MH19Cit9OworLyogU291cmNlOiBFTUlMT0FELkhFWCAKKzoxMDA0NkUwMDAyMEEwMDBGMDEwQzExMDQwRDAwMDAwMDAwNDEwMDAwRjMKKzowMTA0N0UwMDAwN0QKKzoxMDAxQzcwMDkwN0ZFOUUwMjQ1QjYwNjAyNDAyNjAwMzAyMDI4NTkwNkYKKzoxMDAxRDcwMDdGRUFFMDc1MEEwMEY1MEJBM0UwRkVFNEVFNDIwQTkwMjEKKzoxMDAxRTcwMDdGRUVFMDc1MTUwMEY1MTZBM0UwRkVFNEVFNDIxNUU1OTcKKzoxMDAxRjcwMDE2NDUxNTcwMDMwMjAyODVFNDkwN0ZDNUYwOTA3RkI0MjEKKzoxMDAyMDcwMEUwMjBFM0Y5OTA3RkM1RTBGNTBDMTIwMzEzQUYwQzdFRjUKKzoxMDAyMTcwMDAwRUYyNTBCRjUwQkVFMzUwQUY1MEFDM0U1MTY5RkY1M0EKKzoxMDAyMjcwMDE2RTUxNTlFRjUxNTgwQzc5MDdGRUFFMDc1MEEwMEY1N0IKKzoxMDAyMzcwMDBCQTNFMEZFRTRFRTQyMEE5MDdGRUVFMDc1MTUwMEY1QjEKKzoxMDAyNDcwMDE2QTNFMEZFRTRFRTQyMTVFNTE2NDUxNTYwMzBFNDkwOEUKKzoxMDAyNTcwMDdGQzVGMDkwN0ZCNEUwMjBFM0Y5OTA3RkM1RTBGNTBDMEYKKzoxMDAyNjcwMDEyMDMyQkFGMEM3RTAwRUYyNTBCRjUwQkVFMzUwQUY1Q0QKKzowRjAyNzcwMDBBQzNFNTE2OUZGNTE2RTUxNTlFRjUxNTgwQ0FDMzU3Cis6MDEwMjg2MDAyMjU1Cis6MTAwM0E5MDBDMEUwQzA4M0MwODJEMjIwNTM5MUVGOTA3RkFCNzQwMTJCCis6MDgwM0I5MDBGMEQwODJEMDgzRDBFMDMyQzUKKzoxMDAzOEUwMEMwRTBDMDgzQzA4MjkwN0ZDNEU0RjA1MzkxRUY5MDdGQjEKKzowQjAzOUUwMEFCNzQwNEYwRDA4MkQwODNEMEUwMzJCQQorOjEwMDNDMTAwQzBFMEMwODNDMDgyNTM5MUVGOTA3RkFCNzQwMkYwRDA0NAorOjA2MDNEMTAwODJEMDgzRDBFMDMyNkYKKzoxMDAzRDcwMEMwRTBDMDgzQzA4MjUzOTFFRjkwN0ZBQjc0MTBGMEQwMjAKKzowNjAzRTcwMDgyRDA4M0QwRTAzMjU5Cis6MDEwM0ZFMDAzMkNDCis6MTAwNDU4MDBDMEUwQzA4M0MwODI1MzkxRUY5MDdGQUI3NDA4RjBEMEE2Cis6MDYwNDY4MDA4MkQwODNEMEUwMzJENworOjAxMDNGRjAwMzJDQgorOjAxMDQ4NDAwMzI0NQorOjAxMDQ4NTAwMzI0NAorOjAxMDQ4NjAwMzI0MworOjAxMDQ4NzAwMzI0MgorOjAxMDQ4ODAwMzI0MQorOjAxMDQ4OTAwMzI0MAorOjAxMDQ4QTAwMzIzRgorOjAxMDQ4QjAwMzIzRQorOjAxMDQ4QzAwMzIzRAorOjAxMDQ4RDAwMzIzQworOjAxMDQ4RTAwMzIzQgorOjAxMDQ4RjAwMzIzQQorOjAxMDQ5MDAwMzIzOQorOjAxMDQ5MTAwMzIzOAorOjAxMDQ5MjAwMzIzNworOjA0MDQ3RjAwMDIxNzAwMDA2MAorOjEwMDEwMDAwRTRGRkZFQzIyMEQyRTg0M0Q4MjA5MDdGQUI3NEZGRjAxQQorOjEwMDExMDAwOTA3RkE5RjA5MDdGQUFGMDUzOTFFRjkwN0Y5NTc0QzBFMworOjEwMDEyMDAwRjA5MDdGOUVGMDkwN0Y5OEYwRTQ5MDdGOTRGMDkwN0YyNQorOjEwMDEzMDAwOUQ3NEZGRjA5MDdGOTc3NEEwRjA5MDdGOTNFMDU0RkM0MworOjEwMDE0MDAwRjA5MDdGOUM3NDAzRjBFNDkwN0Y5NkYwOTA3RkFGRTA5NgorOjEwMDE1MDAwNDQwMUYwOTA3RkFFRTA0NDBERjBEMkFGMEZCRjAwMDEzQworOjEwMDE2MDAwMEVCRTA3RjhCRjA4RjUyMDIwNDI3NTE0MDA3NTEzMDA3NQorOjEwMDE3MDAwNzUxMjAwNzUxMTAwN0Y0ODdFOTI3RDAwN0MwMEFCMTRFMworOjEwMDE4MDAwQUExM0E5MTJBODExQzMxMjAzRUQ1MERCMjAyMEQ4N0FCQworOjEwMDE5MDAwMDA3OTAwNzgwMEU1MTQyNDAxRjUxNEVBMzUxM0Y1MTMwRAorOjEwMDFBMDAwRTkzNTEyRjUxMkU4MzUxMUY1MTE4MENBMzAyMEZEMTIzQgorOjEwMDFCMDAwMDFDNzUwMDc5MDdGQjRFMDQ0MDFGMDkwN0ZCNEUwNDQ2MQorOjA2MDFDMDAwMDJGMEMyMjA4MEU2RkYKKzowMTAxQzYwMDIyMTYKKzoxMDExMDAwMDEyMDExMDAxMDAwMDAwNDA2QTA4MDEwMTAwMDEwMTAyMDMKKzoxMDExMTAwMDAwMDEwOTAyMjAwMDAxMDEwM0EwMDAwOTA0MDAwMDAyRUYKKzoxMDExMjAwMEZGMDAwMDA0MDcwNTgyMDI0MDAwMDAwNzA1MDIwMjQwOUMKKzoxMDExMzAwMDAwMDAwNDAzMDkwNDI2MDM0MTAwNkUwMDYzMDA2ODAwRjgKKzoxMDExNDAwMDZGMDA3MjAwMjAwMDQzMDA2ODAwNjkwMDcwMDA3MzAwQTcKKzoxMDExNTAwMDJDMDAyMDAwNDkwMDZFMDA2MzAwMkUwMDI4MDM0NjAwOEEKKzoxMDExNjAwMDY5MDA3MjAwNkQwMDc3MDA2MTAwNzIwMDY1MDAyMDAwNjgKKzoxMDExNzAwMDQ2MDA3MjAwNjEwMDZEMDA2NTAwNTcwMDZGMDA3MjAwNEMKKzoxMDExODAwMDZCMDA3MzAwMkEwMzQzMDA2RjAwNkUwMDY2MDA2OTAwNjUKKzoxMDExOTAwMDY3MDA3NTAwNzIwMDYxMDA3NDAwNjkwMDZGMDA2RTAwRTYKKzoxMDExQTAwMDIwMDA1MzAwNzQwMDcyMDA2OTAwNkUwMDY3MDAyMjAzODMKKzoxMDExQjAwMDQ5MDA2RTAwNzQwMDY1MDA3MjAwNjYwMDYxMDA2MzAwMDMKKzoxMDExQzAwMDY1MDAyMDAwNTMwMDc0MDA3MjAwNjkwMDZFMDA2NzAwMjMKKzowMjExRDAwMDAwMDAxRAorOjEwMDMxMzAwRTUwQ0ZGRTUwQkY1ODJFNTBBRjU4Mzc1OTI3RTc0QzA2MworOjA4MDMyMzAwRjhFMjA4RjBBM0RGRkEyMjYyCis6MTAwMzJCMDA5MDdGOTY4NTgzOTJBODgyNzkwMjkwMDAwMEUwQjQwMEJBCis6MTAwMzNCMDAwRDc0MDFGMDkwN0Y5N0UwNTQ3RkYwNDQ4MEYwRTUwQzUyCis6MTAwMzRCMDBGRjkwN0VDMEUwRjUyOEU0QTI0NzMzRjI2OUYyRTRBMjA1Cis6MTAwMzVCMDA0NjMzRjI2OUYyRTRBMjQ1MzNGMjY5RjJFNEEyNDQzMzg0Cis6MTAwMzZCMDBGMjY5RjJFNEEyNDMzM0YyNjlGMkU0QTI0MjMzRjI2OTk2Cis6MTAwMzdCMDBGMkU0QTI0MTMzRjI2OUYyRTRBMjQwMzNGMjY5RjJBMzUwCis6MDMwMzhCMDBERkMyMjJBQworOjAzMDA0MzAwMDIwNDAwQjQKKzoxMDA0MDAwMDAyMDNBOTAwMDIwM0MxMDAwMjAzOEUwMDAyMDQ1ODAwODcKKzoxMDA0MTAwMDAyMDNENzAwMDIwM0ZFMDAwMjAzRkYwMDAyMDQ4NDAwNkYKKzoxMDA0MjAwMDAyMDQ4NTAwMDIwNDg2MDAwMjA0ODcwMDAyMDQ4ODAwOUEKKzoxMDA0MzAwMDAyMDQ4OTAwMDIwNDhBMDAwMjA0OEIwMDAyMDQ4QzAwN0EKKzoxMDA0NDAwMDAyMDQ4RDAwMDIwNDhFMDAwMjA0OEYwMDAyMDQ5MDAwNUEKKzowODA0NTAwMDAyMDQ5MTAwMDIwNDkyMDA3NQorOjAzMDAwMDAwMDIwMjg3NzIKKzowQzAyODcwMDc4N0ZFNEY2RDhGRDc1ODEyOTAyMDJDRUQ0Cis6MTAwM0VEMDBFQjlGRjVGMEVBOUU0MkYwRTk5RDQyRjBFODlDNDVGMDY2Cis6MDEwM0ZEMDAyMkRECis6MTAwMjkzMDAwMjAxMDBFNDkzQTNGOEU0OTNBMzQwMDNGNjgwMDFGMjgwCis6MTAwMkEzMDAwOERGRjQ4MDI5RTQ5M0EzRjg1NDA3MjQwQ0M4QzMzMzZDCis6MTAwMkIzMDBDNDU0MEY0NDIwQzg4MzQwMDRGNDU2ODAwMTQ2RjZERjNCCis6MTAwMkMzMDBFNDgwMEIwMTAyMDQwODEwMjA0MDgwOTAwNDZFRTQ3RTU5Cis6MTAwMkQzMDAwMTkzNjBCQ0EzRkY1NDNGMzBFNTA5NTQxRkZFRTQ5MzMwCis6MTAwMkUzMDBBMzYwMDEwRUNGNTRDMDI1RTA2MEE4NDBCOEU0OTNBM0Y3Cis6MTAwMkYzMDBGQUU0OTNBM0Y4RTQ5M0EzQzhDNTgyQzhDQUM1ODNDQTIyCis6MTAwMzAzMDBGMEEzQzhDNTgyQzhDQUM1ODNDQURGRTlERUU3ODBCRUQ5Cis6MDEwNDgzMDAwMDc4Cis6MDAwMDAwMDFGRgorKi8KKy8qCitWRVJTSU9OPTEuMC4yLjAwMgorREFURT0xMC4wMS4yMDAyCitFTUkyNl82MgorKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jIGIvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UwMzBkMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jCkBAIC0wLDAgKzEsNDQzIEBACisvKiBTaWVtZW5zIElEIE1vdXNlIGRyaXZlciB2MC41CisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBDb3B5cmlnaHQgKEMpIDIwMDQtNSBieSBGbG9yaWFuICdGbG9lJyBFY2h0bGVyICA8ZWNodGxlckBmcy50dW0uZGU+CisgICAgICAgICAgICAgICAgICAgICAgYW5kIEFuZHJlYXMgICdhZCcgIERlcmVzY2ggPGFkZXJlc2NoQGZzLnR1bS5kZT4KKworICBEZXJpdmVkIGZyb20gdGhlIFVTQiBTa2VsZXRvbiBkcml2ZXIgMS4xLAorICBDb3B5cmlnaHQgKEMpIDIwMDMgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKworKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNkZWZpbmUgV0lEVEggMjI1CisjZGVmaW5lIEhFSUdIVCAyODgKKyNkZWZpbmUgSEVBREVSICJQNSAyMjUgMjg4IDI1NSAiCisjZGVmaW5lIElNR1NJWkUgKChXSURUSCAqIEhFSUdIVCkgKyBzaXplb2YoSEVBREVSKS0xKQorCisvKiBWZXJzaW9uIEluZm9ybWF0aW9uICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIwLjUiCisjZGVmaW5lIERSSVZFUl9TSE9SVCAgICJpZG1vdXNlIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICAiRmxvcmlhbiAnRmxvZScgRWNodGxlciA8ZWNodGxlckBmcy50dW0uZGU+IgorI2RlZmluZSBEUklWRVJfREVTQyAgICAiU2llbWVucyBJRCBNb3VzZSBGaW5nZXJUSVAgU2Vuc29yIERyaXZlciIKKworLyogU2llbWVucyBJRCBNb3VzZSAqLworI2RlZmluZSBVU0JfSURNT1VTRV9WRU5ET1JfSUQgIDB4MDY4MQorI2RlZmluZSBVU0JfSURNT1VTRV9QUk9EVUNUX0lEIDB4MDAwNQorCisvKiB3ZSBzdGlsbCBuZWVkIGEgbWlub3IgbnVtYmVyICovCisjZGVmaW5lIFVTQl9JRE1PVVNFX01JTk9SX0JBU0UgMTMyCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZG1vdXNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoVVNCX0lETU9VU0VfVkVORE9SX0lELCBVU0JfSURNT1VTRV9QUk9EVUNUX0lEKX0sCisJe30gLyogbnVsbCBlbnRyeSBhdCB0aGUgZW5kICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRtb3VzZV90YWJsZSk7CisKKy8qIHN0cnVjdHVyZSB0byBob2xkIGFsbCBvZiBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmICovCitzdHJ1Y3QgdXNiX2lkbW91c2UgeworCisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7IC8qIHNhdmUgb2ZmIHRoZSB1c2IgZGV2aWNlIHBvaW50ZXIgKi8KKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOyAvKiB0aGUgaW50ZXJmYWNlIGZvciB0aGlzIGRldmljZSAqLworCisJdW5zaWduZWQgY2hhciAqYnVsa19pbl9idWZmZXI7IC8qIHRoZSBidWZmZXIgdG8gcmVjZWl2ZSBkYXRhICovCisJc2l6ZV90IGJ1bGtfaW5fc2l6ZTsgLyogdGhlIHNpemUgb2YgdGhlIHJlY2VpdmUgYnVmZmVyICovCisJX191OCBidWxrX2luX2VuZHBvaW50QWRkcjsgLyogdGhlIGFkZHJlc3Mgb2YgdGhlIGJ1bGsgaW4gZW5kcG9pbnQgKi8KKworCWludCBvcGVuOyAvKiBpZiB0aGUgcG9ydCBpcyBvcGVuIG9yIG5vdCAqLworCWludCBwcmVzZW50OyAvKiBpZiB0aGUgZGV2aWNlIGlzIG5vdCBkaXNjb25uZWN0ZWQgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsgLyogbG9ja3MgdGhpcyBzdHJ1Y3R1cmUgKi8KKworfTsKKworLyogbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLworc3RhdGljIHNzaXplX3QgaWRtb3VzZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcyk7CisKK3N0YXRpYyBpbnQgaWRtb3VzZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgaWRtb3VzZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKKworc3RhdGljIGludCBpZG1vdXNlX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKKworc3RhdGljIHZvaWQgaWRtb3VzZV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOworCisvKiBmaWxlIG9wZXJhdGlvbiBwb2ludGVycyAqLworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaWRtb3VzZV9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5yZWFkID0gaWRtb3VzZV9yZWFkLAorCS5vcGVuID0gaWRtb3VzZV9vcGVuLAorCS5yZWxlYXNlID0gaWRtb3VzZV9yZWxlYXNlLAorfTsKKworLyogY2xhc3MgZHJpdmVyIGluZm9ybWF0aW9uIGZvciBkZXZmcyAqLworc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIGlkbW91c2VfY2xhc3MgPSB7CisJLm5hbWUgPSAidXNiL2lkbW91c2UlZCIsCisJLmZvcHMgPSAmaWRtb3VzZV9mb3BzLAorCS5tb2RlID0gU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JUk9USCwgLyogZmlsZW1vZGUgKGNoYXIsIDQ0NCkgKi8KKwkubWlub3JfYmFzZSA9IFVTQl9JRE1PVVNFX01JTk9SX0JBU0UsCit9OworCisvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSB1c2Igc3Vic3lzdGVtICovCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaWRtb3VzZV9kcml2ZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSBEUklWRVJfU0hPUlQsCisJLnByb2JlID0gaWRtb3VzZV9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGlkbW91c2VfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBpZG1vdXNlX3RhYmxlLAorfTsKKworLy8gcHJldmVudCByYWNlcyBiZXR3ZWVuIG9wZW4oKSBhbmQgZGlzY29ubmVjdCgpCitzdGF0aWMgREVDTEFSRV9NVVRFWChkaXNjb25uZWN0X3NlbSk7CisKK3N0YXRpYyBpbnQgaWRtb3VzZV9jcmVhdGVfaW1hZ2Uoc3RydWN0IHVzYl9pZG1vdXNlICpkZXYpCit7CisJaW50IGJ5dGVzX3JlYWQgPSAwOworCWludCBidWxrX3JlYWQgPSAwOworCWludCByZXN1bHQgPSAwOworCisJaWYgKGRldi0+YnVsa19pbl9zaXplIDwgc2l6ZW9mKEhFQURFUikpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtY3B5KGRldi0+YnVsa19pbl9idWZmZXIsSEVBREVSLHNpemVvZihIRUFERVIpLTEpOworCWJ5dGVzX3JlYWQgKz0gc2l6ZW9mKEhFQURFUiktMTsKKworCS8qIER1bXAgdGhlIHNldHVwIHBhY2tldHMuIFllcywgdGhleSBhcmUgdW5jb21tZW50ZWQsIHNpbXBseSAKKwkgICBiZWNhdXNlIHRoZXkgd2VyZSBzbmlmZmVkIHVuZGVyIFdpbmRvd3MgdXNpbmcgU25vb3B5UHJvLgorCSAgIEkgX2d1ZXNzXyB0aGF0IDB4MjIgaXMgYSBraW5kIG9mIHJlc2V0IGNvbW1hbmQgYW5kIDB4MjEgCisJICAgbWVhbnMgaW5pdC4uCisJKi8KKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKGRldi0+dWRldiwgdXNiX3NuZGN0cmxwaXBlIChkZXYtPnVkZXYsIDApLAorCQkJCTB4MjEsIDB4NDIsIDB4MDAwMSwgMHgwMDAyLCBOVUxMLCAwLCAxMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKGRldi0+dWRldiwgdXNiX3NuZGN0cmxwaXBlIChkZXYtPnVkZXYsIDApLAorCQkJCTB4MjAsIDB4NDIsIDB4MDAwMSwgMHgwMDAyLCBOVUxMLCAwLCAxMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKGRldi0+dWRldiwgdXNiX3NuZGN0cmxwaXBlIChkZXYtPnVkZXYsIDApLAorCQkJCTB4MjIsIDB4NDIsIDB4MDAwMCwgMHgwMDAyLCBOVUxMLCAwLCAxMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoZGV2LT51ZGV2LCB1c2Jfc25kY3RybHBpcGUgKGRldi0+dWRldiwgMCksCisJCQkJMHgyMSwgMHg0MiwgMHgwMDAxLCAweDAwMDIsIE5VTEwsIDAsIDEwMDApOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoZGV2LT51ZGV2LCB1c2Jfc25kY3RybHBpcGUgKGRldi0+dWRldiwgMCksCisJCQkJMHgyMCwgMHg0MiwgMHgwMDAxLCAweDAwMDIsIE5VTEwsIDAsIDEwMDApOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoZGV2LT51ZGV2LCB1c2Jfc25kY3RybHBpcGUgKGRldi0+dWRldiwgMCksCisJCQkJMHgyMCwgMHg0MiwgMHgwMDAwLCAweDAwMDIsIE5VTEwsIDAsIDEwMDApOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OworCisJLyogbG9vcCBvdmVyIGEgYmxvY2tpbmcgYnVsayByZWFkIHRvIGdldCBkYXRhIGZyb20gdGhlIGRldmljZSAqLworCXdoaWxlIChieXRlc19yZWFkIDwgSU1HU0laRSkgeworCQlyZXN1bHQgPSB1c2JfYnVsa19tc2cgKGRldi0+dWRldiwKKwkJCQl1c2JfcmN2YnVsa3BpcGUgKGRldi0+dWRldiwgZGV2LT5idWxrX2luX2VuZHBvaW50QWRkciksCisJCQkJZGV2LT5idWxrX2luX2J1ZmZlciArIGJ5dGVzX3JlYWQsCisJCQkJZGV2LT5idWxrX2luX3NpemUsICZidWxrX3JlYWQsIDUwMDApOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCXJldHVybiByZXN1bHQ7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCXJldHVybiAtRUlOVFI7CisJCWJ5dGVzX3JlYWQgKz0gYnVsa19yZWFkOworCX0KKworCS8qIHJlc2V0IHRoZSBkZXZpY2UgKi8KKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cgKGRldi0+dWRldiwgdXNiX3NuZGN0cmxwaXBlIChkZXYtPnVkZXYsIDApLAorCQkJCTB4MjIsIDB4NDIsIDB4MDAwMCwgMHgwMDAyLCBOVUxMLCAwLCAxMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCS8qIHNob3VsZCBiZSBJTUdTSVpFID09IDY0ODE1ICovCisJZGJnKCJyZWFkICVkIGJ5dGVzIGZpbmdlcnByaW50IGRhdGEiLCBieXRlc19yZWFkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlkbW91c2VfZGVsZXRlKHN0cnVjdCB1c2JfaWRtb3VzZSAqZGV2KQoreworCWtmcmVlKGRldi0+YnVsa19pbl9idWZmZXIpOworCWtmcmVlKGRldik7Cit9CisKK3N0YXRpYyBpbnQgaWRtb3VzZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2JfaWRtb3VzZSAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCWludCByZXN1bHQgPSAwOworCisJLyogcHJldmVudCBkaXNjb25uZWN0cyAqLworCWRvd24oJmRpc2Nvbm5lY3Rfc2VtKTsKKworCS8qIGdldCB0aGUgaW50ZXJmYWNlIGZyb20gbWlub3IgbnVtYmVyIGFuZCBkcml2ZXIgaW5mb3JtYXRpb24gKi8KKwlpbnRlcmZhY2UgPSB1c2JfZmluZF9pbnRlcmZhY2UgKCZpZG1vdXNlX2RyaXZlciwgaW1pbm9yIChpbm9kZSkpOworCWlmICghaW50ZXJmYWNlKSB7CisJCXVwKCZkaXNjb25uZWN0X3NlbSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwkvKiBnZXQgdGhlIGRldmljZSBpbmZvcm1hdGlvbiBibG9jayBmcm9tIHRoZSBpbnRlcmZhY2UgKi8KKwlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJaWYgKCFkZXYpIHsKKwkJdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogbG9jayB0aGlzIGRldmljZSAqLworCWRvd24oJmRldi0+c2VtKTsKKworCS8qIGNoZWNrIGlmIGFscmVhZHkgb3BlbiAqLworCWlmIChkZXYtPm9wZW4pIHsKKworCQkvKiBhbHJlYWR5IG9wZW4sIHNvIGZhaWwgKi8KKwkJcmVzdWx0ID0gLUVCVVNZOworCisJfSBlbHNlIHsKKworCQkvKiBjcmVhdGUgYSBuZXcgaW1hZ2UgYW5kIGNoZWNrIGZvciBzdWNjZXNzICovCisJCXJlc3VsdCA9IGlkbW91c2VfY3JlYXRlX2ltYWdlIChkZXYpOworCQlpZiAocmVzdWx0KQorCQkJZ290byBlcnJvcjsKKworCQkvKiBpbmNyZW1lbnQgb3VyIHVzYWdlIGNvdW50IGZvciB0aGUgZHJpdmVyICovCisJCSsrZGV2LT5vcGVuOworCisJCS8qIHNhdmUgb3VyIG9iamVjdCBpbiB0aGUgZmlsZSdzIHByaXZhdGUgc3RydWN0dXJlICovCisJCWZpbGUtPnByaXZhdGVfZGF0YSA9IGRldjsKKworCX0gCisKK2Vycm9yOgorCisJLyogdW5sb2NrIHRoaXMgZGV2aWNlICovCisJdXAoJmRldi0+c2VtKTsKKworCS8qIHVubG9jayB0aGUgZGlzY29ubmVjdCBzZW1hcGhvcmUgKi8KKwl1cCgmZGlzY29ubmVjdF9zZW0pOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgaWRtb3VzZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2JfaWRtb3VzZSAqZGV2OworCisJLyogcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIHdpdGggb3BlbigpICovCisJZG93bigmZGlzY29ubmVjdF9zZW0pOworCisJZGV2ID0gKHN0cnVjdCB1c2JfaWRtb3VzZSAqKSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogbG9jayBvdXIgZGV2aWNlICovCisJZG93bigmZGV2LT5zZW0pOworCisJLyogYXJlIHdlIHJlYWxseSBvcGVuPyAqLworCWlmIChkZXYtPm9wZW4gPD0gMCkgeworCQl1cCgmZGV2LT5zZW0pOworCQl1cCgmZGlzY29ubmVjdF9zZW0pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwktLWRldi0+b3BlbjsKKworCWlmICghZGV2LT5wcmVzZW50KSB7CisJCS8qIHRoZSBkZXZpY2Ugd2FzIHVucGx1Z2dlZCBiZWZvcmUgdGhlIGZpbGUgd2FzIHJlbGVhc2VkICovCisJCXVwKCZkZXYtPnNlbSk7CisJCWlkbW91c2VfZGVsZXRlKGRldik7CisJCXVwKCZkaXNjb25uZWN0X3NlbSk7CisJCXJldHVybiAwOworCX0KKworCXVwKCZkZXYtPnNlbSk7CisJdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgaWRtb3VzZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsCisJCQkJbG9mZl90ICogcHBvcykKK3sKKwlzdHJ1Y3QgdXNiX2lkbW91c2UgKmRldjsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWRldiA9IChzdHJ1Y3QgdXNiX2lkbW91c2UgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJLy8gbG9jayB0aGlzIG9iamVjdAorCWRvd24gKCZkZXYtPnNlbSk7CisKKwkvLyB2ZXJpZnkgdGhhdCB0aGUgZGV2aWNlIHdhc24ndCB1bnBsdWdnZWQKKwlpZiAoIWRldi0+cHJlc2VudCkgeworCQl1cCAoJmRldi0+c2VtKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCpwcG9zID49IElNR1NJWkUpIHsKKwkJdXAgKCZkZXYtPnNlbSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChjb3VudCA+IElNR1NJWkUgLSAqcHBvcykKKwkJY291bnQgPSBJTUdTSVpFIC0gKnBwb3M7CisKKwlpZiAoY29weV90b191c2VyIChidWZmZXIsIGRldi0+YnVsa19pbl9idWZmZXIgKyAqcHBvcywgY291bnQpKSB7CisJCXJlc3VsdCA9IC1FRkFVTFQ7CisJfSBlbHNlIHsKKwkJcmVzdWx0ID0gY291bnQ7CisJCSpwcG9zICs9IGNvdW50OworCX0KKworCS8vIHVubG9jayB0aGUgZGV2aWNlIAorCXVwKCZkZXYtPnNlbSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBpZG1vdXNlX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCXN0cnVjdCB1c2JfaWRtb3VzZSAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc2l6ZV90IGJ1ZmZlcl9zaXplOworCWludCByZXN1bHQ7CisKKwkvKiBjaGVjayBpZiB3ZSBoYXZlIGdvdHRlbiB0aGUgZGF0YSBvciB0aGUgaGlkIGludGVyZmFjZSAqLworCWlmYWNlX2Rlc2MgPSAmaW50ZXJmYWNlLT5hbHRzZXR0aW5nWzBdOworCWlmIChpZmFjZV9kZXNjLT5kZXNjLmJJbnRlcmZhY2VDbGFzcyAhPSAweDBBKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLworCWRldiA9IGttYWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChkZXYsIDB4MDAsIHNpemVvZigqZGV2KSk7CisKKwlpbml0X01VVEVYKCZkZXYtPnNlbSk7CisJZGV2LT51ZGV2ID0gdWRldjsKKwlkZXYtPmludGVyZmFjZSA9IGludGVyZmFjZTsKKworCS8qIHNldCB1cCB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24gLSB1c2Ugb25seSB0aGUgZmlyc3QgYnVsay1pbiBlbmRwb2ludCAqLworCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50WzBdLmRlc2M7CisJaWYgKCFkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyCisJCSYmIChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pCisJCSYmICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQorCQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSkgeworCisJCS8qIHdlIGZvdW5kIGEgYnVsayBpbiBlbmRwb2ludCAqLworCQlidWZmZXJfc2l6ZSA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7CisJCWRldi0+YnVsa19pbl9zaXplID0gYnVmZmVyX3NpemU7CisJCWRldi0+YnVsa19pbl9lbmRwb2ludEFkZHIgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJZGV2LT5idWxrX2luX2J1ZmZlciA9CisJCQlrbWFsbG9jKElNR1NJWkUgKyBidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFkZXYtPmJ1bGtfaW5fYnVmZmVyKSB7CisJCQllcnIoIlVuYWJsZSB0byBhbGxvY2F0ZSBpbnB1dCBidWZmZXIuIik7CisJCQlpZG1vdXNlX2RlbGV0ZShkZXYpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwlpZiAoIShkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSkgeworCQllcnIoIlVuYWJsZSB0byBmaW5kIGJ1bGstaW4gZW5kcG9pbnQuIik7CisJCWlkbW91c2VfZGVsZXRlKGRldik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwkvKiBhbGxvdyBkZXZpY2UgcmVhZCwgd3JpdGUgYW5kIGlvY3RsICovCisJZGV2LT5wcmVzZW50ID0gMTsKKworCS8qIHdlIGNhbiByZWdpc3RlciB0aGUgZGV2aWNlIG5vdywgYXMgaXQgaXMgcmVhZHkgKi8KKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgZGV2KTsKKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGVyZmFjZSwgJmlkbW91c2VfY2xhc3MpOworCWlmIChyZXN1bHQpIHsKKwkJLyogc29tZXRoaW5nIHByZXZlbnRlZCB1cyBmcm9tIHJlZ2lzdGVyaW5nIHRoaXMgZGV2aWNlICovCisJCWVycigiVW5ibGUgdG8gYWxsb2NhdGUgbWlub3IgbnVtYmVyLiIpOworCQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisJCWlkbW91c2VfZGVsZXRlKGRldik7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyogYmUgbm9pc3kgKi8KKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsIiVzIG5vdyBhdHRhY2hlZFxuIixEUklWRVJfREVTQyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaWRtb3VzZV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9pZG1vdXNlICpkZXY7CisKKwkvKiBwcmV2ZW50IHJhY2VzIHdpdGggb3BlbigpICovCisJZG93bigmZGlzY29ubmVjdF9zZW0pOworCisJLyogZ2V0IGRldmljZSBzdHJ1Y3R1cmUgKi8KKwlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCisJLyogbG9jayBpdCAqLworCWRvd24oJmRldi0+c2VtKTsKKworCS8qIGdpdmUgYmFjayBvdXIgbWlub3IgKi8KKwl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZXJmYWNlLCAmaWRtb3VzZV9jbGFzcyk7CisKKwkvKiBwcmV2ZW50IGRldmljZSByZWFkLCB3cml0ZSBhbmQgaW9jdGwgKi8KKwlkZXYtPnByZXNlbnQgPSAwOworCisJLyogdW5sb2NrICovCisJdXAoJmRldi0+c2VtKTsKKworCS8qIGlmIHRoZSBkZXZpY2UgaXMgb3BlbmVkLCBpZG1vdXNlX3JlbGVhc2Ugd2lsbCBjbGVhbiB0aGlzIHVwICovCisJaWYgKCFkZXYtPm9wZW4pCisJCWlkbW91c2VfZGVsZXRlKGRldik7CisKKwl1cCgmZGlzY29ubmVjdF9zZW0pOworCisJaW5mbygiJXMgZGlzY29ubmVjdGVkIiwgRFJJVkVSX0RFU0MpOworfQorCitzdGF0aWMgaW50IF9faW5pdCB1c2JfaWRtb3VzZV9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKworCS8qIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmlkbW91c2VfZHJpdmVyKTsKKwlpZiAocmVzdWx0KQorCQllcnIoIlVuYWJsZSB0byByZWdpc3RlciBkZXZpY2UgKGVycm9yICVkKS4iLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzYl9pZG1vdXNlX2V4aXQodm9pZCkKK3sKKwkvKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwl1c2JfZGVyZWdpc3RlcigmaWRtb3VzZV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1c2JfaWRtb3VzZV9pbml0KTsKK21vZHVsZV9leGl0KHVzYl9pZG1vdXNlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYyBiL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ0NTgwYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMKQEAgLTAsMCArMSwxMDg4IEBACisvKgorICogTEVHTyBVU0IgVG93ZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzIERhdmlkIEdsYW5jZSA8ZGF2aWRnc2ZAc291cmNlZm9yZ2UubmV0PgorICogICAgICAgICAgICAgICAyMDAxLTIwMDQgSnVlcmdlbiBTdHViZXIgPHN0YXJibHVlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqCXRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIGRlcml2ZWQgZnJvbSBVU0IgU2tlbGV0b24gZHJpdmVyIC0gMC41CisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKiBIaXN0b3J5OgorICoKKyAqIDIwMDEtMTAtMTMgLSAwLjEganMKKyAqICAgLSBmaXJzdCB2ZXJzaW9uCisgKiAyMDAxLTExLTAzIC0gMC4yIGpzCisgKiAgIC0gc2ltcGxpZmllZCBidWZmZXJpbmcsIG9uZS1zaG90IFVSQnMgZm9yIHdyaXRpbmcKKyAqIDIwMDEtMTEtMTAgLSAwLjMganMKKyAqICAgLSByZW1vdmVkIElPQ1RMIChzZXR0aW5nIHBvd2VyL21vZGUgaXMgbW9yZSBjb21wbGljYXRlZCwgcG9zdHBvbmVkKQorICogMjAwMS0xMS0yOCAtIDAuNCBqcworICogICAtIGFkZGVkIHZlbmRvciBjb21tYW5kcyBmb3IgbW9kZSBvZiBvcGVyYXRpb24gYW5kIHBvd2VyIGxldmVsIGluIG9wZW4KKyAqIDIwMDEtMTItMDQgLSAwLjUganMKKyAqICAgLSBzZXQgSVIgbW9kZSBieSBkZWZhdWx0IChieSBvdmVyc2lnaHQgMC40IHNldCBWTEwgbW9kZSkKKyAqIDIwMDItMDEtMTEgLSAwLjU/IHBjY2hhbgorICogICAtIG1ha2UgcmVhZCBidWZmZXIgcmV1c2FibGUgYW5kIHdvcmsgYXJvdW5kIGJ5dGVzX3RvX3dyaXRlIGlzc3VlIGJldHdlZW4KKyAqICAgICB1aGNpIGFuZCBsZWd1c2J0b3dlcgorICogMjAwMi0wOS0yMyAtIDAuNTIgZGF2aWQgKGRhdmlkQGNzc2UudXdhLmVkdS5hdSkKKyAqICAgLSBpbXBvcnRlZCBpbnRvIGxlam9zIHByb2plY3QKKyAqICAgLSBjaGFuZ2VkIHdha2VfdXAgdG8gd2FrZV91cF9pbnRlcnJ1cHRpYmxlCisgKiAgIC0gY2hhbmdlZCB0byB1c2UgbGVnbzAgcmF0aGVyIHRoYW4gdG93ZXIwCisgKiAgIC0gY2hhbmdlZCBkYmcoKSB0byB1c2UgX19mdW5jX18gcmF0aGVyIHRoYW4gZGVwcmVjYXRlZCBfX0ZVTkNUSU9OX18KKyAqIDIwMDMtMDEtMTIgLSAwLjUzIGRhdmlkIChkYXZpZEBjc3NlLnV3YS5lZHUuYXUpCisgKiAgIC0gY2hhbmdlZCByZWFkIGFuZCB3cml0ZSB0byB3cml0ZSBldmVyeXRoaW5nIG9yCisgKiAgICAgdGltZW91dCAoZnJvbSBhIHBhdGNoIGJ5IENocmlzIFJpZXNlbiBhbmQgQnJldHQgVGhhZWxlciBkcml2ZXIpCisgKiAgIC0gYWRkZWQgaW9jdGwgZnVuY3Rpb25hbGl0eSB0byBzZXQgdGltZW91dHMKKyAqIDIwMDMtMDctMTggLSAwLjU0IGRhdmlkZ3NmIChkYXZpZEBjc3NlLnV3YS5lZHUuYXUpCisgKiAgIC0gaW5pdGlhbCBpbXBvcnQgaW50byBMZWdvVVNCIHByb2plY3QKKyAqICAgLSBtZXJnZSBvZiBleGlzdGluZyBMZWdvVVNCLmMgZHJpdmVyCisgKiAyMDAzLTA3LTE4IC0gMC41NiBkYXZpZGdzZiAoZGF2aWRAY3NzZS51d2EuZWR1LmF1KQorICogICAtIHBvcnQgdG8gMi42IHN0eWxlIGRyaXZlcgorICogMjAwNC0wMi0yOSAtIDAuNiBKdWVyZ2VuIFN0dWJlciA8c3RhcmJsdWVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogICAtIGZpeCBsb2NraW5nCisgKiAgIC0gdW5saW5rIHJlYWQgVVJCcyB3aGljaCBhcmUgbm8gbG9uZ2VyIG5lZWRlZAorICogICAtIGFsbG93IGluY3JlYXNlZCBidWZmZXIgc2l6ZSwgZWxpbWluYXRlcyBuZWVkIGZvciB0aW1lb3V0IG9uIHdyaXRlCisgKiAgIC0gaGF2ZSByZWFkIFVSQiBydW5uaW5nIGNvbnRpbnVvdXNseQorICogICAtIGFkZGVkIHBvbGwKKyAqICAgLSBmb3JiaWQgc2Vla2luZworICogICAtIGFkZGVkIG5vbmJsb2NraW5nIEkvTworICogICAtIGNoYW5nZWQgYmFjayBfX2Z1bmNfXyB0byBfX0ZVTkNUSU9OX18KKyAqICAgLSByZWFkIGFuZCBsb2cgdG93ZXIgZmlybXdhcmUgdmVyc2lvbgorICogICAtIHJlc2V0IHRvd2VyIG9uIHByb2JlLCBhdm9pZHMgZmFpbHVyZSBvZiBmaXJzdCB3cml0ZQorICogMjAwNC0wMy0wOSAtIDAuNyBKdWVyZ2VuIFN0dWJlciA8c3RhcmJsdWVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogICAtIHRpbWVvdXQgcmVhZCBub3cgb25seSBhZnRlciBpbmFjdGl2aXR5LCBzaG9ydGVuIGRlZmF1bHQgYWNjb3JkaW5nbHkKKyAqIDIwMDQtMDMtMTEgLSAwLjggSnVlcmdlbiBTdHViZXIgPHN0YXJibHVlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqICAgLSBsb2cgbWFqb3IsIG1pbm9yIGluc3RlYWQgb2YgcG9zc2libHkgY29uZnVzaW5nIGRldmljZSBmaWxlbmFtZQorICogICAtIHdoaXRlc3BhY2UgY2xlYW51cAorICogMjAwNC0wMy0xMiAtIDAuOSBKdWVyZ2VuIFN0dWJlciA8c3RhcmJsdWVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogICAtIG5vcm1hbGl6ZSB3aGl0ZXNwYWNlIGluIGRlYnVnIG1lc3NhZ2VzCisgKiAgIC0gdGFrZSBjYXJlIGFib3V0IGVuZGlhbm5lc3MgaW4gY29udHJvbCBtZXNzYWdlIHJlc3BvbnNlcworICogMjAwNC0wMy0xMyAtIDAuOTEgSnVlcmdlbiBTdHViZXIgPHN0YXJibHVlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqICAgLSBtYWtlIGRlZmF1bHQgaW50ZXJ2YWxzIGxvbmdlciB0byBhY2NvbW1vZGF0ZSBjdXJyZW50IEVIQ0kgZHJpdmVyCisgKiAyMDA0LTAzLTE5IC0gMC45MiBKdWVyZ2VuIFN0dWJlciA8c3RhcmJsdWVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogICAtIHJlcGxhY2VkIGF0b21pY190IGJ5IG1lbW9yeSBiYXJyaWVycworICogMjAwNC0wNC0yMSAtIDAuOTMgSnVlcmdlbiBTdHViZXIgPHN0YXJibHVlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqICAgLSB3YWl0IGZvciBjb21wbGV0aW9uIG9mIHdyaXRlIHVyYiBpbiByZWxlYXNlIChuZWVkZWQgZm9yIHJlbW90ZWNvbnRyb2wpCisgKiAgIC0gY29ycmVjdGVkIHBvbGwgZm9yIHdyaXRlIGRpcmVjdGlvbiAobWlzc2luZyBuZWdhdGlvbikKKyAqIDIwMDQtMDQtMjIgLSAwLjk0IEp1ZXJnZW4gU3R1YmVyIDxzdGFyYmx1ZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiAgIC0gbWFrZSBkZXZpY2UgbG9ja2luZyBpbnRlcnJ1cHRpYmxlCisgKiAyMDA0LTA0LTMwIC0gMC45NSBKdWVyZ2VuIFN0dWJlciA8c3RhcmJsdWVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICogICAtIGNoZWNrIGZvciB2YWxpZCB1ZGV2IG9uIHJlc3VibWl0dGluZyBhbmQgdW5saW5raW5nIHVyYnMKKyAqIDIwMDQtMDgtMDMgLSAwLjk2IEp1ZXJnZW4gU3R1YmVyIDxzdGFyYmx1ZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiAgIC0gbW92ZSByZXNldCBpbnRvIG9wZW4gdG8gY2xlYW4gb3V0IHNwdXJpb3VzIGRhdGEKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorCisKKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCisJc3RhdGljIGludCBkZWJ1ZyA9IDQ7CisjZWxzZQorCXN0YXRpYyBpbnQgZGVidWcgPSAwOworI2VuZGlmCisKKy8qIFVzZSBvdXIgb3duIGRiZyBtYWNybyAqLworI3VuZGVmIGRiZworI2RlZmluZSBkYmcobHZsLCBmb3JtYXQsIGFyZy4uLikgZG8geyBpZiAoZGVidWcgPj0gbHZsKSBwcmludGsoS0VSTl9ERUJVRyAgX19GSUxFX18gIjogIiBmb3JtYXQgIlxuIiwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKKworCisvKiBWZXJzaW9uIEluZm9ybWF0aW9uICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC45NiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiSnVlcmdlbiBTdHViZXIgPHN0YXJibHVlQHNvdXJjZWZvcmdlLm5ldD4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJMRUdPIFVTQiBUb3dlciBEcml2ZXIiCisKKy8qIE1vZHVsZSBwYXJhbWV0ZXJzICovCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CisKKy8qIFRoZSBkZWZhdWx0cyBhcmUgY2hvc2VuIHRvIHdvcmsgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb25zIG9mIGxlSk9TIGFuZCBOUUMuCisgKi8KKworLyogU29tZSBsZWdhY3kgc29mdHdhcmUgbGlrZXMgdG8gcmVjZWl2ZSBwYWNrZXRzIGluIG9uZSBwaWVjZS4KKyAqIEluIHRoaXMgY2FzZSByZWFkX2J1ZmZlcl9zaXplIHNob3VsZCBleGNlZWQgdGhlIG1heGltYWwgcGFja2V0IGxlbmd0aAorICogKDQxNyBmb3IgZGF0YWxvZyB1cGxvYWRzKSwgYW5kIHBhY2tldF90aW1lb3V0IHNob3VsZCBiZSBzZXQuCisgKi8KK3N0YXRpYyBpbnQgcmVhZF9idWZmZXJfc2l6ZSA9IDQ4MDsKK21vZHVsZV9wYXJhbShyZWFkX2J1ZmZlcl9zaXplLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhyZWFkX2J1ZmZlcl9zaXplLCAiUmVhZCBidWZmZXIgc2l6ZSIpOworCisvKiBTb21lIGxlZ2FjeSBzb2Z0d2FyZSBsaWtlcyB0byBzZW5kIHBhY2tldHMgaW4gb25lIHBpZWNlLgorICogSW4gdGhpcyBjYXNlIHdyaXRlX2J1ZmZlcl9zaXplIHNob3VsZCBleGNlZWQgdGhlIG1heGltYWwgcGFja2V0IGxlbmd0aAorICogKDQxNyBmb3IgZmlybXdhcmUgYW5kIHByb2dyYW0gZG93bmxvYWRzKS4KKyAqIEEgcHJvYmxlbSB3aXRoIGxvbmcgd3JpdGVzIGlzIHRoYXQgdGhlIGZvbGxvd2luZyByZWFkIG1heSB0aW1lIG91dAorICogaWYgdGhlIHNvZnR3YXJlIGlzIG5vdCBwcmVwYXJlZCB0byB3YWl0IGxvbmcgZW5vdWdoLgorICovCitzdGF0aWMgaW50IHdyaXRlX2J1ZmZlcl9zaXplID0gNDgwOworbW9kdWxlX3BhcmFtKHdyaXRlX2J1ZmZlcl9zaXplLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh3cml0ZV9idWZmZXJfc2l6ZSwgIldyaXRlIGJ1ZmZlciBzaXplIik7CisKKy8qIFNvbWUgbGVnYWN5IHNvZnR3YXJlIGV4cGVjdHMgcmVhZHMgdG8gY29udGFpbiB3aG9sZSBMQVNNIHBhY2tldHMuCisgKiBUbyBhY2hpZXZlIHRoaXMsIGNoYXJhY3RlcnMgd2hpY2ggYXJyaXZlIGJlZm9yZSBhIHBhY2tldCB0aW1lb3V0CisgKiBvY2N1cnMgd2lsbCBiZSByZXR1cm5lZCBpbiBhIHNpbmdsZSByZWFkIG9wZXJhdGlvbi4KKyAqIEEgcHJvYmxlbSB3aXRoIGxvbmcgcmVhZHMgaXMgdGhhdCB0aGUgc29mdHdhcmUgbWF5IHRpbWUgb3V0CisgKiBpZiBpdCBpcyBub3QgcHJlcGFyZWQgdG8gd2FpdCBsb25nIGVub3VnaC4KKyAqIFRoZSBwYWNrZXQgdGltZW91dCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIHRoZSB0aW1lIGJldHdlZW4gdGhlCisgKiByZWNlcHRpb24gb2Ygc3Vic2VxdWVudCBjaGFyYWN0ZXJzLCB3aGljaCBzaG91bGQgYXJyaXZlIGFib3V0CisgKiBldmVyeSA1bXMgZm9yIHRoZSBzdGFuZGFyZCAyNDAwIGJhdWQuCisgKiBTZXQgaXQgdG8gMCB0byBkaXNhYmxlLgorICovCitzdGF0aWMgaW50IHBhY2tldF90aW1lb3V0ID0gNTA7Cittb2R1bGVfcGFyYW0ocGFja2V0X3RpbWVvdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHBhY2tldF90aW1lb3V0LCAiUGFja2V0IHRpbWVvdXQgaW4gbXMiKTsKKworLyogU29tZSBsZWdhY3kgc29mdHdhcmUgZXhwZWN0cyBibG9ja2luZyByZWFkcyB0byB0aW1lIG91dC4KKyAqIFRpbWVvdXQgb2NjdXJzIGFmdGVyIHRoZSBzcGVjaWZpZWQgdGltZSBvZiByZWFkIGFuZCB3cml0ZSBpbmFjdGl2aXR5LgorICogU2V0IGl0IHRvIDAgdG8gZGlzYWJsZS4KKyAqLworc3RhdGljIGludCByZWFkX3RpbWVvdXQgPSAyMDA7Cittb2R1bGVfcGFyYW0ocmVhZF90aW1lb3V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhyZWFkX3RpbWVvdXQsICJSZWFkIHRpbWVvdXQgaW4gbXMiKTsKKworLyogQXMgb2Yga2VybmVsIHZlcnNpb24gMi42LjQgZWhjaS1oY2QgdXNlcyBhbgorICogIm9ubHkgb25lIGludGVycnVwdCB0cmFuc2ZlciBwZXIgZnJhbWUiIHNob3J0Y3V0CisgKiB0byBzaW1wbGlmeSB0aGUgc2NoZWR1bGluZyBvZiBwZXJpb2RpYyB0cmFuc2ZlcnMuCisgKiBUaGlzIGNvbmZsaWN0cyB3aXRoIG91ciBzdGFuZGFyZCAxbXMgaW50ZXJ2YWxzIGZvciBpbiBhbmQgb3V0IFVSQnMuCisgKiBXZSB1c2UgZGVmYXVsdCBpbnRlcnZhbHMgb2YgMm1zIGZvciBpbiBhbmQgOG1zIGZvciBvdXQgdHJhbnNmZXJzLAorICogd2hpY2ggaXMgZmFzdCBlbm91Z2ggZm9yIDI0MDAgYmF1ZCBhbmQgYWxsb3dzIGEgc21hbGwgYWRkaXRpb25hbCBsb2FkLgorICogSW5jcmVhc2UgdGhlIGludGVydmFsIHRvIGFsbG93IG1vcmUgZGV2aWNlcyB0aGF0IGRvIGludGVycnVwdCB0cmFuc2ZlcnMsCisgKiBvciBzZXQgdG8gMCB0byB1c2UgdGhlIHN0YW5kYXJkIGludGVydmFsIGZyb20gdGhlIGVuZHBvaW50IGRlc2NyaXB0b3JzLgorICovCitzdGF0aWMgaW50IGludGVycnVwdF9pbl9pbnRlcnZhbCA9IDI7Cittb2R1bGVfcGFyYW0oaW50ZXJydXB0X2luX2ludGVydmFsLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbnRlcnJ1cHRfaW5faW50ZXJ2YWwsICJJbnRlcnJ1cHQgaW4gaW50ZXJ2YWwgaW4gbXMiKTsKKworc3RhdGljIGludCBpbnRlcnJ1cHRfb3V0X2ludGVydmFsID0gODsKK21vZHVsZV9wYXJhbShpbnRlcnJ1cHRfb3V0X2ludGVydmFsLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbnRlcnJ1cHRfb3V0X2ludGVydmFsLCAiSW50ZXJydXB0IG91dCBpbnRlcnZhbCBpbiBtcyIpOworCisvKiBEZWZpbmUgdGhlc2UgdmFsdWVzIHRvIG1hdGNoIHlvdXIgZGV2aWNlICovCisjZGVmaW5lIExFR09fVVNCX1RPV0VSX1ZFTkRPUl9JRAkweDA2OTQKKyNkZWZpbmUgTEVHT19VU0JfVE9XRVJfUFJPRFVDVF9JRAkweDAwMDEKKworLyogVmVuZG9yIHJlcXVlc3RzICovCisjZGVmaW5lIExFR09fVVNCX1RPV0VSX1JFUVVFU1RfUkVTRVQJCTB4MDQKKyNkZWZpbmUgTEVHT19VU0JfVE9XRVJfUkVRVUVTVF9HRVRfVkVSU0lPTgkweEZECisKK3N0cnVjdCB0b3dlcl9yZXNldF9yZXBseSB7CisJX19sZTE2IHNpemU7CQkvKiBsaXR0bGUtZW5kaWFuICovCisJX191OCBlcnJfY29kZTsKKwlfX3U4IHNwYXJlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB0b3dlcl9nZXRfdmVyc2lvbl9yZXBseSB7CisJX19sZTE2IHNpemU7CQkvKiBsaXR0bGUtZW5kaWFuICovCisJX191OCBlcnJfY29kZTsKKwlfX3U4IHNwYXJlOworCV9fdTggbWFqb3I7CisJX191OCBtaW5vcjsKKwlfX2xlMTYgYnVpbGRfbm87CQkvKiBsaXR0bGUtZW5kaWFuICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdG93ZXJfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKExFR09fVVNCX1RPV0VSX1ZFTkRPUl9JRCwgTEVHT19VU0JfVE9XRVJfUFJPRFVDVF9JRCkgfSwKKwl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHRvd2VyX3RhYmxlKTsKKworI2RlZmluZSBMRUdPX1VTQl9UT1dFUl9NSU5PUl9CQVNFCTE2MAorCisKKy8qIFN0cnVjdHVyZSB0byBob2xkIGFsbCBvZiBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmICovCitzdHJ1Y3QgbGVnb191c2JfdG93ZXIgeworCXN0cnVjdCBzZW1hcGhvcmUJc2VtOwkJLyogbG9ja3MgdGhpcyBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSoJdWRldjsJCS8qIHNhdmUgb2ZmIHRoZSB1c2IgZGV2aWNlIHBvaW50ZXIgKi8KKwl1bnNpZ25lZCBjaGFyCQltaW5vcjsJCS8qIHRoZSBzdGFydGluZyBtaW5vciBudW1iZXIgZm9yIHRoaXMgZGV2aWNlICovCisKKwlpbnQJCQlvcGVuX2NvdW50OwkvKiBudW1iZXIgb2YgdGltZXMgdGhpcyBwb3J0IGhhcyBiZWVuIG9wZW5lZCAqLworCisJY2hhcioJCQlyZWFkX2J1ZmZlcjsKKwlzaXplX3QJCQlyZWFkX2J1ZmZlcl9sZW5ndGg7IC8qIHRoaXMgbXVjaCBjYW1lIGluICovCisJc2l6ZV90CQkJcmVhZF9wYWNrZXRfbGVuZ3RoOyAvKiB0aGlzIG11Y2ggd2lsbCBiZSByZXR1cm5lZCBvbiByZWFkICovCisJc3BpbmxvY2tfdAkJcmVhZF9idWZmZXJfbG9jazsKKwlpbnQJCQlwYWNrZXRfdGltZW91dF9qaWZmaWVzOworCXVuc2lnbmVkIGxvbmcJCXJlYWRfbGFzdF9hcnJpdmFsOworCisJd2FpdF9xdWV1ZV9oZWFkX3QJcmVhZF93YWl0OworCXdhaXRfcXVldWVfaGVhZF90CXdyaXRlX3dhaXQ7CisKKwljaGFyKgkJCWludGVycnVwdF9pbl9idWZmZXI7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yKiBpbnRlcnJ1cHRfaW5fZW5kcG9pbnQ7CisJc3RydWN0IHVyYioJCWludGVycnVwdF9pbl91cmI7CisJaW50CQkJaW50ZXJydXB0X2luX2ludGVydmFsOworCWludAkJCWludGVycnVwdF9pbl9ydW5uaW5nOworCWludAkJCWludGVycnVwdF9pbl9kb25lOworCisJY2hhcioJCQlpbnRlcnJ1cHRfb3V0X2J1ZmZlcjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IqIGludGVycnVwdF9vdXRfZW5kcG9pbnQ7CisJc3RydWN0IHVyYioJCWludGVycnVwdF9vdXRfdXJiOworCWludAkJCWludGVycnVwdF9vdXRfaW50ZXJ2YWw7CisJaW50CQkJaW50ZXJydXB0X291dF9idXN5OworCit9OworCisKKy8qIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBzc2l6ZV90IHRvd2VyX3JlYWQJKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7CitzdGF0aWMgc3NpemVfdCB0b3dlcl93cml0ZQkoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCB0b3dlcl9kZWxldGUgKHN0cnVjdCBsZWdvX3VzYl90b3dlciAqZGV2KTsKK3N0YXRpYyBpbnQgdG93ZXJfb3BlbgkJKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgdG93ZXJfcmVsZWFzZQkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIHVuc2lnbmVkIGludCB0b3dlcl9wb2xsCShzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCk7CitzdGF0aWMgbG9mZl90IHRvd2VyX2xsc2Vlawkoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmYsIGludCB3aGVuY2UpOworCitzdGF0aWMgdm9pZCB0b3dlcl9hYm9ydF90cmFuc2ZlcnMgKHN0cnVjdCBsZWdvX3VzYl90b3dlciAqZGV2KTsKK3N0YXRpYyB2b2lkIHRvd2VyX2NoZWNrX2Zvcl9yZWFkX3BhY2tldCAoc3RydWN0IGxlZ29fdXNiX3Rvd2VyICpkZXYpOworc3RhdGljIHZvaWQgdG93ZXJfaW50ZXJydXB0X2luX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIHRvd2VyX2ludGVycnVwdF9vdXRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCitzdGF0aWMgaW50ICB0b3dlcl9wcm9iZQkoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyB2b2lkIHRvd2VyX2Rpc2Nvbm5lY3QJKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOworCisKKy8qIHByZXZlbnQgcmFjZXMgYmV0d2VlbiBvcGVuKCkgYW5kIGRpc2Nvbm5lY3QgKi8KK3N0YXRpYyBERUNMQVJFX01VVEVYIChkaXNjb25uZWN0X3NlbSk7CisKKy8qIGZpbGUgb3BlcmF0aW9ucyBuZWVkZWQgd2hlbiB3ZSByZWdpc3RlciB0aGlzIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdG93ZXJfZm9wcyA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkucmVhZCAgPQl0b3dlcl9yZWFkLAorCS53cml0ZSA9CXRvd2VyX3dyaXRlLAorCS5vcGVuID0JCXRvd2VyX29wZW4sCisJLnJlbGVhc2UgPQl0b3dlcl9yZWxlYXNlLAorCS5wb2xsID0JCXRvd2VyX3BvbGwsCisJLmxsc2VlayA9CXRvd2VyX2xsc2VlaywKK307CisKKy8qCisgKiB1c2IgY2xhc3MgZHJpdmVyIGluZm8gaW4gb3JkZXIgdG8gZ2V0IGEgbWlub3IgbnVtYmVyIGZyb20gdGhlIHVzYiBjb3JlLAorICogYW5kIHRvIGhhdmUgdGhlIGRldmljZSByZWdpc3RlcmVkIHdpdGggZGV2ZnMgYW5kIHRoZSBkcml2ZXIgY29yZQorICovCitzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgdG93ZXJfY2xhc3MgPSB7CisJLm5hbWUgPQkJInVzYi9sZWdvdXNidG93ZXIlZCIsCisJLmZvcHMgPQkJJnRvd2VyX2ZvcHMsCisJLm1vZGUgPQkJU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdSUCB8IFNfSVdHUlAgfCBTX0lST1RILAorCS5taW5vcl9iYXNlID0JTEVHT19VU0JfVE9XRVJfTUlOT1JfQkFTRSwKK307CisKKworLyogdXNiIHNwZWNpZmljIG9iamVjdCBuZWVkZWQgdG8gcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgdXNiIHN1YnN5c3RlbSAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHRvd2VyX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkibGVnb3VzYnRvd2VyIiwKKwkucHJvYmUgPQl0b3dlcl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXRvd2VyX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JdG93ZXJfdGFibGUsCit9OworCisKKy8qKgorICoJbGVnb191c2JfdG93ZXJfZGVidWdfZGF0YQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGVnb191c2JfdG93ZXJfZGVidWdfZGF0YSAoaW50IGxldmVsLCBjb25zdCBjaGFyICpmdW5jdGlvbiwgaW50IHNpemUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisJaW50IGk7CisKKwlpZiAoZGVidWcgPCBsZXZlbCkKKwkJcmV0dXJuOworCisJcHJpbnRrIChLRVJOX0RFQlVHIF9fRklMRV9fIjogJXMgLSBsZW5ndGggPSAlZCwgZGF0YSA9ICIsIGZ1bmN0aW9uLCBzaXplKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisJCXByaW50ayAoIiUuMnggIiwgZGF0YVtpXSk7CisJfQorCXByaW50ayAoIlxuIik7Cit9CisKKworLyoqCisgKgl0b3dlcl9kZWxldGUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHRvd2VyX2RlbGV0ZSAoc3RydWN0IGxlZ29fdXNiX3Rvd2VyICpkZXYpCit7CisJZGJnKDIsICIlczogZW50ZXIiLCBfX0ZVTkNUSU9OX18pOworCisJdG93ZXJfYWJvcnRfdHJhbnNmZXJzIChkZXYpOworCisJLyogZnJlZSBkYXRhIHN0cnVjdHVyZXMgKi8KKwlpZiAoZGV2LT5pbnRlcnJ1cHRfaW5fdXJiICE9IE5VTEwpIHsKKwkJdXNiX2ZyZWVfdXJiIChkZXYtPmludGVycnVwdF9pbl91cmIpOworCX0KKwlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X3VyYiAhPSBOVUxMKSB7CisJCXVzYl9mcmVlX3VyYiAoZGV2LT5pbnRlcnJ1cHRfb3V0X3VyYik7CisJfQorCWtmcmVlIChkZXYtPnJlYWRfYnVmZmVyKTsKKwlrZnJlZSAoZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyKTsKKwlrZnJlZSAoZGV2LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlcik7CisJa2ZyZWUgKGRldik7CisKKwlkYmcoMiwgIiVzOiBsZWF2ZSIsIF9fRlVOQ1RJT05fXyk7Cit9CisKKworLyoqCisgKgl0b3dlcl9vcGVuCisgKi8KK3N0YXRpYyBpbnQgdG93ZXJfb3BlbiAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGxlZ29fdXNiX3Rvd2VyICpkZXYgPSBOVUxMOworCWludCBzdWJtaW5vcjsKKwlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCB0b3dlcl9yZXNldF9yZXBseSByZXNldF9yZXBseTsKKwlpbnQgcmVzdWx0OworCisJZGJnKDIsICIlczogZW50ZXIiLCBfX0ZVTkNUSU9OX18pOworCisJbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CisJc3VibWlub3IgPSBpbWlub3IoaW5vZGUpOworCisJZG93biAoJmRpc2Nvbm5lY3Rfc2VtKTsKKworCWludGVyZmFjZSA9IHVzYl9maW5kX2ludGVyZmFjZSAoJnRvd2VyX2RyaXZlciwgc3VibWlub3IpOworCisJaWYgKCFpbnRlcmZhY2UpIHsKKwkJZXJyICgiJXMgLSBlcnJvciwgY2FuJ3QgZmluZCBkZXZpY2UgZm9yIG1pbm9yICVkIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHN1Ym1pbm9yKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byB1bmxvY2tfZGlzY29ubmVjdF9leGl0OworCX0KKworCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKworCWlmICghZGV2KSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gdW5sb2NrX2Rpc2Nvbm5lY3RfZXhpdDsKKwl9CisKKwkvKiBsb2NrIHRoaXMgZGV2aWNlICovCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSAoJmRldi0+c2VtKSkgeworCSAgICAgICAgcmV0dmFsID0gLUVSRVNUQVJUU1lTOworCQlnb3RvIHVubG9ja19kaXNjb25uZWN0X2V4aXQ7CisJfQorCisJLyogYWxsb3cgb3BlbmluZyBvbmx5IG9uY2UgKi8KKwlpZiAoZGV2LT5vcGVuX2NvdW50KSB7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byB1bmxvY2tfZXhpdDsKKwl9CisJZGV2LT5vcGVuX2NvdW50ID0gMTsKKworCS8qIHJlc2V0IHRoZSB0b3dlciAqLworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoZGV2LT51ZGV2LAorCQkJCSAgdXNiX3JjdmN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkJICBMRUdPX1VTQl9UT1dFUl9SRVFVRVNUX1JFU0VULAorCQkJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJICAwLAorCQkJCSAgMCwKKwkJCQkgICZyZXNldF9yZXBseSwKKwkJCQkgIHNpemVvZihyZXNldF9yZXBseSksCisJCQkJICAxMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQllcnIoIkxFR08gVVNCIFRvd2VyIHJlc2V0IGNvbnRyb2wgcmVxdWVzdCBmYWlsZWQiKTsKKwkJcmV0dmFsID0gcmVzdWx0OworCQlnb3RvIHVubG9ja19leGl0OworCX0KKworCS8qIGluaXRpYWxpemUgaW4gZGlyZWN0aW9uICovCisJZGV2LT5yZWFkX2J1ZmZlcl9sZW5ndGggPSAwOworCWRldi0+cmVhZF9wYWNrZXRfbGVuZ3RoID0gMDsKKwl1c2JfZmlsbF9pbnRfdXJiIChkZXYtPmludGVycnVwdF9pbl91cmIsCisJCQkgIGRldi0+dWRldiwKKwkJCSAgdXNiX3JjdmludHBpcGUoZGV2LT51ZGV2LCBkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkgIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlciwKKwkJCSAgbGUxNl90b19jcHUoZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSwKKwkJCSAgdG93ZXJfaW50ZXJydXB0X2luX2NhbGxiYWNrLAorCQkJICBkZXYsCisJCQkgIGRldi0+aW50ZXJydXB0X2luX2ludGVydmFsKTsKKworCWRldi0+aW50ZXJydXB0X2luX3J1bm5pbmcgPSAxOworCWRldi0+aW50ZXJydXB0X2luX2RvbmUgPSAwOworCW1iKCk7CisKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAoZGV2LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0dmFsKSB7CisJCWVycigiQ291bGRuJ3Qgc3VibWl0IGludGVycnVwdF9pbl91cmIgJWQiLCByZXR2YWwpOworCQlkZXYtPmludGVycnVwdF9pbl9ydW5uaW5nID0gMDsKKwkJZGV2LT5vcGVuX2NvdW50ID0gMDsKKwkJZ290byB1bmxvY2tfZXhpdDsKKwl9CisKKwkvKiBzYXZlIGRldmljZSBpbiB0aGUgZmlsZSdzIHByaXZhdGUgc3RydWN0dXJlICovCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGV2OworCit1bmxvY2tfZXhpdDoKKwl1cCAoJmRldi0+c2VtKTsKKwordW5sb2NrX2Rpc2Nvbm5lY3RfZXhpdDoKKwl1cCAoJmRpc2Nvbm5lY3Rfc2VtKTsKKworCWRiZygyLCAiJXM6IGxlYXZlLCByZXR1cm4gdmFsdWUgJWQgIiwgX19GVU5DVElPTl9fLCByZXR2YWwpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKgl0b3dlcl9yZWxlYXNlCisgKi8KK3N0YXRpYyBpbnQgdG93ZXJfcmVsZWFzZSAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGxlZ29fdXNiX3Rvd2VyICpkZXY7CisJaW50IHJldHZhbCA9IDA7CisKKwlkYmcoMiwgIiVzOiBlbnRlciIsIF9fRlVOQ1RJT05fXyk7CisKKwlkZXYgPSAoc3RydWN0IGxlZ29fdXNiX3Rvd2VyICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCWRiZygxLCAiJXM6IG9iamVjdCBpcyBOVUxMIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKworCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZkZXYtPnNlbSkpIHsKKwkgICAgICAgIHJldHZhbCA9IC1FUkVTVEFSVFNZUzsKKwkJZ290byBleGl0OworCX0KKworCWlmIChkZXYtPm9wZW5fY291bnQgIT0gMSkgeworCQlkYmcoMSwgIiVzOiBkZXZpY2Ugbm90IG9wZW5lZCBleGFjdGx5IG9uY2UiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIHVubG9ja19leGl0OworCX0KKwlpZiAoZGV2LT51ZGV2ID09IE5VTEwpIHsKKwkJLyogdGhlIGRldmljZSB3YXMgdW5wbHVnZ2VkIGJlZm9yZSB0aGUgZmlsZSB3YXMgcmVsZWFzZWQgKi8KKwkJdXAgKCZkZXYtPnNlbSk7CS8qIHVubG9jayBoZXJlIGFzIHRvd2VyX2RlbGV0ZSBmcmVlcyBkZXYgKi8KKwkJdG93ZXJfZGVsZXRlIChkZXYpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogd2FpdCB1bnRpbCB3cml0ZSB0cmFuc2ZlciBpcyBmaW5pc2hlZCAqLworCWlmIChkZXYtPmludGVycnVwdF9vdXRfYnVzeSkgeworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCAoZGV2LT53cml0ZV93YWl0LCAhZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3ksIDIgKiBIWik7CisJfQorCXRvd2VyX2Fib3J0X3RyYW5zZmVycyAoZGV2KTsKKwlkZXYtPm9wZW5fY291bnQgPSAwOworCit1bmxvY2tfZXhpdDoKKwl1cCAoJmRldi0+c2VtKTsKKworZXhpdDoKKwlkYmcoMiwgIiVzOiBsZWF2ZSwgcmV0dXJuIHZhbHVlICVkIiwgX19GVU5DVElPTl9fLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKKworLyoqCisgKgl0b3dlcl9hYm9ydF90cmFuc2ZlcnMKKyAqICAgICAgYWJvcnRzIHRyYW5zZmVycyBhbmQgZnJlZXMgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMKKyAqLworc3RhdGljIHZvaWQgdG93ZXJfYWJvcnRfdHJhbnNmZXJzIChzdHJ1Y3QgbGVnb191c2JfdG93ZXIgKmRldikKK3sKKwlkYmcoMiwgIiVzOiBlbnRlciIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJZGJnKDEsICIlczogZGV2IGlzIG51bGwiLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogc2h1dGRvd24gdHJhbnNmZXIgKi8KKwlpZiAoZGV2LT5pbnRlcnJ1cHRfaW5fcnVubmluZykgeworCQlkZXYtPmludGVycnVwdF9pbl9ydW5uaW5nID0gMDsKKwkJbWIoKTsKKwkJaWYgKGRldi0+aW50ZXJydXB0X2luX3VyYiAhPSBOVUxMICYmIGRldi0+dWRldikgeworCQkJdXNiX2tpbGxfdXJiIChkZXYtPmludGVycnVwdF9pbl91cmIpOworCQl9CisJfQorCWlmIChkZXYtPmludGVycnVwdF9vdXRfYnVzeSkgeworCQlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X3VyYiAhPSBOVUxMICYmIGRldi0+dWRldikgeworCQkJdXNiX2tpbGxfdXJiIChkZXYtPmludGVycnVwdF9vdXRfdXJiKTsKKwkJfQorCX0KKworZXhpdDoKKwlkYmcoMiwgIiVzOiBsZWF2ZSIsIF9fRlVOQ1RJT05fXyk7Cit9CisKKworLyoqCisgKgl0b3dlcl9jaGVja19mb3JfcmVhZF9wYWNrZXQKKyAqCisgKiAgICAgIFRvIGdldCBjb3JyZWN0IHNlbWFudGljcyBmb3Igc2lnbmFscyBhbmQgbm9uLWJsb2NraW5nIEkvTworICogICAgICB3aXRoIHBhY2tldGl6aW5nIHdlIHByZXRlbmQgbm90IHRvIHNlZSBhbnkgZGF0YSBpbiB0aGUgcmVhZCBidWZmZXIKKyAqICAgICAgdW50aWwgaXQgaGFzIGJlZW4gdGhlcmUgdW5jaGFuZ2VkIGZvciBhdCBsZWFzdAorICogICAgICBkZXYtPnBhY2tldF90aW1lb3V0X2ppZmZpZXMsIG9yIHVudGlsIHRoZSBidWZmZXIgaXMgZnVsbC4KKyAqLworc3RhdGljIHZvaWQgdG93ZXJfY2hlY2tfZm9yX3JlYWRfcGFja2V0IChzdHJ1Y3QgbGVnb191c2JfdG93ZXIgKmRldikKK3sKKwlzcGluX2xvY2tfaXJxICgmZGV2LT5yZWFkX2J1ZmZlcl9sb2NrKTsKKwlpZiAoIXBhY2tldF90aW1lb3V0CisJICAgIHx8IHRpbWVfYWZ0ZXIoamlmZmllcywgZGV2LT5yZWFkX2xhc3RfYXJyaXZhbCArIGRldi0+cGFja2V0X3RpbWVvdXRfamlmZmllcykKKwkgICAgfHwgZGV2LT5yZWFkX2J1ZmZlcl9sZW5ndGggPT0gcmVhZF9idWZmZXJfc2l6ZSkgeworCQlkZXYtPnJlYWRfcGFja2V0X2xlbmd0aCA9IGRldi0+cmVhZF9idWZmZXJfbGVuZ3RoOworCX0KKwlkZXYtPmludGVycnVwdF9pbl9kb25lID0gMDsKKwlzcGluX3VubG9ja19pcnEgKCZkZXYtPnJlYWRfYnVmZmVyX2xvY2spOworfQorCisKKy8qKgorICoJdG93ZXJfcG9sbAorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRvd2VyX3BvbGwgKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBsZWdvX3VzYl90b3dlciAqZGV2OworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKKworCWRiZygyLCAiJXM6IGVudGVyIiwgX19GVU5DVElPTl9fKTsKKworCWRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXBvbGxfd2FpdChmaWxlLCAmZGV2LT5yZWFkX3dhaXQsIHdhaXQpOworCXBvbGxfd2FpdChmaWxlLCAmZGV2LT53cml0ZV93YWl0LCB3YWl0KTsKKworCXRvd2VyX2NoZWNrX2Zvcl9yZWFkX3BhY2tldChkZXYpOworCWlmIChkZXYtPnJlYWRfcGFja2V0X2xlbmd0aCA+IDApIHsKKwkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOworCX0KKwlpZiAoIWRldi0+aW50ZXJydXB0X291dF9idXN5KSB7CisJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07CisJfQorCisJZGJnKDIsICIlczogbGVhdmUsIG1hc2sgPSAlZCIsIF9fRlVOQ1RJT05fXywgbWFzayk7CisKKwlyZXR1cm4gbWFzazsKK30KKworCisvKioKKyAqCXRvd2VyX2xsc2VlaworICovCitzdGF0aWMgbG9mZl90IHRvd2VyX2xsc2VlayAoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmYsIGludCB3aGVuY2UpCit7CisJcmV0dXJuIC1FU1BJUEU7CQkvKiB1bnNlZWthYmxlICovCit9CisKKworLyoqCisgKgl0b3dlcl9yZWFkCisgKi8KK3N0YXRpYyBzc2l6ZV90IHRvd2VyX3JlYWQgKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgbGVnb191c2JfdG93ZXIgKmRldjsKKwlzaXplX3QgYnl0ZXNfdG9fcmVhZDsKKwlpbnQgaTsKKwlpbnQgcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAwOworCisJZGJnKDIsICIlczogZW50ZXIsIGNvdW50ID0gJVpkIiwgX19GVU5DVElPTl9fLCBjb3VudCk7CisKKwlkZXYgPSAoc3RydWN0IGxlZ29fdXNiX3Rvd2VyICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJLyogbG9jayB0aGlzIG9iamVjdCAqLworCWlmIChkb3duX2ludGVycnVwdGlibGUgKCZkZXYtPnNlbSkpIHsKKwkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogdmVyaWZ5IHRoYXQgdGhlIGRldmljZSB3YXNuJ3QgdW5wbHVnZ2VkICovCisJaWYgKGRldi0+dWRldiA9PSBOVUxMKSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWVycigiTm8gZGV2aWNlIG9yIGRldmljZSB1bnBsdWdnZWQgJWQiLCByZXR2YWwpOworCQlnb3RvIHVubG9ja19leGl0OworCX0KKworCS8qIHZlcmlmeSB0aGF0IHdlIGFjdHVhbGx5IGhhdmUgc29tZSBkYXRhIHRvIHJlYWQgKi8KKwlpZiAoY291bnQgPT0gMCkgeworCQlkYmcoMSwgIiVzOiByZWFkIHJlcXVlc3Qgb2YgMCBieXRlcyIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gdW5sb2NrX2V4aXQ7CisJfQorCisJaWYgKHJlYWRfdGltZW91dCkgeworCQl0aW1lb3V0ID0gamlmZmllcyArIHJlYWRfdGltZW91dCAqIEhaIC8gMTAwMDsKKwl9CisKKwkvKiB3YWl0IGZvciBkYXRhICovCisJdG93ZXJfY2hlY2tfZm9yX3JlYWRfcGFja2V0IChkZXYpOworCXdoaWxlIChkZXYtPnJlYWRfcGFja2V0X2xlbmd0aCA9PSAwKSB7CisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgeworCQkJcmV0dmFsID0gLUVBR0FJTjsKKwkJCWdvdG8gdW5sb2NrX2V4aXQ7CisJCX0KKwkJcmV0dmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoZGV2LT5yZWFkX3dhaXQsIGRldi0+aW50ZXJydXB0X2luX2RvbmUsIGRldi0+cGFja2V0X3RpbWVvdXRfamlmZmllcyk7CisJCWlmIChyZXR2YWwgPCAwKSB7CisJCQlnb3RvIHVubG9ja19leGl0OworCQl9CisKKwkJLyogcmVzZXQgcmVhZCB0aW1lb3V0IGR1cmluZyByZWFkIG9yIHdyaXRlIGFjdGl2aXR5ICovCisJCWlmIChyZWFkX3RpbWVvdXQKKwkJICAgICYmIChkZXYtPnJlYWRfYnVmZmVyX2xlbmd0aCB8fCBkZXYtPmludGVycnVwdF9vdXRfYnVzeSkpIHsKKwkJCXRpbWVvdXQgPSBqaWZmaWVzICsgcmVhZF90aW1lb3V0ICogSFogLyAxMDAwOworCQl9CisJCS8qIGNoZWNrIGZvciByZWFkIHRpbWVvdXQgKi8KKwkJaWYgKHJlYWRfdGltZW91dCAmJiB0aW1lX2FmdGVyIChqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJcmV0dmFsID0gLUVUSU1FRE9VVDsKKwkJCWdvdG8gdW5sb2NrX2V4aXQ7CisJCX0KKwkJdG93ZXJfY2hlY2tfZm9yX3JlYWRfcGFja2V0IChkZXYpOworCX0KKworCS8qIGNvcHkgdGhlIGRhdGEgZnJvbSByZWFkX2J1ZmZlciBpbnRvIHVzZXJzcGFjZSAqLworCWJ5dGVzX3RvX3JlYWQgPSBtaW4oY291bnQsIGRldi0+cmVhZF9wYWNrZXRfbGVuZ3RoKTsKKworCWlmIChjb3B5X3RvX3VzZXIgKGJ1ZmZlciwgZGV2LT5yZWFkX2J1ZmZlciwgYnl0ZXNfdG9fcmVhZCkpIHsKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZ290byB1bmxvY2tfZXhpdDsKKwl9CisKKwlzcGluX2xvY2tfaXJxICgmZGV2LT5yZWFkX2J1ZmZlcl9sb2NrKTsKKwlkZXYtPnJlYWRfYnVmZmVyX2xlbmd0aCAtPSBieXRlc190b19yZWFkOworCWRldi0+cmVhZF9wYWNrZXRfbGVuZ3RoIC09IGJ5dGVzX3RvX3JlYWQ7CisJZm9yIChpPTA7IGk8ZGV2LT5yZWFkX2J1ZmZlcl9sZW5ndGg7IGkrKykgeworCQlkZXYtPnJlYWRfYnVmZmVyW2ldID0gZGV2LT5yZWFkX2J1ZmZlcltpK2J5dGVzX3RvX3JlYWRdOworCX0KKwlzcGluX3VubG9ja19pcnEgKCZkZXYtPnJlYWRfYnVmZmVyX2xvY2spOworCisJcmV0dmFsID0gYnl0ZXNfdG9fcmVhZDsKKwordW5sb2NrX2V4aXQ6CisJLyogdW5sb2NrIHRoZSBkZXZpY2UgKi8KKwl1cCAoJmRldi0+c2VtKTsKKworZXhpdDoKKwlkYmcoMiwgIiVzOiBsZWF2ZSwgcmV0dXJuIHZhbHVlICVkIiwgX19GVU5DVElPTl9fLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKKworLyoqCisgKgl0b3dlcl93cml0ZQorICovCitzdGF0aWMgc3NpemVfdCB0b3dlcl93cml0ZSAoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBsZWdvX3VzYl90b3dlciAqZGV2OworCXNpemVfdCBieXRlc190b193cml0ZTsKKwlpbnQgcmV0dmFsID0gMDsKKworCWRiZygyLCAiJXM6IGVudGVyLCBjb3VudCA9ICVaZCIsIF9fRlVOQ1RJT05fXywgY291bnQpOworCisJZGV2ID0gKHN0cnVjdCBsZWdvX3VzYl90b3dlciAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKworCS8qIGxvY2sgdGhpcyBvYmplY3QgKi8KKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmZGV2LT5zZW0pKSB7CisJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKKwkJZ290byBleGl0OworCX0KKworCS8qIHZlcmlmeSB0aGF0IHRoZSBkZXZpY2Ugd2Fzbid0IHVucGx1Z2dlZCAqLworCWlmIChkZXYtPnVkZXYgPT0gTlVMTCkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQllcnIoIk5vIGRldmljZSBvciBkZXZpY2UgdW5wbHVnZ2VkICVkIiwgcmV0dmFsKTsKKwkJZ290byB1bmxvY2tfZXhpdDsKKwl9CisKKwkvKiB2ZXJpZnkgdGhhdCB3ZSBhY3R1YWxseSBoYXZlIHNvbWUgZGF0YSB0byB3cml0ZSAqLworCWlmIChjb3VudCA9PSAwKSB7CisJCWRiZygxLCAiJXM6IHdyaXRlIHJlcXVlc3Qgb2YgMCBieXRlcyIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gdW5sb2NrX2V4aXQ7CisJfQorCisJLyogd2FpdCB1bnRpbCBwcmV2aW91cyB0cmFuc2ZlciBpcyBmaW5pc2hlZCAqLworCXdoaWxlIChkZXYtPmludGVycnVwdF9vdXRfYnVzeSkgeworCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCXJldHZhbCA9IC1FQUdBSU47CisJCQlnb3RvIHVubG9ja19leGl0OworCQl9CisJCXJldHZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSAoZGV2LT53cml0ZV93YWl0LCAhZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3kpOworCQlpZiAocmV0dmFsKSB7CisJCQlnb3RvIHVubG9ja19leGl0OworCQl9CisJfQorCisJLyogd3JpdGUgdGhlIGRhdGEgaW50byBpbnRlcnJ1cHRfb3V0X2J1ZmZlciBmcm9tIHVzZXJzcGFjZSAqLworCWJ5dGVzX3RvX3dyaXRlID0gbWluX3QoaW50LCBjb3VudCwgd3JpdGVfYnVmZmVyX3NpemUpOworCWRiZyg0LCAiJXM6IGNvdW50ID0gJVpkLCBieXRlc190b193cml0ZSA9ICVaZCIsIF9fRlVOQ1RJT05fXywgY291bnQsIGJ5dGVzX3RvX3dyaXRlKTsKKworCWlmIChjb3B5X2Zyb21fdXNlciAoZGV2LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlciwgYnVmZmVyLCBieXRlc190b193cml0ZSkpIHsKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZ290byB1bmxvY2tfZXhpdDsKKwl9CisKKwkvKiBzZW5kIG9mZiB0aGUgdXJiICovCisJdXNiX2ZpbGxfaW50X3VyYihkZXYtPmludGVycnVwdF9vdXRfdXJiLAorCQkJIGRldi0+dWRldiwKKwkJCSB1c2Jfc25kaW50cGlwZShkZXYtPnVkZXYsIGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkgZGV2LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlciwKKwkJCSBieXRlc190b193cml0ZSwKKwkJCSB0b3dlcl9pbnRlcnJ1cHRfb3V0X2NhbGxiYWNrLAorCQkJIGRldiwKKwkJCSBkZXYtPmludGVycnVwdF9vdXRfaW50ZXJ2YWwpOworCisJZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3kgPSAxOworCXdtYigpOworCisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKGRldi0+aW50ZXJydXB0X291dF91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3kgPSAwOworCQllcnIoIkNvdWxkbid0IHN1Ym1pdCBpbnRlcnJ1cHRfb3V0X3VyYiAlZCIsIHJldHZhbCk7CisJCWdvdG8gdW5sb2NrX2V4aXQ7CisJfQorCXJldHZhbCA9IGJ5dGVzX3RvX3dyaXRlOworCit1bmxvY2tfZXhpdDoKKwkvKiB1bmxvY2sgdGhlIGRldmljZSAqLworCXVwICgmZGV2LT5zZW0pOworCitleGl0OgorCWRiZygyLCAiJXM6IGxlYXZlLCByZXR1cm4gdmFsdWUgJWQiLCBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qKgorICoJdG93ZXJfaW50ZXJydXB0X2luX2NhbGxiYWNrCisgKi8KK3N0YXRpYyB2b2lkIHRvd2VyX2ludGVycnVwdF9pbl9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgbGVnb191c2JfdG93ZXIgKmRldiA9IChzdHJ1Y3QgbGVnb191c2JfdG93ZXIgKil1cmItPmNvbnRleHQ7CisJaW50IHJldHZhbDsKKworCWRiZyg0LCAiJXM6IGVudGVyLCBzdGF0dXMgJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKworCWxlZ29fdXNiX3Rvd2VyX2RlYnVnX2RhdGEoNSwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fAorCQkgICAgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwKKwkJICAgIHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pIHsKKwkJCWdvdG8gZXhpdDsKKwkJfSBlbHNlIHsKKwkJCWRiZygxLCAiJXM6IG5vbnplcm8gc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQkJZ290byByZXN1Ym1pdDsgLyogbWF5YmUgd2UgY2FuIHJlY292ZXIgKi8KKwkJfQorCX0KKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAwKSB7CisJCXNwaW5fbG9jayAoJmRldi0+cmVhZF9idWZmZXJfbG9jayk7CisJCWlmIChkZXYtPnJlYWRfYnVmZmVyX2xlbmd0aCArIHVyYi0+YWN0dWFsX2xlbmd0aCA8IHJlYWRfYnVmZmVyX3NpemUpIHsKKwkJCW1lbWNweSAoZGV2LT5yZWFkX2J1ZmZlciArIGRldi0+cmVhZF9idWZmZXJfbGVuZ3RoLAorCQkJCWRldi0+aW50ZXJydXB0X2luX2J1ZmZlciwKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJZGV2LT5yZWFkX2J1ZmZlcl9sZW5ndGggKz0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCQkJZGV2LT5yZWFkX2xhc3RfYXJyaXZhbCA9IGppZmZpZXM7CisJCQlkYmcoMywgIiVzOiByZWNlaXZlZCAlZCBieXRlcyIsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiByZWFkX2J1ZmZlciBvdmVyZmxvdywgJWQgYnl0ZXMgZHJvcHBlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJfQorCQlzcGluX3VubG9jayAoJmRldi0+cmVhZF9idWZmZXJfbG9jayk7CisJfQorCityZXN1Ym1pdDoKKwkvKiByZXN1Ym1pdCBpZiB3ZSdyZSBzdGlsbCBydW5uaW5nICovCisJaWYgKGRldi0+aW50ZXJydXB0X2luX3J1bm5pbmcgJiYgZGV2LT51ZGV2KSB7CisJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiIChkZXYtPmludGVycnVwdF9pbl91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmV0dmFsKSB7CisJCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgKCVkKSIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwkJfQorCX0KKworZXhpdDoKKwlkZXYtPmludGVycnVwdF9pbl9kb25lID0gMTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUgKCZkZXYtPnJlYWRfd2FpdCk7CisKKwlsZWdvX3VzYl90b3dlcl9kZWJ1Z19kYXRhKDUsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJZGJnKDQsICIlczogbGVhdmUsIHN0YXR1cyAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworfQorCisKKy8qKgorICoJdG93ZXJfaW50ZXJydXB0X291dF9jYWxsYmFjaworICovCitzdGF0aWMgdm9pZCB0b3dlcl9pbnRlcnJ1cHRfb3V0X2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBsZWdvX3VzYl90b3dlciAqZGV2ID0gKHN0cnVjdCBsZWdvX3VzYl90b3dlciAqKXVyYi0+Y29udGV4dDsKKworCWRiZyg0LCAiJXM6IGVudGVyLCBzdGF0dXMgJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwlsZWdvX3VzYl90b3dlcl9kZWJ1Z19kYXRhKDUsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwkvKiBzeW5jL2FzeW5jIHVubGluayBmYXVsdHMgYXJlbid0IGVycm9ycyAqLworCWlmICh1cmItPnN0YXR1cyAmJiAhKHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwKKwkJCSAgICAgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwKKwkJCSAgICAgdXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikpIHsKKwkJZGJnKDEsICIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCX0KKworCWRldi0+aW50ZXJydXB0X291dF9idXN5ID0gMDsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+d3JpdGVfd2FpdCk7CisKKwlsZWdvX3VzYl90b3dlcl9kZWJ1Z19kYXRhKDUsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJZGJnKDQsICIlczogbGVhdmUsIHN0YXR1cyAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworfQorCisKKy8qKgorICoJdG93ZXJfcHJvYmUKKyAqCisgKglDYWxsZWQgYnkgdGhlIHVzYiBjb3JlIHdoZW4gYSBuZXcgZGV2aWNlIGlzIGNvbm5lY3RlZCB0aGF0IGl0IHRoaW5rcworICoJdGhpcyBkcml2ZXIgbWlnaHQgYmUgaW50ZXJlc3RlZCBpbi4KKyAqLworc3RhdGljIGludCB0b3dlcl9wcm9iZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCXN0cnVjdCBsZWdvX3VzYl90b3dlciAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciogZW5kcG9pbnQ7CisJc3RydWN0IHRvd2VyX2dldF92ZXJzaW9uX3JlcGx5IGdldF92ZXJzaW9uX3JlcGx5OworCWludCBpOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCWludCByZXN1bHQ7CisKKwlkYmcoMiwgIiVzOiBlbnRlciIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAodWRldiA9PSBOVUxMKSB7CisJCWluZm8gKCJ1ZGV2IGlzIE5VTEwuIik7CisJfQorCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbnRpYWxpemUgaXQgKi8KKworCWRldiA9IGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgbGVnb191c2JfdG93ZXIpLCBHRlBfS0VSTkVMKTsKKworCWlmIChkZXYgPT0gTlVMTCkgeworCQllcnIgKCJPdXQgb2YgbWVtb3J5Iik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpbml0X01VVEVYICgmZGV2LT5zZW0pOworCisJZGV2LT51ZGV2ID0gdWRldjsKKwlkZXYtPm9wZW5fY291bnQgPSAwOworCisJZGV2LT5yZWFkX2J1ZmZlciA9IE5VTEw7CisJZGV2LT5yZWFkX2J1ZmZlcl9sZW5ndGggPSAwOworCWRldi0+cmVhZF9wYWNrZXRfbGVuZ3RoID0gMDsKKwlzcGluX2xvY2tfaW5pdCAoJmRldi0+cmVhZF9idWZmZXJfbG9jayk7CisJZGV2LT5wYWNrZXRfdGltZW91dF9qaWZmaWVzID0gcGFja2V0X3RpbWVvdXQgKiBIWiAvIDEwMDA7CisJZGV2LT5yZWFkX2xhc3RfYXJyaXZhbCA9IGppZmZpZXM7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkICgmZGV2LT5yZWFkX3dhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZkZXYtPndyaXRlX3dhaXQpOworCisJZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyID0gTlVMTDsKKwlkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludCA9IE5VTEw7CisJZGV2LT5pbnRlcnJ1cHRfaW5fdXJiID0gTlVMTDsKKwlkZXYtPmludGVycnVwdF9pbl9ydW5uaW5nID0gMDsKKwlkZXYtPmludGVycnVwdF9pbl9kb25lID0gMDsKKworCWRldi0+aW50ZXJydXB0X291dF9idWZmZXIgPSBOVUxMOworCWRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludCA9IE5VTEw7CisJZGV2LT5pbnRlcnJ1cHRfb3V0X3VyYiA9IE5VTEw7CisJZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3kgPSAwOworCisJaWZhY2VfZGVzYyA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CisKKwkvKiBzZXQgdXAgdGhlIGVuZHBvaW50IGluZm9ybWF0aW9uICovCisJZm9yIChpID0gMDsgaSA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgKytpKSB7CisJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7CisKKwkJaWYgKCgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfSU4pICYmCisJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSkgeworCQkJZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQgPSBlbmRwb2ludDsKKwkJfQorCisJCWlmICgoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKSA9PSBVU0JfRElSX09VVCkgJiYKKwkJICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpKSB7CisJCQlkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQgPSBlbmRwb2ludDsKKwkJfQorCX0KKwlpZihkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludCA9PSBOVUxMKSB7CisJCWVycigiaW50ZXJydXB0IGluIGVuZHBvaW50IG5vdCBmb3VuZCIpOworCQlnb3RvIGVycm9yOworCX0KKwlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50ID09IE5VTEwpIHsKKwkJZXJyKCJpbnRlcnJ1cHQgb3V0IGVuZHBvaW50IG5vdCBmb3VuZCIpOworCQlnb3RvIGVycm9yOworCX0KKworCWRldi0+cmVhZF9idWZmZXIgPSBrbWFsbG9jIChyZWFkX2J1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+cmVhZF9idWZmZXIpIHsKKwkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSByZWFkX2J1ZmZlciIpOworCQlnb3RvIGVycm9yOworCX0KKwlkZXYtPmludGVycnVwdF9pbl9idWZmZXIgPSBrbWFsbG9jIChsZTE2X3RvX2NwdShkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+d01heFBhY2tldFNpemUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+aW50ZXJydXB0X2luX2J1ZmZlcikgeworCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIGludGVycnVwdF9pbl9idWZmZXIiKTsKKwkJZ290byBlcnJvcjsKKwl9CisJZGV2LT5pbnRlcnJ1cHRfaW5fdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+aW50ZXJydXB0X2luX3VyYikgeworCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIGludGVycnVwdF9pbl91cmIiKTsKKwkJZ290byBlcnJvcjsKKwl9CisJZGV2LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlciA9IGttYWxsb2MgKHdyaXRlX2J1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+aW50ZXJydXB0X291dF9idWZmZXIpIHsKKwkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHRfb3V0X2J1ZmZlciIpOworCQlnb3RvIGVycm9yOworCX0KKwlkZXYtPmludGVycnVwdF9vdXRfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+aW50ZXJydXB0X291dF91cmIpIHsKKwkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHRfb3V0X3VyYiIpOworCQlnb3RvIGVycm9yOworCX0KKwlkZXYtPmludGVycnVwdF9pbl9pbnRlcnZhbCA9IGludGVycnVwdF9pbl9pbnRlcnZhbCA/IGludGVycnVwdF9pbl9pbnRlcnZhbCA6IGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50LT5iSW50ZXJ2YWw7CisJZGV2LT5pbnRlcnJ1cHRfb3V0X2ludGVydmFsID0gaW50ZXJydXB0X291dF9pbnRlcnZhbCA/IGludGVycnVwdF9vdXRfaW50ZXJ2YWwgOiBkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPmJJbnRlcnZhbDsKKworCS8qIHdlIGNhbiByZWdpc3RlciB0aGUgZGV2aWNlIG5vdywgYXMgaXQgaXMgcmVhZHkgKi8KKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRlcmZhY2UsIGRldik7CisKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2IChpbnRlcmZhY2UsICZ0b3dlcl9jbGFzcyk7CisKKwlpZiAocmV0dmFsKSB7CisJCS8qIHNvbWV0aGluZyBwcmV2ZW50ZWQgdXMgZnJvbSByZWdpc3RlcmluZyB0aGlzIGRyaXZlciAqLworCQllcnIgKCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuIik7CisJCXVzYl9zZXRfaW50ZmRhdGEgKGludGVyZmFjZSwgTlVMTCk7CisJCWdvdG8gZXJyb3I7CisJfQorCWRldi0+bWlub3IgPSBpbnRlcmZhY2UtPm1pbm9yOworCisJLyogbGV0IHRoZSB1c2VyIGtub3cgd2hhdCBub2RlIHRoaXMgZGV2aWNlIGlzIG5vdyBhdHRhY2hlZCB0byAqLworCWluZm8gKCJMRUdPIFVTQiBUb3dlciAjJWQgbm93IGF0dGFjaGVkIHRvIG1ham9yICVkIG1pbm9yICVkIiwgKGRldi0+bWlub3IgLSBMRUdPX1VTQl9UT1dFUl9NSU5PUl9CQVNFKSwgVVNCX01BSk9SLCBkZXYtPm1pbm9yKTsKKworCS8qIGdldCB0aGUgZmlybXdhcmUgdmVyc2lvbiBhbmQgbG9nIGl0ICovCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnICh1ZGV2LAorCQkJCSAgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAorCQkJCSAgTEVHT19VU0JfVE9XRVJfUkVRVUVTVF9HRVRfVkVSU0lPTiwKKwkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCSAgMCwKKwkJCQkgIDAsCisJCQkJICAmZ2V0X3ZlcnNpb25fcmVwbHksCisJCQkJICBzaXplb2YoZ2V0X3ZlcnNpb25fcmVwbHkpLAorCQkJCSAgMTAwMCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZXJyKCJMRUdPIFVTQiBUb3dlciBnZXQgdmVyc2lvbiBjb250cm9sIHJlcXVlc3QgZmFpbGVkIik7CisJCXJldHZhbCA9IHJlc3VsdDsKKwkJZ290byBlcnJvcjsKKwl9CisJaW5mbygiTEVHTyBVU0IgVG93ZXIgZmlybXdhcmUgdmVyc2lvbiBpcyAlZC4lZCBidWlsZCAlZCIsCisJICAgICBnZXRfdmVyc2lvbl9yZXBseS5tYWpvciwKKwkgICAgIGdldF92ZXJzaW9uX3JlcGx5Lm1pbm9yLAorCSAgICAgbGUxNl90b19jcHUoZ2V0X3ZlcnNpb25fcmVwbHkuYnVpbGRfbm8pKTsKKworCitleGl0OgorCWRiZygyLCAiJXM6IGxlYXZlLCByZXR1cm4gdmFsdWUgMHglLjhseCAoZGV2KSIsIF9fRlVOQ1RJT05fXywgKGxvbmcpIGRldik7CisKKwlyZXR1cm4gcmV0dmFsOworCitlcnJvcjoKKwl0b3dlcl9kZWxldGUoZGV2KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qKgorICoJdG93ZXJfZGlzY29ubmVjdAorICoKKyAqCUNhbGxlZCBieSB0aGUgdXNiIGNvcmUgd2hlbiB0aGUgZGV2aWNlIGlzIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLgorICovCitzdGF0aWMgdm9pZCB0b3dlcl9kaXNjb25uZWN0IChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBsZWdvX3VzYl90b3dlciAqZGV2OworCWludCBtaW5vcjsKKworCWRiZygyLCAiJXM6IGVudGVyIiwgX19GVU5DVElPTl9fKTsKKworCWRvd24gKCZkaXNjb25uZWN0X3NlbSk7CisKKwlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRlcmZhY2UpOworCXVzYl9zZXRfaW50ZmRhdGEgKGludGVyZmFjZSwgTlVMTCk7CisKKworCWRvd24gKCZkZXYtPnNlbSk7CisKKwltaW5vciA9IGRldi0+bWlub3I7CisKKwkvKiBnaXZlIGJhY2sgb3VyIG1pbm9yICovCisJdXNiX2RlcmVnaXN0ZXJfZGV2IChpbnRlcmZhY2UsICZ0b3dlcl9jbGFzcyk7CisKKwkvKiBpZiB0aGUgZGV2aWNlIGlzIG5vdCBvcGVuZWQsIHRoZW4gd2UgY2xlYW4gdXAgcmlnaHQgbm93ICovCisJaWYgKCFkZXYtPm9wZW5fY291bnQpIHsKKwkJdXAgKCZkZXYtPnNlbSk7CisJCXRvd2VyX2RlbGV0ZSAoZGV2KTsKKwl9IGVsc2UgeworCQlkZXYtPnVkZXYgPSBOVUxMOworCQl1cCAoJmRldi0+c2VtKTsKKwl9CisKKwl1cCAoJmRpc2Nvbm5lY3Rfc2VtKTsKKworCWluZm8oIkxFR08gVVNCIFRvd2VyICMlZCBub3cgZGlzY29ubmVjdGVkIiwgKG1pbm9yIC0gTEVHT19VU0JfVE9XRVJfTUlOT1JfQkFTRSkpOworCisJZGJnKDIsICIlczogbGVhdmUiLCBfX0ZVTkNUSU9OX18pOworfQorCisKKworLyoqCisgKglsZWdvX3VzYl90b3dlcl9pbml0CisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGxlZ29fdXNiX3Rvd2VyX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCWludCByZXR2YWwgPSAwOworCisJZGJnKDIsICIlczogZW50ZXIiLCBfX0ZVTkNUSU9OX18pOworCisJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmdG93ZXJfZHJpdmVyKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQgZm9yIHRoZSAiX19GSUxFX18iIGRyaXZlci4gRXJyb3IgbnVtYmVyICVkIiwgcmVzdWx0KTsKKwkJcmV0dmFsID0gLTE7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisKK2V4aXQ6CisJZGJnKDIsICIlczogbGVhdmUsIHJldHVybiB2YWx1ZSAlZCIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKworLyoqCisgKglsZWdvX3VzYl90b3dlcl9leGl0CisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBsZWdvX3VzYl90b3dlcl9leGl0KHZvaWQpCit7CisJZGJnKDIsICIlczogZW50ZXIiLCBfX0ZVTkNUSU9OX18pOworCisJLyogZGVyZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJdXNiX2RlcmVnaXN0ZXIgKCZ0b3dlcl9kcml2ZXIpOworCisJZGJnKDIsICIlczogbGVhdmUiLCBfX0ZVTkNUSU9OX18pOworfQorCittb2R1bGVfaW5pdCAobGVnb191c2JfdG93ZXJfaW5pdCk7Cittb2R1bGVfZXhpdCAobGVnb191c2JfdG93ZXJfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworI2lmZGVmIE1PRFVMRV9MSUNFTlNFCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldGtpdC5jIGIvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0a2l0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRiZjhlOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldGtpdC5jCkBAIC0wLDAgKzEsNTg2IEBACisvKgorICogVVNCIFBoaWRnZXRJbnRlcmZhY2VLaXQgZHJpdmVyIDEuMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgVVNCIFBoaWRnZXRJbnRlcmZhY2VLaXQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2RlZmluZSBEUklWRVJfQVVUSE9SICJTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBQaGlkZ2V0SW50ZXJmYWNlS2l0IERyaXZlciIKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0dMQUIJCTB4MDZjMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDAwNAkweDAwNDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQ4ODgJMHgwMDQ1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUMDQ3CTB4MDA1MQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDA4OAkweDAwNTMKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUAkJMHgwOTI1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUODg0CTB4ODIwMQorCisjZGVmaW5lIE1BWF9JTlRFUkZBQ0VTCQkJOAorCitzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCB7CisJaW50IHNlbnNvcnM7CisJaW50IGlucHV0czsKKwlpbnQgb3V0cHV0czsKKwlpbnQgaGFzX2xjZDsKK307CisjZGVmaW5lIGlma2l0KF9zZW5zb3JzLCBfaW5wdXRzLCBfb3V0cHV0cywgX2xjZCkJCQlcCitzdGF0aWMgc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgcGhfIyNfc2Vuc29ycyMjX2lucHV0cyMjX291dHB1dHMgPSB7CVwKKwkuc2Vuc29ycwk9IF9zZW5zb3JzLAkJCQkJXAorCS5pbnB1dHMJCT0gX2lucHV0cywJCQkJCVwKKwkub3V0cHV0cwk9IF9vdXRwdXRzLAkJCQkJXAorCS5oYXNfbGNkCT0gX2xjZCwJCQkJCQlcCit9OworaWZraXQoMCwgMCwgNCwgMCk7CitpZmtpdCg4LCA4LCA4LCAwKTsKK2lma2l0KDAsIDQsIDcsIDEpOworaWZraXQoOCwgOCwgNCwgMCk7CitpZmtpdCgwLCA4LCA4LCAxKTsKKworc3RydWN0IHBoaWRnZXRfaW50ZXJmYWNla2l0IHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKKwlzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCAqaWZraXQ7CisJaW50IG91dHB1dHNbTUFYX0lOVEVSRkFDRVNdOworCWludCBpbnB1dHNbTUFYX0lOVEVSRkFDRVNdOworCWludCBzZW5zb3JzW01BWF9JTlRFUkZBQ0VTXTsKKwl1OCBsY2RfZmlsZXNfb247CisKKwlzdHJ1Y3QgdXJiICppcnE7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKKwlkbWFfYWRkcl90IGRhdGFfZG1hOworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDAwNCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGhfMDA0fSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUODg4KSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwaF84ODh9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQwNDcpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzA0N30sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDA4OCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGhfMDg4fSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1dJU0VHUk9VUCwgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQ4ODQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzg4NH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOworCitzdGF0aWMgaW50IGNoYW5nZV9vdXRwdXRzKHN0cnVjdCBwaGlkZ2V0X2ludGVyZmFjZWtpdCAqa2l0LCBpbnQgb3V0cHV0X251bSwgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJaW50IHJldHZhbDsKKwlpbnQgbjsKKworCWJ1ZmZlciA9IGttYWxsb2MoNCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2Vycigma2l0LT51ZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsCisJCQlfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlraXQtPm91dHB1dHNbb3V0cHV0X251bV0gPSBlbmFibGU7CisJbWVtc2V0KGJ1ZmZlciwgMCwgNCk7CisJZm9yIChuPTA7IG48ODsgbisrKSB7CisJCWlmIChraXQtPm91dHB1dHNbbl0pIHsKKwkJCWJ1ZmZlclswXSB8PSAxIDw8IG47CisJCX0KKwl9CisKKwlkZXZfZGJnKCZraXQtPnVkZXYtPmRldiwgInNlbmRpbmcgZGF0YTogJTAyeFxuIiwgYnVmZmVyWzBdKTsKKworCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhraXQtPnVkZXYsCisJCQkgdXNiX3NuZGN0cmxwaXBlKGtpdC0+dWRldiwgMCksCisJCQkgMHgwOSwgMHgyMSwgMHgwMjAwLCAweDAwMDAsIGJ1ZmZlciwgNCwgMjAwMCk7CisKKwlpZiAocmV0dmFsICE9IDQpCisJCWRldl9lcnIoJmtpdC0+dWRldi0+ZGV2LCAidXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVkXG4iLCAKKwkJCQlyZXR2YWwpOworCWtmcmVlKGJ1ZmZlcik7CisKKwlyZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgY2hhbmdlX3N0cmluZyhzdHJ1Y3QgcGhpZGdldF9pbnRlcmZhY2VraXQgKmtpdCwgY29uc3QgY2hhciAqZGlzcGxheSwgdW5zaWduZWQgY2hhciByb3cpCit7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworICAgICAgICB1bnNpZ25lZCBjaGFyICpmb3JtX2J1ZmZlcjsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKwlpbnQgaSxqLCBsZW4sIGJ1Zl9wdHI7CisJCisJYnVmZmVyID0ga21hbGxvYyg4LCBHRlBfS0VSTkVMKTsKKwlmb3JtX2J1ZmZlciA9IGttYWxsb2MoMzAsIEdGUF9LRVJORUwpOworCWlmICgoIWJ1ZmZlcikgfHwgKCFmb3JtX2J1ZmZlcikpIHsKKwkJZGV2X2Vycigma2l0LT51ZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlsZW4gPSBzdHJsZW4oZGlzcGxheSk7CisJaWYgKGxlbiA+IDIwKQorCQlsZW4gPSAyMDsKKworCWRldl9kYmcoJmtpdC0+dWRldi0+ZGV2LCAiU2V0dGluZyBMQ0QgbGluZSAlZCB0byAlc1xuIiwgcm93LCBkaXNwbGF5KTsKKworCWZvcm1fYnVmZmVyWzBdID0gcm93ICogMHg0MCArIDB4ODA7CisJZm9ybV9idWZmZXJbMV0gPSAweDAyOworCWJ1Zl9wdHIgPSAyOworCWZvciAoaSA9IDA7IGk8bGVuOyBpKyspCisJCWZvcm1fYnVmZmVyW2J1Zl9wdHIrK10gPSBkaXNwbGF5W2ldOworCisJZm9yIChpID0gMDsgaSA8ICgyMCAtIGxlbik7IGkrKykKKwkJZm9ybV9idWZmZXJbYnVmX3B0cisrXSA9IDB4MjA7CisJZm9ybV9idWZmZXJbYnVmX3B0cisrXSA9IDB4MDE7CisJZm9ybV9idWZmZXJbYnVmX3B0cisrXSA9IHJvdyAqIDB4NDAgKyAweDgwICsgc3RybGVuKGRpc3BsYXkpOworCisJZm9yIChpID0gMDsgaSA8IGJ1Zl9wdHI7IGkgKz0gNykgeworCQlpZiAoKGJ1Zl9wdHIgLSBpKSA+IDcpCisJCQlsZW4gPSA3OworCQllbHNlCisJCQlsZW4gPSAoYnVmX3B0ciAtIGkpOworCQlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspCisJCQlidWZmZXJbal0gPSBmb3JtX2J1ZmZlcltpICsgal07CisJCWJ1ZmZlcls3XSA9IGxlbjsKKworCQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coa2l0LT51ZGV2LAorCQkJCSB1c2Jfc25kY3RybHBpcGUoa2l0LT51ZGV2LCAwKSwKKwkJCQkgMHgwOSwgMHgyMSwgMHgwMjAwLCAweDAwMDAsIGJ1ZmZlciwgOCwgMjAwMCk7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJZ290byBleGl0OworCX0KKworCXJldHZhbCA9IDA7CitleGl0OgorCWtmcmVlKGJ1ZmZlcik7CisJa2ZyZWUoZm9ybV9idWZmZXIpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworI2RlZmluZSBzZXRfbGNkX2xpbmUobnVtYmVyKQlcCitzdGF0aWMgc3NpemVfdCBsY2RfbGluZV8jI251bWJlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCit7CQkJCQkJCQkJCQlcCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQkJCVwKKwlzdHJ1Y3QgcGhpZGdldF9pbnRlcmZhY2VraXQgKmtpdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CQkJXAorCWNoYW5nZV9zdHJpbmcoa2l0LCBidWYsIG51bWJlciAtIDEpOwkJCQkJCVwKKwlyZXR1cm4gY291bnQ7CQkJCQkJCQkJXAorfQkJCQkJCQkJCQkJXAorc3RhdGljIERFVklDRV9BVFRSKGxjZF9saW5lXyMjbnVtYmVyLCBTX0lXVUdPLCBOVUxMLCBsY2RfbGluZV8jI251bWJlcik7CitzZXRfbGNkX2xpbmUoMSk7CitzZXRfbGNkX2xpbmUoMik7CisKK3N0YXRpYyBzc2l6ZV90IHNldF9iYWNrbGlnaHQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgcGhpZGdldF9pbnRlcmZhY2VraXQgKmtpdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJaW50IGVuYWJsZWQ7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCQorCWJ1ZmZlciA9IGttYWxsb2MoOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2Vycigma2l0LT51ZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJmVuYWJsZWQpIDwgMSkgeworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCW1lbXNldChidWZmZXIsIDB4MDAsIDgpOworCWlmIChlbmFibGVkKQorCQlidWZmZXJbMF0gPSAweDAxOworCWJ1ZmZlcls3XSA9IDB4MTE7CisKKwlkZXZfZGJnKCZraXQtPnVkZXYtPmRldiwgIlNldHRpbmcgYmFja2xpZ2h0IHRvICVzXG4iLCBlbmFibGVkID8gIm9uIiA6ICJvZmYiKTsKKwkKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coa2l0LT51ZGV2LAorCQkJIHVzYl9zbmRjdHJscGlwZShraXQtPnVkZXYsIDApLAorCQkJIDB4MDksIDB4MjEsIDB4MDIwMCwgMHgwMDAwLCBidWZmZXIsIDgsIDIwMDApOworCWlmIChyZXR2YWwgPCAwKQorCQlnb3RvIGV4aXQ7CisKKwlyZXR2YWwgPSBjb3VudDsKK2V4aXQ6CisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcmV0dmFsOworfQorc3RhdGljIERFVklDRV9BVFRSKGJhY2tsaWdodCwgU19JV1VHTywgTlVMTCwgc2V0X2JhY2tsaWdodCk7CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9sY2RfZmlsZXMoc3RydWN0IHBoaWRnZXRfaW50ZXJmYWNla2l0ICpraXQpCit7CisJaWYgKGtpdC0+bGNkX2ZpbGVzX29uKSB7CisJCWRldl9kYmcoJmtpdC0+dWRldi0+ZGV2LCAiUmVtb3ZpbmcgbGNkIGZpbGVzXG4iKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZraXQtPmludGYtPmRldiwgJmRldl9hdHRyX2xjZF9saW5lXzEpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmtpdC0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfbGNkX2xpbmVfMik7CisJCWRldmljZV9yZW1vdmVfZmlsZSgma2l0LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9iYWNrbGlnaHQpOworCX0KK30KKworc3RhdGljIHNzaXplX3QgZW5hYmxlX2xjZF9maWxlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCBwaGlkZ2V0X2ludGVyZmFjZWtpdCAqa2l0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlpbnQgZW5hYmxlOworCQorCWlmIChraXQtPmlma2l0LT5oYXNfbGNkID09IDApCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHNzY2FuZihidWYsICIlZCIsICZlbmFibGUpIDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZW5hYmxlKSB7CisJCWlmICgha2l0LT5sY2RfZmlsZXNfb24pIHsKKwkJCWRldl9kYmcoJmtpdC0+dWRldi0+ZGV2LCAiQWRkaW5nIGxjZCBmaWxlc1xuIik7CisJCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmtpdC0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfbGNkX2xpbmVfMSk7CisJCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmtpdC0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfbGNkX2xpbmVfMik7CisJCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmtpdC0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfYmFja2xpZ2h0KTsKKwkJCWtpdC0+bGNkX2ZpbGVzX29uID0gMTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChraXQtPmxjZF9maWxlc19vbikgeworCQkJcmVtb3ZlX2xjZF9maWxlcyhraXQpOworCQkJa2l0LT5sY2RfZmlsZXNfb24gPSAwOworCQl9CisJfQorCQorCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihsY2QsIFNfSVdVR08sIE5VTEwsIGVuYWJsZV9sY2RfZmlsZXMpOworCitzdGF0aWMgdm9pZCBpbnRlcmZhY2VraXRfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHBoaWRnZXRfaW50ZXJmYWNla2l0ICpraXQgPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyID0ga2l0LT5kYXRhOworCWludCBzdGF0dXM7CisJaW50IG47CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgkJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoJLyogdW5saW5rICovCisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJcmV0dXJuOworCS8qIC1FUElQRTogIHNob3VsZCBjbGVhciB0aGUgaGFsdCAqLworCWRlZmF1bHQ6CQkvKiBlcnJvciAqLworCQlnb3RvIHJlc3VibWl0OworCX0KKworCWZvciAobj0wOyBuPDg7IG4rKykgeworCQlraXQtPmlucHV0c1tuXSA9IGJ1ZmZlclsxXSAmICgxIDw8IG4pID8gMSA6IDA7CisJfQorCisJaWYgKGJ1ZmZlclswXSAmIDEpIHsKKwkJa2l0LT5zZW5zb3JzWzRdID0gYnVmZmVyWzJdICsgKGJ1ZmZlclszXSAmIDB4MGYpICogMjU2OworCQlraXQtPnNlbnNvcnNbNV0gPSBidWZmZXJbNF0gKyAoYnVmZmVyWzNdICYgMHhmMCkgKiAxNjsKKwkJa2l0LT5zZW5zb3JzWzZdID0gYnVmZmVyWzVdICsgKGJ1ZmZlcls2XSAmIDB4MGYpICogMjU2OworCQlraXQtPnNlbnNvcnNbN10gPSBidWZmZXJbN10gKyAoYnVmZmVyWzZdICYgMHhmMCkgKiAxNjsKKwl9IGVsc2UgeworCQlraXQtPnNlbnNvcnNbMF0gPSBidWZmZXJbMl0gKyAoYnVmZmVyWzNdICYgMHgwZikgKiAyNTY7CisJCWtpdC0+c2Vuc29yc1sxXSA9IGJ1ZmZlcls0XSArIChidWZmZXJbM10gJiAweGYwKSAqIDE2OworCQlraXQtPnNlbnNvcnNbMl0gPSBidWZmZXJbNV0gKyAoYnVmZmVyWzZdICYgMHgwZikgKiAyNTY7CisJCWtpdC0+c2Vuc29yc1szXSA9IGJ1ZmZlcls3XSArIChidWZmZXJbNl0gJiAweGYwKSAqIDE2OworCX0KKworcmVzdWJtaXQ6CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBTTEFCX0FUT01JQyk7CisJaWYgKHN0YXR1cykKKwkJZXJyKCJjYW4ndCByZXN1Ym1pdCBpbnRyLCAlcy0lcy9pbnRlcmZhY2VraXQwLCBzdGF0dXMgJWQiLAorCQkJa2l0LT51ZGV2LT5idXMtPmJ1c19uYW1lLAorCQkJa2l0LT51ZGV2LT5kZXZwYXRoLCBzdGF0dXMpOworfQorCisjZGVmaW5lIHNob3dfc2V0X291dHB1dCh2YWx1ZSkJCVwKK3N0YXRpYyBzc2l6ZV90IHNldF9vdXRwdXQjI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCAJXAorCQkJCQkJCXNpemVfdCBjb3VudCkJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKKwlzdHJ1Y3QgcGhpZGdldF9pbnRlcmZhY2VraXQgKmtpdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CVwKKwlpbnQgZW5hYmxlZDsJCQkJCQkJXAorCWludCByZXR2YWw7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJmVuYWJsZWQpIDwgMSkgewkJCQlcCisJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJcmV0dmFsID0gY2hhbmdlX291dHB1dHMoa2l0LCB2YWx1ZSAtIDEsIGVuYWJsZWQgPyAxIDogMCk7CVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogY291bnQ7CQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIHNzaXplX3Qgc2hvd19vdXRwdXQjI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAorCXN0cnVjdCBwaGlkZ2V0X2ludGVyZmFjZWtpdCAqa2l0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJXAorCQkJCQkJCQkJXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBraXQtPm91dHB1dHNbdmFsdWUgLSAxXSk7CQlcCit9CQkJCQkJCQkJXAorc3RhdGljIERFVklDRV9BVFRSKG91dHB1dCMjdmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLAkJCVwKKwkJc2hvd19vdXRwdXQjI3ZhbHVlLCBzZXRfb3V0cHV0IyN2YWx1ZSk7CitzaG93X3NldF9vdXRwdXQoMSk7CitzaG93X3NldF9vdXRwdXQoMik7CitzaG93X3NldF9vdXRwdXQoMyk7CitzaG93X3NldF9vdXRwdXQoNCk7CitzaG93X3NldF9vdXRwdXQoNSk7CitzaG93X3NldF9vdXRwdXQoNik7CitzaG93X3NldF9vdXRwdXQoNyk7CitzaG93X3NldF9vdXRwdXQoOCk7CS8qIHNob3VsZCBiZSBNQVhfSU5URVJGQUNFUyAtIDEgKi8KKworI2RlZmluZSBzaG93X2lucHV0KHZhbHVlKQlcCitzdGF0aWMgc3NpemVfdCBzaG93X2lucHV0IyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKKwlzdHJ1Y3QgcGhpZGdldF9pbnRlcmZhY2VraXQgKmtpdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwga2l0LT5pbnB1dHNbdmFsdWUgLSAxXSk7CQlcCit9CQkJCQkJCQkJXAorc3RhdGljIERFVklDRV9BVFRSKGlucHV0IyN2YWx1ZSwgU19JUlVHTywgc2hvd19pbnB1dCMjdmFsdWUsIE5VTEwpOworCitzaG93X2lucHV0KDEpOworc2hvd19pbnB1dCgyKTsKK3Nob3dfaW5wdXQoMyk7CitzaG93X2lucHV0KDQpOworc2hvd19pbnB1dCg1KTsKK3Nob3dfaW5wdXQoNik7CitzaG93X2lucHV0KDcpOworc2hvd19pbnB1dCg4KTsJCS8qIHNob3VsZCBiZSBNQVhfSU5URVJGQUNFUyAtIDEgKi8KKworI2RlZmluZSBzaG93X3NlbnNvcih2YWx1ZSkJXAorc3RhdGljIHNzaXplX3Qgc2hvd19zZW5zb3IjI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAorCXN0cnVjdCBwaGlkZ2V0X2ludGVyZmFjZWtpdCAqa2l0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJXAorCQkJCQkJCQkJXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBraXQtPnNlbnNvcnNbdmFsdWUgLSAxXSk7CQlcCit9CQkJCQkJCQkJXAorc3RhdGljIERFVklDRV9BVFRSKHNlbnNvciMjdmFsdWUsIFNfSVJVR08sIHNob3dfc2Vuc29yIyN2YWx1ZSwgTlVMTCk7CisKK3Nob3dfc2Vuc29yKDEpOworc2hvd19zZW5zb3IoMik7CitzaG93X3NlbnNvcigzKTsKK3Nob3dfc2Vuc29yKDQpOworc2hvd19zZW5zb3IoNSk7CitzaG93X3NlbnNvcig2KTsKK3Nob3dfc2Vuc29yKDcpOworc2hvd19zZW5zb3IoOCk7CQkvKiBzaG91bGQgYmUgTUFYX0lOVEVSRkFDRVMgLSAxICovCisKK3N0YXRpYyBpbnQgaW50ZXJmYWNla2l0X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IHBoaWRnZXRfaW50ZXJmYWNla2l0ICpraXQ7CisJc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgKmlma2l0OworCWludCBwaXBlLCBtYXhwOworCisJaWZraXQgPSAoc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgKilpZC0+ZHJpdmVyX2luZm87CisJaWYgKCFpZmtpdCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpbnRlcmZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKwlpZiAoaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHMgIT0gMSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLmRlc2M7CisJaWYgKCEoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSkgCisJCXJldHVybiAtRU5PREVWOworCS8qCisJICogYm1BdHRyaWJ1dGVzCisJICovCisJcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKGRldiwgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOworCW1heHAgPSB1c2JfbWF4cGFja2V0KGRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOworCQorCWtpdCA9IGttYWxsb2Moc2l6ZW9mKCpraXQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoa2l0ICA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmludGYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChraXQsIDAsIHNpemVvZigqa2l0KSk7CisJa2l0LT5pZmtpdCA9IGlma2l0OworCisJa2l0LT5kYXRhID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIDgsIFNMQUJfQVRPTUlDLCAma2l0LT5kYXRhX2RtYSk7CisJaWYgKCFraXQtPmRhdGEpIHsKKwkJa2ZyZWUoa2l0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJa2l0LT5pcnEgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICgha2l0LT5pcnEpIHsKKwkJdXNiX2J1ZmZlcl9mcmVlKGRldiwgOCwga2l0LT5kYXRhLCBraXQtPmRhdGFfZG1hKTsKKwkJa2ZyZWUoa2l0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJa2l0LT51ZGV2ID0gdXNiX2dldF9kZXYoZGV2KTsKKwlraXQtPmludGYgPSBpbnRmOworCXVzYl9maWxsX2ludF91cmIoa2l0LT5pcnEsIGtpdC0+dWRldiwgcGlwZSwga2l0LT5kYXRhLAorCQkJKG1heHAgPiA4ID8gOCA6IG1heHApLAorCQkJaW50ZXJmYWNla2l0X2lycSwga2l0LCBlbmRwb2ludC0+YkludGVydmFsKTsKKwlraXQtPmlycS0+dHJhbnNmZXJfZG1hID0ga2l0LT5kYXRhX2RtYTsKKwlraXQtPmlycS0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGtpdCk7CisKKwlpZiAodXNiX3N1Ym1pdF91cmIoa2l0LT5pcnEsIEdGUF9LRVJORUwpKSB7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChpZmtpdC0+b3V0cHV0cyA+PSA0KSB7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0MSk7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0Mik7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0Myk7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0NCk7CisJfQorCWlmIChpZmtpdC0+b3V0cHV0cyA9PSA4KSB7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0NSk7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0Nik7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0Nyk7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0OCk7CisJfSAKKworCWlmIChpZmtpdC0+aW5wdXRzID49IDQpIHsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9pbnB1dDEpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2lucHV0Mik7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQzKTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9pbnB1dDQpOworCX0KKwlpZiAoaWZraXQtPmlucHV0cyA9PSA4KSB7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQ1KTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9pbnB1dDYpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2lucHV0Nyk7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQ4KTsKKwl9CisKKwlpZiAoaWZraXQtPnNlbnNvcnMgPj0gNCkgeworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3NlbnNvcjEpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3NlbnNvcjIpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3NlbnNvcjMpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3NlbnNvcjQpOworCX0KKwlpZiAoaWZraXQtPnNlbnNvcnMgPj0gNykgeworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3NlbnNvcjUpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3NlbnNvcjYpOworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3NlbnNvcjcpOworCX0KKwlpZiAoaWZraXQtPnNlbnNvcnMgPT0gOCkgeworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3NlbnNvcjgpOworCX0KKworCWlmIChpZmtpdC0+aGFzX2xjZCkKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9sY2QpOworCisJZGV2X2luZm8oJmludGYtPmRldiwgIlVTQiBQaGlkZ2V0SW50ZXJmYWNlS2l0ICVkLyVkLyVkIGF0dGFjaGVkXG4iLAorCQkJaWZraXQtPnNlbnNvcnMsIGlma2l0LT5pbnB1dHMsIGlma2l0LT5vdXRwdXRzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbnRlcmZhY2VraXRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBwaGlkZ2V0X2ludGVyZmFjZWtpdCAqa2l0OworCisJa2l0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwlpZiAoIWtpdCkKKwkJcmV0dXJuOworCisJaWYgKGtpdC0+aWZraXQtPm91dHB1dHMgPj0gNCkgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0MSk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQyKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX291dHB1dDMpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0NCk7CisJfQorCWlmIChraXQtPmlma2l0LT5vdXRwdXRzID09IDgpIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX291dHB1dDUpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0Nik7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQ3KTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX291dHB1dDgpOworCX0KKworCWlmIChraXQtPmlma2l0LT5pbnB1dHMgPj0gNCkgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQxKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2lucHV0Mik7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9pbnB1dDMpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQ0KTsKKwl9CisJaWYgKGtpdC0+aWZraXQtPmlucHV0cyA9PSA4KSB7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9pbnB1dDUpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQ2KTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2lucHV0Nyk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9pbnB1dDgpOworCX0KKworCWlmIChraXQtPmlma2l0LT5zZW5zb3JzID49IDQpIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3NlbnNvcjEpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yMik7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZW5zb3IzKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3NlbnNvcjQpOworCX0KKwlpZiAoa2l0LT5pZmtpdC0+c2Vuc29ycyA+PSA3KSB7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZW5zb3I1KTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3NlbnNvcjYpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yNyk7CisJfQorCWlmIChraXQtPmlma2l0LT5zZW5zb3JzID09IDgpIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3NlbnNvcjgpOworCX0KKwlpZiAoa2l0LT5pZmtpdC0+aGFzX2xjZCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2xjZCk7CisKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IgUGhpZGdldEludGVyZmFjZUtpdCAlZC8lZC8lZCBkZXRhY2hlZFxuIiwKKwkJa2l0LT5pZmtpdC0+c2Vuc29ycywga2l0LT5pZmtpdC0+aW5wdXRzLCBraXQtPmlma2l0LT5vdXRwdXRzKTsKKworCXVzYl9raWxsX3VyYihraXQtPmlycSk7CisJdXNiX2ZyZWVfdXJiKGtpdC0+aXJxKTsKKwl1c2JfYnVmZmVyX2ZyZWUoa2l0LT51ZGV2LCA4LCBraXQtPmRhdGEsIGtpdC0+ZGF0YV9kbWEpOworCisJdXNiX3B1dF9kZXYoa2l0LT51ZGV2KTsKKwlrZnJlZShraXQpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaW50ZXJmYWNla2l0X2RyaXZlciA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9ICJwaGlkZ2V0a2l0IiwKKwkucHJvYmUgPSBpbnRlcmZhY2VraXRfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBpbnRlcmZhY2VraXRfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBpZF90YWJsZQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW50ZXJmYWNla2l0X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmaW50ZXJmYWNla2l0X2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXR2YWwpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGludGVyZmFjZWtpdF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmludGVyZmFjZWtpdF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChpbnRlcmZhY2VraXRfaW5pdCk7Cittb2R1bGVfZXhpdChpbnRlcmZhY2VraXRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0c2Vydm8uYyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldHNlcnZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJkMjkxNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldHNlcnZvLmMKQEAgLTAsMCArMSwzNDIgQEAKKy8qCisgKiBVU0IgUGhpZGdldFNlcnZvIGRyaXZlciAxLjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgU2VhbiBZb3VuZyA8c2VhbkBtZXNzLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBVU0IgUGhpZGdldFNlcnZvIHZlcnNpb24gMi4wIGFuZCAzLjAgc2Vydm8gCisgKiBjb250cm9sbGVycyBhdmFpbGFibGUgYXQ6IGh0dHA6Ly93d3cucGhpZGdldHMuY29tLyAKKyAqCisgKiBOb3RlIHRoYXQgdGhlIGRyaXZlciB0YWtlcyBpbnB1dCBhczogZGVncmVlcy5taW51dGVzCisgKgorICogQ0FVVElPTjogR2VuZXJhbGx5IHlvdSBzaG91bGQgdXNlIDAgPCBkZWdyZWVzIDwgMTgwIGFzIGFueXRoaW5nIGVsc2UKKyAqIGlzIHByb2JhYmx5IGJleW9uZCB0aGUgcmFuZ2Ugb2YgeW91ciBzZXJ2byBhbmQgbWF5IGRhbWFnZSBpdC4KKyAqCisgKiBKdW4gMTYsIDIwMDQ6IFNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+CisgKiAgLSBjbGVhbnVwcworICogIC0gd2FzIHVzaW5nIG1lbW9yeSBhZnRlciBrZnJlZSgpCisgKiBBdWcgOCwgMjAwNDogU2VhbiBZb3VuZyA8c2VhbkBtZXNzLm9yZz4KKyAqICAtIHNldCB0aGUgaGlnaGVzdCBhbmdsZSBhcyBoaWdoIGFzIHRoZSBoYXJkd2FyZSBhbGxvd3MsIHRoZXJlIGFyZSAKKyAqICAgIHNvbWUgb2RkIHNlcnZvcyBvdXQgdGhlcmUKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKyNkZWZpbmUgREVCVUcJMQorI2VuZGlmCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+IgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIFBoaWRnZXRTZXJ2byBEcml2ZXIiCisKKyNkZWZpbmUgVkVORE9SX0lEX0dMQUIJCQkJMHgwNmMyCisjZGVmaW5lIERFVklDRV9JRF9HTEFCX1BISURHRVRTRVJWT19RVUFECTB4MDAzOAorI2RlZmluZSBERVZJQ0VfSURfR0xBQl9QSElER0VUU0VSVk9fVU5JCQkweDAwMzkKKworI2RlZmluZSBWRU5ET1JfSURfV0lTRUdST1VQCQkJMHgwOTI1CisjZGVmaW5lIFZFTkRPUl9JRF9XSVNFR1JPVVBfUEhJREdFVFNFUlZPX1FVQUQJMHg4MTAxCisjZGVmaW5lIFZFTkRPUl9JRF9XSVNFR1JPVVBfUEhJREdFVFNFUlZPX1VOSQkweDgxMDQKKworI2RlZmluZSBTRVJWT19WRVJTSU9OXzMwCQkJMHgwMQorI2RlZmluZSBTRVJWT19DT1VOVF9RVUFECQkJMHgwMgorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKKwl7CisJCVVTQl9ERVZJQ0UoVkVORE9SX0lEX0dMQUIsIERFVklDRV9JRF9HTEFCX1BISURHRVRTRVJWT19RVUFEKSwgCisJCS5kcml2ZXJfaW5mbyA9IFNFUlZPX1ZFUlNJT05fMzAgfCBTRVJWT19DT1VOVF9RVUFEIAorCX0sCisJeworCQlVU0JfREVWSUNFKFZFTkRPUl9JRF9HTEFCLCBERVZJQ0VfSURfR0xBQl9QSElER0VUU0VSVk9fVU5JKSwKKwkJLmRyaXZlcl9pbmZvID0gU0VSVk9fVkVSU0lPTl8zMCAKKwl9LAorCXsKKwkJVVNCX0RFVklDRShWRU5ET1JfSURfV0lTRUdST1VQLCAKKwkJCQlWRU5ET1JfSURfV0lTRUdST1VQX1BISURHRVRTRVJWT19RVUFEKSwKKwkJLmRyaXZlcl9pbmZvID0gU0VSVk9fQ09VTlRfUVVBRCAKKwl9LAorCXsKKwkJVVNCX0RFVklDRShWRU5ET1JfSURfV0lTRUdST1VQLCAKKwkJCQlWRU5ET1JfSURfV0lTRUdST1VQX1BISURHRVRTRVJWT19VTkkpLAorCQkuZHJpdmVyX2luZm8gPSAwCisJfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworc3RydWN0IHBoaWRnZXRfc2Vydm8geworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXVsb25nIHR5cGU7CisJaW50IHB1bHNlWzRdOworCWludCBkZWdyZWVzWzRdOworCWludCBtaW51dGVzWzRdOworfTsKKworc3RhdGljIGludAorY2hhbmdlX3Bvc2l0aW9uX3YzMChzdHJ1Y3QgcGhpZGdldF9zZXJ2byAqc2Vydm8sIGludCBzZXJ2b19ubywgaW50IGRlZ3JlZXMsIAorCQkJCQkJCQlpbnQgbWludXRlcykKK3sKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKworCWlmIChkZWdyZWVzIDwgLTIzIHx8IGRlZ3JlZXMgPiAzNjIpCisJCXJldHVybiAtRUlOVkFMOworCisJYnVmZmVyID0ga21hbGxvYyg2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKCZzZXJ2by0+dWRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLAorCQkJX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyoKKwkgKiBwdWxzZSA9IDAgLSA0MDk1CisJICogYW5nbGUgPSAwIC0gMTgwIGRlZ3JlZXMKKwkgKgorCSAqIHB1bHNlID0gYW5nbGUgKiAxMC42ICsgMjQzLjgJCisJICovCisJc2Vydm8tPnB1bHNlW3NlcnZvX25vXSA9ICgoZGVncmVlcyo2MCArIG1pbnV0ZXMpKjEwNiArIDI0MzgqNjApLzYwMDsJCisJc2Vydm8tPmRlZ3JlZXNbc2Vydm9fbm9dPSBkZWdyZWVzOworCXNlcnZvLT5taW51dGVzW3NlcnZvX25vXT0gbWludXRlczsJCisKKwkvKiAKKwkgKiBUaGUgUGhpZGdldFNlcnZvIHYzLjAgaXMgY29udHJvbGxlZCBieSBzZW5kaW5nIDYgYnl0ZXMsCisJICogNCAqIDEyIGJpdHMgZm9yIGVhY2ggc2Vydm8uCisJICoKKwkgKiBsb3cgPSBsb3dlciA4IGJpdHMgcHVsc2UKKwkgKiBoaWdoID0gaGlnaGVyIDQgYml0cyBwdWxzZQorCSAqCisJICogb2Zmc2V0ICAgICBiaXRzCisJICogKy0tLSstLS0tLS0tLS0tLS0tLS0tLSsKKwkgKiB8IDAgfCAgICAgIGxvdyAwICAgICAgfAorCSAqICstLS0rLS0tLS0tLS0rLS0tLS0tLS0rCisJICogfCAxIHwgaGlnaCAxIHwgaGlnaCAwIHwKKwkgKiArLS0tKy0tLS0tLS0tKy0tLS0tLS0tKworCSAqIHwgMiB8ICAgICAgbG93IDEgICAgICB8CisJICogKy0tLSstLS0tLS0tLS0tLS0tLS0tLSsKKwkgKiB8IDMgfCAgICAgIGxvdyAyICAgICAgfAorCSAqICstLS0rLS0tLS0tLS0rLS0tLS0tLS0rCisJICogfCA0IHwgaGlnaCAzIHwgaGlnaCAyIHwKKwkgKiArLS0tKy0tLS0tLS0tKy0tLS0tLS0tKworCSAqIHwgNSB8ICAgICAgbG93IDMgICAgICB8CisJICogKy0tLSstLS0tLS0tLS0tLS0tLS0tLSsKKwkgKi8KKworCWJ1ZmZlclswXSA9IHNlcnZvLT5wdWxzZVswXSAmIDB4ZmY7CisJYnVmZmVyWzFdID0gKHNlcnZvLT5wdWxzZVswXSA+PiA4ICYgMHgwZikKKwkgICAgfCAoc2Vydm8tPnB1bHNlWzFdID4+IDQgJiAweGYwKTsKKwlidWZmZXJbMl0gPSBzZXJ2by0+cHVsc2VbMV0gJiAweGZmOworCWJ1ZmZlclszXSA9IHNlcnZvLT5wdWxzZVsyXSAmIDB4ZmY7CisJYnVmZmVyWzRdID0gKHNlcnZvLT5wdWxzZVsyXSA+PiA4ICYgMHgwZikKKwkgICAgfCAoc2Vydm8tPnB1bHNlWzNdID4+IDQgJiAweGYwKTsKKwlidWZmZXJbNV0gPSBzZXJ2by0+cHVsc2VbM10gJiAweGZmOworCisJZGV2X2RiZygmc2Vydm8tPnVkZXYtPmRldiwKKwkJImRhdGE6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQlidWZmZXJbMF0sIGJ1ZmZlclsxXSwgYnVmZmVyWzJdLAorCQlidWZmZXJbM10sIGJ1ZmZlcls0XSwgYnVmZmVyWzVdKTsKKworCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhzZXJ2by0+dWRldiwKKwkJCQkgdXNiX3NuZGN0cmxwaXBlKHNlcnZvLT51ZGV2LCAwKSwKKwkJCQkgMHgwOSwgMHgyMSwgMHgwMjAwLCAweDAwMDAsIGJ1ZmZlciwgNiwgMjAwMCk7CisKKwlrZnJlZShidWZmZXIpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludAorY2hhbmdlX3Bvc2l0aW9uX3YyMChzdHJ1Y3QgcGhpZGdldF9zZXJ2byAqc2Vydm8sIGludCBzZXJ2b19ubywgaW50IGRlZ3JlZXMsCisJCQkJCQkJCWludCBtaW51dGVzKQoreworCWludCByZXR2YWw7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCisJaWYgKGRlZ3JlZXMgPCAtMjMgfHwgZGVncmVlcyA+IDI3OCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlidWZmZXIgPSBrbWFsbG9jKDIsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIoJnNlcnZvLT51ZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsCisJCQlfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKgorCSAqIGFuZ2xlID0gMCAtIDE4MCBkZWdyZWVzCisJICogcHVsc2UgPSBhbmdsZSArIDIzCisJICovCisJc2Vydm8tPnB1bHNlW3NlcnZvX25vXT0gZGVncmVlcyArIDIzOworCXNlcnZvLT5kZWdyZWVzW3NlcnZvX25vXT0gZGVncmVlczsKKwlzZXJ2by0+bWludXRlc1tzZXJ2b19ub109IDA7CisKKwkvKgorCSAqIFRoZSBQaGlkZ2V0U2Vydm8gdjIuMCBpcyBjb250cm9sbGVkIGJ5IHNlbmRpbmcgdHdvIGJ5dGVzLiBUaGUKKwkgKiBmaXJzdCBieXRlIGlzIHRoZSBzZXJ2byBudW1iZXIgeG9yJ2VkIHdpdGggMjoKKwkgKgorCSAqIHNlcnZvIDAgPSAyCisJICogc2Vydm8gMSA9IDMKKwkgKiBzZXJ2byAyID0gMAorCSAqIHNlcnZvIDMgPSAxCisJICoKKwkgKiBUaGUgc2Vjb25kIGJ5dGUgaXMgdGhlIHBvc2l0aW9uLgorCSAqLworCisJYnVmZmVyWzBdID0gc2Vydm9fbm8gXiAyOworCWJ1ZmZlclsxXSA9IHNlcnZvLT5wdWxzZVtzZXJ2b19ub107CisKKwlkZXZfZGJnKCZzZXJ2by0+dWRldi0+ZGV2LCAiZGF0YTogJTAyeCAlMDJ4XG4iLCBidWZmZXJbMF0sIGJ1ZmZlclsxXSk7CisKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coc2Vydm8tPnVkZXYsCisJCQkJIHVzYl9zbmRjdHJscGlwZShzZXJ2by0+dWRldiwgMCksCisJCQkJIDB4MDksIDB4MjEsIDB4MDIwMCwgMHgwMDAwLCBidWZmZXIsIDIsIDIwMDApOworCisJa2ZyZWUoYnVmZmVyKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKyNkZWZpbmUgc2hvd19zZXQodmFsdWUpCVwKK3N0YXRpYyBzc2l6ZV90IHNldF9zZXJ2byMjdmFsdWUgKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCisJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCit7CQkJCQkJCQkJXAorCWludCBkZWdyZWVzLCBtaW51dGVzLCByZXR2YWw7CQkJCQlcCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlIChkZXYpOwkJXAorCXN0cnVjdCBwaGlkZ2V0X3NlcnZvICpzZXJ2byA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOwkJXAorCQkJCQkJCQkJXAorCW1pbnV0ZXMgPSAwOwkJCQkJCQlcCisJLyogbXVzdCBhdCBsZWFzdCBjb252ZXJ0IGRlZ3JlZXMgKi8JCQkJXAorCWlmIChzc2NhbmYgKGJ1ZiwgIiVkLiVkIiwgJmRlZ3JlZXMsICZtaW51dGVzKSA8IDEpIHsJCVwKKwkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAobWludXRlcyA8IDAgfHwgbWludXRlcyA+IDU5KSAJCQkJXAorCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCisJCQkJCQkJCQlcCisJaWYgKHNlcnZvLT50eXBlICYgU0VSVk9fVkVSU0lPTl8zMCkJCQkJXAorCQlyZXR2YWwgPSBjaGFuZ2VfcG9zaXRpb25fdjMwIChzZXJ2bywgdmFsdWUsIGRlZ3JlZXMsIAlcCisJCQkJCQkJbWludXRlcyk7CVwKKwllbHNlIAkJCQkJCQkJXAorCQlyZXR2YWwgPSBjaGFuZ2VfcG9zaXRpb25fdjIwIChzZXJ2bywgdmFsdWUsIGRlZ3JlZXMsIAlcCisJCQkJCQkJbWludXRlcyk7CVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IGNvdW50OwkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIHNzaXplX3Qgc2hvd19zZXJ2byMjdmFsdWUgKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKSAJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UgKGRldik7CQlcCisJc3RydWN0IHBoaWRnZXRfc2Vydm8gKnNlcnZvID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHNwcmludGYgKGJ1ZiwgIiVkLiUwMmRcbiIsIHNlcnZvLT5kZWdyZWVzW3ZhbHVlXSwJXAorCQkJCXNlcnZvLT5taW51dGVzW3ZhbHVlXSk7CQkJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBERVZJQ0VfQVRUUihzZXJ2byMjdmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLAkJCVwKKwkgIHNob3dfc2Vydm8jI3ZhbHVlLCBzZXRfc2Vydm8jI3ZhbHVlKTsKKworc2hvd19zZXQoMCk7CitzaG93X3NldCgxKTsKK3Nob3dfc2V0KDIpOworc2hvd19zZXQoMyk7CisKK3N0YXRpYyBpbnQKK3NlcnZvX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgcGhpZGdldF9zZXJ2byAqZGV2OworCisJZGV2ID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBwaGlkZ2V0X3NlcnZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KGRldiwgMHgwMCwgc2l6ZW9mICgqZGV2KSk7CisKKwlkZXYtPnVkZXYgPSB1c2JfZ2V0X2Rldih1ZGV2KTsKKwlkZXYtPnR5cGUgPSBpZC0+ZHJpdmVyX2luZm87CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGRldik7CisKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vydm8wKTsKKwlpZiAoZGV2LT50eXBlICYgU0VSVk9fQ09VTlRfUVVBRCkgeworCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vydm8xKTsKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3NlcnZvMik7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZXJ2bzMpOworCX0KKworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiAlZC1Nb3RvciBQaGlkZ2V0U2Vydm8gdiVkLjAgYXR0YWNoZWRcbiIsCisJCWRldi0+dHlwZSAmIFNFUlZPX0NPVU5UX1FVQUQgPyA0IDogMSwKKwkJZGV2LT50eXBlICYgU0VSVk9fVkVSU0lPTl8zMCA/IDMgOiAyKTsKKworCWlmKCEoZGV2LT50eXBlICYgU0VSVk9fVkVSU0lPTl8zMCkpCisJCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwKKwkJCSAiV0FSTklORzogdjIuMCBub3QgdGVzdGVkISBQbGVhc2UgcmVwb3J0IGlmIGl0IHdvcmtzLlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3NlcnZvX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgcGhpZGdldF9zZXJ2byAqZGV2OworCisJZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZXJ2bzApOworCWlmIChkZXYtPnR5cGUgJiBTRVJWT19DT1VOVF9RVUFEKSB7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZXJ2bzEpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vydm8yKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3NlcnZvMyk7CisJfQorCisJdXNiX3B1dF9kZXYoZGV2LT51ZGV2KTsKKworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlVTQiAlZC1Nb3RvciBQaGlkZ2V0U2Vydm8gdiVkLjAgZGV0YWNoZWRcbiIsCisJCWRldi0+dHlwZSAmIFNFUlZPX0NPVU5UX1FVQUQgPyA0IDogMSwKKwkJZGV2LT50eXBlICYgU0VSVk9fVkVSU0lPTl8zMCA/IDMgOiAyKTsKKworCWtmcmVlKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZXJ2b19kcml2ZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAicGhpZGdldHNlcnZvIiwKKwkucHJvYmUgPSBzZXJ2b19wcm9iZSwKKwkuZGlzY29ubmVjdCA9IHNlcnZvX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gaWRfdGFibGUKK307CisKK3N0YXRpYyBpbnQgX19pbml0CitwaGlkZ2V0X3NlcnZvX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZzZXJ2b19kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkIiwgcmV0dmFsKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdAorcGhpZGdldF9zZXJ2b19leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNlcnZvX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBoaWRnZXRfc2Vydm9faW5pdCk7Cittb2R1bGVfZXhpdChwaGlkZ2V0X3NlcnZvX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMgYi9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2Zjc3ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jCkBAIC0wLDAgKzEsNTYzIEBACisvKiAtKi0gbGludXgtYyAtKi0gKi8KKworLyogCisgKiBEcml2ZXIgZm9yIFVTQiBSaW8gNTAwCisgKgorICogQ2VzYXIgTWlxdWVsIChtaXF1ZWxAZGYudWJhLmFyKQorICogCisgKiBiYXNlZCBvbiBocF9zY2FubmVyLmMgYnkgRGF2aWQgRS4gTmVsc29uIChkbmVsc29uQGp1bXAubmV0KQorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiBCYXNlZCB1cG9uIG1vdXNlLmMgKEJyYWQgS2VyeWFuKSBhbmQgcHJpbnRlci5jIChNaWNoYWVsIEdlZSkuCisgKgorICogQ2hhbmdlbG9nOgorICogMzAvMDUvMjAwMyAgcmVwbGFjZWQgbG9jay91bmxvY2sga2VybmVsIHdpdGggdXAvZG93bgorICogICAgICAgICAgICAgRGFuaWVsZSBCZWxsdWNjaSAgYmVsbHVjZGFAdGlzY2FsaS5pdAorICogKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCisjaW5jbHVkZSAicmlvNTAwX3VzYi5oIgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS4xIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJDZXNhciBNaXF1ZWwgPG1pcXVlbEBkZi51YmEuYXI+IgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIFJpbyA1MDAgZHJpdmVyIgorCisjZGVmaW5lIFJJT19NSU5PUgk2NAorCisvKiBzdGFsbC93YWl0IHRpbWVvdXQgZm9yIHJpbyAqLworI2RlZmluZSBOQUtfVElNRU9VVCAoSFopCisKKyNkZWZpbmUgSUJVRl9TSVpFIDB4MTAwMAorCisvKiBTaXplIG9mIHRoZSByaW8gYnVmZmVyICovCisjZGVmaW5lIE9CVUZfU0laRSAweDEwMDAwCisKK3N0cnVjdCByaW9fdXNiX2RhdGEgeworICAgICAgICBzdHJ1Y3QgdXNiX2RldmljZSAqcmlvX2RldjsgICAgIC8qIGluaXQ6IHByb2JlX3JpbyAqLworICAgICAgICB1bnNpZ25lZCBpbnQgaWZudW07ICAgICAgICAgICAgIC8qIEludGVyZmFjZSBudW1iZXIgb2YgdGhlIFVTQiBkZXZpY2UgKi8KKyAgICAgICAgaW50IGlzb3BlbjsgICAgICAgICAgICAgICAgICAgICAvKiBueiBpZiBvcGVuICovCisgICAgICAgIGludCBwcmVzZW50OyAgICAgICAgICAgICAgICAgICAgLyogRGV2aWNlIGlzIHByZXNlbnQgb24gdGhlIGJ1cyAqLworICAgICAgICBjaGFyICpvYnVmLCAqaWJ1ZjsgICAgICAgICAgICAgIC8qIHRyYW5zZmVyIGJ1ZmZlcnMgKi8KKyAgICAgICAgY2hhciBidWxrX2luX2VwLCBidWxrX291dF9lcDsgICAvKiBFbmRwb2ludCBhc3NpZ25tZW50cyAqLworICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3E7ICAgICAgIC8qIGZvciB0aW1lb3V0cyAqLworCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsgICAgICAgICAgLyogZ2VuZXJhbCByYWNlIGF2b2lkYW5jZSAqLworfTsKKworc3RhdGljIHN0cnVjdCByaW9fdXNiX2RhdGEgcmlvX2luc3RhbmNlOworCitzdGF0aWMgaW50IG9wZW5fcmlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCByaW9fdXNiX2RhdGEgKnJpbyA9ICZyaW9faW5zdGFuY2U7CisKKwlkb3duKCYocmlvLT5sb2NrKSk7CisKKwlpZiAocmlvLT5pc29wZW4gfHwgIXJpby0+cHJlc2VudCkgeworCQl1cCgmKHJpby0+bG9jaykpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlyaW8tPmlzb3BlbiA9IDE7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZyaW8tPndhaXRfcSk7CisKKwl1cCgmKHJpby0+bG9jaykpOworCisJaW5mbygiUmlvIG9wZW5lZC4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNsb3NlX3JpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgcmlvX3VzYl9kYXRhICpyaW8gPSAmcmlvX2luc3RhbmNlOworCisJcmlvLT5pc29wZW4gPSAwOworCisJaW5mbygiUmlvIGNsb3NlZC4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraW9jdGxfcmlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCSAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IFJpb0NvbW1hbmQgcmlvX2NtZDsKKwlzdHJ1Y3QgcmlvX3VzYl9kYXRhICpyaW8gPSAmcmlvX2luc3RhbmNlOworCXZvaWQgX191c2VyICpkYXRhOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwlpbnQgcmVzdWx0LCByZXF1ZXN0dHlwZTsKKwlpbnQgcmV0cmllczsKKwlpbnQgcmV0dmFsPTA7CisKKwlkb3duKCYocmlvLT5sb2NrKSk7CisgICAgICAgIC8qIFNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgcmlvIGlzIGNvbm5lY3RlZCwgcG93ZXJlZCwgZXRjICovCisgICAgICAgIGlmICggcmlvID09IE5VTEwgfHwKKyAgICAgICAgICAgICByaW8tPnByZXNlbnQgPT0gMCB8fAorICAgICAgICAgICAgIHJpby0+cmlvX2RldiA9PSBOVUxMICkKKwl7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgUklPX1JFQ1ZfQ09NTUFORDoKKwkJZGF0YSA9ICh2b2lkIF9fdXNlciAqKSBhcmc7CisJCWlmIChkYXRhID09IE5VTEwpCisJCQlicmVhazsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZyaW9fY21kLCBkYXRhLCBzaXplb2Yoc3RydWN0IFJpb0NvbW1hbmQpKSkgeworCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCQlpZiAocmlvX2NtZC5sZW5ndGggPCAwIHx8IHJpb19jbWQubGVuZ3RoID4gUEFHRV9TSVpFKSB7CisJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJZ290byBlcnJfb3V0OworCQl9CisJCWJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJZ290byBlcnJfb3V0OworCQl9CisJCWlmIChjb3B5X2Zyb21fdXNlcihidWZmZXIsIHJpb19jbWQuYnVmZmVyLCByaW9fY21kLmxlbmd0aCkpIHsKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJ1ZmZlcik7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKworCQlyZXF1ZXN0dHlwZSA9IHJpb19jbWQucmVxdWVzdHR5cGUgfCBVU0JfRElSX0lOIHwKKwkJICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0U7CisJCWRiZworCQkgICAgKCJzZW5kaW5nIGNvbW1hbmQ6cmVxdHlwZT0lMHggcmVxPSUweCB2YWx1ZT0lMHggaW5kZXg9JTB4IGxlbj0lMHgiLAorCQkgICAgIHJlcXVlc3R0eXBlLCByaW9fY21kLnJlcXVlc3QsIHJpb19jbWQudmFsdWUsCisJCSAgICAgcmlvX2NtZC5pbmRleCwgcmlvX2NtZC5sZW5ndGgpOworCQkvKiBTZW5kIHJpbyBjb250cm9sIG1lc3NhZ2UgKi8KKwkJcmV0cmllcyA9IDM7CisJCXdoaWxlIChyZXRyaWVzKSB7CisJCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2cocmlvLT5yaW9fZGV2LAorCQkJCQkJIHVzYl9yY3ZjdHJscGlwZShyaW8tPiByaW9fZGV2LCAwKSwKKwkJCQkJCSByaW9fY21kLnJlcXVlc3QsCisJCQkJCQkgcmVxdWVzdHR5cGUsCisJCQkJCQkgcmlvX2NtZC52YWx1ZSwKKwkJCQkJCSByaW9fY21kLmluZGV4LCBidWZmZXIsCisJCQkJCQkgcmlvX2NtZC5sZW5ndGgsCisJCQkJCQkgamlmZmllc190b19tc2VjcyhyaW9fY21kLnRpbWVvdXQpKTsKKwkJCWlmIChyZXN1bHQgPT0gLUVUSU1FRE9VVCkKKwkJCQlyZXRyaWVzLS07CisJCQllbHNlIGlmIChyZXN1bHQgPCAwKSB7CisJCQkJZXJyKCJFcnJvciBleGVjdXRpbmcgaW9jdHJsLiBjb2RlID0gJWQiLCByZXN1bHQpOworCQkJCXJldHJpZXMgPSAwOworCQkJfSBlbHNlIHsKKwkJCQlkYmcoIkV4ZWN1dGVkIGlvY3RsLiBSZXN1bHQgPSAlZCAoZGF0YT0lMDJ4KSIsCisJCQkJICAgICByZXN1bHQsIGJ1ZmZlclswXSk7CisJCQkJaWYgKGNvcHlfdG9fdXNlcihyaW9fY21kLmJ1ZmZlciwgYnVmZmVyLAorCQkJCQkJIHJpb19jbWQubGVuZ3RoKSkgeworCQkJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJ1ZmZlcik7CisJCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJCWdvdG8gZXJyX291dDsKKwkJCQl9CisJCQkJcmV0cmllcyA9IDA7CisJCQl9CisKKwkJCS8qIHJpb19jbWQuYnVmZmVyIGNvbnRhaW5zIGEgcmF3IHN0cmVhbSBvZiBzaW5nbGUgYnl0ZQorCQkJICAgZGF0YSB3aGljaCBoYXMgYmVlbiByZXR1cm5lZCBmcm9tIHJpby4gIERhdGEgaXMKKwkJCSAgIGludGVycHJldGVkIGF0IGFwcGxpY2F0aW9uIGxldmVsLiAgRm9yIGRhdGEgdGhhdAorCQkJICAgd2lsbCBiZSBjYXN0IHRvIGRhdGEgdHlwZXMgbG9uZ2VyIHRoYW4gMSBieXRlLCBkYXRhCisJCQkgICB3aWxsIGJlIGxpdHRsZV9lbmRpYW4gYW5kIHdpbGwgcG90ZW50aWFsbHkgbmVlZCB0bworCQkJICAgYmUgc3dhcHBlZCBhdCB0aGUgYXBwIGxldmVsICovCisKKwkJfQorCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJ1ZmZlcik7CisJCWJyZWFrOworCisJY2FzZSBSSU9fU0VORF9DT01NQU5EOgorCQlkYXRhID0gKHZvaWQgX191c2VyICopIGFyZzsKKwkJaWYgKGRhdGEgPT0gTlVMTCkKKwkJCWJyZWFrOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnJpb19jbWQsIGRhdGEsIHNpemVvZihzdHJ1Y3QgUmlvQ29tbWFuZCkpKSB7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJZ290byBlcnJfb3V0OworCQl9CisJCWlmIChyaW9fY21kLmxlbmd0aCA8IDAgfHwgcmlvX2NtZC5sZW5ndGggPiBQQUdFX1NJWkUpIHsKKwkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKwkJYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikgX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCQlpZiAoYnVmZmVyID09IE5VTEwpIHsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKwkJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZmZlciwgcmlvX2NtZC5idWZmZXIsIHJpb19jbWQubGVuZ3RoKSkgeworCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1ZmZlcik7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJZ290byBlcnJfb3V0OworCQl9CisKKwkJcmVxdWVzdHR5cGUgPSByaW9fY21kLnJlcXVlc3R0eXBlIHwgVVNCX0RJUl9PVVQgfAorCQkgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRTsKKwkJZGJnKCJzZW5kaW5nIGNvbW1hbmQ6IHJlcXR5cGU9JTB4IHJlcT0lMHggdmFsdWU9JTB4IGluZGV4PSUweCBsZW49JTB4IiwKKwkJICAgICByZXF1ZXN0dHlwZSwgcmlvX2NtZC5yZXF1ZXN0LCByaW9fY21kLnZhbHVlLAorCQkgICAgIHJpb19jbWQuaW5kZXgsIHJpb19jbWQubGVuZ3RoKTsKKwkJLyogU2VuZCByaW8gY29udHJvbCBtZXNzYWdlICovCisJCXJldHJpZXMgPSAzOworCQl3aGlsZSAocmV0cmllcykgeworCQkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHJpby0+cmlvX2RldiwKKwkJCQkJCSB1c2Jfc25kY3RybHBpcGUocmlvLT4gcmlvX2RldiwgMCksCisJCQkJCQkgcmlvX2NtZC5yZXF1ZXN0LAorCQkJCQkJIHJlcXVlc3R0eXBlLAorCQkJCQkJIHJpb19jbWQudmFsdWUsCisJCQkJCQkgcmlvX2NtZC5pbmRleCwgYnVmZmVyLAorCQkJCQkJIHJpb19jbWQubGVuZ3RoLAorCQkJCQkJIGppZmZpZXNfdG9fbXNlY3MocmlvX2NtZC50aW1lb3V0KSk7CisJCQlpZiAocmVzdWx0ID09IC1FVElNRURPVVQpCisJCQkJcmV0cmllcy0tOworCQkJZWxzZSBpZiAocmVzdWx0IDwgMCkgeworCQkJCWVycigiRXJyb3IgZXhlY3V0aW5nIGlvY3RybC4gY29kZSA9ICVkIiwgcmVzdWx0KTsKKwkJCQlyZXRyaWVzID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJZGJnKCJFeGVjdXRlZCBpb2N0bC4gUmVzdWx0ID0gJWQiLCByZXN1bHQpOworCQkJCXJldHJpZXMgPSAwOworCisJCQl9CisKKwkJfQorCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJ1ZmZlcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dmFsID0gLUVOT1RUWTsKKwkJYnJlYWs7CisJfQorCisKK2Vycl9vdXQ6CisJdXAoJihyaW8tPmxvY2spKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3NpemVfdAord3JpdGVfcmlvKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBwcG9zKQoreworCURFRklORV9XQUlUKHdhaXQpOworCXN0cnVjdCByaW9fdXNiX2RhdGEgKnJpbyA9ICZyaW9faW5zdGFuY2U7CisKKwl1bnNpZ25lZCBsb25nIGNvcHlfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGJ5dGVzX3dyaXR0ZW4gPSAwOworCXVuc2lnbmVkIGludCBwYXJ0aWFsOworCisJaW50IHJlc3VsdCA9IDA7CisJaW50IG1heHJldHJ5OworCWludCBlcnJuID0gMDsKKworCWRvd24oJihyaW8tPmxvY2spKTsKKyAgICAgICAgLyogU2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSByaW8gaXMgY29ubmVjdGVkLCBwb3dlcmVkLCBldGMgKi8KKyAgICAgICAgaWYgKCByaW8gPT0gTlVMTCB8fAorICAgICAgICAgICAgIHJpby0+cHJlc2VudCA9PSAwIHx8CisgICAgICAgICAgICAgcmlvLT5yaW9fZGV2ID09IE5VTEwgKQorCXsKKwkJdXAoJihyaW8tPmxvY2spKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisKKworCWRvIHsKKwkJdW5zaWduZWQgbG9uZyB0aGlzdGltZTsKKwkJY2hhciAqb2J1ZiA9IHJpby0+b2J1ZjsKKworCQl0aGlzdGltZSA9IGNvcHlfc2l6ZSA9CisJCSAgICAoY291bnQgPj0gT0JVRl9TSVpFKSA/IE9CVUZfU0laRSA6IGNvdW50OworCQlpZiAoY29weV9mcm9tX3VzZXIocmlvLT5vYnVmLCBidWZmZXIsIGNvcHlfc2l6ZSkpIHsKKwkJCWVycm4gPSAtRUZBVUxUOworCQkJZ290byBlcnJvcjsKKwkJfQorCQltYXhyZXRyeSA9IDU7CisJCXdoaWxlICh0aGlzdGltZSkgeworCQkJaWYgKCFyaW8tPnJpb19kZXYpIHsKKwkJCQllcnJuID0gLUVOT0RFVjsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJdXAoJihyaW8tPmxvY2spKTsKKwkJCQlyZXR1cm4gYnl0ZXNfd3JpdHRlbiA/IGJ5dGVzX3dyaXR0ZW4gOiAtRUlOVFI7CisJCQl9CisKKwkJCXJlc3VsdCA9IHVzYl9idWxrX21zZyhyaW8tPnJpb19kZXYsCisJCQkJCSB1c2Jfc25kYnVsa3BpcGUocmlvLT5yaW9fZGV2LCAyKSwKKwkJCQkJIG9idWYsIHRoaXN0aW1lLCAmcGFydGlhbCwgNTAwMCk7CisKKwkJCWRiZygid3JpdGUgc3RhdHM6IHJlc3VsdDolZCB0aGlzdGltZTolbHUgcGFydGlhbDoldSIsCisJCQkgICAgIHJlc3VsdCwgdGhpc3RpbWUsIHBhcnRpYWwpOworCisJCQlpZiAocmVzdWx0ID09IC1FVElNRURPVVQpIHsJLyogTkFLIC0gc28gaG9sZCBmb3IgYSB3aGlsZSAqLworCQkJCWlmICghbWF4cmV0cnktLSkgeworCQkJCQllcnJuID0gLUVUSU1FOworCQkJCQlnb3RvIGVycm9yOworCQkJCX0KKwkJCQlwcmVwYXJlX3RvX3dhaXQoJnJpby0+d2FpdF9xLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCQlzY2hlZHVsZV90aW1lb3V0KE5BS19USU1FT1VUKTsKKwkJCQlmaW5pc2hfd2FpdCgmcmlvLT53YWl0X3EsICZ3YWl0KTsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoIXJlc3VsdCAmJiBwYXJ0aWFsKSB7CisJCQkJb2J1ZiArPSBwYXJ0aWFsOworCQkJCXRoaXN0aW1lIC09IHBhcnRpYWw7CisJCQl9IGVsc2UKKwkJCQlicmVhazsKKwkJfTsKKwkJaWYgKHJlc3VsdCkgeworCQkJZXJyKCJXcml0ZSBXaG9vcHMgLSAleCIsIHJlc3VsdCk7CisJCQllcnJuID0gLUVJTzsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJYnl0ZXNfd3JpdHRlbiArPSBjb3B5X3NpemU7CisJCWNvdW50IC09IGNvcHlfc2l6ZTsKKwkJYnVmZmVyICs9IGNvcHlfc2l6ZTsKKwl9IHdoaWxlIChjb3VudCA+IDApOworCisJdXAoJihyaW8tPmxvY2spKTsKKworCXJldHVybiBieXRlc193cml0dGVuID8gYnl0ZXNfd3JpdHRlbiA6IC1FSU87CisKK2Vycm9yOgorCXVwKCYocmlvLT5sb2NrKSk7CisJcmV0dXJuIGVycm47Cit9CisKK3N0YXRpYyBzc2l6ZV90CityZWFkX3JpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBwcG9zKQoreworCURFRklORV9XQUlUKHdhaXQpOworCXN0cnVjdCByaW9fdXNiX2RhdGEgKnJpbyA9ICZyaW9faW5zdGFuY2U7CisJc3NpemVfdCByZWFkX2NvdW50OworCXVuc2lnbmVkIGludCBwYXJ0aWFsOworCWludCB0aGlzX3JlYWQ7CisJaW50IHJlc3VsdDsKKwlpbnQgbWF4cmV0cnkgPSAxMDsKKwljaGFyICppYnVmOworCisJZG93bigmKHJpby0+bG9jaykpOworCS8qIFNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgcmlvIGlzIGNvbm5lY3RlZCwgcG93ZXJlZCwgZXRjICovCisgICAgICAgIGlmICggcmlvID09IE5VTEwgfHwKKyAgICAgICAgICAgICByaW8tPnByZXNlbnQgPT0gMCB8fAorICAgICAgICAgICAgIHJpby0+cmlvX2RldiA9PSBOVUxMICkKKwl7CisJCXVwKCYocmlvLT5sb2NrKSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlidWYgPSByaW8tPmlidWY7CisKKwlyZWFkX2NvdW50ID0gMDsKKworCisJd2hpbGUgKGNvdW50ID4gMCkgeworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXVwKCYocmlvLT5sb2NrKSk7CisJCQlyZXR1cm4gcmVhZF9jb3VudCA/IHJlYWRfY291bnQgOiAtRUlOVFI7CisJCX0KKwkJaWYgKCFyaW8tPnJpb19kZXYpIHsKKwkJCXVwKCYocmlvLT5sb2NrKSk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQl0aGlzX3JlYWQgPSAoY291bnQgPj0gSUJVRl9TSVpFKSA/IElCVUZfU0laRSA6IGNvdW50OworCisJCXJlc3VsdCA9IHVzYl9idWxrX21zZyhyaW8tPnJpb19kZXYsCisJCQkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKHJpby0+cmlvX2RldiwgMSksCisJCQkJICAgICAgaWJ1ZiwgdGhpc19yZWFkLCAmcGFydGlhbCwKKwkJCQkgICAgICA4MDAwKTsKKworCQlkYmcoS0VSTl9ERUJVRyAicmVhZCBzdGF0czogcmVzdWx0OiVkIHRoaXNfcmVhZDoldSBwYXJ0aWFsOiV1IiwKKwkJICAgICAgIHJlc3VsdCwgdGhpc19yZWFkLCBwYXJ0aWFsKTsKKworCQlpZiAocGFydGlhbCkgeworCQkJY291bnQgPSB0aGlzX3JlYWQgPSBwYXJ0aWFsOworCQl9IGVsc2UgaWYgKHJlc3VsdCA9PSAtRVRJTUVET1VUIHx8IHJlc3VsdCA9PSAxNSkgewkvKiBGSVhNRTogMTUgPz8/ICovCisJCQlpZiAoIW1heHJldHJ5LS0pIHsKKwkJCQl1cCgmKHJpby0+bG9jaykpOworCQkJCWVycigicmVhZF9yaW86IG1heHJldHJ5IHRpbWVvdXQiKTsKKwkJCQlyZXR1cm4gLUVUSU1FOworCQkJfQorCQkJcHJlcGFyZV90b193YWl0KCZyaW8tPndhaXRfcSwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQlzY2hlZHVsZV90aW1lb3V0KE5BS19USU1FT1VUKTsKKwkJCWZpbmlzaF93YWl0KCZyaW8tPndhaXRfcSwgJndhaXQpOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAocmVzdWx0ICE9IC1FUkVNT1RFSU8pIHsKKwkJCXVwKCYocmlvLT5sb2NrKSk7CisJCQllcnIoIlJlYWQgV2hvb3BzIC0gcmVzdWx0OiV1IHBhcnRpYWw6JXUgdGhpc19yZWFkOiV1IiwKKwkJCSAgICAgcmVzdWx0LCBwYXJ0aWFsLCB0aGlzX3JlYWQpOworCQkJcmV0dXJuIC1FSU87CisJCX0gZWxzZSB7CisJCQl1cCgmKHJpby0+bG9jaykpOworCQkJcmV0dXJuICgwKTsKKwkJfQorCisJCWlmICh0aGlzX3JlYWQpIHsKKwkJCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCBpYnVmLCB0aGlzX3JlYWQpKSB7CisJCQkJdXAoJihyaW8tPmxvY2spKTsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJCWNvdW50IC09IHRoaXNfcmVhZDsKKwkJCXJlYWRfY291bnQgKz0gdGhpc19yZWFkOworCQkJYnVmZmVyICs9IHRoaXNfcmVhZDsKKwkJfQorCX0KKwl1cCgmKHJpby0+bG9jaykpOworCXJldHVybiByZWFkX2NvdW50OworfQorCitzdGF0aWMgc3RydWN0CitmaWxlX29wZXJhdGlvbnMgdXNiX3Jpb19mb3BzID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5yZWFkID0JCXJlYWRfcmlvLAorCS53cml0ZSA9CXdyaXRlX3JpbywKKwkuaW9jdGwgPQlpb2N0bF9yaW8sCisJLm9wZW4gPQkJb3Blbl9yaW8sCisJLnJlbGVhc2UgPQljbG9zZV9yaW8sCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgdXNiX3Jpb19jbGFzcyA9IHsKKwkubmFtZSA9CQkidXNiL3JpbzUwMCVkIiwKKwkuZm9wcyA9CQkmdXNiX3Jpb19mb3BzLAorCS5tb2RlID0JCVNfSUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQLAorCS5taW5vcl9iYXNlID0JUklPX01JTk9SLAorfTsKKworc3RhdGljIGludCBwcm9iZV9yaW8oc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCByaW9fdXNiX2RhdGEgKnJpbyA9ICZyaW9faW5zdGFuY2U7CisJaW50IHJldHZhbDsKKworCWluZm8oIlVTQiBSaW8gZm91bmQgYXQgYWRkcmVzcyAlZCIsIGRldi0+ZGV2bnVtKTsKKworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZiwgJnVzYl9yaW9fY2xhc3MpOworCWlmIChyZXR2YWwpIHsKKwkJZXJyKCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJpby0+cmlvX2RldiA9IGRldjsKKworCWlmICghKHJpby0+b2J1ZiA9IChjaGFyICopIGttYWxsb2MoT0JVRl9TSVpFLCBHRlBfS0VSTkVMKSkpIHsKKwkJZXJyKCJwcm9iZV9yaW86IE5vdCBlbm91Z2ggbWVtb3J5IGZvciB0aGUgb3V0cHV0IGJ1ZmZlciIpOworCQl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZiwgJnVzYl9yaW9fY2xhc3MpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZGJnKCJwcm9iZV9yaW86IG9idWYgYWRkcmVzczolcCIsIHJpby0+b2J1Zik7CisKKwlpZiAoIShyaW8tPmlidWYgPSAoY2hhciAqKSBrbWFsbG9jKElCVUZfU0laRSwgR0ZQX0tFUk5FTCkpKSB7CisJCWVycigicHJvYmVfcmlvOiBOb3QgZW5vdWdoIG1lbW9yeSBmb3IgdGhlIGlucHV0IGJ1ZmZlciIpOworCQl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZiwgJnVzYl9yaW9fY2xhc3MpOworCQlrZnJlZShyaW8tPm9idWYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZGJnKCJwcm9iZV9yaW86IGlidWYgYWRkcmVzczolcCIsIHJpby0+aWJ1Zik7CisKKwlpbml0X01VVEVYKCYocmlvLT5sb2NrKSk7CisKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCByaW8pOworCXJpby0+cHJlc2VudCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGlzY29ubmVjdF9yaW8oc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHJpb191c2JfZGF0YSAqcmlvID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisKKwl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKKwlpZiAocmlvKSB7CisJCXVzYl9kZXJlZ2lzdGVyX2RldihpbnRmLCAmdXNiX3Jpb19jbGFzcyk7CisKKwkJZG93bigmKHJpby0+bG9jaykpOworCQlpZiAocmlvLT5pc29wZW4pIHsKKwkJCXJpby0+aXNvcGVuID0gMDsKKwkJCS8qIGJldHRlciBsZXQgaXQgZmluaXNoIC0gdGhlIHJlbGVhc2Ugd2lsbCBkbyB3aGF0cyBuZWVkZWQgKi8KKwkJCXJpby0+cmlvX2RldiA9IE5VTEw7CisJCQl1cCgmKHJpby0+bG9jaykpOworCQkJcmV0dXJuOworCQl9CisJCWtmcmVlKHJpby0+aWJ1Zik7CisJCWtmcmVlKHJpby0+b2J1Zik7CisKKwkJaW5mbygiVVNCIFJpbyBkaXNjb25uZWN0ZWQuIik7CisKKwkJcmlvLT5wcmVzZW50ID0gMDsKKwkJdXAoJihyaW8tPmxvY2spKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCByaW9fdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKDB4MDg0MSwgMSkgfSwgCQkvKiBSaW8gNTAwICovCisJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCByaW9fdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcmlvX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkicmlvNTAwIiwKKwkucHJvYmUgPQlwcm9iZV9yaW8sCisJLmRpc2Nvbm5lY3QgPQlkaXNjb25uZWN0X3JpbywKKwkuaWRfdGFibGUgPQlyaW9fdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1c2JfcmlvX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmcmlvX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJZ290byBvdXQ7CisKKwlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2JfcmlvX2NsZWFudXAodm9pZCkKK3sKKwlzdHJ1Y3QgcmlvX3VzYl9kYXRhICpyaW8gPSAmcmlvX2luc3RhbmNlOworCisJcmlvLT5wcmVzZW50ID0gMDsKKwl1c2JfZGVyZWdpc3RlcigmcmlvX2RyaXZlcik7CisKKworfQorCittb2R1bGVfaW5pdCh1c2JfcmlvX2luaXQpOworbW9kdWxlX2V4aXQodXNiX3Jpb19jbGVhbnVwKTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMF91c2IuaCBiL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwX3VzYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OWFiYzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMF91c2IuaApAQCAtMCwwICsxLDM3IEBACisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgQ29weXJpZ2h0IChDKSAyMDAwICBDZXNhciBNaXF1ZWwgIChtaXF1ZWxAZGYudWJhLmFyKQorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworCisjZGVmaW5lIFJJT19TRU5EX0NPTU1BTkQJCQkweDEKKyNkZWZpbmUgUklPX1JFQ1ZfQ09NTUFORAkJCTB4MgorCisjZGVmaW5lIFJJT19ESVJfT1VUICAgICAgICAgICAgICAgCSAgICAgICAgMHgwCisjZGVmaW5lIFJJT19ESVJfSU4JCQkJMHgxCisKK3N0cnVjdCBSaW9Db21tYW5kIHsKKwlzaG9ydCBsZW5ndGg7CisJaW50IHJlcXVlc3Q7CisJaW50IHJlcXVlc3R0eXBlOworCWludCB2YWx1ZTsKKwlpbnQgaW5kZXg7CisJdm9pZCBfX3VzZXIgKmJ1ZmZlcjsKKwlpbnQgdGltZW91dDsKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9LY29uZmlnIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2EvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTU3ZTE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2EvS2NvbmZpZwpAQCAtMCwwICsxLDE0IEBACisKK2NvbmZpZyBVU0JfU0lTVVNCVkdBCisJdHJpc3RhdGUgIlVTQiAyLjAgU1ZHQSBkb25nbGUgc3VwcG9ydCAoTmV0MjI4MC9TaVMzMTUpIgorCWRlcGVuZHMgb24gVVNCICYmIFVTQl9FSENJX0hDRAorICAgICAgICAtLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gYXR0YWNoIGEgVVNCMlZHQSBkb25nbGUgYmFzZWQgb24gYQorCSAgTmV0MjI4MCBhbmQgYSBTaVMzMTUgY2hpcC4gCisJICAKKwkgIE5vdGUgdGhhdCB0aGlzIGRldmljZSByZXF1aXJlcyBhIFVTQiAyLjAgaG9zdCBjb250cm9sbGVyLiBJdCB3aWxsIG5vdCAKKwkgIHdvcmsgd2l0aCBVU0IgMS54IGNvbnRyb2xsZXJzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKKwkgIGNhbGxlZCBzaXN1c2IuICBJZiB1bnN1cmUsIHNheSBOLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZjE2NDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9NYWtlZmlsZQpAQCAtMCwwICsxLDYgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBzaXN1c2IgZHJpdmVyIChpZiBkcml2ZXIgaXMgaW5zaWRlIGtlcm5lbCB0cmVlKS4KKyMKKworb2JqLSQoQ09ORklHX1VTQl9TSVNVU0JWR0EpICs9IHNpc3VzYi5vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUxNjNiMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCkBAIC0wLDAgKzEsMzE0NSBAQAorLyoKKyAqIHNpc3VzYiAtIHVzYiBrZXJuZWwgZHJpdmVyIGZvciBTaVMzMTUoRSkgYmFzZWQgVVNCMlZHQSBkb25nbGVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IGJ5IFRob21hcyBXaW5pc2NoaG9mZXIsIFZpZW5uYSwgQXVzdHJpYQorICoKKyAqIElmIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCwgdGhpcyBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEdQTCB2Mi4KKyAqCisgKiBPdGhlcndpc2UsIHRoZSBmb2xsb3dpbmcgbGljZW5zZSB0ZXJtcyBhcHBseToKKyAqCisgKiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqICogYXJlIG1ldDoKKyAqICogMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogKiAyKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAqIDMpIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBzaXN1c2JyIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqICoKKyAqICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUgorICogKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogQXV0aG9yOiAJVGhvbWFzIFdpbmlzY2hob2ZlciA8dGhvbWFzQHdpbmlzY2hob2Zlci5uZXQ+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisKKyNpbmNsdWRlICJzaXN1c2IuaCIKKworI2RlZmluZSBTSVNVU0JfRE9OVFNZTkMKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgLyBjbGVhbi11cCByb3V0aW5lcyAqLworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2lzdXNiX2RyaXZlcjsKKworc3RhdGljIERFQ0xBUkVfTVVURVgoZGlzY29ubmVjdF9zZW0pOworCitzdGF0aWMgdm9pZAorc2lzdXNiX2ZyZWVfYnVmZmVycyhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNT0JVRlM7IGkrKykgeworCQlpZiAoc2lzdXNiLT5vYnVmW2ldKSB7CisJCQl1c2JfYnVmZmVyX2ZyZWUoc2lzdXNiLT5zaXN1c2JfZGV2LCBzaXN1c2ItPm9idWZzaXplLAorCQkJCXNpc3VzYi0+b2J1ZltpXSwgc2lzdXNiLT50cmFuc2Zlcl9kbWFfb3V0W2ldKTsKKwkJCXNpc3VzYi0+b2J1ZltpXSA9IE5VTEw7CisJCX0KKwl9CisJaWYgKHNpc3VzYi0+aWJ1ZikgeworCQl1c2JfYnVmZmVyX2ZyZWUoc2lzdXNiLT5zaXN1c2JfZGV2LCBzaXN1c2ItPmlidWZzaXplLAorCQkJc2lzdXNiLT5pYnVmLCBzaXN1c2ItPnRyYW5zZmVyX2RtYV9pbik7CisJCXNpc3VzYi0+aWJ1ZiA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZAorc2lzdXNiX2ZyZWVfdXJicyhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNT0JVRlM7IGkrKykgeworCQl1c2JfZnJlZV91cmIoc2lzdXNiLT5zaXN1cmJvdXRbaV0pOworCQlzaXN1c2ItPnNpc3VyYm91dFtpXSA9IE5VTEw7CisJfQorCXVzYl9mcmVlX3VyYihzaXN1c2ItPnNpc3VyYmluKTsKKwlzaXN1c2ItPnNpc3VyYmluID0gTlVMTDsKK30KKworLyogTGV2ZWwgMDogVVNCIHRyYW5zcG9ydCBsYXllciAqLworCisvKiAxLiBvdXQtYnVsa3MgKi8KKworLyogb3V0LXVyYiBtYW5hZ2VtZW50ICovCisKKy8qIFJldHVybiAxIGlmIGFsbCBmcmVlLCAwIG90aGVyd2lzZSAqLworc3RhdGljIGludAorc2lzdXNiX2FsbF9mcmVlKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXN1c2ItPm51bW9idWZzOyBpKyspIHsKKworCQlpZiAoc2lzdXNiLT51cmJzdGF0dXNbaV0gJiBTVV9VUkJfQlVTWSkKKwkJCXJldHVybiAwOworCisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8qIEtpbGwgYWxsIGJ1c3kgVVJCcyAqLworc3RhdGljIHZvaWQKK3Npc3VzYl9raWxsX2FsbF9idXN5KHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYikKK3sKKwlpbnQgaTsKKworCWlmIChzaXN1c2JfYWxsX2ZyZWUoc2lzdXNiKSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IHNpc3VzYi0+bnVtb2J1ZnM7IGkrKykgeworCisJCWlmIChzaXN1c2ItPnVyYnN0YXR1c1tpXSAmIFNVX1VSQl9CVVNZKQorCQkJdXNiX2tpbGxfdXJiKHNpc3VzYi0+c2lzdXJib3V0W2ldKTsKKworCX0KK30KKworLyogUmV0dXJuIDEgaWYgb2ssIDAgaWYgZXJyb3IgKG5vdCBhbGwgY29tcGxldGUgd2l0aGluIHRpbWVvdXQpICovCitzdGF0aWMgaW50CitzaXN1c2Jfd2FpdF9hbGxfb3V0X2NvbXBsZXRlKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYikKK3sKKwlpbnQgdGltZW91dCA9IDUgKiBIWiwgaSA9IDE7CisKKwl3YWl0X2V2ZW50X3RpbWVvdXQoc2lzdXNiLT53YWl0X3EsCisJCQkJKGkgPSBzaXN1c2JfYWxsX2ZyZWUoc2lzdXNiKSksCisJCQkJIHRpbWVvdXQpOworCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9vdXR1cmJfYXZhaWxhYmxlKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXN1c2ItPm51bW9idWZzOyBpKyspIHsKKworCQlpZiAoKHNpc3VzYi0+dXJic3RhdHVzW2ldICYgKFNVX1VSQl9CVVNZfFNVX1VSQl9BTExPQykpID09IDApCisJCQlyZXR1cm4gaTsKKworCX0KKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludAorc2lzdXNiX2dldF9mcmVlX291dGJ1ZihzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IpCit7CisJaW50IGksIHRpbWVvdXQgPSA1ICogSFo7CisKKwl3YWl0X2V2ZW50X3RpbWVvdXQoc2lzdXNiLT53YWl0X3EsCisJCQkJKChpID0gc2lzdXNiX291dHVyYl9hdmFpbGFibGUoc2lzdXNiKSkgPj0gMCksCisJCQkJdGltZW91dCk7CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludAorc2lzdXNiX2FsbG9jX291dGJ1ZihzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IpCit7CisJaW50IGk7CisKKwlpID0gc2lzdXNiX291dHVyYl9hdmFpbGFibGUoc2lzdXNiKTsKKworCWlmIChpID49IDApCisJCXNpc3VzYi0+dXJic3RhdHVzW2ldIHw9IFNVX1VSQl9BTExPQzsKKworCXJldHVybiBpOworfQorCitzdGF0aWMgdm9pZAorc2lzdXNiX2ZyZWVfb3V0YnVmKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IGluZGV4KQoreworCWlmICgoaW5kZXggPj0gMCkgJiYgKGluZGV4IDwgc2lzdXNiLT5udW1vYnVmcykpCisJCXNpc3VzYi0+dXJic3RhdHVzW2luZGV4XSAmPSB+U1VfVVJCX0FMTE9DOworfQorCisvKiBjb21wbGV0aW9uIGNhbGxiYWNrICovCisKK3N0YXRpYyB2b2lkCitzaXN1c2JfYnVsa19jb21wbGV0ZW91dChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBzaXN1c2JfdXJiX2NvbnRleHQgKmNvbnRleHQgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiOworCisJaWYgKCFjb250ZXh0KQorCQlyZXR1cm47CisKKwlzaXN1c2IgPSBjb250ZXh0LT5zaXN1c2I7CisKKwlpZiAoIXNpc3VzYiB8fCAhc2lzdXNiLT5zaXN1c2JfZGV2IHx8ICFzaXN1c2ItPnByZXNlbnQpCisJCXJldHVybjsKKworI2lmbmRlZiBTSVNVU0JfRE9OVFNZTkMKKwlpZiAoY29udGV4dC0+YWN0dWFsX2xlbmd0aCkKKwkJKihjb250ZXh0LT5hY3R1YWxfbGVuZ3RoKSArPSB1cmItPmFjdHVhbF9sZW5ndGg7CisjZW5kaWYKKworCXNpc3VzYi0+dXJic3RhdHVzW2NvbnRleHQtPnVyYmluZGV4XSAmPSB+U1VfVVJCX0JVU1k7CisJd2FrZV91cCgmc2lzdXNiLT53YWl0X3EpOworfQorCitzdGF0aWMgaW50CitzaXN1c2JfYnVsa291dF9tc2coc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgaW5kZXgsIHVuc2lnbmVkIGludCBwaXBlLCB2b2lkICpkYXRhLAorCQlpbnQgbGVuLCBpbnQgKmFjdHVhbF9sZW5ndGgsIGludCB0aW1lb3V0LCB1bnNpZ25lZCBpbnQgdGZsYWdzLAorCQlkbWFfYWRkcl90IHRyYW5zZmVyX2RtYSkKK3sKKwlzdHJ1Y3QgdXJiICp1cmIgPSBzaXN1c2ItPnNpc3VyYm91dFtpbmRleF07CisJaW50IHJldHZhbCwgYnl0ZXN3cml0dGVuID0gMDsKKworCS8qIFNldCB1cCBVUkIgKi8KKwl1cmItPnRyYW5zZmVyX2ZsYWdzID0gMDsKKworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgc2lzdXNiLT5zaXN1c2JfZGV2LCBwaXBlLCBkYXRhLCBsZW4sCisJCXNpc3VzYl9idWxrX2NvbXBsZXRlb3V0LCAmc2lzdXNiLT51cmJvdXRfY29udGV4dFtpbmRleF0pOworCisJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSAodGZsYWdzIHwgVVJCX0FTWU5DX1VOTElOSyk7CisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKworCWlmICgodXJiLT50cmFuc2Zlcl9kbWEgPSB0cmFuc2Zlcl9kbWEpKQorCQl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCisJLyogU2V0IHVwIGNvbnRleHQgKi8KKwlzaXN1c2ItPnVyYm91dF9jb250ZXh0W2luZGV4XS5hY3R1YWxfbGVuZ3RoID0gKHRpbWVvdXQpID8KKwkJCQkJCU5VTEwgOiBhY3R1YWxfbGVuZ3RoOworCisJLyogRGVjbGFyZSB0aGlzIHVyYi9idWZmZXIgaW4gdXNlICovCisJc2lzdXNiLT51cmJzdGF0dXNbaW5kZXhdIHw9IFNVX1VSQl9CVVNZOworCisJLyogU3VibWl0IFVSQiAqLworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisKKwkvKiBJZiBPSywgYW5kIGlmIHRpbWVvdXQgPiAwLCB3YWl0IGZvciBjb21wbGV0aW9uICovCisJaWYgKChyZXR2YWwgPT0gMCkgJiYgdGltZW91dCkgeworCQl3YWl0X2V2ZW50X3RpbWVvdXQoc2lzdXNiLT53YWl0X3EsCisJCQkJICAgKCEoc2lzdXNiLT51cmJzdGF0dXNbaW5kZXhdICYgU1VfVVJCX0JVU1kpKSwKKwkJCQkgICB0aW1lb3V0KTsKKwkJaWYgKHNpc3VzYi0+dXJic3RhdHVzW2luZGV4XSAmIFNVX1VSQl9CVVNZKSB7CisJCQkvKiBVUkIgdGltZWQgb3V0Li4uIGtpbGwgaXQgYW5kIHJlcG9ydCBlcnJvciAqLworCQkJdXNiX2tpbGxfdXJiKHVyYik7CisJCQlyZXR2YWwgPSAtRVRJTUVET1VUOworCQl9IGVsc2UgeworCQkJLyogT3RoZXJ3aXNlLCByZXBvcnQgdXJiIHN0YXR1cyAqLworCQkJcmV0dmFsID0gdXJiLT5zdGF0dXM7CisJCQlieXRlc3dyaXR0ZW4gPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJCX0KKwl9CisKKwlpZiAoYWN0dWFsX2xlbmd0aCkKKwkJKmFjdHVhbF9sZW5ndGggPSBieXRlc3dyaXR0ZW47CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiAyLiBpbi1idWxrcyAqLworCisvKiBjb21wbGV0aW9uIGNhbGxiYWNrICovCisKK3N0YXRpYyB2b2lkCitzaXN1c2JfYnVsa19jb21wbGV0ZWluKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiID0gdXJiLT5jb250ZXh0OworCisJaWYgKCFzaXN1c2IgfHwgIXNpc3VzYi0+c2lzdXNiX2RldiB8fCAhc2lzdXNiLT5wcmVzZW50KQorCQlyZXR1cm47CisKKwlzaXN1c2ItPmNvbXBsZXRlaW4gPSAxOworCXdha2VfdXAoJnNpc3VzYi0+d2FpdF9xKTsKK30KKworc3RhdGljIGludAorc2lzdXNiX2J1bGtpbl9tc2coc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCB1bnNpZ25lZCBpbnQgcGlwZSwgdm9pZCAqZGF0YSwgaW50IGxlbiwKKwkJaW50ICphY3R1YWxfbGVuZ3RoLCBpbnQgdGltZW91dCwgdW5zaWduZWQgaW50IHRmbGFncywgZG1hX2FkZHJfdCB0cmFuc2Zlcl9kbWEpCit7CisJc3RydWN0IHVyYiAqdXJiID0gc2lzdXNiLT5zaXN1cmJpbjsKKwlpbnQgcmV0dmFsLCByZWFkYnl0ZXMgPSAwOworCisJdXJiLT50cmFuc2Zlcl9mbGFncyA9IDA7CisKKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHNpc3VzYi0+c2lzdXNiX2RldiwgcGlwZSwgZGF0YSwgbGVuLAorCQkJc2lzdXNiX2J1bGtfY29tcGxldGVpbiwgc2lzdXNiKTsKKworCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gKHRmbGFncyB8IFVSQl9BU1lOQ19VTkxJTkspOworCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisKKwlpZiAoKHVyYi0+dHJhbnNmZXJfZG1hID0gdHJhbnNmZXJfZG1hKSkKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCXNpc3VzYi0+Y29tcGxldGVpbiA9IDA7CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0dmFsID09IDApIHsKKwkJd2FpdF9ldmVudF90aW1lb3V0KHNpc3VzYi0+d2FpdF9xLCBzaXN1c2ItPmNvbXBsZXRlaW4sIHRpbWVvdXQpOworCQlpZiAoIXNpc3VzYi0+Y29tcGxldGVpbikgeworCQkJLyogVVJCIHRpbWVkIG91dC4uLiBraWxsIGl0IGFuZCByZXBvcnQgZXJyb3IgKi8KKwkJCXVzYl9raWxsX3VyYih1cmIpOworCQkJcmV0dmFsID0gLUVUSU1FRE9VVDsKKwkJfSBlbHNlIHsKKwkJCS8qIFVSQiBjb21wbGV0ZWQgd2l0aGluIHRpbW91dCAqLworCQkJcmV0dmFsID0gdXJiLT5zdGF0dXM7CisJCQlyZWFkYnl0ZXMgPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJCX0KKwl9CisKKwlpZiAoYWN0dWFsX2xlbmd0aCkKKwkJKmFjdHVhbF9sZW5ndGggPSByZWFkYnl0ZXM7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qIExldmVsIDE6ICAqLworCisvKiBTZW5kIGEgYnVsayBtZXNzYWdlIG9mIHZhcmlhYmxlIHNpemUKKyAqCisgKiBUbyBjb3B5IHRoZSBkYXRhIGZyb20gdXNlcnNwYWNlLCBnaXZlIHBvaW50ZXIgdG8gInVzZXJidWZmZXIiLAorICogdG8gY29weSBmcm9tIChub24tRE1BKSBrZXJuZWwgbWVtb3J5LCBnaXZlICJrZXJuYnVmZmVyIi4gSWYKKyAqIGJvdGggb2YgdGhlc2UgYXJlIE5VTEwsIGl0IGlzIGFzc3VtZWQsIHRoYXQgdGhlIHRyYW5zZmVyCisgKiBidWZmZXIgInNpc3VzYi0+b2J1ZltpbmRleF0iIGlzIHNldCB1cCB3aXRoIHRoZSBkYXRhIHRvIHNlbmQuCisgKiBJbmRleCBpcyBpZ25vcmVkIGlmIGVpdGhlciBrZXJuYnVmZmVyIG9yIHVzZXJidWZmZXIgaXMgc2V0LgorICogSWYgYXN5bmMgaXMgbm9uemVybywgVVJCcyB3aWxsIGJlIHNlbnQgd2l0aG91dCB3YWl0aW5nIGZvcgorICogY29tcGxldGlvbiBvZiB0aGUgcHJldmlvdXMgVVJCLgorICoKKyAqIChyZXR1cm4gMCBvbiBzdWNjZXNzKQorICovCisKK3N0YXRpYyBpbnQgc2lzdXNiX3NlbmRfYnVsa19tc2coc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgZXAsIGludCBsZW4sCisJCWNoYXIgKmtlcm5idWZmZXIsIGNvbnN0IGNoYXIgX191c2VyICp1c2VyYnVmZmVyLCBpbnQgaW5kZXgsCisJCXNzaXplX3QgKmJ5dGVzX3dyaXR0ZW4sIHVuc2lnbmVkIGludCB0ZmxhZ3MsIGludCBhc3luYykKK3sKKwlpbnQgcmVzdWx0ID0gMCwgcmV0cnksIGNvdW50ID0gbGVuOworCWludCBwYXNzc2l6ZSwgdGhpc3Bhc3MsIHRyYW5zZmVycmVkX2xlbiA9IDA7CisJaW50IGZyb211c2VyID0gKHVzZXJidWZmZXIgIT0gTlVMTCkgPyAxIDogMDsKKwlpbnQgZnJvbWtlcm4gPSAoa2VybmJ1ZmZlciAhPSBOVUxMKSA/IDEgOiAwOworCXVuc2lnbmVkIGludCBwaXBlOworCWNoYXIgKmJ1ZmZlcjsKKworCSgqYnl0ZXNfd3JpdHRlbikgPSAwOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKCFzaXN1c2IgfHwgIXNpc3VzYi0+cHJlc2VudCB8fCAhc2lzdXNiLT5zaXN1c2JfZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIElmIHdlIGNvcHkgZGF0YSBmcm9tIGtlcm5lbCBvciB1c2Vyc3BhY2UsIGZvcmNlIHRoZQorCSAqIGFsbG9jYXRpb24gb2YgYSBidWZmZXIvdXJiLiBJZiB3ZSBoYXZlIHRoZSBkYXRhIGluCisJICogdGhlIHRyYW5zZmVyIGJ1ZmZlcltpbmRleF0gYWxyZWFkeSwgcmV1c2UgdGhlIGJ1ZmZlci9VUkIKKwkgKiBpZiB0aGUgbGVuZ3RoIGlzID4gYnVmZmVyIHNpemUuIChTbywgdHJhbnNtaXR0aW5nCisJICogbGFyZ2UgZGF0YSBhbW91bnRzIGRpcmVjdGx5IGZyb20gdGhlIHRyYW5zZmVyIGJ1ZmZlcgorCSAqIHRyZWF0cyB0aGUgYnVmZmVyIGFzIGEgcmluZyBidWZmZXIuIEhvd2V2ZXIsIHdlIG5lZWQKKwkgKiB0byBzeW5jIGluIHRoaXMgY2FzZS4pCisJICovCisJaWYgKGZyb211c2VyIHx8IGZyb21rZXJuKQorCQlpbmRleCA9IC0xOworCWVsc2UgaWYgKGxlbiA+IHNpc3VzYi0+b2J1ZnNpemUpCisJCWFzeW5jID0gMDsKKworCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUoc2lzdXNiLT5zaXN1c2JfZGV2LCBlcCk7CisKKwlkbyB7CisJCXBhc3NzaXplID0gdGhpc3Bhc3MgPSAoc2lzdXNiLT5vYnVmc2l6ZSA8IGNvdW50KSA/CisJCQkJCQlzaXN1c2ItPm9idWZzaXplIDogY291bnQ7CisKKwkJaWYgKGluZGV4IDwgMCkKKwkJCWluZGV4ID0gc2lzdXNiX2dldF9mcmVlX291dGJ1ZihzaXN1c2IpOworCisJCWlmIChpbmRleCA8IDApCisJCQlyZXR1cm4gLUVJTzsKKworCQlidWZmZXIgPSBzaXN1c2ItPm9idWZbaW5kZXhdOworCisJCWlmIChmcm9tdXNlcikgeworCisJCQlpZiAoY29weV9mcm9tX3VzZXIoYnVmZmVyLCB1c2VyYnVmZmVyLCBwYXNzc2l6ZSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJCXVzZXJidWZmZXIgKz0gcGFzc3NpemU7CisKKwkJfSBlbHNlIGlmIChmcm9ta2VybikgeworCisJCQltZW1jcHkoYnVmZmVyLCBrZXJuYnVmZmVyLCBwYXNzc2l6ZSk7CisJCQlrZXJuYnVmZmVyICs9IHBhc3NzaXplOworCisJCX0KKworCQlyZXRyeSA9IDU7CisJCXdoaWxlICh0aGlzcGFzcykgeworCisJCQlpZiAoIXNpc3VzYi0+c2lzdXNiX2RldikKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKworCQkJcmVzdWx0ID0gc2lzdXNiX2J1bGtvdXRfbXNnKHNpc3VzYiwKKwkJCQkJCWluZGV4LAorCQkJCQkJcGlwZSwKKwkJCQkJCWJ1ZmZlciwKKwkJCQkJCXRoaXNwYXNzLAorCQkJCQkJJnRyYW5zZmVycmVkX2xlbiwKKwkJCQkJCWFzeW5jID8gMCA6IDUgKiBIWiwKKwkJCQkJCXRmbGFncywKKwkJCQkJCXNpc3VzYi0+dHJhbnNmZXJfZG1hX291dFtpbmRleF0pOworCisJCQlpZiAocmVzdWx0ID09IC1FVElNRURPVVQpIHsKKworCQkJCS8qIFdpbGwgbm90IGhhcHBlbiBpZiBhc3luYyAqLworCQkJCWlmICghcmV0cnktLSkKKwkJCQkJcmV0dXJuIC1FVElNRTsKKworCQkJCWNvbnRpbnVlOworCisJCQl9IGVsc2UgaWYgKChyZXN1bHQgPT0gMCkgJiYgIWFzeW5jICYmIHRyYW5zZmVycmVkX2xlbikgeworCisJCQkJdGhpc3Bhc3MgLT0gdHJhbnNmZXJyZWRfbGVuOworCQkJCWlmICh0aGlzcGFzcykgeworCQkJCQlpZiAoc2lzdXNiLT50cmFuc2Zlcl9kbWFfb3V0KSB7CisJCQkJCQkvKiBJZiBETUEsIGNvcHkgcmVtYWluaW5nCisJCQkJCQkgKiB0byBiZWdpbm5pbmcgb2YgYnVmZmVyCisJCQkJCQkgKi8KKwkJCQkJCW1lbWNweShidWZmZXIsCisJCQkJCQkgICAgICAgYnVmZmVyICsgdHJhbnNmZXJyZWRfbGVuLAorCQkJCQkJICAgICAgIHRoaXNwYXNzKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCS8qIElmIG5vdCBETUEsIHNpbXBseSBpbmNyZWFzZQorCQkJCQkJICogdGhlIHBvaW50ZXIKKwkJCQkJCSAqLworCQkJCQkJYnVmZmVyICs9IHRyYW5zZmVycmVkX2xlbjsKKwkJCQkJfQorCQkJCX0KKworCQkJfSBlbHNlCisJCQkJYnJlYWs7CisJCX07CisKKwkJaWYgKHJlc3VsdCkKKwkJCXJldHVybiByZXN1bHQ7CisKKwkJKCpieXRlc193cml0dGVuKSArPSBwYXNzc2l6ZTsKKwkJY291bnQgICAgICAgICAgICAtPSBwYXNzc2l6ZTsKKworCQkvKiBGb3JjZSBuZXcgYWxsb2NhdGlvbiBpbiBuZXh0IGl0ZXJhdGlvbiAqLworCQlpZiAoZnJvbXVzZXIgfHwgZnJvbWtlcm4pCisJCQlpbmRleCA9IC0xOworCisJfSB3aGlsZSAoY291bnQgPiAwKTsKKworCWlmIChhc3luYykgeworI2lmZGVmIFNJU1VTQl9ET05UU1lOQworCQkoKmJ5dGVzX3dyaXR0ZW4pID0gbGVuOworCQkvKiBTb21lIFVSQnMvYnVmZmVycyBtaWdodCBiZSBidXN5ICovCisjZWxzZQorCQlzaXN1c2Jfd2FpdF9hbGxfb3V0X2NvbXBsZXRlKHNpc3VzYik7CisJCSgqYnl0ZXNfd3JpdHRlbikgPSB0cmFuc2ZlcnJlZF9sZW47CisJCS8qIEFsbCBVUkJzIGFuZCBhbGwgYnVmZmVycyBhcmUgYXZhaWxhYmxlICovCisjZW5kaWYKKwl9CisKKwlyZXR1cm4gKCgqYnl0ZXNfd3JpdHRlbikgPT0gbGVuKSA/IDAgOiAtRUlPOworfQorCisvKiBSZWNlaXZlIGEgYnVsayBtZXNzYWdlIG9mIHZhcmlhYmxlIHNpemUKKyAqCisgKiBUbyBjb3B5IHRoZSBkYXRhIHRvIHVzZXJzcGFjZSwgZ2l2ZSBwb2ludGVyIHRvICJ1c2VyYnVmZmVyIiwKKyAqIHRvIGNvcHkgdG8ga2VybmVsIG1lbW9yeSwgZ2l2ZSAia2VybmJ1ZmZlciIuIE9uZSBvZiB0aGVtCisgKiBNVVNUIGJlIHNldC4gKFRoZXJlIGlzIG5vIHRlY2huaXF1ZSBmb3IgbGV0dGluZyB0aGUgY2FsbGVyCisgKiByZWFkIGRpcmVjdGx5IGZyb20gdGhlIGlidWYuKQorICoKKyAqLworCitzdGF0aWMgaW50IHNpc3VzYl9yZWN2X2J1bGtfbXNnKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IGVwLCBpbnQgbGVuLAorCQl2b2lkICprZXJuYnVmZmVyLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZmZlciwgc3NpemVfdCAqYnl0ZXNfcmVhZCwKKwkJdW5zaWduZWQgaW50IHRmbGFncykKK3sKKwlpbnQgcmVzdWx0ID0gMCwgcmV0cnksIGNvdW50ID0gbGVuOworCWludCBidWZzaXplLCB0aGlzcGFzcywgdHJhbnNmZXJyZWRfbGVuOworCXVuc2lnbmVkIGludCBwaXBlOworCWNoYXIgKmJ1ZmZlcjsKKworCSgqYnl0ZXNfcmVhZCkgPSAwOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKCFzaXN1c2IgfHwgIXNpc3VzYi0+cHJlc2VudCB8fCAhc2lzdXNiLT5zaXN1c2JfZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBpcGUgPSB1c2JfcmN2YnVsa3BpcGUoc2lzdXNiLT5zaXN1c2JfZGV2LCBlcCk7CisJYnVmZmVyID0gc2lzdXNiLT5pYnVmOworCWJ1ZnNpemUgPSBzaXN1c2ItPmlidWZzaXplOworCisJcmV0cnkgPSA1OworCisjaWZkZWYgU0lTVVNCX0RPTlRTWU5DCisJaWYgKCEoc2lzdXNiX3dhaXRfYWxsX291dF9jb21wbGV0ZShzaXN1c2IpKSkKKwkJcmV0dXJuIC1FSU87CisjZW5kaWYKKworCXdoaWxlIChjb3VudCA+IDApIHsKKworCQlpZiAoIXNpc3VzYi0+c2lzdXNiX2RldikKKwkJCXJldHVybiAtRU5PREVWOworCisJCXRoaXNwYXNzID0gKGJ1ZnNpemUgPCBjb3VudCkgPyBidWZzaXplIDogY291bnQ7CisKKwkJcmVzdWx0ID0gc2lzdXNiX2J1bGtpbl9tc2coc2lzdXNiLAorCQkJCQkgICBwaXBlLAorCQkJCQkgICBidWZmZXIsCisJCQkJCSAgIHRoaXNwYXNzLAorCQkJCQkgICAmdHJhbnNmZXJyZWRfbGVuLAorCQkJCQkgICA1ICogSFosCisJCQkJCSAgIHRmbGFncywKKwkJCQkJICAgc2lzdXNiLT50cmFuc2Zlcl9kbWFfaW4pOworCisJCWlmICh0cmFuc2ZlcnJlZF9sZW4pCisJCQl0aGlzcGFzcyA9IHRyYW5zZmVycmVkX2xlbjsKKworCQllbHNlIGlmIChyZXN1bHQgPT0gLUVUSU1FRE9VVCkgeworCisJCQlpZiAoIXJldHJ5LS0pCisJCQkJcmV0dXJuIC1FVElNRTsKKworCQkJY29udGludWU7CisKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVJTzsKKworCisJCWlmICh0aGlzcGFzcykgeworCisJCQkoKmJ5dGVzX3JlYWQpICs9IHRoaXNwYXNzOworCQkJY291bnQgICAgICAgICAtPSB0aGlzcGFzczsKKworCQkJaWYgKHVzZXJidWZmZXIpIHsKKworCQkJCWlmIChjb3B5X3RvX3VzZXIodXNlcmJ1ZmZlciwgYnVmZmVyLCB0aGlzcGFzcykpCisJCQkJCXJldHVybiAtRUZBVUxUOworCisJCQkJdXNlcmJ1ZmZlciArPSB0aGlzcGFzczsKKworCQkJfSBlbHNlIHsKKworCQkJCW1lbWNweShrZXJuYnVmZmVyLCBidWZmZXIsIHRoaXNwYXNzKTsKKwkJCQlrZXJuYnVmZmVyICs9IHRoaXNwYXNzOworCisJCQl9CisKKwkJfQorCisJfQorCisJcmV0dXJuICgoKmJ5dGVzX3JlYWQpID09IGxlbikgPyAwIDogLUVJTzsKK30KKworc3RhdGljIGludCBzaXN1c2Jfc2VuZF9wYWNrZXQoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgbGVuLAorCQkJCQkJc3RydWN0IHNpc3VzYl9wYWNrZXQgKnBhY2tldCkKK3sKKwlpbnQgcmV0OworCXNzaXplX3QgYnl0ZXNfdHJhbnNmZXJyZWQgPSAwOworCV9fbGUzMiB0bXA7CisKKwlpZiAobGVuID09IDYpCisJCXBhY2tldC0+ZGF0YSA9IDA7CisKKyNpZmRlZiBTSVNVU0JfRE9OVFNZTkMKKwlpZiAoIShzaXN1c2Jfd2FpdF9hbGxfb3V0X2NvbXBsZXRlKHNpc3VzYikpKQorCQlyZXR1cm4gMTsKKyNlbmRpZgorCisJLyogRXZlbnR1YWxseSBjb3JyZWN0IGVuZGlhbm5lc3MgKi8KKwlTSVNVU0JfQ09SUkVDVF9FTkRJQU5ORVNTX1BBQ0tFVChwYWNrZXQpOworCisJLyogMS4gc2VuZCB0aGUgcGFja2V0ICovCisJcmV0ID0gc2lzdXNiX3NlbmRfYnVsa19tc2coc2lzdXNiLCBTSVNVU0JfRVBfR0ZYX09VVCwgbGVuLAorCQkJKGNoYXIgKilwYWNrZXQsIE5VTEwsIDAsICZieXRlc190cmFuc2ZlcnJlZCwgMCwgMCk7CisKKwlpZiAoKHJldCA9PSAwKSAmJiAobGVuID09IDYpKSB7CisKKwkJLyogMi4gaWYgcGFja2V0IGxlbiA9PSA2LCBpdCBtZWFucyB3ZSByZWFkLCBzbyB3YWl0IGZvciAzMmJpdAorCQkgKiAgICByZXR1cm4gdmFsdWUgYW5kIHdyaXRlIGl0IHRvIHBhY2tldC0+ZGF0YQorCQkgKi8KKwkJcmV0ID0gc2lzdXNiX3JlY3ZfYnVsa19tc2coc2lzdXNiLCBTSVNVU0JfRVBfR0ZYX0lOLCA0LAorCQkJCShjaGFyICopJnRtcCwgTlVMTCwgJmJ5dGVzX3RyYW5zZmVycmVkLCAwKTsKKworCQlwYWNrZXQtPmRhdGEgPSBsZTMyX3RvX2NwdSh0bXApOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2lzdXNiX3NlbmRfYnJpZGdlX3BhY2tldChzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCBsZW4sCisJCQkJCXN0cnVjdCBzaXN1c2JfcGFja2V0ICpwYWNrZXQsCisJCQkJCXVuc2lnbmVkIGludCB0ZmxhZ3MpCit7CisJaW50IHJldDsKKwlzc2l6ZV90IGJ5dGVzX3RyYW5zZmVycmVkID0gMDsKKwlfX2xlMzIgdG1wOworCisJaWYgKGxlbiA9PSA2KQorCQlwYWNrZXQtPmRhdGEgPSAwOworCisjaWZkZWYgU0lTVVNCX0RPTlRTWU5DCisJaWYgKCEoc2lzdXNiX3dhaXRfYWxsX291dF9jb21wbGV0ZShzaXN1c2IpKSkKKwkJcmV0dXJuIDE7CisjZW5kaWYKKworCS8qIEV2ZW50dWFsbHkgY29ycmVjdCBlbmRpYW5uZXNzICovCisJU0lTVVNCX0NPUlJFQ1RfRU5ESUFOTkVTU19QQUNLRVQocGFja2V0KTsKKworCS8qIDEuIHNlbmQgdGhlIHBhY2tldCAqLworCXJldCA9IHNpc3VzYl9zZW5kX2J1bGtfbXNnKHNpc3VzYiwgU0lTVVNCX0VQX0JSSURHRV9PVVQsIGxlbiwKKwkJCShjaGFyICopcGFja2V0LCBOVUxMLCAwLCAmYnl0ZXNfdHJhbnNmZXJyZWQsIHRmbGFncywgMCk7CisKKwlpZiAoKHJldCA9PSAwKSAmJiAobGVuID09IDYpKSB7CisKKwkJLyogMi4gaWYgcGFja2V0IGxlbiA9PSA2LCBpdCBtZWFucyB3ZSByZWFkLCBzbyB3YWl0IGZvciAzMmJpdAorCQkgKiAgICByZXR1cm4gdmFsdWUgYW5kIHdyaXRlIGl0IHRvIHBhY2tldC0+ZGF0YQorCQkgKi8KKwkJcmV0ID0gc2lzdXNiX3JlY3ZfYnVsa19tc2coc2lzdXNiLCBTSVNVU0JfRVBfQlJJREdFX0lOLCA0LAorCQkJCShjaGFyICopJnRtcCwgTlVMTCwgJmJ5dGVzX3RyYW5zZmVycmVkLCAwKTsKKworCQlwYWNrZXQtPmRhdGEgPSBsZTMyX3RvX2NwdSh0bXApOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIGFjY2VzcyB2aWRlbyBtZW1vcnkgYW5kIG1taW8gKHJldHVybiAwIG9uIHN1Y2Nlc3MpICovCisKKy8qIExvdyBsZXZlbCAqLworCisvKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIGFzc3VtZSBiZWluZyB1c2VkIHRvIHRyYW5zZmVyIGJ5dGUsIHdvcmQsCisgKiBsb25nIGV0Yy4KKyAqIFRoaXMgbWVhbnMgdGhhdCB0aGV5IGFzc3VtZSAiZGF0YSIgaW4gbWFjaGluZSBlbmRpYW5uZXNzIGZvcm1hdC4KKyAqLworCitzdGF0aWMgaW50IHNpc3VzYl93cml0ZV9tZW1pb19ieXRlKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IHR5cGUsCisJCQkJCQkJdTMyIGFkZHIsIHU4IGRhdGEpCit7CisJc3RydWN0IHNpc3VzYl9wYWNrZXQgcGFja2V0OworCWludCByZXQ7CisKKwlwYWNrZXQuaGVhZGVyICA9ICgxIDw8IChhZGRyICYgMykpIHwgKHR5cGUgPDwgNik7CisJcGFja2V0LmFkZHJlc3MgPSBhZGRyICYgfjM7CisJcGFja2V0LmRhdGEgICAgPSBkYXRhIDw8ICgoYWRkciAmIDMpIDw8IDMpOworCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNpc3VzYl93cml0ZV9tZW1pb193b3JkKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IHR5cGUsCisJCQkJCQkJdTMyIGFkZHIsIHUxNiBkYXRhKQoreworCXN0cnVjdCBzaXN1c2JfcGFja2V0IHBhY2tldDsKKwlpbnQgcmV0ID0gMDsKKworCXBhY2tldC5hZGRyZXNzID0gYWRkciAmIH4zOworCisJc3dpdGNoIChhZGRyICYgMykgeworCQljYXNlIDA6CisJCQlwYWNrZXQuaGVhZGVyID0gKHR5cGUgPDwgNikgfCAweDAwMDM7CisJCQlwYWNrZXQuZGF0YSAgID0gKHUzMilkYXRhOworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXBhY2tldC5oZWFkZXIgPSAodHlwZSA8PCA2KSB8IDB4MDAwNjsKKwkJCXBhY2tldC5kYXRhICAgPSAodTMyKWRhdGEgPDwgODsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0KTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlwYWNrZXQuaGVhZGVyID0gKHR5cGUgPDwgNikgfCAweDAwMGM7CisJCQlwYWNrZXQuZGF0YSAgID0gKHUzMilkYXRhIDw8IDE2OworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXBhY2tldC5oZWFkZXIgPSAodHlwZSA8PCA2KSB8IDB4MDAwODsKKwkJCXBhY2tldC5kYXRhICAgPSAodTMyKWRhdGEgPDwgMjQ7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCk7CisJCQlwYWNrZXQuaGVhZGVyID0gKHR5cGUgPDwgNikgfCAweDAwMDE7CisJCQlwYWNrZXQuYWRkcmVzcyA9IChhZGRyICYgfjMpICsgNDsKKwkJCXBhY2tldC5kYXRhICAgPSAodTMyKWRhdGEgPj4gODsKKwkJCXJldCB8PSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzaXN1c2Jfd3JpdGVfbWVtaW9fMjRiaXQoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgdHlwZSwKKwkJCQkJCQl1MzIgYWRkciwgdTMyIGRhdGEpCit7CisJc3RydWN0IHNpc3VzYl9wYWNrZXQgcGFja2V0OworCWludCByZXQgPSAwOworCisJcGFja2V0LmFkZHJlc3MgPSBhZGRyICYgfjM7CisKKwlzd2l0Y2ggKGFkZHIgJiAzKSB7CisJCWNhc2UgMDoKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMDc7CisJCQlwYWNrZXQuZGF0YSAgICA9IGRhdGEgJiAweDAwZmZmZmZmOworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMGU7CisJCQlwYWNrZXQuZGF0YSAgICA9IGRhdGEgPDwgODsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0KTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDBjOworCQkJcGFja2V0LmRhdGEgICAgPSBkYXRhIDw8IDE2OworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQpOworCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwMTsKKwkJCXBhY2tldC5hZGRyZXNzID0gKGFkZHIgJiB+MykgKyA0OworCQkJcGFja2V0LmRhdGEgICAgPSAoZGF0YSA+PiAxNikgJiAweDAwZmY7CisJCQlyZXQgfD0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMDg7CisJCQlwYWNrZXQuZGF0YSAgICA9IGRhdGEgPDwgMjQ7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCk7CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDAzOworCQkJcGFja2V0LmFkZHJlc3MgPSAoYWRkciAmIH4zKSArIDQ7CisJCQlwYWNrZXQuZGF0YSAgICA9IChkYXRhID4+IDgpICYgMHhmZmZmOworCQkJcmV0IHw9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNpc3VzYl93cml0ZV9tZW1pb19sb25nKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IHR5cGUsCisJCQkJCQkJdTMyIGFkZHIsIHUzMiBkYXRhKQoreworCXN0cnVjdCBzaXN1c2JfcGFja2V0IHBhY2tldDsKKwlpbnQgcmV0ID0gMDsKKworCXBhY2tldC5hZGRyZXNzID0gYWRkciAmIH4zOworCisJc3dpdGNoIChhZGRyICYgMykgeworCQljYXNlIDA6CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDBmOworCQkJcGFja2V0LmRhdGEgICAgPSBkYXRhOworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMGU7CisJCQlwYWNrZXQuZGF0YSAgICA9IGRhdGEgPDwgODsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0KTsKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMDE7CisJCQlwYWNrZXQuYWRkcmVzcyA9IChhZGRyICYgfjMpICsgNDsKKwkJCXBhY2tldC5kYXRhICAgID0gZGF0YSA+PiAyNDsKKwkJCXJldCB8PSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwYzsKKwkJCXBhY2tldC5kYXRhICAgID0gZGF0YSA8PCAxNjsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0KTsKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMDM7CisJCQlwYWNrZXQuYWRkcmVzcyA9IChhZGRyICYgfjMpICsgNDsKKwkJCXBhY2tldC5kYXRhICAgID0gZGF0YSA+PiAxNjsKKwkJCXJldCB8PSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCk7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwODsKKwkJCXBhY2tldC5kYXRhICAgID0gZGF0YSA8PCAyNDsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0KTsKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMDc7CisJCQlwYWNrZXQuYWRkcmVzcyA9IChhZGRyICYgfjMpICsgNDsKKwkJCXBhY2tldC5kYXRhICAgID0gZGF0YSA+PiA4OworCQkJcmV0IHw9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBUaGUgeHh4X2J1bGsgcm91dGluZXMgY29weSBhIGJ1ZmZlciBvZiB2YXJpYWJsZSBzaXplLiBUaGV5IHRyZWF0IHRoZQorICogYnVmZmVyIGFzIGNoYXJzLCB0aGVyZWZvcmUgbHNiL21zYiBoYXMgdG8gYmUgY29ycmVjdGVkIGlmIHVzaW5nIHRoZQorICogYnl0ZS93b3JkL2xvbmcvZXRjIHJvdXRpbmVzIGZvciBzcGVlZC11cAorICoKKyAqIElmIGRhdGEgaXMgZnJvbSB1c2VybGFuZCwgc2V0ICJ1c2VyYnVmZmVyIiAoYW5kIGNsZWFyICJrZXJuYnVmZmVyIiksCisgKiBpZiBkYXRhIGlzIGluIGtlcm5lbCBzcGFjZSwgc2V0ICJrZXJuYnVmZmVyIiAoYW5kIGNsZWFyICJ1c2VyYnVmZmVyIik7CisgKiBpZiBuZWl0aGVyICJrZXJuYnVmZmVyIiBub3IgInVzZXJidWZmZXIiIGFyZSBnaXZlbiwgaXQgaXMgYXNzdW1lZAorICogdGhhdCB0aGUgZGF0YSBhbHJlYWR5IGlzIGluIHRoZSB0cmFuc2ZlciBidWZmZXIgInNpc3VzYi0+b2J1ZltpbmRleF0iLgorICovCisKK3N0YXRpYyBpbnQgc2lzdXNiX3dyaXRlX21lbV9idWxrKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgdTMyIGFkZHIsCisJCQkJY2hhciAqa2VybmJ1ZmZlciwgaW50IGxlbmd0aCwKKwkJCQljb25zdCBjaGFyIF9fdXNlciAqdXNlcmJ1ZmZlciwgaW50IGluZGV4LAorCQkJCXNzaXplX3QgKmJ5dGVzX3dyaXR0ZW4pCit7CisJc3RydWN0IHNpc3VzYl9wYWNrZXQgcGFja2V0OworCWludCAgcmV0ID0gMDsKKwlzdGF0aWMgaW50IG1zZ2NvdW50ID0gMDsKKwl1OCAgIHN3YXA4LCBmcm9ta2VybiA9IGtlcm5idWZmZXIgPyAxIDogMDsKKwl1MTYgIHN3YXAxNjsKKwl1MzIgIHN3YXAzMiwgZmxhZyA9IChsZW5ndGggPj4gMjgpICYgMTsKKwljaGFyIGJ1Zls0XTsKKworCS8qIGlmIG5laXRoZXIga2VybmJ1ZmZlciBub3QgdXNlcmJ1ZmZlciBhcmUgZ2l2ZW4sIGFzc3VtZQorCSAqIGRhdGEgaW4gb2J1ZgorCSAqLworCWlmICghZnJvbWtlcm4gJiYgIXVzZXJidWZmZXIpCisJCWtlcm5idWZmZXIgPSBzaXN1c2ItPm9idWZbaW5kZXhdOworCisJKCpieXRlc193cml0dGVuID0gMCk7CisKKwlsZW5ndGggJj0gMHgwMGZmZmZmZjsKKworCXdoaWxlIChsZW5ndGgpIHsKKworCSAgICBzd2l0Y2ggKGxlbmd0aCkgeworCisJCWNhc2UgMDoKKwkJCXJldHVybiByZXQ7CisKKwkJY2FzZSAxOgorCQkJaWYgKHVzZXJidWZmZXIpIHsKKwkJCQlpZiAoZ2V0X3VzZXIoc3dhcDgsICh1OCBfX3VzZXIgKil1c2VyYnVmZmVyKSkKKwkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9IGVsc2UKKwkJCQlzd2FwOCA9IGtlcm5idWZmZXJbMF07CisKKwkJCXJldCA9IHNpc3VzYl93cml0ZV9tZW1pb19ieXRlKHNpc3VzYiwKKwkJCQkJCQlTSVNVU0JfVFlQRV9NRU0sCisJCQkJCQkJYWRkciwgc3dhcDgpOworCisJCQlpZiAoIXJldCkKKwkJCQkoKmJ5dGVzX3dyaXR0ZW4pKys7CisKKwkJCXJldHVybiByZXQ7CisKKwkJY2FzZSAyOgorCQkJaWYgKHVzZXJidWZmZXIpIHsKKwkJCQlpZiAoZ2V0X3VzZXIoc3dhcDE2LCAodTE2IF9fdXNlciAqKXVzZXJidWZmZXIpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0gZWxzZQorCQkJCXN3YXAxNiA9IChrZXJuYnVmZmVyWzBdIDw8IDgpIHwga2VybmJ1ZmZlclsxXTsKKworCQkJcmV0ID0gc2lzdXNiX3dyaXRlX21lbWlvX3dvcmQoc2lzdXNiLAorCQkJCQkJCVNJU1VTQl9UWVBFX01FTSwKKwkJCQkJCQlhZGRyLAorCQkJCQkJCXN3YXAxNik7CisKKwkJCWlmICghcmV0KQorCQkJCSgqYnl0ZXNfd3JpdHRlbikgKz0gMjsKKworCQkJcmV0dXJuIHJldDsKKworCQljYXNlIDM6CisJCQlpZiAodXNlcmJ1ZmZlcikgeworCQkJCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCB1c2VyYnVmZmVyLCAzKSkKKwkJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJCQlzd2FwMzIgPSAoYnVmWzBdIDw8IDE2KSB8CisJCQkJCSAoYnVmWzFdIDw8ICA4KSB8CisJCQkJCSBidWZbMl07CisJCQl9IGVsc2UKKwkJCQlzd2FwMzIgPSAoa2VybmJ1ZmZlclswXSA8PCAxNikgfAorCQkJCQkgKGtlcm5idWZmZXJbMV0gPDwgIDgpIHwKKwkJCQkJIGtlcm5idWZmZXJbMl07CisKKwkJCXJldCA9IHNpc3VzYl93cml0ZV9tZW1pb18yNGJpdChzaXN1c2IsCisJCQkJCQkJU0lTVVNCX1RZUEVfTUVNLAorCQkJCQkJCWFkZHIsCisJCQkJCQkJc3dhcDMyKTsKKworCQkJaWYgKCFyZXQpCisJCQkJKCpieXRlc193cml0dGVuKSArPSAzOworCisJCQlyZXR1cm4gcmV0OworCisJCWNhc2UgNDoKKwkJCWlmICh1c2VyYnVmZmVyKSB7CisJCQkJaWYgKGdldF91c2VyKHN3YXAzMiwgKHUzMiBfX3VzZXIgKil1c2VyYnVmZmVyKSkKKwkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9IGVsc2UKKwkJCQlzd2FwMzIgPSAoa2VybmJ1ZmZlclswXSA8PCAyNCkgfAorCQkJCQkgKGtlcm5idWZmZXJbMV0gPDwgMTYpIHwKKwkJCQkJIChrZXJuYnVmZmVyWzJdIDw8ICA4KSB8CisJCQkJCSBrZXJuYnVmZmVyWzNdOworCisJCQlyZXQgPSBzaXN1c2Jfd3JpdGVfbWVtaW9fbG9uZyhzaXN1c2IsCisJCQkJCQkJU0lTVVNCX1RZUEVfTUVNLAorCQkJCQkJCWFkZHIsCisJCQkJCQkJc3dhcDMyKTsKKwkJCWlmICghcmV0KQorCQkJCSgqYnl0ZXNfd3JpdHRlbikgKz0gNDsKKworCQkJcmV0dXJuIHJldDsKKworCQlkZWZhdWx0OgorCQkJaWYgKChsZW5ndGggJiB+MykgPiAweDEwMDAwKSB7CisKKwkJCSAgIHBhY2tldC5oZWFkZXIgID0gMHgwMDFmOworCQkJICAgcGFja2V0LmFkZHJlc3MgPSAweDAwMDAwMWQ0OworCQkJICAgcGFja2V0LmRhdGEgICAgPSBhZGRyOworCQkJICAgcmV0ID0gc2lzdXNiX3NlbmRfYnJpZGdlX3BhY2tldChzaXN1c2IsIDEwLAorCQkJCQkJCQkmcGFja2V0LCAwKTsKKwkJCSAgIHBhY2tldC5oZWFkZXIgID0gMHgwMDFmOworCQkJICAgcGFja2V0LmFkZHJlc3MgPSAweDAwMDAwMWQwOworCQkJICAgcGFja2V0LmRhdGEgICAgPSAobGVuZ3RoICYgfjMpOworCQkJICAgcmV0IHw9IHNpc3VzYl9zZW5kX2JyaWRnZV9wYWNrZXQoc2lzdXNiLCAxMCwKKwkJCQkJCQkJJnBhY2tldCwgMCk7CisJCQkgICBwYWNrZXQuaGVhZGVyICA9IDB4MDAxZjsKKwkJCSAgIHBhY2tldC5hZGRyZXNzID0gMHgwMDAwMDFjMDsKKwkJCSAgIHBhY2tldC5kYXRhICAgID0gZmxhZyB8IDB4MTY7CisJCQkgICByZXQgfD0gc2lzdXNiX3NlbmRfYnJpZGdlX3BhY2tldChzaXN1c2IsIDEwLAorCQkJCQkJCQkmcGFja2V0LCAwKTsKKwkJCSAgIGlmICh1c2VyYnVmZmVyKSB7CisJCQkJcmV0IHw9IHNpc3VzYl9zZW5kX2J1bGtfbXNnKHNpc3VzYiwKKwkJCQkJCQlTSVNVU0JfRVBfR0ZYX0xCVUxLX09VVCwKKwkJCQkJCQkobGVuZ3RoICYgfjMpLAorCQkJCQkJCU5VTEwsIHVzZXJidWZmZXIsIDAsCisJCQkJCQkJYnl0ZXNfd3JpdHRlbiwgMCwgMSk7CisJCQkJdXNlcmJ1ZmZlciArPSAoKmJ5dGVzX3dyaXR0ZW4pOworCQkJICAgfSBlbHNlIGlmIChmcm9ta2VybikgeworCQkJCXJldCB8PSBzaXN1c2Jfc2VuZF9idWxrX21zZyhzaXN1c2IsCisJCQkJCQkJU0lTVVNCX0VQX0dGWF9MQlVMS19PVVQsCisJCQkJCQkJKGxlbmd0aCAmIH4zKSwKKwkJCQkJCQlrZXJuYnVmZmVyLCBOVUxMLCAwLAorCQkJCQkJCWJ5dGVzX3dyaXR0ZW4sIDAsIDEpOworCQkJCWtlcm5idWZmZXIgKz0gKCpieXRlc193cml0dGVuKTsKKwkJCSAgIH0gZWxzZSB7CisJCQlyZXQgfD0gc2lzdXNiX3NlbmRfYnVsa19tc2coc2lzdXNiLAorCQkJCQkJCVNJU1VTQl9FUF9HRlhfTEJVTEtfT1VULAorCQkJCQkJCShsZW5ndGggJiB+MyksCisJCQkJCQkJTlVMTCwgTlVMTCwgaW5kZXgsCisJCQkJCQkJYnl0ZXNfd3JpdHRlbiwgMCwgMSk7CisJCQkJa2VybmJ1ZmZlciArPSAoKCpieXRlc193cml0dGVuKSAmCisJCQkJCQkoc2lzdXNiLT5vYnVmc2l6ZS0xKSk7CisJCQkgICB9CisKKwkJCX0gZWxzZSB7CisKKwkJCSAgIHBhY2tldC5oZWFkZXIgID0gMHgwMDFmOworCQkJICAgcGFja2V0LmFkZHJlc3MgPSAweDAwMDAwMTk0OworCQkJICAgcGFja2V0LmRhdGEgICAgPSBhZGRyOworCQkJICAgcmV0ID0gc2lzdXNiX3NlbmRfYnJpZGdlX3BhY2tldChzaXN1c2IsIDEwLAorCQkJICAgCQkJCQkmcGFja2V0LCAwKTsKKwkJCSAgIHBhY2tldC5oZWFkZXIgID0gMHgwMDFmOworCQkJICAgcGFja2V0LmFkZHJlc3MgPSAweDAwMDAwMTkwOworCQkJICAgcGFja2V0LmRhdGEgICAgPSAobGVuZ3RoICYgfjMpOworCQkJICAgcmV0IHw9IHNpc3VzYl9zZW5kX2JyaWRnZV9wYWNrZXQoc2lzdXNiLCAxMCwKKwkJCSAgIAkJCQkJJnBhY2tldCwgMCk7CisJCQkgICBpZiAoc2lzdXNiLT5mbGFnYjAgIT0gMHgxNikgeworCQkJCXBhY2tldC5oZWFkZXIgID0gMHgwMDFmOworCQkJCXBhY2tldC5hZGRyZXNzID0gMHgwMDAwMDE4MDsKKwkJCQlwYWNrZXQuZGF0YSAgICA9IGZsYWcgfCAweDE2OworCQkJCXJldCB8PSBzaXN1c2Jfc2VuZF9icmlkZ2VfcGFja2V0KHNpc3VzYiwgMTAsCisJCQkJCQkJCSZwYWNrZXQsIDApOworCQkJCXNpc3VzYi0+ZmxhZ2IwID0gMHgxNjsKKwkJCSAgIH0KKwkJCSAgIGlmICh1c2VyYnVmZmVyKSB7CisJCQkJcmV0IHw9IHNpc3VzYl9zZW5kX2J1bGtfbXNnKHNpc3VzYiwKKwkJCQkJCQlTSVNVU0JfRVBfR0ZYX0JVTEtfT1VULAorCQkJCQkJCShsZW5ndGggJiB+MyksCisJCQkJCQkJTlVMTCwgdXNlcmJ1ZmZlciwgMCwKKwkJCQkJCQlieXRlc193cml0dGVuLCAwLCAxKTsKKwkJCQl1c2VyYnVmZmVyICs9ICgqYnl0ZXNfd3JpdHRlbik7CisJCQkgICB9IGVsc2UgaWYgKGZyb21rZXJuKSB7CisJCQkJcmV0IHw9IHNpc3VzYl9zZW5kX2J1bGtfbXNnKHNpc3VzYiwKKwkJCQkJCQlTSVNVU0JfRVBfR0ZYX0JVTEtfT1VULAorCQkJCQkJCShsZW5ndGggJiB+MyksCisJCQkJCQkJa2VybmJ1ZmZlciwgTlVMTCwgMCwKKwkJCQkJCQlieXRlc193cml0dGVuLCAwLCAxKTsKKwkJCQlrZXJuYnVmZmVyICs9ICgqYnl0ZXNfd3JpdHRlbik7CisJCQkgICB9IGVsc2UgeworCQkJCXJldCB8PSBzaXN1c2Jfc2VuZF9idWxrX21zZyhzaXN1c2IsCisJCQkJCQkJU0lTVVNCX0VQX0dGWF9CVUxLX09VVCwKKwkJCQkJCQkobGVuZ3RoICYgfjMpLAorCQkJCQkJCU5VTEwsIE5VTEwsIGluZGV4LAorCQkJCQkJCWJ5dGVzX3dyaXR0ZW4sIDAsIDEpOworCQkJCWtlcm5idWZmZXIgKz0gKCgqYnl0ZXNfd3JpdHRlbikgJgorCQkJCQkJKHNpc3VzYi0+b2J1ZnNpemUtMSkpOworCQkJICAgfQorCQkJfQorCQkJaWYgKHJldCkgeworCQkJCW1zZ2NvdW50Kys7CisJCQkJaWYgKG1zZ2NvdW50IDwgNTAwKQorCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJCSJzaXN1c2J2Z2FbJWRdOiBXcm90ZSAlWmQgb2YgIgorCQkJCQkJIiVkIGJ5dGVzLCBlcnJvciAlZFxuIiwKKwkJCQkJCXNpc3VzYi0+bWlub3IsICpieXRlc193cml0dGVuLAorCQkJCQkJbGVuZ3RoLCByZXQpOworCQkJCWVsc2UgaWYgKG1zZ2NvdW50ID09IDUwMCkKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCQkic2lzdXNidmdhWyVkXTogVG9vIG1hbnkgZXJyb3JzIgorCQkJCQkJIiwgbG9nZ2luZyBzdG9wcGVkXG4iLAorCQkJCQkJc2lzdXNiLT5taW5vcik7CisJCQl9CisJCQlhZGRyICs9ICgqYnl0ZXNfd3JpdHRlbik7CisJCQlsZW5ndGggLT0gKCpieXRlc193cml0dGVuKTsKKwkgICAgfQorCisJICAgIGlmIChyZXQpCisJICAgIAlicmVhazsKKworCX0KKworCXJldHVybiByZXQgPyAtRUlPIDogMDsKK30KKworc3RhdGljIGludCBzaXN1c2JfcmVhZF9tZW1pb19ieXRlKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IHR5cGUsCisJCQkJCQkJdTMyIGFkZHIsIHU4ICpkYXRhKQoreworCXN0cnVjdCBzaXN1c2JfcGFja2V0IHBhY2tldDsKKwlpbnQgcmV0OworCisJQ0xFQVJQQUNLRVQoJnBhY2tldCk7CisJcGFja2V0LmhlYWRlciAgPSAoMSA8PCAoYWRkciAmIDMpKSB8ICh0eXBlIDw8IDYpOworCXBhY2tldC5hZGRyZXNzID0gYWRkciAmIH4zOworCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDYsICZwYWNrZXQpOworCSpkYXRhID0gKHU4KShwYWNrZXQuZGF0YSA+PiAoKGFkZHIgJiAzKSA8PCAzKSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzaXN1c2JfcmVhZF9tZW1pb193b3JkKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IHR5cGUsCisJCQkJCQkJdTMyIGFkZHIsIHUxNiAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc2lzdXNiX3BhY2tldCBwYWNrZXQ7CisJaW50IHJldCA9IDA7CisKKwlDTEVBUlBBQ0tFVCgmcGFja2V0KTsKKworCXBhY2tldC5hZGRyZXNzID0gYWRkciAmIH4zOworCisJc3dpdGNoIChhZGRyICYgMykgeworCQljYXNlIDA6CisJCQlwYWNrZXQuaGVhZGVyID0gKHR5cGUgPDwgNikgfCAweDAwMDM7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCA2LCAmcGFja2V0KTsKKwkJCSpkYXRhID0gKHUxNikocGFja2V0LmRhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXBhY2tldC5oZWFkZXIgPSAodHlwZSA8PCA2KSB8IDB4MDAwNjsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDYsICZwYWNrZXQpOworCQkJKmRhdGEgPSAodTE2KShwYWNrZXQuZGF0YSA+PiA4KTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlwYWNrZXQuaGVhZGVyID0gKHR5cGUgPDwgNikgfCAweDAwMGM7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCA2LCAmcGFja2V0KTsKKwkJCSpkYXRhID0gKHUxNikocGFja2V0LmRhdGEgPj4gMTYpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXBhY2tldC5oZWFkZXIgPSAodHlwZSA8PCA2KSB8IDB4MDAwODsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDYsICZwYWNrZXQpOworCQkJKmRhdGEgPSAodTE2KShwYWNrZXQuZGF0YSA+PiAyNCk7CisJCQlwYWNrZXQuaGVhZGVyID0gKHR5cGUgPDwgNikgfCAweDAwMDE7CisJCQlwYWNrZXQuYWRkcmVzcyA9IChhZGRyICYgfjMpICsgNDsKKwkJCXJldCB8PSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCA2LCAmcGFja2V0KTsKKwkJCSpkYXRhIHw9ICh1MTYpKHBhY2tldC5kYXRhIDw8IDgpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2lzdXNiX3JlYWRfbWVtaW9fMjRiaXQoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgdHlwZSwKKwkJCQkJCQl1MzIgYWRkciwgdTMyICpkYXRhKQoreworCXN0cnVjdCBzaXN1c2JfcGFja2V0IHBhY2tldDsKKwlpbnQgcmV0ID0gMDsKKworCXBhY2tldC5hZGRyZXNzID0gYWRkciAmIH4zOworCisJc3dpdGNoIChhZGRyICYgMykgeworCQljYXNlIDA6CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDA3OworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgNiwgJnBhY2tldCk7CisJCQkqZGF0YSA9IHBhY2tldC5kYXRhICYgMHgwMGZmZmZmZjsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDBlOworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgNiwgJnBhY2tldCk7CisJCQkqZGF0YSA9IHBhY2tldC5kYXRhID4+IDg7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwYzsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDYsICZwYWNrZXQpOworCQkJKmRhdGEgPSBwYWNrZXQuZGF0YSA+PiAxNjsKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMDE7CisJCQlwYWNrZXQuYWRkcmVzcyA9IChhZGRyICYgfjMpICsgNDsKKwkJCXJldCB8PSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCA2LCAmcGFja2V0KTsKKwkJCSpkYXRhIHw9ICgocGFja2V0LmRhdGEgJiAweGZmKSA8PCAxNik7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwODsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDYsICZwYWNrZXQpOworCQkJKmRhdGEgPSBwYWNrZXQuZGF0YSA+PiAyNDsKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMDM7CisJCQlwYWNrZXQuYWRkcmVzcyA9IChhZGRyICYgfjMpICsgNDsKKwkJCXJldCB8PSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCA2LCAmcGFja2V0KTsKKwkJCSpkYXRhIHw9ICgocGFja2V0LmRhdGEgJiAweGZmZmYpIDw8IDgpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2lzdXNiX3JlYWRfbWVtaW9fbG9uZyhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCB0eXBlLAorCQkJCQkJCXUzMiBhZGRyLCB1MzIgKmRhdGEpCit7CisJc3RydWN0IHNpc3VzYl9wYWNrZXQgcGFja2V0OworCWludCByZXQgPSAwOworCisJcGFja2V0LmFkZHJlc3MgPSBhZGRyICYgfjM7CisKKwlzd2l0Y2ggKGFkZHIgJiAzKSB7CisJCWNhc2UgMDoKKwkJCXBhY2tldC5oZWFkZXIgID0gKHR5cGUgPDwgNikgfCAweDAwMGY7CisJCQlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCA2LCAmcGFja2V0KTsKKwkJCSpkYXRhID0gcGFja2V0LmRhdGE7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwZTsKKwkJCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDYsICZwYWNrZXQpOworCQkJKmRhdGEgPSBwYWNrZXQuZGF0YSA+PiA4OworCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwMTsKKwkJCXBhY2tldC5hZGRyZXNzID0gKGFkZHIgJiB+MykgKyA0OworCQkJcmV0IHw9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDYsICZwYWNrZXQpOworCQkJKmRhdGEgfD0gKHBhY2tldC5kYXRhIDw8IDI0KTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDBjOworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgNiwgJnBhY2tldCk7CisJCQkqZGF0YSA9IHBhY2tldC5kYXRhID4+IDE2OworCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwMzsKKwkJCXBhY2tldC5hZGRyZXNzID0gKGFkZHIgJiB+MykgKyA0OworCQkJcmV0IHw9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDYsICZwYWNrZXQpOworCQkJKmRhdGEgfD0gKHBhY2tldC5kYXRhIDw8IDE2KTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlwYWNrZXQuaGVhZGVyICA9ICh0eXBlIDw8IDYpIHwgMHgwMDA4OworCQkJcmV0ID0gc2lzdXNiX3NlbmRfcGFja2V0KHNpc3VzYiwgNiwgJnBhY2tldCk7CisJCQkqZGF0YSA9IHBhY2tldC5kYXRhID4+IDI0OworCQkJcGFja2V0LmhlYWRlciAgPSAodHlwZSA8PCA2KSB8IDB4MDAwNzsKKwkJCXBhY2tldC5hZGRyZXNzID0gKGFkZHIgJiB+MykgKyA0OworCQkJcmV0IHw9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDYsICZwYWNrZXQpOworCQkJKmRhdGEgfD0gKHBhY2tldC5kYXRhIDw8IDgpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2lzdXNiX3JlYWRfbWVtX2J1bGsoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCB1MzIgYWRkciwKKwkJCQljaGFyICprZXJuYnVmZmVyLCBpbnQgbGVuZ3RoLAorCQkJCWNoYXIgX191c2VyICp1c2VyYnVmZmVyLCBzc2l6ZV90ICpieXRlc19yZWFkKQoreworCWludCByZXQgPSAwOworCWNoYXIgYnVmWzRdOworCXUxNiBzd2FwMTY7CisJdTMyIHN3YXAzMjsKKworCSgqYnl0ZXNfcmVhZCA9IDApOworCisJbGVuZ3RoICY9IDB4MDBmZmZmZmY7CisKKwl3aGlsZSAobGVuZ3RoKSB7CisKKwkgICAgc3dpdGNoIChsZW5ndGgpIHsKKworCQljYXNlIDA6CisJCQlyZXR1cm4gcmV0OworCisJCWNhc2UgMToKKworCQkJcmV0IHw9IHNpc3VzYl9yZWFkX21lbWlvX2J5dGUoc2lzdXNiLCBTSVNVU0JfVFlQRV9NRU0sCisJCQkJCQkJCWFkZHIsICZidWZbMF0pOworCQkJaWYgKCFyZXQpIHsKKwkJCQkoKmJ5dGVzX3JlYWQpKys7CisJCQkJaWYgKHVzZXJidWZmZXIpIHsKKwkJCQkJaWYgKHB1dF91c2VyKGJ1ZlswXSwKKwkJCQkJCSh1OCBfX3VzZXIgKil1c2VyYnVmZmVyKSkgeworCQkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlrZXJuYnVmZmVyWzBdID0gYnVmWzBdOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiByZXQ7CisKKwkJY2FzZSAyOgorCQkJcmV0IHw9IHNpc3VzYl9yZWFkX21lbWlvX3dvcmQoc2lzdXNiLCBTSVNVU0JfVFlQRV9NRU0sCisJCQkJCQkJCWFkZHIsICZzd2FwMTYpOworCQkJaWYgKCFyZXQpIHsKKwkJCQkoKmJ5dGVzX3JlYWQpICs9IDI7CisJCQkJaWYgKHVzZXJidWZmZXIpIHsKKwkJCQkJaWYgKHB1dF91c2VyKHN3YXAxNiwKKwkJCQkJCSh1MTYgX191c2VyICopdXNlcmJ1ZmZlcikpCisJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQl9IGVsc2UgeworCQkJCQlrZXJuYnVmZmVyWzBdID0gc3dhcDE2ID4+IDg7CisJCQkJCWtlcm5idWZmZXJbMV0gPSBzd2FwMTYgJiAweGZmOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiByZXQ7CisKKwkJY2FzZSAzOgorCQkJcmV0IHw9IHNpc3VzYl9yZWFkX21lbWlvXzI0Yml0KHNpc3VzYiwgU0lTVVNCX1RZUEVfTUVNLAorCQkJCQkJCQlhZGRyLCAmc3dhcDMyKTsKKwkJCWlmICghcmV0KSB7CisJCQkJKCpieXRlc19yZWFkKSArPSAzOworCQkJCWJ1ZlswXSA9IChzd2FwMzIgPj4gMTYpICYgMHhmZjsKKwkJCQlidWZbMV0gPSAoc3dhcDMyID4+IDgpICYgMHhmZjsKKwkJCQlidWZbMl0gPSBzd2FwMzIgJiAweGZmOworCQkJCWlmICh1c2VyYnVmZmVyKSB7CisJCQkJCWlmIChjb3B5X3RvX3VzZXIodXNlcmJ1ZmZlciwgJmJ1ZlswXSwgMykpCisJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQl9IGVsc2UgeworCQkJCQlrZXJuYnVmZmVyWzBdID0gYnVmWzBdOworCQkJCQlrZXJuYnVmZmVyWzFdID0gYnVmWzFdOworCQkJCQlrZXJuYnVmZmVyWzJdID0gYnVmWzJdOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiByZXQ7CisKKwkJZGVmYXVsdDoKKwkJCXJldCB8PSBzaXN1c2JfcmVhZF9tZW1pb19sb25nKHNpc3VzYiwgU0lTVVNCX1RZUEVfTUVNLAorCQkJCQkJCQlhZGRyLCAmc3dhcDMyKTsKKwkJCWlmICghcmV0KSB7CisJCQkJKCpieXRlc19yZWFkKSArPSA0OworCQkJCWlmICh1c2VyYnVmZmVyKSB7CisJCQkJCWlmIChwdXRfdXNlcihzd2FwMzIsCisJCQkJCQkodTMyIF9fdXNlciAqKXVzZXJidWZmZXIpKQorCQkJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJCQkJdXNlcmJ1ZmZlciArPSA0OworCQkJCX0gZWxzZSB7CisJCQkJCWtlcm5idWZmZXJbMF0gPSAoc3dhcDMyID4+IDI0KSAmIDB4ZmY7CisJCQkJCWtlcm5idWZmZXJbMV0gPSAoc3dhcDMyID4+IDE2KSAmIDB4ZmY7CisJCQkJCWtlcm5idWZmZXJbMl0gPSAoc3dhcDMyID4+IDgpICYgMHhmZjsKKwkJCQkJa2VybmJ1ZmZlclszXSA9IHN3YXAzMiAmIDB4ZmY7CisJCQkJCWtlcm5idWZmZXIgKz0gNDsKKwkJCQl9CisJCQkJYWRkciArPSA0OworCQkJCWxlbmd0aCAtPSA0OworCQkJfQorI2lmIDAJCS8qIFRoYXQgZG9lcyBub3Qgd29yaywgYXMgRVAgMiBpcyBhbiBPVVQgRVAhICovCisJCWRlZmF1bHQ6CisJCQlDTEVBUlBBQ0tFVCgmcGFja2V0KTsKKwkJCXBhY2tldC5oZWFkZXIgID0gMHgwMDFmOworCQkJcGFja2V0LmFkZHJlc3MgPSAweDAwMDAwMWEwOworCQkJcGFja2V0LmRhdGEgICAgPSAweDAwMDAwMDA2OworCQkJcmV0IHw9IHNpc3VzYl9zZW5kX2JyaWRnZV9wYWNrZXQoc2lzdXNiLCAxMCwKKwkJCQkJCQkJJnBhY2tldCwgMCk7CisJCQlwYWNrZXQuaGVhZGVyICA9IDB4MDAxZjsKKwkJCXBhY2tldC5hZGRyZXNzID0gMHgwMDAwMDFiMDsKKwkJCXBhY2tldC5kYXRhICAgID0gKGxlbmd0aCAmIH4zKSB8IDB4NDAwMDAwMDA7CisJCQlyZXQgfD0gc2lzdXNiX3NlbmRfYnJpZGdlX3BhY2tldChzaXN1c2IsIDEwLAorCQkJCQkJCQkmcGFja2V0LCAwKTsKKwkJCXBhY2tldC5oZWFkZXIgID0gMHgwMDFmOworCQkJcGFja2V0LmFkZHJlc3MgPSAweDAwMDAwMWI0OworCQkJcGFja2V0LmRhdGEgICAgPSBhZGRyOworCQkJcmV0IHw9IHNpc3VzYl9zZW5kX2JyaWRnZV9wYWNrZXQoc2lzdXNiLCAxMCwKKwkJCQkJCQkJJnBhY2tldCwgMCk7CisJCQlwYWNrZXQuaGVhZGVyICA9IDB4MDAxZjsKKwkJCXBhY2tldC5hZGRyZXNzID0gMHgwMDAwMDFhNDsKKwkJCXBhY2tldC5kYXRhICAgID0gMHgwMDAwMDAwMTsKKwkJCXJldCB8PSBzaXN1c2Jfc2VuZF9icmlkZ2VfcGFja2V0KHNpc3VzYiwgMTAsCisJCQkJCQkJCSZwYWNrZXQsIDApOworCQkJaWYgKHVzZXJidWZmZXIpIHsKKwkJCQlyZXQgfD0gc2lzdXNiX3JlY3ZfYnVsa19tc2coc2lzdXNiLAorCQkJCQkJCVNJU1VTQl9FUF9HRlhfQlVMS19JTiwKKwkJCQkJCQkobGVuZ3RoICYgfjMpLAorCQkJCQkJCU5VTEwsIHVzZXJidWZmZXIsCisJCQkJCQkJYnl0ZXNfcmVhZCwgMCk7CisJCQkJaWYgKCFyZXQpIHVzZXJidWZmZXIgKz0gKCpieXRlc19yZWFkKTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0IHw9IHNpc3VzYl9yZWN2X2J1bGtfbXNnKHNpc3VzYiwKKwkJCQkJCQlTSVNVU0JfRVBfR0ZYX0JVTEtfSU4sCisJCQkJCQkJKGxlbmd0aCAmIH4zKSwKKwkJCQkJCQlrZXJuYnVmZmVyLCBOVUxMLAorCQkJCQkJCWJ5dGVzX3JlYWQsIDApOworCQkJCWlmICghcmV0KSBrZXJuYnVmZmVyICs9ICgqYnl0ZXNfcmVhZCk7CisJCQl9CisJCQlhZGRyICs9ICgqYnl0ZXNfcmVhZCk7CisJCQlsZW5ndGggLT0gKCpieXRlc19yZWFkKTsKKyNlbmRpZgorCSAgICB9CisKKwkgICAgaWYgKHJldCkKKwkgICAgCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIEhpZ2ggbGV2ZWw6IEdmeCAoaW5kZXhlZCkgcmVnaXN0ZXIgYWNjZXNzICovCisKK3N0YXRpYyBpbnQKK3Npc3VzYl9zZXRpZHhyZWcoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgcG9ydCwgdTggaW5kZXgsIHU4IGRhdGEpCit7CisJaW50IHJldDsKKwlyZXQgPSBzaXN1c2Jfd3JpdGVfbWVtaW9fYnl0ZShzaXN1c2IsIFNJU1VTQl9UWVBFX0lPLCBwb3J0LCBpbmRleCk7CisJcmV0IHw9IHNpc3VzYl93cml0ZV9tZW1pb19ieXRlKHNpc3VzYiwgU0lTVVNCX1RZUEVfSU8sIHBvcnQgKyAxLCBkYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzaXN1c2JfZ2V0aWR4cmVnKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IHBvcnQsIHU4IGluZGV4LCB1OCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCXJldCA9IHNpc3VzYl93cml0ZV9tZW1pb19ieXRlKHNpc3VzYiwgU0lTVVNCX1RZUEVfSU8sIHBvcnQsIGluZGV4KTsKKwlyZXQgfD0gc2lzdXNiX3JlYWRfbWVtaW9fYnl0ZShzaXN1c2IsIFNJU1VTQl9UWVBFX0lPLCBwb3J0ICsgMSwgZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorc2lzdXNiX3NldGlkeHJlZ2FuZG9yKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IHBvcnQsIHU4IGlkeCwKKwkJCQkJCQl1OCBteWFuZCwgdTggbXlvcikKK3sKKwlpbnQgcmV0OworCXU4IHRtcDsKKworCXJldCA9IHNpc3VzYl93cml0ZV9tZW1pb19ieXRlKHNpc3VzYiwgU0lTVVNCX1RZUEVfSU8sIHBvcnQsIGlkeCk7CisJcmV0IHw9IHNpc3VzYl9yZWFkX21lbWlvX2J5dGUoc2lzdXNiLCBTSVNVU0JfVFlQRV9JTywgcG9ydCArIDEsICZ0bXApOworCXRtcCAmPSBteWFuZDsKKwl0bXAgfD0gbXlvcjsKKwlyZXQgfD0gc2lzdXNiX3dyaXRlX21lbWlvX2J5dGUoc2lzdXNiLCBTSVNVU0JfVFlQRV9JTywgcG9ydCArIDEsIHRtcCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorc2lzdXNiX3NldGlkeHJlZ21hc2soc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgcG9ydCwgdTggaWR4LAorCQkJCQkJCXU4IGRhdGEsIHU4IG1hc2spCit7CisJaW50IHJldDsKKwl1OCB0bXA7CisJcmV0ID0gc2lzdXNiX3dyaXRlX21lbWlvX2J5dGUoc2lzdXNiLCBTSVNVU0JfVFlQRV9JTywgcG9ydCwgaWR4KTsKKwlyZXQgfD0gc2lzdXNiX3JlYWRfbWVtaW9fYnl0ZShzaXN1c2IsIFNJU1VTQl9UWVBFX0lPLCBwb3J0ICsgMSwgJnRtcCk7CisJdG1wICY9IH4obWFzayk7CisJdG1wIHw9IChkYXRhICYgbWFzayk7CisJcmV0IHw9IHNpc3VzYl93cml0ZV9tZW1pb19ieXRlKHNpc3VzYiwgU0lTVVNCX1RZUEVfSU8sIHBvcnQgKyAxLCB0bXApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9zZXRpZHhyZWdvcihzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCBwb3J0LCB1OCBpbmRleCwgdTggbXlvcikKK3sKKwlyZXR1cm4oc2lzdXNiX3NldGlkeHJlZ2FuZG9yKHNpc3VzYiwgcG9ydCwgaW5kZXgsIDB4ZmYsIG15b3IpKTsKK30KKworc3RhdGljIGludAorc2lzdXNiX3NldGlkeHJlZ2FuZChzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCBwb3J0LCB1OCBpZHgsIHU4IG15YW5kKQoreworCXJldHVybihzaXN1c2Jfc2V0aWR4cmVnYW5kb3Ioc2lzdXNiLCBwb3J0LCBpZHgsIG15YW5kLCAweDAwKSk7Cit9CisKKy8qIGFjY2VzcyBwY2kgY29uZmlnIHJlZ2lzdGVycyAocmVnIG51bWJlcnMgMCwgNCwgOCwgZXRjKSAqLworCitzdGF0aWMgaW50CitzaXN1c2Jfd3JpdGVfcGNpX2NvbmZpZyhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCByZWdudW0sIHUzMiBkYXRhKQoreworCXN0cnVjdCBzaXN1c2JfcGFja2V0IHBhY2tldDsKKwlpbnQgcmV0OworCisJcGFja2V0LmhlYWRlciA9IDB4MDA4ZjsKKwlwYWNrZXQuYWRkcmVzcyA9IHJlZ251bSB8IDB4MTAwMDA7CisJcGFja2V0LmRhdGEgPSBkYXRhOworCXJldCA9IHNpc3VzYl9zZW5kX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzaXN1c2JfcmVhZF9wY2lfY29uZmlnKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IHJlZ251bSwgdTMyICpkYXRhKQoreworCXN0cnVjdCBzaXN1c2JfcGFja2V0IHBhY2tldDsKKwlpbnQgcmV0OworCisJcGFja2V0LmhlYWRlciA9IDB4MDA4ZjsKKwlwYWNrZXQuYWRkcmVzcyA9ICh1MzIpcmVnbnVtIHwgMHgxMDAwMDsKKwlyZXQgPSBzaXN1c2Jfc2VuZF9wYWNrZXQoc2lzdXNiLCA2LCAmcGFja2V0KTsKKwkqZGF0YSA9IHBhY2tldC5kYXRhOworCXJldHVybiByZXQ7Cit9CisKKy8qIENsZWFyIHZpZGVvIFJBTSAqLworCitzdGF0aWMgaW50CitzaXN1c2JfY2xlYXJfdnJhbShzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIHUzMiBhZGRyZXNzLCBpbnQgbGVuZ3RoKQoreworCWludCByZXQsIGk7CisJc3NpemVfdCBqOworCisJaWYgKGFkZHJlc3MgPCBzaXN1c2ItPnZyYW1iYXNlKQorCQlyZXR1cm4gMTsKKworCWlmIChhZGRyZXNzID49IHNpc3VzYi0+dnJhbWJhc2UgKyBzaXN1c2ItPnZyYW1zaXplKQorCQlyZXR1cm4gMTsKKworCWlmIChhZGRyZXNzICsgbGVuZ3RoID4gc2lzdXNiLT52cmFtYmFzZSArIHNpc3VzYi0+dnJhbXNpemUpCisJCWxlbmd0aCA9IHNpc3VzYi0+dnJhbWJhc2UgKyBzaXN1c2ItPnZyYW1zaXplIC0gYWRkcmVzczsKKworCWlmIChsZW5ndGggPD0gMCkKKwkJcmV0dXJuIDA7CisKKwkvKiBhbGxvY2F0ZSBmcmVlIGJ1ZmZlci91cmIgYW5kIGNsZWFyIHRoZSBidWZmZXIgKi8KKwlpZiAoKGkgPSBzaXN1c2JfYWxsb2Nfb3V0YnVmKHNpc3VzYikpIDwgMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCW1lbXNldChzaXN1c2ItPm9idWZbaV0sIDAsIHNpc3VzYi0+b2J1ZnNpemUpOworCisJLyogV2UgY2FuIHdyaXRlIGEgbGVuZ3RoID4gYnVmZmVyIHNpemUgaGVyZS4gVGhlIGJ1ZmZlcgorCSAqIGRhdGEgd2lsbCBzaW1wbHkgYmUgcmUtdXNlZCAobGlrZSBhIHJpbmctYnVmZmVyKS4KKwkgKi8KKwlyZXQgPSBzaXN1c2Jfd3JpdGVfbWVtX2J1bGsoc2lzdXNiLCBhZGRyZXNzLCBOVUxMLCBsZW5ndGgsIE5VTEwsIGksICZqKTsKKworCS8qIEZyZWUgdGhlIGJ1ZmZlci91cmIgKi8KKwlzaXN1c2JfZnJlZV9vdXRidWYoc2lzdXNiLCBpKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIGdyYXBoaWNzIGNvcmUgKHJldHVybiAwIG9uIHN1Y2Nlc3MpCisgKiBUaGlzIHJlc2V0cyB0aGUgZ3JhcGhpY3MgaGFyZHdhcmUgYW5kIHB1dHMgaXQgaW50bworICogYSBkZWZpbmVkIG1vZGUgKDY0MHg0ODBANjBIeikKKyAqLworCisjZGVmaW5lIEdFVFJFRyhyLGQpICAgICBzaXN1c2JfcmVhZF9tZW1pb19ieXRlKHNpc3VzYiwgU0lTVVNCX1RZUEVfSU8sIHIsIGQpCisjZGVmaW5lIFNFVFJFRyhyLGQpCXNpc3VzYl93cml0ZV9tZW1pb19ieXRlKHNpc3VzYiwgU0lTVVNCX1RZUEVfSU8sIHIsIGQpCisjZGVmaW5lIFNFVElSRUcocixpLGQpCXNpc3VzYl9zZXRpZHhyZWcoc2lzdXNiLCByLCBpLCBkKQorI2RlZmluZSBHRVRJUkVHKHIsaSxkKSAgc2lzdXNiX2dldGlkeHJlZyhzaXN1c2IsIHIsIGksIGQpCisjZGVmaW5lIFNFVElSRUdPUihyLGksbykJc2lzdXNiX3NldGlkeHJlZ29yKHNpc3VzYiwgciwgaSwgbykKKyNkZWZpbmUgU0VUSVJFR0FORChyLGksYSkJc2lzdXNiX3NldGlkeHJlZ2FuZChzaXN1c2IsIHIsIGksIGEpCisjZGVmaW5lIFNFVElSRUdBTkRPUihyLGksYSxvKQlzaXN1c2Jfc2V0aWR4cmVnYW5kb3Ioc2lzdXNiLCByLCBpLCBhLCBvKQorI2RlZmluZSBSRUFETChhLGQpCXNpc3VzYl9yZWFkX21lbWlvX2xvbmcoc2lzdXNiLCBTSVNVU0JfVFlQRV9NRU0sIGEsIGQpCisjZGVmaW5lIFdSSVRFTChhLGQpIAlzaXN1c2Jfd3JpdGVfbWVtaW9fbG9uZyhzaXN1c2IsIFNJU1VTQl9UWVBFX01FTSwgYSwgZCkKKyNkZWZpbmUgUkVBREIoYSxkKQlzaXN1c2JfcmVhZF9tZW1pb19ieXRlKHNpc3VzYiwgU0lTVVNCX1RZUEVfTUVNLCBhLCBkKQorI2RlZmluZSBXUklURUIoYSxkKSAJc2lzdXNiX3dyaXRlX21lbWlvX2J5dGUoc2lzdXNiLCBTSVNVU0JfVFlQRV9NRU0sIGEsIGQpCisKK3N0YXRpYyBpbnQKK3Npc3VzYl90cmlnZ2Vyc3IxNihzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIHU4IHJhbXR5cGUpCit7CisJaW50IHJldDsKKwl1OCB0bXA4OworCisJcmV0ID0gR0VUSVJFRyhTSVNTUiwgMHgxNiwgJnRtcDgpOworCWlmIChyYW10eXBlIDw9IDEpIHsKKwkJdG1wOCAmPSAweDNmOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgxNiwgdG1wOCk7CisJCXRtcDggfD0gMHg4MDsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MTYsIHRtcDgpOworCX0gZWxzZSB7CisJCXRtcDggfD0gMHhjMDsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MTYsIHRtcDgpOworCQl0bXA4ICY9IDB4MGY7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDE2LCB0bXA4KTsKKwkJdG1wOCB8PSAweDgwOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgxNiwgdG1wOCk7CisJCXRtcDggJj0gMHgwZjsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MTYsIHRtcDgpOworCQl0bXA4IHw9IDB4ZDA7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDE2LCB0bXA4KTsKKwkJdG1wOCAmPSAweDBmOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgxNiwgdG1wOCk7CisJCXRtcDggfD0gMHhhMDsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MTYsIHRtcDgpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzaXN1c2JfZ2V0YnVzd2lkdGgoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgKmJ3LCBpbnQgKmNoYWIpCit7CisJaW50IHJldDsKKwl1OCAgcmFtdHlwZSwgZG9uZSA9IDA7CisJdTMyIHQwLCB0MSwgdDIsIHQzOworCXUzMiByYW1wdHIgPSBTSVNVU0JfUENJX01FTUJBU0U7CisKKwlyZXQgPSBHRVRJUkVHKFNJU1NSLCAweDNhLCAmcmFtdHlwZSk7CisJcmFtdHlwZSAmPSAzOworCisJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MTMsIDB4MDApOworCisJaWYgKHJhbXR5cGUgPD0gMSkgeworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgxNCwgMHgxMik7CisJCXJldCB8PSBTRVRJUkVHQU5EKFNJU1NSLCAweDE1LCAweGVmKTsKKwl9IGVsc2UgeworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgxNCwgMHgwMik7CisJfQorCisJcmV0IHw9IHNpc3VzYl90cmlnZ2Vyc3IxNihzaXN1c2IsIHJhbXR5cGUpOworCXJldCB8PSBXUklURUwocmFtcHRyICsgIDAsIDB4MDEyMzQ1NjcpOworCXJldCB8PSBXUklURUwocmFtcHRyICsgIDQsIDB4NDU2Nzg5YWIpOworCXJldCB8PSBXUklURUwocmFtcHRyICsgIDgsIDB4ODlhYmNkZWYpOworCXJldCB8PSBXUklURUwocmFtcHRyICsgMTIsIDB4Y2RlZjAxMjMpOworCXJldCB8PSBXUklURUwocmFtcHRyICsgMTYsIDB4NTU1NTU1NTUpOworCXJldCB8PSBXUklURUwocmFtcHRyICsgMjAsIDB4NTU1NTU1NTUpOworCXJldCB8PSBXUklURUwocmFtcHRyICsgMjQsIDB4ZmZmZmZmZmYpOworCXJldCB8PSBXUklURUwocmFtcHRyICsgMjgsIDB4ZmZmZmZmZmYpOworCXJldCB8PSBSRUFETChyYW1wdHIgKyAgMCwgJnQwKTsKKwlyZXQgfD0gUkVBREwocmFtcHRyICsgIDQsICZ0MSk7CisJcmV0IHw9IFJFQURMKHJhbXB0ciArICA4LCAmdDIpOworCXJldCB8PSBSRUFETChyYW1wdHIgKyAxMiwgJnQzKTsKKworCWlmIChyYW10eXBlIDw9IDEpIHsKKworCQkqY2hhYiA9IDA7ICpidyA9IDY0OworCisJCWlmICgodDMgIT0gMHhjZGVmMDEyMykgfHwgKHQyICE9IDB4ODlhYmNkZWYpKSB7CisJCQlpZiAoKHQxID09IDB4NDU2Nzg5YWIpICYmICh0MCA9PSAweDAxMjM0NTY3KSkgeworCQkJCSpjaGFiID0gMDsgKmJ3ID0gNjQ7CisJCQkJcmV0IHw9IFNFVElSRUdBTkQoU0lTU1IsIDB4MTQsIDB4ZmQpOworCQkJfQorCQl9CisJCWlmICgodDEgIT0gMHg0NTY3ODlhYikgfHwgKHQwICE9IDB4MDEyMzQ1NjcpKSB7CisJCQkqY2hhYiA9IDE7ICpidyA9IDY0OworCQkJcmV0IHw9IFNFVElSRUdBTkRPUihTSVNTUiwgMHgxNCwgMHhmYywweDAxKTsKKworCQkJcmV0IHw9IHNpc3VzYl90cmlnZ2Vyc3IxNihzaXN1c2IsIHJhbXR5cGUpOworCQkJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAgMCwgMHg4OWFiY2RlZik7CisJCQlyZXQgfD0gV1JJVEVMKHJhbXB0ciArICA0LCAweGNkZWYwMTIzKTsKKwkJCXJldCB8PSBXUklURUwocmFtcHRyICsgIDgsIDB4NTU1NTU1NTUpOworCQkJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAxMiwgMHg1NTU1NTU1NSk7CisJCQlyZXQgfD0gV1JJVEVMKHJhbXB0ciArIDE2LCAweGFhYWFhYWFhKTsKKwkJCXJldCB8PSBXUklURUwocmFtcHRyICsgMjAsIDB4YWFhYWFhYWEpOworCQkJcmV0IHw9IFJFQURMKHJhbXB0ciArICA0LCAmdDEpOworCisJCQlpZiAodDEgIT0gMHhjZGVmMDEyMykgeworCQkJCSpidyA9IDMyOworCQkJCXJldCB8PSBTRVRJUkVHT1IoU0lTU1IsIDB4MTUsIDB4MTApOworCQkJfQorCQl9CisKKwl9IGVsc2UgeworCisJCSpjaGFiID0gMDsgKmJ3ID0gNjQ7CS8qIGRlZmF1bHQ6IGNoYSwgYncgPSA2NCAqLworCisJCWRvbmUgPSAwOworCisJCWlmICh0MSA9PSAweDQ1Njc4OWFiKSB7CisJCQlpZiAodDAgPT0gMHgwMTIzNDU2NykgeworCQkJCSpjaGFiID0gMDsgKmJ3ID0gNjQ7CisJCQkJZG9uZSA9IDE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAodDAgPT0gMHgwMTIzNDU2NykgeworCQkJCSpjaGFiID0gMDsgKmJ3ID0gMzI7CisJCQkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MTQsIDB4MDApOworCQkJCWRvbmUgPSAxOworCQkJfQorCQl9CisKKwkJaWYgKCFkb25lKSB7CisJCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgxNCwgMHgwMyk7CisJCQlyZXQgfD0gc2lzdXNiX3RyaWdnZXJzcjE2KHNpc3VzYiwgcmFtdHlwZSk7CisKKwkJCXJldCB8PSBXUklURUwocmFtcHRyICsgIDAsIDB4MDEyMzQ1NjcpOworCQkJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAgNCwgMHg0NTY3ODlhYik7CisJCQlyZXQgfD0gV1JJVEVMKHJhbXB0ciArICA4LCAweDg5YWJjZGVmKTsKKwkJCXJldCB8PSBXUklURUwocmFtcHRyICsgMTIsIDB4Y2RlZjAxMjMpOworCQkJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAxNiwgMHg1NTU1NTU1NSk7CisJCQlyZXQgfD0gV1JJVEVMKHJhbXB0ciArIDIwLCAweDU1NTU1NTU1KTsKKwkJCXJldCB8PSBXUklURUwocmFtcHRyICsgMjQsIDB4ZmZmZmZmZmYpOworCQkJcmV0IHw9IFdSSVRFTChyYW1wdHIgKyAyOCwgMHhmZmZmZmZmZik7CisJCQlyZXQgfD0gUkVBREwocmFtcHRyICsgIDAsICZ0MCk7CisJCQlyZXQgfD0gUkVBREwocmFtcHRyICsgIDQsICZ0MSk7CisKKwkJCWlmICh0MSA9PSAweDQ1Njc4OWFiKSB7CisJCQkJaWYgKHQwID09IDB4MDEyMzQ1NjcpIHsKKwkJCQkJKmNoYWIgPSAxOyAqYncgPSA2NDsKKwkJCQkJcmV0dXJuIHJldDsKKwkJCQl9IC8qIGVsc2UgZXJyb3IgKi8KKwkJCX0gZWxzZSB7CisJCQkJaWYgKHQwID09IDB4MDEyMzQ1NjcpIHsKKwkJCQkJKmNoYWIgPSAxOyAqYncgPSAzMjsKKwkJCQkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MTQsIDB4MDEpOworCQkJCX0gLyogZWxzZSBlcnJvciAqLworCQkJfQorCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl92ZXJpZnlfbWNsayhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IpCit7CisJaW50IHJldCA9IDA7CisJdTMyIHJhbXB0ciA9IFNJU1VTQl9QQ0lfTUVNQkFTRTsKKwl1OCB0bXAxLCB0bXAyLCBpLCBqOworCisJcmV0IHw9IFdSSVRFQihyYW1wdHIsIDB4YWEpOworCXJldCB8PSBXUklURUIocmFtcHRyICsgMTYsIDB4NTUpOworCXJldCB8PSBSRUFEQihyYW1wdHIsICZ0bXAxKTsKKwlyZXQgfD0gUkVBREIocmFtcHRyICsgMTYsICZ0bXAyKTsKKwlpZiAoKHRtcDEgIT0gMHhhYSkgfHwgKHRtcDIgIT0gMHg1NSkpIHsKKwkJZm9yIChpID0gMCwgaiA9IDE2OyBpIDwgMjsgaSsrLCBqICs9IDE2KSB7CisJCQlyZXQgfD0gR0VUSVJFRyhTSVNTUiwgMHgyMSwgJnRtcDEpOworCQkJcmV0IHw9IFNFVElSRUdBTkQoU0lTU1IsIDB4MjEsICh0bXAxICYgMHhmYikpOworCQkJcmV0IHw9IFNFVElSRUdPUihTSVNTUiwgMHgzYywgMHgwMSk7ICAvKiBub3Qgb24gMzMwICovCisJCQlyZXQgfD0gU0VUSVJFR0FORChTSVNTUiwgMHgzYywgMHhmZSk7IC8qIG5vdCBvbiAzMzAgKi8KKwkJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDIxLCB0bXAxKTsKKwkJCXJldCB8PSBXUklURUIocmFtcHRyICsgMTYgKyBqLCBqKTsKKwkJCXJldCB8PSBSRUFEQihyYW1wdHIgKyAxNiArIGosICZ0bXAxKTsKKwkJCWlmICh0bXAxID09IGopIHsKKwkJCQlyZXQgfD0gV1JJVEVCKHJhbXB0ciArIGosIGopOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9zZXRfcmFuayhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCAqaXJldCwgaW50IGluZGV4LAorCQkJdTggcmFua25vLCB1OCBjaGFiLCBjb25zdCB1OCBkcmFtdHlwZVtdWzVdLAorCQkJaW50IGJ3KQoreworCWludCByZXQgPSAwLCByYW5rc2l6ZTsKKwl1OCB0bXA7CisKKwkqaXJldCA9IDA7CisKKwlpZiAoKHJhbmtubyA9PSAyKSAmJiAoZHJhbXR5cGVbaW5kZXhdWzBdID09IDIpKQorCQlyZXR1cm4gcmV0OworCisJcmFua3NpemUgPSBkcmFtdHlwZVtpbmRleF1bM10gLyAyICogYncgLyAzMjsKKworCWlmICgocmFua3NpemUgKiByYW5rbm8pID4gMTI4KQorCQlyZXR1cm4gcmV0OworCisJdG1wID0gMDsKKwl3aGlsZSAoKHJhbmtzaXplID4+PSAxKSA+IDApIHRtcCArPSAweDEwOworCXRtcCB8PSAoKHJhbmtubyAtIDEpIDw8IDIpOworCXRtcCB8PSAoKGJ3IC8gNjQpICYgMHgwMik7CisJdG1wIHw9IChjaGFiICYgMHgwMSk7CisKKwlyZXQgPSBTRVRJUkVHKFNJU1NSLCAweDE0LCB0bXApOworCXJldCB8PSBzaXN1c2JfdHJpZ2dlcnNyMTYoc2lzdXNiLCAwKTsgLyogc2ljISAqLworCisJKmlyZXQgPSAxOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorc2lzdXNiX2NoZWNrX3JiYyhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCAqaXJldCwgdTMyIGluYywgaW50IHRlc3RuKQoreworCWludCByZXQgPSAwLCBpOworCXUzMiBqLCB0bXA7CisKKwkqaXJldCA9IDA7CisKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IHRlc3RuOyBpKyspIHsKKwkJcmV0IHw9IFdSSVRFTChzaXN1c2ItPnZyYW1iYXNlICsgaiwgaik7CisJCWogKz0gaW5jOworCX0KKworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgdGVzdG47IGkrKykgeworCQlyZXQgfD0gUkVBREwoc2lzdXNiLT52cmFtYmFzZSArIGosICZ0bXApOworCQlpZiAodG1wICE9IGopIHJldHVybiByZXQ7CisJCWogKz0gaW5jOworCX0KKworCSppcmV0ID0gMTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzaXN1c2JfY2hlY2tfcmFua3Moc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiLCBpbnQgKmlyZXQsIGludCByYW5rbm8sCisJCQkJCWludCBpZHgsIGludCBidywgY29uc3QgdTggcnR5cGVbXVs1XSkKK3sKKwlpbnQgcmV0ID0gMCwgaSwgaTJyZXQ7CisJdTMyIGluYzsKKworCSppcmV0ID0gMDsKKworCWZvciAoaSA9IHJhbmtubzsgaSA+PSAxOyBpLS0pIHsKKwkJaW5jID0gMSA8PCAocnR5cGVbaWR4XVsyXSArCisJCQkgICAgcnR5cGVbaWR4XVsxXSArCisJCQkgICAgcnR5cGVbaWR4XVswXSArCisJCQkgICAgYncgLyA2NCArIGkpOworCQlyZXQgfD0gc2lzdXNiX2NoZWNrX3JiYyhzaXN1c2IsICZpMnJldCwgaW5jLCAyKTsKKwkJaWYgKCFpMnJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaW5jID0gMSA8PCAocnR5cGVbaWR4XVsyXSArIGJ3IC8gNjQgKyAyKTsKKwlyZXQgfD0gc2lzdXNiX2NoZWNrX3JiYyhzaXN1c2IsICZpMnJldCwgaW5jLCA0KTsKKwlpZiAoIWkycmV0KQorCQlyZXR1cm4gcmV0OworCisJaW5jID0gMSA8PCAoMTAgKyBidyAvIDY0KTsKKwlyZXQgfD0gc2lzdXNiX2NoZWNrX3JiYyhzaXN1c2IsICZpMnJldCwgaW5jLCAyKTsKKwlpZiAoIWkycmV0KQorCQlyZXR1cm4gcmV0OworCisJKmlyZXQgPSAxOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9nZXRfc2RyYW1fc2l6ZShzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCAqaXJldCwgaW50IGJ3LAorCQkJCQkJCQlpbnQgY2hhYikKK3sKKwlpbnQgcmV0ID0gMCwgaTJyZXQgPSAwLCBpLCBqOworCXN0YXRpYyBjb25zdCB1OCBzZHJhbXR5cGVbMTNdWzVdID0geworCQl7IDIsIDEyLCA5LCA2NCwgMHgzNSB9LAorCQl7IDEsIDEzLCA5LCA2NCwgMHg0NCB9LAorCQl7IDIsIDEyLCA4LCAzMiwgMHgzMSB9LAorCQl7IDIsIDExLCA5LCAzMiwgMHgyNSB9LAorCQl7IDEsIDEyLCA5LCAzMiwgMHgzNCB9LAorCQl7IDEsIDEzLCA4LCAzMiwgMHg0MCB9LAorCQl7IDIsIDExLCA4LCAxNiwgMHgyMSB9LAorCQl7IDEsIDEyLCA4LCAxNiwgMHgzMCB9LAorCQl7IDEsIDExLCA5LCAxNiwgMHgyNCB9LAorCQl7IDEsIDExLCA4LCAgOCwgMHgyMCB9LAorCQl7IDIsICA5LCA4LCAgNCwgMHgwMSB9LAorCQl7IDEsIDEwLCA4LCAgNCwgMHgxMCB9LAorCQl7IDEsICA5LCA4LCAgMiwgMHgwMCB9CisJfTsKKworCSppcmV0ID0gMTsgLyogZXJyb3IgKi8KKworCWZvciAoaSA9IDA7IGkgPCAxMzsgaSsrKSB7CisJCXJldCB8PSBTRVRJUkVHQU5ET1IoU0lTU1IsIDB4MTMsIDB4ODAsIHNkcmFtdHlwZVtpXVs0XSk7CisJCWZvciAoaiA9IDI7IGogPiAwOyBqLS0pIHsKKwkJCXJldCB8PSBzaXN1c2Jfc2V0X3Jhbmsoc2lzdXNiLCAmaTJyZXQsIGksIGosCisJCQkJCQljaGFiLCBzZHJhbXR5cGUsIGJ3KTsKKwkJCWlmICghaTJyZXQpCisJCQkJY29udGludWU7CisKKwkJCXJldCB8PSBzaXN1c2JfY2hlY2tfcmFua3Moc2lzdXNiLCAmaTJyZXQsIGosIGksCisJCQkJCQlidywgc2RyYW10eXBlKTsKKwkJCWlmIChpMnJldCkgeworCQkJCSppcmV0ID0gMDsJLyogcmFtIHNpemUgZm91bmQgKi8KKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorc2lzdXNiX3NldHVwX3NjcmVlbihzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIGludCBjbHJhbGwsIGludCBkcndmcikKK3sKKwlpbnQgcmV0ID0gMDsKKwl1MzIgYWRkcmVzczsKKwlpbnQgaSwgbGVuZ3RoLCBtb2RleCwgbW9kZXksIGJwcDsKKworCW1vZGV4ID0gNjQwOyBtb2RleSA9IDQ4MDsgYnBwID0gMjsKKworCWFkZHJlc3MgPSBzaXN1c2ItPnZyYW1iYXNlOwkvKiBDbGVhciB2aWRlbyByYW0gKi8KKworCWlmIChjbHJhbGwpCisJCWxlbmd0aCA9IHNpc3VzYi0+dnJhbXNpemU7CisJZWxzZQorCQlsZW5ndGggPSBtb2RleCAqIGJwcCAqIG1vZGV5OworCisJcmV0ID0gc2lzdXNiX2NsZWFyX3ZyYW0oc2lzdXNiLCBhZGRyZXNzLCBsZW5ndGgpOworCisJaWYgKCFyZXQgJiYgZHJ3ZnIpIHsKKwkJZm9yIChpID0gMDsgaSA8IG1vZGV4OyBpKyspIHsKKwkJCWFkZHJlc3MgPSBzaXN1c2ItPnZyYW1iYXNlICsgKGkgKiBicHApOworCQkJcmV0IHw9IHNpc3VzYl93cml0ZV9tZW1pb193b3JkKHNpc3VzYiwgU0lTVVNCX1RZUEVfTUVNLAorCQkJCQkJCWFkZHJlc3MsIDB4ZjEwMCk7CisJCQlhZGRyZXNzICs9IChtb2RleCAqIChtb2RleS0xKSAqIGJwcCk7CisJCQlyZXQgfD0gc2lzdXNiX3dyaXRlX21lbWlvX3dvcmQoc2lzdXNiLCBTSVNVU0JfVFlQRV9NRU0sCisJCQkJCQkJYWRkcmVzcywgMHhmMTAwKTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgbW9kZXk7IGkrKykgeworCQkJYWRkcmVzcyA9IHNpc3VzYi0+dnJhbWJhc2UgKyAoKGkgKiBtb2RleCkgKiBicHApOworCQkJcmV0IHw9IHNpc3VzYl93cml0ZV9tZW1pb193b3JkKHNpc3VzYiwgU0lTVVNCX1RZUEVfTUVNLAorCQkJCQkJCWFkZHJlc3MsIDB4ZjEwMCk7CisJCQlhZGRyZXNzICs9ICgobW9kZXggLSAxKSAqIGJwcCk7CisJCQlyZXQgfD0gc2lzdXNiX3dyaXRlX21lbWlvX3dvcmQoc2lzdXNiLCBTSVNVU0JfVFlQRV9NRU0sCisJCQkJCQkJYWRkcmVzcywgMHhmMTAwKTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9zZXRfZGVmYXVsdF9tb2RlKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IHRvdWNoZW5naW5lcykKK3sKKwlpbnQgcmV0ID0gMCwgaSwgaiwgbW9kZXgsIG1vZGV5LCBicHAsIGR1OworCXU4IHNyMzEsIGNyNjMsIHRtcDg7CisJc3RhdGljIGNvbnN0IGNoYXIgYXR0cmRhdGFbXSA9IHsKKwkJMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3LAorCQkweDA4LDB4MDksMHgwYSwweDBiLDB4MGMsMHgwZCwweDBlLDB4MGYsCisJCTB4MDEsMHgwMCwweDAwLDB4MDAKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyIGNydGNyZGF0YVtdID0geworCQkweDVmLDB4NGYsMHg1MCwweDgyLDB4NTQsMHg4MCwweDBiLDB4M2UsCisJCTB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkJMHhlYSwweDhjLDB4ZGYsMHgyOCwweDQwLDB4ZTcsMHgwNCwweGEzLAorCQkweGZmCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciBncmNkYXRhW10gPSB7CisJCTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDUsMHgwZiwKKwkJMHhmZgorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgY3J0Y2RhdGFbXSA9IHsKKwkJMHg1ZiwweDRmLDB4NGYsMHg4MywweDU1LDB4ODEsMHgwYiwweDNlLAorCQkweGU5LDB4OGIsMHhkZiwweGU4LDB4MGMsMHgwMCwweDAwLDB4MDUsCisJCTB4MDAKKwl9OworCisJbW9kZXggPSA2NDA7IG1vZGV5ID0gNDgwOyBicHAgPSAyOworCisJR0VUSVJFRyhTSVNTUiwgMHgzMSwgJnNyMzEpOworCUdFVElSRUcoU0lTQ1IsIDB4NjMsICZjcjYzKTsKKwlTRVRJUkVHT1IoU0lTU1IsIDB4MDEsIDB4MjApOworCVNFVElSRUcoU0lTQ1IsIDB4NjMsIGNyNjMgJiAweGJmKTsKKwlTRVRJUkVHT1IoU0lTQ1IsIDB4MTcsIDB4ODApOworCVNFVElSRUdPUihTSVNTUiwgMHgxZiwgMHgwNCk7CisJU0VUSVJFR0FORChTSVNTUiwgMHgwNywgMHhmYik7CisJU0VUSVJFRyhTSVNTUiwgMHgwMCwgMHgwMyk7CS8qIHNlcSAqLworCVNFVElSRUcoU0lTU1IsIDB4MDEsIDB4MjEpOworCVNFVElSRUcoU0lTU1IsIDB4MDIsIDB4MGYpOworCVNFVElSRUcoU0lTU1IsIDB4MDMsIDB4MDApOworCVNFVElSRUcoU0lTU1IsIDB4MDQsIDB4MGUpOworCVNFVFJFRyhTSVNNSVNDVywgMHgyMyk7CQkvKiBtaXNjICovCisJZm9yIChpID0gMDsgaSA8PSAweDE4OyBpKyspIHsJLyogY3J0YyAqLworCQlTRVRJUkVHKFNJU0NSLCBpLCBjcnRjcmRhdGFbaV0pOworCX0KKwlmb3IgKGkgPSAwOyBpIDw9IDB4MTM7IGkrKykgewkvKiBhdHQgKi8KKwkJR0VUUkVHKFNJU0lOUFNUQVQsICZ0bXA4KTsKKwkJU0VUUkVHKFNJU0FSLCBpKTsKKwkJU0VUUkVHKFNJU0FSLCBhdHRyZGF0YVtpXSk7CisJfQorCUdFVFJFRyhTSVNJTlBTVEFULCAmdG1wOCk7CisJU0VUUkVHKFNJU0FSLCAweDE0KTsKKwlTRVRSRUcoU0lTQVIsIDB4MDApOworCUdFVFJFRyhTSVNJTlBTVEFULCAmdG1wOCk7CisJU0VUUkVHKFNJU0FSLCAweDIwKTsKKwlHRVRSRUcoU0lTSU5QU1RBVCwgJnRtcDgpOworCWZvciAoaSA9IDA7IGkgPD0gMHgwODsgaSsrKSB7CS8qIGdyYyAqLworCQlTRVRJUkVHKFNJU0dSLCBpLCBncmNkYXRhW2ldKTsKKwl9CisJU0VUSVJFR0FORChTSVNHUiwgMHgwNSwgMHhiZik7CisJZm9yIChpID0gMHgwQTsgaSA8PSAweDBFOyBpKyspIHsJLyogY2xyIGV4dCAqLworCQlTRVRJUkVHKFNJU1NSLCBpLCAweDAwKTsKKwl9CisJU0VUSVJFR0FORChTSVNTUiwgMHgzNywgMHhmZSk7CisJU0VUUkVHKFNJU01JU0NXLCAweGVmKTsJCS8qIHN5bmMgKi8KKwlTRVRJUkVHKFNJU0NSLCAweDExLCAweDAwKTsJLyogY3J0YyAqLworCWZvciAoaiA9IDB4MDAsIGkgPSAwOyBpIDw9IDc7IGkrKywgaisrKSB7CisJCVNFVElSRUcoU0lTQ1IsIGosIGNydGNkYXRhW2ldKTsKKwl9CisJZm9yIChqID0gMHgxMDsgaSA8PSAxMDsgaSsrLCBqKyspIHsKKwkJU0VUSVJFRyhTSVNDUiwgaiwgY3J0Y2RhdGFbaV0pOworCX0KKwlmb3IgKGogPSAweDE1OyBpIDw9IDEyOyBpKyssIGorKykgeworCQlTRVRJUkVHKFNJU0NSLCBqLCBjcnRjZGF0YVtpXSk7CisJfQorCWZvciAoaiA9IDB4MEE7IGkgPD0gMTU7IGkrKywgaisrKSB7CisJCVNFVElSRUcoU0lTU1IsIGosIGNydGNkYXRhW2ldKTsKKwl9CisJU0VUSVJFRyhTSVNTUiwgMHgwRSwgKGNydGNkYXRhWzE2XSAmIDB4RTApKTsKKwlTRVRJUkVHQU5ET1IoU0lTQ1IsIDB4MDksIDB4NWYsICgoY3J0Y2RhdGFbMTZdICYgMHgwMSkgPDwgNSkpOworCVNFVElSRUcoU0lTQ1IsIDB4MTQsIDB4NGYpOworCWR1ID0gKG1vZGV4IC8gMTYpICogKGJwcCAqIDIpOwkvKiBvZmZzZXQvcGl0Y2ggKi8KKwlpZiAobW9kZXggJSAxNikgZHUgKz0gYnBwOworCVNFVElSRUdBTkRPUihTSVNTUiwgMHgwZSwgMHhmMCwgKChkdSA+PiA4KSAmIDB4MGYpKTsKKwlTRVRJUkVHKFNJU0NSLCAweDEzLCAoZHUgJiAweGZmKSk7CisJZHUgPDw9IDU7CisJdG1wOCA9IGR1ID4+IDg7CisJaWYgKGR1ICYgMHhmZikgdG1wOCsrOworCVNFVElSRUcoU0lTU1IsIDB4MTAsIHRtcDgpOworCVNFVElSRUcoU0lTU1IsIDB4MzEsIDB4MDApOwkvKiBWQ0xLICovCisJU0VUSVJFRyhTSVNTUiwgMHgyYiwgMHgxYik7CisJU0VUSVJFRyhTSVNTUiwgMHgyYywgMHhlMSk7CisJU0VUSVJFRyhTSVNTUiwgMHgyZCwgMHgwMSk7CisJU0VUSVJFR0FORChTSVNTUiwgMHgzZCwgMHhmZSk7CS8qIEZJRk8gKi8KKwlTRVRJUkVHKFNJU1NSLCAweDA4LCAweGFlKTsKKwlTRVRJUkVHQU5EKFNJU1NSLCAweDA5LCAweGYwKTsKKwlTRVRJUkVHKFNJU1NSLCAweDA4LCAweDM0KTsKKwlTRVRJUkVHT1IoU0lTU1IsIDB4M2QsIDB4MDEpOworCVNFVElSRUdBTkQoU0lTU1IsIDB4MWYsIDB4M2YpOwkvKiBtb2RlIHJlZ3MgKi8KKwlTRVRJUkVHQU5ET1IoU0lTU1IsIDB4MDYsIDB4YzAsIDB4MGEpOworCVNFVElSRUcoU0lTQ1IsIDB4MTksIDB4MDApOworCVNFVElSRUdBTkQoU0lTQ1IsIDB4MWEsIDB4ZmMpOworCVNFVElSRUdBTkQoU0lTU1IsIDB4MGYsIDB4YjcpOworCVNFVElSRUdBTkQoU0lTU1IsIDB4MzEsIDB4ZmIpOworCVNFVElSRUdBTkRPUihTSVNTUiwgMHgyMSwgMHgxZiwgMHhhMCk7CisJU0VUSVJFR0FORChTSVNTUiwgMHgzMiwgMHhmMyk7CisJU0VUSVJFR0FORE9SKFNJU1NSLCAweDA3LCAweGY4LCAweDAzKTsKKwlTRVRJUkVHKFNJU0NSLCAweDUyLCAweDZjKTsKKworCVNFVElSRUcoU0lTQ1IsIDB4MGQsIDB4MDApOwkvKiBhZGp1c3QgZnJhbWUgKi8KKwlTRVRJUkVHKFNJU0NSLCAweDBjLCAweDAwKTsKKwlTRVRJUkVHKFNJU1NSLCAweDBkLCAweDAwKTsKKwlTRVRJUkVHQU5EKFNJU1NSLCAweDM3LCAweGZlKTsKKworCVNFVElSRUcoU0lTQ1IsIDB4MzIsIDB4MjApOworCVNFVElSRUdBTkQoU0lTU1IsIDB4MDEsIDB4ZGYpOwkvKiBlbmFibGUgZGlzcGxheSAqLworCVNFVElSRUcoU0lTQ1IsIDB4NjMsIChjcjYzICYgMHhiZikpOworCVNFVElSRUcoU0lTU1IsIDB4MzEsIChzcjMxICYgMHhmYikpOworCisJaWYgKHRvdWNoZW5naW5lcykgeworCQlTRVRJUkVHKFNJU1NSLCAweDIwLCAweGExKTsJLyogZW5hYmxlIGVuZ2luZXMgKi8KKwkJU0VUSVJFR09SKFNJU1NSLCAweDFlLCAweDVhKTsKKworCQlTRVRJUkVHKFNJU1NSLCAweDI2LCAweDAxKTsJLyogZGlzYWJsZSBjbWRxdWV1ZSAqLworCQlTRVRJUkVHKFNJU1NSLCAweDI3LCAweDFmKTsKKwkJU0VUSVJFRyhTSVNTUiwgMHgyNiwgMHgwMCk7CisJfQorCisJU0VUSVJFRyhTSVNDUiwgMHgzNCwgMHg0NCk7ICAJLyogd2UganVzdCBzZXQgc3RkIG1vZGUgIzQ0ICovCisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitzaXN1c2JfaW5pdF9nZnhjb3JlKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYikKK3sKKwlpbnQgcmV0ID0gMCwgaSwgaiwgYncsIGNoYWIsIGlyZXQsIHJldHJ5ID0gMzsKKwl1OCB0bXA4LCByYW10eXBlOworCXUzMiB0bXAzMjsKKwlzdGF0aWMgY29uc3QgY2hhciBtY2xrdGFibGVbXSA9IHsKKwkJMHgzYiwgMHgyMiwgMHgwMSwgMTQzLAorCQkweDNiLCAweDIyLCAweDAxLCAxNDMsCisJCTB4M2IsIDB4MjIsIDB4MDEsIDE0MywKKwkJMHgzYiwgMHgyMiwgMHgwMSwgMTQzCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciBlY2xrdGFibGVbXSA9IHsKKwkJMHgzYiwgMHgyMiwgMHgwMSwgMTQzLAorCQkweDNiLCAweDIyLCAweDAxLCAxNDMsCisJCTB4M2IsIDB4MjIsIDB4MDEsIDE0MywKKwkJMHgzYiwgMHgyMiwgMHgwMSwgMTQzCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciByYW10eXBldGFibGUxW10gPSB7CisJCTB4MDAsIDB4MDQsIDB4NjAsIDB4NjAsCisJCTB4MGYsIDB4MGYsIDB4MWYsIDB4MWYsCisJCTB4YmEsIDB4YmEsIDB4YmEsIDB4YmEsCisJCTB4YTksIDB4YTksIDB4YWMsIDB4YWMsCisJCTB4YTAsIDB4YTAsIDB4YTAsIDB4YTgsCisJCTB4MDAsIDB4MDAsIDB4MDIsIDB4MDIsCisJCTB4MzAsIDB4MzAsIDB4NDAsIDB4NDAKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyIHJhbXR5cGV0YWJsZTJbXSA9IHsKKwkJMHg3NywgMHg3NywgMHg0NCwgMHg0NCwKKwkJMHg3NywgMHg3NywgMHg0NCwgMHg0NCwKKwkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJMHg1YiwgMHg1YiwgMHhhYiwgMHhhYiwKKwkJMHgwMCwgMHgwMCwgMHhmMCwgMHhmOAorCX07CisKKwl3aGlsZSAocmV0cnktLSkgeworCisJCS8qIEVuYWJsZSBWR0EgKi8KKwkJcmV0ID0gR0VUUkVHKFNJU1ZHQUVOLCAmdG1wOCk7CisJCXJldCB8PSBTRVRSRUcoU0lTVkdBRU4sICh0bXA4IHwgMHgwMSkpOworCisJCS8qIEVuYWJsZSBHUFUgYWNjZXNzIHRvIFZSQU0gKi8KKwkJcmV0IHw9IEdFVFJFRyhTSVNNSVNDUiwgJnRtcDgpOworCQlyZXQgfD0gU0VUUkVHKFNJU01JU0NXLCAodG1wOCB8IDB4MDEpKTsKKworCQlpZiAocmV0KSBjb250aW51ZTsKKworCQkvKiBSZXNldCByZWdpc3RlcnMgKi8KKwkJcmV0IHw9IFNFVElSRUdBTkQoU0lTQ1IsIDB4NWIsIDB4ZGYpOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgwNSwgMHg4Nik7CisJCXJldCB8PSBTRVRJUkVHT1IoU0lTU1IsIDB4MjAsIDB4MDEpOworCisJCXJldCB8PSBTRVRSRUcoU0lTTUlTQ1csIDB4NjcpOworCisJCWZvciAoaSA9IDB4MDY7IGkgPD0gMHgxZjsgaSsrKSB7CisJCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgaSwgMHgwMCk7CisJCX0KKwkJZm9yIChpID0gMHgyMTsgaSA8PSAweDI3OyBpKyspIHsKKwkJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCBpLCAweDAwKTsKKwkJfQorCQlmb3IgKGkgPSAweDMxOyBpIDw9IDB4M2Q7IGkrKykgeworCQkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIGksIDB4MDApOworCQl9CisJCWZvciAoaSA9IDB4MTI7IGkgPD0gMHgxYjsgaSsrKSB7CisJCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgaSwgMHgwMCk7CisJCX0KKwkJZm9yIChpID0gMHg3OTsgaSA8PSAweDdjOyBpKyspIHsKKwkJCXJldCB8PSBTRVRJUkVHKFNJU0NSLCBpLCAweDAwKTsKKwkJfQorCisJCWlmIChyZXQpIGNvbnRpbnVlOworCisJCXJldCB8PSBTRVRJUkVHKFNJU0NSLCAweDYzLCAweDgwKTsKKworCQlyZXQgfD0gR0VUSVJFRyhTSVNTUiwgMHgzYSwgJnJhbXR5cGUpOworCQlyYW10eXBlICY9IDB4MDM7CisKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MjgsIG1jbGt0YWJsZVtyYW10eXBlICogNF0pOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgyOSwgbWNsa3RhYmxlWyhyYW10eXBlICogNCkgKyAxXSk7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDJhLCBtY2xrdGFibGVbKHJhbXR5cGUgKiA0KSArIDJdKTsKKworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgyZSwgZWNsa3RhYmxlW3JhbXR5cGUgKiA0XSk7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDJmLCBlY2xrdGFibGVbKHJhbXR5cGUgKiA0KSArIDFdKTsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MzAsIGVjbGt0YWJsZVsocmFtdHlwZSAqIDQpICsgMl0pOworCisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDA3LCAweDE4KTsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MTEsIDB4MGYpOworCisJCWlmIChyZXQpIGNvbnRpbnVlOworCisJCWZvciAoaSA9IDB4MTUsIGogPSAwOyBpIDw9IDB4MWI7IGkrKywgaisrKSB7CisJCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgaSwgcmFtdHlwZXRhYmxlMVsoaio0KSArIHJhbXR5cGVdKTsKKwkJfQorCQlmb3IgKGkgPSAweDQwLCBqID0gMDsgaSA8PSAweDQ0OyBpKyssIGorKykgeworCQkJcmV0IHw9IFNFVElSRUcoU0lTQ1IsIGksIHJhbXR5cGV0YWJsZTJbKGoqNCkgKyByYW10eXBlXSk7CisJCX0KKworCQlyZXQgfD0gU0VUSVJFRyhTSVNDUiwgMHg0OSwgMHhhYSk7CisKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MWYsIDB4MDApOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgyMCwgMHhhMCk7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDIzLCAweGY2KTsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MjQsIDB4MGQpOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgyNSwgMHgzMyk7CisKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MTEsIDB4MGYpOworCisJCXJldCB8PSBTRVRJUkVHT1IoU0lTUEFSVDEsIDB4MmYsIDB4MDEpOworCisJCXJldCB8PSBTRVRJUkVHQU5EKFNJU0NBUCwgMHgzZiwgMHhlZik7CisKKwkJaWYgKHJldCkgY29udGludWU7CisKKwkJcmV0IHw9IFNFVElSRUcoU0lTUEFSVDEsIDB4MDAsIDB4MDApOworCisJCXJldCB8PSBHRVRJUkVHKFNJU1NSLCAweDEzLCAmdG1wOCk7CisJCXRtcDggPj49IDQ7CisKKwkJcmV0IHw9IFNFVElSRUcoU0lTUEFSVDEsIDB4MDIsIDB4MDApOworCQlyZXQgfD0gU0VUSVJFRyhTSVNQQVJUMSwgMHgyZSwgMHgwOCk7CisKKwkJcmV0IHw9IHNpc3VzYl9yZWFkX3BjaV9jb25maWcoc2lzdXNiLCAweDUwLCAmdG1wMzIpOworCQl0bXAzMiAmPSAweDAwZjAwMDAwOworCQl0bXA4ID0gKHRtcDMyID09IDB4MTAwMDAwKSA/IDB4MzMgOiAweDAzOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgyNSwgdG1wOCk7CisJCXRtcDggPSAodG1wMzIgPT0gMHgxMDAwMDApID8gMHhhYSA6IDB4ODg7CisJCXJldCB8PSBTRVRJUkVHKFNJU0NSLCAweDQ5LCB0bXA4KTsKKworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgyNywgMHgxZik7CisJCXJldCB8PSBTRVRJUkVHKFNJU1NSLCAweDMxLCAweDAwKTsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MzIsIDB4MTEpOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgzMywgMHgwMCk7CisKKwkJaWYgKHJldCkgY29udGludWU7CisKKwkJcmV0IHw9IFNFVElSRUcoU0lTQ1IsIDB4ODMsIDB4MDApOworCisJCXJldCB8PSBzaXN1c2Jfc2V0X2RlZmF1bHRfbW9kZShzaXN1c2IsIDApOworCisJCXJldCB8PSBTRVRJUkVHQU5EKFNJU1NSLCAweDIxLCAweGRmKTsKKwkJcmV0IHw9IFNFVElSRUdPUihTSVNTUiwgMHgwMSwgMHgyMCk7CisJCXJldCB8PSBTRVRJUkVHT1IoU0lTU1IsIDB4MTYsIDB4MGYpOworCisJCXJldCB8PSBzaXN1c2JfdHJpZ2dlcnNyMTYoc2lzdXNiLCByYW10eXBlKTsKKworCQkvKiBEaXNhYmxlIHJlZnJlc2ggKi8KKwkJcmV0IHw9IFNFVElSRUdBTkQoU0lTU1IsIDB4MTcsIDB4ZjgpOworCQlyZXQgfD0gU0VUSVJFR09SKFNJU1NSLCAweDE5LCAweDAzKTsKKworCQlyZXQgfD0gc2lzdXNiX2dldGJ1c3dpZHRoKHNpc3VzYiwgJmJ3LCAmY2hhYik7CisJCXJldCB8PSBzaXN1c2JfdmVyaWZ5X21jbGsoc2lzdXNiKTsKKworCQlpZiAocmFtdHlwZSA8PSAxKSB7CisJCQlyZXQgfD0gc2lzdXNiX2dldF9zZHJhbV9zaXplKHNpc3VzYiwgJmlyZXQsIGJ3LCBjaGFiKTsKKwkJCWlmIChpcmV0KSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJzaXN1c2J2Z2FbJWRdOiBSQU0gc2l6ZSAiCisJCQkJCSJkZXRlY3Rpb24gZmFpbGVkLCAiCisJCQkJCSJhc3N1bWluZyA4TUIgdmlkZW8gUkFNXG4iLAorCQkJCQlzaXN1c2ItPm1pbm9yKTsKKwkJCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwweDE0LDB4MzEpOworCQkJCS8qIFRPRE8gKi8KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUiAic2lzdXNidmdhWyVkXTogRERSIFJBTSBkZXZpY2UgZm91bmQsICIKKwkJCQkJImFzc3VtaW5nIDhNQiB2aWRlbyBSQU1cbiIsCisJCQkJCXNpc3VzYi0+bWlub3IpOworCQkJcmV0IHw9IFNFVElSRUcoU0lTU1IsMHgxNCwweDMxKTsKKwkJCS8qICoqKiBUT0RPICoqKiAqLworCQl9CisKKwkJLyogRW5hYmxlIHJlZnJlc2ggKi8KKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MTYsIHJhbXR5cGV0YWJsZTFbNCArIHJhbXR5cGVdKTsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MTcsIHJhbXR5cGV0YWJsZTFbOCArIHJhbXR5cGVdKTsKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MTksIHJhbXR5cGV0YWJsZTFbMTYgKyByYW10eXBlXSk7CisKKwkJcmV0IHw9IFNFVElSRUdPUihTSVNTUiwgMHgyMSwgMHgyMCk7CisKKwkJcmV0IHw9IFNFVElSRUcoU0lTU1IsIDB4MjIsIDB4ZmIpOworCQlyZXQgfD0gU0VUSVJFRyhTSVNTUiwgMHgyMSwgMHhhNSk7CisKKwkJaWYgKHJldCA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworI3VuZGVmIFNFVFJFRworI3VuZGVmIEdFVFJFRworI3VuZGVmIFNFVElSRUcKKyN1bmRlZiBHRVRJUkVHCisjdW5kZWYgU0VUSVJFR09SCisjdW5kZWYgU0VUSVJFR0FORAorI3VuZGVmIFNFVElSRUdBTkRPUgorI3VuZGVmIFJFQURMCisjdW5kZWYgV1JJVEVMCisKK3N0YXRpYyB2b2lkCitzaXN1c2JfZ2V0X3JhbWNvbmZpZyhzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IpCit7CisJdTggdG1wOCwgdG1wODIsIHJhbXR5cGU7CisJaW50IGJ3ID0gMDsKKwljaGFyICpyYW10eXBldGV4dDEgPSBOVUxMOworCWNvbnN0IGNoYXIgKnJhbXR5cGV0ZXh0MltdID0gewkiU0RSIFNEUkFNIiwgIlNEUiBTR1JBTSIsCisJCQkJCSJERFIgU0RSQU0iLCAiRERSIFNHUkFNIiB9OworCXN0YXRpYyBjb25zdCBpbnQgYnVzU0RSWzRdICA9IHs2NCwgNjQsIDEyOCwgMTI4fTsKKwlzdGF0aWMgY29uc3QgaW50IGJ1c0REUls0XSAgPSB7MzIsIDMyLCAgNjQsICA2NH07CisJc3RhdGljIGNvbnN0IGludCBidXNERFJBWzRdID0gezY0KzMyLCA2NCszMiAsICg2NCszMikqMiwgKDY0KzMyKSoyfTsKKworCXNpc3VzYl9nZXRpZHhyZWcoc2lzdXNiLCBTSVNTUiwgMHgxNCwgJnRtcDgpOworCXNpc3VzYl9nZXRpZHhyZWcoc2lzdXNiLCBTSVNTUiwgMHgxNSwgJnRtcDgyKTsKKwlzaXN1c2JfZ2V0aWR4cmVnKHNpc3VzYiwgU0lTU1IsIDB4M2EsICZyYW10eXBlKTsKKwlzaXN1c2ItPnZyYW1zaXplID0gKDEgPDwgKCh0bXA4ICYgMHhmMCkgPj4gNCkpICogMTAyNCAqIDEwMjQ7CisJcmFtdHlwZSAmPSAweDAzOworCXN3aXRjaCAoKHRtcDggPj4gMikgJiAweDAzKSB7CisJY2FzZSAwOiByYW10eXBldGV4dDEgPSAiMSBjaC8xIHIiOworCQlpZiAodG1wODIgJiAweDEwKSB7CisJCQlidyA9IDMyOworCQl9IGVsc2UgeworCQkJYncgPSBidXNTRFJbKHRtcDggJiAweDAzKV07CisJCX0KKwkJYnJlYWs7CisJY2FzZSAxOiByYW10eXBldGV4dDEgPSAiMSBjaC8yIHIiOworCQlzaXN1c2ItPnZyYW1zaXplIDw8PSAxOworCQlidyA9IGJ1c1NEUlsodG1wOCAmIDB4MDMpXTsKKwkJYnJlYWs7CisJY2FzZSAyOiByYW10eXBldGV4dDEgPSAiYXN5bW1lcmljIjsKKwkJc2lzdXNiLT52cmFtc2l6ZSArPSBzaXN1c2ItPnZyYW1zaXplLzI7CisJCWJ3ID0gYnVzRERSQVsodG1wOCAmIDB4MDMpXTsKKwkJYnJlYWs7CisJY2FzZSAzOiByYW10eXBldGV4dDEgPSAiMiBjaGFubmVsIjsKKwkJc2lzdXNiLT52cmFtc2l6ZSA8PD0gMTsKKwkJYncgPSBidXNERFJbKHRtcDggJiAweDAzKV07CisJCWJyZWFrOworCX0KKworCXByaW50ayhLRVJOX0lORk8gInNpc3VzYnZnYVslZF06ICVkTUIgJXMgJXMsIGJ1cyB3aWR0aCAlZFxuIiwKKwkJCXNpc3VzYi0+bWlub3IsIChzaXN1c2ItPnZyYW1zaXplID4+IDIwKSwgcmFtdHlwZXRleHQxLAorCQkJcmFtdHlwZXRleHQyW3JhbXR5cGVdLCBidyk7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9kb19pbml0X2dmeGRldmljZShzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IpCit7CisJc3RydWN0IHNpc3VzYl9wYWNrZXQgcGFja2V0OworCWludCByZXQ7CisJdTMyIHRtcDMyOworCisJLyogRG8gc29tZSBtYWdpYyAqLworCXBhY2tldC5oZWFkZXIgID0gMHgwMDFmOworCXBhY2tldC5hZGRyZXNzID0gMHgwMDAwMDMyNDsKKwlwYWNrZXQuZGF0YSAgICA9IDB4MDAwMDAwMDQ7CisJcmV0ID0gc2lzdXNiX3NlbmRfYnJpZGdlX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0LCAwKTsKKworCXBhY2tldC5oZWFkZXIgID0gMHgwMDFmOworCXBhY2tldC5hZGRyZXNzID0gMHgwMDAwMDM2NDsKKwlwYWNrZXQuZGF0YSAgICA9IDB4MDAwMDAwMDQ7CisJcmV0IHw9IHNpc3VzYl9zZW5kX2JyaWRnZV9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCwgMCk7CisKKwlwYWNrZXQuaGVhZGVyICA9IDB4MDAxZjsKKwlwYWNrZXQuYWRkcmVzcyA9IDB4MDAwMDAzODQ7CisJcGFja2V0LmRhdGEgICAgPSAweDAwMDAwMDA0OworCXJldCB8PSBzaXN1c2Jfc2VuZF9icmlkZ2VfcGFja2V0KHNpc3VzYiwgMTAsICZwYWNrZXQsIDApOworCisJcGFja2V0LmhlYWRlciAgPSAweDAwMWY7CisJcGFja2V0LmFkZHJlc3MgPSAweDAwMDAwMTAwOworCXBhY2tldC5kYXRhICAgID0gMHgwMDAwMDcwMDsKKwlyZXQgfD0gc2lzdXNiX3NlbmRfYnJpZGdlX3BhY2tldChzaXN1c2IsIDEwLCAmcGFja2V0LCAwKTsKKworCXBhY2tldC5oZWFkZXIgID0gMHgwMDBmOworCXBhY2tldC5hZGRyZXNzID0gMHgwMDAwMDAwNDsKKwlyZXQgfD0gc2lzdXNiX3NlbmRfYnJpZGdlX3BhY2tldChzaXN1c2IsIDYsICZwYWNrZXQsIDApOworCXBhY2tldC5kYXRhIHw9IDB4MTc7CisJcmV0IHw9IHNpc3VzYl9zZW5kX2JyaWRnZV9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCwgMCk7CisKKwkvKiBJbml0IEJBUiAwIChWUkFNKSAqLworCXJldCB8PSBzaXN1c2JfcmVhZF9wY2lfY29uZmlnKHNpc3VzYiwgMHgxMCwgJnRtcDMyKTsKKwlyZXQgfD0gc2lzdXNiX3dyaXRlX3BjaV9jb25maWcoc2lzdXNiLCAweDEwLCAweGZmZmZmZmYwKTsKKwlyZXQgfD0gc2lzdXNiX3JlYWRfcGNpX2NvbmZpZyhzaXN1c2IsIDB4MTAsICZ0bXAzMik7CisJdG1wMzIgJj0gMHgwZjsKKwl0bXAzMiB8PSBTSVNVU0JfUENJX01FTUJBU0U7CisJcmV0IHw9IHNpc3VzYl93cml0ZV9wY2lfY29uZmlnKHNpc3VzYiwgMHgxMCwgdG1wMzIpOworCisJLyogSW5pdCBCQVIgMSAoTU1JTykgKi8KKwlyZXQgfD0gc2lzdXNiX3JlYWRfcGNpX2NvbmZpZyhzaXN1c2IsIDB4MTQsICZ0bXAzMik7CisJcmV0IHw9IHNpc3VzYl93cml0ZV9wY2lfY29uZmlnKHNpc3VzYiwgMHgxNCwgMHhmZmZmZmZmMCk7CisJcmV0IHw9IHNpc3VzYl9yZWFkX3BjaV9jb25maWcoc2lzdXNiLCAweDE0LCAmdG1wMzIpOworCXRtcDMyICY9IDB4MGY7CisJdG1wMzIgfD0gU0lTVVNCX1BDSV9NTUlPQkFTRTsKKwlyZXQgfD0gc2lzdXNiX3dyaXRlX3BjaV9jb25maWcoc2lzdXNiLCAweDE0LCB0bXAzMik7CisKKwkvKiBJbml0IEJBUiAyIChpL28gcG9ydHMpICovCisJcmV0IHw9IHNpc3VzYl9yZWFkX3BjaV9jb25maWcoc2lzdXNiLCAweDE4LCAmdG1wMzIpOworCXJldCB8PSBzaXN1c2Jfd3JpdGVfcGNpX2NvbmZpZyhzaXN1c2IsIDB4MTgsIDB4ZmZmZmZmZjApOworCXJldCB8PSBzaXN1c2JfcmVhZF9wY2lfY29uZmlnKHNpc3VzYiwgMHgxOCwgJnRtcDMyKTsKKwl0bXAzMiAmPSAweDBmOworCXRtcDMyIHw9IFNJU1VTQl9QQ0lfSU9QT1JUQkFTRTsKKwlyZXQgfD0gc2lzdXNiX3dyaXRlX3BjaV9jb25maWcoc2lzdXNiLCAweDE4LCB0bXAzMik7CisKKwkvKiBFbmFibGUgbWVtb3J5IGFuZCBpL28gYWNjZXNzICovCisJcmV0IHw9IHNpc3VzYl9yZWFkX3BjaV9jb25maWcoc2lzdXNiLCAweDA0LCAmdG1wMzIpOworCXRtcDMyIHw9IDB4MzsKKwlyZXQgfD0gc2lzdXNiX3dyaXRlX3BjaV9jb25maWcoc2lzdXNiLCAweDA0LCB0bXAzMik7CisKKwlpZiAocmV0ID09IDApIHsKKwkJLyogU29tZSBmdXJ0aGVyIG1hZ2ljICovCisJCXBhY2tldC5oZWFkZXIgID0gMHgwMDFmOworCQlwYWNrZXQuYWRkcmVzcyA9IDB4MDAwMDAwNTA7CisJCXBhY2tldC5kYXRhICAgID0gMHgwMDAwMDBmZjsKKwkJcmV0IHw9IHNpc3VzYl9zZW5kX2JyaWRnZV9wYWNrZXQoc2lzdXNiLCAxMCwgJnBhY2tldCwgMCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogSW5pdGlhbGl6ZSB0aGUgZ3JhcGhpY3MgZGV2aWNlIChyZXR1cm4gMCBvbiBzdWNjZXNzKQorICogVGhpcyBpbml0aWFsaXplcyB0aGUgbmV0MjI4MCBhcyB3ZWxsIGFzIHRoZSBQQ0kgcmVnaXN0ZXJzCisgKiBvZiB0aGUgZ3JhcGhpY3MgYm9hcmQuCisgKi8KKworc3RhdGljIGludAorc2lzdXNiX2luaXRfZ2Z4ZGV2aWNlKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYiwgaW50IGluaXRzY3JlZW4pCit7CisJaW50IHJldCA9IDAsIHRlc3QgPSAwOworCXUzMiB0bXAzMjsKKworCWlmIChzaXN1c2ItPmRldmluaXQgPT0gMSkgeworCQkvKiBSZWFkIFBDSSBCQVJzIGFuZCBzZWUgaWYgdGhleSBoYXZlIGJlZW4gc2V0IHVwICovCisJCXJldCB8PSBzaXN1c2JfcmVhZF9wY2lfY29uZmlnKHNpc3VzYiwgMHgxMCwgJnRtcDMyKTsKKwkJaWYgKHJldCkgcmV0dXJuIHJldDsKKwkJaWYgKCh0bXAzMiAmIDB4ZmZmZmZmZjApID09IFNJU1VTQl9QQ0lfTUVNQkFTRSkgdGVzdCsrOworCisJCXJldCB8PSBzaXN1c2JfcmVhZF9wY2lfY29uZmlnKHNpc3VzYiwgMHgxNCwgJnRtcDMyKTsKKwkJaWYgKHJldCkgcmV0dXJuIHJldDsKKwkJaWYgKCh0bXAzMiAmIDB4ZmZmZmZmZjApID09IFNJU1VTQl9QQ0lfTU1JT0JBU0UpIHRlc3QrKzsKKworCQlyZXQgfD0gc2lzdXNiX3JlYWRfcGNpX2NvbmZpZyhzaXN1c2IsIDB4MTgsICZ0bXAzMik7CisJCWlmIChyZXQpIHJldHVybiByZXQ7CisJCWlmICgodG1wMzIgJiAweGZmZmZmZmYwKSA9PSBTSVNVU0JfUENJX0lPUE9SVEJBU0UpIHRlc3QrKzsKKwl9CisKKwkvKiBObz8gU28gcmVzZXQgdGhlIGRldmljZSAqLworCWlmICgoc2lzdXNiLT5kZXZpbml0ID09IDApIHx8ICh0ZXN0ICE9IDMpKSB7CisKKwkJcmV0IHw9IHNpc3VzYl9kb19pbml0X2dmeGRldmljZShzaXN1c2IpOworCisJCWlmIChyZXQgPT0gMCkKKwkJCXNpc3VzYi0+ZGV2aW5pdCA9IDE7CisKKwl9CisKKwlpZiAoc2lzdXNiLT5kZXZpbml0KSB7CisJCS8qIEluaXRpYWxpemUgdGhlIGdyYXBoaWNzIGNvcmUgKi8KKwkJaWYgKHNpc3VzYl9pbml0X2dmeGNvcmUoc2lzdXNiKSA9PSAwKSB7CisJCQlzaXN1c2ItPmdmeGluaXQgPSAxOworCQkJc2lzdXNiX2dldF9yYW1jb25maWcoc2lzdXNiKTsKKwkJCXJldCB8PSBzaXN1c2Jfc2V0X2RlZmF1bHRfbW9kZShzaXN1c2IsIDEpOworCQkJcmV0IHw9IHNpc3VzYl9zZXR1cF9zY3JlZW4oc2lzdXNiLCAxLCBpbml0c2NyZWVuKTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIGZvcHMgKi8KKworc3RhdGljIGludAorc2lzdXNiX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJaW50IHN1Ym1pbm9yID0gaW1pbm9yKGlub2RlKTsKKworCWRvd24oJmRpc2Nvbm5lY3Rfc2VtKTsKKworCWlmICghKGludGVyZmFjZSA9IHVzYl9maW5kX2ludGVyZmFjZSgmc2lzdXNiX2RyaXZlciwgc3VibWlub3IpKSkgeworCQlwcmludGsoS0VSTl9FUlIgInNpc3VzYlslZF06IEZhaWxlZCB0byBmaW5kIGludGVyZmFjZVxuIiwKKwkJCQlzdWJtaW5vcik7CisJCXVwKCZkaXNjb25uZWN0X3NlbSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICghKHNpc3VzYiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKSkpIHsKKwkJdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZG93bigmc2lzdXNiLT5sb2NrKTsKKworCWlmICghc2lzdXNiLT5wcmVzZW50IHx8ICFzaXN1c2ItPnJlYWR5KSB7CisJCXVwKCZzaXN1c2ItPmxvY2spOworCQl1cCgmZGlzY29ubmVjdF9zZW0pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoc2lzdXNiLT5pc29wZW4pIHsKKwkJdXAoJnNpc3VzYi0+bG9jayk7CisJCXVwKCZkaXNjb25uZWN0X3NlbSk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKCFzaXN1c2ItPmRldmluaXQpIHsKKwkJaWYgKHNpc3VzYi0+c2lzdXNiX2Rldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIHsKKwkJCWlmIChzaXN1c2JfaW5pdF9nZnhkZXZpY2Uoc2lzdXNiLCAwKSkgeworCQkJCXVwKCZzaXN1c2ItPmxvY2spOworCQkJCXVwKCZkaXNjb25uZWN0X3NlbSk7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSJzaXN1c2J2Z2FbJWRdOiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSAiCisJCQkJCSJkZXZpY2VcbiIsCisJCQkJCXNpc3VzYi0+bWlub3IpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQl9IGVsc2UgeworCQkJdXAoJnNpc3VzYi0+bG9jayk7CisJCQl1cCgmZGlzY29ubmVjdF9zZW0pOworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJInNpc3VzYnZnYVslZF06IERldmljZSBub3QgYXR0YWNoZWQgdG8gIgorCQkJCSJVU0IgMi4wIGh1YlxuIiwKKwkJCQlzaXN1c2ItPm1pbm9yKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorCisJLyogaW5jcmVtZW50IHVzYWdlIGNvdW50IGZvciB0aGUgZGV2aWNlICovCisJa3JlZl9nZXQoJnNpc3VzYi0+a3JlZik7CisKKwlzaXN1c2ItPmlzb3BlbiA9IDE7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBzaXN1c2I7CisKKwl1cCgmc2lzdXNiLT5sb2NrKTsKKworCXVwKCZkaXNjb25uZWN0X3NlbSk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAic2lzdXNidmdhWyVkXTogb3BlbmVkIiwgc2lzdXNiLT5taW5vcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3Npc3VzYl9kZWxldGUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiID0gdG9fc2lzdXNiX2RldihrcmVmKTsKKworCWlmICghc2lzdXNiKQorCQlyZXR1cm47CisKKwlpZiAoc2lzdXNiLT5zaXN1c2JfZGV2KQorCQl1c2JfcHV0X2RldihzaXN1c2ItPnNpc3VzYl9kZXYpOworCisJc2lzdXNiLT5zaXN1c2JfZGV2ID0gTlVMTDsKKwlzaXN1c2JfZnJlZV9idWZmZXJzKHNpc3VzYik7CisJc2lzdXNiX2ZyZWVfdXJicyhzaXN1c2IpOworCWtmcmVlKHNpc3VzYik7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYjsKKwlpbnQgbXltaW5vcjsKKworCWRvd24oJmRpc2Nvbm5lY3Rfc2VtKTsKKworCWlmICghKHNpc3VzYiA9IChzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICopZmlsZS0+cHJpdmF0ZV9kYXRhKSkgeworCQl1cCgmZGlzY29ubmVjdF9zZW0pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkb3duKCZzaXN1c2ItPmxvY2spOworCisJaWYgKHNpc3VzYi0+cHJlc2VudCkgeworCQkvKiBXYWl0IGZvciBhbGwgVVJCcyB0byBmaW5pc2ggaWYgZGV2aWNlIHN0aWxsIHByZXNlbnQgKi8KKwkJaWYgKCFzaXN1c2Jfd2FpdF9hbGxfb3V0X2NvbXBsZXRlKHNpc3VzYikpCisJCQlzaXN1c2Jfa2lsbF9hbGxfYnVzeShzaXN1c2IpOworCX0KKworCW15bWlub3IgPSBzaXN1c2ItPm1pbm9yOworCisJc2lzdXNiLT5pc29wZW4gPSAwOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisKKwl1cCgmc2lzdXNiLT5sb2NrKTsKKworCS8qIGRlY3JlbWVudCB0aGUgdXNhZ2UgY291bnQgb24gb3VyIGRldmljZSAqLworCWtyZWZfcHV0KCZzaXN1c2ItPmtyZWYsIHNpc3VzYl9kZWxldGUpOworCisJdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKKworCXByaW50ayhLRVJOX0RFQlVHICJzaXN1c2J2Z2FbJWRdOiByZWxlYXNlZCIsIG15bWlub3IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzaXN1c2JfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiOworCXNzaXplX3QgYnl0ZXNfcmVhZCA9IDA7CisJaW50IGVycm5vID0gMDsKKwl1OCBidWY4OworCXUxNiBidWYxNjsKKwl1MzIgYnVmMzIsIGFkZHJlc3M7CisKKwlpZiAoIShzaXN1c2IgPSAoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqKWZpbGUtPnByaXZhdGVfZGF0YSkpCisJCXJldHVybiAtRU5PREVWOworCisJZG93bigmc2lzdXNiLT5sb2NrKTsKKworCS8qIFNhbml0eSBjaGVjayAqLworCWlmICghc2lzdXNiLT5wcmVzZW50IHx8ICFzaXN1c2ItPnJlYWR5IHx8ICFzaXN1c2ItPnNpc3VzYl9kZXYpIHsKKwkJdXAoJnNpc3VzYi0+bG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICgoKnBwb3MpID49IFNJU1VTQl9QQ0lfUFNFVURPX0lPUE9SVEJBU0UgJiYKKwkgICAgKCpwcG9zKSA8ICBTSVNVU0JfUENJX1BTRVVET19JT1BPUlRCQVNFICsgMTI4KSB7CisKKwkJYWRkcmVzcyA9ICgqcHBvcykgLQorCQkJU0lTVVNCX1BDSV9QU0VVRE9fSU9QT1JUQkFTRSArCisJCQlTSVNVU0JfUENJX0lPUE9SVEJBU0U7CisKKwkJLyogUmVhZCBpL28gcG9ydHMKKwkJICogQnl0ZSwgd29yZCBhbmQgbG9uZygzMikgY2FuIGJlIHJlYWQuIEFzIHRoaXMKKwkJICogZW11bGF0ZXMgaW5YIGluc3RydWN0aW9ucywgdGhlIGRhdGEgcmV0dXJuZWQgaXMKKwkJICogaW4gbWFjaGluZS1lbmRpYW5uZXNzLgorCQkgKi8KKwkJc3dpdGNoIChjb3VudCkgeworCisJCQljYXNlIDE6CisJCQkJaWYgKHNpc3VzYl9yZWFkX21lbWlvX2J5dGUoc2lzdXNiLAorCQkJCQkJCVNJU1VTQl9UWVBFX0lPLAorCQkJCQkJCWFkZHJlc3MsICZidWY4KSkKKwkJCQkJZXJybm8gPSAtRUlPOworCQkJCWVsc2UgaWYgKHB1dF91c2VyKGJ1ZjgsICh1OCBfX3VzZXIgKilidWZmZXIpKQorCQkJCQllcnJubyA9IC1FRkFVTFQ7CisJCQkJZWxzZQorCQkJCQlieXRlc19yZWFkID0gMTsKKworCQkJCWJyZWFrOworCisJCQljYXNlIDI6CisJCQkJaWYgKHNpc3VzYl9yZWFkX21lbWlvX3dvcmQoc2lzdXNiLAorCQkJCQkJCVNJU1VTQl9UWVBFX0lPLAorCQkJCQkJCWFkZHJlc3MsICZidWYxNikpCisJCQkJCWVycm5vID0gLUVJTzsKKwkJCQllbHNlIGlmIChwdXRfdXNlcihidWYxNiwgKHUxNiBfX3VzZXIgKilidWZmZXIpKQorCQkJCQllcnJubyA9IC1FRkFVTFQ7CisJCQkJZWxzZQorCQkJCQlieXRlc19yZWFkID0gMjsKKworCQkJCWJyZWFrOworCisJCQljYXNlIDQ6CisJCQkJaWYgKHNpc3VzYl9yZWFkX21lbWlvX2xvbmcoc2lzdXNiLAorCQkJCQkJCVNJU1VTQl9UWVBFX0lPLAorCQkJCQkJCWFkZHJlc3MsICZidWYzMikpCisJCQkJCWVycm5vID0gLUVJTzsKKwkJCQllbHNlIGlmIChwdXRfdXNlcihidWYzMiwgKHUzMiBfX3VzZXIgKilidWZmZXIpKQorCQkJCQllcnJubyA9IC1FRkFVTFQ7CisJCQkJZWxzZQorCQkJCQlieXRlc19yZWFkID0gNDsKKworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWVycm5vID0gLUVJTzsKKworCQl9CisKKwl9IGVsc2UgaWYgKCgqcHBvcykgPj0gU0lTVVNCX1BDSV9QU0VVRE9fTUVNQkFTRSAmJgorCQkgICAoKnBwb3MpIDwgIFNJU1VTQl9QQ0lfUFNFVURPX01FTUJBU0UgKyBzaXN1c2ItPnZyYW1zaXplKSB7CisKKwkJYWRkcmVzcyA9ICgqcHBvcykgLQorCQkJU0lTVVNCX1BDSV9QU0VVRE9fTUVNQkFTRSArCisJCQlTSVNVU0JfUENJX01FTUJBU0U7CisKKwkJLyogUmVhZCB2aWRlbyByYW0KKwkJICogUmVtZW1iZXI6IERhdGEgZGVsaXZlcmVkIGlzIG5ldmVyIGVuZGlhbi1jb3JyZWN0ZWQKKwkJICovCisJCWVycm5vID0gc2lzdXNiX3JlYWRfbWVtX2J1bGsoc2lzdXNiLCBhZGRyZXNzLAorCQkJCQlOVUxMLCBjb3VudCwgYnVmZmVyLCAmYnl0ZXNfcmVhZCk7CisKKwkJaWYgKGJ5dGVzX3JlYWQpCisJCQllcnJubyA9IGJ5dGVzX3JlYWQ7CisKKwl9IGVsc2UgIGlmICgoKnBwb3MpID49IFNJU1VTQl9QQ0lfUFNFVURPX01NSU9CQVNFICYmCisJCSAgICAoKnBwb3MpIDwgIFNJU1VTQl9QQ0lfUFNFVURPX01NSU9CQVNFICsgU0lTVVNCX1BDSV9NTUlPU0laRSkgeworCisJCWFkZHJlc3MgPSAoKnBwb3MpIC0KKwkJCVNJU1VTQl9QQ0lfUFNFVURPX01NSU9CQVNFICsKKwkJCVNJU1VTQl9QQ0lfTU1JT0JBU0U7CisKKwkJLyogUmVhZCBNTUlPCisJCSAqIFJlbWVtYmVyOiBEYXRhIGRlbGl2ZXJlZCBpcyBuZXZlciBlbmRpYW4tY29ycmVjdGVkCisJCSAqLworCQllcnJubyA9IHNpc3VzYl9yZWFkX21lbV9idWxrKHNpc3VzYiwgYWRkcmVzcywKKwkJCQkJTlVMTCwgY291bnQsIGJ1ZmZlciwgJmJ5dGVzX3JlYWQpOworCisJCWlmIChieXRlc19yZWFkKQorCQkJZXJybm8gPSBieXRlc19yZWFkOworCisJfSBlbHNlICBpZiAoKCpwcG9zKSA+PSBTSVNVU0JfUENJX1BTRVVET19QQ0lCQVNFICYmCisJCSAgICAoKnBwb3MpIDw9IFNJU1VTQl9QQ0lfUFNFVURPX1BDSUJBU0UgKyAweDVjKSB7CisKKwkJaWYgKGNvdW50ICE9IDQpIHsKKwkJCXVwKCZzaXN1c2ItPmxvY2spOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlhZGRyZXNzID0gKCpwcG9zKSAtIFNJU1VTQl9QQ0lfUFNFVURPX1BDSUJBU0U7CisKKwkJLyogUmVhZCBQQ0kgY29uZmlnIHJlZ2lzdGVyCisJCSAqIFJldHVybiB2YWx1ZSBkZWxpdmVyZWQgaW4gbWFjaGluZSBlbmRpYW5uZXNzLgorCQkgKi8KKwkJaWYgKHNpc3VzYl9yZWFkX3BjaV9jb25maWcoc2lzdXNiLCBhZGRyZXNzLCAmYnVmMzIpKQorCQkJZXJybm8gPSAtRUlPOworCQllbHNlIGlmIChwdXRfdXNlcihidWYzMiwgKHUzMiBfX3VzZXIgKilidWZmZXIpKQorCQkJZXJybm8gPSAtRUZBVUxUOworCQllbHNlCisJCQlieXRlc19yZWFkID0gNDsKKworCX0gZWxzZSB7CisKKwkJZXJybm8gPSAtRUJBREZEOworCisJfQorCisJKCpwcG9zKSArPSBieXRlc19yZWFkOworCisJdXAoJnNpc3VzYi0+bG9jayk7CisKKwlyZXR1cm4gZXJybm8gPyBlcnJubyA6IGJ5dGVzX3JlYWQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzaXN1c2Jfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwKKwkJCQkJCQkJbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYjsKKwlpbnQgZXJybm8gPSAwOworCXNzaXplX3QgYnl0ZXNfd3JpdHRlbiA9IDA7CisJdTggYnVmODsKKwl1MTYgYnVmMTY7CisJdTMyIGJ1ZjMyLCBhZGRyZXNzOworCisJaWYgKCEoc2lzdXNiID0gKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRvd24oJnNpc3VzYi0+bG9jayk7CisKKwkvKiBTYW5pdHkgY2hlY2sgKi8KKwlpZiAoIXNpc3VzYi0+cHJlc2VudCB8fCAhc2lzdXNiLT5yZWFkeSB8fCAhc2lzdXNiLT5zaXN1c2JfZGV2KSB7CisJCXVwKCZzaXN1c2ItPmxvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoKCpwcG9zKSA+PSBTSVNVU0JfUENJX1BTRVVET19JT1BPUlRCQVNFICYmCisJICAgICgqcHBvcykgPCAgU0lTVVNCX1BDSV9QU0VVRE9fSU9QT1JUQkFTRSArIDEyOCkgeworCisJCWFkZHJlc3MgPSAoKnBwb3MpIC0KKwkJCVNJU1VTQl9QQ0lfUFNFVURPX0lPUE9SVEJBU0UgKworCQkJU0lTVVNCX1BDSV9JT1BPUlRCQVNFOworCisJCS8qIFdyaXRlIGkvbyBwb3J0cworCQkgKiBCeXRlLCB3b3JkIGFuZCBsb25nKDMyKSBjYW4gYmUgd3JpdHRlbi4gQXMgdGhpcworCQkgKiBlbXVsYXRlcyBvdXRYIGluc3RydWN0aW9ucywgdGhlIGRhdGEgaXMgZXhwZWN0ZWQKKwkJICogaW4gbWFjaGluZS1lbmRpYW5uZXNzLgorCQkgKi8KKwkJc3dpdGNoIChjb3VudCkgeworCisJCQljYXNlIDE6CisJCQkJaWYgKGdldF91c2VyKGJ1ZjgsICh1OCBfX3VzZXIgKilidWZmZXIpKQorCQkJCQllcnJubyA9IC1FRkFVTFQ7CisJCQkJZWxzZSBpZiAoc2lzdXNiX3dyaXRlX21lbWlvX2J5dGUoc2lzdXNiLAorCQkJCQkJCVNJU1VTQl9UWVBFX0lPLAorCQkJCQkJCWFkZHJlc3MsIGJ1ZjgpKQorCQkJCQllcnJubyA9IC1FSU87CisJCQkJZWxzZQorCQkJCQlieXRlc193cml0dGVuID0gMTsKKworCQkJCWJyZWFrOworCisJCQljYXNlIDI6CisJCQkJaWYgKGdldF91c2VyKGJ1ZjE2LCAodTE2IF9fdXNlciAqKWJ1ZmZlcikpCisJCQkJCWVycm5vID0gLUVGQVVMVDsKKwkJCQllbHNlIGlmIChzaXN1c2Jfd3JpdGVfbWVtaW9fd29yZChzaXN1c2IsCisJCQkJCQkJU0lTVVNCX1RZUEVfSU8sCisJCQkJCQkJYWRkcmVzcywgYnVmMTYpKQorCQkJCQllcnJubyA9IC1FSU87CisJCQkJZWxzZQorCQkJCQlieXRlc193cml0dGVuID0gMjsKKworCQkJCWJyZWFrOworCisJCQljYXNlIDQ6CisJCQkJaWYgKGdldF91c2VyKGJ1ZjMyLCAodTMyIF9fdXNlciAqKWJ1ZmZlcikpCisJCQkJCWVycm5vID0gLUVGQVVMVDsKKwkJCQllbHNlIGlmIChzaXN1c2Jfd3JpdGVfbWVtaW9fbG9uZyhzaXN1c2IsCisJCQkJCQkJU0lTVVNCX1RZUEVfSU8sCisJCQkJCQkJYWRkcmVzcywgYnVmMzIpKQorCQkJCQllcnJubyA9IC1FSU87CisJCQkJZWxzZQorCQkJCQlieXRlc193cml0dGVuID0gNDsKKworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWVycm5vID0gLUVJTzsKKwkJfQorCisJfSBlbHNlIGlmICgoKnBwb3MpID49IFNJU1VTQl9QQ0lfUFNFVURPX01FTUJBU0UgJiYKKwkJICAgKCpwcG9zKSA8ICBTSVNVU0JfUENJX1BTRVVET19NRU1CQVNFICsgc2lzdXNiLT52cmFtc2l6ZSkgeworCisJCWFkZHJlc3MgPSAoKnBwb3MpIC0KKwkJCVNJU1VTQl9QQ0lfUFNFVURPX01FTUJBU0UgKworCQkJU0lTVVNCX1BDSV9NRU1CQVNFOworCisJCS8qIFdyaXRlIHZpZGVvIHJhbS4KKwkJICogQnVmZmVyIGlzIGNvcGllZCAxOjEsIHRoZXJlZm9yZSwgb24gYmlnLWVuZGlhbgorCQkgKiBtYWNoaW5lcywgdGhlIGRhdGEgbXVzdCBiZSBzd2FwcGVkIGJ5IHVzZXJsYW5kCisJCSAqIGluIGFkdmFuY2UgKGlmIGFwcGxpY2FibGU7IG5vIHN3YXBwaW5nIGluIDhicHAKKwkJICogbW9kZSBvciBpZiBZVVYgZGF0YSBpcyBiZWluZyB0cmFuc2ZlcnJlZCkuCisJCSAqLworCQllcnJubyA9IHNpc3VzYl93cml0ZV9tZW1fYnVsayhzaXN1c2IsIGFkZHJlc3MsIE5VTEwsCisJCQkJCWNvdW50LCBidWZmZXIsIDAsICZieXRlc193cml0dGVuKTsKKworCQlpZiAoYnl0ZXNfd3JpdHRlbikKKwkJCWVycm5vID0gYnl0ZXNfd3JpdHRlbjsKKworCX0gZWxzZSAgaWYgKCgqcHBvcykgPj0gU0lTVVNCX1BDSV9QU0VVRE9fTU1JT0JBU0UgJiYKKwkJICAgICgqcHBvcykgPCAgU0lTVVNCX1BDSV9QU0VVRE9fTU1JT0JBU0UgKyBTSVNVU0JfUENJX01NSU9TSVpFKSB7CisKKwkJYWRkcmVzcyA9ICgqcHBvcykgLQorCQkJU0lTVVNCX1BDSV9QU0VVRE9fTU1JT0JBU0UgKworCQkJU0lTVVNCX1BDSV9NTUlPQkFTRTsKKworCQkvKiBXcml0ZSBNTUlPLgorCQkgKiBCdWZmZXIgaXMgY29waWVkIDE6MSwgdGhlcmVmb3JlLCBvbiBiaWctZW5kaWFuCisJCSAqIG1hY2hpbmVzLCB0aGUgZGF0YSBtdXN0IGJlIHN3YXBwZWQgYnkgdXNlcmxhbmQKKwkJICogaW4gYWR2YW5jZS4KKwkJICovCisJCWVycm5vID0gc2lzdXNiX3dyaXRlX21lbV9idWxrKHNpc3VzYiwgYWRkcmVzcywgTlVMTCwKKwkJCQkJY291bnQsIGJ1ZmZlciwgMCwgJmJ5dGVzX3dyaXR0ZW4pOworCisJCWlmIChieXRlc193cml0dGVuKQorCQkJZXJybm8gPSBieXRlc193cml0dGVuOworCisJfSBlbHNlICBpZiAoKCpwcG9zKSA+PSBTSVNVU0JfUENJX1BTRVVET19QQ0lCQVNFICYmCisJCSAgICAoKnBwb3MpIDw9IFNJU1VTQl9QQ0lfUFNFVURPX1BDSUJBU0UgKyBTSVNVU0JfUENJX1BDT05GU0laRSkgeworCisJCWlmIChjb3VudCAhPSA0KSB7CisJCQl1cCgmc2lzdXNiLT5sb2NrKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJYWRkcmVzcyA9ICgqcHBvcykgLSBTSVNVU0JfUENJX1BTRVVET19QQ0lCQVNFOworCisJCS8qIFdyaXRlIFBDSSBjb25maWcgcmVnaXN0ZXIuCisJCSAqIEdpdmVuIHZhbHVlIGV4cGVjdGVkIGluIG1hY2hpbmUgZW5kaWFubmVzcy4KKwkJICovCisJCWlmIChnZXRfdXNlcihidWYzMiwgKHUzMiBfX3VzZXIgKilidWZmZXIpKQorCQkJZXJybm8gPSAtRUZBVUxUOworCQllbHNlIGlmIChzaXN1c2Jfd3JpdGVfcGNpX2NvbmZpZyhzaXN1c2IsIGFkZHJlc3MsIGJ1ZjMyKSkKKwkJCWVycm5vID0gLUVJTzsKKwkJZWxzZQorCQkJYnl0ZXNfd3JpdHRlbiA9IDQ7CisKKworCX0gZWxzZSB7CisKKwkJLyogRXJyb3IgKi8KKwkJZXJybm8gPSAtRUJBREZEOworCisJfQorCisJKCpwcG9zKSArPSBieXRlc193cml0dGVuOworCisJdXAoJnNpc3VzYi0+bG9jayk7CisKKwlyZXR1cm4gZXJybm8gPyBlcnJubyA6IGJ5dGVzX3dyaXR0ZW47Cit9CisKK3N0YXRpYyBsb2ZmX3QKK3Npc3VzYl9sc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWcpCit7CisJc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiOworCWxvZmZfdCByZXQ7CisKKwlpZiAoIShzaXN1c2IgPSAoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqKWZpbGUtPnByaXZhdGVfZGF0YSkpCisJCXJldHVybiAtRU5PREVWOworCisJZG93bigmc2lzdXNiLT5sb2NrKTsKKworCS8qIFNhbml0eSBjaGVjayAqLworCWlmICghc2lzdXNiLT5wcmVzZW50IHx8ICFzaXN1c2ItPnJlYWR5IHx8ICFzaXN1c2ItPnNpc3VzYl9kZXYpIHsKKwkJdXAoJnNpc3VzYi0+bG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXN3aXRjaCAob3JpZykgeworCQljYXNlIDA6CisJCQlmaWxlLT5mX3BvcyA9IG9mZnNldDsKKwkJCXJldCA9IGZpbGUtPmZfcG9zOworCQkJLyogbmV2ZXIgbmVnYXRpdmUsIG5vIGZvcmNlX3N1Y2Nlc3NmdWxfc3lzY2FsbCBuZWVkZWQgKi8KKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlmaWxlLT5mX3BvcyArPSBvZmZzZXQ7CisJCQlyZXQgPSBmaWxlLT5mX3BvczsKKwkJCS8qIG5ldmVyIG5lZ2F0aXZlLCBubyBmb3JjZV9zdWNjZXNzZnVsX3N5c2NhbGwgbmVlZGVkICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIHNlZWtpbmcgcmVsYXRpdmUgdG8gImVuZCBvZiBmaWxlIiBpcyBub3Qgc3VwcG9ydGVkICovCisJCQlyZXQgPSAtRUlOVkFMOworCX0KKworCXVwKCZzaXN1c2ItPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9oYW5kbGVfY29tbWFuZChzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2IsIHN0cnVjdCBzaXN1c2JfY29tbWFuZCAqeSwKKwkJCQkJCQl1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgCXJldHZhbCwgcG9ydCwgbGVuZ3RoOworCXUzMglhZGRyZXNzOworCisJcG9ydCA9IHktPmRhdGEzIC0KKwkJU0lTVVNCX1BDSV9QU0VVRE9fSU9QT1JUQkFTRSArCisJCVNJU1VTQl9QQ0lfSU9QT1JUQkFTRTsKKworCXN3aXRjaCAoeS0+b3BlcmF0aW9uKSB7CisJCWNhc2UgU1VDTURfR0VUOgorCQkJcmV0dmFsID0gc2lzdXNiX2dldGlkeHJlZyhzaXN1c2IsIHBvcnQsCisJCQkJCQkJIHktPmRhdGEwLCAmeS0+ZGF0YTEpOworCQkJaWYgKCFyZXR2YWwpIHsKKwkJCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgeSwKKwkJCQkJCQlzaXplb2YoKnkpKSkKKwkJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgU1VDTURfU0VUOgorCQkJcmV0dmFsID0gc2lzdXNiX3NldGlkeHJlZyhzaXN1c2IsIHBvcnQsCisJCQkJCQl5LT5kYXRhMCwgeS0+ZGF0YTEpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVUNNRF9TRVRPUjoKKwkJCXJldHZhbCA9IHNpc3VzYl9zZXRpZHhyZWdvcihzaXN1c2IsIHBvcnQsCisJCQkJCQl5LT5kYXRhMCwgeS0+ZGF0YTEpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVUNNRF9TRVRBTkQ6CisJCQlyZXR2YWwgPSBzaXN1c2Jfc2V0aWR4cmVnYW5kKHNpc3VzYiwgcG9ydCwKKwkJCQkJCXktPmRhdGEwLCB5LT5kYXRhMSk7CisJCQlicmVhazsKKworCQljYXNlIFNVQ01EX1NFVEFORE9SOgorCQkJcmV0dmFsID0gc2lzdXNiX3NldGlkeHJlZ2FuZG9yKHNpc3VzYiwgcG9ydCwKKwkJCQkJCXktPmRhdGEwLCB5LT5kYXRhMSwgeS0+ZGF0YTIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVUNNRF9TRVRNQVNLOgorCQkJcmV0dmFsID0gc2lzdXNiX3NldGlkeHJlZ21hc2soc2lzdXNiLCBwb3J0LAorCQkJCQkJeS0+ZGF0YTAsIHktPmRhdGExLCB5LT5kYXRhMik7CisJCQlicmVhazsKKworCQljYXNlIFNVQ01EX0NMUlNDUjoKKwkJCWxlbmd0aCA9ICh5LT5kYXRhMCA8PCAxNikgfCAoeS0+ZGF0YTEgPDwgOCkgfCB5LT5kYXRhMjsKKwkJCWFkZHJlc3MgPSB5LT5kYXRhMyAtCisJCQkJU0lTVVNCX1BDSV9QU0VVRE9fTUVNQkFTRSArCisJCQkJU0lTVVNCX1BDSV9NRU1CQVNFOworCQkJcmV0dmFsID0gc2lzdXNiX2NsZWFyX3ZyYW0oc2lzdXNiLCBhZGRyZXNzLCBsZW5ndGgpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXJldHZhbCA9IC1FSU5WQUw7CisJfQorCisJaWYocmV0dmFsID4gMCkKKwkJcmV0dmFsID0gLUVJTzsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQKK3Npc3VzYl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkgICAgIAkJCQkJCXVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYjsKKwlzdHJ1Y3Qgc2lzdXNiX2luZm8geDsKKwlzdHJ1Y3Qgc2lzdXNiX2NvbW1hbmQgeTsKKwlpbnQgCXJldHZhbCA9IDA7CisJdTMyIF9fdXNlciAqYXJncCA9ICh1MzIgX191c2VyICopYXJnOworCisJaWYgKCEoc2lzdXNiID0gKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRvd24oJnNpc3VzYi0+bG9jayk7CisKKwkvKiBTYW5pdHkgY2hlY2sgKi8KKwlpZiAoIXNpc3VzYi0+cHJlc2VudCB8fCAhc2lzdXNiLT5yZWFkeSB8fCAhc2lzdXNiLT5zaXN1c2JfZGV2KSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlzd2l0Y2ggKGNtZCkgeworCisJCWNhc2UgU0lTVVNCX0dFVF9DT05GSUdfU0laRToKKworCQkJaWYgKHB1dF91c2VyKHNpemVvZih4KSwgYXJncCkpCisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKworCQkJYnJlYWs7CisKKwkJY2FzZSBTSVNVU0JfR0VUX0NPTkZJRzoKKworCQkJeC5zaXN1c2JfaWQgICAJICAgID0gU0lTVVNCX0lEOworCQkJeC5zaXN1c2JfdmVyc2lvbiAgICA9IFNJU1VTQl9WRVJTSU9OOworCQkJeC5zaXN1c2JfcmV2aXNpb24gICA9IFNJU1VTQl9SRVZJU0lPTjsKKwkJCXguc2lzdXNiX3BhdGNobGV2ZWwgPSBTSVNVU0JfUEFUQ0hMRVZFTDsKKwkJCXguc2lzdXNiX2dmeGluaXQgICAgPSBzaXN1c2ItPmdmeGluaXQ7CisJCQl4LnNpc3VzYl92cmFtYmFzZSAgID0gU0lTVVNCX1BDSV9QU0VVRE9fTUVNQkFTRTsKKwkJCXguc2lzdXNiX21taW9iYXNlICAgPSBTSVNVU0JfUENJX1BTRVVET19NTUlPQkFTRTsKKwkJCXguc2lzdXNiX2lvYmFzZSAgICAgPSBTSVNVU0JfUENJX1BTRVVET19JT1BPUlRCQVNFOworCQkJeC5zaXN1c2JfcGNpYmFzZSAgICA9IFNJU1VTQl9QQ0lfUFNFVURPX1BDSUJBU0U7CisJCQl4LnNpc3VzYl92cmFtc2l6ZSAgID0gc2lzdXNiLT52cmFtc2l6ZTsKKwkJCXguc2lzdXNiX21pbm9yCSAgICA9IHNpc3VzYi0+bWlub3I7CisJCQl4LnNpc3VzYl9mYmRldmFjdGl2ZT0gMDsKKworCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZ4LCBzaXplb2YoeCkpKQorCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisKKwkJCWJyZWFrOworCisJCWNhc2UgU0lTVVNCX0NPTU1BTkQ6CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmeSwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoeSkpKQorCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQllbHNlCisJCQkJcmV0dmFsID0gc2lzdXNiX2hhbmRsZV9jb21tYW5kKHNpc3VzYiwgJnksIGFyZyk7CisKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJfQorCitlcnJfb3V0OgorCXVwKCZzaXN1c2ItPmxvY2spOworCXJldHVybiByZXR2YWw7Cit9CisKKyNpZmRlZiBTSVNVU0JfTkVXX0NPTkZJR19DT01QQVQKK3N0YXRpYyBsb25nCitzaXN1c2JfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlsb25nIHJldHZhbDsKKworCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgU0lTVVNCX0dFVF9DT05GSUdfU0laRToKKwkJY2FzZSBTSVNVU0JfR0VUX0NPTkZJRzoKKwkJY2FzZSBTSVNVU0JfQ09NTUFORDoKKwkJCWxvY2tfa2VybmVsKCk7CisJCQlyZXR2YWwgPSBzaXN1c2JfaW9jdGwoZi0+Zl9kZW50cnktPmRfaW5vZGUsIGYsIGNtZCwgYXJnKTsKKwkJCXVubG9ja19rZXJuZWwoKTsKKwkJCXJldHVybiByZXR2YWw7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYl9zaXN1c2JfZm9wcyA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkub3BlbiA9CQlzaXN1c2Jfb3BlbiwKKwkucmVsZWFzZSA9CXNpc3VzYl9yZWxlYXNlLAorCS5yZWFkID0JCXNpc3VzYl9yZWFkLAorCS53cml0ZSA9CXNpc3VzYl93cml0ZSwKKwkubGxzZWVrID0gCXNpc3VzYl9sc2VlaywKKyNpZmRlZiBTSVNVU0JfTkVXX0NPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsID0gc2lzdXNiX2NvbXBhdF9pb2N0bCwKKyNlbmRpZgorCS5pb2N0bCA9CXNpc3VzYl9pb2N0bAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIHVzYl9zaXN1c2JfY2xhc3MgPSB7CisJLm5hbWUgPQkJInVzYi9zaXN1c2J2Z2ElZCIsCisJLmZvcHMgPQkJJnVzYl9zaXN1c2JfZm9wcywKKwkubW9kZSA9CQlTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dSUCwKKwkubWlub3JfYmFzZSA9CVNJU1VTQl9NSU5PUgorfTsKKworc3RhdGljIGludCBzaXN1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiOworCWludCByZXR2YWwgPSAwLCBpOworCWNvbnN0IGNoYXIgKm1lbWZhaWwgPQorCQlLRVJOX0VSUgorCQkic2lzdXNidmdhWyVkXTogRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgJXMgYnVmZmVyXG4iOworCisJcHJpbnRrKEtFUk5fSU5GTyAic2lzdXNiOiBVU0IyVkdBIGRvbmdsZSBmb3VuZCBhdCBhZGRyZXNzICVkXG4iLAorCQlkZXYtPmRldm51bSk7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBwcml2YXRlICovCisJaWYgKCEoc2lzdXNiID0ga21hbGxvYyhzaXplb2YoKnNpc3VzYiksIEdGUF9LRVJORUwpKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJzaXN1c2I6IEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHByaXZhdGUgZGF0YVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQoc2lzdXNiLCAwLCBzaXplb2YoKnNpc3VzYikpOworCWtyZWZfaW5pdCgmc2lzdXNiLT5rcmVmKTsKKworCWluaXRfTVVURVgoJihzaXN1c2ItPmxvY2spKTsKKworCS8qIFJlZ2lzdGVyIGRldmljZSAqLworCWlmICgocmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCAmdXNiX3Npc3VzYl9jbGFzcykpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJInNpc3VzYjogRmFpbGVkIHRvIGdldCBhIG1pbm9yIGZvciBkZXZpY2UgJWRcbiIsCisJCQlkZXYtPmRldm51bSk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3JfMTsKKwl9CisKKwlzaXN1c2ItPnNpc3VzYl9kZXYgPSBkZXY7CisJc2lzdXNiLT5taW5vciAgICAgID0gaW50Zi0+bWlub3I7CisJc2lzdXNiLT52cmFtYmFzZSAgID0gU0lTVVNCX1BDSV9NRU1CQVNFOworCXNpc3VzYi0+bW1pb2Jhc2UgICA9IFNJU1VTQl9QQ0lfTU1JT0JBU0U7CisJc2lzdXNiLT5tbWlvc2l6ZSAgID0gU0lTVVNCX1BDSV9NTUlPU0laRTsKKwlzaXN1c2ItPmlvcG9ydGJhc2UgPSBTSVNVU0JfUENJX0lPUE9SVEJBU0U7CisJLyogRXZlcnl0aGluZyBlbHNlIGlzIHplcm8gKi8KKworCS8qIEFsbG9jYXRlIGJ1ZmZlcnMgKi8KKwlzaXN1c2ItPmlidWZzaXplID0gU0lTVVNCX0lCVUZfU0laRTsKKwlpZiAoIShzaXN1c2ItPmlidWYgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgU0lTVVNCX0lCVUZfU0laRSwKKwkJCQkJR0ZQX0tFUk5FTCwgJnNpc3VzYi0+dHJhbnNmZXJfZG1hX2luKSkpIHsKKwkJcHJpbnRrKG1lbWZhaWwsICJpbnB1dCIsIHNpc3VzYi0+bWlub3IpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yXzI7CisJfQorCisJc2lzdXNiLT5udW1vYnVmcyA9IDA7CisJc2lzdXNiLT5vYnVmc2l6ZSA9IFNJU1VTQl9PQlVGX1NJWkU7CisJZm9yIChpID0gMDsgaSA8IE5VTU9CVUZTOyBpKyspIHsKKwkJaWYgKCEoc2lzdXNiLT5vYnVmW2ldID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYsIFNJU1VTQl9PQlVGX1NJWkUsCisJCQkJCUdGUF9LRVJORUwsCisJCQkJCSZzaXN1c2ItPnRyYW5zZmVyX2RtYV9vdXRbaV0pKSkgeworCQkJaWYgKGkgPT0gMCkgeworCQkJCXByaW50ayhtZW1mYWlsLCAib3V0cHV0Iiwgc2lzdXNiLT5taW5vcik7CisJCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCQlnb3RvIGVycm9yXzM7CisJCQl9CisJCQlicmVhazsKKwkJfSBlbHNlCisJCQlzaXN1c2ItPm51bW9idWZzKys7CisKKwl9CisKKwkvKiBBbGxvY2F0ZSBVUkJzICovCisJaWYgKCEoc2lzdXNiLT5zaXN1cmJpbiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCkpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJInNpc3VzYnZnYVslZF06IEZhaWxlZCB0byBhbGxvY2F0ZSBVUkJzXG4iLAorCQkJc2lzdXNiLT5taW5vcik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3JfMzsKKwl9CisJc2lzdXNiLT5jb21wbGV0ZWluID0gMTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXN1c2ItPm51bW9idWZzOyBpKyspIHsKKwkJaWYgKCEoc2lzdXNiLT5zaXN1cmJvdXRbaV0gPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJInNpc3VzYnZnYVslZF06IEZhaWxlZCB0byBhbGxvY2F0ZSBVUkJzXG4iLAorCQkJCXNpc3VzYi0+bWlub3IpOworCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyb3JfNDsKKwkJfQorCQlzaXN1c2ItPnVyYm91dF9jb250ZXh0W2ldLnNpc3VzYiA9ICh2b2lkICopc2lzdXNiOworCQlzaXN1c2ItPnVyYm91dF9jb250ZXh0W2ldLnVyYmluZGV4ID0gaTsKKwkJc2lzdXNiLT51cmJzdGF0dXNbaV0gPSAwOworCX0KKworCXByaW50ayhLRVJOX0lORk8gInNpc3VzYnZnYVslZF06IEFsbG9jYXRlZCAlZCBvdXRwdXQgYnVmZmVyc1xuIiwKKwkJCQkJc2lzdXNiLT5taW5vciwgc2lzdXNiLT5udW1vYnVmcyk7CisKKwkvKiBEbyByZW1haW5pbmcgaW5pdCBzdHVmZiAqLworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmc2lzdXNiLT53YWl0X3EpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBzaXN1c2IpOworCisjaWZkZWYgU0lTVVNCX09MRF9DT05GSUdfQ09NUEFUCisJeworCWludCByZXQ7CisJLyogT3VyIGlvY3RscyBhcmUgYWxsICIzMi82NGJpdCBjb21wYXRpYmxlIiAqLworCXJldCA9ICByZWdpc3Rlcl9pb2N0bDMyX2NvbnZlcnNpb24oU0lTVVNCX0dFVF9DT05GSUdfU0laRSwgTlVMTCk7CisJcmV0IHw9IHJlZ2lzdGVyX2lvY3RsMzJfY29udmVyc2lvbihTSVNVU0JfR0VUX0NPTkZJRywgICAgICBOVUxMKTsKKwlyZXQgfD0gcmVnaXN0ZXJfaW9jdGwzMl9jb252ZXJzaW9uKFNJU1VTQl9DT01NQU5ELCAgICAgICAgIE5VTEwpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUgorCQkJInNpc3VzYnZnYVslZF06IEVycm9yIHJlZ2lzdGVyaW5nIGlvY3RsMzIgIgorCQkJInRyYW5zbGF0aW9uc1xuIiwKKwkJCXNpc3VzYi0+bWlub3IpOworCWVsc2UKKwkJc2lzdXNiLT5pb2N0bDMycmVnaXN0ZXJlZCA9IDE7CisKKwl9CisjZW5kaWYKKworCXNpc3VzYi0+cHJlc2VudCA9IDE7CisKKwlpZiAoZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgeworCQlpZiAoc2lzdXNiX2luaXRfZ2Z4ZGV2aWNlKHNpc3VzYiwgMSkpCisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkic2lzdXNidmdhWyVkXTogRmFpbGVkIHRvIGVhcmx5ICIKKwkJCQkiaW5pdGlhbGl6ZSBkZXZpY2VcbiIsCisJCQkJc2lzdXNiLT5taW5vcik7CisKKwl9IGVsc2UKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJInNpc3VzYnZnYVslZF06IE5vdCBhdHRhY2hlZCB0byBVU0IgMi4wIGh1YiwgIgorCQkJImRlZmVycmluZyBpbml0XG4iLAorCQkJc2lzdXNiLT5taW5vcik7CisKKwlzaXN1c2ItPnJlYWR5ID0gMTsKKworCXJldHVybiAwOworCitlcnJvcl80OgorCXNpc3VzYl9mcmVlX3VyYnMoc2lzdXNiKTsKK2Vycm9yXzM6CisJc2lzdXNiX2ZyZWVfYnVmZmVycyhzaXN1c2IpOworZXJyb3JfMjoKKwl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZiwgJnVzYl9zaXN1c2JfY2xhc3MpOworZXJyb3JfMToKKwlrZnJlZShzaXN1c2IpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHNpc3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKnNpc3VzYjsKKwlpbnQgbWlub3I7CisKKwlkb3duKCZkaXNjb25uZWN0X3NlbSk7CisKKwkvKiBUaGlzIHNob3VsZCAqbm90KiBoYXBwZW4gKi8KKwlpZiAoIShzaXN1c2IgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpKSkgeworCQl1cCgmZGlzY29ubmVjdF9zZW0pOworCQlyZXR1cm47CisJfQorCisJZG93bigmc2lzdXNiLT5sb2NrKTsKKworCS8qIFdhaXQgZm9yIGFsbCBVUkJzIHRvIGNvbXBsZXRlIGFuZCBraWxsIHRoZW0gaW4gY2FzZSAoTVVTVCBkbykgKi8KKwlpZiAoIXNpc3VzYl93YWl0X2FsbF9vdXRfY29tcGxldGUoc2lzdXNiKSkKKwkJc2lzdXNiX2tpbGxfYWxsX2J1c3koc2lzdXNiKTsKKworCW1pbm9yID0gc2lzdXNiLT5taW5vcjsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisKKwl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZiwgJnVzYl9zaXN1c2JfY2xhc3MpOworCisjaWZkZWYgU0lTVVNCX09MRF9DT05GSUdfQ09NUEFUCisJaWYgKHNpc3VzYi0+aW9jdGwzMnJlZ2lzdGVyZWQpIHsKKwkJaW50IHJldDsKKwkJc2lzdXNiLT5pb2N0bDMycmVnaXN0ZXJlZCA9IDA7CisJCXJldCA9ICB1bnJlZ2lzdGVyX2lvY3RsMzJfY29udmVyc2lvbihTSVNVU0JfR0VUX0NPTkZJR19TSVpFKTsKKwkJcmV0IHw9IHVucmVnaXN0ZXJfaW9jdGwzMl9jb252ZXJzaW9uKFNJU1VTQl9HRVRfQ09ORklHKTsKKwkJcmV0IHw9IHVucmVnaXN0ZXJfaW9jdGwzMl9jb252ZXJzaW9uKFNJU1VTQl9DT01NQU5EKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJInNpc3VzYnZnYVslZF06IEVycm9yIHVucmVnaXN0ZXJpbmcgIgorCQkJCSJpb2N0bDMyIHRyYW5zbGF0aW9uc1xuIiwKKwkJCQltaW5vcik7CisJCX0KKwl9CisjZW5kaWYKKworCXNpc3VzYi0+cHJlc2VudCA9IDA7CisJc2lzdXNiLT5yZWFkeSA9IDA7CisKKwl1cCgmc2lzdXNiLT5sb2NrKTsKKworCS8qIGRlY3JlbWVudCBvdXIgdXNhZ2UgY291bnQgKi8KKwlrcmVmX3B1dCgmc2lzdXNiLT5rcmVmLCBzaXN1c2JfZGVsZXRlKTsKKworCXVwKCZkaXNjb25uZWN0X3NlbSk7CisKKwlwcmludGsoS0VSTl9JTkZPICJzaXN1c2J2Z2FbJWRdOiBEaXNjb25uZWN0ZWRcbiIsIG1pbm9yKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHNpc3VzYl90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoMHgwNzExLCAweDA5MDApIH0sCisJeyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHNpc3VzYl90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzaXN1c2JfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJzaXN1c2IiLAorCS5wcm9iZSA9CXNpc3VzYl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXNpc3VzYl9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CXNpc3VzYl90YWJsZQorfTsKKworc3RhdGljIGludCBfX2luaXQgdXNiX3Npc3VzYl9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCWlmICghKHJldHZhbCA9IHVzYl9yZWdpc3Rlcigmc2lzdXNiX2RyaXZlcikpKSB7CisJCXByaW50ayhLRVJOX0lORk8gInNpc3VzYjogRHJpdmVyIHZlcnNpb24gJWQuJWQuJWRcbiIsCisJCQlTSVNVU0JfVkVSU0lPTiwgU0lTVVNCX1JFVklTSU9OLCBTSVNVU0JfUEFUQ0hMRVZFTCk7CisJCXByaW50ayhLRVJOX0lORk8KKwkJCSJzaXN1c2I6IENvcHlyaWdodCAoQykgMjAwNSBUaG9tYXMgV2luaXNjaGhvZmVyXG4iKTsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3Npc3VzYl9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNpc3VzYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1c2Jfc2lzdXNiX2luaXQpOworbW9kdWxlX2V4aXQodXNiX3Npc3VzYl9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiVGhvbWFzIFdpbmlzY2hob2ZlciA8dGhvbWFzQHdpbmlzY2hob2Zlci5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oInNpc3VzYiAtIERyaXZlciBmb3IgTmV0MjI4MC9TaVMzMTUtYmFzZWQgVVNCMlZHQSBkb25nbGVzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5oIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMwNmQwMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5oCkBAIC0wLDAgKzEsMjc4IEBACisvKgorICogc2lzdXNiIC0gdXNiIGtlcm5lbCBkcml2ZXIgZm9yIE5ldDIyODAvU2lTMzE1IGJhc2VkIFVTQjJWR0EgZG9uZ2xlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBieSBUaG9tYXMgV2luaXNjaGhvZmVyLCBWaWVubmEsIEF1c3RyaWEKKyAqCisgKiBJZiBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwsIHRoaXMgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBHUEwgdjIuCisgKgorICogT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgdGVybXMgYXBwbHk6CisgKgorICogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiAqIGFyZSBtZXQ6CisgKiAqIDEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICogMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogKiAzKSBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAqCisgKiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IKKyAqICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIEF1dGhvcjogCVRob21hcyBXaW5pc2NoaG9mZXIgPHRob21hc0B3aW5pc2NoaG9mZXIubmV0PgorICoKKyAqLworCisjaWZuZGVmIF9TSVNVU0JfSF8KKyNkZWZpbmUgX1NJU1VTQl9IXworCisjaWZkZWYgQ09ORklHX0NPTVBBVAorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSBLRVJORUxfVkVSU0lPTigyLDYsMTApCisjaW5jbHVkZSA8bGludXgvaW9jdGwzMi5oPgorI2RlZmluZSBTSVNVU0JfT0xEX0NPTkZJR19DT01QQVQKKyNlbHNlCisjZGVmaW5lIFNJU1VTQl9ORVdfQ09ORklHX0NPTVBBVAorI2VuZGlmCisjZW5kaWYKKworLyogVmVyc2lvbiBJbmZvcm1hdGlvbiAqLworCisjZGVmaW5lIFNJU1VTQl9WRVJTSU9OCQkwCisjZGVmaW5lIFNJU1VTQl9SRVZJU0lPTiAJMAorI2RlZmluZSBTSVNVU0JfUEFUQ0hMRVZFTAk3CisKKy8qIFVTQiByZWxhdGVkICovCisKKyNkZWZpbmUgU0lTVVNCX01JTk9SCTEzMwkJLyogRklYTUUgKi8KKworLyogU2l6ZSBvZiB0aGUgc2lzdXNiIGlucHV0L291dHB1dCBidWZmZXJzICovCisjZGVmaW5lIFNJU1VTQl9JQlVGX1NJWkUgIDB4MDEwMDAKKyNkZWZpbmUgU0lTVVNCX09CVUZfU0laRSAgMHgxMDAwMAkvKiBmaXhlZCAqLworCisjZGVmaW5lIE5VTU9CVUZTIDgJCQkvKiBtYXggbnVtYmVyIG9mIG91dHB1dCBidWZmZXJzL291dHB1dCBVUkJzICovCisKKy8qIEFib3V0IGVuZGlhbm5lc3M6CisgKgorICogMSkgSS9PIHBvcnRzLCBQQ0kgY29uZmlnIHJlZ2lzdGVycy4gVGhlIHJlYWQvd3JpdGUoKQorICogICAgY2FsbHMgZW11bGF0ZSBpblgvb3V0WC4gSGVuY2UsIHRoZSBkYXRhIGlzCisgKiAgICBleHBlY3RlZC9kZWxpdmVyZWQgaW4gbWFjaGluZSBlbmRpYW5uZXMgYnkgdGhpcworICogICAgZHJpdmVyLgorICogMikgVmlkZW8gbWVtb3J5LiBUaGUgZGF0YSBpcyBjb3BpZWQgMToxLiBUaGVyZSBpcworICogICAgbm8gc3dhcHBpbmcuIEV2ZXIuIFRoaXMgbWVhbnMgZm9yIHVzZXJsYW5kIHRoYXQKKyAqICAgIHRoZSBkYXRhIGhhcyB0byBiZSBwcmVwYXJlZCBwcm9wZXJseS4gKEhpbnQ6CisgKiAgICB0aGluayBncmFwaGljcyBkYXRhIGZvcm1hdCwgY29tbWFuZCBxdWV1ZSwKKyAqICAgIGhhcmR3YXJlIGN1cnNvci4pCisgKiAzKSBNTUlPLiBEYXRhIGlzIGNvcGllZCAxOjEuIE1NSU8gbXVzdCBiZSBzd2FwcGVkCisgKiAgICBwcm9wZXJseSBieSB1c2VybGFuZC4KKyAqCisgKi8KKworI2lmZGVmIF9fQklHX0VORElBTgorI2RlZmluZSBTSVNVU0JfQ09SUkVDVF9FTkRJQU5ORVNTX1BBQ0tFVChwKSAJCVwKKwlkbyB7CQkJCQkJXAorCQlwLT5oZWFkZXIgID0gY3B1X3RvX2xlMTYocC0+aGVhZGVyKTsJXAorCQlwLT5hZGRyZXNzID0gY3B1X3RvX2xlMzIocC0+YWRkcmVzcyk7CVwKKwkJcC0+ZGF0YSAgICA9IGNwdV90b19sZTMyKHAtPmRhdGEpOwlcCisJfSB3aGlsZSgwKQorI2Vsc2UKKyNkZWZpbmUgU0lTVVNCX0NPUlJFQ1RfRU5ESUFOTkVTU19QQUNLRVQocCkKKyNlbmRpZgorCitzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhOworCitzdHJ1Y3Qgc2lzdXNiX3VyYl9jb250ZXh0IHsJCS8qIHVyYi0+Y29udGV4dCBmb3Igb3V0Ym91bmQgYnVsayBVUkJzICovCisJc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiOworCWludCB1cmJpbmRleDsKKwlpbnQgKmFjdHVhbF9sZW5ndGg7Cit9OworCitzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqc2lzdXNiX2RldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCBrcmVmIGtyZWY7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xOwkvKiBmb3Igc3luY2luZCBhbmQgdGltZW91dHMgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CQkvKiBnZW5lcmFsIHJhY2UgYXZvaWRhbmNlICovCisJdW5zaWduZWQgaW50IGlmbnVtOwkJLyogaW50ZXJmYWNlIG51bWJlciBvZiB0aGUgVVNCIGRldmljZSAqLworCWludCBtaW5vcjsJCQkvKiBtaW5vciAoZm9yIGxvZ2dpbmcgY2xhcml0eSkgKi8KKwlpbnQgaXNvcGVuOwkJCS8qICE9MCBpZiBvcGVuICovCisJaW50IHByZXNlbnQ7CQkJLyogIT0wIGlmIGRldmljZSBpcyBwcmVzZW50IG9uIHRoZSBidXMgKi8KKwlpbnQgcmVhZHk7CQkJLyogIT0wIGlmIGRldmljZSBpcyByZWFkeSBmb3IgdXNlcmxhbmQgKi8KKyNpZmRlZiBTSVNVU0JfT0xEX0NPTkZJR19DT01QQVQKKwlpbnQgaW9jdGwzMnJlZ2lzdGVyZWQ7CisjZW5kaWYKKwlpbnQgbnVtb2J1ZnM7CQkJLyogbnVtYmVyIG9mIG9idWZzID0gbnVtYmVyIG9mIG91dCB1cmJzICovCisJY2hhciAqb2J1ZltOVU1PQlVGU10sICppYnVmOwkvKiB0cmFuc2ZlciBidWZmZXJzICovCisJaW50IG9idWZzaXplLCBpYnVmc2l6ZTsKKwlkbWFfYWRkcl90IHRyYW5zZmVyX2RtYV9vdXRbTlVNT0JVRlNdOworCWRtYV9hZGRyX3QgdHJhbnNmZXJfZG1hX2luOworCXN0cnVjdCB1cmIgKnNpc3VyYm91dFtOVU1PQlVGU107CisJc3RydWN0IHVyYiAqc2lzdXJiaW47CisJdW5zaWduZWQgY2hhciB1cmJzdGF0dXNbTlVNT0JVRlNdOworCXVuc2lnbmVkIGNoYXIgY29tcGxldGVpbjsKKwlzdHJ1Y3Qgc2lzdXNiX3VyYl9jb250ZXh0IHVyYm91dF9jb250ZXh0W05VTU9CVUZTXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdiMDsKKwl1bnNpZ25lZCBsb25nIHZyYW1iYXNlOwkJLyogZnJhbWVidWZmZXIgYmFzZSAqLworCXVuc2lnbmVkIGludCB2cmFtc2l6ZTsJCS8qIGZyYW1lYnVmZmVyIHNpemUgKGJ5dGVzKSAqLworCXVuc2lnbmVkIGxvbmcgbW1pb2Jhc2U7CisJdW5zaWduZWQgaW50IG1taW9zaXplOworCXVuc2lnbmVkIGxvbmcgaW9wb3J0YmFzZTsKKwl1bnNpZ25lZCBjaGFyIGRldmluaXQ7CQkvKiBkZXZpY2UgaW5pdGlhbGl6ZWQ/ICovCisJdW5zaWduZWQgY2hhciBnZnhpbml0OwkJLyogZ3JhcGhpY3MgY29yZSBpbml0aWFsaXplZD8gKi8KKwl1bnNpZ25lZCBzaG9ydCBjaGlwaWQsIGNoaXB2ZW5kb3I7CisJdW5zaWduZWQgc2hvcnQgY2hpcHJldmlzaW9uOworfTsKKworI2RlZmluZSB0b19zaXN1c2JfZGV2KGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhLCBrcmVmKQorCisvKiBVU0IgdHJhbnNwb3J0IHJlbGF0ZWQgKi8KKworLyogdXJic3RhdHVzICovCisjZGVmaW5lIFNVX1VSQl9CVVNZICAgMQorI2RlZmluZSBTVV9VUkJfQUxMT0MgIDIKKworLyogRW5kcG9pbnRzICovCisKKyNkZWZpbmUgU0lTVVNCX0VQX0dGWF9JTgkweDBlCS8qIGdmeCBzdGQgcGFja2V0IG91dCgwZSkvaW4oOGUpICovCisjZGVmaW5lIFNJU1VTQl9FUF9HRlhfT1VUCTB4MGUKKworI2RlZmluZSBTSVNVU0JfRVBfR0ZYX0JVTEtfT1VUCTB4MDEJLyogZ2Z4IG1lbSBidWxrIG91dC9pbiAqLworI2RlZmluZSBTSVNVU0JfRVBfR0ZYX0JVTEtfSU4JMHgwMgkvKiA/IDIgaXMgIk9VVCIgPyAqLworCisjZGVmaW5lIFNJU1VTQl9FUF9HRlhfTEJVTEtfT1VUCTB4MDMJLyogZ2Z4IGxhcmdlIG1lbSBidWxrIG91dCAqLworCisjZGVmaW5lIFNJU1VTQl9FUF9VTktOT1dOXzA0CTB4MDQJLyogPyA0IGlzICJPVVQiID8gLSB1bnVzZWQgKi8KKworI2RlZmluZSBTSVNVU0JfRVBfQlJJREdFX0lOCTB4MGQJLyogTmV0MjI4MCBvdXQoMGQpL2luKDhkKSAqLworI2RlZmluZSBTSVNVU0JfRVBfQlJJREdFX09VVAkweDBkCisKKyNkZWZpbmUgU0lTVVNCX1RZUEVfTUVNCQkwCisjZGVmaW5lIFNJU1VTQl9UWVBFX0lPCQkxCisKK3N0cnVjdCBzaXN1c2JfcGFja2V0IHsKKwl1bnNpZ25lZCBzaG9ydCBoZWFkZXI7CisJdTMyIGFkZHJlc3M7CisJdTMyIGRhdGE7Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworI2RlZmluZSBDTEVBUlBBQ0tFVChwYWNrZXQpIG1lbXNldChwYWNrZXQsIDAsIDEwKQorCisvKiBQQ0kgYnJpZGdlIHJlbGF0ZWQgKi8KKworI2RlZmluZSBTSVNVU0JfUENJX01FTUJBU0UJMHhkMDAwMDAwMAorI2RlZmluZSBTSVNVU0JfUENJX01NSU9CQVNFCTB4ZTQwMDAwMDAKKyNkZWZpbmUgU0lTVVNCX1BDSV9JT1BPUlRCQVNFCTB4MDAwMGQwMDAKKworI2RlZmluZSBTSVNVU0JfUENJX1BTRVVET19NRU1CQVNFCTB4MTAwMDAwMDAKKyNkZWZpbmUgU0lTVVNCX1BDSV9QU0VVRE9fTU1JT0JBU0UJMHgyMDAwMDAwMAorI2RlZmluZSBTSVNVU0JfUENJX1BTRVVET19JT1BPUlRCQVNFCTB4MDAwMGQwMDAKKyNkZWZpbmUgU0lTVVNCX1BDSV9QU0VVRE9fUENJQkFTRQkweDAwMDEwMDAwCisKKyNkZWZpbmUgU0lTVVNCX1BDSV9NTUlPU0laRQkoMTI4KjEwMjQpCisjZGVmaW5lIFNJU1VTQl9QQ0lfUENPTkZTSVpFCTB4NWMKKworLyogZ3JhcGhpY3MgY29yZSByZWxhdGVkICovCisKKyNkZWZpbmUgQVJPRkZTRVQJMHg0MAorI2RlZmluZSBBUlJPRkZTRVQJMHg0MQorI2RlZmluZSBHUk9GRlNFVAkweDRlCisjZGVmaW5lIFNST0ZGU0VUCTB4NDQKKyNkZWZpbmUgQ1JPRkZTRVQJMHg1NAorI2RlZmluZSBNSVNDUk9GRlNFVAkweDRjCisjZGVmaW5lIE1JU0NXT0ZGU0VUCTB4NDIKKyNkZWZpbmUgSU5QVVRTVEFUT0ZGU0VUIDB4NUEKKyNkZWZpbmUgUEFSVDFPRkZTRVQJMHgwNAorI2RlZmluZSBQQVJUMk9GRlNFVAkweDEwCisjZGVmaW5lIFBBUlQzT0ZGU0VUCTB4MTIKKyNkZWZpbmUgUEFSVDRPRkZTRVQJMHgxNAorI2RlZmluZSBQQVJUNU9GRlNFVAkweDE2CisjZGVmaW5lIENBUFRVUkVPRkZTRVQJMHgwMAorI2RlZmluZSBWSURFT09GRlNFVAkweDAyCisjZGVmaW5lIENPTFJFR09GRlNFVAkweDQ4CisjZGVmaW5lIFBFTE1BU0tPRkZTRVQJMHg0NgorI2RlZmluZSBWR0FFTkFCTEUJMHg0MworCisjZGVmaW5lIFNJU0FSCQlTSVNVU0JfUENJX0lPUE9SVEJBU0UgKyBBUk9GRlNFVAorI2RlZmluZSBTSVNBUlIJCVNJU1VTQl9QQ0lfSU9QT1JUQkFTRSArIEFSUk9GRlNFVAorI2RlZmluZSBTSVNHUgkJU0lTVVNCX1BDSV9JT1BPUlRCQVNFICsgR1JPRkZTRVQKKyNkZWZpbmUgU0lTU1IJCVNJU1VTQl9QQ0lfSU9QT1JUQkFTRSArIFNST0ZGU0VUCisjZGVmaW5lIFNJU0NSCQlTSVNVU0JfUENJX0lPUE9SVEJBU0UgKyBDUk9GRlNFVAorI2RlZmluZSBTSVNNSVNDUglTSVNVU0JfUENJX0lPUE9SVEJBU0UgKyBNSVNDUk9GRlNFVAorI2RlZmluZSBTSVNNSVNDVwlTSVNVU0JfUENJX0lPUE9SVEJBU0UgKyBNSVNDV09GRlNFVAorI2RlZmluZSBTSVNJTlBTVEFUCVNJU1VTQl9QQ0lfSU9QT1JUQkFTRSArIElOUFVUU1RBVE9GRlNFVAorI2RlZmluZSBTSVNQQVJUMQlTSVNVU0JfUENJX0lPUE9SVEJBU0UgKyBQQVJUMU9GRlNFVAorI2RlZmluZSBTSVNQQVJUMglTSVNVU0JfUENJX0lPUE9SVEJBU0UgKyBQQVJUMk9GRlNFVAorI2RlZmluZSBTSVNQQVJUMwlTSVNVU0JfUENJX0lPUE9SVEJBU0UgKyBQQVJUM09GRlNFVAorI2RlZmluZSBTSVNQQVJUNAlTSVNVU0JfUENJX0lPUE9SVEJBU0UgKyBQQVJUNE9GRlNFVAorI2RlZmluZSBTSVNQQVJUNQlTSVNVU0JfUENJX0lPUE9SVEJBU0UgKyBQQVJUNU9GRlNFVAorI2RlZmluZSBTSVNDQVAJCVNJU1VTQl9QQ0lfSU9QT1JUQkFTRSArIENBUFRVUkVPRkZTRVQKKyNkZWZpbmUgU0lTVklECQlTSVNVU0JfUENJX0lPUE9SVEJBU0UgKyBWSURFT09GRlNFVAorI2RlZmluZSBTSVNDT0xJRFhSCVNJU1VTQl9QQ0lfSU9QT1JUQkFTRSArIENPTFJFR09GRlNFVCAtIDEKKyNkZWZpbmUgU0lTQ09MSURYCVNJU1VTQl9QQ0lfSU9QT1JUQkFTRSArIENPTFJFR09GRlNFVAorI2RlZmluZSBTSVNDT0xEQVRBCVNJU1VTQl9QQ0lfSU9QT1JUQkFTRSArIENPTFJFR09GRlNFVCArIDEKKyNkZWZpbmUgU0lTQ09MMklEWAlTSVNQQVJUNQorI2RlZmluZSBTSVNDT0wyREFUQQlTSVNQQVJUNSArIDEKKyNkZWZpbmUgU0lTUEVMCQlTSVNVU0JfUENJX0lPUE9SVEJBU0UgKyBQRUxNQVNLT0ZGU0VUCisjZGVmaW5lIFNJU1ZHQUVOCVNJU1VTQl9QQ0lfSU9QT1JUQkFTRSArIFZHQUVOQUJMRQorI2RlZmluZSBTSVNEQUNBCQlTSVNDT0xJRFgKKyNkZWZpbmUgU0lTREFDRAkJU0lTQ09MREFUQQorCisvKiBpb2N0bCByZWxhdGVkICovCisKKy8qIFN0cnVjdHVyZSBhcmd1bWVudCBmb3IgU0lTVVNCX0dFVF9JTkZPIGlvY3RsICAqLworc3RydWN0IHNpc3VzYl9pbmZvIHsKKwlfX3UzMglzaXN1c2JfaWQ7CQkvKiBmb3IgaWRlbnRpZnlpbmcgc2lzdXNiICovCisjZGVmaW5lIFNJU1VTQl9JRCAgMHg1MzQ5NTM1NQkJLyogSWRlbnRpZnkgbXlzZWxmIHdpdGggJ1NJU1UnICovCisJX191OAlzaXN1c2JfdmVyc2lvbjsKKwlfX3U4CXNpc3VzYl9yZXZpc2lvbjsKKwlfX3U4CXNpc3VzYl9wYXRjaGxldmVsOworCV9fdTgJc2lzdXNiX2dmeGluaXQ7CQkvKiBncmFwaGljcyBjb3JlIGluaXRpYWxpemVkPyAqLworCisJX191MzIJc2lzdXNiX3ZyYW1iYXNlOworCV9fdTMyCXNpc3VzYl9tbWlvYmFzZTsKKwlfX3UzMglzaXN1c2JfaW9iYXNlOworCV9fdTMyCXNpc3VzYl9wY2liYXNlOworCisJX191MzIJc2lzdXNiX3ZyYW1zaXplOwkvKiBmcmFtZWJ1ZmZlciBzaXplIGluIGJ5dGVzICovCisKKwlfX3UzMglzaXN1c2JfbWlub3I7CisKKwlfX3UzMiAgIHNpc3VzYl9mYmRldmFjdGl2ZTsJLyogIT0gMCBpZiBmcmFtZWJ1ZmZlciBkZXZpY2UgYWN0aXZlICovCisKKwlfX3U4CXNpc3VzYl9yZXNlcnZlZFszMl07CS8qIGZvciBmdXR1cmUgdXNlICovCit9OworCitzdHJ1Y3Qgc2lzdXNiX2NvbW1hbmQgeworCV9fdTggICBvcGVyYXRpb247CS8qIHNlZSBiZWxvdyAqLworCV9fdTggICBkYXRhMDsJCS8qIG9wZXJhdGlvbiBkZXBlbmRlbnQgKi8KKwlfX3U4ICAgZGF0YTE7CQkvKiBvcGVyYXRpb24gZGVwZW5kZW50ICovCisJX191OCAgIGRhdGEyOwkJLyogb3BlcmF0aW9uIGRlcGVuZGVudCAqLworCV9fdTMyICBkYXRhMzsJCS8qIG9wZXJhdGlvbiBkZXBlbmRlbnQgKi8KKwlfX3UzMiAgZGF0YTQ7CQkvKiBmb3IgZnV0dXJlIHVzZSAqLworfTsKKworI2RlZmluZSBTVUNNRF9HRVQgICAgICAweDAxCS8qIGZvciBhbGw6IGRhdGEwID0gaW5kZXgsIGRhdGEzID0gcG9ydCAqLworI2RlZmluZSBTVUNNRF9TRVQgICAgICAweDAyCS8qIGRhdGExID0gdmFsdWUgKi8KKyNkZWZpbmUgU1VDTURfU0VUT1IgICAgMHgwMwkvKiBkYXRhMSA9IG9yICovCisjZGVmaW5lIFNVQ01EX1NFVEFORCAgIDB4MDQJLyogZGF0YTEgPSBhbmQgKi8KKyNkZWZpbmUgU1VDTURfU0VUQU5ET1IgMHgwNQkvKiBkYXRhMSA9IGFuZCwgZGF0YTIgPSBvciAqLworI2RlZmluZSBTVUNNRF9TRVRNQVNLICAweDA2CS8qIGRhdGExID0gZGF0YSwgZGF0YTIgPSBtYXNrICovCisKKyNkZWZpbmUgU1VDTURfQ0xSU0NSICAgMHgwNwkvKiBkYXRhMDoxOjIgPSBsZW5ndGgsIGRhdGEzID0gYWRkcmVzcyAqLworCisjZGVmaW5lIFNJU1VTQl9DT01NQU5ECQlfSU9XUigweEYzLDB4M0Qsc3RydWN0IHNpc3VzYl9jb21tYW5kKQorI2RlZmluZSBTSVNVU0JfR0VUX0NPTkZJR19TSVpFIAlfSU9SKDB4RjMsMHgzRSxfX3UzMikKKyNkZWZpbmUgU0lTVVNCX0dFVF9DT05GSUcgIAlfSU9SKDB4RjMsMHgzRixzdHJ1Y3Qgc2lzdXNiX2luZm8pCisKKyNlbmRpZiAvKiBTSVNVU0JfSCAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jIGIvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTZhYjMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYwpAQCAtMCwwICsxLDQwNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVVNCTENEIEtlcm5lbCBEcml2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMS4wNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgKEMpIDIwMDUgR2VvcmdlcyBUb3RoIDxnLnRvdGhAZS1iaXoubHU+ICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTC4gU2VlIENPUFlJTkcgaW4gdGhlIHBhY2thZ2UuICAgICAgKgorICogQmFzZWQgb24gdXNiLXNrZWxldG9uLmMgMi4wIGJ5IEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogMjguMDIuMDUgQ29tcGxldGUgcmV3cml0ZSBvZiB0aGUgb3JpZ2luYWwgdXNibGNkLmMgZHJpdmVyLCAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICBiYXNlZCBvbiB1c2Jfc2tlbGV0b24uYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgIFRoaXMgbmV3IGRyaXZlciBhbGxvd3MgbW9yZSB0aGFuIG9uZSBVU0ItTENEIHRvIGJlIGNvbm5lY3RlZCAgICAgKgorICogICAgICAgICAgYW5kIGNvbnRyb2xsZWQsIGF0IG9uY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIlVTQkxDRCBEcml2ZXIgVmVyc2lvbiAxLjA1IgorCisjZGVmaW5lIFVTQkxDRF9NSU5PUgkJMTQ0CisKKyNkZWZpbmUgSU9DVExfR0VUX0hBUkRfVkVSU0lPTgkxCisjZGVmaW5lIElPQ1RMX0dFVF9EUlZfVkVSU0lPTgkyCisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworCXsgLmlkVmVuZG9yID0gMHgxMEQyLCAubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX1ZFTkRPUiwgfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CisKKworc3RydWN0IHVzYl9sY2QgeworCXN0cnVjdCB1c2JfZGV2aWNlICoJdWRldjsJCQkvKiBpbml0OiBwcm9iZV9sY2QgKi8KKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqICBpbnRlcmZhY2U7CQkvKiB0aGUgaW50ZXJmYWNlIGZvciB0aGlzIGRldmljZSAqLworCXVuc2lnbmVkIGNoYXIgKiAgICAgICAgIGJ1bGtfaW5fYnVmZmVyOwkJLyogdGhlIGJ1ZmZlciB0byByZWNlaXZlIGRhdGEgKi8KKwlzaXplX3QJCQlidWxrX2luX3NpemU7CQkvKiB0aGUgc2l6ZSBvZiB0aGUgcmVjZWl2ZSBidWZmZXIgKi8KKwlfX3U4CQkJYnVsa19pbl9lbmRwb2ludEFkZHI7CS8qIHRoZSBhZGRyZXNzIG9mIHRoZSBidWxrIGluIGVuZHBvaW50ICovCisJX191OAkJCWJ1bGtfb3V0X2VuZHBvaW50QWRkcjsJLyogdGhlIGFkZHJlc3Mgb2YgdGhlIGJ1bGsgb3V0IGVuZHBvaW50ICovCisJc3RydWN0IGtyZWYgICAgICAgICAgICAga3JlZjsKK307CisjZGVmaW5lIHRvX2xjZF9kZXYoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1c2JfbGNkLCBrcmVmKQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbGNkX2RyaXZlcjsKKworCitzdGF0aWMgdm9pZCBsY2RfZGVsZXRlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCB1c2JfbGNkICpkZXYgPSB0b19sY2RfZGV2KGtyZWYpOworCisJdXNiX3B1dF9kZXYoZGV2LT51ZGV2KTsKKwlrZnJlZSAoZGV2LT5idWxrX2luX2J1ZmZlcik7CisJa2ZyZWUgKGRldik7Cit9CisKKworc3RhdGljIGludCBsY2Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNiX2xjZCAqZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJaW50IHN1Ym1pbm9yOworCWludCByZXR2YWwgPSAwOworCisJc3VibWlub3IgPSBpbWlub3IoaW5vZGUpOworCisJaW50ZXJmYWNlID0gdXNiX2ZpbmRfaW50ZXJmYWNlKCZsY2RfZHJpdmVyLCBzdWJtaW5vcik7CisJaWYgKCFpbnRlcmZhY2UpIHsKKwkJZXJyICgiVVNCTENEOiAlcyAtIGVycm9yLCBjYW4ndCBmaW5kIGRldmljZSBmb3IgbWlub3IgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgc3VibWlub3IpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWlmICghZGV2KSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBpbmNyZW1lbnQgb3VyIHVzYWdlIGNvdW50IGZvciB0aGUgZGV2aWNlICovCisJa3JlZl9nZXQoJmRldi0+a3JlZik7CisKKwkvKiBzYXZlIG91ciBvYmplY3QgaW4gdGhlIGZpbGUncyBwcml2YXRlIHN0cnVjdHVyZSAqLworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGRldjsKKworZXhpdDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGxjZF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2JfbGNkICpkZXY7CisKKwlkZXYgPSAoc3RydWN0IHVzYl9sY2QgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJaWYgKGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGRlY3JlbWVudCB0aGUgY291bnQgb24gb3VyIGRldmljZSAqLworCWtyZWZfcHV0KCZkZXYtPmtyZWYsIGxjZF9kZWxldGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBsY2RfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB1c2JfbGNkICpkZXY7CisJaW50IHJldHZhbCA9IDA7CisJaW50IGJ5dGVzX3JlYWQ7CisKKwlkZXYgPSAoc3RydWN0IHVzYl9sY2QgKilmaWxlLT5wcml2YXRlX2RhdGE7CisKKwkvKiBkbyBhIGJsb2NraW5nIGJ1bGsgcmVhZCB0byBnZXQgZGF0YSBmcm9tIHRoZSBkZXZpY2UgKi8KKwlyZXR2YWwgPSB1c2JfYnVsa19tc2coZGV2LT51ZGV2LCAKKwkJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShkZXYtPnVkZXYsIGRldi0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAorCQkJICAgICAgZGV2LT5idWxrX2luX2J1ZmZlciwKKwkJCSAgICAgIG1pbihkZXYtPmJ1bGtfaW5fc2l6ZSwgY291bnQpLAorCQkJICAgICAgJmJ5dGVzX3JlYWQsIDEwMDAwKTsKKworCS8qIGlmIHRoZSByZWFkIHdhcyBzdWNjZXNzZnVsLCBjb3B5IHRoZSBkYXRhIHRvIHVzZXJzcGFjZSAqLworCWlmICghcmV0dmFsKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCBkZXYtPmJ1bGtfaW5fYnVmZmVyLCBieXRlc19yZWFkKSkKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCWVsc2UKKwkJCXJldHZhbCA9IGJ5dGVzX3JlYWQ7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBsY2RfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB1c2JfbGNkICpkZXY7CisJdTE2IGJjZERldmljZTsKKwljaGFyIGJ1ZlszMF07CisKKwlkZXYgPSAoc3RydWN0IHVzYl9sY2QgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJaWYgKGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKwkKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgSU9DVExfR0VUX0hBUkRfVkVSU0lPTjoKKwkJYmNkRGV2aWNlID0gbGUxNl90b19jcHUoKGRldi0+dWRldiktPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKKwkJc3ByaW50ZihidWYsIiUxZCUxZC4lMWQlMWQiLAorCQkJKGJjZERldmljZSAmIDB4RjAwMCk+PjEyLAorCQkJKGJjZERldmljZSAmIDB4RjAwKT4+OCwKKwkJCShiY2REZXZpY2UgJiAweEYwKT4+NCwKKwkJCShiY2REZXZpY2UgJiAweEYpKTsKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsYnVmLHN0cmxlbihidWYpKSE9MCkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKwljYXNlIElPQ1RMX0dFVF9EUlZfVkVSU0lPTjoKKwkJc3ByaW50ZihidWYsRFJJVkVSX1ZFUlNJT04pOworCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZyxidWYsc3RybGVuKGJ1ZikpIT0wKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PVFRZOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGNkX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX2xjZCAqZGV2OworCisJZGV2ID0gKHN0cnVjdCB1c2JfbGNkICopdXJiLT5jb250ZXh0OworCisJLyogc3luYy9hc3luYyB1bmxpbmsgZmF1bHRzIGFyZW4ndCBlcnJvcnMgKi8KKwlpZiAodXJiLT5zdGF0dXMgJiYKKwkgICAgISh1cmItPnN0YXR1cyA9PSAtRU5PRU5UIHx8CisJICAgICAgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwKKyAgICAgICAgICAgICAgdXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikpIHsKKwkJZGJnKCJVU0JMQ0Q6ICVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkgICAgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJfQorCisJLyogZnJlZSB1cCBvdXIgYWxsb2NhdGVkIGJ1ZmZlciAqLworCXVzYl9idWZmZXJfZnJlZSh1cmItPmRldiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+dHJhbnNmZXJfZG1hKTsKK30KKworc3RhdGljIHNzaXplX3QgbGNkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIHVzZXJfYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdXNiX2xjZCAqZGV2OworICAgICAgICBpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3QgdXJiICp1cmIgPSBOVUxMOworCWNoYXIgKmJ1ZiA9IE5VTEw7CisJCisJZGV2ID0gKHN0cnVjdCB1c2JfbGNkICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCQorCS8qIHZlcmlmeSB0aGF0IHdlIGFjdHVhbGx5IGhhdmUgc29tZSBkYXRhIHRvIHdyaXRlICovCisJaWYgKGNvdW50ID09IDApCisJCWdvdG8gZXhpdDsKKworCS8qIGNyZWF0ZSBhIHVyYiwgYW5kIGEgYnVmZmVyIGZvciBpdCwgYW5kIGNvcHkgdGhlIGRhdGEgdG8gdGhlIHVyYiAqLworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1cmIpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisJCisJYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYtPnVkZXYsIGNvdW50LCBHRlBfS0VSTkVMLCAmdXJiLT50cmFuc2Zlcl9kbWEpOworCWlmICghYnVmKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCQorCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmZmVyLCBjb3VudCkpIHsKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZ290byBlcnJvcjsKKwl9CisJCisJLyogaW5pdGlhbGl6ZSB0aGUgdXJiIHByb3Blcmx5ICovCisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBkZXYtPnVkZXYsCisJCQkgIHVzYl9zbmRidWxrcGlwZShkZXYtPnVkZXYsIGRldi0+YnVsa19vdXRfZW5kcG9pbnRBZGRyKSwKKwkJCSAgYnVmLCBjb3VudCwgbGNkX3dyaXRlX2J1bGtfY2FsbGJhY2ssIGRldik7CisJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKwkKKwkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgYnVsayBwb3J0ICovCisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0dmFsKSB7CisJCWVycigiVVNCTENEOiAlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJCWdvdG8gZXJyb3I7CisJfQorCQorCS8qIHJlbGVhc2Ugb3VyIHJlZmVyZW5jZSB0byB0aGlzIHVyYiwgdGhlIFVTQiBjb3JlIHdpbGwgZXZlbnR1YWxseSBmcmVlIGl0IGVudGlyZWx5ICovCisJdXNiX2ZyZWVfdXJiKHVyYik7CisKK2V4aXQ6CisJcmV0dXJuIGNvdW50OworCitlcnJvcjoKKwl1c2JfYnVmZmVyX2ZyZWUoZGV2LT51ZGV2LCBjb3VudCwgYnVmLCB1cmItPnRyYW5zZmVyX2RtYSk7CisJdXNiX2ZyZWVfdXJiKHVyYik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGNkX2ZvcHMgPSB7CisgICAgICAgIC5vd25lciA9ICAgICAgICBUSElTX01PRFVMRSwKKyAgICAgICAgLnJlYWQgPSAgICAgICAgIGxjZF9yZWFkLAorICAgICAgICAud3JpdGUgPSAgICAgICAgbGNkX3dyaXRlLAorICAgICAgICAub3BlbiA9ICAgICAgICAgbGNkX29wZW4sCisJLmlvY3RsID0gICAgICAgIGxjZF9pb2N0bCwKKyAgICAgICAgLnJlbGVhc2UgPSAgICAgIGxjZF9yZWxlYXNlLAorfTsKKworLyoKKyAqICAqIHVzYiBjbGFzcyBkcml2ZXIgaW5mbyBpbiBvcmRlciB0byBnZXQgYSBtaW5vciBudW1iZXIgZnJvbSB0aGUgdXNiIGNvcmUsCisgKiAgICogYW5kIHRvIGhhdmUgdGhlIGRldmljZSByZWdpc3RlcmVkIHdpdGggZGV2ZnMgYW5kIHRoZSBkcml2ZXIgY29yZQorICogICAgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciBsY2RfY2xhc3MgPSB7CisgICAgICAgIC5uYW1lID0gICAgICAgICAidXNiL2xjZCVkIiwKKyAgICAgICAgLmZvcHMgPSAgICAgICAgICZsY2RfZm9wcywKKyAgICAgICAgLm1vZGUgPSAgICAgICAgIFNfSUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQIHwgU19JUk9USCwKKyAgICAgICAgLm1pbm9yX2Jhc2UgPSAgIFVTQkxDRF9NSU5PUiwKK307CisKK3N0YXRpYyBpbnQgbGNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2xjZCAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc2l6ZV90IGJ1ZmZlcl9zaXplOworCWludCBpOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbml0aWFsaXplIGl0ICovCisJZGV2ID0ga21hbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWlmIChkZXYgPT0gTlVMTCkgeworCQllcnIoIk91dCBvZiBtZW1vcnkiKTsKKwkJZ290byBlcnJvcjsKKwl9CisJbWVtc2V0KGRldiwgMHgwMCwgc2l6ZW9mKCpkZXYpKTsKKwlrcmVmX2luaXQoJmRldi0+a3JlZik7CisKKwlkZXYtPnVkZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSkpOworCWRldi0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworCisJaWYgKGxlMTZfdG9fY3B1KGRldi0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IDB4MDAwMSkgeworCQl3YXJuKEtFUk5fSU5GTyAiVVNCTENEIG1vZGVsIG5vdCBzdXBwb3J0ZWQuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwkKKwkvKiBzZXQgdXAgdGhlIGVuZHBvaW50IGluZm9ybWF0aW9uICovCisJLyogdXNlIG9ubHkgdGhlIGZpcnN0IGJ1bGstaW4gYW5kIGJ1bGstb3V0IGVuZHBvaW50cyAqLworCWlmYWNlX2Rlc2MgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworCWZvciAoaSA9IDA7IGkgPCBpZmFjZV9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7ICsraSkgeworCQllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjOworCisJCWlmICghZGV2LT5idWxrX2luX2VuZHBvaW50QWRkciAmJgorCQkgICAgKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgJiYKKwkJICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQorCQkJCQk9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSkgeworCQkJLyogd2UgZm91bmQgYSBidWxrIGluIGVuZHBvaW50ICovCisJCQlidWZmZXJfc2l6ZSA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7CisJCQlkZXYtPmJ1bGtfaW5fc2l6ZSA9IGJ1ZmZlcl9zaXplOworCQkJZGV2LT5idWxrX2luX2VuZHBvaW50QWRkciA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQkJZGV2LT5idWxrX2luX2J1ZmZlciA9IGttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQkJaWYgKCFkZXYtPmJ1bGtfaW5fYnVmZmVyKSB7CisJCQkJZXJyKCJDb3VsZCBub3QgYWxsb2NhdGUgYnVsa19pbl9idWZmZXIiKTsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCQl9CisKKwkJaWYgKCFkZXYtPmJ1bGtfb3V0X2VuZHBvaW50QWRkciAmJgorCQkgICAgIShlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pICYmCisJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKKwkJCQkJPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykpIHsKKwkJCS8qIHdlIGZvdW5kIGEgYnVsayBvdXQgZW5kcG9pbnQgKi8KKwkJCWRldi0+YnVsa19vdXRfZW5kcG9pbnRBZGRyID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCX0KKwl9CisJaWYgKCEoZGV2LT5idWxrX2luX2VuZHBvaW50QWRkciAmJiBkZXYtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcikpIHsKKwkJZXJyKCJDb3VsZCBub3QgZmluZCBib3RoIGJ1bGstaW4gYW5kIGJ1bGstb3V0IGVuZHBvaW50cyIpOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIHNhdmUgb3VyIGRhdGEgcG9pbnRlciBpbiB0aGlzIGludGVyZmFjZSBkZXZpY2UgKi8KKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgZGV2KTsKKworCS8qIHdlIGNhbiByZWdpc3RlciB0aGUgZGV2aWNlIG5vdywgYXMgaXQgaXMgcmVhZHkgKi8KKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGVyZmFjZSwgJmxjZF9jbGFzcyk7CisJaWYgKHJldHZhbCkgeworCQkvKiBzb21ldGhpbmcgcHJldmVudGVkIHVzIGZyb20gcmVnaXN0ZXJpbmcgdGhpcyBkcml2ZXIgKi8KKwkJZXJyKCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuIik7CisJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpID0gbGUxNl90b19jcHUoZGV2LT51ZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisKKwlpbmZvKCJVU0JMQ0QgVmVyc2lvbiAlMWQlMWQuJTFkJTFkIGZvdW5kIGF0IGFkZHJlc3MgJWQiLAorCQkoaSAmIDB4RjAwMCk+PjEyLChpICYgMHhGMDApPj44LChpICYgMHhGMCk+PjQsKGkgJiAweEYpLAorCQlkZXYtPnVkZXYtPmRldm51bSk7CisKKwkvKiBsZXQgdGhlIHVzZXIga25vdyB3aGF0IG5vZGUgdGhpcyBkZXZpY2UgaXMgbm93IGF0dGFjaGVkIHRvICovCisJaW5mbygiVVNCIExDRCBkZXZpY2Ugbm93IGF0dGFjaGVkIHRvIFVTQkxDRC0lZCIsIGludGVyZmFjZS0+bWlub3IpOworCXJldHVybiAwOworCitlcnJvcjoKKwlpZiAoZGV2KQorCQlrcmVmX3B1dCgmZGV2LT5rcmVmLCBsY2RfZGVsZXRlKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBsY2RfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfbGNkICpkZXY7CisgICAgICAgIGludCBtaW5vciA9IGludGVyZmFjZS0+bWlub3I7CisKKyAgICAgICAgLyogcHJldmVudCBza2VsX29wZW4oKSBmcm9tIHJhY2luZyBza2VsX2Rpc2Nvbm5lY3QoKSAqLworICAgICAgICBsb2NrX2tlcm5lbCgpOworCisgICAgICAgIGRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKyAgICAgICAgdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCisgICAgICAgIC8qIGdpdmUgYmFjayBvdXIgbWlub3IgKi8KKyAgICAgICAgdXNiX2RlcmVnaXN0ZXJfZGV2KGludGVyZmFjZSwgJmxjZF9jbGFzcyk7CisgCisJdW5sb2NrX2tlcm5lbCgpOworCisJLyogZGVjcmVtZW50IG91ciB1c2FnZSBjb3VudCAqLworCWtyZWZfcHV0KCZkZXYtPmtyZWYsIGxjZF9kZWxldGUpOworCisJaW5mbygiVVNCIExDRCAjJWQgbm93IGRpc2Nvbm5lY3RlZCIsIG1pbm9yKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGxjZF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJInVzYmxjZCIsCisJLnByb2JlID0JbGNkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JbGNkX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1c2JfbGNkX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCQorCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmbGNkX2RyaXZlcik7CisJaWYgKHJlc3VsdCkKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX2xjZF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmxjZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1c2JfbGNkX2luaXQpOworbW9kdWxlX2V4aXQodXNiX2xjZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiR2VvcmdlcyBUb3RoIDxnLnRvdGhAZS1iaXoubHU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX1ZFUlNJT04pOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUzMjlkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGVkLmMKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBVU0IgTEVEIGRyaXZlciAtIDEuMQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworCSNkZWZpbmUgREVCVUcJMQorI2VuZGlmCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiR3JlZyBLcm9haC1IYXJ0bWFuLCBncmVnQGtyb2FoLmNvbSIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBMRUQgRHJpdmVyIgorCisjZGVmaW5lIFZFTkRPUl9JRAkweDBmYzUKKyNkZWZpbmUgUFJPRFVDVF9JRAkweDEyMjMKKworLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShWRU5ET1JfSUQsIFBST0RVQ1RfSUQpIH0sCisJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworCitzdHJ1Y3QgdXNiX2xlZCB7CisJc3RydWN0IHVzYl9kZXZpY2UgKgl1ZGV2OworCXVuc2lnbmVkIGNoYXIJCWJsdWU7CisJdW5zaWduZWQgY2hhcgkJcmVkOworCXVuc2lnbmVkIGNoYXIJCWdyZWVuOworfTsKKworI2RlZmluZSBCTFVFCTB4MDQKKyNkZWZpbmUgUkVECTB4MDIKKyNkZWZpbmUgR1JFRU4JMHgwMQorc3RhdGljIHZvaWQgY2hhbmdlX2NvbG9yKHN0cnVjdCB1c2JfbGVkICpsZWQpCit7CisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBjaGFyIGNvbG9yID0gMHgwNzsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisKKwlidWZmZXIgPSBrbWFsbG9jKDgsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIoJmxlZC0+dWRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAobGVkLT5ibHVlKQorCQljb2xvciAmPSB+KEJMVUUpOworCWlmIChsZWQtPnJlZCkKKwkJY29sb3IgJj0gfihSRUQpOworCWlmIChsZWQtPmdyZWVuKQorCQljb2xvciAmPSB+KEdSRUVOKTsKKwlkZXZfZGJnKCZsZWQtPnVkZXYtPmRldiwKKwkJImJsdWUgPSAlZCwgcmVkID0gJWQsIGdyZWVuID0gJWQsIGNvbG9yID0gJS4yeFxuIiwKKwkJbGVkLT5ibHVlLCBsZWQtPnJlZCwgbGVkLT5ncmVlbiwgY29sb3IpOworCisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKGxlZC0+dWRldiwKKwkJCQl1c2Jfc25kY3RybHBpcGUobGVkLT51ZGV2LCAwKSwKKwkJCQkweDEyLAorCQkJCTB4YzgsCisJCQkJKDB4MDIgKiAweDEwMCkgKyAweDBhLAorCQkJCSgweDAwICogMHgxMDApICsgY29sb3IsCisJCQkJYnVmZmVyLAkKKwkJCQk4LAorCQkJCTIwMDApOworCWlmIChyZXR2YWwpCisJCWRldl9kYmcoJmxlZC0+dWRldi0+ZGV2LCAicmV0dmFsID0gJWRcbiIsIHJldHZhbCk7CisJa2ZyZWUoYnVmZmVyKTsKK30KKworI2RlZmluZSBzaG93X3NldCh2YWx1ZSkJXAorc3RhdGljIHNzaXplX3Qgc2hvd18jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQkJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKKwlzdHJ1Y3QgdXNiX2xlZCAqbGVkID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxlZC0+dmFsdWUpOwkJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgc3NpemVfdCBzZXRfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAorCXN0cnVjdCB1c2JfbGVkICpsZWQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKKwlpbnQgdGVtcCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwkJCVwKKwkJCQkJCQkJCVwKKwlsZWQtPnZhbHVlID0gdGVtcDsJCQkJCQlcCisJY2hhbmdlX2NvbG9yKGxlZCk7CQkJCQkJXAorCXJldHVybiBjb3VudDsJCQkJCQkJXAorfQkJCQkJCQkJCVwKK3N0YXRpYyBERVZJQ0VfQVRUUih2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sIHNob3dfIyN2YWx1ZSwgc2V0XyMjdmFsdWUpOworc2hvd19zZXQoYmx1ZSk7CitzaG93X3NldChyZWQpOworc2hvd19zZXQoZ3JlZW4pOworCitzdGF0aWMgaW50IGxlZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisJc3RydWN0IHVzYl9sZWQgKmRldiA9IE5VTEw7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisKKwlkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX2xlZCksIEdGUF9LRVJORUwpOworCWlmIChkZXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlnb3RvIGVycm9yOworCX0KKwltZW1zZXQgKGRldiwgMHgwMCwgc2l6ZW9mICgqZGV2KSk7CisKKwlkZXYtPnVkZXYgPSB1c2JfZ2V0X2Rldih1ZGV2KTsKKworCXVzYl9zZXRfaW50ZmRhdGEgKGludGVyZmFjZSwgZGV2KTsKKworCWRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9ibHVlKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfcmVkKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfZ3JlZW4pOworCisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCIExFRCBkZXZpY2Ugbm93IGF0dGFjaGVkXG4iKTsKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJa2ZyZWUoZGV2KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBsZWRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfbGVkICpkZXY7CisKKwlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRlcmZhY2UpOworCXVzYl9zZXRfaW50ZmRhdGEgKGludGVyZmFjZSwgTlVMTCk7CisKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfYmx1ZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3JlZCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2dyZWVuKTsKKworCXVzYl9wdXRfZGV2KGRldi0+dWRldik7CisKKwlrZnJlZShkZXYpOworCisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCIExFRCBub3cgZGlzY29ubmVjdGVkXG4iKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGxlZF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJInVzYmxlZCIsCisJLnByb2JlID0JbGVkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JbGVkX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1c2JfbGVkX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmbGVkX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2JfbGVkX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmbGVkX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0ICh1c2JfbGVkX2luaXQpOworbW9kdWxlX2V4aXQgKHVzYl9sZWRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2J0ZXN0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTA0ZjI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c2J0ZXN0LmMKQEAgLTAsMCArMSwyMTQwIEBACisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaWYgIWRlZmluZWQgKERFQlVHKSAmJiBkZWZpbmVkIChDT05GSUdfVVNCX0RFQlVHKQorIyAgIGRlZmluZSBERUJVRworI2VuZGlmCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8vIEZJWE1FIG1ha2UgdGhlc2UgcHVibGljIHNvbWV3aGVyZTsgdXNiZGV2ZnMuaD8KKy8vCitzdHJ1Y3QgdXNidGVzdF9wYXJhbSB7CisJLy8gaW5wdXRzCisJdW5zaWduZWQJCXRlc3RfbnVtOwkvKiAwLi4oVEVTVF9DQVNFUy0xKSAqLworCXVuc2lnbmVkCQlpdGVyYXRpb25zOworCXVuc2lnbmVkCQlsZW5ndGg7CisJdW5zaWduZWQJCXZhcnk7CisJdW5zaWduZWQJCXNnbGVuOworCisJLy8gb3V0cHV0cworCXN0cnVjdCB0aW1ldmFsCQlkdXJhdGlvbjsKK307CisjZGVmaW5lIFVTQlRFU1RfUkVRVUVTVAlfSU9XUignVScsIDEwMCwgc3RydWN0IHVzYnRlc3RfcGFyYW0pCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUJR0VORVJJQwkJLyogbGV0IHByb2JlKCkgYmluZCB1c2luZyBtb2R1bGUgcGFyYW1zICovCisKKy8qIFNvbWUgZGV2aWNlcyB0aGF0IGNhbiBiZSB1c2VkIGZvciB0ZXN0aW5nIHdpbGwgaGF2ZSAicmVhbCIgZHJpdmVycy4KKyAqIEVudHJpZXMgZm9yIHRob3NlIG5lZWQgdG8gYmUgZW5hYmxlZCBoZXJlIGJ5IGhhbmQsIGFmdGVyIGRpc2FibGluZworICogdGhhdCAicmVhbCIgZHJpdmVyLgorICovCisvLyNkZWZpbmUJSUJPVDIJCS8qIGdyYWIgaUJPVDIgd2ViY2FtcyAqLworLy8jZGVmaW5lCUtFWVNQQU5fMTlRaQkvKiBncmFiIHVuLXJlbnVtZXJhdGVkIHNlcmlhbCBhZGFwdGVyICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0cnVjdCB1c2J0ZXN0X2luZm8geworCWNvbnN0IGNoYXIJCSpuYW1lOworCXU4CQkJZXBfaW47CQkvKiBidWxrL2ludHIgc291cmNlICovCisJdTgJCQllcF9vdXQ7CQkvKiBidWxrL2ludHIgc2luayAqLworCXVuc2lnbmVkCQlhdXRvY29uZiA6IDE7CisJdW5zaWduZWQJCWN0cmxfb3V0IDogMTsKKwl1bnNpZ25lZAkJaXNvIDogMTsJLyogdHJ5IGlzbyBpbi9vdXQgKi8KKwlpbnQJCQlhbHQ7Cit9OworCisvKiB0aGlzIGlzIGFjY2Vzc2VkIG9ubHkgdGhyb3VnaCB1c2JmcyBpb2N0bCBjYWxscy4KKyAqIG9uZSBpb2N0bCB0byBpc3N1ZSBhIHRlc3QgLi4uIG9uZSBsb2NrIHBlciBkZXZpY2UuCisgKiB0ZXN0cyBjcmVhdGUgb3RoZXIgdGhyZWFkcyBpZiB0aGV5IG5lZWQgdGhlbS4KKyAqIHVyYnMgYW5kIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBkeW5hbWljYWxseSwKKyAqIGFuZCBkYXRhIGdlbmVyYXRlZCBkZXRlcm1pbmlzdGljYWxseS4KKyAqLworc3RydWN0IHVzYnRlc3RfZGV2IHsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZjsKKwlzdHJ1Y3QgdXNidGVzdF9pbmZvCSppbmZvOworCWludAkJCWluX3BpcGU7CisJaW50CQkJb3V0X3BpcGU7CisJaW50CQkJaW5faXNvX3BpcGU7CisJaW50CQkJb3V0X2lzb19waXBlOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqaXNvX2luLCAqaXNvX291dDsKKwlzdHJ1Y3Qgc2VtYXBob3JlCXNlbTsKKworI2RlZmluZSBUQlVGX1NJWkUJMjU2CisJdTgJCQkqYnVmOworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlICp0ZXN0ZGV2X3RvX3VzYmRldiAoc3RydWN0IHVzYnRlc3RfZGV2ICp0ZXN0KQoreworCXJldHVybiBpbnRlcmZhY2VfdG9fdXNiZGV2ICh0ZXN0LT5pbnRmKTsKK30KKworLyogc2V0IHVwIGFsbCB1cmJzIHNvIHRoZXkgY2FuIGJlIHVzZWQgd2l0aCBlaXRoZXIgYnVsayBvciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUJSU5URVJSVVBUX1JBVEUJCTEJLyogbXNlYy90cmFuc2ZlciAqLworCisjZGVmaW5lIHhwcmludGsodGRldixsZXZlbCxmbXQsYXJncy4uLikgXAorCWRldl9wcmludGsobGV2ZWwgLCAgJih0ZGV2KS0+aW50Zi0+ZGV2ICwgIGZtdCAsICAjIyBhcmdzKQorCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREJHKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9ERUJVRyAsIGZtdCAsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEQkcoZGV2LGZtdCxhcmdzLi4uKSBcCisJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRlZiBWRVJCT1NFCisjZGVmaW5lIFZEQkcgREJHCisjZWxzZQorI2RlZmluZSBWREJHKGRldixmbXQsYXJncy4uLikgXAorCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgkvKiBWRVJCT1NFICovCisKKyNkZWZpbmUgRVJST1IoZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX0VSUiAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIFdBUk4oZGV2LGZtdCxhcmdzLi4uKSBcCisJeHByaW50ayhkZXYgLCBLRVJOX1dBUk5JTkcgLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBJTkZPKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9JTkZPICwgZm10ICwgIyMgYXJncykKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludAorZ2V0X2VuZHBvaW50cyAoc3RydWN0IHVzYnRlc3RfZGV2ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCWludAkJCQl0bXA7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZQkqYWx0OworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludAkqaW4sICpvdXQ7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50CSppc29faW4sICppc29fb3V0OworCXN0cnVjdCB1c2JfZGV2aWNlCQkqdWRldjsKKworCWZvciAodG1wID0gMDsgdG1wIDwgaW50Zi0+bnVtX2FsdHNldHRpbmc7IHRtcCsrKSB7CisJCXVuc2lnbmVkCWVwOworCisJCWluID0gb3V0ID0gTlVMTDsKKwkJaXNvX2luID0gaXNvX291dCA9IE5VTEw7CisJCWFsdCA9IGludGYtPmFsdHNldHRpbmcgKyB0bXA7CisKKwkJLyogdGFrZSB0aGUgZmlyc3QgYWx0c2V0dGluZyB3aXRoIGluLWJ1bGsgKyBvdXQtYnVsazsKKwkJICogaWdub3JlIG90aGVyIGVuZHBvaW50cyBhbmQgYWx0c2V0dHRpbmdzLgorCQkgKi8KKwkJZm9yIChlcCA9IDA7IGVwIDwgYWx0LT5kZXNjLmJOdW1FbmRwb2ludHM7IGVwKyspIHsKKwkJCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludAkqZTsKKworCQkJZSA9IGFsdC0+ZW5kcG9pbnQgKyBlcDsKKwkJCXN3aXRjaCAoZS0+ZGVzYy5ibUF0dHJpYnV0ZXMpIHsKKwkJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoKKwkJCQlicmVhazsKKwkJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKKwkJCQlpZiAoZGV2LT5pbmZvLT5pc28pCisJCQkJCWdvdG8gdHJ5X2lzbzsKKwkJCQkvLyBGQUxMVEhST1VHSAorCQkJZGVmYXVsdDoKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChlLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSB7CisJCQkJaWYgKCFpbikKKwkJCQkJaW4gPSBlOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoIW91dCkKKwkJCQkJb3V0ID0gZTsKKwkJCX0KKwkJCWNvbnRpbnVlOwordHJ5X2lzbzoKKwkJCWlmIChlLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSB7CisJCQkJaWYgKCFpc29faW4pCisJCQkJCWlzb19pbiA9IGU7CisJCQl9IGVsc2UgeworCQkJCWlmICghaXNvX291dCkKKwkJCQkJaXNvX291dCA9IGU7CisJCQl9CisJCX0KKwkJaWYgKChpbiAmJiBvdXQpICB8fCAgKGlzb19pbiAmJiBpc29fb3V0KSkKKwkJCWdvdG8gZm91bmQ7CisJfQorCXJldHVybiAtRUlOVkFMOworCitmb3VuZDoKKwl1ZGV2ID0gdGVzdGRldl90b191c2JkZXYgKGRldik7CisJaWYgKGFsdC0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZyAhPSAwKSB7CisJCXRtcCA9IHVzYl9zZXRfaW50ZXJmYWNlICh1ZGV2LAorCQkJCWFsdC0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQkJCWFsdC0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZyk7CisJCWlmICh0bXAgPCAwKQorCQkJcmV0dXJuIHRtcDsKKwl9CisKKwlpZiAoaW4pIHsKKwkJZGV2LT5pbl9waXBlID0gdXNiX3JjdmJ1bGtwaXBlICh1ZGV2LAorCQkJaW4tPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJCWRldi0+b3V0X3BpcGUgPSB1c2Jfc25kYnVsa3BpcGUgKHVkZXYsCisJCQlvdXQtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJfQorCWlmIChpc29faW4pIHsKKwkJZGV2LT5pc29faW4gPSAmaXNvX2luLT5kZXNjOworCQlkZXYtPmluX2lzb19waXBlID0gdXNiX3Jjdmlzb2NwaXBlICh1ZGV2LAorCQkJCWlzb19pbi0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzCisJCQkJCSYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwkJZGV2LT5pc29fb3V0ID0gJmlzb19vdXQtPmRlc2M7CisJCWRldi0+b3V0X2lzb19waXBlID0gdXNiX3NuZGlzb2NwaXBlICh1ZGV2LAorCQkJCWlzb19vdXQtPmRlc2MuYkVuZHBvaW50QWRkcmVzcworCQkJCQkmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJfQorCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBTdXBwb3J0IGZvciB0ZXN0aW5nIGJhc2ljIG5vbi1xdWV1ZWQgSS9PIHN0cmVhbXMuCisgKgorICogVGhlc2UganVzdCBwYWNrYWdlIHVyYnMgYXMgcmVxdWVzdHMgdGhhdCBjYW4gYmUgZWFzaWx5IGNhbmNlbGVkLgorICogRWFjaCB1cmIncyBkYXRhIGJ1ZmZlciBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQ7IGNhbGxlcnMgY2FuIGZpbGwKKyAqIHRoZW0gd2l0aCBub24temVybyB0ZXN0IGRhdGEgKG9yIHRlc3QgZm9yIGl0KSB3aGVuIGFwcHJvcHJpYXRlLgorICovCisKK3N0YXRpYyB2b2lkIHNpbXBsZV9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwljb21wbGV0ZSAoKHN0cnVjdCBjb21wbGV0aW9uICopIHVyYi0+Y29udGV4dCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXJiICpzaW1wbGVfYWxsb2NfdXJiICgKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiwKKwlpbnQJCQlwaXBlLAorCXVuc2lnbmVkIGxvbmcJCWJ5dGVzCispCit7CisJc3RydWN0IHVyYgkJKnVyYjsKKworCWlmIChieXRlcyA8IDApCisJCXJldHVybiBOVUxMOworCXVyYiA9IHVzYl9hbGxvY191cmIgKDAsIFNMQUJfS0VSTkVMKTsKKwlpZiAoIXVyYikKKwkJcmV0dXJuIHVyYjsKKwl1c2JfZmlsbF9idWxrX3VyYiAodXJiLCB1ZGV2LCBwaXBlLCBOVUxMLCBieXRlcywgc2ltcGxlX2NhbGxiYWNrLCBOVUxMKTsKKwl1cmItPmludGVydmFsID0gKHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorCQkJPyAoSU5URVJSVVBUX1JBVEUgPDwgMykKKwkJCTogSU5URVJSVVBUX1JBVEU7CisJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCWlmICh1c2JfcGlwZWluIChwaXBlKSkKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfU0hPUlRfTk9UX09LOworCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdXNiX2J1ZmZlcl9hbGxvYyAodWRldiwgYnl0ZXMsIFNMQUJfS0VSTkVMLAorCQkJJnVyYi0+dHJhbnNmZXJfZG1hKTsKKwlpZiAoIXVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CisJCXVzYl9mcmVlX3VyYiAodXJiKTsKKwkJdXJiID0gTlVMTDsKKwl9IGVsc2UKKwkJbWVtc2V0ICh1cmItPnRyYW5zZmVyX2J1ZmZlciwgMCwgYnl0ZXMpOworCXJldHVybiB1cmI7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBwYXR0ZXJuID0gMDsKK21vZHVsZV9wYXJhbSAocGF0dGVybiwgdWludCwgU19JUlVHTyk7CisvLyBNT0RVTEVfUEFSTV9ERVNDIChwYXR0ZXJuLCAiaS9vIHBhdHRlcm4gKDAgPT0gemVyb2VzKSIpOworCitzdGF0aWMgaW5saW5lIHZvaWQgc2ltcGxlX2ZpbGxfYnVmIChzdHJ1Y3QgdXJiICp1cmIpCit7CisJdW5zaWduZWQJaTsKKwl1OAkJKmJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXVuc2lnbmVkCWxlbiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKworCXN3aXRjaCAocGF0dGVybikgeworCWRlZmF1bHQ6CisJCS8vIEZBTExUSFJPVUdICisJY2FzZSAwOgorCQltZW1zZXQgKGJ1ZiwgMCwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSAxOgkJCS8qIG1vZDYzICovCisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJCSpidWYrKyA9ICh1OCkgKGkgJSA2Myk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGlubGluZSBpbnQgc2ltcGxlX2NoZWNrX2J1ZiAoc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkCWk7CisJdTgJCWV4cGVjdGVkOworCXU4CQkqYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQJbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrLCBidWYrKykgeworCQlzd2l0Y2ggKHBhdHRlcm4pIHsKKwkJLyogYWxsLXplcm9lcyBoYXMgbm8gc3luY2hyb25pemF0aW9uIGlzc3VlcyAqLworCQljYXNlIDA6CisJCQlleHBlY3RlZCA9IDA7CisJCQlicmVhazsKKwkJLyogbW9kNjMgc3RheXMgaW4gc3luYyB3aXRoIHNob3J0LXRlcm1pbmF0ZWQgdHJhbnNmZXJzLAorCQkgKiBvciBvdGhlcndpc2Ugd2hlbiBob3N0IGFuZCBnYWRnZXQgYWdyZWUgb24gaG93IGxhcmdlCisJCSAqIGVhY2ggdXNiIHRyYW5zZmVyIHJlcXVlc3Qgc2hvdWxkIGJlLiAgcmVzeW5jIGlzIGRvbmUKKwkJICogd2l0aCBzZXRfaW50ZXJmYWNlIG9yIHNldF9jb25maWcuCisJCSAqLworCQljYXNlIDE6CQkJLyogbW9kNjMgKi8KKwkJCWV4cGVjdGVkID0gaSAlIDYzOworCQkJYnJlYWs7CisJCS8qIGFsd2F5cyBmYWlsIHVuc3VwcG9ydGVkIHBhdHRlcm5zICovCisJCWRlZmF1bHQ6CisJCQlleHBlY3RlZCA9ICEqYnVmOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCpidWYgPT0gZXhwZWN0ZWQpCisJCQljb250aW51ZTsKKwkJZGJnICgiYnVmWyVkXSA9ICVkIChub3QgJWQpIiwgaSwgKmJ1ZiwgZXhwZWN0ZWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNpbXBsZV9mcmVlX3VyYiAoc3RydWN0IHVyYiAqdXJiKQoreworCXVzYl9idWZmZXJfZnJlZSAodXJiLT5kZXYsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2RtYSk7CisJdXNiX2ZyZWVfdXJiICh1cmIpOworfQorCitzdGF0aWMgaW50IHNpbXBsZV9pbyAoCisJc3RydWN0IHVyYgkJKnVyYiwKKwlpbnQJCQlpdGVyYXRpb25zLAorCWludAkJCXZhcnksCisJaW50CQkJZXhwZWN0ZWQsCisJY29uc3QgY2hhcgkJKmxhYmVsCispCit7CisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYgPSB1cmItPmRldjsKKwlpbnQJCQltYXggPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJc3RydWN0IGNvbXBsZXRpb24JY29tcGxldGlvbjsKKwlpbnQJCQlyZXR2YWwgPSAwOworCisJdXJiLT5jb250ZXh0ID0gJmNvbXBsZXRpb247CisJd2hpbGUgKHJldHZhbCA9PSAwICYmIGl0ZXJhdGlvbnMtLSA+IDApIHsKKwkJaW5pdF9jb21wbGV0aW9uICgmY29tcGxldGlvbik7CisJCWlmICh1c2JfcGlwZW91dCAodXJiLT5waXBlKSkKKwkJCXNpbXBsZV9maWxsX2J1ZiAodXJiKTsKKwkJaWYgKChyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBTTEFCX0tFUk5FTCkpICE9IDApCisJCQlicmVhazsKKworCQkvKiBOT1RFOiAgbm8gdGltZW91dHM7IGNhbid0IGJlIGJyb2tlbiBvdXQgb2YgYnkgaW50ZXJydXB0ICovCisJCXdhaXRfZm9yX2NvbXBsZXRpb24gKCZjb21wbGV0aW9uKTsKKwkJcmV0dmFsID0gdXJiLT5zdGF0dXM7CisJCXVyYi0+ZGV2ID0gdWRldjsKKwkJaWYgKHJldHZhbCA9PSAwICYmIHVzYl9waXBlaW4gKHVyYi0+cGlwZSkpCisJCQlyZXR2YWwgPSBzaW1wbGVfY2hlY2tfYnVmICh1cmIpOworCisJCWlmICh2YXJ5KSB7CisJCQlpbnQJbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCisJCQlsZW4gKz0gdmFyeTsKKwkJCWxlbiAlPSBtYXg7CisJCQlpZiAobGVuID09IDApCisJCQkJbGVuID0gKHZhcnkgPCBtYXgpID8gdmFyeSA6IG1heDsKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGxlbjsKKwkJfQorCisJCS8qIEZJWE1FIGlmIGVuZHBvaW50IGhhbHRlZCwgY2xlYXIgaGFsdCAoYW5kIGxvZykgKi8KKwl9CisJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gbWF4OworCisJaWYgKGV4cGVjdGVkICE9IHJldHZhbCkKKwkJZGV2X2RiZyAoJnVkZXYtPmRldiwKKwkJCSIlcyBmYWlsZWQsIGl0ZXJhdGlvbnMgbGVmdCAlZCwgc3RhdHVzICVkIChub3QgJWQpXG4iLAorCQkJCWxhYmVsLCBpdGVyYXRpb25zLCByZXR2YWwsIGV4cGVjdGVkKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFdlIHVzZSBzY2F0dGVybGlzdCBwcmltaXRpdmVzIHRvIHRlc3QgcXVldWVkIEkvTy4KKyAqIFllcywgdGhpcyBhbHNvIHRlc3RzIHRoZSBzY2F0dGVybGlzdCBwcmltaXRpdmVzLgorICovCisKK3N0YXRpYyB2b2lkIGZyZWVfc2dsaXN0IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMpCit7CisJdW5zaWduZWQJCWk7CisJCisJaWYgKCFzZykKKwkJcmV0dXJuOworCWZvciAoaSA9IDA7IGkgPCBuZW50czsgaSsrKSB7CisJCWlmICghc2cgW2ldLnBhZ2UpCisJCQljb250aW51ZTsKKwkJa2ZyZWUgKHBhZ2VfYWRkcmVzcyAoc2cgW2ldLnBhZ2UpICsgc2cgW2ldLm9mZnNldCk7CisJfQorCWtmcmVlIChzZyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKgorYWxsb2Nfc2dsaXN0IChpbnQgbmVudHMsIGludCBtYXgsIGludCB2YXJ5KQoreworCXN0cnVjdCBzY2F0dGVybGlzdAkqc2c7CisJdW5zaWduZWQJCWk7CisJdW5zaWduZWQJCXNpemUgPSBtYXg7CisKKwlzZyA9IGttYWxsb2MgKG5lbnRzICogc2l6ZW9mICpzZywgU0xBQl9LRVJORUwpOworCWlmICghc2cpCisJCXJldHVybiBOVUxMOworCW1lbXNldCAoc2csIDAsIG5lbnRzICogc2l6ZW9mICpzZyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmVudHM7IGkrKykgeworCQljaGFyCQkqYnVmOworCisJCWJ1ZiA9IGttYWxsb2MgKHNpemUsIFNMQUJfS0VSTkVMKTsKKwkJaWYgKCFidWYpIHsKKwkJCWZyZWVfc2dsaXN0IChzZywgaSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQltZW1zZXQgKGJ1ZiwgMCwgc2l6ZSk7CisKKwkJLyoga21hbGxvYyBwYWdlcyBhcmUgYWx3YXlzIHBoeXNpY2FsbHkgY29udGlndW91cyEgKi8KKwkJc2cgW2ldLnBhZ2UgPSB2aXJ0X3RvX3BhZ2UgKGJ1Zik7CisJCXNnIFtpXS5vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZSAoYnVmKTsKKwkJc2cgW2ldLmxlbmd0aCA9IHNpemU7CisKKwkJaWYgKHZhcnkpIHsKKwkJCXNpemUgKz0gdmFyeTsKKwkJCXNpemUgJT0gbWF4OworCQkJaWYgKHNpemUgPT0gMCkKKwkJCQlzaXplID0gKHZhcnkgPCBtYXgpID8gdmFyeSA6IG1heDsKKwkJfQorCX0KKworCXJldHVybiBzZzsKK30KKworc3RhdGljIGludCBwZXJmb3JtX3NnbGlzdCAoCisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYsCisJdW5zaWduZWQJCWl0ZXJhdGlvbnMsCisJaW50CQkJcGlwZSwKKwlzdHJ1Y3QgdXNiX3NnX3JlcXVlc3QJKnJlcSwKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKnNnLAorCWludAkJCW5lbnRzCispCit7CisJaW50CQkJcmV0dmFsID0gMDsKKworCXdoaWxlIChyZXR2YWwgPT0gMCAmJiBpdGVyYXRpb25zLS0gPiAwKSB7CisJCXJldHZhbCA9IHVzYl9zZ19pbml0IChyZXEsIHVkZXYsIHBpcGUsCisJCQkJKHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorCQkJCQk/IChJTlRFUlJVUFRfUkFURSA8PCAzKQorCQkJCQk6IElOVEVSUlVQVF9SQVRFLAorCQkJCXNnLCBuZW50cywgMCwgU0xBQl9LRVJORUwpOworCQkKKwkJaWYgKHJldHZhbCkKKwkJCWJyZWFrOworCQl1c2Jfc2dfd2FpdCAocmVxKTsKKwkJcmV0dmFsID0gcmVxLT5zdGF0dXM7CisKKwkJLyogRklYTUUgaWYgZW5kcG9pbnQgaGFsdGVkLCBjbGVhciBoYWx0IChhbmQgbG9nKSAqLworCX0KKworCS8vIEZJWE1FIGZvciB1bmxpbmsgb3IgZmF1bHQgaGFuZGxpbmcgdGVzdHMsIGRvbid0IHJlcG9ydAorCS8vIGZhaWx1cmUgaWYgcmV0dmFsIGlzIGFzIHdlIGV4cGVjdGVkIC4uLgorCisJaWYgKHJldHZhbCkKKwkJZGJnICgicGVyZm9ybV9zZ2xpc3QgZmFpbGVkLCBpdGVyYXRpb25zIGxlZnQgJWQsIHN0YXR1cyAlZCIsCisJCQkJaXRlcmF0aW9ucywgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHVucXVldWVkIGNvbnRyb2wgbWVzc2FnZSB0ZXN0aW5nCisgKgorICogdGhlcmUncyBhIG5pY2Ugc2V0IG9mIGRldmljZSBmdW5jdGlvbmFsIHJlcXVpcmVtZW50cyBpbiBjaGFwdGVyIDkgb2YgdGhlCisgKiB1c2IgMi4wIHNwZWMsIHdoaWNoIHdlIGNhbiBhcHBseSB0byBBTlkgZGV2aWNlLCBldmVuIG9uZXMgdGhhdCBkb24ndCB1c2UKKyAqIHNwZWNpYWwgdGVzdCBmaXJtd2FyZS4KKyAqCisgKiB3ZSBrbm93IHRoZSBkZXZpY2UgaXMgY29uZmlndXJlZCAob3Igc3VzcGVuZGVkKSBieSB0aGUgdGltZSBpdCdzIHZpc2libGUKKyAqIHRocm91Z2ggdXNiZnMuICB3ZSBjYW4ndCBjaGFuZ2UgdGhhdCwgc28gd2Ugd29uJ3QgdGVzdCBlbnVtZXJhdGlvbiAod2hpY2gKKyAqIHdvcmtlZCAnd2VsbCBlbm91Z2gnIHRvIGdldCBoZXJlLCB0aGlzIHRpbWUpLCBwb3dlciBtYW5hZ2VtZW50IChkaXR0byksCisgKiBvciByZW1vdGUgd2FrZXVwICh3aGljaCBuZWVkcyBodW1hbiBpbnRlcmFjdGlvbikuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIHJlYWx3b3JsZCA9IDE7Cittb2R1bGVfcGFyYW0gKHJlYWx3b3JsZCwgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDIChyZWFsd29ybGQsICJjbGVhciB0byBkZW1hbmQgc3RyaWN0ZXIgY2g5IGNvbXBsaWFuY2UiKTsKKworc3RhdGljIGludCBnZXRfYWx0c2V0dGluZyAoc3RydWN0IHVzYnRlc3RfZGV2ICpkZXYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmlmYWNlID0gZGV2LT5pbnRmOworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAoaWZhY2UpOworCWludAkJCXJldHZhbDsKKworCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyAodWRldiwgdXNiX3JjdmN0cmxwaXBlICh1ZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX0lOVEVSRkFDRSwgVVNCX0RJUl9JTnxVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJMCwgaWZhY2UtPmFsdHNldHRpbmcgWzBdLmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJCWRldi0+YnVmLCAxLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJc3dpdGNoIChyZXR2YWwpIHsKKwljYXNlIDE6CisJCXJldHVybiBkZXYtPmJ1ZiBbMF07CisJY2FzZSAwOgorCQlyZXR2YWwgPSAtRVJBTkdFOworCQkvLyBGQUxMVEhST1VHSAorCWRlZmF1bHQ6CisJCXJldHVybiByZXR2YWw7CisJfQorfQorCitzdGF0aWMgaW50IHNldF9hbHRzZXR0aW5nIChzdHJ1Y3QgdXNidGVzdF9kZXYgKmRldiwgaW50IGFsdGVybmF0ZSkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkJKmlmYWNlID0gZGV2LT5pbnRmOworCXN0cnVjdCB1c2JfZGV2aWNlCQkqdWRldjsKKworCWlmIChhbHRlcm5hdGUgPCAwIHx8IGFsdGVybmF0ZSA+PSAyNTYpCisJCXJldHVybiAtRUlOVkFMOworCisJdWRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGlmYWNlKTsKKwlyZXR1cm4gdXNiX3NldF9pbnRlcmZhY2UgKHVkZXYsCisJCQlpZmFjZS0+YWx0c2V0dGluZyBbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQkJYWx0ZXJuYXRlKTsKK30KKworc3RhdGljIGludCBpc19nb29kX2NvbmZpZyAoY2hhciAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IJKmNvbmZpZzsKKwkKKwlpZiAobGVuIDwgc2l6ZW9mICpjb25maWcpCisJCXJldHVybiAwOworCWNvbmZpZyA9IChzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yICopIGJ1ZjsKKworCXN3aXRjaCAoY29uZmlnLT5iRGVzY3JpcHRvclR5cGUpIHsKKwljYXNlIFVTQl9EVF9DT05GSUc6CisJY2FzZSBVU0JfRFRfT1RIRVJfU1BFRURfQ09ORklHOgorCQlpZiAoY29uZmlnLT5iTGVuZ3RoICE9IDkpIHsKKwkJCWRiZyAoImJvZ3VzIGNvbmZpZyBkZXNjcmlwdG9yIGxlbmd0aCIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJLyogdGhpcyBiaXQgJ211c3QgYmUgMScgYnV0IG9mdGVuIGlzbid0ICovCisJCWlmICghcmVhbHdvcmxkICYmICEoY29uZmlnLT5ibUF0dHJpYnV0ZXMgJiAweDgwKSkgeworCQkJZGJnICgiaGlnaCBiaXQgb2YgY29uZmlnIGF0dHJpYnV0ZXMgbm90IHNldCIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKGNvbmZpZy0+Ym1BdHRyaWJ1dGVzICYgMHgxZikgewkvKiByZXNlcnZlZCA9PSAwICovCisJCQlkYmcgKCJyZXNlcnZlZCBjb25maWcgYml0cyBzZXQiKTsKKwkJCXJldHVybiAwOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCWlmIChsZTE2X3RvX2NwdShjb25maWctPndUb3RhbExlbmd0aCkgPT0gbGVuKQkJLyogcmVhZCBpdCBhbGwgKi8KKwkJcmV0dXJuIDE7CisJaWYgKGxlMTZfdG9fY3B1KGNvbmZpZy0+d1RvdGFsTGVuZ3RoKSA+PSBUQlVGX1NJWkUpCQkvKiBtYXggcGFydGlhbCByZWFkICovCisJCXJldHVybiAxOworCWRiZyAoImJvZ3VzIGNvbmZpZyBkZXNjcmlwdG9yIHJlYWQgc2l6ZSIpOworCXJldHVybiAwOworfQorCisvKiBzYW5pdHkgdGVzdCBmb3Igc3RhbmRhcmQgcmVxdWVzdHMgd29ya2luZyB3aXRoIHVzYl9jb250cm9sX21lc2coKSBhbmQgc29tZQorICogb2YgdGhlIHV0aWxpdHkgZnVuY3Rpb25zIHdoaWNoIHVzZSBpdC4KKyAqCisgKiB0aGlzIGRvZXNuJ3QgdGVzdCBob3cgZW5kcG9pbnQgaGFsdHMgYmVoYXZlIG9yIGRhdGEgdG9nZ2xlcyBnZXQgc2V0LCBzaW5jZQorICogd2Ugd29uJ3QgZG8gSS9PIHRvIGJ1bGsvaW50ZXJydXB0IGVuZHBvaW50cyBoZXJlICh3aGljaCBpcyBob3cgdG8gY2hhbmdlCisgKiBoYWx0IG9yIHRvZ2dsZSkuICB0b2dnbGUgdGVzdGluZyBpcyBpbXByYWN0aWNhbCB3aXRob3V0IHN1cHBvcnQgZnJvbSBoY2RzLgorICoKKyAqIHRoaXMgYXZvaWRzIGZhaWxpbmcgZGV2aWNlcyBsaW51eCB3b3VsZCBub3JtYWxseSB3b3JrIHdpdGgsIGJ5IG5vdCB0ZXN0aW5nCisgKiBjb25maWcvYWx0c2V0dGluZyBvcGVyYXRpb25zIGZvciBkZXZpY2VzIHRoYXQgb25seSBzdXBwb3J0IHRoZWlyIGRlZmF1bHRzLgorICogc3VjaCBkZXZpY2VzIHJhcmVseSBzdXBwb3J0IHRob3NlIG5lZWRsZXNzIG9wZXJhdGlvbnMuCisgKgorICogTk9URSB0aGF0IHNpbmNlIHRoaXMgaXMgYSBzYW5pdHkgdGVzdCwgaXQncyBub3QgZXhhbWluaW5nIGJvdW5kYXJ5IGNhc2VzCisgKiB0byBzZWUgaWYgdXNiY29yZSwgaGNkLCBhbmQgZGV2aWNlIGFsbCBiZWhhdmUgcmlnaHQuICBzdWNoIHRlc3Rpbmcgd291bGQKKyAqIGludm9sdmUgdmFyaWVkIHJlYWQgc2l6ZXMgYW5kIG90aGVyIG9wZXJhdGlvbiBzZXF1ZW5jZXMuCisgKi8KK3N0YXRpYyBpbnQgY2g5X3Bvc3Rjb25maWcgKHN0cnVjdCB1c2J0ZXN0X2RldiAqZGV2KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppZmFjZSA9IGRldi0+aW50ZjsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGlmYWNlKTsKKwlpbnQJCQlpLCBhbHQsIHJldHZhbDsKKworCS8qIFs5LjIuM10gaWYgdGhlcmUncyBtb3JlIHRoYW4gb25lIGFsdHNldHRpbmcsIHdlIG5lZWQgdG8gYmUgYWJsZSB0bworCSAqIHNldCBhbmQgZ2V0IGVhY2ggb25lLiAgbW9zdGx5IHRydXN0cyB0aGUgZGVzY3JpcHRvcnMgZnJvbSB1c2Jjb3JlLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBpZmFjZS0+bnVtX2FsdHNldHRpbmc7IGkrKykgeworCisJCS8qIDkuMi4zIGNvbnN0cmFpbnMgdGhlIHJhbmdlIGhlcmUgKi8KKwkJYWx0ID0gaWZhY2UtPmFsdHNldHRpbmcgW2ldLmRlc2MuYkFsdGVybmF0ZVNldHRpbmc7CisJCWlmIChhbHQgPCAwIHx8IGFsdCA+PSBpZmFjZS0+bnVtX2FsdHNldHRpbmcpIHsKKwkJCWRldl9kYmcgKCZpZmFjZS0+ZGV2LAorCQkJCQkiaW52YWxpZCBhbHQgWyVkXS5iQWx0U2V0dGluZyA9ICVkXG4iLAorCQkJCQlpLCBhbHQpOworCQl9CisKKwkJLyogW3JlYWwgd29ybGRdIGdldC9zZXQgdW5pbXBsZW1lbnRlZCBpZiB0aGVyZSdzIG9ubHkgb25lICovCisJCWlmIChyZWFsd29ybGQgJiYgaWZhY2UtPm51bV9hbHRzZXR0aW5nID09IDEpCisJCQljb250aW51ZTsKKworCQkvKiBbOS40LjEwXSBzZXRfaW50ZXJmYWNlICovCisJCXJldHZhbCA9IHNldF9hbHRzZXR0aW5nIChkZXYsIGFsdCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWRldl9kYmcgKCZpZmFjZS0+ZGV2LCAiY2FuJ3Qgc2V0X2ludGVyZmFjZSA9ICVkLCAlZFxuIiwKKwkJCQkJYWx0LCByZXR2YWwpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCisJCS8qIFs5LjQuNF0gZ2V0X2ludGVyZmFjZSBhbHdheXMgd29ya3MgKi8KKwkJcmV0dmFsID0gZ2V0X2FsdHNldHRpbmcgKGRldik7CisJCWlmIChyZXR2YWwgIT0gYWx0KSB7CisJCQlkZXZfZGJnICgmaWZhY2UtPmRldiwgImdldCBhbHQgc2hvdWxkIGJlICVkLCB3YXMgJWRcbiIsCisJCQkJCWFsdCwgcmV0dmFsKTsKKwkJCXJldHVybiAocmV0dmFsIDwgMCkgPyByZXR2YWwgOiAtRURPTTsKKwkJfQorCisJfQorCisJLyogW3JlYWwgd29ybGRdIGdldF9jb25maWcgdW5pbXBsZW1lbnRlZCBpZiB0aGVyZSdzIG9ubHkgb25lICovCisJaWYgKCFyZWFsd29ybGQgfHwgdWRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkgeworCQlpbnQJZXhwZWN0ZWQgPSB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZTsKKworCQkvKiBbOS40LjJdIGdldF9jb25maWd1cmF0aW9uIGFsd2F5cyB3b3JrcworCQkgKiAuLi4gYWx0aG91Z2ggc29tZSBjaGVhcCBkZXZpY2VzIChsaWtlIG9uZSBUSSBIdWIgSSd2ZSBnb3QpCisJCSAqIHdvbid0IHJldHVybiBjb25maWcgZGVzY3JpcHRvcnMgZXhjZXB0IGJlZm9yZSBzZXRfY29uZmlnLgorCQkgKi8KKwkJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnICh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUgKHVkZXYsIDApLAorCQkJCVVTQl9SRVFfR0VUX0NPTkZJR1VSQVRJT04sCisJCQkJVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJMCwgMCwgZGV2LT5idWYsIDEsIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwkJaWYgKHJldHZhbCAhPSAxIHx8IGRldi0+YnVmIFswXSAhPSBleHBlY3RlZCkgeworCQkJZGV2X2RiZyAoJmlmYWNlLT5kZXYsCisJCQkJImdldCBjb25maWcgLS0+ICVkICglZClcbiIsIHJldHZhbCwKKwkJCQlleHBlY3RlZCk7CisJCQlyZXR1cm4gKHJldHZhbCA8IDApID8gcmV0dmFsIDogLUVET007CisJCX0KKwl9CisKKwkvKiB0aGVyZSdzIGFsd2F5cyBbOS40LjNdIGEgZGV2aWNlIGRlc2NyaXB0b3IgWzkuNi4xXSAqLworCXJldHZhbCA9IHVzYl9nZXRfZGVzY3JpcHRvciAodWRldiwgVVNCX0RUX0RFVklDRSwgMCwKKwkJCWRldi0+YnVmLCBzaXplb2YgdWRldi0+ZGVzY3JpcHRvcik7CisJaWYgKHJldHZhbCAhPSBzaXplb2YgdWRldi0+ZGVzY3JpcHRvcikgeworCQlkZXZfZGJnICgmaWZhY2UtPmRldiwgImRldiBkZXNjcmlwdG9yIC0tPiAlZFxuIiwgcmV0dmFsKTsKKwkJcmV0dXJuIChyZXR2YWwgPCAwKSA/IHJldHZhbCA6IC1FRE9NOworCX0KKworCS8qIHRoZXJlJ3MgYWx3YXlzIFs5LjQuM10gYXQgbGVhc3Qgb25lIGNvbmZpZyBkZXNjcmlwdG9yIFs5LjYuM10gKi8KKwlmb3IgKGkgPSAwOyBpIDwgdWRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnM7IGkrKykgeworCQlyZXR2YWwgPSB1c2JfZ2V0X2Rlc2NyaXB0b3IgKHVkZXYsIFVTQl9EVF9DT05GSUcsIGksCisJCQkJZGV2LT5idWYsIFRCVUZfU0laRSk7CisJCWlmICghaXNfZ29vZF9jb25maWcgKGRldi0+YnVmLCByZXR2YWwpKSB7CisJCQlkZXZfZGJnICgmaWZhY2UtPmRldiwKKwkJCQkJImNvbmZpZyBbJWRdIGRlc2NyaXB0b3IgLS0+ICVkXG4iLAorCQkJCQlpLCByZXR2YWwpOworCQkJcmV0dXJuIChyZXR2YWwgPCAwKSA/IHJldHZhbCA6IC1FRE9NOworCQl9CisKKwkJLy8gRklYTUUgY3Jvc3MtY2hlY2tpbmcgdWRldi0+Y29uZmlnW2ldIHRvIG1ha2Ugc3VyZSB1c2Jjb3JlCisJCS8vIHBhcnNlZCBpdCByaWdodCAoZXRjKSB3b3VsZCBiZSBnb29kIHRlc3RpbmcgcGFyYW5vaWEKKwl9CisKKwkvKiBhbmQgc29tZXRpbWVzIFs5LjIuNi42XSBzcGVlZCBkZXBlbmRlbnQgZGVzY3JpcHRvcnMgKi8KKwlpZiAobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5iY2RVU0IpID09IDB4MDIwMCkgeworCQlzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yCQkqZCA9IE5VTEw7CisKKwkJLyogZGV2aWNlIHF1YWxpZmllciBbOS42LjJdICovCisJCXJldHZhbCA9IHVzYl9nZXRfZGVzY3JpcHRvciAodWRldiwKKwkJCQlVU0JfRFRfREVWSUNFX1FVQUxJRklFUiwgMCwgZGV2LT5idWYsCisJCQkJc2l6ZW9mIChzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yKSk7CisJCWlmIChyZXR2YWwgPT0gLUVQSVBFKSB7CisJCQlpZiAodWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIHsKKwkJCQlkZXZfZGJnICgmaWZhY2UtPmRldiwKKwkJCQkJCSJocyBkZXYgcXVhbGlmaWVyIC0tPiAlZFxuIiwKKwkJCQkJCXJldHZhbCk7CisJCQkJcmV0dXJuIChyZXR2YWwgPCAwKSA/IHJldHZhbCA6IC1FRE9NOworCQkJfQorCQkJLyogdXNiMi4wIGJ1dCBub3QgaGlnaC1zcGVlZCBjYXBhYmxlOyBmaW5lICovCisJCX0gZWxzZSBpZiAocmV0dmFsICE9IHNpemVvZiAoc3RydWN0IHVzYl9xdWFsaWZpZXJfZGVzY3JpcHRvcikpIHsKKwkJCWRldl9kYmcgKCZpZmFjZS0+ZGV2LCAiZGV2IHF1YWxpZmllciAtLT4gJWRcbiIsIHJldHZhbCk7CisJCQlyZXR1cm4gKHJldHZhbCA8IDApID8gcmV0dmFsIDogLUVET007CisJCX0gZWxzZQorCQkJZCA9IChzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yICopIGRldi0+YnVmOworCisJCS8qIG1pZ2h0IG5vdCBoYXZlIFs5LjYuMl0gYW55IG90aGVyLXNwZWVkIGNvbmZpZ3MgWzkuNi40XSAqLworCQlpZiAoZCkgeworCQkJdW5zaWduZWQgbWF4ID0gZC0+Yk51bUNvbmZpZ3VyYXRpb25zOworCQkJZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7CisJCQkJcmV0dmFsID0gdXNiX2dldF9kZXNjcmlwdG9yICh1ZGV2LAorCQkJCQlVU0JfRFRfT1RIRVJfU1BFRURfQ09ORklHLCBpLAorCQkJCQlkZXYtPmJ1ZiwgVEJVRl9TSVpFKTsKKwkJCQlpZiAoIWlzX2dvb2RfY29uZmlnIChkZXYtPmJ1ZiwgcmV0dmFsKSkgeworCQkJCQlkZXZfZGJnICgmaWZhY2UtPmRldiwKKwkJCQkJCSJvdGhlciBzcGVlZCBjb25maWcgLS0+ICVkXG4iLAorCQkJCQkJcmV0dmFsKTsKKwkJCQkJcmV0dXJuIChyZXR2YWwgPCAwKSA/IHJldHZhbCA6IC1FRE9NOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkvLyBGSVhNRSBmZXRjaCBzdHJpbmdzIGZyb20gYXQgbGVhc3QgdGhlIGRldmljZSBkZXNjcmlwdG9yCisKKwkvKiBbOS40LjVdIGdldF9zdGF0dXMgYWx3YXlzIHdvcmtzICovCisJcmV0dmFsID0gdXNiX2dldF9zdGF0dXMgKHVkZXYsIFVTQl9SRUNJUF9ERVZJQ0UsIDAsIGRldi0+YnVmKTsKKwlpZiAocmV0dmFsICE9IDIpIHsKKwkJZGV2X2RiZyAoJmlmYWNlLT5kZXYsICJnZXQgZGV2IHN0YXR1cyAtLT4gJWRcbiIsIHJldHZhbCk7CisJCXJldHVybiAocmV0dmFsIDwgMCkgPyByZXR2YWwgOiAtRURPTTsKKwl9CisKKwkvLyBGSVhNRSBjb25maWd1cmF0aW9uLmJtQXR0cmlidXRlcyBzYXlzIGlmIHdlIGNvdWxkIHRyeSB0byBzZXQvY2xlYXIKKwkvLyB0aGUgZGV2aWNlJ3MgcmVtb3RlIHdha2V1cCBmZWF0dXJlIC4uLiBpZiB3ZSBjYW4sIHRlc3QgdGhhdCBoZXJlCisKKwlyZXR2YWwgPSB1c2JfZ2V0X3N0YXR1cyAodWRldiwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCWlmYWNlLT5hbHRzZXR0aW5nIFswXS5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsIGRldi0+YnVmKTsKKwlpZiAocmV0dmFsICE9IDIpIHsKKwkJZGV2X2RiZyAoJmlmYWNlLT5kZXYsICJnZXQgaW50ZXJmYWNlIHN0YXR1cyAtLT4gJWRcbiIsIHJldHZhbCk7CisJCXJldHVybiAocmV0dmFsIDwgMCkgPyByZXR2YWwgOiAtRURPTTsKKwl9CisJLy8gRklYTUUgZ2V0IHN0YXR1cyBmb3IgZWFjaCBlbmRwb2ludCBpbiB0aGUgaW50ZXJmYWNlCisJCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHVzZSBjaDkgcmVxdWVzdHMgdG8gdGVzdCB3aGV0aGVyOgorICogICAoYSkgcXVldWVzIHdvcmsgZm9yIGNvbnRyb2wsIGtlZXBpbmcgTiBzdWJ0ZXN0cyBxdWV1ZWQgYW5kCisgKiAgICAgICBhY3RpdmUgKGF1dG8tcmVzdWJtaXQpIGZvciBNIGxvb3BzIHRocm91Z2ggdGhlIHF1ZXVlLgorICogICAoYikgcHJvdG9jb2wgc3RhbGxzIChjb250cm9sLW9ubHkpIHdpbGwgYXV0b3JlY292ZXIuCisgKiAgICAgICBpdCdzIG5vdCBsaWtlIGJ1bGsvaW50cjsgbm8gaGFsdCBjbGVhcmluZy4KKyAqICAgKGMpIHNob3J0IGNvbnRyb2wgcmVhZHMgYXJlIHJlcG9ydGVkIGFuZCBoYW5kbGVkLgorICogICAoZCkgcXVldWVzIGFyZSBhbHdheXMgcHJvY2Vzc2VkIGluLW9yZGVyCisgKi8KKworc3RydWN0IGN0cmxfY3R4IHsKKwlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdCB1c2J0ZXN0X2RldgkqZGV2OworCXN0cnVjdCBjb21wbGV0aW9uCWNvbXBsZXRlOworCXVuc2lnbmVkCQljb3VudDsKKwl1bnNpZ25lZAkJcGVuZGluZzsKKwlpbnQJCQlzdGF0dXM7CisJc3RydWN0IHVyYgkJKip1cmI7CisJc3RydWN0IHVzYnRlc3RfcGFyYW0JKnBhcmFtOworCWludAkJCWxhc3Q7Cit9OworCisjZGVmaW5lIE5VTV9TVUJDQVNFUwkxNQkJLyogaG93IG1hbnkgdGVzdCBzdWJjYXNlcyBoZXJlPyAqLworCitzdHJ1Y3Qgc3ViY2FzZSB7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdAlzZXR1cDsKKwlpbnQJCQludW1iZXI7CisJaW50CQkJZXhwZWN0ZWQ7Cit9OworCitzdGF0aWMgdm9pZCBjdHJsX2NvbXBsZXRlIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBjdHJsX2N0eAkJKmN0eCA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0CSpyZXFwOworCXN0cnVjdCBzdWJjYXNlCQkqc3ViY2FzZTsKKwlpbnQJCQlzdGF0dXMgPSB1cmItPnN0YXR1czsKKworCXJlcXAgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKXVyYi0+c2V0dXBfcGFja2V0OworCXN1YmNhc2UgPSBjb250YWluZXJfb2YgKHJlcXAsIHN0cnVjdCBzdWJjYXNlLCBzZXR1cCk7CisKKwlzcGluX2xvY2sgKCZjdHgtPmxvY2spOworCWN0eC0+Y291bnQtLTsKKwljdHgtPnBlbmRpbmctLTsKKworCS8qIHF1ZXVlIG11c3QgdHJhbnNmZXIgYW5kIGNvbXBsZXRlIGluIGZpZm8gb3JkZXIsIHVubGVzcworCSAqIHVzYl91bmxpbmtfdXJiKCkgaXMgdXNlZCB0byB1bmxpbmsgc29tZXRoaW5nIG5vdCBhdCB0aGUKKwkgKiBwaHlzaWNhbCBxdWV1ZSBoZWFkIChub3QgdGVzdGVkKS4KKwkgKi8KKwlpZiAoc3ViY2FzZS0+bnVtYmVyID4gMCkgeworCQlpZiAoKHN1YmNhc2UtPm51bWJlciAtIGN0eC0+bGFzdCkgIT0gMSkgeworCQkJZGJnICgic3ViY2FzZSAlZCBjb21wbGV0ZWQgb3V0IG9mIG9yZGVyLCBsYXN0ICVkIiwKKwkJCQkJc3ViY2FzZS0+bnVtYmVyLCBjdHgtPmxhc3QpOworCQkJc3RhdHVzID0gLUVET007CisJCQljdHgtPmxhc3QgPSBzdWJjYXNlLT5udW1iZXI7CisJCQlnb3RvIGVycm9yOworCQl9CisJfQorCWN0eC0+bGFzdCA9IHN1YmNhc2UtPm51bWJlcjsKKworCS8qIHN1Y2NlZWQgb3IgZmF1bHQgaW4gb25seSBvbmUgd2F5PyAqLworCWlmIChzdGF0dXMgPT0gc3ViY2FzZS0+ZXhwZWN0ZWQpCisJCXN0YXR1cyA9IDA7CisKKwkvKiBhc3luYyB1bmxpbmsgZm9yIGNsZWFudXA/ICovCisJZWxzZSBpZiAoc3RhdHVzICE9IC1FQ09OTlJFU0VUKSB7CisKKwkJLyogc29tZSBmYXVsdHMgYXJlIGFsbG93ZWQsIG5vdCByZXF1aXJlZCAqLworCQlpZiAoc3ViY2FzZS0+ZXhwZWN0ZWQgPiAwICYmICgKKwkJCSAgKCh1cmItPnN0YXR1cyA9PSAtc3ViY2FzZS0+ZXhwZWN0ZWQJLyogaGFwcGVuZWQgKi8KKwkJCSAgIHx8IHVyYi0+c3RhdHVzID09IDApKSkpCQkvKiBkaWRuJ3QgKi8KKwkJCXN0YXR1cyA9IDA7CisJCS8qIHNvbWV0aW1lcyBtb3JlIHRoYW4gb25lIGZhdWx0IGlzIGFsbG93ZWQgKi8KKwkJZWxzZSBpZiAoc3ViY2FzZS0+bnVtYmVyID09IDEyICYmIHN0YXR1cyA9PSAtRVBJUEUpCisJCQlzdGF0dXMgPSAwOworCQllbHNlCisJCQlkYmcgKCJzdWJ0ZXN0ICVkIGVycm9yLCBzdGF0dXMgJWQiLAorCQkJCQlzdWJjYXNlLT5udW1iZXIsIHN0YXR1cyk7CisJfQorCisJLyogdW5leHBlY3RlZCBzdGF0dXMgY29kZXMgbWVhbiBlcnJvcnM7IGlkZWFsbHksIGluIGhhcmR3YXJlICovCisJaWYgKHN0YXR1cykgeworZXJyb3I6CisJCWlmIChjdHgtPnN0YXR1cyA9PSAwKSB7CisJCQlpbnQJCWk7CisKKwkJCWN0eC0+c3RhdHVzID0gc3RhdHVzOworCQkJaW5mbyAoImNvbnRyb2wgcXVldWUgJTAyeC4lMDJ4LCBlcnIgJWQsICVkIGxlZnQiLAorCQkJCQlyZXFwLT5iUmVxdWVzdFR5cGUsIHJlcXAtPmJSZXF1ZXN0LAorCQkJCQlzdGF0dXMsIGN0eC0+Y291bnQpOworCisJCQkvKiBGSVhNRSB0aGlzICJ1bmxpbmsgZXZlcnl0aGluZyIgZXhpdCByb3V0ZSBzaG91bGQKKwkJCSAqIGJlIGEgc2VwYXJhdGUgdGVzdCBjYXNlLgorCQkJICovCisKKwkJCS8qIHVubGluayB3aGF0ZXZlcidzIHN0aWxsIHBlbmRpbmcgKi8KKwkJCWZvciAoaSA9IDE7IGkgPCBjdHgtPnBhcmFtLT5zZ2xlbjsgaSsrKSB7CisJCQkJc3RydWN0IHVyYgkqdSA9IGN0eC0+dXJiIFsKKwkoaSArIHN1YmNhc2UtPm51bWJlcikgJSBjdHgtPnBhcmFtLT5zZ2xlbl07CisKKwkJCQlpZiAodSA9PSB1cmIgfHwgIXUtPmRldikKKwkJCQkJY29udGludWU7CisJCQkJc3RhdHVzID0gdXNiX3VubGlua191cmIgKHUpOworCQkJCXN3aXRjaCAoc3RhdHVzKSB7CisJCQkJY2FzZSAtRUlOUFJPR1JFU1M6CisJCQkJY2FzZSAtRUJVU1k6CisJCQkJY2FzZSAtRUlEUk06CisJCQkJCWNvbnRpbnVlOworCQkJCWRlZmF1bHQ6CisJCQkJCWRiZyAoInVyYiB1bmxpbmsgLS0+ICVkIiwgc3RhdHVzKTsKKwkJCQl9CisJCQl9CisJCQlzdGF0dXMgPSBjdHgtPnN0YXR1czsKKwkJfQorCX0KKworCS8qIHJlc3VibWl0IGlmIHdlIG5lZWQgdG8sIGVsc2UgbWFyayB0aGlzIGFzIGRvbmUgKi8KKwlpZiAoKHN0YXR1cyA9PSAwKSAmJiAoY3R4LT5wZW5kaW5nIDwgY3R4LT5jb3VudCkpIHsKKwkJaWYgKChzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBTTEFCX0FUT01JQykpICE9IDApIHsKKwkJCWRiZyAoImNhbid0IHJlc3VibWl0IGN0cmwgJTAyeC4lMDJ4LCBlcnIgJWQiLAorCQkJCXJlcXAtPmJSZXF1ZXN0VHlwZSwgcmVxcC0+YlJlcXVlc3QsIHN0YXR1cyk7CisJCQl1cmItPmRldiA9IE5VTEw7CisJCX0gZWxzZQorCQkJY3R4LT5wZW5kaW5nKys7CisJfSBlbHNlCisJCXVyYi0+ZGV2ID0gTlVMTDsKKwkKKwkvKiBzaWduYWwgY29tcGxldGlvbiB3aGVuIG5vdGhpbmcncyBxdWV1ZWQgKi8KKwlpZiAoY3R4LT5wZW5kaW5nID09IDApCisJCWNvbXBsZXRlICgmY3R4LT5jb21wbGV0ZSk7CisJc3Bpbl91bmxvY2sgKCZjdHgtPmxvY2spOworfQorCitzdGF0aWMgaW50Cit0ZXN0X2N0cmxfcXVldWUgKHN0cnVjdCB1c2J0ZXN0X2RldiAqZGV2LCBzdHJ1Y3QgdXNidGVzdF9wYXJhbSAqcGFyYW0pCit7CisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYgPSB0ZXN0ZGV2X3RvX3VzYmRldiAoZGV2KTsKKwlzdHJ1Y3QgdXJiCQkqKnVyYjsKKwlzdHJ1Y3QgY3RybF9jdHgJCWNvbnRleHQ7CisJaW50CQkJaTsKKworCXNwaW5fbG9ja19pbml0ICgmY29udGV4dC5sb2NrKTsKKwljb250ZXh0LmRldiA9IGRldjsKKwlpbml0X2NvbXBsZXRpb24gKCZjb250ZXh0LmNvbXBsZXRlKTsKKwljb250ZXh0LmNvdW50ID0gcGFyYW0tPnNnbGVuICogcGFyYW0tPml0ZXJhdGlvbnM7CisJY29udGV4dC5wZW5kaW5nID0gMDsKKwljb250ZXh0LnN0YXR1cyA9IC1FTk9NRU07CisJY29udGV4dC5wYXJhbSA9IHBhcmFtOworCWNvbnRleHQubGFzdCA9IC0xOworCisJLyogYWxsb2NhdGUgYW5kIGluaXQgdGhlIHVyYnMgd2UnbGwgcXVldWUuCisJICogYXMgd2l0aCBidWxrL2ludHIgc2dsaXN0cywgc2dsZW4gaXMgdGhlIHF1ZXVlIGRlcHRoOyBpdCBhbHNvCisJICogY29udHJvbHMgd2hpY2ggc3VidGVzdHMgcnVuIChtb3JlIHRlc3RzIHRoYW4gc2dsZW4pIG9yIHJlcnVuLgorCSAqLworCXVyYiA9IGttYWxsb2MgKHBhcmFtLT5zZ2xlbiAqIHNpemVvZiAoc3RydWN0IHVyYiAqKSwgU0xBQl9LRVJORUwpOworCWlmICghdXJiKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQgKHVyYiwgMCwgcGFyYW0tPnNnbGVuICogc2l6ZW9mIChzdHJ1Y3QgdXJiICopKTsKKwlmb3IgKGkgPSAwOyBpIDwgcGFyYW0tPnNnbGVuOyBpKyspIHsKKwkJaW50CQkJcGlwZSA9IHVzYl9yY3ZjdHJscGlwZSAodWRldiwgMCk7CisJCXVuc2lnbmVkCQlsZW47CisJCXN0cnVjdCB1cmIJCSp1OworCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0CXJlcTsKKwkJc3RydWN0IHN1YmNhc2UJCSpyZXFwOworCQlpbnQJCQlleHBlY3RlZCA9IDA7CisKKwkJLyogcmVxdWVzdHMgaGVyZSBhcmUgbW9zdGx5IGV4cGVjdGVkIHRvIHN1Y2NlZWQgb24gYW55CisJCSAqIGRldmljZSwgYnV0IHNvbWUgYXJlIGNob3NlbiB0byB0cmlnZ2VyIHByb3RvY29sIHN0YWxscworCQkgKiBvciBzaG9ydCByZWFkcy4KKwkJICovCisJCW1lbXNldCAoJnJlcSwgMCwgc2l6ZW9mIHJlcSk7CisJCXJlcS5iUmVxdWVzdCA9IFVTQl9SRVFfR0VUX0RFU0NSSVBUT1I7CisJCXJlcS5iUmVxdWVzdFR5cGUgPSBVU0JfRElSX0lOfFVTQl9SRUNJUF9ERVZJQ0U7CisKKwkJc3dpdGNoIChpICUgTlVNX1NVQkNBU0VTKSB7CisJCWNhc2UgMDoJCS8vIGdldCBkZXZpY2UgZGVzY3JpcHRvcgorCQkJcmVxLndWYWx1ZSA9IGNwdV90b19sZTE2IChVU0JfRFRfREVWSUNFIDw8IDgpOworCQkJbGVuID0gc2l6ZW9mIChzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CQkvLyBnZXQgZmlyc3QgY29uZmlnIGRlc2NyaXB0b3IgKG9ubHkpCisJCQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYgKChVU0JfRFRfQ09ORklHIDw8IDgpIHwgMCk7CisJCQlsZW4gPSBzaXplb2YgKHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IpOworCQkJYnJlYWs7CisJCWNhc2UgMjoJCS8vIGdldCBhbHRzZXR0aW5nIChPRlRFTiBTVEFMTFMpCisJCQlyZXEuYlJlcXVlc3QgPSBVU0JfUkVRX0dFVF9JTlRFUkZBQ0U7CisJCQlyZXEuYlJlcXVlc3RUeXBlID0gVVNCX0RJUl9JTnxVU0JfUkVDSVBfSU5URVJGQUNFOworCQkJLy8gaW5kZXggPSAwIG1lYW5zIGZpcnN0IGludGVyZmFjZQorCQkJbGVuID0gMTsKKwkJCWV4cGVjdGVkID0gRVBJUEU7CisJCQlicmVhazsKKwkJY2FzZSAzOgkJLy8gZ2V0IGludGVyZmFjZSBzdGF0dXMKKwkJCXJlcS5iUmVxdWVzdCA9IFVTQl9SRVFfR0VUX1NUQVRVUzsKKwkJCXJlcS5iUmVxdWVzdFR5cGUgPSBVU0JfRElSX0lOfFVTQl9SRUNJUF9JTlRFUkZBQ0U7CisJCQkvLyBpbnRlcmZhY2UgMAorCQkJbGVuID0gMjsKKwkJCWJyZWFrOworCQljYXNlIDQ6CQkvLyBnZXQgZGV2aWNlIHN0YXR1cworCQkJcmVxLmJSZXF1ZXN0ID0gVVNCX1JFUV9HRVRfU1RBVFVTOworCQkJcmVxLmJSZXF1ZXN0VHlwZSA9IFVTQl9ESVJfSU58VVNCX1JFQ0lQX0RFVklDRTsKKwkJCWxlbiA9IDI7CisJCQlicmVhazsKKwkJY2FzZSA1OgkJLy8gZ2V0IGRldmljZSBxdWFsaWZpZXIgKE1BWSBTVEFMTCkKKwkJCXJlcS53VmFsdWUgPSBjcHVfdG9fbGUxNiAoVVNCX0RUX0RFVklDRV9RVUFMSUZJRVIgPDwgOCk7CisJCQlsZW4gPSBzaXplb2YgKHN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IpOworCQkJaWYgKHVkZXYtPnNwZWVkICE9IFVTQl9TUEVFRF9ISUdIKQorCQkJCWV4cGVjdGVkID0gRVBJUEU7CisJCQlicmVhazsKKwkJY2FzZSA2OgkJLy8gZ2V0IGZpcnN0IGNvbmZpZyBkZXNjcmlwdG9yLCBwbHVzIGludGVyZmFjZQorCQkJcmVxLndWYWx1ZSA9IGNwdV90b19sZTE2ICgoVVNCX0RUX0NPTkZJRyA8PCA4KSB8IDApOworCQkJbGVuID0gc2l6ZW9mIChzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yKTsKKwkJCWxlbiArPSBzaXplb2YgKHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IpOworCQkJYnJlYWs7CisJCWNhc2UgNzoJCS8vIGdldCBpbnRlcmZhY2UgZGVzY3JpcHRvciAoQUxXQVlTIFNUQUxMUykKKwkJCXJlcS53VmFsdWUgPSBjcHVfdG9fbGUxNiAoVVNCX0RUX0lOVEVSRkFDRSA8PCA4KTsKKwkJCS8vIGludGVyZmFjZSA9PSAwCisJCQlsZW4gPSBzaXplb2YgKHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IpOworCQkJZXhwZWN0ZWQgPSBFUElQRTsKKwkJCWJyZWFrOworCQkvLyBOT1RFOiB0d28gY29uc2VjdXRpdmUgc3RhbGxzIGluIHRoZSBxdWV1ZSBoZXJlLgorCQkvLyB0aGF0IHRlc3RzIGZhdWx0IHJlY292ZXJ5IGEgYml0IG1vcmUgYWdncmVzc2l2ZWx5LgorCQljYXNlIDg6CQkvLyBjbGVhciBlbmRwb2ludCBoYWx0IChVU1VBTExZIFNUQUxMUykKKwkJCXJlcS5iUmVxdWVzdCA9IFVTQl9SRVFfQ0xFQVJfRkVBVFVSRTsKKwkJCXJlcS5iUmVxdWVzdFR5cGUgPSBVU0JfUkVDSVBfRU5EUE9JTlQ7CisJCQkvLyB3VmFsdWUgMCA9PSBlcCBoYWx0CisJCQkvLyB3SW5kZXggMCA9PSBlcDAgKHNob3VsZG4ndCBoYWx0ISkKKwkJCWxlbiA9IDA7CisJCQlwaXBlID0gdXNiX3NuZGN0cmxwaXBlICh1ZGV2LCAwKTsKKwkJCWV4cGVjdGVkID0gRVBJUEU7CisJCQlicmVhazsKKwkJY2FzZSA5OgkJLy8gZ2V0IGVuZHBvaW50IHN0YXR1cworCQkJcmVxLmJSZXF1ZXN0ID0gVVNCX1JFUV9HRVRfU1RBVFVTOworCQkJcmVxLmJSZXF1ZXN0VHlwZSA9IFVTQl9ESVJfSU58VVNCX1JFQ0lQX0VORFBPSU5UOworCQkJLy8gZW5kcG9pbnQgMAorCQkJbGVuID0gMjsKKwkJCWJyZWFrOworCQljYXNlIDEwOgkvLyB0cmlnZ2VyIHNob3J0IHJlYWQgKEVSRU1PVEVJTykKKwkJCXJlcS53VmFsdWUgPSBjcHVfdG9fbGUxNiAoKFVTQl9EVF9DT05GSUcgPDwgOCkgfCAwKTsKKwkJCWxlbiA9IDEwMjQ7CisJCQlleHBlY3RlZCA9IC1FUkVNT1RFSU87CisJCQlicmVhazsKKwkJLy8gTk9URTogdHdvIGNvbnNlY3V0aXZlIF9kaWZmZXJlbnRfIGZhdWx0cyBpbiB0aGUgcXVldWUuCisJCWNhc2UgMTE6CS8vIGdldCBlbmRwb2ludCBkZXNjcmlwdG9yIChBTFdBWVMgU1RBTExTKQorCQkJcmVxLndWYWx1ZSA9IGNwdV90b19sZTE2IChVU0JfRFRfRU5EUE9JTlQgPDwgOCk7CisJCQkvLyBlbmRwb2ludCA9PSAwCisJCQlsZW4gPSBzaXplb2YgKHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IpOworCQkJZXhwZWN0ZWQgPSBFUElQRTsKKwkJCWJyZWFrOworCQkvLyBOT1RFOiBzb21ldGltZXMgZXZlbiBhIHRoaXJkIGZhdWx0IGluIHRoZSBxdWV1ZSEKKwkJY2FzZSAxMjoJLy8gZ2V0IHN0cmluZyAwIGRlc2NyaXB0b3IgKE1BWSBTVEFMTCkKKwkJCXJlcS53VmFsdWUgPSBjcHVfdG9fbGUxNiAoVVNCX0RUX1NUUklORyA8PCA4KTsKKwkJCS8vIHN0cmluZyA9PSAwLCBmb3IgbGFuZ3VhZ2UgSURzCisJCQlsZW4gPSBzaXplb2YgKHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IpOworCQkJLy8gbWF5IHN1Y2NlZWQgd2hlbiA+IDQgbGFuZ3VhZ2VzCisJCQlleHBlY3RlZCA9IEVSRU1PVEVJTzsJLy8gb3IgRVBJUEUsIGlmIG5vIHN0cmluZ3MKKwkJCWJyZWFrOworCQljYXNlIDEzOgkvLyBzaG9ydCByZWFkLCByZXNlbWJsaW5nIGNhc2UgMTAKKwkJCXJlcS53VmFsdWUgPSBjcHVfdG9fbGUxNiAoKFVTQl9EVF9DT05GSUcgPDwgOCkgfCAwKTsKKwkJCS8vIGxhc3QgZGF0YSBwYWNrZXQgInNob3VsZCIgYmUgREFUQTEsIG5vdCBEQVRBMAorCQkJbGVuID0gMTAyNCAtIHVkZXYtPmRlc2NyaXB0b3IuYk1heFBhY2tldFNpemUwOworCQkJZXhwZWN0ZWQgPSAtRVJFTU9URUlPOworCQkJYnJlYWs7CisJCWNhc2UgMTQ6CS8vIHNob3J0IHJlYWQ7IHRyeSB0byBmaWxsIHRoZSBsYXN0IHBhY2tldAorCQkJcmVxLndWYWx1ZSA9IGNwdV90b19sZTE2ICgoVVNCX0RUX0RFVklDRSA8PCA4KSB8IDApOworCQkJLy8gZGV2aWNlIGRlc2NyaXB0b3Igc2l6ZSA9PSAxOCBieXRlcyAKKwkJCWxlbiA9IHVkZXYtPmRlc2NyaXB0b3IuYk1heFBhY2tldFNpemUwOworCQkJc3dpdGNoIChsZW4pIHsKKwkJCWNhc2UgODoJCWxlbiA9IDI0OyBicmVhazsKKwkJCWNhc2UgMTY6CWxlbiA9IDMyOyBicmVhazsKKwkJCX0KKwkJCWV4cGVjdGVkID0gLUVSRU1PVEVJTzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZXJyICgiYm9ndXMgbnVtYmVyIG9mIGN0cmwgcXVldWUgdGVzdGNhc2VzISIpOworCQkJY29udGV4dC5zdGF0dXMgPSAtRUlOVkFMOworCQkJZ290byBjbGVhbnVwOworCQl9CisJCXJlcS53TGVuZ3RoID0gY3B1X3RvX2xlMTYgKGxlbik7CisJCXVyYiBbaV0gPSB1ID0gc2ltcGxlX2FsbG9jX3VyYiAodWRldiwgcGlwZSwgbGVuKTsKKwkJaWYgKCF1KQorCQkJZ290byBjbGVhbnVwOworCisJCXJlcXAgPSB1c2JfYnVmZmVyX2FsbG9jICh1ZGV2LCBzaXplb2YgKnJlcXAsIFNMQUJfS0VSTkVMLAorCQkJCSZ1LT5zZXR1cF9kbWEpOworCQlpZiAoIXJlcXApCisJCQlnb3RvIGNsZWFudXA7CisJCXJlcXAtPnNldHVwID0gcmVxOworCQlyZXFwLT5udW1iZXIgPSBpICUgTlVNX1NVQkNBU0VTOworCQlyZXFwLT5leHBlY3RlZCA9IGV4cGVjdGVkOworCQl1LT5zZXR1cF9wYWNrZXQgPSAoY2hhciAqKSAmcmVxcC0+c2V0dXA7CisKKwkJdS0+Y29udGV4dCA9ICZjb250ZXh0OworCQl1LT5jb21wbGV0ZSA9IGN0cmxfY29tcGxldGU7CisJCXUtPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9BU1lOQ19VTkxJTks7CisJfQorCisJLyogcXVldWUgdGhlIHVyYnMgKi8KKwljb250ZXh0LnVyYiA9IHVyYjsKKwlzcGluX2xvY2tfaXJxICgmY29udGV4dC5sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgcGFyYW0tPnNnbGVuOyBpKyspIHsKKwkJY29udGV4dC5zdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiIFtpXSwgU0xBQl9BVE9NSUMpOworCQlpZiAoY29udGV4dC5zdGF0dXMgIT0gMCkgeworCQkJZGJnICgiY2FuJ3Qgc3VibWl0IHVyYlslZF0sIHN0YXR1cyAlZCIsCisJCQkJCWksIGNvbnRleHQuc3RhdHVzKTsKKwkJCWNvbnRleHQuY291bnQgPSBjb250ZXh0LnBlbmRpbmc7CisJCQlicmVhazsKKwkJfQorCQljb250ZXh0LnBlbmRpbmcrKzsKKwl9CisJc3Bpbl91bmxvY2tfaXJxICgmY29udGV4dC5sb2NrKTsKKworCS8qIEZJWE1FICBzZXQgdGltZXIgYW5kIHRpbWUgb3V0OyBwcm92aWRlIGEgZGlzY29ubmVjdCBob29rICovCisKKwkvKiB3YWl0IGZvciB0aGUgbGFzdCBvbmUgdG8gY29tcGxldGUgKi8KKwlpZiAoY29udGV4dC5wZW5kaW5nID4gMCkKKwkJd2FpdF9mb3JfY29tcGxldGlvbiAoJmNvbnRleHQuY29tcGxldGUpOworCitjbGVhbnVwOgorCWZvciAoaSA9IDA7IGkgPCBwYXJhbS0+c2dsZW47IGkrKykgeworCQlpZiAoIXVyYiBbaV0pCisJCQljb250aW51ZTsKKwkJdXJiIFtpXS0+ZGV2ID0gdWRldjsKKwkJaWYgKHVyYiBbaV0tPnNldHVwX3BhY2tldCkKKwkJCXVzYl9idWZmZXJfZnJlZSAodWRldiwgc2l6ZW9mIChzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSwKKwkJCQkJdXJiIFtpXS0+c2V0dXBfcGFja2V0LAorCQkJCQl1cmIgW2ldLT5zZXR1cF9kbWEpOworCQlzaW1wbGVfZnJlZV91cmIgKHVyYiBbaV0pOworCX0KKwlrZnJlZSAodXJiKTsKKwlyZXR1cm4gY29udGV4dC5zdGF0dXM7Cit9CisjdW5kZWYgTlVNX1NVQkNBU0VTCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgdW5saW5rMV9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQJc3RhdHVzID0gdXJiLT5zdGF0dXM7CisKKwkvLyB3ZSAia25vdyIgLUVQSVBFIChzdGFsbCkgbmV2ZXIgaGFwcGVucworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBTTEFCX0FUT01JQyk7CisJaWYgKHN0YXR1cykgeworCQl1cmItPnN0YXR1cyA9IHN0YXR1czsKKwkJY29tcGxldGUgKChzdHJ1Y3QgY29tcGxldGlvbiAqKSB1cmItPmNvbnRleHQpOworCX0KK30KKworc3RhdGljIGludCB1bmxpbmsxIChzdHJ1Y3QgdXNidGVzdF9kZXYgKmRldiwgaW50IHBpcGUsIGludCBzaXplLCBpbnQgYXN5bmMpCit7CisJc3RydWN0IHVyYgkJKnVyYjsKKwlzdHJ1Y3QgY29tcGxldGlvbgljb21wbGV0aW9uOworCWludAkJCXJldHZhbCA9IDA7CisKKwlpbml0X2NvbXBsZXRpb24gKCZjb21wbGV0aW9uKTsKKwl1cmIgPSBzaW1wbGVfYWxsb2NfdXJiICh0ZXN0ZGV2X3RvX3VzYmRldiAoZGV2KSwgcGlwZSwgc2l6ZSk7CisJaWYgKCF1cmIpCisJCXJldHVybiAtRU5PTUVNOworCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0FTWU5DX1VOTElOSzsKKwl1cmItPmNvbnRleHQgPSAmY29tcGxldGlvbjsKKwl1cmItPmNvbXBsZXRlID0gdW5saW5rMV9jYWxsYmFjazsKKworCS8qIGtlZXAgdGhlIGVuZHBvaW50IGJ1c3kuICB0aGVyZSBhcmUgbG90cyBvZiBoYy9oY2QtaW50ZXJuYWwKKwkgKiBzdGF0ZXMsIGFuZCB0ZXN0aW5nIHNob3VsZCBnZXQgdG8gYWxsIG9mIHRoZW0gb3ZlciB0aW1lLgorCSAqCisJICogRklYTUUgd2FudCBhZGRpdGlvbmFsIHRlc3RzIGZvciB3aGVuIGVuZHBvaW50IGlzIFNUQUxMaW5nCisJICogZHVlIHRvIGVycm9ycywgb3IgaXMganVzdCBOQUtpbmcgcmVxdWVzdHMuCisJICovCisJaWYgKChyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBTTEFCX0tFUk5FTCkpICE9IDApIHsKKwkJZGV2X2RiZyAoJmRldi0+aW50Zi0+ZGV2LCAic3VibWl0IGZhaWwgJWRcbiIsIHJldHZhbCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJLyogdW5saW5raW5nIHRoYXQgc2hvdWxkIGFsd2F5cyB3b3JrLiAgdmFyaWFibGUgZGVsYXkgdGVzdHMgbW9yZQorCSAqIGhjZCBzdGF0ZXMgYW5kIGNvZGUgcGF0aHMsIGV2ZW4gd2l0aCBsaXR0bGUgb3RoZXIgc3lzdGVtIGxvYWQuCisJICovCisJbXNsZWVwIChqaWZmaWVzICUgKDIgKiBJTlRFUlJVUFRfUkFURSkpOworCWlmIChhc3luYykgeworcmV0cnk6CisJCXJldHZhbCA9IHVzYl91bmxpbmtfdXJiICh1cmIpOworCQlpZiAocmV0dmFsID09IC1FQlVTWSB8fCByZXR2YWwgPT0gLUVJRFJNKSB7CisJCQkvKiB3ZSBjYW4ndCB1bmxpbmsgdXJicyB3aGlsZSB0aGV5J3JlIGNvbXBsZXRpbmcuCisJCQkgKiBvciBpZiB0aGV5J3ZlIGNvbXBsZXRlZCwgYW5kIHdlIGhhdmVuJ3QgcmVzdWJtaXR0ZWQuCisJCQkgKiAibm9ybWFsIiBkcml2ZXJzIHdvdWxkIHByZXZlbnQgcmVzdWJtaXNzaW9uLCBidXQKKwkJCSAqIHNpbmNlIHdlJ3JlIHRlc3RpbmcgdW5saW5rIHBhdGhzLCB3ZSBjYW4ndC4KKwkJCSAqLworCQkJZGV2X2RiZyAoJmRldi0+aW50Zi0+ZGV2LCAidW5saW5rIHJldHJ5XG4iKTsKKwkJCWdvdG8gcmV0cnk7CisJCX0KKwl9IGVsc2UKKwkJdXNiX2tpbGxfdXJiICh1cmIpOworCWlmICghKHJldHZhbCA9PSAwIHx8IHJldHZhbCA9PSAtRUlOUFJPR1JFU1MpKSB7CisJCWRldl9kYmcgKCZkZXYtPmludGYtPmRldiwgInVubGluayBmYWlsICVkXG4iLCByZXR2YWwpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXdhaXRfZm9yX2NvbXBsZXRpb24gKCZjb21wbGV0aW9uKTsKKwlyZXR2YWwgPSB1cmItPnN0YXR1czsKKwlzaW1wbGVfZnJlZV91cmIgKHVyYik7CisKKwlpZiAoYXN5bmMpCisJCXJldHVybiAocmV0dmFsID09IC1FQ09OTlJFU0VUKSA/IDAgOiByZXR2YWwgLSAxMDAwOworCWVsc2UKKwkJcmV0dXJuIChyZXR2YWwgPT0gLUVOT0VOVCB8fCByZXR2YWwgPT0gLUVQRVJNKSA/CisJCQkJMCA6IHJldHZhbCAtIDIwMDA7Cit9CisKK3N0YXRpYyBpbnQgdW5saW5rX3NpbXBsZSAoc3RydWN0IHVzYnRlc3RfZGV2ICpkZXYsIGludCBwaXBlLCBpbnQgbGVuKQoreworCWludAkJCXJldHZhbCA9IDA7CisKKwkvKiB0ZXN0IHN5bmMgYW5kIGFzeW5jIHBhdGhzICovCisJcmV0dmFsID0gdW5saW5rMSAoZGV2LCBwaXBlLCBsZW4sIDEpOworCWlmICghcmV0dmFsKQorCQlyZXR2YWwgPSB1bmxpbmsxIChkZXYsIHBpcGUsIGxlbiwgMCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCB2ZXJpZnlfbm90X2hhbHRlZCAoaW50IGVwLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50CXJldHZhbDsKKwl1MTYJc3RhdHVzOworCisJLyogc2hvdWxkbid0IGxvb2sgb3IgYWN0IGhhbHRlZCAqLworCXJldHZhbCA9IHVzYl9nZXRfc3RhdHVzICh1cmItPmRldiwgVVNCX1JFQ0lQX0VORFBPSU5ULCBlcCwgJnN0YXR1cyk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJZGJnICgiZXAgJTAyeCBjb3VsZG4ndCBnZXQgbm8taGFsdCBzdGF0dXMsICVkIiwgZXAsIHJldHZhbCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCWlmIChzdGF0dXMgIT0gMCkgeworCQlkYmcgKCJlcCAlMDJ4IGJvZ3VzIHN0YXR1czogJTA0eCAhPSAwIiwgZXAsIHN0YXR1cyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR2YWwgPSBzaW1wbGVfaW8gKHVyYiwgMSwgMCwgMCwgX19GVU5DVElPTl9fKTsKKwlpZiAocmV0dmFsICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZlcmlmeV9oYWx0ZWQgKGludCBlcCwgc3RydWN0IHVyYiAqdXJiKQoreworCWludAlyZXR2YWw7CisJdTE2CXN0YXR1czsKKworCS8qIHNob3VsZCBsb29rIGFuZCBhY3QgaGFsdGVkICovCisJcmV0dmFsID0gdXNiX2dldF9zdGF0dXMgKHVyYi0+ZGV2LCBVU0JfUkVDSVBfRU5EUE9JTlQsIGVwLCAmc3RhdHVzKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkYmcgKCJlcCAlMDJ4IGNvdWxkbid0IGdldCBoYWx0IHN0YXR1cywgJWQiLCBlcCwgcmV0dmFsKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJaWYgKHN0YXR1cyAhPSAxKSB7CisJCWRiZyAoImVwICUwMnggYm9ndXMgc3RhdHVzOiAlMDR4ICE9IDEiLCBlcCwgc3RhdHVzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHZhbCA9IHNpbXBsZV9pbyAodXJiLCAxLCAwLCAtRVBJUEUsIF9fRlVOQ1RJT05fXyk7CisJaWYgKHJldHZhbCAhPSAtRVBJUEUpCisJCXJldHVybiAtRUlOVkFMOworCXJldHZhbCA9IHNpbXBsZV9pbyAodXJiLCAxLCAwLCAtRVBJUEUsICJ2ZXJpZnlfc3RpbGxfaGFsdGVkIik7CisJaWYgKHJldHZhbCAhPSAtRVBJUEUpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRlc3RfaGFsdCAoaW50IGVwLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50CXJldHZhbDsKKworCS8qIHNob3VsZG4ndCBsb29rIG9yIGFjdCBoYWx0ZWQgbm93ICovCisJcmV0dmFsID0gdmVyaWZ5X25vdF9oYWx0ZWQgKGVwLCB1cmIpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJLyogc2V0IGhhbHQgKHByb3RvY29sIHRlc3Qgb25seSksIHZlcmlmeSBpdCB3b3JrZWQgKi8KKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cgKHVyYi0+ZGV2LCB1c2Jfc25kY3RybHBpcGUgKHVyYi0+ZGV2LCAwKSwKKwkJCVVTQl9SRVFfU0VUX0ZFQVRVUkUsIFVTQl9SRUNJUF9FTkRQT0lOVCwKKwkJCVVTQl9FTkRQT0lOVF9IQUxULCBlcCwKKwkJCU5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkYmcgKCJlcCAlMDJ4IGNvdWxkbid0IHNldCBoYWx0LCAlZCIsIGVwLCByZXR2YWwpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlyZXR2YWwgPSB2ZXJpZnlfaGFsdGVkIChlcCwgdXJiKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8qIGNsZWFyIGhhbHQgKHRlc3RzIEFQSSArIHByb3RvY29sKSwgdmVyaWZ5IGl0IHdvcmtlZCAqLworCXJldHZhbCA9IHVzYl9jbGVhcl9oYWx0ICh1cmItPmRldiwgdXJiLT5waXBlKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkYmcgKCJlcCAlMDJ4IGNvdWxkbid0IGNsZWFyIGhhbHQsICVkIiwgZXAsIHJldHZhbCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCXJldHZhbCA9IHZlcmlmeV9ub3RfaGFsdGVkIChlcCwgdXJiKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8qIE5PVEU6ICBjb3VsZCBhbHNvIHZlcmlmeSBTRVRfSU5URVJGQUNFIGNsZWFyIGhhbHRzIC4uLiAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFsdF9zaW1wbGUgKHN0cnVjdCB1c2J0ZXN0X2RldiAqZGV2KQoreworCWludAkJZXA7CisJaW50CQlyZXR2YWwgPSAwOworCXN0cnVjdCB1cmIJKnVyYjsKKworCXVyYiA9IHNpbXBsZV9hbGxvY191cmIgKHRlc3RkZXZfdG9fdXNiZGV2IChkZXYpLCAwLCA1MTIpOworCWlmICh1cmIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoZGV2LT5pbl9waXBlKSB7CisJCWVwID0gdXNiX3BpcGVlbmRwb2ludCAoZGV2LT5pbl9waXBlKSB8IFVTQl9ESVJfSU47CisJCXVyYi0+cGlwZSA9IGRldi0+aW5fcGlwZTsKKwkJcmV0dmFsID0gdGVzdF9oYWx0IChlcCwgdXJiKTsKKwkJaWYgKHJldHZhbCA8IDApCisJCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKGRldi0+b3V0X3BpcGUpIHsKKwkJZXAgPSB1c2JfcGlwZWVuZHBvaW50IChkZXYtPm91dF9waXBlKTsKKwkJdXJiLT5waXBlID0gZGV2LT5vdXRfcGlwZTsKKwkJcmV0dmFsID0gdGVzdF9oYWx0IChlcCwgdXJiKTsKKwl9Citkb25lOgorCXNpbXBsZV9mcmVlX3VyYiAodXJiKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBDb250cm9sIE9VVCB0ZXN0cyB1c2UgdGhlIHZlbmRvciBjb250cm9sIHJlcXVlc3RzIGZyb20gSW50ZWwncworICogVVNCIDIuMCBjb21wbGlhbmNlIHRlc3QgZGV2aWNlOiAgd3JpdGUgYSBidWZmZXIsIHJlYWQgaXQgYmFjay4KKyAqCisgKiBJbnRlbCdzIHNwZWMgb25seSBfcmVxdWlyZXNfIHRoYXQgaXQgd29yayBmb3Igb25lIHBhY2tldCwgd2hpY2gKKyAqIGlzIHByZXR0eSB3ZWFrLiAgIFNvbWUgSENEcyBwbGFjZSBsaW1pdHMgaGVyZTsgbW9zdCBkZXZpY2VzIHdpbGwKKyAqIG5lZWQgdG8gYmUgYWJsZSB0byBoYW5kbGUgbW9yZSB0aGFuIG9uZSBPVVQgZGF0YSBwYWNrZXQuICBXZSdsbAorICogdHJ5IHdoYXRldmVyIHdlJ3JlIHRvbGQgdG8gdHJ5LgorICovCitzdGF0aWMgaW50IGN0cmxfb3V0IChzdHJ1Y3QgdXNidGVzdF9kZXYgKmRldiwKKwkJdW5zaWduZWQgY291bnQsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmFyeSkKK3sKKwl1bnNpZ25lZAkJaSwgaiwgbGVuLCByZXR2YWw7CisJdTgJCQkqYnVmOworCWNoYXIJCQkqd2hhdCA9ICI/IjsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKKwkKKwlpZiAobGVuZ3RoID4gMHhmZmZmIHx8IHZhcnkgPj0gbGVuZ3RoKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJ1ZiA9IGttYWxsb2MobGVuZ3RoLCBTTEFCX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJdWRldiA9IHRlc3RkZXZfdG9fdXNiZGV2IChkZXYpOworCWxlbiA9IGxlbmd0aDsKKwlyZXR2YWwgPSAwOworCisJLyogTk9URTogIGhhcmR3YXJlIG1pZ2h0IHdlbGwgYWN0IGRpZmZlcmVudGx5IGlmIHdlIHB1c2hlZCBpdAorCSAqIHdpdGggbG90cyBiYWNrLXRvLWJhY2sgcXVldWVkIHJlcXVlc3RzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCS8qIHdyaXRlIHBhdHRlcm5lZCBkYXRhICovCisJCWZvciAoaiA9IDA7IGogPCBsZW47IGorKykKKwkJCWJ1ZiBbal0gPSBpICsgajsKKwkJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnICh1ZGV2LCB1c2Jfc25kY3RybHBpcGUgKHVkZXYsMCksCisJCQkJMHg1YiwgVVNCX0RJUl9PVVR8VVNCX1RZUEVfVkVORE9SLAorCQkJCTAsIDAsIGJ1ZiwgbGVuLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJCWlmIChyZXR2YWwgIT0gbGVuKSB7CisJCQl3aGF0ID0gIndyaXRlIjsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogcmVhZCBpdCBiYWNrIC0tIGFzc3VtaW5nIG5vdGhpbmcgaW50ZXJ2ZW5lZCEhICAqLworCQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cgKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSAodWRldiwwKSwKKwkJCQkweDVjLCBVU0JfRElSX0lOfFVTQl9UWVBFX1ZFTkRPUiwKKwkJCQkwLCAwLCBidWYsIGxlbiwgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCQlpZiAocmV0dmFsICE9IGxlbikgeworCQkJd2hhdCA9ICJyZWFkIjsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogZmFpbCBpZiB3ZSBjYW4ndCB2ZXJpZnkgKi8KKwkJZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKSB7CisJCQlpZiAoYnVmIFtqXSAhPSAodTgpIChpICsgaikpIHsKKwkJCQlJTkZPIChkZXYsICJjdHJsX291dCwgYnl0ZSAlZCBpcyAlZCBub3QgJWRcbiIsCisJCQkJCWosIGJ1ZiBbal0sICh1OCkgaSArIGopOworCQkJCXJldHZhbCA9IC1FQkFETVNHOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChyZXR2YWwgPCAwKSB7CisJCQl3aGF0ID0gInZlcmlmeSI7CisJCQlicmVhazsKKwkJfQorCisJCWxlbiArPSB2YXJ5OworCQlpZiAobGVuID4gbGVuZ3RoKQorCQkJbGVuID0gMDsKKwl9CisKKwlpZiAocmV0dmFsIDwgMCkKKwkJSU5GTyAoZGV2LCAiY3RybF9vdXQgJXMgZmFpbGVkLCBjb2RlICVkLCBjb3VudCAlZFxuIiwKKwkJCXdoYXQsIHJldHZhbCwgaSk7CisKKwlrZnJlZSAoYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBJU08gdGVzdHMgLi4uIG1pbWljcyBjb21tb24gdXNhZ2UKKyAqICAtIGJ1ZmZlciBsZW5ndGggaXMgc3BsaXQgaW50byBOIHBhY2tldHMgKG1vc3RseSBtYXhwYWNrZXQgc2l6ZWQpCisgKiAgLSBtdWx0aS1idWZmZXJzIGFjY29yZGluZyB0byBzZ2xlbgorICovCisKK3N0cnVjdCBpc29fY29udGV4dCB7CisJdW5zaWduZWQJCWNvdW50OworCXVuc2lnbmVkCQlwZW5kaW5nOworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IGNvbXBsZXRpb24JZG9uZTsKKwl1bnNpZ25lZCBsb25nCQllcnJvcnM7CisJc3RydWN0IHVzYnRlc3RfZGV2CSpkZXY7Cit9OworCitzdGF0aWMgdm9pZCBpc29fY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGlzb19jb250ZXh0CSpjdHggPSB1cmItPmNvbnRleHQ7CisKKwlzcGluX2xvY2soJmN0eC0+bG9jayk7CisJY3R4LT5jb3VudC0tOworCisJaWYgKHVyYi0+ZXJyb3JfY291bnQgPiAwKQorCQljdHgtPmVycm9ycyArPSB1cmItPmVycm9yX2NvdW50OworCisJaWYgKHVyYi0+c3RhdHVzID09IDAgJiYgY3R4LT5jb3VudCA+IChjdHgtPnBlbmRpbmcgLSAxKSkgeworCQlpbnQgc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJCXN3aXRjaCAoc3RhdHVzKSB7CisJCWNhc2UgMDoKKwkJCWdvdG8gZG9uZTsKKwkJZGVmYXVsdDoKKwkJCWRldl9kYmcgKCZjdHgtPmRldi0+aW50Zi0+ZGV2LAorCQkJCQkiaXNvIHJlc3VibWl0IGVyciAlZFxuIiwKKwkJCQkJc3RhdHVzKTsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJCWNhc2UgLUVOT0RFVjoJCQkvKiBkaXNjb25uZWN0ZWQgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCXNpbXBsZV9mcmVlX3VyYiAodXJiKTsKKworCWN0eC0+cGVuZGluZy0tOworCWlmIChjdHgtPnBlbmRpbmcgPT0gMCkgeworCQlpZiAoY3R4LT5lcnJvcnMpCisJCQlkZXZfZGJnICgmY3R4LT5kZXYtPmludGYtPmRldiwKKwkJCQkiaXNvIHRlc3QsICVsdSBlcnJvcnNcbiIsCisJCQkJY3R4LT5lcnJvcnMpOworCQljb21wbGV0ZSAoJmN0eC0+ZG9uZSk7CisJfQorZG9uZToKKwlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKK30KKworc3RhdGljIHN0cnVjdCB1cmIgKmlzb19hbGxvY191cmIgKAorCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2LAorCWludAkJCXBpcGUsCisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCSpkZXNjLAorCWxvbmcJCQlieXRlcworKQoreworCXN0cnVjdCB1cmIJCSp1cmI7CisJdW5zaWduZWQJCWksIG1heHAsIHBhY2tldHM7CisKKwlpZiAoYnl0ZXMgPCAwIHx8ICFkZXNjKQorCQlyZXR1cm4gTlVMTDsKKwltYXhwID0gMHg3ZmYgJiBsZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSk7CisJbWF4cCAqPSAxICsgKDB4MyAmIChsZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSkgPj4gMTEpKTsKKwlwYWNrZXRzID0gKGJ5dGVzICsgbWF4cCAtIDEpIC8gbWF4cDsKKworCXVyYiA9IHVzYl9hbGxvY191cmIgKHBhY2tldHMsIFNMQUJfS0VSTkVMKTsKKwlpZiAoIXVyYikKKwkJcmV0dXJuIHVyYjsKKwl1cmItPmRldiA9IHVkZXY7CisJdXJiLT5waXBlID0gcGlwZTsKKworCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBwYWNrZXRzOworCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJ5dGVzOworCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdXNiX2J1ZmZlcl9hbGxvYyAodWRldiwgYnl0ZXMsIFNMQUJfS0VSTkVMLAorCQkJJnVyYi0+dHJhbnNmZXJfZG1hKTsKKwlpZiAoIXVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CisJCXVzYl9mcmVlX3VyYiAodXJiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCW1lbXNldCAodXJiLT50cmFuc2Zlcl9idWZmZXIsIDAsIGJ5dGVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcGFja2V0czsgaSsrKSB7CisJCS8qIGhlcmUsIG9ubHkgdGhlIGxhc3QgcGFja2V0IHdpbGwgYmUgc2hvcnQgKi8KKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGggPSBtaW4gKCh1bnNpZ25lZCkgYnl0ZXMsIG1heHApOworCQlieXRlcyAtPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aDsKKworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCA9IG1heHAgKiBpOworCX0KKworCXVyYi0+Y29tcGxldGUgPSBpc29fY2FsbGJhY2s7CisJLy8gdXJiLT5jb250ZXh0ID0gU0VUIEJZIENBTExFUgorCXVyYi0+aW50ZXJ2YWwgPSAxIDw8IChkZXNjLT5iSW50ZXJ2YWwgLSAxKTsKKwl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQIHwgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJcmV0dXJuIHVyYjsKK30KKworc3RhdGljIGludAordGVzdF9pc29fcXVldWUgKHN0cnVjdCB1c2J0ZXN0X2RldiAqZGV2LCBzdHJ1Y3QgdXNidGVzdF9wYXJhbSAqcGFyYW0sCisJCWludCBwaXBlLCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJc3RydWN0IGlzb19jb250ZXh0CWNvbnRleHQ7CisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CisJdW5zaWduZWQJCWk7CisJdW5zaWduZWQgbG9uZwkJcGFja2V0cyA9IDA7CisJaW50CQkJc3RhdHVzOworCXN0cnVjdCB1cmIJCSp1cmJzWzEwXTsJLyogRklYTUUgbm8gbGltaXQgKi8KKworCWlmIChwYXJhbS0+c2dsZW4gPiAxMCkKKwkJcmV0dXJuIC1FRE9NOworCisJY29udGV4dC5jb3VudCA9IHBhcmFtLT5pdGVyYXRpb25zICogcGFyYW0tPnNnbGVuOworCWNvbnRleHQucGVuZGluZyA9IHBhcmFtLT5zZ2xlbjsKKwljb250ZXh0LmVycm9ycyA9IDA7CisJY29udGV4dC5kZXYgPSBkZXY7CisJaW5pdF9jb21wbGV0aW9uICgmY29udGV4dC5kb25lKTsKKwlzcGluX2xvY2tfaW5pdCAoJmNvbnRleHQubG9jayk7CisKKwltZW1zZXQgKHVyYnMsIDAsIHNpemVvZiB1cmJzKTsKKwl1ZGV2ID0gdGVzdGRldl90b191c2JkZXYgKGRldik7CisJZGV2X2RiZyAoJmRldi0+aW50Zi0+ZGV2LAorCQkiLi4uIGlzbyBwZXJpb2QgJWQgJXNmcmFtZXMsIHdNYXhQYWNrZXQgJTA0eFxuIiwKKwkJMSA8PCAoZGVzYy0+YkludGVydmFsIC0gMSksCisJCSh1ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgPyAibWljcm8iIDogIiIsCisJCWxlMTZfdG9fY3B1KGRlc2MtPndNYXhQYWNrZXRTaXplKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGFyYW0tPnNnbGVuOyBpKyspIHsKKwkJdXJicyBbaV0gPSBpc29fYWxsb2NfdXJiICh1ZGV2LCBwaXBlLCBkZXNjLAorCQkJCXBhcmFtLT5sZW5ndGgpOworCQlpZiAoIXVyYnMgW2ldKSB7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJZ290byBmYWlsOworCQl9CisJCXBhY2tldHMgKz0gdXJic1tpXS0+bnVtYmVyX29mX3BhY2tldHM7CisJCXVyYnMgW2ldLT5jb250ZXh0ID0gJmNvbnRleHQ7CisJfQorCXBhY2tldHMgKj0gcGFyYW0tPml0ZXJhdGlvbnM7CisJZGV2X2RiZyAoJmRldi0+aW50Zi0+ZGV2LAorCQkiLi4uIHRvdGFsICVsdSBtc2VjICglbHUgcGFja2V0cylcbiIsCisJCShwYWNrZXRzICogKDEgPDwgKGRlc2MtPmJJbnRlcnZhbCAtIDEpKSkKKwkJCS8gKCh1ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgPyA4IDogMSksCisJCXBhY2tldHMpOworCisJc3Bpbl9sb2NrX2lycSAoJmNvbnRleHQubG9jayk7CisJZm9yIChpID0gMDsgaSA8IHBhcmFtLT5zZ2xlbjsgaSsrKSB7CisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiICh1cmJzIFtpXSwgU0xBQl9BVE9NSUMpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJRVJST1IgKGRldiwgInN1Ym1pdCBpc29bJWRdLCBlcnJvciAlZFxuIiwgaSwgc3RhdHVzKTsKKwkJCWlmIChpID09IDApIHsKKwkJCQlzcGluX3VubG9ja19pcnEgKCZjb250ZXh0LmxvY2spOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKworCQkJc2ltcGxlX2ZyZWVfdXJiICh1cmJzIFtpXSk7CisJCQljb250ZXh0LnBlbmRpbmctLTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnEgKCZjb250ZXh0LmxvY2spOworCisJd2FpdF9mb3JfY29tcGxldGlvbiAoJmNvbnRleHQuZG9uZSk7CisJcmV0dXJuIDA7CisKK2ZhaWw6CisJZm9yIChpID0gMDsgaSA8IHBhcmFtLT5zZ2xlbjsgaSsrKSB7CisJCWlmICh1cmJzIFtpXSkKKwkJCXNpbXBsZV9mcmVlX3VyYiAodXJicyBbaV0pOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBXZSBvbmx5IGhhdmUgdGhpcyBvbmUgaW50ZXJmYWNlIHRvIHVzZXIgc3BhY2UsIHRocm91Z2ggdXNiZnMuCisgKiBVc2VyIG1vZGUgY29kZSBjYW4gc2NhbiB1c2JmcyB0byBmaW5kIE4gZGlmZmVyZW50IGRldmljZXMgKG1heWJlIG9uCisgKiBkaWZmZXJlbnQgYnVzc2VzKSB0byB1c2Ugd2hlbiB0ZXN0aW5nLCBhbmQgYWxsb2NhdGUgb25lIHRocmVhZCBwZXIKKyAqIHRlc3QuICBTbyBkaXNjb3ZlcnkgaXMgc2ltcGxpZmllZCwgYW5kIHdlIGhhdmUgbm8gZGV2aWNlIG5hbWluZyBpc3N1ZXMuCisgKgorICogRG9uJ3QgdXNlIHRoZXNlIG9ubHkgYXMgc3RyZXNzL2xvYWQgdGVzdHMuICBVc2UgdGhlbSBhbG9uZyB3aXRoIHdpdGgKKyAqIG90aGVyIFVTQiBidXMgYWN0aXZpdHk6ICBwbHVnZ2luZywgdW5wbHVnZ2luZywgbW91c2luZywgbXAzIHBsYXliYWNrLAorICogdmlkZW8gY2FwdHVyZSwgYW5kIHNvIG9uLiAgUnVuIGRpZmZlcmVudCB0ZXN0cyBhdCBkaWZmZXJlbnQgdGltZXMsIGluCisgKiBkaWZmZXJlbnQgc2VxdWVuY2VzLiAgTm90aGluZyBoZXJlIHNob3VsZCBpbnRlcmFjdCB3aXRoIG90aGVyIGRldmljZXMsCisgKiBleGNlcHQgaW5kaXJlY3RseSBieSBjb25zdW1pbmcgVVNCIGJhbmR3aWR0aCBhbmQgQ1BVIHJlc291cmNlcyBmb3IgdGVzdAorICogdGhyZWFkcyBhbmQgcmVxdWVzdCBjb21wbGV0aW9uLiAgQnV0IHRoZSBvbmx5IHdheSB0byBrbm93IHRoYXQgZm9yIHN1cmUKKyAqIGlzIHRvIHRlc3Qgd2hlbiBIQyBxdWV1ZXMgYXJlIGluIHVzZSBieSBtYW55IGRldmljZXMuCisgKi8KKworc3RhdGljIGludAordXNidGVzdF9pb2N0bCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHVuc2lnbmVkIGludCBjb2RlLCB2b2lkICpidWYpCit7CisJc3RydWN0IHVzYnRlc3RfZGV2CSpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IHRlc3RkZXZfdG9fdXNiZGV2IChkZXYpOworCXN0cnVjdCB1c2J0ZXN0X3BhcmFtCSpwYXJhbSA9IGJ1ZjsKKwlpbnQJCQlyZXR2YWwgPSAtRU9QTk9UU1VQUDsKKwlzdHJ1Y3QgdXJiCQkqdXJiOworCXN0cnVjdCBzY2F0dGVybGlzdAkqc2c7CisJc3RydWN0IHVzYl9zZ19yZXF1ZXN0CXJlcTsKKwlzdHJ1Y3QgdGltZXZhbAkJc3RhcnQ7CisJdW5zaWduZWQJCWk7CisKKwkvLyBGSVhNRSBVU0JERVZGU19DT05ORUNUSU5GTyBkb2Vzbid0IHNheSBob3cgZmFzdCB0aGUgZGV2aWNlIGlzLgorCisJaWYgKGNvZGUgIT0gVVNCVEVTVF9SRVFVRVNUKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAocGFyYW0tPml0ZXJhdGlvbnMgPD0gMCB8fCBwYXJhbS0+bGVuZ3RoIDwgMAorCQkJfHwgcGFyYW0tPnNnbGVuIDwgMCB8fCBwYXJhbS0+dmFyeSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSAoJmRldi0+c2VtKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCS8qIHNvbWUgZGV2aWNlcywgbGlrZSBlei11c2IgZGVmYXVsdCBkZXZpY2VzLCBuZWVkIGEgbm9uLWRlZmF1bHQKKwkgKiBhbHRzZXR0aW5nIHRvIGhhdmUgYW55IGFjdGl2ZSBlbmRwb2ludHMuICBzb21lIHRlc3RzIGNoYW5nZQorCSAqIGFsdHNldHRpbmdzOyBmb3JjZSBhIGRlZmF1bHQgc28gbW9zdCB0ZXN0cyBkb24ndCBuZWVkIHRvIGNoZWNrLgorCSAqLworCWlmIChkZXYtPmluZm8tPmFsdCA+PSAwKSB7CisJICAgIAlpbnQJcmVzOworCisJCWlmIChpbnRmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpIHsKKwkJCXVwICgmZGV2LT5zZW0pOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJcmVzID0gc2V0X2FsdHNldHRpbmcgKGRldiwgZGV2LT5pbmZvLT5hbHQpOworCQlpZiAocmVzKSB7CisJCQlkZXZfZXJyICgmaW50Zi0+ZGV2LAorCQkJCQkic2V0IGFsdHNldHRpbmcgdG8gJWQgZmFpbGVkLCAlZFxuIiwKKwkJCQkJZGV2LT5pbmZvLT5hbHQsIHJlcyk7CisJCQl1cCAoJmRldi0+c2VtKTsKKwkJCXJldHVybiByZXM7CisJCX0KKwl9CisKKwkvKgorCSAqIEp1c3QgYSBidW5jaCBvZiB0ZXN0IGNhc2VzIHRoYXQgZXZlcnkgSENEIGlzIGV4cGVjdGVkIHRvIGhhbmRsZS4KKwkgKgorCSAqIFNvbWUgbWF5IG5lZWQgc3BlY2lmaWMgZmlybXdhcmUsIHRob3VnaCBpdCdkIGJlIGdvb2QgdG8gaGF2ZQorCSAqIG9uZSBmaXJtd2FyZSBpbWFnZSB0byBoYW5kbGUgYWxsIHRoZSB0ZXN0IGNhc2VzLgorCSAqCisJICogRklYTUUgYWRkIG1vcmUgdGVzdHMhICBjYW5jZWwgcmVxdWVzdHMsIHZlcmlmeSB0aGUgZGF0YSwgY29udHJvbAorCSAqIHF1ZXVlaW5nLCBjb25jdXJyZW50IHJlYWQrd3JpdGUgdGhyZWFkcywgYW5kIHNvIG9uLgorCSAqLworCWRvX2dldHRpbWVvZmRheSAoJnN0YXJ0KTsKKwlzd2l0Y2ggKHBhcmFtLT50ZXN0X251bSkgeworCisJY2FzZSAwOgorCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAiVEVTVCAwOiAgTk9QXG4iKTsKKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CisKKwkvKiBTaW1wbGUgbm9uLXF1ZXVlZCBidWxrIEkvTyB0ZXN0cyAqLworCWNhc2UgMToKKwkJaWYgKGRldi0+b3V0X3BpcGUgPT0gMCkKKwkJCWJyZWFrOworCQlkZXZfZGJnICgmaW50Zi0+ZGV2LAorCQkJCSJURVNUIDE6ICB3cml0ZSAlZCBieXRlcyAldSB0aW1lc1xuIiwKKwkJCQlwYXJhbS0+bGVuZ3RoLCBwYXJhbS0+aXRlcmF0aW9ucyk7CisJCXVyYiA9IHNpbXBsZV9hbGxvY191cmIgKHVkZXYsIGRldi0+b3V0X3BpcGUsIHBhcmFtLT5sZW5ndGgpOworCQlpZiAoIXVyYikgeworCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisJCS8vIEZJUk1XQVJFOiAgYnVsayBzaW5rIChtYXliZSBhY2NlcHRzIHNob3J0IHdyaXRlcykKKwkJcmV0dmFsID0gc2ltcGxlX2lvICh1cmIsIHBhcmFtLT5pdGVyYXRpb25zLCAwLCAwLCAidGVzdDEiKTsKKwkJc2ltcGxlX2ZyZWVfdXJiICh1cmIpOworCQlicmVhazsKKwljYXNlIDI6CisJCWlmIChkZXYtPmluX3BpcGUgPT0gMCkKKwkJCWJyZWFrOworCQlkZXZfZGJnICgmaW50Zi0+ZGV2LAorCQkJCSJURVNUIDI6ICByZWFkICVkIGJ5dGVzICV1IHRpbWVzXG4iLAorCQkJCXBhcmFtLT5sZW5ndGgsIHBhcmFtLT5pdGVyYXRpb25zKTsKKwkJdXJiID0gc2ltcGxlX2FsbG9jX3VyYiAodWRldiwgZGV2LT5pbl9waXBlLCBwYXJhbS0+bGVuZ3RoKTsKKwkJaWYgKCF1cmIpIHsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQorCQkvLyBGSVJNV0FSRTogIGJ1bGsgc291cmNlIChtYXliZSBnZW5lcmF0ZXMgc2hvcnQgd3JpdGVzKQorCQlyZXR2YWwgPSBzaW1wbGVfaW8gKHVyYiwgcGFyYW0tPml0ZXJhdGlvbnMsIDAsIDAsICJ0ZXN0MiIpOworCQlzaW1wbGVfZnJlZV91cmIgKHVyYik7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJaWYgKGRldi0+b3V0X3BpcGUgPT0gMCB8fCBwYXJhbS0+dmFyeSA9PSAwKQorCQkJYnJlYWs7CisJCWRldl9kYmcgKCZpbnRmLT5kZXYsCisJCQkJIlRFU1QgMzogIHdyaXRlLyVkIDAuLiVkIGJ5dGVzICV1IHRpbWVzXG4iLAorCQkJCXBhcmFtLT52YXJ5LCBwYXJhbS0+bGVuZ3RoLCBwYXJhbS0+aXRlcmF0aW9ucyk7CisJCXVyYiA9IHNpbXBsZV9hbGxvY191cmIgKHVkZXYsIGRldi0+b3V0X3BpcGUsIHBhcmFtLT5sZW5ndGgpOworCQlpZiAoIXVyYikgeworCQkJcmV0dmFsID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisJCS8vIEZJUk1XQVJFOiAgYnVsayBzaW5rIChtYXliZSBhY2NlcHRzIHNob3J0IHdyaXRlcykKKwkJcmV0dmFsID0gc2ltcGxlX2lvICh1cmIsIHBhcmFtLT5pdGVyYXRpb25zLCBwYXJhbS0+dmFyeSwKKwkJCQkJMCwgInRlc3QzIik7CisJCXNpbXBsZV9mcmVlX3VyYiAodXJiKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlpZiAoZGV2LT5pbl9waXBlID09IDAgfHwgcGFyYW0tPnZhcnkgPT0gMCkKKwkJCWJyZWFrOworCQlkZXZfZGJnICgmaW50Zi0+ZGV2LAorCQkJCSJURVNUIDQ6ICByZWFkLyVkIDAuLiVkIGJ5dGVzICV1IHRpbWVzXG4iLAorCQkJCXBhcmFtLT52YXJ5LCBwYXJhbS0+bGVuZ3RoLCBwYXJhbS0+aXRlcmF0aW9ucyk7CisJCXVyYiA9IHNpbXBsZV9hbGxvY191cmIgKHVkZXYsIGRldi0+aW5fcGlwZSwgcGFyYW0tPmxlbmd0aCk7CisJCWlmICghdXJiKSB7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKwkJLy8gRklSTVdBUkU6ICBidWxrIHNvdXJjZSAobWF5YmUgZ2VuZXJhdGVzIHNob3J0IHdyaXRlcykKKwkJcmV0dmFsID0gc2ltcGxlX2lvICh1cmIsIHBhcmFtLT5pdGVyYXRpb25zLCBwYXJhbS0+dmFyeSwKKwkJCQkJMCwgInRlc3Q0Iik7CisJCXNpbXBsZV9mcmVlX3VyYiAodXJiKTsKKwkJYnJlYWs7CisKKwkvKiBRdWV1ZWQgYnVsayBJL08gdGVzdHMgKi8KKwljYXNlIDU6CisJCWlmIChkZXYtPm91dF9waXBlID09IDAgfHwgcGFyYW0tPnNnbGVuID09IDApCisJCQlicmVhazsKKwkJZGV2X2RiZyAoJmludGYtPmRldiwKKwkJCSJURVNUIDU6ICB3cml0ZSAlZCBzZ2xpc3RzICVkIGVudHJpZXMgb2YgJWQgYnl0ZXNcbiIsCisJCQkJcGFyYW0tPml0ZXJhdGlvbnMsCisJCQkJcGFyYW0tPnNnbGVuLCBwYXJhbS0+bGVuZ3RoKTsKKwkJc2cgPSBhbGxvY19zZ2xpc3QgKHBhcmFtLT5zZ2xlbiwgcGFyYW0tPmxlbmd0aCwgMCk7CisJCWlmICghc2cpIHsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQorCQkvLyBGSVJNV0FSRTogIGJ1bGsgc2luayAobWF5YmUgYWNjZXB0cyBzaG9ydCB3cml0ZXMpCisJCXJldHZhbCA9IHBlcmZvcm1fc2dsaXN0ICh1ZGV2LCBwYXJhbS0+aXRlcmF0aW9ucywgZGV2LT5vdXRfcGlwZSwKKwkJCQkmcmVxLCBzZywgcGFyYW0tPnNnbGVuKTsKKwkJZnJlZV9zZ2xpc3QgKHNnLCBwYXJhbS0+c2dsZW4pOworCQlicmVhazsKKworCWNhc2UgNjoKKwkJaWYgKGRldi0+aW5fcGlwZSA9PSAwIHx8IHBhcmFtLT5zZ2xlbiA9PSAwKQorCQkJYnJlYWs7CisJCWRldl9kYmcgKCZpbnRmLT5kZXYsCisJCQkiVEVTVCA2OiAgcmVhZCAlZCBzZ2xpc3RzICVkIGVudHJpZXMgb2YgJWQgYnl0ZXNcbiIsCisJCQkJcGFyYW0tPml0ZXJhdGlvbnMsCisJCQkJcGFyYW0tPnNnbGVuLCBwYXJhbS0+bGVuZ3RoKTsKKwkJc2cgPSBhbGxvY19zZ2xpc3QgKHBhcmFtLT5zZ2xlbiwgcGFyYW0tPmxlbmd0aCwgMCk7CisJCWlmICghc2cpIHsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQorCQkvLyBGSVJNV0FSRTogIGJ1bGsgc291cmNlIChtYXliZSBnZW5lcmF0ZXMgc2hvcnQgd3JpdGVzKQorCQlyZXR2YWwgPSBwZXJmb3JtX3NnbGlzdCAodWRldiwgcGFyYW0tPml0ZXJhdGlvbnMsIGRldi0+aW5fcGlwZSwKKwkJCQkmcmVxLCBzZywgcGFyYW0tPnNnbGVuKTsKKwkJZnJlZV9zZ2xpc3QgKHNnLCBwYXJhbS0+c2dsZW4pOworCQlicmVhazsKKwljYXNlIDc6CisJCWlmIChkZXYtPm91dF9waXBlID09IDAgfHwgcGFyYW0tPnNnbGVuID09IDAgfHwgcGFyYW0tPnZhcnkgPT0gMCkKKwkJCWJyZWFrOworCQlkZXZfZGJnICgmaW50Zi0+ZGV2LAorCQkJIlRFU1QgNzogIHdyaXRlLyVkICVkIHNnbGlzdHMgJWQgZW50cmllcyAwLi4lZCBieXRlc1xuIiwKKwkJCQlwYXJhbS0+dmFyeSwgcGFyYW0tPml0ZXJhdGlvbnMsCisJCQkJcGFyYW0tPnNnbGVuLCBwYXJhbS0+bGVuZ3RoKTsKKwkJc2cgPSBhbGxvY19zZ2xpc3QgKHBhcmFtLT5zZ2xlbiwgcGFyYW0tPmxlbmd0aCwgcGFyYW0tPnZhcnkpOworCQlpZiAoIXNnKSB7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKwkJLy8gRklSTVdBUkU6ICBidWxrIHNpbmsgKG1heWJlIGFjY2VwdHMgc2hvcnQgd3JpdGVzKQorCQlyZXR2YWwgPSBwZXJmb3JtX3NnbGlzdCAodWRldiwgcGFyYW0tPml0ZXJhdGlvbnMsIGRldi0+b3V0X3BpcGUsCisJCQkJJnJlcSwgc2csIHBhcmFtLT5zZ2xlbik7CisJCWZyZWVfc2dsaXN0IChzZywgcGFyYW0tPnNnbGVuKTsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQlpZiAoZGV2LT5pbl9waXBlID09IDAgfHwgcGFyYW0tPnNnbGVuID09IDAgfHwgcGFyYW0tPnZhcnkgPT0gMCkKKwkJCWJyZWFrOworCQlkZXZfZGJnICgmaW50Zi0+ZGV2LAorCQkJIlRFU1QgODogIHJlYWQvJWQgJWQgc2dsaXN0cyAlZCBlbnRyaWVzIDAuLiVkIGJ5dGVzXG4iLAorCQkJCXBhcmFtLT52YXJ5LCBwYXJhbS0+aXRlcmF0aW9ucywKKwkJCQlwYXJhbS0+c2dsZW4sIHBhcmFtLT5sZW5ndGgpOworCQlzZyA9IGFsbG9jX3NnbGlzdCAocGFyYW0tPnNnbGVuLCBwYXJhbS0+bGVuZ3RoLCBwYXJhbS0+dmFyeSk7CisJCWlmICghc2cpIHsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQorCQkvLyBGSVJNV0FSRTogIGJ1bGsgc291cmNlIChtYXliZSBnZW5lcmF0ZXMgc2hvcnQgd3JpdGVzKQorCQlyZXR2YWwgPSBwZXJmb3JtX3NnbGlzdCAodWRldiwgcGFyYW0tPml0ZXJhdGlvbnMsIGRldi0+aW5fcGlwZSwKKwkJCQkmcmVxLCBzZywgcGFyYW0tPnNnbGVuKTsKKwkJZnJlZV9zZ2xpc3QgKHNnLCBwYXJhbS0+c2dsZW4pOworCQlicmVhazsKKworCS8qIG5vbi1xdWV1ZWQgc2FuaXR5IHRlc3RzIGZvciBjb250cm9sIChjaGFwdGVyIDkgc3Vic2V0KSAqLworCWNhc2UgOToKKwkJcmV0dmFsID0gMDsKKwkJZGV2X2RiZyAoJmludGYtPmRldiwKKwkJCSJURVNUIDk6ICBjaDkgKHN1YnNldCkgY29udHJvbCB0ZXN0cywgJWQgdGltZXNcbiIsCisJCQkJcGFyYW0tPml0ZXJhdGlvbnMpOworCQlmb3IgKGkgPSBwYXJhbS0+aXRlcmF0aW9uczsgcmV0dmFsID09IDAgJiYgaS0tOyAvKiBOT1AgKi8pCisJCQlyZXR2YWwgPSBjaDlfcG9zdGNvbmZpZyAoZGV2KTsKKwkJaWYgKHJldHZhbCkKKwkJCWRiZyAoImNoOSBzdWJzZXQgZmFpbGVkLCBpdGVyYXRpb25zIGxlZnQgJWQiLCBpKTsKKwkJYnJlYWs7CisKKwkvKiBxdWV1ZWQgY29udHJvbCBtZXNzYWdpbmcgKi8KKwljYXNlIDEwOgorCQlpZiAocGFyYW0tPnNnbGVuID09IDApCisJCQlicmVhazsKKwkJcmV0dmFsID0gMDsKKwkJZGV2X2RiZyAoJmludGYtPmRldiwKKwkJCQkiVEVTVCAxMDogIHF1ZXVlICVkIGNvbnRyb2wgY2FsbHMsICVkIHRpbWVzXG4iLAorCQkJCXBhcmFtLT5zZ2xlbiwKKwkJCQlwYXJhbS0+aXRlcmF0aW9ucyk7CisJCXJldHZhbCA9IHRlc3RfY3RybF9xdWV1ZSAoZGV2LCBwYXJhbSk7CisJCWJyZWFrOworCisJLyogc2ltcGxlIG5vbi1xdWV1ZWQgdW5saW5rcyAocmluZyB3aXRoIG9uZSB1cmIpICovCisJY2FzZSAxMToKKwkJaWYgKGRldi0+aW5fcGlwZSA9PSAwIHx8ICFwYXJhbS0+bGVuZ3RoKQorCQkJYnJlYWs7CisJCXJldHZhbCA9IDA7CisJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJURVNUIDExOiAgdW5saW5rICVkIHJlYWRzIG9mICVkXG4iLAorCQkJCXBhcmFtLT5pdGVyYXRpb25zLCBwYXJhbS0+bGVuZ3RoKTsKKwkJZm9yIChpID0gcGFyYW0tPml0ZXJhdGlvbnM7IHJldHZhbCA9PSAwICYmIGktLTsgLyogTk9QICovKQorCQkJcmV0dmFsID0gdW5saW5rX3NpbXBsZSAoZGV2LCBkZXYtPmluX3BpcGUsCisJCQkJCQlwYXJhbS0+bGVuZ3RoKTsKKwkJaWYgKHJldHZhbCkKKwkJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJ1bmxpbmsgcmVhZHMgZmFpbGVkICVkLCAiCisJCQkJIml0ZXJhdGlvbnMgbGVmdCAlZFxuIiwgcmV0dmFsLCBpKTsKKwkJYnJlYWs7CisJY2FzZSAxMjoKKwkJaWYgKGRldi0+b3V0X3BpcGUgPT0gMCB8fCAhcGFyYW0tPmxlbmd0aCkKKwkJCWJyZWFrOworCQlyZXR2YWwgPSAwOworCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAiVEVTVCAxMjogIHVubGluayAlZCB3cml0ZXMgb2YgJWRcbiIsCisJCQkJcGFyYW0tPml0ZXJhdGlvbnMsIHBhcmFtLT5sZW5ndGgpOworCQlmb3IgKGkgPSBwYXJhbS0+aXRlcmF0aW9uczsgcmV0dmFsID09IDAgJiYgaS0tOyAvKiBOT1AgKi8pCisJCQlyZXR2YWwgPSB1bmxpbmtfc2ltcGxlIChkZXYsIGRldi0+b3V0X3BpcGUsCisJCQkJCQlwYXJhbS0+bGVuZ3RoKTsKKwkJaWYgKHJldHZhbCkKKwkJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJ1bmxpbmsgd3JpdGVzIGZhaWxlZCAlZCwgIgorCQkJCSJpdGVyYXRpb25zIGxlZnQgJWRcbiIsIHJldHZhbCwgaSk7CisJCWJyZWFrOworCisJLyogZXAgaGFsdCB0ZXN0cyAqLworCWNhc2UgMTM6CisJCWlmIChkZXYtPm91dF9waXBlID09IDAgJiYgZGV2LT5pbl9waXBlID09IDApCisJCQlicmVhazsKKwkJcmV0dmFsID0gMDsKKwkJZGV2X2RiZyAoJmludGYtPmRldiwgIlRFU1QgMTM6ICBzZXQvY2xlYXIgJWQgaGFsdHNcbiIsCisJCQkJcGFyYW0tPml0ZXJhdGlvbnMpOworCQlmb3IgKGkgPSBwYXJhbS0+aXRlcmF0aW9uczsgcmV0dmFsID09IDAgJiYgaS0tOyAvKiBOT1AgKi8pCisJCQlyZXR2YWwgPSBoYWx0X3NpbXBsZSAoZGV2KTsKKwkJCisJCWlmIChyZXR2YWwpCisJCQlEQkcgKGRldiwgImhhbHRzIGZhaWxlZCwgaXRlcmF0aW9ucyBsZWZ0ICVkXG4iLCBpKTsKKwkJYnJlYWs7CisKKwkvKiBjb250cm9sIHdyaXRlIHRlc3RzICovCisJY2FzZSAxNDoKKwkJaWYgKCFkZXYtPmluZm8tPmN0cmxfb3V0KQorCQkJYnJlYWs7CisJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJURVNUIDE0OiAgJWQgZXAwb3V0LCAwLi4lZCB2YXJ5ICVkXG4iLAorCQkJCXBhcmFtLT5pdGVyYXRpb25zLCBwYXJhbS0+bGVuZ3RoLCBwYXJhbS0+dmFyeSk7CisJCXJldHZhbCA9IGN0cmxfb3V0IChkZXYsIHBhcmFtLT5pdGVyYXRpb25zLCAKKwkJCQlwYXJhbS0+bGVuZ3RoLCBwYXJhbS0+dmFyeSk7CisJCWJyZWFrOworCisJLyogaXNvIHdyaXRlIHRlc3RzICovCisJY2FzZSAxNToKKwkJaWYgKGRldi0+b3V0X2lzb19waXBlID09IDAgfHwgcGFyYW0tPnNnbGVuID09IDApCisJCQlicmVhazsKKwkJZGV2X2RiZyAoJmludGYtPmRldiwgCisJCQkiVEVTVCAxNTogIHdyaXRlICVkIGlzbywgJWQgZW50cmllcyBvZiAlZCBieXRlc1xuIiwKKwkJCQlwYXJhbS0+aXRlcmF0aW9ucywKKwkJCQlwYXJhbS0+c2dsZW4sIHBhcmFtLT5sZW5ndGgpOworCQkvLyBGSVJNV0FSRTogIGlzbyBzaW5rCisJCXJldHZhbCA9IHRlc3RfaXNvX3F1ZXVlIChkZXYsIHBhcmFtLAorCQkJCWRldi0+b3V0X2lzb19waXBlLCBkZXYtPmlzb19vdXQpOworCQlicmVhazsKKworCS8qIGlzbyByZWFkIHRlc3RzICovCisJY2FzZSAxNjoKKwkJaWYgKGRldi0+aW5faXNvX3BpcGUgPT0gMCB8fCBwYXJhbS0+c2dsZW4gPT0gMCkKKwkJCWJyZWFrOworCQlkZXZfZGJnICgmaW50Zi0+ZGV2LAorCQkJIlRFU1QgMTY6ICByZWFkICVkIGlzbywgJWQgZW50cmllcyBvZiAlZCBieXRlc1xuIiwKKwkJCQlwYXJhbS0+aXRlcmF0aW9ucywKKwkJCQlwYXJhbS0+c2dsZW4sIHBhcmFtLT5sZW5ndGgpOworCQkvLyBGSVJNV0FSRTogIGlzbyBzb3VyY2UKKwkJcmV0dmFsID0gdGVzdF9pc29fcXVldWUgKGRldiwgcGFyYW0sCisJCQkJZGV2LT5pbl9pc29fcGlwZSwgZGV2LT5pc29faW4pOworCQlicmVhazsKKworCS8vIEZJWE1FIHVubGluayBmcm9tIHF1ZXVlIChyaW5nIHdpdGggTiB1cmJzKQorCisJLy8gRklYTUUgc2NhdHRlcmxpc3QgY2FuY2VsIChuZWVkcyBoZWxwZXIgdGhyZWFkKQorCisJfQorCWRvX2dldHRpbWVvZmRheSAoJnBhcmFtLT5kdXJhdGlvbik7CisJcGFyYW0tPmR1cmF0aW9uLnR2X3NlYyAtPSBzdGFydC50dl9zZWM7CisJcGFyYW0tPmR1cmF0aW9uLnR2X3VzZWMgLT0gc3RhcnQudHZfdXNlYzsKKwlpZiAocGFyYW0tPmR1cmF0aW9uLnR2X3VzZWMgPCAwKSB7CisJCXBhcmFtLT5kdXJhdGlvbi50dl91c2VjICs9IDEwMDAgKiAxMDAwOworCQlwYXJhbS0+ZHVyYXRpb24udHZfc2VjIC09IDE7CisJfQorCXVwICgmZGV2LT5zZW0pOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB1bnNpZ25lZCBmb3JjZV9pbnRlcnJ1cHQgPSAwOworbW9kdWxlX3BhcmFtIChmb3JjZV9pbnRlcnJ1cHQsIHVpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyAoZm9yY2VfaW50ZXJydXB0LCAiMCA9IHRlc3QgZGVmYXVsdDsgZWxzZSBpbnRlcnJ1cHQiKTsKKworI2lmZGVmCUdFTkVSSUMKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCB2ZW5kb3I7Cittb2R1bGVfcGFyYW0odmVuZG9yLCB1c2hvcnQsIDApOworTU9EVUxFX1BBUk1fREVTQyAodmVuZG9yLCAidmVuZG9yIGNvZGUgKGZyb20gdXNiLWlmKSIpOworCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgcHJvZHVjdDsKK21vZHVsZV9wYXJhbShwcm9kdWN0LCB1c2hvcnQsIDApOworTU9EVUxFX1BBUk1fREVTQyAocHJvZHVjdCwgInByb2R1Y3QgY29kZSAoZnJvbSB2ZW5kb3IpIik7CisjZW5kaWYKKworc3RhdGljIGludAordXNidGVzdF9wcm9iZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKKwlzdHJ1Y3QgdXNidGVzdF9kZXYJKmRldjsKKwlzdHJ1Y3QgdXNidGVzdF9pbmZvCSppbmZvOworCWNoYXIJCQkqcnRlc3QsICp3dGVzdDsKKwljaGFyCQkJKmlydGVzdCwgKml3dGVzdDsKKworCXVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTsKKworI2lmZGVmCUdFTkVSSUMKKwkvKiBzcGVjaWZ5IGRldmljZXMgYnkgbW9kdWxlIHBhcmFtZXRlcnM/ICovCisJaWYgKGlkLT5tYXRjaF9mbGFncyA9PSAwKSB7CisJCS8qIHZlbmRvciBtYXRjaCByZXF1aXJlZCwgcHJvZHVjdCBtYXRjaCBvcHRpb25hbCAqLworCQlpZiAoIXZlbmRvciB8fCBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSAhPSAodTE2KXZlbmRvcikKKwkJCXJldHVybiAtRU5PREVWOworCQlpZiAocHJvZHVjdCAmJiBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gKHUxNilwcm9kdWN0KQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWRiZyAoIm1hdGNoZWQgbW9kdWxlIHBhcmFtcywgdmVuZD0weCUwNHggcHJvZD0weCUwNHgiLAorCQkJCWxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQkJCWxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisJfQorI2VuZGlmCisKKwlkZXYgPSBrbWFsbG9jIChzaXplb2YgKmRldiwgU0xBQl9LRVJORUwpOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQgKGRldiwgMCwgc2l6ZW9mICpkZXYpOworCWluZm8gPSAoc3RydWN0IHVzYnRlc3RfaW5mbyAqKSBpZC0+ZHJpdmVyX2luZm87CisJZGV2LT5pbmZvID0gaW5mbzsKKwlpbml0X01VVEVYICgmZGV2LT5zZW0pOworCisJZGV2LT5pbnRmID0gaW50ZjsKKworCS8qIGNhY2hlbGluZS1hbGlnbmVkIHNjcmF0Y2ggZm9yIGkvbyAqLworCWlmICgoZGV2LT5idWYgPSBrbWFsbG9jIChUQlVGX1NJWkUsIFNMQUJfS0VSTkVMKSkgPT0gTlVMTCkgeworCQlrZnJlZSAoZGV2KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogTk9URSB0aGlzIGRvZXNuJ3QgeWV0IHRlc3QgdGhlIGhhbmRmdWwgb2YgZGlmZmVyZW5jZSB0aGF0IGFyZQorCSAqIHZpc2libGUgd2l0aCBoaWdoIHNwZWVkIGludGVycnVwdHM6ICBiaWdnZXIgbWF4cGFja2V0ICgxSykgYW5kCisJICogImhpZ2ggYmFuZHdpZHRoIiBtb2RlcyAodXAgdG8gMyBwYWNrZXRzL3VmcmFtZSkuCisJICovCisJcnRlc3QgPSB3dGVzdCA9ICIiOworCWlydGVzdCA9IGl3dGVzdCA9ICIiOworCWlmIChmb3JjZV9pbnRlcnJ1cHQgfHwgdWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0xPVykgeworCQlpZiAoaW5mby0+ZXBfaW4pIHsKKwkJCWRldi0+aW5fcGlwZSA9IHVzYl9yY3ZpbnRwaXBlICh1ZGV2LCBpbmZvLT5lcF9pbik7CisJCQlydGVzdCA9ICIgaW50ci1pbiI7CisJCX0KKwkJaWYgKGluZm8tPmVwX291dCkgeworCQkJZGV2LT5vdXRfcGlwZSA9IHVzYl9zbmRpbnRwaXBlICh1ZGV2LCBpbmZvLT5lcF9vdXQpOworCQkJd3Rlc3QgPSAiIGludHItb3V0IjsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChpbmZvLT5hdXRvY29uZikgeworCQkJaW50IHN0YXR1czsKKworCQkJc3RhdHVzID0gZ2V0X2VuZHBvaW50cyAoZGV2LCBpbnRmKTsKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJZGJnICgiY291bGRuJ3QgZ2V0IGVuZHBvaW50cywgJWRcbiIsIHN0YXR1cyk7CisJCQkJcmV0dXJuIHN0YXR1czsKKwkJCX0KKwkJCS8qIG1heSBmaW5kIGJ1bGsgb3IgSVNPIHBpcGVzICovCisJCX0gZWxzZSB7CisJCQlpZiAoaW5mby0+ZXBfaW4pCisJCQkJZGV2LT5pbl9waXBlID0gdXNiX3JjdmJ1bGtwaXBlICh1ZGV2LAorCQkJCQkJCWluZm8tPmVwX2luKTsKKwkJCWlmIChpbmZvLT5lcF9vdXQpCisJCQkJZGV2LT5vdXRfcGlwZSA9IHVzYl9zbmRidWxrcGlwZSAodWRldiwKKwkJCQkJCQlpbmZvLT5lcF9vdXQpOworCQl9CisJCWlmIChkZXYtPmluX3BpcGUpCisJCQlydGVzdCA9ICIgYnVsay1pbiI7CisJCWlmIChkZXYtPm91dF9waXBlKQorCQkJd3Rlc3QgPSAiIGJ1bGstb3V0IjsKKwkJaWYgKGRldi0+aW5faXNvX3BpcGUpCisJCQlpcnRlc3QgPSAiIGlzby1pbiI7CisJCWlmIChkZXYtPm91dF9pc29fcGlwZSkKKwkJCWl3dGVzdCA9ICIgaXNvLW91dCI7CisJfQorCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgZGV2KTsKKwlkZXZfaW5mbyAoJmludGYtPmRldiwgIiVzXG4iLCBpbmZvLT5uYW1lKTsKKwlkZXZfaW5mbyAoJmludGYtPmRldiwgIiVzIHNwZWVkIHtjb250cm9sJXMlcyVzJXMlc30gdGVzdHMlc1xuIiwKKwkJCSh7IGNoYXIgKnRtcDsKKwkJCXN3aXRjaCAodWRldi0+c3BlZWQpIHsKKwkJCWNhc2UgVVNCX1NQRUVEX0xPVzogdG1wID0gImxvdyI7IGJyZWFrOworCQkJY2FzZSBVU0JfU1BFRURfRlVMTDogdG1wID0gImZ1bGwiOyBicmVhazsKKwkJCWNhc2UgVVNCX1NQRUVEX0hJR0g6IHRtcCA9ICJoaWdoIjsgYnJlYWs7CisJCQlkZWZhdWx0OiB0bXAgPSAidW5rbm93biI7IGJyZWFrOworCQkJfTsgdG1wOyB9KSwKKwkJCWluZm8tPmN0cmxfb3V0ID8gIiBpbi9vdXQiIDogIiIsCisJCQlydGVzdCwgd3Rlc3QsCisJCQlpcnRlc3QsIGl3dGVzdCwKKwkJCWluZm8tPmFsdCA+PSAwID8gIiAoK2FsdCkiIDogIiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2J0ZXN0X2Rpc2Nvbm5lY3QgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2J0ZXN0X2RldgkqZGV2ID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisKKwlkb3duICgmZGV2LT5zZW0pOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisJZGV2X2RiZyAoJmludGYtPmRldiwgImRpc2Nvbm5lY3RcbiIpOworCWtmcmVlIChkZXYpOworfQorCisvKiBCYXNpYyB0ZXN0aW5nIG9ubHkgbmVlZHMgYSBkZXZpY2UgdGhhdCBjYW4gc291cmNlIG9yIHNpbmsgYnVsayB0cmFmZmljLgorICogQW55IGRldmljZSBjYW4gdGVzdCBjb250cm9sIHRyYW5zZmVycyAoZGVmYXVsdCB3aXRoIEdFTkVSSUMgYmluZGluZykuCisgKgorICogU2V2ZXJhbCBlbnRyaWVzIHdvcmsgd2l0aCB0aGUgZGVmYXVsdCBFUDAgaW1wbGVtZW50YXRpb24gdGhhdCdzIGJ1aWx0CisgKiBpbnRvIEVaLVVTQiBjaGlwcy4gIFRoZXJlJ3MgYSBkZWZhdWx0IHZlbmRvciBJRCB3aGljaCBjYW4gYmUgb3ZlcnJpZGRlbgorICogYnkgKHZlcnkpIHNtYWxsIGNvbmZpZyBFRVBST01TLCBidXQgb3RoZXJ3aXNlIGFsbCB0aGVzZSBkZXZpY2VzIGFjdAorICogaWRlbnRpY2FsbHkgdW50aWwgZmlybXdhcmUgaXMgbG9hZGVkOiAgb25seSBFUDAgd29ya3MuICBJdCB0dXJucyBvdXQKKyAqIHRvIGJlIGVhc3kgdG8gbWFrZSBvdGhlciBlbmRwb2ludHMgd29yaywgd2l0aG91dCBtb2RpZnlpbmcgdGhhdCBFUDAKKyAqIGJlaGF2aW9yLiAgRm9yIG5vdywgd2UgZXhwZWN0IHRoYXQga2luZCBvZiBmaXJtd2FyZS4KKyAqLworCisvKiBhbjIxeHggb3IgZnggdmVyc2lvbnMgb2YgZXotdXNiICovCitzdGF0aWMgc3RydWN0IHVzYnRlc3RfaW5mbyBlejFfaW5mbyA9IHsKKwkubmFtZQkJPSAiRVotVVNCIGRldmljZSIsCisJLmVwX2luCQk9IDIsCisJLmVwX291dAkJPSAyLAorCS5hbHQJCT0gMSwKK307CisKKy8qIGZ4MiB2ZXJzaW9uIG9mIGV6LXVzYiAqLworc3RhdGljIHN0cnVjdCB1c2J0ZXN0X2luZm8gZXoyX2luZm8gPSB7CisJLm5hbWUJCT0gIkZYMiBkZXZpY2UiLAorCS5lcF9pbgkJPSA2LAorCS5lcF9vdXQJCT0gMiwKKwkuYWx0CQk9IDEsCit9OworCisvKiBlenVzYiBmYW1pbHkgZGV2aWNlIHdpdGggZGVkaWNhdGVkIHVzYiB0ZXN0IGZpcm13YXJlLAorICovCitzdGF0aWMgc3RydWN0IHVzYnRlc3RfaW5mbyBmd19pbmZvID0geworCS5uYW1lCQk9ICJ1c2IgdGVzdCBkZXZpY2UiLAorCS5lcF9pbgkJPSAyLAorCS5lcF9vdXQJCT0gMiwKKwkuYWx0CQk9IDEsCisJLmF1dG9jb25mCT0gMSwJCS8vIGlzbyBhbmQgY3RybF9vdXQgbmVlZCBhdXRvY29uZgorCS5jdHJsX291dAk9IDEsCisJLmlzbwkJPSAxLAkJLy8gaXNvX2VwJ3MgYXJlICM4IGluL291dAorfTsKKworLyogcGVyaXBoZXJhbCBydW5uaW5nIExpbnV4IGFuZCAnemVyby5jJyB0ZXN0IGZpcm13YXJlLCBvcgorICogaXRzIHVzZXItbW9kZSBjb3VzaW4uIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGlzIHVzZQorICogZGlmZmVyZW50IGhhcmR3YXJlIHdpdGggdGhlIHNhbWUgdmVuZG9yL3Byb2R1Y3QgY29kZXMuCisgKiBob3N0IHNpZGUgTVVTVCByZWx5IG9uIHRoZSBlbmRwb2ludCBkZXNjcmlwdG9ycy4KKyAqLworc3RhdGljIHN0cnVjdCB1c2J0ZXN0X2luZm8gZ3pfaW5mbyA9IHsKKwkubmFtZQkJPSAiTGludXggZ2FkZ2V0IHplcm8iLAorCS5hdXRvY29uZgk9IDEsCisJLmN0cmxfb3V0CT0gMSwKKwkuYWx0CQk9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHVzYnRlc3RfaW5mbyB1bV9pbmZvID0geworCS5uYW1lCQk9ICJMaW51eCB1c2VyIG1vZGUgdGVzdCBkcml2ZXIiLAorCS5hdXRvY29uZgk9IDEsCisJLmFsdAkJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNidGVzdF9pbmZvIHVtMl9pbmZvID0geworCS5uYW1lCQk9ICJMaW51eCB1c2VyIG1vZGUgSVNPIHRlc3QgZHJpdmVyIiwKKwkuYXV0b2NvbmYJPSAxLAorCS5pc28JCT0gMSwKKwkuYWx0CQk9IC0xLAorfTsKKworI2lmZGVmIElCT1QyCisvKiB0aGlzIGlzIGEgbmljZSBzb3VyY2Ugb2YgaGlnaCBzcGVlZCBidWxrIGRhdGE7CisgKiB1c2VzIGFuIEZYMiwgd2l0aCBmaXJtd2FyZSBwcm92aWRlZCBpbiB0aGUgZGV2aWNlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNidGVzdF9pbmZvIGlib3QyX2luZm8gPSB7CisJLm5hbWUJCT0gImlCT1QyIHdlYmNhbSIsCisJLmVwX2luCQk9IDIsCisJLmFsdAkJPSAtMSwKK307CisjZW5kaWYKKworI2lmZGVmIEdFTkVSSUMKKy8qIHdlIGNhbiB1c2UgYW55IGRldmljZSB0byB0ZXN0IGNvbnRyb2wgdHJhZmZpYyAqLworc3RhdGljIHN0cnVjdCB1c2J0ZXN0X2luZm8gZ2VuZXJpY19pbmZvID0geworCS5uYW1lCQk9ICJHZW5lcmljIFVTQiBkZXZpY2UiLAorCS5hbHQJCT0gLTEsCit9OworI2VuZGlmCisKKy8vIEZJWE1FIHJlbW92ZSB0aGlzIAorc3RhdGljIHN0cnVjdCB1c2J0ZXN0X2luZm8gaGFjdF9pbmZvID0geworCS5uYW1lCQk9ICJGWDIvaGFjdCIsCisJLy8uZXBfaW4JCT0gNiwKKwkuZXBfb3V0CQk9IDIsCisJLmFsdAkJPSAtMSwKK307CisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworCisJeyBVU0JfREVWSUNFICgweDA1NDcsIDB4MTAwMiksCisJCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmaGFjdF9pbmZvLAorCQl9LAorCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCS8qIEVaLVVTQiBkZXZpY2VzIHdoaWNoIGRvd25sb2FkIGZpcm13YXJlIHRvIHJlcGxhY2UgKG9yIGluIG91cgorCSAqIGNhc2UgYXVnbWVudCkgdGhlIGRlZmF1bHQgZGV2aWNlIGltcGxlbWVudGF0aW9uLgorCSAqLworCisJLyogZ2VuZXJpYyBFWi1VU0IgRlggY29udHJvbGxlciAqLworCXsgVVNCX0RFVklDRSAoMHgwNTQ3LCAweDIyMzUpLAorCQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmV6MV9pbmZvLAorCQl9LAorCisJLyogQ1kzNjcxIGRldmVsb3BtZW50IGJvYXJkIHdpdGggRVotVVNCIEZYICovCisJeyBVU0JfREVWSUNFICgweDA1NDcsIDB4MDA4MCksCisJCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmZXoxX2luZm8sCisJCX0sCisKKwkvKiBnZW5lcmljIEVaLVVTQiBGWDIgY29udHJvbGxlciAob3IgZGV2ZWxvcG1lbnQgYm9hcmQpICovCisJeyBVU0JfREVWSUNFICgweDA0YjQsIDB4ODYxMyksCisJCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmZXoyX2luZm8sCisJCX0sCisKKwkvKiByZS1lbnVtZXJhdGVkIHVzYiB0ZXN0IGRldmljZSBmaXJtd2FyZSAqLworCXsgVVNCX0RFVklDRSAoMHhmZmYwLCAweGZmZjApLAorCQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmZ3X2luZm8sCisJCX0sCisKKwkvKiAiR2FkZ2V0IFplcm8iIGZpcm13YXJlIHJ1bnMgdW5kZXIgTGludXggKi8KKwl7IFVTQl9ERVZJQ0UgKDB4MDUyNSwgMHhhNGEwKSwKKwkJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZnel9pbmZvLAorCQl9LAorCisJLyogc28gZG9lcyBhIHVzZXItbW9kZSB2YXJpYW50ICovCisJeyBVU0JfREVWSUNFICgweDA1MjUsIDB4YTRhNCksCisJCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmdW1faW5mbywKKwkJfSwKKworCS8qIC4uLiBhbmQgYSB1c2VyLW1vZGUgdmFyaWFudCB0aGF0IHRhbGtzIGlzbyAqLworCXsgVVNCX0RFVklDRSAoMHgwNTI1LCAweGE0YTMpLAorCQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJnVtMl9pbmZvLAorCQl9LAorCisjaWZkZWYgS0VZU1BBTl8xOVFpCisJLyogS2V5c3BhbiAxOXFpIHVzZXMgYW4yMXh4IChvcmlnaW5hbCBFWi1VU0IpICovCisJLy8gdGhpcyBkb2VzIG5vdCBjb2V4aXN0IHdpdGggdGhlIHJlYWwgS2V5c3BhbiAxOXFpIGRyaXZlciEKKwl7IFVTQl9ERVZJQ0UgKDB4MDZjZCwgMHgwMTBiKSwKKwkJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZlejFfaW5mbywKKwkJfSwKKyNlbmRpZgorCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIElCT1QyCisJLyogaUJPVDIgbWFrZXMgYSBuaWNlIHNvdXJjZSBvZiBoaWdoIHNwZWVkIGJ1bGstaW4gZGF0YSAqLworCS8vIHRoaXMgZG9lcyBub3QgY29leGlzdCB3aXRoIGEgcmVhbCBpQk9UMiBkcml2ZXIhCisJeyBVU0JfREVWSUNFICgweDBiNjIsIDB4MDA1OSksCisJCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmaWJvdDJfaW5mbywKKwkJfSwKKyNlbmRpZgorCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIEdFTkVSSUMKKwkvKiBtb2R1bGUgcGFyYW1zIGNhbiBzcGVjaWZ5IGRldmljZXMgdG8gdXNlIGZvciBjb250cm9sIHRlc3RzICovCisJeyAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmdlbmVyaWNfaW5mbywgfSwKKyNlbmRpZgorCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNidGVzdF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJInVzYnRlc3QiLAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorCS5wcm9iZSA9CXVzYnRlc3RfcHJvYmUsCisJLmlvY3RsID0JdXNidGVzdF9pb2N0bCwKKwkuZGlzY29ubmVjdCA9CXVzYnRlc3RfZGlzY29ubmVjdCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19pbml0IHVzYnRlc3RfaW5pdCAodm9pZCkKK3sKKyNpZmRlZiBHRU5FUklDCisJaWYgKHZlbmRvcikKKwkJZGJnICgicGFyYW1zOiB2ZW5kPTB4JTA0eCBwcm9kPTB4JTA0eCIsIHZlbmRvciwgcHJvZHVjdCk7CisjZW5kaWYKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyICgmdXNidGVzdF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQgKHVzYnRlc3RfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2J0ZXN0X2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZ1c2J0ZXN0X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCAodXNidGVzdF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OICgiVVNCIENvcmUvSENEIFRlc3RpbmcgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSAoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jIGIvZHJpdmVycy91c2IvbWlzYy91c3M3MjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWE3NDQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c3M3MjAuYwpAQCAtMCwwICsxLDY3NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJdXNzNzIwLmMgIC0tICBVU1M3MjAgVVNCIFBhcnBvcnQgQ2FibGUuCisgKgorICoJQ29weXJpZ2h0IChDKSAxOTk5CisgKgkgICAgVGhvbWFzIFNhaWxlciAoc2FpbGVyQGlmZS5lZS5ldGh6LmNoKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKglidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICoJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKglZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqCUZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqICBCYXNlZCBvbiBwYXJwb3J0X3BjLmMKKyAqCisgKiAgSGlzdG9yeToKKyAqICAgMC4xICAwNC4wOC45OSAgQ3JlYXRlZAorICogICAwLjIgIDA3LjA4Ljk5ICBTb21lIGZpeGVzIG1haW5seSBzdWdnZXN0ZWQgYnkgVGltIFdhdWdoCisgKgkJICAgIEludGVycnVwdCBoYW5kbGluZyBjdXJyZW50bHkgZGlzYWJsZWQgYmVjYXVzZQorICoJCSAgICB1c2JfcmVxdWVzdF9pcnEgY3Jhc2hlcyBzb21ld2hlcmUgd2l0aGluIG9oY2kuYworICoJCSAgICBmb3Igbm8gYXBwYXJlbnQgcmVhc29uICh0aGF0IGlzIGZvciBtZSwgYW55d2F5KQorICoJCSAgICBFQ1AgY3VycmVudGx5IHVudGVzdGVkCisgKiAgIDAuMyAgMTAuMDguOTkgIGZpeGluZyBtZXJnZSBlcnJvcnMKKyAqICAgMC40ICAxMy4wOC45OSAgQWRkZWQgVmVuZG9yL1Byb2R1Y3QgSUQgb2YgQnJhZCBIYXJkJ3MgY2FibGUKKyAqICAgMC41ICAyMC4wOS45OSAgdXNiX2NvbnRyb2xfbXNnIHdyYXBwZXIgdXNlZAorICogICAgICAgIE5vdjAxLjAwICB1c2JfZGV2aWNlX3RhYmxlIHN1cHBvcnQgYnkgQWRhbSBKLiBSaWNodGVyCisgKiAgICAgICAgMDguMDQuMDEgIElkZW50aWZ5IHZlcnNpb24gb24gbW9kdWxlIGxvYWQuICBnYgorICoKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjUiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlRob21hcyBNLiBTYWlsZXIsIHNhaWxlckBpZmUuZWUuZXRoei5jaCIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBQYXJwb3J0IENhYmxlIGRyaXZlciBmb3IgQ2FibGVzIHVzaW5nIHRoZSBMdWNlbnQgVGVjaG5vbG9naWVzIFVTUzcyMCBDaGlwIgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgeworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CisJdm9pZCAqaXJxaGFuZGxlOworCXVuc2lnbmVkIGludCBpcnFwaXBlOworCXVuc2lnbmVkIGNoYXIgcmVnWzddOyAgLyogVVNCIHJlZ2lzdGVycyAqLworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgZ2V0XzEyODRfcmVnaXN0ZXIoc3RydWN0IHBhcnBvcnQgKnBwLCB1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgY2hhciAqdmFsKQoreworCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2ID0gcHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJlZ2luZGV4WzldID0geworCQk0LCAwLCAxLCA1LCA1LCAwLCAyLCAzLCA2CisJfTsKKwlpbnQgcmV0OworCisJaWYgKCF1c2JkZXYpCisJCXJldHVybiAtMTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUodXNiZGV2LDApLCAzLCAweGMwLCAoKHVuc2lnbmVkIGludClyZWcpIDw8IDgsIDAsIHByaXYtPnJlZywgNywgMTAwMCk7CisJaWYgKHJldCAhPSA3KSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJ1c3M3MjA6IGdldF8xMjg0X3JlZ2lzdGVyKCVkKSBmYWlsZWQsIHN0YXR1cyAweCV4IGV4cGVjdGVkIDdcbiIsCisJCSAgICAgICAodW5zaWduZWQgaW50KXJlZywgcmV0KTsKKwkJcmV0ID0gLTE7CisJfSBlbHNlIHsKKyNpZiAwCisJCXByaW50ayhLRVJOX0RFQlVHICJ1c3M3MjA6IGdldF8xMjg0X3JlZ2lzdGVyKCVkKSByZXR1cm4gJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpcmVnLCAodW5zaWduZWQgaW50KXByaXYtPnJlZ1swXSwgKHVuc2lnbmVkIGludClwcml2LT5yZWdbMV0sCisJCSAgICAgICAodW5zaWduZWQgaW50KXByaXYtPnJlZ1syXSwgKHVuc2lnbmVkIGludClwcml2LT5yZWdbM10sICh1bnNpZ25lZCBpbnQpcHJpdi0+cmVnWzRdLAorCQkgICAgICAgKHVuc2lnbmVkIGludClwcml2LT5yZWdbNV0sICh1bnNpZ25lZCBpbnQpcHJpdi0+cmVnWzZdKTsKKyNlbmRpZgorCQkvKiBpZiBuQWNrIGludGVycnVwdHMgYXJlIGVuYWJsZWQgYW5kIHdlIGhhdmUgYW4gaW50ZXJydXB0LCBjYWxsIHRoZSBpbnRlcnJ1cHQgcHJvY2VkdXJlICovCisJCWlmIChwcml2LT5yZWdbMl0gJiBwcml2LT5yZWdbMV0gJiAweDEwKQorCQkJcGFycG9ydF9nZW5lcmljX2lycSgwLCBwcCwgTlVMTCk7CisJCXJldCA9IDA7CisJfQorCWlmICh2YWwpCisJCSp2YWwgPSBwcml2LT5yZWdbKHJlZyA+PSA5KSA/IDAgOiByZWdpbmRleFtyZWddXTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNldF8xMjg0X3JlZ2lzdGVyKHN0cnVjdCBwYXJwb3J0ICpwcCwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgdmFsKQoreworCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2ID0gcHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OworCWludCByZXQ7CisKKwlpZiAoIXVzYmRldikKKwkJcmV0dXJuIC0xOworCXJldCA9IHVzYl9jb250cm9sX21zZyh1c2JkZXYsIHVzYl9zbmRjdHJscGlwZSh1c2JkZXYsMCksIDQsIDB4NDAsICgoKHVuc2lnbmVkIGludClyZWcpIDw8IDgpIHwgdmFsLCAwLCBOVUxMLCAwLCAxMDAwKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJ1c3M3MjA6IHNldF8xMjg0X3JlZ2lzdGVyKCV1LDB4JTAyeCkgZmFpbGVkLCBzdGF0dXMgMHgleFxuIiwgCisJCSAgICAgICAodW5zaWduZWQgaW50KXJlZywgKHVuc2lnbmVkIGludCl2YWwsIHJldCk7CisJfSBlbHNlIHsKKyNpZiAwCisJCXByaW50ayhLRVJOX0RFQlVHICJ1c3M3MjA6IHNldF8xMjg0X3JlZ2lzdGVyKCV1LDB4JTAyeClcbiIsIAorCQkgICAgICAgKHVuc2lnbmVkIGludClyZWcsICh1bnNpZ25lZCBpbnQpdmFsKTsKKyNlbmRpZgorCX0KKwlyZXR1cm4gcmV0OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogRUNSIG1vZGVzICovCisjZGVmaW5lIEVDUl9TUFAgMDAKKyNkZWZpbmUgRUNSX1BTMiAwMQorI2RlZmluZSBFQ1JfUFBGIDAyCisjZGVmaW5lIEVDUl9FQ1AgMDMKKyNkZWZpbmUgRUNSX0VQUCAwNAorCisvKiBTYWZlbHkgY2hhbmdlIHRoZSBtb2RlIGJpdHMgaW4gdGhlIEVDUiAqLworc3RhdGljIGludCBjaGFuZ2VfbW9kZShzdHJ1Y3QgcGFycG9ydCAqcHAsIGludCBtKQoreworCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2ID0gcHAtPnByaXZhdGVfZGF0YTsKKwlpbnQgbW9kZTsKKworCWlmIChnZXRfMTI4NF9yZWdpc3RlcihwcCwgNiwgTlVMTCkpCisJCXJldHVybiAtRUlPOworCS8qIEJpdHMgPDc6NT4gY29udGFpbiB0aGUgbW9kZS4gKi8KKwltb2RlID0gKHByaXYtPnJlZ1syXSA+PiA1KSAmIDB4NzsKKwlpZiAobW9kZSA9PSBtKQorCQlyZXR1cm4gMDsKKwkvKiBXZSBoYXZlIHRvIGdvIHRocm91Z2ggbW9kZSAwMDAgb3IgMDAxICovCisJaWYgKG1vZGUgPiBFQ1JfUFMyICYmIG0gPiBFQ1JfUFMyKQorCQlpZiAoY2hhbmdlX21vZGUocHAsIEVDUl9QUzIpKQorCQkJcmV0dXJuIC1FSU87CisKKwlpZiAobSA8PSBFQ1JfUFMyICYmICEocHJpdi0+cmVnWzFdICYgMHgyMCkpIHsKKwkJLyogVGhpcyBtb2RlIHJlc2V0cyB0aGUgRklGTywgc28gd2UgbWF5CisJCSAqIGhhdmUgdG8gd2FpdCBmb3IgaXQgdG8gZHJhaW4gZmlyc3QuICovCisJCXVuc2lnbmVkIGxvbmcgZXhwaXJlID0gamlmZmllcyArIHBwLT5waHlzcG9ydC0+Y2FkLT50aW1lb3V0OworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSBFQ1JfUFBGOiAvKiBQYXJhbGxlbCBQb3J0IEZJRk8gbW9kZSAqLworCQljYXNlIEVDUl9FQ1A6IC8qIEVDUCBQYXJhbGxlbCBQb3J0IG1vZGUgKi8KKwkJCS8qIFBvbGwgc2xvd2x5LiAqLworCQkJZm9yICg7OykgeworCQkJCWlmIChnZXRfMTI4NF9yZWdpc3RlcihwcCwgNiwgTlVMTCkpCisJCQkJCXJldHVybiAtRUlPOworCQkJCWlmIChwcml2LT5yZWdbMl0gJiAweDAxKQorCQkJCQlicmVhazsKKwkJCQlpZiAodGltZV9hZnRlcl9lcSAoamlmZmllcywgZXhwaXJlKSkKKwkJCQkJLyogVGhlIEZJRk8gaXMgc3R1Y2suICovCisJCQkJCXJldHVybiAtRUJVU1k7CisJCQkJbXNsZWVwX2ludGVycnVwdGlibGUoMTApOworCQkJCWlmIChzaWduYWxfcGVuZGluZyAoY3VycmVudCkpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCS8qIFNldCB0aGUgbW9kZS4gKi8KKwlpZiAoc2V0XzEyODRfcmVnaXN0ZXIocHAsIDYsIG0gPDwgNSkpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCisvKgorICogQ2xlYXIgVElNRU9VVCBCSVQgaW4gRVBQIE1PREUKKyAqLworc3RhdGljIGludCBjbGVhcl9lcHBfdGltZW91dChzdHJ1Y3QgcGFycG9ydCAqcHApCit7CisJdW5zaWduZWQgY2hhciBzdGF0OworCisJaWYgKGdldF8xMjg0X3JlZ2lzdGVyKHBwLCAxLCAmc3RhdCkpCisJCXJldHVybiAxOworCXJldHVybiBzdGF0ICYgMTsKK30KKworLyoKKyAqIEFjY2VzcyBmdW5jdGlvbnMuCisgKi8KKyNpZiAwCitzdGF0aWMgaW50IHVzczcyMF9pcnEoaW50IHVzYnN0YXR1cywgdm9pZCAqYnVmZmVyLCBpbnQgbGVuLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHBhcnBvcnQgKnBwID0gKHN0cnVjdCBwYXJwb3J0ICopZGV2X2lkOworCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2ID0gcHAtPnByaXZhdGVfZGF0YTsJCisKKwlpZiAodXNic3RhdHVzICE9IDAgfHwgbGVuIDwgNCB8fCAhYnVmZmVyKQorCQlyZXR1cm4gMTsKKwltZW1jcHkocHJpdi0+cmVnLCBidWZmZXIsIDQpOworCS8qIGlmIG5BY2sgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCBhbmQgd2UgaGF2ZSBhbiBpbnRlcnJ1cHQsIGNhbGwgdGhlIGludGVycnVwdCBwcm9jZWR1cmUgKi8KKwlpZiAocHJpdi0+cmVnWzJdICYgcHJpdi0+cmVnWzFdICYgMHgxMCkKKwkJcGFycG9ydF9nZW5lcmljX2lycSgwLCBwcCwgTlVMTCk7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgcGFycG9ydF91c3M3MjBfd3JpdGVfZGF0YShzdHJ1Y3QgcGFycG9ydCAqcHAsIHVuc2lnbmVkIGNoYXIgZCkKK3sKKwlzZXRfMTI4NF9yZWdpc3RlcihwcCwgMCwgZCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHBhcnBvcnRfdXNzNzIwX3JlYWRfZGF0YShzdHJ1Y3QgcGFycG9ydCAqcHApCit7CisJdW5zaWduZWQgY2hhciByZXQ7CisKKwlpZiAoZ2V0XzEyODRfcmVnaXN0ZXIocHAsIDAsICZyZXQpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwYXJwb3J0X3VzczcyMF93cml0ZV9jb250cm9sKHN0cnVjdCBwYXJwb3J0ICpwcCwgdW5zaWduZWQgY2hhciBkKQoreworCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2ID0gcHAtPnByaXZhdGVfZGF0YTsJCisKKwlkID0gKGQgJiAweGYpIHwgKHByaXYtPnJlZ1sxXSAmIDB4ZjApOworCWlmIChzZXRfMTI4NF9yZWdpc3RlcihwcCwgMiwgZCkpCisJCXJldHVybjsKKwlwcml2LT5yZWdbMV0gPSBkOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBwYXJwb3J0X3VzczcyMF9yZWFkX2NvbnRyb2woc3RydWN0IHBhcnBvcnQgKnBwKQoreworCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2ID0gcHAtPnByaXZhdGVfZGF0YTsJCisJcmV0dXJuIHByaXYtPnJlZ1sxXSAmIDB4ZjsgLyogVXNlIHNvZnQgY29weSAqLworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBwYXJwb3J0X3VzczcyMF9mcm9iX2NvbnRyb2woc3RydWN0IHBhcnBvcnQgKnBwLCB1bnNpZ25lZCBjaGFyIG1hc2ssIHVuc2lnbmVkIGNoYXIgdmFsKQoreworCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2ID0gcHAtPnByaXZhdGVfZGF0YTsJCisJdW5zaWduZWQgY2hhciBkOworCisJbWFzayAmPSAweDBmOworCXZhbCAmPSAweDBmOworCWQgPSAocHJpdi0+cmVnWzFdICYgKH5tYXNrKSkgXiB2YWw7CisJaWYgKHNldF8xMjg0X3JlZ2lzdGVyKHBwLCAyLCBkKSkKKwkJcmV0dXJuIDA7CisJcHJpdi0+cmVnWzFdID0gZDsKKwlyZXR1cm4gZCAmIDB4ZjsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgcGFycG9ydF91c3M3MjBfcmVhZF9zdGF0dXMoc3RydWN0IHBhcnBvcnQgKnBwKQoreworCXVuc2lnbmVkIGNoYXIgcmV0OworCisJaWYgKGdldF8xMjg0X3JlZ2lzdGVyKHBwLCAxLCAmcmV0KSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHJldCAmIDB4Zjg7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnBvcnRfdXNzNzIwX2Rpc2FibGVfaXJxKHN0cnVjdCBwYXJwb3J0ICpwcCkKK3sKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdiA9IHBwLT5wcml2YXRlX2RhdGE7CQorCXVuc2lnbmVkIGNoYXIgZDsKKworCWQgPSBwcml2LT5yZWdbMV0gJiB+MHgxMDsKKwlpZiAoc2V0XzEyODRfcmVnaXN0ZXIocHAsIDIsIGQpKQorCQlyZXR1cm47CisJcHJpdi0+cmVnWzFdID0gZDsKK30KKworc3RhdGljIHZvaWQgcGFycG9ydF91c3M3MjBfZW5hYmxlX2lycShzdHJ1Y3QgcGFycG9ydCAqcHApCit7CisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXYgPSBwcC0+cHJpdmF0ZV9kYXRhOwkKKwl1bnNpZ25lZCBjaGFyIGQ7CisKKwlkID0gcHJpdi0+cmVnWzFdIHwgMHgxMDsKKwlpZiAoc2V0XzEyODRfcmVnaXN0ZXIocHAsIDIsIGQpKQorCQlyZXR1cm47CisJcHJpdi0+cmVnWzFdID0gZDsKK30KKworc3RhdGljIHZvaWQgcGFycG9ydF91c3M3MjBfZGF0YV9mb3J3YXJkIChzdHJ1Y3QgcGFycG9ydCAqcHApCit7CisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXYgPSBwcC0+cHJpdmF0ZV9kYXRhOwkKKwl1bnNpZ25lZCBjaGFyIGQ7CisKKwlkID0gcHJpdi0+cmVnWzFdICYgfjB4MjA7CisJaWYgKHNldF8xMjg0X3JlZ2lzdGVyKHBwLCAyLCBkKSkKKwkJcmV0dXJuOworCXByaXYtPnJlZ1sxXSA9IGQ7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnBvcnRfdXNzNzIwX2RhdGFfcmV2ZXJzZSAoc3RydWN0IHBhcnBvcnQgKnBwKQoreworCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2ID0gcHAtPnByaXZhdGVfZGF0YTsJCisJdW5zaWduZWQgY2hhciBkOworCisJZCA9IHByaXYtPnJlZ1sxXSB8IDB4MjA7CisJaWYgKHNldF8xMjg0X3JlZ2lzdGVyKHBwLCAyLCBkKSkKKwkJcmV0dXJuOworCXByaXYtPnJlZ1sxXSA9IGQ7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnBvcnRfdXNzNzIwX2luaXRfc3RhdGUoc3RydWN0IHBhcmRldmljZSAqZGV2LCBzdHJ1Y3QgcGFycG9ydF9zdGF0ZSAqcykKK3sKKwlzLT51LnBjLmN0ciA9IDB4YyB8IChkZXYtPmlycV9mdW5jID8gMHgxMCA6IDB4MCk7CisJcy0+dS5wYy5lY3IgPSAweDI0OworfQorCitzdGF0aWMgdm9pZCBwYXJwb3J0X3VzczcyMF9zYXZlX3N0YXRlKHN0cnVjdCBwYXJwb3J0ICpwcCwgc3RydWN0IHBhcnBvcnRfc3RhdGUgKnMpCit7CisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXYgPSBwcC0+cHJpdmF0ZV9kYXRhOwkKKworCWlmIChnZXRfMTI4NF9yZWdpc3RlcihwcCwgMiwgTlVMTCkpCisJCXJldHVybjsKKwlzLT51LnBjLmN0ciA9IHByaXYtPnJlZ1sxXTsKKwlzLT51LnBjLmVjciA9IHByaXYtPnJlZ1syXTsKK30KKworc3RhdGljIHZvaWQgcGFycG9ydF91c3M3MjBfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgcGFycG9ydCAqcHAsIHN0cnVjdCBwYXJwb3J0X3N0YXRlICpzKQoreworCXNldF8xMjg0X3JlZ2lzdGVyKHBwLCAyLCBzLT51LnBjLmN0cik7CisJc2V0XzEyODRfcmVnaXN0ZXIocHAsIDYsIHMtPnUucGMuZWNyKTsKKwlnZXRfMTI4NF9yZWdpc3RlcihwcCwgMiwgTlVMTCk7Cit9CisKK3N0YXRpYyBzaXplX3QgcGFycG9ydF91c3M3MjBfZXBwX3JlYWRfZGF0YShzdHJ1Y3QgcGFycG9ydCAqcHAsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbmd0aCwgaW50IGZsYWdzKQoreworCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2ID0gcHAtPnByaXZhdGVfZGF0YTsJCisJc2l6ZV90IGdvdCA9IDA7CisKKwlpZiAoY2hhbmdlX21vZGUocHAsIEVDUl9FUFApKQorCQlyZXR1cm4gMDsKKwlmb3IgKDsgZ290IDwgbGVuZ3RoOyBnb3QrKykgeworCQlpZiAoZ2V0XzEyODRfcmVnaXN0ZXIocHAsIDQsIChjaGFyICopYnVmKSkKKwkJCWJyZWFrOworCQlidWYrKzsKKwkJaWYgKHByaXYtPnJlZ1swXSAmIDB4MDEpIHsKKwkJCWNsZWFyX2VwcF90aW1lb3V0KHBwKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWNoYW5nZV9tb2RlKHBwLCBFQ1JfUFMyKTsKKwlyZXR1cm4gZ290OworfQorCitzdGF0aWMgc2l6ZV90IHBhcnBvcnRfdXNzNzIwX2VwcF93cml0ZV9kYXRhKHN0cnVjdCBwYXJwb3J0ICpwcCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuZ3RoLCBpbnQgZmxhZ3MpCit7CisjaWYgMAorCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2ID0gcHAtPnByaXZhdGVfZGF0YTsJCisJc2l6ZV90IHdyaXR0ZW4gPSAwOworCisJaWYgKGNoYW5nZV9tb2RlKHBwLCBFQ1JfRVBQKSkKKwkJcmV0dXJuIDA7CisJZm9yICg7IHdyaXR0ZW4gPCBsZW5ndGg7IHdyaXR0ZW4rKykgeworCQlpZiAoc2V0XzEyODRfcmVnaXN0ZXIocHAsIDQsIChjaGFyICopYnVmKSkKKwkJCWJyZWFrOworCQkoKGNoYXIqKWJ1ZikrKzsKKwkJaWYgKGdldF8xMjg0X3JlZ2lzdGVyKHBwLCAxLCBOVUxMKSkKKwkJCWJyZWFrOworCQlpZiAocHJpdi0+cmVnWzBdICYgMHgwMSkgeworCQkJY2xlYXJfZXBwX3RpbWVvdXQocHApOworCQkJYnJlYWs7CisJCX0KKwl9CisJY2hhbmdlX21vZGUocHAsIEVDUl9QUzIpOworCXJldHVybiB3cml0dGVuOworI2Vsc2UKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdiA9IHBwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IHByaXYtPnVzYmRldjsKKwlpbnQgcmxlbjsKKwlpbnQgaTsKKworCWlmICghdXNiZGV2KQorCQlyZXR1cm4gMDsKKwlpZiAoY2hhbmdlX21vZGUocHAsIEVDUl9FUFApKQorCQlyZXR1cm4gMDsKKwlpID0gdXNiX2J1bGtfbXNnKHVzYmRldiwgdXNiX3NuZGJ1bGtwaXBlKHVzYmRldiwgMSksICh2b2lkICopYnVmLCBsZW5ndGgsICZybGVuLCAyMDAwMCk7CisJaWYgKGkpCisJCXByaW50ayhLRVJOX0VSUiAidXNzNzIwOiBzZW5kYnVsayBlcCAxIGJ1ZiAlcCBsZW4gJVp1IHJsZW4gJXVcbiIsIGJ1ZiwgbGVuZ3RoLCBybGVuKTsKKwljaGFuZ2VfbW9kZShwcCwgRUNSX1BTMik7CisJcmV0dXJuIHJsZW47CisjZW5kaWYKK30KKworc3RhdGljIHNpemVfdCBwYXJwb3J0X3VzczcyMF9lcHBfcmVhZF9hZGRyKHN0cnVjdCBwYXJwb3J0ICpwcCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuZ3RoLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHBhcnBvcnRfdXNzNzIwX3ByaXZhdGUgKnByaXYgPSBwcC0+cHJpdmF0ZV9kYXRhOwkKKwlzaXplX3QgZ290ID0gMDsKKworCWlmIChjaGFuZ2VfbW9kZShwcCwgRUNSX0VQUCkpCisJCXJldHVybiAwOworCWZvciAoOyBnb3QgPCBsZW5ndGg7IGdvdCsrKSB7CisJCWlmIChnZXRfMTI4NF9yZWdpc3RlcihwcCwgMywgKGNoYXIgKilidWYpKQorCQkJYnJlYWs7CisJCWJ1ZisrOworCQlpZiAocHJpdi0+cmVnWzBdICYgMHgwMSkgeworCQkJY2xlYXJfZXBwX3RpbWVvdXQocHApOworCQkJYnJlYWs7CisJCX0KKwl9CisJY2hhbmdlX21vZGUocHAsIEVDUl9QUzIpOworCXJldHVybiBnb3Q7Cit9CisKK3N0YXRpYyBzaXplX3QgcGFycG9ydF91c3M3MjBfZXBwX3dyaXRlX2FkZHIoc3RydWN0IHBhcnBvcnQgKnBwLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW5ndGgsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdiA9IHBwLT5wcml2YXRlX2RhdGE7CQorCXNpemVfdCB3cml0dGVuID0gMDsKKworCWlmIChjaGFuZ2VfbW9kZShwcCwgRUNSX0VQUCkpCisJCXJldHVybiAwOworCWZvciAoOyB3cml0dGVuIDwgbGVuZ3RoOyB3cml0dGVuKyspIHsKKwkJaWYgKHNldF8xMjg0X3JlZ2lzdGVyKHBwLCAzLCAqKGNoYXIgKilidWYpKQorCQkJYnJlYWs7CisJCWJ1ZisrOworCQlpZiAoZ2V0XzEyODRfcmVnaXN0ZXIocHAsIDEsIE5VTEwpKQorCQkJYnJlYWs7CisJCWlmIChwcml2LT5yZWdbMF0gJiAweDAxKSB7CisJCQljbGVhcl9lcHBfdGltZW91dChwcCk7CisJCQlicmVhazsKKwkJfQorCX0KKwljaGFuZ2VfbW9kZShwcCwgRUNSX1BTMik7CisJcmV0dXJuIHdyaXR0ZW47Cit9CisKK3N0YXRpYyBzaXplX3QgcGFycG9ydF91c3M3MjBfZWNwX3dyaXRlX2RhdGEoc3RydWN0IHBhcnBvcnQgKnBwLCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW4sIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdiA9IHBwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IHByaXYtPnVzYmRldjsKKwlpbnQgcmxlbjsKKwlpbnQgaTsKKworCWlmICghdXNiZGV2KQorCQlyZXR1cm4gMDsKKwlpZiAoY2hhbmdlX21vZGUocHAsIEVDUl9FQ1ApKQorCQlyZXR1cm4gMDsKKwlpID0gdXNiX2J1bGtfbXNnKHVzYmRldiwgdXNiX3NuZGJ1bGtwaXBlKHVzYmRldiwgMSksICh2b2lkICopYnVmZmVyLCBsZW4sICZybGVuLCAyMDAwMCk7CisJaWYgKGkpCisJCXByaW50ayhLRVJOX0VSUiAidXNzNzIwOiBzZW5kYnVsayBlcCAxIGJ1ZiAlcCBsZW4gJVp1IHJsZW4gJXVcbiIsIGJ1ZmZlciwgbGVuLCBybGVuKTsKKwljaGFuZ2VfbW9kZShwcCwgRUNSX1BTMik7CisJcmV0dXJuIHJsZW47Cit9CisKK3N0YXRpYyBzaXplX3QgcGFycG9ydF91c3M3MjBfZWNwX3JlYWRfZGF0YShzdHJ1Y3QgcGFycG9ydCAqcHAsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKQoreworCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2ID0gcHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OworCWludCBybGVuOworCWludCBpOworCisJaWYgKCF1c2JkZXYpCisJCXJldHVybiAwOworCWlmIChjaGFuZ2VfbW9kZShwcCwgRUNSX0VDUCkpCisJCXJldHVybiAwOworCWkgPSB1c2JfYnVsa19tc2codXNiZGV2LCB1c2JfcmN2YnVsa3BpcGUodXNiZGV2LCAyKSwgYnVmZmVyLCBsZW4sICZybGVuLCAyMDAwMCk7CisJaWYgKGkpCisJCXByaW50ayhLRVJOX0VSUiAidXNzNzIwOiByZWN2YnVsayBlcCAyIGJ1ZiAlcCBsZW4gJVp1IHJsZW4gJXVcbiIsIGJ1ZmZlciwgbGVuLCBybGVuKTsKKwljaGFuZ2VfbW9kZShwcCwgRUNSX1BTMik7CisJcmV0dXJuIHJsZW47Cit9CisKK3N0YXRpYyBzaXplX3QgcGFycG9ydF91c3M3MjBfZWNwX3dyaXRlX2FkZHIoc3RydWN0IHBhcnBvcnQgKnBwLCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW4sIGludCBmbGFncykKK3sKKwlzaXplX3Qgd3JpdHRlbiA9IDA7CisKKwlpZiAoY2hhbmdlX21vZGUocHAsIEVDUl9FQ1ApKQorCQlyZXR1cm4gMDsKKwlmb3IgKDsgd3JpdHRlbiA8IGxlbjsgd3JpdHRlbisrKSB7CisJCWlmIChzZXRfMTI4NF9yZWdpc3RlcihwcCwgNSwgKihjaGFyICopYnVmZmVyKSkKKwkJCWJyZWFrOworCQlidWZmZXIrKzsKKwl9CisJY2hhbmdlX21vZGUocHAsIEVDUl9QUzIpOworCXJldHVybiB3cml0dGVuOworfQorCitzdGF0aWMgc2l6ZV90IHBhcnBvcnRfdXNzNzIwX3dyaXRlX2NvbXBhdChzdHJ1Y3QgcGFycG9ydCAqcHAsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKQoreworCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2ID0gcHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OworCWludCBybGVuOworCWludCBpOworCisJaWYgKCF1c2JkZXYpCisJCXJldHVybiAwOworCWlmIChjaGFuZ2VfbW9kZShwcCwgRUNSX1BQRikpCisJCXJldHVybiAwOworCWkgPSB1c2JfYnVsa19tc2codXNiZGV2LCB1c2Jfc25kYnVsa3BpcGUodXNiZGV2LCAxKSwgKHZvaWQgKilidWZmZXIsIGxlbiwgJnJsZW4sIDIwMDAwKTsKKwlpZiAoaSkKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c3M3MjA6IHNlbmRidWxrIGVwIDEgYnVmICVwIGxlbiAlWnUgcmxlbiAldVxuIiwgYnVmZmVyLCBsZW4sIHJsZW4pOworCWNoYW5nZV9tb2RlKHBwLCBFQ1JfUFMyKTsKKwlyZXR1cm4gcmxlbjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgcGFycG9ydF9vcGVyYXRpb25zIHBhcnBvcnRfdXNzNzIwX29wcyA9IAoreworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkud3JpdGVfZGF0YSA9CQlwYXJwb3J0X3VzczcyMF93cml0ZV9kYXRhLAorCS5yZWFkX2RhdGEgPQkJcGFycG9ydF91c3M3MjBfcmVhZF9kYXRhLAorCisJLndyaXRlX2NvbnRyb2wgPQlwYXJwb3J0X3VzczcyMF93cml0ZV9jb250cm9sLAorCS5yZWFkX2NvbnRyb2wgPQkJcGFycG9ydF91c3M3MjBfcmVhZF9jb250cm9sLAorCS5mcm9iX2NvbnRyb2wgPQkJcGFycG9ydF91c3M3MjBfZnJvYl9jb250cm9sLAorCisJLnJlYWRfc3RhdHVzID0JCXBhcnBvcnRfdXNzNzIwX3JlYWRfc3RhdHVzLAorCisJLmVuYWJsZV9pcnEgPQkJcGFycG9ydF91c3M3MjBfZW5hYmxlX2lycSwKKwkuZGlzYWJsZV9pcnEgPQkJcGFycG9ydF91c3M3MjBfZGlzYWJsZV9pcnEsCisKKwkuZGF0YV9mb3J3YXJkID0JCXBhcnBvcnRfdXNzNzIwX2RhdGFfZm9yd2FyZCwKKwkuZGF0YV9yZXZlcnNlID0JCXBhcnBvcnRfdXNzNzIwX2RhdGFfcmV2ZXJzZSwKKworCS5pbml0X3N0YXRlID0JCXBhcnBvcnRfdXNzNzIwX2luaXRfc3RhdGUsCisJLnNhdmVfc3RhdGUgPQkJcGFycG9ydF91c3M3MjBfc2F2ZV9zdGF0ZSwKKwkucmVzdG9yZV9zdGF0ZSA9CXBhcnBvcnRfdXNzNzIwX3Jlc3RvcmVfc3RhdGUsCisKKwkuZXBwX3dyaXRlX2RhdGEgPQlwYXJwb3J0X3VzczcyMF9lcHBfd3JpdGVfZGF0YSwKKwkuZXBwX3JlYWRfZGF0YSA9CXBhcnBvcnRfdXNzNzIwX2VwcF9yZWFkX2RhdGEsCisJLmVwcF93cml0ZV9hZGRyID0JcGFycG9ydF91c3M3MjBfZXBwX3dyaXRlX2FkZHIsCisJLmVwcF9yZWFkX2FkZHIgPQlwYXJwb3J0X3VzczcyMF9lcHBfcmVhZF9hZGRyLAorCisJLmVjcF93cml0ZV9kYXRhID0JcGFycG9ydF91c3M3MjBfZWNwX3dyaXRlX2RhdGEsCisJLmVjcF9yZWFkX2RhdGEgPQlwYXJwb3J0X3VzczcyMF9lY3BfcmVhZF9kYXRhLAorCS5lY3Bfd3JpdGVfYWRkciA9CXBhcnBvcnRfdXNzNzIwX2VjcF93cml0ZV9hZGRyLAorCisJLmNvbXBhdF93cml0ZV9kYXRhID0JcGFycG9ydF91c3M3MjBfd3JpdGVfY29tcGF0LAorCS5uaWJibGVfcmVhZF9kYXRhID0JcGFycG9ydF9pZWVlMTI4NF9yZWFkX25pYmJsZSwKKwkuYnl0ZV9yZWFkX2RhdGEgPQlwYXJwb3J0X2llZWUxMjg0X3JlYWRfYnl0ZSwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IHVzczcyMF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplbmRwb2ludDsKKwlzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3QgcGFycG9ydCAqcHA7CisJaW50IGk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAidXNzNzIwOiBwcm9iZTogdmVuZG9yIGlkIDB4JXgsIGRldmljZSBpZCAweCV4XG4iLAorCSAgICAgICBsZTE2X3RvX2NwdSh1c2JkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCSAgICAgICBsZTE2X3RvX2NwdSh1c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisKKwkvKiBvdXIga25vd24gaW50ZXJmYWNlcyBoYXZlIDMgYWx0ZXJuYXRlIHNldHRpbmdzICovCisJaWYgKGludGYtPm51bV9hbHRzZXR0aW5nICE9IDMpCisJCXJldHVybiAtRU5PREVWOworCisJaSA9IHVzYl9zZXRfaW50ZXJmYWNlKHVzYmRldiwgaW50Zi0+YWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCAyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAidXNzNzIwOiBzZXQgaW50ZWZhY2UgcmVzdWx0ICVkXG4iLCBpKTsKKworCWludGVyZmFjZSA9IGludGYtPmN1cl9hbHRzZXR0aW5nOworCisJLyoKKwkgKiBBbGxvY2F0ZSBwYXJwb3J0IGludGVyZmFjZSAKKwkgKi8KKwlwcmludGsoS0VSTl9JTkZPICJ1c3M3MjA6IChDKSAxOTk5IGJ5IFRob21hcyBTYWlsZXIsIDxzYWlsZXJAaWZlLmVlLmV0aHouY2g+XG4iKTsKKworCWlmICghKHByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGFycG9ydF91c3M3MjBfcHJpdmF0ZSksIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCEocHAgPSBwYXJwb3J0X3JlZ2lzdGVyX3BvcnQoMCwgUEFSUE9SVF9JUlFfTk9ORSwgUEFSUE9SVF9ETUFfTk9ORSwgJnBhcnBvcnRfdXNzNzIwX29wcykpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInVzYi11c3M3MjA6IGNvdWxkIG5vdCByZWdpc3RlciBwYXJwb3J0XG4iKTsKKwkJZ290byBwcm9iZV9hYm9ydDsKKwl9CisKKwlwcC0+cHJpdmF0ZV9kYXRhID0gcHJpdjsKKwlwcml2LT51c2JkZXYgPSB1c2JkZXY7CisJcHAtPm1vZGVzID0gUEFSUE9SVF9NT0RFX1BDU1BQIHwgUEFSUE9SVF9NT0RFX1RSSVNUQVRFIHwgUEFSUE9SVF9NT0RFX0VQUCB8IFBBUlBPUlRfTU9ERV9FQ1AgfCBQQVJQT1JUX01PREVfQ09NUEFUOworCisJLyogc2V0IHRoZSBVU1M3MjAgY29udHJvbCByZWdpc3RlciB0byBtYW51YWwgbW9kZSwgbm8gRUNQIGNvbXByZXNzaW9uLCBlbmFibGUgYWxsIGludHMgKi8KKwlzZXRfMTI4NF9yZWdpc3RlcihwcCwgNywgMHgwMCk7CisJc2V0XzEyODRfcmVnaXN0ZXIocHAsIDYsIDB4MzApOyAgLyogUFMvMiBtb2RlICovCisJc2V0XzEyODRfcmVnaXN0ZXIocHAsIDIsIDB4MGMpOworCS8qIGRlYnVnZ2luZyAqLworCWdldF8xMjg0X3JlZ2lzdGVyKHBwLCAwLCBOVUxMKTsKKwlwcmludGsoInVzczcyMDogcmVnOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCSAgICAgICBwcml2LT5yZWdbMF0sIHByaXYtPnJlZ1sxXSwgcHJpdi0+cmVnWzJdLCBwcml2LT5yZWdbM10sIHByaXYtPnJlZ1s0XSwgcHJpdi0+cmVnWzVdLCBwcml2LT5yZWdbNl0pOworCisJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFsyXTsKKwlwcmludGsoS0VSTl9ERUJVRyAidXNzNzIwOiBlcGFkZHIgJWQgaW50ZXJ2YWwgJWRcbiIsIGVuZHBvaW50LT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsIGVuZHBvaW50LT5kZXNjLmJJbnRlcnZhbCk7CisjaWYgMAorCXByaXYtPmlycXBpcGUgPSB1c2JfcmN2Y3RybHBpcGUodXNiZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7CisJaSA9IHVzYl9yZXF1ZXN0X2lycSh1c2JkZXYsIHByaXYtPmlycXBpcGUsCisJCQkJICB1c3M3MjBfaXJxLCBlbmRwb2ludC0+YkludGVydmFsLAorCQkJCSAgcHAsICZwcml2LT5pcnFoYW5kbGUpOworCWlmIChpKSB7CisJCXByaW50ayAoS0VSTl9XQVJOSU5HICJ1c2ItdXNzNzIwOiB1c2JfcmVxdWVzdF9pcnEgZmFpbGVkICgweCV4KVxuIiwgaSk7CisJCWdvdG8gcHJvYmVfYWJvcnRfcG9ydDsKKwl9CisjZW5kaWYKKwlwYXJwb3J0X2Fubm91bmNlX3BvcnQocHApOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgcHApOworCXJldHVybiAwOworCisjaWYgMAorcHJvYmVfYWJvcnRfcG9ydDoKKwlwYXJwb3J0X3B1dF9wb3J0KHBwKTsKKyNlbmRpZgorcHJvYmVfYWJvcnQ6CisJa2ZyZWUocHJpdik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyB2b2lkIHVzczcyMF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBwYXJwb3J0ICpwcCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCXN0cnVjdCBwYXJwb3J0X3VzczcyMF9wcml2YXRlICpwcml2OworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CisJaWYgKHBwKSB7CisJCXByaXYgPSBwcC0+cHJpdmF0ZV9kYXRhOworCQlwYXJwb3J0X3JlbW92ZV9wb3J0KHBwKTsKKyNpZiAwCisJCXVzYl9yZWxlYXNlX2lycSh1c2JkZXYsIHByaXYtPmlycWhhbmRsZSwgcHJpdi0+aXJxcGlwZSk7CisjZW5kaWYKKwkJcHJpdi0+dXNiZGV2ID0gTlVMTDsKKwkJcGFycG9ydF9wdXRfcG9ydChwcCk7CisJCWtmcmVlKHByaXYpOworCX0KK30KKworLyogdGFibGUgb2YgY2FibGVzIHRoYXQgd29yayB0aHJvdWdoIHRoaXMgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNzNzIwX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRSgweDA0N2UsIDB4MTAwMSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTU3LCAweDIwMDEpIH0sCisJeyBVU0JfREVWSUNFKDB4MDcyOSwgMHgxMjg0KSB9LAorCXsgVVNCX0RFVklDRSgweDEyOTMsIDB4MDAwMikgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCB1c3M3MjBfdGFibGUpOworCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c3M3MjBfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJ1c3M3MjAiLAorCS5wcm9iZSA9CXVzczcyMF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzczcyMF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CXVzczcyMF90YWJsZSwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgX19pbml0IHVzczcyMF9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnVzczcyMF9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gb3V0OworCisJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworb3V0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c3M3MjBfY2xlYW51cCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ1c3M3MjBfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNzNzIwX2luaXQpOworbW9kdWxlX2V4aXQodXNzNzIwX2NsZWFudXApOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi9LY29uZmlnIGIvZHJpdmVycy91c2IvbW9uL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU2MTUyYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21vbi9LY29uZmlnCkBAIC0wLDAgKzEsMjIgQEAKKyMKKyMgVVNCIE1vbml0b3IgY29uZmlndXJhdGlvbgorIworCisjIEluIG5vcm1hbCBsaWZlLCBpdCBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gaGF2ZSB1c2Jtb24gYXMgYSBtb2R1bGUsIGFuZCBpbiBmYWN0CisjIGl0IGlzIGhhcm1mdWwsIGJlY2F1c2UgdGhlcmUgaXMgbm8gd2F5IHRvIGF1dG9sb2FkIHRoZSBtb2R1bGUuCisjIFRoZSAnbScgb3B0aW9uIGlzIGFsbG93ZWQgZm9yIGhhY2tlcnMgd2hvIGRlYnVnIHRoZSB1c2Jtb24gaXRzZWxmLAorIyBhbmQgZm9yIHRob3NlIHdobyBoYXZlIHVzYmNvcmUgYXMgYSBtb2R1bGUuCitjb25maWcgVVNCX01PTgorCXRyaXN0YXRlICJVU0IgTW9uaXRvciIKKwlkZXBlbmRzIG9uIFVTQgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBoZXJlLCBhIGNvbXBvbmVudCB3aGljaCBjYXB0dXJlcyB0aGUgVVNCIHRyYWZmaWMKKwkgIGJldHdlZW4gcGVyaXBoZXJhbC1zcGVjaWZpYyBkcml2ZXJzIGFuZCBIQyBkcml2ZXJzIHdpbGwgYmUgYnVpbHQuCisJICBUaGUgVVNCX01PTiBpcyBzaW1pbGFyIGluIHNwaXJpdCBhbmQgbWF5IGJlIGNvbXBhdGlibGUgd2l0aCBEYXZlCisJICBIYXJkaW5nJ3MgVVNCTW9uLgorCisJICBUaGlzIGlzIHNvbWV3aGF0IGV4cGVyaW1lbnRhbCBhdCB0aGlzIHRpbWUsIGJ1dCBpdCBzaG91bGQgYmUgc2FmZSwKKwkgIGFzIGxvbmcgYXMgeW91IGFyZW4ndCBidWlsZGluZyB0aGlzIGFzIGEgbW9kdWxlIGFuZCB0aGVuIHJlbW92aW5nIGl0LgorCisJICBJZiB1bnN1cmUsIHNheSBZLiBEbyBub3Qgc2F5IE0uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9tb24vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NmZjhkNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21vbi9NYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIFVTQiBDb3JlIGZpbGVzIGFuZCBmaWxlc3lzdGVtCisjCisKK3VzYm1vbi1vYmpzCTo9IG1vbl9tYWluLm8gbW9uX3N0YXQubyBtb25fdGV4dC5vCisKK29iai0kKENPTkZJR19VU0JfTU9OKQkrPSB1c2Jtb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMgYi9kcml2ZXJzL3VzYi9tb24vbW9uX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTlkMDA4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMKQEAgLTAsMCArMSwzNzcgQEAKKy8qCisgKiBUaGUgVVNCIE1vbml0b3IsIGluc3BpcmVkIGJ5IERhdmUgSGFyZGluZydzIFVTQk1vbi4KKyAqCisgKiBtb25fbWFpbi5jOiBNYWluIGZpbGUsIG1vZHVsZSBpbml0aWF0aW9uIGFuZCBleGl0LCByZWdpc3RyYXRpb25zLCBldGMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorCisjaW5jbHVkZSAidXNiX21vbi5oIgorI2luY2x1ZGUgIi4uL2NvcmUvaGNkLmgiCisKK3N0YXRpYyB2b2lkIG1vbl9zdWJtaXQoc3RydWN0IHVzYl9idXMgKnVidXMsIHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgdm9pZCBtb25fY29tcGxldGUoc3RydWN0IHVzYl9idXMgKnVidXMsIHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgdm9pZCBtb25fc3RvcChzdHJ1Y3QgbW9uX2J1cyAqbWJ1cyk7CitzdGF0aWMgdm9pZCBtb25fZGlzc29sdmUoc3RydWN0IG1vbl9idXMgKm1idXMsIHN0cnVjdCB1c2JfYnVzICp1YnVzKTsKK3N0YXRpYyB2b2lkIG1vbl9idXNfZHJvcChzdHJ1Y3Qga3JlZiAqcik7CitzdGF0aWMgdm9pZCBtb25fYnVzX2luaXQoc3RydWN0IGRlbnRyeSAqbW9uZGlyLCBzdHJ1Y3QgdXNiX2J1cyAqdWJ1cyk7CisKK0RFQ0xBUkVfTVVURVgobW9uX2xvY2spOworCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbW9uX2RpcjsJCS8qIC9kYmcvdXNibW9uICovCitzdGF0aWMgTElTVF9IRUFEKG1vbl9idXNlcyk7CQkvKiBBbGwgYnVzZXMgd2Uga25vdzogc3RydWN0IG1vbl9idXMgKi8KKworLyoKKyAqIExpbmsgYSByZWFkZXIgaW50byB0aGUgYnVzLgorICoKKyAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCBtb25fbG9jayB0YWtlbiBiZWNhdXNlIG9mIG1idXMtPnJlZi4KKyAqLwordm9pZCBtb25fcmVhZGVyX2FkZChzdHJ1Y3QgbW9uX2J1cyAqbWJ1cywgc3RydWN0IG1vbl9yZWFkZXIgKnIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdXNiX2J1cyAqdWJ1czsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtYnVzLT5sb2NrLCBmbGFncyk7CisJaWYgKG1idXMtPm5yZWFkZXJzID09IDApIHsKKwkJdWJ1cyA9IG1idXMtPnVfYnVzOworCQlpZiAodWJ1cy0+bW9uaXRvcmVkKSB7CisJCQkvKgorCQkJICogU29tZXRoaW5nIGlzIHJlYWxseSBicm9rZW4sIHJlZnVzZSB0byBnbyBvbiBhbmQKKwkJCSAqIHBvc3NpYmx5IGNvcnJ1cHQgb3BzIHBvaW50ZXJzIG9yIHdvcnNlLgorCQkJICovCisJCQlwcmludGsoS0VSTl9FUlIgVEFHICI6IGJ1cyAlZCBpcyBhbHJlYWR5IG1vbml0b3JlZFxuIiwKKwkJCSAgICB1YnVzLT5idXNudW0pOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWJ1cy0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuOworCQl9CisJCXVidXMtPm1vbml0b3JlZCA9IDE7CisJfQorCW1idXMtPm5yZWFkZXJzKys7CisJbGlzdF9hZGRfdGFpbCgmci0+cl9saW5rLCAmbWJ1cy0+cl9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYnVzLT5sb2NrLCBmbGFncyk7CisKKwlrcmVmX2dldCgmbWJ1cy0+cmVmKTsKK30KKworLyoKKyAqIFVubGluayByZWFkZXIgZnJvbSB0aGUgYnVzLgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIHdpdGggbW9uX2xvY2sgdGFrZW4sIHNvIHdlIGNhbiBkZWNyZW1lbnQgbWJ1cy0+cmVmLgorICovCit2b2lkIG1vbl9yZWFkZXJfZGVsKHN0cnVjdCBtb25fYnVzICptYnVzLCBzdHJ1Y3QgbW9uX3JlYWRlciAqcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1idXMtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmci0+cl9saW5rKTsKKwktLW1idXMtPm5yZWFkZXJzOworCWlmIChtYnVzLT5ucmVhZGVycyA9PSAwKQorCQltb25fc3RvcChtYnVzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYnVzLT5sb2NrLCBmbGFncyk7CisKKwlrcmVmX3B1dCgmbWJ1cy0+cmVmLCBtb25fYnVzX2Ryb3ApOworfQorCisvKgorICovCitzdGF0aWMgdm9pZCBtb25fc3VibWl0KHN0cnVjdCB1c2JfYnVzICp1YnVzLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IG1vbl9idXMgKm1idXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJc3RydWN0IG1vbl9yZWFkZXIgKnI7CisKKwltYnVzID0gdWJ1cy0+bW9uX2J1czsKKwlpZiAobWJ1cyA9PSBOVUxMKQorCQlnb3RvIG91dF91bmxvY2tlZDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtYnVzLT5sb2NrLCBmbGFncyk7CisJaWYgKG1idXMtPm5yZWFkZXJzID09IDApCisJCWdvdG8gb3V0X2xvY2tlZDsKKworCWxpc3RfZm9yX2VhY2ggKHBvcywgJm1idXMtPnJfbGlzdCkgeworCQlyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBtb25fcmVhZGVyLCByX2xpbmspOworCQlyLT5ybmZfc3VibWl0KHItPnJfZGF0YSwgdXJiKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYnVzLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuOworCitvdXRfbG9ja2VkOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1idXMtPmxvY2ssIGZsYWdzKTsKK291dF91bmxvY2tlZDoKKwlyZXR1cm47Cit9CisKKy8qCisgKi8KK3N0YXRpYyB2b2lkIG1vbl9zdWJtaXRfZXJyb3Ioc3RydWN0IHVzYl9idXMgKnVidXMsIHN0cnVjdCB1cmIgKnVyYiwgaW50IGVycikKK3sKKwlzdHJ1Y3QgbW9uX2J1cyAqbWJ1czsKKworCW1idXMgPSB1YnVzLT5tb25fYnVzOworCWlmIChtYnVzID09IE5VTEwpCisJCWdvdG8gb3V0X3VubG9ja2VkOworCisJLyoKKwkgKiBYWFggQ2FwdHVyZSB0aGUgZXJyb3IgY29kZSBhbmQgdGhlICdFJyBldmVudC4KKwkgKi8KKworCXJldHVybjsKKworb3V0X3VubG9ja2VkOgorCXJldHVybjsKK30KKworLyoKKyAqLworc3RhdGljIHZvaWQgbW9uX2NvbXBsZXRlKHN0cnVjdCB1c2JfYnVzICp1YnVzLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IG1vbl9idXMgKm1idXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJc3RydWN0IG1vbl9yZWFkZXIgKnI7CisKKwltYnVzID0gdWJ1cy0+bW9uX2J1czsKKwlpZiAobWJ1cyA9PSBOVUxMKSB7CisJCS8qCisJCSAqIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uCisJCSAqIEF0IHRoaXMgcG9pbnQgd2UgZG8gbm90IGV2ZW4ga25vdyB0aGUgYnVzIG51bWJlci4uLgorCQkgKi8KKwkJcHJpbnRrKEtFUk5fRVJSIFRBRyAiOiBOdWxsIG1vbiBidXMgaW4gVVJCLCBwaXBlIDB4JXhcbiIsCisJCSAgICB1cmItPnBpcGUpOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1idXMtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoIChwb3MsICZtYnVzLT5yX2xpc3QpIHsKKwkJciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgbW9uX3JlYWRlciwgcl9saW5rKTsKKwkJci0+cm5mX2NvbXBsZXRlKHItPnJfZGF0YSwgdXJiKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWJ1cy0+bG9jaywgZmxhZ3MpOworfQorCisvKiBpbnQgKCp1bmxpbmtfdXJiKSAoc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKTsgKi8KKworLyoKKyAqIFN0b3AgbW9uaXRvcmluZy4KKyAqIE9idmlvdXNseSB0aGlzIG11c3QgYmUgd2VsbCBsb2NrZWQsIHNvIG5vIG5lZWQgdG8gcGxheSB3aXRoIG1iJ3MuCisgKi8KK3N0YXRpYyB2b2lkIG1vbl9zdG9wKHN0cnVjdCBtb25fYnVzICptYnVzKQoreworCXN0cnVjdCB1c2JfYnVzICp1YnVzID0gbWJ1cy0+dV9idXM7CisKKwkvKgorCSAqIEEgc3RvcCBjYW4gYmUgY2FsbGVkIGZvciBhIGRpc3NvbHZlZCBtb25fYnVzIGluIGNhc2Ugb2YKKwkgKiBhIHJlYWRlciBzdGF5aW5nIGFjcm9zcyBhbiBybW1vZCBmb29faGNkLgorCSAqLworCWlmICh1YnVzICE9IE5VTEwpIHsKKwkJdWJ1cy0+bW9uaXRvcmVkID0gMDsKKwkJbWIoKTsKKwl9Cit9CisKKy8qCisgKiBBZGQgYSBVU0IgYnVzICh1c3VhbGx5IGJ5IGEgbW9kcHJvYmUgZm9vLWhjZCkKKyAqCisgKiBUaGlzIGRvZXMgbm90IHJldHVybiBhbiBlcnJvciBjb2RlIGJlY2F1c2UgdGhlIGNvcmUgY2Fubm90IGNhcmUgbGVzcworICogaWYgbW9uaXRvcmluZyBpcyBub3QgZXN0YWJsaXNoZWQuCisgKi8KK3N0YXRpYyB2b2lkIG1vbl9idXNfYWRkKHN0cnVjdCB1c2JfYnVzICp1YnVzKQoreworCW1vbl9idXNfaW5pdChtb25fZGlyLCB1YnVzKTsKK30KKworLyoKKyAqIFJlbW92ZSBhIFVTQiBidXMgKGVpdGhlciBmcm9tIHJtbW9kIGZvby1oY2Qgb3IgZnJvbSBhIGhvdC1yZW1vdmUgZXZlbnQpLgorICovCitzdGF0aWMgdm9pZCBtb25fYnVzX3JlbW92ZShzdHJ1Y3QgdXNiX2J1cyAqdWJ1cykKK3sKKwlzdHJ1Y3QgbW9uX2J1cyAqbWJ1cyA9IHVidXMtPm1vbl9idXM7CisKKwlkb3duKCZtb25fbG9jayk7CisJbGlzdF9kZWwoJm1idXMtPmJ1c19saW5rKTsKKwlkZWJ1Z2ZzX3JlbW92ZShtYnVzLT5kZW50X3QpOworCWRlYnVnZnNfcmVtb3ZlKG1idXMtPmRlbnRfcyk7CisKKwltb25fZGlzc29sdmUobWJ1cywgdWJ1cyk7CisJa3JlZl9wdXQoJm1idXMtPnJlZiwgbW9uX2J1c19kcm9wKTsKKwl1cCgmbW9uX2xvY2spOworfQorCisvKgorICogT3BzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX21vbl9vcGVyYXRpb25zIG1vbl9vcHNfMCA9IHsKKwkudXJiX3N1Ym1pdCA9CW1vbl9zdWJtaXQsCisJLnVyYl9zdWJtaXRfZXJyb3IgPSBtb25fc3VibWl0X2Vycm9yLAorCS51cmJfY29tcGxldGUgPQltb25fY29tcGxldGUsCisJLmJ1c19hZGQgPQltb25fYnVzX2FkZCwKKwkuYnVzX3JlbW92ZSA9CW1vbl9idXNfcmVtb3ZlLAorfTsKKworLyoKKyAqIFRlYXIgdXNiX2J1cyBhbmQgbW9uX2J1cyBhcGFydC4KKyAqLworc3RhdGljIHZvaWQgbW9uX2Rpc3NvbHZlKHN0cnVjdCBtb25fYnVzICptYnVzLCBzdHJ1Y3QgdXNiX2J1cyAqdWJ1cykKK3sKKworCS8qCisJICogTmV2ZXIgaGFwcGVucywgYnV0Li4uCisJICovCisJaWYgKHVidXMtPm1vbml0b3JlZCkgeworCQlwcmludGsoS0VSTl9FUlIgVEFHICI6IGJ1cyAlZCBpcyBkaXNzb2x2ZWQgd2hpbGUgbW9uaXRvcmVkXG4iLAorCQkgICAgdWJ1cy0+YnVzbnVtKTsKKwkJdWJ1cy0+bW9uaXRvcmVkID0gMDsKKwkJbWIoKTsKKwl9CisKKwl1YnVzLT5tb25fYnVzID0gTlVMTDsKKwltYnVzLT51X2J1cyA9IE5VTEw7CisJbWIoKTsKKwkvLyB1c2JfYnVzX3B1dCh1YnVzKTsKK30KKworLyoKKyAqLworc3RhdGljIHZvaWQgbW9uX2J1c19kcm9wKHN0cnVjdCBrcmVmICpyKQoreworCXN0cnVjdCBtb25fYnVzICptYnVzID0gY29udGFpbmVyX29mKHIsIHN0cnVjdCBtb25fYnVzLCByZWYpOworCWtmcmVlKG1idXMpOworfQorCisvKgorICogSW5pdGlhbGl6ZSBhIGJ1cyBmb3IgdXM6CisgKiAgLSBhbGxvY2F0ZSBtb25fYnVzCisgKiAgLSByZWZjb3VudCBVU0IgYnVzIHN0cnVjdAorICogIC0gbGluaworICovCitzdGF0aWMgdm9pZCBtb25fYnVzX2luaXQoc3RydWN0IGRlbnRyeSAqbW9uZGlyLCBzdHJ1Y3QgdXNiX2J1cyAqdWJ1cykKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkOworCXN0cnVjdCBtb25fYnVzICptYnVzOworCWVudW0geyBOQU1FU1ogPSAxMCB9OworCWNoYXIgbmFtZVtOQU1FU1pdOworCWludCByYzsKKworCWlmICgobWJ1cyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtb25fYnVzKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJCWdvdG8gZXJyX2FsbG9jOworCW1lbXNldChtYnVzLCAwLCBzaXplb2Yoc3RydWN0IG1vbl9idXMpKTsKKwlrcmVmX2luaXQoJm1idXMtPnJlZik7CisJc3Bpbl9sb2NrX2luaXQoJm1idXMtPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZtYnVzLT5yX2xpc3QpOworCisJLyoKKwkgKiBUaGlzIHVzYl9idXNfZ2V0IGhlcmUgaXMgc3VwZXJmbHVvdXMsIGJlY2F1c2Ugd2UgcmVjZWl2ZQorCSAqIGEgbm90aWZpY2F0aW9uIGlmIHVzYl9idXMgaXMgYWJvdXQgdG8gYmUgcmVtb3ZlZC4KKwkgKi8KKwkvLyB1c2JfYnVzX2dldCh1YnVzKTsKKwltYnVzLT51X2J1cyA9IHVidXM7CisJdWJ1cy0+bW9uX2J1cyA9IG1idXM7CisKKwlyYyA9IHNucHJpbnRmKG5hbWUsIE5BTUVTWiwgIiVkdCIsIHVidXMtPmJ1c251bSk7CisJaWYgKHJjIDw9IDAgfHwgcmMgPj0gTkFNRVNaKQorCQlnb3RvIGVycl9wcmludF90OworCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5hbWUsIDA2MDAsIG1vbmRpciwgbWJ1cywgJm1vbl9mb3BzX3RleHQpOworCWlmIChkID09IE5VTEwpCisJCWdvdG8gZXJyX2NyZWF0ZV90OworCW1idXMtPmRlbnRfdCA9IGQ7CisKKwlyYyA9IHNucHJpbnRmKG5hbWUsIE5BTUVTWiwgIiVkcyIsIHVidXMtPmJ1c251bSk7CisJaWYgKHJjIDw9IDAgfHwgcmMgPj0gTkFNRVNaKQorCQlnb3RvIGVycl9wcmludF9zOworCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5hbWUsIDA2MDAsIG1vbmRpciwgbWJ1cywgJm1vbl9mb3BzX3N0YXQpOworCWlmIChkID09IE5VTEwpCisJCWdvdG8gZXJyX2NyZWF0ZV9zOworCW1idXMtPmRlbnRfcyA9IGQ7CisKKwlkb3duKCZtb25fbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmbWJ1cy0+YnVzX2xpbmssICZtb25fYnVzZXMpOworCXVwKCZtb25fbG9jayk7CisJcmV0dXJuOworCitlcnJfY3JlYXRlX3M6CitlcnJfcHJpbnRfczoKKwlkZWJ1Z2ZzX3JlbW92ZShtYnVzLT5kZW50X3QpOworZXJyX2NyZWF0ZV90OgorZXJyX3ByaW50X3Q6CisJa2ZyZWUobWJ1cyk7CitlcnJfYWxsb2M6CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IF9faW5pdCBtb25faW5pdCh2b2lkKQoreworCXN0cnVjdCB1c2JfYnVzICp1YnVzOworCXN0cnVjdCBkZW50cnkgKm1vbmRpcjsKKworCW1vbmRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigidXNibW9uIiwgTlVMTCk7CisJaWYgKElTX0VSUihtb25kaXIpKSB7CisJCXByaW50ayhLRVJOX05PVElDRSBUQUcgIjogZGVidWdzIGlzIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKG1vbmRpciA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX05PVElDRSBUQUcgIjogdW5hYmxlIHRvIGNyZWF0ZSB1c2Jtb24gZGlyZWN0b3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCW1vbl9kaXIgPSBtb25kaXI7CisKKwlpZiAodXNiX21vbl9yZWdpc3RlcigmbW9uX29wc18wKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX05PVElDRSBUQUcgIjogdW5hYmxlIHRvIHJlZ2lzdGVyIHdpdGggdGhlIGNvcmVcbiIpOworCQlkZWJ1Z2ZzX3JlbW92ZShtb25kaXIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJLy8gTU9EX0lOQ19VU0VfQ09VTlQod2hpY2hfbW9kdWxlPyk7CisKKwlkb3duKCZ1c2JfYnVzX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSAodWJ1cywgJnVzYl9idXNfbGlzdCwgYnVzX2xpc3QpIHsKKwkJbW9uX2J1c19pbml0KG1vbmRpciwgdWJ1cyk7CisJfQorCXVwKCZ1c2JfYnVzX2xpc3RfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtb25fZXhpdCh2b2lkKQoreworCXN0cnVjdCBtb25fYnVzICptYnVzOworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisKKwl1c2JfbW9uX2RlcmVnaXN0ZXIoKTsKKworCWRvd24oJm1vbl9sb2NrKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJm1vbl9idXNlcykpIHsKKwkJcCA9IG1vbl9idXNlcy5uZXh0OworCQltYnVzID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgbW9uX2J1cywgYnVzX2xpbmspOworCQlsaXN0X2RlbChwKTsKKworCQlkZWJ1Z2ZzX3JlbW92ZShtYnVzLT5kZW50X3QpOworCQlkZWJ1Z2ZzX3JlbW92ZShtYnVzLT5kZW50X3MpOworCisJCS8qCisJCSAqIFRoaXMgbmV2ZXIgaGFwcGVucywgYmVjYXVzZSB0aGUgb3Blbi9jbG9zZSBwYXRocyBpbgorCQkgKiBmaWxlIGxldmVsIG1haW50YWluIG1vZHVsZSB1c2UgY291bnRlcnMgYW5kIHNvIHJtbW9kIGZhaWxzCisJCSAqIGJlZm9yZSByZWFjaGluZyBoZXJlLiBIb3dldmVyLCBiZXR0ZXIgYmUgc2FmZS4uLgorCQkgKi8KKwkJaWYgKG1idXMtPm5yZWFkZXJzKSB7CisJCQlwcmludGsoS0VSTl9FUlIgVEFHCisJCQkgICAgIjogT3V0c3RhbmRpbmcgb3BlbnMgKCVkKSBvbiB1c2IlZCwgbGVha2luZy4uLlxuIiwKKwkJCSAgICBtYnVzLT5ucmVhZGVycywgbWJ1cy0+dV9idXMtPmJ1c251bSk7CisJCQlhdG9taWNfc2V0KCZtYnVzLT5yZWYucmVmY291bnQsIDIpOwkvKiBGb3JjZSBsZWFrICovCisJCX0KKworCQltb25fZGlzc29sdmUobWJ1cywgbWJ1cy0+dV9idXMpOworCQlrcmVmX3B1dCgmbWJ1cy0+cmVmLCBtb25fYnVzX2Ryb3ApOworCX0KKwl1cCgmbW9uX2xvY2spOworCisJZGVidWdmc19yZW1vdmUobW9uX2Rpcik7Cit9CisKK21vZHVsZV9pbml0KG1vbl9pbml0KTsKK21vZHVsZV9leGl0KG1vbl9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL21vbl9zdGF0LmMgYi9kcml2ZXJzL3VzYi9tb24vbW9uX3N0YXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTRiMTY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbW9uL21vbl9zdGF0LmMKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIFRoZSBVU0IgTW9uaXRvciwgaW5zcGlyZWQgYnkgRGF2ZSBIYXJkaW5nJ3MgVVNCTW9uLgorICoKKyAqIFRoaXMgaXMgdGhlICdzJyBvciAnc3RhdCcgcmVhZGVyIHdoaWNoIGRlYnVncyB1c2Jtb24gaXRzZWxmLgorICogTm90ZSB0aGF0IHRoaXMgY29kZSBibG93cyB0aHJvdWdoIGxvY2tzLCBzbyBtYWtlIHN1cmUgdGhhdAorICogL2RiZy91c2Jtb24vMHMgaXMgd2VsbCBwcm90ZWN0ZWQgZnJvbSBub24tcm9vdCB1c2Vycy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJ1c2JfbW9uLmgiCisKKyNkZWZpbmUgU1RBVF9CVUZfU0laRSAgODAKKworc3RydWN0IHNuYXAgeworCWludCBzbGVuOworCWNoYXIgc3RyW1NUQVRfQlVGX1NJWkVdOworfTsKKworc3RhdGljIGludCBtb25fc3RhdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBtb25fYnVzICptYnVzOworCXN0cnVjdCBzbmFwICpzcDsKKworCWlmICgoc3AgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc25hcCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1idXMgPSBpbm9kZS0+dS5nZW5lcmljX2lwOworCisJc3AtPnNsZW4gPSBzbnByaW50ZihzcC0+c3RyLCBTVEFUX0JVRl9TSVpFLAorCSAgICAibnJlYWRlcnMgJWQgdGV4dF9sb3N0ICV1XG4iLAorCSAgICBtYnVzLT5ucmVhZGVycywgbWJ1cy0+Y250X3RleHRfbG9zdCk7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBzcDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgbW9uX3N0YXRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQlzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHNuYXAgKnNwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWxvZmZfdCBwb3MgPSAqcHBvczsKKwlpbnQgY250OworCisJaWYgKHBvcyA8IDAgfHwgcG9zID49IHNwLT5zbGVuKQorCQlyZXR1cm4gMDsKKwlpZiAobmJ5dGVzID09IDApCisJCXJldHVybiAwOworCWlmICgoY250ID0gc3AtPnNsZW4gLSBwb3MpID4gbmJ5dGVzKQorCQljbnQgPSBuYnl0ZXM7CisJaWYgKGNvcHlfdG9fdXNlcihidWYsIHNwLT5zdHIgKyBwb3MsIGNudCkpCisJCXJldHVybiAtRUZBVUxUOworCSpwcG9zID0gcG9zICsgY250OworCXJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyBpbnQgbW9uX3N0YXRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtb25fZm9wc19zdGF0ID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5vcGVuID0JCW1vbl9zdGF0X29wZW4sCisJLmxsc2VlayA9CW5vX2xsc2VlaywKKwkucmVhZCA9CQltb25fc3RhdF9yZWFkLAorCS8qIC53cml0ZSA9CW1vbl9zdGF0X3dyaXRlLCAqLworCS8qIC5wb2xsID0JCW1vbl9zdGF0X3BvbGwsICovCisJLyogLmlvY3RsID0JbW9uX3N0YXRfaW9jdGwsICovCisJLnJlbGVhc2UgPQltb25fc3RhdF9yZWxlYXNlLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi9tb25fdGV4dC5jIGIvZHJpdmVycy91c2IvbW9uL21vbl90ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1YTQ1NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21vbi9tb25fdGV4dC5jCkBAIC0wLDAgKzEsNDA1IEBACisvKgorICogVGhlIFVTQiBNb25pdG9yLCBpbnNwaXJlZCBieSBEYXZlIEhhcmRpbmcncyBVU0JNb24uCisgKgorICogVGhpcyBpcyBhIHRleHQgZm9ybWF0IHJlYWRlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjaW5jbHVkZSAidXNiX21vbi5oIgorCisvKgorICogTm8sIHdlIGRvIG5vdCB3YW50IGFyYml0cmFyaWx5IGxvbmcgZGF0YSBzdHJpbmdzLgorICogVXNlIHRoZSBiaW5hcnkgaW50ZXJmYWNlIGlmIHlvdSB3YW50IHRvIGNhcHR1cmUgYnVsayBkYXRhIQorICovCisjZGVmaW5lIERBVEFfTUFYICAzMgorCisvKgorICogVGhpcyBsaW1pdCBleGlzdHMgdG8gcHJldmVudCBPT01zIHdoZW4gdGhlIHVzZXIgcHJvY2VzcyBzdG9wcyByZWFkaW5nLgorICovCisjZGVmaW5lIEVWRU5UX01BWCAgMjUKKworI2RlZmluZSBQUklOVEZfREZMICAxMjAKKworc3RydWN0IG1vbl9ldmVudF90ZXh0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVfbGluazsKKwlpbnQgdHlwZTsJCS8qIHN1Ym1pdCwgY29tcGxldGUsIGV0Yy4gKi8KKwl1bnNpZ25lZCBpbnQgcGlwZTsJLyogUGlwZSAqLworCXVuc2lnbmVkIGxvbmcgaWQ7CS8qIEZyb20gcG9pbnRlciwgbW9zdCBvZiB0aGUgdGltZSAqLworCXVuc2lnbmVkIGludCB0c3RhbXA7CisJaW50IGxlbmd0aDsJCS8qIERlcGVuZHMgb24gdHlwZTogeGZlciBsZW5ndGggb3IgYWN0IGxlbmd0aCAqLworCWludCBzdGF0dXM7CisJY2hhciBkYXRhX2ZsYWc7CisJdW5zaWduZWQgY2hhciBkYXRhW0RBVEFfTUFYXTsKK307CisKKyNkZWZpbmUgU0xBQl9OQU1FX1NaICAzMAorc3RydWN0IG1vbl9yZWFkZXJfdGV4dCB7CisJa21lbV9jYWNoZV90ICplX3NsYWI7CisJaW50IG5ldmVudHM7CisJc3RydWN0IGxpc3RfaGVhZCBlX2xpc3Q7CisJc3RydWN0IG1vbl9yZWFkZXIgcjsJLyogSW4gQywgcGFyZW50IGNsYXNzIGNhbiBiZSBwbGFjZWQgYW55d2hlcmUgKi8KKworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisJaW50IHByaW50Zl9zaXplOworCWNoYXIgKnByaW50Zl9idWY7CisJc3RydWN0IHNlbWFwaG9yZSBwcmludGZfbG9jazsKKworCWNoYXIgc2xhYl9uYW1lW1NMQUJfTkFNRV9TWl07Cit9OworCitzdGF0aWMgdm9pZCBtb25fdGV4dF9jdG9yKHZvaWQgKiwga21lbV9jYWNoZV90ICosIHVuc2lnbmVkIGxvbmcpOworc3RhdGljIHZvaWQgbW9uX3RleHRfZHRvcih2b2lkICosIGttZW1fY2FjaGVfdCAqLCB1bnNpZ25lZCBsb25nKTsKKworLyoKKyAqIG1vbl90ZXh0X3N1Ym1pdAorICogbW9uX3RleHRfY29tcGxldGUKKyAqCisgKiBNYXkgYmUgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0LgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIHdpdGggdGhlIHdob2xlIG1vbl9idXMgbG9ja2VkLCBzbyBubyBhZGRpdGlvbmFsIGxvY2suCisgKi8KKworc3RhdGljIGlubGluZSBjaGFyIG1vbl90ZXh0X2dldF9kYXRhKHN0cnVjdCBtb25fZXZlbnRfdGV4dCAqZXAsIHN0cnVjdCB1cmIgKnVyYiwKKyAgICBpbnQgbGVuLCBjaGFyIGV2X3R5cGUpCit7CisJaW50IHBpcGUgPSB1cmItPnBpcGU7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKKworCS8qCisJICogVGhlIGNoZWNrIHRvIHNlZSBpZiBpdCdzIHNhZmUgdG8gcG9rZSBhdCBkYXRhIGhhcyBhbiBlbm9ybW91cworCSAqIG51bWJlciBvZiBjb3JuZXIgY2FzZXMsIGJ1dCBpdCBzZWVtcyB0aGF0IHRoZSBmb2xsb3dpbmcgaXMKKwkgKiBtb3JlIG9yIGxlc3Mgc2FmZS4KKwkgKgorCSAqIFdlIGRvIG5vdCBldmVuIHRyeSB0byBsb29rIHRyYW5zZmVyX2J1ZmZlciwgYmVjYXVzZSBpdCBjYW4KKwkgKiBjb250YWluIG5vbi1OVUxMIGdhcmJhZ2UgaW4gY2FzZSB0aGUgdXBwZXIgbGV2ZWwgcHJvbWlzZWQgdG8KKwkgKiBzZXQgRE1BIGZvciB0aGUgSENELgorCSAqLworCWlmICh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVApCisJCXJldHVybiAnRCc7CisKKwlpZiAobGVuIDw9IDApCisJCXJldHVybiAnTCc7CisKKwlpZiAoKGRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcikgPT0gTlVMTCkKKwkJcmV0dXJuICdaJzsJLyogJzAnIHdvdWxkIGJlIG5vdCBhcyBwcmV0dHkuICovCisKKwkvKgorCSAqIEJ1bGsgaXMgZWFzeSB0byBzaG9ydGN1dCByZWxpYWJseS4gCisJICogWFhYIENvbnRyb2wgbmVlZHMgc2V0dXAgcGFja2V0IHRha2VuLgorCSAqIFhYWCBPdGhlciBwaXBlIHR5cGVzIG5lZWQgY29uc2lkZXJhdGlvbi4gQ3VycmVudGx5LCB3ZSBvdmVyZG8gaXQKKwkgKiBhbmQgY29sbGVjdCBnYXJiYWdlIGZvciB0aGVtOiBiZXR0ZXIgbW9yZSB0aGFuIGxlc3MuCisJICovCisJaWYgKHVzYl9waXBlYnVsayhwaXBlKSB8fCB1c2JfcGlwZWNvbnRyb2wocGlwZSkpIHsKKwkJaWYgKHVzYl9waXBlaW4ocGlwZSkpIHsKKwkJCWlmIChldl90eXBlID09ICdTJykKKwkJCQlyZXR1cm4gJzwnOworCQl9IGVsc2UgeworCQkJaWYgKGV2X3R5cGUgPT0gJ0MnKQorCQkJCXJldHVybiAnPic7CisJCX0KKwl9CisKKwlpZiAobGVuID49IERBVEFfTUFYKQorCQlsZW4gPSBEQVRBX01BWDsKKwltZW1jcHkoZXAtPmRhdGEsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBsZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtb25fZ2V0X3RpbWVzdGFtcCh2b2lkKQoreworCXN0cnVjdCB0aW1ldmFsIHR2YWw7CisJdW5zaWduZWQgaW50IHN0YW1wOworCisJZG9fZ2V0dGltZW9mZGF5KCZ0dmFsKTsKKwlzdGFtcCA9IHR2YWwudHZfc2VjICYgMHhGRkZGOwkvKiAyXjMyID0gNDI5NDk2NzI5Ni4gTGltaXQgdG8gNDA5NnMuICovCisJc3RhbXAgPSBzdGFtcCAqIDEwMDAwMDAgKyB0dmFsLnR2X3VzZWM7CisJcmV0dXJuIHN0YW1wOworfQorCitzdGF0aWMgdm9pZCBtb25fdGV4dF9ldmVudChzdHJ1Y3QgbW9uX3JlYWRlcl90ZXh0ICpycCwgc3RydWN0IHVyYiAqdXJiLAorICAgIGNoYXIgZXZfdHlwZSkKK3sKKwlzdHJ1Y3QgbW9uX2V2ZW50X3RleHQgKmVwOworCXVuc2lnbmVkIGludCBzdGFtcDsKKworCXN0YW1wID0gbW9uX2dldF90aW1lc3RhbXAoKTsKKworCWlmIChycC0+bmV2ZW50cyA+PSBFVkVOVF9NQVggfHwKKwkgICAgKGVwID0ga21lbV9jYWNoZV9hbGxvYyhycC0+ZV9zbGFiLCBTTEFCX0FUT01JQykpID09IE5VTEwpIHsKKwkJcnAtPnIubV9idXMtPmNudF90ZXh0X2xvc3QrKzsKKwkJcmV0dXJuOworCX0KKworCWVwLT50eXBlID0gZXZfdHlwZTsKKwllcC0+cGlwZSA9IHVyYi0+cGlwZTsKKwllcC0+aWQgPSAodW5zaWduZWQgbG9uZykgdXJiOworCWVwLT50c3RhbXAgPSBzdGFtcDsKKwllcC0+bGVuZ3RoID0gKGV2X3R5cGUgPT0gJ1MnKSA/CisJICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA6IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkvKiBDb2xsZWN0aW5nIHN0YXR1cyBtYWtlcyBkZWJ1Z2dpbmcgc2Vuc2UgZm9yIHN1Ym1pdHMsIHRvbyAqLworCWVwLT5zdGF0dXMgPSB1cmItPnN0YXR1czsKKworCWVwLT5kYXRhX2ZsYWcgPSBtb25fdGV4dF9nZXRfZGF0YShlcCwgdXJiLCBlcC0+bGVuZ3RoLCBldl90eXBlKTsKKworCXJwLT5uZXZlbnRzKys7CisJbGlzdF9hZGRfdGFpbCgmZXAtPmVfbGluaywgJnJwLT5lX2xpc3QpOworCXdha2VfdXAoJnJwLT53YWl0KTsKK30KKworc3RhdGljIHZvaWQgbW9uX3RleHRfc3VibWl0KHZvaWQgKmRhdGEsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgbW9uX3JlYWRlcl90ZXh0ICpycCA9IGRhdGE7CisJbW9uX3RleHRfZXZlbnQocnAsIHVyYiwgJ1MnKTsKK30KKworc3RhdGljIHZvaWQgbW9uX3RleHRfY29tcGxldGUodm9pZCAqZGF0YSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBtb25fcmVhZGVyX3RleHQgKnJwID0gZGF0YTsKKwltb25fdGV4dF9ldmVudChycCwgdXJiLCAnQycpOworfQorCisvKgorICogRmV0Y2ggbmV4dCBldmVudCBmcm9tIHRoZSBjaXJjdWxhciBidWZmZXIuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbW9uX2V2ZW50X3RleHQgKm1vbl90ZXh0X2ZldGNoKHN0cnVjdCBtb25fcmVhZGVyX3RleHQgKnJwLAorICAgIHN0cnVjdCBtb25fYnVzICptYnVzKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtYnVzLT5sb2NrLCBmbGFncyk7CisJaWYgKGxpc3RfZW1wdHkoJnJwLT5lX2xpc3QpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1idXMtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXAgPSBycC0+ZV9saXN0Lm5leHQ7CisJbGlzdF9kZWwocCk7CisJLS1ycC0+bmV2ZW50czsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYnVzLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIGxpc3RfZW50cnkocCwgc3RydWN0IG1vbl9ldmVudF90ZXh0LCBlX2xpbmspOworfQorCisvKgorICovCitzdGF0aWMgaW50IG1vbl90ZXh0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IG1vbl9idXMgKm1idXM7CisJc3RydWN0IHVzYl9idXMgKnVidXM7CisJc3RydWN0IG1vbl9yZWFkZXJfdGV4dCAqcnA7CisJaW50IHJjOworCisJZG93bigmbW9uX2xvY2spOworCW1idXMgPSBpbm9kZS0+dS5nZW5lcmljX2lwOworCXVidXMgPSBtYnVzLT51X2J1czsKKworCXJwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1vbl9yZWFkZXJfdGV4dCksIEdGUF9LRVJORUwpOworCWlmIChycCA9PSBOVUxMKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBlcnJfYWxsb2M7CisJfQorCW1lbXNldChycCwgMCwgc2l6ZW9mKHN0cnVjdCBtb25fcmVhZGVyX3RleHQpKTsKKwlJTklUX0xJU1RfSEVBRCgmcnAtPmVfbGlzdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcnAtPndhaXQpOworCWluaXRfTVVURVgoJnJwLT5wcmludGZfbG9jayk7CisKKwlycC0+cHJpbnRmX3NpemUgPSBQUklOVEZfREZMOworCXJwLT5wcmludGZfYnVmID0ga21hbGxvYyhycC0+cHJpbnRmX3NpemUsIEdGUF9LRVJORUwpOworCWlmIChycC0+cHJpbnRmX2J1ZiA9PSBOVUxMKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBlcnJfYWxsb2NfcHI7CisJfQorCisJcnAtPnIubV9idXMgPSBtYnVzOworCXJwLT5yLnJfZGF0YSA9IHJwOworCXJwLT5yLnJuZl9zdWJtaXQgPSBtb25fdGV4dF9zdWJtaXQ7CisJcnAtPnIucm5mX2NvbXBsZXRlID0gbW9uX3RleHRfY29tcGxldGU7CisKKwlzbnByaW50ZihycC0+c2xhYl9uYW1lLCBTTEFCX05BTUVfU1osICJtb24lZHRfJWx4IiwgdWJ1cy0+YnVzbnVtLAorCSAgICAobG9uZylycCk7CisJcnAtPmVfc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKHJwLT5zbGFiX25hbWUsCisJICAgIHNpemVvZihzdHJ1Y3QgbW9uX2V2ZW50X3RleHQpLCBzaXplb2YobG9uZyksIDAsCisJICAgIG1vbl90ZXh0X2N0b3IsIG1vbl90ZXh0X2R0b3IpOworCWlmIChycC0+ZV9zbGFiID09IE5VTEwpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycl9zbGFiOworCX0KKworCW1vbl9yZWFkZXJfYWRkKG1idXMsICZycC0+cik7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBycDsKKwl1cCgmbW9uX2xvY2spOworCXJldHVybiAwOworCisvLyBlcnJfYnVzeToKKy8vCWttZW1fY2FjaGVfZGVzdHJveShycC0+ZV9zbGFiKTsKK2Vycl9zbGFiOgorCWtmcmVlKHJwLT5wcmludGZfYnVmKTsKK2Vycl9hbGxvY19wcjoKKwlrZnJlZShycCk7CitlcnJfYWxsb2M6CisJdXAoJm1vbl9sb2NrKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBGb3Igc2ltcGxpY2l0eSwgd2UgcmVhZCBvbmUgcmVjb3JkIGluIG9uZSBzeXN0ZW0gY2FsbCBhbmQgdGhyb3cgb3V0CisgKiB3aGF0IGRvZXMgbm90IGZpdC4gVGhpcyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcgZG9lcyBub3Qgd29yazoKKyAqICAgZGQgaWY9L2RiZy91c2Jtb24vMHQgYnM9MTAKKyAqIEFsc28sIHdlIGRvIG5vdCBhbGxvdyBzZWVrcyBhbmQgZG8gbm90IGJvdGhlciBhZHZhbmNpbmcgdGhlIG9mZnNldC4KKyAqLworc3RhdGljIHNzaXplX3QgbW9uX3RleHRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQlzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IG1vbl9yZWFkZXJfdGV4dCAqcnAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG1vbl9idXMgKm1idXMgPSBycC0+ci5tX2J1czsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0YSwgY3VycmVudCk7CisJc3RydWN0IG1vbl9ldmVudF90ZXh0ICplcDsKKwlpbnQgY250LCBsaW1pdDsKKwljaGFyICpwYnVmOworCWNoYXIgdWRpciwgdXR5cGU7CisJaW50IGRhdGFfbGVuLCBpOworCisJYWRkX3dhaXRfcXVldWUoJnJwLT53YWl0LCAmd2FpdGEpOworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJd2hpbGUgKChlcCA9IG1vbl90ZXh0X2ZldGNoKHJwLCBtYnVzKSkgPT0gTlVMTCkgeworCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmcnAtPndhaXQsICZ3YWl0YSk7CisJCQlyZXR1cm4gLUVXT1VMREJMT0NLOwkvKiBTYW1lIGFzIEVBR0FJTiBpbiBMaW51eCAqLworCQl9CisJCS8qCisJCSAqIFdlIGRvIG5vdCBjb3VudCBud2FpdGVycywgYmVjYXVzZSAtPnJlbGVhc2UgaXMgc3VwcG9zZWQKKwkJICogdG8gYmUgY2FsbGVkIHdoZW4gYWxsIG9wZW5lcnMgYXJlIGdvbmUgb25seS4KKwkJICovCisJCXNjaGVkdWxlKCk7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJcmVtb3ZlX3dhaXRfcXVldWUoJnJwLT53YWl0LCAmd2FpdGEpOworCQkJcmV0dXJuIC1FSU5UUjsKKwkJfQorCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCX0KKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZycC0+d2FpdCwgJndhaXRhKTsKKworCWRvd24oJnJwLT5wcmludGZfbG9jayk7CisJY250ID0gMDsKKwlwYnVmID0gcnAtPnByaW50Zl9idWY7CisJbGltaXQgPSBycC0+cHJpbnRmX3NpemU7CisKKwl1ZGlyID0gdXNiX3BpcGVpbihlcC0+cGlwZSkgPyAnaScgOiAnbyc7CisJc3dpdGNoICh1c2JfcGlwZXR5cGUoZXAtPnBpcGUpKSB7CisJY2FzZSBQSVBFX0lTT0NIUk9OT1VTOgl1dHlwZSA9ICdaJzsgYnJlYWs7CisJY2FzZSBQSVBFX0lOVEVSUlVQVDoJdXR5cGUgPSAnSSc7IGJyZWFrOworCWNhc2UgUElQRV9DT05UUk9MOgl1dHlwZSA9ICdDJzsgYnJlYWs7CisJZGVmYXVsdDogLyogUElQRV9CVUxLICovICB1dHlwZSA9ICdCJzsKKwl9CisJY250ICs9IHNucHJpbnRmKHBidWYgKyBjbnQsIGxpbWl0IC0gY250LAorCSAgICAiJWx4ICV1ICVjICVjJWM6JTAzdTolMDJ1ICVkICVkIiwKKwkgICAgZXAtPmlkLCBlcC0+dHN0YW1wLCBlcC0+dHlwZSwKKwkgICAgdXR5cGUsIHVkaXIsIHVzYl9waXBlZGV2aWNlKGVwLT5waXBlKSwgdXNiX3BpcGVlbmRwb2ludChlcC0+cGlwZSksCisJICAgIGVwLT5zdGF0dXMsIGVwLT5sZW5ndGgpOworCisJaWYgKChkYXRhX2xlbiA9IGVwLT5sZW5ndGgpID4gMCkgeworCQlpZiAoZXAtPmRhdGFfZmxhZyA9PSAwKSB7CisJCQljbnQgKz0gc25wcmludGYocGJ1ZiArIGNudCwgbGltaXQgLSBjbnQsICIgPSIpOworCQkJaWYgKGRhdGFfbGVuID49IERBVEFfTUFYKQorCQkJCWRhdGFfbGVuID0gREFUQV9NQVg7CisJCQlmb3IgKGkgPSAwOyBpIDwgZGF0YV9sZW47IGkrKykgeworCQkJCWlmIChpICUgNCA9PSAwKSB7CisJCQkJCWNudCArPSBzbnByaW50ZihwYnVmICsgY250LCBsaW1pdCAtIGNudCwKKwkJCQkJICAgICIgIik7CisJCQkJfQorCQkJCWNudCArPSBzbnByaW50ZihwYnVmICsgY250LCBsaW1pdCAtIGNudCwKKwkJCQkgICAgIiUwMngiLCBlcC0+ZGF0YVtpXSk7CisJCQl9CisJCQljbnQgKz0gc25wcmludGYocGJ1ZiArIGNudCwgbGltaXQgLSBjbnQsICJcbiIpOworCQl9IGVsc2UgeworCQkJY250ICs9IHNucHJpbnRmKHBidWYgKyBjbnQsIGxpbWl0IC0gY250LAorCQkJICAgICIgJWNcbiIsIGVwLT5kYXRhX2ZsYWcpOworCQl9CisJfSBlbHNlIHsKKwkJY250ICs9IHNucHJpbnRmKHBidWYgKyBjbnQsIGxpbWl0IC0gY250LCAiXG4iKTsKKwl9CisKKwlpZiAoY29weV90b191c2VyKGJ1ZiwgcnAtPnByaW50Zl9idWYsIGNudCkpCisJCWNudCA9IC1FRkFVTFQ7CisJdXAoJnJwLT5wcmludGZfbG9jayk7CisJa21lbV9jYWNoZV9mcmVlKHJwLT5lX3NsYWIsIGVwKTsKKwlyZXR1cm4gY250OworfQorCitzdGF0aWMgaW50IG1vbl90ZXh0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IG1vbl9yZWFkZXJfdGV4dCAqcnAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG1vbl9idXMgKm1idXM7CisJLyogdW5zaWduZWQgbG9uZyBmbGFnczsgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCXN0cnVjdCBtb25fZXZlbnRfdGV4dCAqZXA7CisKKwlkb3duKCZtb25fbG9jayk7CisJbWJ1cyA9IGlub2RlLT51LmdlbmVyaWNfaXA7CisKKwlpZiAobWJ1cy0+bnJlYWRlcnMgPD0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgVEFHICI6IGNvbnNpc3RlbmN5IGVycm9yIG9uIGNsb3NlXG4iKTsKKwkJdXAoJm1vbl9sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCW1vbl9yZWFkZXJfZGVsKG1idXMsICZycC0+cik7CisKKwkvKgorCSAqIEluIHRoZW9yeSwgZV9saXN0IGlzIHByb3RlY3RlZCBieSBtYnVzLT5sb2NrLiBIb3dldmVyLAorCSAqIGFmdGVyIG1vbl9yZWFkZXJfZGVsIGhhcyBmaW5pc2hlZCwgdGhlIGZvbGxvd2luZyBpcyB0aGUgY2FzZToKKwkgKiAgLSB3ZSBhcmUgbm90IG9uIHJlYWRlciBsaXN0IGFueW1vcmUsIHNvIG5ldyBldmVudHMgd29uJ3QgYmUgYWRkZWQ7CisJICogIC0gd2hvbGUgbWJ1cyBtYXkgYmUgZHJvcHBlZCBpZiBpdCB3YXMgb3JwaGFuZWQuCisJICogU28sIHdlIGJldHRlciBub3QgdG91Y2ggbWJ1cy4KKwkgKi8KKwkvKiBzcGluX2xvY2tfaXJxc2F2ZSgmbWJ1cy0+bG9jaywgZmxhZ3MpOyAqLworCXdoaWxlICghbGlzdF9lbXB0eSgmcnAtPmVfbGlzdCkpIHsKKwkJcCA9IHJwLT5lX2xpc3QubmV4dDsKKwkJZXAgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBtb25fZXZlbnRfdGV4dCwgZV9saW5rKTsKKwkJbGlzdF9kZWwocCk7CisJCS0tcnAtPm5ldmVudHM7CisJCWttZW1fY2FjaGVfZnJlZShycC0+ZV9zbGFiLCBlcCk7CisJfQorCS8qIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1idXMtPmxvY2ssIGZsYWdzKTsgKi8KKworCWttZW1fY2FjaGVfZGVzdHJveShycC0+ZV9zbGFiKTsKKwlrZnJlZShycC0+cHJpbnRmX2J1Zik7CisJa2ZyZWUocnApOworCisJdXAoJm1vbl9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtb25fZm9wc190ZXh0ID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5vcGVuID0JCW1vbl90ZXh0X29wZW4sCisJLmxsc2VlayA9CW5vX2xsc2VlaywKKwkucmVhZCA9CQltb25fdGV4dF9yZWFkLAorCS8qIC53cml0ZSA9CW1vbl90ZXh0X3dyaXRlLCAqLworCS8qIC5wb2xsID0JCW1vbl90ZXh0X3BvbGwsICovCisJLyogLmlvY3RsID0JbW9uX3RleHRfaW9jdGwsICovCisJLnJlbGVhc2UgPQltb25fdGV4dF9yZWxlYXNlLAorfTsKKworLyoKKyAqIFNsYWIgaW50ZXJmYWNlOiBjb25zdHJ1Y3Rvci4KKyAqLworc3RhdGljIHZvaWQgbW9uX3RleHRfY3Rvcih2b2lkICptZW0sIGttZW1fY2FjaGVfdCAqc2xhYiwgdW5zaWduZWQgbG9uZyBzZmxhZ3MpCit7CisJLyoKKwkgKiBOb3RoaW5nIHRvIGluaXRpYWxpemUuIE5vLCByZWFsbHkhCisJICogU28sIHdlIGZpbGwgaXQgd2l0aCBnYXJiYWdlIHRvIGVtdWxhdGUgYSByZXVzZWQgb2JqZWN0LgorCSAqLworCW1lbXNldChtZW0sIDB4ZTUsIHNpemVvZihzdHJ1Y3QgbW9uX2V2ZW50X3RleHQpKTsKK30KKworc3RhdGljIHZvaWQgbW9uX3RleHRfZHRvcih2b2lkICptZW0sIGttZW1fY2FjaGVfdCAqc2xhYiwgdW5zaWduZWQgbG9uZyBzZmxhZ3MpCit7CisJOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL3VzYl9tb24uaCBiL2RyaXZlcnMvdXNiL21vbi91c2JfbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQzNWMxOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21vbi91c2JfbW9uLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIFRoZSBVU0IgTW9uaXRvciwgaW5zcGlyZWQgYnkgRGF2ZSBIYXJkaW5nJ3MgVVNCTW9uLgorICovCisKKyNpZm5kZWYgX19VU0JfTU9OX0gKKyNkZWZpbmUgX19VU0JfTU9OX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorLyogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPiAqLwkvKiBXZSB1c2Ugc3RydWN0IHBvaW50ZXJzIG9ubHkgaW4gdGhpcyBoZWFkZXIgKi8KKworI2RlZmluZSBUQUcgInVzYm1vbiIKKworc3RydWN0IG1vbl9idXMgeworCXN0cnVjdCBsaXN0X2hlYWQgYnVzX2xpbms7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBkZW50cnkgKmRlbnRfczsJCS8qIERlYnVnZ2luZyBmaWxlICovCisJc3RydWN0IGRlbnRyeSAqZGVudF90OwkJLyogVGV4dCBpbnRlcmZhY2UgZmlsZSAqLworCXN0cnVjdCB1c2JfYnVzICp1X2J1czsKKworCS8qIFJlZiAqLworCWludCBucmVhZGVyczsJCQkvKiBVbmRlciBtb25fbG9jayBBTkQgbWJ1cy0+bG9jayAqLworCXN0cnVjdCBsaXN0X2hlYWQgcl9saXN0OwkvKiBDaGFpbiBvZiByZWFkZXJzICh1c3VhbGx5IG9uZSkgKi8KKwlzdHJ1Y3Qga3JlZiByZWY7CQkvKiBVbmRlciBtb25fbG9jayAqLworCisJLyogU3RhdHMgKi8KKwl1bnNpZ25lZCBpbnQgY250X3RleHRfbG9zdDsKK307CisKKy8qCisgKiBBbiBpbnN0YW5jZSBvZiBhIHByb2Nlc3Mgd2hpY2ggb3BlbmVkIGEgZmlsZSAoYnV0IGNhbiBmb3JrIGxhdGVyKQorICovCitzdHJ1Y3QgbW9uX3JlYWRlciB7CisJc3RydWN0IGxpc3RfaGVhZCByX2xpbms7CisJc3RydWN0IG1vbl9idXMgKm1fYnVzOworCXZvaWQgKnJfZGF0YTsJCS8qIFVzZSBjb250YWluZXJfb2YgaW5zdGVhZD8gKi8KKworCXZvaWQgKCpybmZfc3VibWl0KSh2b2lkICpkYXRhLCBzdHJ1Y3QgdXJiICp1cmIpOworCXZvaWQgKCpybmZfY29tcGxldGUpKHZvaWQgKmRhdGEsIHN0cnVjdCB1cmIgKnVyYik7Cit9OworCit2b2lkIG1vbl9yZWFkZXJfYWRkKHN0cnVjdCBtb25fYnVzICptYnVzLCBzdHJ1Y3QgbW9uX3JlYWRlciAqcik7Cit2b2lkIG1vbl9yZWFkZXJfZGVsKHN0cnVjdCBtb25fYnVzICptYnVzLCBzdHJ1Y3QgbW9uX3JlYWRlciAqcik7CisKK2V4dGVybiBzdHJ1Y3Qgc2VtYXBob3JlIG1vbl9sb2NrOworCitleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtb25fZm9wc190ZXh0OworZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbW9uX2ZvcHNfc3RhdDsKKworI2VuZGlmIC8qIF9fVVNCX01PTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL25ldC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNjRjOTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9uZXQvS2NvbmZpZwpAQCAtMCwwICsxLDMwNyBAQAorIworIyBVU0IgTmV0d29yayBkZXZpY2VzIGNvbmZpZ3VyYXRpb24KKyMKK2NvbW1lbnQgIk5ldHdvcmtpbmcgc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiAhTkVUCisKK21lbnUgIlVTQiBOZXR3b3JrIEFkYXB0ZXJzIgorCWRlcGVuZHMgb24gVVNCICYmIE5FVAorCitjb25maWcgVVNCX0NBVEMKKwl0cmlzdGF0ZSAiVVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBDUkMzMgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgVVNCIEV0aGVybmV0CisJICBkZXZpY2UgYmFzZWQgb24gdGhlIEVMMTIxMEEgY2hpcC4gU3VwcG9ydGVkIGRldmljZXMgYXJlOgorCSAgQmVsa2luIEY1VTAxMQorCSAgQmVsa2luIEY1VTExMQorCSAgQ0FUQyBOZXRNYXRlCisJICBDQVRDIE5ldE1hdGUgSUkKKwkgIHNtYXJ0QnJpZGdlcyBzbWFydE5JQworCisJICBUaGlzIGRyaXZlciBtYWtlcyB0aGUgYWRhcHRlciBhcHBlYXIgYXMgYSBub3JtYWwgRXRoZXJuZXQgaW50ZXJmYWNlLAorCSAgdHlwaWNhbGx5IG9uIGV0aDAsIGlmIGl0IGlzIHRoZSBvbmx5IGV0aGVybmV0IGRldmljZSwgb3IgcGVyaGFwcyBvbgorCSAgZXRoMSwgaWYgeW91IGhhdmUgYSBQQ0kgb3IgSVNBIGV0aGVybmV0IGNhcmQgaW5zdGFsbGVkLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjYXRjLgorCitjb25maWcgVVNCX0tBV0VUSAorCXRyaXN0YXRlICJVU0IgS0xTSSBLTDVVU0IxMDEtYmFzZWQgZXRoZXJuZXQgZGV2aWNlIHN1cHBvcnQiCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIG9ubHkKKwkgIFVTQiBFdGhlcm5ldCBhZGFwdGVycyBiYXNlZCBvbiB0aGUgS0xTSSBLTDVLVVNCMTAxQiBjaGlwc2V0OgorCSAgM0NvbSAzQzE5MjUwCisJICBBRFMgVVNCLTEwQlQKKwkgIEFURU4gVVNCIEV0aGVybmV0CisJICBBU0FOVEUgVVNCIFRvIEV0aGVybmV0IEFkYXB0ZXIKKwkgIEFPWCBFbmRwb2ludHMgVVNCIEV0aGVybmV0CisJICBDb3JyZWdhIEsuSy4KKwkgIEQtTGluayBEU0ItNjUwQyBhbmQgRFUtRTEwCisJICBFbnRyZWdhIC8gUG9ydGdlYXIgRTQ1CisJICBJLU8gREFUQSBVU0ItRVQvVAorCSAgSmF0b24gVVNCIEV0aGVybmV0IERldmljZSBBZGFwdGVyCisJICBLaW5nc3RvbiBUZWNobm9sb2d5IFVTQiBFdGhlcm5ldCBBZGFwdGVyCisJICBMaW5rc3lzIFVTQjEwVAorCSAgTW9iaWxpdHkgVVNCLUV0aGVybmV0IEFkYXB0ZXIKKwkgIE5ldEdlYXIgRUEtMTAxCisJICBQZXJhY29tIEVuZXQgYW5kIEVuZXQyCisJICBQb3J0c21pdGggRXhwcmVzcyBFdGhlcm5ldCBBZGFwdGVyCisJICBTaGFyayBQb2NrZXQgQWRhcHRlcgorCSAgU01DIDIyMDJVU0IKKwkgIFNvbnkgVmFpbyBwb3J0IGV4dGVuZGVyCisKKwkgIFRoaXMgZHJpdmVyIGlzIGxpa2VseSB0byB3b3JrIHdpdGggbW9zdCAxME1icHMgb25seSBVU0IgRXRoZXJuZXQKKwkgIGFkYXB0ZXJzLCBpbmNsdWRpbmcgc29tZSAibm8gYnJhbmQiIGRldmljZXMuIEl0IGRvZXMgTk9UIHdvcmsgb24KKwkgIFNtYXJ0QnJpZGdlcyBzbWFydE5JQyBvciBvbiBCZWxraW4gRjVVMTExIGRldmljZXMgLSB5b3Ugc2hvdWxkIHVzZQorCSAgdGhlIENBVEMgTmV0TWF0ZSBkcml2ZXIgZm9yIHRob3NlLiBJZiB5b3UgYXJlIG5vdCBzdXJlIHdoaWNoIG9uZQorCSAgeW91IG5lZWQsIHNlbGVjdCBib3RoLCBhbmQgdGhlIGNvcnJlY3Qgb25lIHNob3VsZCBiZSBzZWxlY3RlZCBmb3IKKwkgIHlvdS4KKworCSAgVGhpcyBkcml2ZXIgbWFrZXMgdGhlIGFkYXB0ZXIgYXBwZWFyIGFzIGEgbm9ybWFsIEV0aGVybmV0IGludGVyZmFjZSwKKwkgIHR5cGljYWxseSBvbiBldGgwLCBpZiBpdCBpcyB0aGUgb25seSBldGhlcm5ldCBkZXZpY2UsIG9yIHBlcmhhcHMgb24KKwkgIGV0aDEsIGlmIHlvdSBoYXZlIGEgUENJIG9yIElTQSBldGhlcm5ldCBjYXJkIGluc3RhbGxlZC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQga2F3ZXRoLgorCitjb25maWcgVVNCX1BFR0FTVVMKKwl0cmlzdGF0ZSAiVVNCIFBlZ2FzdXMvUGVnYXN1cy1JSSBiYXNlZCBldGhlcm5ldCBkZXZpY2Ugc3VwcG9ydCIKKwlzZWxlY3QgTUlJCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Uga25vdyB5b3UgaGF2ZSBQZWdhc3VzIG9yIFBlZ2FzdXMtSUkgYmFzZWQgYWRhcHRlci4KKwkgIElmIGluIGRvdWJ0IHRoZW4gbG9vayBhdCA8ZmlsZTpkcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5oPiBmb3IgdGhlCisJICBjb21wbGV0ZSBsaXN0IG9mIHN1cHBvcnRlZCBkZXZpY2VzLgorCisJICBJZiB5b3VyIHBhcnRpY3VsYXIgYWRhcHRlciBpcyBub3QgaW4gdGhlIGxpc3QgYW5kIHlvdSBhcmUgX3N1cmVfIGl0CisJICBpcyBQZWdhc3VzIG9yIFBlZ2FzdXMgSUkgYmFzZWQgdGhlbiBzZW5kIG1lCisJICA8cGV0a2FuQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gdmVuZG9yIGFuZCBkZXZpY2UgSURzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwZWdhc3VzLgorCitjb25maWcgVVNCX1JUTDgxNTAKKwl0cmlzdGF0ZSAiVVNCIFJUTDgxNTAgYmFzZWQgZXRoZXJuZXQgZGV2aWNlIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIFJUTDgxNTAgYmFzZWQgdXNiLWV0aGVybmV0IGFkYXB0ZXIuCisJICBTZW5kIG1lIDxwZXRrYW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PiBhbnkgY29tbWVudHMgeW91IG1heSBoYXZlLgorCSAgWW91IGNhbiBhbHNvIGNoZWNrIGZvciB1cGRhdGVzIGF0IDxodHRwOi8vcGVnYXN1czIuc291cmNlZm9yZ2UubmV0Lz4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJ0bDgxNTAuCisKK2NvbmZpZyBVU0JfVVNCTkVUCisJdHJpc3RhdGUgIk11bHRpLXB1cnBvc2UgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrIgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHNldmVyYWwga2luZHMgb2YgbmV0d29yayBsaW5rcyBvdmVyIFVTQiwKKwkgIHdpdGggIm1pbmlkcml2ZXJzIiBidWlsdCBhcm91bmQgYSBjb21tb24gbmV0d29yayBkcml2ZXIgY29yZQorCSAgdGhhdCBzdXBwb3J0cyBkZWVwIHF1ZXVlcyBmb3IgZWZmaWNpZW50IHRyYW5zZmVycy4gIChUaGlzIGdpdmVzCisJICBiZXR0ZXIgcGVyZm9ybWFuY2Ugd2l0aCBzbWFsbCBwYWNrZXRzIGFuZCBhdCBoaWdoIHNwZWVkcykuCisJICAKKwkgIFRoZSBVU0IgaG9zdCBydW5zICJ1c2JuZXQiLCBhbmQgdGhlIG90aGVyIGVuZCBvZiB0aGUgbGluayBtaWdodCBiZToKKworCSAgLSBBbm90aGVyIFVTQiBob3N0LCB3aGVuIHVzaW5nIFVTQiAibmV0d29yayIgb3IgImRhdGEgdHJhbnNmZXIiCisJICAgIGNhYmxlcy4gIFRoZXNlIGFyZSBvZnRlbiB1c2VkIHRvIG5ldHdvcmsgbGFwdG9wcyB0byBQQ3MsIGxpa2UKKwkgICAgIkxhcGxpbmsiIHBhcmFsbGVsIGNhYmxlcyBvciBzb21lIG1vdGhlcmJvYXJkcy4gIFRoZXNlIHJlbHkKKwkgICAgb24gc3BlY2lhbGl6ZWQgY2hpcHMgZnJvbSBtYW55IHN1cHBsaWVycy4KKworCSAgLSBBbiBpbnRlbGxpZ2VudCBVU0IgZ2FkZ2V0LCBwZXJoYXBzIGVtYmVkZGluZyBhIExpbnV4IHN5c3RlbS4KKwkgICAgVGhlc2UgaW5jbHVkZSBQREFzIHJ1bm5pbmcgTGludXggKGlQYXEsIFlvcHksIFphdXJ1cywgYW5kCisJICAgIG90aGVycyksIGFuZCBkZXZpY2VzIHRoYXQgaW50ZXJvcGVyYXRlIHVzaW5nIHRoZSBzdGFuZGFyZAorCSAgICBDREMtRXRoZXJuZXQgc3BlY2lmaWNhdGlvbiAoaW5jbHVkaW5nIG1hbnkgY2FibGUgbW9kZW1zKS4KKworCSAgLSBOZXR3b3JrIGFkYXB0ZXIgaGFyZHdhcmUgKGxpa2UgdGhvc2UgZm9yIDEwLzEwMCBFdGhlcm5ldCkgd2hpY2gKKwkgICAgdXNlcyB0aGlzIGRyaXZlciBmcmFtZXdvcmsuCisKKwkgIFRoZSBsaW5rIHdpbGwgYXBwZWFyIHdpdGggYSBuYW1lIGxpa2UgInVzYjAiLCB3aGVuIHRoZSBsaW5rIGlzCisJICBhIHR3by1ub2RlIGxpbmssIG9yICJldGgwIiBmb3IgbW9zdCBDREMtRXRoZXJuZXQgZGV2aWNlcy4gIFRob3NlCisJICB0d28tbm9kZSBsaW5rcyBhcmUgbW9zdCBlYXNpbHkgbWFuYWdlZCB3aXRoIEV0aGVybmV0IEJyaWRnaW5nCisJICAoQ09ORklHX0JSSURHRSkgaW5zdGVhZCBvZiByb3V0aW5nLgorCisJICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgPGh0dHA6Ly93d3cubGludXgtdXNiLm9yZy91c2JuZXQvPi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNibmV0LgorCitjb21tZW50ICJVU0IgSG9zdC10by1Ib3N0IENhYmxlcyIKKwlkZXBlbmRzIG9uIFVTQl9VU0JORVQKKworY29uZmlnIFVTQl9BTElfTTU2MzIKKwlib29sZWFuICJBTGkgTTU2MzIgYmFzZWQgJ1VTQiAyLjAgRGF0YSBMaW5rJyBjYWJsZXMiCisJZGVwZW5kcyBvbiBVU0JfVVNCTkVUCisJZGVmYXVsdCB5CisJaGVscAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSdyZSB1c2luZyBhIGhvc3QtdG8taG9zdCBjYWJsZQorCSAgYmFzZWQgb24gdGhpcyBkZXNpZ24sIHdoaWNoIHN1cHBvcnRzIFVTQiAyLjAgaGlnaCBzcGVlZC4KKworY29uZmlnIFVTQl9BTjI3MjAKKwlib29sZWFuICJBbmNob3JDaGlwcyAyNzIwIGJhc2VkIGNhYmxlcyAoWGlyY29tIFBHVU5FVCwgLi4uKSIKKwlkZXBlbmRzIG9uIFVTQl9VU0JORVQKKwlkZWZhdWx0IHkKKwloZWxwCisJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91J3JlIHVzaW5nIGEgaG9zdC10by1ob3N0IGNhYmxlCisJICBiYXNlZCBvbiB0aGlzIGRlc2lnbi4gIE5vdGUgdGhhdCBBbmNob3JDaGlwcyBpcyBub3cgYQorCSAgQ3lwcmVzcyBicmFuZC4KKworY29uZmlnIFVTQl9CRUxLSU4KKwlib29sZWFuICJlVEVLIGJhc2VkIGhvc3QtdG8taG9zdCBjYWJsZXMgKEFkdmFuY2UsIEJlbGtpbiwgLi4uKSIKKwlkZXBlbmRzIG9uIFVTQl9VU0JORVQKKwlkZWZhdWx0IHkKKwloZWxwCisJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91J3JlIHVzaW5nIGEgaG9zdC10by1ob3N0IGNhYmxlCisJICBiYXNlZCBvbiB0aGlzIGRlc2lnbjogIHR3byBOZXRDaGlwIDI4OTAgY2hpcHMgYW5kIGFuIEF0bWVsCisJICBtaWNyb2NvbnRyb2xsZXIsIHdpdGggTEVEcyB0aGF0IGluZGljYXRlIHRyYWZmaWMuCisKK2NvbmZpZyBVU0JfR0VORVNZUworCWJvb2xlYW4gIkdlbmVTeXMgR0w2MjBVU0ItQSBiYXNlZCBjYWJsZXMiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBVU0JfVVNCTkVUCisJaGVscAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSdyZSB1c2luZyBhIGhvc3QtdG8taG9zdCBjYWJsZSwKKwkgIG9yIFBDMlBDIG1vdGhlcmJvYXJkLCB3aXRoIHRoaXMgY2hpcC4KKworCSAgTm90ZSB0aGF0IHRoZSBoYWxmLWR1cGxleCAiR0w2MjBVU0IiIGlzIG5vdCBzdXBwb3J0ZWQuCisKK2NvbmZpZyBVU0JfTkVUMTA4MAorCWJvb2xlYW4gIk5ldENoaXAgMTA4MCBiYXNlZCBjYWJsZXMgKExhcGxpbmssIC4uLikiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBVU0JfVVNCTkVUCisJaGVscAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSdyZSB1c2luZyBhIGhvc3QtdG8taG9zdCBjYWJsZSBiYXNlZAorCSAgb24gdGhpcyBkZXNpZ246ICBvbmUgTmV0Q2hpcCAxMDgwIGNoaXBzIGFuZCBzdXBwb3J0aW5nIGxvZ2ljLAorCSAgc3VwcG9ydGluZyBMRURzIHRoYXQgaW5kaWNhdGUgdHJhZmZpYworCitjb25maWcgVVNCX1BMMjMwMQorCWJvb2xlYW4gIlByb2xpZmljIFBMLTIzMDEvMjMwMiBiYXNlZCBjYWJsZXMiCisJZGVmYXVsdCB5CisJIyBoYW5kc2hha2UvaW5pdC9yZXNldCBwcm9ibGVtcywgZnJvbSBvcmlnaW5hbCAncGx1c2InIGRyaXZlcgorCWRlcGVuZHMgb24gVVNCX1VTQk5FVCAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91J3JlIHVzaW5nIGEgaG9zdC10by1ob3N0IGNhYmxlCisJICB3aXRoIG9uZSBvZiB0aGVzZSBjaGlwcy4KKworY29uZmlnIFVTQl9LQzIxOTAKKwlib29sZWFuICJLVCBUZWNobm9sb2d5IEtDMjE5MCBiYXNlZCBjYWJsZXMgKEluc3RhTmV0KSIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIFVTQl9VU0JORVQgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSdyZSB1c2luZyBhIGhvc3QtdG8taG9zdCBjYWJsZQorCSAgd2l0aCBvbmUgb2YgdGhlc2UgY2hpcHMuCisKK2NvbW1lbnQgIkludGVsbGlnZW50IFVTQiBEZXZpY2VzL0dhZGdldHMiCisJZGVwZW5kcyBvbiBVU0JfVVNCTkVUCisKK2NvbmZpZyBVU0JfQVJNTElOVVgKKwlib29sZWFuICJFbWJlZGRlZCBBUk0gTGludXggbGlua3MgKGlQYXEsIC4uLikiCisJZGVwZW5kcyBvbiBVU0JfVVNCTkVUCisJZGVmYXVsdCB5CisJaGVscAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIHRvIHN1cHBvcnQgdGhlICJ1c2ItZXRoIiBuZXR3b3JraW5nIGRyaXZlcgorCSAgdXNlZCBieSBtb3N0IG9mIHRoZSBBUk0gTGludXggY29tbXVuaXR5IHdpdGggZGV2aWNlIGNvbnRyb2xsZXJzCisJICBzdWNoIGFzIHRoZSBTQS0xMXgwIGFuZCBQWEEtMjV4IFVEQ3MsIG9yIHRoZSB0ZnRwIGNhcGFiaWxpdGllcworCSAgaW4gc29tZSBQWEEgdmVyc2lvbnMgb2YgdGhlICJibG9iIiBib290IGxvYWRlci4KKworCSAgTGludXgtYmFzZWQgIkd1bXN0aXgiIFBYQS0yNXggYmFzZWQgc3lzdGVtcyB1c2UgdGhpcyBwcm90b2NvbAorCSAgdG8gdGFsayB3aXRoIG90aGVyIExpbnV4IHN5c3RlbXMuCisKKwkgIEFsdGhvdWdoIHRoZSBST01zIHNoaXBwZWQgd2l0aCBTaGFycCBaYXVydXMgcHJvZHVjdHMgdXNlIGEKKwkgIGRpZmZlcmVudCBsaW5rIGxldmVsIGZyYW1pbmcgcHJvdG9jb2wsIHlvdSBjYW4gaGF2ZSB0aGVtIHVzZQorCSAgdGhpcyBzaW1wbGVyIHByb3RvY29sIGJ5IGluc3RhbGxpbmcgYSBkaWZmZXJlbnQga2VybmVsLgorCitjb25maWcgVVNCX0VQU09OMjg4OAorCWJvb2xlYW4gIkVwc29uIDI4ODggYmFzZWQgZmlybXdhcmUgKERFVkVMT1BNRU5UKSIKKwlkZXBlbmRzIG9uIFVTQl9VU0JORVQKKwlkZWZhdWx0IHkKKwloZWxwCisJICBDaG9vc2UgdGhpcyBvcHRpb24gdG8gc3VwcG9ydCB0aGUgdXNiIG5ldHdvcmtpbmcgbGlua3MgdXNlZAorCSAgYnkgc29tZSBzYW1wbGUgZmlybXdhcmUgZnJvbSBFcHNvbi4KKworY29uZmlnIFVTQl9aQVVSVVMKKwlib29sZWFuICJTaGFycCBaYXVydXMgKHN0b2NrIFJPTXMpIgorCWRlcGVuZHMgb24gVVNCX1VTQk5FVAorCXNlbGVjdCBDUkMzMgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlvbiB0byBzdXBwb3J0IHRoZSB1c2IgbmV0d29ya2luZyBsaW5rcyB1c2VkIGJ5CisJICBaYXVydXMgbW9kZWxzIGxpa2UgdGhlIFNMLTUwMDBELCBTTC01NTAwLCBTTC01NjAwLCBBLTMwMCwgQi01MDAuCisKKwkgIElmIHlvdSBpbnN0YWxsIGFuIGFsdGVybmF0ZSBST00gaW1hZ2UsIHlvdSBtYXkgbm8gbG9uZ2VyIG5lZWQKKwkgIHRvIHN1cHBvcnQgdGhpcyBwcm90b2NvbC4gIE9ubHkgdGhlICJldGgtZmQiIGRyaXZlciByZWFsbHkgbmVlZHMKKwkgIHRoaXMgbm9uLWNvbmZvcm1hbnQgdmFyaWFudCBvZiBDREMgRXRoZXJuZXQgcHJvdG9jb2wuCisKK2NvbmZpZyBVU0JfQ0RDRVRIRVIKKwlib29sZWFuICJDREMgRXRoZXJuZXQgc3VwcG9ydCAoc21hcnQgZGV2aWNlcyBzdWNoIGFzIGNhYmxlIG1vZGVtcykiCisJZGVwZW5kcyBvbiBVU0JfVVNCTkVUCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBvcHRpb24gc3VwcG9ydHMgZGV2aWNlcyBjb25mb3JtaW5nIHRvIHRoZSBDb21tdW5pY2F0aW9uIERldmljZQorCSAgQ2xhc3MgKENEQykgRXRoZXJuZXQgQ29udHJvbCBNb2RlbCwgYSBzcGVjaWZpY2F0aW9uIHRoYXQncyBlYXN5IHRvCisJICBpbXBsZW1lbnQgaW4gZGV2aWNlIGZpcm13YXJlLiAgVGhlIENEQyBzcGVjaWZpY2F0aW9ucyBhcmUgYXZhaWxhYmxlCisJICBmcm9tIDxodHRwOi8vd3d3LnVzYi5vcmcvPi4KKwkgIAorCSAgQ0RDIEV0aGVybmV0IGlzIGFuIGltcGxlbWVudGF0aW9uIG9wdGlvbiBmb3IgRE9DU0lTIGNhYmxlIG1vZGVtcworCSAgdGhhdCBzdXBwb3J0IFVTQiBjb25uZWN0aXZpdHksIHVzZWQgZm9yIG5vbi1NaWNyb3NvZnQgVVNCIGhvc3RzLgorIAkgIFRoaXMgZHJpdmVyIHNob3VsZCB3b3JrIHdpdGggYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBkZXZpY2VzOgorCisgCSAgICAqIEVyaWNzc29uIFBpcGVSaWRlciAoYWxsIHZhcmlhbnRzKQorIAkgICAgKiBNb3Rvcm9sYSAoRE0xMDAgYW5kIFNCNDEwMCkKKyAJICAgICogQnJvYWRjb20gQ2FibGUgTW9kZW0gKHJlZmVyZW5jZSBkZXNpZ24pCisgCSAgICAqIFRvc2hpYmEgUENYMTEwMFUKKwkgICAgKiAuLi4KKworCSAgVGhpcyBkcml2ZXIgY3JlYXRlcyBhbiBpbnRlcmZhY2UgbmFtZWQgImV0aFgiLCB3aGVyZSBYIGRlcGVuZHMgb24KKwkgIHdoYXQgb3RoZXIgbmV0d29ya2luZyBkZXZpY2VzIHlvdSBoYXZlIGluIHVzZS4gIEhvd2V2ZXIsIGlmIHRoZQorCSAgSUVFRSA4MDIgImxvY2FsIGFzc2lnbm1lbnQiIGJpdCBpcyBzZXQgaW4gdGhlIGFkZHJlc3MsIGEgInVzYlgiCisJICBuYW1lIGlzIHVzZWQgaW5zdGVhZC4KKworY29tbWVudCAiVVNCIE5ldHdvcmsgQWRhcHRlcnMiCisJZGVwZW5kcyBvbiBVU0JfVVNCTkVUCisKK2NvbmZpZyBVU0JfQVg4ODE3WAorCWJvb2xlYW4gIkFTSVggQVg4OHh4eCBCYXNlZCBVU0IgMi4wIEV0aGVybmV0IERldmljZXMiCisJZGVwZW5kcyBvbiBVU0JfVVNCTkVUICYmIE5FVF9FVEhFUk5FVAorCXNlbGVjdCBDUkMzMgorCXNlbGVjdCBNSUkKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIEFTSVggQVg4OHh4eCBiYXNlZCBVU0IgMi4wCisJICAxMC8xMDAgRXRoZXJuZXQgZGV2aWNlcy4KKworIAkgIFRoaXMgZHJpdmVyIHNob3VsZCB3b3JrIHdpdGggYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBkZXZpY2VzOgorCSAgICAqIEF0ZW4gVUMyMTBUCisJICAgICogQVNJWCBBWDg4MTcyCisJICAgICogQmlsbGlvbnRvbiBTeXN0ZW1zLCBVU0IyQVIgCisJICAgICogQnVmZmFsbyBMVUEtVTItS1RYCisJICAgICogQ29yZWdhIEZFdGhlciBVU0IyLVRYCisJICAgICogRC1MaW5rIERVQi1FMTAwCisJICAgICogSGF3a2luZyBVRjIwMAorCSAgICAqIExpbmtzeXMgVVNCMjAwTQorCSAgICAqIE5ldGdlYXIgRkExMjAKKwkgICAgKiBTaXRlY29tIExOLTAyOQorCSAgICAqIEludGVsbGluZXQgVVNCIDIuMCBFdGhlcm5ldAorCSAgICAqIFNUIExhYiBVU0IgMi4wIEV0aGVybmV0CisJICAgICogVHJlbmROZXQgVFUyLUVUMTAwCisKKwkgIFRoaXMgZHJpdmVyIGNyZWF0ZXMgYW4gaW50ZXJmYWNlIG5hbWVkICJldGhYIiwgd2hlcmUgWCBkZXBlbmRzIG9uCisJICB3aGF0IG90aGVyIG5ldHdvcmtpbmcgZGV2aWNlcyB5b3UgaGF2ZSBpbiB1c2UuICAKKworY29uZmlnIFVTQl9aRDEyMDEKKwl0cmlzdGF0ZSAiVVNCIFpEMTIwMSBiYXNlZCBXaXJlbGVzcyBkZXZpY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE5FVF9SQURJTworCXNlbGVjdCBGV19MT0FERVIKKwktLS1oZWxwLS0tCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2Ugd2lyZWxlc3MgTEFOIGFkYXB0ZXJzIGJhc2VkIG9uIHRoZSBaeURBUworCSAgWkQxMjAxIGNoaXAuCisKKwkgIFRoaXMgZHJpdmVyIG1ha2VzIHRoZSBhZGFwdGVyIGFwcGVhciBhcyBhIG5vcm1hbCBFdGhlcm5ldCBpbnRlcmZhY2UsCisJICB0eXBpY2FsbHkgb24gd2xhbjAuCisJICAKKwkgIFRoZSB6ZDEyMDEgZGV2aWNlIHJlcXVpcmVzIGV4dGVybmFsIGZpcm13YXJlIHRvIGJlIGxvYWRlZC4KKwkgIFRoaXMgY2FuIGJlIGZvdW5kIGF0IGh0dHA6Ly9saW51eC1sYzEwMDAyMC5zb3VyY2Vmb3JnZS5uZXQvCisJICAKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHpkMTIwMS4KKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L01ha2VmaWxlIGIvZHJpdmVycy91c2IvbmV0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZjM1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9uZXQvTWFrZWZpbGUKQEAgLTAsMCArMSwxMiBAQAorIworIyBNYWtlZmlsZSBmb3IgVVNCIE5ldHdvcmsgZHJpdmVycworIworCitvYmotJChDT05GSUdfVVNCX0NBVEMpCQkrPSBjYXRjLm8KK29iai0kKENPTkZJR19VU0JfS0FXRVRIKQkrPSBrYXdldGgubworb2JqLSQoQ09ORklHX1VTQl9QRUdBU1VTKQkrPSBwZWdhc3VzLm8KK29iai0kKENPTkZJR19VU0JfUlRMODE1MCkJKz0gcnRsODE1MC5vCitvYmotJChDT05GSUdfVVNCX1VTQk5FVCkJKz0gdXNibmV0Lm8KK29iai0kKENPTkZJR19VU0JfWkQxMjAxKQkrPSB6ZDEyMDEubworCitDRkxBR1NfemQxMjAxLm8gPSAtSWRyaXZlcnMvbmV0L3dpcmVsZXNzLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L2NhdGMuYyBiL2RyaXZlcnMvdXNiL25ldC9jYXRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhiZTkxMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL25ldC9jYXRjLmMKQEAgLTAsMCArMSw5NjAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDAxIFZvanRlY2ggUGF2bGlrCisgKgorICogIENBVEMgRUwxMjEwQSBOZXRNYXRlIFVTQiBFdGhlcm5ldCBkcml2ZXIKKyAqCisgKiAgU3BvbnNvcmVkIGJ5IFN1U0UKKyAqCisgKiAgQmFzZWQgb24gdGhlIHdvcmsgb2YKKyAqCQlEb25hbGQgQmVja2VyCisgKiAKKyAqICBPbGQgY2hpcHNldCBzdXBwb3J0IGFkZGVkIGJ5IFNpbW9uIEV2YW5zIDxzcHNlQHNlY3JldC5vcmcudWs+IDIwMDIKKyAqICAgIC0gYWRkcyBzdXBwb3J0IGZvciBCZWxraW4gRjVVMDExCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKiAKKyAqIFNob3VsZCB5b3UgbmVlZCB0byBjb250YWN0IG1lLCB0aGUgYXV0aG9yLCB5b3UgY2FuIGRvIHNvIGVpdGhlciBieQorICogZS1tYWlsIC0gbWFpbCB5b3VyIG1lc3NhZ2UgdG8gPHZvanRlY2hAc3VzZS5jej4sIG9yIGJ5IHBhcGVyIG1haWw6CisgKiBWb2p0ZWNoIFBhdmxpaywgU2ltdW5rb3ZhIDE1OTQsIFByYWd1ZSA4LCAxODIgMDAgQ3plY2ggUmVwdWJsaWMKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI3VuZGVmIERFQlVHCisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworLyoKKyAqIFZlcnNpb24gaW5mb3JtYXRpb24uCisgKi8KKworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjIuOCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJDQVRDIEVMMTIxMEEgTmV0TWF0ZSBVU0IgRXRoZXJuZXQgZHJpdmVyIgorI2RlZmluZSBTSE9SVF9EUklWRVJfREVTQyAiRUwxMjEwQSBOZXRNYXRlIFVTQiBFdGhlcm5ldCIKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lW10gPSAiY2F0YyI7CisKKy8qCisgKiBTb21lIGRlZmluZXMuCisgKi8gCisKKyNkZWZpbmUgU1RBVFNfVVBEQVRFCQkoSFopCS8qIFRpbWUgYmV0d2VlbiBzdGF0cyB1cGRhdGVzICovCisjZGVmaW5lIFRYX1RJTUVPVVQJCSg1KkhaKQkvKiBNYXggdGltZSB0aGUgcXVldWUgY2FuIGJlIHN0b3BwZWQgKi8KKyNkZWZpbmUgUEtUX1NaCQkJMTUzNgkvKiBNYXggRXRoZXJuZXQgcGFja2V0IHNpemUgKi8KKyNkZWZpbmUgUlhfTUFYX0JVUlNUCQkxNQkvKiBNYXggcGFja2V0cyBwZXIgcnggYnVmZmVyICg+IDAsIDwgMTYpICovCisjZGVmaW5lIFRYX01BWF9CVVJTVAkJMTUJLyogTWF4IGZ1bGwgc2l6ZWQgcGFja2V0cyBwZXIgdHggYnVmZmVyICg+IDApICovCisjZGVmaW5lIENUUkxfUVVFVUUJCTE2CS8qIE1heCBjb250cm9sIHJlcXVlc3RzIGluIGZsaWdodCAocG93ZXIgb2YgdHdvKSAqLworI2RlZmluZSBSWF9QS1RfU1oJCTE2MDAJLyogTWF4IHNpemUgb2YgcmVjZWl2ZSBwYWNrZXQgZm9yIEY1VTAxMSAqLworCisvKgorICogQ29udHJvbCByZXF1ZXN0cy4KKyAqLworCitlbnVtIGNvbnRyb2xfcmVxdWVzdHMgeworCVJlYWRNZW0gPQkweGYxLAorCUdldE1hYyA9CTB4ZjIsCisJUmVzZXQgPQkJMHhmNCwKKwlTZXRNYWMgPQkweGY1LAorCVNldFJ4TW9kZSA9ICAgICAweGY1LCAgLyogRjVVMDExIG9ubHkgKi8KKwlXcml0ZVJPTSA9CTB4ZjgsCisJU2V0UmVnID0JMHhmYSwKKwlHZXRSZWcgPQkweGZiLAorCVdyaXRlTWVtID0JMHhmYywKKwlSZWFkUk9NID0JMHhmZCwKK307CisKKy8qCisgKiBSZWdpc3RlcnMuCisgKi8KKworZW51bSByZWdpc3Rlcl9vZmZzZXRzIHsKKwlUeEJ1ZkNvdW50ID0JMHgyMCwKKwlSeEJ1ZkNvdW50ID0JMHgyMSwKKwlPcE1vZGVzID0JMHgyMiwKKwlUeFFlZCA9CQkweDIzLAorCVJ4UWVkID0JCTB4MjQsCisJTWF4QnVyc3QgPQkweDI1LAorCVJ4VW5pdCA9CTB4NjAsCisJRXRoU3RhdHVzID0JMHg2MSwKKwlTdGF0aW9uQWRkcjAgPQkweDY3LAorCUV0aFN0YXRzID0JMHg2OSwKKwlMRURDdHJsID0JMHg4MSwKK307CisKK2VudW0gZXRoX3N0YXRzIHsKKwlUeFNpbmdsZUNvbGwgPQkweDAwLAorICAgICAgICBUeE11bHRpQ29sbCA9CTB4MDIsCisgICAgICAgIFR4RXhjZXNzQ29sbCA9CTB4MDQsCisgICAgICAgIFJ4RnJhbUVyciA9CTB4MDYsCit9OworCitlbnVtIG9wX21vZGVfYml0cyB7CisJT3AzTWVtV2FpdHMgPQkweDAzLAorCU9wTGVuSW5jbHVkZSA9CTB4MDgsCisJT3BSeE1lcmdlID0JMHgxMCwKKwlPcFR4TWVyZ2UgPQkweDIwLAorCU9wV2luOTVidWdmaXggPQkweDQwLAorCU9wTG9vcGJhY2sgPQkweDgwLAorfTsKKworZW51bSByeF9maWx0ZXJfYml0cyB7CisJUnhFbmFibGUgPQkweDAxLAorCVJ4UG9sYXJpdHkgPQkweDAyLAorCVJ4Rm9yY2VPSyA9CTB4MDQsCisJUnhNdWx0aUNhc3QgPQkweDA4LAorCVJ4UHJvbWlzYyA9CTB4MTAsCisJQWx0UnhQcm9taXNjID0gIDB4MjAsIC8qIEY1VTAxMSB1c2VzIGRpZmZlcmVudCBiaXQgKi8KK307CisKK2VudW0gbGVkX3ZhbHVlcyB7CisJTEVERmFzdCA9IAkweDAxLAorCUxFRFNsb3cgPQkweDAyLAorCUxFREZsYXNoID0JMHgwMywKKwlMRURQdWxzZSA9CTB4MDQsCisJTEVETGluayA9CTB4MDgsCit9OworCitlbnVtIGxpbmtfc3RhdHVzIHsKKwlMaW5rTm9DaGFuZ2UgPSAwLAorCUxpbmtHb29kICAgICA9IDEsCisJTGlua0JhZCAgICAgID0gMgorfTsKKworLyoKKyAqIFRoZSBjYXRjIHN0cnVjdC4KKyAqLworCisjZGVmaW5lIENUUkxfUlVOTklORwkwCisjZGVmaW5lIFJYX1JVTk5JTkcJMQorI2RlZmluZSBUWF9SVU5OSU5HCTIKKworc3RydWN0IGNhdGMgeworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKKworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl1bnNpZ25lZCBpbnQgdHhfcHRyLCB0eF9pZHg7CisJdW5zaWduZWQgaW50IGN0cmxfaGVhZCwgY3RybF90YWlsOworCXNwaW5sb2NrX3QgdHhfbG9jaywgY3RybF9sb2NrOworCisJdTggdHhfYnVmWzJdW1RYX01BWF9CVVJTVCAqIChQS1RfU1ogKyAyKV07CisJdTggcnhfYnVmW1JYX01BWF9CVVJTVCAqIChQS1RfU1ogKyAyKV07CisJdTggaXJxX2J1ZlsyXTsKKwl1OCBjdHJsX2J1Zls2NF07CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCBjdHJsX2RyOworCisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJdTggc3RhdHNfYnVmWzhdOworCXUxNiBzdGF0c192YWxzWzRdOworCXVuc2lnbmVkIGxvbmcgbGFzdF9zdGF0czsKKworCXU4IG11bHRpY2FzdFs2NF07CisKKwlzdHJ1Y3QgY3RybF9xdWV1ZSB7CisJCXU4IGRpcjsKKwkJdTggcmVxdWVzdDsKKwkJdTE2IHZhbHVlOworCQl1MTYgaW5kZXg7CisJCXZvaWQgKmJ1ZjsKKwkJaW50IGxlbjsKKwkJdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgY2F0YyAqY2F0Yywgc3RydWN0IGN0cmxfcXVldWUgKnEpOworCX0gY3RybF9xdWV1ZVtDVFJMX1FVRVVFXTsKKworCXN0cnVjdCB1cmIgKnR4X3VyYiwgKnJ4X3VyYiwgKmlycV91cmIsICpjdHJsX3VyYjsKKworCXU4IGlzX2Y1dTAxMTsJLyogU2V0IGlmIGRldmljZSBpcyBhbiBGNVUwMTEgKi8KKwl1OCByeG1vZGVbMl07CS8qIFVzZWQgZm9yIEY1VTAxMSAqLworCWF0b21pY190IHJlY3Ffc3o7IC8qIFVzZWQgZm9yIEY1VTAxMSAtIGNvdW50ZXIgb2Ygd2FpdGluZyByeCBwYWNrZXRzICovCit9OworCisvKgorICogVXNlZnVsIG1hY3Jvcy4KKyAqLworCisjZGVmaW5lIGNhdGNfZ2V0X21hYyhjYXRjLCBtYWMpCQkJCWNhdGNfY3RybF9tc2coY2F0YywgVVNCX0RJUl9JTiwgIEdldE1hYywgMCwgMCwgbWFjLCAgNikKKyNkZWZpbmUgY2F0Y19yZXNldChjYXRjKQkJCQljYXRjX2N0cmxfbXNnKGNhdGMsIFVTQl9ESVJfT1VULCBSZXNldCwgMCwgMCwgTlVMTCwgMCkKKyNkZWZpbmUgY2F0Y19zZXRfcmVnKGNhdGMsIHJlZywgdmFsKQkJCWNhdGNfY3RybF9tc2coY2F0YywgVVNCX0RJUl9PVVQsIFNldFJlZywgdmFsLCByZWcsIE5VTEwsIDApCisjZGVmaW5lIGNhdGNfZ2V0X3JlZyhjYXRjLCByZWcsIGJ1ZikJCQljYXRjX2N0cmxfbXNnKGNhdGMsIFVTQl9ESVJfSU4sICBHZXRSZWcsIDAsIHJlZywgYnVmLCAxKQorI2RlZmluZSBjYXRjX3dyaXRlX21lbShjYXRjLCBhZGRyLCBidWYsIHNpemUpCQljYXRjX2N0cmxfbXNnKGNhdGMsIFVTQl9ESVJfT1VULCBXcml0ZU1lbSwgMCwgYWRkciwgYnVmLCBzaXplKQorI2RlZmluZSBjYXRjX3JlYWRfbWVtKGNhdGMsIGFkZHIsIGJ1Ziwgc2l6ZSkJCWNhdGNfY3RybF9tc2coY2F0YywgVVNCX0RJUl9JTiwgIFJlYWRNZW0sIDAsIGFkZHIsIGJ1Ziwgc2l6ZSkKKworI2RlZmluZSBmNXUwMTFfcnhtb2RlKGNhdGMsIHJ4bW9kZSkJCQljYXRjX2N0cmxfbXNnKGNhdGMsIFVTQl9ESVJfT1VULCBTZXRSeE1vZGUsIDAsIDEsIHJ4bW9kZSwgMikKKyNkZWZpbmUgZjV1MDExX3J4bW9kZV9hc3luYyhjYXRjLCByeG1vZGUpCQljYXRjX2N0cmxfYXN5bmMoY2F0YywgVVNCX0RJUl9PVVQsIFNldFJ4TW9kZSwgMCwgMSwgJnJ4bW9kZSwgMiwgTlVMTCkKKyNkZWZpbmUgZjV1MDExX21jaGFzaF9hc3luYyhjYXRjLCBoYXNoKQkJCWNhdGNfY3RybF9hc3luYyhjYXRjLCBVU0JfRElSX09VVCwgU2V0UnhNb2RlLCAwLCAyLCAmaGFzaCwgOCwgTlVMTCkKKworI2RlZmluZSBjYXRjX3NldF9yZWdfYXN5bmMoY2F0YywgcmVnLCB2YWwpCQljYXRjX2N0cmxfYXN5bmMoY2F0YywgVVNCX0RJUl9PVVQsIFNldFJlZywgdmFsLCByZWcsIE5VTEwsIDAsIE5VTEwpCisjZGVmaW5lIGNhdGNfZ2V0X3JlZ19hc3luYyhjYXRjLCByZWcsIGNiKQkJY2F0Y19jdHJsX2FzeW5jKGNhdGMsIFVTQl9ESVJfSU4sIEdldFJlZywgMCwgcmVnLCBOVUxMLCAxLCBjYikKKyNkZWZpbmUgY2F0Y193cml0ZV9tZW1fYXN5bmMoY2F0YywgYWRkciwgYnVmLCBzaXplKQljYXRjX2N0cmxfYXN5bmMoY2F0YywgVVNCX0RJUl9PVVQsIFdyaXRlTWVtLCAwLCBhZGRyLCBidWYsIHNpemUsIE5VTEwpCisKKy8qCisgKiBSZWNlaXZlIHJvdXRpbmVzLgorICovCisKK3N0YXRpYyB2b2lkIGNhdGNfcnhfZG9uZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBjYXRjICpjYXRjID0gdXJiLT5jb250ZXh0OworCXU4ICpwa3Rfc3RhcnQgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBwa3RfbGVuLCBwa3Rfb2Zmc2V0ID0gMDsKKworCWlmICghY2F0Yy0+aXNfZjV1MDExKSB7CisJCWNsZWFyX2JpdChSWF9SVU5OSU5HLCAmY2F0Yy0+ZmxhZ3MpOworCQlwa3Rfb2Zmc2V0ID0gMjsKKwl9CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCJyeF9kb25lLCBzdGF0dXMgJWQsIGxlbmd0aCAlZCIsIHVyYi0+c3RhdHVzLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQlyZXR1cm47CisJfQorCisJZG8geworCQlpZighY2F0Yy0+aXNfZjV1MDExKSB7CisJCQlwa3RfbGVuID0gbGUxNl90b19jcHVwKChfX2xlMTYqKXBrdF9zdGFydCk7CisJCQlpZiAocGt0X2xlbiA+IHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQkJCWNhdGMtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCQljYXRjLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXBrdF9sZW4gPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJCX0KKworCQlpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4pKSkKKwkJCXJldHVybjsKKworCQlza2ItPmRldiA9IGNhdGMtPm5ldGRldjsKKwkJZXRoX2NvcHlfYW5kX3N1bShza2IsIHBrdF9zdGFydCArIHBrdF9vZmZzZXQsIHBrdF9sZW4sIDApOworCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7CisKKwkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgY2F0Yy0+bmV0ZGV2KTsKKwkJbmV0aWZfcngoc2tiKTsKKworCQljYXRjLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWNhdGMtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CisKKwkJLyogRjVVMDExIG9ubHkgZG9lcyBvbmUgcGFja2V0IHBlciBSWCAqLworCQlpZiAoY2F0Yy0+aXNfZjV1MDExKQorCQkJYnJlYWs7CisJCXBrdF9zdGFydCArPSAoKChwa3RfbGVuICsgMSkgPj4gNikgKyAxKSA8PCA2OworCisJfSB3aGlsZSAocGt0X3N0YXJ0IC0gKHU4ICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyIDwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKworCWNhdGMtPm5ldGRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisKKwlpZiAoY2F0Yy0+aXNfZjV1MDExKSB7CisJCWlmIChhdG9taWNfcmVhZCgmY2F0Yy0+cmVjcV9zeikpIHsKKwkJCWludCBzdGF0dXM7CisJCQlhdG9taWNfZGVjKCZjYXRjLT5yZWNxX3N6KTsKKwkJCWRiZygiZ2V0dGluZyBleHRyYSBwYWNrZXQiKTsKKwkJCXVyYi0+ZGV2ID0gY2F0Yy0+dXNiZGV2OworCQkJaWYgKChzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSA8IDApIHsKKwkJCQlkYmcoInN1Ym1pdChyeF91cmIpIHN0YXR1cyAlZCIsIHN0YXR1cyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQljbGVhcl9iaXQoUlhfUlVOTklORywgJmNhdGMtPmZsYWdzKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgY2F0Y19pcnFfZG9uZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBjYXRjICpjYXRjID0gdXJiLT5jb250ZXh0OworCXU4ICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgaGFzZGF0YSA9IDAsIGxpbmtzdHMgPSBMaW5rTm9DaGFuZ2U7CisKKwlpZiAoIWNhdGMtPmlzX2Y1dTAxMSkgeworCQloYXNkYXRhID0gZGF0YVsxXSAmIDB4ODA7CisJCWlmIChkYXRhWzFdICYgMHg0MCkKKwkJCWxpbmtzdHMgPSBMaW5rR29vZDsKKwkJZWxzZSBpZiAoZGF0YVsxXSAmIDB4MjApCisJCQlsaW5rc3RzID0gTGlua0JhZDsKKwl9IGVsc2UgeworCQloYXNkYXRhID0gKHVuc2lnbmVkIGludCkoYmUxNl90b19jcHVwKChfX2JlMTYqKWRhdGEpICYgMHgwZmZmKTsKKwkJaWYgKGRhdGFbMF0gPT0gMHg5MCkKKwkJCWxpbmtzdHMgPSBMaW5rR29vZDsKKwkJZWxzZSBpZiAoZGF0YVswXSA9PSAweEEwKQorCQkJbGlua3N0cyA9IExpbmtCYWQ7CisJfQorCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoJCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CS8qIHVubGluayAqLworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCXJldHVybjsKKwkvKiAtRVBJUEU6ICBzaG91bGQgY2xlYXIgdGhlIGhhbHQgKi8KKwlkZWZhdWx0OgkJLyogZXJyb3IgKi8KKwkJZGJnKCJpcnFfZG9uZSwgc3RhdHVzICVkLCBkYXRhICUwMnggJTAyeC4iLCB1cmItPnN0YXR1cywgZGF0YVswXSwgZGF0YVsxXSk7CisJCWdvdG8gcmVzdWJtaXQ7CisJfQorCisJaWYgKGxpbmtzdHMgPT0gTGlua0dvb2QpIHsKKwkJbmV0aWZfY2Fycmllcl9vbihjYXRjLT5uZXRkZXYpOworCQlkYmcoImxpbmsgb2siKTsKKwl9CisKKwlpZiAobGlua3N0cyA9PSBMaW5rQmFkKSB7CisJCW5ldGlmX2NhcnJpZXJfb2ZmKGNhdGMtPm5ldGRldik7CisJCWRiZygibGluayBiYWQiKTsKKwl9CisKKwlpZiAoaGFzZGF0YSkgeworCQlpZiAodGVzdF9hbmRfc2V0X2JpdChSWF9SVU5OSU5HLCAmY2F0Yy0+ZmxhZ3MpKSB7CisJCQlpZiAoY2F0Yy0+aXNfZjV1MDExKQorCQkJCWF0b21pY19pbmMoJmNhdGMtPnJlY3Ffc3opOworCQl9IGVsc2UgeworCQkJY2F0Yy0+cnhfdXJiLT5kZXYgPSBjYXRjLT51c2JkZXY7CisJCQlpZiAoKHN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKGNhdGMtPnJ4X3VyYiwgR0ZQX0FUT01JQykpIDwgMCkgeworCQkJCWVycigic3VibWl0KHJ4X3VyYikgc3RhdHVzICVkIiwgc3RhdHVzKTsKKwkJCX0KKwkJfSAKKwl9CityZXN1Ym1pdDoKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBTTEFCX0FUT01JQyk7CisJaWYgKHN0YXR1cykKKwkJZXJyICgiY2FuJ3QgcmVzdWJtaXQgaW50ciwgJXMtJXMsIHN0YXR1cyAlZCIsCisJCQkJY2F0Yy0+dXNiZGV2LT5idXMtPmJ1c19uYW1lLAorCQkJCWNhdGMtPnVzYmRldi0+ZGV2cGF0aCwgc3RhdHVzKTsKK30KKworLyoKKyAqIFRyYW5zbWl0IHJvdXRpbmVzLgorICovCisKK3N0YXRpYyB2b2lkIGNhdGNfdHhfcnVuKHN0cnVjdCBjYXRjICpjYXRjKQoreworCWludCBzdGF0dXM7CisKKwlpZiAoY2F0Yy0+aXNfZjV1MDExKQorCQljYXRjLT50eF9wdHIgPSAoY2F0Yy0+dHhfcHRyICsgNjMpICYgfjYzOworCisJY2F0Yy0+dHhfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gY2F0Yy0+dHhfcHRyOworCWNhdGMtPnR4X3VyYi0+dHJhbnNmZXJfYnVmZmVyID0gY2F0Yy0+dHhfYnVmW2NhdGMtPnR4X2lkeF07CisJY2F0Yy0+dHhfdXJiLT5kZXYgPSBjYXRjLT51c2JkZXY7CisKKwlpZiAoKHN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKGNhdGMtPnR4X3VyYiwgR0ZQX0FUT01JQykpIDwgMCkKKwkJZXJyKCJzdWJtaXQodHhfdXJiKSwgc3RhdHVzICVkIiwgc3RhdHVzKTsKKworCWNhdGMtPnR4X2lkeCA9ICFjYXRjLT50eF9pZHg7CisJY2F0Yy0+dHhfcHRyID0gMDsKKworCWNhdGMtPm5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworfQorCitzdGF0aWMgdm9pZCBjYXRjX3R4X2RvbmUoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgY2F0YyAqY2F0YyA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUKSB7CisJCWRiZygiVHggUmVzZXQuIik7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgJj0gflVSQl9BU1lOQ19VTkxJTks7CisJCXVyYi0+c3RhdHVzID0gMDsKKwkJY2F0Yy0+bmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJCWNhdGMtPnN0YXRzLnR4X2Vycm9ycysrOworCQljbGVhcl9iaXQoVFhfUlVOTklORywgJmNhdGMtPmZsYWdzKTsKKwkJbmV0aWZfd2FrZV9xdWV1ZShjYXRjLT5uZXRkZXYpOworCQlyZXR1cm47CisJfQorCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygidHhfZG9uZSwgc3RhdHVzICVkLCBsZW5ndGggJWQiLCB1cmItPnN0YXR1cywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXRjLT50eF9sb2NrLCBmbGFncyk7CisKKwlpZiAoY2F0Yy0+dHhfcHRyKQorCQljYXRjX3R4X3J1bihjYXRjKTsKKwllbHNlCisJCWNsZWFyX2JpdChUWF9SVU5OSU5HLCAmY2F0Yy0+ZmxhZ3MpOworCisJbmV0aWZfd2FrZV9xdWV1ZShjYXRjLT5uZXRkZXYpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2F0Yy0+dHhfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGNhdGNfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGNhdGMgKmNhdGMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY2hhciAqdHhfYnVmOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhdGMtPnR4X2xvY2ssIGZsYWdzKTsKKworCWNhdGMtPnR4X3B0ciA9ICgoKGNhdGMtPnR4X3B0ciAtIDEpID4+IDYpICsgMSkgPDwgNjsKKwl0eF9idWYgPSBjYXRjLT50eF9idWZbY2F0Yy0+dHhfaWR4XSArIGNhdGMtPnR4X3B0cjsKKwkqKCh1MTYqKXR4X2J1ZikgPSAoY2F0Yy0+aXNfZjV1MDExKSA/IGNwdV90b19iZTE2KCh1MTYpc2tiLT5sZW4pIDogY3B1X3RvX2xlMTYoKHUxNilza2ItPmxlbik7CisJbWVtY3B5KHR4X2J1ZiArIDIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCWNhdGMtPnR4X3B0ciArPSBza2ItPmxlbiArIDI7CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoVFhfUlVOTklORywgJmNhdGMtPmZsYWdzKSkKKwkJY2F0Y190eF9ydW4oY2F0Yyk7CisKKwlpZiAoKGNhdGMtPmlzX2Y1dTAxMSAmJiBjYXRjLT50eF9wdHIpCisJICAgICB8fCAoY2F0Yy0+dHhfcHRyID49ICgoVFhfTUFYX0JVUlNUIC0gMSkgKiAoUEtUX1NaICsgMikpKSkKKwkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2F0Yy0+dHhfbG9jaywgZmxhZ3MpOworCisJY2F0Yy0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJY2F0Yy0+c3RhdHMudHhfcGFja2V0cysrOworCisJZGV2X2tmcmVlX3NrYihza2IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNhdGNfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBjYXRjICpjYXRjID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXdhcm4oIlRyYW5zbWl0IHRpbWVkIG91dC4iKTsKKwljYXRjLT50eF91cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9BU1lOQ19VTkxJTks7CisJdXNiX3VubGlua191cmIoY2F0Yy0+dHhfdXJiKTsKK30KKworLyoKKyAqIENvbnRyb2wgbWVzc2FnZXMuCisgKi8KKworc3RhdGljIGludCBjYXRjX2N0cmxfbXNnKHN0cnVjdCBjYXRjICpjYXRjLCB1OCBkaXIsIHU4IHJlcXVlc3QsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCB2b2lkICpidWYsIGludCBsZW4pCit7CisgICAgICAgIGludCByZXR2YWwgPSB1c2JfY29udHJvbF9tc2coY2F0Yy0+dXNiZGV2LAorCQlkaXIgPyB1c2JfcmN2Y3RybHBpcGUoY2F0Yy0+dXNiZGV2LCAwKSA6IHVzYl9zbmRjdHJscGlwZShjYXRjLT51c2JkZXYsIDApLAorCQkgcmVxdWVzdCwgMHg0MCB8IGRpciwgdmFsdWUsIGluZGV4LCBidWYsIGxlbiwgMTAwMCk7CisgICAgICAgIHJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKK30KKworc3RhdGljIHZvaWQgY2F0Y19jdHJsX3J1bihzdHJ1Y3QgY2F0YyAqY2F0YykKK3sKKwlzdHJ1Y3QgY3RybF9xdWV1ZSAqcSA9IGNhdGMtPmN0cmxfcXVldWUgKyBjYXRjLT5jdHJsX3RhaWw7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IGNhdGMtPnVzYmRldjsKKwlzdHJ1Y3QgdXJiICp1cmIgPSBjYXRjLT5jdHJsX3VyYjsKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpkciA9ICZjYXRjLT5jdHJsX2RyOworCWludCBzdGF0dXM7CisKKwlkci0+YlJlcXVlc3QgPSBxLT5yZXF1ZXN0OworCWRyLT5iUmVxdWVzdFR5cGUgPSAweDQwIHwgcS0+ZGlyOworCWRyLT53VmFsdWUgPSBjcHVfdG9fbGUxNihxLT52YWx1ZSk7CisJZHItPndJbmRleCA9IGNwdV90b19sZTE2KHEtPmluZGV4KTsKKwlkci0+d0xlbmd0aCA9IGNwdV90b19sZTE2KHEtPmxlbik7CisKKyAgICAgICAgdXJiLT5waXBlID0gcS0+ZGlyID8gdXNiX3JjdmN0cmxwaXBlKHVzYmRldiwgMCkgOiB1c2Jfc25kY3RybHBpcGUodXNiZGV2LCAwKTsKKwl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBxLT5sZW47CisJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBjYXRjLT5jdHJsX2J1ZjsKKwl1cmItPnNldHVwX3BhY2tldCA9ICh2b2lkICopIGRyOworCXVyYi0+ZGV2ID0gdXNiZGV2OworCisJaWYgKCFxLT5kaXIgJiYgcS0+YnVmICYmIHEtPmxlbikKKwkJbWVtY3B5KGNhdGMtPmN0cmxfYnVmLCBxLT5idWYsIHEtPmxlbik7CisKKwlpZiAoKHN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKGNhdGMtPmN0cmxfdXJiLCBHRlBfS0VSTkVMKSkpCisJCWVycigic3VibWl0KGN0cmxfdXJiKSBzdGF0dXMgJWQiLCBzdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCBjYXRjX2N0cmxfZG9uZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBjYXRjICpjYXRjID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBjdHJsX3F1ZXVlICpxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodXJiLT5zdGF0dXMpCisJCWRiZygiY3RybF9kb25lLCBzdGF0dXMgJWQsIGxlbiAlZC4iLCB1cmItPnN0YXR1cywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXRjLT5jdHJsX2xvY2ssIGZsYWdzKTsKKworCXEgPSBjYXRjLT5jdHJsX3F1ZXVlICsgY2F0Yy0+Y3RybF90YWlsOworCisJaWYgKHEtPmRpcikgeworCQlpZiAocS0+YnVmICYmIHEtPmxlbikKKwkJCW1lbWNweShxLT5idWYsIGNhdGMtPmN0cmxfYnVmLCBxLT5sZW4pOworCQllbHNlCisJCQlxLT5idWYgPSBjYXRjLT5jdHJsX2J1ZjsKKwl9CisKKwlpZiAocS0+Y2FsbGJhY2spCisJCXEtPmNhbGxiYWNrKGNhdGMsIHEpOworCisJY2F0Yy0+Y3RybF90YWlsID0gKGNhdGMtPmN0cmxfdGFpbCArIDEpICYgKENUUkxfUVVFVUUgLSAxKTsKKworCWlmIChjYXRjLT5jdHJsX2hlYWQgIT0gY2F0Yy0+Y3RybF90YWlsKQorCQljYXRjX2N0cmxfcnVuKGNhdGMpOworCWVsc2UKKwkJY2xlYXJfYml0KENUUkxfUlVOTklORywgJmNhdGMtPmZsYWdzKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhdGMtPmN0cmxfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGNhdGNfY3RybF9hc3luYyhzdHJ1Y3QgY2F0YyAqY2F0YywgdTggZGlyLCB1OCByZXF1ZXN0LCB1MTYgdmFsdWUsCisJdTE2IGluZGV4LCB2b2lkICpidWYsIGludCBsZW4sIHZvaWQgKCpjYWxsYmFjaykoc3RydWN0IGNhdGMgKmNhdGMsIHN0cnVjdCBjdHJsX3F1ZXVlICpxKSkKK3sKKwlzdHJ1Y3QgY3RybF9xdWV1ZSAqcTsKKwlpbnQgcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhdGMtPmN0cmxfbG9jaywgZmxhZ3MpOworCQorCXEgPSBjYXRjLT5jdHJsX3F1ZXVlICsgY2F0Yy0+Y3RybF9oZWFkOworCisJcS0+ZGlyID0gZGlyOworCXEtPnJlcXVlc3QgPSByZXF1ZXN0OworCXEtPnZhbHVlID0gdmFsdWU7CisJcS0+aW5kZXggPSBpbmRleDsKKwlxLT5idWYgPSBidWY7CisJcS0+bGVuID0gbGVuOworCXEtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisKKwljYXRjLT5jdHJsX2hlYWQgPSAoY2F0Yy0+Y3RybF9oZWFkICsgMSkgJiAoQ1RSTF9RVUVVRSAtIDEpOworCisJaWYgKGNhdGMtPmN0cmxfaGVhZCA9PSBjYXRjLT5jdHJsX3RhaWwpIHsKKwkJZXJyKCJjdHJsIHF1ZXVlIGZ1bGwiKTsKKwkJY2F0Yy0+Y3RybF90YWlsID0gKGNhdGMtPmN0cmxfdGFpbCArIDEpICYgKENUUkxfUVVFVUUgLSAxKTsKKwkJcmV0dmFsID0gLTE7CisJfQorCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KENUUkxfUlVOTklORywgJmNhdGMtPmZsYWdzKSkKKwkJY2F0Y19jdHJsX3J1bihjYXRjKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhdGMtPmN0cmxfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIFN0YXRpc3RpY3MuCisgKi8KKworc3RhdGljIHZvaWQgY2F0Y19zdGF0c19kb25lKHN0cnVjdCBjYXRjICpjYXRjLCBzdHJ1Y3QgY3RybF9xdWV1ZSAqcSkKK3sKKwlpbnQgaW5kZXggPSBxLT5pbmRleCAtIEV0aFN0YXRzOworCXUxNiBkYXRhLCBsYXN0OworCisJY2F0Yy0+c3RhdHNfYnVmW2luZGV4XSA9ICooKGNoYXIgKilxLT5idWYpOworCisJaWYgKGluZGV4ICYgMSkKKwkJcmV0dXJuOworCisJZGF0YSA9ICgodTE2KWNhdGMtPnN0YXRzX2J1ZltpbmRleF0gPDwgOCkgfCBjYXRjLT5zdGF0c19idWZbaW5kZXggKyAxXTsKKwlsYXN0ID0gY2F0Yy0+c3RhdHNfdmFsc1tpbmRleCA+PiAxXTsKKworCXN3aXRjaCAoaW5kZXgpIHsKKwkJY2FzZSBUeFNpbmdsZUNvbGw6CisJCWNhc2UgVHhNdWx0aUNvbGw6CisJCQljYXRjLT5zdGF0cy5jb2xsaXNpb25zICs9IGRhdGEgLSBsYXN0OworCQkJYnJlYWs7CisJCWNhc2UgVHhFeGNlc3NDb2xsOgorCQkJY2F0Yy0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7CisJCQljYXRjLT5zdGF0cy50eF9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7CisJCQlicmVhazsKKwkJY2FzZSBSeEZyYW1FcnI6CisJCQljYXRjLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7CisJCQljYXRjLT5zdGF0cy5yeF9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7CisJCQlicmVhazsKKwl9CisKKwljYXRjLT5zdGF0c192YWxzW2luZGV4ID4+IDFdID0gZGF0YTsKK30KKworc3RhdGljIHZvaWQgY2F0Y19zdGF0c190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGNhdGMgKmNhdGMgPSAodm9pZCAqKSBkYXRhOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJY2F0Y19nZXRfcmVnX2FzeW5jKGNhdGMsIEV0aFN0YXRzICsgNyAtIGksIGNhdGNfc3RhdHNfZG9uZSk7CisKKwltb2RfdGltZXIoJmNhdGMtPnRpbWVyLCBqaWZmaWVzICsgU1RBVFNfVVBEQVRFKTsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpjYXRjX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBjYXRjICpjYXRjID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlyZXR1cm4gJmNhdGMtPnN0YXRzOworfQorCisvKgorICogUmVjZWl2ZSBtb2Rlcy4gQnJvYWRjYXN0LCBNdWx0aWNhc3QsIFByb21pc2MuCisgKi8KKworc3RhdGljIHZvaWQgY2F0Y19tdWx0aWNhc3QodW5zaWduZWQgY2hhciAqYWRkciwgdTggKm11bHRpY2FzdCkKK3sKKwl1MzIgY3JjOworCisJY3JjID0gZXRoZXJfY3JjX2xlKDYsIGFkZHIpOworCW11bHRpY2FzdFsoY3JjID4+IDMpICYgMHgzZl0gfD0gMSA8PCAoY3JjICYgNyk7Cit9CisKK3N0YXRpYyB2b2lkIGNhdGNfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGNhdGMgKmNhdGMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWM7CisJdTggYnJvYWRjYXN0WzZdOworCXU4IHJ4ID0gUnhFbmFibGUgfCBSeFBvbGFyaXR5IHwgUnhNdWx0aUNhc3Q7CisJaW50IGk7CisKKwltZW1zZXQoYnJvYWRjYXN0LCAweGZmLCA2KTsKKwltZW1zZXQoY2F0Yy0+bXVsdGljYXN0LCAwLCA2NCk7CisKKwljYXRjX211bHRpY2FzdChicm9hZGNhc3QsIGNhdGMtPm11bHRpY2FzdCk7CisJY2F0Y19tdWx0aWNhc3QobmV0ZGV2LT5kZXZfYWRkciwgY2F0Yy0+bXVsdGljYXN0KTsKKworCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJbWVtc2V0KGNhdGMtPm11bHRpY2FzdCwgMHhmZiwgNjQpOworCQlyeCB8PSAoIWNhdGMtPmlzX2Y1dTAxMSkgPyBSeFByb21pc2MgOiBBbHRSeFByb21pc2M7CisJfSAKKworCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CisJCW1lbXNldChjYXRjLT5tdWx0aWNhc3QsIDB4ZmYsIDY0KTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwLCBtYyA9IG5ldGRldi0+bWNfbGlzdDsgbWMgJiYgaSA8IG5ldGRldi0+bWNfY291bnQ7IGkrKywgbWMgPSBtYy0+bmV4dCkgeworCQkJdTMyIGNyYyA9IGV0aGVyX2NyY19sZSg2LCBtYy0+ZG1pX2FkZHIpOworCQkJaWYgKCFjYXRjLT5pc19mNXUwMTEpIHsKKwkJCQljYXRjLT5tdWx0aWNhc3RbKGNyYyA+PiAzKSAmIDB4M2ZdIHw9IDEgPDwgKGNyYyAmIDcpOworCQkJfSBlbHNlIHsKKwkJCQljYXRjLT5tdWx0aWNhc3RbNy0oY3JjID4+IDI5KV0gfD0gMSA8PCAoKGNyYyA+PiAyNikgJiA3KTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoIWNhdGMtPmlzX2Y1dTAxMSkgeworCQljYXRjX3NldF9yZWdfYXN5bmMoY2F0YywgUnhVbml0LCByeCk7CisJCWNhdGNfd3JpdGVfbWVtX2FzeW5jKGNhdGMsIDB4ZmE4MCwgY2F0Yy0+bXVsdGljYXN0LCA2NCk7CisJfSBlbHNlIHsKKwkJZjV1MDExX21jaGFzaF9hc3luYyhjYXRjLCBjYXRjLT5tdWx0aWNhc3QpOworCQlpZiAoY2F0Yy0+cnhtb2RlWzBdICE9IHJ4KSB7CisJCQljYXRjLT5yeG1vZGVbMF0gPSByeDsKKwkJCWRiZygiU2V0dGluZyBSWCBtb2RlIHRvICUyLjJYICUyLjJYIiwgY2F0Yy0+cnhtb2RlWzBdLCBjYXRjLT5yeG1vZGVbMV0pOworCQkJZjV1MDExX3J4bW9kZV9hc3luYyhjYXRjLCBjYXRjLT5yeG1vZGUpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBjYXRjX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3RydWN0IGNhdGMgKmNhdGMgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cm5jcHkoaW5mby0+ZHJpdmVyLCBkcml2ZXJfbmFtZSwgRVRIVE9PTF9CVVNJTkZPX0xFTik7CisJc3RybmNweShpbmZvLT52ZXJzaW9uLCBEUklWRVJfVkVSU0lPTiwgRVRIVE9PTF9CVVNJTkZPX0xFTik7CisJdXNiX21ha2VfcGF0aCAoY2F0Yy0+dXNiZGV2LCBpbmZvLT5idXNfaW5mbywgc2l6ZW9mIGluZm8tPmJ1c19pbmZvKTsKK30KKworc3RhdGljIGludCBjYXRjX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgY2F0YyAqY2F0YyA9IG5ldGRldl9wcml2KGRldik7CisJaWYgKCFjYXRjLT5pc19mNXUwMTEpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWNtZC0+c3VwcG9ydGVkID0gU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF9UUDsKKwljbWQtPmFkdmVydGlzaW5nID0gQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfCBBRFZFUlRJU0VEX1RQOworCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKKwljbWQtPmR1cGxleCA9IERVUExFWF9IQUxGOworCWNtZC0+cG9ydCA9IFBPUlRfVFA7IAorCWNtZC0+cGh5X2FkZHJlc3MgPSAwOworCWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOworCWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKKwljbWQtPm1heHR4cGt0ID0gMTsKKwljbWQtPm1heHJ4cGt0ID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7CisJLmdldF9kcnZpbmZvID0gY2F0Y19nZXRfZHJ2aW5mbywKKwkuZ2V0X3NldHRpbmdzID0gY2F0Y19nZXRfc2V0dGluZ3MsCisJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaworfTsKKworLyoKKyAqIE9wZW4sIGNsb3NlLgorICovCisKK3N0YXRpYyBpbnQgY2F0Y19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGNhdGMgKmNhdGMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBzdGF0dXM7CisKKwljYXRjLT5pcnFfdXJiLT5kZXYgPSBjYXRjLT51c2JkZXY7CisJaWYgKChzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihjYXRjLT5pcnFfdXJiLCBHRlBfS0VSTkVMKSkgPCAwKSB7CisJCWVycigic3VibWl0KGlycV91cmIpIHN0YXR1cyAlZCIsIHN0YXR1cyk7CisJCXJldHVybiAtMTsKKwl9CisKKwluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOworCisJaWYgKCFjYXRjLT5pc19mNXUwMTEpCisJCW1vZF90aW1lcigmY2F0Yy0+dGltZXIsIGppZmZpZXMgKyBTVEFUU19VUERBVEUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2F0Y19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGNhdGMgKmNhdGMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCisJaWYgKCFjYXRjLT5pc19mNXUwMTEpCisJCWRlbF90aW1lcl9zeW5jKCZjYXRjLT50aW1lcik7CisKKwl1c2Jfa2lsbF91cmIoY2F0Yy0+cnhfdXJiKTsKKwl1c2Jfa2lsbF91cmIoY2F0Yy0+dHhfdXJiKTsKKwl1c2Jfa2lsbF91cmIoY2F0Yy0+aXJxX3VyYik7CisJdXNiX2tpbGxfdXJiKGNhdGMtPmN0cmxfdXJiKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVVNCIHByb2JlLCBkaXNjb25uZWN0LgorICovCisKK3N0YXRpYyBpbnQgY2F0Y19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IGNhdGMgKmNhdGM7CisJdTggYnJvYWRjYXN0WzZdOworCWludCBpLCBwa3RzejsKKworCWlmICh1c2Jfc2V0X2ludGVyZmFjZSh1c2JkZXYsCisJCQlpbnRmLT5hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsIDEpKSB7CisgICAgICAgICAgICAgICAgZXJyKCJDYW4ndCBzZXQgYWx0c2V0dGluZyAxLiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGNhdGMpKTsKKwlpZiAoIW5ldGRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljYXRjID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCW5ldGRldi0+b3BlbiA9IGNhdGNfb3BlbjsKKwluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGNhdGNfaGFyZF9zdGFydF94bWl0OworCW5ldGRldi0+c3RvcCA9IGNhdGNfc3RvcDsKKwluZXRkZXYtPmdldF9zdGF0cyA9IGNhdGNfZ2V0X3N0YXRzOworCW5ldGRldi0+dHhfdGltZW91dCA9IGNhdGNfdHhfdGltZW91dDsKKwluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKKwluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGNhdGNfc2V0X211bHRpY2FzdF9saXN0OworCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZvcHMpOworCisJY2F0Yy0+dXNiZGV2ID0gdXNiZGV2OworCWNhdGMtPm5ldGRldiA9IG5ldGRldjsKKworCXNwaW5fbG9ja19pbml0KCZjYXRjLT50eF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmY2F0Yy0+Y3RybF9sb2NrKTsKKworCWluaXRfdGltZXIoJmNhdGMtPnRpbWVyKTsKKwljYXRjLT50aW1lci5kYXRhID0gKGxvbmcpIGNhdGM7CisJY2F0Yy0+dGltZXIuZnVuY3Rpb24gPSBjYXRjX3N0YXRzX3RpbWVyOworCisJY2F0Yy0+Y3RybF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWNhdGMtPnR4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJY2F0Yy0+cnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwljYXRjLT5pcnFfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoKCFjYXRjLT5jdHJsX3VyYikgfHwgKCFjYXRjLT50eF91cmIpIHx8IAorCSAgICAoIWNhdGMtPnJ4X3VyYikgfHwgKCFjYXRjLT5pcnFfdXJiKSkgeworCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUuIik7CisJCWlmIChjYXRjLT5jdHJsX3VyYikKKwkJCXVzYl9mcmVlX3VyYihjYXRjLT5jdHJsX3VyYik7CisJCWlmIChjYXRjLT50eF91cmIpCisJCQl1c2JfZnJlZV91cmIoY2F0Yy0+dHhfdXJiKTsKKwkJaWYgKGNhdGMtPnJ4X3VyYikKKwkJCXVzYl9mcmVlX3VyYihjYXRjLT5yeF91cmIpOworCQlpZiAoY2F0Yy0+aXJxX3VyYikKKwkJCXVzYl9mcmVlX3VyYihjYXRjLT5pcnFfdXJiKTsKKwkJZnJlZV9uZXRkZXYobmV0ZGV2KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogVGhlIEY1VTAxMSBoYXMgdGhlIHNhbWUgdmVuZG9yL3Byb2R1Y3QgYXMgdGhlIG5ldG1hdGUgYnV0IGEgZGV2aWNlIHZlcnNpb24gb2YgMHgxMzAgKi8KKwlpZiAobGUxNl90b19jcHUodXNiZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSAweDA0MjMgJiYgCisJICAgIGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4YSAmJgorCSAgICBsZTE2X3RvX2NwdShjYXRjLT51c2JkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSA9PSAweDAxMzApIHsKKwkJZGJnKCJUZXN0aW5nIGZvciBmNXUwMTEiKTsKKwkJY2F0Yy0+aXNfZjV1MDExID0gMTsJCQorCQlhdG9taWNfc2V0KCZjYXRjLT5yZWNxX3N6LCAwKTsKKwkJcGt0c3ogPSBSWF9QS1RfU1o7CisJfSBlbHNlIHsKKwkJcGt0c3ogPSBSWF9NQVhfQlVSU1QgKiAoUEtUX1NaICsgMik7CisJfQorCQorCXVzYl9maWxsX2NvbnRyb2xfdXJiKGNhdGMtPmN0cmxfdXJiLCB1c2JkZXYsIHVzYl9zbmRjdHJscGlwZSh1c2JkZXYsIDApLAorCQlOVUxMLCBOVUxMLCAwLCBjYXRjX2N0cmxfZG9uZSwgY2F0Yyk7CisKKwl1c2JfZmlsbF9idWxrX3VyYihjYXRjLT50eF91cmIsIHVzYmRldiwgdXNiX3NuZGJ1bGtwaXBlKHVzYmRldiwgMSksCisJCU5VTEwsIDAsIGNhdGNfdHhfZG9uZSwgY2F0Yyk7CisKKwl1c2JfZmlsbF9idWxrX3VyYihjYXRjLT5yeF91cmIsIHVzYmRldiwgdXNiX3JjdmJ1bGtwaXBlKHVzYmRldiwgMSksCisJCWNhdGMtPnJ4X2J1ZiwgcGt0c3osIGNhdGNfcnhfZG9uZSwgY2F0Yyk7CisKKwl1c2JfZmlsbF9pbnRfdXJiKGNhdGMtPmlycV91cmIsIHVzYmRldiwgdXNiX3JjdmludHBpcGUodXNiZGV2LCAyKSwKKyAgICAgICAgICAgICAgICBjYXRjLT5pcnFfYnVmLCAyLCBjYXRjX2lycV9kb25lLCBjYXRjLCAxKTsKKworCWlmICghY2F0Yy0+aXNfZjV1MDExKSB7CisJCWRiZygiQ2hlY2tpbmcgbWVtb3J5IHNpemVcbiIpOworCisJCWkgPSAweDEyMzQ1Njc4OworCQljYXRjX3dyaXRlX21lbShjYXRjLCAweDdhODAsICZpLCA0KTsKKwkJaSA9IDB4ODc2NTQzMjE7CQorCQljYXRjX3dyaXRlX21lbShjYXRjLCAweGZhODAsICZpLCA0KTsKKwkJY2F0Y19yZWFkX21lbShjYXRjLCAweDdhODAsICZpLCA0KTsKKwkgIAorCQlzd2l0Y2ggKGkpIHsKKwkJY2FzZSAweDEyMzQ1Njc4OgorCQkJY2F0Y19zZXRfcmVnKGNhdGMsIFR4QnVmQ291bnQsIDgpOworCQkJY2F0Y19zZXRfcmVnKGNhdGMsIFJ4QnVmQ291bnQsIDMyKTsKKwkJCWRiZygiNjRrIE1lbW9yeVxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXdhcm4oIkNvdWxkbid0IGRldGVjdCBtZW1vcnkgc2l6ZSwgYXNzdW1pbmcgMzJrIik7CisJCWNhc2UgMHg4NzY1NDMyMToKKwkJCWNhdGNfc2V0X3JlZyhjYXRjLCBUeEJ1ZkNvdW50LCA0KTsKKwkJCWNhdGNfc2V0X3JlZyhjYXRjLCBSeEJ1ZkNvdW50LCAxNik7CisJCQlkYmcoIjMyayBNZW1vcnlcbiIpOworCQkJYnJlYWs7CisJCX0KKwkgIAorCQlkYmcoIkdldHRpbmcgTUFDIGZyb20gU0VFUk9NLiIpOworCSAgCisJCWNhdGNfZ2V0X21hYyhjYXRjLCBuZXRkZXYtPmRldl9hZGRyKTsKKwkJCisJCWRiZygiU2V0dGluZyBNQUMgaW50byByZWdpc3RlcnMuIik7CisJICAKKwkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJCWNhdGNfc2V0X3JlZyhjYXRjLCBTdGF0aW9uQWRkcjAgLSBpLCBuZXRkZXYtPmRldl9hZGRyW2ldKTsKKwkJCisJCWRiZygiRmlsbGluZyB0aGUgbXVsdGljYXN0IGxpc3QuIik7CisJICAKKwkJbWVtc2V0KGJyb2FkY2FzdCwgMHhmZiwgNik7CisJCWNhdGNfbXVsdGljYXN0KGJyb2FkY2FzdCwgY2F0Yy0+bXVsdGljYXN0KTsKKwkJY2F0Y19tdWx0aWNhc3QobmV0ZGV2LT5kZXZfYWRkciwgY2F0Yy0+bXVsdGljYXN0KTsKKwkJY2F0Y193cml0ZV9tZW0oY2F0YywgMHhmYTgwLCBjYXRjLT5tdWx0aWNhc3QsIDY0KTsKKwkJCisJCWRiZygiQ2xlYXJpbmcgZXJyb3IgY291bnRlcnMuIik7CisJCQorCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJY2F0Y19zZXRfcmVnKGNhdGMsIEV0aFN0YXRzICsgaSwgMCk7CisJCWNhdGMtPmxhc3Rfc3RhdHMgPSBqaWZmaWVzOworCQkKKwkJZGJnKCJFbmFibGluZy4iKTsKKwkJCisJCWNhdGNfc2V0X3JlZyhjYXRjLCBNYXhCdXJzdCwgUlhfTUFYX0JVUlNUKTsKKwkJY2F0Y19zZXRfcmVnKGNhdGMsIE9wTW9kZXMsIE9wVHhNZXJnZSB8IE9wUnhNZXJnZSB8IE9wTGVuSW5jbHVkZSB8IE9wM01lbVdhaXRzKTsKKwkJY2F0Y19zZXRfcmVnKGNhdGMsIExFREN0cmwsIExFRExpbmspOworCQljYXRjX3NldF9yZWcoY2F0YywgUnhVbml0LCBSeEVuYWJsZSB8IFJ4UG9sYXJpdHkgfCBSeE11bHRpQ2FzdCk7CisJfSBlbHNlIHsKKwkJZGJnKCJQZXJmb3JtaW5nIHJlc2V0XG4iKTsKKwkJY2F0Y19yZXNldChjYXRjKTsKKwkJY2F0Y19nZXRfbWFjKGNhdGMsIG5ldGRldi0+ZGV2X2FkZHIpOworCQkKKwkJZGJnKCJTZXR0aW5nIFJYIE1vZGUiKTsKKwkJY2F0Yy0+cnhtb2RlWzBdID0gUnhFbmFibGUgfCBSeFBvbGFyaXR5IHwgUnhNdWx0aUNhc3Q7CisJCWNhdGMtPnJ4bW9kZVsxXSA9IDA7CisJCWY1dTAxMV9yeG1vZGUoY2F0YywgY2F0Yy0+cnhtb2RlKTsKKwl9CisJZGJnKCJJbml0IGRvbmUuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIFVTQiBFdGhlcm5ldCBhdCB1c2ItJXMtJXMsICIsCisJICAgICAgIG5ldGRldi0+bmFtZSwgKGNhdGMtPmlzX2Y1dTAxMSkgPyAiQmVsa2luIEY1VTAxMSIgOiAiQ0FUQyBFTDEyMTBBIE5ldE1hdGUiLAorCSAgICAgICB1c2JkZXYtPmJ1cy0+YnVzX25hbWUsIHVzYmRldi0+ZGV2cGF0aCk7CisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgcHJpbnRrKCIlMi4yeDoiLCBuZXRkZXYtPmRldl9hZGRyW2ldKTsKKwlwcmludGsoIiUyLjJ4LlxuIiwgbmV0ZGV2LT5kZXZfYWRkcltpXSk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjYXRjKTsKKworCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJmludGYtPmRldik7CisJaWYgKHJlZ2lzdGVyX25ldGRldihuZXRkZXYpICE9IDApIHsKKwkJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwkJdXNiX2ZyZWVfdXJiKGNhdGMtPmN0cmxfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGNhdGMtPnR4X3VyYik7CisJCXVzYl9mcmVlX3VyYihjYXRjLT5yeF91cmIpOworCQl1c2JfZnJlZV91cmIoY2F0Yy0+aXJxX3VyYik7CisJCWZyZWVfbmV0ZGV2KG5ldGRldik7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2F0Y19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBjYXRjICpjYXRjID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJaWYgKGNhdGMpIHsKKwkJdW5yZWdpc3Rlcl9uZXRkZXYoY2F0Yy0+bmV0ZGV2KTsKKwkJdXNiX2ZyZWVfdXJiKGNhdGMtPmN0cmxfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGNhdGMtPnR4X3VyYik7CisJCXVzYl9mcmVlX3VyYihjYXRjLT5yeF91cmIpOworCQl1c2JfZnJlZV91cmIoY2F0Yy0+aXJxX3VyYik7CisJCWZyZWVfbmV0ZGV2KGNhdGMtPm5ldGRldik7CisJfQorfQorCisvKgorICogTW9kdWxlIGZ1bmN0aW9ucyBhbmQgdGFibGVzLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjYXRjX2lkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRSgweDA0MjMsIDB4YSkgfSwJLyogQ0FUQyBOZXRtYXRlLCBCZWxraW4gRjVVMDExICovCisJeyBVU0JfREVWSUNFKDB4MDQyMywgMHhjKSB9LAkvKiBDQVRDIE5ldG1hdGUgSUksIEJlbGtpbiBGNVUxMTEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOGQxLCAweDEpIH0sCS8qIHNtYXJ0QnJpZGdlcyBzbWFydE5JQyAqLworCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGNhdGNfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY2F0Y19kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJZHJpdmVyX25hbWUsCisJLnByb2JlID0JY2F0Y19wcm9iZSwKKwkuZGlzY29ubmVjdCA9CWNhdGNfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQljYXRjX2lkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY2F0Y19pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdCA9IHVzYl9yZWdpc3RlcigmY2F0Y19kcml2ZXIpOworCWlmIChyZXN1bHQgPT0gMCkKKwkJaW5mbyhEUklWRVJfVkVSU0lPTiAiICIgRFJJVkVSX0RFU0MpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjYXRjX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmY2F0Y19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChjYXRjX2luaXQpOworbW9kdWxlX2V4aXQoY2F0Y19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9rYXdldGguYyBiL2RyaXZlcnMvdXNiL25ldC9rYXdldGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWE3Y2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbmV0L2thd2V0aC5jCkBAIC0wLDAgKzEsMTI3MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgICAga2F3ZXRoLmMgLSBkcml2ZXIgZm9yIEtMNUtVU0IxMDEgYmFzZWQgVVNCLT5FdGhlcm5ldAorICoKKyAqICAgICAoYykgMjAwMCBJbnRlcmxhbiBDb21tdW5pY2F0aW9ucworICogICAgIChjKSAyMDAwIFN0ZXBoYW5lIEFsbmV0CisgKiAgICAgKEMpIDIwMDEgQnJhZCBIYXJkcworICogICAgIChDKSAyMDAyIE9saXZlciBOZXVrdW0KKyAqCisgKiAgICAgT3JpZ2luYWwgYXV0aG9yOiBUaGUgWmFwbWFuIDx6YXBtYW5AaW50ZXJsYW4ubmV0PgorICogICAgIEluc3BpcmVkIGJ5LCBhbmQgbXVjaCBjcmVkaXQgZ29lcyB0byBNaWNoYWVsIFJvdGh3ZWxsCisgKiAgICAgPHJvdGh3ZWxsQGludGVybGFuLm5ldD4gZm9yIHRoZSB0ZXN0IGVxdWlwbWVudCwgaGVscCwgYW5kIHBhdGllbmNlCisgKiAgICAgQmFzZWQgb2ZmIG9mIChhbmQgd2l0aCB0aGFua3MgdG8pIFBldGtvIE1hbm9sb3YncyBwZWdhdXMuYyBkcml2ZXIuCisgKiAgICAgQWxzbyBtYW55IHRoYW5rcyB0byBKb2VsIFNpbHZlcm1hbiBhbmQgRWQgU3VycHJlbmFudCBhdCBLYXdhc2FraQorICogICAgIGZvciBwcm92aWRpbmcgdGhlIGZpcm13YXJlIGFuZCBkcml2ZXIgcmVzb3VyY2VzLgorICoKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IKKyAqICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiAgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVE9ETzoKKyAqIEZpeCBpbl9pbnRlcnJ1cHQoKSBwcm9ibGVtCisgKiBEZXZlbG9wIHRlc3QgcHJvY2VkdXJlcyBmb3IgVVNCIG5ldCBpbnRlcmZhY2VzCisgKiBSdW4gdGVzdCBwcm9jZWR1cmVzCisgKiBGaXggYnVncyBmcm9tIHByZXZpb3VzIHR3byBzdGVwcworICogU25vb3Agb3RoZXIgT1NzIGZvciBhbnkgdHJpY2tzIHdlJ3JlIG5vdCBkb2luZworICogU01QIGxvY2tpbmcKKyAqIFJlZHVjZSBhcmJpdHJhcnkgdGltZW91dHMKKyAqIFNtYXJ0IG11bHRpY2FzdCBzdXBwb3J0CisgKiBUZW1wb3JhcnkgTUFDIGNoYW5nZSBzdXBwb3J0CisgKiBUdW5hYmxlIFNPRnMgcGFyYW1ldGVyIC0gaW9jdGwoKT8KKyAqIEV0aGVybmV0IHN0YXRzIGNvbGxlY3Rpb24KKyAqIENvZGUgZm9ybWF0dGluZyBpbXByb3ZlbWVudHMKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyN1bmRlZiBERUJVRworCisjaWZkZWYgREVCVUcKKyNkZWZpbmUga2F3ZXRoX2RiZyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18gIjogIiBmb3JtYXQgIlxuIiAsIyNhcmcpCisjZWxzZQorI2RlZmluZSBrYXdldGhfZGJnKGZvcm1hdCwgYXJnLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorI2RlZmluZSBrYXdldGhfZXJyKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9FUlIgX19GSUxFX18gIjogIiBmb3JtYXQgIlxuIiAsIyNhcmcpCisjZGVmaW5lIGthd2V0aF9pbmZvKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9JTkZPIF9fRklMRV9fICI6ICIgZm9ybWF0ICJcbiIgLCAjI2FyZykKKyNkZWZpbmUga2F3ZXRoX3dhcm4oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgX19GSUxFX18gIjogIiBmb3JtYXQgIlxuIiAsICMjYXJnKQorCisKKyNpbmNsdWRlICJrYXdldGhmdy5oIgorCisjZGVmaW5lIEtBV0VUSF9NVFUJCQkxNTE0CisjZGVmaW5lIEtBV0VUSF9CVUZfU0laRQkJCTE2NjQKKyNkZWZpbmUgS0FXRVRIX1RYX1RJTUVPVVQJCSg1ICogSFopCisjZGVmaW5lIEtBV0VUSF9TQ1JBVENIX1NJWkUJCTMyCisjZGVmaW5lIEtBV0VUSF9GSVJNV0FSRV9CVUZfU0laRQk0MDk2CisjZGVmaW5lIEtBV0VUSF9DT05UUk9MX1RJTUVPVVQJCSgzMCAqIEhaKQorCisjZGVmaW5lIEtBV0VUSF9TVEFUVVNfQlJPS0VOCQkweDAwMDAwMDEKKyNkZWZpbmUgS0FXRVRIX1NUQVRVU19DTE9TSU5HCQkweDAwMDAwMDIKKworI2RlZmluZSBLQVdFVEhfUEFDS0VUX0ZJTFRFUl9QUk9NSVNDVU9VUwkweDAxCisjZGVmaW5lIEtBV0VUSF9QQUNLRVRfRklMVEVSX0FMTF9NVUxUSUNBU1QJMHgwMgorI2RlZmluZSBLQVdFVEhfUEFDS0VUX0ZJTFRFUl9ESVJFQ1RFRAkJMHgwNAorI2RlZmluZSBLQVdFVEhfUEFDS0VUX0ZJTFRFUl9CUk9BRENBU1QJCTB4MDgKKyNkZWZpbmUgS0FXRVRIX1BBQ0tFVF9GSUxURVJfTVVMVElDQVNUCQkweDEwCisKKy8qIFRhYmxlIDcgKi8KKyNkZWZpbmUgS0FXRVRIX0NPTU1BTkRfR0VUX0VUSEVSTkVUX0RFU0MJMHgwMAorI2RlZmluZSBLQVdFVEhfQ09NTUFORF9NVUxUSUNBU1RfRklMVEVSUyAgICAgICAgMHgwMQorI2RlZmluZSBLQVdFVEhfQ09NTUFORF9TRVRfUEFDS0VUX0ZJTFRFUgkweDAyCisjZGVmaW5lIEtBV0VUSF9DT01NQU5EX1NUQVRJU1RJQ1MgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIEtBV0VUSF9DT01NQU5EX1NFVF9URU1QX01BQyAgICAgCTB4MDYKKyNkZWZpbmUgS0FXRVRIX0NPTU1BTkRfR0VUX1RFTVBfTUFDICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgS0FXRVRIX0NPTU1BTkRfU0VUX1VSQl9TSVpFCQkweDA4CisjZGVmaW5lIEtBV0VUSF9DT01NQU5EX1NFVF9TT0ZTX1dBSVQJCTB4MDkKKyNkZWZpbmUgS0FXRVRIX0NPTU1BTkRfU0NBTgkJCTB4RkYKKworI2RlZmluZSBLQVdFVEhfU09GU19UT19XQUlUCQkJMHgwNQorCisjZGVmaW5lIElOVEJVRkZFUlNJWkUJCQkJNAorCisjZGVmaW5lIFNUQVRFX09GRlNFVAkJCQkwCisjZGVmaW5lIFNUQVRFX01BU0sJCQkJMHg0MAorI2RlZmluZQlTVEFURV9TSElGVAkJCQk1CisKKworTU9EVUxFX0FVVEhPUigiTWljaGFlbCBaYXBwZSA8emFwbWFuQGludGVybGFuLm5ldD4sIFN0ZXBoYW5lIEFsbmV0IDxzdGVwaGFuZUB1LXBpY2FyZGllLmZyPiwgQnJhZCBIYXJkcyA8YmhhcmRzQGJpZ3BvbmQubmV0LmF1PiBhbmQgT2xpdmVyIE5ldWt1bSA8b2xpdmVyQG5ldWt1bS5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIktMNVVTQjEwMSBVU0IgRXRoZXJuZXQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lW10gPSAia2F3ZXRoIjsKKworc3RhdGljIGludCBrYXdldGhfcHJvYmUoCisJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQJLyogZnJvbSBpZF90YWJsZSAqLworCSk7CitzdGF0aWMgdm9pZCBrYXdldGhfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CitzdGF0aWMgaW50IGthd2V0aF9pbnRlcm5hbF9jb250cm9sX21zZyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHBpcGUsCisJCQkJICAgICAgIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNtZCwgdm9pZCAqZGF0YSwKKwkJCQkgICAgICAgaW50IGxlbiwgaW50IHRpbWVvdXQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIHVzYl9kZXZpY2VfaWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl9rbHNpX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFKDB4MDNlOCwgMHgwMDA4KSB9LCAvKiBBT1ggRW5kcG9pbnRzIFVTQiBFdGhlcm5ldCAqLworCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDkwMSkgfSwgLyogSS1PIERBVEEgVVNCLUVUL1QgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTA2LCAweDAzZTgpIH0sIC8qIDNDb20gM0MxOTI1MCAqLworCXsgVVNCX0RFVklDRSgweDA1MDYsIDB4MTFmOCkgfSwgLyogM0NvbSAzQzQ2MCAqLworCXsgVVNCX0RFVklDRSgweDA1NTcsIDB4MjAwMikgfSwgLyogQVRFTiBVU0IgRXRoZXJuZXQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTU3LCAweDQwMDApIH0sIC8qIEQtTGluayBEU0ItNjUwQyAqLworCXsgVVNCX0RFVklDRSgweDA1NjUsIDB4MDAwMikgfSwgLyogUGVyYWNvbSBFbmV0ICovCisJeyBVU0JfREVWSUNFKDB4MDU2NSwgMHgwMDAzKSB9LCAvKiBPcHR1c0BIb21lIFVFUDEwNDVBICovCisJeyBVU0JfREVWSUNFKDB4MDU2NSwgMHgwMDA1KSB9LCAvKiBQZXJhY29tIEVuZXQyICovCisJeyBVU0JfREVWSUNFKDB4MDVlOSwgMHgwMDA4KSB9LCAvKiBLTFNJIEtMNUtVU0IxMDFCICovCisJeyBVU0JfREVWSUNFKDB4MDVlOSwgMHgwMDA5KSB9LCAvKiBLTFNJIEtMNUtVU0IxMDFCIChCb2FyZCBjaGFuZ2UpICovCisJeyBVU0JfREVWSUNFKDB4MDY2YiwgMHgyMjAyKSB9LCAvKiBMaW5rc3lzIFVTQjEwVCAqLworCXsgVVNCX0RFVklDRSgweDA2ZTEsIDB4MDAwOCkgfSwgLyogQURTIFVTQi0xMEJUICovCisJeyBVU0JfREVWSUNFKDB4MDZlMSwgMHgwMDA5KSB9LCAvKiBBRFMgVVNCLTEwQlQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNzA3LCAweDAxMDApIH0sIC8qIFNNQyAyMjAyVVNCICovCisJeyBVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDAxKSB9LCAvKiBDb3JyZWdhIEsuSy4gKi8KKwl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweDQwMDApIH0sIC8qIEQtTGluayBEVS1FMTAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwODQ2LCAweDEwMDEpIH0sIC8qIE5ldEdlYXIgRUEtMTAxICovCisJeyBVU0JfREVWSUNFKDB4MDg0NiwgMHgxMDAyKSB9LCAvKiBOZXRHZWFyIEVBLTEwMSAqLworCXsgVVNCX0RFVklDRSgweDA4NWEsIDB4MDAwOCkgfSwgLyogUG9ydEdlYXIgRXRoZXJuZXQgQWRhcHRlciAqLworCXsgVVNCX0RFVklDRSgweDA4NWEsIDB4MDAwOSkgfSwgLyogUG9ydEdlYXIgRXRoZXJuZXQgQWRhcHRlciAqLworCXsgVVNCX0RFVklDRSgweDA4N2QsIDB4NTcwNCkgfSwgLyogSmF0b24gVVNCIEV0aGVybmV0IERldmljZSBBZGFwdGVyICovCisJeyBVU0JfREVWSUNFKDB4MDk1MSwgMHgwMDA4KSB9LCAvKiBLaW5nc3RvbiBUZWNobm9sb2d5IFVTQiBFdGhlcm5ldCBBZGFwdGVyICovCisJeyBVU0JfREVWSUNFKDB4MDk1YSwgMHgzMDAzKSB9LCAvKiBQb3J0c21pdGggRXhwcmVzcyBFdGhlcm5ldCBBZGFwdGVyICovCisJeyBVU0JfREVWSUNFKDB4MTBiZCwgMHgxNDI3KSB9LCAvKiBBU0FOVEUgVVNCIFRvIEV0aGVybmV0IEFkYXB0ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMzQyLCAweDAyMDQpIH0sIC8qIE1vYmlsaXR5IFVTQi1FdGhlcm5ldCBBZGFwdGVyICovCisJeyBVU0JfREVWSUNFKDB4MTNkMiwgMHgwNDAwKSB9LCAvKiBTaGFyayBQb2NrZXQgQWRhcHRlciAqLworCXsgVVNCX0RFVklDRSgweDE0ODUsIDB4MDAwMSkgfSwJLyogU2lsaWNvbSBVMkUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNDg1LCAweDAwMDIpIH0sIC8qIFBzaW9uIERhY29tIEdvbGQgUG9ydCBFdGhlcm5ldCAqLworCXsgVVNCX0RFVklDRSgweDE2NDUsIDB4MDAwNSkgfSwgLyogRW50cmVnYSBFNDUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNjQ1LCAweDAwMDgpIH0sIC8qIEVudHJlZ2EgVVNCIEV0aGVybmV0IEFkYXB0ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNjQ1LCAweDgwMDUpIH0sIC8qIFBvcnRHZWFyIEV0aGVybmV0IEFkYXB0ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgyMDAxLCAweDQwMDApIH0sIC8qIEQtbGluayBEU0ItNjUwQyAqLworCXt9IC8qIE51bGwgdGVybWluYXRvciAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCB1c2Jfa2xzaV90YWJsZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX2RyaXZlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIga2F3ZXRoX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQlkcml2ZXJfbmFtZSwKKwkucHJvYmUgPQlrYXdldGhfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQlrYXdldGhfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSAgICAgdXNiX2tsc2lfdGFibGUsCit9OworCit0eXBlZGVmIF9fdTggZXRoX2FkZHJfdFs2XTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICB1c2JfZXRoX2RldgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgdXNiX2V0aF9kZXYgeworCWNoYXIgKm5hbWU7CisJX191MTYgdmVuZG9yOworCV9fdTE2IGRldmljZTsKKwl2b2lkICpwZGF0YTsKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX2V0aGVybmV0X2NvbmZpZ3VyYXRpb24KKyAqICAgICBSZWZlciBUYWJsZSA4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBrYXdldGhfZXRoZXJuZXRfY29uZmlndXJhdGlvbgoreworCV9fdTggc2l6ZTsKKwlfX3U4IHJlc2VydmVkMTsKKwlfX3U4IHJlc2VydmVkMjsKKwlldGhfYWRkcl90IGh3X2FkZHI7CisJX191MzIgc3RhdGlzdGljc19tYXNrOworCV9fbGUxNiBzZWdtZW50X3NpemU7CisJX191MTYgbWF4X211bHRpY2FzdF9maWx0ZXJzOworCV9fdTggcmVzZXJ2ZWQzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX2RldmljZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3Qga2F3ZXRoX2RldmljZQoreworCXNwaW5sb2NrX3QgZGV2aWNlX2xvY2s7CisKKwlfX3UzMiBzdGF0dXM7CisJaW50IGVuZDsKKwlpbnQgcmVtb3ZlZDsKKwlpbnQgc3VzcGVuZF9sb3dtZW1fcng7CisJaW50IHN1c3BlbmRfbG93bWVtX2N0cmw7CisJaW50IGxpbmtzdGF0ZTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbG93bWVtX3dvcms7CisKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgdGVybV93YWl0OworCisJc3RydWN0IHVyYiAqcnhfdXJiOworCXN0cnVjdCB1cmIgKnR4X3VyYjsKKwlzdHJ1Y3QgdXJiICppcnFfdXJiOworCisJZG1hX2FkZHJfdCBpbnRidWZmZXJoYW5kbGU7CisJX191OCAqaW50YnVmZmVyOworCWRtYV9hZGRyX3QgcnhidWZmZXJoYW5kbGU7CisJX191OCAqcnhfYnVmOworCisJCisJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYjsKKworCV9fdTggKmZpcm13YXJlX2J1ZjsKKwlfX3U4IHNjcmF0Y2hbS0FXRVRIX1NDUkFUQ0hfU0laRV07CisJX191MTYgcGFja2V0X2ZpbHRlcl9iaXRtYXA7CisKKwlzdHJ1Y3Qga2F3ZXRoX2V0aGVybmV0X2NvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKKworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9jb250cm9sCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQga2F3ZXRoX2NvbnRyb2woc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCwKKwkJCSAgdW5zaWduZWQgaW50IHBpcGUsCisJCQkgIF9fdTggcmVxdWVzdCwKKwkJCSAgX191OCByZXF1ZXN0dHlwZSwKKwkJCSAgX191MTYgdmFsdWUsCisJCQkgIF9fdTE2IGluZGV4LAorCQkJICB2b2lkICpkYXRhLAorCQkJICBfX3UxNiBzaXplLAorCQkJICBpbnQgdGltZW91dCkKK3sKKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpkcjsKKworCWthd2V0aF9kYmcoImthd2V0aF9jb250cm9sKCkiKTsKKworCWlmKGluX2ludGVycnVwdCgpKSB7CisJCWthd2V0aF9kYmcoImluX2ludGVycnVwdCgpIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJZHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSwgR0ZQX0FUT01JQyk7CisKKwlpZiAoIWRyKSB7CisJCWthd2V0aF9kYmcoImttYWxsb2MoKSBmYWlsZWQiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZHItPmJSZXF1ZXN0VHlwZT0gcmVxdWVzdHR5cGU7CisJZHItPmJSZXF1ZXN0ID0gcmVxdWVzdDsKKwlkci0+d1ZhbHVlID0gY3B1X3RvX2xlMTZwKCZ2YWx1ZSk7CisJZHItPndJbmRleCA9IGNwdV90b19sZTE2cCgmaW5kZXgpOworCWRyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTZwKCZzaXplKTsKKworCXJldHVybiBrYXdldGhfaW50ZXJuYWxfY29udHJvbF9tc2coa2F3ZXRoLT5kZXYsCisJCQkJCXBpcGUsCisJCQkJCWRyLAorCQkJCQlkYXRhLAorCQkJCQlzaXplLAorCQkJCQl0aW1lb3V0KTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfcmVhZF9jb25maWd1cmF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQga2F3ZXRoX3JlYWRfY29uZmlndXJhdGlvbihzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoKQoreworCWludCByZXR2YWw7CisKKwlrYXdldGhfZGJnKCJSZWFkaW5nIGthd2V0aCBjb25maWd1cmF0aW9uIik7CisKKwlyZXR2YWwgPSBrYXdldGhfY29udHJvbChrYXdldGgsCisJCQkJdXNiX3JjdmN0cmxwaXBlKGthd2V0aC0+ZGV2LCAwKSwKKwkJCQlLQVdFVEhfQ09NTUFORF9HRVRfRVRIRVJORVRfREVTQywKKwkJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQkwLAorCQkJCTAsCisJCQkJKHZvaWQgKikma2F3ZXRoLT5jb25maWd1cmF0aW9uLAorCQkJCXNpemVvZihrYXdldGgtPmNvbmZpZ3VyYXRpb24pLAorCQkJCUtBV0VUSF9DT05UUk9MX1RJTUVPVVQpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfc2V0X3VyYl9zaXplCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQga2F3ZXRoX3NldF91cmJfc2l6ZShzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoLCBfX3UxNiB1cmJfc2l6ZSkKK3sKKwlpbnQgcmV0dmFsOworCisJa2F3ZXRoX2RiZygiU2V0dGluZyBVUkIgc2l6ZSB0byAlZCIsICh1bnNpZ25lZCl1cmJfc2l6ZSk7CisKKwlyZXR2YWwgPSBrYXdldGhfY29udHJvbChrYXdldGgsCisJCQkJdXNiX3NuZGN0cmxwaXBlKGthd2V0aC0+ZGV2LCAwKSwKKwkJCQlLQVdFVEhfQ09NTUFORF9TRVRfVVJCX1NJWkUsCisJCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCXVyYl9zaXplLAorCQkJCTAsCisJCQkJKHZvaWQgKikma2F3ZXRoLT5zY3JhdGNoLAorCQkJCTAsCisJCQkJS0FXRVRIX0NPTlRST0xfVElNRU9VVCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9zZXRfc29mc193YWl0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQga2F3ZXRoX3NldF9zb2ZzX3dhaXQoc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCwgX191MTYgc29mc193YWl0KQoreworCWludCByZXR2YWw7CisKKwlrYXdldGhfZGJnKCJTZXQgU09GUyB3YWl0IHRvICVkIiwgKHVuc2lnbmVkKXNvZnNfd2FpdCk7CisKKwlyZXR2YWwgPSBrYXdldGhfY29udHJvbChrYXdldGgsCisJCQkJdXNiX3NuZGN0cmxwaXBlKGthd2V0aC0+ZGV2LCAwKSwKKwkJCQlLQVdFVEhfQ09NTUFORF9TRVRfU09GU19XQUlULAorCQkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCQlzb2ZzX3dhaXQsCisJCQkJMCwKKwkJCQkodm9pZCAqKSZrYXdldGgtPnNjcmF0Y2gsCisJCQkJMCwKKwkJCQlLQVdFVEhfQ09OVFJPTF9USU1FT1VUKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX3NldF9yZWNlaXZlX2ZpbHRlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGthd2V0aF9zZXRfcmVjZWl2ZV9maWx0ZXIoc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCwKKwkJCQkgICAgIF9fdTE2IHJlY2VpdmVfZmlsdGVyKQoreworCWludCByZXR2YWw7CisKKwlrYXdldGhfZGJnKCJTZXQgcmVjZWl2ZSBmaWx0ZXIgdG8gJWQiLCAodW5zaWduZWQpcmVjZWl2ZV9maWx0ZXIpOworCisJcmV0dmFsID0ga2F3ZXRoX2NvbnRyb2woa2F3ZXRoLAorCQkJCXVzYl9zbmRjdHJscGlwZShrYXdldGgtPmRldiwgMCksCisJCQkJS0FXRVRIX0NPTU1BTkRfU0VUX1BBQ0tFVF9GSUxURVIsCisJCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCXJlY2VpdmVfZmlsdGVyLAorCQkJCTAsCisJCQkJKHZvaWQgKikma2F3ZXRoLT5zY3JhdGNoLAorCQkJCTAsCisJCQkJS0FXRVRIX0NPTlRST0xfVElNRU9VVCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9kb3dubG9hZF9maXJtd2FyZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGthd2V0aF9kb3dubG9hZF9maXJtd2FyZShzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoLAorCQkJCSAgICBfX3U4ICpkYXRhLAorCQkJCSAgICBfX3UxNiBkYXRhX2xlbiwKKwkJCQkgICAgX191OCBpbnRlcnJ1cHQsCisJCQkJICAgIF9fdTggdHlwZSkKK3sKKwlpZihkYXRhX2xlbiA+IEtBV0VUSF9GSVJNV0FSRV9CVUZfU0laRSkJeworCQlrYXdldGhfZXJyKCJGaXJtd2FyZSB0b28gYmlnOiAlZCIsIGRhdGFfbGVuKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCisJbWVtY3B5KGthd2V0aC0+ZmlybXdhcmVfYnVmLCBkYXRhLCBkYXRhX2xlbik7CisKKwlrYXdldGgtPmZpcm13YXJlX2J1ZlsyXSA9IChkYXRhX2xlbiAmIDB4RkYpIC0gNzsKKwlrYXdldGgtPmZpcm13YXJlX2J1ZlszXSA9IGRhdGFfbGVuID4+IDg7CisJa2F3ZXRoLT5maXJtd2FyZV9idWZbNF0gPSB0eXBlOworCWthd2V0aC0+ZmlybXdhcmVfYnVmWzVdID0gaW50ZXJydXB0OworCisJa2F3ZXRoX2RiZygiSGlnaDogJWksIExvdzolaSIsIGthd2V0aC0+ZmlybXdhcmVfYnVmWzNdLAorCQkgICBrYXdldGgtPmZpcm13YXJlX2J1ZlsyXSk7CisKKwlrYXdldGhfZGJnKCJEb3dubG9hZGluZyBmaXJtd2FyZSBhdCAlcCB0byBrYXdldGggZGV2aWNlIGF0ICVwIiwKKwkgICAgZGF0YSwKKwkgICAga2F3ZXRoKTsKKwlrYXdldGhfZGJnKCJGaXJtd2FyZSBsZW5ndGg6ICVkIiwgZGF0YV9sZW4pOworCisJcmV0dXJuIGthd2V0aF9jb250cm9sKGthd2V0aCwKKwkJICAgICAgICAgICAgICB1c2Jfc25kY3RybHBpcGUoa2F3ZXRoLT5kZXYsIDApLAorCQkJICAgICAgS0FXRVRIX0NPTU1BTkRfU0NBTiwKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIDAsCisJCQkgICAgICAwLAorCQkJICAgICAgKHZvaWQgKilrYXdldGgtPmZpcm13YXJlX2J1ZiwKKwkJCSAgICAgIGRhdGFfbGVuLAorCQkJICAgICAgS0FXRVRIX0NPTlRST0xfVElNRU9VVCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX3RyaWdnZXJfZmlybXdhcmUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBrYXdldGhfdHJpZ2dlcl9maXJtd2FyZShzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoLAorCQkJCSAgIF9fdTggaW50ZXJydXB0KQoreworCWthd2V0aC0+ZmlybXdhcmVfYnVmWzBdID0gMHhCNjsKKwlrYXdldGgtPmZpcm13YXJlX2J1ZlsxXSA9IDB4QzM7CisJa2F3ZXRoLT5maXJtd2FyZV9idWZbMl0gPSAweDAxOworCWthd2V0aC0+ZmlybXdhcmVfYnVmWzNdID0gMHgwMDsKKwlrYXdldGgtPmZpcm13YXJlX2J1Zls0XSA9IDB4MDY7CisJa2F3ZXRoLT5maXJtd2FyZV9idWZbNV0gPSBpbnRlcnJ1cHQ7CisJa2F3ZXRoLT5maXJtd2FyZV9idWZbNl0gPSAweDAwOworCWthd2V0aC0+ZmlybXdhcmVfYnVmWzddID0gMHgwMDsKKworCWthd2V0aF9kYmcoIlRyaWdnZXJpbmcgZmlybXdhcmUiKTsKKworCXJldHVybiBrYXdldGhfY29udHJvbChrYXdldGgsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoa2F3ZXRoLT5kZXYsIDApLAorCQkJICAgICAgS0FXRVRIX0NPTU1BTkRfU0NBTiwKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIDAsCisJCQkgICAgICAwLAorCQkJICAgICAgKHZvaWQgKilrYXdldGgtPmZpcm13YXJlX2J1ZiwKKwkJCSAgICAgIDgsCisJCQkgICAgICBLQVdFVEhfQ09OVFJPTF9USU1FT1VUKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfcmVzZXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBrYXdldGhfcmVzZXQoc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCkKK3sKKwlpbnQgcmVzdWx0OworCisJa2F3ZXRoX2RiZygia2F3ZXRoX3Jlc2V0KCVwKSIsIGthd2V0aCk7CisJcmVzdWx0ID0ga2F3ZXRoX2NvbnRyb2woa2F3ZXRoLAorCQkJCXVzYl9zbmRjdHJscGlwZShrYXdldGgtPmRldiwgMCksCisJCQkJVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTiwKKwkJCQkwLAorCQkJCWthd2V0aC0+ZGV2LT5jb25maWdbMF0uZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlLAorCQkJCTAsCisJCQkJTlVMTCwKKwkJCQkwLAorCQkJCUtBV0VUSF9DT05UUk9MX1RJTUVPVVQpOworCisJdWRlbGF5KDEwMDAwKTsKKworCWthd2V0aF9kYmcoImthd2V0aF9yZXNldCgpIHJldHVybnMgJWQuIixyZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQga2F3ZXRoX3VzYl9yZWNlaXZlKHN0cnVjdCB1cmIgKiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIGludCBrYXdldGhfcmVzdWJtaXRfcnhfdXJiKHN0cnVjdCBrYXdldGhfZGV2aWNlICosIGludCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJaW50X2NhbGxiYWNrCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQga2F3ZXRoX3Jlc3VibWl0X2ludF91cmIoc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCwgaW50IG1mKQoreworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAoa2F3ZXRoLT5pcnFfdXJiLCBtZik7CisJaWYgKHVubGlrZWx5KHN0YXR1cyA9PSAtRU5PTUVNKSkgeworCQlrYXdldGgtPnN1c3BlbmRfbG93bWVtX2N0cmwgPSAxOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmthd2V0aC0+bG93bWVtX3dvcmssIEhaLzQpOworCX0gZWxzZSB7CisJCWthd2V0aC0+c3VzcGVuZF9sb3dtZW1fY3RybCA9IDA7CisJfQorCisJaWYgKHN0YXR1cykKKwkJZXJyICgiY2FuJ3QgcmVzdWJtaXQgaW50ciwgJXMtJXMsIHN0YXR1cyAlZCIsCisJCQkJa2F3ZXRoLT5kZXYtPmJ1cy0+YnVzX25hbWUsCisJCQkJa2F3ZXRoLT5kZXYtPmRldnBhdGgsIHN0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIGludF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoID0gdS0+Y29udGV4dDsKKwlpbnQgYWN0X3N0YXRlOworCisJc3dpdGNoICh1LT5zdGF0dXMpIHsKKwljYXNlIDA6CQkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQlyZXR1cm47CisJLyogLUVQSVBFOiAgc2hvdWxkIGNsZWFyIHRoZSBoYWx0ICovCisJZGVmYXVsdDoJCS8qIGVycm9yICovCisJCWdvdG8gcmVzdWJtaXQ7CisJfQorCisJLyogd2UgY2hlY2sgdGhlIGxpbmsgc3RhdGUgdG8gcmVwb3J0IGNoYW5nZXMgKi8KKwlpZiAoa2F3ZXRoLT5saW5rc3RhdGUgIT0gKGFjdF9zdGF0ZSA9ICgga2F3ZXRoLT5pbnRidWZmZXJbU1RBVEVfT0ZGU0VUXSB8IFNUQVRFX01BU0spID4+IFNUQVRFX1NISUZUKSkgeworCQlpZiAoIWFjdF9zdGF0ZSkKKwkJCW5ldGlmX2NhcnJpZXJfb24oa2F3ZXRoLT5uZXQpOworCQllbHNlCisJCQluZXRpZl9jYXJyaWVyX29mZihrYXdldGgtPm5ldCk7CisKKwkJa2F3ZXRoLT5saW5rc3RhdGUgPSBhY3Rfc3RhdGU7CisJfQorcmVzdWJtaXQ6CisJa2F3ZXRoX3Jlc3VibWl0X2ludF91cmIoa2F3ZXRoLCBHRlBfQVRPTUlDKTsKK30KKworc3RhdGljIHZvaWQga2F3ZXRoX3Jlc3VibWl0X3RsKHZvaWQgKmQpCit7CisJc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCA9IChzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqKWQ7CisKKwlpZiAoa2F3ZXRoLT5zdGF0dXMgfCBLQVdFVEhfU1RBVFVTX0NMT1NJTkcpCisJCXJldHVybjsKKworCWlmIChrYXdldGgtPnN1c3BlbmRfbG93bWVtX3J4KQorCQlrYXdldGhfcmVzdWJtaXRfcnhfdXJiKGthd2V0aCwgR0ZQX05PSU8pOworCisJaWYgKGthd2V0aC0+c3VzcGVuZF9sb3dtZW1fY3RybCkKKwkJa2F3ZXRoX3Jlc3VibWl0X2ludF91cmIoa2F3ZXRoLCBHRlBfTk9JTyk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfcmVzdWJtaXRfcnhfdXJiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQga2F3ZXRoX3Jlc3VibWl0X3J4X3VyYihzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoLAorCQkJCQkJaW50IG1lbV9mbGFncykKK3sKKwlpbnQgcmVzdWx0OworCisJdXNiX2ZpbGxfYnVsa191cmIoa2F3ZXRoLT5yeF91cmIsCisJCSAgICAgIGthd2V0aC0+ZGV2LAorCQkgICAgICB1c2JfcmN2YnVsa3BpcGUoa2F3ZXRoLT5kZXYsIDEpLAorCQkgICAgICBrYXdldGgtPnJ4X2J1ZiwKKwkJICAgICAgS0FXRVRIX0JVRl9TSVpFLAorCQkgICAgICBrYXdldGhfdXNiX3JlY2VpdmUsCisJCSAgICAgIGthd2V0aCk7CisJa2F3ZXRoLT5yeF91cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCWthd2V0aC0+cnhfdXJiLT50cmFuc2Zlcl9kbWEgPSBrYXdldGgtPnJ4YnVmZmVyaGFuZGxlOworCisJaWYoKHJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKGthd2V0aC0+cnhfdXJiLCBtZW1fZmxhZ3MpKSkgeworCQlpZiAocmVzdWx0ID09IC1FTk9NRU0pIHsKKwkJCWthd2V0aC0+c3VzcGVuZF9sb3dtZW1fcnggPSAxOworCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZrYXdldGgtPmxvd21lbV93b3JrLCBIWi80KTsKKwkJfQorCQlrYXdldGhfZXJyKCJyZXN1Ym1pdHRpbmcgcnhfdXJiICVkIGZhaWxlZCIsIHJlc3VsdCk7CisJfSBlbHNlIHsKKwkJa2F3ZXRoLT5zdXNwZW5kX2xvd21lbV9yeCA9IDA7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQga2F3ZXRoX2FzeW5jX3NldF9yeF9tb2RlKHN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGgpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF91c2JfcmVjZWl2ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBrYXdldGhfdXNiX3JlY2VpdmUoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQgPSBrYXdldGgtPm5ldDsKKworCWludCBjb3VudCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwlpbnQgY291bnQyID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCisJX191MTYgcGt0X2xlbiA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopa2F3ZXRoLT5yeF9idWYpOworCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmKHVubGlrZWx5KHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8IHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pKQorCS8qIHdlIGFyZSBraWxsZWQgLSBzZXQgYSBmbGFnIGFuZCB3YWtlIHRoZSBkaXNjb25uZWN0IGhhbmRsZXIgKi8KKwl7CisJCWthd2V0aC0+ZW5kID0gMTsKKwkJd2FrZV91cCgma2F3ZXRoLT50ZXJtX3dhaXQpOworCQlyZXR1cm47CisJfQorCisJaWYgKGthd2V0aC0+c3RhdHVzICYgS0FXRVRIX1NUQVRVU19DTE9TSU5HKQorCQlyZXR1cm47CisKKwlpZih1cmItPnN0YXR1cyAmJiB1cmItPnN0YXR1cyAhPSAtRVJFTU9URUlPICYmIGNvdW50ICE9IDEpIHsKKwkJa2F3ZXRoX2VycigiJXMgUlggc3RhdHVzOiAlZCBjb3VudDogJWQgcGFja2V0X2xlbjogJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0LT5uYW1lLAorCQkJICAgdXJiLT5zdGF0dXMsCisJCQkgICBjb3VudCwKKwkJCSAgIChpbnQpcGt0X2xlbik7CisJCWthd2V0aF9yZXN1Ym1pdF9yeF91cmIoa2F3ZXRoLCBHRlBfQVRPTUlDKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisJfQorCisJaWYoa2F3ZXRoLT5uZXQgJiYgKGNvdW50ID4gMikpIHsKKwkJaWYocGt0X2xlbiA+IChjb3VudCAtIDIpKSB7CisJCQlrYXdldGhfZXJyKCJQYWNrZXQgbGVuZ3RoIHRvbyBsb25nIGZvciBVU0IgZnJhbWUgKHBrdF9sZW46ICV4LCBjb3VudDogJXgpIixwa3RfbGVuLCBjb3VudCk7CisJCQlrYXdldGhfZXJyKCJQYWNrZXQgbGVuICYgMjA0NzogJXgiLCBwa3RfbGVuICYgMjA0Nyk7CisJCQlrYXdldGhfZXJyKCJDb3VudCAyOiAleCIsIGNvdW50Mik7CisJCSAgICAgICAga2F3ZXRoX3Jlc3VibWl0X3J4X3VyYihrYXdldGgsIEdGUF9BVE9NSUMpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworCQlpZighKHNrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbisyKSkpIHsKKwkJICAgICAgICBrYXdldGhfcmVzdWJtaXRfcnhfdXJiKGthd2V0aCwgR0ZQX0FUT01JQyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisJCX0KKworCQlza2JfcmVzZXJ2ZShza2IsIDIpOyAgICAvKiBBbGlnbiBJUCBvbiAxNiBieXRlIGJvdW5kYXJpZXMgKi8KKworCQlza2ItPmRldiA9IG5ldDsKKworCQlldGhfY29weV9hbmRfc3VtKHNrYiwga2F3ZXRoLT5yeF9idWYgKyAyLCBwa3RfbGVuLCAwKTsKKworCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7CisKKwkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmV0KTsKKworCQluZXRpZl9yeChza2IpOworCisJCWthd2V0aC0+c3RhdHMucnhfcGFja2V0cysrOworCQlrYXdldGgtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CisJfQorCisJa2F3ZXRoX3Jlc3VibWl0X3J4X3VyYihrYXdldGgsIEdGUF9BVE9NSUMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9vcGVuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQga2F3ZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlpbnQgcmVzOworCisJa2F3ZXRoX2RiZygiT3BlbmluZyBuZXR3b3JrIGRldmljZS4iKTsKKworCXJlcyA9IGthd2V0aF9yZXN1Ym1pdF9yeF91cmIoa2F3ZXRoLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVzKQorCQlyZXR1cm4gLUVJTzsKKworCXVzYl9maWxsX2ludF91cmIoCisJCWthd2V0aC0+aXJxX3VyYiwKKwkJa2F3ZXRoLT5kZXYsCisJCXVzYl9yY3ZpbnRwaXBlKGthd2V0aC0+ZGV2LCAzKSwKKwkJa2F3ZXRoLT5pbnRidWZmZXIsCisJCUlOVEJVRkZFUlNJWkUsCisJCWludF9jYWxsYmFjaywKKwkJa2F3ZXRoLAorCQkyNTApOyAvKiBvdmVycmlkaW5nIHRoZSBkZXNjcmlwdG9yICovCisJa2F3ZXRoLT5pcnFfdXJiLT50cmFuc2Zlcl9kbWEgPSBrYXdldGgtPmludGJ1ZmZlcmhhbmRsZTsKKwlrYXdldGgtPmlycV91cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCisJcmVzID0gdXNiX3N1Ym1pdF91cmIoa2F3ZXRoLT5pcnFfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVzKSB7CisJCXVzYl9raWxsX3VyYihrYXdldGgtPnJ4X3VyYik7CisJCXJldHVybiAtRUlPOworCX0KKworCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldCk7CisKKwlrYXdldGhfYXN5bmNfc2V0X3J4X21vZGUoa2F3ZXRoKTsKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfY2xvc2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBrYXdldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKKworCWthd2V0aC0+c3RhdHVzIHw9IEtBV0VUSF9TVEFUVVNfQ0xPU0lORzsKKworCXVzYl9raWxsX3VyYihrYXdldGgtPmlycV91cmIpOworCXVzYl9raWxsX3VyYihrYXdldGgtPnJ4X3VyYik7CisKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCisJLyogYSBzY2hlZHVsZWQgd29yayBtYXkgaGF2ZSByZXN1Ym1pdHRlZCwKKwkgICB3ZSBoaXQgdGhlbSBhZ2FpbiAqLworCXVzYl9raWxsX3VyYihrYXdldGgtPmlycV91cmIpOworCXVzYl9raWxsX3VyYihrYXdldGgtPnJ4X3VyYik7CisKKwlrYXdldGgtPnN0YXR1cyAmPSB+S0FXRVRIX1NUQVRVU19DTE9TSU5HOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGthd2V0aF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCisJc3RybGNweShpbmZvLT5kcml2ZXIsIGRyaXZlcl9uYW1lLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0geworCS5nZXRfZHJ2aW5mbyA9IGthd2V0aF9nZXRfZHJ2aW5mbworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfdXNiX3RyYW5zbWl0X2NvbXBsZXRlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGthd2V0aF91c2JfdHJhbnNtaXRfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBza19idWZmICpza2IgPSBrYXdldGgtPnR4X3NrYjsKKworCWlmICh1bmxpa2VseSh1cmItPnN0YXR1cyAhPSAwKSkKKwkJaWYgKHVyYi0+c3RhdHVzICE9IC1FTk9FTlQpCisJCQlrYXdldGhfZGJnKCIlczogVFggc3RhdHVzICVkLiIsIGthd2V0aC0+bmV0LT5uYW1lLCB1cmItPnN0YXR1cyk7CisKKwluZXRpZl93YWtlX3F1ZXVlKGthd2V0aC0+bmV0KTsKKwlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9zdGFydF94bWl0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQga2F3ZXRoX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlfX2xlMTYgKnByaXZhdGVfaGVhZGVyOworCisJaW50IHJlczsKKworCXNwaW5fbG9jaygma2F3ZXRoLT5kZXZpY2VfbG9jayk7CisKKwlpZiAoa2F3ZXRoLT5yZW1vdmVkKSB7CisJLyogb3VyIGRldmljZSBpcyB1bmRlcmdvaW5nIGRpc2Nvbm5lY3Rpb24gLSB3ZSBiYWlsIG91dCAqLworCQlzcGluX3VubG9jaygma2F3ZXRoLT5kZXZpY2VfbG9jayk7CisJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCXJldHVybiAwOworCX0KKworCWthd2V0aF9hc3luY19zZXRfcnhfbW9kZShrYXdldGgpOworCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKKworCS8qIFdlIG5vdyBkZWNpZGUgd2hldGhlciB3ZSBjYW4gcHV0IG91ciBzcGVjaWFsIGhlYWRlciBpbnRvIHRoZSBza19idWZmICovCisJaWYgKHNrYl9jbG9uZWQoc2tiKSB8fCBza2JfaGVhZHJvb20oc2tiKSA8IDIpIHsKKwkJLyogbm8gc3VjaCBsdWNrIC0gd2UgbWFrZSBvdXIgb3duICovCisJCXN0cnVjdCBza19idWZmICpjb3BpZWRfc2tiOworCQljb3BpZWRfc2tiID0gc2tiX2NvcHlfZXhwYW5kKHNrYiwgMiwgMCwgR0ZQX0FUT01JQyk7CisJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCXNrYiA9IGNvcGllZF9za2I7CisJCWlmICghY29waWVkX3NrYikgeworCQkJa2F3ZXRoLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldCk7CisJCQlzcGluX3VubG9jaygma2F3ZXRoLT5kZXZpY2VfbG9jayk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXByaXZhdGVfaGVhZGVyID0gKF9fbGUxNiAqKV9fc2tiX3B1c2goc2tiLCAyKTsKKwkqcHJpdmF0ZV9oZWFkZXIgPSBjcHVfdG9fbGUxNihza2ItPmxlbi0yKTsKKwlrYXdldGgtPnR4X3NrYiA9IHNrYjsKKworCXVzYl9maWxsX2J1bGtfdXJiKGthd2V0aC0+dHhfdXJiLAorCQkgICAgICBrYXdldGgtPmRldiwKKwkJICAgICAgdXNiX3NuZGJ1bGtwaXBlKGthd2V0aC0+ZGV2LCAyKSwKKwkJICAgICAgcHJpdmF0ZV9oZWFkZXIsCisJCSAgICAgIHNrYi0+bGVuLAorCQkgICAgICBrYXdldGhfdXNiX3RyYW5zbWl0X2NvbXBsZXRlLAorCQkgICAgICBrYXdldGgpOworCWthd2V0aC0+ZW5kID0gMDsKKwlrYXdldGgtPnR4X3VyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0FTWU5DX1VOTElOSzsKKworCWlmKChyZXMgPSB1c2Jfc3VibWl0X3VyYihrYXdldGgtPnR4X3VyYiwgR0ZQX0FUT01JQykpKQorCXsKKwkJa2F3ZXRoX3dhcm4oImthd2V0aCBmYWlsZWQgdHhfdXJiICVkIiwgcmVzKTsKKwkJa2F3ZXRoLT5zdGF0cy50eF9lcnJvcnMrKzsKKworCQluZXRpZl9zdGFydF9xdWV1ZShuZXQpOworCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCX0KKwllbHNlCisJeworCQlrYXdldGgtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJa2F3ZXRoLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJbmV0LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJfQorCisJc3Bpbl91bmxvY2soJmthd2V0aC0+ZGV2aWNlX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX3NldF9yeF9tb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGthd2V0aF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGggPSBuZXRkZXZfcHJpdihuZXQpOworCisJX191MTYgcGFja2V0X2ZpbHRlcl9iaXRtYXAgPSBLQVdFVEhfUEFDS0VUX0ZJTFRFUl9ESVJFQ1RFRCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0FXRVRIX1BBQ0tFVF9GSUxURVJfQlJPQURDQVNUIHwKKwkJICAgICAgICAgICAgICAgICAgICAgS0FXRVRIX1BBQ0tFVF9GSUxURVJfTVVMVElDQVNUOworCisJa2F3ZXRoX2RiZygiU2V0dGluZyBSeCBtb2RlIHRvICVkIiwgcGFja2V0X2ZpbHRlcl9iaXRtYXApOworCisJbmV0aWZfc3RvcF9xdWV1ZShuZXQpOworCisJaWYgKG5ldC0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQlwYWNrZXRfZmlsdGVyX2JpdG1hcCB8PSBLQVdFVEhfUEFDS0VUX0ZJTFRFUl9QUk9NSVNDVU9VUzsKKwl9CisJZWxzZSBpZiAoKG5ldC0+bWNfY291bnQpIHx8IChuZXQtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCQlwYWNrZXRfZmlsdGVyX2JpdG1hcCB8PSBLQVdFVEhfUEFDS0VUX0ZJTFRFUl9BTExfTVVMVElDQVNUOworCX0KKworCWthd2V0aC0+cGFja2V0X2ZpbHRlcl9iaXRtYXAgPSBwYWNrZXRfZmlsdGVyX2JpdG1hcDsKKwluZXRpZl93YWtlX3F1ZXVlKG5ldCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX2FzeW5jX3NldF9yeF9tb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGthd2V0aF9hc3luY19zZXRfcnhfbW9kZShzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoKQoreworCV9fdTE2IHBhY2tldF9maWx0ZXJfYml0bWFwID0ga2F3ZXRoLT5wYWNrZXRfZmlsdGVyX2JpdG1hcDsKKwlrYXdldGgtPnBhY2tldF9maWx0ZXJfYml0bWFwID0gMDsKKwlpZiAocGFja2V0X2ZpbHRlcl9iaXRtYXAgPT0gMCkKKwkJcmV0dXJuOworCisJeworCWludCByZXN1bHQ7CisJcmVzdWx0ID0ga2F3ZXRoX2NvbnRyb2woa2F3ZXRoLAorCQkJCXVzYl9zbmRjdHJscGlwZShrYXdldGgtPmRldiwgMCksCisJCQkJS0FXRVRIX0NPTU1BTkRfU0VUX1BBQ0tFVF9GSUxURVIsCisJCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJCXBhY2tldF9maWx0ZXJfYml0bWFwLAorCQkJCTAsCisJCQkJKHZvaWQgKikma2F3ZXRoLT5zY3JhdGNoLAorCQkJCTAsCisJCQkJS0FXRVRIX0NPTlRST0xfVElNRU9VVCk7CisKKwlpZihyZXN1bHQgPCAwKSB7CisJCWthd2V0aF9lcnIoIkZhaWxlZCB0byBzZXQgUnggbW9kZTogJWQiLCByZXN1bHQpOworCX0KKwllbHNlIHsKKwkJa2F3ZXRoX2RiZygiU2V0IFJ4IG1vZGUgdG8gJWQiLCBwYWNrZXRfZmlsdGVyX2JpdG1hcCk7CisJfQorCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfbmV0ZGV2X3N0YXRzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqa2F3ZXRoX25ldGRldl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGggPSBuZXRkZXZfcHJpdihkZXYpOworCXJldHVybiAma2F3ZXRoLT5zdGF0czsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfdHhfdGltZW91dAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBrYXdldGhfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGggPSBuZXRkZXZfcHJpdihuZXQpOworCisJa2F3ZXRoX3dhcm4oIiVzOiBUeCB0aW1lZCBvdXQuIFJlc2V0dGluZy4iLCBuZXQtPm5hbWUpOworCWthd2V0aC0+c3RhdHMudHhfZXJyb3JzKys7CisJbmV0LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisKKwl1c2JfdW5saW5rX3VyYihrYXdldGgtPnR4X3VyYik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX3Byb2JlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQga2F3ZXRoX3Byb2JlKAorCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkICAgICAgLyogZnJvbSBpZF90YWJsZSAqLworCSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3Qga2F3ZXRoX2RldmljZSAqa2F3ZXRoOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJY29uc3QgZXRoX2FkZHJfdCBiY2FzdF9hZGRyID0geyAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGIH07CisJaW50IHJlc3VsdCA9IDA7CisKKwlrYXdldGhfZGJnKCJLYXdhc2FraSBEZXZpY2UgUHJvYmUgKERldmljZSBudW1iZXI6JWQpOiAweCU0LjR4OjB4JTQuNHg6MHglNC40eCIsCisJCSBkZXYtPmRldm51bSwKKwkJIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSwKKwkJIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKTsKKworCWthd2V0aF9kYmcoIkRldmljZSBhdCAlcCIsIGRldik7CisKKwlrYXdldGhfZGJnKCJEZXNjcmlwdG9yIGxlbmd0aDogJXggdHlwZTogJXgiLAorCQkgKGludClkZXYtPmRlc2NyaXB0b3IuYkxlbmd0aCwKKwkJIChpbnQpZGV2LT5kZXNjcmlwdG9yLmJEZXNjcmlwdG9yVHlwZSk7CisKKwluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKmthd2V0aCkpOworCWlmICghbmV0ZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWthd2V0aCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJa2F3ZXRoLT5kZXYgPSBkZXY7CisJa2F3ZXRoLT5uZXQgPSBuZXRkZXY7CisKKwlzcGluX2xvY2tfaW5pdCgma2F3ZXRoLT5kZXZpY2VfbG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgma2F3ZXRoLT50ZXJtX3dhaXQpOworCisJa2F3ZXRoX2RiZygiUmVzZXR0aW5nLiIpOworCisJa2F3ZXRoX3Jlc2V0KGthd2V0aCk7CisKKwkvKgorCSAqIElmIGhpZ2ggYnl0ZSBvZiBiY2REZXZpY2UgaXMgbm9uemVybywgZmlybXdhcmUgaXMgYWxyZWFkeQorCSAqIGRvd25sb2FkZWQuIERvbid0IHRyeSB0byBkbyBpdCBhZ2Fpbiwgb3Igd2UnbGwgaGFuZyB0aGUgZGV2aWNlLgorCSAqLworCisJaWYgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpID4+IDgpIHsKKwkJa2F3ZXRoX2luZm8oIkZpcm13YXJlIHByZXNlbnQgaW4gZGV2aWNlLiIpOworCX0gZWxzZSB7CisJCS8qIERvd25sb2FkIHRoZSBmaXJtd2FyZSAqLworCQlrYXdldGhfaW5mbygiRG93bmxvYWRpbmcgZmlybXdhcmUuLi4iKTsKKwkJa2F3ZXRoLT5maXJtd2FyZV9idWYgPSAoX191OCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKChyZXN1bHQgPSBrYXdldGhfZG93bmxvYWRfZmlybXdhcmUoa2F3ZXRoLAorCQkJCQkJICAgICAga2F3ZXRoX25ld19jb2RlLAorCQkJCQkJICAgICAgbGVuX2thd2V0aF9uZXdfY29kZSwKKwkJCQkJCSAgICAgIDEwMCwKKwkJCQkJCSAgICAgIDIpKSA8IDApIHsKKwkJCWthd2V0aF9lcnIoIkVycm9yIGRvd25sb2FkaW5nIGZpcm13YXJlICglZCkiLCByZXN1bHQpOworCQkJZ290byBlcnJfZnc7CisJCX0KKworCQlpZiAoKHJlc3VsdCA9IGthd2V0aF9kb3dubG9hZF9maXJtd2FyZShrYXdldGgsCisJCQkJCQkgICAgICBrYXdldGhfbmV3X2NvZGVfZml4LAorCQkJCQkJICAgICAgbGVuX2thd2V0aF9uZXdfY29kZV9maXgsCisJCQkJCQkgICAgICAxMDAsCisJCQkJCQkgICAgICAzKSkgPCAwKSB7CisJCQlrYXdldGhfZXJyKCJFcnJvciBkb3dubG9hZGluZyBmaXJtd2FyZSBmaXggKCVkKSIsIHJlc3VsdCk7CisJCQlnb3RvIGVycl9mdzsKKwkJfQorCisJCWlmICgocmVzdWx0ID0ga2F3ZXRoX2Rvd25sb2FkX2Zpcm13YXJlKGthd2V0aCwKKwkJCQkJCSAgICAgIGthd2V0aF90cmlnZ2VyX2NvZGUsCisJCQkJCQkgICAgICBsZW5fa2F3ZXRoX3RyaWdnZXJfY29kZSwKKwkJCQkJCSAgICAgIDEyNiwKKwkJCQkJCSAgICAgIDIpKSA8IDApIHsKKwkJCWthd2V0aF9lcnIoIkVycm9yIGRvd25sb2FkaW5nIHRyaWdnZXIgY29kZSAoJWQpIiwgcmVzdWx0KTsKKwkJCWdvdG8gZXJyX2Z3OworCisJCX0KKworCQlpZiAoKHJlc3VsdCA9IGthd2V0aF9kb3dubG9hZF9maXJtd2FyZShrYXdldGgsCisJCQkJCQkgICAgICBrYXdldGhfdHJpZ2dlcl9jb2RlX2ZpeCwKKwkJCQkJCSAgICAgIGxlbl9rYXdldGhfdHJpZ2dlcl9jb2RlX2ZpeCwKKwkJCQkJCSAgICAgIDEyNiwKKwkJCQkJCSAgICAgIDMpKSA8IDApIHsKKwkJCWthd2V0aF9lcnIoIkVycm9yIGRvd25sb2FkaW5nIHRyaWdnZXIgY29kZSBmaXggKCVkKSIsIHJlc3VsdCk7CisJCQlnb3RvIGVycl9mdzsKKwkJfQorCisKKwkJaWYgKChyZXN1bHQgPSBrYXdldGhfdHJpZ2dlcl9maXJtd2FyZShrYXdldGgsIDEyNikpIDwgMCkgeworCQkJa2F3ZXRoX2VycigiRXJyb3IgdHJpZ2dlcmluZyBmaXJtd2FyZSAoJWQpIiwgcmVzdWx0KTsKKwkJCWdvdG8gZXJyX2Z3OworCQl9CisKKwkJLyogRGV2aWNlIHdpbGwgbm93IGRpc2FwcGVhciBmb3IgYSBtb21lbnQuLi4gICovCisJCWthd2V0aF9pbmZvKCJGaXJtd2FyZSBsb2FkZWQuICBJJ2xsIGJlIGJhY2suLi4iKTsKK2Vycl9mdzoKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWthd2V0aC0+ZmlybXdhcmVfYnVmKTsKKwkJZnJlZV9uZXRkZXYobmV0ZGV2KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmVzdWx0ID0ga2F3ZXRoX3JlYWRfY29uZmlndXJhdGlvbihrYXdldGgpOworCisJaWYocmVzdWx0IDwgMCkgeworCQlrYXdldGhfZXJyKCJFcnJvciByZWFkaW5nIGNvbmZpZ3VyYXRpb24gKCVkKSwgbm8gbmV0IGRldmljZSBjcmVhdGVkIiwgcmVzdWx0KTsKKwkJZ290byBlcnJfZnJlZV9uZXRkZXY7CisJfQorCisJa2F3ZXRoX2luZm8oIlN0YXRpc3RpY3MgY29sbGVjdGlvbjogJXgiLCBrYXdldGgtPmNvbmZpZ3VyYXRpb24uc3RhdGlzdGljc19tYXNrKTsKKwlrYXdldGhfaW5mbygiTXVsdGljYXN0IGZpbHRlciBsaW1pdDogJXgiLCBrYXdldGgtPmNvbmZpZ3VyYXRpb24ubWF4X211bHRpY2FzdF9maWx0ZXJzICYgKCgxIDw8IDE1KSAtIDEpKTsKKwlrYXdldGhfaW5mbygiTVRVOiAlZCIsIGxlMTZfdG9fY3B1KGthd2V0aC0+Y29uZmlndXJhdGlvbi5zZWdtZW50X3NpemUpKTsKKwlrYXdldGhfaW5mbygiUmVhZCBNQUMgYWRkcmVzcyAlMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeCIsCisJCSAoaW50KWthd2V0aC0+Y29uZmlndXJhdGlvbi5od19hZGRyWzBdLAorCQkgKGludClrYXdldGgtPmNvbmZpZ3VyYXRpb24uaHdfYWRkclsxXSwKKwkJIChpbnQpa2F3ZXRoLT5jb25maWd1cmF0aW9uLmh3X2FkZHJbMl0sCisJCSAoaW50KWthd2V0aC0+Y29uZmlndXJhdGlvbi5od19hZGRyWzNdLAorCQkgKGludClrYXdldGgtPmNvbmZpZ3VyYXRpb24uaHdfYWRkcls0XSwKKwkJIChpbnQpa2F3ZXRoLT5jb25maWd1cmF0aW9uLmh3X2FkZHJbNV0pOworCisJaWYoIW1lbWNtcCgma2F3ZXRoLT5jb25maWd1cmF0aW9uLmh3X2FkZHIsCisgICAgICAgICAgICAgICAgICAgJmJjYXN0X2FkZHIsCisJCSAgIHNpemVvZihiY2FzdF9hZGRyKSkpIHsKKwkJa2F3ZXRoX2VycigiRmlybXdhcmUgbm90IGZ1bmN0aW9uaW5nIHByb3Blcmx5LCBubyBuZXQgZGV2aWNlIGNyZWF0ZWQiKTsKKwkJZ290byBlcnJfZnJlZV9uZXRkZXY7CisJfQorCisJaWYoa2F3ZXRoX3NldF91cmJfc2l6ZShrYXdldGgsIEtBV0VUSF9CVUZfU0laRSkgPCAwKSB7CisJCWthd2V0aF9kYmcoIkVycm9yIHNldHRpbmcgVVJCIHNpemUiKTsKKwkJZ290byBlcnJfZnJlZV9uZXRkZXY7CisJfQorCisJaWYoa2F3ZXRoX3NldF9zb2ZzX3dhaXQoa2F3ZXRoLCBLQVdFVEhfU09GU19UT19XQUlUKSA8IDApIHsKKwkJa2F3ZXRoX2VycigiRXJyb3Igc2V0dGluZyBTT0ZTIHdhaXQiKTsKKwkJZ290byBlcnJfZnJlZV9uZXRkZXY7CisJfQorCisJcmVzdWx0ID0ga2F3ZXRoX3NldF9yZWNlaXZlX2ZpbHRlcihrYXdldGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0FXRVRIX1BBQ0tFVF9GSUxURVJfRElSRUNURUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtBV0VUSF9QQUNLRVRfRklMVEVSX0JST0FEQ0FTVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0FXRVRIX1BBQ0tFVF9GSUxURVJfTVVMVElDQVNUKTsKKworCWlmKHJlc3VsdCA8IDApIHsKKwkJa2F3ZXRoX2VycigiRXJyb3Igc2V0dGluZyByZWNlaXZlIGZpbHRlciIpOworCQlnb3RvIGVycl9mcmVlX25ldGRldjsKKwl9CisKKwlrYXdldGhfZGJnKCJJbml0aWFsaXppbmcgbmV0IGRldmljZS4iKTsKKworCWthd2V0aC0+dHhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWthd2V0aC0+dHhfdXJiKQorCQlnb3RvIGVycl9mcmVlX25ldGRldjsKKwlrYXdldGgtPnJ4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFrYXdldGgtPnJ4X3VyYikKKwkJZ290byBlcnJfb25seV90eDsKKwlrYXdldGgtPmlycV91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICgha2F3ZXRoLT5pcnFfdXJiKQorCQlnb3RvIGVycl90eF9hbmRfcng7CisKKwlrYXdldGgtPmludGJ1ZmZlciA9IHVzYl9idWZmZXJfYWxsb2MoCWthd2V0aC0+ZGV2LAorCQkJCQkJSU5UQlVGRkVSU0laRSwKKwkJCQkJCUdGUF9LRVJORUwsCisJCQkJCQkma2F3ZXRoLT5pbnRidWZmZXJoYW5kbGUpOworCWlmICgha2F3ZXRoLT5pbnRidWZmZXIpCisJCWdvdG8gZXJyX3R4X2FuZF9yeF9hbmRfaXJxOworCWthd2V0aC0+cnhfYnVmID0gdXNiX2J1ZmZlcl9hbGxvYygJa2F3ZXRoLT5kZXYsCisJCQkJCQlLQVdFVEhfQlVGX1NJWkUsCisJCQkJCQlHRlBfS0VSTkVMLAorCQkJCQkJJmthd2V0aC0+cnhidWZmZXJoYW5kbGUpOworCWlmICgha2F3ZXRoLT5yeF9idWYpCisJCWdvdG8gZXJyX2FsbF9idXRfcnhidWY7CisKKwltZW1jcHkobmV0ZGV2LT5icm9hZGNhc3QsICZiY2FzdF9hZGRyLCBzaXplb2YoYmNhc3RfYWRkcikpOworCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCAma2F3ZXRoLT5jb25maWd1cmF0aW9uLmh3X2FkZHIsCisgICAgICAgICAgICAgICBzaXplb2Yoa2F3ZXRoLT5jb25maWd1cmF0aW9uLmh3X2FkZHIpKTsKKworCW5ldGRldi0+b3BlbiA9IGthd2V0aF9vcGVuOworCW5ldGRldi0+c3RvcCA9IGthd2V0aF9jbG9zZTsKKworCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBLQVdFVEhfVFhfVElNRU9VVDsKKwluZXRkZXYtPnR4X3RpbWVvdXQgPSBrYXdldGhfdHhfdGltZW91dDsKKworCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0ga2F3ZXRoX3N0YXJ0X3htaXQ7CisJbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBrYXdldGhfc2V0X3J4X21vZGU7CisJbmV0ZGV2LT5nZXRfc3RhdHMgPSBrYXdldGhfbmV0ZGV2X3N0YXRzOworCW5ldGRldi0+bXR1ID0gbGUxNl90b19jcHUoa2F3ZXRoLT5jb25maWd1cmF0aW9uLnNlZ21lbnRfc2l6ZSk7CisJU0VUX0VUSFRPT0xfT1BTKG5ldGRldiwgJm9wcyk7CisKKwkvKiBrYXdldGggaXMgemVyb2VkIGFzIHBhcnQgb2YgYWxsb2NfbmV0ZGV2ICovCisKKwlJTklUX1dPUksoJmthd2V0aC0+bG93bWVtX3dvcmssIGthd2V0aF9yZXN1Ym1pdF90bCwgKHZvaWQgKilrYXdldGgpOworCisJU0VUX01PRFVMRV9PV05FUihuZXRkZXYpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBrYXdldGgpOworCisjaWYgMAorLy8gZG1hX3N1cHBvcnRlZCgpIGlzIGRlZXBseSBicm9rZW4gb24gYWxtb3N0IGFsbCBhcmNoaXRlY3R1cmVzCisJaWYgKGRtYV9zdXBwb3J0ZWQgKCZpbnRmLT5kZXYsIDB4ZmZmZmZmZmZmZmZmZmZmZlVMTCkpCisJCWthd2V0aC0+bmV0LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CisjZW5kaWYKKworCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJmludGYtPmRldik7CisJaWYgKHJlZ2lzdGVyX25ldGRldihuZXRkZXYpICE9IDApIHsKKwkJa2F3ZXRoX2VycigiRXJyb3IgcmVnaXN0ZXJpbmcgbmV0ZGV2LiIpOworCQlnb3RvIGVycl9pbnRmZGF0YTsKKwl9CisKKwlrYXdldGhfaW5mbygia2F3ZXRoIGludGVyZmFjZSBjcmVhdGVkIGF0ICVzIiwga2F3ZXRoLT5uZXQtPm5hbWUpOworCisJa2F3ZXRoX2RiZygiS2F3ZXRoIHByb2JlIHJldHVybmluZy4iKTsKKworCXJldHVybiAwOworCitlcnJfaW50ZmRhdGE6CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwl1c2JfYnVmZmVyX2ZyZWUoa2F3ZXRoLT5kZXYsIEtBV0VUSF9CVUZfU0laRSwgKHZvaWQgKilrYXdldGgtPnJ4X2J1Ziwga2F3ZXRoLT5yeGJ1ZmZlcmhhbmRsZSk7CitlcnJfYWxsX2J1dF9yeGJ1ZjoKKwl1c2JfYnVmZmVyX2ZyZWUoa2F3ZXRoLT5kZXYsIElOVEJVRkZFUlNJWkUsICh2b2lkICopa2F3ZXRoLT5pbnRidWZmZXIsIGthd2V0aC0+aW50YnVmZmVyaGFuZGxlKTsKK2Vycl90eF9hbmRfcnhfYW5kX2lycToKKwl1c2JfZnJlZV91cmIoa2F3ZXRoLT5pcnFfdXJiKTsKK2Vycl90eF9hbmRfcng6CisJdXNiX2ZyZWVfdXJiKGthd2V0aC0+cnhfdXJiKTsKK2Vycl9vbmx5X3R4OgorCXVzYl9mcmVlX3VyYihrYXdldGgtPnR4X3VyYik7CitlcnJfZnJlZV9uZXRkZXY6CisJZnJlZV9uZXRkZXYobmV0ZGV2KTsKKworCXJldHVybiAtRUlPOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9kaXNjb25uZWN0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGthd2V0aF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBrYXdldGhfZGV2aWNlICprYXdldGggPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisKKwlrYXdldGhfaW5mbygiVW5yZWdpc3RlcmluZyIpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwlpZiAoIWthd2V0aCkgeworCQlrYXdldGhfd2FybigidW5yZWdpc3RlcmluZyBub24tZXhpc3RhbnQgZGV2aWNlIik7CisJCXJldHVybjsKKwl9CisJbmV0ZGV2ID0ga2F3ZXRoLT5uZXQ7CisJa2F3ZXRoLT5yZW1vdmVkID0gMTsKKwl1c2Jfa2lsbF91cmIoa2F3ZXRoLT5pcnFfdXJiKTsKKwl1c2Jfa2lsbF91cmIoa2F3ZXRoLT5yeF91cmIpOworCXVzYl9raWxsX3VyYihrYXdldGgtPnR4X3VyYik7CisKKwlrYXdldGhfZGJnKCJVbnJlZ2lzdGVyaW5nIG5ldCBkZXZpY2UiKTsKKwl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCisJdXNiX2ZyZWVfdXJiKGthd2V0aC0+cnhfdXJiKTsKKwl1c2JfZnJlZV91cmIoa2F3ZXRoLT50eF91cmIpOworCXVzYl9mcmVlX3VyYihrYXdldGgtPmlycV91cmIpOworCisJdXNiX2J1ZmZlcl9mcmVlKGthd2V0aC0+ZGV2LCBLQVdFVEhfQlVGX1NJWkUsICh2b2lkICopa2F3ZXRoLT5yeF9idWYsIGthd2V0aC0+cnhidWZmZXJoYW5kbGUpOworCXVzYl9idWZmZXJfZnJlZShrYXdldGgtPmRldiwgSU5UQlVGRkVSU0laRSwgKHZvaWQgKilrYXdldGgtPmludGJ1ZmZlciwga2F3ZXRoLT5pbnRidWZmZXJoYW5kbGUpOworCisJZnJlZV9uZXRkZXYobmV0ZGV2KTsKK30KKworCisvLyBGSVhNRSB0aGlzIGNvbXBsZXRpb24gc3R1ZmYgaXMgYSBtb2RpZmllZCBjbG9uZSBvZgorLy8gYW4gT0xEIHZlcnNpb24gb2Ygc29tZSBzdHVmZiBpbiB1c2IuYyAuLi4KK3N0cnVjdCB1c2JfYXBpX2RhdGEgeworCXdhaXRfcXVldWVfaGVhZF90IHdxaDsKKwlpbnQgZG9uZTsKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIGNvbXBsZXRpb24gaGFuZGxlciBmb3IgY29tcGF0aWJpbGl0eSB3cmFwcGVycyAoc3luYyBjb250cm9sL2J1bGspICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCB1c2JfYXBpX2Jsb2NraW5nX2NvbXBsZXRpb24oc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyAgICAgICAgc3RydWN0IHVzYl9hcGlfZGF0YSAqYXdkID0gKHN0cnVjdCB1c2JfYXBpX2RhdGEgKil1cmItPmNvbnRleHQ7CisKKwlhd2QtPmRvbmU9MTsKKwl3YWtlX3VwKCZhd2QtPndxaCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIENPTVBBVElCSUxJVFkgU1RVRkYgICAgICAgICAgICAgICAgICAgICAgICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8vIFN0YXJ0cyB1cmIgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uIG9yIHRpbWVvdXQKK3N0YXRpYyBpbnQgdXNiX3N0YXJ0X3dhaXRfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IHRpbWVvdXQsIGludCogYWN0dWFsX2xlbmd0aCkKK3sKKwlzdHJ1Y3QgdXNiX2FwaV9kYXRhIGF3ZDsKKyAgICAgICAgaW50IHN0YXR1czsKKworICAgICAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZhd2Qud3FoKTsKKyAgICAgICAgYXdkLmRvbmUgPSAwOworCisgICAgICAgIHVyYi0+Y29udGV4dCA9ICZhd2Q7CisgICAgICAgIHN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX05PSU8pOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmcKKyAgICAgICAgICAgICAgICB1c2JfZnJlZV91cmIodXJiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisKKwlpZiAoIXdhaXRfZXZlbnRfdGltZW91dChhd2Qud3FoLCBhd2QuZG9uZSwgdGltZW91dCkpIHsKKyAgICAgICAgICAgICAgICAvLyB0aW1lb3V0CisgICAgICAgICAgICAgICAga2F3ZXRoX3dhcm4oInVzYl9jb250cm9sL2J1bGtfbXNnOiB0aW1lb3V0Iik7CisgICAgICAgICAgICAgICAgdXNiX2tpbGxfdXJiKHVyYik7ICAvLyByZW1vdmUgdXJiIHNhZmVseQorICAgICAgICAgICAgICAgIHN0YXR1cyA9IC1FVElNRURPVVQ7CisgICAgICAgIH0KKwllbHNlIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSB1cmItPnN0YXR1czsKKwl9CisKKyAgICAgICAgaWYgKGFjdHVhbF9sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAqYWN0dWFsX2xlbmd0aCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwl9CisKKyAgICAgICAgdXNiX2ZyZWVfdXJiKHVyYik7CisgICAgICAgIHJldHVybiBzdGF0dXM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvLyByZXR1cm5zIHN0YXR1cyAobmVnYXRpdmUpIG9yIGxlbmd0aCAocG9zaXRpdmUpCitzdGF0aWMgaW50IGthd2V0aF9pbnRlcm5hbF9jb250cm9sX21zZyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHBpcGUsCisJCQkJICAgICAgIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNtZCwgdm9pZCAqZGF0YSwKKwkJCQkgICAgICAgaW50IGxlbiwgaW50IHRpbWVvdXQpCit7CisgICAgICAgIHN0cnVjdCB1cmIgKnVyYjsKKyAgICAgICAgaW50IHJldHY7CisgICAgICAgIGludCBsZW5ndGg7CisKKyAgICAgICAgdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfTk9JTyk7CisgICAgICAgIGlmICghdXJiKQorICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworCisgICAgICAgIHVzYl9maWxsX2NvbnRyb2xfdXJiKHVyYiwgdXNiX2RldiwgcGlwZSwgKHVuc2lnbmVkIGNoYXIqKWNtZCwgZGF0YSwKKwkJCSBsZW4sIHVzYl9hcGlfYmxvY2tpbmdfY29tcGxldGlvbiwgTlVMTCk7CisKKyAgICAgICAgcmV0diA9IHVzYl9zdGFydF93YWl0X3VyYih1cmIsIHRpbWVvdXQsICZsZW5ndGgpOworICAgICAgICBpZiAocmV0diA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0djsKKwl9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBsZW5ndGg7CisJfQorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAga2F3ZXRoX2luaXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBfX2luaXQga2F3ZXRoX2luaXQodm9pZCkKK3sKKwlrYXdldGhfZGJnKCJEcml2ZXIgbG9hZGluZyIpOworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmthd2V0aF9kcml2ZXIpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgIGthd2V0aF9leGl0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBrYXdldGhfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZrYXdldGhfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoa2F3ZXRoX2luaXQpOworbW9kdWxlX2V4aXQoa2F3ZXRoX2V4aXQpOworCisKKworCisKKworCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L2thd2V0aGZ3LmggYi9kcml2ZXJzL3VzYi9uZXQva2F3ZXRoZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjg1ZmNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbmV0L2thd2V0aGZ3LmgKQEAgLTAsMCArMSw1NTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBOT1RFOiBCNi9DMyBpcyBkYXRhIGhlYWRlciBzaWduYXR1cmUgICAqLworLyogICAgICAgMHhBQS8weEJCIGlzIGRhdGEgbGVuZ3RoID0gdG90YWwgKi8KKy8qICAgICAgIGJ5dGVzIC0gNywgMHhDQyBpcyB0eXBlLCAweEREIGlzICovCisvKiAgICAgICBpbnRlcnJ1cHQgdG8gdXNlLiAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfdHJpZ2dlcl9jb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBfX3U4IGthd2V0aF90cmlnZ2VyX2NvZGVbXSA9IAoreworICAgIDB4QjYsIDB4QzMsIDB4QUEsIDB4QkIsIDB4Q0MsIDB4REQsCisgICAgMHhjOCwgMHgwNywgMHhhMCwgMHgwMCwgMHhmMCwgMHgwNywgMHg1ZSwgMHgwMCwKKyAgICAweDA2LCAweDAwLCAweGYwLCAweDA3LCAweDBhLCAweDAwLCAweDA4LCAweDAwLAorICAgIDB4ZjAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4ZTcsIDB4MDcsCisgICAgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHgwMCwKKyAgICAweDA0LCAweDAwLCAweGU3LCAweDA3LCAweDUwLCAweGMzLCAweDEwLCAweGMwLAorICAgIDB4ZjAsIDB4MDksIDB4MGUsIDB4YzAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4ODcsCisgICAgMHgwMSwgMHgwMCwgMHgwZSwgMHhjMCwgMHg5NywgMHhjZiwgMHhkNywgMHgwOSwKKyAgICAweDAwLCAweGMwLCAweDE3LCAweDAyLCAweGM4LCAweDA3LCAweGEwLCAweDAwLAorICAgIDB4ZTcsIDB4MTcsIDB4NTAsIDB4YzMsIDB4MTAsIDB4YzAsIDB4MzAsIDB4ZDgsCisgICAgMHgwNCwgMHgwMCwgMHgzMCwgMHg1YywgMHgwOCwgMHgwMCwgMHgwNCwgMHgwMCwKKyAgICAweGIwLCAweGMwLCAweDA2LCAweDAwLCAweGM4LCAweDA1LCAweGU3LCAweDA1LAorICAgIDB4MDAsIDB4YzAsIDB4YzAsIDB4ZGYsIDB4OTcsIDB4Y2YsIDB4NDksIDB4YWYsCisgICAgMHhjMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg2MCwgMHhhZiwgMHg0YSwgMHhhZiwKKyAgICAweDAwLCAweDBjLCAweDBjLCAweDAwLCAweDQwLCAweGQyLCAweDAwLCAweDFjLAorICAgIDB4MGMsIDB4MDAsIDB4NDAsIDB4ZDIsIDB4MzAsIDB4MDAsIDB4MDgsIDB4MDAsCisgICAgMHhmMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhmMCwgMHgwNywKKyAgICAweDg2LCAweDAwLCAweDA2LCAweDAwLCAweDY3LCAweGNmLCAweDI3LCAweDBjLAorICAgIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MGMsIDB4MDAsIDB4MDAsCisgICAgMHgwZSwgMHhjMCwgMHg0OSwgMHhhZiwgMHg2NCwgMHhhZiwgMHhjMCwgMHgwNywKKyAgICAweDAwLCAweDAwLCAweDRiLCAweGFmLCAweDRhLCAweGFmLCAweDVhLCAweGNmLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHg5NCwgMHgwMCwgMHgwNSwgMHgwMCwKKyAgICAweDAwLCAweDAwCit9OworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfdHJpZ2dlcl9jb2RlX2ZpeAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgX191OCBrYXdldGhfdHJpZ2dlcl9jb2RlX2ZpeFtdID0gCit7CisgICAgMHhCNiwgMHhDMywgMHhBQSwgMHhCQiwgMHhDQywgMHhERCwKKyAgICAweDAyLCAweDAwLCAweDA2LCAweDAwLCAweDE4LCAweDAwLCAweDNlLCAweDAwLAorICAgIDB4ODAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4YWEsIDB4MDAsCisgICAgMHgwMCwgMHgwMAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfbmV3X2NvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIF9fdTgga2F3ZXRoX25ld19jb2RlW10gPSAKK3sKKyAgICAweEI2LCAweEMzLCAweEFBLCAweEJCLCAweENDLCAweERELAorICAgIDB4OWYsIDB4Y2YsIDB4ZGUsIDB4MDYsIDB4ZTcsIDB4NTcsIDB4MDAsIDB4MDAsCisgICAgMHhjNCwgMHgwNiwgMHg5NywgMHhjMSwgMHhlNywgMHg2NywgMHhmZiwgMHgxZiwKKyAgICAweDI4LCAweGMwLCAweGU3LCAweDg3LCAweDAwLCAweDA0LCAweDI0LCAweGMwLAorICAgIDB4ZTcsIDB4NjcsIDB4ZmYsIDB4ZjksIDB4MjIsIDB4YzAsIDB4OTcsIDB4Y2YsCisgICAgMHhkNywgMHgwOSwgMHgwMCwgMHhjMCwgMHhlNywgMHgwOSwgMHhhMiwgMHhjMCwKKyAgICAweGJlLCAweDA2LCAweDlmLCAweGFmLCAweDM2LCAweDAwLCAweGU3LCAweDA1LAorICAgIDB4MDAsIDB4YzAsIDB4YTcsIDB4Y2YsIDB4YmMsIDB4MDYsIDB4OTcsIDB4Y2YsCisgICAgMHhlNywgMHg1NywgMHgwMCwgMHgwMCwgMHhiOCwgMHgwNiwgMHhhNywgMHhhMSwKKyAgICAweGI4LCAweDA2LCAweDk3LCAweGNmLCAweGU3LCAweDU3LCAweDAwLCAweDAwLAorICAgIDB4MTQsIDB4MDgsIDB4MGEsIDB4YzAsIDB4ZTcsIDB4NTcsIDB4MDAsIDB4MDAsCisgICAgMHhhNCwgMHhjMCwgMHhhNywgMHhjMCwgMHg3YSwgMHgwNiwgMHg5ZiwgMHhhZiwKKyAgICAweDkyLCAweDA3LCAweGU3LCAweDA3LCAweDAwLCAweDAwLCAweDE0LCAweDA4LAorICAgIDB4ZTcsIDB4NTcsIDB4ZmYsIDB4ZmYsIDB4YmEsIDB4MDYsIDB4OWYsIDB4YTAsCisgICAgMHgzOCwgMHgwMCwgMHhlNywgMHg1OSwgMHhiYSwgMHgwNiwgMHhiZSwgMHgwNiwKKyAgICAweDlmLCAweGEwLCAweDM4LCAweDAwLCAweGM4LCAweDA5LCAweGNhLCAweDA2LAorICAgIDB4MDgsIDB4NjIsIDB4OWYsIDB4YTEsIDB4MzYsIDB4MDgsIDB4YzAsIDB4MDksCisgICAgMHg3NiwgMHgwNiwgMHgwMCwgMHg2MCwgMHhhNywgMHhjMCwgMHg3YSwgMHgwNiwKKyAgICAweDlmLCAweGFmLCAweGNjLCAweDAyLCAweGU3LCAweDU3LCAweDAwLCAweDAwLAorICAgIDB4YjgsIDB4MDYsIDB4YTcsIDB4YzEsIDB4N2EsIDB4MDYsIDB4OWYsIDB4YWYsCisgICAgMHgwNCwgMHgwMCwgMHhlNywgMHg1NywgMHgwMCwgMHgwMCwgMHg4ZSwgMHgwNiwKKyAgICAweDBhLCAweGMxLCAweGU3LCAweDA5LCAweDIwLCAweGMwLCAweDEwLCAweDA4LAorICAgIDB4ZTcsIDB4ZDAsIDB4MTAsIDB4MDgsIDB4ZTcsIDB4NjcsIDB4NDAsIDB4MDAsCisgICAgMHgxMCwgMHgwOCwgMHg5ZiwgMHhhZiwgMHg5MiwgMHgwYywgMHhjMCwgMHgwOSwKKyAgICAweGQwLCAweDA2LCAweDAwLCAweDYwLCAweDA1LCAweGM0LCAweGMwLCAweDU5LAorICAgIDB4YmUsIDB4MDYsIDB4MDIsIDB4YzAsIDB4OWYsIDB4YWYsIDB4ZWMsIDB4MDAsCisgICAgMHg5ZiwgMHhhZiwgMHgzNCwgMHgwMiwgMHhlNywgMHg1NywgMHgwMCwgMHgwMCwKKyAgICAweGE2LCAweDA2LCAweDlmLCAweGEwLCAweDdhLCAweDAyLCAweGE3LCAweGNmLAorICAgIDB4N2EsIDB4MDYsIDB4NDgsIDB4MDIsIDB4ZTcsIDB4MDksIDB4YmUsIDB4MDYsCisgICAgMHhkMCwgMHgwNiwgMHhjOCwgMHgzNywgMHgwNCwgMHgwMCwgMHg5ZiwgMHhhZiwKKyAgICAweDA4LCAweDAzLCAweDk3LCAweGNmLCAweGU3LCAweDU3LCAweDAwLCAweDAwLAorICAgIDB4Y2UsIDB4MDYsIDB4OTcsIDB4YzAsIDB4ZDcsIDB4MDksIDB4MDAsIDB4YzAsCisgICAgMHhjMSwgMHhkZiwgMHhjOCwgMHgwOSwgMHhjNiwgMHgwNiwgMHgwOCwgMHg2MiwKKyAgICAweDE0LCAweGMwLCAweDI3LCAweDA0LCAweGM2LCAweDA2LCAweDEwLCAweDk0LAorICAgIDB4ZjAsIDB4MDcsIDB4MTAsIDB4MDgsIDB4MDIsIDB4MDAsIDB4YzEsIDB4MDcsCisgICAgMHgwMSwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhmMCwgMHgwNywKKyAgICAweDMwLCAweDAxLCAweDA2LCAweDAwLCAweDUwLCAweGFmLCAweGU3LCAweDA3LAorICAgIDB4ZmYsIDB4ZmYsIDB4ZDAsIDB4MDYsIDB4ZTcsIDB4MDcsIDB4MDAsIDB4MDAsCisgICAgMHhjZSwgMHgwNiwgMHhlNywgMHgwNSwgMHgwMCwgMHhjMCwgMHg5NywgMHhjZiwKKyAgICAweGQ3LCAweDA5LCAweDAwLCAweGMwLCAweGMxLCAweGRmLCAweDQ4LCAweDAyLAorICAgIDB4ZDAsIDB4MDksIDB4YzYsIDB4MDYsIDB4MjcsIDB4MDIsIDB4YzYsIDB4MDYsCisgICAgMHhlNywgMHgwNSwgMHgwMCwgMHhjMCwgMHg5NywgMHhjZiwgMHg0OCwgMHgwMiwKKyAgICAweGM4LCAweDM3LCAweDA0LCAweDAwLCAweDAwLCAweDBjLCAweDBjLCAweDAwLAorICAgIDB4MDAsIDB4NjAsIDB4MjEsIDB4YzAsIDB4YzAsIDB4MzcsIDB4M2UsIDB4MDAsCisgICAgMHgyMywgMHhjOSwgMHhjMCwgMHg1NywgMHhiNCwgMHgwNSwgMHgxYiwgMHhjOCwKKyAgICAweGMwLCAweDE3LCAweDNmLCAweDAwLCAweGMwLCAweDY3LCAweGMwLCAweGZmLAorICAgIDB4MzAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4MDAsCisgICAgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhjMCwgMHgxNywgMHg0YywgMHgwMCwKKyAgICAweDMwLCAweDAwLCAweDA2LCAweDAwLCAweGYwLCAweDA3LCAweGEwLCAweDAxLAorICAgIDB4MGEsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzEsIDB4MDcsIDB4MDIsIDB4MDAsCisgICAgMHhkNywgMHgwOSwgMHgwMCwgMHhjMCwgMHhjMSwgMHhkZiwgMHg1MSwgMHhhZiwKKyAgICAweGU3LCAweDA1LCAweDAwLCAweGMwLCAweDk3LCAweGNmLCAweDlmLCAweGFmLAorICAgIDB4MDgsIDB4MDMsIDB4OWYsIDB4YWYsIDB4N2EsIDB4MDIsIDB4OTcsIDB4Y2YsCisgICAgMHg5ZiwgMHhhZiwgMHg3YSwgMHgwMiwgMHhjOSwgMHgzNywgMHgwNCwgMHgwMCwKKyAgICAweGMxLCAweGRmLCAweGM4LCAweDA5LCAweGEyLCAweDA2LCAweDUwLCAweDAyLAorICAgIDB4NjcsIDB4MDIsIDB4YTIsIDB4MDYsIDB4ZDEsIDB4MDcsIDB4MDAsIDB4MDAsCisgICAgMHgyNywgMHhkOCwgMHhhYSwgMHgwNiwgMHhjMCwgMHhkZiwgMHg5ZiwgMHhhZiwKKyAgICAweGM0LCAweDAxLCAweDk3LCAweGNmLCAweGU3LCAweDU3LCAweDAwLCAweDAwLAorICAgIDB4ZDIsIDB4MDYsIDB4OTcsIDB4YzEsIDB4ZTcsIDB4NTcsIDB4MDEsIDB4MDAsCisgICAgMHhhOCwgMHgwNiwgMHg5NywgMHhjMCwgMHhjOCwgMHgwOSwgMHhhMCwgMHgwNiwKKyAgICAweDA4LCAweDYyLCAweDk3LCAweGMwLCAweDAwLCAweDAyLCAweGMwLCAweDE3LAorICAgIDB4MGUsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MzQsIDB4MDEsIDB4MjcsIDB4MGMsCisgICAgMHgwYywgMHgwMCwgMHgzNiwgMHgwMSwgMHhlNywgMHgwNywgMHg1MCwgMHhjMywKKyAgICAweDEyLCAweGMwLCAweGU3LCAweDA3LCAweGNjLCAweDBiLCAweDAyLCAweDAwLAorICAgIDB4ZTcsIDB4MDcsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDYsIDB4ZTcsIDB4MDcsCisgICAgMHgwNSwgMHgwMCwgMHg5MCwgMHhjMCwgMHg5NywgMHhjZiwgMHhjOCwgMHgwOSwKKyAgICAweGE0LCAweDA2LCAweDA4LCAweDYyLCAweDAyLCAweGMwLCAweDEwLCAweDY0LAorICAgIDB4MDcsIDB4YzEsIDB4ZTcsIDB4MDcsIDB4MDAsIDB4MDAsIDB4OWUsIDB4MDYsCisgICAgMHhlNywgMHgwNywgMHg3MiwgMHgwNCwgMHgyNCwgMHgwMCwgMHg5NywgMHhjZiwKKyAgICAweDI3LCAweDA0LCAweGE0LCAweDA2LCAweGM4LCAweDE3LCAweDBlLCAweDAwLAorICAgIDB4MjcsIDB4MDIsIDB4OWUsIDB4MDYsIDB4ZTcsIDB4MDcsIDB4ODAsIDB4MDQsCisgICAgMHgyNCwgMHgwMCwgMHg5NywgMHhjZiwgMHhkNywgMHgwOSwgMHgwMCwgMHhjMCwKKyAgICAweGMxLCAweGRmLCAweGU3LCAweDU3LCAweDAwLCAweDAwLCAweDkwLCAweDA2LAorICAgIDB4MTMsIDB4YzEsIDB4OWYsIDB4YWYsIDB4MDYsIDB4MDIsIDB4ZTcsIDB4NTcsCisgICAgMHgwMCwgMHgwMCwgMHg5ZSwgMHgwNiwgMHgxMywgMHhjMCwgMHhlNywgMHgwOSwKKyAgICAweDllLCAweDA2LCAweDMwLCAweDAxLCAweGU3LCAweDA3LCAweGYyLCAweDA1LAorICAgIDB4MzIsIDB4MDEsIDB4ZTcsIDB4MDcsIDB4MTAsIDB4MDAsIDB4OTYsIDB4YzAsCisgICAgMHhlNywgMHgwOSwgMHg5ZSwgMHgwNiwgMHg5MCwgMHgwNiwgMHgwNCwgMHhjZiwKKyAgICAweGU3LCAweDU3LCAweDAwLCAweDAwLCAweDllLCAweDA2LCAweDAyLCAweGMxLAorICAgIDB4OWYsIDB4YWYsIDB4MDYsIDB4MDIsIDB4ZTcsIDB4MDUsIDB4MDAsIDB4YzAsCisgICAgMHg5NywgMHhjZiwgMHhkNywgMHgwOSwgMHgwMCwgMHhjMCwgMHhjMSwgMHhkZiwKKyAgICAweDA4LCAweDkyLCAweGU3LCAweDU3LCAweDAyLCAweDAwLCAweGFhLCAweDA2LAorICAgIDB4MDIsIDB4YzMsIDB4YzgsIDB4MDksIDB4YTQsIDB4MDYsIDB4MjcsIDB4MDIsCisgICAgMHhhNiwgMHgwNiwgMHgwOCwgMHg2MiwgMHgwMywgMHhjMSwgMHhlNywgMHgwNSwKKyAgICAweDAwLCAweGMwLCAweDk3LCAweGNmLCAweDI3LCAweDA0LCAweGE0LCAweDA2LAorICAgIDB4ZTcsIDB4MDUsIDB4MDAsIDB4YzAsIDB4ZjAsIDB4MDcsIDB4NDAsIDB4MDAsCisgICAgMHgwOCwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwKKyAgICAweDAwLCAweDAyLCAweGMwLCAweDE3LCAweDBjLCAweDAwLCAweDMwLCAweDAwLAorICAgIDB4MDYsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4NDYsIDB4MDEsIDB4MGEsIDB4MDAsCisgICAgMHhjOCwgMHgxNywgMHgwNCwgMHgwMCwgMHhjMSwgMHgwNywgMHgwMiwgMHgwMCwKKyAgICAweDUxLCAweGFmLCAweDk3LCAweGNmLCAweGU3LCAweDU3LCAweDAwLCAweDAwLAorICAgIDB4OTYsIDB4MDYsIDB4OTcsIDB4YzAsIDB4YzEsIDB4ZGYsIDB4YzgsIDB4MDksCisgICAgMHg5NiwgMHgwNiwgMHgyNywgMHgwNCwgMHg5NiwgMHgwNiwgMHgyNywgMHg1MiwKKyAgICAweDk4LCAweDA2LCAweDAzLCAweGMxLCAweGU3LCAweDA3LCAweDk2LCAweDA2LAorICAgIDB4OTgsIDB4MDYsIDB4YzAsIDB4ZGYsIDB4MTcsIDB4MDIsIDB4YzgsIDB4MTcsCisgICAgMHgwZSwgMHgwMCwgMHg5ZiwgMHhhZiwgMHhiYSwgMHgwMywgMHhjOCwgMHgwNSwKKyAgICAweDAwLCAweDYwLCAweDAzLCAweGMwLCAweDlmLCAweGFmLCAweDI0LCAweDAzLAorICAgIDB4OTcsIDB4Y2YsIDB4OWYsIDB4YWYsIDB4MDgsIDB4MDMsIDB4OTcsIDB4Y2YsCisgICAgMHg1NywgMHgwMiwgMHhjOSwgMHgwNywgMHhhNCwgMHgwNiwgMHhkNywgMHgwOSwKKyAgICAweDAwLCAweGMwLCAweGMxLCAweGRmLCAweDA4LCAweDYyLCAweDFiLCAweGMwLAorICAgIDB4NTAsIDB4MDQsIDB4MTEsIDB4MDIsIDB4ZTcsIDB4MDUsIDB4MDAsIDB4YzAsCisgICAgMHhjOSwgMHgwNSwgMHg5NywgMHhjZiwgMHg5NywgMHgwMiwgMHhjYSwgMHgwOSwKKyAgICAweGQ2LCAweDA2LCAweGYyLCAweDE3LCAweDAxLCAweDAwLCAweDA0LCAweDAwLAorICAgIDB4ZjIsIDB4MjcsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4Y2EsIDB4MTcsCisgICAgMHgyYywgMHgwMCwgMHhmOCwgMHg3NywgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwKKyAgICAweDA2LCAweGMwLCAweGNhLCAweGQ5LCAweGY4LCAweDU3LCAweGZmLCAweDAwLAorICAgIDB4MGUsIDB4MDAsIDB4MDEsIDB4YzEsIDB4Y2EsIDB4ZDksIDB4MjIsIDB4MWMsCisgICAgMHgwYywgMHgwMCwgMHhlMiwgMHgyNywgMHgwMCwgMHgwMCwgMHhlMiwgMHgxNywKKyAgICAweDAxLCAweDAwLCAweGUyLCAweDI3LCAweDAwLCAweDAwLCAweGNhLCAweDA1LAorICAgIDB4MDAsIDB4MGMsIDB4MGMsIDB4MDAsIDB4YzAsIDB4MTcsIDB4NDEsIDB4MDAsCisgICAgMHhjMCwgMHg2NywgMHhjMCwgMHhmZiwgMHgzMCwgMHgwMCwgMHgwOCwgMHgwMCwKKyAgICAweDAwLCAweDAyLCAweGMwLCAweDE3LCAweDBjLCAweDAwLCAweDMwLCAweDAwLAorICAgIDB4MDYsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4ZGEsIDB4MDAsIDB4MGEsIDB4MDAsCisgICAgMHhmMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwYywKKyAgICAweDA4LCAweDAwLCAweDQwLCAweGQxLCAweDAxLCAweDAwLCAweGMwLCAweDE5LAorICAgIDB4Y2UsIDB4MDYsIDB4YzAsIDB4NTksIDB4YzIsIDB4MDYsIDB4MDQsIDB4YzksCisgICAgMHg0OSwgMHhhZiwgMHg5ZiwgMHhhZiwgMHhlYywgMHgwMCwgMHg0YSwgMHhhZiwKKyAgICAweDY3LCAweDEwLCAweGNlLCAweDA2LCAweGM4LCAweDE3LCAweDA0LCAweDAwLAorICAgIDB4YzEsIDB4MDcsIDB4MDEsIDB4MDAsIDB4ZDcsIDB4MDksIDB4MDAsIDB4YzAsCisgICAgMHhjMSwgMHhkZiwgMHg1MCwgMHhhZiwgMHhlNywgMHgwNSwgMHgwMCwgMHhjMCwKKyAgICAweDk3LCAweGNmLCAweGMwLCAweDA3LCAweDAxLCAweDAwLCAweGMxLCAweDA5LAorICAgIDB4YWMsIDB4MDYsIDB4YzEsIDB4NzcsIDB4MDEsIDB4MDAsIDB4OTcsIDB4YzEsCisgICAgMHhkOCwgMHg3NywgMHgwMSwgMHgwMCwgMHgxMiwgMHhjMCwgMHhjOSwgMHgwNywKKyAgICAweDZhLCAweDA2LCAweDlmLCAweGFmLCAweDA4LCAweDA0LCAweDA0LCAweGMxLAorICAgIDB4YzEsIDB4NzcsIDB4MDgsIDB4MDAsIDB4MTMsIDB4YzAsIDB4OTcsIDB4Y2YsCisgICAgMHhjMSwgMHg3NywgMHgwMiwgMHgwMCwgMHg5NywgMHhjMSwgMHhjMSwgMHg3NywKKyAgICAweDEwLCAweDAwLCAweDBjLCAweGMwLCAweDlmLCAweGFmLCAweDJjLCAweDA0LAorICAgIDB4OTcsIDB4Y2YsIDB4YzEsIDB4NzcsIDB4MDQsIDB4MDAsIDB4MDYsIDB4YzAsCisgICAgMHhjOSwgMHgwNywgMHg3MCwgMHgwNiwgMHg5ZiwgMHhhZiwgMHgwOCwgMHgwNCwKKyAgICAweDk3LCAweGMwLCAweDAwLCAweGNmLCAweDAwLCAweDkwLCAweDk3LCAweGNmLAorICAgIDB4NTAsIDB4NTQsIDB4OTcsIDB4YzEsIDB4NzAsIDB4NWMsIDB4MDIsIDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHg5NywgMHhjMSwgMHg3MCwgMHg1YywgMHgwNCwgMHgwMCwKKyAgICAweDA0LCAweDAwLCAweDk3LCAweGNmLCAweDgwLCAweDAxLCAweGMwLCAweDAwLAorICAgIDB4NjAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MGMsIDB4MDAsCisgICAgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYiwgMHgwOSwgMHhiMiwgMHgwNiwKKyAgICAweGNjLCAweDA5LCAweGI0LCAweDA2LCAweDBiLCAweDUzLCAweDExLCAweGMwLAorICAgIDB4YzksIDB4MDIsIDB4Y2EsIDB4MDcsIDB4MWMsIDB4MDQsIDB4OWYsIDB4YWYsCisgICAgMHgwOCwgMHgwNCwgMHg5NywgMHhjMCwgMHgwYSwgMHhjOCwgMHg4MiwgMHgwOCwKKyAgICAweDBhLCAweGNmLCAweDgyLCAweDA4LCAweDlmLCAweGFmLCAweDA4LCAweDA0LAorICAgIDB4OTcsIDB4YzAsIDB4MDUsIDB4YzIsIDB4ODksIDB4MzAsIDB4ODIsIDB4NjAsCisgICAgMHg3OCwgMHhjMSwgMHgwMCwgMHg5MCwgMHg5NywgMHhjZiwgMHg4OSwgMHgxMCwKKyAgICAweDA5LCAweDUzLCAweDc5LCAweGMyLCAweDg5LCAweDMwLCAweDgyLCAweDA4LAorICAgIDB4N2EsIDB4Y2YsIDB4YzAsIDB4ZGYsIDB4OTcsIDB4Y2YsIDB4YzAsIDB4ZGYsCisgICAgMHg5NywgMHhjZiwgMHhlNywgMHgwOSwgMHg5NiwgMHhjMCwgMHg5MiwgMHgwNiwKKyAgICAweGU3LCAweDA5LCAweDk4LCAweGMwLCAweDk0LCAweDA2LCAweDBmLCAweGNmLAorICAgIDB4ZTcsIDB4MDksIDB4OTYsIDB4YzAsIDB4OTIsIDB4MDYsIDB4ZTcsIDB4MDksCisgICAgMHg5OCwgMHhjMCwgMHg5NCwgMHgwNiwgMHhlNywgMHgwOSwgMHg5ZSwgMHgwNiwKKyAgICAweDMwLCAweDAxLCAweGU3LCAweDA3LCAweGYyLCAweDA1LCAweDMyLCAweDAxLAorICAgIDB4ZTcsIDB4MDcsIDB4MTAsIDB4MDAsIDB4OTYsIDB4YzAsIDB4ZDcsIDB4MDksCisgICAgMHgwMCwgMHhjMCwgMHgxNywgMHgwMiwgMHhjOCwgMHgwOSwgMHg5MCwgMHgwNiwKKyAgICAweGM4LCAweDM3LCAweDBlLCAweDAwLCAweGU3LCAweDc3LCAweDJhLCAweDAwLAorICAgIDB4OTIsIDB4MDYsIDB4MzAsIDB4YzAsIDB4OTcsIDB4MDIsIDB4Y2EsIDB4MDksCisgICAgMHhkNiwgMHgwNiwgMHhlNywgMHg3NywgMHgyMCwgMHgwMCwgMHg5MiwgMHgwNiwKKyAgICAweDBlLCAweGMwLCAweGYyLCAweDE3LCAweDAxLCAweDAwLCAweDEwLCAweDAwLAorICAgIDB4ZjIsIDB4MjcsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ZTcsIDB4NzcsCisgICAgMHgwYSwgMHgwMCwgMHg5MiwgMHgwNiwgMHhjYSwgMHgwNSwgMHgxZSwgMHhjMCwKKyAgICAweDk3LCAweDAyLCAweGNhLCAweDA5LCAweGQ2LCAweDA2LCAweGYyLCAweDE3LAorICAgIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4ZjIsIDB4MjcsIDB4MDAsIDB4MDAsCisgICAgMHgwZSwgMHgwMCwgMHhlNywgMHg3NywgMHgwMiwgMHgwMCwgMHg5MiwgMHgwNiwKKyAgICAweDA3LCAweGMwLCAweGYyLCAweDE3LCAweDAxLCAweDAwLCAweDQ0LCAweDAwLAorICAgIDB4ZjIsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MDAsIDB4MDYsIDB4Y2YsCisgICAgMHhmMiwgMHgxNywgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHhmMiwgMHgyNywKKyAgICAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweGNhLCAweDA1LCAweDlmLCAweGFmLAorICAgIDB4MDgsIDB4MDMsIDB4MGYsIDB4Y2YsIDB4NTcsIDB4MDIsIDB4MDksIDB4MDIsCisgICAgMHhmMSwgMHgwOSwgMHg5NCwgMHgwNiwgMHgwYywgMHgwMCwgMHhmMSwgMHhkYSwKKyAgICAweDBjLCAweDAwLCAweGM4LCAweDA5LCAweDk4LCAweDA2LCAweDUwLCAweDAyLAorICAgIDB4NjcsIDB4MDIsIDB4OTgsIDB4MDYsIDB4ZDEsIDB4MDcsIDB4MDAsIDB4MDAsCisgICAgMHhjOSwgMHgwNSwgMHhlNywgMHgwOSwgMHg5ZSwgMHgwNiwgMHg5MCwgMHgwNiwKKyAgICAweGU3LCAweDU3LCAweDAwLCAweDAwLCAweDkwLCAweDA2LCAweDAyLCAweGMwLAorICAgIDB4OWYsIDB4YWYsIDB4MDYsIDB4MDIsIDB4YzgsIDB4MDUsIDB4ZTcsIDB4MDUsCisgICAgMHgwMCwgMHhjMCwgMHhjMCwgMHhkZiwgMHg5NywgMHhjZiwgMHhkNywgMHgwOSwKKyAgICAweDAwLCAweGMwLCAweDE3LCAweDAwLCAweDE3LCAweDAyLCAweDk3LCAweDAyLAorICAgIDB4YzAsIDB4MDksIDB4OTIsIDB4YzAsIDB4ZTcsIDB4MDcsIDB4MDQsIDB4MDAsCisgICAgMHg5MCwgMHhjMCwgMHhjYSwgMHgwOSwgMHhkNiwgMHgwNiwgMHhlNywgMHgwNywKKyAgICAweDAwLCAweDAwLCAweGE4LCAweDA2LCAweGU3LCAweDA3LCAweDZhLCAweDA0LAorICAgIDB4MDIsIDB4MDAsIDB4YzAsIDB4NzcsIDB4MDIsIDB4MDAsIDB4MDgsIDB4YzAsCisgICAgMHhmMiwgMHgxNywgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMCwgMHhmMiwgMHgyNywKKyAgICAweDAwLCAweDAwLCAweDUyLCAweDAwLCAweDlmLCAweGNmLCAweDI0LCAweDA2LAorICAgIDB4YzAsIDB4NzcsIDB4MTAsIDB4MDAsIDB4MDYsIDB4YzAsIDB4ZjIsIDB4MTcsCisgICAgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHhmMiwgMHgyNywgMHgwMCwgMHgwMCwKKyAgICAweDVhLCAweDAwLCAweGMwLCAweDc3LCAweDgwLCAweDAwLCAweDA2LCAweGMwLAorICAgIDB4ZjIsIDB4MTcsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4ZjIsIDB4MjcsCisgICAgMHgwMCwgMHgwMCwgMHg3MiwgMHgwMCwgMHhjMCwgMHg3NywgMHgwOCwgMHgwMCwKKyAgICAweDFkLCAweGMxLCAweGYyLCAweDE3LCAweDAxLCAweDAwLCAweDA4LCAweDAwLAorICAgIDB4ZjIsIDB4MjcsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4YzAsIDB4NzcsCisgICAgMHgwMCwgMHgwMiwgMHgwNiwgMHhjMCwgMHhmMiwgMHgxNywgMHgwMSwgMHgwMCwKKyAgICAweDY0LCAweDAwLCAweGYyLCAweDI3LCAweDAwLCAweDAwLCAweDY2LCAweDAwLAorICAgIDB4YzAsIDB4NzcsIDB4NDAsIDB4MDAsIDB4MDYsIDB4YzAsIDB4ZjIsIDB4MTcsCisgICAgMHgwMSwgMHgwMCwgMHg1YywgMHgwMCwgMHhmMiwgMHgyNywgMHgwMCwgMHgwMCwKKyAgICAweDVlLCAweDAwLCAweGMwLCAweDc3LCAweDAxLCAweDAwLCAweDAxLCAweGMwLAorICAgIDB4MWIsIDB4Y2YsIDB4MWEsIDB4Y2YsIDB4ZjIsIDB4MTcsIDB4MDEsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHhmMiwgMHgyNywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwKKyAgICAweGM4LCAweDA5LCAweDM0LCAweDAxLCAweGNhLCAweDE3LCAweDE0LCAweDAwLAorICAgIDB4ZDgsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MDUsIDB4YzAsIDB4Y2EsIDB4ZDksCisgICAgMHhkOCwgMHg1NywgMHhmZiwgMHgwMCwgMHgwMSwgMHhjMCwgMHhjYSwgMHhkOSwKKyAgICAweGUyLCAweDE5LCAweDk0LCAweGMwLCAweGUyLCAweDI3LCAweDAwLCAweDAwLAorICAgIDB4ZTIsIDB4MTcsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4MjcsIDB4MDAsIDB4MDAsCisgICAgMHg5ZiwgMHhhZiwgMHg0MCwgMHgwNiwgMHg5ZiwgMHhhZiwgMHhjNCwgMHgwMSwKKyAgICAweGU3LCAweDU3LCAweDAwLCAweDAwLCAweGQyLCAweDA2LCAweDlmLCAweGExLAorICAgIDB4MGUsIDB4MGEsIDB4Y2EsIDB4MDUsIDB4YzgsIDB4MDUsIDB4YzAsIDB4MDUsCisgICAgMHhlNywgMHgwNSwgMHgwMCwgMHhjMCwgMHhjMCwgMHhkZiwgMHg5NywgMHhjZiwKKyAgICAweGM4LCAweDA5LCAweGEwLCAweDA2LCAweDA4LCAweDYyLCAweDk3LCAweGMwLAorICAgIDB4MjcsIDB4MDQsIDB4YTAsIDB4MDYsIDB4MjcsIDB4NTIsIDB4YTIsIDB4MDYsCisgICAgMHgwMywgMHhjMSwgMHhlNywgMHgwNywgMHhhMCwgMHgwNiwgMHhhMiwgMHgwNiwKKyAgICAweDlmLCAweGFmLCAweDA4LCAweDAzLCAweGU3LCAweDU3LCAweDAwLCAweDAwLAorICAgIDB4YWEsIDB4MDYsIDB4MDIsIDB4YzAsIDB4MjcsIDB4ZGEsIDB4YWEsIDB4MDYsCisgICAgMHg5NywgMHhjZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweGZmLCAweGZmLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4MTMsIDB4ZTcsIDB4NTcsCisgICAgMHgwMCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwNiwgMHhjMiwgMHhlNywgMHgwNywKKyAgICAweGVlLCAweDBiLCAweDEyLCAweDAwLCAweGU3LCAweDA3LCAweDM0LCAweDBjLAorICAgIDB4YjIsIDB4MDAsIDB4ZTcsIDB4MDcsIDB4YzYsIDB4MDcsIDB4ZjIsIDB4MDIsCisgICAgMHhjOCwgMHgwOSwgMHhiNCwgMHgwMCwgMHhmOCwgMHgwNywgMHgwMiwgMHgwMCwKKyAgICAweDBkLCAweDAwLCAweGQ3LCAweDA5LCAweDBlLCAweGMwLCAweGU3LCAweDA3LAorICAgIDB4MDAsIDB4MDAsIDB4MGUsIDB4YzAsIDB4YzgsIDB4MDksIDB4ZGUsIDB4MDAsCisgICAgMHhjOCwgMHgxNywgMHgwOSwgMHgwMCwgMHhjOSwgMHgwNywgMHhkYSwgMHgwNiwKKyAgICAweGMwLCAweDA3LCAweDA0LCAweDAwLCAweDY4LCAweDBhLCAweDAwLCAweGRhLAorICAgIDB4N2QsIDB4YzEsIDB4ZTcsIDB4MDksIDB4YzAsIDB4MDAsIDB4N2MsIDB4MDYsCisgICAgMHhlNywgMHgwOSwgMHhiZSwgMHgwMCwgMHg3OCwgMHgwNiwgMHhlNywgMHgwOSwKKyAgICAweDEwLCAweDAwLCAweGJjLCAweDA2LCAweGM4LCAweDA3LCAweGQ2LCAweDA3LAorICAgIDB4OWYsIDB4YWYsIDB4YWUsIDB4MDcsIDB4OWYsIDB4YWYsIDB4MDAsIDB4MGEsCisgICAgMHhjOCwgMHgwOSwgMHhkZSwgMHgwMCwgMHgwMCwgMHgwZSwgMHgwZiwgMHgwMCwKKyAgICAweDQxLCAweDkwLCAweDlmLCAweGRlLCAweDA2LCAweDAwLCAweDQ0LCAweGFmLAorICAgIDB4MjcsIDB4MDAsIDB4YjIsIDB4MDYsIDB4MjcsIDB4MDAsIDB4YjQsIDB4MDYsCisgICAgMHgyNywgMHgwMCwgMHhiNiwgMHgwNiwgMHhjMCwgMHgwNywgMHg3NCwgMHgwMCwKKyAgICAweDQ0LCAweGFmLCAweDI3LCAweDAwLCAweGQ2LCAweDA2LCAweDA4LCAweDAwLAorICAgIDB4MDAsIDB4OTAsIDB4YzEsIDB4MDcsIDB4M2EsIDB4MDAsIDB4MjAsIDB4MDAsCisgICAgMHgwMSwgMHhkYSwgMHg3ZCwgMHhjMSwgMHg5ZiwgMHhhZiwgMHhiYSwgMHgwOSwKKyAgICAweGMwLCAweDA3LCAweDQ0LCAweDAwLCAweDQ4LCAweGFmLCAweDI3LCAweDAwLAorICAgIDB4N2EsIDB4MDYsIDB4OWYsIDB4YWYsIDB4OTYsIDB4MGEsIDB4ZTcsIDB4MDcsCisgICAgMHgwMSwgMHgwMCwgMHhjMCwgMHgwNiwgMHhlNywgMHgwNSwgMHgwZSwgMHhjMCwKKyAgICAweDk3LCAweGNmLCAweDQ5LCAweGFmLCAweGU3LCAweDg3LCAweDQzLCAweDAwLAorICAgIDB4MGUsIDB4YzAsIDB4ZTcsIDB4MDcsIDB4ZmYsIDB4ZmYsIDB4YmUsIDB4MDYsCisgICAgMHg5ZiwgMHhhZiwgMHhhZSwgMHgwYSwgMHhjMCwgMHgwNywgMHgwMSwgMHgwMCwKKyAgICAweDYwLCAweGFmLCAweDRhLCAweGFmLCAweDk3LCAweGNmLCAweDAwLCAweDA4LAorICAgIDB4MDksIDB4MDgsIDB4MTEsIDB4MDgsIDB4MDAsIDB4ZGEsIDB4N2MsIDB4YzEsCisgICAgMHg5NywgMHhjZiwgMHg2NywgMHgwNCwgMHhjYywgMHgwMiwgMHhjMCwgMHhkZiwKKyAgICAweDUxLCAweDk0LCAweGIxLCAweGFmLCAweDA2LCAweDAwLCAweGMxLCAweGRmLAorICAgIDB4YzksIDB4MDksIDB4Y2MsIDB4MDIsIDB4NDksIDB4NjIsIDB4NzUsIDB4YzEsCisgICAgMHhjMCwgMHhkZiwgMHhhNywgMHhjZiwgMHhkNiwgMHgwMiwgMHgwZSwgMHgwMCwKKyAgICAweDI0LCAweDAwLCAweDgwLCAweDA0LCAweDIyLCAweDAwLCAweDRlLCAweDA1LAorICAgIDB4ZDAsIDB4MDAsIDB4MGUsIDB4MGEsIDB4YWEsIDB4MDAsIDB4MzAsIDB4MDgsCisgICAgMHhiZSwgMHgwMCwgMHg0YSwgMHgwYSwgMHgxMCwgMHgwMCwgMHgyMCwgMHgwMCwKKyAgICAweDA0LCAweDAwLCAweDZlLCAweDA0LCAweDAyLCAweDAwLCAweDZhLCAweDA0LAorICAgIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4YzAsIDB4MDQsIDB4MDQsCisgICAgMHgyOCwgMHhjMCwgMHhmZSwgMHhmYiwgMHgxZSwgMHhjMCwgMHgwMCwgMHgwNCwKKyAgICAweDIyLCAweGMwLCAweGZmLCAweGY0LCAweGMwLCAweDAwLCAweDkwLCAweDA5LAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4NTYsIDB4MDgsCisgICAgMHg2MCwgMHgwOCwgMHhkMCwgMHgwOCwgMHhkYSwgMHgwOCwgMHgwMCwgMHgwOSwKKyAgICAweDA0LCAweDA5LCAweDA4LCAweDA5LCAweDMyLCAweDA5LCAweDQyLCAweDA5LAorICAgIDB4NTAsIDB4MDksIDB4NTIsIDB4MDksIDB4NWEsIDB4MDksIDB4NWEsIDB4MDksCisgICAgMHgyNywgMHgwMiwgMHhjYSwgMHgwNiwgMHg5NywgMHhjZiwgMHhlNywgMHgwNywKKyAgICAweDAwLCAweDAwLCAweGNhLCAweDA2LCAweDBhLCAweDBlLCAweDAxLCAweDAwLAorICAgIDB4Y2EsIDB4NTcsIDB4MGUsIDB4MDAsIDB4OWYsIDB4YzMsIDB4NWEsIDB4MDksCisgICAgMHhjYSwgMHgzNywgMHgwMCwgMHgwMCwgMHg5ZiwgMHhjMiwgMHg1YSwgMHgwOSwKKyAgICAweDBhLCAweGQyLCAweGIyLCAweGNmLCAweDE2LCAweDA4LCAweGM4LCAweDA5LAorICAgIDB4ZGUsIDB4MDAsIDB4MDcsIDB4MDYsIDB4OWYsIDB4Y2YsIDB4NmMsIDB4MDksCisgICAgMHgxNywgMHgwMiwgMHhjOCwgMHgwOSwgMHhkZSwgMHgwMCwgMHgwMCwgMHgwZSwKKyAgICAweDBmLCAweDAwLCAweDQxLCAweDkwLCAweDlmLCAweGRlLCAweDA2LCAweDAwLAorICAgIDB4YzgsIDB4MDUsIDB4MzAsIDB4NTAsIDB4MDYsIDB4MDAsIDB4OWYsIDB4YzgsCisgICAgMHg1YSwgMHgwOSwgMHgyNywgMHgwYywgMHgwMiwgMHgwMCwgMHhiMCwgMHgwNiwKKyAgICAweGMwLCAweDA5LCAweGIyLCAweDA2LCAweDI3LCAweDAwLCAweGI0LCAweDA2LAorICAgIDB4ZTcsIDB4MDcsIDB4MDAsIDB4MDAsIDB4YWUsIDB4MDYsIDB4MjcsIDB4MDAsCisgICAgMHg4MCwgMHgwNiwgMHgwMCwgMHgxYywgMHgwNiwgMHgwMCwgMHgyNywgMHgwMCwKKyAgICAweGI2LCAweDA2LCAweDQxLCAweDkwLCAweDY3LCAweDUwLCAweGIwLCAweDA2LAorICAgIDB4MGQsIDB4YzAsIDB4NjcsIDB4MDAsIDB4N2UsIDB4MDYsIDB4MjcsIDB4MGMsCisgICAgMHgwNiwgMHgwMCwgMHg4MiwgMHgwNiwgMHhlNywgMHgwNywgMHhiYywgMHgwOCwKKyAgICAweDg0LCAweDA2LCAweGM4LCAweDA3LCAweDdlLCAweDA2LCAweDQxLCAweDkwLAorICAgIDB4NTEsIDB4YWYsIDB4OTcsIDB4Y2YsIDB4OWYsIDB4YWYsIDB4NDgsIDB4MGMsCisgICAgMHhlNywgMHgwOSwgMHhiNiwgMHgwNiwgMHhiNCwgMHgwNiwgMHhlNywgMHgwOSwKKyAgICAweGIwLCAweDA2LCAweGFlLCAweDA2LCAweDU5LCAweGFmLCAweDk3LCAweGNmLAorICAgIDB4MjcsIDB4MGMsIDB4MDIsIDB4MDAsIDB4YWMsIDB4MDYsIDB4NTksIDB4YWYsCisgICAgMHg5NywgMHhjZiwgMHgwOSwgMHgwYywgMHgwMiwgMHgwMCwgMHgwOSwgMHhkYSwKKyAgICAweDQ5LCAweGQyLCAweGM5LCAweDE5LCAweGQ2LCAweDA2LCAweGM4LCAweDA3LAorICAgIDB4N2UsIDB4MDYsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDIsCisgICAgMHhlMCwgMHgwNywgMHgwNCwgMHgwMCwgMHhkMCwgMHgwNywgMHhjYywgMHgwOCwKKyAgICAweDQ4LCAweGRiLCAweDQxLCAweDkwLCAweDUwLCAweGFmLCAweDk3LCAweGNmLAorICAgIDB4NTksIDB4YWYsIDB4OTcsIDB4Y2YsIDB4NTksIDB4YWYsIDB4OTcsIDB4Y2YsCisgICAgMHhmMCwgMHg1NywgMHgwNiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgyNSwgMHhjMSwKKyAgICAweGU3LCAweDA3LCAweDcwLCAweDA2LCAweDgwLCAweDA2LCAweDQxLCAweDkwLAorICAgIDB4NjcsIDB4MDAsIDB4N2UsIDB4MDYsIDB4MjcsIDB4MGMsIDB4MDYsIDB4MDAsCisgICAgMHg4MiwgMHgwNiwgMHhlNywgMHgwNywgMHg4YywgMHgwOSwgMHg4NCwgMHgwNiwKKyAgICAweGM4LCAweDA3LCAweDdlLCAweDA2LCAweDQxLCAweDkwLCAweDUxLCAweGFmLAorICAgIDB4OTcsIDB4Y2YsIDB4MDcsIDB4MGMsIDB4MDYsIDB4MDAsIDB4YzcsIDB4NTcsCisgICAgMHgwNiwgMHgwMCwgMHgwZiwgMHhjMSwgMHhjOCwgMHgwNywgMHg3MCwgMHgwNiwKKyAgICAweDE1LCAweGNmLCAweDAwLCAweDBjLCAweDAyLCAweDAwLCAweDAwLCAweGRhLAorICAgIDB4NDAsIDB4ZDEsIDB4MjcsIDB4MDAsIDB4YzIsIDB4MDYsIDB4MWUsIDB4Y2YsCisgICAgMHgxZCwgMHhjZiwgMHgyNywgMHgwYywgMHgwMiwgMHgwMCwgMHhjYywgMHgwNiwKKyAgICAweDE5LCAweGNmLCAweDI3LCAweDAyLCAweDIwLCAweDAxLCAweGU3LCAweDA3LAorICAgIDB4MDgsIDB4MDAsIDB4MjIsIDB4MDEsIDB4ZTcsIDB4MDcsIDB4MTMsIDB4MDAsCisgICAgMHhiMCwgMHhjMCwgMHg5NywgMHhjZiwgMHg0MSwgMHg5MCwgMHg2NywgMHgwMCwKKyAgICAweDdlLCAweDA2LCAweGU3LCAweDAxLCAweDgyLCAweDA2LCAweDI3LCAweDAyLAorICAgIDB4ODAsIDB4MDYsIDB4ZTcsIDB4MDcsIDB4OGMsIDB4MDksIDB4ODQsIDB4MDYsCisgICAgMHhjOCwgMHgwNywgMHg3ZSwgMHgwNiwgMHhjMSwgMHgwNywgMHgwMCwgMHg4MCwKKyAgICAweDUwLCAweGFmLCAweDk3LCAweGNmLCAweDU5LCAweGFmLCAweDk3LCAweGNmLAorICAgIDB4MDAsIDB4NjAsIDB4MDUsIDB4YzAsIDB4ZTcsIDB4MDcsIDB4MDAsIDB4MDAsCisgICAgMHhjNCwgMHgwNiwgMHhhNywgMHhjZiwgMHg3YywgMHgwNiwgMHg5ZiwgMHhhZiwKKyAgICAweDAwLCAweDBhLCAweGU3LCAweDA3LCAweDAxLCAweDAwLCAweGM0LCAweDA2LAorICAgIDB4NDksIDB4YWYsIDB4ZDcsIDB4MDksIDB4MDAsIDB4YzAsIDB4MDcsIDB4YWYsCisgICAgMHhlNywgMHgwNSwgMHgwMCwgMHhjMCwgMHg0YSwgMHhhZiwgMHhhNywgMHhjZiwKKyAgICAweDdjLCAweDA2LCAweGMwLCAweDA3LCAweGZlLCAweDdmLCAweDQ0LCAweGFmLAorICAgIDB4NDAsIDB4MDAsIDB4YzAsIDB4MzcsIDB4MDAsIDB4MDEsIDB4NDEsIDB4OTAsCisgICAgMHhjMCwgMHgzNywgMHgwOCwgMHgwMCwgMHhkZiwgMHhkZSwgMHg1MCwgMHgwNiwKKyAgICAweGMwLCAweDU3LCAweDEwLCAweDAwLCAweDAyLCAweGMyLCAweGMwLCAweDA3LAorICAgIDB4MTAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4OWEsIDB4MDYsIDB4NDEsIDB4OTAsCisgICAgMHg5ZiwgMHhkZSwgMHg0MCwgMHgwNiwgMHg0NCwgMHhhZiwgMHgyNywgMHgwMCwKKyAgICAweDljLCAweDA2LCAweGMwLCAweDA5LCAweDlhLCAweDA2LCAweDQxLCAweDkwLAorICAgIDB4MDAsIDB4ZDIsIDB4MDAsIDB4ZDgsIDB4OWYsIDB4ZGUsIDB4MDgsIDB4MDAsCisgICAgMHg0NCwgMHhhZiwgMHgyNywgMHgwMCwgMHhjOCwgMHgwNiwgMHg5NywgMHhjZiwKKyAgICAweGU3LCAweDg3LCAweDAwLCAweDg0LCAweDI4LCAweGMwLCAweGU3LCAweDY3LAorICAgIDB4ZmYsIDB4ZmIsIDB4MjQsIDB4YzAsIDB4OTcsIDB4Y2YsIDB4ZTcsIDB4ODcsCisgICAgMHgwMSwgMHgwMCwgMHhkMiwgMHgwNiwgMHhlNywgMHg1NywgMHgwMCwgMHgwMCwKKyAgICAweGE4LCAweDA2LCAweDk3LCAweGMxLCAweDlmLCAweGFmLCAweDAwLCAweDBhLAorICAgIDB4ZTcsIDB4ODcsIDB4MDAsIDB4MDYsIDB4MjIsIDB4YzAsIDB4ZTcsIDB4MDcsCisgICAgMHgwMCwgMHgwMCwgMHg5MCwgMHhjMCwgMHhlNywgMHg2NywgMHhmZSwgMHhmZiwKKyAgICAweDNlLCAweGMwLCAweGU3LCAweDA3LCAweDI2LCAweDAwLCAweDBhLCAweGMwLAorICAgIDB4ZTcsIDB4ODcsIDB4MDEsIDB4MDAsIDB4M2UsIDB4YzAsIDB4ZTcsIDB4MDcsCisgICAgMHhmZiwgMHhmZiwgMHhiZSwgMHgwNiwgMHg5ZiwgMHhhZiwgMHgxMCwgMHgwYiwKKyAgICAweDk3LCAweGNmLCAweDE3LCAweDAwLCAweGE3LCAweGFmLCAweDc4LCAweDA2LAorICAgIDB4YzAsIDB4MDUsIDB4MjcsIDB4MDAsIDB4NzYsIDB4MDYsIDB4ZTcsIDB4ODcsCisgICAgMHgwMSwgMHgwMCwgMHhkMiwgMHgwNiwgMHg5ZiwgMHhhZiwgMHgwMCwgMHgwYSwKKyAgICAweGU3LCAweDA3LCAweDBjLCAweDAwLCAweDQwLCAweGMwLCAweDlmLCAweGFmLAorICAgIDB4MTAsIDB4MGIsIDB4MDAsIDB4OTAsIDB4MjcsIDB4MDAsIDB4YTYsIDB4MDYsCisgICAgMHgyNywgMHgwMCwgMHhhYSwgMHgwNiwgMHhlNywgMHgwOSwgMHhiMiwgMHgwNiwKKyAgICAweGI0LCAweDA2LCAweDI3LCAweDAwLCAweGFlLCAweDA2LCAweDI3LCAweDAwLAorICAgIDB4YWMsIDB4MDYsIDB4OWYsIDB4YWYsIDB4YWUsIDB4MGEsIDB4YzAsIDB4MDcsCisgICAgMHgwMCwgMHgwMCwgMHgyNywgMHgwMCwgMHhiMiwgMHgwMiwgMHgyNywgMHgwMCwKKyAgICAweGI0LCAweDAyLCAweDI3LCAweDAwLCAweDhlLCAweDA2LCAweGMwLCAweDA3LAorICAgIDB4MDYsIDB4MDAsIDB4YzgsIDB4MDksIDB4ZGUsIDB4MDAsIDB4YzgsIDB4MTcsCisgICAgMHgwMywgMHgwMCwgMHhjOSwgMHgwNywgMHg3MCwgMHgwNiwgMHgyOSwgMHgwYSwKKyAgICAweDAwLCAweGRhLCAweDdkLCAweGMxLCAweDk3LCAweGNmLCAweGQ3LCAweDA5LAorICAgIDB4MDAsIDB4YzAsIDB4YzEsIDB4ZGYsIDB4MDAsIDB4OTAsIDB4MjcsIDB4MDAsCisgICAgMHg5NiwgMHgwNiwgMHhlNywgMHgwNywgMHg5NiwgMHgwNiwgMHg5OCwgMHgwNiwKKyAgICAweDI3LCAweDAwLCAweGEwLCAweDA2LCAweGU3LCAweDA3LCAweGEwLCAweDA2LAorICAgIDB4YTIsIDB4MDYsIDB4MjcsIDB4MDAsIDB4YTYsIDB4MDYsIDB4MjcsIDB4MDAsCisgICAgMHg5MCwgMHgwNiwgMHgyNywgMHgwMCwgMHg5ZSwgMHgwNiwgMHhjOCwgMHgwOSwKKyAgICAweDljLCAweDA2LCAweGMxLCAweDA5LCAweDlhLCAweDA2LCAweGM5LCAweDA3LAorICAgIDB4YTQsIDB4MDYsIDB4MTEsIDB4MDIsIDB4MDksIDB4MDIsIDB4YzgsIDB4MTcsCisgICAgMHg0MCwgMHgwNiwgMHgwMSwgMHhkYSwgMHg3YSwgMHhjMSwgMHg1MSwgMHg5NCwKKyAgICAweGM4LCAweDA5LCAweGM4LCAweDA2LCAweGM5LCAweDA3LCAweGM2LCAweDA2LAorICAgIDB4YzEsIDB4MDksIDB4OWEsIDB4MDYsIDB4MTEsIDB4MDIsIDB4MDksIDB4MDIsCisgICAgMHhjOCwgMHgxNywgMHgwOCwgMHgwMCwgMHgwMSwgMHhkYSwgMHg3YSwgMHhjMSwKKyAgICAweDUxLCAweDk0LCAweGU3LCAweDA1LCAweDAwLCAweGMwLCAweDk3LCAweGNmLAorICAgIDB4ZTcsIDB4NTcsIDB4MDAsIDB4MDAsIDB4NzYsIDB4MDYsIDB4OTcsIDB4YzAsCisgICAgMHg5ZiwgMHhhZiwgMHgwNCwgMHgwMCwgMHhlNywgMHgwOSwgMHhiZSwgMHgwNiwKKyAgICAweGJhLCAweDA2LCAweGU3LCAweDU3LCAweGZmLCAweGZmLCAweGJhLCAweDA2LAorICAgIDB4MDQsIDB4YzEsIDB4ZTcsIDB4MDcsIDB4MTAsIDB4MGIsIDB4YjgsIDB4MDYsCisgICAgMHg5NywgMHhjZiwgMHhlNywgMHgxNywgMHgzMiwgMHgwMCwgMHhiYSwgMHgwNiwKKyAgICAweGU3LCAweDY3LCAweGZmLCAweDA3LCAweGJhLCAweDA2LCAweGU3LCAweDA3LAorICAgIDB4NDYsIDB4MGIsIDB4YjgsIDB4MDYsIDB4OTcsIDB4Y2YsIDB4ZTcsIDB4NTcsCisgICAgMHgwMCwgMHgwMCwgMHhjMCwgMHgwNiwgMHgyMywgMHhjMCwgMHhlNywgMHgwNywKKyAgICAweDA0LCAweDAwLCAweDkwLCAweGMwLCAweGU3LCAweDA3LCAweDAwLCAweDgwLAorICAgIDB4ODAsIDB4YzAsIDB4ZTcsIDB4MDcsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YzAsCisgICAgMHhlNywgMHgwNywgMHgwMCwgMHg4MCwgMHg4MCwgMHhjMCwgMHhjMCwgMHgwNywKKyAgICAweDAwLCAweDAwLCAweGMwLCAweDA3LCAweDAwLCAweDAwLCAweGMwLCAweDA3LAorICAgIDB4MDAsIDB4MDAsIDB4ZTcsIDB4MDcsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YzAsCisgICAgMHhlNywgMHgwNywgMHgwMCwgMHg4MCwgMHg4MCwgMHhjMCwgMHhlNywgMHgwNywKKyAgICAweDAwLCAweDgwLCAweDQwLCAweGMwLCAweGMwLCAweDA3LCAweDAwLCAweDAwLAorICAgIDB4ZTcsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YzAsIDB4ZTcsIDB4MDcsCisgICAgMHgwMCwgMHgwMCwgMHg4MCwgMHhjMCwgMHhlNywgMHgwNywgMHgwNCwgMHgwMCwKKyAgICAweDkwLCAweGMwLCAweGU3LCAweDA3LCAweDAwLCAweDAyLCAweDQwLCAweGMwLAorICAgIDB4ZTcsIDB4MDcsIDB4MGMsIDB4MDIsIDB4NDAsIDB4YzAsIDB4ZTcsIDB4MDcsCisgICAgMHgwMCwgMHgwMCwgMHhjMCwgMHgwNiwgMHhlNywgMHgwNywgMHgwMCwgMHgwMCwKKyAgICAweGI4LCAweDA2LCAweGU3LCAweDA3LCAweDAwLCAweDAwLCAweGQyLCAweDA2LAorICAgIDB4ZDcsIDB4MDksIDB4MDAsIDB4YzAsIDB4YzEsIDB4ZGYsIDB4OWYsIDB4YWYsCisgICAgMHgzNCwgMHgwMiwgMHhlNywgMHgwNSwgMHgwMCwgMHhjMCwgMHg5ZiwgMHhhZiwKKyAgICAweGM0LCAweDAxLCAweDk3LCAweGNmLCAweGQ3LCAweDA5LCAweDAwLCAweGMwLAorICAgIDB4MTcsIDB4MDAsIDB4MTcsIDB4MDIsIDB4OTcsIDB4MDIsIDB4ZTcsIDB4NTcsCisgICAgMHgwMCwgMHgwMCwgMHhhOCwgMHgwNiwgMHgwNiwgMHhjMCwgMHhjMCwgMHgwOSwKKyAgICAweDkyLCAweGMwLCAweGMwLCAweDc3LCAweDA5LCAweDAyLCAweDlmLCAweGMxLAorICAgIDB4NWMsIDB4MDUsIDB4OWYsIDB4Y2YsIDB4MzIsIDB4MDYsIDB4ZDcsIDB4MDksCisgICAgMHgwZSwgMHhjMCwgMHhlNywgMHgwNywgMHgwMCwgMHgwMCwgMHgwZSwgMHhjMCwKKyAgICAweDlmLCAweGFmLCAweDAyLCAweDBjLCAweGU3LCAweDA1LCAweDBlLCAweGMwLAorICAgIDB4OTcsIDB4Y2YsIDB4ZDcsIDB4MDksIDB4MDAsIDB4YzAsIDB4MTcsIDB4MDIsCisgICAgMHhjOCwgMHgwOSwgMHhiMCwgMHhjMCwgMHhlNywgMHg2NywgMHhmZSwgMHg3ZiwKKyAgICAweGIwLCAweGMwLCAweGM4LCAweDc3LCAweDAwLCAweDIwLCAweDlmLCAweGMxLAorICAgIDB4NjQsIDB4ZWIsIDB4ZTcsIDB4NTcsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsCisgICAgMHg5ZiwgMHhjMSwgMHg4MCwgMHhlYiwgMHhjOCwgMHg5OSwgMHhjYSwgMHgwMiwKKyAgICAweGM4LCAweDY3LCAweDA0LCAweDAwLCAweDlmLCAweGMxLCAweDk2LCAweGViLAorICAgIDB4OWYsIDB4Y2YsIDB4NGMsIDB4ZWIsIDB4ZTcsIDB4MDcsIDB4MDAsIDB4MDAsCisgICAgMHhhNiwgMHhjMCwgMHhlNywgMHgwOSwgMHhiMCwgMHhjMCwgMHhjOCwgMHgwMiwKKyAgICAweGU3LCAweDA3LCAweDAzLCAweDAwLCAweGIwLCAweGMwLCAweDk3LCAweGNmLAorICAgIDB4YzAsIDB4MDksIDB4YjAsIDB4MDYsIDB4YzAsIDB4MzcsIDB4MDEsIDB4MDAsCisgICAgMHg5NywgMHhjOSwgMHhjOSwgMHgwOSwgMHhiMiwgMHgwNiwgMHgwMiwgMHgwMCwKKyAgICAweDQxLCAweDkwLCAweDQ4LCAweDAyLCAweGM5LCAweDE3LCAweDA2LCAweDAwLAorICAgIDB4OWYsIDB4YWYsIDB4MDgsIDB4MDQsIDB4OWYsIDB4YTIsIDB4NzIsIDB4MGMsCisgICAgMHgwMiwgMHhkYSwgMHg3NywgMHhjMSwgMHg0MSwgMHg2MCwgMHg3MSwgMHhjMSwKKyAgICAweDk3LCAweGNmLCAweDE3LCAweDAyLCAweDU3LCAweDAyLCAweDQzLCAweDA0LAorICAgIDB4MjEsIDB4MDQsIDB4ZTAsIDB4MDAsIDB4NDMsIDB4MDQsIDB4MjEsIDB4MDQsCisgICAgMHhlMCwgMHgwMCwgMHg0MywgMHgwNCwgMHgyMSwgMHgwNCwgMHhlMCwgMHgwMCwKKyAgICAweGMxLCAweDA3LCAweDAxLCAweDAwLCAweGM5LCAweDA1LCAweGM4LCAweDA1LAorICAgIDB4OTcsIDB4Y2YsIDB4ZTcsIDB4MDcsIDB4MDEsIDB4MDAsIDB4OGUsIDB4MDYsCisgICAgMHhjOCwgMHgwNywgMHg4NiwgMHgwNiwgMHhlNywgMHgwNywgMHgwMCwgMHgwMCwKKyAgICAweDg2LCAweDA2LCAweGU3LCAweDA3LCAweDEwLCAweDA4LCAweDg4LCAweDA2LAorICAgIDB4ZTcsIDB4MDcsIDB4MDQsIDB4MDAsIDB4OGEsIDB4MDYsIDB4ZTcsIDB4MDcsCisgICAgMHhiYywgMHgwYywgMHg4YywgMHgwNiwgMHhjMSwgMHgwNywgMHgwMywgMHg4MCwKKyAgICAweDUwLCAweGFmLCAweDk3LCAweGNmLCAweGU3LCAweDA3LCAweDAwLCAweDAwLAorICAgIDB4OGUsIDB4MDYsIDB4OTcsIDB4Y2YsCisgICAgMHgwMCwgMHgwMAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICBrYXdldGhfbmV3X2NvZGVfZml4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBfX3U4IGthd2V0aF9uZXdfY29kZV9maXhbXSA9IAoreworICAgIDB4QjYsIDB4QzMsIDB4QUEsIDB4QkIsIDB4Q0MsIDB4REQsCisgICAgMHgwMiwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgyYywgMHgwMCwKKyAgICAweDM0LCAweDAwLCAweDNjLCAweDAwLCAweDQwLCAweDAwLCAweDQ4LCAweDAwLAorICAgIDB4NTQsIDB4MDAsIDB4NTgsIDB4MDAsIDB4NWUsIDB4MDAsIDB4NjQsIDB4MDAsCisgICAgMHg2OCwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2YywgMHgwMCwgMHg3MiwgMHgwMCwKKyAgICAweDc2LCAweDAwLCAweDdjLCAweDAwLCAweDgwLCAweDAwLCAweDg2LCAweDAwLAorICAgIDB4OGEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4OTQsIDB4MDAsIDB4OTgsIDB4MDAsCisgICAgMHg5ZSwgMHgwMCwgMHhhNiwgMHgwMCwgMHhhYSwgMHgwMCwgMHhiMCwgMHgwMCwKKyAgICAweGI0LCAweDAwLCAweGI4LCAweDAwLCAweGMwLCAweDAwLCAweGM2LCAweDAwLAorICAgIDB4Y2EsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4ZDgsIDB4MDAsCisgICAgMHhlMCwgMHgwMCwgMHhkZSwgMHgwMCwgMHhlOCwgMHgwMCwgMHhmMCwgMHgwMCwKKyAgICAweGZjLCAweDAwLCAweDA0LCAweDAxLCAweDBhLCAweDAxLCAweDE4LCAweDAxLAorICAgIDB4MjIsIDB4MDEsIDB4MjgsIDB4MDEsIDB4M2EsIDB4MDEsIDB4M2UsIDB4MDEsCisgICAgMHg3ZSwgMHgwMSwgMHg5OCwgMHgwMSwgMHg5YywgMHgwMSwgMHhhMiwgMHgwMSwKKyAgICAweGFjLCAweDAxLCAweGIyLCAweDAxLCAweGJhLCAweDAxLCAweGMwLCAweDAxLAorICAgIDB4YzgsIDB4MDEsIDB4ZDAsIDB4MDEsIDB4ZDYsIDB4MDEsIDB4ZjQsIDB4MDEsCisgICAgMHhmYywgMHgwMSwgMHgwOCwgMHgwMiwgMHgxNiwgMHgwMiwgMHgxYSwgMHgwMiwKKyAgICAweDIyLCAweDAyLCAweDJhLCAweDAyLCAweDJlLCAweDAyLCAweDNlLCAweDAyLAorICAgIDB4NDQsIDB4MDIsIDB4NGEsIDB4MDIsIDB4NTAsIDB4MDIsIDB4NjQsIDB4MDIsCisgICAgMHg2MiwgMHgwMiwgMHg2YywgMHgwMiwgMHg3MiwgMHgwMiwgMHg4NiwgMHgwMiwKKyAgICAweDhjLCAweDAyLCAweDkwLCAweDAyLCAweDllLCAweDAyLCAweGJjLCAweDAyLAorICAgIDB4ZDAsIDB4MDIsIDB4ZDgsIDB4MDIsIDB4ZGMsIDB4MDIsIDB4ZTAsIDB4MDIsCisgICAgMHhlOCwgMHgwMiwgMHhlNiwgMHgwMiwgMHhmNCwgMHgwMiwgMHhmZSwgMHgwMiwKKyAgICAweDA0LCAweDAzLCAweDBjLCAweDAzLCAweDI4LCAweDAzLCAweDdjLCAweDAzLAorICAgIDB4OTAsIDB4MDMsIDB4OTQsIDB4MDMsIDB4OWMsIDB4MDMsIDB4YTIsIDB4MDMsCisgICAgMHhjMCwgMHgwMywgMHhkMCwgMHgwMywgMHhkNCwgMHgwMywgMHhlZSwgMHgwMywKKyAgICAweGZhLCAweDAzLCAweGZlLCAweDAzLCAweDJlLCAweDA0LCAweDMyLCAweDA0LAorICAgIDB4M2MsIDB4MDQsIDB4NDAsIDB4MDQsIDB4NGUsIDB4MDQsIDB4NzYsIDB4MDQsCisgICAgMHg3YywgMHgwNCwgMHg4NCwgMHgwNCwgMHg4YSwgMHgwNCwgMHg4ZSwgMHgwNCwKKyAgICAweGE2LCAweDA0LCAweGIwLCAweDA0LCAweGI4LCAweDA0LCAweGJlLCAweDA0LAorICAgIDB4ZDIsIDB4MDQsIDB4ZGMsIDB4MDQsIDB4ZWUsIDB4MDQsIDB4MTAsIDB4MDUsCisgICAgMHgxYSwgMHgwNSwgMHgyNCwgMHgwNSwgMHgyYSwgMHgwNSwgMHgzNiwgMHgwNSwKKyAgICAweDM0LCAweDA1LCAweDNjLCAweDA1LCAweDQyLCAweDA1LCAweDY0LCAweDA1LAorICAgIDB4NmEsIDB4MDUsIDB4NmUsIDB4MDUsIDB4ODYsIDB4MDUsIDB4MjIsIDB4MDYsCisgICAgMHgyNiwgMHgwNiwgMHgyYywgMHgwNiwgMHgzMCwgMHgwNiwgMHg0MiwgMHgwNiwKKyAgICAweDRhLCAweDA2LCAweDRlLCAweDA2LCAweDU2LCAweDA2LCAweDU0LCAweDA2LAorICAgIDB4NWEsIDB4MDYsIDB4NjAsIDB4MDYsIDB4NjYsIDB4MDYsIDB4ZTgsIDB4MDYsCisgICAgMHhlZSwgMHgwNiwgMHhmNCwgMHgwNiwgMHgxNiwgMHgwNywgMHgyNiwgMHgwNywKKyAgICAweDJjLCAweDA3LCAweDMyLCAweDA3LCAweDM2LCAweDA3LCAweDNhLCAweDA3LAorICAgIDB4M2UsIDB4MDcsIDB4NTIsIDB4MDcsIDB4NTYsIDB4MDcsIDB4NWEsIDB4MDcsCisgICAgMHg2NCwgMHgwNywgMHg3NiwgMHgwNywgMHg3YSwgMHgwNywgMHg4MCwgMHgwNywKKyAgICAweDg0LCAweDA3LCAweDhhLCAweDA3LCAweDllLCAweDA3LCAweGEyLCAweDA3LAorICAgIDB4ZGEsIDB4MDcsIDB4ZGUsIDB4MDcsIDB4ZTIsIDB4MDcsIDB4ZTYsIDB4MDcsCisgICAgMHhlYSwgMHgwNywgMHhlZSwgMHgwNywgMHhmMiwgMHgwNywgMHhmNiwgMHgwNywKKyAgICAweDBlLCAweDA4LCAweDE2LCAweDA4LCAweDE4LCAweDA4LCAweDFhLCAweDA4LAorICAgIDB4MWMsIDB4MDgsIDB4MWUsIDB4MDgsIDB4MjAsIDB4MDgsIDB4MjIsIDB4MDgsCisgICAgMHgyNCwgMHgwOCwgMHgyNiwgMHgwOCwgMHgyOCwgMHgwOCwgMHgyYSwgMHgwOCwKKyAgICAweDJjLCAweDA4LCAweDJlLCAweDA4LCAweDMyLCAweDA4LCAweDNhLCAweDA4LAorICAgIDB4NDYsIDB4MDgsIDB4NGUsIDB4MDgsIDB4NTQsIDB4MDgsIDB4NWUsIDB4MDgsCisgICAgMHg3OCwgMHgwOCwgMHg3ZSwgMHgwOCwgMHg4MiwgMHgwOCwgMHg4NiwgMHgwOCwKKyAgICAweDhjLCAweDA4LCAweDkwLCAweDA4LCAweDk4LCAweDA4LCAweDllLCAweDA4LAorICAgIDB4YTQsIDB4MDgsIDB4YWEsIDB4MDgsIDB4YjAsIDB4MDgsIDB4YWUsIDB4MDgsCisgICAgMHhiNCwgMHgwOCwgMHhiZSwgMHgwOCwgMHhjNCwgMHgwOCwgMHhjMiwgMHgwOCwKKyAgICAweGNhLCAweDA4LCAweGM4LCAweDA4LCAweGQ0LCAweDA4LCAweGU0LCAweDA4LAorICAgIDB4ZTgsIDB4MDgsIDB4ZjYsIDB4MDgsIDB4MTQsIDB4MDksIDB4MTIsIDB4MDksCisgICAgMHgxYSwgMHgwOSwgMHgyMCwgMHgwOSwgMHgyNiwgMHgwOSwgMHgyNCwgMHgwOSwKKyAgICAweDJhLCAweDA5LCAweDNlLCAweDA5LCAweDRjLCAweDA5LCAweDU2LCAweDA5LAorICAgIDB4NzAsIDB4MDksIDB4NzQsIDB4MDksIDB4NzgsIDB4MDksIDB4N2UsIDB4MDksCisgICAgMHg3YywgMHgwOSwgMHg4MiwgMHgwOSwgMHg5OCwgMHgwOSwgMHg5YywgMHgwOSwKKyAgICAweGEwLCAweDA5LCAweGE2LCAweDA5LCAweGI4LCAweDA5LCAweGRjLCAweDA5LAorICAgIDB4ZTgsIDB4MDksIDB4ZWMsIDB4MDksIDB4ZmMsIDB4MDksIDB4MTIsIDB4MGEsCisgICAgMHgxOCwgMHgwYSwgMHgxZSwgMHgwYSwgMHg0MiwgMHgwYSwgMHg0NiwgMHgwYSwKKyAgICAweDRlLCAweDBhLCAweDU0LCAweDBhLCAweDVhLCAweDBhLCAweDVlLCAweDBhLAorICAgIDB4NjgsIDB4MGEsIDB4NmUsIDB4MGEsIDB4NzIsIDB4MGEsIDB4NzgsIDB4MGEsCisgICAgMHg3NiwgMHgwYSwgMHg3YywgMHgwYSwgMHg4MCwgMHgwYSwgMHg4NCwgMHgwYSwKKyAgICAweDk0LCAweDBhLCAweGE0LCAweDBhLCAweGI4LCAweDBhLCAweGJlLCAweDBhLAorICAgIDB4YmMsIDB4MGEsIDB4YzIsIDB4MGEsIDB4YzgsIDB4MGEsIDB4YzYsIDB4MGEsCisgICAgMHhjYywgMHgwYSwgMHhkMCwgMHgwYSwgMHhkNCwgMHgwYSwgMHhkOCwgMHgwYSwKKyAgICAweGRjLCAweDBhLCAweGUwLCAweDBhLCAweGYyLCAweDBhLCAweGY2LCAweDBhLAorICAgIDB4ZmEsIDB4MGEsIDB4MTQsIDB4MGIsIDB4MWEsIDB4MGIsIDB4MjAsIDB4MGIsCisgICAgMHgxZSwgMHgwYiwgMHgyNiwgMHgwYiwgMHgyZSwgMHgwYiwgMHgyYywgMHgwYiwKKyAgICAweDM2LCAweDBiLCAweDNjLCAweDBiLCAweDQyLCAweDBiLCAweDQwLCAweDBiLAorICAgIDB4NGEsIDB4MGIsIDB4YWEsIDB4MGIsIDB4YjAsIDB4MGIsIDB4YjYsIDB4MGIsCisgICAgMHhjMCwgMHgwYiwgMHhjOCwgMHgwYiwgMHhkYSwgMHgwYiwgMHhlOCwgMHgwYiwKKyAgICAweGVjLCAweDBiLCAweGZhLCAweDBiLCAweDRhLCAweDBjLCAweDU0LCAweDBjLAorICAgIDB4NjIsIDB4MGMsIDB4NjYsIDB4MGMsIDB4OTYsIDB4MGMsIDB4OWEsIDB4MGMsCisgICAgMHhhMCwgMHgwYywgMHhhNiwgMHgwYywgMHhhNCwgMHgwYywgMHhhYywgMHgwYywKKyAgICAweGIyLCAweDBjLCAweGIwLCAweDBjLCAweGMwLCAweDBjLAorICAgIDB4MDAsIDB4MDAKK307CisKKworc3RhdGljIGNvbnN0IGludCBsZW5fa2F3ZXRoX3RyaWdnZXJfY29kZSA9IHNpemVvZihrYXdldGhfdHJpZ2dlcl9jb2RlKTsKK3N0YXRpYyBjb25zdCBpbnQgbGVuX2thd2V0aF90cmlnZ2VyX2NvZGVfZml4ID0gc2l6ZW9mKGthd2V0aF90cmlnZ2VyX2NvZGVfZml4KTsKK3N0YXRpYyBjb25zdCBpbnQgbGVuX2thd2V0aF9uZXdfY29kZSA9IHNpemVvZihrYXdldGhfbmV3X2NvZGUpOworc3RhdGljIGNvbnN0IGludCBsZW5fa2F3ZXRoX25ld19jb2RlX2ZpeCA9IHNpemVvZihrYXdldGhfbmV3X2NvZGVfZml4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmMgYi9kcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YzE5ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5jCkBAIC0wLDAgKzEsMTQwOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSBQZXRrbyBNYW5vbG92IChwZXRrYW5AdXNlcnMuc291cmNlZm9yZ2UubmV0KQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICoJQ2hhbmdlTG9nOgorICoJCS4uLi4JTW9zdCBvZiB0aGUgdGltZSBzcGVudCBvbiByZWFkaW5nIHNvdXJjZXMgJiBkb2NzLgorICoJCXYwLjIueAlGaXJzdCBvZmZpY2lhbCByZWxlYXNlIGZvciB0aGUgTGludXgga2VybmVsLgorICoJCXYwLjMuMAlCZXV0aWZpZWQgYW5kIHN0cnVjdHVyZWQsIHNvbWUgYnVncyBmaXhlZC4KKyAqCQl2MC4zLngJVVJCaWZ5aW5nIGJ1bGsgcmVxdWVzdHMgYW5kIGJ1Z2ZpeGluZy4gRmlyc3QgcmVsYXRpdmVseQorICoJCQlzdGFibGUgcmVsZWFzZS4gU3RpbGwgY2FuIHRvdWNoIGRldmljZSdzIHJlZ2lzdGVycyBvbmx5CisgKgkJCWZyb20gdG9wLWhhbHZlcy4KKyAqCQl2MC40LjAJQ29udHJvbCBtZXNzYWdlcyByZW1haW5lZCB1bnVyYmlmaWVkIGFyZSBub3cgVVJCcy4KKyAqCQkJTm93IHdlIGNhbiB0b3VjaCB0aGUgSFcgYXQgYW55IHRpbWUuCisgKgkJdjAuNC45CUNvbnRyb2wgdXJicyBhZ2FpbiB1c2UgcHJvY2VzcyBjb250ZXh0IHRvIHdhaXQuIEFyZ2guLi4KKyAqCQkJU29tZSBsb25nIHN0YW5kaW5nIGJ1Z3MgKGVuYWJsZV9uZXRfdHJhZmZpYykgZml4ZWQuCisgKgkJCUFsc28gbmFzdHkgdHJpY2sgYWJvdXQgcmVzdWJtaXRpbmcgY29udHJvbCB1cmIgZnJvbQorICoJCQlpbnRlcnJ1cHQgY29udGV4dCB1c2VkLiBQbGVhc2UgbGV0IG1lIGtub3cgaG93IGl0CisgKgkJCWJlaGF2ZXMuIFBlZ2FzdXMgSUkgc3VwcG9ydCBhZGRlZCBzaW5jZSB0aGlzIHZlcnNpb24uCisgKgkJCVRPRE86IHN1cHByZXNzaW5nIEhDRCB3YXJuaW5ncyBzcGV3YWdlIG9uIGRpc2Nvbm5lY3QuCisgKgkJdjAuNC4xMwlFdGhlcm5ldCBhZGRyZXNzIGlzIG5vdyBzZXQgYXQgcHJvYmUoKSwgbm90IGF0IG9wZW4oKQorICoJCQl0aW1lIGFzIHRoaXMgc2VlbXMgdG8gYnJlYWsgZGhjcGQuIAorICoJCXYwLjUuMAlicmFuY2ggdG8gMi41Lngga2VybmVscworICoJCXYwLjUuMQlldGh0b29sIHN1cHBvcnQgYWRkZWQKKyAqCQl2MC41LjUJcnggc29ja2V0IGJ1ZmZlcnMgYXJlIGluIGEgcG9vbCBhbmQgdGhlIHRoZWlyIGFsbG9jYXRpb24KKyAqIAkJCWlzIG91dCBvZiB0aGUgaW50ZXJydXB0IHJvdXRpbmUuCisgKi8KKworI3VuZGVmCURFQlVHCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlICJwZWdhc3VzLmgiCisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjYuMTIgKDIwMDUvMDEvMTMpIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJQZXRrbyBNYW5vbG92IDxwZXRrYW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlBlZ2FzdXMvUGVnYXN1cyBJSSBVU0IgRXRoZXJuZXQgZHJpdmVyIgorCitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZVtdID0gInBlZ2FzdXMiOworCisjdW5kZWYJUEVHQVNVU19XUklURV9FRVBST00KKyNkZWZpbmUJQk1TUl9NRURJQQkoQk1TUl8xMEhBTEYgfCBCTVNSXzEwRlVMTCB8IEJNU1JfMTAwSEFMRiB8IFwKKwkJCUJNU1JfMTAwRlVMTCB8IEJNU1JfQU5FR0NBUEFCTEUpCisKK3N0YXRpYyBpbnQgbG9vcGJhY2sgPSAwOworc3RhdGljIGludCBtaWlfbW9kZSA9IDA7CitzdGF0aWMgaW50IG11bHRpY2FzdF9maWx0ZXJfbGltaXQgPSAzMjsKKworc3RhdGljIHN0cnVjdCB1c2JfZXRoX2RldiB1c2JfZGV2X2lkW10gPSB7CisjZGVmaW5lCVBFR0FTVVNfREVWKHBuLCB2aWQsIHBpZCwgZmxhZ3MpCVwKKwl7Lm5hbWUgPSBwbiwgLnZlbmRvciA9IHZpZCwgLmRldmljZSA9IHBpZCwgLnByaXZhdGUgPSBmbGFnc30sCisjaW5jbHVkZSAicGVnYXN1cy5oIgorI3VuZGVmCVBFR0FTVVNfREVWCisJe05VTEwsIDAsIDAsIDB9Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcGVnYXN1c19pZHNbXSA9IHsKKyNkZWZpbmUJUEVHQVNVU19ERVYocG4sIHZpZCwgcGlkLCBmbGFncykgXAorCXsubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwgLmlkVmVuZG9yID0gdmlkLCAuaWRQcm9kdWN0ID0gcGlkfSwKKyNpbmNsdWRlICJwZWdhc3VzLmgiCisjdW5kZWYJUEVHQVNVU19ERVYKKwl7fQorfTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7Cittb2R1bGVfcGFyYW0obG9vcGJhY2ssIGJvb2wsIDApOworbW9kdWxlX3BhcmFtKG1paV9tb2RlLCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobG9vcGJhY2ssICJFbmFibGUgTUFDIGxvb3BiYWNrIG1vZGUgKGJpdCAwKSIpOworTU9EVUxFX1BBUk1fREVTQyhtaWlfbW9kZSwgIkVuYWJsZSBIb21lUE5BIG1vZGUgKGJpdCAwKSxkZWZhdWx0PU1JSSBtb2RlID0gMCIpOworCisvKiB1c2UgZXRodG9vbCB0byBjaGFuZ2UgdGhlIGxldmVsIGZvciBhbnkgZ2l2ZW4gZGV2aWNlICovCitzdGF0aWMgaW50IG1zZ19sZXZlbCA9IC0xOworbW9kdWxlX3BhcmFtIChtc2dfbGV2ZWwsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDIChtc2dfbGV2ZWwsICJPdmVycmlkZSBkZWZhdWx0IG1lc3NhZ2UgbGV2ZWwiKTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHBlZ2FzdXNfaWRzKTsKKworc3RhdGljIGludCB1cGRhdGVfZXRoX3JlZ3NfYXN5bmMocGVnYXN1c190ICopOworLyogQWFyZ2ghISEgSSBfcmVhbGx5XyBoYXRlIHN1Y2ggdHdlYWtzICovCitzdGF0aWMgdm9pZCBjdHJsX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcGVnYXN1c190ICpwZWdhc3VzID0gdXJiLT5jb250ZXh0OworCisJaWYgKCFwZWdhc3VzKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQlpZiAocGVnYXN1cy0+ZmxhZ3MgJiBFVEhfUkVHU19DSEFOR0UpIHsKKwkJCXBlZ2FzdXMtPmZsYWdzICY9IH5FVEhfUkVHU19DSEFOR0U7CisJCQlwZWdhc3VzLT5mbGFncyB8PSBFVEhfUkVHU19DSEFOR0VEOworCQkJdXBkYXRlX2V0aF9yZWdzX2FzeW5jKHBlZ2FzdXMpOworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworCWNhc2UgLUVJTlBST0dSRVNTOgorCQlyZXR1cm47CisJY2FzZSAtRU5PRU5UOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKKwkJCWRldl9lcnIoJnBlZ2FzdXMtPmludGYtPmRldiwgIiVzLCBzdGF0dXMgJWRcbiIsCisJCQkJX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJfQorCXBlZ2FzdXMtPmZsYWdzICY9IH5FVEhfUkVHU19DSEFOR0VEOworCXdha2VfdXAoJnBlZ2FzdXMtPmN0cmxfd2FpdCk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3JlZ2lzdGVycyhwZWdhc3VzX3QgKiBwZWdhc3VzLCBfX3UxNiBpbmR4LCBfX3UxNiBzaXplLAorCQkJIHZvaWQgKmRhdGEpCit7CisJaW50IHJldDsKKwljaGFyICpidWZmZXI7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwlidWZmZXIgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKSB7CisJCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQorCQkJZGV2X3dhcm4oJnBlZ2FzdXMtPmludGYtPmRldiwgIm91dCBvZiBtZW1vcnkgaW4gJXNcbiIsCisJCQkJCV9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlhZGRfd2FpdF9xdWV1ZSgmcGVnYXN1cy0+Y3RybF93YWl0LCAmd2FpdCk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworCXdoaWxlIChwZWdhc3VzLT5mbGFncyAmIEVUSF9SRUdTX0NIQU5HRUQpCisJCXNjaGVkdWxlKCk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJnBlZ2FzdXMtPmN0cmxfd2FpdCwgJndhaXQpOworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisKKwlwZWdhc3VzLT5kci5iUmVxdWVzdFR5cGUgPSBQRUdBU1VTX1JFUVRfUkVBRDsKKwlwZWdhc3VzLT5kci5iUmVxdWVzdCA9IFBFR0FTVVNfUkVRX0dFVF9SRUdTOworCXBlZ2FzdXMtPmRyLndWYWx1ZSA9IGNwdV90b19sZTE2KDApOworCXBlZ2FzdXMtPmRyLndJbmRleCA9IGNwdV90b19sZTE2cCgmaW5keCk7CisJcGVnYXN1cy0+ZHIud0xlbmd0aCA9IGNwdV90b19sZTE2cCgmc2l6ZSk7CisJcGVnYXN1cy0+Y3RybF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBzaXplOworCisJdXNiX2ZpbGxfY29udHJvbF91cmIocGVnYXN1cy0+Y3RybF91cmIsIHBlZ2FzdXMtPnVzYiwKKwkJCSAgICAgdXNiX3JjdmN0cmxwaXBlKHBlZ2FzdXMtPnVzYiwgMCksCisJCQkgICAgIChjaGFyICopICZwZWdhc3VzLT5kciwKKwkJCSAgICAgYnVmZmVyLCBzaXplLCBjdHJsX2NhbGxiYWNrLCBwZWdhc3VzKTsKKworCWFkZF93YWl0X3F1ZXVlKCZwZWdhc3VzLT5jdHJsX3dhaXQsICZ3YWl0KTsKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisKKwkvKiB1c2luZyBBVE9NSUMsIHdlJ2QgbmV2ZXIgd2FrZSB1cCBpZiB3ZSBzbGVwdCAqLworCWlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIocGVnYXN1cy0+Y3RybF91cmIsIEdGUF9BVE9NSUMpKSkgeworCQlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKKwkJCWRldl9lcnIoJnBlZ2FzdXMtPmludGYtPmRldiwgIiVzLCBzdGF0dXMgJWRcbiIsCisJCQkJCV9fRlVOQ1RJT05fXywgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJc2NoZWR1bGUoKTsKK291dDoKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcGVnYXN1cy0+Y3RybF93YWl0LCAmd2FpdCk7CisJbWVtY3B5KGRhdGEsIGJ1ZmZlciwgc2l6ZSk7CisJa2ZyZWUoYnVmZmVyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3JlZ2lzdGVycyhwZWdhc3VzX3QgKiBwZWdhc3VzLCBfX3UxNiBpbmR4LCBfX3UxNiBzaXplLAorCQkJIHZvaWQgKmRhdGEpCit7CisJaW50IHJldDsKKwljaGFyICpidWZmZXI7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwlidWZmZXIgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKSB7CisJCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQorCQkJZGV2X3dhcm4oJnBlZ2FzdXMtPmludGYtPmRldiwgIm91dCBvZiBtZW1vcnkgaW4gJXNcbiIsCisJCQkJCV9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1jcHkoYnVmZmVyLCBkYXRhLCBzaXplKTsKKworCWFkZF93YWl0X3F1ZXVlKCZwZWdhc3VzLT5jdHJsX3dhaXQsICZ3YWl0KTsKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJd2hpbGUgKHBlZ2FzdXMtPmZsYWdzICYgRVRIX1JFR1NfQ0hBTkdFRCkKKwkJc2NoZWR1bGUoKTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcGVnYXN1cy0+Y3RybF93YWl0LCAmd2FpdCk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKworCXBlZ2FzdXMtPmRyLmJSZXF1ZXN0VHlwZSA9IFBFR0FTVVNfUkVRVF9XUklURTsKKwlwZWdhc3VzLT5kci5iUmVxdWVzdCA9IFBFR0FTVVNfUkVRX1NFVF9SRUdTOworCXBlZ2FzdXMtPmRyLndWYWx1ZSA9IGNwdV90b19sZTE2KDApOworCXBlZ2FzdXMtPmRyLndJbmRleCA9IGNwdV90b19sZTE2cCgmaW5keCk7CisJcGVnYXN1cy0+ZHIud0xlbmd0aCA9IGNwdV90b19sZTE2cCgmc2l6ZSk7CisJcGVnYXN1cy0+Y3RybF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBzaXplOworCisJdXNiX2ZpbGxfY29udHJvbF91cmIocGVnYXN1cy0+Y3RybF91cmIsIHBlZ2FzdXMtPnVzYiwKKwkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKHBlZ2FzdXMtPnVzYiwgMCksCisJCQkgICAgIChjaGFyICopICZwZWdhc3VzLT5kciwKKwkJCSAgICAgYnVmZmVyLCBzaXplLCBjdHJsX2NhbGxiYWNrLCBwZWdhc3VzKTsKKworCWFkZF93YWl0X3F1ZXVlKCZwZWdhc3VzLT5jdHJsX3dhaXQsICZ3YWl0KTsKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisKKwlpZiAoKHJldCA9IHVzYl9zdWJtaXRfdXJiKHBlZ2FzdXMtPmN0cmxfdXJiLCBHRlBfQVRPTUlDKSkpIHsKKwkJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCisJCQlkZXZfZXJyKCZwZWdhc3VzLT5pbnRmLT5kZXYsICIlcywgc3RhdHVzICVkXG4iLAorCQkJCQlfX0ZVTkNUSU9OX18sIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXNjaGVkdWxlKCk7CitvdXQ6CisJcmVtb3ZlX3dhaXRfcXVldWUoJnBlZ2FzdXMtPmN0cmxfd2FpdCwgJndhaXQpOworCWtmcmVlKGJ1ZmZlcik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNldF9yZWdpc3RlcihwZWdhc3VzX3QgKiBwZWdhc3VzLCBfX3UxNiBpbmR4LCBfX3U4IGRhdGEpCit7CisJaW50IHJldDsKKwljaGFyICp0bXA7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwl0bXAgPSBrbWFsbG9jKDEsIEdGUF9LRVJORUwpOworCWlmICghdG1wKSB7CisJCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQorCQkJZGV2X3dhcm4oJnBlZ2FzdXMtPmludGYtPmRldiwgIm91dCBvZiBtZW1vcnkgaW4gJXNcbiIsCisJCQkJCV9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1jcHkodG1wLCAmZGF0YSwgMSk7CisJYWRkX3dhaXRfcXVldWUoJnBlZ2FzdXMtPmN0cmxfd2FpdCwgJndhaXQpOworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwl3aGlsZSAocGVnYXN1cy0+ZmxhZ3MgJiBFVEhfUkVHU19DSEFOR0VEKQorCQlzY2hlZHVsZSgpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZwZWdhc3VzLT5jdHJsX3dhaXQsICZ3YWl0KTsKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCisJcGVnYXN1cy0+ZHIuYlJlcXVlc3RUeXBlID0gUEVHQVNVU19SRVFUX1dSSVRFOworCXBlZ2FzdXMtPmRyLmJSZXF1ZXN0ID0gUEVHQVNVU19SRVFfU0VUX1JFRzsKKwlwZWdhc3VzLT5kci53VmFsdWUgPSBjcHVfdG9fbGUxNihkYXRhKTsKKwlwZWdhc3VzLT5kci53SW5kZXggPSBjcHVfdG9fbGUxNnAoJmluZHgpOworCXBlZ2FzdXMtPmRyLndMZW5ndGggPSBjcHVfdG9fbGUxNigxKTsKKwlwZWdhc3VzLT5jdHJsX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDE7CisKKwl1c2JfZmlsbF9jb250cm9sX3VyYihwZWdhc3VzLT5jdHJsX3VyYiwgcGVnYXN1cy0+dXNiLAorCQkJICAgICB1c2Jfc25kY3RybHBpcGUocGVnYXN1cy0+dXNiLCAwKSwKKwkJCSAgICAgKGNoYXIgKikgJnBlZ2FzdXMtPmRyLAorCQkJICAgICAmdG1wLCAxLCBjdHJsX2NhbGxiYWNrLCBwZWdhc3VzKTsKKworCWFkZF93YWl0X3F1ZXVlKCZwZWdhc3VzLT5jdHJsX3dhaXQsICZ3YWl0KTsKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisKKwlpZiAoKHJldCA9IHVzYl9zdWJtaXRfdXJiKHBlZ2FzdXMtPmN0cmxfdXJiLCBHRlBfQVRPTUlDKSkpIHsKKwkJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCisJCQlkZXZfZXJyKCZwZWdhc3VzLT5pbnRmLT5kZXYsICIlcywgc3RhdHVzICVkXG4iLAorCQkJCQlfX0ZVTkNUSU9OX18sIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXNjaGVkdWxlKCk7CitvdXQ6CisJcmVtb3ZlX3dhaXRfcXVldWUoJnBlZ2FzdXMtPmN0cmxfd2FpdCwgJndhaXQpOworCWtmcmVlKHRtcCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9ldGhfcmVnc19hc3luYyhwZWdhc3VzX3QgKiBwZWdhc3VzKQoreworCWludCByZXQ7CisKKwlwZWdhc3VzLT5kci5iUmVxdWVzdFR5cGUgPSBQRUdBU1VTX1JFUVRfV1JJVEU7CisJcGVnYXN1cy0+ZHIuYlJlcXVlc3QgPSBQRUdBU1VTX1JFUV9TRVRfUkVHUzsKKwlwZWdhc3VzLT5kci53VmFsdWUgPSAwOworCXBlZ2FzdXMtPmRyLndJbmRleCA9IGNwdV90b19sZTE2KEV0aEN0cmwwKTsKKwlwZWdhc3VzLT5kci53TGVuZ3RoID0gY3B1X3RvX2xlMTYoMyk7CisJcGVnYXN1cy0+Y3RybF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAzOworCisJdXNiX2ZpbGxfY29udHJvbF91cmIocGVnYXN1cy0+Y3RybF91cmIsIHBlZ2FzdXMtPnVzYiwKKwkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKHBlZ2FzdXMtPnVzYiwgMCksCisJCQkgICAgIChjaGFyICopICZwZWdhc3VzLT5kciwKKwkJCSAgICAgcGVnYXN1cy0+ZXRoX3JlZ3MsIDMsIGN0cmxfY2FsbGJhY2ssIHBlZ2FzdXMpOworCisJaWYgKChyZXQgPSB1c2Jfc3VibWl0X3VyYihwZWdhc3VzLT5jdHJsX3VyYiwgR0ZQX0FUT01JQykpKQorCQlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKKwkJCWRldl9lcnIoJnBlZ2FzdXMtPmludGYtPmRldiwgIiVzLCBzdGF0dXMgJWRcbiIsCisJCQkJCV9fRlVOQ1RJT05fXywgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9taWlfd29yZChwZWdhc3VzX3QgKiBwZWdhc3VzLCBfX3U4IHBoeSwgX191OCBpbmR4LCBfX3UxNiAqIHJlZ2QpCit7CisJaW50IGk7CisJX191OCBkYXRhWzRdID0geyBwaHksIDAsIDAsIGluZHggfTsKKwlfX2xlMTYgcmVnZGk7CisJaW50IHJldDsKKworCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBQaHlDdHJsLCAwKTsKKwlyZXQgPSBzZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIFBoeUFkZHIsIHNpemVvZiAoZGF0YSksIGRhdGEpOworCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBQaHlDdHJsLCAoaW5keCB8IFBIWV9SRUFEKSk7CisJZm9yIChpID0gMDsgaSA8IFJFR19USU1FT1VUOyBpKyspIHsKKwkJcmV0ID0gZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBQaHlDdHJsLCAxLCBkYXRhKTsKKwkJaWYgKGRhdGFbMF0gJiBQSFlfRE9ORSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA8IFJFR19USU1FT1VUKSB7CisJCXJldCA9IGdldF9yZWdpc3RlcnMocGVnYXN1cywgUGh5RGF0YSwgMiwgJnJlZ2RpKTsKKwkJKnJlZ2QgPSBsZTE2X3RvX2NwdShyZWdkaSk7CisJCXJldHVybiAxOworCX0KKwlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKKwkJZGV2X3dhcm4oJnBlZ2FzdXMtPmludGYtPmRldiwgImZhaWwgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvYykKK3sKKwlwZWdhc3VzX3QgKnBlZ2FzdXMgPSAocGVnYXN1c190ICopIG5ldGRldl9wcml2KGRldik7CisJdTE2IHJlczsKKworCXJlYWRfbWlpX3dvcmQocGVnYXN1cywgcGh5X2lkLCBsb2MsICZyZXMpOworCXJldHVybiAoaW50KXJlczsKK30KKworc3RhdGljIGludCB3cml0ZV9taWlfd29yZChwZWdhc3VzX3QgKiBwZWdhc3VzLCBfX3U4IHBoeSwgX191OCBpbmR4LCBfX3UxNiByZWdkKQoreworCWludCBpOworCV9fdTggZGF0YVs0XSA9IHsgcGh5LCAwLCAwLCBpbmR4IH07CisJaW50IHJldDsKKworCWRhdGFbMV0gPSAodTgpIHJlZ2Q7CisJZGF0YVsyXSA9ICh1OCkgKHJlZ2QgPj4gOCk7CisJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFBoeUN0cmwsIDApOworCXJldCA9IHNldF9yZWdpc3RlcnMocGVnYXN1cywgUGh5QWRkciwgc2l6ZW9mKGRhdGEpLCBkYXRhKTsKKwlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgUGh5Q3RybCwgKGluZHggfCBQSFlfV1JJVEUpKTsKKwlmb3IgKGkgPSAwOyBpIDwgUkVHX1RJTUVPVVQ7IGkrKykgeworCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIFBoeUN0cmwsIDEsIGRhdGEpOworCQlpZiAoZGF0YVswXSAmIFBIWV9ET05FKQorCQkJYnJlYWs7CisJfQorCWlmIChpIDwgUkVHX1RJTUVPVVQpCisJCXJldHVybiAwOworCisJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCisJCWRldl93YXJuKCZwZWdhc3VzLT5pbnRmLT5kZXYsICJmYWlsICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2MsIGludCB2YWwpCit7CisJcGVnYXN1c190ICpwZWdhc3VzID0gKHBlZ2FzdXNfdCAqKSBuZXRkZXZfcHJpdihkZXYpOworCisJd3JpdGVfbWlpX3dvcmQocGVnYXN1cywgcGh5X2lkLCBsb2MsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9lcHJvbV93b3JkKHBlZ2FzdXNfdCAqIHBlZ2FzdXMsIF9fdTggaW5kZXgsIF9fdTE2ICogcmV0ZGF0YSkKK3sKKwlpbnQgaTsKKwlfX3U4IHRtcDsKKwlfX2xlMTYgcmV0ZGF0YWk7CisJaW50IHJldDsKKworCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBFcHJvbUN0cmwsIDApOworCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBFcHJvbU9mZnNldCwgaW5kZXgpOworCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBFcHJvbUN0cmwsIEVQUk9NX1JFQUQpOworCisJZm9yIChpID0gMDsgaSA8IFJFR19USU1FT1VUOyBpKyspIHsKKwkJcmV0ID0gZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFcHJvbUN0cmwsIDEsICZ0bXApOworCQlpZiAodG1wICYgRVBST01fRE9ORSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA8IFJFR19USU1FT1VUKSB7CisJCXJldCA9IGdldF9yZWdpc3RlcnMocGVnYXN1cywgRXByb21EYXRhLCAyLCAmcmV0ZGF0YWkpOworCQkqcmV0ZGF0YSA9IGxlMTZfdG9fY3B1KHJldGRhdGFpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCisJCWRldl93YXJuKCZwZWdhc3VzLT5pbnRmLT5kZXYsICJmYWlsICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCXJldHVybiAtMTsKK30KKworI2lmZGVmCVBFR0FTVVNfV1JJVEVfRUVQUk9NCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2Vwcm9tX3dyaXRlKHBlZ2FzdXNfdCAqIHBlZ2FzdXMpCit7CisJX191OCB0bXA7CisJaW50IHJldDsKKworCXJldCA9IGdldF9yZWdpc3RlcnMocGVnYXN1cywgRXRoQ3RybDIsIDEsICZ0bXApOworCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBFdGhDdHJsMiwgdG1wIHwgRVBST01fV1JfRU5BQkxFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfZXByb21fd3JpdGUocGVnYXN1c190ICogcGVnYXN1cykKK3sKKwlfX3U4IHRtcDsKKwlpbnQgcmV0OworCisJcmV0ID0gZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBFdGhDdHJsMiwgMSwgJnRtcCk7CisJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEVwcm9tQ3RybCwgMCk7CisJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEV0aEN0cmwyLCB0bXAgJiB+RVBST01fV1JfRU5BQkxFKTsKK30KKworc3RhdGljIGludCB3cml0ZV9lcHJvbV93b3JkKHBlZ2FzdXNfdCAqIHBlZ2FzdXMsIF9fdTggaW5kZXgsIF9fdTE2IGRhdGEpCit7CisJaW50IGk7CisJX191OCB0bXAsIGRbNF0gPSB7IDB4M2YsIDAsIDAsIEVQUk9NX1dSSVRFIH07CisJaW50IHJldDsKKworCXJldCA9IHNldF9yZWdpc3RlcnMocGVnYXN1cywgRXByb21PZmZzZXQsIDQsIGQpOworCWVuYWJsZV9lcHJvbV93cml0ZShwZWdhc3VzKTsKKwlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgRXByb21PZmZzZXQsIGluZGV4KTsKKwlyZXQgPSBzZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEVwcm9tRGF0YSwgMiwgJmRhdGEpOworCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBFcHJvbUN0cmwsIEVQUk9NX1dSSVRFKTsKKworCWZvciAoaSA9IDA7IGkgPCBSRUdfVElNRU9VVDsgaSsrKSB7CisJCXJldCA9IGdldF9yZWdpc3RlcnMocGVnYXN1cywgRXByb21DdHJsLCAxLCAmdG1wKTsKKwkJaWYgKHRtcCAmIEVQUk9NX0RPTkUpCisJCQlicmVhazsKKwl9CisJZGlzYWJsZV9lcHJvbV93cml0ZShwZWdhc3VzKTsKKwlpZiAoaSA8IFJFR19USU1FT1VUKQorCQlyZXR1cm4gMDsKKwlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKKwkJZGV2X3dhcm4oJnBlZ2FzdXMtPmludGYtPmRldiwgImZhaWwgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIC0xOworfQorI2VuZGlmCQkJCS8qIFBFR0FTVVNfV1JJVEVfRUVQUk9NICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9kZV9pZChwZWdhc3VzX3QgKiBwZWdhc3VzLCBfX3U4ICogaWQpCit7CisJaW50IGk7CisJX191MTYgdzE2OworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlyZWFkX2Vwcm9tX3dvcmQocGVnYXN1cywgaSwgJncxNik7CisJCSgoX19sZTE2ICopIGlkKVtpXSA9IGNwdV90b19sZTE2cCgmdzE2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF9ldGhlcm5ldF9hZGRyKHBlZ2FzdXNfdCAqIHBlZ2FzdXMpCit7CisJX191OCBub2RlX2lkWzZdOworCWludCByZXQ7CisKKwlnZXRfbm9kZV9pZChwZWdhc3VzLCBub2RlX2lkKTsKKwlyZXQgPSBzZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEV0aElELCBzaXplb2YgKG5vZGVfaWQpLCBub2RlX2lkKTsKKwltZW1jcHkocGVnYXN1cy0+bmV0LT5kZXZfYWRkciwgbm9kZV9pZCwgc2l6ZW9mIChub2RlX2lkKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJlc2V0X21hYyhwZWdhc3VzX3QgKiBwZWdhc3VzKQoreworCV9fdTggZGF0YSA9IDB4ODsKKwlpbnQgaTsKKwlpbnQgcmV0OworCisJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIEV0aEN0cmwxLCBkYXRhKTsKKwlmb3IgKGkgPSAwOyBpIDwgUkVHX1RJTUVPVVQ7IGkrKykgeworCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEV0aEN0cmwxLCAxLCAmZGF0YSk7CisJCWlmICh+ZGF0YSAmIDB4MDgpIHsKKwkJCWlmIChsb29wYmFjayAmIDEpCisJCQkJYnJlYWs7CisJCQlpZiAobWlpX21vZGUgJiYgKHBlZ2FzdXMtPmZlYXR1cmVzICYgSEFTX0hPTUVfUE5BKSkKKwkJCQlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgR3BpbzEsIDB4MzQpOworCQkJZWxzZQorCQkJCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBHcGlvMSwgMHgyNik7CisJCQlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgR3BpbzAsIHBlZ2FzdXMtPmZlYXR1cmVzKTsKKwkJCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBHcGlvMCwgREVGQVVMVF9HUElPX1NFVCk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoaSA9PSBSRUdfVElNRU9VVCkKKwkJcmV0dXJuIDE7CisKKwlpZiAodXNiX2Rldl9pZFtwZWdhc3VzLT5kZXZfaW5kZXhdLnZlbmRvciA9PSBWRU5ET1JfTElOS1NZUyB8fAorCSAgICB1c2JfZGV2X2lkW3BlZ2FzdXMtPmRldl9pbmRleF0udmVuZG9yID09IFZFTkRPUl9ETElOSykgeworCQlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgR3BpbzAsIDB4MjQpOworCQlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgR3BpbzAsIDB4MjYpOworCX0KKwlpZiAodXNiX2Rldl9pZFtwZWdhc3VzLT5kZXZfaW5kZXhdLnZlbmRvciA9PSBWRU5ET1JfRUxDT04pIHsKKwkJX191MTYgYXV4bW9kZTsKKwkJcmVhZF9taWlfd29yZChwZWdhc3VzLCAzLCAweDFiLCAmYXV4bW9kZSk7CisJCXdyaXRlX21paV93b3JkKHBlZ2FzdXMsIDMsIDB4MWIsIGF1eG1vZGUgfCA0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlbmFibGVfbmV0X3RyYWZmaWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHVzYl9kZXZpY2UgKnVzYikKK3sKKwlfX3UxNiBsaW5rcGFydDsKKwlfX3U4IGRhdGFbNF07CisJcGVnYXN1c190ICpwZWdhc3VzID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcmV0OworCisJcmVhZF9taWlfd29yZChwZWdhc3VzLCBwZWdhc3VzLT5waHksIE1JSV9MUEEsICZsaW5rcGFydCk7CisJZGF0YVswXSA9IDB4Yzk7CisJZGF0YVsxXSA9IDA7CisJaWYgKGxpbmtwYXJ0ICYgKEFEVkVSVElTRV8xMDBGVUxMIHwgQURWRVJUSVNFXzEwRlVMTCkpCisJCWRhdGFbMV0gfD0gMHgyMDsJLyogc2V0IGZ1bGwgZHVwbGV4ICovCisJaWYgKGxpbmtwYXJ0ICYgKEFEVkVSVElTRV8xMDBGVUxMIHwgQURWRVJUSVNFXzEwMEhBTEYpKQorCQlkYXRhWzFdIHw9IDB4MTA7CS8qIHNldCAxMDAgTWJwcyAqLworCWlmIChtaWlfbW9kZSkKKwkJZGF0YVsxXSA9IDA7CisJZGF0YVsyXSA9IChsb29wYmFjayAmIDEpID8gMHgwOSA6IDB4MDE7CisKKwltZW1jcHkocGVnYXN1cy0+ZXRoX3JlZ3MsIGRhdGEsIHNpemVvZiAoZGF0YSkpOworCXJldCA9IHNldF9yZWdpc3RlcnMocGVnYXN1cywgRXRoQ3RybDAsIDMsIGRhdGEpOworCisJaWYgKHVzYl9kZXZfaWRbcGVnYXN1cy0+ZGV2X2luZGV4XS52ZW5kb3IgPT0gVkVORE9SX0xJTktTWVMgfHwKKwkgICAgdXNiX2Rldl9pZFtwZWdhc3VzLT5kZXZfaW5kZXhdLnZlbmRvciA9PSBWRU5ET1JfRExJTkspIHsKKwkJdTE2IGF1eG1vZGU7CisJCXJlYWRfbWlpX3dvcmQocGVnYXN1cywgMCwgMHgxYiwgJmF1eG1vZGUpOworCQl3cml0ZV9taWlfd29yZChwZWdhc3VzLCAwLCAweDFiLCBhdXhtb2RlIHwgNCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfc2tiX3Bvb2wocGVnYXN1c190ICogcGVnYXN1cykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBSWF9TS0JTOyBpKyspIHsKKwkJaWYgKHBlZ2FzdXMtPnJ4X3Bvb2xbaV0pCisJCQljb250aW51ZTsKKwkJcGVnYXN1cy0+cnhfcG9vbFtpXSA9IGRldl9hbGxvY19za2IoUEVHQVNVU19NVFUgKyAyKTsKKwkJLyoKKwkJICoqIHdlIGdpdmUgdXAgaWYgdGhlIGFsbG9jYXRpb24gZmFpbC4gdGhlIHRhc2tsZXQgd2lsbCBiZQorCQkgKiogcmVzY2hlZHVsZWQgYWdhaW4gYW55d2F5Li4uCisJCSAqLworCQlpZiAocGVnYXN1cy0+cnhfcG9vbFtpXSA9PSBOVUxMKQorCQkJcmV0dXJuOworCQlwZWdhc3VzLT5yeF9wb29sW2ldLT5kZXYgPSBwZWdhc3VzLT5uZXQ7CisJCXNrYl9yZXNlcnZlKHBlZ2FzdXMtPnJ4X3Bvb2xbaV0sIDIpOworCX0KK30KKworc3RhdGljIHZvaWQgZnJlZV9za2JfcG9vbChwZWdhc3VzX3QgKiBwZWdhc3VzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFJYX1NLQlM7IGkrKykgeworCQlpZiAocGVnYXN1cy0+cnhfcG9vbFtpXSkgeworCQkJZGV2X2tmcmVlX3NrYihwZWdhc3VzLT5yeF9wb29sW2ldKTsKKwkJCXBlZ2FzdXMtPnJ4X3Bvb2xbaV0gPSBOVUxMOworCQl9CisJfQorfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpwdWxsX3NrYihwZWdhc3VzX3QgKiBwZWdhc3VzKQoreworCWludCBpOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlmb3IgKGkgPSAwOyBpIDwgUlhfU0tCUzsgaSsrKSB7CisJCWlmIChsaWtlbHkocGVnYXN1cy0+cnhfcG9vbFtpXSAhPSBOVUxMKSkgeworCQkJc2tiID0gcGVnYXN1cy0+cnhfcG9vbFtpXTsKKwkJCXBlZ2FzdXMtPnJ4X3Bvb2xbaV0gPSBOVUxMOworCQkJcmV0dXJuIHNrYjsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcGVnYXN1c190ICpwZWdhc3VzID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQ7CisJaW50IHJ4X3N0YXR1cywgY291bnQgPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJdTggKmJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCV9fdTE2IHBrdF9sZW47CisKKwlpZiAoIXBlZ2FzdXMpCisJCXJldHVybjsKKworCW5ldCA9IHBlZ2FzdXMtPm5ldDsKKwlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldCkgfHwgIW5ldGlmX3J1bm5pbmcobmV0KSkKKwkJcmV0dXJuOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAtRVRJTUVET1VUOgorCQlpZiAobmV0aWZfbXNnX3J4X2VycihwZWdhc3VzKSkKKwkJCXByX2RlYnVnKCIlczogcmVzZXQgTUFDXG4iLCBuZXQtPm5hbWUpOworCQlwZWdhc3VzLT5mbGFncyAmPSB+UEVHQVNVU19SWF9CVVNZOworCQlicmVhazsKKwljYXNlIC1FUElQRToJCS8qIHN0YWxsLCBvciBkaXNjb25uZWN0IGZyb20gVFQgKi8KKwkJLyogRklYTUUgc2NoZWR1bGUgd29yayB0byBjbGVhciB0aGUgaGFsdCAqLworCQlpZiAobmV0aWZfbXNnX3J4X2VycihwZWdhc3VzKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBubyByeCBzdGFsbCByZWNvdmVyeVxuIiwKKwkJCQkJbmV0LT5uYW1lKTsKKwkJcmV0dXJuOworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJaWYgKG5ldGlmX21zZ19pZmRvd24ocGVnYXN1cykpCisJCQlwcl9kZWJ1ZygiJXM6IHJ4IHVubGluaywgJWRcbiIsIG5ldC0+bmFtZSwgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJaWYgKG5ldGlmX21zZ19yeF9lcnIocGVnYXN1cykpCisJCQlwcl9kZWJ1ZygiJXM6IFJYIHN0YXR1cyAlZFxuIiwgbmV0LT5uYW1lLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZ29vbjsKKwl9CisKKwlpZiAoIWNvdW50IHx8IGNvdW50IDwgNCkKKwkJZ290byBnb29uOworCisJcnhfc3RhdHVzID0gYnVmW2NvdW50IC0gMl07CisJaWYgKHJ4X3N0YXR1cyAmIDB4MWUpIHsKKwkJaWYgKG5ldGlmX21zZ19yeF9lcnIocGVnYXN1cykpCisJCQlwcl9kZWJ1ZygiJXM6IFJYIHBhY2tldCBlcnJvciAleFxuIiwKKwkJCQkJbmV0LT5uYW1lLCByeF9zdGF0dXMpOworCQlwZWdhc3VzLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJaWYgKHJ4X3N0YXR1cyAmIDB4MDYpCS8vIGxvbmcgb3IgcnVudAorCQkJcGVnYXN1cy0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQlpZiAocnhfc3RhdHVzICYgMHgwOCkKKwkJCXBlZ2FzdXMtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJaWYgKHJ4X3N0YXR1cyAmIDB4MTApCS8vIGV4dHJhIGJpdHMKKwkJCXBlZ2FzdXMtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQlnb3RvIGdvb247CisJfQorCWlmIChwZWdhc3VzLT5jaGlwID09IDB4ODUxMykgeworCQlwa3RfbGVuID0gbGUzMl90b19jcHUoKihfX2xlMzIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCXBrdF9sZW4gJj0gMHgwZmZmOworCQlwZWdhc3VzLT5yeF9za2ItPmRhdGEgKz0gMjsKKwl9IGVsc2UgeworCQlwa3RfbGVuID0gYnVmW2NvdW50IC0gM10gPDwgODsKKwkJcGt0X2xlbiArPSBidWZbY291bnQgLSA0XTsKKwkJcGt0X2xlbiAmPSAweGZmZjsKKwkJcGt0X2xlbiAtPSA4OworCX0KKworCS8qCisJICogYXQgdGhpcyBwb2ludCB3ZSBhcmUgc3VyZSBwZWdhc3VzLT5yeF9za2IgIT0gTlVMTAorCSAqIHNvIHdlIGdvIGFoZWFkIGFuZCBwYXNzIHVwIHRoZSBwYWNrZXQuCisJICovCisJc2tiX3B1dChwZWdhc3VzLT5yeF9za2IsIHBrdF9sZW4pOworCXBlZ2FzdXMtPnJ4X3NrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhwZWdhc3VzLT5yeF9za2IsIG5ldCk7CisJbmV0aWZfcngocGVnYXN1cy0+cnhfc2tiKTsKKwlwZWdhc3VzLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJcGVnYXN1cy0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKKworCWlmIChwZWdhc3VzLT5mbGFncyAmIFBFR0FTVVNfVU5QTFVHKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2soJnBlZ2FzdXMtPnJ4X3Bvb2xfbG9jayk7CisJcGVnYXN1cy0+cnhfc2tiID0gcHVsbF9za2IocGVnYXN1cyk7CisJc3Bpbl91bmxvY2soJnBlZ2FzdXMtPnJ4X3Bvb2xfbG9jayk7CisKKwlpZiAocGVnYXN1cy0+cnhfc2tiID09IE5VTEwpCisJCWdvdG8gdGxfc2NoZWQ7Citnb29uOgorCXVzYl9maWxsX2J1bGtfdXJiKHBlZ2FzdXMtPnJ4X3VyYiwgcGVnYXN1cy0+dXNiLAorCQkJICB1c2JfcmN2YnVsa3BpcGUocGVnYXN1cy0+dXNiLCAxKSwKKwkJCSAgcGVnYXN1cy0+cnhfc2tiLT5kYXRhLCBQRUdBU1VTX01UVSArIDgsCisJCQkgIHJlYWRfYnVsa19jYWxsYmFjaywgcGVnYXN1cyk7CisJaWYgKHVzYl9zdWJtaXRfdXJiKHBlZ2FzdXMtPnJ4X3VyYiwgR0ZQX0FUT01JQykpIHsKKwkJcGVnYXN1cy0+ZmxhZ3MgfD0gUEVHQVNVU19SWF9VUkJfRkFJTDsKKwkJZ290byB0bF9zY2hlZDsKKwl9IGVsc2UgeworCQlwZWdhc3VzLT5mbGFncyAmPSB+UEVHQVNVU19SWF9VUkJfRkFJTDsKKwl9CisKKwlyZXR1cm47CisKK3RsX3NjaGVkOgorCXRhc2tsZXRfc2NoZWR1bGUoJnBlZ2FzdXMtPnJ4X3RsKTsKK30KKworc3RhdGljIHZvaWQgcnhfZml4dXAodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXBlZ2FzdXNfdCAqcGVnYXN1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcGVnYXN1cyA9IChwZWdhc3VzX3QgKikgZGF0YTsKKwlpZiAocGVnYXN1cy0+ZmxhZ3MgJiBQRUdBU1VTX1VOUExVRykKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBlZ2FzdXMtPnJ4X3Bvb2xfbG9jaywgZmxhZ3MpOworCWZpbGxfc2tiX3Bvb2wocGVnYXN1cyk7CisJaWYgKHBlZ2FzdXMtPmZsYWdzICYgUEVHQVNVU19SWF9VUkJfRkFJTCkKKwkJaWYgKHBlZ2FzdXMtPnJ4X3NrYikKKwkJCWdvdG8gdHJ5X2FnYWluOworCWlmIChwZWdhc3VzLT5yeF9za2IgPT0gTlVMTCkgeworCQlwZWdhc3VzLT5yeF9za2IgPSBwdWxsX3NrYihwZWdhc3VzKTsKKwl9CisJaWYgKHBlZ2FzdXMtPnJ4X3NrYiA9PSBOVUxMKSB7CisJCWlmIChuZXRpZl9tc2dfcnhfZXJyKHBlZ2FzdXMpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGxvdyBvbiBtZW1vcnlcbiIsCisJCQkJCXBlZ2FzdXMtPm5ldC0+bmFtZSk7CisJCXRhc2tsZXRfc2NoZWR1bGUoJnBlZ2FzdXMtPnJ4X3RsKTsKKwkJZ290byBkb25lOworCX0KKwl1c2JfZmlsbF9idWxrX3VyYihwZWdhc3VzLT5yeF91cmIsIHBlZ2FzdXMtPnVzYiwKKwkJCSAgdXNiX3JjdmJ1bGtwaXBlKHBlZ2FzdXMtPnVzYiwgMSksCisJCQkgIHBlZ2FzdXMtPnJ4X3NrYi0+ZGF0YSwgUEVHQVNVU19NVFUgKyA4LAorCQkJICByZWFkX2J1bGtfY2FsbGJhY2ssIHBlZ2FzdXMpOwordHJ5X2FnYWluOgorCWlmICh1c2Jfc3VibWl0X3VyYihwZWdhc3VzLT5yeF91cmIsIEdGUF9BVE9NSUMpKSB7CisJCXBlZ2FzdXMtPmZsYWdzIHw9IFBFR0FTVVNfUlhfVVJCX0ZBSUw7CisJCXRhc2tsZXRfc2NoZWR1bGUoJnBlZ2FzdXMtPnJ4X3RsKTsKKwl9IGVsc2UgeworCQlwZWdhc3VzLT5mbGFncyAmPSB+UEVHQVNVU19SWF9VUkJfRkFJTDsKKwl9Citkb25lOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBlZ2FzdXMtPnJ4X3Bvb2xfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcGVnYXN1c190ICpwZWdhc3VzID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQgPSBwZWdhc3VzLT5uZXQ7CisKKwlpZiAoIXBlZ2FzdXMpCisJCXJldHVybjsKKworCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0KSB8fCAhbmV0aWZfcnVubmluZyhuZXQpKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAtRVBJUEU6CisJCS8qIEZJWE1FIHNjaGVkdWxlX3dvcmsoKSB0byBjbGVhciB0aGUgdHggaGFsdCAqLworCQluZXRpZl9zdG9wX3F1ZXVlKG5ldCk7CisJCWlmIChuZXRpZl9tc2dfdHhfZXJyKHBlZ2FzdXMpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IG5vIHR4IHN0YWxsIHJlY292ZXJ5XG4iLAorCQkJCQluZXQtPm5hbWUpOworCQlyZXR1cm47CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQlpZiAobmV0aWZfbXNnX2lmZG93bihwZWdhc3VzKSkKKwkJCXByX2RlYnVnKCIlczogdHggdW5saW5rLCAlZFxuIiwgbmV0LT5uYW1lLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlpZiAobmV0aWZfbXNnX3R4X2VycihwZWdhc3VzKSkKKwkJCXByX2luZm8oIiVzOiBUWCBzdGF0dXMgJWRcbiIsIG5ldC0+bmFtZSwgdXJiLT5zdGF0dXMpOworCQkvKiBGQUxMIFRIUk9VR0ggKi8KKwljYXNlIDA6CisJCWJyZWFrOworCX0KKworCW5ldC0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCW5ldGlmX3dha2VfcXVldWUobmV0KTsKK30KKworc3RhdGljIHZvaWQgaW50cl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0OworCWludCBzdGF0dXM7CisKKwlpZiAoIXBlZ2FzdXMpCisJCXJldHVybjsKKwluZXQgPSBwZWdhc3VzLT5uZXQ7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJLyogc29tZSBQZWdhc3VzLUkgcHJvZHVjdHMgcmVwb3J0IExPVFMgb2YgZGF0YQorCQkgKiB0b2dnbGUgZXJyb3JzLi4uIGF2b2lkIGxvZyBzcGFtbWluZworCQkgKi8KKwkJaWYgKG5ldGlmX21zZ190aW1lcihwZWdhc3VzKSkKKwkJCXByX2RlYnVnKCIlczogaW50ciBzdGF0dXMgJWRcbiIsIG5ldC0+bmFtZSwKKwkJCQkJdXJiLT5zdGF0dXMpOworCX0KKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPj0gNikgeworCQl1OAkqIGQgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCQkvKiBieXRlIDAgPT0gdHhfc3RhdHVzMSwgcmVnIDJCICovCisJCWlmIChkWzBdICYgKFRYX1VOREVSUlVOfEVYQ0VTU0lWRV9DT0wKKwkJCQkJfExBVEVfQ09MfEpBQkJFUl9USU1FT1VUKSkgeworCQkJcGVnYXN1cy0+c3RhdHMudHhfZXJyb3JzKys7CisJCQlpZiAoZFswXSAmIFRYX1VOREVSUlVOKQorCQkJCXBlZ2FzdXMtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCQlpZiAoZFswXSAmIChFWENFU1NJVkVfQ09MIHwgSkFCQkVSX1RJTUVPVVQpKQorCQkJCXBlZ2FzdXMtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCQlpZiAoZFswXSAmIExBVEVfQ09MKQorCQkJCXBlZ2FzdXMtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKKwkJfQorCisJCS8qIGRbNV0uTElOS19TVEFUVVMgbGllcyBvbiBzb21lIGFkYXB0ZXJzLgorCQkgKiBkWzBdLk5PX0NBUlJJRVIga2lja3MgaW4gb25seSB3aXRoIGZhaWxlZCBUWC4KKwkJICogLi4uIHNvIG1vbml0b3Jpbmcgd2l0aCBNSUkgbWF5IGJlIHNhZmVzdC4KKwkJICovCisJCWlmIChkWzBdICYgTk9fQ0FSUklFUikKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldCk7CQorCQllbHNlCisJCQluZXRpZl9jYXJyaWVyX29uKG5ldCk7CisKKwkJLyogYnl0ZXMgMy00ID09IHJ4X2xvc3Rwa3QsIHJlZyAyRS8yRiAqLworCQlwZWdhc3VzLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9ICgoZFszXSAmIDB4N2YpIDw8IDgpIHwgZFs0XTsKKwl9CisKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIFNMQUJfQVRPTUlDKTsKKwlpZiAoc3RhdHVzICYmIG5ldGlmX21zZ190aW1lcihwZWdhc3VzKSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgcmVzdWJtaXQgaW50ZXJydXB0IHVyYiwgJWRcbiIsCisJCQkJbmV0LT5uYW1lLCBzdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCBwZWdhc3VzX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlwZWdhc3VzX3QgKnBlZ2FzdXMgPSBuZXRkZXZfcHJpdihuZXQpOworCWlmIChuZXRpZl9tc2dfdGltZXIocGVnYXN1cykpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB0eCB0aW1lb3V0XG4iLCBuZXQtPm5hbWUpOworCXBlZ2FzdXMtPnR4X3VyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0FTWU5DX1VOTElOSzsKKwl1c2JfdW5saW5rX3VyYihwZWdhc3VzLT50eF91cmIpOworCXBlZ2FzdXMtPnN0YXRzLnR4X2Vycm9ycysrOworfQorCitzdGF0aWMgaW50IHBlZ2FzdXNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IG5ldGRldl9wcml2KG5ldCk7CisJaW50IGNvdW50ID0gKChza2ItPmxlbiArIDIpICYgMHgzZikgPyBza2ItPmxlbiArIDIgOiBza2ItPmxlbiArIDM7CisJaW50IHJlczsKKwlfX3UxNiBsMTYgPSBza2ItPmxlbjsKKworCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKKworCSgoX19sZTE2ICopIHBlZ2FzdXMtPnR4X2J1ZmYpWzBdID0gY3B1X3RvX2xlMTYobDE2KTsKKwltZW1jcHkocGVnYXN1cy0+dHhfYnVmZiArIDIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCXVzYl9maWxsX2J1bGtfdXJiKHBlZ2FzdXMtPnR4X3VyYiwgcGVnYXN1cy0+dXNiLAorCQkJICB1c2Jfc25kYnVsa3BpcGUocGVnYXN1cy0+dXNiLCAyKSwKKwkJCSAgcGVnYXN1cy0+dHhfYnVmZiwgY291bnQsCisJCQkgIHdyaXRlX2J1bGtfY2FsbGJhY2ssIHBlZ2FzdXMpOworCWlmICgocmVzID0gdXNiX3N1Ym1pdF91cmIocGVnYXN1cy0+dHhfdXJiLCBHRlBfQVRPTUlDKSkpIHsKKwkJaWYgKG5ldGlmX21zZ190eF9lcnIocGVnYXN1cykpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmFpbCB0eCwgJWRcbiIsCisJCQkJCW5ldC0+bmFtZSwgcmVzKTsKKwkJc3dpdGNoIChyZXMpIHsKKwkJY2FzZSAtRVBJUEU6CQkvKiBzdGFsbCwgb3IgZGlzY29ubmVjdCBmcm9tIFRUICovCisJCQkvKiBjbGVhbnVwIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBzY2hlZHVsZWQgKi8KKwkJCWJyZWFrOworCQljYXNlIC1FTk9ERVY6CQkvKiBkaXNjb25uZWN0KCkgdXBjb21pbmcgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcGVnYXN1cy0+c3RhdHMudHhfZXJyb3JzKys7CisJCQluZXRpZl9zdGFydF9xdWV1ZShuZXQpOworCQl9CisJfSBlbHNlIHsKKwkJcGVnYXN1cy0+c3RhdHMudHhfcGFja2V0cysrOworCQlwZWdhc3VzLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJbmV0LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJfQorCWRldl9rZnJlZV9za2Ioc2tiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnBlZ2FzdXNfbmV0ZGV2X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuICYoKHBlZ2FzdXNfdCAqKSBuZXRkZXZfcHJpdihkZXYpKS0+c3RhdHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX25ldF90cmFmZmljKHBlZ2FzdXNfdCAqIHBlZ2FzdXMpCit7CisJaW50IHRtcCA9IDA7CisJaW50IHJldDsKKworCXJldCA9IHNldF9yZWdpc3RlcnMocGVnYXN1cywgRXRoQ3RybDAsIDIsICZ0bXApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2ludGVycnVwdF9pbnRlcnZhbChwZWdhc3VzX3QgKiBwZWdhc3VzKQoreworCV9fdTggZGF0YVsyXTsKKworCXJlYWRfZXByb21fd29yZChwZWdhc3VzLCA0LCAoX191MTYgKikgZGF0YSk7CisJaWYgKGRhdGFbMV0gPCAweDgwKSB7CisJCWlmIChuZXRpZl9tc2dfdGltZXIocGVnYXN1cykpCisJCQlkZXZfaW5mbygmcGVnYXN1cy0+aW50Zi0+ZGV2LAorCQkJCSJpbnRyIGludGVydmFsIGNoYW5nZWQgZnJvbSAldW1zIHRvICV1bXNcbiIsCisJCQkJZGF0YVsxXSwgMHg4MCk7CisJCWRhdGFbMV0gPSAweDgwOworI2lmZGVmCVBFR0FTVVNfV1JJVEVfRUVQUk9NCisJCXdyaXRlX2Vwcm9tX3dvcmQocGVnYXN1cywgNCwgKihfX3UxNiAqKSBkYXRhKTsKKyNlbmRpZgorCX0KKwlwZWdhc3VzLT5pbnRyX2ludGVydmFsID0gZGF0YVsxXTsKK30KKworc3RhdGljIHZvaWQgc2V0X2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlwZWdhc3VzX3QgKnBlZ2FzdXMgPSBuZXRkZXZfcHJpdihuZXQpOworCXUxNiB0bXA7CisKKwlpZiAocmVhZF9taWlfd29yZChwZWdhc3VzLCBwZWdhc3VzLT5waHksIE1JSV9CTVNSLCAmdG1wKSkKKwkJcmV0dXJuOworCWlmICh0bXAgJiBCTVNSX0xTVEFUVVMpCisJCW5ldGlmX2NhcnJpZXJfb24obmV0KTsKKwllbHNlCisJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldCk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfYWxsX3VyYnMocGVnYXN1c190ICogcGVnYXN1cykKK3sKKwl1c2JfZnJlZV91cmIocGVnYXN1cy0+aW50cl91cmIpOworCXVzYl9mcmVlX3VyYihwZWdhc3VzLT50eF91cmIpOworCXVzYl9mcmVlX3VyYihwZWdhc3VzLT5yeF91cmIpOworCXVzYl9mcmVlX3VyYihwZWdhc3VzLT5jdHJsX3VyYik7Cit9CisKK3N0YXRpYyB2b2lkIHVubGlua19hbGxfdXJicyhwZWdhc3VzX3QgKiBwZWdhc3VzKQoreworCXVzYl9raWxsX3VyYihwZWdhc3VzLT5pbnRyX3VyYik7CisJdXNiX2tpbGxfdXJiKHBlZ2FzdXMtPnR4X3VyYik7CisJdXNiX2tpbGxfdXJiKHBlZ2FzdXMtPnJ4X3VyYik7CisJdXNiX2tpbGxfdXJiKHBlZ2FzdXMtPmN0cmxfdXJiKTsKK30KKworc3RhdGljIGludCBhbGxvY191cmJzKHBlZ2FzdXNfdCAqIHBlZ2FzdXMpCit7CisJcGVnYXN1cy0+Y3RybF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghcGVnYXN1cy0+Y3RybF91cmIpIHsKKwkJcmV0dXJuIDA7CisJfQorCXBlZ2FzdXMtPnJ4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZWdhc3VzLT5yeF91cmIpIHsKKwkJdXNiX2ZyZWVfdXJiKHBlZ2FzdXMtPmN0cmxfdXJiKTsKKwkJcmV0dXJuIDA7CisJfQorCXBlZ2FzdXMtPnR4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZWdhc3VzLT50eF91cmIpIHsKKwkJdXNiX2ZyZWVfdXJiKHBlZ2FzdXMtPnJ4X3VyYik7CisJCXVzYl9mcmVlX3VyYihwZWdhc3VzLT5jdHJsX3VyYik7CisJCXJldHVybiAwOworCX0KKwlwZWdhc3VzLT5pbnRyX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZWdhc3VzLT5pbnRyX3VyYikgeworCQl1c2JfZnJlZV91cmIocGVnYXN1cy0+dHhfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKHBlZ2FzdXMtPnJ4X3VyYik7CisJCXVzYl9mcmVlX3VyYihwZWdhc3VzLT5jdHJsX3VyYik7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHBlZ2FzdXNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IG5ldGRldl9wcml2KG5ldCk7CisJaW50IHJlczsKKworCWlmIChwZWdhc3VzLT5yeF9za2IgPT0gTlVMTCkKKwkJcGVnYXN1cy0+cnhfc2tiID0gcHVsbF9za2IocGVnYXN1cyk7CisJLyoKKwkgKiogTm90ZTogbm8gcG9pbnQgdG8gZnJlZSB0aGUgcG9vbC4gIGl0IGlzIGVtcHR5IDotKQorCSAqLworCWlmICghcGVnYXN1cy0+cnhfc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcyA9IHNldF9yZWdpc3RlcnMocGVnYXN1cywgRXRoSUQsIDYsIG5ldC0+ZGV2X2FkZHIpOworCQorCXVzYl9maWxsX2J1bGtfdXJiKHBlZ2FzdXMtPnJ4X3VyYiwgcGVnYXN1cy0+dXNiLAorCQkJICB1c2JfcmN2YnVsa3BpcGUocGVnYXN1cy0+dXNiLCAxKSwKKwkJCSAgcGVnYXN1cy0+cnhfc2tiLT5kYXRhLCBQRUdBU1VTX01UVSArIDgsCisJCQkgIHJlYWRfYnVsa19jYWxsYmFjaywgcGVnYXN1cyk7CisJaWYgKChyZXMgPSB1c2Jfc3VibWl0X3VyYihwZWdhc3VzLT5yeF91cmIsIEdGUF9LRVJORUwpKSkgeworCQlpZiAobmV0aWZfbXNnX2lmdXAocGVnYXN1cykpCisJCQlwcl9kZWJ1ZygiJXM6IGZhaWxlZCByeF91cmIsICVkIiwgbmV0LT5uYW1lLCByZXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJdXNiX2ZpbGxfaW50X3VyYihwZWdhc3VzLT5pbnRyX3VyYiwgcGVnYXN1cy0+dXNiLAorCQkJIHVzYl9yY3ZpbnRwaXBlKHBlZ2FzdXMtPnVzYiwgMyksCisJCQkgcGVnYXN1cy0+aW50cl9idWZmLCBzaXplb2YgKHBlZ2FzdXMtPmludHJfYnVmZiksCisJCQkgaW50cl9jYWxsYmFjaywgcGVnYXN1cywgcGVnYXN1cy0+aW50cl9pbnRlcnZhbCk7CisJaWYgKChyZXMgPSB1c2Jfc3VibWl0X3VyYihwZWdhc3VzLT5pbnRyX3VyYiwgR0ZQX0tFUk5FTCkpKSB7CisJCWlmIChuZXRpZl9tc2dfaWZ1cChwZWdhc3VzKSkKKwkJCXByX2RlYnVnKCIlczogZmFpbGVkIGludHJfdXJiLCAlZFxuIiwgbmV0LT5uYW1lLCByZXMpOworCQl1c2Jfa2lsbF91cmIocGVnYXN1cy0+cnhfdXJiKTsKKwkJZ290byBleGl0OworCX0KKwlpZiAoKHJlcyA9IGVuYWJsZV9uZXRfdHJhZmZpYyhuZXQsIHBlZ2FzdXMtPnVzYikpKSB7CisJCWlmIChuZXRpZl9tc2dfaWZ1cChwZWdhc3VzKSkKKwkJCXByX2RlYnVnKCIlczogY2FuJ3QgZW5hYmxlX25ldF90cmFmZmljKCkgLSAlZFxuIiwKKwkJCQkJbmV0LT5uYW1lLCByZXMpOworCQlyZXMgPSAtRUlPOworCQl1c2Jfa2lsbF91cmIocGVnYXN1cy0+cnhfdXJiKTsKKwkJdXNiX2tpbGxfdXJiKHBlZ2FzdXMtPmludHJfdXJiKTsKKwkJZnJlZV9za2JfcG9vbChwZWdhc3VzKTsKKwkJZ290byBleGl0OworCX0KKwlzZXRfY2FycmllcihuZXQpOworCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldCk7CisJaWYgKG5ldGlmX21zZ19pZnVwKHBlZ2FzdXMpKQorCQlwcl9kZWJ1ZygiJXM6IG9wZW5cbiIsIG5ldC0+bmFtZSk7CisJcmVzID0gMDsKK2V4aXQ6CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBwZWdhc3VzX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJcGVnYXN1c190ICpwZWdhc3VzID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKKwlpZiAoIShwZWdhc3VzLT5mbGFncyAmIFBFR0FTVVNfVU5QTFVHKSkKKwkJZGlzYWJsZV9uZXRfdHJhZmZpYyhwZWdhc3VzKTsKKwl0YXNrbGV0X2tpbGwoJnBlZ2FzdXMtPnJ4X3RsKTsKKwl1bmxpbmtfYWxsX3VyYnMocGVnYXN1cyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGVnYXN1c19nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJcGVnYXN1c190ICpwZWdhc3VzID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJuY3B5KGluZm8tPmRyaXZlciwgZHJpdmVyX25hbWUsIHNpemVvZiAoaW5mby0+ZHJpdmVyKSAtIDEpOworCXN0cm5jcHkoaW5mby0+dmVyc2lvbiwgRFJJVkVSX1ZFUlNJT04sIHNpemVvZiAoaW5mby0+dmVyc2lvbikgLSAxKTsKKwl1c2JfbWFrZV9wYXRoKHBlZ2FzdXMtPnVzYiwgaW5mby0+YnVzX2luZm8sIHNpemVvZiAoaW5mby0+YnVzX2luZm8pKTsKK30KKworLyogYWxzbyBoYW5kbGVzIHRocmVlIHBhdHRlcm5zIG9mIHNvbWUga2luZCBpbiBoYXJkd2FyZSAqLworI2RlZmluZQlXT0xfU1VQUE9SVEVECShXQUtFX01BR0lDfFdBS0VfUEhZKQorCitzdGF0aWMgdm9pZAorcGVnYXN1c19nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlwZWdhc3VzX3QJKnBlZ2FzdXMgPSBuZXRkZXZfcHJpdihkZXYpOworCisJd29sLT5zdXBwb3J0ZWQgPSBXQUtFX01BR0lDIHwgV0FLRV9QSFk7CisJd29sLT53b2xvcHRzID0gcGVnYXN1cy0+d29sb3B0czsKK30KKworc3RhdGljIGludAorcGVnYXN1c19zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlwZWdhc3VzX3QJKnBlZ2FzdXMgPSBuZXRkZXZfcHJpdihkZXYpOworCXU4CQlyZWc3OCA9IDB4MDQ7CisJCisJaWYgKHdvbC0+d29sb3B0cyAmIH5XT0xfU1VQUE9SVEVEKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX01BR0lDKQorCQlyZWc3OCB8PSAweDgwOworCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX1BIWSkKKwkJcmVnNzggfD0gMHg0MDsKKwkvKiBGSVhNRSB0aGlzIDB4MTAgYml0IHN0aWxsIG5lZWRzIHRvIGdldCBzZXQgaW4gdGhlIGNoaXAuLi4gKi8KKwlpZiAod29sLT53b2xvcHRzKQorCQlwZWdhc3VzLT5ldGhfcmVnc1swXSB8PSAweDEwOworCWVsc2UKKwkJcGVnYXN1cy0+ZXRoX3JlZ3NbMF0gJj0gfjB4MTA7CisJcGVnYXN1cy0+d29sb3B0cyA9IHdvbC0+d29sb3B0czsKKwlyZXR1cm4gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFdha2V1cENvbnRyb2wsIHJlZzc4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBlZ2FzdXNfcmVzZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGV0aHRvb2xfd29saW5mbyB3b2w7CisJCisJbWVtc2V0KCZ3b2wsIDAsIHNpemVvZiB3b2wpOworCSh2b2lkKSBwZWdhc3VzX3NldF93b2woZGV2LCAmd29sKTsKK30KKworc3RhdGljIGludAorcGVnYXN1c19nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQoreworCXBlZ2FzdXNfdCAqcGVnYXN1czsKKworCWlmIChpbl9hdG9taWMoKSkKKwkJcmV0dXJuIDA7CisKKwlwZWdhc3VzID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwltaWlfZXRodG9vbF9nc2V0KCZwZWdhc3VzLT5taWksIGVjbWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3BlZ2FzdXNfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKK3sKKwlwZWdhc3VzX3QgKnBlZ2FzdXMgPSBuZXRkZXZfcHJpdihkZXYpOworCXJldHVybiBtaWlfZXRodG9vbF9zc2V0KCZwZWdhc3VzLT5taWksIGVjbWQpOworfQorCitzdGF0aWMgaW50IHBlZ2FzdXNfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IG5ldGRldl9wcml2KGRldik7CisJcmV0dXJuIG1paV9ud2F5X3Jlc3RhcnQoJnBlZ2FzdXMtPm1paSk7Cit9CisKK3N0YXRpYyB1MzIgcGVnYXN1c19nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IG5ldGRldl9wcml2KGRldik7CisJcmV0dXJuIG1paV9saW5rX29rKCZwZWdhc3VzLT5taWkpOworfQorCitzdGF0aWMgdTMyIHBlZ2FzdXNfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcGVnYXN1c190ICpwZWdhc3VzID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlyZXR1cm4gcGVnYXN1cy0+bXNnX2VuYWJsZTsKK30KKworc3RhdGljIHZvaWQgcGVnYXN1c19zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHYpCit7CisJcGVnYXN1c190ICpwZWdhc3VzID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlwZWdhc3VzLT5tc2dfZW5hYmxlID0gdjsKK30KKworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7CisJLmdldF9kcnZpbmZvID0gcGVnYXN1c19nZXRfZHJ2aW5mbywKKwkuZ2V0X3NldHRpbmdzID0gcGVnYXN1c19nZXRfc2V0dGluZ3MsCisJLnNldF9zZXR0aW5ncyA9IHBlZ2FzdXNfc2V0X3NldHRpbmdzLAorCS5ud2F5X3Jlc2V0ID0gcGVnYXN1c19ud2F5X3Jlc2V0LAorCS5nZXRfbGluayA9IHBlZ2FzdXNfZ2V0X2xpbmssCisJLmdldF9tc2dsZXZlbCA9IHBlZ2FzdXNfZ2V0X21zZ2xldmVsLAorCS5zZXRfbXNnbGV2ZWwgPSBwZWdhc3VzX3NldF9tc2dsZXZlbCwKKwkuZ2V0X3dvbCA9IHBlZ2FzdXNfZ2V0X3dvbCwKKwkuc2V0X3dvbCA9IHBlZ2FzdXNfc2V0X3dvbCwKK307CisKK3N0YXRpYyBpbnQgcGVnYXN1c19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQoreworCV9fdTE2ICpkYXRhID0gKF9fdTE2ICopICYgcnEtPmlmcl9pZnJ1OworCXBlZ2FzdXNfdCAqcGVnYXN1cyA9IG5ldGRldl9wcml2KG5ldCk7CisJaW50IHJlczsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DREVWUFJJVkFURToKKwkJZGF0YVswXSA9IHBlZ2FzdXMtPnBoeTsKKwljYXNlIFNJT0NERVZQUklWQVRFICsgMToKKwkJcmVhZF9taWlfd29yZChwZWdhc3VzLCBkYXRhWzBdLCBkYXRhWzFdICYgMHgxZiwgJmRhdGFbM10pOworCQlyZXMgPSAwOworCQlicmVhazsKKwljYXNlIFNJT0NERVZQUklWQVRFICsgMjoKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQkJcmV0dXJuIC1FUEVSTTsKKwkJd3JpdGVfbWlpX3dvcmQocGVnYXN1cywgcGVnYXN1cy0+cGh5LCBkYXRhWzFdICYgMHgxZiwgZGF0YVsyXSk7CisJCXJlcyA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlcyA9IC1FT1BOT1RTVVBQOworCX0KKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCBwZWdhc3VzX3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlwZWdhc3VzX3QgKnBlZ2FzdXMgPSBuZXRkZXZfcHJpdihuZXQpOworCisJaWYgKG5ldC0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQlwZWdhc3VzLT5ldGhfcmVnc1tFdGhDdHJsMl0gfD0gUlhfUFJPTUlTQ1VPVVM7CisJCWlmIChuZXRpZl9tc2dfbGluayhwZWdhc3VzKSkKKwkJCXByX2luZm8oIiVzOiBQcm9taXNjdW91cyBtb2RlIGVuYWJsZWQuXG4iLCBuZXQtPm5hbWUpOworCX0gZWxzZSBpZiAoKG5ldC0+bWNfY291bnQgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0KSB8fAorCQkgICAobmV0LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKKwkJcGVnYXN1cy0+ZXRoX3JlZ3NbRXRoQ3RybDBdIHw9IFJYX01VTFRJQ0FTVDsKKwkJcGVnYXN1cy0+ZXRoX3JlZ3NbRXRoQ3RybDJdICY9IH5SWF9QUk9NSVNDVU9VUzsKKwkJaWYgKG5ldGlmX21zZ19saW5rKHBlZ2FzdXMpKQorCQkJcHJfaW5mbygiJXM6IHNldCBhbGxtdWx0aVxuIiwgbmV0LT5uYW1lKTsKKwl9IGVsc2UgeworCQlwZWdhc3VzLT5ldGhfcmVnc1tFdGhDdHJsMF0gJj0gflJYX01VTFRJQ0FTVDsKKwkJcGVnYXN1cy0+ZXRoX3JlZ3NbRXRoQ3RybDJdICY9IH5SWF9QUk9NSVNDVU9VUzsKKwl9CisKKwlwZWdhc3VzLT5mbGFncyB8PSBFVEhfUkVHU19DSEFOR0U7CisJY3RybF9jYWxsYmFjayhwZWdhc3VzLT5jdHJsX3VyYiwgTlVMTCk7Cit9CisKK3N0YXRpYyBfX3U4IG1paV9waHlfcHJvYmUocGVnYXN1c190ICogcGVnYXN1cykKK3sKKwlpbnQgaTsKKwlfX3UxNiB0bXA7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlyZWFkX21paV93b3JkKHBlZ2FzdXMsIGksIE1JSV9CTVNSLCAmdG1wKTsKKwkJaWYgKHRtcCA9PSAwIHx8IHRtcCA9PSAweGZmZmYgfHwgKHRtcCAmIEJNU1JfTUVESUEpID09IDApCisJCQljb250aW51ZTsKKwkJZWxzZQorCQkJcmV0dXJuIGk7CisJfQorCisJcmV0dXJuIDB4ZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9wZWdhc3VzX0lJKHBlZ2FzdXNfdCAqIHBlZ2FzdXMpCit7CisJX191OCBkYXRhID0gMHhhNTsKKwlpbnQgcmV0OworCQorCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBSZWcxZCwgMCk7CisJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFJlZzdiLCAxKTsKKwltZGVsYXkoMTAwKTsKKwlpZiAoKHBlZ2FzdXMtPmZlYXR1cmVzICYgSEFTX0hPTUVfUE5BKSAmJiBtaWlfbW9kZSkKKwkJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFJlZzdiLCAwKTsKKwllbHNlCisJCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCBSZWc3YiwgMik7CisKKwlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgMHg4MywgZGF0YSk7CisJcmV0ID0gZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCAweDgzLCAxLCAmZGF0YSk7CisKKwlpZiAoZGF0YSA9PSAweGE1KSB7CisJCXBlZ2FzdXMtPmNoaXAgPSAweDg1MTM7CisJfSBlbHNlIHsKKwkJcGVnYXN1cy0+Y2hpcCA9IDA7CisJfQorCisJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIDB4ODAsIDB4YzApOworCXJldCA9IHNldF9yZWdpc3RlcihwZWdhc3VzLCAweDgzLCAweGZmKTsKKwlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgMHg4NCwgMHgwMSk7CisJCisJaWYgKHBlZ2FzdXMtPmZlYXR1cmVzICYgSEFTX0hPTUVfUE5BICYmIG1paV9tb2RlKQorCQlyZXQgPSBzZXRfcmVnaXN0ZXIocGVnYXN1cywgUmVnODEsIDYpOworCWVsc2UKKwkJcmV0ID0gc2V0X3JlZ2lzdGVyKHBlZ2FzdXMsIFJlZzgxLCAyKTsKK30KKworCitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnBlZ2FzdXNfd29ya3F1ZXVlID0gTlVMTDsKKyNkZWZpbmUgQ0FSUklFUl9DSEVDS19ERUxBWSAoMiAqIEhaKQorCitzdGF0aWMgdm9pZCBjaGVja19jYXJyaWVyKHZvaWQgKmRhdGEpCit7CisJcGVnYXN1c190ICpwZWdhc3VzID0gZGF0YTsKKwlzZXRfY2FycmllcihwZWdhc3VzLT5uZXQpOworCWlmICghKHBlZ2FzdXMtPmZsYWdzICYgUEVHQVNVU19VTlBMVUcpKSB7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhwZWdhc3VzX3dvcmtxdWV1ZSwgJnBlZ2FzdXMtPmNhcnJpZXJfY2hlY2ssCisJCQlDQVJSSUVSX0NIRUNLX0RFTEFZKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGVnYXN1c19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldDsKKwlwZWdhc3VzX3QgKnBlZ2FzdXM7CisJaW50IGRldl9pbmRleCA9IGlkIC0gcGVnYXN1c19pZHM7CisJaW50IHJlcyA9IC1FTk9NRU07CisKKwl1c2JfZ2V0X2RldihkZXYpOworCW5ldCA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgcGVnYXN1cykpOworCWlmICghbmV0KSB7CisJCWRldl9lcnIoJmludGYtPmRldiwgImNhbid0IGFsbG9jYXRlICVzXG4iLCAiZGV2aWNlIik7CisJCWdvdG8gb3V0OworCX0KKworCXBlZ2FzdXMgPSBuZXRkZXZfcHJpdihuZXQpOworCW1lbXNldChwZWdhc3VzLCAwLCBzaXplb2YgKHN0cnVjdCBwZWdhc3VzKSk7CisJcGVnYXN1cy0+ZGV2X2luZGV4ID0gZGV2X2luZGV4OworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBlZ2FzdXMtPmN0cmxfd2FpdCk7CisKKwlpZiAoIWFsbG9jX3VyYnMocGVnYXN1cykpIHsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiY2FuJ3QgYWxsb2NhdGUgJXNcbiIsICJ1cmJzIik7CisJCWdvdG8gb3V0MTsKKwl9CisKKwl0YXNrbGV0X2luaXQoJnBlZ2FzdXMtPnJ4X3RsLCByeF9maXh1cCwgKHVuc2lnbmVkIGxvbmcpIHBlZ2FzdXMpOworCisJSU5JVF9XT1JLKCZwZWdhc3VzLT5jYXJyaWVyX2NoZWNrLCBjaGVja19jYXJyaWVyLCBwZWdhc3VzKTsKKworCXBlZ2FzdXMtPmludGYgPSBpbnRmOworCXBlZ2FzdXMtPnVzYiA9IGRldjsKKwlwZWdhc3VzLT5uZXQgPSBuZXQ7CisJU0VUX01PRFVMRV9PV05FUihuZXQpOworCW5ldC0+b3BlbiA9IHBlZ2FzdXNfb3BlbjsKKwluZXQtPnN0b3AgPSBwZWdhc3VzX2Nsb3NlOworCW5ldC0+d2F0Y2hkb2dfdGltZW8gPSBQRUdBU1VTX1RYX1RJTUVPVVQ7CisJbmV0LT50eF90aW1lb3V0ID0gcGVnYXN1c190eF90aW1lb3V0OworCW5ldC0+ZG9faW9jdGwgPSBwZWdhc3VzX2lvY3RsOworCW5ldC0+aGFyZF9zdGFydF94bWl0ID0gcGVnYXN1c19zdGFydF94bWl0OworCW5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gcGVnYXN1c19zZXRfbXVsdGljYXN0OworCW5ldC0+Z2V0X3N0YXRzID0gcGVnYXN1c19uZXRkZXZfc3RhdHM7CisJU0VUX0VUSFRPT0xfT1BTKG5ldCwgJm9wcyk7CisJcGVnYXN1cy0+bWlpLmRldiA9IG5ldDsKKwlwZWdhc3VzLT5taWkubWRpb19yZWFkID0gbWRpb19yZWFkOworCXBlZ2FzdXMtPm1paS5tZGlvX3dyaXRlID0gbWRpb193cml0ZTsKKwlwZWdhc3VzLT5taWkucGh5X2lkX21hc2sgPSAweDFmOworCXBlZ2FzdXMtPm1paS5yZWdfbnVtX21hc2sgPSAweDFmOworCXNwaW5fbG9ja19pbml0KCZwZWdhc3VzLT5yeF9wb29sX2xvY2spOworCXBlZ2FzdXMtPm1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdCAobXNnX2xldmVsLCBORVRJRl9NU0dfRFJWCisJCQkJfCBORVRJRl9NU0dfUFJPQkUgfCBORVRJRl9NU0dfTElOSyk7CisKKwlwZWdhc3VzLT5mZWF0dXJlcyA9IHVzYl9kZXZfaWRbZGV2X2luZGV4XS5wcml2YXRlOworCWdldF9pbnRlcnJ1cHRfaW50ZXJ2YWwocGVnYXN1cyk7CisJaWYgKHJlc2V0X21hYyhwZWdhc3VzKSkgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJjYW4ndCByZXNldCBNQUNcbiIpOworCQlyZXMgPSAtRUlPOworCQlnb3RvIG91dDI7CisJfQorCXNldF9ldGhlcm5ldF9hZGRyKHBlZ2FzdXMpOworCWZpbGxfc2tiX3Bvb2wocGVnYXN1cyk7CisJaWYgKHBlZ2FzdXMtPmZlYXR1cmVzICYgUEVHQVNVU19JSSkgeworCQlkZXZfaW5mbygmaW50Zi0+ZGV2LCAic2V0dXAgUGVnYXN1cyBJSSBzcGVjaWZpYyByZWdpc3RlcnNcbiIpOworCQlzZXR1cF9wZWdhc3VzX0lJKHBlZ2FzdXMpOworCX0KKwlwZWdhc3VzLT5waHkgPSBtaWlfcGh5X3Byb2JlKHBlZ2FzdXMpOworCWlmIChwZWdhc3VzLT5waHkgPT0gMHhmZikgeworCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAiY2FuJ3QgbG9jYXRlIE1JSSBwaHksIHVzaW5nIGRlZmF1bHRcbiIpOworCQlwZWdhc3VzLT5waHkgPSAxOworCX0KKwlwZWdhc3VzLT5taWkucGh5X2lkID0gcGVnYXN1cy0+cGh5OworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgcGVnYXN1cyk7CisJU0VUX05FVERFVl9ERVYobmV0LCAmaW50Zi0+ZGV2KTsKKwlwZWdhc3VzX3Jlc2V0X3dvbChuZXQpOworCXJlcyA9IHJlZ2lzdGVyX25ldGRldihuZXQpOworCWlmIChyZXMpCisJCWdvdG8gb3V0MzsKKwlxdWV1ZV9kZWxheWVkX3dvcmsocGVnYXN1c193b3JrcXVldWUsICZwZWdhc3VzLT5jYXJyaWVyX2NoZWNrLAorCQkJCUNBUlJJRVJfQ0hFQ0tfREVMQVkpOworCisJZGV2X2luZm8oJmludGYtPmRldiwgIiVzLCAlcywgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCW5ldC0+bmFtZSwKKwkJdXNiX2Rldl9pZFtkZXZfaW5kZXhdLm5hbWUsCisJCW5ldC0+ZGV2X2FkZHIgWzBdLCBuZXQtPmRldl9hZGRyIFsxXSwKKwkJbmV0LT5kZXZfYWRkciBbMl0sIG5ldC0+ZGV2X2FkZHIgWzNdLAorCQluZXQtPmRldl9hZGRyIFs0XSwgbmV0LT5kZXZfYWRkciBbNV0pOworCXJldHVybiAwOworCitvdXQzOgorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJZnJlZV9za2JfcG9vbChwZWdhc3VzKTsKK291dDI6CisJZnJlZV9hbGxfdXJicyhwZWdhc3VzKTsKK291dDE6CisJZnJlZV9uZXRkZXYobmV0KTsKK291dDoKKwl1c2JfcHV0X2RldihkZXYpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIHBlZ2FzdXNfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgcGVnYXN1cyAqcGVnYXN1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCWlmICghcGVnYXN1cykgeworCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJ1bnJlZ2lzdGVyaW5nIG5vbi1ib3VuZCBkZXZpY2U/XG4iKTsKKwkJcmV0dXJuOworCX0KKworCXBlZ2FzdXMtPmZsYWdzIHw9IFBFR0FTVVNfVU5QTFVHOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnBlZ2FzdXMtPmNhcnJpZXJfY2hlY2spOworCXVucmVnaXN0ZXJfbmV0ZGV2KHBlZ2FzdXMtPm5ldCk7CisJdXNiX3B1dF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSk7CisJZnJlZV9hbGxfdXJicyhwZWdhc3VzKTsKKwlmcmVlX3NrYl9wb29sKHBlZ2FzdXMpOworCWlmIChwZWdhc3VzLT5yeF9za2IpCisJCWRldl9rZnJlZV9za2IocGVnYXN1cy0+cnhfc2tiKTsKKwlmcmVlX25ldGRldihwZWdhc3VzLT5uZXQpOworfQorCitzdGF0aWMgaW50IHBlZ2FzdXNfc3VzcGVuZCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgcGVnYXN1cyAqcGVnYXN1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJCisJbmV0aWZfZGV2aWNlX2RldGFjaCAocGVnYXN1cy0+bmV0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwZWdhc3VzX3Jlc3VtZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHBlZ2FzdXMgKnBlZ2FzdXMgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJbmV0aWZfZGV2aWNlX2F0dGFjaCAocGVnYXN1cy0+bmV0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHBlZ2FzdXNfZHJpdmVyID0geworCS5uYW1lID0gZHJpdmVyX25hbWUsCisJLnByb2JlID0gcGVnYXN1c19wcm9iZSwKKwkuZGlzY29ubmVjdCA9IHBlZ2FzdXNfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBwZWdhc3VzX2lkcywKKwkuc3VzcGVuZCA9IHBlZ2FzdXNfc3VzcGVuZCwKKwkucmVzdW1lID0gcGVnYXN1c19yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwZWdhc3VzX2luaXQodm9pZCkKK3sKKwlwcl9pbmZvKCIlczogJXMsICIgRFJJVkVSX0RFU0MgIlxuIiwgZHJpdmVyX25hbWUsIERSSVZFUl9WRVJTSU9OKTsKKwlwZWdhc3VzX3dvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJwZWdhc3VzIik7CisJaWYgKCFwZWdhc3VzX3dvcmtxdWV1ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmcGVnYXN1c19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcGVnYXN1c19leGl0KHZvaWQpCit7CisJZGVzdHJveV93b3JrcXVldWUocGVnYXN1c193b3JrcXVldWUpOworCXVzYl9kZXJlZ2lzdGVyKCZwZWdhc3VzX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBlZ2FzdXNfaW5pdCk7Cittb2R1bGVfZXhpdChwZWdhc3VzX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuaCBiL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNjY2VkZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmgKQEAgLTAsMCArMSwyOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMyBQZXRrbyBNYW5vbG92IC0gUGV0a2FuIChwZXRrYW5AdXNlcnMuc291cmNlZm9yZ2UubmV0KQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworCisjaWZuZGVmCVBFR0FTVVNfREVWCisKKyNkZWZpbmUJUEVHQVNVU19JSQkJMHg4MDAwMDAwMAorI2RlZmluZQlIQVNfSE9NRV9QTkEJCTB4NDAwMDAwMDAKKworI2RlZmluZQlQRUdBU1VTX01UVQkJMTUzNgorI2RlZmluZQlSWF9TS0JTCQkJNAorCisjZGVmaW5lCUVQUk9NX1dSSVRFCQkweDAxCisjZGVmaW5lCUVQUk9NX1JFQUQJCTB4MDIKKyNkZWZpbmUJRVBST01fRE9ORQkJMHgwNAorI2RlZmluZQlFUFJPTV9XUl9FTkFCTEUJCTB4MTAKKyNkZWZpbmUJRVBST01fTE9BRAkJMHgyMAorCisjZGVmaW5lCVBIWV9ET05FCQkweDgwCisjZGVmaW5lCVBIWV9SRUFECQkweDQwCisjZGVmaW5lCVBIWV9XUklURQkJMHgyMAorI2RlZmluZQlERUZBVUxUX0dQSU9fUkVTRVQJMHgyNAorI2RlZmluZQlMSU5LU1lTX0dQSU9fUkVTRVQJMHgyNAorI2RlZmluZQlERUZBVUxUX0dQSU9fU0VUCTB4MjYKKworI2RlZmluZQlQRUdBU1VTX1BSRVNFTlQJCTB4MDAwMDAwMDEKKyNkZWZpbmUJUEVHQVNVU19UWF9CVVNZCQkweDAwMDAwMDA0CisjZGVmaW5lCVBFR0FTVVNfUlhfQlVTWQkJMHgwMDAwMDAwOAorI2RlZmluZQlDVFJMX1VSQl9SVU5OSU5HCTB4MDAwMDAwMTAKKyNkZWZpbmUJQ1RSTF9VUkJfU0xFRVAJCTB4MDAwMDAwMjAKKyNkZWZpbmUJUEVHQVNVU19VTlBMVUcJCTB4MDAwMDAwNDAKKyNkZWZpbmUJUEVHQVNVU19SWF9VUkJfRkFJTAkweDAwMDAwMDgwCisjZGVmaW5lCUVUSF9SRUdTX0NIQU5HRQkJMHg0MDAwMDAwMAorI2RlZmluZQlFVEhfUkVHU19DSEFOR0VECTB4ODAwMDAwMDAKKworI2RlZmluZQlSWF9NVUxUSUNBU1QJCTIKKyNkZWZpbmUJUlhfUFJPTUlTQ1VPVVMJCTQKKworI2RlZmluZQlSRUdfVElNRU9VVAkJKEhaKQorI2RlZmluZQlQRUdBU1VTX1RYX1RJTUVPVVQJKEhaKjEwKQorCisjZGVmaW5lCVRYX1VOREVSUlVOCQkweDgwCisjZGVmaW5lCUVYQ0VTU0lWRV9DT0wJCTB4NDAKKyNkZWZpbmUJTEFURV9DT0wJCTB4MjAKKyNkZWZpbmUJTk9fQ0FSUklFUgkJMHgxMAorI2RlZmluZQlMT1NTX0NBUlJJRVIJCTB4MDgKKyNkZWZpbmUJSkFCQkVSX1RJTUVPVVQJCTB4MDQKKworI2RlZmluZQlMSU5LX1NUQVRVUwkJMHgwMQorCisjZGVmaW5lCVBFR0FTVVNfUkVRVF9SRUFECTB4YzAKKyNkZWZpbmUJUEVHQVNVU19SRVFUX1dSSVRFCTB4NDAKKyNkZWZpbmUJUEVHQVNVU19SRVFfR0VUX1JFR1MJMHhmMAorI2RlZmluZQlQRUdBU1VTX1JFUV9TRVRfUkVHUwkweGYxCisjZGVmaW5lCVBFR0FTVVNfUkVRX1NFVF9SRUcJUEVHQVNVU19SRVFfU0VUX1JFR1MKKworZW51bSBwZWdhc3VzX3JlZ2lzdGVycyB7CisJRXRoQ3RybDAgPSAwLAorCUV0aEN0cmwxID0gMSwKKwlFdGhDdHJsMiA9IDIsCisJRXRoSUQgPSAweDEwLAorCVJlZzFkID0gMHgxZCwKKwlFcHJvbU9mZnNldCA9IDB4MjAsCisJRXByb21EYXRhID0gMHgyMSwJLyogMHgyMSBsb3csIDB4MjIgaGlnaCBieXRlICovCisJRXByb21DdHJsID0gMHgyMywKKwlQaHlBZGRyID0gMHgyNSwKKwlQaHlEYXRhID0gMHgyNiwgCS8qIDB4MjYgbG93LCAweDI3IGhpZ2ggYnl0ZSAqLworCVBoeUN0cmwgPSAweDI4LAorCVVzYlN0c3QgPSAweDJhLAorCUV0aFR4U3RhdDAgPSAweDJiLAorCUV0aFR4U3RhdDEgPSAweDJjLAorCUV0aFJ4U3RhdCA9IDB4MmQsCisJV2FrZXVwQ29udHJvbCA9IDB4NzgsCisJUmVnN2IgPSAweDdiLAorCUdwaW8wID0gMHg3ZSwKKwlHcGlvMSA9IDB4N2YsCisJUmVnODEgPSAweDgxLAorfTsKKworCit0eXBlZGVmIHN0cnVjdCBwZWdhc3VzIHsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdXNiOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppbnRmOworCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXQ7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJc3RhdHM7CisJc3RydWN0IG1paV9pZl9pbmZvCW1paTsKKwl1bnNpZ25lZAkJZmxhZ3M7CisJdW5zaWduZWQJCWZlYXR1cmVzOworCXUzMgkJCW1zZ19lbmFibGU7CisJdTMyCQkJd29sb3B0czsKKwlpbnQJCQlkZXZfaW5kZXg7CisJaW50CQkJaW50cl9pbnRlcnZhbDsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJcnhfdGw7CisJc3RydWN0IHdvcmtfc3RydWN0CWNhcnJpZXJfY2hlY2s7CisJc3RydWN0IHVyYgkJKmN0cmxfdXJiLCAqcnhfdXJiLCAqdHhfdXJiLCAqaW50cl91cmI7CisJc3RydWN0IHNrX2J1ZmYJCSpyeF9wb29sW1JYX1NLQlNdOworCXN0cnVjdCBza19idWZmCQkqcnhfc2tiOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJZHI7CisJd2FpdF9xdWV1ZV9oZWFkX3QJY3RybF93YWl0OworCXNwaW5sb2NrX3QJCXJ4X3Bvb2xfbG9jazsKKwlpbnQJCQljaGlwOworCXVuc2lnbmVkIGNoYXIJCWludHJfYnVmZls4XTsKKwlfX3U4CQkJdHhfYnVmZltQRUdBU1VTX01UVV07CisJX191OAkJCWV0aF9yZWdzWzRdOworCV9fdTgJCQlwaHk7CisJX191OAkJCWdwaW9fcmVzOworfSBwZWdhc3VzX3Q7CisKKworc3RydWN0IHVzYl9ldGhfZGV2IHsKKwljaGFyCSpuYW1lOworCV9fdTE2CXZlbmRvcjsKKwlfX3UxNglkZXZpY2U7CisJX191MzIJcHJpdmF0ZTsgLyogTFNCIGlzIGdwaW8gcmVzZXQgdmFsdWUgKi8KK307CisKKyNkZWZpbmUJVkVORE9SXzNDT00JCTB4MDUwNgorI2RlZmluZQlWRU5ET1JfQUJPQ09NCQkweDA3YjgKKyNkZWZpbmUJVkVORE9SX0FDQ1RPTgkJMHgwODNhCisjZGVmaW5lCVZFTkRPUl9BRE1URUsJCTB4MDdhNgorI2RlZmluZQlWRU5ET1JfQUVJTEFCCQkweDMzMzQKKyNkZWZpbmUJVkVORE9SX0FMTElFRFRFTAkweDA3YzkKKyNkZWZpbmUJVkVORE9SX0FURU4JCTB4MDU1NworI2RlZmluZQlWRU5ET1JfQkVMS0lOCQkweDA1MGQKKyNkZWZpbmUJVkVORE9SX0JJTExJT05UT04JMHgwOGRkCisjZGVmaW5lCVZFTkRPUl9DT01QQVEJCTB4MDQ5ZgorI2RlZmluZQlWRU5ET1JfQ09SRUdBCQkweDA3YWEKKyNkZWZpbmUJVkVORE9SX0RMSU5LCQkweDIwMDEKKyNkZWZpbmUJVkVORE9SX0VMQ09OCQkweDBkYjcKKyNkZWZpbmUJVkVORE9SX0VMU0EJCTB4MDVjYworI2RlZmluZQlWRU5ET1JfR0lHQUJZVEUJCTB4MTA0NAorI2RlZmluZQlWRU5ET1JfSEFXS0lORwkJMHgwZTY2CisjZGVmaW5lCVZFTkRPUl9IUAkJMHgwM2YwCisjZGVmaW5lCVZFTkRPUl9JT0RBVEEJCTB4MDRiYgorI2RlZmluZQlWRU5ET1JfS0lOR1NUT04JCTB4MDk1MQorI2RlZmluZQlWRU5ET1JfTEFORUVECQkweDA1NmUKKyNkZWZpbmUJVkVORE9SX0xJTktTWVMJCTB4MDY2YgorI2RlZmluZQlWRU5ET1JfTUVMQ08JCTB4MDQxMQorI2RlZmluZQlWRU5ET1JfTUlDUk9TT0ZUCTB4MDQ1ZQorI2RlZmluZQlWRU5ET1JfTU9CSUxJVFkJCTB4MTM0MgorI2RlZmluZQlWRU5ET1JfTkVUR0VBUgkJMHgwODQ2CisjZGVmaW5lCVZFTkRPUl9PQ1QJCTB4MGIzOQorI2RlZmluZQlWRU5ET1JfU01BUlRCUklER0VTCTB4MDhkMQorI2RlZmluZQlWRU5ET1JfU01DCQkweDA3MDcKKyNkZWZpbmUJVkVORE9SX1NPSE9XQVJFCQkweDE1ZTgKKyNkZWZpbmUJVkVORE9SX1NJRU1FTlMJCTB4MDY3YworCisKKyNlbHNlCS8qIFBFR0FTVVNfREVWICovCisKK1BFR0FTVVNfREVWKCAiM0NvbSBVU0IgRXRoZXJuZXQgM0M0NjBCIiwgVkVORE9SXzNDT00sIDB4NDYwMSwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIkFURU4gVVNCIEV0aGVybmV0IFVDLTExMFQiLCBWRU5ET1JfQVRFTiwgMHgyMDA3LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiVVNCIEhQTkEvRXRoZXJuZXQiLCBWRU5ET1JfQUJPQ09NLCAweDExMGMsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgfCBIQVNfSE9NRV9QTkEgKQorUEVHQVNVU19ERVYoICJVU0IgSFBOQS9FdGhlcm5ldCIsIFZFTkRPUl9BQk9DT00sIDB4NDEwNCwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgSEFTX0hPTUVfUE5BICkKK1BFR0FTVVNfREVWKCAiVVNCIEhQTkEvRXRoZXJuZXQiLCBWRU5ET1JfQUJPQ09NLCAweDQwMDQsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IEhBU19IT01FX1BOQSApCitQRUdBU1VTX0RFViggIlVTQiBIUE5BL0V0aGVybmV0IiwgVkVORE9SX0FCT0NPTSwgMHg0MDA3LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBIQVNfSE9NRV9QTkEgKQorUEVHQVNVU19ERVYoICJVU0IgMTAvMTAwIEZhc3QgRXRoZXJuZXQiLCBWRU5ET1JfQUJPQ09NLCAweDQxMDIsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJVU0IgMTAvMTAwIEZhc3QgRXRoZXJuZXQiLCBWRU5ET1JfQUJPQ09NLCAweDQwMDIsCisJCURFRkFVTFRfR1BJT19SRVNFVCApCitQRUdBU1VTX0RFViggIlVTQiAxMC8xMDAgRmFzdCBFdGhlcm5ldCIsIFZFTkRPUl9BQk9DT00sIDB4NDAwYiwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIlVTQiAxMC8xMDAgRmFzdCBFdGhlcm5ldCIsIFZFTkRPUl9BQk9DT00sIDB4NDAwYywKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIlVTQiAxMC8xMDAgRmFzdCBFdGhlcm5ldCIsIFZFTkRPUl9BQk9DT00sIDB4YWJjMSwKKwkJREVGQVVMVF9HUElPX1JFU0VUICkKK1BFR0FTVVNfREVWKCAiVVNCIDEwLzEwMCBGYXN0IEV0aGVybmV0IiwgVkVORE9SX0FCT0NPTSwgMHgyMDBjLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkgCQorUEVHQVNVU19ERVYoICJBY2N0b24gVVNCIDEwLzEwMCBFdGhlcm5ldCBBZGFwdGVyIiwgVkVORE9SX0FDQ1RPTiwgMHgxMDQ2LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgKQorUEVHQVNVU19ERVYoICJTcGVlZFN0cmVhbSBVU0IgMTAvMTAwIEV0aGVybmV0IiwgVkVORE9SX0FDQ1RPTiwgMHg1MDQ2LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiQURNdGVrIEFETTg1MTEgXCJQZWdhc3VzIElJXCIgVVNCIEV0aGVybmV0IiwKKwkJVkVORE9SX0FETVRFSywgMHg4NTExLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJIHwgSEFTX0hPTUVfUE5BICkKK1BFR0FTVVNfREVWKCAiQURNdGVrIEFETTg1MTMgXCJQZWdhc3VzIElJXCIgVVNCIEV0aGVybmV0IiwKKwkJVkVORE9SX0FETVRFSywgMHg4NTEzLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiQURNdGVrIEFETTg1MTUgXCJQZWdhc3VzIElJXCIgVVNCLTIuMCBFdGhlcm5ldCIsCisJCVZFTkRPUl9BRE1URUssIDB4ODUxNSwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIkFETXRlayBBTjk4NiBcIlBlZ2FzdXNcIiBVU0IgRXRoZXJuZXQgKGV2YWx1YXRpb24gYm9hcmQpIiwKKwkJVkVORE9SX0FETVRFSywgMHgwOTg2LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBIQVNfSE9NRV9QTkEgKQorUEVHQVNVU19ERVYoICJBTjk4NkEgVVNCIE1BQyIsIFZFTkRPUl9BRE1URUssIDE5ODYsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJBRUkgVVNCIEZhc3QgRXRoZXJuZXQgQWRhcHRlciIsIFZFTkRPUl9BRUlMQUIsIDB4MTcwMSwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIkFsbGllZCBUZWxlc3luIEludC4gQVQtVVNCMTAwIiwgVkVORE9SX0FMTElFRFRFTCwgMHhiMTAwLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiQmVsa2luIEY1RDUwNTAgVVNCIEV0aGVybmV0IiwgVkVORE9SX0JFTEtJTiwgMHgwMTIxLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiQmlsbGlvbnRvbiBVU0ItMTAwIiwgVkVORE9SX0JJTExJT05UT04sIDB4MDk4NiwKKwkJREVGQVVMVF9HUElPX1JFU0VUICkKK1BFR0FTVVNfREVWKCAiQmlsbGlvbnRvbiBVU0JMUC0xMDAiLCBWRU5ET1JfQklMTElPTlRPTiwgMHgwOTg3LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBIQVNfSE9NRV9QTkEgKQorUEVHQVNVU19ERVYoICJpUEFRIE5ldHdvcmtpbmcgMTAvMTAwIFVTQiIsIFZFTkRPUl9DT01QQVEsIDB4ODUxMSwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIkJpbGxpb250b24gVVNCRUwtMTAwIiwgVkVORE9SX0JJTExJT05UT04sIDB4MDk4OCwKKwkJREVGQVVMVF9HUElPX1JFU0VUICkKK1BFR0FTVVNfREVWKCAiQmlsbGlvbnRvbiBVU0JFLTEwMCIsIFZFTkRPUl9CSUxMSU9OVE9OLCAweDg1MTEsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJDb3JlZ2EgRkV0ZXIgVVNCLVRYIiwgVkVORE9SX0NPUkVHQSwgMHgwMDA0LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgKQorUEVHQVNVU19ERVYoICJDb3JlZ2EgRkV0ZXIgVVNCLVRYUyIsIFZFTkRPUl9DT1JFR0EsIDB4MDAwZCwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIkQtTGluayBEU0ItNjUwVFgiLCBWRU5ET1JfRExJTkssIDB4NDAwMSwKKwkJTElOS1NZU19HUElPX1JFU0VUICkKK1BFR0FTVVNfREVWKCAiRC1MaW5rIERTQi02NTBUWCIsIFZFTkRPUl9ETElOSywgMHg0MDAyLAorCQlMSU5LU1lTX0dQSU9fUkVTRVQgKQorUEVHQVNVU19ERVYoICJELUxpbmsgRFNCLTY1MFRYIiwgVkVORE9SX0RMSU5LLCAweDQxMDIsCisJCUxJTktTWVNfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJELUxpbmsgRFNCLTY1MFRYIiwgVkVORE9SX0RMSU5LLCAweDQwMGIsCisJCUxJTktTWVNfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJELUxpbmsgRFNCLTY1MFRYIiwgVkVORE9SX0RMSU5LLCAweDIwMGMsCisJCUxJTktTWVNfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJELUxpbmsgRFNCLTY1MFRYKFBOQSkiLCBWRU5ET1JfRExJTkssIDB4NDAwMywKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgSEFTX0hPTUVfUE5BICkKK1BFR0FTVVNfREVWKCAiRC1MaW5rIERTQi02NTAiLCBWRU5ET1JfRExJTkssIDB4YWJjMSwKKwkJREVGQVVMVF9HUElPX1JFU0VUICkKK1BFR0FTVVNfREVWKCAiR09MRFBGRUlMIFVTQiBBZGFwdGVyIiwgVkVORE9SX0VMQ09OLCAweDAwMDIsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgfCBIQVNfSE9NRV9QTkEgKQorUEVHQVNVU19ERVYoICJFYXNpRG9jayBFdGhlcm5ldCIsIFZFTkRPUl9NT0JJTElUWSwgMHgwMzA0LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgKQorUEVHQVNVU19ERVYoICJFbHNhIE1pY29saW5rIFVTQjJFdGhlcm5ldCIsIFZFTkRPUl9FTFNBLCAweDMwMDAsCisJCURFRkFVTFRfR1BJT19SRVNFVCApCitQRUdBU1VTX0RFViggIkdJR0FCWVRFIEdOLUJSNDAyVyBXaXJlbGVzcyBSb3V0ZXIiLCBWRU5ET1JfR0lHQUJZVEUsIDB4ODAwMiwKKwkJREVGQVVMVF9HUElPX1JFU0VUICkKK1BFR0FTVVNfREVWKCAiSGF3a2luZyBVRjEwMCAxMC8xMDAgRXRoZXJuZXQiLCBWRU5ET1JfSEFXS0lORywgMHg0MDBjLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiSFAgaG4yMTBjIEV0aGVybmV0IFVTQiIsIFZFTkRPUl9IUCwgMHg4MTFjLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkJCitQRUdBU1VTX0RFViggIklPIERBVEEgVVNCIEVUL1RYIiwgVkVORE9SX0lPREFUQSwgMHgwOTA0LAorCQlERUZBVUxUX0dQSU9fUkVTRVQgKQorUEVHQVNVU19ERVYoICJJTyBEQVRBIFVTQiBFVC9UWC1TIiwgVkVORE9SX0lPREFUQSwgMHgwOTEzLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiS2luZ3N0b24gS05VMTAxVFggRXRoZXJuZXQiLCBWRU5ET1JfS0lOR1NUT04sIDB4MDAwYSwKKwkJREVGQVVMVF9HUElPX1JFU0VUKQorUEVHQVNVU19ERVYoICJMQU5FRUQgVVNCIEV0aGVybmV0IExELVVTQi9UWCIsIFZFTkRPUl9MQU5FRUQsIDB4NDAwMiwKKwkJREVGQVVMVF9HUElPX1JFU0VUICkKK1BFR0FTVVNfREVWKCAiTEFORUVEIFVTQiBFdGhlcm5ldCBMRC1VU0IvVFgiLCBWRU5ET1JfTEFORUVELCAweDQwMGIsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJMQU5FRUQgVVNCIEV0aGVybmV0IExELVVTQi9UIiwgVkVORE9SX0xBTkVFRCwgMHhhYmMxLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgKQorUEVHQVNVU19ERVYoICJMQU5FRUQgVVNCIEV0aGVybmV0IExELVVTQi9UWCIsIFZFTkRPUl9MQU5FRUQsIDB4MjAwYywKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIkxpbmtzeXMgVVNCMTBUWCIsIFZFTkRPUl9MSU5LU1lTLCAweDIyMDIsCisJCUxJTktTWVNfR1BJT19SRVNFVCApCitQRUdBU1VTX0RFViggIkxpbmtzeXMgVVNCMTAwVFgiLCBWRU5ET1JfTElOS1NZUywgMHgyMjAzLAorCQlMSU5LU1lTX0dQSU9fUkVTRVQgKQorUEVHQVNVU19ERVYoICJMaW5rc3lzIFVTQjEwMFRYIiwgVkVORE9SX0xJTktTWVMsIDB4MjIwNCwKKwkJTElOS1NZU19HUElPX1JFU0VUIHwgSEFTX0hPTUVfUE5BICkKK1BFR0FTVVNfREVWKCAiTGlua3N5cyBVU0IxMFQgRXRoZXJuZXQgQWRhcHRlciIsIFZFTkRPUl9MSU5LU1lTLCAweDIyMDYsCisJCUxJTktTWVNfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkpCitQRUdBU1VTX0RFViggIkxpbmtzeXMgVVNCIFVTQjEwMFRYIiwgVkVORE9SX0xJTktTWVMsIDB4NDAwYiwKKwkJTElOS1NZU19HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIkxpbmtzeXMgVVNCMTBUWCIsIFZFTkRPUl9MSU5LU1lTLCAweDIwMGMsCisJCUxJTktTWVNfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQkKK1BFR0FTVVNfREVWKCAiTUVMQ08vQlVGRkFMTyBMVUEtVFgiLCBWRU5ET1JfTUVMQ08sIDB4MDAwMSwKKwkJREVGQVVMVF9HUElPX1JFU0VUICkKK1BFR0FTVVNfREVWKCAiTUVMQ08vQlVGRkFMTyBMVUEtVFgiLCBWRU5ET1JfTUVMQ08sIDB4MDAwNSwKKwkJREVGQVVMVF9HUElPX1JFU0VUICkKK1BFR0FTVVNfREVWKCAiTUVMQ08vQlVGRkFMTyBMVUEyLVRYIiwgVkVORE9SX01FTENPLCAweDAwMDksCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJNaWNyb3NvZnQgTU4tMTEwIiwgVkVORE9SX01JQ1JPU09GVCwgMHgwMDdhLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiTkVUR0VBUiBGQTEwMSIsIFZFTkRPUl9ORVRHRUFSLCAweDEwMjAsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJPQ1QgSW5jLiIsIFZFTkRPUl9PQ1QsIDB4MDEwOSwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSApCitQRUdBU1VTX0RFViggIk9DVCBVU0IgVE8gRXRoZXJuZXQiLCBWRU5ET1JfT0NULCAweDA5MDEsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorUEVHQVNVU19ERVYoICJzbWFydE5JQyAyIFBuUCBBZGFwdGVyIiwgVkVORE9SX1NNQVJUQlJJREdFUywgMHgwMDAzLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiU01DIDIwMiBVU0IgRXRoZXJuZXQiLCBWRU5ET1JfU01DLCAweDAyMDAsCisJCURFRkFVTFRfR1BJT19SRVNFVCApCitQRUdBU1VTX0RFViggIlNNQyAyMjA2IFVTQiBFdGhlcm5ldCIsIFZFTkRPUl9TTUMsIDB4MDIwMSwKKwkJREVGQVVMVF9HUElPX1JFU0VUIHwgUEVHQVNVU19JSSkKK1BFR0FTVVNfREVWKCAiU09IT3dhcmUgTlVCMTAwIEV0aGVybmV0IiwgVkVORE9SX1NPSE9XQVJFLCAweDkxMDAsCisJCURFRkFVTFRfR1BJT19SRVNFVCApCitQRUdBU1VTX0RFViggIlNPSE93YXJlIE5VQjExMCBFdGhlcm5ldCIsIFZFTkRPUl9TT0hPV0FSRSwgMHg5MTEwLAorCQlERUZBVUxUX0dQSU9fUkVTRVQgfCBQRUdBU1VTX0lJICkKK1BFR0FTVVNfREVWKCAiU3BlZWRTdHJlYW0gVVNCIDEwLzEwMCBFdGhlcm5ldCIsIFZFTkRPUl9TSUVNRU5TLCAweDEwMDEsCisJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgKQorCisKKyNlbmRpZgkvKiBQRUdBU1VTX0RFViAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L3J0bDgxNTAuYyBiL2RyaXZlcnMvdXNiL25ldC9ydGw4MTUwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZiMjIzMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL25ldC9ydGw4MTUwLmMKQEAgLTAsMCArMSw5NDIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAyMDAyIFBldGtvIE1hbm9sb3YgKHBldGthbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKy8qIFZlcnNpb24gSW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjYuMiAoMjAwNC8wOC8yNykiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlBldGtvIE1hbm9sb3YgPHBldGthbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IgorI2RlZmluZSBEUklWRVJfREVTQyAicnRsODE1MCBiYXNlZCB1c2ItZXRoZXJuZXQgZHJpdmVyIgorCisjZGVmaW5lCUlEUgkJCTB4MDEyMAorI2RlZmluZQlNQVIJCQkweDAxMjYKKyNkZWZpbmUJQ1IJCQkweDAxMmUKKyNkZWZpbmUJVENSCQkJMHgwMTJmCisjZGVmaW5lCVJDUgkJCTB4MDEzMAorI2RlZmluZQlUU1IJCQkweDAxMzIKKyNkZWZpbmUJUlNSCQkJMHgwMTMzCisjZGVmaW5lCUNPTjAJCQkweDAxMzUKKyNkZWZpbmUJQ09OMQkJCTB4MDEzNgorI2RlZmluZQlNU1IJCQkweDAxMzcKKyNkZWZpbmUJUEhZQURECQkJMHgwMTM4CisjZGVmaW5lCVBIWURBVAkJCTB4MDEzOQorI2RlZmluZQlQSFlDTlQJCQkweDAxM2IKKyNkZWZpbmUJR1BQQwkJCTB4MDEzZAorI2RlZmluZQlCTUNSCQkJMHgwMTQwCisjZGVmaW5lCUJNU1IJCQkweDAxNDIKKyNkZWZpbmUJQU5BUgkJCTB4MDE0NAorI2RlZmluZQlBTkxQCQkJMHgwMTQ2CisjZGVmaW5lCUFFUgkJCTB4MDE0OAorI2RlZmluZSBDU0NSCQkJMHgwMTRDICAvKiBUaGlzIG9uZSBoYXMgdGhlIGxpbmsgc3RhdHVzICovCisjZGVmaW5lIENTQ1JfTElOS19TVEFUVVMJKDEgPDwgMykKKworI2RlZmluZQlJRFJfRUVQUk9NCQkweDEyMDIKKworI2RlZmluZQlQSFlfUkVBRAkJMAorI2RlZmluZQlQSFlfV1JJVEUJCTB4MjAKKyNkZWZpbmUJUEhZX0dPCQkJMHg0MAorCisjZGVmaW5lCU1JSV9USU1FT1VUCQkxMAorI2RlZmluZQlJTlRCVUZTSVpFCQk4CisKKyNkZWZpbmUJUlRMODE1MF9SRVFUX1JFQUQJMHhjMAorI2RlZmluZQlSVEw4MTUwX1JFUVRfV1JJVEUJMHg0MAorI2RlZmluZQlSVEw4MTUwX1JFUV9HRVRfUkVHUwkweDA1CisjZGVmaW5lCVJUTDgxNTBfUkVRX1NFVF9SRUdTCTB4MDUKKworCisvKiBUcmFuc21pdCBzdGF0dXMgcmVnaXN0ZXIgZXJyb3JzICovCisjZGVmaW5lIFRTUl9FQ09MCQkoMTw8NSkKKyNkZWZpbmUgVFNSX0xDT0wJCSgxPDw0KQorI2RlZmluZSBUU1JfTE9TU19DUlMJCSgxPDwzKQorI2RlZmluZSBUU1JfSkJSCQkJKDE8PDIpCisjZGVmaW5lIFRTUl9FUlJPUlMJCShUU1JfRUNPTCB8IFRTUl9MQ09MIHwgVFNSX0xPU1NfQ1JTIHwgVFNSX0pCUikKKy8qIFJlY2VpdmUgc3RhdHVzIHJlZ2lzdGVyIGVycm9ycyAqLworI2RlZmluZSBSU1JfQ1JDCQkJKDE8PDIpCisjZGVmaW5lIFJTUl9GQUUJCQkoMTw8MSkKKyNkZWZpbmUgUlNSX0VSUk9SUwkJKFJTUl9DUkMgfCBSU1JfRkFFKQorCisvKiBNZWRpYSBzdGF0dXMgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVNSX0RVUExFWAkJKDE8PDQpCisjZGVmaW5lIE1TUl9TUEVFRAkJKDE8PDMpCisjZGVmaW5lIE1TUl9MSU5LCQkoMTw8MikKKworLyogSW50ZXJydXB0IHBpcGUgZGF0YSAqLworI2RlZmluZSBJTlRfVFNSCQkJMHgwMAorI2RlZmluZSBJTlRfUlNSCQkJMHgwMQorI2RlZmluZSBJTlRfTVNSCQkJMHgwMgorI2RlZmluZSBJTlRfV0FLU1IJCTB4MDMKKyNkZWZpbmUgSU5UX1RYT0tfQ05UCQkweDA0CisjZGVmaW5lIElOVF9SWExPU1RfQ05UCQkweDA1CisjZGVmaW5lIElOVF9DUkVSUl9DTlQJCTB4MDYKKyNkZWZpbmUgSU5UX0NPTF9DTlQJCTB4MDcKKworLyogVHJhbnNtaXQgc3RhdHVzIHJlZ2lzdGVyIGVycm9ycyAqLworI2RlZmluZSBUU1JfRUNPTAkJKDE8PDUpCisjZGVmaW5lIFRTUl9MQ09MCQkoMTw8NCkKKyNkZWZpbmUgVFNSX0xPU1NfQ1JTCQkoMTw8MykKKyNkZWZpbmUgVFNSX0pCUgkJCSgxPDwyKQorI2RlZmluZSBUU1JfRVJST1JTCQkoVFNSX0VDT0wgfCBUU1JfTENPTCB8IFRTUl9MT1NTX0NSUyB8IFRTUl9KQlIpCisvKiBSZWNlaXZlIHN0YXR1cyByZWdpc3RlciBlcnJvcnMgKi8KKyNkZWZpbmUgUlNSX0NSQwkJCSgxPDwyKQorI2RlZmluZSBSU1JfRkFFCQkJKDE8PDEpCisjZGVmaW5lIFJTUl9FUlJPUlMJCShSU1JfQ1JDIHwgUlNSX0ZBRSkKKworLyogTWVkaWEgc3RhdHVzIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIE1TUl9EVVBMRVgJCSgxPDw0KQorI2RlZmluZSBNU1JfU1BFRUQJCSgxPDwzKQorI2RlZmluZSBNU1JfTElOSwkJKDE8PDIpCisKKy8qIEludGVycnVwdCBwaXBlIGRhdGEgKi8KKyNkZWZpbmUgSU5UX1RTUgkJCTB4MDAKKyNkZWZpbmUgSU5UX1JTUgkJCTB4MDEKKyNkZWZpbmUgSU5UX01TUgkJCTB4MDIKKyNkZWZpbmUgSU5UX1dBS1NSCQkweDAzCisjZGVmaW5lIElOVF9UWE9LX0NOVAkJMHgwNAorI2RlZmluZSBJTlRfUlhMT1NUX0NOVAkJMHgwNQorI2RlZmluZSBJTlRfQ1JFUlJfQ05UCQkweDA2CisjZGVmaW5lIElOVF9DT0xfQ05UCQkweDA3CisKKworI2RlZmluZQlSVEw4MTUwX01UVQkJMTU0MAorI2RlZmluZQlSVEw4MTUwX1RYX1RJTUVPVVQJKEhaKQorI2RlZmluZQlSWF9TS0JfUE9PTF9TSVpFCTQKKworLyogcnRsODE1MCBmbGFncyAqLworI2RlZmluZQlSVEw4MTUwX0hXX0NSQwkJMAorI2RlZmluZQlSWF9SRUdfU0VUCQkxCisjZGVmaW5lCVJUTDgxNTBfVU5QTFVHCQkyCisjZGVmaW5lCVJYX1VSQl9GQUlMCQkzCisKKy8qIERlZmluZSB0aGVzZSB2YWx1ZXMgdG8gbWF0Y2ggeW91ciBkZXZpY2UgKi8KKyNkZWZpbmUgVkVORE9SX0lEX1JFQUxURUsJCTB4MGJkYQorI2RlZmluZQlWRU5ET1JfSURfTUVMQ08JCQkweDA0MTEKKyNkZWZpbmUgVkVORE9SX0lEX01JQ1JPTkVUCQkweDM5ODAKKyNkZWZpbmUJVkVORE9SX0lEX0xPTkdTSElORQkJMHgwN2I4CisKKyNkZWZpbmUgUFJPRFVDVF9JRF9SVEw4MTUwCQkweDgxNTAKKyNkZWZpbmUJUFJPRFVDVF9JRF9MVUFLVFgJCTB4MDAxMgorI2RlZmluZQlQUk9EVUNUX0lEX0xDUzgxMzhUWAkJMHg0MDFhCisjZGVmaW5lIFBST0RVQ1RfSURfU1AxMjhBUgkJMHgwMDAzCisKKyN1bmRlZglFRVBST01fV1JJVEUKKworLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHJ0bDgxNTBfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRShWRU5ET1JfSURfUkVBTFRFSywgUFJPRFVDVF9JRF9SVEw4MTUwKX0sCisJe1VTQl9ERVZJQ0UoVkVORE9SX0lEX01FTENPLCBQUk9EVUNUX0lEX0xVQUtUWCl9LAorCXtVU0JfREVWSUNFKFZFTkRPUl9JRF9NSUNST05FVCwgUFJPRFVDVF9JRF9TUDEyOEFSKX0sCisJe1VTQl9ERVZJQ0UoVkVORE9SX0lEX0xPTkdTSElORSwgUFJPRFVDVF9JRF9MQ1M4MTM4VFgpfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHJ0bDgxNTBfdGFibGUpOworCitzdHJ1Y3QgcnRsODE1MCB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGw7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgdXJiICpyeF91cmIsICp0eF91cmIsICppbnRyX3VyYiwgKmN0cmxfdXJiOworCXN0cnVjdCBza19idWZmICp0eF9za2IsICpyeF9za2I7CisJc3RydWN0IHNrX2J1ZmYgKnJ4X3NrYl9wb29sW1JYX1NLQl9QT09MX1NJWkVdOworCXNwaW5sb2NrX3QgcnhfcG9vbF9sb2NrOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgZHI7CisJaW50IGludHJfaW50ZXJ2YWw7CisJX19sZTE2IHJ4X2NyZWc7CisJdTggKmludHJfYnVmZjsKKwl1OCBwaHk7Cit9OworCit0eXBlZGVmIHN0cnVjdCBydGw4MTUwIHJ0bDgxNTBfdDsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXVsdGljYXN0X2ZpbHRlcl9saW1pdCA9IDMyOworCitzdGF0aWMgdm9pZCBmaWxsX3NrYl9wb29sKHJ0bDgxNTBfdCAqKTsKK3N0YXRpYyB2b2lkIGZyZWVfc2tiX3Bvb2wocnRsODE1MF90ICopOworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqcHVsbF9za2IocnRsODE1MF90ICopOworc3RhdGljIHZvaWQgcnRsODE1MF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKK3N0YXRpYyBpbnQgcnRsODE1MF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CisKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lIFtdID0gInJ0bDgxNTAiOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcnRsODE1MF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJZHJpdmVyX25hbWUsCisJLnByb2JlID0JcnRsODE1MF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXJ0bDgxNTBfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlydGw4MTUwX3RhYmxlLAorfTsKKworLyoKKyoqCisqKglkZXZpY2UgcmVsYXRlZCBwYXJ0IG9mIHRoZSBjb2RlCisqKgorKi8KK3N0YXRpYyBpbnQgZ2V0X3JlZ2lzdGVycyhydGw4MTUwX3QgKiBkZXYsIHUxNiBpbmR4LCB1MTYgc2l6ZSwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwgdXNiX3JjdmN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkgICAgICAgUlRMODE1MF9SRVFfR0VUX1JFR1MsIFJUTDgxNTBfUkVRVF9SRUFELAorCQkJICAgICAgIGluZHgsIDAsIGRhdGEsIHNpemUsIDUwMCk7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3JlZ2lzdGVycyhydGw4MTUwX3QgKiBkZXYsIHUxNiBpbmR4LCB1MTYgc2l6ZSwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkgICAgICAgUlRMODE1MF9SRVFfU0VUX1JFR1MsIFJUTDgxNTBfUkVRVF9XUklURSwKKwkJCSAgICAgICBpbmR4LCAwLCBkYXRhLCBzaXplLCA1MDApOworfQorCitzdGF0aWMgdm9pZCBjdHJsX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcnRsODE1MF90ICpkZXY7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIC1FSU5QUk9HUkVTUzoKKwkJYnJlYWs7CisJY2FzZSAtRU5PRU5UOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQl3YXJuKCJjdHJsIHVyYiBzdGF0dXMgJWQiLCB1cmItPnN0YXR1cyk7CisJfQorCWRldiA9IHVyYi0+Y29udGV4dDsKKwljbGVhcl9iaXQoUlhfUkVHX1NFVCwgJmRldi0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGFzeW5jX3NldF9yZWdpc3RlcnMocnRsODE1MF90ICogZGV2LCB1MTYgaW5keCwgdTE2IHNpemUpCit7CisJaW50IHJldDsKKworCWlmICh0ZXN0X2JpdChSWF9SRUdfU0VULCAmZGV2LT5mbGFncykpCisJCXJldHVybiAtRUFHQUlOOworCisJZGV2LT5kci5iUmVxdWVzdFR5cGUgPSBSVEw4MTUwX1JFUVRfV1JJVEU7CisJZGV2LT5kci5iUmVxdWVzdCA9IFJUTDgxNTBfUkVRX1NFVF9SRUdTOworCWRldi0+ZHIud1ZhbHVlID0gY3B1X3RvX2xlMTYoaW5keCk7CisJZGV2LT5kci53SW5kZXggPSAwOworCWRldi0+ZHIud0xlbmd0aCA9IGNwdV90b19sZTE2KHNpemUpOworCWRldi0+Y3RybF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBzaXplOworCXVzYl9maWxsX2NvbnRyb2xfdXJiKGRldi0+Y3RybF91cmIsIGRldi0+dWRldiwKKwkJCSB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwgKGNoYXIgKikgJmRldi0+ZHIsCisJCQkgJmRldi0+cnhfY3JlZywgc2l6ZSwgY3RybF9jYWxsYmFjaywgZGV2KTsKKwlpZiAoKHJldCA9IHVzYl9zdWJtaXRfdXJiKGRldi0+Y3RybF91cmIsIEdGUF9BVE9NSUMpKSkKKwkJZXJyKCJjb250cm9sIHJlcXVlc3Qgc3VibWlzc2lvbiBmYWlsZWQ6ICVkIiwgcmV0KTsKKwllbHNlCisJCXNldF9iaXQoUlhfUkVHX1NFVCwgJmRldi0+ZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZWFkX21paV93b3JkKHJ0bDgxNTBfdCAqIGRldiwgdTggcGh5LCBfX3U4IGluZHgsIHUxNiAqIHJlZykKK3sKKwlpbnQgaTsKKwl1OCBkYXRhWzNdLCB0bXA7CisKKwlkYXRhWzBdID0gcGh5OworCWRhdGFbMV0gPSBkYXRhWzJdID0gMDsKKwl0bXAgPSBpbmR4IHwgUEhZX1JFQUQgfCBQSFlfR087CisJaSA9IDA7CisKKwlzZXRfcmVnaXN0ZXJzKGRldiwgUEhZQURELCBzaXplb2YoZGF0YSksIGRhdGEpOworCXNldF9yZWdpc3RlcnMoZGV2LCBQSFlDTlQsIDEsICZ0bXApOworCWRvIHsKKwkJZ2V0X3JlZ2lzdGVycyhkZXYsIFBIWUNOVCwgMSwgZGF0YSk7CisJfSB3aGlsZSAoKGRhdGFbMF0gJiBQSFlfR08pICYmIChpKysgPCBNSUlfVElNRU9VVCkpOworCisJaWYgKGkgPCBNSUlfVElNRU9VVCkgeworCQlnZXRfcmVnaXN0ZXJzKGRldiwgUEhZREFULCAyLCBkYXRhKTsKKwkJKnJlZyA9IGRhdGFbMF0gfCAoZGF0YVsxXSA8PCA4KTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHdyaXRlX21paV93b3JkKHJ0bDgxNTBfdCAqIGRldiwgdTggcGh5LCBfX3U4IGluZHgsIHUxNiByZWcpCit7CisJaW50IGk7CisJdTggZGF0YVszXSwgdG1wOworCisJZGF0YVswXSA9IHBoeTsKKwkqKGRhdGEgKyAxKSA9IGNwdV90b19sZTE2cCgmcmVnKTsKKwl0bXAgPSBpbmR4IHwgUEhZX1dSSVRFIHwgUEhZX0dPOworCWkgPSAwOworCisJc2V0X3JlZ2lzdGVycyhkZXYsIFBIWUFERCwgc2l6ZW9mKGRhdGEpLCBkYXRhKTsKKwlzZXRfcmVnaXN0ZXJzKGRldiwgUEhZQ05ULCAxLCAmdG1wKTsKKwlkbyB7CisJCWdldF9yZWdpc3RlcnMoZGV2LCBQSFlDTlQsIDEsIGRhdGEpOworCX0gd2hpbGUgKChkYXRhWzBdICYgUEhZX0dPKSAmJiAoaSsrIDwgTUlJX1RJTUVPVVQpKTsKKworCWlmIChpIDwgTUlJX1RJTUVPVVQpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZXRoZXJuZXRfYWRkcihydGw4MTUwX3QgKiBkZXYpCit7CisJdTggbm9kZV9pZFs2XTsKKworCWdldF9yZWdpc3RlcnMoZGV2LCBJRFIsIHNpemVvZihub2RlX2lkKSwgbm9kZV9pZCk7CisJbWVtY3B5KGRldi0+bmV0ZGV2LT5kZXZfYWRkciwgbm9kZV9pZCwgc2l6ZW9mKG5vZGVfaWQpKTsKK30KKworc3RhdGljIGludCBydGw4MTUwX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKQoreworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisJcnRsODE1MF90ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBpOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKKwlkYmcoIiVzOiBTZXR0aW5nIE1BQyBhZGRyZXNzIHRvICIsIG5ldGRldi0+bmFtZSk7CisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJZGJnKCIlMDJYOiIsIG5ldGRldi0+ZGV2X2FkZHJbaV0pOworCWRiZygiJTAyWFxuIiwgbmV0ZGV2LT5kZXZfYWRkcltpXSk7CisJLyogU2V0IHRoZSBJRFIgcmVnaXN0ZXJzLiAqLworCXNldF9yZWdpc3RlcnMoZGV2LCBJRFIsIHNpemVvZihuZXRkZXYtPmRldl9hZGRyKSwgbmV0ZGV2LT5kZXZfYWRkcik7CisjaWZkZWYgRUVQUk9NX1dSSVRFCisJeworCXU4IGNyOworCS8qIEdldCB0aGUgQ1IgY29udGVudHMuICovCisJZ2V0X3JlZ2lzdGVycyhkZXYsIENSLCAxLCAmY3IpOworCS8qIFNldCB0aGUgV0VQUk9NIGJpdCAoZWVwcm9tIHdyaXRlIGVuYWJsZSkuICovCisJY3IgfD0gMHgyMDsKKwlzZXRfcmVnaXN0ZXJzKGRldiwgQ1IsIDEsICZjcik7CisJLyogV3JpdGUgdGhlIE1BQyBhZGRyZXNzIGludG8gZWVwcm9tLiBFZXByb20gd3JpdGVzIG11c3QgYmUgd29yZC1zaXplZCwKKwkgICBzbyB3ZSBuZWVkIHRvIHNwbGl0IHRoZW0gdXAuICovCisJZm9yIChpID0gMDsgaSAqIDIgPCBuZXRkZXYtPmFkZHJfbGVuOyBpKyspIHsKKwkJc2V0X3JlZ2lzdGVycyhkZXYsIElEUl9FRVBST00gKyAoaSAqIDIpLCAyLCAKKwkJbmV0ZGV2LT5kZXZfYWRkciArIChpICogMikpOworCX0KKwkvKiBDbGVhciB0aGUgV0VQUk9NIGJpdCAocHJldmVudGluZyBhY2NpZGVudGFsIGVlcHJvbSB3cml0ZXMpLiAqLworCWNyICY9IDB4ZGY7CisJc2V0X3JlZ2lzdGVycyhkZXYsIENSLCAxLCAmY3IpOworCX0KKyNlbmRpZgorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgxNTBfcmVzZXQocnRsODE1MF90ICogZGV2KQoreworCXU4IGRhdGEgPSAweDEwOworCWludCBpID0gSFo7CisKKwlzZXRfcmVnaXN0ZXJzKGRldiwgQ1IsIDEsICZkYXRhKTsKKwlkbyB7CisJCWdldF9yZWdpc3RlcnMoZGV2LCBDUiwgMSwgJmRhdGEpOworCX0gd2hpbGUgKChkYXRhICYgMHgxMCkgJiYgLS1pKTsKKworCXJldHVybiAoaSA+IDApID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfYWxsX3VyYnMocnRsODE1MF90ICogZGV2KQoreworCWRldi0+cnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+cnhfdXJiKQorCQlyZXR1cm4gMDsKKwlkZXYtPnR4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPnR4X3VyYikgeworCQl1c2JfZnJlZV91cmIoZGV2LT5yeF91cmIpOworCQlyZXR1cm4gMDsKKwl9CisJZGV2LT5pbnRyX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPmludHJfdXJiKSB7CisJCXVzYl9mcmVlX3VyYihkZXYtPnJ4X3VyYik7CisJCXVzYl9mcmVlX3VyYihkZXYtPnR4X3VyYik7CisJCXJldHVybiAwOworCX0KKwlkZXYtPmN0cmxfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+aW50cl91cmIpIHsKKwkJdXNiX2ZyZWVfdXJiKGRldi0+cnhfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGRldi0+dHhfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKGRldi0+aW50cl91cmIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9hbGxfdXJicyhydGw4MTUwX3QgKiBkZXYpCit7CisJdXNiX2ZyZWVfdXJiKGRldi0+cnhfdXJiKTsKKwl1c2JfZnJlZV91cmIoZGV2LT50eF91cmIpOworCXVzYl9mcmVlX3VyYihkZXYtPmludHJfdXJiKTsKKwl1c2JfZnJlZV91cmIoZGV2LT5jdHJsX3VyYik7Cit9CisKK3N0YXRpYyB2b2lkIHVubGlua19hbGxfdXJicyhydGw4MTUwX3QgKiBkZXYpCit7CisJdXNiX2tpbGxfdXJiKGRldi0+cnhfdXJiKTsKKwl1c2Jfa2lsbF91cmIoZGV2LT50eF91cmIpOworCXVzYl9raWxsX3VyYihkZXYtPmludHJfdXJiKTsKKwl1c2Jfa2lsbF91cmIoZGV2LT5jdHJsX3VyYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnB1bGxfc2tiKHJ0bDgxNTBfdCAqZGV2KQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUlhfU0tCX1BPT0xfU0laRTsgaSsrKSB7CisJCWlmIChkZXYtPnJ4X3NrYl9wb29sW2ldKSB7CisJCQlza2IgPSBkZXYtPnJ4X3NrYl9wb29sW2ldOworCQkJZGV2LT5yeF9za2JfcG9vbFtpXSA9IE5VTEw7CisJCQlyZXR1cm4gc2tiOworCQl9CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCByZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlydGw4MTUwX3QgKmRldjsKKwl1bnNpZ25lZCBwa3RfbGVuLCByZXM7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXUxNiByeF9zdGF0OworCisJZGV2ID0gdXJiLT5jb250ZXh0OworCWlmICghZGV2KQorCQlyZXR1cm47CisJaWYgKHRlc3RfYml0KFJUTDgxNTBfVU5QTFVHLCAmZGV2LT5mbGFncykpCisJCXJldHVybjsKKwluZXRkZXYgPSBkZXYtPm5ldGRldjsKKwlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KG5ldGRldikpCisJCXJldHVybjsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgLUVOT0VOVDoKKwkJcmV0dXJuOwkvKiB0aGUgdXJiIGlzIGluIHVubGluayBzdGF0ZSAqLworCWNhc2UgLUVUSU1FRE9VVDoKKwkJd2FybigibWF5IGJlIHJlc2V0IGlzIG5lZWRlZD8uLiIpOworCQlnb3RvIGdvb247CisJZGVmYXVsdDoKKwkJd2FybigiUnggc3RhdHVzICVkIiwgdXJiLT5zdGF0dXMpOworCQlnb3RvIGdvb247CisJfQorCisJaWYgKCFkZXYtPnJ4X3NrYikKKwkJZ290byByZXNjaGVkOworCS8qIHByb3RlY3QgYWdhaW5zdCBzaG9ydCBwYWNrZXRzICh0ZWxsIG1lIHdoeSB3ZSBnb3Qgc29tZT8hPykgKi8KKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDwgNCkKKwkJZ290byBnb29uOworCisJcmVzID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCXJ4X3N0YXQgPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSh1cmItPnRyYW5zZmVyX2J1ZmZlciArIHJlcyAtIDQpKTsKKwlwa3RfbGVuID0gcmVzIC0gNDsKKworCXNrYl9wdXQoZGV2LT5yeF9za2IsIHBrdF9sZW4pOworCWRldi0+cnhfc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKGRldi0+cnhfc2tiLCBuZXRkZXYpOworCW5ldGlmX3J4KGRldi0+cnhfc2tiKTsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CisKKwlzcGluX2xvY2soJmRldi0+cnhfcG9vbF9sb2NrKTsKKwlza2IgPSBwdWxsX3NrYihkZXYpOworCXNwaW5fdW5sb2NrKCZkZXYtPnJ4X3Bvb2xfbG9jayk7CisJaWYgKCFza2IpCisJCWdvdG8gcmVzY2hlZDsKKworCWRldi0+cnhfc2tiID0gc2tiOworZ29vbjoKKwl1c2JfZmlsbF9idWxrX3VyYihkZXYtPnJ4X3VyYiwgZGV2LT51ZGV2LCB1c2JfcmN2YnVsa3BpcGUoZGV2LT51ZGV2LCAxKSwKKwkJICAgICAgZGV2LT5yeF9za2ItPmRhdGEsIFJUTDgxNTBfTVRVLCByZWFkX2J1bGtfY2FsbGJhY2ssIGRldik7CisJaWYgKHVzYl9zdWJtaXRfdXJiKGRldi0+cnhfdXJiLCBHRlBfQVRPTUlDKSkgeworCQlzZXRfYml0KFJYX1VSQl9GQUlMLCAmZGV2LT5mbGFncyk7CisJCWdvdG8gcmVzY2hlZDsKKwl9IGVsc2UgeworCQljbGVhcl9iaXQoUlhfVVJCX0ZBSUwsICZkZXYtPmZsYWdzKTsKKwl9CisKKwlyZXR1cm47CityZXNjaGVkOgorCXRhc2tsZXRfc2NoZWR1bGUoJmRldi0+dGwpOworfQorCitzdGF0aWMgdm9pZCByeF9maXh1cCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJcnRsODE1MF90ICpkZXY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWRldiA9IChydGw4MTUwX3QgKilkYXRhOworCisJc3Bpbl9sb2NrX2lycSgmZGV2LT5yeF9wb29sX2xvY2spOworCWZpbGxfc2tiX3Bvb2woZGV2KTsKKwlzcGluX3VubG9ja19pcnEoJmRldi0+cnhfcG9vbF9sb2NrKTsKKwlpZiAodGVzdF9iaXQoUlhfVVJCX0ZBSUwsICZkZXYtPmZsYWdzKSkKKwkJaWYgKGRldi0+cnhfc2tiKQorCQkJZ290byB0cnlfYWdhaW47CisJc3Bpbl9sb2NrX2lycSgmZGV2LT5yeF9wb29sX2xvY2spOworCXNrYiA9IHB1bGxfc2tiKGRldik7CisJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnJ4X3Bvb2xfbG9jayk7CisJaWYgKHNrYiA9PSBOVUxMKQorCQlnb3RvIHRsc2NoZWQ7CisJZGV2LT5yeF9za2IgPSBza2I7CisJdXNiX2ZpbGxfYnVsa191cmIoZGV2LT5yeF91cmIsIGRldi0+dWRldiwgdXNiX3JjdmJ1bGtwaXBlKGRldi0+dWRldiwgMSksCisJCSAgICAgIGRldi0+cnhfc2tiLT5kYXRhLCBSVEw4MTUwX01UVSwgcmVhZF9idWxrX2NhbGxiYWNrLCBkZXYpOwordHJ5X2FnYWluOgorCWlmICh1c2Jfc3VibWl0X3VyYihkZXYtPnJ4X3VyYiwgR0ZQX0FUT01JQykpIHsKKwkJc2V0X2JpdChSWF9VUkJfRkFJTCwgJmRldi0+ZmxhZ3MpOworCQlnb3RvIHRsc2NoZWQ7CisJIH0gZWxzZSB7CisJCWNsZWFyX2JpdChSWF9VUkJfRkFJTCwgJmRldi0+ZmxhZ3MpOworCX0KKworCXJldHVybjsKK3Rsc2NoZWQ6CisJdGFza2xldF9zY2hlZHVsZSgmZGV2LT50bCk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlydGw4MTUwX3QgKmRldjsKKworCWRldiA9IHVyYi0+Y29udGV4dDsKKwlpZiAoIWRldikKKwkJcmV0dXJuOworCWRldl9rZnJlZV9za2JfaXJxKGRldi0+dHhfc2tiKTsKKwlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldi0+bmV0ZGV2KSkKKwkJcmV0dXJuOworCWlmICh1cmItPnN0YXR1cykKKwkJaW5mbygiJXM6IFR4IHN0YXR1cyAlZCIsIGRldi0+bmV0ZGV2LT5uYW1lLCB1cmItPnN0YXR1cyk7CisJZGV2LT5uZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwluZXRpZl93YWtlX3F1ZXVlKGRldi0+bmV0ZGV2KTsKK30KKworc3RhdGljIHZvaWQgaW50cl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJ0bDgxNTBfdCAqZGV2OworCV9fdTggKmQ7CisJaW50IHN0YXR1czsKKworCWRldiA9IHVyYi0+Y29udGV4dDsKKwlpZiAoIWRldikKKwkJcmV0dXJuOworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CQkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQlyZXR1cm47CisJLyogLUVQSVBFOiAgc2hvdWxkIGNsZWFyIHRoZSBoYWx0ICovCisJZGVmYXVsdDoKKwkJaW5mbygiJXM6IGludHIgc3RhdHVzICVkIiwgZGV2LT5uZXRkZXYtPm5hbWUsIHVyYi0+c3RhdHVzKTsKKwkJZ290byByZXN1Ym1pdDsKKwl9CisKKwlkID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaWYgKGRbMF0gJiBUU1JfRVJST1JTKSB7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWlmIChkW0lOVF9UU1JdICYgKFRTUl9FQ09MIHwgVFNSX0pCUikpCisJCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCWlmIChkW0lOVF9UU1JdICYgVFNSX0xDT0wpCisJCQlkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKKwkJaWYgKGRbSU5UX1RTUl0gJiBUU1JfTE9TU19DUlMpCisJCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJfQorCS8qIFJlcG9ydCBsaW5rIHN0YXR1cyBjaGFuZ2VzIHRvIHRoZSBuZXR3b3JrIHN0YWNrICovCisJaWYgKChkW0lOVF9NU1JdICYgTVNSX0xJTkspID09IDApIHsKKwkJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2LT5uZXRkZXYpKSB7CisJCQluZXRpZl9jYXJyaWVyX29mZihkZXYtPm5ldGRldik7CisJCQlkYmcoIiVzOiBMSU5LIExPU1RcbiIsIF9fZnVuY19fKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghbmV0aWZfY2Fycmllcl9vayhkZXYtPm5ldGRldikpIHsKKwkJCW5ldGlmX2NhcnJpZXJfb24oZGV2LT5uZXRkZXYpOworCQkJZGJnKCIlczogTElOSyBDQU1FIEJBQ0tcbiIsIF9fZnVuY19fKTsKKwkJfQorCX0KKworcmVzdWJtaXQ6CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgU0xBQl9BVE9NSUMpOworCWlmIChzdGF0dXMpCisJCWVyciAoImNhbid0IHJlc3VibWl0IGludHIsICVzLSVzL2lucHV0MCwgc3RhdHVzICVkIiwKKwkJCQlkZXYtPnVkZXYtPmJ1cy0+YnVzX25hbWUsCisJCQkJZGV2LT51ZGV2LT5kZXZwYXRoLCBzdGF0dXMpOworfQorCisKKy8qCisqKgorKioJbmV0d29yayByZWxhdGVkIHBhcnQgb2YgdGhlIGNvZGUKKyoqCisqLworCitzdGF0aWMgdm9pZCBmaWxsX3NrYl9wb29sKHJ0bDgxNTBfdCAqZGV2KQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUlhfU0tCX1BPT0xfU0laRTsgaSsrKSB7CisJCWlmIChkZXYtPnJ4X3NrYl9wb29sW2ldKQorCQkJY29udGludWU7CisJCXNrYiA9IGRldl9hbGxvY19za2IoUlRMODE1MF9NVFUgKyAyKTsKKwkJaWYgKCFza2IpIHsKKwkJCXJldHVybjsKKwkJfQorCQlza2ItPmRldiA9IGRldi0+bmV0ZGV2OworCQlza2JfcmVzZXJ2ZShza2IsIDIpOworCQlkZXYtPnJ4X3NrYl9wb29sW2ldID0gc2tiOworCX0KK30KKworc3RhdGljIHZvaWQgZnJlZV9za2JfcG9vbChydGw4MTUwX3QgKmRldikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBSWF9TS0JfUE9PTF9TSVpFOyBpKyspCisJCWlmIChkZXYtPnJ4X3NrYl9wb29sW2ldKQorCQkJZGV2X2tmcmVlX3NrYihkZXYtPnJ4X3NrYl9wb29sW2ldKTsKK30KKworc3RhdGljIGludCBlbmFibGVfbmV0X3RyYWZmaWMocnRsODE1MF90ICogZGV2KQoreworCXU4IGNyLCB0Y3IsIHJjciwgbXNyOworCisJaWYgKCFydGw4MTUwX3Jlc2V0KGRldikpIHsKKwkJd2FybigiJXMgLSBkZXZpY2UgcmVzZXQgZmFpbGVkIiwgX19GVU5DVElPTl9fKTsKKwl9CisJLyogUkNSIGJpdDc9MSBhdHRhY2ggUnggaW5mbyBhdCB0aGUgZW5kOyAgPTAgSFcgQ1JDICh3aGljaCBpcyBicm9rZW4pICovCisJcmNyID0gMHg5ZTsKKwlkZXYtPnJ4X2NyZWcgPSBjcHVfdG9fbGUxNihyY3IpOworCXRjciA9IDB4ZDg7CisJY3IgPSAweDBjOworCWlmICghKHJjciAmIDB4ODApKQorCQlzZXRfYml0KFJUTDgxNTBfSFdfQ1JDLCAmZGV2LT5mbGFncyk7CisJc2V0X3JlZ2lzdGVycyhkZXYsIFJDUiwgMSwgJnJjcik7CisJc2V0X3JlZ2lzdGVycyhkZXYsIFRDUiwgMSwgJnRjcik7CisJc2V0X3JlZ2lzdGVycyhkZXYsIENSLCAxLCAmY3IpOworCWdldF9yZWdpc3RlcnMoZGV2LCBNU1IsIDEsICZtc3IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfbmV0X3RyYWZmaWMocnRsODE1MF90ICogZGV2KQoreworCXU4IGNyOworCisJZ2V0X3JlZ2lzdGVycyhkZXYsIENSLCAxLCAmY3IpOworCWNyICY9IDB4ZjM7CisJc2V0X3JlZ2lzdGVycyhkZXYsIENSLCAxLCAmY3IpOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnJ0bDgxNTBfbmV0ZGV2X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuICYoKHJ0bDgxNTBfdCAqKW5ldGRldl9wcml2KGRldikpLT5zdGF0czsKK30KKworc3RhdGljIHZvaWQgcnRsODE1MF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJcnRsODE1MF90ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXdhcm4oIiVzOiBUeCB0aW1lb3V0LiIsIG5ldGRldi0+bmFtZSk7CisJZGV2LT50eF91cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9BU1lOQ19VTkxJTks7CisJdXNiX3VubGlua191cmIoZGV2LT50eF91cmIpOworCWRldi0+c3RhdHMudHhfZXJyb3JzKys7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDgxNTBfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXJ0bDgxNTBfdCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQlkZXYtPnJ4X2NyZWcgfD0gY3B1X3RvX2xlMTYoMHgwMDAxKTsKKwkJaW5mbygiJXM6IHByb21pc2N1b3VzIG1vZGUiLCBuZXRkZXYtPm5hbWUpOworCX0gZWxzZSBpZiAoKG5ldGRldi0+bWNfY291bnQgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0KSB8fAorCQkgICAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKKwkJZGV2LT5yeF9jcmVnICY9IGNwdV90b19sZTE2KDB4ZmZmZSk7CisJCWRldi0+cnhfY3JlZyB8PSBjcHVfdG9fbGUxNigweDAwMDIpOworCQlpbmZvKCIlczogYWxsbXVsdGkgc2V0IiwgbmV0ZGV2LT5uYW1lKTsKKwl9IGVsc2UgeworCQkvKiB+UlhfTVVMVElDQVNULCB+UlhfUFJPTUlTQ1VPVVMgKi8KKwkJZGV2LT5yeF9jcmVnICY9IGNwdV90b19sZTE2KDB4MDBmYyk7CisJfQorCWFzeW5jX3NldF9yZWdpc3RlcnMoZGV2LCBSQ1IsIDIpOworCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKK30KKworc3RhdGljIGludCBydGw4MTUwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlydGw4MTUwX3QgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IGNvdW50LCByZXM7CisKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJY291bnQgPSAoc2tiLT5sZW4gPCA2MCkgPyA2MCA6IHNrYi0+bGVuOworCWNvdW50ID0gKGNvdW50ICYgMHgzZikgPyBjb3VudCA6IGNvdW50ICsgMTsKKwlkZXYtPnR4X3NrYiA9IHNrYjsKKwl1c2JfZmlsbF9idWxrX3VyYihkZXYtPnR4X3VyYiwgZGV2LT51ZGV2LCB1c2Jfc25kYnVsa3BpcGUoZGV2LT51ZGV2LCAyKSwKKwkJICAgICAgc2tiLT5kYXRhLCBjb3VudCwgd3JpdGVfYnVsa19jYWxsYmFjaywgZGV2KTsKKwlpZiAoKHJlcyA9IHVzYl9zdWJtaXRfdXJiKGRldi0+dHhfdXJiLCBHRlBfQVRPTUlDKSkpIHsKKwkJd2FybigiZmFpbGVkIHR4X3VyYiAlZFxuIiwgcmVzKTsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKKwl9IGVsc2UgeworCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgc2V0X2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlydGw4MTUwX3QgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc2hvcnQgdG1wOworCisJZ2V0X3JlZ2lzdGVycyhkZXYsIENTQ1IsIDIsICZ0bXApOworCWlmICh0bXAgJiBDU0NSX0xJTktfU1RBVFVTKQorCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7CisJZWxzZQorCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworfQorCitzdGF0aWMgaW50IHJ0bDgxNTBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXJ0bDgxNTBfdCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgcmVzOworCisJaWYgKGRldi0+cnhfc2tiID09IE5VTEwpCisJCWRldi0+cnhfc2tiID0gcHVsbF9za2IoZGV2KTsKKwlpZiAoIWRldi0+cnhfc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNldF9yZWdpc3RlcnMoZGV2LCBJRFIsIDYsIG5ldGRldi0+ZGV2X2FkZHIpOworCQorCXVzYl9maWxsX2J1bGtfdXJiKGRldi0+cnhfdXJiLCBkZXYtPnVkZXYsIHVzYl9yY3ZidWxrcGlwZShkZXYtPnVkZXYsIDEpLAorCQkgICAgICBkZXYtPnJ4X3NrYi0+ZGF0YSwgUlRMODE1MF9NVFUsIHJlYWRfYnVsa19jYWxsYmFjaywgZGV2KTsKKwlpZiAoKHJlcyA9IHVzYl9zdWJtaXRfdXJiKGRldi0+cnhfdXJiLCBHRlBfS0VSTkVMKSkpCisJCXdhcm4oIiVzOiByeF91cmIgc3VibWl0IGZhaWxlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHJlcyk7CisJdXNiX2ZpbGxfaW50X3VyYihkZXYtPmludHJfdXJiLCBkZXYtPnVkZXYsIHVzYl9yY3ZpbnRwaXBlKGRldi0+dWRldiwgMyksCisJCSAgICAgZGV2LT5pbnRyX2J1ZmYsIElOVEJVRlNJWkUsIGludHJfY2FsbGJhY2ssCisJCSAgICAgZGV2LCBkZXYtPmludHJfaW50ZXJ2YWwpOworCWlmICgocmVzID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5pbnRyX3VyYiwgR0ZQX0tFUk5FTCkpKQorCQl3YXJuKCIlczogaW50cl91cmIgc3VibWl0IGZhaWxlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHJlcyk7CisJbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKKwllbmFibGVfbmV0X3RyYWZmaWMoZGV2KTsKKwlzZXRfY2FycmllcihuZXRkZXYpOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBydGw4MTUwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJcnRsODE1MF90ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCByZXMgPSAwOworCisJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCWlmICghdGVzdF9iaXQoUlRMODE1MF9VTlBMVUcsICZkZXYtPmZsYWdzKSkKKwkJZGlzYWJsZV9uZXRfdHJhZmZpYyhkZXYpOworCXVubGlua19hbGxfdXJicyhkZXYpOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgcnRsODE1MF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCXJ0bDgxNTBfdCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXN0cm5jcHkoaW5mby0+ZHJpdmVyLCBkcml2ZXJfbmFtZSwgRVRIVE9PTF9CVVNJTkZPX0xFTik7CisJc3RybmNweShpbmZvLT52ZXJzaW9uLCBEUklWRVJfVkVSU0lPTiwgRVRIVE9PTF9CVVNJTkZPX0xFTik7CisJdXNiX21ha2VfcGF0aChkZXYtPnVkZXYsIGluZm8tPmJ1c19pbmZvLCBzaXplb2YgaW5mby0+YnVzX2luZm8pOworfQorCitzdGF0aWMgaW50IHJ0bDgxNTBfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKK3sKKwlydGw4MTUwX3QgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc2hvcnQgbHBhLCBibWNyOworCisJZWNtZC0+c3VwcG9ydGVkID0gKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAorCQkJICBTVVBQT1JURURfMTBiYXNlVF9GdWxsIHwKKwkJCSAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfAorCQkJICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8CisJCQkgIFNVUFBPUlRFRF9BdXRvbmVnIHwKKwkJCSAgU1VQUE9SVEVEX1RQIHwgU1VQUE9SVEVEX01JSSk7CisJZWNtZC0+cG9ydCA9IFBPUlRfVFA7CisJZWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOworCWVjbWQtPnBoeV9hZGRyZXNzID0gZGV2LT5waHk7CisJZ2V0X3JlZ2lzdGVycyhkZXYsIEJNQ1IsIDIsICZibWNyKTsKKwlnZXRfcmVnaXN0ZXJzKGRldiwgQU5MUCwgMiwgJmxwYSk7CisJaWYgKGJtY3IgJiBCTUNSX0FORU5BQkxFKSB7CisJCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKKwkJZWNtZC0+c3BlZWQgPSAobHBhICYgKExQQV8xMDBIQUxGIHwgTFBBXzEwMEZVTEwpKSA/CisJCQkgICAgIFNQRUVEXzEwMCA6IFNQRUVEXzEwOworCQlpZiAoZWNtZC0+c3BlZWQgPT0gU1BFRURfMTAwKQorCQkJZWNtZC0+ZHVwbGV4ID0gKGxwYSAmIExQQV8xMDBGVUxMKSA/CisJCQkgICAgRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKKwkJZWxzZQorCQkJZWNtZC0+ZHVwbGV4ID0gKGxwYSAmIExQQV8xMEZVTEwpID8KKwkJCSAgICBEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOworCX0gZWxzZSB7CisJCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CisJCWVjbWQtPnNwZWVkID0gKGJtY3IgJiBCTUNSX1NQRUVEMTAwKSA/CisJCSAgICBTUEVFRF8xMDAgOiBTUEVFRF8xMDsKKwkJZWNtZC0+ZHVwbGV4ID0gKGJtY3IgJiBCTUNSX0ZVTExEUExYKSA/CisJCSAgICBEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7CisJLmdldF9kcnZpbmZvID0gcnRsODE1MF9nZXRfZHJ2aW5mbywKKwkuZ2V0X3NldHRpbmdzID0gcnRsODE1MF9nZXRfc2V0dGluZ3MsCisJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaworfTsKKworc3RhdGljIGludCBydGw4MTUwX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCit7CisJcnRsODE1MF90ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUxNiAqZGF0YSA9ICh1MTYgKikgJiBycS0+aWZyX2lmcnU7CisJaW50IHJlcyA9IDA7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ0RFVlBSSVZBVEU6CisJCWRhdGFbMF0gPSBkZXYtPnBoeTsKKwljYXNlIFNJT0NERVZQUklWQVRFICsgMToKKwkJcmVhZF9taWlfd29yZChkZXYsIGRldi0+cGh5LCAoZGF0YVsxXSAmIDB4MWYpLCAmZGF0YVszXSk7CisJCWJyZWFrOworCWNhc2UgU0lPQ0RFVlBSSVZBVEUgKyAyOgorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCQl3cml0ZV9taWlfd29yZChkZXYsIGRldi0+cGh5LCAoZGF0YVsxXSAmIDB4MWYpLCBkYXRhWzJdKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzID0gLUVPUE5PVFNVUFA7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBydGw4MTUwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJcnRsODE1MF90ICpkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKworCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihydGw4MTUwX3QpKTsKKwlpZiAoIW5ldGRldikgeworCQllcnIoIk91dCBvZiBtZW1vcnkiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwltZW1zZXQoZGV2LCAwLCBzaXplb2YocnRsODE1MF90KSk7CisKKwlkZXYtPmludHJfYnVmZiA9IGttYWxsb2MoSU5UQlVGU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPmludHJfYnVmZikgeworCQlmcmVlX25ldGRldihuZXRkZXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl0YXNrbGV0X2luaXQoJmRldi0+dGwsIHJ4X2ZpeHVwLCAodW5zaWduZWQgbG9uZylkZXYpOworCXNwaW5fbG9ja19pbml0KCZkZXYtPnJ4X3Bvb2xfbG9jayk7CisJCisJZGV2LT51ZGV2ID0gdWRldjsKKwlkZXYtPm5ldGRldiA9IG5ldGRldjsKKwlTRVRfTU9EVUxFX09XTkVSKG5ldGRldik7CisJbmV0ZGV2LT5vcGVuID0gcnRsODE1MF9vcGVuOworCW5ldGRldi0+c3RvcCA9IHJ0bDgxNTBfY2xvc2U7CisJbmV0ZGV2LT5kb19pb2N0bCA9IHJ0bDgxNTBfaW9jdGw7CisJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IFJUTDgxNTBfVFhfVElNRU9VVDsKKwluZXRkZXYtPnR4X3RpbWVvdXQgPSBydGw4MTUwX3R4X3RpbWVvdXQ7CisJbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBydGw4MTUwX3N0YXJ0X3htaXQ7CisJbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBydGw4MTUwX3NldF9tdWx0aWNhc3Q7CisJbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBydGw4MTUwX3NldF9tYWNfYWRkcmVzczsKKwluZXRkZXYtPmdldF9zdGF0cyA9IHJ0bDgxNTBfbmV0ZGV2X3N0YXRzOworCW5ldGRldi0+bXR1ID0gUlRMODE1MF9NVFU7CisJU0VUX0VUSFRPT0xfT1BTKG5ldGRldiwgJm9wcyk7CisJZGV2LT5pbnRyX2ludGVydmFsID0gMTAwOwkvKiAxMDBtcyAqLworCisJaWYgKCFhbGxvY19hbGxfdXJicyhkZXYpKSB7CisJCWVycigib3V0IG9mIG1lbW9yeSIpOworCQlnb3RvIG91dDsKKwl9CisJaWYgKCFydGw4MTUwX3Jlc2V0KGRldikpIHsKKwkJZXJyKCJjb3VsZG4ndCByZXNldCB0aGUgZGV2aWNlIik7CisJCWdvdG8gb3V0MTsKKwl9CisJZmlsbF9za2JfcG9vbChkZXYpOworCXNldF9ldGhlcm5ldF9hZGRyKGRldik7CisJaW5mbygiJXM6IHJ0bDgxNTAgaXMgZGV0ZWN0ZWQiLCBuZXRkZXYtPm5hbWUpOworCQorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGV2KTsKKwlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZpbnRmLT5kZXYpOworCWlmIChyZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KSAhPSAwKSB7CisJCWVycigiY291bGRuJ3QgcmVnaXN0ZXIgdGhlIGRldmljZSIpOworCQlnb3RvIG91dDI7CisJfQorCXJldHVybiAwOworCitvdXQyOgorCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJZnJlZV9za2JfcG9vbChkZXYpOworb3V0MToKKwlmcmVlX2FsbF91cmJzKGRldik7CitvdXQ6CisJa2ZyZWUoZGV2LT5pbnRyX2J1ZmYpOworCWZyZWVfbmV0ZGV2KG5ldGRldik7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDgxNTBfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlydGw4MTUwX3QgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCWlmIChkZXYpIHsKKwkJc2V0X2JpdChSVEw4MTUwX1VOUExVRywgJmRldi0+ZmxhZ3MpOworCQl1bnJlZ2lzdGVyX25ldGRldihkZXYtPm5ldGRldik7CisJCXVubGlua19hbGxfdXJicyhkZXYpOworCQlmcmVlX2FsbF91cmJzKGRldik7CisJCWZyZWVfc2tiX3Bvb2woZGV2KTsKKwkJaWYgKGRldi0+cnhfc2tiKQorCQkJZGV2X2tmcmVlX3NrYihkZXYtPnJ4X3NrYik7CisJCWtmcmVlKGRldi0+aW50cl9idWZmKTsKKwkJZnJlZV9uZXRkZXYoZGV2LT5uZXRkZXYpOworCX0KK30KKworc3RhdGljIGludCBfX2luaXQgdXNiX3J0bDgxNTBfaW5pdCh2b2lkKQoreworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZydGw4MTUwX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2JfcnRsODE1MF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnJ0bDgxNTBfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodXNiX3J0bDgxNTBfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2JfcnRsODE1MF9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvdXNibmV0LmMgYi9kcml2ZXJzL3VzYi9uZXQvdXNibmV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ4YjQ0NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL25ldC91c2JuZXQuYwpAQCAtMCwwICsxLDQxMDYgQEAKKy8qCisgKiBVU0IgTmV0d29ya2luZyBMaW5rcworICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgYnkgRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUGF2ZWwgTWFjaGVrIDxwYXZlbEB1Y3cuY3o+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSBEYXZpZCBIb2xsaXMgPGRob2xsaXNAZGF2ZWhvbGxpcy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgUGhpbCBDaGFuZyA8cGNoYW5nMjNAc2JjZ2xvYmFsLm5ldD4KKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzIFRpVm8gSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisvKgorICogVGhpcyBpcyBhIGdlbmVyaWMgIlVTQiBuZXR3b3JraW5nIiBmcmFtZXdvcmsgdGhhdCB3b3JrcyB3aXRoIHNldmVyYWwKKyAqIGtpbmRzIG9mIGZ1bGwgYW5kIGhpZ2ggc3BlZWQgbmV0d29ya2luZyBkZXZpY2VzOgorICoKKyAqICAgKyBVU0IgaG9zdC10by1ob3N0ICJuZXR3b3JrIGNhYmxlcyIsIHVzZWQgZm9yIElQLW92ZXItVVNCIGxpbmtzLgorICogICAgIFRoZXNlIGFyZSBvZnRlbiB1c2VkIGZvciBMYXBsaW5rIHN0eWxlIGNvbm5lY3Rpdml0eSBwcm9kdWN0cy4KKyAqCS0gQW5jaG9yQ2hpcCAyNzIwCisgKgktIEJlbGtpbiwgZVRFSyAoaW50ZXJvcHMgd2l0aCBXaW4zMiBkcml2ZXJzKQorICoJLSBHZW5lU3lzIEdMNjIwVVNCLUEKKyAqCS0gTmV0Q2hpcCAxMDgwIChpbnRlcm9wZXJhdGVzIHdpdGggTmV0Q2hpcCBXaW4zMiBkcml2ZXJzKQorICoJLSBQcm9saWZpYyBQTC0yMzAxLzIzMDIgKHJlcGxhY2VzICJwbHVzYiIgZHJpdmVyKQorICoJLSBLQyBUZWNobm9sb2d5IEtDMjE5MAorICoKKyAqICAgKyBTbWFydCBVU0IgZGV2aWNlcyBjYW4gc3VwcG9ydCBzdWNoIGxpbmtzIGRpcmVjdGx5LCB1c2luZyBJbnRlcm5ldAorICogICAgIHN0YW5kYXJkIHByb3RvY29scyBpbnN0ZWFkIG9mIHByb3ByaWV0YXJ5IGhvc3QtdG8tZGV2aWNlIGxpbmtzLgorICoJLSBMaW51eCBQREFzIGxpa2UgaVBhcSwgWW9weSwgYW5kIFphdXJ1cworICoJLSBUaGUgQkxPQiBib290IGxvYWRlciAoZm9yIGRpc2tsZXNzIGJvb3RpbmcpCisgKgktIExpbnV4ICJnYWRnZXRzIiwgcGVyaGFwcyB1c2luZyBQWEEtMnh4IG9yIE5ldDIyODAgY29udHJvbGxlcnMKKyAqCS0gRGV2aWNlcyB1c2luZyBFUFNPTidzIHNhbXBsZSBVU0IgZmlybXdhcmUKKyAqCS0gQ0RDLUV0aGVybmV0IGNsYXNzIGRldmljZXMsIHN1Y2ggYXMgbWFueSBjYWJsZSBtb2RlbXMKKyAqCisgKiAgICsgQWRhcHRlcnMgdG8gbmV0d29ya3Mgc3VjaCBhcyBFdGhlcm5ldC4KKyAqCS0gQVg4ODE3WCBiYXNlZCBVU0IgMi4wIHByb2R1Y3RzCisgKgorICogTGlua3MgdG8gdGhlc2UgZGV2aWNlcyBjYW4gYmUgYnJpZGdlZCB1c2luZyBMaW51eCBFdGhlcm5ldCBicmlkZ2luZy4KKyAqIFdpdGggbWlub3IgZXhjZXB0aW9ucywgdGhlc2UgYWxsIHVzZSBzaW1pbGFyIFVTQiBmcmFtaW5nIGZvciBuZXR3b3JrCisgKiB0cmFmZmljLCBidXQgbmVlZCBkaWZmZXJlbnQgcHJvdG9jb2xzIGZvciBjb250cm9sIHRyYWZmaWMuCisgKgorICogVVNCIGRldmljZXMgY2FuIGltcGxlbWVudCB0aGVpciBzaWRlIG9mIHRoaXMgcHJvdG9jb2wgYXQgdGhlIGNvc3QKKyAqIG9mIHR3byBidWxrIGVuZHBvaW50czsgaXQncyBub3QgcmVzdHJpY3RlZCB0byAiY2FibGUiIGFwcGxpY2F0aW9ucy4KKyAqIFNlZSB0aGUgU0ExMTEwLCBaYXVydXMsIG9yIEVQU09OIGRldmljZS9jbGllbnQgc3VwcG9ydCBpbiB0aGlzIGRyaXZlcjsKKyAqIHNsYXZlL3RhcmdldCBkcml2ZXJzIHN1Y2ggYXMgInVzYi1ldGgiIChvbiBtb3N0IFNBLTExMDAgUERBcykgb3IKKyAqICJnX2V0aGVyIiAoaW4gdGhlIExpbnV4ICJnYWRnZXQiIGZyYW1ld29yaykgaW1wbGVtZW50IHRoYXQgYmVoYXZpb3IKKyAqIHdpdGhpbiBkZXZpY2VzLgorICoKKyAqCisgKiBDSEFOR0VMT0c6CisgKgorICogMTMtc2VwLTIwMDAJZXhwZXJpbWVudGFsLCBuZXcKKyAqIDEwLW9jdC0yMDAwCXVzYl9kZXZpY2VfaWQgdGFibGUgY3JlYXRlZC4gCisgKiAyOC1vY3QtMjAwMAltaXNjIGZpeGVzOyBtb3N0bHksIGRpc2NhcmQgbW9yZSBUVEwtbWFuZ2xlZCByeCBwYWNrZXRzLgorICogMDEtbm92LTIwMDAJdXNiX2RldmljZV9pZCB0YWJsZSBhbmQgcHJvYmluZyBhcGkgdXBkYXRlIGJ5CisgKgkJQWRhbSBKLiBSaWNodGVyIDxhZGFtQHlnZ2RyYXNpbC5jb20+LgorICogMTgtZGVjLTIwMDAJKGRiKSB0eCB3YXRjaGRvZywgIm5ldDEwODAiIHJlbmFtaW5nIHRvICJ1c2JuZXQiLCBkZXZpY2VfaW5mbworICoJCWFuZCBwcm9saWZpYyBzdXBwb3J0LCBpc29sYXRlIG5ldDEwODAtc3BlY2lmaWMgYml0cywgY2xlYW51cC4KKyAqCQlmaXggdW5saW5rX3VyYnMgb29wcyBpbiBEMyBQTSByZXN1bWUgY29kZSBwYXRoLgorICoKKyAqIDAyLWZlYi0yMDAxCShkYikgZml4IHR4IHNrYiBzaGFyaW5nLCBwYWNrZXQgbGVuZ3RoLCBtYXRjaF9mbGFncywgLi4uCisgKiAwOC1mZWItMjAwMQlzdHViYmVkIGluICJsaW51eGRldiIsIG1heWJlIHRoZSBTQS0xMTAwIGZvbGsgY2FuIHVzZSBpdDsKKyAqCQlBbmNob3JDaGlwcyAyNzIwIHN1cHBvcnQgKGZyb20gc3BlYykgZm9yIHRlc3Rpbmc7CisgKgkJZml4IGJpdC1vcmRlcmluZyBwcm9ibGVtIHdpdGggZXRoZXJuZXQgbXVsdGljYXN0IGFkZHIKKyAqIDE5LWZlYi0yMDAxICBTdXBwb3J0IGZvciBjbGVhcmluZyBoYWx0IGNvbmRpdGlvbnMuIFNBMTEwMCBVREMgc3VwcG9ydAorICoJCXVwZGF0ZXMuIE9sZWcgRHJva2luIChncmVlbkBpWGNlbGVyYXRvci5jb20pCisgKiAyNS1tYXItMjAwMQlNb3JlIFNBLTExMDAgdXBkYXRlcywgaW5jbHVkaW5nIHdvcmthcm91bmQgZm9yIGlwIHByb2JsZW0KKyAqCQlleHBlY3RpbmcgY2xlYXJlZCBza2ItPmNiIGFuZCBmcmFtaW5nIGNoYW5nZSB0byBtYXRjaCBsYXRlc3QKKyAqCQloYW5kaGVsZHMub3JnIHZlcnNpb24gKE9sZWcpLiAgRW5hYmxlIGRldmljZSBJRHMgZnJvbSB0aGUKKyAqCQlXaW4zMiBCZWxraW4gZHJpdmVyOyBvdGhlciBjbGVhbnVwcyAoZGIpLgorICogMTYtanVsLTIwMDEJQnVnZml4ZXMgZm9yIHVoY2kgb29wcy1vbi11bnBsdWcsIEJlbGtpbiBzdXBwb3J0LCB2YXJpb3VzCisgKgkJY2xlYW51cHMgZm9yIHByb2JsZW1zIG5vdCB5ZXQgc2VlbiBpbiB0aGUgZmllbGQuIChkYikKKyAqIDE3LW9jdC0yMDAxCUhhbmRsZSAiQWR2YW5jZSBVU0JORVQiIHByb2R1Y3QsIGxpa2UgQmVsa2luL2VURUsgZGV2aWNlcywKKyAqCQlmcm9tIElvYW5uaXMgTWF2cm91a2FraXMgPGkubWF2cm91a2FraXNAYnRpbnRlcm5ldC5jb20+OworICoJCXJ4IHVubGlua3Mgc29tZWhvdyB3ZXJlbid0IGFzeW5jOyBtaW5vciBjbGVhbnVwLgorICogMDMtbm92LTIwMDEJTWVyZ2VkIEdlbmVTeXMgZHJpdmVyOyBvcmlnaW5hbCBjb2RlIGZyb20gSml1bi1KaWUgSHVhbmcKKyAqCQk8aHVhbmdqakBnZW5lc3lzbG9naWMuY29tLnR3PiwgdXBkYXRlZCBieSBTdGFuaXNsYXYgQnJhYmVjCisgKgkJPHV0eEBwZW5ndWluLmN6Pi4gIE1hZGUgZnJhbWluZyBvcHRpb25zIChOZXRDaGlwL0dlbmVTeXMpCisgKgkJdGllIG1vc3RseSB0byAoc3ViKWRyaXZlciBpbmZvLiAgV29ya2Fyb3VuZCBzb21lIFBMLTIzMDIKKyAqCQljaGlwcyB0aGF0IHNlZW0gdG8gcmVqZWN0IFNFVF9JTlRFUkZBQ0UgcmVxdWVzdHMuCisgKgorICogMDYtYXByLTIwMDIJQWRkZWQgZXRodG9vbCBzdXBwb3J0LCBiYXNlZCBvbiBhIHBhdGNoIGZyb20gQnJhZCBIYXJkcy4KKyAqCQlMZXZlbCBvZiBkaWFnbm9zdGljcyBpcyBtb3JlIGNvbmZpZ3VyYWJsZTsgdGhleSB1c2UgZGV2aWNlCisgKgkJbG9jYXRpb24gKHVzYl9kZXZpY2UtPmRldnBhdGgpIGluc3RlYWQgb2YgYWRkcmVzcyAoMi41KS4KKyAqCQlGb3IgdHhfZml4dXAsIG1lbWZsYWdzIGNhbid0IGJlIE5PSU8uCisgKiAwNy1tYXktMjAwMglHZW5lcmFsaXplL2NsZWFudXAga2V2ZW50ZCBzdXBwb3J0LCBoYW5kbGluZyByeCBzdGFsbHMgKG1vc3RseQorICoJCWZvciBVU0IgMi4wIFRUcykgYW5kIG1lbW9yeSBzaG9ydGFnZXMgKHBvdGVudGlhbCkgdG9vLiAoZGIpCisgKgkJVXNlICJsb2NhbGx5IGFzc2lnbmVkIiBJRUVFODAyIGFkZHJlc3Mgc3BhY2UuIChCcmFkIEhhcmRzKQorICogMTgtb2N0LTIwMDIJU3VwcG9ydCBmb3IgWmF1cnVzIChQYXZlbCBNYWNoZWspLCByZWxhdGVkIGNsZWFudXAgKGRiKS4KKyAqIDE0LWRlYy0yMDAyCVJlbW92ZSBaYXVydXMtcHJpdmF0ZSBjcmMzMiBjb2RlIChQYXZlbCk7IDIuNSBvb3BzIGZpeCwKKyAqIAkJY2xlYW51cHMgYW5kIHN0dWJiZWQgUFhBLTI1MCBzdXBwb3J0IChkYiksIGZpeCBmb3IgZnJhbWluZworICogCQlpc3N1ZXMgb24gWiwgbmV0MTA4MCwgYW5kIGdsNjIwYSAoVG9ieSBNaWxuZSkKKyAqCisgKiAzMS1tYXItMjAwMwlVc2UgZW5kcG9pbnQgZGVzY3JpcHRvcnM6ICBoaWdoIHNwZWVkIHN1cHBvcnQsIHNpbXBsZXIgc2ExMTAwCisgKiAJCXZzIHB4YTI1eCwgYW5kIENEQyBFdGhlcm5ldC4gIFRocm90dGxlIGRvd24gbG9nIGZsb29kcyBvbgorICogCQlkaXNjb25uZWN0OyBvdGhlciBjbGVhbnVwcy4gKGRiKSAgRmx1c2ggbmV0MTA4MCBmaWZvcworICogCQlhZnRlciBzZXZlcmFsIHNlcXVlbnRpYWwgZnJhbWluZyBlcnJvcnMuIChKb2hhbm5lcyBFcmRmZWx0KQorICogMjItYXVnLTIwMDMJQVg4ODE3WCBzdXBwb3J0IChEYXZlIEhvbGxpcykuCisgKiAxNC1qdW4tMjAwNCAgVHJpdmlhbCBwYXRjaCBmb3IgQVg4ODE3WCBiYXNlZCBCdWZmYWxvIExVQS1VMi1LVFggaW4gSmFwYW4KKyAqCQkoTmVpbCBCb3J0bmFrKQorICogMDMtbm92LTIwMDQJVHJpdmlhbCBwYXRjaCBmb3IgS0MyMTkwIChLQy0xOTApIGNoaXAuIChKb25hdGhhbiBNY0Rvd2VsbCkKKyAqCisgKiAwMS1mZWItMjAwNQlBWDg4NzcyIHN1cHBvcnQgKFBoaWwgQ2hhbmcgJiBEYXZlIEhvbGxpcykKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8vICNkZWZpbmUJREVCVUcJCQkvLyBlcnJvciBwYXRoIG1lc3NhZ2VzLCBleHRyYSBpbmZvCisvLyAjZGVmaW5lCVZFUkJPU0UJCQkvLyBtb3JlOyBzdWNjZXNzIG1lc3NhZ2VzCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpZmRlZglDT05GSUdfVVNCX0RFQlVHCisjICAgZGVmaW5lIERFQlVHCisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkiMDMtTm92LTIwMDQiCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIE5pbmV0ZWVuIFVTQiAxLjEgbWF4IHNpemUgYnVsayB0cmFuc2FjdGlvbnMgcGVyIGZyYW1lIChtcyksIG1heC4KKyAqIFNldmVyYWwgZG96ZW4gYnl0ZXMgb2YgSVB2NCBkYXRhIGNhbiBmaXQgaW4gdHdvIHN1Y2ggdHJhbnNhY3Rpb25zLgorICogT25lIG1heGltdW0gc2l6ZSBFdGhlcm5ldCBwYWNrZXQgdGFrZXMgdHdlbnR5IGZvdXIgb2YgdGhlbS4KKyAqIEZvciBoaWdoIHNwZWVkLCBlYWNoIGZyYW1lIGNvbWZvcnRhYmx5IGZpdHMgYWxtb3N0IDM2IG1heCBzaXplCisgKiBFdGhlcm5ldCBwYWNrZXRzIChzbyBxdWV1ZXMgc2hvdWxkIGJlIGJpZ2dlcikuCisgKi8KKyNkZWZpbmUJUlhfUUxFTihkZXYpICgoKGRldiktPnVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSA/IDYwIDogNCkKKyNkZWZpbmUJVFhfUUxFTihkZXYpICgoKGRldiktPnVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSA/IDYwIDogNCkKKworLy8gcGFja2V0cyBhcmUgYWx3YXlzIGV0aGVybmV0IGluc2lkZQorLy8gLi4uIGV4Y2VwdCB0aGV5IGNhbiBiZSBiaWdnZXIgKGxpbWl0IG9mIDY0SyB3aXRoIE5ldENoaXAgZnJhbWluZykKKyNkZWZpbmUgTUlOX1BBQ0tFVAlzaXplb2Yoc3RydWN0IGV0aGhkcikKKyNkZWZpbmUgTUFYX1BBQ0tFVAkzMjc2OAorCisvLyByZWF3YWtlbiBuZXR3b3JrIHF1ZXVlIHRoaXMgc29vbiBhZnRlciBzdG9wcGluZzsgZWxzZSB3YXRjaGRvZyBiYXJrcworI2RlZmluZSBUWF9USU1FT1VUX0pJRkZJRVMJKDUqSFopCisKKy8vIHRocm90dGxlIHJ4L3R4IGJyaWVmbHkgYWZ0ZXIgc29tZSBmYXVsdHMsIHNvIGtodWJkIG1pZ2h0IGRpc2Nvbm5lY3QoKQorLy8gdXMgKGl0IHBvbGxzIGF0IEhaLzQgdXN1YWxseSkgYmVmb3JlIHdlIHJlcG9ydCB0b28gbWFueSBmYWxzZSBlcnJvcnMuCisjZGVmaW5lIFRIUk9UVExFX0pJRkZJRVMJKEhaLzgpCisKKy8vIGZvciB2ZW5kb3Itc3BlY2lmaWMgY29udHJvbCBvcGVyYXRpb25zCisjZGVmaW5lCUNPTlRST0xfVElNRU9VVF9NUwk1MDAKKworLy8gYmV0d2VlbiB3YWtldXBzCisjZGVmaW5lIFVOTElOS19USU1FT1VUX01TCTMKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLy8gcmFuZG9tbHkgZ2VuZXJhdGVkIGV0aGVybmV0IGFkZHJlc3MKK3N0YXRpYyB1OAlub2RlX2lkIFtFVEhfQUxFTl07CisKKy8vIHN0YXRlIHdlIGtlZXAgZm9yIGVhY2ggZGV2aWNlIHdlIGhhbmRsZQorc3RydWN0IHVzYm5ldCB7CisJLy8gaG91c2VrZWVwaW5nCisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CisJc3RydWN0IGRyaXZlcl9pbmZvCSpkcml2ZXJfaW5mbzsKKwl3YWl0X3F1ZXVlX2hlYWRfdAkqd2FpdDsKKworCS8vIGkvbyBpbmZvOiBwaXBlcyBldGMKKwl1bnNpZ25lZAkJaW4sIG91dDsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKnN0YXR1czsKKwl1bnNpZ25lZAkJbWF4cGFja2V0OworCXN0cnVjdCB0aW1lcl9saXN0CWRlbGF5OworCisJLy8gcHJvdG9jb2wvaW50ZXJmYWNlIHN0YXRlCisJc3RydWN0IG5ldF9kZXZpY2UJKm5ldDsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKKwlpbnQJCQltc2dfZW5hYmxlOworCXVuc2lnbmVkIGxvbmcJCWRhdGEgWzVdOworCisJc3RydWN0IG1paV9pZl9pbmZvCW1paTsKKworCS8vIHZhcmlvdXMga2luZHMgb2YgcGVuZGluZyBkcml2ZXIgd29yaworCXN0cnVjdCBza19idWZmX2hlYWQJcnhxOworCXN0cnVjdCBza19idWZmX2hlYWQJdHhxOworCXN0cnVjdCBza19idWZmX2hlYWQJZG9uZTsKKwlzdHJ1Y3QgdXJiCQkqaW50ZXJydXB0OworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAliaDsKKworCXN0cnVjdCB3b3JrX3N0cnVjdAlrZXZlbnQ7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisjCQlkZWZpbmUgRVZFTlRfVFhfSEFMVAkwCisjCQlkZWZpbmUgRVZFTlRfUlhfSEFMVAkxCisjCQlkZWZpbmUgRVZFTlRfUlhfTUVNT1JZCTIKKyMJCWRlZmluZSBFVkVOVF9TVFNfU1BMSVQJMworfTsKKworLy8gZGV2aWNlLXNwZWNpZmljIGluZm8gdXNlZCBieSB0aGUgZHJpdmVyCitzdHJ1Y3QgZHJpdmVyX2luZm8geworCWNoYXIJCSpkZXNjcmlwdGlvbjsKKworCWludAkJZmxhZ3M7CisvKiBmcmFtaW5nIGlzIENEQyBFdGhlcm5ldCwgbm90IHdyaXRpbmcgWkxQcyAoaHcgaXNzdWVzKSwgb3Igb3B0aW9uYWxseTogKi8KKyNkZWZpbmUgRkxBR19GUkFNSU5HX05DCTB4MDAwMQkJLyogZ3VhcmQgYWdhaW5zdCBkZXZpY2UgZHJvcG91dHMgKi8gCisjZGVmaW5lIEZMQUdfRlJBTUlOR19HTAkweDAwMDIJCS8qIGdlbmVsaW5rIGJhdGNoZXMgcGFja2V0cyAqLworI2RlZmluZSBGTEFHX0ZSQU1JTkdfWgkweDAwMDQJCS8qIHphdXJ1cyBhZGRzIGEgdHJhaWxlciAqLworI2RlZmluZSBGTEFHX0ZSQU1JTkdfUk4JMHgwMDA4CQkvKiBSTkRJUyBiYXRjaGVzLCBwbHVzIGh1Z2UgaGVhZGVyICovCisKKyNkZWZpbmUgRkxBR19OT19TRVRJTlQJMHgwMDEwCQkvKiBkZXZpY2UgY2FuJ3Qgc2V0X2ludGVyZmFjZSgpICovCisjZGVmaW5lIEZMQUdfRVRIRVIJMHgwMDIwCQkvKiBtYXliZSB1c2UgImV0aCVkIiBuYW1lcyAqLworCisjZGVmaW5lIEZMQUdfRlJBTUlOR19BWCAweDAwNDAgICAgICAgICAgLyogQVg4ODc3Mi8xNzggcGFja2V0cyAqLworCisJLyogaW5pdCBkZXZpY2UgLi4uIGNhbiBzbGVlcCwgb3IgY2F1c2UgcHJvYmUoKSBmYWlsdXJlICovCisJaW50CSgqYmluZCkoc3RydWN0IHVzYm5ldCAqLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqKTsKKworCS8qIGNsZWFudXAgZGV2aWNlIC4uLiBjYW4gc2xlZXAsIGJ1dCBjYW4ndCBmYWlsICovCisJdm9pZAkoKnVuYmluZCkoc3RydWN0IHVzYm5ldCAqLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqKTsKKworCS8qIHJlc2V0IGRldmljZSAuLi4gY2FuIHNsZWVwICovCisJaW50CSgqcmVzZXQpKHN0cnVjdCB1c2JuZXQgKik7CisKKwkvKiBzZWUgaWYgcGVlciBpcyBjb25uZWN0ZWQgLi4uIGNhbiBzbGVlcCAqLworCWludAkoKmNoZWNrX2Nvbm5lY3QpKHN0cnVjdCB1c2JuZXQgKik7CisKKwkvKiBmb3Igc3RhdHVzIHBvbGxpbmcgKi8KKwl2b2lkCSgqc3RhdHVzKShzdHJ1Y3QgdXNibmV0ICosIHN0cnVjdCB1cmIgKik7CisKKwkvKiBmaXh1cCByeCBwYWNrZXQgKHN0cmlwIGZyYW1pbmcpICovCisJaW50CSgqcnhfZml4dXApKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKwkvKiBmaXh1cCB0eCBwYWNrZXQgKGFkZCBmcmFtaW5nKSAqLworCXN0cnVjdCBza19idWZmCSooKnR4X2ZpeHVwKShzdHJ1Y3QgdXNibmV0ICpkZXYsCisJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZsYWdzKTsKKworCS8vIEZJWE1FIC0tIGFsc28gYW4gaW50ZXJydXB0IG1lY2hhbmlzbQorCS8vIHVzZWZ1bCBmb3IgYXQgbGVhc3QgUEwyMzAxLzIzMDIgYW5kIEdMNjIwVVNCLUEKKwkvLyBhbmQgQ0RDIHVzZSB0aGVtIHRvIHJlcG9ydCAnaXMgaXQgY29ubmVjdGVkJyBjaGFuZ2VzCisKKwkvKiBmb3IgbmV3IGRldmljZXMsIHVzZSB0aGUgZGVzY3JpcHRvci1yZWFkaW5nIGNvZGUgaW5zdGVhZCAqLworCWludAkJaW47CQkvKiByeCBlbmRwb2ludCAqLworCWludAkJb3V0OwkJLyogdHggZW5kcG9pbnQgKi8KKworCXVuc2lnbmVkIGxvbmcJZGF0YTsJCS8qIE1pc2MgZHJpdmVyIHNwZWNpZmljIGRhdGEgKi8KK307CisKKy8vIHdlIHJlY29yZCB0aGUgc3RhdGUgZm9yIGVhY2ggb2Ygb3VyIHF1ZXVlZCBza2JzCitlbnVtIHNrYl9zdGF0ZSB7CisJaWxsZWdhbCA9IDAsCisJdHhfc3RhcnQsIHR4X2RvbmUsCisJcnhfc3RhcnQsIHJ4X2RvbmUsIHJ4X2NsZWFudXAKK307CisKK3N0cnVjdCBza2JfZGF0YSB7CS8vIHNrYi0+Y2IgaXMgb25lIG9mIHRoZXNlCisJc3RydWN0IHVyYgkJKnVyYjsKKwlzdHJ1Y3QgdXNibmV0CQkqZGV2OworCWVudW0gc2tiX3N0YXRlCQlzdGF0ZTsKKwlzaXplX3QJCQlsZW5ndGg7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZSBbXSA9ICJ1c2JuZXQiOworCisvKiB1c2UgZXRodG9vbCB0byBjaGFuZ2UgdGhlIGxldmVsIGZvciBhbnkgZ2l2ZW4gZGV2aWNlICovCitzdGF0aWMgaW50IG1zZ19sZXZlbCA9IC0xOworbW9kdWxlX3BhcmFtIChtc2dfbGV2ZWwsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDIChtc2dfbGV2ZWwsICJPdmVycmlkZSBkZWZhdWx0IG1lc3NhZ2UgbGV2ZWwiKTsKKworCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgZGV2ZGJnKHVzYm5ldCwgZm10LCBhcmcuLi4pIFwKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm10ICJcbiIgLCAodXNibmV0KS0+bmV0LT5uYW1lICwgIyMgYXJnKQorI2Vsc2UKKyNkZWZpbmUgZGV2ZGJnKHVzYm5ldCwgZm10LCBhcmcuLi4pIGRvIHt9IHdoaWxlKDApCisjZW5kaWYKKworI2RlZmluZSBkZXZlcnIodXNibmV0LCBmbXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX0VSUiAiJXM6ICIgZm10ICJcbiIgLCAodXNibmV0KS0+bmV0LT5uYW1lICwgIyMgYXJnKQorI2RlZmluZSBkZXZ3YXJuKHVzYm5ldCwgZm10LCBhcmcuLi4pIFwKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogIiBmbXQgIlxuIiAsICh1c2JuZXQpLT5uZXQtPm5hbWUgLCAjIyBhcmcpCisKKyNkZWZpbmUgZGV2aW5mbyh1c2JuZXQsIGZtdCwgYXJnLi4uKSBcCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgZm10ICJcbiIgLCAodXNibmV0KS0+bmV0LT5uYW1lICwgIyMgYXJnKTsgXAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCB1c2JuZXRfZ2V0X2RydmluZm8gKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX2RydmluZm8gKik7CitzdGF0aWMgdTMyIHVzYm5ldF9nZXRfbGluayAoc3RydWN0IG5ldF9kZXZpY2UgKik7CitzdGF0aWMgdTMyIHVzYm5ldF9nZXRfbXNnbGV2ZWwgKHN0cnVjdCBuZXRfZGV2aWNlICopOworc3RhdGljIHZvaWQgdXNibmV0X3NldF9tc2dsZXZlbCAoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTMyKTsKKworLyogbW9zdGx5IGZvciBQREEgc3R5bGUgZGV2aWNlcywgd2hpY2ggYXJlIGFsd2F5cyBjb25uZWN0ZWQgaWYgcHJlc2VudCAqLworc3RhdGljIGludCBhbHdheXNfY29ubmVjdGVkIChzdHJ1Y3QgdXNibmV0ICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qIGhhbmRsZXMgQ0RDIEV0aGVybmV0IGFuZCBtYW55IG90aGVyIG5ldHdvcmsgImJ1bGsgZGF0YSIgaW50ZXJmYWNlcyAqLworc3RhdGljIGludAorZ2V0X2VuZHBvaW50cyAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlpbnQJCQkJdG1wOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UJKmFsdCA9IE5VTEw7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50CSppbiA9IE5VTEwsICpvdXQgPSBOVUxMOworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludAkqc3RhdHVzID0gTlVMTDsKKworCWZvciAodG1wID0gMDsgdG1wIDwgaW50Zi0+bnVtX2FsdHNldHRpbmc7IHRtcCsrKSB7CisJCXVuc2lnbmVkCWVwOworCisJCWluID0gb3V0ID0gc3RhdHVzID0gTlVMTDsKKwkJYWx0ID0gaW50Zi0+YWx0c2V0dGluZyArIHRtcDsKKworCQkvKiB0YWtlIHRoZSBmaXJzdCBhbHRzZXR0aW5nIHdpdGggaW4tYnVsayArIG91dC1idWxrOworCQkgKiByZW1lbWJlciBhbnkgc3RhdHVzIGVuZHBvaW50LCBqdXN0IGluIGNhc2U7CisJCSAqIGlnbm9yZSBvdGhlciBlbmRwb2ludHMgYW5kIGFsdHNldHR0aW5ncy4KKwkJICovCisJCWZvciAoZXAgPSAwOyBlcCA8IGFsdC0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBlcCsrKSB7CisJCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQJKmU7CisJCQlpbnQJCQkJaW50ciA9IDA7CisKKwkJCWUgPSBhbHQtPmVuZHBvaW50ICsgZXA7CisJCQlzd2l0Y2ggKGUtPmRlc2MuYm1BdHRyaWJ1dGVzKSB7CisJCQljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lOVDoKKwkJCQlpZiAoIShlLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSkKKwkJCQkJY29udGludWU7CisJCQkJaW50ciA9IDE7CisJCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoZS0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgeworCQkJCWlmICghaW50ciAmJiAhaW4pCisJCQkJCWluID0gZTsKKwkJCQllbHNlIGlmIChpbnRyICYmICFzdGF0dXMpCisJCQkJCXN0YXR1cyA9IGU7CisJCQl9IGVsc2UgeworCQkJCWlmICghb3V0KQorCQkJCQlvdXQgPSBlOworCQkJfQorCQl9CisJCWlmIChpbiAmJiBvdXQpCisJCQlicmVhazsKKwl9CisJaWYgKCFhbHQgfHwgIWluIHx8ICFvdXQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGFsdC0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZyAhPSAwCisJCQl8fCAhKGRldi0+ZHJpdmVyX2luZm8tPmZsYWdzICYgRkxBR19OT19TRVRJTlQpKSB7CisJCXRtcCA9IHVzYl9zZXRfaW50ZXJmYWNlIChkZXYtPnVkZXYsIGFsdC0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQkJCWFsdC0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZyk7CisJCWlmICh0bXAgPCAwKQorCQkJcmV0dXJuIHRtcDsKKwl9CisJCisJZGV2LT5pbiA9IHVzYl9yY3ZidWxrcGlwZSAoZGV2LT51ZGV2LAorCQkJaW4tPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJZGV2LT5vdXQgPSB1c2Jfc25kYnVsa3BpcGUgKGRldi0+dWRldiwKKwkJCW91dC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwlkZXYtPnN0YXR1cyA9IHN0YXR1czsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW50cl9jb21wbGV0ZSAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK3N0YXRpYyBpbnQgaW5pdF9zdGF0dXMgKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJY2hhcgkJKmJ1ZiA9IE5VTEw7CisJdW5zaWduZWQJcGlwZSA9IDA7CisJdW5zaWduZWQJbWF4cDsKKwl1bnNpZ25lZAlwZXJpb2Q7CisKKwlpZiAoIWRldi0+ZHJpdmVyX2luZm8tPnN0YXR1cykKKwkJcmV0dXJuIDA7CisKKwlwaXBlID0gdXNiX3JjdmludHBpcGUgKGRldi0+dWRldiwKKwkJCWRldi0+c3RhdHVzLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MKKwkJCQkmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJbWF4cCA9IHVzYl9tYXhwYWNrZXQgKGRldi0+dWRldiwgcGlwZSwgMCk7CisKKwkvKiBhdm9pZCAxIG1zZWMgY2hhdHRlcjogIG1pbiA4IG1zZWMgcG9sbCByYXRlICovCisJcGVyaW9kID0gbWF4ICgoaW50KSBkZXYtPnN0YXR1cy0+ZGVzYy5iSW50ZXJ2YWwsCisJCShkZXYtPnVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSA/IDcgOiAzKTsKKworCWJ1ZiA9IGttYWxsb2MgKG1heHAsIFNMQUJfS0VSTkVMKTsKKwlpZiAoYnVmKSB7CisJCWRldi0+aW50ZXJydXB0ID0gdXNiX2FsbG9jX3VyYiAoMCwgU0xBQl9LRVJORUwpOworCQlpZiAoIWRldi0+aW50ZXJydXB0KSB7CisJCQlrZnJlZSAoYnVmKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9IGVsc2UgeworCQkJdXNiX2ZpbGxfaW50X3VyYihkZXYtPmludGVycnVwdCwgZGV2LT51ZGV2LCBwaXBlLAorCQkJCWJ1ZiwgbWF4cCwgaW50cl9jb21wbGV0ZSwgZGV2LCBwZXJpb2QpOworCQkJZGV2X2RiZygmaW50Zi0+ZGV2LAorCQkJCSJzdGF0dXMgZXAlZGluLCAlZCBieXRlcyBwZXJpb2QgJWRcbiIsCisJCQkJdXNiX3BpcGVlbmRwb2ludChwaXBlKSwgbWF4cCwgcGVyaW9kKTsKKwkJfQorCX0KKwlyZXR1cm4gIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNrYl9yZXR1cm4gKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpbnQJc3RhdHVzOworCisJc2tiLT5kZXYgPSBkZXYtPm5ldDsKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMgKHNrYiwgZGV2LT5uZXQpOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisKKwlpZiAobmV0aWZfbXNnX3J4X3N0YXR1cyAoZGV2KSkKKwkJZGV2ZGJnIChkZXYsICI8IHJ4LCBsZW4gJWQsIHR5cGUgMHgleCIsCisJCQlza2ItPmxlbiArIHNpemVvZiAoc3RydWN0IGV0aGhkciksIHNrYi0+cHJvdG9jb2wpOworCW1lbXNldCAoc2tiLT5jYiwgMCwgc2l6ZW9mIChzdHJ1Y3Qgc2tiX2RhdGEpKTsKKwlzdGF0dXMgPSBuZXRpZl9yeCAoc2tiKTsKKwlpZiAoc3RhdHVzICE9IE5FVF9SWF9TVUNDRVNTICYmIG5ldGlmX21zZ19yeF9lcnIgKGRldikpCisJCWRldmRiZyAoZGV2LCAibmV0aWZfcnggc3RhdHVzICVkIiwgc3RhdHVzKTsKK30KKworDAorI2lmZGVmCUNPTkZJR19VU0JfQUxJX001NjMyCisjZGVmaW5lCUhBVkVfSEFSRFdBUkUKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogQUxpIE01NjMyIGRyaXZlciAuLi4gZG9lcyBoaWdoIHNwZWVkCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwlhbGlfbTU2MzJfaW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPQkiQUxpIE01NjMyIiwKK307CisKKworI2VuZGlmCisKKwwKKyNpZmRlZglDT05GSUdfVVNCX0FOMjcyMAorI2RlZmluZQlIQVZFX0hBUkRXQVJFCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEFuY2hvckNoaXBzIDI3MjAgZHJpdmVyIC4uLiBodHRwOi8vd3d3LmN5cHJlc3MuY29tCisgKgorICogVGhpcyBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhIHdheSB0byBkZXRlY3Qgd2hldGhlciB0aGUgcGVlciBpcworICogY29ubmVjdGVkLCBvciBuZWVkIGFueSByZXNldCBoYW5kc2hha2luZy4gIEl0J3MgZ290IHByZXR0eSBiaWcKKyAqIGludGVybmFsIGJ1ZmZlcnMgKGhhbmRsZXMgbW9zdCBvZiBhIGZyYW1lJ3Mgd29ydGggb2YgZGF0YSkuCisgKiBDaGlwIGRhdGEgc2hlZXRzIGRvbid0IGRlc2NyaWJlIGFueSB2ZW5kb3IgY29udHJvbCBtZXNzYWdlcy4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCWFuMjcyMF9pbmZvID0geworCS5kZXNjcmlwdGlvbiA9CSJBbmNob3JDaGlwcy9DeXByZXNzIDI3MjAiLAorCS8vIG5vIHJlc2V0IGF2YWlsYWJsZSEKKwkvLyBubyBjaGVja19jb25uZWN0IGF2YWlsYWJsZSEKKworCS5pbiA9IDIsIC5vdXQgPSAyLAkJLy8gZGlyZWN0aW9uIGRpc3Rpbmd1aXNoZXMgdGhlc2UKK307CisKKyNlbmRpZgkvKiBDT05GSUdfVVNCX0FOMjcyMCAqLworCisMCisjaWZkZWYgQ09ORklHX1VTQl9BWDg4MTdYCisvKiBBU0lYIEFYODgxN1ggYmFzZWQgVVNCIDIuMCBFdGhlcm5ldCBEZXZpY2VzICovCisKKyNkZWZpbmUgSEFWRV9IQVJEV0FSRQorI2RlZmluZSBORUVEX01JSQorCisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKworI2RlZmluZSBBWF9DTURfU0VUX1NXX01JSQkJMHgwNgorI2RlZmluZSBBWF9DTURfUkVBRF9NSUlfUkVHCQkweDA3CisjZGVmaW5lIEFYX0NNRF9XUklURV9NSUlfUkVHCQkweDA4CisjZGVmaW5lIEFYX0NNRF9TRVRfSFdfTUlJCQkweDBhCisjZGVmaW5lIEFYX0NNRF9SRUFEX0VFUFJPTQkJMHgwYgorI2RlZmluZSBBWF9DTURfV1JJVEVfRUVQUk9NCQkweDBjCisjZGVmaW5lIEFYX0NNRF9XUklURV9FTkFCTEUJCTB4MGQKKyNkZWZpbmUgQVhfQ01EX1dSSVRFX0RJU0FCTEUJCTB4MGUKKyNkZWZpbmUgQVhfQ01EX1dSSVRFX1JYX0NUTAkJMHgxMAorI2RlZmluZSBBWF9DTURfUkVBRF9JUEcwMTIJCTB4MTEKKyNkZWZpbmUgQVhfQ01EX1dSSVRFX0lQRzAJCTB4MTIKKyNkZWZpbmUgQVhfQ01EX1dSSVRFX0lQRzEJCTB4MTMKKyNkZWZpbmUgQVhfQ01EX1dSSVRFX0lQRzIJCTB4MTQKKyNkZWZpbmUgQVhfQ01EX1dSSVRFX01VTFRJX0ZJTFRFUgkweDE2CisjZGVmaW5lIEFYX0NNRF9SRUFEX05PREVfSUQJCTB4MTcKKyNkZWZpbmUgQVhfQ01EX1JFQURfUEhZX0lECQkweDE5CisjZGVmaW5lIEFYX0NNRF9XUklURV9NRURJVU1fTU9ERQkweDFiCisjZGVmaW5lIEFYX0NNRF9SRUFEX01PTklUT1JfTU9ERQkweDFjCisjZGVmaW5lIEFYX0NNRF9XUklURV9NT05JVE9SX01PREUJMHgxZAorI2RlZmluZSBBWF9DTURfV1JJVEVfR1BJT1MJCTB4MWYKKyNkZWZpbmUgQVhfQ01EX1NXX1JFU0VUCQkJMHgyMAorI2RlZmluZSBBWF9DTURfU1dfUEhZX1NUQVRVUwkJMHgyMQorI2RlZmluZSBBWF9DTURfU1dfUEhZX1NFTEVDVAkJMHgyMgorI2RlZmluZSBBWDg4NzcyX0NNRF9SRUFEX05PREVfSUQJMHgxMworCisjZGVmaW5lIEFYX01PTklUT1JfTU9ERQkJCTB4MDEKKyNkZWZpbmUgQVhfTU9OSVRPUl9MSU5LCQkJMHgwMgorI2RlZmluZSBBWF9NT05JVE9SX01BR0lDCQkweDA0CisjZGVmaW5lIEFYX01PTklUT1JfSFNGUwkJCTB4MTAKKworI2RlZmluZSBBWF9NQ0FTVF9GSUxURVJfU0laRQkJOAorI2RlZmluZSBBWF9NQVhfTUNBU1QJCQk2NAorCisjZGVmaW5lIEFYX0lOVEVSUlVQVF9CVUZTSVpFCQk4CisKKyNkZWZpbmUgQVhfRUVQUk9NX0xFTgkJCTB4NDAKKworI2RlZmluZSBBWF9TV1JFU0VUX0NMRUFSCQkweDAwCisjZGVmaW5lIEFYX1NXUkVTRVRfUlIJCQkweDAxCisjZGVmaW5lIEFYX1NXUkVTRVRfUlQJCQkweDAyCisjZGVmaW5lIEFYX1NXUkVTRVRfUFJURQkJCTB4MDQKKyNkZWZpbmUgQVhfU1dSRVNFVF9QUkwJCQkweDA4CisjZGVmaW5lIEFYX1NXUkVTRVRfQloJCQkweDEwCisjZGVmaW5lIEFYX1NXUkVTRVRfSVBSTAkJCTB4MjAKKyNkZWZpbmUgQVhfU1dSRVNFVF9JUFBECQkJMHg0MAorCisjZGVmaW5lIEFYODg3NzJfSVBHMF9ERUZBVUxUCQkweDE1CisjZGVmaW5lIEFYODg3NzJfSVBHMV9ERUZBVUxUCQkweDBjCisjZGVmaW5lIEFYODg3NzJfSVBHMl9ERUZBVUxUCQkweDEyCisKKyNkZWZpbmUgQVhfRUVQUk9NX01BR0lDCQkJMHhkZWFkYmVlZgorCisvKiBUaGlzIHN0cnVjdHVyZSBjYW5ub3QgZXhjZWVkIHNpemVvZih1bnNpZ25lZCBsb25nIFs1XSkgQUtBIDIwIGJ5dGVzICovCitzdHJ1Y3QgYXg4ODE3eF9kYXRhIHsKKwl1OCBtdWx0aV9maWx0ZXJbQVhfTUNBU1RfRklMVEVSX1NJWkVdOworCXN0cnVjdCB1cmIgKmludF91cmI7CisJdTggKmludF9idWY7Cit9OworCitzdGF0aWMgaW50IGF4ODgxN3hfcmVhZF9jbWQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAorCQkJICAgIHUxNiBzaXplLCB2b2lkICpkYXRhKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2coCisJCWRldi0+dWRldiwKKwkJdXNiX3JjdmN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCWNtZCwKKwkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCXZhbHVlLAorCQlpbmRleCwKKwkJZGF0YSwKKwkJc2l6ZSwKKwkJQ09OVFJPTF9USU1FT1VUX01TKTsKK30KKworc3RhdGljIGludCBheDg4MTd4X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsCisJCQkgICAgIHUxNiBzaXplLCB2b2lkICpkYXRhKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2coCisJCWRldi0+dWRldiwKKwkJdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCWNtZCwKKwkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQl2YWx1ZSwKKwkJaW5kZXgsCisJCWRhdGEsCisJCXNpemUsCisJCUNPTlRST0xfVElNRU9VVF9NUyk7Cit9CisKK3N0YXRpYyB2b2lkIGF4ODgxN3hfYXN5bmNfY21kX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqcmVxID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKil1cmItPmNvbnRleHQ7CisKKwlpZiAodXJiLT5zdGF0dXMgPCAwKQorCQlwcmludGsoS0VSTl9ERUJVRyAiYXg4ODE3eF9hc3luY19jbWRfY2FsbGJhY2soKSBmYWlsZWQgd2l0aCAlZCIsCisJCQl1cmItPnN0YXR1cyk7CisKKwlrZnJlZShyZXEpOworCXVzYl9mcmVlX3VyYih1cmIpOworfQorCitzdGF0aWMgdm9pZCBheDg4MTd4X2ludGVycnVwdF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2JuZXQgKmRldiA9IChzdHJ1Y3QgdXNibmV0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBheDg4MTd4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGF4ODgxN3hfZGF0YSAqKSZkZXYtPmRhdGE7CisJaW50IGxpbms7CisKKwlpZiAodXJiLT5zdGF0dXMgPCAwKSB7CisJCWRldmRiZyhkZXYsImF4ODgxN3hfaW50ZXJydXB0X2NvbXBsZXRlKCkgZmFpbGVkIHdpdGggJWQiLAorCQkJdXJiLT5zdGF0dXMpOworCX0gZWxzZSB7CisJCWxpbmsgPSBkYXRhLT5pbnRfYnVmWzJdICYgMHgwMTsKKwkJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2LT5uZXQpICE9IGxpbmspIHsKKwkJCWlmIChsaW5rKQorCQkJCW5ldGlmX2NhcnJpZXJfb24oZGV2LT5uZXQpOworCQkJZWxzZQorCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldi0+bmV0KTsKKwkJCWRldmRiZyhkZXYsICJheDg4MTd4IC0gTGluayBTdGF0dXMgaXM6ICVkIiwgbGluayk7CisJCX0KKwkJdXNiX3N1Ym1pdF91cmIoZGF0YS0+aW50X3VyYiwgR0ZQX0FUT01JQyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBheDg4MTd4X3dyaXRlX2NtZF9hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsCisJCQkJICAgIHUxNiBzaXplLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnJlcTsKKwlpbnQgc3RhdHVzOworCXN0cnVjdCB1cmIgKnVyYjsKKworCWlmICgodXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCkgeworCQlkZXZkYmcoZGV2LCAiRXJyb3IgYWxsb2NhdGluZyBVUkIgaW4gd3JpdGVfY21kX2FzeW5jISIpOworCQlyZXR1cm47CisJfQorCisJaWYgKChyZXEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSwgR0ZQX0FUT01JQykpID09IE5VTEwpIHsKKwkJZGV2ZXJyKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNvbnRyb2wgcmVxdWVzdCIpOworCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJcmV0dXJuOworCX0KKworCXJlcS0+YlJlcXVlc3RUeXBlID0gVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFOworCXJlcS0+YlJlcXVlc3QgPSBjbWQ7CisJcmVxLT53VmFsdWUgPSBjcHVfdG9fbGUxNih2YWx1ZSk7CisJcmVxLT53SW5kZXggPSBjcHVfdG9fbGUxNihpbmRleCk7IAorCXJlcS0+d0xlbmd0aCA9IGNwdV90b19sZTE2KHNpemUpOworCisJdXNiX2ZpbGxfY29udHJvbF91cmIodXJiLCBkZXYtPnVkZXYsCisJCQkgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAodm9pZCAqKXJlcSwgZGF0YSwgc2l6ZSwKKwkJCSAgICAgYXg4ODE3eF9hc3luY19jbWRfY2FsbGJhY2ssIHJlcSk7CisKKwlpZigoc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgPCAwKSB7CisJCWRldmVycihkZXYsICJFcnJvciBzdWJtaXR0aW5nIHRoZSBjb250cm9sIG1lc3NhZ2U6IHN0YXR1cz0lZCIsIHN0YXR1cyk7CisJCWtmcmVlKHJlcSk7CisJCXVzYl9mcmVlX3VyYih1cmIpOworCX0KK30KKworc3RhdGljIHZvaWQgYXg4ODE3eF9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlzdHJ1Y3QgYXg4ODE3eF9kYXRhICpkYXRhID0gKHN0cnVjdCBheDg4MTd4X2RhdGEgKikmZGV2LT5kYXRhOworCXU4IHJ4X2N0bCA9IDB4OGM7CisKKwlpZiAobmV0LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCXJ4X2N0bCB8PSAweDAxOworCX0gZWxzZSBpZiAobmV0LT5mbGFncyAmIElGRl9BTExNVUxUSQorCQkgICB8fCBuZXQtPm1jX2NvdW50ID4gQVhfTUFYX01DQVNUKSB7CisJCXJ4X2N0bCB8PSAweDAyOworCX0gZWxzZSBpZiAobmV0LT5tY19jb3VudCA9PSAwKSB7CisJCS8qIGp1c3QgYnJvYWRjYXN0IGFuZCBkaXJlY3RlZCAqLworCX0gZWxzZSB7CisJCS8qIFdlIHVzZSB0aGUgMjAgYnl0ZSBkZXYtPmRhdGEKKwkJICogZm9yIG91ciA4IGJ5dGUgZmlsdGVyIGJ1ZmZlcgorCQkgKiB0byBhdm9pZCBhbGxvY2F0aW5nIG1lbW9yeSB0aGF0CisJCSAqIGlzIHRyaWNreSB0byBmcmVlIGxhdGVyICovCisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdCA9IG5ldC0+bWNfbGlzdDsKKwkJdTMyIGNyY19iaXRzOworCQlpbnQgaTsKKworCQltZW1zZXQoZGF0YS0+bXVsdGlfZmlsdGVyLCAwLCBBWF9NQ0FTVF9GSUxURVJfU0laRSk7CisKKwkJLyogQnVpbGQgdGhlIG11bHRpY2FzdCBoYXNoIGZpbHRlci4gKi8KKwkJZm9yIChpID0gMDsgaSA8IG5ldC0+bWNfY291bnQ7IGkrKykgeworCQkJY3JjX2JpdHMgPQorCQkJICAgIGV0aGVyX2NyYyhFVEhfQUxFTiwKKwkJCQkgICAgICBtY19saXN0LT5kbWlfYWRkcikgPj4gMjY7CisJCQlkYXRhLT5tdWx0aV9maWx0ZXJbY3JjX2JpdHMgPj4gM10gfD0KKwkJCSAgICAxIDw8IChjcmNfYml0cyAmIDcpOworCQkJbWNfbGlzdCA9IG1jX2xpc3QtPm5leHQ7CisJCX0KKworCQlheDg4MTd4X3dyaXRlX2NtZF9hc3luYyhkZXYsIEFYX0NNRF9XUklURV9NVUxUSV9GSUxURVIsIDAsIDAsCisJCQkJICAgQVhfTUNBU1RfRklMVEVSX1NJWkUsIGRhdGEtPm11bHRpX2ZpbHRlcik7CisKKwkJcnhfY3RsIHw9IDB4MTA7CisJfQorCisJYXg4ODE3eF93cml0ZV9jbWRfYXN5bmMoZGV2LCBBWF9DTURfV1JJVEVfUlhfQ1RMLCByeF9jdGwsIDAsIDAsIE5VTEwpOworfQorCitzdGF0aWMgaW50IGF4ODgxN3hfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MpCit7CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1MTYgcmVzOworCXU4IGJ1ZlsxXTsKKworCWF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NFVF9TV19NSUksIDAsIDAsIDAsICZidWYpOworCWF4ODgxN3hfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9NSUlfUkVHLCBwaHlfaWQsIChfX3UxNilsb2MsIDIsICh1MTYgKikmcmVzKTsKKwlheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfSFdfTUlJLCAwLCAwLCAwLCAmYnVmKTsKKworCXJldHVybiByZXMgJiAweGZmZmY7Cit9CisKK3N0YXRpYyB2b2lkIGF4ODgxN3hfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jLCBpbnQgdmFsKQoreworCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJdTE2IHJlcyA9IHZhbDsKKwl1OCBidWZbMV07CisKKwlheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfU1dfTUlJLCAwLCAwLCAwLCAmYnVmKTsKKwlheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NSUlfUkVHLCBwaHlfaWQsIChfX3UxNilsb2MsIDIsICh1MTYgKikmcmVzKTsKKwlheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfSFdfTUlJLCAwLCAwLCAwLCAmYnVmKTsKK30KKworc3RhdGljIHZvaWQgYXg4ODE3eF9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbGluZm8pCit7CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwl1OCBvcHQ7CisKKwlpZiAoYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX01PTklUT1JfTU9ERSwgMCwgMCwgMSwgJm9wdCkgPCAwKSB7CisJCXdvbGluZm8tPnN1cHBvcnRlZCA9IDA7CisJCXdvbGluZm8tPndvbG9wdHMgPSAwOworCQlyZXR1cm47CisJfQorCXdvbGluZm8tPnN1cHBvcnRlZCA9IFdBS0VfUEhZIHwgV0FLRV9NQUdJQzsKKwl3b2xpbmZvLT53b2xvcHRzID0gMDsKKwlpZiAob3B0ICYgQVhfTU9OSVRPUl9NT0RFKSB7CisJCWlmIChvcHQgJiBBWF9NT05JVE9SX0xJTkspCisJCQl3b2xpbmZvLT53b2xvcHRzIHw9IFdBS0VfUEhZOworCQlpZiAob3B0ICYgQVhfTU9OSVRPUl9NQUdJQykKKwkJCXdvbGluZm8tPndvbG9wdHMgfD0gV0FLRV9NQUdJQzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXg4ODE3eF9zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbGluZm8pCit7CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwl1OCBvcHQgPSAwOworCXU4IGJ1ZlsxXTsKKworCWlmICh3b2xpbmZvLT53b2xvcHRzICYgV0FLRV9QSFkpCisJCW9wdCB8PSBBWF9NT05JVE9SX0xJTks7CisJaWYgKHdvbGluZm8tPndvbG9wdHMgJiBXQUtFX01BR0lDKQorCQlvcHQgfD0gQVhfTU9OSVRPUl9NQUdJQzsKKwlpZiAob3B0ICE9IDApCisJCW9wdCB8PSBBWF9NT05JVE9SX01PREU7CisKKwlpZiAoYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfTU9OSVRPUl9NT0RFLAorCQkJICAgICAgb3B0LCAwLCAwLCAmYnVmKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXg4ODE3eF9nZXRfZWVwcm9tX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXJldHVybiBBWF9FRVBST01fTEVOOworfQorCitzdGF0aWMgaW50IGF4ODgxN3hfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LAorCQkJICAgICAgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICpkYXRhKQoreworCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisJdTE2ICplYnVmID0gKHUxNiAqKWRhdGE7CisJaW50IGk7CisKKwkvKiBDcnVkZSBoYWNrIHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IG92ZXJ3cml0ZSBtZW1vcnkKKwkgKiBpZiBhbiBvZGQgbGVuZ3RoIGlzIHN1cHBsaWVkCisJICovCisJaWYgKGVlcHJvbS0+bGVuICUgMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllZXByb20tPm1hZ2ljID0gQVhfRUVQUk9NX01BR0lDOworCisJLyogYXg4ODE3eCByZXR1cm5zIDIgYnl0ZXMgZnJvbSBlZXByb20gb24gcmVhZCAqLworCWZvciAoaT0wOyBpIDwgZWVwcm9tLT5sZW4gLyAyOyBpKyspIHsKKwkJaWYgKGF4ODgxN3hfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9FRVBST00sIAorCQkJZWVwcm9tLT5vZmZzZXQgKyBpLCAwLCAyLCAmZWJ1ZltpXSkgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBheDg4MTd4X2dldF9kcnZpbmZvIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LAorCQkJCSBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCS8qIEluaGVyaXQgc3RhbmRhcmQgZGV2aWNlIGluZm8gKi8KKwl1c2JuZXRfZ2V0X2RydmluZm8obmV0LCBpbmZvKTsKKwlpbmZvLT5lZWR1bXBfbGVuID0gMHgzZTsKK30KKworc3RhdGljIGludCBheDg4MTd4X2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCisJcmV0dXJuIG1paV9ldGh0b29sX2dzZXQoJmRldi0+bWlpLGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgYXg4ODE3eF9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCXJldHVybiBtaWlfZXRodG9vbF9zc2V0KCZkZXYtPm1paSxjbWQpOworfQorCisvKiBXZSBuZWVkIHRvIG92ZXJyaWRlIHNvbWUgZXRodG9vbF9vcHMgc28gd2UgcmVxdWlyZSBvdXIKKyAgIG93biBzdHJ1Y3R1cmUgc28gd2UgZG9uJ3QgaW50ZXJmZXJlIHdpdGggb3RoZXIgdXNibmV0CisgICBkZXZpY2VzIHRoYXQgbWF5IGJlIGNvbm5lY3RlZCBhdCB0aGUgc2FtZSB0aW1lLiAqLworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBheDg4MTd4X2V0aHRvb2xfb3BzID0geworCS5nZXRfZHJ2aW5mbwkJPSBheDg4MTd4X2dldF9kcnZpbmZvLAorCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAorCS5nZXRfbXNnbGV2ZWwJCT0gdXNibmV0X2dldF9tc2dsZXZlbCwKKwkuc2V0X21zZ2xldmVsCQk9IHVzYm5ldF9zZXRfbXNnbGV2ZWwsCisJLmdldF93b2wJCT0gYXg4ODE3eF9nZXRfd29sLAorCS5zZXRfd29sCQk9IGF4ODgxN3hfc2V0X3dvbCwKKwkuZ2V0X2VlcHJvbV9sZW4JCT0gYXg4ODE3eF9nZXRfZWVwcm9tX2xlbiwKKwkuZ2V0X2VlcHJvbQkJPSBheDg4MTd4X2dldF9lZXByb20sCisJLmdldF9zZXR0aW5ncwkJPSBheDg4MTd4X2dldF9zZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzCQk9IGF4ODgxN3hfc2V0X3NldHRpbmdzLAorfTsKKworc3RhdGljIGludCBheDg4MTd4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlpbnQgcmV0ID0gMDsKKwl2b2lkICpidWY7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBncGlvX2JpdHMgPSBkZXYtPmRyaXZlcl9pbmZvLT5kYXRhOworCXN0cnVjdCBheDg4MTd4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGF4ODgxN3hfZGF0YSAqKWRldi0+ZGF0YTsKKworCWdldF9lbmRwb2ludHMoZGV2LGludGYpOworCisJaWYgKChkYXRhLT5pbnRfdXJiID0gdXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwkJZGJnICgiJXM6IGNhbm5vdCBhbGxvY2F0ZSBpbnRlcnJ1cHQgVVJCIiwKKwkJCWRldi0+bmV0LT5uYW1lKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQxOworCX0KKwkKKwlpZiAoKGRhdGEtPmludF9idWYgPSBrbWFsbG9jKEFYX0lOVEVSUlVQVF9CVUZTSVpFLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgeworCQlkYmcgKCIlczogY2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgaW50ZXJydXB0IGJ1ZmZlciIsCisJCQlkZXYtPm5ldC0+bmFtZSk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0MTsKKwl9CisJbWVtc2V0KGRhdGEtPmludF9idWYsIDAsIEFYX0lOVEVSUlVQVF9CVUZTSVpFKTsKKworCXVzYl9maWxsX2ludF91cmIgKGRhdGEtPmludF91cmIsIGRldi0+dWRldiwKKwkJdXNiX3JjdmludHBpcGUgKGRldi0+dWRldiwgMSksCisJCWRhdGEtPmludF9idWYsIEFYX0lOVEVSUlVQVF9CVUZTSVpFLAorCQlheDg4MTd4X2ludGVycnVwdF9jb21wbGV0ZSwgZGV2LAorCQlkZXYtPnVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIID8gOCA6IDEwMCk7CisKKwlidWYgPSBrbWFsbG9jKEVUSF9BTEVOLCBHRlBfS0VSTkVMKTsKKwlpZighYnVmKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0MjsKKwl9CisKKwkvKiBUb2dnbGUgdGhlIEdQSU9zIGluIGEgbWFudWZhY3R1cmVyL21vZGVsIHNwZWNpZmljIHdheSAqLworCWZvciAoaSA9IDI7IGkgPj0gMDsgaS0tKSB7CisJCWlmICgocmV0ID0gYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfR1BJT1MsCisJCQkJCShncGlvX2JpdHMgPj4gKGkgKiA4KSkgJiAweGZmLCAwLCAwLAorCQkJCQlidWYpKSA8IDApCisJCQlnb3RvIG91dDM7CisJCW1zbGVlcCg1KTsKKwl9CisKKwlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX1JYX0NUTCwgMHg4MCwgMCwgMCwgYnVmKSkgPCAwKSB7CisJCWRiZygic2VuZCBBWF9DTURfV1JJVEVfUlhfQ1RMIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDM7CisJfQorCisJLyogR2V0IHRoZSBNQUMgYWRkcmVzcyAqLworCW1lbXNldChidWYsIDAsIEVUSF9BTEVOKTsKKwlpZiAoKHJldCA9IGF4ODgxN3hfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9OT0RFX0lELCAwLCAwLCA2LCBidWYpKSA8IDApIHsKKwkJZGJnKCJyZWFkIEFYX0NNRF9SRUFEX05PREVfSUQgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0MzsKKwl9CisJbWVtY3B5KGRldi0+bmV0LT5kZXZfYWRkciwgYnVmLCBFVEhfQUxFTik7CisKKwkvKiBHZXQgdGhlIFBIWSBpZCAqLworCWlmICgocmV0ID0gYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX1BIWV9JRCwgMCwgMCwgMiwgYnVmKSkgPCAwKSB7CisJCWRiZygiZXJyb3Igb24gcmVhZCBBWF9DTURfUkVBRF9QSFlfSUQ6ICUwMngiLCByZXQpOworCQlnb3RvIG91dDM7CisJfSBlbHNlIGlmIChyZXQgPCAyKSB7CisJCS8qIHRoaXMgc2hvdWxkIGFsd2F5cyByZXR1cm4gMiBieXRlcyAqLworCQlkYmcoIkFYX0NNRF9SRUFEX1BIWV9JRCByZXR1cm5lZCBsZXNzIHRoYW4gMiBieXRlczogcmV0PSUwMngiLCByZXQpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dDM7CisJfQorCisJLyogSW5pdGlhbGl6ZSBNSUkgc3RydWN0dXJlICovCisJZGV2LT5taWkuZGV2ID0gZGV2LT5uZXQ7CisJZGV2LT5taWkubWRpb19yZWFkID0gYXg4ODE3eF9tZGlvX3JlYWQ7CisJZGV2LT5taWkubWRpb193cml0ZSA9IGF4ODgxN3hfbWRpb193cml0ZTsKKwlkZXYtPm1paS5waHlfaWRfbWFzayA9IDB4M2Y7CisJZGV2LT5taWkucmVnX251bV9tYXNrID0gMHgxZjsKKwlkZXYtPm1paS5waHlfaWQgPSAqKCh1OCAqKWJ1ZiArIDEpOworCisJZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGF4ODgxN3hfc2V0X211bHRpY2FzdDsKKwlkZXYtPm5ldC0+ZXRodG9vbF9vcHMgPSAmYXg4ODE3eF9ldGh0b29sX29wczsKKworCWF4ODgxN3hfbWRpb193cml0ZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQk1DUiwKKwkJCWNwdV90b19sZTE2KEJNQ1JfUkVTRVQpKTsKKwlheDg4MTd4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSwKKwkJCWNwdV90b19sZTE2KEFEVkVSVElTRV9BTEwgfCBBRFZFUlRJU0VfQ1NNQSB8IDB4MDQwMCkpOworCW1paV9ud2F5X3Jlc3RhcnQoJmRldi0+bWlpKTsKKworCWlmKChyZXQgPSB1c2Jfc3VibWl0X3VyYihkYXRhLT5pbnRfdXJiLCBHRlBfS0VSTkVMKSkgPCAwKSB7CisJCWRiZygiRmFpbGVkIHRvIHN1Ym1pdCBpbnRlcnJ1cHQgVVJCOiAlMDJ4IiwgcmV0KTsKKwkJZ290byBvdXQyOworCX0KKworCXJldHVybiAwOworb3V0MzoKKwlrZnJlZShidWYpOworb3V0MjoKKwlrZnJlZShkYXRhLT5pbnRfYnVmKTsKK291dDE6CisJdXNiX2ZyZWVfdXJiKGRhdGEtPmludF91cmIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGF4ODgxN3hfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGF4ODgxN3hfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXg4ODE3eF9kYXRhICopZGV2LT5kYXRhOworCisJdXNiX2tpbGxfdXJiKGRhdGEtPmludF91cmIpOworCXVzYl9mcmVlX3VyYihkYXRhLT5pbnRfdXJiKTsKKwlrZnJlZShkYXRhLT5pbnRfYnVmKTsKK30KKworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBheDg4NzcyX2V0aHRvb2xfb3BzID0geworCS5nZXRfZHJ2aW5mbwkJPSBheDg4MTd4X2dldF9kcnZpbmZvLAorCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAorCS5nZXRfbXNnbGV2ZWwJCT0gdXNibmV0X2dldF9tc2dsZXZlbCwKKwkuc2V0X21zZ2xldmVsCQk9IHVzYm5ldF9zZXRfbXNnbGV2ZWwsCisJLmdldF93b2wJCT0gYXg4ODE3eF9nZXRfd29sLAorCS5zZXRfd29sCQk9IGF4ODgxN3hfc2V0X3dvbCwKKwkuZ2V0X2VlcHJvbV9sZW4JCT0gYXg4ODE3eF9nZXRfZWVwcm9tX2xlbiwKKwkuZ2V0X2VlcHJvbQkJPSBheDg4MTd4X2dldF9lZXByb20sCisJLmdldF9zZXR0aW5ncwkJPSBheDg4MTd4X2dldF9zZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzCQk9IGF4ODgxN3hfc2V0X3NldHRpbmdzLAorfTsKKworc3RhdGljIGludCBheDg4NzcyX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlpbnQgcmV0OworCXZvaWQgKmJ1ZjsKKwlzdHJ1Y3QgYXg4ODE3eF9kYXRhICpkYXRhID0gKHN0cnVjdCBheDg4MTd4X2RhdGEgKilkZXYtPmRhdGE7CisKKwlnZXRfZW5kcG9pbnRzKGRldixpbnRmKTsKKworCWlmICgoZGF0YS0+aW50X3VyYiA9IHVzYl9hbGxvY191cmIgKDAsIEdGUF9LRVJORUwpKSA9PSAwKSB7CisJCWRiZyAoIkNhbm5vdCBhbGxvY2F0ZSBpbnRlcnJ1cHQgVVJCIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0MTsKKwl9CisJCisJaWYgKChkYXRhLT5pbnRfYnVmID0ga21hbGxvYyhBWF9JTlRFUlJVUFRfQlVGU0laRSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwkJZGJnICgiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgaW50ZXJydXB0IGJ1ZmZlciIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDE7CisJfQorCW1lbXNldChkYXRhLT5pbnRfYnVmLCAwLCBBWF9JTlRFUlJVUFRfQlVGU0laRSk7CisKKwl1c2JfZmlsbF9pbnRfdXJiIChkYXRhLT5pbnRfdXJiLCBkZXYtPnVkZXYsCisJCXVzYl9yY3ZpbnRwaXBlIChkZXYtPnVkZXYsIDEpLAorCQlkYXRhLT5pbnRfYnVmLCBBWF9JTlRFUlJVUFRfQlVGU0laRSwKKwkJYXg4ODE3eF9pbnRlcnJ1cHRfY29tcGxldGUsIGRldiwKKwkJZGV2LT51ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCA/IDggOiAxMDApOworCisJYnVmID0ga21hbGxvYyg2LCBHRlBfS0VSTkVMKTsKKwlpZighYnVmKSB7CisJCWRiZyAoIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGJ1ZmZlciIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDI7CisJfQorCisJaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9HUElPUywKKwkJCQkgICAgIDB4MDBCMCwgMCwgMCwgYnVmKSkgPCAwKQorCQlnb3RvIG91dDM7CisKKwltc2xlZXAoNSk7CisJaWYgKChyZXQgPSBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TV19QSFlfU0VMRUNULCAweDAwMDEsIDAsIDAsIGJ1ZikpIDwgMCkgeworCQlkYmcoIlNlbGVjdCBQSFkgIzEgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0MzsKKwl9CisKKwlpZiAoKHJldCA9CisJICAgICBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TV19SRVNFVCwgQVhfU1dSRVNFVF9JUFBELCAwLCAwLCBidWYpKSA8IDApIHsKKwkJZGJnKCJGYWlsZWQgdG8gcG93ZXIgZG93biBpbnRlcm5hbCBQSFk6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQzOworCX0KKworCW1zbGVlcCgxNTApOworCWlmICgocmV0ID0KKwkgICAgIGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NXX1JFU0VULCBBWF9TV1JFU0VUX0NMRUFSLCAwLCAwLCBidWYpKSA8IDApIHsKKwkJZGJnKCJGYWlsZWQgdG8gcGVyZm9ybSBzb2Z0d2FyZSByZXNldDogJWQiLCByZXQpOworCQlnb3RvIG91dDM7CisJfQorCisJbXNsZWVwKDE1MCk7CisJaWYgKChyZXQgPQorCSAgICAgYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU1dfUkVTRVQsIEFYX1NXUkVTRVRfSVBSTCB8IEFYX1NXUkVTRVRfUFJMLCAwLCAwLCBidWYpKSA8IDApIHsKKwkJZGJnKCJGYWlsZWQgdG8gc2V0IEludGVybmFsL0V4dGVybmFsIFBIWSByZXNldCBjb250cm9sOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0MzsKKwl9CisKKwltc2xlZXAoMTUwKTsKKwlpZiAoKHJldCA9CisJICAgICBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9SWF9DVEwsIDB4MDAwMCwgMCwgMCwKKwkJCSAgICAgICBidWYpKSA8IDApIHsKKwkJZGJnKCJGYWlsZWQgdG8gcmVzZXQgUlhfQ1RMOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0MzsKKwl9CisKKwkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCisJbWVtc2V0KGJ1ZiwgMCwgRVRIX0FMRU4pOworCWlmICgocmV0ID0gYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYODg3NzJfQ01EX1JFQURfTk9ERV9JRCwgMCwgMCwgRVRIX0FMRU4sIGJ1ZikpIDwgMCkgeworCQlkYmcoIkZhaWxlZCB0byByZWFkIE1BQyBhZGRyZXNzOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0MzsKKwl9CisJbWVtY3B5KGRldi0+bmV0LT5kZXZfYWRkciwgYnVmLCBFVEhfQUxFTik7CisKKwlpZiAoKHJldCA9IGF4ODgxN3hfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NFVF9TV19NSUksIDAsIDAsIDAsIGJ1ZikpIDwgMCkgeworCQlkYmcoIkVuYWJsaW5nIHNvZnR3YXJlIE1JSSBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQzOworCX0KKworCWlmICgoKHJldCA9CisJICAgICAgYXg4ODE3eF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX01JSV9SRUcsIDB4MDAxMCwgMiwgMiwgYnVmKSkgPCAwKQorCSAgICB8fCAoKigodTE2ICopYnVmKSAhPSAweDAwM2IpKSB7CisJCWRiZygiUmVhZCBQSFkgcmVnaXN0ZXIgMiBtdXN0IGJlIDB4M2IwMDogJWQiLCByZXQpOworCQlnb3RvIG91dDM7CisJfQorCisJLyogSW5pdGlhbGl6ZSBNSUkgc3RydWN0dXJlICovCisJZGV2LT5taWkuZGV2ID0gZGV2LT5uZXQ7CisJZGV2LT5taWkubWRpb19yZWFkID0gYXg4ODE3eF9tZGlvX3JlYWQ7CisJZGV2LT5taWkubWRpb193cml0ZSA9IGF4ODgxN3hfbWRpb193cml0ZTsKKwlkZXYtPm1paS5waHlfaWRfbWFzayA9IDB4ZmY7CisJZGV2LT5taWkucmVnX251bV9tYXNrID0gMHhmZjsKKworCS8qIEdldCB0aGUgUEhZIGlkICovCisJaWYgKChyZXQgPSBheDg4MTd4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfUEhZX0lELCAwLCAwLCAyLCBidWYpKSA8IDApIHsKKwkJZGJnKCJFcnJvciByZWFkaW5nIFBIWSBJRDogJTAyeCIsIHJldCk7CisJCWdvdG8gb3V0MzsKKwl9IGVsc2UgaWYgKHJldCA8IDIpIHsKKwkJLyogdGhpcyBzaG91bGQgYWx3YXlzIHJldHVybiAyIGJ5dGVzICovCisJCWRiZygiQVhfQ01EX1JFQURfUEhZX0lEIHJldHVybmVkIGxlc3MgdGhhbiAyIGJ5dGVzOiByZXQ9JTAyeCIsCisJCSAgICByZXQpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dDM7CisJfQorCWRldi0+bWlpLnBoeV9pZCA9ICooKHU4ICopYnVmICsgMSk7CisKKwlpZiAoKHJldCA9CisJICAgICBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TV19SRVNFVCwgQVhfU1dSRVNFVF9QUkwsIDAsIDAsIGJ1ZikpIDwgMCkgeworCQlkYmcoIlNldCBleHRlcm5hbCBQSFkgcmVzZXQgcGluIGxldmVsOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0MzsKKwl9CisJbXNsZWVwKDE1MCk7CisJaWYgKChyZXQgPQorCSAgICAgYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU1dfUkVTRVQsIEFYX1NXUkVTRVRfSVBSTCB8IEFYX1NXUkVTRVRfUFJMLCAwLCAwLCBidWYpKSA8IDApIHsKKwkJZGJnKCJTZXQgSW50ZXJuYWwvRXh0ZXJuYWwgUEhZIHJlc2V0IGNvbnRyb2w6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQzOworCX0KKwltc2xlZXAoMTUwKTsKKworCisJZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGF4ODgxN3hfc2V0X211bHRpY2FzdDsKKwlkZXYtPm5ldC0+ZXRodG9vbF9vcHMgPSAmYXg4ODc3Ml9ldGh0b29sX29wczsKKworCWF4ODgxN3hfbWRpb193cml0ZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQk1DUiwKKwkJCWNwdV90b19sZTE2KEJNQ1JfUkVTRVQpKTsKKwlheDg4MTd4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSwKKwkJCWNwdV90b19sZTE2KEFEVkVSVElTRV9BTEwgfCBBRFZFUlRJU0VfQ1NNQSkpOworCW1paV9ud2F5X3Jlc3RhcnQoJmRldi0+bWlpKTsKKworCWlmICgocmV0ID0gYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfTUVESVVNX01PREUsIDB4MDMzNiwgMCwgMCwgYnVmKSkgPCAwKSB7CisJCWRiZygiV3JpdGUgbWVkaXVtIG1vZGUgcmVnaXN0ZXI6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQzOworCX0KKworCWlmICgocmV0ID0gYXg4ODE3eF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfSVBHMCwgQVg4ODc3Ml9JUEcwX0RFRkFVTFQgfCBBWDg4NzcyX0lQRzFfREVGQVVMVCxBWDg4NzcyX0lQRzJfREVGQVVMVCwgMCwgYnVmKSkgPCAwKSB7CisJCWRiZygiV3JpdGUgSVBHLElQRzEsSVBHMiBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQzOworCX0KKwlpZiAoKHJldCA9CisJICAgICBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfSFdfTUlJLCAwLCAwLCAwLCAmYnVmKSkgPCAwKSB7CisJCWRiZygiRmFpbGVkIHRvIHNldCBoYXJkd2FyZSBNSUk6ICUwMngiLCByZXQpOworCQlnb3RvIG91dDM7CisJfQorCisJLyogU2V0IFJYX0NUTCB0byBkZWZhdWx0IHZhbHVlcyB3aXRoIDJrIGJ1ZmZlciwgYW5kIGVuYWJsZSBjYWN0dXMgKi8KKwlpZiAoKHJldCA9CisJICAgICBheDg4MTd4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9SWF9DVEwsIDB4MDA4OCwgMCwgMCwKKwkJCSAgICAgICBidWYpKSA8IDApIHsKKwkJZGJnKCJSZXNldCBSWF9DVEwgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0MzsKKwl9CisKKwlpZigocmV0ID0gdXNiX3N1Ym1pdF91cmIoZGF0YS0+aW50X3VyYiwgR0ZQX0tFUk5FTCkpIDwgMCkgeworCQlkYmcoIkZhaWxlZCB0byBzdWJtaXQgaW50ZXJydXB0IFVSQjogJTAyeCIsIHJldCk7CisJCWdvdG8gb3V0MzsKKwl9CisKKwlrZnJlZShidWYpOworCisJcmV0dXJuIDA7CisKK291dDM6CisJa2ZyZWUoYnVmKTsKK291dDI6CisJa2ZyZWUoZGF0YS0+aW50X2J1Zik7CitvdXQxOgorCXVzYl9mcmVlX3VyYihkYXRhLT5pbnRfdXJiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXg4ODc3Ml9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJdTMyICpoZWFkZXI7CisJY2hhciAqcGFja2V0OworCXN0cnVjdCBza19idWZmICpheF9za2I7CisJdTE2IHNpemU7CisKKwloZWFkZXIgPSAodTMyICopIHNrYi0+ZGF0YTsKKwlsZTMyX3RvX2NwdXMoaGVhZGVyKTsKKwlwYWNrZXQgPSAoY2hhciAqKShoZWFkZXIgKyAxKTsKKworCXNrYl9wdWxsKHNrYiwgNCk7CisKKwl3aGlsZSAoc2tiLT5sZW4gPiAwKSB7CisJCWlmICgoc2hvcnQpKCpoZWFkZXIgJiAweDAwMDBmZmZmKSAhPQorCQkgICAgfigoc2hvcnQpKCgqaGVhZGVyICYgMHhmZmZmMDAwMCkgPj4gMTYpKSkgeworCQkJZGV2ZGJnKGRldiwiaGVhZGVyIGxlbmd0aCBkYXRhIGlzIGVycm9yIik7CisJCX0KKwkJLyogZ2V0IHRoZSBwYWNrZXQgbGVuZ3RoICovCisJCXNpemUgPSAodTE2KSAoKmhlYWRlciAmIDB4MDAwMGZmZmYpOworCisJCWlmICgoc2tiLT5sZW4pIC0gKChzaXplICsgMSkgJiAweGZmZmUpID09IDApCisJCQlyZXR1cm4gMjsKKwkJaWYgKHNpemUgPiBFVEhfRlJBTUVfTEVOKSB7CisJCQlkZXZkYmcoZGV2LCJpbnZhbGlkIHJ4IGxlbmd0aCAlZCIsIHNpemUpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYXhfc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CisJCWlmIChheF9za2IpIHsKKwkJCWF4X3NrYi0+bGVuID0gc2l6ZTsKKwkJCWF4X3NrYi0+ZGF0YSA9IHBhY2tldDsKKwkJCWF4X3NrYi0+dGFpbCA9IHBhY2tldCArIHNpemU7CisJCQlza2JfcmV0dXJuKGRldiwgYXhfc2tiKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAwOworCQl9CisKKwkJc2tiX3B1bGwoc2tiLCAoc2l6ZSArIDEpICYgMHhmZmZlKTsKKworCQlpZiAoc2tiLT5sZW4gPT0gMCkKKwkJCWJyZWFrOworCisJCWhlYWRlciA9ICh1MzIgKikgc2tiLT5kYXRhOworCQlsZTMyX3RvX2NwdXMoaGVhZGVyKTsKKwkJcGFja2V0ID0gKGNoYXIgKikoaGVhZGVyICsgMSk7CisJCXNrYl9wdWxsKHNrYiwgNCk7CisJfQorCisJaWYgKHNrYi0+bGVuIDwgMCkgeworCQlkZXZkYmcoZGV2LCJpbnZhbGlkIHJ4IGxlbmd0aCAlZCIsIHNrYi0+bGVuKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmF4ODg3NzJfdHhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlpbnQgZmxhZ3MpCit7CisJaW50IHBhZGxlbjsKKwlpbnQgaGVhZHJvb20gPSBza2JfaGVhZHJvb20oc2tiKTsKKwlpbnQgdGFpbHJvb20gPSBza2JfdGFpbHJvb20oc2tiKTsKKwl1MzIgKnBhY2tldF9sZW47CisJdTMyICpwYWRieXRlc19wdHI7CisKKwlwYWRsZW4gPSAoKHNrYi0+bGVuICsgNCkgJSA1MTIpID8gMCA6IDQ7CisKKwlpZiAoKCFza2JfY2xvbmVkKHNrYikpCisJICAgICYmICgoaGVhZHJvb20gKyB0YWlscm9vbSkgPj0gKDQgKyBwYWRsZW4pKSkgeworCQlpZiAoKGhlYWRyb29tIDwgNCkgfHwgKHRhaWxyb29tIDwgcGFkbGVuKSkgeworCQkJc2tiLT5kYXRhID0gbWVtbW92ZShza2ItPmhlYWQgKyA0LCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJCXNrYi0+dGFpbCA9IHNrYi0+ZGF0YSArIHNrYi0+bGVuOworCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjI7CisJCXNrYjIgPSBza2JfY29weV9leHBhbmQoc2tiLCA0LCBwYWRsZW4sIGZsYWdzKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJc2tiID0gc2tiMjsKKwkJaWYgKCFza2IpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwYWNrZXRfbGVuID0gKHUzMiAqKSBza2JfcHVzaChza2IsIDQpOworCisJcGFja2V0X2xlbiA9ICh1MzIgKikgc2tiLT5kYXRhOworCSpwYWNrZXRfbGVuID0gKCgoc2tiLT5sZW4gLSA0KSBeIDB4MDAwMGZmZmYpIDw8IDE2KSArIChza2ItPmxlbiAtIDQpOworCisJaWYgKChza2ItPmxlbiAlIDUxMikgPT0gMCkgeworCQlwYWRieXRlc19wdHIgPSAodTMyICopIHNrYi0+dGFpbDsKKwkJKnBhZGJ5dGVzX3B0ciA9IDB4ZmZmZjAwMDA7CisJCXNrYl9wdXQoc2tiLCBwYWRsZW4pOworCX0KKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODgxN3hfaW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPSAiQVNJWCBBWDg4MTd4IFVTQiAyLjAgRXRoZXJuZXQiLAorCS5iaW5kID0gYXg4ODE3eF9iaW5kLAorCS51bmJpbmQgPSBheDg4MTd4X3VuYmluZCwKKwkuZmxhZ3MgPSAgRkxBR19FVEhFUiwKKwkuZGF0YSA9IDB4MDAxMzAxMDMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGRsaW5rX2R1Yl9lMTAwX2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0gIkRMaW5rIERVQi1FMTAwIFVTQiBFdGhlcm5ldCIsCisJLmJpbmQgPSBheDg4MTd4X2JpbmQsCisJLnVuYmluZCA9IGF4ODgxN3hfdW5iaW5kLAorCS5mbGFncyA9ICBGTEFHX0VUSEVSLAorCS5kYXRhID0gMHgwMDlmOWQ5ZiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gbmV0Z2Vhcl9mYTEyMF9pbmZvID0geworCS5kZXNjcmlwdGlvbiA9ICJOZXRnZWFyIEZBLTEyMCBVU0IgRXRoZXJuZXQiLAorCS5iaW5kID0gYXg4ODE3eF9iaW5kLAorCS51bmJpbmQgPSBheDg4MTd4X3VuYmluZCwKKwkuZmxhZ3MgPSAgRkxBR19FVEhFUiwKKwkuZGF0YSA9IDB4MDAxMzAxMDMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGhhd2tpbmdfdWYyMDBfaW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPSAiSGF3a2luZyBVRjIwMCBVU0IgRXRoZXJuZXQiLAorCS5iaW5kID0gYXg4ODE3eF9iaW5kLAorCS51bmJpbmQgPSBheDg4MTd4X3VuYmluZCwKKwkuZmxhZ3MgPSAgRkxBR19FVEhFUiwKKwkuZGF0YSA9IDB4MDAxZjFkMWYsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODg3NzJfaW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPSAiQVNJWCBBWDg4NzcyIFVTQiAyLjAgRXRoZXJuZXQiLAorCS5iaW5kID0gYXg4ODc3Ml9iaW5kLAorCS51bmJpbmQgPSBheDg4MTd4X3VuYmluZCwKKwkuZmxhZ3MgPSBGTEFHX0VUSEVSIHwgRkxBR19GUkFNSU5HX0FYLAorCS5yeF9maXh1cCA9IGF4ODg3NzJfcnhfZml4dXAsCisJLnR4X2ZpeHVwID0gYXg4ODc3Ml90eF9maXh1cCwKKwkuZGF0YSA9IDB4MDAxMzAxMDMsCit9OworCisjZW5kaWYgLyogQ09ORklHX1VTQl9BWDg4MTdYICovCisKKworDAorI2lmZGVmCUNPTkZJR19VU0JfQkVMS0lOCisjZGVmaW5lCUhBVkVfSEFSRFdBUkUKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogQmVsa2luIEY1VTEwNCAuLi4gdHdvIE5ldENoaXAgMjI4MCBkZXZpY2VzICsgQXRtZWwgbWljcm9jb250cm9sbGVyCisgKgorICogLi4uIGFsc28gdHdvIGVURUsgZGVzaWducywgaW5jbHVkaW5nIG9uZSBzb2xkIGFzICJBZHZhbmNlIFVTQk5FVCIKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCWJlbGtpbl9pbmZvID0geworCS5kZXNjcmlwdGlvbiA9CSJCZWxraW4sIGVURUssIG9yIGNvbXBhdGlibGUiLAorfTsKKworI2VuZGlmCS8qIENPTkZJR19VU0JfQkVMS0lOICovCisKKworDAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogQ29tbXVuaWNhdGlvbnMgRGV2aWNlIENsYXNzIGRlY2xhcmF0aW9ucy4KKyAqIFVzZWQgYnkgQ0RDIEV0aGVybmV0LCBhbmQgc29tZSBDREMgdmFyaWFudHMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYJQ09ORklHX1VTQl9DRENFVEhFUgorI2RlZmluZSBORUVEX0dFTkVSSUNfQ0RDCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19VU0JfWkFVUlVTCisvKiBFdGhlcm5ldCB2YXJpYW50IHVzZXMgZnVua3kgZnJhbWluZywgYnJva2VuIGV0aGVybmV0IGFkZHJlc3NpbmcgKi8KKyNkZWZpbmUgTkVFRF9HRU5FUklDX0NEQworI2VuZGlmCisKKyNpZmRlZglDT05GSUdfVVNCX1JORElTCisvKiBBQ00gdmFyaWFudCB1c2VzIGV2ZW4gZnVua2llciBmcmFtaW5nLCBjb21wbGV4IGNvbnRyb2wgUlBDIHNjaGVtZSAqLworI2RlZmluZSBORUVEX0dFTkVSSUNfQ0RDCisjZW5kaWYKKworCisjaWZkZWYJTkVFRF9HRU5FUklDX0NEQworCisjaW5jbHVkZSA8bGludXgvdXNiX2NkYy5oPgorCitzdHJ1Y3QgY2RjX3N0YXRlIHsKKwlzdHJ1Y3QgdXNiX2NkY19oZWFkZXJfZGVzYwkqaGVhZGVyOworCXN0cnVjdCB1c2JfY2RjX3VuaW9uX2Rlc2MJKnU7CisJc3RydWN0IHVzYl9jZGNfZXRoZXJfZGVzYwkqZXRoZXI7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UJCSpjb250cm9sOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlCQkqZGF0YTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB1c2JuZXRfZHJpdmVyOworCisvKgorICogcHJvYmVzIGNvbnRyb2wgaW50ZXJmYWNlLCBjbGFpbXMgZGF0YSBpbnRlcmZhY2UsIGNvbGxlY3RzIHRoZSBidWxrCisgKiBlbmRwb2ludHMsIGFjdGl2YXRlcyBkYXRhIGludGVyZmFjZSAoaWYgbmVlZGVkKSwgbWF5YmUgc2V0cyBNVFUuCisgKiBhbGwgcHVyZSBjZGMsIGV4Y2VwdCBmb3IgY2VydGFpbiBmaXJtd2FyZSB3b3JrYXJvdW5kcy4KKyAqLworc3RhdGljIGludCBnZW5lcmljX2NkY19iaW5kIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXU4CQkJCSpidWYgPSBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZXh0cmE7CisJaW50CQkJCWxlbiA9IGludGYtPmN1cl9hbHRzZXR0aW5nLT5leHRyYWxlbjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yCSpkOworCXN0cnVjdCBjZGNfc3RhdGUJCSppbmZvID0gKHZvaWQgKikgJmRldi0+ZGF0YTsKKwlpbnQJCQkJc3RhdHVzOworCWludAkJCQlybmRpczsKKworCWlmIChzaXplb2YgZGV2LT5kYXRhIDwgc2l6ZW9mICppbmZvKQorCQlyZXR1cm4gLUVET007CisKKwkvKiBleHBlY3Qgc3RyaWN0IHNwZWMgY29uZm9ybWFuY2UgZm9yIHRoZSBkZXNjcmlwdG9ycywgYnV0CisJICogY29wZSB3aXRoIGZpcm13YXJlIHdoaWNoIHN0b3JlcyB0aGVtIGluIHRoZSB3cm9uZyBwbGFjZQorCSAqLworCWlmIChsZW4gPT0gMCAmJiBkZXYtPnVkZXYtPmFjdGNvbmZpZy0+ZXh0cmFsZW4pIHsKKwkJLyogTW90b3JvbGEgU0I0MTAwIChhbmQgb3RoZXJzOiBCcmFkIEhhcmRzIHNheXMgaXQncworCQkgKiBmcm9tIGEgQnJvYWRjb20gZGVzaWduKSBwdXQgQ0RDIGRlc2NyaXB0b3JzIGhlcmUKKwkJICovCisJCWJ1ZiA9IGRldi0+dWRldi0+YWN0Y29uZmlnLT5leHRyYTsKKwkJbGVuID0gZGV2LT51ZGV2LT5hY3Rjb25maWctPmV4dHJhbGVuOworCQlpZiAobGVuKQorCQkJZGV2X2RiZyAoJmludGYtPmRldiwKKwkJCQkiQ0RDIGRlc2NyaXB0b3JzIG9uIGNvbmZpZ1xuIik7CisJfQorCisJLyogdGhpcyBhc3N1bWVzIHRoYXQgaWYgdGhlcmUncyBhIG5vbi1STkRJUyB2ZW5kb3IgdmFyaWFudAorCSAqIG9mIGNkYy1hY20sIGl0J2xsIGZhaWwgUk5ESVMgcmVxdWVzdHMgY2xlYW5seS4KKwkgKi8KKwlybmRpcyA9IChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wgPT0gMHhmZik7CisKKwltZW1zZXQgKGluZm8sIDAsIHNpemVvZiAqaW5mbyk7CisJaW5mby0+Y29udHJvbCA9IGludGY7CisJd2hpbGUgKGxlbiA+IDMpIHsKKwkJaWYgKGJ1ZiBbMV0gIT0gVVNCX0RUX0NTX0lOVEVSRkFDRSkKKwkJCWdvdG8gbmV4dF9kZXNjOworCisJCS8qIHVzZSBiRGVzY3JpcHRvclN1YlR5cGUgdG8gaWRlbnRpZnkgdGhlIENEQyBkZXNjcmlwdG9ycy4KKwkJICogV2UgZXhwZWN0IGRldmljZXMgd2l0aCBDREMgaGVhZGVyIGFuZCB1bmlvbiBkZXNjcmlwdG9ycy4KKwkJICogRm9yIENEQyBFdGhlcm5ldCB3ZSBuZWVkIHRoZSBldGhlcm5ldCBkZXNjcmlwdG9yLgorCQkgKiBGb3IgUk5ESVMsIGlnbm9yZSB0d28gKHBvaW50bGVzcykgQ0RDIG1vZGVtIGRlc2NyaXB0b3JzCisJCSAqIGluIGZhdm9yIG9mIGEgY29tcGxpY2F0ZWQgT0lELWJhc2VkIFJQQyBzY2hlbWUgZG9pbmcgd2hhdAorCQkgKiBDREMgRXRoZXJuZXQgYWNoaWV2ZXMgd2l0aCBhIHNpbXBsZSBkZXNjcmlwdG9yLgorCQkgKi8KKwkJc3dpdGNoIChidWYgWzJdKSB7CisJCWNhc2UgVVNCX0NEQ19IRUFERVJfVFlQRToKKwkJCWlmIChpbmZvLT5oZWFkZXIpIHsKKwkJCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAiZXh0cmEgQ0RDIGhlYWRlclxuIik7CisJCQkJZ290byBiYWRfZGVzYzsKKwkJCX0KKwkJCWluZm8tPmhlYWRlciA9ICh2b2lkICopIGJ1ZjsKKwkJCWlmIChpbmZvLT5oZWFkZXItPmJMZW5ndGggIT0gc2l6ZW9mICppbmZvLT5oZWFkZXIpIHsKKwkJCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAiQ0RDIGhlYWRlciBsZW4gJXVcbiIsCisJCQkJCWluZm8tPmhlYWRlci0+Ykxlbmd0aCk7CisJCQkJZ290byBiYWRfZGVzYzsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFVTQl9DRENfVU5JT05fVFlQRToKKwkJCWlmIChpbmZvLT51KSB7CisJCQkJZGV2X2RiZyAoJmludGYtPmRldiwgImV4dHJhIENEQyB1bmlvblxuIik7CisJCQkJZ290byBiYWRfZGVzYzsKKwkJCX0KKwkJCWluZm8tPnUgPSAodm9pZCAqKSBidWY7CisJCQlpZiAoaW5mby0+dS0+Ykxlbmd0aCAhPSBzaXplb2YgKmluZm8tPnUpIHsKKwkJCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAiQ0RDIHVuaW9uIGxlbiAldVxuIiwKKwkJCQkJaW5mby0+dS0+Ykxlbmd0aCk7CisJCQkJZ290byBiYWRfZGVzYzsKKwkJCX0KKworCQkJLyogd2UgbmVlZCBhIG1hc3Rlci9jb250cm9sIGludGVyZmFjZSAod2hhdCB3ZSdyZQorCQkJICogcHJvYmVkIHdpdGgpIGFuZCBhIHNsYXZlL2RhdGEgaW50ZXJmYWNlOyB1bmlvbgorCQkJICogZGVzY3JpcHRvcnMgc29ydCB0aGlzIGFsbCBvdXQuCisJCQkgKi8KKwkJCWluZm8tPmNvbnRyb2wgPSB1c2JfaWZudW1fdG9faWYoZGV2LT51ZGV2LAorCQkJCQkJaW5mby0+dS0+Yk1hc3RlckludGVyZmFjZTApOworCQkJaW5mby0+ZGF0YSA9IHVzYl9pZm51bV90b19pZihkZXYtPnVkZXYsCisJCQkJCQlpbmZvLT51LT5iU2xhdmVJbnRlcmZhY2UwKTsKKwkJCWlmICghaW5mby0+Y29udHJvbCB8fCAhaW5mby0+ZGF0YSkgeworCQkJCWRldl9kYmcgKCZpbnRmLT5kZXYsCisJCQkJCSJtYXN0ZXIgIyV1LyVwIHNsYXZlICMldS8lcFxuIiwKKwkJCQkJaW5mby0+dS0+Yk1hc3RlckludGVyZmFjZTAsCisJCQkJCWluZm8tPmNvbnRyb2wsCisJCQkJCWluZm8tPnUtPmJTbGF2ZUludGVyZmFjZTAsCisJCQkJCWluZm8tPmRhdGEpOworCQkJCWdvdG8gYmFkX2Rlc2M7CisJCQl9CisJCQlpZiAoaW5mby0+Y29udHJvbCAhPSBpbnRmKSB7CisJCQkJZGV2X2RiZyAoJmludGYtPmRldiwgImJvZ3VzIENEQyBVbmlvblxuIik7CisJCQkJLyogQW1iaXQgVVNCIENhYmxlIE1vZGVtIChhbmQgbWF5YmUgb3RoZXJzKQorCQkJCSAqIGludGVyY2hhbmdlcyBtYXN0ZXIgYW5kIHNsYXZlIGludGVyZmFjZS4KKwkJCQkgKi8KKwkJCQlpZiAoaW5mby0+ZGF0YSA9PSBpbnRmKSB7CisJCQkJCWluZm8tPmRhdGEgPSBpbmZvLT5jb250cm9sOworCQkJCQlpbmZvLT5jb250cm9sID0gaW50ZjsKKwkJCQl9IGVsc2UKKwkJCQkJZ290byBiYWRfZGVzYzsKKwkJCX0KKworCQkJLyogYSBkYXRhIGludGVyZmFjZSBhbHRzZXR0aW5nIGRvZXMgdGhlIHJlYWwgaS9vICovCisJCQlkID0gJmluZm8tPmRhdGEtPmN1cl9hbHRzZXR0aW5nLT5kZXNjOworCQkJaWYgKGQtPmJJbnRlcmZhY2VDbGFzcyAhPSBVU0JfQ0xBU1NfQ0RDX0RBVEEpIHsKKwkJCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAic2xhdmUgY2xhc3MgJXVcbiIsCisJCQkJCWQtPmJJbnRlcmZhY2VDbGFzcyk7CisJCQkJZ290byBiYWRfZGVzYzsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFVTQl9DRENfRVRIRVJORVRfVFlQRToKKwkJCWlmIChpbmZvLT5ldGhlcikgeworCQkJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJleHRyYSBDREMgZXRoZXJcbiIpOworCQkJCWdvdG8gYmFkX2Rlc2M7CisJCQl9CisJCQlpbmZvLT5ldGhlciA9ICh2b2lkICopIGJ1ZjsKKwkJCWlmIChpbmZvLT5ldGhlci0+Ykxlbmd0aCAhPSBzaXplb2YgKmluZm8tPmV0aGVyKSB7CisJCQkJZGV2X2RiZyAoJmludGYtPmRldiwgIkNEQyBldGhlciBsZW4gJXVcbiIsCisJCQkJCWluZm8tPnUtPmJMZW5ndGgpOworCQkJCWdvdG8gYmFkX2Rlc2M7CisJCQl9CisJCQlkZXYtPm5ldC0+bXR1ID0gbGUxNl90b19jcHVwICgKKwkJCQkJCSZpbmZvLT5ldGhlci0+d01heFNlZ21lbnRTaXplKQorCQkJCQktIEVUSF9ITEVOOworCQkJLyogYmVjYXVzZSBvZiBaYXVydXMsIHdlIG1heSBiZSBpZ25vcmluZyB0aGUgaG9zdAorCQkJICogc2lkZSBsaW5rIGFkZHJlc3Mgd2Ugd2VyZSBnaXZlbi4KKwkJCSAqLworCQkJYnJlYWs7CisJCX0KK25leHRfZGVzYzoKKwkJbGVuIC09IGJ1ZiBbMF07CS8qIGJMZW5ndGggKi8KKwkJYnVmICs9IGJ1ZiBbMF07CisJfQorCisJaWYgKCFpbmZvLT5oZWFkZXIgfHwgIWluZm8tPnUgfHwgKCFybmRpcyAmJiAhaW5mby0+ZXRoZXIpKSB7CisJCWRldl9kYmcgKCZpbnRmLT5kZXYsICJtaXNzaW5nIGNkYyAlcyVzJXNkZXNjcmlwdG9yXG4iLAorCQkJaW5mby0+aGVhZGVyID8gIiIgOiAiaGVhZGVyICIsCisJCQlpbmZvLT51ID8gIiIgOiAidW5pb24gIiwKKwkJCWluZm8tPmV0aGVyID8gIiIgOiAiZXRoZXIgIik7CisJCWdvdG8gYmFkX2Rlc2M7CisJfQorCisJLyogY2xhaW0gZGF0YSBpbnRlcmZhY2UgYW5kIHNldCBpdCB1cCAuLi4gd2l0aCBzaWRlIGVmZmVjdHMuCisJICogbmV0d29yayB0cmFmZmljIGNhbid0IGZsb3cgdW50aWwgYW4gYWx0c2V0dGluZyBpcyBlbmFibGVkLgorCSAqLworCXN0YXR1cyA9IHVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlICgmdXNibmV0X2RyaXZlciwgaW5mby0+ZGF0YSwgZGV2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKwlzdGF0dXMgPSBnZXRfZW5kcG9pbnRzIChkZXYsIGluZm8tPmRhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCS8qIGVuc3VyZSBpbW1lZGlhdGUgZXhpdCBmcm9tIHVzYm5ldF9kaXNjb25uZWN0ICovCisJCXVzYl9zZXRfaW50ZmRhdGEoaW5mby0+ZGF0YSwgTlVMTCk7CisJCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UgKCZ1c2JuZXRfZHJpdmVyLCBpbmZvLT5kYXRhKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkvKiBzdGF0dXMgZW5kcG9pbnQ6IG9wdGlvbmFsIGZvciBDREMgRXRoZXJuZXQsIG5vdCBSTkRJUyAob3IgQUNNKSAqLworCWRldi0+c3RhdHVzID0gTlVMTDsKKwlpZiAoaW5mby0+Y29udHJvbC0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50cyA9PSAxKSB7CisJCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgkqZGVzYzsKKworCQlkZXYtPnN0YXR1cyA9ICZpbmZvLT5jb250cm9sLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnQgWzBdOworCQlkZXNjID0gJmRldi0+c3RhdHVzLT5kZXNjOworCQlpZiAoZGVzYy0+Ym1BdHRyaWJ1dGVzICE9IFVTQl9FTkRQT0lOVF9YRkVSX0lOVAorCQkJCXx8ICEoZGVzYy0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pCisJCQkJfHwgKGxlMTZfdG9fY3B1KGRlc2MtPndNYXhQYWNrZXRTaXplKQorCQkJCQk8IHNpemVvZiAoc3RydWN0IHVzYl9jZGNfbm90aWZpY2F0aW9uKSkKKwkJCQl8fCAhZGVzYy0+YkludGVydmFsKSB7CisJCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAiYmFkIG5vdGlmaWNhdGlvbiBlbmRwb2ludFxuIik7CisJCQlkZXYtPnN0YXR1cyA9IE5VTEw7CisJCX0KKwl9CisJaWYgKHJuZGlzICYmICFkZXYtPnN0YXR1cykgeworCQlkZXZfZGJnICgmaW50Zi0+ZGV2LCAibWlzc2luZyBSTkRJUyBzdGF0dXMgZW5kcG9pbnRcbiIpOworCQl1c2Jfc2V0X2ludGZkYXRhKGluZm8tPmRhdGEsIE5VTEwpOworCQl1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlICgmdXNibmV0X2RyaXZlciwgaW5mby0+ZGF0YSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlyZXR1cm4gMDsKKworYmFkX2Rlc2M6CisJZGV2X2luZm8gKCZkZXYtPnVkZXYtPmRldiwgImJhZCBDREMgZGVzY3JpcHRvcnNcbiIpOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZCBjZGNfdW5iaW5kIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBjZGNfc3RhdGUJCSppbmZvID0gKHZvaWQgKikgJmRldi0+ZGF0YTsKKworCS8qIGRpc2Nvbm5lY3QgbWFzdGVyIC0tPiBkaXNjb25uZWN0IHNsYXZlICovCisJaWYgKGludGYgPT0gaW5mby0+Y29udHJvbCAmJiBpbmZvLT5kYXRhKSB7CisJCS8qIGVuc3VyZSBpbW1lZGlhdGUgZXhpdCBmcm9tIHVzYm5ldF9kaXNjb25uZWN0ICovCisJCXVzYl9zZXRfaW50ZmRhdGEoaW5mby0+ZGF0YSwgTlVMTCk7CisJCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UgKCZ1c2JuZXRfZHJpdmVyLCBpbmZvLT5kYXRhKTsKKwkJaW5mby0+ZGF0YSA9IE5VTEw7CisJfQorCisJLyogYW5kIHZpY2UgdmVyc2EgKGp1c3QgaW4gY2FzZSkgKi8KKwllbHNlIGlmIChpbnRmID09IGluZm8tPmRhdGEgJiYgaW5mby0+Y29udHJvbCkgeworCQkvKiBlbnN1cmUgaW1tZWRpYXRlIGV4aXQgZnJvbSB1c2JuZXRfZGlzY29ubmVjdCAqLworCQl1c2Jfc2V0X2ludGZkYXRhKGluZm8tPmNvbnRyb2wsIE5VTEwpOworCQl1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlICgmdXNibmV0X2RyaXZlciwgaW5mby0+Y29udHJvbCk7CisJCWluZm8tPmNvbnRyb2wgPSBOVUxMOworCX0KK30KKworCitzdGF0aWMgdm9pZCBkdW1wc3BlZWQgKHN0cnVjdCB1c2JuZXQgKmRldiwgX19sZTMyICpzcGVlZHMpCit7CisJaWYgKG5ldGlmX21zZ190aW1lciAoZGV2KSkKKwkJZGV2aW5mbyAoZGV2LCAibGluayBzcGVlZHM6ICV1IGticHMgdXAsICV1IGticHMgZG93biIsCisJCQlfX2xlMzJfdG9fY3B1KHNwZWVkc1swXSkgLyAxMDAwLAorCQlfX2xlMzJfdG9fY3B1KHNwZWVkc1sxXSkgLyAxMDAwKTsKK30KKworc3RhdGljIHZvaWQgY2RjX3N0YXR1cyAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9jZGNfbm90aWZpY2F0aW9uCSpldmVudDsKKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPCBzaXplb2YgKmV2ZW50KQorCQlyZXR1cm47CisJCisJLyogU1BFRURfQ0hBTkdFIGNhbiBnZXQgc3BsaXQgaW50byB0d28gOC1ieXRlIHBhY2tldHMgKi8KKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0IChFVkVOVF9TVFNfU1BMSVQsICZkZXYtPmZsYWdzKSkgeworCQlkdW1wc3BlZWQgKGRldiwgKF9fbGUzMiAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCXJldHVybjsKKwl9CisKKwlldmVudCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN3aXRjaCAoZXZlbnQtPmJOb3RpZmljYXRpb25UeXBlKSB7CisJY2FzZSBVU0JfQ0RDX05PVElGWV9ORVRXT1JLX0NPTk5FQ1RJT046CisJCWlmIChuZXRpZl9tc2dfdGltZXIgKGRldikpCisJCQlkZXZkYmcgKGRldiwgIkNEQzogY2FycmllciAlcyIsCisJCQkJCWV2ZW50LT53VmFsdWUgPyAib24iIDogIm9mZiIpOworCQlpZiAoZXZlbnQtPndWYWx1ZSkKKwkJCW5ldGlmX2NhcnJpZXJfb24oZGV2LT5uZXQpOworCQllbHNlCisJCQluZXRpZl9jYXJyaWVyX29mZihkZXYtPm5ldCk7CisJCWJyZWFrOworCWNhc2UgVVNCX0NEQ19OT1RJRllfU1BFRURfQ0hBTkdFOgkvKiB0eC9yeCByYXRlcyAqLworCQlpZiAobmV0aWZfbXNnX3RpbWVyIChkZXYpKQorCQkJZGV2ZGJnIChkZXYsICJDREM6IHNwZWVkIGNoYW5nZSAobGVuICVkKSIsCisJCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCWlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0gKHNpemVvZiAqZXZlbnQgKyA4KSkKKwkJCXNldF9iaXQgKEVWRU5UX1NUU19TUExJVCwgJmRldi0+ZmxhZ3MpOworCQllbHNlCisJCQlkdW1wc3BlZWQgKGRldiwgKF9fbGUzMiAqKSAmZXZlbnRbMV0pOworCQlicmVhazsKKwkvLyBjYXNlIFVTQl9DRENfTk9USUZZX1JFU1BPTlNFX0FWQUlMQUJMRToJLyogUk5ESVM7IG9yIHVuc29saWNpdGVkICovCisJZGVmYXVsdDoKKwkJZGV2ZXJyIChkZXYsICJDREM6IHVuZXhwZWN0ZWQgbm90aWZpY2F0aW9uICUwMnghIiwKKwkJCQkgZXZlbnQtPmJOb3RpZmljYXRpb25UeXBlKTsKKwkJYnJlYWs7CisJfQorfQorCisjZW5kaWYJLyogTkVFRF9HRU5FUklDX0NEQyAqLworCisMCisjaWZkZWYJQ09ORklHX1VTQl9DRENFVEhFUgorI2RlZmluZQlIQVZFX0hBUkRXQVJFCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIENvbW11bmljYXRpb25zIERldmljZSBDbGFzcywgRXRoZXJuZXQgQ29udHJvbCBtb2RlbAorICogCisgKiBUYWtlcyB0d28gaW50ZXJmYWNlcy4gIFRoZSBEQVRBIGludGVyZmFjZSBpcyBpbmFjdGl2ZSB0aWxsIGFuIGFsdHNldHRpbmcKKyAqIGlzIHNlbGVjdGVkLiAgQ29uZmlndXJhdGlvbiBkYXRhIGluY2x1ZGVzIGNsYXNzIGRlc2NyaXB0b3JzLgorICoKKyAqIFRoaXMgc2hvdWxkIGludGVyb3Agd2l0aCB3aGF0ZXZlciB0aGUgMi40ICJDRENFdGhlci5jIiBkcml2ZXIKKyAqIChieSBCcmFkIEhhcmRzKSB0YWxrZWQgd2l0aC4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKworc3RhdGljIHU4IG5pYmJsZSAodW5zaWduZWQgY2hhciBjKQoreworCWlmIChsaWtlbHkgKGlzZGlnaXQgKGMpKSkKKwkJcmV0dXJuIGMgLSAnMCc7CisJYyA9IHRvdXBwZXIgKGMpOworCWlmIChsaWtlbHkgKGlzeGRpZ2l0IChjKSkpCisJCXJldHVybiAxMCArIGMgLSAnQSc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitnZXRfZXRoZXJuZXRfYWRkciAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2NkY19ldGhlcl9kZXNjICplKQoreworCWludCAJCXRtcCwgaTsKKwl1bnNpZ25lZCBjaGFyCWJ1ZiBbMTNdOworCisJdG1wID0gdXNiX3N0cmluZyAoZGV2LT51ZGV2LCBlLT5pTUFDQWRkcmVzcywgYnVmLCBzaXplb2YgYnVmKTsKKwlpZiAodG1wICE9IDEyKSB7CisJCWRldl9kYmcgKCZkZXYtPnVkZXYtPmRldiwKKwkJCSJiYWQgTUFDIHN0cmluZyAlZCBmZXRjaCwgJWRcbiIsIGUtPmlNQUNBZGRyZXNzLCB0bXApOworCQlpZiAodG1wID49IDApCisJCQl0bXAgPSAtRUlOVkFMOworCQlyZXR1cm4gdG1wOworCX0KKwlmb3IgKGkgPSB0bXAgPSAwOyBpIDwgNjsgaSsrLCB0bXAgKz0gMikKKwkJZGV2LT5uZXQtPmRldl9hZGRyIFtpXSA9CisJCQkgKG5pYmJsZSAoYnVmIFt0bXBdKSA8PCA0KSArIG5pYmJsZSAoYnVmIFt0bXAgKyAxXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2RjX2JpbmQgKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJaW50CQkJCXN0YXR1czsKKwlzdHJ1Y3QgY2RjX3N0YXRlCQkqaW5mbyA9ICh2b2lkICopICZkZXYtPmRhdGE7CisKKwlzdGF0dXMgPSBnZW5lcmljX2NkY19iaW5kIChkZXYsIGludGYpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJc3RhdHVzID0gZ2V0X2V0aGVybmV0X2FkZHIgKGRldiwgaW5mby0+ZXRoZXIpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCXVzYl9zZXRfaW50ZmRhdGEoaW5mby0+ZGF0YSwgTlVMTCk7CisJCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UgKCZ1c2JuZXRfZHJpdmVyLCBpbmZvLT5kYXRhKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkvKiBGSVhNRSBjZGMtZXRoZXIgaGFzIHNvbWUgbXVsdGljYXN0IGNvZGUgdG9vLCB0aG91Z2ggaXQgY29tcGxhaW5zCisJICogaW4gcm91dGluZSBjYXNlcy4gIGluZm8tPmV0aGVyIGRlc2NyaWJlcyB0aGUgbXVsdGljYXN0IHN1cHBvcnQuCisJICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JY2RjX2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0JIkNEQyBFdGhlcm5ldCBEZXZpY2UiLAorCS5mbGFncyA9CUZMQUdfRVRIRVIsCisJLy8gLmNoZWNrX2Nvbm5lY3QgPSBjZGNfY2hlY2tfY29ubmVjdCwKKwkuYmluZCA9CQljZGNfYmluZCwKKwkudW5iaW5kID0JY2RjX3VuYmluZCwKKwkuc3RhdHVzID0JY2RjX3N0YXR1cywKK307CisKKyNlbmRpZgkvKiBDT05GSUdfVVNCX0NEQ0VUSEVSICovCisKKworDAorI2lmZGVmCUNPTkZJR19VU0JfRVBTT04yODg4CisjZGVmaW5lCUhBVkVfSEFSRFdBUkUKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogRVBTT04gVVNCIGNsaWVudHMKKyAqCisgKiBUaGlzIGlzIHRoZSBzYW1lIGlkZWEgYXMgTGludXggUERBcyAoYmVsb3cpIGV4Y2VwdCB0aGUgZmlybXdhcmUgaW4gdGhlCisgKiBkZXZpY2UgbWlnaHQgbm90IGJlIFR1eC1wb3dlcmVkLiAgRXBzb24gcHJvdmlkZXMgcmVmZXJlbmNlIGZpcm13YXJlIHRoYXQKKyAqIGltcGxlbWVudHMgdGhpcyBpbnRlcmZhY2UuICBQcm9kdWN0IGRldmVsb3BlcnMgY2FuIHJldXNlIG9yIG1vZGlmeSB0aGF0CisgKiBjb2RlLCBzdWNoIGFzIGJ5IHVzaW5nIHRoZWlyIG93biBwcm9kdWN0IGFuZCB2ZW5kb3IgY29kZXMuCisgKgorICogU3VwcG9ydCB3YXMgZnJvbSBKdXJvIEJ5c3RyaWNreSA8YnlzdHJpY2t5Lmp1cm9AZXJkLmVwc29uLmNvbT4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCWVwc29uMjg4OF9pbmZvID0geworCS5kZXNjcmlwdGlvbiA9CSJFcHNvbiBVU0IgRGV2aWNlIiwKKwkuY2hlY2tfY29ubmVjdCA9IGFsd2F5c19jb25uZWN0ZWQsCisKKwkuaW4gPSA0LCAub3V0ID0gMywKK307CisKKyNlbmRpZgkvKiBDT05GSUdfVVNCX0VQU09OMjg4OCAqLworCisMCisjaWZkZWYgQ09ORklHX1VTQl9HRU5FU1lTCisjZGVmaW5lCUhBVkVfSEFSRFdBUkUKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogR2VuZVN5cyBHTDYyMFVTQi1BICh3d3cuZ2VuZXN5c2xvZ2ljLmNvbS50dykKKyAqCisgKiAuLi4gc2hvdWxkIHBhcnRpYWxseSBpbnRlcm9wIHdpdGggdGhlIFdpbjMyIGRyaXZlciBmb3IgdGhpcyBoYXJkd2FyZQorICogVGhlIEdlbmVTeXMgZG9jcyBpbXBseSB0aGVyZSdzIHNvbWUgTkRJUyBpc3N1ZSBtb3RpdmF0aW5nIHRoaXMgZnJhbWluZy4KKyAqCisgKiBTb21lIGluZm8gZnJvbSBHZW5lU3lzOgorICogIC0gR0w2MjBVU0ItQSBpcyBmdWxsIGR1cGxleDsgR0w2MjBVU0IgaXMgb25seSBoYWxmIGR1cGxleCBmb3IgYnVsay4KKyAqICAgIChTb21lIGNhYmxlcywgbGlrZSB0aGUgQkFGTy0xMDBjLCB1c2UgdGhlIGhhbGYgZHVwbGV4IHZlcnNpb24uKQorICogIC0gRm9yIHRoZSBmdWxsIGR1cGxleCBtb2RlbCwgdGhlIGxvdyBiaXQgb2YgdGhlIHZlcnNpb24gY29kZSBzYXlzCisgKiAgICB3aGljaCBzaWRlIGlzIHdoaWNoICgibGVmdC9yaWdodCIpLgorICogIC0gRm9yIHRoZSBoYWxmIGR1cGxleCB0eXBlLCBhIGNvbnRyb2wvaW50ZXJydXB0IGhhbmRzaGFrZSBzZXR0bGVzCisgKiAgICB0aGUgdHJhbnNmZXIgZGlyZWN0aW9uLiAgKFRoYXQncyBkaXNhYmxlZCBoZXJlLCBwYXJ0aWFsbHkgY29kZWQuKQorICogICAgQSBjb250cm9sIFVSQiB3b3VsZCBibG9jayB1bnRpbCBvdGhlciBzaWRlIHdyaXRlcyBhbiBpbnRlcnJ1cHQuCisgKgorICogT3JpZ2luYWwgY29kZSBmcm9tIEppdW4tSmllIEh1YW5nIDxodWFuZ2pqQGdlbmVzeXNsb2dpYy5jb20udHc+CisgKiBhbmQgbWVyZ2VkIGludG8gInVzYm5ldCIgYnkgU3RhbmlzbGF2IEJyYWJlYyA8dXR4QHBlbmd1aW4uY3o+LgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8vIGNvbnRyb2wgbXNnIHdyaXRlIGNvbW1hbmQKKyNkZWZpbmUgR0VORUxJTktfQ09OTkVDVF9XUklURQkJCTB4RjAKKy8vIGludGVycnVwdCBwaXBlIGluZGV4CisjZGVmaW5lIEdFTkVMSU5LX0lOVEVSUlVQVF9QSVBFCQkJMHgwMworLy8gaW50ZXJydXB0IHJlYWQgYnVmZmVyIHNpemUKKyNkZWZpbmUgSU5URVJSVVBUX0JVRlNJWkUJCQkweDA4CisvLyBpbnRlcnJ1cHQgcGlwZSBpbnRlcnZhbCB2YWx1ZQorI2RlZmluZSBHRU5FTElOS19JTlRFUlJVUFRfSU5URVJWQUwJCTB4MTAKKy8vIG1heCB0cmFuc21pdCBwYWNrZXQgbnVtYmVyIHBlciB0cmFuc21pdAorI2RlZmluZSBHTF9NQVhfVFJBTlNNSVRfUEFDS0VUUwkJCTMyCisvLyBtYXggcGFja2V0IGxlbmd0aAorI2RlZmluZSBHTF9NQVhfUEFDS0VUX0xFTgkJCTE1MTQKKy8vIG1heCByZWNlaXZlIGJ1ZmZlciBzaXplIAorI2RlZmluZSBHTF9SQ1ZfQlVGX1NJWkUJCVwKKwkoKChHTF9NQVhfUEFDS0VUX0xFTiArIDQpICogR0xfTUFYX1RSQU5TTUlUX1BBQ0tFVFMpICsgNCkKKworc3RydWN0IGdsX3BhY2tldCB7CisJdTMyCQlwYWNrZXRfbGVuZ3RoOworCWNoYXIJCXBhY2tldF9kYXRhIFsxXTsKK307CisKK3N0cnVjdCBnbF9oZWFkZXIgeworCXUzMgkJCXBhY2tldF9jb3VudDsKKwlzdHJ1Y3QgZ2xfcGFja2V0CXBhY2tldHM7Cit9OworCisjaWZkZWYJR0VORUxJTktfQUNLCisKKy8vIEZJWE1FOiAgdGhpcyBjb2RlIGlzIGluY29tcGxldGUsIG5vdCBkZWJ1Z2dlZDsgaXQgZG9lc24ndAorLy8gaGFuZGxlIGludGVycnVwdHMgY29ycmVjdGx5LiAgaW50ZXJydXB0cyBzaG91bGQgYmUgZ2VuZXJpYworLy8gY29kZSBsaWtlIGFsbCBvdGhlciBkZXZpY2UgSS9PLCBhbnl3YXkuCisKK3N0cnVjdCBnbF9wcml2IHsgCisJc3RydWN0IHVyYgkqaXJxX3VyYjsKKwljaGFyCQlpcnFfYnVmIFtJTlRFUlJVUFRfQlVGU0laRV07Cit9OworCitzdGF0aWMgaW5saW5lIGludCBnbF9jb250cm9sX3dyaXRlIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlcXVlc3QsIHUxNiB2YWx1ZSkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnIChkZXYtPnVkZXYsCisJCSAgICAgIHVzYl9zbmRjdHJscGlwZSAoZGV2LT51ZGV2LCAwKSwKKwkJICAgICAgcmVxdWVzdCwKKwkJICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCSAgICAgIHZhbHVlLCAKKwkJICAgICAgMCwJCQkvLyBpbmRleAorCQkgICAgICAwLAkJCS8vIGRhdGEgYnVmZmVyCisJCSAgICAgIDAsCQkJLy8gc2l6ZQorCQkgICAgICBDT05UUk9MX1RJTUVPVVRfTVMpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGdsX2ludGVycnVwdF9jb21wbGV0ZSAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CisJCisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCQkJX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJfQorCisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKK30KKworc3RhdGljIGludCBnbF9pbnRlcnJ1cHRfcmVhZCAoc3RydWN0IHVzYm5ldCAqZGV2KQoreworCXN0cnVjdCBnbF9wcml2CSpwcml2ID0gZGV2LT5wcml2X2RhdGE7CisJaW50CQlyZXR2YWw7CisKKwkvLyBpc3N1ZSB1c2IgaW50ZXJydXB0IHJlYWQKKwlpZiAocHJpdiAmJiBwcml2LT5pcnFfdXJiKSB7CisJCS8vIHN1Ym1pdCB1cmIKKwkJaWYgKChyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAocHJpdi0+aXJxX3VyYiwgR0ZQX0tFUk5FTCkpICE9IDApCisJCQlkYmcgKCJnbF9pbnRlcnJ1cHRfcmVhZDogc3VibWl0IGZhaWwgLSAlWC4uLiIsIHJldHZhbCk7CisJCWVsc2UKKwkJCWRiZyAoImdsX2ludGVycnVwdF9yZWFkOiBzdWJtaXQgc3VjY2Vzcy4uLiIpOworCX0KKworCXJldHVybiAwOworfQorCisvLyBjaGVjayB3aGV0aGVyIGFub3RoZXIgc2lkZSBpcyBjb25uZWN0ZWQKK3N0YXRpYyBpbnQgZ2VuZWxpbmtfY2hlY2tfY29ubmVjdCAoc3RydWN0IHVzYm5ldCAqZGV2KQoreworCWludAkJCXJldHZhbDsKKworCWRiZyAoImdlbmVsaW5rX2NoZWNrX2Nvbm5lY3QuLi4iKTsKKworCS8vIGRldGVjdCB3aGV0aGVyIGFub3RoZXIgc2lkZSBpcyBjb25uZWN0ZWQKKwlpZiAoKHJldHZhbCA9IGdsX2NvbnRyb2xfd3JpdGUgKGRldiwgR0VORUxJTktfQ09OTkVDVF9XUklURSwgMCkpICE9IDApIHsKKwkJZGJnICgiJXM6IGdlbmVsaW5rX2NoZWNrX2Nvbm5lY3Qgd3JpdGUgZmFpbCAtICVYIiwKKwkJCWRldi0+bmV0LT5uYW1lLCByZXR2YWwpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8vIHVzYiBpbnRlcnJ1cHQgcmVhZCB0byBhY2sgYW5vdGhlciBzaWRlIAorCWlmICgocmV0dmFsID0gZ2xfaW50ZXJydXB0X3JlYWQgKGRldikpICE9IDApIHsKKwkJZGJnICgiJXM6IGdlbmVsaW5rX2NoZWNrX2Nvbm5lY3QgcmVhZCBmYWlsIC0gJVgiLAorCQkJZGV2LT5uZXQtPm5hbWUsIHJldHZhbCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJZGJnICgiJXM6IGdlbmVsaW5rX2NoZWNrX2Nvbm5lY3QgcmVhZCBzdWNjZXNzIiwgZGV2LT5uZXQtPm5hbWUpOworCXJldHVybiAwOworfQorCisvLyBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgcHJpdmF0ZSBkYXRhIGZvciBnZW5lbGluaworc3RhdGljIGludCBnZW5lbGlua19pbml0IChzdHJ1Y3QgdXNibmV0ICpkZXYpCit7CisJc3RydWN0IGdsX3ByaXYgKnByaXY7CisKKwkvLyBhbGxvY2F0ZSB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZQorCWlmICgocHJpdiA9IGttYWxsb2MgKHNpemVvZiAqcHJpdiwgR0ZQX0tFUk5FTCkpID09IDApIHsKKwkJZGJnICgiJXM6IGNhbm5vdCBhbGxvY2F0ZSBwcml2YXRlIGRhdGEgcGVyIGRldmljZSIsCisJCQlkZXYtPm5ldC0+bmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8vIGFsbG9jYXRlIGlycSB1cmIKKwlpZiAoKHByaXYtPmlycV91cmIgPSB1c2JfYWxsb2NfdXJiICgwLCBHRlBfS0VSTkVMKSkgPT0gMCkgeworCQlkYmcgKCIlczogY2Fubm90IGFsbG9jYXRlIHByaXZhdGUgaXJxIHVyYiBwZXIgZGV2aWNlIiwKKwkJCWRldi0+bmV0LT5uYW1lKTsKKwkJa2ZyZWUgKHByaXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvLyBmaWxsIGlycSB1cmIKKwl1c2JfZmlsbF9pbnRfdXJiIChwcml2LT5pcnFfdXJiLCBkZXYtPnVkZXYsCisJCXVzYl9yY3ZpbnRwaXBlIChkZXYtPnVkZXYsIEdFTkVMSU5LX0lOVEVSUlVQVF9QSVBFKSwKKwkJcHJpdi0+aXJxX2J1ZiwgSU5URVJSVVBUX0JVRlNJWkUsCisJCWdsX2ludGVycnVwdF9jb21wbGV0ZSwgMCwKKwkJR0VORUxJTktfSU5URVJSVVBUX0lOVEVSVkFMKTsKKworCS8vIHNldCBwcml2YXRlIGRhdGEgcG9pbnRlcgorCWRldi0+cHJpdl9kYXRhID0gcHJpdjsKKworCXJldHVybiAwOworfQorCisvLyByZWxlYXNlIHRoZSBwcml2YXRlIGRhdGEKK3N0YXRpYyBpbnQgZ2VuZWxpbmtfZnJlZSAoc3RydWN0IHVzYm5ldCAqZGV2KQoreworCXN0cnVjdCBnbF9wcml2CSpwcml2ID0gZGV2LT5wcml2X2RhdGE7CisKKwlpZiAoIXByaXYpIAorCQlyZXR1cm4gMDsKKworLy8gRklYTUU6ICBjYW4ndCBjYW5jZWwgaGVyZTsgaXQncyBzeW5jaHJvbm91cywgYW5kCisvLyBzaG91bGQgaGF2ZSBoYXBwZW5lZCBlYXJsaWVyIGluIGFueSBjYXNlIChpbnRlcnJ1cHQKKy8vIGhhbmRsaW5nIG5lZWRzIHRvIGJlIGdlbmVyaWMpCisKKwkvLyBjYW5jZWwgaXJxIHVyYiBmaXJzdAorCXVzYl9raWxsX3VyYiAocHJpdi0+aXJxX3VyYik7CisKKwkvLyBmcmVlIGlycSB1cmIKKwl1c2JfZnJlZV91cmIgKHByaXYtPmlycV91cmIpOworCisJLy8gZnJlZSB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZQorCWtmcmVlIChwcml2KTsKKworCXJldHVybiAwOworfQorCisjZW5kaWYKKworc3RhdGljIGludCBnZW5lbGlua19yeF9maXh1cCAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBnbF9oZWFkZXIJKmhlYWRlcjsKKwlzdHJ1Y3QgZ2xfcGFja2V0CSpwYWNrZXQ7CisJc3RydWN0IHNrX2J1ZmYJCSpnbF9za2I7CisJdTMyCQkJc2l6ZTsKKworCWhlYWRlciA9IChzdHJ1Y3QgZ2xfaGVhZGVyICopIHNrYi0+ZGF0YTsKKworCS8vIGdldCB0aGUgcGFja2V0IGNvdW50IG9mIHRoZSByZWNlaXZlZCBza2IKKwlsZTMyX3RvX2NwdXMgKCZoZWFkZXItPnBhY2tldF9jb3VudCk7CisJaWYgKChoZWFkZXItPnBhY2tldF9jb3VudCA+IEdMX01BWF9UUkFOU01JVF9QQUNLRVRTKQorCQkJfHwgKGhlYWRlci0+cGFja2V0X2NvdW50IDwgMCkpIHsKKwkJZGJnICgiZ2VuZWxpbms6IGludmFsaWQgcmVjZWl2ZWQgcGFja2V0IGNvdW50ICVkIiwKKwkJCWhlYWRlci0+cGFja2V0X2NvdW50KTsKKwkJcmV0dXJuIDA7CisJfQorCisJLy8gc2V0IHRoZSBjdXJyZW50IHBhY2tldCBwb2ludGVyIHRvIHRoZSBmaXJzdCBwYWNrZXQKKwlwYWNrZXQgPSAmaGVhZGVyLT5wYWNrZXRzOworCisJLy8gZGVjcmVtZW50IHRoZSBsZW5ndGggZm9yIHRoZSBwYWNrZXQgY291bnQgc2l6ZSA0IGJ5dGVzCisJc2tiX3B1bGwgKHNrYiwgNCk7CisKKwl3aGlsZSAoaGVhZGVyLT5wYWNrZXRfY291bnQgPiAxKSB7CisJCS8vIGdldCB0aGUgcGFja2V0IGxlbmd0aAorCQlzaXplID0gcGFja2V0LT5wYWNrZXRfbGVuZ3RoOworCisJCS8vIHRoaXMgbWF5IGJlIGEgYnJva2VuIHBhY2tldAorCQlpZiAoc2l6ZSA+IEdMX01BWF9QQUNLRVRfTEVOKSB7CisJCQlkYmcgKCJnZW5lbGluazogaW52YWxpZCByeCBsZW5ndGggJWQiLCBzaXplKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJLy8gYWxsb2NhdGUgdGhlIHNrYiBmb3IgdGhlIGluZGl2aWR1YWwgcGFja2V0CisJCWdsX3NrYiA9IGFsbG9jX3NrYiAoc2l6ZSwgR0ZQX0FUT01JQyk7CisJCWlmIChnbF9za2IpIHsKKworCQkJLy8gY29weSB0aGUgcGFja2V0IGRhdGEgdG8gdGhlIG5ldyBza2IKKwkJCW1lbWNweShza2JfcHV0KGdsX3NrYiwgc2l6ZSksIHBhY2tldC0+cGFja2V0X2RhdGEsIHNpemUpOworCQkJc2tiX3JldHVybiAoZGV2LCBza2IpOworCQl9CisKKwkJLy8gYWR2YW5jZSB0byB0aGUgbmV4dCBwYWNrZXQKKwkJcGFja2V0ID0gKHN0cnVjdCBnbF9wYWNrZXQgKikKKwkJCSZwYWNrZXQtPnBhY2tldF9kYXRhIFtzaXplXTsKKwkJaGVhZGVyLT5wYWNrZXRfY291bnQtLTsKKworCQkvLyBzaGlmdCB0aGUgZGF0YSBwb2ludGVyIHRvIHRoZSBuZXh0IGdsX3BhY2tldAorCQlza2JfcHVsbCAoc2tiLCBzaXplICsgNCk7CisJfQorCisJLy8gc2tpcCB0aGUgcGFja2V0IGxlbmd0aCBmaWVsZCA0IGJ5dGVzCisJc2tiX3B1bGwgKHNrYiwgNCk7CisKKwlpZiAoc2tiLT5sZW4gPiBHTF9NQVhfUEFDS0VUX0xFTikgeworCQlkYmcgKCJnZW5lbGluazogaW52YWxpZCByeCBsZW5ndGggJWQiLCBza2ItPmxlbik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2dlbmVsaW5rX3R4X2ZpeHVwIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsIGludCBmbGFncykKK3sKKwlpbnQgCXBhZGxlbjsKKwlpbnQJbGVuZ3RoID0gc2tiLT5sZW47CisJaW50CWhlYWRyb29tID0gc2tiX2hlYWRyb29tIChza2IpOworCWludAl0YWlscm9vbSA9IHNrYl90YWlscm9vbSAoc2tiKTsKKwl1MzIJKnBhY2tldF9jb3VudDsKKwl1MzIJKnBhY2tldF9sZW47CisKKwkvLyBGSVhNRTogIG1hZ2ljIG51bWJlcnMsIGJsZWVjaAorCXBhZGxlbiA9ICgoc2tiLT5sZW4gKyAoNCArIDQqMSkpICUgNjQpID8gMCA6IDE7CisKKwlpZiAoKCFza2JfY2xvbmVkIChza2IpKQorCQkJJiYgKChoZWFkcm9vbSArIHRhaWxyb29tKSA+PSAocGFkbGVuICsgKDQgKyA0KjEpKSkpIHsKKwkJaWYgKChoZWFkcm9vbSA8ICg0ICsgNCoxKSkgfHwgKHRhaWxyb29tIDwgcGFkbGVuKSkgeworCQkJc2tiLT5kYXRhID0gbWVtbW92ZSAoc2tiLT5oZWFkICsgKDQgKyA0KjEpLAorCQkJCQkgICAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCQkJc2tiLT50YWlsID0gc2tiLT5kYXRhICsgc2tiLT5sZW47CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc2tfYnVmZgkqc2tiMjsKKwkJc2tiMiA9IHNrYl9jb3B5X2V4cGFuZCAoc2tiLCAoNCArIDQqMSkgLCBwYWRsZW4sIGZsYWdzKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkgKHNrYik7CisJCXNrYiA9IHNrYjI7CisJCWlmICghc2tiKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJLy8gYXR0YWNoIHRoZSBwYWNrZXQgY291bnQgdG8gdGhlIGhlYWRlcgorCXBhY2tldF9jb3VudCA9ICh1MzIgKikgc2tiX3B1c2ggKHNrYiwgKDQgKyA0KjEpKTsKKwlwYWNrZXRfbGVuID0gcGFja2V0X2NvdW50ICsgMTsKKworCS8vIEZJWE1FIGxpdHRsZSBlbmRpYW4/CisJKnBhY2tldF9jb3VudCA9IDE7CisJKnBhY2tldF9sZW4gPSBsZW5ndGg7CisKKwkvLyBhZGQgcGFkZGluZyBieXRlCisJaWYgKChza2ItPmxlbiAlIGRldi0+bWF4cGFja2V0KSA9PSAwKQorCQlza2JfcHV0IChza2IsIDEpOworCisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwlnZW5lbGlua19pbmZvID0geworCS5kZXNjcmlwdGlvbiA9CSJHZW5lc3lzIEdlbmVMaW5rIiwKKwkuZmxhZ3MgPQlGTEFHX0ZSQU1JTkdfR0wgfCBGTEFHX05PX1NFVElOVCwKKwkucnhfZml4dXAgPQlnZW5lbGlua19yeF9maXh1cCwKKwkudHhfZml4dXAgPQlnZW5lbGlua190eF9maXh1cCwKKworCS5pbiA9IDEsIC5vdXQgPSAyLAorCisjaWZkZWYJR0VORUxJTktfQUNLCisJLmNoZWNrX2Nvbm5lY3QgPWdlbmVsaW5rX2NoZWNrX2Nvbm5lY3QsCisjZW5kaWYKK307CisKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0dFTkVTWVMgKi8KKworCisMCisjaWZkZWYJQ09ORklHX1VTQl9ORVQxMDgwCisjZGVmaW5lCUhBVkVfSEFSRFdBUkUKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogTmV0Y2hpcCAxMDgwIGRyaXZlciAuLi4gaHR0cDovL3d3dy5uZXRjaGlwLmNvbQorICogVXNlZCBpbiBMYXBMaW5rIGNhYmxlcworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgZGV2X3BhY2tldF9pZAlkYXRhWzBdCisjZGVmaW5lIGZyYW1lX2Vycm9ycwlkYXRhWzFdCisKKy8qCisgKiBOZXRDaGlwIGZyYW1pbmcgb2YgZXRoZXJuZXQgcGFja2V0cywgc3VwcG9ydGluZyBhZGRpdGlvbmFsIGVycm9yCisgKiBjaGVja3MgZm9yIGxpbmtzIHRoYXQgbWF5IGRyb3AgYnVsayBwYWNrZXRzIGZyb20gaW5zaWRlIG1lc3NhZ2VzLgorICogT2RkIFVTQiBsZW5ndGggPT0gYWx3YXlzIHNob3J0IHJlYWQgZm9yIGxhc3QgdXNiIHBhY2tldC4KKyAqCS0gbmNfaGVhZGVyCisgKgktIEV0aGVybmV0IGhlYWRlciAoMTQgYnl0ZXMpCisgKgktIHBheWxvYWQKKyAqCS0gKG9wdGlvbmFsIHBhZGRpbmcgYnl0ZSwgaWYgbmVlZGVkIHNvIGxlbmd0aCBiZWNvbWVzIG9kZCkKKyAqCS0gbmNfdHJhaWxlcgorICoKKyAqIFRoaXMgZnJhbWluZyBpcyB0byBiZSBhdm9pZGVkIGZvciBub24tTmV0Q2hpcCBkZXZpY2VzLgorICovCisKK3N0cnVjdCBuY19oZWFkZXIgewkJLy8gcGFja2VkOgorCV9fbGUxNgloZHJfbGVuOwkJLy8gc2l6ZW9mIG5jX2hlYWRlciAoTEUsIGFsbCkKKwlfX2xlMTYJcGFja2V0X2xlbjsJCS8vIHBheWxvYWQgc2l6ZSAoaW5jbHVkaW5nIGV0aGhkcikKKwlfX2xlMTYJcGFja2V0X2lkOwkJLy8gZGV0ZWN0cyBkcm9wcGVkIHBhY2tldHMKKyNkZWZpbmUgTUlOX0hFQURFUgk2CisKKwkvLyBhbGwgZWxzZSBpcyBvcHRpb25hbCwgYW5kIG11c3Qgc3RhcnQgd2l0aDoKKwkvLyB1MTYJdmVuZG9ySWQ7CQkvLyBmcm9tIHVzYi1pZgorCS8vIHUxNglwcm9kdWN0SWQ7Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworI2RlZmluZQlQQURfQllURQkoKHVuc2lnbmVkIGNoYXIpMHhBQykKKworc3RydWN0IG5jX3RyYWlsZXIgeworCV9fbGUxNglwYWNrZXRfaWQ7Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKworLy8gcGFja2V0cyBtYXkgdXNlIEZMQUdfRlJBTUlOR19OQyBhbmQgb3B0aW9uYWwgcGFkCisjZGVmaW5lIEZSQU1FRF9TSVpFKG10dSkgKHNpemVvZiAoc3RydWN0IG5jX2hlYWRlcikgXAorCQkJCSsgc2l6ZW9mIChzdHJ1Y3QgZXRoaGRyKSBcCisJCQkJKyAobXR1KSBcCisJCQkJKyAxIFwKKwkJCQkrIHNpemVvZiAoc3RydWN0IG5jX3RyYWlsZXIpKQorCisjZGVmaW5lIE1JTl9GUkFNRUQJRlJBTUVEX1NJWkUoMCkKKworCisvKgorICogWmVybyBtZWFucyBubyB0aW1lb3V0OyBlbHNlLCBob3cgbG9uZyBhIDY0IGJ5dGUgYnVsayBwYWNrZXQgbWF5IGJlIHF1ZXVlZAorICogYmVmb3JlIHRoZSBoYXJkd2FyZSBkcm9wcyBpdC4gIElmIHRoYXQncyBkb25lLCB0aGUgZHJpdmVyIHdpbGwgbmVlZCB0bworICogZnJhbWUgbmV0d29yayBwYWNrZXRzIHRvIGd1YXJkIGFnYWluc3QgdGhlIGRyb3BwZWQgVVNCIHBhY2tldHMuICBUaGUgd2luMzIKKyAqIGRyaXZlciBzZXRzIHRoaXMgZm9yIGJvdGggc2lkZXMgb2YgdGhlIGxpbmsuCisgKi8KKyNkZWZpbmUJTkNfUkVBRF9UVExfTVMJKCh1OCkyNTUpCS8vIG1zCisKKy8qCisgKiBXZSBpZ25vcmUgbW9zdCByZWdpc3RlcnMgYW5kIEVFUFJPTSBjb250ZW50cy4KKyAqLworI2RlZmluZQlSRUdfVVNCQ1RMCSgodTgpMHgwNCkKKyNkZWZpbmUgUkVHX1RUTAkJKCh1OCkweDEwKQorI2RlZmluZSBSRUdfU1RBVFVTCSgodTgpMHgxMSkKKworLyoKKyAqIFZlbmRvciBzcGVjaWZpYyByZXF1ZXN0cyB0byByZWFkL3dyaXRlIGRhdGEKKyAqLworI2RlZmluZQlSRVFVRVNUX1JFR0lTVEVSCSgodTgpMHgxMCkKKyNkZWZpbmUJUkVRVUVTVF9FRVBST00JCSgodTgpMHgxMSkKKworc3RhdGljIGludAorbmNfdmVuZG9yX3JlYWQgKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVxLCB1OCByZWdudW0sIHUxNiAqcmV0dmFsX3B0cikKK3sKKwlpbnQgc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnIChkZXYtPnVkZXYsCisJCXVzYl9yY3ZjdHJscGlwZSAoZGV2LT51ZGV2LCAwKSwKKwkJcmVxLAorCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJMCwgcmVnbnVtLAorCQlyZXR2YWxfcHRyLCBzaXplb2YgKnJldHZhbF9wdHIsCisJCUNPTlRST0xfVElNRU9VVF9NUyk7CisJaWYgKHN0YXR1cyA+IDApCisJCXN0YXR1cyA9IDA7CisJaWYgKCFzdGF0dXMpCisJCWxlMTZfdG9fY3B1cyAocmV0dmFsX3B0cik7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGlubGluZSBpbnQKK25jX3JlZ2lzdGVyX3JlYWQgKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnbnVtLCB1MTYgKnJldHZhbF9wdHIpCit7CisJcmV0dXJuIG5jX3ZlbmRvcl9yZWFkIChkZXYsIFJFUVVFU1RfUkVHSVNURVIsIHJlZ251bSwgcmV0dmFsX3B0cik7Cit9CisKKy8vIG5vIHJldHZhbCAuLi4gY2FuIGJlY29tZSBhc3luYywgdXNhYmxlIGluX2ludGVycnVwdCgpCitzdGF0aWMgdm9pZAorbmNfdmVuZG9yX3dyaXRlIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlcSwgdTggcmVnbnVtLCB1MTYgdmFsdWUpCit7CisJdXNiX2NvbnRyb2xfbXNnIChkZXYtPnVkZXYsCisJCXVzYl9zbmRjdHJscGlwZSAoZGV2LT51ZGV2LCAwKSwKKwkJcmVxLAorCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCXZhbHVlLCByZWdudW0sCisJCU5VTEwsIDAsCQkJLy8gZGF0YSBpcyBpbiBzZXR1cCBwYWNrZXQKKwkJQ09OVFJPTF9USU1FT1VUX01TKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCituY19yZWdpc3Rlcl93cml0ZSAoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWdudW0sIHUxNiB2YWx1ZSkKK3sKKwluY192ZW5kb3Jfd3JpdGUgKGRldiwgUkVRVUVTVF9SRUdJU1RFUiwgcmVnbnVtLCB2YWx1ZSk7Cit9CisKKworI2lmIDAKK3N0YXRpYyB2b2lkIG5jX2R1bXBfcmVnaXN0ZXJzIChzdHJ1Y3QgdXNibmV0ICpkZXYpCit7CisJdTgJcmVnOworCXUxNgkqdnAgPSBrbWFsbG9jIChzaXplb2YgKHUxNikpOworCisJaWYgKCF2cCkgeworCQlkYmcgKCJubyBtZW1vcnk/Iik7CisJCXJldHVybjsKKwl9CisKKwlkYmcgKCIlcyByZWdpc3RlcnM6IiwgZGV2LT5uZXQtPm5hbWUpOworCWZvciAocmVnID0gMDsgcmVnIDwgMHgyMDsgcmVnKyspIHsKKwkJaW50IHJldHZhbDsKKworCQkvLyByZWFkaW5nIHNvbWUgcmVnaXN0ZXJzIGlzIHRyb3VibGUKKwkJaWYgKHJlZyA+PSAweDA4ICYmIHJlZyA8PSAweGYpCisJCQljb250aW51ZTsKKwkJaWYgKHJlZyA+PSAweDEyICYmIHJlZyA8PSAweDFlKQorCQkJY29udGludWU7CisKKwkJcmV0dmFsID0gbmNfcmVnaXN0ZXJfcmVhZCAoZGV2LCByZWcsIHZwKTsKKwkJaWYgKHJldHZhbCA8IDApCisJCQlkYmcgKCIlcyByZWcgWzB4JXhdID09PiBlcnJvciAlZCIsCisJCQkJZGV2LT5uZXQtPm5hbWUsIHJlZywgcmV0dmFsKTsKKwkJZWxzZQorCQkJZGJnICgiJXMgcmVnIFsweCV4XSA9IDB4JXgiLAorCQkJCWRldi0+bmV0LT5uYW1lLCByZWcsICp2cCk7CisJfQorCWtmcmVlICh2cCk7Cit9CisjZW5kaWYKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogQ29udHJvbCByZWdpc3RlcgorICovCisKKyNkZWZpbmUJVVNCQ1RMX1dSSVRBQkxFX01BU0sJMHgxZjBmCisvLyBiaXRzIDE1LTEzIHJlc2VydmVkLCByL28KKyNkZWZpbmUJVVNCQ1RMX0VOQUJMRV9MQU5HCSgxIDw8IDEyKQorI2RlZmluZQlVU0JDVExfRU5BQkxFX01GR1IJKDEgPDwgMTEpCisjZGVmaW5lCVVTQkNUTF9FTkFCTEVfUFJPRAkoMSA8PCAxMCkKKyNkZWZpbmUJVVNCQ1RMX0VOQUJMRV9TRVJJQUwJKDEgPDwgOSkKKyNkZWZpbmUJVVNCQ1RMX0VOQUJMRV9ERUZBVUxUUwkoMSA8PCA4KQorLy8gYml0cyA3LTQgcmVzZXJ2ZWQsIHIvbworI2RlZmluZQlVU0JDVExfRkxVU0hfT1RIRVIJKDEgPDwgMykKKyNkZWZpbmUJVVNCQ1RMX0ZMVVNIX1RISVMJKDEgPDwgMikKKyNkZWZpbmUJVVNCQ1RMX0RJU0NPTk5fT1RIRVIJKDEgPDwgMSkKKyNkZWZpbmUJVVNCQ1RMX0RJU0NPTk5fVEhJUwkoMSA8PCAwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmNfZHVtcF91c2JjdGwgKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IHVzYmN0bCkKK3sKKwlpZiAoIW5ldGlmX21zZ19saW5rIChkZXYpKQorCQlyZXR1cm47CisJZGV2ZGJnIChkZXYsICJuZXQxMDgwICVzLSVzIHVzYmN0bCAweCV4OiVzJXMlcyVzJXM7IgorCQkJIiB0aGlzJXMlczsiCisJCQkiIG90aGVyJXMlczsgci9vIDB4JXgiLAorCQlkZXYtPnVkZXYtPmJ1cy0+YnVzX25hbWUsIGRldi0+dWRldi0+ZGV2cGF0aCwKKwkJdXNiY3RsLAorCQkodXNiY3RsICYgVVNCQ1RMX0VOQUJMRV9MQU5HKSA/ICIgbGFuZyIgOiAiIiwKKwkJKHVzYmN0bCAmIFVTQkNUTF9FTkFCTEVfTUZHUikgPyAiIG1mZ3IiIDogIiIsCisJCSh1c2JjdGwgJiBVU0JDVExfRU5BQkxFX1BST0QpID8gIiBwcm9kIiA6ICIiLAorCQkodXNiY3RsICYgVVNCQ1RMX0VOQUJMRV9TRVJJQUwpID8gIiBzZXJpYWwiIDogIiIsCisJCSh1c2JjdGwgJiBVU0JDVExfRU5BQkxFX0RFRkFVTFRTKSA/ICIgZGVmYXVsdHMiIDogIiIsCisKKwkJKHVzYmN0bCAmIFVTQkNUTF9GTFVTSF9PVEhFUikgPyAiIEZMVVNIIiA6ICIiLAorCQkodXNiY3RsICYgVVNCQ1RMX0RJU0NPTk5fT1RIRVIpID8gIiBESVMiIDogIiIsCisJCSh1c2JjdGwgJiBVU0JDVExfRkxVU0hfVEhJUykgPyAiIEZMVVNIIiA6ICIiLAorCQkodXNiY3RsICYgVVNCQ1RMX0RJU0NPTk5fVEhJUykgPyAiIERJUyIgOiAiIiwKKwkJdXNiY3RsICYgflVTQkNUTF9XUklUQUJMRV9NQVNLCisJCSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBTdGF0dXMgcmVnaXN0ZXIKKyAqLworCisjZGVmaW5lCVNUQVRVU19QT1JUX0EJCSgxIDw8IDE1KQorCisjZGVmaW5lCVNUQVRVU19DT05OX09USEVSCSgxIDw8IDE0KQorI2RlZmluZQlTVEFUVVNfU1VTUEVORF9PVEhFUgkoMSA8PCAxMykKKyNkZWZpbmUJU1RBVFVTX01BSUxCT1hfT1RIRVIJKDEgPDwgMTIpCisjZGVmaW5lCVNUQVRVU19QQUNLRVRTX09USEVSKG4pCSgoKG4pID4+IDgpICYmIDB4MDMpCisKKyNkZWZpbmUJU1RBVFVTX0NPTk5fVEhJUwkoMSA8PCA2KQorI2RlZmluZQlTVEFUVVNfU1VTUEVORF9USElTCSgxIDw8IDUpCisjZGVmaW5lCVNUQVRVU19NQUlMQk9YX1RISVMJKDEgPDwgNCkKKyNkZWZpbmUJU1RBVFVTX1BBQ0tFVFNfVEhJUyhuKQkoKChuKSA+PiAwKSAmJiAweDAzKQorCisjZGVmaW5lCVNUQVRVU19VTlNQRUNfTUFTSwkweDBjOGMKKyNkZWZpbmUJU1RBVFVTX05PSVNFX01BU0sgCSgodTE2KX4oMHgwMzAzfFNUQVRVU19VTlNQRUNfTUFTSykpCisKKworc3RhdGljIGlubGluZSB2b2lkIG5jX2R1bXBfc3RhdHVzIChzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBzdGF0dXMpCit7CisJaWYgKCFuZXRpZl9tc2dfbGluayAoZGV2KSkKKwkJcmV0dXJuOworCWRldmRiZyAoZGV2LCAibmV0MTA4MCAlcy0lcyBzdGF0dXMgMHgleDoiCisJCQkiIHRoaXMgKCVjKSBQS1Q9JWQlcyVzJXM7IgorCQkJIiBvdGhlciBQS1Q9JWQlcyVzJXM7IHVuc3BlYyAweCV4IiwKKwkJZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLCBkZXYtPnVkZXYtPmRldnBhdGgsCisJCXN0YXR1cywKKworCQkvLyBYWFggdGhlIHBhY2tldCBjb3VudHMgZG9uJ3Qgc2VlbSByaWdodAorCQkvLyAoMSBhdCByZXNldCwgbm90IDApOyBtYXliZSBVTlNQRUMgdG9vCisKKwkJKHN0YXR1cyAmIFNUQVRVU19QT1JUX0EpID8gJ0EnIDogJ0InLAorCQlTVEFUVVNfUEFDS0VUU19USElTIChzdGF0dXMpLAorCQkoc3RhdHVzICYgU1RBVFVTX0NPTk5fVEhJUykgPyAiIENPTiIgOiAiIiwKKwkJKHN0YXR1cyAmIFNUQVRVU19TVVNQRU5EX1RISVMpID8gIiBTVVMiIDogIiIsCisJCShzdGF0dXMgJiBTVEFUVVNfTUFJTEJPWF9USElTKSA/ICIgTUJPWCIgOiAiIiwKKworCQlTVEFUVVNfUEFDS0VUU19PVEhFUiAoc3RhdHVzKSwKKwkJKHN0YXR1cyAmIFNUQVRVU19DT05OX09USEVSKSA/ICIgQ09OIiA6ICIiLAorCQkoc3RhdHVzICYgU1RBVFVTX1NVU1BFTkRfT1RIRVIpID8gIiBTVVMiIDogIiIsCisJCShzdGF0dXMgJiBTVEFUVVNfTUFJTEJPWF9PVEhFUikgPyAiIE1CT1giIDogIiIsCisKKwkJc3RhdHVzICYgU1RBVFVTX1VOU1BFQ19NQVNLCisJCSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBUVEwgcmVnaXN0ZXIKKyAqLworCisjZGVmaW5lCVRUTF9USElTKHR0bCkJKDB4MDBmZiAmIHR0bCkKKyNkZWZpbmUJVFRMX09USEVSKHR0bCkJKDB4MDBmZiAmICh0dGwgPj4gOCkpCisjZGVmaW5lIE1LX1RUTCh0aGlzLG90aGVyKQkoKHUxNikoKChvdGhlcik8PDgpfCgweDAwZmYmKHRoaXMpKSkpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuY19kdW1wX3R0bCAoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgdHRsKQoreworCWlmIChuZXRpZl9tc2dfbGluayAoZGV2KSkKKwkJZGV2ZGJnIChkZXYsICJuZXQxMDgwICVzLSVzIHR0bCAweCV4IHRoaXMgPSAlZCwgb3RoZXIgPSAlZCIsCisJCQlkZXYtPnVkZXYtPmJ1cy0+YnVzX25hbWUsIGRldi0+dWRldi0+ZGV2cGF0aCwKKwkJCXR0bCwgVFRMX1RISVMgKHR0bCksIFRUTF9PVEhFUiAodHRsKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgbmV0MTA4MF9yZXNldCAoc3RydWN0IHVzYm5ldCAqZGV2KQoreworCXUxNgkJdXNiY3RsLCBzdGF0dXMsIHR0bDsKKwl1MTYJCSp2cCA9IGttYWxsb2MgKHNpemVvZiAodTE2KSwgR0ZQX0tFUk5FTCk7CisJaW50CQlyZXR2YWw7CisKKwlpZiAoIXZwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8vIG5jX2R1bXBfcmVnaXN0ZXJzIChkZXYpOworCisJaWYgKChyZXR2YWwgPSBuY19yZWdpc3Rlcl9yZWFkIChkZXYsIFJFR19TVEFUVVMsIHZwKSkgPCAwKSB7CisJCWRiZyAoImNhbid0IHJlYWQgJXMtJXMgc3RhdHVzOiAlZCIsCisJCQlkZXYtPnVkZXYtPmJ1cy0+YnVzX25hbWUsIGRldi0+dWRldi0+ZGV2cGF0aCwgcmV0dmFsKTsKKwkJZ290byBkb25lOworCX0KKwlzdGF0dXMgPSAqdnA7CisJbmNfZHVtcF9zdGF0dXMgKGRldiwgc3RhdHVzKTsKKworCWlmICgocmV0dmFsID0gbmNfcmVnaXN0ZXJfcmVhZCAoZGV2LCBSRUdfVVNCQ1RMLCB2cCkpIDwgMCkgeworCQlkYmcgKCJjYW4ndCByZWFkIFVTQkNUTCwgJWQiLCByZXR2YWwpOworCQlnb3RvIGRvbmU7CisJfQorCXVzYmN0bCA9ICp2cDsKKwluY19kdW1wX3VzYmN0bCAoZGV2LCB1c2JjdGwpOworCisJbmNfcmVnaXN0ZXJfd3JpdGUgKGRldiwgUkVHX1VTQkNUTCwKKwkJCVVTQkNUTF9GTFVTSF9USElTIHwgVVNCQ1RMX0ZMVVNIX09USEVSKTsKKworCWlmICgocmV0dmFsID0gbmNfcmVnaXN0ZXJfcmVhZCAoZGV2LCBSRUdfVFRMLCB2cCkpIDwgMCkgeworCQlkYmcgKCJjYW4ndCByZWFkIFRUTCwgJWQiLCByZXR2YWwpOworCQlnb3RvIGRvbmU7CisJfQorCXR0bCA9ICp2cDsKKwkvLyBuY19kdW1wX3R0bCAoZGV2LCB0dGwpOworCisJbmNfcmVnaXN0ZXJfd3JpdGUgKGRldiwgUkVHX1RUTCwKKwkJCU1LX1RUTCAoTkNfUkVBRF9UVExfTVMsIFRUTF9PVEhFUiAodHRsKSkgKTsKKwlkYmcgKCIlczogYXNzaWduZWQgVFRMLCAlZCBtcyIsIGRldi0+bmV0LT5uYW1lLCBOQ19SRUFEX1RUTF9NUyk7CisKKwlpZiAobmV0aWZfbXNnX2xpbmsgKGRldikpCisJCWRldmluZm8gKGRldiwgInBvcnQgJWMsIHBlZXIgJXNjb25uZWN0ZWQiLAorCQkJKHN0YXR1cyAmIFNUQVRVU19QT1JUX0EpID8gJ0EnIDogJ0InLAorCQkJKHN0YXR1cyAmIFNUQVRVU19DT05OX09USEVSKSA/ICIiIDogImRpcyIKKwkJCSk7CisJcmV0dmFsID0gMDsKKworZG9uZToKKwlrZnJlZSAodnApOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgbmV0MTA4MF9jaGVja19jb25uZWN0IChzdHJ1Y3QgdXNibmV0ICpkZXYpCit7CisJaW50CQkJcmV0dmFsOworCXUxNgkJCXN0YXR1czsKKwl1MTYJCQkqdnAgPSBrbWFsbG9jIChzaXplb2YgKHUxNiksIEdGUF9LRVJORUwpOworCisJaWYgKCF2cCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dmFsID0gbmNfcmVnaXN0ZXJfcmVhZCAoZGV2LCBSRUdfU1RBVFVTLCB2cCk7CisJc3RhdHVzID0gKnZwOworCWtmcmVlICh2cCk7CisJaWYgKHJldHZhbCAhPSAwKSB7CisJCWRiZyAoIiVzIG5ldDEwODBfY2hlY2tfY29ubiByZWFkIC0gJWQiLCBkZXYtPm5ldC0+bmFtZSwgcmV0dmFsKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJaWYgKChzdGF0dXMgJiBTVEFUVVNfQ09OTl9PVEhFUikgIT0gU1RBVFVTX0NPTk5fT1RIRVIpCisJCXJldHVybiAtRU5PTElOSzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbmNfZmx1c2hfY29tcGxldGUgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJa2ZyZWUgKHVyYi0+Y29udGV4dCk7CisJdXNiX2ZyZWVfdXJiKHVyYik7Cit9CisKK3N0YXRpYyB2b2lkIG5jX2Vuc3VyZV9zeW5jIChzdHJ1Y3QgdXNibmV0ICpkZXYpCit7CisJZGV2LT5mcmFtZV9lcnJvcnMrKzsKKwlpZiAoZGV2LT5mcmFtZV9lcnJvcnMgPiA1KSB7CisJCXN0cnVjdCB1cmIJCSp1cmI7CisJCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJKnJlcTsKKwkJaW50CQkJc3RhdHVzOworCisJCS8qIFNlbmQgYSBmbHVzaCAqLworCQl1cmIgPSB1c2JfYWxsb2NfdXJiICgwLCBTTEFCX0FUT01JQyk7CisJCWlmICghdXJiKQorCQkJcmV0dXJuOworCisJCXJlcSA9IGttYWxsb2MgKHNpemVvZiAqcmVxLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFyZXEpIHsKKwkJCXVzYl9mcmVlX3VyYiAodXJiKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXJlcS0+YlJlcXVlc3RUeXBlID0gVVNCX0RJUl9PVVQKKwkJCXwgVVNCX1RZUEVfVkVORE9SCisJCQl8IFVTQl9SRUNJUF9ERVZJQ0U7CisJCXJlcS0+YlJlcXVlc3QgPSBSRVFVRVNUX1JFR0lTVEVSOworCQlyZXEtPndWYWx1ZSA9IGNwdV90b19sZTE2IChVU0JDVExfRkxVU0hfVEhJUworCQkJCXwgVVNCQ1RMX0ZMVVNIX09USEVSKTsKKwkJcmVxLT53SW5kZXggPSBjcHVfdG9fbGUxNiAoUkVHX1VTQkNUTCk7CisJCXJlcS0+d0xlbmd0aCA9IGNwdV90b19sZTE2ICgwKTsKKworCQkvKiBxdWV1ZSBhbiBhc3luYyBjb250cm9sIHJlcXVlc3QsIHdlIGRvbid0IG5lZWQKKwkJICogdG8gZG8gYW55dGhpbmcgd2hlbiBpdCBmaW5pc2hlcyBleGNlcHQgY2xlYW4gdXAuCisJCSAqLworCQl1c2JfZmlsbF9jb250cm9sX3VyYiAodXJiLCBkZXYtPnVkZXYsCisJCQl1c2Jfc25kY3RybHBpcGUgKGRldi0+dWRldiwgMCksCisJCQkodW5zaWduZWQgY2hhciAqKSByZXEsCisJCQlOVUxMLCAwLAorCQkJbmNfZmx1c2hfY29tcGxldGUsIHJlcSk7CisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCQlpZiAoc3RhdHVzKSB7CisJCQlrZnJlZSAocmVxKTsKKwkJCXVzYl9mcmVlX3VyYiAodXJiKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmIChuZXRpZl9tc2dfcnhfZXJyIChkZXYpKQorCQkJZGV2ZGJnIChkZXYsICJmbHVzaCBuZXQxMDgwOyB0b28gbWFueSBmcmFtaW5nIGVycm9ycyIpOworCQlkZXYtPmZyYW1lX2Vycm9ycyA9IDA7CisJfQorfQorCitzdGF0aWMgaW50IG5ldDEwODBfcnhfZml4dXAgKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbmNfaGVhZGVyCSpoZWFkZXI7CisJc3RydWN0IG5jX3RyYWlsZXIJKnRyYWlsZXI7CisJdTE2CQkJaGRyX2xlbiwgcGFja2V0X2xlbjsKKworCWlmICghKHNrYi0+bGVuICYgMHgwMSkKKwkJCXx8IE1JTl9GUkFNRUQgPiBza2ItPmxlbgorCQkJfHwgc2tiLT5sZW4gPiBGUkFNRURfU0laRSAoZGV2LT5uZXQtPm10dSkpIHsKKwkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkJZGJnICgicnggZnJhbWVzaXplICVkIHJhbmdlICVkLi4lZCBtdHUgJWQiLCBza2ItPmxlbiwKKwkJCShpbnQpTUlOX0ZSQU1FRCwgKGludClGUkFNRURfU0laRSAoZGV2LT5uZXQtPm10dSksCisJCQlkZXYtPm5ldC0+bXR1KTsKKwkJbmNfZW5zdXJlX3N5bmMgKGRldik7CisJCXJldHVybiAwOworCX0KKworCWhlYWRlciA9IChzdHJ1Y3QgbmNfaGVhZGVyICopIHNrYi0+ZGF0YTsKKwloZHJfbGVuID0gbGUxNl90b19jcHVwICgmaGVhZGVyLT5oZHJfbGVuKTsKKwlwYWNrZXRfbGVuID0gbGUxNl90b19jcHVwICgmaGVhZGVyLT5wYWNrZXRfbGVuKTsKKwlpZiAoRlJBTUVEX1NJWkUgKHBhY2tldF9sZW4pID4gTUFYX1BBQ0tFVCkgeworCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQlkYmcgKCJwYWNrZXQgdG9vIGJpZywgJWQiLCBwYWNrZXRfbGVuKTsKKwkJbmNfZW5zdXJlX3N5bmMgKGRldik7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoaGRyX2xlbiA8IE1JTl9IRUFERVIpIHsKKwkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkJZGJnICgiaGVhZGVyIHRvbyBzaG9ydCwgJWQiLCBoZHJfbGVuKTsKKwkJbmNfZW5zdXJlX3N5bmMgKGRldik7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoaGRyX2xlbiA+IE1JTl9IRUFERVIpIHsKKwkJLy8gb3V0IG9mIGJhbmQgZGF0YSBmb3IgdXM/CisJCWRiZyAoImhlYWRlciBPT0IsICVkIGJ5dGVzIiwgaGRyX2xlbiAtIE1JTl9IRUFERVIpOworCQluY19lbnN1cmVfc3luYyAoZGV2KTsKKwkJLy8gc3dpdGNoICh2ZW5kb3IvcHJvZHVjdCBpZHMpIHsgLi4uIH0KKwl9CisJc2tiX3B1bGwgKHNrYiwgaGRyX2xlbik7CisKKwl0cmFpbGVyID0gKHN0cnVjdCBuY190cmFpbGVyICopCisJCShza2ItPmRhdGEgKyBza2ItPmxlbiAtIHNpemVvZiAqdHJhaWxlcik7CisJc2tiX3RyaW0gKHNrYiwgc2tiLT5sZW4gLSBzaXplb2YgKnRyYWlsZXIpOworCisJaWYgKChwYWNrZXRfbGVuICYgMHgwMSkgPT0gMCkgeworCQlpZiAoc2tiLT5kYXRhIFtwYWNrZXRfbGVuXSAhPSBQQURfQllURSkgeworCQkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkJCWRiZyAoImJhZCBwYWQiKTsKKwkJCXJldHVybiAwOworCQl9CisJCXNrYl90cmltIChza2IsIHNrYi0+bGVuIC0gMSk7CisJfQorCWlmIChza2ItPmxlbiAhPSBwYWNrZXRfbGVuKSB7CisJCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJCWRiZyAoImJhZCBwYWNrZXQgbGVuICVkIChleHBlY3RlZCAlZCkiLAorCQkJc2tiLT5sZW4sIHBhY2tldF9sZW4pOworCQluY19lbnN1cmVfc3luYyAoZGV2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChoZWFkZXItPnBhY2tldF9pZCAhPSBnZXRfdW5hbGlnbmVkICgmdHJhaWxlci0+cGFja2V0X2lkKSkgeworCQlkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CisJCWRiZyAoIigyKyBkcm9wcGVkKSByeCBwYWNrZXRfaWQgbWlzbWF0Y2ggMHgleCAweCV4IiwKKwkJCWxlMTZfdG9fY3B1IChoZWFkZXItPnBhY2tldF9pZCksCisJCQlsZTE2X3RvX2NwdSAodHJhaWxlci0+cGFja2V0X2lkKSk7CisJCXJldHVybiAwOworCX0KKyNpZiAwCisJZGV2ZGJnIChkZXYsICJmcmFtZSA8cnggaCAlZCBwICVkIGlkICVkIiwgaGVhZGVyLT5oZHJfbGVuLAorCQloZWFkZXItPnBhY2tldF9sZW4sIGhlYWRlci0+cGFja2V0X2lkKTsKKyNlbmRpZgorCWRldi0+ZnJhbWVfZXJyb3JzID0gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK25ldDEwODBfdHhfZml4dXAgKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZsYWdzKQoreworCWludAkJCXBhZGxlbjsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnNrYjI7CisKKwlwYWRsZW4gPSAoKHNrYi0+bGVuICsgc2l6ZW9mIChzdHJ1Y3QgbmNfaGVhZGVyKQorCQkJKyBzaXplb2YgKHN0cnVjdCBuY190cmFpbGVyKSkgJiAweDAxKSA/IDAgOiAxOworCWlmICghc2tiX2Nsb25lZCAoc2tiKSkgeworCQlpbnQJaGVhZHJvb20gPSBza2JfaGVhZHJvb20gKHNrYik7CisJCWludAl0YWlscm9vbSA9IHNrYl90YWlscm9vbSAoc2tiKTsKKworCQlpZiAoKHBhZGxlbiArIHNpemVvZiAoc3RydWN0IG5jX3RyYWlsZXIpKSA8PSB0YWlscm9vbQorCQkJICAgICYmIHNpemVvZiAoc3RydWN0IG5jX2hlYWRlcikgPD0gaGVhZHJvb20pCisJCQkvKiBUaGVyZSdzIGVub3VnaCBoZWFkIGFuZCB0YWlsIHJvb20gKi8KKwkJCXJldHVybiBza2I7CisKKwkJaWYgKChzaXplb2YgKHN0cnVjdCBuY19oZWFkZXIpICsgcGFkbGVuCisJCQkJCSsgc2l6ZW9mIChzdHJ1Y3QgbmNfdHJhaWxlcikpIDwKKwkJCQkoaGVhZHJvb20gKyB0YWlscm9vbSkpIHsKKwkJCS8qIFRoZXJlJ3MgZW5vdWdoIHRvdGFsIHJvb20sIHNvIGp1c3QgcmVhZGp1c3QgKi8KKwkJCXNrYi0+ZGF0YSA9IG1lbW1vdmUgKHNrYi0+aGVhZAorCQkJCQkJKyBzaXplb2YgKHN0cnVjdCBuY19oZWFkZXIpLAorCQkJCQkgICAgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJCQlza2ItPnRhaWwgPSBza2ItPmRhdGEgKyBza2ItPmxlbjsKKwkJCXJldHVybiBza2I7CisJCX0KKwl9CisKKwkvKiBDcmVhdGUgYSBuZXcgc2tiIHRvIHVzZSB3aXRoIHRoZSBjb3JyZWN0IHNpemUgKi8KKwlza2IyID0gc2tiX2NvcHlfZXhwYW5kIChza2IsCisJCQkJc2l6ZW9mIChzdHJ1Y3QgbmNfaGVhZGVyKSwKKwkJCQlzaXplb2YgKHN0cnVjdCBuY190cmFpbGVyKSArIHBhZGxlbiwKKwkJCQlmbGFncyk7CisJZGV2X2tmcmVlX3NrYl9hbnkgKHNrYik7CisJcmV0dXJuIHNrYjI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JbmV0MTA4MF9pbmZvID0geworCS5kZXNjcmlwdGlvbiA9CSJOZXRDaGlwIFR1cmJvQ09OTkVDVCIsCisJLmZsYWdzID0JRkxBR19GUkFNSU5HX05DLAorCS5yZXNldCA9CW5ldDEwODBfcmVzZXQsCisJLmNoZWNrX2Nvbm5lY3QgPW5ldDEwODBfY2hlY2tfY29ubmVjdCwKKwkucnhfZml4dXAgPQluZXQxMDgwX3J4X2ZpeHVwLAorCS50eF9maXh1cCA9CW5ldDEwODBfdHhfZml4dXAsCit9OworCisjZW5kaWYgLyogQ09ORklHX1VTQl9ORVQxMDgwICovCisKKworDAorI2lmZGVmIENPTkZJR19VU0JfUEwyMzAxCisjZGVmaW5lCUhBVkVfSEFSRFdBUkUKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogUHJvbGlmaWMgUEwtMjMwMS9QTC0yMzAyIGRyaXZlciAuLi4gaHR0cDovL3d3dy5wcm9saWZpY3RlY2guY29tCisgKgorICogVGhlIHByb3RvY29sIGFuZCBoYW5kc2hha2luZyB1c2VkIGhlcmUgc2hvdWxkIGJlIGJ1Zy1jb21wYXRpYmxlCisgKiB3aXRoIHRoZSBMaW51eCAyLjIgInBsdXNiIiBkcml2ZXIsIGJ5IERldGkgRmxpZWdsLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBCaXRzIDAtNCBjYW4gYmUgdXNlZCBmb3Igc29mdHdhcmUgaGFuZHNoYWtpbmc7IHRoZXkncmUgc2V0IGZyb20KKyAqIG9uZSBlbmQsIGNsZWFyZWQgZnJvbSB0aGUgb3RoZXIsICJyZWFkIiB3aXRoIHRoZSBpbnRlcnJ1cHQgYnl0ZS4KKyAqLworI2RlZmluZQlQTF9TX0VOCQkoMTw8NykJCS8qIChmZWF0dXJlIG9ubHkpIHN1c3BlbmQgZW5hYmxlICovCisvKiByZXNlcnZlZCBiaXQgLS0gcnggcmVhZHkgKDYpID8gKi8KKyNkZWZpbmUJUExfVFhfUkVBRFkJKDE8PDUpCQkvKiAoaW50ZXJydXB0IG9ubHkpIHRyYW5zbWl0IHJlYWR5ICovCisjZGVmaW5lCVBMX1JFU0VUX09VVAkoMTw8NCkJCS8qIHJlc2V0IG91dHB1dCBwaXBlICovCisjZGVmaW5lCVBMX1JFU0VUX0lOCSgxPDwzKQkJLyogcmVzZXQgaW5wdXQgcGlwZSAqLworI2RlZmluZQlQTF9UWF9DCQkoMTw8MikJCS8qIHRyYW5zbWlzc2lvbiBjb21wbGV0ZSAqLworI2RlZmluZQlQTF9UWF9SRVEJKDE8PDEpCQkvKiB0cmFuc21pc3Npb24gcmVjZWl2ZWQgKi8KKyNkZWZpbmUJUExfUEVFUl9FCSgxPDwwKQkJLyogcGVlciBleGlzdHMgKi8KKworc3RhdGljIGlubGluZSBpbnQKK3BsX3ZlbmRvcl9yZXEgKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVxLCB1OCB2YWwsIHU4IGluZGV4KQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2cgKGRldi0+dWRldiwKKwkJdXNiX3JjdmN0cmxwaXBlIChkZXYtPnVkZXYsIDApLAorCQlyZXEsCisJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQl2YWwsIGluZGV4LAorCQlOVUxMLCAwLAorCQlDT05UUk9MX1RJTUVPVVRfTVMpOworfQorCitzdGF0aWMgaW5saW5lIGludAorcGxfY2xlYXJfUXVpY2tMaW5rX2ZlYXR1cmVzIChzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCB2YWwpCit7CisJcmV0dXJuIHBsX3ZlbmRvcl9yZXEgKGRldiwgMSwgKHU4KSB2YWwsIDApOworfQorCitzdGF0aWMgaW5saW5lIGludAorcGxfc2V0X1F1aWNrTGlua19mZWF0dXJlcyAoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgdmFsKQoreworCXJldHVybiBwbF92ZW5kb3JfcmVxIChkZXYsIDMsICh1OCkgdmFsLCAwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBwbF9yZXNldCAoc3RydWN0IHVzYm5ldCAqZGV2KQoreworCS8qIHNvbWUgdW5pdHMgc2VlbSB0byBuZWVkIHRoaXMgcmVzZXQsIG90aGVycyByZWplY3QgaXQgdXR0ZXJseS4KKwkgKiBGSVhNRSBiZSBtb3JlIGxpa2UgIm5hcGxpbmsiIG9yIHdpbmRvd3MgZHJpdmVycy4KKwkgKi8KKwkodm9pZCkgcGxfc2V0X1F1aWNrTGlua19mZWF0dXJlcyAoZGV2LAorCQlQTF9TX0VOfFBMX1JFU0VUX09VVHxQTF9SRVNFVF9JTnxQTF9QRUVSX0UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCXByb2xpZmljX2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0JIlByb2xpZmljIFBMLTIzMDEvUEwtMjMwMiIsCisJLmZsYWdzID0JRkxBR19OT19TRVRJTlQsCisJCS8qIHNvbWUgUEwtMjMwMiB2ZXJzaW9ucyBzZWVtIHRvIGZhaWwgdXNiX3NldF9pbnRlcmZhY2UoKSAqLworCS5yZXNldCA9CXBsX3Jlc2V0LAorfTsKKworI2VuZGlmIC8qIENPTkZJR19VU0JfUEwyMzAxICovCisKKwwKKyNpZmRlZiBDT05GSUdfVVNCX0tDMjE5MAorI2RlZmluZSBIQVZFX0hBUkRXQVJFCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGtjMjE5MF9pbmZvID0geworCS5kZXNjcmlwdGlvbiA9ICAiS0MgVGVjaG5vbG9neSBLQy0xOTAiLAorfTsKKyNlbmRpZiAvKiBDT05GSUdfVVNCX0tDMjE5MCAqLworCisMCisjaWZkZWYJQ09ORklHX1VTQl9BUk1MSU5VWAorI2RlZmluZQlIQVZFX0hBUkRXQVJFCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEludGVsJ3MgU0EtMTEwMCBjaGlwIGludGVncmF0ZXMgYmFzaWMgVVNCIHN1cHBvcnQsIGFuZCBpcyB1c2VkCisgKiBpbiBQREFzIGxpa2Ugc29tZSBpUGFxcywgdGhlIFlvcHksIHNvbWUgWmF1cnVzIG1vZGVscywgYW5kIG1vcmUuCisgKiBXaGVuIHRoZXkgcnVuIExpbnV4LCBhcmNoL2FybS9tYWNoLXNhMTEwMC91c2ItZXRoLmMgbWF5IGJlIHVzZWQgdG8KKyAqIG5ldHdvcmsgdXNpbmcgbWluaW1hbCBVU0IgZnJhbWluZyBkYXRhLgorICoKKyAqIFRoaXMgZGVzY3JpYmVzIHRoZSBkcml2ZXIgY3VycmVudGx5IGluIHN0YW5kYXJkIEFSTSBMaW51eCBrZXJuZWxzLgorICogVGhlIFphdXJ1cyB1c2VzIGEgZGlmZmVyZW50IGRyaXZlciAoc2VlIGxhdGVyKS4KKyAqCisgKiBQWEEyNXggYW5kIFBYQTIxMCB1c2UgWFNjYWxlIGNvcmVzIChBUk0gdjVURSkgd2l0aCBiZXR0ZXIgVVNCIHN1cHBvcnQKKyAqIGFuZCBkaWZmZXJlbnQgVVNCIGVuZHBvaW50IG51bWJlcmluZyB0aGFuIHRoZSBTQTExMDAgZGV2aWNlcy4gIFRoZQorICogbWFjaC1weGEvdXNiLWV0aC5jIGRyaXZlciByZS11c2VzIHRoZSBkZXZpY2UgaWRzIGZyb20gbWFjaC1zYTExMDAKKyAqIHNvIHdlIHJlbHkgb24gdGhlIGVuZHBvaW50IGRlc2NyaXB0b3JzLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JbGludXhkZXZfaW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPQkiTGludXggRGV2aWNlIiwKKwkuY2hlY2tfY29ubmVjdCA9IGFsd2F5c19jb25uZWN0ZWQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCXlvcHlfaW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPQkiWW9weSIsCisJLmNoZWNrX2Nvbm5lY3QgPSBhbHdheXNfY29ubmVjdGVkLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwlibG9iX2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0JIkJvb3QgTG9hZGVyIE9CamVjdCIsCisJLmNoZWNrX2Nvbm5lY3QgPSBhbHdheXNfY29ubmVjdGVkLAorfTsKKworI2VuZGlmCS8qIENPTkZJR19VU0JfQVJNTElOVVggKi8KKworDAorI2lmZGVmIENPTkZJR19VU0JfWkFVUlVTCisjZGVmaW5lCUhBVkVfSEFSRFdBUkUKKworI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFphdXJ1cyBpcyBhbHNvIGEgU0EtMTExMCBiYXNlZCBQREEsIGJ1dCBvbmUgdXNpbmcgYSBkaWZmZXJlbnQgZHJpdmVyCisgKiAoYW5kIGZyYW1pbmcpIGZvciBpdHMgVVNCIHNsYXZlL2dhZGdldCBjb250cm9sbGVyIHRoYW4gdGhlIGNhc2UgYWJvdmUuCisgKgorICogRm9yIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhhdCBkcml2ZXIsIHRoZSBtYWluIHdheSB0aGF0IGZyYW1pbmcgaXMKKyAqIG5vbnN0YW5kYXJkIChhbHNvIGZyb20gcGVyc3BlY3RpdmUgb2YgdGhlIENEQyBldGhlcm5ldCBtb2RlbCEpIGlzIGEKKyAqIGNyYzMyLCBhZGRlZCB0byBoZWxwIGRldGVjdCB3aGVuIHNvbWUgc2ExMTAwIHVzYi10by1tZW1vcnkgRE1BIGVycmF0YQorICogaGF2ZW4ndCBiZWVuIGZ1bGx5IHdvcmtlZCBhcm91bmQuICBBbHNvLCBhbGwgWmF1cmlpIHVzZSB0aGUgc2FtZQorICogZGVmYXVsdCBFdGhlcm5ldCBhZGRyZXNzLgorICoKKyAqIFBYQSBiYXNlZCBtb2RlbHMgdXNlIHRoZSBzYW1lIGZyYW1pbmcsIGFuZCBhbHNvIGNhbid0IGltcGxlbWVudAorICogc2V0X2ludGVyZmFjZSBwcm9wZXJseS4KKyAqCisgKiBBbGwga25vd24gWmF1cmlpIGxpZSBhYm91dCB0aGVpciBzdGFuZGFyZHMgY29uZm9ybWFuY2UuICBNb3N0IGxpZSBieQorICogc2F5aW5nIHRoZXkgc3VwcG9ydCBDREMgRXRoZXJuZXQuICBTb21lIGxpZSBhbmQgc2F5IHRoZXkgc3VwcG9ydCBDREMKKyAqIE1ETE0gKGFzIGlmIGZvciBhY2Nlc3MgdG8gY2VsbCBwaG9uZSBtb2RlbXMpLiAgU29tZW9uZSwgcGxlYXNlIGJlYXQgCisgKiBvbiBTaGFycCBmb3IgYSB3aGlsZSB3aXRoIGEgY2x1ZXN0aWNrLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCit6YXVydXNfdHhfZml4dXAgKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZsYWdzKQoreworCWludAkJCXBhZGxlbjsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnNrYjI7CisKKwlwYWRsZW4gPSAyOworCWlmICghc2tiX2Nsb25lZCAoc2tiKSkgeworCQlpbnQJdGFpbHJvb20gPSBza2JfdGFpbHJvb20gKHNrYik7CisJCWlmICgocGFkbGVuICsgNCkgPD0gdGFpbHJvb20pCisJCQlnb3RvIGRvbmU7CisJfQorCXNrYjIgPSBza2JfY29weV9leHBhbmQgKHNrYiwgMCwgNCArIHBhZGxlbiwgZmxhZ3MpOworCWRldl9rZnJlZV9za2JfYW55IChza2IpOworCXNrYiA9IHNrYjI7CisJaWYgKHNrYikgeworCQl1MzIJCWZjczsKK2RvbmU6CisJCWZjcyA9IGNyYzMyX2xlICh+MCwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJCWZjcyA9IH5mY3M7CisKKwkJKnNrYl9wdXQgKHNrYiwgMSkgPSBmY3MgICAgICAgJiAweGZmOworCQkqc2tiX3B1dCAoc2tiLCAxKSA9IChmY3M+PiA4KSAmIDB4ZmY7CisJCSpza2JfcHV0IChza2IsIDEpID0gKGZjcz4+MTYpICYgMHhmZjsKKwkJKnNrYl9wdXQgKHNrYiwgMSkgPSAoZmNzPj4yNCkgJiAweGZmOworCX0KKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCXphdXJ1c19zbDV4MDBfaW5mbyA9IHsKKwkuZGVzY3JpcHRpb24gPQkiU2hhcnAgWmF1cnVzIFNMLTV4MDAiLAorCS5mbGFncyA9CUZMQUdfRlJBTUlOR19aLAorCS5jaGVja19jb25uZWN0ID0gYWx3YXlzX2Nvbm5lY3RlZCwKKwkuYmluZCA9CQlnZW5lcmljX2NkY19iaW5kLAorCS51bmJpbmQgPQljZGNfdW5iaW5kLAorCS50eF9maXh1cCA9IAl6YXVydXNfdHhfZml4dXAsCit9OworI2RlZmluZQlaQVVSVVNfU1RST05HQVJNX0lORk8JKCh1bnNpZ25lZCBsb25nKSZ6YXVydXNfc2w1eDAwX2luZm8pCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JemF1cnVzX3B4YV9pbmZvID0geworCS5kZXNjcmlwdGlvbiA9CSJTaGFycCBaYXVydXMsIFBYQS0yeHggYmFzZWQiLAorCS5mbGFncyA9CUZMQUdfRlJBTUlOR19aLAorCS5jaGVja19jb25uZWN0ID0gYWx3YXlzX2Nvbm5lY3RlZCwKKwkuYmluZCA9CQlnZW5lcmljX2NkY19iaW5kLAorCS51bmJpbmQgPQljZGNfdW5iaW5kLAorCS50eF9maXh1cCA9IAl6YXVydXNfdHhfZml4dXAsCit9OworI2RlZmluZQlaQVVSVVNfUFhBX0lORk8JCSgodW5zaWduZWQgbG9uZykmemF1cnVzX3B4YV9pbmZvKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCXphdXJ1c19weGFfbWRsbV9pbmZvID0geworCS5kZXNjcmlwdGlvbiA9CSJTaGFycCBaYXVydXMsIFBYQS0yNTUgYmFzZWQiLAorCS5mbGFncyA9CUZMQUdfRlJBTUlOR19aLAorCS5jaGVja19jb25uZWN0ID0gYWx3YXlzX2Nvbm5lY3RlZCwKKwkudHhfZml4dXAgPSAJemF1cnVzX3R4X2ZpeHVwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwlvbHltcHVzX214bF9pbmZvID0geworCS5kZXNjcmlwdGlvbiA9CSJPbHltcHVzIFIxMDAwIiwKKwkuZmxhZ3MgPQlGTEFHX0ZSQU1JTkdfWiwKKwkuY2hlY2tfY29ubmVjdCA9IGFsd2F5c19jb25uZWN0ZWQsCisJLmJpbmQgPQkJZ2VuZXJpY19jZGNfYmluZCwKKwkudW5iaW5kID0JY2RjX3VuYmluZCwKKwkudHhfZml4dXAgPSAJemF1cnVzX3R4X2ZpeHVwLAorfTsKKyNkZWZpbmUJT0xZTVBVU19NWExfSU5GTwkoKHVuc2lnbmVkIGxvbmcpJm9seW1wdXNfbXhsX2luZm8pCisKKyNlbHNlCisKKy8qIGJsYWNrbGlzdCBhbGwgdGhvc2UgZGV2aWNlcyAqLworI2RlZmluZQlaQVVSVVNfU1RST05HQVJNX0lORk8JMAorI2RlZmluZQlaQVVSVVNfUFhBX0lORk8JCTAKKyNkZWZpbmUJT0xZTVBVU19NWExfSU5GTwkwCisKKyNlbmRpZgorCisMCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBOZXR3b3JrIERldmljZSBEcml2ZXIgKHBlZXIgbGluayB0byAiSG9zdCBEZXZpY2UiLCBmcm9tIFVTQiBob3N0KQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgdXNibmV0X2NoYW5nZV9tdHUgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIGludCBuZXdfbXR1KQoreworCXN0cnVjdCB1c2JuZXQJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisKKwlpZiAobmV3X210dSA8PSBNSU5fUEFDS0VUIHx8IG5ld19tdHUgPiBNQVhfUEFDS0VUKQorCQlyZXR1cm4gLUVJTlZBTDsKKyNpZmRlZglDT05GSUdfVVNCX05FVDEwODAKKwlpZiAoKChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncykgJiBGTEFHX0ZSQU1JTkdfTkMpKSB7CisJCWlmIChGUkFNRURfU0laRSAobmV3X210dSkgPiBNQVhfUEFDS0VUKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorI2VuZGlmCisjaWZkZWYJQ09ORklHX1VTQl9HRU5FU1lTCisJaWYgKCgoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MpICYgRkxBR19GUkFNSU5HX0dMKQorCQkJJiYgbmV3X210dSA+IEdMX01BWF9QQUNLRVRfTEVOKQorCQlyZXR1cm4gLUVJTlZBTDsKKyNlbmRpZgorCS8vIG5vIHNlY29uZCB6ZXJvLWxlbmd0aCBwYWNrZXQgcmVhZCB3YW50ZWQgYWZ0ZXIgbXR1LXNpemVkIHBhY2tldHMKKwlpZiAoKChuZXdfbXR1ICsgc2l6ZW9mIChzdHJ1Y3QgZXRoaGRyKSkgJSBkZXYtPm1heHBhY2tldCkgPT0gMCkKKwkJcmV0dXJuIC1FRE9NOworCW5ldC0+bXR1ID0gbmV3X210dTsKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp1c2JuZXRfZ2V0X3N0YXRzIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCB1c2JuZXQJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisJcmV0dXJuICZkZXYtPnN0YXRzOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBzb21lIExLIDIuNCBIQ0RzIG9vcHNlZCBpZiB3ZSBmcmVlZCBvciByZXN1Ym1pdHRlZCB1cmJzIGZyb20KKyAqIGNvbXBsZXRpb24gY2FsbGJhY2tzLiAgMi41IHNob3VsZCBoYXZlIGZpeGVkIHRob3NlIGJ1Z3MuLi4KKyAqLworCitzdGF0aWMgdm9pZCBkZWZlcl9iaCAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBza19idWZmX2hlYWQJKmxpc3QgPSBza2ItPmxpc3Q7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmxpc3QtPmxvY2ssIGZsYWdzKTsKKwlfX3NrYl91bmxpbmsgKHNrYiwgbGlzdCk7CisJc3Bpbl91bmxvY2sgKCZsaXN0LT5sb2NrKTsKKwlzcGluX2xvY2sgKCZkZXYtPmRvbmUubG9jayk7CisJX19za2JfcXVldWVfdGFpbCAoJmRldi0+ZG9uZSwgc2tiKTsKKwlpZiAoZGV2LT5kb25lLnFsZW4gPT0gMSkKKwkJdGFza2xldF9zY2hlZHVsZSAoJmRldi0+YmgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPmRvbmUubG9jaywgZmxhZ3MpOworfQorCisvKiBzb21lIHdvcmsgY2FuJ3QgYmUgZG9uZSBpbiB0YXNrbGV0cywgc28gd2UgdXNlIGtldmVudGQKKyAqCisgKiBOT1RFOiAgYW5ub3lpbmcgYXN5bW1ldHJ5OiAgaWYgaXQncyBhY3RpdmUsIHNjaGVkdWxlX3dvcmsoKSBmYWlscywKKyAqIGJ1dCB0YXNrbGV0X3NjaGVkdWxlKCkgZG9lc24ndC4gIGhvcGUgdGhlIGZhaWx1cmUgaXMgcmFyZS4KKyAqLworc3RhdGljIHZvaWQgZGVmZXJfa2V2ZW50IChzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCB3b3JrKQoreworCXNldF9iaXQgKHdvcmssICZkZXYtPmZsYWdzKTsKKwlpZiAoIXNjaGVkdWxlX3dvcmsgKCZkZXYtPmtldmVudCkpCisJCWRldmVyciAoZGV2LCAia2V2ZW50ICVkIG1heSBoYXZlIGJlZW4gZHJvcHBlZCIsIHdvcmspOworCWVsc2UKKwkJZGV2ZGJnIChkZXYsICJrZXZlbnQgJWQgc2NoZWR1bGVkIiwgd29yayk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHJ4X2NvbXBsZXRlIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworc3RhdGljIHZvaWQgcnhfc3VibWl0IChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYiwgaW50IGZsYWdzKQoreworCXN0cnVjdCBza19idWZmCQkqc2tiOworCXN0cnVjdCBza2JfZGF0YQkJKmVudHJ5OworCWludAkJCXJldHZhbCA9IDA7CisJdW5zaWduZWQgbG9uZwkJbG9ja2ZsYWdzOworCXNpemVfdAkJCXNpemU7CisKKyNpZmRlZiBDT05GSUdfVVNCX05FVDEwODAKKwlpZiAoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfTkMpCisJCXNpemUgPSBGUkFNRURfU0laRSAoZGV2LT5uZXQtPm10dSk7CisJZWxzZQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1VTQl9HRU5FU1lTCisJaWYgKGRldi0+ZHJpdmVyX2luZm8tPmZsYWdzICYgRkxBR19GUkFNSU5HX0dMKQorCQlzaXplID0gR0xfUkNWX0JVRl9TSVpFOworCWVsc2UKKyNlbmRpZgorI2lmZGVmIENPTkZJR19VU0JfWkFVUlVTCisJaWYgKGRldi0+ZHJpdmVyX2luZm8tPmZsYWdzICYgRkxBR19GUkFNSU5HX1opCisJCXNpemUgPSA2ICsgKHNpemVvZiAoc3RydWN0IGV0aGhkcikgKyBkZXYtPm5ldC0+bXR1KTsKKwllbHNlCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX1JORElTCisJaWYgKGRldi0+ZHJpdmVyX2luZm8tPmZsYWdzICYgRkxBR19GUkFNSU5HX1JOKQorCQlzaXplID0gUk5ESVNfTUFYX1RSQU5TRkVSOworCWVsc2UKKyNlbmRpZgorI2lmZGVmIENPTkZJR19VU0JfQVg4ODE3WAorCWlmIChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncyAmIEZMQUdfRlJBTUlOR19BWCkKKwkJc2l6ZSA9IDIwNDg7CisJZWxzZQorI2VuZGlmCisJCXNpemUgPSAoc2l6ZW9mIChzdHJ1Y3QgZXRoaGRyKSArIGRldi0+bmV0LT5tdHUpOworCisJaWYgKChza2IgPSBhbGxvY19za2IgKHNpemUgKyBORVRfSVBfQUxJR04sIGZsYWdzKSkgPT0gTlVMTCkgeworCQlpZiAobmV0aWZfbXNnX3J4X2VyciAoZGV2KSkKKwkJCWRldmRiZyAoZGV2LCAibm8gcnggc2tiIik7CisJCWRlZmVyX2tldmVudCAoZGV2LCBFVkVOVF9SWF9NRU1PUlkpOworCQl1c2JfZnJlZV91cmIgKHVyYik7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUgKHNrYiwgTkVUX0lQX0FMSUdOKTsKKworCWVudHJ5ID0gKHN0cnVjdCBza2JfZGF0YSAqKSBza2ItPmNiOworCWVudHJ5LT51cmIgPSB1cmI7CisJZW50cnktPmRldiA9IGRldjsKKwllbnRyeS0+c3RhdGUgPSByeF9zdGFydDsKKwllbnRyeS0+bGVuZ3RoID0gMDsKKworCXVzYl9maWxsX2J1bGtfdXJiICh1cmIsIGRldi0+dWRldiwgZGV2LT5pbiwKKwkJc2tiLT5kYXRhLCBzaXplLCByeF9jb21wbGV0ZSwgc2tiKTsKKwl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9BU1lOQ19VTkxJTks7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+cnhxLmxvY2ssIGxvY2tmbGFncyk7CisKKwlpZiAobmV0aWZfcnVubmluZyAoZGV2LT5uZXQpCisJCQkmJiBuZXRpZl9kZXZpY2VfcHJlc2VudCAoZGV2LT5uZXQpCisJCQkmJiAhdGVzdF9iaXQgKEVWRU5UX1JYX0hBTFQsICZkZXYtPmZsYWdzKSkgeworCQlzd2l0Y2ggKHJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpKXsgCisJCWNhc2UgLUVQSVBFOgorCQkJZGVmZXJfa2V2ZW50IChkZXYsIEVWRU5UX1JYX0hBTFQpOworCQkJYnJlYWs7CisJCWNhc2UgLUVOT01FTToKKwkJCWRlZmVyX2tldmVudCAoZGV2LCBFVkVOVF9SWF9NRU1PUlkpOworCQkJYnJlYWs7CisJCWNhc2UgLUVOT0RFVjoKKwkJCWlmIChuZXRpZl9tc2dfaWZkb3duIChkZXYpKQorCQkJCWRldmRiZyAoZGV2LCAiZGV2aWNlIGdvbmUiKTsKKwkJCW5ldGlmX2RldmljZV9kZXRhY2ggKGRldi0+bmV0KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWYgKG5ldGlmX21zZ19yeF9lcnIgKGRldikpCisJCQkJZGV2ZGJnIChkZXYsICJyeCBzdWJtaXQsICVkIiwgcmV0dmFsKTsKKwkJCXRhc2tsZXRfc2NoZWR1bGUgKCZkZXYtPmJoKTsKKwkJCWJyZWFrOworCQljYXNlIDA6CisJCQlfX3NrYl9xdWV1ZV90YWlsICgmZGV2LT5yeHEsIHNrYik7CisJCX0KKwl9IGVsc2UgeworCQlpZiAobmV0aWZfbXNnX2lmZG93biAoZGV2KSkKKwkJCWRldmRiZyAoZGV2LCAicng6IHN0b3BwZWQiKTsKKwkJcmV0dmFsID0gLUVOT0xJTks7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPnJ4cS5sb2NrLCBsb2NrZmxhZ3MpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkgKHNrYik7CisJCXVzYl9mcmVlX3VyYiAodXJiKTsKKwl9Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGlubGluZSB2b2lkIHJ4X3Byb2Nlc3MgKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAoZGV2LT5kcml2ZXJfaW5mby0+cnhfZml4dXAKKwkJCSYmICFkZXYtPmRyaXZlcl9pbmZvLT5yeF9maXh1cCAoZGV2LCBza2IpKQorCQlnb3RvIGVycm9yOworCS8vIGVsc2UgbmV0d29yayBzdGFjayByZW1vdmVzIGV4dHJhIGJ5dGUgaWYgd2UgZm9yY2VkIGEgc2hvcnQgcGFja2V0CisKKwlpZiAoc2tiLT5sZW4pCisJCXNrYl9yZXR1cm4gKGRldiwgc2tiKTsKKwllbHNlIHsKKwkJaWYgKG5ldGlmX21zZ19yeF9lcnIgKGRldikpCisJCQlkZXZkYmcgKGRldiwgImRyb3AiKTsKK2Vycm9yOgorCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlza2JfcXVldWVfdGFpbCAoJmRldi0+ZG9uZSwgc2tiKTsKKwl9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIHJ4X2NvbXBsZXRlIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBza19idWZmCQkqc2tiID0gKHN0cnVjdCBza19idWZmICopIHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgc2tiX2RhdGEJCSplbnRyeSA9IChzdHJ1Y3Qgc2tiX2RhdGEgKikgc2tiLT5jYjsKKwlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gZW50cnktPmRldjsKKwlpbnQJCQl1cmJfc3RhdHVzID0gdXJiLT5zdGF0dXM7CisKKwlza2JfcHV0IChza2IsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJZW50cnktPnN0YXRlID0gcnhfZG9uZTsKKwllbnRyeS0+dXJiID0gTlVMTDsKKworCXN3aXRjaCAodXJiX3N0YXR1cykgeworCSAgICAvLyBzdWNjZXNzCisJICAgIGNhc2UgMDoKKwkJaWYgKE1JTl9QQUNLRVQgPiBza2ItPmxlbiB8fCBza2ItPmxlbiA+IE1BWF9QQUNLRVQpIHsKKwkJCWVudHJ5LT5zdGF0ZSA9IHJ4X2NsZWFudXA7CisJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQlpZiAobmV0aWZfbXNnX3J4X2VyciAoZGV2KSkKKwkJCQlkZXZkYmcgKGRldiwgInJ4IGxlbmd0aCAlZCIsIHNrYi0+bGVuKTsKKwkJfQorCQlicmVhazsKKworCSAgICAvLyBzdGFsbHMgbmVlZCBtYW51YWwgcmVzZXQuIHRoaXMgaXMgcmFyZSAuLi4gZXhjZXB0IHRoYXQKKwkgICAgLy8gd2hlbiBnb2luZyB0aHJvdWdoIFVTQiAyLjAgVFRzLCB1bnBsdWcgYXBwZWFycyB0aGlzIHdheS4KKwkgICAgLy8gd2UgYXZvaWQgdGhlIGhpZ2hzcGVlZCB2ZXJzaW9uIG9mIHRoZSBFVElNRU9VVC9FSUxTRVEKKwkgICAgLy8gc3Rvcm0sIHJlY292ZXJpbmcgYXMgbmVlZGVkLgorCSAgICBjYXNlIC1FUElQRToKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGVmZXJfa2V2ZW50IChkZXYsIEVWRU5UX1JYX0hBTFQpOworCQkvLyBGQUxMVEhST1VHSAorCisJICAgIC8vIHNvZnR3YXJlLWRyaXZlbiBpbnRlcmZhY2Ugc2h1dGRvd24KKwkgICAgY2FzZSAtRUNPTk5SRVNFVDoJCS8vIGFzeW5jIHVubGluaworCSAgICBjYXNlIC1FU0hVVERPV046CQkvLyBoYXJkd2FyZSBnb25lCisJCWlmIChuZXRpZl9tc2dfaWZkb3duIChkZXYpKQorCQkJZGV2ZGJnIChkZXYsICJyeCBzaHV0ZG93biwgY29kZSAlZCIsIHVyYl9zdGF0dXMpOworCQlnb3RvIGJsb2NrOworCisJICAgIC8vIHdlIGdldCBjb250cm9sbGVyIGkvbyBmYXVsdHMgZHVyaW5nIGtodWJkIGRpc2Nvbm5lY3QoKSBkZWxheXMuCisJICAgIC8vIHRocm90dGxlIGRvd24gcmVzdWJtaXRzLCB0byBhdm9pZCBsb2cgZmxvb2RzOyBqdXN0IHRlbXBvcmFyaWx5LAorCSAgICAvLyBzbyB3ZSBzdGlsbCByZWNvdmVyIHdoZW4gdGhlIGZhdWx0IGlzbid0IGEga2h1YmQgZGVsYXkuCisJICAgIGNhc2UgLUVQUk9UTzoJCS8vIGVoY2kKKwkgICAgY2FzZSAtRVRJTUVET1VUOgkJLy8gb2hjaQorCSAgICBjYXNlIC1FSUxTRVE6CQkvLyB1aGNpCisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCWlmICghdGltZXJfcGVuZGluZyAoJmRldi0+ZGVsYXkpKSB7CisJCQltb2RfdGltZXIgKCZkZXYtPmRlbGF5LCBqaWZmaWVzICsgVEhST1RUTEVfSklGRklFUyk7CisJCQlpZiAobmV0aWZfbXNnX2xpbmsgKGRldikpCisJCQkJZGV2ZGJnIChkZXYsICJyeCB0aHJvdHRsZSAlZCIsIHVyYl9zdGF0dXMpOworCQl9CitibG9jazoKKwkJZW50cnktPnN0YXRlID0gcnhfY2xlYW51cDsKKwkJZW50cnktPnVyYiA9IHVyYjsKKwkJdXJiID0gTlVMTDsKKwkJYnJlYWs7CisKKwkgICAgLy8gZGF0YSBvdmVycnVuIC4uLiBmbHVzaCBmaWZvPworCSAgICBjYXNlIC1FT1ZFUkZMT1c6CisJCWRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJLy8gRkFMTFRIUk9VR0gKKwkgICAgCisJICAgIGRlZmF1bHQ6CisJCWVudHJ5LT5zdGF0ZSA9IHJ4X2NsZWFudXA7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCWlmIChuZXRpZl9tc2dfcnhfZXJyIChkZXYpKQorCQkJZGV2ZGJnIChkZXYsICJyeCBzdGF0dXMgJWQiLCB1cmJfc3RhdHVzKTsKKwkJYnJlYWs7CisJfQorCisJZGVmZXJfYmggKGRldiwgc2tiKTsKKworCWlmICh1cmIpIHsKKwkJaWYgKG5ldGlmX3J1bm5pbmcgKGRldi0+bmV0KQorCQkJCSYmICF0ZXN0X2JpdCAoRVZFTlRfUlhfSEFMVCwgJmRldi0+ZmxhZ3MpKSB7CisJCQlyeF9zdWJtaXQgKGRldiwgdXJiLCBHRlBfQVRPTUlDKTsKKwkJCXJldHVybjsKKwkJfQorCQl1c2JfZnJlZV91cmIgKHVyYik7CisJfQorCWlmIChuZXRpZl9tc2dfcnhfZXJyIChkZXYpKQorCQlkZXZkYmcgKGRldiwgIm5vIHJlYWQgcmVzdWJtaXR0ZWQiKTsKK30KKworc3RhdGljIHZvaWQgaW50cl9jb21wbGV0ZSAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNibmV0CSpkZXYgPSB1cmItPmNvbnRleHQ7CisJaW50CQlzdGF0dXMgPSB1cmItPnN0YXR1czsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJICAgIC8qIHN1Y2Nlc3MgKi8KKwkgICAgY2FzZSAwOgorCQlkZXYtPmRyaXZlcl9pbmZvLT5zdGF0dXMoZGV2LCB1cmIpOworCQlicmVhazsKKworCSAgICAvKiBzb2Z0d2FyZS1kcml2ZW4gaW50ZXJmYWNlIHNodXRkb3duICovCisJICAgIGNhc2UgLUVOT0VOVDoJCS8vIHVyYiBraWxsZWQKKwkgICAgY2FzZSAtRVNIVVRET1dOOgkJLy8gaGFyZHdhcmUgZ29uZQorCQlpZiAobmV0aWZfbXNnX2lmZG93biAoZGV2KSkKKwkJCWRldmRiZyAoZGV2LCAiaW50ciBzaHV0ZG93biwgY29kZSAlZCIsIHN0YXR1cyk7CisJCXJldHVybjsKKworCSAgICAvKiBOT1RFOiAgbm90IHRocm90dGxpbmcgbGlrZSBSWC9UWCwgc2luY2UgdGhpcyBlbmRwb2ludAorCSAgICAgKiBhbHJlYWR5IHBvbGxzIGluZnJlcXVlbnRseQorCSAgICAgKi8KKwkgICAgZGVmYXVsdDoKKwkJZGV2ZGJnIChkZXYsICJpbnRyIHN0YXR1cyAlZCIsIHN0YXR1cyk7CisJCWJyZWFrOworCX0KKworCWlmICghbmV0aWZfcnVubmluZyAoZGV2LT5uZXQpKQorCQlyZXR1cm47CisKKwltZW1zZXQodXJiLT50cmFuc2Zlcl9idWZmZXIsIDAsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cyAhPSAwICYmIG5ldGlmX21zZ190aW1lciAoZGV2KSkKKwkJZGV2ZXJyKGRldiwgImludHIgcmVzdWJtaXQgLS0+ICVkIiwgc3RhdHVzKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLy8gdW5saW5rIHBlbmRpbmcgcngvdHg7IGNvbXBsZXRpb24gaGFuZGxlcnMgZG8gYWxsIG90aGVyIGNsZWFudXAKKworc3RhdGljIGludCB1bmxpbmtfdXJicyAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxKQoreworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXN0cnVjdCBza19idWZmCQkqc2tiLCAqc2tibmV4dDsKKwlpbnQJCQljb3VudCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJnEtPmxvY2ssIGZsYWdzKTsKKwlmb3IgKHNrYiA9IHEtPm5leHQ7IHNrYiAhPSAoc3RydWN0IHNrX2J1ZmYgKikgcTsgc2tiID0gc2tibmV4dCkgeworCQlzdHJ1Y3Qgc2tiX2RhdGEJCSplbnRyeTsKKwkJc3RydWN0IHVyYgkJKnVyYjsKKwkJaW50CQkJcmV0dmFsOworCisJCWVudHJ5ID0gKHN0cnVjdCBza2JfZGF0YSAqKSBza2ItPmNiOworCQl1cmIgPSBlbnRyeS0+dXJiOworCQlza2JuZXh0ID0gc2tiLT5uZXh0OworCisJCS8vIGR1cmluZyBzb21lIFBNLWRyaXZlbiByZXN1bWUgc2NlbmFyaW9zLAorCQkvLyB0aGVzZSAoYXN5bmMpIHVubGlua3MgY29tcGxldGUgaW1tZWRpYXRlbHkKKwkJcmV0dmFsID0gdXNiX3VubGlua191cmIgKHVyYik7CisJCWlmIChyZXR2YWwgIT0gLUVJTlBST0dSRVNTICYmIHJldHZhbCAhPSAwKQorCQkJZGV2ZGJnIChkZXYsICJ1bmxpbmsgdXJiIGVyciwgJWQiLCByZXR2YWwpOworCQllbHNlCisJCQljb3VudCsrOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmcS0+bG9jaywgZmxhZ3MpOworCXJldHVybiBjb3VudDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvLyBwcmVjb25kaXRpb246IG5ldmVyIGNhbGxlZCBpbl9pbnRlcnJ1cHQKKworc3RhdGljIGludCB1c2JuZXRfc3RvcCAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlpbnQJCQl0ZW1wOworCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEICh1bmxpbmtfd2FrZXVwKTsgCisJREVDTEFSRV9XQUlUUVVFVUUgKHdhaXQsIGN1cnJlbnQpOworCisJbmV0aWZfc3RvcF9xdWV1ZSAobmV0KTsKKworCWlmIChuZXRpZl9tc2dfaWZkb3duIChkZXYpKQorCQlkZXZpbmZvIChkZXYsICJzdG9wIHN0YXRzOiByeC90eCAlbGQvJWxkLCBlcnJzICVsZC8lbGQiLAorCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzLCBkZXYtPnN0YXRzLnR4X3BhY2tldHMsIAorCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMsIGRldi0+c3RhdHMudHhfZXJyb3JzCisJCQkpOworCisJLy8gZW5zdXJlIHRoZXJlIGFyZSBubyBtb3JlIGFjdGl2ZSB1cmJzCisJYWRkX3dhaXRfcXVldWUgKCZ1bmxpbmtfd2FrZXVwLCAmd2FpdCk7CisJZGV2LT53YWl0ID0gJnVubGlua193YWtldXA7CisJdGVtcCA9IHVubGlua191cmJzIChkZXYsICZkZXYtPnR4cSkgKyB1bmxpbmtfdXJicyAoZGV2LCAmZGV2LT5yeHEpOworCisJLy8gbWF5YmUgd2FpdCBmb3IgZGVsZXRpb25zIHRvIGZpbmlzaC4KKwl3aGlsZSAoc2tiX3F1ZXVlX2xlbiAoJmRldi0+cnhxKQorCQkJJiYgc2tiX3F1ZXVlX2xlbiAoJmRldi0+dHhxKQorCQkJJiYgc2tiX3F1ZXVlX2xlbiAoJmRldi0+ZG9uZSkpIHsKKwkJbXNsZWVwKFVOTElOS19USU1FT1VUX01TKTsKKwkJaWYgKG5ldGlmX21zZ19pZmRvd24gKGRldikpCisJCQlkZXZkYmcgKGRldiwgIndhaXRlZCBmb3IgJWQgdXJiIGNvbXBsZXRpb25zIiwgdGVtcCk7CisJfQorCWRldi0+d2FpdCA9IE5VTEw7CisJcmVtb3ZlX3dhaXRfcXVldWUgKCZ1bmxpbmtfd2FrZXVwLCAmd2FpdCk7IAorCisJdXNiX2tpbGxfdXJiKGRldi0+aW50ZXJydXB0KTsKKworCS8qIGRlZmVycmVkIHdvcmsgKHRhc2ssIHRpbWVyLCBzb2Z0aXJxKSBtdXN0IGFsc28gc3RvcC4KKwkgKiBjYW4ndCBmbHVzaF9zY2hlZHVsZWRfd29yaygpIHVudGlsIHdlIGRyb3AgcnRubCAobGF0ZXIpLAorCSAqIGVsc2Ugd29ya2VycyBjb3VsZCBkZWFkbG9jazsgc28gbWFrZSB3b3JrZXJzIGEgTk9QLgorCSAqLworCWRldi0+ZmxhZ3MgPSAwOworCWRlbF90aW1lcl9zeW5jICgmZGV2LT5kZWxheSk7CisJdGFza2xldF9raWxsICgmZGV2LT5iaCk7CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLy8gcG9zdHMgcmVhZHMsIGFuZCBlbmFibGVzIHdyaXRlIHF1ZXVpbmcKKworLy8gcHJlY29uZGl0aW9uOiBuZXZlciBjYWxsZWQgaW5faW50ZXJydXB0CisKK3N0YXRpYyBpbnQgdXNibmV0X29wZW4gKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IHVzYm5ldAkJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisJaW50CQkJcmV0dmFsID0gMDsKKwlzdHJ1Y3QgZHJpdmVyX2luZm8JKmluZm8gPSBkZXYtPmRyaXZlcl9pbmZvOworCisJLy8gcHV0IGludG8gImtub3duIHNhZmUiIHN0YXRlCisJaWYgKGluZm8tPnJlc2V0ICYmIChyZXR2YWwgPSBpbmZvLT5yZXNldCAoZGV2KSkgPCAwKSB7CisJCWlmIChuZXRpZl9tc2dfaWZ1cCAoZGV2KSkKKwkJCWRldmluZm8gKGRldiwKKwkJCQkib3BlbiByZXNldCBmYWlsICglZCkgdXNibmV0IHVzYi0lcy0lcywgJXMiLAorCQkJCXJldHZhbCwKKwkJCQlkZXYtPnVkZXYtPmJ1cy0+YnVzX25hbWUsIGRldi0+dWRldi0+ZGV2cGF0aCwKKwkJCWluZm8tPmRlc2NyaXB0aW9uKTsKKwkJZ290byBkb25lOworCX0KKworCS8vIGluc2lzdCBwZWVyIGJlIGNvbm5lY3RlZAorCWlmIChpbmZvLT5jaGVja19jb25uZWN0ICYmIChyZXR2YWwgPSBpbmZvLT5jaGVja19jb25uZWN0IChkZXYpKSA8IDApIHsKKwkJaWYgKG5ldGlmX21zZ19pZnVwIChkZXYpKQorCQkJZGV2ZGJnIChkZXYsICJjYW4ndCBvcGVuOyAlZCIsIHJldHZhbCk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBzdGFydCBhbnkgc3RhdHVzIGludGVycnVwdCB0cmFuc2ZlciAqLworCWlmIChkZXYtPmludGVycnVwdCkgeworCQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAoZGV2LT5pbnRlcnJ1cHQsIEdGUF9LRVJORUwpOworCQlpZiAocmV0dmFsIDwgMCkgeworCQkJaWYgKG5ldGlmX21zZ19pZnVwIChkZXYpKQorCQkJCWRldmVyciAoZGV2LCAiaW50ciBzdWJtaXQgJWQiLCByZXR2YWwpOworCQkJZ290byBkb25lOworCQl9CisJfQorCisJbmV0aWZfc3RhcnRfcXVldWUgKG5ldCk7CisJaWYgKG5ldGlmX21zZ19pZnVwIChkZXYpKSB7CisJCWNoYXIJKmZyYW1pbmc7CisKKwkJaWYgKGRldi0+ZHJpdmVyX2luZm8tPmZsYWdzICYgRkxBR19GUkFNSU5HX05DKQorCQkJZnJhbWluZyA9ICJOZXRDaGlwIjsKKwkJZWxzZSBpZiAoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfR0wpCisJCQlmcmFtaW5nID0gIkdlbmVTeXMiOworCQllbHNlIGlmIChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncyAmIEZMQUdfRlJBTUlOR19aKQorCQkJZnJhbWluZyA9ICJaYXVydXMiOworCQllbHNlIGlmIChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncyAmIEZMQUdfRlJBTUlOR19STikKKwkJCWZyYW1pbmcgPSAiUk5ESVMiOworCQllbHNlIGlmIChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncyAmIEZMQUdfRlJBTUlOR19BWCkKKwkJCWZyYW1pbmcgPSAiQVNJWCI7CisJCWVsc2UKKwkJCWZyYW1pbmcgPSAic2ltcGxlIjsKKworCQlkZXZpbmZvIChkZXYsICJvcGVuOiBlbmFibGUgcXVldWVpbmcgIgorCQkJCSIocnggJWQsIHR4ICVkKSBtdHUgJWQgJXMgZnJhbWluZyIsCisJCQlSWF9RTEVOIChkZXYpLCBUWF9RTEVOIChkZXYpLCBkZXYtPm5ldC0+bXR1LAorCQkJZnJhbWluZyk7CisJfQorCisJLy8gZGVsYXkgcG9zdGluZyByZWFkcyB1bnRpbCB3ZSdyZSBmdWxseSBvcGVuCisJdGFza2xldF9zY2hlZHVsZSAoJmRldi0+YmgpOworZG9uZToKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCB1c2JuZXRfZ2V0X2RydmluZm8gKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCXN0cm5jcHkgKGluZm8tPmRyaXZlciwgZHJpdmVyX25hbWUsIHNpemVvZiBpbmZvLT5kcml2ZXIpOworCXN0cm5jcHkgKGluZm8tPnZlcnNpb24sIERSSVZFUl9WRVJTSU9OLCBzaXplb2YgaW5mby0+dmVyc2lvbik7CisJc3RybmNweSAoaW5mby0+ZndfdmVyc2lvbiwgZGV2LT5kcml2ZXJfaW5mby0+ZGVzY3JpcHRpb24sCisJCXNpemVvZiBpbmZvLT5md192ZXJzaW9uKTsKKwl1c2JfbWFrZV9wYXRoIChkZXYtPnVkZXYsIGluZm8tPmJ1c19pbmZvLCBzaXplb2YgaW5mby0+YnVzX2luZm8pOworfQorCitzdGF0aWMgdTMyIHVzYm5ldF9nZXRfbGluayAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCisJLyogSWYgYSBjaGVja19jb25uZWN0IGlzIGRlZmluZWQsIHJldHVybiBpdCdzIHJlc3VsdHMgKi8KKwlpZiAoZGV2LT5kcml2ZXJfaW5mby0+Y2hlY2tfY29ubmVjdCkKKwkJcmV0dXJuIGRldi0+ZHJpdmVyX2luZm8tPmNoZWNrX2Nvbm5lY3QgKGRldikgPT0gMDsKKworCS8qIE90aGVyd2lzZSwgd2UncmUgdXAgdG8gYXZvaWQgYnJlYWtpbmcgc2NyaXB0cyAqLworCXJldHVybiAxOworfQorCitzdGF0aWMgdTMyIHVzYm5ldF9nZXRfbXNnbGV2ZWwgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCXJldHVybiBkZXYtPm1zZ19lbmFibGU7Cit9CisKK3N0YXRpYyB2b2lkIHVzYm5ldF9zZXRfbXNnbGV2ZWwgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHUzMiBsZXZlbCkKK3sKKwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCisJZGV2LT5tc2dfZW5hYmxlID0gbGV2ZWw7Cit9CisKK3N0YXRpYyBpbnQgdXNibmV0X2lvY3RsIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQoreworI2lmZGVmIE5FRURfTUlJCisJeworCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisKKwlpZiAoZGV2LT5taWkubWRpb19yZWFkICE9IE5VTEwgJiYgZGV2LT5taWkubWRpb193cml0ZSAhPSBOVUxMKQorCQlyZXR1cm4gZ2VuZXJpY19taWlfaW9jdGwoJmRldi0+bWlpLCBpZl9taWkocnEpLCBjbWQsIE5VTEwpOworCX0KKyNlbmRpZgorCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogd29yayB0aGF0IGNhbm5vdCBiZSBkb25lIGluIGludGVycnVwdCBjb250ZXh0IHVzZXMga2V2ZW50ZC4KKyAqCisgKiBOT1RFOiAgd2l0aCAyLjUgd2UgY291bGQgZG8gbW9yZSBvZiB0aGlzIHVzaW5nIGNvbXBsZXRpb24gY2FsbGJhY2tzLAorICogZXNwZWNpYWxseSBub3cgdGhhdCBjb250cm9sIHRyYW5zZmVycyBjYW4gYmUgcXVldWVkLgorICovCitzdGF0aWMgdm9pZAora2V2ZW50ICh2b2lkICpkYXRhKQoreworCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSBkYXRhOworCWludAkJCXN0YXR1czsKKworCS8qIHVzYl9jbGVhcl9oYWx0KCkgbmVlZHMgYSB0aHJlYWQgY29udGV4dCAqLworCWlmICh0ZXN0X2JpdCAoRVZFTlRfVFhfSEFMVCwgJmRldi0+ZmxhZ3MpKSB7CisJCXVubGlua191cmJzIChkZXYsICZkZXYtPnR4cSk7CisJCXN0YXR1cyA9IHVzYl9jbGVhcl9oYWx0IChkZXYtPnVkZXYsIGRldi0+b3V0KTsKKwkJaWYgKHN0YXR1cyA8IDAgJiYgc3RhdHVzICE9IC1FUElQRSkgeworCQkJaWYgKG5ldGlmX21zZ190eF9lcnIgKGRldikpCisJCQkJZGV2ZXJyIChkZXYsICJjYW4ndCBjbGVhciB0eCBoYWx0LCBzdGF0dXMgJWQiLAorCQkJCQlzdGF0dXMpOworCQl9IGVsc2UgeworCQkJY2xlYXJfYml0IChFVkVOVF9UWF9IQUxULCAmZGV2LT5mbGFncyk7CisJCQluZXRpZl93YWtlX3F1ZXVlIChkZXYtPm5ldCk7CisJCX0KKwl9CisJaWYgKHRlc3RfYml0IChFVkVOVF9SWF9IQUxULCAmZGV2LT5mbGFncykpIHsKKwkJdW5saW5rX3VyYnMgKGRldiwgJmRldi0+cnhxKTsKKwkJc3RhdHVzID0gdXNiX2NsZWFyX2hhbHQgKGRldi0+dWRldiwgZGV2LT5pbik7CisJCWlmIChzdGF0dXMgPCAwICYmIHN0YXR1cyAhPSAtRVBJUEUpIHsKKwkJCWlmIChuZXRpZl9tc2dfcnhfZXJyIChkZXYpKQorCQkJCWRldmVyciAoZGV2LCAiY2FuJ3QgY2xlYXIgcnggaGFsdCwgc3RhdHVzICVkIiwKKwkJCQkJc3RhdHVzKTsKKwkJfSBlbHNlIHsKKwkJCWNsZWFyX2JpdCAoRVZFTlRfUlhfSEFMVCwgJmRldi0+ZmxhZ3MpOworCQkJdGFza2xldF9zY2hlZHVsZSAoJmRldi0+YmgpOworCQl9CisJfQorCisJLyogdGFza2xldCBjb3VsZCByZXN1Ym1pdCBpdHNlbGYgZm9yZXZlciBpZiBtZW1vcnkgaXMgdGlnaHQgKi8KKwlpZiAodGVzdF9iaXQgKEVWRU5UX1JYX01FTU9SWSwgJmRldi0+ZmxhZ3MpKSB7CisJCXN0cnVjdCB1cmIJKnVyYiA9IE5VTEw7CisKKwkJaWYgKG5ldGlmX3J1bm5pbmcgKGRldi0+bmV0KSkKKwkJCXVyYiA9IHVzYl9hbGxvY191cmIgKDAsIEdGUF9LRVJORUwpOworCQllbHNlCisJCQljbGVhcl9iaXQgKEVWRU5UX1JYX01FTU9SWSwgJmRldi0+ZmxhZ3MpOworCQlpZiAodXJiICE9IE5VTEwpIHsKKwkJCWNsZWFyX2JpdCAoRVZFTlRfUlhfTUVNT1JZLCAmZGV2LT5mbGFncyk7CisJCQlyeF9zdWJtaXQgKGRldiwgdXJiLCBHRlBfS0VSTkVMKTsKKwkJCXRhc2tsZXRfc2NoZWR1bGUgKCZkZXYtPmJoKTsKKwkJfQorCX0KKworCWlmIChkZXYtPmZsYWdzKQorCQlkZXZkYmcgKGRldiwgImtldmVudCBkb25lLCBmbGFncyA9IDB4JWx4IiwKKwkJCWRldi0+ZmxhZ3MpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZSAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHNrYl9kYXRhCQkqZW50cnkgPSAoc3RydWN0IHNrYl9kYXRhICopIHNrYi0+Y2I7CisJc3RydWN0IHVzYm5ldAkJKmRldiA9IGVudHJ5LT5kZXY7CisKKwlpZiAodXJiLT5zdGF0dXMgPT0gMCkgeworCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBlbnRyeS0+bGVuZ3RoOworCX0gZWxzZSB7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisKKwkJc3dpdGNoICh1cmItPnN0YXR1cykgeworCQljYXNlIC1FUElQRToKKwkJCWRlZmVyX2tldmVudCAoZGV2LCBFVkVOVF9UWF9IQUxUKTsKKwkJCWJyZWFrOworCisJCS8qIHNvZnR3YXJlLWRyaXZlbiBpbnRlcmZhY2Ugc2h1dGRvd24gKi8KKwkJY2FzZSAtRUNPTk5SRVNFVDoJCS8vIGFzeW5jIHVubGluaworCQljYXNlIC1FU0hVVERPV046CQkvLyBoYXJkd2FyZSBnb25lCisJCQlicmVhazsKKworCQkvLyBsaWtlIHJ4LCB0eCBnZXRzIGNvbnRyb2xsZXIgaS9vIGZhdWx0cyBkdXJpbmcga2h1YmQgZGVsYXlzCisJCS8vIGFuZCBzbyBpdCB1c2VzIHRoZSBzYW1lIHRocm90dGxpbmcgbWVjaGFuaXNtLgorCQljYXNlIC1FUFJPVE86CQkvLyBlaGNpCisJCWNhc2UgLUVUSU1FRE9VVDoJLy8gb2hjaQorCQljYXNlIC1FSUxTRVE6CQkvLyB1aGNpCisJCQlpZiAoIXRpbWVyX3BlbmRpbmcgKCZkZXYtPmRlbGF5KSkgeworCQkJCW1vZF90aW1lciAoJmRldi0+ZGVsYXksCisJCQkJCWppZmZpZXMgKyBUSFJPVFRMRV9KSUZGSUVTKTsKKwkJCQlpZiAobmV0aWZfbXNnX2xpbmsgKGRldikpCisJCQkJCWRldmRiZyAoZGV2LCAidHggdGhyb3R0bGUgJWQiLAorCQkJCQkJCXVyYi0+c3RhdHVzKTsKKwkJCX0KKwkJCW5ldGlmX3N0b3BfcXVldWUgKGRldi0+bmV0KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWYgKG5ldGlmX21zZ190eF9lcnIgKGRldikpCisJCQkJZGV2ZGJnIChkZXYsICJ0eCBlcnIgJWQiLCBlbnRyeS0+dXJiLT5zdGF0dXMpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwl1cmItPmRldiA9IE5VTEw7CisJZW50cnktPnN0YXRlID0gdHhfZG9uZTsKKwlkZWZlcl9iaCAoZGV2LCBza2IpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCB1c2JuZXRfdHhfdGltZW91dCAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCXVubGlua191cmJzIChkZXYsICZkZXYtPnR4cSk7CisJdGFza2xldF9zY2hlZHVsZSAoJmRldi0+YmgpOworCisJLy8gRklYTUU6IGRldmljZSByZWNvdmVyeSAtLSByZXNldD8KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCB1c2JuZXRfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlpbnQJCQlsZW5ndGg7CisJaW50CQkJcmV0dmFsID0gTkVUX1hNSVRfU1VDQ0VTUzsKKwlzdHJ1Y3QgdXJiCQkqdXJiID0gTlVMTDsKKwlzdHJ1Y3Qgc2tiX2RhdGEJCSplbnRyeTsKKwlzdHJ1Y3QgZHJpdmVyX2luZm8JKmluZm8gPSBkZXYtPmRyaXZlcl9pbmZvOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworI2lmZGVmCUNPTkZJR19VU0JfTkVUMTA4MAorCXN0cnVjdCBuY19oZWFkZXIJKmhlYWRlciA9IE5VTEw7CisJc3RydWN0IG5jX3RyYWlsZXIJKnRyYWlsZXIgPSBOVUxMOworI2VuZGlmCS8qIENPTkZJR19VU0JfTkVUMTA4MCAqLworCisJLy8gc29tZSBkZXZpY2VzIHdhbnQgZnVua3kgVVNCLWxldmVsIGZyYW1pbmcsIGZvcgorCS8vIHdpbjMyIGRyaXZlciAodXN1YWxseSkgYW5kL29yIGhhcmR3YXJlIHF1aXJrcworCWlmIChpbmZvLT50eF9maXh1cCkgeworCQlza2IgPSBpbmZvLT50eF9maXh1cCAoZGV2LCBza2IsIEdGUF9BVE9NSUMpOworCQlpZiAoIXNrYikgeworCQkJaWYgKG5ldGlmX21zZ190eF9lcnIgKGRldikpCisJCQkJZGV2ZGJnIChkZXYsICJjYW4ndCB0eF9maXh1cCBza2IiKTsKKwkJCWdvdG8gZHJvcDsKKwkJfQorCX0KKwlsZW5ndGggPSBza2ItPmxlbjsKKworCWlmICghKHVyYiA9IHVzYl9hbGxvY191cmIgKDAsIEdGUF9BVE9NSUMpKSkgeworCQlpZiAobmV0aWZfbXNnX3R4X2VyciAoZGV2KSkKKwkJCWRldmRiZyAoZGV2LCAibm8gdXJiIik7CisJCWdvdG8gZHJvcDsKKwl9CisKKwllbnRyeSA9IChzdHJ1Y3Qgc2tiX2RhdGEgKikgc2tiLT5jYjsKKwllbnRyeS0+dXJiID0gdXJiOworCWVudHJ5LT5kZXYgPSBkZXY7CisJZW50cnktPnN0YXRlID0gdHhfc3RhcnQ7CisJZW50cnktPmxlbmd0aCA9IGxlbmd0aDsKKworCS8vIEZJWE1FOiByZW9yZ2FuaXplIGEgYml0LCBzbyB0aGF0IGZpeHVwKCkgZmlsbHMgb3V0IE5ldENoaXAKKwkvLyBmcmFtaW5nIHRvby4gKFBhY2tldCBJRCB1cGRhdGUgbmVlZHMgdGhlIHNwaW5sb2NrLi4uKQorCS8vIFsgQkVUVEVSOiAgd2UgYWxyZWFkeSBvd24gbmV0LT54bWl0X2xvY2ssIHRoYXQncyBlbm91Z2ggXQorCisjaWZkZWYJQ09ORklHX1VTQl9ORVQxMDgwCisJaWYgKGluZm8tPmZsYWdzICYgRkxBR19GUkFNSU5HX05DKSB7CisJCWhlYWRlciA9IChzdHJ1Y3QgbmNfaGVhZGVyICopIHNrYl9wdXNoIChza2IsIHNpemVvZiAqaGVhZGVyKTsKKwkJaGVhZGVyLT5oZHJfbGVuID0gY3B1X3RvX2xlMTYgKHNpemVvZiAoKmhlYWRlcikpOworCQloZWFkZXItPnBhY2tldF9sZW4gPSBjcHVfdG9fbGUxNiAobGVuZ3RoKTsKKwkJaWYgKCEoKHNrYi0+bGVuICsgc2l6ZW9mICp0cmFpbGVyKSAmIDB4MDEpKQorCQkJKnNrYl9wdXQgKHNrYiwgMSkgPSBQQURfQllURTsKKwkJdHJhaWxlciA9IChzdHJ1Y3QgbmNfdHJhaWxlciAqKSBza2JfcHV0IChza2IsIHNpemVvZiAqdHJhaWxlcik7CisJfQorI2VuZGlmCS8qIENPTkZJR19VU0JfTkVUMTA4MCAqLworCisJdXNiX2ZpbGxfYnVsa191cmIgKHVyYiwgZGV2LT51ZGV2LCBkZXYtPm91dCwKKwkJCXNrYi0+ZGF0YSwgc2tiLT5sZW4sIHR4X2NvbXBsZXRlLCBza2IpOworCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0FTWU5DX1VOTElOSzsKKworCS8qIGRvbid0IGFzc3VtZSB0aGUgaGFyZHdhcmUgaGFuZGxlcyBVU0JfWkVST19QQUNLRVQKKwkgKiBOT1RFOiAgc3RyaWN0bHkgY29uZm9ybWluZyBjZGMtZXRoZXIgZGV2aWNlcyBzaG91bGQgZXhwZWN0CisJICogdGhlIFpMUCBoZXJlLCBidXQgaWdub3JlIHRoZSBvbmUtYnl0ZSBwYWNrZXQuCisJICoKKwkgKiBGSVhNRSB6ZXJvIHRoYXQgYnl0ZSwgaWYgaXQgZG9lc24ndCByZXF1aXJlIGEgbmV3IHNrYi4KKwkgKi8KKwlpZiAoKGxlbmd0aCAlIGRldi0+bWF4cGFja2V0KSA9PSAwKQorCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgrKzsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmZGV2LT50eHEubG9jaywgZmxhZ3MpOworCisjaWZkZWYJQ09ORklHX1VTQl9ORVQxMDgwCisJaWYgKGluZm8tPmZsYWdzICYgRkxBR19GUkFNSU5HX05DKSB7CisJCWhlYWRlci0+cGFja2V0X2lkID0gY3B1X3RvX2xlMTYgKCh1MTYpZGV2LT5kZXZfcGFja2V0X2lkKyspOworCQlwdXRfdW5hbGlnbmVkIChoZWFkZXItPnBhY2tldF9pZCwgJnRyYWlsZXItPnBhY2tldF9pZCk7CisjaWYgMAorCQlkZXZkYmcgKGRldiwgImZyYW1lID50eCBoICVkIHAgJWQgaWQgJWQiLAorCQkJaGVhZGVyLT5oZHJfbGVuLCBoZWFkZXItPnBhY2tldF9sZW4sCisJCQloZWFkZXItPnBhY2tldF9pZCk7CisjZW5kaWYKKwl9CisjZW5kaWYJLyogQ09ORklHX1VTQl9ORVQxMDgwICovCisKKwlzd2l0Y2ggKChyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKSkpIHsKKwljYXNlIC1FUElQRToKKwkJbmV0aWZfc3RvcF9xdWV1ZSAobmV0KTsKKwkJZGVmZXJfa2V2ZW50IChkZXYsIEVWRU5UX1RYX0hBTFQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAobmV0aWZfbXNnX3R4X2VyciAoZGV2KSkKKwkJCWRldmRiZyAoZGV2LCAidHg6IHN1Ym1pdCB1cmIgZXJyICVkIiwgcmV0dmFsKTsKKwkJYnJlYWs7CisJY2FzZSAwOgorCQluZXQtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwkJX19za2JfcXVldWVfdGFpbCAoJmRldi0+dHhxLCBza2IpOworCQlpZiAoZGV2LT50eHEucWxlbiA+PSBUWF9RTEVOIChkZXYpKQorCQkJbmV0aWZfc3RvcF9xdWV1ZSAobmV0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+dHhxLmxvY2ssIGZsYWdzKTsKKworCWlmIChyZXR2YWwpIHsKKwkJaWYgKG5ldGlmX21zZ190eF9lcnIgKGRldikpCisJCQlkZXZkYmcgKGRldiwgImRyb3AsIGNvZGUgJWQiLCByZXR2YWwpOworZHJvcDoKKwkJcmV0dmFsID0gTkVUX1hNSVRfU1VDQ0VTUzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCWlmIChza2IpCisJCQlkZXZfa2ZyZWVfc2tiX2FueSAoc2tiKTsKKwkJdXNiX2ZyZWVfdXJiICh1cmIpOworCX0gZWxzZSBpZiAobmV0aWZfbXNnX3R4X3F1ZXVlZCAoZGV2KSkgeworCQlkZXZkYmcgKGRldiwgIj4gdHgsIGxlbiAlZCwgdHlwZSAweCV4IiwKKwkJCWxlbmd0aCwgc2tiLT5wcm90b2NvbCk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLy8gdGFza2xldCAod29yayBkZWZlcnJlZCBmcm9tIGNvbXBsZXRpb25zLCBpbl9pcnEpIG9yIHRpbWVyCisKK3N0YXRpYyB2b2lkIHVzYm5ldF9iaCAodW5zaWduZWQgbG9uZyBwYXJhbSkKK3sKKwlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gKHN0cnVjdCB1c2JuZXQgKikgcGFyYW07CisJc3RydWN0IHNrX2J1ZmYJCSpza2I7CisJc3RydWN0IHNrYl9kYXRhCQkqZW50cnk7CisKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlICgmZGV2LT5kb25lKSkpIHsKKwkJZW50cnkgPSAoc3RydWN0IHNrYl9kYXRhICopIHNrYi0+Y2I7CisJCXN3aXRjaCAoZW50cnktPnN0YXRlKSB7CisJCSAgICBjYXNlIHJ4X2RvbmU6CisJCQllbnRyeS0+c3RhdGUgPSByeF9jbGVhbnVwOworCQkJcnhfcHJvY2VzcyAoZGV2LCBza2IpOworCQkJY29udGludWU7CisJCSAgICBjYXNlIHR4X2RvbmU6CisJCSAgICBjYXNlIHJ4X2NsZWFudXA6CisJCQl1c2JfZnJlZV91cmIgKGVudHJ5LT51cmIpOworCQkJZGV2X2tmcmVlX3NrYiAoc2tiKTsKKwkJCWNvbnRpbnVlOworCQkgICAgZGVmYXVsdDoKKwkJCWRldmRiZyAoZGV2LCAiYm9ndXMgc2tiIHN0YXRlICVkIiwgZW50cnktPnN0YXRlKTsKKwkJfQorCX0KKworCS8vIHdhaXRpbmcgZm9yIGFsbCBwZW5kaW5nIHVyYnMgdG8gY29tcGxldGU/CisJaWYgKGRldi0+d2FpdCkgeworCQlpZiAoKGRldi0+dHhxLnFsZW4gKyBkZXYtPnJ4cS5xbGVuICsgZGV2LT5kb25lLnFsZW4pID09IDApIHsKKwkJCXdha2VfdXAgKGRldi0+d2FpdCk7CisJCX0KKworCS8vIG9yIGFyZSB3ZSBtYXliZSBzaG9ydCBhIGZldyB1cmJzPworCX0gZWxzZSBpZiAobmV0aWZfcnVubmluZyAoZGV2LT5uZXQpCisJCQkmJiBuZXRpZl9kZXZpY2VfcHJlc2VudCAoZGV2LT5uZXQpCisJCQkmJiAhdGltZXJfcGVuZGluZyAoJmRldi0+ZGVsYXkpCisJCQkmJiAhdGVzdF9iaXQgKEVWRU5UX1JYX0hBTFQsICZkZXYtPmZsYWdzKSkgeworCQlpbnQJdGVtcCA9IGRldi0+cnhxLnFsZW47CisJCWludAlxbGVuID0gUlhfUUxFTiAoZGV2KTsKKworCQlpZiAodGVtcCA8IHFsZW4pIHsKKwkJCXN0cnVjdCB1cmIJKnVyYjsKKwkJCWludAkJaTsKKworCQkJLy8gZG9uJ3QgcmVmaWxsIHRoZSBxdWV1ZSBhbGwgYXQgb25jZQorCQkJZm9yIChpID0gMDsgaSA8IDEwICYmIGRldi0+cnhxLnFsZW4gPCBxbGVuOyBpKyspIHsKKwkJCQl1cmIgPSB1c2JfYWxsb2NfdXJiICgwLCBHRlBfQVRPTUlDKTsKKwkJCQlpZiAodXJiICE9IE5VTEwpCisJCQkJCXJ4X3N1Ym1pdCAoZGV2LCB1cmIsIEdGUF9BVE9NSUMpOworCQkJfQorCQkJaWYgKHRlbXAgIT0gZGV2LT5yeHEucWxlbiAmJiBuZXRpZl9tc2dfbGluayAoZGV2KSkKKwkJCQlkZXZkYmcgKGRldiwgInJ4cWxlbiAlZCAtLT4gJWQiLAorCQkJCQkJdGVtcCwgZGV2LT5yeHEucWxlbik7CisJCQlpZiAoZGV2LT5yeHEucWxlbiA8IHFsZW4pCisJCQkJdGFza2xldF9zY2hlZHVsZSAoJmRldi0+YmgpOworCQl9CisJCWlmIChkZXYtPnR4cS5xbGVuIDwgVFhfUUxFTiAoZGV2KSkKKwkJCW5ldGlmX3dha2VfcXVldWUgKGRldi0+bmV0KTsKKwl9Cit9CisKKworDAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogVVNCIERldmljZSBEcml2ZXIgc3VwcG9ydAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisvLyBwcmVjb25kaXRpb246IG5ldmVyIGNhbGxlZCBpbl9pbnRlcnJ1cHQKKworc3RhdGljIHZvaWQgdXNibmV0X2Rpc2Nvbm5lY3QgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JuZXQJCSpkZXY7CisJc3RydWN0IHVzYl9kZXZpY2UJKnhkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UJKm5ldDsKKworCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuOworCisJeGRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCisJaWYgKG5ldGlmX21zZ19wcm9iZSAoZGV2KSkKKwkJZGV2aW5mbyAoZGV2LCAidW5yZWdpc3RlciB1c2JuZXQgdXNiLSVzLSVzLCAlcyIsCisJCQl4ZGV2LT5idXMtPmJ1c19uYW1lLCB4ZGV2LT5kZXZwYXRoLAorCQkJZGV2LT5kcml2ZXJfaW5mby0+ZGVzY3JpcHRpb24pOworCQorCW5ldCA9IGRldi0+bmV0OworCXVucmVnaXN0ZXJfbmV0ZGV2IChuZXQpOworCisJLyogd2UgZG9uJ3QgaG9sZCBydG5sIGhlcmUgLi4uICovCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsgKCk7CisKKwlpZiAoZGV2LT5kcml2ZXJfaW5mby0+dW5iaW5kKQorCQlkZXYtPmRyaXZlcl9pbmZvLT51bmJpbmQgKGRldiwgaW50Zik7CisKKwlmcmVlX25ldGRldihuZXQpOworCXVzYl9wdXRfZGV2ICh4ZGV2KTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHVzYm5ldF9ldGh0b29sX29wczsKKworLy8gcHJlY29uZGl0aW9uOiBuZXZlciBjYWxsZWQgaW5faW50ZXJydXB0CisKK3N0YXRpYyBpbnQKK3VzYm5ldF9wcm9iZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVkZXYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpwcm9kKQoreworCXN0cnVjdCB1c2JuZXQJCQkqZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlIAkJKm5ldDsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlCSppbnRlcmZhY2U7CisJc3RydWN0IGRyaXZlcl9pbmZvCQkqaW5mbzsKKwlzdHJ1Y3QgdXNiX2RldmljZQkJKnhkZXY7CisJaW50CQkJCXN0YXR1czsKKworCWluZm8gPSAoc3RydWN0IGRyaXZlcl9pbmZvICopIHByb2QtPmRyaXZlcl9pbmZvOworCWlmICghaW5mbykgeworCQlkZXZfZGJnICgmdWRldi0+ZGV2LCAiYmxhY2tsaXN0ZWQgYnkgJXNcbiIsIGRyaXZlcl9uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXhkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2ICh1ZGV2KTsKKwlpbnRlcmZhY2UgPSB1ZGV2LT5jdXJfYWx0c2V0dGluZzsKKworCXVzYl9nZXRfZGV2ICh4ZGV2KTsKKworCXN0YXR1cyA9IC1FTk9NRU07CisKKwkvLyBzZXQgdXAgb3VyIG93biByZWNvcmRzCisJbmV0ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCpkZXYpKTsKKwlpZiAoIW5ldCkgeworCQlkYmcgKCJjYW4ndCBrbWFsbG9jIGRldiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCWRldi0+dWRldiA9IHhkZXY7CisJZGV2LT5kcml2ZXJfaW5mbyA9IGluZm87CisJZGV2LT5tc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQgKG1zZ19sZXZlbCwgTkVUSUZfTVNHX0RSVgorCQkJCXwgTkVUSUZfTVNHX1BST0JFIHwgTkVUSUZfTVNHX0xJTkspOworCXNrYl9xdWV1ZV9oZWFkX2luaXQgKCZkZXYtPnJ4cSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCAoJmRldi0+dHhxKTsKKwlza2JfcXVldWVfaGVhZF9pbml0ICgmZGV2LT5kb25lKTsKKwlkZXYtPmJoLmZ1bmMgPSB1c2JuZXRfYmg7CisJZGV2LT5iaC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRldjsKKwlJTklUX1dPUksgKCZkZXYtPmtldmVudCwga2V2ZW50LCBkZXYpOworCWRldi0+ZGVsYXkuZnVuY3Rpb24gPSB1c2JuZXRfYmg7CisJZGV2LT5kZWxheS5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRldjsKKwlpbml0X3RpbWVyICgmZGV2LT5kZWxheSk7CisKKwlTRVRfTU9EVUxFX09XTkVSIChuZXQpOworCWRldi0+bmV0ID0gbmV0OworCXN0cmNweSAobmV0LT5uYW1lLCAidXNiJWQiKTsKKwltZW1jcHkgKG5ldC0+ZGV2X2FkZHIsIG5vZGVfaWQsIHNpemVvZiBub2RlX2lkKTsKKworI2lmIDAKKy8vIGRtYV9zdXBwb3J0ZWQoKSBpcyBkZWVwbHkgYnJva2VuIG9uIGFsbW9zdCBhbGwgYXJjaGl0ZWN0dXJlcworCS8vIHBvc3NpYmxlIHdpdGggc29tZSBFSENJIGNvbnRyb2xsZXJzCisJaWYgKGRtYV9zdXBwb3J0ZWQgKCZ1ZGV2LT5kZXYsIERNQV82NEJJVF9NQVNLKSkKKwkJbmV0LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CisjZW5kaWYKKworCW5ldC0+Y2hhbmdlX210dSA9IHVzYm5ldF9jaGFuZ2VfbXR1OworCW5ldC0+Z2V0X3N0YXRzID0gdXNibmV0X2dldF9zdGF0czsKKwluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IHVzYm5ldF9zdGFydF94bWl0OworCW5ldC0+b3BlbiA9IHVzYm5ldF9vcGVuOworCW5ldC0+c3RvcCA9IHVzYm5ldF9zdG9wOworCW5ldC0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUX0pJRkZJRVM7CisJbmV0LT50eF90aW1lb3V0ID0gdXNibmV0X3R4X3RpbWVvdXQ7CisJbmV0LT5kb19pb2N0bCA9IHVzYm5ldF9pb2N0bDsKKwluZXQtPmV0aHRvb2xfb3BzID0gJnVzYm5ldF9ldGh0b29sX29wczsKKworCS8vIGFsbG93IGRldmljZS1zcGVjaWZpYyBiaW5kL2luaXQgcHJvY2VkdXJlcworCS8vIE5PVEUgbmV0LT5uYW1lIHN0aWxsIG5vdCB1c2FibGUgLi4uCisJaWYgKGluZm8tPmJpbmQpIHsKKwkJc3RhdHVzID0gaW5mby0+YmluZCAoZGV2LCB1ZGV2KTsKKwkJLy8gaGV1cmlzdGljOiAgInVzYiVkIiBmb3IgbGlua3Mgd2Uga25vdyBhcmUgdHdvLWhvc3QsCisJCS8vIGVsc2UgImV0aCVkIiB3aGVuIHRoZXJlJ3MgcmVhc29uYWJsZSBkb3VidC4gIHVzZXJzcGFjZQorCQkvLyBjYW4gcmVuYW1lIHRoZSBsaW5rIGlmIGl0IGtub3dzIGJldHRlci4KKwkJaWYgKChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncyAmIEZMQUdfRVRIRVIpICE9IDAKKwkJCQkmJiAobmV0LT5kZXZfYWRkciBbMF0gJiAweDAyKSA9PSAwKQorCQkJc3RyY3B5IChuZXQtPm5hbWUsICJldGglZCIpOworCX0gZWxzZSBpZiAoIWluZm8tPmluIHx8IGluZm8tPm91dCkKKwkJc3RhdHVzID0gZ2V0X2VuZHBvaW50cyAoZGV2LCB1ZGV2KTsKKwllbHNlIHsKKwkJZGV2LT5pbiA9IHVzYl9yY3ZidWxrcGlwZSAoeGRldiwgaW5mby0+aW4pOworCQlkZXYtPm91dCA9IHVzYl9zbmRidWxrcGlwZSAoeGRldiwgaW5mby0+b3V0KTsKKwkJaWYgKCEoaW5mby0+ZmxhZ3MgJiBGTEFHX05PX1NFVElOVCkpCisJCQlzdGF0dXMgPSB1c2Jfc2V0X2ludGVyZmFjZSAoeGRldiwKKwkJCQlpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlciwKKwkJCQlpbnRlcmZhY2UtPmRlc2MuYkFsdGVybmF0ZVNldHRpbmcpOworCQllbHNlCisJCQlzdGF0dXMgPSAwOworCisJfQorCisJaWYgKHN0YXR1cyA9PSAwICYmIGRldi0+c3RhdHVzKQorCQlzdGF0dXMgPSBpbml0X3N0YXR1cyAoZGV2LCB1ZGV2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBvdXQxOworCisJZGV2LT5tYXhwYWNrZXQgPSB1c2JfbWF4cGFja2V0IChkZXYtPnVkZXYsIGRldi0+b3V0LCAxKTsKKwkKKwlTRVRfTkVUREVWX0RFVihuZXQsICZ1ZGV2LT5kZXYpOworCXN0YXR1cyA9IHJlZ2lzdGVyX25ldGRldiAobmV0KTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIG91dDM7CisJaWYgKG5ldGlmX21zZ19wcm9iZSAoZGV2KSkKKwkJZGV2aW5mbyAoZGV2LCAicmVnaXN0ZXIgdXNibmV0IGF0IHVzYi0lcy0lcywgJXMsICIKKwkJCQkiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLAorCQkJeGRldi0+YnVzLT5idXNfbmFtZSwgeGRldi0+ZGV2cGF0aCwKKwkJCWRldi0+ZHJpdmVyX2luZm8tPmRlc2NyaXB0aW9uLAorCQkJbmV0LT5kZXZfYWRkciBbMF0sIG5ldC0+ZGV2X2FkZHIgWzFdLAorCQkJbmV0LT5kZXZfYWRkciBbMl0sIG5ldC0+ZGV2X2FkZHIgWzNdLAorCQkJbmV0LT5kZXZfYWRkciBbNF0sIG5ldC0+ZGV2X2FkZHIgWzVdKTsKKworCS8vIG9rLCBpdCdzIHJlYWR5IHRvIGdvLgorCXVzYl9zZXRfaW50ZmRhdGEgKHVkZXYsIGRldik7CisKKwkvLyBzdGFydCBhcyBpZiB0aGUgbGluayBpcyB1cAorCW5ldGlmX2RldmljZV9hdHRhY2ggKG5ldCk7CisKKwlyZXR1cm4gMDsKKworb3V0MzoKKwlpZiAoaW5mby0+dW5iaW5kKQorCQlpbmZvLT51bmJpbmQgKGRldiwgdWRldik7CitvdXQxOgorCWZyZWVfbmV0ZGV2KG5ldCk7CitvdXQ6CisJdXNiX3B1dF9kZXYoeGRldik7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmCUNPTkZJR19QTQorCitzdGF0aWMgaW50IHVzYm5ldF9zdXNwZW5kIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgdTMyIHN0YXRlKQoreworCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCQorCW5ldGlmX2RldmljZV9kZXRhY2ggKGRldi0+bmV0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1c2JuZXRfcmVzdW1lIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCW5ldGlmX2RldmljZV9hdHRhY2ggKGRldi0+bmV0KTsKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UJLyogIUNPTkZJR19QTSAqLworCisjZGVmaW5lCXVzYm5ldF9zdXNwZW5kCU5VTEwKKyNkZWZpbmUJdXNibmV0X3Jlc3VtZQlOVUxMCisKKyNlbmRpZgkvKiBDT05GSUdfUE0gKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmbmRlZglIQVZFX0hBUkRXQVJFCisjZXJyb3IgWW91IG5lZWQgdG8gY29uZmlndXJlIHNvbWUgaGFyZHdhcmUgZm9yIHRoaXMgZHJpdmVyCisjZW5kaWYKKworLyoKKyAqIGNoaXAgdmVuZG9yIG5hbWVzIHdvbid0IG5vcm1hbGx5IGJlIG9uIHRoZSBjYWJsZXMsIGFuZAorICogbWF5IG5vdCBiZSBvbiB0aGUgZGV2aWNlLgorICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZAlwcm9kdWN0cyBbXSA9IHsKKworI2lmZGVmCUNPTkZJR19VU0JfQUxJX001NjMyCit7CisJVVNCX0RFVklDRSAoMHgwNDAyLCAweDU2MzIpLAkvLyBBTGkgZGVmYXVsdHMKKwkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJmFsaV9tNTYzMl9pbmZvLAorfSwKKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX1VTQl9BTjI3MjAKK3sKKwlVU0JfREVWSUNFICgweDA1NDcsIDB4MjcyMCksCS8vIEFuY2hvckNoaXBzIGRlZmF1bHRzCisJLmRyaXZlcl9pbmZvID0JKHVuc2lnbmVkIGxvbmcpICZhbjI3MjBfaW5mbywKK30sIHsKKwlVU0JfREVWSUNFICgweDA1NDcsIDB4MjcyNyksCS8vIFhpcmNvbSBQR1VORVQKKwkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJmFuMjcyMF9pbmZvLAorfSwKKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX1VTQl9CRUxLSU4KK3sKKwlVU0JfREVWSUNFICgweDA1MGQsIDB4MDAwNCksCS8vIEJlbGtpbgorCS5kcml2ZXJfaW5mbyA9CSh1bnNpZ25lZCBsb25nKSAmYmVsa2luX2luZm8sCit9LCB7CisJVVNCX0RFVklDRSAoMHgwNTZjLCAweDgxMDApLAkvLyBlVEVLCisJLmRyaXZlcl9pbmZvID0JKHVuc2lnbmVkIGxvbmcpICZiZWxraW5faW5mbywKK30sIHsKKwlVU0JfREVWSUNFICgweDA1MjUsIDB4OTkwMSksCS8vIEFkdmFuY2UgVVNCTkVUIChlVEVLKQorCS5kcml2ZXJfaW5mbyA9CSh1bnNpZ25lZCBsb25nKSAmYmVsa2luX2luZm8sCit9LAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX0FYODgxN1gKK3sKKwkvLyBMaW5rc3lzIFVTQjIwME0KKwlVU0JfREVWSUNFICgweDA3N2IsIDB4MjIyNiksCisJLmRyaXZlcl9pbmZvID0JKHVuc2lnbmVkIGxvbmcpICZheDg4MTd4X2luZm8sCit9LCB7CisJLy8gTmV0Z2VhciBGQTEyMAorCVVTQl9ERVZJQ0UgKDB4MDg0NiwgMHgxMDQwKSwKKwkuZHJpdmVyX2luZm8gPSAgKHVuc2lnbmVkIGxvbmcpICZuZXRnZWFyX2ZhMTIwX2luZm8sCit9LCB7CisJLy8gRExpbmsgRFVCLUUxMDAKKwlVU0JfREVWSUNFICgweDIwMDEsIDB4MWEwMCksCisJLmRyaXZlcl9pbmZvID0gICh1bnNpZ25lZCBsb25nKSAmZGxpbmtfZHViX2UxMDBfaW5mbywKK30sIHsKKwkvLyBJbnRlbGxpbmV0LCBTVCBMYWIgVVNCIEV0aGVybmV0CisJVVNCX0RFVklDRSAoMHgwYjk1LCAweDE3MjApLAorCS5kcml2ZXJfaW5mbyA9ICAodW5zaWduZWQgbG9uZykgJmF4ODgxN3hfaW5mbywKK30sIHsKKwkvLyBIYXdraW5nIFVGMjAwLCBUcmVuZE5ldCBUVTItRVQxMDAKKwlVU0JfREVWSUNFICgweDA3YjgsIDB4NDIwYSksCisJLmRyaXZlcl9pbmZvID0gICh1bnNpZ25lZCBsb25nKSAmaGF3a2luZ191ZjIwMF9pbmZvLAorfSwgeworICAgICAgICAvLyBCaWxsaW9udG9uIFN5c3RlbXMsIFVTQjJBUiAKKyAgICAgICAgVVNCX0RFVklDRSAoMHgwOGRkLCAweDkwZmYpLAorICAgICAgICAuZHJpdmVyX2luZm8gPSAgKHVuc2lnbmVkIGxvbmcpICZheDg4MTd4X2luZm8sCit9LCB7CisJLy8gQVRFTiBVQzIxMFQKKwlVU0JfREVWSUNFICgweDA1NTcsIDB4MjAwOSksCisJLmRyaXZlcl9pbmZvID0gICh1bnNpZ25lZCBsb25nKSAmYXg4ODE3eF9pbmZvLAorfSwgeworCS8vIEJ1ZmZhbG8gTFVBLVUyLUtUWAorCVVTQl9ERVZJQ0UgKDB4MDQxMSwgMHgwMDNkKSwKKwkuZHJpdmVyX2luZm8gPSAgKHVuc2lnbmVkIGxvbmcpICZheDg4MTd4X2luZm8sCit9LCB7CisJLy8gU2l0ZWNvbSBMTi0wMjkgIlVTQiAyLjAgMTAvMTAwIEV0aGVybmV0IGFkYXB0ZXIiCisJVVNCX0RFVklDRSAoMHg2MTg5LCAweDE4MmQpLAorCS5kcml2ZXJfaW5mbyA9ICAodW5zaWduZWQgbG9uZykgJmF4ODgxN3hfaW5mbywKK30sIHsKKwkvLyBjb3JlZ2EgRkV0aGVyIFVTQjItVFgKKwlVU0JfREVWSUNFICgweDA3YWEsIDB4MDAxNyksCisJLmRyaXZlcl9pbmZvID0gICh1bnNpZ25lZCBsb25nKSAmYXg4ODE3eF9pbmZvLAorfSwgeworCS8vIFN1cmVjb20gRVAtMTQyN1gtMgorCVVTQl9ERVZJQ0UgKDB4MTE4OSwgMHgwODkzKSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmF4ODgxN3hfaW5mbywKK30sIHsKKwkvLyBnb29kd2F5IGNvcnAgdXNiIGd3dXNiMmUKKwlVU0JfREVWSUNFICgweDE2MzEsIDB4NjIwMCksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZheDg4MTd4X2luZm8sCit9LCB7CisJLy8gQVNJWCBBWDg4NzcyIDEwLzEwMAorICAgICAgICBVU0JfREVWSUNFICgweDBiOTUsIDB4NzcyMCksCisgICAgICAgIC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmYXg4ODc3Ml9pbmZvLAorfSwKKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX1VTQl9FUFNPTjI4ODgKK3sKKwlVU0JfREVWSUNFICgweDA1MjUsIDB4Mjg4OCksCS8vIEVQU09OIFVTQiBjbGllbnQKKwkuZHJpdmVyX2luZm8JPSAodW5zaWduZWQgbG9uZykgJmVwc29uMjg4OF9pbmZvLAorfSwKKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX1VTQl9HRU5FU1lTCit7CisJVVNCX0RFVklDRSAoMHgwNWUzLCAweDA1MDIpLAkvLyBHTDYyMFVTQi1BCisJLmRyaXZlcl9pbmZvID0JKHVuc2lnbmVkIGxvbmcpICZnZW5lbGlua19pbmZvLAorfSwKKwkvKiBOT1Q6IFVTQl9ERVZJQ0UgKDB4MDVlMywgMHgwNTAxKSwJLy8gR0w2MjBVU0IKKwkgKiB0aGF0J3MgaGFsZiBkdXBsZXgsIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkCisJICovCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19VU0JfTkVUMTA4MAoreworCVVTQl9ERVZJQ0UgKDB4MDUyNSwgMHgxMDgwKSwJLy8gTmV0Q2hpcCByZWYgZGVzaWduCisJLmRyaXZlcl9pbmZvID0JKHVuc2lnbmVkIGxvbmcpICZuZXQxMDgwX2luZm8sCit9LCB7CisJVVNCX0RFVklDRSAoMHgwNkQwLCAweDA2MjIpLAkvLyBMYXBsaW5rIEdvbGQKKwkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJm5ldDEwODBfaW5mbywKK30sCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfUEwyMzAxCit7CisJVVNCX0RFVklDRSAoMHgwNjdiLCAweDAwMDApLAkvLyBQTC0yMzAxCisJLmRyaXZlcl9pbmZvID0JKHVuc2lnbmVkIGxvbmcpICZwcm9saWZpY19pbmZvLAorfSwgeworCVVTQl9ERVZJQ0UgKDB4MDY3YiwgMHgwMDAxKSwJLy8gUEwtMjMwMgorCS5kcml2ZXJfaW5mbyA9CSh1bnNpZ25lZCBsb25nKSAmcHJvbGlmaWNfaW5mbywKK30sCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfS0MyMTkwCit7CisJVVNCX0RFVklDRSAoMHgwNTBmLCAweDAxOTApLAkvLyBLQy0xOTAKKwkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJmtjMjE5MF9pbmZvLAorfSwKKyNlbmRpZgorCisjaWZkZWYJQ09ORklHX1VTQl9STkRJUworeworCS8qIFJORElTIGlzIE1TRlQncyB1bi1vZmZpY2lhbCB2YXJpYW50IG9mIENEQyBBQ00gKi8KKwlVU0JfSU5URVJGQUNFX0lORk8gKFVTQl9DTEFTU19DT01NLCAyIC8qIEFDTSAqLywgMHgwZmYpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmcm5kaXNfaW5mbywKK30sCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19VU0JfQVJNTElOVVgKKy8qCisgKiBTQS0xMTAwIHVzaW5nIHN0YW5kYXJkIEFSTSBMaW51eCBrZXJuZWxzLCBvciBjb21wYXRpYmxlLgorICogT2Z0ZW4gdXNlZCB3aGVuIHRhbGtpbmcgdG8gTGludXggUERBcyAoaVBhcSwgWW9weSwgZXRjKS4KKyAqIFRoZSBzYS0xMTAwICJ1c2ItZXRoIiBkcml2ZXIgaGFuZGxlcyB0aGUgYmFzaWMgZnJhbWluZy4KKyAqCisgKiBQWEEyNXggb3IgUFhBMjEwIC4uLiAgdGhlc2UgdXNlIGEgInVzYi1ldGgiIGRyaXZlciBtdWNoIGxpa2UKKyAqIHRoZSBzYTExMDAgb25lLCBidXQgaGFyZHdhcmUgdXNlcyBkaWZmZXJlbnQgZW5kcG9pbnQgbnVtYmVycy4KKyAqCisgKiBPciB0aGUgTGludXggIkV0aGVybmV0IiBnYWRnZXQgb24gaGFyZHdhcmUgdGhhdCBjYW4ndCB0YWxrCisgKiBDREMgRXRoZXJuZXQgKGUuZy4sIG5vIGFsdHNldHRpbmdzKSwgaW4gZWl0aGVyIG9mIHR3byBtb2RlczoKKyAqICAtIGFjdGluZyBqdXN0IGxpa2UgdGhlIG9sZCAidXNiLWV0aCIgZmlybXdhcmUsIHRob3VnaAorICogICAgdGhlIGltcGxlbWVudGF0aW9uIGlzIGRpZmZlcmVudCAKKyAqICAtIHN1cHBvcnRpbmcgUk5ESVMgYXMgdGhlIGZpcnN0L2RlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IKKyAqICAgIE1TLVdpbmRvd3MgaW50ZXJvcDsgTGludXggbmVlZHMgdG8gdXNlIHRoZSBvdGhlciBjb25maWcKKyAqLworeworCS8vIDExODMgPSAweDA0OUYsIGJvdGggdXNlZCBhcyBoZXggdmFsdWVzPworCS8vIENvbXBhcSAiSXRzeSIgdmVuZG9yL3Byb2R1Y3QgaWQKKwlVU0JfREVWSUNFICgweDA0OUYsIDB4NTA1QSksCS8vIHVzYi1ldGgsIG9yIGNvbXBhdGlibGUKKwkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJmxpbnV4ZGV2X2luZm8sCit9LCB7CisJVVNCX0RFVklDRSAoMHgwRTdFLCAweDEwMDEpLAkvLyBHLk1hdGUgIllvcHkiCisJLmRyaXZlcl9pbmZvID0JKHVuc2lnbmVkIGxvbmcpICZ5b3B5X2luZm8sCit9LCB7CisJVVNCX0RFVklDRSAoMHg4MDg2LCAweDA3ZDMpLAkvLyAiYmxvYiIgYm9vdGxvYWRlcgorCS5kcml2ZXJfaW5mbyA9CSh1bnNpZ25lZCBsb25nKSAmYmxvYl9pbmZvLAorfSwgeworCS8vIExpbnV4IEV0aGVybmV0L1JORElTIGdhZGdldCBvbiBweGEyMTAvMjV4LzI2eAorCS8vIGUuZy4gR3Vtc3RpeCwgY3VycmVudCBPcGVuWmF1cnVzLCAuLi4KKwlVU0JfREVWSUNFX1ZFUiAoMHgwNTI1LCAweGE0YTIsIDB4MDIwMywgMHgwMjAzKSwKKwkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJmxpbnV4ZGV2X2luZm8sCit9LCAKKyNlbmRpZgorCisjaWYJZGVmaW5lZChDT05GSUdfVVNCX1pBVVJVUykgfHwgZGVmaW5lZChDT05GSUdfVVNCX0NEQ0VUSEVSKQorLyoKKyAqIFNBLTExMDAgYmFzZWQgU2hhcnAgWmF1cnVzICgiY29sbGllIiksIG9yIGNvbXBhdGlibGUuCisgKiBTYW1lIGlkZWEgYXMgYWJvdmUsIGJ1dCBkaWZmZXJlbnQgZnJhbWluZy4KKyAqCisgKiBQWEEtMnh4IGJhc2VkIG1vZGVscyBhcmUgYWxzbyBseWluZy1hYm91dC1jZGMuCisgKiBTb21lIG1vZGVscyBkb24ndCBldmVuIHRlbGwgdGhlIHNhbWUgbGllcyAuLi4KKyAqCisgKiBOT1RFOiAgT3BlblphdXJ1cyB2ZXJzaW9ucyB3aXRoIDIuNiBrZXJuZWxzIHdvbid0IHVzZSB0aGVzZSBlbnRyaWVzLAorICogdW5saWtlIHRoZSBvbGRlciBvbmVzIHdpdGggMi40ICJlbWJlZGl4IiBrZXJuZWxzLgorICoKKyAqIE5PVEU6ICBUaGVzZSBlbnRyaWVzIGRvIGRvdWJsZS1kdXR5LCBzZXJ2aW5nIGFzIGJsYWNrbGlzdCBlbnRyaWVzCisgKiB3aGVuZXZlciBaYXVydXMgc3VwcG9ydCBpc24ndCBlbmFibGVkLCBidXQgQ0RDIEV0aGVybmV0IGlzLgorICovCisjZGVmaW5lCVpBVVJVU19NQVNURVJfSU5URVJGQUNFIFwKKwkuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX0NPTU0sIFwKKwkuYkludGVyZmFjZVN1YkNsYXNzCT0gVVNCX0NEQ19TVUJDTEFTU19FVEhFUk5FVCwgXAorCS5iSW50ZXJmYWNlUHJvdG9jb2wJPSBVU0JfQ0RDX1BST1RPX05PTkUKK3sKKwkubWF0Y2hfZmxhZ3MJPSAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8KKwkJCSAgfCBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwgCisJLmlkVmVuZG9yCQk9IDB4MDRERCwKKwkuaWRQcm9kdWN0CQk9IDB4ODAwNCwKKwlaQVVSVVNfTUFTVEVSX0lOVEVSRkFDRSwKKwkuZHJpdmVyX2luZm8gPSBaQVVSVVNfU1RST05HQVJNX0lORk8sCit9LCB7CisJLm1hdGNoX2ZsYWdzCT0gICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPCisJCQkgIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UsIAorCS5pZFZlbmRvcgkJPSAweDA0REQsCisJLmlkUHJvZHVjdAkJPSAweDgwMDUsCS8qIEEtMzAwICovCisJWkFVUlVTX01BU1RFUl9JTlRFUkZBQ0UsCisJLmRyaXZlcl9pbmZvID0gWkFVUlVTX1BYQV9JTkZPLAorfSwgeworCS5tYXRjaF9mbGFncwk9ICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTworCQkJICB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLCAKKwkuaWRWZW5kb3IJCT0gMHgwNERELAorCS5pZFByb2R1Y3QJCT0gMHg4MDA2LAkvKiBCLTUwMC9TTC01NjAwICovCisJWkFVUlVTX01BU1RFUl9JTlRFUkZBQ0UsCisJLmRyaXZlcl9pbmZvID0gWkFVUlVTX1BYQV9JTkZPLAorfSwgeworCS5tYXRjaF9mbGFncyAgICA9ICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTworCSAgICAgICAgICB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLAorCS5pZFZlbmRvcgkJPSAweDA0REQsCisJLmlkUHJvZHVjdAkJPSAweDgwMDcsCS8qIEMtNzAwICovCisJWkFVUlVTX01BU1RFUl9JTlRFUkZBQ0UsCisJLmRyaXZlcl9pbmZvID0gWkFVUlVTX1BYQV9JTkZPLAorfSwgeworCS5tYXRjaF9mbGFncyAgICA9ICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTworCQkgfCBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwKKwkuaWRWZW5kb3IgICAgICAgICAgICAgICA9IDB4MDRERCwKKwkuaWRQcm9kdWN0ICAgICAgICAgICAgICA9IDB4OTAzMSwJLyogQy03NTAgQy03NjAgKi8KKwlaQVVSVVNfTUFTVEVSX0lOVEVSRkFDRSwKKwkuZHJpdmVyX2luZm8gPSBaQVVSVVNfUFhBX0lORk8sCit9LCB7CisJLm1hdGNoX2ZsYWdzICAgID0gICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPCisJCSB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLAorCS5pZFZlbmRvciAgICAgICAgICAgICAgID0gMHgwNERELAorCS5pZFByb2R1Y3QgICAgICAgICAgICAgID0gMHg5MDMyLAkvKiBTTC02MDAwICovCisJWkFVUlVTX01BU1RFUl9JTlRFUkZBQ0UsCisJLmRyaXZlcl9pbmZvID0gWkFVUlVTX1BYQV9JTkZPLAorfSwgeworCS5tYXRjaF9mbGFncyAgICA9ICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTworCQkgfCBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwKKwkuaWRWZW5kb3IgICAgICAgICAgICAgICA9IDB4MDRERCwKKwkvKiByZXBvcnRlZCB3aXRoIHNvbWUgQzg2MCB1bml0cyAqLworCS5pZFByb2R1Y3QgICAgICAgICAgICAgID0gMHg5MDUwLAkvKiBDLTg2MCAqLworCVpBVVJVU19NQVNURVJfSU5URVJGQUNFLAorCS5kcml2ZXJfaW5mbyA9IFpBVVJVU19QWEFfSU5GTywKKyNpZmRlZglDT05GSUdfVVNCX1pBVVJVUworCS8qIGF0IGxlYXN0IHNvbWUgKHJlcG9ydHMgdmFyeSkgQy04NjAgdW5pdHMgaGF2ZSB2ZXJ5IGRpZmZlcmVudAorCSAqIGxpZXMgYWJvdXQgdGhlaXIgc3RhbmRhcmRzIHN1cHBvcnQuCisJICovCit9LCB7CisJLm1hdGNoX2ZsYWdzICAgID0gICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPCisJCSB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLAorCS5pZFZlbmRvciAgICAgICAgICAgICAgID0gMHgwNERELAorCS8qIHJlcG9ydGVkIHdpdGggc29tZSBDODYwIHVuaXRzICovCisJLmlkUHJvZHVjdCAgICAgICAgICAgICAgPSAweDkwMzEsCS8qIEMtODYwICovCisJLmJJbnRlcmZhY2VDbGFzcwk9IFVTQl9DTEFTU19DT01NLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MJPSBVU0JfQ0RDX1NVQkNMQVNTX01ETE0sCisJLmJJbnRlcmZhY2VQcm90b2NvbAk9IFVTQl9DRENfUFJPVE9fTk9ORSwKKwkuZHJpdmVyX2luZm8gCQk9ICh1bnNpZ25lZCBsb25nKSAmemF1cnVzX3B4YV9tZGxtX2luZm8sCisjZW5kaWYKK30sCisKKy8qIE9seW1wdXMgaGFzIHNvbWUgbW9kZWxzIHdpdGggYSBaYXVydXMtY29tcGF0aWJsZSBvcHRpb24uCisgKiBSLTEwMDAgdXNlcyBhIEZyZWVTY2FsZSBpLk1YTCBjcHUgKEFSTXY0VCkKKyAqLworeworCS5tYXRjaF9mbGFncyAgICA9ICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTworCQkgfCBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSwKKwkuaWRWZW5kb3IgICAgICAgICAgICAgICA9IDB4MDdCNCwKKwkuaWRQcm9kdWN0ICAgICAgICAgICAgICA9IDB4MEYwMiwJLyogUi0xMDAwICovCisJWkFVUlVTX01BU1RFUl9JTlRFUkZBQ0UsCisJLmRyaXZlcl9pbmZvID0gT0xZTVBVU19NWExfSU5GTywKK30sCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19VU0JfQ0RDRVRIRVIKK3sKKwkvKiBDREMgRXRoZXIgdXNlcyB0d28gaW50ZXJmYWNlcywgbm90IG5lY2Vzc2FyaWx5IGNvbnNlY3V0aXZlLgorCSAqIFdlIG1hdGNoIHRoZSBtYWluIGludGVyZmFjZSwgaWdub3JpbmcgdGhlIG9wdGlvbmFsIGRldmljZQorCSAqIGNsYXNzIHNvIHdlIGNvdWxkIGhhbmRsZSBkZXZpY2VzIHRoYXQgYXJlbid0IGV4Y2x1c2l2ZWx5CisJICogQ0RDIGV0aGVyLgorCSAqCisJICogTk9URTogIHRoaXMgbWF0Y2ggbXVzdCBjb21lIEFGVEVSIGVudHJpZXMgd29ya2luZyBhcm91bmQKKwkgKiBidWdzL3F1aXJrcyBpbiBhIGdpdmVuIHByb2R1Y3QgKGxpa2UgWmF1cnVzLCBhYm92ZSkuCisJICovCisJVVNCX0lOVEVSRkFDRV9JTkZPIChVU0JfQ0xBU1NfQ09NTSwgVVNCX0NEQ19TVUJDTEFTU19FVEhFUk5FVCwKKwkJCVVTQl9DRENfUFJPVE9fTk9ORSksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZjZGNfaW5mbywKK30sCisjZW5kaWYKKworCXsgfSwJCS8vIEVORAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgcHJvZHVjdHMpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNibmV0X2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQlkcml2ZXJfbmFtZSwKKwkuaWRfdGFibGUgPQlwcm9kdWN0cywKKwkucHJvYmUgPQl1c2JuZXRfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2JuZXRfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYm5ldF9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2JuZXRfcmVzdW1lLAorfTsKKworLyogRGVmYXVsdCBldGh0b29sX29wcyBhc3NpZ25lZC4gIERldmljZXMgY2FuIG92ZXJyaWRlIGluIHRoZWlyIGJpbmQoKSByb3V0aW5lICovCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHVzYm5ldF9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X2RydmluZm8JCT0gdXNibmV0X2dldF9kcnZpbmZvLAorCS5nZXRfbGluawkJPSB1c2JuZXRfZ2V0X2xpbmssCisJLmdldF9tc2dsZXZlbAkJPSB1c2JuZXRfZ2V0X21zZ2xldmVsLAorCS5zZXRfbXNnbGV2ZWwJCT0gdXNibmV0X3NldF9tc2dsZXZlbCwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19pbml0IHVzYm5ldF9pbml0ICh2b2lkKQoreworCS8vIGNvbXBpbGVyIHNob3VsZCBvcHRpbWl6ZSB0aGVzZSBvdXQKKwlCVUdfT04gKHNpemVvZiAoKChzdHJ1Y3Qgc2tfYnVmZiAqKTApLT5jYikKKwkJCTwgc2l6ZW9mIChzdHJ1Y3Qgc2tiX2RhdGEpKTsKKyNpZmRlZglDT05GSUdfVVNCX0NEQ0VUSEVSCisJQlVHX09OICgoc2l6ZW9mICgoKHN0cnVjdCB1c2JuZXQgKikwKS0+ZGF0YSkKKwkJCTwgc2l6ZW9mIChzdHJ1Y3QgY2RjX3N0YXRlKSkpOworI2VuZGlmCisKKwlyYW5kb21fZXRoZXJfYWRkcihub2RlX2lkKTsKKworIAlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZ1c2JuZXRfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0ICh1c2JuZXRfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2JuZXRfZXhpdCAodm9pZCkKK3sKKyAJdXNiX2RlcmVnaXN0ZXIgKCZ1c2JuZXRfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0ICh1c2JuZXRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IgKCJEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTiAoIlVTQiBIb3N0LXRvLUhvc3QgTGluayBEcml2ZXJzIChudW1lcm91cyB2ZW5kb3JzKSIpOworTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC96ZDEyMDEuYyBiL2RyaXZlcnMvdXNiL25ldC96ZDEyMDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzgwMjVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbmV0L3pkMTIwMS5jCkBAIC0wLDAgKzEsMTkwNSBAQAorLyoKKyAqCURyaXZlciBmb3IgWnlEQVMgemQxMjAxIGJhc2VkIHdpcmVsZXNzIFVTQiBkZXZpY2VzLgorICoKKyAqCUNvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBKZXJvZW4gVnJlZWtlbiAocGUxcnhxQGFtc2F0Lm9yZykKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqCVBhcnRzIG9mIHRoaXMgZHJpdmVyIGhhdmUgYmVlbiBkZXJpdmVkIGZyb20gYSB3bGFuLW5nIHZlcnNpb24KKyAqCW1vZGlmaWVkIGJ5IFp5REFTLiBUaGV5IGFsc28gbWFkZSBkb2N1bWVudGF0aW9uIGF2YWlsYWJsZSwgdGhhbmtzIQorICoJQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxpZWVlODAyXzExLmg+CisjaW5jbHVkZSAiemQxMjAxLmgiCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB6ZDEyMDFfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA1ODYsIDB4MzQwMCl9LCAvKiBQZWFiaXJkIFdpcmVsZXNzIFVTQiBBZGFwdGVyICovCisJe1VTQl9ERVZJQ0UoMHgwYWNlLCAweDEyMDEpfSwgLyogWnlEQVMgWkQxMjAxIFdpcmVsZXNzIFVTQiBBZGFwdGVyICovCisJe1VTQl9ERVZJQ0UoMHgwNTBkLCAweDYwNTEpfSwgLyogQmVsa2luIEY1RDYwNTEgdXNiICBhZGFwdGVyICovCisJe1VTQl9ERVZJQ0UoMHgwZGIwLCAweDY4MjMpfSwgLyogTVNJIFVCMTFCIHVzYiAgYWRhcHRlciAqLworCXt9Cit9OworCitzdGF0aWMgaW50IGFwID0gMDsJLyogQXJlIHdlIGFuIEFQIG9yIGEgbm9ybWFsIHN0YXRpb24/ICovCisKKyNkZWZpbmUgWkQxMjAxX1ZFUlNJT04JIjAuMTUiCisKK01PRFVMRV9BVVRIT1IoIkplcm9lbiBWcmVla2VuIDxwZTFyeHFAYW1zYXQub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIFp5REFTIFpEMTIwMSBiYXNlZCBVU0IgV2lyZWxlc3MgYWRhcHRlcnMiKTsKK01PRFVMRV9WRVJTSU9OKFpEMTIwMV9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK21vZHVsZV9wYXJhbShhcCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoYXAsICJJZiBub24temVybyBBY2Nlc3MgUG9pbnQgZmlybXdhcmUgd2lsbCBiZSBsb2FkZWQiKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB6ZDEyMDFfdGFibGUpOworCisKK2ludCB6ZDEyMDFfZndfdXBsb2FkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBhcGZ3KQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7CisJY2hhciogZGF0YTsKKwl1bnNpZ25lZCBsb25nIGxlbjsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGNoYXIgcmV0OworCWNoYXIgKmJ1ZjsKKwljaGFyICpmd2ZpbGU7CisKKwlpZiAoYXBmdykKKwkJZndmaWxlID0gInpkMTIwMS1hcC5mdyI7CisJZWxzZQorCQlmd2ZpbGUgPSAiemQxMjAxLmZ3IjsKKworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmd2ZpbGUsICZkZXYtPmRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkZhaWxlZCB0byBsb2FkICVzIGZpcm13YXJlIGZpbGUhXG4iLCBmd2ZpbGUpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIk1ha2Ugc3VyZSB0aGUgaG90cGx1ZyBmaXJtd2FyZSBsb2FkZXIgaXMgaW5zdGFsbGVkLlxuIik7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiR290byBodHRwOi8vbGludXgtbGMxMDAwMjAuc291cmNlZm9yZ2UubmV0IGZvciBtb3JlIGluZm9cbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWRhdGEgPSBmd19lbnRyeS0+ZGF0YTsKKyAgICAgICAgbGVuID0gZndfZW50cnktPnNpemU7CisKKwlidWYgPSBrbWFsbG9jKDEwMjQsIEdGUF9BVE9NSUMpOworCWlmICghYnVmKQorCQlnb3RvIGV4aXQ7CisJCisJd2hpbGUgKGxlbiA+IDApIHsKKwkJaW50IHRyYW5zbGVuID0gKGxlbiA+IDEwMjQpID8gMTAyNCA6IGxlbjsKKwkJbWVtY3B5KGJ1ZiwgZGF0YSwgdHJhbnNsZW4pOworCisJCWVyciA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCAwLAorCQkgICAgVVNCX0RJUl9PVVQgfCAweDQwLCAwLCAwLCBidWYsIHRyYW5zbGVuLAorCQkgICAgWkQxMjAxX0ZXX1RJTUVPVVQpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXhpdDsKKworCQlsZW4gLT0gdHJhbnNsZW47CisJCWRhdGEgKz0gdHJhbnNsZW47CisJfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCWVyciA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCAweDIsCisJICAgIFVTQl9ESVJfT1VUIHwgMHg0MCwgMCwgMCwgTlVMTCwgMCwgWkQxMjAxX0ZXX1RJTUVPVVQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGV4aXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisJZXJyID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIDB4NCwKKwkgICAgVVNCX0RJUl9JTiB8IDB4NDAsIDAsMCwgJnJldCwgc2l6ZW9mKHJldCksIFpEMTIwMV9GV19USU1FT1VUKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBleGl0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCWlmIChyZXQgJiAweDgwKSB7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXhpdDsKKwl9CisKKwllcnIgPSAwOworZXhpdDoKKyAJaWYgKGJ1ZikKKwkJa2ZyZWUoYnVmKTsKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIHpkMTIwMV91c2JmcmVlKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSB1cmItPmNvbnRleHQ7CisKKwlzd2l0Y2godXJiLT5zdGF0dXMpIHsKKwkJY2FzZSAtRUlMU0VROgorCQljYXNlIC1FTk9ERVY6CisJCWNhc2UgLUVUSU1FRE9VVDoKKwkJY2FzZSAtRU5PRU5UOgorCQljYXNlIC1FUElQRToKKwkJY2FzZSAtRU9WRVJGTE9XOgorCQljYXNlIC1FU0hVVERPV046CisJCQlkZXZfd2FybigmemQtPnVzYi0+ZGV2LCAiJXM6IHVyYiBmYWlsZWQ6ICVkXG4iLCAKKwkJCSAgICB6ZC0+ZGV2LT5uYW1lLCB1cmItPnN0YXR1cyk7CisJfQorCisJa2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCXVzYl9mcmVlX3VyYih1cmIpOworCXJldHVybjsKK30KKworLyogY21kcmVxIG1lc3NhZ2U6IAorCXUzMiB0eXBlCisJdTE2IGNtZAorCXUxNiBwYXJtMAorCXUxNiBwYXJtMQorCXUxNiBwYXJtMgorCXU4ICBwYWRbNF0KKworCXRvdGFsOiA0ICsgMiArIDIgKyAyICsgMiArIDQgPSAxNgorKi8KK2ludCB6ZDEyMDFfZG9jbWQoc3RydWN0IHpkMTIwMSAqemQsIGludCBjbWQsIGludCBwYXJtMCwgaW50IHBhcm0xLCBpbnQgcGFybTIpCit7CisJdW5zaWduZWQgY2hhciAqY29tbWFuZDsKKwlpbnQgcmV0OworCXN0cnVjdCB1cmIgKnVyYjsKKworCWNvbW1hbmQgPSBrbWFsbG9jKDE2LCBHRlBfQVRPTUlDKTsKKwlpZiAoIWNvbW1hbmQpCisJCXJldHVybiAtRU5PTUVNOworCisJKigoX19sZTMyKiljb21tYW5kKSA9IGNwdV90b19sZTMyKFpEMTIwMV9VU0JfQ01EUkVRKTsKKwkqKChfX2xlMTYqKSZjb21tYW5kWzRdKSA9IGNwdV90b19sZTE2KGNtZCk7CisJKigoX19sZTE2KikmY29tbWFuZFs2XSkgPSBjcHVfdG9fbGUxNihwYXJtMCk7CisJKigoX19sZTE2KikmY29tbWFuZFs4XSkgPSBjcHVfdG9fbGUxNihwYXJtMSk7CisJKigoX19sZTE2KikmY29tbWFuZFsxMF0pPSBjcHVfdG9fbGUxNihwYXJtMik7CisKKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOworCWlmICghdXJiKSB7CisJCWtmcmVlKGNvbW1hbmQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCB6ZC0+dXNiLCB1c2Jfc25kYnVsa3BpcGUoemQtPnVzYiwgemQtPmVuZHBfb3V0MiksCisJICAgICBjb21tYW5kLCAxNiwgemQxMjAxX3VzYmZyZWUsIHpkKTsKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQpIHsKKwkJa2ZyZWUoY29tbWFuZCk7CisJCXVzYl9mcmVlX3VyYih1cmIpOworCX0KKwkKKwlyZXR1cm4gcmV0OworfQorCisvKiBDYWxsYmFjayBhZnRlciBzZW5kaW5nIG91dCBhIHBhY2tldCAqLwordm9pZCB6ZDEyMDFfdXNidHgoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IHVyYi0+Y29udGV4dDsKKwluZXRpZl93YWtlX3F1ZXVlKHpkLT5kZXYpOworCXJldHVybjsKK30KKworLyogSW5jb21taW5nIGRhdGEgKi8KK3ZvaWQgemQxMjAxX3VzYnJ4KHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSB1cmItPmNvbnRleHQ7CisJaW50IGZyZWUgPSAwOworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGNoYXIgdHlwZTsKKworCWlmICghemQpIHsKKwkJZnJlZSA9IDE7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzd2l0Y2godXJiLT5zdGF0dXMpIHsKKwkJY2FzZSAtRUlMU0VROgorCQljYXNlIC1FTk9ERVY6CisJCWNhc2UgLUVUSU1FRE9VVDoKKwkJY2FzZSAtRU5PRU5UOgorCQljYXNlIC1FUElQRToKKwkJY2FzZSAtRU9WRVJGTE9XOgorCQljYXNlIC1FU0hVVERPV046CisJCQlkZXZfd2FybigmemQtPnVzYi0+ZGV2LCAiJXM6IHJ4IHVyYiBmYWlsZWQ6ICVkXG4iLAorCQkJICAgIHpkLT5kZXYtPm5hbWUsIHVyYi0+c3RhdHVzKTsKKwkJCWZyZWUgPSAxOworCQkJZ290byBleGl0OworCX0KKwkKKwlpZiAodXJiLT5zdGF0dXMgIT0gMCB8fCB1cmItPmFjdHVhbF9sZW5ndGggPT0gMCkKKwkJZ290byByZXN1Ym1pdDsKKworCXR5cGUgPSBkYXRhWzBdOworCWlmICh0eXBlID09IFpEMTIwMV9QQUNLRVRfRVZFTlRTVEFUIHx8IHR5cGUgPT0gWkQxMjAxX1BBQ0tFVF9SRVNPVVJDRSkgeworCQltZW1jcHkoemQtPnJ4ZGF0YSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJemQtPnJ4bGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCQl6ZC0+cnhkYXRhcyA9IDE7CisJCXdha2VfdXAoJnpkLT5yeGRhdGFxKTsKKwl9CisJLyogSW5mbyBmcmFtZSAqLworCWlmICh0eXBlID09IFpEMTIwMV9QQUNLRVRfSU5RVUlSRSkgeworCQlpbnQgaSA9IDA7CisJCXVuc2lnbmVkIHNob3J0IGluZm90eXBlLCBmcmFtZWxlbiwgY29weWxlbjsKKwkJZnJhbWVsZW4gPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiopJmRhdGFbNF0pOworCQlpbmZvdHlwZSA9IGxlMTZfdG9fY3B1KCooX19sZTE2KikmZGF0YVs2XSk7CisKKwkJaWYgKGluZm90eXBlID09IFpEMTIwMV9JTkZfTElOS1NUQVRVUykgeworCQkJc2hvcnQgbGlua3N0YXR1czsKKworCQkJbGlua3N0YXR1cyA9IGxlMTZfdG9fY3B1KCooX19sZTE2KikmZGF0YVs4XSk7CisJCQlzd2l0Y2gobGlua3N0YXR1cykgeworCQkJCWNhc2UgMToKKwkJCQkJbmV0aWZfY2Fycmllcl9vbih6ZC0+ZGV2KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAyOgorCQkJCQluZXRpZl9jYXJyaWVyX29mZih6ZC0+ZGV2KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAzOgorCQkJCQluZXRpZl9jYXJyaWVyX29mZih6ZC0+ZGV2KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSA0OgorCQkJCQluZXRpZl9jYXJyaWVyX29uKHpkLT5kZXYpOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQluZXRpZl9jYXJyaWVyX29mZih6ZC0+ZGV2KTsKKwkJCX0KKwkJCWdvdG8gcmVzdWJtaXQ7CisJCX0KKwkJaWYgKGluZm90eXBlID09IFpEMTIwMV9JTkZfQVNTT0NTVEFUVVMpIHsKKwkJCXNob3J0IHN0YXR1cyA9IGxlMTZfdG9fY3B1KCooX19sZTE2KikoZGF0YSs4KSk7CisJCQlpbnQgZXZlbnQ7CisJCQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisKKwkJCXN3aXRjaCAoc3RhdHVzKSB7CisJCQkJY2FzZSBaRDEyMDFfQVNTT0NTVEFUVVNfU1RBQVNTT0M6CisJCQkJY2FzZSBaRDEyMDFfQVNTT0NTVEFUVVNfUkVBU1NPQzoKKwkJCQkJZXZlbnQgPSBJV0VWUkVHSVNURVJFRDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBaRDEyMDFfQVNTT0NTVEFUVVNfRElTQVNTT0M6CisJCQkJY2FzZSBaRDEyMDFfQVNTT0NTVEFUVVNfQVNTT0NGQUlMOgorCQkJCWNhc2UgWkQxMjAxX0FTU09DU1RBVFVTX0FVVEhGQUlMOgorCQkJCWRlZmF1bHQ6CisJCQkJCWV2ZW50ID0gSVdFVkVYUElSRUQ7CisJCQl9CisJCQltZW1jcHkod3JxdS5hZGRyLnNhX2RhdGEsIGRhdGErMTAsIEVUSF9BTEVOKTsKKwkJCXdycXUuYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisKKwkJCS8qIFNlbmQgZXZlbnQgdG8gdXNlciBzcGFjZSAqLworCQkJd2lyZWxlc3Nfc2VuZF9ldmVudCh6ZC0+ZGV2LCBldmVudCwgJndycXUsIE5VTEwpOworCisJCQlnb3RvIHJlc3VibWl0OworCQl9CisJCWlmIChpbmZvdHlwZSA9PSBaRDEyMDFfSU5GX0FVVEhSRVEpIHsKKwkJCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKworCQkJbWVtY3B5KHdycXUuYWRkci5zYV9kYXRhLCBkYXRhKzgsIEVUSF9BTEVOKTsKKwkJCXdycXUuYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJCQkvKiBUaGVyZSBpc24ndCBhIGV2ZW50IHRoYXQgdHJ1bGx5IGZpdHMgdGhpcyByZXF1ZXN0LgorCQkJICAgV2UgYXNzdW1lIHRoYXQgdXNlcnNwYWNlIHdpbGwgYmUgc21hcnQgZW5vdWdoIHRvCisJCQkgICBzZWUgYSBuZXcgc3RhdGlvbiBiZWluZyBleHBpcmVkIGFuZCBzZW5kcyBiYWNrIGEKKwkJCSAgIGF1dGhzdGF0aW9uIGlvY3RsIHRvIGF1dGhvcml6ZSBpdC4gKi8KKwkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoemQtPmRldiwgSVdFVkVYUElSRUQsICZ3cnF1LCBOVUxMKTsKKwkJCWdvdG8gcmVzdWJtaXQ7CisJCX0KKwkJLyogT3RoZXIgaW5mb3R5cGVzIGFyZSBoYW5kbGVkIG91dHNpZGUgdGhpcyBoYW5kbGVyICovCisJCXpkLT5yeGxlbiA9IDA7CisJCXdoaWxlIChpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCQljb3B5bGVuID0gbGUxNl90b19jcHUoKihfX2xlMTYqKSZkYXRhW2krMl0pOworCQkJLyogU2FuaXR5IGNoZWNrLCBzb21ldGltZXMgd2UgZ2V0IGp1bmsgKi8KKwkJCWlmIChjb3B5bGVuK3pkLT5yeGxlbiA+IHNpemVvZih6ZC0+cnhkYXRhKSkKKwkJCQlicmVhazsKKwkJCW1lbWNweSh6ZC0+cnhkYXRhK3pkLT5yeGxlbiwgZGF0YStpKzQsIGNvcHlsZW4pOworCQkJemQtPnJ4bGVuICs9IGNvcHlsZW47CisJCQlpICs9IDY0OworCQl9CisJCWlmIChpID49IHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQkJemQtPnJ4ZGF0YXMgPSAxOworCQkJd2FrZV91cCgmemQtPnJ4ZGF0YXEpOworCQl9CisJCWdvdG8gIHJlc3VibWl0OworCX0KKwkvKiBBY3R1YWwgZGF0YSAqLworCWlmIChkYXRhW3VyYi0+YWN0dWFsX2xlbmd0aC0xXSA9PSBaRDEyMDFfUEFDS0VUX1JYREFUQSkgeworCQlpbnQgZGF0YWxlbiA9IHVyYi0+YWN0dWFsX2xlbmd0aC0xOworCQl1bnNpZ25lZCBzaG9ydCBsZW4sIGZjLCBzZXE7CisJCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCisJCWxlbiA9IG50b2hzKCooX19iZTE2ICopJmRhdGFbZGF0YWxlbi0yXSk7CisJCWlmIChsZW4+ZGF0YWxlbikKKwkJCWxlbj1kYXRhbGVuOworCQlmYyA9IGxlMTZfdG9fY3B1KCooX19sZTE2ICopJmRhdGFbZGF0YWxlbi0xNl0pOworCQlzZXEgPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSZkYXRhW2RhdGFsZW4tMjRdKTsKKworCQlpZih6ZC0+bW9uaXRvcikgeworCQkJaWYgKGRhdGFsZW4gPCAyNCkKKwkJCQlnb3RvIHJlc3VibWl0OworCQkJaWYgKCEoc2tiID0gZGV2X2FsbG9jX3NrYihkYXRhbGVuKzI0KSkpCisJCQkJZ290byByZXN1Ym1pdDsKKwkJCQorCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCAyKSwgJmRhdGFbZGF0YWxlbi0xNl0sIDIpOworCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCAyKSwgJmRhdGFbZGF0YWxlbi0yXSwgMik7CisJCQltZW1jcHkoc2tiX3B1dChza2IsIDYpLCAmZGF0YVtkYXRhbGVuLTE0XSwgNik7CisJCQltZW1jcHkoc2tiX3B1dChza2IsIDYpLCAmZGF0YVtkYXRhbGVuLTIyXSwgNik7CisJCQltZW1jcHkoc2tiX3B1dChza2IsIDYpLCAmZGF0YVtkYXRhbGVuLThdLCA2KTsKKwkJCW1lbWNweShza2JfcHV0KHNrYiwgMiksICZkYXRhW2RhdGFsZW4tMjRdLCAyKTsKKwkJCW1lbWNweShza2JfcHV0KHNrYiwgbGVuKSwgZGF0YSwgbGVuKTsKKwkJCXNrYi0+ZGV2ID0gemQtPmRldjsKKwkJCXNrYi0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHpkLT5kZXYpOworCQkJemQtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCXpkLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJCW5ldGlmX3J4KHNrYik7CisJCQlnb3RvIHJlc3VibWl0OworCQl9CisJCQkKKwkJaWYgKChzZXEgJiBJRUVFODAyXzExX1NDVExfRlJBRykgfHwKKwkJICAgIChmYyAmIElFRUU4MDJfMTFfRkNUTF9NT1JFRlJBR1MpKSB7CisJCQlzdHJ1Y3QgemQxMjAxX2ZyYWcgKmZyYWcgPSBOVUxMOworCQkJY2hhciAqcHRyOworCisJCQlpZiAoZGF0YWxlbjwxNCkKKwkJCQlnb3RvIHJlc3VibWl0OworCQkJaWYgKChzZXEgJiBJRUVFODAyXzExX1NDVExfRlJBRykgPT0gMCkgeworCQkJCWZyYWcgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgemQxMjAxX2ZyYWcqKSwKKwkJCQkgICAgR0ZQX0FUT01JQyk7CisJCQkJaWYgKCFmcmFnKQorCQkJCQlnb3RvIHJlc3VibWl0OworCQkJCXNrYiA9IGRldl9hbGxvY19za2IoSUVFRTgwMl8xMV9EQVRBX0xFTiArMTQrMik7CisJCQkJaWYgKCFza2IpIHsKKwkJCQkJa2ZyZWUoZnJhZyk7CisJCQkJCWdvdG8gcmVzdWJtaXQ7CisJCQkJfQorCQkJCWZyYWctPnNrYiA9IHNrYjsKKwkJCQlmcmFnLT5zZXEgPSBzZXEgJiBJRUVFODAyXzExX1NDVExfU0VROworCQkJCXNrYl9yZXNlcnZlKHNrYiwgMik7CisJCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCAxMiksICZkYXRhW2RhdGFsZW4tMTRdLCAxMik7CisJCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCAyKSwgJmRhdGFbNl0sIDIpOworCQkJCW1lbWNweShza2JfcHV0KHNrYiwgbGVuKSwgZGF0YSs4LCBsZW4pOworCQkJCWhsaXN0X2FkZF9oZWFkKCZmcmFnLT5mbm9kZSwgJnpkLT5mcmFnbGlzdCk7CisJCQkJZ290byByZXN1Ym1pdDsKKwkJCX0KKwkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZyYWcsIG5vZGUsICZ6ZC0+ZnJhZ2xpc3QsIGZub2RlKQorCQkJCWlmKGZyYWctPnNlcSA9PSAoc2VxJklFRUU4MDJfMTFfU0NUTF9TRVEpKQorCQkJCQlicmVhazsKKwkJCWlmICghZnJhZykKKwkJCQlnb3RvIHJlc3VibWl0OworCQkJc2tiID0gZnJhZy0+c2tiOworCQkJcHRyID0gc2tiX3B1dChza2IsIGxlbik7CisJCQlpZiAocHRyKQorCQkJCW1lbWNweShwdHIsIGRhdGErOCwgbGVuKTsKKwkJCWlmIChmYyAmIElFRUU4MDJfMTFfRkNUTF9NT1JFRlJBR1MpCisJCQkJZ290byByZXN1Ym1pdDsKKwkJCWhsaXN0X2RlbF9pbml0KCZmcmFnLT5mbm9kZSk7CisJCQlrZnJlZShmcmFnKTsKKwkJCS8qIEZhbGx0aHJvdWdoICovCisJCX0gZWxzZSB7CisJCQlpZiAoZGF0YWxlbjwxNCkKKwkJCQlnb3RvIHJlc3VibWl0OworCQkJc2tiID0gZGV2X2FsbG9jX3NrYihsZW4gKyAxNCArIDIpOworCQkJaWYgKCFza2IpCisJCQkJZ290byByZXN1Ym1pdDsKKwkJCXNrYl9yZXNlcnZlKHNrYiwgMik7CisJCQltZW1jcHkoc2tiX3B1dChza2IsIDEyKSwgJmRhdGFbZGF0YWxlbi0xNF0sIDEyKTsKKwkJCW1lbWNweShza2JfcHV0KHNrYiwgMiksICZkYXRhWzZdLCAyKTsKKwkJCW1lbWNweShza2JfcHV0KHNrYiwgbGVuKSwgZGF0YSs4LCBsZW4pOworCQl9CisJCXNrYi0+ZGV2ID0gemQtPmRldjsKKwkJc2tiLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCB6ZC0+ZGV2KTsKKwkJemQtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJemQtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQluZXRpZl9yeChza2IpOworCX0KK3Jlc3VibWl0OgorCW1lbXNldChkYXRhLCAwLCBaRDEyMDFfUlhTSVpFKTsKKworCXVyYi0+c3RhdHVzID0gMDsKKwl1cmItPmRldiA9IHpkLT51c2I7CisJaWYodXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkKKwkJZnJlZSA9IDE7CisKK2V4aXQ6CisJaWYgKGZyZWUpIHsKKwkJemQtPnJ4bGVuID0gMDsKKwkJemQtPnJ4ZGF0YXMgPSAxOworCQl3YWtlX3VwKCZ6ZC0+cnhkYXRhcSk7CisJCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9nZXRjb25maWcoc3RydWN0IHpkMTIwMSAqemQsIGludCByaWQsIHZvaWQgKnJpZGRhdGEsCisJdW5zaWduZWQgaW50IHJpZGRhdGFsZW4pCit7CisJaW50IGVycjsKKwlpbnQgaSA9IDA7CisJaW50IGNvZGU7CisJaW50IHJpZF9maWQ7CisJaW50IGxlbmd0aDsKKwl1bnNpZ25lZCBjaGFyICpwZGF0YTsKKwkKKwl6ZC0+cnhkYXRhcyA9IDA7CisJZXJyID0gemQxMjAxX2RvY21kKHpkLCBaRDEyMDFfQ01EQ09ERV9BQ0NFU1MsIHJpZCwgMCwgMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh6ZC0+cnhkYXRhcSwgemQtPnJ4ZGF0YXMpOworCWlmICghemQtPnJ4bGVuKQorCQlyZXR1cm4gLUVJTzsKKworCWNvZGUgPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiopKCZ6ZC0+cnhkYXRhWzRdKSk7CisJcmlkX2ZpZCA9IGxlMTZfdG9fY3B1KCooX19sZTE2KikoJnpkLT5yeGRhdGFbNl0pKTsKKwlsZW5ndGggPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiopKCZ6ZC0+cnhkYXRhWzhdKSk7CisJaWYgKGxlbmd0aCA+IHpkLT5yeGxlbikKKwkJbGVuZ3RoID0gemQtPnJ4bGVuLTY7CisKKwkvKiBJZiBhY2Nlc3MgYml0IGlzIG5vdCBvbiwgdGhlbiBlcnJvciAqLworCWlmICgoY29kZSAmIFpEMTIwMV9BQ0NFU1NCSVQpICE9IFpEMTIwMV9BQ0NFU1NCSVQgfHwgcmlkX2ZpZCAhPSByaWQgKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIE5vdCBlbm91Z2ggYnVmZmVyIGZvciBhbGxvY2F0aW5nIGRhdGEgKi8KKwlpZiAocmlkZGF0YWxlbiAhPSAobGVuZ3RoIC0gNCkpIHsKKwkJZGV2X2RiZygmemQtPnVzYi0+ZGV2LCAicmlkZGF0YWxlbiBtaXNtYXRjaGVzLCBleHBlY3RlZD0ldSwgKHBhY2tldD0ldSkgbGVuZ3RoPSV1LCByaWQ9MHglMDRYLCByaWRfZmlkPTB4JTA0WFxuIiwKKwkJICAgIHJpZGRhdGFsZW4sIHpkLT5yeGxlbiwgbGVuZ3RoLCByaWQsIHJpZF9maWQpOworCQlyZXR1cm4gLUVOT0RBVEE7CisJfQorCisJemQtPnJ4ZGF0YXMgPSAwOworCS8qIElzc3VlIFNldFJ4UmlkIGNvbW1uZCAqLwkJCQorCWVyciA9IHpkMTIwMV9kb2NtZCh6ZCwgWkQxMjAxX0NNRENPREVfU0VUUlhSSUQsIHJpZCwgMCwgbGVuZ3RoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogUmVjZWl2ZSBSSUQgcmVjb3JkIGZyb20gcmVzb3VyY2UgcGFja2V0cyAqLworCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh6ZC0+cnhkYXRhcSwgemQtPnJ4ZGF0YXMpOworCWlmICghemQtPnJ4bGVuKQorCQlyZXR1cm4gLUVJTzsKKworCWlmICh6ZC0+cnhkYXRhW3pkLT5yeGxlbiAtIDFdICE9IFpEMTIwMV9QQUNLRVRfUkVTT1VSQ0UpIHsKKwkJZGV2X2RiZygmemQtPnVzYi0+ZGV2LCAiUGFja2V0IHR5cGUgbWlzbWF0Y2g6IDB4JXggbm90IDB4M1xuIiwKKwkJICAgIHpkLT5yeGRhdGFbemQtPnJ4bGVuLTFdKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogU2V0IHRoZSBkYXRhIHBvaW50ZXIgYW5kIHJlY2VpdmVkIGRhdGEgbGVuZ3RoICovCisJcGRhdGEgPSB6ZC0+cnhkYXRhOworCWxlbmd0aCA9IHpkLT5yeGxlbjsKKworCWRvIHsKKwkJaW50ICBhY3R1YWxfbGVuZ3RoOworCisJCWFjdHVhbF9sZW5ndGggPSAobGVuZ3RoID4gNjQpID8gNjQgOiBsZW5ndGg7CisKKwkJaWYocGRhdGFbMF0gIT0gMHgzKSB7CisJCQlkZXZfZGJnKCZ6ZC0+dXNiLT5kZXYsICJSeCBSZXNvdXJjZSBwYWNrZXQgdHlwZSBlcnJvcjogJTAyWFxuIiwKKwkJCSAgICBwZGF0YVswXSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChhY3R1YWxfbGVuZ3RoICE9IDY0KSB7CisJCQkvKiBUcmltIHRoZSBsYXN0IHBhY2tldCB0eXBlIGJ5dGUgKi8KKwkJCWFjdHVhbF9sZW5ndGgtLTsKKwkJfQorCisJCS8qIFNraXAgdGhlIDQgYnl0ZXMgaGVhZGVyIChSSUQgbGVuZ3RoIGFuZCBSSUQpICovCisJCWlmKGkgPT0gMCkgeworCQkJcGRhdGEgKz0gODsKKwkJCWFjdHVhbF9sZW5ndGggLT0gODsKKwkJfQorCQllbHNlIHsKKwkJCXBkYXRhICs9IDQ7CisJCQlhY3R1YWxfbGVuZ3RoIC09IDQ7CisJCX0KKwkJCisJCW1lbWNweShyaWRkYXRhLCBwZGF0YSwgYWN0dWFsX2xlbmd0aCk7CisJCXJpZGRhdGEgKz0gYWN0dWFsX2xlbmd0aDsKKwkJcGRhdGEgKz0gYWN0dWFsX2xlbmd0aDsKKwkJbGVuZ3RoIC09IDY0OworCQlpKys7CisJfSB3aGlsZSAobGVuZ3RoID4gMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqCXJlc3JlcToKKyAqCQlieXRlCXR5cGUKKyAqCQlieXRlCXNlcXVlbmNlCisgKgkJdTE2CXJlc2VydmVkCisgKgkJYnl0ZQlkYXRhWzEyXQorICoJdG90YWw6IDE2CisgKi8KK3N0YXRpYyBpbnQgemQxMjAxX3NldGNvbmZpZyhzdHJ1Y3QgemQxMjAxICp6ZCwgaW50IHJpZCwgdm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd2FpdCkKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGNoYXIgKnJlcXVlc3Q7CisJaW50IHJlcWxlbjsKKwljaGFyIHNlcT0wOworCXN0cnVjdCB1cmIgKnVyYjsKKwl1bnNpZ25lZCBpbnQgZ2ZwX21hc2sgPSB3YWl0ID8gR0ZQX05PSU8gOiBHRlBfQVRPTUlDOworCisJbGVuICs9IDQ7CQkJLyogZmlyc3QgNCBhcmUgZm9yIGhlYWRlciAqLworCisJemQtPnJ4ZGF0YXMgPSAwOworCXpkLT5yeGxlbiA9IDA7CisJZm9yIChzZXE9MDsgbGVuID4gMDsgc2VxKyspIHsKKwkJcmVxdWVzdCA9IGttYWxsb2MoMTYsIGdmcF9tYXNrKTsKKwkJaWYgKCFyZXF1ZXN0KQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgZ2ZwX21hc2spOworCQlpZiAoIXVyYikgeworCQkJa2ZyZWUocmVxdWVzdCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQltZW1zZXQocmVxdWVzdCwgMCwgMTYpOworCQlyZXFsZW4gPSBsZW4+MTIgPyAxMiA6IGxlbjsKKwkJcmVxdWVzdFswXSA9IFpEMTIwMV9VU0JfUkVTUkVROworCQlyZXF1ZXN0WzFdID0gc2VxOworCQlyZXF1ZXN0WzJdID0gMDsKKwkJcmVxdWVzdFszXSA9IDA7CisJCWlmIChyZXF1ZXN0WzFdID09IDApIHsKKwkJCS8qIGFkZCBoZWFkZXIgKi8KKwkJCSooX19sZTE2KikmcmVxdWVzdFs0XSA9IGNwdV90b19sZTE2KChsZW4tMisxKS8yKTsKKwkJCSooX19sZTE2KikmcmVxdWVzdFs2XSA9IGNwdV90b19sZTE2KHJpZCk7CisJCQltZW1jcHkocmVxdWVzdCs4LCBidWYsIHJlcWxlbi00KTsKKwkJCWJ1ZiArPSByZXFsZW4tNDsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweShyZXF1ZXN0KzQsIGJ1ZiwgcmVxbGVuKTsKKwkJCWJ1ZiArPSByZXFsZW47CisJCX0KKworCQlsZW4gLT0gcmVxbGVuOworCisJCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgemQtPnVzYiwgdXNiX3NuZGJ1bGtwaXBlKHpkLT51c2IsCisJCSAgICB6ZC0+ZW5kcF9vdXQyKSwgcmVxdWVzdCwgMTYsIHpkMTIwMV91c2JmcmVlLCB6ZCk7CisJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgZ2ZwX21hc2spOworCQlpZiAoZXJyKQorCQkJZ290byBlcnI7CisJfQorCisJcmVxdWVzdCA9IGttYWxsb2MoMTYsIGdmcF9tYXNrKTsKKwlpZiAoIXJlcXVlc3QpCisJCXJldHVybiAtRU5PTUVNOworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgZ2ZwX21hc2spOworCWlmICghdXJiKSB7CisJCWtmcmVlKHJlcXVlc3QpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJKigoX19sZTMyKilyZXF1ZXN0KSA9IGNwdV90b19sZTMyKFpEMTIwMV9VU0JfQ01EUkVRKTsKKwkqKChfX2xlMTYqKSZyZXF1ZXN0WzRdKSA9IAorCSAgICBjcHVfdG9fbGUxNihaRDEyMDFfQ01EQ09ERV9BQ0NFU1N8WkQxMjAxX0FDQ0VTU0JJVCk7CisJKigoX19sZTE2KikmcmVxdWVzdFs2XSkgPSBjcHVfdG9fbGUxNihyaWQpOworCSooKF9fbGUxNiopJnJlcXVlc3RbOF0pID0gY3B1X3RvX2xlMTYoMCk7CisJKigoX19sZTE2KikmcmVxdWVzdFsxMF0pID0gY3B1X3RvX2xlMTYoMCk7CisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCB6ZC0+dXNiLCB1c2Jfc25kYnVsa3BpcGUoemQtPnVzYiwgemQtPmVuZHBfb3V0MiksCisJICAgICByZXF1ZXN0LCAxNiwgemQxMjAxX3VzYmZyZWUsIHpkKTsKKwllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIGdmcF9tYXNrKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjsKKwkKKwlpZiAod2FpdCkgeworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoemQtPnJ4ZGF0YXEsIHpkLT5yeGRhdGFzKTsKKwkJaWYgKCF6ZC0+cnhsZW4gfHwgbGUxNl90b19jcHUoKihfX2xlMTYqKSZ6ZC0+cnhkYXRhWzZdKSAhPSByaWQpIHsKKwkJCWRldl9kYmcoJnpkLT51c2ItPmRldiwgIndyb25nIG9yIG5vIFJJRCByZWNlaXZlZFxuIik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK2VycjoKKwlrZnJlZShyZXF1ZXN0KTsKKwl1c2JfZnJlZV91cmIodXJiKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW5saW5lIGludCB6ZDEyMDFfZ2V0Y29uZmlnMTYoc3RydWN0IHpkMTIwMSAqemQsIGludCByaWQsIHNob3J0ICp2YWwpCit7CisJaW50IGVycjsKKwlfX2xlMTYgemR2YWw7CisKKwllcnIgPSB6ZDEyMDFfZ2V0Y29uZmlnKHpkLCByaWQsICZ6ZHZhbCwgc2l6ZW9mKF9fbGUxNikpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJKnZhbCA9IGxlMTZfdG9fY3B1KHpkdmFsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgemQxMjAxX3NldGNvbmZpZzE2KHN0cnVjdCB6ZDEyMDEgKnpkLCBpbnQgcmlkLCBzaG9ydCB2YWwpCit7CisJX19sZTE2IHpkdmFsID0gY3B1X3RvX2xlMTYodmFsKTsKKwlyZXR1cm4gKHpkMTIwMV9zZXRjb25maWcoemQsIHJpZCwgJnpkdmFsLCBzaXplb2YoX19sZTE2KSwgMSkpOworfQorCitpbnQgemQxMjAxX2RydnJfc3RhcnQoc3RydWN0IHpkMTIwMSAqemQpCit7CisJaW50IGVyciwgaTsKKwlzaG9ydCBtYXg7CisJX19sZTE2IHpkbWF4OworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwkKKwlidWZmZXIgPSBrbWFsbG9jKFpEMTIwMV9SWFNJWkUsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQoYnVmZmVyLCAwLCBaRDEyMDFfUlhTSVpFKTsKKworCXVzYl9maWxsX2J1bGtfdXJiKHpkLT5yeF91cmIsIHpkLT51c2IsIAorCSAgICB1c2JfcmN2YnVsa3BpcGUoemQtPnVzYiwgemQtPmVuZHBfaW4pLCBidWZmZXIsIFpEMTIwMV9SWFNJWkUsCisJICAgIHpkMTIwMV91c2JyeCwgemQpOworCisJZXJyID0gdXNiX3N1Ym1pdF91cmIoemQtPnJ4X3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfYnVmZmVyOworCQorCWVyciA9IHpkMTIwMV9kb2NtZCh6ZCwgWkQxMjAxX0NNRENPREVfSU5JVCwgMCwgMCwgMCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfdXJiOworCisJZXJyID0gemQxMjAxX2dldGNvbmZpZyh6ZCwgWkQxMjAxX1JJRF9DTkZNQVhUWEJVRkZFUk5VTUJFUiwgJnpkbWF4LAorCSAgICBzaXplb2YoX19sZTE2KSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfdXJiOworCisJbWF4ID0gbGUxNl90b19jcHUoemRtYXgpOworCWZvciAoaT0wOyBpPG1heDsgaSsrKSB7CisJCWVyciA9IHpkMTIwMV9kb2NtZCh6ZCwgWkQxMjAxX0NNRENPREVfQUxMT0MsIDE1MTQsIDAsIDApOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfdXJiOworCX0KKworCXJldHVybiAwOworCitlcnJfdXJiOgorCXVzYl9raWxsX3VyYih6ZC0+cnhfdXJiKTsKKwlyZXR1cm4gZXJyOworZXJyX2J1ZmZlcjoKKwlrZnJlZShidWZmZXIpOworCXJldHVybiBlcnI7Cit9CisKKy8qCU1hZ2ljIGFsZXJ0OiBUaGUgZmlybXdhcmUgZG9lc24ndCBzZWVtIHRvIGxpa2UgdGhlIE1BQyBzdGF0ZSBiZWluZworICoJdG9nZ2xlZCBpbiBwcm9taXNjIChha2EgbW9uaXRvcikgbW9kZS4KKyAqCShJdCB3b3JrcyBhIG51bWJlciBvZiB0aW1lcywgYnV0IHdpbGwgaGFsdCBldmVudHVhbGx5KQorICoJU28gd2UgdHVybiBpdCBvZiBiZWZvcmUgZGlzYWJsaW5nIGFuZCBvbiBhZnRlciBlbmFibGluZyBpZiBuZWVkZWQuCisgKi8KK3N0YXRpYyBpbnQgemQxMjAxX2VuYWJsZShzdHJ1Y3QgemQxMjAxICp6ZCkKK3sKKwlpbnQgZXJyOworCisJaWYgKHpkLT5tYWNfZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKKwllcnIgPSB6ZDEyMDFfZG9jbWQoemQsIFpEMTIwMV9DTURDT0RFX0VOQUJMRSwgMCwgMCwgMCk7CisJaWYgKCFlcnIpCisJCXpkLT5tYWNfZW5hYmxlZCA9IDE7CisKKwlpZiAoemQtPm1vbml0b3IpCisJCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9QUk9NSVNDVU9VU01PREUsIDEpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB6ZDEyMDFfZGlzYWJsZShzdHJ1Y3QgemQxMjAxICp6ZCkKK3sKKwlpbnQgZXJyOworCQorCWlmICghemQtPm1hY19lbmFibGVkKQorCQlyZXR1cm4gMDsKKwlpZiAoemQtPm1vbml0b3IpIHsKKwkJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX1BST01JU0NVT1VTTU9ERSwgMCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHpkMTIwMV9kb2NtZCh6ZCwgWkQxMjAxX0NNRENPREVfRElTQUJMRSwgMCwgMCwgMCk7CisJaWYgKCFlcnIpCisJCXpkLT5tYWNfZW5hYmxlZCA9IDA7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB6ZDEyMDFfbWFjX3Jlc2V0KHN0cnVjdCB6ZDEyMDEgKnpkKQoreworCWlmICghemQtPm1hY19lbmFibGVkKQorCQlyZXR1cm4gMDsKKwl6ZDEyMDFfZGlzYWJsZSh6ZCk7CisJcmV0dXJuIHpkMTIwMV9lbmFibGUoemQpOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9qb2luKHN0cnVjdCB6ZDEyMDEgKnpkLCBjaGFyICplc3NpZCwgaW50IGVzc2lkbGVuKQoreworCWludCBlcnIsIHZhbDsKKwljaGFyIGJ1ZltJV19FU1NJRF9NQVhfU0laRSsyXTsKKworCWVyciA9IHpkMTIwMV9kaXNhYmxlKHpkKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJdmFsID0gWkQxMjAxX0NORkFVVEhFTlRJQ0FUSU9OX09QRU5TWVNURU07CisJdmFsIHw9IFpEMTIwMV9DTkZBVVRIRU5USUNBVElPTl9TSEFSRURLRVk7CisJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORkFVVEhFTlRJQ0FUSU9OLCB2YWwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkqKF9fbGUxNiAqKWJ1ZiA9IGNwdV90b19sZTE2KGVzc2lkbGVuKTsKKwltZW1jcHkoYnVmKzIsIGVzc2lkLCBlc3NpZGxlbik7CisJaWYgKCF6ZC0+YXApIHsJLyogTm9ybWFsIHN0YXRpb24gKi8KKwkJZXJyID0gemQxMjAxX3NldGNvbmZpZyh6ZCwgWkQxMjAxX1JJRF9DTkZERVNJUkVEU1NJRCwgYnVmLAorCQkgICAgSVdfRVNTSURfTUFYX1NJWkUrMiwgMSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0gZWxzZSB7CS8qIEFQICovCisJCWVyciA9IHpkMTIwMV9zZXRjb25maWcoemQsIFpEMTIwMV9SSURfQ05GT1dOU1NJRCwgYnVmLAorCQkgICAgSVdfRVNTSURfTUFYX1NJWkUrMiwgMSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHpkMTIwMV9zZXRjb25maWcoemQsIFpEMTIwMV9SSURfQ05GT1dOTUFDQUREUiwgCisJICAgIHpkLT5kZXYtPmRldl9hZGRyLCB6ZC0+ZGV2LT5hZGRyX2xlbiwgMSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHpkMTIwMV9lbmFibGUoemQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwltc2xlZXAoMTAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZDEyMDFfbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCisJLyogU3RhcnQgTUFDIHdpdGggd2lsZGNhcmQgaWYgbm8gZXNzaWQgc2V0ICovCisJaWYgKCF6ZC0+bWFjX2VuYWJsZWQpCisJCXpkMTIwMV9qb2luKHpkLCB6ZC0+ZXNzaWQsIHpkLT5lc3NpZGxlbik7CisJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9uZXRfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkKKwlyZXR1cm4gMDsKK30KKworLyoKKwlSRkMgMTA0MiBlbmNhcHN1bGF0ZXMgRXRoZXJuZXQgZnJhbWVzIGluIDgwMi4xMSBmcmFtZXMKKwlieSBwcmVmaXhpbmcgdGhlbSB3aXRoIDB4YWEsIDB4YWEsIDB4MDMpIGZvbGxvd2VkIGJ5IGEgU05BUCBPSUQgb2YgMAorCSgweDAwLCAweDAwLCAweDAwKS4gWmQgcmVxdWlyZXMgYW4gYWRkaXRpb25uYWwgcGFkZGluZywgY29weQorCW9mIGV0aGVybmV0IGFkZHJlc3NlcywgbGVuZ3RoIG9mIHRoZSBzdGFuZGFyZCBSRkMgMTA0MiBwYWNrZXQKKwlhbmQgYSBjb21tYW5kIGJ5dGUgKHdoaWNoIGlzIG51bCBmb3IgdHgpLgorCQorCXR4IGZyYW1lIChmcm9tIFdsYW4gTkcpOgorCVJGQyAxMDQyOgorCQlsbGMJCTB4QUEgMHhBQSAweDAzICg4MDIuMiBMTEMpCisJCXNuYXAJCTB4MDAgMHgwMCAweDAwIChFdGhlcm5ldCBlbmNhcHN1bGF0ZWQpCisJCXR5cGUJCTIgYnl0ZXMsIEV0aGVybmV0IHR5cGUgZmllbGQKKwkJcGF5bG9hZAkJKG1pbnVzIGV0aCBoZWFkZXIpCisJWnlkYXMgc3BlY2lmaWM6CisJCXBhZGRpbmcJCTFCIGlmIChza2ItPmxlbis4KzEpJTY0PT0wCisJCUV0aCBNQUMgYWRkcgkxMiBieXRlcywgRXRoZXJuZXQgTUFDIGFkZHJlc3NlcworCQlsZW5ndGgJCTIgYnl0ZXMsIFJGQyAxMDQyIHBhY2tldCBsZW5ndGggCisJCQkJKGxsYytzbmFwK3R5cGUrcGF5bG9hZCkKKwkJemQJCTEgbnVsbCBieXRlLCB6ZDEyMDEgcGFja2V0IHR5cGUKKyAqLworc3RhdGljIGludCB6ZDEyMDFfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwl1bnNpZ25lZCBjaGFyICp0eGJ1ZiA9IHpkLT50eGRhdGE7CisJaW50IHR4YnVmbGVuLCBwYWQgPSAwLCBlcnI7CisJc3RydWN0IHVyYiAqdXJiID0gemQtPnR4X3VyYjsKKworCWlmICghemQtPm1hY19lbmFibGVkIHx8IHpkLT5tb25pdG9yKSB7CisJCXpkLT5zdGF0cy50eF9kcm9wcGVkKys7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gMDsKKwl9CisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCisJdHhidWZsZW4gPSBza2ItPmxlbiArIDggKyAxOworCWlmICh0eGJ1ZmxlbiU2NCA9PSAwKSB7CisJCXBhZCA9IDE7CisJCXR4YnVmbGVuKys7CisJfQorCXR4YnVmWzBdID0gMHhBQTsKKwl0eGJ1ZlsxXSA9IDB4QUE7CisJdHhidWZbMl0gPSAweDAzOworCXR4YnVmWzNdID0gMHgwMDsJLyogcmZjMTA0MiAqLworCXR4YnVmWzRdID0gMHgwMDsKKwl0eGJ1Zls1XSA9IDB4MDA7CisKKwltZW1jcHkodHhidWYrNiwgc2tiLT5kYXRhKzEyLCBza2ItPmxlbi0xMik7CisJaWYgKHBhZCkKKwkJdHhidWZbc2tiLT5sZW4tMTIrNl09MDsKKwltZW1jcHkodHhidWYrc2tiLT5sZW4tMTIrNitwYWQsIHNrYi0+ZGF0YSwgMTIpOworCSooX19iZTE2KikmdHhidWZbc2tiLT5sZW4rNitwYWRdID0gaHRvbnMoc2tiLT5sZW4tMTIrNik7CisJdHhidWZbdHhidWZsZW4tMV0gPSAwOworCisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCB6ZC0+dXNiLCB1c2Jfc25kYnVsa3BpcGUoemQtPnVzYiwgemQtPmVuZHBfb3V0KSwKKwkgICAgdHhidWYsIHR4YnVmbGVuLCB6ZDEyMDFfdXNidHgsIHpkKTsKKworCWVyciA9IHVzYl9zdWJtaXRfdXJiKHpkLT50eF91cmIsIEdGUF9BVE9NSUMpOworCWlmIChlcnIpIHsKKwkJemQtPnN0YXRzLnR4X2Vycm9ycysrOworCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCQlyZXR1cm4gZXJyOworCX0KKwl6ZC0+c3RhdHMudHhfcGFja2V0cysrOworCXpkLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlrZnJlZV9za2Ioc2tiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB6ZDEyMDFfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisKKwlpZiAoIXpkKQorCQlyZXR1cm47CisJZGV2X3dhcm4oJnpkLT51c2ItPmRldiwgIiVzOiBUWCB0aW1lb3V0LCBzaG9vdGluZyBkb3duIHVyYlxuIiwKKwkgICAgZGV2LT5uYW1lKTsKKwl6ZC0+dHhfdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfQVNZTkNfVU5MSU5LOworCXVzYl91bmxpbmtfdXJiKHpkLT50eF91cmIpOworCXpkLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkvKiBSZXN0YXJ0IHRoZSB0aW1lb3V0IHRvIHF1aWV0IHRoZSB3YXRjaGRvZzogKi8KKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKK30KKworc3RhdGljIGludCB6ZDEyMDFfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCit7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCWludCBlcnI7CisKKwlpZiAoIXpkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWVyciA9IHpkMTIwMV9zZXRjb25maWcoemQsIFpEMTIwMV9SSURfQ05GT1dOTUFDQUREUiwgCisJICAgIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4sIDEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOworCisJcmV0dXJuIHpkMTIwMV9tYWNfcmVzZXQoemQpOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnpkMTIwMV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCisJcmV0dXJuICZ6ZC0+c3RhdHM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqemQxMjAxX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisKKwlyZXR1cm4gJnpkLT5pd3N0YXRzOworfQorCitzdGF0aWMgdm9pZCB6ZDEyMDFfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJc3RydWN0IGRldl9tY19saXN0ICptYyA9IGRldi0+bWNfbGlzdDsKKwl1bnNpZ25lZCBjaGFyIHJlcWJ1ZltFVEhfQUxFTipaRDEyMDFfTUFYTVVMVEldOworCWludCBpOworCisJaWYgKGRldi0+bWNfY291bnQgPiBaRDEyMDFfTUFYTVVMVEkpCisJCXJldHVybjsKKworCWZvciAoaT0wOyBpPGRldi0+bWNfY291bnQ7IGkrKykgeworCQltZW1jcHkocmVxYnVmK2kqRVRIX0FMRU4sIG1jLT5kbWlfYWRkciwgRVRIX0FMRU4pOworCQltYyA9IG1jLT5uZXh0OworCX0KKwl6ZDEyMDFfc2V0Y29uZmlnKHpkLCBaRDEyMDFfUklEX0NORkdST1VQQUREUkVTUywgcmVxYnVmLAorCSAgICBkZXYtPm1jX2NvdW50KkVUSF9BTEVOLCAwKTsKKwkKK30KKworc3RhdGljIGludCB6ZDEyMDFfY29uZmlnX2NvbW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmVzc2lkKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisKKwlyZXR1cm4gemQxMjAxX21hY19yZXNldCh6ZCk7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX2dldF9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgY2hhciAqbmFtZSwgY2hhciAqZXh0cmEpCit7CisJc3RyY3B5KG5hbWUsICJJRUVFIDgwMi4xMWIiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9zZXRfZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCXNob3J0IGNoYW5uZWwgPSAwOworCWludCBlcnI7CisKKwlpZiAoZnJlcS0+ZSA9PSAwKQorCQljaGFubmVsID0gZnJlcS0+bTsKKwllbHNlIHsKKwkJaWYgKGZyZXEtPm0gPj0gMjQ4MikKKwkJCWNoYW5uZWwgPSAxNDsKKwkJaWYgKGZyZXEtPm0gPj0gMjQwNykKKwkJCWNoYW5uZWwgPSAoZnJlcS0+bS0yNDA3KS81OworCX0KKworCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZPV05DSEFOTkVMLCBjaGFubmVsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJemQxMjAxX21hY19yZXNldCh6ZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZDEyMDFfZ2V0X2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwlzaG9ydCBjaGFubmVsOworCWludCBlcnI7CisKKwllcnIgPSB6ZDEyMDFfZ2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GT1dOQ0hBTk5FTCwgJmNoYW5uZWwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZnJlcS0+ZSA9IDA7CisJZnJlcS0+bSA9IGNoYW5uZWw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZDEyMDFfc2V0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBfX3UzMiAqbW9kZSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwlzaG9ydCBwb3J0dHlwZSwgbW9uaXRvciA9IDA7CisJdW5zaWduZWQgY2hhciBidWZmZXJbSVdfRVNTSURfTUFYX1NJWkUrMl07CisJaW50IGVycjsKKworCWlmICh6ZC0+YXApIHsKKwkJaWYgKCptb2RlICE9IElXX01PREVfTUFTVEVSKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAwOworCX0KKworCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9QUk9NSVNDVU9VU01PREUsIDApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJemQtPmRldi0+dHlwZSA9IEFSUEhSRF9FVEhFUjsKKwlzd2l0Y2goKm1vZGUpIHsKKwkJY2FzZSBJV19NT0RFX01PTklUT1I6CisJCQltb25pdG9yID0gMTsKKwkJCXpkLT5kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExOworCQkJLyogTWFrZSBzdXJlIHdlIGFyZSBubyBsb25nZXIgYXNzb2NpYXRlZCB3aXRoIGJ5CisJCQkgICBzZXR0aW5nIGFuICdpbXBvc3NpYmxlJyBlc3NpZC4KKwkJCSAgIChvdGhlcndpc2Ugd2UgbWVzcyB1cCBmaXJtd2FyZSkKKwkJCSAqLworCQkJemQxMjAxX2pvaW4oemQsICJcMC0qI1wwIiwgNSk7CisJCQkvKiBQdXQgcG9ydCBpbiBwSUJTUyAqLworCQljYXNlIDg6IC8qIE5vIHBzZXVkby1JQlNTIGluIHdpcmVsZXNzIGV4dGVuc2lvbnMgKHlldCkgKi8KKwkJCXBvcnR0eXBlID0gWkQxMjAxX1BPUlRUWVBFX1BTRVVET0lCU1M7CisJCQlicmVhazsKKwkJY2FzZSBJV19NT0RFX0FESE9DOgorCQkJcG9ydHR5cGUgPSBaRDEyMDFfUE9SVFRZUEVfSUJTUzsKKwkJCWJyZWFrOworCQljYXNlIElXX01PREVfSU5GUkE6CisJCQlwb3J0dHlwZSA9IFpEMTIwMV9QT1JUVFlQRV9CU1M7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZQT1JUVFlQRSwgcG9ydHR5cGUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJaWYgKHpkLT5tb25pdG9yICYmICFtb25pdG9yKSB7CisJCQl6ZDEyMDFfZGlzYWJsZSh6ZCk7CisJCQkqKF9fbGUxNiAqKWJ1ZmZlciA9IGNwdV90b19sZTE2KHpkLT5lc3NpZGxlbik7CisJCQltZW1jcHkoYnVmZmVyKzIsIHpkLT5lc3NpZCwgemQtPmVzc2lkbGVuKTsKKwkJCWVyciA9IHpkMTIwMV9zZXRjb25maWcoemQsIFpEMTIwMV9SSURfQ05GREVTSVJFRFNTSUQsCisJCQkgICAgYnVmZmVyLCBJV19FU1NJRF9NQVhfU0laRSsyLCAxKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwl9CisJemQtPm1vbml0b3I9bW9uaXRvcjsKKwkvKiBJZiBtb25pdG9yIG1vZGUgaXMgc2V0IHdlIGRvbid0IGFjdHVhbGx5IHR1cm4gaXQgb24gaGVyZSBzaW5jZSBpdAorCSAqIGlzIGRvbmUgZHVyaW5nIG1hYyByZXNldCBhbnl3YXkgKHNlZSB6ZDEyMDFfbWFjX2VuYWJsZSkuCisJICovCisKKwl6ZDEyMDFfbWFjX3Jlc2V0KHpkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9nZXRfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIF9fdTMyICptb2RlLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCXNob3J0IHBvcnR0eXBlOworCWludCBlcnI7CisKKwllcnIgPSB6ZDEyMDFfZ2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GUE9SVFRZUEUsICZwb3J0dHlwZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlzd2l0Y2gocG9ydHR5cGUpIHsKKwkJY2FzZSBaRDEyMDFfUE9SVFRZUEVfSUJTUzoKKwkJCSptb2RlID0gSVdfTU9ERV9BREhPQzsKKwkJCWJyZWFrOworCQljYXNlIFpEMTIwMV9QT1JUVFlQRV9CU1M6CisJCQkqbW9kZSA9IElXX01PREVfSU5GUkE7CisJCQlicmVhazsKKwkJY2FzZSBaRDEyMDFfUE9SVFRZUEVfV0RTOgorCQkJKm1vZGUgPSBJV19NT0RFX1JFUEVBVDsKKwkJCWJyZWFrOworCQljYXNlIFpEMTIwMV9QT1JUVFlQRV9QU0VVRE9JQlNTOgorCQkJKm1vZGUgPSA4Oy8qIE5vIFBzZXVkby1JQlNTLi4uICovCisJCQlicmVhazsKKwkJY2FzZSBaRDEyMDFfUE9SVFRZUEVfQVA6CisJCQkqbW9kZSA9IElXX01PREVfTUFTVEVSOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZGJnKCZ6ZC0+dXNiLT5kZXYsICJVbmtub3duIHBvcnR0eXBlOiAlZFxuIiwKKwkJCSAgICBwb3J0dHlwZSk7CisJCQkqbW9kZSA9IElXX01PREVfQVVUTzsKKwl9CisJaWYgKHpkLT5tb25pdG9yKQorCQkqbW9kZSA9IElXX01PREVfTU9OSVRPUjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9nZXRfcmFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3QgaXdfcG9pbnQgKndycSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKilleHRyYTsKKworCXdycS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSk7CisJbWVtc2V0KHJhbmdlLCAwLCBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKSk7CisJcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7CisJcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gV0lSRUxFU1NfRVhUOworCisJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAxMjg7CisJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMTI4OworCXJhbmdlLT5tYXhfcXVhbC5ub2lzZSA9IDEyODsKKwlyYW5nZS0+bWF4X3F1YWwudXBkYXRlZCA9IDc7CisKKwlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVswXSA9IDU7CisJcmFuZ2UtPmVuY29kaW5nX3NpemVbMV0gPSAxMzsKKwlyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMjsKKwlyYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IFpEMTIwMV9OVU1LRVlTOworCisJcmFuZ2UtPm51bV9iaXRyYXRlcyA9IDQ7CisJcmFuZ2UtPmJpdHJhdGVbMF0gPSAxMDAwMDAwOworCXJhbmdlLT5iaXRyYXRlWzFdID0gMjAwMDAwMDsKKwlyYW5nZS0+Yml0cmF0ZVsyXSA9IDU1MDAwMDA7CisJcmFuZ2UtPmJpdHJhdGVbM10gPSAxMTAwMDAwMDsKKworCXJhbmdlLT5taW5fcnRzID0gMDsKKwlyYW5nZS0+bWluX2ZyYWcgPSBaRDEyMDFfRlJBR01JTjsKKwlyYW5nZS0+bWF4X3J0cyA9IFpEMTIwMV9SVFNNQVg7CisJcmFuZ2UtPm1pbl9mcmFnID0gWkQxMjAxX0ZSQUdNQVg7CisKKwlyZXR1cm4gMDsKK30KKworLyoJTGl0dGxlIGJpdCBvZiBtYWdpYyBoZXJlOiB3ZSBvbmx5IGdldCB0aGUgcXVhbGl0eSBpZiB3ZSBwb2xsCisgKglmb3IgaXQsIGFuZCB3ZSBuZXZlciBnZXQgYW4gYWN0dWFsIHJlcXVlc3QgdG8gdHJpZ2dlciBzdWNoCisgKglhIHBvbGwuIFRoZXJlZm9yZSB3ZSAnYXN1bWUnIHRoYXQgdGhlIHVzZXIgd2lsbCBzb29uIGFzayBmb3IKKyAqCXRoZSBzdGF0cyBhZnRlciBhc2tpbmcgdGhlIGJzc2lkLgorICovCitzdGF0aWMgaW50IHpkMTIwMV9nZXRfd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IHNvY2thZGRyICphcF9hZGRyLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzZdOworCisJaWYgKCF6ZDEyMDFfZ2V0Y29uZmlnKHpkLCBaRDEyMDFfUklEX0NPTU1TUVVBTElUWSwgYnVmZmVyLCA2KSkgeworCQkvKiBVbmZvcnR1bmF0bHkgdGhlIHF1YWxpdHkgYW5kIG5vaXNlIHJlcG9ydGVkIGlzIHVzZWxlc3MuCisJCSAgIHRoZXkgc2VlbSB0byBiZSBhY2N1bXVsYXRvcnMgdGhhdCBpbmNyZWFzZSB1bnRpbCB5b3UKKwkJICAgcmVhZCB0aGVtLCB1bmxlc3Mgd2UgcG9sbCBvbiBhIGZpeGVkIGludGVydmFsIHdlIGNhbid0CisJCSAgIHVzZSB0aGVtCisJCSAqLworCQkvKnpkLT5pd3N0YXRzLnF1YWwucXVhbCA9IGxlMTZfdG9fY3B1KCgoX19sZTE2ICopYnVmZmVyKVswXSk7Ki8KKwkJemQtPml3c3RhdHMucXVhbC5sZXZlbCA9IGxlMTZfdG9fY3B1KCgoX19sZTE2ICopYnVmZmVyKVsxXSk7CisJCS8qemQtPml3c3RhdHMucXVhbC5ub2lzZSA9IGxlMTZfdG9fY3B1KCgoX19sZTE2ICopYnVmZmVyKVsyXSk7Ki8KKwkJemQtPml3c3RhdHMucXVhbC51cGRhdGVkID0gMjsKKwl9CisKKwlyZXR1cm4gemQxMjAxX2dldGNvbmZpZyh6ZCxaRDEyMDFfUklEX0NVUlJFTlRCU1NJRCxhcF9hZGRyLT5zYV9kYXRhLDYpOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9zZXRfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBpd19wb2ludCAqc3JxLCBjaGFyICpleHRyYSkKK3sKKwkvKiBXZSBkbyBldmVyeXRoaW5nIGluIGdldF9zY2FuICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX2dldF9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IGl3X3BvaW50ICpzcnEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJaW50IGVyciwgaSwgaiwgZW5hYmxlZF9zYXZlOworCXN0cnVjdCBpd19ldmVudCBpd2U7CisJY2hhciAqY2V2ID0gZXh0cmE7CisJY2hhciAqZW5kX2J1ZiA9IGV4dHJhICsgSVdfU0NBTl9NQVhfREFUQTsKKworCS8qIE5vIHNjYW5uaW5nIGluIEFQIG1vZGUgKi8KKwlpZiAoemQtPmFwKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkvKiBTY2FuIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGlmIGRpc2FibGVkICovCisJZW5hYmxlZF9zYXZlID0gemQtPm1hY19lbmFibGVkOworCXpkMTIwMV9lbmFibGUoemQpOworCisJemQtPnJ4ZGF0YXMgPSAwOworCWVyciA9IHpkMTIwMV9kb2NtZCh6ZCwgWkQxMjAxX0NNRENPREVfSU5RVUlSRSwgCisJICAgICBaRDEyMDFfSU5RX1NDQU5SRVNVTFRTLCAwLCAwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHpkLT5yeGRhdGFxLCB6ZC0+cnhkYXRhcyk7CisJaWYgKCF6ZC0+cnhsZW4pCisJCXJldHVybiAtRUlPOworCisJaWYgKGxlMTZfdG9fY3B1KCooX19sZTE2KikmemQtPnJ4ZGF0YVsyXSkgIT0gWkQxMjAxX0lOUV9TQ0FOUkVTVUxUUykKKwkJcmV0dXJuIC1FSU87CisKKwlmb3IoaT04OyBpPHpkLT5yeGxlbjsgaSs9NjIpIHsKKwkJaXdlLmNtZCA9IFNJT0NHSVdBUDsKKwkJaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJCW1lbWNweShpd2UudS5hcF9hZGRyLnNhX2RhdGEsIHpkLT5yeGRhdGEraSs2LCA2KTsKKwkJY2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9BRERSX0xFTik7CisKKwkJaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSB6ZC0+cnhkYXRhW2krMTZdOworCQlpd2UudS5kYXRhLmZsYWdzID0gMTsKKwkJY2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY2V2LCBlbmRfYnVmLCAmaXdlLCB6ZC0+cnhkYXRhK2krMTgpOworCisJCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKKwkJaWYgKHpkLT5yeGRhdGFbaSsxNF0mMHgwMSkKKwkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX01BU1RFUjsKKwkJZWxzZQorCQkJaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7CisJCWNldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGNldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOworCQkKKwkJaXdlLmNtZCA9IFNJT0NHSVdGUkVROworCQlpd2UudS5mcmVxLm0gPSB6ZC0+cnhkYXRhW2krMF07CisJCWl3ZS51LmZyZXEuZSA9IDA7CisJCWNldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGNldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOworCQkKKwkJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOworCQlpd2UudS5iaXRyYXRlLmZpeGVkID0gMDsKKwkJaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7CisJCWZvciAoaj0wOyBqPDEwOyBqKyspIGlmICh6ZC0+cnhkYXRhW2krNTAral0pIHsKKwkJCWl3ZS51LmJpdHJhdGUudmFsdWUgPSAoemQtPnJ4ZGF0YVtpKzUwK2pdJjB4N2YpKjUwMDAwMDsKKwkJCWNldj1pd2Vfc3RyZWFtX2FkZF9ldmVudChjZXYsIGVuZF9idWYsICZpd2UsCisJCQkgICAgSVdfRVZfUEFSQU1fTEVOKTsKKwkJfQorCQkKKwkJaXdlLmNtZCA9IFNJT0NHSVdFTkNPREU7CisJCWl3ZS51LmRhdGEubGVuZ3RoID0gMDsKKwkJaWYgKHpkLT5yeGRhdGFbaSsxNF0mMHgxMCkKKwkJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRDsKKwkJZWxzZQorCQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKKwkJY2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY2V2LCBlbmRfYnVmLCAmaXdlLCBOVUxMKTsKKwkJCisJCWl3ZS5jbWQgPSBJV0VWUVVBTDsKKwkJaXdlLnUucXVhbC5xdWFsID0gemQtPnJ4ZGF0YVtpKzRdOworCQlpd2UudS5xdWFsLm5vaXNlPSB6ZC0+cnhkYXRhW2krMl0vMTAtMTAwOworCQlpd2UudS5xdWFsLmxldmVsID0gKDI1Nit6ZC0+cnhkYXRhW2krNF0qMTAwKS8yNTUtMTAwOworCQlpd2UudS5xdWFsLnVwZGF0ZWQgPSA3OworCQljZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChjZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKKwl9CisKKwlpZiAoIWVuYWJsZWRfc2F2ZSkKKwkJemQxMjAxX2Rpc2FibGUoemQpOworCisJc3JxLT5sZW5ndGggPSBjZXYgLSBleHRyYTsKKwlzcnEtPmZsYWdzID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9zZXRfZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmVzc2lkKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisKKwlpZiAoZGF0YS0+bGVuZ3RoID4gSVdfRVNTSURfTUFYX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkYXRhLT5sZW5ndGggPCAxKQorCQlkYXRhLT5sZW5ndGggPSAxOworCXpkLT5lc3NpZGxlbiA9IGRhdGEtPmxlbmd0aC0xOworCW1lbXNldCh6ZC0+ZXNzaWQsIDAsIElXX0VTU0lEX01BWF9TSVpFKzEpOworCW1lbWNweSh6ZC0+ZXNzaWQsIGVzc2lkLCBkYXRhLT5sZW5ndGgpOworCXJldHVybiB6ZDEyMDFfam9pbih6ZCwgemQtPmVzc2lkLCB6ZC0+ZXNzaWRsZW4pOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9nZXRfZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmVzc2lkKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisKKwltZW1jcHkoZXNzaWQsIHpkLT5lc3NpZCwgemQtPmVzc2lkbGVuKTsKKwlkYXRhLT5mbGFncyA9IDE7CisJZGF0YS0+bGVuZ3RoID0gemQtPmVzc2lkbGVuOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX2dldF9uaWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpuaWNrKQoreworCXN0cmNweShuaWNrLCAiemQxMjAxIik7CisJZGF0YS0+ZmxhZ3MgPSAxOworCWRhdGEtPmxlbmd0aCA9IHN0cmxlbihuaWNrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZDEyMDFfc2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwlzaG9ydCByYXRlOworCWludCBlcnI7CisKKwlzd2l0Y2ggKHJycS0+dmFsdWUpIHsKKwkJY2FzZSAxMDAwMDAwOgorCQkJcmF0ZSA9IFpEMTIwMV9SQVRFQjE7CisJCQlicmVhazsKKwkJY2FzZSAyMDAwMDAwOgorCQkJcmF0ZSA9IFpEMTIwMV9SQVRFQjI7CisJCQlicmVhazsKKwkJY2FzZSA1NTAwMDAwOgorCQkJcmF0ZSA9IFpEMTIwMV9SQVRFQjU7CisJCQlicmVhazsKKwkJY2FzZSAxMTAwMDAwMDoKKwkJZGVmYXVsdDoKKwkJCXJhdGUgPSBaRDEyMDFfUkFURUIxMTsKKwkJCWJyZWFrOworCX0KKwlpZiAoIXJycS0+Zml4ZWQpIHsgLyogQWxzbyBlbmFibGUgYWxsIGxvd2VyIGJpdHJhdGVzICovCisJCXJhdGUgfD0gcmF0ZS0xOworCX0KKwkKKwllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfVFhSQVRFQ05UTCwgcmF0ZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiB6ZDEyMDFfbWFjX3Jlc2V0KHpkKTsKK30KKworc3RhdGljIGludCB6ZDEyMDFfZ2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwlzaG9ydCByYXRlOworCWludCBlcnI7CisKKwllcnIgPSB6ZDEyMDFfZ2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ1VSUkVOVFRYUkFURSwgJnJhdGUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzd2l0Y2gocmF0ZSkgeworCQljYXNlIDE6CisJCQlycnEtPnZhbHVlID0gMTAwMDAwMDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlycnEtPnZhbHVlID0gMjAwMDAwMDsKKwkJCWJyZWFrOworCQljYXNlIDU6CisJCQlycnEtPnZhbHVlID0gNTUwMDAwMDsKKwkJCWJyZWFrOworCQljYXNlIDExOgorCQkJcnJxLT52YWx1ZSA9IDExMDAwMDAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlycnEtPnZhbHVlID0gMDsKKwl9CisJcnJxLT5maXhlZCA9IDA7CisJcnJxLT5kaXNhYmxlZCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZDEyMDFfc2V0X3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorICAgIHN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCWludCBlcnI7CisJc2hvcnQgdmFsID0gcnRzLT52YWx1ZTsKKworCWlmIChydHMtPmRpc2FibGVkIHx8ICFydHMtPmZpeGVkKQorCQl2YWwgPSBaRDEyMDFfUlRTTUFYOworCWlmICh2YWwgPiBaRDEyMDFfUlRTTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GUlRTVEhSRVNIT0xELCB2YWwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJcmV0dXJuIHpkMTIwMV9tYWNfcmVzZXQoemQpOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9nZXRfcnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgc3RydWN0IGl3X3BhcmFtICpydHMsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJc2hvcnQgcnRzdDsKKwlpbnQgZXJyOworCisJZXJyID0gemQxMjAxX2dldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORlJUU1RIUkVTSE9MRCwgJnJ0c3QpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJcnRzLT52YWx1ZSA9IHJ0c3Q7CisJcnRzLT5kaXNhYmxlZCA9IChydHMtPnZhbHVlID09IFpEMTIwMV9SVFNNQVgpOworCXJ0cy0+Zml4ZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX3NldF9mcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgc3RydWN0IGl3X3BhcmFtICpmcmFnLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCWludCBlcnI7CisJc2hvcnQgdmFsID0gZnJhZy0+dmFsdWU7CisKKwlpZiAoZnJhZy0+ZGlzYWJsZWQgfHwgIWZyYWctPmZpeGVkKQorCQl2YWwgPSBaRDEyMDFfRlJBR01BWDsKKwlpZiAodmFsID4gWkQxMjAxX0ZSQUdNQVgpCisJCXJldHVybiAtRUlOVkFMOworCWlmICh2YWwgPCBaRDEyMDFfRlJBR01JTikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHZhbCAmIDEpCisJCXJldHVybiAtRUlOVkFMOworCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZGUkFHVEhSRVNIT0xELCB2YWwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJcmV0dXJuIHpkMTIwMV9tYWNfcmVzZXQoemQpOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9nZXRfZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorICAgIHN0cnVjdCBpd19wYXJhbSAqZnJhZywgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwlzaG9ydCBmcmFndDsKKwlpbnQgZXJyOworCisJZXJyID0gemQxMjAxX2dldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORkZSQUdUSFJFU0hPTEQsICZmcmFndCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlmcmFnLT52YWx1ZSA9IGZyYWd0OworCWZyYWctPmRpc2FibGVkID0gKGZyYWctPnZhbHVlID09IFpEMTIwMV9GUkFHTUFYKTsKKwlmcmFnLT5maXhlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZDEyMDFfc2V0X3JldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9nZXRfcmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX3NldF9lbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqa2V5KQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJc2hvcnQgaTsKKwlpbnQgZXJyLCByaWQ7CisKKwlpZiAoZXJxLT5sZW5ndGggPiBaRDEyMDFfTUFYS0VZTEVOKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWkgPSAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCktMTsKKwlpZiAoaSA9PSAtMSkgeworCQllcnIgPSB6ZDEyMDFfZ2V0Y29uZmlnMTYoemQsWkQxMjAxX1JJRF9DTkZERUZBVUxUS0VZSUQsJmkpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9IGVsc2UgeworCQllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GREVGQVVMVEtFWUlELCBpKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJaWYgKGkgPCAwIHx8IGkgPj0gWkQxMjAxX05VTUtFWVMpCisJCXJldHVybiAtRUlOVkFMOworCisJcmlkID0gWkQxMjAxX1JJRF9DTkZERUZBVUxUS0VZMCArIGk7CisJZXJyID0gemQxMjAxX3NldGNvbmZpZyh6ZCwgcmlkLCBrZXksIGVycS0+bGVuZ3RoLCAxKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXpkLT5lbmNvZGVfa2V5bGVuW2ldID0gZXJxLT5sZW5ndGg7CisJbWVtY3B5KHpkLT5lbmNvZGVfa2V5c1tpXSwga2V5LCBlcnEtPmxlbmd0aCk7CisKKwlpPTA7CisJaWYgKCEoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCAmIElXX0VOQ09ERV9NT0RFKSkgeworCQlpIHw9IDB4MDE7CisJCXpkLT5lbmNvZGVfZW5hYmxlZCA9IDE7CisJfSBlbHNlCisJCXpkLT5lbmNvZGVfZW5hYmxlZCA9IDA7CisJaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfUkVTVFJJQ1RFRCAmIElXX0VOQ09ERV9NT0RFKSB7CisJCWkgfD0gMHgwMjsKKwkJemQtPmVuY29kZV9yZXN0cmljdGVkID0gMTsKKwl9IGVsc2UKKwkJemQtPmVuY29kZV9yZXN0cmljdGVkID0gMDsKKwllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GV0VCRkxBR1MsIGkpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoemQtPmVuY29kZV9lbmFibGVkKQorCQlpID0gWkQxMjAxX0NORkFVVEhFTlRJQ0FUSU9OX1NIQVJFREtFWTsKKwllbHNlCisJCWkgPSBaRDEyMDFfQ05GQVVUSEVOVElDQVRJT05fT1BFTlNZU1RFTTsKKwllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GQVVUSEVOVElDQVRJT04sIGkpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gemQxMjAxX21hY19yZXNldCh6ZCk7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX2dldF9lbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqa2V5KQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJc2hvcnQgaTsKKwlpbnQgZXJyOworCisJaWYgKHpkLT5lbmNvZGVfZW5hYmxlZCkKKwkJZXJxLT5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEOworCWVsc2UKKwkJZXJxLT5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKKwlpZiAoemQtPmVuY29kZV9yZXN0cmljdGVkKQorCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9SRVNUUklDVEVEOworCWVsc2UKKwkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfT1BFTjsKKworCWkgPSAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLTE7CisJaWYgKGkgPT0gLTEpIHsKKwkJZXJyID0gemQxMjAxX2dldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORkRFRkFVTFRLRVlJRCwgJmkpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisJaWYgKGk8MCB8fCBpPj0gWkQxMjAxX05VTUtFWVMpCisJCXJldHVybiAtRUlOVkFMOworCisJZXJxLT5mbGFncyB8PSBpKzE7CisJCisJZXJxLT5sZW5ndGggPSB6ZC0+ZW5jb2RlX2tleWxlbltpXTsKKwltZW1jcHkoa2V5LCB6ZC0+ZW5jb2RlX2tleXNbaV0sIGVycS0+bGVuZ3RoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpkMTIwMV9zZXRfcG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCXNob3J0IGVuYWJsZWQsIGR1cmF0aW9uLCBsZXZlbDsKKwlpbnQgZXJyOworCisJZW5hYmxlZCA9IHZ3cnEtPmRpc2FibGVkID8gMCA6IDE7CisJaWYgKGVuYWJsZWQpIHsKKwkJaWYgKHZ3cnEtPmZsYWdzICYgSVdfUE9XRVJfUEVSSU9EKSB7CisJCQlkdXJhdGlvbiA9IHZ3cnEtPnZhbHVlOworCQkJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCAKKwkJCSAgICBaRDEyMDFfUklEX0NORk1BWFNMRUVQRFVSQVRJT04sIGR1cmF0aW9uKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmICh2d3JxLT5mbGFncyAmIElXX1BPV0VSX1RJTUVPVVQpIHsKKwkJCWVyciA9IHpkMTIwMV9nZXRjb25maWcxNih6ZCwgCisJCQkgICAgWkQxMjAxX1JJRF9DTkZNQVhTTEVFUERVUkFUSU9OLCAmZHVyYXRpb24pOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQkJbGV2ZWwgPSB2d3JxLT52YWx1ZSAqIDQgLyBkdXJhdGlvbjsKKwkJCWlmIChsZXZlbCA+IDQpCisJCQkJbGV2ZWwgPSA0OworCQkJaWYgKGxldmVsIDwgMCkKKwkJCQlsZXZlbCA9IDA7CisJCQllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GUE1FUFMsCisJCQkgICAgbGV2ZWwpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQkJZ290byBvdXQ7CisJCX0KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorb3V0OgorCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZQTUVOQUJMRUQsIGVuYWJsZWQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZDEyMDFfZ2V0X3Bvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IGl3X3BhcmFtICp2d3JxLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCXNob3J0IGVuYWJsZWQsIGxldmVsLCBkdXJhdGlvbjsKKwlpbnQgZXJyOworCisJZXJyID0gemQxMjAxX2dldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORlBNRU5BQkxFRCwgJmVuYWJsZWQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZXJyID0gemQxMjAxX2dldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORlBNRVBTLCAmbGV2ZWwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZXJyID0gemQxMjAxX2dldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORk1BWFNMRUVQRFVSQVRJT04sICZkdXJhdGlvbik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwl2d3JxLT5kaXNhYmxlZCA9IGVuYWJsZWQgPyAwIDogMTsKKwlpZiAodndycS0+ZmxhZ3MgJiBJV19QT1dFUl9UWVBFKSB7CisJCWlmICh2d3JxLT5mbGFncyAmIElXX1BPV0VSX1BFUklPRCkgeworCQkJdndycS0+dmFsdWUgPSBkdXJhdGlvbjsKKwkJCXZ3cnEtPmZsYWdzID0gSVdfUE9XRVJfUEVSSU9EOworCQl9IGVsc2UgeworCQkJdndycS0+dmFsdWUgPSBkdXJhdGlvbiAqIGxldmVsIC8gNDsKKwkJCXZ3cnEtPmZsYWdzID0gSVdfUE9XRVJfVElNRU9VVDsKKwkJfQorCX0KKwlpZiAodndycS0+ZmxhZ3MgJiBJV19QT1dFUl9NT0RFKSB7CisJCWlmIChlbmFibGVkICYmIGxldmVsKQorCQkJdndycS0+ZmxhZ3MgPSBJV19QT1dFUl9VTklDQVNUX1I7CisJCWVsc2UKKwkJCXZ3cnEtPmZsYWdzID0gSVdfUE9XRVJfQUxMX1I7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgemQxMjAxX2l3X2hhbmRsZXJbXSA9Cit7CisJKGl3X2hhbmRsZXIpIHpkMTIwMV9jb25maWdfY29tbWl0LAkvKiBTSU9DU0lXQ09NTUlUICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9nZXRfbmFtZSwgICAgCS8qIFNJT0NHSVdOQU1FICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogU0lPQ1NJV05XSUQgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkvKiBTSU9DR0lXTldJRCAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfc2V0X2ZyZXEsCQkvKiBTSU9DU0lXRlJFUSAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfZ2V0X2ZyZXEsCQkvKiBTSU9DR0lXRlJFUSAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfc2V0X21vZGUsCQkvKiBTSU9DU0lXTU9ERSAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfZ2V0X21vZGUsCQkvKiBTSU9DR0lXTU9ERSAqLworCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgIAkvKiBTSU9DU0lXU0VOUyAqLworCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgCQkvKiBTSU9DR0lXU0VOUyAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIFNJT0NTSVdSQU5HRSAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfZ2V0X3JhbmdlLCAgICAgICAgICAgLyogU0lPQ0dJV1JBTkdFICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogU0lPQ1NJV1BSSVYgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkvKiBTSU9DR0lXUFJJViAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIFNJT0NTSVdTVEFUUyAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIFNJT0NHSVdTVEFUUyAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIFNJT0NTSVdTUFkgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkvKiBTSU9DR0lXU1BZICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogLS0gaG9sZSAtLSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTC8qemQxMjAxX3NldF93YXAqLywJCS8qIFNJT0NTSVdBUCAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfZ2V0X3dhcCwJCS8qIFNJT0NHSVdBUCAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgCQkvKiBTSU9DR0lXQVBMSVNUICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9zZXRfc2NhbiwJCS8qIFNJT0NTSVdTQ0FOICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9nZXRfc2NhbiwJCS8qIFNJT0NHSVdTQ0FOICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9zZXRfZXNzaWQsCQkvKiBTSU9DU0lXRVNTSUQgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX2dldF9lc3NpZCwJCS8qIFNJT0NHSVdFU1NJRCAqLworCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgIAkJLyogU0lPQ1NJV05JQ0tOICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9nZXRfbmljaywgCQkvKiBTSU9DR0lXTklDS04gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogLS0gaG9sZSAtLSAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfc2V0X3JhdGUsCQkvKiBTSU9DU0lXUkFURSAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfZ2V0X3JhdGUsCQkvKiBTSU9DR0lXUkFURSAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfc2V0X3J0cywJCS8qIFNJT0NTSVdSVFMgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX2dldF9ydHMsCQkvKiBTSU9DR0lXUlRTICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9zZXRfZnJhZywJCS8qIFNJT0NTSVdGUkFHICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9nZXRfZnJhZywJCS8qIFNJT0NHSVdGUkFHICovCisJKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgCQkvKiBTSU9DU0lXVFhQT1cgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgCQkvKiBTSU9DR0lXVFhQT1cgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX3NldF9yZXRyeSwJCS8qIFNJT0NTSVdSRVRSWSAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfZ2V0X3JldHJ5LAkJLyogU0lPQ0dJV1JFVFJZICovCisJKGl3X2hhbmRsZXIpIHpkMTIwMV9zZXRfZW5jb2RlLAkJLyogU0lPQ1NJV0VOQ09ERSAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfZ2V0X2VuY29kZSwJCS8qIFNJT0NHSVdFTkNPREUgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX3NldF9wb3dlciwJCS8qIFNJT0NTSVdQT1dFUiAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfZ2V0X3Bvd2VyLAkJLyogU0lPQ0dJV1BPV0VSICovCit9OworCitzdGF0aWMgaW50IHpkMTIwMV9zZXRfaG9zdGF1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwlpbnQgZXJyOworCisJaWYgKCF6ZC0+YXApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZIT1NUQVVUSCwgcnJxLT52YWx1ZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZDEyMDFfZ2V0X2hvc3RhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkID0gKHN0cnVjdCB6ZDEyMDEgKilkZXYtPnByaXY7CisJc2hvcnQgaG9zdGF1dGg7CisJaW50IGVycjsKKworCWlmICghemQtPmFwKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwllcnIgPSB6ZDEyMDFfZ2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GSE9TVEFVVEgsICZob3N0YXV0aCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlycnEtPnZhbHVlID0gaG9zdGF1dGg7CisJcnJxLT5maXhlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZDEyMDFfYXV0aF9zdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBzdHJ1Y3Qgc29ja2FkZHIgKnN0YSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHpkMTIwMSAqemQgPSAoc3RydWN0IHpkMTIwMSAqKWRldi0+cHJpdjsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxMF07CisKKwlpZiAoIXpkLT5hcCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJbWVtY3B5KGJ1ZmZlciwgc3RhLT5zYV9kYXRhLCBFVEhfQUxFTik7CisJKihzaG9ydCopKGJ1ZmZlcis2KSA9IDA7CS8qIDA9PXN1Y2Nlc3MsIDE9PWZhaWx1cmUgKi8KKwkqKHNob3J0KikoYnVmZmVyKzgpID0gMDsKKworCXJldHVybiB6ZDEyMDFfc2V0Y29uZmlnKHpkLCBaRDEyMDFfUklEX0FVVEhFTlRJQ0FURVNUQSwgYnVmZmVyLCAxMCwgMSk7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX3NldF9tYXhhc3NvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCWludCBlcnI7CisKKwlpZiAoIXpkLT5hcCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORk1BWEFTU09DU1RBVElPTlMsIHJycS0+dmFsdWUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemQxMjAxX2dldF9tYXhhc3NvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgemQxMjAxICp6ZCA9IChzdHJ1Y3QgemQxMjAxICopZGV2LT5wcml2OworCXNob3J0IG1heGFzc29jOworCWludCBlcnI7CisKKwlpZiAoIXpkLT5hcCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJZXJyID0gemQxMjAxX2dldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORk1BWEFTU09DU1RBVElPTlMsICZtYXhhc3NvYyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlycnEtPnZhbHVlID0gbWF4YXNzb2M7CisJcnJxLT5maXhlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgemQxMjAxX3ByaXZhdGVfaGFuZGxlcltdID0geworCShpd19oYW5kbGVyKSB6ZDEyMDFfc2V0X2hvc3RhdXRoLAkvKiBaRDEyMDFTSVdIT1NUQVVUSCAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfZ2V0X2hvc3RhdXRoLAkvKiBaRDEyMDFHSVdIT1NUQVVUSCAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfYXV0aF9zdGEsCQkvKiBaRDEyMDFTSVdBVVRIU1RBICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJLyogbm90aGluZyB0byBnZXQgKi8KKwkoaXdfaGFuZGxlcikgemQxMjAxX3NldF9tYXhhc3NvYywJLyogWkQxMjAxU0lNQVhBU1NPQyAqLworCShpd19oYW5kbGVyKSB6ZDEyMDFfZ2V0X21heGFzc29jLAkvKiBaRDEyMDFHSU1BWEFTU09DICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGl3X3ByaXZfYXJncyB6ZDEyMDFfcHJpdmF0ZV9hcmdzW10gPSB7CisJeyBaRDEyMDFTSVdIT1NUQVVUSCwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCisJICAgIElXX1BSSVZfVFlQRV9OT05FLCAic2V0aG9zdGF1dGgiIH0sCisJeyBaRDEyMDFHSVdIT1NUQVVUSCwgSVdfUFJJVl9UWVBFX05PTkUsCisJICAgIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAiZ2V0aG9zdGF1dGgiIH0sCisJeyBaRDEyMDFTSVdBVVRIU1RBLCBJV19QUklWX1RZUEVfQUREUiB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsIAorCSAgICBJV19QUklWX1RZUEVfTk9ORSwgImF1dGhzdGF0aW9uIiB9LAorCXsgWkQxMjAxU0lXTUFYQVNTT0MsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAorCSAgICBJV19QUklWX1RZUEVfTk9ORSwgInNldG1heGFzc29jIiB9LAorCXsgWkQxMjAxR0lXTUFYQVNTT0MsIElXX1BSSVZfVFlQRV9OT05FLAorCSAgICBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgImdldG1heGFzc29jIiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiB6ZDEyMDFfaXdfaGFuZGxlcnMgPSB7CisJLm51bV9zdGFuZGFyZCAJCT0gc2l6ZW9mKHpkMTIwMV9pd19oYW5kbGVyKS9zaXplb2YoaXdfaGFuZGxlciksCisJLm51bV9wcml2YXRlIAkJPSBzaXplb2YoemQxMjAxX3ByaXZhdGVfaGFuZGxlcikvc2l6ZW9mKGl3X2hhbmRsZXIpLAorCS5udW1fcHJpdmF0ZV9hcmdzIAk9IHNpemVvZih6ZDEyMDFfcHJpdmF0ZV9hcmdzKS9zaXplb2Yoc3RydWN0IGl3X3ByaXZfYXJncyksCisJLnN0YW5kYXJkIAkJPSAoaXdfaGFuZGxlciAqKXpkMTIwMV9pd19oYW5kbGVyLAorCS5wcml2YXRlIAkJPSAoaXdfaGFuZGxlciAqKXpkMTIwMV9wcml2YXRlX2hhbmRsZXIsCisJLnByaXZhdGVfYXJncyAJCT0gKHN0cnVjdCBpd19wcml2X2FyZ3MgKikgemQxMjAxX3ByaXZhdGVfYXJncywKK307CisKK2ludCB6ZDEyMDFfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2I7CisJaW50IGksIGVycjsKKwlzaG9ydCBwb3J0dHlwZTsKKwljaGFyIGJ1ZltJV19FU1NJRF9NQVhfU0laRSsyXTsKKworCXVzYiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKworCXpkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHpkMTIwMSksIEdGUF9LRVJORUwpOworCWlmICghemQpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldCh6ZCwgMCwgc2l6ZW9mKHN0cnVjdCB6ZDEyMDEpKTsKKwl6ZC0+YXAgPSBhcDsKKwl6ZC0+dXNiID0gdXNiOworCXpkLT5yZW1vdmVkID0gMDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ6ZC0+cnhkYXRhcSk7CisJSU5JVF9ITElTVF9IRUFEKCZ6ZC0+ZnJhZ2xpc3QpOworCQorCWVyciA9IHpkMTIwMV9md191cGxvYWQodXNiLCB6ZC0+YXApOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmdXNiLT5kZXYsICJ6ZDEyMDEgZmlybXdhcmUgdXBsb2FkIGZhaWxlZDogJWRcbiIsIGVycik7CisJCWdvdG8gZXJyX3pkOworCX0KKwkKKwl6ZC0+ZW5kcF9pbiA9IDE7CisJemQtPmVuZHBfb3V0ID0gMTsKKwl6ZC0+ZW5kcF9vdXQyID0gMjsKKwl6ZC0+cnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwl6ZC0+dHhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXpkLT5yeF91cmIgfHwgIXpkLT50eF91cmIpCisJCWdvdG8gZXJyX3pkOworCisJZm9yKGkgPSAwOyBpPDEwMDsgaSsrKQorCQl1ZGVsYXkoMTAwMCk7CisKKwllcnIgPSB6ZDEyMDFfZHJ2cl9zdGFydCh6ZCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfemQ7CisKKwllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfQ05GTUFYREFUQUxFTiwgMjMxMik7CisJaWYgKGVycikKKwkJZ290byBlcnJfc3RhcnQ7CisKKwllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnMTYoemQsIFpEMTIwMV9SSURfVFhSQVRFQ05UTCwKKwkgICAgWkQxMjAxX1JBVEVCMSB8IFpEMTIwMV9SQVRFQjIgfCBaRDEyMDFfUkFURUI1IHwgWkQxMjAxX1JBVEVCMTEpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3N0YXJ0OworCisJemQtPmRldiA9IGFsbG9jX2V0aGVyZGV2KDApOworCWlmICghemQtPmRldikKKwkJZ290byBlcnJfc3RhcnQ7CisKKwl6ZC0+ZGV2LT5wcml2ID0gemQ7CisJemQtPmRldi0+b3BlbiA9IHpkMTIwMV9uZXRfb3BlbjsKKwl6ZC0+ZGV2LT5zdG9wID0gemQxMjAxX25ldF9zdG9wOworCXpkLT5kZXYtPmdldF9zdGF0cyA9IHpkMTIwMV9nZXRfc3RhdHM7CisJemQtPmRldi0+Z2V0X3dpcmVsZXNzX3N0YXRzID0gemQxMjAxX2dldF93aXJlbGVzc19zdGF0czsKKwl6ZC0+ZGV2LT53aXJlbGVzc19oYW5kbGVycyA9CisJICAgIChzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikmemQxMjAxX2l3X2hhbmRsZXJzOworCXpkLT5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHpkMTIwMV9oYXJkX3N0YXJ0X3htaXQ7CisJemQtPmRldi0+d2F0Y2hkb2dfdGltZW8gPSBaRDEyMDFfVFhfVElNRU9VVDsKKwl6ZC0+ZGV2LT50eF90aW1lb3V0ID0gemQxMjAxX3R4X3RpbWVvdXQ7CisJemQtPmRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gemQxMjAxX3NldF9tdWx0aWNhc3Q7CisJemQtPmRldi0+c2V0X21hY19hZGRyZXNzID0gemQxMjAxX3NldF9tYWNfYWRkcmVzczsKKwlzdHJjcHkoemQtPmRldi0+bmFtZSwgIndsYW4lZCIpOworCisJZXJyID0gemQxMjAxX2dldGNvbmZpZyh6ZCwgWkQxMjAxX1JJRF9DTkZPV05NQUNBRERSLCAKKwkgICAgemQtPmRldi0+ZGV2X2FkZHIsIHpkLT5kZXYtPmFkZHJfbGVuKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9uZXQ7CisKKwkvKiBTZXQgd2lsZGNhcmQgZXNzaWQgdG8gbWF0Y2ggemQtPmVzc2lkICovCisJKihfX2xlMTYgKilidWYgPSBjcHVfdG9fbGUxNigwKTsKKwllcnIgPSB6ZDEyMDFfc2V0Y29uZmlnKHpkLCBaRDEyMDFfUklEX0NORkRFU0lSRURTU0lELCBidWYsCisJICAgIElXX0VTU0lEX01BWF9TSVpFKzIsIDEpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX25ldDsKKworCWlmICh6ZC0+YXApCisJCXBvcnR0eXBlID0gWkQxMjAxX1BPUlRUWVBFX0FQOworCWVsc2UKKwkJcG9ydHR5cGUgPSBaRDEyMDFfUE9SVFRZUEVfQlNTOworCWVyciA9IHpkMTIwMV9zZXRjb25maWcxNih6ZCwgWkQxMjAxX1JJRF9DTkZQT1JUVFlQRSwgcG9ydHR5cGUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX25ldDsKKworCWVyciA9IHJlZ2lzdGVyX25ldGRldih6ZC0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9uZXQ7CisJZGV2X2luZm8oJnVzYi0+ZGV2LCAiJXM6IFpEMTIwMSBVU0IgV2lyZWxlc3MgaW50ZXJmYWNlXG4iLAorCSAgICB6ZC0+ZGV2LT5uYW1lKTsKKwkKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgemQpOworCXJldHVybiAwOworCitlcnJfbmV0OgorCWZyZWVfbmV0ZGV2KHpkLT5kZXYpOworZXJyX3N0YXJ0OgorCS8qIExlYXZlIHRoZSBkZXZpY2UgaW4gcmVzZXQgc3RhdGUgKi8KKwl6ZDEyMDFfZG9jbWQoemQsIFpEMTIwMV9DTURDT0RFX0lOSVQsIDAsIDAsIDApOworZXJyX3pkOgorCWlmICh6ZC0+dHhfdXJiKQorCQl1c2JfZnJlZV91cmIoemQtPnR4X3VyYik7CisJaWYgKHpkLT5yeF91cmIpCisJCXVzYl9mcmVlX3VyYih6ZC0+cnhfdXJiKTsKKwlrZnJlZSh6ZCk7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCB6ZDEyMDFfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB6ZDEyMDEgKnpkPShzdHJ1Y3QgemQxMjAxICopdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqbm9kZTI7CisJc3RydWN0IHpkMTIwMV9mcmFnICpmcmFnOworCisJaWYgKCF6ZCkKKwkJcmV0dXJuOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwlpZiAoemQtPmRldikgeworCQl1bnJlZ2lzdGVyX25ldGRldih6ZC0+ZGV2KTsKKwkJZnJlZV9uZXRkZXYoemQtPmRldik7CisJfQorCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmcmFnLCBub2RlLCBub2RlMiwgJnpkLT5mcmFnbGlzdCwgZm5vZGUpIHsKKwkJaGxpc3RfZGVsX2luaXQoJmZyYWctPmZub2RlKTsKKwkJa2ZyZWVfc2tiKGZyYWctPnNrYik7CisJCWtmcmVlKGZyYWcpOworCX0KKworCWlmICh6ZC0+dHhfdXJiKSB7CisJCXVzYl9raWxsX3VyYih6ZC0+dHhfdXJiKTsKKwkJdXNiX2ZyZWVfdXJiKHpkLT50eF91cmIpOworCX0KKwlpZiAoemQtPnJ4X3VyYikgeworCQl1c2Jfa2lsbF91cmIoemQtPnJ4X3VyYik7CisJCXVzYl9mcmVlX3VyYih6ZC0+cnhfdXJiKTsKKwl9CisJa2ZyZWUoemQpOworfQorCitzdHJ1Y3QgdXNiX2RyaXZlciB6ZDEyMDFfdXNiID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gInpkMTIwMSIsCisJLnByb2JlID0gemQxMjAxX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gemQxMjAxX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gemQxMjAxX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgemQxMjAxX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZ6ZDEyMDFfdXNiKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHpkMTIwMV9jbGVhbnVwKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnpkMTIwMV91c2IpOworfQorCittb2R1bGVfaW5pdCh6ZDEyMDFfaW5pdCk7Cittb2R1bGVfZXhpdCh6ZDEyMDFfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvemQxMjAxLmggYi9kcml2ZXJzL3VzYi9uZXQvemQxMjAxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYyN2M3MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL25ldC96ZDEyMDEuaApAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqCUNvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBKZXJvZW4gVnJlZWtlbiAocGUxcnhxQGFtc2F0Lm9yZykKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqCVBhcnRzIG9mIHRoaXMgZHJpdmVyIGhhdmUgYmVlbiBkZXJpdmVkIGZyb20gYSB3bGFuLW5nIHZlcnNpb24KKyAqCW1vZGlmaWVkIGJ5IFp5REFTLgorICoJQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqLworCisjaWZuZGVmIF9JTkNMVURFX1pEMTIwMV9IXworI2RlZmluZSBfSU5DTFVERV9aRDEyMDFfSF8KKworI2RlZmluZSBaRDEyMDFfTlVNS0VZUwkJNAorI2RlZmluZSBaRDEyMDFfTUFYS0VZTEVOCTEzCisjZGVmaW5lIFpEMTIwMV9NQVhNVUxUSQkJMTYKKyNkZWZpbmUgWkQxMjAxX0ZSQUdNQVgJCTI1MDAKKyNkZWZpbmUgWkQxMjAxX0ZSQUdNSU4JCTI1NgorI2RlZmluZSBaRDEyMDFfUlRTTUFYCQkyNTAwCisKKyNkZWZpbmUgWkQxMjAxX1JYU0laRQkJMzAwMAorCitzdHJ1Y3QgemQxMjAxIHsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdXNiOworCWludAkJCXJlbW92ZWQ7CisJc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwlzdHJ1Y3QgaXdfc3RhdGlzdGljcwlpd3N0YXRzOworCisJaW50CQkJZW5kcF9pbjsKKwlpbnQJCQllbmRwX291dDsKKwlpbnQJCQllbmRwX291dDI7CisJc3RydWN0IHVyYgkJKnJ4X3VyYjsKKwlzdHJ1Y3QgdXJiCQkqdHhfdXJiOworCisJdW5zaWduZWQgY2hhciAJCXJ4ZGF0YVtaRDEyMDFfUlhTSVpFXTsKKwlpbnQJCQlyeGxlbjsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlyeGRhdGFxOworCWludAkJCXJ4ZGF0YXM7CisJc3RydWN0IGhsaXN0X2hlYWQJZnJhZ2xpc3Q7CisJdW5zaWduZWQgY2hhcgkJdHhkYXRhW1pEMTIwMV9SWFNJWkVdOworCisJaW50CQkJYXA7CisJY2hhcgkJCWVzc2lkW0lXX0VTU0lEX01BWF9TSVpFKzFdOworCWludAkJCWVzc2lkbGVuOworCWludAkJCW1hY19lbmFibGVkOworCWludAkJCW1vbml0b3I7CisJaW50CQkJZW5jb2RlX2VuYWJsZWQ7CisJaW50CQkJZW5jb2RlX3Jlc3RyaWN0ZWQ7CisJdW5zaWduZWQgY2hhcgkJZW5jb2RlX2tleXNbWkQxMjAxX05VTUtFWVNdW1pEMTIwMV9NQVhLRVlMRU5dOworCWludAkJCWVuY29kZV9rZXlsZW5bWkQxMjAxX05VTUtFWVNdOworfTsKKworc3RydWN0IHpkMTIwMV9mcmFnIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQlmbm9kZTsKKwlpbnQJCQlzZXE7CisJc3RydWN0IHNrX2J1ZmYJCSpza2I7Cit9OworCisjZGVmaW5lIFpEMTIwMVNJV0hPU1RBVVRIIFNJT0NJV0ZJUlNUUFJJVgorI2RlZmluZSBaRDEyMDFHSVdIT1NUQVVUSCBaRDEyMDFTSVdIT1NUQVVUSCsxCisjZGVmaW5lIFpEMTIwMVNJV0FVVEhTVEEgU0lPQ0lXRklSU1RQUklWKzIKKyNkZWZpbmUgWkQxMjAxU0lXTUFYQVNTT0MgU0lPQ0lXRklSU1RQUklWKzQKKyNkZWZpbmUgWkQxMjAxR0lXTUFYQVNTT0MgWkQxMjAxU0lXTUFYQVNTT0MrMQorCisjZGVmaW5lIFpEMTIwMV9GV19USU1FT1VUCSgxMDAwKQorCisjZGVmaW5lIFpEMTIwMV9UWF9USU1FT1VUCSgyMDAwKQorCisjZGVmaW5lIFpEMTIwMV9VU0JfQ01EUkVRCTAKKyNkZWZpbmUgWkQxMjAxX1VTQl9SRVNSRVEJMQorCisjZGVmaW5lCVpEMTIwMV9DTURDT0RFX0lOSVQJMHgwMAorI2RlZmluZSBaRDEyMDFfQ01EQ09ERV9FTkFCTEUJMHgwMQorI2RlZmluZSBaRDEyMDFfQ01EQ09ERV9ESVNBQkxFCTB4MDIKKyNkZWZpbmUgWkQxMjAxX0NNRENPREVfQUxMT0MJMHgwYQorI2RlZmluZSBaRDEyMDFfQ01EQ09ERV9JTlFVSVJFCTB4MTEKKyNkZWZpbmUgWkQxMjAxX0NNRENPREVfU0VUUlhSSUQJMHgxNworI2RlZmluZSBaRDEyMDFfQ01EQ09ERV9BQ0NFU1MJMHgyMQorCisjZGVmaW5lIFpEMTIwMV9QQUNLRVRfRVZFTlRTVEFUCTB4MAorI2RlZmluZSBaRDEyMDFfUEFDS0VUX1JYREFUQQkweDEKKyNkZWZpbmUgWkQxMjAxX1BBQ0tFVF9JTlFVSVJFCTB4MgorI2RlZmluZSBaRDEyMDFfUEFDS0VUX1JFU09VUkNFCTB4MworCisjZGVmaW5lIFpEMTIwMV9BQ0NFU1NCSVQJMHgwMTAwCisKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZQT1JUVFlQRQkJMHhmYzAwCisjZGVmaW5lIFpEMTIwMV9SSURfQ05GT1dOTUFDQUREUgkweGZjMDEKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZERVNJUkVEU1NJRAkweGZjMDIKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZPV05DSEFOTkVMCTB4ZmMwMworI2RlZmluZSBaRDEyMDFfUklEX0NORk9XTlNTSUQJCTB4ZmMwNAorI2RlZmluZSBaRDEyMDFfUklEX0NORk1BWERBVEFMRU4JMHhmYzA3CisjZGVmaW5lIFpEMTIwMV9SSURfQ05GUE1FTkFCTEVECQkweGZjMDkKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZQTUVQUwkJMHhmYzBhCisjZGVmaW5lIFpEMTIwMV9SSURfQ05GTUFYU0xFRVBEVVJBVElPTgkweGZjMGMKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZERUZBVUxUS0VZSUQJMHhmYzIzCisjZGVmaW5lIFpEMTIwMV9SSURfQ05GREVGQVVMVEtFWTAJMHhmYzI0CisjZGVmaW5lIFpEMTIwMV9SSURfQ05GREVGQVVMVEtFWTEJMHhmYzI1CisjZGVmaW5lIFpEMTIwMV9SSURfQ05GREVGQVVMVEtFWTIJMHhmYzI2CisjZGVmaW5lIFpEMTIwMV9SSURfQ05GREVGQVVMVEtFWTMJMHhmYzI3CisjZGVmaW5lIFpEMTIwMV9SSURfQ05GV0VCRkxBR1MJCTB4ZmMyOAorI2RlZmluZSBaRDEyMDFfUklEX0NORkFVVEhFTlRJQ0FUSU9OCTB4ZmMyYQorI2RlZmluZSBaRDEyMDFfUklEX0NORk1BWEFTU09DU1RBVElPTlMJMHhmYzJiCisjZGVmaW5lIFpEMTIwMV9SSURfQ05GSE9TVEFVVEgJCTB4ZmMyZQorI2RlZmluZSBaRDEyMDFfUklEX0NORkdST1VQQUREUkVTUwkweGZjODAKKyNkZWZpbmUgWkQxMjAxX1JJRF9DTkZGUkFHVEhSRVNIT0xECTB4ZmM4MgorI2RlZmluZSBaRDEyMDFfUklEX0NORlJUU1RIUkVTSE9MRAkweGZjODMKKyNkZWZpbmUgWkQxMjAxX1JJRF9UWFJBVEVDTlRMCQkweGZjODQKKyNkZWZpbmUgWkQxMjAxX1JJRF9QUk9NSVNDVU9VU01PREUJMHhmYzg1CisjZGVmaW5lIFpEMTIwMV9SSURfQ05GQkFTSUNSQVRFUwkweGZjYjMKKyNkZWZpbmUgWkQxMjAxX1JJRF9BVVRIRU5USUNBVEVTVEEJMHhmY2UzCisjZGVmaW5lIFpEMTIwMV9SSURfQ1VSUkVOVEJTU0lECQkweGZkNDIKKyNkZWZpbmUgWkQxMjAxX1JJRF9DT01NU1FVQUxJVFkJCTB4ZmQ0MworI2RlZmluZSBaRDEyMDFfUklEX0NVUlJFTlRUWFJBVEUJMHhmZDQ0CisjZGVmaW5lIFpEMTIwMV9SSURfQ05GTUFYVFhCVUZGRVJOVU1CRVIJMHhmZGEwCisjZGVmaW5lIFpEMTIwMV9SSURfQ1VSUkVOVENIQU5ORUwJMHhmZGMxCisKKyNkZWZpbmUgWkQxMjAxX0lOUV9TQ0FOUkVTVUxUUwkJMHhmMTAxCisKKyNkZWZpbmUgWkQxMjAxX0lORl9MSU5LU1RBVFVTCQkweGYyMDAKKyNkZWZpbmUgWkQxMjAxX0lORl9BU1NPQ1NUQVRVUwkJMHhmMjAxCisjZGVmaW5lIFpEMTIwMV9JTkZfQVVUSFJFUQkJMHhmMjAyCisKKyNkZWZpbmUgWkQxMjAxX0FTU09DU1RBVFVTX1NUQUFTU09DCTB4MQorI2RlZmluZSBaRDEyMDFfQVNTT0NTVEFUVVNfUkVBU1NPQwkweDIKKyNkZWZpbmUgWkQxMjAxX0FTU09DU1RBVFVTX0RJU0FTU09DCTB4MworI2RlZmluZSBaRDEyMDFfQVNTT0NTVEFUVVNfQVNTT0NGQUlMCTB4NAorI2RlZmluZSBaRDEyMDFfQVNTT0NTVEFUVVNfQVVUSEZBSUwJMHg1CisKKyNkZWZpbmUgWkQxMjAxX1BPUlRUWVBFX0lCU1MJCTAKKyNkZWZpbmUgWkQxMjAxX1BPUlRUWVBFX0JTUwkJMQorI2RlZmluZSBaRDEyMDFfUE9SVFRZUEVfV0RTCQkyCisjZGVmaW5lIFpEMTIwMV9QT1JUVFlQRV9QU0VVRE9JQlNTCTMKKyNkZWZpbmUgWkQxMjAxX1BPUlRUWVBFX0FQCQk2CisKKyNkZWZpbmUgWkQxMjAxX1JBVEVCMQkxCisjZGVmaW5lIFpEMTIwMV9SQVRFQjIJMgorI2RlZmluZSBaRDEyMDFfUkFURUI1CTQJLyogNS41IHJlYWxseSwgYnV0IDUgaXMgc2hvcnRlciA6KSAqLworI2RlZmluZSBaRDEyMDFfUkFURUIxMQk4CisKKyNkZWZpbmUgWkQxMjAxX0NORkFVVEhFTlRJQ0FUSU9OX09QRU5TWVNURU0JMHgwMDAxCisjZGVmaW5lIFpEMTIwMV9DTkZBVVRIRU5USUNBVElPTl9TSEFSRURLRVkJMHgwMDAyCisKKyNlbmRpZiAvKiBfSU5DTFVERV9aRDEyMDFfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg2OTA3NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCkBAIC0wLDAgKzEsNDU1IEBACisjCisjIFVTQiBTZXJpYWwgZGV2aWNlIGNvbmZpZ3VyYXRpb24KKyMKKworbWVudSAiVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiE9bgorCitjb25maWcgVVNCX1NFUklBTAorCXRyaXN0YXRlICJVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFVTQiBkZXZpY2UgdGhhdCBwcm92aWRlcyBub3JtYWwgc2VyaWFsCisJICBwb3J0cywgb3IgYWN0cyBsaWtlIGEgc2VyaWFsIGRldmljZSwgYW5kIHlvdSB3YW50IHRvIGNvbm5lY3QgaXQgdG8KKwkgIHlvdXIgVVNCIGJ1cy4KKworCSAgUGxlYXNlIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQ+IGZvciBtb3JlCisJICBpbmZvcm1hdGlvbiBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoZSBkaWZmZXJlbnQgZGV2aWNlcyB0aGF0IGFyZQorCSAgc3VwcG9ydGVkLCBhbmQgb24gaG93IHRvIHVzZSB0aGVtLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JzZXJpYWwuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0NPTlNPTEUKKwlib29sICJVU0IgU2VyaWFsIENvbnNvbGUgZGV2aWNlIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMPXkgJiYgRVhQRVJJTUVOVEFMCisJLS0taGVscC0tLQorCSAgSWYgeW91IHNheSBZIGhlcmUsIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gdXNlIGEgVVNCIHRvIHNlcmlhbAorCSAgY29udmVydGVyIHBvcnQgYXMgdGhlIHN5c3RlbSBjb25zb2xlICh0aGUgc3lzdGVtIGNvbnNvbGUgaXMgdGhlCisJICBkZXZpY2Ugd2hpY2ggcmVjZWl2ZXMgYWxsIGtlcm5lbCBtZXNzYWdlcyBhbmQgd2FybmluZ3MgYW5kIHdoaWNoCisJICBhbGxvd3MgbG9naW5zIGluIHNpbmdsZSB1c2VyIG1vZGUpLiBUaGlzIGNvdWxkIGJlIHVzZWZ1bCBpZiBzb21lCisJICB0ZXJtaW5hbCBvciBwcmludGVyIGlzIGNvbm5lY3RlZCB0byB0aGF0IHNlcmlhbCBwb3J0LgorCisJICBFdmVuIGlmIHlvdSBzYXkgWSBoZXJlLCB0aGUgY3VycmVudGx5IHZpc2libGUgdmlydHVhbCBjb25zb2xlCisJICAoL2Rldi90dHkwKSB3aWxsIHN0aWxsIGJlIHVzZWQgYXMgdGhlIHN5c3RlbSBjb25zb2xlIGJ5IGRlZmF1bHQsIGJ1dAorCSAgeW91IGNhbiBhbHRlciB0aGF0IHVzaW5nIGEga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gc3VjaCBhcworCSAgImNvbnNvbGU9dHR5VVNCMCIuIChUcnkgIm1hbiBib290cGFyYW0iIG9yIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZgorCSAgeW91ciBib290IGxvYWRlciAobGlsbyBvciBsb2FkbGluKSBhYm91dCBob3cgdG8gcGFzcyBvcHRpb25zIHRvIHRoZQorCSAga2VybmVsIGF0IGJvb3QgdGltZS4pCisKKwkgIElmIHlvdSBkb24ndCBoYXZlIGEgVkdBIGNhcmQgaW5zdGFsbGVkIGFuZCB5b3Ugc2F5IFkgaGVyZSwgdGhlCisJICBrZXJuZWwgd2lsbCBhdXRvbWF0aWNhbGx5IHVzZSB0aGUgZmlyc3QgVVNCIHRvIHNlcmlhbCBjb252ZXJ0ZXIKKwkgIHBvcnQsIC9kZXYvdHR5VVNCMCwgYXMgc3lzdGVtIGNvbnNvbGUuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBVU0JfU0VSSUFMX0dFTkVSSUMKKwlib29sICJVU0IgR2VuZXJpYyBTZXJpYWwgRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBnZW5lcmljIFVTQiBzZXJpYWwgZHJpdmVyLiAgUGxlYXNlCisJICByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0PiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgorCSAgdXNpbmcgdGhpcyBkcml2ZXIuICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSAiVVNCIFNlcmlhbCBjb252ZXJ0ZXIKKwkgIHN1cHBvcnQiIGJlIGNvbXBpbGVkIGFzIGEgbW9kdWxlIGZvciB0aGlzIGRyaXZlciB0byBiZSB1c2VkCisJICBwcm9wZXJseS4KKworY29uZmlnIFVTQl9TRVJJQUxfQkVMS0lOCisJdHJpc3RhdGUgIlVTQiBCZWxraW4gYW5kIFBlcmFjb20gU2luZ2xlIFBvcnQgU2VyaWFsIERyaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIEJlbGtpbiBVU0IgU2VyaWFsIHNpbmdsZSBwb3J0CisJICBhZGFwdG9yIChGNVUxMDMgaXMgb25lIG9mIHRoZSBtb2RlbCBudW1iZXJzKSBvciB0aGUgUGVyYWNvbSBzaW5nbGUKKwkgIHBvcnQgVVNCIHRvIHNlcmlhbCBhZGFwdGVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBiZWxraW5fc2EuCisKK2NvbmZpZyBVU0JfU0VSSUFMX1dISVRFSEVBVAorCXRyaXN0YXRlICJVU0IgQ29ubmVjdFRlY2ggV2hpdGVIRUFUIFNlcmlhbCBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMICYmIEJST0tFTl9PTl9TTVAKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIENvbm5lY3RUZWNoIFdoaXRlSEVBVCA0IHBvcnQKKwkgIFVTQiB0byBzZXJpYWwgY29udmVydGVyIGRldmljZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgd2hpdGVoZWF0LgorCitjb25maWcgVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQKKwl0cmlzdGF0ZSAiVVNCIERpZ2kgSW50ZXJuYXRpb25hbCBBY2NlbGVQb3J0IFVTQiBTZXJpYWwgRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIERpZ2kgQWNjZWxlUG9ydCBVU0IgMiBvciA0IGRldmljZXMsCisJICAyIHBvcnQgKHBsdXMgcGFyYWxsZWwgcG9ydCkgYW5kIDQgcG9ydCBVU0Igc2VyaWFsIGNvbnZlcnRlcnMuICBUaGUKKwkgIHBhcmFsbGVsIHBvcnQgb24gdGhlIFVTQiAyIGFwcGVhcnMgYXMgYSB0aGlyZCBzZXJpYWwgcG9ydCBvbiBMaW51eC4KKwkgIFRoZSBEaWdpIEFjY2VsZXBvcnQgVVNCIDggaXMgbm90IHlldCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIuCisKKwkgIFRoaXMgZHJpdmVyIHdvcmtzIHVuZGVyIFNNUCB3aXRoIHRoZSB1c2ItdWhjaSBkcml2ZXIuICBJdCBkb2VzIG5vdAorCSAgd29yayB1bmRlciBTTVAgd2l0aCB0aGUgdWhjaSBkcml2ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGRpZ2lfYWNjZWxlcG9ydC4KKworY29uZmlnIFVTQl9TRVJJQUxfQ1AyMTAxCisJdHJpc3RhdGUgIlVTQiBDUDIxMDEgVUFSVCBCcmlkZ2UgQ29udHJvbGxlciIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBDUDIxMDEvQ1AyMTAyIGJhc2VkIFVTQiB0byBSUzIzMgorCSAgY29udmVydGVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjcDIxMDEuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0NZUFJFU1NfTTgKKwl0cmlzdGF0ZSAiVVNCIEN5cHJlc3MgTTggVVNCIFNlcmlhbCBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgZGV2aWNlIHRoYXQgY29udGFpbnMgdGhlIEN5cHJlc3MKKwkgIFVTQiB0byBTZXJpYWwgbWljcm9jb250cm9sbGVyLCBzdWNoIGFzIHRoZSBEZUxvcm1lIEVhcnRobWF0ZSBHUFMuCisKKwkJQXR0ZW1wdGVkIFNNUCBzdXBwb3J0Li4uIHNlbmQgYnVnIHJlcG9ydHMhCisKKwkgIFN1cHBvcnRlZCBtaWNyb2NvbnRyb2xsZXJzIGluIHRoZSBDWTQ2MDEgZmFtaWx5IGFyZToKKwkJQ1k3QzYzNzQxIENZN0M2Mzc0MiBDWTdDNjM3NDMgQ1k3QzY0MDEzCisJCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjeXByZXNzX204LgorCitjb25maWcgVVNCX1NFUklBTF9FTVBFRworCXRyaXN0YXRlICJVU0IgRW1wZWcgZW1wZWctY2FyIE1hcmsgSS9JSSBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRvIHlvdXIgRW1wZWcgZW1wZWctY2FyIE1hcmsgSS9JSQorCSAgbXAzIHBsYXllciB2aWEgVVNCLiAgVGhlIGRyaXZlciB1c2VzIGEgc2luZ2xlIHR0eVVTQnswLDEsMiwuLi59CisJICBkZXZpY2Ugbm9kZS4gIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dD4gZm9yIG1vcmUKKwkgIHRpZGJpdHMgb2YgaW5mb3JtYXRpb24uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVtcGVnLgorCitjb25maWcgVVNCX1NFUklBTF9GVERJX1NJTworCXRyaXN0YXRlICJVU0IgRlRESSBTaW5nbGUgUG9ydCBTZXJpYWwgRHJpdmVyIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTCAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIEZUREkgU0lPIHNpbmdsZSBwb3J0IFVTQiB0byBzZXJpYWwKKwkgIGNvbnZlcnRlciBkZXZpY2UuIFRoZSBpbXBsZW1lbnRhdGlvbiBJIGhhdmUgaXMgY2FsbGVkIHRoZSBVU0MtMTAwMC4KKwkgIFRoaXMgZHJpdmVyIGhhcyBhbHNvIGJlIHRlc3RlZCB3aXRoIHRoZSAyNDUgYW5kIDIzMiBkZXZpY2VzLgorCisJICBTZWUgPGh0dHA6Ly9mdGRpLXVzYi1zaW8uc291cmNlZm9yZ2UubmV0Lz4gZm9yIG1vcmUKKwkgIGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyIGFuZCB0aGUgZGV2aWNlLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBmdGRpX3Npby4KKworY29uZmlnIFVTQl9TRVJJQUxfVklTT1IKKwl0cmlzdGF0ZSAiVVNCIEhhbmRzcHJpbmcgVmlzb3IgLyBQYWxtIG01MHggLyBTb255IENsaWUgRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0byB5b3VyIEhhbmRTcHJpbmcgVmlzb3IsIFBhbG0KKwkgIG01MDAgb3IgbTUwNSB0aHJvdWdoIGl0cyBVU0IgZG9ja2luZyBzdGF0aW9uLiBTZWUKKwkgIDxodHRwOi8vdXNidmlzb3Iuc291cmNlZm9yZ2UubmV0Lz4gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcworCSAgZHJpdmVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2aXNvci4KKworY29uZmlnIFVTQl9TRVJJQUxfSVBBUQorCXRyaXN0YXRlICJVU0IgUG9ja2V0UEMgUERBIERyaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdG8geW91ciBDb21wYXEgaVBBUSwgSFAgSm9ybmFkYQorCSAgb3IgYW55IG90aGVyIFBEQSBydW5uaW5nIFdpbmRvd3MgQ0UgMy4wIG9yIFBvY2tldFBDIDIwMDIKKwkgIHVzaW5nIGEgVVNCIGNyYWRsZS9jYWJsZS4gRm9yIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSBkcml2ZXIsCisJICByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0Pi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaXBhcS4KKworY29uZmlnIFVTQl9TRVJJQUxfSVIKKwl0cmlzdGF0ZSAiVVNCIElSIERvbmdsZSBTZXJpYWwgRHJpdmVyIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTCAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzaW1wbGUgc2VyaWFsIHN1cHBvcnQgZm9yIFVTQiBJckRBCisJICBkZXZpY2VzLiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IGRvIG5vdCB3YW50IHRvIHVzZSB0aGUgZnVsbCBJckRBCisJICBzdGFjay4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaXItdXNiLgorCitjb25maWcgVVNCX1NFUklBTF9FREdFUE9SVAorCXRyaXN0YXRlICJVU0IgSW5zaWRlIE91dCBFZGdlcG9ydCBTZXJpYWwgRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGFueSBvZiB0aGUgZm9sbG93aW5nIGRldmljZXMgZnJvbQorCSAgSW5zaWRlIE91dCBOZXR3b3JrcyAoRGlnaSk6CisJICBFZGdlcG9ydC80CisJICBSYXBpZHBvcnQvNAorCSAgRWRnZXBvcnQvNHQKKwkgIEVkZ2Vwb3J0LzIKKwkgIEVkZ2Vwb3J0LzRpCisJICBFZGdlcG9ydC8yaQorCSAgRWRnZXBvcnQvNDIxCisJICBFZGdlcG9ydC8yMQorCSAgRWRnZXBvcnQvOAorCSAgRWRnZXBvcnQvOCBEdWFsCisJICBFZGdlcG9ydC8yRDgKKwkgIEVkZ2Vwb3J0LzREOAorCSAgRWRnZXBvcnQvOGkKKwkgIEVkZ2Vwb3J0LzIgRElOCisJICBFZGdlcG9ydC80IERJTgorCSAgRWRnZXBvcnQvMTYgRHVhbAorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpb19lZGdlcG9ydC4KKworY29uZmlnIFVTQl9TRVJJQUxfRURHRVBPUlRfVEkKKwl0cmlzdGF0ZSAiVVNCIEluc2lkZSBPdXQgRWRnZXBvcnQgU2VyaWFsIERyaXZlciAoVEkgZGV2aWNlcykiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYW55IG9mIHRoZSBkZXZpY2VzIGZyb20gSW5zaWRlIE91dAorCSAgTmV0d29ya3MgKERpZ2kpIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGlvX2VkZ2Vwb3J0IGRyaXZlci4KKwkgIFRoaXMgaW5jbHVkZXMgdGhlIEVkZ2Vwb3J0LzEgZGV2aWNlLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpb190aS4KKworY29uZmlnIFVTQl9TRVJJQUxfR0FSTUlOCisgICAgICAgdHJpc3RhdGUgIlVTQiBHYXJtaW4gR1BTIGRyaXZlciIKKyAgICAgICBkZXBlbmRzIG9uIFVTQl9TRVJJQUwKKyAgICAgICBoZWxwCisgICAgICAgICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdG8geW91ciBHYXJtaW4gR1BTLgorICAgICAgICAgU2hvdWxkIHdvcmsgd2l0aCBtb3N0IEdhcm1pbiBHUFMgZGV2aWNlcyB3aGljaCBoYXZlIGEgbmF0aXZlIFVTQiBwb3J0LgorCisgICAgICAgICBTZWUgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2FybWluLWdwcz4gZm9yIHRoZSBsYXRlc3QKKyAgICAgICAgIHZlcnNpb24gb2YgdGhlIGRyaXZlci4KKworICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisgICAgICAgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ2FybWluX2dwcy4KKworY29uZmlnIFVTQl9TRVJJQUxfSVBXCisgICAgICAgIHRyaXN0YXRlICJVU0IgSVBXaXJlbGVzcyAoM0cgVU1UUyBUREQpIERyaXZlciAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBJUFdpcmVsZXNzIFVTQiBtb2RlbSBzdWNoIGFzCisJICB0aGUgb25lcyBzdXBwbGllZCBieSBBeGl0eTNHL1NlbnRlY2ggU291dGggQWZyaWNhLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpcHcuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0tFWVNQQU5fUERBCisJdHJpc3RhdGUgIlVTQiBLZXlzcGFuIFBEQSBTaW5nbGUgUG9ydCBTZXJpYWwgRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgS2V5c3BhbiBQREEgc2luZ2xlIHBvcnQgVVNCIHRvCisJICBzZXJpYWwgY29udmVydGVyIGRldmljZS4gIFRoaXMgZHJpdmVyIG1ha2VzIHVzZSBvZiBmaXJtd2FyZQorCSAgZGV2ZWxvcGVkIGZyb20gc2NyYXRjaCBieSBCcmlhbiBXYXJuZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGtleXNwYW5fcGRhLgorCitjb25maWcgVVNCX1NFUklBTF9LRVlTUEFOCisJdHJpc3RhdGUgIlVTQiBLZXlzcGFuIFVTQS14eHggU2VyaWFsIERyaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBLZXlzcGFuIFVTQiB0byBzZXJpYWwgY29udmVydGVyCisJICBkZXZpY2VzLiAgVGhpcyBkcml2ZXIgbWFrZXMgdXNlIG9mIEtleXNwYW4ncyBvZmZpY2lhbCBmaXJtd2FyZQorCSAgYW5kIHdhcyBkZXZlbG9wZWQgd2l0aCB0aGVpciBzdXBwb3J0LiAgWW91IG11c3QgYWxzbyBpbmNsdWRlCisJICBmaXJtd2FyZSB0byBzdXBwb3J0IHlvdXIgcGFydGljdWxhciBkZXZpY2UocykuCisKKwkgIFNlZSA8aHR0cDovL21pc2MubnUvaHVnaC9rZXlzcGFuLmh0bWw+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBrZXlzcGFuLgorCitjb25maWcgVVNCX1NFUklBTF9LRVlTUEFOX01QUgorCWJvb2wgIlVTQiBLZXlzcGFuIE1QUiBGaXJtd2FyZSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUxfS0VZU1BBTgorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBmaXJtd2FyZSBmb3IgdGhlIEtleXNwYW4gTVBSIGNvbnZlcnRlci4KKworY29uZmlnIFVTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOAorCWJvb2wgIlVTQiBLZXlzcGFuIFVTQS0yOCBGaXJtd2FyZSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUxfS0VZU1BBTgorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBmaXJtd2FyZSBmb3IgdGhlIFVTQS0yOCBjb252ZXJ0ZXIuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYCisJYm9vbCAiVVNCIEtleXNwYW4gVVNBLTI4WCBGaXJtd2FyZSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUxfS0VZU1BBTgorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBmaXJtd2FyZSBmb3IgdGhlIFVTQS0yOFggY29udmVydGVyLgorCSAgQmUgc3VyZSB5b3UgaGF2ZSBhIFVTQS0yOFgsIHRoZXJlIGFyZSBhbHNvIDI4WEEgYW5kIDI4WEIKKwkgIG1vZGVscywgdGhlIGxhYmVsIHVuZGVybmVhdGggaGFzIHRoZSBhY3R1YWwgcGFydCBudW1iZXIuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYQQorCWJvb2wgIlVTQiBLZXlzcGFuIFVTQS0yOFhBIEZpcm13YXJlIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTF9LRVlTUEFOCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGZpcm13YXJlIGZvciB0aGUgVVNBLTI4WEEgY29udmVydGVyLgorCSAgQmUgc3VyZSB5b3UgaGF2ZSBhIFVTQS0yOFhBLCB0aGVyZSBhcmUgYWxzbyAyOFggYW5kIDI4WEIKKwkgIG1vZGVscywgdGhlIGxhYmVsIHVuZGVybmVhdGggaGFzIHRoZSBhY3R1YWwgcGFydCBudW1iZXIuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYQgorCWJvb2wgIlVTQiBLZXlzcGFuIFVTQS0yOFhCIEZpcm13YXJlIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTF9LRVlTUEFOCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGZpcm13YXJlIGZvciB0aGUgVVNBLTI4WEIgY29udmVydGVyLgorCSAgQmUgc3VyZSB5b3UgaGF2ZSBhIFVTQS0yOFhCLCB0aGVyZSBhcmUgYWxzbyAyOFggYW5kIDI4WEEKKwkgIG1vZGVscywgdGhlIGxhYmVsIHVuZGVybmVhdGggaGFzIHRoZSBhY3R1YWwgcGFydCBudW1iZXIuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTkKKwlib29sICJVU0IgS2V5c3BhbiBVU0EtMTkgRmlybXdhcmUiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMX0tFWVNQQU4KKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgZmlybXdhcmUgZm9yIHRoZSBVU0EtMTkgY29udmVydGVyLgorCitjb25maWcgVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE4WAorCWJvb2wgIlVTQiBLZXlzcGFuIFVTQS0xOFggRmlybXdhcmUiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMX0tFWVNQQU4KKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgZmlybXdhcmUgZm9yIHRoZSBVU0EtMThYIGNvbnZlcnRlci4KKworY29uZmlnIFVTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVcKKwlib29sICJVU0IgS2V5c3BhbiBVU0EtMTlXIEZpcm13YXJlIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTF9LRVlTUEFOCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGZpcm13YXJlIGZvciB0aGUgVVNBLTE5VyBjb252ZXJ0ZXIuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlRVworCWJvb2wgIlVTQiBLZXlzcGFuIFVTQS0xOVFXIEZpcm13YXJlIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTF9LRVlTUEFOCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGZpcm13YXJlIGZvciB0aGUgVVNBLTE5UVcgY29udmVydGVyLgorCitjb25maWcgVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5UUkKKwlib29sICJVU0IgS2V5c3BhbiBVU0EtMTlRSSBGaXJtd2FyZSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUxfS0VZU1BBTgorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBmaXJtd2FyZSBmb3IgdGhlIFVTQS0xOVFJIGNvbnZlcnRlci4KKworY29uZmlnIFVTQl9TRVJJQUxfS0VZU1BBTl9VU0E0OVcKKwlib29sICJVU0IgS2V5c3BhbiBVU0EtNDlXIEZpcm13YXJlIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTF9LRVlTUEFOCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGZpcm13YXJlIGZvciB0aGUgVVNBLTQ5VyBjb252ZXJ0ZXIuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0tFWVNQQU5fVVNBNDlXTEMKKwlib29sICJVU0IgS2V5c3BhbiBVU0EtNDlXTEMgRmlybXdhcmUiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMX0tFWVNQQU4KKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgZmlybXdhcmUgZm9yIHRoZSBVU0EtNDlXTEMgY29udmVydGVyLgorCitjb25maWcgVVNCX1NFUklBTF9LTFNJCisJdHJpc3RhdGUgIlVTQiBLTDVLVVNCMTA1IChQYWxtY29ubmVjdCkgRHJpdmVyIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTCAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIEtMNUtVU0IxMDUgLSBiYXNlZCBzaW5nbGUgcG9ydAorCSAgc2VyaWFsIGFkYXB0ZXIuIFRoZSBtb3N0IHdpZGVseSBrbm93biAtLSBhbmQgY3VycmVudGx5IHRoZSBvbmx5CisJICB0ZXN0ZWQgLS0gZGV2aWNlIGluIHRoaXMgY2F0ZWdvcnkgaXMgdGhlIFBhbG1Db25uZWN0IFVTQiBTZXJpYWwKKwkgIGFkYXB0ZXIgc29sZCBieSBQYWxtIEluYy4gZm9yIHVzZSB3aXRoIHRoZWlyIFBhbG0gSUlJIGFuZCBQYWxtIFYKKwkgIHNlcmllcyBQREFzLgorCisJICBQbGVhc2UgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dD4gZm9yIG1vcmUKKwkgIGluZm9ybWF0aW9uLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBrbDVrdXNiMTA1LgorCitjb25maWcgVVNCX1NFUklBTF9LT0JJTF9TQ1QKKyAgICAgICAgdHJpc3RhdGUgIlVTQiBLT0JJTCBjaGlwY2FyZCByZWFkZXIiCisgICAgICAgIGRlcGVuZHMgb24gVVNCX1NFUklBTAorICAgICAgICAtLS1oZWxwLS0tCisgICAgICAgICAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgS09CSUwgVVNCIGNoaXBjYXJkCisgICAgICAgICAgcmVhZGVyczoKKworICAgICAgICAgICAgLSBVU0IgVFdJTgorICAgICAgICAgICAgLSBLQUFOIFN0YW5kYXJkIFBsdXMKKyAgICAgICAgICAgIC0gS0FBTiBTSU0KKyAgICAgICAgICAgIC0gU2VjT1ZJRCBSZWFkZXIgUGx1cworICAgICAgICAgICAgLSBCMSBQcm9mZXNzaW9uYWwKKyAgICAgICAgICAgIC0gS0FBTiBQcm9mZXNzaW9uYWwKKworICAgICAgICAgIE5vdGUgdGhhdCB5b3UgbmVlZCBhIGN1cnJlbnQgQ1QtQVBJLgorICAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGtvYmlsX3NjdC4KKworY29uZmlnIFVTQl9TRVJJQUxfTUNUX1UyMzIKKwl0cmlzdGF0ZSAiVVNCIE1DVCBTaW5nbGUgUG9ydCBTZXJpYWwgRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTAorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgVVNCIFNlcmlhbCBzaW5nbGUgcG9ydCBhZGFwdGVyIGZyb20KKwkgIE1hZ2ljIENvbnRyb2wgVGVjaG5vbG9neSBDb3JwLiAoVTIzMiBpcyBvbmUgb2YgdGhlIG1vZGVsIG51bWJlcnMpLgorCisJICBUaGlzIGRyaXZlciBhbHNvIHdvcmtzIHdpdGggU2l0ZWNvbSBVMjMyLVAyNSBhbmQgRC1MaW5rIERVLUgzU1AgVVNCCisJICBCQVkgZGV2aWNlcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWN0X3UyMzIuCisKK2NvbmZpZyBVU0JfU0VSSUFMX1BMMjMwMworCXRyaXN0YXRlICJVU0IgUHJvbGlmaWMgMjMwMyBTaW5nbGUgUG9ydCBTZXJpYWwgRHJpdmVyIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBQTDIzMDMgVVNCIFNlcmlhbCBzaW5nbGUgcG9ydAorCSAgYWRhcHRlciBmcm9tIFByb2xpZmljLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwbDIzMDMuCisKK2NvbmZpZyBVU0JfU0VSSUFMX1NBRkUKKwl0cmlzdGF0ZSAiVVNCIFNhZmUgU2VyaWFsIChFbmNhcHN1bGF0ZWQpIERyaXZlciAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwgJiYgRVhQRVJJTUVOVEFMCisKK2NvbmZpZyBVU0JfU0VSSUFMX1NBRkVfUEFEREVECisJYm9vbCAiVVNCIFNlY3VyZSBFbmNhcHN1bGF0ZWQgRHJpdmVyIC0gUGFkZGVkIgorCWRlcGVuZHMgb24gVVNCX1NFUklBTF9TQUZFCisKK2NvbmZpZyBVU0JfU0VSSUFMX1RJCisJdHJpc3RhdGUgIlVTQiBUSSAzNDEwLzUwNTIgU2VyaWFsIERyaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgVEkgVVNCIDM0MTAgb3IgNTA1MgorCSAgc2VyaWFsIGRldmljZXMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRpX3VzYl8zNDEwXzUwNTIuCisKK2NvbmZpZyBVU0JfU0VSSUFMX0NZQkVSSkFDSworCXRyaXN0YXRlICJVU0IgUkVJTkVSIFNDVCBjeWJlckphY2sgcGlucGFkL2UtY29tIGNoaXBjYXJkIHJlYWRlciAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwgJiYgRVhQRVJJTUVOVEFMCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBjeWJlckphY2sgcGlucGFkL2UtY29tIFVTQiBjaGlwY2FyZAorCSAgcmVhZGVyLiBUaGlzIGlzIGFuIGludGVyZmFjZSB0byBJU08gNzgxNiBjb21wYXRpYmxlIGNvbnRhY3RiYXNlZAorCSAgY2hpcGNhcmRzLCBlLmcuIEdTTSBTSU1zLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjeWJlcmphY2suCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBVU0JfU0VSSUFMX1hJUkNPTQorCXRyaXN0YXRlICJVU0IgWGlyY29tIC8gRW50cmVncmEgU2luZ2xlIFBvcnQgU2VyaWFsIERyaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIFhpcmNvbSBvciBFbnRyZWdyYSBzaW5nbGUgcG9ydCBVU0IgdG8KKwkgIHNlcmlhbCBjb252ZXJ0ZXIgZGV2aWNlLiAgVGhpcyBkcml2ZXIgbWFrZXMgdXNlIG9mIGZpcm13YXJlCisJICBkZXZlbG9wZWQgZnJvbSBzY3JhdGNoIGJ5IEJyaWFuIFdhcm5lci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQga2V5c3Bhbl9wZGEuCisKK2NvbmZpZyBVU0JfU0VSSUFMX09NTklORVQKKwl0cmlzdGF0ZSAiVVNCIFp5WEVMIG9tbmkubmV0IExDRCBQbHVzIERyaXZlciAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBaeVhFTCBvbW5pLm5ldCBMQ0QgSVNETiBUQS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgb21uaW5ldC4KKworY29uZmlnIFVTQl9FWlVTQgorCWJvb2wKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUxfS0VZU1BBTl9QREEgfHwgVVNCX1NFUklBTF9YSVJDT00gfHwgVVNCX1NFUklBTF9LRVlTUEFOIHx8IFVTQl9TRVJJQUxfV0hJVEVIRUFUCisJZGVmYXVsdCB5CisKK2VuZG1lbnUKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlIGIvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MWI4MTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUKQEAgLTAsMCArMSwzOSBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIFVTQiBzZXJpYWwgZGV2aWNlIGRyaXZlcnMuCisjCisKKyMgT2JqZWN0IGZpbGUgbGlzdHMuCisKK29iai0kKENPTkZJR19VU0JfU0VSSUFMKQkJCSs9IHVzYnNlcmlhbC5vCisKK3VzYnNlcmlhbC1vYmotJChDT05GSUdfVVNCX1NFUklBTF9DT05TT0xFKQkrPSBjb25zb2xlLm8KK3VzYnNlcmlhbC1vYmotJChDT05GSUdfVVNCX0VaVVNCKQkJKz0gZXp1c2IubworCit1c2JzZXJpYWwtb2Jqcwk6PSB1c2Itc2VyaWFsLm8gZ2VuZXJpYy5vIGJ1cy5vICQodXNic2VyaWFsLW9iai15KQorCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4pCQkJKz0gYmVsa2luX3NhLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSkJCQkrPSBjcDIxMDEubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLKQkJKz0gY3liZXJqYWNrLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTgpCQkrPSBjeXByZXNzX204Lm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVCkJKz0gZGlnaV9hY2NlbGVwb3J0Lm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUKQkJKz0gaW9fZWRnZXBvcnQubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEkpCQkrPSBpb190aS5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9FTVBFRykJCQkrPSBlbXBlZy5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTykJCSs9IGZ0ZGlfc2lvLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTikJCQkrPSBnYXJtaW5fZ3BzLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX0lQQVEpCQkJKz0gaXBhcS5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9JUFcpCQkJKz0gaXB3Lm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX0lSKQkJCSs9IGlyLXVzYi5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOKQkJKz0ga2V5c3Bhbi5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1BEQSkJCSs9IGtleXNwYW5fcGRhLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX0tMU0kpCQkJKz0ga2w1a3VzYjEwNS5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QpCQkrPSBrb2JpbF9zY3Qubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzIpCQkrPSBtY3RfdTIzMi5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUKQkJKz0gb21uaW5ldC5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9QTDIzMDMpCQkJKz0gcGwyMzAzLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX1NBRkUpCQkJKz0gc2FmZV9zZXJpYWwubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfVEkpCQkJKz0gdGlfdXNiXzM0MTBfNTA1Mi5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9WSVNPUikJCQkrPSB2aXNvci5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQpCQkrPSB3aGl0ZWhlYXQubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NKQkJCSs9IGtleXNwYW5fcGRhLm8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlLWtleXNwYW5fcGRhX2Z3IGIvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlLWtleXNwYW5fcGRhX2Z3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMGJhZjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUta2V5c3Bhbl9wZGFfZncKQEAgLTAsMCArMSwxNiBAQAorCisjIHNvbWUgcnVsZXMgdG8gaGFuZGxlIHRoZSBxdWlya3Mgb2YgdGhlICdhczMxJyBhc3NlbWJsZXIsIGxpa2UKKyMgaW5zaXN0aW5nIHVwb24gZml4ZWQgc3VmZml4ZXMgZm9yIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGZpbGVzLAorIyBhbmQgaXRzIGxhY2sgb2YgcHJlcHJvY2Vzc29yIHN1cHBvcnQKKworYWxsOiBrZXlzcGFuX3BkYV9mdy5oCisKKyUuYXNtOiAlLlMKKwlnY2MgLXggYXNzZW1ibGVyLXdpdGgtY3BwIC1QIC1FIC1vICRAICQ8CisKKyUuaGV4OiAlLmFzbQorCWFzMzEgLWwgJDwKKwltdiAkKi5vYmogJEAKKworJV9mdy5oOiAlLmhleCBlenVzYl9jb252ZXJ0LnBsCisJcGVybCBlenVzYl9jb252ZXJ0LnBsICQqIDwgJDwgPiAkQApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OTk0ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmMKQEAgLTAsMCArMSw2MTQgQEAKKy8qCisgKiBCZWxraW4gVVNCIFNlcmlhbCBBZGFwdGVyIERyaXZlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAJCVdpbGxpYW0gR3JlYXRob3VzZSAod2dyZWF0aG91c2VAc212YS5jb20pCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgCUdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBsYXJnZWx5IGRlcml2ZWQgZnJvbSB3b3JrIGJ5IHRoZSBsaW51eC11c2IgZ3JvdXAKKyAqICBhbmQgYXNzb2NpYXRlZCBzb3VyY2UgZmlsZXMuICBQbGVhc2Ugc2VlIHRoZSB1c2Ivc2VyaWFsIGZpbGVzIGZvcgorICogIGluZGl2aWR1YWwgY3JlZGl0cyBhbmQgY29weXJpZ2h0cy4KKyAqICAKKyAqIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIAkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICoKKyAqIFRPRE86CisgKiAtLSBBZGQgdHJ1ZSBtb2RlbSBjb250b2wgbGluZSBxdWVyeSBjYXBhYmlsaXR5LiAgQ3VycmVudGx5IHdlIHRyYWNrIHRoZQorICogICAgc3RhdGVzIHJlcG9ydGVkIGJ5IHRoZSBpbnRlcnJ1cHQgYW5kIHRoZSBzdGF0ZXMgd2UgcmVxdWVzdC4KKyAqIC0tIEFkZCBlcnJvciByZXBvcnRpbmcgYmFjayB0byBhcHBsaWNhdGlvbiBmb3IgVUFSVCBlcnJvciBjb25kaXRpb25zLgorICogICAgSnVzdCBwb2ludCBtZSBhdCBob3cgdG8gaW1wbGVtZW50IHRoaXMgYW5kIEknbGwgZG8gaXQuIEkndmUgcHV0IHRoZQorICogICAgZnJhbWV3b3JrIGluLCBidXQgaGF2ZW4ndCBhbmFseXplZCB0aGUgInR0eV9mbGlwIiBpbnRlcmZhY2UgeWV0LgorICogLS0gQWRkIHN1cHBvcnQgZm9yIGZsdXNoIGNvbW1hbmRzCisgKiAtLSBBZGQgZXZlcnl0aGluZyB0aGF0IGlzIG1pc3NpbmcgOikKKyAqCisgKiAyNy1Ob3YtMjAwMSBna2gKKyAqIAljb21wcmVzc2VkIGFsbCB0aGUgZGlmZmVybmVudCBkZXZpY2UgZW50cmllcyBpbnRvIDEuCisgKgorICogMzAtTWF5LTIwMDEgZ2toCisgKglzd2l0Y2hlZCBmcm9tIHVzaW5nIHNwaW5sb2NrIHRvIGEgc2VtYXBob3JlLCB3aGljaCBmaXhlcyBsb3RzIG9mIHByb2JsZW1zLgorICoKKyAqIDA4LUFwci0yMDAxIGdiCisgKgktIElkZW50aWZ5IHZlcnNpb24gb24gbW9kdWxlIGxvYWQuCisgKgorICogMTItTWFyLTIwMDEgZ2toCisgKgktIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBHb0h1YnMgR08tQ09NMjMyIGRldmljZSB3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUKKyAqCSAgUGVyYWNvbSBkZXZpY2UuCisgKgorICogMDYtTm92LTIwMDAgZ2toCisgKgktIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBvbGQgQmVsa2luIGFuZCBQZXJhY29tIGRldmljZXMuCisgKgktIE1hZGUgdGhlIHBvcnQgYWJsZSB0byBiZSBvcGVuZWQgbXVsdGlwbGUgdGltZXMuCisgKgktIEFkZGVkIHNvbWUgZGVmYXVsdHMgaW5jYXNlIHRoZSBsaW5lIHNldHRpbmdzIGFyZSB0aGluZ3MgdGhlc2UgZGV2aWNlcworICoJICBjYW4ndCBzdXBwb3J0LiAKKyAqCisgKiAxOC1PY3QtMjAwMCBXaWxsaWFtIEdyZWF0aG91c2UKKyAqICAgIFJlbGVhc2VkIGludG8gdGhlIHdpbGQgKGxpbnV4LXVzYi1kZXZlbCkKKyAqCisgKiAxNy1PY3QtMjAwMCBXaWxsaWFtIEdyZWF0aG91c2UKKyAqICAgIEFkZCBjb2RlIHRvIHJlY29nbml6ZSBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBzZXQgaGFyZHdhcmUgZmxvdyBjb250cm9sCisgKiAgICBhcHByb3ByaWF0ZWx5LiAgQmVsa2luIHN0YXRlcyB0aGF0IGZpcm13YXJlIHByaW9yIHRvIDMuMDUgZG9lcyBub3QKKyAqICAgIG9wZXJhdGUgY29ycmVjdGx5IGluIGhhcmR3YXJlIGhhbmRzaGFrZSBtb2RlLiAgSSBoYXZlIHZlcmlmaWVkIHRoaXMKKyAqICAgIG9uIGZpcm13YXJlIDIuMDUgLS0gZm9yIGJvdGggUlRTIGFuZCBEVFIgaW5wdXQgZmxvdyBjb250cm9sLCB0aGUgY29udHJvbAorICogICAgbGluZSBpcyBub3QgcmVzZXQuICBUaGUgdGVzdCBwZXJmb3JtZWQgYnkgdGhlIEJlbGtpbiBXaW4qIGRyaXZlciBpcworICogICAgdG8gZW5hYmxlIGhhcmR3YXJlIGZsb3cgY29udHJvbCBmb3IgZmlybXdhcmUgMi4wNiBvciBncmVhdGVyIGFuZAorICogICAgZm9yIDEuMDAgb3IgcHJpb3IuICBJIGFtIG9ubHkgZW5hYmxpbmcgZm9yIDIuMDYgb3IgZ3JlYXRlci4KKyAqCisgKiAxMi1PY3QtMjAwMCBXaWxsaWFtIEdyZWF0aG91c2UKKyAqICAgIEZpcnN0IGN1dCBhdCBzdXBwb3J0aW5nIEJlbGtpbiBVU0IgU2VyaWFsIEFkYXB0ZXIgRjVVMTAzCisgKiAgICBJIGRpZCBub3QgaGF2ZSBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIHdvcmsgdG8gc3VwcG9ydCB0aGlzCisgKiAgICBhZGFwdGVyLCBzbyBwYXJkb24gYW55IHN0dXBpZCBtaXN0YWtlcy4gIEFsbCBvZiB0aGUgaW5mb3JtYXRpb24KKyAqICAgIEkgYW0gdXNpbmcgdG8gd3JpdGUgdGhpcyBkcml2ZXIgd2FzIGFjcXVpcmVkIGJ5IHVzaW5nIGEgbW9kaWZpZWQKKyAqICAgIFVzYlNub29wIG9uIFdpbmRvd3MyMDAwIGFuZCBmcm9tIGV4YW1pbmluZyB0aGUgb3RoZXIgVVNCIGRyaXZlcnMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorI2luY2x1ZGUgImJlbGtpbl9zYS5oIgorCitzdGF0aWMgaW50IGRlYnVnOworCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS4yIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJXaWxsaWFtIEdyZWF0aG91c2UgPHdncmVhdGhvdXNlQHNtdmEuY29tPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBCZWxraW4gU2VyaWFsIGNvbnZlcnRlciBkcml2ZXIiCisKKy8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGEgQmVsa2luIFVTQiBTZXJpYWwgQWRhcHRlciBGNVUxMDMgKi8KK3N0YXRpYyBpbnQgIGJlbGtpbl9zYV9zdGFydHVwCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgdm9pZCBiZWxraW5fc2Ffc2h1dGRvd24JCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIGJlbGtpbl9zYV9vcGVuCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQgYmVsa2luX3NhX2Nsb3NlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQgYmVsa2luX3NhX3JlYWRfaW50X2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIGJlbGtpbl9zYV9zZXRfdGVybWlvcwkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKiBvbGQpOworc3RhdGljIGludCAgYmVsa2luX3NhX2lvY3RsCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgdm9pZCBiZWxraW5fc2FfYnJlYWtfY3RsCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlICk7CitzdGF0aWMgaW50ICBiZWxraW5fc2FfdGlvY21nZXQJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50ICBiZWxraW5fc2FfdGlvY21zZXQJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKKworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY29tYmluZWQgW10gPSB7CisJeyBVU0JfREVWSUNFKEJFTEtJTl9TQV9WSUQsIEJFTEtJTl9TQV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEJFTEtJTl9PTERfVklELCBCRUxLSU5fT0xEX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoUEVSQUNPTV9WSUQsIFBFUkFDT01fUElEKSB9LAorCXsgVVNCX0RFVklDRShHT0hVQlNfVklELCBHT0hVQlNfUElEKSB9LAorCXsgVVNCX0RFVklDRShHT0hVQlNfVklELCBIQU5EWUxJTktfUElEKSB9LAorCXsgVVNCX0RFVklDRShCRUxLSU5fRE9DS1NUQVRJT05fVklELCBCRUxLSU5fRE9DS1NUQVRJT05fUElEKSB9LAorCXsgfQkJCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZV9jb21iaW5lZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBiZWxraW5fZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJiZWxraW4iLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGVfY29tYmluZWQsCit9OworCisvKiBBbGwgb2YgdGhlIGRldmljZSBpbmZvIG5lZWRlZCBmb3IgdGhlIHNlcmlhbCBjb252ZXJ0ZXJzICovCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgYmVsa2luX2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJCZWxraW4gLyBQZXJhY29tIC8gR29IdWJzIFVTQiBTZXJpYWwgQWRhcHRlciIsCisJLnNob3J0X25hbWUgPQkJImJlbGtpbiIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlX2NvbWJpbmVkLAorCS5udW1faW50ZXJydXB0X2luID0JMSwKKwkubnVtX2J1bGtfaW4gPQkJMSwKKwkubnVtX2J1bGtfb3V0ID0JCTEsCisJLm51bV9wb3J0cyA9CQkxLAorCS5vcGVuID0JCQliZWxraW5fc2Ffb3BlbiwKKwkuY2xvc2UgPQkJYmVsa2luX3NhX2Nsb3NlLAorCS5yZWFkX2ludF9jYWxsYmFjayA9CWJlbGtpbl9zYV9yZWFkX2ludF9jYWxsYmFjaywJLyogSG93IHdlIGdldCB0aGUgc3RhdHVzIGluZm8gKi8KKwkuaW9jdGwgPQkJYmVsa2luX3NhX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQliZWxraW5fc2Ffc2V0X3Rlcm1pb3MsCisJLmJyZWFrX2N0bCA9CQliZWxraW5fc2FfYnJlYWtfY3RsLAorCS50aW9jbWdldCA9CQliZWxraW5fc2FfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0JCWJlbGtpbl9zYV90aW9jbXNldCwKKwkuYXR0YWNoID0JCWJlbGtpbl9zYV9zdGFydHVwLAorCS5zaHV0ZG93biA9CQliZWxraW5fc2Ffc2h1dGRvd24sCit9OworCisKK3N0cnVjdCBiZWxraW5fc2FfcHJpdmF0ZSB7CisJc3BpbmxvY2tfdAkJbG9jazsKKwl1bnNpZ25lZCBsb25nCQljb250cm9sX3N0YXRlOworCXVuc2lnbmVkIGNoYXIJCWxhc3RfbHNyOworCXVuc2lnbmVkIGNoYXIJCWxhc3RfbXNyOworCWludAkJCWJhZF9mbG93X2NvbnRyb2w7Cit9OworCisKKy8qCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJlbGtpbiBVU0IgU2VyaWFsIEFkYXB0ZXIgRjVVMTAzIHNwZWNpZmljIGRyaXZlciBmdW5jdGlvbnMKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNkZWZpbmUgV0RSX1RJTUVPVVQgNTAwMCAvKiBkZWZhdWx0IHVyYiB0aW1lb3V0ICovCisKKy8qIGFzc3VtZXMgdGhhdCBzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsIGlzIGF2YWlsYWJsZSAqLworI2RlZmluZSBCU0FfVVNCX0NNRChjLHYpIHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwgXAorCQkJCQkgICAgKGMpLCBCRUxLSU5fU0FfU0VUX1JFUVVFU1RfVFlQRSwgXAorCQkJCQkgICAgKHYpLCAwLCBOVUxMLCAwLCBXRFJfVElNRU9VVCkKKworLyogZG8gc29tZSBzdGFydHVwIGFsbG9jYXRpb25zIG5vdCBjdXJyZW50bHkgcGVyZm9ybWVkIGJ5IHVzYl9zZXJpYWxfcHJvYmUoKSAqLworc3RhdGljIGludCBiZWxraW5fc2Ffc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gc2VyaWFsLT5kZXY7CisJc3RydWN0IGJlbGtpbl9zYV9wcml2YXRlICpwcml2OworCisJLyogYWxsb2NhdGUgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KKwlwcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGJlbGtpbl9zYV9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gKC0xKTsgLyogZXJyb3IgKi8KKwkvKiBzZXQgaW5pdGlhbCB2YWx1ZXMgZm9yIGNvbnRyb2wgc3RydWN0dXJlcyAqLworCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwlwcml2LT5jb250cm9sX3N0YXRlID0gMDsKKwlwcml2LT5sYXN0X2xzciA9IDA7CisJcHJpdi0+bGFzdF9tc3IgPSAwOworCS8qIHNlZSBjb21tZW50cyBhdCB0b3Agb2YgZmlsZSAqLworCXByaXYtPmJhZF9mbG93X2NvbnRyb2wgPSAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkgPD0gMHgwMjA2KSA/IDEgOiAwOworCWluZm8oImJjZERldmljZTogJTA0eCwgYmZjOiAlZCIsIGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpLCBwcml2LT5iYWRfZmxvd19jb250cm9sKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNlcmlhbC0+cG9ydFswXS0+d3JpdGVfd2FpdCk7CisJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSwgcHJpdik7CisJCisJcmV0dXJuICgwKTsKK30KKworCitzdGF0aWMgdm9pZCBiZWxraW5fc2Ffc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IGJlbGtpbl9zYV9wcml2YXRlICpwcml2OworCWludCBpOworCQorCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCS8qIHN0b3AgcmVhZHMgYW5kIHdyaXRlcyBvbiBhbGwgcG9ydHMgKi8KKwlmb3IgKGk9MDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJLyogTXkgc3BlY2lhbCBpdGVtcywgdGhlIHN0YW5kYXJkIHJvdXRpbmVzIGZyZWUgbXkgdXJicyAqLworCQlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSk7CisJCWlmIChwcml2KQorCQkJa2ZyZWUocHJpdik7CisJfQorfQorCisKK3N0YXRpYyBpbnQgIGJlbGtpbl9zYV9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKworCWRiZygiJXMgcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCS8qU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UqLworCS8qIFRPRE86IExvb2sgYXQgcG9zc2liaWxpdHkgb2Ygc3VibWl0dGluZyBtdWx0aXBsZSBVUkJzIHRvIGRldmljZSB0bworCSAqICAgICAgIGVuaGFuY2UgYnVmZmVyaW5nLiAgV2luIHRyYWNlIHNob3dzIDE2IGluaXRpYWwgcmVhZCBVUkJzLgorCSAqLworCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldHZhbCkgeworCQllcnIoInVzYl9zdWJtaXRfdXJiKHJlYWQgYnVsaykgZmFpbGVkIik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0dmFsKSB7CisJCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJCWVycigiIHVzYl9zdWJtaXRfdXJiKHJlYWQgaW50KSBmYWlsZWQiKTsKKwl9CisKK2V4aXQ6CisJcmV0dXJuIHJldHZhbDsKK30gLyogYmVsa2luX3NhX29wZW4gKi8KKworCitzdGF0aWMgdm9pZCBiZWxraW5fc2FfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWRiZygiJXMgcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIHNodXRkb3duIG91ciBidWxrIHJlYWRzIGFuZCB3cml0ZXMgKi8KKwl1c2Jfa2lsbF91cmIocG9ydC0+d3JpdGVfdXJiKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKK30gLyogYmVsa2luX3NhX2Nsb3NlICovCisKKworc3RhdGljIHZvaWQgYmVsa2luX3NhX3JlYWRfaW50X2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgYmVsa2luX3NhX3ByaXZhdGUgKnByaXY7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCByZXR2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlnb3RvIGV4aXQ7CisJfQorCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisKKwkvKiBIYW5kbGUga25vd24gaW50ZXJydXB0IGRhdGEgKi8KKwkvKiBpZ25vcmUgZGF0YVswXSBhbmQgZGF0YVsxXSAqLworCisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPmxhc3RfbXNyID0gZGF0YVtCRUxLSU5fU0FfTVNSX0lOREVYXTsKKwkKKwkvKiBSZWNvcmQgQ29udHJvbCBMaW5lIHN0YXRlcyAqLworCWlmIChwcml2LT5sYXN0X21zciAmIEJFTEtJTl9TQV9NU1JfRFNSKQorCQlwcml2LT5jb250cm9sX3N0YXRlIHw9IFRJT0NNX0RTUjsKKwllbHNlCisJCXByaXYtPmNvbnRyb2xfc3RhdGUgJj0gflRJT0NNX0RTUjsKKworCWlmIChwcml2LT5sYXN0X21zciAmIEJFTEtJTl9TQV9NU1JfQ1RTKQorCQlwcml2LT5jb250cm9sX3N0YXRlIHw9IFRJT0NNX0NUUzsKKwllbHNlCisJCXByaXYtPmNvbnRyb2xfc3RhdGUgJj0gflRJT0NNX0NUUzsKKworCWlmIChwcml2LT5sYXN0X21zciAmIEJFTEtJTl9TQV9NU1JfUkkpCisJCXByaXYtPmNvbnRyb2xfc3RhdGUgfD0gVElPQ01fUkk7CisJZWxzZQorCQlwcml2LT5jb250cm9sX3N0YXRlICY9IH5USU9DTV9SSTsKKworCWlmIChwcml2LT5sYXN0X21zciAmIEJFTEtJTl9TQV9NU1JfQ0QpCisJCXByaXYtPmNvbnRyb2xfc3RhdGUgfD0gVElPQ01fQ0Q7CisJZWxzZQorCQlwcml2LT5jb250cm9sX3N0YXRlICY9IH5USU9DTV9DRDsKKworCS8qIE5vdyB0byByZXBvcnQgYW55IGVycm9ycyAqLworCXByaXYtPmxhc3RfbHNyID0gZGF0YVtCRUxLSU5fU0FfTFNSX0lOREVYXTsKKyNpZiAwCisJLyoKKwkgKiBmaWxsIGluIHRoZSBmbGlwIGJ1ZmZlciBoZXJlLCBidXQgSSBkbyBub3Qga25vdyB0aGUgcmVsYXRpb24KKwkgKiB0byB0aGUgY3VycmVudC9uZXh0IHJlY2VpdmUgYnVmZmVyIG9yIGNoYXJhY3RlcnMuICBJIG5lZWQKKwkgKiB0byBsb29rIGluIHRvIHRoaXMgYmVmb3JlIGNvbW1pdHRpbmcgYW55IGNvZGUuCisJICovCisJaWYgKHByaXYtPmxhc3RfbHNyICYgQkVMS0lOX1NBX0xTUl9FUlIpIHsKKwkJdHR5ID0gcG9ydC0+dHR5OworCQkvKiBPdmVycnVuIEVycm9yICovCisJCWlmIChwcml2LT5sYXN0X2xzciAmIEJFTEtJTl9TQV9MU1JfT0UpIHsKKwkJfQorCQkvKiBQYXJpdHkgRXJyb3IgKi8KKwkJaWYgKHByaXYtPmxhc3RfbHNyICYgQkVMS0lOX1NBX0xTUl9QRSkgeworCQl9CisJCS8qIEZyYW1pbmcgRXJyb3IgKi8KKwkJaWYgKHByaXYtPmxhc3RfbHNyICYgQkVMS0lOX1NBX0xTUl9GRSkgeworCQl9CisJCS8qIEJyZWFrIEluZGljYXRvciAqLworCQlpZiAocHJpdi0+bGFzdF9sc3IgJiBCRUxLSU5fU0FfTFNSX0JJKSB7CisJCX0KKwl9CisjZW5kaWYKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CitleGl0OgorCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXR2YWwpCisJCWVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHJldHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGJlbGtpbl9zYV9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IGJlbGtpbl9zYV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGludCBpZmxhZzsKKwl1bnNpZ25lZCBpbnQgY2ZsYWc7CisJdW5zaWduZWQgaW50IG9sZF9pZmxhZyA9IDA7CisJdW5zaWduZWQgaW50IG9sZF9jZmxhZyA9IDA7CisJX191MTYgdXJiX3ZhbHVlID0gMDsgLyogV2lsbCBob2xkIHRoZSBuZXcgZmxhZ3MgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgY29udHJvbF9zdGF0ZTsKKwlpbnQgYmFkX2Zsb3dfY29udHJvbDsKKwkKKwlpZiAoKCFwb3J0LT50dHkpIHx8ICghcG9ydC0+dHR5LT50ZXJtaW9zKSkgeworCQlkYmcgKCIlcyAtIG5vIHR0eSBvciB0ZXJtaW9zIHN0cnVjdHVyZSIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlpZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19pZmxhZzsKKwljZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKworCS8qIGdldCBhIGxvY2FsIGNvcHkgb2YgdGhlIGN1cnJlbnQgcG9ydCBzZXR0aW5ncyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJY29udHJvbF9zdGF0ZSA9IHByaXYtPmNvbnRyb2xfc3RhdGU7CisJYmFkX2Zsb3dfY29udHJvbCA9IHByaXYtPmJhZF9mbG93X2NvbnRyb2w7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQorCS8qIGNoZWNrIHRoYXQgdGhleSByZWFsbHkgd2FudCB1cyB0byBjaGFuZ2Ugc29tZXRoaW5nICovCisJaWYgKG9sZF90ZXJtaW9zKSB7CisJCWlmICgoY2ZsYWcgPT0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWcpICYmCisJCSAgICAoUkVMRVZBTlRfSUZMQUcocG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnKSA9PSBSRUxFVkFOVF9JRkxBRyhvbGRfdGVybWlvcy0+Y19pZmxhZykpKSB7CisJCQlkYmcoIiVzIC0gbm90aGluZyB0byBjaGFuZ2UuLi4iLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuOworCQl9CisJCW9sZF9pZmxhZyA9IG9sZF90ZXJtaW9zLT5jX2lmbGFnOworCQlvbGRfY2ZsYWcgPSBvbGRfdGVybWlvcy0+Y19jZmxhZzsKKwl9CisKKwkvKiBTZXQgdGhlIGJhdWQgcmF0ZSAqLworCWlmKCAoY2ZsYWcmQ0JBVUQpICE9IChvbGRfY2ZsYWcmQ0JBVUQpICkgeworCQkvKiByZWFzc2VydCBEVFIgYW5kIChtYXliZSkgUlRTIG9uIHRyYW5zaXRpb24gZnJvbSBCMCAqLworCQlpZiggKG9sZF9jZmxhZyZDQkFVRCkgPT0gQjAgKSB7CisJCQljb250cm9sX3N0YXRlIHw9IChUSU9DTV9EVFJ8VElPQ01fUlRTKTsKKwkJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0RUUl9SRVFVRVNULCAxKSA8IDApCisJCQkJZXJyKCJTZXQgRFRSIGVycm9yIik7CisJCQkvKiBkb24ndCBzZXQgUlRTIGlmIHVzaW5nIGhhcmR3YXJlIGZsb3cgY29udHJvbCAqLworCQkJaWYgKCEob2xkX2NmbGFnJkNSVFNDVFMpICkKKwkJCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9SVFNfUkVRVUVTVCwgMSkgPCAwKQorCQkJCQllcnIoIlNldCBSVFMgZXJyb3IiKTsKKwkJfQorCisJCXN3aXRjaChjZmxhZyAmIENCQVVEKSB7CisJCQljYXNlIEIwOiAvKiBoYW5kbGVkIGJlbG93ICovIGJyZWFrOworCQkJY2FzZSBCMzAwOiB1cmJfdmFsdWUgPSBCRUxLSU5fU0FfQkFVRCgzMDApOyBicmVhazsKKwkJCWNhc2UgQjYwMDogdXJiX3ZhbHVlID0gQkVMS0lOX1NBX0JBVUQoNjAwKTsgYnJlYWs7CisJCQljYXNlIEIxMjAwOiB1cmJfdmFsdWUgPSBCRUxLSU5fU0FfQkFVRCgxMjAwKTsgYnJlYWs7CisJCQljYXNlIEIyNDAwOiB1cmJfdmFsdWUgPSBCRUxLSU5fU0FfQkFVRCgyNDAwKTsgYnJlYWs7CisJCQljYXNlIEI0ODAwOiB1cmJfdmFsdWUgPSBCRUxLSU5fU0FfQkFVRCg0ODAwKTsgYnJlYWs7CisJCQljYXNlIEI5NjAwOiB1cmJfdmFsdWUgPSBCRUxLSU5fU0FfQkFVRCg5NjAwKTsgYnJlYWs7CisJCQljYXNlIEIxOTIwMDogdXJiX3ZhbHVlID0gQkVMS0lOX1NBX0JBVUQoMTkyMDApOyBicmVhazsKKwkJCWNhc2UgQjM4NDAwOiB1cmJfdmFsdWUgPSBCRUxLSU5fU0FfQkFVRCgzODQwMCk7IGJyZWFrOworCQkJY2FzZSBCNTc2MDA6IHVyYl92YWx1ZSA9IEJFTEtJTl9TQV9CQVVEKDU3NjAwKTsgYnJlYWs7CisJCQljYXNlIEIxMTUyMDA6IHVyYl92YWx1ZSA9IEJFTEtJTl9TQV9CQVVEKDExNTIwMCk7IGJyZWFrOworCQkJY2FzZSBCMjMwNDAwOiB1cmJfdmFsdWUgPSBCRUxLSU5fU0FfQkFVRCgyMzA0MDApOyBicmVhazsKKwkJCWRlZmF1bHQ6IGVycigiQkVMS0lOIFVTQiBTZXJpYWwgQWRhcHRlcjogdW5zdXBwb3J0ZWQgYmF1ZHJhdGUgcmVxdWVzdCwgdXNpbmcgZGVmYXVsdCBvZiA5NjAwIik7CisJCQkJdXJiX3ZhbHVlID0gQkVMS0lOX1NBX0JBVUQoOTYwMCk7IGJyZWFrOworCQl9CisJCWlmICgoY2ZsYWcgJiBDQkFVRCkgIT0gQjAgKSB7CisJCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9CQVVEUkFURV9SRVFVRVNULCB1cmJfdmFsdWUpIDwgMCkKKwkJCQllcnIoIlNldCBiYXVkcmF0ZSBlcnJvciIpOworCQl9IGVsc2UgeworCQkJLyogRGlzYWJsZSBmbG93IGNvbnRyb2wgKi8KKwkJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULCBCRUxLSU5fU0FfRkxPV19OT05FKSA8IDApCisJCQkJZXJyKCJEaXNhYmxlIGZsb3djb250cm9sIGVycm9yIik7CisKKwkJCS8qIERyb3AgUlRTIGFuZCBEVFIgKi8KKwkJCWNvbnRyb2xfc3RhdGUgJj0gfihUSU9DTV9EVFIgfCBUSU9DTV9SVFMpOworCQkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfRFRSX1JFUVVFU1QsIDApIDwgMCkKKwkJCQllcnIoIkRUUiBMT1cgZXJyb3IiKTsKKwkJCWlmIChCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX1JUU19SRVFVRVNULCAwKSA8IDApCisJCQkJZXJyKCJSVFMgTE9XIGVycm9yIik7CisJCX0KKwl9CisKKwkvKiBzZXQgdGhlIHBhcml0eSAqLworCWlmKCAoY2ZsYWcmKFBBUkVOQnxQQVJPREQpKSAhPSAob2xkX2NmbGFnJihQQVJFTkJ8UEFST0REKSkgKSB7CisJCWlmIChjZmxhZyAmIFBBUkVOQikKKwkJCXVyYl92YWx1ZSA9IChjZmxhZyAmIFBBUk9ERCkgPyAgQkVMS0lOX1NBX1BBUklUWV9PREQgOiBCRUxLSU5fU0FfUEFSSVRZX0VWRU47CisJCWVsc2UKKwkJCXVyYl92YWx1ZSA9IEJFTEtJTl9TQV9QQVJJVFlfTk9ORTsKKwkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfUEFSSVRZX1JFUVVFU1QsIHVyYl92YWx1ZSkgPCAwKQorCQkJZXJyKCJTZXQgcGFyaXR5IGVycm9yIik7CisJfQorCisJLyogc2V0IHRoZSBudW1iZXIgb2YgZGF0YSBiaXRzICovCisJaWYoIChjZmxhZyZDU0laRSkgIT0gKG9sZF9jZmxhZyZDU0laRSkgKSB7CisJCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgeworCQkJY2FzZSBDUzU6IHVyYl92YWx1ZSA9IEJFTEtJTl9TQV9EQVRBX0JJVFMoNSk7IGJyZWFrOworCQkJY2FzZSBDUzY6IHVyYl92YWx1ZSA9IEJFTEtJTl9TQV9EQVRBX0JJVFMoNik7IGJyZWFrOworCQkJY2FzZSBDUzc6IHVyYl92YWx1ZSA9IEJFTEtJTl9TQV9EQVRBX0JJVFMoNyk7IGJyZWFrOworCQkJY2FzZSBDUzg6IHVyYl92YWx1ZSA9IEJFTEtJTl9TQV9EQVRBX0JJVFMoOCk7IGJyZWFrOworCQkJZGVmYXVsdDogZXJyKCJDU0laRSB3YXMgbm90IENTNS1DUzgsIHVzaW5nIGRlZmF1bHQgb2YgOCIpOworCQkJCXVyYl92YWx1ZSA9IEJFTEtJTl9TQV9EQVRBX0JJVFMoOCk7CisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKEJTQV9VU0JfQ01EKEJFTEtJTl9TQV9TRVRfREFUQV9CSVRTX1JFUVVFU1QsIHVyYl92YWx1ZSkgPCAwKQorCQkJZXJyKCJTZXQgZGF0YSBiaXRzIGVycm9yIik7CisJfQorCisJLyogc2V0IHRoZSBudW1iZXIgb2Ygc3RvcCBiaXRzICovCisJaWYoIChjZmxhZyZDU1RPUEIpICE9IChvbGRfY2ZsYWcmQ1NUT1BCKSApIHsKKwkJdXJiX3ZhbHVlID0gKGNmbGFnICYgQ1NUT1BCKSA/IEJFTEtJTl9TQV9TVE9QX0JJVFMoMikgOiBCRUxLSU5fU0FfU1RPUF9CSVRTKDEpOworCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9TVE9QX0JJVFNfUkVRVUVTVCwgdXJiX3ZhbHVlKSA8IDApCisJCQllcnIoIlNldCBzdG9wIGJpdHMgZXJyb3IiKTsKKwl9CisKKwkvKiBTZXQgZmxvdyBjb250cm9sICovCisJaWYoIChpZmxhZyZJWE9GRikgICAhPSAob2xkX2lmbGFnJklYT0ZGKQorCXx8CShpZmxhZyZJWE9OKSAgICAhPSAob2xkX2lmbGFnJklYT04pCisJfHwgIChjZmxhZyZDUlRTQ1RTKSAhPSAob2xkX2NmbGFnJkNSVFNDVFMpICkgeworCQl1cmJfdmFsdWUgPSAwOworCQlpZiAoKGlmbGFnICYgSVhPRkYpIHx8IChpZmxhZyAmIElYT04pKQorCQkJdXJiX3ZhbHVlIHw9IChCRUxLSU5fU0FfRkxPV19PWE9OIHwgQkVMS0lOX1NBX0ZMT1dfSVhPTik7CisJCWVsc2UKKwkJCXVyYl92YWx1ZSAmPSB+KEJFTEtJTl9TQV9GTE9XX09YT04gfCBCRUxLSU5fU0FfRkxPV19JWE9OKTsKKworCQlpZiAoY2ZsYWcgJiBDUlRTQ1RTKQorCQkJdXJiX3ZhbHVlIHw9ICAoQkVMS0lOX1NBX0ZMT1dfT0NUUyB8IEJFTEtJTl9TQV9GTE9XX0lSVFMpOworCQllbHNlCisJCQl1cmJfdmFsdWUgJj0gfihCRUxLSU5fU0FfRkxPV19PQ1RTIHwgQkVMS0lOX1NBX0ZMT1dfSVJUUyk7CisKKwkJaWYgKGJhZF9mbG93X2NvbnRyb2wpCisJCQl1cmJfdmFsdWUgJj0gfihCRUxLSU5fU0FfRkxPV19JUlRTKTsKKworCQlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9GTE9XX0NUUkxfUkVRVUVTVCwgdXJiX3ZhbHVlKSA8IDApCisJCQllcnIoIlNldCBmbG93IGNvbnRyb2wgZXJyb3IiKTsKKwl9CisKKwkvKiBzYXZlIG9mZiB0aGUgbW9kaWZpZWQgcG9ydCBzZXR0aW5ncyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+Y29udHJvbF9zdGF0ZSA9IGNvbnRyb2xfc3RhdGU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworfSAvKiBiZWxraW5fc2Ffc2V0X3Rlcm1pb3MgKi8KKworCitzdGF0aWMgdm9pZCBiZWxraW5fc2FfYnJlYWtfY3RsKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUgKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisKKwlpZiAoQlNBX1VTQl9DTUQoQkVMS0lOX1NBX1NFVF9CUkVBS19SRVFVRVNULCBicmVha19zdGF0ZSA/IDEgOiAwKSA8IDApCisJCWVycigiU2V0IGJyZWFrX2N0bCAlZCIsIGJyZWFrX3N0YXRlKTsKK30KKworCitzdGF0aWMgaW50IGJlbGtpbl9zYV90aW9jbWdldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGJlbGtpbl9zYV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgY29udHJvbF9zdGF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQorCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwljb250cm9sX3N0YXRlID0gcHJpdi0+Y29udHJvbF9zdGF0ZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gY29udHJvbF9zdGF0ZTsKK30KKworCitzdGF0aWMgaW50IGJlbGtpbl9zYV90aW9jbXNldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IGJlbGtpbl9zYV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgY29udHJvbF9zdGF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXR2YWw7CisJaW50IHJ0cyA9IDA7CisJaW50IGR0ciA9IDA7CisJCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWNvbnRyb2xfc3RhdGUgPSBwcml2LT5jb250cm9sX3N0YXRlOworCisJaWYgKHNldCAmIFRJT0NNX1JUUykgeworCQljb250cm9sX3N0YXRlIHw9IFRJT0NNX1JUUzsKKwkJcnRzID0gMTsKKwl9CisJaWYgKHNldCAmIFRJT0NNX0RUUikgeworCQljb250cm9sX3N0YXRlIHw9IFRJT0NNX0RUUjsKKwkJZHRyID0gMTsKKwl9CisJaWYgKGNsZWFyICYgVElPQ01fUlRTKSB7CisJCWNvbnRyb2xfc3RhdGUgJj0gflRJT0NNX1JUUzsKKwkJcnRzID0gMDsKKwl9CisJaWYgKGNsZWFyICYgVElPQ01fRFRSKSB7CisJCWNvbnRyb2xfc3RhdGUgJj0gflRJT0NNX0RUUjsKKwkJZHRyID0gMDsKKwl9CisKKwlwcml2LT5jb250cm9sX3N0YXRlID0gY29udHJvbF9zdGF0ZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR2YWwgPSBCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX1JUU19SRVFVRVNULCBydHMpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWVycigiU2V0IFJUUyBlcnJvciAlZCIsIHJldHZhbCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXR2YWwgPSBCU0FfVVNCX0NNRChCRUxLSU5fU0FfU0VUX0RUUl9SRVFVRVNULCBkdHIpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWVycigiU2V0IERUUiBlcnJvciAlZCIsIHJldHZhbCk7CisJCWdvdG8gZXhpdDsKKwl9CitleGl0OgorCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIGludCBiZWxraW5fc2FfaW9jdGwgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFRJT0NNSVdBSVQ6CisJCS8qIHdhaXQgZm9yIGFueSBvZiB0aGUgNCBtb2RlbSBpbnB1dHMgKERDRCxSSSxEU1IsQ1RTKSovCisJCS8qIFRPRE8gKi8KKwkJcmV0dXJuKCAwICk7CisKKwljYXNlIFRJT0NHSUNPVU5UOgorCQkvKiByZXR1cm4gY291bnQgb2YgbW9kZW1saW5lIHRyYW5zaXRpb25zICovCisJCS8qIFRPRE8gKi8KKwkJcmV0dXJuIDA7CisKKwlkZWZhdWx0OgorCQlkYmcoImJlbGtpbl9zYV9pb2N0bCBhcmcgbm90IHN1cHBvcnRlZCAtIDB4JTA0eCIsY21kKTsKKwkJcmV0dXJuKC1FTk9JT0NUTENNRCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30gLyogYmVsa2luX3NhX2lvY3RsICovCisKKworc3RhdGljIGludCBfX2luaXQgYmVsa2luX3NhX2luaXQgKHZvaWQpCit7CisJaW50IHJldHZhbDsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZiZWxraW5fZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmYmVsa2luX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlyZXR1cm4gMDsKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZiZWxraW5fZGV2aWNlKTsKK2ZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOgorCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IGJlbGtpbl9zYV9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgmYmVsa2luX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmYmVsa2luX2RldmljZSk7Cit9CisKKworbW9kdWxlX2luaXQgKGJlbGtpbl9zYV9pbml0KTsKK21vZHVsZV9leGl0IChiZWxraW5fc2FfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9WRVJTSU9OKCBEUklWRVJfVkVSU0lPTiApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMTZiOTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgQmVsa2luIFVTQiBTZXJpYWwgQWRhcHRlciBEcml2ZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwCisgKiAgICAgIFdpbGxpYW0gR3JlYXRob3VzZSAod2dyZWF0aG91c2VAc212YS5jb20pCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBsYXJnZWx5IGRlcml2ZWQgZnJvbSB3b3JrIGJ5IHRoZSBsaW51eC11c2IgZ3JvdXAKKyAqICBhbmQgYXNzb2NpYXRlZCBzb3VyY2UgZmlsZXMuICBQbGVhc2Ugc2VlIHRoZSB1c2Ivc2VyaWFsIGZpbGVzIGZvcgorICogIGluZGl2aWR1YWwgY3JlZGl0cyBhbmQgY29weXJpZ2h0cy4KKyAqICAKKyAqIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIAkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICoKKyAqIDEyLU1hci0yMDAxIGdraAorICoJQWRkZWQgR29IdWJzIEdPLUNPTTIzMiBkZXZpY2UgaWQuCisgKgorICogMDYtTm92LTIwMDAgZ2toCisgKglBZGRlZCBvbGQgQmVsa2luIGFuZCBQZXJhY29tIGRldmljZSBpZHMsIHdoaWNoIHRoaXMgZHJpdmVyIHN1cHBvcnRzCisgKgorICogMTItT2N0LTIwMDAgV2lsbGlhbSBHcmVhdGhvdXNlCisgKiAgICBGaXJzdCBjdXQgYXQgc3VwcG9ydGluZyBCZWxraW4gVVNCIFNlcmlhbCBBZGFwdGVyIEY1VTEwMworICogICAgSSBkaWQgbm90IGhhdmUgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCB3b3JrIHRvIHN1cHBvcnQgdGhpcworICogICAgYWRhcHRlciwgc28gcGFyZG9uIGFueSBzdHVwaWQgbWlzdGFrZXMuICBBbGwgb2YgdGhlIGluZm9ybWF0aW9uCisgKiAgICBJIGFtIHVzaW5nIHRvIHdyaXRlIHRoaXMgZHJpdmVyIHdhcyBhY3F1aXJlZCBieSB1c2luZyBhIG1vZGlmaWVkCisgKiAgICBVc2JTbm9vcCBvbiBXaW5kb3dzMjAwMC4KKyAqICAgIAorICovCisKKyNpZm5kZWYgX19MSU5VWF9VU0JfU0VSSUFMX0JTQV9ICisjZGVmaW5lIF9fTElOVVhfVVNCX1NFUklBTF9CU0FfSAorCisjZGVmaW5lIEJFTEtJTl9ET0NLU1RBVElPTl9WSUQJMHgwNTBkCS8qIFZlbmRvciBJZCAqLworI2RlZmluZSBCRUxLSU5fRE9DS1NUQVRJT05fUElECTB4MTIwMwkvKiBQcm9kdWN0IElkICovCisKKyNkZWZpbmUgQkVMS0lOX1NBX1ZJRAkweDA1MGQJLyogVmVuZG9yIElkICovCisjZGVmaW5lIEJFTEtJTl9TQV9QSUQJMHgwMTAzCS8qIFByb2R1Y3QgSWQgKi8KKworI2RlZmluZSBCRUxLSU5fT0xEX1ZJRAkweDA1NmMJLyogQmVsa2luJ3MgIm9sZCIgdmVuZG9yIGlkICovCisjZGVmaW5lIEJFTEtJTl9PTERfUElECTB4ODAwNwkvKiBCZWxraW4ncyAib2xkIiBzaW5nbGUgcG9ydCBzZXJpYWwgY29udmVydGVyJ3MgaWQgKi8KKworI2RlZmluZSBQRVJBQ09NX1ZJRAkweDA1NjUJLyogUGVyYWNvbSdzIHZlbmRvciBpZCAqLworI2RlZmluZSBQRVJBQ09NX1BJRAkweDAwMDEJLyogUGVyYWNvbSdzIHNpbmdsZSBwb3J0IHNlcmlhbCBjb252ZXJ0ZXIncyBpZCAqLworCisjZGVmaW5lIEdPSFVCU19WSUQJMHgwOTIxCS8qIEdvSHVicyB2ZW5kb3IgaWQgKi8KKyNkZWZpbmUgR09IVUJTX1BJRAkweDEwMDAJLyogR29IdWJzIHNpbmdsZSBwb3J0IHNlcmlhbCBjb252ZXJ0ZXIncyBpZCAoaWRlbnRpY2FsIHRvIHRoZSBQZXJhY29tIGRldmljZSkgKi8KKyNkZWZpbmUgSEFORFlMSU5LX1BJRAkweDEyMDAJLyogSGFuZHlMaW5rIFVTQidzIGlkIChpZGVudGljYWwgdG8gdGhlIFBlcmFjb20gZGV2aWNlKSAqLworCisvKiBWZW5kb3IgUmVxdWVzdCBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX1NFVF9CQVVEUkFURV9SRVFVRVNUCTAgIC8qIFNldCBiYXVkIHJhdGUgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX1NFVF9TVE9QX0JJVFNfUkVRVUVTVAkxICAvKiBTZXQgc3RvcCBiaXRzICgxLDIpICovCisjZGVmaW5lIEJFTEtJTl9TQV9TRVRfREFUQV9CSVRTX1JFUVVFU1QJMiAgLyogU2V0IGRhdGEgYml0cyAoNSw2LDcsOCkgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX1NFVF9QQVJJVFlfUkVRVUVTVAkzICAvKiBTZXQgcGFyaXR5IChOb25lLCBFdmVuLCBPZGQpICovCisKKyNkZWZpbmUgQkVMS0lOX1NBX1NFVF9EVFJfUkVRVUVTVAkxMCAvKiBTZXQgRFRSIHN0YXRlICovCisjZGVmaW5lIEJFTEtJTl9TQV9TRVRfUlRTX1JFUVVFU1QJMTEgLyogU2V0IFJUUyBzdGF0ZSAqLworI2RlZmluZSBCRUxLSU5fU0FfU0VUX0JSRUFLX1JFUVVFU1QJMTIgLyogU2V0IEJSRUFLIHN0YXRlICovCisKKyNkZWZpbmUgQkVMS0lOX1NBX1NFVF9GTE9XX0NUUkxfUkVRVUVTVAkxNiAvKiBTZXQgZmxvdyBjb250cm9sIG1vZGUgKi8KKworCisjaWZkZWYgV0hFTl9JX0xFQVJOX1RISVMKKyNkZWZpbmUgQkVMS0lOX1NBX1NFVF9NQUdJQ19SRVFVRVNUCTE3IC8qIEkgZG9uJ3Qga25vdywgcG9zc2libHkgZmx1c2ggKi8KKwkJCQkJICAgLyogKGFsd2F5cyBpbiBXaW5pbml0IHNlcXVlbmNlIGJlZm9yZSBmbG93IGNvbnRyb2wpICovCisjZGVmaW5lIEJFTEtJTl9TQV9SRVNFVCAJCXh4IC8qIFJlc2V0IHRoZSBwb3J0ICovCisjZGVmaW5lIEJFTEtJTl9TQV9HRVRfTU9ERU1fU1RBVFVTCXh4IC8qIEZvcmNlIHJldHVybiBvZiBtb2RlbSBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNlbmRpZgorCisjZGVmaW5lIEJFTEtJTl9TQV9TRVRfUkVRVUVTVF9UWVBFCTB4NDAKKworI2RlZmluZSBCRUxLSU5fU0FfQkFVRChiKQkJKDIzMDQwMC9iKQorCisjZGVmaW5lIEJFTEtJTl9TQV9TVE9QX0JJVFMoYikJCShiLTEpCisKKyNkZWZpbmUgQkVMS0lOX1NBX0RBVEFfQklUUyhiKQkJKGItNSkKKworI2RlZmluZSBCRUxLSU5fU0FfUEFSSVRZX05PTkUJCTAKKyNkZWZpbmUgQkVMS0lOX1NBX1BBUklUWV9FVkVOCQkxCisjZGVmaW5lIEJFTEtJTl9TQV9QQVJJVFlfT0RECQkyCisjZGVmaW5lIEJFTEtJTl9TQV9QQVJJVFlfTUFSSwkJMworI2RlZmluZSBCRUxLSU5fU0FfUEFSSVRZX1NQQUNFCQk0CisKKyNkZWZpbmUgQkVMS0lOX1NBX0ZMT1dfTk9ORQkJMHgwMDAwCS8qIE5vIGZsb3cgY29udHJvbCAqLworI2RlZmluZSBCRUxLSU5fU0FfRkxPV19PQ1RTCQkweDAwMDEJLyogdXNlIENUUyBpbnB1dCB0byB0aHJvdHRsZSBvdXRwdXQgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX0ZMT1dfT0RTUgkJMHgwMDAyCS8qIHVzZSBEU1IgaW5wdXQgdG8gdGhyb3R0bGUgb3V0cHV0ICovCisjZGVmaW5lIEJFTEtJTl9TQV9GTE9XX0lEU1IJCTB4MDAwNAkvKiB1c2UgRFNSIGlucHV0IHRvIGVuYWJsZSByZWNlaXZlICovCisjZGVmaW5lIEJFTEtJTl9TQV9GTE9XX0lEVFIJCTB4MDAwOAkvKiB1c2UgRFRSIG91dHB1dCBmb3IgaW5wdXQgZmxvdyBjb250cm9sICovCisjZGVmaW5lIEJFTEtJTl9TQV9GTE9XX0lSVFMJCTB4MDAxMAkvKiB1c2UgUlRTIG91dHB1dCBmb3IgaW5wdXQgZmxvdyBjb250cm9sICovCisjZGVmaW5lIEJFTEtJTl9TQV9GTE9XX09SVFMJCTB4MDAyMAkvKiB1c2UgUlRTIHRvIGluZGljYXRlIGRhdGEgYXZhaWxhYmxlIHRvIHNlbmQgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX0ZMT1dfRVJSU1VCCQkweDAwNDAJLyogPz8/PyBndWVzcyA/Pz8/IHN1YnN0aXR1dGUgaW5saW5lIGVycm9ycyAqLworI2RlZmluZSBCRUxLSU5fU0FfRkxPV19PWE9OCQkweDAwODAJLyogdXNlIFhPTi9YT0ZGIGZvciBvdXRwdXQgZmxvdyBjb250cm9sICovCisjZGVmaW5lIEJFTEtJTl9TQV9GTE9XX0lYT04JCTB4MDEwMAkvKiB1c2UgWE9OL1hPRkYgZm9yIGlucHV0IGZsb3cgY29udHJvbCAqLworCisvKgorICogSXQgc2VlbXMgdGhhdCB0aGUgaW50ZXJydXB0IHBpcGUgaXMgY2xvc2VseSBtb2RlbGxlZCBhZnRlciB0aGUKKyAqIDE2NTUwIHJlZ2lzdGVyIGxheW91dC4gIFRoaXMgaXMgcHJvYmFibHkgYmVjYXVzZSB0aGUgYWRhcHRlciBjYW4gCisgKiBiZSB1c2VkIGluIGEgIkRPUyIgZW52aXJvbm1lbnQgdG8gc2ltdWxhdGUgYSBzdGFuZGFyZCBoYXJkd2FyZSBwb3J0LgorICovCisjZGVmaW5lIEJFTEtJTl9TQV9MU1JfSU5ERVgJCTIJCS8qIExpbmUgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIEJFTEtJTl9TQV9MU1JfUkRSCQkweDAxCS8qIHJlY2VpdmUgZGF0YSByZWFkeSAqLworI2RlZmluZSBCRUxLSU5fU0FfTFNSX09FCQkweDAyCS8qIG92ZXJydW4gZXJyb3IgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX0xTUl9QRQkJMHgwNAkvKiBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX0xTUl9GRQkJMHgwOAkvKiBmcmFtaW5nIGVycm9yICovCisjZGVmaW5lIEJFTEtJTl9TQV9MU1JfQkkJCTB4MTAJLyogYnJlYWsgaW5kaWNhdG9yICovCisjZGVmaW5lIEJFTEtJTl9TQV9MU1JfVEhFCQkweDIwCS8qIHRyYW5zbWl0IGhvbGRpbmcgcmVnaXN0ZXIgZW1wdHkgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX0xTUl9URQkJMHg0MAkvKiB0cmFuc21pdCByZWdpc3RlciBlbXB0eSAqLworI2RlZmluZSBCRUxLSU5fU0FfTFNSX0VSUgkJMHg4MAkvKiBPRSB8IFBFIHwgRkUgfCBCSSAqLworCisjZGVmaW5lIEJFTEtJTl9TQV9NU1JfSU5ERVgJCTMJCS8qIE1vZGVtIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBCRUxLSU5fU0FfTVNSX0RDVFMJCTB4MDEJLyogRGVsdGEgQ1RTICovCisjZGVmaW5lIEJFTEtJTl9TQV9NU1JfRERTUgkJMHgwMgkvKiBEZWx0YSBEU1IgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX01TUl9EUkkJCTB4MDQJLyogRGVsdGEgUkkgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX01TUl9EQ0QJCTB4MDgJLyogRGVsdGEgQ0QgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX01TUl9DVFMJCTB4MTAJLyogQ3VycmVudCBDVFMgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX01TUl9EU1IJCTB4MjAJLyogQ3VycmVudCBEU1IgKi8KKyNkZWZpbmUgQkVMS0lOX1NBX01TUl9SSQkJMHg0MAkvKiBDdXJyZW50IFJJICovCisjZGVmaW5lIEJFTEtJTl9TQV9NU1JfQ0QJCTB4ODAJLyogQ3VycmVudCBDRCAqLworCisjZW5kaWYgLyogX19MSU5VWF9VU0JfU0VSSUFMX0JTQV9IICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9idXMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9idXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjYxMmMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2J1cy5jCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogVVNCIFNlcmlhbCBDb252ZXJ0ZXIgQnVzIHNwZWNpZmljIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqCTIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorCitzdGF0aWMgaW50IHVzYl9zZXJpYWxfZGV2aWNlX21hdGNoIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKmRyaXZlcjsKKwljb25zdCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCisJLyoKKwkgKiBkcml2ZXJzIGFyZSBhbHJlYWR5IGFzc2lnbmVkIHRvIHBvcnRzIGluIHNlcmlhbF9wcm9iZSBzbyBpdCdzCisJICogYSBzaW1wbGUgY2hlY2sgaGVyZS4KKwkgKi8KKwlwb3J0ID0gdG9fdXNiX3NlcmlhbF9wb3J0KGRldik7CisJaWYgKCFwb3J0KQorCQlyZXR1cm4gMDsKKworCWRyaXZlciA9IHRvX3VzYl9zZXJpYWxfZHJpdmVyKGRydik7CisKKwlpZiAoZHJpdmVyID09IHBvcnQtPnNlcmlhbC0+dHlwZSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGJ1c190eXBlIHVzYl9zZXJpYWxfYnVzX3R5cGUgPSB7CisJLm5hbWUgPQkJInVzYi1zZXJpYWwiLAorCS5tYXRjaCA9CXVzYl9zZXJpYWxfZGV2aWNlX21hdGNoLAorfTsKKworc3RhdGljIGludCB1c2Jfc2VyaWFsX2RldmljZV9wcm9iZSAoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlICpkcml2ZXI7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgbWlub3I7CisKKwlwb3J0ID0gdG9fdXNiX3NlcmlhbF9wb3J0KGRldik7CisJaWYgKCFwb3J0KSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlkcml2ZXIgPSBwb3J0LT5zZXJpYWwtPnR5cGU7CisJaWYgKGRyaXZlci0+cG9ydF9wcm9iZSkgeworCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGRyaXZlci0+b3duZXIpKSB7CisJCQlkZXZfZXJyKGRldiwgIm1vZHVsZSBnZXQgZmFpbGVkLCBleGl0aW5nXG4iKTsKKwkJCXJldHZhbCA9IC1FSU87CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJcmV0dmFsID0gZHJpdmVyLT5wb3J0X3Byb2JlIChwb3J0KTsKKwkJbW9kdWxlX3B1dChkcml2ZXItPm93bmVyKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXhpdDsKKwl9CisKKwltaW5vciA9IHBvcnQtPm51bWJlcjsKKwl0dHlfcmVnaXN0ZXJfZGV2aWNlICh1c2Jfc2VyaWFsX3R0eV9kcml2ZXIsIG1pbm9yLCBkZXYpOworCWRldl9pbmZvKCZwb3J0LT5zZXJpYWwtPmRldi0+ZGV2LCAKKwkJICIlcyBjb252ZXJ0ZXIgbm93IGF0dGFjaGVkIHRvIHR0eVVTQiVkXG4iLAorCQkgZHJpdmVyLT5uYW1lLCBtaW5vcik7CisKK2V4aXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCB1c2Jfc2VyaWFsX2RldmljZV9yZW1vdmUgKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqZHJpdmVyOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJaW50IHJldHZhbCA9IDA7CisJaW50IG1pbm9yOworCisJcG9ydCA9IHRvX3VzYl9zZXJpYWxfcG9ydChkZXYpOworCWlmICghcG9ydCkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkcml2ZXIgPSBwb3J0LT5zZXJpYWwtPnR5cGU7CisJaWYgKGRyaXZlci0+cG9ydF9yZW1vdmUpIHsKKwkJaWYgKCF0cnlfbW9kdWxlX2dldChkcml2ZXItPm93bmVyKSkgeworCQkJZGV2X2VycihkZXYsICJtb2R1bGUgZ2V0IGZhaWxlZCwgZXhpdGluZ1xuIik7CisJCQlyZXR2YWwgPSAtRUlPOworCQkJZ290byBleGl0OworCQl9CisJCXJldHZhbCA9IGRyaXZlci0+cG9ydF9yZW1vdmUgKHBvcnQpOworCQltb2R1bGVfcHV0KGRyaXZlci0+b3duZXIpOworCX0KK2V4aXQ6CisJbWlub3IgPSBwb3J0LT5udW1iZXI7CisJdHR5X3VucmVnaXN0ZXJfZGV2aWNlICh1c2Jfc2VyaWFsX3R0eV9kcml2ZXIsIG1pbm9yKTsKKwlkZXZfaW5mbyhkZXYsICIlcyBjb252ZXJ0ZXIgbm93IGRpc2Nvbm5lY3RlZCBmcm9tIHR0eVVTQiVkXG4iLAorCQkgZHJpdmVyLT5uYW1lLCBtaW5vcik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitpbnQgdXNiX3NlcmlhbF9idXNfcmVnaXN0ZXIoc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKmRldmljZSkKK3sKKwlpbnQgcmV0dmFsOworCisJaWYgKGRldmljZS0+c2hvcnRfbmFtZSkKKwkJZGV2aWNlLT5kcml2ZXIubmFtZSA9IChjaGFyICopZGV2aWNlLT5zaG9ydF9uYW1lOworCWVsc2UKKwkJZGV2aWNlLT5kcml2ZXIubmFtZSA9IChjaGFyICopZGV2aWNlLT5uYW1lOworCWRldmljZS0+ZHJpdmVyLmJ1cyA9ICZ1c2Jfc2VyaWFsX2J1c190eXBlOworCWRldmljZS0+ZHJpdmVyLnByb2JlID0gdXNiX3NlcmlhbF9kZXZpY2VfcHJvYmU7CisJZGV2aWNlLT5kcml2ZXIucmVtb3ZlID0gdXNiX3NlcmlhbF9kZXZpY2VfcmVtb3ZlOworCWRldmljZS0+ZHJpdmVyLm93bmVyID0gZGV2aWNlLT5vd25lcjsKKworCXJldHZhbCA9IGRyaXZlcl9yZWdpc3RlcigmZGV2aWNlLT5kcml2ZXIpOworCisJcmV0dXJuIHJldHZhbDsKK30KKwordm9pZCB1c2Jfc2VyaWFsX2J1c19kZXJlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlICpkZXZpY2UpCit7CisJZHJpdmVyX3VucmVnaXN0ZXIgKCZkZXZpY2UtPmRyaXZlcik7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jb25zb2xlLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY29uc29sZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2N2Y4ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY29uc29sZS5jCkBAIC0wLDAgKzEsMjY0IEBACisvKgorICogVVNCIFNlcmlhbCBDb25zb2xlIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSAtIDIwMDIgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKgkyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICogCisgKiBUaGFua3MgdG8gUmFuZHkgRHVubGFwIGZvciB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIGNvZGUuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworc3RhdGljIGludCBkZWJ1ZzsKKworI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKworc3RydWN0IHVzYmNvbnNfaW5mbyB7CisJaW50CQkJbWFnaWM7CisJaW50CQkJYnJlYWtfZmxhZzsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CSpwb3J0OworfTsKKworc3RhdGljIHN0cnVjdCB1c2Jjb25zX2luZm8gdXNiY29uc19pbmZvOworc3RhdGljIHN0cnVjdCBjb25zb2xlIHVzYmNvbnM7CisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVTQiBTZXJpYWwgY29uc29sZSBkcml2ZXIKKyAqCisgKiBNdWNoIG9mIHRoZSBjb2RlIGhlcmUgaXMgY29waWVkIGZyb20gZHJpdmVycy9jaGFyL3NlcmlhbC5jCisgKiBhbmQgaW1wbGVtZW50cyBhIHBob255IHNlcmlhbCBjb25zb2xlIGluIHRoZSBzYW1lIHdheSB0aGF0CisgKiBzZXJpYWwuYyBkb2VzIHNvIHRoYXQgaW4gY2FzZSBzb21lIHNvZnR3YXJlIHF1ZXJpZXMgaXQsCisgKiBpdCB3aWxsIGdldCB0aGUgc2FtZSByZXN1bHRzLgorICoKKyAqIFRoaW5ncyB0aGF0IGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgd2F5IHRoZSBzZXJpYWwgcG9ydCBjb2RlCisgKiBkb2VzIHRoaW5ncywgaXMgdGhhdCB3ZSBjYWxsIHRoZSBsb3dlciBsZXZlbCB1c2Itc2VyaWFsCisgKiBkcml2ZXIgY29kZSB0byBpbml0aWFsaXplIHRoZSBkZXZpY2UsIGFuZCB3ZSBzZXQgdGhlIGluaXRpYWwKKyAqIGNvbnNvbGUgc3BlZWRzIGJhc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworCisvKgorICogVGhlIHBhcnNpbmcgb2YgdGhlIGNvbW1hbmQgbGluZSB3b3JrcyBleGFjdGx5IGxpa2UgdGhlCisgKiBzZXJpYWwuYyBjb2RlLCBleGNlcHQgdGhhdCB0aGUgc3BlY2lmaWVyIGlzICJ0dHlVU0IiIGluc3RlYWQKKyAqIG9mICJ0dHlTIi4KKyAqLworc3RhdGljIGludCBfX2luaXQgdXNiX2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQoreworCXN0cnVjdCB1c2Jjb25zX2luZm8gKmluZm8gPSAmdXNiY29uc19pbmZvOworCWludCBiYXVkID0gOTYwMDsKKwlpbnQgYml0cyA9IDg7CisJaW50IHBhcml0eSA9ICduJzsKKwlpbnQgZG9mbG93ID0gMDsKKwlpbnQgY2ZsYWcgPSBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOworCWNoYXIgKnM7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCWludCByZXR2YWwgPSAwOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJc3RydWN0IHRlcm1pb3MgKnRlcm1pb3M7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAob3B0aW9ucykgeworCQliYXVkID0gc2ltcGxlX3N0cnRvdWwob3B0aW9ucywgTlVMTCwgMTApOworCQlzID0gb3B0aW9uczsKKwkJd2hpbGUgKCpzID49ICcwJyAmJiAqcyA8PSAnOScpCisJCQlzKys7CisJCWlmICgqcykKKwkJCXBhcml0eSA9ICpzKys7CisJCWlmICgqcykKKwkJCWJpdHMgICA9ICpzKysgLSAnMCc7CisJCWlmICgqcykKKwkJCWRvZmxvdyA9ICgqcysrID09ICdyJyk7CisJfQorCisJLyogYnVpbGQgYSBjZmxhZyBzZXR0aW5nICovCisJc3dpdGNoIChiYXVkKSB7CisJCWNhc2UgMTIwMDoKKwkJCWNmbGFnIHw9IEIxMjAwOworCQkJYnJlYWs7CisJCWNhc2UgMjQwMDoKKwkJCWNmbGFnIHw9IEIyNDAwOworCQkJYnJlYWs7CisJCWNhc2UgNDgwMDoKKwkJCWNmbGFnIHw9IEI0ODAwOworCQkJYnJlYWs7CisJCWNhc2UgMTkyMDA6CisJCQljZmxhZyB8PSBCMTkyMDA7CisJCQlicmVhazsKKwkJY2FzZSAzODQwMDoKKwkJCWNmbGFnIHw9IEIzODQwMDsKKwkJCWJyZWFrOworCQljYXNlIDU3NjAwOgorCQkJY2ZsYWcgfD0gQjU3NjAwOworCQkJYnJlYWs7CisJCWNhc2UgMTE1MjAwOgorCQkJY2ZsYWcgfD0gQjExNTIwMDsKKwkJCWJyZWFrOworCQljYXNlIDk2MDA6CisJCWRlZmF1bHQ6CisJCQljZmxhZyB8PSBCOTYwMDsKKwkJCS8qCisJCQkgKiBTZXQgdGhpcyB0byBhIHNhbmUgdmFsdWUgdG8gcHJldmVudCBhIGRpdmlkZSBlcnJvcgorCQkJICovCisJCQliYXVkICA9IDk2MDA7CisJCQlicmVhazsKKwl9CisJc3dpdGNoIChiaXRzKSB7CisJCWNhc2UgNzoKKwkJCWNmbGFnIHw9IENTNzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQljYXNlIDg6CisJCQljZmxhZyB8PSBDUzg7CisJCQlicmVhazsKKwl9CisJc3dpdGNoIChwYXJpdHkpIHsKKwkJY2FzZSAnbyc6IGNhc2UgJ08nOgorCQkJY2ZsYWcgfD0gUEFST0REOworCQkJYnJlYWs7CisJCWNhc2UgJ2UnOiBjYXNlICdFJzoKKwkJCWNmbGFnIHw9IFBBUkVOQjsKKwkJCWJyZWFrOworCX0KKwljby0+Y2ZsYWcgPSBjZmxhZzsKKworCS8qIGdyYWIgdGhlIGZpcnN0IHNlcmlhbCBwb3J0IHRoYXQgaGFwcGVucyB0byBiZSBjb25uZWN0ZWQgKi8KKwlzZXJpYWwgPSB1c2Jfc2VyaWFsX2dldF9ieV9pbmRleCgwKTsKKwlpZiAoc2VyaWFsID09IE5VTEwpIHsKKwkJLyogbm8gZGV2aWNlIGlzIGNvbm5lY3RlZCB5ZXQsIHNvcnJ5IDooICovCisJCWVyciAoIk5vIFVTQiBkZXZpY2UgY29ubmVjdGVkIHRvIHR0eVVTQjAiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcG9ydCA9IHNlcmlhbC0+cG9ydFswXTsKKwlwb3J0LT50dHkgPSBOVUxMOworCisJaW5mby0+cG9ydCA9IHBvcnQ7CisJIAorCSsrcG9ydC0+b3Blbl9jb3VudDsKKwlpZiAocG9ydC0+b3Blbl9jb3VudCA9PSAxKSB7CisJCS8qIG9ubHkgY2FsbCB0aGUgZGV2aWNlIHNwZWNpZmljIG9wZW4gaWYgdGhpcyAKKwkJICogaXMgdGhlIGZpcnN0IHRpbWUgdGhlIHBvcnQgaXMgb3BlbmVkICovCisJCWlmIChzZXJpYWwtPnR5cGUtPm9wZW4pCisJCQlyZXR2YWwgPSBzZXJpYWwtPnR5cGUtPm9wZW4ocG9ydCwgTlVMTCk7CisJCWVsc2UKKwkJCXJldHZhbCA9IHVzYl9zZXJpYWxfZ2VuZXJpY19vcGVuKHBvcnQsIE5VTEwpOworCQlpZiAocmV0dmFsKQorCQkJcG9ydC0+b3Blbl9jb3VudCA9IDA7CisJfQorCisJaWYgKHJldHZhbCkgeworCQllcnIgKCJjb3VsZCBub3Qgb3BlbiBVU0IgY29uc29sZSBwb3J0Iik7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJaWYgKHNlcmlhbC0+dHlwZS0+c2V0X3Rlcm1pb3MpIHsKKwkJLyogYnVpbGQgdXAgYSBmYWtlIHR0eSBzdHJ1Y3R1cmUgc28gdGhhdCB0aGUgb3BlbiBjYWxsIGhhcyBzb21ldGhpbmcKKwkJICogdG8gbG9vayBhdCB0byBnZXQgdGhlIGNmbGFnIHZhbHVlICovCisJCXR0eSA9IGttYWxsb2MgKHNpemVvZiAoKnR0eSksIEdGUF9LRVJORUwpOworCQlpZiAoIXR0eSkgeworCQkJZXJyICgibm8gbW9yZSBtZW1vcnkiKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCXRlcm1pb3MgPSBrbWFsbG9jIChzaXplb2YgKCp0ZXJtaW9zKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdGVybWlvcykgeworCQkJZXJyICgibm8gbW9yZSBtZW1vcnkiKTsKKwkJCWtmcmVlICh0dHkpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtc2V0ICh0dHksIDB4MDAsIHNpemVvZigqdHR5KSk7CisJCW1lbXNldCAodGVybWlvcywgMHgwMCwgc2l6ZW9mKCp0ZXJtaW9zKSk7CisJCXRlcm1pb3MtPmNfY2ZsYWcgPSBjZmxhZzsKKwkJdHR5LT50ZXJtaW9zID0gdGVybWlvczsKKwkJcG9ydC0+dHR5ID0gdHR5OworCisJCS8qIHNldCB1cCB0aGUgaW5pdGlhbCB0ZXJtaW9zIHNldHRpbmdzICovCisJCXNlcmlhbC0+dHlwZS0+c2V0X3Rlcm1pb3MocG9ydCwgTlVMTCk7CisJCXBvcnQtPnR0eSA9IE5VTEw7CisJCWtmcmVlICh0ZXJtaW9zKTsKKwkJa2ZyZWUgKHR0eSk7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgdXNiX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGNvdW50KQoreworCXN0YXRpYyBzdHJ1Y3QgdXNiY29uc19pbmZvICppbmZvID0gJnVzYmNvbnNfaW5mbzsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gaW5mby0+cG9ydDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCWludCByZXR2YWwgPSAtRU5PREVWOworCisJaWYgKCFwb3J0KQorCQlyZXR1cm47CisJc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCisJaWYgKGNvdW50ID09IDApCisJCXJldHVybjsKKworCWRiZygiJXMgLSBwb3J0ICVkLCAlZCBieXRlKHMpIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIGNvdW50KTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlkYmcgKCIlcyAtIHBvcnQgbm90IG9wZW5lZCIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBwYXNzIG9uIHRvIHRoZSBkcml2ZXIgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIGlmIGl0IGlzIGF2YWlsYWJsZSAqLworCWlmIChzZXJpYWwtPnR5cGUtPndyaXRlKQorCQlyZXR2YWwgPSBzZXJpYWwtPnR5cGUtPndyaXRlKHBvcnQsIGJ1ZiwgY291bnQpOworCWVsc2UKKwkJcmV0dmFsID0gdXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlKHBvcnQsIGJ1ZiwgY291bnQpOworCitleGl0OgorCWRiZygiJXMgLSByZXR1cm4gdmFsdWUgKGlmIHdlIGhhZCBvbmUpOiAlZCIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKworc3RhdGljIHN0cnVjdCBjb25zb2xlIHVzYmNvbnMgPSB7CisJLm5hbWUgPQkJInR0eVVTQiIsCisJLndyaXRlID0JdXNiX2NvbnNvbGVfd3JpdGUsCisJLnNldHVwID0JdXNiX2NvbnNvbGVfc2V0dXAsCisJLmZsYWdzID0JQ09OX1BSSU5UQlVGRkVSLAorCS5pbmRleCA9CS0xLAorfTsKKwordm9pZCB1c2Jfc2VyaWFsX2NvbnNvbGVfaW5pdCAoaW50IHNlcmlhbF9kZWJ1ZywgaW50IG1pbm9yKQoreworCWRlYnVnID0gc2VyaWFsX2RlYnVnOworCisJaWYgKG1pbm9yID09IDApIHsKKwkJLyogCisJCSAqIENhbGwgcmVnaXN0ZXJfY29uc29sZSgpIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGRldmljZSBwbHVnZ2VkCisJCSAqIGluLiAgSWYgd2UgY2FsbCBpdCBlYXJsaWVyLCB0aGVuIHRoZSBjYWxsYmFjayB0bworCQkgKiBjb25zb2xlX3NldHVwKCkgd2lsbCBmYWlsLCBhcyB0aGVyZSBpcyBub3QgYSBkZXZpY2Ugc2VlbiBieQorCQkgKiB0aGUgVVNCIHN1YnN5c3RlbSB5ZXQuCisJCSAqLworCQkvKgorCQkgKiBSZWdpc3RlciBjb25zb2xlLgorCQkgKiBOT1RFUzoKKwkJICogY29uc29sZV9zZXR1cCgpIGlzIGNhbGxlZCAoYmFjaykgaW1tZWRpYXRlbHkgKGZyb20gcmVnaXN0ZXJfY29uc29sZSkuCisJCSAqIGNvbnNvbGVfd3JpdGUoKSBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgZnJvbSByZWdpc3Rlcl9jb25zb2xlIGlmZgorCQkgKiBDT05fUFJJTlRCVUZGRVIgaXMgc2V0IGluIGZsYWdzLgorCQkgKi8KKwkJZGJnICgicmVnaXN0ZXJpbmcgdGhlIFVTQiBzZXJpYWwgY29uc29sZS4iKTsKKwkJcmVnaXN0ZXJfY29uc29sZSgmdXNiY29ucyk7CisJfQorfQorCit2b2lkIHVzYl9zZXJpYWxfY29uc29sZV9leGl0ICh2b2lkKQoreworCXVucmVnaXN0ZXJfY29uc29sZSgmdXNiY29ucyk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTliYjYzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jCkBAIC0wLDAgKzEsNTkxIEBACisvKgorICogU2lsaWNvbiBMYWJvcmF0b3JpZXMgQ1AyMTAxL0NQMjEwMiBVU0IgdG8gUlMyMzIgc2VyaWFsIGFkYXB0b3IgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IENyYWlnIFNoZWxsZXkgKGNyYWlnQG1pY3JvdHJvbi5vcmcudWspCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICoJMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMDMiCisjZGVmaW5lIERSSVZFUl9ERVNDICJTaWxpY29uIExhYnMgQ1AyMTAxL0NQMjEwMiBSUzIzMiBzZXJpYWwgYWRhcHRvciBkcml2ZXIiCisKKy8qCisgKiBGdW5jdGlvbiBQcm90b3R5cGVzCisgKi8KK3N0YXRpYyBpbnQgY3AyMTAxX29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCosIHN0cnVjdCBmaWxlKik7CitzdGF0aWMgdm9pZCBjcDIxMDFfY2xlYW51cChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0Kik7CitzdGF0aWMgdm9pZCBjcDIxMDFfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCosIHN0cnVjdCBmaWxlKik7CitzdGF0aWMgdm9pZCBjcDIxMDFfZ2V0X3Rlcm1pb3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCopOworc3RhdGljIHZvaWQgY3AyMTAxX3NldF90ZXJtaW9zKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQqLCBzdHJ1Y3QgdGVybWlvcyopOworc3RhdGljIHZvaWQgY3AyMTAxX2JyZWFrX2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0KiwgaW50KTsKK3N0YXRpYyBpbnQgY3AyMTAxX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICopOworc3RhdGljIHZvaWQgY3AyMTAxX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsKik7CisKKworc3RhdGljIGludCBkZWJ1ZzsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworCXtVU0JfREVWSUNFKDB4MTBjNCwgMHhlYTYwKSB9LAkvKlNpbGljb24gbGFicyBmYWN0b3J5IGRlZmF1bHQqLworCXtVU0JfREVWSUNFKDB4MTBhYiwgMHgxMGM1KSB9LAkvKlNpZW1lbnMgTUM2MCBDYWJsZSovCisJeyB9IC8qIFRlcm1pbmF0aW5nIEVudHJ5Ki8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY3AyMTAxX2RyaXZlciA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gIkNQMjEwMSIsCisJLnByb2JlCQk9IHVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSB1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlCT0gaWRfdGFibGUsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgY3AyMTAxX2RldmljZSA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQkJPSAiQ1AyMTAxIiwKKwkuaWRfdGFibGUJCT0gaWRfdGFibGUsCisJLm51bV9pbnRlcnJ1cHRfaW4JPSAwLAorCS5udW1fYnVsa19pbgkJPSAwLAorCS5udW1fYnVsa19vdXQJCT0gMCwKKwkubnVtX3BvcnRzCQk9IDEsCisJLm9wZW4JCQk9IGNwMjEwMV9vcGVuLAorCS5jbG9zZQkJCT0gY3AyMTAxX2Nsb3NlLAorCS5icmVha19jdGwJCT0gY3AyMTAxX2JyZWFrX2N0bCwKKwkuc2V0X3Rlcm1pb3MJCT0gY3AyMTAxX3NldF90ZXJtaW9zLAorCS5hdHRhY2gJCQk9IGNwMjEwMV9zdGFydHVwLAorCS5zaHV0ZG93bgkJPSBjcDIxMDFfc2h1dGRvd24sCit9OworCisvKkNvbmZpZyByZXF1ZXN0IHR5cGVzKi8KKyNkZWZpbmUgUkVRVFlQRV9IT1NUX1RPX0RFVklDRQkweDQxCisjZGVmaW5lIFJFUVRZUEVfREVWSUNFX1RPX0hPU1QJMHhjMQorCisvKkNvbmZpZyBTRVQgcmVxdWVzdHMuIFRvIEdFVCwgYWRkIDEgdG8gdGhlIHJlcXVlc3QgbnVtYmVyKi8KKyNkZWZpbmUgQ1AyMTAxX1VBUlQgCQkweDAwCS8qRW5hYmxlIC8gRGlzYWJsZSovCisjZGVmaW5lIENQMjEwMV9CQVVEUkFURQkJMHgwMQkvKihCQVVEX1JBVEVfR0VOX0ZSRVEgLyBiYXVkcmF0ZSkqLworI2RlZmluZSBDUDIxMDFfQklUUwkJMHgwMwkvKjB4KDApKGRhdGEgYml0cykocGFyaXR5KShzdG9wIGJpdHMpKi8KKyNkZWZpbmUgQ1AyMTAxX0JSRUFLCQkweDA1CS8qT24gLyBPZmYqLworI2RlZmluZSBDUDIxMDFfRFRSUlRTCQkweDA3CS8qMTAxIC8gMjAyICA/Pz8qLworI2RlZmluZSBDUDIxMDFfQ09ORklHXzE2CTB4MTMJLyoxNiBieXRlcyBvZiBjb25maWcgZGF0YSA/Pz8qLworI2RlZmluZSBDUDIxMDFfQ09ORklHXzYJCTB4MTkJLyo2IGJ5dGVzIG9mIGNvbmZpZyBkYXRhID8/PyovCisKKy8qQ1AyMTAxX1VBUlQqLworI2RlZmluZSBVQVJUX0VOQUJMRQkJMHgwMDAxCisjZGVmaW5lIFVBUlRfRElTQUJMRQkJMHgwMDAwCisKKy8qQ1AyMTAxX0JBVURSQVRFKi8KKyNkZWZpbmUgQkFVRF9SQVRFX0dFTl9GUkVRCTB4Mzg0MDAwCisKKy8qQ1AyMTAxX0JJVFMqLworI2RlZmluZSBCSVRTX0RBVEFfTUFTSwkJMFgwZjAwCisjZGVmaW5lIEJJVFNfREFUQV82CQkwWDA2MDAKKyNkZWZpbmUgQklUU19EQVRBXzcJCTBYMDcwMAorI2RlZmluZSBCSVRTX0RBVEFfOAkJMFgwODAwCisjZGVmaW5lIEJJVFNfREFUQV85CQkwWDA5MDAKKworI2RlZmluZSBCSVRTX1BBUklUWV9NQVNLCTB4MDBmMAorI2RlZmluZSBCSVRTX1BBUklUWV9OT05FCTB4MDAwMAorI2RlZmluZSBCSVRTX1BBUklUWV9PREQJCTB4MDAxMAorI2RlZmluZSBCSVRTX1BBUklUWV9FVkVOCTB4MDAyMAorI2RlZmluZSBCSVRTX1BBUklUWV9NQVJLCTB4MDAzMAorI2RlZmluZSBCSVRTX1BBUklUWV9TUEFDRQkweDAwNDAKKworI2RlZmluZSBCSVRTX1NUT1BfTUFTSwkJMHgwMDBmCisjZGVmaW5lIEJJVFNfU1RPUF8xCQkweDAwMDAKKyNkZWZpbmUgQklUU19TVE9QXzFfNQkJMHgwMDAxCisjZGVmaW5lIEJJVFNfU1RPUF8yCQkweDAwMDIKKyNkZWZpbmUgQlJFQUtfT04JCTB4MDAwMAorI2RlZmluZSBCUkVBS19PRkYJCTB4MDAwMQorCisKK3N0YXRpYyBpbnQgY3AyMTAxX2dldF9jb25maWcoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCogcG9ydCwgdTggcmVxdWVzdCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXVuc2lnbmVkIGNoYXIgYnVmWzRdOworCXVuc2lnbmVkIGludCB2YWx1ZTsKKwlpbnQgcmVzdWx0LCBpOworCisJLypGb3IgZ2V0IHJlcXVlc3RzLCB0aGUgcmVxdWVzdCBudW1iZXIgbXVzdCBiZSBpbmNyZW1lbnRlZCovCisJcmVxdWVzdCsrOworCisJLypJc3N1ZSB0aGUgcmVxdWVzdCwgYXR0ZW1wdGluZyB0byByZWFkIDQgYnl0ZXMqLworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsdXNiX3JjdmN0cmxwaXBlIChzZXJpYWwtPmRldiwgMCksCisJCQkJcmVxdWVzdCwgUkVRVFlQRV9ERVZJQ0VfVE9fSE9TVCwgMHgwMDAwLAorCQkJCTAsIGJ1ZiwgNCwgMzAwKTsKKworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gVW5hYmxlIHRvIHNlbmQgY29uZmlnIHJlcXVlc3QsICIKKwkJCQkicmVxdWVzdD0weCV4IHJlc3VsdD0lZFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHJlcXVlc3QsIHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLypBc3NlbWJsZSBlYWNoIGJ5dGUgcmVhZCBpbnRvIGFuIGludGVnZXIgdmFsdWUqLworCXZhbHVlID0gMDsKKwlmb3IgKGk9MDsgaTw0ICYmIGk8cmVzdWx0OyBpKyspCisJCXZhbHVlIHw9IChidWZbaV0gPDwgKGkgKiA4KSk7CisKKwlkYmcoICIgJXMgLSByZXF1ZXN0PTB4JXggcmVzdWx0PSVkIHZhbHVlPTB4JXgiLAorCQkJX19GVU5DVElPTl9fLCByZXF1ZXN0LCByZXN1bHQsIHZhbHVlKTsKKworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIGludCBjcDIxMDFfc2V0X2NvbmZpZyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0KiBwb3J0LCB1OCByZXF1ZXN0LCB1MTYgdmFsdWUpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQgcmVzdWx0OworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQlyZXF1ZXN0LCBSRVFUWVBFX0hPU1RfVE9fREVWSUNFLCB2YWx1ZSwKKwkJCTAsIE5VTEwsIDAsIDMwMCk7CisKKwlpZiAocmVzdWx0IDwwKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gVW5hYmxlIHRvIHNlbmQgY29uZmlnIHJlcXVlc3QsICIKKwkJCQkicmVxdWVzdD0weCV4IHZhbHVlPTB4JXggcmVzdWx0PSVkXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgcmVxdWVzdCwgdmFsdWUsIHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJZGJnKCIgJXMgLSByZXF1ZXN0PTB4JXggdmFsdWU9MHgleCByZXN1bHQ9JWQiLAorCQkJX19GVU5DVElPTl9fLCByZXF1ZXN0LCB2YWx1ZSwgcmVzdWx0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNwMjEwMV9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChjcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfVUFSVCwgVUFSVF9FTkFCTEUpKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gVW5hYmxlIHRvIGVuYWJsZSBVQVJUXG4iLAorCQkJCV9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRVBST1RPOworCX0KKworCS8qIFN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCisJdXNiX2ZpbGxfYnVsa191cmIgKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKKwkJCXVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCXNlcmlhbC0+dHlwZS0+cmVhZF9idWxrX2NhbGxiYWNrLAorCQkJcG9ydCk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXN1bHQpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCAiCisJCQkJImVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLypDb25maWd1cmUgdGhlIHRlcm1pb3Mgc3RydWN0dXJlKi8KKwljcDIxMDFfZ2V0X3Rlcm1pb3MocG9ydCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3AyMTAxX2NsZWFudXAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHNlcmlhbC0+ZGV2KSB7CisJCS8qIHNodXRkb3duIGFueSBidWxrIHJlYWRzIHRoYXQgbWlnaHQgYmUgZ29pbmcgb24gKi8KKwkJaWYgKHNlcmlhbC0+bnVtX2J1bGtfb3V0KQorCQkJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJCWlmIChzZXJpYWwtPm51bV9idWxrX2luKQorCQkJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNwMjEwMV9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLyogc2h1dGRvd24gb3VyIHVyYnMgKi8KKwlkYmcoIiVzIC0gc2h1dHRpbmcgZG93biB1cmJzIiwgX19GVU5DVElPTl9fKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+d3JpdGVfdXJiKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworCisJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX1VBUlQsIFVBUlRfRElTQUJMRSk7Cit9CisKKy8qIGNwMjEwMV9nZXRfdGVybWlvcyovCisvKiBSZWFkcyB0aGUgYmF1ZCByYXRlLCBkYXRhIGJpdHMsIHBhcml0eSBhbmQgc3RvcCBiaXRzIGZyb20gdGhlIGRldmljZSovCisvKiBDb3JyZWN0cyBhbnkgdW5zdXBwb3J0ZWQgdmFsdWVzKi8KKy8qIENvbmZpZ3VyZXMgdGhlIHRlcm1pb3Mgc3RydWN0dXJlIHRvIHJlZmxlY3QgdGhlIHN0YXRlIG9mIHRoZSBkZXZpY2UqLworc3RhdGljIHZvaWQgY3AyMTAxX2dldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGludCBjZmxhZzsKKwlpbnQgYmF1ZDsKKwlpbnQgYml0czsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCghcG9ydC0+dHR5KSB8fCAoIXBvcnQtPnR0eS0+dGVybWlvcykpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSBzdHJ1Y3R1cmVzIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKwljZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKworCWJhdWQgPSBjcDIxMDFfZ2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQkFVRFJBVEUpOworCS8qQ29udmVydCB0byBiYXVkcmF0ZSovCisJaWYgKGJhdWQpCisJCWJhdWQgPSBCQVVEX1JBVEVfR0VOX0ZSRVEgLyBiYXVkOworCisJZGJnKCIlcyAtIGJhdWQgcmF0ZSA9ICVkIiwgX19GVU5DVElPTl9fLCBiYXVkKTsKKwljZmxhZyAmPSB+Q0JBVUQ7CisJc3dpdGNoIChiYXVkKSB7CisJCS8qIFRoZSBiYXVkIHJhdGVzIHdoaWNoIGFyZSBjb21tZW50ZWQgb3V0IGJlbG93CisJCSAqIGFwcGVhciB0byBiZSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZQorCQkgKiBidXQgYXJlIG5vbi1zdGFuZGFyZAorCQkgKi8KKwkJY2FzZSA2MDA6CWNmbGFnIHw9IEI2MDA7CQlicmVhazsKKwkJY2FzZSAxMjAwOgljZmxhZyB8PSBCMTIwMDsJCWJyZWFrOworCQljYXNlIDE4MDA6CWNmbGFnIHw9IEIxODAwOwkJYnJlYWs7CisJCWNhc2UgMjQwMDoJY2ZsYWcgfD0gQjI0MDA7CQlicmVhazsKKwkJY2FzZSA0ODAwOgljZmxhZyB8PSBCNDgwMDsJCWJyZWFrOworCQkvKmNhc2UgNzIwMDoJY2ZsYWcgfD0gQjcyMDA7CQlicmVhazsqLworCQljYXNlIDk2MDA6CWNmbGFnIHw9IEI5NjAwOwkJYnJlYWs7CisJCS8qY2FzZSAxNDQwMDoJY2ZsYWcgfD0gQjE0NDAwOwlicmVhazsqLworCQljYXNlIDE5MjAwOgljZmxhZyB8PSBCMTkyMDA7CWJyZWFrOworCQkvKmNhc2UgMjg4MDA6CWNmbGFnIHw9IEIyODgwMDsJYnJlYWs7Ki8KKwkJY2FzZSAzODQwMDoJY2ZsYWcgfD0gQjM4NDAwOwlicmVhazsKKwkJLypjYXNlIDU1ODU0OgljZmxhZyB8PSBCNTUwNTQ7CWJyZWFrOyovCisJCWNhc2UgNTc2MDA6CWNmbGFnIHw9IEI1NzYwMDsJYnJlYWs7CisJCWNhc2UgMTE1MjAwOgljZmxhZyB8PSBCMTE1MjAwOwlicmVhazsKKwkJLypjYXNlIDEyNzExNzoJY2ZsYWcgfD0gQjEyNzExNzsJYnJlYWs7Ki8KKwkJY2FzZSAyMzA0MDA6CWNmbGFnIHw9IEIyMzA0MDA7CWJyZWFrOworCQljYXNlIDQ2MDgwMDoJY2ZsYWcgfD0gQjQ2MDgwMDsJYnJlYWs7CisJCWNhc2UgOTIxNjAwOgljZmxhZyB8PSBCOTIxNjAwOwlicmVhazsKKwkJLypjYXNlIDM2ODY0MDA6CWNmbGFnIHw9IEIzNjg2NDAwOwlicmVhazsqLworCQlkZWZhdWx0OgorCQkJZGJnKCIlcyAtIEJhdWQgcmF0ZSBpcyBub3Qgc3VwcG9ydGVkLCAiCisJCQkJCSJ1c2luZyA5NjAwIGJhdWQiLCBfX0ZVTkNUSU9OX18pOworCQkJY2ZsYWcgfD0gQjk2MDA7CisJCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQkFVRFJBVEUsCisJCQkJCShCQVVEX1JBVEVfR0VOX0ZSRVEvOTYwMCkpOworCQkJYnJlYWs7CisJfQorCisJYml0cyA9IGNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTKTsKKwljZmxhZyAmPSB+Q1NJWkU7CisJc3dpdGNoKGJpdHMgJiBCSVRTX0RBVEFfTUFTSykgeworCQljYXNlIEJJVFNfREFUQV82OgorCQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDYiLCBfX0ZVTkNUSU9OX18pOworCQkJY2ZsYWcgfD0gQ1M2OworCQkJYnJlYWs7CisJCWNhc2UgQklUU19EQVRBXzc6CisJCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gNyIsIF9fRlVOQ1RJT05fXyk7CisJCQljZmxhZyB8PSBDUzc7CisJCQlicmVhazsKKwkJY2FzZSBCSVRTX0RBVEFfODoKKwkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA4IiwgX19GVU5DVElPTl9fKTsKKwkJCWNmbGFnIHw9IENTODsKKwkJCWJyZWFrOworCQljYXNlIEJJVFNfREFUQV85OgorCQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDkgKG5vdCBzdXBwb3J0ZWQsICIKKwkJCQkJInVzaW5nIDggZGF0YSBiaXRzKSIsIF9fRlVOQ1RJT05fXyk7CisJCQljZmxhZyB8PSBDUzg7CisJCQliaXRzICY9IH5CSVRTX0RBVEFfTUFTSzsKKwkJCWJpdHMgfD0gQklUU19EQVRBXzg7CisJCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgYml0cyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRiZygiJXMgLSBVbmtub3duIG51bWJlciBvZiBkYXRhIGJpdHMsICIKKwkJCQkJInVzaW5nIDgiLCBfX0ZVTkNUSU9OX18pOworCQkJY2ZsYWcgfD0gQ1M4OworCQkJYml0cyAmPSB+QklUU19EQVRBX01BU0s7CisJCQliaXRzIHw9IEJJVFNfREFUQV84OworCQkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsIGJpdHMpOworCQkJYnJlYWs7CisJfQorCisJc3dpdGNoKGJpdHMgJiBCSVRTX1BBUklUWV9NQVNLKSB7CisJCWNhc2UgQklUU19QQVJJVFlfTk9ORToKKwkJCWRiZygiJXMgLSBwYXJpdHkgPSBOT05FIiwgX19GVU5DVElPTl9fKTsKKwkJCWNmbGFnICY9IH5QQVJFTkI7CisJCQlicmVhazsKKwkJY2FzZSBCSVRTX1BBUklUWV9PREQ6CisJCQlkYmcoIiVzIC0gcGFyaXR5ID0gT0REIiwgX19GVU5DVElPTl9fKTsKKwkJCWNmbGFnIHw9IChQQVJFTkJ8UEFST0REKTsKKwkJCWJyZWFrOworCQljYXNlIEJJVFNfUEFSSVRZX0VWRU46CisJCQlkYmcoIiVzIC0gcGFyaXR5ID0gRVZFTiIsIF9fRlVOQ1RJT05fXyk7CisJCQljZmxhZyAmPSB+UEFST0REOworCQkJY2ZsYWcgfD0gUEFSRU5COworCQkJYnJlYWs7CisJCWNhc2UgQklUU19QQVJJVFlfTUFSSzoKKwkJCWRiZygiJXMgLSBwYXJpdHkgPSBNQVJLIChub3Qgc3VwcG9ydGVkLCAiCisJCQkJCSJkaXNhYmxpbmcgcGFyaXR5KSIsIF9fRlVOQ1RJT05fXyk7CisJCQljZmxhZyAmPSB+UEFSRU5COworCQkJYml0cyAmPSB+QklUU19QQVJJVFlfTUFTSzsKKwkJCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCBiaXRzKTsKKwkJCWJyZWFrOworCQljYXNlIEJJVFNfUEFSSVRZX1NQQUNFOgorCQkJZGJnKCIlcyAtIHBhcml0eSA9IFNQQUNFIChub3Qgc3VwcG9ydGVkLCAiCisJCQkJCSJkaXNhYmxpbmcgcGFyaXR5KSIsIF9fRlVOQ1RJT05fXyk7CisJCQljZmxhZyAmPSB+UEFSRU5COworCQkJYml0cyAmPSB+QklUU19QQVJJVFlfTUFTSzsKKwkJCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCBiaXRzKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGJnKCIlcyAtIFVua25vd24gcGFyaXR5IG1vZGUsICIKKwkJCQkJImRpc2FibGluZyBwYXJpdHkiLCBfX0ZVTkNUSU9OX18pOworCQkJY2ZsYWcgJj0gflBBUkVOQjsKKwkJCWJpdHMgJj0gfkJJVFNfUEFSSVRZX01BU0s7CisJCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgYml0cyk7CisJCQlicmVhazsKKwl9CisKKwljZmxhZyAmPSB+Q1NUT1BCOworCXN3aXRjaChiaXRzICYgQklUU19TVE9QX01BU0spIHsKKwkJY2FzZSBCSVRTX1NUT1BfMToKKwkJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAxIiwgX19GVU5DVElPTl9fKTsKKwkJCWJyZWFrOworCQljYXNlIEJJVFNfU1RPUF8xXzU6CisJCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMS41IChub3Qgc3VwcG9ydGVkLCAiCisJCQkJCSJ1c2luZyAxIHN0b3AgYml0IiwgX19GVU5DVElPTl9fKTsKKwkJCWJpdHMgJj0gfkJJVFNfU1RPUF9NQVNLOworCQkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsIGJpdHMpOworCQkJYnJlYWs7CisJCWNhc2UgQklUU19TVE9QXzI6CisJCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMiIsIF9fRlVOQ1RJT05fXyk7CisJCQljZmxhZyB8PSBDU1RPUEI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRiZygiJXMgLSBVbmtub3duIG51bWJlciBvZiBzdG9wIGJpdHMsICIKKwkJCQkJInVzaW5nIDEgc3RvcCBiaXQiLCBfX0ZVTkNUSU9OX18pOworCQkJYml0cyAmPSB+QklUU19TVE9QX01BU0s7CisJCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgYml0cyk7CisJCQlicmVhazsKKwl9CisKKwlwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgPSBjZmxhZzsKK30KKworc3RhdGljIHZvaWQgY3AyMTAxX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQlzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJdW5zaWduZWQgaW50IGNmbGFnLCBvbGRfY2ZsYWc9MDsKKwlpbnQgYmF1ZD0wOworCWludCBiaXRzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoKCFwb3J0LT50dHkpIHx8ICghcG9ydC0+dHR5LT50ZXJtaW9zKSkgeworCQlkYmcoIiVzIC0gbm8gdHR5IHN0cnVjdHVyZXMiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCWNmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCisJLyogY2hlY2sgdGhhdCB0aGV5IHJlYWxseSB3YW50IHVzIHRvIGNoYW5nZSBzb21ldGhpbmcgKi8KKwlpZiAob2xkX3Rlcm1pb3MpIHsKKwkJaWYgKChjZmxhZyA9PSBvbGRfdGVybWlvcy0+Y19jZmxhZykgJiYKKwkJCQkoUkVMRVZBTlRfSUZMQUcocG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnKQorCQkJCT09IFJFTEVWQU5UX0lGTEFHKG9sZF90ZXJtaW9zLT5jX2lmbGFnKSkpIHsKKwkJCWRiZygiJXMgLSBub3RoaW5nIHRvIGNoYW5nZS4uLiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm47CisJCX0KKworCQlvbGRfY2ZsYWcgPSBvbGRfdGVybWlvcy0+Y19jZmxhZzsKKwl9CisKKwkvKiBJZiB0aGUgYmF1ZCByYXRlIGlzIHRvIGJlIHVwZGF0ZWQqLworCWlmICgoY2ZsYWcgJiBDQkFVRCkgIT0gKG9sZF9jZmxhZyAmIENCQVVEKSkgeworCQlzd2l0Y2ggKGNmbGFnICYgQ0JBVUQpIHsKKwkJCS8qIFRoZSBiYXVkIHJhdGVzIHdoaWNoIGFyZSBjb21tZW50ZWQgb3V0IGJlbG93CisJCQkgKiBhcHBlYXIgdG8gYmUgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UKKwkJCSAqIGJ1dCBhcmUgbm9uLXN0YW5kYXJkCisJCQkgKi8KKwkJCWNhc2UgQjA6CWJhdWQgPSAwOwlicmVhazsKKwkJCWNhc2UgQjYwMDoJYmF1ZCA9IDYwMDsJYnJlYWs7CisJCQljYXNlIEIxMjAwOgliYXVkID0gMTIwMDsJYnJlYWs7CisJCQljYXNlIEIxODAwOgliYXVkID0gMTgwMDsJYnJlYWs7CisJCQljYXNlIEIyNDAwOgliYXVkID0gMjQwMDsJYnJlYWs7CisJCQljYXNlIEI0ODAwOgliYXVkID0gNDgwMDsJYnJlYWs7CisJCQkvKmNhc2UgQjcyMDA6CWJhdWQgPSA3MjAwOwlicmVhazsqLworCQkJY2FzZSBCOTYwMDoJYmF1ZCA9IDk2MDA7CWJyZWFrOworCQkJLyphc2UgQjE0NDAwOgliYXVkID0gMTQ0MDA7CWJyZWFrOyovCisJCQljYXNlIEIxOTIwMDoJYmF1ZCA9IDE5MjAwOwlicmVhazsKKwkJCS8qY2FzZSBCMjg4MDA6CWJhdWQgPSAyODgwMDsJYnJlYWs7Ki8KKwkJCWNhc2UgQjM4NDAwOgliYXVkID0gMzg0MDA7CWJyZWFrOworCQkJLypjYXNlIEI1NTg1NDoJYmF1ZCA9IDU1MDU0OwlicmVhazsqLworCQkJY2FzZSBCNTc2MDA6CWJhdWQgPSA1NzYwMDsJYnJlYWs7CisJCQljYXNlIEIxMTUyMDA6CWJhdWQgPSAxMTUyMDA7CWJyZWFrOworCQkJLypjYXNlIEIxMjcxMTc6CWJhdWQgPSAxMjcxMTc7CWJyZWFrOyovCisJCQljYXNlIEIyMzA0MDA6CWJhdWQgPSAyMzA0MDA7CWJyZWFrOworCQkJY2FzZSBCNDYwODAwOgliYXVkID0gNDYwODAwOwlicmVhazsKKwkJCWNhc2UgQjkyMTYwMDoJYmF1ZCA9IDkyMTYwMDsJYnJlYWs7CisJCQkvKmNhc2UgQjM2ODY0MDA6CWJhdWQgPSAzNjg2NDAwOwlicmVhazsqLworCQkJZGVmYXVsdDoKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJjcDIxMDEgZHJpdmVyIGRvZXMgbm90ICIKKwkJCQkJInN1cHBvcnQgdGhlIGJhdWRyYXRlIHJlcXVlc3RlZFxuIik7CisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoYmF1ZCkgeworCQkJZGJnKCIlcyAtIFNldHRpbmcgYmF1ZCByYXRlIHRvICVkIGJhdWQiLCBfX0ZVTkNUSU9OX18sCisJCQkJCWJhdWQpOworCQkJaWYgKGNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CQVVEUkFURSwKKwkJCQkJCShCQVVEX1JBVEVfR0VOX0ZSRVEgLyBiYXVkKSkpCisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiQmF1ZCByYXRlIHJlcXVlc3RlZCBub3QgIgorCQkJCQkJInN1cHBvcnRlZCBieSBkZXZpY2VcbiIpOworCQl9CisJfQorCisJLypJZiB0aGUgbnVtYmVyIG9mIGRhdGEgYml0cyBpcyB0byBiZSB1cGRhdGVkKi8KKwlpZiAoKGNmbGFnICYgQ1NJWkUpICE9IChvbGRfY2ZsYWcgJiBDU0laRSkpIHsKKwkJYml0cyA9IGNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTKTsKKwkJYml0cyAmPSB+QklUU19EQVRBX01BU0s7CisJCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgeworCQkJY2FzZSBDUzY6CisJCQkJYml0cyB8PSBCSVRTX0RBVEFfNjsKKwkJCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gNiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJYnJlYWs7CisJCQljYXNlIENTNzoKKwkJCQliaXRzIHw9IEJJVFNfREFUQV83OworCQkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA3IiwgX19GVU5DVElPTl9fKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ1M4OgorCQkJCWJpdHMgfD0gQklUU19EQVRBXzg7CisJCQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDgiLCBfX0ZVTkNUSU9OX18pOworCQkJCWJyZWFrOworCQkJLypjYXNlIENTOToKKwkJCSAJYml0cyB8PSBCSVRTX0RBVEFfOTsKKwkJCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gOSIsIF9fRlVOQ1RJT05fXyk7CisJCQkJYnJlYWs7Ki8KKwkJCWRlZmF1bHQ6CisJCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiY3AyMTAxIGRyaXZlciBkb2VzIG5vdCAiCisJCQkJCSJzdXBwb3J0IHRoZSBudW1iZXIgb2YgYml0cyByZXF1ZXN0ZWQsIgorCQkJCQkiIHVzaW5nIDggYml0IG1vZGVcbiIpOworCQkJCWJpdHMgfD0gQklUU19EQVRBXzg7CisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCBiaXRzKSkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIk51bWJlciBvZiBkYXRhIGJpdHMgcmVxdWVzdGVkICIKKwkJCQkJIm5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlXG4iKTsKKwl9CisKKwlpZiAoKGNmbGFnICYgKFBBUkVOQnxQQVJPREQpKSAhPSAob2xkX2NmbGFnICYgKFBBUkVOQnxQQVJPREQpKSkgeworCQliaXRzID0gY3AyMTAxX2dldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMpOworCQliaXRzICY9IH5CSVRTX1BBUklUWV9NQVNLOworCQlpZiAoY2ZsYWcgJiBQQVJFTkIpIHsKKwkJCWlmIChjZmxhZyAmIFBBUk9ERCkgeworCQkJCWJpdHMgfD0gQklUU19QQVJJVFlfT0REOworCQkJCWRiZygiJXMgLSBwYXJpdHkgPSBPREQiLCBfX0ZVTkNUSU9OX18pOworCQkJfSBlbHNlIHsKKwkJCQliaXRzIHw9IEJJVFNfUEFSSVRZX0VWRU47CisJCQkJZGJnKCIlcyAtIHBhcml0eSA9IEVWRU4iLCBfX0ZVTkNUSU9OX18pOworCQkJfQorCQl9CisJCWlmIChjcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgYml0cykpCisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJQYXJpdHkgbW9kZSBub3Qgc3VwcG9ydGVkICIKKwkJCQkJImJ5IGRldmljZVxuIik7CisJfQorCisJaWYgKChjZmxhZyAmIENTVE9QQikgIT0gKG9sZF9jZmxhZyAmIENTVE9QQikpIHsKKwkJYml0cyA9IGNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTKTsKKwkJYml0cyAmPSB+QklUU19TVE9QX01BU0s7CisJCWlmIChjZmxhZyAmIENTVE9QQikgeworCQkJYml0cyB8PSBCSVRTX1NUT1BfMjsKKwkJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAyIiwgX19GVU5DVElPTl9fKTsKKwkJfSBlbHNlIHsKKwkJCWJpdHMgfD0gQklUU19TVE9QXzE7CisJCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMSIsIF9fRlVOQ1RJT05fXyk7CisJCX0KKwkJaWYgKGNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCBiaXRzKSkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIk51bWJlciBvZiBzdG9wIGJpdHMgcmVxdWVzdGVkICIKKwkJCQkJIm5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNwMjEwMV9icmVha19jdGwgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkKK3sKKwl1MTYgc3RhdGU7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwlpZiAoYnJlYWtfc3RhdGUgPT0gMCkKKwkJc3RhdGUgPSBCUkVBS19PRkY7CisJZWxzZQorCQlzdGF0ZSA9IEJSRUFLX09OOworCWRiZygiJXMgLSB0dXJuaW5nIGJyZWFrICVzIiwgX19GVU5DVElPTl9fLAorCQkJc3RhdGU9PUJSRUFLX09GRiA/ICJvZmYiIDogIm9uIik7CisJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JSRUFLLCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgY3AyMTAxX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJLypDUDIxMDEgYnVmZmVycyBiZWhhdmUgc3RyYW5nZWx5IHVubGVzcyBkZXZpY2UgaXMgcmVzZXQqLworCXVzYl9yZXNldF9kZXZpY2Uoc2VyaWFsLT5kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcDIxMDFfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IGk7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCS8qIHN0b3AgcmVhZHMgYW5kIHdyaXRlcyBvbiBhbGwgcG9ydHMgKi8KKwlmb3IgKGk9MDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJY3AyMTAxX2NsZWFudXAoc2VyaWFsLT5wb3J0W2ldKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGNwMjEwMV9pbml0ICh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZjcDIxMDFfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOyAvKkZhaWxlZCB0byByZWdpc3RlciovCisKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmNwMjEwMV9kcml2ZXIpOworCWlmIChyZXR2YWwpIHsKKwkJLypGYWlsZWQgdG8gcmVnaXN0ZXIqLworCQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmNwMjEwMV9kZXZpY2UpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qU3VjY2VzcyovCisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3AyMTAxX2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZjcDIxMDFfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZjcDIxMDFfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoY3AyMTAxX2luaXQpOworbW9kdWxlX2V4aXQoY3AyMTAxX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgdmVyYm9zZSBkZWJ1Z2dpbmcgbWVzc2FnZXMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeWJlcmphY2suYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeWJlcmphY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmEyMDRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5YmVyamFjay5jCkBAIC0wLDAgKzEsNTE0IEBACisvKgorICogIFJFSU5FUiBTQ1QgY3liZXJKYWNrIHBpbnBhZC9lLWNvbSBVU0IgQ2hpcGNhcmQgUmVhZGVyIERyaXZlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgIFJFSU5FUiBTQ1QKKyAqICBBdXRob3I6IE1hdHRoaWFzIEJydWVzdGxlCisgKgorICogIENvbnRhY3Q6IHN1cHBvcnRAcmVpbmVyLXNjdC5jb20gKHNlZSBNQUlOVEFJTkVSUykKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGxhcmdlbHkgZGVyaXZlZCBmcm9tIHdvcmsgYnkgdGhlIGxpbnV4LXVzYiBncm91cAorICogIGFuZCBhc3NvY2lhdGVkIHNvdXJjZSBmaWxlcy4gIFBsZWFzZSBzZWUgdGhlIHVzYi9zZXJpYWwgZmlsZXMgZm9yCisgKiAgaW5kaXZpZHVhbCBjcmVkaXRzIGFuZCBjb3B5cmlnaHRzLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGFua3MgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkgZm9yIGhpcyBoZWxwIGFuZAorICogIHBhdGllbmNlLgorICoKKyAqICBJbiBjYXNlIG9mIHByb2JsZW1zLCBwbGVhc2Ugd3JpdGUgdG8gdGhlIGNvbnRhY3QgZS1tYWlsIGFkZHJlc3MKKyAqICBtZW50aW9uZWQgYWJvdmUuCisgKgorICogIFBsZWFzZSBub3RlIHRoYXQgbGF0ZXIgbW9kZWxzIG9mIHRoZSBjeWJlcmphY2sgcmVhZGVyIGZhbWlseSBhcmUKKyAqICBzdXBwb3J0ZWQgYnkgYSBsaWJ1c2ItYmFzZWQgdXNlcnNwYWNlIGRldmljZSBkcml2ZXIuCisgKgorICogIEhvbWVwYWdlOiBodHRwOi8vd3d3LnJlaW5lci1zY3QuZGUvc3VwcG9ydC90cmVpYmVyX2N5YmVyamFjay5waHAjbGludXgKKyAqLworCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKworI2RlZmluZSBDWUJFUkpBQ0tfTE9DQUxfQlVGX1NJWkUgMzIKKworc3RhdGljIGludCBkZWJ1ZzsKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuMDEiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIk1hdHRoaWFzIEJydWVzdGxlIgorI2RlZmluZSBEUklWRVJfREVTQyAiUkVJTkVSIFNDVCBjeWJlckphY2sgcGlucGFkL2UtY29tIFVTQiBDaGlwY2FyZCBSZWFkZXIgRHJpdmVyIgorCisKKyNkZWZpbmUgQ1lCRVJKQUNLX1ZFTkRPUl9JRAkweDBDNEIKKyNkZWZpbmUgQ1lCRVJKQUNLX1BST0RVQ1RfSUQJMHgwMTAwCisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgY3liZXJqYWNrX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQgY3liZXJqYWNrX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIGN5YmVyamFja19vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBjeWJlcmphY2tfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgY3liZXJqYWNrX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CitzdGF0aWMgaW50IGN5YmVyamFja193cml0ZV9yb29tKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ICk7CitzdGF0aWMgdm9pZCBjeWJlcmphY2tfcmVhZF9pbnRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgY3liZXJqYWNrX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBjeWJlcmphY2tfd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoQ1lCRVJKQUNLX1ZFTkRPUl9JRCwgQ1lCRVJKQUNLX1BST0RVQ1RfSUQpIH0sCisJeyB9CQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY3liZXJqYWNrX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiY3liZXJqYWNrIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGN5YmVyamFja19kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiUmVpbmVyIFNDVCBDeWJlcmphY2sgVVNCIGNhcmQgcmVhZGVyIiwKKwkuc2hvcnRfbmFtZSA9CQkiY3liZXJqYWNrIiwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGUsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQkxLAorCS5udW1fYnVsa19pbiA9CQkxLAorCS5udW1fYnVsa19vdXQgPQkJMSwKKwkubnVtX3BvcnRzID0JCTEsCisJLmF0dGFjaCA9CQljeWJlcmphY2tfc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkJY3liZXJqYWNrX3NodXRkb3duLAorCS5vcGVuID0JCQljeWJlcmphY2tfb3BlbiwKKwkuY2xvc2UgPQkJY3liZXJqYWNrX2Nsb3NlLAorCS53cml0ZSA9CQljeWJlcmphY2tfd3JpdGUsCisJLndyaXRlX3Jvb20gPQljeWJlcmphY2tfd3JpdGVfcm9vbSwKKwkucmVhZF9pbnRfY2FsbGJhY2sgPQljeWJlcmphY2tfcmVhZF9pbnRfY2FsbGJhY2ssCisJLnJlYWRfYnVsa19jYWxsYmFjayA9CWN5YmVyamFja19yZWFkX2J1bGtfY2FsbGJhY2ssCisJLndyaXRlX2J1bGtfY2FsbGJhY2sgPQljeWJlcmphY2tfd3JpdGVfYnVsa19jYWxsYmFjaywKK307CisKK3N0cnVjdCBjeWJlcmphY2tfcHJpdmF0ZSB7CisJc3BpbmxvY2tfdAlsb2NrOwkJLyogTG9jayBmb3IgU01QICovCisJc2hvcnQJCXJkdG9kbzsJCS8qIEJ5dGVzIHN0aWxsIHRvIHJlYWQgKi8KKwl1bnNpZ25lZCBjaGFyCXdyYnVmWzUqNjRdOwkvKiBCdWZmZXIgZm9yIGNvbGxlY3RpbmcgZGF0YSB0byB3cml0ZSAqLworCXNob3J0CQl3cmZpbGxlZDsJLyogT3ZlcmFsbCBkYXRhIHNpemUgd2UgYWxyZWFkeSBnb3QgKi8KKwlzaG9ydAkJd3JzZW50OwkJLyogRGF0YSBhbHJlYWR5IHNlbnQgKi8KK307CisKKy8qIGRvIHNvbWUgc3RhcnR1cCBhbGxvY2F0aW9ucyBub3QgY3VycmVudGx5IHBlcmZvcm1lZCBieSB1c2Jfc2VyaWFsX3Byb2JlKCkgKi8KK3N0YXRpYyBpbnQgY3liZXJqYWNrX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IGN5YmVyamFja19wcml2YXRlICpwcml2OworCWludCBpOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBhbGxvY2F0ZSB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSAqLworCXByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3liZXJqYWNrX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogc2V0IGluaXRpYWwgdmFsdWVzICovCisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCXByaXYtPnJkdG9kbyA9IDA7CisJcHJpdi0+d3JmaWxsZWQgPSAwOworCXByaXYtPndyc2VudCA9IDA7CisJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSwgcHJpdik7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZXJpYWwtPnBvcnRbMF0tPndyaXRlX3dhaXQpOworCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJaW50IHJlc3VsdDsKKwkJc2VyaWFsLT5wb3J0W2ldLT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIoc2VyaWFsLT5wb3J0W2ldLT5pbnRlcnJ1cHRfaW5fdXJiLCAKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChyZXN1bHQpCisJCQllcnIoIiB1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkIik7CisJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihpbnQgdXJiKSIsIF9fRlVOQ1RJT05fXyk7CisJfQorCisJcmV0dXJuKCAwICk7Cit9CisKK3N0YXRpYyB2b2lkIGN5YmVyamFja19zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgaTsKKwkKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWZvciAoaT0wOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQl1c2Jfa2lsbF91cmIoc2VyaWFsLT5wb3J0W2ldLT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwkJLyogTXkgc3BlY2lhbCBpdGVtcywgdGhlIHN0YW5kYXJkIHJvdXRpbmVzIGZyZWUgbXkgdXJicyAqLworCQlrZnJlZSh1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldKSk7CisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIE5VTEwpOworCX0KK30KKwkKK3N0YXRpYyBpbnQgIGN5YmVyamFja19vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgY3liZXJqYWNrX3ByaXZhdGUgKnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJZGJnKCIlcyAtIHVzYl9jbGVhcl9oYWx0IiwgX19GVU5DVElPTl9fICk7CisJdXNiX2NsZWFyX2hhbHQocG9ydC0+c2VyaWFsLT5kZXYsIHBvcnQtPndyaXRlX3VyYi0+cGlwZSk7CisKKwkvKiBmb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMKKwkgKiB0aGUgZGF0YSB0aHJvdWdoLCBvdGhlcndpc2UgaXQgaXMgc2NoZWR1bGVkLCBhbmQgd2l0aCBoaWdoCisJICogZGF0YSByYXRlcyAobGlrZSB3aXRoIE9IQ0kpIGRhdGEgY2FuIGdldCBsb3N0LgorCSAqLworCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAxOworCisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPnJkdG9kbyA9IDA7CisJcHJpdi0+d3JmaWxsZWQgPSAwOworCXByaXYtPndyc2VudCA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgY3liZXJqYWNrX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChwb3J0LT5zZXJpYWwtPmRldikgeworCQkvKiBzaHV0ZG93biBhbnkgYnVsayByZWFkcyB0aGF0IG1pZ2h0IGJlIGdvaW5nIG9uICovCisJCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCQl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworCX0KK30KKworc3RhdGljIGludCBjeWJlcmphY2tfd3JpdGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IGN5YmVyamFja19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJlc3VsdDsKKwlpbnQgd3JleHBlY3RlZDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKGNvdW50ID09IDApIHsKKwkJZGJnKCIlcyAtIHdyaXRlIHJlcXVlc3Qgb2YgMCBieXRlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAoMCk7CisJfQorCisJaWYgKHBvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQlkYmcoIiVzIC0gYWxyZWFkeSB3cml0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJaWYoIChjb3VudCtwcml2LT53cmZpbGxlZCk+c2l6ZW9mKHByaXYtPndyYnVmKSApIHsKKwkJLyogVG8gbXVjaCBkYXRhIGZvciBidWZmZXIuIFJlc2V0IGJ1ZmZlci4gKi8KKwkJcHJpdi0+d3JmaWxsZWQ9MDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gKDApOworCX0KKworCS8qIENvcHkgZGF0YSAqLworCW1lbWNweSAocHJpdi0+d3JidWYrcHJpdi0+d3JmaWxsZWQsIGJ1ZiwgY291bnQpOworCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGNvdW50LAorCQlwcml2LT53cmJ1Zitwcml2LT53cmZpbGxlZCk7CisJcHJpdi0+d3JmaWxsZWQgKz0gY291bnQ7CisKKwlpZiggcHJpdi0+d3JmaWxsZWQgPj0gMyApIHsKKwkJd3JleHBlY3RlZCA9ICgoaW50KXByaXYtPndyYnVmWzJdPDw4KStwcml2LT53cmJ1ZlsxXSszOworCQlkYmcoIiVzIC0gZXhwZWN0ZWQgZGF0YTogJWQiLCBfX0ZVTkNUSU9OX18sIHdyZXhwZWN0ZWQpOworCX0gZWxzZSB7CisJCXdyZXhwZWN0ZWQgPSBzaXplb2YocHJpdi0+d3JidWYpOworCX0KKworCWlmKCBwcml2LT53cmZpbGxlZCA+PSB3cmV4cGVjdGVkICkgeworCQkvKiBXZSBoYXZlIGVub3VnaCBkYXRhIHRvIGJlZ2luIHRyYW5zbWlzc2lvbiAqLworCQlpbnQgbGVuZ3RoOworCisJCWRiZygiJXMgLSB0cmFuc21pdHRpbmcgZGF0YSAoZnJhbWUgMSkiLCBfX0ZVTkNUSU9OX18pOworCQlsZW5ndGggPSAod3JleHBlY3RlZCA+IHBvcnQtPmJ1bGtfb3V0X3NpemUpID8gcG9ydC0+YnVsa19vdXRfc2l6ZSA6IHdyZXhwZWN0ZWQ7CisKKwkJbWVtY3B5IChwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgcHJpdi0+d3JidWYsIGxlbmd0aCApOworCQlwcml2LT53cnNlbnQ9bGVuZ3RoOworCisJCS8qIHNldCB1cCBvdXIgdXJiICovCisJCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPndyaXRlX3VyYiwgc2VyaWFsLT5kZXYsIAorCQkJICAgICAgdXNiX3NuZGJ1bGtwaXBlKHNlcmlhbC0+ZGV2LCBwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAorCQkJICAgICAgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIGxlbmd0aCwKKwkJCSAgICAgICgoc2VyaWFsLT50eXBlLT53cml0ZV9idWxrX2NhbGxiYWNrKSA/IAorCQkJICAgICAgIHNlcmlhbC0+dHlwZS0+d3JpdGVfYnVsa19jYWxsYmFjayA6IAorCQkJICAgICAgIGN5YmVyamFja193cml0ZV9idWxrX2NhbGxiYWNrKSwgCisJCQkgICAgICBwb3J0KTsKKworCQkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgYnVsayBwb3J0ICovCisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXN1bHQpIHsKKwkJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQkJLyogVGhyb3cgYXdheSBkYXRhLiBObyBiZXR0ZXIgaWRlYSB3aGF0IHRvIGRvIHdpdGggaXQuICovCisJCQlwcml2LT53cmZpbGxlZD0wOworCQkJcHJpdi0+d3JzZW50PTA7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWRiZygiJXMgLSBwcml2LT53cnNlbnQ9JWQiLCBfX0ZVTkNUSU9OX18scHJpdi0+d3JzZW50KTsKKwkJZGJnKCIlcyAtIHByaXYtPndyZmlsbGVkPSVkIiwgX19GVU5DVElPTl9fLHByaXYtPndyZmlsbGVkKTsKKworCQlpZiggcHJpdi0+d3JzZW50Pj1wcml2LT53cmZpbGxlZCApIHsKKwkJCWRiZygiJXMgLSBidWZmZXIgY2xlYW5lZCIsIF9fRlVOQ1RJT05fXyk7CisJCQltZW1zZXQoIHByaXYtPndyYnVmLCAwLCBzaXplb2YocHJpdi0+d3JidWYpICk7CisJCQlwcml2LT53cmZpbGxlZD0wOworCQkJcHJpdi0+d3JzZW50PTA7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gKGNvdW50KTsKK30gCisKK3N0YXRpYyBpbnQgY3liZXJqYWNrX3dyaXRlX3Jvb20oIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgKQoreworCXJldHVybiBDWUJFUkpBQ0tfTE9DQUxfQlVGX1NJWkU7Cit9CisKK3N0YXRpYyB2b2lkIGN5YmVyamFja19yZWFkX2ludF9jYWxsYmFjayggc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyApCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBjeWJlcmphY2tfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLyogdGhlIHVyYiBtaWdodCBoYXZlIGJlZW4ga2lsbGVkLiAqLworCWlmICh1cmItPnN0YXR1cykKKwkJcmV0dXJuOworCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisKKwkvKiBSZWFjdCBvbmx5IHRvIGludGVycnVwdHMgc2lnbmFsaW5nIGEgYnVsa19pbiB0cmFuc2ZlciAqLworCWlmKCAodXJiLT5hY3R1YWxfbGVuZ3RoPT00KSAmJiAoZGF0YVswXT09MHgwMSkgKSB7CisJCXNob3J0IG9sZF9yZHRvZG87CisJCWludCByZXN1bHQ7CisKKwkJLyogVGhpcyBpcyBhIGFubm91bmNlbWVudCBvZiBjb21pbmcgYnVsa19pbnMuICovCisJCXVuc2lnbmVkIHNob3J0IHNpemUgPSAoKHVuc2lnbmVkIHNob3J0KWRhdGFbM108PDgpK2RhdGFbMl0rMzsKKworCQlzcGluX2xvY2soJnByaXYtPmxvY2spOworCisJCW9sZF9yZHRvZG8gPSBwcml2LT5yZHRvZG87CisKKwkJaWYoIChvbGRfcmR0b2RvK3NpemUpPChvbGRfcmR0b2RvKSApIHsKKwkJCWRiZyggIlRvIG1hbnkgYnVsa19pbiB1cmJzIHRvIGRvLiIgKTsKKwkJCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKwkJCWdvdG8gcmVzdWJtaXQ7CisJCX0KKworCQkvKiAiKz0iIGlzIHByb2JhYmx5IG1vcmUgZmF1bHQgdG9sbGVyYW50IHRoYW4gIj0iICovCisJCXByaXYtPnJkdG9kbyArPSBzaXplOworCisJCWRiZygiJXMgLSByZHRvZG86ICVkIiwgX19GVU5DVElPTl9fLCBwcml2LT5yZHRvZG8pOworCisJCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKworCQlpZiggIW9sZF9yZHRvZG8gKSB7CisJCQlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJCQlpZiggcmVzdWx0ICkKKwkJCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCQlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIocmVhZCB1cmIpIiwgX19GVU5DVElPTl9fKTsKKwkJfQorCX0KKworcmVzdWJtaXQ6CisJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkKKwkJZXJyKCIgdXNiX3N1Ym1pdF91cmIocmVhZCBpbnQpIGZhaWxlZCIpOworCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihpbnQgdXJiKSIsIF9fRlVOQ1RJT05fXyk7Cit9CisKK3N0YXRpYyB2b2lkIGN5YmVyamFja19yZWFkX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBjeWJlcmphY2tfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlzaG9ydCB0b2RvOworCWludCBpOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCXR0eSA9IHBvcnQtPnR0eTsKKwlpZiAoIXR0eSkgeworCQlkYmcoIiVzIC0gaWdub3Jpbmcgc2luY2UgZGV2aWNlIG5vdCBvcGVuXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJZm9yIChpID0gMDsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aCA7ICsraSkgeworCQkJLyogaWYgd2UgaW5zZXJ0IG1vcmUgdGhhbiBUVFlfRkxJUEJVRl9TSVpFIGNoYXJhY3RlcnMsIHdlIGRyb3AgdGhlbS4gKi8KKwkJCWlmKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCX0KKwkJCS8qIHRoaXMgZG9lc24ndCBhY3R1YWxseSBwdXNoIHRoZSBkYXRhIHRocm91Z2ggdW5sZXNzIHR0eS0+bG93X2xhdGVuY3kgaXMgc2V0ICovCisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIDApOworCQl9CisJICAJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwl9CisKKwlzcGluX2xvY2soJnByaXYtPmxvY2spOworCisJLyogUmVkdWNlIHVyYnMgdG8gZG8gYnkgb25lLiAqLworCXByaXYtPnJkdG9kby09dXJiLT5hY3R1YWxfbGVuZ3RoOworCS8qIEp1c3QgdG8gYmUgc3VyZSAqLworCWlmICggcHJpdi0+cmR0b2RvPDAgKSBwcml2LT5yZHRvZG8gPSAwOworCXRvZG8gPSBwcml2LT5yZHRvZG87CisKKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisKKwlkYmcoIiVzIC0gcmR0b2RvOiAlZCIsIF9fRlVOQ1RJT05fXywgdG9kbyk7CisKKwkvKiBDb250aW51ZSB0byByZWFkIGlmIHdlIGhhdmUgc3RpbGwgdXJicyB0byBkby4gKi8KKwlpZiggdG9kbyAvKiB8fCAodXJiLT5hY3R1YWxfbGVuZ3RoPT1wb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcykqLyApIHsKKwkJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXN1bHQpCisJCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihyZWFkIHVyYikiLCBfX0ZVTkNUSU9OX18pOworCX0KK30KKworc3RhdGljIHZvaWQgY3liZXJqYWNrX3dyaXRlX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBjeWJlcmphY2tfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQorCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisKKwkvKiBvbmx5IGRvIHNvbWV0aGluZyBpZiB3ZSBoYXZlIG1vcmUgZGF0YSB0byBzZW5kICovCisJaWYoIHByaXYtPndyZmlsbGVkICkgeworCQlpbnQgbGVuZ3RoLCBibGtzaXplLCByZXN1bHQ7CisKKwkJaWYgKHBvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQkJZGJnKCIlcyAtIGFscmVhZHkgd3JpdGluZyIsIF9fRlVOQ1RJT05fXyk7CisJCQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJCQlyZXR1cm47CisJCX0KKworCQlkYmcoIiVzIC0gdHJhbnNtaXR0aW5nIGRhdGEgKGZyYW1lIG4pIiwgX19GVU5DVElPTl9fKTsKKworCQlsZW5ndGggPSAoKHByaXYtPndyZmlsbGVkIC0gcHJpdi0+d3JzZW50KSA+IHBvcnQtPmJ1bGtfb3V0X3NpemUpID8KKwkJCXBvcnQtPmJ1bGtfb3V0X3NpemUgOiAocHJpdi0+d3JmaWxsZWQgLSBwcml2LT53cnNlbnQpOworCisJCW1lbWNweSAocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIHByaXYtPndyYnVmICsgcHJpdi0+d3JzZW50LAorCQkJbGVuZ3RoICk7CisJCXByaXYtPndyc2VudCs9bGVuZ3RoOworCisJCS8qIHNldCB1cCBvdXIgdXJiICovCisJCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPndyaXRlX3VyYiwgcG9ydC0+c2VyaWFsLT5kZXYsIAorCQkJICAgICAgdXNiX3NuZGJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAorCQkJICAgICAgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIGxlbmd0aCwKKwkJCSAgICAgICgocG9ydC0+c2VyaWFsLT50eXBlLT53cml0ZV9idWxrX2NhbGxiYWNrKSA/IAorCQkJICAgICAgIHBvcnQtPnNlcmlhbC0+dHlwZS0+d3JpdGVfYnVsa19jYWxsYmFjayA6IAorCQkJICAgICAgIGN5YmVyamFja193cml0ZV9idWxrX2NhbGxiYWNrKSwgCisJCQkgICAgICBwb3J0KTsKKworCQkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgYnVsayBwb3J0ICovCisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXN1bHQpIHsKKwkJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQkJLyogVGhyb3cgYXdheSBkYXRhLiBObyBiZXR0ZXIgaWRlYSB3aGF0IHRvIGRvIHdpdGggaXQuICovCisJCQlwcml2LT53cmZpbGxlZD0wOworCQkJcHJpdi0+d3JzZW50PTA7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlkYmcoIiVzIC0gcHJpdi0+d3JzZW50PSVkIiwgX19GVU5DVElPTl9fLHByaXYtPndyc2VudCk7CisJCWRiZygiJXMgLSBwcml2LT53cmZpbGxlZD0lZCIsIF9fRlVOQ1RJT05fXyxwcml2LT53cmZpbGxlZCk7CisKKwkJYmxrc2l6ZSA9ICgoaW50KXByaXYtPndyYnVmWzJdPDw4KStwcml2LT53cmJ1ZlsxXSszOworCisJCWlmKCAocHJpdi0+d3JzZW50Pj1wcml2LT53cmZpbGxlZCkgfHwgKHByaXYtPndyc2VudD49Ymxrc2l6ZSkgKSB7CisJCQlkYmcoIiVzIC0gYnVmZmVyIGNsZWFuZWQiLCBfX0ZVTkNUSU9OX18pOworCQkJbWVtc2V0KCBwcml2LT53cmJ1ZiwgMCwgc2l6ZW9mKHByaXYtPndyYnVmKSApOworCQkJcHJpdi0+d3JmaWxsZWQ9MDsKKwkJCXByaXYtPndyc2VudD0wOworCQl9CisJfQorCitleGl0OgorCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKwlzY2hlZHVsZV93b3JrKCZwb3J0LT53b3JrKTsKK30KKworc3RhdGljIGludCBfX2luaXQgY3liZXJqYWNrX2luaXQgKHZvaWQpCit7CisJaW50IHJldHZhbDsKKwlyZXR2YWwgID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmY3liZXJqYWNrX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmN5YmVyamFja19kcml2ZXIpOworCWlmIChyZXR2YWwpIAorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisKKwlpbmZvKERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfQVVUSE9SKTsKKwlpbmZvKERSSVZFUl9ERVNDKTsKKworCXJldHVybiAwOworZmFpbGVkX3VzYl9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmN5YmVyamFja19kZXZpY2UpOworZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGN5YmVyamFja19leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgmY3liZXJqYWNrX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmY3liZXJqYWNrX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KGN5YmVyamFja19pbml0KTsKK21vZHVsZV9leGl0KGN5YmVyamFja19leGl0KTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX1ZFUlNJT04oIERSSVZFUl9WRVJTSU9OICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjhmNDcyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYwpAQCAtMCwwICsxLDE1MzggQEAKKy8qCisgKiBVU0IgQ3lwcmVzcyBNOCBkcml2ZXIKKyAqCisgKiAJQ29weXJpZ2h0IChDKSAyMDA0CisgKiAJICAgIExvbm5pZSBNZW5kZXogKGRpZ25vbWVAZ21haWwuY29tKSAKKyAqCUNvcHlyaWdodCAoQykgMjAwMywyMDA0CisgKgkgICAgTmVpbCBXaGVsY2hlbCAoa295YW1hQGZpcnN0bGlnaHQubmV0KQorICoKKyAqIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIAkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICoKKyAqIFNlZSBodHRwOi8vZ2VvY2l0aWVzLmNvbS9pMHhveDBpIGZvciBpbmZvcm1hdGlvbiBvbiB0aGlzIGRyaXZlciBhbmQgdGhlCisgKiBlYXJ0aG1hdGUgdXNiIGRldmljZS4KKyAqCisgKgorICogIExvbm5pZSBNZW5kZXogPGRpZ25vbWVAZ21haWwuY29tPgorICogIDEyLTE1LTIwMDQKKyAqCUluY29ycG9yYXRlZCB3cml0ZSBidWZmZXJpbmcgZnJvbSBwbDIzMDMgZHJpdmVyLiAgRml4ZWQgYnVnIHdpdGggbGluZQorICoJaGFuZGxpbmcgc28gYm90aCBsaW5lcyBhcmUgcmFpc2VkIGluIGN5cHJlc3Nfb3Blbi4gKHdhcyBkcm9wcGluZyBydHMpCisgKiAgICAgIFZhcmlvdXMgY29kZSBjbGVhbnVwcyBtYWRlIGFzIHdlbGwgYWxvbmcgd2l0aCBvdGhlciBtaXNjIGJ1ZyBmaXhlcy4KKyAqCisgKiAgTG9ubmllIE1lbmRleiA8ZGlnbm9tZUBnbWFpbC5jb20+CisgKiAgMDQtMTAtMjAwNAorICoJRHJpdmVyIG1vZGlmaWVkIHRvIHN1cHBvcnQgZHluYW1pYyBsaW5lIHNldHRpbmdzLiAgVmFyaW91cyBpbXByb3ZtZW50cworICogICAgICBhbmQgZmVhdHVyZXMuCisgKgorICogIE5laWwgV2hlbGNoZWwKKyAqICAxMC0yMDAzCisgKglEcml2ZXIgZmlyc3QgcmVsZWFzZWQuCisgKgorICoKKyAqIExvbmcgVGVybSBUT0RPOgorICoJSW1wcm92ZSB0cmFuc2ZlciBzcGVlZHMgLSBib3RoIHJlYWQvd3JpdGUgYXJlIHNvbWV3aGF0IHNsb3cKKyAqICAgYXQgdGhpcyBwb2ludC4KKyAqICAgICAgSW1wcm92ZSBkZWJ1Z2dpbmcuICBTaG93IG1vZGVtIGxpbmUgc3RhdHVzIHdpdGggZGVidWcgb3V0cHV0IGFuZAorICogICBpbXBsZW1lbnQgZmlsdGVyaW5nIGZvciBjZXJ0YWluIGRhdGEgYXMgYSBtb2R1bGUgcGFyYW1ldGVyLgorICovCisKKy8qIFRoYW5rcyB0byBOZWlsIFdoZWxjaGVsIGZvciB3cml0aW5nIHRoZSBmaXJzdCBjeXByZXNzIG04IGltcGxlbWVudGF0aW9uIGZvciBsaW51eC4gKi8KKy8qIFRoYW5rcyB0byBjeXByZXNzIGZvciBwcm92aWRpbmcgcmVmZXJlbmNlcyBmb3IgdGhlIGhpZCByZXBvcnRzLiAqLworLyogVGhhbmtzIHRvIEppYW5nIFpoYW5nIGZvciBwcm92aWRpbmcgbGlua3MgYW5kIGZvciBnZW5lcmFsIGhlbHAuICovCisvKiBDb2RlIG9yaWdpbmF0ZXMgYW5kIHdhcyBidWlsdCB1cCBmcm9tIGZ0ZGlfc2lvLCBiZWxraW4sIHBsMjMwMyBhbmQgb3RoZXJzLiAqLworCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKyNpbmNsdWRlICJjeXByZXNzX204LmgiCisKKworI2lmZGVmIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHCisJc3RhdGljIGludCBkZWJ1ZyA9IDE7CisjZWxzZQorCXN0YXRpYyBpbnQgZGVidWc7CisjZW5kaWYKK3N0YXRpYyBpbnQgc3RhdHM7CisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjA4IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJMb25uaWUgTWVuZGV6IDxkaWdub21lQGdtYWlsLmNvbT4sIE5laWwgV2hlbGNoZWwgPGtveWFtYUBmaXJzdGxpZ2h0Lm5ldD4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJDeXByZXNzIFVTQiB0byBTZXJpYWwgRHJpdmVyIgorCisvKiB3cml0ZSBidWZmZXIgc2l6ZSBkZWZpbmVzICovCisjZGVmaW5lIENZUFJFU1NfQlVGX1NJWkUJMTAyNAorI2RlZmluZSBDWVBSRVNTX0NMT1NJTkdfV0FJVAkoMzAqSFopCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9lYXJ0aG1hdGUgW10gPSB7CisJeyBVU0JfREVWSUNFKFZFTkRPUl9JRF9ERUxPUk1FLCBQUk9EVUNUX0lEX0VBUlRITUFURVVTQikgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2N5cGhpZGNvbXJzMjMyIFtdID0geworCXsgVVNCX0RFVklDRShWRU5ET1JfSURfQ1lQUkVTUywgUFJPRFVDVF9JRF9DWVBISURDT00pIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jb21iaW5lZCBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVkVORE9SX0lEX0RFTE9STUUsIFBST0RVQ1RfSURfRUFSVEhNQVRFVVNCKSB9LAorCXsgVVNCX0RFVklDRShWRU5ET1JfSURfQ1lQUkVTUywgUFJPRFVDVF9JRF9DWVBISURDT00pIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGVfY29tYmluZWQpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY3lwcmVzc19kcml2ZXIgPSB7CisJLm5hbWUgPQkJImN5cHJlc3MiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGVfY29tYmluZWQsCit9OworCitzdHJ1Y3QgY3lwcmVzc19wcml2YXRlIHsKKwlzcGlubG9ja190IGxvY2s7CQkgICAvKiBwcml2YXRlIGxvY2sgKi8KKwlpbnQgY2hpcHR5cGU7CQkJICAgLyogaWRlbnRpZmllciBvZiBkZXZpY2UsIGZvciBxdWlya3MvZXRjICovCisJaW50IGJ5dGVzX2luOwkJCSAgIC8qIHVzZWQgZm9yIHN0YXRpc3RpY3MgKi8KKwlpbnQgYnl0ZXNfb3V0OwkJCSAgIC8qIHVzZWQgZm9yIHN0YXRpc3RpY3MgKi8KKwlpbnQgY21kX2NvdW50OwkJCSAgIC8qIHVzZWQgZm9yIHN0YXRpc3RpY3MgKi8KKwlpbnQgY21kX2N0cmw7CQkJICAgLyogYWx3YXlzIHNldCB0aGlzIHRvIDEgYmVmb3JlIGlzc3VpbmcgYSBjb21tYW5kICovCisJc3RydWN0IGN5cHJlc3NfYnVmICpidWY7CSAgIC8qIHdyaXRlIGJ1ZmZlciAqLworCWludCB3cml0ZV91cmJfaW5fdXNlOwkJICAgLyogd3JpdGUgdXJiIGluIHVzZSBpbmRpY2F0b3IgKi8KKwlpbnQgdGVybWlvc19pbml0aWFsaXplZDsKKwlfX3U4IGxpbmVfY29udHJvbDsJICAgCSAgIC8qIGhvbGRzIGR0ciAvIHJ0cyB2YWx1ZSAqLworCV9fdTggY3VycmVudF9zdGF0dXM7CSAgIAkgICAvKiByZWNlaXZlZCBmcm9tIGxhc3QgcmVhZCAtIGluZm8gb24gZHNyLGN0cyxjZCxyaSxldGMgKi8KKwlfX3U4IGN1cnJlbnRfY29uZmlnOwkgICAJICAgLyogc3RvcmVzIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gYnl0ZSAqLworCV9fdTggcnhfZmxhZ3M7CQkJICAgLyogdGhyb3R0bGluZyAtIHVzZWQgZnJvbSB3aGl0ZWhlYXQvZnRkaV9zaW8gKi8KKwlpbnQgYmF1ZF9yYXRlOwkJCSAgIC8qIHN0b3JlcyBjdXJyZW50IGJhdWQgcmF0ZSBpbiBpbnRlZ2VyIGZvcm0gKi8KKwlpbnQgY2JyX21hc2s7CQkJICAgLyogc3RvcmVzIGN1cnJlbnQgYmF1ZCByYXRlIGluIG1hc2tlZCBmb3JtICovCisJaW50IGlzdGhyb3R0bGVkOwkJICAgLyogaWYgdGhyb3R0bGVkLCBkaXNjYXJkIHJlYWRzICovCisJd2FpdF9xdWV1ZV9oZWFkX3QgZGVsdGFfbXNyX3dhaXQ7ICAvKiB1c2VkIGZvciBUSU9DTUlXQUlUICovCisJY2hhciBwcmV2X3N0YXR1cywgZGlmZl9zdGF0dXM7CSAgIC8qIHVzZWQgZm9yIFRJT0NNSVdBSVQgKi8KKwkvKiB3ZSBwYXNzIGEgcG9pbnRlciB0byB0aGlzIGFzIHRoZSBhcmd1ZW1lbnQgc2VudCB0byBjeXByZXNzX3NldF90ZXJtaW9zIG9sZF90ZXJtaW9zICovCisJc3RydWN0IHRlcm1pb3MgdG1wX3Rlcm1pb3M7IAkgICAvKiBzdG9yZXMgdGhlIG9sZCB0ZXJtaW9zIHNldHRpbmdzICovCisJY2hhciBjYWxsZWRmcm9tb3BlbjsJCSAgIC8qIHVzZWQgd2hlbiBpc3N1aW5nIGxpbmVzIG9uIG9wZW4gLSBmaXhlcyBydHMgZHJvcCBidWcgKi8KK307CisKKy8qIHdyaXRlIGJ1ZmZlciBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBjeXByZXNzX2J1ZiB7CisJdW5zaWduZWQgaW50CWJ1Zl9zaXplOworCWNoYXIJCSpidWZfYnVmOworCWNoYXIJCSpidWZfZ2V0OworCWNoYXIJCSpidWZfcHV0OworfTsKKworLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgdGhlIEN5cHJlc3MgVVNCIHRvIHNlcmlhbCBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgIGN5cHJlc3NfZWFydGhtYXRlX3N0YXJ0dXAJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgY3lwcmVzc19oaWRjb21fc3RhcnR1cAkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgdm9pZCBjeXByZXNzX3NodXRkb3duCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50ICBjeXByZXNzX29wZW4JCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBjeXByZXNzX2Nsb3NlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCAgY3lwcmVzc193cml0ZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK3N0YXRpYyB2b2lkIGN5cHJlc3Nfc2VuZAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCAgY3lwcmVzc193cml0ZV9yb29tCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50ICBjeXByZXNzX2lvY3RsCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgdm9pZCBjeXByZXNzX3NldF90ZXJtaW9zCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKiBvbGQpOworc3RhdGljIGludCAgY3lwcmVzc190aW9jbWdldAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgIGN5cHJlc3NfdGlvY21zZXQJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKK3N0YXRpYyBpbnQgIGN5cHJlc3NfY2hhcnNfaW5fYnVmZmVyCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGN5cHJlc3NfdGhyb3R0bGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGN5cHJlc3NfdW50aHJvdHRsZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgY3lwcmVzc19yZWFkX2ludF9jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBjeXByZXNzX3dyaXRlX2ludF9jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisvKiBiYXVkIGhlbHBlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQJIG1hc2tfdG9fcmF0ZQkJKHVuc2lnbmVkIG1hc2spOworc3RhdGljIHVuc2lnbmVkICByYXRlX3RvX21hc2sJCShpbnQgcmF0ZSk7CisvKiB3cml0ZSBidWZmZXIgZnVuY3Rpb25zICovCitzdGF0aWMgc3RydWN0IGN5cHJlc3NfYnVmICpjeXByZXNzX2J1Zl9hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSk7CitzdGF0aWMgdm9pZCAJCSAgY3lwcmVzc19idWZfZnJlZShzdHJ1Y3QgY3lwcmVzc19idWYgKmNiKTsKK3N0YXRpYyB2b2lkCQkgIGN5cHJlc3NfYnVmX2NsZWFyKHN0cnVjdCBjeXByZXNzX2J1ZiAqY2IpOworc3RhdGljIHVuc2lnbmVkIGludAkgIGN5cHJlc3NfYnVmX2RhdGFfYXZhaWwoc3RydWN0IGN5cHJlc3NfYnVmICpjYik7CitzdGF0aWMgdW5zaWduZWQgaW50CSAgY3lwcmVzc19idWZfc3BhY2VfYXZhaWwoc3RydWN0IGN5cHJlc3NfYnVmICpjYik7CitzdGF0aWMgdW5zaWduZWQgaW50CSAgY3lwcmVzc19idWZfcHV0KHN0cnVjdCBjeXByZXNzX2J1ZiAqY2IsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkJICB1bnNpZ25lZCBpbnQgY291bnQpOworc3RhdGljIHVuc2lnbmVkIGludAkgIGN5cHJlc3NfYnVmX2dldChzdHJ1Y3QgY3lwcmVzc19idWYgKmNiLCBjaGFyICpidWYsCisJCQkJCSAgdW5zaWduZWQgaW50IGNvdW50KTsKKworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgY3lwcmVzc19lYXJ0aG1hdGVfZGV2aWNlID0geworCS5vd25lciA9CQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCQkiRGVMb3JtZSBFYXJ0aG1hdGUgVVNCIiwKKwkuc2hvcnRfbmFtZSA9CQkJImVhcnRobWF0ZSIsCisJLmlkX3RhYmxlID0JCQlpZF90YWJsZV9lYXJ0aG1hdGUsCisJLm51bV9pbnRlcnJ1cHRfaW4gPSAJCTEsCisJLm51bV9pbnRlcnJ1cHRfb3V0ID0JCTEsCisJLm51bV9idWxrX2luID0JCQlOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19vdXQgPQkJCU5VTV9ET05UX0NBUkUsCisJLm51bV9wb3J0cyA9CQkJMSwKKwkuYXR0YWNoID0JCQljeXByZXNzX2VhcnRobWF0ZV9zdGFydHVwLAorCS5zaHV0ZG93biA9CQkJY3lwcmVzc19zaHV0ZG93biwKKwkub3BlbiA9CQkJCWN5cHJlc3Nfb3BlbiwKKwkuY2xvc2UgPQkJCWN5cHJlc3NfY2xvc2UsCisJLndyaXRlID0JCQljeXByZXNzX3dyaXRlLAorCS53cml0ZV9yb29tID0JCQljeXByZXNzX3dyaXRlX3Jvb20sCisJLmlvY3RsID0JCQljeXByZXNzX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQkJY3lwcmVzc19zZXRfdGVybWlvcywKKwkudGlvY21nZXQgPQkJCWN5cHJlc3NfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0JCQljeXByZXNzX3Rpb2Ntc2V0LAorCS5jaGFyc19pbl9idWZmZXIgPQkJY3lwcmVzc19jaGFyc19pbl9idWZmZXIsCisJLnRocm90dGxlID0JCSAJY3lwcmVzc190aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQkJY3lwcmVzc191bnRocm90dGxlLAorCS5yZWFkX2ludF9jYWxsYmFjayA9CQljeXByZXNzX3JlYWRfaW50X2NhbGxiYWNrLAorCS53cml0ZV9pbnRfY2FsbGJhY2sgPQkJY3lwcmVzc193cml0ZV9pbnRfY2FsbGJhY2ssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgY3lwcmVzc19oaWRjb21fZGV2aWNlID0geworCS5vd25lciA9CQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCQkiSElELT5DT00gUlMyMzIgQWRhcHRlciIsCisJLnNob3J0X25hbWUgPQkJCSJjeXBoaWRjb20iLAorCS5pZF90YWJsZSA9CQkJaWRfdGFibGVfY3lwaGlkY29tcnMyMzIsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQkJMSwKKwkubnVtX2ludGVycnVwdF9vdXQgPQkJMSwKKwkubnVtX2J1bGtfaW4gPQkJCU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX291dCA9CQkJTlVNX0RPTlRfQ0FSRSwKKwkubnVtX3BvcnRzID0JCQkxLAorCS5hdHRhY2ggPQkJCWN5cHJlc3NfaGlkY29tX3N0YXJ0dXAsCisJLnNodXRkb3duID0JCQljeXByZXNzX3NodXRkb3duLAorCS5vcGVuID0JCQkJY3lwcmVzc19vcGVuLAorCS5jbG9zZSA9CQkJY3lwcmVzc19jbG9zZSwKKwkud3JpdGUgPQkJCWN5cHJlc3Nfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJCWN5cHJlc3Nfd3JpdGVfcm9vbSwKKwkuaW9jdGwgPQkJCWN5cHJlc3NfaW9jdGwsCisJLnNldF90ZXJtaW9zID0JCQljeXByZXNzX3NldF90ZXJtaW9zLAorCS50aW9jbWdldCA9CQkJY3lwcmVzc190aW9jbWdldCwKKwkudGlvY21zZXQgPQkJCWN5cHJlc3NfdGlvY21zZXQsCisJLmNoYXJzX2luX2J1ZmZlciA9CQljeXByZXNzX2NoYXJzX2luX2J1ZmZlciwKKwkudGhyb3R0bGUgPQkJCWN5cHJlc3NfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkJCWN5cHJlc3NfdW50aHJvdHRsZSwKKwkucmVhZF9pbnRfY2FsbGJhY2sgPQkJY3lwcmVzc19yZWFkX2ludF9jYWxsYmFjaywKKwkud3JpdGVfaW50X2NhbGxiYWNrID0JCWN5cHJlc3Nfd3JpdGVfaW50X2NhbGxiYWNrLAorfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEN5cHJlc3Mgc2VyaWFsIGhlbHBlciBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKiBUaGlzIGZ1bmN0aW9uIGNhbiBlaXRoZXIgc2V0IG9yIHJldHJlaXZlIHRoZSBjdXJyZW50IHNlcmlhbCBsaW5lIHNldHRpbmdzICovCitzdGF0aWMgaW50IGN5cHJlc3Nfc2VyaWFsX2NvbnRyb2wgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHVuc2lnbmVkIGJhdWRfbWFzaywgaW50IGRhdGFfYml0cywgaW50IHN0b3BfYml0cywKKwkJCQkgICBpbnQgcGFyaXR5X2VuYWJsZSwgaW50IHBhcml0eV90eXBlLCBpbnQgcmVzZXQsIGludCBjeXByZXNzX3JlcXVlc3RfdHlwZSkKK3sKKwlpbnQgaSwgbl9iYXVkX3JhdGUgPSAwLCByZXR2YWwgPSAwOworCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXY7CisJX191OCBmZWF0dXJlX2J1ZmZlcls1XTsKKwlfX3U4IGNvbmZpZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisJCisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCXN3aXRjaChjeXByZXNzX3JlcXVlc3RfdHlwZSkgeworCQljYXNlIENZUFJFU1NfU0VUX0NPTkZJRzoKKworCQkJLyoKKwkJCSAqIFRoZSBnZW5lcmFsIHB1cnBvc2UgZmlybXdhcmUgZm9yIHRoZSBDeXByZXNzIE04IGFsbG93cyBmb3IgYSBtYXhpbXVtIHNwZWVkCisgCQkJICogb2YgNTc2MDBicHMgKEkgaGF2ZSBubyBpZGVhIHdoZXRoZXIgRGVMb3JtZSBjaG9zZSB0byB1c2UgdGhlIGdlbmVyYWwgcHVycG9zZQorCQkJICogZmlybXdhcmUgb3Igbm90KSwgaWYgeW91IG5lZWQgdG8gbW9kaWZ5IHRoaXMgc3BlZWQgc2V0dGluZyBmb3IgeW91ciBvd24KKwkJCSAqIHByb2plY3QgcGxlYXNlIGFkZCB5b3VyIG93biBjaGlwdHlwZSBhbmQgbW9kaWZ5IHRoZSBjb2RlIGxpa2V3aXNlLiAgVGhlCisJCQkgKiBDeXByZXNzIEhJRC0+Q09NIGRldmljZSB3aWxsIHdvcmsgc3VjY2Vzc2Z1bGx5IHVwIHRvIDExNTIwMGJwcy4KKwkJCSAqLworCQkJaWYgKGJhdWRfbWFzayAhPSBwcml2LT5jYnJfbWFzaykgeworCQkJCWRiZygiJXMgLSBiYXVkIHJhdGUgaXMgY2hhbmdpbmciLCBfX0ZVTkNUSU9OX18pOworCQkJCWlmICggcHJpdi0+Y2hpcHR5cGUgPT0gQ1RfRUFSVEhNQVRFICkgeworCQkJCQkvKiAzMDAgYW5kIDYwMCBiYXVkIHJhdGVzIGFyZSBzdXBwb3J0ZWQgdW5kZXIgdGhlIGdlbmVyaWMgZmlybXdhcmUsCisJCQkJCSAqIGJ1dCBhcmUgbm90IHVzZWQgd2l0aCBOTUVBIGFuZCBTaVJGIHByb3RvY29scyAqLworCQkJCQkKKwkJCQkJaWYgKCAoYmF1ZF9tYXNrID09IEIzMDApIHx8IChiYXVkX21hc2sgPT0gQjYwMCkgKSB7CisJCQkJCQllcnIoIiVzIC0gZmFpbGVkIHNldHRpbmcgYmF1ZCByYXRlLCB1bnN1cHBvcnRlZCBzcGVlZCAoZGVmYXVsdCB0byA0ODAwKSIsCisJCQkJCQkgICAgX19GVU5DVElPTl9fKTsKKwkJCQkJCW5fYmF1ZF9yYXRlID0gNDgwMDsKKwkJCQkJfSBlbHNlIGlmICggKG5fYmF1ZF9yYXRlID0gbWFza190b19yYXRlKGJhdWRfbWFzaykpID09IC0xKSB7CisJCQkJCQllcnIoIiVzIC0gZmFpbGVkIHNldHRpbmcgYmF1ZCByYXRlLCB1bnN1cHBvcnRlZCBzcGVlZCAoZGVmYXVsdCB0byA0ODAwKSIsCisJCQkJCQkgICAgX19GVU5DVElPTl9fKTsKKwkJCQkJCW5fYmF1ZF9yYXRlID0gNDgwMDsKKwkJCQkJfQorCQkJCX0gZWxzZSBpZiAocHJpdi0+Y2hpcHR5cGUgPT0gQ1RfQ1lQSElEQ09NKSB7CisJCQkJCWlmICggKG5fYmF1ZF9yYXRlID0gbWFza190b19yYXRlKGJhdWRfbWFzaykpID09IC0xKSB7CisJCQkJCQllcnIoIiVzIC0gZmFpbGVkIHNldHRpbmcgYmF1ZCByYXRlLCB1bnN1cHBvcnRlZCBzcGVlZCAoZGVmYXVsdCB0byA0ODAwKSIsCisJCQkJCQkgICAgX19GVU5DVElPTl9fKTsKKwkJCQkJCW5fYmF1ZF9yYXRlID0gNDgwMDsKKwkJCQkJfQorCQkJCX0gZWxzZSBpZiAocHJpdi0+Y2hpcHR5cGUgPT0gQ1RfR0VORVJJQykgeworCQkJCQlpZiAoIChuX2JhdWRfcmF0ZSA9IG1hc2tfdG9fcmF0ZShiYXVkX21hc2spKSA9PSAtMSkgeworCQkJCQkJZXJyKCIlcyAtIGZhaWxlZCBzZXR0aW5nIGJhdWQgcmF0ZSwgdW5zdXBwb3J0ZWQgc3BlZWQgKGRlZmF1bHQgdG8gNDgwMCkiLAorCQkJCQkJICAgIF9fRlVOQ1RJT05fXyk7CisJCQkJCQluX2JhdWRfcmF0ZSA9IDQ4MDA7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlpbmZvKCIlcyAtIHBsZWFzZSBkZWZpbmUgeW91ciBjaGlwdHlwZSwgdXNpbmcgNDgwMGJwcyBkZWZhdWx0IiwgX19GVU5DVElPTl9fKTsKKwkJCQkJbl9iYXVkX3JhdGUgPSA0ODAwOworCQkJCX0KKwkJCX0gZWxzZSB7ICAvKiBiYXVkIHJhdGUgbm90IGNoYW5naW5nLCBrZWVwIHRoZSBvbGQgKi8KKwkJCQluX2JhdWRfcmF0ZSA9IHByaXYtPmJhdWRfcmF0ZTsKKwkJCX0KKwkJCWRiZygiJXMgLSBiYXVkIHJhdGUgaXMgYmVpbmcgc2VudCBhcyAlZCIsIF9fRlVOQ1RJT05fXywgbl9iYXVkX3JhdGUpOworCisJCQkKKwkJCS8qCisJCQkgKiBUaGlzIGFsZ29yaXRobSBhY2NyZWRpdGVkIHRvIEppYW5nIEpheSBaaGFuZy4uLiB0aGFua3MgZm9yIGFsbCB0aGUgaGVscCEKKwkJCSAqLworCQkJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgeworCQkJCWZlYXR1cmVfYnVmZmVyW2ldID0gKCBuX2JhdWRfcmF0ZSA+PiAoaSo4KSAmIDB4RkYgKTsKKwkJCX0KKworCQkJY29uZmlnID0gMDsJICAgICAgICAgICAgICAgICAvLyByZXNldCBjb25maWcgYnl0ZQorCQkJY29uZmlnIHw9IGRhdGFfYml0czsJICAgICAgICAgLy8gYXNzaWduIGRhdGEgYml0cyBpbiAyIGJpdCBzcGFjZSAoIG1heCAzICkKKwkJCS8qIDEgYml0IGdhcCAqLworCQkJY29uZmlnIHw9IChzdG9wX2JpdHMgPDwgMyk7ICAgICAgLy8gYXNzaWduIHN0b3AgYml0cyBpbiAxIGJpdCBzcGFjZQorCQkJY29uZmlnIHw9IChwYXJpdHlfZW5hYmxlIDw8IDQpOyAgLy8gYXNzaWduIHBhcml0eSBmbGFnIGluIDEgYml0IHNwYWNlCisJCQljb25maWcgfD0gKHBhcml0eV90eXBlIDw8IDUpOyAJIC8vIGFzc2lnbiBwYXJpdHkgdHlwZSBpbiAxIGJpdCBzcGFjZQorCQkJLyogMSBiaXQgZ2FwICovCisJCQljb25maWcgfD0gKHJlc2V0IDw8IDcpOwkJIC8vIGFzc2lnbiByZXNldCBhdCBlbmQgb2YgYnl0ZSwgMSBiaXQgc3BhY2UKKworCQkJZmVhdHVyZV9idWZmZXJbNF0gPSBjb25maWc7CisJCQkJCisJCQlkYmcoIiVzIC0gZGV2aWNlIGlzIGJlaW5nIHNlbnQgdGhpcyBmZWF0dXJlIHJlcG9ydDoiLCBfX0ZVTkNUSU9OX18pOworCQkJZGJnKCIlcyAtICUwMlggLSAlMDJYIC0gJTAyWCAtICUwMlggLSAlMDJYIiwgX19GVU5DVElPTl9fLCBmZWF0dXJlX2J1ZmZlclswXSwgZmVhdHVyZV9idWZmZXJbMV0sCisJCSAgICAgICAgICAgIGZlYXR1cmVfYnVmZmVyWzJdLCBmZWF0dXJlX2J1ZmZlclszXSwgZmVhdHVyZV9idWZmZXJbNF0pOworCQkJCisJCQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cgKHBvcnQtPnNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJCQkgIAkgIEhJRF9SRVFfU0VUX1JFUE9SVCwgVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MsCisJCQkJCSAgCSAgMHgwMzAwLCAwLCBmZWF0dXJlX2J1ZmZlciwgNSwgNTAwKTsKKworCQkJaWYgKHJldHZhbCAhPSA1KQorCQkJCWVycigiJXMgLSBmYWlsZWQgc2VuZGluZyBzZXJpYWwgbGluZSBzZXR0aW5ncyAtICVkIiwgX19GVU5DVElPTl9fLCByZXR2YWwpOworCQkJZWxzZSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCQlwcml2LT5iYXVkX3JhdGUgPSBuX2JhdWRfcmF0ZTsKKwkJCQlwcml2LT5jYnJfbWFzayA9IGJhdWRfbWFzazsKKwkJCQlwcml2LT5jdXJyZW50X2NvbmZpZyA9IGNvbmZpZzsKKwkJCQkrK3ByaXYtPmNtZF9jb3VudDsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQl9CisJCWJyZWFrOworCQljYXNlIENZUFJFU1NfR0VUX0NPTkZJRzoKKwkJCWRiZygiJXMgLSByZXRyZWl2aW5nIHNlcmlhbCBsaW5lIHNldHRpbmdzIiwgX19GVU5DVElPTl9fKTsKKwkJCS8qIHJlc2V0IHZhbHVlcyBpbiBmZWF0dXJlIGJ1ZmZlciAqLworCQkJbWVtc2V0KGZlYXR1cmVfYnVmZmVyLCAwLCA1KTsKKworCQkJcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnIChwb3J0LT5zZXJpYWwtPmRldiwgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCQkJCSAgSElEX1JFUV9HRVRfUkVQT1JULCBVU0JfRElSX0lOIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTLAorCQkJCQkJICAweDAzMDAsIDAsIGZlYXR1cmVfYnVmZmVyLCA1LCA1MDApOworCQkJaWYgKHJldHZhbCAhPSA1KSB7CisJCQkJZXJyKCIlcyAtIGZhaWxlZCB0byByZXRyZWl2ZSBzZXJpYWwgbGluZSBzZXR0aW5ncyAtICVkIiwgX19GVU5DVElPTl9fLCByZXR2YWwpOworCQkJCXJldHVybiByZXR2YWw7CisJCQl9IGVsc2UgeworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQkJLyogc3RvcmUgdGhlIGNvbmZpZyBpbiBvbmUgYnl0ZSwgYW5kIGxhdGVyIHVzZSBiaXQgbWFza3MgdG8gY2hlY2sgdmFsdWVzICovCisJCQkJcHJpdi0+Y3VycmVudF9jb25maWcgPSBmZWF0dXJlX2J1ZmZlcls0XTsKKwkJCQkvKiByZXZlcnNlIHRoZSBwcm9jZXNzIGFib3ZlIHRvIGdldCB0aGUgYmF1ZF9tYXNrIHZhbHVlICovCisJCQkJbl9iYXVkX3JhdGUgPSAwOyAvLyByZXNldCBiaXRzCisJCQkJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgeworCQkJCQluX2JhdWRfcmF0ZSB8PSAoIGZlYXR1cmVfYnVmZmVyW2ldIDw8IChpKjgpICk7CisJCQkJfQorCQkJCQorCQkJCXByaXYtPmJhdWRfcmF0ZSA9IG5fYmF1ZF9yYXRlOworCQkJCWlmICggKHByaXYtPmNicl9tYXNrID0gcmF0ZV90b19tYXNrKG5fYmF1ZF9yYXRlKSkgPT0gMHg0MCkKKwkJCQkJZGJnKCIlcyAtIGZhaWxlZCBzZXR0aW5nIHRoZSBiYXVkIG1hc2sgKG5vdCBkZWZpbmVkKSIsIF9fRlVOQ1RJT05fXyk7CisJCQkJKytwcml2LT5jbWRfY291bnQ7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIoIiVzIC0gdW5zdXBwb3J0ZWQgc2VyaWFsIGNvbnRyb2wgY29tbWFuZCBpc3N1ZWQiLCBfX0ZVTkNUSU9OX18pOworCX0KKwlyZXR1cm4gcmV0dmFsOworfSAvKiBjeXByZXNzX3NlcmlhbF9jb250cm9sICovCisKKworLyogZ2l2ZW4gYSBiYXVkIG1hc2ssIGl0IHdpbGwgcmV0dXJuIHNwZWVkIG9uIHN1Y2Nlc3MgKi8KK3N0YXRpYyBpbnQgbWFza190b19yYXRlICh1bnNpZ25lZCBtYXNrKQoreworCWludCByYXRlOworCisJc3dpdGNoIChtYXNrKSB7CisJCWNhc2UgQjA6IHJhdGUgPSAwOyBicmVhazsKKwkJY2FzZSBCMzAwOiByYXRlID0gMzAwOyBicmVhazsKKwkJY2FzZSBCNjAwOiByYXRlID0gNjAwOyBicmVhazsKKwkJY2FzZSBCMTIwMDogcmF0ZSA9IDEyMDA7IGJyZWFrOworCQljYXNlIEIyNDAwOiByYXRlID0gMjQwMDsgYnJlYWs7CisJCWNhc2UgQjQ4MDA6IHJhdGUgPSA0ODAwOyBicmVhazsKKwkJY2FzZSBCOTYwMDogcmF0ZSA9IDk2MDA7IGJyZWFrOworCQljYXNlIEIxOTIwMDogcmF0ZSA9IDE5MjAwOyBicmVhazsKKwkJY2FzZSBCMzg0MDA6IHJhdGUgPSAzODQwMDsgYnJlYWs7CisJCWNhc2UgQjU3NjAwOiByYXRlID0gNTc2MDA7IGJyZWFrOworCQljYXNlIEIxMTUyMDA6IHJhdGUgPSAxMTUyMDA7IGJyZWFrOworCQlkZWZhdWx0OiByYXRlID0gLTE7CisJfQorCisJcmV0dXJuIHJhdGU7Cit9CisKKworc3RhdGljIHVuc2lnbmVkIHJhdGVfdG9fbWFzayAoaW50IHJhdGUpCit7CisJdW5zaWduZWQgbWFzazsKKworCXN3aXRjaCAocmF0ZSkgeworCQljYXNlIDA6IG1hc2sgPSBCMDsgYnJlYWs7CisJCWNhc2UgMzAwOiBtYXNrID0gQjMwMDsgYnJlYWs7CisJCWNhc2UgNjAwOiBtYXNrID0gQjYwMDsgYnJlYWs7CisJCWNhc2UgMTIwMDogbWFzayA9IEIxMjAwOyBicmVhazsKKwkJY2FzZSAyNDAwOiBtYXNrID0gQjI0MDA7IGJyZWFrOworCQljYXNlIDQ4MDA6IG1hc2sgPSBCNDgwMDsgYnJlYWs7CisJCWNhc2UgOTYwMDogbWFzayA9IEI5NjAwOyBicmVhazsKKwkJY2FzZSAxOTIwMDogbWFzayA9IEIxOTIwMDsgYnJlYWs7CisJCWNhc2UgMzg0MDA6IG1hc2sgPSBCMzg0MDA7IGJyZWFrOworCQljYXNlIDU3NjAwOiBtYXNrID0gQjU3NjAwOyBicmVhazsKKwkJY2FzZSAxMTUyMDA6IG1hc2sgPSBCMTE1MjAwOyBicmVhazsKKwkJZGVmYXVsdDogbWFzayA9IDB4NDA7CisJfQorCisJcmV0dXJuIG1hc2s7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEN5cHJlc3Mgc2VyaWFsIGRyaXZlciBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitzdGF0aWMgaW50IGdlbmVyaWNfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHNlcmlhbC0+cG9ydFswXS0+bnVtYmVyKTsKKworCXByaXYgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1zZXQocHJpdiwgMHgwMCwgc2l6ZW9mIChzdHJ1Y3QgY3lwcmVzc19wcml2YXRlKSk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCXByaXYtPmJ1ZiA9IGN5cHJlc3NfYnVmX2FsbG9jKENZUFJFU1NfQlVGX1NJWkUpOworCWlmIChwcml2LT5idWYgPT0gTlVMTCkgeworCQlrZnJlZShwcml2KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKKwkKKwl1c2JfcmVzZXRfY29uZmlndXJhdGlvbiAoc2VyaWFsLT5kZXYpOworCQorCXByaXYtPmNtZF9jdHJsID0gMDsKKwlwcml2LT5saW5lX2NvbnRyb2wgPSAwOworCXByaXYtPnRlcm1pb3NfaW5pdGlhbGl6ZWQgPSAwOworCXByaXYtPmNhbGxlZGZyb21vcGVuID0gMDsKKwlwcml2LT5yeF9mbGFncyA9IDA7CisJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSwgcHJpdik7CisJCisJcmV0dXJuICgwKTsJCit9CQorCisKK3N0YXRpYyBpbnQgY3lwcmVzc19lYXJ0aG1hdGVfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2OworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoZ2VuZXJpY19zdGFydHVwKHNlcmlhbCkpIHsKKwkJZGJnKCIlcyAtIEZhaWxlZCBzZXR0aW5nIHVwIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHNlcmlhbC0+cG9ydFswXS0+bnVtYmVyKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0pOworCXByaXYtPmNoaXB0eXBlID0gQ1RfRUFSVEhNQVRFOworCQorCXJldHVybiAoMCk7CQorfSAvKiBjeXByZXNzX2VhcnRobWF0ZV9zdGFydHVwICovCisKKworc3RhdGljIGludCBjeXByZXNzX2hpZGNvbV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXY7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChnZW5lcmljX3N0YXJ0dXAoc2VyaWFsKSkgeworCQlkYmcoIiVzIC0gRmFpbGVkIHNldHRpbmcgdXAgcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgc2VyaWFsLT5wb3J0WzBdLT5udW1iZXIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSk7CisJcHJpdi0+Y2hpcHR5cGUgPSBDVF9DWVBISURDT007CisJCisJcmV0dXJuICgwKTsJCit9IC8qIGN5cHJlc3NfaGlkY29tX3N0YXJ0dXAgKi8KKworCitzdGF0aWMgdm9pZCBjeXByZXNzX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXY7CisKKwlkYmcgKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHNlcmlhbC0+cG9ydFswXS0+bnVtYmVyKTsKKworCS8qIGFsbCBvcGVuIHBvcnRzIGFyZSBjbG9zZWQgYXQgdGhpcyBwb2ludCAqLworCisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0pOworCisJaWYgKHByaXYpIHsKKwkJY3lwcmVzc19idWZfZnJlZShwcml2LT5idWYpOworCQlrZnJlZShwcml2KTsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSwgTlVMTCk7CisJfQorfQorCisKK3N0YXRpYyBpbnQgY3lwcmVzc19vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLyogY2xlYXIgaGFsdHMgYmVmb3JlIG9wZW4gKi8KKwl1c2JfY2xlYXJfaGFsdChzZXJpYWwtPmRldiwgMHgwMCk7CisJdXNiX2NsZWFyX2hhbHQoc2VyaWFsLT5kZXYsIDB4ODEpOworCXVzYl9jbGVhcl9oYWx0KHNlcmlhbC0+ZGV2LCAweDAyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJLyogcmVzZXQgcmVhZC93cml0ZSBzdGF0aXN0aWNzICovCisJcHJpdi0+Ynl0ZXNfaW4gPSAwOworCXByaXYtPmJ5dGVzX291dCA9IDA7CisJcHJpdi0+Y21kX2NvdW50ID0gMDsKKwlwcml2LT5yeF9mbGFncyA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJLyogc2V0dGluZyB0byB6ZXJvIGNvdWxkIGNhdXNlIGRhdGEgbG9zcyAqLworCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAxOworCisJLyogcmFpc2UgYm90aCBsaW5lcyBhbmQgc2V0IHRlcm1pb3MgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPmxpbmVfY29udHJvbCA9IENPTlRST0xfRFRSIHwgQ09OVFJPTF9SVFM7CisJcHJpdi0+Y2FsbGVkZnJvbW9wZW4gPSAxOworCXByaXYtPmNtZF9jdHJsID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcmVzdWx0ID0gY3lwcmVzc193cml0ZShwb3J0LCBOVUxMLCAwKTsKKworCWlmIChyZXN1bHQpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc2V0dGluZyB0aGUgY29udHJvbCBsaW5lcyAtIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CisJfSBlbHNlCisJCWRiZygiJXMgLSBzdWNjZXNzIHNldHRpbmcgdGhlIGNvbnRyb2wgbGluZXMiLCBfX0ZVTkNUSU9OX18pOwkKKworCWN5cHJlc3Nfc2V0X3Rlcm1pb3MocG9ydCwgJnByaXYtPnRtcF90ZXJtaW9zKTsKKworCS8qIHNldHVwIHRoZSBwb3J0IGFuZCBzdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLworCWlmKCFwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKXsKKwkJZXJyKCIlcyAtIGludGVycnVwdF9pbl91cmIgaXMgZW1wdHkhIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuKC0xKTsKKwl9CisKKwl1c2JfZmlsbF9pbnRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIHNlcmlhbC0+ZGV2LAorCQl1c2JfcmN2aW50cGlwZShzZXJpYWwtPmRldiwgcG9ydC0+aW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzcyksCisJCXBvcnQtPmludGVycnVwdF9pbl91cmItPnRyYW5zZmVyX2J1ZmZlciwgcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJY3lwcmVzc19yZWFkX2ludF9jYWxsYmFjaywgcG9ydCwgcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+aW50ZXJ2YWwpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOworCisJaWYgKHJlc3VsdCl7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30gLyogY3lwcmVzc19vcGVuICovCisKKworc3RhdGljIHZvaWQgY3lwcmVzc19jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBpbnQgY19jZmxhZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBicHM7CisJbG9uZyB0aW1lb3V0OworCXdhaXRfcXVldWVfdCB3YWl0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiB3YWl0IGZvciBkYXRhIHRvIGRyYWluIGZyb20gYnVmZmVyICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwl0aW1lb3V0ID0gQ1lQUkVTU19DTE9TSU5HX1dBSVQ7CisJaW5pdF93YWl0cXVldWVfZW50cnkoJndhaXQsIGN1cnJlbnQpOworCWFkZF93YWl0X3F1ZXVlKCZwb3J0LT50dHktPndyaXRlX3dhaXQsICZ3YWl0KTsKKwlmb3IgKDs7KSB7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCWlmIChjeXByZXNzX2J1Zl9kYXRhX2F2YWlsKHByaXYtPmJ1ZikgPT0gMAorCQl8fCB0aW1lb3V0ID09IDAgfHwgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkKKwkJfHwgIXVzYl9nZXRfaW50ZmRhdGEocG9ydC0+c2VyaWFsLT5pbnRlcmZhY2UpKQorCQkJYnJlYWs7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJfQorCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJnBvcnQtPnR0eS0+d3JpdGVfd2FpdCwgJndhaXQpOworCS8qIGNsZWFyIG91dCBhbnkgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGJ1ZmZlciAqLworCWN5cHJlc3NfYnVmX2NsZWFyKHByaXYtPmJ1Zik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQorCS8qIHdhaXQgZm9yIGNoYXJhY3RlcnMgdG8gZHJhaW4gZnJvbSBkZXZpY2UgKi8KKwlicHMgPSB0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0LT50dHkpOworCWlmIChicHMgPiAxMjAwKQorCQl0aW1lb3V0ID0gbWF4KChIWioyNTYwKS9icHMsSFovMTApOworCWVsc2UKKwkJdGltZW91dCA9IDIqSFo7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOworCisJZGJnKCIlcyAtIHN0b3BwaW5nIHVyYnMiLCBfX0ZVTkNUSU9OX18pOworCXVzYl9raWxsX3VyYiAocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CisJdXNiX2tpbGxfdXJiIChwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYik7CisKKwlpZiAocG9ydC0+dHR5KSB7CisJCWNfY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJCWlmIChjX2NmbGFnICYgSFVQQ0wpIHsKKwkJCS8qIGRyb3AgZHRyIGFuZCBydHMgKi8KKwkJCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkJcHJpdi0+bGluZV9jb250cm9sID0gMDsKKwkJCXByaXYtPmNtZF9jdHJsID0gMTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCWN5cHJlc3Nfd3JpdGUocG9ydCwgTlVMTCwgMCk7CisJCX0KKwl9CisKKwlpZiAoc3RhdHMpCisJCWRldl9pbmZvICgmcG9ydC0+ZGV2LCAiU3RhdGlzdGljczogJWQgQnl0ZXMgSW4gfCAlZCBCeXRlcyBPdXQgfCAlZCBDb21tYW5kcyBJc3N1ZWRcbiIsCisJCSAgICAgICAgICBwcml2LT5ieXRlc19pbiwgcHJpdi0+Ynl0ZXNfb3V0LCBwcml2LT5jbWRfY291bnQpOworfSAvKiBjeXByZXNzX2Nsb3NlICovCisKKworc3RhdGljIGludCBjeXByZXNzX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkKKwlkYmcoIiVzIC0gcG9ydCAlZCwgJWQgYnl0ZXMiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY291bnQpOworCisJLyogbGluZSBjb250cm9sIGNvbW1hbmRzLCB3aGljaCBuZWVkIHRvIGJlIGV4ZWN1dGVkIGltbWVkaWF0ZWx5LAorCSAgIGFyZSBub3QgcHV0IGludG8gdGhlIGJ1ZmZlciBmb3Igb2J2aW91cyByZWFzb25zLgorCSAqLworCWlmIChwcml2LT5jbWRfY3RybCkgeworCQljb3VudCA9IDA7CisJCWdvdG8gZmluaXNoOworCX0KKwkKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gY291bnQ7CisJCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwljb3VudCA9IGN5cHJlc3NfYnVmX3B1dChwcml2LT5idWYsIGJ1ZiwgY291bnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworZmluaXNoOgorCWN5cHJlc3Nfc2VuZChwb3J0KTsKKworCXJldHVybiBjb3VudDsKK30gLyogY3lwcmVzc193cml0ZSAqLworCisKK3N0YXRpYyB2b2lkIGN5cHJlc3Nfc2VuZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCWludCBjb3VudCA9IDAsIHJlc3VsdCwgb2Zmc2V0LCBhY3R1YWxfc2l6ZTsKKwlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJZGJnKCIlcyAtIGludGVycnVwdCBvdXQgc2l6ZSBpcyAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+aW50ZXJydXB0X291dF9zaXplKTsKKwkKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChwcml2LT53cml0ZV91cmJfaW5fdXNlKSB7CisJCWRiZygiJXMgLSBjYW4ndCB3cml0ZSwgdXJiIGluIHVzZSIsIF9fRlVOQ1RJT05fXyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkvKiBjbGVhciBidWZmZXIgKi8KKwltZW1zZXQocG9ydC0+aW50ZXJydXB0X291dF91cmItPnRyYW5zZmVyX2J1ZmZlciwgMCwgcG9ydC0+aW50ZXJydXB0X291dF9zaXplKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3dpdGNoIChwb3J0LT5pbnRlcnJ1cHRfb3V0X3NpemUpIHsKKwkJY2FzZSAzMjoKKwkJCS8vIHRoaXMgaXMgZm9yIHRoZSBDWTdDNjQwMTMuLi4KKwkJCW9mZnNldCA9IDI7CisJCQlwb3J0LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlclswXSA9IHByaXYtPmxpbmVfY29udHJvbDsKKwkJCWJyZWFrOworCQljYXNlIDg6CisJCQkvLyB0aGlzIGlzIGZvciB0aGUgQ1k3QzYzNzQzLi4uCisJCQlvZmZzZXQgPSAxOworCQkJcG9ydC0+aW50ZXJydXB0X291dF9idWZmZXJbMF0gPSBwcml2LT5saW5lX2NvbnRyb2w7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRiZygiJXMgLSB3cm9uZyBwYWNrZXQgc2l6ZSIsIF9fRlVOQ1RJT05fXyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm47CisJfQorCisJaWYgKHByaXYtPmxpbmVfY29udHJvbCAmIENPTlRST0xfUkVTRVQpCisJCXByaXYtPmxpbmVfY29udHJvbCAmPSB+Q09OVFJPTF9SRVNFVDsKKworCWlmIChwcml2LT5jbWRfY3RybCkgeworCQlwcml2LT5jbWRfY291bnQrKzsKKwkJZGJnKCIlcyAtIGxpbmUgY29udHJvbCBjb21tYW5kIGJlaW5nIGlzc3VlZCIsIF9fRlVOQ1RJT05fXyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJZ290byBzZW5kOworCX0gZWxzZQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwljb3VudCA9IGN5cHJlc3NfYnVmX2dldChwcml2LT5idWYsICZwb3J0LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlcltvZmZzZXRdLAorCQkJCXBvcnQtPmludGVycnVwdF9vdXRfc2l6ZS1vZmZzZXQpOworCisJaWYgKGNvdW50ID09IDApIHsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAocG9ydC0+aW50ZXJydXB0X291dF9zaXplKSB7CisJCWNhc2UgMzI6CisJCQlwb3J0LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlclsxXSA9IGNvdW50OworCQkJYnJlYWs7CisJCWNhc2UgODoKKwkJCXBvcnQtPmludGVycnVwdF9vdXRfYnVmZmVyWzBdIHw9IGNvdW50OworCX0KKworCWRiZygiJXMgLSBjb3VudCBpcyAlZCIsIF9fRlVOQ1RJT05fXywgY291bnQpOworCitzZW5kOgorCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+d3JpdGVfdXJiX2luX3VzZSA9IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJaWYgKHByaXYtPmNtZF9jdHJsKQorCQlhY3R1YWxfc2l6ZSA9IDE7CisJZWxzZQorCQlhY3R1YWxfc2l6ZSA9IGNvdW50ICsgKHBvcnQtPmludGVycnVwdF9vdXRfc2l6ZSA9PSAzMiA/IDIgOiAxKTsKKwkKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgcG9ydC0+aW50ZXJydXB0X291dF9zaXplLAorCQkJICAgICAgcG9ydC0+aW50ZXJydXB0X291dF91cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwlwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGFjdHVhbF9zaXplOworCXBvcnQtPmludGVycnVwdF9vdXRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiAocG9ydC0+aW50ZXJydXB0X291dF91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sCisJCQlyZXN1bHQpOworCQlwcml2LT53cml0ZV91cmJfaW5fdXNlID0gMDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChwcml2LT5jbWRfY3RybCkgeworCQlwcml2LT5jbWRfY3RybCA9IDA7CisJfQorCXByaXYtPmJ5dGVzX291dCArPSBjb3VudDsgLyogZG8gbm90IGNvdW50IHRoZSBsaW5lIGNvbnRyb2wgYW5kIHNpemUgYnl0ZXMgKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlzY2hlZHVsZV93b3JrKCZwb3J0LT53b3JrKTsKK30gLyogY3lwcmVzc19zZW5kICovCisKKworLyogcmV0dXJucyBob3cgbXVjaCBzcGFjZSBpcyBhdmFpbGFibGUgaW4gdGhlIHNvZnQgYnVmZmVyICovCitzdGF0aWMgaW50IGN5cHJlc3Nfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IHJvb20gPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcm9vbSA9IGN5cHJlc3NfYnVmX3NwYWNlX2F2YWlsKHByaXYtPmJ1Zik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX0ZVTkNUSU9OX18sIHJvb20pOworCXJldHVybiByb29tOworfQorCisKK3N0YXRpYyBpbnQgY3lwcmVzc190aW9jbWdldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlfX3U4IHN0YXR1cywgY29udHJvbDsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQorCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwljb250cm9sID0gcHJpdi0+bGluZV9jb250cm9sOworCXN0YXR1cyA9IHByaXYtPmN1cnJlbnRfc3RhdHVzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJlc3VsdCA9ICgoY29udHJvbCAmIENPTlRST0xfRFRSKSAgICAgICAgPyBUSU9DTV9EVFIgOiAwKQorCQl8ICgoY29udHJvbCAmIENPTlRST0xfUlRTKSAgICAgICA/IFRJT0NNX1JUUyA6IDApCisJCXwgKChzdGF0dXMgJiBVQVJUX0NUUykgICAgICAgID8gVElPQ01fQ1RTIDogMCkKKwkJfCAoKHN0YXR1cyAmIFVBUlRfRFNSKSAgICAgICAgPyBUSU9DTV9EU1IgOiAwKQorCQl8ICgoc3RhdHVzICYgVUFSVF9SSSkgICAgICAgICA/IFRJT0NNX1JJICA6IDApCisJCXwgKChzdGF0dXMgJiBVQVJUX0NEKSAgICAgICAgID8gVElPQ01fQ0QgIDogMCk7CisKKwlkYmcoIiVzIC0gcmVzdWx0ID0gJXgiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyBpbnQgY3lwcmVzc190aW9jbXNldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKHNldCAmIFRJT0NNX1JUUykKKwkJcHJpdi0+bGluZV9jb250cm9sIHw9IENPTlRST0xfUlRTOworCWlmIChzZXQgJiBUSU9DTV9EVFIpCisJCXByaXYtPmxpbmVfY29udHJvbCB8PSBDT05UUk9MX0RUUjsKKwlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpCisJCXByaXYtPmxpbmVfY29udHJvbCAmPSB+Q09OVFJPTF9SVFM7CisJaWYgKGNsZWFyICYgVElPQ01fRFRSKQorCQlwcml2LT5saW5lX2NvbnRyb2wgJj0gfkNPTlRST0xfRFRSOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXByaXYtPmNtZF9jdHJsID0gMTsKKwlyZXR1cm4gY3lwcmVzc193cml0ZShwb3J0LCBOVUxMLCAwKTsKK30KKworCitzdGF0aWMgaW50IGN5cHJlc3NfaW9jdGwgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWRiZygiJXMgLSBwb3J0ICVkLCBjbWQgMHglLjR4IiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIGNtZCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCQljYXNlIFRJT0NHU0VSSUFMOgorCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsIHBvcnQtPnR0eS0+dGVybWlvcywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkpIHsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJCXJldHVybiAoMCk7CisJCQlicmVhazsKKwkJY2FzZSBUSU9DU1NFUklBTDoKKwkJCWlmIChjb3B5X2Zyb21fdXNlcihwb3J0LT50dHktPnRlcm1pb3MsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkpIHsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJCS8qIGhlcmUgd2UgbmVlZCB0byBjYWxsIGN5cHJlc3Nfc2V0X3Rlcm1pb3MgdG8gaW52b2tlIHRoZSBuZXcgc2V0dGluZ3MgKi8KKwkJCWN5cHJlc3Nfc2V0X3Rlcm1pb3MocG9ydCwgJnByaXYtPnRtcF90ZXJtaW9zKTsKKwkJCXJldHVybiAoMCk7CisJCQlicmVhazsKKwkJLyogdGhlc2UgYXJlIGNhbGxlZCB3aGVuIHNldHRpbmcgYmF1ZCByYXRlIGZyb20gZ3BzZCAqLworCQljYXNlIFRDR0VUUzoKKwkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCBwb3J0LT50dHktPnRlcm1pb3MsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpKSB7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCQlyZXR1cm4gKDApOworCQkJYnJlYWs7CisJCWNhc2UgVENTRVRTOgorCQkJaWYgKGNvcHlfZnJvbV91c2VyKHBvcnQtPnR0eS0+dGVybWlvcywgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKSkgeworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQkJLyogaGVyZSB3ZSBuZWVkIHRvIGNhbGwgY3lwcmVzc19zZXRfdGVybWlvcyB0byBpbnZva2UgdGhlIG5ldyBzZXR0aW5ncyAqLworCQkJY3lwcmVzc19zZXRfdGVybWlvcyhwb3J0LCAmcHJpdi0+dG1wX3Rlcm1pb3MpOworCQkJcmV0dXJuICgwKTsKKwkJCWJyZWFrOworCQkvKiBUaGlzIGNvZGUgY29tZXMgZnJvbSBkcml2ZXJzL2NoYXIvc2VyaWFsLmMgYW5kIGZ0ZGlfc2lvLmMgKi8KKwkJY2FzZSBUSU9DTUlXQUlUOgorCQkJd2hpbGUgKHByaXYgIT0gTlVMTCkgeworCQkJCWludGVycnVwdGlibGVfc2xlZXBfb24oJnByaXYtPmRlbHRhX21zcl93YWl0KTsKKwkJCQkvKiBzZWUgaWYgYSBzaWduYWwgZGlkIGl0ICovCisJCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQkJCWVsc2UgeworCQkJCQljaGFyIGRpZmYgPSBwcml2LT5kaWZmX3N0YXR1czsKKworCQkJCQlpZiAoZGlmZiA9PSAwKSB7CisJCQkJCQlyZXR1cm4gLUVJTzsgLyogbm8gY2hhbmdlID0+IGVycm9yICovCisJCQkJCX0KKwkJCQkJCisJCQkJCS8qIGNvbnN1bWUgYWxsIGV2ZW50cyAqLworCQkJCQlwcml2LT5kaWZmX3N0YXR1cyA9IDA7CisKKwkJCQkJLyogcmV0dXJuIDAgaWYgY2FsbGVyIHdhbnRlZCB0byBrbm93IGFib3V0IHRoZXNlIGJpdHMgKi8KKwkJCQkJaWYgKCAoKGFyZyAmIFRJT0NNX1JORykgJiYgKGRpZmYgJiBVQVJUX1JJKSkgfHwKKwkJCQkJICAgICAoKGFyZyAmIFRJT0NNX0RTUikgJiYgKGRpZmYgJiBVQVJUX0RTUikpIHx8CisJCQkJCSAgICAgKChhcmcgJiBUSU9DTV9DRCkgJiYgKGRpZmYgJiBVQVJUX0NEKSkgfHwKKwkJCQkJICAgICAoKGFyZyAmIFRJT0NNX0NUUykgJiYgKGRpZmYgJiBVQVJUX0NUUykpICkgeworCQkJCQkJcmV0dXJuIDA7CisJCQkJCX0KKwkJCQkJLyogb3RoZXJ3aXNlIGNhbGxlciBjYW4ndCBjYXJlIGxlc3MgYWJvdXQgd2hhdCBoYXBwZW5lZCwKKwkJCQkJICogYW5kIHNvIHdlIGNvbnRpbnVlIHRvIHdhaXQgZm9yIG1vcmUgZXZlbnRzLgorCQkJCQkgKi8KKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJZGJnKCIlcyAtIGFyZyBub3Qgc3VwcG9ydGVkIC0gaXQgd2FzIDB4JTA0eCAtIGNoZWNrIGluY2x1ZGUvYXNtL2lvY3Rscy5oIiwgX19GVU5DVElPTl9fLCBjbWQpOworCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30gLyogY3lwcmVzc19pb2N0bCAqLworCisKK3N0YXRpYyB2b2lkIGN5cHJlc3Nfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IGRhdGFfYml0cywgc3RvcF9iaXRzLCBwYXJpdHlfdHlwZSwgcGFyaXR5X2VuYWJsZTsKKwl1bnNpZ25lZCBjZmxhZywgaWZsYWcsIGJhdWRfbWFzazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCV9fdTggb2xkbGluZXM7CisJaW50IGxpbmVjaGFuZ2U7CisJCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKCghdHR5KSB8fCAoIXR0eS0+dGVybWlvcykpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSBzdHJ1Y3R1cmVzIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKCFwcml2LT50ZXJtaW9zX2luaXRpYWxpemVkKSB7CisJCWlmIChwcml2LT5jaGlwdHlwZSA9PSBDVF9FQVJUSE1BVEUpIHsKKwkJCSoodHR5LT50ZXJtaW9zKSA9IHR0eV9zdGRfdGVybWlvczsKKwkJCXR0eS0+dGVybWlvcy0+Y19jZmxhZyA9IEI0ODAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwkJfSBlbHNlIGlmIChwcml2LT5jaGlwdHlwZSA9PSBDVF9DWVBISURDT00pIHsKKwkJCSoodHR5LT50ZXJtaW9zKSA9IHR0eV9zdGRfdGVybWlvczsKKwkJCXR0eS0+dGVybWlvcy0+Y19jZmxhZyA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwkJfQorCQlwcml2LT50ZXJtaW9zX2luaXRpYWxpemVkID0gMTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJaWZsYWcgPSB0dHktPnRlcm1pb3MtPmNfaWZsYWc7CisKKwkvKiBjaGVjayBpZiB0aGVyZSBhcmUgbmV3IHNldHRpbmdzICovCisJaWYgKG9sZF90ZXJtaW9zKSB7CisJCWlmICgoY2ZsYWcgIT0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWcpIHx8CisJCSAgICAoUkVMRVZBTlRfSUZMQUcoaWZsYWcpICE9IFJFTEVWQU5UX0lGTEFHKG9sZF90ZXJtaW9zLT5jX2lmbGFnKSkpIHsKKwkJCWRiZygiJXMgLSBhdHRlbXB0aW5nIHRvIHNldCBuZXcgdGVybWlvcyBzZXR0aW5ncyIsIF9fRlVOQ1RJT05fXyk7CisJCQkvKiBzaG91bGQgbWFrZSBhIGNvcHkgb2YgdGhpcyBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIHdyb25nIGluIHRoZSBmdW5jdGlvbiwgd2UgY2FuIHJlc3RvcmUgaXQgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQlwcml2LT50bXBfdGVybWlvcyA9ICoodHR5LT50ZXJtaW9zKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsgCisJCX0gZWxzZSB7CisJCQlkYmcoIiVzIC0gbm90aGluZyB0byBkbywgZXhpdGluZyIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UKKwkJcmV0dXJuOworCisJLyogc2V0IG51bWJlciBvZiBkYXRhIGJpdHMsIHBhcml0eSwgc3RvcCBiaXRzICovCisJLyogd2hlbiBwYXJpdHkgaXMgZGlzYWJsZWQgdGhlIHBhcml0eSB0eXBlIGJpdCBpcyBpZ25vcmVkICovCisKKwlzdG9wX2JpdHMgPSBjZmxhZyAmIENTVE9QQiA/IDEgOiAwOyAvKiAxIG1lYW5zIDIgc3RvcCBiaXRzLCAwIG1lYW5zIDEgc3RvcCBiaXQgKi8KKwkKKwlpZiAoY2ZsYWcgJiBQQVJFTkIpIHsKKwkJcGFyaXR5X2VuYWJsZSA9IDE7CisJCXBhcml0eV90eXBlID0gY2ZsYWcgJiBQQVJPREQgPyAxIDogMDsgLyogMSBtZWFucyBvZGQgcGFyaXR5LCAwIG1lYW5zIGV2ZW4gcGFyaXR5ICovCisJfSBlbHNlCisJCXBhcml0eV9lbmFibGUgPSBwYXJpdHlfdHlwZSA9IDA7CisKKwlpZiAoY2ZsYWcgJiBDU0laRSkgeworCQlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpIHsKKwkJCWNhc2UgQ1M1OiBkYXRhX2JpdHMgPSAwOyBicmVhazsKKwkJCWNhc2UgQ1M2OiBkYXRhX2JpdHMgPSAxOyBicmVhazsKKwkJCWNhc2UgQ1M3OiBkYXRhX2JpdHMgPSAyOyBicmVhazsKKwkJCWNhc2UgQ1M4OiBkYXRhX2JpdHMgPSAzOyBicmVhazsKKwkJCWRlZmF1bHQ6IGVycigiJXMgLSBDU0laRSB3YXMgc2V0LCBidXQgbm90IENTNS1DUzgiLCBfX0ZVTkNUSU9OX18pOyBkYXRhX2JpdHMgPSAzOworCQl9CisJfSBlbHNlCisJCWRhdGFfYml0cyA9IDM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCW9sZGxpbmVzID0gcHJpdi0+bGluZV9jb250cm9sOworCWlmICgoY2ZsYWcgJiBDQkFVRCkgPT0gQjApIHsKKwkJLyogZHJvcCBkdHIgYW5kIHJ0cyAqLworCQlkYmcoIiVzIC0gZHJvcHBpbmcgdGhlIGxpbmVzLCBiYXVkIHJhdGUgMGJwcyIsIF9fRlVOQ1RJT05fXyk7CisJCWJhdWRfbWFzayA9IEIwOworCQlwcml2LT5saW5lX2NvbnRyb2wgJj0gfihDT05UUk9MX0RUUiB8IENPTlRST0xfUlRTKTsKKwl9IGVsc2UgeworCQliYXVkX21hc2sgPSAoY2ZsYWcgJiBDQkFVRCk7CisJCXN3aXRjaChiYXVkX21hc2spIHsKKwkJCWNhc2UgQjMwMDogZGJnKCIlcyAtIHNldHRpbmcgYmF1ZCAzMDBicHMiLCBfX0ZVTkNUSU9OX18pOyBicmVhazsKKwkJCWNhc2UgQjYwMDogZGJnKCIlcyAtIHNldHRpbmcgYmF1ZCA2MDBicHMiLCBfX0ZVTkNUSU9OX18pOyBicmVhazsKKwkJCWNhc2UgQjEyMDA6IGRiZygiJXMgLSBzZXR0aW5nIGJhdWQgMTIwMGJwcyIsIF9fRlVOQ1RJT05fXyk7IGJyZWFrOworCQkJY2FzZSBCMjQwMDogZGJnKCIlcyAtIHNldHRpbmcgYmF1ZCAyNDAwYnBzIiwgX19GVU5DVElPTl9fKTsgYnJlYWs7CisJCQljYXNlIEI0ODAwOiBkYmcoIiVzIC0gc2V0dGluZyBiYXVkIDQ4MDBicHMiLCBfX0ZVTkNUSU9OX18pOyBicmVhazsKKwkJCWNhc2UgQjk2MDA6IGRiZygiJXMgLSBzZXR0aW5nIGJhdWQgOTYwMGJwcyIsIF9fRlVOQ1RJT05fXyk7IGJyZWFrOworCQkJY2FzZSBCMTkyMDA6IGRiZygiJXMgLSBzZXR0aW5nIGJhdWQgMTkyMDBicHMiLCBfX0ZVTkNUSU9OX18pOyBicmVhazsKKwkJCWNhc2UgQjM4NDAwOiBkYmcoIiVzIC0gc2V0dGluZyBiYXVkIDM4NDAwYnBzIiwgX19GVU5DVElPTl9fKTsgYnJlYWs7CisJCQljYXNlIEI1NzYwMDogZGJnKCIlcyAtIHNldHRpbmcgYmF1ZCA1NzYwMGJwcyIsIF9fRlVOQ1RJT05fXyk7IGJyZWFrOworCQkJY2FzZSBCMTE1MjAwOiBkYmcoIiVzIC0gc2V0dGluZyBiYXVkIDExNTIwMGJwcyIsIF9fRlVOQ1RJT05fXyk7IGJyZWFrOworCQkJZGVmYXVsdDogZGJnKCIlcyAtIHVua25vd24gbWFza2VkIGJhdWQgcmF0ZSIsIF9fRlVOQ1RJT05fXyk7CisJCX0KKwkJcHJpdi0+bGluZV9jb250cm9sIHw9IENPTlRST0xfRFRSOworCQkKKwkJLyogdG9nZ2xlIENSVFNDVFM/IC0gZG9uJ3QgZG8gdGhpcyBpZiBiZWluZyBjYWxsZWQgZnJvbSBjeXByZXNzX29wZW4gKi8KKwkJaWYgKCFwcml2LT5jYWxsZWRmcm9tb3BlbikgeworCQkJaWYgKGNmbGFnICYgQ1JUU0NUUykKKwkJCQlwcml2LT5saW5lX2NvbnRyb2wgfD0gQ09OVFJPTF9SVFM7CisJCQllbHNlCisJCQkJcHJpdi0+bGluZV9jb250cm9sICY9IH5DT05UUk9MX1JUUzsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCisJZGJnKCIlcyAtIHNlbmRpbmcgJWQgc3RvcF9iaXRzLCAlZCBwYXJpdHlfZW5hYmxlLCAlZCBwYXJpdHlfdHlwZSwgJWQgZGF0YV9iaXRzICgrNSkiLCBfX0ZVTkNUSU9OX18sCisJICAgIHN0b3BfYml0cywgcGFyaXR5X2VuYWJsZSwgcGFyaXR5X3R5cGUsIGRhdGFfYml0cyk7CisKKwljeXByZXNzX3NlcmlhbF9jb250cm9sKHBvcnQsIGJhdWRfbWFzaywgZGF0YV9iaXRzLCBzdG9wX2JpdHMsIHBhcml0eV9lbmFibGUsCisJCQkgICAgICAgcGFyaXR5X3R5cGUsIDAsIENZUFJFU1NfU0VUX0NPTkZJRyk7CisKKwltc2xlZXAoNTApOwkJCS8qIGdpdmUgc29tZSB0aW1lIGJldHdlZW4gY2hhbmdlIGFuZCByZWFkICg1MG1zKSAqLworCisJLyogd2UgcGVyZm9ybSBhIENZUFJFU1NfR0VUX0NPTkZJRyBzbyB0aGF0IHRoZSBjdXJyZW50IHNldHRpbmdzIGFyZSBmaWxsZWQgaW50byB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAgICAgICAgICogdGhpcyBzaG91bGQgY29uZmlybSB0aGF0IGFsbCBpcyB3b3JraW5nIGlmIGl0IHJldHVybnMgd2hhdCB3ZSBqdXN0IHNldCAqLworCWN5cHJlc3Nfc2VyaWFsX2NvbnRyb2wocG9ydCwgMCwgMCwgMCwgMCwgMCwgMCwgQ1lQUkVTU19HRVRfQ09ORklHKTsKKworCS8qIEhlcmUgd2UgY2FuIGRlZmluZSBjdXN0b20gdHR5IHNldHRpbmdzIGZvciBkZXZpY2VzCisgICAgICAgICAqCisgICAgICAgICAqIHRoZSBtYWluIHR0eSB0ZXJtaW9zIGZsYWcgYmFzZSBjb21lcyBmcm9tIGVtcGVnLmMKKyAgICAgICAgICovCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwkKKwlpZiAoIChwcml2LT5jaGlwdHlwZSA9PSBDVF9FQVJUSE1BVEUpICYmIChwcml2LT5iYXVkX3JhdGUgPT0gNDgwMCkgKSB7CisKKwkJZGJnKCJVc2luZyBjdXN0b20gdGVybWlvcyBzZXR0aW5ncyBmb3IgYSBiYXVkIHJhdGUgb2YgNDgwMGJwcy4iKTsKKwkJLyogZGVmaW5lIGN1c3RvbSB0ZXJtaW9zIHNldHRpbmdzIGZvciBOTUVBIHByb3RvY29sICovCisKKwkJCisJCXR0eS0+dGVybWlvcy0+Y19pZmxhZyAvKiBpbnB1dCBtb2RlcyAtICovCisJCQkmPSB+KElHTkJSSwkJLyogZGlzYWJsZSBpZ25vcmUgYnJlYWsgKi8KKwkJCXwgQlJLSU5UCQkvKiBkaXNhYmxlIGJyZWFrIGNhdXNlcyBpbnRlcnJ1cHQgKi8KKwkJCXwgUEFSTVJLCQkvKiBkaXNhYmxlIG1hcmsgcGFyaXR5IGVycm9ycyAqLworCQkJfCBJU1RSSVAJCS8qIGRpc2FibGUgY2xlYXIgaGlnaCBiaXQgb2YgaW5wdXQgY2hhcmFjdGVycyAqLworCQkJfCBJTkxDUgkJCS8qIGRpc2FibGUgdHJhbnNsYXRlIE5MIHRvIENSICovCisJCQl8IElHTkNSCQkJLyogZGlzYWJsZSBpZ25vcmUgQ1IgKi8KKwkJCXwgSUNSTkwJCQkvKiBkaXNhYmxlIHRyYW5zbGF0ZSBDUiB0byBOTCAqLworCQkJfCBJWE9OKTsJCS8qIGRpc2FibGUgZW5hYmxlIFhPTi9YT0ZGIGZsb3cgY29udHJvbCAqLworCQkKKwkJdHR5LT50ZXJtaW9zLT5jX29mbGFnIC8qIG91dHB1dCBtb2RlcyAqLworCQkJJj0gfk9QT1NUOwkJLyogZGlzYWJsZSBwb3N0cHJvY2VzcyBvdXRwdXQgY2hhcmFjdGVycyAqLworCQkKKwkJdHR5LT50ZXJtaW9zLT5jX2xmbGFnIC8qIGxpbmUgZGlzY2lwbGluZSBtb2RlcyAqLworCQkJJj0gfihFQ0hPIAkJLyogZGlzYWJsZSBlY2hvIGlucHV0IGNoYXJhY3RlcnMgKi8KKwkJCXwgRUNIT05MCQkvKiBkaXNhYmxlIGVjaG8gbmV3IGxpbmUgKi8KKwkJCXwgSUNBTk9OCQkvKiBkaXNhYmxlIGVyYXNlLCBraWxsLCB3ZXJhc2UsIGFuZCBycHJudCBzcGVjaWFsIGNoYXJhY3RlcnMgKi8KKwkJCXwgSVNJRwkJCS8qIGRpc2FibGUgaW50ZXJydXB0LCBxdWl0LCBhbmQgc3VzcGVuZCBzcGVjaWFsIGNoYXJhY3RlcnMgKi8KKwkJCXwgSUVYVEVOKTsJCS8qIGRpc2FibGUgbm9uLVBPU0lYIHNwZWNpYWwgY2hhcmFjdGVycyAqLworCisJfSBlbHNlIGlmIChwcml2LT5jaGlwdHlwZSA9PSBDVF9DWVBISURDT00pIHsKKworCQkvLyBTb2Z0d2FyZSBhcHAgaGFuZGxpbmcgaXQgZm9yIGRldmljZS4uLgkKKworCX0KKwlsaW5lY2hhbmdlID0gKHByaXYtPmxpbmVfY29udHJvbCAhPSBvbGRsaW5lcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJLyogaWYgbmVjZXNzYXJ5LCBzZXQgbGluZXMgKi8KKwlpZiAoIXByaXYtPmNhbGxlZGZyb21vcGVuICYmIGxpbmVjaGFuZ2UpIHsKKwkJcHJpdi0+Y21kX2N0cmwgPSAxOworCQljeXByZXNzX3dyaXRlKHBvcnQsIE5VTEwsIDApOworCX0KKworCWlmIChwcml2LT5jYWxsZWRmcm9tb3BlbikKKwkJcHJpdi0+Y2FsbGVkZnJvbW9wZW4gPSAwOworCQorfSAvKiBjeXByZXNzX3NldF90ZXJtaW9zICovCisKKyAKKy8qIHJldHVybnMgYW1vdW50IG9mIGRhdGEgc3RpbGwgbGVmdCBpbiBzb2Z0IGJ1ZmZlciAqLworc3RhdGljIGludCBjeXByZXNzX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IGNoYXJzID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwljaGFycyA9IGN5cHJlc3NfYnVmX2RhdGFfYXZhaWwocHJpdi0+YnVmKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fRlVOQ1RJT05fXywgY2hhcnMpOworCXJldHVybiBjaGFyczsKK30KKworCitzdGF0aWMgdm9pZCBjeXByZXNzX3Rocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT5yeF9mbGFncyA9IFRIUk9UVExFRDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CSAgIAorfQorCisKK3N0YXRpYyB2b2lkIGN5cHJlc3NfdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCBhY3R1YWxseV90aHJvdHRsZWQsIHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWFjdHVhbGx5X3Rocm90dGxlZCA9IHByaXYtPnJ4X2ZsYWdzICYgQUNUVUFMTFlfVEhST1RUTEVEOworCXByaXYtPnJ4X2ZsYWdzID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoYWN0dWFsbHlfdGhyb3R0bGVkKSB7CisJCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgY3lwcmVzc19yZWFkX2ludF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY2hhciB0dHlfZmxhZyA9IFRUWV9OT1JNQUw7CQorCWludCBoYXZlZGF0YSA9IDA7CisJaW50IGJ5dGVzID0gMDsKKwlpbnQgcmVzdWx0OworCWludCBpID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAocHJpdi0+cnhfZmxhZ3MgJiBUSFJPVFRMRUQpIHsKKwkJZGJnKCIlcyAtIG5vdyB0aHJvdHRsaW5nIiwgX19GVU5DVElPTl9fKTsKKwkJcHJpdi0+cnhfZmxhZ3MgfD0gQUNUVUFMTFlfVEhST1RUTEVEOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICghdHR5KSB7CisJCWRiZygiJXMgLSBiYWQgdHR5IHBvaW50ZXIgLSBleGl0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3dpdGNoKHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQljYXNlIDMyOgorCQkJLy8gVGhpcyBpcyBmb3IgdGhlIENZN0M2NDAxMy4uLgorCQkJcHJpdi0+Y3VycmVudF9zdGF0dXMgPSBkYXRhWzBdICYgMHhGODsKKwkJCWJ5dGVzID0gZGF0YVsxXSsyOworCQkJaT0yOworCQkJaWYgKGJ5dGVzID4gMikKKwkJCQloYXZlZGF0YSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJLy8gVGhpcyBpcyBmb3IgdGhlIENZN0M2Mzc0My4uLgorCQkJcHJpdi0+Y3VycmVudF9zdGF0dXMgPSBkYXRhWzBdICYgMHhGODsKKwkJCWJ5dGVzID0gKGRhdGFbMF0gJiAweDA3KSsxOworCQkJaT0xOworCQkJaWYgKGJ5dGVzID4gMSkKKwkJCQloYXZlZGF0YSA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRiZygiJXMgLSB3cm9uZyBwYWNrZXQgc2l6ZSAtIHJlY2VpdmVkICVkIGJ5dGVzIiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkJZ290byBjb250aW51ZV9yZWFkOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEgKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCS8qIGNoZWNrIHRvIHNlZSBpZiBzdGF0dXMgaGFzIGNoYW5nZWQgKi8KKwlpZiAocHJpdiAhPSBOVUxMKSB7CisJCWlmIChwcml2LT5jdXJyZW50X3N0YXR1cyAhPSBwcml2LT5wcmV2X3N0YXR1cykgeworCQkJcHJpdi0+ZGlmZl9zdGF0dXMgfD0gcHJpdi0+Y3VycmVudF9zdGF0dXMgXiBwcml2LT5wcmV2X3N0YXR1czsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCQkJcHJpdi0+cHJldl9zdGF0dXMgPSBwcml2LT5jdXJyZW50X3N0YXR1czsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CQorCisJLyogaGFuZ3VwLCBhcyBkZWZpbmVkIGluIGFjbS5jLi4uIHRoaXMgbWlnaHQgYmUgYSBiYWQgcGxhY2UgZm9yIGl0IHRob3VnaCAqLworCWlmICh0dHkgJiYgISh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDTE9DQUwpICYmICEocHJpdi0+Y3VycmVudF9zdGF0dXMgJiBVQVJUX0NEKSkgeworCQlkYmcoIiVzIC0gY2FsbGluZyBoYW5ndXAiLCBfX0ZVTkNUSU9OX18pOworCQl0dHlfaGFuZ3VwKHR0eSk7CisJCWdvdG8gY29udGludWVfcmVhZDsKKwl9CisKKwkvKiBUaGVyZSBpcyBvbmUgZXJyb3IgYml0Li4uIEknbSBhc3N1bWluZyBpdCBpcyBhIHBhcml0eSBlcnJvciBpbmRpY2F0b3IKKwkgKiBhcyB0aGUgZ2VuZXJpYyBmaXJtd2FyZSB3aWxsIHNldCB0aGlzIGJpdCB0byAxIGlmIGEgcGFyaXR5IGVycm9yIG9jY3Vycy4KKwkgKiBJIGNhbiBub3QgZmluZCByZWZlcmVuY2UgdG8gYW55IG90aGVyIGVycm9yIGV2ZW50cy4KKwkgKgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKHByaXYtPmN1cnJlbnRfc3RhdHVzICYgQ1lQX0VSUk9SKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJdHR5X2ZsYWcgPSBUVFlfUEFSSVRZOworCQlkYmcoIiVzIC0gUGFyaXR5IEVycm9yIGRldGVjdGVkIiwgX19GVU5DVElPTl9fKTsKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJLyogcHJvY2VzcyByZWFkIGlmIHRoZXJlIGlzIGRhdGEgb3RoZXIgdGhhbiBsaW5lIHN0YXR1cyAqLworCWlmICh0dHkgJiYgKGJ5dGVzID4gaSkpIHsKKwkJZm9yICg7IGkgPCBieXRlcyA7ICsraSkgeworCQkJZGJnKCJwdXNoaW5nIGJ5dGUgbnVtYmVyICVkIC0gJWQgLSAlYyIsaSxkYXRhW2ldLGRhdGFbaV0pOworCQkJaWYodHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpIHsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJfQorCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCB0dHlfZmxhZyk7CisJCX0KKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2gocG9ydC0+dHR5KTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPmJ5dGVzX2luICs9IGJ5dGVzOyAgLyogY29udHJvbCBhbmQgc3RhdHVzIGJ5dGUocykgYXJlIGFsc28gY291bnRlZCAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworY29udGludWVfcmVhZDoKKwkKKwkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQuLi4gdW5sZXNzIHRoZSBwb3J0IGhhcyBjbG9zZWQuICAqLworCisJaWYgKHBvcnQtPm9wZW5fY291bnQgPiAwKSB7CisJdXNiX2ZpbGxfaW50X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKKwkJdXNiX3JjdmludHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIHBvcnQtPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3MpLAorCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCXBvcnQtPmludGVycnVwdF9pbl91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCWN5cHJlc3NfcmVhZF9pbnRfY2FsbGJhY2ssIHBvcnQsCisJCXBvcnQtPmludGVycnVwdF9pbl91cmItPmludGVydmFsKTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KQorCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCX0KKwkKKwlyZXR1cm47Cit9IC8qIGN5cHJlc3NfcmVhZF9pbnRfY2FsbGJhY2sgKi8KKworCitzdGF0aWMgdm9pZCBjeXByZXNzX3dyaXRlX2ludF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJCWNhc2UgMDoKKwkJCS8qIHN1Y2Nlc3MgKi8KKwkJCWJyZWFrOworCQljYXNlIC1FQ09OTlJFU0VUOgorCQljYXNlIC1FTk9FTlQ6CisJCWNhc2UgLUVTSFVURE9XTjoKKwkJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCQlwcml2LT53cml0ZV91cmJfaW5fdXNlID0gMDsKKwkJCXJldHVybjsKKwkJZGVmYXVsdDoKKwkJCS8qIGVycm9yIGluIHRoZSB1cmIsIHNvIHdlIGhhdmUgdG8gcmVzdWJtaXQgaXQgKi8KKwkJCWRiZygiJXMgLSBPdmVyZmxvdyBpbiB3cml0ZSIsIF9fRlVOQ1RJT05fXyk7CisJCQlkYmcoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJCXBvcnQtPmludGVycnVwdF9vdXRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMTsKKwkJCXBvcnQtPmludGVycnVwdF9vdXRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwkJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9vdXRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChyZXN1bHQpCisJCQkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLAorCQkJCQlfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCQllbHNlCisJCQkJcmV0dXJuOworCX0KKwkKKwlwcml2LT53cml0ZV91cmJfaW5fdXNlID0gMDsKKwkKKwkvKiBzZW5kIGFueSBidWZmZXJlZCBkYXRhICovCisJY3lwcmVzc19zZW5kKHBvcnQpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogV3JpdGUgYnVmZmVyIGZ1bmN0aW9ucyAtIGJ1ZmZlcmluZyBjb2RlIGZyb20gcGwyMzAzIHVzZWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIGN5cHJlc3NfYnVmX2FsbG9jCisgKgorICogQWxsb2NhdGUgYSBjaXJjdWxhciBidWZmZXIgYW5kIGFsbCBhc3NvY2lhdGVkIG1lbW9yeS4KKyAqLworCitzdGF0aWMgc3RydWN0IGN5cHJlc3NfYnVmICpjeXByZXNzX2J1Zl9hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKworCXN0cnVjdCBjeXByZXNzX2J1ZiAqY2I7CisKKworCWlmIChzaXplID09IDApCisJCXJldHVybiBOVUxMOworCisJY2IgPSAoc3RydWN0IGN5cHJlc3NfYnVmICopa21hbGxvYyhzaXplb2Yoc3RydWN0IGN5cHJlc3NfYnVmKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNiID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJY2ItPmJ1Zl9idWYgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmIChjYi0+YnVmX2J1ZiA9PSBOVUxMKSB7CisJCWtmcmVlKGNiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJY2ItPmJ1Zl9zaXplID0gc2l6ZTsKKwljYi0+YnVmX2dldCA9IGNiLT5idWZfcHV0ID0gY2ItPmJ1Zl9idWY7CisKKwlyZXR1cm4gY2I7CisKK30KKworCisvKgorICogY3lwcmVzc19idWZfZnJlZQorICoKKyAqIEZyZWUgdGhlIGJ1ZmZlciBhbmQgYWxsIGFzc29jaWF0ZWQgbWVtb3J5LgorICovCisKK3N0YXRpYyB2b2lkIGN5cHJlc3NfYnVmX2ZyZWUoc3RydWN0IGN5cHJlc3NfYnVmICpjYikKK3sKKwlpZiAoY2IgIT0gTlVMTCkgeworCQlpZiAoY2ItPmJ1Zl9idWYgIT0gTlVMTCkKKwkJCWtmcmVlKGNiLT5idWZfYnVmKTsKKwkJa2ZyZWUoY2IpOworCX0KK30KKworCisvKgorICogY3lwcmVzc19idWZfY2xlYXIKKyAqCisgKiBDbGVhciBvdXQgYWxsIGRhdGEgaW4gdGhlIGNpcmN1bGFyIGJ1ZmZlci4KKyAqLworCitzdGF0aWMgdm9pZCBjeXByZXNzX2J1Zl9jbGVhcihzdHJ1Y3QgY3lwcmVzc19idWYgKmNiKQoreworCWlmIChjYiAhPSBOVUxMKQorCQljYi0+YnVmX2dldCA9IGNiLT5idWZfcHV0OworCQkvKiBlcXVpdmFsZW50IHRvIGEgZ2V0IG9mIGFsbCBkYXRhIGF2YWlsYWJsZSAqLworfQorCisKKy8qCisgKiBjeXByZXNzX2J1Zl9kYXRhX2F2YWlsCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgZGF0YSBhdmFpbGFibGUgaW4gdGhlIGNpcmN1bGFyCisgKiBidWZmZXIuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBjeXByZXNzX2J1Zl9kYXRhX2F2YWlsKHN0cnVjdCBjeXByZXNzX2J1ZiAqY2IpCit7CisJaWYgKGNiICE9IE5VTEwpCisJCXJldHVybiAoKGNiLT5idWZfc2l6ZSArIGNiLT5idWZfcHV0IC0gY2ItPmJ1Zl9nZXQpICUgY2ItPmJ1Zl9zaXplKTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisKKy8qCisgKiBjeXByZXNzX2J1Zl9zcGFjZV9hdmFpbAorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgY2lyY3VsYXIKKyAqIGJ1ZmZlci4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGN5cHJlc3NfYnVmX3NwYWNlX2F2YWlsKHN0cnVjdCBjeXByZXNzX2J1ZiAqY2IpCit7CisJaWYgKGNiICE9IE5VTEwpCisJCXJldHVybiAoKGNiLT5idWZfc2l6ZSArIGNiLT5idWZfZ2V0IC0gY2ItPmJ1Zl9wdXQgLSAxKSAlIGNiLT5idWZfc2l6ZSk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworCisvKgorICogY3lwcmVzc19idWZfcHV0CisgKgorICogQ29weSBkYXRhIGRhdGEgZnJvbSBhIHVzZXIgYnVmZmVyIGFuZCBwdXQgaXQgaW50byB0aGUgY2lyY3VsYXIgYnVmZmVyLgorICogUmVzdHJpY3QgdG8gdGhlIGFtb3VudCBvZiBzcGFjZSBhdmFpbGFibGUuCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY3lwcmVzc19idWZfcHV0KHN0cnVjdCBjeXByZXNzX2J1ZiAqY2IsIGNvbnN0IGNoYXIgKmJ1ZiwKKwl1bnNpZ25lZCBpbnQgY291bnQpCit7CisKKwl1bnNpZ25lZCBpbnQgbGVuOworCisKKwlpZiAoY2IgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gID0gY3lwcmVzc19idWZfc3BhY2VfYXZhaWwoY2IpOworCWlmIChjb3VudCA+IGxlbikKKwkJY291bnQgPSBsZW47CisKKwlpZiAoY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBjYi0+YnVmX2J1ZiArIGNiLT5idWZfc2l6ZSAtIGNiLT5idWZfcHV0OworCWlmIChjb3VudCA+IGxlbikgeworCQltZW1jcHkoY2ItPmJ1Zl9wdXQsIGJ1ZiwgbGVuKTsKKwkJbWVtY3B5KGNiLT5idWZfYnVmLCBidWYrbGVuLCBjb3VudCAtIGxlbik7CisJCWNiLT5idWZfcHV0ID0gY2ItPmJ1Zl9idWYgKyBjb3VudCAtIGxlbjsKKwl9IGVsc2UgeworCQltZW1jcHkoY2ItPmJ1Zl9wdXQsIGJ1ZiwgY291bnQpOworCQlpZiAoY291bnQgPCBsZW4pCisJCQljYi0+YnVmX3B1dCArPSBjb3VudDsKKwkJZWxzZSAvKiBjb3VudCA9PSBsZW4gKi8KKwkJCWNiLT5idWZfcHV0ID0gY2ItPmJ1Zl9idWY7CisJfQorCisJcmV0dXJuIGNvdW50OworCit9CisKKworLyoKKyAqIGN5cHJlc3NfYnVmX2dldAorICoKKyAqIEdldCBkYXRhIGZyb20gdGhlIGNpcmN1bGFyIGJ1ZmZlciBhbmQgY29weSB0byB0aGUgZ2l2ZW4gYnVmZmVyLgorICogUmVzdHJpY3QgdG8gdGhlIGFtb3VudCBvZiBkYXRhIGF2YWlsYWJsZS4KKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBjeXByZXNzX2J1Zl9nZXQoc3RydWN0IGN5cHJlc3NfYnVmICpjYiwgY2hhciAqYnVmLAorCXVuc2lnbmVkIGludCBjb3VudCkKK3sKKworCXVuc2lnbmVkIGludCBsZW47CisKKworCWlmIChjYiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IGN5cHJlc3NfYnVmX2RhdGFfYXZhaWwoY2IpOworCWlmIChjb3VudCA+IGxlbikKKwkJY291bnQgPSBsZW47CisKKwlpZiAoY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBjYi0+YnVmX2J1ZiArIGNiLT5idWZfc2l6ZSAtIGNiLT5idWZfZ2V0OworCWlmIChjb3VudCA+IGxlbikgeworCQltZW1jcHkoYnVmLCBjYi0+YnVmX2dldCwgbGVuKTsKKwkJbWVtY3B5KGJ1ZitsZW4sIGNiLT5idWZfYnVmLCBjb3VudCAtIGxlbik7CisJCWNiLT5idWZfZ2V0ID0gY2ItPmJ1Zl9idWYgKyBjb3VudCAtIGxlbjsKKwl9IGVsc2UgeworCQltZW1jcHkoYnVmLCBjYi0+YnVmX2dldCwgY291bnQpOworCQlpZiAoY291bnQgPCBsZW4pCisJCQljYi0+YnVmX2dldCArPSBjb3VudDsKKwkJZWxzZSAvKiBjb3VudCA9PSBsZW4gKi8KKwkJCWNiLT5idWZfZ2V0ID0gY2ItPmJ1Zl9idWY7CisJfQorCisJcmV0dXJuIGNvdW50OworCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTW9kdWxlIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IF9faW5pdCBjeXByZXNzX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCQorCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCQorCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmN5cHJlc3NfZWFydGhtYXRlX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfZW1fcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmY3lwcmVzc19oaWRjb21fZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF9oaWRjb21fcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZjeXByZXNzX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOworCisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiAwOworZmFpbGVkX3VzYl9yZWdpc3RlcjoKKwl1c2JfZGVyZWdpc3RlcigmY3lwcmVzc19kcml2ZXIpOworZmFpbGVkX2hpZGNvbV9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmN5cHJlc3NfaGlkY29tX2RldmljZSk7CitmYWlsZWRfZW1fcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZjeXByZXNzX2VhcnRobWF0ZV9kZXZpY2UpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgY3lwcmVzc19leGl0ICh2b2lkKQoreworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJdXNiX2RlcmVnaXN0ZXIgKCZjeXByZXNzX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmY3lwcmVzc19lYXJ0aG1hdGVfZGV2aWNlKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZjeXByZXNzX2hpZGNvbV9kZXZpY2UpOworfQorCisKK21vZHVsZV9pbml0KGN5cHJlc3NfaW5pdCk7Cittb2R1bGVfZXhpdChjeXByZXNzX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfVkVSU0lPTiggRFJJVkVSX1ZFUlNJT04gKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKK21vZHVsZV9wYXJhbShzdGF0cywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhzdGF0cywgIkVuYWJsZSBzdGF0aXN0aWNzIG9yIG5vdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAxMmVlNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmgKQEAgLTAsMCArMSw1NSBAQAorI2lmbmRlZiBDWVBSRVNTX004X0gKKyNkZWZpbmUgQ1lQUkVTU19NOF9ICisKKy8qIGRlZmluaXRpb25zIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzIHVzZWQgZm9yIHRoZSBjeXByZXNzIFVTQiB0byBTZXJpYWwgY29udHJvbGxlciAqLworCisvKiBGb3Igc2VuZGluZyBvdXIgZmVhdHVyZSBidWZmZXIgLSBjb250cm9sbGluZyBzZXJpYWwgY29tbXVuaWNhdGlvbiBzdGF0ZXMgKi8KKy8qIExpbnV4IEhJRCBoYXMgbm8gc3VwcG9ydCBmb3Igc2VyaWFsIGRldmljZXMgc28gd2UgZG8gdGhpcyB0aHJvdWdoIHRoZSBkcml2ZXIgKi8KKyNkZWZpbmUgSElEX1JFUV9HRVRfUkVQT1JUIDB4MDEKKyNkZWZpbmUgSElEX1JFUV9TRVRfUkVQT1JUIDB4MDkKKworLyogTGlzdCBvdGhlciBjeXByZXNzIFVTQiB0byBTZXJpYWwgZGV2aWNlcyBoZXJlLCBhbmQgYWRkIHRoZW0gdG8gdGhlIGlkX3RhYmxlICovCisKKy8qIERlTG9ybWUgRWFydGhtYXRlIFVTQiAtIGEgR1BTIGRldmljZSAqLworI2RlZmluZQlWRU5ET1JfSURfREVMT1JNRQkJIDB4MTE2MworI2RlZmluZSBQUk9EVUNUX0lEX0VBUlRITUFURVVTQgkJIDB4MDEwMAorCisvKiBDeXByZXNzIEhJRC0+Q09NIFJTMjMyIEFkYXB0ZXIgKi8KKyNkZWZpbmUgVkVORE9SX0lEX0NZUFJFU1MJCSAweDA0YjQKKyNkZWZpbmUgUFJPRFVDVF9JRF9DWVBISURDT00JCSAweDU1MDAKKy8qIEVuZCBvZiBkZXZpY2UgbGlzdGluZyAqLworCisvKiBVc2VkIGZvciBzZXR0aW5nIC8gcmVxdWVzdGluZyBzZXJpYWwgbGluZSBzZXR0aW5ncyAqLworI2RlZmluZSBDWVBSRVNTX1NFVF9DT05GSUcgMHgwMQorI2RlZmluZSBDWVBSRVNTX0dFVF9DT05GSUcgMHgwMgorCisvKiBVc2VkIGZvciB0aHJvdHRsZSBjb250cm9sICovCisjZGVmaW5lIFRIUk9UVExFRCAweDEKKyNkZWZpbmUgQUNUVUFMTFlfVEhST1RUTEVEIDB4MgorCisvKiBjaGlwdHlwZXMgLSB1c2VkIGluIGNhc2UgZmlybXdhcmUgZGlmZmVycyBmcm9tIHRoZSBnZW5lcmljIGZvcm0gLi4uIG9mZmVyaW5nCisgKiAJZGlmZmVyZW50IGJhdWQgc3BlZWRzL2V0Yy4KKyAqLworCisjZGVmaW5lIENUX0VBUlRITUFURQkweDAxCisjZGVmaW5lIENUX0NZUEhJRENPTQkweDAyCisjZGVmaW5lIENUX0dFTkVSSUMJMHgwRgorLyogRW5kIG9mIGNoaXB0eXBlIGRlZmluaXRpb25zICovCisKKy8qIFJTLTIzMiBzZXJpYWwgZGF0YSBjb21tdW5pY2F0aW9uIHByb3RvY29sIGRlZmluaXRpb25zICovCisvKiB0aGVzZSBhcmUgc2VudCAvIHJlYWQgYXQgYnl0ZSAwIG9mIHRoZSBpbnB1dC9vdXRwdXQgaGlkIHJlcG9ydHMgKi8KKy8qIFlvdSBjYW4gZmluZCB0aGVzZSB2YWx1ZXMgZGVmaW5lZCBpbiB0aGUgQ1k0NjAxIFVTQiB0byBTZXJpYWwgZGVzaWduIG5vdGVzICovCisKKyNkZWZpbmUgQ09OVFJPTF9EVFIgCTB4MjAJLyogZGF0YSB0ZXJtaW5hbCByZWFkeSAtIGZsb3cgY29udHJvbCAtIGhvc3QgdG8gZGV2aWNlICovCisjZGVmaW5lIFVBUlRfRFNSCTB4MjAJLyogZGF0YSBzZXQgcmVhZHkgLSBmbG93IGNvbnRyb2wgLSBkZXZpY2UgdG8gaG9zdCAqLworI2RlZmluZSBDT05UUk9MX1JUUyAJMHgxMAkvKiByZXF1ZXN0IHRvIHNlbmQgLSBmbG93IGNvbnRyb2wgLSBob3N0IHRvIGRldmljZSAqLworI2RlZmluZSBVQVJUX0NUUwkweDEwCS8qIGNsZWFyIHRvIHNlbmQgLSBmbG93IGNvbnRyb2wgLSBkZXZpY2UgdG8gaG9zdCAqLworI2RlZmluZQlVQVJUX1JJCQkweDEwCS8qIHJpbmcgaW5kaWNhdG9yIC0gbW9kZW0gLSBkZXZpY2UgdG8gaG9zdCAqLyAKKyNkZWZpbmUgVUFSVF9DRAkJMHg0MAkvKiBjYXJyaWVyIGRldGVjdCAtIG1vZGVtIC0gZGV2aWNlIHRvIGhvc3QgKi8KKyNkZWZpbmUgQ1lQX0VSUk9SIAkweDA4CS8qIHJlY2VpdmVkIGZyb20gaW5wdXQgcmVwb3J0IC0gZGV2aWNlIHRvIGhvc3QgKi8KKy8qIE5vdGUgLSB0aGUgYmVsb3cgaGFzIG5vdGhpbmcgdG8gdG8gd2l0aCB0aGUgImZlYXR1cmUgcmVwb3J0IiByZXNldCAqLworI2RlZmluZSBDT05UUk9MX1JFU0VUCTB4MDggIAkvKiBzZW50IHdpdGggb3V0cHV0IHJlcG9ydCAtIGhvc3QgdG8gZGV2aWNlICovCisKKy8qIEVuZCBvZiBSUy0yMzIgcHJvdG9jb2wgZGVmaW5pdGlvbnMgKi8KKworI2VuZGlmIC8qIENZUFJFU1NfTThfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZjkyNzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKQEAgLTAsMCArMSwyMDQ5IEBACisvKgorKiAgRGlnaSBBY2NlbGVQb3J0IFVTQi00IGFuZCBVU0ItMiBTZXJpYWwgQ29udmVydGVycworKgorKiAgQ29weXJpZ2h0IDIwMDAgYnkgRGlnaSBJbnRlcm5hdGlvbmFsCisqCisqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKgorKiAgU2hhbWVsZXNzbHkgYmFzZWQgb24gQnJpYW4gV2FybmVyJ3Mga2V5c3Bhbl9wZGEuYyBhbmQgR3JlZyBLcm9haC1IYXJ0bWFuJ3MKKyogIHVzYi1zZXJpYWwgZHJpdmVyLgorKgorKiAgUGV0ZXIgQmVyZ2VyIChwYmVyZ2VyQGJyaW1zb24uY29tKQorKiAgQWwgQm9yY2hlcnMgKGJvcmNoZXJzQHN0ZWluZXJwb2ludC5jb20pCisqIAorKiAoMTIvMDMvMjAwMSkgZ2toCisqCXN3aXRjaGVkIHRvIHVzaW5nIHBvcnQtPm9wZW5fY291bnQgaW5zdGVhZCBvZiBwcml2YXRlIHZlcnNpb24uCisqCVJlbW92ZWQgcG9ydC0+YWN0aXZlCisqCisqICgwNC8wOC8yMDAxKSBnYgorKglJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgorKgorKiAoMTEvMDEvMjAwMCkgQWRhbSBKLiBSaWNodGVyCisqCXVzYl9kZXZpY2VfaWQgdGFibGUgc3VwcG9ydAorKiAKKyogKDExLzAxLzIwMDApIHBiZXJnZXIgYW5kIGJvcmNoZXJzCisqICAgIC0tIFR1cm5lZCBvZmYgdGhlIFVTQl9ESVNBQkxFX1NQRCBmbGFnIGZvciB3cml0ZSBidWxrIHVyYnMtLWl0IGNhdXNlZAorKiAgICAgICBVU0IgNCBwb3J0cyB0byBoYW5nIG9uIHN0YXJ0dXAuCisqICAgIC0tIFNlcmlhbGl6ZWQgYWNjZXNzIHRvIHdyaXRlIHVyYnMgYnkgYWRkaW5nIHRoZSBkcF93cml0ZV91cmJfaW5fdXNlCisqICAgICAgIGZsYWc7IG90aGVyd2lzZSwgdGhlIGRyaXZlciBjYXVzZWQgU01QIHN5c3RlbSBoYW5ncy4gIFdhdGNoaW5nIHRoZQorKiAgICAgICB1cmIgc3RhdHVzIGlzIG5vdCBzdWZmaWNpZW50LgorKgorKiAoMTAvMDUvMjAwMCkgZ2toCisqICAgIC0tIEZpeGVkIGJ1ZyB3aXRoIHVyYi0+ZGV2IG5vdCBiZWluZyBzZXQgcHJvcGVybHksIG5vdyB0aGF0IHRoZSB1c2IKKyoJY29yZSBuZWVkcyBpdC4KKyogCisqICAoOC84LzIwMDApIHBiZXJnZXIgYW5kIGJvcmNoZXJzCisqICAgIC0tIEZpeGVkIGNsb3NlIHNvIHRoYXQgCisqICAgICAgIC0gaXQgY2FuIHRpbWVvdXQgd2hpbGUgd2FpdGluZyBmb3IgdHJhbnNtaXQgaWRsZSwgaWYgbmVlZGVkOworKiAgICAgICAtIGl0IGlnbm9yZXMgaW50ZXJydXB0cyB3aGVuIGZsdXNoaW5nIHRoZSBwb3J0LCB0dXJuaW5nCisqICAgICAgICAgb2YgbW9kZW0gc2lnbmFsbGluZywgYW5kIHNvIG9uOworKiAgICAgICAtIGl0IHdhaXRzIGZvciB0aGUgZmx1c2ggdG8gcmVhbGx5IGNvbXBsZXRlIGJlZm9yZSByZXR1cm5pbmcuCisqICAgIC0tIFJlYWRfYnVsa19jYWxsYmFjayBhbmQgd3JpdGVfYnVsa19jYWxsYmFjayBjaGVjayBmb3IgYSBjbG9zZWQKKyogICAgICAgcG9ydCBiZWZvcmUgdXNpbmcgdGhlIHR0eSBzdHJ1Y3Qgb3Igd3JpdGluZyB0byB0aGUgcG9ydC4KKyogICAgLS0gVGhlIHR3byBjaGFuZ2VzIGFib3ZlIGZpeCB0aGUgb29wcyBjYXVzZWQgYnkgaW50ZXJydXB0ZWQgY2xvc2VzLgorKiAgICAtLSBBZGRlZCBpbnRlcnJ1cHRpYmxlIGFyZ3MgdG8gd3JpdGVfb29iX2NvbW1hbmQgYW5kIHNldF9tb2RlbV9zaWduYWxzCisqICAgICAgIGFuZCBhZGRlZCBhIHRpbWVvdXQgYXJnIHRvIHRyYW5zbWl0X2lkbGU7IG5lZWRlZCBmb3IgZml4ZXMgdG8KKyogICAgICAgY2xvc2UuCisqICAgIC0tIEFkZGVkIGNvZGUgZm9yIHJ4X3Rocm90dGxlIGFuZCByeF91bnRocm90dGxlIHNvIHRoYXQgaW5wdXQgZmxvdworKiAgICAgICBjb250cm9sIHdvcmtzLgorKiAgICAtLSBBZGRlZCBjb2RlIHRvIHNldCBvdmVycnVuLCBwYXJpdHksIGZyYW1pbmcsIGFuZCBicmVhayBlcnJvcnMKKyogICAgICAgKHVudGVzdGVkKS4KKyogICAgLS0gU2V0IFVTQl9ESVNBQkxFX1NQRCBmbGFnIGZvciB3cml0ZSBidWxrIHVyYnMsIHNvIG5vIDAgbGVuZ3RoCisqICAgICAgIGJ1bGsgd3JpdGVzIGFyZSBkb25lLiAgVGhlc2UgaHVuZyB0aGUgRGlnaSBVU0IgZGV2aWNlLiAgVGhlCisqICAgICAgIDAgbGVuZ3RoIGJ1bGsgd3JpdGVzIHdlcmUgYSBuZXcgZmVhdHVyZSBvZiB1c2ItdWhjaSBhZGRlZCBpbgorKiAgICAgICB0aGUgMi40LjAtdGVzdDYga2VybmVscy4KKyogICAgLS0gRml4ZWQgbW9kIGluYyByYWNlIGluIG9wZW47IGRvIG1vZCBpbmMgYmVmb3JlIHNsZWVwaW5nIHRvIHdhaXQKKyogICAgICAgZm9yIGEgY2xvc2UgdG8gZmluaXNoLgorKgorKiAgKDcvMzEvMjAwMCkgcGJlcmdlcgorKiAgICAtLSBGaXhlZCBidWdzIHdpdGggaGFyZHdhcmUgaGFuZHNoYWtpbmc6CisqICAgICAgIC0gQWRkZWQgY29kZSB0byBzZXQvY2xlYXIgdHR5LT5od19zdG9wcGVkIGluIGRpZ2lfcmVhZF9vb2JfY2FsbGJhY2soKQorKiAgICAgICAgIGFuZCBkaWdpX3NldF90ZXJtaW9zKCkKKyogICAgLS0gQWRkZWQgY29kZSBpbiBkaWdpX3NldF90ZXJtaW9zKCkgdG8KKyogICAgICAgLSBhZGQgY29uZGl0aW9uYWwgaW4gY29kZSBoYW5kbGluZyB0cmFuc2l0aW9uIGZyb20gQjAgdG8gb25seQorKiAgICAgICAgIHNldCBSVFMgaWYgUlRTL0NUUyBmbG93IGNvbnRyb2wgaXMgZWl0aGVyIG5vdCBpbiB1c2Ugb3IgaWYKKyogICAgICAgICB0aGUgcG9ydCBpcyBub3QgY3VycmVudGx5IHRocm90dGxlZC4KKyogICAgICAgLSBoYW5kbGUgdHVybmluZyBvZmYgQ1JUU0NUUy4KKyoKKyogICg3LzMwLzIwMDApIGJvcmNoZXJzCisqICAgIC0tIEFkZGVkIHN1cHBvcnQgZm9yIG1vcmUgdGhhbiBvbmUgRGlnaSBVU0IgZGV2aWNlIGJ5IG1vdmluZworKiAgICAgICBnbG9iYWxzIHRvIGEgcHJpdmF0ZSBzdHJ1Y3R1cmUgaW4gdGhlIHBvaW50ZWQgdG8gZnJvbSB0aGUKKyogICAgICAgdXNiX3NlcmlhbCBzdHJ1Y3R1cmUuCisqICAgIC0tIE1vdmVkIHRoZSBtb2RlbSBjaGFuZ2UgYW5kIHRyYW5zbWl0IGlkbGUgd2FpdCBxdWV1ZXMgaW50bworKiAgICAgICB0aGUgcG9ydCBwcml2YXRlIHN0cnVjdHVyZSwgc28gZWFjaCBwb3J0IGhhcyBpdHMgb3duIHF1ZXVlCisqICAgICAgIHJhdGhlciB0aGFuIHNoYXJpbmcgZ2xvYmFsIHF1ZXVlcy4KKyogICAgLS0gQWRkZWQgc3VwcG9ydCBmb3IgYnJlYWsgc2lnbmFscy4KKyoKKyogICg3LzI1LzIwMDApIHBiZXJnZXIKKyogICAgLS0gQWRkZWQgVVNCLTIgc3VwcG9ydC4gIE5vdGU6IHRoZSBVU0ItMiBzdXBwb3J0cyAzIGRldmljZXM6IHR3bworKiAgICAgICBzZXJpYWwgYW5kIGEgcGFyYWxsZWwgcG9ydC4gIFRoZSBwYXJhbGxlbCBwb3J0IGlzIGltcGxlbWVudGVkCisqICAgICAgIGFzIGEgc2VyaWFsLXRvLXBhcmFsbGVsIGNvbnZlcnRlci4gIFRoYXQgaXMsIHRoZSBkcml2ZXIgYWN0dWFsbHkKKyogICAgICAgcHJlc2VudHMgYWxsIHRocmVlIFVTQi0yIGludGVyZmFjZXMgYXMgc2VyaWFsIHBvcnRzLCBidXQgdGhlIHRoaXJkCisqICAgICAgIG9uZSBwaHlzaWNhbGx5IGNvbm5lY3RzIHRvIGEgcGFyYWxsZWwgZGV2aWNlLiAgVGh1cywgZm9yIGV4YW1wbGUsCisqICAgICAgIG9uZSBjb3VsZCBwbHVnIGEgcGFyYWxsZWwgcHJpbnRlciBpbnRvIHRoZSBVU0ItMidzIHRoaXJkIHBvcnQsCisqICAgICAgIGJ1dCBmcm9tIHRoZSBrZXJuZWwncyAoYW5kIHVzZXJsYW5kJ3MpIHBvaW50IG9mIHZpZXcgd2hhdCdzCisqICAgICAgIGFjdHVhbGx5IG91dCB0aGVyZSBpcyBhIHNlcmlhbCBkZXZpY2UuCisqCisqICAoNy8xNS8yMDAwKSBib3JjaGVycworKiAgICAtLSBGaXhlZCByYWNlIGluIG9wZW4gd2hlbiBhIGNsb3NlIGlzIGluIHByb2dyZXNzLgorKiAgICAtLSBLZWVwIGNvdW50IG9mIG9wZW5zIGFuZCBkZWMgdGhlIG1vZHVsZSB1c2UgY291bnQgZm9yIGVhY2gKKyogICAgICAgb3V0c3RhbmRpbmcgb3BlbiB3aGVuIHNodXRkb3duIGlzIGNhbGxlZCAob24gZGlzY29ubmVjdCkuCisqICAgIC0tIEZpeGVkIHNhbml0eSBjaGVja3MgaW4gcmVhZF9idWxrX2NhbGxiYWNrIGFuZCB3cml0ZV9idWxrX2NhbGxiYWNrCisqICAgICAgIHNvIHBvaW50ZXJzIGFyZSBjaGVja2VkIGJlZm9yZSB1c2UuCisqICAgIC0tIFNwbGl0IHJlYWQgYnVsayBjYWxsYmFjayBpbnRvIGluIGJhbmQgYW5kIG91dCBvZiBiYW5kCisqICAgICAgIGNhbGxiYWNrcywgYW5kIG5vIGxvbmdlciByZXN0YXJ0IHJlYWQgY2hhaW5zIGlmIHRoZXJlIGlzCisqICAgICAgIGEgc3RhdHVzIGVycm9yIG9yIGEgc2FuaXR5IGVycm9yLiAgVGhpcyBmaXhlZCB0aGUgc2VnCisqICAgICAgIGZhdWx0cyBhbmQgb3RoZXIgZXJyb3JzIHdlIHVzZWQgdG8gZ2V0IG9uIGRpc2Nvbm5lY3QuCisqICAgIC0tIFBvcnQtPmFjdGl2ZSBpcyBvbmNlIGFnYWluIGEgZmxhZyBhcyB1c2Itc2VyaWFsIGludGVuZGVkIGl0CisqICAgICAgIHRvIGJlLCBub3QgYSBjb3VudC4gIFNpbmNlIGl0IHdhcyBvbmx5IGEgY2hhciBpdCB3b3VsZAorKiAgICAgICBoYXZlIGJlZW4gbGltaXRlZCB0byAyNTYgc2ltdWx0YW5lb3VzIG9wZW5zLiAgTm93IHRoZSBvcGVuCisqICAgICAgIGNvdW50IGlzIGtlcHQgaW4gdGhlIHBvcnQgcHJpdmF0ZSBzdHJ1Y3R1cmUgaW4gZHBfb3Blbl9jb3VudC4KKyogICAgLS0gQWRkZWQgY29kZSBmb3IgbW9kdWxhcml6YXRpb24gb2YgdGhlIGRpZ2lfYWNjZWxlcG9ydCBkcml2ZXIuCisqCisqICAoNi8yNy8yMDAwKSBwYmVyZ2VyIGFuZCBib3JjaGVycworKiAgICAtLSBaZXJvZWQgb3V0IHN5bmMgZmllbGQgaW4gdGhlIHdha2V1cF90YXNrIGJlZm9yZSBmaXJzdCB1c2U7CisqICAgICAgIG90aGVyd2lzZSB0aGUgdW5pbml0aWFsaXplZCB2YWx1ZSBtaWdodCBwcmV2ZW50IHRoZSB0YXNrIGZyb20KKyogICAgICAgYmVpbmcgc2NoZWR1bGVkLgorKiAgICAtLSBJbml0aWFsaXplZCByZXQgdmFsdWUgdG8gMCBpbiB3cml0ZV9idWxrX2NhbGxiYWNrLCBvdGhlcndpc2UKKyogICAgICAgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUgY291bGQgY2F1c2UgYSBzcHVyaW91cyBkZWJ1Z2dpbmcgbWVzc2FnZS4KKyoKKyogICg2LzIyLzIwMDApIHBiZXJnZXIgYW5kIGJvcmNoZXJzCisqICAgIC0tIE1hZGUgY29uZF93YWl0Xy4uLiBpbmxpbmUtLWFwcGFyZW50bHkgb24gU1BBUkMgdGhlIGZsYWdzIGFyZworKiAgICAgICB0byBzcGluX2xvY2tfaXJxc2F2ZSBjYW5ub3QgYmUgcGFzc2VkIHRvIGFub3RoZXIgZnVuY3Rpb24KKyogICAgICAgdG8gY2FsbCBzcGluX3VubG9ja19pcnFyZXN0b3JlLiAgVGhhbmtzIHRvIFBhdWxpbmUgTWlkZGVsaW5rLgorKiAgICAtLSBJbiBkaWdpX3NldF9tb2RlbV9zaWduYWxzIHRoZSBpbm5lciBuZXN0ZWQgc3BpbiBsb2NrcyB1c2UganVzdAorKiAgICAgICBzcGluX2xvY2soKSByYXRoZXIgdGhhbiBzcGluX2xvY2tfaXJxc2F2ZSgpLiAgVGhlIG9sZCBjb2RlCisqICAgICAgIG1pc3Rha2VubHkgbGVmdCBpbnRlcnJ1cHRzIG9mZi4gIFRoYW5rcyB0byBQYXVsaW5lIE1pZGRlbGluay4KKyogICAgLS0gY29weV9mcm9tX3VzZXIgKHdoaWNoIGNhbiBzbGVlcCkgaXMgbm8gbG9uZ2VyIGNhbGxlZCB3aGlsZSBhCisqICAgICAgIHNwaW5sb2NrIGlzIGhlbGQuICBXZSBjb3B5IHRvIGEgbG9jYWwgYnVmZmVyIGJlZm9yZSBnZXR0aW5nCisqICAgICAgIHRoZSBzcGlubG9jay0tZG9uJ3QgbGlrZSB0aGUgZXh0cmEgY29weSBidXQgdGhlIGNvZGUgaXMgc2ltcGxlci4KKyogICAgLS0gUHJpbnRrIGFuZCBkYmcgYXJlIG5vIGxvbmdlciBjYWxsZWQgd2hpbGUgYSBzcGluIGxvY2sgaXMgaGVsZC4KKyoKKyogICg2LzQvMjAwMCkgcGJlcmdlciBhbmQgYm9yY2hlcnMKKyogICAgLS0gUmVwbGFjZWQgc2VwYXJhdGUgY2FsbHMgdG8gc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSBhbmQKKyogICAgICAgaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0IHdpdGggYSBuZXcgZnVuY3Rpb24KKyogICAgICAgY29uZF93YWl0X2ludGVycnVwdGlibGVfdGltZW91dF9pcnFyZXN0b3JlLiAgVGhpcyBlbGltaW5hdGVzCisqICAgICAgIHRoZSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgd2FrZSB1cCBjb3VsZCBoYXBwZW4gYWZ0ZXIKKyogICAgICAgdGhlIHVubG9jayBhbmQgYmVmb3JlIHRoZSBzbGVlcC4KKyogICAgLS0gQ2xvc2Ugbm93IHdhaXRzIGZvciBvdXRwdXQgdG8gZHJhaW4uCisqICAgIC0tIE9wZW4gd2FpdHMgdW50aWwgYW55IGNsb3NlIGluIHByb2dyZXNzIGlzIGZpbmlzaGVkLgorKiAgICAtLSBBbGwgb3V0IG9mIGJhbmQgcmVzcG9uc2VzIGFyZSBub3cgcHJvY2Vzc2VkLCBub3QganVzdCB0aGUKKyogICAgICAgZmlyc3QgaW4gYSBVU0IgcGFja2V0LgorKiAgICAtLSBGaXhlZCBhIGJ1ZyB0aGF0IHByZXZlbnRlZCB0aGUgZHJpdmVyIGZyb20gd29ya2luZyB3aGVuIHRoZQorKiAgICAgICBmaXJzdCBEaWdpIHBvcnQgd2FzIG5vdCB0aGUgZmlyc3QgVVNCIHNlcmlhbCBwb3J0LS10aGUgZHJpdmVyCisqICAgICAgIHdhcyBtaXN0YWtlbmx5IHVzaW5nIHRoZSBleHRlcm5hbCBVU0Igc2VyaWFsIHBvcnQgbnVtYmVyIHRvCisqICAgICAgIHRyeSB0byBpbmRleCBpbnRvIGl0cyBpbnRlcm5hbCBwb3J0cy4KKyogICAgLS0gRml4ZWQgYW4gU01QIGJ1ZyAtLSB3cml0ZV9idWxrX2NhbGxiYWNrIGlzIGNhbGxlZCBkaXJlY3RseSBmcm9tCisqICAgICAgIGFuIGludGVycnVwdCwgc28gc3Bpbl9sb2NrX2lycXNhdmUvc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSBhcmUKKyogICAgICAgbmVlZGVkIGZvciBsb2NrcyBvdXRzaWRlIHdyaXRlX2J1bGtfY2FsbGJhY2sgdGhhdCBhcmUgYWxzbworKiAgICAgICBhY3F1aXJlZCBieSB3cml0ZV9idWxrX2NhbGxiYWNrIHRvIHByZXZlbnQgZGVhZGxvY2tzLgorKiAgICAtLSBGaXhlZCBzdXBwb3J0IGZvciBzZWxlY3QoKSBieSBtYWtpbmcgZGlnaV9jaGFyc19pbl9idWZmZXIoKQorKiAgICAgICByZXR1cm4gMjU2IHdoZW4gLUVJTlBST0dSRVNTIGlzIHNldCwgYXMgdGhlIGxpbmUgZGlzY2lwbGluZQorKiAgICAgICBjb2RlIGluIG5fdHR5LmMgZXhwZWN0cy4KKyogICAgLS0gRml4ZWQgYW4gaW5jbHVkZSBmaWxlIG9yZGVyaW5nIHByb2JsZW0gdGhhdCBwcmV2ZW50ZWQgZGVidWdnaW5nCisqICAgICAgIG1lc3NhZ2VzIGZyb20gd29ya2luZy4KKyogICAgLS0gRml4ZWQgYW4gaW50ZXJtaXR0ZW50IHRpbWVvdXQgcHJvYmxlbSB0aGF0IGNhdXNlZCB3cml0ZXMgdG8KKyogICAgICAgc29tZXRpbWVzIGdldCBzdHVjayBvbiBzb21lIG1hY2hpbmVzIG9uIHNvbWUga2VybmVscy4gIEl0IHR1cm5zCisqICAgICAgIG91dCBpbiB0aGVzZSBjaXJjdW1zdGFuY2VzIHdyaXRlX2NoYW4oKSAoaW4gbl90dHkuYykgd2FzCisqICAgICAgIGFzbGVlcCB3YWl0aW5nIGZvciBvdXIgd2FrZXVwIGNhbGwuICBFdmVuIHRob3VnaCB3ZSBjYWxsCisqICAgICAgIHdha2VfdXBfaW50ZXJydXB0aWJsZSgpIGluIGRpZ2lfd3JpdGVfYnVsa19jYWxsYmFjaygpLCB0aGVyZSBpcworKiAgICAgICBhIHJhY2UgY29uZGl0aW9uIHRoYXQgY291bGQgY2F1c2UgdGhlIHdha2V1cCB0byBmYWlsOiBpZiBvdXIKKyogICAgICAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCkgY2FsbCBvY2N1cnMgYmV0d2VlbiB0aGUgdGltZSB0aGF0IG91cgorKiAgICAgICBkcml2ZXIgd3JpdGUgcm91dGluZSBmaW5pc2hlcyBhbmQgd3JpdGVfY2hhbigpIHNldHMgY3VycmVudC0+c3RhdGUKKyogICAgICAgdG8gVEFTS19JTlRFUlJVUFRJQkxFLCB0aGUgZWZmZWN0IG9mIG91ciB3YWtldXAgc2V0dGluZyB0aGUgc3RhdGUKKyogICAgICAgdG8gVEFTS19SVU5OSU5HIHdpbGwgYmUgbG9zdCBhbmQgd3JpdGVfY2hhbidzIHN1YnNlcXVlbnQgY2FsbCB0bworKiAgICAgICBzY2hlZHVsZSgpIHdpbGwgbmV2ZXIgcmV0dXJuICh1bmxlc3MgaXQgY2F0Y2hlcyBhIHNpZ25hbCkuCisqICAgICAgIFRoaXMgcmFjZSBjb25kaXRpb24gb2NjdXJzIGJlY2F1c2Ugd3JpdGVfYnVsa19jYWxsYmFjaygpIChhbmQgdGh1cworKiAgICAgICB0aGUgd2FrZXVwKSBhcmUgY2FsbGVkIGFzeW5jaG9ub3VzbHkgZnJvbSBhbiBpbnRlcnJ1cHQsIHJhdGhlciB0aGFuCisqICAgICAgIGZyb20gdGhlIHNjaGVkdWxlci4gIFdlIGNhbiBhdm9pZCB0aGUgcmFjZSBieSBjYWxsaW5nIHRoZSB3YWtldXAKKyogICAgICAgZnJvbSB0aGUgc2NoZWR1bGVyIHF1ZXVlIGFuZCB0aGF0J3Mgb3VyIGZpeDogIE5vdywgYXQgdGhlIGVuZCBvZgorKiAgICAgICB3cml0ZV9idWxrX2NhbGxiYWNrKCkgd2UgcXVldWUgdXAgYSB3YWtldXAgY2FsbCBvbiB0aGUgc2NoZWR1bGVyCisqICAgICAgIHRhc2sgcXVldWUuICBXZSBzdGlsbCBhbHNvIGludm9rZSB0aGUgd2FrZXVwIGRpcmVjdGx5IHNpbmNlIHRoYXQKKyogICAgICAgc3F1ZWV6ZXMgYSBiaXQgbW9yZSBwZXJmb3JtYW5jZSBvdXQgb2YgdGhlIGRyaXZlciwgYW5kIGFueSBsb3N0CisqICAgICAgIHJhY2UgY29uZGl0aW9ucyB3aWxsIGdldCBjbGVhbmVkIHVwIGF0IHRoZSBuZXh0IHNjaGVkdWxlciBydW4uCisqCisqICAgICAgIE5PVEU6ICBUaGUgcHJvYmxlbSBhbHNvIGdvZXMgYXdheSBpZiB5b3UgY29tbWVudCBvdXQKKyogICAgICAgdGhlIHR3byBjb2RlIGxpbmVzIGluIHdyaXRlX2NoYW4oKSB3aGVyZSBjdXJyZW50LT5zdGF0ZQorKiAgICAgICBpcyBzZXQgdG8gVEFTS19SVU5OSU5HIGp1c3QgYmVmb3JlIGNhbGxpbmcgZHJpdmVyLndyaXRlKCkgYW5kIHRvCisqICAgICAgIFRBU0tfSU5URVJSVVBUSUJMRSBpbW1lZGlhdGVseSBhZnRlcndhcmRzLiAgVGhpcyBpcyB3aHkgdGhlCisqICAgICAgIHByb2JsZW0gZGlkIG5vdCBzaG93IHVwIHdpdGggdGhlIDIuMiBrZXJuZWxzIC0tIHRoZXkgZG8gbm90CisqICAgICAgIGluY2x1ZGUgdGhhdCBjb2RlLgorKgorKiAgKDUvMTYvMjAwMCkgcGJlcmdlciBhbmQgYm9yY2hlcnMKKyogICAgLS0gQWRkZWQgdGltZW91dHMgdG8gc2xlZXBzLCB0byBkZWZlbmQgYWdhaW5zdCBsb3N0IHdha2UgdXBzLgorKiAgICAtLSBIYW5kbGUgdHJhbnNpdGlvbiB0by9mcm9tIEIwIGJhdWQgcmF0ZSBpbiBkaWdpX3NldF90ZXJtaW9zLgorKgorKiAgKDUvMTMvMjAwMCkgcGJlcmdlciBhbmQgYm9yY2hlcnMKKyogICAgLS0gQWxsIGNvbW1hbmRzIG5vdyBzZW50IG9uIG91dCBvZiBiYW5kIHBvcnQsIHVzaW5nCisqICAgICAgIGRpZ2lfd3JpdGVfb29iX2NvbW1hbmQuCisqICAgIC0tIEdldCBtb2RlbSBjb250cm9sIHNpZ25hbHMgd2hlbmV2ZXIgdGhleSBjaGFuZ2UsIHN1cHBvcnQgVElPQ01HRVQvCisqICAgICAgIFNFVC9CSVMvQklDIGlvY3Rscy4KKyogICAgLS0gZGlnaV9zZXRfdGVybWlvcyBub3cgc3VwcG9ydHMgcGFyaXR5LCB3b3JkIHNpemUsIHN0b3AgYml0cywgYW5kCisqICAgICAgIHJlY2VpdmUgZW5hYmxlLgorKiAgICAtLSBDbGVhbmVkIHVwIG9wZW4gYW5kIGNsb3NlLCB1c2UgZGlnaV9zZXRfdGVybWlvcyBhbmQKKyogICAgICAgZGlnaV93cml0ZV9vb2JfY29tbWFuZCB0byBzZXQgcG9ydCBwYXJhbWV0ZXJzLgorKiAgICAtLSBBZGRlZCBkaWdpX3N0YXJ0dXBfZGV2aWNlIHRvIHN0YXJ0IHJlYWQgY2hhaW5zIG9uIGFsbCBwb3J0cy4KKyogICAgLS0gV3JpdGUgYnVmZmVyIGlzIG9ubHkgdXNlZCB3aGVuIGNvdW50PT0xLCB0byBiZSBzdXJlIHB1dF9jaGFyIGNhbgorKiAgICAgICB3cml0ZSBhIGNoYXIgKHVubGVzcyB0aGUgYnVmZmVyIGlzIGZ1bGwpLgorKgorKiAgKDUvMTAvMjAwMCkgcGJlcmdlciBhbmQgYm9yY2hlcnMKKyogICAgLS0gQWRkZWQgTU9EX0lOQ19VU0VfQ09VTlQvTU9EX0RFQ19VU0VfQ09VTlQgY2FsbHMgb24gb3Blbi9jbG9zZS4KKyogICAgLS0gRml4ZWQgcHJvYmxlbSB3aGVyZSB0aGUgZmlyc3QgaW5jb21pbmcgY2hhcmFjdGVyIGlzIGxvc3Qgb24KKyogICAgICAgcG9ydCBvcGVucyBhZnRlciB0aGUgZmlyc3QgY2xvc2Ugb24gdGhhdCBwb3J0LiAgTm93IHdlIGtlZXAKKyogICAgICAgdGhlIHJlYWRfdXJiIGNoYWluIG9wZW4gdW50aWwgc2h1dGRvd24uCisqICAgIC0tIEFkZGVkIG1vcmUgcG9ydCBjb25kaXRpb25pbmcgY2FsbHMgaW4gZGlnaV9vcGVuIGFuZCBkaWdpX2Nsb3NlLgorKiAgICAtLSBDb252ZXJ0IHBvcnQtPmFjdGl2ZSB0byBhIHVzZSBjb3VudCBzbyB0aGF0IHdlIGNhbiBkZWFsIHdpdGggbXVsdGlwbGUKKyogICAgICAgb3BlbnMgYW5kIGNsb3NlcyBwcm9wZXJseS4KKyogICAgLS0gRml4ZWQgc29tZSBwcm9ibGVtcyB3aXRoIHRoZSBsb2NraW5nIGNvZGUuCisqCisqICAoNS8zLzIwMDApIHBiZXJnZXIgYW5kIGJvcmNoZXJzCisqICAgIC0tIEZpcnN0IGFscGhhIHZlcnNpb24gb2YgdGhlIGRyaXZlci0tbWFueSBrbm93biBsaW1pdGF0aW9ucyBhbmQgYnVncy4KKyoKKyoKKyogIExvY2tpbmcgYW5kIFNNUAorKgorKiAgLSBFYWNoIHBvcnQsIGluY2x1ZGluZyB0aGUgb3V0LW9mLWJhbmQgcG9ydCwgaGFzIGEgbG9jayB1c2VkIHRvCisqICAgIHNlcmlhbGl6ZSBhbGwgYWNjZXNzIHRvIHRoZSBwb3J0J3MgcHJpdmF0ZSBzdHJ1Y3R1cmUuCisqICAtIFRoZSBwb3J0IGxvY2sgaXMgYWxzbyB1c2VkIHRvIHNlcmlhbGl6ZSBhbGwgd3JpdGVzIGFuZCBhY2Nlc3MgdG8KKyogICAgdGhlIHBvcnQncyBVUkIuCisqICAtIFRoZSBwb3J0IGxvY2sgaXMgYWxzbyB1c2VkIGZvciB0aGUgcG9ydCB3cml0ZV93YWl0IGNvbmRpdGlvbgorKiAgICB2YXJpYWJsZS4gIEhvbGRpbmcgdGhlIHBvcnQgbG9jayB3aWxsIHByZXZlbnQgYSB3YWtlIHVwIG9uIHRoZQorKiAgICBwb3J0J3Mgd3JpdGVfd2FpdDsgdGhpcyBjYW4gYmUgdXNlZCB3aXRoIGNvbmRfd2FpdF8uLi4gdG8gYmUgc3VyZQorKiAgICB0aGUgd2FrZSB1cCBpcyBub3QgbG9zdCBpbiBhIHJhY2Ugd2hlbiBkcm9wcGluZyB0aGUgbG9jayBhbmQKKyogICAgc2xlZXBpbmcgd2FpdGluZyBmb3IgdGhlIHdha2V1cC4KKyogIC0gZGlnaV93cml0ZSgpIGRvZXMgbm90IHNsZWVwLCBzaW5jZSBpdCBpcyBzb21ldGltZXMgY2FsbGVkIG9uCisqICAgIGludGVycnVwdCB0aW1lLgorKiAgLSBkaWdpX3dyaXRlX2J1bGtfY2FsbGJhY2soKSBhbmQgZGlnaV9yZWFkX2J1bGtfY2FsbGJhY2soKSBhcmUKKyogICAgY2FsbGVkIGRpcmVjdGx5IGZyb20gaW50ZXJydXB0cy4gIEhlbmNlIHNwaW5fbG9ja19pcnFzYXZlKCkKKyogICAgYW5kIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoKSBhcmUgdXNlZCBpbiB0aGUgcmVzdCBvZiB0aGUgY29kZQorKiAgICBmb3IgYW55IGxvY2tzIHRoZXkgYWNxdWlyZS4KKyogIC0gZGlnaV93cml0ZV9idWxrX2NhbGxiYWNrKCkgZ2V0cyB0aGUgcG9ydCBsb2NrIGJlZm9yZSB3YWtpbmcgdXAKKyogICAgcHJvY2Vzc2VzIHNsZWVwaW5nIG9uIHRoZSBwb3J0IHdyaXRlX3dhaXQuICBJdCBhbHNvIHNjaGVkdWxlcworKiAgICB3YWtlIHVwcyBzbyB0aGV5IGhhcHBlbiBmcm9tIHRoZSBzY2hlZHVsZXIsIGJlY2F1c2UgdGhlIHR0eQorKiAgICBzeXN0ZW0gY2FuIG1pc3Mgd2FrZSB1cHMgZnJvbSBpbnRlcnJ1cHRzLgorKiAgLSBBbGwgc2xlZXBzIHVzZSBhIHRpbWVvdXQgb2YgRElHSV9SRVRSWV9USU1FT1VUIGJlZm9yZSBsb29waW5nIHRvCisqICAgIHJlY2hlY2sgdGhlIGNvbmRpdGlvbiB0aGV5IGFyZSBzbGVlcGluZyBvbi4gIFRoaXMgaXMgZGVmZW5zaXZlLAorKiAgICBpbiBjYXNlIGEgd2FrZSB1cCBpcyBsb3N0LgorKiAgLSBGb2xsb3dpbmcgRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1sb2NraW5nLnBkZiBubyBzcGluIGxvY2tzCisqICAgIGFyZSBoZWxkIHdoZW4gY2FsbGluZyBjb3B5X3RvL2Zyb21fdXNlciBvciBwcmludGsuCisqICAgIAorKiAgJElkOiBkaWdpX2FjY2VsZXBvcnQuYyx2IDEuODAuMS4yIDIwMDAvMTEvMDIgMDU6NDU6MDggcm9vdCBFeHAgJAorKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKworLyogRGVmaW5lcyAqLworCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS44MC4xLjIiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlBldGVyIEJlcmdlciA8cGJlcmdlckBicmltc29uLmNvbT4sIEFsIEJvcmNoZXJzIDxib3JjaGVyc0BzdGVpbmVycG9pbnQuY29tPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkRpZ2kgQWNjZWxlUG9ydCBVU0ItMi9VU0ItNCBTZXJpYWwgQ29udmVydGVyIGRyaXZlciIKKworLyogcG9ydCBvdXRwdXQgYnVmZmVyIGxlbmd0aCAtLSBtdXN0IGJlIDw9IHRyYW5zZmVyIGJ1ZmZlciBsZW5ndGggLSAyICovCisvKiBzbyB3ZSBjYW4gYmUgc3VyZSB0byBzZW5kIHRoZSBmdWxsIGJ1ZmZlciBpbiBvbmUgdXJiICovCisjZGVmaW5lIERJR0lfT1VUX0JVRl9TSVpFCQk4CisKKy8qIHBvcnQgaW5wdXQgYnVmZmVyIGxlbmd0aCAtLSBtdXN0IGJlID49IHRyYW5zZmVyIGJ1ZmZlciBsZW5ndGggLSAzICovCisvKiBzbyB3ZSBjYW4gYmUgc3VyZSB0byBob2xkIGF0IGxlYXN0IG9uZSBmdWxsIGJ1ZmZlciBmcm9tIG9uZSB1cmIgKi8KKyNkZWZpbmUgRElHSV9JTl9CVUZfU0laRQkJNjQKKworLyogcmV0cnkgdGltZW91dCB3aGlsZSBzbGVlcGluZyAqLworI2RlZmluZSBESUdJX1JFVFJZX1RJTUVPVVQJCShIWi8xMCkKKworLyogdGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciB0dHkgb3V0cHV0IHRvIGRyYWluIGluIGNsb3NlICovCisvKiB0aGlzIGRlbGF5IGlzIHVzZWQgdHdpY2UgaW4gY2xvc2UsIHNvIHRoZSB0b3RhbCBkZWxheSBjb3VsZCAqLworLyogYmUgdHdpY2UgdGhpcyB2YWx1ZSAqLworI2RlZmluZSBESUdJX0NMT1NFX1RJTUVPVVQJCSg1KkhaKQorCisKKy8qIEFjY2VsZVBvcnQgVVNCIERlZmluZXMgKi8KKworLyogaWRzICovCisjZGVmaW5lIERJR0lfVkVORE9SX0lECQkJMHgwNWM1CisjZGVmaW5lIERJR0lfMl9JRAkJCTB4MDAwMgkvKiBVU0ItMiAqLworI2RlZmluZSBESUdJXzRfSUQJCQkweDAwMDQJLyogVVNCLTQgKi8KKworLyogY29tbWFuZHMKKyAqICJJTkIiOiBjYW4gYmUgdXNlZCBvbiB0aGUgaW4tYmFuZCBlbmRwb2ludAorICogIk9PQiI6IGNhbiBiZSB1c2VkIG9uIHRoZSBvdXQtb2YtYmFuZCBlbmRwb2ludAorICovCisjZGVmaW5lIERJR0lfQ01EX1NFVF9CQVVEX1JBVEUJCQkwCS8qIElOQiwgT09CICovCisjZGVmaW5lIERJR0lfQ01EX1NFVF9XT1JEX1NJWkUJCQkxCS8qIElOQiwgT09CICovCisjZGVmaW5lIERJR0lfQ01EX1NFVF9QQVJJVFkJCQkyCS8qIElOQiwgT09CICovCisjZGVmaW5lIERJR0lfQ01EX1NFVF9TVE9QX0JJVFMJCQkzCS8qIElOQiwgT09CICovCisjZGVmaW5lIERJR0lfQ01EX1NFVF9JTlBVVF9GTE9XX0NPTlRST0wJCTQJLyogSU5CLCBPT0IgKi8KKyNkZWZpbmUgRElHSV9DTURfU0VUX09VVFBVVF9GTE9XX0NPTlRST0wJNQkvKiBJTkIsIE9PQiAqLworI2RlZmluZSBESUdJX0NNRF9TRVRfRFRSX1NJR05BTAkJCTYJLyogSU5CLCBPT0IgKi8KKyNkZWZpbmUgRElHSV9DTURfU0VUX1JUU19TSUdOQUwJCQk3CS8qIElOQiwgT09CICovCisjZGVmaW5lIERJR0lfQ01EX1JFQURfSU5QVVRfU0lHTkFMUwkJOAkvKiAgICAgIE9PQiAqLworI2RlZmluZSBESUdJX0NNRF9JRkxVU0hfRklGTwkJCTkJLyogICAgICBPT0IgKi8KKyNkZWZpbmUgRElHSV9DTURfUkVDRUlWRV9FTkFCTEUJCQkxMAkvKiBJTkIsIE9PQiAqLworI2RlZmluZSBESUdJX0NNRF9CUkVBS19DT05UUk9MCQkJMTEJLyogSU5CLCBPT0IgKi8KKyNkZWZpbmUgRElHSV9DTURfTE9DQUxfTE9PUEJBQ0sJCQkxMgkvKiBJTkIsIE9PQiAqLworI2RlZmluZSBESUdJX0NNRF9UUkFOU01JVF9JRExFCQkJMTMJLyogSU5CLCBPT0IgKi8KKyNkZWZpbmUgRElHSV9DTURfUkVBRF9VQVJUX1JFR0lTVEVSCQkxNAkvKiAgICAgIE9PQiAqLworI2RlZmluZSBESUdJX0NNRF9XUklURV9VQVJUX1JFR0lTVEVSCQkxNQkvKiBJTkIsIE9PQiAqLworI2RlZmluZSBESUdJX0NNRF9BTkRfVUFSVF9SRUdJU1RFUgkJMTYJLyogSU5CLCBPT0IgKi8KKyNkZWZpbmUgRElHSV9DTURfT1JfVUFSVF9SRUdJU1RFUgkJMTcJLyogSU5CLCBPT0IgKi8KKyNkZWZpbmUgRElHSV9DTURfU0VORF9EQVRBCQkJMTgJLyogSU5CICAgICAgKi8KKyNkZWZpbmUgRElHSV9DTURfUkVDRUlWRV9EQVRBCQkJMTkJLyogSU5CICAgICAgKi8KKyNkZWZpbmUgRElHSV9DTURfUkVDRUlWRV9ESVNBQkxFCQkyMAkvKiBJTkIgICAgICAqLworI2RlZmluZSBESUdJX0NNRF9HRVRfUE9SVF9UWVBFCQkJMjEJLyogICAgICBPT0IgKi8KKworLyogYmF1ZCByYXRlcyAqLworI2RlZmluZSBESUdJX0JBVURfNTAJCQkJMAorI2RlZmluZSBESUdJX0JBVURfNzUJCQkJMQorI2RlZmluZSBESUdJX0JBVURfMTEwCQkJCTIKKyNkZWZpbmUgRElHSV9CQVVEXzE1MAkJCQkzCisjZGVmaW5lIERJR0lfQkFVRF8yMDAJCQkJNAorI2RlZmluZSBESUdJX0JBVURfMzAwCQkJCTUKKyNkZWZpbmUgRElHSV9CQVVEXzYwMAkJCQk2CisjZGVmaW5lIERJR0lfQkFVRF8xMjAwCQkJCTcKKyNkZWZpbmUgRElHSV9CQVVEXzE4MDAJCQkJOAorI2RlZmluZSBESUdJX0JBVURfMjQwMAkJCQk5CisjZGVmaW5lIERJR0lfQkFVRF80ODAwCQkJCTEwCisjZGVmaW5lIERJR0lfQkFVRF83MjAwCQkJCTExCisjZGVmaW5lIERJR0lfQkFVRF85NjAwCQkJCTEyCisjZGVmaW5lIERJR0lfQkFVRF8xNDQwMAkJCQkxMworI2RlZmluZSBESUdJX0JBVURfMTkyMDAJCQkJMTQKKyNkZWZpbmUgRElHSV9CQVVEXzI4ODAwCQkJCTE1CisjZGVmaW5lIERJR0lfQkFVRF8zODQwMAkJCQkxNgorI2RlZmluZSBESUdJX0JBVURfNTc2MDAJCQkJMTcKKyNkZWZpbmUgRElHSV9CQVVEXzc2ODAwCQkJCTE4CisjZGVmaW5lIERJR0lfQkFVRF8xMTUyMDAJCQkxOQorI2RlZmluZSBESUdJX0JBVURfMTUzNjAwCQkJMjAKKyNkZWZpbmUgRElHSV9CQVVEXzIzMDQwMAkJCTIxCisjZGVmaW5lIERJR0lfQkFVRF80NjA4MDAJCQkyMgorCisvKiBhcmd1bWVudHMgKi8KKyNkZWZpbmUgRElHSV9XT1JEX1NJWkVfNQkJCTAKKyNkZWZpbmUgRElHSV9XT1JEX1NJWkVfNgkJCTEKKyNkZWZpbmUgRElHSV9XT1JEX1NJWkVfNwkJCTIKKyNkZWZpbmUgRElHSV9XT1JEX1NJWkVfOAkJCTMKKworI2RlZmluZSBESUdJX1BBUklUWV9OT05FCQkJMAorI2RlZmluZSBESUdJX1BBUklUWV9PREQJCQkJMQorI2RlZmluZSBESUdJX1BBUklUWV9FVkVOCQkJMgorI2RlZmluZSBESUdJX1BBUklUWV9NQVJLCQkJMworI2RlZmluZSBESUdJX1BBUklUWV9TUEFDRQkJCTQKKworI2RlZmluZSBESUdJX1NUT1BfQklUU18xCQkJMAorI2RlZmluZSBESUdJX1NUT1BfQklUU18yCQkJMQorCisjZGVmaW5lIERJR0lfSU5QVVRfRkxPV19DT05UUk9MX1hPTl9YT0ZGCTEKKyNkZWZpbmUgRElHSV9JTlBVVF9GTE9XX0NPTlRST0xfUlRTCQkyCisjZGVmaW5lIERJR0lfSU5QVVRfRkxPV19DT05UUk9MX0RUUgkJNAorCisjZGVmaW5lIERJR0lfT1VUUFVUX0ZMT1dfQ09OVFJPTF9YT05fWE9GRgkxCisjZGVmaW5lIERJR0lfT1VUUFVUX0ZMT1dfQ09OVFJPTF9DVFMJCTIKKyNkZWZpbmUgRElHSV9PVVRQVVRfRkxPV19DT05UUk9MX0RTUgkJNAorCisjZGVmaW5lIERJR0lfRFRSX0lOQUNUSVZFCQkJMAorI2RlZmluZSBESUdJX0RUUl9BQ1RJVkUJCQkJMQorI2RlZmluZSBESUdJX0RUUl9JTlBVVF9GTE9XX0NPTlRST0wJCTIKKworI2RlZmluZSBESUdJX1JUU19JTkFDVElWRQkJCTAKKyNkZWZpbmUgRElHSV9SVFNfQUNUSVZFCQkJCTEKKyNkZWZpbmUgRElHSV9SVFNfSU5QVVRfRkxPV19DT05UUk9MCQkyCisjZGVmaW5lIERJR0lfUlRTX1RPR0dMRQkJCQkzCisKKyNkZWZpbmUgRElHSV9GTFVTSF9UWAkJCQkxCisjZGVmaW5lIERJR0lfRkxVU0hfUlgJCQkJMgorI2RlZmluZSBESUdJX1JFU1VNRV9UWAkJCQk0IC8qIGNsZWFycyB4b2ZmIGNvbmRpdGlvbiAqLworCisjZGVmaW5lIERJR0lfVFJBTlNNSVRfTk9UX0lETEUJCQkwCisjZGVmaW5lIERJR0lfVFJBTlNNSVRfSURMRQkJCTEKKworI2RlZmluZSBESUdJX0RJU0FCTEUJCQkJMAorI2RlZmluZSBESUdJX0VOQUJMRQkJCQkxCisKKyNkZWZpbmUgRElHSV9ERUFTU0VSVAkJCQkwCisjZGVmaW5lIERJR0lfQVNTRVJUCQkJCTEKKworLyogaW4gYmFuZCBzdGF0dXMgY29kZXMgKi8KKyNkZWZpbmUgRElHSV9PVkVSUlVOX0VSUk9SCQkJNAorI2RlZmluZSBESUdJX1BBUklUWV9FUlJPUgkJCTgKKyNkZWZpbmUgRElHSV9GUkFNSU5HX0VSUk9SCQkJMTYKKyNkZWZpbmUgRElHSV9CUkVBS19FUlJPUgkJCTMyCisKKy8qIG91dCBvZiBiYW5kIHN0YXR1cyAqLworI2RlZmluZSBESUdJX05PX0VSUk9SCQkJCTAKKyNkZWZpbmUgRElHSV9CQURfRklSU1RfUEFSQU1FVEVSCQkxCisjZGVmaW5lIERJR0lfQkFEX1NFQ09ORF9QQVJBTUVURVIJCTIKKyNkZWZpbmUgRElHSV9JTlZBTElEX0xJTkUJCQkzCisjZGVmaW5lIERJR0lfSU5WQUxJRF9PUENPREUJCQk0CisKKy8qIGlucHV0IHNpZ25hbHMgKi8KKyNkZWZpbmUgRElHSV9SRUFEX0lOUFVUX1NJR05BTFNfU0xPVAkJMQorI2RlZmluZSBESUdJX1JFQURfSU5QVVRfU0lHTkFMU19FUlIJCTIKKyNkZWZpbmUgRElHSV9SRUFEX0lOUFVUX1NJR05BTFNfQlVTWQkJNAorI2RlZmluZSBESUdJX1JFQURfSU5QVVRfU0lHTkFMU19QRQkJOAorI2RlZmluZSBESUdJX1JFQURfSU5QVVRfU0lHTkFMU19DVFMJCTE2CisjZGVmaW5lIERJR0lfUkVBRF9JTlBVVF9TSUdOQUxTX0RTUgkJMzIKKyNkZWZpbmUgRElHSV9SRUFEX0lOUFVUX1NJR05BTFNfUkkJCTY0CisjZGVmaW5lIERJR0lfUkVBRF9JTlBVVF9TSUdOQUxTX0RDRAkJMTI4CisKKworLyogU3RydWN0dXJlcyAqLworCitzdHJ1Y3QgZGlnaV9zZXJpYWwgeworCXNwaW5sb2NrX3QgZHNfc2VyaWFsX2xvY2s7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqZHNfb29iX3BvcnQ7CS8qIG91dC1vZi1iYW5kIHBvcnQgKi8KKwlpbnQgZHNfb29iX3BvcnRfbnVtOwkJCS8qIGluZGV4IG9mIG91dC1vZi1iYW5kIHBvcnQgKi8KKwlpbnQgZHNfZGV2aWNlX3N0YXJ0ZWQ7Cit9OworCitzdHJ1Y3QgZGlnaV9wb3J0IHsKKwlzcGlubG9ja190IGRwX3BvcnRfbG9jazsKKwlpbnQgZHBfcG9ydF9udW07CisJaW50IGRwX291dF9idWZfbGVuOworCXVuc2lnbmVkIGNoYXIgZHBfb3V0X2J1ZltESUdJX09VVF9CVUZfU0laRV07CisJaW50IGRwX2luX2J1Zl9sZW47CisJdW5zaWduZWQgY2hhciBkcF9pbl9idWZbRElHSV9JTl9CVUZfU0laRV07CisJdW5zaWduZWQgY2hhciBkcF9pbl9mbGFnX2J1ZltESUdJX0lOX0JVRl9TSVpFXTsKKwlpbnQgZHBfd3JpdGVfdXJiX2luX3VzZTsKKwl1bnNpZ25lZCBpbnQgZHBfbW9kZW1fc2lnbmFsczsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBkcF9tb2RlbV9jaGFuZ2Vfd2FpdDsKKwlpbnQgZHBfdHJhbnNtaXRfaWRsZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBkcF90cmFuc21pdF9pZGxlX3dhaXQ7CisJaW50IGRwX3Rocm90dGxlZDsKKwlpbnQgZHBfdGhyb3R0bGVfcmVzdGFydDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBkcF9mbHVzaF93YWl0OworCWludCBkcF9pbl9jbG9zZTsJCQkvKiBjbG9zZSBpbiBwcm9ncmVzcyAqLworCXdhaXRfcXVldWVfaGVhZF90IGRwX2Nsb3NlX3dhaXQ7CS8qIHdhaXQgcXVldWUgZm9yIGNsb3NlICovCisJc3RydWN0IHdvcmtfc3RydWN0IGRwX3dha2V1cF93b3JrOworfTsKKworCisvKiBMb2NhbCBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KKworc3RhdGljIHZvaWQgZGlnaV93YWtldXBfd3JpdGUoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgKTsKK3N0YXRpYyB2b2lkIGRpZ2lfd2FrZXVwX3dyaXRlX2xvY2sodm9pZCAqKTsKK3N0YXRpYyBpbnQgZGlnaV93cml0ZV9vb2JfY29tbWFuZCggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwl1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCwgaW50IGludGVycnVwdGlibGUgKTsKK3N0YXRpYyBpbnQgZGlnaV93cml0ZV9pbmJfY29tbWFuZCggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwl1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0ICk7CitzdGF0aWMgaW50IGRpZ2lfc2V0X21vZGVtX3NpZ25hbHMoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJdW5zaWduZWQgaW50IG1vZGVtX3NpZ25hbHMsIGludCBpbnRlcnJ1cHRpYmxlICk7CitzdGF0aWMgaW50IGRpZ2lfdHJhbnNtaXRfaWRsZSggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgKTsKK3N0YXRpYyB2b2lkIGRpZ2lfcnhfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgZGlnaV9yeF91bnRocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGRpZ2lfc2V0X3Rlcm1pb3MoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIAorCXN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcyApOworc3RhdGljIHZvaWQgZGlnaV9icmVha19jdGwoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSApOworc3RhdGljIGludCBkaWdpX2lvY3RsKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyApOworc3RhdGljIGludCBkaWdpX3Rpb2NtZ2V0KCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSApOworc3RhdGljIGludCBkaWdpX3Rpb2Ntc2V0KCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIgKTsKK3N0YXRpYyBpbnQgZGlnaV93cml0ZSggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQgKTsKK3N0YXRpYyB2b2lkIGRpZ2lfd3JpdGVfYnVsa19jYWxsYmFjayggc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyApOworc3RhdGljIGludCBkaWdpX3dyaXRlX3Jvb20oIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgKTsKK3N0YXRpYyBpbnQgZGlnaV9jaGFyc19pbl9idWZmZXIoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgKTsKK3N0YXRpYyBpbnQgZGlnaV9vcGVuKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCApOworc3RhdGljIHZvaWQgZGlnaV9jbG9zZSggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHAgKTsKK3N0YXRpYyBpbnQgZGlnaV9zdGFydHVwX2RldmljZSggc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCApOworc3RhdGljIGludCBkaWdpX3N0YXJ0dXAoIHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgKTsKK3N0YXRpYyB2b2lkIGRpZ2lfc2h1dGRvd24oIHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgKTsKK3N0YXRpYyB2b2lkIGRpZ2lfcmVhZF9idWxrX2NhbGxiYWNrKCBzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzICk7CitzdGF0aWMgaW50IGRpZ2lfcmVhZF9pbmJfY2FsbGJhY2soIHN0cnVjdCB1cmIgKnVyYiApOworc3RhdGljIGludCBkaWdpX3JlYWRfb29iX2NhbGxiYWNrKCBzdHJ1Y3QgdXJiICp1cmIgKTsKKworCisvKiBTdGF0aWNzICovCisKK3N0YXRpYyBpbnQgZGVidWc7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jb21iaW5lZCBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoRElHSV9WRU5ET1JfSUQsIERJR0lfMl9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRElHSV9WRU5ET1JfSUQsIERJR0lfNF9JRCkgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlXzIgW10gPSB7CisJeyBVU0JfREVWSUNFKERJR0lfVkVORE9SX0lELCBESUdJXzJfSUQpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV80IFtdID0geworCXsgVVNCX0RFVklDRShESUdJX1ZFTkRPUl9JRCwgRElHSV80X0lEKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlX2NvbWJpbmVkKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGRpZ2lfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJkaWdpX2FjY2VsZXBvcnQiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGVfY29tYmluZWQsCit9OworCisKKy8qIGRldmljZSBpbmZvIG5lZWRlZCBmb3IgdGhlIERpZ2kgc2VyaWFsIGNvbnZlcnRlciAqLworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZGlnaV9hY2NlbGVwb3J0XzJfZGV2aWNlID0geworCS5vd25lciA9CQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCQkiRGlnaSAyIHBvcnQgVVNCIGFkYXB0ZXIiLAorCS5zaG9ydF9uYW1lID0JCQkiZGlnaV8yIiwKKwkuaWRfdGFibGUgPQkJCWlkX3RhYmxlXzIsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQkJMCwKKwkubnVtX2J1bGtfaW4gPQkJCTQsCisJLm51bV9idWxrX291dCA9CQkJNCwKKwkubnVtX3BvcnRzID0JCQkzLAorCS5vcGVuID0JCQkJZGlnaV9vcGVuLAorCS5jbG9zZSA9CQkJZGlnaV9jbG9zZSwKKwkud3JpdGUgPQkJCWRpZ2lfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJCWRpZ2lfd3JpdGVfcm9vbSwKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9IAkJZGlnaV93cml0ZV9idWxrX2NhbGxiYWNrLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQkJZGlnaV9yZWFkX2J1bGtfY2FsbGJhY2ssCisJLmNoYXJzX2luX2J1ZmZlciA9CQlkaWdpX2NoYXJzX2luX2J1ZmZlciwKKwkudGhyb3R0bGUgPQkJCWRpZ2lfcnhfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkJCWRpZ2lfcnhfdW50aHJvdHRsZSwKKwkuaW9jdGwgPQkJCWRpZ2lfaW9jdGwsCisJLnNldF90ZXJtaW9zID0JCQlkaWdpX3NldF90ZXJtaW9zLAorCS5icmVha19jdGwgPQkJCWRpZ2lfYnJlYWtfY3RsLAorCS50aW9jbWdldCA9CQkJZGlnaV90aW9jbWdldCwKKwkudGlvY21zZXQgPQkJCWRpZ2lfdGlvY21zZXQsCisJLmF0dGFjaCA9CQkJZGlnaV9zdGFydHVwLAorCS5zaHV0ZG93biA9CQkJZGlnaV9zaHV0ZG93biwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBkaWdpX2FjY2VsZXBvcnRfNF9kZXZpY2UgPSB7CisJLm93bmVyID0JCQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJCSJEaWdpIDQgcG9ydCBVU0IgYWRhcHRlciIsCisJLnNob3J0X25hbWUgPQkJCSJkaWdpXzQiLAorCS5pZF90YWJsZSA9CQkJaWRfdGFibGVfNCwKKwkubnVtX2ludGVycnVwdF9pbiA9CQkwLAorCS5udW1fYnVsa19pbiA9CQkJNSwKKwkubnVtX2J1bGtfb3V0ID0JCQk1LAorCS5udW1fcG9ydHMgPQkJCTQsCisJLm9wZW4gPQkJCQlkaWdpX29wZW4sCisJLmNsb3NlID0JCQlkaWdpX2Nsb3NlLAorCS53cml0ZSA9CQkJZGlnaV93cml0ZSwKKwkud3JpdGVfcm9vbSA9CQkJZGlnaV93cml0ZV9yb29tLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0gCQlkaWdpX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJLnJlYWRfYnVsa19jYWxsYmFjayA9CQlkaWdpX3JlYWRfYnVsa19jYWxsYmFjaywKKwkuY2hhcnNfaW5fYnVmZmVyID0JCWRpZ2lfY2hhcnNfaW5fYnVmZmVyLAorCS50aHJvdHRsZSA9CQkJZGlnaV9yeF90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQkJZGlnaV9yeF91bnRocm90dGxlLAorCS5pb2N0bCA9CQkJZGlnaV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJCWRpZ2lfc2V0X3Rlcm1pb3MsCisJLmJyZWFrX2N0bCA9CQkJZGlnaV9icmVha19jdGwsCisJLnRpb2NtZ2V0ID0JCQlkaWdpX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9CQkJZGlnaV90aW9jbXNldCwKKwkuYXR0YWNoID0JCQlkaWdpX3N0YXJ0dXAsCisJLnNodXRkb3duID0JCQlkaWdpX3NodXRkb3duLAorfTsKKworCisvKiBGdW5jdGlvbnMgKi8KKworLyoKKyogIENvbmQgV2FpdCBJbnRlcnJ1cHRpYmxlIFRpbWVvdXQgSXJxcmVzdG9yZQorKgorKiAgRG8gc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSBhbmQgaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0CisqICBzbyB0aGF0IHdha2UgdXBzIGFyZSBub3QgbG9zdCBpZiB0aGV5IG9jY3VyIGJldHdlZW4gdGhlIHVubG9jaworKiAgYW5kIHRoZSBzbGVlcC4gIEluIG90aGVyIHdvcmRzLCBzcGluX3VubG9ja19pcnFyZXN0b3JlIGFuZAorKiAgaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0IGFyZSAiYXRvbWljIiB3aXRoIHJlc3BlY3QgdG8KKyogIHdha2UgdXBzLiAgVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCBjb25kaXRpb24gdmFyaWFibGVzLgorKi8KKworc3RhdGljIGlubGluZSBsb25nIGNvbmRfd2FpdF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRfaXJxcmVzdG9yZSgKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgbG9uZyB0aW1lb3V0LAorCXNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MgKQoreworCURFRklORV9XQUlUKHdhaXQpOworCisJcHJlcGFyZV90b193YWl0KHEsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncyk7CisJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CisJZmluaXNoX3dhaXQocSwgJndhaXQpOworCisJcmV0dXJuIHRpbWVvdXQ7CisKK30KKworCisvKgorKiAgRGlnaSBXYWtldXAgV3JpdGUKKyoKKyogIFdha2UgdXAgcG9ydCwgbGluZSBkaXNjaXBsaW5lLCBhbmQgdHR5IHByb2Nlc3NlcyBzbGVlcGluZworKiAgb24gd3JpdGVzLgorKi8KKworc3RhdGljIHZvaWQgZGlnaV93YWtldXBfd3JpdGVfbG9jayh2b2lkICphcmcpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IGFyZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKworCXNwaW5fbG9ja19pcnFzYXZlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCWRpZ2lfd2FrZXVwX3dyaXRlKCBwb3J0ICk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKK30KKworc3RhdGljIHZvaWQgZGlnaV93YWtldXBfd3JpdGUoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgKQoreworCisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnR0eTsKKworCisJLyogd2FrZSB1cCBwb3J0IHByb2Nlc3NlcyAqLworCXdha2VfdXBfaW50ZXJydXB0aWJsZSggJnBvcnQtPndyaXRlX3dhaXQgKTsKKworCS8qIHdha2UgdXAgbGluZSBkaXNjaXBsaW5lICovCisJdHR5X3dha2V1cCh0dHkpOworfQorCisKKy8qCisqICBEaWdpIFdyaXRlIE9PQiBDb21tYW5kCisqCisqICBXcml0ZSBjb21tYW5kcyBvbiB0aGUgb3V0IG9mIGJhbmQgcG9ydC4gIENvbW1hbmRzIGFyZSA0CisqICBieXRlcyBlYWNoLCBtdWx0aXBsZSBjb21tYW5kcyBjYW4gYmUgc2VudCBhdCBvbmNlLCBhbmQKKyogIG5vIGNvbW1hbmQgd2lsbCBiZSBzcGxpdCBhY3Jvc3MgVVNCIHBhY2tldHMuICBSZXR1cm5zIDAKKyogIGlmIHN1Y2Nlc3NmdWwsIC1FSU5UUiBpZiBpbnRlcnJ1cHRlZCB3aGlsZSBzbGVlcGluZyBhbmQKKyogIHRoZSBpbnRlcnJ1cHRpYmxlIGZsYWcgaXMgdHJ1ZSwgb3IgYSBuZWdhdGl2ZSBlcnJvcgorKiAgcmV0dXJuZWQgYnkgdXNiX3N1Ym1pdF91cmIuCisqLworCitzdGF0aWMgaW50IGRpZ2lfd3JpdGVfb29iX2NvbW1hbmQoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQsIGludCBpbnRlcnJ1cHRpYmxlICkKK3sKKworCWludCByZXQgPSAwOworCWludCBsZW47CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqb29iX3BvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSgoc3RydWN0IGRpZ2lfc2VyaWFsICopKHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKSkpLT5kc19vb2JfcG9ydDsKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpvb2JfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShvb2JfcG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKworZGJnKCAiZGlnaV93cml0ZV9vb2JfY29tbWFuZDogVE9QOiBwb3J0PSVkLCBjb3VudD0lZCIsIG9vYl9wcml2LT5kcF9wb3J0X251bSwgY291bnQgKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCAmb29iX3ByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKworCXdoaWxlKCBjb3VudCA+IDAgKSB7CisKKwkJd2hpbGUoIG9vYl9wb3J0LT53cml0ZV91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MKKwkJfHwgb29iX3ByaXYtPmRwX3dyaXRlX3VyYl9pbl91c2UgKSB7CisJCQljb25kX3dhaXRfaW50ZXJydXB0aWJsZV90aW1lb3V0X2lycXJlc3RvcmUoCisJCQkJJm9vYl9wb3J0LT53cml0ZV93YWl0LCBESUdJX1JFVFJZX1RJTUVPVVQsCisJCQkJJm9vYl9wcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJCQlpZiggaW50ZXJydXB0aWJsZSAmJiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSApIHsKKwkJCQlyZXR1cm4oIC1FSU5UUiApOworCQkJfQorCQkJc3Bpbl9sb2NrX2lycXNhdmUoICZvb2JfcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCQl9CisKKwkJLyogbGVuIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LCBzbyBjb21tYW5kcyBhcmUgbm90IHNwbGl0ICovCisJCWxlbiA9IG1pbihjb3VudCwgb29iX3BvcnQtPmJ1bGtfb3V0X3NpemUgKTsKKwkJaWYoIGxlbiA+IDQgKQorCQkJbGVuICY9IH4zOworCisJCW1lbWNweSggb29iX3BvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBidWYsIGxlbiApOworCQlvb2JfcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gbGVuOworCQlvb2JfcG9ydC0+d3JpdGVfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKworCQlpZiggKHJldD11c2Jfc3VibWl0X3VyYihvb2JfcG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKSkgPT0gMCApIHsKKwkJCW9vYl9wcml2LT5kcF93cml0ZV91cmJfaW5fdXNlID0gMTsKKwkJCWNvdW50IC09IGxlbjsKKwkJCWJ1ZiArPSBsZW47CisJCX0KKworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZvb2JfcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCisJaWYoIHJldCApIHsKKwkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWQiLCBfX0ZVTkNUSU9OX18sCisJCQlyZXQgKTsKKwl9CisKKwlyZXR1cm4oIHJldCApOworCit9CisKKworLyoKKyogIERpZ2kgV3JpdGUgSW4gQmFuZCBDb21tYW5kCisqCisqICBXcml0ZSBjb21tYW5kcyBvbiB0aGUgZ2l2ZW4gcG9ydC4gIENvbW1hbmRzIGFyZSA0CisqICBieXRlcyBlYWNoLCBtdWx0aXBsZSBjb21tYW5kcyBjYW4gYmUgc2VudCBhdCBvbmNlLCBhbmQKKyogIG5vIGNvbW1hbmQgd2lsbCBiZSBzcGxpdCBhY3Jvc3MgVVNCIHBhY2tldHMuICBJZiB0aW1lb3V0CisqICBpcyBub24temVybywgd3JpdGUgaW4gYmFuZCBjb21tYW5kIHdpbGwgcmV0dXJuIGFmdGVyCisqICB3YWl0aW5nIHVuc3VjY2Vzc2Z1bGx5IGZvciB0aGUgVVJCIHN0YXR1cyB0byBjbGVhciBmb3IKKyogIHRpbWVvdXQgdGlja3MuICBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZQorKiAgZXJyb3IgcmV0dXJuZWQgYnkgZGlnaV93cml0ZS4KKyovCisKK3N0YXRpYyBpbnQgZGlnaV93cml0ZV9pbmJfY29tbWFuZCggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwl1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0ICkKK3sKKworCWludCByZXQgPSAwOworCWludCBsZW47CisJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKworZGJnKCAiZGlnaV93cml0ZV9pbmJfY29tbWFuZDogVE9QOiBwb3J0PSVkLCBjb3VudD0lZCIsIHByaXYtPmRwX3BvcnRfbnVtLAorY291bnQgKTsKKworCWlmKCB0aW1lb3V0ICkKKwkJdGltZW91dCArPSBqaWZmaWVzOworCWVsc2UKKwkJdGltZW91dCA9IFVMT05HX01BWDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCisJd2hpbGUoIGNvdW50ID4gMCAmJiByZXQgPT0gMCApIHsKKworCQl3aGlsZSggKHBvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUworCQl8fCBwcml2LT5kcF93cml0ZV91cmJfaW5fdXNlKSAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJY29uZF93YWl0X2ludGVycnVwdGlibGVfdGltZW91dF9pcnFyZXN0b3JlKAorCQkJCSZwb3J0LT53cml0ZV93YWl0LCBESUdJX1JFVFJZX1RJTUVPVVQsCisJCQkJJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwkJCWlmKCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSApIHsKKwkJCQlyZXR1cm4oIC1FSU5UUiApOworCQkJfQorCQkJc3Bpbl9sb2NrX2lycXNhdmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJCX0KKworCQkvKiBsZW4gbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQgYW5kIHNtYWxsIGVub3VnaCB0byAqLworCQkvKiBndWFyYW50ZWUgdGhlIHdyaXRlIHdpbGwgc2VuZCBidWZmZXJlZCBkYXRhIGZpcnN0LCAqLworCQkvKiBzbyBjb21tYW5kcyBhcmUgaW4gb3JkZXIgd2l0aCBkYXRhIGFuZCBub3Qgc3BsaXQgKi8KKwkJbGVuID0gbWluKGNvdW50LCBwb3J0LT5idWxrX291dF9zaXplLTItcHJpdi0+ZHBfb3V0X2J1Zl9sZW4gKTsKKwkJaWYoIGxlbiA+IDQgKQorCQkJbGVuICY9IH4zOworCisJCS8qIHdyaXRlIGFueSBidWZmZXJlZCBkYXRhIGZpcnN0ICovCisJCWlmKCBwcml2LT5kcF9vdXRfYnVmX2xlbiA+IDAgKSB7CisJCQlkYXRhWzBdID0gRElHSV9DTURfU0VORF9EQVRBOworCQkJZGF0YVsxXSA9IHByaXYtPmRwX291dF9idWZfbGVuOworCQkJbWVtY3B5KCBkYXRhKzIsIHByaXYtPmRwX291dF9idWYsCisJCQkJcHJpdi0+ZHBfb3V0X2J1Zl9sZW4gKTsKKwkJCW1lbWNweSggZGF0YSsyK3ByaXYtPmRwX291dF9idWZfbGVuLCBidWYsIGxlbiApOworCQkJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoCisJCQkJPSBwcml2LT5kcF9vdXRfYnVmX2xlbisyK2xlbjsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweSggZGF0YSwgYnVmLCBsZW4gKTsKKwkJCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGxlbjsKKwkJfQorCQlwb3J0LT53cml0ZV91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCisJCWlmKCAocmV0PXVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQykpID09IDAgKSB7CisJCQlwcml2LT5kcF93cml0ZV91cmJfaW5fdXNlID0gMTsKKwkJCXByaXYtPmRwX291dF9idWZfbGVuID0gMDsKKwkJCWNvdW50IC09IGxlbjsKKwkJCWJ1ZiArPSBsZW47CisJCX0KKworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisKKwlpZiggcmV0ICkgeworCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCwgcG9ydD0lZCIsIF9fRlVOQ1RJT05fXywKKwkJcmV0LCBwcml2LT5kcF9wb3J0X251bSApOworCX0KKworCXJldHVybiggcmV0ICk7CisKK30KKworCisvKgorKiAgRGlnaSBTZXQgTW9kZW0gU2lnbmFscworKgorKiAgU2V0cyBvciBjbGVhcnMgRFRSIGFuZCBSVFMgb24gdGhlIHBvcnQsIGFjY29yZGluZyB0byB0aGUKKyogIG1vZGVtX3NpZ25hbHMgYXJndW1lbnQuICBVc2UgVElPQ01fRFRSIGFuZCBUSU9DTV9SVFMgZmxhZ3MKKyogIGZvciB0aGUgbW9kZW1fc2lnbmFscyBhcmd1bWVudC4gIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLAorKiAgLUVJTlRSIGlmIGludGVycnVwdGVkIHdoaWxlIHNsZWVwaW5nLCBvciBhIG5vbi16ZXJvIGVycm9yCisqICByZXR1cm5lZCBieSB1c2Jfc3VibWl0X3VyYi4KKyovCisKK3N0YXRpYyBpbnQgZGlnaV9zZXRfbW9kZW1fc2lnbmFscyggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwl1bnNpZ25lZCBpbnQgbW9kZW1fc2lnbmFscywgaW50IGludGVycnVwdGlibGUgKQoreworCisJaW50IHJldDsKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpwb3J0X3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqb29iX3BvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSgoc3RydWN0IGRpZ2lfc2VyaWFsICopKHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKSkpLT5kc19vb2JfcG9ydDsKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpvb2JfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShvb2JfcG9ydCk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IG9vYl9wb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKworCitkYmcoICJkaWdpX3NldF9tb2RlbV9zaWduYWxzOiBUT1A6IHBvcnQ9JWQsIG1vZGVtX3NpZ25hbHM9MHgleCIsCitwb3J0X3ByaXYtPmRwX3BvcnRfbnVtLCBtb2RlbV9zaWduYWxzICk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSggJm9vYl9wcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJc3Bpbl9sb2NrKCAmcG9ydF9wcml2LT5kcF9wb3J0X2xvY2sgKTsKKworCXdoaWxlKCBvb2JfcG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTCisJfHwgb29iX3ByaXYtPmRwX3dyaXRlX3VyYl9pbl91c2UgKSB7CisJCXNwaW5fdW5sb2NrKCAmcG9ydF9wcml2LT5kcF9wb3J0X2xvY2sgKTsKKwkJY29uZF93YWl0X2ludGVycnVwdGlibGVfdGltZW91dF9pcnFyZXN0b3JlKAorCQkJJm9vYl9wb3J0LT53cml0ZV93YWl0LCBESUdJX1JFVFJZX1RJTUVPVVQsCisJCQkmb29iX3ByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwkJaWYoIGludGVycnVwdGlibGUgJiYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgKSB7CisJCQlyZXR1cm4oIC1FSU5UUiApOworCQl9CisJCXNwaW5fbG9ja19pcnFzYXZlKCAmb29iX3ByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwkJc3Bpbl9sb2NrKCAmcG9ydF9wcml2LT5kcF9wb3J0X2xvY2sgKTsKKwl9CisKKwlkYXRhWzBdID0gRElHSV9DTURfU0VUX0RUUl9TSUdOQUw7CisJZGF0YVsxXSA9IHBvcnRfcHJpdi0+ZHBfcG9ydF9udW07CisJZGF0YVsyXSA9IChtb2RlbV9zaWduYWxzJlRJT0NNX0RUUikgPworCQlESUdJX0RUUl9BQ1RJVkUgOiBESUdJX0RUUl9JTkFDVElWRTsKKwlkYXRhWzNdID0gMDsKKworCWRhdGFbNF0gPSBESUdJX0NNRF9TRVRfUlRTX1NJR05BTDsKKwlkYXRhWzVdID0gcG9ydF9wcml2LT5kcF9wb3J0X251bTsKKwlkYXRhWzZdID0gKG1vZGVtX3NpZ25hbHMmVElPQ01fUlRTKSA/CisJCURJR0lfUlRTX0FDVElWRSA6IERJR0lfUlRTX0lOQUNUSVZFOworCWRhdGFbN10gPSAwOworCisJb29iX3BvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDg7CisJb29iX3BvcnQtPndyaXRlX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisKKwlpZiggKHJldD11c2Jfc3VibWl0X3VyYihvb2JfcG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKSkgPT0gMCApIHsKKwkJb29iX3ByaXYtPmRwX3dyaXRlX3VyYl9pbl91c2UgPSAxOworCQlwb3J0X3ByaXYtPmRwX21vZGVtX3NpZ25hbHMgPQorCQkJKHBvcnRfcHJpdi0+ZHBfbW9kZW1fc2lnbmFscyZ+KFRJT0NNX0RUUnxUSU9DTV9SVFMpKQorCQkJfCAobW9kZW1fc2lnbmFscyYoVElPQ01fRFRSfFRJT0NNX1JUUykpOworCX0KKworCXNwaW5fdW5sb2NrKCAmcG9ydF9wcml2LT5kcF9wb3J0X2xvY2sgKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmb29iX3ByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKworCWlmKCByZXQgKSB7CisJCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkIiwgX19GVU5DVElPTl9fLAorCQlyZXQgKTsKKwl9CisKKwlyZXR1cm4oIHJldCApOworCit9CisKKworLyoKKyogIERpZ2kgVHJhbnNtaXQgSWRsZQorKgorKiAgRGlnaSB0cmFuc21pdCBpZGxlIHdhaXRzLCB1cCB0byB0aW1lb3V0IHRpY2tzLCBmb3IgdGhlIHRyYW5zbWl0dGVyCisqICB0byBnbyBpZGxlLiAgSXQgcmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwgb3IgYSBuZWdhdGl2ZSBlcnJvci4KKyoKKyogIFRoZXJlIGFyZSByYWNlIGNvbmRpdGlvbnMgaGVyZSBpZiBtb3JlIHRoYW4gb25lIHByb2Nlc3MgaXMgY2FsbGluZworKiAgZGlnaV90cmFuc21pdF9pZGxlIG9uIHRoZSBzYW1lIHBvcnQgYXQgdGhlIHNhbWUgdGltZS4gIEhvd2V2ZXIsIHRoaXMKKyogIGlzIG9ubHkgY2FsbGVkIGZyb20gY2xvc2UsIGFuZCBvbmx5IG9uZSBwcm9jZXNzIGNhbiBiZSBpbiBjbG9zZSBvbiBhCisqICBwb3J0IGF0IGEgdGltZSwgc28gaXRzIG9rLgorKi8KKworc3RhdGljIGludCBkaWdpX3RyYW5zbWl0X2lkbGUoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ICkKK3sKKworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciBidWZbMl07CisJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKworCisJc3Bpbl9sb2NrX2lycXNhdmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJcHJpdi0+ZHBfdHJhbnNtaXRfaWRsZSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKworCWJ1ZlswXSA9IERJR0lfQ01EX1RSQU5TTUlUX0lETEU7CisJYnVmWzFdID0gMDsKKworCXRpbWVvdXQgKz0gamlmZmllczsKKworCWlmKCAocmV0PWRpZ2lfd3JpdGVfaW5iX2NvbW1hbmQoIHBvcnQsIGJ1ZiwgMiwgdGltZW91dC1qaWZmaWVzICkpICE9IDAgKQorCQlyZXR1cm4oIHJldCApOworCisJc3Bpbl9sb2NrX2lycXNhdmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisKKwl3aGlsZSggdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkgJiYgIXByaXYtPmRwX3RyYW5zbWl0X2lkbGUgKSB7CisJCWNvbmRfd2FpdF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXRfaXJxcmVzdG9yZSgKKwkJCSZwcml2LT5kcF90cmFuc21pdF9pZGxlX3dhaXQsIERJR0lfUkVUUllfVElNRU9VVCwKKwkJCSZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJCWlmKCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSApIHsKKwkJCXJldHVybiggLUVJTlRSICk7CisJCX0KKwkJc3Bpbl9sb2NrX2lycXNhdmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJfQorCisJcHJpdi0+ZHBfdHJhbnNtaXRfaWRsZSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKworCXJldHVybiggMCApOworCit9CisKKworc3RhdGljIHZvaWQgZGlnaV9yeF90aHJvdHRsZSggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCApCit7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKworZGJnKCAiZGlnaV9yeF90aHJvdHRsZTogVE9QOiBwb3J0PSVkIiwgcHJpdi0+ZHBfcG9ydF9udW0gKTsKKworCS8qIHN0b3AgcmVjZWl2aW5nIGNoYXJhY3RlcnMgYnkgbm90IHJlc3VibWl0dGluZyB0aGUgcmVhZCB1cmIgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwlwcml2LT5kcF90aHJvdHRsZWQgPSAxOworCXByaXYtPmRwX3Rocm90dGxlX3Jlc3RhcnQgPSAwOworCXByaXYtPmRwX2luX2J1Zl9sZW4gPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisKK30KKworCitzdGF0aWMgdm9pZCBkaWdpX3J4X3VudGhyb3R0bGUoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgKQoreworCisJaW50IHJldCA9IDA7CisJaW50IGxlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnR0eTsKKworCitkYmcoICJkaWdpX3J4X3VudGhyb3R0bGU6IFRPUDogcG9ydD0lZCIsIHByaXYtPmRwX3BvcnRfbnVtICk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKworCS8qIHNlbmQgYW55IGJ1ZmZlcmVkIGNoYXJzIGZyb20gdGhyb3R0bGUgdGltZSBvbiB0byB0dHkgc3Vic3lzdGVtICovCisJbGVuID0gbWluKHByaXYtPmRwX2luX2J1Zl9sZW4sIFRUWV9GTElQQlVGX1NJWkUgLSB0dHktPmZsaXAuY291bnQgKTsKKwlpZiggbGVuID4gMCApIHsKKwkJbWVtY3B5KCB0dHktPmZsaXAuY2hhcl9idWZfcHRyLCBwcml2LT5kcF9pbl9idWYsIGxlbiApOworCQltZW1jcHkoIHR0eS0+ZmxpcC5mbGFnX2J1Zl9wdHIsIHByaXYtPmRwX2luX2ZsYWdfYnVmLCBsZW4gKTsKKwkJdHR5LT5mbGlwLmNoYXJfYnVmX3B0ciArPSBsZW47CisJCXR0eS0+ZmxpcC5mbGFnX2J1Zl9wdHIgKz0gbGVuOworCQl0dHktPmZsaXAuY291bnQgKz0gbGVuOworCQl0dHlfZmxpcF9idWZmZXJfcHVzaCggdHR5ICk7CisJfQorCisJLyogcmVzdGFydCByZWFkIGNoYWluICovCisJaWYoIHByaXYtPmRwX3Rocm90dGxlX3Jlc3RhcnQgKSB7CisJCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwkJcmV0ID0gdXNiX3N1Ym1pdF91cmIoIHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDICk7CisJfQorCisJLyogdHVybiB0aHJvdHRsZSBvZmYgKi8KKwlwcml2LT5kcF90aHJvdHRsZWQgPSAwOworCXByaXYtPmRwX2luX2J1Zl9sZW4gPSAwOworCXByaXYtPmRwX3Rocm90dGxlX3Jlc3RhcnQgPSAwOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKworCWlmKCByZXQgKSB7CisJCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZCwgcmV0PSVkLCBwb3J0PSVkIiwgX19GVU5DVElPTl9fLAorCQkJcmV0LCBwcml2LT5kcF9wb3J0X251bSApOworCX0KKworfQorCisKK3N0YXRpYyB2b2lkIGRpZ2lfc2V0X3Rlcm1pb3MoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIAorCXN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcyApCit7CisKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGludCBpZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19pZmxhZzsKKwl1bnNpZ25lZCBpbnQgY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJdW5zaWduZWQgaW50IG9sZF9pZmxhZyA9IG9sZF90ZXJtaW9zLT5jX2lmbGFnOworCXVuc2lnbmVkIGludCBvbGRfY2ZsYWcgPSBvbGRfdGVybWlvcy0+Y19jZmxhZzsKKwl1bnNpZ25lZCBjaGFyIGJ1ZlszMl07CisJdW5zaWduZWQgaW50IG1vZGVtX3NpZ25hbHM7CisJaW50IGFyZyxyZXQ7CisJaW50IGkgPSAwOworCisKK2RiZyggImRpZ2lfc2V0X3Rlcm1pb3M6IFRPUDogcG9ydD0lZCwgaWZsYWc9MHgleCwgb2xkX2lmbGFnPTB4JXgsIGNmbGFnPTB4JXgsIG9sZF9jZmxhZz0weCV4IiwgcHJpdi0+ZHBfcG9ydF9udW0sIGlmbGFnLCBvbGRfaWZsYWcsIGNmbGFnLCBvbGRfY2ZsYWcgKTsKKworCS8qIHNldCBiYXVkIHJhdGUgKi8KKwlpZiggKGNmbGFnJkNCQVVEKSAhPSAob2xkX2NmbGFnJkNCQVVEKSApIHsKKworCQlhcmcgPSAtMTsKKworCQkvKiByZWFzc2VydCBEVFIgYW5kIChtYXliZSkgUlRTIG9uIHRyYW5zaXRpb24gZnJvbSBCMCAqLworCQlpZiggKG9sZF9jZmxhZyZDQkFVRCkgPT0gQjAgKSB7CisJCQkvKiBkb24ndCBzZXQgUlRTIGlmIHVzaW5nIGhhcmR3YXJlIGZsb3cgY29udHJvbCAqLworCQkJLyogYW5kIHRocm90dGxpbmcgaW5wdXQgKi8KKwkJCW1vZGVtX3NpZ25hbHMgPSBUSU9DTV9EVFI7CisJCQlpZiggIShwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSB8fAorCQkJIXRlc3RfYml0KFRUWV9USFJPVFRMRUQsICZwb3J0LT50dHktPmZsYWdzKSApIHsKKwkJCQltb2RlbV9zaWduYWxzIHw9IFRJT0NNX1JUUzsKKwkJCX0KKwkJCWRpZ2lfc2V0X21vZGVtX3NpZ25hbHMoIHBvcnQsIG1vZGVtX3NpZ25hbHMsIDEgKTsKKwkJfQorCisJCXN3aXRjaCggKGNmbGFnJkNCQVVEKSApIHsKKwkJCS8qIGRyb3AgRFRSIGFuZCBSVFMgb24gdHJhbnNpdGlvbiB0byBCMCAqLworCQljYXNlIEIwOiBkaWdpX3NldF9tb2RlbV9zaWduYWxzKCBwb3J0LCAwLCAxICk7IGJyZWFrOworCQljYXNlIEI1MDogYXJnID0gRElHSV9CQVVEXzUwOyBicmVhazsKKwkJY2FzZSBCNzU6IGFyZyA9IERJR0lfQkFVRF83NTsgYnJlYWs7CisJCWNhc2UgQjExMDogYXJnID0gRElHSV9CQVVEXzExMDsgYnJlYWs7CisJCWNhc2UgQjE1MDogYXJnID0gRElHSV9CQVVEXzE1MDsgYnJlYWs7CisJCWNhc2UgQjIwMDogYXJnID0gRElHSV9CQVVEXzIwMDsgYnJlYWs7CisJCWNhc2UgQjMwMDogYXJnID0gRElHSV9CQVVEXzMwMDsgYnJlYWs7CisJCWNhc2UgQjYwMDogYXJnID0gRElHSV9CQVVEXzYwMDsgYnJlYWs7CisJCWNhc2UgQjEyMDA6IGFyZyA9IERJR0lfQkFVRF8xMjAwOyBicmVhazsKKwkJY2FzZSBCMTgwMDogYXJnID0gRElHSV9CQVVEXzE4MDA7IGJyZWFrOworCQljYXNlIEIyNDAwOiBhcmcgPSBESUdJX0JBVURfMjQwMDsgYnJlYWs7CisJCWNhc2UgQjQ4MDA6IGFyZyA9IERJR0lfQkFVRF80ODAwOyBicmVhazsKKwkJY2FzZSBCOTYwMDogYXJnID0gRElHSV9CQVVEXzk2MDA7IGJyZWFrOworCQljYXNlIEIxOTIwMDogYXJnID0gRElHSV9CQVVEXzE5MjAwOyBicmVhazsKKwkJY2FzZSBCMzg0MDA6IGFyZyA9IERJR0lfQkFVRF8zODQwMDsgYnJlYWs7CisJCWNhc2UgQjU3NjAwOiBhcmcgPSBESUdJX0JBVURfNTc2MDA7IGJyZWFrOworCQljYXNlIEIxMTUyMDA6IGFyZyA9IERJR0lfQkFVRF8xMTUyMDA7IGJyZWFrOworCQljYXNlIEIyMzA0MDA6IGFyZyA9IERJR0lfQkFVRF8yMzA0MDA7IGJyZWFrOworCQljYXNlIEI0NjA4MDA6IGFyZyA9IERJR0lfQkFVRF80NjA4MDA7IGJyZWFrOworCQlkZWZhdWx0OgorCQkJZGJnKCAiZGlnaV9zZXRfdGVybWlvczogY2FuJ3QgaGFuZGxlIGJhdWQgcmF0ZSAweCV4IiwKKwkJCQkoY2ZsYWcmQ0JBVUQpICk7CisJCQlicmVhazsKKwkJfQorCisJCWlmKCBhcmcgIT0gLTEgKSB7CisJCQlidWZbaSsrXSA9IERJR0lfQ01EX1NFVF9CQVVEX1JBVEU7CisJCQlidWZbaSsrXSA9IHByaXYtPmRwX3BvcnRfbnVtOworCQkJYnVmW2krK10gPSBhcmc7CisJCQlidWZbaSsrXSA9IDA7CisJCX0KKworCX0KKworCS8qIHNldCBwYXJpdHkgKi8KKwlpZiggKGNmbGFnJihQQVJFTkJ8UEFST0REKSkgIT0gKG9sZF9jZmxhZyYoUEFSRU5CfFBBUk9ERCkpICkgeworCisJCWlmKCAoY2ZsYWcmUEFSRU5CKSApIHsKKwkJCWlmKCAoY2ZsYWcmUEFST0REKSApCisJCQkJYXJnID0gRElHSV9QQVJJVFlfT0REOworCQkJZWxzZQorCQkJCWFyZyA9IERJR0lfUEFSSVRZX0VWRU47CisJCX0gZWxzZSB7CisJCQlhcmcgPSBESUdJX1BBUklUWV9OT05FOworCQl9CisKKwkJYnVmW2krK10gPSBESUdJX0NNRF9TRVRfUEFSSVRZOworCQlidWZbaSsrXSA9IHByaXYtPmRwX3BvcnRfbnVtOworCQlidWZbaSsrXSA9IGFyZzsKKwkJYnVmW2krK10gPSAwOworCisJfQorCisJLyogc2V0IHdvcmQgc2l6ZSAqLworCWlmKCAoY2ZsYWcmQ1NJWkUpICE9IChvbGRfY2ZsYWcmQ1NJWkUpICkgeworCisJCWFyZyA9IC0xOworCisJCXN3aXRjaCggKGNmbGFnJkNTSVpFKSApIHsKKwkJY2FzZSBDUzU6IGFyZyA9IERJR0lfV09SRF9TSVpFXzU7IGJyZWFrOworCQljYXNlIENTNjogYXJnID0gRElHSV9XT1JEX1NJWkVfNjsgYnJlYWs7CisJCWNhc2UgQ1M3OiBhcmcgPSBESUdJX1dPUkRfU0laRV83OyBicmVhazsKKwkJY2FzZSBDUzg6IGFyZyA9IERJR0lfV09SRF9TSVpFXzg7IGJyZWFrOworCQlkZWZhdWx0OgorCQkJZGJnKCAiZGlnaV9zZXRfdGVybWlvczogY2FuJ3QgaGFuZGxlIHdvcmQgc2l6ZSAlZCIsCisJCQkJKGNmbGFnJkNTSVpFKSApOworCQkJYnJlYWs7CisJCX0KKworCQlpZiggYXJnICE9IC0xICkgeworCQkJYnVmW2krK10gPSBESUdJX0NNRF9TRVRfV09SRF9TSVpFOworCQkJYnVmW2krK10gPSBwcml2LT5kcF9wb3J0X251bTsKKwkJCWJ1ZltpKytdID0gYXJnOworCQkJYnVmW2krK10gPSAwOworCQl9CisKKwl9CisKKwkvKiBzZXQgc3RvcCBiaXRzICovCisJaWYoIChjZmxhZyZDU1RPUEIpICE9IChvbGRfY2ZsYWcmQ1NUT1BCKSApIHsKKworCQlpZiggKGNmbGFnJkNTVE9QQikgKQorCQkJYXJnID0gRElHSV9TVE9QX0JJVFNfMjsKKwkJZWxzZQorCQkJYXJnID0gRElHSV9TVE9QX0JJVFNfMTsKKworCQlidWZbaSsrXSA9IERJR0lfQ01EX1NFVF9TVE9QX0JJVFM7CisJCWJ1ZltpKytdID0gcHJpdi0+ZHBfcG9ydF9udW07CisJCWJ1ZltpKytdID0gYXJnOworCQlidWZbaSsrXSA9IDA7CisKKwl9CisKKwkvKiBzZXQgaW5wdXQgZmxvdyBjb250cm9sICovCisJaWYoIChpZmxhZyZJWE9GRikgIT0gKG9sZF9pZmxhZyZJWE9GRikKKwl8fCAoY2ZsYWcmQ1JUU0NUUykgIT0gKG9sZF9jZmxhZyZDUlRTQ1RTKSApIHsKKworCQlhcmcgPSAwOworCisJCWlmKCAoaWZsYWcmSVhPRkYpICkKKwkJCWFyZyB8PSBESUdJX0lOUFVUX0ZMT1dfQ09OVFJPTF9YT05fWE9GRjsKKwkJZWxzZQorCQkJYXJnICY9IH5ESUdJX0lOUFVUX0ZMT1dfQ09OVFJPTF9YT05fWE9GRjsKKworCQlpZiggKGNmbGFnJkNSVFNDVFMpICkgeworCisJCQlhcmcgfD0gRElHSV9JTlBVVF9GTE9XX0NPTlRST0xfUlRTOworCisJCQkvKiBPbiBVU0ItNCBpdCBpcyBuZWNlc3NhcnkgdG8gYXNzZXJ0IFJUUyBwcmlvciAqLworCQkJLyogdG8gc2VsZWN0aW5nIFJUUyBpbnB1dCBmbG93IGNvbnRyb2wuICAqLworCQkJYnVmW2krK10gPSBESUdJX0NNRF9TRVRfUlRTX1NJR05BTDsKKwkJCWJ1ZltpKytdID0gcHJpdi0+ZHBfcG9ydF9udW07CisJCQlidWZbaSsrXSA9IERJR0lfUlRTX0FDVElWRTsKKwkJCWJ1ZltpKytdID0gMDsKKworCQl9IGVsc2UgeworCQkJYXJnICY9IH5ESUdJX0lOUFVUX0ZMT1dfQ09OVFJPTF9SVFM7CisJCX0KKworCQlidWZbaSsrXSA9IERJR0lfQ01EX1NFVF9JTlBVVF9GTE9XX0NPTlRST0w7CisJCWJ1ZltpKytdID0gcHJpdi0+ZHBfcG9ydF9udW07CisJCWJ1ZltpKytdID0gYXJnOworCQlidWZbaSsrXSA9IDA7CisKKwl9CisKKwkvKiBzZXQgb3V0cHV0IGZsb3cgY29udHJvbCAqLworCWlmKCAoaWZsYWcmSVhPTikgIT0gKG9sZF9pZmxhZyZJWE9OKQorCXx8IChjZmxhZyZDUlRTQ1RTKSAhPSAob2xkX2NmbGFnJkNSVFNDVFMpICkgeworCisJCWFyZyA9IDA7CisKKwkJaWYoIChpZmxhZyZJWE9OKSApCisJCQlhcmcgfD0gRElHSV9PVVRQVVRfRkxPV19DT05UUk9MX1hPTl9YT0ZGOworCQllbHNlCisJCQlhcmcgJj0gfkRJR0lfT1VUUFVUX0ZMT1dfQ09OVFJPTF9YT05fWE9GRjsKKworCQlpZiggKGNmbGFnJkNSVFNDVFMpICkgeworCQkJYXJnIHw9IERJR0lfT1VUUFVUX0ZMT1dfQ09OVFJPTF9DVFM7CisJCX0gZWxzZSB7CisJCQlhcmcgJj0gfkRJR0lfT1VUUFVUX0ZMT1dfQ09OVFJPTF9DVFM7CisJCQlwb3J0LT50dHktPmh3X3N0b3BwZWQgPSAwOworCQl9CisKKwkJYnVmW2krK10gPSBESUdJX0NNRF9TRVRfT1VUUFVUX0ZMT1dfQ09OVFJPTDsKKwkJYnVmW2krK10gPSBwcml2LT5kcF9wb3J0X251bTsKKwkJYnVmW2krK10gPSBhcmc7CisJCWJ1ZltpKytdID0gMDsKKworCX0KKworCS8qIHNldCByZWNlaXZlIGVuYWJsZS9kaXNhYmxlICovCisJaWYoIChjZmxhZyZDUkVBRCkgIT0gKG9sZF9jZmxhZyZDUkVBRCkgKSB7CisKKwkJaWYoIChjZmxhZyZDUkVBRCkgKQorCQkJYXJnID0gRElHSV9FTkFCTEU7CisJCWVsc2UKKwkJCWFyZyA9IERJR0lfRElTQUJMRTsKKworCQlidWZbaSsrXSA9IERJR0lfQ01EX1JFQ0VJVkVfRU5BQkxFOworCQlidWZbaSsrXSA9IHByaXYtPmRwX3BvcnRfbnVtOworCQlidWZbaSsrXSA9IGFyZzsKKwkJYnVmW2krK10gPSAwOworCisJfQorCisJaWYoIChyZXQ9ZGlnaV93cml0ZV9vb2JfY29tbWFuZCggcG9ydCwgYnVmLCBpLCAxICkpICE9IDAgKQorCQlkYmcoICJkaWdpX3NldF90ZXJtaW9zOiB3cml0ZSBvb2IgZmFpbGVkLCByZXQ9JWQiLCByZXQgKTsKKworfQorCisKK3N0YXRpYyB2b2lkIGRpZ2lfYnJlYWtfY3RsKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUgKQoreworCisJdW5zaWduZWQgY2hhciBidWZbNF07CisKKworCWJ1ZlswXSA9IERJR0lfQ01EX0JSRUFLX0NPTlRST0w7CisJYnVmWzFdID0gMjsJCQkJLyogbGVuZ3RoICovCisJYnVmWzJdID0gYnJlYWtfc3RhdGUgPyAxIDogMDsKKwlidWZbM10gPSAwOwkJCQkvKiBwYWQgKi8KKworCWRpZ2lfd3JpdGVfaW5iX2NvbW1hbmQoIHBvcnQsIGJ1ZiwgNCwgMCApOworCit9CisKKworc3RhdGljIGludCBkaWdpX3Rpb2NtZ2V0KCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSApCit7CisJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBpbnQgdmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzOiBUT1A6IHBvcnQ9JWQiLCBfX0ZVTkNUSU9OX18sIHByaXYtPmRwX3BvcnRfbnVtKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCXZhbCA9IHByaXYtPmRwX21vZGVtX3NpZ25hbHM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwlyZXR1cm4gdmFsOworfQorCisKK3N0YXRpYyBpbnQgZGlnaV90aW9jbXNldCggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyICkKK3sKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGludCB2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXM6IFRPUDogcG9ydD0lZCIsIF9fRlVOQ1RJT05fXywgcHJpdi0+ZHBfcG9ydF9udW0pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJdmFsID0gKHByaXYtPmRwX21vZGVtX3NpZ25hbHMgJiB+Y2xlYXIpIHwgc2V0OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJcmV0dXJuIGRpZ2lfc2V0X21vZGVtX3NpZ25hbHMoIHBvcnQsIHZhbCwgMSApOworfQorCisKK3N0YXRpYyBpbnQgZGlnaV9pb2N0bCggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcgKQoreworCisJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworZGJnKCAiZGlnaV9pb2N0bDogVE9QOiBwb3J0PSVkLCBjbWQ9MHgleCIsIHByaXYtPmRwX3BvcnRfbnVtLCBjbWQgKTsKKworCXN3aXRjaCAoY21kKSB7CisKKwljYXNlIFRJT0NNSVdBSVQ6CisJCS8qIHdhaXQgZm9yIGFueSBvZiB0aGUgNCBtb2RlbSBpbnB1dHMgKERDRCxSSSxEU1IsQ1RTKSovCisJCS8qIFRPRE8gKi8KKwkJcmV0dXJuKCAwICk7CisKKwljYXNlIFRJT0NHSUNPVU5UOgorCQkvKiByZXR1cm4gY291bnQgb2YgbW9kZW1saW5lIHRyYW5zaXRpb25zICovCisJCS8qIFRPRE8gKi8KKwkJcmV0dXJuIDA7CisKKwl9CisKKwlyZXR1cm4oIC1FTk9JT0NUTENNRCApOworCit9CisKKworc3RhdGljIGludCBkaWdpX3dyaXRlKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCApCit7CisKKwlpbnQgcmV0LGRhdGFfbGVuLG5ld19sZW47CisJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKworZGJnKCAiZGlnaV93cml0ZTogVE9QOiBwb3J0PSVkLCBjb3VudD0lZCwgaW5faW50ZXJydXB0PSVsZCIsCitwcml2LT5kcF9wb3J0X251bSwgY291bnQsIGluX2ludGVycnVwdCgpICk7CisKKwkvKiBjb3B5IHVzZXIgZGF0YSAod2hpY2ggY2FuIHNsZWVwKSBiZWZvcmUgZ2V0dGluZyBzcGluIGxvY2sgKi8KKwljb3VudCA9IG1pbiggY291bnQsIHBvcnQtPmJ1bGtfb3V0X3NpemUtMiApOworCWNvdW50ID0gbWluKCA2NCwgY291bnQpOworCisJLyogYmUgc3VyZSBvbmx5IG9uZSB3cml0ZSBwcm9jZWVkcyBhdCBhIHRpbWUgKi8KKwkvKiB0aGVyZSBhcmUgcmFjZXMgb24gdGhlIHBvcnQgcHJpdmF0ZSBidWZmZXIgKi8KKwkvKiBhbmQgcmFjZXMgdG8gY2hlY2sgd3JpdGVfdXJiLT5zdGF0dXMgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKworCS8qIHdhaXQgZm9yIHVyYiBzdGF0dXMgY2xlYXIgdG8gc3VibWl0IGFub3RoZXIgdXJiICovCisJaWYoIHBvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUworCXx8IHByaXYtPmRwX3dyaXRlX3VyYl9pbl91c2UgKSB7CisKKwkJLyogYnVmZmVyIGRhdGEgaWYgY291bnQgaXMgMSAocHJvYmFibHkgcHV0X2NoYXIpIGlmIHBvc3NpYmxlICovCisJCWlmKCBjb3VudCA9PSAxICYmIHByaXYtPmRwX291dF9idWZfbGVuIDwgRElHSV9PVVRfQlVGX1NJWkUgKSB7CisJCQlwcml2LT5kcF9vdXRfYnVmW3ByaXYtPmRwX291dF9idWZfbGVuKytdID0gKmJ1ZjsKKwkJCW5ld19sZW4gPSAxOworCQl9IGVsc2UgeworCQkJbmV3X2xlbiA9IDA7CisJCX0KKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCisJCXJldHVybiggbmV3X2xlbiApOworCisJfQorCisJLyogYWxsb3cgc3BhY2UgZm9yIGFueSBidWZmZXJlZCBkYXRhIGFuZCBmb3IgbmV3IGRhdGEsIHVwIHRvICovCisJLyogdHJhbnNmZXIgYnVmZmVyIHNpemUgLSAyIChmb3IgY29tbWFuZCBhbmQgbGVuZ3RoIGJ5dGVzKSAqLworCW5ld19sZW4gPSBtaW4oY291bnQsIHBvcnQtPmJ1bGtfb3V0X3NpemUtMi1wcml2LT5kcF9vdXRfYnVmX2xlbik7CisJZGF0YV9sZW4gPSBuZXdfbGVuICsgcHJpdi0+ZHBfb3V0X2J1Zl9sZW47CisKKwlpZiggZGF0YV9sZW4gPT0gMCApIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwkJcmV0dXJuKCAwICk7CisJfQorCisJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gZGF0YV9sZW4rMjsKKwlwb3J0LT53cml0ZV91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCisJKmRhdGErKyA9IERJR0lfQ01EX1NFTkRfREFUQTsKKwkqZGF0YSsrID0gZGF0YV9sZW47CisKKwkvKiBjb3B5IGluIGJ1ZmZlcmVkIGRhdGEgZmlyc3QgKi8KKwltZW1jcHkoIGRhdGEsIHByaXYtPmRwX291dF9idWYsIHByaXYtPmRwX291dF9idWZfbGVuICk7CisJZGF0YSArPSBwcml2LT5kcF9vdXRfYnVmX2xlbjsKKworCS8qIGNvcHkgaW4gbmV3IGRhdGEgKi8KKwltZW1jcHkoIGRhdGEsIGJ1ZiwgbmV3X2xlbiApOworCisJaWYoIChyZXQ9dXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKSkgPT0gMCApIHsKKwkJcHJpdi0+ZHBfd3JpdGVfdXJiX2luX3VzZSA9IDE7CisJCXJldCA9IG5ld19sZW47CisJCXByaXYtPmRwX291dF9idWZfbGVuID0gMDsKKwl9CisKKwkvKiByZXR1cm4gbGVuZ3RoIG9mIG5ldyBkYXRhIHdyaXR0ZW4sIG9yIGVycm9yICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwlpZiggcmV0IDwgMCApIHsKKwkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWQsIHBvcnQ9JWQiLCBfX0ZVTkNUSU9OX18sCisJCQlyZXQsIHByaXYtPmRwX3BvcnRfbnVtICk7CisJfQorCitkYmcoICJkaWdpX3dyaXRlOiByZXR1cm5pbmcgJWQiLCByZXQgKTsKKwlyZXR1cm4oIHJldCApOworCit9IAorCisKK3N0YXRpYyB2b2lkIGRpZ2lfd3JpdGVfYnVsa19jYWxsYmFjayggc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyApCit7CisKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2OworCXN0cnVjdCBkaWdpX3NlcmlhbCAqc2VyaWFsX3ByaXY7CisJaW50IHJldCA9IDA7CisKKworZGJnKCAiZGlnaV93cml0ZV9idWxrX2NhbGxiYWNrOiBUT1AsIHVyYi0+c3RhdHVzPSVkIiwgdXJiLT5zdGF0dXMgKTsKKworCS8qIHBvcnQgYW5kIHNlcmlhbCBzYW5pdHkgY2hlY2sgKi8KKwlpZiggcG9ydCA9PSBOVUxMIHx8IChwcml2PXVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KSkgPT0gTlVMTCApIHsKKwkJZXJyKCIlczogcG9ydCBvciBwb3J0LT5wcml2YXRlIGlzIE5VTEwsIHN0YXR1cz0lZCIsIF9fRlVOQ1RJT05fXywKKwkJCXVyYi0+c3RhdHVzICk7CisJCXJldHVybjsKKwl9CisJc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWlmKCBzZXJpYWwgPT0gTlVMTCB8fCAoc2VyaWFsX3ByaXY9dXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpKSA9PSBOVUxMICkgeworCQllcnIoIiVzOiBzZXJpYWwgb3Igc2VyaWFsLT5wcml2YXRlIGlzIE5VTEwsIHN0YXR1cz0lZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMgKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGhhbmRsZSBvb2IgY2FsbGJhY2sgKi8KKwlpZiggcHJpdi0+ZHBfcG9ydF9udW0gPT0gc2VyaWFsX3ByaXYtPmRzX29vYl9wb3J0X251bSApIHsKKwkJZGJnKCAiZGlnaV93cml0ZV9idWxrX2NhbGxiYWNrOiBvb2IgY2FsbGJhY2siICk7CisJCXNwaW5fbG9jayggJnByaXYtPmRwX3BvcnRfbG9jayApOworCQlwcml2LT5kcF93cml0ZV91cmJfaW5fdXNlID0gMDsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCAmcG9ydC0+d3JpdGVfd2FpdCApOworCQlzcGluX3VubG9jayggJnByaXYtPmRwX3BvcnRfbG9jayApOworCQlyZXR1cm47CisJfQorCisJLyogdHJ5IHRvIHNlbmQgYW55IGJ1ZmZlcmVkIGRhdGEgb24gdGhpcyBwb3J0LCBpZiBpdCBpcyBvcGVuICovCisJc3Bpbl9sb2NrKCAmcHJpdi0+ZHBfcG9ydF9sb2NrICk7CisJcHJpdi0+ZHBfd3JpdGVfdXJiX2luX3VzZSA9IDA7CisJaWYoIHBvcnQtPm9wZW5fY291bnQgJiYgcG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTCisJJiYgcHJpdi0+ZHBfb3V0X2J1Zl9sZW4gPiAwICkgeworCisJCSooKHVuc2lnbmVkIGNoYXIgKikocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpKQorCQkJPSAodW5zaWduZWQgY2hhcilESUdJX0NNRF9TRU5EX0RBVEE7CisJCSooKHVuc2lnbmVkIGNoYXIgKikocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpKzEpCisJCQk9ICh1bnNpZ25lZCBjaGFyKXByaXYtPmRwX291dF9idWZfbGVuOworCisJCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aAorCQkJPSBwcml2LT5kcF9vdXRfYnVmX2xlbisyOworCQlwb3J0LT53cml0ZV91cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCisJCW1lbWNweSggcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIrMiwgcHJpdi0+ZHBfb3V0X2J1ZiwKKwkJCXByaXYtPmRwX291dF9idWZfbGVuICk7CisKKwkJaWYoIChyZXQ9dXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKSkgPT0gMCApIHsKKwkJCXByaXYtPmRwX3dyaXRlX3VyYl9pbl91c2UgPSAxOworCQkJcHJpdi0+ZHBfb3V0X2J1Zl9sZW4gPSAwOworCQl9CisKKwl9CisKKwkvKiB3YWtlIHVwIHByb2Nlc3NlcyBzbGVlcGluZyBvbiB3cml0ZXMgaW1tZWRpYXRlbHkgKi8KKwlkaWdpX3dha2V1cF93cml0ZSggcG9ydCApOworCisJLyogYWxzbyBxdWV1ZSB1cCBhIHdha2V1cCBhdCBzY2hlZHVsZXIgdGltZSwgaW4gY2FzZSB3ZSAqLworCS8qIGxvc3QgdGhlIHJhY2UgaW4gd3JpdGVfY2hhbigpLiAqLworCXNjaGVkdWxlX3dvcmsoJnByaXYtPmRwX3dha2V1cF93b3JrKTsKKworCXNwaW5fdW5sb2NrKCAmcHJpdi0+ZHBfcG9ydF9sb2NrICk7CisKKwlpZiggcmV0ICkgeworCQllcnIoIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQsIHJldD0lZCwgcG9ydD0lZCIsIF9fRlVOQ1RJT05fXywKKwkJCXJldCwgcHJpdi0+ZHBfcG9ydF9udW0gKTsKKwl9CisKK30KKworCitzdGF0aWMgaW50IGRpZ2lfd3JpdGVfcm9vbSggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCApCit7CisKKwlpbnQgcm9vbTsKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCisKKwlzcGluX2xvY2tfaXJxc2F2ZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKworCWlmKCBwb3J0LT53cml0ZV91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MKKwl8fCBwcml2LT5kcF93cml0ZV91cmJfaW5fdXNlICkKKwkJcm9vbSA9IDA7CisJZWxzZQorCQlyb29tID0gcG9ydC0+YnVsa19vdXRfc2l6ZSAtIDIgLSBwcml2LT5kcF9vdXRfYnVmX2xlbjsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisKK2RiZyggImRpZ2lfd3JpdGVfcm9vbTogcG9ydD0lZCwgcm9vbT0lZCIsIHByaXYtPmRwX3BvcnRfbnVtLCByb29tICk7CisJcmV0dXJuKCByb29tICk7CisKK30KKworCitzdGF0aWMgaW50IGRpZ2lfY2hhcnNfaW5fYnVmZmVyKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ICkKK3sKKworCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKworCWlmKCBwb3J0LT53cml0ZV91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MKKwl8fCBwcml2LT5kcF93cml0ZV91cmJfaW5fdXNlICkgeworZGJnKCAiZGlnaV9jaGFyc19pbl9idWZmZXI6IHBvcnQ9JWQsIGNoYXJzPSVkIiwgcHJpdi0+ZHBfcG9ydF9udW0sIHBvcnQtPmJ1bGtfb3V0X3NpemUgLSAyICk7CisJCS8qIHJldHVybiggcG9ydC0+YnVsa19vdXRfc2l6ZSAtIDIgKTsgKi8KKwkJcmV0dXJuKCAyNTYgKTsKKwl9IGVsc2UgeworZGJnKCAiZGlnaV9jaGFyc19pbl9idWZmZXI6IHBvcnQ9JWQsIGNoYXJzPSVkIiwgcHJpdi0+ZHBfcG9ydF9udW0sIHByaXYtPmRwX291dF9idWZfbGVuICk7CisJCXJldHVybiggcHJpdi0+ZHBfb3V0X2J1Zl9sZW4gKTsKKwl9CisKK30KKworCitzdGF0aWMgaW50IGRpZ2lfb3Blbiggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHAgKQoreworCisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZlszMl07CisJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdGVybWlvcyBub3RfdGVybWlvczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKworCitkYmcoICJkaWdpX29wZW46IFRPUDogcG9ydD0lZCwgb3Blbl9jb3VudD0lZCIsIHByaXYtPmRwX3BvcnRfbnVtLCBwb3J0LT5vcGVuX2NvdW50ICk7CisKKwkvKiBiZSBzdXJlIHRoZSBkZXZpY2UgaXMgc3RhcnRlZCB1cCAqLworCWlmKCBkaWdpX3N0YXJ0dXBfZGV2aWNlKCBwb3J0LT5zZXJpYWwgKSAhPSAwICkKKwkJcmV0dXJuKCAtRU5YSU8gKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCisJLyogZG9uJ3Qgd2FpdCBvbiBhIGNsb3NlIGluIHByb2dyZXNzIGZvciBub24tYmxvY2tpbmcgb3BlbnMgKi8KKwlpZiggcHJpdi0+ZHBfaW5fY2xvc2UgJiYgKGZpbHAtPmZfZmxhZ3MmKE9fTkRFTEFZfE9fTk9OQkxPQ0spKSA9PSAwICkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCAmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyApOworCQlyZXR1cm4oIC1FQUdBSU4gKTsKKwl9CisKKwkvKiB3YWl0IGZvciBhIGNsb3NlIGluIHByb2dyZXNzIHRvIGZpbmlzaCAqLworCXdoaWxlKCBwcml2LT5kcF9pbl9jbG9zZSApIHsKKwkJY29uZF93YWl0X2ludGVycnVwdGlibGVfdGltZW91dF9pcnFyZXN0b3JlKAorCQkJJnByaXYtPmRwX2Nsb3NlX3dhaXQsIERJR0lfUkVUUllfVElNRU9VVCwKKwkJCSZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJCWlmKCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSApIHsKKwkJCXJldHVybiggLUVJTlRSICk7CisJCX0KKwkJc3Bpbl9sb2NrX2lycXNhdmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKyAKKwkvKiByZWFkIG1vZGVtIHNpZ25hbHMgYXV0b21hdGljYWxseSB3aGVuZXZlciB0aGV5IGNoYW5nZSAqLworCWJ1ZlswXSA9IERJR0lfQ01EX1JFQURfSU5QVVRfU0lHTkFMUzsKKwlidWZbMV0gPSBwcml2LT5kcF9wb3J0X251bTsKKwlidWZbMl0gPSBESUdJX0VOQUJMRTsKKwlidWZbM10gPSAwOworCisJLyogZmx1c2ggZmlmb3MgKi8KKwlidWZbNF0gPSBESUdJX0NNRF9JRkxVU0hfRklGTzsKKwlidWZbNV0gPSBwcml2LT5kcF9wb3J0X251bTsKKwlidWZbNl0gPSBESUdJX0ZMVVNIX1RYIHwgRElHSV9GTFVTSF9SWDsKKwlidWZbN10gPSAwOworCisJaWYoIChyZXQ9ZGlnaV93cml0ZV9vb2JfY29tbWFuZCggcG9ydCwgYnVmLCA4LCAxICkpICE9IDAgKQorCQlkYmcoICJkaWdpX29wZW46IHdyaXRlIG9vYiBmYWlsZWQsIHJldD0lZCIsIHJldCApOworCisJLyogc2V0IHRlcm1pb3Mgc2V0dGluZ3MgKi8KKwlub3RfdGVybWlvcy5jX2NmbGFnID0gfnBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwlub3RfdGVybWlvcy5jX2lmbGFnID0gfnBvcnQtPnR0eS0+dGVybWlvcy0+Y19pZmxhZzsKKwlkaWdpX3NldF90ZXJtaW9zKCBwb3J0LCAmbm90X3Rlcm1pb3MgKTsKKworCS8qIHNldCBEVFIgYW5kIFJUUyAqLworCWRpZ2lfc2V0X21vZGVtX3NpZ25hbHMoIHBvcnQsIFRJT0NNX0RUUnxUSU9DTV9SVFMsIDEgKTsKKworCXJldHVybiggMCApOworCit9CisKKworc3RhdGljIHZvaWQgZGlnaV9jbG9zZSggc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHAgKQoreworCURFRklORV9XQUlUKHdhaXQpOworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciBidWZbMzJdOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CisJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKworCitkYmcoICJkaWdpX2Nsb3NlOiBUT1A6IHBvcnQ9JWQsIG9wZW5fY291bnQ9JWQiLCBwcml2LT5kcF9wb3J0X251bSwgcG9ydC0+b3Blbl9jb3VudCApOworCisKKwkvKiBpZiBkaXNjb25uZWN0ZWQsIGp1c3QgY2xlYXIgZmxhZ3MgKi8KKwlpZiAoIXVzYl9nZXRfaW50ZmRhdGEocG9ydC0+c2VyaWFsLT5pbnRlcmZhY2UpKQorCQlnb3RvIGV4aXQ7CisKKwkvKiBkbyBjbGVhbnVwIG9ubHkgYWZ0ZXIgZmluYWwgY2xvc2Ugb24gdGhpcyBwb3J0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisJcHJpdi0+ZHBfaW5fY2xvc2UgPSAxOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisKKwkvKiB0ZWxsIGxpbmUgZGlzY2lwbGluZSB0byBwcm9jZXNzIG9ubHkgWE9OL1hPRkYgKi8KKwl0dHktPmNsb3NpbmcgPSAxOworCisJLyogd2FpdCBmb3Igb3V0cHV0IHRvIGRyYWluICovCisJaWYoIChmaWxwLT5mX2ZsYWdzJihPX05ERUxBWXxPX05PTkJMT0NLKSkgPT0gMCApIHsKKwkJdHR5X3dhaXRfdW50aWxfc2VudCggdHR5LCBESUdJX0NMT1NFX1RJTUVPVVQgKTsKKwl9CisKKwkvKiBmbHVzaCBkcml2ZXIgYW5kIGxpbmUgZGlzY2lwbGluZSBidWZmZXJzICovCisJaWYoIHR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIgKQorCQl0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKCB0dHkgKTsKKwl0dHlfbGRpc2NfZmx1c2godHR5KTsKKworCWlmIChwb3J0LT5zZXJpYWwtPmRldikgeworCQkvKiB3YWl0IGZvciB0cmFuc21pdCBpZGxlICovCisJCWlmKCAoZmlscC0+Zl9mbGFncyYoT19OREVMQVl8T19OT05CTE9DSykpID09IDAgKSB7CisJCQlkaWdpX3RyYW5zbWl0X2lkbGUoIHBvcnQsIERJR0lfQ0xPU0VfVElNRU9VVCApOworCQl9CisKKwkJLyogZHJvcCBEVFIgYW5kIFJUUyAqLworCQlkaWdpX3NldF9tb2RlbV9zaWduYWxzKCBwb3J0LCAwLCAwICk7CisKKwkJLyogZGlzYWJsZSBpbnB1dCBmbG93IGNvbnRyb2wgKi8KKwkJYnVmWzBdID0gRElHSV9DTURfU0VUX0lOUFVUX0ZMT1dfQ09OVFJPTDsKKwkJYnVmWzFdID0gcHJpdi0+ZHBfcG9ydF9udW07CisJCWJ1ZlsyXSA9IERJR0lfRElTQUJMRTsKKwkJYnVmWzNdID0gMDsKKworCQkvKiBkaXNhYmxlIG91dHB1dCBmbG93IGNvbnRyb2wgKi8KKwkJYnVmWzRdID0gRElHSV9DTURfU0VUX09VVFBVVF9GTE9XX0NPTlRST0w7CisJCWJ1Zls1XSA9IHByaXYtPmRwX3BvcnRfbnVtOworCQlidWZbNl0gPSBESUdJX0RJU0FCTEU7CisJCWJ1Zls3XSA9IDA7CisKKwkJLyogZGlzYWJsZSByZWFkaW5nIG1vZGVtIHNpZ25hbHMgYXV0b21hdGljYWxseSAqLworCQlidWZbOF0gPSBESUdJX0NNRF9SRUFEX0lOUFVUX1NJR05BTFM7CisJCWJ1Zls5XSA9IHByaXYtPmRwX3BvcnRfbnVtOworCQlidWZbMTBdID0gRElHSV9ESVNBQkxFOworCQlidWZbMTFdID0gMDsKKworCQkvKiBkaXNhYmxlIHJlY2VpdmUgKi8KKwkJYnVmWzEyXSA9IERJR0lfQ01EX1JFQ0VJVkVfRU5BQkxFOworCQlidWZbMTNdID0gcHJpdi0+ZHBfcG9ydF9udW07CisJCWJ1ZlsxNF0gPSBESUdJX0RJU0FCTEU7CisJCWJ1ZlsxNV0gPSAwOworCisJCS8qIGZsdXNoIGZpZm9zICovCisJCWJ1ZlsxNl0gPSBESUdJX0NNRF9JRkxVU0hfRklGTzsKKwkJYnVmWzE3XSA9IHByaXYtPmRwX3BvcnRfbnVtOworCQlidWZbMThdID0gRElHSV9GTFVTSF9UWCB8IERJR0lfRkxVU0hfUlg7CisJCWJ1ZlsxOV0gPSAwOworCisJCWlmKCAocmV0PWRpZ2lfd3JpdGVfb29iX2NvbW1hbmQoIHBvcnQsIGJ1ZiwgMjAsIDAgKSkgIT0gMCApCisJCQlkYmcoICJkaWdpX2Nsb3NlOiB3cml0ZSBvb2IgZmFpbGVkLCByZXQ9JWQiLCByZXQgKTsKKworCQkvKiB3YWl0IGZvciBmaW5hbCBjb21tYW5kcyBvbiBvb2IgcG9ydCB0byBjb21wbGV0ZSAqLworCQlwcmVwYXJlX3RvX3dhaXQoJnByaXYtPmRwX2ZsdXNoX3dhaXQsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlX3RpbWVvdXQoRElHSV9DTE9TRV9USU1FT1VUKTsKKwkJZmluaXNoX3dhaXQoJnByaXYtPmRwX2ZsdXNoX3dhaXQsICZ3YWl0KTsKKworCQkvKiBzaHV0ZG93biBhbnkgb3V0c3RhbmRpbmcgYnVsayB3cml0ZXMgKi8KKwkJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJfQorCisJdHR5LT5jbG9zaW5nID0gMDsKKworZXhpdDoKKwlzcGluX2xvY2tfaXJxc2F2ZSggJnByaXYtPmRwX3BvcnRfbG9jaywgZmxhZ3MgKTsKKwlwcml2LT5kcF93cml0ZV91cmJfaW5fdXNlID0gMDsKKwlwcml2LT5kcF9pbl9jbG9zZSA9IDA7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCAmcHJpdi0+ZHBfY2xvc2Vfd2FpdCApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzICk7CisKK2RiZyggImRpZ2lfY2xvc2U6IGRvbmUiICk7Cit9CisKKworLyoKKyogIERpZ2kgU3RhcnR1cCBEZXZpY2UKKyoKKyogIFN0YXJ0cyByZWFkcyBvbiBhbGwgcG9ydHMuICBNdXN0IGJlIGNhbGxlZCBBRlRFUiBzdGFydHVwLCB3aXRoCisqICB1cmJzIGluaXRpYWxpemVkLiAgUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIG5vbi16ZXJvIGVycm9yIG90aGVyd2lzZS4KKyovCisKK3N0YXRpYyBpbnQgZGlnaV9zdGFydHVwX2RldmljZSggc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCApCit7CisKKwlpbnQgaSxyZXQgPSAwOworCXN0cnVjdCBkaWdpX3NlcmlhbCAqc2VyaWFsX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKworCisJLyogYmUgc3VyZSB0aGlzIGhhcHBlbnMgZXhhY3RseSBvbmNlICovCisJc3Bpbl9sb2NrKCAmc2VyaWFsX3ByaXYtPmRzX3NlcmlhbF9sb2NrICk7CisJaWYoIHNlcmlhbF9wcml2LT5kc19kZXZpY2Vfc3RhcnRlZCApIHsKKwkJc3Bpbl91bmxvY2soICZzZXJpYWxfcHJpdi0+ZHNfc2VyaWFsX2xvY2sgKTsKKwkJcmV0dXJuKCAwICk7CisJfQorCXNlcmlhbF9wcml2LT5kc19kZXZpY2Vfc3RhcnRlZCA9IDE7CisJc3Bpbl91bmxvY2soICZzZXJpYWxfcHJpdi0+ZHNfc2VyaWFsX2xvY2sgKTsKKworCS8qIHN0YXJ0IHJlYWRpbmcgZnJvbSBlYWNoIGJ1bGsgaW4gZW5kcG9pbnQgZm9yIHRoZSBkZXZpY2UgKi8KKwkvKiBzZXQgVVNCX0RJU0FCTEVfU1BEIGZsYWcgZm9yIHdyaXRlIGJ1bGsgdXJicyAqLworCWZvciggaT0wOyBpPHNlcmlhbC0+dHlwZS0+bnVtX3BvcnRzKzE7IGkrKyApIHsKKworCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCisJCXBvcnQtPndyaXRlX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisKKwkJaWYoIChyZXQ9dXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpKSAhPSAwICkgeworCQkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWQsIHBvcnQ9JWQiLCBfX0ZVTkNUSU9OX18sCisJCQlyZXQsIGkgKTsKKwkJCWJyZWFrOworCQl9CisKKwl9CisKKwlyZXR1cm4oIHJldCApOworCit9CisKKworc3RhdGljIGludCBkaWdpX3N0YXJ0dXAoIHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgKQoreworCisJaW50IGk7CisJc3RydWN0IGRpZ2lfcG9ydCAqcHJpdjsKKwlzdHJ1Y3QgZGlnaV9zZXJpYWwgKnNlcmlhbF9wcml2OworCisKK2RiZyggImRpZ2lfc3RhcnR1cDogVE9QIiApOworCisJLyogYWxsb2NhdGUgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIGZvciBhbGwgcG9ydHMgKi8KKwkvKiBudW1iZXIgb2YgcmVndWxhciBwb3J0cyArIDEgZm9yIHRoZSBvdXQtb2YtYmFuZCBwb3J0ICovCisJZm9yKCBpPTA7IGk8c2VyaWFsLT50eXBlLT5udW1fcG9ydHMrMTsgaSsrICkgeworCisJCS8qIGFsbG9jYXRlIHBvcnQgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwkJcHJpdiA9IChzdHJ1Y3QgZGlnaV9wb3J0ICopa21hbGxvYyggc2l6ZW9mKHN0cnVjdCBkaWdpX3BvcnQpLAorCQkJR0ZQX0tFUk5FTCApOworCQlpZiggcHJpdiA9PSAoc3RydWN0IGRpZ2lfcG9ydCAqKTAgKSB7CisJCQl3aGlsZSggLS1pID49IDAgKQorCQkJCWtmcmVlKCB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldKSApOworCQkJcmV0dXJuKCAxICk7CQkJLyogZXJyb3IgKi8KKwkJfQorCisJCS8qIGluaXRpYWxpemUgcG9ydCBwcml2YXRlIHN0cnVjdHVyZSAqLworCQlzcGluX2xvY2tfaW5pdCggJnByaXYtPmRwX3BvcnRfbG9jayApOworCQlwcml2LT5kcF9wb3J0X251bSA9IGk7CisJCXByaXYtPmRwX291dF9idWZfbGVuID0gMDsKKwkJcHJpdi0+ZHBfaW5fYnVmX2xlbiA9IDA7CisJCXByaXYtPmRwX3dyaXRlX3VyYl9pbl91c2UgPSAwOworCQlwcml2LT5kcF9tb2RlbV9zaWduYWxzID0gMDsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCggJnByaXYtPmRwX21vZGVtX2NoYW5nZV93YWl0ICk7CisJCXByaXYtPmRwX3RyYW5zbWl0X2lkbGUgPSAwOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCAmcHJpdi0+ZHBfdHJhbnNtaXRfaWRsZV93YWl0ICk7CisJCXByaXYtPmRwX3Rocm90dGxlZCA9IDA7CisJCXByaXYtPmRwX3Rocm90dGxlX3Jlc3RhcnQgPSAwOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCAmcHJpdi0+ZHBfZmx1c2hfd2FpdCApOworCQlwcml2LT5kcF9pbl9jbG9zZSA9IDA7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoICZwcml2LT5kcF9jbG9zZV93YWl0ICk7CisJCUlOSVRfV09SSygmcHJpdi0+ZHBfd2FrZXVwX3dvcmssCisJCQkJZGlnaV93YWtldXBfd3JpdGVfbG9jaywgc2VyaWFsLT5wb3J0W2ldKTsKKworCQkvKiBpbml0aWFsaXplIHdyaXRlIHdhaXQgcXVldWUgZm9yIHRoaXMgcG9ydCAqLworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCAmc2VyaWFsLT5wb3J0W2ldLT53cml0ZV93YWl0ICk7CisKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgcHJpdik7CisJfQorCisJLyogYWxsb2NhdGUgc2VyaWFsIHByaXZhdGUgc3RydWN0dXJlICovCisJc2VyaWFsX3ByaXYgPSAoc3RydWN0IGRpZ2lfc2VyaWFsICopa21hbGxvYyggc2l6ZW9mKHN0cnVjdCBkaWdpX3NlcmlhbCksCisJCUdGUF9LRVJORUwgKTsKKwlpZiggc2VyaWFsX3ByaXYgPT0gKHN0cnVjdCBkaWdpX3NlcmlhbCAqKTAgKSB7CisJCWZvciggaT0wOyBpPHNlcmlhbC0+dHlwZS0+bnVtX3BvcnRzKzE7IGkrKyApCisJCQlrZnJlZSggdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSkgKTsKKwkJcmV0dXJuKCAxICk7CQkJLyogZXJyb3IgKi8KKwl9CisKKwkvKiBpbml0aWFsaXplIHNlcmlhbCBwcml2YXRlIHN0cnVjdHVyZSAqLworCXNwaW5fbG9ja19pbml0KCAmc2VyaWFsX3ByaXYtPmRzX3NlcmlhbF9sb2NrICk7CisJc2VyaWFsX3ByaXYtPmRzX29vYl9wb3J0X251bSA9IHNlcmlhbC0+dHlwZS0+bnVtX3BvcnRzOworCXNlcmlhbF9wcml2LT5kc19vb2JfcG9ydCA9IHNlcmlhbC0+cG9ydFtzZXJpYWxfcHJpdi0+ZHNfb29iX3BvcnRfbnVtXTsKKwlzZXJpYWxfcHJpdi0+ZHNfZGV2aWNlX3N0YXJ0ZWQgPSAwOworCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCBzZXJpYWxfcHJpdik7CisKKwlyZXR1cm4oIDAgKTsKKworfQorCisKK3N0YXRpYyB2b2lkIGRpZ2lfc2h1dGRvd24oIHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgKQoreworCisJaW50IGk7CisKKworZGJnKCAiZGlnaV9zaHV0ZG93bjogVE9QLCBpbl9pbnRlcnJ1cHQoKT0lbGQiLCBpbl9pbnRlcnJ1cHQoKSApOworCisJLyogc3RvcCByZWFkcyBhbmQgd3JpdGVzIG9uIGFsbCBwb3J0cyAqLworCWZvciggaT0wOyBpPHNlcmlhbC0+dHlwZS0+bnVtX3BvcnRzKzE7IGkrKyApIHsKKwkJdXNiX2tpbGxfdXJiKHNlcmlhbC0+cG9ydFtpXS0+cmVhZF91cmIpOworCQl1c2Jfa2lsbF91cmIoc2VyaWFsLT5wb3J0W2ldLT53cml0ZV91cmIpOworCX0KKworCS8qIGZyZWUgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIGZvciBhbGwgcG9ydHMgKi8KKwkvKiBudW1iZXIgb2YgcmVndWxhciBwb3J0cyArIDEgZm9yIHRoZSBvdXQtb2YtYmFuZCBwb3J0ICovCisJZm9yKCBpPTA7IGk8c2VyaWFsLT50eXBlLT5udW1fcG9ydHMrMTsgaSsrICkKKwkJa2ZyZWUoIHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pICk7CisJa2ZyZWUoIHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKSApOworfQorCisKK3N0YXRpYyB2b2lkIGRpZ2lfcmVhZF9idWxrX2NhbGxiYWNrKCBzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzICkKK3sKKworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2OworCXN0cnVjdCBkaWdpX3NlcmlhbCAqc2VyaWFsX3ByaXY7CisJaW50IHJldDsKKworCitkYmcoICJkaWdpX3JlYWRfYnVsa19jYWxsYmFjazogVE9QIiApOworCisJLyogcG9ydCBzYW5pdHkgY2hlY2ssIGRvIG5vdCByZXN1Ym1pdCBpZiBwb3J0IGlzIG5vdCB2YWxpZCAqLworCWlmKCBwb3J0ID09IE5VTEwgfHwgKHByaXY9dXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpKSA9PSBOVUxMICkgeworCQllcnIoIiVzOiBwb3J0IG9yIHBvcnQtPnByaXZhdGUgaXMgTlVMTCwgc3RhdHVzPSVkIiwgX19GVU5DVElPTl9fLAorCQkJdXJiLT5zdGF0dXMgKTsKKwkJcmV0dXJuOworCX0KKwlpZiggcG9ydC0+c2VyaWFsID09IE5VTEwKKwl8fCAoc2VyaWFsX3ByaXY9dXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpKSA9PSBOVUxMICkgeworCQllcnIoIiVzOiBzZXJpYWwgaXMgYmFkIG9yIHNlcmlhbC0+cHJpdmF0ZSBpcyBOVUxMLCBzdGF0dXM9JWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzICk7CisJCXJldHVybjsKKwl9CisKKwkvKiBkbyBub3QgcmVzdWJtaXQgdXJiIGlmIGl0IGhhcyBhbnkgc3RhdHVzIGVycm9yICovCisJaWYoIHVyYi0+c3RhdHVzICkgeworCQllcnIoIiVzOiBub256ZXJvIHJlYWQgYnVsayBzdGF0dXM6IHN0YXR1cz0lZCwgcG9ydD0lZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMsIHByaXYtPmRwX3BvcnRfbnVtICk7CisJCXJldHVybjsKKwl9CisKKwkvKiBoYW5kbGUgb29iIG9yIGluYiBjYWxsYmFjaywgZG8gbm90IHJlc3VibWl0IGlmIGVycm9yICovCisJaWYoIHByaXYtPmRwX3BvcnRfbnVtID09IHNlcmlhbF9wcml2LT5kc19vb2JfcG9ydF9udW0gKSB7CisJCWlmKCBkaWdpX3JlYWRfb29iX2NhbGxiYWNrKCB1cmIgKSAhPSAwICkKKwkJCXJldHVybjsKKwl9IGVsc2UgeworCQlpZiggZGlnaV9yZWFkX2luYl9jYWxsYmFjayggdXJiICkgIT0gMCApCisJCQlyZXR1cm47CisJfQorCisJLyogY29udGludWUgcmVhZCAqLworCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJaWYoIChyZXQ9dXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgIT0gMCApIHsKKwkJZXJyKCIlczogZmFpbGVkIHJlc3VibWl0dGluZyB1cmIsIHJldD0lZCwgcG9ydD0lZCIsIF9fRlVOQ1RJT05fXywKKwkJCXJldCwgcHJpdi0+ZHBfcG9ydF9udW0gKTsKKwl9CisKK30KKworCisvKiAKKyogIERpZ2kgUmVhZCBJTkIgQ2FsbGJhY2sKKyoKKyogIERpZ2kgUmVhZCBJTkIgQ2FsbGJhY2sgaGFuZGxlcyByZWFkcyBvbiB0aGUgaW4gYmFuZCBwb3J0cywgc2VuZGluZworKiAgdGhlIGRhdGEgb24gdG8gdGhlIHR0eSBzdWJzeXN0ZW0uICBXaGVuIGNhbGxlZCB3ZSBrbm93IHBvcnQgYW5kCisqICBwb3J0LT5wcml2YXRlIGFyZSBub3QgTlVMTCBhbmQgcG9ydC0+c2VyaWFsIGhhcyBiZWVuIHZhbGlkYXRlZC4KKyogIEl0IHJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCAxIGlmIHN1Y2Nlc3NmdWwgYnV0IHRoZSBwb3J0IGlzCisqICB0aHJvdHRsZWQsIGFuZCAtMSBpZiB0aGUgc2FuaXR5IGNoZWNrcyBmYWlsZWQuCisqLworCitzdGF0aWMgaW50IGRpZ2lfcmVhZF9pbmJfY2FsbGJhY2soIHN0cnVjdCB1cmIgKnVyYiApCit7CisKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnR0eTsKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCBvcGNvZGUgPSAoKHVuc2lnbmVkIGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcilbMF07CisJaW50IGxlbiA9ICgodW5zaWduZWQgY2hhciAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyKVsxXTsKKwlpbnQgc3RhdHVzID0gKCh1bnNpZ25lZCBjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXIpWzJdOworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSAoKHVuc2lnbmVkIGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcikrMzsKKwlpbnQgZmxhZyx0aHJvdHRsZWQ7CisKKwkvKiBkbyBub3QgcHJvY2VzcyBjYWxsYmFja3Mgb24gY2xvc2VkIHBvcnRzICovCisJLyogYnV0IGRvIGNvbnRpbnVlIHRoZSByZWFkIGNoYWluICovCisJaWYoIHBvcnQtPm9wZW5fY291bnQgPT0gMCApCisJCXJldHVybiggMCApOworCisJLyogc2hvcnQvbXVsdGlwbGUgcGFja2V0IGNoZWNrICovCisJaWYoIHVyYi0+YWN0dWFsX2xlbmd0aCAhPSBsZW4gKyAyICkgeworICAgICAJCWVycigiJXM6IElOQ09NUExFVEUgT1IgTVVMVElQTEUgUEFDS0VULCB1cmItPnN0YXR1cz0lZCwgcG9ydD0lZCwgb3Bjb2RlPSVkLCBsZW49JWQsIGFjdHVhbF9sZW5ndGg9JWQsIHN0YXR1cz0lZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMsIHByaXYtPmRwX3BvcnRfbnVtLCBvcGNvZGUsIGxlbiwgdXJiLT5hY3R1YWxfbGVuZ3RoLCBzdGF0dXMgKTsKKwkJcmV0dXJuKCAtMSApOworCX0KKworCXNwaW5fbG9jayggJnByaXYtPmRwX3BvcnRfbG9jayApOworCisJLyogY2hlY2sgZm9yIHRocm90dGxlOyBpZiBzZXQsIGRvIG5vdCByZXN1Ym1pdCByZWFkIHVyYiAqLworCS8qIGluZGljYXRlIHRoZSByZWFkIGNoYWluIG5lZWRzIHRvIGJlIHJlc3RhcnRlZCBvbiB1bnRocm90dGxlICovCisJdGhyb3R0bGVkID0gcHJpdi0+ZHBfdGhyb3R0bGVkOworCWlmKCB0aHJvdHRsZWQgKQorCQlwcml2LT5kcF90aHJvdHRsZV9yZXN0YXJ0ID0gMTsKKworCS8qIHJlY2VpdmUgZGF0YSAqLworCWlmKCBvcGNvZGUgPT0gRElHSV9DTURfUkVDRUlWRV9EQVRBICkgeworCisJCS8qIGdldCBmbGFnIGZyb20gc3RhdHVzICovCisJCWZsYWcgPSAwOworCisJCS8qIG92ZXJydW4gaXMgc3BlY2lhbCwgbm90IGFzc29jaWF0ZWQgd2l0aCBhIGNoYXIgKi8KKwkJaWYoIHN0YXR1cyAmIERJR0lfT1ZFUlJVTl9FUlJPUiApIHsKKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKCB0dHksIDAsIFRUWV9PVkVSUlVOICk7CisJCX0KKworCQkvKiBicmVhayB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgcGFyaXR5LCAqLworCQkvKiB3aGljaCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgZnJhbWluZyBlcnJvcnMgKi8KKwkJaWYoIHN0YXR1cyAmIERJR0lfQlJFQUtfRVJST1IgKSB7CisJCQlmbGFnID0gVFRZX0JSRUFLOworCQl9IGVsc2UgaWYoIHN0YXR1cyAmIERJR0lfUEFSSVRZX0VSUk9SICkgeworCQkJZmxhZyA9IFRUWV9QQVJJVFk7CisJCX0gZWxzZSBpZiggc3RhdHVzICYgRElHSV9GUkFNSU5HX0VSUk9SICkgeworCQkJZmxhZyA9IFRUWV9GUkFNRTsKKwkJfQorCisJCS8qIGRhdGEgbGVuZ3RoIGlzIGxlbi0xIChvbmUgYnl0ZSBvZiBsZW4gaXMgc3RhdHVzKSAqLworCQktLWxlbjsKKworCQlpZiggdGhyb3R0bGVkICkgeworCisJCQlsZW4gPSBtaW4oIGxlbiwKKwkJCQlESUdJX0lOX0JVRl9TSVpFIC0gcHJpdi0+ZHBfaW5fYnVmX2xlbiApOworCisJCQlpZiggbGVuID4gMCApIHsKKwkJCQltZW1jcHkoIHByaXYtPmRwX2luX2J1ZiArIHByaXYtPmRwX2luX2J1Zl9sZW4sCisJCQkJCWRhdGEsIGxlbiApOworCQkJCW1lbXNldCggcHJpdi0+ZHBfaW5fZmxhZ19idWYKKwkJCQkJKyBwcml2LT5kcF9pbl9idWZfbGVuLCBmbGFnLCBsZW4gKTsKKwkJCQlwcml2LT5kcF9pbl9idWZfbGVuICs9IGxlbjsKKwkJCX0KKworCQl9IGVsc2UgeworCisJCQlsZW4gPSBtaW4oIGxlbiwgVFRZX0ZMSVBCVUZfU0laRSAtIHR0eS0+ZmxpcC5jb3VudCApOworCisJCQlpZiggbGVuID4gMCApIHsKKwkJCQltZW1jcHkoIHR0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIsIGRhdGEsIGxlbiApOworCQkJCW1lbXNldCggdHR5LT5mbGlwLmZsYWdfYnVmX3B0ciwgZmxhZywgbGVuICk7CisJCQkJdHR5LT5mbGlwLmNoYXJfYnVmX3B0ciArPSBsZW47CisJCQkJdHR5LT5mbGlwLmZsYWdfYnVmX3B0ciArPSBsZW47CisJCQkJdHR5LT5mbGlwLmNvdW50ICs9IGxlbjsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCggdHR5ICk7CisJCQl9CisKKwkJfQorCisJfQorCisJc3Bpbl91bmxvY2soICZwcml2LT5kcF9wb3J0X2xvY2sgKTsKKworCWlmKCBvcGNvZGUgPT0gRElHSV9DTURfUkVDRUlWRV9ESVNBQkxFICkgeworCQlkYmcoIiVzOiBnb3QgUkVDRUlWRV9ESVNBQkxFIiwgX19GVU5DVElPTl9fICk7CisJfSBlbHNlIGlmKCBvcGNvZGUgIT0gRElHSV9DTURfUkVDRUlWRV9EQVRBICkgeworCQlkYmcoIiVzOiB1bmtub3duIG9wY29kZTogJWQiLCBfX0ZVTkNUSU9OX18sIG9wY29kZSApOworCX0KKworCXJldHVybiggdGhyb3R0bGVkID8gMSA6IDAgKTsKKworfQorCisKKy8qIAorKiAgRGlnaSBSZWFkIE9PQiBDYWxsYmFjaworKgorKiAgRGlnaSBSZWFkIE9PQiBDYWxsYmFjayBoYW5kbGVzIHJlYWRzIG9uIHRoZSBvdXQgb2YgYmFuZCBwb3J0LgorKiAgV2hlbiBjYWxsZWQgd2Uga25vdyBwb3J0IGFuZCBwb3J0LT5wcml2YXRlIGFyZSBub3QgTlVMTCBhbmQKKyogIHRoZSBwb3J0LT5zZXJpYWwgaXMgdmFsaWQuICBJdCByZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgYW5kCisqICAtMSBpZiB0aGUgc2FuaXR5IGNoZWNrcyBmYWlsZWQuCisqLworCitzdGF0aWMgaW50IGRpZ2lfcmVhZF9vb2JfY2FsbGJhY2soIHN0cnVjdCB1cmIgKnVyYiApCit7CisKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCBvcGNvZGUsIGxpbmUsIHN0YXR1cywgdmFsOworCWludCBpOworCisKK2RiZyggImRpZ2lfcmVhZF9vb2JfY2FsbGJhY2s6IHBvcnQ9JWQsIGxlbj0lZCIsIHByaXYtPmRwX3BvcnRfbnVtLAordXJiLT5hY3R1YWxfbGVuZ3RoICk7CisKKwkvKiBoYW5kbGUgZWFjaCBvb2IgY29tbWFuZCAqLworCWZvciggaT0wOyBpPHVyYi0+YWN0dWFsX2xlbmd0aC0zOyApIHsKKworCQlvcGNvZGUgPSAoKHVuc2lnbmVkIGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcilbaSsrXTsKKwkJbGluZSA9ICgodW5zaWduZWQgY2hhciAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyKVtpKytdOworCQlzdGF0dXMgPSAoKHVuc2lnbmVkIGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcilbaSsrXTsKKwkJdmFsID0gKCh1bnNpZ25lZCBjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXIpW2krK107CisKK2RiZyggImRpZ2lfcmVhZF9vb2JfY2FsbGJhY2s6IG9wY29kZT0lZCwgbGluZT0lZCwgc3RhdHVzPSVkLCB2YWw9JWQiLAorb3Bjb2RlLCBsaW5lLCBzdGF0dXMsIHZhbCApOworCisJCWlmKCBzdGF0dXMgIT0gMCB8fCBsaW5lID49IHNlcmlhbC0+dHlwZS0+bnVtX3BvcnRzICkKKwkJCWNvbnRpbnVlOworCisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbbGluZV07CisKKwkJaWYgKChwcml2PXVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KSkgPT0gTlVMTCApCisJCQlyZXR1cm4gLTE7CisKKwkJaWYoIG9wY29kZSA9PSBESUdJX0NNRF9SRUFEX0lOUFVUX1NJR05BTFMgKSB7CisKKwkJCXNwaW5fbG9jayggJnByaXYtPmRwX3BvcnRfbG9jayApOworCisJCQkvKiBjb252ZXJ0IGZyb20gZGlnaSBmbGFncyB0byB0ZXJtaW94IGZsYWdzICovCisJCQlpZiggdmFsICYgRElHSV9SRUFEX0lOUFVUX1NJR05BTFNfQ1RTICkgeworCQkJCXByaXYtPmRwX21vZGVtX3NpZ25hbHMgfD0gVElPQ01fQ1RTOworCQkJCS8qIHBvcnQgbXVzdCBiZSBvcGVuIHRvIHVzZSB0dHkgc3RydWN0ICovCisJCQkJaWYoIHBvcnQtPm9wZW5fY291bnQKKwkJCQkmJiBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTICkgeworCQkJCQlwb3J0LT50dHktPmh3X3N0b3BwZWQgPSAwOworCQkJCQlkaWdpX3dha2V1cF93cml0ZSggcG9ydCApOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJcHJpdi0+ZHBfbW9kZW1fc2lnbmFscyAmPSB+VElPQ01fQ1RTOworCQkJCS8qIHBvcnQgbXVzdCBiZSBvcGVuIHRvIHVzZSB0dHkgc3RydWN0ICovCisJCQkJaWYoIHBvcnQtPm9wZW5fY291bnQKKwkJCQkmJiBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTICkgeworCQkJCQlwb3J0LT50dHktPmh3X3N0b3BwZWQgPSAxOworCQkJCX0KKwkJCX0KKwkJCWlmKCB2YWwgJiBESUdJX1JFQURfSU5QVVRfU0lHTkFMU19EU1IgKQorCQkJCXByaXYtPmRwX21vZGVtX3NpZ25hbHMgfD0gVElPQ01fRFNSOworCQkJZWxzZQorCQkJCXByaXYtPmRwX21vZGVtX3NpZ25hbHMgJj0gflRJT0NNX0RTUjsKKwkJCWlmKCB2YWwgJiBESUdJX1JFQURfSU5QVVRfU0lHTkFMU19SSSApCisJCQkJcHJpdi0+ZHBfbW9kZW1fc2lnbmFscyB8PSBUSU9DTV9SSTsKKwkJCWVsc2UKKwkJCQlwcml2LT5kcF9tb2RlbV9zaWduYWxzICY9IH5USU9DTV9SSTsKKwkJCWlmKCB2YWwgJiBESUdJX1JFQURfSU5QVVRfU0lHTkFMU19EQ0QgKQorCQkJCXByaXYtPmRwX21vZGVtX3NpZ25hbHMgfD0gVElPQ01fQ0Q7CisJCQllbHNlCisJCQkJcHJpdi0+ZHBfbW9kZW1fc2lnbmFscyAmPSB+VElPQ01fQ0Q7CisKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSggJnByaXYtPmRwX21vZGVtX2NoYW5nZV93YWl0ICk7CisJCQlzcGluX3VubG9jayggJnByaXYtPmRwX3BvcnRfbG9jayApOworCisJCX0gZWxzZSBpZiggb3Bjb2RlID09IERJR0lfQ01EX1RSQU5TTUlUX0lETEUgKSB7CisKKwkJCXNwaW5fbG9jayggJnByaXYtPmRwX3BvcnRfbG9jayApOworCQkJcHJpdi0+ZHBfdHJhbnNtaXRfaWRsZSA9IDE7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoICZwcml2LT5kcF90cmFuc21pdF9pZGxlX3dhaXQgKTsKKwkJCXNwaW5fdW5sb2NrKCAmcHJpdi0+ZHBfcG9ydF9sb2NrICk7CisKKwkJfSBlbHNlIGlmKCBvcGNvZGUgPT0gRElHSV9DTURfSUZMVVNIX0ZJRk8gKSB7CisKKwkJCXdha2VfdXAoICZwcml2LT5kcF9mbHVzaF93YWl0ICk7CisKKwkJfQorCisJfQorCisJcmV0dXJuKCAwICk7CisKK30KKworCitzdGF0aWMgaW50IF9faW5pdCBkaWdpX2luaXQgKHZvaWQpCit7CisJaW50IHJldHZhbDsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZkaWdpX2FjY2VsZXBvcnRfMl9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX2FjY2VsZXBvcnRfMl9kZXZpY2U7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmZGlnaV9hY2NlbGVwb3J0XzRfZGV2aWNlKTsKKwlpZiAocmV0dmFsKSAKKwkJZ290byBmYWlsZWRfYWNjZWxlcG9ydF80X2RldmljZTsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmRpZ2lfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCXJldHVybiAwOworZmFpbGVkX3VzYl9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmRpZ2lfYWNjZWxlcG9ydF80X2RldmljZSk7CitmYWlsZWRfYWNjZWxlcG9ydF80X2RldmljZToKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmRpZ2lfYWNjZWxlcG9ydF8yX2RldmljZSk7CitmYWlsZWRfYWNjZWxlcG9ydF8yX2RldmljZToKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkaWdpX2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZkaWdpX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmZGlnaV9hY2NlbGVwb3J0XzJfZGV2aWNlKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZkaWdpX2FjY2VsZXBvcnRfNF9kZXZpY2UpOworfQorCisKK21vZHVsZV9pbml0KGRpZ2lfaW5pdCk7Cittb2R1bGVfZXhpdChkaWdpX2V4aXQpOworCisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ0NjM5NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jCkBAIC0wLDAgKzEsNTk2IEBACisvKgorICogVVNCIEVtcGVnIGVtcGVnLWNhciBwbGF5ZXIgZHJpdmVyCisgKgorICoJQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxCisgKgkgICAgR2FyeSBCcnViYWtlciAoeGF2eWVyQGl4Lm5ldGNvbS5jb20pCisgKgorICoJQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAwMQorICoJICAgIEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICogCisgKiAoMDcvMTYvMjAwMSkgZ2IKKyAqCXJlbW92ZSB1bnVzZWQgY29kZSBpbiBlbXBlZ19jbG9zZSgpICh0aGFua3MgdG8gT2xpdmVyIE5ldWt1bSBmb3IgcG9pbnRpbmcgdGhpcworICoJb3V0KSBhbmQgcmV3cm90ZSBlbXBlZ19zZXRfdGVybWlvcygpLgorICogCisgKiAoMDUvMzAvMjAwMSkgZ2toCisgKglzd2l0Y2hlZCBmcm9tIHVzaW5nIHNwaW5sb2NrIHRvIGEgc2VtYXBob3JlLCB3aGljaCBmaXhlcyBsb3RzIG9mIHByb2JsZW1zLgorICoKKyAqICgwNC8wOC8yMDAxKSBnYgorICogICAgICBJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgorICogCisgKiAoMDEvMjIvMjAwMSkgZ2IKKyAqCUFkZGVkIHdyaXRlX3Jvb20oKSBhbmQgY2hhcnNfaW5fYnVmZmVyKCkgc3VwcG9ydC4gCisgKiAKKyAqICgxMi8yMS8yMDAwKSBnYgorICoJTW92ZWQgdGVybWlvIHN0dWZmIGluc2lkZSB0aGUgcG9ydC0+YWN0aXZlIGNoZWNrLgorICoJTW92ZWQgTU9EX0RFQ19VU0VfQ09VTlQgdG8gZW5kIG9mIGVtcGVnX2Nsb3NlKCkuCisgKiAKKyAqICgxMi8wMy8yMDAwKSBnYgorICoJQWRkZWQgcG9ydC0+dHR5LT5sZGlzYy5zZXRfdGVybWlvcyhwb3J0LT50dHksIE5VTEwpIHRvIGVtcGVnX29wZW4oKQorICoJVGhpcyBub3RpZmllcyB0aGUgdHR5IGRyaXZlciB0aGF0IHRoZSB0ZXJtaW9zIGhhdmUgY2hhbmdlZC4KKyAqIAorICogKDExLzEzLzIwMDApIGdiCisgKglNb3ZlZCB0dHktPmxvd19sYXRlbmN5ID0gMSBmcm9tIGVtcGVnX3JlYWRfYnVsa19jYWxsYmFjaygpIHRvIGVtcGVnX29wZW4oKQorICoJKEl0IG9ubHkgbmVlZHMgdG8gYmUgc2V0IG9uY2UgLSBEb2ghKQorICogCisgKiAoMTEvMTEvMjAwMCkgZ2IKKyAqCVVwZGF0ZWQgdG8gd29yayB3aXRoIGlkX3RhYmxlIHN0cnVjdHVyZS4KKyAqIAorICogKDExLzA0LzIwMDApIGdiCisgKglGb3JrZWQgdGhpcyBmcm9tIHZpc29yLmMsIGFuZCBoYWNrZWQgaXQgdXAgdG8gd29yayB3aXRoIGFuCisgKglFbXBlZyBsdGQuIGVtcGVnLWNhciBwbGF5ZXIuICBDb25zdHJ1Y3RpdmUgY3JpdGljaXNtIHdlbGNvbWVkLgorICoJSSB3b3VsZCBsaWtlIHRvIHNheSwgJ1RoYW5rIFlvdScgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIGZvciB0aGUKKyAqCXVzZSBvZiBoaXMgY29kZSwgYW5kIGZvciBoaXMgZ3VpZGFuY2UsIGFkdmljZSBhbmQgcGF0aWVuY2UuIDopCisgKglBICdUaGFuayBZb3UnIGlzIGluIG9yZGVyIGZvciBKb2huIFJpcGxleSBvZiBFbXBlZyBsdGQgZm9yIGhpcworICoJYWR2aWNlLCBhbmQgcGF0aWVuY2UgdG9vLgorICogCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorCitzdGF0aWMgaW50IGRlYnVnOworCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS4yIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiwgR2FyeSBCcnViYWtlciA8eGF2eWVyQGl4Lm5ldGNvbS5jb20+IgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIEVtcGVnIE1hcmsgSS9JSSBEcml2ZXIiCisKKyNkZWZpbmUgRU1QRUdfVkVORE9SX0lECQkJMHgwODRmCisjZGVmaW5lIEVNUEVHX1BST0RVQ1RfSUQJCTB4MDAwMQorCisvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBhbiBlbXBlZy1jYXIgcGxheWVyICovCitzdGF0aWMgaW50ICBlbXBlZ19vcGVuCQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIGVtcGVnX2Nsb3NlCQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGVtcGVnX3dyaXRlCQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCQkJaW50IGNvdW50KTsKK3N0YXRpYyBpbnQgIGVtcGVnX3dyaXRlX3Jvb20JCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgIGVtcGVnX2NoYXJzX2luX2J1ZmZlcgkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBlbXBlZ190aHJvdHRsZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgZW1wZWdfdW50aHJvdHRsZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCAgZW1wZWdfc3RhcnR1cAkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQgZW1wZWdfc2h1dGRvd24JCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIGVtcGVnX2lvY3RsCQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCXN0cnVjdCBmaWxlICogZmlsZSwKKwkJCQkJdW5zaWduZWQgaW50IGNtZCwKKwkJCQkJdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQgZW1wZWdfc2V0X3Rlcm1pb3MJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworc3RhdGljIHZvaWQgZW1wZWdfd3JpdGVfYnVsa19jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBlbXBlZ19yZWFkX2J1bGtfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKEVNUEVHX1ZFTkRPUl9JRCwgRU1QRUdfUFJPRFVDVF9JRCkgfSwKKwl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGVtcGVnX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiZW1wZWciLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZW1wZWdfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIkVtcGVnIiwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGUsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQkwLAorCS5udW1fYnVsa19pbiA9CQkxLAorCS5udW1fYnVsa19vdXQgPQkJMSwKKwkubnVtX3BvcnRzID0JCTEsCisJLm9wZW4gPQkJCWVtcGVnX29wZW4sCisJLmNsb3NlID0JCWVtcGVnX2Nsb3NlLAorCS50aHJvdHRsZSA9CQllbXBlZ190aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQllbXBlZ191bnRocm90dGxlLAorCS5hdHRhY2ggPQkJZW1wZWdfc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkJZW1wZWdfc2h1dGRvd24sCisJLmlvY3RsID0JCWVtcGVnX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQllbXBlZ19zZXRfdGVybWlvcywKKwkud3JpdGUgPQkJZW1wZWdfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJZW1wZWdfd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyID0JZW1wZWdfY2hhcnNfaW5fYnVmZmVyLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0JZW1wZWdfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkucmVhZF9idWxrX2NhbGxiYWNrID0JZW1wZWdfcmVhZF9idWxrX2NhbGxiYWNrLAorfTsKKworI2RlZmluZSBOVU1fVVJCUwkJCTE2CisjZGVmaW5lIFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRQk0MDk2CisKK3N0YXRpYyBzdHJ1Y3QgdXJiCSp3cml0ZV91cmJfcG9vbFtOVU1fVVJCU107CitzdGF0aWMgc3BpbmxvY2tfdAl3cml0ZV91cmJfcG9vbF9sb2NrOworc3RhdGljIGludAkJYnl0ZXNfaW47CitzdGF0aWMgaW50CQlieXRlc19vdXQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVtcGVnIHNwZWNpZmljIGRyaXZlciBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGVtcGVnX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJaW50IHJlc3VsdCA9IDA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIEZvcmNlIGRlZmF1bHQgdGVybWlvIHNldHRpbmdzICovCisJZW1wZWdfc2V0X3Rlcm1pb3MgKHBvcnQsIE5VTEwpIDsKKworCWJ5dGVzX2luID0gMDsKKwlieXRlc19vdXQgPSAwOworCisJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKwl1c2JfZmlsbF9idWxrX3VyYigKKwkJcG9ydC0+cmVhZF91cmIsCisJCXNlcmlhbC0+ZGV2LCAKKwkJdXNiX3JjdmJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAorCQkJcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJZW1wZWdfcmVhZF9idWxrX2NhbGxiYWNrLAorCQlwb3J0KTsKKworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKworCWlmIChyZXN1bHQpCisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyB2b2lkIGVtcGVnX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiBzaHV0ZG93biBvdXIgYnVsayByZWFkICovCisJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwkvKiBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIGlmIHlvdSB3YW50IHRvIHNlZSBzb21lIHN0YXRpc3RpY3MgaW4geW91ciBzeXNsb2cgKi8KKwkvKiBkZXZfaW5mbyAoJnBvcnQtPmRldiwgIkJ5dGVzIEluID0gJWQgIEJ5dGVzIE91dCA9ICVkXG4iLCBieXRlc19pbiwgYnl0ZXNfb3V0KTsgKi8KK30KKworCitzdGF0aWMgaW50IGVtcGVnX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCB1cmIgKnVyYjsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjdXJyZW50X3Bvc2l0aW9uID0gYnVmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHN0YXR1czsKKwlpbnQgaTsKKwlpbnQgYnl0ZXNfc2VudCA9IDA7CisJaW50IHRyYW5zZmVyX3NpemU7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXdoaWxlIChjb3VudCA+IDApIHsKKworCQkvKiB0cnkgdG8gZmluZCBhIGZyZWUgdXJiIGluIG91ciBsaXN0IG9mIHRoZW0gKi8KKwkJdXJiID0gTlVMTDsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSAoJndyaXRlX3VyYl9wb29sX2xvY2ssIGZsYWdzKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1VSQlM7ICsraSkgeworCQkJaWYgKHdyaXRlX3VyYl9wb29sW2ldLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSB7CisJCQkJdXJiID0gd3JpdGVfdXJiX3Bvb2xbaV07CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmd3JpdGVfdXJiX3Bvb2xfbG9jaywgZmxhZ3MpOworCisJCWlmICh1cmIgPT0gTlVMTCkgeworCQkJZGJnKCIlcyAtIG5vIG1vcmUgZnJlZSB1cmJzIiwgX19GVU5DVElPTl9fKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7CisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MgKFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSwgR0ZQX0FUT01JQyk7CisJCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgeworCQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLlxuIiwgX19GVU5DVElPTl9fKTsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisJCX0KKworCQl0cmFuc2Zlcl9zaXplID0gbWluIChjb3VudCwgVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFKTsKKworCQltZW1jcHkgKHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBjdXJyZW50X3Bvc2l0aW9uLCB0cmFuc2Zlcl9zaXplKTsKKworCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdHJhbnNmZXJfc2l6ZSwgdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCisJCS8qIGJ1aWxkIHVwIG91ciB1cmIgKi8KKwkJdXNiX2ZpbGxfYnVsa191cmIgKAorCQkJdXJiLAorCQkJc2VyaWFsLT5kZXYsCisJCQl1c2Jfc25kYnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwgCisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCXRyYW5zZmVyX3NpemUsCisJCQllbXBlZ193cml0ZV9idWxrX2NhbGxiYWNrLAorCQkJcG9ydCk7CisKKwkJLyogc2VuZCBpdCBkb3duIHRoZSBwaXBlICovCisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChzdGF0dXMpIHsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkIHdpdGggc3RhdHVzID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJCWJ5dGVzX3NlbnQgPSBzdGF0dXM7CisJCQlicmVhazsKKwkJfQorCisJCWN1cnJlbnRfcG9zaXRpb24gKz0gdHJhbnNmZXJfc2l6ZTsKKwkJYnl0ZXNfc2VudCArPSB0cmFuc2Zlcl9zaXplOworCQljb3VudCAtPSB0cmFuc2Zlcl9zaXplOworCQlieXRlc19vdXQgKz0gdHJhbnNmZXJfc2l6ZTsKKworCX0KKworZXhpdDoKKwlyZXR1cm4gYnl0ZXNfc2VudDsKKworfSAKKworCitzdGF0aWMgaW50IGVtcGVnX3dyaXRlX3Jvb20gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKwlpbnQgcm9vbSA9IDA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmd3JpdGVfdXJiX3Bvb2xfbG9jaywgZmxhZ3MpOworCisJLyogdGFsbHkgdXAgdGhlIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1VSQlM7ICsraSkgeworCQlpZiAod3JpdGVfdXJiX3Bvb2xbaV0tPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJCXJvb20gKz0gVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFOworCQl9CisJfSAKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZ3cml0ZV91cmJfcG9vbF9sb2NrLCBmbGFncyk7CisKKwlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fRlVOQ1RJT05fXywgcm9vbSk7CisKKwlyZXR1cm4gKHJvb20pOworCit9CisKKworc3RhdGljIGludCBlbXBlZ19jaGFyc19pbl9idWZmZXIgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKwlpbnQgY2hhcnMgPSAwOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJndyaXRlX3VyYl9wb29sX2xvY2ssIGZsYWdzKTsKKworCS8qIHRhbGx5IHVwIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2FpdGluZyAqLworCWZvciAoaSA9IDA7IGkgPCBOVU1fVVJCUzsgKytpKSB7CisJCWlmICh3cml0ZV91cmJfcG9vbFtpXS0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQkJY2hhcnMgKz0gVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJndyaXRlX3VyYl9wb29sX2xvY2ssIGZsYWdzKTsKKworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19GVU5DVElPTl9fLCBjaGFycyk7CisKKwlyZXR1cm4gKGNoYXJzKTsKKworfQorCisKK3N0YXRpYyB2b2lkIGVtcGVnX3dyaXRlX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwlzY2hlZHVsZV93b3JrKCZwb3J0LT53b3JrKTsKK30KKworCitzdGF0aWMgdm9pZCBlbXBlZ19yZWFkX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCBpOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisKKwl0dHkgPSBwb3J0LT50dHk7CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCWZvciAoaSA9IDA7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGggOyArK2kpIHsKKwkJCS8qIGdiIC0gMjAwMC8xMS8xMworCQkJICogSWYgd2UgaW5zZXJ0IHRvbyBtYW55IGNoYXJhY3RlcnMgd2UnbGwgb3ZlcmZsb3cgdGhlIGJ1ZmZlci4KKwkJCSAqIFRoaXMgbWVhbnMgd2UnbGwgbG9zZSBieXRlcyAtIERlY2lkZWRseSBiYWQuCisJCQkgKi8KKwkJCWlmKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCQl9CisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIDApOworCQl9CisJCS8qIGdiIC0gMjAwMC8xMS8xMworCQkgKiBHb2VzIHN0cmFpZ2h0IHRocm91Z2ggaW5zdGVhZCBvZiBzY2hlZHVsaW5nIC0gaWYgdHR5LT5sb3dfbGF0ZW5jeSBpcyBzZXQuCisJCSAqLworCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQlieXRlc19pbiArPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJfQorCisJLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkICAqLworCXVzYl9maWxsX2J1bGtfdXJiKAorCQlwb3J0LT5yZWFkX3VyYiwKKwkJcG9ydC0+c2VyaWFsLT5kZXYsIAorCQl1c2JfcmN2YnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsCisJCQlwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQllbXBlZ19yZWFkX2J1bGtfY2FsbGJhY2ssCisJCXBvcnQpOworCisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCisJaWYgKHJlc3VsdCkKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKworCXJldHVybjsKKworfQorCisKK3N0YXRpYyB2b2lkIGVtcGVnX3Rocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7Cit9CisKKworc3RhdGljIHZvaWQgZW1wZWdfdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisKKwlpZiAocmVzdWx0KQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCisJcmV0dXJuOworfQorCisKK3N0YXRpYyBpbnQgIGVtcGVnX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IHI7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgIT0gMSkgeworCQllcnIoImFjdGl2ZSBjb25maWcgIyVkICE9IDEgPz8iLAorCQkJc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWRiZygiJXMgLSByZXNldCBjb25maWciLCBfX0ZVTkNUSU9OX18pOworCXIgPSB1c2JfcmVzZXRfY29uZmlndXJhdGlvbiAoc2VyaWFsLT5kZXYpOworCisJLyogY29udGludWUgb24gd2l0aCBpbml0aWFsaXphdGlvbiAqLworCXJldHVybiByOworCit9CisKKworc3RhdGljIHZvaWQgZW1wZWdfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworfQorCisKK3N0YXRpYyBpbnQgZW1wZWdfaW9jdGwgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJZGJnKCIlcyAtIHBvcnQgJWQsIGNtZCAweCUuNHgiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY21kKTsKKworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKKworc3RhdGljIHZvaWQgZW1wZWdfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCghcG9ydC0+dHR5KSB8fCAoIXBvcnQtPnR0eS0+dGVybWlvcykpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSBzdHJ1Y3R1cmVzIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisgICAgICAgICAqIFRoZSBlbXBlZy1jYXIgcGxheWVyIHdhbnRzIHRoZXNlIHBhcnRpY3VsYXIgdHR5IHNldHRpbmdzLgorICAgICAgICAgKiBZb3UgY291bGQsIGZvciBleGFtcGxlLCBjaGFuZ2UgdGhlIGJhdWQgcmF0ZSwgaG93ZXZlciB0aGUKKyAgICAgICAgICogcGxheWVyIG9ubHkgc3VwcG9ydHMgMTE1MjAwIChjdXJyZW50bHkpLCBzbyB0aGVyZSBpcyByZWFsbHkKKyAgICAgICAgICogbm8gcG9pbnQgaW4gc3VwcG9ydCBmb3IgY2hhbmdlcyB0byB0aGUgdHR5IHNldHRpbmdzLgorICAgICAgICAgKiAoYXQgbGVhc3QgZm9yIG5vdykKKyAgICAgICAgICoKKyAgICAgICAgICogVGhlIGRlZmF1bHQgcmVxdWlyZW1lbnRzIGZvciB0aGlzIGRldmljZSBhcmU6CisgICAgICAgICAqLworCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19pZmxhZworCQkmPSB+KElHTkJSSwkvKiBkaXNhYmxlIGlnbm9yZSBicmVhayAqLworCQl8IEJSS0lOVAkvKiBkaXNhYmxlIGJyZWFrIGNhdXNlcyBpbnRlcnJ1cHQgKi8KKwkJfCBQQVJNUksJLyogZGlzYWJsZSBtYXJrIHBhcml0eSBlcnJvcnMgKi8KKwkJfCBJU1RSSVAJLyogZGlzYWJsZSBjbGVhciBoaWdoIGJpdCBvZiBpbnB1dCBjaGFyYWN0ZXJzICovCisJCXwgSU5MQ1IJCS8qIGRpc2FibGUgdHJhbnNsYXRlIE5MIHRvIENSICovCisJCXwgSUdOQ1IJCS8qIGRpc2FibGUgaWdub3JlIENSICovCisJCXwgSUNSTkwJCS8qIGRpc2FibGUgdHJhbnNsYXRlIENSIHRvIE5MICovCisJCXwgSVhPTik7CS8qIGRpc2FibGUgZW5hYmxlIFhPTi9YT0ZGIGZsb3cgY29udHJvbCAqLworCisJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX29mbGFnCisJCSY9IH5PUE9TVDsJLyogZGlzYWJsZSBwb3N0cHJvY2VzcyBvdXRwdXQgY2hhcmFjdGVycyAqLworCisJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2xmbGFnCisJCSY9IH4oRUNITwkvKiBkaXNhYmxlIGVjaG8gaW5wdXQgY2hhcmFjdGVycyAqLworCQl8IEVDSE9OTAkvKiBkaXNhYmxlIGVjaG8gbmV3IGxpbmUgKi8KKwkJfCBJQ0FOT04JLyogZGlzYWJsZSBlcmFzZSwga2lsbCwgd2VyYXNlLCBhbmQgcnBybnQgc3BlY2lhbCBjaGFyYWN0ZXJzICovCisJCXwgSVNJRwkJLyogZGlzYWJsZSBpbnRlcnJ1cHQsIHF1aXQsIGFuZCBzdXNwZW5kIHNwZWNpYWwgY2hhcmFjdGVycyAqLworCQl8IElFWFRFTik7CS8qIGRpc2FibGUgbm9uLVBPU0lYIHNwZWNpYWwgY2hhcmFjdGVycyAqLworCisJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnCisJCSY9IH4oQ1NJWkUJLyogbm8gc2l6ZSAqLworCQl8IFBBUkVOQgkvKiBkaXNhYmxlIHBhcml0eSBiaXQgKi8KKwkJfCBDQkFVRCk7CS8qIGNsZWFyIGN1cnJlbnQgYmF1ZCByYXRlICovCisKKwlwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcKKwkJfD0gKENTOAkJLyogY2hhcmFjdGVyIHNpemUgOCBiaXRzICovCisJCXwgQjExNTIwMCk7CS8qIGJhdWQgcmF0ZSAxMTUyMDAgKi8KKworCS8qCisJICogRm9yY2UgbG93X2xhdGVuY3kgb247IG90aGVyd2lzZSB0aGUgcHVzaGVzIGFyZSBzY2hlZHVsZWQ7CisJICogdGhpcyBpcyBiYWQgYXMgaXQgb3BlbnMgdXAgdGhlIHBvc3NpYmlsaXR5IG9mIGRyb3BwaW5nIGJ5dGVzCisJICogb24gdGhlIGZsb29yLiAgV2UgZG9uJ3Qgd2FudCB0byBkcm9wIGJ5dGVzIG9uIHRoZSBmbG9vci4gOikKKwkgKi8KKwlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKKworCXJldHVybjsKK30KKworCitzdGF0aWMgaW50IF9faW5pdCBlbXBlZ19pbml0ICh2b2lkKQoreworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgaSwgcmV0dmFsOworCisJLyogY3JlYXRlIG91ciB3cml0ZSB1cmIgcG9vbCBhbmQgdHJhbnNmZXIgYnVmZmVycyAqLyAKKwlzcGluX2xvY2tfaW5pdCAoJndyaXRlX3VyYl9wb29sX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBOVU1fVVJCUzsgKytpKSB7CisJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCXdyaXRlX3VyYl9wb29sW2ldID0gdXJiOworCQlpZiAodXJiID09IE5VTEwpIHsKKwkJCWVycigiTm8gbW9yZSB1cmJzPz8/Iik7CisJCQljb250aW51ZTsKKwkJfQorCisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyAoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmItPnRyYW5zZmVyX2J1ZmZlcikgeworCQkJZXJyKCIlcyAtIG91dCBvZiBtZW1vcnkgZm9yIHVyYiBidWZmZXJzLiIsIAorCQkJICAgIF9fRlVOQ1RJT05fXyk7CisJCQljb250aW51ZTsKKwkJfQorCX0KKworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmVtcGVnX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmVtcGVnX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOworCisJaW5mbyhEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MpOworCisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZW1wZWdfZGV2aWNlKTsKK2ZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOgorCWZvciAoaSA9IDA7IGkgPCBOVU1fVVJCUzsgKytpKSB7CisJCWlmICh3cml0ZV91cmJfcG9vbFtpXSkgeworCQkJaWYgKHdyaXRlX3VyYl9wb29sW2ldLT50cmFuc2Zlcl9idWZmZXIpCisJCQkJa2ZyZWUod3JpdGVfdXJiX3Bvb2xbaV0tPnRyYW5zZmVyX2J1ZmZlcik7CisJCQl1c2JfZnJlZV91cmIod3JpdGVfdXJiX3Bvb2xbaV0pOworCQl9CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IGVtcGVnX2V4aXQgKHZvaWQpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXVzYl9kZXJlZ2lzdGVyKCZlbXBlZ19kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmVtcGVnX2RldmljZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJndyaXRlX3VyYl9wb29sX2xvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fVVJCUzsgKytpKSB7CisJCWlmICh3cml0ZV91cmJfcG9vbFtpXSkgeworCQkJLyogRklYTUUgLSB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyB1c2Jfa2lsbF91cmIgY2FsbCB3aGVuCisJCQkgKiB0aGUgaG9zdCBjb250cm9sbGVycyBnZXQgZml4ZWQgdG8gc2V0IHVyYi0+ZGV2ID0gTlVMTCBhZnRlcgorCQkJICogdGhlIHVyYiBpcyBmaW5pc2hlZC4gIE90aGVyd2lzZSB0aGlzIGNhbGwgb29wc2VzLiAqLworCQkJLyogdXNiX2tpbGxfdXJiKHdyaXRlX3VyYl9wb29sW2ldKTsgKi8KKwkJCWlmICh3cml0ZV91cmJfcG9vbFtpXS0+dHJhbnNmZXJfYnVmZmVyKQorCQkJCWtmcmVlKHdyaXRlX3VyYl9wb29sW2ldLT50cmFuc2Zlcl9idWZmZXIpOworCQkJdXNiX2ZyZWVfdXJiICh3cml0ZV91cmJfcG9vbFtpXSk7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmd3JpdGVfdXJiX3Bvb2xfbG9jaywgZmxhZ3MpOworfQorCisKK21vZHVsZV9pbml0KGVtcGVnX2luaXQpOworbW9kdWxlX2V4aXQoZW1wZWdfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9lenVzYi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2V6dXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU0MTljOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9lenVzYi5jCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBFWi1VU0Igc3BlY2lmaWMgZnVuY3Rpb25zIHVzZWQgYnkgc29tZSBvZiB0aGUgVVNCIHRvIFNlcmlhbCBkcml2ZXJzLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMDIgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKgkyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorCisvKiBFWi1VU0IgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyLiAgQml0IDAgY29udHJvbHMgODA1MSByZXNldCAqLworI2RlZmluZSBDUFVDU19SRUcgICAgMHg3RjkyCisKK2ludCBlenVzYl93cml0ZW1lbW9yeSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgaW50IGFkZHJlc3MsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgsIF9fdTggYlJlcXVlc3QpCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXI7CisKKwkvKiBkYmcoImV6dXNiX3dyaXRlbWVtb3J5ICV4LCAlZCIsIGFkZHJlc3MsIGxlbmd0aCk7ICovCisJaWYgKCFzZXJpYWwtPmRldikgeworCQllcnIoIiVzIC0gbm8gcGh5c2ljYWwgZGV2aWNlIHByZXNlbnQsIGZhaWxpbmcuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJdHJhbnNmZXJfYnVmZmVyID0gIGttYWxsb2MgKGxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cmFuc2Zlcl9idWZmZXIpIHsKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzIC0ga21hbGxvYyglZCkgZmFpbGVkLlxuIiwgX19GVU5DVElPTl9fLCBsZW5ndGgpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtY3B5ICh0cmFuc2Zlcl9idWZmZXIsIGRhdGEsIGxlbmd0aCk7CisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwgYlJlcXVlc3QsIDB4NDAsIGFkZHJlc3MsIDAsIHRyYW5zZmVyX2J1ZmZlciwgbGVuZ3RoLCAzMDAwKTsKKwlrZnJlZSAodHJhbnNmZXJfYnVmZmVyKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitpbnQgZXp1c2Jfc2V0X3Jlc2V0IChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCB1bnNpZ25lZCBjaGFyIHJlc2V0X2JpdCkKK3sKKwlpbnQgcmVzcG9uc2U7CisKKwkvKiBkYmcoIiVzIC0gJWQiLCBfX0ZVTkNUSU9OX18sIHJlc2V0X2JpdCk7ICovCisJcmVzcG9uc2UgPSBlenVzYl93cml0ZW1lbW9yeSAoc2VyaWFsLCBDUFVDU19SRUcsICZyZXNldF9iaXQsIDEsIDB4YTApOworCWlmIChyZXNwb25zZSA8IDApCisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcy0gJWQgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc2V0X2JpdCk7CisJcmV0dXJuIHJlc3BvbnNlOworfQorCisKK0VYUE9SVF9TWU1CT0woZXp1c2Jfd3JpdGVtZW1vcnkpOworRVhQT1JUX1NZTUJPTChlenVzYl9zZXRfcmVzZXQpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZXp1c2JfY29udmVydC5wbCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9lenVzYl9jb252ZXJ0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZjExNDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZXp1c2JfY29udmVydC5wbApAQCAtMCwwICsxLDUwIEBACisjISAvdXNyL2Jpbi9wZXJsIC13CisKKworIyBjb252ZXJ0IGFuIEludGVsIEhFWCBmaWxlIGludG8gYSBzZXQgb2YgQyByZWNvcmRzIHVzYWJsZSBieSB0aGUgZmlybXdhcmUKKyMgbG9hZGluZyBjb2RlIGluIHVzYi1zZXJpYWwuYyAob3Igb3RoZXJzKQorCisjIGFjY2VwdHMgdGhlIC5oZXggZmlsZShzKSBvbiBzdGRpbiwgYSBiYXNlbmFtZSAodG8gbmFtZSB0aGUgaW5pdGlhbGl6ZWQKKyMgYXJyYXkpIGFzIGFuIGFyZ3VtZW50LCBhbmQgcHJpbnRzIHRoZSAuaCBmaWxlIHRvIHN0ZG91dC4gVHlwaWNhbCB1c2FnZToKKyMgIHBlcmwgZXp1c2JfY29udmVydC5wbCBmb28gPGZvby5oZXggPmZ3X2Zvby5oCisKKworbXkgJGJhc2VuYW1lID0gJEFSR1ZbMF07CitkaWUgIm5vIGJhc2UgbmFtZSBzcGVjaWZpZWQiIHVubGVzcyAkYmFzZW5hbWU7CisKK3doaWxlICg8U1RESU4+KSB7CisgICAgIyAnOicgPGxlbj4gPGFkZHI+IDx0eXBlPiA8bGVuLWRhdGE+IDxjcmM+ICdccicKKyAgICAjICBsZW4sIHR5cGUsIGNyYyBhcmUgMi1jaGFyIGhleCwgYWRkciBpcyA0LWNoYXIgaGV4LiB0eXBlIGlzIDAwIGZvcgorICAgICMgbm9ybWFsIHJlY29yZHMsIDAxIGZvciBFT0YKKyAgICBteSgkbGVuc3RyaW5nLCAkYWRkcnN0cmluZywgJHR5cGVzdHJpbmcsICRyZXN0c3RyaW5nLCAkZG9zY3JhcCkgPQorICAgICAgL146KFx3XHcpKFx3XHdcd1x3KShcd1x3KShcdyspKFxyPykkLzsKKyAgICBkaWUgIm1hbGZvcm1lZCBsaW5lOiAkXyIgdW5sZXNzICRyZXN0c3RyaW5nOworICAgIGxhc3QgaWYgJHR5cGVzdHJpbmcgZXEgJzAxJzsKKyAgICBteSgkbGVuKSA9IGhleCgkbGVuc3RyaW5nKTsKKyAgICBteSgkYWRkcikgPSBoZXgoJGFkZHJzdHJpbmcpOworICAgIG15KEBieXRlcykgPSB1bnBhY2soIkMqIiwgcGFjaygiSCIuKDIqJGxlbiksICRyZXN0c3RyaW5nKSk7CisgICAgI3BvcChAYnl0ZXMpOyAjIGxhc3QgYnl0ZSBpcyBhIENSQworICAgIHB1c2goQHJlY29yZHMsIFskYWRkciwgXEBieXRlc10pOworfQorCitAc29ydGVkX3JlY29yZHMgPSBzb3J0IHsgJGEtPlswXSA8PT4gJGItPlswXSB9IEByZWNvcmRzOworCitwcmludCA8PCJFT0YiOworLyoKKyAqICR7YmFzZW5hbWV9X2Z3LmgKKyAqCisgKiBHZW5lcmF0ZWQgZnJvbSAke2Jhc2VuYW1lfS5zIGJ5IGV6dXNiX2NvbnZlcnQucGwKKyAqIFRoaXMgZmlsZSBpcyBwcmVzdW1lZCB0byBiZSB1bmRlciB0aGUgc2FtZSBjb3B5cmlnaHQgYXMgdGhlIHNvdXJjZSBmaWxlCisgKiBmcm9tIHdoaWNoIGl0IHdhcyBkZXJpdmVkLgorICovCisKK0VPRgorCitwcmludCAic3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkICR7YmFzZW5hbWV9X2Zpcm13YXJlW10gPSB7XG4iOworZm9yZWFjaCAkciAoQHNvcnRlZF9yZWNvcmRzKSB7CisgICAgcHJpbnRmKCJ7IDB4JTA0eCxcdCVkLFx0eyIsICRyLT5bMF0sIHNjYWxhcihAeyRyLT5bMV19KSk7CisgICAgcHJpbnQgam9pbigiLCAiLCBtYXAge3NwcmludGYoJzB4JTAyeCcsICRfKTt9IEB7JHItPlsxXX0pOworICAgIHByaW50ICJ9IH0sXG4iOworfQorcHJpbnQgInsgMHhmZmZmLFx0MCxcdHsweDAwfSB9XG4iOworcHJpbnQgIn07XG4iOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWZkOTA1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKQEAgLTAsMCArMSwyNDk2IEBACisvKgorICogVVNCIEZUREkgU0lPIGRyaXZlcgorICoKKyAqIAlDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDAxCisgKiAJICAgIEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKiAgICAgICAgICBCaWxsIFJ5ZGVyIChicnlkZXJAc2dpLmNvbSkKKyAqCUNvcHlyaWdodCAoQykgMjAwMgorICoJICAgIEt1YmEgT2JlciAoa3ViYUBtYXJlaW1icml1bS5vcmcpCisgKgorICogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIAl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCisgKgorICogU2VlIGh0dHA6Ly9mdGRpLXVzYi1zaW8uc291cmNlZm9yZ2UubmV0IGZvciB1cHRvIGRhdGUgdGVzdGluZyBpbmZvCisgKglhbmQgZXh0cmEgZG9jdW1lbnRhdGlvbgorICoKKyAqICgyMS9KdWwvMjAwNCkgSWFuIEFiYm90dAorICogICAgICBJbmNvcnBvcmF0ZWQgU3RldmVuIFR1cm5lcidzIGNvZGUgdG8gYWRkIHN1cHBvcnQgZm9yIHRoZSBGVDIyMzJDIGNoaXAuCisgKiAgICAgIFRoZSBwcmVsaW1pbGFyeSBwb3J0IHRvIHRoZSAyLjYga2VybmVsIHdhcyBieSBSdXMgVi4gQnJ1c2hrb2ZmLiAgSSBoYXZlCisgKiAgICAgIGZpeGVkIGEgY291cGxlIG9mIHRoaW5ncy4KKyAqCisgKiAoMjcvTWF5LzIwMDQpIElhbiBBYmJvdHQKKyAqICAgICAgSW1wcm92ZWQgdGhyb3R0bGluZyBjb2RlLCBtb3N0bHkgc3RvbGVuIGZyb20gdGhlIFdoaXRlSEVBVCBkcml2ZXIuCisgKgorICogKDI2L01hci8yMDA0KSBKYW4gQ2FwZWsKKyAqICAgICAgQWRkZWQgUElEJ3MgZm9yIElDRC1VMjAvSUNELVU0MCAtIGluY2lyY3VpdCBQSUMgZGVidWdnZXJzIGZyb20gQ0NTIEluYy4KKyAqCisgKiAoMDkvRmViLzIwMDQpIElhbiBBYmJvdHQKKyAqICAgICAgQ2hhbmdlZCBmdWxsIG5hbWUgb2YgVVNCLVVJUlQgZGV2aWNlIHRvIGF2b2lkICIvIiBjaGFyYWN0ZXIuCisgKiAgICAgIEFkZGVkIEZUREkncyBhbHRlcm5hdGUgUElEICgweDYwMDYpIGZvciBGVDIzMi8yNDUgZGV2aWNlcy4KKyAqICAgICAgQWRkZWQgUElEIGZvciAiRUxWIFVTQiBNb2R1bGUgVU8xMDAiIGZyb20gU3RlZmFuIEZyaW5ncy4KKyAqIAorICogKDIxL09jdC8yMDAzKSBJYW4gQWJib3R0CisgKiAgICAgIFJlbmFtZWQgc29tZSBWSUQvUElEIG1hY3JvcyBmb3IgTWF0cml4IE9yYml0YWwgYW5kIFBlcmxlIFN5c3RlbXMKKyAqICAgICAgZGV2aWNlcy4gIFJlbW92ZWQgTWF0cml4IE9yYml0YWwgYW5kIFBlcmxlIFN5c3RlbXMgZGV2aWNlcyBmcm9tIHRoZQorICogICAgICA4VTIzMkFNIGRldmljZSB0YWJsZSwgYnV0IGxlZnQgdGhlbSBpbiB0aGUgRlQyMzJCTSB0YWJsZSwgYXMgdGhleSBhcmUKKyAqICAgICAga25vd24gdG8gdXNlIG9ubHkgRlQyMzJCTS4KKyAqCisgKiAoMTcvT2N0LzIwMDMpIFNjb3R0IEFsbGVuCisgKiAgICAgIEFkZGVkIHZpZC9waWQgZm9yIFBlcmxlIFN5c3RlbXMgVWx0cmFQb3J0IFVTQiBzZXJpYWwgY29udmVydGVycworICoKKyAqICgyMS9TZXAvMjAwMykgSWFuIEFiYm90dAorICogICAgICBBZGRlZCBWSUQvUElEIGZvciBPbW5pZGlyZWN0aW9uYWwgQ29udHJvbCBUZWNobm9sb2d5IFVTMTAxIFVTQiB0bworICogICAgICBSUy0yMzIgYWRhcHRlciAoYWxzbyByZWJhZGdlZCBhcyBEaWNrIFNtaXRoIEVsZWN0cm9uaWNzIFhINjM4MSkuCisgKiAgICAgIFZJRC9QSUQgc3VwcGxpZWQgYnkgRG9uYWxkIEdvcmRvbi4KKyAqCisgKiAoMTkvQXVnLzIwMDMpIElhbiBBYmJvdHQKKyAqICAgICAgRnJlZWQgdXJiJ3MgdHJhbnNmZXIgYnVmZmVyIGluIHdyaXRlIGJ1bGsgY2FsbGJhY2suCisgKiAgICAgIE9taXR0ZWQgc29tZSBwYXJhbm9pZCBjaGVja3MgaW4gd3JpdGUgYnVsayBjYWxsYmFjayB0aGF0IGRvbid0IG1hdHRlci4KKyAqICAgICAgU2NoZWR1bGVkIHdvcmsgaW4gd3JpdGUgYnVsayBjYWxsYmFjayByZWdhcmRsZXNzIG9mIHBvcnQncyBvcGVuIGNvdW50LgorICoKKyAqICgwNS9BdWcvMjAwMykgSWFuIEFiYm90dAorICogICAgICBBZGRlZCBWSUQvUElEIGZvciBJRCBURUNIIElEVDEyMjFVIFVTQiB0byBSUy0yMzIgYWRhcHRlci4KKyAqICAgICAgVklEL1BJRCBwcm92aWRlZCBieSBTdGV2ZSBCcmlnZ3MuCisgKgorICogKDIzL0p1bC8yMDAzKSBJYW4gQWJib3R0CisgKiAgICAgIEFkZGVkIFBJRHMgZm9yIENyeXN0YWxGb250eiA1NDcsIDYzMywgNjMxLCA2MzUsIDY0MCBhbmQgNjQwIGZyb20KKyAqICAgICAgV2F5bmUgV3lsdXBza2kuCisgKgorICogKDEwL0p1bC8yMDAzKSBEYXZpZCBHbGFuY2UKKyAqICAgICAgQWRkZWQgUElEIGZvciBEU1MtMjAgU3luY1N0YXRpb24gY3JhZGxlIGZvciBTb255LUVyaWNzc29uIFA4MDAuCisgKgorICogKDI3L0p1bi8yMDAzKSBJYW4gQWJib3R0CisgKglSZXdvcmtlZCB0aGUgdXJiIGhhbmRsaW5nIGxvZ2ljLiAgV2UgaGF2ZSBubyBtb3JlIHBvb2wsIGJ1dCBkeW5hbWljYWxseQorICoJYWxsb2NhdGUgdGhlIHVyYiBhbmQgdGhlIHRyYW5zZmVyIGJ1ZmZlciBvbiB0aGUgZmx5LiAgSW4gdGVzdGluZyB0aGlzCisgKglkb2VzIG5vdCBpbmN1cmUgYW55IG1lYXN1cmFibGUgb3ZlcmhlYWQuICBUaGlzIGFsc28gcmVsaWVzIG9uIHRoZSBmYWN0CisgKgl0aGF0IHdlIGhhdmUgcHJvcGVyIHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYyBmb3IgdXJicy4gIEkgbmlja2VkIHRoaXMKKyAqCWZyb20gR3JlZyBLSCdzIFZpc29yIGRyaXZlci4KKyAqICAgICAgCisgKiAoMjMvSnVuLzIwMDMpIElhbiBBYmJvdHQKKyAqICAgICAgUmVkdWNlZCBmbGlwIGJ1ZmZlciBwdXNoZXMgYW5kIGNvcnJlY3RlZCBhIGRhdGEgbGVuZ3RoIHRlc3QgaW4KKyAqICAgICAgZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2suCisgKiAgICAgIERlZmVyZXJlbmNlIHBvaW50ZXJzIGFmdGVyIGFueSBwYXJhbm9pZCBjaGVja3MsIG5vdCBiZWZvcmUuCisgKgorICogKDIxL0p1bi8yMDAzKSBFcmlrIE55Z3JlbgorICogICAgICBBZGRlZCBzdXBwb3J0IGZvciBIb21lIEVsZWN0cm9uaWNzIFRpcmEtMSBJUiB0cmFuY2VpdmVyIHVzaW5nIEZUMjMyQk0gY2hpcC4KKyAqICAgICAgU2VlIDxodHRwOi8vd3d3LmhvbWUtZWxlY3Ryby5jb20vdGlyYTEuaHRtPi4gIE9ubHkgb3BlcmF0ZXMgcHJvcGVybHkgCisgKiAgICAgIGF0IDEwMDAwMCBhbmQgUlRTLUNUUywgc28gc2V0IGN1c3RvbSBkaXZpc29yIG1vZGUgb24gc3RhcnR1cC4KKyAqICAgICAgQWxzbyBmb3JjZSB0aGUgVGlyYS0xIGFuZCBVU0ItVUlSVCB0byBvbmx5IHVzZSB0aGVpciBjdXN0b20gYmF1ZCByYXRlcy4KKyAqCisgKiAoMTgvSnVuLzIwMDMpIElhbiBBYmJvdHQKKyAqICAgICAgQWRkZWQgRGV2aWNlIElEIG9mIHRoZSBVU0IgcmVsYWlzIGZyb20gUnVkb2xmIEd1Z2xlciAoYmFja3BvcnRlZCBmcm9tCisgKiAgICAgIFBoaWxpcHAgR/xocmluZydzIHBhdGNoIGZvciAyLjUueCBrZXJuZWwpLgorICogICAgICBNb3ZlZCByZWFkIHRyYW5zZmVyIGJ1ZmZlciByZWFsbG9jYXRpb24gaW50byBzdGFydHVwIGZ1bmN0aW9uLgorICogICAgICBGcmVlIGV4aXN0aW5nIHdyaXRlIHVyYiBhbmQgdHJhbnNmZXIgYnVmZmVyIGluIHN0YXJ0dXAgZnVuY3Rpb24uCisgKiAgICAgIE9ubHkgdXNlIHVyYnMgaW4gd3JpdGUgdXJiIHBvb2wgdGhhdCB3ZXJlIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQuCisgKiAgICAgIE1vdmVkIHNvbWUgY29uc3RhbnQgbWFjcm9zIG91dCBvZiBmdW5jdGlvbnMuCisgKiAgICAgIE1pbm9yIHdoaXRlc3BhY2UgYW5kIGNvbW1lbnQgY2hhbmdlcy4KKyAqCisgKiAoMTIvSnVuLzIwMDMpIERhdmlkIE5vcndvb2QKKyAqICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgVVNCLVVJUlQgSVIgdHJhbmNlaXZlciB1c2luZyA4VTIzMkFNIGNoaXAuCisgKiAgICAgIFNlZSA8aHR0cDovL2hvbWUuZWFydGhsaW5rLm5ldC9+anJoZWVzL1VTQlVJUlQvaW5kZXguaHRtPi4gIE9ubHkKKyAqICAgICAgb3BlcmF0ZXMgcHJvcGVybHkgYXQgMzEyNTAwLCBzbyBzZXQgY3VzdG9tIGRpdmlzb3IgbW9kZSBvbiBzdGFydHVwLgorICoKKyAqICgxMi9KdW4vMjAwMykgSWFuIEFiYm90dAorICogICAgICBBZGRlZCBTZWFsZXZlbCBTZWFMSU5LKyAyMTB4LCAyMjB4LCAyNDB4LCAyODB4IHZpZC9waWRzIGZyb20gVHVhbiBIb2FuZworICogICAgICAtIEkndmUgZWxpbWluYXRlZCBzb21lIHRoYXQgZG9uJ3Qgc2VlbSB0byBleGlzdCEKKyAqICAgICAgQWRkZWQgSG9tZSBFbGVjdHJvbmljcyBUaXJhLTEgSVIgdHJhbnNjZWl2ZXIgcGlkIGZyb20gQ2hyaXMgSG9ybgorICogICAgICBTb21lIHdoaXRlc3BhY2UvY29kaW5nLXN0eWxlIGNsZWFudXBzCisgKgorICogKDExL0p1bi8yMDAzKSBJYW4gQWJib3R0CisgKiAgICAgIEZpeGVkIHVuc2FmZSBzcGlubG9jayB1c2FnZSBpbiBmdGRpX3dyaXRlCisgKgorICogKDI0L0ZlYi8yMDAzKSBSaWNoYXJkIFNob290ZXIKKyAqICAgICAgSW5jcmVhc2UgcmVhZCBidWZmZXIgc2l6ZSB0byBpbXByb3ZlIHJlYWQgc3BlZWRzIGF0IGhpZ2hlciBiYXVkIHJhdGVzCisgKiAgICAgIChzcGVjaWZpY2FsbHkgdGVzdGVkIHdpdGggdXAgdG8gMU1iL3NlYyBhdCAxLjVNIGJhdWQpCisgKgorICogKDIzL0ZlYi8yMDAzKSBKb2huIFdpbGtpbnMKKyAqICAgICAgQWRkZWQgWG9uL3hvZmYgZmxvdyBjb250cm9sIChhY3RpdmF0aW5nIHN1cHBvcnQgaW4gdGhlIGZ0ZGkgZGV2aWNlKQorICogICAgICBBZGRlZCB2aWQvcGlkIGZvciBWaWRlb25ldHdvcmtzL0hvbWVjaG9pY2UgKFVLIElTUCkKKyAqCisgKiAoMjMvRmViLzIwMDMpIEJpbGwgUnlkZXIKKyAqICAgICAgQWRkZWQgbWF0cml4IG9yYiBkZXZpY2UgdmlkL3BpZHMgZnJvbSBXYXluZSBXeWx1cHNraQorICoKKyAqICgxOS9GZWIvMjAwMykgSWFuIEFiYm90dAorICogICAgICBGb3IgVElPQ1NTRVJJQUwsIHNldCBhbHRfc3BlZWQgdG8gMCB3aGVuIEFTWU5DX1NQRF9NQVNLIHZhbHVlIGhhcworICogICAgICBjaGFuZ2VkIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIEFTWU5DX1NQRF9ISSwgQVNZTkNfU1BEX1ZISSwKKyAqICAgICAgQVNZTkNfU1BEX1NISSBvciBBU1lOQ19TUERfV0FSUC4gIEFsc28sIHVubGVzcyBBU1lOQ19TUERfQ1VTVCBpcyBpbgorICogICAgICBmb3JjZSwgZG9uJ3QgYm90aGVyIGNoYW5naW5nIGJhdWQgcmF0ZSB3aGVuIGN1c3RvbV9kaXZpc29yIGhhcyBjaGFuZ2VkLgorICoKKyAqICgxOC9GZWIvMjAwMykgSWFuIEFiYm90dAorICogICAgICBGaXhlZCBUSU9DTUdFVCBoYW5kbGluZyB0byBpbmNsdWRlIHN0YXRlIG9mIERUUiBhbmQgUlRTLCB0aGUgc3RhdGUKKyAqICAgICAgb2Ygd2hpY2ggYXJlIG5vdyBzYXZlZCBieSBzZXRfZHRyKCkgYW5kIHNldF9ydHMoKS4KKyAqICAgICAgRml4ZWQgaW1wcm9wZXIgc3RvcmFnZSBjbGFzcyBmb3IgYnVmIGluIHNldF9kdHIoKSBhbmQgc2V0X3J0cygpLgorICogICAgICBBZGRlZCBGVDIzMkJNIGNoaXAgdHlwZSBhbmQgc3VwcG9ydCBmb3IgaXRzIGV4dHJhIGJhdWQgcmF0ZXMgKGNvbXBhcmVkCisgKiAgICAgIHRvIEZUOFUyMzJBTSkuCisgKiAgICAgIFRvb2sgYWNjb3VudCBvZiBzcGVjaWFsIGNhc2UgZGl2aXNvciB2YWx1ZXMgZm9yIGhpZ2hlc3QgYmF1ZCByYXRlcyBvZgorICogICAgICBGVDhVMjMyQU0gYW5kIEZUMjMyQk0uCisgKiAgICAgIEZvciBUSU9DU1NFUklBTCwgZm9yY2VkIGFsdF9zcGVlZCB0byAwIHdoZW4gQVNZTkNfU1BEX0NVU1Qga2x1ZGdlIHVzZWQsCisgKiAgICAgIGFzIHByZXZpb3VzIGFsdF9zcGVlZCBzZXR0aW5nIGlzIG5vdyBzdGFsZS4KKyAqICAgICAgTW92ZWQgc3RhcnR1cCBjb2RlIGNvbW1vbiBiZXR3ZWVuIHRoZSBzdGFydHVwIHJvdXRpbmVzIGZvciB0aGUKKyAqICAgICAgZGlmZmVyZW50IGNoaXAgdHlwZXMgaW50byBhIGNvbW1vbiBzdWJyb3V0aW5lLgorICoKKyAqICgxNy9GZWIvMjAwMykgQmlsbCBSeWRlcgorICogICAgICBBZGRlZCB3cml0ZSB1cmIgYnVmZmVyIHBvb2wgb24gYSBwZXIgZGV2aWNlIGJhc2lzCisgKiAgICAgIEFkZGVkIG1vcmUgY2hlY2tpbmcgZm9yIG9wZW4gZmlsZSBvbiBjYWxsYmFja3MgKGZpeGVkIE9PUFMpCisgKiAgICAgIEFkZGVkIENyeXN0YWxGb250eiA2MzIgYW5kIDYzNCBQSURzIAorICogICAgICAgICAodGhhbnggdG8gQ3J5c3RhbEZvbnR6IGZvciB0aGUgc2FtcGxlIGRldmljZXMgLSB0aGV5IGZsdXNoZWQgb3V0CisgKiAgICAgICAgICAgc29tZSBkcml2ZXIgYnVncykKKyAqICAgICAgTWlub3IgZGVidWdnaW5nIG1lc3NhZ2UgY2hhbmdlcworICogICAgICBBZGRlZCB0aHJvdHRsZSwgdW50aHJvdHRsZSBhbmQgY2hhcnNfaW5fYnVmZmVyIGZ1bmN0aW9ucworICogICAgICBGaXhlZCBGVERJX1NJTyAodGhlIG9yaWdpbmFsIGRldmljZSkgYnVnCisgKiAgICAgIEZpeGVkIHNvbWUgc2h1dGRvd24gaGFuZGxpbmcKKyAqICAgICAgCisgKiAKKyAqIAorICogCisgKiAoMDcvSnVuLzIwMDIpIEt1YmEgT2JlcgorICoJQ2hhbmdlZCBGVERJX1NJT19CQVNFX0JBVURfVE9fRElWSVNPUiBtYWNybyBpbnRvIGZ0ZGlfYmF1ZF90b19kaXZpc29yCisgKglmdW5jdGlvbi4gSXQgd2FzIGdldHRpbmcgdG9vIGNvbXBsZXguCisgKglGaXggdGhlIGRpdmlzb3IgY2FsY3VsYXRpb24gbG9naWMgd2hpY2ggd2FzIHNldHRpbmcgZGl2aXNvciBvZiAwLjEyNQorICoJaW5zdGVhZCBvZiAwLjUgZm9yIGZyYWN0aW9uYWwgcGFydHMgb2YgZGl2aXNvciBlcXVhbCB0byA1LzgsIDYvOCwgNy84LgorICoJQWxzbyBtYWtlIGl0IGJ1bXAgdXAgdGhlIGRpdmlzb3IgdG8gbmV4dCBpbnRlZ2VyIGluIGNhc2Ugb2YgNy84IC0gaXQncworICoJYSBiZXR0ZXIgYXBwcm94aW1hdGlvbi4KKyAqCisgKiAoMjUvSnVsLzIwMDIpIEJpbGwgUnlkZXIgaW5zZXJ0ZWQgRG1pdHJpJ3MgVElPQ01JV0FJVCBwYXRjaAorICogICAgICBOb3QgdGVzdGVkIGJ5IG1lIGJ1dCBpdCBkb2Vzbid0IGJyZWFrIGFueXRoaW5nIEkgdXNlLgorICogCisgKiAoMDQvSmFuLzIwMDIpIEt1YmEgT2JlcgorICoJSW1wbGVtZW50ZWQgMzg0MDAgYmF1ZHJhdGUga2x1ZGdlLCB3aGVyZSBpdCBjYW4gYmUgc3Vic3RpdHV0ZWQgd2l0aCBvdGhlcgorICoJICB2YWx1ZXMuIFRoYXQncyB0aGUgb25seSB3YXkgdG8gc2V0IGN1c3RvbSBiYXVkcmF0ZXMuCisgKglJbXBsZW1lbnRlZCBUSU9DU1NFUklBTCwgVElPQ0dTRVJJQUwgaW9jdGwncyBzbyB0aGF0IHNldHNlcmlhbCBpcyBoYXBweS4KKyAqCUZJWE1FOiBib3RoIGJhdWRyYXRlIHRoaW5ncyBzaG91bGQgZXZlbnR1YWxseSBnbyB0byB1c2JzZXJpYWwuYyBhcyBvdGhlcgorICoJICBkZXZpY2VzIG1heSBuZWVkIHRoYXQgZnVuY3Rpb25hbGl0eSB0b28uIEFjdHVhbGx5LCBpdCBjYW4gcHJvYmFibHkgYmUKKyAqCSAgbWVyZ2VkIGluIHNlcmlhbC5jIHNvbWVob3cgLSB0b28gbWFueSBkcml2ZXJzIHJlcGVhdCB0aGlzIGNvZGUgb3ZlcgorICoJICBhbmQgb3Zlci4KKyAqCUZpeGVkIGJhdWRyYXRlIGZvcmdldGZ1bG5lc3MgLSBvcGVuKCkgdXNlZCB0byByZXNldCBiYXVkcmF0ZSB0byA5NjAwIGV2ZXJ5IHRpbWUuCisgKglEaXZpc29ycyBmb3IgYmF1ZHJhdGVzIGFyZSBjYWxjdWxhdGVkIGJ5IGEgbWFjcm8uCisgKglTbWFsbCBjb2RlIGNsZWFudXBzLiBVZ2x5IHdoaXRlc3BhY2UgY2hhbmdlcyBmb3IgUGxhdG8ncyBzYWtlIG9ubHkgOy1dLgorICoKKyAqICgwNC9Ob3YvMjAwMSkgQmlsbCBSeWRlcgorICoJRml4ZWQgYnVnIGluIHJlYWRfYnVsa19jYWxsYmFjayB3aGVyZSBpbmNvcnJlY3QgdXJiIGJ1ZmZlciB3YXMgdXNlZC4KKyAqCUNsZWFuZWQgdXAgd3JpdGUgb2Zmc2V0IGNhbGN1bGF0aW9uCisgKglBZGRlZCB3cml0ZV9yb29tIHNpbmNlIGRlZmF1bHQgdmFsdWVzIGNhbiBiZSBpbmNvcnJlY3QgZm9yIHNpbworICoJQ2hhbmdlZCB3cml0ZV9idWxrX2NhbGxiYWNrIHRvIHVzZSBzYW1lIHF1ZXVlX3Rhc2sgYXMgb3RoZXIgZHJpdmVycworICogICAgICAgICh0aGUgcHJldmlvdXMgdmVyc2lvbiBjYXVzZWQgcGFuaWNzKQorICoJUmVtb3ZlZCBwb3J0IGl0ZXJhdGlvbiBjb2RlIHNpbmNlIHRoZSBkZXZpY2Ugb25seSBoYXMgb25lIEkvTyBwb3J0IGFuZCBpdAorICoJICB3YXMgd3JvbmcgYW55d2F5LgorICogCisgKiAoMzEvTWF5LzIwMDEpIGdraAorICoJU3dpdGNoZWQgZnJvbSB1c2luZyBzcGlubG9jayB0byBhIHNlbWFwaG9yZSwgd2hpY2ggZml4ZXMgbG90cyBvZiBwcm9ibGVtcy4KKyAqCisgKiAoMjMvTWF5LzIwMDEpICAgQmlsbCBSeWRlcgorICoJQWRkZWQgcnVudGltZSBkZWJ1ZyBwYXRjaCAodGhhbnggVHlzb24gRCBTYXd5ZXIpLgorICoJQ2xlYW5lZCB1cCBjb21tZW50cyBmb3IgOFUyMzIKKyAqCUFkZGVkIHBhcml0eSwgZnJhbWluZyBhbmQgb3ZlcnJ1biBlcnJvciBoYW5kbGluZworICoJQWRkZWQgcmVjZWl2ZSBicmVhayBoYW5kbGluZy4KKyAqIAorICogKDA0LzA4LzIwMDEpIGdiCisgKglJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgorICogICAgICAgCisgKiAoMTgvTWFyY2gvMjAwMSkgQmlsbCBSeWRlcgorICoJKE5vdCByZWxlYXNlZCkKKyAqCUFkZGVkIHNlbmQgYnJlYWsgaGFuZGxpbmcuIChyZXF1aXJlcyBrZXJuZWwgcGF0Y2ggdG9vKQorICoJRml4ZWQgOFUyMzJBTSBoYXJkd2FyZSBSVFMvQ1RTIGV0YyBzdGF0dXMgcmVwb3J0aW5nLgorICoJQWRkZWQgZmxpcGJ1ZiBmaXggY29waWVkIGZyb20gZ2VuZXJpYyBkZXZpY2UKKyAqIAorICogKDEyLzMvMjAwMCkgQmlsbCBSeWRlcgorICoJQWRkZWQgc3VwcG9ydCBmb3IgOFUyMzJBTSBkZXZpY2UuCisgKglNb3ZlZCBQSUQgYW5kIFZJRHMgaW50byBoZWFkZXIgZmlsZSBvbmx5LgorICoJVHVybmVkIG9uIGxvdy1sYXRlbmN5IGZvciB0aGUgdHR5IChkZXZpY2Ugd2lsbCBkbyBoaWdoIGJhdWRyYXRlcykKKyAqCUFkZGVkIHNodXRkb3duIHJvdXRpbmUgdG8gY2xvc2UgZmlsZXMgd2hlbiBkZXZpY2UgcmVtb3ZlZC4KKyAqCU1vcmUgZGVidWcgYW5kIGVycm9yIG1lc3NhZ2UgY2xlYW51cHMuCisgKgorICogKDExLzEzLzIwMDApIEJpbGwgUnlkZXIKKyAqCUFkZGVkIHNwaW5sb2NrIHByb3RlY3RlZCBvcGVuIGNvZGUgYW5kIGNsb3NlIGNvZGUuCisgKglNdWx0aXBsZSBvcGVucyB3b3JrIChzb3J0IG9mIC0gc2VlIHdlYnBhZ2UgbWVudGlvbmVkIGFib3ZlKS4KKyAqCUNsZWFuZWQgdXAgY29tbWVudHMuIFJlbW92ZWQgbXVsdGlwbGUgUElEL1ZJRCBkZWZpbml0aW9ucy4KKyAqCUZhY3RvcmlzZWQgY3RzL2R0ciBjb2RlCisgKglNYWRlIHVzZSBvZiBfX0ZVTkNUSU9OX18gaW4gZGJnJ3MKKyAqICAgICAgCisgKiAoMTEvMDEvMjAwMCkgQWRhbSBKLiBSaWNodGVyCisgKgl1c2JfZGV2aWNlX2lkIHRhYmxlIHN1cHBvcnQKKyAqIAorICogKDEwLzA1LzIwMDApIGdraAorICoJRml4ZWQgYnVnIHdpdGggdXJiLT5kZXYgbm90IGJlaW5nIHNldCBwcm9wZXJseSwgbm93IHRoYXQgdGhlIHVzYgorICoJY29yZSBuZWVkcyBpdC4KKyAqIAorICogKDA5LzExLzIwMDApIGdraAorICoJUmVtb3ZlZCBERUJVRyAjaWZkZWZzIHdpdGggY2FsbCB0byB1c2Jfc2VyaWFsX2RlYnVnX2RhdGEKKyAqCisgKiAoMDcvMTkvMjAwMCkgZ2toCisgKglBZGRlZCBtb2R1bGVfaW5pdCBhbmQgbW9kdWxlX2V4aXQgZnVuY3Rpb25zIHRvIGhhbmRsZSB0aGUgZmFjdCB0aGF0IHRoaXMKKyAqCWRyaXZlciBpcyBhIGxvYWRhYmxlIG1vZHVsZSBub3cuCisgKgorICogKDA0LzA0LzIwMDApIEJpbGwgUnlkZXIgCisgKglGaXhlZCBidWdzIGluIFRDR0VUL1RDU0VUIGlvY3RscyAoYnkgcmVtb3ZpbmcgdGhlbSAtIHRoZXkgYXJlCisgKiAgICAgICAgaGFuZGxlZCBlbHNld2hlcmUgaW4gdGhlIHR0eSBpbyBkcml2ZXIgY2hhaW4pLgorICoKKyAqICgwMy8zMC8yMDAwKSBCaWxsIFJ5ZGVyIAorICoJSW1wbGVtZW50ZWQgbG90cyBvZiBpb2N0bHMKKyAqCUZpeGVkIGEgcmFjZSBjb25kaXRpb24gaW4gd3JpdGUKKyAqCUNoYW5nZWQgc29tZSBkYmcncyB0byBlcnJzCisgKgorICogKDAzLzI2LzIwMDApIGdraAorICoJU3BsaXQgZHJpdmVyIHVwIGludG8gZGV2aWNlIHNwZWNpZmljIHBpZWNlcy4KKyAqCisgKi8KKworLyogQmlsbCBSeWRlciAtIGJyeWRlckBzZ2kuY29tIC0gd3JvdGUgdGhlIEZURElfU0lPIGltcGxlbWVudGF0aW9uICovCisvKiBUaGFueCB0byBGVERJIGZvciBzbyBraW5kbHkgcHJvdmlkaW5nIGRldGFpbHMgb2YgdGhlIHByb3RvY29sIHJlcXVpcmVkICovCisvKiAgIHRvIHRhbGsgdG8gdGhlIGRldmljZSAqLworLyogVGhhbnggdG8gZ2toIGFuZCB0aGUgcmVzdCBvZiB0aGUgdXNiIGRldiBncm91cCBmb3IgYWxsIGNvZGUgSSBoYXZlIGFzc2ltaWxhdGVkIDotKSAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisjaW5jbHVkZSAiZnRkaV9zaW8uaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuNC4xIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiwgQmlsbCBSeWRlciA8YnJ5ZGVyQHNnaS5jb20+LCBLdWJhIE9iZXIgPGt1YmFAbWFyZWltYnJpdW0ub3JnPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBGVERJIFNlcmlhbCBDb252ZXJ0ZXJzIERyaXZlciIKKworc3RhdGljIGludCBkZWJ1ZzsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX3NpbyBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfU0lPX1BJRCkgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworLyoKKyAqIFRoZSA4VTIzMkFNIGhhcyB0aGUgc2FtZSBBUEkgYXMgdGhlIHNpbyBleGNlcHQgZm9yOgorICogLSBpdCBjYW4gc3VwcG9ydCBNVUNIIGhpZ2hlciBiYXVkcmF0ZXM7IHVwIHRvOgorICogICBvIDkyMTYwMCBmb3IgUlMyMzIgYW5kIDIwMDAwMDAgZm9yIFJTNDIyLzQ4NSBhdCA0OE1IegorICogICBvIDIzMDQwMCBhdCAxMk1IegorICogICBzbyAuLiA4VTIzMkFNJ3MgYmF1ZHJhdGUgc2V0dGluZyBjb2RlcyBhcmUgZGlmZmVyZW50CisgKiAtIGl0IGhhcyBhIHR3byBieXRlIHN0YXR1cyBjb2RlLgorICogLSBpdCByZXR1cm5zIGNoYXJhY3RlcnMgZXZlcnkgMTZtcyAodGhlIEZUREkgZG9lcyBpdCBldmVyeSA0MG1zKQorICoKKyAqIHRoZSBiY2REZXZpY2UgdmFsdWUgaXMgdXNlZCB0byBkaWZmZXJlbnRpYXRlIEZUMjMyQk0gYW5kIEZUMjQ1Qk0gZnJvbQorICogdGhlIGVhcmxpZXIgRlQ4VTIzMkFNIGFuZCBGVDhVMjMyQk0uICBGb3Igbm93LCBpbmNsdWRlIGFsbCBrbm93biBWSUQvUElECisgKiBjb21iaW5hdGlvbnMgaW4gYm90aCB0YWJsZXMuCisgKiBGSVhNRTogcGVyaGFwcyBiY2REZXZpY2UgY2FuIGFsc28gaWRlbnRpZnkgMTJNSHogZGV2aWNlcywgYnV0IEkgZG9uJ3Qga25vdworICogaWYgdGhvc2UgZXZlciB3ZW50IGludG8gbWFzcyBwcm9kdWN0aW9uLiBbSWFuIEFiYm90dF0KKyAqLworCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV84VTIzMkFNIFtdID0geworCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfSVJUUkFOU19QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfOFUyMzJBTV9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfOFUyMzJBTV9BTFRfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJXzhVMjMyQU1fQUxUX0FMVF9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfUkVMQUlTX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFKElOVEVSQklPTUVUUklDU19WSUQsIElOVEVSQklPTUVUUklDU19JT0JPQVJEX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSU5URVJCSU9NRVRSSUNTX1ZJRCwgSU5URVJCSU9NRVRSSUNTX01JTklfSU9CT0FSRF9QSUQpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX05GX1JJQ19WSUQsIEZURElfTkZfUklDX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9YRl82MzJfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1hGXzYzNF9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfWEZfNTQ3X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9YRl82MzNfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1hGXzYzMV9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfWEZfNjM1X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9YRl82NDBfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1hGXzY0Ml9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfVk5IQ1BDVVNCX0RfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0RTUzIwX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIxMDFfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjEwMl9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMTAzX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIxMDRfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjIwMV8xX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIyMDFfMl9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMjAyXzFfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjIwMl8yX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIyMDNfMV9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMjAzXzJfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMV8xX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDFfMl9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAxXzNfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMV80X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDJfMV9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAyXzJfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMl8zX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDJfNF9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAzXzFfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwM18yX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDNfM19QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAzXzRfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV8xX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfMl9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzNfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV80X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfNV9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzZfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV83X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfOF9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzFfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl8yX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfM19QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzRfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl81X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfNl9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzdfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl84X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfMV9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzJfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM18zX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfNF9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzVfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM182X1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfN19QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzhfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKElEVEVDSF9WSUQsIElEVEVDSF9JRFQxMjIxVV9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoT0NUX1ZJRCwgT0NUX1VTMTAxX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgUFJPVEVHT19TUEVDSUFMXzEsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIFBST1RFR09fUjJYMCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgUFJPVEVHT19TUEVDSUFMXzMsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIFBST1RFR09fU1BFQ0lBTF80LCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0VMVl9VTzEwMF9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIElOU0lERV9BQ0NFU1NPLCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKElOVFJFUElEX1ZJRCwgSU5UUkVQSURfVkFMVUVDQU5fUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKElOVFJFUElEX1ZJRCwgSU5UUkVQSURfTkVPVklfUElELCAwLCAweDNmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZBTENPTV9WSUQsIEZBTENPTV9UV0lTVF9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfU1VVTlRPX1NQT1JUU19QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9STV9WSUQsIEZURElfUk1DQU5WSUVXX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihCQU5EQl9WSUQsIEJBTkRCX1VTT1RMNF9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoQkFOREJfVklELCBCQU5EQl9VU1RMNF9QSUQsIDAsIDB4M2ZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoQkFOREJfVklELCBCQU5EQl9VU085TUwyX1BJRCwgMCwgMHgzZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRVZFUl9FQ09fUFJPX0NEUywgMCwgMHgzZmYpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX0ZUMjMyQk0gW10gPSB7CisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9JUlRSQU5TX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJXzhVMjMyQU1fUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfOFUyMzJBTV9BTFRfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfOFUyMzJBTV9BTFRfQUxUX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1JFTEFJU19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX05GX1JJQ19WSUQsIEZURElfTkZfUklDX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1hGXzYzMl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9YRl82MzRfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfWEZfNTQ3X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1hGXzYzM19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9YRl82MzFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfWEZfNjM1X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1hGXzY0MF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9YRl82NDJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfVk5IQ1BDVVNCX0RfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfRFNTMjBfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfTVRYT1JCXzBfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfTVRYT1JCXzFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfTVRYT1JCXzJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfTVRYT1JCXzNfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfTVRYT1JCXzRfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfTVRYT1JCXzVfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfTVRYT1JCXzZfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfUEVSTEVfVUxUUkFQT1JUX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1BJRUdST1VQX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjEwMV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIxMDJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMTAzX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjEwNF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIyMDFfMV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIyMDFfMl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIyMDJfMV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIyMDJfMl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIyMDNfMV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIyMDNfMl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDFfMV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDFfMl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDFfM19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDFfNF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDJfMV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDJfMl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDJfM19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDJfNF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDNfMV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDNfMl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDNfM19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDNfNF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfMV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfMl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfM19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfNF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfNV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfNl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfN19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfOF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfMV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfMl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfM19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfNF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfNV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfNl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfN19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfOF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfMV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfMl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfM19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfNF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfNV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfNl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfN19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfOF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihJRFRFQ0hfVklELCBJRFRFQ0hfSURUMTIyMVVfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoT0NUX1ZJRCwgT0NUX1VTMTAxX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBQUk9URUdPX1NQRUNJQUxfMSwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBQUk9URUdPX1IyWDAsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgUFJPVEVHT19TUEVDSUFMXzMsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgUFJPVEVHT19TUEVDSUFMXzQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9HVURFQURTX0U4MDhfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfR1VERUFEU19FODA5X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTgwQV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9HVURFQURTX0U4MEJfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfR1VERUFEU19FODBDX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTgwRF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9HVURFQURTX0U4MEVfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfR1VERUFEU19FODBGX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTg4OF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9HVURFQURTX0U4ODlfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfR1VERUFEU19FODhBX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTg4Ql9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9HVURFQURTX0U4OENfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfR1VERUFEU19FODhEX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0dVREVBRFNfRTg4RV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9HVURFQURTX0U4OEZfUElELCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIEZURElfRUxWX1VPMTAwX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKyAJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgTElOWF9TRE1VU0JRU1NfUElELCAweDQwMCwgMHhmZmZmKSB9LAorIAl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBMSU5YX01BU1RFUkRFVkVMMl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisgCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIExJTlhfRlVUVVJFXzBfUElELCAweDQwMCwgMHhmZmZmKSB9LAorIAl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBMSU5YX0ZVVFVSRV8xX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKyAJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgTElOWF9GVVRVUkVfMl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0NDU0lDRFUyMF8wX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfQ0NTSUNEVTQwXzFfUElEKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIElOU0lERV9BQ0NFU1NPLCAweDQwMCwgMHhmZmZmKSB9LAorCXsgVVNCX0RFVklDRV9WRVIoSU5UUkVQSURfVklELCBJTlRSRVBJRF9WQUxVRUNBTl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihJTlRSRVBJRF9WSUQsIElOVFJFUElEX05FT1ZJX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZBTENPTV9WSUQsIEZBTENPTV9UV0lTVF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9TVVVOVE9fU1BPUlRTX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfUk1fVklELCBGVERJX1JNQ0FOVklFV19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihCQU5EQl9WSUQsIEJBTkRCX1VTT1RMNF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihCQU5EQl9WSUQsIEJBTkRCX1VTVEw0X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEJBTkRCX1ZJRCwgQkFOREJfVVNPOU1MMl9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRVZFUl9FQ09fUFJPX0NEUywgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfVVNCX1VJUlQgW10gPSB7CisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1VTQl9VSVJUX1BJRCkgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfSEVfVElSQTEgW10gPSB7CisJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgRlRESV9IRV9USVJBMV9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX0ZUMjIzMkNbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfOFUyMjMyQ19QSUQpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkIFtdID0geworCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9JUlRSQU5TX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfU0lPX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfOFUyMzJBTV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJXzhVMjMyQU1fQUxUX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfOFUyMzJBTV9BTFRfQUxUX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfOFUyMjMyQ19QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1JFTEFJU19QSUQpIH0sCisJeyBVU0JfREVWSUNFKElOVEVSQklPTUVUUklDU19WSUQsIElOVEVSQklPTUVUUklDU19JT0JPQVJEX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSU5URVJCSU9NRVRSSUNTX1ZJRCwgSU5URVJCSU9NRVRSSUNTX01JTklfSU9CT0FSRF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1hGXzYzMl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1hGXzYzNF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1hGXzU0N19QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1hGXzYzM19QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1hGXzYzMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1hGXzYzNV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1hGXzY0MF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1hGXzY0Ml9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0RTUzIwX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9ORl9SSUNfVklELCBGVERJX05GX1JJQ19QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1ZOSENQQ1VTQl9EX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX01UWE9SQl8wX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX01UWE9SQl8xX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX01UWE9SQl8yX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX01UWE9SQl8zX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX01UWE9SQl80X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX01UWE9SQl81X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX01UWE9SQl82X1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX1BFUkxFX1VMVFJBUE9SVF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1BJRUdST1VQX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMTAxX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMTAyX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMTAzX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMTA0X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMjAxXzFfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIyMDFfMl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjIwMl8xX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMjAyXzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIyMDNfMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjIwM18yX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAxXzFfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDFfMl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMV8zX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAxXzRfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDJfMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwMl8yX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAyXzNfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDJfNF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwM18xX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yNDAzXzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI0MDNfM19QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjQwM180X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzFfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfMl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV8zX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzRfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfNV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMV82X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAxXzdfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDFfOF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl8xX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfM19QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl80X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzVfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDJfNl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwMl83X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAyXzhfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM18yX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzNfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfNF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM181X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yODAzXzZfUElEKSB9LAorCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzI4MDNfN19QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjgwM184X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSURURUNIX1ZJRCwgSURURUNIX0lEVDEyMjFVX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoT0NUX1ZJRCwgT0NUX1VTMTAxX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBGVERJX0hFX1RJUkExX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfVVNCX1VJUlRfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgUFJPVEVHT19TUEVDSUFMXzEpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBQUk9URUdPX1IyWDApIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBQUk9URUdPX1NQRUNJQUxfMykgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIFBST1RFR09fU1BFQ0lBTF80KSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9FTFZfVU8xMDBfUElEKSB9LAorIAl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBMSU5YX1NETVVTQlFTU19QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisgCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIExJTlhfTUFTVEVSREVWRUwyX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKyAJeyBVU0JfREVWSUNFX1ZFUihGVERJX1ZJRCwgTElOWF9GVVRVUkVfMF9QSUQsIDB4NDAwLCAweGZmZmYpIH0sCisgCXsgVVNCX0RFVklDRV9WRVIoRlRESV9WSUQsIExJTlhfRlVUVVJFXzFfUElELCAweDQwMCwgMHhmZmZmKSB9LAorIAl7IFVTQl9ERVZJQ0VfVkVSKEZURElfVklELCBMSU5YX0ZVVFVSRV8yX1BJRCwgMHg0MDAsIDB4ZmZmZikgfSwKKyAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0NDU0lDRFUyMF8wX1BJRCkgfSwKKyAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0NDU0lDRFU0MF8xX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIElOU0lERV9BQ0NFU1NPKSB9LAorCXsgVVNCX0RFVklDRShJTlRSRVBJRF9WSUQsIElOVFJFUElEX1ZBTFVFQ0FOX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSU5UUkVQSURfVklELCBJTlRSRVBJRF9ORU9WSV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZBTENPTV9WSUQsIEZBTENPTV9UV0lTVF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1NVVU5UT19TUE9SVFNfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1JNX1ZJRCwgRlRESV9STUNBTlZJRVdfUElEKSB9LAorCXsgVVNCX0RFVklDRShCQU5EQl9WSUQsIEJBTkRCX1VTT1RMNF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEJBTkRCX1ZJRCwgQkFOREJfVVNUTDRfUElEKSB9LAorCXsgVVNCX0RFVklDRShCQU5EQl9WSUQsIEJBTkRCX1VTTzlNTDJfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRVZFUl9FQ09fUFJPX0NEUykgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZV9jb21iaW5lZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBmdGRpX2RyaXZlciA9IHsKKwkubmFtZSA9CQkiZnRkaV9zaW8iLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGVfY29tYmluZWQsCit9OworCitzdGF0aWMgY2hhciAqZnRkaV9jaGlwX25hbWVbXSA9IHsKKwlbU0lPXSA9ICJTSU8iLAkvKiB0aGUgc2VyaWFsIHBhcnQgb2YgRlQ4VTEwMEFYICovCisJW0ZUOFUyMzJBTV0gPSAiRlQ4VTIzMkFNIiwKKwlbRlQyMzJCTV0gPSAiRlQyMzJCTSIsCisJW0ZUMjIzMkNdID0gIkZUMjIzMkMiLAorfTsKKworCisvKiBDb25zdGFudHMgZm9yIHJlYWQgdXJiIGFuZCB3cml0ZSB1cmIgKi8KKyNkZWZpbmUgQlVGU1ogNTEyCisjZGVmaW5lIFBLVFNaIDY0CisKKy8qIHJ4X2ZsYWdzICovCisjZGVmaW5lIFRIUk9UVExFRAkJMHgwMQorI2RlZmluZSBBQ1RVQUxMWV9USFJPVFRMRUQJMHgwMgorCitzdHJ1Y3QgZnRkaV9wcml2YXRlIHsKKwlmdGRpX2NoaXBfdHlwZV90IGNoaXBfdHlwZTsKKwkJCQkvKiB0eXBlIG9mIHRoZSBkZXZpY2UsIGVpdGhlciBTSU8gb3IgRlQ4VTIzMkFNICovCisJaW50IGJhdWRfYmFzZTsJCS8qIGJhdWQgYmFzZSBjbG9jayBmb3IgZGl2aXNvciBzZXR0aW5nICovCisJaW50IGN1c3RvbV9kaXZpc29yOwkvKiBjdXN0b21fZGl2aXNvciBrbHVkZ2UsIHRoaXMgaXMgZm9yIGJhdWRfYmFzZSAoZGlmZmVyZW50IGZyb20gd2hhdCBnb2VzIHRvIHRoZSBjaGlwISkgKi8KKwlfX3UxNiBsYXN0X3NldF9kYXRhX3VyYl92YWx1ZSA7CisJCQkJLyogdGhlIGxhc3QgZGF0YSBzdGF0ZSBzZXQgLSBuZWVkZWQgZm9yIGRvaW5nIGEgYnJlYWsgKi8KKyAgICAgICAgaW50IHdyaXRlX29mZnNldDsgICAgICAgLyogVGhpcyBpcyB0aGUgb2Zmc2V0IGluIHRoZSB1c2IgZGF0YSBibG9jayB0byB3cml0ZSB0aGUgc2VyaWFsIGRhdGEgLSAKKwkJCQkgKiBpdCBpcyBkaWZmZXJlbnQgYmV0d2VlbiBkZXZpY2VzCisJCQkJICovCisJaW50IGZsYWdzOwkJLyogc29tZSBBU1lOQ194eHh4IGZsYWdzIGFyZSBzdXBwb3J0ZWQgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3RfZHRyX3J0czsJLyogc2F2ZWQgbW9kZW0gY29udHJvbCBvdXRwdXRzICovCisgICAgICAgIHdhaXRfcXVldWVfaGVhZF90IGRlbHRhX21zcl93YWl0OyAvKiBVc2VkIGZvciBUSU9DTUlXQUlUICovCisgCWNoYXIgcHJldl9zdGF0dXMsIGRpZmZfc3RhdHVzOyAgICAgICAgLyogVXNlZCBmb3IgVElPQ01JV0FJVCAqLworCV9fdTggcnhfZmxhZ3M7CQkvKiByZWNlaXZlIHN0YXRlIGZsYWdzICh0aHJvdHRsaW5nKSAqLworCXNwaW5sb2NrX3QgcnhfbG9jazsJLyogc3BpbmxvY2sgZm9yIHJlY2VpdmUgc3RhdGUgKi8KKworCV9fdTE2IGludGVyZmFjZTsJLyogRlQyMjMyQyBwb3J0IGludGVyZmFjZSAoMCBmb3IgRlQyMzIvMjQ1KSAqLworCisJaW50IGZvcmNlX2JhdWQ7CQkvKiBpZiBub24temVybywgZm9yY2UgdGhlIGJhdWQgcmF0ZSB0byB0aGlzIHZhbHVlICovCisJaW50IGZvcmNlX3J0c2N0czsJLyogaWYgbm9uLXplcm8sIGZvcmNlIFJUUy1DVFMgdG8gYWx3YXlzIGJlIGVuYWJsZWQgKi8KK307CisKKy8qIFVzZWQgZm9yIFRJT0NNSVdBSVQgKi8KKyNkZWZpbmUgRlRESV9TVEFUVVNfQjBfTUFTSwkoRlRESV9SUzBfQ1RTIHwgRlRESV9SUzBfRFNSIHwgRlRESV9SUzBfUkkgfCBGVERJX1JTMF9STFNEKQorI2RlZmluZSBGVERJX1NUQVRVU19CMV9NQVNLCShGVERJX1JTX0JJKQorLyogRW5kIFRJT0NNSVdBSVQgKi8KKworI2RlZmluZSBGVERJX0lNUExfQVNZTkNfRkxBR1MgPSAoIEFTWU5DX1NQRF9ISSB8IEFTWU5DX1NQRF9WSEkgXAorIEFTWU5DX1NQRF9DVVNUIHwgQVNZTkNfU1BEX1NISSB8IEFTWU5DX1NQRF9XQVJQICkKKworLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgYSBGVERJIHNlcmlhbCBjb252ZXJ0ZXIgKi8KK3N0YXRpYyBpbnQgIGZ0ZGlfU0lPX3N0YXJ0dXAJCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIGZ0ZGlfOFUyMzJBTV9zdGFydHVwCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIGZ0ZGlfRlQyMzJCTV9zdGFydHVwCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIGZ0ZGlfRlQyMjMyQ19zdGFydHVwCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIGZ0ZGlfVVNCX1VJUlRfc3RhcnR1cAkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50ICBmdGRpX0hFX1RJUkExX3N0YXJ0dXAJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQgZnRkaV9zaHV0ZG93bgkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgZnRkaV9vcGVuCQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIGZ0ZGlfY2xvc2UJCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCAgZnRkaV93cml0ZQkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CitzdGF0aWMgaW50ICBmdGRpX3dyaXRlX3Jvb20JCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgIGZ0ZGlfY2hhcnNfaW5fYnVmZmVyCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGZ0ZGlfd3JpdGVfYnVsa19jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBmdGRpX3JlYWRfYnVsa19jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBmdGRpX3Byb2Nlc3NfcmVhZAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgZnRkaV9zZXRfdGVybWlvcwkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICogb2xkKTsKK3N0YXRpYyBpbnQgIGZ0ZGlfdGlvY21nZXQgICAgICAgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCAgZnRkaV90aW9jbXNldAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKK3N0YXRpYyBpbnQgIGZ0ZGlfaW9jdGwJCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgdm9pZCBmdGRpX2JyZWFrX2N0bAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSApOworc3RhdGljIHZvaWQgZnRkaV90aHJvdHRsZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgZnRkaV91bnRocm90dGxlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbnQgZnRkaV8yMzJhbV9iYXVkX2Jhc2VfdG9fZGl2aXNvciAoaW50IGJhdWQsIGludCBiYXNlKTsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbnQgZnRkaV8yMzJhbV9iYXVkX3RvX2Rpdmlzb3IgKGludCBiYXVkKTsKK3N0YXRpYyBfX3UzMiBmdGRpXzIzMmJtX2JhdWRfYmFzZV90b19kaXZpc29yIChpbnQgYmF1ZCwgaW50IGJhc2UpOworc3RhdGljIF9fdTMyIGZ0ZGlfMjMyYm1fYmF1ZF90b19kaXZpc29yIChpbnQgYmF1ZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBmdGRpX1NJT19kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiRlRESSBTSU8iLAorCS5pZF90YWJsZSA9CQlpZF90YWJsZV9zaW8sCisJLm51bV9pbnRlcnJ1cHRfaW4gPQkwLAorCS5udW1fYnVsa19pbiA9CQkxLAorCS5udW1fYnVsa19vdXQgPQkJMSwKKwkubnVtX3BvcnRzID0JCTEsCisJLm9wZW4gPQkJCWZ0ZGlfb3BlbiwKKwkuY2xvc2UgPQkJZnRkaV9jbG9zZSwKKwkudGhyb3R0bGUgPQkJZnRkaV90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQlmdGRpX3VudGhyb3R0bGUsCisJLndyaXRlID0JCWZ0ZGlfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJZnRkaV93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIgPQlmdGRpX2NoYXJzX2luX2J1ZmZlciwKKwkucmVhZF9idWxrX2NhbGxiYWNrID0JZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2ssCisJLndyaXRlX2J1bGtfY2FsbGJhY2sgPQlmdGRpX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJLnRpb2NtZ2V0ID0gICAgICAgICAgICAgZnRkaV90aW9jbWdldCwKKwkudGlvY21zZXQgPSAgICAgICAgICAgICBmdGRpX3Rpb2Ntc2V0LAorCS5pb2N0bCA9CQlmdGRpX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQlmdGRpX3NldF90ZXJtaW9zLAorCS5icmVha19jdGwgPQkJZnRkaV9icmVha19jdGwsCisJLmF0dGFjaCA9CQlmdGRpX1NJT19zdGFydHVwLAorCS5zaHV0ZG93biA9CQlmdGRpX3NodXRkb3duLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGZ0ZGlfOFUyMzJBTV9kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiRlRESSA4VTIzMkFNIENvbXBhdGlibGUiLAorCS5pZF90YWJsZSA9CQlpZF90YWJsZV84VTIzMkFNLAorCS5udW1faW50ZXJydXB0X2luID0JMCwKKwkubnVtX2J1bGtfaW4gPQkJMSwKKwkubnVtX2J1bGtfb3V0ID0JCTEsCisJLm51bV9wb3J0cyA9CQkxLAorCS5vcGVuID0JCQlmdGRpX29wZW4sCisJLmNsb3NlID0JCWZ0ZGlfY2xvc2UsCisJLnRocm90dGxlID0JCWZ0ZGlfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkJZnRkaV91bnRocm90dGxlLAorCS53cml0ZSA9CQlmdGRpX3dyaXRlLAorCS53cml0ZV9yb29tID0JCWZ0ZGlfd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyID0JZnRkaV9jaGFyc19pbl9idWZmZXIsCisJLnJlYWRfYnVsa19jYWxsYmFjayA9CWZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0JZnRkaV93cml0ZV9idWxrX2NhbGxiYWNrLAorCS50aW9jbWdldCA9ICAgICAgICAgICAgIGZ0ZGlfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0gICAgICAgICAgICAgZnRkaV90aW9jbXNldCwKKwkuaW9jdGwgPQkJZnRkaV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJZnRkaV9zZXRfdGVybWlvcywKKwkuYnJlYWtfY3RsID0JCWZ0ZGlfYnJlYWtfY3RsLAorCS5hdHRhY2ggPQkJZnRkaV84VTIzMkFNX3N0YXJ0dXAsCisJLnNodXRkb3duID0JCWZ0ZGlfc2h1dGRvd24sCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZnRkaV9GVDIzMkJNX2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJGVERJIEZUMjMyQk0gQ29tcGF0aWJsZSIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlX0ZUMjMyQk0sCisJLm51bV9pbnRlcnJ1cHRfaW4gPQkwLAorCS5udW1fYnVsa19pbiA9CQkxLAorCS5udW1fYnVsa19vdXQgPQkJMSwKKwkubnVtX3BvcnRzID0JCTEsCisJLm9wZW4gPQkJCWZ0ZGlfb3BlbiwKKwkuY2xvc2UgPQkJZnRkaV9jbG9zZSwKKwkudGhyb3R0bGUgPQkJZnRkaV90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQlmdGRpX3VudGhyb3R0bGUsCisJLndyaXRlID0JCWZ0ZGlfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJZnRkaV93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIgPQlmdGRpX2NoYXJzX2luX2J1ZmZlciwKKwkucmVhZF9idWxrX2NhbGxiYWNrID0JZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2ssCisJLndyaXRlX2J1bGtfY2FsbGJhY2sgPQlmdGRpX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJLnRpb2NtZ2V0ID0gICAgICAgICAgICAgZnRkaV90aW9jbWdldCwKKwkudGlvY21zZXQgPSAgICAgICAgICAgICBmdGRpX3Rpb2Ntc2V0LAorCS5pb2N0bCA9CQlmdGRpX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQlmdGRpX3NldF90ZXJtaW9zLAorCS5icmVha19jdGwgPQkJZnRkaV9icmVha19jdGwsCisJLmF0dGFjaCA9CQlmdGRpX0ZUMjMyQk1fc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkJZnRkaV9zaHV0ZG93biwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBmdGRpX0ZUMjIzMkNfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIkZUREkgRlQyMjMyQyBDb21wYXRpYmxlIiwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGVfRlQyMjMyQywKKwkubnVtX2ludGVycnVwdF9pbiA9CTAsCisJLm51bV9idWxrX2luID0JCTEsCisJLm51bV9idWxrX291dCA9CQkxLAorCS5udW1fcG9ydHMgPQkJMSwKKwkub3BlbiA9CQkJZnRkaV9vcGVuLAorCS5jbG9zZSA9CQlmdGRpX2Nsb3NlLAorCS50aHJvdHRsZSA9CQlmdGRpX3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCWZ0ZGlfdW50aHJvdHRsZSwKKwkud3JpdGUgPQkJZnRkaV93cml0ZSwKKwkud3JpdGVfcm9vbSA9CQlmdGRpX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlciA9CWZ0ZGlfY2hhcnNfaW5fYnVmZmVyLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQlmdGRpX3JlYWRfYnVsa19jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9CWZ0ZGlfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkudGlvY21nZXQgPSAgICAgICAgICAgICBmdGRpX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9ICAgICAgICAgICAgIGZ0ZGlfdGlvY21zZXQsCisJLmlvY3RsID0JCWZ0ZGlfaW9jdGwsCisJLnNldF90ZXJtaW9zID0JCWZ0ZGlfc2V0X3Rlcm1pb3MsCisJLmJyZWFrX2N0bCA9CQlmdGRpX2JyZWFrX2N0bCwKKwkuYXR0YWNoID0JCWZ0ZGlfRlQyMjMyQ19zdGFydHVwLAorCS5zaHV0ZG93biA9CQlmdGRpX3NodXRkb3duLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGZ0ZGlfVVNCX1VJUlRfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIlVTQi1VSVJUIEluZnJhcmVkIFRyYW5jZWl2ZXIiLAorCS5pZF90YWJsZSA9CQlpZF90YWJsZV9VU0JfVUlSVCwKKwkubnVtX2ludGVycnVwdF9pbiA9CTAsCisJLm51bV9idWxrX2luID0JCTEsCisJLm51bV9idWxrX291dCA9CQkxLAorCS5udW1fcG9ydHMgPQkJMSwKKwkub3BlbiA9CQkJZnRkaV9vcGVuLAorCS5jbG9zZSA9CQlmdGRpX2Nsb3NlLAorCS50aHJvdHRsZSA9CQlmdGRpX3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCWZ0ZGlfdW50aHJvdHRsZSwKKwkud3JpdGUgPQkJZnRkaV93cml0ZSwKKwkud3JpdGVfcm9vbSA9CQlmdGRpX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlciA9CWZ0ZGlfY2hhcnNfaW5fYnVmZmVyLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQlmdGRpX3JlYWRfYnVsa19jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9CWZ0ZGlfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkudGlvY21nZXQgPSAgICAgICAgICAgICBmdGRpX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9ICAgICAgICAgICAgIGZ0ZGlfdGlvY21zZXQsCisJLmlvY3RsID0JCWZ0ZGlfaW9jdGwsCisJLnNldF90ZXJtaW9zID0JCWZ0ZGlfc2V0X3Rlcm1pb3MsCisJLmJyZWFrX2N0bCA9CQlmdGRpX2JyZWFrX2N0bCwKKwkuYXR0YWNoID0JCWZ0ZGlfVVNCX1VJUlRfc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkJZnRkaV9zaHV0ZG93biwKK307CisKKy8qIFRoZSBUSVJBMSBpcyBiYXNlZCBvbiBhICBGVDIzMkJNIHdoaWNoIHJlcXVpcmVzIGEgZml4ZWQgYmF1ZCByYXRlIG9mIDEwMDAwMAorICogYW5kIHdoaWNoIHJlcXVpcmVzIFJUUy1DVFMgdG8gYmUgZW5hYmxlZC4gKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBmdGRpX0hFX1RJUkExX2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJIb21lLUVsZWN0cm9uaWNzIFRJUkEtMSBJUiBUcmFuc2NlaXZlciIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlX0hFX1RJUkExLAorCS5udW1faW50ZXJydXB0X2luID0JMCwKKwkubnVtX2J1bGtfaW4gPQkJMSwKKwkubnVtX2J1bGtfb3V0ID0JCTEsCisJLm51bV9wb3J0cyA9CQkxLAorCS5vcGVuID0JCQlmdGRpX29wZW4sCisJLmNsb3NlID0JCWZ0ZGlfY2xvc2UsCisJLnRocm90dGxlID0JCWZ0ZGlfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkJZnRkaV91bnRocm90dGxlLAorCS53cml0ZSA9CQlmdGRpX3dyaXRlLAorCS53cml0ZV9yb29tID0JCWZ0ZGlfd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyID0JZnRkaV9jaGFyc19pbl9idWZmZXIsCisJLnJlYWRfYnVsa19jYWxsYmFjayA9CWZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0JZnRkaV93cml0ZV9idWxrX2NhbGxiYWNrLAorCS50aW9jbWdldCA9ICAgICAgICAgICAgIGZ0ZGlfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0gICAgICAgICAgICAgZnRkaV90aW9jbXNldCwKKwkuaW9jdGwgPQkJZnRkaV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJZnRkaV9zZXRfdGVybWlvcywKKwkuYnJlYWtfY3RsID0JCWZ0ZGlfYnJlYWtfY3RsLAorCS5hdHRhY2ggPQkJZnRkaV9IRV9USVJBMV9zdGFydHVwLAorCS5zaHV0ZG93biA9CQlmdGRpX3NodXRkb3duLAorfTsKKworCisKKyNkZWZpbmUgV0RSX1RJTUVPVVQgNTAwMCAvKiBkZWZhdWx0IHVyYiB0aW1lb3V0ICovCisKKy8qIEhpZ2ggYW5kIGxvdyBhcmUgZm9yIERUUiwgUlRTIGV0YyBldGMgKi8KKyNkZWZpbmUgSElHSCAxCisjZGVmaW5lIExPVyAwCisKKy8qCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFV0bGl0eSBmdW5jdGlvbnMKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbnQgZnRkaV8yMzJhbV9iYXVkX2Jhc2VfdG9fZGl2aXNvcihpbnQgYmF1ZCwgaW50IGJhc2UpCit7CisJdW5zaWduZWQgc2hvcnQgaW50IGRpdmlzb3I7CisJaW50IGRpdmlzb3IzID0gYmFzZSAvIDIgLyBiYXVkOyAvLyBkaXZpc29yIHNoaWZ0ZWQgMyBiaXRzIHRvIHRoZSBsZWZ0CisJaWYgKChkaXZpc29yMyAmIDB4NykgPT0gNykgZGl2aXNvcjMgKys7IC8vIHJvdW5kIHguNy84IHVwIHRvIHgrMQorCWRpdmlzb3IgPSBkaXZpc29yMyA+PiAzOworCWRpdmlzb3IzICY9IDB4NzsKKwlpZiAoZGl2aXNvcjMgPT0gMSkgZGl2aXNvciB8PSAweGMwMDA7IGVsc2UgLy8gMC4xMjUKKwlpZiAoZGl2aXNvcjMgPj0gNCkgZGl2aXNvciB8PSAweDQwMDA7IGVsc2UgLy8gMC41CisJaWYgKGRpdmlzb3IzICE9IDApIGRpdmlzb3IgfD0gMHg4MDAwOyAgICAgIC8vIDAuMjUKKwlpZiAoZGl2aXNvciA9PSAxKSBkaXZpc29yID0gMDsJLyogc3BlY2lhbCBjYXNlIGZvciBtYXhpbXVtIGJhdWQgcmF0ZSAqLworCXJldHVybiBkaXZpc29yOworfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgaW50IGZ0ZGlfMjMyYW1fYmF1ZF90b19kaXZpc29yKGludCBiYXVkKQoreworCSByZXR1cm4oZnRkaV8yMzJhbV9iYXVkX2Jhc2VfdG9fZGl2aXNvcihiYXVkLCA0ODAwMDAwMCkpOworfQorCitzdGF0aWMgX191MzIgZnRkaV8yMzJibV9iYXVkX2Jhc2VfdG9fZGl2aXNvcihpbnQgYmF1ZCwgaW50IGJhc2UpCit7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGl2ZnJhY1s4XSA9IHsgMCwgMywgMiwgNCwgMSwgNSwgNiwgNyB9OworCV9fdTMyIGRpdmlzb3I7CisJaW50IGRpdmlzb3IzID0gYmFzZSAvIDIgLyBiYXVkOyAvLyBkaXZpc29yIHNoaWZ0ZWQgMyBiaXRzIHRvIHRoZSBsZWZ0CisJZGl2aXNvciA9IGRpdmlzb3IzID4+IDM7CisJZGl2aXNvciB8PSAoX191MzIpZGl2ZnJhY1tkaXZpc29yMyAmIDB4N10gPDwgMTQ7CisJLyogRGVhbCB3aXRoIHNwZWNpYWwgY2FzZXMgZm9yIGhpZ2hlc3QgYmF1ZCByYXRlcy4gKi8KKwlpZiAoZGl2aXNvciA9PSAxKSBkaXZpc29yID0gMDsgZWxzZQkvLyAxLjAKKwlpZiAoZGl2aXNvciA9PSAweDQwMDEpIGRpdmlzb3IgPSAxOwkvLyAxLjUKKwlyZXR1cm4gZGl2aXNvcjsKK30KKworc3RhdGljIF9fdTMyIGZ0ZGlfMjMyYm1fYmF1ZF90b19kaXZpc29yKGludCBiYXVkKQoreworCSByZXR1cm4oZnRkaV8yMzJibV9iYXVkX2Jhc2VfdG9fZGl2aXNvcihiYXVkLCA0ODAwMDAwMCkpOworfQorCitzdGF0aWMgaW50IHNldF9ydHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGhpZ2hfb3JfbG93KQoreworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJY2hhciAqYnVmOworCXVuc2lnbmVkIGZ0ZGlfaGlnaF9vcl9sb3c7CisJaW50IHJ2OworCQorCWJ1ZiA9IGttYWxsb2MoMSwgR0ZQX05PSU8pOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwkKKwlpZiAoaGlnaF9vcl9sb3cpIHsKKwkJZnRkaV9oaWdoX29yX2xvdyA9IEZURElfU0lPX1NFVF9SVFNfSElHSDsKKwkJcHJpdi0+bGFzdF9kdHJfcnRzIHw9IFRJT0NNX1JUUzsKKwl9IGVsc2UgeworCQlmdGRpX2hpZ2hfb3JfbG93ID0gRlRESV9TSU9fU0VUX1JUU19MT1c7CisJCXByaXYtPmxhc3RfZHRyX3J0cyAmPSB+VElPQ01fUlRTOworCX0KKwlydiA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKKwkJCSAgICAgICB1c2Jfc25kY3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJICAgICAgIEZURElfU0lPX1NFVF9NT0RFTV9DVFJMX1JFUVVFU1QsIAorCQkJICAgICAgIEZURElfU0lPX1NFVF9NT0RFTV9DVFJMX1JFUVVFU1RfVFlQRSwKKwkJCSAgICAgICBmdGRpX2hpZ2hfb3JfbG93LCBwcml2LT5pbnRlcmZhY2UsIAorCQkJICAgICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpOworCisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcnY7Cit9CisKKworc3RhdGljIGludCBzZXRfZHRyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBoaWdoX29yX2xvdykKK3sKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBmdGRpX2hpZ2hfb3JfbG93OworCWludCBydjsKKwkKKwlidWYgPSBrbWFsbG9jKDEsIEdGUF9OT0lPKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoaGlnaF9vcl9sb3cpIHsKKwkJZnRkaV9oaWdoX29yX2xvdyA9IEZURElfU0lPX1NFVF9EVFJfSElHSDsKKwkJcHJpdi0+bGFzdF9kdHJfcnRzIHw9IFRJT0NNX0RUUjsKKwl9IGVsc2UgeworCQlmdGRpX2hpZ2hfb3JfbG93ID0gRlRESV9TSU9fU0VUX0RUUl9MT1c7CisJCXByaXYtPmxhc3RfZHRyX3J0cyAmPSB+VElPQ01fRFRSOworCX0KKwlydiA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKKwkJCSAgICAgICB1c2Jfc25kY3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJICAgICAgIEZURElfU0lPX1NFVF9NT0RFTV9DVFJMX1JFUVVFU1QsIAorCQkJICAgICAgIEZURElfU0lPX1NFVF9NT0RFTV9DVFJMX1JFUVVFU1RfVFlQRSwKKwkJCSAgICAgICBmdGRpX2hpZ2hfb3JfbG93LCBwcml2LT5pbnRlcmZhY2UsIAorCQkJICAgICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpOworCisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcnY7Cit9CisKKworc3RhdGljIF9fdTMyIGdldF9mdGRpX2Rpdmlzb3Ioc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqIHBvcnQpOworCisKK3N0YXRpYyBpbnQgY2hhbmdlX3NwZWVkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwljaGFyICpidWY7CisgICAgICAgIF9fdTE2IHVyYl92YWx1ZTsKKwlfX3UxNiB1cmJfaW5kZXg7CisJX191MzIgdXJiX2luZGV4X3ZhbHVlOworCWludCBydjsKKworCWJ1ZiA9IGttYWxsb2MoMSwgR0ZQX05PSU8pOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXVyYl9pbmRleF92YWx1ZSA9IGdldF9mdGRpX2Rpdmlzb3IocG9ydCk7CisJdXJiX3ZhbHVlID0gKF9fdTE2KXVyYl9pbmRleF92YWx1ZTsKKwl1cmJfaW5kZXggPSAoX191MTYpKHVyYl9pbmRleF92YWx1ZSA+PiAxNik7CisJaWYgKHByaXYtPmludGVyZmFjZSkgewkvKiBGVDIyMzJDICovCisJCXVyYl9pbmRleCA9IChfX3UxNikoKHVyYl9pbmRleCA8PCA4KSB8IHByaXYtPmludGVyZmFjZSk7CisJfQorCQorCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJICAgIHVzYl9zbmRjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCisJCQkgICAgRlRESV9TSU9fU0VUX0JBVURSQVRFX1JFUVVFU1QsCisJCQkgICAgRlRESV9TSU9fU0VUX0JBVURSQVRFX1JFUVVFU1RfVFlQRSwKKwkJCSAgICB1cmJfdmFsdWUsIHVyYl9pbmRleCwKKwkJCSAgICBidWYsIDAsIDEwMCk7CisKKwlrZnJlZShidWYpOworCXJldHVybiBydjsKK30KKworCitzdGF0aWMgX191MzIgZ2V0X2Z0ZGlfZGl2aXNvcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICogcG9ydCkKK3sgLyogZ2V0X2Z0ZGlfZGl2aXNvciAqLworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJX191MzIgZGl2X3ZhbHVlID0gMDsKKwlpbnQgZGl2X29rYXkgPSAxOworCWludCBiYXVkOworCisJLyoKKwkgKiBUaGUgbG9naWMgaW52b2x2ZWQgaW4gc2V0dGluZyB0aGUgYmF1ZHJhdGUgY2FuIGJlIGNsZWFubHkgc3BsaXQgaW4gMyBzdGVwcy4KKwkgKiBPYnRhaW5pbmcgdGhlIGFjdHVhbCBiYXVkIHJhdGUgaXMgYSBsaXR0bGUgdHJpY2t5IHNpbmNlIHVuaXggdHJhZGl0aW9uYWxseQorCSAqIHNvbWVob3cgaWdub3JlZCB0aGUgcG9zc2liaWxpdHkgdG8gc2V0IG5vbi1zdGFuZGFyZCBiYXVkIHJhdGVzLgorCSAqIDEuIFN0YW5kYXJkIGJhdWQgcmF0ZXMgYXJlIHNldCBpbiB0dHktPnRlcm1pb3MtPmNfY2ZsYWcKKwkgKiAyLiBJZiB0aGVzZSBhcmUgbm90IGVub3VnaCwgeW91IGNhbiBzZXQgYW55IHNwZWVkIHVzaW5nIGFsdF9zcGVlZCBhcyBmb2xsb3dzOgorCSAqICAgIC0gc2V0IHR0eS0+dGVybWlvcy0+Y19jZmxhZyBzcGVlZCB0byBCMzg0MDAKKwkgKiAgICAtIHNldCB5b3VyIHJlYWwgc3BlZWQgaW4gdHR5LT5hbHRfc3BlZWQ7IGl0IGdldHMgaWdub3JlZCB3aGVuCisJICogICAgICBhbHRfc3BlZWQ9PTAsIChvcikKKwkgKiAgICAtIGNhbGwgVElPQ1NTRVJJQUwgaW9jdGwgd2l0aCAoc3RydWN0IHNlcmlhbF9zdHJ1Y3QpIHNldCBhcyBmb2xsb3dzOgorCSAqICAgICAgZmxhZ3MgJiBBU1lOQ19TUERfTUFTSyA9PSBBU1lOQ19TUERfW0hJLCBWSEksIFNISSwgV0FSUF0sIHRoaXMganVzdAorCSAqICAgICAgc2V0cyBhbHRfc3BlZWQgdG8gKEhJOiA1NzYwMCwgVkhJOiAxMTUyMDAsIFNISTogMjMwNDAwLCBXQVJQOiA0NjA4MDApCisJICogKiogU3RlcHMgMSwgMiBhcmUgZG9uZSBjb3VydGVzeSBvZiB0dHlfZ2V0X2JhdWRfcmF0ZQorCSAqIDMuIFlvdSBjYW4gYWxzbyBzZXQgYmF1ZCByYXRlIGJ5IHNldHRpbmcgY3VzdG9tIGRpdmlzb3IgYXMgZm9sbG93cworCSAqICAgIC0gc2V0IHR0eS0+dGVybWlvcy0+Y19jZmxhZyBzcGVlZCB0byBCMzg0MDAKKwkgKiAgICAtIGNhbGwgVElPQ1NTRVJJQUwgaW9jdGwgd2l0aCAoc3RydWN0IHNlcmlhbF9zdHJ1Y3QpIHNldCBhcyBmb2xsb3dzOgorCSAqICAgICAgbyBmbGFncyAmIEFTWU5DX1NQRF9NQVNLID09IEFTWU5DX1NQRF9DVVNUCisJICogICAgICBvIGN1c3RvbV9kaXZpc29yIHNldCB0byBiYXVkX2Jhc2UgLyB5b3VyX25ld19iYXVkcmF0ZQorCSAqICoqIFN0ZXAgMyBpcyBkb25lIGNvdXJ0ZXN5IG9mIGNvZGUgYm9ycm93ZWQgZnJvbSBzZXJpYWwuYyAtIEkgc2hvdWxkIHJlYWxseQorCSAqICAgIHNwZW5kIHNvbWUgdGltZSBhbmQgc2VwYXJhdGUrbW92ZSB0aGlzIGNvbW1vbiBjb2RlIHRvIHNlcmlhbC5jLCBpdCBpcworCSAqICAgIHJlcGxpY2F0ZWQgaW4gbmVhcmx5IGV2ZXJ5IHNlcmlhbCBkcml2ZXIgeW91IHNlZS4KKwkgKi8KKworCS8qIDEuIEdldCB0aGUgYmF1ZCByYXRlIGZyb20gdGhlIHR0eSBzZXR0aW5ncywgdGhpcyBvYnNlcnZlcyBhbHRfc3BlZWQgaGFjayAqLworCisJYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHBvcnQtPnR0eSk7CisJZGJnKCIlcyAtIHR0eV9nZXRfYmF1ZF9yYXRlIHJlcG9ydHMgc3BlZWQgJWQiLCBfX0ZVTkNUSU9OX18sIGJhdWQpOworCisJLyogMi4gT2JzZXJ2ZSBhc3luYy1jb21wYXRpYmxlIGN1c3RvbV9kaXZpc29yIGhhY2ssIHVwZGF0ZSBiYXVkcmF0ZSBpZiBuZWVkZWQgKi8KKworCWlmIChiYXVkID09IDM4NDAwICYmCisJICAgICgocHJpdi0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX0NVU1QpICYmCisJICAgICAocHJpdi0+Y3VzdG9tX2Rpdmlzb3IpKSB7CisJCWJhdWQgPSBwcml2LT5iYXVkX2Jhc2UgLyBwcml2LT5jdXN0b21fZGl2aXNvcjsKKwkJZGJnKCIlcyAtIGN1c3RvbSBkaXZpc29yICVkIHNldHMgYmF1ZCByYXRlIHRvICVkIiwgX19GVU5DVElPTl9fLCBwcml2LT5jdXN0b21fZGl2aXNvciwgYmF1ZCk7CisJfQorCisJLyogMy4gQ29udmVydCBiYXVkcmF0ZSB0byBkZXZpY2Utc3BlY2lmaWMgZGl2aXNvciAqLworCisJaWYgKCFiYXVkKSBiYXVkID0gOTYwMDsJCisJc3dpdGNoKHByaXYtPmNoaXBfdHlwZSkgeworCWNhc2UgU0lPOiAvKiBTSU8gY2hpcCAqLworCQlzd2l0Y2goYmF1ZCkgeworCQljYXNlIDMwMDogZGl2X3ZhbHVlID0gZnRkaV9zaW9fYjMwMDsgYnJlYWs7CisJCWNhc2UgNjAwOiBkaXZfdmFsdWUgPSBmdGRpX3Npb19iNjAwOyBicmVhazsKKwkJY2FzZSAxMjAwOiBkaXZfdmFsdWUgPSBmdGRpX3Npb19iMTIwMDsgYnJlYWs7CisJCWNhc2UgMjQwMDogZGl2X3ZhbHVlID0gZnRkaV9zaW9fYjI0MDA7IGJyZWFrOworCQljYXNlIDQ4MDA6IGRpdl92YWx1ZSA9IGZ0ZGlfc2lvX2I0ODAwOyBicmVhazsKKwkJY2FzZSA5NjAwOiBkaXZfdmFsdWUgPSBmdGRpX3Npb19iOTYwMDsgYnJlYWs7CisJCWNhc2UgMTkyMDA6IGRpdl92YWx1ZSA9IGZ0ZGlfc2lvX2IxOTIwMDsgYnJlYWs7CisJCWNhc2UgMzg0MDA6IGRpdl92YWx1ZSA9IGZ0ZGlfc2lvX2IzODQwMDsgYnJlYWs7CisJCWNhc2UgNTc2MDA6IGRpdl92YWx1ZSA9IGZ0ZGlfc2lvX2I1NzYwMDsgIGJyZWFrOworCQljYXNlIDExNTIwMDogZGl2X3ZhbHVlID0gZnRkaV9zaW9fYjExNTIwMDsgYnJlYWs7CisJCX0gLyogYmF1ZCAqLworCQlpZiAoZGl2X3ZhbHVlID09IDApIHsKKyAgCQkJZGJnKCIlcyAtIEJhdWRyYXRlICglZCkgcmVxdWVzdGVkIGlzIG5vdCBzdXBwb3J0ZWQiLCBfX0ZVTkNUSU9OX18sICBiYXVkKTsKKwkJCWRpdl92YWx1ZSA9IGZ0ZGlfc2lvX2I5NjAwOworCQkJZGl2X29rYXkgPSAwOworCQl9CisJCWJyZWFrOworCWNhc2UgRlQ4VTIzMkFNOiAvKiA4VTIzMkFNIGNoaXAgKi8KKwkJaWYgKGJhdWQgPD0gMzAwMDAwMCkgeworCQkJZGl2X3ZhbHVlID0gZnRkaV8yMzJhbV9iYXVkX3RvX2Rpdmlzb3IoYmF1ZCk7CisJCX0gZWxzZSB7CisJICAgICAgICAgICAgICAgIGRiZygiJXMgLSBCYXVkIHJhdGUgdG9vIGhpZ2ghIiwgX19GVU5DVElPTl9fKTsKKwkJCWRpdl92YWx1ZSA9IGZ0ZGlfMjMyYW1fYmF1ZF90b19kaXZpc29yKDk2MDApOworCQkJZGl2X29rYXkgPSAwOworCQl9CisJCWJyZWFrOworCWNhc2UgRlQyMzJCTTogLyogRlQyMzJCTSBjaGlwICovCisJY2FzZSBGVDIyMzJDOiAvKiBGVDIyMzJDIGNoaXAgKi8KKwkJaWYgKGJhdWQgPD0gMzAwMDAwMCkgeworCQkJZGl2X3ZhbHVlID0gZnRkaV8yMzJibV9iYXVkX3RvX2Rpdmlzb3IoYmF1ZCk7CisJCX0gZWxzZSB7CisJICAgICAgICAgICAgICAgIGRiZygiJXMgLSBCYXVkIHJhdGUgdG9vIGhpZ2ghIiwgX19GVU5DVElPTl9fKTsKKwkJCWRpdl92YWx1ZSA9IGZ0ZGlfMjMyYm1fYmF1ZF90b19kaXZpc29yKDk2MDApOworCQkJZGl2X29rYXkgPSAwOworCQl9CisJCWJyZWFrOworCX0gLyogcHJpdi0+Y2hpcF90eXBlICovCisKKwlpZiAoZGl2X29rYXkpIHsKKwkJZGJnKCIlcyAtIEJhdWQgcmF0ZSBzZXQgdG8gJWQgKGRpdmlzb3IgMHglbFgpIG9uIGNoaXAgJXMiLAorCQkJX19GVU5DVElPTl9fLCBiYXVkLCAodW5zaWduZWQgbG9uZylkaXZfdmFsdWUsCisJCQlmdGRpX2NoaXBfbmFtZVtwcml2LT5jaGlwX3R5cGVdKTsKKwl9CisKKwlyZXR1cm4oZGl2X3ZhbHVlKTsKK30KKworCitzdGF0aWMgaW50IGdldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICogcG9ydCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICogcmV0aW5mbykKK3sKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCBzZXJpYWxfc3RydWN0IHRtcDsKKworCWlmICghcmV0aW5mbykKKwkJcmV0dXJuIC1FRkFVTFQ7CisJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZih0bXApKTsKKwl0bXAuZmxhZ3MgPSBwcml2LT5mbGFnczsKKwl0bXAuYmF1ZF9iYXNlID0gcHJpdi0+YmF1ZF9iYXNlOworCXRtcC5jdXN0b21fZGl2aXNvciA9IHByaXYtPmN1c3RvbV9kaXZpc29yOworCWlmIChjb3B5X3RvX3VzZXIocmV0aW5mbywgJnRtcCwgc2l6ZW9mKCpyZXRpbmZvKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfSAvKiBnZXRfc2VyaWFsX2luZm8gKi8KKworCitzdGF0aWMgaW50IHNldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICogcG9ydCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICogbmV3aW5mbykKK3sgLyogc2V0X3NlcmlhbF9pbmZvICovCisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBuZXdfc2VyaWFsOworCXN0cnVjdCBmdGRpX3ByaXZhdGUgb2xkX3ByaXY7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJm5ld19zZXJpYWwsIG5ld2luZm8sIHNpemVvZihuZXdfc2VyaWFsKSkpCisJCXJldHVybiAtRUZBVUxUOworCW9sZF9wcml2ID0gKiBwcml2OworCisJLyogRG8gZXJyb3IgY2hlY2tpbmcgYW5kIHBlcm1pc3Npb24gY2hlY2tpbmcgKi8KKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgeworCQlpZiAoKChuZXdfc2VyaWFsLmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSAhPQorCQkgICAgIChwcml2LT5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykpKQorCQkJcmV0dXJuIC1FUEVSTTsKKwkJcHJpdi0+ZmxhZ3MgPSAoKHByaXYtPmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSB8CisJCQkgICAgICAgKG5ld19zZXJpYWwuZmxhZ3MgJiBBU1lOQ19VU1JfTUFTSykpOworCQlwcml2LT5jdXN0b21fZGl2aXNvciA9IG5ld19zZXJpYWwuY3VzdG9tX2Rpdmlzb3I7CisJCWdvdG8gY2hlY2tfYW5kX2V4aXQ7CisJfQorCisJaWYgKChuZXdfc2VyaWFsLmJhdWRfYmFzZSAhPSBwcml2LT5iYXVkX2Jhc2UpICYmCisJICAgIChuZXdfc2VyaWFsLmJhdWRfYmFzZSA8IDk2MDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIE1ha2UgdGhlIGNoYW5nZXMgLSB0aGVzZSBhcmUgcHJpdmlsZWdlZCBjaGFuZ2VzISAqLworCisJcHJpdi0+ZmxhZ3MgPSAoKHByaXYtPmZsYWdzICYgfkFTWU5DX0ZMQUdTKSB8CisJICAgICAgICAgICAgICAgKG5ld19zZXJpYWwuZmxhZ3MgJiBBU1lOQ19GTEFHUykpOwkKKwlwcml2LT5jdXN0b21fZGl2aXNvciA9IG5ld19zZXJpYWwuY3VzdG9tX2Rpdmlzb3I7CisKKwlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gKHByaXYtPmZsYWdzICYgQVNZTkNfTE9XX0xBVEVOQ1kpID8gMSA6IDA7CisKK2NoZWNrX2FuZF9leGl0OgorCWlmICgob2xkX3ByaXYuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgIT0KKwkgICAgIChwcml2LT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSkgeworCQlpZiAoKHByaXYtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9ISSkKKwkJCXBvcnQtPnR0eS0+YWx0X3NwZWVkID0gNTc2MDA7CisJCWVsc2UgaWYgKChwcml2LT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfVkhJKQorCQkJcG9ydC0+dHR5LT5hbHRfc3BlZWQgPSAxMTUyMDA7CisJCWVsc2UgaWYgKChwcml2LT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfU0hJKQorCQkJcG9ydC0+dHR5LT5hbHRfc3BlZWQgPSAyMzA0MDA7CisJCWVsc2UgaWYgKChwcml2LT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfV0FSUCkKKwkJCXBvcnQtPnR0eS0+YWx0X3NwZWVkID0gNDYwODAwOworCQllbHNlCisJCQlwb3J0LT50dHktPmFsdF9zcGVlZCA9IDA7CisJfQorCWlmICgoKG9sZF9wcml2LmZsYWdzICYgQVNZTkNfU1BEX01BU0spICE9CisJICAgICAocHJpdi0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykpIHx8CisJICAgICgoKHByaXYtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9DVVNUKSAmJgorCSAgICAgKG9sZF9wcml2LmN1c3RvbV9kaXZpc29yICE9IHByaXYtPmN1c3RvbV9kaXZpc29yKSkpIHsKKwkJY2hhbmdlX3NwZWVkKHBvcnQpOworCX0KKwkKKwlyZXR1cm4gKDApOworCit9IC8qIHNldF9zZXJpYWxfaW5mbyAqLworCisKKy8qCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN5c2ZzIEF0dHJpYnV0ZQorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworc3RhdGljIHNzaXplX3Qgc2hvd19sYXRlbmN5X3RpbWVyKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0b191c2Jfc2VyaWFsX3BvcnQoZGV2KTsKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXVuc2lnbmVkIHNob3J0IGxhdGVuY3kgPSAwOworCWludCBydiA9IDA7CisJCisJdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKKwkKKwlkYmcoIiVzIixfX0ZVTkNUSU9OX18pOworCQorCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkgICAgIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCSAgICAgRlRESV9TSU9fR0VUX0xBVEVOQ1lfVElNRVJfUkVRVUVTVCwKKwkJCSAgICAgRlRESV9TSU9fR0VUX0xBVEVOQ1lfVElNRVJfUkVRVUVTVF9UWVBFLAorCQkJICAgICAwLCBwcml2LT5pbnRlcmZhY2UsIAorCQkJICAgICAoY2hhciopICZsYXRlbmN5LCAxLCBXRFJfVElNRU9VVCk7CisJCisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byByZWFkIGxhdGVuY3kgdGltZXI6ICVpIiwgcnYpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIGxhdGVuY3kpOworfQorCisvKiBXcml0ZSBhIG5ldyB2YWx1ZSBvZiB0aGUgbGF0ZW5jeSB0aW1lciwgaW4gdW5pdHMgb2YgbWlsbGlzZWNvbmRzLiAqLworc3RhdGljIHNzaXplX3Qgc3RvcmVfbGF0ZW5jeV90aW1lcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnZhbGJ1ZiwKKwkJCQkgICBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHRvX3VzYl9zZXJpYWxfcG9ydChkZXYpOworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJY2hhciBidWZbMV07CisJaW50IHYgPSBzaW1wbGVfc3RydG91bCh2YWxidWYsIE5VTEwsIDEwKTsKKwlpbnQgcnYgPSAwOworCQorCXVkZXYgPSB0b191c2JfZGV2aWNlKGRldik7CisJCisJZGJnKCIlczogc2V0dGluZyBsYXRlbmN5IHRpbWVyID0gJWkiLCBfX0ZVTkNUSU9OX18sIHYpOworCQorCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkgICAgIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCSAgICAgRlRESV9TSU9fU0VUX0xBVEVOQ1lfVElNRVJfUkVRVUVTVCwKKwkJCSAgICAgRlRESV9TSU9fU0VUX0xBVEVOQ1lfVElNRVJfUkVRVUVTVF9UWVBFLAorCQkJICAgICB2LCBwcml2LT5pbnRlcmZhY2UsIAorCQkJICAgICBidWYsIDAsIFdEUl9USU1FT1VUKTsKKwkKKwlpZiAocnYgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIHdyaXRlIGxhdGVuY3kgdGltZXI6ICVpIiwgcnYpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJCisJcmV0dXJuIGNvdW50OworfQorCisvKiBXcml0ZSBhbiBldmVudCBjaGFyYWN0ZXIgZGlyZWN0bHkgdG8gdGhlIEZUREkgcmVnaXN0ZXIuICBUaGUgQVNDSUkKKyAgIHZhbHVlIGlzIGluIHRoZSBsb3cgOCBiaXRzLCB3aXRoIHRoZSBlbmFibGUgYml0IGluIHRoZSA5dGggYml0LiAqLworc3RhdGljIHNzaXplX3Qgc3RvcmVfZXZlbnRfY2hhcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnZhbGJ1ZiwKKwkJCQlzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHRvX3VzYl9zZXJpYWxfcG9ydChkZXYpOworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJY2hhciBidWZbMV07CisJaW50IHYgPSBzaW1wbGVfc3RydG91bCh2YWxidWYsIE5VTEwsIDEwKTsKKwlpbnQgcnYgPSAwOworCQorCXVkZXYgPSB0b191c2JfZGV2aWNlKGRldik7CisJCisJZGJnKCIlczogc2V0dGluZyBldmVudCBjaGFyID0gJWkiLCBfX0ZVTkNUSU9OX18sIHYpOworCQorCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkgICAgIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCSAgICAgRlRESV9TSU9fU0VUX0VWRU5UX0NIQVJfUkVRVUVTVCwKKwkJCSAgICAgRlRESV9TSU9fU0VUX0VWRU5UX0NIQVJfUkVRVUVTVF9UWVBFLAorCQkJICAgICB2LCBwcml2LT5pbnRlcmZhY2UsIAorCQkJICAgICBidWYsIDAsIFdEUl9USU1FT1VUKTsKKwkKKwlpZiAocnYgPCAwKSB7CisJCWRiZygiVW5hYmxlIHRvIHdyaXRlIGV2ZW50IGNoYXJhY3RlcjogJWkiLCBydik7CisJCXJldHVybiAtRUlPOworCX0KKwkKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihsYXRlbmN5X3RpbWVyLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19sYXRlbmN5X3RpbWVyLCBzdG9yZV9sYXRlbmN5X3RpbWVyKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihldmVudF9jaGFyLCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9ldmVudF9jaGFyKTsKKworc3RhdGljIHZvaWQgY3JlYXRlX3N5c2ZzX2F0dHJzKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CQorCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisKKwlkYmcoIiVzIixfX0ZVTkNUSU9OX18pOworCQorCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdKTsKKwl1ZGV2ID0gc2VyaWFsLT5kZXY7CisJCisJLyogWFhYIEkndmUgbm8gaWRlYSBpZiB0aGUgb3JpZ2luYWwgU0lPIHN1cHBvcnRzIHRoZSBldmVudF9jaGFyCisJICogc3lzZnMgcGFyYW1ldGVyLCBzbyBJJ20gcGxheWluZyBpdCBzYWZlLiAgKi8KKwlpZiAocHJpdi0+Y2hpcF90eXBlICE9IFNJTykgeworCQlkYmcoInN5c2ZzIGF0dHJpYnV0ZXMgZm9yICVzIiwgZnRkaV9jaGlwX25hbWVbcHJpdi0+Y2hpcF90eXBlXSk7CisJCWRldmljZV9jcmVhdGVfZmlsZSgmdWRldi0+ZGV2LCAmZGV2X2F0dHJfZXZlbnRfY2hhcik7CisJCWlmIChwcml2LT5jaGlwX3R5cGUgPT0gRlQyMzJCTSB8fCBwcml2LT5jaGlwX3R5cGUgPT0gRlQyMjMyQykgeworCQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZ1ZGV2LT5kZXYsICZkZXZfYXR0cl9sYXRlbmN5X3RpbWVyKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX3N5c2ZzX2F0dHJzKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKworCWRiZygiJXMiLF9fRlVOQ1RJT05fXyk7CQorCisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0pOworCXVkZXYgPSBzZXJpYWwtPmRldjsKKwkKKwkvKiBYWFggc2VlIGNyZWF0ZV9zeXNmc19hdHRycyAqLworCWlmIChwcml2LT5jaGlwX3R5cGUgIT0gU0lPKSB7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmdWRldi0+ZGV2LCAmZGV2X2F0dHJfZXZlbnRfY2hhcik7CisJCWlmIChwcml2LT5jaGlwX3R5cGUgPT0gRlQyMzJCTSB8fCBwcml2LT5jaGlwX3R5cGUgPT0gRlQyMjMyQykgeworCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZ1ZGV2LT5kZXYsICZkZXZfYXR0cl9sYXRlbmN5X3RpbWVyKTsKKwkJfQorCX0KKwkKK30KKworLyoKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRlRESSBkcml2ZXIgc3BlY2lmaWMgZnVuY3Rpb25zCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKiBDb21tb24gc3RhcnR1cCBzdWJyb3V0aW5lICovCisvKiBDYWxsZWQgZnJvbSBmdGRpX1NJT19zdGFydHVwLCBldGMuICovCitzdGF0aWMgaW50IGZ0ZGlfY29tbW9uX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHNlcmlhbC0+cG9ydFswXTsKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2OworCQorCWRiZygiJXMiLF9fRlVOQ1RJT05fXyk7CisKKwlwcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGZ0ZGlfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICghcHJpdil7CisJCWVycigiJXMtIGttYWxsb2MoJVpkKSBmYWlsZWQuIiwgX19GVU5DVElPTl9fLCBzaXplb2Yoc3RydWN0IGZ0ZGlfcHJpdmF0ZSkpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KHByaXYsIDAsIHNpemVvZigqcHJpdikpOworCisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnJ4X2xvY2spOworICAgICAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisJLyogVGhpcyB3aWxsIHB1c2ggdGhlIGNoYXJhY3RlcnMgdGhyb3VnaCBpbW1lZGlhdGVseSByYXRoZXIKKwkgICB0aGFuIHF1ZXVlIGEgdGFzayB0byBkZWxpdmVyIHRoZW0gKi8KKwlwcml2LT5mbGFncyA9IEFTWU5DX0xPV19MQVRFTkNZOworCisJLyogSW5jcmVhc2UgdGhlIHNpemUgb2YgcmVhZCBidWZmZXJzICovCisJaWYgKHBvcnQtPmJ1bGtfaW5fYnVmZmVyKSB7CisJCWtmcmVlIChwb3J0LT5idWxrX2luX2J1ZmZlcik7CisJfQorCXBvcnQtPmJ1bGtfaW5fYnVmZmVyID0ga21hbGxvYyAoQlVGU1osIEdGUF9LRVJORUwpOworCWlmICghcG9ydC0+YnVsa19pbl9idWZmZXIpIHsKKwkJa2ZyZWUgKHByaXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaWYgKHBvcnQtPnJlYWRfdXJiKSB7CisJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBwb3J0LT5idWxrX2luX2J1ZmZlcjsKKwkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBCVUZTWjsKKwl9CisKKwkvKiBGcmVlIHBvcnQncyBleGlzdGluZyB3cml0ZSB1cmIgYW5kIHRyYW5zZmVyIGJ1ZmZlci4gKi8KKwlpZiAocG9ydC0+d3JpdGVfdXJiKSB7CisJCXVzYl9mcmVlX3VyYiAocG9ydC0+d3JpdGVfdXJiKTsKKwkJcG9ydC0+d3JpdGVfdXJiID0gTlVMTDsKKwl9CisJaWYgKHBvcnQtPmJ1bGtfb3V0X2J1ZmZlcikgeworCQlrZnJlZSAocG9ydC0+YnVsa19vdXRfYnVmZmVyKTsKKwkJcG9ydC0+YnVsa19vdXRfYnVmZmVyID0gTlVMTDsKKwl9CisKKwl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdLCBwcml2KTsKKwkKKwlyZXR1cm4gKDApOworfQorCisKKy8qIFN0YXJ0dXAgZm9yIHRoZSBTSU8gY2hpcCAqLworLyogQ2FsbGVkIGZyb20gdXNic2VyaWFsOnNlcmlhbF9wcm9iZSAqLworc3RhdGljIGludCBmdGRpX1NJT19zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXY7CisJaW50IGVycjsKKworCWRiZygiJXMiLF9fRlVOQ1RJT05fXyk7CisKKwllcnIgPSBmdGRpX2NvbW1vbl9zdGFydHVwKHNlcmlhbCk7CisJaWYgKGVycil7CisJCXJldHVybiAoZXJyKTsKKwl9CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSk7CisJcHJpdi0+Y2hpcF90eXBlID0gU0lPOworCXByaXYtPmJhdWRfYmFzZSA9IDEyMDAwMDAwIC8gMTY7CisJcHJpdi0+d3JpdGVfb2Zmc2V0ID0gMTsKKwkKKwlyZXR1cm4gKDApOworfQorCisvKiBTdGFydHVwIGZvciB0aGUgOFUyMzJBTSBjaGlwICovCisvKiBDYWxsZWQgZnJvbSB1c2JzZXJpYWw6c2VyaWFsX3Byb2JlICovCitzdGF0aWMgaW50IGZ0ZGlfOFUyMzJBTV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreyAvKiBmdGRpXzhVMjMyQU1fc3RhcnR1cCAqLworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXY7CisJaW50IGVycjsKKworCWRiZygiJXMiLF9fRlVOQ1RJT05fXyk7CisJZXJyID0gZnRkaV9jb21tb25fc3RhcnR1cChzZXJpYWwpOworCWlmIChlcnIpeworCQlyZXR1cm4gKGVycik7CisJfQorCisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0pOworCXByaXYtPmNoaXBfdHlwZSA9IEZUOFUyMzJBTTsKKwlwcml2LT5iYXVkX2Jhc2UgPSA0ODAwMDAwMCAvIDI7IC8qIFdvdWxkIGJlIC8gMTYsIGJ1dCBGVERJIHN1cHBvcnRzIDAuMTI1LCAwLjI1IGFuZCAwLjUgZGl2aXNvciBmcmFjdGlvbnMhICovCisJCisJY3JlYXRlX3N5c2ZzX2F0dHJzKHNlcmlhbCk7CisJCisJcmV0dXJuICgwKTsKK30gLyogZnRkaV84VTIzMkFNX3N0YXJ0dXAgKi8KKworLyogU3RhcnR1cCBmb3IgdGhlIEZUMjMyQk0gY2hpcCAqLworLyogQ2FsbGVkIGZyb20gdXNic2VyaWFsOnNlcmlhbF9wcm9iZSAqLworc3RhdGljIGludCBmdGRpX0ZUMjMyQk1fc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sgLyogZnRkaV9GVDIzMkJNX3N0YXJ0dXAgKi8KKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2OworCWludCBlcnI7CisKKwlkYmcoIiVzIixfX0ZVTkNUSU9OX18pOworCWVyciA9IGZ0ZGlfY29tbW9uX3N0YXJ0dXAoc2VyaWFsKTsKKwlpZiAoZXJyKXsKKwkJcmV0dXJuIChlcnIpOworCX0KKworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdKTsKKwlwcml2LT5jaGlwX3R5cGUgPSBGVDIzMkJNOworCXByaXYtPmJhdWRfYmFzZSA9IDQ4MDAwMDAwIC8gMjsgLyogV291bGQgYmUgLyAxNiwgYnV0IEZUMjMyQk0gc3VwcG9ydHMgbXVsdGlwbGUgb2YgMC4xMjUgZGl2aXNvciBmcmFjdGlvbnMhICovCisJCisJY3JlYXRlX3N5c2ZzX2F0dHJzKHNlcmlhbCk7CisKKwlyZXR1cm4gKDApOworfSAvKiBmdGRpX0ZUMjMyQk1fc3RhcnR1cCAqLworCisvKiBTdGFydHVwIGZvciB0aGUgRlQyMjMyQyBjaGlwICovCisvKiBDYWxsZWQgZnJvbSB1c2JzZXJpYWw6c2VyaWFsX3Byb2JlICovCitzdGF0aWMgaW50IGZ0ZGlfRlQyMjMyQ19zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreyAvKiBmdGRpX0ZUMjIzMkNfc3RhcnR1cCAqLworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXY7CisJaW50IGVycjsKKwlpbnQgaW50ZXI7CisKKwlkYmcoIiVzIixfX0ZVTkNUSU9OX18pOworCWVyciA9IGZ0ZGlfY29tbW9uX3N0YXJ0dXAoc2VyaWFsKTsKKwlpZiAoZXJyKXsKKwkJcmV0dXJuIChlcnIpOworCX0KKworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdKTsKKwlwcml2LT5jaGlwX3R5cGUgPSBGVDIyMzJDOworCWludGVyID0gc2VyaWFsLT5pbnRlcmZhY2UtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKworCWlmIChpbnRlcikgeworCQlwcml2LT5pbnRlcmZhY2UgPSBJTlRFUkZBQ0VfQjsKKwl9CisJZWxzZSAgeworCQlwcml2LT5pbnRlcmZhY2UgPSBJTlRFUkZBQ0VfQTsKKwl9CisJcHJpdi0+YmF1ZF9iYXNlID0gNDgwMDAwMDAgLyAyOyAvKiBXb3VsZCBiZSAvIDE2LCBidXQgRlQyMjMyQyBzdXBwb3J0cyBtdWx0aXBsZSBvZiAwLjEyNSBkaXZpc29yIGZyYWN0aW9ucyEgKi8KKwkKKwljcmVhdGVfc3lzZnNfYXR0cnMoc2VyaWFsKTsKKworCXJldHVybiAoMCk7Cit9IC8qIGZ0ZGlfRlQyMjMyQ19zdGFydHVwICovCisKKy8qIFN0YXJ0dXAgZm9yIHRoZSBVU0ItVUlSVCBkZXZpY2UsIHdoaWNoIHJlcXVpcmVzIGhhcmR3aXJlZCBiYXVkcmF0ZSAoMzg0MDAgZ2V0cyBtYXBwZWQgdG8gMzEyNTAwKSAqLworLyogQ2FsbGVkIGZyb20gdXNic2VyaWFsOnNlcmlhbF9wcm9iZSAqLworc3RhdGljIGludCBmdGRpX1VTQl9VSVJUX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7IC8qIGZ0ZGlfVVNCX1VJUlRfc3RhcnR1cCAqLworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXY7CisJaW50IGVycjsKKworCWRiZygiJXMiLF9fRlVOQ1RJT05fXyk7CisJZXJyID0gZnRkaV84VTIzMkFNX3N0YXJ0dXAoc2VyaWFsKTsKKwlpZiAoZXJyKXsKKwkJcmV0dXJuIChlcnIpOworCX0KKworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdKTsKKwlwcml2LT5mbGFncyB8PSBBU1lOQ19TUERfQ1VTVDsKKwlwcml2LT5jdXN0b21fZGl2aXNvciA9IDc3OworCXByaXYtPmZvcmNlX2JhdWQgPSBCMzg0MDA7CisJCisJcmV0dXJuICgwKTsKK30gLyogZnRkaV9VU0JfVUlSVF9zdGFydHVwICovCisKKy8qIFN0YXJ0dXAgZm9yIHRoZSBIRS1USVJBMSBkZXZpY2UsIHdoaWNoIHJlcXVpcmVzIGhhcmR3aXJlZAorICogYmF1ZHJhdGUgKDM4NDAwIGdldHMgbWFwcGVkIHRvIDEwMDAwMCkgKi8KK3N0YXRpYyBpbnQgZnRkaV9IRV9USVJBMV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreyAvKiBmdGRpX0hFX1RJUkExX3N0YXJ0dXAgKi8KKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2OworCWludCBlcnI7CisKKwlkYmcoIiVzIixfX0ZVTkNUSU9OX18pOworCWVyciA9IGZ0ZGlfRlQyMzJCTV9zdGFydHVwKHNlcmlhbCk7CisJaWYgKGVycil7CisJCXJldHVybiAoZXJyKTsKKwl9CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSk7CisJcHJpdi0+ZmxhZ3MgfD0gQVNZTkNfU1BEX0NVU1Q7CisJcHJpdi0+Y3VzdG9tX2Rpdmlzb3IgPSAyNDA7CisJcHJpdi0+Zm9yY2VfYmF1ZCA9IEIzODQwMDsKKwlwcml2LT5mb3JjZV9ydHNjdHMgPSAxOworCQorCXJldHVybiAoMCk7Cit9IC8qIGZ0ZGlfSEVfVElSQTFfc3RhcnR1cCAqLworCisKKy8qIGZ0ZGlfc2h1dGRvd24gaXMgY2FsbGVkIGZyb20gdXNic2VyaWFsOnVzYl9zZXJpYWxfZGlzY29ubmVjdCAKKyAqICAgaXQgaXMgY2FsbGVkIHdoZW4gdGhlIHVzYiBkZXZpY2UgaXMgZGlzY29ubmVjdGVkCisgKgorICogICB1c2JzZXJpYWw6dXNiX3NlcmlhbF9kaXNjb25uZWN0CisgKiAgICAgIGNhbGxzIF9fc2VyaWFsX2Nsb3NlIGZvciBlYWNoIG9wZW4gb2YgdGhlIHBvcnQKKyAqICAgICAgc2h1dGRvd24gaXMgY2FsbGVkIHRoZW4gKGllIGZ0ZGlfc2h1dGRvd24pCisgKi8KKworCitzdGF0aWMgdm9pZCBmdGRpX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreyAvKiBmdGRpX3NodXRkb3duICovCisJCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHNlcmlhbC0+cG9ydFswXTsKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlyZW1vdmVfc3lzZnNfYXR0cnMoc2VyaWFsKTsKKwkKKwkvKiBhbGwgb3BlbiBwb3J0cyBhcmUgY2xvc2VkIGF0IHRoaXMgcG9pbnQgCisgICAgICAgICAqICAgIChieSB1c2JzZXJpYWwuYzpfX3NlcmlhbF9jbG9zZSwgd2hpY2ggY2FsbHMgZnRkaV9jbG9zZSkgIAorCSAqLworCisJaWYgKHByaXYpIHsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIE5VTEwpOworCQlrZnJlZShwcml2KTsKKwl9Cit9IC8qIGZ0ZGlfc2h1dGRvd24gKi8KKworCitzdGF0aWMgaW50ICBmdGRpX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreyAvKiBmdGRpX29wZW4gKi8KKwlzdHJ1Y3QgdGVybWlvcyB0bXBfdGVybWlvczsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQorCWludCByZXN1bHQgPSAwOworCWNoYXIgYnVmWzFdOyAvKiBOZWVkZWQgZm9yIHRoZSB1c2JfY29udHJvbF9tc2cgSSB0aGluayAqLworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKworCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAocHJpdi0+ZmxhZ3MgJiBBU1lOQ19MT1dfTEFURU5DWSkgPyAxIDogMDsKKworCS8qIE5vIGVycm9yIGNoZWNraW5nIGZvciB0aGlzICh3aWxsIGdldCBlcnJvcnMgbGF0ZXIgYW55d2F5KSAqLworCS8qIFNlZSBmdGRpX3Npby5oIGZvciBkZXNjcmlwdGlvbiBvZiB3aGF0IGlzIHJlc2V0ICovCisJdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQlGVERJX1NJT19SRVNFVF9SRVFVRVNULCBGVERJX1NJT19SRVNFVF9SRVFVRVNUX1RZUEUsIAorCQkJRlRESV9TSU9fUkVTRVRfU0lPLCAKKwkJCXByaXYtPmludGVyZmFjZSwgYnVmLCAwLCBXRFJfVElNRU9VVCk7CisKKwkvKiBUZXJtaW9zIGRlZmF1bHRzIGFyZSBzZXQgYnkgdXNiX3NlcmlhbF9pbml0LiBXZSBkb24ndCBjaGFuZ2UKKwkgICBwb3J0LT50dHktPnRlcm1pb3MgLSB0aGlzIHdvdWxkIGxvb3NlIHNwZWVkIHNldHRpbmdzLCBldGMuCisJICAgVGhpcyBpcyBzYW1lIGJlaGF2aW91ciBhcyBzZXJpYWwuYy9yc19vcGVuKCkgLSBLdWJhICovCisKKwkvKiBmdGRpX3NldF90ZXJtaW9zICB3aWxsIHNlbmQgdXNiIGNvbnRyb2wgbWVzc2FnZXMgKi8KKwlmdGRpX3NldF90ZXJtaW9zKHBvcnQsICZ0bXBfdGVybWlvcyk7CisKKwkvKiBGSVhNRTogRmxvdyBjb250cm9sIG1pZ2h0IGJlIGVuYWJsZWQsIHNvIGl0IHNob3VsZCBiZSBjaGVja2VkIC0KKwkgICB3ZSBoYXZlIG5vIGNvbnRyb2wgb2YgZGVmYXVsdHMhICovCisJLyogVHVybiBvbiBSVFMgYW5kIERUUiBzaW5jZSB3ZSBhcmUgbm90IGZsb3cgY29udHJvbGxpbmcgYnkgZGVmYXVsdCAqLworCWlmIChzZXRfZHRyKHBvcnQsIEhJR0gpIDwgMCkgeworCQllcnIoIiVzIEVycm9yIGZyb20gRFRSIEhJR0ggdXJiIiwgX19GVU5DVElPTl9fKTsKKwl9CisJaWYgKHNldF9ydHMocG9ydCwgSElHSCkgPCAwKXsKKwkJZXJyKCIlcyBFcnJvciBmcm9tIFJUUyBISUdIIHVyYiIsIF9fRlVOQ1RJT05fXyk7CisJfQorCisJLyogTm90IHRocm90dGxlZCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7CisJcHJpdi0+cnhfZmxhZ3MgJj0gfihUSFJPVFRMRUQgfCBBQ1RVQUxMWV9USFJPVFRMRUQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKKworCS8qIFN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCisJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIGRldiwKKwkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKGRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkgICAgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJICAgICAgZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVzdWx0KQorCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCisKKwlyZXR1cm4gcmVzdWx0OworfSAvKiBmdGRpX29wZW4gKi8KKworCisKKy8qIAorICogdXNic2VyaWFsOl9fc2VyaWFsX2Nsb3NlICBvbmx5IGNhbGxzIGZ0ZGlfY2xvc2UgaWYgdGhlIHBvaW50IGlzIG9wZW4KKyAqCisgKiAgIFRoaXMgb25seSBnZXRzIGNhbGxlZCB3aGVuIGl0IGlzIHRoZSBsYXN0IGNsb3NlCisgKiAgIAorICogICAKKyAqLworCitzdGF0aWMgdm9pZCBmdGRpX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sgLyogZnRkaV9jbG9zZSAqLworCXVuc2lnbmVkIGludCBjX2NmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJY2hhciBidWZbMV07CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChjX2NmbGFnICYgSFVQQ0wpeworCQkvKiBEaXNhYmxlIGZsb3cgY29udHJvbCAqLworCQlpZiAodXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJCQkgICAgdXNiX3NuZGN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULAorCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1RfVFlQRSwKKwkJCQkgICAgMCwgcHJpdi0+aW50ZXJmYWNlLCBidWYsIDAsCisJCQkJICAgIFdEUl9USU1FT1VUKSA8IDApIHsKKwkJCWVycigiZXJyb3IgZnJvbSBmbG93Y29udHJvbCB1cmIiKTsKKwkJfQkgICAgCisKKwkJLyogZHJvcCBEVFIgKi8KKwkJaWYgKHNldF9kdHIocG9ydCwgTE9XKSA8IDApeworCQkJZXJyKCJFcnJvciBmcm9tIERUUiBMT1cgdXJiIik7CisJCX0KKwkJLyogZHJvcCBSVFMgKi8KKwkJaWYgKHNldF9ydHMocG9ydCwgTE9XKSA8IDApIHsKKwkJCWVycigiRXJyb3IgZnJvbSBSVFMgTE9XIHVyYiIpOworCQl9CisJfSAvKiBOb3RlIGNoYW5nZSBubyBsaW5lIGlmIGh1cGNsIGlzIG9mZiAqLworCQorCS8qIHNodXRkb3duIG91ciBidWxrIHJlYWQgKi8KKwlpZiAocG9ydC0+cmVhZF91cmIpCisJCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7Cit9IC8qIGZ0ZGlfY2xvc2UgKi8KKworCisgIAorLyogVGhlIFNJTyByZXF1aXJlcyB0aGUgZmlyc3QgYnl0ZSB0byBoYXZlOgorICogIEIwIDEKKyAqICBCMSAwCisgKiAgQjIuLjcgbGVuZ3RoIG9mIG1lc3NhZ2UgZXhjbHVkaW5nIGJ5dGUgMAorICoKKyAqIFRoZSBuZXcgZGV2aWNlcyBkbyBub3QgcmVxdWlyZSB0aGlzIGJ5dGUKKyAqLworc3RhdGljIGludCBmdGRpX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7IC8qIGZ0ZGlfd3JpdGUgKi8KKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB1cmIgKnVyYjsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJaW50IGRhdGFfb2Zmc2V0IDsgICAgICAgLyogd2lsbCBiZSAxIGZvciB0aGUgU0lPIGFuZCAwIG90aGVyd2lzZSAqLworCWludCBzdGF0dXM7CisJaW50IHRyYW5zZmVyX3NpemU7CisKKwlkYmcoIiVzIHBvcnQgJWQsICVkIGJ5dGVzIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIGNvdW50KTsKKworCWlmIChjb3VudCA9PSAwKSB7CisJCWRiZygid3JpdGUgcmVxdWVzdCBvZiAwIGJ5dGVzIik7CisJCXJldHVybiAwOworCX0KKwkKKwlkYXRhX29mZnNldCA9IHByaXYtPndyaXRlX29mZnNldDsKKyAgICAgICAgZGJnKCJkYXRhX29mZnNldCBzZXQgdG8gJWQiLGRhdGFfb2Zmc2V0KTsKKworCS8qIERldGVybWluZSB0b3RhbCB0cmFuc2ZlciBzaXplICovCisJdHJhbnNmZXJfc2l6ZSA9IGNvdW50OworCWlmIChkYXRhX29mZnNldCA+IDApIHsKKwkJLyogT3JpZ2luYWwgc2lvIG5lZWRzIGNvbnRyb2wgYnl0ZXMgdG9vLi4uICovCisJCXRyYW5zZmVyX3NpemUgKz0gKGRhdGFfb2Zmc2V0ICoKKwkJCQkoKGNvdW50ICsgKFBLVFNaIC0gMSAtIGRhdGFfb2Zmc2V0KSkgLworCQkJCSAoUEtUU1ogLSBkYXRhX29mZnNldCkpKTsKKwl9CisKKwlidWZmZXIgPSBrbWFsbG9jICh0cmFuc2Zlcl9zaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWJ1ZmZlcikgeworCQllcnIoIiVzIHJhbiBvdXQgb2Yga2VybmVsIG1lbW9yeSBmb3IgdXJiIC4uLiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CisJaWYgKCF1cmIpIHsKKwkJZXJyKCIlcyAtIG5vIG1vcmUgZnJlZSB1cmJzIiwgX19GVU5DVElPTl9fKTsKKwkJa2ZyZWUgKGJ1ZmZlcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIENvcHkgZGF0YSAqLworCWlmIChkYXRhX29mZnNldCA+IDApIHsKKwkJLyogT3JpZ2luYWwgc2lvIHJlcXVpcmVzIGNvbnRyb2wgYnl0ZSBhdCBzdGFydCBvZiBlYWNoIHBhY2tldC4gKi8KKwkJaW50IHVzZXJfcGt0c3ogPSBQS1RTWiAtIGRhdGFfb2Zmc2V0OworCQlpbnQgdG9kbyA9IGNvdW50OworCQl1bnNpZ25lZCBjaGFyICpmaXJzdF9ieXRlID0gYnVmZmVyOworCQljb25zdCB1bnNpZ25lZCBjaGFyICpjdXJyZW50X3Bvc2l0aW9uID0gYnVmOworCisJCXdoaWxlICh0b2RvID4gMCkgeworCQkJaWYgKHVzZXJfcGt0c3ogPiB0b2RvKSB7CisJCQkJdXNlcl9wa3RzeiA9IHRvZG87CisJCQl9CisJCQkvKiBXcml0ZSB0aGUgY29udHJvbCBieXRlIGF0IHRoZSBmcm9udCBvZiB0aGUgcGFja2V0Ki8KKwkJCSpmaXJzdF9ieXRlID0gMSB8ICgodXNlcl9wa3RzeikgPDwgMik7IAorCQkJLyogQ29weSBkYXRhIGZvciBwYWNrZXQgKi8KKwkJCW1lbWNweSAoZmlyc3RfYnl0ZSArIGRhdGFfb2Zmc2V0LAorCQkJCWN1cnJlbnRfcG9zaXRpb24sIHVzZXJfcGt0c3opOworCQkJZmlyc3RfYnl0ZSArPSB1c2VyX3BrdHN6ICsgZGF0YV9vZmZzZXQ7CisJCQljdXJyZW50X3Bvc2l0aW9uICs9IHVzZXJfcGt0c3o7CisJCQl0b2RvIC09IHVzZXJfcGt0c3o7CisJCX0KKwl9IGVsc2UgeworCQkvKiBObyBjb250cm9sIGJ5dGUgcmVxdWlyZWQuICovCisJCS8qIENvcHkgaW4gdGhlIGRhdGEgdG8gc2VuZCAqLworCQltZW1jcHkgKGJ1ZmZlciwgYnVmLCBjb3VudCk7CisJfQorCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHRyYW5zZmVyX3NpemUsIGJ1ZmZlcik7CisKKwkvKiBmaWxsIHRoZSBidWZmZXIgYW5kIHNlbmQgaXQgKi8KKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJICAgICAgdXNiX3NuZGJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAorCQkgICAgICBidWZmZXIsIHRyYW5zZmVyX3NpemUsCisJCSAgICAgIGZ0ZGlfd3JpdGVfYnVsa19jYWxsYmFjaywgcG9ydCk7CisKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMpIHsKKwkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCWNvdW50ID0gc3RhdHVzOworCQlrZnJlZSAoYnVmZmVyKTsKKwl9CisKKwkvKiB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgdXJiLCBzbyBsZXQgdGhlIGhvc3QgZHJpdmVyCisJICogcmVhbGx5IGZyZWUgaXQgd2hlbiBpdCBpcyBmaW5pc2hlZCB3aXRoIGl0ICovCisJdXNiX2ZyZWVfdXJiICh1cmIpOworCisJZGJnKCIlcyB3cml0ZSByZXR1cm5pbmc6ICVkIiwgX19GVU5DVElPTl9fLCBjb3VudCk7CisJcmV0dXJuIGNvdW50OworfSAvKiBmdGRpX3dyaXRlICovCisKKworLyogVGhpcyBmdW5jdGlvbiBtYXkgZ2V0IGNhbGxlZCB3aGVuIHRoZSBkZXZpY2UgaXMgY2xvc2VkICovCisKK3N0YXRpYyB2b2lkIGZ0ZGlfd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisKKwkvKiBmcmVlIHVwIHRoZSB0cmFuc2ZlciBidWZmZXIsIGFzIHVzYl9mcmVlX3VyYigpIGRvZXMgbm90IGRvIHRoaXMgKi8KKwlrZnJlZSAodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygibm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwlzY2hlZHVsZV93b3JrKCZwb3J0LT53b3JrKTsKK30gLyogZnRkaV93cml0ZV9idWxrX2NhbGxiYWNrICovCisKKworc3RhdGljIGludCBmdGRpX3dyaXRlX3Jvb20oIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgKQoreworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLyoKKwkgKiBXZSByZWFsbHkgY2FuIHRha2UgYW55dGhpbmcgdGhlIHVzZXIgdGhyb3dzIGF0IHVzCisJICogYnV0IGxldCdzIHBpY2sgYSBuaWNlIGJpZyBudW1iZXIgdG8gdGVsbCB0aGUgdHR5CisJICogbGF5ZXIgdGhhdCB3ZSBoYXZlIGxvdHMgb2YgZnJlZSBzcGFjZQorCSAqLworCXJldHVybiAyMDQ4OworfSAvKiBmdGRpX3dyaXRlX3Jvb20gKi8KKworCitzdGF0aWMgaW50IGZ0ZGlfY2hhcnNfaW5fYnVmZmVyIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreyAvKiBmdGRpX2NoYXJzX2luX2J1ZmZlciAqLworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLyogCisJICogV2UgY2FuJ3QgcmVhbGx5IGFjY291bnQgZm9yIGhvdyBtdWNoIGRhdGEgd2UKKwkgKiBoYXZlIHNlbnQgb3V0LCBidXQgaGFzbid0IG1hZGUgaXQgdGhyb3VnaCB0byB0aGUKKwkgKiBkZXZpY2UsIHNvIGp1c3QgdGVsbCB0aGUgdHR5IGxheWVyIHRoYXQgZXZlcnl0aGluZworCSAqIGlzIGZsdXNoZWQuCisJICovCisJcmV0dXJuIDA7Cit9IC8qIGZ0ZGlfY2hhcnNfaW5fYnVmZmVyICovCisKKworCitzdGF0aWMgdm9pZCBmdGRpX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sgLyogZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2sgKi8KKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2OworCisJaWYgKHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPiAwKSB7CisJCWVycigiJXMgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAlZCBhY3R1YWxfbGVuZ3RoICVkIG51bWJlciBvZiBwYWNrZXRzICVkIixfX0ZVTkNUSU9OX18sCisJCSAgICB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIHVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT5udW1iZXJfb2ZfcGFja2V0cyApOworCQllcnIoIiVzIHRyYW5zZmVyX2ZsYWdzICV4ICIsIF9fRlVOQ1RJT05fXyx1cmItPnRyYW5zZmVyX2ZsYWdzICk7CisJfQorCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAocG9ydC0+b3Blbl9jb3VudCA8PSAwKQorCQlyZXR1cm47CisKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKCF0dHkpIHsKKwkJZGJnKCIlcyAtIGJhZCB0dHkgcG9pbnRlciAtIGV4aXRpbmciLF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWlmICghcHJpdikgeworCQlkYmcoIiVzIC0gYmFkIHBvcnQgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgLSBleGl0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1cmIgIT0gcG9ydC0+cmVhZF91cmIpIHsKKwkJZXJyKCIlcyAtIE5vdCBteSB1cmIhIiwgX19GVU5DVElPTl9fKTsKKwl9CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJLyogVGhpcyB3aWxsIGhhcHBlbiBhdCBjbG9zZSBldmVyeSB0aW1lIHNvIGl0IGlzIGEgZGJnIG5vdCBhbiBlcnIgKi8KKwkJZGJnKCIodGhpcyBpcyBvayBvbiBjbG9zZSkgbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIElmIHRocm90dGxlZCwgZGVsYXkgcmVjZWl2ZSBwcm9jZXNzaW5nIHVudGlsIHVudGhyb3R0bGVkLiAqLworCXNwaW5fbG9jaygmcHJpdi0+cnhfbG9jayk7CisJaWYgKHByaXYtPnJ4X2ZsYWdzICYgVEhST1RUTEVEKSB7CisJCWRiZygiRGVmZXJyaW5nIHJlYWQgdXJiIHByb2Nlc3NpbmcgdW50aWwgdW50aHJvdHRsZWQiKTsKKwkJcHJpdi0+cnhfZmxhZ3MgfD0gQUNUVUFMTFlfVEhST1RUTEVEOworCQlzcGluX3VubG9jaygmcHJpdi0+cnhfbG9jayk7CisJCXJldHVybjsKKwl9CisJc3Bpbl91bmxvY2soJnByaXYtPnJ4X2xvY2spOworCisJZnRkaV9wcm9jZXNzX3JlYWQocG9ydCk7CisKK30gLyogZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2sgKi8KKworCitzdGF0aWMgdm9pZCBmdGRpX3Byb2Nlc3NfcmVhZCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sgLyogZnRkaV9wcm9jZXNzX3JlYWQgKi8KKwlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2OworCWNoYXIgZXJyb3JfZmxhZzsKKyAgICAgICAJdW5zaWduZWQgY2hhciAqZGF0YTsKKworCWludCBpOworCWludCByZXN1bHQ7CisJaW50IG5lZWRfZmxpcDsKKwlpbnQgcGFja2V0X29mZnNldDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHBvcnQtPm9wZW5fY291bnQgPD0gMCkKKwkJcmV0dXJuOworCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICghdHR5KSB7CisJCWRiZygiJXMgLSBiYWQgdHR5IHBvaW50ZXIgLSBleGl0aW5nIixfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpZiAoIXByaXYpIHsKKwkJZGJnKCIlcyAtIGJhZCBwb3J0IHByaXZhdGUgZGF0YSBwb2ludGVyIC0gZXhpdGluZyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwl1cmIgPSBwb3J0LT5yZWFkX3VyYjsKKwlpZiAoIXVyYikgeworCQlkYmcoIiVzIC0gYmFkIHJlYWRfdXJiIHBvaW50ZXIgLSBleGl0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworICAgICAgICAvKiBUaGUgZmlyc3QgdHdvIGJ5dGVzIG9mIGV2ZXJ5IHJlYWQgcGFja2V0IGFyZSBzdGF0dXMgKi8KKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID4gMikgeworCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKwl9IGVsc2UgeworICAgICAgICAgICAgICAgIGRiZygiU3RhdHVzIG9ubHk6ICUwM29vICUwM29vIixkYXRhWzBdLGRhdGFbMV0pOworICAgICAgICB9CisKKworCS8qIFRPIERPIC0tIGNoZWNrIGZvciBodW5nIHVwIGxpbmUgYW5kIGhhbmRsZSBhcHByb3ByaWF0ZWx5OiAqLworCS8qICAgc2VuZCBoYW5ndXAgICovCisJLyogU2VlIGFjbS5jIC0geW91IGRvIGEgdHR5X2hhbmd1cCAgLSBlZyB0dHlfaGFuZ3VwKHR0eSkgKi8KKwkvKiBpZiBDRCBpcyBkcm9wcGVkIGFuZCB0aGUgbGluZSBpcyBub3QgQ0xPQ0FMIHRoZW4gd2Ugc2hvdWxkIGhhbmd1cCAqLworCisJbmVlZF9mbGlwID0gMDsKKwlmb3IgKHBhY2tldF9vZmZzZXQ9MDsgcGFja2V0X29mZnNldCA8IHVyYi0+YWN0dWFsX2xlbmd0aDsgcGFja2V0X29mZnNldCArPSBQS1RTWikgeworCQkvKiBDb21wYXJlIG5ldyBsaW5lIHN0YXR1cyB0byB0aGUgb2xkIG9uZSwgc2lnbmFsIGlmIGRpZmZlcmVudCAqLworCQlpZiAocHJpdiAhPSBOVUxMKSB7CisJCQljaGFyIG5ld19zdGF0dXMgPSBkYXRhW3BhY2tldF9vZmZzZXQrMF0gJiBGVERJX1NUQVRVU19CMF9NQVNLOworCQkJaWYgKG5ld19zdGF0dXMgIT0gcHJpdi0+cHJldl9zdGF0dXMpIHsKKwkJCQlwcml2LT5kaWZmX3N0YXR1cyB8PSBuZXdfc3RhdHVzIF4gcHJpdi0+cHJldl9zdGF0dXM7CisJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisJCQkJcHJpdi0+cHJldl9zdGF0dXMgPSBuZXdfc3RhdHVzOworCQkJfQorCQl9CisKKwkJLyogSGFuZGxlIGVycm9ycyBhbmQgYnJlYWsgKi8KKwkJZXJyb3JfZmxhZyA9IFRUWV9OT1JNQUw7CisJCS8qIEFsdGhvdWdoIHRoZSBkZXZpY2UgdXNlcyBhIGJpdG1hc2sgYW5kIGhlbmNlIGNhbiBoYXZlIG11bHRpcGxlICovCisJCS8qIGVycm9ycyBvbiBhIHBhY2tldCAtIHRoZSBvcmRlciBoZXJlIHNldHMgdGhlIHByaW9yaXR5IHRoZSAqLworCQkvKiBlcnJvciBpcyByZXR1cm5lZCB0byB0aGUgdHR5IGxheWVyICAqLworCisJCWlmICggZGF0YVtwYWNrZXRfb2Zmc2V0KzFdICYgRlRESV9SU19PRSApIHsKKwkJCWVycm9yX2ZsYWcgPSBUVFlfT1ZFUlJVTjsKKwkJCWRiZygiT1ZFUlJSVU4gZXJyb3IiKTsKKwkJfQorCQlpZiAoIGRhdGFbcGFja2V0X29mZnNldCsxXSAmIEZURElfUlNfQkkgKSB7CisJCQllcnJvcl9mbGFnID0gVFRZX0JSRUFLOworCQkJZGJnKCJCUkVBSyByZWNlaXZlZCIpOworCQl9CisJCWlmICggZGF0YVtwYWNrZXRfb2Zmc2V0KzFdICYgRlRESV9SU19QRSApIHsKKwkJCWVycm9yX2ZsYWcgPSBUVFlfUEFSSVRZOworCQkJZGJnKCJQQVJJVFkgZXJyb3IiKTsKKwkJfQorCQlpZiAoIGRhdGFbcGFja2V0X29mZnNldCsxXSAmIEZURElfUlNfRkUgKSB7CisJCQllcnJvcl9mbGFnID0gVFRZX0ZSQU1FOworCQkJZGJnKCJGUkFNSU5HIGVycm9yIik7CisJCX0KKwkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IHBhY2tldF9vZmZzZXQgKyAyKSB7CisJCQlmb3IgKGkgPSAyOyAoaSA8IFBLVFNaKSAmJiAoKGkrcGFja2V0X29mZnNldCkgPCB1cmItPmFjdHVhbF9sZW5ndGgpOyArK2kpIHsKKwkJCQkvKiBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVyZmxvdyB0aGUgYnVmZmVyCisJCQkJICB3aXRoIHR0eV9pbnNlcnRfZmxpcF9jaGFyJ3MgKi8KKwkJCQlpZih0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkgeworCQkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJCX0KKwkJCQkvKiBOb3RlIHRoYXQgdGhlIGVycm9yIGZsYWcgaXMgZHVwbGljYXRlZCBmb3IgCisJCQkJICAgZXZlcnkgY2hhcmFjdGVyIHJlY2VpdmVkIHNpbmNlIHdlIGRvbid0IGtub3cKKwkJCQkgICB3aGljaCBjaGFyYWN0ZXIgaXQgYXBwbGllZCB0byAqLworCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtwYWNrZXRfb2Zmc2V0K2ldLCBlcnJvcl9mbGFnKTsKKwkJCX0KKwkJCW5lZWRfZmxpcCA9IDE7CisJCX0KKworI2lmZGVmIE5PVF9DT1JSRUNUX0JVVF9LRUVQSU5HX0lUX0ZPUl9OT1cKKwkJLyogaWYgYSBwYXJpdHkgZXJyb3IgaXMgZGV0ZWN0ZWQgeW91IGdldCBzdGF0dXMgcGFja2V0cyBmb3JldmVyCisJCSAgIHVudGlsIGEgY2hhcmFjdGVyIGlzIHNlbnQgd2l0aG91dCBhIHBhcml0eSBlcnJvci4KKwkJICAgVGhpcyBkb2Vzbid0IHdvcmsgd2VsbCBzaW5jZSB0aGUgYXBwbGljYXRpb24gcmVjZWl2ZXMgYSBuZXZlcgorCQkgICBlbmRpbmcgc3RyZWFtIG9mIGJhZCBkYXRhIC0gZXZlbiB0aG91Z2ggbmV3IGRhdGEgaGFzbid0IGJlZW4gc2VudC4KKwkJICAgVGhlcmVmb3JlIEkgKGJpbGwpIGhhdmUgdGFrZW4gdGhpcyBvdXQuCisJCSAgIEhvd2V2ZXIgLSB0aGlzIG1pZ2h0IG1ha2Ugc2Vuc2UgZm9yIGZyYW1pbmcgZXJyb3JzIGFuZCBzbyBvbiAKKwkJICAgc28gSSBhbSBsZWF2aW5nIHRoZSBjb2RlIGluIGZvciBub3cuCisJCSovCisJCWVsc2UgeworCQkJaWYgKGVycm9yX2ZsYWcgIT0gVFRZX05PUk1BTCl7CisJCQkJZGJnKCJlcnJvcl9mbGFnIGlzIG5vdCBub3JtYWwiKTsKKwkJCQkvKiBJbiB0aGlzIGNhc2UgaXQgaXMganVzdCBzdGF0dXMgLSBpZiB0aGF0IGlzIGFuIGVycm9yIHNlbmQgYSBiYWQgY2hhcmFjdGVyICovCisJCQkJaWYodHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpIHsKKwkJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCQl9CisJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCAweGZmLCBlcnJvcl9mbGFnKTsKKwkJCQluZWVkX2ZsaXAgPSAxOworCQkJfQorCQl9CisjZW5kaWYKKwl9IC8qICJmb3IocGFja2V0X29mZnNldD0wLi4uIiAqLworCisJLyogTG93IGxhdGVuY3kgKi8KKwlpZiAobmVlZF9mbGlwKSB7CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJfQorCisJLyogaWYgdGhlIHBvcnQgaXMgY2xvc2VkIHN0b3AgdHJ5aW5nIHRvIHJlYWQgKi8KKwlpZiAocG9ydC0+b3Blbl9jb3VudCA+IDApeworCQkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgICovCisJCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwgCisJCQkgICAgICB1c2JfcmN2YnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgICAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJICAgICAgZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwl9CisKKwlyZXR1cm47Cit9IC8qIGZ0ZGlfcHJvY2Vzc19yZWFkICovCisKKworc3RhdGljIHZvaWQgZnRkaV9icmVha19jdGwoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSApCit7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlfX3UxNiB1cmJfdmFsdWUgPSAwOyAKKwljaGFyIGJ1ZlsxXTsKKwkKKwkvKiBicmVha19zdGF0ZSA9IC0xIHRvIHR1cm4gb24gYnJlYWssIGFuZCAwIHRvIHR1cm4gb2ZmIGJyZWFrICovCisJLyogc2VlIGRyaXZlcnMvY2hhci90dHlfaW8uYyB0byBzZWUgaXQgdXNlZCAqLworCS8qIGxhc3Rfc2V0X2RhdGFfdXJiX3ZhbHVlIE5FVkVSIGhhcyB0aGUgYnJlYWsgYml0IHNldCBpbiBpdCAqLworCisJaWYgKGJyZWFrX3N0YXRlKSB7CisJCXVyYl92YWx1ZSA9IHByaXYtPmxhc3Rfc2V0X2RhdGFfdXJiX3ZhbHVlIHwgRlRESV9TSU9fU0VUX0JSRUFLOworCX0gZWxzZSB7CisJCXVyYl92YWx1ZSA9IHByaXYtPmxhc3Rfc2V0X2RhdGFfdXJiX3ZhbHVlOyAKKwl9CisKKwkKKwlpZiAodXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJICAgIEZURElfU0lPX1NFVF9EQVRBX1JFUVVFU1QsIAorCQkJICAgIEZURElfU0lPX1NFVF9EQVRBX1JFUVVFU1RfVFlQRSwKKwkJCSAgICB1cmJfdmFsdWUgLCBwcml2LT5pbnRlcmZhY2UsCisJCQkgICAgYnVmLCAwLCBXRFJfVElNRU9VVCkgPCAwKSB7CisJCWVycigiJXMgRkFJTEVEIHRvIGVuYWJsZS9kaXNhYmxlIGJyZWFrIHN0YXRlIChzdGF0ZSB3YXMgJWQpIiwgX19GVU5DVElPTl9fLGJyZWFrX3N0YXRlKTsKKwl9CSAgIAorCisJZGJnKCIlcyBicmVhayBzdGF0ZSBpcyAlZCAtIHVyYiBpcyAlZCIsIF9fRlVOQ1RJT05fXyxicmVha19zdGF0ZSwgdXJiX3ZhbHVlKTsKKwkKK30KKworCisvKiBvbGRfdGVybWlvcyBjb250YWlucyB0aGUgb3JpZ2luYWwgdGVybWlvcyBzZXR0aW5ncyBhbmQgdHR5LT50ZXJtaW9zIGNvbnRhaW5zCisgKiB0aGUgbmV3IHNldHRpbmcgdG8gYmUgdXNlZAorICogV0FSTklORzogc2V0X3Rlcm1pb3MgY2FsbHMgdGhpcyB3aXRoIG9sZF90ZXJtaW9zIGluIGtlcm5lbCBzcGFjZQorICovCisKK3N0YXRpYyB2b2lkIGZ0ZGlfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sgLyogZnRkaV90ZXJtaW9zICovCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXVuc2lnbmVkIGludCBjZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCV9fdTE2IHVyYl92YWx1ZTsgLyogd2lsbCBob2xkIHRoZSBuZXcgZmxhZ3MgKi8KKwljaGFyIGJ1ZlsxXTsgLyogUGVyaGFwcyBJIHNob3VsZCBkeW5hbWljYWxseSBhbGxvYyB0aGlzPyAqLworCQorCS8vIEFkZGVkIGZvciB4b24veG9mZiBzdXBwb3J0CisJdW5zaWduZWQgaW50IGlmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnOworCXVuc2lnbmVkIGNoYXIgdnN0b3A7CisJdW5zaWduZWQgY2hhciB2c3RhcnQ7CisJCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBGb3JjZSBiYXVkIHJhdGUgaWYgdGhpcyBkZXZpY2UgcmVxdWlyZXMgaXQsIHVubGVzcyBpdCBpcyBzZXQgdG8gQjAuICovCisJaWYgKHByaXYtPmZvcmNlX2JhdWQgJiYgKChwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkgIT0gQjApKSB7CisJCWRiZygiJXM6IGZvcmNpbmcgYmF1ZCByYXRlIGZvciB0aGlzIGRldmljZSIsIF9fRlVOQ1RJT05fXyk7CisJCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmPSB+Q0JBVUQ7CisJCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyB8PSBwcml2LT5mb3JjZV9iYXVkOworCX0KKworCS8qIEZvcmNlIFJUUy1DVFMgaWYgdGhpcyBkZXZpY2UgcmVxdWlyZXMgaXQuICovCisJaWYgKHByaXYtPmZvcmNlX3J0c2N0cykgeworCQlkYmcoIiVzOiBmb3JjaW5nIHJ0c2N0cyBmb3IgdGhpcyBkZXZpY2UiLCBfX0ZVTkNUSU9OX18pOworCQlwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgfD0gQ1JUU0NUUzsKKwl9CisKKwljZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKworCS8qIEZJWE1FIC1Gb3IgdGhpcyBjdXQgSSBkb24ndCBjYXJlIGlmIHRoZSBsaW5lIGlzIHJlYWxseSBjaGFuZ2luZyBvciAKKwkgICBub3QgIC0gc28ganVzdCBkbyB0aGUgY2hhbmdlIHJlZ2FyZGxlc3MgIC0gc2hvdWxkIGJlIGFibGUgdG8gCisJICAgY29tcGFyZSBvbGRfdGVybWlvcyBhbmQgdHR5LT50ZXJtaW9zICovCisJLyogTk9URSBUaGVzZSByb3V0aW5lcyBjYW4gZ2V0IGludGVycnVwdGVkIGJ5IAorCSAgIGZ0ZGlfc2lvX3JlYWRfYnVsa19jYWxsYmFjayAgLSBuZWVkIHRvIGV4YW1pbmUgd2hhdCB0aGlzIAorICAgICAgICAgICBtZWFucyAtIGRvbid0IHNlZSBhbnkgcHJvYmxlbXMgeWV0ICovCisJCisJLyogU2V0IG51bWJlciBvZiBkYXRhIGJpdHMsIHBhcml0eSwgc3RvcCBiaXRzICovCisJCisJdXJiX3ZhbHVlID0gMDsKKwl1cmJfdmFsdWUgfD0gKGNmbGFnICYgQ1NUT1BCID8gRlRESV9TSU9fU0VUX0RBVEFfU1RPUF9CSVRTXzIgOgorCQkgICAgICBGVERJX1NJT19TRVRfREFUQV9TVE9QX0JJVFNfMSk7CisJdXJiX3ZhbHVlIHw9IChjZmxhZyAmIFBBUkVOQiA/IAorCQkgICAgICAoY2ZsYWcgJiBQQVJPREQgPyBGVERJX1NJT19TRVRfREFUQV9QQVJJVFlfT0REIDogCisJCSAgICAgICBGVERJX1NJT19TRVRfREFUQV9QQVJJVFlfRVZFTikgOgorCQkgICAgICBGVERJX1NJT19TRVRfREFUQV9QQVJJVFlfTk9ORSk7CisJaWYgKGNmbGFnICYgQ1NJWkUpIHsKKwkJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7CisJCWNhc2UgQ1M1OiB1cmJfdmFsdWUgfD0gNTsgZGJnKCJTZXR0aW5nIENTNSIpOyBicmVhazsKKwkJY2FzZSBDUzY6IHVyYl92YWx1ZSB8PSA2OyBkYmcoIlNldHRpbmcgQ1M2Iik7IGJyZWFrOworCQljYXNlIENTNzogdXJiX3ZhbHVlIHw9IDc7IGRiZygiU2V0dGluZyBDUzciKTsgYnJlYWs7CisJCWNhc2UgQ1M4OiB1cmJfdmFsdWUgfD0gODsgZGJnKCJTZXR0aW5nIENTOCIpOyBicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVycigiQ1NJWkUgd2FzIHNldCBidXQgbm90IENTNS1DUzgiKTsKKwkJfQorCX0KKworCS8qIFRoaXMgaXMgbmVlZGVkIGJ5IHRoZSBicmVhayBjb21tYW5kIHNpbmNlIGl0IHVzZXMgdGhlIHNhbWUgY29tbWFuZCAtIGJ1dCBpcworCSAqICBvcidlZCB3aXRoIHRoaXMgdmFsdWUgICovCisJcHJpdi0+bGFzdF9zZXRfZGF0YV91cmJfdmFsdWUgPSB1cmJfdmFsdWU7CisJCisJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJICAgIEZURElfU0lPX1NFVF9EQVRBX1JFUVVFU1QsIAorCQkJICAgIEZURElfU0lPX1NFVF9EQVRBX1JFUVVFU1RfVFlQRSwKKwkJCSAgICB1cmJfdmFsdWUgLCBwcml2LT5pbnRlcmZhY2UsCisJCQkgICAgYnVmLCAwLCAxMDApIDwgMCkgeworCQllcnIoIiVzIEZBSUxFRCB0byBzZXQgZGF0YWJpdHMvc3RvcGJpdHMvcGFyaXR5IiwgX19GVU5DVElPTl9fKTsKKwl9CSAgIAorCisJLyogTm93IGRvIHRoZSBiYXVkcmF0ZSAqLworCWlmICgoY2ZsYWcgJiBDQkFVRCkgPT0gQjAgKSB7CisJCS8qIERpc2FibGUgZmxvdyBjb250cm9sICovCisJCWlmICh1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULCAKKwkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUX1RZUEUsCisJCQkJICAgIDAsIHByaXYtPmludGVyZmFjZSwgCisJCQkJICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgeworCQkJZXJyKCIlcyBlcnJvciBmcm9tIGRpc2FibGUgZmxvd2NvbnRyb2wgdXJiIiwgX19GVU5DVElPTl9fKTsKKwkJfQkgICAgCisJCS8qIERyb3AgUlRTIGFuZCBEVFIgKi8KKwkJaWYgKHNldF9kdHIocG9ydCwgTE9XKSA8IDApeworCQkJZXJyKCIlcyBFcnJvciBmcm9tIERUUiBMT1cgdXJiIiwgX19GVU5DVElPTl9fKTsKKwkJfQorCQlpZiAoc2V0X3J0cyhwb3J0LCBMT1cpIDwgMCl7CisJCQllcnIoIiVzIEVycm9yIGZyb20gUlRTIExPVyB1cmIiLCBfX0ZVTkNUSU9OX18pOworCQl9CQorCQkKKwl9IGVsc2UgeworCQkvKiBzZXQgdGhlIGJhdWRyYXRlIGRldGVybWluZWQgYmVmb3JlICovCisJCWlmIChjaGFuZ2Vfc3BlZWQocG9ydCkpIHsKKwkJCWVycigiJXMgdXJiIGZhaWxlZCB0byBzZXQgYmF1cmRyYXRlIiwgX19GVU5DVElPTl9fKTsKKwkJfQorCQkvKiBFbnN1cmUgIFJUUyBhbmQgRFRSIGFyZSByYWlzZWQgKi8KKwkJZWxzZSBpZiAoc2V0X2R0cihwb3J0LCBISUdIKSA8IDApeworCQkJZXJyKCIlcyBFcnJvciBmcm9tIERUUiBISUdIIHVyYiIsIF9fRlVOQ1RJT05fXyk7CisJCX0KKwkJZWxzZSBpZiAoc2V0X3J0cyhwb3J0LCBISUdIKSA8IDApeworCQkJZXJyKCIlcyBFcnJvciBmcm9tIFJUUyBISUdIIHVyYiIsIF9fRlVOQ1RJT05fXyk7CisJCX0JCisJfQorCisJLyogU2V0IGZsb3cgY29udHJvbCAqLworCS8qIE5vdGUgZGV2aWNlIGFsc28gc3VwcG9ydHMgRFRSL0NEICh1Z2gpIGFuZCBYb24vWG9mZiBpbiBoYXJkd2FyZSAqLworCWlmIChjZmxhZyAmIENSVFNDVFMpIHsKKwkJZGJnKCIlcyBTZXR0aW5nIHRvIENSVFNDVFMgZmxvdyBjb250cm9sIiwgX19GVU5DVElPTl9fKTsKKwkJaWYgKHVzYl9jb250cm9sX21zZyhkZXYsIAorCQkJCSAgICB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULCAKKwkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUX1RZUEUsCisJCQkJICAgIDAgLCAoRlRESV9TSU9fUlRTX0NUU19IUyB8IHByaXYtPmludGVyZmFjZSksCisJCQkJICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgeworCQkJZXJyKCJ1cmIgZmFpbGVkIHRvIHNldCB0byBydHMvY3RzIGZsb3cgY29udHJvbCIpOworCQl9CQkKKwkJCisJfSBlbHNlIHsgCisJCS8qCisJCSAqIFhvbi9Yb2ZmIGNvZGUKKwkJICoKKwkJICogQ2hlY2sgdGhlIElYT0ZGIHN0YXR1cyBpbiB0aGUgaWZsYWcgY29tcG9uZW50IG9mIHRoZSB0ZXJtaW9zIHN0cnVjdHVyZQorCQkgKiBpZiBJWE9GRiBpcyBub3Qgc2V0LCB0aGUgcHJlLXhvbi94b2ZmIGNvZGUgaXMgZXhlY3V0ZWQuCisJCSovCisJCWlmIChpZmxhZyAmIElYT0ZGKSB7CisJCQlkYmcoIiVzICByZXF1ZXN0IHRvIGVuYWJsZSB4b254b2ZmIGlmbGFnPSUwNHgiLF9fRlVOQ1RJT05fXyxpZmxhZyk7CisJCQkvLyBUcnkgdG8gZW5hYmxlIHRoZSBYT04vWE9GRiBvbiB0aGUgZnRkaV9zaW8KKwkJCS8vIFNldCB0aGUgdnN0YXJ0IGFuZCB2c3RvcCAtLSBjb3VsZCBoYXZlIGJlZW4gZG9uZSB1cCBhYm92ZSB3aGVyZQorCQkJLy8gYSBsb3Qgb2Ygb3RoZXIgZGVyZWZlcmVuY2luZyBpcyBkb25lIGJ1dCB0aGF0IHdvdWxkIGJlIHZlcnkKKwkJCS8vIGluZWZmaWNpZW50IGFzIHZzdGFydCBhbmQgdnN0b3AgYXJlIG5vdCBhbHdheXMgbmVlZGVkCisJCQl2c3RhcnQ9cG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NjW1ZTVEFSVF07CisJCQl2c3RvcD1wb3J0LT50dHktPnRlcm1pb3MtPmNfY2NbVlNUT1BdOworCQkJdXJiX3ZhbHVlPSh2c3RvcCA8PCA4KSB8ICh2c3RhcnQpOworCisJCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwKKwkJCQkJICAgIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULAorCQkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUX1RZUEUsCisJCQkJCSAgICB1cmJfdmFsdWUgLCAoRlRESV9TSU9fWE9OX1hPRkZfSFMKKwkJCQkJCQkgfCBwcml2LT5pbnRlcmZhY2UpLAorCQkJCQkgICAgYnVmLCAwLCBXRFJfVElNRU9VVCkgPCAwKSB7CisJCQkJZXJyKCJ1cmIgZmFpbGVkIHRvIHNldCB0byB4b24veG9mZiBmbG93IGNvbnRyb2wiKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIGVsc2UgY2xhdXNlIHRvIG9ubHkgcnVuIGlmIGNmYWcgISBDUlRTQ1RTIGFuZCBpZmxhZyAhIFhPRkYgKi8KKwkJCS8qIENIRUNLTUUgQXNzdW1pbmcgWE9OL1hPRkYgaGFuZGxlZCBieSB0dHkgc3RhY2sgLSBub3QgYnkgZGV2aWNlICovCisJCQlkYmcoIiVzIFR1cm5pbmcgb2ZmIGhhcmR3YXJlIGZsb3cgY29udHJvbCIsIF9fRlVOQ1RJT05fXyk7CisJCQlpZiAodXNiX2NvbnRyb2xfbXNnKGRldiwgCisJCQkJCSAgICB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCQkJICAgIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVCwgCisJCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1RfVFlQRSwKKwkJCQkJICAgIDAsIHByaXYtPmludGVyZmFjZSwgCisJCQkJCSAgICBidWYsIDAsIFdEUl9USU1FT1VUKSA8IDApIHsKKwkJCQllcnIoInVyYiBmYWlsZWQgdG8gY2xlYXIgZmxvdyBjb250cm9sIik7CisJCQl9CQkJCQorCQl9CisJCQorCX0KKwlyZXR1cm47Cit9IC8qIGZ0ZGlfdGVybWlvcyAqLworCisKK3N0YXRpYyBpbnQgZnRkaV90aW9jbWdldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBjaGFyIGJ1ZlsyXTsKKwlpbnQgcmV0OworCisJZGJnKCIlcyBUSU9DTUdFVCIsIF9fRlVOQ1RJT05fXyk7CisJc3dpdGNoIChwcml2LT5jaGlwX3R5cGUpIHsKKwljYXNlIFNJTzoKKwkJLyogUmVxdWVzdCB0aGUgc3RhdHVzIGZyb20gdGhlIGRldmljZSAqLworCQlpZiAoKHJldCA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwgCisJCQkJCSAgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCisJCQkJCSAgIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVNfUkVRVUVTVCwgCisJCQkJCSAgIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVNfUkVRVUVTVF9UWVBFLAorCQkJCQkgICAwLCAwLCAKKwkJCQkJICAgYnVmLCAxLCBXRFJfVElNRU9VVCkpIDwgMCApIHsKKwkJCWVycigiJXMgQ291bGQgbm90IGdldCBtb2RlbSBzdGF0dXMgb2YgZGV2aWNlIC0gZXJyOiAlZCIsIF9fRlVOQ1RJT05fXywKKwkJCSAgICByZXQpOworCQkJcmV0dXJuKHJldCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBGVDhVMjMyQU06CisJY2FzZSBGVDIzMkJNOgorCWNhc2UgRlQyMjMyQzoKKwkJLyogdGhlIDhVMjMyQU0gcmV0dXJucyBhIHR3byBieXRlIHZhbHVlICh0aGUgc2lvIGlzIGEgMSBieXRlIHZhbHVlKSAtIGluIHRoZSBzYW1lCisJCSAgIGZvcm1hdCBhcyB0aGUgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBpbiBwb2ludCAqLworCQlpZiAoKHJldCA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwgCisJCQkJCSAgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCisJCQkJCSAgIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVNfUkVRVUVTVCwgCisJCQkJCSAgIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVNfUkVRVUVTVF9UWVBFLAorCQkJCQkgICAwLCBwcml2LT5pbnRlcmZhY2UsIAorCQkJCQkgICBidWYsIDIsIFdEUl9USU1FT1VUKSkgPCAwICkgeworCQkJZXJyKCIlcyBDb3VsZCBub3QgZ2V0IG1vZGVtIHN0YXR1cyBvZiBkZXZpY2UgLSBlcnI6ICVkIiwgX19GVU5DVElPTl9fLAorCQkJICAgIHJldCk7CisJCQlyZXR1cm4ocmV0KTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisJfQorCQorCXJldHVybiAgKGJ1ZlswXSAmIEZURElfU0lPX0RTUl9NQVNLID8gVElPQ01fRFNSIDogMCkgfAorCQkoYnVmWzBdICYgRlRESV9TSU9fQ1RTX01BU0sgPyBUSU9DTV9DVFMgOiAwKSB8CisJCShidWZbMF0gICYgRlRESV9TSU9fUklfTUFTSyAgPyBUSU9DTV9SSSAgOiAwKSB8CisJCShidWZbMF0gICYgRlRESV9TSU9fUkxTRF9NQVNLID8gVElPQ01fQ0QgIDogMCkgfAorCQlwcml2LT5sYXN0X2R0cl9ydHM7CQkJCit9CisKK3N0YXRpYyBpbnQgZnRkaV90aW9jbXNldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlpbnQgcmV0OworCQorCWRiZygiJXMgVElPQ01TRVQiLCBfX0ZVTkNUSU9OX18pOworCWlmIChzZXQgJiBUSU9DTV9EVFIpeworCQlpZiAoKHJldCA9IHNldF9kdHIocG9ydCwgSElHSCkpIDwgMCkgeworCQkJZXJyKCJVcmIgdG8gc2V0IERUUiBmYWlsZWQiKTsKKwkJCXJldHVybihyZXQpOworCQl9CisJfQorCWlmIChzZXQgJiBUSU9DTV9SVFMpIHsKKwkJaWYgKChyZXQgPSBzZXRfcnRzKHBvcnQsIEhJR0gpKSA8IDApeworCQkJZXJyKCJVcmIgdG8gc2V0IFJUUyBmYWlsZWQiKTsKKwkJCXJldHVybihyZXQpOworCQl9CisJfQorCQorCWlmIChjbGVhciAmIFRJT0NNX0RUUil7CisJCWlmICgocmV0ID0gc2V0X2R0cihwb3J0LCBMT1cpKSA8IDApeworCQkJZXJyKCJVcmIgdG8gdW5zZXQgRFRSIGZhaWxlZCIpOworCQkJcmV0dXJuKHJldCk7CisJCX0KKwl9CQorCWlmIChjbGVhciAmIFRJT0NNX1JUUykgeworCQlpZiAoKHJldCA9IHNldF9ydHMocG9ydCwgTE9XKSkgPCAwKXsKKwkJCWVycigiVXJiIHRvIHVuc2V0IFJUUyBmYWlsZWQiKTsKKwkJCXJldHVybihyZXQpOworCQl9CisJfQorCXJldHVybigwKTsKK30KKworCitzdGF0aWMgaW50IGZ0ZGlfaW9jdGwgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWludCAgcmV0LCBtYXNrOworCQorCWRiZygiJXMgY21kIDB4JTA0eCIsIF9fRlVOQ1RJT05fXywgY21kKTsKKworCS8qIEJhc2VkIG9uIGNvZGUgZnJvbSBhY20uYyBhbmQgb3RoZXJzICovCisJc3dpdGNoIChjbWQpIHsKKworCWNhc2UgVElPQ01CSVM6IC8qIHR1cm5zIG9uIChTZXRzKSB0aGUgbGluZXMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBtYXNrICovCisJCWRiZygiJXMgVElPQ01CSVMiLCBfX0ZVTkNUSU9OX18pOworIAkgICAgICAgIGlmIChnZXRfdXNlcihtYXNrLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKikgYXJnKSkKKwkJCXJldHVybiAtRUZBVUxUOworICAJICAgICAgICBpZiAobWFzayAmIFRJT0NNX0RUUil7CisJCQlpZiAoKHJldCA9IHNldF9kdHIocG9ydCwgSElHSCkpIDwgMCkgeworCQkJCWVycigiVXJiIHRvIHNldCBEVFIgZmFpbGVkIik7CisJCQkJcmV0dXJuKHJldCk7CisJCQl9CisJCX0KKwkJaWYgKG1hc2sgJiBUSU9DTV9SVFMpIHsKKwkJCWlmICgocmV0ID0gc2V0X3J0cyhwb3J0LCBISUdIKSkgPCAwKXsKKwkJCQllcnIoIlVyYiB0byBzZXQgUlRTIGZhaWxlZCIpOworCQkJCXJldHVybihyZXQpOworCQkJfQorCQl9CisJCXJldHVybigwKTsKKwkJYnJlYWs7CisKKwljYXNlIFRJT0NNQklDOiAvKiB0dXJucyBvZmYgKENsZWFycykgdGhlIGxpbmVzIGFzIHNwZWNpZmllZCBieSB0aGUgbWFzayAqLworCQlkYmcoIiVzIFRJT0NNQklDIiwgX19GVU5DVElPTl9fKTsKKyAJICAgICAgICBpZiAoZ2V0X3VzZXIobWFzaywgKHVuc2lnbmVkIGxvbmcgX191c2VyICopIGFyZykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKyAgCSAgICAgICAgaWYgKG1hc2sgJiBUSU9DTV9EVFIpeworCQkJaWYgKChyZXQgPSBzZXRfZHRyKHBvcnQsIExPVykpIDwgMCl7CisJCQkJZXJyKCJVcmIgdG8gdW5zZXQgRFRSIGZhaWxlZCIpOworCQkJCXJldHVybihyZXQpOworCQkJfQorCQl9CQorCQlpZiAobWFzayAmIFRJT0NNX1JUUykgeworCQkJaWYgKChyZXQgPSBzZXRfcnRzKHBvcnQsIExPVykpIDwgMCl7CisJCQkJZXJyKCJVcmIgdG8gdW5zZXQgUlRTIGZhaWxlZCIpOworCQkJCXJldHVybihyZXQpOworCQkJfQorCQl9CisJCXJldHVybigwKTsKKwkJYnJlYWs7CisKKwkJLyoKKwkJICogSSBoYWQgb3JpZ2luYWxseSBpbXBsZW1lbnRlZCBUQ1NFVHtBLFN9eyxGLFd9IGFuZAorCQkgKiBUQ0dFVHtBLFN9IGhlcmUgc2VwYXJhdGVseSwgaG93ZXZlciB3aGVuIHRlc3RpbmcgSQorCQkgKiBmb3VuZCB0aGF0IHRoZSBoaWdoZXIgbGF5ZXJzIGFjdHVhbGx5IGRvIHRoZSB0ZXJtaW9zCisJCSAqIGNvbnZlcnNpb25zIHRoZW1zZWx2ZXMgYW5kIHBhc3MgdGhlIGNhbGwgb250bworCQkgKiBmdGRpX3Npb19zZXRfdGVybWlvcy4gCisJCSAqCisJCSAqLworCisJY2FzZSBUSU9DR1NFUklBTDogLyogZ2V0cyBzZXJpYWwgcG9ydCBkYXRhICovCisJCXJldHVybiBnZXRfc2VyaWFsX2luZm8ocG9ydCwgKHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqKSBhcmcpOworCisJY2FzZSBUSU9DU1NFUklBTDogLyogc2V0cyBzZXJpYWwgcG9ydCBkYXRhICovCisJCXJldHVybiBzZXRfc2VyaWFsX2luZm8ocG9ydCwgKHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqKSBhcmcpOworCisJLyoKKwkgKiBXYWl0IGZvciBhbnkgb2YgdGhlIDQgbW9kZW0gaW5wdXRzIChEQ0QsUkksRFNSLENUUykgdG8gY2hhbmdlCisJICogLSBtYXNrIHBhc3NlZCBpbiBhcmcgZm9yIGxpbmVzIG9mIGludGVyZXN0CisJICogICAodXNlIHwnZWQgVElPQ01fUk5HL0RTUi9DRC9DVFMgZm9yIG1hc2tpbmcpCisJICogQ2FsbGVyIHNob3VsZCB1c2UgVElPQ0dJQ09VTlQgdG8gc2VlIHdoaWNoIG9uZSBpdCB3YXMuCisJICoKKwkgKiBUaGlzIGNvZGUgaXMgYm9ycm93ZWQgZnJvbSBsaW51eC9kcml2ZXJzL2NoYXIvc2VyaWFsLmMKKwkgKi8KKwljYXNlIFRJT0NNSVdBSVQ6CisJCXdoaWxlIChwcml2ICE9IE5VTEwpIHsKKwkJCWludGVycnVwdGlibGVfc2xlZXBfb24oJnByaXYtPmRlbHRhX21zcl93YWl0KTsKKwkJCS8qIHNlZSBpZiBhIHNpZ25hbCBkaWQgaXQgKi8KKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQkJZWxzZSB7CisJCQkJY2hhciBkaWZmID0gcHJpdi0+ZGlmZl9zdGF0dXM7CisKKwkJCQlpZiAoZGlmZiA9PSAwKSB7CisJCQkJCXJldHVybiAtRUlPOyAvKiBubyBjaGFuZ2UgPT4gZXJyb3IgKi8KKwkJCQl9CisKKwkJCQkvKiBDb25zdW1lIGFsbCBldmVudHMgKi8KKwkJCQlwcml2LT5kaWZmX3N0YXR1cyA9IDA7CisKKwkJCQkvKiBSZXR1cm4gMCBpZiBjYWxsZXIgd2FudGVkIHRvIGtub3cgYWJvdXQgdGhlc2UgYml0cyAqLworCQkJCWlmICggKChhcmcgJiBUSU9DTV9STkcpICYmIChkaWZmICYgRlRESV9SUzBfUkkpKSB8fAorCQkJCSAgICAgKChhcmcgJiBUSU9DTV9EU1IpICYmIChkaWZmICYgRlRESV9SUzBfRFNSKSkgfHwKKwkJCQkgICAgICgoYXJnICYgVElPQ01fQ0QpICAmJiAoZGlmZiAmIEZURElfUlMwX1JMU0QpKSB8fAorCQkJCSAgICAgKChhcmcgJiBUSU9DTV9DVFMpICYmIChkaWZmICYgRlRESV9SUzBfQ1RTKSkgKSB7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCQkvKgorCQkJCSAqIE90aGVyd2lzZSBjYWxsZXIgY2FuJ3QgY2FyZSBsZXNzIGFib3V0IHdoYXQgaGFwcGVuZWQsCisJCQkJICogYW5kIHNvIHdlIGNvbnRpbnVlIHRvIHdhaXQgZm9yIG1vcmUgZXZlbnRzLgorCQkJCSAqLworCQkJfQorCQl9CisJCXJldHVybigwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJCQorCX0KKworCisJLyogVGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgYW4gZXJyb3IgLSB0dXJucyBvdXQgdGhlIGhpZ2hlciBsYXllcnMgd2lsbCBkbyAKKwkgKiAgc29tZSBpb2N0bHMgaXRzZWxmIChzZWUgY29tbWVudCBhYm92ZSkKKwkgKi8KKwlkYmcoIiVzIGFyZyBub3Qgc3VwcG9ydGVkIC0gaXQgd2FzIDB4JTA0eCAtIGNoZWNrIC91c3IvaW5jbHVkZS9hc20vaW9jdGxzLmgiLCBfX0ZVTkNUSU9OX18sIGNtZCk7CisKKwlyZXR1cm4oLUVOT0lPQ1RMQ01EKTsKK30gLyogZnRkaV9pb2N0bCAqLworCisKK3N0YXRpYyB2b2lkIGZ0ZGlfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOworCXByaXYtPnJ4X2ZsYWdzIHw9IFRIUk9UVExFRDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7Cit9CisKKworc3RhdGljIHZvaWQgZnRkaV91bnRocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IGFjdHVhbGx5X3Rocm90dGxlZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOworCWFjdHVhbGx5X3Rocm90dGxlZCA9IHByaXYtPnJ4X2ZsYWdzICYgQUNUVUFMTFlfVEhST1RUTEVEOworCXByaXYtPnJ4X2ZsYWdzICY9IH4oVEhST1RUTEVEIHwgQUNUVUFMTFlfVEhST1RUTEVEKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7CisKKwlpZiAoYWN0dWFsbHlfdGhyb3R0bGVkKQorCQlmdGRpX3Byb2Nlc3NfcmVhZChwb3J0KTsKK30KKworc3RhdGljIGludCBfX2luaXQgZnRkaV9pbml0ICh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZmdGRpX1NJT19kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX1NJT19yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZmdGRpXzhVMjMyQU1fZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF84VTIzMkFNX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmZ0ZGlfRlQyMzJCTV9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX0ZUMjMyQk1fcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmZnRkaV9GVDIyMzJDX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfRlQyMjMyQ19yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZmdGRpX1VTQl9VSVJUX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfVVNCX1VJUlRfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmZnRkaV9IRV9USVJBMV9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX0hFX1RJUkExX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmZnRkaV9kcml2ZXIpOworCWlmIChyZXR2YWwpIAorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisKKwlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZnRkaV9IRV9USVJBMV9kZXZpY2UpOworZmFpbGVkX0hFX1RJUkExX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZnRkaV9VU0JfVUlSVF9kZXZpY2UpOworZmFpbGVkX1VTQl9VSVJUX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZnRkaV9GVDIyMzJDX2RldmljZSk7CitmYWlsZWRfRlQyMjMyQ19yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmZ0ZGlfRlQyMzJCTV9kZXZpY2UpOworZmFpbGVkX0ZUMjMyQk1fcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZmdGRpXzhVMjMyQU1fZGV2aWNlKTsKK2ZhaWxlZF84VTIzMkFNX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZnRkaV9TSU9fZGV2aWNlKTsKK2ZhaWxlZF9TSU9fcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgZnRkaV9leGl0ICh2b2lkKQoreworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwl1c2JfZGVyZWdpc3RlciAoJmZ0ZGlfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZmdGRpX0hFX1RJUkExX2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmZnRkaV9VU0JfVUlSVF9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmZ0ZGlfRlQyMjMyQ19kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmZ0ZGlfRlQyMzJCTV9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmZ0ZGlfOFUyMzJBTV9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmZ0ZGlfU0lPX2RldmljZSk7CisKK30KKworCittb2R1bGVfaW5pdChmdGRpX2luaXQpOworbW9kdWxlX2V4aXQoZnRkaV9leGl0KTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNWQ2MGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaApAQCAtMCwwICsxLDc3NyBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciB0aGUgRlRESSBVU0IgU2luZ2xlIFBvcnQgU2VyaWFsIENvbnZlcnRlciAtIAorICoga25vd24gYXMgRlRESV9TSU8gKFNlcmlhbCBJbnB1dC9PdXRwdXQgYXBwbGljYXRpb24gb2YgdGhlIGNoaXBzZXQpIAorICoKKyAqIFRoZSBleGFtcGxlIEkgaGF2ZSBpcyBrbm93biBhcyB0aGUgVVNDLTEwMDAgd2hpY2ggaXMgYXZhaWxhYmxlIGZyb20KKyAqIGh0dHA6Ly93d3cuZHNlLmNvLm56IC0gY2F0IG5vIFhINDIxNCBJdCBsb29rcyBzaW1pbGFyIHRvIHRoaXM6CisgKiBodHRwOi8vd3d3LmRhbnNkYXRhLmNvbS91c2JzZXIuaHRtIGJ1dCBJIGNhbid0IGJlIHN1cmUgVGhlcmUgYXJlIG90aGVyCisgKiBVU0MtMTAwMHMgd2hpY2ggZG9uJ3QgbG9vayBsaWtlIG15IGRldmljZSB0aG91Z2ggc28gYmV3YXJlIQorICoKKyAqIFRoZSBkZXZpY2UgaXMgYmFzZWQgb24gdGhlIEZUREkgRlQ4VTEwMEFYIGNoaXAuIEl0IGhhcyBhIERCMjUgb24gb25lIHNpZGUsIAorICogVVNCIG9uIHRoZSBvdGhlci4KKyAqCisgKiBUaGFueCB0byBGVERJIChodHRwOi8vd3d3LmZ0ZGkuY28udWspIGZvciBzbyBraW5kbHkgcHJvdmlkaW5nIGRldGFpbHMKKyAqIG9mIHRoZSBwcm90b2NvbCByZXF1aXJlZCB0byB0YWxrIHRvIHRoZSBkZXZpY2UgYW5kIG9uZ29pbmcgYXNzaXN0ZW5jZQorICogZHVyaW5nIGRldmVsb3BtZW50LgorICoKKyAqIEJpbGwgUnlkZXIgLSBicnlkZXJAc2dpLmNvbSBmb3JtZXJseSBvZiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLSB3cm90ZSB0aGUgCisgKiBGVERJX1NJTyBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBQaGlsaXBwIEf8aHJpbmcgLSBwZ0BmdXR1cmV3YXJlLmF0IC0gYWRkZWQgdGhlIERldmljZSBJRCBvZiB0aGUgVVNCIHJlbGFpcworICogZnJvbSBSdWRvbGYgR3VnbGVyCisgKgorICovCisKKyNkZWZpbmUgRlRESV9WSUQJMHgwNDAzCS8qIFZlbmRvciBJZCAqLworI2RlZmluZSBGVERJX1NJT19QSUQJMHg4MzcyCS8qIFByb2R1Y3QgSWQgU0lPIGFwcGxpY2F0aW9uIG9mIDhVMTAwQVggICovCisjZGVmaW5lIEZURElfOFUyMzJBTV9QSUQgMHg2MDAxIC8qIFNpbWlsYXIgZGV2aWNlIHRvIFNJTyBhYm92ZSAqLworI2RlZmluZSBGVERJXzhVMjMyQU1fQUxUX1BJRCAweDYwMDYgLyogRlRESSdzIGFsdGVybmF0ZSBQSUQgZm9yIGFib3ZlICovCisjZGVmaW5lIEZURElfOFUyMzJBTV9BTFRfQUxUX1BJRCAweGYzYzAgLyogRlRESSdzIHNlY29uZCBhbHRlcm5hdGUgUElEIGZvciBhYm92ZSAqLworI2RlZmluZSBGVERJXzhVMjIzMkNfUElEIDB4NjAxMCAvKiBEdWFsIGNoYW5uZWwgZGV2aWNlICovCisjZGVmaW5lIEZURElfUkVMQUlTX1BJRAkweEZBMTAgIC8qIFJlbGFpcyBkZXZpY2UgZnJvbSBSdWRvbGYgR3VnbGVyICovCisjZGVmaW5lIEZURElfTkZfUklDX1ZJRAkweDBEQ0QJLyogVmVuZG9yIElkICovCisjZGVmaW5lIEZURElfTkZfUklDX1BJRAkweDAwMDEJLyogUHJvZHVjdCBJZCAqLworCisvKiB3d3cuaXJ0cmFucy5kZSBkZXZpY2UgKi8KKyNkZWZpbmUgRlRESV9JUlRSQU5TX1BJRCAweEZDNjAgLyogUHJvZHVjdCBJZCAqLworCisvKiB3d3cuY3J5c3RhbGZvbnR6LmNvbSBkZXZpY2VzIC0gdGhhbnggZm9yIHByb3ZpZGluZyBmcmVlIGRldmljZXMgZm9yIGV2YWx1YXRpb24gISAqLworLyogdGhleSB1c2UgdGhlIGZ0ZGkgY2hpcHNldCBmb3IgdGhlIFVTQiBpbnRlcmZhY2UgYW5kIHRoZSB2ZW5kb3IgaWQgaXMgdGhlIHNhbWUgKi8KKyNkZWZpbmUgRlRESV9YRl82MzJfUElEIDB4RkMwOAkvKiA2MzI6IDE2eDIgQ2hhcmFjdGVyIERpc3BsYXkgKi8KKyNkZWZpbmUgRlRESV9YRl82MzRfUElEIDB4RkMwOQkvKiA2MzQ6IDIweDQgQ2hhcmFjdGVyIERpc3BsYXkgKi8KKyNkZWZpbmUgRlRESV9YRl81NDdfUElEIDB4RkMwQQkvKiA1NDc6IFR3byBsaW5lIERpc3BsYXkgKi8KKyNkZWZpbmUgRlRESV9YRl82MzNfUElEIDB4RkMwQgkvKiA2MzM6IDE2eDIgQ2hhcmFjdGVyIERpc3BsYXkgd2l0aCBLZXlzICovCisjZGVmaW5lIEZURElfWEZfNjMxX1BJRCAweEZDMEMJLyogNjMxOiAyMHgyIENoYXJhY3RlciBEaXNwbGF5ICovCisjZGVmaW5lIEZURElfWEZfNjM1X1BJRCAweEZDMEQJLyogNjM1OiAyMHg0IENoYXJhY3RlciBEaXNwbGF5ICovCisjZGVmaW5lIEZURElfWEZfNjQwX1BJRCAweEZDMEUJLyogNjQwOiBUd28gbGluZSBEaXNwbGF5ICovCisjZGVmaW5lIEZURElfWEZfNjQyX1BJRCAweEZDMEYJLyogNjQyOiBUd28gbGluZSBEaXNwbGF5ICovCisKKy8qIFZpZGVvIE5ldHdvcmtzIExpbWl0ZWQgLyBIb21lY2hvaWNlIGluIHRoZSBVSyB1c2UgYW4gZnRkaS1iYXNlZCBkZXZpY2UgZm9yIHRoZWlyIDFNYiAqLworLyogYnJvYWRiYW5kIGludGVybmV0IHNlcnZpY2UuICBUaGUgZm9sbG93aW5nIFBJRCBpcyBleGhpYml0ZWQgYnkgdGhlIHVzYiBkZXZpY2Ugc3VwcGxpZWQgKi8KKy8qICh0aGUgVklEIGlzIHRoZSBzdGFuZGFyZCBmdGRpIHZpZCAoRlRESV9WSUQpICovCisjZGVmaW5lIEZURElfVk5IQ1BDVVNCX0RfUElEIDB4ZmUzOCAvKiBQcm9kdWN0IElkICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgTWF0cml4IE9yYml0YWwgTENEIGRpc3BsYXlzLAorICogd2hpY2ggYXJlIHRoZSBGVDIzMkJNICggc2ltaWxhciB0byB0aGUgOFUyMzJBTSApCisgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfMF9QSUQgICAgICAweEZBMDAgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfMV9QSUQgICAgICAweEZBMDEgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfMl9QSUQgICAgICAweEZBMDIgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfM19QSUQgICAgICAweEZBMDMgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfNF9QSUQgICAgICAweEZBMDQgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfNV9QSUQgICAgICAweEZBMDUgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKyNkZWZpbmUgRlRESV9NVFhPUkJfNl9QSUQgICAgICAweEZBMDYgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KKworLyogSW50ZXJiaW9tZXRyaWNzIFVTQiBJL08gQm9hcmQgKi8KKy8qIERldmVsb3BlZCBmb3IgSW50ZXJiaW9tZXRyaWNzIGJ5IFJ1ZG9sZiBHdWdsZXIgKi8KKyNkZWZpbmUgSU5URVJCSU9NRVRSSUNTX1ZJRCAgICAgICAgICAgICAgMHgxMjA5CisjZGVmaW5lIElOVEVSQklPTUVUUklDU19JT0JPQVJEX1BJRCAgICAgIDB4MTAwMgorI2RlZmluZSBJTlRFUkJJT01FVFJJQ1NfTUlOSV9JT0JPQVJEX1BJRCAweDEwMDYKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBQZXJsZSBTeXN0ZW1zCisgKiBVbHRyYVBvcnQgVVNCIHNlcmlhbCBjb252ZXJ0ZXJzCisgKi8KKyNkZWZpbmUgRlRESV9QRVJMRV9VTFRSQVBPUlRfUElEIDB4RjBDMAkvKiBQZXJsZSBVbHRyYVBvcnQgUHJvZHVjdCBJZCAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhbHVlcyBmb3IgdGhlIFNlYWxldmVsIFNlYUxJTksrIGFkYXB0ZXJzLgorICogKE9yaWdpbmFsIGxpc3Qgc2VudCBieSBUdWFuIEhvYW5nLiAgSWFuIEFiYm90dCByZW5hbWVkIHRoZSBtYWNyb3MgYW5kCisgKiByZW1vdmVkIHNvbWUgUElEcyB0aGF0IGRvbid0IHNlZW0gdG8gbWF0Y2ggYW55IGV4aXN0aW5nIHByb2R1Y3RzLikKKyAqLworI2RlZmluZSBTRUFMRVZFTF9WSUQJCTB4MGM1MgkvKiBTZWFsZXZlbCBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjEwMV9QSUQJMHgyMTAxCS8qIFNlYUxJTksrMjMyICgyMTAxLzIxMDUpICovCisjZGVmaW5lIFNFQUxFVkVMXzIxMDJfUElECTB4MjEwMgkvKiBTZWFMSU5LKzQ4NSAoMjEwMikgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjEwM19QSUQJMHgyMTAzCS8qIFNlYUxJTksrMjMySSAoMjEwMykgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjEwNF9QSUQJMHgyMTA0CS8qIFNlYUxJTksrNDg1SSAoMjEwNCkgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjIwMV8xX1BJRAkweDIyMTEJLyogU2VhUE9SVCsyLzIzMiAoMjIwMSkgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzIyMDFfMl9QSUQJMHgyMjIxCS8qIFNlYVBPUlQrMi8yMzIgKDIyMDEpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yMjAyXzFfUElECTB4MjIxMgkvKiBTZWFQT1JUKzIvNDg1ICgyMjAyKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjIwMl8yX1BJRAkweDIyMjIJLyogU2VhUE9SVCsyLzQ4NSAoMjIwMikgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzIyMDNfMV9QSUQJMHgyMjEzCS8qIFNlYVBPUlQrMiAoMjIwMykgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzIyMDNfMl9QSUQJMHgyMjIzCS8qIFNlYVBPUlQrMiAoMjIwMykgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDFfMV9QSUQJMHgyNDExCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMSAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAxXzJfUElECTB4MjQyMQkvKiBTZWFQT1JUKzQvMjMyICgyNDAxKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwMV8zX1BJRAkweDI0MzEJLyogU2VhUE9SVCs0LzIzMiAoMjQwMSkgUG9ydCAzICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDFfNF9QSUQJMHgyNDQxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgNCAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAyXzFfUElECTB4MjQxMgkvKiBTZWFQT1JUKzQvNDg1ICgyNDAyKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwMl8yX1BJRAkweDI0MjIJLyogU2VhUE9SVCs0LzQ4NSAoMjQwMikgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzI0MDJfM19QSUQJMHgyNDMyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMyAqLworI2RlZmluZSBTRUFMRVZFTF8yNDAyXzRfUElECTB4MjQ0MgkvKiBTZWFQT1JUKzQvNDg1ICgyNDAyKSBQb3J0IDQgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwM18xX1BJRAkweDI0MTMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwM18yX1BJRAkweDI0MjMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDIgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwM18zX1BJRAkweDI0MzMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDMgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjQwM180X1BJRAkweDI0NDMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDQgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV8xX1BJRAkwWDI4MTEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfMl9QSUQJMFgyODIxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yODAxXzNfUElECTBYMjgzMQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDMgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV80X1BJRAkwWDI4NDEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA0ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfNV9QSUQJMFgyODUxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgNSAqLworI2RlZmluZSBTRUFMRVZFTF8yODAxXzZfUElECTBYMjg2MQkvKiBTZWFMSU5LKzgvMjMyICgyODAxKSBQb3J0IDYgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMV83X1BJRAkwWDI4NzEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA3ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDFfOF9QSUQJMFgyODgxCS8qIFNlYUxJTksrOC8yMzIgKDI4MDEpIFBvcnQgOCAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzFfUElECTBYMjgxMgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDEgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl8yX1BJRAkwWDI4MjIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAyICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDJfM19QSUQJMFgyODMyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgMyAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzRfUElECTBYMjg0MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDQgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl81X1BJRAkwWDI4NTIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA1ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDJfNl9QSUQJMFgyODYyCS8qIFNlYUxJTksrOC80ODUgKDI4MDIpIFBvcnQgNiAqLworI2RlZmluZSBTRUFMRVZFTF8yODAyXzdfUElECTBYMjg3MgkvKiBTZWFMSU5LKzgvNDg1ICgyODAyKSBQb3J0IDcgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwMl84X1BJRAkwWDI4ODIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA4ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfMV9QSUQJMFgyODEzCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCAxICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfMl9QSUQJMFgyODIzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgMiAqLworI2RlZmluZSBTRUFMRVZFTF8yODAzXzNfUElECTBYMjgzMyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDMgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwM180X1BJRAkwWDI4NDMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA0ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfNV9QSUQJMFgyODUzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgNSAqLworI2RlZmluZSBTRUFMRVZFTF8yODAzXzZfUElECTBYMjg2MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDYgKi8KKyNkZWZpbmUgU0VBTEVWRUxfMjgwM183X1BJRAkwWDI4NzMgCS8qIFNlYUxJTksrOCAoMjgwMykgUG9ydCA3ICovCisjZGVmaW5lIFNFQUxFVkVMXzI4MDNfOF9QSUQJMFgyODgzIAkvKiBTZWFMSU5LKzggKDI4MDMpIFBvcnQgOCAqLworCisvKgorICogRFNTLTIwIFN5bmMgU3RhdGlvbiBmb3IgU29ueSBFcmljc3NvbiBQODAwCisgKi8KKyAKKyNkZWZpbmUgRlRESV9EU1MyMF9QSUQgICAgICAgICAgMHhGQzgyICAKKworLyoKKyAqIEhvbWUgRWxlY3Ryb25pY3MgKHd3dy5ob21lLWVsZWN0cm8uY29tKSBVU0IgZ2FkZ2V0cworICovCisjZGVmaW5lIEZURElfSEVfVElSQTFfUElECTB4RkE3OAkvKiBUaXJhLTEgSVIgdHJhbmNlaXZlciAqLworCisvKiBVU0ItVUlSVCAtIEFuIGluZnJhcmVkIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciB1c2luZyB0aGUgOFUyMzJBTSBjaGlwICovCisvKiBodHRwOi8vaG9tZS5lYXJ0aGxpbmsubmV0L35qcmhlZXMvVVNCVUlSVC9pbmRleC5odG0gKi8KKyNkZWZpbmUgRlRESV9VU0JfVUlSVF9QSUQJMHhGODUwCS8qIFByb2R1Y3QgSWQgKi8KKworLyogRUxWIFVTQiBNb2R1bGUgVU8xMDAgKFBJRCBzZW50IGJ5IFN0ZWZhbiBGcmluZ3MpICovCisjZGVmaW5lIEZURElfRUxWX1VPMTAwX1BJRAkweEZCNTgJLyogUHJvZHVjdCBJZCAqLworCisvKgorICogRGVmaW5pdGlvbnMgZm9yIElEIFRFQ0ggKHd3dy5pZHQtbmV0LmNvbSkgZGV2aWNlcworICovCisjZGVmaW5lIElEVEVDSF9WSUQJCTB4MEFDRAkvKiBJRCBURUNIIFZlbmRvciBJRCAqLworI2RlZmluZSBJRFRFQ0hfSURUMTIyMVVfUElECTB4MDMwMAkvKiBJRFQxMjIxVSBVU0IgdG8gUlMtMjMyIGFkYXB0ZXIgKi8KKworLyoKKyAqIERlZmluaXRpb25zIGZvciBPbW5pZGlyZWN0aW9uYWwgQ29udHJvbCBUZWNobm9sb2d5LCBJbmMuIGRldmljZXMKKyAqLworI2RlZmluZSBPQ1RfVklECQkJMHgwQjM5CS8qIE9DVCB2ZW5kb3IgSUQgKi8KKy8qIE5vdGU6IE9DVCBVUzEwMSBpcyBhbHNvIHJlYmFkZ2VkIGFzIERpY2sgU21pdGggRWxlY3Ryb25pY3MgKE5aKSBYSDYzODEgKi8KKy8qIEFsc28gcmViYWRnZWQgYXMgU0lJRyBJbmMuIG1vZGVsIFVTMjMwOCAqLworI2RlZmluZSBPQ1RfVVMxMDFfUElECQkweDA0MjEJLyogT0NUIFVTMTAxIFVTQiB0byBSUy0yMzIgKi8KKworLyogYW4gaW5mcmFyZWQgcmVjZWl2ZXIgZm9yIHVzZXIgYWNjZXNzIGNvbnRyb2wgd2l0aCBJUiB0YWdzICovCisjZGVmaW5lIEZURElfUElFR1JPVVBfUElECTB4RjIwOAkvKiBQcm9kdWN0IElkICovCisKKy8qCisgKiBQcm90ZWdvIHByb2R1Y3QgaWRzCisgKi8KKyNkZWZpbmUgUFJPVEVHT19TUEVDSUFMXzEJMHhGQzcwCS8qIHNwZWNpYWwvdW5rbm93biBkZXZpY2UgKi8KKyNkZWZpbmUgUFJPVEVHT19SMlgwCQkweEZDNzEJLyogUjIwMC1VU0IgVFJORyB1bml0IChSMjEwLCBSMjIwLCBhbmQgUjIzMCkgKi8KKyNkZWZpbmUgUFJPVEVHT19TUEVDSUFMXzMJMHhGQzcyCS8qIHNwZWNpYWwvdW5rbm93biBkZXZpY2UgKi8KKyNkZWZpbmUgUFJPVEVHT19TUEVDSUFMXzQJMHhGQzczCS8qIHNwZWNpYWwvdW5rbm93biBkZXZpY2UgKi8KKworLyoKKyAqIEd1ZGUgQW5hbG9nLSB1bmQgRGlnaXRhbHN5c3RlbWUgR21iSAorICovCisjZGVmaW5lIEZURElfR1VERUFEU19FODA4X1BJRCAgICAweEU4MDgKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MDlfUElEICAgIDB4RTgwOQorI2RlZmluZSBGVERJX0dVREVBRFNfRTgwQV9QSUQgICAgMHhFODBBCisjZGVmaW5lIEZURElfR1VERUFEU19FODBCX1BJRCAgICAweEU4MEIKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MENfUElEICAgIDB4RTgwQworI2RlZmluZSBGVERJX0dVREVBRFNfRTgwRF9QSUQgICAgMHhFODBECisjZGVmaW5lIEZURElfR1VERUFEU19FODBFX1BJRCAgICAweEU4MEUKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4MEZfUElEICAgIDB4RTgwRgorI2RlZmluZSBGVERJX0dVREVBRFNfRTg4OF9QSUQgICAgMHhFODg4ICAvKiBFeHBlcnQgSVNETiBDb250cm9sIFVTQiAqLworI2RlZmluZSBGVERJX0dVREVBRFNfRTg4OV9QSUQgICAgMHhFODg5ICAvKiBVU0IgUlMtMjMyIE9wdG9CcmlkZ2UgKi8KKyNkZWZpbmUgRlRESV9HVURFQURTX0U4OEFfUElEICAgIDB4RTg4QQorI2RlZmluZSBGVERJX0dVREVBRFNfRTg4Ql9QSUQgICAgMHhFODhCCisjZGVmaW5lIEZURElfR1VERUFEU19FODhDX1BJRCAgICAweEU4OEMKKyNkZWZpbmUgRlRESV9HVURFQURTX0U4OERfUElEICAgIDB4RTg4RAorI2RlZmluZSBGVERJX0dVREVBRFNfRTg4RV9QSUQgICAgMHhFODhFCisjZGVmaW5lIEZURElfR1VERUFEU19FODhGX1BJRCAgICAweEU4OEYKKworLyoKKyAqIExpbnggVGVjaG5vbG9naWVzIHByb2R1Y3QgaWRzCisgKi8KKyNkZWZpbmUgTElOWF9TRE1VU0JRU1NfUElECTB4RjQ0OAkvKiBMaW54IFNETS1VU0ItUVMtUyAqLworI2RlZmluZSBMSU5YX01BU1RFUkRFVkVMMl9QSUQgICAweEY0NDkgICAvKiBMaW54IE1hc3RlciBEZXZlbG9wbWVudCAyLjAgKi8KKyNkZWZpbmUgTElOWF9GVVRVUkVfMF9QSUQgICAweEY0NEEgICAvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KKyNkZWZpbmUgTElOWF9GVVRVUkVfMV9QSUQgICAweEY0NEIgICAvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KKyNkZWZpbmUgTElOWF9GVVRVUkVfMl9QSUQgICAweEY0NEMgICAvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KKworLyogQ0NTIEluYy4gSUNEVS9JQ0RVNDAgcHJvZHVjdCBJRCAtIHRoZSBGVDIzMkJNIGlzIHVzZWQgaW4gYW4gaW4tY2lyY3VpdC1kZWJ1Z2dlciAqLworLyogdW5pdCBmb3IgUElDMTYncy9QSUMxOCdzICovCisjZGVmaW5lIEZURElfQ0NTSUNEVTIwXzBfUElEICAgIDB4RjlEMCAgICAgCisjZGVmaW5lIEZURElfQ0NTSUNEVTQwXzFfUElEICAgIDB4RjlEMSAgICAgCisKKy8qIEluc2lkZSBBY2Nlc3NvIGNvbnRhY3RsZXNzIHJlYWRlciAoaHR0cDovL3d3dy5pbnNpZGVmci5jb20pICovCisjZGVmaW5lIElOU0lERV9BQ0NFU1NPCQkweEZBRDAKKworLyoKKyAqIEludHJlcGlkIENvbnRyb2wgU3lzdGVtcyAoaHR0cDovL3d3dy5pbnRyZXBpZGNzLmNvbS8pIFZhbHVlQ0FOIGFuZCBOZW9WSQorICovCisjZGVmaW5lIElOVFJFUElEX1ZJRAkJMHgwOTNDCisjZGVmaW5lIElOVFJFUElEX1ZBTFVFQ0FOX1BJRAkweDA2MDEKKyNkZWZpbmUgSU5UUkVQSURfTkVPVklfUElECTB4MDcwMQorCisvKgorICogRmFsY29tIFdpcmVsZXNzIENvbW11bmljYXRpb25zIEdtYkgKKyAqLworI2RlZmluZSBGQUxDT01fVklECQkweDBGOTQJLyogVmVuZG9yIElkICovCisjZGVmaW5lIEZBTENPTV9UV0lTVF9QSUQJMHgwMDAxCS8qIEZhbGNvbSBUd2lzdCBVU0IgR1BSUyBtb2RlbSAqLworCisvKgorICogU1VVTlRPIHByb2R1Y3QgaWRzCisgKi8KKyNkZWZpbmUgRlRESV9TVVVOVE9fU1BPUlRTX1BJRAkweEY2ODAJLyogU3V1bnRvIFNwb3J0cyBpbnN0cnVtZW50ICovCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgQiZCIEVsZWN0cm9uaWNzIHByb2R1Y3RzLgorICovCisjZGVmaW5lIEJBTkRCX1ZJRAkJMHgwODU2CS8qIEImQiBFbGVjdHJvbmljcyBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgQkFOREJfVVNPVEw0X1BJRAkweEFDMDEJLyogVVNPVEw0IElzb2xhdGVkIFJTLTQ4NSBDb252ZXJ0ZXIgKi8KKyNkZWZpbmUgQkFOREJfVVNUTDRfUElECQkweEFDMDIJLyogVVNUTDQgUlMtNDg1IENvbnZlcnRlciAqLworI2RlZmluZSBCQU5EQl9VU085TUwyX1BJRAkweEFDMDMJLyogVVNPOU1MMiBJc29sYXRlZCBSUy0yMzIgQ29udmVydGVyICovCisKKy8qCisgKiBSTSBNaWNoYWVsaWRlcyBDQU52aWV3IFVTQiAoaHR0cDovL3d3dy5ybWNhbi5jb20pCisgKiBDQU4gZmlsZWRidXMgaW50ZXJmYWNlIGFkYXB0ZXIsIGFkZGFkIGJ5IHBvcnQgR21iSCB3d3cucG9ydC5kZSkKKyAqLworI2RlZmluZSBGVERJX1JNX1ZJRAkJMHgwNDAzCS8qIFZlbmRvciAgSWQgKi8KKyNkZWZpbmUgRlRESV9STUNBTlZJRVdfUElECTB4ZmQ2MAkvKiBQcm9kdWN0IElkICovCisKKy8qCisgKiBFVkVSIEVjbyBQcm8gVVBTIChodHRwOi8vd3d3LmV2ZXIuY29tLnBsLykKKyAqLworCisjZGVmaW5lCUVWRVJfRUNPX1BST19DRFMJMHhlNTIwCS8qIFJTLTIzMiBjb252ZXJ0ZXIgKi8KKworLyogQ29tbWFuZHMgKi8KKyNkZWZpbmUgRlRESV9TSU9fUkVTRVQgCQkwIC8qIFJlc2V0IHRoZSBwb3J0ICovCisjZGVmaW5lIEZURElfU0lPX01PREVNX0NUUkwgCTEgLyogU2V0IHRoZSBtb2RlbSBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIEZURElfU0lPX1NFVF9GTE9XX0NUUkwJMiAvKiBTZXQgZmxvdyBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIEZURElfU0lPX1NFVF9CQVVEX1JBVEUJMyAvKiBTZXQgYmF1ZCByYXRlICovCisjZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBCTQgLyogU2V0IHRoZSBkYXRhIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgcG9ydCAqLworI2RlZmluZSBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTCTUgLyogUmV0cmlldmUgY3VycmVudCB2YWx1ZSBvZiBtb2Rlcm4gc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIEZURElfU0lPX1NFVF9FVkVOVF9DSEFSCTYgLyogU2V0IHRoZSBldmVudCBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgRlRESV9TSU9fU0VUX0VSUk9SX0NIQVIJNyAvKiBTZXQgdGhlIGVycm9yIGNoYXJhY3RlciAqLworI2RlZmluZSBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUgk5IC8qIFNldCB0aGUgbGF0ZW5jeSB0aW1lciAqLworI2RlZmluZSBGVERJX1NJT19HRVRfTEFURU5DWV9USU1FUgkxMCAvKiBHZXQgdGhlIGxhdGVuY3kgdGltZXIgKi8KKworLyogUG9ydCBpbnRlcmZhY2UgY29kZSBmb3IgRlQyMjMyQyAqLworI2RlZmluZSBJTlRFUkZBQ0VfQQkJMQorI2RlZmluZSBJTlRFUkZBQ0VfQgkJMgorCisKKy8qCisgKiAgIEJtUmVxdWVzdFR5cGU6ICAxMTAwIDAwMDBiCisgKiAgIGJSZXF1ZXN0OiAgICAgICBGVERJX0UyX1JFQUQKKyAqICAgd1ZhbHVlOiAgICAgICAgIDAKKyAqICAgd0luZGV4OiAgICAgICAgIEFkZHJlc3Mgb2Ygd29yZCB0byByZWFkCisgKiAgIHdMZW5ndGg6ICAgICAgICAyCisgKiAgIERhdGE6ICAgICAgICAgICBXaWxsIHJldHVybiBhIHdvcmQgb2YgZGF0YSBmcm9tIEUyQWRkcmVzcworICoKKyAqLworCisvKiBQb3J0IElkZW50aWZpZXIgVGFibGUgKi8KKyNkZWZpbmUgUElUX0RFRkFVTFQgCQkwIC8qIFNJT0EgKi8KKyNkZWZpbmUgUElUX1NJT0EJCTEgLyogU0lPQSAqLworLyogVGhlIGRldmljZSB0aGlzIGRyaXZlciBpcyB0ZXN0ZWQgd2l0aCBvbmUgaGFzIG9ubHkgb25lIHBvcnQgKi8KKyNkZWZpbmUgUElUX1NJT0IJCTIgLyogU0lPQiAqLworI2RlZmluZSBQSVRfUEFSQUxMRUwJCTMgLyogUGFyYWxsZWwgKi8KKworLyogRlRESV9TSU9fUkVTRVQgKi8KKyNkZWZpbmUgRlRESV9TSU9fUkVTRVRfUkVRVUVTVCBGVERJX1NJT19SRVNFVAorI2RlZmluZSBGVERJX1NJT19SRVNFVF9SRVFVRVNUX1RZUEUgMHg0MAorI2RlZmluZSBGVERJX1NJT19SRVNFVF9TSU8gMAorI2RlZmluZSBGVERJX1NJT19SRVNFVF9QVVJHRV9SWCAxCisjZGVmaW5lIEZURElfU0lPX1JFU0VUX1BVUkdFX1RYIDIKKworLyoKKyAqIEJtUmVxdWVzdFR5cGU6ICAwMTAwIDAwMDBCCisgKiBiUmVxdWVzdDogICAgICAgRlRESV9TSU9fUkVTRVQKKyAqIHdWYWx1ZTogICAgICAgICBDb250cm9sIFZhbHVlIAorICogICAgICAgICAgICAgICAgICAgMCA9IFJlc2V0IFNJTworICogICAgICAgICAgICAgICAgICAgMSA9IFB1cmdlIFJYIGJ1ZmZlcgorICogICAgICAgICAgICAgICAgICAgMiA9IFB1cmdlIFRYIGJ1ZmZlcgorICogd0luZGV4OiAgICAgICAgIFBvcnQKKyAqIHdMZW5ndGg6ICAgICAgICAwCisgKiBEYXRhOiAgICAgICAgICAgTm9uZQorICoKKyAqIFRoZSBSZXNldCBTSU8gY29tbWFuZCBoYXMgdGhpcyBlZmZlY3Q6CisgKgorICogICAgU2V0cyBmbG93IGNvbnRyb2wgc2V0IHRvICdub25lJworICogICAgRXZlbnQgY2hhciA9ICQwRAorICogICAgRXZlbnQgdHJpZ2dlciA9IGRpc2FibGVkCisgKiAgICBQdXJnZSBSWCBidWZmZXIKKyAqICAgIFB1cmdlIFRYIGJ1ZmZlcgorICogICAgQ2xlYXIgRFRSCisgKiAgICBDbGVhciBSVFMKKyAqICAgIGJhdWQgYW5kIGRhdGEgZm9ybWF0IG5vdCByZXNldAorICoKKyAqIFRoZSBQdXJnZSBSWCBhbmQgVFggYnVmZmVyIGNvbW1hbmRzIGFmZmVjdCBub3RoaW5nIGV4Y2VwdCB0aGUgYnVmZmVycworICoKKyAgICovCisKKy8qIEZURElfU0lPX1NFVF9CQVVEUkFURSAqLworI2RlZmluZSBGVERJX1NJT19TRVRfQkFVRFJBVEVfUkVRVUVTVF9UWVBFIDB4NDAKKyNkZWZpbmUgRlRESV9TSU9fU0VUX0JBVURSQVRFX1JFUVVFU1QgMworCisvKgorICogQm1SZXF1ZXN0VHlwZTogIDAxMDAgMDAwMEIKKyAqIGJSZXF1ZXN0OiAgICAgICBGVERJX1NJT19TRVRfQkFVRFJBVEUKKyAqIHdWYWx1ZTogICAgICAgICBCYXVkRGl2aXNvciB2YWx1ZSAtIHNlZSBiZWxvdworICogd0luZGV4OiAgICAgICAgIFBvcnQKKyAqIHdMZW5ndGg6ICAgICAgICAwCisgKiBEYXRhOiAgICAgICAgICAgTm9uZQorICogVGhlIEJhdWREaXZpc29yIHZhbHVlcyBhcmUgY2FsY3VsYXRlZCBhcyBmb2xsb3dzOgorICogLSBCYXNlQ2xvY2sgaXMgZWl0aGVyIDEyMDAwMDAwIG9yIDQ4MDAwMDAwIGRlcGVuZGluZyBvbiB0aGUgZGV2aWNlLiBGSVhNRTogSSB3aXNoCisgKiAgIEkga25ldyBob3cgdG8gZGV0ZWN0IG9sZCBjaGlwcyB0byBzZWxlY3QgcHJvcGVyIGJhc2UgY2xvY2shCisgKiAtIEJhdWREaXZpc29yIGlzIGEgZml4ZWQgcG9pbnQgbnVtYmVyIGVuY29kZWQgaW4gYSBmdW5ueSB3YXkuCisgKiAgICgtLVdST05HIFdBWSBPRiBUSElOS0lORy0tKQorICogICBCYXVkRGl2aXNvciBpcyBhIGZpeGVkIHBvaW50IG51bWJlciBlbmNvZGVkIHdpdGggZm9sbG93aW5nIGJpdCB3ZWlnaHM6CisgKiAgICgtMikoLTEpKDEzLi4wKS4gSXQgaXMgYSByYWRpY2FsIHdpdGggYSBkZW5vbWluYXRvciBvZiA0LCBzbyB2YWx1ZXMKKyAqICAgZW5kIHdpdGggMC4wICgwMC4uLiksIDAuMjUgKDEwLi4uKSwgMC41ICgwMS4uLiksIGFuZCAwLjc1ICgxMS4uLikuCisgKiAgICgtLVRIRSBSRUFMSVRZLS0pCisgKiAgIFRoZSBib3RoLWJpdHMtc2V0IGhhcyBxdWl0ZSBkaWZmZXJlbnQgbWVhbmluZyBmcm9tIDAuNzUgLSB0aGUgY2hpcCBkZXNpZ25lcnMKKyAqICAgaGF2ZSBkZWNpZGVkIGl0IHRvIG1lYW4gMC4xMjUgaW5zdGVhZCBvZiAwLjc1LgorICogICBUaGlzIGluZm8gbG9va2VkIHVwIGluIEZUREkgYXBwbGljYXRpb24gbm90ZSAiRlQ4VTIzMiBERVZJQ0VTIFwgRGF0YSBSYXRlcworICogICBhbmQgRmxvdyBDb250cm9sIENvbnNpZGVyYXRpb24gZm9yIFVTQiB0byBSUzIzMiIuCisgKiAtIEJhdWREaXZpc29yID0gKEJhc2VDbG9jayAvIDE2KSAvIEJhdWRSYXRlLCB3aGVyZSB0aGUgKD0pIG9wZXJhdGlvbiBzaG91bGQKKyAqICAgYXV0b21hZ2ljYWxseSByZS1lbmNvZGUgdGhlIHJlc3VsdGluZyB2YWx1ZSB0byB0YWtlIGZyYWN0aW9ucyBpbnRvIGNvbnNpZGVyYXRpb24uCisgKiBBcyBhbGwgdmFsdWVzIGFyZSBpbnRlZ2Vycywgc29tZSBiaXQgdHdpZGRsaW5nIGlzIGluIG9yZGVyOgorICogICBCYXVkRGl2aXNvciA9IChCYXNlQ2xvY2sgLyAxNiAvIEJhdWRSYXRlKSB8CisgKiAgICgoKEJhc2VDbG9jayAvIDIgLyBCYXVkUmF0ZSkgJiA0KSA/IDB4NDAwMCAgICAvLyAwLjUKKyAqICAgIDogKChCYXNlQ2xvY2sgLyAyIC8gQmF1ZFJhdGUpICYgMikgPyAweDgwMDAgIC8vIDAuMjUKKyAqICAgIDogKChCYXNlQ2xvY2sgLyAyIC8gQmF1ZFJhdGUpICYgMSkgPyAweGMwMDAgIC8vIDAuMTI1CisgKiAgICA6IDApCisgKgorICogRm9yIHRoZSBGVDIzMkJNLCBhIDE3dGggZGl2aXNvciBiaXQgd2FzIGludHJvZHVjZWQgdG8gZW5jb2RlIHRoZSBtdWx0aXBsZXMKKyAqIG9mIDAuMTI1IG1pc3NpbmcgZnJvbSB0aGUgRlQ4VTIzMkFNLiAgQml0cyAxNiB0byAxNCBhcmUgY29kZWQgYXMgZm9sbG93cworICogKHRoZSBmaXJzdCBmb3VyIGNvZGVzIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIEZUOFUyMzJBTSwgd2hlcmUgYml0IDE2IGlzCisgKiBhbHdheXMgMCk6CisgKiAgIDAwMCAtIGFkZCAuMDAwIHRvIGRpdmlzb3IKKyAqICAgMDAxIC0gYWRkIC41MDAgdG8gZGl2aXNvcgorICogICAwMTAgLSBhZGQgLjI1MCB0byBkaXZpc29yCisgKiAgIDAxMSAtIGFkZCAuMTI1IHRvIGRpdmlzb3IKKyAqICAgMTAwIC0gYWRkIC4zNzUgdG8gZGl2aXNvcgorICogICAxMDEgLSBhZGQgLjYyNSB0byBkaXZpc29yCisgKiAgIDExMCAtIGFkZCAuNzUwIHRvIGRpdmlzb3IKKyAqICAgMTExIC0gYWRkIC44NzUgdG8gZGl2aXNvcgorICogQml0cyAxNSB0byAwIG9mIHRoZSAxNy1iaXQgZGl2aXNvciBhcmUgcGxhY2VkIGluIHRoZSB1cmIgdmFsdWUuICBCaXQgMTYgaXMgCisgKiBwbGFjZWQgaW4gYml0IDAgb2YgdGhlIHVyYiBpbmRleC4KKyAqCisgKiBOb3RlIHRoYXQgdGhlcmUgYXJlIGEgY291cGxlIG9mIHNwZWNpYWwgY2FzZXMgdG8gc3VwcG9ydCB0aGUgaGlnaGVzdCBiYXVkCisgKiByYXRlcy4gIElmIHRoZSBjYWxjdWxhdGVkIGRpdmlzb3IgdmFsdWUgaXMgMSwgdGhpcyBuZWVkcyB0byBiZSByZXBsYWNlZCB3aXRoCisgKiAwLiAgQWRkaXRpb25hbGx5IGZvciB0aGUgRlQyMzJCTSwgaWYgdGhlIGNhbGN1bGF0ZWQgZGl2aXNvciB2YWx1ZSBpcyAweDQwMDEKKyAqICgxLjUpLCB0aGlzIG5lZWRzIHRvIGJlIHJlcGxhY2VkIHdpdGggMHgwMDAxICgxKSAoYnV0IHRoaXMgZGl2aXNvciB2YWx1ZSBpcworICogbm90IHN1cHBvcnRlZCBieSB0aGUgRlQ4VTIzMkFNKS4KKyAqLworCit0eXBlZGVmIGVudW0geworCVNJTyA9IDEsCisJRlQ4VTIzMkFNID0gMiwKKwlGVDIzMkJNID0gMywKKwlGVDIyMzJDID0gNCwKK30gZnRkaV9jaGlwX3R5cGVfdDsKKwordHlwZWRlZiBlbnVtIHsKKyBmdGRpX3Npb19iMzAwID0gMCwgCisgZnRkaV9zaW9fYjYwMCA9IDEsIAorIGZ0ZGlfc2lvX2IxMjAwID0gMiwKKyBmdGRpX3Npb19iMjQwMCA9IDMsCisgZnRkaV9zaW9fYjQ4MDAgPSA0LAorIGZ0ZGlfc2lvX2I5NjAwID0gNSwKKyBmdGRpX3Npb19iMTkyMDAgPSA2LAorIGZ0ZGlfc2lvX2IzODQwMCA9IDcsCisgZnRkaV9zaW9fYjU3NjAwID0gOCwKKyBmdGRpX3Npb19iMTE1MjAwID0gOQorfSBGVERJX1NJT19iYXVkcmF0ZV90IDsKKworLyoKKyAqIFRoZSBmdGRpXzhVMjMyQU1feHhNSHpfYnl5eSBjb25zdGFudHMgaGF2ZSBiZWVuIHJlbW92ZWQuIFRoZSBlbmNvZGVkIGRpdmlzb3IgdmFsdWVzCisgKiBhcmUgY2FsY3VsYXRlZCBpbnRlcm5hbGx5LgorICovCisKKyNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfUkVRVUVTVCBGVERJX1NJT19TRVRfREFUQQorI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9SRVFVRVNUX1RZUEUgMHg0MAorI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9QQVJJVFlfTk9ORSAoMHgwIDw8IDggKQorI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9QQVJJVFlfT0REICgweDEgPDwgOCApCisjZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1BBUklUWV9FVkVOICgweDIgPDwgOCApCisjZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1BBUklUWV9NQVJLICgweDMgPDwgOCApCisjZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1BBUklUWV9TUEFDRSAoMHg0IDw8IDggKQorI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9TVE9QX0JJVFNfMSAoMHgwIDw8IDExICkKKyNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfU1RPUF9CSVRTXzE1ICgweDEgPDwgMTEgKQorI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9TVE9QX0JJVFNfMiAoMHgyIDw8IDExICkKKyNkZWZpbmUgRlRESV9TSU9fU0VUX0JSRUFLICgweDEgPDwgMTQpCisvKiBGVERJX1NJT19TRVRfREFUQSAqLworCisvKgorICogQm1SZXF1ZXN0VHlwZTogIDAxMDAgMDAwMEIgCisgKiBiUmVxdWVzdDogICAgICAgRlRESV9TSU9fU0VUX0RBVEEKKyAqIHdWYWx1ZTogICAgICAgICBEYXRhIGNoYXJhY3RlcmlzdGljcyAoc2VlIGJlbG93KQorICogd0luZGV4OiAgICAgICAgIFBvcnQKKyAqIHdMZW5ndGg6ICAgICAgICAwCisgKiBEYXRhOiAgICAgICAgICAgTm8KKyAqCisgKiBEYXRhIGNoYXJhY3RlcmlzdGljcworICoKKyAqICAgQjAuLjcgICBOdW1iZXIgb2YgZGF0YSBiaXRzCisgKiAgIEI4Li4xMCAgUGFyaXR5CisgKiAgICAgICAgICAgMCA9IE5vbmUKKyAqICAgICAgICAgICAxID0gT2RkCisgKiAgICAgICAgICAgMiA9IEV2ZW4KKyAqICAgICAgICAgICAzID0gTWFyaworICogICAgICAgICAgIDQgPSBTcGFjZQorICogICBCMTEuLjEzIFN0b3AgQml0cworICogICAgICAgICAgIDAgPSAxCisgKiAgICAgICAgICAgMSA9IDEuNQorICogICAgICAgICAgIDIgPSAyCisgKiAgIEIxNAorICogICAgICAgICAgIDEgPSBUWCBPTiAoYnJlYWspCisgKiAgICAgICAgICAgMCA9IFRYIE9GRiAobm9ybWFsIHN0YXRlKQorICogICBCMTUgUmVzZXJ2ZWQKKyAqCisgKi8KKworCisKKy8qIEZURElfU0lPX01PREVNX0NUUkwgKi8KKyNkZWZpbmUgRlRESV9TSU9fU0VUX01PREVNX0NUUkxfUkVRVUVTVF9UWVBFIDB4NDAKKyNkZWZpbmUgRlRESV9TSU9fU0VUX01PREVNX0NUUkxfUkVRVUVTVCBGVERJX1NJT19NT0RFTV9DVFJMCisKKy8qIAorICogQm1SZXF1ZXN0VHlwZTogICAwMTAwIDAwMDBCCisgKiBiUmVxdWVzdDogICAgICAgIEZURElfU0lPX01PREVNX0NUUkwKKyAqIHdWYWx1ZTogICAgICAgICAgQ29udHJvbFZhbHVlIChzZWUgYmVsb3cpCisgKiB3SW5kZXg6ICAgICAgICAgIFBvcnQKKyAqIHdMZW5ndGg6ICAgICAgICAgMAorICogRGF0YTogICAgICAgICAgICBOb25lCisgKgorICogTk9URTogSWYgdGhlIGRldmljZSBpcyBpbiBSVFMvQ1RTIGZsb3cgY29udHJvbCwgdGhlIFJUUyBzZXQgYnkgdGhpcworICogY29tbWFuZCB3aWxsIGJlIElHTk9SRUQgd2l0aG91dCBhbiBlcnJvciBiZWluZyByZXR1cm5lZAorICogQWxzbyAtIHlvdSBjYW4gbm90IHNldCBEVFIgYW5kIFJUUyB3aXRoIG9uZSBjb250cm9sIG1lc3NhZ2UKKyAqLworCisjZGVmaW5lIEZURElfU0lPX1NFVF9EVFJfTUFTSyAweDEKKyNkZWZpbmUgRlRESV9TSU9fU0VUX0RUUl9ISUdIICggMSB8ICggRlRESV9TSU9fU0VUX0RUUl9NQVNLICA8PCA4KSkKKyNkZWZpbmUgRlRESV9TSU9fU0VUX0RUUl9MT1cgICggMCB8ICggRlRESV9TSU9fU0VUX0RUUl9NQVNLICA8PCA4KSkKKyNkZWZpbmUgRlRESV9TSU9fU0VUX1JUU19NQVNLIDB4MgorI2RlZmluZSBGVERJX1NJT19TRVRfUlRTX0hJR0ggKCAyIHwgKCBGVERJX1NJT19TRVRfUlRTX01BU0sgPDwgOCApKQorI2RlZmluZSBGVERJX1NJT19TRVRfUlRTX0xPVyAoIDAgfCAoIEZURElfU0lPX1NFVF9SVFNfTUFTSyA8PCA4ICkpCisKKy8qCisgKiBDb250cm9sVmFsdWUKKyAqIEIwICAgIERUUiBzdGF0ZQorICogICAgICAgICAgMCA9IHJlc2V0CisgKiAgICAgICAgICAxID0gc2V0CisgKiBCMSAgICBSVFMgc3RhdGUKKyAqICAgICAgICAgIDAgPSByZXNldAorICogICAgICAgICAgMSA9IHNldAorICogQjIuLjcgUmVzZXJ2ZWQKKyAqIEI4ICAgIERUUiBzdGF0ZSBlbmFibGUKKyAqICAgICAgICAgIDAgPSBpZ25vcmUKKyAqICAgICAgICAgIDEgPSB1c2UgRFRSIHN0YXRlCisgKiBCOSAgICBSVFMgc3RhdGUgZW5hYmxlCisgKiAgICAgICAgICAwID0gaWdub3JlCisgKiAgICAgICAgICAxID0gdXNlIFJUUyBzdGF0ZQorICogQjEwLi4xNSBSZXNlcnZlZAorICovCisKKy8qIEZURElfU0lPX1NFVF9GTE9XX0NUUkwgKi8KKyNkZWZpbmUgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUX1RZUEUgMHg0MAorI2RlZmluZSBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1QgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTAorI2RlZmluZSBGVERJX1NJT19ESVNBQkxFX0ZMT1dfQ1RSTCAweDAgCisjZGVmaW5lIEZURElfU0lPX1JUU19DVFNfSFMgKDB4MSA8PCA4KQorI2RlZmluZSBGVERJX1NJT19EVFJfRFNSX0hTICgweDIgPDwgOCkKKyNkZWZpbmUgRlRESV9TSU9fWE9OX1hPRkZfSFMgKDB4NCA8PCA4KQorLyoKKyAqICAgQm1SZXF1ZXN0VHlwZTogIDAxMDAgMDAwMGIKKyAqICAgYlJlcXVlc3Q6ICAgICAgIEZURElfU0lPX1NFVF9GTE9XX0NUUkwKKyAqICAgd1ZhbHVlOiAgICAgICAgIFhvZmYvWG9uCisgKiAgIHdJbmRleDogICAgICAgICBQcm90b2NvbC9Qb3J0IC0gaEluZGV4IGlzIHByb3RvY2wgLyBsSW5kZXggaXMgcG9ydAorICogICB3TGVuZ3RoOiAgICAgICAgMCAKKyAqICAgRGF0YTogICAgICAgICAgIE5vbmUKKyAqCisgKiBoSW5kZXggcHJvdG9jb2wgaXM6CisgKiAgIEIwIE91dHB1dCBoYW5kc2hha2luZyB1c2luZyBSVFMvQ1RTCisgKiAgICAgICAwID0gZGlzYWJsZWQKKyAqICAgICAgIDEgPSBlbmFibGVkCisgKiAgIEIxIE91dHB1dCBoYW5kc2hha2luZyB1c2luZyBEVFIvRFNSCisgKiAgICAgICAwID0gZGlzYWJsZWQKKyAqICAgICAgIDEgPSBlbmFibGVkCisgKiAgIEIyIFhvbi9Yb2ZmIGhhbmRzaGFraW5nCisgKiAgICAgICAwID0gZGlzYWJsZWQKKyAqICAgICAgIDEgPSBlbmFibGVkCisgKgorICogQSB2YWx1ZSBvZiB6ZXJvIGluIHRoZSBoSW5kZXggZmllbGQgZGlzYWJsZXMgaGFuZHNoYWtpbmcKKyAqCisgKiBJZiBYb24vWG9mZiBoYW5kc2hha2luZyBpcyBzcGVjaWZpZWQsIHRoZSBoVmFsdWUgZmllbGQgc2hvdWxkIGNvbnRhaW4gdGhlIFhPRkYgY2hhcmFjdGVyIAorICogYW5kIHRoZSBsVmFsdWUgZmllbGQgY29udGFpbnMgdGhlIFhPTiBjaGFyYWN0ZXIuCisgKi8gIAorIAorLyoKKyAqIEZURElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSCisgKgorICogU2V0IHRoZSB0aW1lb3V0IGludGVydmFsLiBUaGUgRlRESSBjb2xsZWN0cyBkYXRhIGZyb20gdGhlIHNsYXZlCisgKiBkZXZpY2UsIHRyYW5zbWl0dGluZyBpdCB0byB0aGUgaG9zdCB3aGVuIGVpdGhlciBBKSA2MiBieXRlcyBhcmUKKyAqIHJlY2VpdmVkLCBvciBCKSB0aGUgdGltZW91dCBpbnRlcnZhbCBoYXMgZWxhcHNlZCBhbmQgdGhlIGJ1ZmZlcgorICogY29udGFpbnMgYXQgbGVhc3QgMSBieXRlLiAgU2V0dGluZyB0aGlzIHZhbHVlIHRvIGEgc21hbGwgbnVtYmVyCisgKiBjYW4gZHJhbWF0aWNhbGx5IGltcHJvdmUgcGVyZm9ybWFuY2UgZm9yIGFwcGxpY2F0aW9ucyB3aGljaCBzZW5kCisgKiBzbWFsbCBwYWNrZXRzLCBzaW5jZSB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAxNm1zLgorICovCisjZGVmaW5lICBGVERJX1NJT19HRVRfTEFURU5DWV9USU1FUl9SRVFVRVNUIEZURElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSCisjZGVmaW5lICBGVERJX1NJT19HRVRfTEFURU5DWV9USU1FUl9SRVFVRVNUX1RZUEUgMHhDMAorCisvKiAKKyAqICBCbVJlcXVlc3RUeXBlOiAgIDExMDAgMDAwMGIKKyAqICBiUmVxdWVzdDogICAgICAgIEZURElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSCisgKiAgd1ZhbHVlOiAgICAgICAgICAwCisgKiAgd0luZGV4OiAgICAgICAgICBQb3J0CisgKiAgd0xlbmd0aDogICAgICAgICAwCisgKiAgRGF0YTogICAgICAgICAgICBsYXRlbmN5IChvbiByZXR1cm4pCisgKi8KKworLyogCisgKiBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUgorICoKKyAqIFNldCB0aGUgdGltZW91dCBpbnRlcnZhbC4gVGhlIEZUREkgY29sbGVjdHMgZGF0YSBmcm9tIHRoZSBzbGF2ZQorICogZGV2aWNlLCB0cmFuc21pdHRpbmcgaXQgdG8gdGhlIGhvc3Qgd2hlbiBlaXRoZXIgQSkgNjIgYnl0ZXMgYXJlCisgKiByZWNlaXZlZCwgb3IgQikgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgaGFzIGVsYXBzZWQgYW5kIHRoZSBidWZmZXIKKyAqIGNvbnRhaW5zIGF0IGxlYXN0IDEgYnl0ZS4gIFNldHRpbmcgdGhpcyB2YWx1ZSB0byBhIHNtYWxsIG51bWJlcgorICogY2FuIGRyYW1hdGljYWxseSBpbXByb3ZlIHBlcmZvcm1hbmNlIGZvciBhcHBsaWNhdGlvbnMgd2hpY2ggc2VuZAorICogc21hbGwgcGFja2V0cywgc2luY2UgdGhlIGRlZmF1bHQgdmFsdWUgaXMgMTZtcy4KKyAqLworI2RlZmluZSAgRlRESV9TSU9fU0VUX0xBVEVOQ1lfVElNRVJfUkVRVUVTVCBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUgorI2RlZmluZSAgRlRESV9TSU9fU0VUX0xBVEVOQ1lfVElNRVJfUkVRVUVTVF9UWVBFIDB4NDAKKworLyogCisgKiAgQm1SZXF1ZXN0VHlwZTogICAwMTAwIDAwMDBiCisgKiAgYlJlcXVlc3Q6ICAgICAgICBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUgorICogIHdWYWx1ZTogICAgICAgICAgTGF0ZW5jeSAobWlsbGlzZWNvbmRzKQorICogIHdJbmRleDogICAgICAgICAgUG9ydAorICogIHdMZW5ndGg6ICAgICAgICAgMAorICogIERhdGE6ICAgICAgICAgICAgTm9uZQorICoKKyAqIHdWYWx1ZToKKyAqICAgQjAuLjcgICBMYXRlbmN5IHRpbWVyCisgKiAgIEI4Li4xNSAgMAorICoKKyAqLworCisvKgorICogRlRESV9TSU9fU0VUX0VWRU5UX0NIQVIgCisgKgorICogU2V0IHRoZSBzcGVjaWFsIGV2ZW50IGNoYXJhY3RlciBmb3IgdGhlIHNwZWNpZmllZCBjb21tdW5pY2F0aW9ucyBwb3J0LgorICogSWYgdGhlIGRldmljZSBzZWVzIHRoaXMgY2hhcmFjdGVyIGl0IHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIHRoZQorICogZGF0YSByZWFkIHNvIGZhciAtIHJhdGhlciB0aGFuIHdhaXQgNDBtcyBvciB1bnRpbCA2MiBieXRlcyBhcmUgcmVhZAorICogd2hpY2ggaXMgd2hhdCBub3JtYWxseSBoYXBwZW5zLgorICovCisKKworI2RlZmluZSAgRlRESV9TSU9fU0VUX0VWRU5UX0NIQVJfUkVRVUVTVCBGVERJX1NJT19TRVRfRVZFTlRfQ0hBUgorI2RlZmluZSAgRlRESV9TSU9fU0VUX0VWRU5UX0NIQVJfUkVRVUVTVF9UWVBFIDB4NDAKKworCisvKiAKKyAqICBCbVJlcXVlc3RUeXBlOiAgIDAxMDAgMDAwMGIKKyAqICBiUmVxdWVzdDogICAgICAgIEZURElfU0lPX1NFVF9FVkVOVF9DSEFSCisgKiAgd1ZhbHVlOiAgICAgICAgICBFdmVudENoYXIKKyAqICB3SW5kZXg6ICAgICAgICAgIFBvcnQKKyAqICB3TGVuZ3RoOiAgICAgICAgIDAKKyAqICBEYXRhOiAgICAgICAgICAgIE5vbmUKKyAqCisgKiB3VmFsdWU6CisgKiAgIEIwLi43ICAgRXZlbnQgQ2hhcmFjdGVyCisgKiAgIEI4ICAgICAgRXZlbnQgQ2hhcmFjdGVyIFByb2Nlc3NpbmcKKyAqICAgICAgICAgICAgIDAgPSBkaXNhYmxlZAorICogICAgICAgICAgICAgMSA9IGVuYWJsZWQKKyAqICAgQjkuLjE1ICBSZXNlcnZlZAorICoKKyAqLworICAgICAgICAgIAorLyogRlRESV9TSU9fU0VUX0VSUk9SX0NIQVIgKi8KKworLyogU2V0IHRoZSBwYXJpdHkgZXJyb3IgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIGZvciB0aGUgc3BlY2lmaWVkIGNvbW11bmljYXRpb25zIHBvcnQgKi8KKworLyogCisgKiAgQm1SZXF1ZXN0VHlwZTogIDAxMDAgMDAwMGIKKyAqICBiUmVxdWVzdDogICAgICAgRlRESV9TSU9fU0VUX0VWRU5UX0NIQVIKKyAqICB3VmFsdWU6ICAgICAgICAgRXJyb3IgQ2hhcgorICogIHdJbmRleDogICAgICAgICBQb3J0CisgKiAgd0xlbmd0aDogICAgICAgIDAKKyAqICBEYXRhOiAgICAgICAgICAgTm9uZQorICoKKyAqRXJyb3IgQ2hhcgorICogIEIwLi43ICBFcnJvciBDaGFyYWN0ZXIKKyAqICBCOCAgICAgRXJyb3IgQ2hhcmFjdGVyIFByb2Nlc3NpbmcKKyAqICAgICAgICAgICAwID0gZGlzYWJsZWQKKyAqICAgICAgICAgICAxID0gZW5hYmxlZAorICogIEI5Li4xNSBSZXNlcnZlZAorICoKKyAqLworCisvKiBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTICovCisvKiBSZXRyZWl2ZSB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbW9kZW0gc3RhdHVzIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVU19SRVFVRVNUX1RZUEUgMHhjMAorI2RlZmluZSBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTX1JFUVVFU1QgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVUworI2RlZmluZSBGVERJX1NJT19DVFNfTUFTSyAweDEwCisjZGVmaW5lIEZURElfU0lPX0RTUl9NQVNLIDB4MjAKKyNkZWZpbmUgRlRESV9TSU9fUklfTUFTSyAgMHg0MAorI2RlZmluZSBGVERJX1NJT19STFNEX01BU0sgMHg4MAorLyogCisgKiAgIEJtUmVxdWVzdFR5cGU6ICAgMTEwMCAwMDAwYgorICogICBiUmVxdWVzdDogICAgICAgIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVMKKyAqICAgd1ZhbHVlOiAgICAgICAgICB6ZXJvCisgKiAgIHdJbmRleDogICAgICAgICAgUG9ydAorICogICB3TGVuZ3RoOiAgICAgICAgIDEKKyAqICAgRGF0YTogICAgICAgICAgICBTdGF0dXMKKyAqIAorICogT25lIGJ5dGUgb2YgZGF0YSBpcyByZXR1cm5lZCAKKyAqIEIwLi4zIDAKKyAqIEI0ICAgIENUUworICogICAgICAgICAwID0gaW5hY3RpdmUKKyAqICAgICAgICAgMSA9IGFjdGl2ZQorICogQjUgICAgRFNSCisgKiAgICAgICAgIDAgPSBpbmFjdGl2ZQorICogICAgICAgICAxID0gYWN0aXZlCisgKiBCNiAgICBSaW5nIEluZGljYXRvciAoUkkpCisgKiAgICAgICAgIDAgPSBpbmFjdGl2ZQorICogICAgICAgICAxID0gYWN0aXZlCisgKiBCNyAgICBSZWNlaXZlIExpbmUgU2lnbmFsIERldGVjdCAoUkxTRCkKKyAqICAgICAgICAgMCA9IGluYWN0aXZlCisgKiAgICAgICAgIDEgPSBhY3RpdmUgCisgKi8KKworCisKKy8qIERlc2NyaXB0b3JzIHJldHVybmVkIGJ5IHRoZSBkZXZpY2UgCisgKiAKKyAqICBEZXZpY2UgRGVzY3JpcHRvcgorICogCisgKiBPZmZzZXQJRmllbGQJCVNpemUJVmFsdWUJRGVzY3JpcHRpb24KKyAqIDAJYkxlbmd0aAkJMQkweDEyCVNpemUgb2YgZGVzY3JpcHRvciBpbiBieXRlcworICogMQliRGVzY3JpcHRvclR5cGUJMQkweDAxCURFVklDRSBEZXNjcmlwdG9yIFR5cGUKKyAqIDIJYmNkVVNCCQkyCTB4MDExMAlVU0IgU3BlYyBSZWxlYXNlIE51bWJlcgorICogNAliRGV2aWNlQ2xhc3MJMQkweDAwCUNsYXNzIENvZGUKKyAqIDUJYkRldmljZVN1YkNsYXNzCTEJMHgwMAlTdWJDbGFzcyBDb2RlCisgKiA2CWJEZXZpY2VQcm90b2NvbAkxCTB4MDAJUHJvdG9jb2wgQ29kZQorICogNwliTWF4UGFja2V0U2l6ZTAgMQkweDA4CU1heGltdW0gcGFja2V0IHNpemUgZm9yIGVuZHBvaW50IDAKKyAqIDgJaWRWZW5kb3IJMgkweDA0MDMJVmVuZG9yIElECisgKiAxMAlpZFByb2R1Y3QJMgkweDgzNzIJUHJvZHVjdCBJRCAoRlRESV9TSU9fUElEKQorICogMTIJYmNkRGV2aWNlCTIJMHgwMDAxCURldmljZSByZWxlYXNlIG51bWJlcgorICogMTQJaU1hbnVmYWN0dXJlcgkxCTB4MDEJSW5kZXggb2YgbWFuLiBzdHJpbmcgZGVzYworICogMTUJaVByb2R1Y3QJMQkweDAyCUluZGV4IG9mIHByb2Qgc3RyaW5nIGRlc2MKKyAqIDE2CWlTZXJpYWxOdW1iZXIJMQkweDAyCUluZGV4IG9mIHNlcmlhbCBubXIgc3RyaW5nIGRlc2MKKyAqIDE3CWJOdW1Db25maWd1cmF0aW9ucyAxICAgIDB4MDEJTnVtYmVyIG9mIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zCisgKiAKKyAqIENvbmZpZ3VyYXRpb24gRGVzY3JpcHRvcgorICogCisgKiBPZmZzZXQJRmllbGQJCQlTaXplCVZhbHVlCisgKiAwCWJMZW5ndGgJCQkxCTB4MDkJU2l6ZSBvZiBkZXNjcmlwdG9yIGluIGJ5dGVzCisgKiAxCWJEZXNjcmlwdG9yVHlwZQkJMQkweDAyCUNPTkZJR1VSQVRJT04gRGVzY3JpcHRvciBUeXBlCisgKiAyCXdUb3RhbExlbmd0aAkJMgkweDAwMjAJVG90YWwgbGVuZ3RoIG9mIGRhdGEKKyAqIDQJYk51bUludGVyZmFjZXMJCTEJMHgwMQlOdW1iZXIgb2YgaW50ZXJmYWNlcyBzdXBwb3J0ZWQKKyAqIDUJYkNvbmZpZ3VyYXRpb25WYWx1ZQkxCTB4MDEJQXJndW1lbnQgZm9yIFNldENPbmZpZ3VyYXRpb24oKSByZXEKKyAqIDYJaUNvbmZpZ3VyYXRpb24JCTEJMHgwMglJbmRleCBvZiBjb25maWcgc3RyaW5nIGRlc2NyaXB0b3IKKyAqIDcJYm1BdHRyaWJ1dGVzCQkxCTB4MjAJQ29uZmlnIGNoYXJhY3RlcmlzdGljcyBSZW1vdGUgV2FrZXVwCisgKiA4CU1heFBvd2VyCQkxCTB4MUUJTWF4IHBvd2VyIGNvbnN1bXB0aW9uCisgKiAKKyAqIEludGVyZmFjZSBEZXNjcmlwdG9yCisgKiAKKyAqIE9mZnNldAlGaWVsZAkJCVNpemUJVmFsdWUKKyAqIDAJYkxlbmd0aAkJCTEJMHgwOQlTaXplIG9mIGRlc2NyaXB0b3IgaW4gYnl0ZXMKKyAqIDEJYkRlc2NyaXB0b3JUeXBlCQkxCTB4MDQJSU5URVJGQUNFIERlc2NyaXB0b3IgVHlwZQorICogMgliSW50ZXJmYWNlTnVtYmVyCTEJMHgwMAlOdW1iZXIgb2YgaW50ZXJmYWNlCisgKiAzCWJBbHRlcm5hdGVTZXR0aW5nCTEJMHgwMAlWYWx1ZSB1c2VkIHRvIHNlbGVjdCBhbHRlcm5hdGUKKyAqIDQJYk51bUVuZHBvaW50cwkJMQkweDAyCU51bWJlciBvZiBlbmRwb2ludHMKKyAqIDUJYkludGVyZmFjZUNsYXNzCQkxCTB4RkYJQ2xhc3MgQ29kZQorICogNgliSW50ZXJmYWNlU3ViQ2xhc3MJMQkweEZGCVN1YmNsYXNzIENvZGUKKyAqIDcJYkludGVyZmFjZVByb3RvY29sCTEJMHhGRglQcm90b2NvbCBDb2RlCisgKiA4CWlJbnRlcmZhY2UJCTEJMHgwMglJbmRleCBvZiBpbnRlcmZhY2Ugc3RyaW5nIGRlc2NyaXB0aW9uCisgKiAKKyAqIElOIEVuZHBvaW50IERlc2NyaXB0b3IKKyAqIAorICogT2Zmc2V0CUZpZWxkCQkJU2l6ZQlWYWx1ZQorICogMAliTGVuZ3RoCQkJMQkweDA3CVNpemUgb2YgZGVzY3JpcHRvciBpbiBieXRlcworICogMQliRGVzY3JpcHRvclR5cGUJCTEJMHgwNQlFTkRQT0lOVCBkZXNjcmlwdG9yIHR5cGUKKyAqIDIJYkVuZHBvaW50QWRkcmVzcwkxCTB4ODIJQWRkcmVzcyBvZiBlbmRwb2ludAorICogMwlibUF0dHJpYnV0ZXMJCTEJMHgwMglFbmRwb2ludCBhdHRyaWJ1dGVzIC0gQnVsaworICogNAliTnVtRW5kcG9pbnRzCQkyCTB4MDA0MAltYXhpbXVtIHBhY2tldCBzaXplCisgKiA1CWJJbnRlcnZhbAkJMQkweDAwCUludGVydmFsIGZvciBwb2xsaW5nIGVuZHBvaW50CisgKiAKKyAqIE9VVCBFbmRwb2ludCBEZXNjcmlwdG9yCisgKiAKKyAqIE9mZnNldAlGaWVsZAkJCVNpemUJVmFsdWUKKyAqIDAJYkxlbmd0aAkJCTEJMHgwNwlTaXplIG9mIGRlc2NyaXB0b3IgaW4gYnl0ZXMKKyAqIDEJYkRlc2NyaXB0b3JUeXBlCQkxCTB4MDUJRU5EUE9JTlQgZGVzY3JpcHRvciB0eXBlCisgKiAyCWJFbmRwb2ludEFkZHJlc3MJMQkweDAyCUFkZHJlc3Mgb2YgZW5kcG9pbnQKKyAqIDMJYm1BdHRyaWJ1dGVzCQkxCTB4MDIJRW5kcG9pbnQgYXR0cmlidXRlcyAtIEJ1bGsKKyAqIDQJYk51bUVuZHBvaW50cwkJMgkweDAwNDAJbWF4aW11bSBwYWNrZXQgc2l6ZQorICogNQliSW50ZXJ2YWwJCTEJMHgwMAlJbnRlcnZhbCBmb3IgcG9sbGluZyBlbmRwb2ludAorICogICAgIAorICogREFUQSBGT1JNQVQKKyAqIAorICogSU4gRW5kcG9pbnQKKyAqIAorICogVGhlIGRldmljZSByZXNlcnZlcyB0aGUgZmlyc3QgdHdvIGJ5dGVzIG9mIGRhdGEgb24gdGhpcyBlbmRwb2ludCB0byBjb250YWluIHRoZSBjdXJyZW50CisgKiB2YWx1ZXMgb2YgdGhlIG1vZGVtIGFuZCBsaW5lIHN0YXR1cyByZWdpc3RlcnMuIEluIHRoZSBhYnNlbmNlIG9mIGRhdGEsIHRoZSBkZXZpY2UgCisgKiBnZW5lcmF0ZXMgYSBtZXNzYWdlIGNvbnNpc3Rpbmcgb2YgdGhlc2UgdHdvIHN0YXR1cyBieXRlcyBldmVyeSA0MCBtcworICogCisgKiBCeXRlIDA6IE1vZGVtIFN0YXR1cworICogCisgKiBPZmZzZXQJRGVzY3JpcHRpb24KKyAqIEIwCVJlc2VydmVkIC0gbXVzdCBiZSAxCisgKiBCMQlSZXNlcnZlZCAtIG11c3QgYmUgMAorICogQjIJUmVzZXJ2ZWQgLSBtdXN0IGJlIDAKKyAqIEIzCVJlc2VydmVkIC0gbXVzdCBiZSAwCisgKiBCNAlDbGVhciB0byBTZW5kIChDVFMpCisgKiBCNQlEYXRhIFNldCBSZWFkeSAoRFNSKQorICogQjYJUmluZyBJbmRpY2F0b3IgKFJJKQorICogQjcJUmVjZWl2ZSBMaW5lIFNpZ25hbCBEZXRlY3QgKFJMU0QpCisgKiAKKyAqIEJ5dGUgMTogTGluZSBTdGF0dXMKKyAqIAorICogT2Zmc2V0CURlc2NyaXB0aW9uCisgKiBCMAlEYXRhIFJlYWR5IChEUikKKyAqIEIxCU92ZXJydW4gRXJyb3IgKE9FKQorICogQjIJUGFyaXR5IEVycm9yIChQRSkKKyAqIEIzCUZyYW1pbmcgRXJyb3IgKEZFKQorICogQjQJQnJlYWsgSW50ZXJydXB0IChCSSkKKyAqIEI1CVRyYW5zbWl0dGVyIEhvbGRpbmcgUmVnaXN0ZXIgKFRIUkUpCisgKiBCNglUcmFuc21pdHRlciBFbXB0eSAoVEVNVCkKKyAqIEI3CUVycm9yIGluIFJDVlIgRklGTworICogCisgKi8KKyNkZWZpbmUgRlRESV9SUzBfQ1RTCSgxIDw8IDQpCisjZGVmaW5lIEZURElfUlMwX0RTUgkoMSA8PCA1KQorI2RlZmluZSBGVERJX1JTMF9SSQkoMSA8PCA2KQorI2RlZmluZSBGVERJX1JTMF9STFNECSgxIDw8IDcpCisKKyNkZWZpbmUgRlRESV9SU19EUiAgMQorI2RlZmluZSBGVERJX1JTX09FICgxPDwxKQorI2RlZmluZSBGVERJX1JTX1BFICgxPDwyKQorI2RlZmluZSBGVERJX1JTX0ZFICgxPDwzKQorI2RlZmluZSBGVERJX1JTX0JJICgxPDw0KQorI2RlZmluZSBGVERJX1JTX1RIUkUgKDE8PDUpCisjZGVmaW5lIEZURElfUlNfVEVNVCAoMTw8NikKKyNkZWZpbmUgRlRESV9SU19GSUZPICAoMTw8NykKKworLyoKKyAqIE9VVCBFbmRwb2ludAorICogCisgKiBUaGlzIGRldmljZSByZXNlcnZlcyB0aGUgZmlyc3QgYnl0ZXMgb2YgZGF0YSBvbiB0aGlzIGVuZHBvaW50IGNvbnRhaW4gdGhlIGxlbmd0aAorICogYW5kIHBvcnQgaWRlbnRpZmllciBvZiB0aGUgbWVzc2FnZS4gRm9yIHRoZSBGVERJIFVTQiBTZXJpYWwgY29udmVydGVyIHRoZSBwb3J0IAorICogaWRlbnRpZmllciBpcyBhbHdheXMgMS4KKyAqIAorICogQnl0ZSAwOiBMaW5lIFN0YXR1cworICogCisgKiBPZmZzZXQJRGVzY3JpcHRpb24KKyAqIEIwCVJlc2VydmVkIC0gbXVzdCBiZSAxCisgKiBCMQlSZXNlcnZlZCAtIG11c3QgYmUgMAorICogQjIuLjcJTGVuZ3RoIG9mIG1lc3NhZ2UgLSAobm90IGluY2x1ZGluZyBCeXRlIDApCisgKiAKKyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWY2MTRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYwpAQCAtMCwwICsxLDE1NDEgQEAKKy8qCisgKiBHYXJtaW4gR1BTIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBIZXJtYW5uIEtuZWlzc2VsIGhlcmtuZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQKKyAqCisgKiBUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGRyaXZlciBjYW4gYmUgZm91bmQgYXQKKyAqIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2FybWluLWdwcy8KKyAqCisgKiBUaGlzIGRyaXZlciBoYXMgYmVlbiBkZXJpdmVkIGZyb20gdjIuMSBvZiB0aGUgdmlzb3IgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMSBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisvKiB0aGUgbW9kZSB0byBiZSBzZXQgd2hlbiB0aGUgcG9ydCBpc3Qgb3BlbmVkICovCitzdGF0aWMgaW50IGluaXRpYWxfbW9kZSA9IDE7CisKKy8qIGRlYnVnIGZsYWcgKi8KK3N0YXRpYyBpbnQgZGVidWcgPSAwOworCisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorCisjZGVmaW5lIEdBUk1JTl9WRU5ET1JfSUQgICAgICAgICAgICAgMHgwOTFFCisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKworI2RlZmluZSBWRVJTSU9OX01BSk9SCTAKKyNkZWZpbmUgVkVSU0lPTl9NSU5PUgkyMworCisjZGVmaW5lIF9TVFIocykgI3MKKyNkZWZpbmUgX0RSSVZFUl9WRVJTSU9OKGEsYikgInYiIF9TVFIoYSkgIi4iIF9TVFIoYikKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gX0RSSVZFUl9WRVJTSU9OKFZFUlNJT05fTUFKT1IsIFZFUlNJT05fTUlOT1IpCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgImhlcm1hbm4ga25laXNzZWwiCisjZGVmaW5lIERSSVZFUl9ERVNDICJnYXJtaW4gZ3BzIGRyaXZlciIKKworLyogZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgdGhlIGRyaXZlciAqLworI2RlZmluZSBFSU5WUEtUCTEwMDAJLyogaW52YWxpZCBwYWNrZXQgc3RydWN0dXJlICovCisKKworLy8gc2l6ZSBvZiB0aGUgaGVhZGVyIG9mIGEgcGFja2V0IHVzaW5nIHRoZSB1c2IgcHJvdG9jb2wKKyNkZWZpbmUgR0FSTUlOX1BLVEhEUl9MRU5HVEgJMTIKKworLy8gbWF4LiBwb3NzaWJsZSBzaXplIG9mIGEgcGFja2V0IHVzaW5nIHRoZSBzZXJpYWwgcHJvdG9jb2wgCisjZGVmaW5lIE1BWF9TRVJJQUxfUEtUX1NJWiAoMysyNTUrMykKKworLy8gbWF4LiBwb3NzaWJsZSBzaXplIG9mIGEgcGFja2V0IHdpdGggd29yc3QgY2FzZSBzdHVmZmluZworI2RlZmluZSBNQVhfU0VSSUFMX1BLVF9TSVpfU1RVRkZFRCBNQVhfU0VSSUFMX1BLVF9TSVorMjU2CisKKy8vIHNpemUgb2YgYSBidWZmZXIgYWJsZSB0byBob2xkIGEgY29tcGxldGUgKG5vIHN0dWZmaW5nKSBwYWNrZXQKKy8vICh0aGUgZG9jdW1lbnQgcHJvdG9jb2wgZG9lcyBub3QgY29udGFpbiBwYWNrZXRzIHdpdGggYSBsYXJnZXIKKy8vICBzaXplLCBidXQgaW4gdGhlb3J5IGEgcGFja2V0IG1heSBiZSA2NGsrMTIgYnl0ZXMgLSBpZiBpbgorLy8gIGxhdGVyIHByb3RvY29sIHZlcnNpb25zIGxhcmdlciBwYWNrZXQgc2l6ZXMgb2NjdXIsIHRoaXMgdmFsdWUKKy8vICBzaG91bGQgYmUgaW5jcmVhc2VkIGFjY29yZGluZ2x5LCBzbyB0aGUgaW5wdXQgYnVmZmVyIGlzIGFsd2F5cyAKKy8vICBsYXJnZSBlbm91Z2ggdGhlIHN0b3JlIGEgY29tcGxldGUgcGFja2V0IGluY2x1c2l2ZSBoZWFkZXIpCisjZGVmaW5lIEdQU19JTl9CVUZTSVogIChHQVJNSU5fUEtUSERSX0xFTkdUSCtNQVhfU0VSSUFMX1BLVF9TSVopIAorCisvLyBzaXplIG9mIGEgYnVmZmVyIGFibGUgdG8gaG9sZCBhIGNvbXBsZXRlIChpbmNsLiBzdHVmZmluZykgcGFja2V0CisjZGVmaW5lIEdQU19PVVRfQlVGU0laIChHQVJNSU5fUEtUSERSX0xFTkdUSCtNQVhfU0VSSUFMX1BLVF9TSVpfU1RVRkZFRCkgCisKKy8vIHdoZXJlIHRvIHBsYWNlIHRoZSBwYWNrZXQgaWQgb2YgYSBzZXJpYWwgcGFja2V0LCBzbyB3ZSBjYW4KKy8vIHByZXBlbmQgdGhlIHVzYi1wYWNrZXQgaGVhZGVyIHdpdGhvdXQgdGhlIG5lZWQgdG8gbW92ZSB0aGUKKy8vIHBhY2tldHMgZGF0YQorI2RlZmluZSBHU1BfSU5JVElBTF9PRkZTRVQgKEdBUk1JTl9QS1RIRFJfTEVOR1RILTIpCisKKy8vIG1heC4gc2l6ZSBvZiBpbmNvbWluZyBwcml2YXRlIHBhY2tldHMgKGhlYWRlcisxIHBhcmFtKQorI2RlZmluZSBQUklWUEtUU0laIChHQVJNSU5fUEtUSERSX0xFTkdUSCs0KQorCisjZGVmaW5lIEdBUk1JTl9MQVlFUklEX1RSQU5TUE9SVCAgMAorI2RlZmluZSBHQVJNSU5fTEFZRVJJRF9BUFBMICAgICAgMjAKKy8vIG91ciBvd24gbGF5ZXItaWQgdG8gdXNlIGZvciBzb21lIGNvbnRyb2wgbWVjaGFuaXNtcworI2RlZmluZSBHQVJNSU5fTEFZRVJJRF9QUklWQVRFCTB4MDExMDZFNEIKKworI2RlZmluZSBHQVJNSU5fUEtUSURfUFZUX0RBVEEJNTEKKyNkZWZpbmUgR0FSTUlOX1BLVElEX0wwMDFfQ09NTUFORF9EQVRBIDEwCisKKyNkZWZpbmUgQ01ORF9BQk9SVF9UUkFOU0ZFUiAwCisKKy8vIHBhY2tldCBpZHMgdXNlZCBpbiBwcml2YXRlIGxheWVyCisjZGVmaW5lIFBSSVZfUEtUSURfU0VUX0RFQlVHCTEKKyNkZWZpbmUgUFJJVl9QS1RJRF9TRVRfTU9ERQkyCisjZGVmaW5lIFBSSVZfUEtUSURfSU5GT19SRVEJMworI2RlZmluZSBQUklWX1BLVElEX0lORk9fUkVTUAk0CisjZGVmaW5lIFBSSVZfUEtUSURfUkVTRVRfUkVRCTUKKyNkZWZpbmUgUFJJVl9QS1RJRF9TRVRfREVGX01PREUJNgorCisKKyNkZWZpbmUgRVRYCTB4MDMKKyNkZWZpbmUgRExFCTB4MTAKKyNkZWZpbmUgQUNLCTB4MDYKKyNkZWZpbmUgTkFLCTB4MTUKKworLyogc3RydWN0dXJlIHVzZWQgdG8gcXVldWUgaW5jb21pbmcgcGFja2V0cyAqLworc3RydWN0IGdhcm1pbl9wYWNrZXQgeworCXN0cnVjdCBsaXN0X2hlYWQgIGxpc3Q7CisJaW50ICAgICAgICAgICAgICAgc2VxOworCWludCAgICAgICAgICAgICAgIHNpemU7IC8vIHRoZSByZWFsIHNpemUgb2YgdGhlIGRhdGEgYXJyYXksIGFsd2F5cyA+IDAKKwlfX3U4ICAgICAgICAgICAgICBkYXRhWzFdOworfTsKKworLyogc3RydWN0dXJlIHVzZWQgdG8ga2VlcCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZHJpdmVyICovCitzdHJ1Y3QgZ2FybWluX2RhdGEgeworCV9fdTggICBzdGF0ZTsKKwlfX3UxNiAgZmxhZ3M7CisJX191OCAgIG1vZGU7CisJX191OCAgIGlnbm9yZVBrdHM7CisJX191OCAgIGNvdW50OworCV9fdTggICBwa3RfaWQ7CisJX191MzIgIHNlcmlhbF9udW07CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlpbnQgICAgc2VxX2NvdW50ZXI7CisJaW50ICAgIGluc2l6ZTsKKwlpbnQgICAgb3V0c2l6ZTsKKwlfX3U4ICAgaW5idWZmZXIgW0dQU19JTl9CVUZTSVpdOyAgLyogdHR5IC0+IHVzYiAqLworCV9fdTggICBvdXRidWZmZXJbR1BTX09VVF9CVUZTSVpdOyAvKiB1c2IgLT4gdHR5ICovCisJX191OCAgIHByaXZwa3RbNCo2XTsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBwa3RsaXN0OworfTsKKworCisjZGVmaW5lIFNUQVRFX05FVyAgICAgICAgICAgIDAKKyNkZWZpbmUgU1RBVEVfSU5JVElBTF9ERUxBWSAgMQorI2RlZmluZSBTVEFURV9USU1FT1VUICAgICAgICAyCisjZGVmaW5lIFNUQVRFX1NFU1NJT05fUkVRMSAgIDMKKyNkZWZpbmUgU1RBVEVfU0VTU0lPTl9SRVEyICAgNAorI2RlZmluZSBTVEFURV9BQ1RJVkUgICAgICAgICA1CisKKyNkZWZpbmUgU1RBVEVfUkVTRVQJICAgICA4CisjZGVmaW5lIFNUQVRFX0RJU0NPTk5FQ1RFRCAgIDkKKyNkZWZpbmUgU1RBVEVfV0FJVF9UVFlfQUNLICAxMAorI2RlZmluZSBTVEFURV9HU1BfV0FJVF9EQVRBIDExCisKKyNkZWZpbmUgTU9ERV9OQVRJVkUgICAgICAgICAgMAorI2RlZmluZSBNT0RFX0dBUk1JTl9TRVJJQUwgICAxCisKKy8vIEZsYWdzIHVzZWQgaW4gZ2FybWluX2RhdGEuZmxhZ3M6CisjZGVmaW5lIEZMQUdTX1NFU1NJT05fUkVQTFlfTUFTSyAgMHgwMEMwCisjZGVmaW5lIEZMQUdTX1NFU1NJT05fUkVQTFkxX1NFRU4gMHgwMDgwCisjZGVmaW5lIEZMQUdTX1NFU1NJT05fUkVQTFkyX1NFRU4gMHgwMDQwCisjZGVmaW5lIEZMQUdTX0JVTEtfSU5fQUNUSVZFICAgICAgMHgwMDIwCisjZGVmaW5lIEZMQUdTX1RIUk9UVExFRCAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIENMRUFSX0hBTFRfUkVRVUlSRUQgICAgICAgMHgwMDAxCisKKyNkZWZpbmUgRkxBR1NfUVVFVUlORyAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgRkxBR1NfQVBQX1JFU1BfU0VFTiAgICAgICAweDAyMDAKKyNkZWZpbmUgRkxBR1NfQVBQX1JFUV9TRUVOICAgICAgICAweDA0MDAKKyNkZWZpbmUgRkxBR1NfRFJPUF9EQVRBICAgICAgICAgICAweDA4MDAKKworI2RlZmluZSBGTEFHU19HU1BfU0tJUCAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBGTEFHU19HU1BfRExFU0VFTiAgICAgICAgIDB4MjAwMAorCisKKworCisKKworLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqLworc3RhdGljIHZvaWQgZ3NwX25leHRfcGFja2V0KHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3ApOworc3RhdGljIGludCAgZ2FybWluX3dyaXRlX2J1bGsoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOworCisvKiBzb21lIHNwZWNpYWwgcGFja2V0cyB0byBiZSBzZW5kIG9yIHJlY2VpdmVkICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBjb25zdCBHQVJNSU5fU1RBUlRfU0VTU0lPTl9SRVFbXQorCT0geyAwLCAwLCAwLCAwLCAgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgY29uc3QgR0FSTUlOX1NUQVJUX1NFU1NJT05fUkVRMltdCisJPSB7IDAsIDAsIDAsIDAsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CitzdGF0aWMgdW5zaWduZWQgY2hhciBjb25zdCBHQVJNSU5fU1RBUlRfU0VTU0lPTl9SRVBMWVtdCisJPSB7IDAsIDAsIDAsIDAsICA2LCAwLCAwLCAwLCA0LCAwLCAwLCAwIH07CitzdGF0aWMgdW5zaWduZWQgY2hhciBjb25zdCBHQVJNSU5fU0VTU0lPTl9BQ1RJVkVfUkVQTFlbXQorCT0geyAwLCAwLCAwLCAwLCAxNywgMCwgMCwgMCwgNCwgMCwgMCwgMCwgMCwgMTYsIDAsIDAgfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNvbnN0IEdBUk1JTl9CVUxLX0lOX0FWQUlMX1JFUExZW10KKwk9IHsgMCwgMCwgMCwgMCwgIDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNvbnN0IEdBUk1JTl9BUFBfTEFZRVJfUkVQTFlbXQorCT0geyAweDE0LCAwLCAwLCAwIH07CitzdGF0aWMgdW5zaWduZWQgY2hhciBjb25zdCBHQVJNSU5fU1RBUlRfUFZUX1JFUVtdCisJPSB7IDIwLCAwLCAwLCAwLCAgMTAsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIDQ5LCAwIH07CitzdGF0aWMgdW5zaWduZWQgY2hhciBjb25zdCBHQVJNSU5fU1RPUF9QVlRfUkVRW10KKwk9IHsgMjAsIDAsIDAsIDAsICAxMCwgMCwgMCwgMCwgMiwgMCwgMCwgMCwgNTAsIDAgfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNvbnN0IEdBUk1JTl9TVE9QX1RSQU5TRkVSX1JFUVtdCisJPSB7IDIwLCAwLCAwLCAwLCAgMTAsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIDAsIDAgfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNvbnN0IEdBUk1JTl9TVE9QX1RSQU5TRkVSX1JFUV9WMltdCisJPSB7IDIwLCAwLCAwLCAwLCAgMTAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAgfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNvbnN0IFBSSVZBVEVfUkVRW10KKwk9ICAgIHsgMHg0QiwgMHg2RSwgMHgxMCwgMHgwMSwgIDB4RkYsIDAsIDAsIDAsIDB4RkYsIDAsIDAsIDAgfTsKKworCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKKwkvKiB0aGUgc2FtZSBkZXZpY2UgaWQgc2VlbXMgdG8gYmUgdXNlZCBieSBhbGwgdXNiIGVuYWJsZWQgZ3BzIGRldmljZXMgKi8KKwl7IFVTQl9ERVZJQ0UoR0FSTUlOX1ZFTkRPUl9JRCwgMyApIH0sCisJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBnYXJtaW5fZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJnYXJtaW5fZ3BzIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorfTsKKworCitzdGF0aWMgaW5saW5lIGludCBub1Jlc3BvbnNlRnJvbUFwcExheWVyKHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3ApCit7CisJcmV0dXJuICgoZ2FybWluX2RhdGFfcC0+ZmxhZ3MKKwkJCQkmIChGTEFHU19BUFBfUkVRX1NFRU58RkxBR1NfQVBQX1JFU1BfU0VFTikpCisJICAgICAgICA9PSBGTEFHU19BUFBfUkVRX1NFRU4pOworfQorCisKK3N0YXRpYyBpbmxpbmUgaW50IGdldExheWVySWQoY29uc3QgX191OCAqdXNiUGFja2V0KQoreworCXJldHVybiBfX2xlMzJfdG9fY3B1cCgoX19sZTMyICopKHVzYlBhY2tldCkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRQYWNrZXRJZChjb25zdCBfX3U4ICp1c2JQYWNrZXQpCit7CisJcmV0dXJuIF9fbGUzMl90b19jcHVwKChfX2xlMzIgKikodXNiUGFja2V0KzQpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2V0RGF0YUxlbmd0aChjb25zdCBfX3U4ICp1c2JQYWNrZXQpCit7CisJcmV0dXJuIF9fbGUzMl90b19jcHVwKChfX2xlMzIgKikodXNiUGFja2V0KzgpKTsKK30KKworCisvKgorICogY2hlY2sgaWYgdGhlIHVzYi1wYWNrZXQgaW4gYnVmIGNvbnRhaW5zIGFuIGFib3J0LXRyYW5zZmVyIGNvbW1hbmQuCisgKiAoaWYgeWVzLCBhbGwgcXVldWVkIGRhdGEgd2lsbCBiZSBkcm9wcGVkKQorICovCitzdGF0aWMgaW5saW5lIGludCBpc0Fib3J0VHJmQ21uZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJaWYgKDAgPT0gbWVtY21wKGJ1ZiwgR0FSTUlOX1NUT1BfVFJBTlNGRVJfUkVRLCAKKwkgICAgICAgICAgICAgICAgc2l6ZW9mKEdBUk1JTl9TVE9QX1RSQU5TRkVSX1JFUSkpIHx8CisJICAgIDAgPT0gbWVtY21wKGJ1ZiwgR0FSTUlOX1NUT1BfVFJBTlNGRVJfUkVRX1YyLCAKKwkgICAgICAgICAgICAgICAgc2l6ZW9mKEdBUk1JTl9TVE9QX1RSQU5TRkVSX1JFUV9WMikpKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisKKworc3RhdGljIHZvaWQgc2VuZF90b190dHkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBhY3R1YWxfbGVuZ3RoKQoreworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CisJaW50IGk7CisKKwlpZiAodHR5ICYmIGFjdHVhbF9sZW5ndGgpIHsKKworCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIAorCQkJCQlfX0ZVTkNUSU9OX18sIGFjdHVhbF9sZW5ndGgsIGRhdGEpOworCisJCWZvciAoaSA9IDA7IGkgPCBhY3R1YWxfbGVuZ3RoIDsgKytpKSB7CisJCQkvKiBpZiB3ZSBpbnNlcnQgbW9yZSB0aGFuIFRUWV9GTElQQlVGX1NJWkUgY2hhcmFjdGVycywKKwkJCSAgIHdlIGRyb3AgdGhlbS4gKi8KKwkJCWlmKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCX0KKwkJCS8qIHRoaXMgZG9lc24ndCBhY3R1YWxseSBwdXNoIHRoZSBkYXRhIHRocm91Z2ggdW5sZXNzCisJCQkgICB0dHktPmxvd19sYXRlbmN5IGlzIHNldCAqLworCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCAwKTsKKwkJfQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCX0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBwYWNrZXQgcXVldWUgaGFuZGxpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBxdWV1ZSBhIHJlY2VpdmVkICh1c2ItKXBhY2tldCBmb3IgbGF0ZXIgcHJvY2Vzc2luZworICovCitzdGF0aWMgaW50IHBrdF9hZGQoc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCwKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW5ndGgpCit7CisJaW50IHJlc3VsdCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZ2FybWluX3BhY2tldCAqcGt0OworCisJLyogcHJvY2VzcyBvbmx5IHBhY2tldHMgY29udGFpbmcgZGF0YSAuLi4gKi8KKwlpZiAoZGF0YV9sZW5ndGgpIHsKKwkJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgfD0gRkxBR1NfUVVFVUlORzsKKwkJcGt0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGdhcm1pbl9wYWNrZXQpK2RhdGFfbGVuZ3RoLAorCQkgICAgICAgICAgICAgIEdGUF9BVE9NSUMpOworCQlpZiAocGt0ID09IE5VTEwpIHsKKwkJCWRldl9lcnIoJmdhcm1pbl9kYXRhX3AtPnBvcnQtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcGt0LT5zaXplID0gZGF0YV9sZW5ndGg7CisJCW1lbWNweShwa3QtPmRhdGEsIGRhdGEsIGRhdGFfbGVuZ3RoKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOworCQlyZXN1bHQgPSBsaXN0X2VtcHR5KCZnYXJtaW5fZGF0YV9wLT5wa3RsaXN0KTsKKwkJcGt0LT5zZXEgPSBnYXJtaW5fZGF0YV9wLT5zZXFfY291bnRlcisrOworCQlsaXN0X2FkZF90YWlsKCZwa3QtPmxpc3QsICZnYXJtaW5fZGF0YV9wLT5wa3RsaXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOworCisJCS8qIGluIHNlcmlhbCBtb2RlLCBpZiBzb21lb25lIGlzIHdhaXRpbmcgZm9yIGRhdGEgZnJvbQorCQkgICB0aGUgZGV2aWNlLCBpY29udmVydCBhbmQgc2VuZCB0aGUgbmV4dCBwYWNrZXQgdG8gdHR5LiAqLworCQlpZiAocmVzdWx0ICYmIChnYXJtaW5fZGF0YV9wLT5zdGF0ZSA9PSBTVEFURV9HU1BfV0FJVF9EQVRBKSkgeworCQkJZ3NwX25leHRfcGFja2V0KGdhcm1pbl9kYXRhX3ApOworCQl9CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKworLyogZ2V0IHRoZSBuZXh0IHBlbmRpbmcgcGFja2V0ICovCitzdGF0aWMgc3RydWN0IGdhcm1pbl9wYWNrZXQgKnBrdF9wb3Aoc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBnYXJtaW5fcGFja2V0ICpyZXN1bHQgPSBOVUxMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKKwlpZiAoIWxpc3RfZW1wdHkoJmdhcm1pbl9kYXRhX3AtPnBrdGxpc3QpKSB7CisJCXJlc3VsdCA9IChzdHJ1Y3QgZ2FybWluX3BhY2tldCAqKWdhcm1pbl9kYXRhX3AtPnBrdGxpc3QubmV4dDsKKwkJbGlzdF9kZWwoJnJlc3VsdC0+bGlzdCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qIGZyZWUgdXAgYWxsIHF1ZXVlZCBkYXRhICovCitzdGF0aWMgdm9pZCBwa3RfY2xlYXIoc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBnYXJtaW5fcGFja2V0ICpyZXN1bHQgPSBOVUxMOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOworCXdoaWxlICghbGlzdF9lbXB0eSgmZ2FybWluX2RhdGFfcC0+cGt0bGlzdCkpIHsKKwkJcmVzdWx0ID0gKHN0cnVjdCBnYXJtaW5fcGFja2V0ICopZ2FybWluX2RhdGFfcC0+cGt0bGlzdC5uZXh0OworCQlsaXN0X2RlbCgmcmVzdWx0LT5saXN0KTsKKwkJa2ZyZWUocmVzdWx0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGdhcm1pbiBzZXJpYWwgcHJvdG9jb2wgaGFuZGxpbmcgaGFuZGxpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHNlbmQgYW4gYWNrIHBhY2tldCBiYWNrIHRvIHRoZSB0dHkgKi8KK3N0YXRpYyBpbnQgZ3NwX3NlbmRfYWNrKHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AsIF9fdTggcGt0X2lkKQoreworCV9fdTggcGt0WzEwXTsKKyAgICAgICAgX191OCBja3N1bSA9IDA7CisgICAgICAgIF9fdTggKnB0ciA9IHBrdDsKKyAgICAgICAgdW5zaWduZWQgIGwgPSAwOworCisJZGJnKCIlcyAtIHBrdC1pZDogMHglWC4iLCBfX0ZVTkNUSU9OX18sIDB4RkYgJiBwa3RfaWQpOworCisJKnB0cisrID0gRExFOworCSpwdHIrKyA9IEFDSzsKKwlja3N1bSArPSBBQ0s7CisKKwkqcHRyKysgPSAyOworCWNrc3VtICs9IDI7CisKKwkqcHRyKysgPSBwa3RfaWQ7CisJY2tzdW0gKz0gcGt0X2lkOworCisJaWYgKHBrdF9pZCA9PSBETEUpIHsKKwkJKnB0cisrID0gRExFOworCX0KKworCSpwdHIrKyA9IDA7CisJKnB0cisrID0gMHhGRiAmICgtY2tzdW0pOworCSpwdHIrKyA9IERMRTsKKwkqcHRyKysgPSBFVFg7CisKKwlsID0gcHRyLXBrdDsKKworCXNlbmRfdG9fdHR5KGdhcm1pbl9kYXRhX3AtPnBvcnQsIHBrdCwgbCk7CisJcmV0dXJuIDA7Cit9CisKKworCisvKgorICogY2FsbGVkIGZvciBhIGNvbXBsZXRlIHBhY2tldCByZWNlaXZlZCBmcm9tIHR0eSBsYXllcgorICoKKyAqIHRoZSBjb21wbGV0ZSBwYWNrZXQgKHBremlkIC4uLiBja3N1bSkgaXMgaW4gZ2FybWluX2RhdGFfcC0+aW5idWYgc3RhcnRpbmcKKyAqIGF0IEdTUF9JTklUSUFMX09GRlNFVC4KKyAqCisgKiBjb3VudCAtIG51bWJlciBvZiBieXRlcyBpbiB0aGUgaW5wdXQgYnVmZmVyIGluY2x1ZGluZyBzcGFjZSByZXNlcnZlZCBmb3IKKyAqICAgICAgICAgdGhlIHVzYiBoZWFkZXI6IEdTUF9JTklUSUFMX09GRlNFVCArIG51bWJlciBvZiBieXRlcyBpbiBwYWNrZXQgCisgKiAgICAgICAgIChpbmNsdWRpbmcgcGt0LWlkLCBkYXRhLWxlbmd0aCBhLiBja3N1bSkKKyAqLworc3RhdGljIGludCBnc3BfcmVjX3BhY2tldChzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wLCBpbnQgY291bnQpCit7CisJY29uc3QgX191OCogcmVjcGt0ID0gZ2FybWluX2RhdGFfcC0+aW5idWZmZXIrR1NQX0lOSVRJQUxfT0ZGU0VUOworICAgICAgICBfX2xlMzIgKnVzYmRhdGEgPSAoX19sZTMyICopIGdhcm1pbl9kYXRhX3AtPmluYnVmZmVyOworCisJaW50IGNrc3VtID0gMDsKKwlpbnQgbiA9IDA7CisJaW50IHBrdGlkID0gcmVjcGt0WzBdOworCWludCBzaXplID0gcmVjcGt0WzFdOworCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmZ2FybWluX2RhdGFfcC0+cG9ydC0+ZGV2LAorCQkJICAgICAgIF9fRlVOQ1RJT05fXywgY291bnQtR1NQX0lOSVRJQUxfT0ZGU0VULCByZWNwa3QpOworCisJaWYgKHNpemUgIT0gKGNvdW50LUdTUF9JTklUSUFMX09GRlNFVC0zKSkgeworCQlkYmcoIiVzIC0gaW52YWxpZCBzaXplLCBleHBlY3RlZCAlZCBieXRlcywgZ290ICVkIiwKKwkJCV9fRlVOQ1RJT05fXywgc2l6ZSwgKGNvdW50LUdTUF9JTklUSUFMX09GRlNFVC0zKSk7CisJCXJldHVybiAtRUlOVlBLVDsKKwl9CisKKwlja3N1bSArPSAqcmVjcGt0Kys7CisJY2tzdW0gKz0gKnJlY3BrdCsrOworCisJLy8gc2FuaXR5IGNoZWNrLCByZW1vdmUgYWZ0ZXIgdGVzdCAuLi4KKwlpZiAoKF9fdTgqKSYodXNiZGF0YVszXSkgIT0gcmVjcGt0KSB7CisJCWRiZygiJXMgLSBwdHIgbWlzbWF0Y2ggJXAgLSAlcCIsCisJCQlfX0ZVTkNUSU9OX18sICYodXNiZGF0YVs0XSksIHJlY3BrdCk7CisJCXJldHVybiAtRUlOVlBLVDsKKwl9CisKKwl3aGlsZSAobiA8IHNpemUpIHsKKwkJY2tzdW0gKz0gKnJlY3BrdCsrOworCQluKys7CisJfQorCisgICAgICAgaWYgKCgweGZmICYgKGNrc3VtICsgKnJlY3BrdCkpICE9IDApIHsKKyAgICAgICAgICAgICAgICBkYmcoIiVzIC0gaW52YWxpZCBjaGVja3N1bSwgZXhwZWN0ZWQgJTAyeCwgZ290ICUwMngiLAorICAgICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCAweGZmICYgLWNrc3VtLCAweGZmICYgKnJlY3BrdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WUEtUOworICAgICAgICB9CisKKwl1c2JkYXRhWzBdID0gX19jcHVfdG9fbGUzMihHQVJNSU5fTEFZRVJJRF9BUFBMKTsKKwl1c2JkYXRhWzFdID0gX19jcHVfdG9fbGUzMihwa3RpZCk7CisJdXNiZGF0YVsyXSA9IF9fY3B1X3RvX2xlMzIoc2l6ZSk7CisKKwlnYXJtaW5fd3JpdGVfYnVsayAoZ2FybWluX2RhdGFfcC0+cG9ydCwgZ2FybWluX2RhdGFfcC0+aW5idWZmZXIsCisJCQkgICBHQVJNSU5fUEtUSERSX0xFTkdUSCtzaXplKTsKKworCS8qIGlmIHRoaXMgd2FzIGFuIGFib3J0LXRyYW5zZmVyIGNvbW1hbmQsIGZsdXNoIGFsbAorCSAgIHF1ZXVlZCBkYXRhLiAqLworCWlmIChpc0Fib3J0VHJmQ21uZChnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlcikpIHsKKwkJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgfD0gRkxBR1NfRFJPUF9EQVRBOworCQlwa3RfY2xlYXIoZ2FybWluX2RhdGFfcCk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCisKKworLyoKKyAqIENhbGxlZCBmb3IgZGF0YSByZWNlaXZlZCBmcm9tIHR0eQorICoKKyAqIGJ1ZiBjb250YWlucyB0aGUgZGF0YSByZWFkLCBpdCBtYXkgc3BhbiBtb3JlIHRoYW4gb25lIHBhY2tldCBvciBldmVuCisgKiBpbmNvbXBsZXRlIHBhY2tldHMKKyAqCisgKiBpbnB1dCByZWNvcmQgc2hvdWxkIGJlIGEgc2VyaWFsLXJlY29yZCwgYnV0IGl0IG1heSBub3QgYmUgY29tcGxldGUuCisgKiBDb3B5IGl0IGludG8gb3VyIGxvY2FsIGJ1ZmZlciwgdW50aWwgYW4gZXR4IGlzIHNlZW4gKG9yIGFuIGVycm9yCisgKiBvY2N1cnMpLgorICogT25jZSB0aGUgcmVjb3JkIGlzIGNvbXBsZXRlLCBjb252ZXJ0IGludG8gYSB1c2IgcGFja2V0IGFuZCBzZW5kIGl0CisgKiB0byB0aGUgYnVsayBwaXBlLCBzZW5kIGFuIGFjayBiYWNrIHRvIHRoZSB0dHkuCisgKgorICogSWYgdGhlIGlucHV0IGlzIGFuIGFjaywganVzdCBzZW5kIHRoZSBsYXN0IHF1ZXVlZCBwYWNrZXQgdG8gdGhlCisgKiB0dHkgbGF5ZXIuCisgKgorICogaWYgdGhlIGlucHV0IGlzIGFuIGFib3J0IGNvbW1hbmQsIGRyb3AgYWxsIHF1ZXVlZCBkYXRhLgorICovCisKK3N0YXRpYyBpbnQgZ3NwX3JlY2VpdmUoc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJaW50IG9mZnMgPSAwOworCWludCBhY2tfb3JfbmFrX3NlZW4gPSAwOworCWludCBpID0gMDsKKwlfX3U4ICpkZXN0ID0gZ2FybWluX2RhdGFfcC0+aW5idWZmZXI7CisJaW50IHNpemUgPSBnYXJtaW5fZGF0YV9wLT5pbnNpemU7CisJLy8gZGxlU2Vlbjogc2V0IGlmIGxhc3QgYnl0ZSByZWFkIHdhcyBhIERMRQorCWludCBkbGVTZWVuID0gZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJiBGTEFHU19HU1BfRExFU0VFTjsKKwkvLyBza2lwOiBpZiBzZXQsIHNraXAgaW5jb21pbmcgZGF0YSB1bnRpbCBwb3NzaWJsZSBzdGFydCBvZgorCS8vICAgICAgIG5ldyBwYWNrZXQKKwlpbnQgc2tpcCA9IGdhcm1pbl9kYXRhX3AtPmZsYWdzICYgRkxBR1NfR1NQX1NLSVA7CisJX191OCBkYXRhOworCisJZGJnKCIlcyAtIGRsZT0lZCBza2lwPSVkIHNpemU9JWQgY291bnQ9JWQiLAorCQlfX0ZVTkNUSU9OX18sIGRsZVNlZW4sIHNraXAsIHNpemUsIGNvdW50KTsKKworCWlmIChzaXplID09IDApIHsKKwkJc2l6ZSA9IEdTUF9JTklUSUFMX09GRlNFVDsKKwl9CisKKwl3aGlsZSAob2ZmcyA8IGNvdW50KSB7CisKKwkJZGF0YSA9ICooYnVmK29mZnMpOworCQlvZmZzICsrOworCisJCWlmIChkYXRhID09IERMRSkgeworCQkJaWYgKHNraXApIHsgLyogc3RhcnQgb2YgYSBuZXcgcGt0ICovCisJCQkJc2tpcCA9IDA7CisJCQkJc2l6ZSA9IEdTUF9JTklUSUFMX09GRlNFVDsKKwkJCQlkbGVTZWVuID0gMTsKKwkJCX0gZWxzZSBpZiAoZGxlU2VlbikgeworCQkJCWRlc3Rbc2l6ZSsrXSA9IGRhdGE7CisJCQkJZGxlU2VlbiA9IDA7CisJCQl9IGVsc2UgeworCQkJCWRsZVNlZW4gPSAxOworCQkJfQorCQl9IGVsc2UgaWYgKGRhdGEgPT0gRVRYKSB7CisJCQlpZiAoZGxlU2VlbikgeworCQkJCS8qIHBhY2tldCBjb21wbGV0ZSAqLworCisJCQkJZGF0YSA9IGRlc3RbR1NQX0lOSVRJQUxfT0ZGU0VUXTsKKworCQkJCWlmIChkYXRhID09IEFDSykgeworCQkJCQlhY2tfb3JfbmFrX3NlZW4gPSBBQ0s7CisJCQkJCWRiZygiQUNLIHBhY2tldCBjb21wbGV0ZS4iKTsKKwkJCQl9IGVsc2UgaWYgKGRhdGEgPT0gTkFLKSB7CisJCQkJCWFja19vcl9uYWtfc2VlbiA9IE5BSzsKKwkJCQkJZGJnKCJOQUsgcGFja2V0IGNvbXBsZXRlLiIpOworCQkJCX0gZWxzZSB7CisJCQkJCWRiZygicGFja2V0IGNvbXBsZXRlICIKKwkJCQkJCSAgICAgICAgIi0gaWQ9MHglWC4iLAorCQkJCQkJICAgICAgICAweEZGICYgZGF0YSk7CisJCQkJCWdzcF9yZWNfcGFja2V0KGdhcm1pbl9kYXRhX3AsIHNpemUpOworCQkJCX0KKworCQkJCXNraXAgPSAxOworCQkJCXNpemUgPSBHU1BfSU5JVElBTF9PRkZTRVQ7CisJCQkJZGxlU2VlbiA9IDA7CisJCQl9IGVsc2UgeworCQkJCWRlc3Rbc2l6ZSsrXSA9IGRhdGE7CisJCQl9CisJCX0gZWxzZSBpZiAoIXNraXApIHsKKworCQkJaWYgKGRsZVNlZW4pIHsKKwkJCQlkYmcoIm5vbi1tYXNrZWQgRExFIGF0ICVkIC0gcmVzdGFydGluZyIsIGkpOworCQkJCXNpemUgPSBHU1BfSU5JVElBTF9PRkZTRVQ7CisJCQkJZGxlU2VlbiA9IDA7CisJCQl9CisKKwkJCWRlc3Rbc2l6ZSsrXSA9IGRhdGE7CisJCX0KKworCQlpZiAoc2l6ZSA+PSBHUFNfSU5fQlVGU0laKSB7CisJCQlkYmcoIiVzIC0gcGFja2V0IHRvbyBsYXJnZS4iLCBfX0ZVTkNUSU9OX18pOworCQkJc2tpcCA9IDE7CisJCQlzaXplID0gR1NQX0lOSVRJQUxfT0ZGU0VUOworCQkJZGxlU2VlbiA9IDA7CisJCX0KKwl9CisKKwlnYXJtaW5fZGF0YV9wLT5pbnNpemUgPSBzaXplOworCisJLy8gY29weSBmbGFncyBiYWNrIHRvIHN0cnVjdHVyZQorCWlmIChza2lwKQorCQlnYXJtaW5fZGF0YV9wLT5mbGFncyB8PSBGTEFHU19HU1BfU0tJUDsKKwllbHNlCisJCWdhcm1pbl9kYXRhX3AtPmZsYWdzICY9IH5GTEFHU19HU1BfU0tJUDsKKworCWlmIChkbGVTZWVuKQorCQlnYXJtaW5fZGF0YV9wLT5mbGFncyB8PSBGTEFHU19HU1BfRExFU0VFTjsKKwllbHNlCisJCWdhcm1pbl9kYXRhX3AtPmZsYWdzICY9IH5GTEFHU19HU1BfRExFU0VFTjsKKworCWlmIChhY2tfb3JfbmFrX3NlZW4pIHsKKwkJZ2FybWluX2RhdGFfcC0+c3RhdGUgPSBTVEFURV9HU1BfV0FJVF9EQVRBOworCQlnc3BfbmV4dF9wYWNrZXQoZ2FybWluX2RhdGFfcCk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCisKKworCisvKgorICogU2VuZHMgYSB1c2IgcGFja2V0IHRvIHRoZSB0dHkKKyAqCisgKiBBc3N1bWVzLCB0aGF0IGFsbCBwYWNrYWdlcyBhbmQgYXQgYW4gdXNiLXBhY2tldCBib3VuZGFyeS4KKyAqCisgKiByZXR1cm4gPDAgb24gZXJyb3IsIDAgaWYgcGFja2V0IGlzIGluY29tcGxldGUgb3IgPiAwIGlmIHBhY2tldCB3YXMgc2VudAorICovCitzdGF0aWMgaW50IGdzcF9zZW5kKHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AsCisJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzcmM7CisJdW5zaWduZWQgY2hhciAqZHN0OworCWludCBwa3RpZCA9IDA7CisJaW50IGRhdGFsZW4gPSAwOworCWludCBja3N1bSA9IDA7CisJaW50IGk9MDsKKwlpbnQgazsKKworCWRiZygiJXMgLSBzdGF0ZSAlZCAtICVkIGJ5dGVzLiIsIF9fRlVOQ1RJT05fXywKKwkgICAgICAgICBnYXJtaW5fZGF0YV9wLT5zdGF0ZSwgY291bnQpOworCisJayA9IGdhcm1pbl9kYXRhX3AtPm91dHNpemU7CisJaWYgKChrK2NvdW50KSA+IEdQU19PVVRfQlVGU0laKSB7CisJCWRiZygicGFja2V0IHRvbyBsYXJnZSIpOworCQlnYXJtaW5fZGF0YV9wLT5vdXRzaXplID0gMDsKKwkJcmV0dXJuIC00OworCX0KKworCW1lbWNweShnYXJtaW5fZGF0YV9wLT5vdXRidWZmZXIraywgYnVmLCBjb3VudCk7CisJayArPSBjb3VudDsKKwlnYXJtaW5fZGF0YV9wLT5vdXRzaXplID0gazsKKworCWlmIChrID49IEdBUk1JTl9QS1RIRFJfTEVOR1RIKSB7CisJCXBrdGlkICA9IGdldFBhY2tldElkKGdhcm1pbl9kYXRhX3AtPm91dGJ1ZmZlcik7CisJCWRhdGFsZW49IGdldERhdGFMZW5ndGgoZ2FybWluX2RhdGFfcC0+b3V0YnVmZmVyKTsKKwkJaSA9IEdBUk1JTl9QS1RIRFJfTEVOR1RIICsgZGF0YWxlbjsKKwkJaWYgKGsgPCBpKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDA7CisJfQorCisJZGJnKCIlcyAtICVkIGJ5dGVzIGluIGJ1ZmZlciwgJWQgYnl0ZXMgaW4gcGt0LiIsIF9fRlVOQ1RJT05fXywKKwkgICAgICAgICBrLCBpKTsKKworCS8qIGdhcm1pbl9kYXRhX3AtPm91dGJ1ZmZlciBub3cgY29udGFpbnMgYSBjb21wbGV0ZSBwYWNrZXQgKi8KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJmdhcm1pbl9kYXRhX3AtPnBvcnQtPmRldiwKKwkJICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgaywgZ2FybWluX2RhdGFfcC0+b3V0YnVmZmVyKTsKKworCWdhcm1pbl9kYXRhX3AtPm91dHNpemUgPSAwOworCisJaWYgKEdBUk1JTl9MQVlFUklEX0FQUEwgIT0gZ2V0TGF5ZXJJZChnYXJtaW5fZGF0YV9wLT5vdXRidWZmZXIpKSB7CisJCWRiZygibm90IGFuIGFwcGxpY2F0aW9uIHBhY2tldCAoJWQpIiwgCisJCSAgICAgICAgZ2V0TGF5ZXJJZChnYXJtaW5fZGF0YV9wLT5vdXRidWZmZXIpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChwa3RpZCA+IDI1NSkgeworCQlkYmcoInBhY2tldC1pZCAlZCB0b28gbGFyZ2UiLCBwa3RpZCk7CisJCXJldHVybiAtMjsKKwl9CisKKwlpZiAoZGF0YWxlbiA+IDI1NSkgeworCQlkYmcoInBhY2tldC1zaXplICVkIHRvbyBsYXJnZSIsIGRhdGFsZW4pOworCQlyZXR1cm4gLTM7CisJfQorCisJLyogdGhlIHNlcmlhbCBwcm90b2NvbCBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhpcyBwYWNrZXQgKi8KKworCWsgPSAwOworCXNyYyA9IGdhcm1pbl9kYXRhX3AtPm91dGJ1ZmZlcitHQVJNSU5fUEtUSERSX0xFTkdUSDsKKwlmb3IgKGk9MDsgaTxkYXRhbGVuOyBpKyspIHsKKwkJaWYgKCpzcmMrKyA9PSBETEUpCisJCQlrKys7CisJfQorCisJc3JjID0gZ2FybWluX2RhdGFfcC0+b3V0YnVmZmVyK0dBUk1JTl9QS1RIRFJfTEVOR1RIOworCWlmIChrID4gKEdBUk1JTl9QS1RIRFJfTEVOR1RILTIpKSB7CisJCS8qIGNhbid0IGFkZCBzdHVmZmluZyBETEVzIGluIHBsYWNlLCBtb3ZlIGRhdGEgdG8gZW5kIAorICAgICAgICAgICAgICAgICAgIG9mIGJ1ZmZlciAuLi4gKi8KKwkJZHN0ID0gZ2FybWluX2RhdGFfcC0+b3V0YnVmZmVyK0dQU19PVVRfQlVGU0laLWRhdGFsZW47CisJCW1lbWNweShkc3QsIHNyYywgZGF0YWxlbik7CisJCXNyYyA9IGRzdDsKKwl9CisKKwlkc3QgPSBnYXJtaW5fZGF0YV9wLT5vdXRidWZmZXI7CisKKwkqZHN0KysgPSBETEU7CisJKmRzdCsrID0gcGt0aWQ7CisJY2tzdW0gKz0gcGt0aWQ7CisJKmRzdCsrID0gZGF0YWxlbjsKKwlja3N1bSArPSBkYXRhbGVuOworCWlmIChkYXRhbGVuID09IERMRSkKKwkJKmRzdCsrID0gRExFOworCisJZm9yIChpPTA7IGk8ZGF0YWxlbjsgaSsrKSB7CisJCV9fdTggYyA9ICpzcmMrKzsKKwkJKmRzdCsrID0gYzsKKwkJY2tzdW0gKz0gYzsKKwkJaWYgKGMgPT0gRExFKQorCQkJKmRzdCsrID0gRExFOworCX0KKwkJCisJY2tzdW0gPSAweEZGICYgLWNrc3VtOworCSpkc3QrKyA9IGNrc3VtOworCWlmIChja3N1bSA9PSBETEUpCisJCSpkc3QrKyA9IERMRTsKKwkqZHN0KysgPSBETEU7CisJKmRzdCsrID0gRVRYOworCisJaSA9IGRzdC1nYXJtaW5fZGF0YV9wLT5vdXRidWZmZXI7CisKKwlzZW5kX3RvX3R0eShnYXJtaW5fZGF0YV9wLT5wb3J0LCBnYXJtaW5fZGF0YV9wLT5vdXRidWZmZXIsIGkpOworCisJZ2FybWluX2RhdGFfcC0+cGt0X2lkID0gcGt0aWQ7CisJZ2FybWluX2RhdGFfcC0+c3RhdGUgID0gU1RBVEVfV0FJVF9UVFlfQUNLOworCisJcmV0dXJuIGk7Cit9CisKKworCisKKworLyoKKyAqIFByb2Nlc3MgdGhlIG5leHQgcGVuZGluZyBkYXRhIHBhY2tldCAtIGlmIHRoZXJlIGlzIG9uZQorICovCitzdGF0aWMgdm9pZCBnc3BfbmV4dF9wYWNrZXQoc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCkKK3sKKwlzdHJ1Y3QgZ2FybWluX3BhY2tldCAqcGt0ID0gTlVMTDsKKworCXdoaWxlICgocGt0ID0gcGt0X3BvcChnYXJtaW5fZGF0YV9wKSkgIT0gTlVMTCkgeworCQlkYmcoIiVzIC0gbmV4dCBwa3Q6ICVkIiwgX19GVU5DVElPTl9fLCBwa3QtPnNlcSk7CisJCWlmIChnc3Bfc2VuZChnYXJtaW5fZGF0YV9wLCBwa3QtPmRhdGEsIHBrdC0+c2l6ZSkgPiAwKSB7CisJCQlrZnJlZShwa3QpOworCQkJcmV0dXJuOworCQl9CisJCWtmcmVlKHBrdCk7CisJfQorfQorCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBnYXJtaW4gbmF0aXZlIG1vZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoKKyAqIENhbGxlZCBmb3IgZGF0YSByZWNlaXZlZCBmcm9tIHR0eQorICoKKyAqIFRoZSBpbnB1dCBkYXRhIGlzIGV4cGVjdGVkIHRvIGJlIGluIGdhcm1pbiB1c2ItcGFja2V0IGZvcm1hdC4KKyAqCisgKiBidWYgY29udGFpbnMgdGhlIGRhdGEgcmVhZCwgaXQgbWF5IHNwYW4gbW9yZSB0aGFuIG9uZSBwYWNrZXQKKyAqIG9yIGV2ZW4gaW5jb21wbGV0ZSBwYWNrZXRzCisgKi8KK3N0YXRpYyBpbnQgbmF0X3JlY2VpdmUoc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJX191OCAqIGRlc3Q7CisJaW50IG9mZnMgPSAwOworCWludCByZXN1bHQgPSBjb3VudDsKKwlpbnQgbGVuOworCisJd2hpbGUgKG9mZnMgPCBjb3VudCkgeworCQkvLyBpZiBidWZmZXIgY29udGFpbnMgaGVhZGVyLCBjb3B5IHJlc3Qgb2YgZGF0YQorCQlpZiAoZ2FybWluX2RhdGFfcC0+aW5zaXplID49IEdBUk1JTl9QS1RIRFJfTEVOR1RIKQorCQkJbGVuID0gR0FSTUlOX1BLVEhEUl9MRU5HVEgKKwkJCSAgICAgICtnZXREYXRhTGVuZ3RoKGdhcm1pbl9kYXRhX3AtPmluYnVmZmVyKTsKKwkJZWxzZQorCQkJbGVuID0gR0FSTUlOX1BLVEhEUl9MRU5HVEg7CisKKwkJaWYgKGxlbiA+PSBHUFNfSU5fQlVGU0laKSB7CisJCQkvKiBzZWVtIHRvIGJlIGFuIGludmFsaWQgcGFja2V0LCBpZ25vcmUgcmVzdCBvZiBpbnB1dCAqLworCQkJZGJnKCIlcyAtIHBhY2tldCBzaXplIHRvbyBsYXJnZTogJWQiLAorCQkJICAgICAgICBfX0ZVTkNUSU9OX18sIGxlbik7CisJCQlnYXJtaW5fZGF0YV9wLT5pbnNpemUgPSAwOworCQkJY291bnQgPSAwOworCQkJcmVzdWx0ID0gLUVJTlZQS1Q7CisJCX0gZWxzZSB7CisJCQlsZW4gLT0gZ2FybWluX2RhdGFfcC0+aW5zaXplOworCQkJaWYgKGxlbiA+IChjb3VudC1vZmZzKSkKKwkJCQlsZW4gPSAoY291bnQtb2Zmcyk7CisJCQlpZiAobGVuID4gMCkgeworCQkJCWRlc3QgPSBnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlcgorCQkJCSAgICAgICAJK2dhcm1pbl9kYXRhX3AtPmluc2l6ZTsKKwkJCQltZW1jcHkoZGVzdCwgYnVmK29mZnMsIGxlbik7CisJCQkJZ2FybWluX2RhdGFfcC0+aW5zaXplICs9IGxlbjsKKwkJCQlvZmZzICs9IGxlbjsKKwkJCX0KKwkJfQorCisJCS8qIGRvIHdlIGhhdmUgYSBjb21wbGV0ZSBwYWNrZXQgPyAqLworCQlpZiAoZ2FybWluX2RhdGFfcC0+aW5zaXplID49IEdBUk1JTl9QS1RIRFJfTEVOR1RIKSB7CisJCQlsZW4gPSBHQVJNSU5fUEtUSERSX0xFTkdUSCsKKwkJCSAgIGdldERhdGFMZW5ndGgoZ2FybWluX2RhdGFfcC0+aW5idWZmZXIpOworCQkJaWYgKGdhcm1pbl9kYXRhX3AtPmluc2l6ZSA+PSBsZW4pIHsKKwkJCQlnYXJtaW5fd3JpdGVfYnVsayAoZ2FybWluX2RhdGFfcC0+cG9ydCwKKwkJCQkgICAgICAgICAgICAgICAgICAgZ2FybWluX2RhdGFfcC0+aW5idWZmZXIsCisJCQkJICAgICAgICAgICAgICAgICAgIGxlbik7CisJCQkJZ2FybWluX2RhdGFfcC0+aW5zaXplID0gMDsKKworCQkJCS8qIGlmIHRoaXMgd2FzIGFuIGFib3J0LXRyYW5zZmVyIGNvbW1hbmQsCisJCQkJICAgZmx1c2ggYWxsIHF1ZXVlZCBkYXRhLiAqLworCQkJCWlmIChpc0Fib3J0VHJmQ21uZChnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlcikpIHsKKwkJCQkJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgfD0gRkxBR1NfRFJPUF9EQVRBOworCQkJCQlwa3RfY2xlYXIoZ2FybWluX2RhdGFfcCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcHJpdmF0ZSBwYWNrZXRzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBwcml2X3N0YXR1c19yZXNwKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlfX2xlMzIgKnBrdCA9IChfX2xlMzIgKilnYXJtaW5fZGF0YV9wLT5wcml2cGt0OworCisJcGt0WzBdID0gX19jcHVfdG9fbGUzMihHQVJNSU5fTEFZRVJJRF9QUklWQVRFKTsKKwlwa3RbMV0gPSBfX2NwdV90b19sZTMyKFBSSVZfUEtUSURfSU5GT19SRVNQKTsKKwlwa3RbMl0gPSBfX2NwdV90b19sZTMyKDEyKTsKKwlwa3RbM10gPSBfX2NwdV90b19sZTMyKFZFUlNJT05fTUFKT1IgPDwgMTYgfCBWRVJTSU9OX01JTk9SKTsKKwlwa3RbNF0gPSBfX2NwdV90b19sZTMyKGdhcm1pbl9kYXRhX3AtPm1vZGUpOworCXBrdFs1XSA9IF9fY3B1X3RvX2xlMzIoZ2FybWluX2RhdGFfcC0+c2VyaWFsX251bSk7CisKKwlzZW5kX3RvX3R0eShwb3J0LCAoX191OCopcGt0LCA2KjQpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdhcm1pbiBzcGVjaWZpYyBkcml2ZXIgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IHByb2Nlc3NfcmVzZXRkZXZfcmVxdWVzdChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCWludCBzdGF0dXM7CisJc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWdhcm1pbl9kYXRhX3AtPmZsYWdzICY9IH4oQ0xFQVJfSEFMVF9SRVFVSVJFRCk7CisJZ2FybWluX2RhdGFfcC0+c3RhdGUgPSBTVEFURV9SRVNFVDsKKwlnYXJtaW5fZGF0YV9wLT5zZXJpYWxfbnVtID0gMDsKKworCXVzYl9raWxsX3VyYiAocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CisJZGJnKCIlcyAtIHVzYl9yZXNldF9kZXZpY2UiLCBfX0ZVTkNUSU9OX18gKTsKKwlzdGF0dXMgPSB1c2JfcmVzZXRfZGV2aWNlKHBvcnQtPnNlcmlhbC0+ZGV2KTsKKwlpZiAoc3RhdHVzKQorCQlkYmcoIiVzIC0gdXNiX3Jlc2V0X2RldmljZSBmYWlsZWQ6ICVkIiwKKwkJCV9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisKKworLyoKKyAqIGNsZWFyIGFsbCBjYWNoZWQgZGF0YQorICovCitzdGF0aWMgaW50IGdhcm1pbl9jbGVhcihzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wKQoreworCWludCBzdGF0dXMgPSAwOworCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IGdhcm1pbl9kYXRhX3AtPnBvcnQ7CisKKwlpZiAocG9ydCAhPSBOVUxMICYmIGdhcm1pbl9kYXRhX3AtPmZsYWdzICYgRkxBR1NfQVBQX1JFU1BfU0VFTikgeworCQkvKiBzZW5kIGEgdGVybWluYXRlIGNvbW1hbmQgKi8KKwkJc3RhdHVzID0gZ2FybWluX3dyaXRlX2J1bGsocG9ydCwgR0FSTUlOX1NUT1BfVFJBTlNGRVJfUkVRLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoR0FSTUlOX1NUT1BfVFJBTlNGRVJfUkVRKSk7CisJfQorCisJLyogZmx1c2ggYWxsIHF1ZXVlZCBkYXRhICovCisJcGt0X2NsZWFyKGdhcm1pbl9kYXRhX3ApOworCisJZ2FybWluX2RhdGFfcC0+aW5zaXplID0gMDsKKwlnYXJtaW5fZGF0YV9wLT5vdXRzaXplID0gMDsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKworCisKKworCitzdGF0aWMgaW50IGdhcm1pbl9pbml0X3Nlc3Npb24oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IHN0YXR1cyA9IDA7CisKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJdXNiX2tpbGxfdXJiIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKworCQlkYmcoIiVzIC0gYWRkaW5nIGludGVycnVwdCBpbnB1dCIsIF9fRlVOQ1RJT05fXyk7CisJCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHN0YXR1cykKKwkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCisJCQkgICAgICAgICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIGludGVycnVwdCB1cmIsIgorCQkJCSIgZXJyb3IgJWRcbiIsCisJCQkgICAgICAgIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwl9CisKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJZGJnKCIlcyAtIHN0YXJ0aW5nIHNlc3Npb24gLi4uIiwgX19GVU5DVElPTl9fKTsKKwkJZ2FybWluX2RhdGFfcC0+c3RhdGUgPSBTVEFURV9BQ1RJVkU7CisJCXN0YXR1cyA9IGdhcm1pbl93cml0ZV9idWxrKHBvcnQsIEdBUk1JTl9TVEFSVF9TRVNTSU9OX1JFUSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEdBUk1JTl9TVEFSVF9TRVNTSU9OX1JFUSkpOworCisJCWlmIChzdGF0dXMgPj0gMCkgeworCisJCQlnYXJtaW5fZGF0YV9wLT5pZ25vcmVQa3RzKys7CisKKwkJCS8qIG5vdCBuZWVkZWQsIGJ1dCB0aGUgd2luMzIgZHJpdmVyIGRvZXMgaXQgdG9vIC4uLiAqLworCQkJc3RhdHVzID0gZ2FybWluX3dyaXRlX2J1bGsocG9ydCwKKwkJCQkJCSAgIEdBUk1JTl9TVEFSVF9TRVNTSU9OX1JFUTIsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoR0FSTUlOX1NUQVJUX1NFU1NJT05fUkVRMikpOworCQkJaWYgKHN0YXR1cyA+PSAwKSB7CisJCQkJc3RhdHVzID0gMDsKKwkJCQlnYXJtaW5fZGF0YV9wLT5pZ25vcmVQa3RzKys7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisKKworCisKK3N0YXRpYyBpbnQgZ2FybWluX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCS8qCisJICogRm9yY2UgbG93X2xhdGVuY3kgb24gc28gdGhhdCBvdXIgdHR5X3B1c2ggYWN0dWFsbHkgZm9yY2VzIHRoZSBkYXRhCisJICogdGhyb3VnaCwgb3RoZXJ3aXNlIGl0IGlzIHNjaGVkdWxlZCwgYW5kIHdpdGggaGlnaCBkYXRhIHJhdGVzIChsaWtlCisJICogd2l0aCBPSENJKSBkYXRhIGNhbiBnZXQgbG9zdC4KKwkgKi8KKwlpZiAocG9ydC0+dHR5KQorCQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKKworCWdhcm1pbl9kYXRhX3AtPm1vZGUgID0gaW5pdGlhbF9tb2RlOworCWdhcm1pbl9kYXRhX3AtPmNvdW50ID0gMDsKKwlnYXJtaW5fZGF0YV9wLT5mbGFncyA9IDA7CisKKwkvKiBzaHV0ZG93biBhbnkgYnVsayByZWFkcyB0aGF0IG1pZ2h0IGJlIGdvaW5nIG9uICovCisJdXNiX2tpbGxfdXJiIChwb3J0LT53cml0ZV91cmIpOworCXVzYl9raWxsX3VyYiAocG9ydC0+cmVhZF91cmIpOworCisJaWYgKGdhcm1pbl9kYXRhX3AtPnN0YXRlID09IFNUQVRFX1JFU0VUKSB7CisJCXN0YXR1cyA9IGdhcm1pbl9pbml0X3Nlc3Npb24ocG9ydCk7CisJfQorCisJZ2FybWluX2RhdGFfcC0+c3RhdGUgPSBTVEFURV9BQ1RJVkU7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisKK3N0YXRpYyB2b2lkIGdhcm1pbl9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWRiZygiJXMgLSBwb3J0ICVkIC0gbW9kZT0lZCBzdGF0ZT0lZCBmbGFncz0weCVYIiwgX19GVU5DVElPTl9fLAorCQlwb3J0LT5udW1iZXIsIGdhcm1pbl9kYXRhX3AtPm1vZGUsCisJCWdhcm1pbl9kYXRhX3AtPnN0YXRlLCBnYXJtaW5fZGF0YV9wLT5mbGFncyk7CisKKwlpZiAoIXNlcmlhbCkKKwkJcmV0dXJuOworCisJZ2FybWluX2NsZWFyKGdhcm1pbl9kYXRhX3ApOworCisJLyogc2h1dGRvd24gb3VyIHVyYnMgKi8KKwl1c2Jfa2lsbF91cmIgKHBvcnQtPnJlYWRfdXJiKTsKKwl1c2Jfa2lsbF91cmIgKHBvcnQtPndyaXRlX3VyYik7CisKKwlpZiAobm9SZXNwb25zZUZyb21BcHBMYXllcihnYXJtaW5fZGF0YV9wKSB8fAorCSAgICAoKGdhcm1pbl9kYXRhX3AtPmZsYWdzICYgQ0xFQVJfSEFMVF9SRVFVSVJFRCkgIT0gMCkpIHsKKwkJcHJvY2Vzc19yZXNldGRldl9yZXF1ZXN0KHBvcnQpOworCQlnYXJtaW5fZGF0YV9wLT5zdGF0ZSA9IFNUQVRFX1JFU0VUOworCX0gZWxzZSB7CisJCWdhcm1pbl9kYXRhX3AtPnN0YXRlID0gU1RBVEVfRElTQ09OTkVDVEVEOworCX0KK30KKworCitzdGF0aWMgdm9pZCBnYXJtaW5fd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCS8qIGZyZWUgdXAgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgYXMgdXNiX2ZyZWVfdXJiKCkgZG9lcyBub3QgZG8gdGhpcyAqLworCWtmcmVlICh1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkJX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IENMRUFSX0hBTFRfUkVRVUlSRUQ7CisJfQorCisJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7Cit9CisKKworc3RhdGljIGludCBnYXJtaW5fd3JpdGVfYnVsayAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCWludCBzdGF0dXM7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCwgc3RhdGUgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwKKwkJZ2FybWluX2RhdGFfcC0+c3RhdGUpOworCisJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJj0gfkZMQUdTX0RST1BfREFUQTsKKworCWJ1ZmZlciA9IGttYWxsb2MgKGNvdW50LCBHRlBfQVRPTUlDKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXVyYikgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJubyBtb3JlIGZyZWUgdXJic1xuIik7CisJCWtmcmVlIChidWZmZXIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1jcHkgKGJ1ZmZlciwgYnVmLCBjb3VudCk7CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgY291bnQsIGJ1ZmZlcik7CisKKwl1c2JfZmlsbF9idWxrX3VyYiAodXJiLCBzZXJpYWwtPmRldiwKKwkJCSAJdXNiX3NuZGJ1bGtwaXBlIChzZXJpYWwtPmRldiwKKwkJCQlwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAorCQkJCWJ1ZmZlciwgY291bnQsCisJCQkJZ2FybWluX3dyaXRlX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX1pFUk9fUEFDS0VUOworCisJaWYgKEdBUk1JTl9MQVlFUklEX0FQUEwgPT0gZ2V0TGF5ZXJJZChidWZmZXIpKSB7CisJCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IEZMQUdTX0FQUF9SRVFfU0VFTjsKKwkJaWYgKGdhcm1pbl9kYXRhX3AtPm1vZGUgPT0gTU9ERV9HQVJNSU5fU0VSSUFMKSAgeworCQkJcGt0X2NsZWFyKGdhcm1pbl9kYXRhX3ApOworCQkJZ2FybWluX2RhdGFfcC0+c3RhdGUgPSBTVEFURV9HU1BfV0FJVF9EQVRBOworCQl9CisJfQorCisJLyogc2VuZCBpdCBkb3duIHRoZSBwaXBlICovCisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJICAgICAgICAiJXMgLSB1c2Jfc3VibWl0X3VyYih3cml0ZSBidWxrKSAiCisJCSAgICAgICAgImZhaWxlZCB3aXRoIHN0YXR1cyA9ICVkXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJY291bnQgPSBzdGF0dXM7CisJfSBlbHNlIHsKKworCQlpZiAoR0FSTUlOX0xBWUVSSURfQVBQTCA9PSBnZXRMYXllcklkKGJ1ZmZlcikKKwkJICAgICYmIChnYXJtaW5fZGF0YV9wLT5tb2RlID09IE1PREVfR0FSTUlOX1NFUklBTCkpICB7CisKKwkJCWdzcF9zZW5kX2FjayhnYXJtaW5fZGF0YV9wLCBidWZmZXJbNF0pOworCQl9CisJfQorCisJLyogd2UgYXJlIGRvbmUgd2l0aCB0aGlzIHVyYiwgc28gbGV0IHRoZSBob3N0IGRyaXZlcgorCSAqIHJlYWxseSBmcmVlIGl0IHdoZW4gaXQgaXMgZmluaXNoZWQgd2l0aCBpdCAqLworCXVzYl9mcmVlX3VyYiAodXJiKTsKKworCXJldHVybiBjb3VudDsKK30KKworCisKK3N0YXRpYyBpbnQgZ2FybWluX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCWludCBwa3RpZCwgcGt0c2l6LCBsZW47CisJc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlfX2xlMzIgKnByaXZwa3QgPSAoX19sZTMyICopZ2FybWluX2RhdGFfcC0+cHJpdnBrdDsKKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBjb3VudCwgYnVmKTsKKworCS8qIGNoZWNrIGZvciBvdXIgcHJpdmF0ZSBwYWNrZXRzICovCisJaWYgKGNvdW50ID49IEdBUk1JTl9QS1RIRFJfTEVOR1RIKSB7CisKKwkJbGVuID0gUFJJVlBLVFNJWjsKKwkJaWYgKGNvdW50IDwgbGVuKQorCQkJbGVuID0gY291bnQ7CisKKwkJbWVtY3B5KGdhcm1pbl9kYXRhX3AtPnByaXZwa3QsIGJ1ZiwgbGVuKTsKKworCQlwa3RzaXogPSBnZXREYXRhTGVuZ3RoKGdhcm1pbl9kYXRhX3AtPnByaXZwa3QpOworCQlwa3RpZCAgPSBnZXRQYWNrZXRJZChnYXJtaW5fZGF0YV9wLT5wcml2cGt0KTsKKworCQlpZiAoY291bnQgPT0gKEdBUk1JTl9QS1RIRFJfTEVOR1RIK3BrdHNpeikKKwkJICAgICYmIEdBUk1JTl9MQVlFUklEX1BSSVZBVEUgPT0gZ2V0TGF5ZXJJZChnYXJtaW5fZGF0YV9wLT5wcml2cGt0KSkgeworCisJCQlkYmcoIiVzIC0gcHJvY2Vzc2luZyBwcml2YXRlIHJlcXVlc3QgJWQiLAorCQkJCV9fRlVOQ1RJT05fXywgcGt0aWQpOworCisJCQkvLyBkcm9wIGFsbCB1bmZpbmlzaGVkIHRyYW5zZmVycworCQkJZ2FybWluX2NsZWFyKGdhcm1pbl9kYXRhX3ApOworCisJCQlzd2l0Y2gocGt0aWQpIHsKKworCQkJY2FzZSBQUklWX1BLVElEX1NFVF9ERUJVRzoKKwkJCQlpZiAocGt0c2l6ICE9IDQpCisJCQkJCXJldHVybiAtRUlOVlBLVDsKKwkJCQlkZWJ1ZyA9IF9fbGUzMl90b19jcHUocHJpdnBrdFszXSk7CisJCQkJZGJnKCIlcyAtIGRlYnVnIGxldmVsIHNldCB0byAweCVYIiwKKwkJCQkJX19GVU5DVElPTl9fLCBkZWJ1Zyk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUFJJVl9QS1RJRF9TRVRfTU9ERToKKwkJCQlpZiAocGt0c2l6ICE9IDQpCisJCQkJCXJldHVybiAtRUlOVlBLVDsKKwkJCQlnYXJtaW5fZGF0YV9wLT5tb2RlID0gX19sZTMyX3RvX2NwdShwcml2cGt0WzNdKTsKKwkJCQlkYmcoIiVzIC0gbW9kZSBzZXQgdG8gJWQiLAorCQkJCQlfX0ZVTkNUSU9OX18sIGdhcm1pbl9kYXRhX3AtPm1vZGUpOworCQkJCWJyZWFrOworCisJCQljYXNlIFBSSVZfUEtUSURfSU5GT19SRVE6CisJCQkJcHJpdl9zdGF0dXNfcmVzcChwb3J0KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBQUklWX1BLVElEX1JFU0VUX1JFUToKKwkJCQlnYXJtaW5fZGF0YV9wLT5mbGFncyB8PSBGTEFHU19BUFBfUkVRX1NFRU47CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUFJJVl9QS1RJRF9TRVRfREVGX01PREU6CisJCQkJaWYgKHBrdHNpeiAhPSA0KQorCQkJCQlyZXR1cm4gLUVJTlZQS1Q7CisJCQkJaW5pdGlhbF9tb2RlID0gX19sZTMyX3RvX2NwdShwcml2cGt0WzNdKTsKKwkJCQlkYmcoIiVzIC0gaW5pdGlhbF9tb2RlIHNldCB0byAlZCIsCisJCQkJCV9fRlVOQ1RJT05fXywKKwkJCQkJZ2FybWluX2RhdGFfcC0+bW9kZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlyZXR1cm4gY291bnQ7CisJCX0KKwl9CisKKwlpZiAoZ2FybWluX2RhdGFfcC0+bW9kZSA9PSBNT0RFX0dBUk1JTl9TRVJJQUwpIHsKKwkJcmV0dXJuIGdzcF9yZWNlaXZlKGdhcm1pbl9kYXRhX3AsIGJ1ZiwgY291bnQpOworCX0gZWxzZSB7CS8qIE1PREVfTkFUSVZFICovCisJCXJldHVybiBuYXRfcmVjZWl2ZShnYXJtaW5fZGF0YV9wLCBidWYsIGNvdW50KTsKKwl9Cit9CisKKworc3RhdGljIGludCBnYXJtaW5fd3JpdGVfcm9vbSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwkvKgorCSAqIFJlcG9ydCBiYWNrIHRoZSBieXRlcyBjdXJyZW50bHkgYXZhaWxhYmxlIGluIHRoZSBvdXRwdXQgYnVmZmVyLgorCSAqLworCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJcmV0dXJuIEdQU19PVVRfQlVGU0laLWdhcm1pbl9kYXRhX3AtPm91dHNpemU7Cit9CisKKworc3RhdGljIGludCBnYXJtaW5fY2hhcnNfaW5fYnVmZmVyIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCS8qCisJICogUmVwb3J0IGJhY2sgdGhlIG51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgaW4gb3VyIGlucHV0IGJ1ZmZlci4KKyAgICAgICAgICogV2lsbCB0aGlzIGxvY2sgdXAgdGhlIGRyaXZlciAtIHRoZSBidWZmZXIgY29udGFpbnMgYW4gaW5jb21wbGV0ZQorICAgICAgICAgKiBwYWNrYWdlIHdoaWNoIHdpbGwgbm90IGJlIHdyaXR0ZW4gdG8gdGhlIGRldmljZSB1bnRpbCBpdAorICAgICAgICAgKiBoYXMgYmVlbiBjb21wbGV0ZWQgPworICAgICAgICAgKi8KKwkvL3N0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJLy9yZXR1cm4gZ2FybWluX2RhdGFfcC0+aW5zaXplOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIGdhcm1pbl9yZWFkX3Byb2Nlc3Moc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCwKKwkJCQkgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgZGF0YV9sZW5ndGgpCit7CisJaWYgKGdhcm1pbl9kYXRhX3AtPmZsYWdzICYgRkxBR1NfRFJPUF9EQVRBKSB7CisJCS8qIGFib3J0LXRyYW5zZmVyIGNtZCBpcyBhY3RpY2UgKi8KKwkJZGJnKCIlcyAtIHBrdCBkcm9wcGVkIiwgX19GVU5DVElPTl9fKTsKKwl9IGVsc2UgaWYgKGdhcm1pbl9kYXRhX3AtPnN0YXRlICE9IFNUQVRFX0RJU0NPTk5FQ1RFRCAmJgorCSAgICAgICAgICAgZ2FybWluX2RhdGFfcC0+c3RhdGUgIT0gU1RBVEVfUkVTRVQgKSB7CisKKwkJLyogcmVtZW1iZXIgYW55IGFwcGwubGF5ZXIgcGFja2V0cywgc28gd2Uga25vdworCQkgICBpZiBhIHJlc2V0IGlzIHJlcXVpcmVkIG9yIG5vdCB3aGVuIGNsb3NpbmcKKwkJICAgdGhlIGRldmljZSAqLworCQlpZiAoMCA9PSBtZW1jbXAoZGF0YSwgR0FSTUlOX0FQUF9MQVlFUl9SRVBMWSwKKwkJICAgICAgICAgICAgICAgIHNpemVvZihHQVJNSU5fQVBQX0xBWUVSX1JFUExZKSkpCisJCQlnYXJtaW5fZGF0YV9wLT5mbGFncyB8PSBGTEFHU19BUFBfUkVTUF9TRUVOOworCisJCS8qIGlmIHRocm90dGxpbmcgaXMgYWN0aXZlIG9yIHBvc3RwcmVjZXNzaW5nIGlzIHJlcXVpcmVkCisJCSAgIHB1dCB0aGUgcmVjZWl2ZWQgZGF0YSBpbiB0aCBpbnB1dCBxdWV1ZSwgb3RoZXJ3aXNlCisJCSAgIHNlbmQgaXQgZGlyZWN0bHkgdG8gdGhlIHR0eSBwb3J0ICovCisJCWlmIChnYXJtaW5fZGF0YV9wLT5mbGFncyAmIEZMQUdTX1FVRVVJTkcpIHsKKwkJCXBrdF9hZGQoZ2FybWluX2RhdGFfcCwgZGF0YSwgZGF0YV9sZW5ndGgpOworCQl9IGVsc2UgaWYgKGdhcm1pbl9kYXRhX3AtPm1vZGUgPT0gTU9ERV9HQVJNSU5fU0VSSUFMKSB7CisJCQlpZiAoZ2V0TGF5ZXJJZChkYXRhKSA9PSBHQVJNSU5fTEFZRVJJRF9BUFBMKSB7CisJCQkJcGt0X2FkZChnYXJtaW5fZGF0YV9wLCBkYXRhLCBkYXRhX2xlbmd0aCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzZW5kX3RvX3R0eShnYXJtaW5fZGF0YV9wLT5wb3J0LCBkYXRhLCBkYXRhX2xlbmd0aCk7CisJCX0KKwl9Cit9CisKKworc3RhdGljIHZvaWQgZ2FybWluX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9ICBwb3J0LT5zZXJpYWw7CisJc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCFzZXJpYWwpIHsKKwkJZGJnKCIlcyAtIGJhZCBzZXJpYWwgcG9pbnRlciwgZXhpdGluZyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkJX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIAorCQkJCV9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKworCWdhcm1pbl9yZWFkX3Byb2Nlc3MoZ2FybWluX2RhdGFfcCwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKworCS8qIENvbnRpbnVlIHRyeWluZyB0byByZWFkIHVudGlsIG5vdGhpbmcgbW9yZSBpcyByZWNlaXZlZCAgKi8KKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID4gMCkgeworCQl1c2JfZmlsbF9idWxrX3VyYiAocG9ydC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LAorCQkJICAgdXNiX3JjdmJ1bGtwaXBlIChzZXJpYWwtPmRldiwKKwkJCQkJICAgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCSAgIGdhcm1pbl9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChzdGF0dXMpCisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkgICAgICAgIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwl9CisJcmV0dXJuOworfQorCisKK3N0YXRpYyB2b2lkIGdhcm1pbl9yZWFkX2ludF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLAorCQkJX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCQlfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCAKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0gc2l6ZW9mKEdBUk1JTl9CVUxLX0lOX0FWQUlMX1JFUExZKSAmJgorCSAgICAwID09IG1lbWNtcChkYXRhLCBHQVJNSU5fQlVMS19JTl9BVkFJTF9SRVBMWSwKKwkJICAgICAgICBzaXplb2YoR0FSTUlOX0JVTEtfSU5fQVZBSUxfUkVQTFkpKSkgeworCisJCWRiZygiJXMgLSBidWxrIGRhdGEgYXZhaWxhYmxlLiIsIF9fRlVOQ1RJT05fXyk7CisKKwkJLyogYnVsayBkYXRhIGF2YWlsYWJsZSAqLworCQl1c2JfZmlsbF9idWxrX3VyYiAocG9ydC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LAorCQkJCXVzYl9yY3ZidWxrcGlwZSAoc2VyaWFsLT5kZXYsCisJCQkJcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJZ2FybWluX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHN0YXR1cykgeworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJfQorCisJfSBlbHNlIGlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0gKDQrc2l6ZW9mKEdBUk1JTl9TVEFSVF9TRVNTSU9OX1JFUExZKSkKKwkJCSAmJiAwID09IG1lbWNtcChkYXRhLCBHQVJNSU5fU1RBUlRfU0VTU0lPTl9SRVBMWSwKKwkJCSAgICAgICAgICAgICAgICBzaXplb2YoR0FSTUlOX1NUQVJUX1NFU1NJT05fUkVQTFkpKSkgeworCisJCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IEZMQUdTX1NFU1NJT05fUkVQTFkxX1NFRU47CisKKwkJLyogc2F2ZSB0aGUgc2VyaWFsIG51bWJlciAqLworCQlnYXJtaW5fZGF0YV9wLT5zZXJpYWxfbnVtIAorCQkJPSBfX2xlMzJfdG9fY3B1cCgoX19sZTMyKikoZGF0YStHQVJNSU5fUEtUSERSX0xFTkdUSCkpOworCisJCWRiZygiJXMgLSBzdGFydC1vZi1zZXNzaW9uIHJlcGx5IHNlZW4gLSBzZXJpYWwgJXUuIiwKKwkJCV9fRlVOQ1RJT05fXywgZ2FybWluX2RhdGFfcC0+c2VyaWFsX251bSk7CisJfQorCisJaWYgKGdhcm1pbl9kYXRhX3AtPmlnbm9yZVBrdHMpIHsKKwkJLyogdGhpcyByZXBseSBiZWxvbmdzIHRvIGEgcmVxdWVzdCBnZW5lcmF0ZWQgYnkgdGhlIGRyaXZlciwKKwkJICAgaWdub3JlIGl0LiAqLworCQlkYmcoIiVzIC0gcGt0IGlnbm9yZWQgKCVkKSIsCisJCQlfX0ZVTkNUSU9OX18sIGdhcm1pbl9kYXRhX3AtPmlnbm9yZVBrdHMpOworCQlnYXJtaW5fZGF0YV9wLT5pZ25vcmVQa3RzLS07CisJfSBlbHNlIHsKKwkJZ2FybWluX3JlYWRfcHJvY2VzcyhnYXJtaW5fZGF0YV9wLCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCX0KKworCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMpCisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsCisJCQkiJXMgLSBFcnJvciAlZCBzdWJtaXR0aW5nIGludGVycnVwdCB1cmJcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHN0YXR1cyk7Cit9CisKKworLyoKKyAqIFNlbmRzIHRoZSBuZXh0IHF1ZXVlZCBwYWNrdCB0byB0aGUgdHR5IHBvcnQgKGdhcm1pbiBuYXRpdmUgbW9kZSBvbmx5KQorICogYW5kIHRoZW4gc2V0cyBhIHRpbWVyIHRvIGNhbGwgaXRzZWxmIGFnYWluIHVudGlsIGFsbCBxdWV1ZWQgZGF0YQorICogaXMgc2VudC4KKyAqLworc3RhdGljIGludCBnYXJtaW5fZmx1c2hfcXVldWUoc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCkKK3sKKwlzdHJ1Y3QgZ2FybWluX3BhY2tldCAqcGt0OworCisJaWYgKChnYXJtaW5fZGF0YV9wLT5mbGFncyAmIEZMQUdTX1RIUk9UVExFRCkgPT0gMCkgeworCQlwa3QgPSBwa3RfcG9wKGdhcm1pbl9kYXRhX3ApOworCQlpZiAocGt0ICE9IE5VTEwpIHsKKworCQkJc2VuZF90b190dHkoZ2FybWluX2RhdGFfcC0+cG9ydCwgcGt0LT5kYXRhLCBwa3QtPnNpemUpOworCQkJa2ZyZWUocGt0KTsKKwkJCW1vZF90aW1lcigmZ2FybWluX2RhdGFfcC0+dGltZXIsICgxKStqaWZmaWVzKTsKKworCQl9IGVsc2UgeworCQkJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJj0gfkZMQUdTX1FVRVVJTkc7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgZ2FybWluX3Rocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkvKiBzZXQgZmxhZywgZGF0YSByZWNlaXZlZCB3aWxsIGJlIHB1dCBpbnRvIGEgcXVldWUKKwkgICBmb3IgbGF0ZXIgcHJvY2Vzc2luZyAqLworCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IEZMQUdTX1FVRVVJTkd8RkxBR1NfVEhST1RUTEVEOworfQorCisKK3N0YXRpYyB2b2lkIGdhcm1pbl91bnRocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwlnYXJtaW5fZGF0YV9wLT5mbGFncyAmPSB+RkxBR1NfVEhST1RUTEVEOworCisJLyogaW4gbmF0aXZlIG1vZGUgc2VuZCBxdWV1ZWQgZGF0YSB0byB0dHksIGluCisJICAgc2VyaWFsIG1vZGUgbm90aGluZyBuZWVkcyB0byBiZSBkb25lIGhlcmUgKi8KKwlpZiAoZ2FybWluX2RhdGFfcC0+bW9kZSA9PSBNT0RFX05BVElWRSkKKwkJZ2FybWluX2ZsdXNoX3F1ZXVlKGdhcm1pbl9kYXRhX3ApOworfQorCisKKworLyoKKyAqIFRoZSB0aW1lciBpcyBjdXJyZW50bHkgb25seSB1c2VkIHRvIHNlbmQgcXVldWVkIHBhY2tldHMgdG8KKyAqIHRoZSB0dHkgaW4gY2FzZXMgd2hlcmUgdGhlIHByb3RvY29sIHByb3ZpZGVzIG5vIG93biBoYW5kc2hha2luZworICogdG8gaW5pdGlhdGUgdGhlIHRyYW5zZmVyLgorICovCitzdGF0aWMgdm9pZCB0aW1lb3V0X2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBnYXJtaW5fZGF0YSAqZ2FybWluX2RhdGFfcCA9IChzdHJ1Y3QgZ2FybWluX2RhdGEgKikgZGF0YTsKKworCS8qIHNlbmQgdGhlIG5leHQgcXVldWVkIHBhY2tldCB0byB0aGUgdHR5IHBvcnQgKi8KKwlpZiAoZ2FybWluX2RhdGFfcC0+bW9kZSA9PSBNT0RFX05BVElWRSkKKwkJaWYgKGdhcm1pbl9kYXRhX3AtPmZsYWdzICYgRkxBR1NfUVVFVUlORykKKwkJCWdhcm1pbl9mbHVzaF9xdWV1ZShnYXJtaW5fZGF0YV9wKTsKK30KKworCisKK3N0YXRpYyBpbnQgZ2FybWluX2F0dGFjaCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gc2VyaWFsLT5wb3J0WzBdOworCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSBOVUxMOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlnYXJtaW5fZGF0YV9wID0ga21hbGxvYyAoc2l6ZW9mKHN0cnVjdCBnYXJtaW5fZGF0YSksIEdGUF9LRVJORUwpOworCWlmIChnYXJtaW5fZGF0YV9wID09IE5VTEwpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0IChnYXJtaW5fZGF0YV9wLCAwLCBzaXplb2Yoc3RydWN0IGdhcm1pbl9kYXRhKSk7CisJaW5pdF90aW1lcigmZ2FybWluX2RhdGFfcC0+dGltZXIpOworCXNwaW5fbG9ja19pbml0KCZnYXJtaW5fZGF0YV9wLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmZ2FybWluX2RhdGFfcC0+cGt0bGlzdCk7CisJLy9nYXJtaW5fZGF0YV9wLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIHNlc3Npb25fdGltZW91dDsKKwlnYXJtaW5fZGF0YV9wLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZ2FybWluX2RhdGFfcDsKKwlnYXJtaW5fZGF0YV9wLT50aW1lci5mdW5jdGlvbiA9IHRpbWVvdXRfaGFuZGxlcjsKKwlnYXJtaW5fZGF0YV9wLT5wb3J0ID0gcG9ydDsKKwlnYXJtaW5fZGF0YV9wLT5zdGF0ZSA9IDA7CisJZ2FybWluX2RhdGFfcC0+Y291bnQgPSAwOworCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBnYXJtaW5fZGF0YV9wKTsKKworCXN0YXR1cyA9IGdhcm1pbl9pbml0X3Nlc3Npb24ocG9ydCk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisKK3N0YXRpYyB2b2lkIGdhcm1pbl9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gc2VyaWFsLT5wb3J0WzBdOworCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXVzYl9raWxsX3VyYiAocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CisJZGVsX3RpbWVyX3N5bmMoJmdhcm1pbl9kYXRhX3AtPnRpbWVyKTsKKwlrZnJlZSAoZ2FybWluX2RhdGFfcCk7CisJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIE5VTEwpOworfQorCisKKworCisKKworCisvKiBBbGwgb2YgdGhlIGRldmljZSBpbmZvIG5lZWRlZCAqLworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGdhcm1pbl9kZXZpY2UgPSB7CisJLm93bmVyICAgICAgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwkubmFtZSAgICAgICAgICAgICAgICA9ICJHYXJtaW4gR1BTIHVzYi90dHkiLAorCS5zaG9ydF9uYW1lICAgICAgICAgID0gImdhcm1pbl9ncHMiLAorCS5pZF90YWJsZSAgICAgICAgICAgID0gaWRfdGFibGUsCisJLm51bV9pbnRlcnJ1cHRfaW4gICAgPSAxLAorCS5udW1fYnVsa19pbiAgICAgICAgID0gMSwKKwkubnVtX2J1bGtfb3V0ICAgICAgICA9IDEsCisJLm51bV9wb3J0cyAgICAgICAgICAgPSAxLAorCS5vcGVuICAgICAgICAgICAgICAgID0gZ2FybWluX29wZW4sCisJLmNsb3NlICAgICAgICAgICAgICAgPSBnYXJtaW5fY2xvc2UsCisJLnRocm90dGxlICAgICAgICAgICAgPSBnYXJtaW5fdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgICAgICAgICAgPSBnYXJtaW5fdW50aHJvdHRsZSwKKwkuYXR0YWNoICAgICAgICAgICAgICA9IGdhcm1pbl9hdHRhY2gsCisJLnNodXRkb3duICAgICAgICAgICAgPSBnYXJtaW5fc2h1dGRvd24sCisJLndyaXRlICAgICAgICAgICAgICAgPSBnYXJtaW5fd3JpdGUsCisJLndyaXRlX3Jvb20gICAgICAgICAgPSBnYXJtaW5fd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyICAgICA9IGdhcm1pbl9jaGFyc19pbl9idWZmZXIsCisJLndyaXRlX2J1bGtfY2FsbGJhY2sgPSBnYXJtaW5fd3JpdGVfYnVsa19jYWxsYmFjaywKKwkucmVhZF9idWxrX2NhbGxiYWNrICA9IGdhcm1pbl9yZWFkX2J1bGtfY2FsbGJhY2ssCisJLnJlYWRfaW50X2NhbGxiYWNrICAgPSBnYXJtaW5fcmVhZF9pbnRfY2FsbGJhY2ssCit9OworCisKK3N0YXRpYyBpbnQgX19pbml0IGdhcm1pbl9pbml0ICh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZnYXJtaW5fZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF9nYXJtaW5fcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZnYXJtaW5fZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZ2FybWluX2RldmljZSk7CitmYWlsZWRfZ2FybWluX3JlZ2lzdGVyOgorCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IGdhcm1pbl9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgmZ2FybWluX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmZ2FybWluX2RldmljZSk7Cit9CisKKworCisKK21vZHVsZV9pbml0KGdhcm1pbl9pbml0KTsKK21vZHVsZV9leGl0KGdhcm1pbl9leGl0KTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVdVU1IgfCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOworbW9kdWxlX3BhcmFtKGluaXRpYWxfbW9kZSwgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5pdGlhbF9tb2RlLCAiSW5pdGlhbCBtb2RlIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MjE0YWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCkBAIC0wLDAgKzEsMzE1IEBACisvKgorICogVVNCIFNlcmlhbCBDb252ZXJ0ZXIgR2VuZXJpYyBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDAyIEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICoJMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKworc3RhdGljIGludCBkZWJ1ZzsKKworI2lmZGVmIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUMKK3N0YXRpYyBfX3UxNiB2ZW5kb3IgID0gMHgwNWY5Oworc3RhdGljIF9fdTE2IHByb2R1Y3QgPSAweGZmZmY7CisKK21vZHVsZV9wYXJhbSh2ZW5kb3IsIHVzaG9ydCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZlbmRvciwgIlVzZXIgc3BlY2lmaWVkIFVTQiBpZFZlbmRvciIpOworCittb2R1bGVfcGFyYW0ocHJvZHVjdCwgdXNob3J0LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocHJvZHVjdCwgIlVzZXIgc3BlY2lmaWVkIFVTQiBpZFByb2R1Y3QiKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGdlbmVyaWNfZGV2aWNlX2lkc1syXTsgLyogSW5pdGlhbGx5IGFsbCB6ZXJvZXMuICovCisKKy8qIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgR2VuZXJpYyBTZXJpYWwgQ29udmVydGVyICovCitzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSB1c2Jfc2VyaWFsX2dlbmVyaWNfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIkdlbmVyaWMiLAorCS5zaG9ydF9uYW1lID0JCSJnZW5lcmljIiwKKwkuaWRfdGFibGUgPQkJZ2VuZXJpY19kZXZpY2VfaWRzLAorCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4gPQkJTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfb3V0ID0JCU5VTV9ET05UX0NBUkUsCisJLm51bV9wb3J0cyA9CQkxLAorCS5zaHV0ZG93biA9CQl1c2Jfc2VyaWFsX2dlbmVyaWNfc2h1dGRvd24sCit9OworCisvKiB3ZSB3YW50IHRvIGxvb2sgYXQgYWxsIGRldmljZXMsIGFzIHRoZSB2ZW5kb3IvcHJvZHVjdCBpZCBjYW4gY2hhbmdlCisgKiBkZXBlbmRpbmcgb24gdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGdlbmVyaWNfc2VyaWFsX2lkc1tdID0geworCXsuZHJpdmVyX2luZm8gPSA0Mn0sCisJe30KK307CisKK3N0YXRpYyBpbnQgZ2VuZXJpY19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWRfcGF0dGVybjsKKworCWlkX3BhdHRlcm4gPSB1c2JfbWF0Y2hfaWQoaW50ZXJmYWNlLCBnZW5lcmljX2RldmljZV9pZHMpOworCWlmIChpZF9wYXR0ZXJuICE9IE5VTEwpCisJCXJldHVybiB1c2Jfc2VyaWFsX3Byb2JlKGludGVyZmFjZSwgaWQpOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZ2VuZXJpY19kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJInVzYnNlcmlhbF9nZW5lcmljIiwKKwkucHJvYmUgPQlnZW5lcmljX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWdlbmVyaWNfc2VyaWFsX2lkcywKK307CisjZW5kaWYKKworaW50IHVzYl9zZXJpYWxfZ2VuZXJpY19yZWdpc3RlciAoaW50IF9kZWJ1ZykKK3sKKwlpbnQgcmV0dmFsID0gMDsKKworCWRlYnVnID0gX2RlYnVnOworI2lmZGVmIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUMKKwlnZW5lcmljX2RldmljZV9pZHNbMF0uaWRWZW5kb3IgPSB2ZW5kb3I7CisJZ2VuZXJpY19kZXZpY2VfaWRzWzBdLmlkUHJvZHVjdCA9IHByb2R1Y3Q7CisJZ2VuZXJpY19kZXZpY2VfaWRzWzBdLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IgfCBVU0JfREVWSUNFX0lEX01BVENIX1BST0RVQ1Q7CisKKwkvKiByZWdpc3RlciBvdXIgZ2VuZXJpYyBkcml2ZXIgd2l0aCBvdXJzZWx2ZXMgKi8KKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyICgmdXNiX3NlcmlhbF9nZW5lcmljX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBleGl0OworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmZ2VuZXJpY19kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmdXNiX3NlcmlhbF9nZW5lcmljX2RldmljZSk7CitleGl0OgorI2VuZGlmCisJcmV0dXJuIHJldHZhbDsKK30KKwordm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfZGVyZWdpc3RlciAodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDCisJLyogcmVtb3ZlIG91ciBnZW5lcmljIGRyaXZlciAqLworCXVzYl9kZXJlZ2lzdGVyKCZnZW5lcmljX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmdXNiX3NlcmlhbF9nZW5lcmljX2RldmljZSk7CisjZW5kaWYKK30KKworaW50IHVzYl9zZXJpYWxfZ2VuZXJpY19vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWludCByZXN1bHQgPSAwOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiBmb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMgdGhlIGRhdGEgdGhyb3VnaCwgCisJICAgb3RoZXJ3aXNlIGl0IGlzIHNjaGVkdWxlZCwgYW5kIHdpdGggaGlnaCBkYXRhIHJhdGVzIChsaWtlIHdpdGggT0hDSSkgZGF0YQorCSAgIGNhbiBnZXQgbG9zdC4gKi8KKwlpZiAocG9ydC0+dHR5KQorCQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKKworCS8qIGlmIHdlIGhhdmUgYSBidWxrIGludGVycnVwdCwgc3RhcnQgcmVhZGluZyBmcm9tIGl0ICovCisJaWYgKHNlcmlhbC0+bnVtX2J1bGtfaW4pIHsKKwkJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKwkJdXNiX2ZpbGxfYnVsa191cmIgKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKKwkJCQkgICB1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJCSAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCSAgICgoc2VyaWFsLT50eXBlLT5yZWFkX2J1bGtfY2FsbGJhY2spID8KKwkJCQkgICAgIHNlcmlhbC0+dHlwZS0+cmVhZF9idWxrX2NhbGxiYWNrIDoKKwkJCQkgICAgIHVzYl9zZXJpYWxfZ2VuZXJpY19yZWFkX2J1bGtfY2FsbGJhY2spLAorCQkJCSAgIHBvcnQpOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXN1bHQpCisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgZ2VuZXJpY19jbGVhbnVwIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChzZXJpYWwtPmRldikgeworCQkvKiBzaHV0ZG93biBhbnkgYnVsayByZWFkcyB0aGF0IG1pZ2h0IGJlIGdvaW5nIG9uICovCisJCWlmIChzZXJpYWwtPm51bV9idWxrX291dCkKKwkJCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCQlpZiAoc2VyaWFsLT5udW1fYnVsa19pbikKKwkJCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJfQorfQorCit2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY19jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCWdlbmVyaWNfY2xlYW51cCAocG9ydCk7Cit9CisKK2ludCB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChjb3VudCA9PSAwKSB7CisJCWRiZygiJXMgLSB3cml0ZSByZXF1ZXN0IG9mIDAgYnl0ZXMiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gKDApOworCX0KKworCS8qIG9ubHkgZG8gc29tZXRoaW5nIGlmIHdlIGhhdmUgYSBidWxrIG91dCBlbmRwb2ludCAqLworCWlmIChzZXJpYWwtPm51bV9idWxrX291dCkgeworCQlpZiAocG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCQlkYmcoIiVzIC0gYWxyZWFkeSB3cml0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybiAoMCk7CisJCX0KKworCQljb3VudCA9IChjb3VudCA+IHBvcnQtPmJ1bGtfb3V0X3NpemUpID8gcG9ydC0+YnVsa19vdXRfc2l6ZSA6IGNvdW50OworCisJCW1lbWNweSAocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIGJ1ZiwgY291bnQpOworCQlkYXRhID0gcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBjb3VudCwgZGF0YSk7CisKKwkJLyogc2V0IHVwIG91ciB1cmIgKi8KKwkJdXNiX2ZpbGxfYnVsa191cmIgKHBvcnQtPndyaXRlX3VyYiwgc2VyaWFsLT5kZXYsCisJCQkJICAgdXNiX3NuZGJ1bGtwaXBlIChzZXJpYWwtPmRldiwKKwkJCQkJCSAgICBwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAorCQkJCSAgIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBjb3VudCwKKwkJCQkgICAoKHNlcmlhbC0+dHlwZS0+d3JpdGVfYnVsa19jYWxsYmFjaykgPyAKKwkJCQkgICAgIHNlcmlhbC0+dHlwZS0+d3JpdGVfYnVsa19jYWxsYmFjayA6CisJCQkJICAgICB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfYnVsa19jYWxsYmFjayksIHBvcnQpOworCisJCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQgKi8KKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQllbHNlCisJCQlyZXN1bHQgPSBjb3VudDsKKworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qIG5vIGJ1bGsgb3V0LCBzbyByZXR1cm4gMCBieXRlcyB3cml0dGVuICovCisJcmV0dXJuICgwKTsKK30KKworaW50IHVzYl9zZXJpYWxfZ2VuZXJpY193cml0ZV9yb29tIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJaW50IHJvb20gPSAwOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCisJaWYgKHNlcmlhbC0+bnVtX2J1bGtfb3V0KSB7CisJCWlmIChwb3J0LT53cml0ZV91cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpCisJCQlyb29tID0gcG9ydC0+YnVsa19vdXRfc2l6ZTsKKwl9CisKKwlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fRlVOQ1RJT05fXywgcm9vbSk7CisJcmV0dXJuIChyb29tKTsKK30KKworaW50IHVzYl9zZXJpYWxfZ2VuZXJpY19jaGFyc19pbl9idWZmZXIgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQgY2hhcnMgPSAwOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQpIHsKKwkJaWYgKHBvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykKKwkJCWNoYXJzID0gcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCX0KKworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19GVU5DVElPTl9fLCBjaGFycyk7CisJcmV0dXJuIChjaGFycyk7Cit9CisKK3ZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgaTsKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCWZvciAoaSA9IDA7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGggOyArK2kpIHsKKwkJCS8qIGlmIHdlIGluc2VydCBtb3JlIHRoYW4gVFRZX0ZMSVBCVUZfU0laRSBjaGFyYWN0ZXJzLCB3ZSBkcm9wIHRoZW0uICovCisJCQlpZih0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkgeworCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQl9CisJCQkvKiB0aGlzIGRvZXNuJ3QgYWN0dWFsbHkgcHVzaCB0aGUgZGF0YSB0aHJvdWdoIHVubGVzcyB0dHktPmxvd19sYXRlbmN5IGlzIHNldCAqLworCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCAwKTsKKwkJfQorCSAgCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJfQorCisJLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkICAqLworCXVzYl9maWxsX2J1bGtfdXJiIChwb3J0LT5yZWFkX3VyYiwgc2VyaWFsLT5kZXYsCisJCQkgICB1c2JfcmN2YnVsa3BpcGUgKHNlcmlhbC0+ZGV2LAorCQkJCSAgIAkgICAgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCSAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJICAgKChzZXJpYWwtPnR5cGUtPnJlYWRfYnVsa19jYWxsYmFjaykgPyAKKwkJCSAgICAgc2VyaWFsLT50eXBlLT5yZWFkX2J1bGtfY2FsbGJhY2sgOiAKKwkJCSAgICAgdXNiX3NlcmlhbF9nZW5lcmljX3JlYWRfYnVsa19jYWxsYmFjayksIHBvcnQpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7Cit9CisKK3ZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX3dyaXRlX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwl1c2Jfc2VyaWFsX3BvcnRfc29mdGludCgodm9pZCAqKXBvcnQpOworCisJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7Cit9CisKK3ZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCBpOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBzdG9wIHJlYWRzIGFuZCB3cml0ZXMgb24gYWxsIHBvcnRzICovCisJZm9yIChpPTA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCWdlbmVyaWNfY2xlYW51cChzZXJpYWwtPnBvcnRbaV0pOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvXzE2NjU0LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fMTY2NTQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTNhYmM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvXzE2NjU0LmgKQEAgLTAsMCArMSwxOTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKgkxNjY1NC5ICQlEZWZpbml0aW9ucyBmb3IgMTZDNjU0IFVBUlQgdXNlZCBvbiBFZGdlUG9ydHMKKyAqCisgKglDb3B5cmlnaHQgKEMpIDE5OTggSW5zaWRlIE91dCBOZXR3b3JrcywgSW5jLgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIWRlZmluZWQoXzE2NjU0X0gpCisjZGVmaW5lCV8xNjY1NF9ICisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKgkJCUQgZSBmIGkgbiBlIHMgICAvICAgVCB5IHAgZSBkIGUgZiBzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8vCisJLy8gVUFSVCByZWdpc3RlciBudW1iZXJzCisJLy8gTnVtYmVycyAwLTcgYXJlIHBhc3NlZCB0byB0aGUgRWRnZXBvcnQgZGlyZWN0bHkuIE51bWJlcnMgOCBhbmQKKwkvLyBhYm92ZSBhcmUgdXNlZCBpbnRlcm5hbGx5IHRvIGluZGljYXRlIHRoYXQgd2UgbXVzdCBlbmFibGUgYWNjZXNzCisJLy8gdG8gdGhlbSB2aWEgTENSIGJpdCAweDgwIG9yIExDUiA9IDB4QkYuCisJLy8gVGhlIHJlZ2lzdGVyIG51bWJlciBzZW50IHRvIHRoZSBFZGdlcG9ydCBpcyB0aGVuICh4ICYgMHg3KS4KKwkvLworCS8vIERyaXZlciBtdXN0IG5vdCBhY2Nlc3MgcmVnaXN0ZXJzIHRoYXQgYWZmZWN0IG9wZXJhdGlvbiBvZiB0aGUKKwkvLyB0aGUgRWRnZVBvcnQgZmlybXdhcmUgLS0gdGhhdCBpbmNsdWRlcyBUSFIsIFJIUiwgSUVSLCBGQ1IuCisKKworI2RlZmluZSBUSFIJCQkwCS8vICEgVHJhbnNtaXQgSG9sZGluZyBSZWdpc3RlciAoV3JpdGUpCisjZGVmaW5lIFJEUgkJCTAJLy8gISBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXIgKFJlYWQpCisjZGVmaW5lIElFUgkJCTEJLy8gISBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisjZGVmaW5lIEZDUgkJCTIJLy8gISBGaWZvIENvbnRyb2wgUmVnaXN0ZXIgKFdyaXRlKQorI2RlZmluZSBJU1IJCQkyCS8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKFJlYWQpCisjZGVmaW5lIExDUgkJCTMJLy8gTGluZSBDb250cm9sIFJlZ2lzdGVyCisjZGVmaW5lIE1DUgkJCTQJLy8gTW9kZW0gQ29udHJvbCBSZWdpc3RlcgorI2RlZmluZSBMU1IJCQk1CS8vIExpbmUgU3RhdHVzIFJlZ2lzdGVyCisjZGVmaW5lIE1TUgkJCTYJLy8gTW9kZW0gU3RhdHVzIFJlZ2lzdGVyCisjZGVmaW5lIFNQUgkJCTcJLy8gU2NyYXRjaFBhZCBSZWdpc3RlcgorI2RlZmluZSBETEwJCQk4CS8vIEJhbmsyWyAwIF0gRGl2aXNvciBMYXRjaCBMU0IKKyNkZWZpbmUgRExNCQkJOQkvLyBCYW5rMlsgMSBdIERpdmlzb3IgTGF0Y2ggTVNCCisjZGVmaW5lIEVGUgkJCTEwCS8vIEJhbmsyWyAyIF0gRXh0ZW5kZWQgRnVuY3Rpb24gUmVnaXN0ZXIKKy8vZWZpbmUgdW51c2VkCQkJMTEJLy8gQmFuazJbIDMgXQorI2RlZmluZSBYT04xCQkJMTIJLy8gQmFuazJbIDQgXSBYb24tMQorI2RlZmluZSBYT04yCQkJMTMJLy8gQmFuazJbIDUgXSBYb24tMgorI2RlZmluZSBYT0ZGMQkJCTE0CS8vIEJhbmsyWyA2IF0gWG9mZi0xCisjZGVmaW5lIFhPRkYyCQkJMTUJLy8gQmFuazJbIDcgXSBYb2ZmLTIKKworI2RlZmluZQlOVU1fMTY2NTRfUkVHUwkJMTYKKworI2RlZmluZSBJU19SRUdfMk5EX0JBTksoeCkJKCh4KSA+PSA4KQorCisJLy8KKwkvLyBCaXQgZGVmaW5pdGlvbnMgZm9yIGVhY2ggcmVnaXN0ZXIKKwkvLworCisjZGVmaW5lIElFUl9SWAkJCTB4MDEJLy8gRW5hYmxlIHJlY2VpdmUgaW50ZXJydXB0CisjZGVmaW5lIElFUl9UWAkJCTB4MDIJLy8gRW5hYmxlIHRyYW5zbWl0IGludGVycnVwdAorI2RlZmluZSBJRVJfUlhTCQkJMHgwNAkvLyBFbmFibGUgcmVjZWl2ZSBzdGF0dXMgaW50ZXJydXB0CisjZGVmaW5lIElFUl9NRE0JCQkweDA4CS8vIEVuYWJsZSBtb2RlbSBzdGF0dXMgaW50ZXJydXB0CisjZGVmaW5lIElFUl9TTEVFUAkJMHgxMAkvLyBFbmFibGUgc2xlZXAgbW9kZQorI2RlZmluZSBJRVJfWE9GRgkJMHgyMAkvLyBFbmFibGUgcy93IGZsb3cgY29udHJvbCAoWE9GRikgaW50ZXJydXB0CisjZGVmaW5lIElFUl9SVFMJCQkweDQwCS8vIEVuYWJsZSBSVFMgaW50ZXJydXB0CisjZGVmaW5lIElFUl9DVFMJCQkweDgwCS8vIEVuYWJsZSBDVFMgaW50ZXJydXB0CisjZGVmaW5lIElFUl9FTkFCTEVfQUxMCQkweEZGCS8vIEVuYWJsZSBhbGwgaW50cworCisKKyNkZWZpbmUgRkNSX0ZJRk9fRU4JCTB4MDEJLy8gRW5hYmxlIEZJRk9zCisjZGVmaW5lIEZDUl9SWENMUgkJMHgwMgkvLyBSZXNldCBSeCBGSUZPCisjZGVmaW5lIEZDUl9UWENMUgkJMHgwNAkvLyBSZXNldCBUeCBGSUZPCisjZGVmaW5lIEZDUl9ETUFfQkxLCQkweDA4CS8vIEVuYWJsZSBETUEgYmxvY2sgbW9kZQorI2RlZmluZSBGQ1JfVFhfTEVWRUxfTUFTSwkweDMwCS8vIE1hc2sgZm9yIFR4IEZJRk8gTGV2ZWwKKyNkZWZpbmUgRkNSX1RYX0xFVkVMXzgJCTB4MDAJLy8gVHggRklGTyBMZXZlbCA9ICA4IGJ5dGVzCisjZGVmaW5lIEZDUl9UWF9MRVZFTF8xNgkJMHgxMAkvLyBUeCBGSUZPIExldmVsID0gMTYgYnl0ZXMKKyNkZWZpbmUgRkNSX1RYX0xFVkVMXzMyCQkweDIwCS8vIFR4IEZJRk8gTGV2ZWwgPSAzMiBieXRlcworI2RlZmluZSBGQ1JfVFhfTEVWRUxfNTYJCTB4MzAJLy8gVHggRklGTyBMZXZlbCA9IDU2IGJ5dGVzCisjZGVmaW5lIEZDUl9SWF9MRVZFTF9NQVNLCTB4QzAJLy8gTWFzayBmb3IgUnggRklGTyBMZXZlbAorI2RlZmluZSBGQ1JfUlhfTEVWRUxfOAkJMHgwMAkvLyBSeCBGSUZPIExldmVsID0gIDggYnl0ZXMKKyNkZWZpbmUgRkNSX1JYX0xFVkVMXzE2CQkweDQwCS8vIFJ4IEZJRk8gTGV2ZWwgPSAxNiBieXRlcworI2RlZmluZSBGQ1JfUlhfTEVWRUxfNTYJCTB4ODAJLy8gUnggRklGTyBMZXZlbCA9IDU2IGJ5dGVzCisjZGVmaW5lIEZDUl9SWF9MRVZFTF82MAkJMHhDMAkvLyBSeCBGSUZPIExldmVsID0gNjAgYnl0ZXMKKworCisjZGVmaW5lIElTUl9JTlRfTURNX1NUQVRVUwkweDAwCS8vIE1vZGVtIHN0YXR1cyBpbnQgcGVuZGluZworI2RlZmluZSBJU1JfSU5UX05PTkUJCTB4MDEJLy8gTm8gaW50ZXJydXB0IHBlbmRpbmcKKyNkZWZpbmUgSVNSX0lOVF9UWFJEWQkJMHgwMgkvLyBUeCByZWFkeSBpbnQgcGVuZGluZworI2RlZmluZSBJU1JfSU5UX1JYUkRZCQkweDA0CS8vIFJ4IHJlYWR5IGludCBwZW5kaW5nCisjZGVmaW5lIElTUl9JTlRfTElORV9TVEFUVVMJMHgwNgkvLyBMaW5lIHN0YXR1cyBpbnQgcGVuZGluZworI2RlZmluZSBJU1JfSU5UX1JYX1RJTUVPVVQJMHgwQwkvLyBSeCB0aW1lb3V0IGludCBwZW5kaW5nCisjZGVmaW5lIElTUl9JTlRfUlhfWE9GRgkJMHgxMAkvLyBSeCBYb2ZmIGludCBwZW5kaW5nCisjZGVmaW5lIElTUl9JTlRfUlRTX0NUUwkJMHgyMAkvLyBSVFMvQ1RTIGNoYW5nZSBpbnQgcGVuZGluZworI2RlZmluZSBJU1JfRklGT19FTkFCTEVECTB4QzAJLy8gQml0cyBzZXQgaWYgRklGT3MgZW5hYmxlZAorI2RlZmluZSBJU1JfSU5UX0JJVFNfTUFTSwkweDNFCS8vIE1hc2sgdG8gaXNvbGF0ZSB2YWxpZCBpbnQgY2F1c2VzCisKKworI2RlZmluZSBMQ1JfQklUU181CQkweDAwCS8vIDUgYml0cy9jaGFyCisjZGVmaW5lIExDUl9CSVRTXzYJCTB4MDEJLy8gNiBiaXRzL2NoYXIKKyNkZWZpbmUgTENSX0JJVFNfNwkJMHgwMgkvLyA3IGJpdHMvY2hhcgorI2RlZmluZSBMQ1JfQklUU184CQkweDAzCS8vIDggYml0cy9jaGFyCisjZGVmaW5lIExDUl9CSVRTX01BU0sJCTB4MDMJLy8gTWFzayBmb3IgYml0cy9jaGFyIGZpZWxkCisKKyNkZWZpbmUgTENSX1NUT1BfMQkJMHgwMAkvLyAxIHN0b3AgYml0CisjZGVmaW5lIExDUl9TVE9QXzFfNQkJMHgwNAkvLyAxLjUgc3RvcCBiaXRzIChpZiA1ICAgYml0cy9jaGFyKQorI2RlZmluZSBMQ1JfU1RPUF8yCQkweDA0CS8vIDIgc3RvcCBiaXRzICAgKGlmIDYtOCBiaXRzL2NoYXIpCisjZGVmaW5lIExDUl9TVE9QX01BU0sJCTB4MDQJLy8gTWFzayBmb3Igc3RvcCBiaXRzIGZpZWxkCisKKyNkZWZpbmUgTENSX1BBUl9OT05FCQkweDAwCS8vIE5vIHBhcml0eQorI2RlZmluZSBMQ1JfUEFSX09ERAkJMHgwOAkvLyBPZGQgcGFyaXR5CisjZGVmaW5lIExDUl9QQVJfRVZFTgkJMHgxOAkvLyBFdmVuIHBhcml0eQorI2RlZmluZSBMQ1JfUEFSX01BUksJCTB4MjgJLy8gRm9yY2UgcGFyaXR5IGJpdCB0byAxCisjZGVmaW5lIExDUl9QQVJfU1BBQ0UJCTB4MzgJLy8gRm9yY2UgcGFyaXR5IGJpdCB0byAwCisjZGVmaW5lIExDUl9QQVJfTUFTSwkJMHgzOAkvLyBNYXNrIGZvciBwYXJpdHkgZmllbGQKKworI2RlZmluZSBMQ1JfU0VUX0JSRUFLCQkweDQwCS8vIFNldCBCcmVhayBjb25kaXRpb24KKyNkZWZpbmUgTENSX0RMX0VOQUJMRQkJMHg4MAkvLyBFbmFibGUgYWNjZXNzIHRvIGRpdmlzb3IgbGF0Y2gKKworI2RlZmluZSBMQ1JfQUNDRVNTX0VGUgkJMHhCRgkvLyBMb2FkIHRoaXMgdmFsdWUgdG8gYWNjZXNzIERMTCxETE0sCisJCQkJCS8vIGFuZCBhbHNvIHRoZSAnNjU0LW9ubHkgcmVnaXN0ZXJzCisJCQkJCS8vIEVGUiwgWE9OMSwgWE9OMiwgWE9GRjEsIFhPRkYyCisKKworI2RlZmluZSBNQ1JfRFRSCQkJMHgwMQkvLyBBc3NlcnQgRFRSCisjZGVmaW5lIE1DUl9SVFMJCQkweDAyCS8vIEFzc2VydCBSVFMKKyNkZWZpbmUgTUNSX09VVDEJCTB4MDQJLy8gTG9vcGJhY2sgb25seTogU2V0cyBzdGF0ZSBvZiBSSQorI2RlZmluZSBNQ1JfTUFTVEVSX0lFCQkweDA4CS8vIEVuYWJsZSBpbnRlcnJ1cHQgb3V0cHV0cworI2RlZmluZSBNQ1JfTE9PUEJBQ0sJCTB4MTAJLy8gU2V0IGludGVybmFsIChkaWdpdGFsKSBsb29wYmFjayBtb2RlCisjZGVmaW5lIE1DUl9YT05fQU5ZCQkweDIwCS8vIEVuYWJsZSBhbnkgY2hhciB0byBleGl0IFhPRkYgbW9kZQorI2RlZmluZSBNQ1JfSVJfRU5BQkxFCQkweDQwCS8vIEVuYWJsZSBJckRBIGZ1bmN0aW9ucworI2RlZmluZSBNQ1JfQlJHX0RJVl80CQkweDgwCS8vIERpdmlkZSBiYXVkIHJhdGUgY2xrIGJ5IC80IGluc3RlYWQgb2YgLzEKKworCisjZGVmaW5lIExTUl9SWF9BVkFJTAkJMHgwMQkvLyBSeCBkYXRhIGF2YWlsYWJsZQorI2RlZmluZSBMU1JfT1ZFUl9FUlIJCTB4MDIJLy8gUnggb3ZlcnJ1bgorI2RlZmluZSBMU1JfUEFSX0VSUgkJMHgwNAkvLyBSeCBwYXJpdHkgZXJyb3IKKyNkZWZpbmUgTFNSX0ZSTV9FUlIJCTB4MDgJLy8gUnggZnJhbWluZyBlcnJvcgorI2RlZmluZSBMU1JfQlJFQUsJCTB4MTAJLy8gUnggYnJlYWsgY29uZGl0aW9uIGRldGVjdGVkCisjZGVmaW5lIExTUl9UWF9FTVBUWQkJMHgyMAkvLyBUeCBGaWZvIGVtcHR5CisjZGVmaW5lIExTUl9UWF9BTExfRU1QVFkJMHg0MAkvLyBUeCBGaWZvIGFuZCBzaGlmdCByZWdpc3RlciBlbXB0eQorI2RlZmluZSBMU1JfRklGT19FUlIJCTB4ODAJLy8gUnggRmlmbyBjb250YWlucyBhdCBsZWFzdCAxIGVycmVkIGNoYXIKKworCisjZGVmaW5lIEVER0VQT1JUX01TUl9ERUxUQV9DVFMJMHgwMQkvLyBDVFMgY2hhbmdlZCBmcm9tIGxhc3QgcmVhZAorI2RlZmluZSBFREdFUE9SVF9NU1JfREVMVEFfRFNSCTB4MDIJLy8gRFNSIGNoYW5nZWQgZnJvbSBsYXN0IHJlYWQKKyNkZWZpbmUgRURHRVBPUlRfTVNSX0RFTFRBX1JJCTB4MDQJLy8gUkkgIGNoYW5nZWQgZnJvbSAwIC0+IDEKKyNkZWZpbmUgRURHRVBPUlRfTVNSX0RFTFRBX0NECTB4MDgJLy8gQ0QgIGNoYW5nZWQgZnJvbSBsYXN0IHJlYWQKKyNkZWZpbmUgRURHRVBPUlRfTVNSX0NUUwkweDEwCS8vIEN1cnJlbnQgc3RhdGUgb2YgQ1RTCisjZGVmaW5lIEVER0VQT1JUX01TUl9EU1IJMHgyMAkvLyBDdXJyZW50IHN0YXRlIG9mIERTUgorI2RlZmluZSBFREdFUE9SVF9NU1JfUkkJCTB4NDAJLy8gQ3VycmVudCBzdGF0ZSBvZiBSSQorI2RlZmluZSBFREdFUE9SVF9NU1JfQ0QJCTB4ODAJLy8gQ3VycmVudCBzdGF0ZSBvZiBDRAorCisKKworCQkJCQkvLwlUeAkJUngKKwkJCQkJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjZGVmaW5lIEVGUl9TV0ZDX05PTkUJCTB4MDAJLy8JTm9uZQkJTm9uZQorI2RlZmluZSBFRlJfU1dGQ19SWDEJCTB4MDIgCS8vCU5vbmUJCVhPRkYxCisjZGVmaW5lIEVGUl9TV0ZDX1JYMgkJMHgwMSAJLy8JTm9uZQkJWE9GRjIKKyNkZWZpbmUgRUZSX1NXRkNfUlgxMgkJMHgwMyAJLy8JTm9uZQkJWE9GRjEgJiBYT0ZGMgorI2RlZmluZSBFRlJfU1dGQ19UWDEJCTB4MDggCS8vCVhPRkYxCQlOb25lCisjZGVmaW5lIEVGUl9TV0ZDX1RYMV9SWDEJMHgwYSAJLy8JWE9GRjEJCVhPRkYxCisjZGVmaW5lIEVGUl9TV0ZDX1RYMV9SWDIJMHgwOSAJLy8JWE9GRjEJCVhPRkYyCisjZGVmaW5lIEVGUl9TV0ZDX1RYMV9SWDEyCTB4MGIgCS8vCVhPRkYxCQlYT0ZGMSAmIFhPRkYyCisjZGVmaW5lIEVGUl9TV0ZDX1RYMgkJMHgwNCAJLy8JWE9GRjIJCU5vbmUKKyNkZWZpbmUgRUZSX1NXRkNfVFgyX1JYMQkweDA2IAkvLwlYT0ZGMgkJWE9GRjEKKyNkZWZpbmUgRUZSX1NXRkNfVFgyX1JYMgkweDA1IAkvLwlYT0ZGMgkJWE9GRjIKKyNkZWZpbmUgRUZSX1NXRkNfVFgyX1JYMTIJMHgwNyAJLy8JWE9GRjIJCVhPRkYxICYgWE9GRjIKKyNkZWZpbmUgRUZSX1NXRkNfVFgxMgkJMHgwYyAJLy8JWE9GRjEgJiBYT0ZGMglOb25lCisjZGVmaW5lIEVGUl9TV0ZDX1RYMTJfUlgxCTB4MGUgCS8vCVhPRkYxICYgWE9GRjIJWE9GRjEKKyNkZWZpbmUgRUZSX1NXRkNfVFgxMl9SWDIJMHgwZCAJLy8JWE9GRjEgJiBYT0ZGMglYT0ZGMgorI2RlZmluZSBFRlJfU1dGQ19UWDEyX1JYMTIJMHgwZiAJLy8JWE9GRjEgJiBYT0ZGMglYT0ZGMSAmIFhPRkYyCisKKyNkZWZpbmUgRUZSX1RYX0ZDX01BU0sJCTB4MGMJLy8gTWFzayB0byBpc29sYXRlIFJ4IGZsb3cgY29udHJvbAorI2RlZmluZSBFRlJfVFhfRkNfTk9ORQkJMHgwMAkvLyBObyBUeCBYb24vWG9mZiBmbG93IGNvbnRyb2wKKyNkZWZpbmUgRUZSX1RYX0ZDX1gxCQkweDA4CS8vIFRyYW5zbWl0IFhvbjEvWG9mZjEKKyNkZWZpbmUgRUZSX1RYX0ZDX1gyCQkweDA0CS8vIFRyYW5zbWl0IFhvbjIvWG9mZjIKKyNkZWZpbmUgRUZSX1RYX0ZDX1gxXzIJCTB4MGMJLy8gVHJhbnNtaXQgWG9uMSYyL1hvZmYxJjIKKworI2RlZmluZSBFRlJfUlhfRkNfTUFTSwkJMHgwMwkvLyBNYXNrIHRvIGlzb2xhdGUgUnggZmxvdyBjb250cm9sCisjZGVmaW5lIEVGUl9SWF9GQ19OT05FCQkweDAwCS8vIE5vIFJ4IFhvbi9Yb2ZmIGZsb3cgY29udHJvbAorI2RlZmluZSBFRlJfUlhfRkNfWDEJCTB4MDIJLy8gUmVjZWl2ZXIgY29tcGFyZXMgWG9uMS9Yb2ZmMQorI2RlZmluZSBFRlJfUlhfRkNfWDIJCTB4MDEJLy8gUmVjZWl2ZXIgY29tcGFyZXMgWG9uMi9Yb2ZmMgorI2RlZmluZSBFRlJfUlhfRkNfWDFfMgkJMHgwMwkvLyBSZWNlaXZlciBjb21wYXJlcyBYb24xJjIvWG9mZjEmMgorCisKKyNkZWZpbmUgRUZSX1NXRkNfTUFTSwkJMHgwRgkvLyBNYXNrIGZvciBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgZmllbGQKKyNkZWZpbmUgRUZSX0VOQUJMRV8xNjY1NAkweDEwCS8vIEVuYWJsZSAxNkM2NTQgZmVhdHVyZXMKKyNkZWZpbmUgRUZSX1NQRUNfREVURUNUCQkweDIwCS8vIEVuYWJsZSBzcGVjaWFsIGNoYXJhY3RlciBkZXRlY3QgaW50ZXJydXB0CisjZGVmaW5lIEVGUl9BVVRPX1JUUwkJMHg0MAkvLyBVc2UgUlRTIGZvciBSeCBmbG93IGNvbnRyb2wKKyNkZWZpbmUgRUZSX0FVVE9fQ1RTCQkweDgwCS8vIFVzZSBDVFMgZm9yIFR4IGZsb3cgY29udHJvbAorCisjZW5kaWYJLy8gaWYgIWRlZmluZWQoXzE2NjU0X0gpCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM1YjVhZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jCkBAIC0wLDAgKzEsMzExMyBAQAorLyoKKyAqIEVkZ2Vwb3J0IFVTQiBTZXJpYWwgQ29udmVydGVyIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBJbnNpZGUgT3V0IE5ldHdvcmtzLCBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZGV2aWNlczoKKyAqCUVkZ2Vwb3J0LzQKKyAqCUVkZ2Vwb3J0LzR0CisgKglFZGdlcG9ydC8yCisgKglFZGdlcG9ydC80aQorICoJRWRnZXBvcnQvMmkKKyAqCUVkZ2Vwb3J0LzQyMQorICoJRWRnZXBvcnQvMjEKKyAqCVJhcGlkcG9ydC80CisgKglFZGdlcG9ydC84CisgKglFZGdlcG9ydC8yRDgKKyAqCUVkZ2Vwb3J0LzREOAorICoJRWRnZXBvcnQvOGkKKyAqCisgKiBGb3IgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIGNvbnRhY3QgSW5zaWRlIE91dAorICogTmV0d29ya3MgdGVjaG5pY2FsIHN1cHBvcnQsIG9yIFBldGVyIEJlcmdlciA8cGJlcmdlckBicmltc29uLmNvbT4sCisgKiBvciBBbCBCb3JjaGVycyA8YWxib3JjaGVyc0BzdGVpbmVycG9pbnQuY29tPi4KKyAqCisgKiBWZXJzaW9uIGhpc3Rvcnk6CisgKiAKKyAqIDIwMDNfMDRfMDMgYWwgYm9yY2hlcnMKKyAqICAtIGZpeGVkIGEgYnVnICh0aGF0IHNob3dzIHVwIHdpdGggZG9zZW11KSB3aGVyZSB0aGUgdHR5IHN0cnVjdCBpcworICogICAgdXNlZCBpbiBhIGNhbGxiYWNrIGFmdGVyIGl0IGhhcyBiZWVuIGZyZWVkCisgKgorICogMi4zIDIwMDJfMDNfMDggZ3JlZyBrcm9haC1oYXJ0bWFuCisgKgktIGZpeGVkIGJ1ZyB3aGVuIG11bHRpcGxlIGRldmljZXMgd2VyZSBhdHRhY2hlZCBhdCB0aGUgc2FtZSB0aW1lLgorICoKKyAqIDIuMiAyMDAxXzExXzE0IGdyZWcga3JvYWgtaGFydG1hbgorICoJLSBmaXhlZCBidWcgaW4gZWRnZV9jbG9zZSB0aGF0IGtlcHQgdGhlIHBvcnQgZnJvbSBiZWluZyB1c2VkIG1vcmUKKyAqCSAgdGhhbiBvbmNlLgorICoJLSBmaXhlZCBtZW1vcnkgbGVhayBvbiBkZXZpY2UgcmVtb3ZhbC4KKyAqCS0gZml4ZWQgcG90ZW50aWFsIGRvdWJsZSBmcmVlIG9mIG1lbW9yeSB3aGVuIGNvbW1hbmQgdXJiIHN1Ym1pdHRpbmcKKyAqCSAgZmFpbGVkLgorICoJLSBvdGhlciBzbWFsbCBjbGVhbnVwcyB3aGVuIHRoZSBkZXZpY2UgaXMgcmVtb3ZlZAorICoJCisgKiAyLjEgMjAwMV8wN18wOSBncmVnIGtyb2FoLWhhcnRtYW4KKyAqCS0gYWRkZWQgc3VwcG9ydCBmb3IgVElPQ01CSVMgYW5kIFRJT0NNQklDLgorICoKKyAqICAgICAoMDQvMDgvMjAwMSkgZ2IKKyAqCS0gSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KKyAqCisgKiAyLjAgMjAwMV8wM18wNSBncmVnIGtyb2FoLWhhcnRtYW4KKyAqCS0gcmV3b3JrZWQgZW50aXJlIGRyaXZlciB0byBmaXQgcHJvcGVybHkgaW4gd2l0aCB0aGUgb3RoZXIgdXNiLXNlcmlhbAorICoJICBkcml2ZXJzLiAgT2NjYXNpb25hbCBvb3BzZXMgc3RpbGwgaGFwcGVuLCBidXQgaXQncyBhIGdvb2Qgc3RhcnQuCisgKgorICogMS4yLjMgKDAyLzIzLzIwMDEpIGdyZWcga3JvYWgtaGFydG1hbgorICoJLSBjaGFuZ2VkIGRldmljZSB0YWJsZSB0byB3b3JrIHByb3Blcmx5IGZvciAyLjQueCBmaW5hbCBmb3JtYXQuCisgKgktIGZpeGVkIHByb2JsZW0gd2l0aCBkcm9wcGluZyBkYXRhIGF0IGhpZ2ggZGF0YSByYXRlcy4KKyAqCisgKiAxLjIuMiAoMTEvMjcvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisgKgktIGNsZWFuZWQgdXAgbW9yZSBOVGlzbXMuCisgKgktIEFkZGVkIGRldmljZSB0YWJsZSBmb3IgMi40LjAtdGVzdDExCisgKgorICogMS4yLjEgKDExLzA4LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgorICoJLSBTdGFydGVkIHRvIGNsZWFuIHVwIE5UaXNtcy4KKyAqCS0gRml4ZWQgcHJvYmxlbSB3aXRoIGRldiBmaWVsZCBvZiB1cmIgZm9yIGtlcm5lbHMgPj0gMi40LjAtdGVzdDkKKyAqCisgKiAxLjIgKDEwLzE3LzIwMDApIERhdmlkIElhY292ZWxsaQorICogCVJlbW92ZSBhbGwgRVBJQyBjb2RlIGFuZCBHUEwgc291cmNlCisgKiAgRml4IFJFTEVWQU5UX0lGTEFHIG1hY3JvIHRvIGluY2x1ZGUgZmxvdyBjb250cm9sIAorICogIGNoYW5nZXMgcG9ydCBjb25maWd1cmF0aW9uIGNoYW5nZXMuCisgKiAgRml4IHJlZGVmaW5pdGlvbiBvZiBTRVJJQUxfTUFHSUMKKyAqICBDaGFuZ2UgYWxsIHRpbWVvdXQgdmFsdWVzIHRvIDUgc2Vjb25kcworICogIFRyaWVkIHRvIGZpeCB0aGUgVUhDSSBtdWx0aXBsZSB1cmIgc3VibWlzc2lvbiwgYnV0IGZhaWxlZCBtaXNlcmFibHkuCisgKiAgaXQgc2VlbXMgdG8gd29yayBmaW5lIHdpdGggT0hDSS4KKyAqICAoIEdyZWcgdGFrZSBhIGxvb2sgYXQgdGhlICNpZiAwIGF0IGVuZCBvZiBXcml0ZUNtZFVzYigpIHdlIG11c3QgCisgKiAgICBmaW5kIGEgd2F5IHRvIHdvcmsgYXJvdW50IHRoaXMgVUhDSSBidWcgKQorICoKKyAqIDEuMSAoMTAvMTEvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCisgKiAgRml4IFhPTi9YT0ZGIGZsb3cgY29udHJvbCB0byBzdXBwb3J0IGJvdGggSVhPTiBhbmQgSVhPRkYKKyAqCisgKiAwLjkuMjcgKDA2LzMwLzIwMDApIERhdmlkIElhY292ZWxsaQorICogIEFkZGVkIHRyYW5zbWl0IHF1ZXVlIGFuZCBub3cgYWxsb2NhdGUgdXJiIGZvciBjb21tYW5kIHdyaXRlcy4KKyAqCisgKiAwLjkuMjYgKDA2LzI5LzIwMDApIERhdmlkIElhY292ZWxsaQorICogIEFkZCBzdXBwb3J0IGZvciA4MDI1MSBiYXNlZCBlZGdlcG9ydAorICoKKyAqIDAuOS4yNSAoMDYvMjcvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCisgKiAgRG8gbm90IGNsb3NlIHRoZSBwb3J0IGlmIGl0IGhhcyBtdWx0aXBsZSBvcGVucy4KKyAqCisgKiAwLjkuMjQgKDA1LzI2LzIwMDApIERhdmlkIElhY292ZWxsaQorICogIEFkZCBJT0NUTHMgdG8gc3VwcG9ydCBSWFRYIGFuZCBKQVZBIFBPUyAKKyAqICBhbmQgZmlyc3QgY3V0IGF0IHJ1bm5pbmcgQmxhY2tCb3ggRGVtbworICoKKyAqIDAuOS4yMyAoMDUvMjQvMjAwMCkgRGF2aWQgSWFjb3ZlbGxpCisgKiAgQWRkIElPQ1RMcyB0byBzdXBwb3J0IFJYVFggYW5kIEpBVkEgUE9TCisgKgorICogMC45LjIyICgwNS8yMy8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKKyAqICBmaXhlZCBidWcgaW4gZW51bWVyYXRpb24uICBJZiBlcGNvbmZpZyB0dXJucyBvbiBtYXBwaW5nIGJ5CisgKiAgcGF0aCBhZnRlciBhIGRldmljZSBpcyBhbHJlYWR5IHBsdWdnZWQgaW4sIHdlIG5vdyB1cGRhdGUKKyAqICB0aGUgbWFwcGluZyBjb3JyZWN0bHkKKyAqCisgKiAwLjkuMjEgKDA1LzE2LzIwMDApIERhdmlkIElhY292ZWxsaQorICogIEFkZGVkIEJsb2NrVW50aWxDaGFzZVJlc3AoKSB0byBhbHNvIHdhaXQgZm9yIHR4Y3JlZGl0cworICogIFVwZGF0ZWQgdGhlIHdheSB3ZSBhbGxvY2F0ZSBhbmQgaGFuZGxlIHdyaXRlIFVSQnMgCisgKglBZGQgZGVidWcgY29kZSB0byBkdW1wIGJ1ZmZlcnMKKyAqCisgKiAwLjkuMjAgKDA1LzAxLzIwMDApIERhdmlkIElhY292ZWxsaQorICoJY2hhbmdlIGRyaXZlciB0byB1c2UgdXNiL3R0cy8KKyAqCisgKiAwLjkuMTkgKDA1LzAxLzIwMDApIERhdmlkIElhY292ZWxsaQorICogIFVwZGF0ZSBjb2RlIHRvIGNvbXBpbGUgaWYgREVCVUcgaXMgb2ZmCisgKgorICogMC45LjE4ICgwNC8yOC8yMDAwKSBEYXZpZCBJYWNvdmVsbGkKKyAqICBjbGVhbnVwIGFuZCB0ZXN0IHR0eV9yZWdpc3RlciB3aXRoIGRldmZzCisgKgorICogMC45LjE3ICgwNC8yNy8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKyAqIAljaGFuZ2VkIHR0eV9yZWdpc3RlciBhcm91bmQgdG8gYmUgbGlrZSB0aGUgd2F5IGl0CisgKiAJd2FzIGJlZm9yZSwgYnV0IG5vdyBpdCB3b3JrcyBwcm9wZXJseSB3aXRoIGRldmZzLgorICoKKyAqIDAuOS4xNiAoMDQvMjYvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCisgKiAgRml4ZWQgYnVnIGluIEdldFByb2R1Y3RJbmZvKCkKKyAqCisgKiAwLjkuMTUgKDA0LzI1LzIwMDApIGRhdmlkIGlhY292ZWxsaQorICoJVXBkYXRlZCBlbnVtZXJhdGlvbgorICoKKyAqIDAuOS4xNCAoMDQvMjQvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCisgKiAgUmVtb3ZlZCBhbGwgY29uZmlnL3N0YXR1cyBJT0NUTFMgYW5kIAorICogIGNvbnZlcnRlZCB0byB1c2luZyAvcHJvYy9lZGdlcG9ydAorICogIHN0aWxsIHBsYXlpbmcgd2l0aCBkZXZmcworICoKKyAqIDAuOS4xMyAoMDQvMjQvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCisgKiAgUmVtb3ZlZCBjb25maWd1cmF0aW9uIGJhc2VkIG9uIHR0eVVTQjAKKyAqICBBZGRlZCBzdXBwb3J0IGZvciBjb25maWd1cmF0aW9uIHVzaW5nIC9wcm9kL2VkZ2Vwb3J0CisgKiAgZmlyc3QgYXR0ZW1wdCBhdCB1c2luZyBkZXZmcyAobm90IHdvcmtpbmcgeWV0ISkKKyAqICBBZGRlZCBJT0NUTCB0byBHZXRQcm9kdWN0SW5mbygpCisgKiAgQWRkZWQgc3VwcG9ydCBmb3IgY3VzdG9tIGJhdWQgcmF0ZXMKKyAqCUFkZCBzdXBwb3J0IGZvciByYW5kb20gcG9ydCBudW1iZXJzCisgKgorICogMC45LjEyICgwNC8xOC8yMDAwKSBkYXZpZCBpYWNvdmVsbGkKKyAqCWFkZGVkIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBJT0NUTHMKKyAqICB1c2UgdHR5VVNCMCBmb3IgY29uZmlndXJhdGlvbgorICoKKyAqIDAuOS4xMSAoMDQvMTcvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisgKglmaXhlZCBtb2R1bGUgaW5pdGlhbGl6YXRpb24gcmFjZSBjb25kaXRpb25zLgorICoJbWFkZSBhbGwgdXJicyBkeW5hbWljYWxseSBhbGxvY2F0ZWQuCisgKgltYWRlIGRyaXZlciBkZXZmcyBjb21wYXRpYmxlLiBub3cgaXQgb25seSByZWdpc3RlcnMgdGhlIHR0eSBkZXZpY2UKKyAqCXdoZW4gdGhlIGRldmljZSBpcyBhY3R1YWxseSBwbHVnZ2VkIGluLgorICoKKyAqIDAuOS4xMCAoMDQvMTMvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisgKglhZGRlZCBwcm9jIGludGVyZmFjZSBmcmFtZXdvcmsuCisgKgorICogMC45LjkgKDA0LzEzLzIwMDApIGRhdmlkIGlhY292ZWxsaQorICoJYWRkZWQgZW51bWVyYXRpb24gY29kZSBhbmQgaW9jdGxzIHRvIGNvbmZpZ3VyZSB0aGUgZGV2aWNlCisgKgorICogMC45LjggKDA0LzEyLzIwMDApIGRhdmlkIGlhY292ZWxsaQorICogIENoYW5nZSBpbnRlcnJ1cHQgcmVhZCBzdGFydCB3aGVuIGRldmljZSBpcyBwbHVnZ2VkIGluCisgKiAgYW5kIHN0b3Agd2hlbiBkZXZpY2UgaXMgcmVtb3ZlZAorICoJcHJvY2VzcyBpbnRlcnJ1cHQgcmVhZHMgd2hlbiBhbGwgcG9ydHMgYXJlIGNsb3NlZCAKKyAqICAoa2VlcCB2YWx1ZSBvZiByeEJ5dGVzQXZhaWwgY29uc2lzdGVudCB3aXRoIHRoZSBlZGdlcG9ydCkKKyAqICBzZXQgdGhlIFVTQl9CVUxLX1FVRVVFIGZsYWcgc28gdGhhdCB3ZSBjYW4gc2hvdmUgYSBidW5jaCAKKyAqICBvZiB1cmJzIGF0IG9uY2UgZG93biB0aGUgcGlwZSAKKyAqCisgKiAwLjkuNyAoMDQvMTAvMjAwMCkgZGF2aWQgaWFjb3ZlbGxpCisgKiAJc3RhcnQgdG8gYWRkIGVudW1lcmF0aW9uIGNvZGUuCisgKiAgZ2VuZXJhdGUgc2VyaWFsIG51bWJlciBmb3IgZXBpYyBkZXZpY2VzCisgKiAgYWRkIHN1cHBvcnQgZm9yIGtkYgorICoKKyAqIDAuOS42ICgwMy8zMC8yMDAwKSBkYXZpZCBpYWNvdmVsbGkKKyAqICBhZGQgSU9DVEwgdG8gZ2V0IHN0cmluZywgbWFudWZhY3R1cmUsIGFuZCBib290IGRlc2NyaXB0b3JzCisgKgorICogMC45LjUgKDAzLzE0LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgorICoJbW9yZSBlcnJvciBjaGVja2luZyBhZGRlZCB0byBTZXJpYWxPcGVuIHRvIHRyeSB0byBmaXggVUhDSSBvcGVuIHByb2JsZW0KKyAqCisgKiAwLjkuNCAoMDMvMDkvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisgKglhZGRlZCBtb3JlIGVycm9yIGNoZWNraW5nIHRvIGhhbmRsZSBvb3BzIHdoZW4gZGF0YSBpcyBoYW5naW5nCisgKglhcm91bmQgYW5kIHR0eSBpcyBhYnJ1cHRseSBjbG9zZWQuCisgKgorICogMC45LjMgKDAzLzA5LzIwMDApIGRhdmlkIGlhY292ZWxsaQorICoJQWRkIGVwaWMgc3VwcG9ydCBmb3IgeG9uL3hvZmYgY2hhcnMKKyAqCXBsYXkgd2l0aCBwZXJmb3JtYW5jZQorICoKKyAqIDAuOS4yICgwMy8wOC8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKyAqCWNoYW5nZWQgbW9zdCAiaW5mbyIgY2FsbHMgdG8gImRiZyIKKyAqCWltcGxlbWVudGVkIGZsb3cgY29udHJvbCBwcm9wZXJseSBpbiB0aGUgdGVybWlvcyBjYWxsCisgKgorICogMC45LjEgKDAzLzA4LzIwMDApIGRhdmlkIGlhY292ZWxsaQorICoJYWRkZWQgRVBJQyBzdXBwb3J0CisgKgllbmFibGVkIGJvb3Rsb2FkZXIgdXBkYXRlCisgKgorICogMC45ICgwMy8wOC8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKyAqCVJlbGVhc2UgdG8gSU8gbmV0d29ya3MuCisgKglJbnRlZ3JhdGVkIGNoYW5nZXMgdGhhdCBEYXZpZCBtYWRlCisgKiAgbWFkZSBnZXR0aW5nIHVyYnMgZm9yIHdyaXRpbmcgU01QIHNhZmUKKyAqCisgKiAwLjggKDAzLzA3LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgorICoJUmVsZWFzZSB0byBJTyBuZXR3b3Jrcy4KKyAqCUZpeGVkIHByb2JsZW1zIHRoYXQgd2VyZSBzZWVuIGluIGNvZGUgYnkgRGF2aWQuCisgKiAgTm93IGJvdGggRWRnZXBvcnQvNCBhbmQgRWRnZXBvcnQvMiB3b3JrcyBwcm9wZXJseS4KKyAqICBDaGFuZ2VkIG1vc3Qgb2YgdGhlIGZ1bmN0aW9ucyB0byB1c2UgcG9ydCBpbnN0ZWFkIG9mIHNlcmlhbC4KKyAqCisgKiAwLjcgKDAyLzI3LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgorICoJTWlsZXN0b25lIDMgcmVsZWFzZS4KKyAqCVJlbGVhc2UgdG8gSU8gTmV0d29ya3MKKyAqCWlvY3RsIGZvciB3YWl0aW5nIG9uIGxpbmUgY2hhbmdlIGltcGxlbWVudGVkLgorICoJaW9jdGwgZm9yIGdldHRpbmcgc3RhdGlzdGljcyBpbXBsZW1lbnRlZC4KKyAqCW11bHRpcG9ydCBzdXBwb3J0IHdvcmtpbmcuCisgKglsc3IgYW5kIG1zciByZWdpc3RlcnMgYXJlIG5vdyBoYW5kbGVkIHByb3Blcmx5LgorICoJY2hhbmdlIGJyZWFrIG5vdyBob29rZWQgdXAgYW5kIHdvcmtpbmcuCisgKglzdXBwb3J0IGZvciBhbGwga25vd24gRWRnZXBvcnQgZGV2aWNlcy4KKyAqCisgKiAwLjYgKDAyLzIyLzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgorICoJUmVsZWFzZSB0byBJTyBuZXR3b3Jrcy4KKyAqCUNIQVNFIGlzIGltcGxlbWVudGVkIGNvcnJlY3RseSB3aGVuIHBvcnQgaXMgY2xvc2VkLgorICoJU2VyaWFsT3BlbiBub3cgYmxvY2tzIGNvcnJlY3RseSB1bnRpbCBwb3J0IGlzIGZ1bGx5IG9wZW5lZC4KKyAqCisgKiAwLjUgKDAyLzIwLzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgorICoJUmVsZWFzZSB0byBJTyBuZXR3b3Jrcy4KKyAqCUtub3duIHByb2JsZW1zOgorICoJCW1vZGVtIHN0YXR1cyByZWdpc3RlciBjaGFuZ2VzIGFyZSBub3Qgc2VudCBvbiB0byB0aGUgdXNlcgorICoJCUNIQVNFIGlzIG5vdCBpbXBsZW1lbnRlZCB3aGVuIHRoZSBwb3J0IGlzIGNsb3NlZC4KKyAqCisgKiAwLjQgKDAyLzE2LzIwMDApIGdyZWcga3JvYWgtaGFydG1hbgorICoJU2Vjb25kIGN1dCBhdCB0aGUgQ2VCaXQgZGVtby4KKyAqCURvZXNuJ3QgbGVhayBtZW1vcnkgb24gZXZlcnkgd3JpdGUgdG8gdGhlIHBvcnQKKyAqCVN0aWxsIHNtYWxsIGxlYWtzIG9uIHN0YXJ0dXAuCisgKglBZGRlZCBzdXBwb3J0IGZvciBFZGdlcG9ydC8yIGFuZCBFZGdlcG9ydC84CisgKgorICogMC4zICgwMi8xNS8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKyAqCUNlQml0IGRlbW8gcmVsZWFzZS4KKyAqCUZvcmNlIHRoZSBsaW5lIHNldHRpbmdzIHRvIDQ4MDAsIDgsIDEsIGUgZm9yIHRoZSBkZW1vLgorICoJV2FybmluZyEgVGhpcyB2ZXJzaW9uIGxlYWtzIG1lbW9yeSBsaWtlIGNyYXp5IQorICoKKyAqIDAuMiAoMDEvMzAvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCisgKglNaWxlc3RvbmUgMSByZWxlYXNlLgorICoJRGV2aWNlIGlzIGZvdW5kIGJ5IFVTQiBzdWJzeXN0ZW0sIGVudW1lcmF0ZWQsIGZpbXdhcmUgaXMgZG93bmxvYWRlZAorICoJYW5kIHRoZSBkZXNjcmlwdG9ycyBhcmUgcHJpbnRlZCB0byB0aGUgZGVidWcgbG9nLCBjb25maWcgaXMgc2V0LCBhbmQKKyAqCWdyZWVuIGxpZ2h0IHN0YXJ0cyB0byBibGluay4gT3BlbiBwb3J0IHdvcmtzLCBhbmQgZGF0YSBjYW4gYmUgc2VudAorICoJYW5kIHJlY2VpdmVkIGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIG9mIHRoZSBVQVJULiBMb29wYmFjayBjb25uZWN0b3IKKyAqCWFuZCBkZWJ1ZyBsb2cgY29uZmlybXMgdGhpcy4KKyAqIAorICogMC4xICgwMS8yMy8yMDAwKSBncmVnIGtyb2FoLWhhcnRtYW4KKyAqCUluaXRpYWwgcmVsZWFzZSB0byBoZWxwIElPIE5ldHdvcmtzIHRyeSB0byBzZXQgdXAgdGhlaXIgdGVzdCBzeXN0ZW0uIAorICoJRWRnZXBvcnQ0IGlzIHJlY29nbml6ZWQsIGZpcm13YXJlIGlzIGRvd25sb2FkZWQsIGNvbmZpZyBpcyBzZXQgc28gCisgKglkZXZpY2UgYmxpbmtzIGdyZWVuIGxpZ2h0IGV2ZXJ5IDMgc2VjLiBQb3J0IGlzIGJvdW5kLCBidXQgb3BlbmluZywKKyAqCWNsb3NpbmcsIGFuZCBzZW5kaW5nIGRhdGEgZG8gbm90IHdvcmsgcHJvcGVybHkuCisgKiAKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorI2luY2x1ZGUgImlvX2VkZ2Vwb3J0LmgiCisjaW5jbHVkZSAiaW9faW9uc3AuaCIJCS8qIGluZm8gZm9yIHRoZSBpb3NwIG1lc3NhZ2VzICovCisjaW5jbHVkZSAiaW9fMTY2NTQuaCIJCS8qIDE2NjU0IFVBUlQgZGVmaW5lcyAqLworCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2Mi43IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiBhbmQgRGF2aWQgSWFjb3ZlbGxpIgorI2RlZmluZSBEUklWRVJfREVTQyAiRWRnZXBvcnQgVVNCIFNlcmlhbCBEcml2ZXIiCisKKy8qIEZpcnN0LCB0aGUgbGF0ZXN0IGJvb3QgY29kZSAtIGZvciBmaXJzdCBnZW5lcmF0aW9uIGVkZ2Vwb3J0cyAqLworI2RlZmluZSBJTUFHRV9BUlJBWV9OQU1FCUJvb3RDb2RlSW1hZ2VfR0VOMQorI2RlZmluZSBJTUFHRV9WRVJTSU9OX05BTUUJQm9vdENvZGVJbWFnZVZlcnNpb25fR0VOMQorI2luY2x1ZGUgImlvX2Z3X2Jvb3QuaCIJCS8qIHRoZSBib290bG9hZGVyIGZpcm13YXJlIHRvIGRvd25sb2FkIHRvIGEgZGV2aWNlLCBpZiBpdCBuZWVkcyBpdCAqLworCisvKiBmb3Igc2Vjb25kIGdlbmVyYXRpb24gZWRnZXBvcnRzICovCisjZGVmaW5lIElNQUdFX0FSUkFZX05BTUUJQm9vdENvZGVJbWFnZV9HRU4yCisjZGVmaW5lIElNQUdFX1ZFUlNJT05fTkFNRQlCb290Q29kZUltYWdlVmVyc2lvbl9HRU4yCisjaW5jbHVkZSAiaW9fZndfYm9vdDIuaCIJLyogdGhlIGJvb3Rsb2FkZXIgZmlybXdhcmUgdG8gZG93bmxvYWQgdG8gYSBkZXZpY2UsIGlmIGl0IG5lZWRzIGl0ICovCisKKy8qIFRoZW4gZmluYWxseSB0aGUgbWFpbiBydW4tdGltZSBvcGVyYXRpb25hbCBjb2RlIC0gZm9yIGZpcnN0IGdlbmVyYXRpb24gZWRnZXBvcnRzICovCisjZGVmaW5lIElNQUdFX0FSUkFZX05BTUUJT3BlcmF0aW9uYWxDb2RlSW1hZ2VfR0VOMQorI2RlZmluZSBJTUFHRV9WRVJTSU9OX05BTUUJT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uX0dFTjEKKyNpbmNsdWRlICJpb19md19kb3duLmgiCQkvKiBEZWZpbmUgYXJyYXkgT3BlcmF0aW9uYWxDb2RlSW1hZ2VbXSAqLworCisvKiBmb3Igc2Vjb25kIGdlbmVyYXRpb24gZWRnZXBvcnRzICovCisjZGVmaW5lIElNQUdFX0FSUkFZX05BTUUJT3BlcmF0aW9uYWxDb2RlSW1hZ2VfR0VOMgorI2RlZmluZSBJTUFHRV9WRVJTSU9OX05BTUUJT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uX0dFTjIKKyNpbmNsdWRlICJpb19md19kb3duMi5oIgkvKiBEZWZpbmUgYXJyYXkgT3BlcmF0aW9uYWxDb2RlSW1hZ2VbXSAqLworCisjZGVmaW5lIE1BWF9OQU1FX0xFTgkJNjQKKworI2RlZmluZSBDSEFTRV9USU1FT1VUCQkoNSpIWikJCS8qIDUgc2Vjb25kcyAqLworI2RlZmluZSBPUEVOX1RJTUVPVVQJCSg1KkhaKQkJLyogNSBzZWNvbmRzICovCisjZGVmaW5lIENPTU1BTkRfVElNRU9VVAkJKDUqSFopCQkvKiA1IHNlY29uZHMgKi8KKworLyogcmVjZWl2ZSBwb3J0IHN0YXRlICovCitlbnVtIFJYU1RBVEUgeworCUVYUEVDVF9IRFIxID0gMCwJLyogRXhwZWN0IGhlYWRlciBieXRlIDEgKi8KKwlFWFBFQ1RfSERSMiA9IDEsCS8qIEV4cGVjdCBoZWFkZXIgYnl0ZSAyICovCisJRVhQRUNUX0RBVEEgPSAyLAkvKiBFeHBlY3QgJ1J4Qnl0ZXNSZW1haW5pbmcnIGRhdGEgKi8KKwlFWFBFQ1RfSERSMyA9IDMsCS8qIEV4cGVjdCBoZWFkZXIgYnl0ZSAzIChmb3Igc3RhdHVzIGhkcnMgb25seSkgKi8KK307CisKKworLyogVHJhbnNtaXQgRmlmbyAKKyAqIFRoaXMgVHJhbnNtaXQgcXVldWUgaXMgYW4gZXh0ZW5zaW9uIG9mIHRoZSBlZGdlcG9ydCBSeCBidWZmZXIuIAorICogVGhlIG1heGltdW0gYW1vdW50IG9mIGRhdGEgYnVmZmVyZWQgaW4gYm90aCB0aGUgZWRnZXBvcnQgCisgKiBSeCBidWZmZXIgKG1heFR4Q3JlZGl0cykgYW5kIHRoaXMgYnVmZmVyIHdpbGwgbmV2ZXIgZXhjZWVkIG1heFR4Q3JlZGl0cy4KKyAqLworc3RydWN0IFR4RmlmbyB7CisJdW5zaWduZWQgaW50CWhlYWQ7CS8qIGluZGV4IHRvIGhlYWQgcG9pbnRlciAod3JpdGUpICovCisJdW5zaWduZWQgaW50CXRhaWw7CS8qIGluZGV4IHRvIHRhaWwgcG9pbnRlciAocmVhZCkgICovCisJdW5zaWduZWQgaW50CWNvdW50OwkvKiBCeXRlcyBpbiBxdWV1ZSAqLworCXVuc2lnbmVkIGludAlzaXplOwkvKiBNYXggc2l6ZSBvZiBxdWV1ZSAoZXF1YWwgdG8gTWF4IG51bWJlciBvZiBUeENyZWRpdHMpICovCisJdW5zaWduZWQgY2hhcgkqZmlmbzsJLyogYWxsb2NhdGVkIEJ1ZmZlciAqLworfTsKKworLyogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgYWxsIG9mIHRoZSBsb2NhbCBwb3J0IGluZm9ybWF0aW9uICovCitzdHJ1Y3QgZWRnZXBvcnRfcG9ydCB7CisJX191MTYJCQl0eENyZWRpdHM7CQkvKiBvdXIgY3VycmVudCBjcmVkaXRzIGZvciB0aGlzIHBvcnQgKi8KKwlfX3UxNgkJCW1heFR4Q3JlZGl0czsJCS8qIHRoZSBtYXggc2l6ZSBvZiB0aGUgcG9ydCAqLworCisJc3RydWN0IFR4RmlmbwkJdHhmaWZvOwkJCS8qIHRyYW5zbWl0IGZpZm8gLS0gc2l6ZSB3aWxsIGJlIG1heFR4Q3JlZGl0cyAqLworCXN0cnVjdCB1cmIJCSp3cml0ZV91cmI7CQkvKiB3cml0ZSBVUkIgZm9yIHRoaXMgcG9ydCAqLworCWNoYXIJCQl3cml0ZV9pbl9wcm9ncmVzczsJLyogVFJVRSB3aGlsZSBhIHdyaXRlIFVSQiBpcyBvdXRzdGFuZGluZyAqLworCXNwaW5sb2NrX3QJCWVwX2xvY2s7CisKKwlfX3U4CQkJc2hhZG93TENSOwkJLyogbGFzdCBMQ1IgdmFsdWUgcmVjZWl2ZWQgKi8KKwlfX3U4CQkJc2hhZG93TUNSOwkJLyogbGFzdCBNQ1IgdmFsdWUgcmVjZWl2ZWQgKi8KKwlfX3U4CQkJc2hhZG93TVNSOwkJLyogbGFzdCBNU1IgdmFsdWUgcmVjZWl2ZWQgKi8KKwlfX3U4CQkJc2hhZG93TFNSOwkJLyogbGFzdCBMU1IgdmFsdWUgcmVjZWl2ZWQgKi8KKwlfX3U4CQkJc2hhZG93WG9uQ2hhcjsJCS8qIGxhc3QgdmFsdWUgc2V0IGFzIFhPTiBjaGFyIGluIEVkZ2Vwb3J0ICovCisJX191OAkJCXNoYWRvd1hvZmZDaGFyOwkJLyogbGFzdCB2YWx1ZSBzZXQgYXMgWE9GRiBjaGFyIGluIEVkZ2Vwb3J0ICovCisJX191OAkJCXZhbGlkRGF0YU1hc2s7CisJX191MzIJCQliYXVkUmF0ZTsKKworCWNoYXIJCQlvcGVuOworCWNoYXIJCQlvcGVuUGVuZGluZzsKKwljaGFyCQkJY29tbWFuZFBlbmRpbmc7CisJY2hhcgkJCWNsb3NlUGVuZGluZzsKKwljaGFyCQkJY2hhc2VSZXNwb25zZVBlbmRpbmc7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X2NoYXNlOwkJLyogZm9yIGhhbmRsaW5nIHNsZWVwaW5nIHdoaWxlIHdhaXRpbmcgZm9yIGNoYXNlIHRvIGZpbmlzaCAqLworCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfb3BlbjsJCS8qIGZvciBoYW5kbGluZyBzbGVlcGluZyB3aGlsZSB3YWl0aW5nIGZvciBvcGVuIHRvIGZpbmlzaCAqLworCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfY29tbWFuZDsJCS8qIGZvciBoYW5kbGluZyBzbGVlcGluZyB3aGlsZSB3YWl0aW5nIGZvciBjb21tYW5kIHRvIGZpbmlzaCAqLworCXdhaXRfcXVldWVfaGVhZF90CWRlbHRhX21zcl93YWl0OwkJLyogZm9yIGhhbmRsaW5nIHNsZWVwaW5nIHdoaWxlIHdhaXRpbmcgZm9yIG1zciBjaGFuZ2UgdG8gaGFwcGVuICovCisKKwlzdHJ1Y3QgYXN5bmNfaWNvdW50CWljb3VudDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CSpwb3J0OwkJCS8qIGxvb3AgYmFjayB0byB0aGUgb3duZXIgb2YgdGhpcyBvYmplY3QgKi8KK307CisKKworLyogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIGRldmljZSBpbmZvcm1hdGlvbiAqLworc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCB7CisJY2hhcgkJCW5hbWVbTUFYX05BTUVfTEVOKzFdOwkJLyogc3RyaW5nIG5hbWUgb2YgdGhpcyBkZXZpY2UgKi8KKworCXN0cnVjdCBlZGdlX21hbnVmX2Rlc2NyaXB0b3IJbWFudWZfZGVzY3JpcHRvcjsJLyogdGhlIG1hbnVmYWN0dXJlciBkZXNjcmlwdG9yICovCisJc3RydWN0IGVkZ2VfYm9vdF9kZXNjcmlwdG9yCWJvb3RfZGVzY3JpcHRvcjsJLyogdGhlIGJvb3QgZmlybXdhcmUgZGVzY3JpcHRvciAqLworCXN0cnVjdCBlZGdlcG9ydF9wcm9kdWN0X2luZm8JcHJvZHVjdF9pbmZvOwkJLyogUHJvZHVjdCBJbmZvICovCisKKwlfX3U4CQkJaW50ZXJydXB0X2luX2VuZHBvaW50OwkJLyogdGhlIGludGVycnVwdCBlbmRwb2ludCBoYW5kbGUgKi8KKwl1bnNpZ25lZCBjaGFyICoJCWludGVycnVwdF9pbl9idWZmZXI7CQkvKiB0aGUgYnVmZmVyIHdlIHVzZSBmb3IgdGhlIGludGVycnVwdCBlbmRwb2ludCAqLworCXN0cnVjdCB1cmIgKgkJaW50ZXJydXB0X3JlYWRfdXJiOwkJLyogb3VyIGludGVycnVwdCB1cmIgKi8KKworCV9fdTgJCQlidWxrX2luX2VuZHBvaW50OwkJLyogdGhlIGJ1bGsgaW4gZW5kcG9pbnQgaGFuZGxlICovCisJdW5zaWduZWQgY2hhciAqCQlidWxrX2luX2J1ZmZlcjsJCQkvKiB0aGUgYnVmZmVyIHdlIHVzZSBmb3IgdGhlIGJ1bGsgaW4gZW5kcG9pbnQgKi8KKwlzdHJ1Y3QgdXJiICoJCXJlYWRfdXJiOwkJCS8qIG91ciBidWxrIHJlYWQgdXJiICovCisJaW50CQkJcmVhZF9pbl9wcm9ncmVzczsKKwlzcGlubG9ja190CQllc19sb2NrOworCisJX191OAkJCWJ1bGtfb3V0X2VuZHBvaW50OwkJLyogdGhlIGJ1bGsgb3V0IGVuZHBvaW50IGhhbmRsZSAqLworCisJX19zMTYJCQlyeEJ5dGVzQXZhaWw7CQkJLyogdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdlIG5lZWQgdG8gcmVhZCBmcm9tIHRoaXMgZGV2aWNlICovCisKKwllbnVtIFJYU1RBVEUJCXJ4U3RhdGU7CQkJLyogdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJ1bGsgcmVjZWl2ZSBwcm9jZXNzb3IgKi8KKwlfX3U4CQkJcnhIZWFkZXIxOwkJCS8qIHJlY2VpdmUgaGVhZGVyIGJ5dGUgMSAqLworCV9fdTgJCQlyeEhlYWRlcjI7CQkJLyogcmVjZWl2ZSBoZWFkZXIgYnl0ZSAyICovCisJX191OAkJCXJ4SGVhZGVyMzsJCQkvKiByZWNlaXZlIGhlYWRlciBieXRlIDMgKi8KKwlfX3U4CQkJcnhQb3J0OwkJCQkvKiB0aGUgcG9ydCB0aGF0IHdlIGFyZSBjdXJyZW50bHkgcmVjZWl2aW5nIGRhdGEgZm9yICovCisJX191OAkJCXJ4U3RhdHVzQ29kZTsJCQkvKiB0aGUgcmVjZWl2ZSBzdGF0dXMgY29kZSAqLworCV9fdTgJCQlyeFN0YXR1c1BhcmFtOwkJCS8qIHRoZSByZWNlaXZlIHN0YXR1cyBwYXJhbWF0ZXIgKi8KKwlfX3MxNgkJCXJ4Qnl0ZXNSZW1haW5pbmc7CQkvKiB0aGUgbnVtYmVyIG9mIHBvcnQgYnl0ZXMgbGVmdCB0byByZWFkICovCisJc3RydWN0IHVzYl9zZXJpYWwJKnNlcmlhbDsJCQkvKiBsb29wIGJhY2sgdG8gdGhlIG93bmVyIG9mIHRoaXMgb2JqZWN0ICovCit9OworCisvKiBiYXVkIHJhdGUgaW5mb3JtYXRpb24gKi8KK3N0cnVjdCBkaXZpc29yX3RhYmxlX2VudHJ5IHsKKwlfX3UzMiAgIEJhdWRSYXRlOworCV9fdTE2ICBEaXZpc29yOworfTsKKworLy8KKy8vIERlZmluZSB0YWJsZSBvZiBkaXZpc29ycyBmb3IgUmV2IEEgRWRnZVBvcnQvNCBoYXJkd2FyZQorLy8gVGhlc2UgYXNzdW1lIGEgMy42ODY0TUh6IGNyeXN0YWwsIHRoZSBzdGFuZGFyZCAvMTYsIGFuZAorLy8gTUNSLjcgPSAwLgorLy8KK3N0YXRpYyBzdHJ1Y3QgZGl2aXNvcl90YWJsZV9lbnRyeSBkaXZpc29yX3RhYmxlW10gPSB7CisJeyAgIDUwLAkJNDYwOH0sICAKKwl7ICAgNzUsCQkzMDcyfSwgIAorCXsgICAxMTAsCTIwOTV9LAkJLyogMjA5NC41NDU0NTUgPT4gMjMwNDUwICAgPT4gLjAyMTcgJSBvdmVyICovCisJeyAgIDEzNCwJMTcxM30sCQkvKiAxNzEzLjAxMTE1MiA9PiAyMzAzOTguNSA9PiAuMDAwNjUlIHVuZGVyICovCisJeyAgIDE1MCwJMTUzNn0sCisJeyAgIDMwMCwJNzY4fSwKKwl7ICAgNjAwLAkzODR9LAorCXsgICAxMjAwLAkxOTJ9LAorCXsgICAxODAwLAkxMjh9LAorCXsgICAyNDAwLAk5Nn0sCisJeyAgIDQ4MDAsCTQ4fSwKKwl7ICAgNzIwMCwJMzJ9LAorCXsgICA5NjAwLAkyNH0sCisJeyAgIDE0NDAwLAkxNn0sCisJeyAgIDE5MjAwLAkxMn0sCisJeyAgIDM4NDAwLAk2fSwKKwl7ICAgNTc2MDAsCTR9LAorCXsgICAxMTUyMDAsCTJ9LAorCXsgICAyMzA0MDAsCTF9LAorfTsKKworLyogbG9jYWwgdmFyaWFibGVzICovCitzdGF0aWMgaW50IGRlYnVnOworCitzdGF0aWMgaW50IGxvd19sYXRlbmN5ID0gMTsJLyogdHR5IGxvdyBsYXRlbmN5IGZsYWcsIG9uIGJ5IGRlZmF1bHQgKi8KKworc3RhdGljIGludCBDbWRVcmJzID0gMDsJCS8qIE51bWJlciBvZiBvdXRzdGFuZGluZyBDb21tYW5kIFdyaXRlIFVyYnMgKi8KKworCisvKiBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzICovCisKKy8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGFsbCBVUkIgY2FsbGJhY2tzICovCitzdGF0aWMgdm9pZCBlZGdlX2ludGVycnVwdF9jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBlZGdlX2J1bGtfaW5fY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgZWRnZV9idWxrX291dF9kYXRhX2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIGVkZ2VfYnVsa19vdXRfY21kX2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgdGhlIHVzYnNlcmlhbCBjYWxsYmFja3MgKi8KK3N0YXRpYyBpbnQgIGVkZ2Vfb3BlbgkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBlZGdlX2Nsb3NlCQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGVkZ2Vfd3JpdGUJCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOworc3RhdGljIGludCAgZWRnZV93cml0ZV9yb29tCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50ICBlZGdlX2NoYXJzX2luX2J1ZmZlcgkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBlZGdlX3Rocm90dGxlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBlZGdlX3VudGhyb3R0bGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGVkZ2Vfc2V0X3Rlcm1pb3MJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworc3RhdGljIGludCAgZWRnZV9pb2N0bAkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQgZWRnZV9icmVhawkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpOworc3RhdGljIGludCAgZWRnZV90aW9jbWdldAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgIGVkZ2VfdGlvY21zZXQJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKK3N0YXRpYyBpbnQgIGVkZ2Vfc3RhcnR1cAkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQgZWRnZV9zaHV0ZG93bgkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworCisKKyNpbmNsdWRlICJpb190YWJsZXMuaCIJLyogYWxsIG9mIHRoZSBkZXZpY2VzIHRoYXQgdGhpcyBkcml2ZXIgc3VwcG9ydHMgKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGlvX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiaW9fZWRnZXBvcnQiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGVfY29tYmluZWQsCit9OworCisvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBhbGwgb2Ygb3VyIGxvY2FsIGZ1bmN0aW9ucyAqLworc3RhdGljIHZvaWQgIHByb2Nlc3NfcmN2ZF9kYXRhCQkoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgX191MTYgYnVmZmVyTGVuZ3RoKTsKK3N0YXRpYyB2b2lkIHByb2Nlc3NfcmN2ZF9zdGF0dXMJCShzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCwgX191OCBieXRlMiwgX191OCBieXRlMyk7CitzdGF0aWMgdm9pZCBlZGdlX3R0eV9yZWN2CQkJKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbmd0aCk7CitzdGF0aWMgdm9pZCBoYW5kbGVfbmV3X21zcgkJKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIF9fdTggbmV3TXNyKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9uZXdfbHNyCQkoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgX191OCBsc3JEYXRhLCBfX3U4IGxzciwgX191OCBkYXRhKTsKK3N0YXRpYyBpbnQgIHNlbmRfaW9zcF9leHRfY21kCQkoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgX191OCBjb21tYW5kLCBfX3U4IHBhcmFtKTsKK3N0YXRpYyBpbnQgIGNhbGNfYmF1ZF9yYXRlX2Rpdmlzb3IJKGludCBiYXVkX3JhdGUsIGludCAqZGl2aXNvcik7CitzdGF0aWMgaW50ICBzZW5kX2NtZF93cml0ZV9iYXVkX3JhdGUJKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIGludCBiYXVkUmF0ZSk7CitzdGF0aWMgdm9pZCBjaGFuZ2VfcG9ydF9zZXR0aW5ncwkoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKTsKK3N0YXRpYyBpbnQgIHNlbmRfY21kX3dyaXRlX3VhcnRfcmVnaXN0ZXIJKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIF9fdTggcmVnTnVtLCBfX3U4IHJlZ1ZhbHVlKTsKK3N0YXRpYyBpbnQgIHdyaXRlX2NtZF91c2IJCShzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCB3cml0ZUxlbmd0aCk7CitzdGF0aWMgdm9pZCBzZW5kX21vcmVfcG9ydF9kYXRhCQkoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwsIHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQpOworCitzdGF0aWMgaW50ICBzcmFtX3dyaXRlCQkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIF9fdTE2IGV4dEFkZHIsIF9fdTE2IGFkZHIsIF9fdTE2IGxlbmd0aCwgX191OCAqZGF0YSk7CitzdGF0aWMgaW50ICByb21fcmVhZAkJCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBfX3UxNiBleHRBZGRyLCBfX3UxNiBhZGRyLCBfX3UxNiBsZW5ndGgsIF9fdTggKmRhdGEpOworc3RhdGljIGludCAgcm9tX3dyaXRlCQkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIF9fdTE2IGV4dEFkZHIsIF9fdTE2IGFkZHIsIF9fdTE2IGxlbmd0aCwgX191OCAqZGF0YSk7CitzdGF0aWMgdm9pZCBnZXRfbWFudWZhY3R1cmluZ19kZXNjCShzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCk7CitzdGF0aWMgdm9pZCBnZXRfYm9vdF9kZXNjCQkoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwpOworc3RhdGljIHZvaWQgbG9hZF9hcHBsaWNhdGlvbl9maXJtd2FyZQkoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwpOworCitzdGF0aWMgdm9pZCB1bmljb2RlX3RvX2FzY2lpCQkoY2hhciAqc3RyaW5nLCBfX2xlMTYgKnVuaWNvZGUsIGludCB1bmljb2RlX3NpemUpOworCisKKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkJCQkJCQkJCSoKKyAqIHVwZGF0ZV9lZGdlcG9ydF9FMlBST00oKQlDb21wYXJlIGN1cnJlbnQgdmVyc2lvbnMgb2YJCSoKKyAqCQkJCUJvb3QgUk9NIGFuZCBNYW51ZmFjdHVyZSAJCSoKKyAqCQkJCURlc2NyaXB0b3JzIHdpdGggdmVyc2lvbnMJCSoKKyAqCQkJCWVtYmVkZGVkIGluIHRoaXMgZHJpdmVyCQkJKgorICoJCQkJCQkJCQkqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgdXBkYXRlX2VkZ2Vwb3J0X0UyUFJPTSAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwpCit7CisJX191MzIgQm9vdEN1clZlcjsKKwlfX3UzMiBCb290TmV3VmVyOworCV9fdTggQm9vdE1ham9yVmVyc2lvbjsgICAgICAgICAgICAgICAgICAKKwlfX3U4IEJvb3RNaW5vclZlcnNpb247ICAgICAgICAgICAgICAgICAgCisJX19sZTE2IEJvb3RCdWlsZE51bWJlcjsKKwlfX3U4ICpCb290SW1hZ2U7ICAgICAgCisJX191MzIgQm9vdFNpemU7CisJc3RydWN0IGVkZ2VfZmlybXdhcmVfaW1hZ2VfcmVjb3JkICpyZWNvcmQ7CisJdW5zaWduZWQgY2hhciAqZmlybXdhcmU7CisJaW50IHJlc3BvbnNlOworCisKKwlzd2l0Y2ggKGVkZ2Vfc2VyaWFsLT5wcm9kdWN0X2luZm8uaURvd25sb2FkRmlsZSkgeworCQljYXNlIEVER0VfRE9XTkxPQURfRklMRV9JOTMwOgorCQkJQm9vdE1ham9yVmVyc2lvbgk9IEJvb3RDb2RlSW1hZ2VWZXJzaW9uX0dFTjEuTWFqb3JWZXJzaW9uOworCQkJQm9vdE1pbm9yVmVyc2lvbgk9IEJvb3RDb2RlSW1hZ2VWZXJzaW9uX0dFTjEuTWlub3JWZXJzaW9uOworCQkJQm9vdEJ1aWxkTnVtYmVyCQk9IGNwdV90b19sZTE2KEJvb3RDb2RlSW1hZ2VWZXJzaW9uX0dFTjEuQnVpbGROdW1iZXIpOworCQkJQm9vdEltYWdlCQk9ICZCb290Q29kZUltYWdlX0dFTjFbMF07CisJCQlCb290U2l6ZQkJPSBzaXplb2YoIEJvb3RDb2RlSW1hZ2VfR0VOMSApOworCQkJYnJlYWs7CisKKwkJY2FzZSBFREdFX0RPV05MT0FEX0ZJTEVfODAyNTE6CisJCQlCb290TWFqb3JWZXJzaW9uCT0gQm9vdENvZGVJbWFnZVZlcnNpb25fR0VOMi5NYWpvclZlcnNpb247CisJCQlCb290TWlub3JWZXJzaW9uCT0gQm9vdENvZGVJbWFnZVZlcnNpb25fR0VOMi5NaW5vclZlcnNpb247CisJCQlCb290QnVpbGROdW1iZXIJCT0gY3B1X3RvX2xlMTYoQm9vdENvZGVJbWFnZVZlcnNpb25fR0VOMi5CdWlsZE51bWJlcik7CisJCQlCb290SW1hZ2UJCT0gJkJvb3RDb2RlSW1hZ2VfR0VOMlswXTsKKwkJCUJvb3RTaXplCQk9IHNpemVvZiggQm9vdENvZGVJbWFnZV9HRU4yICk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuOworCX0KKworCS8vIENoZWNrIEJvb3QgSW1hZ2UgVmVyc2lvbgorCUJvb3RDdXJWZXIgPSAoZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5NYWpvclZlcnNpb24gPDwgMjQpICsKKwkJICAgICAoZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5NaW5vclZlcnNpb24gPDwgMTYpICsKKwkJICAgICAgbGUxNl90b19jcHUoZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5CdWlsZE51bWJlcik7CisKKwlCb290TmV3VmVyID0gKEJvb3RNYWpvclZlcnNpb24gPDwgMjQpICsKKwkJICAgICAoQm9vdE1pbm9yVmVyc2lvbiA8PCAxNikgKworCQkgICAgICBsZTE2X3RvX2NwdShCb290QnVpbGROdW1iZXIpOworCisJZGJnKCJDdXJyZW50IEJvb3QgSW1hZ2UgdmVyc2lvbiAlZC4lZC4lZCIsCisJICAgIGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuTWFqb3JWZXJzaW9uLAorCSAgICBlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLk1pbm9yVmVyc2lvbiwKKwkgICAgbGUxNl90b19jcHUoZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5CdWlsZE51bWJlcikpOworCisKKwlpZiAoQm9vdE5ld1ZlciA+IEJvb3RDdXJWZXIpIHsKKwkJZGJnKCIqKlVwZGF0ZSBCb290IEltYWdlIGZyb20gJWQuJWQuJWQgdG8gJWQuJWQuJWQiLAorCQkgICAgZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5NYWpvclZlcnNpb24sCisJCSAgICBlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLk1pbm9yVmVyc2lvbiwKKwkJICAgIGxlMTZfdG9fY3B1KGVkZ2Vfc2VyaWFsLT5ib290X2Rlc2NyaXB0b3IuQnVpbGROdW1iZXIpLAorCQkgICAgQm9vdE1ham9yVmVyc2lvbiwKKwkJICAgIEJvb3RNaW5vclZlcnNpb24sCisJCSAgICBsZTE2X3RvX2NwdShCb290QnVpbGROdW1iZXIpKTsKKworCisJCWRiZygiRG93bmxvYWRpbmcgbmV3IEJvb3QgSW1hZ2UiKTsKKworCQlmaXJtd2FyZSA9IEJvb3RJbWFnZTsKKworCQlmb3IgKDs7KSB7CisJCQlyZWNvcmQgPSAoc3RydWN0IGVkZ2VfZmlybXdhcmVfaW1hZ2VfcmVjb3JkICopZmlybXdhcmU7CisJCQlyZXNwb25zZSA9IHJvbV93cml0ZSAoZWRnZV9zZXJpYWwtPnNlcmlhbCwgbGUxNl90b19jcHUocmVjb3JkLT5FeHRBZGRyKSwgbGUxNl90b19jcHUocmVjb3JkLT5BZGRyKSwgbGUxNl90b19jcHUocmVjb3JkLT5MZW4pLCAmcmVjb3JkLT5EYXRhWzBdKTsKKwkJCWlmIChyZXNwb25zZSA8IDApIHsKKwkJCQlkZXZfZXJyKCZlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwgInJvbV93cml0ZSBmYWlsZWQgKCV4LCAleCwgJWQpXG4iLCBsZTE2X3RvX2NwdShyZWNvcmQtPkV4dEFkZHIpLCBsZTE2X3RvX2NwdShyZWNvcmQtPkFkZHIpLCBsZTE2X3RvX2NwdShyZWNvcmQtPkxlbikpOworCQkJCWJyZWFrOworCQkJfQorCQkJZmlybXdhcmUgKz0gc2l6ZW9mIChzdHJ1Y3QgZWRnZV9maXJtd2FyZV9pbWFnZV9yZWNvcmQpICsgbGUxNl90b19jcHUocmVjb3JkLT5MZW4pOworCQkJaWYgKGZpcm13YXJlID49ICZCb290SW1hZ2VbQm9vdFNpemVdKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlkYmcoIkJvb3QgSW1hZ2UgLS0gYWxyZWFkeSB1cCB0byBkYXRlIik7CisJfQorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQkJCQkJCQkJKgorICogIEdldCBzdHJpbmcgZGVzY3JpcHRvciBmcm9tIGRldmljZQkJCQkJKgorICoJCQkJCQkJCQkqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBnZXRfc3RyaW5nIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgSWQsIGNoYXIgKnN0cmluZykKK3sKKwlzdHJ1Y3QgdXNiX3N0cmluZ19kZXNjcmlwdG9yIFN0cmluZ0Rlc2M7CisJc3RydWN0IHVzYl9zdHJpbmdfZGVzY3JpcHRvciAqcFN0cmluZ0Rlc2M7CisKKwlkYmcoIiVzIC0gVVNCIFN0cmluZyBJRCA9ICVkIiwgX19GVU5DVElPTl9fLCBJZCApOworCisJaWYgKCF1c2JfZ2V0X2Rlc2NyaXB0b3IoZGV2LCBVU0JfRFRfU1RSSU5HLCBJZCwgJlN0cmluZ0Rlc2MsIHNpemVvZihTdHJpbmdEZXNjKSkpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJcFN0cmluZ0Rlc2MgPSBrbWFsbG9jIChTdHJpbmdEZXNjLmJMZW5ndGgsIEdGUF9LRVJORUwpOworCisJaWYgKCFwU3RyaW5nRGVzYykgeworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXVzYl9nZXRfZGVzY3JpcHRvcihkZXYsIFVTQl9EVF9TVFJJTkcsIElkLCBwU3RyaW5nRGVzYywgU3RyaW5nRGVzYy5iTGVuZ3RoICkpIHsKKwkJa2ZyZWUocFN0cmluZ0Rlc2MpOworCQlyZXR1cm4gMDsKKwl9CisKKwl1bmljb2RlX3RvX2FzY2lpKHN0cmluZywgIHBTdHJpbmdEZXNjLT53RGF0YSwgICAgIHBTdHJpbmdEZXNjLT5iTGVuZ3RoLzItMSk7CisKKwlrZnJlZShwU3RyaW5nRGVzYyk7CisJcmV0dXJuIHN0cmxlbihzdHJpbmcpOworfQorCisKKyNpZiAwCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIEdldCBzdHJpbmcgZGVzY3JpcHRvciBmcm9tIGRldmljZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGdldF9zdHJpbmdfZGVzYyAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IElkLCBzdHJ1Y3QgdXNiX3N0cmluZ19kZXNjcmlwdG9yICoqcFJldERlc2MpCit7CisJc3RydWN0IHVzYl9zdHJpbmdfZGVzY3JpcHRvciBTdHJpbmdEZXNjOworCXN0cnVjdCB1c2Jfc3RyaW5nX2Rlc2NyaXB0b3IgKnBTdHJpbmdEZXNjOworCisJZGJnKCIlcyAtIFVTQiBTdHJpbmcgSUQgPSAlZCIsIF9fRlVOQ1RJT05fXywgSWQgKTsKKworCWlmICghdXNiX2dldF9kZXNjcmlwdG9yKGRldiwgVVNCX0RUX1NUUklORywgSWQsICZTdHJpbmdEZXNjLCBzaXplb2YoU3RyaW5nRGVzYykpKSB7CisJCXJldHVybiAwOworCX0KKworCXBTdHJpbmdEZXNjID0ga21hbGxvYyAoU3RyaW5nRGVzYy5iTGVuZ3RoLCBHRlBfS0VSTkVMKTsKKworCWlmICghcFN0cmluZ0Rlc2MpIHsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICghdXNiX2dldF9kZXNjcmlwdG9yKGRldiwgVVNCX0RUX1NUUklORywgSWQsIHBTdHJpbmdEZXNjLCBTdHJpbmdEZXNjLmJMZW5ndGggKSkgeworCQlrZnJlZShwU3RyaW5nRGVzYyk7CisJCXJldHVybiAtMTsKKwl9CisKKwkqcFJldERlc2MgPSBwU3RyaW5nRGVzYzsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBnZXRfcHJvZHVjdF9pbmZvKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsKQoreworCXN0cnVjdCBlZGdlcG9ydF9wcm9kdWN0X2luZm8gKnByb2R1Y3RfaW5mbyA9ICZlZGdlX3NlcmlhbC0+cHJvZHVjdF9pbmZvOworCisJbWVtc2V0IChwcm9kdWN0X2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgZWRnZXBvcnRfcHJvZHVjdF9pbmZvKSk7CisKKwlwcm9kdWN0X2luZm8tPlByb2R1Y3RJZAkJPSAoX191MTYpKGxlMTZfdG9fY3B1KGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICYgfklPTl9ERVZJQ0VfSURfODAyNTFfTkVUQ0hJUCk7CisJcHJvZHVjdF9pbmZvLT5OdW1Qb3J0cwkJPSBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5OdW1Qb3J0czsKKwlwcm9kdWN0X2luZm8tPlByb2RJbmZvVmVyCT0gMDsKKworCXByb2R1Y3RfaW5mby0+Um9tU2l6ZQkJPSBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5Sb21TaXplOworCXByb2R1Y3RfaW5mby0+UmFtU2l6ZQkJPSBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5SYW1TaXplOworCXByb2R1Y3RfaW5mby0+Q3B1UmV2CQk9IGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLkNwdVJldjsKKwlwcm9kdWN0X2luZm8tPkJvYXJkUmV2CQk9IGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLkJvYXJkUmV2OworCisJcHJvZHVjdF9pbmZvLT5Cb290TWFqb3JWZXJzaW9uCT0gZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5NYWpvclZlcnNpb247CisJcHJvZHVjdF9pbmZvLT5Cb290TWlub3JWZXJzaW9uCT0gZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5NaW5vclZlcnNpb247CisJcHJvZHVjdF9pbmZvLT5Cb290QnVpbGROdW1iZXIJPSBlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLkJ1aWxkTnVtYmVyOworCisJbWVtY3B5KHByb2R1Y3RfaW5mby0+TWFudWZhY3R1cmVEZXNjRGF0ZSwgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuRGVzY0RhdGUsIHNpemVvZihlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5EZXNjRGF0ZSkpOworCisJLy8gY2hlY2sgaWYgdGhpcyBpcyAybmQgZ2VuZXJhdGlvbiBoYXJkd2FyZQorCWlmIChsZTE2X3RvX2NwdShlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAmIElPTl9ERVZJQ0VfSURfODAyNTFfTkVUQ0hJUCkgeworCQlwcm9kdWN0X2luZm8tPkZpcm13YXJlTWFqb3JWZXJzaW9uCT0gT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uX0dFTjIuTWFqb3JWZXJzaW9uOworCQlwcm9kdWN0X2luZm8tPkZpcm13YXJlTWlub3JWZXJzaW9uCT0gT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uX0dFTjIuTWlub3JWZXJzaW9uOworCQlwcm9kdWN0X2luZm8tPkZpcm13YXJlQnVpbGROdW1iZXIJPSBjcHVfdG9fbGUxNihPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb25fR0VOMi5CdWlsZE51bWJlcik7CisJCXByb2R1Y3RfaW5mby0+aURvd25sb2FkRmlsZQkJPSBFREdFX0RPV05MT0FEX0ZJTEVfODAyNTE7CisJfSBlbHNlIHsKKwkJcHJvZHVjdF9pbmZvLT5GaXJtd2FyZU1ham9yVmVyc2lvbgk9IE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbl9HRU4xLk1ham9yVmVyc2lvbjsKKwkJcHJvZHVjdF9pbmZvLT5GaXJtd2FyZU1pbm9yVmVyc2lvbgk9IE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbl9HRU4xLk1pbm9yVmVyc2lvbjsKKwkJcHJvZHVjdF9pbmZvLT5GaXJtd2FyZUJ1aWxkTnVtYmVyCT0gY3B1X3RvX2xlMTYoT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uX0dFTjEuQnVpbGROdW1iZXIpOworCQlwcm9kdWN0X2luZm8tPmlEb3dubG9hZEZpbGUJCT0gRURHRV9ET1dOTE9BRF9GSUxFX0k5MzA7CisJfQorCisJLy8gRGV0ZXJtaW5lIFByb2R1Y3QgdHlwZSBhbmQgc2V0IGFwcHJvcHJpYXRlIGZsYWdzCisJc3dpdGNoIChERVZJQ0VfSURfRlJPTV9VU0JfUFJPRFVDVF9JRChwcm9kdWN0X2luZm8tPlByb2R1Y3RJZCkpIHsKKwkJY2FzZSBJT05fREVWSUNFX0lEX0VER0VQT1JUX0NPTVBBVElCTEU6CisJCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80VDoKKwkJY2FzZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzQ6CisJCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF8yOgorCQljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfOF9EVUFMX0NQVToKKwkJY2FzZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzg6CisJCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80MjE6CisJCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF8yMToKKwkJY2FzZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzJfRElOOgorCQljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNF9ESU46CisJCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF8xNl9EVUFMX0NQVToKKwkJCXByb2R1Y3RfaW5mby0+SXNSUzIzMiA9IDE7CisJCQlicmVhazsKKworCQljYXNlIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMkk6CQkJCSAgIC8vIEVkZ2Vwb3J0LzIgUlM0MjIvUlM0ODUKKwkJCXByb2R1Y3RfaW5mby0+SXNSUzQyMiA9IDE7CisJCQlwcm9kdWN0X2luZm8tPklzUlM0ODUgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzhJOgkJCQkgICAvLyBFZGdlcG9ydC80IFJTNDIyCisJCWNhc2UgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80SToJCQkJICAgLy8gRWRnZXBvcnQvNCBSUzQyMgorCQkJcHJvZHVjdF9pbmZvLT5Jc1JTNDIyID0gMTsKKwkJCWJyZWFrOworCX0KKworCS8vIER1bXAgUHJvZHVjdCBJbmZvIHN0cnVjdHVyZQorCWRiZygiKipQcm9kdWN0IEluZm9ybWF0aW9uOiIpOworCWRiZygiICBQcm9kdWN0SWQgICAgICAgICAgICAgJXgiLCBwcm9kdWN0X2luZm8tPlByb2R1Y3RJZCApOworCWRiZygiICBOdW1Qb3J0cyAgICAgICAgICAgICAgJWQiLCBwcm9kdWN0X2luZm8tPk51bVBvcnRzICk7CisJZGJnKCIgIFByb2RJbmZvVmVyICAgICAgICAgICAlZCIsIHByb2R1Y3RfaW5mby0+UHJvZEluZm9WZXIgKTsKKwlkYmcoIiAgSXNTZXJ2ZXIgICAgICAgICAgICAgICVkIiwgcHJvZHVjdF9pbmZvLT5Jc1NlcnZlcik7CisJZGJnKCIgIElzUlMyMzIgICAgICAgICAgICAgICAlZCIsIHByb2R1Y3RfaW5mby0+SXNSUzIzMiApOworCWRiZygiICBJc1JTNDIyICAgICAgICAgICAgICAgJWQiLCBwcm9kdWN0X2luZm8tPklzUlM0MjIgKTsKKwlkYmcoIiAgSXNSUzQ4NSAgICAgICAgICAgICAgICVkIiwgcHJvZHVjdF9pbmZvLT5Jc1JTNDg1ICk7CisJZGJnKCIgIFJvbVNpemUgICAgICAgICAgICAgICAlZCIsIHByb2R1Y3RfaW5mby0+Um9tU2l6ZSApOworCWRiZygiICBSYW1TaXplICAgICAgICAgICAgICAgJWQiLCBwcm9kdWN0X2luZm8tPlJhbVNpemUgKTsKKwlkYmcoIiAgQ3B1UmV2ICAgICAgICAgICAgICAgICV4IiwgcHJvZHVjdF9pbmZvLT5DcHVSZXYgICk7CisJZGJnKCIgIEJvYXJkUmV2ICAgICAgICAgICAgICAleCIsIHByb2R1Y3RfaW5mby0+Qm9hcmRSZXYpOworCWRiZygiICBCb290TWFqb3JWZXJzaW9uICAgICAgJWQuJWQuJWQiLCBwcm9kdWN0X2luZm8tPkJvb3RNYWpvclZlcnNpb24sCisJICAgIHByb2R1Y3RfaW5mby0+Qm9vdE1pbm9yVmVyc2lvbiwKKwkgICAgbGUxNl90b19jcHUocHJvZHVjdF9pbmZvLT5Cb290QnVpbGROdW1iZXIpKTsKKwlkYmcoIiAgRmlybXdhcmVNYWpvclZlcnNpb24gICVkLiVkLiVkIiwgcHJvZHVjdF9pbmZvLT5GaXJtd2FyZU1ham9yVmVyc2lvbiwKKwkgICAgcHJvZHVjdF9pbmZvLT5GaXJtd2FyZU1pbm9yVmVyc2lvbiwKKwkgICAgbGUxNl90b19jcHUocHJvZHVjdF9pbmZvLT5GaXJtd2FyZUJ1aWxkTnVtYmVyKSk7CisJZGJnKCIgIE1hbnVmYWN0dXJlRGVzY0RhdGUgICAlZC8lZC8lZCIsIHByb2R1Y3RfaW5mby0+TWFudWZhY3R1cmVEZXNjRGF0ZVswXSwKKwkgICAgcHJvZHVjdF9pbmZvLT5NYW51ZmFjdHVyZURlc2NEYXRlWzFdLAorCSAgICBwcm9kdWN0X2luZm8tPk1hbnVmYWN0dXJlRGVzY0RhdGVbMl0rMTkwMCk7CisJZGJnKCIgIGlEb3dubG9hZEZpbGUgICAgICAgICAweCV4IiwgICAgIHByb2R1Y3RfaW5mby0+aURvd25sb2FkRmlsZSk7CisKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgVSBTIEIgIEMgQSBMIEwgQiBBIEMgSyAgIEYgVSBOIEMgVCBJIE8gTiBTICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgIFUgUyBCICBDIEEgTCBMIEIgQSBDIEsgICBGIFUgTiBDIFQgSSBPIE4gUyAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZWRnZV9pbnRlcnJ1cHRfY2FsbGJhY2sKKyAqCXRoaXMgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB3aGVuIHdlIGhhdmUgcmVjZWl2ZWQgZGF0YSBvbiB0aGUgCisgKglpbnRlcnJ1cHQgZW5kcG9pbnQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBlZGdlX2ludGVycnVwdF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsCSplZGdlX3NlcmlhbCA9IChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQ7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IGxlbmd0aCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwlpbnQgYnl0ZXNfYXZhaWw7CisJaW50IHBvc2l0aW9uOworCWludCB0eENyZWRpdHM7CisJaW50IHBvcnROdW1iZXI7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvLyBwcm9jZXNzIHRoaXMgaW50ZXJydXB0LXJlYWQgZXZlbiBpZiB0aGVyZSBhcmUgbm8gcG9ydHMgb3BlbgorCWlmIChsZW5ndGgpIHsKKwkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsIF9fRlVOQ1RJT05fXywgbGVuZ3RoLCBkYXRhKTsKKworCQlpZiAobGVuZ3RoID4gMSkgeworCQkJYnl0ZXNfYXZhaWwgPSBkYXRhWzBdIHwgKGRhdGFbMV0gPDwgOCk7CisJCQlpZiAoYnl0ZXNfYXZhaWwpIHsKKwkJCQlzcGluX2xvY2soJmVkZ2Vfc2VyaWFsLT5lc19sb2NrKTsKKwkJCQllZGdlX3NlcmlhbC0+cnhCeXRlc0F2YWlsICs9IGJ5dGVzX2F2YWlsOworCQkJCWRiZygiJXMgLSBieXRlc19hdmFpbD0lZCwgcnhCeXRlc0F2YWlsPSVkLCByZWFkX2luX3Byb2dyZXNzPSVkIiwgX19GVU5DVElPTl9fLCBieXRlc19hdmFpbCwgZWRnZV9zZXJpYWwtPnJ4Qnl0ZXNBdmFpbCwgZWRnZV9zZXJpYWwtPnJlYWRfaW5fcHJvZ3Jlc3MpOworCisJCQkJaWYgKGVkZ2Vfc2VyaWFsLT5yeEJ5dGVzQXZhaWwgPiAwICYmCisJCQkJICAgICFlZGdlX3NlcmlhbC0+cmVhZF9pbl9wcm9ncmVzcykgeworCQkJCQlkYmcoIiVzIC0gcG9zdGluZyBhIHJlYWQiLCBfX0ZVTkNUSU9OX18pOworCQkJCQllZGdlX3NlcmlhbC0+cmVhZF9pbl9wcm9ncmVzcyA9IFRSVUU7CisKKwkJCQkJLyogd2UgaGF2ZSBwZW5kaW5nIGJ5dGVzIG9uIHRoZSBidWxrIGluIHBpcGUsIHNlbmQgYSByZXF1ZXN0ICovCisJCQkJCWVkZ2Vfc2VyaWFsLT5yZWFkX3VyYi0+ZGV2ID0gZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2OworCQkJCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihlZGdlX3NlcmlhbC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCQkJCQlpZiAocmVzdWx0KSB7CisJCQkJCQlkZXZfZXJyKCZlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwgIiVzIC0gdXNiX3N1Ym1pdF91cmIocmVhZCBidWxrKSBmYWlsZWQgd2l0aCByZXN1bHQgPSAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQkJCQkJZWRnZV9zZXJpYWwtPnJlYWRfaW5fcHJvZ3Jlc3MgPSBGQUxTRTsKKwkJCQkJfQorCQkJCX0KKwkJCQlzcGluX3VubG9jaygmZWRnZV9zZXJpYWwtPmVzX2xvY2spOworCQkJfQorCQl9CisJCS8qIGdyYWIgdGhlIHR4Y3JlZGl0cyBmb3IgdGhlIHBvcnRzIGlmIGF2YWlsYWJsZSAqLworCQlwb3NpdGlvbiA9IDI7CisJCXBvcnROdW1iZXIgPSAwOworCQl3aGlsZSAoKHBvc2l0aW9uIDwgbGVuZ3RoKSAmJiAocG9ydE51bWJlciA8IGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPm51bV9wb3J0cykpIHsKKwkJCXR4Q3JlZGl0cyA9IGRhdGFbcG9zaXRpb25dIHwgKGRhdGFbcG9zaXRpb24rMV0gPDwgOCk7CisJCQlpZiAodHhDcmVkaXRzKSB7CisJCQkJcG9ydCA9IGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPnBvcnRbcG9ydE51bWJlcl07CisJCQkJZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQkJCWlmIChlZGdlX3BvcnQtPm9wZW4pIHsKKwkJCQkJc3Bpbl9sb2NrKCZlZGdlX3BvcnQtPmVwX2xvY2spOworCQkJCQllZGdlX3BvcnQtPnR4Q3JlZGl0cyArPSB0eENyZWRpdHM7CisJCQkJCXNwaW5fdW5sb2NrKCZlZGdlX3BvcnQtPmVwX2xvY2spOworCQkJCQlkYmcoIiVzIC0gdHhjcmVkaXRzIGZvciBwb3J0JWQgPSAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydE51bWJlciwgZWRnZV9wb3J0LT50eENyZWRpdHMpOworCisJCQkJCS8qIHRlbGwgdGhlIHR0eSBkcml2ZXIgdGhhdCBzb21ldGhpbmcgaGFzIGNoYW5nZWQgKi8KKwkJCQkJaWYgKGVkZ2VfcG9ydC0+cG9ydC0+dHR5KQorCQkJCQkJdHR5X3dha2V1cChlZGdlX3BvcnQtPnBvcnQtPnR0eSk7CisKKwkJCQkJLy8gU2luY2Ugd2UgaGF2ZSBtb3JlIGNyZWRpdCwgY2hlY2sgaWYgbW9yZSBkYXRhIGNhbiBiZSBzZW50CisJCQkJCXNlbmRfbW9yZV9wb3J0X2RhdGEoZWRnZV9zZXJpYWwsIGVkZ2VfcG9ydCk7CisJCQkJfQorCQkJfQorCQkJcG9zaXRpb24gKz0gMjsKKwkJCSsrcG9ydE51bWJlcjsKKwkJfQorCX0KKworZXhpdDoKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KSB7CisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgY29udHJvbCB1cmJcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwl9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBlZGdlX2J1bGtfaW5fY2FsbGJhY2sKKyAqCXRoaXMgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB3aGVuIHdlIGhhdmUgcmVjZWl2ZWQgZGF0YSBvbiB0aGUgCisgKglidWxrIGluIGVuZHBvaW50LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgZWRnZV9idWxrX2luX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBlZGdlcG9ydF9zZXJpYWwJKmVkZ2Vfc2VyaWFsID0gKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKil1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhcgkJKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQJCQlzdGF0dXM7CisJX191MTYJCQlyYXdfZGF0YV9sZW5ndGg7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQllZGdlX3NlcmlhbC0+cmVhZF9pbl9wcm9ncmVzcyA9IEZBTFNFOworCQlyZXR1cm47CisJfQorCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSAwKSB7CisJCWRiZygiJXMgLSByZWFkIGJ1bGsgY2FsbGJhY2sgd2l0aCBubyBkYXRhIiwgX19GVU5DVElPTl9fKTsKKwkJZWRnZV9zZXJpYWwtPnJlYWRfaW5fcHJvZ3Jlc3MgPSBGQUxTRTsKKwkJcmV0dXJuOworCX0KKworCXJhd19kYXRhX2xlbmd0aCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJmVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCBfX0ZVTkNUSU9OX18sIHJhd19kYXRhX2xlbmd0aCwgZGF0YSk7CisKKwlzcGluX2xvY2soJmVkZ2Vfc2VyaWFsLT5lc19sb2NrKTsKKworCS8qIGRlY3JlbWVudCBvdXIgcnhCeXRlcyBhdmFpbGFibGUgYnkgdGhlIG51bWJlciB0aGF0IHdlIGp1c3QgZ290ICovCisJZWRnZV9zZXJpYWwtPnJ4Qnl0ZXNBdmFpbCAtPSByYXdfZGF0YV9sZW5ndGg7CisKKwlkYmcoIiVzIC0gUmVjZWl2ZWQgPSAlZCwgcnhCeXRlc0F2YWlsICVkIiwgX19GVU5DVElPTl9fLCByYXdfZGF0YV9sZW5ndGgsIGVkZ2Vfc2VyaWFsLT5yeEJ5dGVzQXZhaWwpOworCisJcHJvY2Vzc19yY3ZkX2RhdGEgKGVkZ2Vfc2VyaWFsLCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCisJLyogY2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IG1vcmUgZGF0YSBmb3IgdXMgdG8gcmVhZCAqLworCWlmIChlZGdlX3NlcmlhbC0+cnhCeXRlc0F2YWlsID4gMCkgeworCQlkYmcoIiVzIC0gcG9zdGluZyBhIHJlYWQiLCBfX0ZVTkNUSU9OX18pOworCQllZGdlX3NlcmlhbC0+cmVhZF91cmItPmRldiA9IGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldjsKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIoZWRnZV9zZXJpYWwtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHN0YXR1cykgeworCQkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gdXNiX3N1Ym1pdF91cmIocmVhZCBidWxrKSBmYWlsZWQsIHN0YXR1cyA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCQllZGdlX3NlcmlhbC0+cmVhZF9pbl9wcm9ncmVzcyA9IEZBTFNFOworCQl9CisJfSBlbHNlIHsKKwkJZWRnZV9zZXJpYWwtPnJlYWRfaW5fcHJvZ3Jlc3MgPSBGQUxTRTsKKwl9CisKKwlzcGluX3VubG9jaygmZWRnZV9zZXJpYWwtPmVzX2xvY2spOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZWRnZV9idWxrX291dF9kYXRhX2NhbGxiYWNrCisgKgl0aGlzIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igd2hlbiB3ZSBoYXZlIGZpbmlzaGVkIHNlbmRpbmcgc2VyaWFsIGRhdGEKKyAqCW9uIHRoZSBidWxrIG91dCBlbmRwb2ludC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGVkZ2VfYnVsa19vdXRfZGF0YV9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwl9CisKKwl0dHkgPSBlZGdlX3BvcnQtPnBvcnQtPnR0eTsKKworCWlmICh0dHkgJiYgZWRnZV9wb3J0LT5vcGVuKSB7CisJCS8qIGxldCB0aGUgdHR5IGRyaXZlciB3YWtldXAgaWYgaXQgaGFzIGEgc3BlY2lhbCB3cml0ZV93YWtldXAgZnVuY3Rpb24gKi8KKwkJdHR5X3dha2V1cCh0dHkpOworCX0KKworCS8vIFJlbGVhc2UgdGhlIFdyaXRlIFVSQgorCWVkZ2VfcG9ydC0+d3JpdGVfaW5fcHJvZ3Jlc3MgPSBGQUxTRTsKKworCS8vIENoZWNrIGlmIG1vcmUgZGF0YSBuZWVkcyB0byBiZSBzZW50CisJc2VuZF9tb3JlX3BvcnRfZGF0YSgoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqKSh1c2JfZ2V0X3NlcmlhbF9kYXRhKGVkZ2VfcG9ydC0+cG9ydC0+c2VyaWFsKSksIGVkZ2VfcG9ydCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCdWxrT3V0Q21kQ2FsbGJhY2sKKyAqCXRoaXMgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB3aGVuIHdlIGhhdmUgZmluaXNoZWQgc2VuZGluZyBhIGNvbW1hbmQKKyAqCW9uIHRoZSBidWxrIG91dCBlbmRwb2ludC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGVkZ2VfYnVsa19vdXRfY21kX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCUNtZFVyYnMtLTsKKwlkYmcoIiVzIC0gRlJFRSBVUkIgJXAgKG91dHN0YW5kaW5nICVkKSIsIF9fRlVOQ1RJT05fXywgdXJiLCBDbWRVcmJzKTsKKworCisJLyogY2xlYW4gdXAgdGhlIHRyYW5zZmVyIGJ1ZmZlciAqLworCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciAhPSBOVUxMKSB7CisJCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwl9CisKKwkvKiBGcmVlIHRoZSBjb21tYW5kIHVyYiAqLworCXVzYl9mcmVlX3VyYiAodXJiKTsKKworCWlmIChzdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJLyogR2V0IHBvaW50ZXIgdG8gdHR5ICovCisJdHR5ID0gZWRnZV9wb3J0LT5wb3J0LT50dHk7CisKKwkvKiB0ZWxsIHRoZSB0dHkgZHJpdmVyIHRoYXQgc29tZXRoaW5nIGhhcyBjaGFuZ2VkICovCisJaWYgKHR0eSAmJiBlZGdlX3BvcnQtPm9wZW4pCisJCXR0eV93YWtldXAodHR5KTsKKworCS8qIHdlIGhhdmUgY29tcGxldGVkIHRoZSBjb21tYW5kICovCisJZWRnZV9wb3J0LT5jb21tYW5kUGVuZGluZyA9IEZBTFNFOworCXdha2VfdXAoJmVkZ2VfcG9ydC0+d2FpdF9jb21tYW5kKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERyaXZlciB0dHkgaW50ZXJmYWNlIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNlcmlhbE9wZW4KKyAqCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0dHkgZHJpdmVyIHdoZW4gYSBwb3J0IGlzIG9wZW5lZAorICoJSWYgc3VjY2Vzc2Z1bCwgd2UgcmV0dXJuIDAKKyAqCU90aGVyd2lzZSB3ZSByZXR1cm4gYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGVkZ2Vfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbDsKKwlpbnQgcmVzcG9uc2U7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAocG9ydC0+dHR5KQorCQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gbG93X2xhdGVuY3k7CisKKwkvKiBzZWUgaWYgd2UndmUgc2V0IHVwIG91ciBlbmRwb2ludCBpbmZvIHlldCAoY2FuJ3Qgc2V0IGl0IHVwIGluIGVkZ2Vfc3RhcnR1cAorCSAgIGFzIHRoZSBzdHJ1Y3R1cmVzIHdlcmUgbm90IHNldCB1cCBhdCB0aGF0IHRpbWUuKSAqLworCXNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwllZGdlX3NlcmlhbCA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKwlpZiAoZWRnZV9zZXJpYWwgPT0gTlVMTCkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKGVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfaW5fYnVmZmVyID09IE5VTEwpIHsKKwkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDAgPSBzZXJpYWwtPnBvcnRbMF07CisJCQorCQkvKiBub3Qgc2V0IHVwIHlldCwgc28gZG8gaXQgbm93ICovCisJCWVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfaW5fYnVmZmVyID0gcG9ydDAtPmludGVycnVwdF9pbl9idWZmZXI7CisJCWVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQgPSBwb3J0MC0+aW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzczsKKwkJZWRnZV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYiA9IHBvcnQwLT5pbnRlcnJ1cHRfaW5fdXJiOworCQllZGdlX3NlcmlhbC0+YnVsa19pbl9idWZmZXIgPSBwb3J0MC0+YnVsa19pbl9idWZmZXI7CisJCWVkZ2Vfc2VyaWFsLT5idWxrX2luX2VuZHBvaW50ID0gcG9ydDAtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzOworCQllZGdlX3NlcmlhbC0+cmVhZF91cmIgPSBwb3J0MC0+cmVhZF91cmI7CisJCWVkZ2Vfc2VyaWFsLT5idWxrX291dF9lbmRwb2ludCA9IHBvcnQwLT5idWxrX291dF9lbmRwb2ludEFkZHJlc3M7CisJCisJCS8qIHNldCB1cCBvdXIgaW50ZXJydXB0IHVyYiAqLworCQl1c2JfZmlsbF9pbnRfdXJiKGVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfcmVhZF91cmIsCisJCQkJIHNlcmlhbC0+ZGV2LAorCQkJCSB1c2JfcmN2aW50cGlwZShzZXJpYWwtPmRldiwKKwkJCQkJICAgICAgICBwb3J0MC0+aW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkJIHBvcnQwLT5pbnRlcnJ1cHRfaW5fYnVmZmVyLAorCQkJCSBlZGdlX3NlcmlhbC0+aW50ZXJydXB0X3JlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCSBlZGdlX2ludGVycnVwdF9jYWxsYmFjaywgZWRnZV9zZXJpYWwsCisJCQkJIGVkZ2Vfc2VyaWFsLT5pbnRlcnJ1cHRfcmVhZF91cmItPmludGVydmFsKTsKKwkJCisJCS8qIHNldCB1cCBvdXIgYnVsayBpbiB1cmIgKi8KKwkJdXNiX2ZpbGxfYnVsa191cmIoZWRnZV9zZXJpYWwtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKKwkJCQkgIHVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCQkJICAJICBwb3J0MC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJCSAgcG9ydDAtPmJ1bGtfaW5fYnVmZmVyLAorCQkJCSAgZWRnZV9zZXJpYWwtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCSAgZWRnZV9idWxrX2luX2NhbGxiYWNrLCBlZGdlX3NlcmlhbCk7CisJCWVkZ2Vfc2VyaWFsLT5yZWFkX2luX3Byb2dyZXNzID0gRkFMU0U7CisKKwkJLyogc3RhcnQgaW50ZXJydXB0IHJlYWQgZm9yIHRoaXMgZWRnZXBvcnQKKwkJICogdGhpcyBpbnRlcnJ1cHQgd2lsbCBjb250aW51ZSBhcyBsb25nIGFzIHRoZSBlZGdlcG9ydCBpcyBjb25uZWN0ZWQgKi8KKwkJcmVzcG9uc2UgPSB1c2Jfc3VibWl0X3VyYiAoZWRnZV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXNwb25zZSkgeworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBFcnJvciAlZCBzdWJtaXR0aW5nIGNvbnRyb2wgdXJiXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3BvbnNlKTsKKwkJfQorCX0KKwkKKwkvKiBpbml0aWFsaXplIG91ciB3YWl0IHF1ZXVlcyAqLworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmVkZ2VfcG9ydC0+d2FpdF9vcGVuKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZlZGdlX3BvcnQtPndhaXRfY2hhc2UpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmVkZ2VfcG9ydC0+ZGVsdGFfbXNyX3dhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmVkZ2VfcG9ydC0+d2FpdF9jb21tYW5kKTsKKworCS8qIGluaXRpYWxpemUgb3VyIGljb3VudCBzdHJ1Y3R1cmUgKi8KKwltZW1zZXQgKCYoZWRnZV9wb3J0LT5pY291bnQpLCAweDAwLCBzaXplb2YoZWRnZV9wb3J0LT5pY291bnQpKTsKKworCS8qIGluaXRpYWxpemUgb3VyIHBvcnQgc2V0dGluZ3MgKi8KKwllZGdlX3BvcnQtPnR4Q3JlZGl0cyAgICAgICAgICAgID0gMDsJCQkvKiBDYW4ndCBzZW5kIGFueSBkYXRhIHlldCAqLworCWVkZ2VfcG9ydC0+c2hhZG93TUNSICAgICAgICAgICAgPSBNQ1JfTUFTVEVSX0lFOwkvKiBNdXN0IGFsd2F5cyBzZXQgdGhpcyBiaXQgdG8gZW5hYmxlIGludHMhICovCisJZWRnZV9wb3J0LT5jaGFzZVJlc3BvbnNlUGVuZGluZyA9IEZBTFNFOworCisJLyogc2VuZCBhIG9wZW4gcG9ydCBjb21tYW5kICovCisJZWRnZV9wb3J0LT5vcGVuUGVuZGluZyA9IFRSVUU7CisJZWRnZV9wb3J0LT5vcGVuICAgICAgICA9IEZBTFNFOworCXJlc3BvbnNlID0gc2VuZF9pb3NwX2V4dF9jbWQgKGVkZ2VfcG9ydCwgSU9TUF9DTURfT1BFTl9QT1JULCAwKTsKKworCWlmIChyZXNwb25zZSA8IDApIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBlcnJvciBzZW5kaW5nIG9wZW4gcG9ydCBjb21tYW5kXG4iLCBfX0ZVTkNUSU9OX18pOworCQllZGdlX3BvcnQtPm9wZW5QZW5kaW5nID0gRkFMU0U7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIG5vdyB3YWl0IGZvciB0aGUgcG9ydCB0byBiZSBjb21wbGV0ZWx5IG9wZW5lZCAqLworCXdhaXRfZXZlbnRfdGltZW91dChlZGdlX3BvcnQtPndhaXRfb3BlbiwgKGVkZ2VfcG9ydC0+b3BlblBlbmRpbmcgIT0gVFJVRSksIE9QRU5fVElNRU9VVCk7CisKKwlpZiAoZWRnZV9wb3J0LT5vcGVuID09IEZBTFNFKSB7CisJCS8qIG9wZW4gdGltZWQgb3V0ICovCisJCWRiZygiJXMgLSBvcGVuIHRpbWVkb3V0IiwgX19GVU5DVElPTl9fKTsKKwkJZWRnZV9wb3J0LT5vcGVuUGVuZGluZyA9IEZBTFNFOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBjcmVhdGUgdGhlIHR4ZmlmbyAqLworCWVkZ2VfcG9ydC0+dHhmaWZvLmhlYWQJPSAwOworCWVkZ2VfcG9ydC0+dHhmaWZvLnRhaWwJPSAwOworCWVkZ2VfcG9ydC0+dHhmaWZvLmNvdW50CT0gMDsKKwllZGdlX3BvcnQtPnR4Zmlmby5zaXplCT0gZWRnZV9wb3J0LT5tYXhUeENyZWRpdHM7CisJZWRnZV9wb3J0LT50eGZpZm8uZmlmbwk9IGttYWxsb2MgKGVkZ2VfcG9ydC0+bWF4VHhDcmVkaXRzLCBHRlBfS0VSTkVMKTsKKworCWlmICghZWRnZV9wb3J0LT50eGZpZm8uZmlmbykgeworCQlkYmcoIiVzIC0gbm8gbWVtb3J5IiwgX19GVU5DVElPTl9fKTsKKwkJZWRnZV9jbG9zZSAocG9ydCwgZmlscCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIEFsbG9jYXRlIGEgVVJCIGZvciB0aGUgd3JpdGUgKi8KKwllZGdlX3BvcnQtPndyaXRlX3VyYiA9IHVzYl9hbGxvY191cmIgKDAsIEdGUF9LRVJORUwpOworCWVkZ2VfcG9ydC0+d3JpdGVfaW5fcHJvZ3Jlc3MgPSBGQUxTRTsKKworCWlmICghZWRnZV9wb3J0LT53cml0ZV91cmIpIHsKKwkJZGJnKCIlcyAtIG5vIG1lbW9yeSIsIF9fRlVOQ1RJT05fXyk7CisJCWVkZ2VfY2xvc2UgKHBvcnQsIGZpbHApOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkYmcoIiVzKCVkKSAtIEluaXRpYWxpemUgVFggZmlmbyB0byAlZCBieXRlcyIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCBlZGdlX3BvcnQtPm1heFR4Q3JlZGl0cyk7CisKKwlkYmcoIiVzIGV4aXRlZCIsIF9fRlVOQ1RJT05fXyk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogYmxvY2tfdW50aWxfY2hhc2VfcmVzcG9uc2UKKyAqCisgKglUaGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdGhlIGNsb3NlIHVudGlsIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICoJCTEuIFJlc3BvbnNlIHRvIG91ciBDaGFzZSBjb21lcyBmcm9tIEVkZ2Vwb3J0CisgKgkJMi4gQSB0aW1vdXQgb2YgMTAgc2Vjb25kcyB3aXRob3V0IGFjdGl2aXR5IGhhcyBleHBpcmVkCisgKgkJICAgKDFLIG9mIEVkZ2Vwb3J0IGRhdGEgQCAyNDAwIGJhdWQgPT0+IDQgc2VjIHRvIGVtcHR5KQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBibG9ja191bnRpbF9jaGFzZV9yZXNwb25zZShzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0KQoreworCURFRklORV9XQUlUKHdhaXQpOworCV9fdTE2IGxhc3RDcmVkaXRzOworCWludCB0aW1lb3V0ID0gMSpIWjsKKwlpbnQgbG9vcCA9IDEwOworCisJd2hpbGUgKDEpIHsKKwkJLy8gU2F2ZSBMYXN0IGNyZWRpdHMKKwkJbGFzdENyZWRpdHMgPSBlZGdlX3BvcnQtPnR4Q3JlZGl0czsKKworCQkvLyBEaWQgd2UgZ2V0IG91ciBDaGFzZSByZXNwb25zZQorCQlpZiAoZWRnZV9wb3J0LT5jaGFzZVJlc3BvbnNlUGVuZGluZyA9PSBGQUxTRSkgeworCQkJZGJnKCIlcyAtIEdvdCBDaGFzZSBSZXNwb25zZSIsIF9fRlVOQ1RJT05fXyk7CisKKwkJCS8vIGRpZCB3ZSBnZXQgYWxsIG9mIG91ciBjcmVkaXQgYmFjaz8KKwkJCWlmIChlZGdlX3BvcnQtPnR4Q3JlZGl0cyA9PSBlZGdlX3BvcnQtPm1heFR4Q3JlZGl0cyApIHsKKwkJCQlkYmcoIiVzIC0gR290IGFsbCBjcmVkaXRzIiwgX19GVU5DVElPTl9fKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKworCQkvLyBCbG9jayB0aGUgdGhyZWFkIGZvciBhIHdoaWxlCisJCXByZXBhcmVfdG9fd2FpdCgmZWRnZV9wb3J0LT53YWl0X2NoYXNlLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOworCQlmaW5pc2hfd2FpdCgmZWRnZV9wb3J0LT53YWl0X2NoYXNlLCAmd2FpdCk7CisKKwkJaWYgKGxhc3RDcmVkaXRzID09IGVkZ2VfcG9ydC0+dHhDcmVkaXRzKSB7CisJCQkvLyBObyBhY3Rpdml0eS4uIGNvdW50IGRvd24uCisJCQlsb29wLS07CisJCQlpZiAobG9vcCA9PSAwKSB7CisJCQkJZWRnZV9wb3J0LT5jaGFzZVJlc3BvbnNlUGVuZGluZyA9IEZBTFNFOworCQkJCWRiZygiJXMgLSBDaGFzZSBUSU1FT1VUIiwgX19GVU5DVElPTl9fKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0gZWxzZSB7CisJCQkvLyBSZXNldCB0aW1vdXQgdmFsdWUgYmFjayB0byAxMCBzZWNvbmRzCisJCQlkYmcoIiVzIC0gTGFzdCAlZCwgQ3VycmVudCAlZCIsIF9fRlVOQ1RJT05fXywgbGFzdENyZWRpdHMsIGVkZ2VfcG9ydC0+dHhDcmVkaXRzKTsKKwkJCWxvb3AgPSAxMDsKKwkJfQorCX0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogYmxvY2tfdW50aWxfdHhfZW1wdHkKKyAqCisgKglUaGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdGhlIGNsb3NlIHVudGlsIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICoJCTEuIFRYIGNvdW50IGFyZSAwCisgKgkJMi4gVGhlIGVkZ2Vwb3J0IGhhcyBzdG9wcGVkCisgKgkJMy4gQSB0aW1vdXQgb2YgMyBzZWNvbmRzIHdpdGhvdXQgYWN0aXZpdHkgaGFzIGV4cGlyZWQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgYmxvY2tfdW50aWxfdHhfZW1wdHkgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQpCit7CisJREVGSU5FX1dBSVQod2FpdCk7CisJc3RydWN0IFR4RmlmbyAqZmlmbyA9ICZlZGdlX3BvcnQtPnR4ZmlmbzsKKwlfX3UzMiBsYXN0Q291bnQ7CisJaW50IHRpbWVvdXQgPSBIWi8xMDsKKwlpbnQgbG9vcCA9IDMwOworCisJd2hpbGUgKDEpIHsKKwkJLy8gU2F2ZSBMYXN0IGNvdW50CisJCWxhc3RDb3VudCA9IGZpZm8tPmNvdW50OworCisJCS8vIElzIHRoZSBFZGdlcG9ydCBCdWZmZXIgZW1wdHk/CisJCWlmIChsYXN0Q291bnQgPT0gMCkgeworCQkJZGJnKCIlcyAtIFRYIEJ1ZmZlciBFbXB0eSIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBCbG9jayB0aGUgdGhyZWFkIGZvciBhIHdoaWxlCisJCXByZXBhcmVfdG9fd2FpdCAoJmVkZ2VfcG9ydC0+d2FpdF9jaGFzZSwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKwkJZmluaXNoX3dhaXQoJmVkZ2VfcG9ydC0+d2FpdF9jaGFzZSwgJndhaXQpOworCisJCWRiZygiJXMgd2FpdCIsIF9fRlVOQ1RJT05fXyk7CisKKwkJaWYgKGxhc3RDb3VudCA9PSBmaWZvLT5jb3VudCkgeworCQkJLy8gTm8gYWN0aXZpdHkuLiBjb3VudCBkb3duLgorCQkJbG9vcC0tOworCQkJaWYgKGxvb3AgPT0gMCkgeworCQkJCWRiZygiJXMgLSBUSU1FT1VUIiwgX19GVU5DVElPTl9fKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0gZWxzZSB7CisJCQkvLyBSZXNldCB0aW1vdXQgdmFsdWUgYmFjayB0byBzZWNvbmRzCisJCQlsb29wID0gMzA7CisJCX0KKwl9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBlZGdlX2Nsb3NlCisgKgl0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdHR5IGRyaXZlciB3aGVuIGEgcG9ydCBpcyBjbG9zZWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGVkZ2VfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbDsKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0OworCWludCBzdGF0dXM7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJCSAKKwllZGdlX3NlcmlhbCA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKKwllZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaWYgKChlZGdlX3NlcmlhbCA9PSBOVUxMKSB8fCAoZWRnZV9wb3J0ID09IE5VTEwpKQorCQlyZXR1cm47CisJCisJLy8gYmxvY2sgdW50aWwgdHggaXMgZW1wdHkKKwlibG9ja191bnRpbF90eF9lbXB0eShlZGdlX3BvcnQpOworCisJZWRnZV9wb3J0LT5jbG9zZVBlbmRpbmcgPSBUUlVFOworCisJLyogZmx1c2ggYW5kIGNoYXNlICovCisJZWRnZV9wb3J0LT5jaGFzZVJlc3BvbnNlUGVuZGluZyA9IFRSVUU7CisKKwlkYmcoIiVzIC0gU2VuZGluZyBJT1NQX0NNRF9DSEFTRV9QT1JUIiwgX19GVU5DVElPTl9fKTsKKwlzdGF0dXMgPSBzZW5kX2lvc3BfZXh0X2NtZCAoZWRnZV9wb3J0LCBJT1NQX0NNRF9DSEFTRV9QT1JULCAwKTsKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJLy8gYmxvY2sgdW50aWwgY2hhc2UgZmluaXNoZWQKKwkJYmxvY2tfdW50aWxfY2hhc2VfcmVzcG9uc2UoZWRnZV9wb3J0KTsKKwl9IGVsc2UgeworCQllZGdlX3BvcnQtPmNoYXNlUmVzcG9uc2VQZW5kaW5nID0gRkFMU0U7CisJfQorCisJLyogY2xvc2UgdGhlIHBvcnQgKi8KKwlkYmcoIiVzIC0gU2VuZGluZyBJT1NQX0NNRF9DTE9TRV9QT1JUIiwgX19GVU5DVElPTl9fKTsKKwlzZW5kX2lvc3BfZXh0X2NtZCAoZWRnZV9wb3J0LCBJT1NQX0NNRF9DTE9TRV9QT1JULCAwKTsKKworCS8vcG9ydC0+Y2xvc2UgPSBUUlVFOworCWVkZ2VfcG9ydC0+Y2xvc2VQZW5kaW5nID0gRkFMU0U7CisJZWRnZV9wb3J0LT5vcGVuID0gRkFMU0U7CisJZWRnZV9wb3J0LT5vcGVuUGVuZGluZyA9IEZBTFNFOworCisJaWYgKGVkZ2VfcG9ydC0+d3JpdGVfdXJiKSB7CisJCXVzYl9raWxsX3VyYihlZGdlX3BvcnQtPndyaXRlX3VyYik7CisJfQorCisJaWYgKGVkZ2VfcG9ydC0+d3JpdGVfdXJiKSB7CisJCS8qIGlmIHRoaXMgdXJiIGhhZCBhIHRyYW5zZmVyIGJ1ZmZlciBhbHJlYWR5IChvbGQgdHJhbnNmZXIpIGZyZWUgaXQgKi8KKwkJaWYgKGVkZ2VfcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIgIT0gTlVMTCkgeworCQkJa2ZyZWUoZWRnZV9wb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCX0KKwkJdXNiX2ZyZWVfdXJiICAgKGVkZ2VfcG9ydC0+d3JpdGVfdXJiKTsKKwkJZWRnZV9wb3J0LT53cml0ZV91cmIgPSBOVUxMOworCX0KKwlpZiAoZWRnZV9wb3J0LT50eGZpZm8uZmlmbykgeworCQlrZnJlZShlZGdlX3BvcnQtPnR4Zmlmby5maWZvKTsKKwkJZWRnZV9wb3J0LT50eGZpZm8uZmlmbyA9IE5VTEw7CisJfQorCisJZGJnKCIlcyBleGl0ZWQiLCBfX0ZVTkNUSU9OX18pOworfSAgIAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNlcmlhbFdyaXRlCisgKgl0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdHR5IGRyaXZlciB3aGVuIGRhdGEgc2hvdWxkIGJlIHdyaXR0ZW4gdG8KKyAqCXRoZSBwb3J0LgorICoJSWYgc3VjY2Vzc2Z1bCwgd2UgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiwgb3RoZXJ3aXNlIHdlIHJldHVybgorICoJYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGVkZ2Vfd3JpdGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCBUeEZpZm8gKmZpZm87CisJaW50IGNvcHlTaXplOworCWludCBieXRlc2xlZnQ7CisJaW50IGZpcnN0aGFsZjsKKwlpbnQgc2Vjb25kaGFsZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoZWRnZV9wb3J0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJLy8gZ2V0IGEgcG9pbnRlciB0byB0aGUgVHggZmlmbworCWZpZm8gPSAmZWRnZV9wb3J0LT50eGZpZm87CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CisKKwkvLyBjYWxjdWxhdGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHB1dCBpbiBmaWZvCisJY29weVNpemUgPSBtaW4gKCh1bnNpZ25lZCBpbnQpY291bnQsIChlZGdlX3BvcnQtPnR4Q3JlZGl0cyAtIGZpZm8tPmNvdW50KSk7CisKKwlkYmcoIiVzKCVkKSBvZiAlZCBieXRlKHMpIEZpZm8gcm9vbSAgJWQgLS0gd2lsbCBjb3B5ICVkIGJ5dGVzIiwgX19GVU5DVElPTl9fLCAKKwkgICAgcG9ydC0+bnVtYmVyLCBjb3VudCwgZWRnZV9wb3J0LT50eENyZWRpdHMgLSBmaWZvLT5jb3VudCwgY29weVNpemUpOworCisJLyogY2F0Y2ggd3JpdGVzIG9mIDAgYnl0ZXMgd2hpY2ggdGhlIHR0eSBkcml2ZXIgbGlrZXMgdG8gZ2l2ZSB1cywgYW5kIHdoZW4gdHhDcmVkaXRzIGlzIGVtcHR5ICovCisJaWYgKGNvcHlTaXplID09IDApIHsKKwkJZGJnKCIlcyAtIGNvcHlTaXplID0gWmVybyIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZmluaXNoX3dyaXRlOworCX0KKworCS8vIHF1ZXVlIHRoZSBkYXRhCQorCS8vIHNpbmNlIHdlIGNhbiBuZXZlciBvdmVyZmxvdyB0aGUgYnVmZmVyIHdlIGRvIG5vdCBoYXZlIHRvIGNoZWNrIGZvciBmdWxsIGNvbmRpdGlvbgorCisJLy8gdGhlIGNvcHkgaXMgZG9uZSBpcyB0d28gcGFydHMgLS0gZmlyc3QgZmlsbCB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIKKwkvLyB0aGVuIGNvcHkgdGhlIHJlc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgCisKKwlieXRlc2xlZnQgPSBmaWZvLT5zaXplIC0gZmlmby0+aGVhZDsKKwlmaXJzdGhhbGYgPSBtaW4gKGJ5dGVzbGVmdCwgY29weVNpemUpOworCWRiZygiJXMgLSBjb3B5ICVkIGJ5dGVzIG9mICVkIGludG8gZmlmbyAiLCBfX0ZVTkNUSU9OX18sIGZpcnN0aGFsZiwgYnl0ZXNsZWZ0KTsKKworCS8qIG5vdyBjb3B5IG91ciBkYXRhICovCisJbWVtY3B5KCZmaWZvLT5maWZvW2ZpZm8tPmhlYWRdLCBkYXRhLCBmaXJzdGhhbGYpOworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBmaXJzdGhhbGYsICZmaWZvLT5maWZvW2ZpZm8tPmhlYWRdKTsKKworCS8vIHVwZGF0ZSB0aGUgaW5kZXggYW5kIHNpemUKKwlmaWZvLT5oZWFkICArPSBmaXJzdGhhbGY7CisJZmlmby0+Y291bnQgKz0gZmlyc3RoYWxmOworCisJLy8gd3JhcCB0aGUgaW5kZXgKKwlpZiAoZmlmby0+aGVhZCA9PSBmaWZvLT5zaXplKSB7CisJCWZpZm8tPmhlYWQgPSAwOworCX0KKworCXNlY29uZGhhbGYgPSBjb3B5U2l6ZS1maXJzdGhhbGY7CisKKwlpZiAoc2Vjb25kaGFsZikgeworCQlkYmcoIiVzIC0gY29weSByZXN0IG9mIGRhdGEgJWQiLCBfX0ZVTkNUSU9OX18sIHNlY29uZGhhbGYpOworCQltZW1jcHkoJmZpZm8tPmZpZm9bZmlmby0+aGVhZF0sICZkYXRhW2ZpcnN0aGFsZl0sIHNlY29uZGhhbGYpOworCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgc2Vjb25kaGFsZiwgJmZpZm8tPmZpZm9bZmlmby0+aGVhZF0pOworCQkvLyB1cGRhdGUgdGhlIGluZGV4IGFuZCBzaXplCisJCWZpZm8tPmNvdW50ICs9IHNlY29uZGhhbGY7CisJCWZpZm8tPmhlYWQgICs9IHNlY29uZGhhbGY7CisJCS8vIE5vIG5lZWQgdG8gY2hlY2sgZm9yIHdyYXAgc2luY2Ugd2UgY2FuIG5vdCBnZXQgdG8gZW5kIG9mIGZpZm8gaW4gdGhpcyBwYXJ0CisJfQorCitmaW5pc2hfd3JpdGU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CisKKwlzZW5kX21vcmVfcG9ydF9kYXRhKChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICopdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpLCBlZGdlX3BvcnQpOworCisJZGJnKCIlcyB3cm90ZSAlZCBieXRlKHMpIFR4Q3JlZGl0cyAlZCwgRmlmbyAlZCIsIF9fRlVOQ1RJT05fXywgY29weVNpemUsIGVkZ2VfcG9ydC0+dHhDcmVkaXRzLCBmaWZvLT5jb3VudCk7CisKKwlyZXR1cm4gY29weVNpemU7ICAgCit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHNlbmRfbW9yZV9wb3J0X2RhdGEoKQorICoKKyAqCVRoaXMgcm91dGluZSBhdHRlbXB0cyB0byB3cml0ZSBhZGRpdGlvbmFsIFVBUlQgdHJhbnNtaXQgZGF0YQorICoJdG8gYSBwb3J0IG92ZXIgdGhlIFVTQiBidWxrIHBpcGUuIEl0IGlzIGNhbGxlZCAoMSkgd2hlbiBuZXcKKyAqCWRhdGEgaGFzIGJlZW4gd3JpdHRlbiB0byBhIHBvcnQncyBUeEJ1ZmZlciBmcm9tIGhpZ2hlciBsYXllcnMKKyAqCSgyKSB3aGVuIHRoZSBwZXJpcGhlcmFsIHNlbmRzIHVzIGFkZGl0aW9uYWwgVHhDcmVkaXRzIGluZGljYXRpbmcKKyAqCXRoYXQgaXQgY2FuIGFjY2VwdCBtb3JlCVR4IGRhdGEgZm9yIGEgZ2l2ZW4gcG9ydDsgYW5kICgzKSB3aGVuCisgKglhIGJ1bGsgd3JpdGUgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSBhbmQgd2Ugd2FudCB0byBzZWUgaWYgd2UKKyAqCWNhbiB0cmFuc21pdCBtb3JlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBzZW5kX21vcmVfcG9ydF9kYXRhKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsLCBzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0KQoreworCXN0cnVjdCBUeEZpZm8JKmZpZm8gPSAmZWRnZV9wb3J0LT50eGZpZm87CisJc3RydWN0IHVyYgkqdXJiOworCXVuc2lnbmVkIGNoYXIJKmJ1ZmZlcjsKKwlpbnQJCXN0YXR1czsKKwlpbnQJCWNvdW50OworCWludAkJYnl0ZXNsZWZ0OworCWludAkJZmlyc3RoYWxmOworCWludAkJc2Vjb25kaGFsZjsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCisJZGJnKCIlcyglZCkiLCBfX0ZVTkNUSU9OX18sIGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKworCWlmIChlZGdlX3BvcnQtPndyaXRlX2luX3Byb2dyZXNzIHx8CisJICAgICFlZGdlX3BvcnQtPm9wZW4gICAgICAgICAgICAgfHwKKwkgICAgKGZpZm8tPmNvdW50ID09IDApKSB7CisJCWRiZygiJXMoJWQpIEVYSVQgLSBmaWZvICVkLCBQZW5kaW5nV3JpdGUgPSAlZCIsIF9fRlVOQ1RJT05fXywgZWRnZV9wb3J0LT5wb3J0LT5udW1iZXIsIGZpZm8tPmNvdW50LCBlZGdlX3BvcnQtPndyaXRlX2luX3Byb2dyZXNzKTsKKwkJZ290byBleGl0X3NlbmQ7CisJfQorCisJLy8gc2luY2UgdGhlIGFtb3VudCBvZiBkYXRhIGluIHRoZSBmaWZvIHdpbGwgYWx3YXlzIGZpdCBpbnRvIHRoZQorCS8vIGVkZ2Vwb3J0IGJ1ZmZlciB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayB0aGUgd3JpdGUgbGVuZ3RoCisKKwkvLwlEbyB3ZSBoYXZlIGVub3VnaCBjcmVkaXRzIGZvciB0aGlzIHBvcnQgdG8gbWFrZSBpdCB3b3J0aHdoaWxlCisJLy8JdG8gYm90aGVyIHF1ZXVlaW5nIGEgd3JpdGUuIElmIGl0J3MgdG9vIHNtYWxsLCBzYXkgYSBmZXcgYnl0ZXMsCisJLy8JaXQncyBiZXR0ZXIgdG8gd2FpdCBmb3IgbW9yZSBjcmVkaXRzIHNvIHdlIGNhbiBkbyBhIGxhcmdlcgorCS8vCXdyaXRlLgorCWlmIChlZGdlX3BvcnQtPnR4Q3JlZGl0cyA8IEVER0VfRldfR0VUX1RYX0NSRURJVFNfU0VORF9USFJFU0hPTEQoZWRnZV9wb3J0LT5tYXhUeENyZWRpdHMsRURHRV9GV19CVUxLX01BWF9QQUNLRVRfU0laRSkpIHsKKwkJZGJnKCIlcyglZCkgTm90IGVub3VnaCBjcmVkaXQgLSBmaWZvICVkIFR4Q3JlZGl0ICVkIiwgX19GVU5DVElPTl9fLCBlZGdlX3BvcnQtPnBvcnQtPm51bWJlciwgZmlmby0+Y291bnQsIGVkZ2VfcG9ydC0+dHhDcmVkaXRzICk7CisJCWdvdG8gZXhpdF9zZW5kOworCX0KKworCS8vIGxvY2sgdGhpcyB3cml0ZQorCWVkZ2VfcG9ydC0+d3JpdGVfaW5fcHJvZ3Jlc3MgPSBUUlVFOworCisJLy8gZ2V0IGEgcG9pbnRlciB0byB0aGUgd3JpdGVfdXJiCisJdXJiID0gZWRnZV9wb3J0LT53cml0ZV91cmI7CisKKwkvKiBpZiB0aGlzIHVyYiBoYWQgYSB0cmFuc2ZlciBidWZmZXIgYWxyZWFkeSAob2xkIHRyYW5zZmVyKSBmcmVlIGl0ICovCisJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyICE9IE5VTEwpIHsKKwkJa2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IE5VTEw7CisJfQorCisJLyogYnVpbGQgdGhlIGRhdGEgaGVhZGVyIGZvciB0aGUgYnVmZmVyIGFuZCBwb3J0IHRoYXQgd2UgYXJlIGFib3V0IHRvIHNlbmQgb3V0ICovCisJY291bnQgPSBmaWZvLT5jb3VudDsKKwlidWZmZXIgPSBrbWFsbG9jIChjb3VudCsyLCBHRlBfQVRPTUlDKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpIHsKKwkJZGV2X2VycigmZWRnZV9wb3J0LT5wb3J0LT5kZXYsICIlcyAtIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLlxuIiwgX19GVU5DVElPTl9fKTsKKwkJZWRnZV9wb3J0LT53cml0ZV9pbl9wcm9ncmVzcyA9IEZBTFNFOworCQlnb3RvIGV4aXRfc2VuZDsKKwl9CisJYnVmZmVyWzBdID0gSU9TUF9CVUlMRF9EQVRBX0hEUjEgKGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyIC0gZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yLCBjb3VudCk7CisJYnVmZmVyWzFdID0gSU9TUF9CVUlMRF9EQVRBX0hEUjIgKGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyIC0gZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yLCBjb3VudCk7CisKKwkvKiBub3cgY29weSBvdXIgZGF0YSAqLworCWJ5dGVzbGVmdCA9ICBmaWZvLT5zaXplIC0gZmlmby0+dGFpbDsKKwlmaXJzdGhhbGYgPSBtaW4gKGJ5dGVzbGVmdCwgY291bnQpOworCW1lbWNweSgmYnVmZmVyWzJdLCAmZmlmby0+Zmlmb1tmaWZvLT50YWlsXSwgZmlyc3RoYWxmKTsKKwlmaWZvLT50YWlsICArPSBmaXJzdGhhbGY7CisJZmlmby0+Y291bnQgLT0gZmlyc3RoYWxmOworCWlmIChmaWZvLT50YWlsID09IGZpZm8tPnNpemUpIHsKKwkJZmlmby0+dGFpbCA9IDA7CisJfQorCisJc2Vjb25kaGFsZiA9IGNvdW50LWZpcnN0aGFsZjsKKwlpZiAoc2Vjb25kaGFsZikgeworCQltZW1jcHkoJmJ1ZmZlclsyK2ZpcnN0aGFsZl0sICZmaWZvLT5maWZvW2ZpZm8tPnRhaWxdLCBzZWNvbmRoYWxmKTsKKwkJZmlmby0+dGFpbCAgKz0gc2Vjb25kaGFsZjsKKwkJZmlmby0+Y291bnQgLT0gc2Vjb25kaGFsZjsKKwl9CisKKwlpZiAoY291bnQpCisJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGNvdW50LCAmYnVmZmVyWzJdKTsKKworCS8qIGZpbGwgdXAgdGhlIHVyYiB3aXRoIGFsbCBvZiBvdXIgZGF0YSBhbmQgc3VibWl0IGl0ICovCisJdXNiX2ZpbGxfYnVsa191cmIgKHVyYiwgZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LCAKKwkJICAgICAgIHVzYl9zbmRidWxrcGlwZShlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYsIGVkZ2Vfc2VyaWFsLT5idWxrX291dF9lbmRwb2ludCksCisJCSAgICAgICBidWZmZXIsIGNvdW50KzIsIGVkZ2VfYnVsa19vdXRfZGF0YV9jYWxsYmFjaywgZWRnZV9wb3J0KTsKKworCS8qIGRlY3JlbWVudCB0aGUgbnVtYmVyIG9mIGNyZWRpdHMgd2UgaGF2ZSBieSB0aGUgbnVtYmVyIHdlIGp1c3Qgc2VudCAqLworCWVkZ2VfcG9ydC0+dHhDcmVkaXRzIC09IGNvdW50OworCWVkZ2VfcG9ydC0+aWNvdW50LnR4ICs9IGNvdW50OworCisJdXJiLT5kZXYgPSBlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXY7CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKSB7CisJCS8qIHNvbWV0aGluZyB3ZW50IHdyb25nICovCisJCWRldl9lcnIoJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LCAiJXMgLSB1c2Jfc3VibWl0X3VyYih3cml0ZSBidWxrKSBmYWlsZWQsIHN0YXR1cyA9ICVkLCBkYXRhIGxvc3RcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJZWRnZV9wb3J0LT53cml0ZV9pbl9wcm9ncmVzcyA9IEZBTFNFOworCisJCS8qIHJldmVydCB0aGUgY3JlZGl0cyBhcyBzb21ldGhpbmcgYmFkIGhhcHBlbmVkLiAqLworCQllZGdlX3BvcnQtPnR4Q3JlZGl0cyArPSBjb3VudDsKKwkJZWRnZV9wb3J0LT5pY291bnQudHggLT0gY291bnQ7CisJfQorCWRiZygiJXMgd3JvdGUgJWQgYnl0ZShzKSBUeENyZWRpdCAlZCwgRmlmbyAlZCIsIF9fRlVOQ1RJT05fXywgY291bnQsIGVkZ2VfcG9ydC0+dHhDcmVkaXRzLCBmaWZvLT5jb3VudCk7CisKK2V4aXRfc2VuZDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGVkZ2Vfd3JpdGVfcm9vbQorICoJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHR0eSBkcml2ZXIgd2hlbiBpdCB3YW50cyB0byBrbm93IGhvdyBtYW55CisgKglieXRlcyBvZiBkYXRhIHdlIGNhbiBhY2NlcHQgZm9yIGEgc3BlY2lmaWMgcG9ydC4KKyAqCUlmIHN1Y2Nlc3NmdWwsIHdlIHJldHVybiB0aGUgYW1vdW50IG9mIHJvb20gdGhhdCB3ZSBoYXZlIGZvciB0aGlzIHBvcnQKKyAqCSh0aGUgdHhDcmVkaXRzKSwgCisgKglPdGhlcndpc2Ugd2UgcmV0dXJuIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBlZGdlX3dyaXRlX3Jvb20gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgcm9vbTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoZWRnZV9wb3J0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCWlmIChlZGdlX3BvcnQtPmNsb3NlUGVuZGluZyA9PSBUUlVFKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCFlZGdlX3BvcnQtPm9wZW4pIHsKKwkJZGJnKCIlcyAtIHBvcnQgbm90IG9wZW5lZCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8vIHRvdGFsIG9mIGJvdGggYnVmZmVycyBpcyBzdGlsbCB0eENyZWRpdAorCXNwaW5fbG9ja19pcnFzYXZlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKwlyb29tID0gZWRnZV9wb3J0LT50eENyZWRpdHMgLSBlZGdlX3BvcnQtPnR4Zmlmby5jb3VudDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19GVU5DVElPTl9fLCByb29tKTsKKwlyZXR1cm4gcm9vbTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGVkZ2VfY2hhcnNfaW5fYnVmZmVyCisgKgl0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdHR5IGRyaXZlciB3aGVuIGl0IHdhbnRzIHRvIGtub3cgaG93IG1hbnkKKyAqCWJ5dGVzIG9mIGRhdGEgd2UgY3VycmVudGx5IGhhdmUgb3V0c3RhbmRpbmcgaW4gdGhlIHBvcnQgKGRhdGEgdGhhdCBoYXMKKyAqCWJlZW4gd3JpdHRlbiwgYnV0IGhhc24ndCBtYWRlIGl0IG91dCB0aGUgcG9ydCB5ZXQpCisgKglJZiBzdWNjZXNzZnVsLCB3ZSByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBsZWZ0IHRvIGJlIHdyaXR0ZW4gaW4gdGhlIAorICoJc3lzdGVtLCAKKyAqCU90aGVyd2lzZSB3ZSByZXR1cm4gYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGVkZ2VfY2hhcnNfaW5fYnVmZmVyIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IG51bV9jaGFyczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoZWRnZV9wb3J0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCWlmIChlZGdlX3BvcnQtPmNsb3NlUGVuZGluZyA9PSBUUlVFKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghZWRnZV9wb3J0LT5vcGVuKSB7CisJCWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CisJbnVtX2NoYXJzID0gZWRnZV9wb3J0LT5tYXhUeENyZWRpdHMgLSBlZGdlX3BvcnQtPnR4Q3JlZGl0cyArIGVkZ2VfcG9ydC0+dHhmaWZvLmNvdW50OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCWlmIChudW1fY2hhcnMpIHsKKwkJZGJnKCIlcyhwb3J0ICVkKSAtIHJldHVybnMgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgbnVtX2NoYXJzKTsKKwl9CisKKwlyZXR1cm4gbnVtX2NoYXJzOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU2VyaWFsVGhyb3R0bGUKKyAqCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0dHkgZHJpdmVyIHdoZW4gaXQgd2FudHMgdG8gc3RvcCB0aGUgZGF0YQorICoJYmVpbmcgcmVhZCBmcm9tIHRoZSBwb3J0LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgZWRnZV90aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKGVkZ2VfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAoIWVkZ2VfcG9ydC0+b3BlbikgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCXR0eSA9IHBvcnQtPnR0eTsKKwlpZiAoIXR0eSkgeworCQlkYmcgKCIlcyAtIG5vIHR0eSBhdmFpbGFibGUiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBYT04vWE9GRiwgc2VuZCB0aGUgc3RvcCBjaGFyYWN0ZXIgKi8KKwlpZiAoSV9JWE9GRih0dHkpKSB7CisJCXVuc2lnbmVkIGNoYXIgc3RvcF9jaGFyID0gU1RPUF9DSEFSKHR0eSk7CisJCXN0YXR1cyA9IGVkZ2Vfd3JpdGUgKHBvcnQsICZzdG9wX2NoYXIsIDEpOworCQlpZiAoc3RhdHVzIDw9IDApIHsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgUlRTL0NUUywgdG9nZ2xlIHRoYXQgbGluZSAqLworCWlmICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSB7CisJCWVkZ2VfcG9ydC0+c2hhZG93TUNSICY9IH5NQ1JfUlRTOworCQlzdGF0dXMgPSBzZW5kX2NtZF93cml0ZV91YXJ0X3JlZ2lzdGVyKGVkZ2VfcG9ydCwgTUNSLCBlZGdlX3BvcnQtPnNoYWRvd01DUik7CisJCWlmIChzdGF0dXMgIT0gMCkgeworCQkJcmV0dXJuOworCQl9CisJfQorCisJcmV0dXJuOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZWRnZV91bnRocm90dGxlCisgKgl0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdHR5IGRyaXZlciB3aGVuIGl0IHdhbnRzIHRvIHJlc3VtZSB0aGUgZGF0YQorICoJYmVpbmcgcmVhZCBmcm9tIHRoZSBwb3J0IChjYWxsZWQgYWZ0ZXIgU2VyaWFsVGhyb3R0bGUgaXMgY2FsbGVkKQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgZWRnZV91bnRocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlpbnQgc3RhdHVzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoZWRnZV9wb3J0ID09IE5VTEwpCisJCXJldHVybjsKKworCWlmICghZWRnZV9wb3J0LT5vcGVuKSB7CisJCWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICghdHR5KSB7CisJCWRiZyAoIiVzIC0gbm8gdHR5IGF2YWlsYWJsZSIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFhPTi9YT0ZGLCBzZW5kIHRoZSBzdGFydCBjaGFyYWN0ZXIgKi8KKwlpZiAoSV9JWE9GRih0dHkpKSB7CisJCXVuc2lnbmVkIGNoYXIgc3RhcnRfY2hhciA9IFNUQVJUX0NIQVIodHR5KTsKKwkJc3RhdHVzID0gZWRnZV93cml0ZSAocG9ydCwgJnN0YXJ0X2NoYXIsIDEpOworCQlpZiAoc3RhdHVzIDw9IDApIHsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgUlRTL0NUUywgdG9nZ2xlIHRoYXQgbGluZSAqLworCWlmICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSB7CisJCWVkZ2VfcG9ydC0+c2hhZG93TUNSIHw9IE1DUl9SVFM7CisJCXN0YXR1cyA9IHNlbmRfY21kX3dyaXRlX3VhcnRfcmVnaXN0ZXIoZWRnZV9wb3J0LCBNQ1IsIGVkZ2VfcG9ydC0+c2hhZG93TUNSKTsKKwkJaWYgKHN0YXR1cyAhPSAwKSB7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlyZXR1cm47Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTZXJpYWxTZXRUZXJtaW9zCisgKgl0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdHR5IGRyaXZlciB3aGVuIGl0IHdhbnRzIHRvIGNoYW5nZSB0aGUgdGVybWlvcyBzdHJ1Y3R1cmUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGVkZ2Vfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CisJdW5zaWduZWQgaW50IGNmbGFnOworCisJaWYgKCFwb3J0LT50dHkgfHwgIXBvcnQtPnR0eS0+dGVybWlvcykgeworCQlkYmcgKCIlcyAtIG5vIHR0eSBvciB0ZXJtaW9zIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCS8qIGNoZWNrIHRoYXQgdGhleSByZWFsbHkgd2FudCB1cyB0byBjaGFuZ2Ugc29tZXRoaW5nICovCisJaWYgKG9sZF90ZXJtaW9zKSB7CisJCWlmIChjZmxhZyA9PSBvbGRfdGVybWlvcy0+Y19jZmxhZyAmJgorCQkgICAgdHR5LT50ZXJtaW9zLT5jX2lmbGFnID09IG9sZF90ZXJtaW9zLT5jX2lmbGFnKSB7CisJCQlkYmcoIiVzIC0gbm90aGluZyB0byBjaGFuZ2UiLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuOworCQl9CisJfQorCisJZGJnKCIlcyAtIGNsZmFnICUwOHggaWZsYWcgJTA4eCIsIF9fRlVOQ1RJT05fXywgCisJICAgIHR0eS0+dGVybWlvcy0+Y19jZmxhZywgdHR5LT50ZXJtaW9zLT5jX2lmbGFnKTsKKwlpZiAob2xkX3Rlcm1pb3MpIHsKKwkJZGJnKCIlcyAtIG9sZCBjbGZhZyAlMDh4IG9sZCBpZmxhZyAlMDh4IiwgX19GVU5DVElPTl9fLAorCQkgICAgb2xkX3Rlcm1pb3MtPmNfY2ZsYWcsIG9sZF90ZXJtaW9zLT5jX2lmbGFnKTsKKwl9CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKCFlZGdlX3BvcnQtPm9wZW4pIHsKKwkJZGJnKCIlcyAtIHBvcnQgbm90IG9wZW5lZCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBjaGFuZ2UgdGhlIHBvcnQgc2V0dGluZ3MgdG8gdGhlIG5ldyBvbmVzIHNwZWNpZmllZCAqLworCWNoYW5nZV9wb3J0X3NldHRpbmdzIChlZGdlX3BvcnQsIG9sZF90ZXJtaW9zKTsKKworCXJldHVybjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGdldF9sc3JfaW5mbyAtIGdldCBsaW5lIHN0YXR1cyByZWdpc3RlciBpbmZvCisgKgorICogUHVycG9zZTogTGV0IHVzZXIgY2FsbCBpb2N0bCgpIHRvIGdldCBpbmZvIHdoZW4gdGhlIFVBUlQgcGh5c2ljYWxseQorICogCSAgICBpcyBlbXB0aWVkLiAgT24gYnVzIHR5cGVzIGxpa2UgUlM0ODUsIHRoZSB0cmFuc21pdHRlciBtdXN0CisgKiAJICAgIHJlbGVhc2UgdGhlIGJ1cyBhZnRlciB0cmFuc21pdHRpbmcuIFRoaXMgbXVzdCBiZSBkb25lIHdoZW4KKyAqIAkgICAgdGhlIHRyYW5zbWl0IHNoaWZ0IHJlZ2lzdGVyIGlzIGVtcHR5LCBub3QgYmUgZG9uZSB3aGVuIHRoZQorICogCSAgICB0cmFuc21pdCBob2xkaW5nIHJlZ2lzdGVyIGlzIGVtcHR5LiAgVGhpcyBmdW5jdGlvbmFsaXR5CisgKiAJICAgIGFsbG93cyBhbiBSUzQ4NSBkcml2ZXIgdG8gYmUgd3JpdHRlbiBpbiB1c2VyIHNwYWNlLiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZ2V0X2xzcl9pbmZvKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIHVuc2lnbmVkIGludCBfX3VzZXIgKnZhbHVlKQoreworCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CisJaWYgKGVkZ2VfcG9ydC0+bWF4VHhDcmVkaXRzID09IGVkZ2VfcG9ydC0+dHhDcmVkaXRzICYmCisJICAgIGVkZ2VfcG9ydC0+dHhmaWZvLmNvdW50ID09IDApIHsKKwkJZGJnKCIlcyAtLSBFbXB0eSIsIF9fRlVOQ1RJT05fXyk7CisJCXJlc3VsdCA9IFRJT0NTRVJfVEVNVDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CisKKwlpZiAoY29weV90b191c2VyKHZhbHVlLCAmcmVzdWx0LCBzaXplb2YoaW50KSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9udW1iZXJfYnl0ZXNfYXZhaWwoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgdW5zaWduZWQgaW50IF9fdXNlciAqdmFsdWUpCit7CisJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGVkZ2VfcG9ydC0+cG9ydC0+dHR5OworCisJaWYgKCF0dHkpCisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisKKwlyZXN1bHQgPSB0dHktPnJlYWRfY250OworCisJZGJnKCIlcyglZCkgPSAlZCIsIF9fRlVOQ1RJT05fXywgIGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyLCByZXN1bHQpOworCWlmIChjb3B5X3RvX3VzZXIodmFsdWUsICZyZXN1bHQsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJLy9yZXR1cm4gMDsKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCitzdGF0aWMgaW50IGVkZ2VfdGlvY21zZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBpbnQgbWNyOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwltY3IgPSBlZGdlX3BvcnQtPnNoYWRvd01DUjsKKwlpZiAoc2V0ICYgVElPQ01fUlRTKQorCQltY3IgfD0gTUNSX1JUUzsKKwlpZiAoc2V0ICYgVElPQ01fRFRSKQorCQltY3IgfD0gTUNSX0RUUjsKKwlpZiAoc2V0ICYgVElPQ01fTE9PUCkKKwkJbWNyIHw9IE1DUl9MT09QQkFDSzsKKworCWlmIChjbGVhciAmIFRJT0NNX1JUUykKKwkJbWNyICY9IH5NQ1JfUlRTOworCWlmIChjbGVhciAmIFRJT0NNX0RUUikKKwkJbWNyICY9IH5NQ1JfRFRSOworCWlmIChjbGVhciAmIFRJT0NNX0xPT1ApCisJCW1jciAmPSB+TUNSX0xPT1BCQUNLOworCisJZWRnZV9wb3J0LT5zaGFkb3dNQ1IgPSBtY3I7CisKKwlzZW5kX2NtZF93cml0ZV91YXJ0X3JlZ2lzdGVyKGVkZ2VfcG9ydCwgTUNSLCBlZGdlX3BvcnQtPnNoYWRvd01DUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlZGdlX3Rpb2NtZ2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CisJdW5zaWduZWQgaW50IG1zcjsKKwl1bnNpZ25lZCBpbnQgbWNyOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwltc3IgPSBlZGdlX3BvcnQtPnNoYWRvd01TUjsKKwltY3IgPSBlZGdlX3BvcnQtPnNoYWRvd01DUjsKKwlyZXN1bHQgPSAoKG1jciAmIE1DUl9EVFIpCT8gVElPQ01fRFRSOiAwKQkgIC8qIDB4MDAyICovCisJCSAgfCAoKG1jciAmIE1DUl9SVFMpCT8gVElPQ01fUlRTOiAwKSAgIC8qIDB4MDA0ICovCisJCSAgfCAoKG1zciAmIEVER0VQT1JUX01TUl9DVFMpCT8gVElPQ01fQ1RTOiAwKSAgIC8qIDB4MDIwICovCisJCSAgfCAoKG1zciAmIEVER0VQT1JUX01TUl9DRCkJPyBUSU9DTV9DQVI6IDApICAgLyogMHgwNDAgKi8KKwkJICB8ICgobXNyICYgRURHRVBPUlRfTVNSX1JJKQk/IFRJT0NNX1JJOiAgMCkgICAvKiAweDA4MCAqLworCQkgIHwgKChtc3IgJiBFREdFUE9SVF9NU1JfRFNSKQk/IFRJT0NNX0RTUjogMCk7ICAvKiAweDEwMCAqLworCisKKwlkYmcoIiVzIC0tICV4IiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBnZXRfc2VyaWFsX2luZm8oc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpyZXRpbmZvKQoreworCXN0cnVjdCBzZXJpYWxfc3RydWN0IHRtcDsKKworCWlmICghcmV0aW5mbykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwltZW1zZXQoJnRtcCwgMCwgc2l6ZW9mKHRtcCkpOworCisJdG1wLnR5cGUJCT0gUE9SVF8xNjU1MEE7CisJdG1wLmxpbmUJCT0gZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOworCXRtcC5wb3J0CQk9IGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyOworCXRtcC5pcnEJCQk9IDA7CisJdG1wLmZsYWdzCQk9IEFTWU5DX1NLSVBfVEVTVCB8IEFTWU5DX0FVVE9fSVJROworCXRtcC54bWl0X2ZpZm9fc2l6ZQk9IGVkZ2VfcG9ydC0+bWF4VHhDcmVkaXRzOworCXRtcC5iYXVkX2Jhc2UJCT0gOTYwMDsKKwl0bXAuY2xvc2VfZGVsYXkJCT0gNSpIWjsKKwl0bXAuY2xvc2luZ193YWl0CT0gMzAqSFo7CisvLwl0bXAuY3VzdG9tX2Rpdmlzb3IJPSBzdGF0ZS0+Y3VzdG9tX2Rpdmlzb3I7CisvLwl0bXAuaHViNgkJPSBzdGF0ZS0+aHViNjsKKy8vCXRtcC5pb190eXBlCQk9IHN0YXRlLT5pb190eXBlOworCisJaWYgKGNvcHlfdG9fdXNlcihyZXRpbmZvLCAmdG1wLCBzaXplb2YoKnJldGluZm8pKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNlcmlhbElvY3RsCisgKgl0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgYW55IGlvY3RsIGNhbGxzIHRvIHRoZSBkcml2ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZWRnZV9pb2N0bCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCURFRklORV9XQUlUKHdhaXQpOworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IGFzeW5jX2ljb3VudCBjbm93OworCXN0cnVjdCBhc3luY19pY291bnQgY3ByZXY7CisJc3RydWN0IHNlcmlhbF9pY291bnRlcl9zdHJ1Y3QgaWNvdW50OworCisJZGJnKCIlcyAtIHBvcnQgJWQsIGNtZCA9IDB4JXgiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY21kKTsKKworCXN3aXRjaCAoY21kKSB7CisJCS8vIHJldHVybiBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlCisJCWNhc2UgVElPQ0lOUToKKwkJCWRiZygiJXMgKCVkKSBUSU9DSU5RIiwgX19GVU5DVElPTl9fLCAgcG9ydC0+bnVtYmVyKTsKKwkJCXJldHVybiBnZXRfbnVtYmVyX2J5dGVzX2F2YWlsKGVkZ2VfcG9ydCwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikgYXJnKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVElPQ1NFUkdFVExTUjoKKwkJCWRiZygiJXMgKCVkKSBUSU9DU0VSR0VUTFNSIiwgX19GVU5DVElPTl9fLCAgcG9ydC0+bnVtYmVyKTsKKwkJCXJldHVybiBnZXRfbHNyX2luZm8oZWRnZV9wb3J0LCAodW5zaWduZWQgaW50IF9fdXNlciAqKSBhcmcpOworCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBUSU9DR1NFUklBTDoKKwkJCWRiZygiJXMgKCVkKSBUSU9DR1NFUklBTCIsIF9fRlVOQ1RJT05fXywgIHBvcnQtPm51bWJlcik7CisJCQlyZXR1cm4gZ2V0X3NlcmlhbF9pbmZvKGVkZ2VfcG9ydCwgKHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqKSBhcmcpOworCisJCWNhc2UgVElPQ1NTRVJJQUw6CisJCQlkYmcoIiVzICglZCkgVElPQ1NTRVJJQUwiLCBfX0ZVTkNUSU9OX18sICBwb3J0LT5udW1iZXIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUSU9DTUlXQUlUOgorCQkJZGJnKCIlcyAoJWQpIFRJT0NNSVdBSVQiLCBfX0ZVTkNUSU9OX18sICBwb3J0LT5udW1iZXIpOworCQkJY3ByZXYgPSBlZGdlX3BvcnQtPmljb3VudDsKKwkJCXdoaWxlICgxKSB7CisJCQkJcHJlcGFyZV90b193YWl0KCZlZGdlX3BvcnQtPmRlbHRhX21zcl93YWl0LCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCQlzY2hlZHVsZSgpOworCQkJCWZpbmlzaF93YWl0KCZlZGdlX3BvcnQtPmRlbHRhX21zcl93YWl0LCAmd2FpdCk7CisJCQkJLyogc2VlIGlmIGEgc2lnbmFsIGRpZCBpdCAqLworCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJCQljbm93ID0gZWRnZV9wb3J0LT5pY291bnQ7CisJCQkJaWYgKGNub3cucm5nID09IGNwcmV2LnJuZyAmJiBjbm93LmRzciA9PSBjcHJldi5kc3IgJiYKKwkJCQkgICAgY25vdy5kY2QgPT0gY3ByZXYuZGNkICYmIGNub3cuY3RzID09IGNwcmV2LmN0cykKKwkJCQkJcmV0dXJuIC1FSU87IC8qIG5vIGNoYW5nZSA9PiBlcnJvciAqLworCQkJCWlmICgoKGFyZyAmIFRJT0NNX1JORykgJiYgKGNub3cucm5nICE9IGNwcmV2LnJuZykpIHx8CisJCQkJICAgICgoYXJnICYgVElPQ01fRFNSKSAmJiAoY25vdy5kc3IgIT0gY3ByZXYuZHNyKSkgfHwKKwkJCQkgICAgKChhcmcgJiBUSU9DTV9DRCkgICYmIChjbm93LmRjZCAhPSBjcHJldi5kY2QpKSB8fAorCQkJCSAgICAoKGFyZyAmIFRJT0NNX0NUUykgJiYgKGNub3cuY3RzICE9IGNwcmV2LmN0cykpICkgeworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQkJY3ByZXYgPSBjbm93OworCQkJfQorCQkJLyogTk9UUkVBQ0hFRCAqLworCQkJYnJlYWs7CisKKwkJY2FzZSBUSU9DR0lDT1VOVDoKKwkJCWNub3cgPSBlZGdlX3BvcnQtPmljb3VudDsKKwkJCW1lbXNldCgmaWNvdW50LCAwLCBzaXplb2YoaWNvdW50KSk7CisJCQlpY291bnQuY3RzID0gY25vdy5jdHM7CisJCQlpY291bnQuZHNyID0gY25vdy5kc3I7CisJCQlpY291bnQucm5nID0gY25vdy5ybmc7CisJCQlpY291bnQuZGNkID0gY25vdy5kY2Q7CisJCQlpY291bnQucnggPSBjbm93LnJ4OworCQkJaWNvdW50LnR4ID0gY25vdy50eDsKKwkJCWljb3VudC5mcmFtZSA9IGNub3cuZnJhbWU7CisJCQlpY291bnQub3ZlcnJ1biA9IGNub3cub3ZlcnJ1bjsKKwkJCWljb3VudC5wYXJpdHkgPSBjbm93LnBhcml0eTsKKwkJCWljb3VudC5icmsgPSBjbm93LmJyazsKKwkJCWljb3VudC5idWZfb3ZlcnJ1biA9IGNub3cuYnVmX292ZXJydW47CisKKwkJCWRiZygiJXMgKCVkKSBUSU9DR0lDT1VOVCBSWD0lZCwgVFg9JWQiLCBfX0ZVTkNUSU9OX18sICBwb3J0LT5udW1iZXIsIGljb3VudC5yeCwgaWNvdW50LnR4ICk7CisJCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmljb3VudCwgc2l6ZW9mKGljb3VudCkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNlcmlhbEJyZWFrCisgKgl0aGlzIGZ1bmN0aW9uIHNlbmRzIGEgYnJlYWsgdG8gdGhlIHBvcnQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGVkZ2VfYnJlYWsgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCBzdGF0dXM7CisKKwkvKiBmbHVzaCBhbmQgY2hhc2UgKi8KKwllZGdlX3BvcnQtPmNoYXNlUmVzcG9uc2VQZW5kaW5nID0gVFJVRTsKKworCWRiZygiJXMgLSBTZW5kaW5nIElPU1BfQ01EX0NIQVNFX1BPUlQiLCBfX0ZVTkNUSU9OX18pOworCXN0YXR1cyA9IHNlbmRfaW9zcF9leHRfY21kIChlZGdlX3BvcnQsIElPU1BfQ01EX0NIQVNFX1BPUlQsIDApOworCWlmIChzdGF0dXMgPT0gMCkgeworCQkvLyBibG9jayB1bnRpbCBjaGFzZSBmaW5pc2hlZAorCQlibG9ja191bnRpbF9jaGFzZV9yZXNwb25zZShlZGdlX3BvcnQpOworCX0gZWxzZSB7CisJCWVkZ2VfcG9ydC0+Y2hhc2VSZXNwb25zZVBlbmRpbmcgPSBGQUxTRTsKKwl9CisKKwlpZiAoYnJlYWtfc3RhdGUgPT0gLTEpIHsKKwkJZGJnKCIlcyAtIFNlbmRpbmcgSU9TUF9DTURfU0VUX0JSRUFLIiwgX19GVU5DVElPTl9fKTsKKwkJc3RhdHVzID0gc2VuZF9pb3NwX2V4dF9jbWQgKGVkZ2VfcG9ydCwgSU9TUF9DTURfU0VUX0JSRUFLLCAwKTsKKwl9IGVsc2UgeworCQlkYmcoIiVzIC0gU2VuZGluZyBJT1NQX0NNRF9DTEVBUl9CUkVBSyIsIF9fRlVOQ1RJT05fXyk7CisJCXN0YXR1cyA9IHNlbmRfaW9zcF9leHRfY21kIChlZGdlX3BvcnQsIElPU1BfQ01EX0NMRUFSX0JSRUFLLCAwKTsKKwl9CisJaWYgKHN0YXR1cykgeworCQlkYmcoIiVzIC0gZXJyb3Igc2VuZGluZyBicmVhayBzZXQvY2xlYXIgY29tbWFuZC4iLCBfX0ZVTkNUSU9OX18pOworCX0KKworCXJldHVybjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHByb2Nlc3NfcmN2ZF9kYXRhCisgKgl0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGRhdGEgcmVjZWl2ZWQgb24gdGhlIGJ1bGsgaW4gcGlwZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIHByb2Nlc3NfcmN2ZF9kYXRhIChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCwgdW5zaWduZWQgY2hhciAqIGJ1ZmZlciwgX191MTYgYnVmZmVyTGVuZ3RoKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCV9fdTE2IGxhc3RCdWZmZXJMZW5ndGg7CisJX191MTYgcnhMZW47CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWxhc3RCdWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGggKyAxOworCisJd2hpbGUgKGJ1ZmZlckxlbmd0aCA+IDApIHsKKwkJLyogZmFpbHNhZmUgaW5jYXNlIHdlIGdldCBhIG1lc3NhZ2UgdGhhdCB3ZSBkb24ndCB1bmRlcnN0YW5kICovCisJCWlmIChsYXN0QnVmZmVyTGVuZ3RoID09IGJ1ZmZlckxlbmd0aCkgeworCQkJZGJnKCIlcyAtIHN0dWNrIGluIGxvb3AsIGV4aXRpbmcgaXQuIiwgX19GVU5DVElPTl9fKTsKKwkJCWJyZWFrOworCQl9CisJCWxhc3RCdWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7CisKKwkJc3dpdGNoIChlZGdlX3NlcmlhbC0+cnhTdGF0ZSkgeworCQkJY2FzZSBFWFBFQ1RfSERSMToKKwkJCQllZGdlX3NlcmlhbC0+cnhIZWFkZXIxID0gKmJ1ZmZlcjsKKwkJCQkrK2J1ZmZlcjsKKwkJCQktLWJ1ZmZlckxlbmd0aDsKKworCQkJCWlmIChidWZmZXJMZW5ndGggPT0gMCkgeworCQkJCQllZGdlX3NlcmlhbC0+cnhTdGF0ZSA9IEVYUEVDVF9IRFIyOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLyogb3RoZXJ3aXNlLCBkcm9wIG9uIHRocm91Z2ggKi8KKworCQkJY2FzZSBFWFBFQ1RfSERSMjoKKwkJCQllZGdlX3NlcmlhbC0+cnhIZWFkZXIyID0gKmJ1ZmZlcjsKKwkJCQkrK2J1ZmZlcjsKKwkJCQktLWJ1ZmZlckxlbmd0aDsKKworCQkJCWRiZygiJXMgLSBIZHIxPSUwMlggSGRyMj0lMDJYIiwgX19GVU5DVElPTl9fLCBlZGdlX3NlcmlhbC0+cnhIZWFkZXIxLCBlZGdlX3NlcmlhbC0+cnhIZWFkZXIyKTsKKworCQkJCS8vIFByb2Nlc3MgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyBoZWFkZXIgaXMKKwkJCQkvLyBkYXRhIG9yIHN0YXR1cworCisJCQkJaWYgKElTX0NNRF9TVEFUX0hEUihlZGdlX3NlcmlhbC0+cnhIZWFkZXIxKSkgeworCQkJCQkvLyBEZWNvZGUgdGhpcyBzdGF0dXMgaGVhZGVyIGFuZCBnb3RvIEVYUEVDVF9IRFIxIChpZiB3ZQorCQkJCQkvLyBjYW4gcHJvY2VzcyB0aGUgc3RhdHVzIHdpdGggb25seSAyIGJ5dGVzKSwgb3IgZ290bworCQkJCQkvLyBFWFBFQ1RfSERSMyB0byBnZXQgdGhlIHRoaXJkIGJ5dGUuCisKKwkJCQkJZWRnZV9zZXJpYWwtPnJ4UG9ydCAgICAgICA9IElPU1BfR0VUX0hEUl9QT1JUKGVkZ2Vfc2VyaWFsLT5yeEhlYWRlcjEpOworCQkJCQllZGdlX3NlcmlhbC0+cnhTdGF0dXNDb2RlID0gSU9TUF9HRVRfU1RBVFVTX0NPREUoZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMSk7CisKKwkJCQkJaWYgKCFJT1NQX1NUQVRVU19JU18yQllURShlZGdlX3NlcmlhbC0+cnhTdGF0dXNDb2RlKSkgeworCQkJCQkJLy8gVGhpcyBzdGF0dXMgbmVlZHMgYWRkaXRpb25hbCBieXRlcy4gU2F2ZSB3aGF0IHdlIGhhdmUKKwkJCQkJCS8vIGFuZCB0aGVuIHdhaXQgZm9yIG1vcmUgZGF0YS4KKwkJCQkJCWVkZ2Vfc2VyaWFsLT5yeFN0YXR1c1BhcmFtID0gZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMjsKKworCQkJCQkJZWRnZV9zZXJpYWwtPnJ4U3RhdGUgPSBFWFBFQ1RfSERSMzsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisKKwkJCQkJLy8gV2UgaGF2ZSBhbGwgdGhlIGhlYWRlciBieXRlcywgcHJvY2VzcyB0aGUgc3RhdHVzIG5vdworCQkJCQlwcm9jZXNzX3JjdmRfc3RhdHVzIChlZGdlX3NlcmlhbCwgZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMiwgMCk7CisJCQkJCWVkZ2Vfc2VyaWFsLT5yeFN0YXRlID0gRVhQRUNUX0hEUjE7CisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSB7CisJCQkJCWVkZ2Vfc2VyaWFsLT5yeFBvcnQgPSBJT1NQX0dFVF9IRFJfUE9SVChlZGdlX3NlcmlhbC0+cnhIZWFkZXIxKTsKKwkJCQkJZWRnZV9zZXJpYWwtPnJ4Qnl0ZXNSZW1haW5pbmcgPSBJT1NQX0dFVF9IRFJfREFUQV9MRU4oZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMSwgZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMik7CisKKwkJCQkJZGJnKCIlcyAtIERhdGEgZm9yIFBvcnQgJXUgTGVuICV1IiwgX19GVU5DVElPTl9fLCBlZGdlX3NlcmlhbC0+cnhQb3J0LCBlZGdlX3NlcmlhbC0+cnhCeXRlc1JlbWFpbmluZyk7CisKKwkJCQkJLy9BU1NFUlQoIERldkV4dC0+UnhQb3J0IDwgRGV2RXh0LT5OdW1Qb3J0cyApOworCQkJCQkvL0FTU0VSVCggRGV2RXh0LT5SeEJ5dGVzUmVtYWluaW5nIDwgSU9TUF9NQVhfREFUQV9MRU5HVEggKTsKKworCQkJCQlpZiAoYnVmZmVyTGVuZ3RoID09IDAgKSB7CisJCQkJCQllZGdlX3NlcmlhbC0+cnhTdGF0ZSA9IEVYUEVDVF9EQVRBOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJLy8gRWxzZSwgZHJvcCB0aHJvdWdoCisJCQkJfQorCisJCQljYXNlIEVYUEVDVF9EQVRBOgkvLyBFeHBlY3QgZGF0YQorCisJCQkJaWYgKGJ1ZmZlckxlbmd0aCA8IGVkZ2Vfc2VyaWFsLT5yeEJ5dGVzUmVtYWluaW5nKSB7CisJCQkJCXJ4TGVuID0gYnVmZmVyTGVuZ3RoOworCQkJCQllZGdlX3NlcmlhbC0+cnhTdGF0ZSA9IEVYUEVDVF9EQVRBOwkvLyBFeHBlY3QgZGF0YSB0byBzdGFydCBuZXh0IGJ1ZmZlcgorCQkJCX0gZWxzZSB7CisJCQkJCS8vIEJ1ZkxlbiA+PSBSeEJ5dGVzUmVtYWluaW5nCisJCQkJCXJ4TGVuID0gZWRnZV9zZXJpYWwtPnJ4Qnl0ZXNSZW1haW5pbmc7CisJCQkJCWVkZ2Vfc2VyaWFsLT5yeFN0YXRlID0gRVhQRUNUX0hEUjE7CS8vIFN0YXJ0IGFub3RoZXIgaGVhZGVyIG5leHQgdGltZQorCQkJCX0KKworCQkJCWJ1ZmZlckxlbmd0aCAtPSByeExlbjsKKwkJCQllZGdlX3NlcmlhbC0+cnhCeXRlc1JlbWFpbmluZyAtPSByeExlbjsKKworCQkJCS8qIHNwaXQgdGhpcyBkYXRhIGJhY2sgaW50byB0aGUgdHR5IGRyaXZlciBpZiB0aGlzIHBvcnQgaXMgb3BlbiAqLworCQkJCWlmIChyeExlbikgeworCQkJCQlwb3J0ID0gZWRnZV9zZXJpYWwtPnNlcmlhbC0+cG9ydFtlZGdlX3NlcmlhbC0+cnhQb3J0XTsKKwkJCQkJZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQkJCQlpZiAoZWRnZV9wb3J0LT5vcGVuKSB7CisJCQkJCQl0dHkgPSBlZGdlX3BvcnQtPnBvcnQtPnR0eTsKKwkJCQkJCWlmICh0dHkpIHsKKwkJCQkJCQlkYmcoIiVzIC0gU2VuZGluZyAlZCBieXRlcyB0byBUVFkgZm9yIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHJ4TGVuLCBlZGdlX3NlcmlhbC0+cnhQb3J0KTsKKwkJCQkJCQllZGdlX3R0eV9yZWN2KCZlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwgdHR5LCBidWZmZXIsIHJ4TGVuKTsKKwkJCQkJCX0KKwkJCQkJCWVkZ2VfcG9ydC0+aWNvdW50LnJ4ICs9IHJ4TGVuOworCQkJCQl9CisJCQkJCWJ1ZmZlciArPSByeExlbjsKKwkJCQl9CisKKwkJCQlicmVhazsKKworCQkJY2FzZSBFWFBFQ1RfSERSMzoJCQkvLyBFeHBlY3QgM3JkIGJ5dGUgb2Ygc3RhdHVzIGhlYWRlcgorCQkJCWVkZ2Vfc2VyaWFsLT5yeEhlYWRlcjMgPSAqYnVmZmVyOworCQkJCSsrYnVmZmVyOworCQkJCS0tYnVmZmVyTGVuZ3RoOworCisJCQkJLy8gV2UgaGF2ZSBhbGwgdGhlIGhlYWRlciBieXRlcywgcHJvY2VzcyB0aGUgc3RhdHVzIG5vdworCQkJCXByb2Nlc3NfcmN2ZF9zdGF0dXMgKGVkZ2Vfc2VyaWFsLCBlZGdlX3NlcmlhbC0+cnhTdGF0dXNQYXJhbSwgZWRnZV9zZXJpYWwtPnJ4SGVhZGVyMyk7CisJCQkJZWRnZV9zZXJpYWwtPnJ4U3RhdGUgPSBFWFBFQ1RfSERSMTsKKwkJCQlicmVhazsKKworCQl9CisJfQorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcHJvY2Vzc19yY3ZkX3N0YXR1cworICoJdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBhbnkgc3RhdHVzIG1lc3NhZ2VzIHJlY2VpdmVkIG9uIHRoZSBidWxrIGluIHBpcGUuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBwcm9jZXNzX3JjdmRfc3RhdHVzIChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCwgX191OCBieXRlMiwgX191OCBieXRlMykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQ7CisJX191OCBjb2RlID0gZWRnZV9zZXJpYWwtPnJ4U3RhdHVzQ29kZTsKKworCS8qIHN3aXRjaCB0aGUgcG9ydCBwb2ludGVyIHRvIHRoZSBvbmUgYmVpbmcgY3VycmVudGx5IHRhbGtlZCBhYm91dCAqLworCXBvcnQgPSBlZGdlX3NlcmlhbC0+c2VyaWFsLT5wb3J0W2VkZ2Vfc2VyaWFsLT5yeFBvcnRdOworCWVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpZiAoZWRnZV9wb3J0ID09IE5VTEwpIHsKKwkJZGV2X2VycigmZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIGVkZ2VfcG9ydCA9PSBOVUxMIGZvciBwb3J0ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGVkZ2Vfc2VyaWFsLT5yeFBvcnQpOworCQlyZXR1cm47CisJfQorCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIGVkZ2Vfc2VyaWFsLT5yeFBvcnQpOworCisJaWYgKGNvZGUgPT0gSU9TUF9FWFRfU1RBVFVTKSB7CisJCXN3aXRjaCAoYnl0ZTIpIHsKKwkJCWNhc2UgSU9TUF9FWFRfU1RBVFVTX0NIQVNFX1JTUDoKKwkJCQkvLyB3ZSB3YW50IHRvIGRvIEVYVCBzdGF0dXMgcmVnYXJkbGVzcyBvZiBwb3J0IG9wZW4vY2xvc2VkIAorCQkJCWRiZygiJXMgLSBQb3J0ICV1IEVYVCBDSEFTRV9SU1AgRGF0YSA9ICUwMngiLCBfX0ZVTkNUSU9OX18sIGVkZ2Vfc2VyaWFsLT5yeFBvcnQsIGJ5dGUzICk7CisJCQkJLy8gQ3VycmVudGx5LCB0aGUgb25seSBFWFRfU1RBVFVTIGlzIENoYXNlLCBzbyBwcm9jZXNzIGhlcmUgaW5zdGVhZCBvZiBvbmUgbW9yZSBjYWxsCisJCQkJLy8gdG8gb25lIG1vcmUgc3Vicm91dGluZS4gSWYvd2hlbiBtb3JlIEVYVF9TVEFUVVMsIHRoZXJlJ2xsIGJlIG1vcmUgd29yayB0byBkby4KKwkJCQkvLyBBbHNvLCB3ZSBjdXJyZW50bHkgY2xlYXIgZmxhZyBhbmQgY2xvc2UgdGhlIHBvcnQgcmVnYXJkbGVzcyBvZiBjb250ZW50IG9mIGFib3ZlJ3MgQnl0ZTMuCisJCQkJLy8gV2UgY291bGQgY2hvb3NlIHRvIGRvIHNvbWV0aGluZyBlbHNlIHdoZW4gQnl0ZTMgc2F5cyBUaW1lb3V0IG9uIENoYXNlIGZyb20gRWRnZXBvcnQsCisJCQkJLy8gbGlrZSB3YWl0IGxvbmdlciBpbiBibG9ja191bnRpbF9jaGFzZV9yZXNwb25zZSwgYnV0IGZvciBub3cgd2UgZG9uJ3QuIAorCQkJCWVkZ2VfcG9ydC0+Y2hhc2VSZXNwb25zZVBlbmRpbmcgPSBGQUxTRTsKKwkJCQl3YWtlX3VwICgmZWRnZV9wb3J0LT53YWl0X2NoYXNlKTsKKwkJCQlyZXR1cm47CisKKwkJCWNhc2UgSU9TUF9FWFRfU1RBVFVTX1JYX0NIRUNLX1JTUDoKKwkJCQlkYmcoIiVzID09PT09PT09PT0gUG9ydCAldSBDSEVDS19SU1AgU2VxdWVuY2UgPSAlMDJ4ID09PT09PT09PT09PT1cbiIsIF9fRlVOQ1RJT05fXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCwgYnl0ZTMgKTsKKwkJCQkvL1BvcnQtPlJ4Q2hlY2tSc3AgPSBUUlVFOworCQkJCXJldHVybjsKKwkJfQorCX0KKworCWlmIChjb2RlID09IElPU1BfU1RBVFVTX09QRU5fUlNQKSB7CisJCWVkZ2VfcG9ydC0+dHhDcmVkaXRzID0gR0VUX1RYX0JVRkZFUl9TSVpFKGJ5dGUzKTsKKwkJZWRnZV9wb3J0LT5tYXhUeENyZWRpdHMgPSBlZGdlX3BvcnQtPnR4Q3JlZGl0czsKKwkJZGJnKCIlcyAtIFBvcnQgJXUgT3BlbiBSZXNwb25zZSBJbml0YWwgTVNSID0gJTAyeCBUeEJ1ZmZlclNpemUgPSAlZCIsIF9fRlVOQ1RJT05fXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCwgYnl0ZTIsIGVkZ2VfcG9ydC0+dHhDcmVkaXRzKTsKKwkJaGFuZGxlX25ld19tc3IgKGVkZ2VfcG9ydCwgYnl0ZTIpOworCisJCS8qIHNlbmQgdGhlIGN1cnJlbnQgbGluZSBzZXR0aW5ncyB0byB0aGUgcG9ydCBzbyB3ZSBhcmUgaW4gc3luYyB3aXRoIGFueSBmdXJ0aGVyIHRlcm1pb3MgY2FsbHMgKi8KKwkJaWYgKGVkZ2VfcG9ydC0+cG9ydC0+dHR5KQorCQkJY2hhbmdlX3BvcnRfc2V0dGluZ3MgKGVkZ2VfcG9ydCwgZWRnZV9wb3J0LT5wb3J0LT50dHktPnRlcm1pb3MpOworCisJCS8qIHdlIGhhdmUgY29tcGxldGVkIHRoZSBvcGVuICovCisJCWVkZ2VfcG9ydC0+b3BlblBlbmRpbmcgPSBGQUxTRTsKKwkJZWRnZV9wb3J0LT5vcGVuID0gVFJVRTsKKwkJd2FrZV91cCgmZWRnZV9wb3J0LT53YWl0X29wZW4pOworCQlyZXR1cm47CisJfQorCisJLy8gSWYgcG9ydCBpcyBjbG9zZWQsIHNpbGVudGx5IGRpc2NhcmQgYWxsIHJjdmQgc3RhdHVzLiBXZSBjYW4KKwkvLyBoYXZlIGNhc2VzIHdoZXJlIGJ1ZmZlcmVkIHN0YXR1cyBpcyByZWNlaXZlZCBBRlRFUiB0aGUgY2xvc2UKKwkvLyBwb3J0IGNvbW1hbmQgaXMgc2VudCB0byB0aGUgRWRnZXBvcnQuCisJaWYgKCghZWRnZV9wb3J0LT5vcGVuICkgfHwgKGVkZ2VfcG9ydC0+Y2xvc2VQZW5kaW5nKSkgeworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChjb2RlKSB7CisJCS8vIE5vdCBjdXJyZW50bHkgc2VudCBieSBFZGdlcG9ydAorCQljYXNlIElPU1BfU1RBVFVTX0xTUjoKKwkJCWRiZygiJXMgLSBQb3J0ICV1IExTUiBTdGF0dXMgPSAlMDJ4IiwgX19GVU5DVElPTl9fLCBlZGdlX3NlcmlhbC0+cnhQb3J0LCBieXRlMik7CisJCQloYW5kbGVfbmV3X2xzciAoZWRnZV9wb3J0LCBGQUxTRSwgYnl0ZTIsIDApOworCQkJYnJlYWs7CisKKwkJY2FzZSBJT1NQX1NUQVRVU19MU1JfREFUQToKKwkJCWRiZygiJXMgLSBQb3J0ICV1IExTUiBTdGF0dXMgPSAlMDJ4LCBEYXRhID0gJTAyeCIsIF9fRlVOQ1RJT05fXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCwgYnl0ZTIsIGJ5dGUzKTsKKwkJCS8vIGJ5dGUyIGlzIExTUiBSZWdpc3RlcgorCQkJLy8gYnl0ZTMgaXMgYnJva2VuIGRhdGEgYnl0ZQorCQkJaGFuZGxlX25ld19sc3IgKGVkZ2VfcG9ydCwgVFJVRSwgYnl0ZTIsIGJ5dGUzKTsKKwkJCWJyZWFrOworCQkJLy8KKwkJCS8vCWNhc2UgSU9TUF9FWFRfNF9TVEFUVVM6CisJCQkvLwkJZGJnKCIlcyAtIFBvcnQgJXUgTFNSIFN0YXR1cyA9ICUwMnggRGF0YSA9ICUwMngiLCBfX0ZVTkNUSU9OX18sIGVkZ2Vfc2VyaWFsLT5yeFBvcnQsIGJ5dGUyLCBieXRlMyk7CisJCQkvLwkJYnJlYWs7CisJCQkvLworCQljYXNlIElPU1BfU1RBVFVTX01TUjoKKwkJCWRiZygiJXMgLSBQb3J0ICV1IE1TUiBTdGF0dXMgPSAlMDJ4IiwgX19GVU5DVElPTl9fLCBlZGdlX3NlcmlhbC0+cnhQb3J0LCBieXRlMik7CisKKwkJCS8vIFByb2Nlc3MgdGhpcyBuZXcgbW9kZW0gc3RhdHVzIGFuZCBnZW5lcmF0ZSBhcHByb3ByaWF0ZQorCQkJLy8gZXZlbnRzLCBldGMsIGJhc2VkIG9uIHRoZSBuZXcgc3RhdHVzLiBUaGlzIHJvdXRpbmUKKwkJCS8vIGFsc28gc2F2ZXMgdGhlIE1TUiBpbiBQb3J0LT5TaGFkb3dNc3IuCisJCQloYW5kbGVfbmV3X21zcihlZGdlX3BvcnQsIGJ5dGUyKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlkYmcoIiVzIC0gVW5yZWNvZ25pemVkIElPU1Agc3RhdHVzIGNvZGUgJXVcbiIsIF9fRlVOQ1RJT05fXywgY29kZSk7CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm47Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBlZGdlX3R0eV9yZWN2CisgKgl0aGlzIGZ1bmN0aW9uIHBhc3NlcyBkYXRhIG9uIHRvIHRoZSB0dHkgZmxpcCBidWZmZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGVkZ2VfdHR5X3JlY3Yoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoKQoreworCWludCBjbnQ7CisKKwlkbyB7CisJCWlmICh0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkgeworCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCWlmICh0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkgeworCQkJCWRldl9lcnIoZGV2LCAiJXMgLSBkcm9wcGluZyBkYXRhLCAlZCBieXRlcyBsb3N0XG4iLAorCQkJCQlfX0ZVTkNUSU9OX18sIGxlbmd0aCk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJCWNudCA9IG1pbihsZW5ndGgsIFRUWV9GTElQQlVGX1NJWkUgLSB0dHktPmZsaXAuY291bnQpOworCQltZW1jcHkodHR5LT5mbGlwLmNoYXJfYnVmX3B0ciwgZGF0YSwgY250KTsKKwkJbWVtc2V0KHR0eS0+ZmxpcC5mbGFnX2J1Zl9wdHIsIDAsIGNudCk7CisJCXR0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIgKz0gY250OworCQl0dHktPmZsaXAuZmxhZ19idWZfcHRyICs9IGNudDsKKwkJdHR5LT5mbGlwLmNvdW50ICs9IGNudDsKKwkJZGF0YSArPSBjbnQ7CisJCWxlbmd0aCAtPSBjbnQ7CisJfSB3aGlsZSAobGVuZ3RoID4gMCk7CisKKwl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaGFuZGxlX25ld19tc3IKKyAqCXRoaXMgZnVuY3Rpb24gaGFuZGxlcyBhbnkgY2hhbmdlIHRvIHRoZSBtc3IgcmVnaXN0ZXIgZm9yIGEgcG9ydC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV9uZXdfbXNyKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIF9fdTggbmV3TXNyKQoreworCXN0cnVjdCAgYXN5bmNfaWNvdW50ICppY291bnQ7CisKKwlkYmcoIiVzICUwMngiLCBfX0ZVTkNUSU9OX18sIG5ld01zcik7CisKKwlpZiAobmV3TXNyICYgKEVER0VQT1JUX01TUl9ERUxUQV9DVFMgfCBFREdFUE9SVF9NU1JfREVMVEFfRFNSIHwgRURHRVBPUlRfTVNSX0RFTFRBX1JJIHwgRURHRVBPUlRfTVNSX0RFTFRBX0NEKSkgeworCQlpY291bnQgPSAmZWRnZV9wb3J0LT5pY291bnQ7CisKKwkJLyogdXBkYXRlIGlucHV0IGxpbmUgY291bnRlcnMgKi8KKwkJaWYgKG5ld01zciAmIEVER0VQT1JUX01TUl9ERUxUQV9DVFMpIHsKKwkJCWljb3VudC0+Y3RzKys7CisJCX0KKwkJaWYgKG5ld01zciAmIEVER0VQT1JUX01TUl9ERUxUQV9EU1IpIHsKKwkJCWljb3VudC0+ZHNyKys7CisJCX0KKwkJaWYgKG5ld01zciAmIEVER0VQT1JUX01TUl9ERUxUQV9DRCkgeworCQkJaWNvdW50LT5kY2QrKzsKKwkJfQorCQlpZiAobmV3TXNyICYgRURHRVBPUlRfTVNSX0RFTFRBX1JJKSB7CisJCQlpY291bnQtPnJuZysrOworCQl9CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZWRnZV9wb3J0LT5kZWx0YV9tc3Jfd2FpdCk7CisJfQorCisJLyogU2F2ZSB0aGUgbmV3IG1vZGVtIHN0YXR1cyAqLworCWVkZ2VfcG9ydC0+c2hhZG93TVNSID0gbmV3TXNyICYgMHhmMDsKKworCXJldHVybjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGhhbmRsZV9uZXdfbHNyCisgKgl0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgYW55IGNoYW5nZSB0byB0aGUgbHNyIHJlZ2lzdGVyIGZvciBhIHBvcnQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBoYW5kbGVfbmV3X2xzcihzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBfX3U4IGxzckRhdGEsIF9fdTggbHNyLCBfX3U4IGRhdGEpCit7CisJX191OCAgICBuZXdMc3IgPSAoX191OCkobHNyICYgKF9fdTgpKExTUl9PVkVSX0VSUiB8IExTUl9QQVJfRVJSIHwgTFNSX0ZSTV9FUlIgfCBMU1JfQlJFQUspKTsKKwlzdHJ1Y3QgIGFzeW5jX2ljb3VudCAqaWNvdW50OworCisJZGJnKCIlcyAtICUwMngiLCBfX0ZVTkNUSU9OX18sIG5ld0xzcik7CisKKwllZGdlX3BvcnQtPnNoYWRvd0xTUiA9IGxzcjsKKworCWlmIChuZXdMc3IgJiBMU1JfQlJFQUspIHsKKwkJLy8KKwkJLy8gUGFyaXR5IGFuZCBGcmFtaW5nIGVycm9ycyBvbmx5IGNvdW50IGlmIHRoZXkKKwkJLy8gb2NjdXIgZXhjbHVzaXZlIG9mIGEgYnJlYWsgYmVpbmcKKwkJLy8gcmVjZWl2ZWQuCisJCS8vCisJCW5ld0xzciAmPSAoX191OCkoTFNSX09WRVJfRVJSIHwgTFNSX0JSRUFLKTsKKwl9CisKKwkvKiBQbGFjZSBMU1IgZGF0YSBieXRlIGludG8gUnggYnVmZmVyICovCisJaWYgKGxzckRhdGEgJiYgZWRnZV9wb3J0LT5wb3J0LT50dHkpCisJCWVkZ2VfdHR5X3JlY3YoJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LCBlZGdlX3BvcnQtPnBvcnQtPnR0eSwgJmRhdGEsIDEpOworCisJLyogdXBkYXRlIGlucHV0IGxpbmUgY291bnRlcnMgKi8KKwlpY291bnQgPSAmZWRnZV9wb3J0LT5pY291bnQ7CisJaWYgKG5ld0xzciAmIExTUl9CUkVBSykgeworCQlpY291bnQtPmJyaysrOworCX0KKwlpZiAobmV3THNyICYgTFNSX09WRVJfRVJSKSB7CisJCWljb3VudC0+b3ZlcnJ1bisrOworCX0KKwlpZiAobmV3THNyICYgTFNSX1BBUl9FUlIpIHsKKwkJaWNvdW50LT5wYXJpdHkrKzsKKwl9CisJaWYgKG5ld0xzciAmIExTUl9GUk1fRVJSKSB7CisJCWljb3VudC0+ZnJhbWUrKzsKKwl9CisKKwlyZXR1cm47Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHNyYW1fd3JpdGUKKyAqCXdyaXRlcyBhIG51bWJlciBvZiBieXRlcyB0byB0aGUgRWRnZXBvcnQgZGV2aWNlJ3Mgc3JhbSBzdGFydGluZyBhdCB0aGUgCisgKglnaXZlbiBhZGRyZXNzLgorICoJSWYgc3VjY2Vzc2Z1bCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiwgb3RoZXJ3aXNlIGl0IHJldHVybnMKKyAqCWEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIG9mIHRoZSBwcm9ibGVtLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHNyYW1fd3JpdGUgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIF9fdTE2IGV4dEFkZHIsIF9fdTE2IGFkZHIsIF9fdTE2IGxlbmd0aCwgX191OCAqZGF0YSkKK3sKKwlpbnQgcmVzdWx0OworCV9fdTE2IGN1cnJlbnRfbGVuZ3RoOworCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlcjsKKworCWRiZygiJXMgLSAleCwgJXgsICVkIiwgX19GVU5DVElPTl9fLCBleHRBZGRyLCBhZGRyLCBsZW5ndGgpOworCisJdHJhbnNmZXJfYnVmZmVyID0gIGttYWxsb2MgKDY0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRyYW5zZmVyX2J1ZmZlcikgeworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBrbWFsbG9jKCVkKSBmYWlsZWQuXG4iLCBfX0ZVTkNUSU9OX18sIDY0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogbmVlZCB0byBzcGxpdCB0aGVzZSB3cml0ZXMgdXAgaW50byA2NCBieXRlIGNodW5rcyAqLworCXJlc3VsdCA9IDA7CisJd2hpbGUgKGxlbmd0aCA+IDApIHsKKwkJaWYgKGxlbmd0aCA+IDY0KSB7CisJCQljdXJyZW50X2xlbmd0aCA9IDY0OworCQl9IGVsc2UgeworCQkJY3VycmVudF9sZW5ndGggPSBsZW5ndGg7CisJCX0KKy8vCQlkYmcoIiVzIC0gd3JpdGluZyAleCwgJXgsICVkIiwgX19GVU5DVElPTl9fLCBleHRBZGRyLCBhZGRyLCBjdXJyZW50X2xlbmd0aCk7CisJCW1lbWNweSAodHJhbnNmZXJfYnVmZmVyLCBkYXRhLCBjdXJyZW50X2xlbmd0aCk7CisJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksIFVTQl9SRVFVRVNUX0lPTl9XUklURV9SQU0sIAorCQkJCQkgIDB4NDAsIGFkZHIsIGV4dEFkZHIsIHRyYW5zZmVyX2J1ZmZlciwgY3VycmVudF9sZW5ndGgsIDMwMCk7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJYnJlYWs7CisJCWxlbmd0aCAtPSBjdXJyZW50X2xlbmd0aDsKKwkJYWRkciArPSBjdXJyZW50X2xlbmd0aDsKKwkJZGF0YSArPSBjdXJyZW50X2xlbmd0aDsKKwl9ICAgICAgIAorCisJa2ZyZWUgKHRyYW5zZmVyX2J1ZmZlcik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcm9tX3dyaXRlCisgKgl3cml0ZXMgYSBudW1iZXIgb2YgYnl0ZXMgdG8gdGhlIEVkZ2Vwb3J0IGRldmljZSdzIFJPTSBzdGFydGluZyBhdCB0aGUKKyAqCWdpdmVuIGFkZHJlc3MuCisgKglJZiBzdWNjZXNzZnVsIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLCBvdGhlcndpc2UgaXQgcmV0dXJucworICoJYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIgb2YgdGhlIHByb2JsZW0uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcm9tX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBfX3UxNiBleHRBZGRyLCBfX3UxNiBhZGRyLCBfX3UxNiBsZW5ndGgsIF9fdTggKmRhdGEpCit7CisJaW50IHJlc3VsdDsKKwlfX3UxNiBjdXJyZW50X2xlbmd0aDsKKwl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXI7CisKKy8vCWRiZygiJXMgLSAleCwgJXgsICVkIiwgX19GVU5DVElPTl9fLCBleHRBZGRyLCBhZGRyLCBsZW5ndGgpOworCisJdHJhbnNmZXJfYnVmZmVyID0gIGttYWxsb2MgKDY0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRyYW5zZmVyX2J1ZmZlcikgeworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBrbWFsbG9jKCVkKSBmYWlsZWQuXG4iLCBfX0ZVTkNUSU9OX18sIDY0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogbmVlZCB0byBzcGxpdCB0aGVzZSB3cml0ZXMgdXAgaW50byA2NCBieXRlIGNodW5rcyAqLworCXJlc3VsdCA9IDA7CisJd2hpbGUgKGxlbmd0aCA+IDApIHsKKwkJaWYgKGxlbmd0aCA+IDY0KSB7CisJCQljdXJyZW50X2xlbmd0aCA9IDY0OworCQl9IGVsc2UgeworCQkJY3VycmVudF9sZW5ndGggPSBsZW5ndGg7CisJCX0KKy8vCQlkYmcoIiVzIC0gd3JpdGluZyAleCwgJXgsICVkIiwgX19GVU5DVElPTl9fLCBleHRBZGRyLCBhZGRyLCBjdXJyZW50X2xlbmd0aCk7CisJCW1lbWNweSAodHJhbnNmZXJfYnVmZmVyLCBkYXRhLCBjdXJyZW50X2xlbmd0aCk7CisJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksIFVTQl9SRVFVRVNUX0lPTl9XUklURV9ST00sIAorCQkJCQkgIDB4NDAsIGFkZHIsIGV4dEFkZHIsIHRyYW5zZmVyX2J1ZmZlciwgY3VycmVudF9sZW5ndGgsIDMwMCk7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJYnJlYWs7CisJCWxlbmd0aCAtPSBjdXJyZW50X2xlbmd0aDsKKwkJYWRkciArPSBjdXJyZW50X2xlbmd0aDsKKwkJZGF0YSArPSBjdXJyZW50X2xlbmd0aDsKKwl9ICAgICAgIAorCisJa2ZyZWUgKHRyYW5zZmVyX2J1ZmZlcik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcm9tX3JlYWQKKyAqCXJlYWRzIGEgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIEVkZ2Vwb3J0IGRldmljZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4KKyAqCWFkZHJlc3MuCisgKglJZiBzdWNjZXNzZnVsIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkLCBvdGhlcndpc2UgaXQgcmV0dXJucworICoJYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIgb2YgdGhlIHByb2JsZW0uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcm9tX3JlYWQgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIF9fdTE2IGV4dEFkZHIsIF9fdTE2IGFkZHIsIF9fdTE2IGxlbmd0aCwgX191OCAqZGF0YSkKK3sKKwlpbnQgcmVzdWx0OworCV9fdTE2IGN1cnJlbnRfbGVuZ3RoOworCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlcjsKKworCWRiZygiJXMgLSAleCwgJXgsICVkIiwgX19GVU5DVElPTl9fLCBleHRBZGRyLCBhZGRyLCBsZW5ndGgpOworCisJdHJhbnNmZXJfYnVmZmVyID0gIGttYWxsb2MgKDY0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRyYW5zZmVyX2J1ZmZlcikgeworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBrbWFsbG9jKCVkKSBmYWlsZWQuXG4iLCBfX0ZVTkNUSU9OX18sIDY0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogbmVlZCB0byBzcGxpdCB0aGVzZSByZWFkcyB1cCBpbnRvIDY0IGJ5dGUgY2h1bmtzICovCisJcmVzdWx0ID0gMDsKKwl3aGlsZSAobGVuZ3RoID4gMCkgeworCQlpZiAobGVuZ3RoID4gNjQpIHsKKwkJCWN1cnJlbnRfbGVuZ3RoID0gNjQ7CisJCX0gZWxzZSB7CisJCQljdXJyZW50X2xlbmd0aCA9IGxlbmd0aDsKKwkJfQorLy8JCWRiZygiJXMgLSAleCwgJXgsICVkIiwgX19GVU5DVElPTl9fLCBleHRBZGRyLCBhZGRyLCBjdXJyZW50X2xlbmd0aCk7CisJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksIFVTQl9SRVFVRVNUX0lPTl9SRUFEX1JPTSwgCisJCQkJCSAgMHhDMCwgYWRkciwgZXh0QWRkciwgdHJhbnNmZXJfYnVmZmVyLCBjdXJyZW50X2xlbmd0aCwgMzAwKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlicmVhazsKKwkJbWVtY3B5IChkYXRhLCB0cmFuc2Zlcl9idWZmZXIsIGN1cnJlbnRfbGVuZ3RoKTsKKwkJbGVuZ3RoIC09IGN1cnJlbnRfbGVuZ3RoOworCQlhZGRyICs9IGN1cnJlbnRfbGVuZ3RoOworCQlkYXRhICs9IGN1cnJlbnRfbGVuZ3RoOworCX0gICAgICAgCisKKwlrZnJlZSAodHJhbnNmZXJfYnVmZmVyKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzZW5kX2lvc3BfZXh0X2NtZAorICoJSXMgdXNlZCB0byBzZW5kIGEgSU9TUCBtZXNzYWdlIHRvIHRoZSBFZGdlcG9ydCBkZXZpY2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBzZW5kX2lvc3BfZXh0X2NtZCAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgX191OCBjb21tYW5kLCBfX3U4IHBhcmFtKQoreworCXVuc2lnbmVkIGNoYXIgICAqYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgICAqY3VycmVudENvbW1hbmQ7CisJaW50ICAgICAgICAgICAgIGxlbmd0aCA9IDA7CisJaW50ICAgICAgICAgICAgIHN0YXR1cyA9IDA7CisKKwlkYmcoIiVzIC0gJWQsICVkIiwgX19GVU5DVElPTl9fLCBjb21tYW5kLCBwYXJhbSk7CisKKwlidWZmZXIgPSAga21hbGxvYyAoMTAsIEdGUF9BVE9NSUMpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIoJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LCAiJXMgLSBrbWFsbG9jKCVkKSBmYWlsZWQuXG4iLCBfX0ZVTkNUSU9OX18sIDEwKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY3VycmVudENvbW1hbmQgPSBidWZmZXI7CisKKwlNQUtFX0NNRF9FWFRfQ01EICgmY3VycmVudENvbW1hbmQsICZsZW5ndGgsCisJCQkgIGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyIC0gZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yLAorCQkJICBjb21tYW5kLCBwYXJhbSk7CisKKwlzdGF0dXMgPSB3cml0ZV9jbWRfdXNiIChlZGdlX3BvcnQsIGJ1ZmZlciwgbGVuZ3RoKTsKKwlpZiAoc3RhdHVzKSB7CisJCS8qIHNvbWV0aGluZyBiYWQgaGFwcGVuZWQsIGxldCdzIGZyZWUgdXAgdGhlIG1lbW9yeSAqLworCQlrZnJlZShidWZmZXIpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiB3cml0ZV9jbWRfdXNiCisgKgl0aGlzIGZ1bmN0aW9uIHdyaXRlcyB0aGUgZ2l2ZW4gYnVmZmVyIG91dCB0byB0aGUgYnVsayB3cml0ZSBlbmRwb2ludC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgd3JpdGVfY21kX3VzYiAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgbGVuZ3RoKQoreworCXN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsID0gdXNiX2dldF9zZXJpYWxfZGF0YShlZGdlX3BvcnQtPnBvcnQtPnNlcmlhbCk7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IHVyYiAqdXJiOworCWludCB0aW1lb3V0OworCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmZWRnZV9wb3J0LT5wb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgbGVuZ3RoLCBidWZmZXIpOworCisJLyogQWxsb2NhdGUgb3VyIG5leHQgdXJiICovCisJdXJiID0gdXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0FUT01JQyk7CisJaWYgKCF1cmIpCisJCXJldHVybiAtRU5PTUVNOworCisJQ21kVXJicysrOworCWRiZygiJXMgLSBBTExPQ0FURSBVUkIgJXAgKG91dHN0YW5kaW5nICVkKSIsIF9fRlVOQ1RJT05fXywgdXJiLCBDbWRVcmJzKTsKKworCXVzYl9maWxsX2J1bGtfdXJiICh1cmIsIGVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldiwgCisJCSAgICAgICB1c2Jfc25kYnVsa3BpcGUoZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LCBlZGdlX3NlcmlhbC0+YnVsa19vdXRfZW5kcG9pbnQpLAorCQkgICAgICAgYnVmZmVyLCBsZW5ndGgsIGVkZ2VfYnVsa19vdXRfY21kX2NhbGxiYWNrLCBlZGdlX3BvcnQpOworCisJZWRnZV9wb3J0LT5jb21tYW5kUGVuZGluZyA9IFRSVUU7CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKworCWlmIChzdGF0dXMpIHsKKwkJLyogc29tZXRoaW5nIHdlbnQgd3JvbmcgKi8KKwkJZGV2X2VycigmZWRnZV9wb3J0LT5wb3J0LT5kZXYsICIlcyAtIHVzYl9zdWJtaXRfdXJiKHdyaXRlIGNvbW1hbmQpIGZhaWxlZCwgc3RhdHVzID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJdXNiX2tpbGxfdXJiKHVyYik7CisJCXVzYl9mcmVlX3VyYih1cmIpOworCQlDbWRVcmJzLS07CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJLy8gd2FpdCBmb3IgY29tbWFuZCB0byBmaW5pc2gKKwl0aW1lb3V0ID0gQ09NTUFORF9USU1FT1VUOworI2lmIDAKKwl3YWl0X2V2ZW50ICgmZWRnZV9wb3J0LT53YWl0X2NvbW1hbmQsIChlZGdlX3BvcnQtPmNvbW1hbmRQZW5kaW5nID09IEZBTFNFKSk7CisKKwlpZiAoZWRnZV9wb3J0LT5jb21tYW5kUGVuZGluZyA9PSBUUlVFKSB7CisJCS8qIGNvbW1hbmQgdGltZWQgb3V0ICovCisJCWRiZygiJXMgLSBjb21tYW5kIHRpbWVkIG91dCIsIF9fRlVOQ1RJT05fXyk7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJfQorI2VuZGlmCisJcmV0dXJuIHN0YXR1czsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHNlbmRfY21kX3dyaXRlX2JhdWRfcmF0ZQorICoJdGhpcyBmdW5jdGlvbiBzZW5kcyB0aGUgcHJvcGVyIGNvbW1hbmQgdG8gY2hhbmdlIHRoZSBiYXVkIHJhdGUgb2YgdGhlCisgKglzcGVjaWZpZWQgcG9ydC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgc2VuZF9jbWRfd3JpdGVfYmF1ZF9yYXRlIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBpbnQgYmF1ZFJhdGUpCit7CisJdW5zaWduZWQgY2hhciAqY21kQnVmZmVyOworCXVuc2lnbmVkIGNoYXIgKmN1cnJDbWQ7CisJaW50IGNtZExlbiA9IDA7CisJaW50IGRpdmlzb3I7CisJaW50IHN0YXR1czsKKwl1bnNpZ25lZCBjaGFyIG51bWJlciA9IGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyIC0gZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOworCisJZGJnKCIlcyAtIHBvcnQgPSAlZCwgYmF1ZCA9ICVkIiwgX19GVU5DVElPTl9fLCBlZGdlX3BvcnQtPnBvcnQtPm51bWJlciwgYmF1ZFJhdGUpOworCisJc3RhdHVzID0gY2FsY19iYXVkX3JhdGVfZGl2aXNvciAoYmF1ZFJhdGUsICZkaXZpc29yKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LCAiJXMgLSBiYWQgYmF1ZCByYXRlXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCS8vIEFsbG9jIG1lbW9yeSBmb3IgdGhlIHN0cmluZyBvZiBjb21tYW5kcy4KKwljbWRCdWZmZXIgPSAga21hbGxvYyAoMHgxMDAsIEdGUF9BVE9NSUMpOworCWlmICghY21kQnVmZmVyKSB7CisJCWRldl9lcnIoJmVkZ2VfcG9ydC0+cG9ydC0+ZGV2LCAiJXMgLSBrbWFsbG9jKCVkKSBmYWlsZWQuXG4iLCBfX0ZVTkNUSU9OX18sIDB4MTAwKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWN1cnJDbWQgPSBjbWRCdWZmZXI7CisKKwkvLyBFbmFibGUgYWNjZXNzIHRvIGRpdmlzb3IgbGF0Y2gKKwlNQUtFX0NNRF9XUklURV9SRUcoICZjdXJyQ21kLCAmY21kTGVuLCBudW1iZXIsIExDUiwgTENSX0RMX0VOQUJMRSApOworCisJLy8gV3JpdGUgdGhlIGRpdmlzb3IgaXRzZWxmCisJTUFLRV9DTURfV1JJVEVfUkVHKCAmY3VyckNtZCwgJmNtZExlbiwgbnVtYmVyLCBETEwsIExPVzggKGRpdmlzb3IpICk7CisJTUFLRV9DTURfV1JJVEVfUkVHKCAmY3VyckNtZCwgJmNtZExlbiwgbnVtYmVyLCBETE0sIEhJR0g4KGRpdmlzb3IpICk7CisKKwkvLyBSZXN0b3JlIG9yaWdpbmFsIHZhbHVlIHRvIGRpc2FibGUgYWNjZXNzIHRvIGRpdmlzb3IgbGF0Y2gKKwlNQUtFX0NNRF9XUklURV9SRUcoICZjdXJyQ21kLCAmY21kTGVuLCBudW1iZXIsIExDUiwgZWRnZV9wb3J0LT5zaGFkb3dMQ1IpOworCisJc3RhdHVzID0gd3JpdGVfY21kX3VzYihlZGdlX3BvcnQsIGNtZEJ1ZmZlciwgY21kTGVuICk7CisJaWYgKHN0YXR1cykgeworCQkvKiBzb21ldGhpbmcgYmFkIGhhcHBlbmVkLCBsZXQncyBmcmVlIHVwIHRoZSBtZW1vcnkgKi8KKwkJa2ZyZWUgKGNtZEJ1ZmZlcik7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGNhbGNfYmF1ZF9yYXRlX2Rpdmlzb3IKKyAqCXRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgcHJvcGVyIGJhdWQgcmF0ZSBkaXZpc29yIGZvciB0aGUgc3BlY2lmaWVkCisgKgliYXVkIHJhdGUuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGNhbGNfYmF1ZF9yYXRlX2Rpdmlzb3IgKGludCBiYXVkcmF0ZSwgaW50ICpkaXZpc29yKQoreworCWludCBpOworCV9fdTE2IGN1c3RvbTsKKworCisJZGJnKCIlcyAtICVkIiwgX19GVU5DVElPTl9fLCBiYXVkcmF0ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0VOVFJJRVMoZGl2aXNvcl90YWJsZSk7IGkrKykgeworCQlpZiAoIGRpdmlzb3JfdGFibGVbaV0uQmF1ZFJhdGUgPT0gYmF1ZHJhdGUgKSB7CisJCQkqZGl2aXNvciA9IGRpdmlzb3JfdGFibGVbaV0uRGl2aXNvcjsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJLy8gV2UgaGF2ZSB0cmllZCBhbGwgb2YgdGhlIHN0YW5kYXJkIGJhdWQgcmF0ZXMKKwkvLyBsZXRzIHRyeSB0byBjYWxjdWxhdGUgdGhlIGRpdmlzb3IgZm9yIHRoaXMgYmF1ZCByYXRlCisJLy8gTWFrZSBzdXJlIHRoZSBiYXVkIHJhdGUgaXMgcmVhc29uYWJsZQorCWlmIChiYXVkcmF0ZSA+IDUwICYmIGJhdWRyYXRlIDwgMjMwNDAwKSB7CisJCS8vIGdldCBkaXZpc29yCisJCWN1c3RvbSA9IChfX3UxNikoKDIzMDQwMEwgKyBiYXVkcmF0ZS8yKSAvIGJhdWRyYXRlKTsKKworCQkqZGl2aXNvciA9IGN1c3RvbTsKKworCQlkYmcoIiVzIC0gQmF1ZCAlZCA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGJhdWRyYXRlLCBjdXN0b20pOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzZW5kX2NtZF93cml0ZV91YXJ0X3JlZ2lzdGVyCisgKgl0aGlzIGZ1bmN0aW9uIGJ1aWxkcyB1cCBhIHVhcnQgcmVnaXN0ZXIgbWVzc2FnZSBhbmQgc2VuZHMgdG8gdG8gdGhlIGRldmljZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgc2VuZF9jbWRfd3JpdGVfdWFydF9yZWdpc3RlciAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgX191OCByZWdOdW0sIF9fdTggcmVnVmFsdWUpCit7CisJdW5zaWduZWQgY2hhciAqY21kQnVmZmVyOworCXVuc2lnbmVkIGNoYXIgKmN1cnJDbWQ7CisJdW5zaWduZWQgbG9uZyBjbWRMZW4gPSAwOworCWludCBzdGF0dXM7CisKKwlkYmcoIiVzIC0gd3JpdGUgdG8gJXMgcmVnaXN0ZXIgMHglMDJ4IiwgKHJlZ051bSA9PSBNQ1IpID8gIk1DUiIgOiAiTENSIiwgX19GVU5DVElPTl9fLCByZWdWYWx1ZSk7CisKKwkvLyBBbGxvYyBtZW1vcnkgZm9yIHRoZSBzdHJpbmcgb2YgY29tbWFuZHMuCisJY21kQnVmZmVyID0ga21hbGxvYyAoMHgxMCwgR0ZQX0FUT01JQyk7CisJaWYgKGNtZEJ1ZmZlciA9PSBOVUxMICkgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljdXJyQ21kID0gY21kQnVmZmVyOworCisJLy8gQnVpbGQgYSBjbWQgaW4gdGhlIGJ1ZmZlciB0byB3cml0ZSB0aGUgZ2l2ZW4gcmVnaXN0ZXIKKwlNQUtFX0NNRF9XUklURV9SRUcgKCZjdXJyQ21kLCAmY21kTGVuLAorCQkJICAgIGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyIC0gZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yLAorCQkJICAgIHJlZ051bSwgcmVnVmFsdWUpOworCisJc3RhdHVzID0gd3JpdGVfY21kX3VzYihlZGdlX3BvcnQsIGNtZEJ1ZmZlciwgY21kTGVuKTsKKwlpZiAoc3RhdHVzKSB7CisJCS8qIHNvbWV0aGluZyBiYWQgaGFwcGVuZWQsIGxldCdzIGZyZWUgdXAgdGhlIG1lbW9yeSAqLworCQlrZnJlZSAoY21kQnVmZmVyKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogY2hhbmdlX3BvcnRfc2V0dGluZ3MKKyAqCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gc2V0IHRoZSBVQVJUIG9uIHRoZSBkZXZpY2UgdG8gbWF0Y2ggdGhlIHNwZWNpZmllZAorICoJbmV3IHNldHRpbmdzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBDTVNQQVIKKyNkZWZpbmUgQ01TUEFSIDAKKyNlbmRpZgorc3RhdGljIHZvaWQgY2hhbmdlX3BvcnRfc2V0dGluZ3MgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWludCBiYXVkOworCXVuc2lnbmVkIGNmbGFnOworCV9fdTggbWFzayA9IDB4ZmY7CisJX191OCBsRGF0YTsKKwlfX3U4IGxQYXJpdHk7CisJX191OCBsU3RvcDsKKwlfX3U4IHJ4RmxvdzsKKwlfX3U4IHR4RmxvdzsKKwlpbnQgc3RhdHVzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyKTsKKworCWlmICgoIWVkZ2VfcG9ydC0+b3BlbikgJiYKKwkgICAgKCFlZGdlX3BvcnQtPm9wZW5QZW5kaW5nKSkgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCXR0eSA9IGVkZ2VfcG9ydC0+cG9ydC0+dHR5OworCWlmICgoIXR0eSkgfHwKKwkgICAgKCF0dHktPnRlcm1pb3MpKSB7CisJCWRiZygiJXMgLSBubyB0dHkgc3RydWN0dXJlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwljZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKworCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgeworCQljYXNlIENTNTogICBsRGF0YSA9IExDUl9CSVRTXzU7IG1hc2sgPSAweDFmOyAgICBkYmcoIiVzIC0gZGF0YSBiaXRzID0gNSIsIF9fRlVOQ1RJT05fXyk7ICAgYnJlYWs7CisJCWNhc2UgQ1M2OiAgIGxEYXRhID0gTENSX0JJVFNfNjsgbWFzayA9IDB4M2Y7ICAgIGRiZygiJXMgLSBkYXRhIGJpdHMgPSA2IiwgX19GVU5DVElPTl9fKTsgICBicmVhazsKKwkJY2FzZSBDUzc6ICAgbERhdGEgPSBMQ1JfQklUU183OyBtYXNrID0gMHg3ZjsgICAgZGJnKCIlcyAtIGRhdGEgYml0cyA9IDciLCBfX0ZVTkNUSU9OX18pOyAgIGJyZWFrOworCQlkZWZhdWx0OgorCQljYXNlIENTODogICBsRGF0YSA9IExDUl9CSVRTXzg7ICAgICAgICAgICAgICAgICBkYmcoIiVzIC0gZGF0YSBiaXRzID0gOCIsIF9fRlVOQ1RJT05fXyk7ICAgYnJlYWs7CisJfQorCisJbFBhcml0eSA9IExDUl9QQVJfTk9ORTsKKwlpZiAoY2ZsYWcgJiBQQVJFTkIpIHsKKwkJaWYgKGNmbGFnICYgQ01TUEFSKSB7CisJCQlpZiAoY2ZsYWcgJiBQQVJPREQpIHsKKwkJCQlsUGFyaXR5ID0gTENSX1BBUl9NQVJLOworCQkJCWRiZygiJXMgLSBwYXJpdHkgPSBtYXJrIiwgX19GVU5DVElPTl9fKTsKKwkJCX0gZWxzZSB7CisJCQkJbFBhcml0eSA9IExDUl9QQVJfU1BBQ0U7CisJCQkJZGJnKCIlcyAtIHBhcml0eSA9IHNwYWNlIiwgX19GVU5DVElPTl9fKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChjZmxhZyAmIFBBUk9ERCkgeworCQkJbFBhcml0eSA9IExDUl9QQVJfT0REOworCQkJZGJnKCIlcyAtIHBhcml0eSA9IG9kZCIsIF9fRlVOQ1RJT05fXyk7CisJCX0gZWxzZSB7CisJCQlsUGFyaXR5ID0gTENSX1BBUl9FVkVOOworCQkJZGJnKCIlcyAtIHBhcml0eSA9IGV2ZW4iLCBfX0ZVTkNUSU9OX18pOworCQl9CisJfSBlbHNlIHsKKwkJZGJnKCIlcyAtIHBhcml0eSA9IG5vbmUiLCBfX0ZVTkNUSU9OX18pOworCX0KKworCWlmIChjZmxhZyAmIENTVE9QQikgeworCQlsU3RvcCA9IExDUl9TVE9QXzI7CisJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAyIiwgX19GVU5DVElPTl9fKTsKKwl9IGVsc2UgeworCQlsU3RvcCA9IExDUl9TVE9QXzE7CisJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAxIiwgX19GVU5DVElPTl9fKTsKKwl9CisKKwkvKiBmaWd1cmUgb3V0IHRoZSBmbG93IGNvbnRyb2wgc2V0dGluZ3MgKi8KKwlyeEZsb3cgPSB0eEZsb3cgPSAweDAwOworCWlmIChjZmxhZyAmIENSVFNDVFMpIHsKKwkJcnhGbG93IHw9IElPU1BfUlhfRkxPV19SVFM7CisJCXR4RmxvdyB8PSBJT1NQX1RYX0ZMT1dfQ1RTOworCQlkYmcoIiVzIC0gUlRTL0NUUyBpcyBlbmFibGVkIiwgX19GVU5DVElPTl9fKTsKKwl9IGVsc2UgeworCQlkYmcoIiVzIC0gUlRTL0NUUyBpcyBkaXNhYmxlZCIsIF9fRlVOQ1RJT05fXyk7CisJfQorCisJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBYT04vWE9GRiwgc2V0IHRoZSBzdGFydCBhbmQgc3RvcCBjaGFyYWN0ZXIgaW4gdGhlIGRldmljZSAqLworCWlmIChJX0lYT0ZGKHR0eSkgfHwgSV9JWE9OKHR0eSkpIHsKKwkJdW5zaWduZWQgY2hhciBzdG9wX2NoYXIgID0gU1RPUF9DSEFSKHR0eSk7CisJCXVuc2lnbmVkIGNoYXIgc3RhcnRfY2hhciA9IFNUQVJUX0NIQVIodHR5KTsKKworCQlzZW5kX2lvc3BfZXh0X2NtZCAoZWRnZV9wb3J0LCBJT1NQX0NNRF9TRVRfWE9OX0NIQVIsIHN0YXJ0X2NoYXIpOworCQlzZW5kX2lvc3BfZXh0X2NtZCAoZWRnZV9wb3J0LCBJT1NQX0NNRF9TRVRfWE9GRl9DSEFSLCBzdG9wX2NoYXIpOworCisJCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgSU5CT1VORCBYT04vWE9GRiAqLworCQlpZiAoSV9JWE9GRih0dHkpKSB7CisJCQlyeEZsb3cgfD0gSU9TUF9SWF9GTE9XX1hPTl9YT0ZGOworCQkJZGJnKCIlcyAtIElOQk9VTkQgWE9OL1hPRkYgaXMgZW5hYmxlZCwgWE9OID0gJTJ4LCBYT0ZGID0gJTJ4IiwgX19GVU5DVElPTl9fLCBzdGFydF9jaGFyLCBzdG9wX2NoYXIpOworCQl9IGVsc2UgeworCQkJZGJnKCIlcyAtIElOQk9VTkQgWE9OL1hPRkYgaXMgZGlzYWJsZWQiLCBfX0ZVTkNUSU9OX18pOworCQl9CisKKwkJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBPVVRCT1VORCBYT04vWE9GRiAqLworCQlpZiAoSV9JWE9OKHR0eSkpIHsKKwkJCXR4RmxvdyB8PSBJT1NQX1RYX0ZMT1dfWE9OX1hPRkY7CisJCQlkYmcoIiVzIC0gT1VUQk9VTkQgWE9OL1hPRkYgaXMgZW5hYmxlZCwgWE9OID0gJTJ4LCBYT0ZGID0gJTJ4IiwgX19GVU5DVElPTl9fLCBzdGFydF9jaGFyLCBzdG9wX2NoYXIpOworCQl9IGVsc2UgeworCQkJZGJnKCIlcyAtIE9VVEJPVU5EIFhPTi9YT0ZGIGlzIGRpc2FibGVkIiwgX19GVU5DVElPTl9fKTsKKwkJfQorCX0KKworCS8qIFNldCBmbG93IGNvbnRyb2wgdG8gdGhlIGNvbmZpZ3VyZWQgdmFsdWUgKi8KKwlzZW5kX2lvc3BfZXh0X2NtZCAoZWRnZV9wb3J0LCBJT1NQX0NNRF9TRVRfUlhfRkxPVywgcnhGbG93KTsKKwlzZW5kX2lvc3BfZXh0X2NtZCAoZWRnZV9wb3J0LCBJT1NQX0NNRF9TRVRfVFhfRkxPVywgdHhGbG93KTsKKworCisJZWRnZV9wb3J0LT5zaGFkb3dMQ1IgJj0gfihMQ1JfQklUU19NQVNLIHwgTENSX1NUT1BfTUFTSyB8IExDUl9QQVJfTUFTSyk7CisJZWRnZV9wb3J0LT5zaGFkb3dMQ1IgfD0gKGxEYXRhIHwgbFBhcml0eSB8IGxTdG9wKTsKKworCWVkZ2VfcG9ydC0+dmFsaWREYXRhTWFzayA9IG1hc2s7CisKKwkvKiBTZW5kIHRoZSB1cGRhdGVkIExDUiB2YWx1ZSB0byB0aGUgRWRnZVBvcnQgKi8KKwlzdGF0dXMgPSBzZW5kX2NtZF93cml0ZV91YXJ0X3JlZ2lzdGVyKGVkZ2VfcG9ydCwgTENSLCBlZGdlX3BvcnQtPnNoYWRvd0xDUik7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXJldHVybjsKKwl9CisKKwkvKiBzZXQgdXAgdGhlIE1DUiByZWdpc3RlciBhbmQgc2VuZCBpdCB0byB0aGUgRWRnZVBvcnQgKi8KKwllZGdlX3BvcnQtPnNoYWRvd01DUiA9IE1DUl9NQVNURVJfSUU7CisJaWYgKGNmbGFnICYgQ0JBVUQpIHsKKwkJZWRnZV9wb3J0LT5zaGFkb3dNQ1IgfD0gKE1DUl9EVFIgfCBNQ1JfUlRTKTsKKwl9CisJc3RhdHVzID0gc2VuZF9jbWRfd3JpdGVfdWFydF9yZWdpc3RlcihlZGdlX3BvcnQsIE1DUiwgZWRnZV9wb3J0LT5zaGFkb3dNQ1IpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlyZXR1cm47CisJfQorCisJLyogRGV0ZXJtaW5lIGRpdmlzb3IgYmFzZWQgb24gYmF1ZCByYXRlICovCisJYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CisJaWYgKCFiYXVkKSB7CisJCS8qIHBpY2sgYSBkZWZhdWx0LCBhbnkgZGVmYXVsdC4uLiAqLworCQliYXVkID0gOTYwMDsKKwl9CisKKwlkYmcoIiVzIC0gYmF1ZCByYXRlID0gJWQiLCBfX0ZVTkNUSU9OX18sIGJhdWQpOworCXN0YXR1cyA9IHNlbmRfY21kX3dyaXRlX2JhdWRfcmF0ZSAoZWRnZV9wb3J0LCBiYXVkKTsKKworCXJldHVybjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogdW5pY29kZV90b19hc2NpaQorICoJVHVybnMgYSBzdHJpbmcgZnJvbSBVbmljb2RlIGludG8gQVNDSUkuCisgKglEb2Vzbid0IGRvIGEgZ29vZCBqb2Igd2l0aCBhbnkgY2hhcmFjdGVycyB0aGF0IGFyZSBvdXRzaWRlIHRoZSBub3JtYWwKKyAqCUFTQ0lJIHJhbmdlLCBidXQgaXQncyBvbmx5IGZvciBkZWJ1Z2dpbmcuLi4KKyAqCU5PVEU6IGV4cGVjdHMgdGhlIHVuaWNvZGUgaW4gTEUgZm9ybWF0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIHVuaWNvZGVfdG9fYXNjaWkgKGNoYXIgKnN0cmluZywgX19sZTE2ICp1bmljb2RlLCBpbnQgdW5pY29kZV9zaXplKQoreworCWludCBpOworCisJaWYgKHVuaWNvZGVfc2l6ZSA8PSAwKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgdW5pY29kZV9zaXplOyArK2kpCisJCXN0cmluZ1tpXSA9IChjaGFyKShsZTE2X3RvX2NwdSh1bmljb2RlW2ldKSk7CisJc3RyaW5nW3VuaWNvZGVfc2l6ZV0gPSAweDAwOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBnZXRfbWFudWZhY3R1cmluZ19kZXNjCisgKglyZWFkcyBpbiB0aGUgbWFudWZhY3R1cmluZyBkZXNjcmlwdG9yIGFuZCBzdG9yZXMgaXQgaW50byB0aGUgc2VyaWFsIAorICoJc3RydWN0dXJlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBnZXRfbWFudWZhY3R1cmluZ19kZXNjIChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCkKK3sKKwlpbnQgcmVzcG9uc2U7CisKKwlkYmcoImdldHRpbmcgbWFudWZhY3R1cmVyIGRlc2NyaXB0b3IiKTsKKworCXJlc3BvbnNlID0gcm9tX3JlYWQgKGVkZ2Vfc2VyaWFsLT5zZXJpYWwsIChFREdFX01BTlVGX0RFU0NfQUREUiAmIDB4ZmZmZjAwMDApID4+IDE2LCAKKwkJCSAgICAoX191MTYpKEVER0VfTUFOVUZfREVTQ19BRERSICYgMHgwMDAwZmZmZiksIEVER0VfTUFOVUZfREVTQ19MRU4sCisJCQkgICAgKF9fdTggKikoJmVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yKSk7CisKKwlpZiAocmVzcG9uc2UgPCAxKSB7CisJCWRldl9lcnIoJmVkZ2Vfc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCAiZXJyb3IgaW4gZ2V0dGluZyBtYW51ZmFjdHVyZXIgZGVzY3JpcHRvclxuIik7CisJfSBlbHNlIHsKKwkJY2hhciBzdHJpbmdbMzBdOworCQlkYmcoIioqTWFudWZhY3R1cmVyIERlc2NyaXB0b3IiKTsKKwkJZGJnKCIgIFJvbVNpemU6ICAgICAgICAlZEsiLCBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5Sb21TaXplKTsKKwkJZGJnKCIgIFJhbVNpemU6ICAgICAgICAlZEsiLCBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5SYW1TaXplKTsKKwkJZGJnKCIgIENwdVJldjogICAgICAgICAlZCIsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLkNwdVJldik7CisJCWRiZygiICBCb2FyZFJldjogICAgICAgJWQiLCBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5Cb2FyZFJldik7CisJCWRiZygiICBOdW1Qb3J0czogICAgICAgJWQiLCBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5OdW1Qb3J0cyk7CisJCWRiZygiICBEZXNjRGF0ZTogICAgICAgJWQvJWQvJWQiLCBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5EZXNjRGF0ZVswXSwgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuRGVzY0RhdGVbMV0sIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLkRlc2NEYXRlWzJdKzE5MDApOworCQl1bmljb2RlX3RvX2FzY2lpIChzdHJpbmcsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLlNlcmlhbE51bWJlciwgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuU2VyTnVtTGVuZ3RoLzItMSk7CisJCWRiZygiICBTZXJpYWxOdW1iZXI6ICVzIiwgc3RyaW5nKTsKKwkJdW5pY29kZV90b19hc2NpaSAoc3RyaW5nLCBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5Bc3NlbWJseU51bWJlciwgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuQXNzZW1ibHlOdW1MZW5ndGgvMi0xKTsKKwkJZGJnKCIgIEFzc2VtYmx5TnVtYmVyOiAlcyIsIHN0cmluZyk7CisJCXVuaWNvZGVfdG9fYXNjaWkgKHN0cmluZywgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuT2VtQXNzeU51bWJlciwgZWRnZV9zZXJpYWwtPm1hbnVmX2Rlc2NyaXB0b3IuT2VtQXNzeU51bUxlbmd0aC8yLTEpOworCQlkYmcoIiAgT2VtQXNzeU51bWJlcjogICVzIiwgc3RyaW5nKTsKKwkJZGJnKCIgIFVhcnRUeXBlOiAgICAgICAlZCIsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLlVhcnRUeXBlKTsKKwkJZGJnKCIgIElvblBpZDogICAgICAgICAlZCIsIGVkZ2Vfc2VyaWFsLT5tYW51Zl9kZXNjcmlwdG9yLklvblBpZCk7CisJCWRiZygiICBJb25Db25maWc6ICAgICAgJWQiLCBlZGdlX3NlcmlhbC0+bWFudWZfZGVzY3JpcHRvci5Jb25Db25maWcpOworCX0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZ2V0X2Jvb3RfZGVzYworICoJcmVhZHMgaW4gdGhlIGJvb3Rsb2FkZXIgZGVzY3JpcHRvciBhbmQgc3RvcmVzIGl0IGludG8gdGhlIHNlcmlhbCAKKyAqCXN0cnVjdHVyZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgZ2V0X2Jvb3RfZGVzYyAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwpCit7CisJaW50IHJlc3BvbnNlOworCisJZGJnKCJnZXR0aW5nIGJvb3QgZGVzY3JpcHRvciIpOworCisJcmVzcG9uc2UgPSByb21fcmVhZCAoZWRnZV9zZXJpYWwtPnNlcmlhbCwgKEVER0VfQk9PVF9ERVNDX0FERFIgJiAweGZmZmYwMDAwKSA+PiAxNiwgCisJCQkgICAgKF9fdTE2KShFREdFX0JPT1RfREVTQ19BRERSICYgMHgwMDAwZmZmZiksIEVER0VfQk9PVF9ERVNDX0xFTiwKKwkJCSAgICAoX191OCAqKSgmZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvcikpOworCisJaWYgKHJlc3BvbnNlIDwgMSkgeworCQlkZXZfZXJyKCZlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwgImVycm9yIGluIGdldHRpbmcgYm9vdCBkZXNjcmlwdG9yXG4iKTsKKwl9IGVsc2UgeworCQlkYmcoIioqQm9vdCBEZXNjcmlwdG9yOiIpOworCQlkYmcoIiAgQm9vdENvZGVMZW5ndGg6ICVkIiwgbGUxNl90b19jcHUoZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5Cb290Q29kZUxlbmd0aCkpOworCQlkYmcoIiAgTWFqb3JWZXJzaW9uOiAgICVkIiwgZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5NYWpvclZlcnNpb24pOworCQlkYmcoIiAgTWlub3JWZXJzaW9uOiAgICVkIiwgZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5NaW5vclZlcnNpb24pOworCQlkYmcoIiAgQnVpbGROdW1iZXI6ICAgICVkIiwgbGUxNl90b19jcHUoZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5CdWlsZE51bWJlcikpOworCQlkYmcoIiAgQ2FwYWJpbGl0aWVzOiAgIDB4JXgiLCBsZTE2X3RvX2NwdShlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLkNhcGFiaWxpdGllcykpOworCQlkYmcoIiAgVUNvbmZpZzA6ICAgICAgICVkIiwgZWRnZV9zZXJpYWwtPmJvb3RfZGVzY3JpcHRvci5VQ29uZmlnMCk7CisJCWRiZygiICBVQ29uZmlnMTogICAgICAgJWQiLCBlZGdlX3NlcmlhbC0+Ym9vdF9kZXNjcmlwdG9yLlVDb25maWcxKTsKKwl9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGxvYWRfYXBwbGljYXRpb25fZmlybXdhcmUKKyAqCVRoaXMgaXMgY2FsbGVkIHRvIGxvYWQgdGhlIGFwcGxpY2F0aW9uIGZpcm13YXJlIHRvIHRoZSBkZXZpY2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgbG9hZF9hcHBsaWNhdGlvbl9maXJtd2FyZSAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWwpCit7CisJc3RydWN0IGVkZ2VfZmlybXdhcmVfaW1hZ2VfcmVjb3JkICpyZWNvcmQ7CisJdW5zaWduZWQgY2hhciAqZmlybXdhcmU7CisJdW5zaWduZWQgY2hhciAqRmlybXdhcmVJbWFnZTsKKwlpbnQgSW1hZ2VTaXplOworCWludCByZXNwb25zZTsKKworCisJc3dpdGNoIChlZGdlX3NlcmlhbC0+cHJvZHVjdF9pbmZvLmlEb3dubG9hZEZpbGUpIHsKKwkJY2FzZSBFREdFX0RPV05MT0FEX0ZJTEVfSTkzMDoKKwkJCWRiZygiZG93bmxvYWRpbmcgZmlybXdhcmUgdmVyc2lvbiAoOTMwKSAlZC4lZC4lZCIsIAorCQkJICAgIE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbl9HRU4xLk1ham9yVmVyc2lvbiwgCisJCQkgICAgT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uX0dFTjEuTWlub3JWZXJzaW9uLCAKKwkJCSAgICBPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb25fR0VOMS5CdWlsZE51bWJlcik7CisJCQlmaXJtd2FyZSA9ICZPcGVyYXRpb25hbENvZGVJbWFnZV9HRU4xWzBdOworCQkJRmlybXdhcmVJbWFnZSA9ICZPcGVyYXRpb25hbENvZGVJbWFnZV9HRU4xWzBdOworCQkJSW1hZ2VTaXplID0gc2l6ZW9mKE9wZXJhdGlvbmFsQ29kZUltYWdlX0dFTjEpOworCQkJYnJlYWs7CisKKwkJY2FzZSBFREdFX0RPV05MT0FEX0ZJTEVfODAyNTE6CisJCQlkYmcoImRvd25sb2FkaW5nIGZpcm13YXJlIHZlcnNpb24gKDgwMjUxKSAlZC4lZC4lZCIsIAorCQkJICAgIE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbl9HRU4yLk1ham9yVmVyc2lvbiwgCisJCQkgICAgT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uX0dFTjIuTWlub3JWZXJzaW9uLCAKKwkJCSAgICBPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb25fR0VOMi5CdWlsZE51bWJlcik7CisJCQlmaXJtd2FyZSA9ICZPcGVyYXRpb25hbENvZGVJbWFnZV9HRU4yWzBdOworCQkJRmlybXdhcmVJbWFnZSA9ICZPcGVyYXRpb25hbENvZGVJbWFnZV9HRU4yWzBdOworCQkJSW1hZ2VTaXplID0gc2l6ZW9mKE9wZXJhdGlvbmFsQ29kZUltYWdlX0dFTjIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBFREdFX0RPV05MT0FEX0ZJTEVfTk9ORToKKwkJCWRiZyAgICAgKCJObyBkb3dubG9hZCBmaWxlIHNwZWNpZmllZCwgc2tpcHBpbmcgZG93bmxvYWRcbiIpOworCQkJcmV0dXJuOworCisJCWRlZmF1bHQ6CisJCQlyZXR1cm47CisJfQorCisKKwlmb3IgKDs7KSB7CisJCXJlY29yZCA9IChzdHJ1Y3QgZWRnZV9maXJtd2FyZV9pbWFnZV9yZWNvcmQgKilmaXJtd2FyZTsKKwkJcmVzcG9uc2UgPSBzcmFtX3dyaXRlIChlZGdlX3NlcmlhbC0+c2VyaWFsLCBsZTE2X3RvX2NwdShyZWNvcmQtPkV4dEFkZHIpLCBsZTE2X3RvX2NwdShyZWNvcmQtPkFkZHIpLCBsZTE2X3RvX2NwdShyZWNvcmQtPkxlbiksICZyZWNvcmQtPkRhdGFbMF0pOworCQlpZiAocmVzcG9uc2UgPCAwKSB7CisJCQlkZXZfZXJyKCZlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwgInNyYW1fd3JpdGUgZmFpbGVkICgleCwgJXgsICVkKVxuIiwgbGUxNl90b19jcHUocmVjb3JkLT5FeHRBZGRyKSwgbGUxNl90b19jcHUocmVjb3JkLT5BZGRyKSwgbGUxNl90b19jcHUocmVjb3JkLT5MZW4pKTsKKwkJCWJyZWFrOworCQl9CisJCWZpcm13YXJlICs9IHNpemVvZiAoc3RydWN0IGVkZ2VfZmlybXdhcmVfaW1hZ2VfcmVjb3JkKSArIGxlMTZfdG9fY3B1KHJlY29yZC0+TGVuKTsKKwkJaWYgKGZpcm13YXJlID49ICZGaXJtd2FyZUltYWdlW0ltYWdlU2l6ZV0pIHsKKwkJCWJyZWFrOworCQl9CisJfQorCisJZGJnKCJzZW5kaW5nIGV4ZWNfZGxfY29kZSIpOworCXJlc3BvbnNlID0gdXNiX2NvbnRyb2xfbXNnIChlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYsIAorCQkJCSAgICB1c2Jfc25kY3RybHBpcGUoZWRnZV9zZXJpYWwtPnNlcmlhbC0+ZGV2LCAwKSwgCisJCQkJICAgIFVTQl9SRVFVRVNUX0lPTl9FWEVDX0RMX0NPREUsIAorCQkJCSAgICAweDQwLCAweDQwMDAsIDB4MDAwMSwgTlVMTCwgMCwgMzAwMCk7CisKKwlyZXR1cm47Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGVkZ2Vfc3RhcnR1cAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGVkZ2Vfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbDsKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0OworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJaW50IGk7CisKKwlkZXYgPSBzZXJpYWwtPmRldjsKKworCS8qIGNyZWF0ZSBvdXIgcHJpdmF0ZSBzZXJpYWwgc3RydWN0dXJlICovCisJZWRnZV9zZXJpYWwgPSBrbWFsbG9jIChzaXplb2Yoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCksIEdGUF9LRVJORUwpOworCWlmIChlZGdlX3NlcmlhbCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQgKGVkZ2Vfc2VyaWFsLCAwLCBzaXplb2Yoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCkpOworCXNwaW5fbG9ja19pbml0KCZlZGdlX3NlcmlhbC0+ZXNfbG9jayk7CisJZWRnZV9zZXJpYWwtPnNlcmlhbCA9IHNlcmlhbDsKKwl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgZWRnZV9zZXJpYWwpOworCisJLyogZ2V0IHRoZSBuYW1lIGZvciB0aGUgZGV2aWNlIGZyb20gdGhlIGRldmljZSAqLworCWlmICggKGkgPSBnZXRfc3RyaW5nKGRldiwgZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIsICZlZGdlX3NlcmlhbC0+bmFtZVswXSkpICE9IDApIHsKKwkJZWRnZV9zZXJpYWwtPm5hbWVbaS0xXSA9ICcgJzsKKwl9CisKKwlnZXRfc3RyaW5nKGRldiwgZGV2LT5kZXNjcmlwdG9yLmlQcm9kdWN0LCAmZWRnZV9zZXJpYWwtPm5hbWVbaV0pOworCisJZGV2X2luZm8oJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyBkZXRlY3RlZFxuIiwgZWRnZV9zZXJpYWwtPm5hbWUpOworCisJLyogZ2V0IHRoZSBtYW51ZmFjdHVyaW5nIGRlc2NyaXB0b3IgZm9yIHRoaXMgZGV2aWNlICovCisJZ2V0X21hbnVmYWN0dXJpbmdfZGVzYyAoZWRnZV9zZXJpYWwpOworCisJLyogZ2V0IHRoZSBib290IGRlc2NyaXB0b3IgKi8KKwlnZXRfYm9vdF9kZXNjIChlZGdlX3NlcmlhbCk7CisKKwlnZXRfcHJvZHVjdF9pbmZvKGVkZ2Vfc2VyaWFsKTsKKworCS8qIHNldCB0aGUgbnVtYmVyIG9mIHBvcnRzIGZyb20gdGhlIG1hbnVmYWN0dXJpbmcgZGVzY3JpcHRpb24gKi8KKwkvKiBzZXJpYWwtPm51bV9wb3J0cyA9IHNlcmlhbC0+cHJvZHVjdF9pbmZvLk51bVBvcnRzOyAqLworCWlmIChlZGdlX3NlcmlhbC0+cHJvZHVjdF9pbmZvLk51bVBvcnRzICE9IHNlcmlhbC0+bnVtX3BvcnRzKSB7CisJCXdhcm4oIiVzIC0gRGV2aWNlIFJlcG9ydGVkICVkIHNlcmlhbCBwb3J0cyB2cyBjb3JlICIKKwkJICAgICAidGhpbmtpbmcgd2UgaGF2ZSAlZCBwb3J0cywgZW1haWwgZ3JlZ0Brcm9haC5jb20gdGhpcyBpbmZvLiIsCisJCSAgICAgX19GVU5DVElPTl9fLCBlZGdlX3NlcmlhbC0+cHJvZHVjdF9pbmZvLk51bVBvcnRzLCAKKwkJICAgICBzZXJpYWwtPm51bV9wb3J0cyk7CisJfQorCisJZGJnKCIlcyAtIHRpbWUgMSAlbGQiLCBfX0ZVTkNUSU9OX18sIGppZmZpZXMpOworCisJLyogbm93IGxvYWQgdGhlIGFwcGxpY2F0aW9uIGZpcm13YXJlIGludG8gdGhpcyBkZXZpY2UgKi8KKwlsb2FkX2FwcGxpY2F0aW9uX2Zpcm13YXJlIChlZGdlX3NlcmlhbCk7CisKKwlkYmcoIiVzIC0gdGltZSAyICVsZCIsIF9fRlVOQ1RJT05fXywgamlmZmllcyk7CisKKwkvKiBDaGVjayBjdXJyZW50IEVkZ2Vwb3J0IEVFUFJPTSBhbmQgdXBkYXRlIGlmIG5lY2Vzc2FyeSAqLworCXVwZGF0ZV9lZGdlcG9ydF9FMlBST00gKGVkZ2Vfc2VyaWFsKTsKKwkKKwlkYmcoIiVzIC0gdGltZSAzICVsZCIsIF9fRlVOQ1RJT05fXywgamlmZmllcyk7CisKKwkvKiBzZXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gdXNlICMxICovCisvLwlkYmcoInNldF9jb25maWd1cmF0aW9uIDEiKTsKKy8vCXVzYl9zZXRfY29uZmlndXJhdGlvbiAoZGV2LCAxKTsKKworCS8qIHdlIHNldCB1cCB0aGUgcG9pbnRlcnMgdG8gdGhlIGVuZHBvaW50cyBpbiB0aGUgZWRnZV9vcGVuIGZ1bmN0aW9uLCAKKwkgKiBhcyB0aGUgc3RydWN0dXJlcyBhcmVuJ3QgY3JlYXRlZCB5ZXQuICovCisKKwkvKiBzZXQgdXAgb3VyIHBvcnQgcHJpdmF0ZSBzdHJ1Y3R1cmVzICovCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJZWRnZV9wb3J0ID0ga21hbGxvYyAoc2l6ZW9mKHN0cnVjdCBlZGdlcG9ydF9wb3J0KSwgR0ZQX0tFUk5FTCk7CisJCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkgeworCQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzIC0gT3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCBOVUxMKTsKKwkJCWtmcmVlKGVkZ2Vfc2VyaWFsKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbXNldCAoZWRnZV9wb3J0LCAwLCBzaXplb2Yoc3RydWN0IGVkZ2Vwb3J0X3BvcnQpKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmVkZ2VfcG9ydC0+ZXBfbG9jayk7CisJCWVkZ2VfcG9ydC0+cG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgZWRnZV9wb3J0KTsKKwl9CisJCisJcmV0dXJuIDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGVkZ2Vfc2h1dGRvd24KKyAqCVRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSBkZXZpY2UgaXMgcmVtb3ZlZCBmcm9tIHRoZSB1c2IgYnVzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBlZGdlX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCBpOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBzdG9wIHJlYWRzIGFuZCB3cml0ZXMgb24gYWxsIHBvcnRzICovCisJZm9yIChpPTA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCWtmcmVlICh1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldKSk7CisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sICBOVUxMKTsKKwl9CisJa2ZyZWUgKHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKSk7CisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIE5VTEwpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBlZGdlcG9ydF9pbml0CisgKglUaGlzIGlzIGNhbGxlZCBieSB0aGUgbW9kdWxlIHN1YnN5c3RlbSwgb3Igb24gc3RhcnR1cCB0byBpbml0aWFsaXplIHVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgX19pbml0IGVkZ2Vwb3J0X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmZWRnZXBvcnRfMnBvcnRfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF8ycG9ydF9kZXZpY2VfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmZWRnZXBvcnRfNHBvcnRfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF80cG9ydF9kZXZpY2VfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmZWRnZXBvcnRfOHBvcnRfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF84cG9ydF9kZXZpY2VfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZpb19kcml2ZXIpOworCWlmIChyZXR2YWwpIAorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiAwOworCitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZWRnZXBvcnRfOHBvcnRfZGV2aWNlKTsKK2ZhaWxlZF84cG9ydF9kZXZpY2VfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZlZGdlcG9ydF80cG9ydF9kZXZpY2UpOworZmFpbGVkXzRwb3J0X2RldmljZV9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmVkZ2Vwb3J0XzJwb3J0X2RldmljZSk7CitmYWlsZWRfMnBvcnRfZGV2aWNlX3JlZ2lzdGVyOgorCXJldHVybiByZXR2YWw7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGVkZ2Vwb3J0X2V4aXQKKyAqCUNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgaXMgYWJvdXQgdG8gYmUgdW5sb2FkZWQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBlZGdlcG9ydF9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgmaW9fZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZlZGdlcG9ydF8ycG9ydF9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmVkZ2Vwb3J0XzRwb3J0X2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmZWRnZXBvcnRfOHBvcnRfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoZWRnZXBvcnRfaW5pdCk7Cittb2R1bGVfZXhpdChlZGdlcG9ydF9leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CisKK21vZHVsZV9wYXJhbShsb3dfbGF0ZW5jeSwgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhsb3dfbGF0ZW5jeSwgIkxvdyBsYXRlbmN5IGVuYWJsZWQgb3Igbm90Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMTJkN2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuaApAQCAtMCwwICsxLDE0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCWlvX2VkZ2Vwb3J0LmgJRWRnZXBvcnQgTGludXggSW50ZXJmYWNlIGRlZmluaXRpb25zCisgKgorICoJQ29weXJpZ2h0IChDKSAyMDAwIEluc2lkZSBPdXQgTmV0d29ya3MsIEluYy4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIWRlZmluZWQoX0lPX0VER0VQT1JUX0hfKQorI2RlZmluZQlfSU9fRURHRVBPUlRfSF8KKworCisjZGVmaW5lIE1BWF9SUzIzMl9QT1JUUwkJOAkvKiBNYXggIyBvZiBSUy0yMzIgcG9ydHMgcGVyIGRldmljZSAqLworCisvKiB0eXBlZGVmcyB0aGF0IHRoZSBpbnNpZGVvdXQgaGVhZGVycyBuZWVkICovCisjaWZuZGVmIFRSVUUKKwkjZGVmaW5lIFRSVUUJCSgxKQorI2VuZGlmCisjaWZuZGVmIEZBTFNFCisJI2RlZmluZSBGQUxTRQkJKDApCisjZW5kaWYKKyNpZm5kZWYgTE9XOAorCSNkZWZpbmUgTE9XOChhKQkJKCh1bnNpZ25lZCBjaGFyKShhICYgMHhmZikpCisjZW5kaWYKKyNpZm5kZWYgSElHSDgKKwkjZGVmaW5lIEhJR0g4KGEpCSgodW5zaWduZWQgY2hhcikoKGEgJiAweGZmMDApID4+IDgpKQorI2VuZGlmCisjaWZuZGVmIE5VTV9FTlRSSUVTCisJI2RlZmluZSBOVU1fRU5UUklFUyh4KQkoc2l6ZW9mKHgpL3NpemVvZigoeClbMF0pKQorI2VuZGlmCisKKyNpZm5kZWYgX19LRVJORUxfXworI2RlZmluZSBfX0tFUk5FTF9fCisjZW5kaWYKKworI2luY2x1ZGUgImlvX3VzYnZlbmQuaCIKKworCisKKy8qIFRoZSBmb2xsb3dpbmcgdGFibGUgaXMgdXNlZCB0byBtYXAgdGhlIFVTQnggcG9ydCBudW1iZXIgdG8gCisgKiB0aGUgZGV2aWNlIHNlcmlhbCBudW1iZXIgKG9yIHBoeXNpY2FsIFVTQiBwYXRoKSwgKi8KKyNkZWZpbmUgTUFYX0VER0VQT1JUUwk2NAorCitzdHJ1Y3QgY29tTWFwcGVyIHsKKwljaGFyCVNlcmlhbE51bWJlcltNQVhfU0VSSUFMTlVNQkVSX0xFTisxXTsJLyogU2VyaWFsIG51bWJlci91c2IgcGF0aCAqLworCWludAludW1Qb3J0czsJCQkgICAgICAgCS8qIE51bWJlciBvZiBwb3J0cyAqLworCWludAlPcmlnaW5hbFtNQVhfUlMyMzJfUE9SVFNdOwkgICAgICAgCS8qIFBvcnQgbnVtYmVycyBzZXQgYnkgSU9DVEwgKi8KKwlpbnQJUG9ydFtNQVhfUlMyMzJfUE9SVFNdOwkJICAgICAgIAkvKiBBY3R1YWwgdXNlZCBwb3J0IG51bWJlcnMgKi8KK307CisKKworI2RlZmluZSBFREdFUE9SVF9DT05GSUdfREVWSUNFICIvcHJvYy9lZGdlcG9ydCIKKworLyogL3Byb2MvZWRnZXBvcnQgSW50ZXJmYWNlCisgKiBUaGlzIGludGVyZmFjZSB1c2VzIHJlYWQvd3JpdGUvbHNlZWsgaW50ZXJmYWNlIHRvIHRhbGsgdG8gdGhlIGVkZ2Vwb3J0IGRyaXZlcgorICogdGhlIGZvbGxvd2luZyByZWFkIGZ1bmN0aW9ucyBhcmUgc3VwcG9ydGVkOiAqLworI2RlZmluZSBQUk9DX0dFVF9NQVBQSU5HX1RPX1BBVEggCTEKKyNkZWZpbmUgUFJPQ19HRVRfQ09NX0VOVFJZCQkyCisjZGVmaW5lIFBST0NfR0VUX0VER0VfTUFOVUZfREVTQ1JJUFRPUgkzCisjZGVmaW5lIFBST0NfR0VUX0JPT1RfREVTQ1JJUFRPUgk0CisjZGVmaW5lIFBST0NfR0VUX1BST0RVQ1RfSU5GTwkJNQorI2RlZmluZSBQUk9DX0dFVF9TVFJJTkdTCQk2CisjZGVmaW5lIFBST0NfR0VUX0NVUlJFTlRfQ09NX01BUFBJTkcJNworCisvKiBUaGUgcGFyYW1ldGVycyB0byB0aGUgbHNlZWsoKSBmb3IgdGhlIHJlYWQgaXM6ICovCisjZGVmaW5lIFBST0NfUkVBRF9TRVRVUChDb21tYW5kLCBBcmd1bWVudCkJKChDb21tYW5kKSArICgoQXJndW1lbnQpPDw4KSkKKworCisvKiB0aGUgZm9sbG93aW5nIHdyaXRlIGZ1bmN0aW9ucyBhcmUgc3VwcG9ydGVkOiAqLworI2RlZmluZSBQUk9DX1NFVF9DT01fTUFQUElORyAJCTEKKyNkZWZpbmUgUFJPQ19TRVRfQ09NX0VOVFJZCQkyCisKKworLyogVGhlIGZvbGxvd2luZyBzdHVyY3R1cmUgaXMgcGFzc2VkIHRvIHRoZSB3cml0ZSAqLworc3RydWN0IHByb2NXcml0ZSB7CisJaW50CUNvbW1hbmQ7CisJdW5pb24geworCQlzdHJ1Y3QgY29tTWFwcGVyCUVudHJ5OworCQlpbnQJCQlDb21NYXBwaW5nQmFzZWRPblVTQlBvcnQ7CS8qIEJvb2xlYW4gdmFsdWUgKi8KKwl9IHU7Cit9OworCisvKgorICoJUHJvZHVjdCBpbmZvcm1hdGlvbiByZWFkIGZyb20gdGhlIEVkZ2Vwb3J0CisgKi8KK3N0cnVjdCBlZGdlcG9ydF9wcm9kdWN0X2luZm8geworCV9fdTE2CVByb2R1Y3RJZDsJCQkvKiBQcm9kdWN0IElkZW50aWZpZXIgKi8KKwlfX3U4CU51bVBvcnRzOwkJCS8qIE51bWJlciBvZiBwb3J0cyBvbiBlZGdlcG9ydCAqLworCV9fdTgJUHJvZEluZm9WZXI7CQkJLyogV2hhdCB2ZXJzaW9uIG9mIHN0cnVjdHVyZSBpcyB0aGlzPyAqLworCisJX191MzIJSXNTZXJ2ZXIgICAgICAgIDoxOwkJLyogU2V0IGlmIFNlcnZlciAqLworCV9fdTMyCUlzUlMyMzIgICAgICAgICA6MTsJCS8qIFNldCBpZiBSUy0yMzIgcG9ydHMgZXhpc3QgKi8KKwlfX3UzMglJc1JTNDIyICAgICAgICAgOjE7CQkvKiBTZXQgaWYgUlMtNDIyIHBvcnRzIGV4aXN0ICovCisJX191MzIJSXNSUzQ4NSAgICAgICAgIDoxOwkJLyogU2V0IGlmIFJTLTQ4NSBwb3J0cyBleGlzdCAqLworCV9fdTMyCUlzUmVzZXJ2ZWQgICAgICA6Mjg7CQkvKiBSZXNlcnZlZCBmb3IgbGF0ZXIgZXhwYW5zaW9uICovCisKKwlfX3U4CVJvbVNpemU7CQkJLyogU2l6ZSBvZiBST00vRTJQUk9NIGluIEsgKi8KKwlfX3U4CVJhbVNpemU7CQkJLyogU2l6ZSBvZiBleHRlcm5hbCBSQU0gaW4gSyAqLworCV9fdTgJQ3B1UmV2OwkJCQkvKiBDUFUgcmV2aXNpb24gbGV2ZWwgKGNoZyBvbmx5IGlmIHMvdyB2aXNpYmxlKSAqLworCV9fdTgJQm9hcmRSZXY7CQkJLyogUENCIHJldmlzaW9uIGxldmVsIChjaGcgb25seSBpZiBzL3cgdmlzaWJsZSkgKi8KKworCV9fdTgJQm9vdE1ham9yVmVyc2lvbjsJCS8qIEJvb3QgRmlybXdhcmUgdmVyc2lvbjogeHguICovCisJX191OAlCb290TWlub3JWZXJzaW9uOwkJLyoJICAgCQkgIHl5LiAqLworCV9fbGUxNglCb290QnVpbGROdW1iZXI7CQkvKgkJICAgICAgCSAgenp6eiAoTEUgZm9ybWF0KSAqLworCisJX191OAlGaXJtd2FyZU1ham9yVmVyc2lvbjsJCS8qIE9wZXJhdGlvbmFsIEZpcm13YXJlIHZlcnNpb246eHguICovCisJX191OAlGaXJtd2FyZU1pbm9yVmVyc2lvbjsJCS8qCQkJCXl5LiAqLworCV9fbGUxNglGaXJtd2FyZUJ1aWxkTnVtYmVyOwkJLyoJCQkJenp6eiAoTEUgZm9ybWF0KSAqLworCisJX191OAlNYW51ZmFjdHVyZURlc2NEYXRlWzNdOwkJLyogTU0vREQvWVkgd2hlbiBkZXNjcmlwdG9yIHRlbXBsYXRlIHdhcyBjb21waWxlZCAqLworCV9fdTgJVW51c2VkMVsxXTsJCQkvKiBBdmFpbGFibGUgKi8KKworCV9fdTgJaURvd25sb2FkRmlsZTsJCQkvKiBXaGF0IHRvIGRvd25sb2FkIHRvIEVQaUMgZGV2aWNlICovCisJX191OAlVbnVzZWQyWzJdOwkJCS8qIEF2YWlsYWJsZSAqLworfTsKKworLyoKKyAqCUVkZ2Vwb3J0IFN0cmluZ2Jsb2NrIFN0cmluZyBsb2NhdGlvbnMKKyAqLworI2RlZmluZSBFREdFU1RSSU5HX01BTlVGTkFNRQkJMQkvKiBNYW51ZmFjdHVyZSBOYW1lICovCisjZGVmaW5lIEVER0VTVFJJTkdfUFJPRE5BTUUJCTIJLyogUHJvZHVjdCBOYW1lICovCisjZGVmaW5lIEVER0VTVFJJTkdfU0VSSUFMTlVNCQkzCS8qIFNlcmlhbCBOdW1iZXIgKi8KKyNkZWZpbmUgRURHRVNUUklOR19BU1NFTU5VTQkJNAkvKiBBc3NlbWJseSBOdW1iZXIgKi8KKyNkZWZpbmUgRURHRVNUUklOR19PRU1BU1NFTU5VTQkJNQkvKiBPRU0gQXNzZW1ibHkgTnVtYmVyICovCisjZGVmaW5lIEVER0VTVFJJTkdfTUFOVUZEQVRFCQk2CS8qIE1hbnVmYWN0dXJlIERhdGUgKi8KKyNkZWZpbmUgRURHRVNUUklOR19PUklHU0VSSUFMTlVNCTcJLyogU2VyaWFsIE51bWJlciAqLworCitzdHJ1Y3Qgc3RyaW5nX2Jsb2NrIHsKKwlfX3UxNglOdW1TdHJpbmdzOwkJCS8qIE51bWJlciBvZiBzdHJpbmdzIGluIGJsb2NrICovCisJX191MTYJU3RyaW5nc1sxXTsJCQkvKiBTdGFydCBvZiBzdHJpbmcgYmxvY2sgKi8KK307CisKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19md19ib290LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZndfYm9vdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OWZhZmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZndfYm9vdC5oCkBAIC0wLDAgKzEsNTU2IEBACisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyogRWRnZXBvcnQvNCBCaW5hcnkgSW1hZ2UKKy8vKiBHZW5lcmF0ZWQgYnkgSEVYMkMgdjEuMDYKKy8vKiBDb3B5cmlnaHQgKEMpIDE5OTggSW5zaWRlIE91dCBOZXR3b3JrcywgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLy8qCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisvLyoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKy8vKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKy8vSW1hZ2Ugc3RydWN0dXJlIGRlZmluaXRpb24KKyNpZiAhZGVmaW5lZChERUZJTkVEX0VER0VfRklSTVdBUkVfSU1BR0VfUkVDT1JEKQorI2RlZmluZSBERUZJTkVEX0VER0VfRklSTVdBUkVfSU1BR0VfUkVDT1JECisJc3RydWN0IGVkZ2VfZmlybXdhcmVfaW1hZ2VfcmVjb3JkIHsKKwkJX19sZTE2IEV4dEFkZHI7CisJCV9fbGUxNiBBZGRyOworCQlfX2xlMTYgTGVuOworCQl1bnNpZ25lZCBjaGFyICBEYXRhWzBdOworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisJc3RydWN0IGVkZ2VfZmlybXdhcmVfdmVyc2lvbl9pbmZvIHsKKwkJdW5zaWduZWQgY2hhcgkgTWFqb3JWZXJzaW9uOworCQl1bnNpZ25lZCBjaGFyICBNaW5vclZlcnNpb247CisJCXVuc2lnbmVkIHNob3J0IEJ1aWxkTnVtYmVyOworCX07CisKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoSU1BR0VfQVJSQVlfTkFNRSkKKyNkZWZpbmUgSU1BR0VfQVJSQVlfTkFNRQkJRmlybXdhcmVJbWFnZQorI2RlZmluZSBJTUFHRV9WRVJTSU9OX05BTUUJRmlybXdhcmVJbWFnZVZlcnNpb24KKyNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgY2hhciBJTUFHRV9BUlJBWV9OQU1FW10gPSB7CisKKy8vIFNlZ21lbnQgIzEsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMDAsIExlbmd0aCA2CisweGZmLDB4MDAsMHgwMCwweDAwLDB4MDYsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAzLCAKKworLy8gU2VnbWVudCAjMiwgU3RhcnQgQWRkcmVzcyAwMGZmMDAwYiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDBiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4MGIsIAorCisvLyBTZWdtZW50ICMzLCBTdGFydCBBZGRyZXNzIDAwZmYwMDEzLCBMZW5ndGggMworMHhmZiwweDAwLDB4MTMsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMSwgMHhiOCwgCisKKy8vIFNlZ21lbnQgIzQsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMWIsIExlbmd0aCAzCisweGZmLDB4MDAsMHgxYiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDFiLCAKKworLy8gU2VnbWVudCAjNSwgU3RhcnQgQWRkcmVzcyAwMGZmMDAyMywgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDIzLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4MjMsIAorCisvLyBTZWdtZW50ICM2LCBTdGFydCBBZGRyZXNzIDAwZmYwMDJiLCBMZW5ndGggMworMHhmZiwweDAwLDB4MmIsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgyYiwgCisKKy8vIFNlZ21lbnQgIzcsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMzMsIExlbmd0aCAzCisweGZmLDB4MDAsMHgzMywweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDMzLCAKKworLy8gU2VnbWVudCAjOCwgU3RhcnQgQWRkcmVzcyAwMGZmMDAzYiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDNiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4M2IsIAorCisvLyBTZWdtZW50ICM5LCBTdGFydCBBZGRyZXNzIDAwZmYwMDQzLCBMZW5ndGggMworMHhmZiwweDAwLDB4NDMsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMSwgMHhiZCwgCisKKy8vIFNlZ21lbnQgIzEwLCBTdGFydCBBZGRyZXNzIDAwZmYwMDRiLCBMZW5ndGggMworMHhmZiwweDAwLDB4NGIsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMSwgMHhkMCwgCisKKy8vIFNlZ21lbnQgIzExLCBTdGFydCBBZGRyZXNzIDAwZmYwMDUzLCBMZW5ndGggMworMHhmZiwweDAwLDB4NTMsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMSwgMHgyMSwgCisKKy8vIFNlZ21lbnQgIzEyLCBTdGFydCBBZGRyZXNzIDAwZmYwMDdiLCBMZW5ndGggMworMHhmZiwweDAwLDB4N2IsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHg3YiwgCisKKy8vIFNlZ21lbnQgIzEzLCBTdGFydCBBZGRyZXNzIDAwZmYwMDgwLCBMZW5ndGggMzU4CisweGZmLDB4MDAsMHg4MCwweDAwLDB4NjYsMHgwMSwKKyAgICAweDdlLCAweGIwLCAweDAwLCAweDdhLCAweGIzLCAweDNmLCAweGYyLCAweDdlLCAweGY4LCAweDAwLCAweDIzLCAweDdlLCAweDAwLCAweDAxLCAweDdlLCAweDEwLCAKKyAgICAweDAwLCAweDEyLCAweDA3LCAweDVmLCAweDY5LCAweDIwLCAweDAwLCAweDBhLCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDc4LCAweDA1LCAweDc1LCAweDkwLCAKKyAgICAweDBkLCAweDgwLCAweDAzLCAweDc1LCAweDkwLCAweDFkLCAweGQyLCAweGI1LCAweDdlLCAweDAwLCAweDAwLCAweGE1LCAweGQ4LCAweGZkLCAweDc1LCAweGE4LCAKKyAgICAweDAwLCAweDc1LCAweGIxLCAweDAwLCAweGE5LCAweGQ1LCAweDg3LCAweGNhLCAweDI5LCAweDEyLCAweDA5LCAweGNjLCAweDEyLCAweDA5LCAweGEwLCAweGY1LCAKKyAgICAweDA5LCAweDdhLCAweGExLCAweDIwLCAweDEyLCAweDAxLCAweGU2LCAweGRhLCAweDI5LCAweGE5LCAweGQwLCAweGM3LCAweDdlLCAweDAwLCAweDA1LCAweDdhLCAKKyAgICAweDAxLCAweGYxLCAweDc1LCAweGUxLCAweDEwLCAweGE5LCAweGQ3LCAweGY0LCAweGE5LCAweGQ3LCAweGU0LCAweGE1LCAweGQ4LCAweGYxLCAweDc1LCAweGYxLCAKKyAgICAweDAwLCAweDc1LCAweGUxLCAweDNmLCAweDc1LCAweGEyLCAweDAzLCAweDc1LCAweGEzLCAweDAwLCAweDc1LCAweGMwLCAweDAwLCAweDc1LCAweGMxLCAweDAwLCAKKyAgICAweGE5LCAweGQxLCAweGIxLCAweGE5LCAweGQwLCAweGIxLCAweGE5LCAweGQ1LCAweGQzLCAweGQyLCAweGFmLCAweGU0LCAweDdlLCAweDA0LCAweDI4LCAweDAwLCAKKyAgICAweDhkLCAweGVmLCAweDFiLCAweDA0LCAweDc4LCAweGZhLCAweDA0LCAweGE5LCAweDM0LCAweGQzLCAweDAzLCAweDMwLCAweGUwLCAweGVlLCAweGJlLCAweDI0LCAKKyAgICAweDAwLCAweDAwLCAweDc4LCAweDA1LCAweDYzLCAweDkwLCAweDMwLCAweDgwLCAweGUzLCAweGIyLCAweDk1LCAweDgwLCAweGRmLCAweGJlLCAweGIwLCAweDAyLCAKKyAgICAweDIyLCAweGMwLCAweGQwLCAweGE5LCAweDIwLCAweGRmLCAweDBmLCAweGE5LCAweDMxLCAweGRmLCAweDAzLCAweDAyLCAweDAxLCAweGI1LCAweDc1LCAweDA4LCAKKyAgICAweDAxLCAweDEyLCAweDA4LCAweDMzLCAweDgwLCAweGZlLCAweDc1LCAweDA4LCAweGZlLCAweDEyLCAweDA4LCAweDMzLCAweDc1LCAweGE4LCAweDAwLCAweDdlLCAKKyAgICAweGIzLCAweDNmLCAweGYyLCAweDMwLCAweGUwLCAweDRiLCAweDMwLCAweDAxLCAweDQ2LCAweGMyLCAweDkyLCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAKKyAgICAweDExLCAweDA5LCAweDc0LCAweDA4LCAweDE5LCAweGIyLCAweDAwLCAweDEwLCAweDc0LCAweDBlLCAweDE5LCAweGIyLCAweDAwLCAweDA0LCAweDJlLCAweDI0LCAKKyAgICAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweGVkLCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDA5LCAweGU0LCAweGQ1LCAweGUwLCAweGZkLCAKKyAgICAweDA5LCAweGIyLCAweDAwLCAweDA4LCAweDIwLCAweGUwLCAweDBhLCAweDA5LCAweGIyLCAweDAwLCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDgwLCAKKyAgICAweGViLCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweGU0LCAweDQzLCAweDkwLCAweDMwLCAweGQyLCAweGFhLCAweDgwLCAweDA1LCAweGQyLCAKKyAgICAweGFhLCAweDQzLCAweDkwLCAweDM0LCAweGQyLCAweGFmLCAweGE5LCAweGQxLCAweDg3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE5LCAweDExLCAKKyAgICAweGRmLCAweDAzLCAweGE5LCAweGQyLCAweGRmLCAweDc1LCAweDA4LCAweGZmLCAweDEyLCAweDA4LCAweDMzLCAweGMwLCAweGQxLCAweGNhLCAweDAyLCAweGZmLCAKKyAgICAweGNhLCAweDA2LCAweDgzLCAweDAwLCAweDMyLCAweGQwLCAweGQwLCAweDMyLCAweGMyLCAweDhiLCAweGMyLCAweGFhLCAweDMyLCAweDc1LCAweDA4LCAweDA4LCAKKyAgICAweDEyLCAweDA4LCAweDMzLCAweGE5LCAweGMwLCAweGIxLCAweGE5LCAweGM1LCAweGQzLCAweGE5LCAweGM2LCAweGQzLCAweGE5LCAweGQyLCAweGIxLCAweDMyLCAKKyAgICAweGNhLCAweGI4LCAweDc1LCAweDA4LCAweDAyLCAweDEyLCAweDA4LCAweDMzLCAweGU1LCAweGMwLCAweDU0LCAweDAzLCAweDY4LCAweDA1LCAweDEyLCAweDAxLCAKKyAgICAweGVlLCAweDgwLCAweGY1LCAweGRhLCAweGI4LCAweDMyLCAKKworLy8gU2VnbWVudCAjMTQsIFN0YXJ0IEFkZHJlc3MgMDBmZjFiY2EsIExlbmd0aCAxCisweGZmLDB4MDAsMHhjYSwweDFiLDB4MDEsMHgwMCwKKyAgICAweDAwLCAKKworLy8gU2VnbWVudCAjMTUsIFN0YXJ0IEFkZHJlc3MgMDBmZjAxZTYsIExlbmd0aCAxNjEzCisweGZmLDB4MDAsMHhlNiwweDAxLDB4NGQsMHgwNiwKKyAgICAweGU0LCAweDdhLCAweGIzLCAweDNmLCAweGYxLCAweDAyLCAweDAyLCAweDYzLCAweGNhLCAweDBiLCAweGNhLCAweDFiLCAweGNhLCAweDJiLCAweGNhLCAweDNiLCAKKyAgICAweGNhLCAweDRiLCAweGNhLCAweDViLCAweGNhLCAweDZiLCAweGNhLCAweDdiLCAweGNhLCAweGViLCAweGMwLCAweGYxLCAweDdlLCAweGIzLCAweDAxLCAweDJiLCAKKyAgICAweGI0LCAweDAwLCAweDAyLCAweDgwLCAweDE5LCAweGI0LCAweDAxLCAweDE2LCAweDMwLCAweGMwLCAweDA4LCAweDc1LCAweGYxLCAweDAwLCAweDEyLCAweDAyLCAKKyAgICAweDRkLCAweDgwLCAweDFmLCAweDMwLCAweGMxLCAweDFjLCAweDc1LCAweGYxLCAweDAwLCAweDEyLCAweDAyLCAweGRlLCAweDgwLCAweDE0LCAweDMwLCAweGMxLCAKKyAgICAweDA4LCAweDc1LCAweGYxLCAweDAwLCAweDEyLCAweDAyLCAweGRlLCAweDgwLCAweDA5LCAweDMwLCAweGMwLCAweDA2LCAweDc1LCAweGYxLCAweDAwLCAweDEyLCAKKyAgICAweDAyLCAweDRkLCAweGQwLCAweGYxLCAweGRhLCAweGViLCAweGRhLCAweDdiLCAweGRhLCAweDZiLCAweGRhLCAweDViLCAweGRhLCAweDRiLCAweGRhLCAweDNiLCAKKyAgICAweGRhLCAweDJiLCAweGRhLCAweDFiLCAweGRhLCAweDBiLCAweDIyLCAweGMyLCAweGMwLCAweDdlLCAweGIzLCAweDAxLCAweDJiLCAweGI0LCAweDAyLCAweDA3LCAKKyAgICAweDEyLCAweDAyLCAweDZmLCAweDAyLCAweDAyLCAweDYzLCAweDIyLCAweGI0LCAweDAxLCAweGZjLCAweDAyLCAweDAyLCAweGE5LCAweDdlLCAweDAwLCAweDAwLCAKKyAgICAweDdhLCAweDAzLCAweDAxLCAweDJiLCAweDdhLCAweDAzLCAweDAxLCAweDJjLCAweDIyLCAweDdlLCAweGIzLCAweDAxLCAweDIzLCAweDU0LCAweDYwLCAweDYwLCAKKyAgICAweDA1LCAweGI0LCAweDQwLCAweDE1LCAweDgwLCAweDEzLCAweDdlLCAweGIzLCAweDAxLCAweDI0LCAweGI0LCAweDA1LCAweDBjLCAweDc1LCAweDA4LCAweDcxLCAKKyAgICAweDEyLCAweDA4LCAweDMzLCAweDdlLCAweGIzLCAweDAxLCAweDI2LCAweGY1LCAweDhmLCAweDIyLCAweDc1LCAweGY2LCAweDAwLCAweDIyLCAweGJlLCAweDU3LCAKKyAgICAweDAxLCAweDI5LCAweDI4LCAweDA0LCAweDdlLCAweDU3LCAweDAxLCAweDI5LCAweDdhLCAweDBmLCAweDAxLCAweDJlLCAweDdhLCAweDU3LCAweDAxLCAweDMyLCAKKyAgICAweDAyLCAweDAyLCAweGE5LCAweDdlLCAweGVmLCAweDAxLCAweDJlLCAweDdlLCAweGY3LCAweDAxLCAweDMyLCAweDdlLCAweDA3LCAweDAxLCAweDMyLCAweDRkLCAKKyAgICAweDAwLCAweDY4LCAweDIxLCAweDdlLCAweDAwLCAweDAwLCAweDdlLCAweGViLCAweGIwLCAweGY1LCAweGYzLCAweGEzLCAweGE1LCAweDA4LCAweDFiLCAweGY0LCAKKyAgICAweDY4LCAweDA0LCAweGE1LCAweGI4LCAweDA4LCAweGYwLCAweDdhLCAweGVmLCAweDAxLCAweDJlLCAweDdhLCAweGY3LCAweDAxLCAweDMyLCAweDc1LCAweDA4LCAKKyAgICAweDA2LCAweDEyLCAweDA4LCAweDMzLCAweDdhLCAweDAxLCAweGY2LCAweDIyLCAweGMyLCAweGMxLCAweDc1LCAweDA4LCAweDAzLCAweDEyLCAweDA4LCAweDMzLCAKKyAgICAweGE5LCAweDM2LCAweGUyLCAweDE2LCAweGU1LCAweGY1LCAweDU0LCAweGMwLCAweDY4LCAweDA3LCAweGE5LCAweGQ3LCAweGY0LCAweGE5LCAweDI3LCAweGY0LCAKKyAgICAweGZjLCAweDUzLCAweGUxLCAweDNmLCAweDQzLCAweGYyLCAweDg4LCAweDAyLCAweDAzLCAweDU1LCAweDdlLCAweGIzLCAweDAxLCAweDJjLCAweGI0LCAweDAyLCAKKyAgICAweDBmLCAweGE5LCAweGQ0LCAweGU0LCAweDdlLCAweGIwLCAweDAwLCAweDdhLCAweGIzLCAweDAxLCAweDJjLCAweDdhLCAweGIzLCAweDAxLCAweDJiLCAweDIyLCAKKyAgICAweGI0LCAweDAxLCAweDM5LCAweDdlLCAweDIxLCAweGU2LCAweDdjLCAweDMyLCAweDdlLCAweDEzLCAweDAxLCAweDJkLCAweDJjLCAweDIxLCAweDdhLCAweDIzLCAKKyAgICAweDAxLCAweDJkLCAweDdlLCAweDAwLCAweDAwLCAweDJlLCAweDA0LCAweDAxLCAweDM0LCAweGU1LCAweGUzLCAweDdhLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAKKyAgICAweGE1LCAweGRiLCAweGY2LCAweGE5LCAweGQ0LCAweGU0LCAweDc1LCAweDA4LCAweDcwLCAweDEyLCAweDA4LCAweDMzLCAweDdlLCAweGIzLCAweDAxLCAweDJkLCAKKyAgICAweDdlLCAweGEzLCAweDAxLCAweDJhLCAweGJjLCAweGFiLCAweDc4LCAweDAzLCAweDEyLCAweDAzLCAweGVjLCAweDIyLCAweDAyLCAweDA3LCAweDU1LCAweGU1LCAKKyAgICAweGU2LCAweGI0LCAweDA4LCAweDY1LCAweGE5LCAweGM0LCAweGUyLCAweDdlLCAweDAxLCAweGUzLCAweDdlLCAweDExLCAweGUzLCAweDdlLCAweDMxLCAweGUzLCAKKyAgICAweDdlLCAweDIxLCAweGUzLCAweDdlLCAweDUxLCAweGUzLCAweDdlLCAweDQxLCAweGUzLCAweDdlLCAweDcxLCAweGUzLCAweDdlLCAweDYxLCAweGUzLCAweDdhLCAKKyAgICAweDBmLCAweDAxLCAweDIzLCAweDdhLCAweDFmLCAweDAxLCAweDI3LCAweDc1LCAweDA4LCAweDA0LCAweDEyLCAweDA4LCAweDMzLCAweDdhLCAweDAxLCAweDA4LCAKKyAgICAweDEyLCAweDA4LCAweDMzLCAweDdhLCAweDExLCAweDA4LCAweDEyLCAweDA4LCAweDMzLCAweDdhLCAweDIxLCAweDA4LCAweDEyLCAweDA4LCAweDMzLCAweDdhLCAKKyAgICAweDMxLCAweDA4LCAweDEyLCAweDA4LCAweDMzLCAweDdhLCAweDQxLCAweDA4LCAweDEyLCAweDA4LCAweDMzLCAweDdhLCAweDUxLCAweDA4LCAweDEyLCAweDA4LCAKKyAgICAweDMzLCAweDdhLCAweDYxLCAweDA4LCAweDEyLCAweDA4LCAweDMzLCAweDdhLCAweDcxLCAweDA4LCAweDEyLCAweDA4LCAweDMzLCAweGE5LCAweGQ0LCAweGU0LCAKKyAgICAweGE5LCAweGQ3LCAweGY0LCAweGE5LCAweGM2LCAweGUyLCAweDEyLCAweDAzLCAweGMwLCAweDIyLCAweDZkLCAweDAwLCAweDdlLCAweDE0LCAweDAxLCAweDAyLCAKKyAgICAweDdhLCAweDA3LCAweDAxLCAweDMyLCAweDdhLCAweDAzLCAweDAxLCAweDJkLCAweDdlLCAweGIzLCAweDAxLCAweDIzLCAweDIwLCAweGU3LCAweDBmLCAweDdhLCAKKyAgICAweDIzLCAweDAxLCAweDJjLCAweDdhLCAweDMzLCAweDAxLCAweDJiLCAweGJlLCAweDA3LCAweDAxLCAweDI5LCAweDY4LCAweDA5LCAweDIyLCAweDdhLCAweDMzLCAKKyAgICAweDAxLCAweDJjLCAweDdhLCAweDIzLCAweDAxLCAweDJiLCAweDdlLCAweGIzLCAweDAxLCAweDIzLCAweDU0LCAweGUzLCAweDIzLCAweDIzLCAweDMwLCAweGUwLCAKKyAgICAweDAyLCAweGQyLCAweGU1LCAweDMwLCAweGU3LCAweDAyLCAweGQyLCAweGU0LCAweDMwLCAweGU1LCAweDA2LCAweDMwLCAweGU0LCAweDAzLCAweDAyLCAweDA3LCAKKyAgICAweDU1LCAweDU0LCAweDNlLCAweGY1LCAweGYwLCAweDAzLCAweDU0LCAweDFmLCAweGMzLCAweDI1LCAweGYwLCAweDkwLCAweDA0LCAweDE4LCAweDc1LCAweDg0LCAKKyAgICAweGZmLCAweDczLCAweDAyLCAweDA1LCAweDZjLCAweDAyLCAweDA0LCAweDYwLCAweDAyLCAweDA2LCAweDA5LCAweDAyLCAweDA2LCAweDI0LCAweDAyLCAweDA1LCAKKyAgICAweDA1LCAweDAyLCAweDA0LCAweGM2LCAweDAyLCAweDA2LCAweDNkLCAweDAyLCAweDA2LCAweDNkLCAweDAyLCAweDA2LCAweDQwLCAweDAyLCAweDA2LCAweDQwLCAKKyAgICAweDAyLCAweDA2LCAweDQwLCAweDAyLCAweDA2LCAweDQwLCAweDAyLCAweDA2LCAweDQwLCAweDAyLCAweDA2LCAweDQwLCAweDAyLCAweDA2LCAweDQwLCAweDAyLCAKKyAgICAweDA2LCAweDQwLCAweDAyLCAweDA2LCAweDQ2LCAweDAyLCAweDA2LCAweGZhLCAweDAyLCAweDA2LCAweDQzLCAweDAyLCAweDA2LCAweDQzLCAweDAyLCAweDA2LCAKKyAgICAweDQzLCAweDAyLCAweDA2LCAweDQzLCAweDAyLCAweDA2LCAweDQzLCAweDAyLCAweDA2LCAweDQzLCAweDdlLCAweGIzLCAweDAxLCAweDI0LCAweGI0LCAweDA2LCAKKyAgICAweDJhLCAweDdlLCAweGIzLCAweDAxLCAweDI1LCAweDYwLCAweDU2LCAweDdjLCAweDBiLCAweDdlLCAweDEzLCAweDAxLCAweDI2LCAweDdlLCAweDE3LCAweDAxLCAKKyAgICAweDI3LCAweDc1LCAweDA4LCAweDcyLCAweDEyLCAweDA4LCAweDMzLCAweDdhLCAweDAxLCAweDA4LCAweDEyLCAweDA4LCAweDMzLCAweDdhLCAweDExLCAweDA4LCAKKyAgICAweDEyLCAweDA4LCAweDMzLCAweDEyLCAweDA3LCAweDVmLCAweDQwLCAweDM1LCAweDAyLCAweDAyLCAweDk0LCAweGI0LCAweDA4LCAweDEwLCAweDc1LCAweDA4LCAKKyAgICAweDc0LCAweDEyLCAweDA4LCAweDMzLCAweDdlLCAweGIzLCAweDNmLCAweGYxLCAweGY1LCAweGYzLCAweDc1LCAweGY2LCAweDAxLCAweDIyLCAweGI0LCAweDAwLCAKKyAgICAweDFjLCAweDc1LCAweDA4LCAweDc1LCAweDEyLCAweDA4LCAweDMzLCAweDdlLCAweGIzLCAweDNmLCAweGYyLCAweDMwLCAweGUwLCAweDA1LCAweDc1LCAweGYzLCAKKyAgICAweDAyLCAweDgwLCAweDAzLCAweDc1LCAweGYzLCAweDAwLCAweDc1LCAweGYzLCAweDAwLCAweDc1LCAweGY2LCAweDAyLCAweDIyLCAweDAyLCAweDA3LCAweDU1LCAKKyAgICAweDdlLCAweGIzLCAweDAxLCAweDI0LCAweGI0LCAweDAwLCAweDM1LCAweDc1LCAweDA4LCAweDc2LCAweDEyLCAweDA4LCAweDMzLCAweDdlLCAweGIzLCAweDAxLCAKKyAgICAweDI4LCAweDU0LCAweDBmLCAweGY1LCAweGYxLCAweDdlLCAweGIzLCAweDAxLCAweDI4LCAweDIwLCAweGU3LCAweDA5LCAweGU1LCAweGUxLCAweDMwLCAweGU3LCAKKyAgICAweDBkLCAweDc0LCAweDAxLCAweDgwLCAweDBiLCAweGU1LCAweGUxLCAweDMwLCAweGU2LCAweDA0LCAweDc0LCAweDAxLCAweDgwLCAweDAyLCAweDc0LCAweDAwLCAKKyAgICAweDUzLCAweGYxLCAweDgwLCAweGY1LCAweGYzLCAweDc1LCAweGYzLCAweDAwLCAweDc1LCAweGY2LCAweDAyLCAweDIyLCAweDAyLCAweDA3LCAweDU1LCAweGMwLCAKKyAgICAweGYxLCAweDdlLCAweGIzLCAweDAxLCAweDI4LCAweDU0LCAweDBmLCAweDQyLCAweGYxLCAweDdlLCAweGIzLCAweDAxLCAweDI2LCAweGI0LCAweDAwLCAweDQ1LCAKKyAgICAweDdlLCAweGIzLCAweDAxLCAweDI0LCAweGI0LCAweDAxLCAweDI0LCAweDc1LCAweDA4LCAweDc3LCAweDEyLCAweDA4LCAweDMzLCAweDdlLCAweGIzLCAweDAxLCAKKyAgICAweDI4LCAweDU0LCAweDBmLCAweDc4LCAweDA1LCAweDUzLCAweGUxLCAweDNmLCAweDgwLCAweDM3LCAweDdlLCAweGIzLCAweDAxLCAweDI4LCAweDIwLCAweGU3LCAKKyAgICAweDA1LCAweDUzLCAweGUxLCAweDdmLCAweDgwLCAweDJiLCAweDUzLCAweGUxLCAweGJmLCAweDgwLCAweDI2LCAweGI0LCAweDAzLCAweDE3LCAweDc1LCAweDA4LCAKKyAgICAweDc4LCAweDEyLCAweDA4LCAweDMzLCAweDdlLCAweGIzLCAweDAxLCAweDI4LCAweDIwLCAweGU3LCAweDA1LCAweDQzLCAweGUxLCAweDgwLCAweDgwLCAweDExLCAKKyAgICAweDQzLCAweGUxLCAweDQwLCAweDgwLCAweDBjLCAweDQzLCAweGUxLCAweGMwLCAweGQwLCAweGYxLCAweDc1LCAweDA4LCAweDA3LCAweDEyLCAweDA4LCAweDMzLCAKKyAgICAweDIyLCAweGQwLCAweGYxLCAweDAyLCAweDAyLCAweDkwLCAweDdlLCAweGIzLCAweDAxLCAweDI0LCAweGI0LCAweDA5LCAweDIzLCAweDc1LCAweDA4LCAweDc5LCAKKyAgICAweDEyLCAweDA4LCAweDMzLCAweDdlLCAweGIzLCAweDAxLCAweDI2LCAweGJlLCAweGIzLCAweDNmLCAweGYxLCAweDY4LCAweDExLCAweGNhLCAweGI4LCAweGMwLCAKKyAgICAweGYxLCAweDEyLCAweDAxLCAweDFkLCAweGQwLCAweGYxLCAweGRhLCAweGI4LCAweDUwLCAweDc2LCAweDdhLCAweGIzLCAweDNmLCAweGYxLCAweDgwLCAweDZkLCAKKyAgICAweGI0LCAweDA1LCAweDA4LCAweDc1LCAweDA4LCAweDdhLCAweDEyLCAweDA4LCAweDMzLCAweDgwLCAweDYyLCAweGI0LCAweDAzLCAweDE5LCAweDc1LCAweDA4LCAKKyAgICAweDdiLCAweDEyLCAweDA4LCAweDMzLCAweDdlLCAweGIzLCAweDAxLCAweDI2LCAweGI0LCAweDAxLCAweDU1LCAweDdlLCAweGIzLCAweDNmLCAweGYyLCAweDQ0LCAKKyAgICAweDAxLCAweDdhLCAweGIzLCAweDNmLCAweGYyLCAweDgwLCAweDQ2LCAweGI0LCAweDAxLCAweDE5LCAweDc1LCAweDA4LCAweDdjLCAweDEyLCAweDA4LCAweDMzLCAKKyAgICAweDdlLCAweGIzLCAweDAxLCAweDI2LCAweGI0LCAweDAxLCAweDM5LCAweDdlLCAweGIzLCAweDNmLCAweGYyLCAweDU0LCAweGZlLCAweDdhLCAweGIzLCAweDNmLCAKKyAgICAweGYyLCAweDgwLCAweDJhLCAweGI0LCAweDA3LCAweDJhLCAweDdlLCAweGIzLCAweDAxLCAweDI1LCAweDYwLCAweDI0LCAweDdjLCAweDBiLCAweDdlLCAweDEzLCAKKyAgICAweDAxLCAweDI2LCAweDdlLCAweDE3LCAweDAxLCAweDI3LCAweDc1LCAweDA4LCAweDczLCAweDEyLCAweDA4LCAweDMzLCAweDdhLCAweDAxLCAweDA4LCAweDEyLCAKKyAgICAweDA4LCAweDMzLCAweDdhLCAweDExLCAweDA4LCAweDEyLCAweDA4LCAweDMzLCAweDEyLCAweDA3LCAweDhiLCAweDQwLCAweDAzLCAweDAyLCAweDAyLCAweDkwLCAKKyAgICAweDAyLCAweDA3LCAweDU1LCAweDdlLCAweGIzLCAweDAxLCAweDI0LCAweGI0LCAweDBiLCAweGY2LCAweDc1LCAweDA4LCAweDdkLCAweDEyLCAweDA4LCAweDMzLCAKKyAgICAweDdlLCAweGIzLCAweDAxLCAweDI2LCAweDdlLCAweGEzLCAweDAxLCAweDI4LCAweDRjLCAweGFiLCAweDc4LCAweGU0LCAweDgwLCAweGRmLCAweDdlLCAweGIzLCAKKyAgICAweDAxLCAweDI0LCAweGI0LCAweDBhLCAweGRiLCAweDc1LCAweDA4LCAweDdlLCAweDEyLCAweDA4LCAweDMzLCAweDdlLCAweGIzLCAweDAxLCAweDI2LCAweDcwLCAKKyAgICAweGNmLCAweGY1LCAweGYzLCAweDc1LCAweGY2LCAweDAxLCAweDIyLCAweDAyLCAweDA3LCAweDU1LCAweDAyLCAweDA3LCAweDU1LCAweDAyLCAweDA3LCAweDU1LCAKKyAgICAweDdlLCAweGIzLCAweDAxLCAweDI0LCAweGI0LCAweDA0LCAweDIwLCAweDc1LCAweDA4LCAweGMzLCAweDEyLCAweDA4LCAweDMzLCAweDdlLCAweDA0LCAweDAwLCAKKyAgICAweDAxLCAweDdlLCAweDE3LCAweDAxLCAweDI1LCAweDdlLCAweDE4LCAweDAxLCAweDM0LCAweDdhLCAweDFjLCAweDAwLCAweDAwLCAweDdlLCAweDQ3LCAweDAxLCAKKyAgICAweDI5LCAweDEyLCAweDA4LCAweDNmLCAweDAyLCAweDA2LCAweGY0LCAweGI0LCAweDA2LCAweDNhLCAweDc1LCAweDA4LCAweGMxLCAweDEyLCAweDA4LCAweDMzLCAKKyAgICAweDdlLCAweDU4LCAweDAwLCAweDAwLCAweDdhLCAweDVjLCAweDAwLCAweGZlLCAweDdkLCAweGNhLCAweDdlLCAweGQ3LCAweDAxLCAweDI1LCAweDdlLCAweDc4LCAKKyAgICAweDAxLCAweDM0LCAweDdhLCAweDdjLCAweDAwLCAweDAwLCAweDdlLCAweDc3LCAweDAxLCAweDI5LCAweDc1LCAweDA4LCAweGMxLCAweDEyLCAweDA4LCAweDMzLCAKKyAgICAweGMwLCAweGE4LCAweGMwLCAweDg3LCAweGMyLCAweGFmLCAweGE5LCAweGQ1LCAweDg3LCAweDEyLCAweDA4LCAweGQ2LCAweGQwLCAweDg3LCAweGQwLCAweGE4LCAKKyAgICAweDQwLCAweDRmLCAweDgwLCAweDRhLCAweGI0LCAweDAwLCAweDFjLCAweGMyLCAweGFmLCAweGE5LCAweGQ1LCAweDg3LCAweDEyLCAweDAyLCAweDkwLCAweGU0LCAKKyAgICAweDhkLCAweGVmLCAweDhkLCAweGVmLCAweDhkLCAweGVmLCAweGQ1LCAweGUwLCAweGY3LCAweGMwLCAweGQxLCAweGNhLCAweDAyLCAweGZmLCAweGNhLCAweDA2LCAKKyAgICAweDAwLCAweDAwLCAweDMyLCAweGI0LCAweDA5LCAweDEyLCAweDdlLCAweDU3LCAweDAxLCAweDI1LCAweDRkLCAweDU1LCAweDY4LCAweDA1LCAweGE5LCAweGQyLCAKKyAgICAweGIxLCAweDgwLCAweDAzLCAweGE5LCAweGMyLCAweGIxLCAweDgwLCAweDE2LCAweGI0LCAweDA3LCAweDE2LCAweGMyLCAweGFmLCAweDdlLCAweDA3LCAweDAxLCAKKyAgICAweDI3LCAweDdlLCAweDE3LCAweDAxLCAweDI1LCAweGMwLCAweGQxLCAweGNhLCAweDE4LCAweGNhLCAweDM4LCAweGNhLCAweDI4LCAweDMyLCAweDAyLCAweDAyLCAKKyAgICAweDkwLCAweDAyLCAweDA3LCAweDU1LCAweDdlLCAweGIzLCAweDAxLCAweDI0LCAweGI0LCAweDAzLCAweDE1LCAweDc1LCAweDA4LCAweGMyLCAweDEyLCAweDA4LCAKKyAgICAweDMzLCAweDdlLCAweDA0LCAweDAwLCAweDAxLCAweDdlLCAweDE3LCAweDAxLCAweDI1LCAweDdlLCAweDU3LCAweDAxLCAweDI5LCAweDAyLCAweDAyLCAweDk0LCAKKyAgICAweGI0LCAweDA1LCAweDM5LCAweDc1LCAweDA4LCAweGMwLCAweDEyLCAweDA4LCAweDMzLCAweGMwLCAweGE4LCAweGMwLCAweDg3LCAweGMyLCAweGFmLCAweGE5LCAKKyAgICAweGQ1LCAweDg3LCAweDdlLCAweDA4LCAweDAxLCAweDM0LCAweDdhLCAweDBjLCAweDAwLCAweDAwLCAweDdlLCAweDI0LCAweDAwLCAweGZlLCAweDdlLCAweDM3LCAKKyAgICAweDAxLCAweDI1LCAweDdlLCAweDQ3LCAweDAxLCAweDI5LCAweDEyLCAweDA4LCAweDNmLCAweGQwLCAweDg3LCAweGQwLCAweGE4LCAweDdlLCAweDA4LCAweDAxLCAKKyAgICAweDM0LCAweDdhLCAweDBjLCAweDAwLCAweDAwLCAweDdlLCAweDU3LCAweDAxLCAweDI5LCAweDAyLCAweDAyLCAweDk0LCAweDAyLCAweDA3LCAweDU1LCAweDc1LCAKKyAgICAweDA4LCAweDA3LCAweDEyLCAweDA4LCAweDMzLCAweDQzLCAweGUxLCAweGMwLCAweDIyLCAweGMwLCAweGE4LCAweGMwLCAweDg3LCAweGMyLCAweGFmLCAweGE5LCAKKyAgICAweGQ1LCAweDg3LCAweDEyLCAweDA3LCAweGNhLCAweDQwLCAweDE5LCAweDdlLCAweDA4LCAweDAxLCAweDM0LCAweDdhLCAweDBjLCAweDAwLCAweDAwLCAweGNhLCAKKyAgICAweDBiLCAweGNhLCAweDQ5LCAweDEyLCAweDA4LCAweDNmLCAweGRhLCAweDU5LCAweGRhLCAweDBiLCAweGQwLCAweDg3LCAweGQwLCAweGE4LCAweGMzLCAweDIyLCAKKyAgICAweGQwLCAweDg3LCAweGQwLCAweGE4LCAweDIyLCAweGMwLCAweGE4LCAweGMwLCAweDg3LCAweGMyLCAweGFmLCAweGE5LCAweGQ1LCAweDg3LCAweDEyLCAweDA3LCAKKyAgICAweGNhLCAweDQwLCAweDJiLCAweDdlLCAweDU4LCAweDAwLCAweDAwLCAweDdhLCAweDVjLCAweDAwLCAweGZlLCAweDdmLCAweDYxLCAweDdlLCAweDc4LCAweDAxLCAKKyAgICAweDM0LCAweDdhLCAweDdjLCAweDAwLCAweDAwLCAweDdlLCAweDc3LCAweDAxLCAweDI5LCAweGJkLCAweDc0LCAweDc4LCAweDExLCAweDc1LCAweDA4LCAweGMxLCAKKyAgICAweDEyLCAweDA4LCAweDMzLCAweDEyLCAweDA4LCAweGQ2LCAweDQwLCAweDA2LCAweGQwLCAweDg3LCAweGQwLCAweGE4LCAweGMzLCAweDIyLCAweGQwLCAweDg3LCAKKyAgICAweGQwLCAweGE4LCAweGQzLCAweDIyLCAweDdlLCAweDI0LCAweDAwLCAweGZlLCAweDdlLCAweDM0LCAweDdmLCAweGNhLCAweDBiLCAweDFhLCAweDUwLCAweGM1LCAKKyAgICAweGYwLCAweDdkLCAweDYyLCAweDdkLCAweDc1LCAweDdkLCAweDg3LCAweDdlLCAweDM0LCAweDdmLCAweDAzLCAweDdlLCAweDFiLCAweGIwLCAweGJjLCAweDBiLCAKKyAgICAweDUwLCAweDQ5LCAweDNlLCAweDAwLCAweDNlLCAweDAwLCAweDBhLCAweDUwLCAweDJkLCAweDc1LCAweDBiLCAweDNhLCAweDMwLCAweDY5LCAweDUzLCAweDAwLCAKKyAgICAweDAyLCAweGJkLCAweDM4LCAweDUwLCAweDAyLCAweDJkLCAweDM4LCAweGJjLCAweDFiLCAweDUwLCAweDMwLCAweDNlLCAweDEwLCAweDNlLCAweDEwLCAweDBhLCAKKyAgICAweDUxLCAweDJkLCAweDM1LCAweDY5LCAweDQxLCAweDAwLCAweDAyLCAweDBiLCAweDFhLCAweDMwLCAweGJkLCAweDM4LCAweDUwLCAweDAyLCAweDJkLCAweDM4LCAKKyAgICAweGJlLCAweDQ0LCAweGZmLCAweGZmLCAweDc4LCAweDA1LCAweDdlLCAweDFiLCAweDkwLCAweDBhLCAweDQ5LCAweDRkLCAweDQ0LCAweDY4LCAweDBjLCAweGJlLCAKKyAgICAweDQ0LCAweDAwLCAweGZmLCAweDI4LCAweDA0LCAweDdlLCAweDQ0LCAweDAwLCAweGZmLCAweGMzLCAweDIyLCAweGQzLCAweDIyLCAKKworLy8gU2VnbWVudCAjMTYsIEVYQ0xVREVEIFN0YXJ0IEFkZHJlc3MgMDBmZjdjMDAsIExlbmd0aCAxOTkKKworCisvLyBTZWdtZW50ICMxNywgRVhDTFVERUQgU3RhcnQgQWRkcmVzcyAwMGZmN2YwMCwgTGVuZ3RoIDE5MgorCisKKy8vIFNlZ21lbnQgIzE3LCBTdGFydCBBZGRyZXNzIDAwZmY3ZmMwLCBMZW5ndGggNjQKKzB4ZmYsMHgwMCwweGMwLDB4N2YsMHg0MCwweDAwLAorICAgIDB4NDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4Y2EsIDB4MWIsIDB4MDEsIDB4MGMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIAorCisvLyBTZWdtZW50ICMxOCwgU3RhcnQgQWRkcmVzcyAwMGZmMDgzMywgTGVuZ3RoIDUwMTUKKzB4ZmYsMHgwMCwweDMzLDB4MDgsMHg5NywweDEzLAorICAgIDB4Y2EsIDB4MDgsIDB4N2UsIDB4MDEsIDB4MDgsIDB4N2EsIDB4MDMsIDB4M2YsIDB4ZjAsIDB4ZGEsIDB4MDgsIDB4MjIsIDB4ODAsIDB4NTAsIDB4MGIsIDB4MWEsIAorICAgIDB4NjAsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MWEsIDB4NzAsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MWEsIDB4ODAsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MWEsIDB4OTAsIAorICAgIDB4MGIsIDB4MzUsIDB4MGIsIDB4MWEsIDB4YTAsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MWEsIDB4YjAsIDB4MGIsIDB4MzUsIDB4MGIsIDB4MWEsIDB4YzAsIDB4MGIsIAorICAgIDB4MzUsIDB4MGIsIDB4MWEsIDB4ZDAsIDB4MGIsIDB4MzUsIDB4MWIsIDB4MGEsIDB4NjAsIDB4MGIsIDB4MTUsIDB4MWIsIDB4MGEsIDB4NzAsIDB4MGIsIDB4MTUsIAorICAgIDB4MWIsIDB4MGEsIDB4ODAsIDB4MGIsIDB4MTUsIDB4MWIsIDB4MGEsIDB4OTAsIDB4MGIsIDB4MTUsIDB4MWIsIDB4MGEsIDB4YTAsIDB4MGIsIDB4MTUsIDB4MWIsIAorICAgIDB4MGEsIDB4YjAsIDB4MGIsIDB4MTUsIDB4MWIsIDB4MGEsIDB4YzAsIDB4MGIsIDB4MTUsIDB4MWIsIDB4MGEsIDB4ZDAsIDB4MGIsIDB4MTUsIDB4OWUsIDB4NDQsIAorICAgIDB4MDAsIDB4MTAsIDB4NTAsIDB4YWEsIDB4MmUsIDB4NDQsIDB4MDAsIDB4MTAsIDB4NjgsIDB4MGUsIDB4N2UsIDB4MWIsIDB4YzAsIDB4N2EsIDB4MGIsIDB4YzAsIAorICAgIDB4MGIsIDB4MTQsIDB4MGIsIDB4MzQsIDB4MWIsIDB4NDQsIDB4NzgsIDB4ZjIsIDB4MjIsIDB4N2YsIDB4NmYsIDB4N2YsIDB4ZjAsIDB4MWIsIDB4ZmMsIDB4N2MsIAorICAgIDB4NTQsIDB4N2QsIDB4MzIsIDB4ODAsIDB4MDgsIDB4Y2EsIDB4MWIsIDB4Y2EsIDB4MWIsIDB4Y2EsIDB4MWIsIDB4Y2EsIDB4MWIsIDB4OWUsIDB4NDQsIDB4MDAsIAorICAgIDB4MTAsIDB4NTAsIDB4ZjIsIDB4MmUsIDB4NDQsIDB4MDAsIDB4MTAsIDB4NjgsIDB4MDYsIDB4Y2EsIDB4NDgsIDB4MWIsIDB4NDQsIDB4NzgsIDB4ZmEsIDB4N2YsIAorICAgIDB4ZjYsIDB4ODksIDB4ZTQsIDB4Y2EsIDB4NmIsIDB4NWUsIDB4ZDQsIDB4MDAsIDB4M2YsIDB4NjgsIDB4MjAsIDB4N2UsIDB4ODQsIDB4MDAsIDB4NDAsIDB4OWQsIAorICAgIDB4OGQsIDB4ZGEsIDB4NmIsIDB4YmQsIDB4ODcsIDB4MzgsIDB4MTYsIDB4Y2EsIDB4NzksIDB4N2QsIDB4NzgsIDB4MTIsIDB4MDksIDB4MDAsIDB4ZGEsIDB4NzksIAorICAgIDB4NDAsIDB4MDgsIDB4OWQsIDB4NzgsIDB4NjgsIDB4MDIsIDB4ODAsIDB4MDUsIDB4YzIsIDB4ZDcsIDB4MjIsIDB4ZGEsIDB4NmIsIDB4NDMsIDB4OTAsIDB4MzAsIAorICAgIDB4NzQsIDB4YWEsIDB4MzksIDB4YjUsIDB4NTUsIDB4NTUsIDB4NzQsIDB4NTUsIDB4MzksIDB4YjUsIDB4MmEsIDB4YWEsIDB4NzQsIDB4YTAsIDB4MzksIDB4YjUsIAorICAgIDB4NTUsIDB4NTUsIDB4N2UsIDB4MDQsIDB4MDAsIDB4NDAsIDB4OWQsIDB4NzAsIDB4NTAsIDB4MDYsIDB4MmQsIDB4NzAsIDB4N2QsIDB4MDcsIDB4NmQsIDB4NzcsIAorICAgIDB4N2MsIDB4MzEsIDB4N2UsIDB4N2IsIDB4MDAsIDB4N2EsIDB4NmIsIDB4MDAsIDB4MGIsIDB4N2MsIDB4MGIsIDB4NmMsIDB4YTUsIDB4ZDksIDB4ZjMsIDB4N2YsIAorICAgIDB4MTYsIDB4MWIsIDB4MWMsIDB4N2UsIDB4NTQsIDB4MjcsIDB4MTAsIDB4N2UsIDB4MWIsIDB4MTAsIDB4YmMsIDB4MTAsIDB4NjgsIDB4MDYsIDB4MWIsIDB4NTQsIAorICAgIDB4NzgsIDB4ZjUsIDB4ODAsIDB4MmMsIDB4NmQsIDB4MDAsIDB4N2MsIDB4MjAsIDB4N2YsIDB4MTYsIDB4OWYsIDB4MTAsIDB4N2YsIDB4MjcsIDB4OWYsIDB4MjAsIAorICAgIDB4N2UsIDB4MmIsIDB4MDAsIDB4N2UsIDB4MWIsIDB4MTAsIDB4YmMsIDB4MDEsIDB4NzgsIDB4MTYsIDB4MGIsIDB4MmMsIDB4MGIsIDB4MWMsIDB4YTUsIDB4ZGIsIAorICAgIDB4ZWYsIDB4N2MsIDB4YjYsIDB4MjAsIDB4ZTAsIDB4MDMsIDB4NjMsIDB4OTAsIDB4MzAsIDB4NGQsIDB4NzcsIDB4NzgsIDB4OTMsIDB4YzIsIDB4ZDcsIDB4MjIsIAorICAgIDB4ZDIsIDB4ZDcsIDB4MjIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDQsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDIsIDB4MDEsIAorICAgIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIAorICAgIDB4MDQsIDB4MDAsIDB4MDgsIDB4MTAsIDB4MDIsIDB4MTAsIDB4MDQsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDgsIDB4N2UsIDB4MTgsIDB4N2YsIAorICAgIDB4YmQsIDB4N2EsIDB4MWMsIDB4MDAsIDB4ZmYsIDB4MGIsIDB4MWEsIDB4MDAsIDB4YmUsIDB4MTAsIDB4MTQsIDB4MzgsIDB4MWEsIDB4MGEsIDB4NTEsIDB4MjMsIAorICAgIDB4N2UsIDB4MTgsIDB4MDksIDB4NzYsIDB4N2EsIDB4MWMsIDB4MDAsIDB4ZmYsIDB4MmQsIDB4MzUsIDB4MGIsIDB4MWEsIDB4NTAsIDB4NjAsIDB4MDgsIDB4YTUsIAorICAgIDB4YjgsIDB4MDIsIDB4MDMsIDB4NGUsIDB4YTAsIDB4MDgsIDB4MjIsIDB4ODAsIDB4ZmUsIDB4N2UsIDB4ZTgsIDB4N2YsIDB4YmYsIDB4N2EsIDB4ZWMsIDB4MDAsIAorICAgIDB4ZmYsIDB4ZTAsIDB4ZjUsIDB4MjIsIDB4NTQsIDB4YzAsIDB4NjgsIDB4MTYsIDB4N2UsIDB4ZTgsIDB4N2YsIDB4YmUsIDB4N2EsIDB4ZWMsIDB4MDAsIDB4ZmYsIAorICAgIDB4ZTAsIDB4NjAsIDB4MGMsIDB4MTIsIDB4MDksIDB4YTAsIDB4ZjUsIDB4MDksIDB4N2EsIDB4YTEsIDB4MjAsIDB4MDIsIDB4MGYsIDB4MGEsIDB4MjIsIDB4YzIsIAorICAgIDB4OTUsIDB4ZDIsIDB4OTQsIDB4MTIsIDB4MTksIDB4ZmIsIDB4NTMsIDB4OTAsIDB4Y2YsIDB4MTIsIDB4MTksIDB4ZmIsIDB4ODAsIDB4ZjEsIDB4MGQsIDB4MGEsIAorICAgIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGQsIAorICAgIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIDB4MGEsIAorICAgIDB4NDUsIDB4NjQsIDB4NjcsIDB4NjUsIDB4NzAsIDB4NmYsIDB4NzIsIDB4NzQsIDB4MmYsIDB4MzQsIDB4MjAsIDB4MmQsIDB4MjAsIDB4NDgsIDB4NjEsIDB4NzIsIAorICAgIDB4NjQsIDB4NzcsIDB4NjEsIDB4NzIsIDB4NjUsIDB4MjAsIDB4NDQsIDB4NjksIDB4NjEsIDB4NjcsIDB4NmUsIDB4NmYsIDB4NzMsIDB4NzQsIDB4NjksIDB4NjMsIAorICAgIDB4NzMsIDB4MmMsIDB4MjAsIDB4NTIsIDB4NjUsIDB4NzYsIDB4MjAsIDB4MzEsIDB4MmUsIDB4MzAsIDB4MzAsIDB4M2IsIDB4MjAsIDB4NDMsIDB4NmYsIDB4NzAsIAorICAgIDB4NzksIDB4NzIsIDB4NjksIDB4NjcsIDB4NjgsIDB4NzQsIDB4MjAsIDB4MzEsIDB4MzksIDB4MzksIDB4MzgsIDB4MjAsIDB4NDksIDB4NmUsIDB4NzMsIDB4NjksIAorICAgIDB4NjQsIDB4NjUsIDB4MjAsIDB4NGYsIDB4NzUsIDB4NzQsIDB4MjAsIDB4NGUsIDB4NjUsIDB4NzQsIDB4NzcsIDB4NmYsIDB4NzIsIDB4NmIsIDB4NzMsIDB4MGQsIAorICAgIDB4MGEsIDB4MDAsIDB4NTAsIDB4NjEsIDB4NzMsIDB4NzMsIDB4MDAsIDB4NDYsIDB4NDEsIDB4NDksIDB4NGMsIDB4MjAsIDB4MjEsIDB4MjEsIDB4MDAsIDB4NTAsIAorICAgIDB4NjEsIDB4NzMsIDB4NzMsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4NDYsIDB4NDEsIDB4NDksIDB4NGMsIDB4MjAsIDB4MjEsIDB4MjEsIDB4MjAsIAorICAgIDB4MDAsIDB4MGQsIDB4MGEsIDB4NDQsIDB4NjUsIDB4NzQsIDB4NjUsIDB4NjMsIDB4NzQsIDB4MjAsIDB4NTIsIDB4NjEsIDB4NmQsIDB4M2EsIDB4MjAsIDB4MjAsIAorICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorICAgIDB4MjAsIDB4MjAsIDB4MDAsIDB4MGQsIDB4MGEsIDB4NTIsIDB4NjEsIDB4NmQsIDB4MjAsIDB4NTQsIDB4NjUsIDB4NzMsIDB4NzQsIDB4M2EsIDB4MjAsIDB4MjAsIAorICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4MGQsIDB4MGEsIDB4NDEsIDB4NjQsIDB4NjQsIDB4NzIsIDB4NjUsIDB4NzMsIDB4NzMsIDB4MjAsIDB4NjIsIAorICAgIDB4NjksIDB4NzQsIDB4MjAsIDB4MzAsIDB4MmQsIDB4MzEsIDB4MzQsIDB4MjAsIDB4NzQsIDB4NjUsIDB4NzMsIDB4NzQsIDB4M2EsIDB4MjAsIDB4MjAsIDB4MjAsIAorICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4MGQsIDB4MGEsIDB4NTcsIDB4NzIsIDB4NmYsIDB4NzQsIDB4NjUsIDB4MjAsIDB4NDEsIAorICAgIDB4NjQsIDB4NjQsIDB4NzIsIDB4NjUsIDB4NzMsIDB4NzMsIDB4M2EsIDB4MjAsIDB4MzAsIDB4MzAsIDB4M2EsIDB4MDAsIDB4MjAsIDB4MjAsIDB4NzcsIDB4NjksIAorICAgIDB4NzQsIDB4NjgsIDB4MjAsIDB4NjQsIDB4NjEsIDB4NzQsIDB4NjEsIDB4M2EsIDB4MjAsIDB4MDAsIDB4MmMsIDB4MjAsIDB4NjEsIDB4NmUsIDB4NjQsIDB4MjAsIAorICAgIDB4NzIsIDB4NjUsIDB4NjEsIDB4NjQsIDB4M2EsIDB4MjAsIDB4MDAsIDB4MGQsIDB4MGEsIDB4NGYsIDB4NmUsIDB4NjUsIDB4MjAsIDB4NmYsIDB4NzIsIDB4MjAsIAorICAgIDB4NjIsIDB4NmYsIDB4NzQsIDB4NjgsIDB4MjAsIDB4NmYsIDB4NjYsIDB4MjAsIDB4NzQsIDB4NjgsIDB4NjUsIDB4MjAsIDB4NjYsIDB4NmYsIDB4NmMsIDB4NmMsIAorICAgIDB4NmYsIDB4NzcsIDB4NjksIDB4NmUsIDB4NjcsIDB4MjAsIDB4NDEsIDB4NjQsIDB4NjQsIDB4NzIsIDB4NjUsIDB4NzMsIDB4NzMsIDB4MjAsIDB4NjIsIDB4NjksIAorICAgIDB4NzQsIDB4NzMsIDB4MjAsIDB4NmMsIDB4NjksIDB4NzMsIDB4NzQsIDB4NjUsIDB4NjQsIDB4MjAsIDB4NjEsIDB4NzIsIDB4NjUsIDB4MjAsIDB4NzMsIDB4NjgsIAorICAgIDB4NmYsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NjQsIDB4MGQsIDB4MGEsIDB4NzQsIDB4NmYsIDB4MjAsIDB4NzMsIDB4NmYsIDB4NmQsIDB4NjUsIDB4NzQsIDB4NjgsIAorICAgIDB4NjksIDB4NmUsIDB4NjcsIDB4M2EsIDB4MjAsIDB4MDAsIDB4MjAsIDB4NjEsIDB4NmUsIDB4NjQsIDB4MjAsIDB4MDAsIDB4MGQsIDB4MGEsIDB4NDQsIDB4NjUsIAorICAgIDB4NzQsIDB4NjUsIDB4NjMsIDB4NzQsIDB4MjAsIDB4NTUsIDB4NjEsIDB4NzIsIDB4NzQsIDB4M2EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4MGQsIDB4MGEsIAorICAgIDB4NTMsIDB4NjMsIDB4NzIsIDB4NjEsIDB4NzQsIDB4NjMsIDB4NjgsIDB4MjAsIDB4NTAsIDB4NjEsIDB4NjQsIDB4MmMsIDB4NDYsIDB4NjksIDB4NDYsIDB4NmYsIAorICAgIDB4MjAsIDB4NDUsIDB4NmUsIDB4NjEsIDB4NjIsIDB4NmMsIDB4NjUsIDB4MjAsIDB4MjYsIDB4MjAsIDB4NTIsIDB4NTMsIDB4NTQsIDB4M2EsIDB4MjAsIDB4MDAsIAorICAgIDB4MGQsIDB4MGEsIDB4MGEsIDB4MjAsIDB4MjAsIDB4MjAsIDB4NTUsIDB4NjEsIDB4NzIsIDB4NzQsIDB4MjAsIDB4NTQsIDB4NjUsIDB4NzMsIDB4NzQsIDB4NzMsIAorICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4NTAsIDB4NmYsIDB4NzIsIDB4NzQsIDB4MzEsIDB4MjAsIDB4MjAsIDB4MjAsIDB4NTAsIDB4NmYsIDB4NzIsIDB4NzQsIAorICAgIDB4MzIsIDB4MjAsIDB4MjAsIDB4MjAsIDB4NTAsIDB4NmYsIDB4NzIsIDB4NzQsIDB4MzMsIDB4MjAsIDB4MjAsIDB4MjAsIDB4NTAsIDB4NmYsIDB4NzIsIDB4NzQsIAorICAgIDB4MzQsIDB4MGQsIDB4MGEsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIAorICAgIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIDB4MmQsIAorICAgIDB4MmQsIDB4MDAsIDB4MGQsIDB4MGEsIDB4NTAsIDB4NmYsIDB4NzIsIDB4NzQsIDB4MjAsIDB4NDQsIDB4NjUsIDB4NjMsIDB4NmYsIDB4NjQsIDB4NjUsIDB4NzIsIAorICAgIDB4M2EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4MGQsIDB4MGEsIDB4NDQsIDB4NjksIDB4NjcsIDB4NjksIDB4NzQsIDB4NjEsIDB4NmMsIDB4MjAsIAorICAgIDB4NGMsIDB4NmYsIDB4NmYsIDB4NzAsIDB4NjIsIDB4NjEsIDB4NjMsIDB4NmIsIDB4M2EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4MGQsIDB4MGEsIDB4NDEsIDB4NmUsIDB4NjEsIDB4NmMsIAorICAgIDB4NmYsIDB4NjcsIDB4MjAsIDB4NGMsIDB4NmYsIDB4NmYsIDB4NzAsIDB4NjIsIDB4NjEsIDB4NjMsIDB4NmIsIDB4M2EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4MGQsIDB4MGEsIAorICAgIDB4NTIsIDB4NTgsIDB4NDQsIDB4MmMsIDB4NTQsIDB4NTgsIDB4NDQsIDB4MjAsIDB4NzQsIDB4NmYsIDB4MjAsIDB4NTIsIDB4NTQsIDB4NTMsIDB4MmMsIDB4NDMsIAorICAgIDB4NTQsIDB4NTMsIDB4MmMsIDB4NTIsIDB4NDksIDB4MjAsIDB4NTMsIDB4NjgsIDB4NmYsIDB4NzIsIDB4NzQsIDB4M2EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorICAgIDB4MjAsIDB4MDAsIDB4MGQsIDB4MGEsIDB4NTIsIDB4NTgsIDB4NDQsIDB4MmMsIDB4NTQsIDB4NTgsIDB4NDQsIDB4MjAsIDB4NzQsIDB4NmYsIDB4MjAsIDB4NDQsIAorICAgIDB4NTQsIDB4NTIsIDB4MmMsIDB4NDQsIDB4NTMsIDB4NTIsIDB4MmMsIDB4NDMsIDB4NDQsIDB4MjAsIDB4NTMsIDB4NjgsIDB4NmYsIDB4NzIsIDB4NzQsIDB4M2EsIAorICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4MGQsIDB4MGEsIDB4NTIsIDB4NTQsIDB4NTMsIDB4NWIsIDB4NDMsIDB4NTQsIDB4NTMsIDB4MmMsIAorICAgIDB4NTIsIDB4NDksIDB4NWQsIDB4MjAsIDB4NzQsIDB4NmYsIDB4MjAsIDB4NDQsIDB4NTQsIDB4NTIsIDB4MmMsIDB4NDQsIDB4NTMsIDB4NTIsIDB4MmMsIDB4NDMsIAorICAgIDB4NDQsIDB4MjAsIDB4NTMsIDB4NjgsIDB4NmYsIDB4NzIsIDB4NzQsIDB4M2EsIDB4MjAsIDB4MDAsIDB4MGQsIDB4MGEsIDB4NTIsIDB4NTQsIDB4NTMsIDB4NWIsIAorICAgIDB4NDMsIDB4NTQsIDB4NTMsIDB4MmMsIDB4NDMsIDB4NDQsIDB4NWQsIDB4MjAsIDB4NzQsIDB4NmYsIDB4MjAsIDB4NDQsIDB4NTMsIDB4NTIsIDB4MmMsIDB4NTIsIAorICAgIDB4NDksIDB4MjAsIDB4NTMsIDB4NjgsIDB4NmYsIDB4NzIsIDB4NzQsIDB4M2EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4MGQsIDB4MGEsIAorICAgIDB4NDQsIDB4NTQsIDB4NTIsIDB4NWIsIDB4NDQsIDB4NTMsIDB4NTIsIDB4MmMsIDB4NDMsIDB4NDQsIDB4NWQsIDB4MjAsIDB4NzQsIDB4NmYsIDB4MjAsIDB4NTIsIAorICAgIDB4NTQsIDB4NTMsIDB4MmMsIDB4NDMsIDB4NTQsIDB4NTMsIDB4MmMsIDB4NTIsIDB4NDksIDB4MjAsIDB4NTMsIDB4NjgsIDB4NmYsIDB4NzIsIDB4NzQsIDB4M2EsIAorICAgIDB4MjAsIDB4MDAsIDB4MGQsIDB4MGEsIDB4NDQsIDB4NTQsIDB4NTIsIDB4MjAsIDB4NzQsIDB4NmYsIDB4MjAsIDB4NDMsIDB4NTQsIDB4NTMsIDB4MmMsIDB4NDMsIAorICAgIDB4NDQsIDB4MjAsIDB4NTMsIDB4NjgsIDB4NmYsIDB4NzIsIDB4NzQsIDB4M2EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4MGQsIDB4MGEsIDB4NTIsIDB4NTQsIDB4NTMsIDB4MjAsIDB4NzQsIDB4NmYsIDB4MjAsIDB4NDMsIAorICAgIDB4NTQsIDB4NTMsIDB4MmMsIDB4NTIsIDB4NDksIDB4MjAsIDB4NGMsIDB4NmYsIDB4NmYsIDB4NzAsIDB4NjIsIDB4NjEsIDB4NjMsIDB4NmIsIDB4M2EsIDB4MjAsIAorICAgIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4MGQsIDB4MGEsIDB4NTIsIDB4NTQsIDB4NTMsIDB4MjAsIAorICAgIDB4NzQsIDB4NmYsIDB4MjAsIDB4NDMsIDB4NTQsIDB4NTMsIDB4MmMsIDB4NDMsIDB4NDQsIDB4MjAsIDB4NGMsIDB4NmYsIDB4NmYsIDB4NzAsIDB4NjIsIDB4NjEsIAorICAgIDB4NjMsIDB4NmIsIDB4M2EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4MGQsIDB4MGEsIAorICAgIDB4NDQsIDB4NTQsIDB4NTIsIDB4MjAsIDB4NzQsIDB4NmYsIDB4MjAsIDB4NDQsIDB4NTMsIDB4NTIsIDB4MmMsIDB4NDMsIDB4NDQsIDB4MjAsIDB4NGMsIDB4NmYsIAorICAgIDB4NmYsIDB4NzAsIDB4NjIsIDB4NjEsIDB4NjMsIDB4NmIsIDB4M2EsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIDB4MjAsIAorICAgIDB4MjAsIDB4MDAsIDB4MGQsIDB4MGEsIDB4MGEsIDB4MjAsIDB4MjAsIDB4MjAsIDB4NDUsIDB4MjAsIDB4NTIsIDB4MjAsIDB4NTIsIDB4MjAsIDB4NGYsIDB4MjAsIAorICAgIDB4NTIsIDB4MjAsIDB4MjEsIDB4MjEsIDB4MjEsIDB4MmMsIDB4MjAsIDB4NDUsIDB4MjAsIDB4NTIsIDB4MjAsIDB4NTIsIDB4MjAsIDB4NGYsIDB4MjAsIDB4NTIsIAorICAgIDB4MjAsIDB4MjEsIDB4MjEsIDB4MjEsIDB4MjAsIDB4MmMsIDB4MjAsIDB4NDUsIDB4MjAsIDB4NTIsIDB4MjAsIDB4NTIsIDB4MjAsIDB4NGYsIDB4MjAsIDB4NTIsIAorICAgIDB4MjAsIDB4MjEsIDB4MjEsIDB4MjEsIDB4MGQsIDB4MGEsIDB4MGEsIDB4NDQsIDB4NjksIDB4NjEsIDB4NjcsIDB4NmUsIDB4NmYsIDB4NzMsIDB4NzQsIDB4NjksIAorICAgIDB4NjMsIDB4NzMsIDB4MjAsIDB4NmUsIDB4NmYsIDB4NzcsIDB4MjAsIDB4NzcsIDB4NjksIDB4NmMsIDB4NmMsIDB4MjAsIDB4NjUsIDB4NmUsIDB4NzQsIDB4NjUsIAorICAgIDB4NzIsIDB4MjAsIDB4NjEsIDB4MjAsIDB4NjQsIDB4NjUsIDB4NjIsIDB4NzUsIDB4NjcsIDB4MjAsIDB4NmMsIDB4NmYsIDB4NmYsIDB4NzAsIDB4MjAsIDB4NmYsIAorICAgIDB4NjYsIDB4MjAsIDB4NzQsIDB4NjgsIDB4NjUsIDB4MjAsIDB4NjYsIDB4NjksIDB4NzIsIDB4NzMsIDB4NzQsIDB4MjAsIDB4NjQsIDB4NjUsIDB4NzQsIDB4NjUsIAorICAgIDB4NjMsIDB4NzQsIDB4NjUsIDB4NjQsIDB4MjAsIDB4NjUsIDB4NzIsIDB4NzIsIDB4NmYsIDB4NzIsIDB4MmUsIDB4MDAsIDB4MGQsIDB4MGEsIDB4MGEsIDB4NGUsIAorICAgIDB4NmYsIDB4MjAsIDB4NDgsIDB4NjEsIDB4NzIsIDB4NjQsIDB4NzcsIDB4NjEsIDB4NzIsIDB4NjUsIDB4MjAsIDB4NjUsIDB4NzIsIDB4NzIsIDB4NmYsIDB4NzIsIAorICAgIDB4NzMsIDB4MjAsIDB4NjQsIDB4NjUsIDB4NzQsIDB4NjUsIDB4NjMsIDB4NzQsIDB4NjUsIDB4NjQsIDB4MmUsIDB4MGQsIDB4MGEsIDB4MDAsIDB4NDMsIDB4NmYsIAorICAgIDB4NzAsIDB4NzksIDB4NjksIDB4NmUsIDB4NjcsIDB4MjAsIDB4NjMsIDB4NmYsIDB4NjQsIDB4NjUsIDB4MjAsIDB4NjYsIDB4NzIsIDB4NmYsIDB4NmQsIDB4MjAsIAorICAgIDB4NGQsIDB4NjEsIDB4NzMsIDB4NzQsIDB4NjUsIDB4NzIsIDB4MjAsIDB4NzQsIDB4NmYsIDB4MjAsIDB4NTMsIDB4NmMsIDB4NjEsIDB4NzYsIDB4NjUsIDB4MjcsIAorICAgIDB4NzMsIDB4MjAsIDB4NDUsIDB4NDUsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NmQsIDB4MjAsIDB4MmUsIDB4MmUsIDB4MmUsIDB4MDAsIDB4NDQsIDB4NmYsIDB4NmUsIAorICAgIDB4NjUsIDB4MGQsIDB4MGEsIDB4MGEsIDB4MmQsIDB4M2UsIDB4MjAsIDB4NTQsIDB4NzUsIDB4NzIsIDB4NmUsIDB4MjAsIDB4NzUsIDB4NmUsIDB4NjksIDB4NzQsIAorICAgIDB4MjAsIDB4NmYsIDB4NjYsIDB4NjYsIDB4MmMsIDB4MjAsIDB4NjQsIDB4NjksIDB4NzMsIDB4NjMsIDB4NmYsIDB4NmUsIDB4NmUsIDB4NjUsIDB4NjMsIDB4NzQsIAorICAgIDB4MjAsIDB4NjMsIDB4NjEsIDB4NjIsIDB4NmMsIDB4NjUsIDB4MjAsIDB4NjEsIDB4NmUsIDB4NjQsIDB4MjAsIDB4NzIsIDB4NzUsIDB4NmUsIDB4MjAsIDB4NzMsIAorICAgIDB4NzQsIDB4NjEsIDB4NmUsIDB4NjQsIDB4NjEsIDB4NmMsIDB4NmYsIDB4NmUsIDB4NjUsIDB4MjAsIDB4NjQsIDB4NjksIDB4NjEsIDB4NjcsIDB4NmUsIDB4NmYsIAorICAgIDB4NzMsIDB4NzQsIDB4NjksIDB4NjMsIDB4NzMsIDB4MmUsIDB4MDAsIDB4YzIsIDB4YWYsIDB4YzIsIDB4MDksIDB4YzIsIDB4MGEsIDB4NzUsIDB4OTAsIDB4MGQsIAorICAgIDB4MjAsIDB4MTcsIDB4MDIsIDB4ZDIsIDB4YjUsIDB4NDMsIDB4OTAsIDB4MzAsIDB4NmMsIDB4MDAsIDB4N2UsIDB4MTAsIDB4MDMsIDB4MTIsIDB4MGYsIDB4MzgsIAorICAgIDB4N2UsIDB4NjgsIDB4MGEsIDB4MDEsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MGIsIDB4MDAsIDB4MzAsIDB4YjQsIDB4MDIsIAorICAgIDB4ODAsIDB4MjQsIDB4MDIsIDB4MWIsIDB4M2MsIDB4MjAsIDB4MDksIDB4MWQsIDB4YzIsIDB4OTQsIDB4ZDIsIDB4OTUsIDB4MTIsIDB4MTksIDB4ZmIsIDB4NTMsIAorICAgIDB4OTAsIDB4Y2YsIDB4MTIsIDB4MTksIDB4ZmIsIDB4YzIsIDB4OTUsIDB4ZDIsIDB4OTQsIDB4MTIsIDB4MTksIDB4ZmIsIDB4YTUsIDB4ZDksIDB4ZTYsIDB4NDMsIAorICAgIDB4OTAsIDB4MzAsIDB4MTIsIDB4MTksIDB4ZmIsIDB4MjIsIDB4N2UsIDB4NjgsIDB4MGEsIDB4OTQsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIAorICAgIDB4OTMsIDB4N2UsIDB4ZTQsIDB4MTAsIDB4MDAsIDB4N2UsIDB4NDAsIDB4NTUsIDB4N2EsIDB4ZTksIDB4NDAsIDB4MGIsIDB4ZTQsIDB4N2UsIDB4NTAsIDB4YWEsIAorICAgIDB4N2EsIDB4ZTksIDB4NTAsIDB4MWIsIDB4ZTQsIDB4YmUsIDB4ZTksIDB4NDAsIDB4NjgsIDB4MTksIDB4N2UsIDB4NjgsIDB4MGEsIDB4N2EsIDB4N2EsIDB4NmMsIAorICAgIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MTIsIDB4MWEsIDB4MDgsIDB4MzAsIDB4MDksIDB4MTMsIDB4N2EsIDB4ZTksIDB4NDAsIDB4N2UsIDB4ZTksIAorICAgIDB4MTAsIDB4ODAsIDB4ZjgsIDB4N2UsIDB4NjgsIDB4MGEsIDB4NzUsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MGIsIDB4MDAsIAorICAgIDB4N2UsIDB4NjgsIDB4MGEsIDB4ZDgsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4N2UsIDB4NzgsIDB4MDAsIDB4MDAsIDB4N2UsIAorICAgIDB4NzAsIDB4MGUsIDB4N2UsIDB4YTQsIDB4ZmYsIDB4ZmYsIDB4N2UsIDB4YjQsIDB4YmYsIDB4ZmYsIDB4N2QsIDB4Y2IsIDB4MGUsIDB4YzQsIDB4N2QsIDB4ZGMsIAorICAgIDB4NWQsIDB4ZGIsIDB4NmMsIDB4YmIsIDB4N2QsIDB4ZmEsIDB4NWUsIDB4ZjQsIDB4N2YsIDB4ZmYsIDB4N2EsIDB4N2IsIDB4YjAsIDB4MGIsIDB4YjAsIDB4N2QsIAorICAgIDB4ZmIsIDB4NWUsIDB4ZjQsIDB4N2YsIDB4ZmYsIDB4N2EsIDB4N2IsIDB4YjAsIDB4MGIsIDB4YjAsIDB4N2QsIDB4ZmMsIDB4NWUsIDB4ZjQsIDB4N2YsIDB4ZmYsIAorICAgIDB4N2EsIDB4N2IsIDB4YjAsIDB4MGIsIDB4YjAsIDB4N2QsIDB4ZmQsIDB4NWUsIDB4ZjQsIDB4N2YsIDB4ZmYsIDB4N2EsIDB4N2IsIDB4YjAsIDB4NmMsIDB4YmIsIAorICAgIDB4N2QsIDB4ZmEsIDB4NWUsIDB4ZjQsIDB4N2YsIDB4ZmYsIDB4YmUsIDB4N2IsIDB4YjAsIDB4NzgsIDB4NDEsIDB4MGIsIDB4YjAsIDB4N2QsIDB4ZmIsIDB4NWUsIAorICAgIDB4ZjQsIDB4N2YsIDB4ZmYsIDB4YmUsIDB4N2IsIDB4YjAsIDB4NzgsIDB4MzQsIDB4MGIsIDB4YjAsIDB4N2QsIDB4ZmMsIDB4NWUsIDB4ZjQsIDB4N2YsIDB4ZmYsIAorICAgIDB4YmUsIDB4N2IsIDB4YjAsIDB4NzgsIDB4MjcsIDB4MGIsIDB4YjAsIDB4N2QsIDB4ZmQsIDB4NWUsIDB4ZjQsIDB4N2YsIDB4ZmYsIDB4YmUsIDB4N2IsIDB4YjAsIAorICAgIDB4NzgsIDB4MWEsIDB4MGIsIDB4YjAsIDB4YmUsIDB4YzQsIDB4ZmYsIDB4ZmUsIDB4NzgsIDB4OTIsIDB4MGUsIDB4YjQsIDB4YTUsIDB4ZGYsIDB4OGIsIDB4N2UsIAorICAgIDB4NjgsIDB4MGEsIDB4ODIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4ODAsIDB4NzcsIDB4Y2EsIDB4NWIsIDB4Y2EsIDB4NmIsIAorICAgIDB4N2UsIDB4NjgsIDB4MGEsIDB4OGIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4N2UsIDB4NjgsIDB4MGIsIDB4MmEsIDB4N2EsIAorICAgIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MGEsIDB4NDcsIDB4MTIsIDB4MWEsIDB4YzksIDB4N2UsIDB4NjgsIDB4MGIsIDB4NzksIDB4N2EsIAorICAgIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4NmMsIDB4NzcsIDB4ZGEsIDB4NmIsIDB4Y2EsIDB4NmIsIDB4MGIsIDB4NzAsIDB4MGUsIDB4YzQsIAorICAgIDB4YmUsIDB4YzQsIDB4ZmYsIDB4ZmYsIDB4NzgsIDB4ZjYsIDB4MWIsIDB4NzAsIDB4MGEsIDB4NDcsIDB4MTIsIDB4MWEsIDB4YzksIDB4MTIsIDB4MWEsIDB4MDgsIAorICAgIDB4MzAsIDB4MDksIDB4MzAsIDB4ZGEsIDB4NmIsIDB4ZGEsIDB4NWIsIDB4NmMsIDB4YmIsIDB4N2UsIDB4NzgsIDB4MDAsIDB4MDAsIDB4N2QsIDB4ZmEsIDB4NWUsIAorICAgIDB4ZjQsIDB4N2YsIDB4ZmYsIDB4N2EsIDB4N2IsIDB4YjAsIDB4N2QsIDB4ZmIsIDB4NWUsIDB4ZjQsIDB4N2YsIDB4ZmYsIDB4N2EsIDB4N2IsIDB4YjAsIDB4N2QsIAorICAgIDB4ZmMsIDB4NWUsIDB4ZjQsIDB4N2YsIDB4ZmYsIDB4N2EsIDB4N2IsIDB4YjAsIDB4N2QsIDB4ZmQsIDB4NWUsIDB4ZjQsIDB4N2YsIDB4ZmYsIDB4N2EsIDB4N2IsIAorICAgIDB4YjAsIDB4ODAsIDB4ZDQsIDB4N2UsIDB4NjgsIDB4MGEsIDB4YjYsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MzAsIDB4MTcsIAorICAgIDB4MGUsIDB4N2UsIDB4NzgsIDB4MDQsIDB4MjAsIDB4N2EsIDB4N2MsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NDQsIDB4N2IsIDB4ZTAsIDB4ODAsIDB4MGMsIDB4N2UsIAorICAgIDB4NzgsIDB4MDAsIDB4MDAsIDB4N2EsIDB4N2MsIDB4MDAsIDB4MDEsIDB4N2UsIDB4NDQsIDB4ODAsIDB4MDAsIDB4MGIsIDB4MDAsIDB4N2UsIDB4NDAsIDB4M2EsIAorICAgIDB4N2MsIDB4NTQsIDB4N2YsIDB4NTcsIDB4N2QsIDB4ODQsIDB4NmMsIDB4NjYsIDB4N2EsIDB4NWIsIDB4NTAsIDB4MGIsIDB4NWMsIDB4MGIsIDB4NTAsIDB4YTUsIAorICAgIDB4ZGUsIDB4MDIsIDB4MGIsIDB4NTAsIDB4MWIsIDB4ODQsIDB4NzgsIDB4ZjAsIDB4N2MsIDB4NTQsIDB4N2YsIDB4NTcsIDB4N2QsIDB4ODQsIDB4NmMsIDB4NjYsIAorICAgIDB4YmUsIDB4NWIsIDB4NTAsIDB4NzgsIDB4MWEsIDB4MGIsIDB4NWMsIDB4MGIsIDB4NTAsIDB4YTUsIDB4ZGUsIDB4MDIsIDB4MGIsIDB4NTAsIDB4MWIsIDB4ODQsIAorICAgIDB4NzgsIDB4ZWUsIDB4N2UsIDB4NjgsIDB4MGEsIDB4NzUsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4ODAsIDB4NGIsIDB4N2YsIAorICAgIDB4NDUsIDB4N2UsIDB4NjgsIDB4MGEsIDB4N2EsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4N2UsIDB4NjgsIDB4MGEsIDB4ZmEsIAorICAgIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4N2QsIDB4NGIsIDB4MTIsIDB4MWEsIDB4YzksIDB4N2UsIDB4NjgsIDB4MGIsIDB4MGYsIAorICAgIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4NmMsIDB4ODgsIDB4N2MsIDB4OTUsIDB4MTIsIDB4MWEsIDB4YzksIDB4N2UsIDB4NjgsIAorICAgIDB4MGIsIDB4MWQsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4N2UsIDB4NGIsIDB4OTAsIDB4MTIsIDB4MWEsIDB4YzksIDB4MTIsIAorICAgIDB4MWEsIDB4MDgsIDB4MzAsIDB4MDksIDB4MDUsIDB4N2UsIDB4NGIsIDB4OTAsIDB4ODAsIDB4ZmIsIDB4N2UsIDB4NjgsIDB4MGIsIDB4N2YsIDB4N2EsIDB4NmMsIAorICAgIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MGIsIDB4MDAsIDB4ZDIsIDB4OTIsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIAorICAgIDB4MDgsIDB4YmUsIDB4YjAsIDB4MDEsIDB4NzgsIDB4MGIsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTQsIDB4YmUsIDB4YjAsIDB4NjAsIDB4NzgsIDB4MDIsIDB4ODAsIAorICAgIDB4MTcsIDB4N2UsIDB4NjgsIDB4MGEsIDB4N2EsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MTIsIDB4MWEsIDB4MDgsIDB4MzAsIAorICAgIDB4MDksIDB4MTEsIDB4MDksIDB4YjIsIDB4MDAsIDB4MDgsIDB4ODAsIDB4ZmEsIDB4N2UsIDB4NjgsIDB4MGEsIDB4NzUsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIAorICAgIDB4MTIsIDB4MWEsIDB4OTMsIDB4N2UsIDB4NjgsIDB4MGIsIDB4YTEsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MGIsIDB4MDAsIAorICAgIDB4YzIsIDB4OTIsIDB4MTIsIDB4MTksIDB4ZWUsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4YTAsIDB4NTUsIDB4MTksIDB4YTIsIDB4MDAsIDB4MWMsIAorICAgIDB4N2UsIDB4YjAsIDB4MDEsIDB4MTksIDB4YjIsIDB4MDAsIDB4MDgsIDB4MDksIDB4YjIsIDB4MDAsIDB4MWMsIDB4YmMsIDB4YWIsIDB4NzgsIDB4MzcsIDB4MDksIAorICAgIDB4YjIsIDB4MDAsIDB4MDgsIDB4NWUsIDB4YjAsIDB4YzAsIDB4YmUsIDB4YjAsIDB4YzAsIDB4NzgsIDB4MmIsIDB4N2UsIDB4YTAsIDB4YWEsIDB4MTksIDB4YTIsIAorICAgIDB4MDAsIDB4MWMsIDB4NmMsIDB4YmIsIDB4MTksIDB4YjIsIDB4MDAsIDB4MDgsIDB4MDksIDB4YjIsIDB4MDAsIDB4MWMsIDB4YmMsIDB4YWIsIDB4NzgsIDB4MTYsIAorICAgIDB4MDksIDB4YjIsIDB4MDAsIDB4MDgsIDB4NWUsIDB4YjAsIDB4YzAsIDB4NzgsIDB4MGQsIDB4N2UsIDB4NjgsIDB4MGEsIDB4NzUsIDB4N2EsIDB4NmMsIDB4MDAsIAorICAgIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4ODAsIDB4MWIsIDB4N2UsIDB4NjgsIDB4MGEsIDB4N2EsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIAorICAgIDB4OTMsIDB4MTIsIDB4MWEsIDB4MDgsIDB4MzAsIDB4MDksIDB4MGEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MWMsIDB4MDksIDB4YjIsIDB4MDAsIDB4MWMsIDB4ODAsIAorICAgIDB4ZjYsIDB4N2UsIDB4NjgsIDB4MGIsIDB4YzMsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4N2UsIDB4NjgsIDB4MGMsIDB4NDUsIAorICAgIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDksIDB4N2UsIDB4YjAsIAorICAgIDB4MDEsIDB4MTksIDB4YjIsIDB4MDAsIDB4MWMsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4MGIsIDB4YjAsIDB4YTUsIDB4ZDksIDB4ZjMsIDB4N2UsIDB4MjQsIAorICAgIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDksIDB4N2UsIDB4YjAsIDB4MDEsIDB4MGIsIDB4MDAsIDB4MDksIDB4YTIsIDB4MDAsIDB4MWMsIDB4YmMsIDB4YWIsIAorICAgIDB4NzgsIDB4MTYsIDB4N2UsIDB4NjgsIDB4MGEsIDB4ODIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MmUsIDB4MjQsIDB4MDEsIAorICAgIDB4MDAsIDB4MGIsIDB4YjAsIDB4YTUsIDB4ZDksIDB4ZTIsIDB4ODAsIDB4MjUsIDB4N2UsIDB4NjgsIDB4MGEsIDB4OGIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIAorICAgIDB4MTIsIDB4MWEsIDB4OTMsIDB4MTIsIDB4MWEsIDB4MDgsIDB4MzAsIDB4MDksIDB4ZTQsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDksIAorICAgIDB4MDksIDB4YTIsIDB4MDAsIDB4MWMsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4ZjUsIDB4ODAsIDB4ZWMsIDB4N2UsIDB4NjgsIDB4MGMsIAorICAgIDB4NjksIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MTIsIDB4MTMsIDB4OGEsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIAorICAgIDB4MTEsIDB4MDksIDB4MGIsIDB4MDAsIDB4NzQsIDB4MTAsIDB4MTksIDB4YjIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTMsIDB4MDMsIDB4MmUsIDB4MjQsIDB4MDEsIAorICAgIDB4MDAsIDB4YTUsIDB4ZDksIDB4ZWUsIDB4N2UsIDB4NjgsIDB4MGMsIDB4OGQsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4N2UsIAorICAgIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDksIDB4MGIsIDB4MDAsIDB4ZTQsIDB4MTksIDB4YjIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTMsIDB4MDMsIAorICAgIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4ZWYsIDB4MzAsIDB4MDAsIDB4MDMsIDB4MDIsIDB4MTgsIDB4YjcsIDB4MDIsIDB4MTMsIDB4YmIsIAorICAgIDB4NzQsIDB4MDcsIDB4MTksIDB4YjIsIDB4MDAsIDB4MDgsIDB4MTIsIDB4MTksIDB4ZmIsIDB4MDksIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIAorICAgIDB4MTQsIDB4MDksIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTQsIDB4MDksIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIAorICAgIDB4MTQsIDB4MDksIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTQsIDB4YzIsIDB4MGIsIDB4N2UsIDB4YjAsIDB4NTUsIDB4MTIsIDB4MTMsIAorICAgIDB4NjQsIDB4N2UsIDB4YjAsIDB4YWEsIDB4MTIsIDB4MTMsIDB4NjQsIDB4N2UsIDB4YjAsIDB4MDAsIDB4MTIsIDB4MTMsIDB4NjQsIDB4N2UsIDB4YjAsIDB4ZmYsIAorICAgIDB4MTIsIDB4MTMsIDB4NjQsIDB4MzAsIDB4MGIsIDB4MGYsIDB4N2UsIDB4NjgsIDB4MGEsIDB4OGIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIAorICAgIDB4OTMsIDB4MTIsIDB4MWEsIDB4MDgsIDB4MjIsIDB4N2UsIDB4NjgsIDB4MGEsIDB4ODIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIAorICAgIDB4MjIsIDB4MTksIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIDB4YTIsIDB4MDAsIDB4MDAsIDB4YmMsIDB4YWIsIDB4NzgsIDB4MDEsIAorICAgIDB4MjIsIDB4MjAsIDB4MDksIDB4MDMsIDB4ZDIsIDB4MGIsIDB4MjIsIDB4MTIsIDB4MWEsIDB4MDgsIDB4MTksIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTksIAorICAgIDB4ZWUsIDB4MDksIDB4YTIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjMsIDB4ZDIsIDB4OTIsIDB4MTIsIDB4MTksIDB4ZWUsIDB4YzIsIDB4OTIsIDB4MTIsIDB4MTksIAorICAgIDB4ZWUsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDksIDB4NzQsIDB4ODAsIDB4MTksIDB4YjIsIDB4MDAsIDB4MGMsIDB4N2UsIDB4NTQsIAorICAgIDB4MDAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MDQsIDB4MTksIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MTksIDB4YjIsIDB4MDAsIDB4MGMsIAorICAgIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4ZTEsIDB4MjIsIDB4N2UsIDB4NjgsIDB4MGMsIDB4YjEsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIAorICAgIDB4MTIsIDB4MWEsIDB4OTMsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDksIDB4MGIsIDB4MDAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIAorICAgIDB4YjIsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4NTUsIDB4MTksIDB4YTIsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIDB4YjIsIDB4MDAsIAorICAgIDB4MTgsIDB4NWUsIDB4YjAsIDB4MDUsIDB4NzgsIDB4MGQsIDB4N2UsIDB4NjgsIDB4MGEsIDB4ODIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIAorICAgIDB4OTMsIDB4ODAsIDB4MWEsIDB4N2UsIDB4NjgsIDB4MGEsIDB4OGIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MTIsIDB4MWEsIAorICAgIDB4MDgsIDB4MzAsIDB4MDksIDB4MDksIDB4MTksIDB4YTIsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4ODAsIDB4ZjcsIDB4MmUsIDB4MjQsIDB4MDEsIAorICAgIDB4MDAsIDB4YTUsIDB4ZDksIDB4YjYsIDB4N2UsIDB4NjgsIDB4MGMsIDB4ZDUsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4N2UsIAorICAgIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDksIDB4MGIsIDB4MDAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4N2UsIAorICAgIDB4YTAsIDB4NTUsIDB4MTksIDB4YTIsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4MGEsIAorICAgIDB4NzgsIDB4MGQsIDB4N2UsIDB4NjgsIDB4MGEsIDB4ODIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4ODAsIDB4MWEsIDB4N2UsIAorICAgIDB4NjgsIDB4MGEsIDB4OGIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MTIsIDB4MWEsIDB4MDgsIDB4MzAsIDB4MDksIDB4MDksIAorICAgIDB4MTksIDB4YTIsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4ODAsIDB4ZjcsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4YjYsIAorICAgIDB4MzAsIDB4MDQsIDB4MDMsIDB4MDIsIDB4MTYsIDB4OGMsIDB4N2UsIDB4NjgsIDB4MGMsIDB4ZjksIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIAorICAgIDB4OTMsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDksIDB4MGIsIDB4MDAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIAorICAgIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4NmMsIDB4YWEsIAorICAgIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4MGEsIDB4NzgsIDB4M2MsIAorICAgIDB4N2UsIDB4YTAsIDB4MDEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIAorICAgIDB4MDMsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4N2UsIDB4YTAsIDB4MDEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIAorICAgIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4MGEsIDB4NzgsIDB4MTQsIDB4N2UsIDB4NjgsIDB4MGEsIDB4ODIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIAorICAgIDB4MTIsIDB4MWEsIDB4OTMsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4OWUsIDB4ODAsIDB4MjAsIDB4N2UsIDB4NjgsIDB4MGEsIDB4OGIsIAorICAgIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MTIsIDB4MWEsIDB4MDgsIDB4MzAsIDB4MDksIDB4ZTYsIDB4N2UsIDB4YTAsIDB4MDIsIAorICAgIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4ODAsIDB4ZjEsIDB4N2UsIDB4NjgsIDB4MGQsIDB4NDEsIAorICAgIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDksIDB4MGIsIDB4MDAsIAorICAgIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4MDEsIAorICAgIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIDB4YjIsIDB4MDAsIAorICAgIDB4MTgsIDB4NWUsIDB4YjAsIDB4MDUsIDB4NzgsIDB4M2MsIDB4N2UsIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIAorICAgIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4MDMsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4N2UsIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIAorICAgIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4MDUsIDB4NzgsIDB4MTQsIDB4N2UsIDB4NjgsIAorICAgIDB4MGEsIDB4ODIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4OWUsIAorICAgIDB4ODAsIDB4MjAsIDB4N2UsIDB4NjgsIDB4MGEsIDB4OGIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MTIsIDB4MWEsIDB4MDgsIAorICAgIDB4MzAsIDB4MDksIDB4ZTYsIDB4N2UsIDB4YTAsIDB4MDEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIAorICAgIDB4ODAsIDB4ZjEsIDB4N2UsIDB4NjgsIDB4MGQsIDB4ODksIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4N2UsIDB4MjQsIDB4ODAsIAorICAgIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDksIDB4MGIsIDB4MDAsIDB4N2UsIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIAorICAgIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4NTAsIDB4YmUsIDB4YjAsIDB4NTAsIDB4NzgsIDB4MWYsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIAorICAgIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4NTAsIDB4NzgsIDB4MGQsIDB4N2UsIDB4NjgsIAorICAgIDB4MGEsIDB4ODIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4ODAsIDB4MjAsIDB4N2UsIDB4NjgsIDB4MGEsIDB4OGIsIDB4N2EsIAorICAgIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MTIsIDB4MWEsIDB4MDgsIDB4MzAsIDB4MDksIDB4MGYsIDB4N2UsIDB4YTAsIDB4MDIsIDB4MTksIAorICAgIDB4YTIsIDB4MDAsIDB4MTAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4ODAsIDB4ZjEsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIAorICAgIDB4ZDksIDB4YTIsIDB4N2UsIDB4NjgsIDB4MGQsIDB4ZDEsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4N2UsIDB4MjQsIDB4ODAsIAorICAgIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDksIDB4MGIsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4MDEsIDB4MTksIDB4YTIsIDB4MDAsIAorICAgIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4YTAsIDB4YmUsIDB4YjAsIDB4YTAsIDB4NzgsIDB4MWYsIAorICAgIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4YTAsIAorICAgIDB4NzgsIDB4MGQsIDB4N2UsIDB4NjgsIDB4MGEsIDB4ODIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4ODAsIDB4MjAsIDB4N2UsIAorICAgIDB4NjgsIDB4MGEsIDB4OGIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MTIsIDB4MWEsIDB4MDgsIDB4MzAsIDB4MDksIDB4MGYsIAorICAgIDB4N2UsIDB4YTAsIDB4MDEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4ODAsIDB4ZjEsIDB4MmUsIAorICAgIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4OWUsIDB4MDIsIDB4MTgsIDB4MmIsIDB4N2UsIDB4NjgsIDB4MGQsIDB4MWQsIDB4N2EsIDB4NmMsIDB4MDAsIAorICAgIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDksIDB4MGIsIDB4MDAsIDB4NmMsIDB4YWEsIDB4MTksIAorICAgIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIAorICAgIDB4MTAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIAorICAgIDB4MDYsIDB4NzgsIDB4M2MsIDB4N2UsIDB4YTAsIDB4MDEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIDB4YjIsIDB4MDAsIAorICAgIDB4MTgsIDB4N2UsIDB4YTAsIDB4MDMsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4N2UsIDB4YTAsIDB4MDEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIAorICAgIDB4MTksIDB4ZWUsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4MDYsIDB4NzgsIDB4MTQsIDB4N2UsIDB4NjgsIDB4MGEsIDB4ODIsIDB4N2EsIAorICAgIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4OWUsIDB4ODAsIDB4MjAsIDB4N2UsIAorICAgIDB4NjgsIDB4MGEsIDB4OGIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MTIsIDB4MWEsIDB4MDgsIDB4MzAsIDB4MDksIDB4ZTYsIAorICAgIDB4N2UsIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4ODAsIDB4ZjEsIDB4N2UsIAorICAgIDB4NjgsIDB4MGQsIDB4NjUsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIAorICAgIDB4MDksIDB4MGIsIDB4MDAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIAorICAgIDB4N2UsIDB4YTAsIDB4MDEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIAorICAgIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4MDksIDB4NzgsIDB4M2MsIDB4N2UsIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIAorICAgIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4N2UsIDB4YTAsIDB4MDMsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4N2UsIDB4YTAsIAorICAgIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4MDksIDB4NzgsIAorICAgIDB4MTQsIDB4N2UsIDB4NjgsIDB4MGEsIDB4ODIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIAorICAgIDB4YTUsIDB4ZDksIDB4OWUsIDB4ODAsIDB4MjAsIDB4N2UsIDB4NjgsIDB4MGEsIDB4OGIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIAorICAgIDB4MTIsIDB4MWEsIDB4MDgsIDB4MzAsIDB4MDksIDB4ZTYsIDB4N2UsIDB4YTAsIDB4MDEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4NmMsIDB4YWEsIDB4MTksIAorICAgIDB4YTIsIDB4MDAsIDB4MTAsIDB4ODAsIDB4ZjEsIDB4N2UsIDB4NjgsIDB4MGQsIDB4YWQsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIAorICAgIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDksIDB4MGIsIDB4MDAsIDB4N2UsIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIAorICAgIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4OTAsIDB4YmUsIDB4YjAsIDB4OTAsIDB4NzgsIDB4MWYsIDB4NmMsIAorICAgIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTgsIDB4NWUsIDB4YjAsIDB4OTAsIDB4NzgsIAorICAgIDB4MGQsIDB4N2UsIDB4NjgsIDB4MGEsIDB4ODIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4ODAsIDB4MjAsIDB4N2UsIDB4NjgsIAorICAgIDB4MGEsIDB4OGIsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MTIsIDB4MWEsIDB4MDgsIDB4MzAsIDB4MDksIDB4MGYsIDB4N2UsIAorICAgIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4ODAsIDB4ZjEsIDB4MmUsIDB4MjQsIAorICAgIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4YTIsIDB4MDIsIDB4MTgsIDB4YjcsIDB4MzAsIDB4MTcsIDB4MDMsIDB4MDIsIDB4MTksIDB4M2IsIDB4YzIsIDB4OGEsIAorICAgIDB4MTIsIDB4MTksIDB4MjIsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDksIDB4NmMsIDB4YWEsIDB4MTksIDB4YTIsIDB4MDAsIDB4MDQsIAorICAgIDB4MTIsIDB4MTksIDB4ZWUsIDB4MGIsIDB4MDAsIDB4N2UsIDB4YTAsIDB4MDgsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MjAsIAorICAgIDB4OGIsIDB4M2UsIDB4MjAsIDB4ODksIDB4M2IsIDB4N2UsIDB4YTAsIDB4MDgsIDB4MTksIDB4YTIsIDB4MDAsIDB4MDQsIDB4MDksIDB4YTIsIDB4MDAsIDB4MTAsIAorICAgIDB4NGUsIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MzAsIDB4OGIsIDB4MjMsIDB4MzAsIDB4ODksIDB4MjAsIAorICAgIDB4MDksIDB4YTIsIDB4MDAsIDB4MTAsIDB4NWUsIDB4YTAsIDB4ZmQsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4N2UsIDB4YTAsIAorICAgIDB4MDAsIDB4MTksIDB4YTIsIDB4MDAsIDB4MDQsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MjAsIDB4OGIsIDB4MDUsIDB4MjAsIDB4ODksIDB4MDIsIDB4ODAsIDB4MWEsIAorICAgIDB4MTIsIDB4MWEsIDB4MDgsIDB4MzAsIDB4MDksIDB4MTQsIDB4N2UsIDB4YTAsIDB4MDIsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NWUsIAorICAgIDB4YTAsIDB4ZmQsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZWMsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIAorICAgIDB4ODksIDB4MDIsIDB4MTksIDB4M2IsIDB4MjAsIDB4MTcsIDB4ZmEsIDB4MTIsIDB4MTMsIDB4OGEsIDB4MTIsIDB4MTksIDB4MjIsIDB4N2UsIDB4MjQsIDB4ODAsIAorICAgIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDksIDB4MGIsIDB4MDAsIDB4MjAsIDB4ODksIDB4MjYsIDB4N2UsIDB4YTAsIDB4ZmYsIDB4MTksIDB4YTIsIDB4MDAsIDB4MDQsIAorICAgIDB4MTIsIDB4MTksIDB4ZWUsIDB4N2UsIDB4YjAsIDB4NTUsIDB4MTksIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MzAsIDB4ODksIDB4MGYsIAorICAgIDB4N2UsIDB4YTAsIDB4MDAsIDB4MTksIDB4YTIsIDB4MDAsIDB4MDQsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MjAsIDB4ODksIDB4MDIsIDB4ODAsIDB4MjYsIDB4MTIsIAorICAgIDB4MWEsIDB4MDgsIDB4MzAsIDB4MDksIDB4MjAsIDB4N2UsIDB4YTAsIDB4ZmYsIDB4MTksIDB4YTIsIDB4MDAsIDB4MDQsIDB4MTIsIDB4MTksIDB4ZWUsIDB4N2UsIAorICAgIDB4YjAsIDB4NTUsIDB4MTksIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MTksIDB4ZWUsIDB4N2UsIDB4YTAsIDB4MDAsIDB4MTksIDB4YTIsIDB4MDAsIDB4MDQsIAorICAgIDB4MTIsIDB4MTksIDB4ZWUsIDB4ODAsIDB4ZTAsIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4YTgsIDB4MDIsIDB4MTksIDB4M2IsIDB4N2UsIAorICAgIDB4MjQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDksIDB4N2UsIDB4YTAsIDB4MDgsIDB4MTksIDB4YTIsIDB4MDAsIDB4MTAsIDB4MTIsIDB4MTksIDB4ZWUsIAorICAgIDB4MmUsIDB4MjQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4ZDksIDB4ZWYsIDB4MjIsIDB4MzAsIDB4MGEsIDB4MTksIDB4N2UsIDB4NjgsIDB4MGQsIDB4ZjUsIDB4N2EsIAorICAgIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4ZDIsIDB4MDksIDB4MTIsIDB4MTksIDB4ZWUsIDB4MTIsIDB4MTksIDB4ZWUsIDB4MTIsIDB4MTksIAorICAgIDB4ZWUsIDB4MDIsIDB4MGYsIDB4MTAsIDB4MzAsIDB4MTcsIDB4MWMsIDB4N2UsIDB4NjgsIDB4MGUsIDB4NmYsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIAorICAgIDB4MWEsIDB4OTMsIDB4N2UsIDB4NjgsIDB4MGUsIDB4OTEsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MTIsIDB4MWIsIDB4M2MsIAorICAgIDB4MDIsIDB4MTksIDB4ZTYsIDB4MGIsIDB4MDAsIDB4N2UsIDB4NzgsIDB4MTksIDB4YTAsIDB4N2EsIDB4N2MsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4NjcsIDB4N2EsIAorICAgIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NzAsIDB4M2UsIDB4N2UsIDB4N2IsIDB4YjAsIDB4N2EsIDB4NmIsIDB4YjAsIDB4MGIsIDB4N2MsIDB4MGIsIDB4NmMsIAorICAgIDB4YTUsIDB4ZGYsIDB4ZjMsIDB4N2UsIDB4NzgsIDB4MTksIDB4YTAsIDB4N2EsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODksIDB4NzgsIDB4N2UsIDB4NzgsIDB4MDAsIAorICAgIDB4MDAsIDB4N2EsIDB4N2MsIDB4MDAsIDB4ZmUsIDB4N2UsIDB4NjgsIDB4N2YsIDB4YmYsIDB4N2EsIDB4NmMsIDB4MDAsIDB4ZmUsIDB4NzQsIDB4YWEsIDB4MzksIAorICAgIDB4YjcsIDB4NTUsIDB4NTUsIDB4NzQsIDB4NTUsIDB4MzksIDB4YjcsIDB4MmEsIDB4YWEsIDB4NzQsIDB4YTAsIDB4MzksIDB4YjcsIDB4NTUsIDB4NTUsIDB4NmMsIAorICAgIDB4OTksIDB4N2EsIDB4NmIsIDB4OTAsIDB4N2UsIDB4NTQsIDB4MjcsIDB4MTAsIDB4N2UsIDB4NmIsIDB4ODAsIDB4YmMsIDB4ODksIDB4NjgsIDB4MDgsIDB4MWIsIAorICAgIDB4NTQsIDB4NzgsIDB4ZjUsIDB4OGEsIDB4ZmYsIDB4MTksIDB4ZGUsIDB4OGEsIDB4ZmYsIDB4MTksIDB4ZTYsIDB4MTIsIDB4MWEsIDB4MDgsIDB4N2UsIDB4NmIsIAorICAgIDB4ODAsIDB4ODAsIDB4ZmIsIDB4N2UsIDB4MTAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4ODUsIDB4ODAsIDB4ZjgsIDB4Y2EsIDB4ZjksIDB4N2UsIDB4ZjQsIDB4MDAsIAorICAgIDB4ZmYsIDB4MWIsIDB4ZjQsIDB4NzgsIDB4ZmMsIDB4ZGEsIDB4ZjksIDB4MjIsIDB4Y2EsIDB4ZjksIDB4N2UsIDB4ZjQsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ZjQsIAorICAgIDB4NzgsIDB4ZmMsIDB4ZGEsIDB4ZjksIDB4MjIsIDB4MjAsIDB4MDksIDB4MTksIDB4ZDIsIDB4MGEsIDB4MTIsIDB4MTksIDB4ZmIsIDB4YzIsIDB4OTUsIDB4ZDIsIAorICAgIDB4OTQsIDB4MTIsIDB4MTksIDB4ZmIsIDB4MTIsIDB4MTksIDB4ZmIsIDB4MTIsIDB4MTksIDB4ZmIsIDB4MTIsIDB4MTksIDB4ZmIsIDB4NDMsIDB4OTAsIDB4MzAsIAorICAgIDB4MjIsIDB4Y2EsIDB4MGIsIDB4N2UsIDB4MTAsIDB4MDMsIDB4N2MsIDB4MzAsIDB4NmMsIDB4MjIsIDB4MGIsIDB4MjAsIDB4OWUsIDB4MzAsIDB4MGEsIDB4NTAsIAorICAgIDB4ZjksIDB4MmUsIDB4MzAsIDB4MGIsIDB4MWIsIDB4MjAsIDB4NjgsIDB4MTgsIDB4MTIsIDB4MTksIDB4ZmIsIDB4MTIsIDB4MTksIDB4ZmIsIDB4NTMsIDB4OTAsIAorICAgIDB4Y2YsIDB4MTIsIDB4MTksIDB4ZmIsIDB4MTIsIDB4MTksIDB4ZmIsIDB4MTIsIDB4MTksIDB4ZmIsIDB4NDMsIDB4OTAsIDB4MzAsIDB4YTUsIDB4ZGEsIDB4ZTgsIAorICAgIDB4MTIsIDB4MTksIDB4ZmIsIDB4MTIsIDB4MTksIDB4ZmIsIDB4MWIsIDB4MzAsIDB4NjgsIDB4MTksIDB4MTIsIDB4MTksIDB4ZmIsIDB4MTIsIDB4MTksIDB4ZmIsIAorICAgIDB4YzIsIDB4OTUsIDB4ZDIsIDB4OTQsIDB4MTIsIDB4MTksIDB4ZmIsIDB4MTIsIDB4MTksIDB4ZmIsIDB4MTIsIDB4MTksIDB4ZmIsIDB4NDMsIDB4OTAsIDB4MzAsIAorICAgIDB4YTUsIDB4ZGIsIDB4ZTcsIDB4N2UsIDB4MjAsIDB4MGEsIDB4MTIsIDB4MTksIDB4ZmIsIDB4YTUsIDB4ZGEsIDB4ZmEsIDB4YTUsIDB4ZDksIDB4YTcsIDB4ZGEsIAorICAgIDB4MGIsIDB4MjIsIDB4MjAsIDB4MDksIDB4MGEsIDB4MTIsIDB4MTksIDB4ZmIsIDB4YjIsIDB4OTQsIDB4MTIsIDB4MTksIDB4ZmIsIDB4YjIsIDB4OTQsIDB4MjIsIAorICAgIDB4MzAsIDB4MTcsIDB4MzIsIDB4MjAsIDB4MDksIDB4MmYsIDB4Y2EsIDB4MmIsIDB4Y2EsIDB4N2IsIDB4N2UsIDB4NzgsIDB4ODAsIDB4MDAsIDB4N2EsIDB4N2MsIAorICAgIDB4MDAsIDB4ZmUsIDB4MTIsIDB4MWIsIDB4MWMsIDB4N2UsIDB4NmIsIDB4YTAsIDB4NWMsIDB4YWEsIDB4NjgsIDB4MTAsIDB4MjksIDB4YjcsIDB4MDAsIDB4MTQsIAorICAgIDB4NTQsIDB4NjAsIDB4NjgsIDB4ZjgsIDB4MzksIDB4YTcsIDB4MDAsIDB4MDAsIDB4MGIsIDB4NmMsIDB4ODAsIDB4ZTksIDB4MTIsIDB4MTksIDB4ZWUsIDB4ZDIsIAorICAgIDB4YjUsIDB4ZGEsIDB4N2IsIDB4ZGEsIDB4MmIsIDB4MjIsIDB4MTIsIDB4MWEsIDB4ZDQsIDB4N2UsIDB4NjgsIDB4MDAsIDB4MGIsIDB4MTIsIDB4MWEsIDB4OTMsIAorICAgIDB4MjIsIDB4Y2EsIDB4NTksIDB4Y2EsIDB4NWIsIDB4N2UsIDB4YjQsIDB4MDAsIDB4MGIsIDB4N2MsIDB4YjgsIDB4YzQsIDB4MTIsIDB4MWIsIDB4MDQsIDB4N2MsIAorICAgIDB4YjgsIDB4MTIsIDB4MWIsIDB4MDQsIDB4N2MsIDB4YjksIDB4YzQsIDB4MTIsIDB4MWIsIDB4MDQsIDB4N2MsIDB4YjksIDB4MTIsIDB4MWIsIDB4MDQsIDB4N2UsIAorICAgIDB4YjAsIDB4NjgsIDB4N2EsIDB4YjksIDB4YjAsIDB4MGIsIDB4YjQsIDB4NmMsIDB4YmIsIDB4N2EsIDB4YjksIDB4YjAsIDB4ZGEsIDB4NTksIDB4ZGEsIDB4NWIsIAorICAgIDB4MjIsIDB4NWUsIDB4YjAsIDB4MGYsIDB4N2MsIDB4YWIsIDB4OWUsIDB4YTAsIDB4MGEsIDB4NDAsIDB4MDUsIDB4MmUsIDB4YjAsIDB4MzcsIDB4ODAsIDB4MDMsIAorICAgIDB4MmUsIDB4YjAsIDB4MzAsIDB4N2EsIDB4YjksIDB4YjAsIDB4MGIsIDB4YjQsIDB4MjIsIDB4YzIsIDB4YjUsIDB4YzIsIDB4OTIsIDB4MTIsIDB4MTksIDB4ZWUsIAorICAgIDB4NzQsIDB4ODAsIDB4MzksIDB4YjcsIDB4MDAsIDB4MGMsIDB4N2UsIDB4NTQsIDB4MDAsIDB4MDYsIDB4MzksIDB4YTcsIDB4MDAsIDB4MDQsIDB4MzksIDB4YjcsIAorICAgIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MzksIDB4YjcsIDB4MDAsIDB4MGMsIDB4MjIsIDB4N2UsIDB4NzgsIDB4MDAsIDB4MDAsIDB4N2EsIDB4N2MsIDB4MDAsIAorICAgIDB4ZmYsIDB4N2UsIDB4NTgsIDB4MDAsIDB4MDAsIDB4N2EsIDB4NWMsIDB4MDAsIDB4MDEsIDB4N2YsIDB4NjUsIDB4N2UsIDB4NzQsIDB4MjAsIDB4MDAsIDB4MTIsIAorICAgIDB4MDgsIDB4ZDYsIDB4NDAsIDB4NTQsIDB4N2UsIDB4NzgsIDB4N2MsIDB4MDAsIDB4N2EsIDB4N2MsIDB4MDAsIDB4ZmYsIDB4N2UsIDB4NTgsIDB4MDAsIDB4MDAsIAorICAgIDB4N2EsIDB4NWMsIDB4MDAsIDB4MDEsIDB4N2UsIDB4NjgsIDB4N2MsIDB4MDAsIDB4N2EsIDB4NmMsIDB4MDAsIDB4MDEsIDB4N2UsIDB4NzQsIDB4MDQsIDB4MDAsIAorICAgIDB4MTIsIDB4MDgsIDB4ZDYsIDB4NDAsIDB4MzMsIDB4NzQsIDB4ODAsIDB4MTIsIDB4MWIsIDB4YjEsIDB4NDAsIDB4MmMsIDB4NTMsIDB4OTAsIDB4Y2YsIDB4ZDIsIAorICAgIDB4MDgsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MDgsIDB4N2UsIDB4MTQsIDB4MDAsIDB4MDAsIDB4ODQsIDB4YTUsIDB4ZGIsIDB4ZmMsIDB4YTUsIDB4ZGEsIDB4ZjksIAorICAgIDB4YTUsIDB4ZDksIDB4ZjYsIDB4NzQsIDB4NDAsIDB4MTIsIDB4MWIsIDB4YjEsIDB4NDAsIDB4MGUsIDB4N2UsIDB4NjgsIDB4MGUsIDB4YzAsIDB4N2EsIDB4NmMsIAorICAgIDB4MDAsIDB4ZmYsIDB4MTIsIDB4MWEsIDB4OTMsIDB4MDIsIDB4MTksIDB4ZTYsIDB4YzIsIDB4OTUsIDB4ZDIsIDB4OTQsIDB4ODAsIDB4ZmUsIDB4ZjUsIDB4MGEsIAorICAgIDB4N2UsIDB4NzgsIDB4MDAsIDB4MGEsIDB4N2EsIDB4N2MsIDB4MDAsIDB4MDAsIDB4N2UsIDB4NjgsIDB4N2YsIDB4YmYsIDB4N2EsIDB4NmMsIDB4MDAsIDB4MDEsIAorICAgIDB4N2UsIDB4NzQsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDgsIDB4ZDYsIAorfTsKKworc3RhdGljIHN0cnVjdCBlZGdlX2Zpcm13YXJlX3ZlcnNpb25faW5mbyBJTUFHRV9WRVJTSU9OX05BTUUgPSB7CisJMSwgMTIsIDIgfTsJCS8vIE1ham9yLCBNaW5vciwgQnVpbGQKKworI3VuZGVmIElNQUdFX1ZFUlNJT05fTkFNRQorCisjdW5kZWYgSU1BR0VfQVJSQVlfTkFNRQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZndfYm9vdDIuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19md19ib290Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YzNhM2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZndfYm9vdDIuaApAQCAtMCwwICsxLDU0NiBAQAorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8qIEVkZ2Vwb3J0LzQgQmluYXJ5IEltYWdlCisvLyogR2VuZXJhdGVkIGJ5IEhFWDJDIHYxLjA2CisvLyogQ29weXJpZ2h0IChDKSAxOTk4IEluc2lkZSBPdXQgTmV0d29ya3MsIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy8vKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLy8qCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisvLyoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisvL0ltYWdlIHN0cnVjdHVyZSBkZWZpbml0aW9uCisjaWYgIWRlZmluZWQoREVGSU5FRF9FREdFX0ZJUk1XQVJFX0lNQUdFX1JFQ09SRCkKKyNkZWZpbmUgREVGSU5FRF9FREdFX0ZJUk1XQVJFX0lNQUdFX1JFQ09SRAorCXN0cnVjdCBlZGdlX2Zpcm13YXJlX2ltYWdlX3JlY29yZCB7CisJCV9fbGUxNiBFeHRBZGRyOworCQlfX2xlMTYgQWRkcjsKKwkJX19sZTE2IExlbjsKKwkJdW5zaWduZWQgY2hhciAgRGF0YVswXTsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCXN0cnVjdCBlZGdlX2Zpcm13YXJlX3ZlcnNpb25faW5mbyB7CisJCXVuc2lnbmVkIGNoYXIJIE1ham9yVmVyc2lvbjsKKwkJdW5zaWduZWQgY2hhciAgTWlub3JWZXJzaW9uOworCQl1bnNpZ25lZCBzaG9ydCBCdWlsZE51bWJlcjsKKwl9OworCisjZW5kaWYKKworI2lmICFkZWZpbmVkKElNQUdFX0FSUkFZX05BTUUpCisjZGVmaW5lIElNQUdFX0FSUkFZX05BTUUJCUZpcm13YXJlSW1hZ2UKKyNkZWZpbmUgSU1BR0VfVkVSU0lPTl9OQU1FCUZpcm13YXJlSW1hZ2VWZXJzaW9uCisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgSU1BR0VfQVJSQVlfTkFNRVtdID0geworCisvLyBTZWdtZW50ICMxLCBTdGFydCBBZGRyZXNzIDAwZmYwMDAwLCBMZW5ndGggNgorMHhmZiwweDAwLDB4MDAsMHgwMCwweDA2LDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMywgCisKKy8vIFNlZ21lbnQgIzIsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMGIsIExlbmd0aCAzCisweGZmLDB4MDAsMHgwYiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDBiLCAKKworLy8gU2VnbWVudCAjMywgU3RhcnQgQWRkcmVzcyAwMGZmMDAxMywgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDEzLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDIsIDB4NTYsIAorCisvLyBTZWdtZW50ICM0LCBTdGFydCBBZGRyZXNzIDAwZmYwMDFiLCBMZW5ndGggMworMHhmZiwweDAwLDB4MWIsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgxYiwgCisKKy8vIFNlZ21lbnQgIzUsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMjMsIExlbmd0aCAzCisweGZmLDB4MDAsMHgyMywweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDIzLCAKKworLy8gU2VnbWVudCAjNiwgU3RhcnQgQWRkcmVzcyAwMGZmMDAyYiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDJiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4MmIsIAorCisvLyBTZWdtZW50ICM3LCBTdGFydCBBZGRyZXNzIDAwZmYwMDMzLCBMZW5ndGggMworMHhmZiwweDAwLDB4MzMsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgzMywgCisKKy8vIFNlZ21lbnQgIzgsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwM2IsIExlbmd0aCAzCisweGZmLDB4MDAsMHgzYiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDNiLCAKKworLy8gU2VnbWVudCAjOSwgU3RhcnQgQWRkcmVzcyAwMGZmMDA0MywgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDQzLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4NDMsIAorCisvLyBTZWdtZW50ICMxMCwgU3RhcnQgQWRkcmVzcyAwMGZmMDA0YiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDRiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4NGIsIAorCisvLyBTZWdtZW50ICMxMSwgU3RhcnQgQWRkcmVzcyAwMGZmMDA1MywgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDUzLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDEsIDB4ZjUsIAorCisvLyBTZWdtZW50ICMxMiwgU3RhcnQgQWRkcmVzcyAwMGZmMDA3YiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDdiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4N2IsIAorCisvLyBTZWdtZW50ICMxMywgU3RhcnQgQWRkcmVzcyAwMGZmMDA4MCwgTGVuZ3RoIDUzNAorMHhmZiwweDAwLDB4ODAsMHgwMCwweDE2LDB4MDIsCisgICAgMHg3ZSwgMHhiMywgMHg5MSwgMHgwMSwgMHgyMCwgMHhlMywgMHgwYywgMHg3ZSwgMHhiMywgMHgzZiwgMHhmMiwgMHg1NCwgMHhmZSwgMHg3YSwgMHhiMywgMHgzZiwgCisgICAgMHhmMiwgMHg4MCwgMHgwYSwgMHg3ZSwgMHhiMywgMHgzZiwgMHhmMiwgMHg0NCwgMHgwMSwgMHg3YSwgMHhiMywgMHgzZiwgMHhmMiwgMHg3NCwgMHgwMCwgMHg3YSwgCisgICAgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMSwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMiwgMHg3ZSwgMHhmOCwgMHgwMCwgMHgyNCwgMHg3ZSwgMHgwMCwgMHgwMSwgCisgICAgMHg3ZSwgMHgxMCwgMHgwMCwgMHgxMiwgMHgwOSwgMHhkMCwgMHg2OSwgMHgyMCwgMHgwMCwgMHgwYSwgMHg1ZSwgMHg0MCwgMHgxZiwgMHhiZSwgMHgyNCwgMHgwMCwgCisgICAgMHgwMCwgMHg3OCwgMHgwOSwgMHg3ZSwgMHgwMCwgMHgwMywgMHg3YSwgMHgwMywgMHg5MCwgMHgwMCwgMHg4MCwgMHgwNywgMHg3ZSwgMHgwMCwgMHgwMiwgMHg3YSwgCisgICAgMHgwMywgMHg5MCwgMHgwMCwgMHg3NSwgMHhiMCwgMHhkZiwgMHg3ZSwgMHgwMCwgMHgwMSwgMHg3YSwgMHgwMywgMHg5NCwgMHgwMCwgMHg3YSwgMHgwMywgMHgwMSwgCisgICAgMHgyNCwgMHg3ZSwgMHgwMCwgMHgwMSwgMHg3YSwgMHgwMywgMHg5MywgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHhhNSwgMHhkOCwgMHhmZCwgMHg3NSwgMHhhOCwgCisgICAgMHgwMCwgMHg3NSwgMHhiMSwgMHgwMCwgMHhjYSwgMHgyOSwgMHgxMiwgMHgwYywgMHg2NiwgMHgxMiwgMHgwYywgMHgzNywgMHhmNSwgMHgyMSwgMHg3YSwgMHhhMSwgCisgICAgMHgyMCwgMHgyMCwgMHgwOSwgMHgwOCwgMHgyMCwgMHgwYSwgMHgwYSwgMHg3ZSwgMHhiMCwgMHgwYywgMHg4MCwgMHgwOCwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg4MCwgCisgICAgMHgwMywgMHg3ZSwgMHhiMCwgMHgwOCwgMHg3YSwgMHhiMywgMHg5MiwgMHgwMCwgMHgxMiwgMHgwMiwgMHg5NiwgMHhkYSwgMHgyOSwgMHg3NCwgMHgxMCwgMHg3YSwgCisgICAgMHhiMywgMHg5MSwgMHgwMSwgMHg3ZSwgMHgyMCwgMHgwNCwgMHg3YywgMHhiMiwgMHhjMiwgMHhkNywgMHgxMywgMHgxMywgMHgxMywgMHgxMywgMHg3YSwgMHhiMywgCisgICAgMHg5MSwgMHgwMCwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMCwgMHg3NCwgMHg2MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxYywgMHg3NCwgMHgwMiwgCisgICAgMHg3YSwgMHhiMywgMHg5MSwgMHgxMiwgMHhhNSwgMHhkYSwgMHhkZiwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHg2MCwgMHg3YSwgCisgICAgMHhiMywgMHg5MSwgMHgxYywgMHg3NCwgMHgxMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNiwgMHg3NCwgMHgxMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNywgMHg3NCwgCisgICAgMHgzNCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMywgMHg3NCwgMHgzZiwgMHg3YSwgMHhiMywgMHg5MSwgMHgxNCwgMHg3NCwgMHgwMiwgMHg3YSwgMHhiMywgMHg5MSwgCisgICAgMHgwNiwgMHg3NCwgMHgwMSwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNywgMHg3NCwgMHgwMywgMHg3YSwgMHhiMywgMHg5MSwgMHgwNiwgMHg3NCwgMHg0NCwgMHg3YSwgCisgICAgMHhiMywgMHg5MSwgMHgwNywgMHg3NCwgMHhlZiwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNCwgMHg3NCwgMHgwNywgMHg3YSwgMHhiMywgMHg5MSwgMHgwNiwgMHg3ZSwgCisgICAgMHhiMywgMHg5MSwgMHgwNywgMHg3YSwgMHhiMSwgMHgwYSwgMHg3NSwgMHgwOSwgMHgwMSwgMHhkMiwgMHhhYSwgMHhkMiwgMHhhZiwgMHhlNCwgMHg3ZSwgMHg2MCwgCisgICAgMHgwMiwgMHg0ZCwgMHgyMiwgMHg3OCwgMHgwMywgMHg3ZSwgMHg2MCwgMHgwMywgMHg3YywgMHg3NiwgMHg3ZSwgMHgwNCwgMHgyOCwgMHgwMCwgMHg4ZCwgMHhlZiwgCisgICAgMHgxYiwgMHgwNCwgMHg3OCwgMHhmYSwgMHgwNCwgMHg3ZSwgMHgyMCwgMHgwNywgMHg3YSwgMHgyMywgMHg5MSwgMHgwNiwgMHg3ZSwgMHgyMywgMHg5MSwgMHgwNywgCisgICAgMHg3ZSwgMHgzMSwgMHgwYSwgMHhiYywgMHgzMiwgMHg2OCwgMHgyMiwgMHg3YSwgMHgyMSwgMHgwYSwgMHg3ZSwgMHgyMSwgMHgwOSwgMHg2OCwgMHgxNywgMHhjYSwgCisgICAgMHhiOCwgMHg3NCwgMHgwMywgMHg3YSwgMHhiMywgMHg5MSwgMHgwNiwgMHg3ZSwgMHhiMywgMHg5MSwgMHgwNywgMHg0NCwgMHgwMiwgMHg3YSwgMHhiMywgMHg5MSwgCisgICAgMHgwNywgMHhkYSwgMHhiOCwgMHg3NSwgMHgwOSwgMHgwMCwgMHgzMCwgMHhlMCwgMHhjMSwgMHg2YywgMHg2NywgMHg3YSwgMHg2MywgMHg5MCwgMHgwMCwgMHg4MCwgCisgICAgMHhiOSwgMHhiZSwgMHhiMCwgMHgwMiwgMHgyMiwgMHhjMCwgMHhkMCwgMHg3NSwgMHgwOCwgMHhmZSwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3NCwgMHgwMiwgMHg3YSwgCisgICAgMHhiMywgMHg5MSwgMHgwNiwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNywgMHg3NCwgMHgwMywgMHg3YSwgMHhiMywgMHg5MSwgMHgwNiwgMHg3NCwgCisgICAgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNywgMHg3NCwgMHgwMiwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNCwgMHg3ZSwgMHhiMywgMHgzZiwgMHhmMiwgMHgzMCwgCisgICAgMHhlMCwgMHgwOCwgMHg3NCwgMHgxOCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMSwgMHg4MCwgMHgwNiwgMHg3NCwgMHgxMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMSwgCisgICAgMHg3NCwgMHgxMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNCwgMHgwMiwgMHgwMiwgMHgzNiwgMHg3NSwgMHgwOCwgMHhmZiwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3NCwgCisgICAgMHgwMSwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNCwgMHg3NCwgMHgwMywgMHg3YSwgMHhiMywgMHg5MSwgMHgwNiwgMHg3ZSwgMHhiMywgMHg5MSwgMHgwNywgMHg1NCwgCisgICAgMHhmYywgMHg3YSwgMHhiMywgMHg5MSwgMHgwNywgMHgzMiwgMHhjYSwgMHhiOCwgMHg3NSwgMHgwOCwgMHgwMiwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3ZSwgMHhiMywgCisgICAgMHg5MSwgMHgwMywgMHgyMCwgMHhlNSwgMHgwOCwgMHgzMCwgMHhlMCwgMHgyYiwgMHgxMiwgMHgwMiwgMHg5ZSwgMHg4MCwgMHhmMSwgMHg3ZSwgMHhiMywgMHg5MSwgCisgICAgMHgwNCwgMHgzMCwgMHhlMCwgMHgwNSwgMHhkYSwgMHhiOCwgMHgwMiwgMHgwMiwgMHgzOSwgMHgzMCwgMHhlMSwgMHgwNSwgMHhkYSwgMHhiOCwgMHgwMiwgMHgwMSwgCisgICAgMHhmNSwgMHgzMCwgMHhlNiwgMHgwNSwgMHgxMiwgMHgwNCwgMHgwMywgMHg4MCwgMHhkNSwgMHgzMCwgMHhlMiwgMHgwNSwgMHhkYSwgMHhiOCwgMHgwMiwgMHgwMCwgCisgICAgMHg4MCwgMHg4MCwgMHhjYiwgMHhkYSwgMHhiOCwgMHgzMiwgCisKKy8vIFNlZ21lbnQgIzE0LCBFWENMVURFRCBTdGFydCBBZGRyZXNzIDAwZmYzMWQ3LCBMZW5ndGggMQorCisKKy8vIFNlZ21lbnQgIzE1LCBTdGFydCBBZGRyZXNzIDAwZmYwMjk2LCBMZW5ndGggMjA5MAorMHhmZiwweDAwLDB4OTYsMHgwMiwweDJhLDB4MDgsCisgICAgMHhlNCwgMHg3YSwgMHhiMywgMHgzZiwgMHhmMSwgMHgwMiwgMHgwMywgMHg0MSwgMHhjYSwgMHgwYiwgMHhjYSwgMHgxYiwgMHhjYSwgMHgyYiwgMHhjYSwgMHgzYiwgCisgICAgMHhjYSwgMHg0YiwgMHhjYSwgMHg1YiwgMHhjYSwgMHg2YiwgMHhjYSwgMHg3YiwgMHhjYSwgMHhlYiwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgCisgICAgMHg3ZSwgMHhiMywgMHgwMSwgMHgyZSwgMHhiNCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgxYywgMHhiNCwgMHgwMSwgMHgxOSwgMHg3ZSwgMHhiMywgMHg5MSwgMHgxNCwgCisgICAgMHg1NCwgMHgxNCwgMHg2OCwgMHgwNSwgMHgxMiwgMHgwMywgMHgwNSwgMHg4MCwgMHgyMywgMHg3ZSwgMHhiMywgMHg5MSwgMHgxNCwgMHgzMCwgMHhlNSwgMHgxYywgCisgICAgMHgxMiwgMHgwNCwgMHg0MywgMHg4MCwgMHgxNywgMHg3ZSwgMHhiMywgMHg5MSwgMHgxNCwgMHgzMCwgMHhlNSwgMHgwNSwgMHgxMiwgMHgwNCwgMHg0MywgMHg4MCwgCisgICAgMHgwYiwgMHg3ZSwgMHhiMywgMHg5MSwgMHgxNCwgMHg1NCwgMHgxNCwgMHg2OCwgMHgwMywgMHgxMiwgMHgwMywgMHgwNSwgMHhkYSwgMHhlYiwgMHhkYSwgMHg3YiwgCisgICAgMHhkYSwgMHg2YiwgMHhkYSwgMHg1YiwgMHhkYSwgMHg0YiwgMHhkYSwgMHgzYiwgMHhkYSwgMHgyYiwgMHhkYSwgMHgxYiwgMHhkYSwgMHgwYiwgMHgyMiwgMHgyMCwgCisgICAgMHhlNCwgMHgxOSwgMHg3NSwgMHgwOCwgMHgwYSwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyZCwgMHg3MCwgMHgwYSwgMHg3ZSwgMHhiMywgCisgICAgMHgwMSwgMHgyZSwgMHhiNCwgMHgwMSwgMHgxZiwgMHgwMiwgMHgwMywgMHg5ZCwgMHgwMiwgMHgwOSwgMHg4YiwgMHg3NSwgMHgwOCwgMHgwYiwgMHgxMiwgMHgwYSwgCisgICAgMHhjMCwgMHg3NCwgMHgxNCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxNCwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyZSwgMHhiNCwgMHgwMiwgMHgwYywgMHgxMiwgMHgwMywgCisgICAgMHg0ZCwgMHgwMiwgMHgwMywgMHg0MSwgMHg3NCwgMHgwNCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxNCwgMHgyMiwgMHg3ZSwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwMywgCisgICAgMHgwMSwgMHgyZSwgMHg3YSwgMHgwMywgMHgwMSwgMHgyZiwgMHgyMiwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNSwgMHg1NCwgMHg2MCwgMHg2MCwgMHgwNSwgMHhiNCwgCisgICAgMHg0MCwgMHgxZSwgMHg4MCwgMHgxYywgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNiwgMHhiNCwgMHgwNSwgMHgxNSwgMHg3NSwgMHgwOCwgMHg3MSwgMHgxMiwgMHgwYSwgCisgICAgMHhjMCwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyOCwgMHg3ZSwgMHhhMCwgMHgwMSwgMHg3YSwgMHhhMywgMHg5MSwgMHgwNiwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNywgCisgICAgMHgyMiwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHgxMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMiwgMHgyMiwgMHhiZSwgMHg1NywgCisgICAgMHgwMSwgMHgyYiwgMHgyOCwgMHgwNCwgMHg3ZSwgMHg1NywgMHgwMSwgMHgyYiwgMHg3YSwgMHgwZiwgMHgwMSwgMHgzMSwgMHg3YSwgMHg1NywgMHgwMSwgMHgzNSwgCisgICAgMHg3NCwgMHgxMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMiwgMHgyMiwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3ZSwgMHhiMywgMHg5MSwgCisgICAgMHgxYSwgMHg3MCwgMHg1MywgMHg3ZSwgMHhiMywgMHg5MSwgMHgxNCwgMHgyMCwgMHhlNCwgMHg0YywgMHg3ZSwgMHhlZiwgMHgwMSwgMHgzMSwgMHg3ZSwgMHhmNywgCisgICAgMHgwMSwgMHgzNSwgMHg3ZSwgMHgwNywgMHgwMSwgMHgzNSwgMHg0ZCwgMHgwMCwgMHg2OCwgMHgyMSwgMHg3ZSwgMHgwMCwgMHgwMCwgMHhlMCwgMHg3YSwgMHhiMywgCisgICAgMHg5MSwgMHgxNywgMHhhMywgMHhhNSwgMHgwOCwgMHgxYiwgMHhmNCwgMHg2OCwgMHgwNiwgMHhhNSwgMHhiOCwgMHgxMCwgMHhmMCwgMHg4MCwgMHgxOSwgMHg3ZSwgCisgICAgMHhiMCwgMHgwMCwgMHg3YSwgMHhiMywgMHgwMSwgMHgyZSwgMHhiZSwgMHgwMCwgMHgxMCwgMHg2OCwgMHgwZCwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg3YSwgMHhiMywgCisgICAgMHgwMSwgMHgyZSwgMHg3NCwgMHg4MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxZSwgMHg3YSwgMHhlZiwgMHgwMSwgMHgzMSwgMHg3YSwgMHhmNywgMHgwMSwgMHgzNSwgCisgICAgMHg3NSwgMHgwOCwgMHgwNiwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3NCwgMHgwNCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxNCwgMHgyMiwgMHhjYSwgMHgwYiwgMHhjYSwgCisgICAgMHgxYiwgMHhjYSwgMHgyYiwgMHhjYSwgMHgzYiwgMHhjYSwgMHg0YiwgMHhjYSwgMHg1YiwgMHhjYSwgMHg2YiwgMHhjYSwgMHg3YiwgMHhjYSwgMHhlYiwgMHg3NSwgCisgICAgMHgwOCwgMHgwMywgMHgxMiwgMHgwYSwgMHhjMCwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHgwMSwgMHgyZCwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgCisgICAgMHgwMCwgMHg3NCwgMHgwMSwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMiwgMHgxMiwgMHgwNCwgMHhiMiwgMHhkYSwgMHhlYiwgMHhkYSwgMHg3YiwgMHhkYSwgMHg2YiwgCisgICAgMHhkYSwgMHg1YiwgMHhkYSwgMHg0YiwgMHhkYSwgMHgzYiwgMHhkYSwgMHgyYiwgMHhkYSwgMHgxYiwgMHhkYSwgMHgwYiwgMHgyMiwgMHg3NSwgMHgwOCwgMHgwMywgCisgICAgMHgxMiwgMHgwYSwgMHhjMCwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyZiwgMHhiNCwgMHgwMiwgMHgxMSwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHgwMSwgMHgyZiwgCisgICAgMHg3YSwgMHhiMywgMHgwMSwgMHgyZSwgMHg3NCwgMHgyMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxNCwgMHgyMiwgMHhiNCwgMHgwMSwgMHg0NiwgMHg3ZSwgMHhiMywgCisgICAgMHg5MSwgMHgwNCwgMHgyMCwgMHhlNiwgMHg0MiwgMHg3ZSwgMHgyMywgMHg5MSwgMHgxYSwgMHg3YywgMHgzMiwgMHg3ZSwgMHgxMywgMHgwMSwgMHgzMCwgMHgyYywgCisgICAgMHgyMSwgMHg3YSwgMHgyMywgMHgwMSwgMHgzMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwNCwgMHgwMSwgMHgzNywgMHg3ZSwgMHhiMywgMHg5MSwgMHgxNiwgCisgICAgMHg3YSwgMHgwOSwgMHhiMCwgMHgwYiwgMHgwNCwgMHhhNSwgMHhkYiwgMHhmNCwgMHg3NCwgMHgyMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxNCwgMHg3NSwgMHgwOCwgCisgICAgMHg3MCwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3ZSwgMHhiMywgMHgwMSwgMHgzMCwgMHg3ZSwgMHhhMywgMHgwMSwgMHgyYywgMHhiYywgMHhhYiwgMHg3OCwgMHgwMywgCisgICAgMHgxMiwgMHgwNSwgMHg1MiwgMHgyMiwgMHgwMiwgMHgwOSwgMHg4YiwgMHhkYSwgMHg1OSwgMHgwMiwgMHgwNCwgMHgxNSwgMHg3NCwgMHhlMCwgMHg3YSwgMHhiMywgCisgICAgMHg5MSwgMHgwMCwgMHg3ZSwgMHgwMywgMHg5MSwgMHgxMCwgMHg3ZSwgMHgxMywgMHg5MSwgMHgxMSwgMHg3ZSwgMHgzMywgMHg5MSwgMHgxMiwgMHg3ZSwgMHgyMywgCisgICAgMHg5MSwgMHgxMywgMHg3ZSwgMHg1MywgMHg5MSwgMHgxNCwgMHg3ZSwgMHg0MywgMHg5MSwgMHgxNSwgMHg3ZSwgMHg3MywgMHg5MSwgMHgxNiwgMHg3ZSwgMHg2MywgCisgICAgMHg5MSwgMHgxNywgMHg3YSwgMHgwZiwgMHgwMSwgMHgyNSwgMHg3YSwgMHgxZiwgMHgwMSwgMHgyOSwgMHg3NSwgMHgwOCwgMHgwNCwgMHgxMiwgMHgwYSwgMHhjMCwgCisgICAgMHg3YSwgMHgwMSwgMHgwOCwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3YSwgMHgxMSwgMHgwOCwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3YSwgMHgyMSwgMHgwOCwgMHgxMiwgCisgICAgMHgwYSwgMHhjMCwgMHg3YSwgMHgzMSwgMHgwOCwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3YSwgMHg0MSwgMHgwOCwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3YSwgMHg1MSwgCisgICAgMHgwOCwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3YSwgMHg2MSwgMHgwOCwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3YSwgMHg3MSwgMHgwOCwgMHgxMiwgMHgwYSwgMHhjMCwgCisgICAgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHg0MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwNCwgMHgxMiwgMHgwNSwgMHgyNiwgMHgyMiwgCisgICAgMHg2ZCwgMHgwMCwgMHg3ZSwgMHgxNCwgMHgwMSwgMHgwMiwgMHg3YSwgMHgwNywgMHgwMSwgMHgzNSwgMHg3YSwgMHgwMywgMHgwMSwgMHgzMCwgMHg3ZSwgMHhiMywgCisgICAgMHgwMSwgMHgyNSwgMHgyMCwgMHhlNywgMHgwZiwgMHg3YSwgMHgyMywgMHgwMSwgMHgyZiwgMHg3YSwgMHgzMywgMHgwMSwgMHgyZSwgMHhiZSwgMHgwNywgMHgwMSwgCisgICAgMHgyYiwgMHg2OCwgMHgwOSwgMHgyMiwgMHg3YSwgMHgzMywgMHgwMSwgMHgyZiwgMHg3YSwgMHgyMywgMHgwMSwgMHgyZSwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNSwgCisgICAgMHg1NCwgMHhlMywgMHgyMywgMHgyMywgMHgzMCwgMHhlMCwgMHgwMiwgMHhkMiwgMHhlNSwgMHgzMCwgMHhlNywgMHgwMiwgMHhkMiwgMHhlNCwgMHgzMCwgMHhlNSwgCisgICAgMHgwNiwgMHgzMCwgMHhlNCwgMHgwMywgMHgwMiwgMHgwOSwgMHg4YiwgMHg1NCwgMHgzZSwgMHhmNSwgMHhmMCwgMHgwMywgMHg1NCwgMHgxZiwgMHhjMywgMHgyNSwgCisgICAgMHhmMCwgMHg5MCwgMHgwNSwgMHg3ZSwgMHg3NSwgMHg4NCwgMHhmZiwgMHg3MywgMHgwMiwgMHgwNywgMHgzOSwgMHgwMiwgMHgwNSwgMHhjNiwgMHgwMiwgMHgwNywgCisgICAgMHhkMiwgMHgwMiwgMHgwNywgMHhlZCwgMHgwMiwgMHgwNiwgMHhkMCwgMHgwMiwgMHgwNiwgMHg1YiwgMHgwMiwgMHgwOCwgMHgxZSwgMHgwMiwgMHgwOCwgMHgxZSwgCisgICAgMHgwMiwgMHgwOCwgMHgyMSwgMHgwMiwgMHgwOCwgMHgyMSwgMHgwMiwgMHgwOCwgMHgyMSwgMHgwMiwgMHgwOCwgMHgyMSwgMHgwMiwgMHgwOCwgMHgyMSwgMHgwMiwgCisgICAgMHgwOCwgMHgyMSwgMHgwMiwgMHgwOCwgMHgyMSwgMHgwMiwgMHgwOCwgMHgyMSwgMHgwMiwgMHgwOCwgMHgyNywgMHgwMiwgMHgwOCwgMHhmOSwgMHgwMiwgMHgwOCwgCisgICAgMHgyNCwgMHgwMiwgMHgwOCwgMHgyNCwgMHgwMiwgMHgwOCwgMHgyNCwgMHgwMiwgMHgwOCwgMHgyNCwgMHgwMiwgMHgwOCwgMHgyNCwgMHgwMiwgMHgwOCwgMHgyNCwgCisgICAgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHg2MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxYywgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNiwgCisgICAgMHhiNCwgMHgwNiwgMHgyYSwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNywgMHg2MCwgMHg3OSwgMHg3YywgMHgwYiwgMHg3ZSwgMHgxMywgMHgwMSwgMHgyOCwgMHg3ZSwgCisgICAgMHgxNywgMHgwMSwgMHgyOSwgMHg3NSwgMHgwOCwgMHg3MiwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3YSwgMHgwMSwgMHgwOCwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3YSwgCisgICAgMHgxMSwgMHgwOCwgMHgxMiwgMHgwYSwgMHhjMCwgMHgxMiwgMHgwOSwgMHhkMCwgMHg0MCwgMHg1OCwgMHgwMiwgMHgwMywgMHg4NCwgMHhiNCwgMHgwOCwgMHgxYywgCisgICAgMHg3NSwgMHgwOCwgMHg3NCwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3ZSwgMHhiMywgMHgzZiwgMHhmMSwgMHg3ZSwgMHgwOCwgMHgwMSwgMHgzNywgMHg3YSwgMHgwYywgCisgICAgMHgwMCwgMHgwMCwgMHg3YSwgMHgwYiwgMHhiMCwgMHg3ZSwgMHg1NCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHg4NCwgMHhiNCwgMHgwMCwgMHgzMywgMHg3NSwgCisgICAgMHgwOCwgMHg3NSwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3ZSwgMHgwOCwgMHgwMSwgMHgzNywgMHg3YSwgMHgwYywgMHgwMCwgMHgwMCwgMHhjYSwgMHgwYiwgMHg3ZSwgCisgICAgMHhiMywgMHgzZiwgMHhmMiwgMHgzMCwgMHhlMCwgMHgwNywgMHg3NCwgMHgwMiwgMHg3YSwgMHgwYiwgMHhiMCwgMHg4MCwgMHgwNSwgMHg3NCwgMHgwMCwgMHg3YSwgCisgICAgMHgwYiwgMHhiMCwgMHgwYiwgMHgxNCwgMHg3NCwgMHgwMCwgMHg3YSwgMHgwYiwgMHhiMCwgMHg3ZSwgMHg1NCwgMHgwMCwgMHgwMiwgMHhkYSwgMHgwYiwgMHgwMiwgCisgICAgMHgwMywgMHg4NCwgMHgwMiwgMHgwOSwgMHg4YiwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHg2MCwgMHg3YSwgMHhiMywgMHg5MSwgCisgICAgMHgxYywgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNiwgMHhiNCwgMHgwMCwgMHg1ZiwgMHg3NSwgMHgwOCwgMHg3NiwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3ZSwgMHhiMywgCisgICAgMHgwMSwgMHgyYSwgMHg1NCwgMHgwZiwgMHhiNCwgMHgwMiwgMHgwNSwgMHg3ZSwgMHhiMCwgMHg2MCwgMHg4MCwgMHgxNywgMHhiNCwgMHgwMCwgMHgwNSwgMHg3ZSwgCisgICAgMHhiMCwgMHgwMCwgMHg4MCwgMHgwZiwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyYSwgMHgyMCwgMHhlNywgMHgwNSwgMHg3ZSwgMHhiMCwgMHg0MCwgMHg4MCwgMHgwMywgCisgICAgMHg3ZSwgMHhiMCwgMHgyMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3ZSwgMHhiMywgMHg5MSwgMHgxMSwgMHgzMCwgMHhlMCwgMHgwNCwgMHg3NCwgMHgwMSwgCisgICAgMHg4MCwgMHgwMiwgMHg3NCwgMHgwMCwgMHg3ZSwgMHgwOCwgMHgwMSwgMHgzNywgMHg3YSwgMHgwYywgMHgwMCwgMHgwMCwgMHhjYSwgMHgwYiwgMHg3YSwgMHgwYiwgCisgICAgMHhiMCwgMHgwYiwgMHgxNCwgMHg3NCwgMHgwMCwgMHg3YSwgMHgwYiwgMHhiMCwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3ZSwgMHg1NCwgCisgICAgMHgwMCwgMHgwMiwgMHhkYSwgMHgwYiwgMHgwMiwgMHgwMywgMHg4NCwgMHgwMiwgMHgwOSwgMHg4YiwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyYSwgMHg1NCwgMHgwZiwgCisgICAgMHhiNCwgMHgwMiwgMHgwNSwgMHg3ZSwgMHhiMCwgMHg2MCwgMHg4MCwgMHgxNywgMHhiNCwgMHgwMCwgMHgwNSwgMHg3ZSwgMHhiMCwgMHgwMCwgMHg4MCwgMHgwZiwgCisgICAgMHg3ZSwgMHhiMywgMHgwMSwgMHgyYSwgMHgyMCwgMHhlNywgMHgwNSwgMHg3ZSwgMHhiMCwgMHg0MCwgMHg4MCwgMHgwMywgMHg3ZSwgMHhiMCwgMHgyMCwgMHg3YSwgCisgICAgMHhiMywgMHg5MSwgMHgwMCwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyOCwgMHhiNCwgMHgwMCwgMHgyNiwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNiwgMHhiNCwgMHgwMSwgCisgICAgMHgwZSwgMHg3NSwgMHgwOCwgMHg3NywgMHgxMiwgMHgwYSwgMHhjMCwgMHg3NCwgMHgwMSwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMiwgMHg4MCwgMHgxYiwgMHhiNCwgCisgICAgMHgwMywgMHgwZSwgMHg3NSwgMHgwOCwgMHg3OCwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3NCwgMHgwMSwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMSwgMHg4MCwgMHgwYSwgCisgICAgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHgxMiwgMHgwOSwgMHg4YiwgMHgyMiwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgCisgICAgMHgwMiwgMHgwMywgMHg3NywgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNiwgMHhiNCwgMHgwOSwgMHgxZiwgMHg3NSwgMHgwOCwgMHg3OSwgMHgxMiwgMHgwYSwgMHhjMCwgCisgICAgMHg3ZSwgMHhiMywgMHgwMSwgMHgyOCwgMHhiZSwgMHhiMywgMHgzZiwgMHhmMSwgMHg2OCwgMHgwZCwgMHhjYSwgMHhiOCwgMHgxMiwgMHgwMSwgMHhmMSwgMHhkYSwgCisgICAgMHhiOCwgMHg1MCwgMHg3NiwgMHg3YSwgMHhiMywgMHgzZiwgMHhmMSwgMHg4MCwgMHg2ZCwgMHhiNCwgMHgwNSwgMHgwOCwgMHg3NSwgMHgwOCwgMHg3YSwgMHgxMiwgCisgICAgMHgwYSwgMHhjMCwgMHg4MCwgMHg2MiwgMHhiNCwgMHgwMywgMHgxOSwgMHg3NSwgMHgwOCwgMHg3YiwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3ZSwgMHhiMywgMHgwMSwgCisgICAgMHgyOCwgMHhiNCwgMHgwMSwgMHg1NSwgMHg3ZSwgMHhiMywgMHgzZiwgMHhmMiwgMHg0NCwgMHgwMSwgMHg3YSwgMHhiMywgMHgzZiwgMHhmMiwgMHg4MCwgMHg0NiwgCisgICAgMHhiNCwgMHgwMSwgMHgxOSwgMHg3NSwgMHgwOCwgMHg3YywgMHgxMiwgMHgwYSwgMHhjMCwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyOCwgMHhiNCwgMHgwMSwgMHgzOSwgCisgICAgMHg3ZSwgMHhiMywgMHgzZiwgMHhmMiwgMHg1NCwgMHhmZSwgMHg3YSwgMHhiMywgMHgzZiwgMHhmMiwgMHg4MCwgMHgyYSwgMHhiNCwgMHgwNywgMHgyYSwgMHg3ZSwgCisgICAgMHhiMywgMHgwMSwgMHgyNywgMHg2MCwgMHgyNCwgMHg3YywgMHgwYiwgMHg3ZSwgMHgxMywgMHgwMSwgMHgyOCwgMHg3ZSwgMHgxNywgMHgwMSwgMHgyOSwgMHg3NSwgCisgICAgMHgwOCwgMHg3MywgMHgxMiwgMHgwYSwgMHhjMCwgMHg3YSwgMHgwMSwgMHgwOCwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3YSwgMHgxMSwgMHgwOCwgMHgxMiwgMHgwYSwgCisgICAgMHhjMCwgMHgxMiwgMHgwYSwgMHgwYSwgMHg0MCwgMHgwMywgMHgwMiwgMHgwMywgMHg3NywgMHgwMiwgMHgwOSwgMHg4YiwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNiwgCisgICAgMHhiNCwgMHgwYiwgMHhmNiwgMHg3NSwgMHgwOCwgMHg3ZCwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyOCwgMHg3ZSwgMHhhMywgMHgwMSwgCisgICAgMHgyYSwgMHg0YywgMHhhYiwgMHg3OCwgMHhlNCwgMHg4MCwgMHhkZiwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHg2MCwgMHg3YSwgCisgICAgMHhiMywgMHg5MSwgMHgxYywgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNiwgMHhiNCwgMHgwYSwgMHhjZiwgMHg3NSwgMHgwOCwgMHg3ZSwgMHgxMiwgMHgwYSwgMHhjMCwgCisgICAgMHg3ZSwgMHhiMywgMHgwMSwgMHgyOCwgMHg3MCwgMHhjMywgMHg3ZSwgMHgwOCwgMHgwMSwgMHgzNywgMHg3YSwgMHgwYywgMHgwMCwgMHgwMCwgMHg3YSwgMHgwYiwgCisgICAgMHhiMCwgMHg3ZSwgMHg1NCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHg4NCwgMHgwMiwgMHgwOSwgMHg4YiwgMHgwMiwgMHgwOSwgMHg4YiwgMHgwMiwgMHgwOSwgCisgICAgMHg4YiwgMHg3ZSwgMHhiMywgMHgwMSwgMHgyNiwgMHhiNCwgMHgwNCwgMHgyMCwgMHg3NSwgMHgwOCwgMHhjMywgMHgxMiwgMHgwYSwgMHhjMCwgMHg3ZSwgMHgwNCwgCisgICAgMHgwMCwgMHgwMSwgMHg3ZSwgMHgxNywgMHgwMSwgMHgyNywgMHg3ZSwgMHgxOCwgMHgwMSwgMHgzNywgMHg3YSwgMHgxYywgMHgwMCwgMHgwMCwgMHg3ZSwgMHg0NywgCisgICAgMHgwMSwgMHgyYiwgMHgxMiwgMHgwYSwgMHhjYywgMHgwMiwgMHgwOCwgMHhmMywgMHhiNCwgMHgwNiwgMHg0MiwgMHg3NSwgMHgwOCwgMHhjMSwgMHgxMiwgMHgwYSwgCisgICAgMHhjMCwgMHg3ZSwgMHg1OCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg1YywgMHgwMCwgMHhmZSwgMHg3ZCwgMHhjYSwgMHg3ZSwgMHhkNywgMHgwMSwgMHgyNywgMHg3ZSwgCisgICAgMHg3OCwgMHgwMSwgMHgzNywgMHg3YSwgMHg3YywgMHgwMCwgMHgwMCwgMHg3ZSwgMHg3NywgMHgwMSwgMHgyYiwgMHg3NSwgMHgwOCwgMHhjMSwgMHgxMiwgMHgwYSwgCisgICAgMHhjMCwgMHhjMCwgMHhhOCwgMHhjMiwgMHhhZiwgMHg3ZSwgMHg0MCwgMHgwMSwgMHg3YSwgMHg0MywgMHg5NCwgMHgwMCwgMHgxMiwgMHgwYiwgMHg2MywgMHg3ZSwgCisgICAgMHg0MywgMHgwMSwgMHgyNCwgMHg3YSwgMHg0MywgMHg5NCwgMHgwMCwgMHhkMCwgMHhhOCwgMHg0MCwgMHg2NSwgMHg4MCwgMHg2MCwgMHhiNCwgMHgwMCwgMHgyNCwgCisgICAgMHhjMiwgMHhhZiwgMHg3ZSwgMHhiMCwgMHgwMSwgMHg3YSwgMHhiMywgMHg5NCwgMHgwMCwgMHg3YSwgMHhiMywgMHgwMSwgMHgyNCwgMHgxMiwgMHgwMywgMHg3NywgCisgICAgMHhlNCwgMHg4ZCwgMHhlZiwgMHg4ZCwgMHhlZiwgMHg4ZCwgMHhlZiwgMHhkNSwgMHhlMCwgMHhmNywgMHhjMCwgMHhkMSwgMHhjYSwgMHgwMiwgMHhmZiwgMHhjYSwgCisgICAgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwgMHhiNCwgMHgwOSwgMHgyMCwgMHg3NCwgMHgwMywgMHg3YSwgMHhiMywgMHg5MSwgMHgwNiwgMHg3ZSwgMHgyMywgMHg5MSwgCisgICAgMHgwNywgMHg3ZSwgMHg1NywgMHgwMSwgMHgyNywgMHg0ZCwgMHg1NSwgMHg2OCwgMHgwNSwgMHg0ZSwgMHgyMCwgMHgwMiwgMHg4MCwgMHgwMywgMHg1ZSwgMHgyMCwgCisgICAgMHhmZCwgMHg3YSwgMHgyMywgMHg5MSwgMHgwNywgMHg4MCwgMHgxNiwgMHhiNCwgMHgwNywgMHgxNiwgMHhjMiwgMHhhZiwgMHg3ZSwgMHgwNywgMHgwMSwgMHgyOSwgCisgICAgMHg3ZSwgMHgxNywgMHgwMSwgMHgyNywgMHhjMCwgMHhkMSwgMHhjYSwgMHgxOCwgMHhjYSwgMHgzOCwgMHhjYSwgMHgyOCwgMHgzMiwgMHgwMiwgMHgwMywgMHg3NywgCisgICAgMHgwMiwgMHgwOSwgMHg4YiwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHg2MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxYywgMHg3ZSwgCisgICAgMHhiMywgMHgwMSwgMHgyNiwgMHhiNCwgMHgwMywgMHgxNSwgMHg3NSwgMHgwOCwgMHhjMiwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3ZSwgMHgwNCwgMHgwMCwgMHgwMSwgCisgICAgMHg3ZSwgMHgxNywgMHgwMSwgMHgyNywgMHg3ZSwgMHg1NywgMHgwMSwgMHgyYiwgMHgwMiwgMHgwMywgMHg4NCwgMHhiNCwgMHgwNSwgMHg0MSwgMHg3NSwgMHgwOCwgCisgICAgMHhjMCwgMHgxMiwgMHgwYSwgMHhjMCwgMHhjMCwgMHhhOCwgMHhjMiwgMHhhZiwgMHg3ZSwgMHg0MCwgMHgwMSwgMHg3YSwgMHg0MywgMHg5NCwgMHgwMCwgMHg3ZSwgCisgICAgMHgwOCwgMHgwMSwgMHgzNywgMHg3YSwgMHgwYywgMHgwMCwgMHgwMCwgMHg3ZSwgMHgyNCwgMHgwMCwgMHhmZSwgMHg3ZSwgMHgzNywgMHgwMSwgMHgyNywgMHg3ZSwgCisgICAgMHg0NywgMHgwMSwgMHgyYiwgMHgxMiwgMHgwYSwgMHhjYywgMHg3ZSwgMHg0MywgMHgwMSwgMHgyNCwgMHg3YSwgMHg0MywgMHg5NCwgMHgwMCwgMHhkMCwgMHhhOCwgCisgICAgMHg3ZSwgMHgwOCwgMHgwMSwgMHgzNywgMHg3YSwgMHgwYywgMHgwMCwgMHgwMCwgMHg3ZSwgMHg1NywgMHgwMSwgMHgyYiwgMHgwMiwgMHgwMywgMHg4NCwgMHhiNCwgCisgICAgMHgwMSwgMHgyMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgxMCwgMHgwMSwgMHg3NSwgMHgwOCwgMHg3MiwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3YSwgMHgwMSwgCisgICAgMHgwOCwgMHgxMiwgMHgwYSwgMHhjMCwgMHg3YSwgMHgxMSwgMHgwOCwgMHgxMiwgMHgwYSwgMHhjMCwgMHgxMiwgMHgwOSwgMHhkMCwgMHg0MCwgMHgwMywgMHgwMiwgCisgICAgMHgwMywgMHg4NCwgMHgwMiwgMHgwOSwgMHg4YiwgMHg3NSwgMHgwOCwgMHgwNywgMHgxMiwgMHgwYSwgMHhjMCwgMHg3ZSwgMHhiMCwgMHgwMiwgMHg3YSwgMHhiMywgCisgICAgMHg5MCwgMHgwMCwgMHg3NCwgMHgwMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgwMCwgMHg3NCwgMHg0MCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxNSwgMHg3NCwgMHgwMSwgCisgICAgMHg3YSwgMHhiMywgMHg5MSwgMHgxMSwgMHg3ZSwgMHhiMywgMHg5MSwgMHgxNSwgMHg1NCwgMHg2MCwgMHhiZSwgMHhiMCwgMHg0MCwgMHg2OCwgMHgwOCwgMHg3NCwgCisgICAgMHgyMCwgMHg3YSwgMHhiMywgMHg5MSwgMHgxNSwgMHg4MCwgMHhlZCwgMHg3NCwgMHgwMSwgMHg3YSwgMHhiMywgMHg5MSwgMHgxMiwgMHg3NCwgMHgwNCwgMHg3YSwgCisgICAgMHhiMywgMHg5MSwgMHgxNCwgMHg3NCwgMHhmZiwgMHg3YSwgMHhiMywgMHgwMSwgMHgyZCwgMHgyMiwgMHhjMCwgMHhhOCwgMHhjMiwgMHhhZiwgMHg3ZSwgMHg0MCwgCisgICAgMHgwMSwgMHg3YSwgMHg0MywgMHg5NCwgMHgwMCwgMHgxMiwgMHgwYSwgMHg1NywgMHg0MCwgMHgxZiwgMHg3ZSwgMHgwOCwgMHgwMSwgMHgzNywgMHg3YSwgMHgwYywgCisgICAgMHgwMCwgMHgwMCwgMHhjYSwgMHgwYiwgMHhjYSwgMHg0OSwgMHgxMiwgMHgwYSwgMHhjYywgMHhkYSwgMHg1OSwgMHhkYSwgMHgwYiwgMHg3ZSwgMHg0MywgMHgwMSwgCisgICAgMHgyNCwgMHg3YSwgMHg0MywgMHg5NCwgMHgwMCwgMHhkMCwgMHhhOCwgMHhjMywgMHgyMiwgMHg3ZSwgMHg0MywgMHgwMSwgMHgyNCwgMHg3YSwgMHg0MywgMHg5NCwgCisgICAgMHgwMCwgMHhkMCwgMHhhOCwgMHgyMiwgMHhjMCwgMHhhOCwgMHhjMiwgMHhhZiwgMHg3ZSwgMHg0MCwgMHgwMSwgMHg3YSwgMHg0MywgMHg5NCwgMHgwMCwgMHgxMiwgCisgICAgMHgwYSwgMHg1NywgMHg0MCwgMHgzMSwgMHg3ZSwgMHg1OCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg1YywgMHgwMCwgMHhmZSwgMHg3ZiwgMHg2MSwgMHg3ZSwgMHg3OCwgCisgICAgMHgwMSwgMHgzNywgMHg3YSwgMHg3YywgMHgwMCwgMHgwMCwgMHg3ZSwgMHg3NywgMHgwMSwgMHgyYiwgMHhiZCwgMHg3NCwgMHg3OCwgMHgxNywgMHg3NSwgMHgwOCwgCisgICAgMHhjMSwgMHgxMiwgMHgwYSwgMHhjMCwgMHgxMiwgMHgwYiwgMHg2MywgMHg0MCwgMHgwYywgMHg3ZSwgMHg0MywgMHgwMSwgMHgyNCwgMHg3YSwgMHg0MywgMHg5NCwgCisgICAgMHgwMCwgMHhkMCwgMHhhOCwgMHhjMywgMHgyMiwgMHg3ZSwgMHg0MywgMHgwMSwgMHgyNCwgMHg3YSwgMHg0MywgMHg5NCwgMHgwMCwgMHhkMCwgMHhhOCwgMHhkMywgCisgICAgMHgyMiwgMHg3ZSwgMHgyNCwgMHgwMCwgMHhmZSwgMHg3ZSwgMHgzNCwgMHg3ZiwgMHhjYSwgMHgwYiwgMHgxYSwgMHg1MCwgMHhjNSwgMHhmMCwgMHg3ZCwgMHg2MiwgCisgICAgMHg3ZCwgMHg3NSwgMHg3ZCwgMHg4NywgMHg3ZSwgMHgzNCwgMHg3ZiwgMHgwMywgMHg3ZSwgMHgxYiwgMHhiMCwgMHhiYywgMHgwYiwgMHg1MCwgMHg0OSwgMHgzZSwgCisgICAgMHgwMCwgMHgzZSwgMHgwMCwgMHgwYSwgMHg1MCwgMHgyZCwgMHg3NSwgMHgwYiwgMHgzYSwgMHgzMCwgMHg2OSwgMHg1MywgMHgwMCwgMHgwMiwgMHhiZCwgMHgzOCwgCisgICAgMHg1MCwgMHgwMiwgMHgyZCwgMHgzOCwgMHhiYywgMHgxYiwgMHg1MCwgMHgzMCwgMHgzZSwgMHgxMCwgMHgzZSwgMHgxMCwgMHgwYSwgMHg1MSwgMHgyZCwgMHgzNSwgCisgICAgMHg2OSwgMHg0MSwgMHgwMCwgMHgwMiwgMHgwYiwgMHgxYSwgMHgzMCwgMHhiZCwgMHgzOCwgMHg1MCwgMHgwMiwgMHgyZCwgMHgzOCwgMHhiZSwgMHg0NCwgMHhmZiwgCisgICAgMHhmZiwgMHg3OCwgMHgwNSwgMHg3ZSwgMHgxYiwgMHg5MCwgMHgwYSwgMHg0OSwgMHg0ZCwgMHg0NCwgMHg2OCwgMHgwYywgMHhiZSwgMHg0NCwgMHgwMCwgMHhmZiwgCisgICAgMHgyOCwgMHgwNCwgMHg3ZSwgMHg0NCwgMHgwMCwgMHhmZiwgMHhjMywgMHgyMiwgMHhkMywgMHgyMiwgCisKKy8vIFNlZ21lbnQgIzE2LCBFWENMVURFRCBTdGFydCBBZGRyZXNzIDAwZmY3YzAwLCBMZW5ndGggMjI3CisKKworLy8gU2VnbWVudCAjMTcsIEVYQ0xVREVEIFN0YXJ0IEFkZHJlc3MgMDBmZjdmMDAsIExlbmd0aCAxOTIKKworCisvLyBTZWdtZW50ICMxNywgU3RhcnQgQWRkcmVzcyAwMGZmN2ZjMCwgTGVuZ3RoIDY0CisweGZmLDB4MDAsMHhjMCwweDdmLDB4NDAsMHgwMCwKKyAgICAweDQwLCAweDAxLCAweDAyLCAweDAwLCAweGQ3LCAweDMxLCAweDAyLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAKKworLy8gU2VnbWVudCAjMTgsIFN0YXJ0IEFkZHJlc3MgMDBmZjBhYzAsIExlbmd0aCA0MTYzCisweGZmLDB4MDAsMHhjMCwweDBhLDB4NDMsMHgxMCwKKyAgICAweGNhLCAweDA4LCAweDdlLCAweDAxLCAweDA4LCAweDdhLCAweDAzLCAweDNmLCAweGYwLCAweGRhLCAweDA4LCAweDIyLCAweDgwLCAweDUwLCAweDBiLCAweDFhLCAKKyAgICAweDYwLCAweDBiLCAweDM1LCAweDBiLCAweDFhLCAweDcwLCAweDBiLCAweDM1LCAweDBiLCAweDFhLCAweDgwLCAweDBiLCAweDM1LCAweDBiLCAweDFhLCAweDkwLCAKKyAgICAweDBiLCAweDM1LCAweDBiLCAweDFhLCAweGEwLCAweDBiLCAweDM1LCAweDBiLCAweDFhLCAweGIwLCAweDBiLCAweDM1LCAweDBiLCAweDFhLCAweGMwLCAweDBiLCAKKyAgICAweDM1LCAweDBiLCAweDFhLCAweGQwLCAweDBiLCAweDM1LCAweDFiLCAweDBhLCAweDYwLCAweDBiLCAweDE1LCAweDFiLCAweDBhLCAweDcwLCAweDBiLCAweDE1LCAKKyAgICAweDFiLCAweDBhLCAweDgwLCAweDBiLCAweDE1LCAweDFiLCAweDBhLCAweDkwLCAweDBiLCAweDE1LCAweDFiLCAweDBhLCAweGEwLCAweDBiLCAweDE1LCAweDFiLCAKKyAgICAweDBhLCAweGIwLCAweDBiLCAweDE1LCAweDFiLCAweDBhLCAweGMwLCAweDBiLCAweDE1LCAweDFiLCAweDBhLCAweGQwLCAweDBiLCAweDE1LCAweDllLCAweDQ0LCAKKyAgICAweDAwLCAweDEwLCAweDUwLCAweGFhLCAweDJlLCAweDQ0LCAweDAwLCAweDEwLCAweDY4LCAweDBlLCAweDdlLCAweDFiLCAweGMwLCAweDdhLCAweDBiLCAweGMwLCAKKyAgICAweDBiLCAweDE0LCAweDBiLCAweDM0LCAweDFiLCAweDQ0LCAweDc4LCAweGYyLCAweDIyLCAweDdmLCAweDZmLCAweDdmLCAweGYwLCAweDFiLCAweGZjLCAweDdjLCAKKyAgICAweDU0LCAweDdkLCAweDMyLCAweDgwLCAweDA4LCAweGNhLCAweDFiLCAweGNhLCAweDFiLCAweGNhLCAweDFiLCAweGNhLCAweDFiLCAweDllLCAweDQ0LCAweDAwLCAKKyAgICAweDEwLCAweDUwLCAweGYyLCAweDJlLCAweDQ0LCAweDAwLCAweDEwLCAweDY4LCAweDA2LCAweGNhLCAweDQ4LCAweDFiLCAweDQ0LCAweDc4LCAweGZhLCAweDdmLCAKKyAgICAweGY2LCAweDg5LCAweGU0LCAweGNhLCAweDZiLCAweDVlLCAweGQ0LCAweDAwLCAweDNmLCAweDY4LCAweDIwLCAweDdlLCAweDg0LCAweDAwLCAweDQwLCAweDlkLCAKKyAgICAweDhkLCAweGRhLCAweDZiLCAweGJkLCAweDg3LCAweDM4LCAweDE2LCAweGNhLCAweDc5LCAweDdkLCAweDc4LCAweDEyLCAweDBiLCAweDhkLCAweGRhLCAweDc5LCAKKyAgICAweDQwLCAweDA4LCAweDlkLCAweDc4LCAweDY4LCAweDAyLCAweDgwLCAweDA1LCAweGMyLCAweGQ3LCAweDIyLCAweGRhLCAweDZiLCAweDdlLCAweGMwLCAweDAzLCAKKyAgICAweDdlLCAweGQwLCAweDAwLCAweDdhLCAweGQzLCAweDkwLCAweDAwLCAweDc0LCAweGFhLCAweDM5LCAweGI1LCAweDU1LCAweDU1LCAweDc0LCAweDU1LCAweDM5LCAKKyAgICAweGI1LCAweDJhLCAweGFhLCAweDc0LCAweGEwLCAweDM5LCAweGI1LCAweDU1LCAweDU1LCAweDdlLCAweDA0LCAweDAwLCAweDQwLCAweDlkLCAweDcwLCAweDUwLCAKKyAgICAweDA2LCAweDJkLCAweDcwLCAweDdkLCAweDA3LCAweDZkLCAweDc3LCAweDdjLCAweDMxLCAweDdlLCAweDdiLCAweDAwLCAweDdhLCAweDZiLCAweDAwLCAweDBiLCAKKyAgICAweDdjLCAweDBiLCAweDZjLCAweGE1LCAweGQ5LCAweGYzLCAweDdmLCAweDE2LCAweDFiLCAweDFjLCAweDdlLCAweDU0LCAweDI3LCAweDEwLCAweDdlLCAweDFiLCAKKyAgICAweDEwLCAweGJjLCAweDEwLCAweDY4LCAweDA2LCAweDFiLCAweDU0LCAweDc4LCAweGY1LCAweDgwLCAweDJmLCAweDZkLCAweDAwLCAweDdjLCAweDIwLCAweDdmLCAKKyAgICAweDE2LCAweDlmLCAweDEwLCAweDdmLCAweDI3LCAweDlmLCAweDIwLCAweDdlLCAweDJiLCAweDAwLCAweDdlLCAweDFiLCAweDEwLCAweGJjLCAweDAxLCAweDc4LCAKKyAgICAweDE5LCAweDBiLCAweDJjLCAweDBiLCAweDFjLCAweGE1LCAweGRiLCAweGVmLCAweDdjLCAweGI2LCAweDIwLCAweGUwLCAweDA2LCAweDZjLCAweGRjLCAweDdhLCAKKyAgICAweGQzLCAweDkwLCAweDAwLCAweDRkLCAweDc3LCAweDc4LCAweDkwLCAweGMyLCAweGQ3LCAweDIyLCAweGQyLCAweGQ3LCAweDIyLCAweDAwLCAweDA0LCAweDAwLCAKKyAgICAweDA0LCAweDAwLCAweDAwLCAweDA2LCAweDA0LCAweDAyLCAweDA0LCAweDAwLCAweDAyLCAweDAxLCAweDA0LCAweDAxLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDA0LCAweDAwLCAweDA4LCAweDEwLCAweDAyLCAweDEwLCAKKyAgICAweDA0LCAweDAyLCAweDA4LCAweDAwLCAweDAxLCAweDAxLCAweDA4LCAweDdlLCAweDE4LCAweDdmLCAweGJkLCAweDdhLCAweDFjLCAweDAwLCAweGZmLCAweDBiLCAKKyAgICAweDFhLCAweDAwLCAweDVlLCAweDEwLCAweDFmLCAweGJlLCAweDEwLCAweDE0LCAweDM4LCAweDFhLCAweDBhLCAweDUxLCAweDIzLCAweDdlLCAweDE4LCAweDBjLCAKKyAgICAweDBkLCAweDdhLCAweDFjLCAweDAwLCAweGZmLCAweDJkLCAweDM1LCAweDBiLCAweDFhLCAweDUwLCAweDYwLCAweDA4LCAweGE1LCAweGI4LCAweDAyLCAweDAzLCAKKyAgICAweDRlLCAweGEwLCAweDA4LCAweDIyLCAweDgwLCAweGZlLCAweDdlLCAweGU4LCAweDdmLCAweGJmLCAweDdhLCAweGVjLCAweDAwLCAweGZmLCAweGUwLCAweGY1LCAKKyAgICAweDIzLCAweDU0LCAweGMwLCAweDY4LCAweDM4LCAweDdlLCAweGU4LCAweDdmLCAweGJlLCAweDdhLCAweGVjLCAweDAwLCAweGZmLCAweGUwLCAweDYwLCAweDJlLCAKKyAgICAweDEyLCAweDBjLCAweDM3LCAweGY1LCAweDIxLCAweDdhLCAweGExLCAweDIwLCAweDIwLCAweDA5LCAweDBjLCAweDIwLCAweDBhLCAweDEyLCAweDdlLCAweGIwLCAKKyAgICAweDBlLCAweDdhLCAweGIzLCAweDkyLCAweDAwLCAweDgwLCAweDEwLCAweDdlLCAweGIwLCAweDAyLCAweDdhLCAweGIzLCAweDkyLCAweDAwLCAweDgwLCAweDA3LCAKKyAgICAweDdlLCAweGIwLCAweDBhLCAweDdhLCAweGIzLCAweDkyLCAweDAwLCAweDdhLCAweGIxLCAweDBkLCAweDAyLCAweDBjLCAweGM0LCAweDIyLCAweDdlLCAweGIwLCAKKyAgICAweDAyLCAweDdhLCAweGIzLCAweDkwLCAweDAwLCAweDEyLCAweDE5LCAweDBjLCAweDdlLCAweGIwLCAweDAzLCAweDdhLCAweGIzLCAweDkwLCAweDAwLCAweDEyLCAKKyAgICAweDE5LCAweDBjLCAweDgwLCAweGVhLCAweGMyLCAweGFmLCAweGMyLCAweDExLCAweGMyLCAweDEyLCAweDc1LCAweGIwLCAweGRmLCAweDdlLCAweDAwLCAweDAxLCAKKyAgICAweDdhLCAweDAzLCAweDkzLCAweDAwLCAweDdlLCAweDAwLCAweDAwLCAweDdhLCAweDAzLCAweDkwLCAweDAwLCAweDZjLCAweDAwLCAweDdlLCAweDEwLCAweDAzLCAKKyAgICAweDEyLCAweDBjLCAweGY1LCAweDdlLCAweDY4LCAweDJjLCAweDY2LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDBiLCAweDAwLCAKKyAgICAweDgwLCAweDMyLCAweDAyLCAweDFhLCAweDZlLCAweDIwLCAweDExLCAweDJiLCAweDdlLCAweGIwLCAweDAxLCAweDdhLCAweGIzLCAweDkwLCAweDAwLCAweDEyLCAKKyAgICAweDE5LCAweDBjLCAweDdlLCAweGIwLCAweDAzLCAweDdhLCAweGIzLCAweDkwLCAweDAwLCAweDEyLCAweDE5LCAweDBjLCAweDdlLCAweGIwLCAweDAyLCAweDdhLCAKKyAgICAweGIzLCAweDkwLCAweDAwLCAweDEyLCAweDE5LCAweDBjLCAweGE1LCAweGQ5LCAweGRjLCAweDdlLCAweGIwLCAweDAwLCAweDdhLCAweGIzLCAweDkwLCAweDAwLCAKKyAgICAweDEyLCAweDE5LCAweDBjLCAweDIyLCAweDdlLCAweDY4LCAweDJjLCAweGY5LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDdlLCAKKyAgICAweGU0LCAweDEwLCAweDAwLCAweDdlLCAweDQwLCAweDU1LCAweDdhLCAweGU5LCAweDQwLCAweDBiLCAweGU0LCAweDdlLCAweDUwLCAweGFhLCAweDdhLCAweGU5LCAKKyAgICAweDUwLCAweDFiLCAweGU0LCAweGJlLCAweGU5LCAweDQwLCAweDY4LCAweDE5LCAweDdlLCAweDY4LCAweDJjLCAweGRmLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAKKyAgICAweDEyLCAweDE5LCAweGM0LCAweDEyLCAweDE5LCAweDE5LCAweDMwLCAweDExLCAweDEzLCAweDdhLCAweGU5LCAweDQwLCAweDdlLCAweGU5LCAweDEwLCAweDgwLCAKKyAgICAweGY4LCAweDdlLCAweDY4LCAweDJjLCAweGRhLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDBiLCAweDAwLCAweDdlLCAweDY4LCAKKyAgICAweDJkLCAweDNkLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDdlLCAweDc4LCAweDAwLCAweDAwLCAweDdlLCAweDcwLCAweDBlLCAKKyAgICAweDdlLCAweGE0LCAweGZmLCAweGZmLCAweDdlLCAweGI0LCAweGJmLCAweGZmLCAweDdkLCAweGNiLCAweDBlLCAweGM0LCAweDdkLCAweGRjLCAweDVkLCAweGRiLCAKKyAgICAweDZjLCAweGJiLCAweDdkLCAweGZhLCAweDVlLCAweGY0LCAweDdmLCAweGZmLCAweDdhLCAweDdiLCAweGIwLCAweDBiLCAweGIwLCAweDdkLCAweGZiLCAweDVlLCAKKyAgICAweGY0LCAweDdmLCAweGZmLCAweDdhLCAweDdiLCAweGIwLCAweDBiLCAweGIwLCAweDdkLCAweGZjLCAweDVlLCAweGY0LCAweDdmLCAweGZmLCAweDdhLCAweDdiLCAKKyAgICAweGIwLCAweDBiLCAweGIwLCAweDdkLCAweGZkLCAweDVlLCAweGY0LCAweDdmLCAweGZmLCAweDdhLCAweDdiLCAweGIwLCAweDZjLCAweGJiLCAweDdkLCAweGZhLCAKKyAgICAweDVlLCAweGY0LCAweDdmLCAweGZmLCAweGJlLCAweDdiLCAweGIwLCAweDc4LCAweDQxLCAweDBiLCAweGIwLCAweDdkLCAweGZiLCAweDVlLCAweGY0LCAweDdmLCAKKyAgICAweGZmLCAweGJlLCAweDdiLCAweGIwLCAweDc4LCAweDM0LCAweDBiLCAweGIwLCAweDdkLCAweGZjLCAweDVlLCAweGY0LCAweDdmLCAweGZmLCAweGJlLCAweDdiLCAKKyAgICAweGIwLCAweDc4LCAweDI3LCAweDBiLCAweGIwLCAweDdkLCAweGZkLCAweDVlLCAweGY0LCAweDdmLCAweGZmLCAweGJlLCAweDdiLCAweGIwLCAweDc4LCAweDFhLCAKKyAgICAweDBiLCAweGIwLCAweGJlLCAweGM0LCAweGZmLCAweGZlLCAweDc4LCAweDkyLCAweDBlLCAweGI0LCAweGE1LCAweGRmLCAweDhiLCAweDdlLCAweDY4LCAweDJjLCAKKyAgICAweGU3LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDgwLCAweDc3LCAweGNhLCAweDViLCAweGNhLCAweDZiLCAweDdlLCAweDY4LCAKKyAgICAweDJjLCAweGYwLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDdlLCAweDY4LCAweDJkLCAweDhmLCAweDdhLCAweDZjLCAweDAwLCAKKyAgICAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDBhLCAweDQ3LCAweDEyLCAweDE5LCAweGZhLCAweDdlLCAweDY4LCAweDJkLCAweGRlLCAweDdhLCAweDZjLCAweDAwLCAKKyAgICAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDZjLCAweDc3LCAweGRhLCAweDZiLCAweGNhLCAweDZiLCAweDBiLCAweDcwLCAweDBlLCAweGM0LCAweGJlLCAweGM0LCAKKyAgICAweGZmLCAweGZmLCAweDc4LCAweGY2LCAweDFiLCAweDcwLCAweDBhLCAweDQ3LCAweDEyLCAweDE5LCAweGZhLCAweDEyLCAweDE5LCAweDE5LCAweDMwLCAweDExLCAKKyAgICAweDMwLCAweGRhLCAweDZiLCAweGRhLCAweDViLCAweDZjLCAweGJiLCAweDdlLCAweDc4LCAweDAwLCAweDAwLCAweDdkLCAweGZhLCAweDVlLCAweGY0LCAweDdmLCAKKyAgICAweGZmLCAweDdhLCAweDdiLCAweGIwLCAweDdkLCAweGZiLCAweDVlLCAweGY0LCAweDdmLCAweGZmLCAweDdhLCAweDdiLCAweGIwLCAweDdkLCAweGZjLCAweDVlLCAKKyAgICAweGY0LCAweDdmLCAweGZmLCAweDdhLCAweDdiLCAweGIwLCAweDdkLCAweGZkLCAweDVlLCAweGY0LCAweDdmLCAweGZmLCAweDdhLCAweDdiLCAweGIwLCAweDgwLCAKKyAgICAweGQ0LCAweDdlLCAweDY4LCAweDJkLCAweDFiLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDMwLCAweDFmLCAweDBlLCAweDdlLCAKKyAgICAweDc4LCAweDA0LCAweDIwLCAweDdhLCAweDdjLCAweDAwLCAweDAwLCAweDdlLCAweDQ0LCAweDdiLCAweGUwLCAweDgwLCAweDBjLCAweDdlLCAweDc4LCAweDAwLCAKKyAgICAweDAwLCAweDdhLCAweDdjLCAweDAwLCAweDAxLCAweDdlLCAweDQ0LCAweDgwLCAweDAwLCAweDBiLCAweDAwLCAweDdlLCAweDQwLCAweDNhLCAweDdjLCAweDU0LCAKKyAgICAweDdmLCAweDU3LCAweDdkLCAweDg0LCAweDZjLCAweDY2LCAweDdhLCAweDViLCAweDUwLCAweDBiLCAweDVjLCAweDBiLCAweDUwLCAweGE1LCAweGRlLCAweDAyLCAKKyAgICAweDBiLCAweDUwLCAweDFiLCAweDg0LCAweDc4LCAweGYwLCAweDdjLCAweDU0LCAweDdmLCAweDU3LCAweDdkLCAweDg0LCAweDZjLCAweDY2LCAweGJlLCAweDViLCAKKyAgICAweDUwLCAweDc4LCAweDFhLCAweDBiLCAweDVjLCAweDBiLCAweDUwLCAweGE1LCAweGRlLCAweDAyLCAweDBiLCAweDUwLCAweDFiLCAweDg0LCAweDc4LCAweGVlLCAKKyAgICAweDdlLCAweDY4LCAweDJjLCAweGRhLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDgwLCAweDRiLCAweDdmLCAweDQ1LCAweDdlLCAKKyAgICAweDY4LCAweDJjLCAweGRmLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDdlLCAweDY4LCAweDJkLCAweDVmLCAweDdhLCAweDZjLCAKKyAgICAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDdkLCAweDRiLCAweDEyLCAweDE5LCAweGZhLCAweDdlLCAweDY4LCAweDJkLCAweDc0LCAweDdhLCAweDZjLCAKKyAgICAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDZjLCAweDg4LCAweDdjLCAweDk1LCAweDEyLCAweDE5LCAweGZhLCAweDdlLCAweDY4LCAweDJkLCAweDgyLCAKKyAgICAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDdlLCAweDRiLCAweDkwLCAweDEyLCAweDE5LCAweGZhLCAweDEyLCAweDE5LCAweDE5LCAKKyAgICAweDMwLCAweDExLCAweDA1LCAweDdlLCAweDRiLCAweDkwLCAweDgwLCAweGZiLCAweDdlLCAweDY4LCAweDJlLCAweDI4LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAKKyAgICAweDEyLCAweDE5LCAweGM0LCAweDBiLCAweDAwLCAweDdlLCAweGIwLCAweDgwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDdlLCAweGEwLCAweDU1LCAweDdhLCAKKyAgICAweGEzLCAweDkxLCAweDEwLCAweDdlLCAweGIzLCAweDkxLCAweDA3LCAweDdlLCAweGIzLCAweDkxLCAweDEwLCAweGJjLCAweGFiLCAweDc4LCAweDIwLCAweDdlLCAKKyAgICAweGEwLCAweGFhLCAweDdhLCAweGEzLCAweDkxLCAweDEwLCAweDdlLCAweGIzLCAweDkxLCAweDA3LCAweDdlLCAweGIzLCAweDkxLCAweDEwLCAweGJjLCAweGFiLCAKKyAgICAweDc4LCAweDBkLCAweDdlLCAweDY4LCAweDJjLCAweGRhLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDgwLCAweDFiLCAweDdlLCAKKyAgICAweDY4LCAweDJjLCAweGRmLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDEyLCAweDE5LCAweDE5LCAweDMwLCAweDExLCAweDBhLCAKKyAgICAweDdhLCAweGEzLCAweDkxLCAweDEwLCAweDdlLCAweGIzLCAweDkxLCAweDEwLCAweDgwLCAweGY2LCAweDdlLCAweDY4LCAweDJlLCAweDRhLCAweDdhLCAweDZjLCAKKyAgICAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDEyLCAweDEyLCAweDMxLCAweDBiLCAweDAwLCAweDdlLCAweGU0LCAweDEwLCAweDAwLCAweDdlLCAweGEwLCAKKyAgICAweGE1LCAweGNhLCAweGE4LCAweDdhLCAweGU5LCAweGEwLCAweDdlLCAweGIwLCAweDMwLCAweDdhLCAweGIzLCAweDk1LCAweDAwLCAweDdlLCAweGU5LCAweGEwLCAKKyAgICAweDdlLCAweGIwLCAweDAwLCAweDdhLCAweGIzLCAweDk1LCAweDAwLCAweDEyLCAweDE5LCAweDBjLCAweDBiLCAweGU1LCAweDdlLCAweGIwLCAweDIwLCAweDdhLCAKKyAgICAweGIzLCAweDk1LCAweDAwLCAweDdlLCAweGU5LCAweGIwLCAweDdlLCAweGIwLCAweDAwLCAweDdhLCAweGIzLCAweDk1LCAweDAwLCAweDdlLCAweGU5LCAweGIwLCAKKyAgICAweGRhLCAweGE4LCAweGJjLCAweGFiLCAweDc4LCAweDBkLCAweDdlLCAweDY4LCAweDJjLCAweGRhLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAKKyAgICAweGM0LCAweDgwLCAweDFkLCAweDdlLCAweDY4LCAweDJjLCAweGRmLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDEyLCAweDE5LCAKKyAgICAweDE5LCAweDMwLCAweDExLCAweDBjLCAweDdlLCAweGIwLCAweDM4LCAweDdhLCAweGIzLCAweDk1LCAweDAwLCAweDdlLCAweGU5LCAweGIwLCAweDgwLCAweGZiLCAKKyAgICAweDgwLCAweDAwLCAweDdlLCAweDY4LCAweDJkLCAweGU0LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDBiLCAweDAwLCAweDc1LCAKKyAgICAweGIwLCAweGRmLCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAweDA4LCAweGJlLCAweGIwLCAweDAxLCAweDc4LCAweDBiLCAweDA5LCAKKyAgICAweGIyLCAweDAwLCAweDE0LCAweGJlLCAweGIwLCAweDYwLCAweDc4LCAweDAyLCAweDgwLCAweDE3LCAweDdlLCAweDY4LCAweDJjLCAweGRmLCAweDdhLCAweDZjLCAKKyAgICAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDEyLCAweDE5LCAweDE5LCAweDMwLCAweDExLCAweDExLCAweDA5LCAweGIyLCAweDAwLCAweDA4LCAweDgwLCAKKyAgICAweGZhLCAweDdlLCAweDY4LCAweDJjLCAweGRhLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDdlLCAweDY4LCAweDJlLCAweDA2LCAKKyAgICAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDBiLCAweDAwLCAweDc1LCAweGIwLCAweGVmLCAweDEyLCAweDE4LCAweGZmLCAweDdlLCAKKyAgICAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweGEwLCAweDU1LCAweDE5LCAweGEyLCAweDAwLCAweDFjLCAweDdlLCAweGIwLCAweDAxLCAweDE5LCAweGIyLCAweDAwLCAKKyAgICAweDA4LCAweDA5LCAweGIyLCAweDAwLCAweDFjLCAweGJjLCAweGFiLCAweDc4LCAweDM3LCAweDA5LCAweGIyLCAweDAwLCAweDA4LCAweDVlLCAweGIwLCAweGMwLCAKKyAgICAweGJlLCAweGIwLCAweGMwLCAweDc4LCAweDJiLCAweDdlLCAweGEwLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDFjLCAweDZjLCAweGJiLCAweDE5LCAweGIyLCAKKyAgICAweDAwLCAweDA4LCAweDA5LCAweGIyLCAweDAwLCAweDFjLCAweGJjLCAweGFiLCAweDc4LCAweDE2LCAweDA5LCAweGIyLCAweDAwLCAweDA4LCAweDVlLCAweGIwLCAKKyAgICAweGMwLCAweDc4LCAweDBkLCAweDdlLCAweDY4LCAweDJjLCAweGRhLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDgwLCAweDFiLCAKKyAgICAweDdlLCAweDY4LCAweDJjLCAweGRmLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDEyLCAweDE5LCAweDE5LCAweDMwLCAweDExLCAKKyAgICAweDBhLCAweDE5LCAweGEyLCAweDAwLCAweDFjLCAweDA5LCAweGIyLCAweDAwLCAweDFjLCAweDgwLCAweGY2LCAweDdlLCAweDY4LCAweDJlLCAweDZjLCAweDdhLCAKKyAgICAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDdlLCAweDY4LCAweDJlLCAweGVlLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAKKyAgICAweGM0LCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDIxLCAweDdlLCAweGIwLCAweDAxLCAweDE5LCAweGIyLCAweDAwLCAweDFjLCAweDJlLCAKKyAgICAweDI0LCAweDAxLCAweDAwLCAweDBiLCAweGIwLCAweGE1LCAweGQ5LCAweGYzLCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDIxLCAweDdlLCAKKyAgICAweGIwLCAweDAxLCAweDBiLCAweDAwLCAweDA5LCAweGEyLCAweDAwLCAweDFjLCAweGJjLCAweGFiLCAweDc4LCAweDE2LCAweDdlLCAweDY4LCAweDJjLCAweGU3LCAKKyAgICAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweDBiLCAweGIwLCAweGE1LCAweGQ5LCAweGUyLCAKKyAgICAweDgwLCAweDI1LCAweDdlLCAweDY4LCAweDJjLCAweGYwLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDEyLCAweDE5LCAweDE5LCAKKyAgICAweDMwLCAweDExLCAweGU0LCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDIxLCAweDA5LCAweGEyLCAweDAwLCAweDFjLCAweDJlLCAweDI0LCAKKyAgICAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweGY1LCAweDgwLCAweGVjLCAweDdlLCAweDY4LCAweDJmLCAweDEyLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAKKyAgICAweDE5LCAweGM0LCAweDEyLCAweDEyLCAweDMxLCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDIxLCAweDBiLCAweDAwLCAweDc0LCAweDEwLCAKKyAgICAweDE5LCAweGIyLCAweDAwLCAweDEwLCAweDEyLCAweDExLCAweGFhLCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweGVlLCAweDdlLCAweDY4LCAKKyAgICAweDJmLCAweDM2LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDIxLCAKKyAgICAweDBiLCAweDAwLCAweGU0LCAweDE5LCAweGIyLCAweDAwLCAweDEwLCAweDEyLCAweDExLCAweGFhLCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAKKyAgICAweGVmLCAweDMwLCAweDAwLCAweDAzLCAweDAyLCAweDE3LCAweDNiLCAweDAyLCAweDEyLCAweDZhLCAweDc0LCAweDA3LCAweDE5LCAweGIyLCAweDAwLCAweDA4LCAKKyAgICAweDEyLCAweDE5LCAweDBjLCAweDA5LCAweGIyLCAweDAwLCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAweDE0LCAweDA5LCAweGIyLCAweDAwLCAweDAwLCAweDA5LCAKKyAgICAweGIyLCAweDAwLCAweDE0LCAweDA5LCAweGIyLCAweDAwLCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAweDE0LCAweDA5LCAweGIyLCAweDAwLCAweDAwLCAweDA5LCAKKyAgICAweGIyLCAweDAwLCAweDE0LCAweGMyLCAweDEzLCAweDdlLCAweGIwLCAweDU1LCAweDEyLCAweDEyLCAweDBiLCAweDdlLCAweGIwLCAweGFhLCAweDEyLCAweDEyLCAKKyAgICAweDBiLCAweDdlLCAweGIwLCAweDAwLCAweDEyLCAweDEyLCAweDBiLCAweDdlLCAweGIwLCAweGZmLCAweDEyLCAweDEyLCAweDBiLCAweDMwLCAweDEzLCAweDBmLCAKKyAgICAweDdlLCAweDY4LCAweDJjLCAweGYwLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDEyLCAweDE5LCAweDE5LCAweDIyLCAweDdlLCAKKyAgICAweDY4LCAweDJjLCAweGU3LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDIyLCAweDE5LCAweGIyLCAweDAwLCAweDAwLCAweDEyLCAKKyAgICAweDE4LCAweGZmLCAweDA5LCAweGEyLCAweDAwLCAweDAwLCAweGJjLCAweGFiLCAweDc4LCAweDAxLCAweDIyLCAweDIwLCAweDExLCAweDAzLCAweGQyLCAweDEzLCAKKyAgICAweDIyLCAweDEyLCAweDE5LCAweDE5LCAweDE5LCAweGIyLCAweDAwLCAweDAwLCAweDEyLCAweDE4LCAweGZmLCAweDA5LCAweGEyLCAweDAwLCAweDAwLCAweDgwLCAKKyAgICAweGYzLCAweDc1LCAweGIwLCAweGRmLCAweDEyLCAweDE4LCAweGZmLCAweDc1LCAweGIwLCAweGVmLCAweDEyLCAweDE4LCAweGZmLCAweDdlLCAweDI0LCAweDgwLCAKKyAgICAweDAwLCAweDdlLCAweDExLCAweDIxLCAweDc0LCAweDgwLCAweDE5LCAweGIyLCAweDAwLCAweDBjLCAweDdlLCAweDU0LCAweDAwLCAweDAyLCAweDE5LCAweGEyLCAKKyAgICAweDAwLCAweDA0LCAweDE5LCAweGIyLCAweDAwLCAweDAwLCAweDc0LCAweDAzLCAweDE5LCAweGIyLCAweDAwLCAweDBjLCAweDc0LCAweDA2LCAweDE5LCAweGIyLCAKKyAgICAweDAwLCAweDA4LCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweGRiLCAweDIyLCAweDdlLCAweDY4LCAweDJmLCAweDVhLCAweDdhLCAweDZjLCAKKyAgICAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDIxLCAweDBiLCAweDAwLCAweDEyLCAweDE4LCAKKyAgICAweGZmLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDU1LCAweDE5LCAweGEyLCAweDAwLCAweDAwLCAweDEyLCAweDE4LCAweGZmLCAweDA5LCAKKyAgICAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDA1LCAweDc4LCAweDBkLCAweDdlLCAweDY4LCAweDJjLCAweGU3LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAKKyAgICAweDEyLCAweDE5LCAweGM0LCAweDgwLCAweDFhLCAweDdlLCAweDY4LCAweDJjLCAweGYwLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAKKyAgICAweDEyLCAweDE5LCAweDE5LCAweDMwLCAweDExLCAweDA5LCAweDE5LCAweGEyLCAweDAwLCAweDAwLCAweDEyLCAweDE4LCAweGZmLCAweDgwLCAweGY3LCAweDJlLCAKKyAgICAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweGI2LCAweDdlLCAweDY4LCAweDJmLCAweDdlLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAKKyAgICAweGM0LCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDIxLCAweDBiLCAweDAwLCAweDEyLCAweDE4LCAweGZmLCAweDA5LCAweGIyLCAweDAwLCAKKyAgICAweDE4LCAweDdlLCAweGEwLCAweDU1LCAweDE5LCAweGEyLCAweDAwLCAweDAwLCAweDEyLCAweDE4LCAweGZmLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAKKyAgICAweGIwLCAweDBhLCAweDc4LCAweDBkLCAweDdlLCAweDY4LCAweDJjLCAweGU3LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDgwLCAKKyAgICAweDFhLCAweDdlLCAweDY4LCAweDJjLCAweGYwLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDEyLCAweDE5LCAweDE5LCAweDMwLCAKKyAgICAweDExLCAweDA5LCAweDE5LCAweGEyLCAweDAwLCAweDAwLCAweDEyLCAweDE4LCAweGZmLCAweDgwLCAweGY3LCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAKKyAgICAweGQ5LCAweGI2LCAweDMwLCAweDA0LCAweDAzLCAweDAyLCAweDE1LCAweDlmLCAweDdlLCAweDY4LCAweDJmLCAweGEyLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAKKyAgICAweDEyLCAweDE5LCAweGM0LCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDIxLCAweDBiLCAweDAwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAKKyAgICAweDAwLCAweDEwLCAweDEyLCAweDE4LCAweGZmLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAKKyAgICAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE4LCAweGZmLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDBhLCAKKyAgICAweDc4LCAweDNjLCAweDdlLCAweGEwLCAweDAxLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE4LCAweGZmLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAKKyAgICAweDdlLCAweGEwLCAweDAzLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDdlLCAweGEwLCAweDAxLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE4LCAKKyAgICAweGZmLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDBhLCAweDc4LCAweDE0LCAweDdlLCAweDY4LCAweDJjLCAweGU3LCAweDdhLCAweDZjLCAKKyAgICAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweDllLCAweDgwLCAweDIwLCAweDdlLCAweDY4LCAKKyAgICAweDJjLCAweGYwLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDEyLCAweDE5LCAweDE5LCAweDMwLCAweDExLCAweGU2LCAweDdlLCAKKyAgICAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDgwLCAweGYxLCAweDdlLCAweDY4LCAKKyAgICAweDJmLCAweGVhLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDIxLCAKKyAgICAweDBiLCAweDAwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE4LCAweGZmLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDdlLCAKKyAgICAweGEwLCAweDAxLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE4LCAweGZmLCAweDA5LCAKKyAgICAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDA1LCAweDc4LCAweDNjLCAweDdlLCAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAKKyAgICAweDE4LCAweGZmLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDAzLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDdlLCAweGEwLCAweDAyLCAKKyAgICAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE4LCAweGZmLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDA1LCAweDc4LCAweDE0LCAKKyAgICAweDdlLCAweDY4LCAweDJjLCAweGU3LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAKKyAgICAweGQ5LCAweDllLCAweDgwLCAweDIwLCAweDdlLCAweDY4LCAweDJjLCAweGYwLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDEyLCAKKyAgICAweDE5LCAweDE5LCAweDMwLCAweDExLCAweGU2LCAweDdlLCAweGEwLCAweDAxLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAKKyAgICAweDAwLCAweDEwLCAweDgwLCAweGYxLCAweDdlLCAweDY4LCAweDMwLCAweDMyLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDdlLCAKKyAgICAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDIxLCAweDBiLCAweDAwLCAweDdlLCAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAKKyAgICAweDE4LCAweGZmLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDUwLCAweGJlLCAweGIwLCAweDUwLCAweDc4LCAweDFmLCAweDZjLCAweGFhLCAKKyAgICAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE4LCAweGZmLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDUwLCAweDc4LCAweDBkLCAKKyAgICAweDdlLCAweDY4LCAweDJjLCAweGU3LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDgwLCAweDIwLCAweDdlLCAweDY4LCAweDJjLCAKKyAgICAweGYwLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDEyLCAweDE5LCAweDE5LCAweDMwLCAweDExLCAweDBmLCAweDdlLCAweGEwLCAKKyAgICAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDgwLCAweGYxLCAweDJlLCAweDI0LCAweDAxLCAKKyAgICAweDAwLCAweGE1LCAweGQ5LCAweGEyLCAweDdlLCAweDY4LCAweDMwLCAweDdhLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDdlLCAKKyAgICAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDIxLCAweDBiLCAweDAwLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDAxLCAweDE5LCAKKyAgICAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE4LCAweGZmLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweGEwLCAweGJlLCAweGIwLCAweGEwLCAKKyAgICAweDc4LCAweDFmLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE4LCAweGZmLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAKKyAgICAweGIwLCAweGEwLCAweDc4LCAweDBkLCAweDdlLCAweDY4LCAweDJjLCAweGU3LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDgwLCAKKyAgICAweDIwLCAweDdlLCAweDY4LCAweDJjLCAweGYwLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDEyLCAweDE5LCAweDE5LCAweDMwLCAKKyAgICAweDExLCAweDBmLCAweDdlLCAweGEwLCAweDAxLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDgwLCAKKyAgICAweGYxLCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweDllLCAweDdlLCAweDY4LCAweDMwLCAweDllLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAKKyAgICAweDEyLCAweDE5LCAweGM0LCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDIxLCAweDBiLCAweDAwLCAweDIwLCAweGIxLCAweDI2LCAweDdlLCAKKyAgICAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE4LCAweGZmLCAweDMwLCAweGIxLCAweDE5LCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAKKyAgICAweDAwLCAweDEwLCAweDEyLCAweDE4LCAweGZmLCAweDIwLCAweGIxLCAweDBkLCAweDdlLCAweDY4LCAweDJjLCAweGU3LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAKKyAgICAweDEyLCAweDE5LCAweGM0LCAweDgwLCAweDIwLCAweDdlLCAweDY4LCAweDJjLCAweGYwLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAKKyAgICAweDEyLCAweDE5LCAweDE5LCAweDMwLCAweDExLCAweDBmLCAweDdlLCAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDZjLCAweGFhLCAweDE5LCAKKyAgICAweGEyLCAweDAwLCAweDEwLCAweDgwLCAweGYxLCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweGFlLCAweDAyLCAweDE3LCAweDNiLCAweDdlLCAKKyAgICAweDY4LCAweDJmLCAweGM2LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAKKyAgICAweDIxLCAweDBiLCAweDAwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE4LCAweGZmLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAKKyAgICAweDdlLCAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE4LCAweGZmLCAKKyAgICAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDA2LCAweDc4LCAweDNjLCAweDdlLCAweGEwLCAweDAxLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAKKyAgICAweDEyLCAweDE4LCAweGZmLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDAzLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDdlLCAweGEwLCAKKyAgICAweDAxLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE4LCAweGZmLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDA2LCAweDc4LCAKKyAgICAweDE0LCAweDdlLCAweDY4LCAweDJjLCAweGU3LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAKKyAgICAweGE1LCAweGQ5LCAweDllLCAweDgwLCAweDIwLCAweDdlLCAweDY4LCAweDJjLCAweGYwLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAKKyAgICAweDEyLCAweDE5LCAweDE5LCAweDMwLCAweDExLCAweGU2LCAweDdlLCAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDZjLCAweGFhLCAweDE5LCAKKyAgICAweGEyLCAweDAwLCAweDEwLCAweDgwLCAweGYxLCAweDdlLCAweDY4LCAweDMwLCAweDBlLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAKKyAgICAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDIxLCAweDBiLCAweDAwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAKKyAgICAweDE4LCAweGZmLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDAxLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDZjLCAweGFhLCAweDE5LCAKKyAgICAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE4LCAweGZmLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDA5LCAweDc4LCAweDNjLCAweDdlLCAKKyAgICAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE4LCAweGZmLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDAzLCAKKyAgICAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDdlLCAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE4LCAweGZmLCAweDA5LCAweGIyLCAKKyAgICAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDA5LCAweDc4LCAweDE0LCAweDdlLCAweDY4LCAweDJjLCAweGU3LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAKKyAgICAweDE5LCAweGM0LCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweDllLCAweDgwLCAweDIwLCAweDdlLCAweDY4LCAweDJjLCAweGYwLCAweDdhLCAKKyAgICAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDEyLCAweDE5LCAweDE5LCAweDMwLCAweDExLCAweGU2LCAweDdlLCAweGEwLCAweDAxLCAweDE5LCAKKyAgICAweGEyLCAweDAwLCAweDEwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDgwLCAweGYxLCAweDdlLCAweDY4LCAweDMwLCAweDU2LCAweDdhLCAKKyAgICAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDIxLCAweDBiLCAweDAwLCAweDdlLCAKKyAgICAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE4LCAweGZmLCAweDA5LCAweGIyLCAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDkwLCAKKyAgICAweGJlLCAweGIwLCAweDkwLCAweDc4LCAweDFmLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE4LCAweGZmLCAweDA5LCAweGIyLCAKKyAgICAweDAwLCAweDE4LCAweDVlLCAweGIwLCAweDkwLCAweDc4LCAweDBkLCAweDdlLCAweDY4LCAweDJjLCAweGU3LCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAKKyAgICAweDE5LCAweGM0LCAweDgwLCAweDIwLCAweDdlLCAweDY4LCAweDJjLCAweGYwLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDEyLCAKKyAgICAweDE5LCAweDE5LCAweDMwLCAweDExLCAweDBmLCAweDdlLCAweGEwLCAweDAyLCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDZjLCAweGFhLCAweDE5LCAweGEyLCAKKyAgICAweDAwLCAweDEwLCAweDgwLCAweGYxLCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweGEyLCAweDIwLCAweDFmLCAweDY4LCAweDEyLCAweDEyLCAKKyAgICAweDMxLCAweDEyLCAweDE3LCAweGE5LCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDIxLCAweDBiLCAweDAwLCAweDIwLCAweDg5LCAweDI2LCAKKyAgICAweDdlLCAweGEwLCAweGZmLCAweDE5LCAweGEyLCAweDAwLCAweDA0LCAweDEyLCAweDE4LCAweGZmLCAweDdlLCAweGIwLCAweDU1LCAweDE5LCAweGIyLCAweDAwLCAKKyAgICAweDAwLCAweDEyLCAweDE4LCAweGZmLCAweDMwLCAweDg5LCAweDBmLCAweDdlLCAweGEwLCAweDAwLCAweDE5LCAweGEyLCAweDAwLCAweDA0LCAweDEyLCAweDE4LCAKKyAgICAweGZmLCAweDIwLCAweDg5LCAweDAyLCAweDgwLCAweDI2LCAweDEyLCAweDE5LCAweDE5LCAweDMwLCAweDExLCAweDIwLCAweDdlLCAweGEwLCAweGZmLCAweDE5LCAKKyAgICAweGEyLCAweDAwLCAweDA0LCAweDEyLCAweDE4LCAweGZmLCAweDdlLCAweGIwLCAweDU1LCAweDE5LCAweGIyLCAweDAwLCAweDAwLCAweDEyLCAweDE4LCAweGZmLCAKKyAgICAweDdlLCAweGEwLCAweDAwLCAweDE5LCAweGEyLCAweDAwLCAweDA0LCAweDEyLCAweDE4LCAweGZmLCAweDgwLCAweGUwLCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAKKyAgICAweGE1LCAweGQ5LCAweGE4LCAweDAyLCAweDE3LCAweGMyLCAweDAyLCAweDE4LCAweDRjLCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDIxLCAKKyAgICAweDdlLCAweGEwLCAweDA4LCAweDE5LCAweGEyLCAweDAwLCAweDEwLCAweDEyLCAweDE4LCAweGZmLCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAKKyAgICAweGVmLCAweDIyLCAweDMwLCAweDFmLCAweDAzLCAweDAyLCAweDE4LCAweDRjLCAweGMyLCAweDhhLCAweDEyLCAweDE3LCAweGE5LCAweDBiLCAweDAwLCAweDEyLCAKKyAgICAweDE4LCAweDE2LCAweDIwLCAweDhiLCAweDI0LCAweDc0LCAweDAzLCAweDdhLCAweGIzLCAweDkxLCAweDA2LCAweDc0LCAweDAyLCAweDdhLCAweGIzLCAweDkxLCAKKyAgICAweDA3LCAweDc0LCAweDBjLCAweDdhLCAweGIzLCAweDkxLCAweDA2LCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDA3LCAweDEyLCAweDE5LCAweDBjLCAKKyAgICAweDMwLCAweDhiLCAweDA2LCAweDEyLCAweDE4LCAweDE2LCAweDMwLCAweDhiLCAweGFkLCAweDEyLCAweDE5LCAweDE5LCAweDMwLCAweDExLCAweGE3LCAweDEyLCAKKyAgICAweDE4LCAweDE2LCAweDc0LCAweDAzLCAweDdhLCAweGIzLCAweDkxLCAweDA2LCAweDc0LCAweDAyLCAweDdhLCAweGIzLCAweDkxLCAweDA3LCAweDEyLCAweDE5LCAKKyAgICAweDBjLCAweDEyLCAweDE4LCAweDE2LCAweDgwLCAweGU5LCAweDdlLCAweGEwLCAweDAwLCAweDc0LCAweDAyLCAweDdhLCAweGIzLCAweDkxLCAweDA2LCAweDdhLCAKKyAgICAweGEzLCAweDkxLCAweDA3LCAweDc0LCAweDAzLCAweDdhLCAweGIzLCAweDkxLCAweDA2LCAweDdhLCAweGEzLCAweDkxLCAweDA3LCAweDEyLCAweDE4LCAweGZmLCAKKyAgICAweDc0LCAweGVmLCAweDdhLCAweGIzLCAweDkxLCAweDA0LCAweDc0LCAweDgwLCAweDdhLCAweGIzLCAweDkxLCAweDAzLCAweDc0LCAweDBjLCAweDdhLCAweGIzLCAKKyAgICAweDkxLCAweDA2LCAweDc0LCAweDA4LCAweDdhLCAweGIzLCAweDkxLCAweDA3LCAweDEyLCAweDE5LCAweDBjLCAweDIyLCAweDMwLCAweDEyLCAweDE5LCAweDdlLCAKKyAgICAweDY4LCAweDMwLCAweGMyLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweGQyLCAweDExLCAweDEyLCAweDE4LCAweGZmLCAweDEyLCAKKyAgICAweDE4LCAweGZmLCAweDEyLCAweDE4LCAweGZmLCAweDAyLCAweDBjLCAweGNhLCAweDMwLCAweDFmLCAweDFjLCAweDdlLCAweDY4LCAweDMxLCAweDNjLCAweDdhLCAKKyAgICAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDdlLCAweDY4LCAweDMxLCAweDVlLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAKKyAgICAweGM0LCAweDEyLCAweDFhLCAweDZlLCAweDAyLCAweDE4LCAweGY3LCAweDBiLCAweDAwLCAweDdlLCAweDc4LCAweDE4LCAweGIxLCAweDdhLCAweDdjLCAweDAwLCAKKyAgICAweGZmLCAweDdmLCAweDY3LCAweDdhLCAweDZjLCAweDAwLCAweDAwLCAweDdlLCAweDcwLCAweDNlLCAweDdlLCAweDdiLCAweGIwLCAweDdhLCAweDZiLCAweGIwLCAKKyAgICAweDBiLCAweDdjLCAweDBiLCAweDZjLCAweGE1LCAweGRmLCAweGYzLCAweDdlLCAweDc4LCAweDE4LCAweGIxLCAweDdhLCAweDdjLCAweDAwLCAweDAwLCAweDg5LCAKKyAgICAweDc4LCAweDdlLCAweDc4LCAweDAwLCAweDAwLCAweDdhLCAweDdjLCAweDAwLCAweGZlLCAweDdlLCAweDY4LCAweDdmLCAweGJmLCAweDdhLCAweDZjLCAweDAwLCAKKyAgICAweGZlLCAweDc0LCAweGFhLCAweDM5LCAweGI3LCAweDU1LCAweDU1LCAweDc0LCAweDU1LCAweDM5LCAweGI3LCAweDJhLCAweGFhLCAweDc0LCAweGEwLCAweDM5LCAKKyAgICAweGI3LCAweDU1LCAweDU1LCAweDZjLCAweDk5LCAweDdhLCAweDZiLCAweDkwLCAweDdlLCAweDU0LCAweDI3LCAweDEwLCAweDdlLCAweDZiLCAweDgwLCAweGJjLCAKKyAgICAweDg5LCAweDY4LCAweDA4LCAweDFiLCAweDU0LCAweDc4LCAweGY1LCAweDhhLCAweGZmLCAweDE4LCAweGVmLCAweDhhLCAweGZmLCAweDE4LCAweGY3LCAweDEyLCAKKyAgICAweDE5LCAweDE5LCAweDdlLCAweDZiLCAweDgwLCAweDgwLCAweGZiLCAweDdlLCAweDEwLCAweGZmLCAweDEyLCAweDE5LCAweGFjLCAweDgwLCAweGY4LCAweGNhLCAKKyAgICAweGY5LCAweDdlLCAweGY0LCAweDAwLCAweGZmLCAweDFiLCAweGY0LCAweDc4LCAweGZjLCAweGRhLCAweGY5LCAweDIyLCAweGNhLCAweGY5LCAweDdlLCAweGY0LCAKKyAgICAweDAwLCAweDAwLCAweDFiLCAweGY0LCAweDc4LCAweGZjLCAweGRhLCAweGY5LCAweDIyLCAweDIwLCAweDExLCAweDIwLCAweGQyLCAweDEyLCAweDEyLCAweDE5LCAKKyAgICAweDBjLCAweDdlLCAweGIwLCAweDAyLCAweDdhLCAweGIzLCAweDkwLCAweDAwLCAweDEyLCAweDE5LCAweDBjLCAweDEyLCAweDE5LCAweDBjLCAweDEyLCAweDE5LCAKKyAgICAweDBjLCAweDEyLCAweDE5LCAweDBjLCAweDdlLCAweGIwLCAweDAwLCAweDdhLCAweGIzLCAweDkwLCAweDAwLCAweDIyLCAweGNhLCAweDBiLCAweDdlLCAweDEwLCAKKyAgICAweDAzLCAweDdjLCAweDMwLCAweDZjLCAweDIyLCAweDBiLCAweDIwLCAweDllLCAweDMwLCAweDBhLCAweDUwLCAweGY5LCAweDJlLCAweDMwLCAweDBiLCAweDFiLCAKKyAgICAweDIwLCAweDY4LCAweDIwLCAweDEyLCAweDE5LCAweDBjLCAweDEyLCAweDE5LCAweDBjLCAweDdlLCAweGIwLCAweDAzLCAweDdhLCAweGIzLCAweDkwLCAweDAwLCAKKyAgICAweDEyLCAweDE5LCAweDBjLCAweDEyLCAweDE5LCAweDBjLCAweDEyLCAweDE5LCAweDBjLCAweDdlLCAweGIwLCAweDAwLCAweDdhLCAweGIzLCAweDkwLCAweDAwLCAKKyAgICAweGE1LCAweGRhLCAweGUwLCAweDEyLCAweDE5LCAweDBjLCAweDEyLCAweDE5LCAweDBjLCAweDFiLCAweDMwLCAweDY4LCAweDIwLCAweDEyLCAweDE5LCAweDBjLCAKKyAgICAweDEyLCAweDE5LCAweDBjLCAweDdlLCAweGIwLCAweDAyLCAweDdhLCAweGIzLCAweDkwLCAweDAwLCAweDEyLCAweDE5LCAweDBjLCAweDEyLCAweDE5LCAweDBjLCAKKyAgICAweDEyLCAweDE5LCAweDBjLCAweDdlLCAweGIwLCAweDAwLCAweDdhLCAweGIzLCAweDkwLCAweDAwLCAweGE1LCAweGRiLCAweGUwLCAweDdlLCAweDIwLCAweDBhLCAKKyAgICAweDEyLCAweDE5LCAweDBjLCAweGE1LCAweGRhLCAweGZhLCAweGE1LCAweGQ5LCAweDk4LCAweGRhLCAweDBiLCAweDIyLCAweDIwLCAweDExLCAweDE0LCAweDEyLCAKKyAgICAweDE5LCAweDBjLCAweDdlLCAweGIwLCAweDAxLCAweDdhLCAweGIzLCAweDkwLCAweDAwLCAweDEyLCAweDE5LCAweDBjLCAweDdlLCAweGIwLCAweDAwLCAweDdhLCAKKyAgICAweGIzLCAweDkwLCAweDAwLCAweDIyLCAweDMwLCAweDFmLCAweDMyLCAweDIwLCAweDExLCAweDJmLCAweGNhLCAweDJiLCAweGNhLCAweDdiLCAweDdlLCAweDc4LCAKKyAgICAweDgwLCAweDAwLCAweDdhLCAweDdjLCAweDAwLCAweGZlLCAweDEyLCAweDFhLCAweDRkLCAweDdlLCAweDZiLCAweGEwLCAweDVjLCAweGFhLCAweDY4LCAweDEwLCAKKyAgICAweDI5LCAweGI3LCAweDAwLCAweDE0LCAweDU0LCAweDYwLCAweDY4LCAweGY4LCAweDM5LCAweGE3LCAweDAwLCAweDAwLCAweDBiLCAweDZjLCAweDgwLCAweGU5LCAKKyAgICAweDEyLCAweDE4LCAweGZmLCAweGQyLCAweGI1LCAweGRhLCAweDdiLCAweGRhLCAweDJiLCAweDIyLCAweDEyLCAweDFhLCAweDA1LCAweDdlLCAweDY4LCAweDAwLCAKKyAgICAweDBjLCAweDEyLCAweDE5LCAweGM0LCAweDIyLCAweGNhLCAweDU5LCAweGNhLCAweDViLCAweDdlLCAweGI0LCAweDAwLCAweDBjLCAweDdjLCAweGI4LCAweGM0LCAKKyAgICAweDEyLCAweDFhLCAweDM1LCAweDdjLCAweGI4LCAweDEyLCAweDFhLCAweDM1LCAweDdjLCAweGI5LCAweGM0LCAweDEyLCAweDFhLCAweDM1LCAweDdjLCAweGI5LCAKKyAgICAweDEyLCAweDFhLCAweDM1LCAweDdlLCAweGIwLCAweDY4LCAweDdhLCAweGI5LCAweGIwLCAweDBiLCAweGI0LCAweDZjLCAweGJiLCAweDdhLCAweGI5LCAweGIwLCAKKyAgICAweGRhLCAweDU5LCAweGRhLCAweDViLCAweDIyLCAweDVlLCAweGIwLCAweDBmLCAweDdjLCAweGFiLCAweDllLCAweGEwLCAweDBhLCAweDQwLCAweDA1LCAweDJlLCAKKyAgICAweGIwLCAweDM3LCAweDgwLCAweDAzLCAweDJlLCAweGIwLCAweDMwLCAweDdhLCAweGI5LCAweGIwLCAweDBiLCAweGI0LCAweDIyLCAweGMyLCAweGI1LCAweDc1LCAKKyAgICAweGIwLCAweGVmLCAweDEyLCAweDE4LCAweGZmLCAweDc0LCAweDgwLCAweDM5LCAweGI3LCAweDAwLCAweDBjLCAweDdlLCAweDU0LCAweDAwLCAweDA2LCAweDM5LCAKKyAgICAweGE3LCAweDAwLCAweDA0LCAweDM5LCAweGI3LCAweDAwLCAweDAwLCAweDc0LCAweDAzLCAweDM5LCAweGI3LCAweDAwLCAweDBjLCAweDIyLCAweDdlLCAweDc4LCAKKyAgICAweDAwLCAweDAwLCAweDdhLCAweDdjLCAweDAwLCAweGZmLCAweDdlLCAweDU4LCAweDAwLCAweDAwLCAweDdhLCAweDVjLCAweDAwLCAweDAxLCAweDdmLCAweDY1LCAKKyAgICAweDdlLCAweDc0LCAweDIwLCAweDAwLCAweDEyLCAweDBiLCAweDYzLCAweDQwLCAweDU4LCAweDdlLCAweDc4LCAweDdjLCAweDAwLCAweDdhLCAweDdjLCAweDAwLCAKKyAgICAweGZmLCAweDdlLCAweDU4LCAweDAwLCAweDAwLCAweDdhLCAweDVjLCAweDAwLCAweDAxLCAweDdlLCAweDY4LCAweDdjLCAweDAwLCAweDdhLCAweDZjLCAweDAwLCAKKyAgICAweDAxLCAweDdlLCAweDc0LCAweDA0LCAweDAwLCAweDEyLCAweDBiLCAweDYzLCAweDQwLCAweDM3LCAweDc0LCAweDgwLCAweDEyLCAweDFhLCAweGVhLCAweDQwLCAKKyAgICAweDMwLCAweDdlLCAweDAwLCAweDAzLCAweDdhLCAweDAzLCAweDkwLCAweDAwLCAweGQyLCAweDEwLCAweDdlLCAweDA0LCAweDAwLCAweDA4LCAweDdlLCAweDE0LCAKKyAgICAweDAwLCAweDAwLCAweDg0LCAweGE1LCAweGRiLCAweGZjLCAweGE1LCAweGRhLCAweGY5LCAweGE1LCAweGQ5LCAweGY2LCAweDc0LCAweDQwLCAweDEyLCAweDFhLCAKKyAgICAweGVhLCAweDQwLCAweDBlLCAweDdlLCAweDY4LCAweDMxLCAweDhkLCAweDdhLCAweDZjLCAweDAwLCAweGZmLCAweDEyLCAweDE5LCAweGM0LCAweDAyLCAweDE4LCAKKyAgICAweGY3LCAweDdlLCAweGIwLCAweDAyLCAweDdhLCAweGIzLCAweDkwLCAweDAwLCAweDgwLCAweGZlLCAweGY1LCAweDBiLCAweDdlLCAweDc4LCAweDAwLCAweDBiLCAKKyAgICAweDdhLCAweDdjLCAweDAwLCAweDAwLCAweDdlLCAweDY4LCAweDdmLCAweGJmLCAweDdhLCAweDZjLCAweDAwLCAweDAxLCAweDdlLCAweDc0LCAweDAwLCAweDAxLCAKKyAgICAweDAyLCAweDBiLCAweDYzLCAKKworLy8gU2VnbWVudCAjMTksIEVYQ0xVREVEIFN0YXJ0IEFkZHJlc3MgMDBmZjJjNjYsIExlbmd0aCAxMzkzCisKK307CisKK3N0YXRpYyBzdHJ1Y3QgZWRnZV9maXJtd2FyZV92ZXJzaW9uX2luZm8gSU1BR0VfVkVSU0lPTl9OQU1FID0geworCTIsIDAsIDMgfTsJCS8vIE1ham9yLCBNaW5vciwgQnVpbGQKKworI3VuZGVmIElNQUdFX1ZFUlNJT05fTkFNRQorCisjdW5kZWYgSU1BR0VfQVJSQVlfTkFNRQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZndfZG93bi5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2Z3X2Rvd24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTYxZDgwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2Z3X2Rvd24uaApAQCAtMCwwICsxLDEyMjkgQEAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vKiBFZGdlcG9ydC80IEJpbmFyeSBJbWFnZQorLy8qIEdlbmVyYXRlZCBieSBIRVgyQyB2MS4wNgorLy8qIENvcHlyaWdodCAoQykgMTk5OCBJbnNpZGUgT3V0IE5ldHdvcmtzLCBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8qCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisvLyoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy8vKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorLy8qCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworLy9JbWFnZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbgorI2lmICFkZWZpbmVkKERFRklORURfRURHRV9GSVJNV0FSRV9JTUFHRV9SRUNPUkQpCisJI2RlZmluZSBERUZJTkVEX0VER0VfRklSTVdBUkVfSU1BR0VfUkVDT1JECisJc3RydWN0IGVkZ2VfZmlybXdhcmVfaW1hZ2VfcmVjb3JkIHsKKwkJX19sZTE2IEV4dEFkZHI7CisJCV9fbGUxNiBBZGRyOworCQlfX2xlMTYgTGVuOworCQl1bnNpZ25lZCBjaGFyCURhdGFbMF07CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKwlzdHJ1Y3QgZWRnZV9maXJtd2FyZV92ZXJzaW9uX2luZm8geworCQl1bnNpZ25lZCBjaGFyCU1ham9yVmVyc2lvbjsKKwkJdW5zaWduZWQgY2hhcglNaW5vclZlcnNpb247CisJCXVuc2lnbmVkIHNob3J0CUJ1aWxkTnVtYmVyOworCX07CisKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoSU1BR0VfQVJSQVlfTkFNRSkKKwkjZGVmaW5lIElNQUdFX0FSUkFZX05BTUUJRmlybXdhcmVJbWFnZQorCSNkZWZpbmUgSU1BR0VfVkVSU0lPTl9OQU1FCUZpcm13YXJlSW1hZ2VWZXJzaW9uCisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgSU1BR0VfQVJSQVlfTkFNRVtdID0geworCisvLyBTZWdtZW50ICMxLCBTdGFydCBBZGRyZXNzIDAwZmYwMDAwLCBMZW5ndGggNgorMHhmZiwweDAwLDB4MDAsMHgwMCwweDA2LDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0NCwgMHhiMCwgCisKKy8vIFNlZ21lbnQgIzIsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMGIsIExlbmd0aCAzCisweGZmLDB4MDAsMHgwYiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDQ0LCAweDcyLCAKKworLy8gU2VnbWVudCAjMywgU3RhcnQgQWRkcmVzcyAwMGZmMDAxMywgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDEzLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4MTMsIAorCisvLyBTZWdtZW50ICM0LCBTdGFydCBBZGRyZXNzIDAwZmYwMDFiLCBMZW5ndGggMworMHhmZiwweDAwLDB4MWIsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgxYiwgCisKKy8vIFNlZ21lbnQgIzUsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMjMsIExlbmd0aCAzCisweGZmLDB4MDAsMHgyMywweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDIzLCAKKworLy8gU2VnbWVudCAjNiwgU3RhcnQgQWRkcmVzcyAwMGZmMDAyYiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDJiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4MmIsIAorCisvLyBTZWdtZW50ICM3LCBTdGFydCBBZGRyZXNzIDAwZmYwMDMzLCBMZW5ndGggMworMHhmZiwweDAwLDB4MzMsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgzMywgCisKKy8vIFNlZ21lbnQgIzgsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwM2IsIExlbmd0aCAzCisweGZmLDB4MDAsMHgzYiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDNiLCAKKworLy8gU2VnbWVudCAjOSwgU3RhcnQgQWRkcmVzcyAwMGZmMDA0MywgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDQzLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4NDMsIAorCisvLyBTZWdtZW50ICMxMCwgU3RhcnQgQWRkcmVzcyAwMGZmMDA0YiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDRiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4NmUsIDB4YzQsIAorCisvLyBTZWdtZW50ICMxMSwgU3RhcnQgQWRkcmVzcyAwMGZmMDA1MywgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDUzLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4NzUsIDB4OGQsIAorCisvLyBTZWdtZW50ICMxMiwgU3RhcnQgQWRkcmVzcyAwMGZmMDA3YiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDdiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4N2IsIAorCisvLyBTZWdtZW50ICMxMywgU3RhcnQgQWRkcmVzcyAwMGZmMDA4MCwgTGVuZ3RoIDcKKzB4ZmYsMHgwMCwweDgwLDB4MDAsMHgwNywweDAwLAorICAgIDB4N2UsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDIsIDB4NDAsIDB4NTEsIAorCisvLyBTZWdtZW50ICMxNCwgU3RhcnQgQWRkcmVzcyAwMGZmMzAwMCwgTGVuZ3RoIDIxNzgKKzB4ZmYsMHgwMCwweDAwLDB4MzAsMHg4MiwweDA4LAorICAgIDB4MTIsIDB4MzcsIDB4MjgsIDB4MTIsIDB4MzAsIDB4M2UsIDB4MTIsIDB4MzAsIDB4NTQsIDB4MTIsIDB4MzAsIDB4ZTUsIDB4MTIsIDB4MzEsIDB4NjgsIDB4MTIsIAorICAgIDB4MzUsIDB4MjAsIDB4MTIsIDB4MzgsIDB4NTgsIDB4MTIsIDB4MzEsIDB4MTUsIDB4MTIsIDB4MzEsIDB4NDAsIDB4MTIsIDB4MzAsIDB4YTAsIDB4ODAsIDB4ZTAsIAorICAgIDB4ZTUsIDB4MjMsIDB4NjAsIDB4MTksIDB4N2UsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDksIDB4YjEsIDB4MDEsIDB4Y2YsIDB4YjQsIDB4MDAsIDB4MDIsIDB4ODAsIAorICAgIDB4MDUsIDB4MTQsIDB4MTksIDB4YjEsIDB4MDEsIDB4Y2YsIDB4YTUsIDB4MGIsIDB4YmUsIDB4MzEsIDB4MmYsIDB4NzgsIDB4ZWIsIDB4MjIsIDB4YzIsIDB4YWYsIAorICAgIDB4N2UsIDB4YjMsIDB4M2YsIDB4ZjEsIDB4YjQsIDB4MDEsIDB4MGEsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDIsIDB4MTIsIDB4NzAsIDB4ZWYsIDB4ZDAsIAorICAgIDB4ZjEsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4YzIsIDB4YWYsIDB4ZTUsIDB4MjIsIDB4NjAsIDB4NDMsIDB4N2UsIDB4MDcsIDB4MDEsIDB4ZTEsIDB4YmUsIDB4MDQsIAorICAgIDB4MDMsIDB4ODAsIDB4MzgsIDB4MzksIDB4N2UsIDB4MDQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MjAsIDB4MDAsIDB4MTMsIDB4NTAsIDB4MjEsIDB4MDksIDB4YTAsIAorICAgIDB4MDAsIDB4MDQsIDB4NGUsIDB4YTAsIDB4MDUsIDB4MTksIDB4YTAsIDB4MDAsIDB4MDQsIDB4MGEsIDB4MzIsIDB4MDksIDB4NTMsIDB4NjcsIDB4OGUsIDB4NWUsIAorICAgIDB4NTEsIDB4MjcsIDB4NjgsIDB4MGIsIDB4MDksIDB4YTAsIDB4MDAsIDB4MTAsIDB4NGUsIDB4YTAsIDB4MDEsIDB4MTksIDB4YTAsIDB4MDAsIDB4MTAsIDB4MmUsIAorICAgIDB4MDQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4MGEsIDB4YmUsIDB4MjEsIDB4MmYsIDB4NzgsIDB4ZDEsIDB4NzUsIDB4MjIsIDB4MDAsIDB4ZDIsIDB4YWYsIDB4MjIsIAorICAgIDB4YzIsIDB4YWYsIDB4N2UsIDB4MjAsIDB4MDAsIDB4N2UsIDB4MzAsIDB4MDEsIDB4N2MsIDB4YjIsIDB4MjMsIDB4MGEsIDB4MmIsIDB4NDksIDB4MzIsIDB4MDEsIAorICAgIDB4OGYsIDB4YmUsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsIDB4N2UsIDB4YjEsIDB4MjEsIDB4YTUsIDB4NGIsIDB4N2EsIDB4YjEsIDB4MjEsIDB4Y2EsIAorICAgIDB4MTksIDB4NDksIDB4MjIsIDB4MzAsIDB4ZDUsIDB4OTksIDB4MjQsIDB4ZGEsIDB4MTksIDB4M2UsIDB4MzAsIDB4YTUsIDB4MGEsIDB4YmUsIDB4MjEsIDB4MmYsIAorICAgIDB4NzgsIDB4ZDYsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4NDYsIDB4MGYsIDB4NDksIDB4NjcsIDB4NGMsIDB4YmYsIDB4NTAsIDB4MTcsIDB4NTMsIDB4NmYsIDB4NTYsIAorICAgIDB4YzcsIDB4NWEsIDB4MWYsIDB4NWQsIDB4NzcsIDB4YzIsIDB4YWYsIDB4ZTUsIDB4MzIsIDB4NjAsIDB4MTQsIDB4N2UsIDB4MjAsIDB4MDAsIDB4MTMsIDB4NTAsIAorICAgIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4MzEsIDB4MDIsIDB4ZGEsIDB4YjgsIDB4YTUsIDB4MGEsIDB4YmUsIDB4MjEsIDB4MmYsIDB4NzgsIDB4ZWYsIDB4ZDIsIAorICAgIDB4YWYsIDB4MjIsIDB4Y2EsIDB4MjgsIDB4MTIsIDB4NjcsIDB4YWIsIDB4ZGEsIDB4MjgsIDB4NDAsIDB4MDksIDB4MGEsIDB4MjIsIDB4MDksIDB4YjIsIDB4NjcsIAorICAgIDB4OGUsIDB4ZjQsIDB4NTIsIDB4MzIsIDB4MjIsIDB4YzIsIDB4YWYsIDB4ZTUsIDB4MzQsIDB4NjAsIDB4MTQsIDB4N2UsIDB4MjAsIDB4MDAsIDB4MTMsIDB4NTAsIAorICAgIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4MzEsIDB4MzIsIDB4ZGEsIDB4YjgsIDB4YTUsIDB4MGEsIDB4YmUsIDB4MjEsIDB4MmYsIDB4NzgsIDB4ZWYsIDB4ZDIsIAorICAgIDB4YWYsIDB4MjIsIDB4Y2EsIDB4MjgsIDB4MGEsIDB4MjIsIDB4MDksIDB4NDIsIDB4MDAsIDB4M2UsIDB4MTIsIDB4NjksIDB4YzIsIDB4ZGEsIDB4MjgsIDB4MjIsIAorICAgIDB4YzIsIDB4YWYsIDB4ZTUsIDB4MzUsIDB4NjAsIDB4MTQsIDB4N2UsIDB4MjAsIDB4MDAsIDB4MTMsIDB4NTAsIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4MzEsIAorICAgIDB4NWQsIDB4ZGEsIDB4YjgsIDB4YTUsIDB4MGEsIDB4YmUsIDB4MjEsIDB4MmYsIDB4NzgsIDB4ZWYsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4Y2EsIDB4MjgsIDB4N2UsIAorICAgIDB4NDAsIDB4MDAsIDB4MTIsIDB4NmMsIDB4NWIsIDB4ZGEsIDB4MjgsIDB4MjIsIDB4YzIsIDB4YWYsIDB4ZTUsIDB4MjMsIDB4NjAsIDB4MTQsIDB4N2UsIDB4MjAsIAorICAgIDB4MDAsIDB4MTMsIDB4NTAsIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4MzEsIDB4ODUsIDB4ZGEsIDB4YjgsIDB4YTUsIDB4MGEsIDB4YmUsIDB4MjEsIDB4MmYsIAorICAgIDB4NzgsIDB4ZWYsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4N2MsIDB4YjIsIDB4MjMsIDB4MGEsIDB4MmIsIDB4NDksIDB4MjIsIDB4MzEsIDB4OTAsIDB4ODksIDB4MjQsIAorICAgIDB4MzEsIDB4YTAsIDB4MzIsIDB4MTAsIDB4MzIsIDB4ODAsIDB4MzIsIDB4ZjAsIDB4MzMsIDB4NjAsIDB4MzMsIDB4ZDAsIDB4MzQsIDB4NDAsIDB4MzQsIDB4YjAsIAorICAgIDB4N2UsIDB4MjcsIDB4MDEsIDB4OGYsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MjQsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4MDksIDB4YjIsIAorICAgIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIAorICAgIDB4NDksIDB4MzAsIDB4N2QsIDB4MjEsIDB4ZGEsIDB4MTksIDB4MzAsIDB4ZTYsIDB4MTgsIDB4N2UsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MWUsIDB4YmUsIDB4MjcsIAorICAgIDB4MDEsIDB4OWYsIDB4NjgsIDB4MGQsIDB4N2EsIDB4MjcsIDB4MDEsIDB4OWYsIDB4N2UsIDB4NjAsIDB4OWMsIDB4N2EsIDB4NjMsIDB4MDEsIDB4Y2YsIDB4ODAsIAorICAgIDB4MmUsIDB4N2UsIDB4NjMsIDB4MDEsIDB4Y2YsIDB4YTUsIDB4YmUsIDB4MDAsIDB4MjYsIDB4N2UsIDB4NjAsIDB4MDEsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2UsIAorICAgIDB4YTAsIDB4YzgsIDB4MTIsIDB4NjIsIDB4YjYsIDB4NDAsIDB4MTgsIDB4NzUsIDB4MzEsIDB4YjMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YzIsIDB4MTgsIDB4NmMsIAorICAgIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4Y2YsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIAorICAgIDB4N2UsIDB4MjcsIDB4MDEsIDB4OTEsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MjQsIDB4N2UsIDB4MjQsIDB4ODEsIDB4MDAsIDB4MDksIDB4YjIsIAorICAgIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIAorICAgIDB4NGMsIDB4ODgsIDB4N2QsIDB4MjEsIDB4ZGEsIDB4MTksIDB4MzAsIDB4ZTYsIDB4MTgsIDB4N2UsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MWUsIDB4YmUsIDB4MjcsIAorICAgIDB4MDEsIDB4YTEsIDB4NjgsIDB4MGQsIDB4N2EsIDB4MjcsIDB4MDEsIDB4YTEsIDB4N2UsIDB4NjAsIDB4OWMsIDB4N2EsIDB4NjMsIDB4MDEsIDB4ZDAsIDB4ODAsIAorICAgIDB4MmUsIDB4N2UsIDB4NjMsIDB4MDEsIDB4ZDAsIDB4YTUsIDB4YmUsIDB4MDAsIDB4MjYsIDB4N2UsIDB4NjAsIDB4MDEsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2UsIAorICAgIDB4YTAsIDB4YzgsIDB4MTIsIDB4NjIsIDB4YjYsIDB4NDAsIDB4MTgsIDB4NzUsIDB4MzEsIDB4YjMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YzIsIDB4MTksIDB4NmMsIAorICAgIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4ZDAsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIAorICAgIDB4N2UsIDB4MjcsIDB4MDEsIDB4OTMsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MjQsIDB4N2UsIDB4MjQsIDB4ODIsIDB4MDAsIDB4MDksIDB4YjIsIAorICAgIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIAorICAgIDB4NGYsIDB4ZTAsIDB4N2QsIDB4MjEsIDB4ZGEsIDB4MTksIDB4MzAsIDB4ZTYsIDB4MTgsIDB4N2UsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MWUsIDB4YmUsIDB4MjcsIAorICAgIDB4MDEsIDB4YTMsIDB4NjgsIDB4MGQsIDB4N2EsIDB4MjcsIDB4MDEsIDB4YTMsIDB4N2UsIDB4NjAsIDB4OWMsIDB4N2EsIDB4NjMsIDB4MDEsIDB4ZDEsIDB4ODAsIAorICAgIDB4MmUsIDB4N2UsIDB4NjMsIDB4MDEsIDB4ZDEsIDB4YTUsIDB4YmUsIDB4MDAsIDB4MjYsIDB4N2UsIDB4NjAsIDB4MDEsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2UsIAorICAgIDB4YTAsIDB4YzgsIDB4MTIsIDB4NjIsIDB4YjYsIDB4NDAsIDB4MTgsIDB4NzUsIDB4MzEsIDB4YjMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YzIsIDB4MWEsIDB4NmMsIAorICAgIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4ZDEsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIAorICAgIDB4N2UsIDB4MjcsIDB4MDEsIDB4OTUsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MjQsIDB4N2UsIDB4MjQsIDB4ODMsIDB4MDAsIDB4MDksIDB4YjIsIAorICAgIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIAorICAgIDB4NTMsIDB4MzgsIDB4N2QsIDB4MjEsIDB4ZGEsIDB4MTksIDB4MzAsIDB4ZTYsIDB4MTgsIDB4N2UsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MWUsIDB4YmUsIDB4MjcsIAorICAgIDB4MDEsIDB4YTUsIDB4NjgsIDB4MGQsIDB4N2EsIDB4MjcsIDB4MDEsIDB4YTUsIDB4N2UsIDB4NjAsIDB4OWMsIDB4N2EsIDB4NjMsIDB4MDEsIDB4ZDIsIDB4ODAsIAorICAgIDB4MmUsIDB4N2UsIDB4NjMsIDB4MDEsIDB4ZDIsIDB4YTUsIDB4YmUsIDB4MDAsIDB4MjYsIDB4N2UsIDB4NjAsIDB4MDEsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2UsIAorICAgIDB4YTAsIDB4YzgsIDB4MTIsIDB4NjIsIDB4YjYsIDB4NDAsIDB4MTgsIDB4NzUsIDB4MzEsIDB4YjMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YzIsIDB4MWIsIDB4NmMsIAorICAgIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4ZDIsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIAorICAgIDB4N2UsIDB4MjcsIDB4MDEsIDB4OTcsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MjQsIDB4N2UsIDB4MjQsIDB4ODQsIDB4MDAsIDB4MDksIDB4YjIsIAorICAgIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIAorICAgIDB4NTYsIDB4OTAsIDB4N2QsIDB4MjEsIDB4ZGEsIDB4MTksIDB4MzAsIDB4ZTYsIDB4MTgsIDB4N2UsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MWUsIDB4YmUsIDB4MjcsIAorICAgIDB4MDEsIDB4YTcsIDB4NjgsIDB4MGQsIDB4N2EsIDB4MjcsIDB4MDEsIDB4YTcsIDB4N2UsIDB4NjAsIDB4OWMsIDB4N2EsIDB4NjMsIDB4MDEsIDB4ZDMsIDB4ODAsIAorICAgIDB4MmUsIDB4N2UsIDB4NjMsIDB4MDEsIDB4ZDMsIDB4YTUsIDB4YmUsIDB4MDAsIDB4MjYsIDB4N2UsIDB4NjAsIDB4MDEsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2UsIAorICAgIDB4YTAsIDB4YzgsIDB4MTIsIDB4NjIsIDB4YjYsIDB4NDAsIDB4MTgsIDB4NzUsIDB4MzEsIDB4YjMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YzIsIDB4MWMsIDB4NmMsIAorICAgIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4ZDMsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIAorICAgIDB4N2UsIDB4MjcsIDB4MDEsIDB4OTksIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MjQsIDB4N2UsIDB4MjQsIDB4ODUsIDB4MDAsIDB4MDksIDB4YjIsIAorICAgIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIAorICAgIDB4NTksIDB4ZTgsIDB4N2QsIDB4MjEsIDB4ZGEsIDB4MTksIDB4MzAsIDB4ZTYsIDB4MTgsIDB4N2UsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MWUsIDB4YmUsIDB4MjcsIAorICAgIDB4MDEsIDB4YTksIDB4NjgsIDB4MGQsIDB4N2EsIDB4MjcsIDB4MDEsIDB4YTksIDB4N2UsIDB4NjAsIDB4OWMsIDB4N2EsIDB4NjMsIDB4MDEsIDB4ZDQsIDB4ODAsIAorICAgIDB4MmUsIDB4N2UsIDB4NjMsIDB4MDEsIDB4ZDQsIDB4YTUsIDB4YmUsIDB4MDAsIDB4MjYsIDB4N2UsIDB4NjAsIDB4MDEsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2UsIAorICAgIDB4YTAsIDB4YzgsIDB4MTIsIDB4NjIsIDB4YjYsIDB4NDAsIDB4MTgsIDB4NzUsIDB4MzEsIDB4YjMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YzIsIDB4MWQsIDB4NmMsIAorICAgIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4ZDQsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIAorICAgIDB4N2UsIDB4MjcsIDB4MDEsIDB4OWIsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MjQsIDB4N2UsIDB4MjQsIDB4ODYsIDB4MDAsIDB4MDksIDB4YjIsIAorICAgIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIAorICAgIDB4NWQsIDB4NDAsIDB4N2QsIDB4MjEsIDB4ZGEsIDB4MTksIDB4MzAsIDB4ZTYsIDB4MTgsIDB4N2UsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MWUsIDB4YmUsIDB4MjcsIAorICAgIDB4MDEsIDB4YWIsIDB4NjgsIDB4MGQsIDB4N2EsIDB4MjcsIDB4MDEsIDB4YWIsIDB4N2UsIDB4NjAsIDB4OWMsIDB4N2EsIDB4NjMsIDB4MDEsIDB4ZDUsIDB4ODAsIAorICAgIDB4MmUsIDB4N2UsIDB4NjMsIDB4MDEsIDB4ZDUsIDB4YTUsIDB4YmUsIDB4MDAsIDB4MjYsIDB4N2UsIDB4NjAsIDB4MDEsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2UsIAorICAgIDB4YTAsIDB4YzgsIDB4MTIsIDB4NjIsIDB4YjYsIDB4NDAsIDB4MTgsIDB4NzUsIDB4MzEsIDB4YjMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YzIsIDB4MWUsIDB4NmMsIAorICAgIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4ZDUsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIAorICAgIDB4N2UsIDB4MjcsIDB4MDEsIDB4OWQsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MjQsIDB4N2UsIDB4MjQsIDB4ODcsIDB4MDAsIDB4MDksIDB4YjIsIAorICAgIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIAorICAgIDB4NjAsIDB4OTgsIDB4N2QsIDB4MjEsIDB4ZGEsIDB4MTksIDB4MzAsIDB4ZTYsIDB4MTgsIDB4N2UsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MWUsIDB4YmUsIDB4MjcsIAorICAgIDB4MDEsIDB4YWQsIDB4NjgsIDB4MGQsIDB4N2EsIDB4MjcsIDB4MDEsIDB4YWQsIDB4N2UsIDB4NjAsIDB4OWMsIDB4N2EsIDB4NjMsIDB4MDEsIDB4ZDYsIDB4ODAsIAorICAgIDB4MmUsIDB4N2UsIDB4NjMsIDB4MDEsIDB4ZDYsIDB4YTUsIDB4YmUsIDB4MDAsIDB4MjYsIDB4N2UsIDB4NjAsIDB4MDEsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2UsIAorICAgIDB4YTAsIDB4YzgsIDB4MTIsIDB4NjIsIDB4YjYsIDB4NDAsIDB4MTgsIDB4NzUsIDB4MzEsIDB4YjMsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YzIsIDB4MWYsIDB4NmMsIAorICAgIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4ZDYsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIAorICAgIDB4YzIsIDB4YWYsIDB4ZTUsIDB4MjQsIDB4NjAsIDB4MTQsIDB4N2UsIDB4MjAsIDB4MDAsIDB4MTMsIDB4NTAsIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4MzUsIAorICAgIDB4M2QsIDB4ZGEsIDB4YjgsIDB4YTUsIDB4MGEsIDB4YmUsIDB4MjEsIDB4MmYsIDB4NzgsIDB4ZWYsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4N2MsIDB4YjIsIDB4MjMsIAorICAgIDB4MGEsIDB4MmIsIDB4NDksIDB4MjIsIDB4MzUsIDB4NDgsIDB4ODksIDB4MjQsIDB4MzUsIDB4NTgsIDB4MzUsIDB4OTIsIDB4MzUsIDB4Y2MsIDB4MzYsIDB4MDYsIAorICAgIDB4MzYsIDB4NDAsIDB4MzYsIDB4N2EsIDB4MzYsIDB4YjQsIDB4MzYsIDB4ZWUsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTQsIAorICAgIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIDB4NDksIDB4MzAsIAorICAgIDB4N2QsIDB4MjEsIDB4ZGEsIDB4MTksIDB4NWUsIDB4YjAsIDB4MDEsIDB4N2UsIDB4YTAsIDB4OTAsIDB4MTIsIDB4NjIsIDB4OTMsIDB4NDAsIDB4MTIsIDB4NzUsIAorICAgIDB4MzEsIDB4YjgsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YzIsIDB4MjAsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIAorICAgIDB4ZjEsIDB4MjIsIDB4N2UsIDB4MjQsIDB4ODEsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIAorICAgIDB4YjgsIDB4NjgsIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIDB4NGMsIDB4ODgsIDB4N2QsIDB4MjEsIDB4ZGEsIDB4MTksIDB4NWUsIDB4YjAsIAorICAgIDB4MDEsIDB4N2UsIDB4YTAsIDB4OTAsIDB4MTIsIDB4NjIsIDB4OTMsIDB4NDAsIDB4MTIsIDB4NzUsIDB4MzEsIDB4YjgsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YzIsIAorICAgIDB4MjEsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIDB4N2UsIDB4MjQsIDB4ODIsIDB4MDAsIAorICAgIDB4MDksIDB4YjIsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIAorICAgIDB4MTIsIDB4MTIsIDB4NGYsIDB4ZTAsIDB4N2QsIDB4MjEsIDB4ZGEsIDB4MTksIDB4NWUsIDB4YjAsIDB4MDEsIDB4N2UsIDB4YTAsIDB4OTAsIDB4MTIsIDB4NjIsIAorICAgIDB4OTMsIDB4NDAsIDB4MTIsIDB4NzUsIDB4MzEsIDB4YjgsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YzIsIDB4MjIsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIAorICAgIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIDB4N2UsIDB4MjQsIDB4ODMsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIAorICAgIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIDB4NTMsIDB4MzgsIDB4N2QsIDB4MjEsIAorICAgIDB4ZGEsIDB4MTksIDB4NWUsIDB4YjAsIDB4MDEsIDB4N2UsIDB4YTAsIDB4OTAsIDB4MTIsIDB4NjIsIDB4OTMsIDB4NDAsIDB4MTIsIDB4NzUsIDB4MzEsIDB4YjgsIAorICAgIDB4MTIsIDB4N2MsIDB4MTUsIDB4YzIsIDB4MjMsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIAorICAgIDB4N2UsIDB4MjQsIDB4ODQsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIAorICAgIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIDB4NTYsIDB4OTAsIDB4N2QsIDB4MjEsIDB4ZGEsIDB4MTksIDB4NWUsIDB4YjAsIDB4MDEsIDB4N2UsIAorICAgIDB4YTAsIDB4OTAsIDB4MTIsIDB4NjIsIDB4OTMsIDB4NDAsIDB4MTIsIDB4NzUsIDB4MzEsIDB4YjgsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YzIsIDB4MjQsIDB4YzAsIAorICAgIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIDB4N2UsIDB4MjQsIDB4ODUsIDB4MDAsIDB4MDksIDB4YjIsIAorICAgIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIAorICAgIDB4NTksIDB4ZTgsIDB4N2QsIDB4MjEsIDB4ZGEsIDB4MTksIDB4NWUsIDB4YjAsIDB4MDEsIDB4N2UsIDB4YTAsIDB4OTAsIDB4MTIsIDB4NjIsIDB4OTMsIDB4NDAsIAorICAgIDB4MTIsIDB4NzUsIDB4MzEsIDB4YjgsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YzIsIDB4MjUsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIAorICAgIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIDB4N2UsIDB4MjQsIDB4ODYsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIAorICAgIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIDB4NWQsIDB4NDAsIDB4N2QsIDB4MjEsIDB4ZGEsIDB4MTksIAorICAgIDB4NWUsIDB4YjAsIDB4MDEsIDB4N2UsIDB4YTAsIDB4OTAsIDB4MTIsIDB4NjIsIDB4OTMsIDB4NDAsIDB4MTIsIDB4NzUsIDB4MzEsIDB4YjgsIDB4MTIsIDB4N2MsIAorICAgIDB4MTUsIDB4YzIsIDB4MjYsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIDB4N2UsIDB4MjQsIAorICAgIDB4ODcsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MGIsIDB4Y2EsIAorICAgIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIDB4NjAsIDB4OTgsIDB4N2QsIDB4MjEsIDB4ZGEsIDB4MTksIDB4NWUsIDB4YjAsIDB4MDEsIDB4N2UsIDB4YTAsIDB4OTAsIAorICAgIDB4MTIsIDB4NjIsIDB4OTMsIDB4NDAsIDB4MTIsIDB4NzUsIDB4MzEsIDB4YjgsIDB4MTIsIDB4N2MsIDB4MTUsIDB4YzIsIDB4MjcsIDB4YzAsIDB4ZjEsIDB4NzUsIAorICAgIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIDB4YzIsIDB4YWYsIDB4ZTUsIDB4MzMsIDB4NjAsIDB4MTQsIDB4N2UsIDB4MjAsIAorICAgIDB4MDAsIDB4MTMsIDB4NTAsIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4MzcsIDB4NDUsIDB4ZGEsIDB4YjgsIDB4YTUsIDB4MGEsIDB4YmUsIDB4MjEsIDB4MmYsIAorICAgIDB4NzgsIDB4ZWYsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4N2MsIDB4YjIsIDB4MjMsIDB4MGEsIDB4MmIsIDB4NDksIDB4MjIsIDB4MzcsIDB4NTAsIDB4ODksIDB4MjQsIAorICAgIDB4MzcsIDB4NjAsIDB4MzcsIDB4N2YsIDB4MzcsIDB4OWUsIDB4MzcsIDB4YmQsIDB4MzcsIDB4ZGMsIDB4MzcsIDB4ZmIsIDB4MzgsIDB4MWEsIDB4MzgsIDB4MzksIAorICAgIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIDB4NDgsIDB4MWIsIDB4ZGEsIDB4MTksIDB4MTAsIDB4MDQsIDB4MDIsIAorICAgIDB4ODAsIDB4MGMsIDB4ZDIsIDB4MDEsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIDB4N2UsIAorICAgIDB4MjQsIDB4ODEsIDB4MDAsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIDB4NGIsIDB4NzMsIDB4ZGEsIDB4MTksIDB4MTAsIDB4MDQsIDB4MDIsIDB4ODAsIAorICAgIDB4MGMsIDB4ZDIsIDB4MDEsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIDB4N2UsIDB4MjQsIAorICAgIDB4ODIsIDB4MDAsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIDB4NGUsIDB4Y2IsIDB4ZGEsIDB4MTksIDB4MTAsIDB4MDQsIDB4MDIsIDB4ODAsIDB4MGMsIAorICAgIDB4ZDIsIDB4MDEsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIDB4N2UsIDB4MjQsIDB4ODMsIAorICAgIDB4MDAsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIDB4NTIsIDB4MjMsIDB4ZGEsIDB4MTksIDB4MTAsIDB4MDQsIDB4MDIsIDB4ODAsIDB4MGMsIDB4ZDIsIAorICAgIDB4MDEsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIDB4N2UsIDB4MjQsIDB4ODQsIDB4MDAsIAorICAgIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIDB4NTUsIDB4N2IsIDB4ZGEsIDB4MTksIDB4MTAsIDB4MDQsIDB4MDIsIDB4ODAsIDB4MGMsIDB4ZDIsIDB4MDEsIAorICAgIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIDB4N2UsIDB4MjQsIDB4ODUsIDB4MDAsIDB4Y2EsIAorICAgIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIDB4NTgsIDB4ZDMsIDB4ZGEsIDB4MTksIDB4MTAsIDB4MDQsIDB4MDIsIDB4ODAsIDB4MGMsIDB4ZDIsIDB4MDEsIDB4YzAsIAorICAgIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIDB4N2UsIDB4MjQsIDB4ODYsIDB4MDAsIDB4Y2EsIDB4MTksIAorICAgIDB4N2QsIDB4MTIsIDB4MTIsIDB4NWMsIDB4MmIsIDB4ZGEsIDB4MTksIDB4MTAsIDB4MDQsIDB4MDIsIDB4ODAsIDB4MGMsIDB4ZDIsIDB4MDEsIDB4YzAsIDB4ZjEsIAorICAgIDB4NzUsIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIDB4N2UsIDB4MjQsIDB4ODcsIDB4MDAsIDB4Y2EsIDB4MTksIDB4N2QsIAorICAgIDB4MTIsIDB4MTIsIDB4NWYsIDB4ODMsIDB4ZGEsIDB4MTksIDB4MTAsIDB4MDQsIDB4MDIsIDB4ODAsIDB4MGMsIDB4ZDIsIDB4MDEsIDB4YzAsIDB4ZjEsIDB4NzUsIAorICAgIDB4ZjEsIDB4MDEsIDB4MTIsIDB4NmYsIDB4ZDksIDB4ZDAsIDB4ZjEsIDB4MjIsIDB4YzIsIDB4YWYsIDB4YzAsIDB4ZjEsIDB4NzUsIDB4ZjEsIDB4MDEsIDB4YTksIAorICAgIDB4MzIsIDB4ZjIsIDB4MWEsIDB4N2UsIDB4MDcsIDB4MDEsIDB4ZTEsIDB4YmUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MTAsIDB4ZTUsIDB4ZjUsIDB4MzMsIAorICAgIDB4ODIsIDB4ZTcsIDB4NDAsIDB4MDksIDB4ODUsIDB4MzEsIDB4MzEsIDB4MTIsIDB4N2MsIDB4MTUsIDB4NzUsIDB4ZjYsIDB4MDAsIDB4ZDAsIDB4ZjEsIDB4ZDIsIAorICAgIDB4YWYsIDB4MjIsIAorCisvLyBTZWdtZW50ICMxNSwgU3RhcnQgQWRkcmVzcyAwMGZmNDAwMCwgTGVuZ3RoIDE1MzgxCisweGZmLDB4MDAsMHgwMCwweDQwLDB4MTUsMHgzYywKKyAgICAweDdlLCAweDA0LCAweDAwLCAweDAxLCAweDdlLCAweDE0LCAweDdmLCAweGY4LCAweDdlLCAweDI0LCAweDAwLCAweGZlLCAweDdkLCAweDMxLCAweDBiLCAweDFhLCAKKyAgICAweDUwLCAweDFiLCAweDBhLCAweDUwLCAweDdlLCAweDE0LCAweDQwLCAweDFiLCAweDAyLCAweDQwLCAweDZhLCAweDdlLCAweGY4LCAweDAwLCAweDZmLCAweGQyLCAKKyAgICAweDA0LCAweGMyLCAweDk0LCAweGQyLCAweDk1LCAweDdlLCAweGY0LCAweDQwLCAweDJjLCAweDAyLCAweDQwLCAweDdjLCAweDEyLCAweDdkLCAweDMwLCAweGY1LCAKKyAgICAweDJmLCAweDdhLCAweGExLCAweDMwLCAweDdhLCAweDExLCAweDZlLCAweDEyLCAweDc1LCAweGNhLCAweDEyLCAweDQwLCAweGRjLCAweDdlLCAweGIzLCAweDNmLCAKKyAgICAweGYxLCAweDYwLCAweDAzLCAweDEyLCAweDQzLCAweGQ0LCAweDc1LCAweGYxLCAweDAwLCAweDEyLCAweDc2LCAweDZmLCAweGQyLCAweGFmLCAweDAyLCAweDMwLCAKKyAgICAweDAwLCAweDdlLCAweDA0LCAweDAwLCAweGZmLCAweDdlLCAweDE4LCAweDQwLCAweDVmLCAweDdhLCAweDFjLCAweDAwLCAweDAxLCAweDg5LCAweDE4LCAweGE5LCAKKyAgICAweDI1LCAweDg3LCAweDAzLCAweGE5LCAweGQ1LCAweDg3LCAweGQyLCAweDkzLCAweDg5LCAweDA4LCAweDdlLCAweDA0LCAweDAwLCAweGZmLCAweDdlLCAweDE4LCAKKyAgICAweDQwLCAweDc4LCAweDdhLCAweDFjLCAweDAwLCAweDAxLCAweDg5LCAweDE4LCAweGMyLCAweDkzLCAweDg5LCAweDA4LCAweDdlLCAweDA4LCAweDAwLCAweDIwLCAKKyAgICAweDdlLCAweDQ0LCAweDA0LCAweDAwLCAweDdlLCAweDQwLCAweDAwLCAweDdlLCAweGU0LCAweDQwLCAweDhlLCAweDAyLCAweDdjLCAweDMwLCAweDdlLCAweDA4LCAKKyAgICAweDAxLCAweDZmLCAweDdlLCAweDQ0LCAweDI4LCAweDdjLCAweDdlLCAweDQwLCAweDAwLCAweDdlLCAweGU0LCAweDQwLCAweGEwLCAweDAyLCAweDdjLCAweDMwLCAKKyAgICAweDdlLCAweDA4LCAweDAwLCAweDZmLCAweDdlLCAweDQ0LCAweDAxLCAweDAwLCAweDdlLCAweDQwLCAweDUzLCAweDdlLCAweGU0LCAweDQwLCAweGIyLCAweDAyLCAKKyAgICAweDdjLCAweDMwLCAweDc1LCAweDZkLCAweDIwLCAweDc1LCAweDZjLCAweDMwLCAweDdlLCAweDA0LCAweDAwLCAweDA4LCAweDc1LCAweDZhLCAweDU4LCAweDc1LCAKKyAgICAweDZiLCAweDA4LCAweDc1LCAweDY3LCAweDA4LCAweDc1LCAweDY5LCAweDAxLCAweDc1LCAweDg5LCAweDAxLCAweDc1LCAweDhhLCAweDAxLCAweDc1LCAweDhjLCAKKyAgICAweDAwLCAweGQyLCAweDhjLCAweDdlLCAweDA0LCAweDAwLCAweDAyLCAweDdhLCAweDA1LCAweDU4LCAweDg5LCAweGY0LCAweDc1LCAweGI3LCAweDdmLCAweDc1LCAKKyAgICAweGI4LCAweDdmLCAweDc1LCAweGIzLCAweDA3LCAweDc1LCAweGIyLCAweDA3LCAweGQyLCAweGE5LCAweDIyLCAweGQyLCAweDkyLCAweGU0LCAweGQ1LCAweGUwLCAKKyAgICAweGZkLCAweGMyLCAweDkyLCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDJmLCAweDdlLCAweGEwLCAweDA4LCAweDE5LCAweGEyLCAweDAwLCAKKyAgICAweDEwLCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweGYyLCAweDdlLCAweDIwLCAweDAwLCAweDEyLCAweDQxLCAweDdlLCAweDBiLCAweDIwLCAKKyAgICAweGJlLCAweDIxLCAweDJmLCAweDc4LCAweGY2LCAweDIyLCAweDdlLCAweDA0LCAweDgwLCAweDAwLCAweDRjLCAweDAyLCAweDc0LCAweGJmLCAweDE5LCAweGIwLCAKKyAgICAweDAwLCAweDBjLCAweDc0LCAweDEwLCAweDE5LCAweGIwLCAweDAwLCAweDA4LCAweDc0LCAweDgwLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAweDdlLCAweDU0LCAKKyAgICAweDAwLCAweDAyLCAweDE5LCAweGEwLCAweDAwLCAweDA0LCAweDE5LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDAzLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAKKyAgICAweDc0LCAweDA3LCAweGE5LCAweDIwLCAweDMwLCAweDBiLCAweGE5LCAweDM1LCAweDMwLCAweDA1LCAweGJlLCAweDIwLCAweDAxLCAweDI4LCAweDAyLCAweDc0LCAKKyAgICAweDBmLCAweDE5LCAweGIwLCAweDAwLCAweDA0LCAweGE5LCAweDMzLCAweDMwLCAweDE4LCAweDc0LCAweGJmLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAweDc0LCAKKyAgICAweDI4LCAweGE5LCAweDIwLCAweDMwLCAweDAyLCAweDc0LCAweDIwLCAweDE5LCAweGIwLCAweDAwLCAweDA0LCAweDc0LCAweDAzLCAweDE5LCAweGIwLCAweDAwLCAKKyAgICAweDBjLCAweDc0LCAweGE3LCAweDE5LCAweGIwLCAweDAwLCAweDA4LCAweDc0LCAweDBjLCAweDE5LCAweGIwLCAweDAwLCAweDEwLCAweDIyLCAweDdlLCAweDA0LCAKKyAgICAweDgwLCAweDAwLCAweDRjLCAweDAyLCAweGU0LCAweDE5LCAweGIwLCAweDAwLCAweDA0LCAweDA5LCAweGIwLCAweDAwLCAweDEwLCAweDU0LCAweDA4LCAweDE5LCAKKyAgICAweGIwLCAweDAwLCAweDEwLCAweDc0LCAweGE3LCAweDE5LCAweGIwLCAweDAwLCAweDA4LCAweDIyLCAweDdjLCAweGIyLCAweDIzLCAweDBhLCAweDJiLCAweDQ5LCAKKyAgICAweDIyLCAweDQxLCAweGE1LCAweDg5LCAweDI0LCAweDQxLCAweGI1LCAweDQxLCAweGQ0LCAweDQxLCAweGYzLCAweDQyLCAweDEyLCAweDQyLCAweDMxLCAweDQyLCAKKyAgICAweDUwLCAweDQyLCAweDZmLCAweDQyLCAweDhlLCAweGMyLCAweDEwLCAweGMyLCAweDE4LCAweGMyLCAweDIwLCAweGMyLCAweDA4LCAweDdlLCAweDA0LCAweDA5LCAKKyAgICAweGUzLCAweDdhLCAweDA3LCAweDAxLCAweDZmLCAweDdhLCAweDA3LCAweDAxLCAweDdmLCAweDZkLCAweDAwLCAweDdhLCAweDA3LCAweDAxLCAweDhmLCAweDdhLCAKKyAgICAweDA3LCAweDAxLCAweDlmLCAweDIyLCAweGMyLCAweDExLCAweGMyLCAweDE5LCAweGMyLCAweDIxLCAweGMyLCAweDA5LCAweDdlLCAweDA0LCAweDBkLCAweGUzLCAKKyAgICAweDdhLCAweDA3LCAweDAxLCAweDcxLCAweDdhLCAweDA3LCAweDAxLCAweDgxLCAweDZkLCAweDAwLCAweDdhLCAweDA3LCAweDAxLCAweDkxLCAweDdhLCAweDA3LCAKKyAgICAweDAxLCAweGExLCAweDIyLCAweGMyLCAweDEyLCAweGMyLCAweDFhLCAweGMyLCAweDIyLCAweGMyLCAweDBhLCAweDdlLCAweDA0LCAweDExLCAweGUzLCAweDdhLCAKKyAgICAweDA3LCAweDAxLCAweDczLCAweDdhLCAweDA3LCAweDAxLCAweDgzLCAweDZkLCAweDAwLCAweDdhLCAweDA3LCAweDAxLCAweDkzLCAweDdhLCAweDA3LCAweDAxLCAKKyAgICAweGEzLCAweDIyLCAweGMyLCAweDEzLCAweGMyLCAweDFiLCAweGMyLCAweDIzLCAweGMyLCAweDBiLCAweDdlLCAweDA0LCAweDE1LCAweGUzLCAweDdhLCAweDA3LCAKKyAgICAweDAxLCAweDc1LCAweDdhLCAweDA3LCAweDAxLCAweDg1LCAweDZkLCAweDAwLCAweDdhLCAweDA3LCAweDAxLCAweDk1LCAweDdhLCAweDA3LCAweDAxLCAweGE1LCAKKyAgICAweDIyLCAweGMyLCAweDE0LCAweGMyLCAweDFjLCAweGMyLCAweDI0LCAweGMyLCAweDBjLCAweDdlLCAweDA0LCAweDE5LCAweGUzLCAweDdhLCAweDA3LCAweDAxLCAKKyAgICAweDc3LCAweDdhLCAweDA3LCAweDAxLCAweDg3LCAweDZkLCAweDAwLCAweDdhLCAweDA3LCAweDAxLCAweDk3LCAweDdhLCAweDA3LCAweDAxLCAweGE3LCAweDIyLCAKKyAgICAweGMyLCAweDE1LCAweGMyLCAweDFkLCAweGMyLCAweDI1LCAweGMyLCAweDBkLCAweDdlLCAweDA0LCAweDFkLCAweGUzLCAweDdhLCAweDA3LCAweDAxLCAweDc5LCAKKyAgICAweDdhLCAweDA3LCAweDAxLCAweDg5LCAweDZkLCAweDAwLCAweDdhLCAweDA3LCAweDAxLCAweDk5LCAweDdhLCAweDA3LCAweDAxLCAweGE5LCAweDIyLCAweGMyLCAKKyAgICAweDE2LCAweGMyLCAweDFlLCAweGMyLCAweDI2LCAweGMyLCAweDBlLCAweDdlLCAweDA0LCAweDIxLCAweGUzLCAweDdhLCAweDA3LCAweDAxLCAweDdiLCAweDdhLCAKKyAgICAweDA3LCAweDAxLCAweDhiLCAweDZkLCAweDAwLCAweDdhLCAweDA3LCAweDAxLCAweDliLCAweDdhLCAweDA3LCAweDAxLCAweGFiLCAweDIyLCAweGMyLCAweDE3LCAKKyAgICAweGMyLCAweDFmLCAweGMyLCAweDI3LCAweGMyLCAweDBmLCAweDdlLCAweDA0LCAweDI1LCAweGUzLCAweDdhLCAweDA3LCAweDAxLCAweDdkLCAweDdhLCAweDA3LCAKKyAgICAweDAxLCAweDhkLCAweDZkLCAweDAwLCAweDdhLCAweDA3LCAweDAxLCAweDlkLCAweDdhLCAweDA3LCAweDAxLCAweGFkLCAweDIyLCAweDdjLCAweGIyLCAweDIzLCAKKyAgICAweDBhLCAweDJiLCAweDQ5LCAweDIyLCAweDQyLCAweGI4LCAweDg5LCAweDI0LCAweDQyLCAweGM4LCAweDQyLCAweGU5LCAweDQzLCAweDBhLCAweDQzLCAweDJiLCAKKyAgICAweDQzLCAweDRjLCAweDQzLCAweDZkLCAweDQzLCAweDhlLCAweDQzLCAweGFmLCAweDMwLCAweDUwLCAweDA3LCAweDIwLCAweDY4LCAweDA0LCAweGMyLCAweDI4LCAKKyAgICAweDgwLCAweDE2LCAweDMwLCAweDQwLCAweDA3LCAweDIwLCAweDYwLCAweDA0LCAweGMyLCAweDI4LCAweDgwLCAweDBjLCAweDMwLCAweDQ4LCAweDA3LCAweDIwLCAKKyAgICAweDU4LCAweDA0LCAweGMyLCAweDI4LCAweDgwLCAweDAyLCAweGQyLCAweDI4LCAweDIyLCAweDMwLCAweDUxLCAweDA3LCAweDIwLCAweDY5LCAweDA0LCAweGMyLCAKKyAgICAweDI5LCAweDgwLCAweDE2LCAweDMwLCAweDQxLCAweDA3LCAweDIwLCAweDYxLCAweDA0LCAweGMyLCAweDI5LCAweDgwLCAweDBjLCAweDMwLCAweDQ5LCAweDA3LCAKKyAgICAweDIwLCAweDU5LCAweDA0LCAweGMyLCAweDI5LCAweDgwLCAweDAyLCAweGQyLCAweDI5LCAweDIyLCAweDMwLCAweDUyLCAweDA3LCAweDIwLCAweDZhLCAweDA0LCAKKyAgICAweGMyLCAweDJhLCAweDgwLCAweDE2LCAweDMwLCAweDQyLCAweDA3LCAweDIwLCAweDYyLCAweDA0LCAweGMyLCAweDJhLCAweDgwLCAweDBjLCAweDMwLCAweDRhLCAKKyAgICAweDA3LCAweDIwLCAweDVhLCAweDA0LCAweGMyLCAweDJhLCAweDgwLCAweDAyLCAweGQyLCAweDJhLCAweDIyLCAweDMwLCAweDUzLCAweDA3LCAweDIwLCAweDZiLCAKKyAgICAweDA0LCAweGMyLCAweDJiLCAweDgwLCAweDE2LCAweDMwLCAweDQzLCAweDA3LCAweDIwLCAweDYzLCAweDA0LCAweGMyLCAweDJiLCAweDgwLCAweDBjLCAweDMwLCAKKyAgICAweDRiLCAweDA3LCAweDIwLCAweDViLCAweDA0LCAweGMyLCAweDJiLCAweDgwLCAweDAyLCAweGQyLCAweDJiLCAweDIyLCAweDMwLCAweDU0LCAweDA3LCAweDIwLCAKKyAgICAweDZjLCAweDA0LCAweGMyLCAweDJjLCAweDgwLCAweDE2LCAweDMwLCAweDQ0LCAweDA3LCAweDIwLCAweDY0LCAweDA0LCAweGMyLCAweDJjLCAweDgwLCAweDBjLCAKKyAgICAweDMwLCAweDRjLCAweDA3LCAweDIwLCAweDVjLCAweDA0LCAweGMyLCAweDJjLCAweDgwLCAweDAyLCAweGQyLCAweDJjLCAweDIyLCAweDMwLCAweDU1LCAweDA3LCAKKyAgICAweDIwLCAweDZkLCAweDA0LCAweGMyLCAweDJkLCAweDgwLCAweDE2LCAweDMwLCAweDQ1LCAweDA3LCAweDIwLCAweDY1LCAweDA0LCAweGMyLCAweDJkLCAweDgwLCAKKyAgICAweDBjLCAweDMwLCAweDRkLCAweDA3LCAweDIwLCAweDVkLCAweDA0LCAweGMyLCAweDJkLCAweDgwLCAweDAyLCAweGQyLCAweDJkLCAweDIyLCAweDMwLCAweDU2LCAKKyAgICAweDA3LCAweDIwLCAweDZlLCAweDA0LCAweGMyLCAweDJlLCAweDgwLCAweDE2LCAweDMwLCAweDQ2LCAweDA3LCAweDIwLCAweDY2LCAweDA0LCAweGMyLCAweDJlLCAKKyAgICAweDgwLCAweDBjLCAweDMwLCAweDRlLCAweDA3LCAweDIwLCAweDVlLCAweDA0LCAweGMyLCAweDJlLCAweDgwLCAweDAyLCAweGQyLCAweDJlLCAweDIyLCAweDMwLCAKKyAgICAweDU3LCAweDA3LCAweDIwLCAweDZmLCAweDA0LCAweGMyLCAweDJmLCAweDgwLCAweDE2LCAweDMwLCAweDQ3LCAweDA3LCAweDIwLCAweDY3LCAweDA0LCAweGMyLCAKKyAgICAweDJmLCAweDgwLCAweDBjLCAweDMwLCAweDRmLCAweDA3LCAweDIwLCAweDVmLCAweDA0LCAweGMyLCAweDJmLCAweDgwLCAweDAyLCAweGQyLCAweDJmLCAweDIyLCAKKyAgICAweDQ0LCAweDM4LCAweDQzLCAweGU1LCAweGJlLCAweGIwLCAweDAyLCAweDQwLCAweDAxLCAweDIyLCAweDIzLCAweDBhLCAweDViLCAweDQ5LCAweDU1LCAweDQzLCAKKyAgICAweGQwLCAweDk5LCAweDU0LCAweGQzLCAweDIyLCAweGE5LCAweGM1LCAweDg3LCAweDEyLCAweDQ0LCAweDQzLCAweDdlLCAweDA0LCAweDA1LCAweGUzLCAweDdhLCAKKyAgICAweDA3LCAweDAxLCAweGQ3LCAweDdhLCAweDA3LCAweDAxLCAweGQ5LCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDdhLCAweDA3LCAweDAxLCAweGRkLCAweDdhLCAKKyAgICAweDA3LCAweDAxLCAweGRmLCAweDdlLCAweDA0LCAweDc0LCAweGFkLCAweDdhLCAweDA1LCAweDYxLCAweDc1LCAweGYxLCAweDAxLCAweDc1LCAweGUxLCAweDFmLCAKKyAgICAweDc1LCAweGU0LCAweDA0LCAweDc1LCAweGY0LCAweDA0LCAweDc1LCAweGYxLCAweDAyLCAweDc1LCAweGUxLCAweDAzLCAweDc1LCAweGU0LCAweDA0LCAweDc1LCAKKyAgICAweGY0LCAweDA0LCAweDQzLCAweGEyLCAweDFjLCAweDEyLCAweDQwLCAweGViLCAweDdlLCAweDIwLCAweDAwLCAweDEyLCAweDQxLCAweDlhLCAweDBiLCAweDIwLCAKKyAgICAweGJlLCAweDIxLCAweDJmLCAweDc4LCAweGY2LCAweGQyLCAweGE4LCAweDIyLCAweGE5LCAweGQ1LCAweDg3LCAweDEyLCAweDQ0LCAweDQzLCAweGQyLCAweDkyLCAKKyAgICAweGMyLCAweGE4LCAweDIyLCAweDc1LCAweGEzLCAweDAwLCAweDUzLCAweGEyLCAweDAzLCAweDc1LCAweGMxLCAweDAwLCAweDUzLCAweGMwLCAweDAzLCAweDdlLCAKKyAgICAweDAwLCAweDA1LCAweDdhLCAweDAxLCAweGYxLCAweDQzLCAweGY0LCAweDgwLCAweDQzLCAweGU0LCAweDgwLCAweGU1LCAweGYyLCAweDU0LCAweDdmLCAweDQ0LCAKKyAgICAweDA4LCAweGY1LCAweGYyLCAweGU1LCAweGUyLCAweDU0LCAweDdmLCAweDQ0LCAweDA4LCAweGY1LCAweGUyLCAweDc1LCAweGUxLCAweDEwLCAweGE1LCAweGQ4LCAKKyAgICAweGUxLCAweDIyLCAweGNhLCAweDA5LCAweDEyLCAweDMwLCAweDIwLCAweDEwLCAweDAxLCAweDEyLCAweGQ1LCAweDY3LCAweDFlLCAweDYzLCAweDY5LCAweDAxLCAKKyAgICAweDdlLCAweDAwLCAweDZhLCAweDJlLCAweDAxLCAweDY5LCAweGE1LCAweGU2LCAweGY1LCAweDY3LCAweDgwLCAweDEyLCAweDIwLCAweDAyLCAweDFlLCAweDc1LCAKKyAgICAweDY5LCAweDAwLCAweDg1LCAweDZhLCAweDY3LCAweGQyLCAweDAyLCAweDc0LCAweDAwLCAweDgwLCAweDBkLCAweDMwLCAweDAyLCAweDBmLCAweGMyLCAweDAyLCAKKyAgICAweDdlLCAweDAwLCAweDZjLCAweDJlLCAweDAxLCAweDY5LCAweGE1LCAweGU2LCAweDUzLCAweDkwLCAweGNmLCAweDQyLCAweDkwLCAweGRhLCAweDA5LCAweDMyLCAKKyAgICAweGMwLCAweGQwLCAweGMwLCAweGQxLCAweGMwLCAweGUwLCAweGMwLCAweGYwLCAweGNhLCAweDBiLCAweGNhLCAweDFiLCAweGNhLCAweDJiLCAweGQyLCAweDAxLCAKKyAgICAweDc1LCAweDMxLCAweDg5LCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweDE0LCAweDgwLCAweDAwLCAweDA5LCAweGIxLCAweDAwLCAweDA4LCAweDIwLCAweGUwLCAKKyAgICAweDAzLCAweDAyLCAweDQ1LCAweDRmLCAweDIwLCAweDc4LCAweDVhLCAweGE1LCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDA4LCAweDIwLCAweGUwLCAweDAzLCAKKyAgICAweDAyLCAweDQ1LCAweDY3LCAweDIwLCAweDc5LCAweDRiLCAweGE1LCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDA4LCAweDIwLCAweGUwLCAweDAzLCAweDAyLCAKKyAgICAweDQ1LCAweDdmLCAweGE1LCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDA4LCAweDIwLCAweGUwLCAweDAzLCAweDAyLCAweDQ1LCAweDk3LCAweDIwLCAweDdhLCAKKyAgICAweDMwLCAweGE1LCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDA4LCAweDIwLCAweGUwLCAweDAzLCAweDAyLCAweDQ1LCAweGFmLCAweGE1LCAweDBhLCAweDA5LCAKKyAgICAweGIxLCAweDAwLCAweDA4LCAweDIwLCAweGUwLCAweDAzLCAweDAyLCAweDQ1LCAweGM3LCAweGE1LCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDA4LCAweDIwLCAKKyAgICAweGUwLCAweDAzLCAweDAyLCAweDQ1LCAweGRmLCAweGE1LCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDA4LCAweDIwLCAweGUwLCAweDAzLCAweDAyLCAweDQ1LCAKKyAgICAweGY3LCAweDMwLCAweDA0LCAweDBjLCAweGMyLCAweDA0LCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAKKyAgICAweGRhLCAweDJiLCAweGRhLCAweDFiLCAweGRhLCAweDBiLCAweGQwLCAweGYwLCAweGQwLCAweGUwLCAweGQwLCAweGQxLCAweGQwLCAweGQwLCAweDMyLCAweDc1LCAKKyAgICAweDMxLCAweDgwLCAweDEyLCAweDdjLCAweDE1LCAweDU0LCAweDNlLCAweDBhLCAweDViLCAweDdlLCAweDQ0LCAweDAwLCAweGZmLCAweDY5LCAweDUyLCAweDYzLCAKKyAgICAweDJiLCAweGNhLCAweDA2LCAweGM2LCAweDQ0LCAweDg5LCAweDU0LCAweDc1LCAweDMxLCAweDgxLCAweDEyLCAweDdjLCAweDE1LCAweDU0LCAweDNlLCAweDBhLCAKKyAgICAweDViLCAweDdlLCAweDQ0LCAweDAwLCAweGZmLCAweDY5LCAweDUyLCAweDYzLCAweDZiLCAweGNhLCAweDA2LCAweGM2LCAweDQ0LCAweDg5LCAweDU0LCAweDc1LCAKKyAgICAweDMxLCAweDgyLCAweDEyLCAweDdjLCAweDE1LCAweDU0LCAweDNlLCAweDBhLCAweDViLCAweDdlLCAweDQ0LCAweDAwLCAweGZmLCAweDY5LCAweDUyLCAweDYzLCAKKyAgICAweGFiLCAweGNhLCAweDA2LCAweGM2LCAweDQ0LCAweDg5LCAweDU0LCAweDc1LCAweDMxLCAweDgzLCAweDEyLCAweDdjLCAweDE1LCAweDU0LCAweDNlLCAweDBhLCAKKyAgICAweDViLCAweDdlLCAweDQ0LCAweDAwLCAweGZmLCAweDY5LCAweDUyLCAweDYzLCAweGViLCAweGNhLCAweDA2LCAweGM2LCAweDQ0LCAweDg5LCAweDU0LCAweDc1LCAKKyAgICAweDMxLCAweDg0LCAweDEyLCAweDdjLCAweDE1LCAweDU0LCAweDNlLCAweDBhLCAweDViLCAweDdlLCAweDQ0LCAweDAwLCAweGZmLCAweDY5LCAweDUyLCAweDY0LCAKKyAgICAweDJiLCAweGNhLCAweDA2LCAweGM2LCAweDQ0LCAweDg5LCAweDU0LCAweDc1LCAweDMxLCAweDg1LCAweDEyLCAweDdjLCAweDE1LCAweDU0LCAweDNlLCAweDBhLCAKKyAgICAweDViLCAweDdlLCAweDQ0LCAweDAwLCAweGZmLCAweDY5LCAweDUyLCAweDY0LCAweDZiLCAweGNhLCAweDA2LCAweGM2LCAweDQ0LCAweDg5LCAweDU0LCAweDc1LCAKKyAgICAweDMxLCAweDg2LCAweDEyLCAweDdjLCAweDE1LCAweDU0LCAweDNlLCAweDBhLCAweDViLCAweDdlLCAweDQ0LCAweDAwLCAweGZmLCAweDY5LCAweDUyLCAweDY0LCAKKyAgICAweGFiLCAweGNhLCAweDA2LCAweGM2LCAweDQ0LCAweDg5LCAweDU0LCAweDc1LCAweDMxLCAweDg3LCAweDEyLCAweDdjLCAweDE1LCAweDU0LCAweDNlLCAweDBhLCAKKyAgICAweDViLCAweDdlLCAweDQ0LCAweDAwLCAweGZmLCAweDY5LCAweDUyLCAweDY0LCAweGViLCAweGNhLCAweDA2LCAweGM2LCAweDQ0LCAweDg5LCAweDU0LCAweDEwLCAKKyAgICAweDA4LCAweDAxLCAweDIyLCAweDIwLCAweDI4LCAweDAzLCAweGQyLCAweDA4LCAweDIyLCAweDc1LCAweDMxLCAweGEwLCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAKKyAgICAweDE0LCAweDgwLCAweDAwLCAweDgwLCAweDA2LCAweDIwLCAweDI4LCAweDAzLCAweGQyLCAweDA4LCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAKKyAgICAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDAzLCAweDEyLCAweDQ5LCAweDMwLCAweDIwLCAweGU2LCAweDAzLCAweGQyLCAweDA4LCAKKyAgICAweDIyLCAweDMwLCAweDMwLCAweDQ5LCAweGQyLCAweDcwLCAweDdlLCAweDM3LCAweDAxLCAweDhmLCAweDdlLCAweDI3LCAweDAxLCAweGFmLCAweDlkLCAweDMyLCAKKyAgICAweDQwLCAweDMxLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDQ4LCAweDdhLCAweDA1LCAweDQ4LCAweDdhLCAweDM3LCAweDAxLCAweDhmLCAweDdlLCAweDM3LCAKKyAgICAweDAxLCAweDZmLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDBkLCAweGUyLCAweDM4LCAweDY4LCAweDdhLCAweDQ3LCAweDAxLCAweDZmLCAKKyAgICAweDc1LCAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDEyLCAweDY1LCAweDJiLCAweDEwLCAKKyAgICAweDcwLCAweGM0LCAweDIyLCAweGMyLCAweDcwLCAweDJkLCAweDIzLCAweDY4LCAweDc4LCAweDZkLCAweDMzLCAweDgwLCAweDFhLCAweDdlLCAweDI3LCAweDAxLCAKKyAgICAweDhmLCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDY4LCAweDZhLCAweGJlLCAweDI3LCAweDAxLCAweGFmLCAweDI4LCAweDA0LCAweDdlLCAweDI3LCAweDAxLCAKKyAgICAweGFmLCAweDdlLCAweDM3LCAweDAxLCAweDhmLCAweDlkLCAweDMyLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDQ4LCAweDdhLCAweDA1LCAweDQ4LCAweDdhLCAKKyAgICAweDM3LCAweDAxLCAweDhmLCAweDdlLCAweDM3LCAweDAxLCAweDZmLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDBkLCAweGUyLCAweDM4LCAKKyAgICAweDEzLCAweDdhLCAweDQ3LCAweDAxLCAweDZmLCAweDc1LCAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAKKyAgICAweDE1LCAweDAyLCAweDY1LCAweDJiLCAweDc1LCAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAKKyAgICAweDllLCAweDQ0LCAweDBkLCAweGUzLCAweDlkLCAweDI0LCAweDEyLCAweDY1LCAweDJiLCAweDdlLCAweDM0LCAweDA5LCAweGUzLCAweDdkLCAweDI0LCAweDJkLCAKKyAgICAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweDZmLCAweDEyLCAweDY1LCAweDJiLCAweGJlLCAweDI1LCAweDIwLCAweDc4LCAweDAzLCAweDAyLCAweDQ2LCAweDdmLCAKKyAgICAweDIyLCAweGQyLCAweDA4LCAweDdlLCAweDA0LCAweDA5LCAweGUzLCAweDdhLCAweDA3LCAweDAxLCAweDZmLCAweDdhLCAweDA3LCAweDAxLCAweDdmLCAweDc1LCAKKyAgICAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDc1LCAweDMxLCAweDAwLCAweDEyLCAweDdjLCAweDE1LCAweDIyLCAweDc1LCAweDMxLCAweDkyLCAweDEyLCAKKyAgICAweDdjLCAweDE1LCAweGQyLCAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDgyLCAweGRhLCAweGI4LCAweDc4LCAweDcwLCAKKyAgICAweDdlLCAweDM3LCAweDAxLCAweGUxLCAweDdlLCAweDI3LCAweDAxLCAweGJmLCAweDJlLCAweDI0LCAweDAwLCAweDAyLCAweDJkLCAweDMyLCAweGJlLCAweDM0LCAKKyAgICAweDA0LCAweDAwLCAweDM4LCAweDNjLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDQ2LCAweDdhLCAweDA1LCAweDQ2LCAweDdhLCAweDM3LCAweDAxLCAweGUxLCAKKyAgICAweDdlLCAweDM3LCAweDAxLCAweGRmLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDA1LCAweGUyLCAweDM4LCAweDQ0LCAweDdhLCAweDQ3LCAKKyAgICAweDAxLCAweGRmLCAweDdlLCAweDI0LCAweDAwLCAweDAwLCAweDJlLCAweDI3LCAweDAxLCAweGJmLCAweDFiLCAweDM4LCAweDIwLCAweDBiLCAweDM1LCAweDdhLCAKKyAgICAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweGJlLCAweDUwLCAweDM4LCAweDc4LCAweDAzLCAweDAyLCAweDY2LCAweDE2LCAweDAyLCAweDY1LCAweGZiLCAKKyAgICAweDc1LCAweDMxLCAweDk5LCAweDEyLCAweDdjLCAweDE1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAKKyAgICAweDMwLCAweDM4LCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDEwLCAweDIyLCAKKyAgICAweDgwLCAweDdkLCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDllLCAweDQ0LCAweDA1LCAweGUzLCAweDlkLCAweDI0LCAweDdlLCAweDY0LCAKKyAgICAweDAwLCAweDAwLCAweDJlLCAweDY3LCAweDAxLCAweGJmLCAweDllLCAweDI0LCAweDAwLCAweDAyLCAweDQwLCAweDE3LCAweDFiLCAweDM4LCAweDYwLCAweDBiLCAKKyAgICAweDM1LCAweDEyLCAweDY1LCAweGZiLCAweDdlLCAweDM0LCAweDAxLCAweGUzLCAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGRmLCAKKyAgICAweDAyLCAweDY1LCAweGZiLCAweDdhLCAweDM5LCAweGMwLCAweDdlLCAweDM0LCAweDAxLCAweGUzLCAweDdhLCAweDM5LCAweGQwLCAweDBiLCAweDM0LCAweDFiLCAKKyAgICAweDQ0LCAweDgwLCAweGU1LCAweDlkLCAweDMyLCAweDdjLCAweGI2LCAweDU0LCAweDBmLCAweDIzLCAweDIzLCAweDIzLCAweDQ0LCAweDAwLCAweDdhLCAweDY5LCAKKyAgICAweGIwLCAweDdhLCAweDc5LCAweDcwLCAweDBiLCAweDM1LCAweDc1LCAweDMxLCAweDkzLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDcxLCAweDMxLCAweDEyLCAKKyAgICAweDdjLCAweDE1LCAweGJkLCAweDA0LCAweDY4LCAweDI5LCAweDdhLCAweDA3LCAweDAxLCAweGRmLCAweDdlLCAweDQ3LCAweDAxLCAweGUxLCAweDJkLCAweDQzLCAKKyAgICAweDdhLCAweDQ3LCAweDAxLCAweGUxLCAweDJlLCAweDM1LCAweDQ2LCAweDdhLCAweDM1LCAweDQ2LCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAKKyAgICAweGUwLCAweDEzLCAweDIyLCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDgwLCAweDJhLCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDgwLCAweDJjLCAweDdlLCAKKyAgICAweDA0LCAweDAxLCAweGUzLCAweDgwLCAweGQxLCAweGQyLCAweDA0LCAweDdlLCAweDA3LCAweDAxLCAweGUxLCAweDdlLCAweDI0LCAweDAzLCAweGZlLCAweDlkLCAKKyAgICAweDIwLCAweDI4LCAweDQwLCAweDdlLCAweDA3LCAweDAxLCAweGRmLCAweDdlLCAweDQ0LCAweDA1LCAweGUzLCAweDdkLCAweDYwLCAweDBiLCAweDA0LCAweGJkLCAKKyAgICAweDA0LCAweDY4LCAweGQwLCAweDdkLCAweDcwLCAweDBiLCAweDA0LCAweGJkLCAweDA0LCAweDY4LCAweGNlLCAweDdkLCAweDU0LCAweDlkLCAweDUwLCAweGJkLCAKKyAgICAweDI1LCAweDQwLCAweDAyLCAweDdkLCAweDI1LCAweDdkLCAweDMyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDFmLCAweGI0LCAKKyAgICAweDAxLCAweDMxLCAweGRhLCAweGI4LCAweDdlLCAweDE5LCAweGIwLCAweDdhLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDFiLCAweDI0LCAweDc4LCAweGU3LCAKKyAgICAweDAyLCAweDQ3LCAweGUzLCAweDc1LCAweDMxLCAweDk5LCAweDEyLCAweDdjLCAweDE1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAKKyAgICAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDM4LCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAKKyAgICAweGQyLCAweDEwLCAweDIyLCAweGRhLCAweGI4LCAweDMwLCAweGUwLCAweGQ4LCAweGJkLCAweDMyLCAweDY4LCAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDQ3LCAKKyAgICAweGUzLCAweGRhLCAweGI4LCAweDAyLCAweDQ5LCAweDMwLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDg4LCAweDc1LCAweDMxLCAweDkwLCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweGY1LCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweGE1LCAweGZjLCAweDVlLCAweGIwLCAweGYwLCAweGE1LCAweGZkLCAweDA5LCAKKyAgICAweGIxLCAweDAwLCAweDE4LCAweDRjLCAweDRiLCAweDVlLCAweGIwLCAweGYwLCAweGJjLCAweGI1LCAweDc4LCAweGYxLCAweDVlLCAweDQwLCAweDBmLCAweDRjLCAKKyAgICAweDU0LCAweDdjLCAweGI1LCAweDVlLCAweDUwLCAweDBiLCAweDY4LCAweDJhLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDEwLCAweDY4LCAweDA0LCAweGQyLCAKKyAgICAweDY4LCAweDgwLCAweDAyLCAweGMyLCAweDY4LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDYwLCAweDgwLCAweDAyLCAKKyAgICAweGMyLCAweDYwLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDU4LCAweDgwLCAweDAyLCAweGMyLCAweDU4LCAweDEyLCAKKyAgICAweDQyLCAweGM4LCAweDAyLCAweDYyLCAweDkzLCAweDc1LCAweDMxLCAweDkxLCAweDEyLCAweDdjLCAweDE1LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDdhLCAKKyAgICAweGIxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDIwLCAweGUwLCAweDA4LCAweGQyLCAweDA0LCAweDdlLCAweGEwLCAweDgwLCAweDAyLCAweDYyLCAweDkzLCAKKyAgICAweGQyLCAweDA0LCAweDMwLCAweGUxLCAweDA2LCAweDdlLCAweGEwLCAweDgwLCAweDEyLCAweDYyLCAweDkzLCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFjLCAKKyAgICAweGRhLCAweGI4LCAweDY4LCAweDEyLCAweDdlLCAweGEwLCAweGMwLCAweDA5LCAweDYxLCAweDAwLCAweDAwLCAweDEyLCAweDYyLCAweGI2LCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweGRiLCAweDIyLCAweDAyLCAweDQ4LCAweDM1LCAweDc1LCAweDMxLCAweDk1LCAweDEyLCAweDdjLCAweDE1LCAweDIyLCAKKyAgICAweDc1LCAweDMxLCAweDk2LCAweDEyLCAweDdjLCAweDE1LCAweDIyLCAweDEwLCAweDA5LCAweDAxLCAweDIyLCAweDIwLCAweDI5LCAweDAzLCAweGQyLCAweDA5LCAKKyAgICAweDIyLCAweDc1LCAweDMxLCAweGExLCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweDE0LCAweDgxLCAweDAwLCAweDgwLCAweDA2LCAweDIwLCAweDI5LCAweDAzLCAKKyAgICAweGQyLCAweDA5LCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDAzLCAKKyAgICAweDEyLCAweDRjLCAweDg4LCAweDIwLCAweGU2LCAweDAzLCAweGQyLCAweDA5LCAweDIyLCAweDMwLCAweDMxLCAweDQ5LCAweGQyLCAweDcxLCAweDdlLCAweDM3LCAKKyAgICAweDAxLCAweDkxLCAweDdlLCAweDI3LCAweDAxLCAweGIxLCAweDlkLCAweDMyLCAweDQwLCAweDMxLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDRhLCAweDdhLCAKKyAgICAweDA1LCAweDRhLCAweDdhLCAweDM3LCAweDAxLCAweDkxLCAweDdlLCAweDM3LCAweDAxLCAweDcxLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAKKyAgICAweDExLCAweGUyLCAweDM4LCAweDY4LCAweDdhLCAweDQ3LCAweDAxLCAweDcxLCAweDc1LCAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDUxLCAKKyAgICAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDEyLCAweDY1LCAweDJiLCAweDEwLCAweDcxLCAweGM0LCAweDIyLCAweGMyLCAweDcxLCAweDJkLCAweDIzLCAweDY4LCAKKyAgICAweDc4LCAweDZkLCAweDMzLCAweDgwLCAweDFhLCAweDdlLCAweDI3LCAweDAxLCAweDkxLCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDY4LCAweDZhLCAweGJlLCAKKyAgICAweDI3LCAweDAxLCAweGIxLCAweDI4LCAweDA0LCAweDdlLCAweDI3LCAweDAxLCAweGIxLCAweDdlLCAweDM3LCAweDAxLCAweDkxLCAweDlkLCAweDMyLCAweDdkLCAKKyAgICAweDAyLCAweDJlLCAweDA1LCAweDRhLCAweDdhLCAweDA1LCAweDRhLCAweDdhLCAweDM3LCAweDAxLCAweDkxLCAweDdlLCAweDM3LCAweDAxLCAweDcxLCAweDdkLCAKKyAgICAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDExLCAweGUyLCAweDM4LCAweDEzLCAweDdhLCAweDQ3LCAweDAxLCAweDcxLCAweDc1LCAweDMxLCAweDk0LCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDAyLCAweDY1LCAweDJiLCAweDc1LCAweDMxLCAweDk0LCAweDEyLCAKKyAgICAweDdjLCAweDE1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDllLCAweDQ0LCAweDExLCAweGUzLCAweDlkLCAweDI0LCAweDEyLCAweDY1LCAKKyAgICAweDJiLCAweDdlLCAweDM0LCAweDBkLCAweGUzLCAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweDcxLCAweDEyLCAweDY1LCAweDJiLCAKKyAgICAweGJlLCAweDI1LCAweDIwLCAweDc4LCAweDAzLCAweDAyLCAweDQ5LCAweGQ3LCAweDIyLCAweGQyLCAweDA5LCAweDdlLCAweDA0LCAweDBkLCAweGUzLCAweDdhLCAKKyAgICAweDA3LCAweDAxLCAweDcxLCAweDdhLCAweDA3LCAweDAxLCAweDgxLCAweDc1LCAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDc1LCAweDMxLCAweDAwLCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweDIyLCAweDc1LCAweDMxLCAweDkyLCAweDEyLCAweDdjLCAweDE1LCAweGQyLCAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAKKyAgICAweGNhLCAweGI4LCAweDU0LCAweDgyLCAweGRhLCAweGI4LCAweDc4LCAweDcwLCAweDdlLCAweDM3LCAweDAxLCAweGUxLCAweDdlLCAweDI3LCAweDAxLCAweGMxLCAKKyAgICAweDJlLCAweDI0LCAweDAwLCAweDAyLCAweDJkLCAweDMyLCAweGJlLCAweDM0LCAweDA0LCAweDAwLCAweDM4LCAweDNjLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAKKyAgICAweDQ2LCAweDdhLCAweDA1LCAweDQ2LCAweDdhLCAweDM3LCAweDAxLCAweGUxLCAweDdlLCAweDM3LCAweDAxLCAweGRmLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAKKyAgICAweGJlLCAweDQ0LCAweDA1LCAweGUyLCAweDM4LCAweDQ0LCAweDdhLCAweDQ3LCAweDAxLCAweGRmLCAweDdlLCAweDI0LCAweDAxLCAweDAwLCAweDJlLCAweDI3LCAKKyAgICAweDAxLCAweGMxLCAweDFiLCAweDM4LCAweDIwLCAweDBiLCAweDM1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweGJlLCAweDUwLCAweDM4LCAKKyAgICAweDc4LCAweDAzLCAweDAyLCAweDY2LCAweDE2LCAweDAyLCAweDY1LCAweGZiLCAweDc1LCAweDMxLCAweDk5LCAweDEyLCAweDdjLCAweDE1LCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDM5LCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAKKyAgICAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDExLCAweDIyLCAweDgwLCAweDdkLCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAKKyAgICAweDllLCAweDQ0LCAweDA1LCAweGUzLCAweDlkLCAweDI0LCAweDdlLCAweDY0LCAweDAxLCAweDAwLCAweDJlLCAweDY3LCAweDAxLCAweGMxLCAweDllLCAweDI0LCAKKyAgICAweDAwLCAweDAyLCAweDQwLCAweDE3LCAweDFiLCAweDM4LCAweDYwLCAweDBiLCAweDM1LCAweDEyLCAweDY1LCAweGZiLCAweDdlLCAweDM0LCAweDAxLCAweGUzLCAKKyAgICAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGRmLCAweDAyLCAweDY1LCAweGZiLCAweDdhLCAweDM5LCAweGMwLCAweDdlLCAweDM0LCAKKyAgICAweDAxLCAweGUzLCAweDdhLCAweDM5LCAweGQwLCAweDBiLCAweDM0LCAweDFiLCAweDQ0LCAweDgwLCAweGU1LCAweDlkLCAweDMyLCAweDdjLCAweGI2LCAweDU0LCAKKyAgICAweDBmLCAweDIzLCAweDIzLCAweDIzLCAweDQ0LCAweDAxLCAweDdhLCAweDY5LCAweGIwLCAweDdhLCAweDc5LCAweDcwLCAweDBiLCAweDM1LCAweDc1LCAweDMxLCAKKyAgICAweDkzLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDcxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweGJkLCAweDA0LCAweDY4LCAweDI5LCAweDdhLCAweDA3LCAKKyAgICAweDAxLCAweGRmLCAweDdlLCAweDQ3LCAweDAxLCAweGUxLCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGUxLCAweDJlLCAweDM1LCAweDQ2LCAweDdhLCAKKyAgICAweDM1LCAweDQ2LCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweDEzLCAweDIyLCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDgwLCAKKyAgICAweDJhLCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDgwLCAweDJjLCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDgwLCAweGQxLCAweGQyLCAweDA0LCAweDdlLCAKKyAgICAweDA3LCAweDAxLCAweGUxLCAweDdlLCAweDI0LCAweDAzLCAweGZlLCAweDlkLCAweDIwLCAweDI4LCAweDQwLCAweDdlLCAweDA3LCAweDAxLCAweGRmLCAweDdlLCAKKyAgICAweDQ0LCAweDA1LCAweGUzLCAweDdkLCAweDYwLCAweDBiLCAweDA0LCAweGJkLCAweDA0LCAweDY4LCAweGQwLCAweDdkLCAweDcwLCAweDBiLCAweDA0LCAweGJkLCAKKyAgICAweDA0LCAweDY4LCAweGNlLCAweDdkLCAweDU0LCAweDlkLCAweDUwLCAweGJkLCAweDI1LCAweDQwLCAweDAyLCAweDdkLCAweDI1LCAweDdkLCAweDMyLCAweDA5LCAKKyAgICAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDFmLCAweGI0LCAweDAxLCAweDMxLCAweGRhLCAweGI4LCAweDdlLCAweDE5LCAweGIwLCAweDdhLCAKKyAgICAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDFiLCAweDI0LCAweDc4LCAweGU3LCAweDAyLCAweDRiLCAweDNiLCAweDc1LCAweDMxLCAweDk5LCAweDEyLCAweDdjLCAKKyAgICAweDE1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDM5LCAweDBhLCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDExLCAweDIyLCAweGRhLCAweGI4LCAweDMwLCAweGUwLCAweGQ4LCAKKyAgICAweGJkLCAweDMyLCAweDY4LCAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDRiLCAweDNiLCAweGRhLCAweGI4LCAweDAyLCAweDRjLCAweDg4LCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDg4LCAweDc1LCAweDMxLCAweDkwLCAweDEyLCAweDdjLCAweDE1LCAweGY1LCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAKKyAgICAweGE1LCAweGZjLCAweDVlLCAweGIwLCAweGYwLCAweGE1LCAweGZkLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweDRjLCAweDRiLCAweDVlLCAweGIwLCAweGYwLCAKKyAgICAweGJjLCAweGI1LCAweDc4LCAweGYxLCAweDVlLCAweDQwLCAweDBmLCAweDRjLCAweDU0LCAweDdjLCAweGI1LCAweDVlLCAweDUwLCAweDBiLCAweDY4LCAweDJhLCAKKyAgICAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDEwLCAweDY4LCAweDA0LCAweGQyLCAweDY5LCAweDgwLCAweDAyLCAweGMyLCAweDY5LCAweGE1LCAweGZkLCAweDVlLCAKKyAgICAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDYxLCAweDgwLCAweDAyLCAweGMyLCAweDYxLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAKKyAgICAweDA0LCAweGQyLCAweDU5LCAweDgwLCAweDAyLCAweGMyLCAweDU5LCAweDEyLCAweDQyLCAweGU5LCAweDAyLCAweDYyLCAweDkzLCAweDc1LCAweDMxLCAweDkxLCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDdhLCAweGIxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDIwLCAweGUwLCAweDA4LCAKKyAgICAweGQyLCAweDA0LCAweDdlLCAweGEwLCAweDgwLCAweDAyLCAweDYyLCAweDkzLCAweGQyLCAweDA0LCAweDMwLCAweGUxLCAweDA2LCAweDdlLCAweGEwLCAweDgwLCAKKyAgICAweDEyLCAweDYyLCAweDkzLCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFjLCAweGRhLCAweGI4LCAweDY4LCAweDEyLCAweDdlLCAweGEwLCAweGMwLCAweDA5LCAKKyAgICAweDYxLCAweDAwLCAweDAwLCAweDEyLCAweDYyLCAweGI2LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweGRiLCAweDIyLCAweDAyLCAweDRiLCAKKyAgICAweDhkLCAweDc1LCAweDMxLCAweDk1LCAweDEyLCAweDdjLCAweDE1LCAweDIyLCAweDc1LCAweDMxLCAweDk2LCAweDEyLCAweDdjLCAweDE1LCAweDIyLCAweDEwLCAKKyAgICAweDBhLCAweDAxLCAweDIyLCAweDIwLCAweDJhLCAweDAzLCAweGQyLCAweDBhLCAweDIyLCAweDc1LCAweDMxLCAweGEyLCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAKKyAgICAweDE0LCAweDgyLCAweDAwLCAweDgwLCAweDA2LCAweDIwLCAweDJhLCAweDAzLCAweGQyLCAweDBhLCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAKKyAgICAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDAzLCAweDEyLCAweDRmLCAweGUwLCAweDIwLCAweGU2LCAweDAzLCAweGQyLCAweDBhLCAKKyAgICAweDIyLCAweDMwLCAweDMyLCAweDQ5LCAweGQyLCAweDcyLCAweDdlLCAweDM3LCAweDAxLCAweDkzLCAweDdlLCAweDI3LCAweDAxLCAweGIzLCAweDlkLCAweDMyLCAKKyAgICAweDQwLCAweDMxLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDRjLCAweDdhLCAweDA1LCAweDRjLCAweDdhLCAweDM3LCAweDAxLCAweDkzLCAweDdlLCAweDM3LCAKKyAgICAweDAxLCAweDczLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDE1LCAweGUyLCAweDM4LCAweDY4LCAweDdhLCAweDQ3LCAweDAxLCAweDczLCAKKyAgICAweDc1LCAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDEyLCAweDY1LCAweDJiLCAweDEwLCAKKyAgICAweDcyLCAweGM0LCAweDIyLCAweGMyLCAweDcyLCAweDJkLCAweDIzLCAweDY4LCAweDc4LCAweDZkLCAweDMzLCAweDgwLCAweDFhLCAweDdlLCAweDI3LCAweDAxLCAKKyAgICAweDkzLCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDY4LCAweDZhLCAweGJlLCAweDI3LCAweDAxLCAweGIzLCAweDI4LCAweDA0LCAweDdlLCAweDI3LCAweDAxLCAKKyAgICAweGIzLCAweDdlLCAweDM3LCAweDAxLCAweDkzLCAweDlkLCAweDMyLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDRjLCAweDdhLCAweDA1LCAweDRjLCAweDdhLCAKKyAgICAweDM3LCAweDAxLCAweDkzLCAweDdlLCAweDM3LCAweDAxLCAweDczLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDE1LCAweGUyLCAweDM4LCAKKyAgICAweDEzLCAweDdhLCAweDQ3LCAweDAxLCAweDczLCAweDc1LCAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAKKyAgICAweDE1LCAweDAyLCAweDY1LCAweDJiLCAweDc1LCAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAKKyAgICAweDllLCAweDQ0LCAweDE1LCAweGUzLCAweDlkLCAweDI0LCAweDEyLCAweDY1LCAweDJiLCAweDdlLCAweDM0LCAweDExLCAweGUzLCAweDdkLCAweDI0LCAweDJkLCAKKyAgICAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweDczLCAweDEyLCAweDY1LCAweDJiLCAweGJlLCAweDI1LCAweDIwLCAweDc4LCAweDAzLCAweDAyLCAweDRkLCAweDJmLCAKKyAgICAweDIyLCAweGQyLCAweDBhLCAweDdlLCAweDA0LCAweDExLCAweGUzLCAweDdhLCAweDA3LCAweDAxLCAweDczLCAweDdhLCAweDA3LCAweDAxLCAweDgzLCAweDc1LCAKKyAgICAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDc1LCAweDMxLCAweDAwLCAweDEyLCAweDdjLCAweDE1LCAweDIyLCAweDc1LCAweDMxLCAweDkyLCAweDEyLCAKKyAgICAweDdjLCAweDE1LCAweGQyLCAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDgyLCAweGRhLCAweGI4LCAweDc4LCAweDcwLCAKKyAgICAweDdlLCAweDM3LCAweDAxLCAweGUxLCAweDdlLCAweDI3LCAweDAxLCAweGMzLCAweDJlLCAweDI0LCAweDAwLCAweDAyLCAweDJkLCAweDMyLCAweGJlLCAweDM0LCAKKyAgICAweDA0LCAweDAwLCAweDM4LCAweDNjLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDQ2LCAweDdhLCAweDA1LCAweDQ2LCAweDdhLCAweDM3LCAweDAxLCAweGUxLCAKKyAgICAweDdlLCAweDM3LCAweDAxLCAweGRmLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDA1LCAweGUyLCAweDM4LCAweDQ0LCAweDdhLCAweDQ3LCAKKyAgICAweDAxLCAweGRmLCAweDdlLCAweDI0LCAweDAyLCAweDAwLCAweDJlLCAweDI3LCAweDAxLCAweGMzLCAweDFiLCAweDM4LCAweDIwLCAweDBiLCAweDM1LCAweDdhLCAKKyAgICAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweGJlLCAweDUwLCAweDM4LCAweDc4LCAweDAzLCAweDAyLCAweDY2LCAweDE2LCAweDAyLCAweDY1LCAweGZiLCAKKyAgICAweDc1LCAweDMxLCAweDk5LCAweDEyLCAweDdjLCAweDE1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAKKyAgICAweDMwLCAweDNhLCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDEyLCAweDIyLCAKKyAgICAweDgwLCAweDdkLCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDllLCAweDQ0LCAweDA1LCAweGUzLCAweDlkLCAweDI0LCAweDdlLCAweDY0LCAKKyAgICAweDAyLCAweDAwLCAweDJlLCAweDY3LCAweDAxLCAweGMzLCAweDllLCAweDI0LCAweDAwLCAweDAyLCAweDQwLCAweDE3LCAweDFiLCAweDM4LCAweDYwLCAweDBiLCAKKyAgICAweDM1LCAweDEyLCAweDY1LCAweGZiLCAweDdlLCAweDM0LCAweDAxLCAweGUzLCAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGRmLCAKKyAgICAweDAyLCAweDY1LCAweGZiLCAweDdhLCAweDM5LCAweGMwLCAweDdlLCAweDM0LCAweDAxLCAweGUzLCAweDdhLCAweDM5LCAweGQwLCAweDBiLCAweDM0LCAweDFiLCAKKyAgICAweDQ0LCAweDgwLCAweGU1LCAweDlkLCAweDMyLCAweDdjLCAweGI2LCAweDU0LCAweDBmLCAweDIzLCAweDIzLCAweDIzLCAweDQ0LCAweDAyLCAweDdhLCAweDY5LCAKKyAgICAweGIwLCAweDdhLCAweDc5LCAweDcwLCAweDBiLCAweDM1LCAweDc1LCAweDMxLCAweDkzLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDcxLCAweDMxLCAweDEyLCAKKyAgICAweDdjLCAweDE1LCAweGJkLCAweDA0LCAweDY4LCAweDI5LCAweDdhLCAweDA3LCAweDAxLCAweGRmLCAweDdlLCAweDQ3LCAweDAxLCAweGUxLCAweDJkLCAweDQzLCAKKyAgICAweDdhLCAweDQ3LCAweDAxLCAweGUxLCAweDJlLCAweDM1LCAweDQ2LCAweDdhLCAweDM1LCAweDQ2LCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAKKyAgICAweGUwLCAweDEzLCAweDIyLCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDgwLCAweDJhLCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDgwLCAweDJjLCAweDdlLCAKKyAgICAweDA0LCAweDAxLCAweGUzLCAweDgwLCAweGQxLCAweGQyLCAweDA0LCAweDdlLCAweDA3LCAweDAxLCAweGUxLCAweDdlLCAweDI0LCAweDAzLCAweGZlLCAweDlkLCAKKyAgICAweDIwLCAweDI4LCAweDQwLCAweDdlLCAweDA3LCAweDAxLCAweGRmLCAweDdlLCAweDQ0LCAweDA1LCAweGUzLCAweDdkLCAweDYwLCAweDBiLCAweDA0LCAweGJkLCAKKyAgICAweDA0LCAweDY4LCAweGQwLCAweDdkLCAweDcwLCAweDBiLCAweDA0LCAweGJkLCAweDA0LCAweDY4LCAweGNlLCAweDdkLCAweDU0LCAweDlkLCAweDUwLCAweGJkLCAKKyAgICAweDI1LCAweDQwLCAweDAyLCAweDdkLCAweDI1LCAweDdkLCAweDMyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDFmLCAweGI0LCAKKyAgICAweDAxLCAweDMxLCAweGRhLCAweGI4LCAweDdlLCAweDE5LCAweGIwLCAweDdhLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDFiLCAweDI0LCAweDc4LCAweGU3LCAKKyAgICAweDAyLCAweDRlLCAweDkzLCAweDc1LCAweDMxLCAweDk5LCAweDEyLCAweDdjLCAweDE1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAKKyAgICAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDNhLCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAKKyAgICAweGQyLCAweDEyLCAweDIyLCAweGRhLCAweGI4LCAweDMwLCAweGUwLCAweGQ4LCAweGJkLCAweDMyLCAweDY4LCAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDRlLCAKKyAgICAweDkzLCAweGRhLCAweGI4LCAweDAyLCAweDRmLCAweGUwLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDg4LCAweDc1LCAweDMxLCAweDkwLCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweGY1LCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweGE1LCAweGZjLCAweDVlLCAweGIwLCAweGYwLCAweGE1LCAweGZkLCAweDA5LCAKKyAgICAweGIxLCAweDAwLCAweDE4LCAweDRjLCAweDRiLCAweDVlLCAweGIwLCAweGYwLCAweGJjLCAweGI1LCAweDc4LCAweGYxLCAweDVlLCAweDQwLCAweDBmLCAweDRjLCAKKyAgICAweDU0LCAweDdjLCAweGI1LCAweDVlLCAweDUwLCAweDBiLCAweDY4LCAweDJhLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDEwLCAweDY4LCAweDA0LCAweGQyLCAKKyAgICAweDZhLCAweDgwLCAweDAyLCAweGMyLCAweDZhLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDYyLCAweDgwLCAweDAyLCAKKyAgICAweGMyLCAweDYyLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDVhLCAweDgwLCAweDAyLCAweGMyLCAweDVhLCAweDEyLCAKKyAgICAweDQzLCAweDBhLCAweDAyLCAweDYyLCAweDkzLCAweDc1LCAweDMxLCAweDkxLCAweDEyLCAweDdjLCAweDE1LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDdhLCAKKyAgICAweGIxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDIwLCAweGUwLCAweDA4LCAweGQyLCAweDA0LCAweDdlLCAweGEwLCAweDgwLCAweDAyLCAweDYyLCAweDkzLCAKKyAgICAweGQyLCAweDA0LCAweDMwLCAweGUxLCAweDA2LCAweDdlLCAweGEwLCAweDgwLCAweDEyLCAweDYyLCAweDkzLCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFjLCAKKyAgICAweGRhLCAweGI4LCAweDY4LCAweDEyLCAweDdlLCAweGEwLCAweGMwLCAweDA5LCAweDYxLCAweDAwLCAweDAwLCAweDEyLCAweDYyLCAweGI2LCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweGRiLCAweDIyLCAweDAyLCAweDRlLCAweGU1LCAweDc1LCAweDMxLCAweDk1LCAweDEyLCAweDdjLCAweDE1LCAweDIyLCAKKyAgICAweDc1LCAweDMxLCAweDk2LCAweDEyLCAweDdjLCAweDE1LCAweDIyLCAweDEwLCAweDBiLCAweDAxLCAweDIyLCAweDIwLCAweDJiLCAweDAzLCAweGQyLCAweDBiLCAKKyAgICAweDIyLCAweDc1LCAweDMxLCAweGEzLCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweDE0LCAweDgzLCAweDAwLCAweDgwLCAweDA2LCAweDIwLCAweDJiLCAweDAzLCAKKyAgICAweGQyLCAweDBiLCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDAzLCAKKyAgICAweDEyLCAweDUzLCAweDM4LCAweDIwLCAweGU2LCAweDAzLCAweGQyLCAweDBiLCAweDIyLCAweDMwLCAweDMzLCAweDQ5LCAweGQyLCAweDczLCAweDdlLCAweDM3LCAKKyAgICAweDAxLCAweDk1LCAweDdlLCAweDI3LCAweDAxLCAweGI1LCAweDlkLCAweDMyLCAweDQwLCAweDMxLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDRlLCAweDdhLCAKKyAgICAweDA1LCAweDRlLCAweDdhLCAweDM3LCAweDAxLCAweDk1LCAweDdlLCAweDM3LCAweDAxLCAweDc1LCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAKKyAgICAweDE5LCAweGUyLCAweDM4LCAweDY4LCAweDdhLCAweDQ3LCAweDAxLCAweDc1LCAweDc1LCAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDUxLCAKKyAgICAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDEyLCAweDY1LCAweDJiLCAweDEwLCAweDczLCAweGM0LCAweDIyLCAweGMyLCAweDczLCAweDJkLCAweDIzLCAweDY4LCAKKyAgICAweDc4LCAweDZkLCAweDMzLCAweDgwLCAweDFhLCAweDdlLCAweDI3LCAweDAxLCAweDk1LCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDY4LCAweDZhLCAweGJlLCAKKyAgICAweDI3LCAweDAxLCAweGI1LCAweDI4LCAweDA0LCAweDdlLCAweDI3LCAweDAxLCAweGI1LCAweDdlLCAweDM3LCAweDAxLCAweDk1LCAweDlkLCAweDMyLCAweDdkLCAKKyAgICAweDAyLCAweDJlLCAweDA1LCAweDRlLCAweDdhLCAweDA1LCAweDRlLCAweDdhLCAweDM3LCAweDAxLCAweDk1LCAweDdlLCAweDM3LCAweDAxLCAweDc1LCAweDdkLCAKKyAgICAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDE5LCAweGUyLCAweDM4LCAweDEzLCAweDdhLCAweDQ3LCAweDAxLCAweDc1LCAweDc1LCAweDMxLCAweDk0LCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDAyLCAweDY1LCAweDJiLCAweDc1LCAweDMxLCAweDk0LCAweDEyLCAKKyAgICAweDdjLCAweDE1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDllLCAweDQ0LCAweDE5LCAweGUzLCAweDlkLCAweDI0LCAweDEyLCAweDY1LCAKKyAgICAweDJiLCAweDdlLCAweDM0LCAweDE1LCAweGUzLCAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweDc1LCAweDEyLCAweDY1LCAweDJiLCAKKyAgICAweGJlLCAweDI1LCAweDIwLCAweDc4LCAweDAzLCAweDAyLCAweDUwLCAweDg3LCAweDIyLCAweGQyLCAweDBiLCAweDdlLCAweDA0LCAweDE1LCAweGUzLCAweDdhLCAKKyAgICAweDA3LCAweDAxLCAweDc1LCAweDdhLCAweDA3LCAweDAxLCAweDg1LCAweDc1LCAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDc1LCAweDMxLCAweDAwLCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweDIyLCAweDc1LCAweDMxLCAweDkyLCAweDEyLCAweDdjLCAweDE1LCAweGQyLCAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAKKyAgICAweGNhLCAweGI4LCAweDU0LCAweDgyLCAweGRhLCAweGI4LCAweDc4LCAweDcwLCAweDdlLCAweDM3LCAweDAxLCAweGUxLCAweDdlLCAweDI3LCAweDAxLCAweGM1LCAKKyAgICAweDJlLCAweDI0LCAweDAwLCAweDAyLCAweDJkLCAweDMyLCAweGJlLCAweDM0LCAweDA0LCAweDAwLCAweDM4LCAweDNjLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAKKyAgICAweDQ2LCAweDdhLCAweDA1LCAweDQ2LCAweDdhLCAweDM3LCAweDAxLCAweGUxLCAweDdlLCAweDM3LCAweDAxLCAweGRmLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAKKyAgICAweGJlLCAweDQ0LCAweDA1LCAweGUyLCAweDM4LCAweDQ0LCAweDdhLCAweDQ3LCAweDAxLCAweGRmLCAweDdlLCAweDI0LCAweDAzLCAweDAwLCAweDJlLCAweDI3LCAKKyAgICAweDAxLCAweGM1LCAweDFiLCAweDM4LCAweDIwLCAweDBiLCAweDM1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweGJlLCAweDUwLCAweDM4LCAKKyAgICAweDc4LCAweDAzLCAweDAyLCAweDY2LCAweDE2LCAweDAyLCAweDY1LCAweGZiLCAweDc1LCAweDMxLCAweDk5LCAweDEyLCAweDdjLCAweDE1LCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDNiLCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAKKyAgICAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDEzLCAweDIyLCAweDgwLCAweDdkLCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAKKyAgICAweDllLCAweDQ0LCAweDA1LCAweGUzLCAweDlkLCAweDI0LCAweDdlLCAweDY0LCAweDAzLCAweDAwLCAweDJlLCAweDY3LCAweDAxLCAweGM1LCAweDllLCAweDI0LCAKKyAgICAweDAwLCAweDAyLCAweDQwLCAweDE3LCAweDFiLCAweDM4LCAweDYwLCAweDBiLCAweDM1LCAweDEyLCAweDY1LCAweGZiLCAweDdlLCAweDM0LCAweDAxLCAweGUzLCAKKyAgICAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGRmLCAweDAyLCAweDY1LCAweGZiLCAweDdhLCAweDM5LCAweGMwLCAweDdlLCAweDM0LCAKKyAgICAweDAxLCAweGUzLCAweDdhLCAweDM5LCAweGQwLCAweDBiLCAweDM0LCAweDFiLCAweDQ0LCAweDgwLCAweGU1LCAweDlkLCAweDMyLCAweDdjLCAweGI2LCAweDU0LCAKKyAgICAweDBmLCAweDIzLCAweDIzLCAweDIzLCAweDQ0LCAweDAzLCAweDdhLCAweDY5LCAweGIwLCAweDdhLCAweDc5LCAweDcwLCAweDBiLCAweDM1LCAweDc1LCAweDMxLCAKKyAgICAweDkzLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDcxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweGJkLCAweDA0LCAweDY4LCAweDI5LCAweDdhLCAweDA3LCAKKyAgICAweDAxLCAweGRmLCAweDdlLCAweDQ3LCAweDAxLCAweGUxLCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGUxLCAweDJlLCAweDM1LCAweDQ2LCAweDdhLCAKKyAgICAweDM1LCAweDQ2LCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweDEzLCAweDIyLCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDgwLCAKKyAgICAweDJhLCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDgwLCAweDJjLCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDgwLCAweGQxLCAweGQyLCAweDA0LCAweDdlLCAKKyAgICAweDA3LCAweDAxLCAweGUxLCAweDdlLCAweDI0LCAweDAzLCAweGZlLCAweDlkLCAweDIwLCAweDI4LCAweDQwLCAweDdlLCAweDA3LCAweDAxLCAweGRmLCAweDdlLCAKKyAgICAweDQ0LCAweDA1LCAweGUzLCAweDdkLCAweDYwLCAweDBiLCAweDA0LCAweGJkLCAweDA0LCAweDY4LCAweGQwLCAweDdkLCAweDcwLCAweDBiLCAweDA0LCAweGJkLCAKKyAgICAweDA0LCAweDY4LCAweGNlLCAweDdkLCAweDU0LCAweDlkLCAweDUwLCAweGJkLCAweDI1LCAweDQwLCAweDAyLCAweDdkLCAweDI1LCAweDdkLCAweDMyLCAweDA5LCAKKyAgICAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDFmLCAweGI0LCAweDAxLCAweDMxLCAweGRhLCAweGI4LCAweDdlLCAweDE5LCAweGIwLCAweDdhLCAKKyAgICAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDFiLCAweDI0LCAweDc4LCAweGU3LCAweDAyLCAweDUxLCAweGViLCAweDc1LCAweDMxLCAweDk5LCAweDEyLCAweDdjLCAKKyAgICAweDE1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDNiLCAweDBhLCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDEzLCAweDIyLCAweGRhLCAweGI4LCAweDMwLCAweGUwLCAweGQ4LCAKKyAgICAweGJkLCAweDMyLCAweDY4LCAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDUxLCAweGViLCAweGRhLCAweGI4LCAweDAyLCAweDUzLCAweDM4LCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDg4LCAweDc1LCAweDMxLCAweDkwLCAweDEyLCAweDdjLCAweDE1LCAweGY1LCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAKKyAgICAweGE1LCAweGZjLCAweDVlLCAweGIwLCAweGYwLCAweGE1LCAweGZkLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweDRjLCAweDRiLCAweDVlLCAweGIwLCAweGYwLCAKKyAgICAweGJjLCAweGI1LCAweDc4LCAweGYxLCAweDVlLCAweDQwLCAweDBmLCAweDRjLCAweDU0LCAweDdjLCAweGI1LCAweDVlLCAweDUwLCAweDBiLCAweDY4LCAweDJhLCAKKyAgICAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDEwLCAweDY4LCAweDA0LCAweGQyLCAweDZiLCAweDgwLCAweDAyLCAweGMyLCAweDZiLCAweGE1LCAweGZkLCAweDVlLCAKKyAgICAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDYzLCAweDgwLCAweDAyLCAweGMyLCAweDYzLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAKKyAgICAweDA0LCAweGQyLCAweDViLCAweDgwLCAweDAyLCAweGMyLCAweDViLCAweDEyLCAweDQzLCAweDJiLCAweDAyLCAweDYyLCAweDkzLCAweDc1LCAweDMxLCAweDkxLCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDdhLCAweGIxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDIwLCAweGUwLCAweDA4LCAKKyAgICAweGQyLCAweDA0LCAweDdlLCAweGEwLCAweDgwLCAweDAyLCAweDYyLCAweDkzLCAweGQyLCAweDA0LCAweDMwLCAweGUxLCAweDA2LCAweDdlLCAweGEwLCAweDgwLCAKKyAgICAweDEyLCAweDYyLCAweDkzLCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFjLCAweGRhLCAweGI4LCAweDY4LCAweDEyLCAweDdlLCAweGEwLCAweGMwLCAweDA5LCAKKyAgICAweDYxLCAweDAwLCAweDAwLCAweDEyLCAweDYyLCAweGI2LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweGRiLCAweDIyLCAweDAyLCAweDUyLCAKKyAgICAweDNkLCAweDc1LCAweDMxLCAweDk1LCAweDEyLCAweDdjLCAweDE1LCAweDIyLCAweDc1LCAweDMxLCAweDk2LCAweDEyLCAweDdjLCAweDE1LCAweDIyLCAweDEwLCAKKyAgICAweDBjLCAweDAxLCAweDIyLCAweDIwLCAweDJjLCAweDAzLCAweGQyLCAweDBjLCAweDIyLCAweDc1LCAweDMxLCAweGE0LCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAKKyAgICAweDE0LCAweDg0LCAweDAwLCAweDgwLCAweDA2LCAweDIwLCAweDJjLCAweDAzLCAweGQyLCAweDBjLCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAKKyAgICAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDAzLCAweDEyLCAweDU2LCAweDkwLCAweDIwLCAweGU2LCAweDAzLCAweGQyLCAweDBjLCAKKyAgICAweDIyLCAweDMwLCAweDM0LCAweDQ5LCAweGQyLCAweDc0LCAweDdlLCAweDM3LCAweDAxLCAweDk3LCAweDdlLCAweDI3LCAweDAxLCAweGI3LCAweDlkLCAweDMyLCAKKyAgICAweDQwLCAweDMxLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDUwLCAweDdhLCAweDA1LCAweDUwLCAweDdhLCAweDM3LCAweDAxLCAweDk3LCAweDdlLCAweDM3LCAKKyAgICAweDAxLCAweDc3LCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDFkLCAweGUyLCAweDM4LCAweDY4LCAweDdhLCAweDQ3LCAweDAxLCAweDc3LCAKKyAgICAweDc1LCAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDEyLCAweDY1LCAweDJiLCAweDEwLCAKKyAgICAweDc0LCAweGM0LCAweDIyLCAweGMyLCAweDc0LCAweDJkLCAweDIzLCAweDY4LCAweDc4LCAweDZkLCAweDMzLCAweDgwLCAweDFhLCAweDdlLCAweDI3LCAweDAxLCAKKyAgICAweDk3LCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDY4LCAweDZhLCAweGJlLCAweDI3LCAweDAxLCAweGI3LCAweDI4LCAweDA0LCAweDdlLCAweDI3LCAweDAxLCAKKyAgICAweGI3LCAweDdlLCAweDM3LCAweDAxLCAweDk3LCAweDlkLCAweDMyLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDUwLCAweDdhLCAweDA1LCAweDUwLCAweDdhLCAKKyAgICAweDM3LCAweDAxLCAweDk3LCAweDdlLCAweDM3LCAweDAxLCAweDc3LCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDFkLCAweGUyLCAweDM4LCAKKyAgICAweDEzLCAweDdhLCAweDQ3LCAweDAxLCAweDc3LCAweDc1LCAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAKKyAgICAweDE1LCAweDAyLCAweDY1LCAweDJiLCAweDc1LCAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAKKyAgICAweDllLCAweDQ0LCAweDFkLCAweGUzLCAweDlkLCAweDI0LCAweDEyLCAweDY1LCAweDJiLCAweDdlLCAweDM0LCAweDE5LCAweGUzLCAweDdkLCAweDI0LCAweDJkLCAKKyAgICAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweDc3LCAweDEyLCAweDY1LCAweDJiLCAweGJlLCAweDI1LCAweDIwLCAweDc4LCAweDAzLCAweDAyLCAweDUzLCAweGRmLCAKKyAgICAweDIyLCAweGQyLCAweDBjLCAweDdlLCAweDA0LCAweDE5LCAweGUzLCAweDdhLCAweDA3LCAweDAxLCAweDc3LCAweDdhLCAweDA3LCAweDAxLCAweDg3LCAweDc1LCAKKyAgICAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDc1LCAweDMxLCAweDAwLCAweDEyLCAweDdjLCAweDE1LCAweDIyLCAweDc1LCAweDMxLCAweDkyLCAweDEyLCAKKyAgICAweDdjLCAweDE1LCAweGQyLCAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDgyLCAweGRhLCAweGI4LCAweDc4LCAweDcwLCAKKyAgICAweDdlLCAweDM3LCAweDAxLCAweGUxLCAweDdlLCAweDI3LCAweDAxLCAweGM3LCAweDJlLCAweDI0LCAweDAwLCAweDAyLCAweDJkLCAweDMyLCAweGJlLCAweDM0LCAKKyAgICAweDA0LCAweDAwLCAweDM4LCAweDNjLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDQ2LCAweDdhLCAweDA1LCAweDQ2LCAweDdhLCAweDM3LCAweDAxLCAweGUxLCAKKyAgICAweDdlLCAweDM3LCAweDAxLCAweGRmLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDA1LCAweGUyLCAweDM4LCAweDQ0LCAweDdhLCAweDQ3LCAKKyAgICAweDAxLCAweGRmLCAweDdlLCAweDI0LCAweDA0LCAweDAwLCAweDJlLCAweDI3LCAweDAxLCAweGM3LCAweDFiLCAweDM4LCAweDIwLCAweDBiLCAweDM1LCAweDdhLCAKKyAgICAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweGJlLCAweDUwLCAweDM4LCAweDc4LCAweDAzLCAweDAyLCAweDY2LCAweDE2LCAweDAyLCAweDY1LCAweGZiLCAKKyAgICAweDc1LCAweDMxLCAweDk5LCAweDEyLCAweDdjLCAweDE1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAKKyAgICAweDMwLCAweDNjLCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDE0LCAweDIyLCAKKyAgICAweDgwLCAweDdkLCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDllLCAweDQ0LCAweDA1LCAweGUzLCAweDlkLCAweDI0LCAweDdlLCAweDY0LCAKKyAgICAweDA0LCAweDAwLCAweDJlLCAweDY3LCAweDAxLCAweGM3LCAweDllLCAweDI0LCAweDAwLCAweDAyLCAweDQwLCAweDE3LCAweDFiLCAweDM4LCAweDYwLCAweDBiLCAKKyAgICAweDM1LCAweDEyLCAweDY1LCAweGZiLCAweDdlLCAweDM0LCAweDAxLCAweGUzLCAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGRmLCAKKyAgICAweDAyLCAweDY1LCAweGZiLCAweDdhLCAweDM5LCAweGMwLCAweDdlLCAweDM0LCAweDAxLCAweGUzLCAweDdhLCAweDM5LCAweGQwLCAweDBiLCAweDM0LCAweDFiLCAKKyAgICAweDQ0LCAweDgwLCAweGU1LCAweDlkLCAweDMyLCAweDdjLCAweGI2LCAweDU0LCAweDBmLCAweDIzLCAweDIzLCAweDIzLCAweDQ0LCAweDA0LCAweDdhLCAweDY5LCAKKyAgICAweGIwLCAweDdhLCAweDc5LCAweDcwLCAweDBiLCAweDM1LCAweDc1LCAweDMxLCAweDkzLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDcxLCAweDMxLCAweDEyLCAKKyAgICAweDdjLCAweDE1LCAweGJkLCAweDA0LCAweDY4LCAweDI5LCAweDdhLCAweDA3LCAweDAxLCAweGRmLCAweDdlLCAweDQ3LCAweDAxLCAweGUxLCAweDJkLCAweDQzLCAKKyAgICAweDdhLCAweDQ3LCAweDAxLCAweGUxLCAweDJlLCAweDM1LCAweDQ2LCAweDdhLCAweDM1LCAweDQ2LCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAKKyAgICAweGUwLCAweDEzLCAweDIyLCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDgwLCAweDJhLCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDgwLCAweDJjLCAweDdlLCAKKyAgICAweDA0LCAweDAxLCAweGUzLCAweDgwLCAweGQxLCAweGQyLCAweDA0LCAweDdlLCAweDA3LCAweDAxLCAweGUxLCAweDdlLCAweDI0LCAweDAzLCAweGZlLCAweDlkLCAKKyAgICAweDIwLCAweDI4LCAweDQwLCAweDdlLCAweDA3LCAweDAxLCAweGRmLCAweDdlLCAweDQ0LCAweDA1LCAweGUzLCAweDdkLCAweDYwLCAweDBiLCAweDA0LCAweGJkLCAKKyAgICAweDA0LCAweDY4LCAweGQwLCAweDdkLCAweDcwLCAweDBiLCAweDA0LCAweGJkLCAweDA0LCAweDY4LCAweGNlLCAweDdkLCAweDU0LCAweDlkLCAweDUwLCAweGJkLCAKKyAgICAweDI1LCAweDQwLCAweDAyLCAweDdkLCAweDI1LCAweDdkLCAweDMyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDFmLCAweGI0LCAKKyAgICAweDAxLCAweDMxLCAweGRhLCAweGI4LCAweDdlLCAweDE5LCAweGIwLCAweDdhLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDFiLCAweDI0LCAweDc4LCAweGU3LCAKKyAgICAweDAyLCAweDU1LCAweDQzLCAweDc1LCAweDMxLCAweDk5LCAweDEyLCAweDdjLCAweDE1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAKKyAgICAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDNjLCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAKKyAgICAweGQyLCAweDE0LCAweDIyLCAweGRhLCAweGI4LCAweDMwLCAweGUwLCAweGQ4LCAweGJkLCAweDMyLCAweDY4LCAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDU1LCAKKyAgICAweDQzLCAweGRhLCAweGI4LCAweDAyLCAweDU2LCAweDkwLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDg4LCAweDc1LCAweDMxLCAweDkwLCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweGY1LCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweGE1LCAweGZjLCAweDVlLCAweGIwLCAweGYwLCAweGE1LCAweGZkLCAweDA5LCAKKyAgICAweGIxLCAweDAwLCAweDE4LCAweDRjLCAweDRiLCAweDVlLCAweGIwLCAweGYwLCAweGJjLCAweGI1LCAweDc4LCAweGYxLCAweDVlLCAweDQwLCAweDBmLCAweDRjLCAKKyAgICAweDU0LCAweDdjLCAweGI1LCAweDVlLCAweDUwLCAweDBiLCAweDY4LCAweDJhLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDEwLCAweDY4LCAweDA0LCAweGQyLCAKKyAgICAweDZjLCAweDgwLCAweDAyLCAweGMyLCAweDZjLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDY0LCAweDgwLCAweDAyLCAKKyAgICAweGMyLCAweDY0LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDVjLCAweDgwLCAweDAyLCAweGMyLCAweDVjLCAweDEyLCAKKyAgICAweDQzLCAweDRjLCAweDAyLCAweDYyLCAweDkzLCAweDc1LCAweDMxLCAweDkxLCAweDEyLCAweDdjLCAweDE1LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDdhLCAKKyAgICAweGIxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDIwLCAweGUwLCAweDA4LCAweGQyLCAweDA0LCAweDdlLCAweGEwLCAweDgwLCAweDAyLCAweDYyLCAweDkzLCAKKyAgICAweGQyLCAweDA0LCAweDMwLCAweGUxLCAweDA2LCAweDdlLCAweGEwLCAweDgwLCAweDEyLCAweDYyLCAweDkzLCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFjLCAKKyAgICAweGRhLCAweGI4LCAweDY4LCAweDEyLCAweDdlLCAweGEwLCAweGMwLCAweDA5LCAweDYxLCAweDAwLCAweDAwLCAweDEyLCAweDYyLCAweGI2LCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweGRiLCAweDIyLCAweDAyLCAweDU1LCAweDk1LCAweDc1LCAweDMxLCAweDk1LCAweDEyLCAweDdjLCAweDE1LCAweDIyLCAKKyAgICAweDc1LCAweDMxLCAweDk2LCAweDEyLCAweDdjLCAweDE1LCAweDIyLCAweDEwLCAweDBkLCAweDAxLCAweDIyLCAweDIwLCAweDJkLCAweDAzLCAweGQyLCAweDBkLCAKKyAgICAweDIyLCAweDc1LCAweDMxLCAweGE1LCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweDE0LCAweDg1LCAweDAwLCAweDgwLCAweDA2LCAweDIwLCAweDJkLCAweDAzLCAKKyAgICAweGQyLCAweDBkLCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDAzLCAKKyAgICAweDEyLCAweDU5LCAweGU4LCAweDIwLCAweGU2LCAweDAzLCAweGQyLCAweDBkLCAweDIyLCAweDMwLCAweDM1LCAweDQ5LCAweGQyLCAweDc1LCAweDdlLCAweDM3LCAKKyAgICAweDAxLCAweDk5LCAweDdlLCAweDI3LCAweDAxLCAweGI5LCAweDlkLCAweDMyLCAweDQwLCAweDMxLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDUyLCAweDdhLCAKKyAgICAweDA1LCAweDUyLCAweDdhLCAweDM3LCAweDAxLCAweDk5LCAweDdlLCAweDM3LCAweDAxLCAweDc5LCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAKKyAgICAweDIxLCAweGUyLCAweDM4LCAweDY4LCAweDdhLCAweDQ3LCAweDAxLCAweDc5LCAweDc1LCAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDUxLCAKKyAgICAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDEyLCAweDY1LCAweDJiLCAweDEwLCAweDc1LCAweGM0LCAweDIyLCAweGMyLCAweDc1LCAweDJkLCAweDIzLCAweDY4LCAKKyAgICAweDc4LCAweDZkLCAweDMzLCAweDgwLCAweDFhLCAweDdlLCAweDI3LCAweDAxLCAweDk5LCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDY4LCAweDZhLCAweGJlLCAKKyAgICAweDI3LCAweDAxLCAweGI5LCAweDI4LCAweDA0LCAweDdlLCAweDI3LCAweDAxLCAweGI5LCAweDdlLCAweDM3LCAweDAxLCAweDk5LCAweDlkLCAweDMyLCAweDdkLCAKKyAgICAweDAyLCAweDJlLCAweDA1LCAweDUyLCAweDdhLCAweDA1LCAweDUyLCAweDdhLCAweDM3LCAweDAxLCAweDk5LCAweDdlLCAweDM3LCAweDAxLCAweDc5LCAweDdkLCAKKyAgICAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDIxLCAweGUyLCAweDM4LCAweDEzLCAweDdhLCAweDQ3LCAweDAxLCAweDc5LCAweDc1LCAweDMxLCAweDk0LCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDAyLCAweDY1LCAweDJiLCAweDc1LCAweDMxLCAweDk0LCAweDEyLCAKKyAgICAweDdjLCAweDE1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDllLCAweDQ0LCAweDIxLCAweGUzLCAweDlkLCAweDI0LCAweDEyLCAweDY1LCAKKyAgICAweDJiLCAweDdlLCAweDM0LCAweDFkLCAweGUzLCAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweDc5LCAweDEyLCAweDY1LCAweDJiLCAKKyAgICAweGJlLCAweDI1LCAweDIwLCAweDc4LCAweDAzLCAweDAyLCAweDU3LCAweDM3LCAweDIyLCAweGQyLCAweDBkLCAweDdlLCAweDA0LCAweDFkLCAweGUzLCAweDdhLCAKKyAgICAweDA3LCAweDAxLCAweDc5LCAweDdhLCAweDA3LCAweDAxLCAweDg5LCAweDc1LCAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDc1LCAweDMxLCAweDAwLCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweDIyLCAweDc1LCAweDMxLCAweDkyLCAweDEyLCAweDdjLCAweDE1LCAweGQyLCAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAKKyAgICAweGNhLCAweGI4LCAweDU0LCAweDgyLCAweGRhLCAweGI4LCAweDc4LCAweDcwLCAweDdlLCAweDM3LCAweDAxLCAweGUxLCAweDdlLCAweDI3LCAweDAxLCAweGM5LCAKKyAgICAweDJlLCAweDI0LCAweDAwLCAweDAyLCAweDJkLCAweDMyLCAweGJlLCAweDM0LCAweDA0LCAweDAwLCAweDM4LCAweDNjLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAKKyAgICAweDQ2LCAweDdhLCAweDA1LCAweDQ2LCAweDdhLCAweDM3LCAweDAxLCAweGUxLCAweDdlLCAweDM3LCAweDAxLCAweGRmLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAKKyAgICAweGJlLCAweDQ0LCAweDA1LCAweGUyLCAweDM4LCAweDQ0LCAweDdhLCAweDQ3LCAweDAxLCAweGRmLCAweDdlLCAweDI0LCAweDA1LCAweDAwLCAweDJlLCAweDI3LCAKKyAgICAweDAxLCAweGM5LCAweDFiLCAweDM4LCAweDIwLCAweDBiLCAweDM1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweGJlLCAweDUwLCAweDM4LCAKKyAgICAweDc4LCAweDAzLCAweDAyLCAweDY2LCAweDE2LCAweDAyLCAweDY1LCAweGZiLCAweDc1LCAweDMxLCAweDk5LCAweDEyLCAweDdjLCAweDE1LCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDNkLCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAKKyAgICAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDE1LCAweDIyLCAweDgwLCAweDdkLCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAKKyAgICAweDllLCAweDQ0LCAweDA1LCAweGUzLCAweDlkLCAweDI0LCAweDdlLCAweDY0LCAweDA1LCAweDAwLCAweDJlLCAweDY3LCAweDAxLCAweGM5LCAweDllLCAweDI0LCAKKyAgICAweDAwLCAweDAyLCAweDQwLCAweDE3LCAweDFiLCAweDM4LCAweDYwLCAweDBiLCAweDM1LCAweDEyLCAweDY1LCAweGZiLCAweDdlLCAweDM0LCAweDAxLCAweGUzLCAKKyAgICAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGRmLCAweDAyLCAweDY1LCAweGZiLCAweDdhLCAweDM5LCAweGMwLCAweDdlLCAweDM0LCAKKyAgICAweDAxLCAweGUzLCAweDdhLCAweDM5LCAweGQwLCAweDBiLCAweDM0LCAweDFiLCAweDQ0LCAweDgwLCAweGU1LCAweDlkLCAweDMyLCAweDdjLCAweGI2LCAweDU0LCAKKyAgICAweDBmLCAweDIzLCAweDIzLCAweDIzLCAweDQ0LCAweDA1LCAweDdhLCAweDY5LCAweGIwLCAweDdhLCAweDc5LCAweDcwLCAweDBiLCAweDM1LCAweDc1LCAweDMxLCAKKyAgICAweDkzLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDcxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweGJkLCAweDA0LCAweDY4LCAweDI5LCAweDdhLCAweDA3LCAKKyAgICAweDAxLCAweGRmLCAweDdlLCAweDQ3LCAweDAxLCAweGUxLCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGUxLCAweDJlLCAweDM1LCAweDQ2LCAweDdhLCAKKyAgICAweDM1LCAweDQ2LCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweDEzLCAweDIyLCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDgwLCAKKyAgICAweDJhLCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDgwLCAweDJjLCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDgwLCAweGQxLCAweGQyLCAweDA0LCAweDdlLCAKKyAgICAweDA3LCAweDAxLCAweGUxLCAweDdlLCAweDI0LCAweDAzLCAweGZlLCAweDlkLCAweDIwLCAweDI4LCAweDQwLCAweDdlLCAweDA3LCAweDAxLCAweGRmLCAweDdlLCAKKyAgICAweDQ0LCAweDA1LCAweGUzLCAweDdkLCAweDYwLCAweDBiLCAweDA0LCAweGJkLCAweDA0LCAweDY4LCAweGQwLCAweDdkLCAweDcwLCAweDBiLCAweDA0LCAweGJkLCAKKyAgICAweDA0LCAweDY4LCAweGNlLCAweDdkLCAweDU0LCAweDlkLCAweDUwLCAweGJkLCAweDI1LCAweDQwLCAweDAyLCAweDdkLCAweDI1LCAweDdkLCAweDMyLCAweDA5LCAKKyAgICAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDFmLCAweGI0LCAweDAxLCAweDMxLCAweGRhLCAweGI4LCAweDdlLCAweDE5LCAweGIwLCAweDdhLCAKKyAgICAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDFiLCAweDI0LCAweDc4LCAweGU3LCAweDAyLCAweDU4LCAweDliLCAweDc1LCAweDMxLCAweDk5LCAweDEyLCAweDdjLCAKKyAgICAweDE1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDNkLCAweDBhLCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDE1LCAweDIyLCAweGRhLCAweGI4LCAweDMwLCAweGUwLCAweGQ4LCAKKyAgICAweGJkLCAweDMyLCAweDY4LCAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDU4LCAweDliLCAweGRhLCAweGI4LCAweDAyLCAweDU5LCAweGU4LCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDg4LCAweDc1LCAweDMxLCAweDkwLCAweDEyLCAweDdjLCAweDE1LCAweGY1LCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAKKyAgICAweGE1LCAweGZjLCAweDVlLCAweGIwLCAweGYwLCAweGE1LCAweGZkLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweDRjLCAweDRiLCAweDVlLCAweGIwLCAweGYwLCAKKyAgICAweGJjLCAweGI1LCAweDc4LCAweGYxLCAweDVlLCAweDQwLCAweDBmLCAweDRjLCAweDU0LCAweDdjLCAweGI1LCAweDVlLCAweDUwLCAweDBiLCAweDY4LCAweDJhLCAKKyAgICAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDEwLCAweDY4LCAweDA0LCAweGQyLCAweDZkLCAweDgwLCAweDAyLCAweGMyLCAweDZkLCAweGE1LCAweGZkLCAweDVlLCAKKyAgICAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDY1LCAweDgwLCAweDAyLCAweGMyLCAweDY1LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAKKyAgICAweDA0LCAweGQyLCAweDVkLCAweDgwLCAweDAyLCAweGMyLCAweDVkLCAweDEyLCAweDQzLCAweDZkLCAweDAyLCAweDYyLCAweDkzLCAweDc1LCAweDMxLCAweDkxLCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDdhLCAweGIxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDIwLCAweGUwLCAweDA4LCAKKyAgICAweGQyLCAweDA0LCAweDdlLCAweGEwLCAweDgwLCAweDAyLCAweDYyLCAweDkzLCAweGQyLCAweDA0LCAweDMwLCAweGUxLCAweDA2LCAweDdlLCAweGEwLCAweDgwLCAKKyAgICAweDEyLCAweDYyLCAweDkzLCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFjLCAweGRhLCAweGI4LCAweDY4LCAweDEyLCAweDdlLCAweGEwLCAweGMwLCAweDA5LCAKKyAgICAweDYxLCAweDAwLCAweDAwLCAweDEyLCAweDYyLCAweGI2LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweGRiLCAweDIyLCAweDAyLCAweDU4LCAKKyAgICAweGVkLCAweDc1LCAweDMxLCAweDk1LCAweDEyLCAweDdjLCAweDE1LCAweDIyLCAweDc1LCAweDMxLCAweDk2LCAweDEyLCAweDdjLCAweDE1LCAweDIyLCAweDEwLCAKKyAgICAweDBlLCAweDAxLCAweDIyLCAweDIwLCAweDJlLCAweDAzLCAweGQyLCAweDBlLCAweDIyLCAweDc1LCAweDMxLCAweGE2LCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAKKyAgICAweDE0LCAweDg2LCAweDAwLCAweDgwLCAweDA2LCAweDIwLCAweDJlLCAweDAzLCAweGQyLCAweDBlLCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAKKyAgICAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDAzLCAweDEyLCAweDVkLCAweDQwLCAweDIwLCAweGU2LCAweDAzLCAweGQyLCAweDBlLCAKKyAgICAweDIyLCAweDMwLCAweDM2LCAweDQ5LCAweGQyLCAweDc2LCAweDdlLCAweDM3LCAweDAxLCAweDliLCAweDdlLCAweDI3LCAweDAxLCAweGJiLCAweDlkLCAweDMyLCAKKyAgICAweDQwLCAweDMxLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDU0LCAweDdhLCAweDA1LCAweDU0LCAweDdhLCAweDM3LCAweDAxLCAweDliLCAweDdlLCAweDM3LCAKKyAgICAweDAxLCAweDdiLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDI1LCAweGUyLCAweDM4LCAweDY4LCAweDdhLCAweDQ3LCAweDAxLCAweDdiLCAKKyAgICAweDc1LCAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDEyLCAweDY1LCAweDJiLCAweDEwLCAKKyAgICAweDc2LCAweGM0LCAweDIyLCAweGMyLCAweDc2LCAweDJkLCAweDIzLCAweDY4LCAweDc4LCAweDZkLCAweDMzLCAweDgwLCAweDFhLCAweDdlLCAweDI3LCAweDAxLCAKKyAgICAweDliLCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDY4LCAweDZhLCAweGJlLCAweDI3LCAweDAxLCAweGJiLCAweDI4LCAweDA0LCAweDdlLCAweDI3LCAweDAxLCAKKyAgICAweGJiLCAweDdlLCAweDM3LCAweDAxLCAweDliLCAweDlkLCAweDMyLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDU0LCAweDdhLCAweDA1LCAweDU0LCAweDdhLCAKKyAgICAweDM3LCAweDAxLCAweDliLCAweDdlLCAweDM3LCAweDAxLCAweDdiLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDI1LCAweGUyLCAweDM4LCAKKyAgICAweDEzLCAweDdhLCAweDQ3LCAweDAxLCAweDdiLCAweDc1LCAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAKKyAgICAweDE1LCAweDAyLCAweDY1LCAweDJiLCAweDc1LCAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAKKyAgICAweDllLCAweDQ0LCAweDI1LCAweGUzLCAweDlkLCAweDI0LCAweDEyLCAweDY1LCAweDJiLCAweDdlLCAweDM0LCAweDIxLCAweGUzLCAweDdkLCAweDI0LCAweDJkLCAKKyAgICAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweDdiLCAweDEyLCAweDY1LCAweDJiLCAweGJlLCAweDI1LCAweDIwLCAweDc4LCAweDAzLCAweDAyLCAweDVhLCAweDhmLCAKKyAgICAweDIyLCAweGQyLCAweDBlLCAweDdlLCAweDA0LCAweDIxLCAweGUzLCAweDdhLCAweDA3LCAweDAxLCAweDdiLCAweDdhLCAweDA3LCAweDAxLCAweDhiLCAweDc1LCAKKyAgICAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDc1LCAweDMxLCAweDAwLCAweDEyLCAweDdjLCAweDE1LCAweDIyLCAweDc1LCAweDMxLCAweDkyLCAweDEyLCAKKyAgICAweDdjLCAweDE1LCAweGQyLCAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDgyLCAweGRhLCAweGI4LCAweDc4LCAweDcwLCAKKyAgICAweDdlLCAweDM3LCAweDAxLCAweGUxLCAweDdlLCAweDI3LCAweDAxLCAweGNiLCAweDJlLCAweDI0LCAweDAwLCAweDAyLCAweDJkLCAweDMyLCAweGJlLCAweDM0LCAKKyAgICAweDA0LCAweDAwLCAweDM4LCAweDNjLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDQ2LCAweDdhLCAweDA1LCAweDQ2LCAweDdhLCAweDM3LCAweDAxLCAweGUxLCAKKyAgICAweDdlLCAweDM3LCAweDAxLCAweGRmLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDA1LCAweGUyLCAweDM4LCAweDQ0LCAweDdhLCAweDQ3LCAKKyAgICAweDAxLCAweGRmLCAweDdlLCAweDI0LCAweDA2LCAweDAwLCAweDJlLCAweDI3LCAweDAxLCAweGNiLCAweDFiLCAweDM4LCAweDIwLCAweDBiLCAweDM1LCAweDdhLCAKKyAgICAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweGJlLCAweDUwLCAweDM4LCAweDc4LCAweDAzLCAweDAyLCAweDY2LCAweDE2LCAweDAyLCAweDY1LCAweGZiLCAKKyAgICAweDc1LCAweDMxLCAweDk5LCAweDEyLCAweDdjLCAweDE1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAKKyAgICAweDMwLCAweDNlLCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDE2LCAweDIyLCAKKyAgICAweDgwLCAweDdkLCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDllLCAweDQ0LCAweDA1LCAweGUzLCAweDlkLCAweDI0LCAweDdlLCAweDY0LCAKKyAgICAweDA2LCAweDAwLCAweDJlLCAweDY3LCAweDAxLCAweGNiLCAweDllLCAweDI0LCAweDAwLCAweDAyLCAweDQwLCAweDE3LCAweDFiLCAweDM4LCAweDYwLCAweDBiLCAKKyAgICAweDM1LCAweDEyLCAweDY1LCAweGZiLCAweDdlLCAweDM0LCAweDAxLCAweGUzLCAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGRmLCAKKyAgICAweDAyLCAweDY1LCAweGZiLCAweDdhLCAweDM5LCAweGMwLCAweDdlLCAweDM0LCAweDAxLCAweGUzLCAweDdhLCAweDM5LCAweGQwLCAweDBiLCAweDM0LCAweDFiLCAKKyAgICAweDQ0LCAweDgwLCAweGU1LCAweDlkLCAweDMyLCAweDdjLCAweGI2LCAweDU0LCAweDBmLCAweDIzLCAweDIzLCAweDIzLCAweDQ0LCAweDA2LCAweDdhLCAweDY5LCAKKyAgICAweGIwLCAweDdhLCAweDc5LCAweDcwLCAweDBiLCAweDM1LCAweDc1LCAweDMxLCAweDkzLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDcxLCAweDMxLCAweDEyLCAKKyAgICAweDdjLCAweDE1LCAweGJkLCAweDA0LCAweDY4LCAweDI5LCAweDdhLCAweDA3LCAweDAxLCAweGRmLCAweDdlLCAweDQ3LCAweDAxLCAweGUxLCAweDJkLCAweDQzLCAKKyAgICAweDdhLCAweDQ3LCAweDAxLCAweGUxLCAweDJlLCAweDM1LCAweDQ2LCAweDdhLCAweDM1LCAweDQ2LCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAKKyAgICAweGUwLCAweDEzLCAweDIyLCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDgwLCAweDJhLCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDgwLCAweDJjLCAweDdlLCAKKyAgICAweDA0LCAweDAxLCAweGUzLCAweDgwLCAweGQxLCAweGQyLCAweDA0LCAweDdlLCAweDA3LCAweDAxLCAweGUxLCAweDdlLCAweDI0LCAweDAzLCAweGZlLCAweDlkLCAKKyAgICAweDIwLCAweDI4LCAweDQwLCAweDdlLCAweDA3LCAweDAxLCAweGRmLCAweDdlLCAweDQ0LCAweDA1LCAweGUzLCAweDdkLCAweDYwLCAweDBiLCAweDA0LCAweGJkLCAKKyAgICAweDA0LCAweDY4LCAweGQwLCAweDdkLCAweDcwLCAweDBiLCAweDA0LCAweGJkLCAweDA0LCAweDY4LCAweGNlLCAweDdkLCAweDU0LCAweDlkLCAweDUwLCAweGJkLCAKKyAgICAweDI1LCAweDQwLCAweDAyLCAweDdkLCAweDI1LCAweDdkLCAweDMyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDFmLCAweGI0LCAKKyAgICAweDAxLCAweDMxLCAweGRhLCAweGI4LCAweDdlLCAweDE5LCAweGIwLCAweDdhLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDFiLCAweDI0LCAweDc4LCAweGU3LCAKKyAgICAweDAyLCAweDViLCAweGYzLCAweDc1LCAweDMxLCAweDk5LCAweDEyLCAweDdjLCAweDE1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAKKyAgICAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDNlLCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAKKyAgICAweGQyLCAweDE2LCAweDIyLCAweGRhLCAweGI4LCAweDMwLCAweGUwLCAweGQ4LCAweGJkLCAweDMyLCAweDY4LCAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDViLCAKKyAgICAweGYzLCAweGRhLCAweGI4LCAweDAyLCAweDVkLCAweDQwLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDg4LCAweDc1LCAweDMxLCAweDkwLCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweGY1LCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweGE1LCAweGZjLCAweDVlLCAweGIwLCAweGYwLCAweGE1LCAweGZkLCAweDA5LCAKKyAgICAweGIxLCAweDAwLCAweDE4LCAweDRjLCAweDRiLCAweDVlLCAweGIwLCAweGYwLCAweGJjLCAweGI1LCAweDc4LCAweGYxLCAweDVlLCAweDQwLCAweDBmLCAweDRjLCAKKyAgICAweDU0LCAweDdjLCAweGI1LCAweDVlLCAweDUwLCAweDBiLCAweDY4LCAweDJhLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDEwLCAweDY4LCAweDA0LCAweGQyLCAKKyAgICAweDZlLCAweDgwLCAweDAyLCAweGMyLCAweDZlLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDY2LCAweDgwLCAweDAyLCAKKyAgICAweGMyLCAweDY2LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDVlLCAweDgwLCAweDAyLCAweGMyLCAweDVlLCAweDEyLCAKKyAgICAweDQzLCAweDhlLCAweDAyLCAweDYyLCAweDkzLCAweDc1LCAweDMxLCAweDkxLCAweDEyLCAweDdjLCAweDE1LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDdhLCAKKyAgICAweGIxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDIwLCAweGUwLCAweDA4LCAweGQyLCAweDA0LCAweDdlLCAweGEwLCAweDgwLCAweDAyLCAweDYyLCAweDkzLCAKKyAgICAweGQyLCAweDA0LCAweDMwLCAweGUxLCAweDA2LCAweDdlLCAweGEwLCAweDgwLCAweDEyLCAweDYyLCAweDkzLCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFjLCAKKyAgICAweGRhLCAweGI4LCAweDY4LCAweDEyLCAweDdlLCAweGEwLCAweGMwLCAweDA5LCAweDYxLCAweDAwLCAweDAwLCAweDEyLCAweDYyLCAweGI2LCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweGRiLCAweDIyLCAweDAyLCAweDVjLCAweDQ1LCAweDc1LCAweDMxLCAweDk1LCAweDEyLCAweDdjLCAweDE1LCAweDIyLCAKKyAgICAweDc1LCAweDMxLCAweDk2LCAweDEyLCAweDdjLCAweDE1LCAweDIyLCAweDEwLCAweDBmLCAweDAxLCAweDIyLCAweDIwLCAweDJmLCAweDAzLCAweGQyLCAweDBmLCAKKyAgICAweDIyLCAweDc1LCAweDMxLCAweGE3LCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweDE0LCAweDg3LCAweDAwLCAweDgwLCAweDA2LCAweDIwLCAweDJmLCAweDAzLCAKKyAgICAweGQyLCAweDBmLCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDAzLCAKKyAgICAweDEyLCAweDYwLCAweDk4LCAweDIwLCAweGU2LCAweDAzLCAweGQyLCAweDBmLCAweDIyLCAweDMwLCAweDM3LCAweDQ5LCAweGQyLCAweDc3LCAweDdlLCAweDM3LCAKKyAgICAweDAxLCAweDlkLCAweDdlLCAweDI3LCAweDAxLCAweGJkLCAweDlkLCAweDMyLCAweDQwLCAweDMxLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDU2LCAweDdhLCAKKyAgICAweDA1LCAweDU2LCAweDdhLCAweDM3LCAweDAxLCAweDlkLCAweDdlLCAweDM3LCAweDAxLCAweDdkLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAKKyAgICAweDI5LCAweGUyLCAweDM4LCAweDY4LCAweDdhLCAweDQ3LCAweDAxLCAweDdkLCAweDc1LCAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDUxLCAKKyAgICAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDEyLCAweDY1LCAweDJiLCAweDEwLCAweDc3LCAweGM0LCAweDIyLCAweGMyLCAweDc3LCAweDJkLCAweDIzLCAweDY4LCAKKyAgICAweDc4LCAweDZkLCAweDMzLCAweDgwLCAweDFhLCAweDdlLCAweDI3LCAweDAxLCAweDlkLCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDY4LCAweDZhLCAweGJlLCAKKyAgICAweDI3LCAweDAxLCAweGJkLCAweDI4LCAweDA0LCAweDdlLCAweDI3LCAweDAxLCAweGJkLCAweDdlLCAweDM3LCAweDAxLCAweDlkLCAweDlkLCAweDMyLCAweDdkLCAKKyAgICAweDAyLCAweDJlLCAweDA1LCAweDU2LCAweDdhLCAweDA1LCAweDU2LCAweDdhLCAweDM3LCAweDAxLCAweDlkLCAweDdlLCAweDM3LCAweDAxLCAweDdkLCAweDdkLCAKKyAgICAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDI5LCAweGUyLCAweDM4LCAweDEzLCAweDdhLCAweDQ3LCAweDAxLCAweDdkLCAweDc1LCAweDMxLCAweDk0LCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDAyLCAweDY1LCAweDJiLCAweDc1LCAweDMxLCAweDk0LCAweDEyLCAKKyAgICAweDdjLCAweDE1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDllLCAweDQ0LCAweDI5LCAweGUzLCAweDlkLCAweDI0LCAweDEyLCAweDY1LCAKKyAgICAweDJiLCAweDdlLCAweDM0LCAweDI1LCAweGUzLCAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweDdkLCAweDEyLCAweDY1LCAweDJiLCAKKyAgICAweGJlLCAweDI1LCAweDIwLCAweDc4LCAweDAzLCAweDAyLCAweDVkLCAweGU3LCAweDIyLCAweGQyLCAweDBmLCAweDdlLCAweDA0LCAweDI1LCAweGUzLCAweDdhLCAKKyAgICAweDA3LCAweDAxLCAweDdkLCAweDdhLCAweDA3LCAweDAxLCAweDhkLCAweDc1LCAweDMxLCAweDk0LCAweDEyLCAweDdjLCAweDE1LCAweDc1LCAweDMxLCAweDAwLCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweDIyLCAweDc1LCAweDMxLCAweDkyLCAweDEyLCAweDdjLCAweDE1LCAweGQyLCAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAKKyAgICAweGNhLCAweGI4LCAweDU0LCAweDgyLCAweGRhLCAweGI4LCAweDc4LCAweDcwLCAweDdlLCAweDM3LCAweDAxLCAweGUxLCAweDdlLCAweDI3LCAweDAxLCAweGNkLCAKKyAgICAweDJlLCAweDI0LCAweDAwLCAweDAyLCAweDJkLCAweDMyLCAweGJlLCAweDM0LCAweDA0LCAweDAwLCAweDM4LCAweDNjLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAKKyAgICAweDQ2LCAweDdhLCAweDA1LCAweDQ2LCAweDdhLCAweDM3LCAweDAxLCAweGUxLCAweDdlLCAweDM3LCAweDAxLCAweGRmLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAKKyAgICAweGJlLCAweDQ0LCAweDA1LCAweGUyLCAweDM4LCAweDQ0LCAweDdhLCAweDQ3LCAweDAxLCAweGRmLCAweDdlLCAweDI0LCAweDA3LCAweDAwLCAweDJlLCAweDI3LCAKKyAgICAweDAxLCAweGNkLCAweDFiLCAweDM4LCAweDIwLCAweDBiLCAweDM1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweGJlLCAweDUwLCAweDM4LCAKKyAgICAweDc4LCAweDAzLCAweDAyLCAweDY2LCAweDE2LCAweDAyLCAweDY1LCAweGZiLCAweDc1LCAweDMxLCAweDk5LCAweDEyLCAweDdjLCAweDE1LCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDNmLCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAKKyAgICAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDE3LCAweDIyLCAweDgwLCAweDdkLCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAKKyAgICAweDllLCAweDQ0LCAweDA1LCAweGUzLCAweDlkLCAweDI0LCAweDdlLCAweDY0LCAweDA3LCAweDAwLCAweDJlLCAweDY3LCAweDAxLCAweGNkLCAweDllLCAweDI0LCAKKyAgICAweDAwLCAweDAyLCAweDQwLCAweDE3LCAweDFiLCAweDM4LCAweDYwLCAweDBiLCAweDM1LCAweDEyLCAweDY1LCAweGZiLCAweDdlLCAweDM0LCAweDAxLCAweGUzLCAKKyAgICAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGRmLCAweDAyLCAweDY1LCAweGZiLCAweDdhLCAweDM5LCAweGMwLCAweDdlLCAweDM0LCAKKyAgICAweDAxLCAweGUzLCAweDdhLCAweDM5LCAweGQwLCAweDBiLCAweDM0LCAweDFiLCAweDQ0LCAweDgwLCAweGU1LCAweDlkLCAweDMyLCAweDdjLCAweGI2LCAweDU0LCAKKyAgICAweDBmLCAweDIzLCAweDIzLCAweDIzLCAweDQ0LCAweDA3LCAweDdhLCAweDY5LCAweGIwLCAweDdhLCAweDc5LCAweDcwLCAweDBiLCAweDM1LCAweDc1LCAweDMxLCAKKyAgICAweDkzLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDcxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweGJkLCAweDA0LCAweDY4LCAweDI5LCAweDdhLCAweDA3LCAKKyAgICAweDAxLCAweGRmLCAweDdlLCAweDQ3LCAweDAxLCAweGUxLCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGUxLCAweDJlLCAweDM1LCAweDQ2LCAweDdhLCAKKyAgICAweDM1LCAweDQ2LCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweDEzLCAweDIyLCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDgwLCAKKyAgICAweDJhLCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDgwLCAweDJjLCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDgwLCAweGQxLCAweGQyLCAweDA0LCAweDdlLCAKKyAgICAweDA3LCAweDAxLCAweGUxLCAweDdlLCAweDI0LCAweDAzLCAweGZlLCAweDlkLCAweDIwLCAweDI4LCAweDQwLCAweDdlLCAweDA3LCAweDAxLCAweGRmLCAweDdlLCAKKyAgICAweDQ0LCAweDA1LCAweGUzLCAweDdkLCAweDYwLCAweDBiLCAweDA0LCAweGJkLCAweDA0LCAweDY4LCAweGQwLCAweDdkLCAweDcwLCAweDBiLCAweDA0LCAweGJkLCAKKyAgICAweDA0LCAweDY4LCAweGNlLCAweDdkLCAweDU0LCAweDlkLCAweDUwLCAweGJkLCAweDI1LCAweDQwLCAweDAyLCAweDdkLCAweDI1LCAweDdkLCAweDMyLCAweDA5LCAKKyAgICAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDFmLCAweGI0LCAweDAxLCAweDMxLCAweGRhLCAweGI4LCAweDdlLCAweDE5LCAweGIwLCAweDdhLCAKKyAgICAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDFiLCAweDI0LCAweDc4LCAweGU3LCAweDAyLCAweDVmLCAweDRiLCAweDc1LCAweDMxLCAweDk5LCAweDEyLCAweDdjLCAKKyAgICAweDE1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDNmLCAweDBhLCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDE3LCAweDIyLCAweGRhLCAweGI4LCAweDMwLCAweGUwLCAweGQ4LCAKKyAgICAweGJkLCAweDMyLCAweDY4LCAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDVmLCAweDRiLCAweGRhLCAweGI4LCAweDAyLCAweDYwLCAweDk4LCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDg4LCAweDc1LCAweDMxLCAweDkwLCAweDEyLCAweDdjLCAweDE1LCAweGY1LCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAKKyAgICAweGE1LCAweGZjLCAweDVlLCAweGIwLCAweGYwLCAweGE1LCAweGZkLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweDRjLCAweDRiLCAweDVlLCAweGIwLCAweGYwLCAKKyAgICAweGJjLCAweGI1LCAweDc4LCAweGYxLCAweDVlLCAweDQwLCAweDBmLCAweDRjLCAweDU0LCAweDdjLCAweGI1LCAweDVlLCAweDUwLCAweDBiLCAweDY4LCAweDJhLCAKKyAgICAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDEwLCAweDY4LCAweDA0LCAweGQyLCAweDZmLCAweDgwLCAweDAyLCAweGMyLCAweDZmLCAweGE1LCAweGZkLCAweDVlLCAKKyAgICAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDY3LCAweDgwLCAweDAyLCAweGMyLCAweDY3LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAKKyAgICAweDA0LCAweGQyLCAweDVmLCAweDgwLCAweDAyLCAweGMyLCAweDVmLCAweDEyLCAweDQzLCAweGFmLCAweDAyLCAweDYyLCAweDkzLCAweDc1LCAweDMxLCAweDkxLCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDdhLCAweGIxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDIwLCAweGUwLCAweDA4LCAKKyAgICAweGQyLCAweDA0LCAweDdlLCAweGEwLCAweDgwLCAweDAyLCAweDYyLCAweDkzLCAweGQyLCAweDA0LCAweDMwLCAweGUxLCAweDA2LCAweDdlLCAweGEwLCAweDgwLCAKKyAgICAweDEyLCAweDYyLCAweDkzLCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFjLCAweGRhLCAweGI4LCAweDY4LCAweDEyLCAweDdlLCAweGEwLCAweGMwLCAweDA5LCAKKyAgICAweDYxLCAweDAwLCAweDAwLCAweDEyLCAweDYyLCAweGI2LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweGRiLCAweDIyLCAweDAyLCAweDVmLCAKKyAgICAweDlkLCAweDc1LCAweDMxLCAweDk1LCAweDEyLCAweDdjLCAweDE1LCAweDIyLCAweDc1LCAweDMxLCAweDk2LCAweDEyLCAweDdjLCAweDE1LCAweDIyLCAweDdjLCAKKyAgICAweDAyLCAweDdlLCAweDE0LCAweDgwLCAweDAwLCAweDRjLCAweDIwLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDEwLCAKKyAgICAweDY4LCAweDA0LCAweGQyLCAweDY4LCAweDgwLCAweDAyLCAweGMyLCAweDY4LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAKKyAgICAweDYwLCAweDgwLCAweDAyLCAweGMyLCAweDYwLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDU4LCAweDgwLCAweDAyLCAKKyAgICAweGMyLCAweDU4LCAweDAyLCAweDYyLCAweDdmLCAweDdjLCAweDAyLCAweDdlLCAweDE0LCAweDgwLCAweDAwLCAweDRjLCAweDIwLCAweDA5LCAweGIxLCAweDAwLCAKKyAgICAweDE4LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDEwLCAweDY4LCAweDA0LCAweGQyLCAweDY5LCAweDgwLCAweDAyLCAweGMyLCAweDY5LCAweGE1LCAweGZkLCAKKyAgICAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDYxLCAweDgwLCAweDAyLCAweGMyLCAweDYxLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAKKyAgICAweDY4LCAweDA0LCAweGQyLCAweDU5LCAweDgwLCAweDAyLCAweGMyLCAweDU5LCAweDAyLCAweDYyLCAweDdmLCAweDdjLCAweDAyLCAweDdlLCAweDE0LCAweDgwLCAKKyAgICAweDAwLCAweDRjLCAweDIwLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDEwLCAweDY4LCAweDA0LCAweGQyLCAweDZhLCAKKyAgICAweDgwLCAweDAyLCAweGMyLCAweDZhLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDYyLCAweDgwLCAweDAyLCAweGMyLCAKKyAgICAweDYyLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDVhLCAweDgwLCAweDAyLCAweGMyLCAweDVhLCAweDAyLCAweDYyLCAKKyAgICAweDdmLCAweDdjLCAweDAyLCAweDdlLCAweDE0LCAweDgwLCAweDAwLCAweDRjLCAweDIwLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweGE1LCAweGZkLCAweDVlLCAKKyAgICAweDUwLCAweDEwLCAweDY4LCAweDA0LCAweGQyLCAweDZiLCAweDgwLCAweDAyLCAweGMyLCAweDZiLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAKKyAgICAweDA0LCAweGQyLCAweDYzLCAweDgwLCAweDAyLCAweGMyLCAweDYzLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDViLCAKKyAgICAweDgwLCAweDAyLCAweGMyLCAweDViLCAweDAyLCAweDYyLCAweDdmLCAweDdjLCAweDAyLCAweDdlLCAweDE0LCAweDgwLCAweDAwLCAweDRjLCAweDIwLCAweDA5LCAKKyAgICAweGIxLCAweDAwLCAweDE4LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDEwLCAweDY4LCAweDA0LCAweGQyLCAweDZjLCAweDgwLCAweDAyLCAweGMyLCAweDZjLCAKKyAgICAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDY0LCAweDgwLCAweDAyLCAweGMyLCAweDY0LCAweGE1LCAweGZkLCAweDVlLCAKKyAgICAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDVjLCAweDgwLCAweDAyLCAweGMyLCAweDVjLCAweDAyLCAweDYyLCAweDdmLCAweDdjLCAweDAyLCAweDdlLCAKKyAgICAweDE0LCAweDgwLCAweDAwLCAweDRjLCAweDIwLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDEwLCAweDY4LCAweDA0LCAKKyAgICAweGQyLCAweDZkLCAweDgwLCAweDAyLCAweGMyLCAweDZkLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDY1LCAweDgwLCAKKyAgICAweDAyLCAweGMyLCAweDY1LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDVkLCAweDgwLCAweDAyLCAweGMyLCAweDVkLCAKKyAgICAweDAyLCAweDYyLCAweDdmLCAweDdjLCAweDAyLCAweDdlLCAweDE0LCAweDgwLCAweDAwLCAweDRjLCAweDIwLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweGE1LCAKKyAgICAweGZkLCAweDVlLCAweDUwLCAweDEwLCAweDY4LCAweDA0LCAweGQyLCAweDZlLCAweDgwLCAweDAyLCAweGMyLCAweDZlLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAKKyAgICAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDY2LCAweDgwLCAweDAyLCAweGMyLCAweDY2LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAKKyAgICAweGQyLCAweDVlLCAweDgwLCAweDAyLCAweGMyLCAweDVlLCAweDAyLCAweDYyLCAweDdmLCAweDdjLCAweDAyLCAweDdlLCAweDE0LCAweDgwLCAweDAwLCAweDRjLCAKKyAgICAweDIwLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDEwLCAweDY4LCAweDA0LCAweGQyLCAweDZmLCAweDgwLCAweDAyLCAKKyAgICAweGMyLCAweDZmLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDY3LCAweDgwLCAweDAyLCAweGMyLCAweDY3LCAweGE1LCAKKyAgICAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDVmLCAweDgwLCAweDAyLCAweGMyLCAweDVmLCAweDAyLCAweDYyLCAweDdmLCAweDU0LCAKKyAgICAweGYwLCAweGM0LCAweGE1LCAweGZmLCAweGM0LCAweGE1LCAweDRmLCAweDc1LCAweDMxLCAweDkwLCAweDEyLCAweDdjLCAweDE1LCAweGY1LCAweDMxLCAweDEyLCAKKyAgICAweDdjLCAweDE1LCAweDIyLCAweGNhLCAweDE5LCAweDVlLCAweDIwLCAweDA3LCAweDRjLCAweGEyLCAweDdlLCAweDc0LCAweDI5LCAweGUzLCAweGNhLCAweDc5LCAKKyAgICAweDdhLCAweDc5LCAweGEwLCAweDBiLCAweDc0LCAweDdhLCAweDc5LCAweGIwLCAweDBiLCAweDc0LCAweGRhLCAweDc5LCAweDdlLCAweDMwLCAweDAyLCAweDdlLCAKKyAgICAweDY0LCAweDAwLCAweDAyLCAweDAyLCAweDYyLCAweGRlLCAweGNhLCAweDE5LCAweDVlLCAweDIwLCAweDA3LCAweDRjLCAweGEyLCAweDdlLCAweDc0LCAweDI5LCAKKyAgICAweGUzLCAweGNhLCAweDc5LCAweDdhLCAweDc5LCAweGEwLCAweDBiLCAweDc0LCAweDdhLCAweDc5LCAweGIwLCAweDBiLCAweDc0LCAweDdhLCAweDc5LCAweDYwLCAKKyAgICAweDBiLCAweDc0LCAweGRhLCAweDc5LCAweDdlLCAweDMwLCAweDAzLCAweDdlLCAweDY0LCAweDAwLCAweDAzLCAweDAyLCAweDYyLCAweGRlLCAweGQyLCAweDA0LCAKKyAgICAweDdlLCAweDI3LCAweDAxLCAweGUxLCAweDJkLCAweDI2LCAweGJlLCAweDI0LCAweDA0LCAweDAwLCAweDM4LCAweDJlLCAweDdlLCAweDA3LCAweDAxLCAweGRmLCAKKyAgICAweDdlLCAweDQ0LCAweDA1LCAweGUzLCAweDdlLCAweDc5LCAweGEwLCAweDdhLCAweDA5LCAweGEwLCAweDBiLCAweDA0LCAweDBiLCAweDc0LCAweGJkLCAweDA0LCAKKyAgICAweDY4LCAweDIzLCAweGE1LCAweGRiLCAweGVmLCAweDdhLCAweDI3LCAweDAxLCAweGUxLCAweDdlLCAweDI1LCAweDQ2LCAweDJkLCAweDI2LCAweDdhLCAweDI1LCAKKyAgICAweDQ2LCAweDdhLCAweDA3LCAweDAxLCAweGRmLCAweGRhLCAweDE5LCAweGMyLCAweGQ3LCAweDIyLCAweDc1LCAweDMxLCAweDlhLCAweDEyLCAweDdjLCAweDE1LCAKKyAgICAweGRhLCAweDE5LCAweGQyLCAweGQ3LCAweDIyLCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDgwLCAweGQ3LCAweDQ4LCAweGI2LCAweDQ2LCAweDI1LCAweDQ3LCAKKyAgICAweDFjLCAweDQ5LCAweDE1LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ4LCAweDFiLCAweDQ0LCAweGM2LCAweDQ5LCAweDU5LCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ5LCAweDYwLCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDRjLCAweDBlLCAweDQ5LCAweDdkLCAweDRhLCAKKyAgICAweDc0LCAweDRjLCAweDZkLCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDRiLCAweDczLCAweDQ0LCAweGM2LCAweDRjLCAweGIxLCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDRjLCAweGI4LCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDRmLCAweDY2LCAweDRjLCAweGQ1LCAweDRkLCAKKyAgICAweGNjLCAweDRmLCAweGM1LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDRlLCAweGNiLCAweDQ0LCAweGM2LCAweDUwLCAweDA5LCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDUwLCAweDEwLCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDUyLCAweGJlLCAweDUwLCAweDJkLCAweDUxLCAKKyAgICAweDI0LCAweDUzLCAweDFkLCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDUyLCAweDIzLCAweDQ0LCAweGM2LCAweDUzLCAweDYxLCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDUzLCAweDY4LCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDU2LCAweDE2LCAweDUzLCAweDg1LCAweDU0LCAKKyAgICAweDdjLCAweDU2LCAweDc1LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDU1LCAweDdiLCAweDQ0LCAweGM2LCAweDU2LCAweGI5LCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDU2LCAweGMwLCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDU5LCAweDZlLCAweDU2LCAweGRkLCAweDU3LCAKKyAgICAweGQ0LCAweDU5LCAweGNkLCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDU4LCAweGQzLCAweDQ0LCAweGM2LCAweDVhLCAweDExLCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDVhLCAweDE4LCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDVjLCAweGM2LCAweDVhLCAweDM1LCAweDViLCAKKyAgICAweDJjLCAweDVkLCAweDI1LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDVjLCAweDJiLCAweDQ0LCAweGM2LCAweDVkLCAweDY5LCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDVkLCAweDcwLCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDYwLCAweDFlLCAweDVkLCAweDhkLCAweDVlLCAKKyAgICAweDg0LCAweDYwLCAweDdkLCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDVmLCAweDgzLCAweDQ0LCAweGM2LCAweDYwLCAweGMxLCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDYwLCAweGM4LCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAKKyAgICAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweDQ0LCAweGM2LCAweGNhLCAweDI5LCAweDFlLCAweDUwLCAweDQwLCAKKyAgICAweDBkLCAweDdlLCAweDU0LCAweDBiLCAweDEwLCAweDljLCAweGI1LCAweGE0LCAweDJlLCAweDU0LCAweDY1LCAweDQ4LCAweDg5LCAweDU0LCAweDdlLCAweDM5LCAKKyAgICAweDAwLCAweDdhLCAweDE5LCAweDAwLCAweDBiLCAweDM0LCAweDgwLCAweGU5LCAweDBiLCAweDM4LCAweDAwLCAweDdhLCAweDE5LCAweDAwLCAweDdhLCAweDE5LCAKKyAgICAweDEwLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDAwLCAweDdhLCAweDE5LCAweDAwLCAweDdhLCAweDE5LCAweDEwLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAKKyAgICAweDAwLCAweDdhLCAweDE5LCAweDAwLCAweDdhLCAweDE5LCAweDEwLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDAwLCAweDdhLCAweDE5LCAweDAwLCAweDdhLCAKKyAgICAweDE5LCAweDEwLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDAwLCAweDdhLCAweDE5LCAweDAwLCAweDdhLCAweDE5LCAweDEwLCAweDBiLCAweDM1LCAweDBiLCAKKyAgICAweDM4LCAweDAwLCAweDdhLCAweDE5LCAweDAwLCAweDdhLCAweDE5LCAweDEwLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDAwLCAweDdhLCAweDE5LCAweDAwLCAKKyAgICAweDdhLCAweDE5LCAweDEwLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDAwLCAweDdhLCAweDE5LCAweDAwLCAweDdhLCAweDE5LCAweDEwLCAweDBiLCAweDM1LCAKKyAgICAweDBiLCAweDM4LCAweDAwLCAweDdhLCAweDE5LCAweDAwLCAweDdhLCAweDE5LCAweDEwLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDAwLCAweDdhLCAweDE5LCAKKyAgICAweDAwLCAweDdhLCAweDE5LCAweDEwLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDAwLCAweDdhLCAweDE5LCAweDAwLCAweDdhLCAweDE5LCAweDEwLCAweDBiLCAKKyAgICAweDM1LCAweDBiLCAweDM4LCAweDAwLCAweDdhLCAweDE5LCAweDAwLCAweDdhLCAweDE5LCAweDEwLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDAwLCAweDdhLCAKKyAgICAweDE5LCAweDAwLCAweDdhLCAweDE5LCAweDEwLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDAwLCAweDdhLCAweDE5LCAweDAwLCAweDdhLCAweDE5LCAweDEwLCAKKyAgICAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDAwLCAweDdhLCAweDE5LCAweDAwLCAweDdhLCAweDE5LCAweDEwLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDAwLCAKKyAgICAweDdhLCAweDE5LCAweDAwLCAweDdhLCAweDE5LCAweDEwLCAweDBiLCAweDM1LCAweGRhLCAweDI5LCAweDIyLCAweDFlLCAweDUwLCAweDQwLCAweDBkLCAweDdlLCAKKyAgICAweDU0LCAweDBiLCAweDFjLCAweDljLCAweGI1LCAweGE0LCAweDJlLCAweDU0LCAweDY2LCAweDE2LCAweDg5LCAweDU0LCAweDdlLCAweDE5LCAweDAwLCAweDdhLCAKKyAgICAweDM5LCAweDAwLCAweDBiLCAweDM0LCAweDgwLCAweGU5LCAweDdlLCAweDE5LCAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAweDBiLCAKKyAgICAweDM1LCAweDdlLCAweDE5LCAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAweDBiLCAweDM1LCAweDdlLCAweDE5LCAweDAwLCAweDdlLCAKKyAgICAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAweDBiLCAweDM1LCAweDdlLCAweDE5LCAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAKKyAgICAweDBiLCAweDM1LCAweDdlLCAweDE5LCAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAweDBiLCAweDM1LCAweDdlLCAweDE5LCAweDAwLCAKKyAgICAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAweDBiLCAweDM1LCAweDdlLCAweDE5LCAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAKKyAgICAweDAwLCAweDBiLCAweDM1LCAweDdlLCAweDE5LCAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAweDBiLCAweDM1LCAweDdlLCAweDE5LCAKKyAgICAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAweDBiLCAweDM1LCAweDdlLCAweDE5LCAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAKKyAgICAweDM4LCAweDAwLCAweDBiLCAweDM1LCAweDdlLCAweDE5LCAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAweDBiLCAweDM1LCAweDdlLCAKKyAgICAweDE5LCAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAweDBiLCAweDM1LCAweDdlLCAweDE5LCAweDAwLCAweDdlLCAweDE5LCAweDEwLCAKKyAgICAweDFiLCAweDM4LCAweDAwLCAweDBiLCAweDM1LCAweDdlLCAweDE5LCAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAweDBiLCAweDM1LCAKKyAgICAweDdlLCAweDE5LCAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAweDBiLCAweDM1LCAweDdlLCAweDE5LCAweDAwLCAweDdlLCAweDE5LCAKKyAgICAweDEwLCAweDFiLCAweDM4LCAweDAwLCAweDBiLCAweDM1LCAweDdlLCAweDE5LCAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAweDBiLCAKKyAgICAweDM1LCAweDdlLCAweDE5LCAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAweDBiLCAweDM1LCAweDdlLCAweDE5LCAweDAwLCAweDdlLCAKKyAgICAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAweDBiLCAweDM1LCAweDdlLCAweDE5LCAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAKKyAgICAweDBiLCAweDM1LCAweDdlLCAweDE5LCAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAweDBiLCAweDM1LCAweDdlLCAweDE5LCAweDAwLCAKKyAgICAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAweDBiLCAweDM1LCAweDdlLCAweDE5LCAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAKKyAgICAweDAwLCAweDBiLCAweDM1LCAweDdlLCAweDE5LCAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAweDBiLCAweDM1LCAweDdlLCAweDE5LCAKKyAgICAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAweDBiLCAweDM1LCAweDdlLCAweDE5LCAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAKKyAgICAweDM4LCAweDAwLCAweDBiLCAweDM1LCAweDdlLCAweDE5LCAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAweDBiLCAweDM1LCAweDdlLCAKKyAgICAweDE5LCAweDAwLCAweDdlLCAweDE5LCAweDEwLCAweDFiLCAweDM4LCAweDAwLCAweDBiLCAweDM1LCAweDIyLCAweDY3LCAweDk2LCAweDY5LCAweDYzLCAweDY5LCAKKyAgICAweDdiLCAweDZhLCAweDQ5LCAweDZhLCAweGU0LCAweDZiLCAweDhlLCAweDZiLCAweGE5LCAweDZjLCAweDNiLCAweDZiLCAweGM0LCAweDZjLCAweDA1LCAweDY5LCAKKyAgICAweDk2LCAweDY5LCAweGFhLCAweDdjLCAweGIzLCAweGJlLCAweGIwLCAweDBiLCAweDI4LCAweDE0LCAweDc1LCAweDMxLCAweDA5LCAweDEyLCAweDdjLCAweDE1LCAKKyAgICAweDc1LCAweDZkLCAweDEwLCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDQzLCAweGUxLCAweGMwLCAweGQwLCAweGYxLCAweDIyLCAweGMwLCAweGE4LCAKKyAgICAweGMyLCAweGFmLCAweDIzLCAweDZjLCAweGFhLCAweDJlLCAweDU0LCAweDY3LCAweDRiLCAweDBiLCAweDU4LCAweDUwLCAweDg5LCAweDU0LCAweDAxLCAweDAyLCAKKyAgICAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDc1LCAweDMxLCAweGIwLCAweDEyLCAweDdjLCAweDE1LCAweDBhLCAweDMyLCAweDA5LCAweGIzLCAKKyAgICAweDY3LCAweDhlLCAweDQyLCAweDMyLCAweDE5LCAweDQzLCAweDAwLCAweDM2LCAweGQwLCAweGE4LCAweDIyLCAweDdjLCAweGIyLCAweDIzLCAweDBhLCAweDNiLCAKKyAgICAweDQ5LCAweDMzLCAweDY3LCAweGNiLCAweDBhLCAweDIyLCAweDA5LCAweDMyLCAweDAwLCAweDM2LCAweDA5LCAweGIyLCAweDY3LCAweDhlLCAweGE1LCAweGJiLCAKKyAgICAweDAwLCAweDA1LCAweGY0LCAweDUyLCAweDMzLCAweDgwLCAweDAyLCAweDQyLCAweDMzLCAweDg5LCAweDM0LCAweDY3LCAweGRiLCAweDY4LCAweDA5LCAweDY4LCAKKyAgICAweDM3LCAweDY4LCAweDY1LCAweDY4LCAweDkzLCAweDY4LCAweGMxLCAweDY4LCAweGVmLCAweDY5LCAweDFkLCAweDEyLCAweDQxLCAweGI1LCAweGQyLCAweDI4LCAKKyAgICAweGQyLCAweDA4LCAweGMyLCAweDQwLCAweGMyLCAweDQ4LCAweGMyLCAweDM4LCAweGMyLCAweDMwLCAweDZkLCAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGNmLCAKKyAgICAweDdlLCAweDA0LCAweDAwLCAweDIwLCAweDdhLCAweDA3LCAweDAxLCAweGFmLCAweDdlLCAweDA0LCAweDAwLCAweDM4LCAweDdhLCAweDA3LCAweDAxLCAweGJmLCAKKyAgICAweDEyLCAweDQxLCAweDE2LCAweDEyLCAweDYwLCAweGNmLCAweDAyLCAweDY5LCAweDRiLCAweDEyLCAweDQxLCAweGQ0LCAweGQyLCAweDI5LCAweGQyLCAweDA5LCAKKyAgICAweGMyLCAweDQxLCAweGMyLCAweDQ5LCAweGMyLCAweDM5LCAweGMyLCAweDMxLCAweDZkLCAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGQwLCAweDdlLCAweDA0LCAKKyAgICAweDAwLCAweDIwLCAweDdhLCAweDA3LCAweDAxLCAweGIxLCAweDdlLCAweDA0LCAweDAwLCAweDM4LCAweDdhLCAweDA3LCAweDAxLCAweGMxLCAweDEyLCAweDQxLCAKKyAgICAweDE2LCAweDEyLCAweDYxLCAweDA1LCAweDAyLCAweDY5LCAweDRiLCAweDEyLCAweDQxLCAweGYzLCAweGQyLCAweDJhLCAweGQyLCAweDBhLCAweGMyLCAweDQyLCAKKyAgICAweGMyLCAweDRhLCAweGMyLCAweDNhLCAweGMyLCAweDMyLCAweDZkLCAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGQxLCAweDdlLCAweDA0LCAweDAwLCAweDIwLCAKKyAgICAweDdhLCAweDA3LCAweDAxLCAweGIzLCAweDdlLCAweDA0LCAweDAwLCAweDM4LCAweDdhLCAweDA3LCAweDAxLCAweGMzLCAweDEyLCAweDQxLCAweDE2LCAweDEyLCAKKyAgICAweDYxLCAweDNiLCAweDAyLCAweDY5LCAweDRiLCAweDEyLCAweDQyLCAweDEyLCAweGQyLCAweDJiLCAweGQyLCAweDBiLCAweGMyLCAweDQzLCAweGMyLCAweDRiLCAKKyAgICAweGMyLCAweDNiLCAweGMyLCAweDMzLCAweDZkLCAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGQyLCAweDdlLCAweDA0LCAweDAwLCAweDIwLCAweDdhLCAweDA3LCAKKyAgICAweDAxLCAweGI1LCAweDdlLCAweDA0LCAweDAwLCAweDM4LCAweDdhLCAweDA3LCAweDAxLCAweGM1LCAweDEyLCAweDQxLCAweDE2LCAweDEyLCAweDYxLCAweDcxLCAKKyAgICAweDAyLCAweDY5LCAweDRiLCAweDEyLCAweDQyLCAweDMxLCAweGQyLCAweDJjLCAweGQyLCAweDBjLCAweGMyLCAweDQ0LCAweGMyLCAweDRjLCAweGMyLCAweDNjLCAKKyAgICAweGMyLCAweDM0LCAweDZkLCAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGQzLCAweDdlLCAweDA0LCAweDAwLCAweDIwLCAweDdhLCAweDA3LCAweDAxLCAweGI3LCAKKyAgICAweDdlLCAweDA0LCAweDAwLCAweDM4LCAweDdhLCAweDA3LCAweDAxLCAweGM3LCAweDEyLCAweDQxLCAweDE2LCAweDEyLCAweDYxLCAweGE3LCAweDAyLCAweDY5LCAKKyAgICAweDRiLCAweDEyLCAweDQyLCAweDUwLCAweGQyLCAweDJkLCAweGQyLCAweDBkLCAweGMyLCAweDQ1LCAweGMyLCAweDRkLCAweGMyLCAweDNkLCAweGMyLCAweDM1LCAKKyAgICAweDZkLCAweDAwLCAweDdhLCAweDAzLCAweDAxLCAweGQ0LCAweDdlLCAweDA0LCAweDAwLCAweDIwLCAweDdhLCAweDA3LCAweDAxLCAweGI5LCAweDdlLCAweDA0LCAKKyAgICAweDAwLCAweDM4LCAweDdhLCAweDA3LCAweDAxLCAweGM5LCAweDEyLCAweDQxLCAweDE2LCAweDEyLCAweDYxLCAweGRkLCAweDAyLCAweDY5LCAweDRiLCAweDEyLCAKKyAgICAweDQyLCAweDZmLCAweGQyLCAweDJlLCAweGQyLCAweDBlLCAweGMyLCAweDQ2LCAweGMyLCAweDRlLCAweGMyLCAweDNlLCAweGMyLCAweDM2LCAweDZkLCAweDAwLCAKKyAgICAweDdhLCAweDAzLCAweDAxLCAweGQ1LCAweDdlLCAweDA0LCAweDAwLCAweDIwLCAweDdhLCAweDA3LCAweDAxLCAweGJiLCAweDdlLCAweDA0LCAweDAwLCAweDM4LCAKKyAgICAweDdhLCAweDA3LCAweDAxLCAweGNiLCAweDEyLCAweDQxLCAweDE2LCAweDEyLCAweDYyLCAweDEzLCAweDAyLCAweDY5LCAweDRiLCAweDEyLCAweDQyLCAweDhlLCAKKyAgICAweGQyLCAweDJmLCAweGQyLCAweDBmLCAweGMyLCAweDQ3LCAweGMyLCAweDRmLCAweGMyLCAweDNmLCAweGMyLCAweDM3LCAweDZkLCAweDAwLCAweDdhLCAweDAzLCAKKyAgICAweDAxLCAweGQ2LCAweDdlLCAweDA0LCAweDAwLCAweDIwLCAweDdhLCAweDA3LCAweDAxLCAweGJkLCAweDdlLCAweDA0LCAweDAwLCAweDM4LCAweDdhLCAweDA3LCAKKyAgICAweDAxLCAweGNkLCAweDEyLCAweDQxLCAweDE2LCAweDEyLCAweDYyLCAweDQ5LCAweDAyLCAweDY5LCAweDRiLCAweDdlLCAweGEwLCAweGQwLCAweDdlLCAweDYwLCAKKyAgICAweDBmLCAweDEyLCAweDYyLCAweGI2LCAweDQwLCAweDBjLCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAKKyAgICAweGMyLCAweGQ3LCAweDIyLCAweDc1LCAweDMxLCAweGIxLCAweDEyLCAweDdjLCAweDE1LCAweDBhLCAweDUyLCAweDIzLCAweDZkLCAweDAwLCAweDU5LCAweDA1LCAKKyAgICAweDAwLCAweDQ4LCAweDEyLCAweDQxLCAweDdlLCAweDEyLCAweDQxLCAweDlhLCAweGQwLCAweGE4LCAweDIyLCAweDc1LCAweDMxLCAweGIyLCAweDEyLCAweDdjLCAKKyAgICAweDE1LCAweDBhLCAweDIyLCAweDA5LCAweGIyLCAweDY3LCAweDhlLCAweDQyLCAweDIzLCAweDdlLCAweGIwLCAweDljLCAweDE5LCAweGIyLCAweDAxLCAweGNmLCAKKyAgICAweDEyLCAweDMxLCAweDg1LCAweGQwLCAweGE4LCAweDIyLCAweDc1LCAweDMxLCAweGI3LCAweDEyLCAweDdjLCAweDE1LCAweDBhLCAweDIyLCAweDA5LCAweGIyLCAKKyAgICAweDY3LCAweDhlLCAweDQyLCAweDI0LCAweDEyLCAweDM1LCAweDNkLCAweGQwLCAweGE4LCAweDIyLCAweDc1LCAweDMxLCAweGI5LCAweDEyLCAweDdjLCAweDE1LCAKKyAgICAweDBhLCAweDMyLCAweDA5LCAweGIzLCAweDY3LCAweDhlLCAweDQyLCAweDM0LCAweDE5LCAweDQzLCAweDAwLCAweDNlLCAweDEyLCAweDY5LCAweGMyLCAweGQwLCAKKyAgICAweGE4LCAweDIyLCAweDdjLCAweGIyLCAweDIzLCAweDBhLCAweDBiLCAweDdjLCAweGI0LCAweDIwLCAweGUwLCAweDA0LCAweDZkLCAweDMzLCAweDgwLCAweDA0LCAKKyAgICAweDQ5LCAweDMwLCAweDAxLCAweDhmLCAweDdlLCAweGEwLCAweGQ4LCAweGE1LCAweGVmLCAweGNhLCAweDBiLCAweGNhLCAweDI5LCAweDEyLCAweDYyLCAweGI2LCAKKyAgICAweGRhLCAweDI5LCAweGRhLCAweDBiLCAweDQwLCAweDYyLCAweDc1LCAweDMxLCAweGJhLCAweDEyLCAweDdjLCAweDE1LCAweDdjLCAweGI0LCAweDMwLCAweGUwLCAKKyAgICAweDFlLCAweDZkLCAweDMzLCAweDU5LCAweDMwLCAweDAxLCAweDhmLCAweDdlLCAweDM0LCAweDA5LCAweGUzLCAweDBhLCAweDgyLCAweDdlLCAweDk0LCAweDA0LCAKKyAgICAweDAwLCAweGFkLCAweDg5LCAweDJkLCAweDM5LCAweDU5LCAweDMwLCAweDAxLCAweDZmLCAweDU5LCAweDMwLCAweDAxLCAweDdmLCAweDdjLCAweGI0LCAweDMwLCAKKyAgICAweGUxLCAweDEwLCAweDdlLCAweDA0LCAweDgwLCAweDAwLCAweDRjLCAweDAyLCAweDA5LCAweGIwLCAweDAwLCAweDA4LCAweDQ0LCAweDA0LCAweDE5LCAweGIwLCAKKyAgICAweDAwLCAweDA4LCAweDBhLCAweDAyLCAweDA5LCAweGIwLCAweDY3LCAweDhlLCAweDQyLCAweDIxLCAweGY0LCAweDUyLCAweDM0LCAweDdjLCAweGIyLCAweDIzLCAKKyAgICAweDBhLCAweDBiLCAweGNhLCAweDE5LCAweDQ5LCAweDAwLCAweDMwLCAweGQ1LCAweDk5LCAweDA0LCAweGRhLCAweDE5LCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAKKyAgICAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweGMyLCAweGQ3LCAweDIyLCAweDdlLCAweDA0LCAweDgwLCAweDAwLCAweDRjLCAweDAyLCAweDA5LCAKKyAgICAweDMwLCAweDAwLCAweDBjLCAweDc0LCAweGJmLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAweDA5LCAweGIwLCAweDAwLCAweDA4LCAweDE5LCAweDMwLCAweDAwLCAKKyAgICAweDBjLCAweDdjLCAweDc0LCAweDVlLCAweDcwLCAweDAxLCAweDY4LCAweDEyLCAweDQ0LCAweDQwLCAweGNhLCAweGI4LCAweDA5LCAweGIwLCAweDAwLCAweDEwLCAKKyAgICAweDQ0LCAweDAyLCAweDE5LCAweGIwLCAweDAwLCAweDEwLCAweGRhLCAweGI4LCAweDgwLCAweDAyLCAweDU0LCAweGJmLCAweDdjLCAweDc0LCAweDVlLCAweDcwLCAKKyAgICAweDA4LCAweDY4LCAweDA0LCAweDQ0LCAweDA4LCAweDgwLCAweDAyLCAweDU0LCAweGY3LCAweDA5LCAweDMwLCAweDAwLCAweDBjLCAweGNhLCAweGI4LCAweDc0LCAKKyAgICAweGJmLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAweGRhLCAweGI4LCAweDE5LCAweGIwLCAweDAwLCAweDA4LCAweDE5LCAweDMwLCAweDAwLCAweDBjLCAweDBhLCAKKyAgICAweDYyLCAweDA5LCAweGI2LCAweDY3LCAweDhlLCAweDNlLCAweDIwLCAweDBhLCAweDYyLCAweDdjLCAweDc0LCAweDVlLCAweDcwLCAweDAyLCAweDY4LCAweDIwLCAKKyAgICAweDQyLCAweDI3LCAweGNhLCAweGI4LCAweDc0LCAweDYxLCAweDE5LCAweGIwLCAweDAwLCAweDA4LCAweDdlLCAweDQ0LCAweDAwLCAweDEwLCAweDU5LCAweDQ2LCAKKyAgICAweDAxLCAweGJmLCAweDA5LCAweGIwLCAweDAwLCAweDEwLCAweDQ0LCAweDAxLCAweDE5LCAweGIwLCAweDAwLCAweDEwLCAweGRhLCAweGI4LCAweDgwLCAweDExLCAKKyAgICAweGY0LCAweDUyLCAweDI3LCAweDc0LCAweGExLCAweDE5LCAweGIwLCAweDAwLCAweDA4LCAweDdlLCAweDQ0LCAweDAwLCAweDM4LCAweDU5LCAweDQ2LCAweDAxLCAKKyAgICAweGJmLCAweGQwLCAweGE4LCAweDIyLCAweDdjLCAweDc0LCAweDdlLCAweDA0LCAweDgwLCAweDAwLCAweDRjLCAweDAyLCAweDBhLCAweDYyLCAweDA5LCAweGI2LCAKKyAgICAweDY3LCAweDhlLCAweGE1LCAweGZkLCAweGY0LCAweGE1LCAweGZlLCAweGNhLCAweDI4LCAweDNlLCAweDIwLCAweDBhLCAweDYyLCAweGE1LCAweGVlLCAweDUyLCAKKyAgICAweDI2LCAweDdlLCAweDQ0LCAweDAwLCAweDIwLCAweDU5LCAweDQ2LCAweDAxLCAweGFmLCAweGRhLCAweDI4LCAweDA5LCAweDMwLCAweDAwLCAweDBjLCAweDc0LCAKKyAgICAweGJmLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAweDA5LCAweGIwLCAweDAwLCAweDA4LCAweDdjLCAweDc0LCAweDVlLCAweDcwLCAweDAxLCAweDY4LCAweDBjLCAKKyAgICAweDQ0LCAweDgwLCAweGNhLCAweGI4LCAweGE1LCAweGVkLCAweDQyLCAweDJhLCAweGRhLCAweGI4LCAweDgwLCAweDBhLCAweDU0LCAweDdmLCAweGNhLCAweGI4LCAKKyAgICAweGE1LCAweGVlLCAweDUyLCAweDJhLCAweGRhLCAweGI4LCAweDdjLCAweDc0LCAweDVlLCAweDcwLCAweDA4LCAweDY4LCAweDA0LCAweDQ0LCAweDAyLCAweDgwLCAKKyAgICAweDAyLCAweDU0LCAweGZkLCAweDE5LCAweGIwLCAweDAwLCAweDA4LCAweDE5LCAweDMwLCAweDAwLCAweDBjLCAweDdjLCAweDc0LCAweDVlLCAweDcwLCAweDAyLCAKKyAgICAweDY4LCAweDEwLCAweGE1LCAweGVkLCAweDQyLCAweDI4LCAweDQyLCAweDI2LCAweDdlLCAweDQ0LCAweDAwLCAweDA4LCAweDU5LCAweDQ2LCAweDAxLCAweGFmLCAKKyAgICAweDgwLCAweDA0LCAweGE1LCAweGVlLCAweDUyLCAweDI4LCAweDdjLCAweDc0LCAweDVlLCAweDcwLCAweDA0LCAweDY4LCAweDEwLCAweGE1LCAweGVkLCAweDQyLCAKKyAgICAweDI5LCAweDQyLCAweDI2LCAweDdlLCAweDQ0LCAweDAwLCAweDA4LCAweDU5LCAweDQ2LCAweDAxLCAweGFmLCAweDgwLCAweDBiLCAweGE1LCAweGVlLCAweDUyLCAKKyAgICAweDI5LCAweDdjLCAweDc0LCAweDVlLCAweDcwLCAweDAyLCAweDc4LCAweDAwLCAweDEyLCAweDQyLCAweGFkLCAweGQwLCAweGE4LCAweDIyLCAweDdlLCAweDA0LCAKKyAgICAweDgwLCAweDAwLCAweDRjLCAweDAyLCAweDA5LCAweDMwLCAweDAwLCAweDBjLCAweDc0LCAweGJmLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAweDE5LCAweDQwLCAKKyAgICAweDAwLCAweDEwLCAweDE5LCAweDMwLCAweDAwLCAweDBjLCAweGQwLCAweGE4LCAweDIyLCAweDdlLCAweDA0LCAweDgwLCAweDAwLCAweDRjLCAweDAyLCAweDA5LCAKKyAgICAweDMwLCAweDAwLCAweDBjLCAweDc0LCAweGJmLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAweDE5LCAweDQwLCAweDAwLCAweDE4LCAweDE5LCAweDMwLCAweDAwLCAKKyAgICAweDBjLCAweGQwLCAweGE4LCAweDIyLCAweDc1LCAweDMxLCAweGI1LCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweDA0LCAweDgwLCAweDAwLCAweDRjLCAweDAyLCAKKyAgICAweDA5LCAweGIwLCAweDAwLCAweDBjLCAweDQ0LCAweDQwLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAweGU1LCAweDZlLCAweGI0LCAweDA3LCAweDIzLCAweDA5LCAKKyAgICAweGIwLCAweDAwLCAweDEwLCAweDRlLCAweGIwLCAweDAyLCAweDE5LCAweGIwLCAweDAwLCAweDEwLCAweDA5LCAweDMwLCAweDAwLCAweDBjLCAweDc0LCAweGJmLCAKKyAgICAweDE5LCAweGIwLCAweDAwLCAweDBjLCAweDA5LCAweGIwLCAweDAwLCAweDA0LCAweDU0LCAweGY3LCAweDE5LCAweGIwLCAweDAwLCAweDA0LCAweDE5LCAweDMwLCAKKyAgICAweDAwLCAweDBjLCAweGQwLCAweGE4LCAweDIyLCAweDc1LCAweDMxLCAweGI2LCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweDA0LCAweDgwLCAweDAwLCAweDRjLCAKKyAgICAweDAyLCAweGU1LCAweDZlLCAweGI0LCAweDA3LCAweDE4LCAweDA5LCAweDMwLCAweDAwLCAweDBjLCAweDc0LCAweGJmLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAKKyAgICAweDA5LCAweGIwLCAweDAwLCAweDA0LCAweDQ0LCAweDA4LCAweDE5LCAweGIwLCAweDAwLCAweDA0LCAweDE5LCAweDMwLCAweDAwLCAweDBjLCAweDA5LCAweGIwLCAKKyAgICAweDAwLCAweDBjLCAweDU0LCAweGJmLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAweGQwLCAweGE4LCAweDIyLCAweDc1LCAweDMxLCAweGI0LCAweDEyLCAweDdjLCAKKyAgICAweDE1LCAweDdhLCAweDIxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDQxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDBhLCAweDMyLCAweDA5LCAKKyAgICAweGIzLCAweDY3LCAweDhlLCAweDQyLCAweDM1LCAweDEyLCAweDZjLCAweDViLCAweGQwLCAweGE4LCAweDIyLCAweDdlLCAweGIwLCAweDAxLCAweDdlLCAweGEwLCAKKyAgICAweGM4LCAweDdjLCAweDY0LCAweDEyLCAweDYyLCAweGI2LCAweDQwLCAweDEzLCAweDBhLCAweDMyLCAweDA5LCAweGIzLCAweDY3LCAweDhlLCAweGY0LCAweDUyLCAKKyAgICAweDM1LCAweGMwLCAweGYxLCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZmLCAweGQ5LCAweGQwLCAweGYxLCAweDIyLCAweDZjLCAweDhjLCAweDZjLCAweGQzLCAKKyAgICAweDZkLCAweDFhLCAweDZkLCAweDYxLCAweDZkLCAweGE4LCAweDZkLCAweGVmLCAweDZlLCAweDM2LCAweDZlLCAweDdkLCAweDc1LCAweDMxLCAweDU1LCAweDEyLCAKKyAgICAweDdjLCAweDE1LCAweDc1LCAweDMxLCAweDAwLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDYxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDcxLCAKKyAgICAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweDE3LCAweDAxLCAweDdmLCAweDdlLCAweDI3LCAweDAxLCAweDhmLCAweDJkLCAweDIzLCAweDdlLCAweDA5LCAKKyAgICAweGIwLCAweDBiLCAweDA0LCAweDdhLCAweDE5LCAweGIwLCAweDBiLCAweDE0LCAweGJlLCAweDE0LCAweDBkLCAweGUyLCAweDM4LCAweDBmLCAweDFiLCAweDM0LCAKKyAgICAweDc4LCAweGVjLCAweDdhLCAweDE3LCAweDAxLCAweDdmLCAweDdhLCAweDI3LCAweDAxLCAweDhmLCAweDAyLCAweDQ2LCAweDBmLCAweDdlLCAweDE0LCAweDA5LCAKKyAgICAweGUzLCAweDgwLCAweGViLCAweDc1LCAweDMxLCAweDU1LCAweDEyLCAweDdjLCAweDE1LCAweDc1LCAweDMxLCAweDAxLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAKKyAgICAweDYxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDcxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweDE3LCAweDAxLCAweDgxLCAweDdlLCAKKyAgICAweDI3LCAweDAxLCAweDkxLCAweDJkLCAweDIzLCAweDdlLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDdhLCAweDE5LCAweGIwLCAweDBiLCAweDE0LCAweGJlLCAKKyAgICAweDE0LCAweDExLCAweGUyLCAweDM4LCAweDBmLCAweDFiLCAweDM0LCAweDc4LCAweGVjLCAweDdhLCAweDE3LCAweDAxLCAweDgxLCAweDdhLCAweDI3LCAweDAxLCAKKyAgICAweDkxLCAweDAyLCAweDQ5LCAweDY3LCAweDdlLCAweDE0LCAweDBkLCAweGUzLCAweDgwLCAweGViLCAweDc1LCAweDMxLCAweDU1LCAweDEyLCAweDdjLCAweDE1LCAKKyAgICAweDc1LCAweDMxLCAweDAyLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDYxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDcxLCAweDMxLCAweDEyLCAKKyAgICAweDdjLCAweDE1LCAweDdlLCAweDE3LCAweDAxLCAweDgzLCAweDdlLCAweDI3LCAweDAxLCAweDkzLCAweDJkLCAweDIzLCAweDdlLCAweDA5LCAweGIwLCAweDBiLCAKKyAgICAweDA0LCAweDdhLCAweDE5LCAweGIwLCAweDBiLCAweDE0LCAweGJlLCAweDE0LCAweDE1LCAweGUyLCAweDM4LCAweDBmLCAweDFiLCAweDM0LCAweDc4LCAweGVjLCAKKyAgICAweDdhLCAweDE3LCAweDAxLCAweDgzLCAweDdhLCAweDI3LCAweDAxLCAweDkzLCAweDAyLCAweDRjLCAweGJmLCAweDdlLCAweDE0LCAweDExLCAweGUzLCAweDgwLCAKKyAgICAweGViLCAweDc1LCAweDMxLCAweDU1LCAweDEyLCAweDdjLCAweDE1LCAweDc1LCAweDMxLCAweDAzLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDYxLCAweDMxLCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDcxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweDE3LCAweDAxLCAweDg1LCAweDdlLCAweDI3LCAweDAxLCAKKyAgICAweDk1LCAweDJkLCAweDIzLCAweDdlLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDdhLCAweDE5LCAweGIwLCAweDBiLCAweDE0LCAweGJlLCAweDE0LCAweDE5LCAKKyAgICAweGUyLCAweDM4LCAweDBmLCAweDFiLCAweDM0LCAweDc4LCAweGVjLCAweDdhLCAweDE3LCAweDAxLCAweDg1LCAweDdhLCAweDI3LCAweDAxLCAweDk1LCAweDAyLCAKKyAgICAweDUwLCAweDE3LCAweDdlLCAweDE0LCAweDE1LCAweGUzLCAweDgwLCAweGViLCAweDc1LCAweDMxLCAweDU1LCAweDEyLCAweDdjLCAweDE1LCAweDc1LCAweDMxLCAKKyAgICAweDA0LCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDYxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDcxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAKKyAgICAweDdlLCAweDE3LCAweDAxLCAweDg3LCAweDdlLCAweDI3LCAweDAxLCAweDk3LCAweDJkLCAweDIzLCAweDdlLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDdhLCAKKyAgICAweDE5LCAweGIwLCAweDBiLCAweDE0LCAweGJlLCAweDE0LCAweDFkLCAweGUyLCAweDM4LCAweDBmLCAweDFiLCAweDM0LCAweDc4LCAweGVjLCAweDdhLCAweDE3LCAKKyAgICAweDAxLCAweDg3LCAweDdhLCAweDI3LCAweDAxLCAweDk3LCAweDAyLCAweDUzLCAweDZmLCAweDdlLCAweDE0LCAweDE5LCAweGUzLCAweDgwLCAweGViLCAweDc1LCAKKyAgICAweDMxLCAweDU1LCAweDEyLCAweDdjLCAweDE1LCAweDc1LCAweDMxLCAweDA1LCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDYxLCAweDMxLCAweDEyLCAweDdjLCAKKyAgICAweDE1LCAweDdhLCAweDcxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweDE3LCAweDAxLCAweDg5LCAweDdlLCAweDI3LCAweDAxLCAweDk5LCAweDJkLCAKKyAgICAweDIzLCAweDdlLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDdhLCAweDE5LCAweGIwLCAweDBiLCAweDE0LCAweGJlLCAweDE0LCAweDIxLCAweGUyLCAweDM4LCAKKyAgICAweDBmLCAweDFiLCAweDM0LCAweDc4LCAweGVjLCAweDdhLCAweDE3LCAweDAxLCAweDg5LCAweDdhLCAweDI3LCAweDAxLCAweDk5LCAweDAyLCAweDU2LCAweGM3LCAKKyAgICAweDdlLCAweDE0LCAweDFkLCAweGUzLCAweDgwLCAweGViLCAweDc1LCAweDMxLCAweDU1LCAweDEyLCAweDdjLCAweDE1LCAweDc1LCAweDMxLCAweDA2LCAweDEyLCAKKyAgICAweDdjLCAweDE1LCAweDdhLCAweDYxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDcxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweDE3LCAKKyAgICAweDAxLCAweDhiLCAweDdlLCAweDI3LCAweDAxLCAweDliLCAweDJkLCAweDIzLCAweDdlLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDdhLCAweDE5LCAweGIwLCAKKyAgICAweDBiLCAweDE0LCAweGJlLCAweDE0LCAweDI1LCAweGUyLCAweDM4LCAweDBmLCAweDFiLCAweDM0LCAweDc4LCAweGVjLCAweDdhLCAweDE3LCAweDAxLCAweDhiLCAKKyAgICAweDdhLCAweDI3LCAweDAxLCAweDliLCAweDAyLCAweDVhLCAweDFmLCAweDdlLCAweDE0LCAweDIxLCAweGUzLCAweDgwLCAweGViLCAweDc1LCAweDMxLCAweDU1LCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweDc1LCAweDMxLCAweDA3LCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDYxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAKKyAgICAweDcxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweDE3LCAweDAxLCAweDhkLCAweDdlLCAweDI3LCAweDAxLCAweDlkLCAweDJkLCAweDIzLCAweDdlLCAKKyAgICAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDdhLCAweDE5LCAweGIwLCAweDBiLCAweDE0LCAweGJlLCAweDE0LCAweDI5LCAweGUyLCAweDM4LCAweDBmLCAweDFiLCAKKyAgICAweDM0LCAweDc4LCAweGVjLCAweDdhLCAweDE3LCAweDAxLCAweDhkLCAweDdhLCAweDI3LCAweDAxLCAweDlkLCAweDAyLCAweDVkLCAweDc3LCAweDdlLCAweDE0LCAKKyAgICAweDI1LCAweGUzLCAweDgwLCAweGViLCAweGNhLCAweGI4LCAweGMwLCAweGYxLCAweDc1LCAweDMxLCAweDAyLCAweDEyLCAweDdjLCAweDE1LCAweGU1LCAweGMwLCAKKyAgICAweDU0LCAweDAzLCAweDY4LCAweDA1LCAweDEyLCAweDc1LCAweGNkLCAweDgwLCAweGY1LCAweDMwLCAweGMyLCAweDA4LCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAKKyAgICAweDZmLCAweGQ5LCAweDgwLCAweDE0LCAweDMwLCAweGMzLCAweDA4LCAweDc1LCAweGYxLCAweDAxLCAweDEyLCAweDZlLCAweGZkLCAweDgwLCAweDA5LCAweDMwLCAKKyAgICAweGM0LCAweDA2LCAweDc1LCAweGYxLCAweDAyLCAweDEyLCAweDcwLCAweGU5LCAweGQwLCAweGYxLCAweGRhLCAweGI4LCAweDMyLCAweDc1LCAweDMxLCAweDEwLCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweGNhLCAweDBiLCAweGNhLCAweDM5LCAweGNhLCAweDU5LCAweGMyLCAweGMzLCAweGE5LCAweDIxLCAweGUyLCAweDVjLCAweGU1LCAKKyAgICAweGU1LCAweDU0LCAweGMwLCAweDY4LCAweDRmLCAweGU1LCAweGU2LCAweDZjLCAweGFhLCAweDdlLCAweDM3LCAweDAxLCAweGRiLCAweDJkLCAweDM1LCAweGJlLCAKKyAgICAweDM0LCAweDA0LCAweDAwLCAweDM4LCAweDRhLCAweDdhLCAweDM3LCAweDAxLCAweGRiLCAweDdlLCAweDM3LCAweDAxLCAweGQ5LCAweDdkLCAweDQzLCAweDJkLCAKKyAgICAweDQ1LCAweGJlLCAweDQ0LCAweDA5LCAweGUyLCAweDM4LCAweDQwLCAweDdhLCAweDQ3LCAweDAxLCAweGQ5LCAweDc1LCAweDMxLCAweDExLCAweDEyLCAweDdjLCAKKyAgICAweDE1LCAweDdhLCAweGIxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDEyLCAweDcxLCAweGI4LCAweGE5LCAweDIxLCAweGU1LCAweDFmLCAweGE5LCAweGQ0LCAKKyAgICAweGU0LCAweGE5LCAweDI0LCAweGU0LCAweGZjLCAweGMyLCAweGMzLCAweGE5LCAweDIxLCAweGUyLCAweDNiLCAweGU1LCAweGU1LCAweDU0LCAweGMwLCAweDc4LCAKKyAgICAweGI0LCAweDEyLCAweDc0LCAweDVhLCAweGRhLCAweDU5LCAweGRhLCAweDM5LCAweGRhLCAweDBiLCAweDIyLCAweDgwLCAweDI5LCAweDgwLCAweDU4LCAweDc1LCAKKyAgICAweDMxLCAweDE2LCAweDEyLCAweDdjLCAweDE1LCAweDgwLCAweGVkLCAweDc1LCAweDMxLCAweDEyLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweGIxLCAweDMxLCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweDllLCAweDQ0LCAweDA5LCAweGUzLCAweDlkLCAweDU0LCAweDEyLCAweDcxLCAweGI4LCAweDdlLCAweDM0LCAweDA1LCAweGUzLCAKKyAgICAweDdkLCAweDU0LCAweDJkLCAweDQzLCAweDgwLCAweGExLCAweGU1LCAweGU1LCAweDU0LCAweDAzLCAweDc4LCAweDEyLCAweDc1LCAweDMxLCAweDEzLCAweDEyLCAKKyAgICAweDdjLCAweDE1LCAweDdlLCAweDBmLCAweDI5LCAweGZmLCAweDBiLCAweDBjLCAweDdhLCAweDBmLCAweDI5LCAweGZmLCAweDgwLCAweGE3LCAweDc1LCAweDMxLCAKKyAgICAweDE0LCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweDBmLCAweDJhLCAweDAzLCAweDBiLCAweDBjLCAweDdhLCAweDBmLCAweDJhLCAweDAzLCAweGE5LCAweGQ3LCAKKyAgICAweGU0LCAweGE5LCAweDI3LCAweGU0LCAweGZjLCAweDgwLCAweDlkLCAweDc1LCAweDMxLCAweDE1LCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweDBmLCAweDJhLCAKKyAgICAweDA3LCAweDBiLCAweDBjLCAweDdhLCAweDBmLCAweDJhLCAweDA3LCAweDgwLCAweGU1LCAweDc1LCAweDMxLCAweDE4LCAweDEyLCAweDdjLCAweDE1LCAweGNhLCAKKyAgICAweDA5LCAweGNhLCAweDM5LCAweGNhLCAweDJiLCAweGMyLCAweGMyLCAweGE5LCAweDIxLCAweGYyLCAweDUyLCAweGU1LCAweGY1LCAweDMzLCAweDgyLCAweGU3LCAKKyAgICAweDQwLCAweDQ0LCAweDdlLCAweDM3LCAweDAxLCAweGUxLCAweDdlLCAweDU0LCAweDAwLCAweDQwLCAweDlkLCAweDM1LCAweDQwLCAweDQzLCAweDdhLCAweDM3LCAKKyAgICAweDAxLCAweGUxLCAweDdlLCAweDM3LCAweDAxLCAweGRkLCAweDdkLCAweDQzLCAweDJkLCAweDQ1LCAweGJlLCAweDQ0LCAweDA1LCAweGUyLCAweDM4LCAweDUyLCAKKyAgICAweDdhLCAweDQ3LCAweDAxLCAweGRkLCAweDdkLCAweDQ1LCAweDEyLCAweDczLCAweDE2LCAweGE5LCAweDIwLCAweGY1LCAweDIyLCAweDc1LCAweDMxLCAweDE5LCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDkxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDgxLCAweGY3LCAweDdhLCAweDkxLCAweGY2LCAweGU1LCAKKyAgICAweGY1LCAweDMzLCAweDgyLCAweGU3LCAweDUwLCAweGJjLCAweGRhLCAweDJiLCAweGRhLCAweDM5LCAweGRhLCAweDA5LCAweDIyLCAweDgwLCAweDQxLCAweDgwLCAKKyAgICAweDY0LCAweDJkLCAweDUzLCAweDZkLCAweDMzLCAweDcwLCAweGI3LCAweDdlLCAweDA0LCAweDAxLCAweGUzLCAweDdhLCAweDA3LCAweDAxLCAweGRmLCAweDdhLCAKKyAgICAweDA3LCAweDAxLCAweGRkLCAweGE5LCAweDMyLCAweGYyLCAweGRmLCAweDg1LCAweDMwLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDc1LCAweGY2LCAweDAwLCAKKyAgICAweDgwLCAweGQ0LCAweGNhLCAweDU5LCAweDllLCAweDQ0LCAweDA1LCAweGUzLCAweDlkLCAweDU0LCAweDEyLCAweDczLCAweDE2LCAweDdlLCAweDM0LCAweDAxLCAKKyAgICAweGUzLCAweDdkLCAweDU0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGRkLCAweDEyLCAweDczLCAweDE2LCAweGRhLCAweDQ5LCAweDgwLCAweDk5LCAKKyAgICAweGU1LCAweGY1LCAweDU0LCAweDAzLCAweDc4LCAweDFmLCAweDdlLCAweDBmLCAweDI5LCAweGVmLCAweDBiLCAweDBjLCAweDdhLCAweDBmLCAweDI5LCAweGVmLCAKKyAgICAweDgwLCAweDlkLCAweDdlLCAweDBmLCAweDI5LCAweGY3LCAweDBiLCAweDBjLCAweDdhLCAweDBmLCAweDI5LCAweGY3LCAweGE5LCAweGQ3LCAweGY0LCAweGE5LCAKKyAgICAweDI3LCAweGY0LCAweGZjLCAweDgwLCAweDhhLCAweDdlLCAweDBmLCAweDI5LCAweGYzLCAweDBiLCAweDBjLCAweDdhLCAweDBmLCAweDI5LCAweGYzLCAweDgwLCAKKyAgICAweGViLCAweGU1LCAweGY1LCAweDU0LCAweDAzLCAweDc4LCAweDFmLCAweDdlLCAweDJmLCAweDJhLCAweDBmLCAweDBiLCAweDJjLCAweDdhLCAweDJmLCAweDJhLCAKKyAgICAweDBmLCAweDgwLCAweDM0LCAweDdlLCAweDJmLCAweDJhLCAweDE3LCAweDBiLCAweDJjLCAweDdhLCAweDJmLCAweDJhLCAweDE3LCAweGE5LCAweGQ3LCAweGY0LCAKKyAgICAweGE5LCAweDI3LCAweGY0LCAweGZjLCAweDgwLCAweDIxLCAweDdlLCAweDJmLCAweDJhLCAweDEzLCAweDBiLCAweDJjLCAweDdhLCAweDJmLCAweDJhLCAweDEzLCAKKyAgICAweDgwLCAweGViLCAweGRhLCAweDJiLCAweGRhLCAweDFiLCAweGRhLCAweDBiLCAweDIyLCAweDc1LCAweDMxLCAweDI4LCAweDEyLCAweDdjLCAweDE1LCAweGNhLCAKKyAgICAweDBiLCAweGNhLCAweDFiLCAweGNhLCAweDJiLCAweGMyLCAweGM0LCAweGE5LCAweDIxLCAweGYyLCAweGI2LCAweGU1LCAweGY1LCAweDMzLCAweDcyLCAweGU3LCAKKyAgICAweDQwLCAweGUwLCAweDdlLCAweDBkLCAweDQ2LCAweDdlLCAweDFkLCAweDRhLCAweDdlLCAweDJkLCAweDRlLCAweDdlLCAweDNkLCAweDUyLCAweDdlLCAweDg1LCAKKyAgICAweDU2LCAweDdkLCAweDkwLCAweDRkLCAweDkxLCAweDRkLCAweDkyLCAweDRkLCAweDkzLCAweDRkLCAweDk0LCAweDRkLCAweDk1LCAweDRkLCAweDk2LCAweDRkLCAKKyAgICAweDk3LCAweDRkLCAweDk4LCAweDY4LCAweDcyLCAweDdhLCAweDExLCAweGYzLCAweDdhLCAweDAxLCAweGYzLCAweDdhLCAweDMxLCAweGYzLCAweDdhLCAweDIxLCAKKyAgICAweGYzLCAweDdhLCAweDUxLCAweGYzLCAweDdhLCAweDQxLCAweGYzLCAweDdhLCAweDcxLCAweGYzLCAweDdhLCAweDYxLCAweGYzLCAweDdhLCAweDkxLCAweGYzLCAKKyAgICAweDdhLCAweDgxLCAweGYzLCAweDMwLCAweDdiLCAweDFhLCAweDdhLCAweGIxLCAweGYzLCAweDdhLCAweGExLCAweGYzLCAweDdhLCAweGQxLCAweGYzLCAweDdhLCAKKyAgICAweGMxLCAweGYzLCAweDdhLCAweGYxLCAweGYzLCAweDdhLCAweGUxLCAweGYzLCAweDdkLCAweDc4LCAweDdhLCAweGYxLCAweGYzLCAweDdhLCAweGUxLCAweGYzLCAKKyAgICAweGE5LCAweDMwLCAweGY1LCAweDAzLCAweDAyLCAweDcwLCAweGQ2LCAweDc1LCAweDMxLCAweDI5LCAweDEyLCAweDdjLCAweDE1LCAweDIwLCAweDdiLCAweDBiLCAKKyAgICAweDc1LCAweDMxLCAweDBhLCAweDEyLCAweDdjLCAweDE1LCAweDc1LCAweGY2LCAweDBhLCAweDgwLCAweDA5LCAweDc1LCAweDMxLCAweDEyLCAweDEyLCAweDdjLCAKKyAgICAweDE1LCAweDc1LCAweGY2LCAweDEyLCAweDZkLCAweDAwLCAweDdkLCAweDEwLCAweDdhLCAweDBkLCAweDQ2LCAweDdhLCAweDBkLCAweDRhLCAweDdhLCAweDBkLCAKKyAgICAweDRlLCAweDdhLCAweDBkLCAweDUyLCAweDdhLCAweDA1LCAweDU2LCAweGRhLCAweDJiLCAweGRhLCAweDFiLCAweGRhLCAweDBiLCAweDIyLCAweDFlLCAweGIwLCAKKyAgICAweDQwLCAweDBjLCAweDdlLCAweGEwLCAweDBhLCAweGE0LCAweDdlLCAweDA0LCAweDcyLCAweGZiLCAweDlkLCAweDA1LCAweDg5LCAweDA0LCAweDdlLCAweGExLCAKKyAgICAweGUzLCAweDdhLCAweDM5LCAweGEwLCAweDBiLCAweDM0LCAweDgwLCAweGVhLCAweGI0LCAweDQwLCAweGUzLCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAKKyAgICAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAKKyAgICAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAKKyAgICAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAKKyAgICAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAKKyAgICAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAKKyAgICAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAKKyAgICAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAKKyAgICAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAKKyAgICAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAKKyAgICAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAKKyAgICAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAKKyAgICAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAKKyAgICAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAKKyAgICAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAKKyAgICAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAKKyAgICAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAKKyAgICAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAKKyAgICAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAKKyAgICAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAKKyAgICAweDM1LCAweDdlLCAweGExLCAweGUzLCAweGU1LCAweGUzLCAweDFiLCAweDM4LCAweDUwLCAweDBiLCAweDM1LCAweDIyLCAweDFlLCAweGIwLCAweDQwLCAweDBjLCAKKyAgICAweDdlLCAweGEwLCAweDBhLCAweGE0LCAweDdlLCAweDA0LCAweDc0LCAweDU5LCAweDlkLCAweDA1LCAweDg5LCAweDA0LCAweDdlLCAweDM5LCAweGEwLCAweDdhLCAKKyAgICAweGExLCAweGYzLCAweDBiLCAweDM0LCAweDgwLCAweGVhLCAweGI0LCAweDQwLCAweGUzLCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAKKyAgICAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAKKyAgICAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAKKyAgICAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAKKyAgICAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAKKyAgICAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAKKyAgICAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAKKyAgICAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAKKyAgICAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAKKyAgICAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAKKyAgICAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAKKyAgICAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAKKyAgICAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAKKyAgICAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAKKyAgICAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAKKyAgICAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAKKyAgICAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAKKyAgICAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAKKyAgICAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAKKyAgICAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDBiLCAKKyAgICAweDM4LCAweDUwLCAweDdhLCAweGExLCAweGYzLCAweGY1LCAweGYzLCAweDBiLCAweDM1LCAweDIyLCAweGMyLCAweGFmLCAweDdlLCAweDM3LCAweDAxLCAweGRiLCAKKyAgICAweDRkLCAweDMzLCAweDY4LCAweDNiLCAweDdlLCAweDA3LCAweDAxLCAweGQ3LCAweDdlLCAweDU0LCAweDA5LCAweGUzLCAweDlkLCAweDUwLCAweGJkLCAweDM1LCAKKyAgICAweDQwLCAweDAyLCAweDdkLCAweDM1LCAweGNhLCAweDM5LCAweDdlLCAweDY1LCAweDYxLCAweDk5LCAweDY0LCAweGRhLCAweDM5LCAweDdlLCAweDA3LCAweDAxLCAKKyAgICAweGRiLCAweDlkLCAweDAzLCAweDdhLCAweDA3LCAweDAxLCAweGRiLCAweDJlLCAweDM3LCAweDAxLCAweGQ3LCAweDdhLCAweDM3LCAweDAxLCAweGQ3LCAweGJlLCAKKyAgICAweDM0LCAweDA5LCAweGUyLCAweDI4LCAweGM3LCAweDdlLCAweDM0LCAweDA1LCAweGUzLCAweDdhLCAweDM3LCAweDAxLCAweGQ3LCAweDgwLCAweGJkLCAweGQyLCAKKyAgICAweGFmLCAweDIyLCAweDc1LCAweDMxLCAweDUzLCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweDE1LCAweDYzLCAweDgwLCAweDExLCAweDc1LCAweDMxLCAweDUxLCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweDBiLCAweDA4LCAweDEwLCAweDBiLCAweDA1LCAweDllLCAweDM0LCAweDAwLCAweDAyLCAweDI4LCAweDRkLCAweDdjLCAweGIyLCAKKyAgICAweDIwLCAweGU3LCAweDI3LCAweDU0LCAweDA3LCAweDIzLCAweDBhLCAweDJiLCAweDQ5LCAweDIyLCAweDZjLCAweDdjLCAweDdjLCAweGIyLCAweDU0LCAweDc4LCAKKyAgICAweDAzLCAweDAzLCAweDAzLCAweDdjLCAweDJiLCAweDlkLCAweDEzLCAweDQwLCAweDFhLCAweDY4LCAweDEyLCAweDdhLCAweDE1LCAweDYzLCAweDdhLCAweDI1LCAKKyAgICAweDY1LCAweDdlLCAweDY0LCAweDc1LCAweDM3LCAweDdhLCAweDY1LCAweDYxLCAweDg5LCAweDI0LCAweDAyLCAweDc1LCAweDQ1LCAweDdlLCAweDY0LCAweDc0LCAKKyAgICAweGFkLCAweDgwLCAweGYyLCAweDJkLCAweDEzLCAweDlkLCAweDMxLCAweGNhLCAweDM5LCAweDdkLCAweDMxLCAweDJkLCAweDEwLCAweGNhLCAweDE5LCAweGNhLCAKKyAgICAweDI5LCAweDk5LCAweDI0LCAweGRhLCAweDI5LCAweGRhLCAweDA5LCAweGRhLCAweDM5LCAweDgwLCAweGEyLCAweDdhLCAweDE1LCAweDYzLCAweDdlLCAweDY0LCAKKyAgICAweDc1LCAweDIzLCAweDRkLCAweDMzLCAweDc4LCAweDA5LCAweDdjLCAweGIyLCAweDIwLCAweGU3LCAweDJhLCAweDdlLCAweDY0LCAweDc0LCAweGEyLCAweDdhLCAKKyAgICAweDY1LCAweDYxLCAweDIyLCAweDc1LCAweDMxLCAweDUyLCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweDIxLCAweDYzLCAweDdlLCAweDA5LCAweDMwLCAweDBiLCAKKyAgICAweDA0LCAweDFiLCAweDM0LCAweDc4LCAweDg5LCAweDgwLCAweGQ0LCAweDc1LCAweDMxLCAweDU0LCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweDE1LCAweDYzLCAKKyAgICAweDdlLCAweDI1LCAweDY1LCAweDgwLCAweDkwLCAweDVlLCAweDIwLCAweDA3LCAweDU0LCAweDc4LCAweDdlLCAweDQ0LCAweDc1LCAweGMxLCAweDMwLCAweGU2LCAKKyAgICAweDE2LCAweDRkLCAweDMzLCAweDY4LCAweDI2LCAweDFiLCAweDM0LCAweDdlLCAweDA5LCAweDQwLCAweDBiLCAweDA0LCAweDdlLCAweDQ0LCAweDY3LCAweDYzLCAKKyAgICAweDIwLCAweGUzLCAweDA0LCAweDdlLCAweDQ0LCAweDc1LCAweGM5LCAweGNhLCAweDA5LCAweGNhLCAweDM5LCAweDk5LCAweDQ0LCAweGRhLCAweDM5LCAweGRhLCAKKyAgICAweDA5LCAweDdlLCAweDY0LCAweDc0LCAweGFkLCAweDRkLCAweDMzLCAweDY4LCAweGE2LCAweDg5LCAweDY0LCAweDdhLCAweDE1LCAweDYzLCAweGY1LCAweDY1LCAKKyAgICAweDdlLCAweDY0LCAweDc1LCAweDg2LCAweDgwLCAweDk5LCAweDdlLCAweDE1LCAweDYzLCAweGU1LCAweDY1LCAweDgwLCAweGM0LCAweGMwLCAweGQwLCAweGMwLCAKKyAgICAweGQxLCAweGMwLCAweGUwLCAweGNhLCAweDE5LCAweGE5LCAweDIwLCAweGRmLCAweDEyLCAweGE5LCAweDIxLCAweGRmLCAweDFiLCAweDc1LCAweDMxLCAweDAxLCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweDUzLCAweGRmLCAweGY3LCAweDEyLCAweDQwLCAweGRjLCAweDgwLCAweDBkLCAweDc1LCAweDMxLCAweGZlLCAweDEyLCAweDdjLCAKKyAgICAweDE1LCAweDdlLCAweDE0LCAweDAwLCAweDUzLCAweDAyLCAweDQwLCAweDUxLCAweGRhLCAweDE5LCAweGQwLCAweGUwLCAweGQwLCAweGQxLCAweGQwLCAweGQwLCAKKyAgICAweDMyLCAweDAzLCAweGE1LCAweGNiLCAweDE5LCAweGIxLCAweDgwLCAweDAwLCAweDIyLCAweDIyLCAweDAyLCAweDc2LCAweDQyLCAweGNhLCAweDBiLCAweGNhLCAKKyAgICAweDFiLCAweGNhLCAweDJiLCAweGNhLCAweDNiLCAweGNhLCAweDRiLCAweGNhLCAweDViLCAweGNhLCAweDZiLCAweGNhLCAweDdiLCAweGNhLCAweGViLCAweGMwLCAKKyAgICAweGYxLCAweDdlLCAweGIzLCAweDJhLCAweDMzLCAweGI0LCAweDAwLCAweDAyLCAweDgwLCAweDE5LCAweGI0LCAweDAxLCAweDE2LCAweDMwLCAweGMwLCAweDA4LCAKKyAgICAweDc1LCAweGYxLCAweDAwLCAweDEyLCAweDc2LCAweDJjLCAweDgwLCAweDFmLCAweDMwLCAweGMxLCAweDFjLCAweDc1LCAweGYxLCAweDAwLCAweDEyLCAweDc2LCAKKyAgICAweGJkLCAweDgwLCAweDE0LCAweDMwLCAweGMxLCAweDA4LCAweDc1LCAweGYxLCAweDAwLCAweDEyLCAweDc2LCAweGJkLCAweDgwLCAweDA5LCAweDMwLCAweGMwLCAKKyAgICAweDA2LCAweDc1LCAweGYxLCAweDAwLCAweDEyLCAweDc2LCAweDJjLCAweGQwLCAweGYxLCAweGRhLCAweGViLCAweGRhLCAweDdiLCAweGRhLCAweDZiLCAweGRhLCAKKyAgICAweDViLCAweGRhLCAweDRiLCAweGRhLCAweDNiLCAweGRhLCAweDJiLCAweGRhLCAweDFiLCAweGRhLCAweDBiLCAweDIyLCAweGMyLCAweGMwLCAweDdlLCAweGIzLCAKKyAgICAweDJhLCAweDMzLCAweGI0LCAweDAyLCAweDA3LCAweDEyLCAweDc2LCAweDRlLCAweDAyLCAweDc2LCAweDQyLCAweDIyLCAweGI0LCAweDAxLCAweGZjLCAweDAyLCAKKyAgICAweDc2LCAweDg4LCAweDdlLCAweDAwLCAweDAwLCAweDdhLCAweDAzLCAweDJhLCAweDMzLCAweDdhLCAweDAzLCAweDJhLCAweDM0LCAweDIyLCAweDdlLCAweGIzLCAKKyAgICAweDJhLCAweDJiLCAweDU0LCAweDYwLCAweDYwLCAweDA1LCAweGI0LCAweDQwLCAweDE1LCAweDgwLCAweDEzLCAweDdlLCAweGIzLCAweDJhLCAweDJjLCAweGI0LCAKKyAgICAweDA1LCAweDBjLCAweDc1LCAweDMxLCAweDcxLCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweGIzLCAweDJhLCAweDJlLCAweGY1LCAweDhmLCAweDIyLCAweDc1LCAKKyAgICAweGY2LCAweDAwLCAweDIyLCAweGJlLCAweDU3LCAweDJhLCAweDMxLCAweDI4LCAweDA0LCAweDdlLCAweDU3LCAweDJhLCAweDMxLCAweDdhLCAweDBmLCAweDJhLCAKKyAgICAweDM2LCAweDdhLCAweDU3LCAweDJhLCAweDNhLCAweDAyLCAweDc2LCAweDg4LCAweDdlLCAweGVmLCAweDJhLCAweDM2LCAweDdlLCAweGY3LCAweDJhLCAweDNhLCAKKyAgICAweDdlLCAweDA3LCAweDJhLCAweDNhLCAweDRkLCAweDAwLCAweDY4LCAweDIxLCAweDdlLCAweDAwLCAweDAwLCAweDdlLCAweGViLCAweGIwLCAweGY1LCAweGYzLCAKKyAgICAweGEzLCAweGE1LCAweDA4LCAweDFiLCAweGY0LCAweDY4LCAweDA0LCAweGE1LCAweGI4LCAweDA4LCAweGYwLCAweDdhLCAweGVmLCAweDJhLCAweDM2LCAweDdhLCAKKyAgICAweGY3LCAweDJhLCAweDNhLCAweDc1LCAweDMxLCAweDA2LCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDAxLCAweGY2LCAweDIyLCAweGMyLCAweGMxLCAweDc1LCAKKyAgICAweDMxLCAweDAzLCAweDEyLCAweDdjLCAweDE1LCAweGE5LCAweDM2LCAweGUyLCAweDE2LCAweGU1LCAweGY1LCAweDU0LCAweGMwLCAweDY4LCAweDA3LCAweGE5LCAKKyAgICAweGQ3LCAweGY0LCAweGE5LCAweDI3LCAweGY0LCAweGZjLCAweDUzLCAweGUxLCAweDNmLCAweDQzLCAweGYyLCAweDg4LCAweDAyLCAweDc3LCAweDI5LCAweDdlLCAKKyAgICAweGIzLCAweDJhLCAweDM0LCAweGI0LCAweDAyLCAweDA0LCAweGE5LCAweGQ0LCAweGU0LCAweDIyLCAweGI0LCAweDAxLCAweDM5LCAweDdlLCAweDIxLCAweGU2LCAKKyAgICAweDdjLCAweDMyLCAweDdlLCAweDEzLCAweDJhLCAweDM1LCAweDJjLCAweDIxLCAweDdhLCAweDIzLCAweDJhLCAweDM1LCAweDdlLCAweDAwLCAweDAwLCAweDJlLCAKKyAgICAweDA0LCAweDJhLCAweDNjLCAweGU1LCAweGUzLCAweDdhLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweGE1LCAweGRiLCAweGY2LCAweGE5LCAweGQ0LCAweGU0LCAKKyAgICAweDc1LCAweDMxLCAweDcwLCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweGIzLCAweDJhLCAweDM1LCAweDdlLCAweGEzLCAweDJhLCAweDMyLCAweGJjLCAweGFiLCAKKyAgICAweDc4LCAweDAzLCAweDEyLCAweDc3LCAweGMwLCAweDIyLCAweDAyLCAweDdiLCAweDI5LCAweGU1LCAweGU2LCAweGI0LCAweDA4LCAweDY1LCAweGE5LCAweGM0LCAKKyAgICAweGUyLCAweDdlLCAweDAxLCAweGUzLCAweDdlLCAweDExLCAweGUzLCAweDdlLCAweDMxLCAweGUzLCAweDdlLCAweDIxLCAweGUzLCAweDdlLCAweDUxLCAweGUzLCAKKyAgICAweDdlLCAweDQxLCAweGUzLCAweDdlLCAweDcxLCAweGUzLCAweDdlLCAweDYxLCAweGUzLCAweDdhLCAweDBmLCAweDJhLCAweDJiLCAweDdhLCAweDFmLCAweDJhLCAKKyAgICAweDJmLCAweDc1LCAweDMxLCAweDA0LCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDAxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDExLCAweDMxLCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDIxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDMxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAKKyAgICAweDQxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDUxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDYxLCAweDMxLCAweDEyLCAweDdjLCAKKyAgICAweDE1LCAweDdhLCAweDcxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweGE5LCAweGQ0LCAweGU0LCAweGE5LCAweGQ3LCAweGY0LCAweGE5LCAweGM2LCAweGUyLCAKKyAgICAweDEyLCAweDc3LCAweDk0LCAweDIyLCAweDZkLCAweDAwLCAweDdlLCAweDE0LCAweDAxLCAweDAyLCAweDdhLCAweDA3LCAweDJhLCAweDNhLCAweDdhLCAweDAzLCAKKyAgICAweDJhLCAweDM1LCAweDdlLCAweGIzLCAweDJhLCAweDJiLCAweDIwLCAweGU3LCAweDBmLCAweDdhLCAweDIzLCAweDJhLCAweDM0LCAweDdhLCAweDMzLCAweDJhLCAKKyAgICAweDMzLCAweGJlLCAweDA3LCAweDJhLCAweDMxLCAweDY4LCAweDA5LCAweDIyLCAweDdhLCAweDMzLCAweDJhLCAweDM0LCAweDdhLCAweDIzLCAweDJhLCAweDMzLCAKKyAgICAweDdlLCAweGIzLCAweDJhLCAweDJiLCAweDU0LCAweGUzLCAweDIzLCAweDIzLCAweDMwLCAweGUwLCAweDAyLCAweGQyLCAweGU1LCAweDMwLCAweGU3LCAweDAyLCAKKyAgICAweGQyLCAweGU0LCAweDMwLCAweGU1LCAweDA2LCAweDMwLCAweGU0LCAweDAzLCAweDAyLCAweDdiLCAweDI5LCAweDU0LCAweDNlLCAweGY1LCAweGYwLCAweDAzLCAKKyAgICAweDU0LCAweDFmLCAweGMzLCAweDI1LCAweGYwLCAweDkwLCAweDc3LCAweGVjLCAweDc1LCAweDg0LCAweGZmLCAweDczLCAweDAyLCAweDc5LCAweDQwLCAweDAyLCAKKyAgICAweDc4LCAweDM0LCAweDAyLCAweDc5LCAweGRkLCAweDAyLCAweDc5LCAweGY4LCAweDAyLCAweDc4LCAweGQ5LCAweDAyLCAweDc4LCAweDlhLCAweDAyLCAweDdhLCAKKyAgICAweDExLCAweDAyLCAweDdhLCAweDExLCAweDAyLCAweDdhLCAweDE0LCAweDAyLCAweDdhLCAweDE0LCAweDAyLCAweDdhLCAweDE0LCAweDAyLCAweDdhLCAweDE0LCAKKyAgICAweDAyLCAweDdhLCAweDE0LCAweDAyLCAweDdhLCAweDE0LCAweDAyLCAweDdhLCAweDE0LCAweDAyLCAweDdhLCAweDE0LCAweDAyLCAweDdhLCAweDFhLCAweDAyLCAKKyAgICAweDdhLCAweGNlLCAweDAyLCAweDdhLCAweDE3LCAweDAyLCAweDdhLCAweDE3LCAweDAyLCAweDdhLCAweDE3LCAweDAyLCAweDdhLCAweDE3LCAweDAyLCAweDdhLCAKKyAgICAweDE3LCAweDAyLCAweDdhLCAweDE3LCAweDdlLCAweGIzLCAweDJhLCAweDJjLCAweGI0LCAweDA2LCAweDJhLCAweDdlLCAweGIzLCAweDJhLCAweDJkLCAweDYwLCAKKyAgICAweDU2LCAweDdjLCAweDBiLCAweDdlLCAweDEzLCAweDJhLCAweDJlLCAweDdlLCAweDE3LCAweDJhLCAweDJmLCAweDc1LCAweDMxLCAweDcyLCAweDEyLCAweDdjLCAKKyAgICAweDE1LCAweDdhLCAweDAxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDExLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDEyLCAweDdiLCAweDMzLCAKKyAgICAweDQwLCAweDM1LCAweDAyLCAweDc2LCAweDczLCAweGI0LCAweDA4LCAweDEwLCAweDc1LCAweDMxLCAweDc0LCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweGIzLCAKKyAgICAweDNmLCAweGYxLCAweGY1LCAweGYzLCAweDc1LCAweGY2LCAweDAxLCAweDIyLCAweGI0LCAweDAwLCAweDFjLCAweDc1LCAweDMxLCAweDc1LCAweDEyLCAweDdjLCAKKyAgICAweDE1LCAweDdlLCAweGIzLCAweDNmLCAweGYyLCAweDMwLCAweGUwLCAweDA1LCAweDc1LCAweGYzLCAweDAyLCAweDgwLCAweDAzLCAweDc1LCAweGYzLCAweDAwLCAKKyAgICAweDc1LCAweGYzLCAweDAwLCAweDc1LCAweGY2LCAweDAyLCAweDIyLCAweDAyLCAweDdiLCAweDI5LCAweDdlLCAweGIzLCAweDJhLCAweDJjLCAweGI0LCAweDAwLCAKKyAgICAweDM1LCAweDc1LCAweDMxLCAweDc2LCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweGIzLCAweDJhLCAweDMwLCAweDU0LCAweDBmLCAweGY1LCAweGYxLCAweDdlLCAKKyAgICAweGIzLCAweDJhLCAweDMwLCAweDIwLCAweGU3LCAweDA5LCAweGU1LCAweGUxLCAweDMwLCAweGU3LCAweDBkLCAweDc0LCAweDAxLCAweDgwLCAweDBiLCAweGU1LCAKKyAgICAweGUxLCAweDMwLCAweGU2LCAweDA0LCAweDc0LCAweDAxLCAweDgwLCAweDAyLCAweDc0LCAweDAwLCAweDUzLCAweGYxLCAweDgwLCAweGY1LCAweGYzLCAweDc1LCAKKyAgICAweGYzLCAweDAwLCAweDc1LCAweGY2LCAweDAyLCAweDIyLCAweDAyLCAweDdiLCAweDI5LCAweGMwLCAweGYxLCAweDdlLCAweGIzLCAweDJhLCAweDMwLCAweDU0LCAKKyAgICAweDBmLCAweDQyLCAweGYxLCAweDdlLCAweGIzLCAweDJhLCAweDJlLCAweGI0LCAweDAwLCAweDQ1LCAweDdlLCAweGIzLCAweDJhLCAweDJjLCAweGI0LCAweDAxLCAKKyAgICAweDI0LCAweDc1LCAweDMxLCAweDc3LCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweGIzLCAweDJhLCAweDMwLCAweDU0LCAweDBmLCAweDc4LCAweDA1LCAweDUzLCAKKyAgICAweGUxLCAweDNmLCAweDgwLCAweDM3LCAweDdlLCAweGIzLCAweDJhLCAweDMwLCAweDIwLCAweGU3LCAweDA1LCAweDUzLCAweGUxLCAweDdmLCAweDgwLCAweDJiLCAKKyAgICAweDUzLCAweGUxLCAweGJmLCAweDgwLCAweDI2LCAweGI0LCAweDAzLCAweDE3LCAweDc1LCAweDMxLCAweDc4LCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweGIzLCAKKyAgICAweDJhLCAweDMwLCAweDIwLCAweGU3LCAweDA1LCAweDQzLCAweGUxLCAweDgwLCAweDgwLCAweDExLCAweDQzLCAweGUxLCAweDQwLCAweDgwLCAweDBjLCAweDQzLCAKKyAgICAweGUxLCAweGMwLCAweGQwLCAweGYxLCAweDc1LCAweDMxLCAweDA3LCAweDEyLCAweDdjLCAweDE1LCAweDIyLCAweGQwLCAweGYxLCAweDAyLCAweDc2LCAweDZmLCAKKyAgICAweDdlLCAweGIzLCAweDJhLCAweDJjLCAweGI0LCAweDA5LCAweDIzLCAweDc1LCAweDMxLCAweDc5LCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweGIzLCAweDJhLCAKKyAgICAweDJlLCAweGJlLCAweGIzLCAweDNmLCAweGYxLCAweDY4LCAweDExLCAweGNhLCAweGI4LCAweGMwLCAweGYxLCAweDEyLCAweDQzLCAweGQ0LCAweGQwLCAweGYxLCAKKyAgICAweGRhLCAweGI4LCAweDUwLCAweDc2LCAweDdhLCAweGIzLCAweDNmLCAweGYxLCAweDgwLCAweDZkLCAweGI0LCAweDA1LCAweDA4LCAweDc1LCAweDMxLCAweDdhLCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweDgwLCAweDYyLCAweGI0LCAweDAzLCAweDE5LCAweDc1LCAweDMxLCAweDdiLCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweGIzLCAKKyAgICAweDJhLCAweDJlLCAweGI0LCAweDAxLCAweDU1LCAweDdlLCAweGIzLCAweDNmLCAweGYyLCAweDQ0LCAweDAxLCAweDdhLCAweGIzLCAweDNmLCAweGYyLCAweDgwLCAKKyAgICAweDQ2LCAweGI0LCAweDAxLCAweDE5LCAweDc1LCAweDMxLCAweDdjLCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweGIzLCAweDJhLCAweDJlLCAweGI0LCAweDAxLCAKKyAgICAweDM5LCAweDdlLCAweGIzLCAweDNmLCAweGYyLCAweDU0LCAweGZlLCAweDdhLCAweGIzLCAweDNmLCAweGYyLCAweDgwLCAweDJhLCAweGI0LCAweDA3LCAweDJhLCAKKyAgICAweDdlLCAweGIzLCAweDJhLCAweDJkLCAweDYwLCAweDI0LCAweDdjLCAweDBiLCAweDdlLCAweDEzLCAweDJhLCAweDJlLCAweDdlLCAweDE3LCAweDJhLCAweDJmLCAKKyAgICAweDc1LCAweDMxLCAweDczLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDAxLCAweDMxLCAweDEyLCAweDdjLCAweDE1LCAweDdhLCAweDExLCAweDMxLCAweDEyLCAKKyAgICAweDdjLCAweDE1LCAweDEyLCAweDdiLCAweDVmLCAweDQwLCAweDAzLCAweDAyLCAweDc2LCAweDZmLCAweDAyLCAweDdiLCAweDI5LCAweDdlLCAweGIzLCAweDJhLCAKKyAgICAweDJjLCAweGI0LCAweDBiLCAweGY2LCAweDc1LCAweDMxLCAweDdkLCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweGIzLCAweDJhLCAweDJlLCAweDdlLCAweGEzLCAKKyAgICAweDJhLCAweDMwLCAweDRjLCAweGFiLCAweDc4LCAweGU0LCAweDgwLCAweGRmLCAweDdlLCAweGIzLCAweDJhLCAweDJjLCAweGI0LCAweDBhLCAweGRiLCAweDc1LCAKKyAgICAweDMxLCAweDdlLCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweGIzLCAweDJhLCAweDJlLCAweDcwLCAweGNmLCAweGY1LCAweGYzLCAweDc1LCAweGY2LCAweDAxLCAKKyAgICAweDIyLCAweDAyLCAweDdiLCAweDI5LCAweDAyLCAweDdiLCAweDI5LCAweDAyLCAweDdiLCAweDI5LCAweDdlLCAweGIzLCAweDJhLCAweDJjLCAweGI0LCAweDA0LCAKKyAgICAweDIwLCAweDc1LCAweDMxLCAweGMzLCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweDA0LCAweDAwLCAweDAxLCAweDdlLCAweDE3LCAweDJhLCAweDJkLCAweDdlLCAKKyAgICAweDE4LCAweDJhLCAweDNjLCAweDdhLCAweDFjLCAweDAwLCAweDAwLCAweDdlLCAweDQ3LCAweDJhLCAweDMxLCAweDEyLCAweDdjLCAweDIxLCAweDAyLCAweDdhLCAKKyAgICAweGM4LCAweGI0LCAweDA2LCAweDNhLCAweDc1LCAweDMxLCAweGMxLCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweDU4LCAweDAwLCAweDAwLCAweDdhLCAweDVjLCAKKyAgICAweDAwLCAweGZlLCAweDdkLCAweGNhLCAweDdlLCAweGQ3LCAweDJhLCAweDJkLCAweDdlLCAweDc4LCAweDJhLCAweDNjLCAweDdhLCAweDdjLCAweDAwLCAweDAwLCAKKyAgICAweDdlLCAweDc3LCAweDJhLCAweDMxLCAweDc1LCAweDMxLCAweGMxLCAweDEyLCAweDdjLCAweDE1LCAweGMwLCAweGE4LCAweGMwLCAweDg3LCAweGMyLCAweGFmLCAKKyAgICAweGE5LCAweGQ1LCAweDg3LCAweDEyLCAweDdjLCAweDVhLCAweGQwLCAweDg3LCAweGQwLCAweGE4LCAweDQwLCAweDRmLCAweDgwLCAweDRhLCAweGI0LCAweDAwLCAKKyAgICAweDFjLCAweGMyLCAweGFmLCAweGE5LCAweGQ1LCAweDg3LCAweDEyLCAweDc2LCAweDZmLCAweGU0LCAweDhkLCAweGVmLCAweDhkLCAweGVmLCAweDhkLCAweGVmLCAKKyAgICAweGQ1LCAweGUwLCAweGY3LCAweGMwLCAweGQxLCAweGNhLCAweDAyLCAweGZmLCAweGNhLCAweDA2LCAweDAwLCAweDAwLCAweDMyLCAweGI0LCAweDA5LCAweDEyLCAKKyAgICAweDdlLCAweDU3LCAweDJhLCAweDJkLCAweDRkLCAweDU1LCAweDY4LCAweDA1LCAweGE5LCAweGQyLCAweGIxLCAweDgwLCAweDAzLCAweGE5LCAweGMyLCAweGIxLCAKKyAgICAweDgwLCAweDE2LCAweGI0LCAweDA3LCAweDE2LCAweGMyLCAweGFmLCAweDdlLCAweDA3LCAweDJhLCAweDJmLCAweDdlLCAweDE3LCAweDJhLCAweDJkLCAweGMwLCAKKyAgICAweGQxLCAweGNhLCAweDE4LCAweGNhLCAweDM4LCAweGNhLCAweDI4LCAweDMyLCAweDAyLCAweDc2LCAweDZmLCAweDAyLCAweDdiLCAweDI5LCAweDdlLCAweGIzLCAKKyAgICAweDJhLCAweDJjLCAweGI0LCAweDAzLCAweDE1LCAweDc1LCAweDMxLCAweGMyLCAweDEyLCAweDdjLCAweDE1LCAweDdlLCAweDA0LCAweDAwLCAweDAxLCAweDdlLCAKKyAgICAweDE3LCAweDJhLCAweDJkLCAweDdlLCAweDU3LCAweDJhLCAweDMxLCAweDAyLCAweDc2LCAweDczLCAweGI0LCAweDA1LCAweDM5LCAweDc1LCAweDMxLCAweGMwLCAKKyAgICAweDEyLCAweDdjLCAweDE1LCAweGMwLCAweGE4LCAweGMwLCAweDg3LCAweGMyLCAweGFmLCAweGE5LCAweGQ1LCAweDg3LCAweDdlLCAweDA4LCAweDJhLCAweDNjLCAKKyAgICAweDdhLCAweDBjLCAweDAwLCAweDAwLCAweDdlLCAweDI0LCAweDAwLCAweGZlLCAweDdlLCAweDM3LCAweDJhLCAweDJkLCAweDdlLCAweDQ3LCAweDJhLCAweDMxLCAKKyAgICAweDEyLCAweDdjLCAweDIxLCAweGQwLCAweDg3LCAweGQwLCAweGE4LCAweDdlLCAweDA4LCAweDJhLCAweDNjLCAweDdhLCAweDBjLCAweDAwLCAweDAwLCAweDdlLCAKKyAgICAweDU3LCAweDJhLCAweDMxLCAweDAyLCAweDc2LCAweDczLCAweDAyLCAweDdiLCAweDI5LCAweDc1LCAweDMxLCAweDA3LCAweDEyLCAweDdjLCAweDE1LCAweDQzLCAKKyAgICAweGUxLCAweGMwLCAweDIyLCAweGMwLCAweGE4LCAweGMwLCAweDg3LCAweGMyLCAweGFmLCAweGE5LCAweGQ1LCAweDg3LCAweDEyLCAweDdiLCAweDllLCAweDQwLCAKKyAgICAweDE5LCAweDdlLCAweDA4LCAweDJhLCAweDNjLCAweDdhLCAweDBjLCAweDAwLCAweDAwLCAweGNhLCAweDBiLCAweGNhLCAweDQ5LCAweDEyLCAweDdjLCAweDIxLCAKKyAgICAweGRhLCAweDU5LCAweGRhLCAweDBiLCAweGQwLCAweDg3LCAweGQwLCAweGE4LCAweGMzLCAweDIyLCAweGQwLCAweDg3LCAweGQwLCAweGE4LCAweDIyLCAweGMwLCAKKyAgICAweGE4LCAweGMwLCAweDg3LCAweGMyLCAweGFmLCAweGE5LCAweGQ1LCAweDg3LCAweDEyLCAweDdiLCAweDllLCAweDQwLCAweDJiLCAweDdlLCAweDU4LCAweDAwLCAKKyAgICAweDAwLCAweDdhLCAweDVjLCAweDAwLCAweGZlLCAweDdmLCAweDYxLCAweDdlLCAweDc4LCAweDJhLCAweDNjLCAweDdhLCAweDdjLCAweDAwLCAweDAwLCAweDdlLCAKKyAgICAweDc3LCAweDJhLCAweDMxLCAweGJkLCAweDc0LCAweDc4LCAweDExLCAweDc1LCAweDMxLCAweGMxLCAweDEyLCAweDdjLCAweDE1LCAweDEyLCAweDdjLCAweDVhLCAKKyAgICAweDQwLCAweDA2LCAweGQwLCAweDg3LCAweGQwLCAweGE4LCAweGMzLCAweDIyLCAweGQwLCAweDg3LCAweGQwLCAweGE4LCAweGQzLCAweDIyLCAweDdlLCAweDI0LCAKKyAgICAweDAwLCAweGZlLCAweDdlLCAweDM0LCAweDdmLCAweGNhLCAweDBiLCAweDFhLCAweDUwLCAweGM1LCAweGYwLCAweDdkLCAweDYyLCAweDdkLCAweDc1LCAweDdkLCAKKyAgICAweDg3LCAweDdlLCAweDM0LCAweDdmLCAweGMyLCAweDdlLCAweDFiLCAweGIwLCAweDdlLCAweDM0LCAweDdmLCAweDAzLCAweGI0LCAweDAxLCAweDA0LCAweDdlLCAKKyAgICAweDM0LCAweDdmLCAweGNjLCAweDdlLCAweDFiLCAweGIwLCAweGJjLCAweDBiLCAweDUwLCAweDQ5LCAweDNlLCAweDAwLCAweDNlLCAweDAwLCAweDBhLCAweDUwLCAKKyAgICAweDJkLCAweDc1LCAweDBiLCAweDNhLCAweDMwLCAweDY5LCAweDUzLCAweDAwLCAweDAyLCAweGJkLCAweDM4LCAweDUwLCAweDAyLCAweDJkLCAweDM4LCAweGJjLCAKKyAgICAweDFiLCAweDUwLCAweDMwLCAweDNlLCAweDEwLCAweDNlLCAweDEwLCAweDBhLCAweDUxLCAweDJkLCAweDM1LCAweDY5LCAweDQxLCAweDAwLCAweDAyLCAweDBiLCAKKyAgICAweDFhLCAweDMwLCAweGJkLCAweDM4LCAweDUwLCAweDAyLCAweDJkLCAweDM4LCAweGJlLCAweDQ0LCAweGZmLCAweGZmLCAweDc4LCAweDA1LCAweDdlLCAweDFiLCAKKyAgICAweDkwLCAweDBhLCAweDQ5LCAweDRkLCAweDQ0LCAweDY4LCAweDBjLCAweGJlLCAweDQ0LCAweDAwLCAweGZmLCAweDI4LCAweDA0LCAweDdlLCAweDQ0LCAweDAwLCAKKyAgICAweGZmLCAweGMzLCAweDIyLCAweGQzLCAweDIyLCAKKworLy8gU2VnbWVudCAjMTYsIFN0YXJ0IEFkZHJlc3MgMDBmZjdmYzYsIExlbmd0aCA0CisweGZmLDB4MDAsMHhjNiwweDdmLDB4MDQsMHgwMCwKKyAgICAweDAxLCAweDEwLCAweDA0LCAweDAwLCAKKworLy8gU2VnbWVudCAjMTcsIFN0YXJ0IEFkZHJlc3MgMDBmZjdjMTUsIExlbmd0aCAzMzAKKzB4ZmYsMHgwMCwweDE1LDB4N2MsMHg0YSwweDAxLAorICAgIDB4Y2EsIDB4MDgsIDB4N2UsIDB4MDEsIDB4MzEsIDB4N2EsIDB4MDMsIDB4M2YsIDB4ZjAsIDB4ZGEsIDB4MDgsIDB4MjIsIDB4N2UsIDB4MWIsIDB4YzAsIDB4N2EsIAorICAgIDB4MGIsIDB4YzAsIDB4MGIsIDB4MTQsIDB4MGIsIDB4MzQsIDB4MWIsIDB4NDQsIDB4NzgsIDB4ZjIsIDB4MjIsIDB4N2YsIDB4NmYsIDB4N2YsIDB4ZjAsIDB4MWIsIAorICAgIDB4ZmMsIDB4N2MsIDB4NTQsIDB4N2QsIDB4MzIsIDB4ODAsIDB4MDgsIDB4Y2EsIDB4MWIsIDB4Y2EsIDB4MWIsIDB4Y2EsIDB4MWIsIDB4Y2EsIDB4MWIsIDB4OWUsIAorICAgIDB4NDQsIDB4MDAsIDB4MTAsIDB4NTAsIDB4ZjIsIDB4MmUsIDB4NDQsIDB4MDAsIDB4MTAsIDB4NjgsIDB4MDYsIDB4Y2EsIDB4NDgsIDB4MWIsIDB4NDQsIDB4NzgsIAorICAgIDB4ZmEsIDB4N2YsIDB4ZjYsIDB4ODksIDB4ZTQsIDB4Y2EsIDB4NmIsIDB4NWUsIDB4ZDQsIDB4MDAsIDB4M2YsIDB4NjgsIDB4MjAsIDB4N2UsIDB4ODQsIDB4MDAsIAorICAgIDB4NDAsIDB4OWQsIDB4OGQsIDB4ZGEsIDB4NmIsIDB4YmQsIDB4ODcsIDB4MzgsIDB4MTYsIDB4Y2EsIDB4NzksIDB4N2QsIDB4NzgsIDB4MTIsIDB4N2MsIDB4ODQsIAorICAgIDB4ZGEsIDB4NzksIDB4NDAsIDB4MDgsIDB4OWQsIDB4NzgsIDB4NjgsIDB4MDIsIDB4ODAsIDB4MDUsIDB4YzIsIDB4ZDcsIDB4MjIsIDB4ZGEsIDB4NmIsIDB4NDMsIAorICAgIDB4OTAsIDB4MzAsIDB4NzQsIDB4YWEsIDB4MzksIDB4YjUsIDB4NTUsIDB4NTUsIDB4NzQsIDB4NTUsIDB4MzksIDB4YjUsIDB4MmEsIDB4YWEsIDB4NzQsIDB4YTAsIAorICAgIDB4MzksIDB4YjUsIDB4NTUsIDB4NTUsIDB4N2UsIDB4MDQsIDB4MDAsIDB4NDAsIDB4OWQsIDB4NzAsIDB4NTAsIDB4MDYsIDB4MmQsIDB4NzAsIDB4N2QsIDB4MDcsIAorICAgIDB4NmQsIDB4NzcsIDB4N2MsIDB4MzEsIDB4N2UsIDB4N2IsIDB4MDAsIDB4N2EsIDB4NmIsIDB4MDAsIDB4MGIsIDB4N2MsIDB4MGIsIDB4NmMsIDB4YTUsIDB4ZDksIAorICAgIDB4ZjMsIDB4N2YsIDB4MTYsIDB4MWIsIDB4MWMsIDB4N2UsIDB4NTQsIDB4MjcsIDB4MTAsIDB4N2UsIDB4MWIsIDB4MTAsIDB4YmMsIDB4MTAsIDB4NjgsIDB4MDYsIAorICAgIDB4MWIsIDB4NTQsIDB4NzgsIDB4ZjUsIDB4ODAsIDB4MmMsIDB4NmQsIDB4MDAsIDB4N2MsIDB4MjAsIDB4N2YsIDB4MTYsIDB4OWYsIDB4MTAsIDB4N2YsIDB4MjcsIAorICAgIDB4OWYsIDB4MjAsIDB4N2UsIDB4MmIsIDB4MDAsIDB4N2UsIDB4MWIsIDB4MTAsIDB4YmMsIDB4MDEsIDB4NzgsIDB4MTYsIDB4MGIsIDB4MmMsIDB4MGIsIDB4MWMsIAorICAgIDB4YTUsIDB4ZGIsIDB4ZWYsIDB4N2MsIDB4YjYsIDB4MjAsIDB4ZTAsIDB4MDMsIDB4NjMsIDB4OTAsIDB4MzAsIDB4NGQsIDB4NzcsIDB4NzgsIDB4OTMsIDB4YzIsIAorICAgIDB4ZDcsIDB4MjIsIDB4ZDIsIDB4ZDcsIDB4MjIsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDQsIDB4NDIsIDB4MDgsIDB4MDYsIDB4MDQsIDB4MDIsIDB4MDQsIDB4MDAsIAorICAgIDB4MDIsIDB4MDEsIDB4MDQsIDB4MDEsIDB4MDIsIDB4ODIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDIsIDB4MDIsIAorICAgIDB4MDIsIDB4MDIsIDB4MDQsIDB4MDIsIDB4MDgsIDB4MTAsIDB4MDIsIDB4MTAsIDB4MDQsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDgsIDB4MDAsIAorICAgIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MDIsIDB4MDgsIDB4MDIsIDB4MDQsIDB4MjAsIDB4MDQsIDB4N2UsIDB4MTgsIDB4N2YsIDB4YmQsIDB4N2EsIAorICAgIDB4MWMsIDB4MDAsIDB4ZmUsIDB4MGIsIDB4MWEsIDB4MDAsIDB4NWUsIDB4MTAsIDB4MWYsIDB4YmUsIDB4MTAsIDB4MWEsIDB4MzgsIDB4MWEsIDB4MGEsIDB4NTEsIAorICAgIDB4MjMsIDB4N2UsIDB4MTgsIDB4N2MsIDB4ZmEsIDB4N2EsIDB4MWMsIDB4MDAsIDB4ZmYsIDB4MmQsIDB4MzUsIDB4MGIsIDB4MWEsIDB4NTAsIDB4NjAsIDB4MDgsIAorICAgIDB4YTUsIDB4YjgsIDB4MDIsIDB4MDMsIDB4NGUsIDB4YTAsIDB4MDgsIDB4MjIsIDB4ODAsIDB4ZmUsIAorfTsKKworc3RhdGljIHN0cnVjdCBlZGdlX2Zpcm13YXJlX3ZlcnNpb25faW5mbyBJTUFHRV9WRVJTSU9OX05BTUUgPSB7CisJMSwgMTYsIDQgfTsJCS8vIE1ham9yLCBNaW5vciwgQnVpbGQKKworI3VuZGVmIElNQUdFX1ZFUlNJT05fTkFNRQorCisjdW5kZWYgSU1BR0VfQVJSQVlfTkFNRQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZndfZG93bjIuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19md19kb3duMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NzI3N2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZndfZG93bjIuaApAQCAtMCwwICsxLDExMzMgQEAKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vKiBFZGdlcG9ydC80IEJpbmFyeSBJbWFnZQorLy8qIEdlbmVyYXRlZCBieSBIRVgyQyB2MS4wNgorLy8qIENvcHlyaWdodCAoQykgMTk5OCBJbnNpZGUgT3V0IE5ldHdvcmtzLCBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8qCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisvLyoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy8vKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorLy8qCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworLy9JbWFnZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbgorI2lmICFkZWZpbmVkKERFRklORURfRURHRV9GSVJNV0FSRV9JTUFHRV9SRUNPUkQpCisJI2RlZmluZSBERUZJTkVEX0VER0VfRklSTVdBUkVfSU1BR0VfUkVDT1JECisJc3RydWN0IGVkZ2VfZmlybXdhcmVfaW1hZ2VfcmVjb3JkIHsKKwkJX19sZTE2IEV4dEFkZHI7CisJCV9fbGUxNiBBZGRyOworCQlfX2xlMTYgTGVuOworCQl1bnNpZ25lZCBjaGFyICBEYXRhWzBdOworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisJc3RydWN0IGVkZ2VfZmlybXdhcmVfdmVyc2lvbl9pbmZvIHsKKwkJdW5zaWduZWQgY2hhciAgTWFqb3JWZXJzaW9uOworCQl1bnNpZ25lZCBjaGFyICBNaW5vclZlcnNpb247CisJCXVuc2lnbmVkIHNob3J0IEJ1aWxkTnVtYmVyOworCX07CisKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoSU1BR0VfQVJSQVlfTkFNRSkKKwkjZGVmaW5lIElNQUdFX0FSUkFZX05BTUUJRmlybXdhcmVJbWFnZQorCSNkZWZpbmUgSU1BR0VfVkVSU0lPTl9OQU1FCUZpcm13YXJlSW1hZ2VWZXJzaW9uCisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgSU1BR0VfQVJSQVlfTkFNRVtdID0geworCisvLyBTZWdtZW50ICMxLCBTdGFydCBBZGRyZXNzIDAwZmYwMDAwLCBMZW5ndGggNgorMHhmZiwweDAwLDB4MDAsMHgwMCwweDA2LDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0NSwgMHgxNCwgCisKKy8vIFNlZ21lbnQgIzIsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMGIsIExlbmd0aCAzCisweGZmLDB4MDAsMHgwYiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDQ0LCAweGE1LCAKKworLy8gU2VnbWVudCAjMywgU3RhcnQgQWRkcmVzcyAwMGZmMDAxMywgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDEzLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4NjMsIDB4YWIsIAorCisvLyBTZWdtZW50ICM0LCBTdGFydCBBZGRyZXNzIDAwZmYwMDFiLCBMZW5ndGggMworMHhmZiwweDAwLDB4MWIsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgxYiwgCisKKy8vIFNlZ21lbnQgIzUsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwMjMsIExlbmd0aCAzCisweGZmLDB4MDAsMHgyMywweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDIzLCAKKworLy8gU2VnbWVudCAjNiwgU3RhcnQgQWRkcmVzcyAwMGZmMDAyYiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDJiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4MmIsIAorCisvLyBTZWdtZW50ICM3LCBTdGFydCBBZGRyZXNzIDAwZmYwMDMzLCBMZW5ndGggMworMHhmZiwweDAwLDB4MzMsMHgwMCwweDAzLDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgzMywgCisKKy8vIFNlZ21lbnQgIzgsIFN0YXJ0IEFkZHJlc3MgMDBmZjAwM2IsIExlbmd0aCAzCisweGZmLDB4MDAsMHgzYiwweDAwLDB4MDMsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDNiLCAKKworLy8gU2VnbWVudCAjOSwgU3RhcnQgQWRkcmVzcyAwMGZmMDA0MywgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDQzLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4NDMsIAorCisvLyBTZWdtZW50ICMxMCwgU3RhcnQgQWRkcmVzcyAwMGZmMDA0YiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDRiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4NGIsIAorCisvLyBTZWdtZW50ICMxMSwgU3RhcnQgQWRkcmVzcyAwMGZmMDA1MywgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDUzLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4NjcsIDB4NWYsIAorCisvLyBTZWdtZW50ICMxMiwgU3RhcnQgQWRkcmVzcyAwMGZmMDA3YiwgTGVuZ3RoIDMKKzB4ZmYsMHgwMCwweDdiLDB4MDAsMHgwMywweDAwLAorICAgIDB4MDIsIDB4MDAsIDB4N2IsIAorCisvLyBTZWdtZW50ICMxMywgU3RhcnQgQWRkcmVzcyAwMGZmMDA4MCwgTGVuZ3RoIDcKKzB4ZmYsMHgwMCwweDgwLDB4MDAsMHgwNywweDAwLAorICAgIDB4N2UsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDIsIDB4NDAsIDB4NTIsIAorCisvLyBTZWdtZW50ICMxNCwgU3RhcnQgQWRkcmVzcyAwMGZmMzAwMCwgTGVuZ3RoIDI5MTgKKzB4ZmYsMHgwMCwweDAwLDB4MzAsMHg2NiwweDBiLAorICAgIDB4MTIsIDB4MzAsIDB4NjQsIDB4MTIsIDB4MzAsIDB4ZmYsIDB4MTIsIDB4MzEsIDB4MmYsIDB4MTIsIDB4MzAsIDB4YjAsIDB4ODAsIDB4ZjIsIDB4ZTUsIDB4MjMsIAorICAgIDB4NjAsIDB4MTksIDB4N2UsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDksIDB4YjEsIDB4MDEsIDB4YjksIDB4YjQsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MDUsIDB4MTQsIAorICAgIDB4MTksIDB4YjEsIDB4MDEsIDB4YjksIDB4YTUsIDB4MGEsIDB4YmUsIDB4MjEsIDB4MmUsIDB4NzgsIDB4ZWIsIDB4MjIsIDB4YzIsIDB4YWYsIDB4N2UsIDB4YjMsIAorICAgIDB4M2YsIDB4ZjEsIDB4YjQsIDB4MDEsIDB4MDMsIDB4MTIsIDB4NjUsIDB4NjcsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4YzIsIDB4YWYsIDB4N2UsIDB4YjMsIDB4M2YsIAorICAgIDB4ZjEsIDB4YjQsIDB4MDEsIDB4MWQsIDB4NzQsIDB4NDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MWEsIDB4NmMsIDB4YWEsIAorICAgIDB4NjAsIDB4MGYsIDB4Y2EsIDB4MGIsIDB4Y2EsIDB4MzksIDB4Y2EsIDB4NTksIDB4MTIsIDB4NjQsIDB4MjQsIDB4ZGEsIDB4NTksIDB4ZGEsIDB4MzksIDB4ZGEsIAorICAgIDB4MGIsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4YzIsIDB4YWYsIDB4ZTUsIDB4MjIsIDB4NjAsIDB4NDMsIDB4N2UsIDB4MDcsIDB4MDEsIDB4Y2IsIDB4YmUsIDB4MDQsIAorICAgIDB4MDMsIDB4ODAsIDB4MzgsIDB4MzksIDB4N2UsIDB4MDQsIDB4ODAsIDB4MDAsIDB4N2UsIDB4MjAsIDB4MDAsIDB4MTMsIDB4NTAsIDB4MjEsIDB4MDksIDB4YTAsIAorICAgIDB4MDAsIDB4MDQsIDB4NGUsIDB4YTAsIDB4MDUsIDB4MTksIDB4YTAsIDB4MDAsIDB4MDQsIDB4MGEsIDB4MzIsIDB4MDksIDB4NTMsIDB4MzUsIDB4MzMsIDB4NWUsIAorICAgIDB4NTEsIDB4MjcsIDB4NjgsIDB4MGIsIDB4MDksIDB4YTAsIDB4MDAsIDB4MTAsIDB4NGUsIDB4YTAsIDB4MDEsIDB4MTksIDB4YTAsIDB4MDAsIDB4MTAsIDB4MmUsIAorICAgIDB4MDQsIDB4MDEsIDB4MDAsIDB4YTUsIDB4MGEsIDB4YmUsIDB4MjEsIDB4MmUsIDB4NzgsIDB4ZDEsIDB4NzUsIDB4MjIsIDB4MDAsIDB4ZDIsIDB4YWYsIDB4MjIsIAorICAgIDB4YzIsIDB4YWYsIDB4ZTUsIDB4MjYsIDB4NjAsIDB4MzYsIDB4N2UsIDB4MjAsIDB4MDAsIDB4N2UsIDB4MzAsIDB4MDEsIDB4ZTUsIDB4MjYsIDB4YTUsIDB4NWIsIAorICAgIDB4NjgsIDB4MjEsIDB4N2MsIDB4YjIsIDB4MjMsIDB4MGEsIDB4MmIsIDB4NDksIDB4MzIsIDB4MDEsIDB4NzksIDB4YmUsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NjgsIAorICAgIDB4MTIsIDB4N2UsIDB4YjEsIDB4MjEsIDB4YTUsIDB4NGIsIDB4N2EsIDB4YjEsIDB4MjEsIDB4Y2EsIDB4MTksIDB4NDksIDB4MjIsIDB4MzAsIDB4ZWYsIDB4OTksIAorICAgIDB4MjQsIDB4ZGEsIDB4MTksIDB4M2UsIDB4MzAsIDB4YTUsIDB4MGEsIDB4YmUsIDB4MjEsIDB4MmUsIDB4NzgsIDB4ZDAsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4NDYsIAorICAgIDB4NGYsIDB4NDksIDB4N2MsIDB4NGMsIDB4YTksIDB4NGYsIDB4ZDYsIDB4NTMsIDB4MDMsIDB4NTYsIDB4MzAsIDB4NTksIDB4NWQsIDB4NWMsIDB4OGEsIDB4YzIsIAorICAgIDB4YWYsIDB4ZTUsIDB4MjQsIDB4NjAsIDB4MTQsIDB4N2UsIDB4MjAsIDB4MDAsIDB4MTMsIDB4NTAsIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4MzEsIDB4MWMsIAorICAgIDB4ZGEsIDB4YjgsIDB4YTUsIDB4MGEsIDB4YmUsIDB4MjEsIDB4MmUsIDB4NzgsIDB4ZWYsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4Y2EsIDB4MjgsIDB4MTIsIDB4MzUsIAorICAgIDB4NGMsIDB4ZGEsIDB4MjgsIDB4NDAsIDB4MDksIDB4MGEsIDB4MjIsIDB4MDksIDB4YjIsIDB4MzUsIDB4MzMsIDB4ZjQsIDB4NTIsIDB4MjQsIDB4MjIsIDB4YzIsIAorICAgIDB4YWYsIDB4ZTUsIDB4MjMsIDB4NjAsIDB4MTQsIDB4N2UsIDB4MjAsIDB4MDAsIDB4MTMsIDB4NTAsIDB4MDcsIDB4Y2EsIDB4YjgsIDB4MTIsIDB4MzEsIDB4NGMsIAorICAgIDB4ZGEsIDB4YjgsIDB4YTUsIDB4MGEsIDB4YmUsIDB4MjEsIDB4MmUsIDB4NzgsIDB4ZWYsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4N2MsIDB4YjIsIDB4MjMsIDB4MGEsIAorICAgIDB4MmIsIDB4NDksIDB4MjIsIDB4MzEsIDB4NTcsIDB4ODksIDB4MjQsIDB4MzEsIDB4NjcsIDB4MzEsIDB4ZDAsIDB4MzIsIDB4MzksIDB4MzIsIDB4YTIsIDB4MzMsIAorICAgIDB4MGIsIDB4MzMsIDB4NzQsIDB4MzMsIDB4ZGQsIDB4MzQsIDB4NDYsIDB4N2UsIDB4MjcsIDB4MDEsIDB4NzksIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NzgsIAorICAgIDB4MjQsIDB4N2UsIDB4MjQsIDB4ODAsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIAorICAgIDB4NjgsIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIDB4NDksIDB4NDUsIDB4N2QsIDB4MjEsIDB4ZGEsIDB4MTksIDB4MzAsIDB4ZTYsIDB4MTgsIAorICAgIDB4N2UsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MWUsIDB4YmUsIDB4MjcsIDB4MDEsIDB4ODksIDB4NjgsIDB4MGQsIDB4N2EsIDB4MjcsIDB4MDEsIDB4ODksIDB4N2UsIAorICAgIDB4NjAsIDB4OWMsIDB4N2EsIDB4NjMsIDB4MDEsIDB4YjksIDB4ODAsIDB4MjcsIDB4N2UsIDB4NjMsIDB4MDEsIDB4YjksIDB4YTUsIDB4YmUsIDB4MDAsIDB4MWYsIAorICAgIDB4N2UsIDB4NjAsIDB4MDEsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2UsIDB4YTAsIDB4YzgsIDB4MTIsIDB4NjEsIDB4MzYsIDB4NDAsIDB4MTEsIDB4NzUsIDB4MmYsIAorICAgIDB4YjMsIDB4MTIsIDB4NzMsIDB4MzUsIDB4YzIsIDB4MTgsIDB4NmMsIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4YjksIDB4MTIsIDB4NjQsIDB4ODYsIDB4MjIsIAorICAgIDB4N2UsIDB4MjcsIDB4MDEsIDB4N2IsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MjQsIDB4N2UsIDB4MjQsIDB4ODEsIDB4MDAsIDB4MDksIDB4YjIsIAorICAgIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIAorICAgIDB4NGMsIDB4NzIsIDB4N2QsIDB4MjEsIDB4ZGEsIDB4MTksIDB4MzAsIDB4ZTYsIDB4MTgsIDB4N2UsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MWUsIDB4YmUsIDB4MjcsIAorICAgIDB4MDEsIDB4OGIsIDB4NjgsIDB4MGQsIDB4N2EsIDB4MjcsIDB4MDEsIDB4OGIsIDB4N2UsIDB4NjAsIDB4OWMsIDB4N2EsIDB4NjMsIDB4MDEsIDB4YmEsIDB4ODAsIAorICAgIDB4MjcsIDB4N2UsIDB4NjMsIDB4MDEsIDB4YmEsIDB4YTUsIDB4YmUsIDB4MDAsIDB4MWYsIDB4N2UsIDB4NjAsIDB4MDEsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2UsIAorICAgIDB4YTAsIDB4YzgsIDB4MTIsIDB4NjEsIDB4MzYsIDB4NDAsIDB4MTEsIDB4NzUsIDB4MmYsIDB4YjMsIDB4MTIsIDB4NzMsIDB4MzUsIDB4YzIsIDB4MTksIDB4NmMsIAorICAgIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4YmEsIDB4MTIsIDB4NjQsIDB4ODYsIDB4MjIsIDB4N2UsIDB4MjcsIDB4MDEsIDB4N2QsIDB4YmUsIDB4MjQsIDB4MDAsIAorICAgIDB4MDAsIDB4NzgsIDB4MjQsIDB4N2UsIDB4MjQsIDB4ODIsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIAorICAgIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIDB4NGYsIDB4OWYsIDB4N2QsIDB4MjEsIDB4ZGEsIDB4MTksIDB4MzAsIAorICAgIDB4ZTYsIDB4MTgsIDB4N2UsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MWUsIDB4YmUsIDB4MjcsIDB4MDEsIDB4OGQsIDB4NjgsIDB4MGQsIDB4N2EsIDB4MjcsIDB4MDEsIAorICAgIDB4OGQsIDB4N2UsIDB4NjAsIDB4OWMsIDB4N2EsIDB4NjMsIDB4MDEsIDB4YmIsIDB4ODAsIDB4MjcsIDB4N2UsIDB4NjMsIDB4MDEsIDB4YmIsIDB4YTUsIDB4YmUsIAorICAgIDB4MDAsIDB4MWYsIDB4N2UsIDB4NjAsIDB4MDEsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2UsIDB4YTAsIDB4YzgsIDB4MTIsIDB4NjEsIDB4MzYsIDB4NDAsIDB4MTEsIAorICAgIDB4NzUsIDB4MmYsIDB4YjMsIDB4MTIsIDB4NzMsIDB4MzUsIDB4YzIsIDB4MWEsIDB4NmMsIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4YmIsIDB4MTIsIDB4NjQsIAorICAgIDB4ODYsIDB4MjIsIDB4N2UsIDB4MjcsIDB4MDEsIDB4N2YsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MjQsIDB4N2UsIDB4MjQsIDB4ODMsIDB4MDAsIAorICAgIDB4MDksIDB4YjIsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIAorICAgIDB4MTIsIDB4MTIsIDB4NTIsIDB4Y2MsIDB4N2QsIDB4MjEsIDB4ZGEsIDB4MTksIDB4MzAsIDB4ZTYsIDB4MTgsIDB4N2UsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MWUsIAorICAgIDB4YmUsIDB4MjcsIDB4MDEsIDB4OGYsIDB4NjgsIDB4MGQsIDB4N2EsIDB4MjcsIDB4MDEsIDB4OGYsIDB4N2UsIDB4NjAsIDB4OWMsIDB4N2EsIDB4NjMsIDB4MDEsIAorICAgIDB4YmMsIDB4ODAsIDB4MjcsIDB4N2UsIDB4NjMsIDB4MDEsIDB4YmMsIDB4YTUsIDB4YmUsIDB4MDAsIDB4MWYsIDB4N2UsIDB4NjAsIDB4MDEsIDB4N2UsIDB4YjAsIAorICAgIDB4MDAsIDB4N2UsIDB4YTAsIDB4YzgsIDB4MTIsIDB4NjEsIDB4MzYsIDB4NDAsIDB4MTEsIDB4NzUsIDB4MmYsIDB4YjMsIDB4MTIsIDB4NzMsIDB4MzUsIDB4YzIsIAorICAgIDB4MWIsIDB4NmMsIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4YmMsIDB4MTIsIDB4NjQsIDB4ODYsIDB4MjIsIDB4N2UsIDB4MjcsIDB4MDEsIDB4ODEsIDB4YmUsIAorICAgIDB4MjQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MjQsIDB4N2UsIDB4MjQsIDB4ODQsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIAorICAgIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIDB4NTUsIDB4ZjksIDB4N2QsIDB4MjEsIDB4ZGEsIAorICAgIDB4MTksIDB4MzAsIDB4ZTYsIDB4MTgsIDB4N2UsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MWUsIDB4YmUsIDB4MjcsIDB4MDEsIDB4OTEsIDB4NjgsIDB4MGQsIDB4N2EsIAorICAgIDB4MjcsIDB4MDEsIDB4OTEsIDB4N2UsIDB4NjAsIDB4OWMsIDB4N2EsIDB4NjMsIDB4MDEsIDB4YmQsIDB4ODAsIDB4MjcsIDB4N2UsIDB4NjMsIDB4MDEsIDB4YmQsIAorICAgIDB4YTUsIDB4YmUsIDB4MDAsIDB4MWYsIDB4N2UsIDB4NjAsIDB4MDEsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2UsIDB4YTAsIDB4YzgsIDB4MTIsIDB4NjEsIDB4MzYsIAorICAgIDB4NDAsIDB4MTEsIDB4NzUsIDB4MmYsIDB4YjMsIDB4MTIsIDB4NzMsIDB4MzUsIDB4YzIsIDB4MWMsIDB4NmMsIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4YmQsIAorICAgIDB4MTIsIDB4NjQsIDB4ODYsIDB4MjIsIDB4N2UsIDB4MjcsIDB4MDEsIDB4ODMsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MjQsIDB4N2UsIDB4MjQsIAorICAgIDB4ODUsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MGIsIDB4Y2EsIAorICAgIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIDB4NTksIDB4MjYsIDB4N2QsIDB4MjEsIDB4ZGEsIDB4MTksIDB4MzAsIDB4ZTYsIDB4MTgsIDB4N2UsIDB4NjAsIDB4MDAsIAorICAgIDB4ODAsIDB4MWUsIDB4YmUsIDB4MjcsIDB4MDEsIDB4OTMsIDB4NjgsIDB4MGQsIDB4N2EsIDB4MjcsIDB4MDEsIDB4OTMsIDB4N2UsIDB4NjAsIDB4OWMsIDB4N2EsIAorICAgIDB4NjMsIDB4MDEsIDB4YmUsIDB4ODAsIDB4MjcsIDB4N2UsIDB4NjMsIDB4MDEsIDB4YmUsIDB4YTUsIDB4YmUsIDB4MDAsIDB4MWYsIDB4N2UsIDB4NjAsIDB4MDEsIAorICAgIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2UsIDB4YTAsIDB4YzgsIDB4MTIsIDB4NjEsIDB4MzYsIDB4NDAsIDB4MTEsIDB4NzUsIDB4MmYsIDB4YjMsIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4YzIsIDB4MWQsIDB4NmMsIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4YmUsIDB4MTIsIDB4NjQsIDB4ODYsIDB4MjIsIDB4N2UsIDB4MjcsIDB4MDEsIAorICAgIDB4ODUsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MjQsIDB4N2UsIDB4MjQsIDB4ODYsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTQsIDB4Y2EsIAorICAgIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIDB4NWMsIDB4NTMsIDB4N2QsIAorICAgIDB4MjEsIDB4ZGEsIDB4MTksIDB4MzAsIDB4ZTYsIDB4MTgsIDB4N2UsIDB4NjAsIDB4MDAsIDB4ODAsIDB4MWUsIDB4YmUsIDB4MjcsIDB4MDEsIDB4OTUsIDB4NjgsIAorICAgIDB4MGQsIDB4N2EsIDB4MjcsIDB4MDEsIDB4OTUsIDB4N2UsIDB4NjAsIDB4OWMsIDB4N2EsIDB4NjMsIDB4MDEsIDB4YmYsIDB4ODAsIDB4MjcsIDB4N2UsIDB4NjMsIAorICAgIDB4MDEsIDB4YmYsIDB4YTUsIDB4YmUsIDB4MDAsIDB4MWYsIDB4N2UsIDB4NjAsIDB4MDEsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2UsIDB4YTAsIDB4YzgsIDB4MTIsIAorICAgIDB4NjEsIDB4MzYsIDB4NDAsIDB4MTEsIDB4NzUsIDB4MmYsIDB4YjMsIDB4MTIsIDB4NzMsIDB4MzUsIDB4YzIsIDB4MWUsIDB4NmMsIDB4MDAsIDB4N2EsIDB4MDMsIAorICAgIDB4MDEsIDB4YmYsIDB4MTIsIDB4NjQsIDB4ODYsIDB4MjIsIDB4N2UsIDB4MjcsIDB4MDEsIDB4ODcsIDB4YmUsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MjQsIAorICAgIDB4N2UsIDB4MjQsIDB4ODcsIDB4MDAsIDB4MDksIDB4YjIsIDB4MDAsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4NWUsIDB4YjAsIDB4MWUsIDB4ZGEsIDB4YjgsIDB4NjgsIAorICAgIDB4MGIsIDB4Y2EsIDB4MTksIDB4N2QsIDB4MTIsIDB4MTIsIDB4NWYsIDB4ODAsIDB4N2QsIDB4MjEsIDB4ZGEsIDB4MTksIDB4MzAsIDB4ZTYsIDB4MTgsIDB4N2UsIAorICAgIDB4NjAsIDB4MDAsIDB4ODAsIDB4MWUsIDB4YmUsIDB4MjcsIDB4MDEsIDB4OTcsIDB4NjgsIDB4MGQsIDB4N2EsIDB4MjcsIDB4MDEsIDB4OTcsIDB4N2UsIDB4NjAsIAorICAgIDB4OWMsIDB4N2EsIDB4NjMsIDB4MDEsIDB4YzAsIDB4ODAsIDB4MjcsIDB4N2UsIDB4NjMsIDB4MDEsIDB4YzAsIDB4YTUsIDB4YmUsIDB4MDAsIDB4MWYsIDB4N2UsIAorICAgIDB4NjAsIDB4MDEsIDB4N2UsIDB4YjAsIDB4MDAsIDB4N2UsIDB4YTAsIDB4YzgsIDB4MTIsIDB4NjEsIDB4MzYsIDB4NDAsIDB4MTEsIDB4NzUsIDB4MmYsIDB4YjMsIAorICAgIDB4MTIsIDB4NzMsIDB4MzUsIDB4YzIsIDB4MWYsIDB4NmMsIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4YzAsIDB4MTIsIDB4NjQsIDB4ODYsIDB4MjIsIDB4YzIsIAorICAgIDB4YWYsIDB4N2UsIDB4MDcsIDB4MDEsIDB4Y2IsIDB4YmUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MjgsIDB4NzQsIDB4MjAsIDB4N2EsIDB4YjMsIDB4OTEsIAorICAgIDB4MDAsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MTUsIDB4MzAsIDB4ZTUsIDB4MWIsIDB4N2UsIDB4YjMsIDB4OTEsIDB4MWEsIDB4YmUsIDB4YjAsIDB4M2YsIDB4MzgsIAorICAgIDB4MGMsIDB4ODUsIDB4MzEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NzQsIDB4ODAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MWUsIDB4NzQsIDB4MjAsIDB4N2EsIAorICAgIDB4YjMsIDB4OTEsIDB4MTUsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4MzUsIDB4M2IsIDB4MzYsIDB4ZTgsIDB4MzcsIDB4MDAsIDB4MzcsIDB4MWIsIDB4MzcsIDB4YjYsIAorICAgIDB4MzgsIDB4NGUsIDB4MzgsIDB4NjksIDB4MzgsIDB4ZmIsIDB4MzgsIDB4ODQsIDB4MzgsIDB4YzUsIDB4N2MsIDB4YjMsIDB4YmUsIDB4YjAsIDB4MDksIDB4MjgsIAorICAgIDB4MjIsIDB4NzUsIDB4MmYsIDB4MDksIDB4MTIsIDB4NzMsIDB4MzUsIDB4NzUsIDB4NTcsIDB4MDIsIDB4NzQsIDB4MjAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIAorICAgIDB4NzQsIDB4MDEsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MTEsIDB4NzQsIDB4NDAsIDB4N2EsIDB4YjMsIDB4OTEsIDB4MDAsIDB4NzQsIDB4MDEsIDB4N2EsIDB4YjMsIAorICAgIDB4OTEsIDB4MTEsIDB4MjIsIDB4YzAsIDB4YTgsIDB4YzIsIDB4YWYsIDB4MjMsIDB4NmMsIDB4YWEsIDB4MmUsIDB4NTQsIDB4MzQsIDB4ZTYsIDB4MGIsIDB4NTgsIAorICAgIDB4NTAsIDB4ODksIDB4NTQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4NzUsIDB4MmYsIDB4YjAsIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4MGEsIDB4MjIsIDB4MDksIDB4YjIsIDB4MzUsIDB4MzMsIDB4NDIsIDB4MjQsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4N2MsIDB4YjIsIDB4MjMsIDB4MGEsIAorICAgIDB4M2IsIDB4NDksIDB4MzMsIDB4MzUsIDB4NTcsIDB4ODksIDB4MzQsIDB4MzUsIDB4NjcsIDB4MzUsIDB4OTUsIDB4MzUsIDB4YzMsIDB4MzUsIDB4ZjEsIDB4MzYsIAorICAgIDB4MWYsIDB4MzYsIDB4NGQsIDB4MzYsIDB4N2IsIDB4MzYsIDB4YTksIDB4MTIsIDB4NDEsIDB4YmEsIDB4ZDIsIDB4MjgsIDB4ZDIsIDB4MDgsIDB4YzIsIDB4NDAsIAorICAgIDB4YzIsIDB4NDgsIDB4YzIsIDB4MzgsIDB4YzIsIDB4MzAsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4YjksIDB4N2UsIDB4MDQsIDB4MDAsIDB4MjAsIAorICAgIDB4N2EsIDB4MDcsIDB4MDEsIDB4OTksIDB4N2UsIDB4MDQsIDB4MDAsIDB4MzgsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YTksIDB4MTIsIDB4NDEsIDB4MjcsIDB4MTIsIAorICAgIDB4NWYsIDB4YjcsIDB4MDIsIDB4MzYsIDB4ZDcsIDB4MTIsIDB4NDEsIDB4ZDcsIDB4ZDIsIDB4MjksIDB4ZDIsIDB4MDksIDB4YzIsIDB4NDEsIDB4YzIsIDB4NDksIAorICAgIDB4YzIsIDB4MzksIDB4YzIsIDB4MzEsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4YmEsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MjAsIDB4N2EsIDB4MDcsIAorICAgIDB4MDEsIDB4OWIsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MzgsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YWIsIDB4MTIsIDB4NDEsIDB4MjcsIDB4MTIsIDB4NWYsIDB4ZTAsIAorICAgIDB4MDIsIDB4MzYsIDB4ZDcsIDB4MTIsIDB4NDEsIDB4ZjQsIDB4ZDIsIDB4MmEsIDB4ZDIsIDB4MGEsIDB4YzIsIDB4NDIsIDB4YzIsIDB4NGEsIDB4YzIsIDB4M2EsIAorICAgIDB4YzIsIDB4MzIsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4YmIsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MjAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4OWQsIAorICAgIDB4N2UsIDB4MDQsIDB4MDAsIDB4MzgsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YWQsIDB4MTIsIDB4NDEsIDB4MjcsIDB4MTIsIDB4NjAsIDB4MDksIDB4MDIsIDB4MzYsIAorICAgIDB4ZDcsIDB4MTIsIDB4NDIsIDB4MTEsIDB4ZDIsIDB4MmIsIDB4ZDIsIDB4MGIsIDB4YzIsIDB4NDMsIDB4YzIsIDB4NGIsIDB4YzIsIDB4M2IsIDB4YzIsIDB4MzMsIAorICAgIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4YmMsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MjAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4OWYsIDB4N2UsIDB4MDQsIAorICAgIDB4MDAsIDB4MzgsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YWYsIDB4MTIsIDB4NDEsIDB4MjcsIDB4MTIsIDB4NjAsIDB4MzIsIDB4MDIsIDB4MzYsIDB4ZDcsIDB4MTIsIAorICAgIDB4NDIsIDB4MmUsIDB4ZDIsIDB4MmMsIDB4ZDIsIDB4MGMsIDB4YzIsIDB4NDQsIDB4YzIsIDB4NGMsIDB4YzIsIDB4M2MsIDB4YzIsIDB4MzQsIDB4NmQsIDB4MDAsIAorICAgIDB4N2EsIDB4MDMsIDB4MDEsIDB4YmQsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MjAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YTEsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MzgsIAorICAgIDB4N2EsIDB4MDcsIDB4MDEsIDB4YjEsIDB4MTIsIDB4NDEsIDB4MjcsIDB4MTIsIDB4NjAsIDB4NWIsIDB4MDIsIDB4MzYsIDB4ZDcsIDB4MTIsIDB4NDIsIDB4NGIsIAorICAgIDB4ZDIsIDB4MmQsIDB4ZDIsIDB4MGQsIDB4YzIsIDB4NDUsIDB4YzIsIDB4NGQsIDB4YzIsIDB4M2QsIDB4YzIsIDB4MzUsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDMsIAorICAgIDB4MDEsIDB4YmUsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MjAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YTMsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MzgsIDB4N2EsIDB4MDcsIAorICAgIDB4MDEsIDB4YjMsIDB4MTIsIDB4NDEsIDB4MjcsIDB4MTIsIDB4NjAsIDB4ODQsIDB4MDIsIDB4MzYsIDB4ZDcsIDB4MTIsIDB4NDIsIDB4NjgsIDB4ZDIsIDB4MmUsIAorICAgIDB4ZDIsIDB4MGUsIDB4YzIsIDB4NDYsIDB4YzIsIDB4NGUsIDB4YzIsIDB4M2UsIDB4YzIsIDB4MzYsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4YmYsIAorICAgIDB4N2UsIDB4MDQsIDB4MDAsIDB4MjAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YTUsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MzgsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YjUsIAorICAgIDB4MTIsIDB4NDEsIDB4MjcsIDB4MTIsIDB4NjAsIDB4YWQsIDB4MDIsIDB4MzYsIDB4ZDcsIDB4MTIsIDB4NDIsIDB4ODUsIDB4ZDIsIDB4MmYsIDB4ZDIsIDB4MGYsIAorICAgIDB4YzIsIDB4NDcsIDB4YzIsIDB4NGYsIDB4YzIsIDB4M2YsIDB4YzIsIDB4MzcsIDB4NmQsIDB4MDAsIDB4N2EsIDB4MDMsIDB4MDEsIDB4YzAsIDB4N2UsIDB4MDQsIAorICAgIDB4MDAsIDB4MjAsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YTcsIDB4N2UsIDB4MDQsIDB4MDAsIDB4MzgsIDB4N2EsIDB4MDcsIDB4MDEsIDB4YjcsIDB4MTIsIDB4NDEsIAorICAgIDB4MjcsIDB4MTIsIDB4NjAsIDB4ZDYsIDB4MDIsIDB4MzYsIDB4ZDcsIDB4N2UsIDB4YTAsIDB4ZDAsIDB4N2UsIDB4NjAsIDB4MGYsIDB4MTIsIDB4NjEsIDB4MzYsIAorICAgIDB4NDAsIDB4MDUsIDB4MTIsIDB4NjQsIDB4ODYsIDB4YzIsIDB4ZDcsIDB4MjIsIDB4NzUsIDB4MmYsIDB4YjEsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MGEsIDB4NTIsIAorICAgIDB4MjMsIDB4NmQsIDB4MDAsIDB4NTksIDB4MDUsIDB4MDAsIDB4MzIsIDB4MTIsIDB4NDEsIDB4ODMsIDB4MTIsIDB4NDEsIDB4OWYsIDB4ZDAsIDB4YTgsIDB4MjIsIAorICAgIDB4NzUsIDB4MmYsIDB4YjIsIDB4MTIsIDB4NzMsIDB4MzUsIDB4MGEsIDB4MjIsIDB4MDksIDB4YjIsIDB4MzUsIDB4MzMsIDB4NDIsIDB4MjMsIDB4N2UsIDB4YjAsIAorICAgIDB4OWMsIDB4MTksIDB4YjIsIDB4MDEsIDB4YjksIDB4MTIsIDB4MzEsIDB4NGMsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4N2UsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NGMsIAorICAgIDB4MDIsIDB4MDksIDB4MzAsIDB4MDAsIDB4MGMsIDB4NzQsIDB4YmYsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDgsIDB4MTksIAorICAgIDB4MzAsIDB4MDAsIDB4MGMsIDB4N2MsIDB4NzQsIDB4NWUsIDB4NzAsIDB4MDEsIDB4NjgsIDB4MTIsIDB4NDQsIDB4NDAsIDB4Y2EsIDB4YjgsIDB4MDksIDB4YjAsIAorICAgIDB4MDAsIDB4MTAsIDB4NDQsIDB4MDIsIDB4MTksIDB4YjAsIDB4MDAsIDB4MTAsIDB4ZGEsIDB4YjgsIDB4ODAsIDB4MDIsIDB4NTQsIDB4YmYsIDB4N2MsIDB4NzQsIAorICAgIDB4NWUsIDB4NzAsIDB4MDgsIDB4NjgsIDB4MDQsIDB4NDQsIDB4MDgsIDB4ODAsIDB4MDIsIDB4NTQsIDB4ZjcsIDB4MDksIDB4MzAsIDB4MDAsIDB4MGMsIDB4Y2EsIAorICAgIDB4YjgsIDB4NzQsIDB4YmYsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIDB4ZGEsIDB4YjgsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDgsIDB4MTksIDB4MzAsIDB4MDAsIAorICAgIDB4MGMsIDB4MGEsIDB4NjIsIDB4MDksIDB4YjYsIDB4MzUsIDB4MzMsIDB4M2UsIDB4MjAsIDB4MGEsIDB4NjIsIDB4N2MsIDB4NzQsIDB4NWUsIDB4NzAsIDB4MDIsIAorICAgIDB4NjgsIDB4MjAsIDB4NDIsIDB4MjcsIDB4Y2EsIDB4YjgsIDB4NzQsIDB4NjEsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDgsIDB4N2UsIDB4NDQsIDB4MDAsIDB4MTAsIAorICAgIDB4NTksIDB4NDYsIDB4MDEsIDB4YTksIDB4MDksIDB4YjAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4MDEsIDB4MTksIDB4YjAsIDB4MDAsIDB4MTAsIDB4ZGEsIDB4YjgsIAorICAgIDB4ODAsIDB4MTEsIDB4ZjQsIDB4NTIsIDB4MjcsIDB4NzQsIDB4YTEsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDgsIDB4N2UsIDB4NDQsIDB4MDAsIDB4MzgsIDB4NTksIAorICAgIDB4NDYsIDB4MDEsIDB4YTksIDB4ZDAsIDB4YTgsIDB4MjIsIDB4N2MsIDB4NzQsIDB4N2UsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MDIsIDB4MDksIDB4MzAsIAorICAgIDB4MDAsIDB4MGMsIDB4NzQsIDB4YmYsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDgsIDB4N2MsIDB4NzQsIDB4NWUsIDB4NzAsIAorICAgIDB4MDEsIDB4NjgsIDB4MDQsIDB4NDQsIDB4ODAsIDB4ODAsIDB4MDIsIDB4NTQsIDB4N2YsIDB4N2MsIDB4NzQsIDB4NWUsIDB4NzAsIDB4MDgsIDB4NjgsIDB4MDQsIAorICAgIDB4NDQsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NTQsIDB4ZmQsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDgsIDB4MTksIDB4MzAsIDB4MDAsIDB4MGMsIDB4MGEsIDB4NjIsIAorICAgIDB4MDksIDB4YjYsIDB4MzUsIDB4MzMsIDB4YTUsIDB4ZmQsIDB4ZjQsIDB4YTUsIDB4ZmUsIDB4Y2EsIDB4MjgsIDB4M2UsIDB4MjAsIDB4MGEsIDB4NjIsIDB4ZGEsIAorICAgIDB4MjgsIDB4N2MsIDB4NzQsIDB4NWUsIDB4NzAsIDB4MDIsIDB4NjgsIDB4MTAsIDB4YTUsIDB4ZWQsIDB4NDIsIDB4MjgsIDB4NDIsIDB4MjYsIDB4N2UsIDB4NDQsIAorICAgIDB4MDAsIDB4MDgsIDB4NTksIDB4NDYsIDB4MDEsIDB4OTksIDB4ODAsIDB4MDQsIDB4YTUsIDB4ZWUsIDB4NTIsIDB4MjgsIDB4N2MsIDB4NzQsIDB4NWUsIDB4NzAsIAorICAgIDB4MDQsIDB4NjgsIDB4MTAsIDB4YTUsIDB4ZWQsIDB4NDIsIDB4MjksIDB4NDIsIDB4MjYsIDB4N2UsIDB4NDQsIDB4MDAsIDB4MDgsIDB4NTksIDB4NDYsIDB4MDEsIAorICAgIDB4OTksIDB4ODAsIDB4MTUsIDB4YTUsIDB4ZWUsIDB4NTIsIDB4MjksIDB4N2MsIDB4NzQsIDB4NWUsIDB4NzAsIDB4MDIsIDB4NzgsIDB4MGEsIDB4NTIsIDB4MjYsIAorICAgIDB4N2UsIDB4NDQsIDB4MDAsIDB4MjAsIDB4NTksIDB4NDYsIDB4MDEsIDB4OTksIDB4MTIsIDB4NDIsIDB4YTIsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4N2UsIDB4MDQsIAorICAgIDB4ODAsIDB4MDAsIDB4NGMsIDB4MDIsIDB4MDksIDB4MzAsIDB4MDAsIDB4MGMsIDB4NzQsIDB4YmYsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIDB4MTksIDB4NDAsIAorICAgIDB4MDAsIDB4MTAsIDB4MTksIDB4MzAsIDB4MDAsIDB4MGMsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4N2UsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MDIsIDB4MDksIAorICAgIDB4MzAsIDB4MDAsIDB4MGMsIDB4NzQsIDB4YmYsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIDB4MTksIDB4NDAsIDB4MDAsIDB4MTgsIDB4MTksIDB4MzAsIDB4MDAsIAorICAgIDB4MGMsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4NzUsIDB4MmYsIDB4YjUsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NGMsIDB4MDIsIAorICAgIDB4MDksIDB4YjAsIDB4MDAsIDB4MGMsIDB4NDQsIDB4NDAsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIDB4ZTUsIDB4NTgsIDB4YjQsIDB4MDcsIDB4MjMsIDB4MDksIAorICAgIDB4YjAsIDB4MDAsIDB4MTAsIDB4NGUsIDB4YjAsIDB4MDIsIDB4MTksIDB4YjAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MzAsIDB4MDAsIDB4MGMsIDB4NzQsIDB4YmYsIAorICAgIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDQsIDB4NTQsIDB4ZjcsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDQsIDB4MTksIDB4MzAsIAorICAgIDB4MDAsIDB4MGMsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4NzUsIDB4MmYsIDB4YjYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4MDQsIDB4ODAsIDB4MDAsIDB4NGMsIAorICAgIDB4MDIsIDB4ZTUsIDB4NTgsIDB4YjQsIDB4MDcsIDB4MTgsIDB4MDksIDB4MzAsIDB4MDAsIDB4MGMsIDB4NzQsIDB4YmYsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIAorICAgIDB4MDksIDB4YjAsIDB4MDAsIDB4MDQsIDB4NDQsIDB4MDgsIDB4MTksIDB4YjAsIDB4MDAsIDB4MDQsIDB4MTksIDB4MzAsIDB4MDAsIDB4MGMsIDB4MDksIDB4YjAsIAorICAgIDB4MDAsIDB4MGMsIDB4NTQsIDB4YmYsIDB4MTksIDB4YjAsIDB4MDAsIDB4MGMsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4NzUsIDB4MmYsIDB4YjQsIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4N2EsIDB4MjEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NDEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4YjAsIDB4MDEsIAorICAgIDB4N2UsIDB4YTAsIDB4YzgsIDB4N2MsIDB4NjQsIDB4MTIsIDB4NjEsIDB4MzYsIDB4MTIsIDB4NjQsIDB4ODYsIDB4ZDAsIDB4YTgsIDB4MjIsIDB4MzksIDB4MmUsIAorICAgIDB4MzksIDB4NzUsIDB4MzksIDB4YmMsIDB4M2EsIDB4MDMsIDB4M2EsIDB4NGEsIDB4M2EsIDB4OTEsIDB4M2EsIDB4ZDgsIDB4M2IsIDB4MWYsIDB4NzUsIDB4MmYsIAorICAgIDB4NTUsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NzUsIDB4MmYsIDB4MDAsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NjEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIAorICAgIDB4N2EsIDB4NzEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4MTcsIDB4MDEsIDB4NjksIDB4N2UsIDB4MjcsIDB4MDEsIDB4NzksIDB4MmQsIDB4MjMsIAorICAgIDB4N2UsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4N2EsIDB4MTksIDB4YjAsIDB4MGIsIDB4MTQsIDB4YmUsIDB4MTQsIDB4MDgsIDB4MmMsIDB4MzgsIDB4MGYsIAorICAgIDB4MWIsIDB4MzQsIDB4NzgsIDB4ZWMsIDB4N2EsIDB4MTcsIDB4MDEsIDB4NjksIDB4N2EsIDB4MjcsIDB4MDEsIDB4NzksIDB4MDIsIDB4NDYsIDB4NGYsIDB4N2UsIAorICAgIDB4MTQsIDB4MDQsIDB4MmQsIDB4ODAsIDB4ZWIsIDB4NzUsIDB4MmYsIDB4NTUsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NzUsIDB4MmYsIDB4MDEsIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4N2EsIDB4NjEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NzEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4MTcsIDB4MDEsIAorICAgIDB4NmIsIDB4N2UsIDB4MjcsIDB4MDEsIDB4N2IsIDB4MmQsIDB4MjMsIDB4N2UsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4N2EsIDB4MTksIDB4YjAsIDB4MGIsIAorICAgIDB4MTQsIDB4YmUsIDB4MTQsIDB4MGMsIDB4MmMsIDB4MzgsIDB4MGYsIDB4MWIsIDB4MzQsIDB4NzgsIDB4ZWMsIDB4N2EsIDB4MTcsIDB4MDEsIDB4NmIsIDB4N2EsIAorICAgIDB4MjcsIDB4MDEsIDB4N2IsIDB4MDIsIDB4NDksIDB4N2MsIDB4N2UsIDB4MTQsIDB4MDgsIDB4MmQsIDB4ODAsIDB4ZWIsIDB4NzUsIDB4MmYsIDB4NTUsIDB4MTIsIAorICAgIDB4NzMsIDB4MzUsIDB4NzUsIDB4MmYsIDB4MDIsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NjEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NzEsIAorICAgIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4MTcsIDB4MDEsIDB4NmQsIDB4N2UsIDB4MjcsIDB4MDEsIDB4N2QsIDB4MmQsIDB4MjMsIDB4N2UsIDB4MDksIAorICAgIDB4YjAsIDB4MGIsIDB4MDQsIDB4N2EsIDB4MTksIDB4YjAsIDB4MGIsIDB4MTQsIDB4YmUsIDB4MTQsIDB4MTAsIDB4MmMsIDB4MzgsIDB4MGYsIDB4MWIsIDB4MzQsIAorICAgIDB4NzgsIDB4ZWMsIDB4N2EsIDB4MTcsIDB4MDEsIDB4NmQsIDB4N2EsIDB4MjcsIDB4MDEsIDB4N2QsIDB4MDIsIDB4NGMsIDB4YTksIDB4N2UsIDB4MTQsIDB4MGMsIAorICAgIDB4MmQsIDB4ODAsIDB4ZWIsIDB4NzUsIDB4MmYsIDB4NTUsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NzUsIDB4MmYsIDB4MDMsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIAorICAgIDB4NjEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NzEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4MTcsIDB4MDEsIDB4NmYsIDB4N2UsIAorICAgIDB4MjcsIDB4MDEsIDB4N2YsIDB4MmQsIDB4MjMsIDB4N2UsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4N2EsIDB4MTksIDB4YjAsIDB4MGIsIDB4MTQsIDB4YmUsIAorICAgIDB4MTQsIDB4MTQsIDB4MmMsIDB4MzgsIDB4MGYsIDB4MWIsIDB4MzQsIDB4NzgsIDB4ZWMsIDB4N2EsIDB4MTcsIDB4MDEsIDB4NmYsIDB4N2EsIDB4MjcsIDB4MDEsIAorICAgIDB4N2YsIDB4MDIsIDB4NGYsIDB4ZDYsIDB4N2UsIDB4MTQsIDB4MTAsIDB4MmQsIDB4ODAsIDB4ZWIsIDB4NzUsIDB4MmYsIDB4NTUsIDB4MTIsIDB4NzMsIDB4MzUsIAorICAgIDB4NzUsIDB4MmYsIDB4MDQsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NjEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NzEsIDB4MmYsIDB4MTIsIAorICAgIDB4NzMsIDB4MzUsIDB4N2UsIDB4MTcsIDB4MDEsIDB4NzEsIDB4N2UsIDB4MjcsIDB4MDEsIDB4ODEsIDB4MmQsIDB4MjMsIDB4N2UsIDB4MDksIDB4YjAsIDB4MGIsIAorICAgIDB4MDQsIDB4N2EsIDB4MTksIDB4YjAsIDB4MGIsIDB4MTQsIDB4YmUsIDB4MTQsIDB4MTgsIDB4MmMsIDB4MzgsIDB4MGYsIDB4MWIsIDB4MzQsIDB4NzgsIDB4ZWMsIAorICAgIDB4N2EsIDB4MTcsIDB4MDEsIDB4NzEsIDB4N2EsIDB4MjcsIDB4MDEsIDB4ODEsIDB4MDIsIDB4NTMsIDB4MDMsIDB4N2UsIDB4MTQsIDB4MTQsIDB4MmQsIDB4ODAsIAorICAgIDB4ZWIsIDB4NzUsIDB4MmYsIDB4NTUsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NzUsIDB4MmYsIDB4MDUsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NjEsIDB4MmYsIAorICAgIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NzEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4MTcsIDB4MDEsIDB4NzMsIDB4N2UsIDB4MjcsIDB4MDEsIAorICAgIDB4ODMsIDB4MmQsIDB4MjMsIDB4N2UsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4N2EsIDB4MTksIDB4YjAsIDB4MGIsIDB4MTQsIDB4YmUsIDB4MTQsIDB4MWMsIAorICAgIDB4MmMsIDB4MzgsIDB4MGYsIDB4MWIsIDB4MzQsIDB4NzgsIDB4ZWMsIDB4N2EsIDB4MTcsIDB4MDEsIDB4NzMsIDB4N2EsIDB4MjcsIDB4MDEsIDB4ODMsIDB4MDIsIAorICAgIDB4NTYsIDB4MzAsIDB4N2UsIDB4MTQsIDB4MTgsIDB4MmQsIDB4ODAsIDB4ZWIsIDB4NzUsIDB4MmYsIDB4NTUsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NzUsIDB4MmYsIAorICAgIDB4MDYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NjEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NzEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIAorICAgIDB4N2UsIDB4MTcsIDB4MDEsIDB4NzUsIDB4N2UsIDB4MjcsIDB4MDEsIDB4ODUsIDB4MmQsIDB4MjMsIDB4N2UsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4N2EsIAorICAgIDB4MTksIDB4YjAsIDB4MGIsIDB4MTQsIDB4YmUsIDB4MTQsIDB4MjAsIDB4MmMsIDB4MzgsIDB4MGYsIDB4MWIsIDB4MzQsIDB4NzgsIDB4ZWMsIDB4N2EsIDB4MTcsIAorICAgIDB4MDEsIDB4NzUsIDB4N2EsIDB4MjcsIDB4MDEsIDB4ODUsIDB4MDIsIDB4NTksIDB4NWQsIDB4N2UsIDB4MTQsIDB4MWMsIDB4MmQsIDB4ODAsIDB4ZWIsIDB4NzUsIAorICAgIDB4MmYsIDB4NTUsIDB4MTIsIDB4NzMsIDB4MzUsIDB4NzUsIDB4MmYsIDB4MDcsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2EsIDB4NjEsIDB4MmYsIDB4MTIsIDB4NzMsIAorICAgIDB4MzUsIDB4N2EsIDB4NzEsIDB4MmYsIDB4MTIsIDB4NzMsIDB4MzUsIDB4N2UsIDB4MTcsIDB4MDEsIDB4NzcsIDB4N2UsIDB4MjcsIDB4MDEsIDB4ODcsIDB4MmQsIAorICAgIDB4MjMsIDB4N2UsIDB4MDksIDB4YjAsIDB4MGIsIDB4MDQsIDB4N2EsIDB4MTksIDB4YjAsIDB4MGIsIDB4MTQsIDB4YmUsIDB4MTQsIDB4MjQsIDB4MmMsIDB4MzgsIAorICAgIDB4MGYsIDB4MWIsIDB4MzQsIDB4NzgsIDB4ZWMsIDB4N2EsIDB4MTcsIDB4MDEsIDB4NzcsIDB4N2EsIDB4MjcsIDB4MDEsIDB4ODcsIDB4MDIsIDB4NWMsIDB4OGEsIAorICAgIDB4N2UsIDB4MTQsIDB4MjAsIDB4MmQsIDB4ODAsIDB4ZWIsIAorCisvLyBTZWdtZW50ICMxNSwgU3RhcnQgQWRkcmVzcyAwMGZmNDAwMCwgTGVuZ3RoIDEzMTA5CisweGZmLDB4MDAsMHgwMCwweDQwLDB4MzUsMHgzMywKKyAgICAweDdlLCAweDA0LCAweDAwLCAweDAxLCAweDdlLCAweDE0LCAweDdmLCAweGY4LCAweDdlLCAweDI0LCAweDAwLCAweGZlLCAweDdkLCAweDMxLCAweDBiLCAweDFhLCAKKyAgICAweDUwLCAweDFiLCAweDBhLCAweDUwLCAweDdlLCAweDE0LCAweDQwLCAweDFiLCAweDAyLCAweDQwLCAweDc0LCAweDdlLCAweGY4LCAweDAwLCAweDU5LCAweDc1LCAKKyAgICAweGIwLCAweGRmLCAweDdlLCAweGIwLCAweDAxLCAweDdhLCAweGIzLCAweDkwLCAweDAwLCAweDdlLCAweGY0LCAweDQwLCAweDMwLCAweDAyLCAweDQwLCAweDhiLCAKKyAgICAweDEyLCAweDc0LCAweDRlLCAweGY1LCAweDJlLCAweDdhLCAweGExLCAweDJkLCAweDdhLCAweDExLCAweDU4LCAweDEyLCAweDZiLCAweDAyLCAweDEyLCAweDQwLCAKKyAgICAweGViLCAweDdlLCAweGIzLCAweDNmLCAweGYxLCAweDYwLCAweDAzLCAweDEyLCAweDQzLCAweDc5LCAweDEyLCAweDZiLCAweGRlLCAweGQyLCAweGFmLCAweDAyLCAKKyAgICAweDMwLCAweDAwLCAweDdlLCAweDA0LCAweDAwLCAweGZmLCAweDdlLCAweDE4LCAweDQwLCAweDYwLCAweDdhLCAweDFjLCAweDAwLCAweDAxLCAweDg5LCAweDE4LCAKKyAgICAweDdlLCAweGIwLCAweDAxLCAweDdhLCAweGIzLCAweDk0LCAweDAwLCAweDdhLCAweGIzLCAweDJjLCAweDM1LCAweDdlLCAweGIwLCAweDAxLCAweDdhLCAweGIzLCAKKyAgICAweDkzLCAweDAwLCAweDg5LCAweDA4LCAweDdlLCAweDA0LCAweDAwLCAweGZmLCAweDdlLCAweDE4LCAweDQwLCAweDgyLCAweDdhLCAweDFjLCAweDAwLCAweDAxLCAKKyAgICAweDg5LCAweDE4LCAweDdlLCAweGIwLCAweDAwLCAweDdhLCAweGIzLCAweDkzLCAweDAwLCAweDg5LCAweDA4LCAweDdlLCAweDA4LCAweDAwLCAweDIwLCAweDdlLCAKKyAgICAweDQ0LCAweDA0LCAweDAwLCAweDdlLCAweDQwLCAweDAwLCAweDdlLCAweGU0LCAweDQwLCAweDlkLCAweDAyLCAweDczLCAweDUwLCAweDdlLCAweDA4LCAweDAxLCAKKyAgICAweDU5LCAweDdlLCAweDQ0LCAweDJhLCAweGRkLCAweDdlLCAweDQwLCAweDAwLCAweDdlLCAweGU0LCAweDQwLCAweGFmLCAweDAyLCAweDczLCAweDUwLCAweDdlLCAKKyAgICAweDA4LCAweDAwLCAweDU5LCAweDdlLCAweDQ0LCAweDAxLCAweDAwLCAweDdlLCAweDQwLCAweDUzLCAweDdlLCAweGU0LCAweDQwLCAweGMxLCAweDAyLCAweDczLCAKKyAgICAweDUwLCAweDc1LCAweDU3LCAweDAxLCAweDc1LCAweDU2LCAweDAwLCAweDdlLCAweDA0LCAweDAwLCAweDA4LCAweDc1LCAweDU0LCAweDU4LCAweDc1LCAweDU1LCAKKyAgICAweDA4LCAweDc1LCAweDUxLCAweDA4LCAweDc1LCAweDUzLCAweDAxLCAweDc1LCAweDg5LCAweDAxLCAweDc1LCAweDhhLCAweDAxLCAweDc1LCAweDhjLCAweDAwLCAKKyAgICAweGQyLCAweDhjLCAweDdlLCAweDA0LCAweDAwLCAweDAyLCAweDdhLCAweDA1LCAweDQyLCAweDg5LCAweGY0LCAweDc1LCAweGI3LCAweDdmLCAweDc1LCAweGI4LCAKKyAgICAweDdmLCAweDc1LCAweGIzLCAweDAxLCAweDc1LCAweGIyLCAweDAxLCAweGQyLCAweGE5LCAweDIyLCAweDc1LCAweGIwLCAweGRmLCAweGU0LCAweGQ1LCAweGUwLCAKKyAgICAweGZkLCAweDc1LCAweGIwLCAweGVmLCAweDdlLCAweDI0LCAweDgwLCAweDAwLCAweDdlLCAweDExLCAweDJlLCAweDdlLCAweGEwLCAweDA4LCAweDE5LCAweGEyLCAKKyAgICAweDAwLCAweDEwLCAweDJlLCAweDI0LCAweDAxLCAweDAwLCAweGE1LCAweGQ5LCAweGYyLCAweDdlLCAweDIwLCAweDAwLCAweDEyLCAweDQxLCAweDgzLCAweDBiLCAKKyAgICAweDIwLCAweGJlLCAweDIxLCAweDJlLCAweDc4LCAweGY2LCAweDIyLCAweDdlLCAweDA0LCAweDgwLCAweDAwLCAweDRjLCAweDAyLCAweDc0LCAweGJmLCAweDE5LCAKKyAgICAweGIwLCAweDAwLCAweDBjLCAweDc0LCAweDEwLCAweDE5LCAweGIwLCAweDAwLCAweDA4LCAweDc0LCAweDgwLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAweDdlLCAKKyAgICAweDU0LCAweDAwLCAweDAyLCAweDE5LCAweGEwLCAweDAwLCAweDA0LCAweDE5LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDAzLCAweDE5LCAweGIwLCAweDAwLCAKKyAgICAweDBjLCAweDc0LCAweDA3LCAweDIwLCAweDY4LCAweDAyLCAweDc0LCAweDBmLCAweDE5LCAweGIwLCAweDAwLCAweDA0LCAweDMwLCAweDZiLCAweDE3LCAweDc0LCAKKyAgICAweGJmLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAweDc0LCAweDI4LCAweDIwLCAweDY4LCAweDAyLCAweDc0LCAweDIwLCAweDE5LCAweGIwLCAweDAwLCAweDA0LCAKKyAgICAweDc0LCAweDAzLCAweDE5LCAweGIwLCAweDAwLCAweDBjLCAweDc0LCAweGE3LCAweDE5LCAweGIwLCAweDAwLCAweDA4LCAweDc0LCAweDBjLCAweDE5LCAweGIwLCAKKyAgICAweDAwLCAweDEwLCAweDIyLCAweDdlLCAweDA0LCAweDgwLCAweDAwLCAweDRjLCAweDAyLCAweGU0LCAweDE5LCAweGIwLCAweDAwLCAweDA0LCAweDA5LCAweGIwLCAKKyAgICAweDAwLCAweDEwLCAweDU0LCAweDA4LCAweDE5LCAweGIwLCAweDAwLCAweDEwLCAweDc0LCAweGE3LCAweDE5LCAweGIwLCAweDAwLCAweDA4LCAweDIyLCAweDdjLCAKKyAgICAweGIyLCAweDIzLCAweDBhLCAweDJiLCAweDQ5LCAweDIyLCAweDQxLCAweGFhLCAweDg5LCAweDI0LCAweDQxLCAweGJhLCAweDQxLCAweGQ3LCAweDQxLCAweGY0LCAKKyAgICAweDQyLCAweDExLCAweDQyLCAweDJlLCAweDQyLCAweDRiLCAweDQyLCAweDY4LCAweDQyLCAweDg1LCAweGMyLCAweDEwLCAweGMyLCAweDE4LCAweGMyLCAweDA4LCAKKyAgICAweDdlLCAweDA0LCAweDA0LCAweDJkLCAweDdhLCAweDA3LCAweDAxLCAweDU5LCAweDdhLCAweDA3LCAweDAxLCAweDY5LCAweDZkLCAweDAwLCAweDdhLCAweDA3LCAKKyAgICAweDAxLCAweDc5LCAweDdhLCAweDA3LCAweDAxLCAweDg5LCAweDIyLCAweGMyLCAweDExLCAweGMyLCAweDE5LCAweGMyLCAweDA5LCAweDdlLCAweDA0LCAweDA4LCAKKyAgICAweDJkLCAweDdhLCAweDA3LCAweDAxLCAweDViLCAweDdhLCAweDA3LCAweDAxLCAweDZiLCAweDZkLCAweDAwLCAweDdhLCAweDA3LCAweDAxLCAweDdiLCAweDdhLCAKKyAgICAweDA3LCAweDAxLCAweDhiLCAweDIyLCAweGMyLCAweDEyLCAweGMyLCAweDFhLCAweGMyLCAweDBhLCAweDdlLCAweDA0LCAweDBjLCAweDJkLCAweDdhLCAweDA3LCAKKyAgICAweDAxLCAweDVkLCAweDdhLCAweDA3LCAweDAxLCAweDZkLCAweDZkLCAweDAwLCAweDdhLCAweDA3LCAweDAxLCAweDdkLCAweDdhLCAweDA3LCAweDAxLCAweDhkLCAKKyAgICAweDIyLCAweGMyLCAweDEzLCAweGMyLCAweDFiLCAweGMyLCAweDBiLCAweDdlLCAweDA0LCAweDEwLCAweDJkLCAweDdhLCAweDA3LCAweDAxLCAweDVmLCAweDdhLCAKKyAgICAweDA3LCAweDAxLCAweDZmLCAweDZkLCAweDAwLCAweDdhLCAweDA3LCAweDAxLCAweDdmLCAweDdhLCAweDA3LCAweDAxLCAweDhmLCAweDIyLCAweGMyLCAweDE0LCAKKyAgICAweGMyLCAweDFjLCAweGMyLCAweDBjLCAweDdlLCAweDA0LCAweDE0LCAweDJkLCAweDdhLCAweDA3LCAweDAxLCAweDYxLCAweDdhLCAweDA3LCAweDAxLCAweDcxLCAKKyAgICAweDZkLCAweDAwLCAweDdhLCAweDA3LCAweDAxLCAweDgxLCAweDdhLCAweDA3LCAweDAxLCAweDkxLCAweDIyLCAweGMyLCAweDE1LCAweGMyLCAweDFkLCAweGMyLCAKKyAgICAweDBkLCAweDdlLCAweDA0LCAweDE4LCAweDJkLCAweDdhLCAweDA3LCAweDAxLCAweDYzLCAweDdhLCAweDA3LCAweDAxLCAweDczLCAweDZkLCAweDAwLCAweDdhLCAKKyAgICAweDA3LCAweDAxLCAweDgzLCAweDdhLCAweDA3LCAweDAxLCAweDkzLCAweDIyLCAweGMyLCAweDE2LCAweGMyLCAweDFlLCAweGMyLCAweDBlLCAweDdlLCAweDA0LCAKKyAgICAweDFjLCAweDJkLCAweDdhLCAweDA3LCAweDAxLCAweDY1LCAweDdhLCAweDA3LCAweDAxLCAweDc1LCAweDZkLCAweDAwLCAweDdhLCAweDA3LCAweDAxLCAweDg1LCAKKyAgICAweDdhLCAweDA3LCAweDAxLCAweDk1LCAweDIyLCAweGMyLCAweDE3LCAweGMyLCAweDFmLCAweGMyLCAweDBmLCAweDdlLCAweDA0LCAweDIwLCAweDJkLCAweDdhLCAKKyAgICAweDA3LCAweDAxLCAweDY3LCAweDdhLCAweDA3LCAweDAxLCAweDc3LCAweDZkLCAweDAwLCAweDdhLCAweDA3LCAweDAxLCAweDg3LCAweDdhLCAweDA3LCAweDAxLCAKKyAgICAweDk3LCAweDIyLCAweDdjLCAweGIyLCAweDIzLCAweDBhLCAweDJiLCAweDQ5LCAweDIyLCAweDQyLCAweGFkLCAweDg5LCAweDI0LCAweDQyLCAweGJkLCAweDQyLCAKKyAgICAweGQ0LCAweDQyLCAweGViLCAweDQzLCAweDAyLCAweDQzLCAweDE5LCAweDQzLCAweDMwLCAweDQzLCAweDQ3LCAweDQzLCAweDVlLCAweDMwLCAweDQwLCAweDA3LCAKKyAgICAweDIwLCAweDU4LCAweDA0LCAweGMyLCAweDI4LCAweDgwLCAweDBjLCAweDMwLCAweDQ4LCAweDA3LCAweDIwLCAweDUwLCAweDA0LCAweGMyLCAweDI4LCAweDgwLCAKKyAgICAweDAyLCAweGQyLCAweDI4LCAweDIyLCAweDMwLCAweDQxLCAweDA3LCAweDIwLCAweDU5LCAweDA0LCAweGMyLCAweDI5LCAweDgwLCAweDBjLCAweDMwLCAweDQ5LCAKKyAgICAweDA3LCAweDIwLCAweDUxLCAweDA0LCAweGMyLCAweDI5LCAweDgwLCAweDAyLCAweGQyLCAweDI5LCAweDIyLCAweDMwLCAweDQyLCAweDA3LCAweDIwLCAweDVhLCAKKyAgICAweDA0LCAweGMyLCAweDJhLCAweDgwLCAweDBjLCAweDMwLCAweDRhLCAweDA3LCAweDIwLCAweDUyLCAweDA0LCAweGMyLCAweDJhLCAweDgwLCAweDAyLCAweGQyLCAKKyAgICAweDJhLCAweDIyLCAweDMwLCAweDQzLCAweDA3LCAweDIwLCAweDViLCAweDA0LCAweGMyLCAweDJiLCAweDgwLCAweDBjLCAweDMwLCAweDRiLCAweDA3LCAweDIwLCAKKyAgICAweDUzLCAweDA0LCAweGMyLCAweDJiLCAweDgwLCAweDAyLCAweGQyLCAweDJiLCAweDIyLCAweDMwLCAweDQ0LCAweDA3LCAweDIwLCAweDVjLCAweDA0LCAweGMyLCAKKyAgICAweDJjLCAweDgwLCAweDBjLCAweDMwLCAweDRjLCAweDA3LCAweDIwLCAweDU0LCAweDA0LCAweGMyLCAweDJjLCAweDgwLCAweDAyLCAweGQyLCAweDJjLCAweDIyLCAKKyAgICAweDMwLCAweDQ1LCAweDA3LCAweDIwLCAweDVkLCAweDA0LCAweGMyLCAweDJkLCAweDgwLCAweDBjLCAweDMwLCAweDRkLCAweDA3LCAweDIwLCAweDU1LCAweDA0LCAKKyAgICAweGMyLCAweDJkLCAweDgwLCAweDAyLCAweGQyLCAweDJkLCAweDIyLCAweDMwLCAweDQ2LCAweDA3LCAweDIwLCAweDVlLCAweDA0LCAweGMyLCAweDJlLCAweDgwLCAKKyAgICAweDBjLCAweDMwLCAweDRlLCAweDA3LCAweDIwLCAweDU2LCAweDA0LCAweGMyLCAweDJlLCAweDgwLCAweDAyLCAweGQyLCAweDJlLCAweDIyLCAweDMwLCAweDQ3LCAKKyAgICAweDA3LCAweDIwLCAweDVmLCAweDA0LCAweGMyLCAweDJmLCAweDgwLCAweDBjLCAweDMwLCAweDRmLCAweDA3LCAweDIwLCAweDU3LCAweDA0LCAweGMyLCAweDJmLCAKKyAgICAweDgwLCAweDAyLCAweGQyLCAweDJmLCAweDIyLCAweDQ0LCAweDY2LCAweDQzLCAweDhhLCAweGJlLCAweGIwLCAweDAyLCAweDQwLCAweDAxLCAweDIyLCAweDIzLCAKKyAgICAweDBhLCAweDViLCAweDQ5LCAweDU1LCAweDQzLCAweDc1LCAweDk5LCAweDU0LCAweGQzLCAweDIyLCAweDdlLCAweGIwLCAweDAwLCAweDdhLCAweGIzLCAweDk0LCAKKyAgICAweDAwLCAweDdhLCAweGIzLCAweDJjLCAweDM1LCAweDEyLCAweDQ0LCAweDdhLCAweDdlLCAweDA0LCAweDI4LCAweDJkLCAweDdhLCAweDA3LCAweDAxLCAweGMxLCAKKyAgICAweDdhLCAweDA3LCAweDAxLCAweGMzLCAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDdhLCAweDA3LCAweDAxLCAweGM3LCAweDdhLCAweDA3LCAweDAxLCAweGM5LCAKKyAgICAweDdlLCAweDA0LCAweDY2LCAweDdmLCAweDdhLCAweDA1LCAweDRiLCAweDc0LCAweDIwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDYwLCAweDdhLCAKKyAgICAweGIzLCAweDkxLCAweDFjLCAweDc0LCAweDEyLCAweDdhLCAweGIzLCAweDkxLCAweDA2LCAweDc0LCAweDQwLCAweDdhLCAweGIzLCAweDkxLCAweDA3LCAweDc0LCAKKyAgICAweDFlLCAweDdhLCAweGIzLCAweDkxLCAweDEwLCAweDc0LCAweDQ4LCAweDdhLCAweGIzLCAweDkxLCAweDEyLCAweDc0LCAweDEwLCAweDdhLCAweGIzLCAweDkxLCAKKyAgICAweDEzLCAweDc0LCAweDNmLCAweDdhLCAweGIzLCAweDkxLCAweDE0LCAweDc0LCAweDQwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDYwLCAweDdhLCAKKyAgICAweGIzLCAweDkxLCAweDFjLCAweDc0LCAweDE0LCAweDdhLCAweGIzLCAweDkxLCAweDA2LCAweDc0LCAweDQwLCAweDdhLCAweGIzLCAweDkxLCAweDA3LCAweDc0LCAKKyAgICAweDE2LCAweDdhLCAweGIzLCAweDkxLCAweDEwLCAweDc0LCAweDA4LCAweDdhLCAweGIzLCAweDkxLCAweDExLCAweDc0LCAweDIwLCAweDdhLCAweGIzLCAweDkxLCAKKyAgICAweDEzLCAweDc0LCAweDNmLCAweDdhLCAweGIzLCAweDkxLCAweDE0LCAweDc0LCAweDYwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDYwLCAweDdhLCAKKyAgICAweGIzLCAweDkxLCAweDFjLCAweDc0LCAweDE2LCAweDdhLCAweGIzLCAweDkxLCAweDA2LCAweDc0LCAweDIwLCAweDdhLCAweGIzLCAweDkxLCAweDA3LCAweDc0LCAKKyAgICAweDJmLCAweDdhLCAweGIzLCAweDkxLCAweDEwLCAweDc0LCAweDQ4LCAweDdhLCAweGIzLCAweDkxLCAweDEyLCAweDc0LCAweDEwLCAweDdhLCAweGIzLCAweDkxLCAKKyAgICAweDEzLCAweDc0LCAweDNmLCAweDdhLCAweGIzLCAweDkxLCAweDE0LCAweDc0LCAweDAyLCAweDdhLCAweGIzLCAweDkxLCAweDA2LCAweDc0LCAweDBmLCAweDdhLCAKKyAgICAweGIzLCAweDkxLCAweDA3LCAweDEyLCAweDQwLCAweGZhLCAweDdlLCAweDIwLCAweDAwLCAweDEyLCAweDQxLCAweDlmLCAweDBiLCAweDIwLCAweGJlLCAweDIxLCAKKyAgICAweDJlLCAweDc4LCAweGY2LCAweGQyLCAweGE4LCAweDIyLCAweDdlLCAweGIwLCAweDAxLCAweDdhLCAweGIzLCAweDk0LCAweDAwLCAweDdhLCAweGIzLCAweDJjLCAKKyAgICAweDM1LCAweDEyLCAweDQ0LCAweDdhLCAweDc1LCAweGIwLCAweGRmLCAweGMyLCAweGE4LCAweDIyLCAweDc0LCAweDAyLCAweDdhLCAweGIzLCAweDkxLCAweDA2LCAKKyAgICAweDc0LCAweDAxLCAweDdhLCAweGIzLCAweDkxLCAweDA3LCAweDdlLCAweDIwLCAweDA0LCAweDdjLCAweGIyLCAweGMyLCAweGQ3LCAweDEzLCAweDEzLCAweDEzLCAKKyAgICAweDEzLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDYwLCAweDdhLCAweGIzLCAweDkxLCAweDFjLCAweDc0LCAweDAyLCAweDdhLCAweGIzLCAweDkxLCAKKyAgICAweDEyLCAweGE1LCAweGRhLCAweGU1LCAweDIyLCAweGNhLCAweDA5LCAweDEyLCAweDMwLCAweDBlLCAweDEwLCAweDAxLCAweDM0LCAweGQ1LCAweDUxLCAweDQwLCAKKyAgICAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDAyLCAweDdhLCAweGIzLCAweDkxLCAweDA2LCAweDdlLCAweGIzLCAweDkxLCAweDA3LCAKKyAgICAweDc0LCAweDAzLCAweDdhLCAweGIzLCAweDkxLCAweDA2LCAweDdlLCAweGIzLCAweDkxLCAweDA3LCAweDdlLCAweGIzLCAweDkxLCAweDE0LCAweDdlLCAweGIzLCAKKyAgICAweDkxLCAweDA0LCAweDYzLCAweDUzLCAweDAxLCAweDdlLCAweDAwLCAweDU0LCAweDJlLCAweDAxLCAweDUzLCAweGE1LCAweGU2LCAweGY1LCAweDUxLCAweDgwLCAKKyAgICAweDEyLCAweDIwLCAweDAyLCAweDFkLCAweDc1LCAweDUzLCAweDAwLCAweDg1LCAweDU0LCAweDUxLCAweGQyLCAweDAyLCAweDc0LCAweDAzLCAweDgwLCAweDBkLCAKKyAgICAweDMwLCAweDAyLCAweDBlLCAweGMyLCAweDAyLCAweDdlLCAweDAwLCAweDU2LCAweDJlLCAweDAxLCAweDUzLCAweGE1LCAweGU2LCAweDdhLCAweGIzLCAweDkwLCAKKyAgICAweDAwLCAweGRhLCAweDA5LCAweDMyLCAweDQ1LCAweDZmLCAweDQ1LCAweDhiLCAweDQ1LCAweGE3LCAweDQ1LCAweGMzLCAweDQ1LCAweGRmLCAweDQ1LCAweGZiLCAKKyAgICAweDQ2LCAweDE3LCAweDQ2LCAweDMzLCAweGMwLCAweGQwLCAweGMwLCAweGQxLCAweGMwLCAweGUwLCAweGMwLCAweGYwLCAweGNhLCAweDBiLCAweGNhLCAweDFiLCAKKyAgICAweGNhLCAweDJiLCAweGQyLCAweDAxLCAweDc1LCAweDJmLCAweDg5LCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweGIzLCAweDkwLCAweDAwLCAweDYwLCAweDI4LCAKKyAgICAweDdlLCAweDE0LCAweDgwLCAweDAwLCAweDdlLCAweDAwLCAweDAwLCAweDEzLCAweDUwLCAweDEzLCAweGNhLCAweDBiLCAweGNhLCAweDU5LCAweDdjLCAweGIwLCAKKyAgICAweDIzLCAweDBhLCAweDJiLCAweDQ5LCAweDIyLCAweDQ1LCAweDA0LCAweDk5LCAweDI0LCAweGRhLCAweDU5LCAweGRhLCAweDBiLCAweGE1LCAweDBhLCAweGE1LCAKKyAgICAweDA4LCAweGJlLCAweDAxLCAweDJlLCAweDc4LCAweGUxLCAweDgwLCAweGQyLCAweDMwLCAweDA0LCAweDA1LCAweGMyLCAweDA0LCAweDEyLCAweDY0LCAweDg2LCAKKyAgICAweGRhLCAweDJiLCAweGRhLCAweDFiLCAweGRhLCAweDBiLCAweGQwLCAweGYwLCAweGQwLCAweGUwLCAweGQwLCAweGQxLCAweGQwLCAweGQwLCAweDMyLCAweDA5LCAKKyAgICAweGIxLCAweDAwLCAweDA4LCAweDIwLCAweGUwLCAweDE0LCAweDc1LCAweDJmLCAweDgwLCAweDEyLCAweDczLCAweDM1LCAweDU0LCAweDNlLCAweDBhLCAweDViLCAKKyAgICAweDdlLCAweDQ0LCAweDAwLCAweGZmLCAweDY5LCAweDUyLCAweDYxLCAweGFiLCAweDg5LCAweDU0LCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDA4LCAweDIwLCAKKyAgICAweGUwLCAweDE0LCAweDc1LCAweDJmLCAweDgxLCAweDEyLCAweDczLCAweDM1LCAweDU0LCAweDNlLCAweDBhLCAweDViLCAweDdlLCAweDQ0LCAweDAwLCAweGZmLCAKKyAgICAweDY5LCAweDUyLCAweDYxLCAweGViLCAweDg5LCAweDU0LCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDA4LCAweDIwLCAweGUwLCAweDE0LCAweDc1LCAweDJmLCAKKyAgICAweDgyLCAweDEyLCAweDczLCAweDM1LCAweDU0LCAweDNlLCAweDBhLCAweDViLCAweDdlLCAweDQ0LCAweDAwLCAweGZmLCAweDY5LCAweDUyLCAweDYyLCAweDJiLCAKKyAgICAweDg5LCAweDU0LCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDA4LCAweDIwLCAweGUwLCAweDE0LCAweDc1LCAweDJmLCAweDgzLCAweDEyLCAweDczLCAweDM1LCAKKyAgICAweDU0LCAweDNlLCAweDBhLCAweDViLCAweDdlLCAweDQ0LCAweDAwLCAweGZmLCAweDY5LCAweDUyLCAweDYyLCAweDZiLCAweDg5LCAweDU0LCAweDIyLCAweDA5LCAKKyAgICAweGIxLCAweDAwLCAweDA4LCAweDIwLCAweGUwLCAweDE0LCAweDc1LCAweDJmLCAweDg0LCAweDEyLCAweDczLCAweDM1LCAweDU0LCAweDNlLCAweDBhLCAweDViLCAKKyAgICAweDdlLCAweDQ0LCAweDAwLCAweGZmLCAweDY5LCAweDUyLCAweDYyLCAweGFiLCAweDg5LCAweDU0LCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDA4LCAweDIwLCAKKyAgICAweGUwLCAweDE0LCAweDc1LCAweDJmLCAweDg1LCAweDEyLCAweDczLCAweDM1LCAweDU0LCAweDNlLCAweDBhLCAweDViLCAweDdlLCAweDQ0LCAweDAwLCAweGZmLCAKKyAgICAweDY5LCAweDUyLCAweDYyLCAweGViLCAweDg5LCAweDU0LCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDA4LCAweDIwLCAweGUwLCAweDE0LCAweDc1LCAweDJmLCAKKyAgICAweDg2LCAweDEyLCAweDczLCAweDM1LCAweDU0LCAweDNlLCAweDBhLCAweDViLCAweDdlLCAweDQ0LCAweDAwLCAweGZmLCAweDY5LCAweDUyLCAweDYzLCAweDJiLCAKKyAgICAweDg5LCAweDU0LCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDA4LCAweDIwLCAweGUwLCAweDE0LCAweDc1LCAweDJmLCAweDg3LCAweDEyLCAweDczLCAweDM1LCAKKyAgICAweDU0LCAweDNlLCAweDBhLCAweDViLCAweDdlLCAweDQ0LCAweDAwLCAweGZmLCAweDY5LCAweDUyLCAweDYzLCAweDZiLCAweDg5LCAweDU0LCAweDIyLCAweDEwLCAKKyAgICAweDA4LCAweDAxLCAweDIyLCAweDIwLCAweDI4LCAweDAzLCAweGQyLCAweDA4LCAweDIyLCAweDc1LCAweDJmLCAweGEwLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAKKyAgICAweDE0LCAweDgwLCAweDAwLCAweDgwLCAweDA2LCAweDIwLCAweDI4LCAweDAzLCAweGQyLCAweDA4LCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAKKyAgICAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDAzLCAweDEyLCAweDQ5LCAweDQ1LCAweDMwLCAweDMwLCAweDA2LCAweDIwLCAweGU2LCAKKyAgICAweDRmLCAweGQyLCAweDA4LCAweDIyLCAweDMwLCAweGU2LCAweDAyLCAweGQyLCAweDYwLCAweDdlLCAweDM3LCAweDAxLCAweDc5LCAweDdlLCAweDI3LCAweDAxLCAKKyAgICAweDk5LCAweDlkLCAweDMyLCAweDQwLCAweDMxLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDMyLCAweDdhLCAweDA1LCAweDMyLCAweDdhLCAweDM3LCAweDAxLCAKKyAgICAweDc5LCAweDdlLCAweDM3LCAweDAxLCAweDU5LCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDA4LCAweDJjLCAweDM4LCAweDY4LCAweDdhLCAKKyAgICAweDQ3LCAweDAxLCAweDU5LCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDEyLCAKKyAgICAweDY5LCAweGYwLCAweDEwLCAweDYwLCAweGM0LCAweDIyLCAweGMyLCAweDYwLCAweDJkLCAweDIzLCAweDY4LCAweDc4LCAweDZkLCAweDMzLCAweDgwLCAweDFhLCAKKyAgICAweDdlLCAweDI3LCAweDAxLCAweDc5LCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDY4LCAweDZhLCAweGJlLCAweDI3LCAweDAxLCAweDk5LCAweDI4LCAweDA0LCAKKyAgICAweDdlLCAweDI3LCAweDAxLCAweDk5LCAweDdlLCAweDM3LCAweDAxLCAweDc5LCAweDlkLCAweDMyLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDMyLCAweDdhLCAKKyAgICAweDA1LCAweDMyLCAweDdhLCAweDM3LCAweDAxLCAweDc5LCAweDdlLCAweDM3LCAweDAxLCAweDU5LCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAKKyAgICAweDA4LCAweDJjLCAweDM4LCAweDEzLCAweDdhLCAweDQ3LCAweDAxLCAweDU5LCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDUxLCAKKyAgICAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDAyLCAweDY5LCAweGYwLCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAKKyAgICAweDEyLCAweDczLCAweDM1LCAweDllLCAweDQ0LCAweDA4LCAweDJkLCAweDlkLCAweDI0LCAweDEyLCAweDY5LCAweGYwLCAweDdlLCAweDM0LCAweDA0LCAweDJkLCAKKyAgICAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweDU5LCAweDEyLCAweDY5LCAweGYwLCAweGJlLCAweDI1LCAweDIwLCAweDc4LCAweDAzLCAKKyAgICAweDAyLCAweDQ2LCAweGMyLCAweDIyLCAweGQyLCAweDA4LCAweDdlLCAweDA0LCAweDA0LCAweDJkLCAweDdhLCAweDA3LCAweDAxLCAweDU5LCAweDdhLCAweDA3LCAKKyAgICAweDAxLCAweDY5LCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDc1LCAweDJmLCAweDAwLCAweDEyLCAweDczLCAweDM1LCAweDIyLCAweDc1LCAKKyAgICAweDJmLCAweDkyLCAweDEyLCAweDczLCAweDM1LCAweGQyLCAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDgyLCAweGRhLCAKKyAgICAweGI4LCAweDc4LCAweDY4LCAweDdlLCAweDM3LCAweDAxLCAweGNiLCAweDdlLCAweDI3LCAweDAxLCAweGE5LCAweDJlLCAweDI0LCAweDAwLCAweDAyLCAweDJkLCAKKyAgICAweDMyLCAweGJlLCAweDM0LCAweDA0LCAweDAwLCAweDM4LCAweDM0LCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDMwLCAweDdhLCAweDA1LCAweDMwLCAweDdhLCAKKyAgICAweDM3LCAweDAxLCAweGNiLCAweDdlLCAweDM3LCAweDAxLCAweGM5LCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDI4LCAweDJjLCAweDM4LCAKKyAgICAweDNjLCAweDdhLCAweDQ3LCAweDAxLCAweGM5LCAweDdlLCAweDI0LCAweDAwLCAweDAwLCAweDJlLCAweDI3LCAweDAxLCAweGE5LCAweDFiLCAweDM4LCAweDIwLCAKKyAgICAweDBiLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDAyLCAweDZhLCAweDYzLCAweDc1LCAweDJmLCAweDk5LCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDM4LCAweDBhLCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDEwLCAweDIyLCAweDgwLCAweDdmLCAweDdhLCAweDUxLCAweDJmLCAKKyAgICAweDEyLCAweDczLCAweDM1LCAweDllLCAweDQ0LCAweDI4LCAweDJkLCAweDlkLCAweDI0LCAweDdlLCAweDY0LCAweDAwLCAweDAwLCAweDJlLCAweDY3LCAweDAxLCAKKyAgICAweGE5LCAweDllLCAweDI0LCAweDAwLCAweDAyLCAweDQwLCAweDE3LCAweDFiLCAweDM4LCAweDYwLCAweDBiLCAweDM1LCAweDEyLCAweDZhLCAweDYzLCAweDdlLCAKKyAgICAweDM0LCAweDI0LCAweDJkLCAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGM5LCAweDAyLCAweDZhLCAweDYzLCAweDdhLCAweDM5LCAKKyAgICAweGMwLCAweDdlLCAweDM0LCAweDI0LCAweDJkLCAweDdhLCAweDM5LCAweGQwLCAweDBiLCAweDM0LCAweDFiLCAweDQ0LCAweDgwLCAweGU1LCAweDlkLCAweDMyLCAKKyAgICAweDdjLCAweGI2LCAweDU0LCAweDBmLCAweDIzLCAweDIzLCAweDIzLCAweDQ0LCAweDAwLCAweDdhLCAweDY5LCAweGIwLCAweDdhLCAweDc5LCAweDcwLCAweDBiLCAKKyAgICAweDM1LCAweDc1LCAweDJmLCAweDkzLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDcxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweGJkLCAweDA0LCAweDY4LCAKKyAgICAweDJiLCAweDdhLCAweDA3LCAweDAxLCAweGM5LCAweDdlLCAweDQ3LCAweDAxLCAweGNiLCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGNiLCAweDJlLCAKKyAgICAweDM1LCAweDMwLCAweDdhLCAweDM1LCAweDMwLCAweDIyLCAweGQyLCAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweDEzLCAweDIyLCAKKyAgICAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDgwLCAweDI4LCAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDgwLCAweDJhLCAweDdlLCAweDA0LCAweDI0LCAweDJkLCAKKyAgICAweDgwLCAweGNmLCAweDdlLCAweDA3LCAweDAxLCAweGNiLCAweDdlLCAweDI0LCAweDAzLCAweGZlLCAweDlkLCAweDIwLCAweDI4LCAweDQwLCAweDdlLCAweDA3LCAKKyAgICAweDAxLCAweGM5LCAweDdlLCAweDQ0LCAweDI4LCAweDJkLCAweDdkLCAweDYwLCAweDBiLCAweDA0LCAweGJkLCAweDA0LCAweDY4LCAweGQyLCAweDdkLCAweDcwLCAKKyAgICAweDBiLCAweDA0LCAweGJkLCAweDA0LCAweDY4LCAweGQwLCAweDdkLCAweDU0LCAweDlkLCAweDUwLCAweGJkLCAweDI1LCAweDQwLCAweDAyLCAweDdkLCAweDI1LCAKKyAgICAweDdkLCAweDMyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDFmLCAweGI0LCAweDAxLCAweDMxLCAweGRhLCAweGI4LCAweDdlLCAKKyAgICAweDE5LCAweGIwLCAweDdhLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDFiLCAweDI0LCAweDc4LCAweGU3LCAweDAyLCAweDQ4LCAweDFlLCAweDc1LCAweDJmLCAKKyAgICAweDk5LCAweDEyLCAweDczLCAweDM1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDM4LCAKKyAgICAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDEwLCAweDIyLCAweGRhLCAweGI4LCAKKyAgICAweDMwLCAweGUwLCAweGQ4LCAweGJkLCAweDMyLCAweDY4LCAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDQ4LCAweDFlLCAweGRhLCAweGI4LCAweDAyLCAweDQ5LCAKKyAgICAweDQ1LCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDg4LCAweDc1LCAweDJmLCAweDkwLCAweDEyLCAweDczLCAweDM1LCAweGY1LCAweDJmLCAKKyAgICAweDEyLCAweDczLCAweDM1LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDBhLCAweDY4LCAweDFkLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAKKyAgICAweDA0LCAweGQyLCAweDU4LCAweDgwLCAweDAyLCAweGMyLCAweDU4LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDUwLCAKKyAgICAweDgwLCAweDAyLCAweGMyLCAweDUwLCAweDEyLCAweDQyLCAweGJkLCAweDAyLCAweDYxLCAweDEzLCAweDc1LCAweDJmLCAweDkxLCAweDEyLCAweDczLCAweDM1LCAKKyAgICAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDdhLCAweGIxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDIwLCAweGUwLCAweDA4LCAweGQyLCAweDA0LCAweDdlLCAKKyAgICAweGEwLCAweDgwLCAweDAyLCAweDYxLCAweDEzLCAweGQyLCAweDA0LCAweDMwLCAweGUxLCAweDA2LCAweDdlLCAweGEwLCAweDgwLCAweDEyLCAweDYxLCAweDEzLCAKKyAgICAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFjLCAweGRhLCAweGI4LCAweDY4LCAweDEyLCAweDdlLCAweGEwLCAweGMwLCAweDA5LCAweDYxLCAweDAwLCAweDAwLCAKKyAgICAweDEyLCAweDYxLCAweDM2LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweGRiLCAweDIyLCAweDAyLCAweDQ4LCAweDcyLCAweDc1LCAweDJmLCAKKyAgICAweDk1LCAweDEyLCAweDczLCAweDM1LCAweDIyLCAweDc1LCAweDJmLCAweDk2LCAweDEyLCAweDczLCAweDM1LCAweDIyLCAweDEwLCAweDA5LCAweDAxLCAweDIyLCAKKyAgICAweDIwLCAweDI5LCAweDAzLCAweGQyLCAweDA5LCAweDIyLCAweDc1LCAweDJmLCAweGExLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweDE0LCAweDgxLCAweDAwLCAKKyAgICAweDgwLCAweDA2LCAweDIwLCAweDI5LCAweDAzLCAweGQyLCAweDA5LCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAKKyAgICAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDAzLCAweDEyLCAweDRjLCAweDcyLCAweDMwLCAweDMxLCAweDA2LCAweDIwLCAweGU2LCAweDRmLCAweGQyLCAweDA5LCAKKyAgICAweDIyLCAweDMwLCAweGU2LCAweDAyLCAweGQyLCAweDYxLCAweDdlLCAweDM3LCAweDAxLCAweDdiLCAweDdlLCAweDI3LCAweDAxLCAweDliLCAweDlkLCAweDMyLCAKKyAgICAweDQwLCAweDMxLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDM0LCAweDdhLCAweDA1LCAweDM0LCAweDdhLCAweDM3LCAweDAxLCAweDdiLCAweDdlLCAweDM3LCAKKyAgICAweDAxLCAweDViLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDBjLCAweDJjLCAweDM4LCAweDY4LCAweDdhLCAweDQ3LCAweDAxLCAweDViLCAKKyAgICAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDEyLCAweDY5LCAweGYwLCAweDEwLCAKKyAgICAweDYxLCAweGM0LCAweDIyLCAweGMyLCAweDYxLCAweDJkLCAweDIzLCAweDY4LCAweDc4LCAweDZkLCAweDMzLCAweDgwLCAweDFhLCAweDdlLCAweDI3LCAweDAxLCAKKyAgICAweDdiLCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDY4LCAweDZhLCAweGJlLCAweDI3LCAweDAxLCAweDliLCAweDI4LCAweDA0LCAweDdlLCAweDI3LCAweDAxLCAKKyAgICAweDliLCAweDdlLCAweDM3LCAweDAxLCAweDdiLCAweDlkLCAweDMyLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDM0LCAweDdhLCAweDA1LCAweDM0LCAweDdhLCAKKyAgICAweDM3LCAweDAxLCAweDdiLCAweDdlLCAweDM3LCAweDAxLCAweDViLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDBjLCAweDJjLCAweDM4LCAKKyAgICAweDEzLCAweDdhLCAweDQ3LCAweDAxLCAweDViLCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweDAyLCAweDY5LCAweGYwLCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAKKyAgICAweDllLCAweDQ0LCAweDBjLCAweDJkLCAweDlkLCAweDI0LCAweDEyLCAweDY5LCAweGYwLCAweDdlLCAweDM0LCAweDA4LCAweDJkLCAweDdkLCAweDI0LCAweDJkLCAKKyAgICAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweDViLCAweDEyLCAweDY5LCAweGYwLCAweGJlLCAweDI1LCAweDIwLCAweDc4LCAweDAzLCAweDAyLCAweDQ5LCAweGVmLCAKKyAgICAweDIyLCAweGQyLCAweDA5LCAweDdlLCAweDA0LCAweDA4LCAweDJkLCAweDdhLCAweDA3LCAweDAxLCAweDViLCAweDdhLCAweDA3LCAweDAxLCAweDZiLCAweDc1LCAKKyAgICAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDc1LCAweDJmLCAweDAwLCAweDEyLCAweDczLCAweDM1LCAweDIyLCAweDc1LCAweDJmLCAweDkyLCAweDEyLCAKKyAgICAweDczLCAweDM1LCAweGQyLCAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDgyLCAweGRhLCAweGI4LCAweDc4LCAweDY4LCAKKyAgICAweDdlLCAweDM3LCAweDAxLCAweGNiLCAweDdlLCAweDI3LCAweDAxLCAweGFiLCAweDJlLCAweDI0LCAweDAwLCAweDAyLCAweDJkLCAweDMyLCAweGJlLCAweDM0LCAKKyAgICAweDA0LCAweDAwLCAweDM4LCAweDM0LCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDMwLCAweDdhLCAweDA1LCAweDMwLCAweDdhLCAweDM3LCAweDAxLCAweGNiLCAKKyAgICAweDdlLCAweDM3LCAweDAxLCAweGM5LCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDI4LCAweDJjLCAweDM4LCAweDNjLCAweDdhLCAweDQ3LCAKKyAgICAweDAxLCAweGM5LCAweDdlLCAweDI0LCAweDAxLCAweDAwLCAweDJlLCAweDI3LCAweDAxLCAweGFiLCAweDFiLCAweDM4LCAweDIwLCAweDBiLCAweDM1LCAweDdhLCAKKyAgICAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDAyLCAweDZhLCAweDYzLCAweDc1LCAweDJmLCAweDk5LCAweDEyLCAweDczLCAweDM1LCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDM5LCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAKKyAgICAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDExLCAweDIyLCAweDgwLCAweDdmLCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAKKyAgICAweDllLCAweDQ0LCAweDI4LCAweDJkLCAweDlkLCAweDI0LCAweDdlLCAweDY0LCAweDAxLCAweDAwLCAweDJlLCAweDY3LCAweDAxLCAweGFiLCAweDllLCAweDI0LCAKKyAgICAweDAwLCAweDAyLCAweDQwLCAweDE3LCAweDFiLCAweDM4LCAweDYwLCAweDBiLCAweDM1LCAweDEyLCAweDZhLCAweDYzLCAweDdlLCAweDM0LCAweDI0LCAweDJkLCAKKyAgICAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGM5LCAweDAyLCAweDZhLCAweDYzLCAweDdhLCAweDM5LCAweGMwLCAweDdlLCAweDM0LCAKKyAgICAweDI0LCAweDJkLCAweDdhLCAweDM5LCAweGQwLCAweDBiLCAweDM0LCAweDFiLCAweDQ0LCAweDgwLCAweGU1LCAweDlkLCAweDMyLCAweDdjLCAweGI2LCAweDU0LCAKKyAgICAweDBmLCAweDIzLCAweDIzLCAweDIzLCAweDQ0LCAweDAxLCAweDdhLCAweDY5LCAweGIwLCAweDdhLCAweDc5LCAweDcwLCAweDBiLCAweDM1LCAweDc1LCAweDJmLCAKKyAgICAweDkzLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDcxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweGJkLCAweDA0LCAweDY4LCAweDJiLCAweDdhLCAweDA3LCAKKyAgICAweDAxLCAweGM5LCAweDdlLCAweDQ3LCAweDAxLCAweGNiLCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGNiLCAweDJlLCAweDM1LCAweDMwLCAweDdhLCAKKyAgICAweDM1LCAweDMwLCAweDIyLCAweGQyLCAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweDEzLCAweDIyLCAweDdlLCAweDA0LCAweDI0LCAKKyAgICAweDJkLCAweDgwLCAweDI4LCAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDgwLCAweDJhLCAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDgwLCAweGNmLCAweDdlLCAKKyAgICAweDA3LCAweDAxLCAweGNiLCAweDdlLCAweDI0LCAweDAzLCAweGZlLCAweDlkLCAweDIwLCAweDI4LCAweDQwLCAweDdlLCAweDA3LCAweDAxLCAweGM5LCAweDdlLCAKKyAgICAweDQ0LCAweDI4LCAweDJkLCAweDdkLCAweDYwLCAweDBiLCAweDA0LCAweGJkLCAweDA0LCAweDY4LCAweGQyLCAweDdkLCAweDcwLCAweDBiLCAweDA0LCAweGJkLCAKKyAgICAweDA0LCAweDY4LCAweGQwLCAweDdkLCAweDU0LCAweDlkLCAweDUwLCAweGJkLCAweDI1LCAweDQwLCAweDAyLCAweDdkLCAweDI1LCAweDdkLCAweDMyLCAweDA5LCAKKyAgICAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDFmLCAweGI0LCAweDAxLCAweDMxLCAweGRhLCAweGI4LCAweDdlLCAweDE5LCAweGIwLCAweDdhLCAKKyAgICAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDFiLCAweDI0LCAweDc4LCAweGU3LCAweDAyLCAweDRiLCAweDRiLCAweDc1LCAweDJmLCAweDk5LCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDM5LCAweDBhLCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDExLCAweDIyLCAweGRhLCAweGI4LCAweDMwLCAweGUwLCAweGQ4LCAKKyAgICAweGJkLCAweDMyLCAweDY4LCAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDRiLCAweDRiLCAweGRhLCAweGI4LCAweDAyLCAweDRjLCAweDcyLCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDg4LCAweDc1LCAweDJmLCAweDkwLCAweDEyLCAweDczLCAweDM1LCAweGY1LCAweDJmLCAweDEyLCAweDczLCAweDM1LCAKKyAgICAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDBhLCAweDY4LCAweDFkLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDU5LCAKKyAgICAweDgwLCAweDAyLCAweGMyLCAweDU5LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDUxLCAweDgwLCAweDAyLCAweGMyLCAKKyAgICAweDUxLCAweDEyLCAweDQyLCAweGQ0LCAweDAyLCAweDYxLCAweDEzLCAweDc1LCAweDJmLCAweDkxLCAweDEyLCAweDczLCAweDM1LCAweDA5LCAweGIxLCAweDAwLCAKKyAgICAweDE0LCAweDdhLCAweGIxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDIwLCAweGUwLCAweDA4LCAweGQyLCAweDA0LCAweDdlLCAweGEwLCAweDgwLCAweDAyLCAKKyAgICAweDYxLCAweDEzLCAweGQyLCAweDA0LCAweDMwLCAweGUxLCAweDA2LCAweDdlLCAweGEwLCAweDgwLCAweDEyLCAweDYxLCAweDEzLCAweGNhLCAweGI4LCAweDVlLCAKKyAgICAweGIwLCAweDFjLCAweGRhLCAweGI4LCAweDY4LCAweDEyLCAweDdlLCAweGEwLCAweGMwLCAweDA5LCAweDYxLCAweDAwLCAweDAwLCAweDEyLCAweDYxLCAweDM2LCAKKyAgICAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweGRiLCAweDIyLCAweDAyLCAweDRiLCAweDlmLCAweDc1LCAweDJmLCAweDk1LCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweDIyLCAweDc1LCAweDJmLCAweDk2LCAweDEyLCAweDczLCAweDM1LCAweDIyLCAweDEwLCAweDBhLCAweDAxLCAweDIyLCAweDIwLCAweDJhLCAweDAzLCAKKyAgICAweGQyLCAweDBhLCAweDIyLCAweDc1LCAweDJmLCAweGEyLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweDE0LCAweDgyLCAweDAwLCAweDgwLCAweDA2LCAweDIwLCAKKyAgICAweDJhLCAweDAzLCAweGQyLCAweDBhLCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAKKyAgICAweDY4LCAweDAzLCAweDEyLCAweDRmLCAweDlmLCAweDMwLCAweDMyLCAweDA2LCAweDIwLCAweGU2LCAweDRmLCAweGQyLCAweDBhLCAweDIyLCAweDMwLCAweGU2LCAKKyAgICAweDAyLCAweGQyLCAweDYyLCAweDdlLCAweDM3LCAweDAxLCAweDdkLCAweDdlLCAweDI3LCAweDAxLCAweDlkLCAweDlkLCAweDMyLCAweDQwLCAweDMxLCAweDdkLCAKKyAgICAweDAyLCAweDJlLCAweDA1LCAweDM2LCAweDdhLCAweDA1LCAweDM2LCAweDdhLCAweDM3LCAweDAxLCAweDdkLCAweDdlLCAweDM3LCAweDAxLCAweDVkLCAweDdkLCAKKyAgICAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDEwLCAweDJjLCAweDM4LCAweDY4LCAweDdhLCAweDQ3LCAweDAxLCAweDVkLCAweDc1LCAweDJmLCAweDk0LCAKKyAgICAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDEyLCAweDY5LCAweGYwLCAweDEwLCAweDYyLCAweGM0LCAweDIyLCAKKyAgICAweGMyLCAweDYyLCAweDJkLCAweDIzLCAweDY4LCAweDc4LCAweDZkLCAweDMzLCAweDgwLCAweDFhLCAweDdlLCAweDI3LCAweDAxLCAweDdkLCAweGJlLCAweDI0LCAKKyAgICAweDAwLCAweDAwLCAweDY4LCAweDZhLCAweGJlLCAweDI3LCAweDAxLCAweDlkLCAweDI4LCAweDA0LCAweDdlLCAweDI3LCAweDAxLCAweDlkLCAweDdlLCAweDM3LCAKKyAgICAweDAxLCAweDdkLCAweDlkLCAweDMyLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDM2LCAweDdhLCAweDA1LCAweDM2LCAweDdhLCAweDM3LCAweDAxLCAweDdkLCAKKyAgICAweDdlLCAweDM3LCAweDAxLCAweDVkLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDEwLCAweDJjLCAweDM4LCAweDEzLCAweDdhLCAweDQ3LCAKKyAgICAweDAxLCAweDVkLCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDAyLCAweDY5LCAKKyAgICAweGYwLCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDllLCAweDQ0LCAweDEwLCAKKyAgICAweDJkLCAweDlkLCAweDI0LCAweDEyLCAweDY5LCAweGYwLCAweDdlLCAweDM0LCAweDBjLCAweDJkLCAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAKKyAgICAweDAxLCAweDVkLCAweDEyLCAweDY5LCAweGYwLCAweGJlLCAweDI1LCAweDIwLCAweDc4LCAweDAzLCAweDAyLCAweDRkLCAweDFjLCAweDIyLCAweGQyLCAweDBhLCAKKyAgICAweDdlLCAweDA0LCAweDBjLCAweDJkLCAweDdhLCAweDA3LCAweDAxLCAweDVkLCAweDdhLCAweDA3LCAweDAxLCAweDZkLCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAKKyAgICAweDczLCAweDM1LCAweDc1LCAweDJmLCAweDAwLCAweDEyLCAweDczLCAweDM1LCAweDIyLCAweDc1LCAweDJmLCAweDkyLCAweDEyLCAweDczLCAweDM1LCAweGQyLCAKKyAgICAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDgyLCAweGRhLCAweGI4LCAweDc4LCAweDY4LCAweDdlLCAweDM3LCAweDAxLCAKKyAgICAweGNiLCAweDdlLCAweDI3LCAweDAxLCAweGFkLCAweDJlLCAweDI0LCAweDAwLCAweDAyLCAweDJkLCAweDMyLCAweGJlLCAweDM0LCAweDA0LCAweDAwLCAweDM4LCAKKyAgICAweDM0LCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDMwLCAweDdhLCAweDA1LCAweDMwLCAweDdhLCAweDM3LCAweDAxLCAweGNiLCAweDdlLCAweDM3LCAweDAxLCAKKyAgICAweGM5LCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDI4LCAweDJjLCAweDM4LCAweDNjLCAweDdhLCAweDQ3LCAweDAxLCAweGM5LCAweDdlLCAKKyAgICAweDI0LCAweDAyLCAweDAwLCAweDJlLCAweDI3LCAweDAxLCAweGFkLCAweDFiLCAweDM4LCAweDIwLCAweDBiLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAKKyAgICAweDczLCAweDM1LCAweDAyLCAweDZhLCAweDYzLCAweDc1LCAweDJmLCAweDk5LCAweDEyLCAweDczLCAweDM1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAKKyAgICAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDNhLCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAKKyAgICAweDAwLCAweDEwLCAweGQyLCAweDEyLCAweDIyLCAweDgwLCAweDdmLCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDllLCAweDQ0LCAweDI4LCAKKyAgICAweDJkLCAweDlkLCAweDI0LCAweDdlLCAweDY0LCAweDAyLCAweDAwLCAweDJlLCAweDY3LCAweDAxLCAweGFkLCAweDllLCAweDI0LCAweDAwLCAweDAyLCAweDQwLCAKKyAgICAweDE3LCAweDFiLCAweDM4LCAweDYwLCAweDBiLCAweDM1LCAweDEyLCAweDZhLCAweDYzLCAweDdlLCAweDM0LCAweDI0LCAweDJkLCAweDdkLCAweDI0LCAweDJkLCAKKyAgICAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGM5LCAweDAyLCAweDZhLCAweDYzLCAweDdhLCAweDM5LCAweGMwLCAweDdlLCAweDM0LCAweDI0LCAweDJkLCAweDdhLCAKKyAgICAweDM5LCAweGQwLCAweDBiLCAweDM0LCAweDFiLCAweDQ0LCAweDgwLCAweGU1LCAweDlkLCAweDMyLCAweDdjLCAweGI2LCAweDU0LCAweDBmLCAweDIzLCAweDIzLCAKKyAgICAweDIzLCAweDQ0LCAweDAyLCAweDdhLCAweDY5LCAweGIwLCAweDdhLCAweDc5LCAweDcwLCAweDBiLCAweDM1LCAweDc1LCAweDJmLCAweDkzLCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweDdhLCAweDcxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweGJkLCAweDA0LCAweDY4LCAweDJiLCAweDdhLCAweDA3LCAweDAxLCAweGM5LCAweDdlLCAKKyAgICAweDQ3LCAweDAxLCAweGNiLCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGNiLCAweDJlLCAweDM1LCAweDMwLCAweDdhLCAweDM1LCAweDMwLCAweDIyLCAKKyAgICAweGQyLCAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweDEzLCAweDIyLCAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDgwLCAweDI4LCAKKyAgICAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDgwLCAweDJhLCAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDgwLCAweGNmLCAweDdlLCAweDA3LCAweDAxLCAweGNiLCAKKyAgICAweDdlLCAweDI0LCAweDAzLCAweGZlLCAweDlkLCAweDIwLCAweDI4LCAweDQwLCAweDdlLCAweDA3LCAweDAxLCAweGM5LCAweDdlLCAweDQ0LCAweDI4LCAweDJkLCAKKyAgICAweDdkLCAweDYwLCAweDBiLCAweDA0LCAweGJkLCAweDA0LCAweDY4LCAweGQyLCAweDdkLCAweDcwLCAweDBiLCAweDA0LCAweGJkLCAweDA0LCAweDY4LCAweGQwLCAKKyAgICAweDdkLCAweDU0LCAweDlkLCAweDUwLCAweGJkLCAweDI1LCAweDQwLCAweDAyLCAweDdkLCAweDI1LCAweDdkLCAweDMyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAKKyAgICAweGNhLCAweGI4LCAweDU0LCAweDFmLCAweGI0LCAweDAxLCAweDMxLCAweGRhLCAweGI4LCAweDdlLCAweDE5LCAweGIwLCAweDdhLCAweDA5LCAweGIwLCAweDBiLCAKKyAgICAweDA0LCAweDFiLCAweDI0LCAweDc4LCAweGU3LCAweDAyLCAweDRlLCAweDc4LCAweDc1LCAweDJmLCAweDk5LCAweDEyLCAweDczLCAweDM1LCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDNhLCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAKKyAgICAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDEyLCAweDIyLCAweGRhLCAweGI4LCAweDMwLCAweGUwLCAweGQ4LCAweGJkLCAweDMyLCAweDY4LCAKKyAgICAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDRlLCAweDc4LCAweGRhLCAweGI4LCAweDAyLCAweDRmLCAweDlmLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweDdlLCAKKyAgICAweGEwLCAweDg4LCAweDc1LCAweDJmLCAweDkwLCAweDEyLCAweDczLCAweDM1LCAweGY1LCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweGE1LCAweGZkLCAweDVlLCAKKyAgICAweDUwLCAweDBhLCAweDY4LCAweDFkLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDVhLCAweDgwLCAweDAyLCAweGMyLCAKKyAgICAweDVhLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDUyLCAweDgwLCAweDAyLCAweGMyLCAweDUyLCAweDEyLCAweDQyLCAKKyAgICAweGViLCAweDAyLCAweDYxLCAweDEzLCAweDc1LCAweDJmLCAweDkxLCAweDEyLCAweDczLCAweDM1LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDdhLCAweGIxLCAKKyAgICAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDIwLCAweGUwLCAweDA4LCAweGQyLCAweDA0LCAweDdlLCAweGEwLCAweDgwLCAweDAyLCAweDYxLCAweDEzLCAweGQyLCAKKyAgICAweDA0LCAweDMwLCAweGUxLCAweDA2LCAweDdlLCAweGEwLCAweDgwLCAweDEyLCAweDYxLCAweDEzLCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFjLCAweGRhLCAKKyAgICAweGI4LCAweDY4LCAweDEyLCAweDdlLCAweGEwLCAweGMwLCAweDA5LCAweDYxLCAweDAwLCAweDAwLCAweDEyLCAweDYxLCAweDM2LCAweDA5LCAweGIxLCAweDAwLCAKKyAgICAweDE0LCAweDIwLCAweGUwLCAweGRiLCAweDIyLCAweDAyLCAweDRlLCAweGNjLCAweDc1LCAweDJmLCAweDk1LCAweDEyLCAweDczLCAweDM1LCAweDIyLCAweDc1LCAKKyAgICAweDJmLCAweDk2LCAweDEyLCAweDczLCAweDM1LCAweDIyLCAweDEwLCAweDBiLCAweDAxLCAweDIyLCAweDIwLCAweDJiLCAweDAzLCAweGQyLCAweDBiLCAweDIyLCAKKyAgICAweDc1LCAweDJmLCAweGEzLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweDE0LCAweDgzLCAweDAwLCAweDgwLCAweDA2LCAweDIwLCAweDJiLCAweDAzLCAweGQyLCAKKyAgICAweDBiLCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDAzLCAweDEyLCAKKyAgICAweDUyLCAweGNjLCAweDMwLCAweDMzLCAweDA2LCAweDIwLCAweGU2LCAweDRmLCAweGQyLCAweDBiLCAweDIyLCAweDMwLCAweGU2LCAweDAyLCAweGQyLCAweDYzLCAKKyAgICAweDdlLCAweDM3LCAweDAxLCAweDdmLCAweDdlLCAweDI3LCAweDAxLCAweDlmLCAweDlkLCAweDMyLCAweDQwLCAweDMxLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAKKyAgICAweDM4LCAweDdhLCAweDA1LCAweDM4LCAweDdhLCAweDM3LCAweDAxLCAweDdmLCAweDdlLCAweDM3LCAweDAxLCAweDVmLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAKKyAgICAweGJlLCAweDQ0LCAweDE0LCAweDJjLCAweDM4LCAweDY4LCAweDdhLCAweDQ3LCAweDAxLCAweDVmLCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAKKyAgICAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDEyLCAweDY5LCAweGYwLCAweDEwLCAweDYzLCAweGM0LCAweDIyLCAweGMyLCAweDYzLCAweDJkLCAKKyAgICAweDIzLCAweDY4LCAweDc4LCAweDZkLCAweDMzLCAweDgwLCAweDFhLCAweDdlLCAweDI3LCAweDAxLCAweDdmLCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDY4LCAKKyAgICAweDZhLCAweGJlLCAweDI3LCAweDAxLCAweDlmLCAweDI4LCAweDA0LCAweDdlLCAweDI3LCAweDAxLCAweDlmLCAweDdlLCAweDM3LCAweDAxLCAweDdmLCAweDlkLCAKKyAgICAweDMyLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDM4LCAweDdhLCAweDA1LCAweDM4LCAweDdhLCAweDM3LCAweDAxLCAweDdmLCAweDdlLCAweDM3LCAweDAxLCAKKyAgICAweDVmLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDE0LCAweDJjLCAweDM4LCAweDEzLCAweDdhLCAweDQ3LCAweDAxLCAweDVmLCAweDc1LCAKKyAgICAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDAyLCAweDY5LCAweGYwLCAweDc1LCAweDJmLCAKKyAgICAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDllLCAweDQ0LCAweDE0LCAweDJkLCAweDlkLCAweDI0LCAKKyAgICAweDEyLCAweDY5LCAweGYwLCAweDdlLCAweDM0LCAweDEwLCAweDJkLCAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweDVmLCAweDEyLCAKKyAgICAweDY5LCAweGYwLCAweGJlLCAweDI1LCAweDIwLCAweDc4LCAweDAzLCAweDAyLCAweDUwLCAweDQ5LCAweDIyLCAweGQyLCAweDBiLCAweDdlLCAweDA0LCAweDEwLCAKKyAgICAweDJkLCAweDdhLCAweDA3LCAweDAxLCAweDVmLCAweDdhLCAweDA3LCAweDAxLCAweDZmLCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDc1LCAKKyAgICAweDJmLCAweDAwLCAweDEyLCAweDczLCAweDM1LCAweDIyLCAweDc1LCAweDJmLCAweDkyLCAweDEyLCAweDczLCAweDM1LCAweGQyLCAweDA0LCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDgyLCAweGRhLCAweGI4LCAweDc4LCAweDY4LCAweDdlLCAweDM3LCAweDAxLCAweGNiLCAweDdlLCAweDI3LCAKKyAgICAweDAxLCAweGFmLCAweDJlLCAweDI0LCAweDAwLCAweDAyLCAweDJkLCAweDMyLCAweGJlLCAweDM0LCAweDA0LCAweDAwLCAweDM4LCAweDM0LCAweDdkLCAweDAyLCAKKyAgICAweDJlLCAweDA1LCAweDMwLCAweDdhLCAweDA1LCAweDMwLCAweDdhLCAweDM3LCAweDAxLCAweGNiLCAweDdlLCAweDM3LCAweDAxLCAweGM5LCAweDdkLCAweDQzLCAKKyAgICAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDI4LCAweDJjLCAweDM4LCAweDNjLCAweDdhLCAweDQ3LCAweDAxLCAweGM5LCAweDdlLCAweDI0LCAweDAzLCAweDAwLCAKKyAgICAweDJlLCAweDI3LCAweDAxLCAweGFmLCAweDFiLCAweDM4LCAweDIwLCAweDBiLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDAyLCAKKyAgICAweDZhLCAweDYzLCAweDc1LCAweDJmLCAweDk5LCAweDEyLCAweDczLCAweDM1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAKKyAgICAweDAwLCAweDA0LCAweDMwLCAweDNiLCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAKKyAgICAweDEzLCAweDIyLCAweDgwLCAweDdmLCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDllLCAweDQ0LCAweDI4LCAweDJkLCAweDlkLCAweDI0LCAKKyAgICAweDdlLCAweDY0LCAweDAzLCAweDAwLCAweDJlLCAweDY3LCAweDAxLCAweGFmLCAweDllLCAweDI0LCAweDAwLCAweDAyLCAweDQwLCAweDE3LCAweDFiLCAweDM4LCAKKyAgICAweDYwLCAweDBiLCAweDM1LCAweDEyLCAweDZhLCAweDYzLCAweDdlLCAweDM0LCAweDI0LCAweDJkLCAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAKKyAgICAweDAxLCAweGM5LCAweDAyLCAweDZhLCAweDYzLCAweDdhLCAweDM5LCAweGMwLCAweDdlLCAweDM0LCAweDI0LCAweDJkLCAweDdhLCAweDM5LCAweGQwLCAweDBiLCAKKyAgICAweDM0LCAweDFiLCAweDQ0LCAweDgwLCAweGU1LCAweDlkLCAweDMyLCAweDdjLCAweGI2LCAweDU0LCAweDBmLCAweDIzLCAweDIzLCAweDIzLCAweDQ0LCAweDAzLCAKKyAgICAweDdhLCAweDY5LCAweGIwLCAweDdhLCAweDc5LCAweDcwLCAweDBiLCAweDM1LCAweDc1LCAweDJmLCAweDkzLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDcxLCAKKyAgICAweDJmLCAweDEyLCAweDczLCAweDM1LCAweGJkLCAweDA0LCAweDY4LCAweDJiLCAweDdhLCAweDA3LCAweDAxLCAweGM5LCAweDdlLCAweDQ3LCAweDAxLCAweGNiLCAKKyAgICAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGNiLCAweDJlLCAweDM1LCAweDMwLCAweDdhLCAweDM1LCAweDMwLCAweDIyLCAweGQyLCAweDA0LCAweDA5LCAKKyAgICAweGIxLCAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweDEzLCAweDIyLCAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDgwLCAweDI4LCAweDdlLCAweDA0LCAweDI0LCAKKyAgICAweDJkLCAweDgwLCAweDJhLCAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDgwLCAweGNmLCAweDdlLCAweDA3LCAweDAxLCAweGNiLCAweDdlLCAweDI0LCAweDAzLCAKKyAgICAweGZlLCAweDlkLCAweDIwLCAweDI4LCAweDQwLCAweDdlLCAweDA3LCAweDAxLCAweGM5LCAweDdlLCAweDQ0LCAweDI4LCAweDJkLCAweDdkLCAweDYwLCAweDBiLCAKKyAgICAweDA0LCAweGJkLCAweDA0LCAweDY4LCAweGQyLCAweDdkLCAweDcwLCAweDBiLCAweDA0LCAweGJkLCAweDA0LCAweDY4LCAweGQwLCAweDdkLCAweDU0LCAweDlkLCAKKyAgICAweDUwLCAweGJkLCAweDI1LCAweDQwLCAweDAyLCAweDdkLCAweDI1LCAweDdkLCAweDMyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAKKyAgICAweDFmLCAweGI0LCAweDAxLCAweDMxLCAweGRhLCAweGI4LCAweDdlLCAweDE5LCAweGIwLCAweDdhLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDFiLCAweDI0LCAKKyAgICAweDc4LCAweGU3LCAweDAyLCAweDUxLCAweGE1LCAweDc1LCAweDJmLCAweDk5LCAweDEyLCAweDczLCAweDM1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAKKyAgICAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDNiLCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAKKyAgICAweDAwLCAweDEwLCAweGQyLCAweDEzLCAweDIyLCAweGRhLCAweGI4LCAweDMwLCAweGUwLCAweGQ4LCAweGJkLCAweDMyLCAweDY4LCAweDA3LCAweGNhLCAweGI4LCAKKyAgICAweDEyLCAweDUxLCAweGE1LCAweGRhLCAweGI4LCAweDAyLCAweDUyLCAweGNjLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDg4LCAweDc1LCAKKyAgICAweDJmLCAweDkwLCAweDEyLCAweDczLCAweDM1LCAweGY1LCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDBhLCAweDY4LCAKKyAgICAweDFkLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDViLCAweDgwLCAweDAyLCAweGMyLCAweDViLCAweGE1LCAweGZkLCAKKyAgICAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDUzLCAweDgwLCAweDAyLCAweGMyLCAweDUzLCAweDEyLCAweDQzLCAweDAyLCAweDAyLCAweDYxLCAKKyAgICAweDEzLCAweDc1LCAweDJmLCAweDkxLCAweDEyLCAweDczLCAweDM1LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDdhLCAweGIxLCAweDJmLCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweDIwLCAweGUwLCAweDA4LCAweGQyLCAweDA0LCAweDdlLCAweGEwLCAweDgwLCAweDAyLCAweDYxLCAweDEzLCAweGQyLCAweDA0LCAweDMwLCAweGUxLCAKKyAgICAweDA2LCAweDdlLCAweGEwLCAweDgwLCAweDEyLCAweDYxLCAweDEzLCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFjLCAweGRhLCAweGI4LCAweDY4LCAweDEyLCAKKyAgICAweDdlLCAweGEwLCAweGMwLCAweDA5LCAweDYxLCAweDAwLCAweDAwLCAweDEyLCAweDYxLCAweDM2LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAweGUwLCAKKyAgICAweGRiLCAweDIyLCAweDAyLCAweDUxLCAweGY5LCAweDc1LCAweDJmLCAweDk1LCAweDEyLCAweDczLCAweDM1LCAweDIyLCAweDc1LCAweDJmLCAweDk2LCAweDEyLCAKKyAgICAweDczLCAweDM1LCAweDIyLCAweDEwLCAweDBjLCAweDAxLCAweDIyLCAweDIwLCAweDJjLCAweDAzLCAweGQyLCAweDBjLCAweDIyLCAweDc1LCAweDJmLCAweGE0LCAKKyAgICAweDEyLCAweDczLCAweDM1LCAweDdlLCAweDE0LCAweDg0LCAweDAwLCAweDgwLCAweDA2LCAweDIwLCAweDJjLCAweDAzLCAweGQyLCAweDBjLCAweDIyLCAweDA5LCAKKyAgICAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDAzLCAweDEyLCAweDU1LCAweGY5LCAweDMwLCAKKyAgICAweDM0LCAweDA2LCAweDIwLCAweGU2LCAweDRmLCAweGQyLCAweDBjLCAweDIyLCAweDMwLCAweGU2LCAweDAyLCAweGQyLCAweDY0LCAweDdlLCAweDM3LCAweDAxLCAKKyAgICAweDgxLCAweDdlLCAweDI3LCAweDAxLCAweGExLCAweDlkLCAweDMyLCAweDQwLCAweDMxLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDNhLCAweDdhLCAweDA1LCAKKyAgICAweDNhLCAweDdhLCAweDM3LCAweDAxLCAweDgxLCAweDdlLCAweDM3LCAweDAxLCAweDYxLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDE4LCAKKyAgICAweDJjLCAweDM4LCAweDY4LCAweDdhLCAweDQ3LCAweDAxLCAweDYxLCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAKKyAgICAweDEyLCAweDczLCAweDM1LCAweDEyLCAweDY5LCAweGYwLCAweDEwLCAweDY0LCAweGM0LCAweDIyLCAweGMyLCAweDY0LCAweDJkLCAweDIzLCAweDY4LCAweDc4LCAKKyAgICAweDZkLCAweDMzLCAweDgwLCAweDFhLCAweDdlLCAweDI3LCAweDAxLCAweDgxLCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDY4LCAweDZhLCAweGJlLCAweDI3LCAKKyAgICAweDAxLCAweGExLCAweDI4LCAweDA0LCAweDdlLCAweDI3LCAweDAxLCAweGExLCAweDdlLCAweDM3LCAweDAxLCAweDgxLCAweDlkLCAweDMyLCAweDdkLCAweDAyLCAKKyAgICAweDJlLCAweDA1LCAweDNhLCAweDdhLCAweDA1LCAweDNhLCAweDdhLCAweDM3LCAweDAxLCAweDgxLCAweDdlLCAweDM3LCAweDAxLCAweDYxLCAweDdkLCAweDQzLCAKKyAgICAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDE4LCAweDJjLCAweDM4LCAweDEzLCAweDdhLCAweDQ3LCAweDAxLCAweDYxLCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAKKyAgICAweDczLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDAyLCAweDY5LCAweGYwLCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDllLCAweDQ0LCAweDE4LCAweDJkLCAweDlkLCAweDI0LCAweDEyLCAweDY5LCAweGYwLCAKKyAgICAweDdlLCAweDM0LCAweDE0LCAweDJkLCAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweDYxLCAweDEyLCAweDY5LCAweGYwLCAweGJlLCAKKyAgICAweDI1LCAweDIwLCAweDc4LCAweDAzLCAweDAyLCAweDUzLCAweDc2LCAweDIyLCAweGQyLCAweDBjLCAweDdlLCAweDA0LCAweDE0LCAweDJkLCAweDdhLCAweDA3LCAKKyAgICAweDAxLCAweDYxLCAweDdhLCAweDA3LCAweDAxLCAweDcxLCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDc1LCAweDJmLCAweDAwLCAweDEyLCAKKyAgICAweDczLCAweDM1LCAweDIyLCAweDc1LCAweDJmLCAweDkyLCAweDEyLCAweDczLCAweDM1LCAweGQyLCAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAKKyAgICAweGI4LCAweDU0LCAweDgyLCAweGRhLCAweGI4LCAweDc4LCAweDY4LCAweDdlLCAweDM3LCAweDAxLCAweGNiLCAweDdlLCAweDI3LCAweDAxLCAweGIxLCAweDJlLCAKKyAgICAweDI0LCAweDAwLCAweDAyLCAweDJkLCAweDMyLCAweGJlLCAweDM0LCAweDA0LCAweDAwLCAweDM4LCAweDM0LCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDMwLCAKKyAgICAweDdhLCAweDA1LCAweDMwLCAweDdhLCAweDM3LCAweDAxLCAweGNiLCAweDdlLCAweDM3LCAweDAxLCAweGM5LCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAKKyAgICAweDQ0LCAweDI4LCAweDJjLCAweDM4LCAweDNjLCAweDdhLCAweDQ3LCAweDAxLCAweGM5LCAweDdlLCAweDI0LCAweDA0LCAweDAwLCAweDJlLCAweDI3LCAweDAxLCAKKyAgICAweGIxLCAweDFiLCAweDM4LCAweDIwLCAweDBiLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDAyLCAweDZhLCAweDYzLCAweDc1LCAKKyAgICAweDJmLCAweDk5LCAweDEyLCAweDczLCAweDM1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAKKyAgICAweDNjLCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDE0LCAweDIyLCAweDgwLCAKKyAgICAweDdmLCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDllLCAweDQ0LCAweDI4LCAweDJkLCAweDlkLCAweDI0LCAweDdlLCAweDY0LCAweDA0LCAKKyAgICAweDAwLCAweDJlLCAweDY3LCAweDAxLCAweGIxLCAweDllLCAweDI0LCAweDAwLCAweDAyLCAweDQwLCAweDE3LCAweDFiLCAweDM4LCAweDYwLCAweDBiLCAweDM1LCAKKyAgICAweDEyLCAweDZhLCAweDYzLCAweDdlLCAweDM0LCAweDI0LCAweDJkLCAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGM5LCAweDAyLCAKKyAgICAweDZhLCAweDYzLCAweDdhLCAweDM5LCAweGMwLCAweDdlLCAweDM0LCAweDI0LCAweDJkLCAweDdhLCAweDM5LCAweGQwLCAweDBiLCAweDM0LCAweDFiLCAweDQ0LCAKKyAgICAweDgwLCAweGU1LCAweDlkLCAweDMyLCAweDdjLCAweGI2LCAweDU0LCAweDBmLCAweDIzLCAweDIzLCAweDIzLCAweDQ0LCAweDA0LCAweDdhLCAweDY5LCAweGIwLCAKKyAgICAweDdhLCAweDc5LCAweDcwLCAweDBiLCAweDM1LCAweDc1LCAweDJmLCAweDkzLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDcxLCAweDJmLCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweGJkLCAweDA0LCAweDY4LCAweDJiLCAweDdhLCAweDA3LCAweDAxLCAweGM5LCAweDdlLCAweDQ3LCAweDAxLCAweGNiLCAweDJkLCAweDQzLCAweDdhLCAKKyAgICAweDQ3LCAweDAxLCAweGNiLCAweDJlLCAweDM1LCAweDMwLCAweDdhLCAweDM1LCAweDMwLCAweDIyLCAweGQyLCAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAKKyAgICAweDIwLCAweGUwLCAweDEzLCAweDIyLCAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDgwLCAweDI4LCAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDgwLCAweDJhLCAKKyAgICAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDgwLCAweGNmLCAweDdlLCAweDA3LCAweDAxLCAweGNiLCAweDdlLCAweDI0LCAweDAzLCAweGZlLCAweDlkLCAweDIwLCAKKyAgICAweDI4LCAweDQwLCAweDdlLCAweDA3LCAweDAxLCAweGM5LCAweDdlLCAweDQ0LCAweDI4LCAweDJkLCAweDdkLCAweDYwLCAweDBiLCAweDA0LCAweGJkLCAweDA0LCAKKyAgICAweDY4LCAweGQyLCAweDdkLCAweDcwLCAweDBiLCAweDA0LCAweGJkLCAweDA0LCAweDY4LCAweGQwLCAweDdkLCAweDU0LCAweDlkLCAweDUwLCAweGJkLCAweDI1LCAKKyAgICAweDQwLCAweDAyLCAweDdkLCAweDI1LCAweDdkLCAweDMyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDFmLCAweGI0LCAweDAxLCAKKyAgICAweDMxLCAweGRhLCAweGI4LCAweDdlLCAweDE5LCAweGIwLCAweDdhLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDFiLCAweDI0LCAweDc4LCAweGU3LCAweDAyLCAKKyAgICAweDU0LCAweGQyLCAweDc1LCAweDJmLCAweDk5LCAweDEyLCAweDczLCAweDM1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAKKyAgICAweDAwLCAweDA0LCAweDMwLCAweDNjLCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAKKyAgICAweDE0LCAweDIyLCAweGRhLCAweGI4LCAweDMwLCAweGUwLCAweGQ4LCAweGJkLCAweDMyLCAweDY4LCAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDU0LCAweGQyLCAKKyAgICAweGRhLCAweGI4LCAweDAyLCAweDU1LCAweGY5LCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDg4LCAweDc1LCAweDJmLCAweDkwLCAweDEyLCAKKyAgICAweDczLCAweDM1LCAweGY1LCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDBhLCAweDY4LCAweDFkLCAweGE1LCAweGZkLCAKKyAgICAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDVjLCAweDgwLCAweDAyLCAweGMyLCAweDVjLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAKKyAgICAweDY4LCAweDA0LCAweGQyLCAweDU0LCAweDgwLCAweDAyLCAweGMyLCAweDU0LCAweDEyLCAweDQzLCAweDE5LCAweDAyLCAweDYxLCAweDEzLCAweDc1LCAweDJmLCAKKyAgICAweDkxLCAweDEyLCAweDczLCAweDM1LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDdhLCAweGIxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDIwLCAweGUwLCAKKyAgICAweDA4LCAweGQyLCAweDA0LCAweDdlLCAweGEwLCAweDgwLCAweDAyLCAweDYxLCAweDEzLCAweGQyLCAweDA0LCAweDMwLCAweGUxLCAweDA2LCAweDdlLCAweGEwLCAKKyAgICAweDgwLCAweDEyLCAweDYxLCAweDEzLCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFjLCAweGRhLCAweGI4LCAweDY4LCAweDEyLCAweDdlLCAweGEwLCAweGMwLCAKKyAgICAweDA5LCAweDYxLCAweDAwLCAweDAwLCAweDEyLCAweDYxLCAweDM2LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweGRiLCAweDIyLCAweDAyLCAKKyAgICAweDU1LCAweDI2LCAweDc1LCAweDJmLCAweDk1LCAweDEyLCAweDczLCAweDM1LCAweDIyLCAweDc1LCAweDJmLCAweDk2LCAweDEyLCAweDczLCAweDM1LCAweDIyLCAKKyAgICAweDEwLCAweDBkLCAweDAxLCAweDIyLCAweDIwLCAweDJkLCAweDAzLCAweGQyLCAweDBkLCAweDIyLCAweDc1LCAweDJmLCAweGE1LCAweDEyLCAweDczLCAweDM1LCAKKyAgICAweDdlLCAweDE0LCAweDg1LCAweDAwLCAweDgwLCAweDA2LCAweDIwLCAweDJkLCAweDAzLCAweGQyLCAweDBkLCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAKKyAgICAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDAzLCAweDEyLCAweDU5LCAweDI2LCAweDMwLCAweDM1LCAweDA2LCAweDIwLCAKKyAgICAweGU2LCAweDRmLCAweGQyLCAweDBkLCAweDIyLCAweDMwLCAweGU2LCAweDAyLCAweGQyLCAweDY1LCAweDdlLCAweDM3LCAweDAxLCAweDgzLCAweDdlLCAweDI3LCAKKyAgICAweDAxLCAweGEzLCAweDlkLCAweDMyLCAweDQwLCAweDMxLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDNjLCAweDdhLCAweDA1LCAweDNjLCAweDdhLCAweDM3LCAKKyAgICAweDAxLCAweDgzLCAweDdlLCAweDM3LCAweDAxLCAweDYzLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDFjLCAweDJjLCAweDM4LCAweDY4LCAKKyAgICAweDdhLCAweDQ3LCAweDAxLCAweDYzLCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAKKyAgICAweDEyLCAweDY5LCAweGYwLCAweDEwLCAweDY1LCAweGM0LCAweDIyLCAweGMyLCAweDY1LCAweDJkLCAweDIzLCAweDY4LCAweDc4LCAweDZkLCAweDMzLCAweDgwLCAKKyAgICAweDFhLCAweDdlLCAweDI3LCAweDAxLCAweDgzLCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDY4LCAweDZhLCAweGJlLCAweDI3LCAweDAxLCAweGEzLCAweDI4LCAKKyAgICAweDA0LCAweDdlLCAweDI3LCAweDAxLCAweGEzLCAweDdlLCAweDM3LCAweDAxLCAweDgzLCAweDlkLCAweDMyLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDNjLCAKKyAgICAweDdhLCAweDA1LCAweDNjLCAweDdhLCAweDM3LCAweDAxLCAweDgzLCAweDdlLCAweDM3LCAweDAxLCAweDYzLCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAKKyAgICAweDQ0LCAweDFjLCAweDJjLCAweDM4LCAweDEzLCAweDdhLCAweDQ3LCAweDAxLCAweDYzLCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAKKyAgICAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDAyLCAweDY5LCAweGYwLCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDUxLCAKKyAgICAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDllLCAweDQ0LCAweDFjLCAweDJkLCAweDlkLCAweDI0LCAweDEyLCAweDY5LCAweGYwLCAweDdlLCAweDM0LCAweDE4LCAKKyAgICAweDJkLCAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweDYzLCAweDEyLCAweDY5LCAweGYwLCAweGJlLCAweDI1LCAweDIwLCAweDc4LCAKKyAgICAweDAzLCAweDAyLCAweDU2LCAweGEzLCAweDIyLCAweGQyLCAweDBkLCAweDdlLCAweDA0LCAweDE4LCAweDJkLCAweDdhLCAweDA3LCAweDAxLCAweDYzLCAweDdhLCAKKyAgICAweDA3LCAweDAxLCAweDczLCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDc1LCAweDJmLCAweDAwLCAweDEyLCAweDczLCAweDM1LCAweDIyLCAKKyAgICAweDc1LCAweDJmLCAweDkyLCAweDEyLCAweDczLCAweDM1LCAweGQyLCAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDgyLCAKKyAgICAweGRhLCAweGI4LCAweDc4LCAweDY4LCAweDdlLCAweDM3LCAweDAxLCAweGNiLCAweDdlLCAweDI3LCAweDAxLCAweGIzLCAweDJlLCAweDI0LCAweDAwLCAweDAyLCAKKyAgICAweDJkLCAweDMyLCAweGJlLCAweDM0LCAweDA0LCAweDAwLCAweDM4LCAweDM0LCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDMwLCAweDdhLCAweDA1LCAweDMwLCAKKyAgICAweDdhLCAweDM3LCAweDAxLCAweGNiLCAweDdlLCAweDM3LCAweDAxLCAweGM5LCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDI4LCAweDJjLCAKKyAgICAweDM4LCAweDNjLCAweDdhLCAweDQ3LCAweDAxLCAweGM5LCAweDdlLCAweDI0LCAweDA1LCAweDAwLCAweDJlLCAweDI3LCAweDAxLCAweGIzLCAweDFiLCAweDM4LCAKKyAgICAweDIwLCAweDBiLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDAyLCAweDZhLCAweDYzLCAweDc1LCAweDJmLCAweDk5LCAweDEyLCAKKyAgICAweDczLCAweDM1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDNkLCAweDBhLCAweDA5LCAKKyAgICAweGIxLCAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDE1LCAweDIyLCAweDgwLCAweDdmLCAweDdhLCAweDUxLCAKKyAgICAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDllLCAweDQ0LCAweDI4LCAweDJkLCAweDlkLCAweDI0LCAweDdlLCAweDY0LCAweDA1LCAweDAwLCAweDJlLCAweDY3LCAKKyAgICAweDAxLCAweGIzLCAweDllLCAweDI0LCAweDAwLCAweDAyLCAweDQwLCAweDE3LCAweDFiLCAweDM4LCAweDYwLCAweDBiLCAweDM1LCAweDEyLCAweDZhLCAweDYzLCAKKyAgICAweDdlLCAweDM0LCAweDI0LCAweDJkLCAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGM5LCAweDAyLCAweDZhLCAweDYzLCAweDdhLCAKKyAgICAweDM5LCAweGMwLCAweDdlLCAweDM0LCAweDI0LCAweDJkLCAweDdhLCAweDM5LCAweGQwLCAweDBiLCAweDM0LCAweDFiLCAweDQ0LCAweDgwLCAweGU1LCAweDlkLCAKKyAgICAweDMyLCAweDdjLCAweGI2LCAweDU0LCAweDBmLCAweDIzLCAweDIzLCAweDIzLCAweDQ0LCAweDA1LCAweDdhLCAweDY5LCAweGIwLCAweDdhLCAweDc5LCAweDcwLCAKKyAgICAweDBiLCAweDM1LCAweDc1LCAweDJmLCAweDkzLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDcxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweGJkLCAweDA0LCAKKyAgICAweDY4LCAweDJiLCAweDdhLCAweDA3LCAweDAxLCAweGM5LCAweDdlLCAweDQ3LCAweDAxLCAweGNiLCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGNiLCAKKyAgICAweDJlLCAweDM1LCAweDMwLCAweDdhLCAweDM1LCAweDMwLCAweDIyLCAweGQyLCAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweDEzLCAKKyAgICAweDIyLCAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDgwLCAweDI4LCAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDgwLCAweDJhLCAweDdlLCAweDA0LCAweDI0LCAKKyAgICAweDJkLCAweDgwLCAweGNmLCAweDdlLCAweDA3LCAweDAxLCAweGNiLCAweDdlLCAweDI0LCAweDAzLCAweGZlLCAweDlkLCAweDIwLCAweDI4LCAweDQwLCAweDdlLCAKKyAgICAweDA3LCAweDAxLCAweGM5LCAweDdlLCAweDQ0LCAweDI4LCAweDJkLCAweDdkLCAweDYwLCAweDBiLCAweDA0LCAweGJkLCAweDA0LCAweDY4LCAweGQyLCAweDdkLCAKKyAgICAweDcwLCAweDBiLCAweDA0LCAweGJkLCAweDA0LCAweDY4LCAweGQwLCAweDdkLCAweDU0LCAweDlkLCAweDUwLCAweGJkLCAweDI1LCAweDQwLCAweDAyLCAweDdkLCAKKyAgICAweDI1LCAweDdkLCAweDMyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDFmLCAweGI0LCAweDAxLCAweDMxLCAweGRhLCAweGI4LCAKKyAgICAweDdlLCAweDE5LCAweGIwLCAweDdhLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDFiLCAweDI0LCAweDc4LCAweGU3LCAweDAyLCAweDU3LCAweGZmLCAweDc1LCAKKyAgICAweDJmLCAweDk5LCAweDEyLCAweDczLCAweDM1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAKKyAgICAweDNkLCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDE1LCAweDIyLCAweGRhLCAKKyAgICAweGI4LCAweDMwLCAweGUwLCAweGQ4LCAweGJkLCAweDMyLCAweDY4LCAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDU3LCAweGZmLCAweGRhLCAweGI4LCAweDAyLCAKKyAgICAweDU5LCAweDI2LCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDg4LCAweDc1LCAweDJmLCAweDkwLCAweDEyLCAweDczLCAweDM1LCAweGY1LCAKKyAgICAweDJmLCAweDEyLCAweDczLCAweDM1LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDBhLCAweDY4LCAweDFkLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAKKyAgICAweDY4LCAweDA0LCAweGQyLCAweDVkLCAweDgwLCAweDAyLCAweGMyLCAweDVkLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAKKyAgICAweDU1LCAweDgwLCAweDAyLCAweGMyLCAweDU1LCAweDEyLCAweDQzLCAweDMwLCAweDAyLCAweDYxLCAweDEzLCAweDc1LCAweDJmLCAweDkxLCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDdhLCAweGIxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDIwLCAweGUwLCAweDA4LCAweGQyLCAweDA0LCAKKyAgICAweDdlLCAweGEwLCAweDgwLCAweDAyLCAweDYxLCAweDEzLCAweGQyLCAweDA0LCAweDMwLCAweGUxLCAweDA2LCAweDdlLCAweGEwLCAweDgwLCAweDEyLCAweDYxLCAKKyAgICAweDEzLCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFjLCAweGRhLCAweGI4LCAweDY4LCAweDEyLCAweDdlLCAweGEwLCAweGMwLCAweDA5LCAweDYxLCAweDAwLCAKKyAgICAweDAwLCAweDEyLCAweDYxLCAweDM2LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweGRiLCAweDIyLCAweDAyLCAweDU4LCAweDUzLCAweDc1LCAKKyAgICAweDJmLCAweDk1LCAweDEyLCAweDczLCAweDM1LCAweDIyLCAweDc1LCAweDJmLCAweDk2LCAweDEyLCAweDczLCAweDM1LCAweDIyLCAweDEwLCAweDBlLCAweDAxLCAKKyAgICAweDIyLCAweDIwLCAweDJlLCAweDAzLCAweGQyLCAweDBlLCAweDIyLCAweDc1LCAweDJmLCAweGE2LCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweDE0LCAweDg2LCAKKyAgICAweDAwLCAweDgwLCAweDA2LCAweDIwLCAweDJlLCAweDAzLCAweGQyLCAweDBlLCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAKKyAgICAweGIwLCAweDFlLCAweGRhLCAweGI4LCAweDY4LCAweDAzLCAweDEyLCAweDVjLCAweDUzLCAweDMwLCAweDM2LCAweDA2LCAweDIwLCAweGU2LCAweDRmLCAweGQyLCAKKyAgICAweDBlLCAweDIyLCAweDMwLCAweGU2LCAweDAyLCAweGQyLCAweDY2LCAweDdlLCAweDM3LCAweDAxLCAweDg1LCAweDdlLCAweDI3LCAweDAxLCAweGE1LCAweDlkLCAKKyAgICAweDMyLCAweDQwLCAweDMxLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDNlLCAweDdhLCAweDA1LCAweDNlLCAweDdhLCAweDM3LCAweDAxLCAweDg1LCAweDdlLCAKKyAgICAweDM3LCAweDAxLCAweDY1LCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDIwLCAweDJjLCAweDM4LCAweDY4LCAweDdhLCAweDQ3LCAweDAxLCAKKyAgICAweDY1LCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDEyLCAweDY5LCAweGYwLCAKKyAgICAweDEwLCAweDY2LCAweGM0LCAweDIyLCAweGMyLCAweDY2LCAweDJkLCAweDIzLCAweDY4LCAweDc4LCAweDZkLCAweDMzLCAweDgwLCAweDFhLCAweDdlLCAweDI3LCAKKyAgICAweDAxLCAweDg1LCAweGJlLCAweDI0LCAweDAwLCAweDAwLCAweDY4LCAweDZhLCAweGJlLCAweDI3LCAweDAxLCAweGE1LCAweDI4LCAweDA0LCAweDdlLCAweDI3LCAKKyAgICAweDAxLCAweGE1LCAweDdlLCAweDM3LCAweDAxLCAweDg1LCAweDlkLCAweDMyLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDNlLCAweDdhLCAweDA1LCAweDNlLCAKKyAgICAweDdhLCAweDM3LCAweDAxLCAweDg1LCAweDdlLCAweDM3LCAweDAxLCAweDY1LCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDIwLCAweDJjLCAKKyAgICAweDM4LCAweDEzLCAweDdhLCAweDQ3LCAweDAxLCAweDY1LCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAKKyAgICAweDczLCAweDM1LCAweDAyLCAweDY5LCAweGYwLCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweDllLCAweDQ0LCAweDIwLCAweDJkLCAweDlkLCAweDI0LCAweDEyLCAweDY5LCAweGYwLCAweDdlLCAweDM0LCAweDFjLCAweDJkLCAweDdkLCAweDI0LCAKKyAgICAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweDY1LCAweDEyLCAweDY5LCAweGYwLCAweGJlLCAweDI1LCAweDIwLCAweDc4LCAweDAzLCAweDAyLCAweDU5LCAKKyAgICAweGQwLCAweDIyLCAweGQyLCAweDBlLCAweDdlLCAweDA0LCAweDFjLCAweDJkLCAweDdhLCAweDA3LCAweDAxLCAweDY1LCAweDdhLCAweDA3LCAweDAxLCAweDc1LCAKKyAgICAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDc1LCAweDJmLCAweDAwLCAweDEyLCAweDczLCAweDM1LCAweDIyLCAweDc1LCAweDJmLCAweDkyLCAKKyAgICAweDEyLCAweDczLCAweDM1LCAweGQyLCAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDgyLCAweGRhLCAweGI4LCAweDc4LCAKKyAgICAweDY4LCAweDdlLCAweDM3LCAweDAxLCAweGNiLCAweDdlLCAweDI3LCAweDAxLCAweGI1LCAweDJlLCAweDI0LCAweDAwLCAweDAyLCAweDJkLCAweDMyLCAweGJlLCAKKyAgICAweDM0LCAweDA0LCAweDAwLCAweDM4LCAweDM0LCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDMwLCAweDdhLCAweDA1LCAweDMwLCAweDdhLCAweDM3LCAweDAxLCAKKyAgICAweGNiLCAweDdlLCAweDM3LCAweDAxLCAweGM5LCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDI4LCAweDJjLCAweDM4LCAweDNjLCAweDdhLCAKKyAgICAweDQ3LCAweDAxLCAweGM5LCAweDdlLCAweDI0LCAweDA2LCAweDAwLCAweDJlLCAweDI3LCAweDAxLCAweGI1LCAweDFiLCAweDM4LCAweDIwLCAweDBiLCAweDM1LCAKKyAgICAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDAyLCAweDZhLCAweDYzLCAweDc1LCAweDJmLCAweDk5LCAweDEyLCAweDczLCAweDM1LCAweDA5LCAKKyAgICAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDNlLCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAKKyAgICAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDE2LCAweDIyLCAweDgwLCAweDdmLCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweDllLCAweDQ0LCAweDI4LCAweDJkLCAweDlkLCAweDI0LCAweDdlLCAweDY0LCAweDA2LCAweDAwLCAweDJlLCAweDY3LCAweDAxLCAweGI1LCAweDllLCAKKyAgICAweDI0LCAweDAwLCAweDAyLCAweDQwLCAweDE3LCAweDFiLCAweDM4LCAweDYwLCAweDBiLCAweDM1LCAweDEyLCAweDZhLCAweDYzLCAweDdlLCAweDM0LCAweDI0LCAKKyAgICAweDJkLCAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGM5LCAweDAyLCAweDZhLCAweDYzLCAweDdhLCAweDM5LCAweGMwLCAweDdlLCAKKyAgICAweDM0LCAweDI0LCAweDJkLCAweDdhLCAweDM5LCAweGQwLCAweDBiLCAweDM0LCAweDFiLCAweDQ0LCAweDgwLCAweGU1LCAweDlkLCAweDMyLCAweDdjLCAweGI2LCAKKyAgICAweDU0LCAweDBmLCAweDIzLCAweDIzLCAweDIzLCAweDQ0LCAweDA2LCAweDdhLCAweDY5LCAweGIwLCAweDdhLCAweDc5LCAweDcwLCAweDBiLCAweDM1LCAweDc1LCAKKyAgICAweDJmLCAweDkzLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDcxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweGJkLCAweDA0LCAweDY4LCAweDJiLCAweDdhLCAKKyAgICAweDA3LCAweDAxLCAweGM5LCAweDdlLCAweDQ3LCAweDAxLCAweGNiLCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGNiLCAweDJlLCAweDM1LCAweDMwLCAKKyAgICAweDdhLCAweDM1LCAweDMwLCAweDIyLCAweGQyLCAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweDEzLCAweDIyLCAweDdlLCAweDA0LCAKKyAgICAweDI0LCAweDJkLCAweDgwLCAweDI4LCAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDgwLCAweDJhLCAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDgwLCAweGNmLCAKKyAgICAweDdlLCAweDA3LCAweDAxLCAweGNiLCAweDdlLCAweDI0LCAweDAzLCAweGZlLCAweDlkLCAweDIwLCAweDI4LCAweDQwLCAweDdlLCAweDA3LCAweDAxLCAweGM5LCAKKyAgICAweDdlLCAweDQ0LCAweDI4LCAweDJkLCAweDdkLCAweDYwLCAweDBiLCAweDA0LCAweGJkLCAweDA0LCAweDY4LCAweGQyLCAweDdkLCAweDcwLCAweDBiLCAweDA0LCAKKyAgICAweGJkLCAweDA0LCAweDY4LCAweGQwLCAweDdkLCAweDU0LCAweDlkLCAweDUwLCAweGJkLCAweDI1LCAweDQwLCAweDAyLCAweDdkLCAweDI1LCAweDdkLCAweDMyLCAKKyAgICAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDFmLCAweGI0LCAweDAxLCAweDMxLCAweGRhLCAweGI4LCAweDdlLCAweDE5LCAweGIwLCAKKyAgICAweDdhLCAweDA5LCAweGIwLCAweDBiLCAweDA0LCAweDFiLCAweDI0LCAweDc4LCAweGU3LCAweDAyLCAweDViLCAweDJjLCAweDc1LCAweDJmLCAweDk5LCAweDEyLCAKKyAgICAweDczLCAweDM1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDNlLCAweDBhLCAweDA5LCAKKyAgICAweGIxLCAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDE2LCAweDIyLCAweGRhLCAweGI4LCAweDMwLCAweGUwLCAKKyAgICAweGQ4LCAweGJkLCAweDMyLCAweDY4LCAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDViLCAweDJjLCAweGRhLCAweGI4LCAweDAyLCAweDVjLCAweDUzLCAweDA5LCAKKyAgICAweGIxLCAweDAwLCAweDE4LCAweDdlLCAweGEwLCAweDg4LCAweDc1LCAweDJmLCAweDkwLCAweDEyLCAweDczLCAweDM1LCAweGY1LCAweDJmLCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDBhLCAweDY4LCAweDFkLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAKKyAgICAweDVlLCAweDgwLCAweDAyLCAweGMyLCAweDVlLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDU2LCAweDgwLCAweDAyLCAKKyAgICAweGMyLCAweDU2LCAweDEyLCAweDQzLCAweDQ3LCAweDAyLCAweDYxLCAweDEzLCAweDc1LCAweDJmLCAweDkxLCAweDEyLCAweDczLCAweDM1LCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDE0LCAweDdhLCAweGIxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDIwLCAweGUwLCAweDA4LCAweGQyLCAweDA0LCAweDdlLCAweGEwLCAweDgwLCAKKyAgICAweDAyLCAweDYxLCAweDEzLCAweGQyLCAweDA0LCAweDMwLCAweGUxLCAweDA2LCAweDdlLCAweGEwLCAweDgwLCAweDEyLCAweDYxLCAweDEzLCAweGNhLCAweGI4LCAKKyAgICAweDVlLCAweGIwLCAweDFjLCAweGRhLCAweGI4LCAweDY4LCAweDEyLCAweDdlLCAweGEwLCAweGMwLCAweDA5LCAweDYxLCAweDAwLCAweDAwLCAweDEyLCAweDYxLCAKKyAgICAweDM2LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweGRiLCAweDIyLCAweDAyLCAweDViLCAweDgwLCAweDc1LCAweDJmLCAweDk1LCAweDEyLCAKKyAgICAweDczLCAweDM1LCAweDIyLCAweDc1LCAweDJmLCAweDk2LCAweDEyLCAweDczLCAweDM1LCAweDIyLCAweDEwLCAweDBmLCAweDAxLCAweDIyLCAweDIwLCAweDJmLCAKKyAgICAweDAzLCAweGQyLCAweDBmLCAweDIyLCAweDc1LCAweDJmLCAweGE3LCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweDE0LCAweDg3LCAweDAwLCAweDgwLCAweDA2LCAKKyAgICAweDIwLCAweDJmLCAweDAzLCAweGQyLCAweDBmLCAweDIyLCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFlLCAweGRhLCAKKyAgICAweGI4LCAweDY4LCAweDAzLCAweDEyLCAweDVmLCAweDgwLCAweDMwLCAweDM3LCAweDA2LCAweDIwLCAweGU2LCAweDRmLCAweGQyLCAweDBmLCAweDIyLCAweDMwLCAKKyAgICAweGU2LCAweDAyLCAweGQyLCAweDY3LCAweDdlLCAweDM3LCAweDAxLCAweDg3LCAweDdlLCAweDI3LCAweDAxLCAweGE3LCAweDlkLCAweDMyLCAweDQwLCAweDMxLCAKKyAgICAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDQwLCAweDdhLCAweDA1LCAweDQwLCAweDdhLCAweDM3LCAweDAxLCAweDg3LCAweDdlLCAweDM3LCAweDAxLCAweDY3LCAKKyAgICAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDI0LCAweDJjLCAweDM4LCAweDY4LCAweDdhLCAweDQ3LCAweDAxLCAweDY3LCAweDc1LCAweDJmLCAKKyAgICAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDEyLCAweDY5LCAweGYwLCAweDEwLCAweDY3LCAweGM0LCAKKyAgICAweDIyLCAweGMyLCAweDY3LCAweDJkLCAweDIzLCAweDY4LCAweDc4LCAweDZkLCAweDMzLCAweDgwLCAweDFhLCAweDdlLCAweDI3LCAweDAxLCAweDg3LCAweGJlLCAKKyAgICAweDI0LCAweDAwLCAweDAwLCAweDY4LCAweDZhLCAweGJlLCAweDI3LCAweDAxLCAweGE3LCAweDI4LCAweDA0LCAweDdlLCAweDI3LCAweDAxLCAweGE3LCAweDdlLCAKKyAgICAweDM3LCAweDAxLCAweDg3LCAweDlkLCAweDMyLCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDQwLCAweDdhLCAweDA1LCAweDQwLCAweDdhLCAweDM3LCAweDAxLCAKKyAgICAweDg3LCAweDdlLCAweDM3LCAweDAxLCAweDY3LCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDI0LCAweDJjLCAweDM4LCAweDEzLCAweDdhLCAKKyAgICAweDQ3LCAweDAxLCAweDY3LCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDAyLCAKKyAgICAweDY5LCAweGYwLCAweDc1LCAweDJmLCAweDk0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDllLCAweDQ0LCAKKyAgICAweDI0LCAweDJkLCAweDlkLCAweDI0LCAweDEyLCAweDY5LCAweGYwLCAweDdlLCAweDM0LCAweDIwLCAweDJkLCAweDdkLCAweDI0LCAweDJkLCAweDQzLCAweDdhLCAKKyAgICAweDQ3LCAweDAxLCAweDY3LCAweDEyLCAweDY5LCAweGYwLCAweGJlLCAweDI1LCAweDIwLCAweDc4LCAweDAzLCAweDAyLCAweDVjLCAweGZkLCAweDIyLCAweGQyLCAKKyAgICAweDBmLCAweDdlLCAweDA0LCAweDIwLCAweDJkLCAweDdhLCAweDA3LCAweDAxLCAweDY3LCAweDdhLCAweDA3LCAweDAxLCAweDc3LCAweDc1LCAweDJmLCAweDk0LCAKKyAgICAweDEyLCAweDczLCAweDM1LCAweDc1LCAweDJmLCAweDAwLCAweDEyLCAweDczLCAweDM1LCAweDIyLCAweDc1LCAweDJmLCAweDkyLCAweDEyLCAweDczLCAweDM1LCAKKyAgICAweGQyLCAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDgyLCAweGRhLCAweGI4LCAweDc4LCAweDY4LCAweDdlLCAweDM3LCAKKyAgICAweDAxLCAweGNiLCAweDdlLCAweDI3LCAweDAxLCAweGI3LCAweDJlLCAweDI0LCAweDAwLCAweDAyLCAweDJkLCAweDMyLCAweGJlLCAweDM0LCAweDA0LCAweDAwLCAKKyAgICAweDM4LCAweDM0LCAweDdkLCAweDAyLCAweDJlLCAweDA1LCAweDMwLCAweDdhLCAweDA1LCAweDMwLCAweDdhLCAweDM3LCAweDAxLCAweGNiLCAweDdlLCAweDM3LCAKKyAgICAweDAxLCAweGM5LCAweDdkLCAweDQzLCAweDJkLCAweDQyLCAweGJlLCAweDQ0LCAweDI4LCAweDJjLCAweDM4LCAweDNjLCAweDdhLCAweDQ3LCAweDAxLCAweGM5LCAKKyAgICAweDdlLCAweDI0LCAweDA3LCAweDAwLCAweDJlLCAweDI3LCAweDAxLCAweGI3LCAweDFiLCAweDM4LCAweDIwLCAweDBiLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAKKyAgICAweDEyLCAweDczLCAweDM1LCAweDAyLCAweDZhLCAweDYzLCAweDc1LCAweDJmLCAweDk5LCAweDEyLCAweDczLCAweDM1LCAweDA5LCAweGIxLCAweDAwLCAweDA0LCAKKyAgICAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDNmLCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAweDU0LCAweGZlLCAweDE5LCAKKyAgICAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDE3LCAweDIyLCAweDgwLCAweDdmLCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDllLCAweDQ0LCAKKyAgICAweDI4LCAweDJkLCAweDlkLCAweDI0LCAweDdlLCAweDY0LCAweDA3LCAweDAwLCAweDJlLCAweDY3LCAweDAxLCAweGI3LCAweDllLCAweDI0LCAweDAwLCAweDAyLCAKKyAgICAweDQwLCAweDE3LCAweDFiLCAweDM4LCAweDYwLCAweDBiLCAweDM1LCAweDEyLCAweDZhLCAweDYzLCAweDdlLCAweDM0LCAweDI0LCAweDJkLCAweDdkLCAweDI0LCAKKyAgICAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGM5LCAweDAyLCAweDZhLCAweDYzLCAweDdhLCAweDM5LCAweGMwLCAweDdlLCAweDM0LCAweDI0LCAweDJkLCAKKyAgICAweDdhLCAweDM5LCAweGQwLCAweDBiLCAweDM0LCAweDFiLCAweDQ0LCAweDgwLCAweGU1LCAweDlkLCAweDMyLCAweDdjLCAweGI2LCAweDU0LCAweDBmLCAweDIzLCAKKyAgICAweDIzLCAweDIzLCAweDQ0LCAweDA3LCAweDdhLCAweDY5LCAweGIwLCAweDdhLCAweDc5LCAweDcwLCAweDBiLCAweDM1LCAweDc1LCAweDJmLCAweDkzLCAweDEyLCAKKyAgICAweDczLCAweDM1LCAweDdhLCAweDcxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweGJkLCAweDA0LCAweDY4LCAweDJiLCAweDdhLCAweDA3LCAweDAxLCAweGM5LCAKKyAgICAweDdlLCAweDQ3LCAweDAxLCAweGNiLCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGNiLCAweDJlLCAweDM1LCAweDMwLCAweDdhLCAweDM1LCAweDMwLCAKKyAgICAweDIyLCAweGQyLCAweDA0LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweDEzLCAweDIyLCAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDgwLCAKKyAgICAweDI4LCAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDgwLCAweDJhLCAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDgwLCAweGNmLCAweDdlLCAweDA3LCAweDAxLCAKKyAgICAweGNiLCAweDdlLCAweDI0LCAweDAzLCAweGZlLCAweDlkLCAweDIwLCAweDI4LCAweDQwLCAweDdlLCAweDA3LCAweDAxLCAweGM5LCAweDdlLCAweDQ0LCAweDI4LCAKKyAgICAweDJkLCAweDdkLCAweDYwLCAweDBiLCAweDA0LCAweGJkLCAweDA0LCAweDY4LCAweGQyLCAweDdkLCAweDcwLCAweDBiLCAweDA0LCAweGJkLCAweDA0LCAweDY4LCAKKyAgICAweGQwLCAweDdkLCAweDU0LCAweDlkLCAweDUwLCAweGJkLCAweDI1LCAweDQwLCAweDAyLCAweDdkLCAweDI1LCAweDdkLCAweDMyLCAweDA5LCAweGIxLCAweDAwLCAKKyAgICAweDE0LCAweGNhLCAweGI4LCAweDU0LCAweDFmLCAweGI0LCAweDAxLCAweDMxLCAweGRhLCAweGI4LCAweDdlLCAweDE5LCAweGIwLCAweDdhLCAweDA5LCAweGIwLCAKKyAgICAweDBiLCAweDA0LCAweDFiLCAweDI0LCAweDc4LCAweGU3LCAweDAyLCAweDVlLCAweDU5LCAweDc1LCAweDJmLCAweDk5LCAweDEyLCAweDczLCAweDM1LCAweDA5LCAKKyAgICAweGIxLCAweDAwLCAweDA0LCAweDU0LCAweGZhLCAweDE5LCAweGIxLCAweDAwLCAweDA0LCAweDMwLCAweDNmLCAweDBhLCAweDA5LCAweGIxLCAweDAwLCAweDEwLCAKKyAgICAweDU0LCAweGZlLCAweDE5LCAweGIxLCAweDAwLCAweDEwLCAweGQyLCAweDE3LCAweDIyLCAweGRhLCAweGI4LCAweDMwLCAweGUwLCAweGQ4LCAweGJkLCAweDMyLCAKKyAgICAweDY4LCAweDA3LCAweGNhLCAweGI4LCAweDEyLCAweDVlLCAweDU5LCAweGRhLCAweGI4LCAweDAyLCAweDVmLCAweDgwLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAKKyAgICAweDdlLCAweGEwLCAweDg4LCAweDc1LCAweDJmLCAweDkwLCAweDEyLCAweDczLCAweDM1LCAweGY1LCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweGE1LCAweGZkLCAKKyAgICAweDVlLCAweDUwLCAweDBhLCAweDY4LCAweDFkLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDVmLCAweDgwLCAweDAyLCAKKyAgICAweGMyLCAweDVmLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDU3LCAweDgwLCAweDAyLCAweGMyLCAweDU3LCAweDEyLCAKKyAgICAweDQzLCAweDVlLCAweDAyLCAweDYxLCAweDEzLCAweDc1LCAweDJmLCAweDkxLCAweDEyLCAweDczLCAweDM1LCAweDA5LCAweGIxLCAweDAwLCAweDE0LCAweDdhLCAKKyAgICAweGIxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDIwLCAweGUwLCAweDA4LCAweGQyLCAweDA0LCAweDdlLCAweGEwLCAweDgwLCAweDAyLCAweDYxLCAweDEzLCAKKyAgICAweGQyLCAweDA0LCAweDMwLCAweGUxLCAweDA2LCAweDdlLCAweGEwLCAweDgwLCAweDEyLCAweDYxLCAweDEzLCAweGNhLCAweGI4LCAweDVlLCAweGIwLCAweDFjLCAKKyAgICAweGRhLCAweGI4LCAweDY4LCAweDEyLCAweDdlLCAweGEwLCAweGMwLCAweDA5LCAweDYxLCAweDAwLCAweDAwLCAweDEyLCAweDYxLCAweDM2LCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDE0LCAweDIwLCAweGUwLCAweGRiLCAweDIyLCAweDAyLCAweDVlLCAweGFkLCAweDc1LCAweDJmLCAweDk1LCAweDEyLCAweDczLCAweDM1LCAweDIyLCAKKyAgICAweDc1LCAweDJmLCAweDk2LCAweDEyLCAweDczLCAweDM1LCAweDIyLCAweDdjLCAweDAyLCAweDdlLCAweDE0LCAweDgwLCAweDAwLCAweDRjLCAweDIwLCAweDA5LCAKKyAgICAweGIxLCAweDAwLCAweDE4LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDU4LCAweDgwLCAweDAyLCAweGMyLCAweDU4LCAKKyAgICAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDUwLCAweDgwLCAweDAyLCAweGMyLCAweDUwLCAweDAyLCAweDYwLCAweGZmLCAKKyAgICAweDdjLCAweDAyLCAweDdlLCAweDE0LCAweDgwLCAweDAwLCAweDRjLCAweDIwLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAKKyAgICAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDU5LCAweDgwLCAweDAyLCAweGMyLCAweDU5LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAKKyAgICAweGQyLCAweDUxLCAweDgwLCAweDAyLCAweGMyLCAweDUxLCAweDAyLCAweDYwLCAweGZmLCAweDdjLCAweDAyLCAweDdlLCAweDE0LCAweDgwLCAweDAwLCAweDRjLCAKKyAgICAweDIwLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDVhLCAweDgwLCAweDAyLCAKKyAgICAweGMyLCAweDVhLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDUyLCAweDgwLCAweDAyLCAweGMyLCAweDUyLCAweDAyLCAKKyAgICAweDYwLCAweGZmLCAweDdjLCAweDAyLCAweDdlLCAweDE0LCAweDgwLCAweDAwLCAweDRjLCAweDIwLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweGE1LCAweGZkLCAKKyAgICAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDViLCAweDgwLCAweDAyLCAweGMyLCAweDViLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAKKyAgICAweDY4LCAweDA0LCAweGQyLCAweDUzLCAweDgwLCAweDAyLCAweGMyLCAweDUzLCAweDAyLCAweDYwLCAweGZmLCAweDdjLCAweDAyLCAweDdlLCAweDE0LCAweDgwLCAKKyAgICAweDAwLCAweDRjLCAweDIwLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDVjLCAKKyAgICAweDgwLCAweDAyLCAweGMyLCAweDVjLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDU0LCAweDgwLCAweDAyLCAweGMyLCAKKyAgICAweDU0LCAweDAyLCAweDYwLCAweGZmLCAweDdjLCAweDAyLCAweDdlLCAweDE0LCAweDgwLCAweDAwLCAweDRjLCAweDIwLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAKKyAgICAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDVkLCAweDgwLCAweDAyLCAweGMyLCAweDVkLCAweGE1LCAweGZkLCAweDVlLCAKKyAgICAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDU1LCAweDgwLCAweDAyLCAweGMyLCAweDU1LCAweDAyLCAweDYwLCAweGZmLCAweDdjLCAweDAyLCAweDdlLCAKKyAgICAweDE0LCAweDgwLCAweDAwLCAweDRjLCAweDIwLCAweDA5LCAweGIxLCAweDAwLCAweDE4LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAKKyAgICAweGQyLCAweDVlLCAweDgwLCAweDAyLCAweGMyLCAweDVlLCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDU2LCAweDgwLCAKKyAgICAweDAyLCAweGMyLCAweDU2LCAweDAyLCAweDYwLCAweGZmLCAweDdjLCAweDAyLCAweDdlLCAweDE0LCAweDgwLCAweDAwLCAweDRjLCAweDIwLCAweDA5LCAweGIxLCAKKyAgICAweDAwLCAweDE4LCAweGE1LCAweGZkLCAweDVlLCAweDUwLCAweDIwLCAweDY4LCAweDA0LCAweGQyLCAweDVmLCAweDgwLCAweDAyLCAweGMyLCAweDVmLCAweGE1LCAKKyAgICAweGZkLCAweDVlLCAweDUwLCAweDgwLCAweDY4LCAweDA0LCAweGQyLCAweDU3LCAweDgwLCAweDAyLCAweGMyLCAweDU3LCAweDAyLCAweDYwLCAweGZmLCAweDU0LCAKKyAgICAweGYwLCAweGM0LCAweGE1LCAweGZmLCAweGM0LCAweGE1LCAweDRmLCAweDc1LCAweDJmLCAweDkwLCAweDEyLCAweDczLCAweDM1LCAweGY1LCAweDJmLCAweDEyLCAKKyAgICAweDczLCAweDM1LCAweDIyLCAweGNhLCAweDE5LCAweDVlLCAweDIwLCAweDA3LCAweDRjLCAweGEyLCAweDdlLCAweDc0LCAweDJjLCAweDJkLCAweGNhLCAweDc5LCAKKyAgICAweDdhLCAweDc5LCAweGEwLCAweDBiLCAweDc0LCAweDdhLCAweDc5LCAweGIwLCAweDBiLCAweDc0LCAweGRhLCAweDc5LCAweDdlLCAweDMwLCAweDAyLCAweDdlLCAKKyAgICAweDY0LCAweDAwLCAweDAyLCAweDAyLCAweDYxLCAweDVlLCAweGNhLCAweDE5LCAweDVlLCAweDIwLCAweDA3LCAweDRjLCAweGEyLCAweDdlLCAweDc0LCAweDJjLCAKKyAgICAweDJkLCAweGNhLCAweDc5LCAweDdhLCAweDc5LCAweGEwLCAweDBiLCAweDc0LCAweDdhLCAweDc5LCAweGIwLCAweDBiLCAweDc0LCAweDdhLCAweDc5LCAweDYwLCAKKyAgICAweDBiLCAweDc0LCAweGRhLCAweDc5LCAweDdlLCAweDMwLCAweDAzLCAweDdlLCAweDY0LCAweDAwLCAweDAzLCAweDAyLCAweDYxLCAweDVlLCAweGQyLCAweDA0LCAKKyAgICAweDdlLCAweDI3LCAweDAxLCAweGNiLCAweDJkLCAweDI2LCAweGJlLCAweDI0LCAweDA0LCAweDAwLCAweDM4LCAweDJlLCAweDdlLCAweDA3LCAweDAxLCAweGM5LCAKKyAgICAweDdlLCAweDQ0LCAweDI4LCAweDJkLCAweDdlLCAweDc5LCAweGEwLCAweDdhLCAweDA5LCAweGEwLCAweDBiLCAweDA0LCAweDBiLCAweDc0LCAweGJkLCAweDA0LCAKKyAgICAweDY4LCAweDIzLCAweGE1LCAweGRiLCAweGVmLCAweDdhLCAweDI3LCAweDAxLCAweGNiLCAweDdlLCAweDI1LCAweDMwLCAweDJkLCAweDI2LCAweDdhLCAweDI1LCAKKyAgICAweDMwLCAweDdhLCAweDA3LCAweDAxLCAweGM5LCAweGRhLCAweDE5LCAweGMyLCAweGQ3LCAweDIyLCAweDc1LCAweDJmLCAweDlhLCAweDEyLCAweDczLCAweDM1LCAKKyAgICAweGRhLCAweDE5LCAweGQyLCAweGQ3LCAweDIyLCAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDgwLCAweGQ3LCAweDQ4LCAweGYxLCAweDQ2LCAweDY1LCAweDQ3LCAKKyAgICAweDVmLCAweDQ5LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ4LCAweDU2LCAweDQ1LCAweDJhLCAweDQ5LCAweDZlLCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ5LCAweDc1LCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDRjLCAweDFlLCAweDQ5LCAweDkyLCAweDRhLCAKKyAgICAweDhjLCAweDRjLCAweDU3LCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDRiLCAweDgzLCAweDQ1LCAweDJhLCAweDRjLCAweDliLCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDRjLCAweGEyLCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDRmLCAweDRiLCAweDRjLCAweGJmLCAweDRkLCAKKyAgICAweGI5LCAweDRmLCAweDg0LCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDRlLCAweGIwLCAweDQ1LCAweDJhLCAweDRmLCAweGM4LCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDRmLCAweGNmLCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDUyLCAweDc4LCAweDRmLCAweGVjLCAweDUwLCAKKyAgICAweGU2LCAweDUyLCAweGIxLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDUxLCAweGRkLCAweDQ1LCAweDJhLCAweDUyLCAweGY1LCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDUyLCAweGZjLCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDU1LCAweGE1LCAweDUzLCAweDE5LCAweDU0LCAKKyAgICAweDEzLCAweDU1LCAweGRlLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDU1LCAweDBhLCAweDQ1LCAweDJhLCAweDU2LCAweDIyLCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDU2LCAweDI5LCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDU4LCAweGQyLCAweDU2LCAweDQ2LCAweDU3LCAKKyAgICAweDQwLCAweDU5LCAweDBiLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDU4LCAweDM3LCAweDQ1LCAweDJhLCAweDU5LCAweDRmLCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDU5LCAweDU2LCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDViLCAweGZmLCAweDU5LCAweDczLCAweDVhLCAKKyAgICAweDZkLCAweDVjLCAweDM4LCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDViLCAweDY0LCAweDQ1LCAweDJhLCAweDVjLCAweDdjLCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDVjLCAweDgzLCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDVmLCAweDJjLCAweDVjLCAweGEwLCAweDVkLCAKKyAgICAweDlhLCAweDVmLCAweDY1LCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDVlLCAweDkxLCAweDQ1LCAweDJhLCAweDVmLCAweGE5LCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDVmLCAweGIwLCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAKKyAgICAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweDQ1LCAweDJhLCAweGNhLCAweGI4LCAweDc1LCAweDJmLCAweDAyLCAKKyAgICAweDEyLCAweDczLCAweDM1LCAweDdlLCAweGIzLCAweDkxLCAweDAzLCAweDIwLCAweGU1LCAweDIwLCAweDMwLCAweGUwLCAweDA1LCAweDEyLCAweDZiLCAweDA1LCAKKyAgICAweDgwLCAweDMwLCAweDMwLCAweGUxLCAweDA1LCAweDEyLCAweDY0LCAweDg2LCAweDgwLCAweDI4LCAweDMwLCAweGUyLCAweDA1LCAweDEyLCAweDYzLCAweGY1LCAKKyAgICAweDgwLCAweDIwLCAweDMwLCAweGUzLCAweDFkLCAweDEyLCAweDY1LCAweDYxLCAweDgwLCAweDE4LCAweDdlLCAweGIzLCAweDkxLCAweDA0LCAweDMwLCAweGUxLCAKKyAgICAweDAzLCAweDAyLCAweDY3LCAweDVmLCAweDMwLCAweGU2LCAweDA1LCAweDEyLCAweDZjLCAweDZhLCAweDgwLCAweDA2LCAweDIwLCAweGUyLCAweDAzLCAweDAyLCAKKyAgICAweDAwLCAweDgwLCAweGRhLCAweGI4LCAweDMyLCAweDc1LCAweDJmLCAweDEwLCAweDEyLCAweDczLCAweDM1LCAweGNhLCAweDBiLCAweGNhLCAweDM5LCAweGNhLCAKKyAgICAweDU5LCAweDc0LCAweDQwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDdlLCAweGIzLCAweDkxLCAweDFhLCAweDZjLCAweGFhLCAweGJlLCAweGIwLCAweDQwLCAKKyAgICAweDI4LCAweDBhLCAweDEyLCAweDY0LCAweDI0LCAweGRhLCAweDU5LCAweGRhLCAweDM5LCAweGRhLCAweDBiLCAweDIyLCAweDc0LCAweDIwLCAweDdhLCAweGIzLCAKKyAgICAweDkxLCAweDE0LCAweDgwLCAweGYxLCAweDdlLCAweDM3LCAweDAxLCAweGM1LCAweDJkLCAweDM1LCAweGJlLCAweDM0LCAweDA0LCAweDAwLCAweDM4LCAweDJmLCAKKyAgICAweDdhLCAweDM3LCAweDAxLCAweGM1LCAweDdlLCAweDM3LCAweDAxLCAweGMzLCAweDdkLCAweDQzLCAweDJkLCAweDQ1LCAweGJlLCAweDQ0LCAweDJjLCAweDJjLCAKKyAgICAweDM4LCAweDI1LCAweDdhLCAweDQ3LCAweDAxLCAweGMzLCAweDc1LCAweDJmLCAweDExLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweGIxLCAweDJmLCAweDEyLCAKKyAgICAweDczLCAweDM1LCAweDEyLCAweDY3LCAweDlmLCAweDc0LCAweDIwLCAweDdhLCAweGIzLCAweDkxLCAweDE0LCAweDEyLCAweDY2LCAweDMwLCAweDIyLCAweDc1LCAKKyAgICAweDJmLCAweDE2LCAweDEyLCAweDczLCAweDM1LCAweDgwLCAweGY0LCAweDc1LCAweDJmLCAweDEyLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweGIxLCAweDJmLCAKKyAgICAweDEyLCAweDczLCAweDM1LCAweDllLCAweDQ0LCAweDJjLCAweDJkLCAweDlkLCAweDU0LCAweDEyLCAweDY3LCAweDlmLCAweDdlLCAweDM0LCAweDI4LCAweDJkLCAKKyAgICAweDdkLCAweDU0LCAweDJkLCAweDQzLCAweDgwLCAweGJjLCAweDc1LCAweDJmLCAweDE4LCAweDEyLCAweDczLCAweDM1LCAweGNhLCAweDA5LCAweGNhLCAweDM5LCAKKyAgICAweGNhLCAweDJiLCAweDc0LCAweDIwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDdlLCAweDYzLCAweDkxLCAweDFhLCAweDc0LCAweDEwLCAweDdhLCAweGIzLCAKKyAgICAweDkxLCAweDE0LCAweDdlLCAweGIwLCAweDgwLCAweDljLCAweGI2LCAweDYwLCAweDM4LCAweDZjLCAweGFhLCAweDdlLCAweDM3LCAweDAxLCAweGNiLCAweDlkLCAKKyAgICAweDM1LCAweDQwLCAweDM3LCAweDdhLCAweDM3LCAweDAxLCAweGNiLCAweDdlLCAweDM3LCAweDAxLCAweGM3LCAweDdkLCAweDQzLCAweDJkLCAweDQ1LCAweGJlLCAKKyAgICAweDQ0LCAweDI4LCAweDJjLCAweDM4LCAweDNiLCAweDdhLCAweDQ3LCAweDAxLCAweGM3LCAweDdkLCAweDQ1LCAweDEyLCAweDY4LCAweGQ0LCAweDdlLCAweGIzLCAKKyAgICAweDkxLCAweDFlLCAweDIwLCAweGU1LCAweDEzLCAweDc1LCAweDJmLCAweDE5LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDkxLCAweDJmLCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweGRhLCAweDJiLCAweGRhLCAweDM5LCAweGRhLCAweDA5LCAweDIyLCAweDgwLCAweDM0LCAweDJkLCAweDUzLCAweDZkLCAweDMzLCAweDYwLCAweDAyLCAKKyAgICAweDgwLCAweGMxLCAweDdlLCAweDA0LCAweDI0LCAweDJkLCAweDdhLCAweDA3LCAweDAxLCAweGM5LCAweDdhLCAweDA3LCAweDAxLCAweGM3LCAweDgwLCAweGUxLCAKKyAgICAweGNhLCAweDU5LCAweDllLCAweDQ0LCAweDI4LCAweDJkLCAweDlkLCAweDU0LCAweDEyLCAweDY4LCAweGQ0LCAweDdlLCAweDM0LCAweDI0LCAweDJkLCAweDdkLCAKKyAgICAweDU0LCAweDJkLCAweDQzLCAweDdhLCAweDQ3LCAweDAxLCAweGM3LCAweDEyLCAweDY4LCAweGQ0LCAweGRhLCAweDQ5LCAweDgwLCAweGIwLCAweDdlLCAweDBmLCAKKyAgICAweDJjLCAweDNlLCAweDBiLCAweDBjLCAweDdhLCAweDBmLCAweDJjLCAweDNlLCAweDc0LCAweDIwLCAweDdhLCAweGIzLCAweDkxLCAweDFlLCAweDc0LCAweDYwLCAKKyAgICAweDdhLCAweGIzLCAweDkxLCAweDFjLCAweDc0LCAweDAyLCAweDdhLCAweGIzLCAweDkxLCAweDEyLCAweDgwLCAweGE1LCAweDdlLCAweDJmLCAweDJjLCAweDVlLCAKKyAgICAweDBiLCAweDJjLCAweDdhLCAweDJmLCAweDJjLCAweDVlLCAweDc0LCAweDIwLCAweDdhLCAweGIzLCAweDkxLCAweDFlLCAweDc0LCAweDYwLCAweDdhLCAweGIzLCAKKyAgICAweDkxLCAweDFjLCAweDc0LCAweDAyLCAweDdhLCAweGIzLCAweDkxLCAweDEyLCAweDgwLCAweDFmLCAweGRhLCAweDJiLCAweGRhLCAweDFiLCAweGRhLCAweDBiLCAKKyAgICAweDIyLCAweDc1LCAweDJmLCAweDI4LCAweDEyLCAweDczLCAweDM1LCAweGNhLCAweDBiLCAweGNhLCAweDFiLCAweGNhLCAweDJiLCAweDc0LCAweDYwLCAweDdhLCAKKyAgICAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDEwLCAweDdhLCAweGIzLCAweDkxLCAweDE0LCAweDdlLCAweGIzLCAweDkxLCAweDFhLCAweDcwLCAweGRiLCAweDdlLCAKKyAgICAweDBkLCAweDMwLCAweDdlLCAweDFkLCAweDM0LCAweDdlLCAweDJkLCAweDM4LCAweDdlLCAweDNkLCAweDNjLCAweDdlLCAweDg1LCAweDQwLCAweDdkLCAweDkwLCAKKyAgICAweDRkLCAweDkxLCAweDRkLCAweDkyLCAweDRkLCAweDkzLCAweDRkLCAweDk0LCAweDRkLCAweDk1LCAweDRkLCAweDk2LCAweDRkLCAweDk3LCAweDRkLCAweDk4LCAKKyAgICAweDY4LCAweGI4LCAweDdhLCAweDEzLCAweDkxLCAweDE3LCAweDdhLCAweDAzLCAweDkxLCAweDE3LCAweDdhLCAweDMzLCAweDkxLCAweDE3LCAweDdhLCAweDIzLCAKKyAgICAweDkxLCAweDE3LCAweDdhLCAweDUzLCAweDkxLCAweDE3LCAweDdhLCAweDQzLCAweDkxLCAweDE3LCAweDdhLCAweDczLCAweDkxLCAweDE3LCAweDdhLCAweDYzLCAKKyAgICAweDkxLCAweDE3LCAweDdhLCAweDkzLCAweDkxLCAweDE3LCAweDdhLCAweDgzLCAweDkxLCAweDE3LCAweDMwLCAweDczLCAweDIyLCAweDdhLCAweGIzLCAweDkxLCAKKyAgICAweDE3LCAweDdhLCAweGEzLCAweDkxLCAweDE3LCAweDdhLCAweGQzLCAweDkxLCAweDE3LCAweDdhLCAweGMzLCAweDkxLCAweDE3LCAweDdhLCAweGYzLCAweDkxLCAKKyAgICAweDE3LCAweDdhLCAweGUzLCAweDkxLCAweDE3LCAweDdkLCAweDc4LCAweDdhLCAweGYzLCAweDkxLCAweDE3LCAweDdhLCAweGUzLCAweDkxLCAweDE3LCAweDdlLCAKKyAgICAweGIzLCAweDkxLCAweDFlLCAweDMwLCAweGU1LCAweDAzLCAweDAyLCAweDY1LCAweDNjLCAweDc1LCAweDJmLCAweDI5LCAweDEyLCAweDczLCAweDM1LCAweDIwLCAKKyAgICAweDczLCAweDA4LCAweDc1LCAweDJmLCAweDBhLCAweDEyLCAweDczLCAweDM1LCAweDgwLCAweDA2LCAweDc1LCAweDJmLCAweDEyLCAweDEyLCAweDczLCAweDM1LCAKKyAgICAweDc0LCAweDgwLCAweDdhLCAweGIzLCAweDkxLCAweDFlLCAweDZkLCAweDAwLCAweDdkLCAweDEwLCAweDdhLCAweDBkLCAweDMwLCAweDdhLCAweDBkLCAweDM0LCAKKyAgICAweDdhLCAweDBkLCAweDM4LCAweDdhLCAweDBkLCAweDNjLCAweDdhLCAweDA1LCAweDQwLCAweGRhLCAweDJiLCAweGRhLCAweDFiLCAweGRhLCAweDBiLCAweDIyLCAKKyAgICAweDdlLCAweDM3LCAweDAxLCAweGM1LCAweDRkLCAweDMzLCAweDY4LCAweDNiLCAweDdlLCAweDA3LCAweDAxLCAweGMxLCAweDdlLCAweDU0LCAweDJjLCAweDJkLCAKKyAgICAweDlkLCAweDUwLCAweGJkLCAweDM1LCAweDQwLCAweDAyLCAweDdkLCAweDM1LCAweGNhLCAweDM5LCAweDdlLCAweDY1LCAweDRiLCAweDk5LCAweDY0LCAweGRhLCAKKyAgICAweDM5LCAweDdlLCAweDA3LCAweDAxLCAweGM1LCAweDlkLCAweDAzLCAweDdhLCAweDA3LCAweDAxLCAweGM1LCAweDJlLCAweDM3LCAweDAxLCAweGMxLCAweDdhLCAKKyAgICAweDM3LCAweDAxLCAweGMxLCAweGJlLCAweDM0LCAweDJjLCAweDJjLCAweDI4LCAweGM3LCAweDdlLCAweDM0LCAweDI4LCAweDJkLCAweDdhLCAweDM3LCAweDAxLCAKKyAgICAweGMxLCAweDgwLCAweGJkLCAweDIyLCAweDc1LCAweDJmLCAweDUzLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweDE1LCAweDRkLCAweDgwLCAweDExLCAweDc1LCAKKyAgICAweDJmLCAweDUxLCAweDEyLCAweDczLCAweDM1LCAweDBiLCAweDA4LCAweDEwLCAweDBiLCAweDA1LCAweDllLCAweDM0LCAweDAwLCAweDAyLCAweDI4LCAweDRkLCAKKyAgICAweDdjLCAweGIyLCAweDIwLCAweGU3LCAweDI3LCAweDU0LCAweDA3LCAweDIzLCAweDBhLCAweDJiLCAweDQ5LCAweDIyLCAweDM5LCAweDFlLCAweDdjLCAweGIyLCAKKyAgICAweDU0LCAweDc4LCAweDAzLCAweDAzLCAweDAzLCAweDdjLCAweDJiLCAweDlkLCAweDEzLCAweDQwLCAweDFhLCAweDY4LCAweDEyLCAweDdhLCAweDE1LCAweDRkLCAKKyAgICAweDdhLCAweDI1LCAweDRmLCAweDdlLCAweDY0LCAweDY3LCAweDA5LCAweDdhLCAweDY1LCAweDRiLCAweDg5LCAweDI0LCAweDAyLCAweDY3LCAweDE3LCAweDdlLCAKKyAgICAweDY0LCAweDY2LCAweDdmLCAweDgwLCAweGYyLCAweDJkLCAweDEzLCAweDlkLCAweDMxLCAweGNhLCAweDM5LCAweDdkLCAweDMxLCAweDJkLCAweDEwLCAweGNhLCAKKyAgICAweDE5LCAweGNhLCAweDI5LCAweDk5LCAweDI0LCAweGRhLCAweDI5LCAweGRhLCAweDA5LCAweGRhLCAweDM5LCAweDgwLCAweGEyLCAweDdhLCAweDE1LCAweDRkLCAKKyAgICAweDdlLCAweDY0LCAweDY2LCAweGY1LCAweDRkLCAweDMzLCAweDc4LCAweDA5LCAweDdjLCAweGIyLCAweDIwLCAweGU3LCAweDJhLCAweDdlLCAweDY0LCAweDY2LCAKKyAgICAweDc0LCAweDdhLCAweDY1LCAweDRiLCAweDIyLCAweDc1LCAweDJmLCAweDUyLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweDIxLCAweDRkLCAweDdlLCAweDA5LCAKKyAgICAweDMwLCAweDBiLCAweDA0LCAweDFiLCAweDM0LCAweDc4LCAweDg5LCAweDgwLCAweGQ0LCAweDc1LCAweDJmLCAweDU0LCAweDEyLCAweDczLCAweDM1LCAweDdlLCAKKyAgICAweDE1LCAweDRkLCAweDdlLCAweDI1LCAweDRmLCAweDgwLCAweDkwLCAweDVlLCAweDIwLCAweDA3LCAweDU0LCAweDc4LCAweDdlLCAweDQ0LCAweDY3LCAweDdkLCAKKyAgICAweDMwLCAweGU2LCAweDE2LCAweDRkLCAweDMzLCAweDY4LCAweDI2LCAweDFiLCAweDM0LCAweDdlLCAweDA5LCAweDQwLCAweDBiLCAweDA0LCAweDdlLCAweDQ0LCAKKyAgICAweDM0LCAweGZhLCAweDIwLCAweGUzLCAweDA0LCAweDdlLCAweDQ0LCAweDY3LCAweDg1LCAweGNhLCAweDA5LCAweGNhLCAweDM5LCAweDk5LCAweDQ0LCAweGRhLCAKKyAgICAweDM5LCAweGRhLCAweDA5LCAweDdlLCAweDY0LCAweDY2LCAweDdmLCAweDRkLCAweDMzLCAweDY4LCAweGE2LCAweDg5LCAweDY0LCAweDdhLCAweDE1LCAweDRkLCAKKyAgICAweGY1LCAweDRmLCAweDdlLCAweDY0LCAweDY3LCAweDU4LCAweDgwLCAweDk5LCAweDdlLCAweDE1LCAweDRkLCAweGU1LCAweDRmLCAweDgwLCAweGM0LCAweGMwLCAKKyAgICAweGQwLCAweGMwLCAweGQxLCAweGMwLCAweGUwLCAweGNhLCAweDE5LCAweDc1LCAweDJmLCAweGZlLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweDE0LCAweDAwLCAKKyAgICAweDUzLCAweDAyLCAweDQwLCAweDUyLCAweGRhLCAweDE5LCAweGQwLCAweGUwLCAweGQwLCAweGQxLCAweGQwLCAweGQwLCAweDMyLCAweDAzLCAweGE1LCAweGNiLCAKKyAgICAweDE5LCAweGIxLCAweDgwLCAweDAwLCAweDIyLCAweDIyLCAweDdlLCAweDI0LCAweDAwLCAweDAwLCAweDdmLCAweGUxLCAweDdlLCAweGEwLCAweDAyLCAweGE0LCAKKyAgICAweDdlLCAweDA0LCAweDY4LCAweGIxLCAweDlkLCAweDA1LCAweDdlLCAweGIwLCAweDI4LCAweDdhLCAweGIzLCAweDk1LCAweDAwLCAweDg5LCAweDA0LCAweGNhLCAKKyAgICAweDI5LCAweGI0LCAweDgwLCAweGUyLCAweDdlLCAweDI0LCAweDAwLCAweDAwLCAweDdmLCAweGUxLCAweDdlLCAweDAwLCAweDI4LCAweDdhLCAweDAzLCAweDk1LCAKKyAgICAweDAwLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAKKyAgICAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAKKyAgICAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAKKyAgICAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAKKyAgICAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAKKyAgICAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAKKyAgICAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAKKyAgICAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAKKyAgICAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAKKyAgICAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAKKyAgICAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAKKyAgICAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAKKyAgICAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAKKyAgICAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAKKyAgICAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAKKyAgICAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAKKyAgICAweGEzLCAweDdlLCAweDAwLCAweDAwLCAweDdhLCAweDAzLCAweDk1LCAweDAwLCAweGRhLCAweDI5LCAweDIyLCAweDdlLCAweDI0LCAweDAwLCAweDAwLCAweDdmLCAKKyAgICAweGUxLCAweDdlLCAweGEwLCAweDAyLCAweGE0LCAweDdlLCAweDA0LCAweDY5LCAweGU2LCAweDlkLCAweDA1LCAweDdlLCAweGIwLCAweDM4LCAweDdhLCAweGIzLCAKKyAgICAweDk1LCAweDAwLCAweDg5LCAweDA0LCAweGNhLCAweDI5LCAweGI0LCAweDgwLCAweGUyLCAweDdlLCAweDI0LCAweDAwLCAweDAwLCAweDdmLCAweGUxLCAweDdlLCAKKyAgICAweDAwLCAweDM4LCAweDdhLCAweDAzLCAweDk1LCAweDAwLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweDdlLCAweDAwLCAweDAwLCAweDdhLCAweDAzLCAweDk1LCAweDAwLCAweGRhLCAweDI5LCAweDIyLCAKKyAgICAweGNhLCAweDI5LCAweGNhLCAweDE5LCAweGNhLCAweDU4LCAweDdlLCAweDI0LCAweDAwLCAweDAwLCAweDdmLCAweGUxLCAweGRhLCAweDU4LCAweDdlLCAweDU0LCAKKyAgICAweDAyLCAweDIwLCAweDljLCAweGI1LCAweGE0LCAweDdlLCAweDUwLCAweDMwLCAweDVlLCAweDIwLCAweDA3LCAweDJjLCAweDUyLCAweDdhLCAweDUzLCAweDk1LCAKKyAgICAweDAwLCAweDJlLCAweDU0LCAweDZhLCAweDE3LCAweDg5LCAweDU0LCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAKKyAgICAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAKKyAgICAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAKKyAgICAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAKKyAgICAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweDdlLCAweDAwLCAweDAwLCAweDdhLCAweDAzLCAweDk1LCAweDAwLCAweGRhLCAweDE5LCAKKyAgICAweGRhLCAweDI5LCAweDIyLCAweGNhLCAweDE5LCAweGNhLCAweDU4LCAweDdlLCAweDI0LCAweDAwLCAweDAwLCAweDdmLCAweGUxLCAweGRhLCAweDU4LCAweDdlLCAKKyAgICAweDU0LCAweDAyLCAweDM4LCAweDljLCAweGI1LCAweGE0LCAweDdlLCAweDUwLCAweDIwLCAweDVlLCAweDIwLCAweDA3LCAweDJjLCAweDUyLCAweDdhLCAweDUzLCAKKyAgICAweDk1LCAweDAwLCAweDJlLCAweDU0LCAweDZhLCAweDg4LCAweDg5LCAweDU0LCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAKKyAgICAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweGUwLCAweGEzLCAweDdlLCAweDAwLCAweDAwLCAweDdhLCAweDAzLCAweDk1LCAweDAwLCAweGRhLCAKKyAgICAweDE5LCAweDIyLCAweDAyLCAweDZiLCAweGE4LCAweGNhLCAweDBiLCAweGNhLCAweDFiLCAweGNhLCAweDJiLCAweGNhLCAweDNiLCAweGNhLCAweDRiLCAweGNhLCAKKyAgICAweDViLCAweGNhLCAweDZiLCAweGNhLCAweDdiLCAweGNhLCAweGViLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDdlLCAweGIzLCAweDJjLCAKKyAgICAweDdmLCAweGI0LCAweDAwLCAweDAyLCAweDgwLCAweDFjLCAweGI0LCAweDAxLCAweDE5LCAweDdlLCAweGIzLCAweDkxLCAweDE0LCAweDU0LCAweDE0LCAweDY4LCAKKyAgICAweDA1LCAweDEyLCAweDZiLCAweDZjLCAweDgwLCAweDIzLCAweDdlLCAweGIzLCAweDkxLCAweDE0LCAweDMwLCAweGU1LCAweDFjLCAweDEyLCAweDZjLCAweGFhLCAKKyAgICAweDgwLCAweDE3LCAweDdlLCAweGIzLCAweDkxLCAweDE0LCAweDMwLCAweGU1LCAweDA1LCAweDEyLCAweDZjLCAweGFhLCAweDgwLCAweDBiLCAweDdlLCAweGIzLCAKKyAgICAweDkxLCAweDE0LCAweDU0LCAweDE0LCAweDY4LCAweDAzLCAweDEyLCAweDZiLCAweDZjLCAweGRhLCAweGViLCAweGRhLCAweDdiLCAweGRhLCAweDZiLCAweGRhLCAKKyAgICAweDViLCAweGRhLCAweDRiLCAweGRhLCAweDNiLCAweGRhLCAweDJiLCAweGRhLCAweDFiLCAweGRhLCAweDBiLCAweDIyLCAweDIwLCAweGU0LCAweDE5LCAweDc1LCAKKyAgICAweDJmLCAweDBhLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweGIzLCAweDJjLCAweDdlLCAweDcwLCAweDBhLCAweDdlLCAweGIzLCAweDJjLCAweDdmLCAweGI0LCAKKyAgICAweDAxLCAweDFmLCAweDAyLCAweDZjLCAweDA0LCAweDAyLCAweDcxLCAweGYyLCAweDc1LCAweDJmLCAweDBiLCAweDEyLCAweDczLCAweDM1LCAweDc0LCAweDE0LCAKKyAgICAweDdhLCAweGIzLCAweDkxLCAweDE0LCAweDdlLCAweGIzLCAweDJjLCAweDdmLCAweGI0LCAweDAyLCAweDBjLCAweDEyLCAweDZiLCAweGI0LCAweDAyLCAweDZiLCAKKyAgICAweGE4LCAweDc0LCAweDA0LCAweDdhLCAweGIzLCAweDkxLCAweDE0LCAweDIyLCAweDdlLCAweDAwLCAweDAwLCAweDdhLCAweDAzLCAweDJjLCAweDdmLCAweDdhLCAKKyAgICAweDAzLCAweDJjLCAweDgwLCAweDIyLCAweDdlLCAweGIzLCAweDJjLCAweDc2LCAweDU0LCAweDYwLCAweDYwLCAweDA1LCAweGI0LCAweDQwLCAweDFlLCAweDgwLCAKKyAgICAweDFjLCAweDdlLCAweGIzLCAweDJjLCAweDc3LCAweGI0LCAweDA1LCAweDE1LCAweDc1LCAweDJmLCAweDcxLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweGIzLCAKKyAgICAweDJjLCAweDc5LCAweDdlLCAweGEwLCAweDAxLCAweDdhLCAweGEzLCAweDkxLCAweDA2LCAweDdhLCAweGIzLCAweDkxLCAweDA3LCAweDIyLCAweDc0LCAweDAwLCAKKyAgICAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDEwLCAweDdhLCAweGIzLCAweDkxLCAweDEyLCAweDIyLCAweGJlLCAweDU3LCAweDJjLCAweDdjLCAweDI4LCAKKyAgICAweDA0LCAweDdlLCAweDU3LCAweDJjLCAweDdjLCAweDdhLCAweDBmLCAweDJjLCAweDgyLCAweDdhLCAweDU3LCAweDJjLCAweDg2LCAweDc0LCAweDEwLCAweDdhLCAKKyAgICAweGIzLCAweDkxLCAweDEyLCAweDIyLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDdlLCAweGIzLCAweDkxLCAweDFhLCAweDcwLCAweDUzLCAKKyAgICAweDdlLCAweGIzLCAweDkxLCAweDE0LCAweDIwLCAweGU0LCAweDRjLCAweDdlLCAweGVmLCAweDJjLCAweDgyLCAweDdlLCAweGY3LCAweDJjLCAweDg2LCAweDdlLCAKKyAgICAweDA3LCAweDJjLCAweDg2LCAweDRkLCAweDAwLCAweDY4LCAweDIxLCAweDdlLCAweDAwLCAweDAwLCAweGUwLCAweDdhLCAweGIzLCAweDkxLCAweDE3LCAweGEzLCAKKyAgICAweGE1LCAweDA4LCAweDFiLCAweGY0LCAweDY4LCAweDA2LCAweGE1LCAweGI4LCAweDEwLCAweGYwLCAweDgwLCAweDE5LCAweDdlLCAweGIwLCAweDAwLCAweDdhLCAKKyAgICAweGIzLCAweDJjLCAweDdmLCAweGJlLCAweDAwLCAweDEwLCAweDY4LCAweDBkLCAweDdlLCAweGIwLCAweDAwLCAweDdhLCAweGIzLCAweDJjLCAweDdmLCAweDc0LCAKKyAgICAweDgwLCAweDdhLCAweGIzLCAweDkxLCAweDFlLCAweDdhLCAweGVmLCAweDJjLCAweDgyLCAweDdhLCAweGY3LCAweDJjLCAweDg2LCAweDc1LCAweDJmLCAweDA2LCAKKyAgICAweDEyLCAweDczLCAweDM1LCAweDc0LCAweDA0LCAweDdhLCAweGIzLCAweDkxLCAweDE0LCAweDIyLCAweGNhLCAweDBiLCAweGNhLCAweDFiLCAweGNhLCAweDJiLCAKKyAgICAweGNhLCAweDNiLCAweGNhLCAweDRiLCAweGNhLCAweDViLCAweGNhLCAweDZiLCAweGNhLCAweDdiLCAweGNhLCAweGViLCAweDc1LCAweDJmLCAweDAzLCAweDEyLCAKKyAgICAweDczLCAweDM1LCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDJjLCAweDdlLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDAxLCAKKyAgICAweDdhLCAweGIzLCAweDkxLCAweDEyLCAweDEyLCAweDZkLCAweDE5LCAweGRhLCAweGViLCAweGRhLCAweDdiLCAweGRhLCAweDZiLCAweGRhLCAweDViLCAweGRhLCAKKyAgICAweDRiLCAweGRhLCAweDNiLCAweGRhLCAweDJiLCAweGRhLCAweDFiLCAweGRhLCAweDBiLCAweDIyLCAweDc1LCAweDJmLCAweDAzLCAweDEyLCAweDczLCAweDM1LCAKKyAgICAweDdlLCAweGIzLCAweDJjLCAweDgwLCAweGI0LCAweDAyLCAweDExLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDJjLCAweDgwLCAweDdhLCAweGIzLCAweDJjLCAKKyAgICAweDdmLCAweDc0LCAweDIwLCAweDdhLCAweGIzLCAweDkxLCAweDE0LCAweDIyLCAweGI0LCAweDAxLCAweDQ2LCAweDdlLCAweGIzLCAweDkxLCAweDA0LCAweDIwLCAKKyAgICAweGU2LCAweDQyLCAweDdlLCAweDIzLCAweDkxLCAweDFhLCAweDdjLCAweDMyLCAweDdlLCAweDEzLCAweDJjLCAweDgxLCAweDJjLCAweDIxLCAweDdhLCAweDIzLCAKKyAgICAweDJjLCAweDgxLCAweDdlLCAweDAwLCAweDAwLCAweDJlLCAweDA0LCAweDJjLCAweDg4LCAweDdlLCAweGIzLCAweDkxLCAweDE2LCAweDdhLCAweDA5LCAweGIwLCAKKyAgICAweDBiLCAweDA0LCAweGE1LCAweGRiLCAweGY0LCAweDc0LCAweDIwLCAweDdhLCAweGIzLCAweDkxLCAweDE0LCAweDc1LCAweDJmLCAweDcwLCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweDdlLCAweGIzLCAweDJjLCAweDgxLCAweDdlLCAweGEzLCAweDJjLCAweDdkLCAweGJjLCAweGFiLCAweDc4LCAweDAzLCAweDEyLCAweDZkLCAweGI5LCAKKyAgICAweDIyLCAweDAyLCAweDcxLCAweGYyLCAweGRhLCAweDU5LCAweDAyLCAweDZjLCAweDdjLCAweDc0LCAweGUwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDdlLCAKKyAgICAweDAzLCAweDkxLCAweDEwLCAweDdlLCAweDEzLCAweDkxLCAweDExLCAweDdlLCAweDMzLCAweDkxLCAweDEyLCAweDdlLCAweDIzLCAweDkxLCAweDEzLCAweDdlLCAKKyAgICAweDUzLCAweDkxLCAweDE0LCAweDdlLCAweDQzLCAweDkxLCAweDE1LCAweDdlLCAweDczLCAweDkxLCAweDE2LCAweDdlLCAweDYzLCAweDkxLCAweDE3LCAweDdhLCAKKyAgICAweDBmLCAweDJjLCAweDc2LCAweDdhLCAweDFmLCAweDJjLCAweDdhLCAweDc1LCAweDJmLCAweDA0LCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDAxLCAweDJmLCAKKyAgICAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDExLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDIxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAKKyAgICAweDMxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDQxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDUxLCAweDJmLCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweDdhLCAweDYxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDcxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDc0LCAweDAwLCAweDdhLCAKKyAgICAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDQwLCAweDdhLCAweGIzLCAweDkxLCAweDA0LCAweDEyLCAweDZkLCAweDhkLCAweDIyLCAweDZkLCAweDAwLCAweDdlLCAKKyAgICAweDE0LCAweDAxLCAweDAyLCAweDdhLCAweDA3LCAweDJjLCAweDg2LCAweDdhLCAweDAzLCAweDJjLCAweDgxLCAweDdlLCAweGIzLCAweDJjLCAweDc2LCAweDIwLCAKKyAgICAweGU3LCAweDBmLCAweDdhLCAweDIzLCAweDJjLCAweDgwLCAweDdhLCAweDMzLCAweDJjLCAweDdmLCAweGJlLCAweDA3LCAweDJjLCAweDdjLCAweDY4LCAweDA5LCAKKyAgICAweDIyLCAweDdhLCAweDMzLCAweDJjLCAweDgwLCAweDdhLCAweDIzLCAweDJjLCAweDdmLCAweDdlLCAweGIzLCAweDJjLCAweDc2LCAweDU0LCAweGUzLCAweDIzLCAKKyAgICAweDIzLCAweDMwLCAweGUwLCAweDAyLCAweGQyLCAweGU1LCAweDMwLCAweGU3LCAweDAyLCAweGQyLCAweGU0LCAweDMwLCAweGU1LCAweDA2LCAweDMwLCAweGU0LCAKKyAgICAweDAzLCAweDAyLCAweDcxLCAweGYyLCAweDU0LCAweDNlLCAweGY1LCAweGYwLCAweDAzLCAweDU0LCAweDFmLCAweGMzLCAweDI1LCAweGYwLCAweDkwLCAweDZkLCAKKyAgICAweGU1LCAweDc1LCAweDg0LCAweGZmLCAweDczLCAweDAyLCAweDZmLCAweGEwLCAweDAyLCAweDZlLCAweDJkLCAweDAyLCAweDcwLCAweDM5LCAweDAyLCAweDcwLCAKKyAgICAweDU0LCAweDAyLCAweDZmLCAweDM3LCAweDAyLCAweDZlLCAweGMyLCAweDAyLCAweDcwLCAweDg1LCAweDAyLCAweDcwLCAweDg1LCAweDAyLCAweDcwLCAweDg4LCAKKyAgICAweDAyLCAweDcwLCAweDg4LCAweDAyLCAweDcwLCAweDg4LCAweDAyLCAweDcwLCAweDg4LCAweDAyLCAweDcwLCAweDg4LCAweDAyLCAweDcwLCAweDg4LCAweDAyLCAKKyAgICAweDcwLCAweDg4LCAweDAyLCAweDcwLCAweDg4LCAweDAyLCAweDcwLCAweDhlLCAweDAyLCAweDcxLCAweDYwLCAweDAyLCAweDcwLCAweDhiLCAweDAyLCAweDcwLCAKKyAgICAweDhiLCAweDAyLCAweDcwLCAweDhiLCAweDAyLCAweDcwLCAweDhiLCAweDAyLCAweDcwLCAweDhiLCAweDAyLCAweDcwLCAweDhiLCAweDc0LCAweDAwLCAweDdhLCAKKyAgICAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDYwLCAweDdhLCAweGIzLCAweDkxLCAweDFjLCAweDdlLCAweGIzLCAweDJjLCAweDc3LCAweGI0LCAweDA2LCAweDJhLCAKKyAgICAweDdlLCAweGIzLCAweDJjLCAweDc4LCAweDYwLCAweDc5LCAweDdjLCAweDBiLCAweDdlLCAweDEzLCAweDJjLCAweDc5LCAweDdlLCAweDE3LCAweDJjLCAweDdhLCAKKyAgICAweDc1LCAweDJmLCAweDcyLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDAxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDExLCAweDJmLCAweDEyLCAKKyAgICAweDczLCAweDM1LCAweDEyLCAweDcyLCAweDM3LCAweDQwLCAweDU4LCAweDAyLCAweDZiLCAweGViLCAweGI0LCAweDA4LCAweDFjLCAweDc1LCAweDJmLCAweDc0LCAKKyAgICAweDEyLCAweDczLCAweDM1LCAweDdlLCAweGIzLCAweDNmLCAweGYxLCAweDdlLCAweDA4LCAweDJjLCAweDg4LCAweDdhLCAweDBjLCAweDAwLCAweDAwLCAweDdhLCAKKyAgICAweDBiLCAweGIwLCAweDdlLCAweDU0LCAweDAwLCAweDAxLCAweDAyLCAweDZiLCAweGViLCAweGI0LCAweDAwLCAweDMzLCAweDc1LCAweDJmLCAweDc1LCAweDEyLCAKKyAgICAweDczLCAweDM1LCAweDdlLCAweDA4LCAweDJjLCAweDg4LCAweDdhLCAweDBjLCAweDAwLCAweDAwLCAweGNhLCAweDBiLCAweDdlLCAweGIzLCAweDNmLCAweGYyLCAKKyAgICAweDMwLCAweGUwLCAweDA3LCAweDc0LCAweDAyLCAweDdhLCAweDBiLCAweGIwLCAweDgwLCAweDA1LCAweDc0LCAweDAwLCAweDdhLCAweDBiLCAweGIwLCAweDBiLCAKKyAgICAweDE0LCAweDc0LCAweDAwLCAweDdhLCAweDBiLCAweGIwLCAweDdlLCAweDU0LCAweDAwLCAweDAyLCAweGRhLCAweDBiLCAweDAyLCAweDZiLCAweGViLCAweDAyLCAKKyAgICAweDcxLCAweGYyLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDYwLCAweDdhLCAweGIzLCAweDkxLCAweDFjLCAweDdlLCAweGIzLCAKKyAgICAweDJjLCAweDc3LCAweGI0LCAweDAwLCAweDVmLCAweDc1LCAweDJmLCAweDc2LCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweGIzLCAweDJjLCAweDdiLCAweDU0LCAKKyAgICAweDBmLCAweGI0LCAweDAyLCAweDA1LCAweDdlLCAweGIwLCAweDYwLCAweDgwLCAweDE3LCAweGI0LCAweDAwLCAweDA1LCAweDdlLCAweGIwLCAweDAwLCAweDgwLCAKKyAgICAweDBmLCAweDdlLCAweGIzLCAweDJjLCAweDdiLCAweDIwLCAweGU3LCAweDA1LCAweDdlLCAweGIwLCAweDQwLCAweDgwLCAweDAzLCAweDdlLCAweGIwLCAweDIwLCAKKyAgICAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDdlLCAweGIzLCAweDkxLCAweDExLCAweDMwLCAweGUwLCAweDA0LCAweDc0LCAweDAxLCAweDgwLCAweDAyLCAweDc0LCAKKyAgICAweDAwLCAweDdlLCAweDA4LCAweDJjLCAweDg4LCAweDdhLCAweDBjLCAweDAwLCAweDAwLCAweGNhLCAweDBiLCAweDdhLCAweDBiLCAweGIwLCAweDBiLCAweDE0LCAKKyAgICAweDc0LCAweDAwLCAweDdhLCAweDBiLCAweGIwLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDdlLCAweDU0LCAweDAwLCAweDAyLCAweGRhLCAKKyAgICAweDBiLCAweDAyLCAweDZiLCAweGViLCAweDAyLCAweDcxLCAweGYyLCAweDdlLCAweGIzLCAweDJjLCAweDdiLCAweDU0LCAweDBmLCAweGI0LCAweDAyLCAweDA1LCAKKyAgICAweDdlLCAweGIwLCAweDYwLCAweDgwLCAweDE3LCAweGI0LCAweDAwLCAweDA1LCAweDdlLCAweGIwLCAweDAwLCAweDgwLCAweDBmLCAweDdlLCAweGIzLCAweDJjLCAKKyAgICAweDdiLCAweDIwLCAweGU3LCAweDA1LCAweDdlLCAweGIwLCAweDQwLCAweDgwLCAweDAzLCAweDdlLCAweGIwLCAweDIwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAKKyAgICAweDdlLCAweGIzLCAweDJjLCAweDc5LCAweGI0LCAweDAwLCAweDI2LCAweDdlLCAweGIzLCAweDJjLCAweDc3LCAweGI0LCAweDAxLCAweDBlLCAweDc1LCAweDJmLCAKKyAgICAweDc3LCAweDEyLCAweDczLCAweDM1LCAweDc0LCAweDAxLCAweDdhLCAweGIzLCAweDkxLCAweDEyLCAweDgwLCAweDFiLCAweGI0LCAweDAzLCAweDBlLCAweDc1LCAKKyAgICAweDJmLCAweDc4LCAweDEyLCAweDczLCAweDM1LCAweDc0LCAweDAxLCAweDdhLCAweGIzLCAweDkxLCAweDExLCAweDgwLCAweDBhLCAweDc0LCAweDAwLCAweDdhLCAKKyAgICAweGIzLCAweDkxLCAweDAwLCAweDEyLCAweDcxLCAweGYyLCAweDIyLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDAyLCAweDZiLCAweGRlLCAKKyAgICAweDdlLCAweGIzLCAweDJjLCAweDc3LCAweGI0LCAweDA5LCAweDFmLCAweDc1LCAweDJmLCAweDc5LCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweGIzLCAweDJjLCAKKyAgICAweDc5LCAweGJlLCAweGIzLCAweDNmLCAweGYxLCAweDY4LCAweDBkLCAweGNhLCAweGI4LCAweDEyLCAweDQzLCAweDc5LCAweGRhLCAweGI4LCAweDUwLCAweDc2LCAKKyAgICAweDdhLCAweGIzLCAweDNmLCAweGYxLCAweDgwLCAweDZkLCAweGI0LCAweDA1LCAweDA4LCAweDc1LCAweDJmLCAweDdhLCAweDEyLCAweDczLCAweDM1LCAweDgwLCAKKyAgICAweDYyLCAweGI0LCAweDAzLCAweDE5LCAweDc1LCAweDJmLCAweDdiLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweGIzLCAweDJjLCAweDc5LCAweGI0LCAweDAxLCAKKyAgICAweDU1LCAweDdlLCAweGIzLCAweDNmLCAweGYyLCAweDQ0LCAweDAxLCAweDdhLCAweGIzLCAweDNmLCAweGYyLCAweDgwLCAweDQ2LCAweGI0LCAweDAxLCAweDE5LCAKKyAgICAweDc1LCAweDJmLCAweDdjLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweGIzLCAweDJjLCAweDc5LCAweGI0LCAweDAxLCAweDM5LCAweDdlLCAweGIzLCAweDNmLCAKKyAgICAweGYyLCAweDU0LCAweGZlLCAweDdhLCAweGIzLCAweDNmLCAweGYyLCAweDgwLCAweDJhLCAweGI0LCAweDA3LCAweDJhLCAweDdlLCAweGIzLCAweDJjLCAweDc4LCAKKyAgICAweDYwLCAweDI0LCAweDdjLCAweDBiLCAweDdlLCAweDEzLCAweDJjLCAweDc5LCAweDdlLCAweDE3LCAweDJjLCAweDdhLCAweDc1LCAweDJmLCAweDczLCAweDEyLCAKKyAgICAweDczLCAweDM1LCAweDdhLCAweDAxLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDExLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDEyLCAweDcyLCAKKyAgICAweDcxLCAweDQwLCAweDAzLCAweDAyLCAweDZiLCAweGRlLCAweDAyLCAweDcxLCAweGYyLCAweDdlLCAweGIzLCAweDJjLCAweDc3LCAweGI0LCAweDBiLCAweGY2LCAKKyAgICAweDc1LCAweDJmLCAweDdkLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweGIzLCAweDJjLCAweDc5LCAweDdlLCAweGEzLCAweDJjLCAweDdiLCAweDRjLCAweGFiLCAKKyAgICAweDc4LCAweGU0LCAweDgwLCAweGRmLCAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDYwLCAweDdhLCAweGIzLCAweDkxLCAweDFjLCAKKyAgICAweDdlLCAweGIzLCAweDJjLCAweDc3LCAweGI0LCAweDBhLCAweGNmLCAweDc1LCAweDJmLCAweDdlLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweGIzLCAweDJjLCAKKyAgICAweDc5LCAweDcwLCAweGMzLCAweDdlLCAweDA4LCAweDJjLCAweDg4LCAweDdhLCAweDBjLCAweDAwLCAweDAwLCAweDdhLCAweDBiLCAweGIwLCAweDdlLCAweDU0LCAKKyAgICAweDAwLCAweDAxLCAweDAyLCAweDZiLCAweGViLCAweDAyLCAweDcxLCAweGYyLCAweDAyLCAweDcxLCAweGYyLCAweDAyLCAweDcxLCAweGYyLCAweDdlLCAweGIzLCAKKyAgICAweDJjLCAweDc3LCAweGI0LCAweDA0LCAweDIwLCAweDc1LCAweDJmLCAweGMzLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweDA0LCAweDAwLCAweDAxLCAweDdlLCAKKyAgICAweDE3LCAweDJjLCAweDc4LCAweDdlLCAweDE4LCAweDJjLCAweDg4LCAweDdhLCAweDFjLCAweDAwLCAweDAwLCAweDdlLCAweDQ3LCAweDJjLCAweDdjLCAweDEyLCAKKyAgICAweDczLCAweDQxLCAweDAyLCAweDcxLCAweDVhLCAweGI0LCAweDA2LCAweDQyLCAweDc1LCAweDJmLCAweGMxLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweDU4LCAKKyAgICAweDAwLCAweDAwLCAweDdhLCAweDVjLCAweDAwLCAweGZlLCAweDdkLCAweGNhLCAweDdlLCAweGQ3LCAweDJjLCAweDc4LCAweDdlLCAweDc4LCAweDJjLCAweDg4LCAKKyAgICAweDdhLCAweDdjLCAweDAwLCAweDAwLCAweDdlLCAweDc3LCAweDJjLCAweDdjLCAweDc1LCAweDJmLCAweGMxLCAweDEyLCAweDczLCAweDM1LCAweGMwLCAweGE4LCAKKyAgICAweGMyLCAweGFmLCAweDdlLCAweDQwLCAweDAxLCAweDdhLCAweDQzLCAweDk0LCAweDAwLCAweDEyLCAweDczLCAweDdhLCAweDdlLCAweDQzLCAweDJjLCAweDM1LCAKKyAgICAweDdhLCAweDQzLCAweDk0LCAweDAwLCAweGQwLCAweGE4LCAweDQwLCAweDY1LCAweDgwLCAweDYwLCAweGI0LCAweDAwLCAweDI0LCAweGMyLCAweGFmLCAweDdlLCAKKyAgICAweGIwLCAweDAxLCAweDdhLCAweGIzLCAweDk0LCAweDAwLCAweDdhLCAweGIzLCAweDJjLCAweDM1LCAweDEyLCAweDZiLCAweGRlLCAweGU0LCAweDhkLCAweGVmLCAKKyAgICAweDhkLCAweGVmLCAweDhkLCAweGVmLCAweGQ1LCAweGUwLCAweGY3LCAweGMwLCAweGQxLCAweGNhLCAweDAyLCAweGZmLCAweGNhLCAweDA2LCAweDAwLCAweDAwLCAKKyAgICAweDMyLCAweGI0LCAweDA5LCAweDIwLCAweDc0LCAweDAzLCAweDdhLCAweGIzLCAweDkxLCAweDA2LCAweDdlLCAweDIzLCAweDkxLCAweDA3LCAweDdlLCAweDU3LCAKKyAgICAweDJjLCAweDc4LCAweDRkLCAweDU1LCAweDY4LCAweDA1LCAweDRlLCAweDIwLCAweDAyLCAweDgwLCAweDAzLCAweDVlLCAweDIwLCAweGZkLCAweDdhLCAweDIzLCAKKyAgICAweDkxLCAweDA3LCAweDgwLCAweDE2LCAweGI0LCAweDA3LCAweDE2LCAweGMyLCAweGFmLCAweDdlLCAweDA3LCAweDJjLCAweDdhLCAweDdlLCAweDE3LCAweDJjLCAKKyAgICAweDc4LCAweGMwLCAweGQxLCAweGNhLCAweDE4LCAweGNhLCAweDM4LCAweGNhLCAweDI4LCAweDMyLCAweDAyLCAweDZiLCAweGRlLCAweDAyLCAweDcxLCAweGYyLCAKKyAgICAweDc0LCAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDYwLCAweDdhLCAweGIzLCAweDkxLCAweDFjLCAweDdlLCAweGIzLCAweDJjLCAweDc3LCAKKyAgICAweGI0LCAweDAzLCAweDE1LCAweDc1LCAweDJmLCAweGMyLCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweDA0LCAweDAwLCAweDAxLCAweDdlLCAweDE3LCAweDJjLCAKKyAgICAweDc4LCAweDdlLCAweDU3LCAweDJjLCAweDdjLCAweDAyLCAweDZiLCAweGViLCAweGI0LCAweDA1LCAweDQxLCAweDc1LCAweDJmLCAweGMwLCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweGMwLCAweGE4LCAweGMyLCAweGFmLCAweDdlLCAweDQwLCAweDAxLCAweDdhLCAweDQzLCAweDk0LCAweDAwLCAweDdlLCAweDA4LCAweDJjLCAweDg4LCAKKyAgICAweDdhLCAweDBjLCAweDAwLCAweDAwLCAweDdlLCAweDI0LCAweDAwLCAweGZlLCAweDdlLCAweDM3LCAweDJjLCAweDc4LCAweDdlLCAweDQ3LCAweDJjLCAweDdjLCAKKyAgICAweDEyLCAweDczLCAweDQxLCAweDdlLCAweDQzLCAweDJjLCAweDM1LCAweDdhLCAweDQzLCAweDk0LCAweDAwLCAweGQwLCAweGE4LCAweDdlLCAweDA4LCAweDJjLCAKKyAgICAweDg4LCAweDdhLCAweDBjLCAweDAwLCAweDAwLCAweDdlLCAweDU3LCAweDJjLCAweDdjLCAweDAyLCAweDZiLCAweGViLCAweGI0LCAweDAxLCAweDIwLCAweDdlLCAKKyAgICAweDAwLCAweDAwLCAweDdlLCAweDEwLCAweDAxLCAweDc1LCAweDJmLCAweDcyLCAweDEyLCAweDczLCAweDM1LCAweDdhLCAweDAxLCAweDJmLCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweDdhLCAweDExLCAweDJmLCAweDEyLCAweDczLCAweDM1LCAweDEyLCAweDcyLCAweDM3LCAweDQwLCAweDAzLCAweDAyLCAweDZiLCAweGViLCAweDAyLCAKKyAgICAweDcxLCAweGYyLCAweDc1LCAweDJmLCAweDA3LCAweDEyLCAweDczLCAweDM1LCAweDdlLCAweGIwLCAweDAyLCAweDdhLCAweGIzLCAweDkwLCAweDAwLCAweDc0LCAKKyAgICAweDAwLCAweDdhLCAweGIzLCAweDkxLCAweDAwLCAweDc0LCAweDQwLCAweDdhLCAweGIzLCAweDkxLCAweDE1LCAweDc0LCAweDAxLCAweDdhLCAweGIzLCAweDkxLCAKKyAgICAweDExLCAweDdlLCAweGIzLCAweDkxLCAweDE1LCAweDU0LCAweDYwLCAweGJlLCAweGIwLCAweDQwLCAweDY4LCAweDA4LCAweDc0LCAweDIwLCAweDdhLCAweGIzLCAKKyAgICAweDkxLCAweDE1LCAweDgwLCAweGVkLCAweDc0LCAweDAxLCAweDdhLCAweGIzLCAweDkxLCAweDEyLCAweDc0LCAweDA0LCAweDdhLCAweGIzLCAweDkxLCAweDE0LCAKKyAgICAweDc0LCAweGZmLCAweDdhLCAweGIzLCAweDJjLCAweDdlLCAweDIyLCAweGMwLCAweGE4LCAweGMyLCAweGFmLCAweDdlLCAweDQwLCAweDAxLCAweDdhLCAweDQzLCAKKyAgICAweDk0LCAweDAwLCAweDEyLCAweDcyLCAweGJlLCAweDQwLCAweDFmLCAweDdlLCAweDA4LCAweDJjLCAweDg4LCAweDdhLCAweDBjLCAweDAwLCAweDAwLCAweGNhLCAKKyAgICAweDBiLCAweGNhLCAweDQ5LCAweDEyLCAweDczLCAweDQxLCAweGRhLCAweDU5LCAweGRhLCAweDBiLCAweDdlLCAweDQzLCAweDJjLCAweDM1LCAweDdhLCAweDQzLCAKKyAgICAweDk0LCAweDAwLCAweGQwLCAweGE4LCAweGMzLCAweDIyLCAweDdlLCAweDQzLCAweDJjLCAweDM1LCAweDdhLCAweDQzLCAweDk0LCAweDAwLCAweGQwLCAweGE4LCAKKyAgICAweDIyLCAweGMwLCAweGE4LCAweGMyLCAweGFmLCAweDdlLCAweDQwLCAweDAxLCAweDdhLCAweDQzLCAweDk0LCAweDAwLCAweDEyLCAweDcyLCAweGJlLCAweDQwLCAKKyAgICAweDMxLCAweDdlLCAweDU4LCAweDAwLCAweDAwLCAweDdhLCAweDVjLCAweDAwLCAweGZlLCAweDdmLCAweDYxLCAweDdlLCAweDc4LCAweDJjLCAweDg4LCAweDdhLCAKKyAgICAweDdjLCAweDAwLCAweDAwLCAweDdlLCAweDc3LCAweDJjLCAweDdjLCAweGJkLCAweDc0LCAweDc4LCAweDE3LCAweDc1LCAweDJmLCAweGMxLCAweDEyLCAweDczLCAKKyAgICAweDM1LCAweDEyLCAweDczLCAweDdhLCAweDQwLCAweDBjLCAweDdlLCAweDQzLCAweDJjLCAweDM1LCAweDdhLCAweDQzLCAweDk0LCAweDAwLCAweGQwLCAweGE4LCAKKyAgICAweGMzLCAweDIyLCAweDdlLCAweDQzLCAweDJjLCAweDM1LCAweDdhLCAweDQzLCAweDk0LCAweDAwLCAweGQwLCAweGE4LCAweGQzLCAweDIyLCAweDdlLCAweDI0LCAKKyAgICAweDAwLCAweGZlLCAweDdlLCAweDM0LCAweDdmLCAweGNhLCAweDBiLCAweDFhLCAweDUwLCAweGM1LCAweGYwLCAweDdkLCAweDYyLCAweDdkLCAweDc1LCAweDdkLCAKKyAgICAweDg3LCAweDdlLCAweDM0LCAweDdmLCAweGMyLCAweDdlLCAweDFiLCAweGIwLCAweDdlLCAweDM0LCAweDdmLCAweDAzLCAweGI0LCAweDAxLCAweDA0LCAweDdlLCAKKyAgICAweDM0LCAweDdmLCAweGNjLCAweDdlLCAweDFiLCAweGIwLCAweGJjLCAweDBiLCAweDUwLCAweDQ5LCAweDNlLCAweDAwLCAweDNlLCAweDAwLCAweDBhLCAweDUwLCAKKyAgICAweDJkLCAweDc1LCAweDBiLCAweDNhLCAweDMwLCAweDY5LCAweDUzLCAweDAwLCAweDAyLCAweGJkLCAweDM4LCAweDUwLCAweDAyLCAweDJkLCAweDM4LCAweGJjLCAKKyAgICAweDFiLCAweDUwLCAweDMwLCAweDNlLCAweDEwLCAweDNlLCAweDEwLCAweDBhLCAweDUxLCAweDJkLCAweDM1LCAweDY5LCAweDQxLCAweDAwLCAweDAyLCAweDBiLCAKKyAgICAweDFhLCAweDMwLCAweGJkLCAweDM4LCAweDUwLCAweDAyLCAweDJkLCAweDM4LCAweGJlLCAweDQ0LCAweGZmLCAweGZmLCAweDc4LCAweDA1LCAweDdlLCAweDFiLCAKKyAgICAweDkwLCAweDBhLCAweDQ5LCAweDRkLCAweDQ0LCAweDY4LCAweDBjLCAweGJlLCAweDQ0LCAweDAwLCAweGZmLCAweDI4LCAweDA0LCAweDdlLCAweDQ0LCAweDAwLCAKKyAgICAweGZmLCAweGMzLCAweDIyLCAweGQzLCAweDIyLCAKKworLy8gU2VnbWVudCAjMTYsIFN0YXJ0IEFkZHJlc3MgMDBmZjdmYzYsIExlbmd0aCA0CisweGZmLDB4MDAsMHhjNiwweDdmLDB4MDQsMHgwMCwKKyAgICAweDAyLCAweDAwLCAweDAzLCAweDAwLCAKKworLy8gU2VnbWVudCAjMTcsIFN0YXJ0IEFkZHJlc3MgMDBmZjczMzUsIExlbmd0aCAzMjgKKzB4ZmYsMHgwMCwweDM1LDB4NzMsMHg0OCwweDAxLAorICAgIDB4Y2EsIDB4MDgsIDB4N2UsIDB4MDEsIDB4MmYsIDB4N2EsIDB4MDMsIDB4M2YsIDB4ZjAsIDB4ZGEsIDB4MDgsIDB4MjIsIDB4N2UsIDB4MWIsIDB4YzAsIDB4N2EsIAorICAgIDB4MGIsIDB4YzAsIDB4MGIsIDB4MTQsIDB4MGIsIDB4MzQsIDB4MWIsIDB4NDQsIDB4NzgsIDB4ZjIsIDB4MjIsIDB4N2YsIDB4NmYsIDB4N2YsIDB4ZjAsIDB4MWIsIAorICAgIDB4ZmMsIDB4N2MsIDB4NTQsIDB4N2QsIDB4MzIsIDB4ODAsIDB4MDgsIDB4Y2EsIDB4MWIsIDB4Y2EsIDB4MWIsIDB4Y2EsIDB4MWIsIDB4Y2EsIDB4MWIsIDB4OWUsIAorICAgIDB4NDQsIDB4MDAsIDB4MTAsIDB4NTAsIDB4ZjIsIDB4MmUsIDB4NDQsIDB4MDAsIDB4MTAsIDB4NjgsIDB4MDYsIDB4Y2EsIDB4NDgsIDB4MWIsIDB4NDQsIDB4NzgsIAorICAgIDB4ZmEsIDB4N2YsIDB4ZjYsIDB4ODksIDB4ZTQsIDB4Y2EsIDB4NmIsIDB4NWUsIDB4ZDQsIDB4MDAsIDB4M2YsIDB4NjgsIDB4MjAsIDB4N2UsIDB4ODQsIDB4MDAsIAorICAgIDB4NDAsIDB4OWQsIDB4OGQsIDB4ZGEsIDB4NmIsIDB4YmQsIDB4ODcsIDB4MzgsIDB4MTYsIDB4Y2EsIDB4NzksIDB4N2QsIDB4NzgsIDB4MTIsIDB4NzMsIDB4YTQsIAorICAgIDB4ZGEsIDB4NzksIDB4NDAsIDB4MDgsIDB4OWQsIDB4NzgsIDB4NjgsIDB4MDIsIDB4ODAsIDB4MDUsIDB4YzIsIDB4ZDcsIDB4MjIsIDB4ZGEsIDB4NmIsIDB4N2UsIAorICAgIDB4YzAsIDB4MDMsIDB4N2UsIDB4ZDAsIDB4MDAsIDB4N2EsIDB4ZDMsIDB4OTAsIDB4MDAsIDB4NzQsIDB4YWEsIDB4MzksIDB4YjUsIDB4NTUsIDB4NTUsIDB4NzQsIAorICAgIDB4NTUsIDB4MzksIDB4YjUsIDB4MmEsIDB4YWEsIDB4NzQsIDB4YTAsIDB4MzksIDB4YjUsIDB4NTUsIDB4NTUsIDB4N2UsIDB4MDQsIDB4MDAsIDB4NDAsIDB4OWQsIAorICAgIDB4NzAsIDB4NTAsIDB4MDYsIDB4MmQsIDB4NzAsIDB4N2QsIDB4MDcsIDB4NmQsIDB4NzcsIDB4N2MsIDB4MzEsIDB4N2UsIDB4N2IsIDB4MDAsIDB4N2EsIDB4NmIsIAorICAgIDB4MDAsIDB4MGIsIDB4N2MsIDB4MGIsIDB4NmMsIDB4YTUsIDB4ZDksIDB4ZjMsIDB4N2YsIDB4MTYsIDB4MWIsIDB4MWMsIDB4N2UsIDB4NTQsIDB4MjcsIDB4MTAsIAorICAgIDB4N2UsIDB4MWIsIDB4MTAsIDB4YmMsIDB4MTAsIDB4NjgsIDB4MDYsIDB4MWIsIDB4NTQsIDB4NzgsIDB4ZjUsIDB4ODAsIDB4MmYsIDB4NmQsIDB4MDAsIDB4N2MsIAorICAgIDB4MjAsIDB4N2YsIDB4MTYsIDB4OWYsIDB4MTAsIDB4N2YsIDB4MjcsIDB4OWYsIDB4MjAsIDB4N2UsIDB4MmIsIDB4MDAsIDB4N2UsIDB4MWIsIDB4MTAsIDB4YmMsIAorICAgIDB4MDEsIDB4NzgsIDB4MTksIDB4MGIsIDB4MmMsIDB4MGIsIDB4MWMsIDB4YTUsIDB4ZGIsIDB4ZWYsIDB4N2MsIDB4YjYsIDB4MjAsIDB4ZTAsIDB4MDYsIDB4NmMsIAorICAgIDB4ZGMsIDB4N2EsIDB4ZDMsIDB4OTAsIDB4MDAsIDB4NGQsIDB4NzcsIDB4NzgsIDB4OTAsIDB4YzIsIDB4ZDcsIDB4MjIsIDB4ZDIsIDB4ZDcsIDB4MjIsIDB4MDAsIAorICAgIDB4MDQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDQsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDIsIDB4MDEsIDB4MDQsIDB4MDEsIDB4MDIsIDB4MDAsIAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDgsIDB4MTAsIAorICAgIDB4MDIsIDB4MTAsIDB4MDQsIDB4MDIsIDB4MDgsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDgsIDB4N2UsIDB4MTgsIDB4N2YsIDB4YmQsIDB4N2EsIDB4MWMsIDB4MDAsIAorICAgIDB4ZmUsIDB4MGIsIDB4MWEsIDB4MDAsIDB4NWUsIDB4MTAsIDB4MWYsIDB4YmUsIDB4MTAsIDB4MTQsIDB4MzgsIDB4MWEsIDB4MGEsIDB4NTEsIDB4MjMsIDB4N2UsIAorICAgIDB4MTgsIDB4NzQsIDB4MjQsIDB4N2EsIDB4MWMsIDB4MDAsIDB4ZmYsIDB4MmQsIDB4MzUsIDB4MGIsIDB4MWEsIDB4NTAsIDB4NjAsIDB4MDgsIDB4YTUsIDB4YjgsIAorICAgIDB4MDIsIDB4MDMsIDB4NGUsIDB4YTAsIDB4MDgsIDB4MjIsIDB4ODAsIDB4ZmUsIAorfTsKKworc3RhdGljIHN0cnVjdCBlZGdlX2Zpcm13YXJlX3ZlcnNpb25faW5mbyBJTUFHRV9WRVJTSU9OX05BTUUgPSB7CisJMiwgMCwgMyB9OwkJLy8gTWFqb3IsIE1pbm9yLCBCdWlsZAorCisjdW5kZWYgSU1BR0VfVkVSU0lPTl9OQU1FCisKKyN1bmRlZiBJTUFHRV9BUlJBWV9OQU1FCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19md19kb3duMy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2Z3X2Rvd24zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNiNTZkNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19md19kb3duMy5oCkBAIC0wLDAgKzEsODM1IEBACisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyogRWRnZXBvcnQgQmluYXJ5IEltYWdlIChmb3IgVEkgYmFzZWQgcHJvZHVjdHMpCisvLyogR2VuZXJhdGVkIGJ5IFRJQmluMkMgdjIuMDAgKHdhdGNocG9ydCkKKy8vKiBDb3B5cmlnaHQgKEMpIDIwMDEgSW5zaWRlIE91dCBOZXR3b3JrcywgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCitzdGF0aWMgaW50IElNQUdFX1NJWkUgPSAxMjc0OTsKKworc3RydWN0IEVER0VfRklSTVdBUkVfVkVSU0lPTl9JTkZPCit7CisJdW5zaWduZWQgY2hhciAgIE1ham9yVmVyc2lvbjsKKwl1bnNpZ25lZCBjaGFyICAgTWlub3JWZXJzaW9uOworCXVuc2lnbmVkIHNob3J0ICBCdWlsZE51bWJlcjsKK307CisKK3N0YXRpYyBzdHJ1Y3QgRURHRV9GSVJNV0FSRV9WRVJTSU9OX0lORk8gSU1BR0VfVkVSU0lPTl9OQU1FID0KK3sKKwk0LCAxMCwgMAkJLy8gTWFqb3IsIE1pbm9yLCBCdWlsZAorCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBJTUFHRV9BUlJBWV9OQU1FW10gPSAKK3sKKy8vICBzdHJ1Y3QgSW1hZ2VIZHIKKy8vICB7CisvLyAgICAgIFdPUkQgICAgTGVuZ3RoOworLy8gICAgICBCWVRFICAgIENoZWNrU3VtOworLy8gIH07CisweGNhLCAweDMxLCAKKzB4YTgsIAorCisweDAyLCAweDI2LCAweGZlLCAweDAyLCAweDIxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDEsIDB4MWEsIDB4ODUsIDB4M2YsIAorMHg4YywgMHg4NSwgMHg0MCwgMHg4YSwgMHhjMCwgMHhlMCwgMHhjMCwgMHhkMCwgMHhjMCwgMHhmMCwgMHhjMCwgMHg4MiwgMHhjMCwgMHg4MywgMHhjMCwgMHgwMCwgCisweGMwLCAweDAxLCAweGMwLCAweDAyLCAweGMwLCAweDAzLCAweGMwLCAweDA0LCAweGMwLCAweDA1LCAweGMwLCAweDA2LCAweGMwLCAweDA3LCAweGU1LCAweDNlLCAKKzB4MjQsIDB4MDgsIDB4ZjgsIDB4ZTYsIDB4NjAsIDB4MmIsIDB4ZTUsIDB4M2UsIDB4MjQsIDB4MTAsIDB4ZjgsIDB4YTYsIDB4ODEsIDB4ZTUsIDB4M2UsIDB4NzUsIAorMHhmMCwgMHgyMSwgMHhhNCwgMHgyNCwgMHgwNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHhmOCwgMHhmNSwgMHg4MywgMHg3OCwgMHg4YywgMHhlNSwgMHg4MSwgCisweDA0LCAweGMzLCAweDk4LCAweGY5LCAweDk0LCAweDIyLCAweDQwLCAweDAzLCAweDAyLCAweDExLCAweDk0LCAweGU2LCAweGYwLCAweDA4LCAweGEzLCAweGQ5LCAKKzB4ZmEsIDB4NzQsIDB4MDgsIDB4MjUsIDB4M2UsIDB4ZjgsIDB4MDUsIDB4M2UsIDB4MDgsIDB4ZTYsIDB4NTQsIDB4ODAsIDB4NzAsIDB4MGMsIDB4ZTUsIDB4M2UsIAorMHhiNCwgMHgwNywgMHhmMywgMHg3OCwgMHgwOCwgMHg3NSwgMHgzZSwgMHgwMCwgMHg4MCwgMHhlZiwgMHhlNSwgMHgzZSwgMHgyNCwgMHgxMCwgMHhmOCwgMHg4NiwgCisweDgxLCAweGU1LCAweDNlLCAweDc1LCAweGYwLCAweDIxLCAweGE0LCAweDI0LCAweDA1LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweGY4LCAweGY1LCAweDgzLCAKKzB4NzgsIDB4OGMsIDB4ZTUsIDB4ODEsIDB4MDQsIDB4YzMsIDB4OTgsIDB4ZjksIDB4ZTAsIDB4ZjYsIDB4MDgsIDB4YTMsIDB4ZDksIDB4ZmEsIDB4ZDAsIDB4MDcsIAorMHhkMCwgMHgwNiwgMHhkMCwgMHgwNSwgMHhkMCwgMHgwNCwgMHhkMCwgMHgwMywgMHhkMCwgMHgwMiwgMHhkMCwgMHgwMSwgMHhkMCwgMHgwMCwgMHhkMCwgMHg4MywgCisweGQwLCAweDgyLCAweGQwLCAweGYwLCAweGQwLCAweGQwLCAweGQwLCAweGUwLCAweDMyLCAweDMwLCAweDAxLCAweDRkLCAweDMwLCAweGI0LCAweDQ4LCAweDEwLCAKKzB4MDAsIDB4NDUsIDB4OTAsIDB4ZmYsIDB4MDgsIDB4ZTAsIDB4NTQsIDB4MjAsIDB4ZjgsIDB4OTAsIDB4ZmYsIDB4NDgsIDB4ZTAsIDB4NTQsIDB4MjAsIDB4ZjksIAorMHg5MCwgMHhmZiwgMHgxMCwgMHhlMCwgMHg1NCwgMHgyMCwgMHhmYSwgMHg5MCwgMHhmZiwgMHg1MCwgMHhlMCwgMHg1NCwgMHgyMCwgMHhmYiwgMHg3NCwgMHgwMCwgCisweGY1LCAweDgyLCAweDc0LCAweGY4LCAweGY1LCAweDgzLCAweGUwLCAweGM4LCAweGYwLCAweDY4LCAweDYwLCAweDAyLCAweDdlLCAweDA0LCAweGEzLCAweGUwLCAKKzB4YzksIDB4ZjAsIDB4NjksIDB4NjAsIDB4MDIsIDB4N2UsIDB4MDQsIDB4YTMsIDB4ZTAsIDB4Y2EsIDB4ZjAsIDB4NmEsIDB4NjAsIDB4MDIsIDB4N2UsIDB4MDQsIAorMHhhMywgMHhlMCwgMHhjYiwgMHhmMCwgMHg2YiwgMHg2MCwgMHgwMiwgMHg3ZSwgMHgwNCwgMHgyMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHhkMCwgMHhjMCwgMHhmMCwgCisweGMwLCAweDgyLCAweGMwLCAweDgzLCAweGMwLCAweDAwLCAweGMwLCAweDAxLCAweGMwLCAweDAyLCAweGMwLCAweDAzLCAweGMwLCAweDA0LCAweGMwLCAweDA1LCAKKzB4YzAsIDB4MDYsIDB4YzAsIDB4MDcsIDB4OTAsIDB4ZmYsIDB4OTMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ZTUsIDB4ODEsIDB4OTQsIDB4ZmQsIDB4NDAsIDB4MDMsIAorMHgwMiwgMHgxMSwgMHg5NCwgMHg4NSwgMHg0MSwgMHg4ZCwgMHg4NSwgMHg0MiwgMHg4YiwgMHg3NCwgMHhhZiwgMHhmNSwgMHg4MiwgMHg3NCwgMHhmYSwgMHhmNSwgCisweDgzLCAweGUwLCAweGI0LCAweDAxLCAweDFiLCAweGMwLCAweDgyLCAweGMwLCAweDgzLCAweDkwLCAweGZmLCAweDRhLCAweGUwLCAweDMwLCAweGU3LCAweDJjLCAKKzB4OTAsIDB4ZmYsIDB4NGUsIDB4ZTAsIDB4MzAsIDB4ZTcsIDB4MjUsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4ODAsIDB4MjAsIAorMHhiNCwgMHgwMiwgMHgxZCwgMHhjMCwgMHg4MiwgMHhjMCwgMHg4MywgMHg5MCwgMHhmZiwgMHg3YSwgMHhlMCwgMHgzMCwgMHhlNywgMHgwNSwgMHgxMiwgMHgyNywgCisweDhkLCAweDgwLCAweDA5LCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAweDc0LCAweDAzLCAweGYwLCAweDgwLCAweDA0LCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAKKzB4YTMsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MWIsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODMsIDB4OTAsIDB4ZmYsIDB4NTIsIDB4ZTAsIDB4MzAsIDB4ZTcsIDB4MmMsIAorMHg5MCwgMHhmZiwgMHg1NiwgMHhlMCwgMHgzMCwgMHhlNywgMHgyNSwgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgMHg3NCwgMHgwMiwgMHhmMCwgMHg4MCwgMHgyNSwgCisweGI0LCAweDAyLCAweDIyLCAweGMwLCAweDgyLCAweGMwLCAweDgzLCAweDkwLCAweGZmLCAweDdhLCAweGUwLCAweDMwLCAweGU3LCAweDA1LCAweDEyLCAweDI3LCAKKzB4OGQsIDB4ODAsIDB4MDksIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ODAsIDB4MDksIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIAorMHg4MCwgMHgwMywgMHgwMiwgMHgwMiwgMHg2MiwgMHg3NCwgMHgxNSwgMHhmNSwgMHg4MiwgMHg3NCwgMHhmOSwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMCwgMHgwNCwgCisweGYxLCAweDIwLCAweDAyLCAweDAzLCAweDMwLCAweDAxLCAweGViLCAweDc0LCAweDE4LCAweGY1LCAweDgyLCAweDc0LCAweGY5LCAweGY1LCAweDgzLCAweGUwLCAKKzB4MTQsIDB4ZmMsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4ZmQsIDB4YTMsIDB4ZTAsIDB4ZmUsIDB4NjQsIDB4MDQsIDB4NzAsIDB4MGYsIDB4ZWMsIDB4NzAsIDB4NjIsIAorMHg3ZSwgMHgwMSwgMHgxMiwgMHgwMCwgMHhjOSwgMHg3YywgMHgwYSwgMHg3ZCwgMHhmYSwgMHgwMiwgMHgwMiwgMHgzMywgMHgxMiwgMHgwMCwgMHhjOSwgMHhlZSwgCisweDY0LCAweDA0LCAweDYwLCAweDFkLCAweGVjLCAweDcwLCAweDRiLCAweDdjLCAweDBhLCAweGVkLCAweDE0LCAweGZkLCAweDcwLCAweDE1LCAweGVlLCAweDY0LCAKKzB4MDIsIDB4NjAsIDB4MDcsIDB4N2UsIDB4MDIsIDB4N2QsIDB4MzIsIDB4MDIsIDB4MDIsIDB4MzMsIDB4N2UsIDB4MDEsIDB4N2QsIDB4ZmEsIDB4MDIsIDB4MDIsIAorMHgzMywgMHg3YywgMHgwYSwgMHg3NCwgMHgxOCwgMHhmNSwgMHg4MiwgMHg3NCwgMHhmOSwgMHhmNSwgMHg4MywgMHhlYywgMHhmMCwgMHhhMywgMHhlZCwgMHhmMCwgCisweGEzLCAweGVlLCAweGYwLCAweDE0LCAweDYwLCAweDE4LCAweDIwLCAweGUxLCAweDBmLCAweDIwLCAweDAxLCAweDA2LCAweGQyLCAweGIxLCAweGMyLCAweGIwLCAKKzB4ODAsIDB4MTAsIDB4YzIsIDB4YjEsIDB4ZDIsIDB4YjAsIDB4ODAsIDB4MGEsIDB4YzIsIDB4YjEsIDB4YzIsIDB4YjAsIDB4ODAsIDB4MDQsIDB4ZDIsIDB4YjAsIAorMHhkMiwgMHhiMSwgMHg3OCwgMHgxOSwgMHg3OSwgMHgwOSwgMHg3YSwgMHgwNywgMHhlNywgMHg3MCwgMHgwNCwgMHhhNiwgMHgwMCwgMHg4MCwgMHgwYiwgMHhlNiwgCisweDYwLCAweDA4LCAweDE2LCAweGU2LCAweDcwLCAweDA0LCAweGU3LCAweDQ0LCAweDgwLCAweGY3LCAweDA4LCAweDA5LCAweGRhLCAweGVhLCAweGU1LCAweDNkLCAKKzB4NjAsIDB4MTMsIDB4MTQsIDB4ZjUsIDB4M2QsIDB4NzAsIDB4MGUsIDB4ZTUsIDB4M2UsIDB4MjQsIDB4MDgsIDB4ZjgsIDB4NzYsIDB4MDAsIDB4MTIsIDB4MTEsIAorMHgwZiwgMHhkMiwgMHg4YywgMHhkMiwgMHg4ZCwgMHhkMCwgMHgwNywgMHhkMCwgMHgwNiwgMHhkMCwgMHgwNSwgMHhkMCwgMHgwNCwgMHhkMCwgMHgwMywgMHhkMCwgCisweDAyLCAweGQwLCAweDAxLCAweGQwLCAweDAwLCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAweGQwLCAweGYwLCAweGQwLCAweGQwLCAweGQwLCAweGUwLCAweDMyLCAKKzB4OTAsIDB4ZmYsIDB4MDQsIDB4ZTAsIDB4OTAsIDB4ZmEsIDB4YjYsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4MDYsIDB4ZTAsIDB4ZmMsIDB4YTMsIDB4ZTAsIDB4ZmEsIAorMHhlYywgMHhmZiwgMHhlYSwgMHhmZSwgMHhlZiwgMHhjMywgMHg5NCwgMHgwOCwgMHhlZSwgMHg5NCwgMHgwMSwgMHg1MCwgMHgwMiwgMHg4MCwgMHgwNCwgMHg3ZSwgCisweDAxLCAweDdmLCAweDA4LCAweDhlLCAweDNiLCAweDhmLCAweDNjLCAweDkwLCAweGZmLCAweDAyLCAweGUwLCAweGZjLCAweGEzLCAweGUwLCAweGZhLCAweGVjLCAKKzB4ZmYsIDB4ZWEsIDB4OTAsIDB4ZmEsIDB4YmEsIDB4ZjAsIDB4ZWYsIDB4YTMsIDB4ZjAsIDB4MTIsIDB4MWMsIDB4MzAsIDB4ZTQsIDB4ZjUsIDB4NGQsIDB4ZTUsIAorMHg0ZCwgMHhjMywgMHg5NCwgMHgwMiwgMHg1MCwgMHgwZiwgMHgxMiwgMHgxYywgMHgxMSwgMHhlNCwgMHgxMiwgMHgxYSwgMHgzOCwgMHgwNSwgMHg0ZCwgMHgwNCwgCisweDEyLCAweDFjLCAweDAyLCAweDgwLCAweGVhLCAweDEyLCAweDFjLCAweDMwLCAweDkwLCAweGZmLCAweDAwLCAweGUwLCAweGZmLCAweDU0LCAweDYwLCAweDI0LCAKKzB4YzAsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDgsIDB4YzUsIDB4MjQsIDB4NDAsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4OTAsIDB4ZmEsIDB4YjYsIAorMHhlMCwgMHhmZSwgMHg1NCwgMHgwZiwgMHhmNSwgMHg0ZCwgMHhlZSwgMHgzMCwgMHhlNywgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywgMHg5MiwgMHgwYSwgCisweDkwLCAweGZmLCAweDAxLCAweGUwLCAweDEyLCAweDFiLCAweDRjLCAweDAzLCAweDU2LCAweDAwLCAweDA0LCAweDI5LCAweDAxLCAweDA1LCAweDNjLCAweDAzLCAKKzB4MDYsIDB4MDMsIDB4MDUsIDB4MDYsIDB4NDUsIDB4MDYsIDB4MDcsIDB4YTcsIDB4MDgsIDB4MDcsIDB4ZWYsIDB4MDksIDB4MDgsIDB4NGIsIDB4MGEsIDB4MDgsIAorMHg4YiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwZiwgMHgyNiwgMHhlNSwgMHgzNSwgMHgyMCwgMHhlNywgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHg5MCwgMHhmYSwgCisweGJhLCAweGUwLCAweDcwLCAweDAyLCAweGEzLCAweGUwLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGU1LCAweDNjLCAweDY0LCAweDAyLCAweDQ1LCAKKzB4M2IsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZWYsIDB4NTQsIDB4MWYsIDB4MTQsIDB4NjAsIDB4MmIsIDB4MTQsIDB4NjAsIDB4NDcsIDB4MjQsIAorMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlZSwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHgxMiwgMHgxYywgMHgxMSwgMHg3NCwgCisweDAxLCAweDEyLCAweDFhLCAweDM4LCAweDc4LCAweDY3LCAweGU2LCAweDMwLCAweGUwLCAweDA4LCAweDEyLCAweDFjLCAweDExLCAweDc0LCAweDAyLCAweDEyLCAKKzB4MWEsIDB4MzgsIDB4N2YsIDB4MDIsIDB4MDIsIDB4MzEsIDB4YjEsIDB4ZTUsIDB4MzUsIDB4MjAsIDB4ZTEsIDB4MDksIDB4OTAsIDB4ZmEsIDB4YjYsIDB4ZTAsIAorMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHg5MCwgMHhmYSwgMHhiNiwgMHhlMCwgMHhkMywgMHg5NCwgMHgwMSwgMHg0MCwgMHgwMywgMHgwMiwgMHgwZiwgCisweDI2LCAweDdmLCAweDAyLCAweDAyLCAweDMxLCAweGIxLCAweGU1LCAweDM1LCAweDIwLCAweGUxLCAweDBlLCAweDkwLCAweGZhLCAweGI2LCAweGUwLCAweGZmLCAKKzB4NjAsIDB4MDcsIDB4NjQsIDB4ODAsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4MTIsIDB4MGYsIDB4YjIsIDB4NDAsIDB4MDMsIDB4MDIsIDB4MGYsIAorMHgyNiwgMHhlNSwgMHg0ZCwgMHg3MCwgMHgxOSwgMHgzMCwgMHgwYSwgMHgwYiwgMHg5MCwgMHhmZiwgMHg4MCwgMHgxMiwgMHgxYywgMHgwZSwgMHgxMiwgMHgxYSwgCisweDM4LCAweDgwLCAweDI0LCAweDkwLCAweGZmLCAweDgyLCAweDEyLCAweDFjLCAweDBlLCAweDEyLCAweDFhLCAweDM4LCAweDgwLCAweDE5LCAweDE1LCAweDRkLCAKKzB4MzAsIDB4MGEsIDB4MGIsIDB4MTIsIDB4MWMsIDB4YTUsIDB4MTIsIDB4MWMsIDB4MGMsIDB4MTIsIDB4MWEsIDB4MzgsIDB4ODAsIDB4MDksIDB4MTIsIDB4MWMsIAorMHhiMywgMHgxMiwgMHgxYywgMHgwYywgMHgxMiwgMHgxYSwgMHgzOCwgMHgxMiwgMHgxYywgMHgxMSwgMHgxMiwgMHgxOSwgMHhmMiwgMHg2MCwgMHgwNSwgMHg3NCwgCisweDAxLCAweDEyLCAweDFhLCAweDM4LCAweDdmLCAweDAyLCAweDAyLCAweDMxLCAweGIxLCAweGU1LCAweDM1LCAweDMwLCAweGU3LCAweDAzLCAweDAyLCAweDBmLCAKKzB4MjYsIDB4ZTUsIDB4M2MsIDB4NDUsIDB4M2IsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4MTIsIDB4MWMsIDB4YzksIDB4MTQsIDB4NjAsIDB4MmQsIAorMHgxNCwgMHg2MCwgMHg1OSwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHg5MCwgMHhmYSwgMHhiYSwgMHhlMCwgMHg3MCwgMHgwNCwgCisweGEzLCAweGUwLCAweDY0LCAweDAxLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDkwLCAweGZhLCAweGI2LCAweGUwLCAweDYwLCAweDAzLCAweDAyLCAKKzB4MGYsIDB4MjYsIDB4NzgsIDB4NjcsIDB4ZTYsIDB4NTQsIDB4ZmUsIDB4ZjYsIDB4ZTQsIDB4ZmYsIDB4MDIsIDB4MzEsIDB4YjEsIDB4ZTUsIDB4MzUsIDB4MjAsIAorMHhlMSwgMHgwNiwgMHgyMCwgMHhlMCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlNSwgMHgzNSwgMHgzMCwgMHhlMCwgMHgwOSwgMHg5MCwgMHhmYSwgMHhiNiwgCisweGUwLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGU1LCAweDM1LCAweDMwLCAweGUxLCAweDBjLCAweDkwLCAweGZhLCAweGI2LCAweGUwLCAweGQzLCAKKzB4OTQsIDB4MDEsIDB4NDAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZTQsIDB4ZmYsIDB4MDIsIDB4MzEsIDB4YjEsIDB4OTAsIDB4ZmEsIDB4YmEsIDB4ZTAsIAorMHg3MCwgMHgwMiwgMHhhMywgMHhlMCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHgxMiwgMHgwZiwgMHhiMiwgMHg0MCwgMHgwMywgMHgwMiwgMHgwZiwgCisweDI2LCAweGU1LCAweDM1LCAweDIwLCAweGUxLCAweDA2LCAweDIwLCAweGUwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGU1LCAweDM1LCAweDMwLCAweGUwLCAKKzB4MDcsIDB4ZTUsIDB4NGQsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4NGQsIDB4NzAsIDB4MGYsIDB4OTAsIDB4ZmYsIDB4ODIsIDB4ZTAsIAorMHg1NCwgMHhmNywgMHhmMCwgMHg5MCwgMHhmZiwgMHg4MCwgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHgyMiwgMHhlNSwgMHg0ZCwgMHgyNCwgMHhmZSwgMHg2MCwgCisweDIwLCAweDI0LCAweGZiLCAweDYwLCAweDM0LCAweDI0LCAweDA2LCAweDcwLCAweDM1LCAweDMwLCAweDBhLCAweDBjLCAweGEyLCAweDBhLCAweGU0LCAweDMzLCAKKzB4ZmQsIDB4N2YsIDB4MDMsIDB4MTIsIDB4MmQsIDB4YTgsIDB4ODAsIDB4MjYsIDB4ZTQsIDB4ZmQsIDB4N2YsIDB4MDMsIDB4MTIsIDB4MmQsIDB4YTgsIDB4ODAsIAorMHgxZCwgMHgzMCwgMHgwYSwgMHgwYywgMHhhMiwgMHgwYSwgMHhlNCwgMHgzMywgMHhmZCwgMHg3ZiwgMHgwNCwgMHgxMiwgMHgyZCwgMHhhOCwgMHg4MCwgMHgwZSwgCisweGU0LCAweGZkLCAweDdmLCAweDA0LCAweDEyLCAweDJkLCAweGE4LCAweDgwLCAweDA1LCAweDdmLCAweDg3LCAweDEyLCAweDMxLCAweDMyLCAweDE1LCAweDRkLCAKKzB4MzAsIDB4MGEsIDB4MGIsIDB4MTIsIDB4MWMsIDB4YTUsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjAsIDB4ODAsIDB4MDksIDB4MTIsIDB4MWMsIAorMHhiMywgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHhlNCwgMHhmZiwgMHgwMiwgMHgzMSwgMHhiMSwgMHhlNSwgMHgzNSwgMHgzMCwgMHhlNywgCisweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGU1LCAweDNjLCAweDQ1LCAweDNiLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDEyLCAweDFjLCAweGM5LCAKKzB4MTQsIDB4NjAsIDB4MmQsIDB4MTQsIDB4NjAsIDB4NTUsIDB4MjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4OTAsIDB4ZmEsIDB4YmEsIAorMHhlMCwgMHg3MCwgMHgwNCwgMHhhMywgMHhlMCwgMHg2NCwgMHgwMSwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHg5MCwgMHhmYSwgMHhiNiwgMHhlMCwgCisweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDc4LCAweDY3LCAweGU2LCAweDQ0LCAweDAxLCAweGY2LCAweGU0LCAweGZmLCAweDAyLCAweDMxLCAweGIxLCAKKzB4ZTUsIDB4MzUsIDB4MjAsIDB4ZTEsIDB4MDYsIDB4MjAsIDB4ZTAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4MzUsIDB4MzAsIDB4ZTAsIDB4MDcsIAorMHhlNSwgMHg0ZCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlNSwgMHgzNSwgMHgzMCwgMHhlMSwgMHgwYSwgMHhlNSwgMHg0ZCwgMHhkMywgMHg5NCwgCisweDAxLCAweDQwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGU0LCAweGZmLCAweDAyLCAweDMxLCAweGIxLCAweDkwLCAweGZhLCAweGJhLCAweGUwLCAweDcwLCAKKzB4MDIsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4OTAsIDB4ZmEsIDB4YjYsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MzEsIDB4ODIsIAorMHg0MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlNSwgMHgzNSwgMHgyMCwgMHhlMSwgMHgwNiwgMHgyMCwgMHhlMCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgCisweGU1LCAweDRkLCAweDcwLCAweDA5LCAweDMwLCAweDBhLCAweDAzLCAweDAyLCAweDFkLCAweDY0LCAweDAyLCAweDFkLCAweDJmLCAweGU1LCAweDM1LCAweDIwLCAKKzB4ZTEsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4MTUsIDB4NGQsIDB4MzAsIDB4MGEsIDB4MGIsIDB4MTIsIDB4MWMsIDB4YTUsIDB4ZjUsIDB4ODMsIDB4ZTAsIAorMHg0NCwgMHgwOCwgMHhmMCwgMHg4MCwgMHgwOSwgMHgxMiwgMHgxYywgMHhiMywgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHhlNCwgMHhmZiwgCisweDAyLCAweDMxLCAweGIxLCAweGU1LCAweDM1LCAweDMwLCAweGU3LCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGU1LCAweDNjLCAweDQ1LCAweDNiLCAweDYwLCAKKzB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4OTAsIDB4ZmEsIDB4YjYsIDB4ZTAsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4MTIsIDB4MWMsIDB4YzksIAorMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlNSwgMHgzNSwgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHg5MCwgMHhmYSwgMHhiYiwgCisweGUwLCAweDkwLCAweGZmLCAweGZmLCAweGYwLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDM1LCAweDAxLCAweDgwLCAweDAzLCAweDUzLCAweDM1LCAweGZlLCAKKzB4ZTQsIDB4ZmYsIDB4MDIsIDB4MzEsIDB4YjEsIDB4ZTUsIDB4MzUsIDB4MjAsIDB4ZTcsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4M2MsIDB4NDUsIAorMHgzYiwgMHg3MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHgxMiwgMHgxYywgMHhjOSwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHg5MCwgMHhmYSwgCisweGJhLCAweGUwLCAweGZjLCAweGEzLCAweGUwLCAweGZkLCAweGVjLCAweDI0LCAweGZlLCAweDYwLCAweDNhLCAweDE0LCAweDYwLCAweDc1LCAweDI0LCAweDAyLCAKKzB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZWQsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4MTIsIDB4MWMsIDB4MzAsIDB4MTIsIDB4MWQsIAorMHg1ZCwgMHg3ZCwgMHgwMywgMHgxMiwgMHgwZiwgMHg2ZCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHgxMiwgMHgwZiwgMHgyYSwgMHg5MCwgMHhmYSwgCisweGIzLCAweGUwLCAweGZkLCAweGEzLCAweDEyLCAweDFjLCAweDdiLCAweDEyLCAweDBmLCAweDg5LCAweDUwLCAweDAyLCAweDgwLCAweDA0LCAweGFlLCAweDNiLCAKKzB4YWYsIDB4M2MsIDB4MDIsIDB4MGYsIDB4YmEsIDB4MTIsIDB4MWMsIDB4MzAsIDB4OTAsIDB4ZjksIDB4MTUsIDB4ZTAsIDB4MzAsIDB4ZTQsIDB4MGQsIDB4MTIsIAorMHgxZCwgMHg1ZCwgMHg3ZCwgMHgxNCwgMHgxMiwgMHgwZiwgMHg2ZCwgMHg2MCwgMHgxMCwgMHgwMiwgMHgwZiwgMHgyNiwgMHgxMiwgMHgxZCwgMHg1ZCwgMHg3ZCwgCisweDA0LCAweDEyLCAweDBmLCAweGMxLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDEyLCAweDBmLCAweDJhLCAweDkwLCAweGZhLCAweGIzLCAweGUwLCAKKzB4ZmQsIDB4YTMsIDB4MTIsIDB4MWMsIDB4N2IsIDB4MTIsIDB4MGYsIDB4ODksIDB4NTAsIDB4MDIsIDB4ODAsIDB4MDQsIDB4YWUsIDB4M2IsIDB4YWYsIDB4M2MsIAorMHgwMiwgMHgwZiwgMHhiYSwgMHgxMiwgMHgxZCwgMHg1ZCwgMHg3ZCwgMHgwNSwgMHgxMiwgMHgwZiwgMHhjMSwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgCisweDdiLCAweDAxLCAweDdhLCAweGZhLCAweDc5LCAweGIzLCAweDEyLCAweDFjLCAweDc4LCAweDdkLCAweDAxLCAweDEyLCAweDI1LCAweGQ3LCAweDkwLCAweGZhLCAKKzB4YjQsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDMsIDB4MTIsIDB4MWEsIDB4NmMsIDB4OTAsIDB4ZmEsIDB4YmIsIDB4ZTAsIDB4OTAsIDB4ZmEsIDB4YjIsIDB4ZjAsIAorMHhlNCwgMHhmNSwgMHg0YywgMHg5MCwgMHhmYSwgMHhiMiwgMHhlMCwgMHhmZiwgMHhlNSwgMHg0YywgMHhjMywgMHg5ZiwgMHg1MCwgMHgyNCwgMHgxMiwgMHgxYywgCisweDcyLCAweDEyLCAweDBmLCAweGNjLCAweGZmLCAweGZkLCAweDkwLCAweGZhLCAweGI0LCAweGU0LCAweDhkLCAweGYwLCAweDEyLCAweDFhLCAweDZjLCAweDkwLCAKKzB4ZmEsIDB4YjMsIDB4ZTAsIDB4YzMsIDB4OWYsIDB4ZjAsIDB4ZDMsIDB4OTQsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4MDUsIDB4NGMsIAorMHg4MCwgMHhkMSwgMHgxMiwgMHgxYywgMHg3MiwgMHgxMiwgMHgwZiwgMHhjYywgMHgyNCwgMHhmZSwgMHhmZiwgMHg5MCwgMHhmYSwgMHhiMywgMHhmMCwgMHhmZCwgCisweGEzLCAweGU0LCAweDc1LCAweGYwLCAweDAyLCAweDEyLCAweDFhLCAweDZjLCAweDdhLCAweGY5LCAweDc5LCAweDZmLCAweDdiLCAweDAxLCAweDhiLCAweDM2LCAKKzB4OGEsIDB4MzcsIDB4ODksIDB4MzgsIDB4ZTksIDB4MjQsIDB4MDIsIDB4ZjksIDB4ZTQsIDB4M2EsIDB4ZmEsIDB4MTIsIDB4MWMsIDB4NzgsIDB4MTIsIDB4MjUsIAorMHhkNywgMHg4ZiwgMHg0YywgMHgwNSwgMHg0YywgMHgwNSwgMHg0YywgMHgxMiwgMHgxYywgMHgxMSwgMHhlNSwgMHg0YywgMHgxMiwgMHgxYSwgMHgzOCwgMHgxMiwgCisweDFjLCAweDExLCAweDkwLCAweDAwLCAweDAxLCAweDc0LCAweDAzLCAweDEyLCAweDFhLCAweDRhLCAweGFmLCAweDRjLCAweDdlLCAweDAwLCAweGMzLCAweGVmLCAKKzB4OTUsIDB4M2MsIDB4ZWUsIDB4OTUsIDB4M2IsIDB4NTAsIDB4MDIsIDB4ODAsIDB4MDQsIDB4YWUsIDB4M2IsIDB4YWYsIDB4M2MsIDB4OGUsIDB4MzksIDB4OGYsIAorMHgzYSwgMHgwMiwgMHgyYywgMHgwNywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlNSwgMHgzNSwgMHgyMCwgMHhlNywgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlNSwgCisweDNjLCAweDY0LCAweDAxLCAweDQ1LCAweDNiLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDkwLCAweGZhLCAweGI2LCAweGUwLCAweDYwLCAweDAzLCAKKzB4MDIsIDB4MGYsIDB4MjYsIDB4OTAsIDB4ZmEsIDB4YmEsIDB4ZTAsIDB4NzAsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIAorMHgxMiwgMHgxYywgMHhjOSwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhlNSwgMHgzNSwgMHgyMCwgMHhlMCwgMHgwNiwgMHgyMCwgMHhlMSwgMHgwMywgCisweDAyLCAweDBmLCAweDI2LCAweDc1LCAweDM2LCAweDAwLCAweDc1LCAweDM3LCAweDAwLCAweDc1LCAweDM4LCAweDMyLCAweDAyLCAweDBmLCAweGE5LCAweGU1LCAKKzB4MzUsIDB4MzAsIDB4ZTcsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4M2MsIDB4NDUsIDB4M2IsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIAorMHg5MCwgMHhmYSwgMHhiNiwgMHhlMCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhkMywgMHg5MCwgMHhmYSwgMHhiYiwgMHhlMCwgMHg5NCwgMHgwMSwgCisweDkwLCAweGZhLCAweGJhLCAweGUwLCAweDk0LCAweDAwLCAweDQwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDEyLCAweDFjLCAweGM5LCAweDYwLCAweDAzLCAKKzB4MDIsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4MzUsIDB4MjAsIDB4ZTAsIDB4MDYsIDB4MjAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4OTAsIDB4ZmEsIAorMHhiYiwgMHhlMCwgMHhmNSwgMHgzMiwgMHhlNSwgMHgzMiwgMHg3MCwgMHgwOCwgMHg0MywgMHgzNSwgMHgwMSwgMHg1MywgMHgzNSwgMHhmZCwgMHg4MCwgMHgwNiwgCisweDUzLCAweDM1LCAweGZlLCAweDQzLCAweDM1LCAweDAyLCAweGU0LCAweGZmLCAweDAyLCAweDMxLCAweGIxLCAweGU1LCAweDM1LCAweDIwLCAweGU3LCAweDAzLCAKKzB4MDIsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4M2MsIDB4NjQsIDB4MDEsIDB4NDUsIDB4M2IsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4OTAsIDB4ZmEsIAorMHhiNiwgMHhlMCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHg5MCwgMHhmYSwgMHhiYSwgMHhlMCwgMHg3MCwgMHgwMiwgMHhhMywgMHhlMCwgMHg2MCwgCisweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDEyLCAweDFjLCAweGM5LCAweDY0LCAweDAxLCAweDYwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweGU1LCAweDM1LCAKKzB4MjAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4N2YsIDB4MDEsIDB4MDIsIDB4MzEsIDB4YjEsIDB4ZTUsIDB4MzUsIDB4MzAsIDB4ZTcsIDB4MDMsIAorMHgwMiwgMHgwZiwgMHgyNiwgMHhlNSwgMHgzYywgMHg0NSwgMHgzYiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZiwgMHgyNiwgMHhkMywgMHg5MCwgMHhmYSwgMHhiYiwgCisweGUwLCAweDk0LCAweDAwLCAweDkwLCAweGZhLCAweGJhLCAweGUwLCAweDk0LCAweDAwLCAweDQwLCAweDAzLCAweDAyLCAweDBmLCAweDI2LCAweDEyLCAweDFjLCAKKzB4YzksIDB4NjQsIDB4MDEsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIDB4ZTUsIDB4MzUsIDB4MjAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjYsIAorMHhlNCwgMHhmZiwgMHgwMiwgMHgzMSwgMHhiMSwgMHg5MCwgMHhmZiwgMHgwMSwgMHgxMiwgMHgxZCwgMHg3NCwgMHhlZiwgMHgxMiwgMHgxYSwgMHgzOCwgMHg5MCwgCisweGZhLCAweGI2LCAweDEyLCAweDFkLCAweDc0LCAweDkwLCAweDAwLCAweDAxLCAweGVmLCAweDEyLCAweDFhLCAweDRhLCAweDkwLCAweDAwLCAweDAyLCAweGU0LCAKKzB4MTIsIDB4MWEsIDB4NGEsIDB4NzQsIDB4MDMsIDB4MTIsIDB4MWMsIDB4MDIsIDB4OTAsIDB4ZmEsIDB4YmEsIDB4ZTAsIDB4ZmYsIDB4YTMsIDB4ZTAsIDB4ODUsIAorMHgzOCwgMHg4MiwgMHg4NSwgMHgzNywgMHg4MywgMHhjZiwgMHhmMCwgMHhhMywgMHhlZiwgMHhmMCwgMHg5MCwgMHhmZiwgMHgwMSwgMHhlMCwgMHgxMiwgMHgxYiwgCisweDRjLCAweDA5LCAweDRhLCAweDAyLCAweDA5LCAweDZjLCAweDA0LCAweDA5LCAweDhlLCAweDA1LCAweDA5LCAweGJhLCAweDA2LCAweDA5LCAweGQ4LCAweDA3LCAKKzB4MDksIDB4ZjYsIDB4MDgsIDB4MGEsIDB4MTQsIDB4MDksIDB4MGEsIDB4MzIsIDB4MGIsIDB4MGEsIDB4ZTcsIDB4ODAsIDB4MGQsIDB4NmYsIDB4ODEsIDB4MGQsIAorMHhhMCwgMHg4MiwgMHgwYiwgMHgyZSwgMHg4MywgMHgwYiwgMHg3NywgMHg4NCwgMHgwYiwgMHg5NiwgMHg4NSwgMHgwYiwgMHhkYiwgMHg4NiwgMHgwYywgMHgyNiwgCisweDg3LCAweDBjLCAweGI3LCAweDg4LCAweDBkLCAweDQyLCAweDg5LCAweDBhLCAweDUwLCAweDkyLCAweDBhLCAweDUwLCAweDkzLCAweDBlLCAweDUzLCAweGMwLCAKKzB4MGUsIDB4N2YsIDB4YzEsIDB4MGUsIDB4OTAsIDB4YzIsIDB4MDAsIDB4MDAsIDB4MGYsIDB4MTUsIDB4ZTUsIDB4MzUsIDB4MjAsIDB4ZTcsIDB4MDUsIDB4N2YsIAorMHgwNSwgMHgwMiwgMHgzMCwgMHhlYywgMHgxMiwgMHgxYywgMHhjMSwgMHg2MCwgMHgwMywgMHgwNCwgMHg3MCwgMHgwOSwgMHhlZiwgMHhmZCwgMHg3YywgMHgwMCwgCisweDdmLCAweDA3LCAweDAyLCAweDExLCAweDE2LCAweGU0LCAweGZkLCAweDdmLCAweDA3LCAweDAyLCAweDJmLCAweDE4LCAweGU1LCAweDM1LCAweDIwLCAweGU3LCAKKzB4MDUsIDB4N2YsIDB4MDUsIDB4MDIsIDB4MzAsIDB4ZWMsIDB4MTIsIDB4MWMsIDB4YzEsIDB4NjAsIDB4MDMsIDB4MDQsIDB4NzAsIDB4MDksIDB4ZWYsIDB4ZmQsIAorMHg3YywgMHgwMCwgMHg3ZiwgMHgwYywgMHgwMiwgMHgxMSwgMHgxNiwgMHhlNCwgMHhmZCwgMHg3ZiwgMHgwNywgMHgwMiwgMHgyZiwgMHgxOCwgMHhlNSwgMHgzNSwgCisweDMwLCAweGU3LCAweDAzLCAweDAyLCAweDBmLCAweDI5LCAweDEyLCAweDFkLCAweDkyLCAweDUwLCAweDA2LCAweGU1LCAweDNjLCAweDQ1LCAweDNiLCAweDcwLCAKKzB4MDUsIDB4N2YsIDB4MDIsIDB4MDIsIDB4MzAsIDB4ZWMsIDB4OTAsIDB4ZmEsIDB4YjYsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4MjQsIDB4ZmQsIDB4NTAsIDB4MDIsIAorMHg4MCwgMHgwMywgMHgwMiwgMHgzMSwgMHg2ZiwgMHg3ZiwgMHgwNywgMHgwMiwgMHgzMCwgMHhlYywgMHhlNSwgMHgzNSwgMHgzMCwgMHhlNywgMHgwMywgMHgwMiwgCisweDBmLCAweDI5LCAweDEyLCAweDFjLCAweGMxLCAweDYwLCAweDAzLCAweDA0LCAweDcwLCAweDA5LCAweGVmLCAweGZkLCAweDdjLCAweDAwLCAweDdmLCAweDA4LCAKKzB4MDIsIDB4MTEsIDB4MTYsIDB4N2YsIDB4MDcsIDB4MDIsIDB4MzAsIDB4ZWMsIDB4ZTUsIDB4MzUsIDB4MzAsIDB4ZTcsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjksIAorMHgxMiwgMHgxYywgMHhjMSwgMHg2MCwgMHgwMywgMHgwNCwgMHg3MCwgMHgwOSwgMHhlZiwgMHhmZCwgMHg3YywgMHgwMCwgMHg3ZiwgMHgwOSwgMHgwMiwgMHgxMSwgCisweDE2LCAweDdmLCAweDA3LCAweDAyLCAweDMwLCAweGVjLCAweGU1LCAweDM1LCAweDMwLCAweGU3LCAweDAzLCAweDAyLCAweDBmLCAweDI5LCAweDEyLCAweDFjLCAKKzB4YzEsIDB4NjAsIDB4MDMsIDB4MDQsIDB4NzAsIDB4MDksIDB4ZWYsIDB4ZmQsIDB4N2MsIDB4MDAsIDB4N2YsIDB4MGEsIDB4MDIsIDB4MTEsIDB4MTYsIDB4N2YsIAorMHgwNywgMHgwMiwgMHgzMCwgMHhlYywgMHhlNSwgMHgzNSwgMHgzMCwgMHhlNywgMHgwMywgMHgwMiwgMHgwZiwgMHgyOSwgMHgxMiwgMHgxYywgMHhjMSwgMHg2MCwgCisweDAzLCAweDA0LCAweDcwLCAweDA5LCAweGVmLCAweGZkLCAweDdjLCAweDAwLCAweDdmLCAweDBiLCAweDAyLCAweDExLCAweDE2LCAweDdmLCAweDA3LCAweDAyLCAKKzB4MzAsIDB4ZWMsIDB4ZTUsIDB4MzUsIDB4MzAsIDB4ZTcsIDB4MDMsIDB4MDIsIDB4MGYsIDB4MjksIDB4MTIsIDB4MWMsIDB4YzEsIDB4NjAsIDB4MDMsIDB4MDQsIAorMHg3MCwgMHgwOSwgMHhlZiwgMHhmZCwgMHg3YywgMHgwMCwgMHg3ZiwgMHgwZSwgMHgwMiwgMHgxMSwgMHgxNiwgMHg3ZiwgMHgwNywgMHgwMiwgMHgzMCwgMHhlYywgCisweGU1LCAweDM1LCAweDMwLCAweGU3LCAweDU2LCAweDEyLCAweDFjLCAweGM5LCAweDcwLCAweDRhLCAweDkwLCAweGZmLCAweDAyLCAweGUwLCAweGY1LCAweDRjLCAKKzB4ZTUsIDB4NGMsIDB4YjQsIDB4ODIsIDB4MDUsIDB4NzUsIDB4NGMsIDB4NjEsIDB4ODAsIDB4MTIsIDB4ZTUsIDB4NGMsIDB4YjQsIDB4ODMsIDB4MDUsIDB4NzUsIAorMHg0YywgMHg2MiwgMHg4MCwgMHgwOCwgMHhlNSwgMHg0YywgMHhjNCwgMHg1NCwgMHhmMCwgMHgwNCwgMHhmNSwgMHg0YywgMHgxMiwgMHgxYiwgMHg3MiwgMHgxMiwgCisweDFkLCAweDhiLCAweDEyLCAweDI1LCAweDM5LCAweDEyLCAweDFjLCAweGQ5LCAweDEyLCAweDFhLCAweDBiLCAweDYwLCAweDA1LCAweDEyLCAweDMxLCAweGJkLCAKKzB4ODAsIDB4MDYsIDB4ODUsIDB4MzMsIDB4MzksIDB4ODUsIDB4MzQsIDB4M2EsIDB4NzUsIDB4MzYsIDB4MDEsIDB4NzUsIDB4MzcsIDB4ZjksIDB4NzUsIDB4MzgsIAorMHg3MiwgMHgwMiwgMHgyYywgMHgwNywgMHhlNCwgMHhmZCwgMHg3ZiwgMHgwNSwgMHgwMiwgMHgyZiwgMHgxOCwgMHgxMiwgMHgxYywgMHhjOSwgMHg2MCwgMHgwNSwgCisweDdmLCAweDA1LCAweDAyLCAweDMwLCAweGVjLCAweDEyLCAweDFkLCAweDkyLCAweDQwLCAweDA1LCAweDdmLCAweDAzLCAweDAyLCAweDMwLCAweGVjLCAweDkwLCAKKzB4ZmYsIDB4MDIsIDB4ZTAsIDB4ZjUsIDB4NGMsIDB4ZTUsIDB4NGMsIDB4YjQsIDB4ODIsIDB4MDUsIDB4NzUsIDB4NGMsIDB4NjEsIDB4ODAsIDB4MTIsIDB4ZTUsIAorMHg0YywgMHhiNCwgMHg4MywgMHgwNSwgMHg3NSwgMHg0YywgMHg2MiwgMHg4MCwgMHgwOCwgMHhlNSwgMHg0YywgMHhjNCwgMHg1NCwgMHhmMCwgMHgwNCwgMHhmNSwgCisweDRjLCAweDEyLCAweDFiLCAweDcyLCAweDAyLCAweDMxLCAweDZmLCAweDEyLCAweDFkLCAweDljLCAweDEyLCAweDJhLCAweDA2LCAweDEyLCAweDFjLCAweDgzLCAKKzB4ZTAsIDB4NTQsIDB4N2YsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OTAsIDB4ZmEsIDB4YjcsIDB4ZjAsIDB4NzgsIDB4NjgsIDB4MTIsIDB4MWIsIAorMHgyOCwgMHg5MCwgMHgwMCwgMHgwMiwgMHgxMiwgMHgxYSwgMHgwYiwgMHgzMCwgMHhlNywgMHhmMiwgMHg5MCwgMHgwMCwgMHgwMiwgMHhlNCwgMHgxMiwgMHgxYSwgCisweDRhLCAweDkwLCAweGZhLCAweGI3LCAweGUwLCAweDQ0LCAweDgwLCAweGZmLCAweGYwLCAweDc4LCAweDdjLCAweGU2LCAweGZjLCAweDA4LCAweGU2LCAweDhjLCAKKzB4ODMsIDB4MTIsIDB4MWMsIDB4OGIsIDB4ZWYsIDB4ZjAsIDB4MTIsIDB4MzEsIDB4YzcsIDB4ZTQsIDB4ZmYsIDB4MDIsIDB4MzAsIDB4ZWMsIDB4OTAsIDB4ZmEsIAorMHhiNiwgMHhlMCwgMHg2NCwgMHgwMSwgMHg3MCwgMHgxZiwgMHg5MCwgMHhmYSwgMHhiYSwgMHhlMCwgMHhmZiwgMHg3ZSwgMHgwMCwgMHg3MCwgMHgwNiwgMHhhMywgCisweGUwLCAweGY1LCAweDkwLCAweDgwLCAweDJkLCAweGMyLCAweGFmLCAweGVmLCAweGY0LCAweDUyLCAweDkwLCAweDkwLCAweGZhLCAweGJiLCAweGUwLCAweDQyLCAKKzB4OTAsIDB4ZDIsIDB4YWYsIDB4ODAsIDB4MWQsIDB4OTAsIDB4ZmEsIDB4YmEsIDB4ZTAsIDB4ZmYsIDB4N2UsIDB4MDAsIDB4NzAsIDB4MDYsIDB4YTMsIDB4ZTAsIAorMHhmNSwgMHhiMCwgMHg4MCwgMHgwZSwgMHhjMiwgMHhhZiwgMHhlZiwgMHhmNCwgMHg1MiwgMHhiMCwgMHg5MCwgMHhmYSwgMHhiYiwgMHhlMCwgMHg0MiwgMHhiMCwgCisweGQyLCAweGFmLCAweGU0LCAweGZmLCAweDAyLCAweDMwLCAweGVjLCAweDEyLCAweDFjLCAweDMwLCAweDkwLCAweGZhLCAweGI2LCAweGUwLCAweGI0LCAweDAxLCAKKzB4MGEsIDB4MTIsIDB4MWMsIDB4MTEsIDB4ZTUsIDB4OTAsIDB4MTIsIDB4MWEsIDB4MzgsIDB4ODAsIDB4MDgsIDB4MTIsIDB4MWMsIDB4MTEsIDB4ZTUsIDB4YjAsIAorMHgxMiwgMHgxYSwgMHgzOCwgMHgwMiwgMHgwZiwgMHhhOSwgMHg5MCwgMHhmYSwgMHhiNiwgMHhlMCwgMHhmZiwgMHgyNCwgMHgxMiwgMHgxMiwgMHgxYywgMHg0MSwgCisweDIwLCAweGUxLCAweDMzLCAweDEyLCAweDFjLCAweGQwLCAweGVmLCAweDI0LCAweGZjLCAweDYwLCAweDE4LCAweDA0LCAweDcwLCAweDI4LCAweDkwLCAweGZhLCAKKzB4YjcsIDB4ZTAsIDB4NjAsIDB4MDksIDB4OTAsIDB4ZmYsIDB4YTQsIDB4ZTAsIDB4NDQsIDB4MTAsIDB4ZjAsIDB4ODAsIDB4MTksIDB4MTIsIDB4MWQsIDB4YTYsIAorMHhmMCwgMHg4MCwgMHgxMywgMHg5MCwgMHhmYSwgMHhiNywgMHhlMCwgMHg2MCwgMHgwOSwgMHg5MCwgMHhmZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgxMCwgMHhmMCwgCisweDgwLCAweDA0LCAweDEyLCAweDFkLCAweGFkLCAweGYwLCAweGU0LCAweGZmLCAweDAyLCAweDMwLCAweGVjLCAweDkwLCAweGZhLCAweGI2LCAweGUwLCAweGZmLCAKKzB4MjQsIDB4MTIsIDB4MTIsIDB4MWMsIDB4NDEsIDB4MjAsIDB4ZTEsIDB4MzksIDB4MTIsIDB4MWMsIDB4ZDAsIDB4ZWYsIDB4MjQsIDB4ZmMsIDB4NjAsIDB4MWIsIAorMHgwNCwgMHg3MCwgMHgyZSwgMHg5MCwgMHhmYSwgMHhiNywgMHhlMCwgMHg2MCwgMHgwOSwgMHg5MCwgMHhmZiwgMHhhNCwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgCisweDgwLCAweDFmLCAweDkwLCAweGZmLCAweGE0LCAweGUwLCAweDU0LCAweGRmLCAweGYwLCAweDgwLCAweDE2LCAweDkwLCAweGZhLCAweGI3LCAweGUwLCAweDYwLCAKKzB4MDksIDB4OTAsIDB4ZmYsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4ODAsIDB4MDcsIDB4OTAsIDB4ZmYsIDB4YjQsIDB4ZTAsIDB4NTQsIDB4ZGYsIAorMHhmMCwgMHhlNCwgMHhmZiwgMHgwMiwgMHgzMCwgMHhlYywgMHgxMiwgMHgxYywgMHhkMCwgMHgxMiwgMHgxYywgMHhjMSwgMHg2MCwgMHg0ZCwgMHgwNCwgMHg2MCwgCisweDAzLCAweDAyLCAweDBjLCAweGIyLCAweDkwLCAweGZhLCAweGI3LCAweGUwLCAweDYwLCAweDBmLCAweDkwLCAweGZmLCAweGE0LCAweDEyLCAweDFjLCAweDNhLCAKKzB4MzAsIDB4ZTEsIDB4NmYsIDB4MTIsIDB4MWQsIDB4N2MsIDB4MDIsIDB4MGMsIDB4YjIsIDB4OTAsIDB4ZmYsIDB4YTQsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4MTIsIAorMHgxYywgMHgzZCwgMHhmZSwgMHgzMCwgMHhlMSwgMHg1YywgMHgzMCwgMHhlMiwgMHgxMSwgMHgzMCwgMHhiNCwgMHgwNSwgMHgxMiwgMHgxZCwgMHg3YywgMHg4MCwgCisweDUxLCAweDkwLCAweGZmLCAweGE0LCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDgwLCAweDQ4LCAweDMwLCAweDk1LCAweDA1LCAweDEyLCAweDFkLCAweDdjLCAKKzB4ODAsIDB4NDAsIDB4OTAsIDB4ZmYsIDB4YTQsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4ODAsIDB4MzcsIDB4OTAsIDB4ZmEsIDB4YjcsIDB4ZTAsIDB4NjAsIAorMHgxMiwgMHg5MCwgMHhmZiwgMHhiNCwgMHgxMiwgMHgxYywgMHgzYSwgMHgzMCwgMHhlMSwgMHgyOCwgMHg5MCwgMHhmZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMiwgCisweGYwLCAweDgwLCAweDFmLCAweDkwLCAweGZmLCAweGI0LCAweGUwLCAweDU0LCAweGZiLCAweDEyLCAweDFjLCAweDNkLCAweDMwLCAweGUxLCAweDEzLCAweDMwLCAKKzB4OTMsIDB4MDksIDB4OTAsIDB4ZmYsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ODAsIDB4MDcsIDB4OTAsIDB4ZmYsIDB4YjQsIDB4ZTAsIDB4NTQsIAorMHhmZCwgMHhmMCwgMHhlNCwgMHhmZiwgMHgwMiwgMHgzMCwgMHhlYywgMHgxMiwgMHgxYywgMHhkMCwgMHg5MCwgMHhmYSwgMHhiNiwgMHhlMCwgMHgyNCwgMHhmYywgCisweDYwLCAweDQwLCAweDA0LCAweDcwLCAweDc4LCAweDkwLCAweGZhLCAweGI3LCAweGUwLCAweDYwLCAweDFkLCAweDkwLCAweGZmLCAweGEyLCAweGUwLCAweDQ0LCAKKzB4NDAsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4MzAsIDB4ZTcsIDB4NjUsIDB4ZDIsIDB4MDMsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4ZGYsIDB4ZjAsIDB4OTAsIAorMHhmZiwgMHhhMywgMHhlZiwgMHg1NCwgMHg3ZiwgMHhmMCwgMHg4MCwgMHg1NSwgMHgzMCwgMHgwMywgMHgwZSwgMHg5MCwgMHhmZiwgMHhhMywgMHhlMCwgMHg0NCwgCisweDgwLCAweGYwLCAweGMyLCAweDAzLCAweGEzLCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDkwLCAweGZmLCAweGEyLCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAKKzB4ODAsIDB4M2IsIDB4OTAsIDB4ZmEsIDB4YjcsIDB4ZTAsIDB4NjAsIDB4MWQsIDB4OTAsIDB4ZmYsIDB4YjIsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4YTMsIAorMHhlMCwgMHhmZiwgMHgzMCwgMHhlNywgMHgyOCwgMHhkMiwgMHgwNCwgMHhhMywgMHhlMCwgMHg1NCwgMHhkZiwgMHhmMCwgMHg5MCwgMHhmZiwgMHhiMywgMHhlZiwgCisweDU0LCAweDdmLCAweGYwLCAweDgwLCAweDE4LCAweDMwLCAweDA0LCAweDBlLCAweDkwLCAweGZmLCAweGIzLCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweGMyLCAKKzB4MDQsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4YjIsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4ZTQsIDB4ZmYsIDB4MDIsIAorMHgzMCwgMHhlYywgMHgxMiwgMHgxYywgMHgzMCwgMHg5MCwgMHhmYSwgMHhiNiwgMHhlMCwgMHgyNCwgMHhmYywgMHg2MCwgMHgwZiwgMHgwNCwgMHg3MCwgMHgxNiwgCisweDkwLCAweGZmLCAweGE2LCAweGUwLCAweDEyLCAweDFjLCAweDExLCAweDEyLCAweDFhLCAweDM4LCAweDgwLCAweDBhLCAweDkwLCAweGZmLCAweGI2LCAweGUwLCAKKzB4MTIsIDB4MWMsIDB4MTEsIDB4MTIsIDB4MWEsIDB4MzgsIDB4NzUsIDB4MzksIDB4MDAsIDB4NzUsIDB4M2EsIDB4MDEsIDB4MDIsIDB4MmMsIDB4MDcsIDB4ZTQsIAorMHhmZiwgMHgxMiwgMHgzMCwgMHhlYywgMHgxMiwgMHgxZCwgMHgzNywgMHg3ZiwgMHgwMywgMHgxMiwgMHgxMiwgMHgxOSwgMHg5MCwgMHhmOSwgMHgxNSwgMHhlMCwgCisweDMwLCAweGU0LCAweDA4LCAweDkwLCAweGZmLCAweDkzLCAweDc0LCAweDgwLCAweGYwLCAweDgwLCAweDEwLCAweDkwLCAweGZmLCAweGZjLCAweGUwLCAweDU0LCAKKzB4N2YsIDB4ZjAsIDB4N2YsIDB4ZmYsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MzAsIDB4MTYsIDB4YzIsIDB4OTAsIDB4YzIsIDB4YWYsIDB4MDAsIDB4ODAsIDB4ZmQsIAorMHhlNCwgMHhmNSwgMHg0ZSwgMHhmNSwgMHg0ZiwgMHg5MCwgMHhmYSwgMHhiYywgMHg3NCwgMHgzZSwgMHhmMCwgMHhhMywgMHhlNCwgMHhmMCwgMHg5MCwgMHhmYSwgCisweGI0LCAweGYwLCAweGEzLCAweDc0LCAweDE1LCAweGYwLCAweGUwLCAweDU0LCAweDNmLCAweGZmLCAweGMzLCAweDc0LCAweDQwLCAweDlmLCAweDkwLCAweGZhLCAKKzB4YjksIDB4ZjAsIDB4ZDMsIDB4OTQsIDB4MDAsIDB4ZTQsIDB4OTQsIDB4M2UsIDB4NDAsIDB4MDgsIDB4OTAsIDB4ZmEsIDB4YmQsIDB4ZTAsIDB4OTAsIDB4ZmEsIAorMHhiOSwgMHhmMCwgMHgxMiwgMHgwZiwgMHg1MCwgMHhlNSwgMHgzMSwgMHg0NSwgMHgzMCwgMHg3MCwgMHg3MywgMHgxMiwgMHgxYywgMHg0YSwgMHg5MCwgMHhmYSwgCisweGJjLCAweDEyLCAweDFkLCAweDU2LCAweDYwLCAweDI3LCAweGQzLCAweGVmLCAweDk0LCAweDQwLCAweGVlLCAweDk0LCAweDAwLCAweDQwLCAweDA4LCAweDkwLCAKKzB4ZmEsIDB4YjksIDB4NzQsIDB4NDAsIDB4ZjAsIDB4ODAsIDB4MDgsIDB4OTAsIDB4ZmEsIDB4YmQsIDB4ZTAsIDB4OTAsIDB4ZmEsIDB4YjksIDB4ZjAsIDB4MTIsIAorMHgwZiwgMHg1MCwgMHhlNSwgMHgzMSwgMHg0NSwgMHgzMCwgMHg3MCwgMHg0NiwgMHgxMiwgMHgxYywgMHg0YSwgMHg4MCwgMHhkMSwgMHg3NSwgMHg0YywgMHgwMiwgCisweDkwLCAweGZhLCAweGJjLCAweGU0LCAweGYwLCAweGEzLCAweDA0LCAweGYwLCAweDkwLCAweGZhLCAweGI0LCAweGU0LCAweGYwLCAweGEzLCAweDc0LCAweDBmLCAKKzB4ZjAsIDB4N2IsIDB4MDAsIDB4N2EsIDB4MDAsIDB4NzksIDB4NGMsIDB4OTAsIDB4ZmEsIDB4YmQsIDB4ZTAsIDB4ZjUsIDB4NGEsIDB4N2QsIDB4MGYsIDB4N2MsIAorMHgwMCwgMHgxMiwgMHgyOCwgMHg5ZiwgMHg3NSwgMHgzMCwgMHgwMCwgMHg4ZiwgMHgzMSwgMHg3YiwgMHgwMCwgMHg3YSwgMHgwMCwgMHg3OSwgMHg0YywgMHhlNCwgCisweGY1LCAweDJkLCAweGY1LCAweDJlLCAweDdkLCAweDAxLCAweDEyLCAweDI1LCAweGQ3LCAweGU0LCAweGY1LCAweDMwLCAweGY1LCAweDMxLCAweGFmLCAweDMxLCAKKzB4MDIsIDB4MzAsIDB4ZWMsIDB4MTIsIDB4MWMsIDB4ZDAsIDB4MzAsIDB4ZTcsIDB4MTAsIDB4ZTAsIDB4NTQsIDB4MGYsIDB4OTAsIDB4ZjksIDB4NjQsIDB4ZjAsIAorMHhkMywgMHg5NCwgMHgwMCwgMHg0MCwgMHgxNSwgMHhjMiwgMHg5NSwgMHg4MCwgMHgxMSwgMHg5MCwgMHhmYSwgMHhiNywgMHhlMCwgMHg1NCwgMHgwZiwgMHg5MCwgCisweGY5LCAweDYzLCAweGYwLCAweGQzLCAweDk0LCAweDAwLCAweDQwLCAweDAyLCAweGMyLCAweDk0LCAweGU0LCAweGZmLCAweDAyLCAweDMwLCAweGVjLCAweDEyLCAKKzB4MWQsIDB4OWMsIDB4YmYsIDB4MDEsIDB4MDQsIDB4ZDIsIDB4OTMsIDB4ODAsIDB4MDIsIDB4YzIsIDB4OTMsIDB4ZTQsIDB4ZmYsIDB4MDIsIDB4MzAsIDB4ZWMsIAorMHgxMiwgMHgxYywgMHhkMCwgMHg1NCwgMHgwMywgMHgxNCwgMHg2MCwgMHgwYSwgMHgxNCwgMHg2MCwgMHgwZiwgMHgxNCwgMHg2MCwgMHgwOCwgMHgyNCwgMHgwMywgCisweDcwLCAweDJiLCAweGQyLCAweDkxLCAweDgwLCAweDI3LCAweGMyLCAweDkxLCAweDgwLCAweDIzLCAweDEyLCAweDFkLCAweGE2LCAweDEyLCAweDBmLCAweDc4LCAKKzB4NjAsIDB4MDQsIDB4ZDIsIDB4OTEsIDB4ODAsIDB4MTcsIDB4OTAsIDB4ZmYsIDB4YTQsIDB4ZTAsIDB4NDQsIDB4MTAsIDB4MTIsIDB4MGYsIDB4NzgsIDB4ZmYsIAorMHhiZiwgMHhhMCwgMHgwNCwgMHhjMiwgMHg5MSwgMHg4MCwgMHgwMiwgMHhkMiwgMHg5MSwgMHgxMiwgMHgxZCwgMHhhNiwgMHhmMCwgMHg5MCwgMHhmYSwgMHhiNywgCisweGUwLCAweDU0LCAweDBjLCAweGZmLCAweDEzLCAweDEzLCAweDU0LCAweDNmLCAweDE0LCAweDYwLCAweDBhLCAweDE0LCAweDYwLCAweDBmLCAweDE0LCAweDYwLCAKKzB4MDgsIDB4MjQsIDB4MDMsIDB4NzAsIDB4MmIsIDB4ZDIsIDB4OTIsIDB4ODAsIDB4MjcsIDB4YzIsIDB4OTIsIDB4ODAsIDB4MjMsIDB4MTIsIDB4MWQsIDB4YWQsIAorMHgxMiwgMHgwZiwgMHg5OCwgMHg2MCwgMHgwNCwgMHhkMiwgMHg5MiwgMHg4MCwgMHgxNywgMHg5MCwgMHhmZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgxMCwgMHgxMiwgCisweDBmLCAweDk4LCAweGZmLCAweGJmLCAweGEwLCAweDA0LCAweGMyLCAweDkyLCAweDgwLCAweDAyLCAweGQyLCAweDkyLCAweDEyLCAweDFkLCAweGFkLCAweGYwLCAKKzB4ZTQsIDB4ZmYsIDB4MDIsIDB4MzAsIDB4ZWMsIDB4ZTUsIDB4MzUsIDB4MzAsIDB4ZTcsIDB4MDcsIDB4ZTQsIDB4ZmQsIDB4N2YsIDB4MDUsIDB4MDIsIDB4MmYsIAorMHgxOCwgMHg3ZiwgMHgwNSwgMHgwMiwgMHgzMCwgMHhlYywgMHgxMiwgMHgzMSwgMHhiZCwgMHgyMiwgMHg3YiwgMHgwMSwgMHg3YSwgMHhmYSwgMHg3OSwgMHhiMywgCisweDkwLCAweGZhLCAweGI0LCAweGUwLCAweGY1LCAweDJkLCAweGEzLCAweGUwLCAweGY1LCAweDJlLCAweDdkLCAweDAxLCAweDEyLCAweDI1LCAweGQ3LCAweDkwLCAKKzB4ZmEsIDB4YjQsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDMsIDB4MTIsIDB4MWEsIDB4NmMsIDB4YWIsIDB4MzYsIDB4YWEsIDB4MzcsIDB4YTksIDB4MzgsIDB4MjIsIAorMHhhYSwgMHg0ZSwgMHhhOSwgMHg0ZiwgMHg3YiwgMHhmZiwgMHg5MCwgMHhmYSwgMHhiNCwgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHhmZCwgMHg5MCwgMHhmYSwgCisweGI5LCAweGUwLCAweGY1LCAweDRhLCAweDEyLCAweDI4LCAweDlmLCAweDc1LCAweDMwLCAweDAwLCAweDhmLCAweDMxLCAweDIyLCAweDEyLCAweDIyLCAweGEwLCAKKzB4N2UsIDB4MDAsIDB4OGUsIDB4MzAsIDB4OGYsIDB4MzEsIDB4ZWYsIDB4MjIsIDB4ZjAsIDB4N2YsIDB4MDEsIDB4MTIsIDB4MTIsIDB4MTksIDB4OTAsIDB4ZmYsIAorMHhhNiwgMHhlMCwgMHg5MCwgMHhmYSwgMHhiOCwgMHhmMCwgMHg1NCwgMHhhMCwgMHgyMiwgMHgxMiwgMHgyNSwgMHhkNywgMHg4ZiwgMHg0YywgMHg3ZSwgMHgwMCwgCisweGMzLCAweGVmLCAweDk1LCAweDNjLCAweGVlLCAweDk1LCAweDNiLCAweDIyLCAweGYwLCAweDdmLCAweDAxLCAweDEyLCAweDEyLCAweDE5LCAweDkwLCAweGZmLCAKKzB4YjYsIDB4ZTAsIDB4OTAsIDB4ZmEsIDB4YjgsIDB4ZjAsIDB4NTQsIDB4YTAsIDB4MjIsIDB4NzUsIDB4MzksIDB4MDAsIDB4NzUsIDB4M2EsIDB4MDEsIDB4MDIsIAorMHgyYywgMHgwNywgMHg5MCwgMHhmYSwgMHhiNiwgMHhlMCwgMHhmZiwgMHgwMiwgMHgzMSwgMHg4MiwgMHg4ZSwgMHgzOSwgMHg4ZiwgMHgzYSwgMHgwMiwgMHgyYywgCisweDA3LCAweDEyLCAweDIyLCAweGEwLCAweDdlLCAweDAwLCAweDhlLCAweDMwLCAweDhmLCAweDMxLCAweGVmLCAweDIyLCAweDdkLCAweDAxLCAweDEyLCAweDI1LCAKKzB4ZDcsIDB4OTAsIDB4ZmEsIDB4YjEsIDB4ZTAsIDB4MjIsIDB4ZWYsIDB4OTAsIDB4ZjgsIDB4MDQsIDB4ZjAsIDB4MjIsIDB4YzAsIDB4YTgsIDB4YzIsIDB4YWYsIAorMHhlZSwgMHg2MCwgMHgwYSwgMHhjMCwgMHgwNSwgMHg3ZCwgMHg3ZiwgMHhkZCwgMHhmZSwgMHhkZSwgMHhmYSwgMHhkMCwgMHgwNSwgMHhlZiwgMHhjMywgMHg5NCwgCisweDE1LCAweDUwLCAweDAzLCAweGQwLCAweGE4LCAweDIyLCAweDEzLCAweDcwLCAweDAzLCAweGQwLCAweGE4LCAweDIyLCAweGZmLCAweGQ1LCAweDA3LCAweGZkLCAKKzB4ZDAsIDB4YTgsIDB4MjIsIDB4YzAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4YzAsIDB4MDIsIDB4YzAsIDB4MDQsIDB4YzAsIDB4MDUsIDB4ZTUsIDB4M2UsIDB4MjQsIAorMHgwOCwgMHhmOCwgMHg4NiwgMHgwNSwgMHg1MywgMHgwNSwgMHg3ZiwgMHg3YywgMHhmZiwgMHgxMiwgMHgxMCwgMHg3OCwgMHg3ZiwgMHgwMCwgMHg3ZSwgMHgwMCwgCisweGU1LCAweDQzLCAweDYwLCAweDQ2LCAweGZjLCAweDkwLCAweGY5LCAweDFiLCAweGUwLCAweDU0LCAweDdmLCAweDZkLCAweDcwLCAweDBmLCAweGMwLCAweDgzLCAKKzB4YzAsIDB4ODIsIDB4YTMsIDB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4YTMsIDB4MTUsIDB4NDMsIDB4ODAsIDB4MDcsIDB4YTMsIDB4YTMsIDB4YTMsIAorMHhkYywgMHhlNiwgMHg4MCwgMHgyNiwgMHhkYywgMHgwNiwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHg4MCwgMHgxZSwgMHhlMCwgMHhmOCwgMHhhMywgMHhlMCwgCisweGY5LCAweGEzLCAweGUwLCAweGZhLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGU4LCAweGYwLCAweGEzLCAweGU5LCAweGYwLCAweGEzLCAweGVhLCAweGYwLCAKKzB4YTMsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ODAsIDB4ZGEsIDB4MTIsIDB4MTEsIDB4MGYsIDB4ZDAsIDB4MDUsIDB4ZDAsIAorMHgwNCwgMHhkMCwgMHgwMiwgMHhkMCwgMHgwMSwgMHhkMCwgMHgwMCwgMHgyMiwgMHg4NSwgMHhhOCwgMHg0NCwgMHg3NSwgMHhhOCwgMHg4OCwgMHhlYywgMHg3MCwgCisweDAyLCAweDdjLCAweDNmLCAweDhjLCAweDNkLCAweDIyLCAweGU1LCAweDNlLCAweDI0LCAweDA4LCAweGY4LCAweDc2LCAweDAwLCAweDEyLCAweDExLCAweDY2LCAKKzB4ODAsIDB4ZmIsIDB4YzAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4YzAsIDB4MDIsIDB4YzAsIDB4MDQsIDB4YzAsIDB4MDYsIDB4N2MsIDB4ZmYsIDB4MTIsIDB4MTAsIAorMHg3OCwgMHhlNSwgMHg0MywgMHg2MCwgMHg0MiwgMHhmZSwgMHg5MCwgMHhmOSwgMHgxYiwgMHhlMCwgMHg1NCwgMHg3ZiwgMHg2ZiwgMHg3MCwgMHgwYiwgMHhjMCwgCisweDgzLCAweGMwLCAweDgyLCAweGEzLCAweGEzLCAweGEzLCAweDE1LCAweDQzLCAweDgwLCAweDA3LCAweGEzLCAweGEzLCAweGEzLCAweGRlLCAweGVhLCAweDgwLCAKKzB4MjYsIDB4ZGUsIDB4MDYsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ODAsIDB4ZDgsIDB4ZTAsIDB4ZjgsIDB4YTMsIDB4ZTAsIDB4ZjksIDB4YTMsIDB4ZTAsIAorMHhmYSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhlOCwgMHhmMCwgMHhhMywgMHhlOSwgMHhmMCwgMHhhMywgMHhlYSwgMHhmMCwgMHhhMywgMHhjMCwgMHg4MywgCisweGMwLCAweDgyLCAweGEzLCAweGEzLCAweGEzLCAweDgwLCAweGRhLCAweDc4LCAweDA4LCAweDA4LCAweDc5LCAweDE4LCAweDA5LCAweDdjLCAweDAxLCAweGU2LCAKKzB4NTQsIDB4N2YsIDB4NmYsIDB4NzAsIDB4MDYsIDB4NzYsIDB4MDAsIDB4NzcsIDB4MDAsIDB4ODAsIDB4MDYsIDB4MDgsIDB4MDksIDB4MGMsIDB4YmMsIDB4MDgsIAorMHhlZSwgMHgxMiwgMHgxMSwgMHgwZiwgMHhkMCwgMHgwNiwgMHhkMCwgMHgwNCwgMHhkMCwgMHgwMiwgMHhkMCwgMHgwMSwgMHhkMCwgMHgwMCwgMHgyMiwgMHg3NSwgCisweDNkLCAweDAwLCAweDg1LCAweDQ0LCAweGE4LCAweDIyLCAweGMwLCAweGYwLCAweGMwLCAweDgyLCAweGMwLCAweDgzLCAweGMzLCAweGU1LCAweDQzLCAweDI0LCAKKzB4ZTgsIDB4NTAsIDB4MDUsIDB4MTIsIDB4MTEsIDB4NjYsIDB4ODAsIDB4ZjQsIDB4ZWYsIDB4NjAsIDB4MzEsIDB4OTAsIDB4MzAsIDB4NTQsIDB4ZTQsIDB4OTMsIAorMHhjMywgMHg5ZiwgMHg0MCwgMHgyZiwgMHhjMCwgMHgwNCwgMHg3YywgMHhmZiwgMHgxMiwgMHgxMCwgMHg3OCwgMHhkMCwgMHgwNCwgMHg0MywgMHgwNywgMHg4MCwgCisweGU1LCAweDQzLCAweDc1LCAweGYwLCAweDAzLCAweGE0LCAweDI0LCAweDFiLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweGY5LCAweGY1LCAweDgzLCAweGVmLCAKKzB4ZjAsIDB4ZWMsIDB4YTMsIDB4ZjAsIDB4ZWQsIDB4YTMsIDB4ZjAsIDB4MDUsIDB4NDMsIDB4MTIsIDB4MTEsIDB4MGYsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIAorMHhkMCwgMHhmMCwgMHgyMiwgMHgwMiwgMHgxMSwgMHg5NCwgMHhjMCwgMHgwNCwgMHg3YywgMHgyMCwgMHhkMiwgMHg4YywgMHhkMiwgMHg4ZCwgMHhkNSwgMHgwNCwgCisweGZkLCAweGQwLCAweDA0LCAweDIyLCAweDc1LCAweGE4LCAweDAwLCAweDc1LCAweDg4LCAweDAwLCAweDc1LCAweGI4LCAweDAwLCAweDc1LCAweGYwLCAweDAwLCAKKzB4NzUsIDB4ZDAsIDB4MDAsIDB4ZTQsIDB4ZjgsIDB4OTAsIDB4ZjgsIDB4MDQsIDB4ZjAsIDB4OTAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MDgsIDB4YjgsIDB4MDAsIAorMHhmYiwgMHgwMiwgMHgwMCwgMHgwMCwgMHhjMiwgMHhhZiwgMHhlNCwgMHg5MCwgMHhmZiwgMHg0OCwgMHhmMCwgMHg5MCwgMHhmZiwgMHg1MCwgMHhmMCwgMHg5MCwgCisweGZmLCAweDA4LCAweGYwLCAweDkwLCAweGZmLCAweDEwLCAweGYwLCAweDkwLCAweGZmLCAweDgwLCAweGYwLCAweGEzLCAweGEzLCAweGYwLCAweGQyLCAweGIxLCAKKzB4YzIsIDB4YjAsIDB4N2UsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4MTIsIDB4MGYsIDB4ZGMsIDB4N2UsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4MTIsIDB4MGYsIDB4ZGMsIAorMHg3ZSwgMHhmZiwgMHg3ZiwgMHhmZiwgMHgxMiwgMHgwZiwgMHhkYywgMHhkMiwgMHhiMCwgMHhkMiwgMHhiMSwgMHg3ZSwgMHhmZiwgMHg3ZiwgMHhmZiwgMHgxMiwgCisweDBmLCAweGRjLCAweDdlLCAweGZmLCAweDdmLCAweGZmLCAweDEyLCAweDBmLCAweGRjLCAweDdlLCAweGZmLCAweDdmLCAweGZmLCAweDEyLCAweDBmLCAweGRjLCAKKzB4ODAsIDB4Y2MsIDB4YzMsIDB4ZWUsIDB4OTQsIDB4MDIsIDB4NTAsIDB4MDQsIDB4N2UsIDB4MDMsIDB4N2YsIDB4ZTgsIDB4ZWYsIDB4ZjQsIDB4ZmYsIDB4ZWUsIAorMHhmNCwgMHhmZSwgMHgwZiwgMHhiZiwgMHgwMCwgMHgwMSwgMHgwZSwgMHg4ZiwgMHg0MiwgMHg4ZSwgMHg0MSwgMHgyMiwgMHhjMywgMHhlZiwgMHg5NCwgMHhiYywgCisweGVlLCAweDk0LCAweDAyLCAweDUwLCAweDA0LCAweDdlLCAweDA3LCAweDdmLCAweGQwLCAweGVmLCAweGY0LCAweGZmLCAweGVlLCAweGY0LCAweGZlLCAweDBmLCAKKzB4YmYsIDB4MDAsIDB4MDEsIDB4MGUsIDB4OGYsIDB4NDAsIDB4OGUsIDB4M2YsIDB4MjIsIDB4ZWYsIDB4NzAsIDB4MDEsIDB4MjIsIDB4YzAsIDB4MDAsIDB4YzAsIAorMHhhOCwgMHhjMiwgMHhhZiwgMHhlNSwgMHgzZSwgMHgyNCwgMHgxOCwgMHhmOCwgMHhhNiwgMHgwNywgMHhlNSwgMHgzZSwgMHgyNCwgMHgwOCwgMHhmOCwgMHhjNiwgCisweDU0LCAweDdmLCAweGY2LCAweGQwLCAweGE4LCAweGU2LCAweDMwLCAweGU3LCAweDAzLCAweGQwLCAweDAwLCAweDIyLCAweDEyLCAweDExLCAweDY2LCAweDgwLCAKKzB4ZjQsIDB4YzAsIDB4MDAsIDB4N2YsIDB4MDEsIDB4ZWYsIDB4MjQsIDB4MDgsIDB4ZjgsIDB4ZTYsIDB4NjAsIDB4MDksIDB4MGYsIDB4YmYsIDB4MDgsIDB4ZjUsIAorMHgxMiwgMHgxMSwgMHg2NiwgMHg4MCwgMHhlZSwgMHhkMCwgMHgwMCwgMHgyMiwgMHhjMCwgMHhmMCwgMHhjMCwgMHg4MiwgMHhjMCwgMHg4MywgMHhjMCwgMHgwMCwgCisweGMwLCAweDA2LCAweGMwLCAweDA0LCAweGVkLCAweDI0LCAweDEwLCAweGY4LCAweDc2LCAweDlhLCAweGVkLCAweDc1LCAweGYwLCAweDIxLCAweGE0LCAweDI0LCAKKzB4MDUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4ZjgsIDB4ZjUsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODMsIDB4YTMsIDB4YTMsIDB4ZTQsIDB4NzgsIAorMHgwZCwgMHhmMCwgMHhhMywgMHhkOCwgMHhmYywgMHhlZiwgMHg1NCwgMHg3ZiwgMHg3NSwgMHhmMCwgMHgwMiwgMHhhNCwgMHgyNCwgMHgzNiwgMHhmNSwgMHg4MiwgCisweGU1LCAweGYwLCAweDM0LCAweDMwLCAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweGZlLCAweDc0LCAweDAxLCAweDkzLCAweGZjLCAweGQwLCAweDgzLCAweGQwLCAKKzB4ODIsIDB4ZWMsIDB4ZjAsIDB4YTMsIDB4ZWUsIDB4ZjAsIDB4ZWQsIDB4MjQsIDB4MDgsIDB4ZjgsIDB4ZWYsIDB4NDQsIDB4ODAsIDB4ZjYsIDB4ZDAsIDB4MDQsIAorMHhkMCwgMHgwNiwgMHhkMCwgMHgwMCwgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgMHhkMCwgMHhmMCwgMHgyMiwgMHg3NSwgMHgzZSwgMHgwMCwgMHg3NSwgMHg0MywgCisweDAwLCAweDdhLCAweDA4LCAweDc5LCAweDE4LCAweDc4LCAweDA4LCAweDc2LCAweDAwLCAweDc3LCAweDAwLCAweDA4LCAweDA5LCAweGRhLCAweGY4LCAweDkwLCAKKzB4ZjgsIDB4MDQsIDB4ZTAsIDB4ZmMsIDB4OTAsIDB4MzAsIDB4NTQsIDB4ZTQsIDB4OTMsIDB4YzMsIDB4OWMsIDB4NTAsIDB4MDUsIDB4ZTQsIDB4OTAsIDB4ZjgsIAorMHgwNCwgMHhmMCwgMHg3OCwgMHgwOCwgMHg3NCwgMHg4MCwgMHg0NCwgMHg3ZiwgMHhmNiwgMHg3NCwgMHgwMSwgMHg0NCwgMHgxMCwgMHhmNSwgMHg4OSwgMHg3NSwgCisweGI4LCAweDAwLCAweGQyLCAweGFiLCAweGQyLCAweGE5LCAweDIyLCAweDc1LCAweDgxLCAweDhiLCAweGQyLCAweDhlLCAweGQyLCAweDhjLCAweGQyLCAweGFmLCAKKzB4ZTUsIDB4NDMsIDB4NjAsIDB4MzYsIDB4ZmYsIDB4OTAsIDB4ZjksIDB4MWIsIDB4ZTAsIDB4NTQsIDB4ODAsIDB4NjAsIDB4MjgsIDB4NzgsIDB4MDgsIDB4NzksIAorMHgwOCwgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmYSwgMHg3YiwgMHgwMCwgMHhlNiwgMHg1NCwgMHg3ZiwgMHhiNSwgMHgwMiwgMHgwMiwgMHg3YiwgMHhmZiwgMHgwOCwgCisweGQ5LCAweGY1LCAweGViLCAweDcwLCAweDEwLCAweGVhLCAweGYwLCAweGMwLCAweDA3LCAweDEyLCAweDEyLCAweDQxLCAweGFkLCAweDA3LCAweGFmLCAweDAyLCAKKzB4MTIsIDB4MTIsIDB4NTgsIDB4ZDAsIDB4MDcsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ZGYsIDB4Y2UsIDB4MTIsIDB4MTEsIDB4NjYsIDB4ODAsIDB4YzEsIDB4OGYsIAorMHgyNCwgMHgxMiwgMHgyYSwgMHgwNiwgMHg3OCwgMHg4MCwgMHhlNiwgMHhmZSwgMHgwOCwgMHhlNiwgMHhmZiwgMHg4ZSwgMHg4MywgMHgyNCwgMHgwOCwgMHgxMiwgCisweDIxLCAweGYzLCAweGUwLCAweGZkLCAweDEyLCAweDIyLCAweDhhLCAweDhhLCAweDgzLCAweDI0LCAweDBhLCAweDEyLCAweDIxLCAweGYzLCAweGVkLCAweGYwLCAKKzB4MTIsIDB4MjIsIDB4NTYsIDB4MjQsIDB4MDcsIDB4MTIsIDB4MjEsIDB4ZjMsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MjIsIDB4OTksIDB4MjQsIDB4MDksIDB4MTIsIAorMHgyMSwgMHhmMywgMHhlZiwgMHhmMCwgMHg5MCwgMHhmOSwgMHgxNSwgMHhlMCwgMHgzMCwgMHhlNCwgMHgyMCwgMHgwOCwgMHgxMiwgMHgyMiwgMHgwOSwgMHhjMCwgCisweDgzLCAweGMwLCAweDgyLCAweGEzLCAweGUwLCAweDI1LCAweGUwLCAweGZmLCAweDA1LCAweDgyLCAweGQ1LCAweDgyLCAweDAyLCAweDE1LCAweDgzLCAweDE1LCAKKzB4ODIsIDB4ZTAsIDB4MzMsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZjAsIDB4YTMsIDB4ZWYsIDB4ZjAsIDB4NzgsIDB4ODAsIDB4MTIsIDB4MjIsIDB4MDksIAorMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHhmZCwgMHhlYywgMHhmZiwgMHgxMiwgMHgyMiwgMHg4YSwgMHg4YSwgMHg4MywgMHgyNCwgMHgwOCwgMHgxMiwgMHgyMSwgCisweGYzLCAweGVmLCAweGYwLCAweGVkLCAweDEyLCAweDIyLCAweDk5LCAweDI0LCAweDA3LCAweDEyLCAweDIxLCAweGYzLCAweGVkLCAweGYwLCAweDEyLCAweDIxLCAKKzB4ZmIsIDB4ZTAsIDB4ZmYsIDB4MzAsIDB4ZTcsIDB4MTksIDB4MTIsIDB4MjIsIDB4NmUsIDB4MTIsIDB4MjEsIDB4ZjMsIDB4ZTAsIDB4NjAsIDB4MDksIDB4MTIsIAorMHgyMSwgMHhmYiwgMHhlZiwgMHg0NCwgMHgwMiwgMHhmMCwgMHg4MCwgMHgwNywgMHgxMiwgMHgyMSwgMHhmYiwgMHhlZiwgMHg1NCwgMHhmZCwgMHhmMCwgMHg3OCwgCisweDdlLCAweDEyLCAweDIyLCAweDA5LCAweGEzLCAweGEzLCAweGUwLCAweGZmLCAweDUzLCAweDA3LCAweGM3LCAweDA4LCAweGU2LCAweGZjLCAweDA4LCAweGU2LCAKKzB4ZmQsIDB4MTIsIDB4MjIsIDB4NDMsIDB4YTMsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MTIsIDB4OGQsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZTUsIDB4ODIsIDB4MjQsIAorMHgwNSwgMHgxMiwgMHgyMSwgMHhmMywgMHhlMCwgMHg5MCwgMHgzMSwgMHg5NCwgMHg5MywgMHg0MiwgMHgwNywgMHg1MywgMHgwNywgMHhmYiwgMHg3OCwgMHg4MCwgCisweGU2LCAweGZjLCAweDA4LCAweGU2LCAweDhjLCAweDgzLCAweDI0LCAweDA2LCAweDEyLCAweDIxLCAweGYzLCAweGUwLCAweDYwLCAweDAzLCAweDQzLCAweDA3LCAKKzB4MDQsIDB4NTMsIDB4MDcsIDB4ZmMsIDB4NzgsIDB4ODAsIDB4MTIsIDB4MjIsIDB4N2EsIDB4MjQsIDB4MDQsIDB4MTIsIDB4MjEsIDB4ZjMsIDB4ZTAsIDB4NDIsIAorMHgwNywgMHg0MywgMHgwNywgMHg4MCwgMHgxMiwgMHgyMiwgMHg4YSwgMHhmNSwgMHg4MiwgMHg4YSwgMHg4MywgMHhhMywgMHhhMywgMHhlZiwgMHhmMCwgMHgxMiwgCisweDIyLCAweDk5LCAweDI0LCAweDA0LCAweDEyLCAweDIxLCAweGYzLCAweGUwLCAweGZmLCAweDhkLCAweDgyLCAweDhjLCAweDgzLCAweGEzLCAweGEzLCAweGUwLCAKKzB4ZmMsIDB4YTMsIDB4ZTAsIDB4ZmQsIDB4MzAsIDB4ZTEsIDB4MDUsIDB4NTMsIDB4MDcsIDB4ZGYsIDB4ODAsIDB4MDMsIDB4NDMsIDB4MDcsIDB4MjAsIDB4ZWMsIAorMHgzMCwgMHhlNCwgMHgwNSwgMHg1MywgMHgwNywgMHhlZiwgMHg4MCwgMHgwMywgMHg0MywgMHgwNywgMHgxMCwgMHgxMiwgMHgyMSwgMHhmYiwgMHhlMCwgMHhmZSwgCisweDU0LCAweDAzLCAweDYwLCAweDczLCAweDUzLCAweDA3LCAweGRmLCAweGVlLCAweDMwLCAweGUxLCAweDY5LCAweDc4LCAweDgwLCAweDEyLCAweDIyLCAweDZmLCAKKzB4MTIsIDB4MjEsIDB4ZjMsIDB4ZTAsIDB4MTIsIDB4MWIsIDB4NGMsIDB4MTQsIDB4YTYsIDB4MDAsIDB4MTQsIDB4ZGEsIDB4MDEsIDB4MTQsIDB4ZGYsIDB4MDMsIAorMHgxNCwgMHhkYSwgMHgwNSwgMHgxNCwgMHhkZiwgMHgwNywgMHgxNCwgMHhkYSwgMHgwOSwgMHgxNCwgMHhkZiwgMHgwYiwgMHgxNCwgMHhkYSwgMHgwZCwgMHgxNCwgCisweGRmLCAweDBmLCAweDAwLCAweDAwLCAweDE0LCAweGU3LCAweGU1LCAweDI0LCAweDY0LCAweDAzLCAweDcwLCAweDIxLCAweDkwLCAweGY5LCAweDE1LCAweGUwLCAKKzB4MzAsIDB4ZTIsIDB4MGQsIDB4MzAsIDB4YjQsIDB4MDUsIDB4NDMsIDB4MDcsIDB4MDIsIDB4ODAsIDB4MmMsIDB4NTMsIDB4MDcsIDB4ZmQsIDB4ODAsIDB4MjcsIAorMHgzMCwgMHg5NSwgMHgwNSwgMHg0MywgMHgwNywgMHgwMiwgMHg4MCwgMHgxZiwgMHg1MywgMHgwNywgMHhmZCwgMHg4MCwgMHgxYSwgMHgzMCwgMHg5MywgMHgwNSwgCisweDQzLCAweDA3LCAweDAyLCAweDgwLCAweDEyLCAweDUzLCAweDA3LCAweGZkLCAweDgwLCAweDBkLCAweDQzLCAweDA3LCAweDAyLCAweDgwLCAweDA4LCAweDUzLCAKKzB4MDcsIDB4ZmQsIDB4ODAsIDB4MDMsIDB4NTMsIDB4MDcsIDB4ZmQsIDB4MTIsIDB4MjIsIDB4NzgsIDB4MjQsIDB4MDQsIDB4MTIsIDB4MjEsIDB4ZjMsIDB4ZWYsIAorMHhmMCwgMHg4ZCwgMHg4MiwgMHg4YywgMHg4MywgMHhhMywgMHhhMywgMHhhMywgMHhlMCwgMHhmZiwgMHgxMiwgMHgyMSwgMHhmYiwgMHhlMCwgMHhmZSwgMHg1NCwgCisweDAzLCAweDcwLCAweDAzLCAweDAyLCAweDE1LCAweGQ3LCAweGVlLCAweDIwLCAweGUxLCAweDAzLCAweDAyLCAweDE1LCAweGQ0LCAweDEyLCAweDIyLCAweDZlLCAKKzB4MTIsIDB4MjEsIDB4ZjMsIDB4ZTAsIDB4MTIsIDB4MWIsIDB4NGMsIDB4MTUsIDB4MzYsIDB4MDAsIDB4MTUsIDB4NmMsIDB4MDEsIDB4MTUsIDB4NmMsIDB4MDMsIAorMHgxNSwgMHhhMCwgMHgwNSwgMHgxNSwgMHhhMCwgMHgwNywgMHgxNSwgMHg4NiwgMHgwOSwgMHgxNSwgMHg4NiwgMHgwYiwgMHgxNSwgMHhiYSwgMHgwZCwgMHgxNSwgCisweGJhLCAweDBmLCAweDAwLCAweDAwLCAweDE1LCAweGQ3LCAweGU1LCAweDI0LCAweDY0LCAweDAzLCAweDcwLCAweDIzLCAweDkwLCAweGY5LCAweDE1LCAweGUwLCAKKzB4MzAsIDB4ZTIsIDB4MGYsIDB4MzAsIDB4YjEsIDB4MDYsIDB4NTMsIDB4MDcsIDB4N2YsIDB4MDIsIDB4MTUsIDB4ZDcsIDB4NDMsIDB4MDcsIDB4ODAsIDB4MDIsIAorMHgxNSwgMHhkNywgMHgzMCwgMHg5NCwgMHgwNSwgMHg1MywgMHgwNywgMHg3ZiwgMHg4MCwgMHg3ZCwgMHg0MywgMHgwNywgMHg4MCwgMHg4MCwgMHg3OCwgMHgzMCwgCisweDkyLCAweDA1LCAweDUzLCAweDA3LCAweDdmLCAweDgwLCAweDcwLCAweDQzLCAweDA3LCAweDgwLCAweDgwLCAweDZiLCAweGU1LCAweDI0LCAweGI0LCAweDAzLCAKKzB4MDksIDB4OTAsIDB4ZmYsIDB4OWUsIDB4ZTAsIDB4NTQsIDB4ZWYsIDB4ZjAsIDB4ODAsIDB4MDcsIDB4OTAsIDB4ZmYsIDB4OWUsIDB4ZTAsIDB4NTQsIDB4ZGYsIAorMHhmMCwgMHg1MywgMHgwNywgMHg3ZiwgMHg4MCwgMHg1MSwgMHhlNSwgMHgyNCwgMHhiNCwgMHgwMywgMHgwOSwgMHg5MCwgMHhmZiwgMHg5ZSwgMHhlMCwgMHg0NCwgCisweDEwLCAweGYwLCAweDgwLCAweDA3LCAweDkwLCAweGZmLCAweDllLCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDUzLCAweDA3LCAweDdmLCAweDgwLCAweDM3LCAKKzB4ZTUsIDB4MjQsIDB4YjQsIDB4MDMsIDB4MDksIDB4OTAsIDB4ZmYsIDB4OWUsIDB4ZTAsIDB4NTQsIDB4ZWYsIDB4ZjAsIDB4ODAsIDB4MDcsIDB4OTAsIDB4ZmYsIAorMHg5ZSwgMHhlMCwgMHg1NCwgMHhkZiwgMHhmMCwgMHg0MywgMHgwNywgMHg4MCwgMHg4MCwgMHgxZCwgMHhlNSwgMHgyNCwgMHhiNCwgMHgwMywgMHgwOSwgMHg5MCwgCisweGZmLCAweDllLCAweGUwLCAweDQ0LCAweDEwLCAweGYwLCAweDgwLCAweDA3LCAweDkwLCAweGZmLCAweDllLCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDQzLCAKKzB4MDcsIDB4ODAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4MDcsIDB4N2YsIDB4NzgsIDB4ODAsIDB4MTIsIDB4MjIsIDB4M2YsIDB4ZTAsIDB4ZmMsIDB4YTMsIDB4ZTAsIAorMHhmZCwgMHgzMCwgMHhlMCwgMHgwNSwgMHg0MywgMHgwNywgMHgyMCwgMHg4MCwgMHgwMywgMHg1MywgMHgwNywgMHhkZiwgMHhlYywgMHgzMCwgMHhlMywgMHgwNSwgCisweDQzLCAweDA3LCAweDQwLCAweDgwLCAweDAzLCAweDUzLCAweDA3LCAweGJmLCAweGVjLCAweDMwLCAweGUwLCAweDA1LCAweDQzLCAweDA3LCAweDEwLCAweDgwLCAKKzB4MDMsIDB4NTMsIDB4MDcsIDB4ZWYsIDB4ZWQsIDB4MzAsIDB4ZTQsIDB4MDUsIDB4NDMsIDB4MDcsIDB4MDgsIDB4ODAsIDB4MDMsIDB4NTMsIDB4MDcsIDB4ZjcsIAorMHhlZCwgMHgzMCwgMHhlNSwgMHgwNSwgMHg0MywgMHgwNywgMHgwNCwgMHg4MCwgMHgwMywgMHg1MywgMHgwNywgMHhmYiwgMHhlZCwgMHgzMCwgMHhlNiwgMHgwNSwgCisweDQzLCAweDA3LCAweDAxLCAweDgwLCAweDAzLCAweDUzLCAweDA3LCAweGZlLCAweGVkLCAweDMwLCAweGU3LCAweDA1LCAweDQzLCAweDA3LCAweDAyLCAweDgwLCAKKzB4MDMsIDB4NTMsIDB4MDcsIDB4ZmQsIDB4NzgsIDB4N2UsIDB4MTIsIDB4MjIsIDB4M2YsIDB4YTMsIDB4ZWYsIDB4ZjAsIDB4MTIsIDB4MzEsIDB4YzcsIDB4N2YsIAorMHgwMCwgMHgyMiwgMHg5MCwgMHhmZiwgMHhmYSwgMHg3NCwgMHgwOCwgMHhmMCwgMHhhMywgMHg3NCwgMHgxNiwgMHhmMCwgMHg5MCwgMHhmZiwgMHhmOSwgMHg3NCwgCisweDAyLCAweGYwLCAweDdiLCAweDAxLCAweDdhLCAweGZhLCAweDc5LCAweGNjLCAweGU0LCAweGZkLCAweDEyLCAweDIyLCAweGEwLCAweDkwLCAweGZhLCAweGNjLCAKKzB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDMsIDB4MTIsIDB4MWEsIDB4NmMsIDB4MTIsIDB4MTgsIDB4ZTIsIDB4ZTUsIDB4MjMsIDB4MzAsIDB4ZTcsIDB4MDIsIDB4ZDIsIAorMHgwMiwgMHg3YiwgMHgwMCwgMHg3YSwgMHgwMCwgMHg3OSwgMHgyNCwgMHg5MCwgMHhmYSwgMHhjYywgMHhlMCwgMHhmNSwgMHgyZCwgMHhhMywgMHhlMCwgMHhmNSwgCisweDJlLCAweDdkLCAweDAxLCAweDEyLCAweDI1LCAweGQ3LCAweDkwLCAweGZhLCAweGNjLCAweGU0LCAweGYwLCAweGEzLCAweDc0LCAweDBiLCAweGYwLCAweDdiLCAKKzB4MDAsIDB4N2EsIDB4MDAsIDB4NzksIDB4MjMsIDB4NzUsIDB4MmQsIDB4MDAsIDB4ZjUsIDB4MmUsIDB4N2QsIDB4MDEsIDB4MTIsIDB4MjUsIDB4ZDcsIDB4ZTUsIAorMHgyMywgMHgyNCwgMHg4MCwgMHg5MCwgMHhmZiwgMHhmOCwgMHhmMCwgMHhlNSwgMHgyMywgMHg2NCwgMHgwNywgMHg2MCwgMHgxZSwgMHhlNSwgMHgyMywgMHg2NCwgCisweDA2LCAweDYwLCAweDE4LCAweGU1LCAweDIzLCAweDY0LCAweDE0LCAweDYwLCAweDEyLCAweGU1LCAweDIzLCAweDY0LCAweDQxLCAweDYwLCAweDBjLCAweGU1LCAKKzB4MjMsIDB4NjQsIDB4MWEsIDB4NzAsIDB4NDYsIDB4ZTUsIDB4MjQsIDB4NjQsIDB4MDIsIDB4NzAsIDB4NDAsIDB4ZTUsIDB4MjMsIDB4YjQsIDB4MDcsIDB4MTYsIAorMHhkMiwgMHg5NCwgMHhkMiwgMHg5NSwgMHhkMiwgMHg5MiwgMHhkMiwgMHg5MywgMHg5MCwgMHhmOSwgMHgxNSwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHhhMywgCisweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDgwLCAweDFlLCAweGU1LCAweDIzLCAweGI0LCAweDQxLCAweDEyLCAweDkwLCAweGY5LCAweDE1LCAweGUwLCAweDQ0LCAKKzB4MDYsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MDYsIDB4ZjAsIDB4ZDIsIDB4YjEsIDB4ZDIsIDB4YjQsIDB4ODAsIDB4MDcsIDB4OTAsIDB4ZjksIDB4MTUsIAorMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHhmOSwgMHgxNiwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHhlNSwgMHgyMywgMHg2NCwgMHg0MiwgMHg2MCwgCisweDA1LCAweGU1LCAweDIzLCAweGI0LCAweDQzLCAweDBjLCAweDkwLCAweGY5LCAweDE1LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweGEzLCAweGUwLCAweDQ0LCAKKzB4ODAsIDB4ZjAsIDB4OTAsIDB4ZmEsIDB4Y2MsIDB4ZTQsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MGQsIDB4ZjAsIDB4MTIsIDB4MTgsIDB4ZTIsIDB4OTAsIDB4ZmYsIAorMHhmNSwgMHhlNSwgMHgyMywgMHhmMCwgMHhlNCwgMHhmNSwgMHgzNSwgMHhmNSwgMHgzMywgMHhmNSwgMHgzNCwgMHhmNSwgMHgzMiwgMHgxMiwgMHgxZCwgMHg4NCwgCisweDEyLCAweDFjLCAweDMwLCAweDEyLCAweDFkLCAweDhiLCAweDkwLCAweGY5LCAweDY3LCAweDEyLCAweDFiLCAweDQzLCAweDkwLCAweGY5LCAweDZjLCAweDEyLCAKKzB4MWIsIDB4NDMsIDB4OTAsIDB4ZmYsIDB4ZmYsIDB4ZTQsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4ODMsIDB4ZTAsIDB4ZTQsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4ODEsIAorMHg3NCwgMHg4MCwgMHhmMCwgMHhhMywgMHg3NCwgMHg4NCwgMHhmMCwgMHg5MCwgMHhmZiwgMHg4MCwgMHhmMCwgMHhlNCwgMHhmNSwgMHgyMywgMHhlNSwgMHgyMywgCisweDEyLCAweDFjLCAweGE3LCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweGU1LCAweDIzLCAweDEyLCAweDFjLCAweGI1LCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAKKzB4MDUsIDB4MjMsIDB4ZTUsIDB4MjMsIDB4YjQsIDB4MDcsIDB4ZTcsIDB4NzgsIDB4N2EsIDB4NzYsIDB4ZmUsIDB4MDgsIDB4NzYsIDB4ZjAsIDB4OTAsIDB4MzEsIAorMHg0ZCwgMHhlNCwgMHg5MywgMHhmZiwgMHg3OCwgMHg3OCwgMHhmNiwgMHhmZCwgMHhhZCwgMHgwNywgMHg5MCwgMHgzMSwgMHg1YSwgMHhlNCwgMHg5MywgMHhmZiwgCisweDA4LCAweGY2LCAweGZmLCAweGVkLCAweDU0LCAweDBmLCAweGZkLCAweDEyLCAweDFjLCAweDk3LCAweDc0LCAweDg0LCAweGYwLCAweGVkLCAweDc1LCAweGYwLCAKKzB4MDgsIDB4YTQsIDB4MjQsIDB4NDcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4ZmYsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4YzMsIDB4NzQsIDB4ZjAsIAorMHg5ZiwgMHg3OCwgMHg3YiwgMHhmNiwgMHg3NCwgMHhmZSwgMHg5NCwgMHgwMCwgMHgxOCwgMHgxMiwgMHgxYywgMHgyOCwgMHhjZSwgMHhjMywgMHgxMywgMHhjZSwgCisweDEzLCAweGQ4LCAweGY5LCAweGZmLCAweGVkLCAweDEyLCAweDFjLCAweGY4LCAweGVmLCAweGYwLCAweGVkLCAweDEyLCAweDFkLCAweDFlLCAweGU0LCAweGY1LCAKKzB4MjMsIDB4ZTUsIDB4MjMsIDB4OTAsIDB4MzEsIDB4NDcsIDB4OTMsIDB4ZmYsIDB4NzgsIDB4NzgsIDB4ZjYsIDB4ZmQsIDB4ZTUsIDB4MjMsIDB4MjUsIDB4ZTAsIAorMHgyNCwgMHg0ZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgzMSwgMHhmNSwgMHg4MywgMHhlNCwgMHg5MywgMHgwOCwgMHhmNiwgMHhlZCwgMHgzMCwgMHhlNywgCisweDUzLCAweDE4LCAweGU2LCAweDU0LCAweDBmLCAweGY5LCAweDEyLCAweDFjLCAweDk3LCAweDEyLCAweDFkLCAweDA2LCAweDI0LCAweDQ3LCAweGY1LCAweDgyLCAKKzB4ZTQsIDB4MzQsIDB4ZmYsIDB4MTIsIDB4MWMsIDB4MTgsIDB4Y2UsIDB4YzMsIDB4MTMsIDB4Y2UsIDB4MTMsIDB4ZDgsIDB4ZjksIDB4ZmYsIDB4ZTksIDB4MTIsIAorMHgxYywgMHhmOCwgMHhlZiwgMHhmMCwgMHgxMiwgMHgxYywgMHgxZiwgMHhjZSwgMHhjMywgMHgxMywgMHhjZSwgMHgxMywgMHhkOCwgMHhmOSwgMHgxMiwgMHgxZCwgCisweDBiLCAweDI0LCAweDQ1LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweGZmLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweGU5LCAweDEyLCAweDFkLCAweDFlLCAKKzB4ZTksIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4NDYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4ZmYsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4ODAsIAorMHhmMCwgMHgwMiwgMHgxOCwgMHhiNywgMHg3OCwgMHg3OCwgMHhlNiwgMHg1NCwgMHgwZiwgMHhmOSwgMHgxMiwgMHgxYywgMHhlYSwgMHgxMiwgMHgxZCwgMHgwNiwgCisweDI0LCAweDA3LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweGZmLCAweDEyLCAweDFjLCAweDE4LCAweGNlLCAweGMzLCAweDEzLCAweGNlLCAweDEzLCAweGQ4LCAKKzB4ZjksIDB4MTIsIDB4MWQsIDB4MGIsIDB4MjQsIDB4MDEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4ZmYsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MTIsIAorMHgxYywgMHgxZiwgMHhjZSwgMHhjMywgMHgxMywgMHhjZSwgMHgxMywgMHhkOCwgMHhmOSwgMHgxMiwgMHgxZCwgMHgwYiwgMHgyNCwgMHgwNSwgMHhmNSwgMHg4MiwgCisweGU0LCAweDM0LCAweGZmLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweGU5LCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAyLCAweGY1LCAweDgyLCAKKzB4ZTQsIDB4MzQsIDB4ZmYsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4ZTksIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDYsIDB4ZjUsIDB4ODIsIAorMHhlNCwgMHgzNCwgMHhmZiwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHgwNSwgMHgyMywgMHhlNSwgMHgyMywgMHg2NCwgMHgwNCwgMHg2MCwgMHgwMywgMHgwMiwgCisweDE3LCAweGUxLCAweDkwLCAweDMxLCAweDRjLCAweGU0LCAweDkzLCAweGZmLCAweDc4LCAweDc4LCAweGY2LCAweDEyLCAweDFjLCAweGU4LCAweGU0LCAweGYwLCAKKzB4OTAsIDB4MzEsIDB4NGIsIDB4OTMsIDB4ZmYsIDB4ZjYsIDB4MTIsIDB4MWMsIDB4OTUsIDB4ZTQsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4ZmQsIDB4NzQsIDB4MDUsIAorMHhmMCwgMHgyMiwgMHg3YiwgMHgwMCwgMHg3YSwgMHgwMCwgMHg3OSwgMHgyMywgMHg5MCwgMHhmYSwgMHhjYywgMHhlNCwgMHg3NSwgMHhmMCwgMHgwMSwgMHgxMiwgCisweDFhLCAweDgyLCAweDg1LCAweGYwLCAweDJlLCAweGY1LCAweDJkLCAweDdkLCAweDAxLCAweDAyLCAweDI1LCAweGQ3LCAweGU3LCAweDA5LCAweGY2LCAweDA4LCAKKzB4ZGYsIDB4ZmEsIDB4ODAsIDB4NDYsIDB4ZTcsIDB4MDksIDB4ZjIsIDB4MDgsIDB4ZGYsIDB4ZmEsIDB4ODAsIDB4M2UsIDB4ODgsIDB4ODIsIDB4OGMsIDB4ODMsIAorMHhlNywgMHgwOSwgMHhmMCwgMHhhMywgMHhkZiwgMHhmYSwgMHg4MCwgMHgzMiwgMHhlMywgMHgwOSwgMHhmNiwgMHgwOCwgMHhkZiwgMHhmYSwgMHg4MCwgMHg3OCwgCisweGUzLCAweDA5LCAweGYyLCAweDA4LCAweGRmLCAweGZhLCAweDgwLCAweDcwLCAweDg4LCAweDgyLCAweDhjLCAweDgzLCAweGUzLCAweDA5LCAweGYwLCAweGEzLCAKKzB4ZGYsIDB4ZmEsIDB4ODAsIDB4NjQsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTAsIDB4YTMsIDB4ZjYsIDB4MDgsIDB4ZGYsIDB4ZmEsIDB4ODAsIDB4NTgsIAorMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHhhMywgMHhmMiwgMHgwOCwgMHhkZiwgMHhmYSwgMHg4MCwgMHg0YywgMHg4MCwgMHhkMiwgMHg4MCwgMHhmYSwgCisweDgwLCAweGM2LCAweDgwLCAweGQ0LCAweDgwLCAweDY5LCAweDgwLCAweGYyLCAweDgwLCAweDMzLCAweDgwLCAweDEwLCAweDgwLCAweGE2LCAweDgwLCAweGVhLCAKKzB4ODAsIDB4OWEsIDB4ODAsIDB4YTgsIDB4ODAsIDB4ZGEsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4Y2EsIDB4ODAsIDB4MzMsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIAorMHhlYywgMHhmYSwgMHhlNCwgMHg5MywgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYywgMHhjNSwgMHg4MywgMHhjYywgMHhmMCwgMHhhMywgMHhjOCwgCisweGM1LCAweDgyLCAweGM4LCAweGNjLCAweGM1LCAweDgzLCAweGNjLCAweGRmLCAweGU5LCAweGRlLCAweGU3LCAweDgwLCAweDBkLCAweDg5LCAweDgyLCAweDhhLCAKKzB4ODMsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjYsIDB4MDgsIDB4ZGYsIDB4ZjksIDB4ZWMsIDB4ZmEsIDB4YTksIDB4ZjAsIDB4ZWQsIDB4ZmIsIDB4MjIsIDB4ODksIAorMHg4MiwgMHg4YSwgMHg4MywgMHhlYywgMHhmYSwgMHhlMCwgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYywgMHhjNSwgMHg4MywgMHhjYywgMHhmMCwgCisweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNjLCAweGM1LCAweDgzLCAweGNjLCAweGRmLCAweGVhLCAweGRlLCAweGU4LCAweDgwLCAweGRiLCAweDg5LCAKKzB4ODIsIDB4OGEsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjIsIDB4MDgsIDB4ZGYsIDB4ZjksIDB4ODAsIDB4Y2MsIDB4ODgsIDB4ZjAsIDB4ZWYsIDB4NjAsIAorMHgwMSwgMHgwZSwgMHg0ZSwgMHg2MCwgMHhjMywgMHg4OCwgMHhmMCwgMHhlZCwgMHgyNCwgMHgwMiwgMHhiNCwgMHgwNCwgMHgwMCwgMHg1MCwgMHhiOSwgMHhmNSwgCisweDgyLCAweGViLCAweDI0LCAweDAyLCAweGI0LCAweDA0LCAweDAwLCAweDUwLCAweGFmLCAweDIzLCAweDIzLCAweDQ1LCAweDgyLCAweDIzLCAweDkwLCAweDE5LCAKKzB4NGMsIDB4NzMsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDIsIDB4ZTcsIDB4MjIsIDB4YmIsIAorMHhmZSwgMHgwMiwgMHhlMywgMHgyMiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMiwgMHhiYiwgMHgwMSwgMHgwYywgMHhlNSwgMHg4MiwgCisweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDA2LCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAKKzB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4MjIsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIAorMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMiwgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhmMCwgCisweDIyLCAweDUwLCAweDAyLCAweGY3LCAweDIyLCAweGJiLCAweGZlLCAweDAxLCAweGYzLCAweDIyLCAweGY4LCAweGJiLCAweDAxLCAweDBkLCAweGU1LCAweDgyLCAKKzB4MjksIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTgsIDB4ZjAsIDB4MjIsIDB4NTAsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIAorMHhjOCwgMHhmNiwgMHgyMiwgMHhiYiwgMHhmZSwgMHgwNSwgMHhlOSwgMHgyNSwgMHg4MiwgMHhjOCwgMHhmMiwgMHgyMiwgMHhjNSwgMHhmMCwgMHhmOCwgMHhhMywgCisweGUwLCAweDI4LCAweGYwLCAweGM1LCAweGYwLCAweGY4LCAweGU1LCAweDgyLCAweDE1LCAweDgyLCAweDcwLCAweDAyLCAweDE1LCAweDgzLCAweGUwLCAweDM4LCAKKzB4ZjAsIDB4MjIsIDB4YTMsIDB4ZjgsIDB4ZTAsIDB4YzUsIDB4ZjAsIDB4MjUsIDB4ZjAsIDB4ZjAsIDB4ZTUsIDB4ODIsIDB4MTUsIDB4ODIsIDB4NzAsIDB4MDIsIAorMHgxNSwgMHg4MywgMHhlMCwgMHhjOCwgMHgzOCwgMHhmMCwgMHhlOCwgMHgyMiwgMHhiYiwgMHgwMSwgMHgxMCwgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgCisweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweGYwLCAweGEzLCAweGUwLCAweDIyLCAweDUwLCAweDA5LCAweGU5LCAweDI1LCAweDgyLCAKKzB4ZjgsIDB4ODYsIDB4ZjAsIDB4MDgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MGEsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4ZjUsIDB4ZjAsIAorMHgwOCwgMHhlMiwgMHgyMiwgMHhlNSwgMHg4MywgMHgyYSwgMHhmNSwgMHg4MywgMHhlOSwgMHg5MywgMHhmNSwgMHhmMCwgMHhhMywgMHhlOSwgMHg5MywgMHgyMiwgCisweGJiLCAweDAxLCAweDBhLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGYwLCAweGU1LCAweGYwLCAweGEzLCAweGYwLCAweDIyLCAweDUwLCAweDA2LCAweGY3LCAKKzB4MDksIDB4YTcsIDB4ZjAsIDB4MTksIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZjMsIDB4ZTUsIDB4ZjAsIDB4MDksIDB4ZjMsIDB4MTksIDB4MjIsIDB4ZjgsIAorMHhiYiwgMHgwMSwgMHgxMSwgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlOCwgMHhmMCwgMHhlNSwgCisweGYwLCAweGEzLCAweGYwLCAweDIyLCAweDUwLCAweDA5LCAweGU5LCAweDI1LCAweDgyLCAweGM4LCAweGY2LCAweDA4LCAweGE2LCAweGYwLCAweDIyLCAweGJiLCAKKzB4ZmUsIDB4MDksIDB4ZTksIDB4MjUsIDB4ODIsIDB4YzgsIDB4ZjIsIDB4ZTUsIDB4ZjAsIDB4MDgsIDB4ZjIsIDB4MjIsIDB4YTQsIDB4MjUsIDB4ODIsIDB4ZjUsIAorMHg4MiwgMHhlNSwgMHhmMCwgMHgzNSwgMHg4MywgMHhmNSwgMHg4MywgMHgyMiwgMHhlNiwgMHhmYiwgMHgwOCwgMHhlNiwgMHhmYSwgMHgwOCwgMHhlNiwgMHhmOSwgCisweDIyLCAweGViLCAweGY2LCAweDA4LCAweGVhLCAweGY2LCAweDA4LCAweGU5LCAweGY2LCAweDIyLCAweGUwLCAweGZiLCAweGEzLCAweGUwLCAweGZhLCAweGEzLCAKKzB4ZTAsIDB4ZjksIDB4MjIsIDB4ZWIsIDB4ZjAsIDB4YTMsIDB4ZWEsIDB4ZjAsIDB4YTMsIDB4ZTksIDB4ZjAsIDB4MjIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIAorMHhmOCwgMHhlNCwgMHg5MywgMHg3MCwgMHgxMiwgMHg3NCwgMHgwMSwgMHg5MywgMHg3MCwgMHgwZCwgMHhhMywgMHhhMywgMHg5MywgMHhmOCwgMHg3NCwgMHgwMSwgCisweDkzLCAweGY1LCAweDgyLCAweDg4LCAweDgzLCAweGU0LCAweDczLCAweDc0LCAweDAyLCAweDkzLCAweDY4LCAweDYwLCAweGVmLCAweGEzLCAweGEzLCAweGEzLCAKKzB4ODAsIDB4ZGYsIDB4YWIsIDB4MzYsIDB4YWEsIDB4MzcsIDB4YTksIDB4MzgsIDB4ZTUsIDB4NGMsIDB4MTIsIDB4MWEsIDB4MzgsIDB4NzQsIDB4MDEsIDB4MjUsIAorMHgzOCwgMHhmNSwgMHgzOCwgMHhlNCwgMHgzNSwgMHgzNywgMHhmNSwgMHgzNywgMHhhYiwgMHgzNiwgMHhmYSwgMHhhOSwgMHgzOCwgMHg3NCwgMHgxMSwgMHgxMiwgCisweDFhLCAweDM4LCAweDc0LCAweDAxLCAweDI1LCAweDM4LCAweGY1LCAweDM4LCAweGU0LCAweDM1LCAweDM3LCAweGY1LCAweDM3LCAweDkwLCAweGZmLCAweDA2LCAKKzB4ZTAsIDB4YWIsIDB4MzYsIDB4YWEsIDB4MzcsIDB4YTksIDB4MzgsIDB4MTIsIDB4MWEsIDB4MzgsIDB4NzQsIDB4MDEsIDB4MjUsIDB4MzgsIDB4ZjUsIDB4MzgsIAorMHhlNCwgMHgzNSwgMHgzNywgMHhmNSwgMHgzNywgMHhhYiwgMHgzNiwgMHhmYSwgMHhhOSwgMHgzOCwgMHhlNCwgMHgxMiwgMHgxYSwgMHgzOCwgMHgwNCwgMHgyNSwgCisweDM4LCAweGY1LCAweDM4LCAweGU0LCAweDM1LCAweDM3LCAweGY1LCAweDM3LCAweGFiLCAweDM2LCAweGZhLCAweGE5LCAweDM4LCAweGU0LCAweDEyLCAweDFhLCAKKzB4MzgsIDB4MDQsIDB4MjUsIDB4MzgsIDB4ZjUsIDB4MzgsIDB4ZTQsIDB4MzUsIDB4MzcsIDB4ZjUsIDB4MzcsIDB4OTAsIDB4ZmYsIDB4MDQsIDB4ZTAsIDB4YWIsIAorMHgzNiwgMHhhYSwgMHgzNywgMHhhOSwgMHgzOCwgMHgxMiwgMHgxYSwgMHgzOCwgMHg3NCwgMHgwMSwgMHgyNSwgMHgzOCwgMHhmNSwgMHgzOCwgMHhlNCwgMHgzNSwgCisweDM3LCAweGY1LCAweDM3LCAweDkwLCAweGZmLCAweDA1LCAweGUwLCAweGFiLCAweDM2LCAweGFhLCAweDM3LCAweGE5LCAweDM4LCAweDEyLCAweDFhLCAweDM4LCAKKzB4NzQsIDB4MDEsIDB4MjUsIDB4MzgsIDB4ZjUsIDB4MzgsIDB4ZTQsIDB4MzUsIDB4MzcsIDB4ZjUsIDB4MzcsIDB4MjIsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIAorMHgwOCwgMHhhYiwgMHgzNiwgMHhhYSwgMHgzNywgMHhhOSwgMHgzOCwgMHgyMiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHhmZCwgMHg3YywgMHgwMCwgMHhjMywgCisweDc4LCAweDdiLCAweGU2LCAweDlkLCAweGY2LCAweDE4LCAweGU2LCAweDljLCAweGY2LCAweGU2LCAweGZlLCAweDA4LCAweGU2LCAweDc4LCAweDAzLCAweDIyLCAKKzB4NzUsIDB4MzYsIDB4MDEsIDB4NzUsIDB4MzcsIDB4ZjksIDB4NzUsIDB4MzgsIDB4NmYsIDB4MjIsIDB4ZTAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4NzQsIDB4MTIsIAorMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHhmOSwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMiwgMHg5MCwgMHhmYSwgMHhiOSwgMHhlMCwgMHhmZiwgMHg3ZSwgCisweDAwLCAweGMzLCAweDkwLCAweGZhLCAweGJkLCAweGUwLCAweDlmLCAweGYwLCAweDkwLCAweGZhLCAweGJjLCAweGUwLCAweDllLCAweGYwLCAweDkwLCAweGZhLCAKKzB4YjQsIDB4ZWUsIDB4OGYsIDB4ZjAsIDB4MTIsIDB4MWEsIDB4NmMsIDB4ZWYsIDB4MjUsIDB4NGYsIDB4ZjUsIDB4NGYsIDB4ZWUsIDB4MzUsIDB4NGUsIDB4ZjUsIAorMHg0ZSwgMHgyMiwgMHg3YiwgMHgwMSwgMHg3YSwgMHhmYSwgMHg3OSwgMHhiMSwgMHg5MCwgMHhmYSwgMHhiNCwgMHhlMCwgMHhmNSwgMHgyZCwgMHhhMywgMHhlMCwgCisweGY1LCAweDJlLCAweDIyLCAweDc4LCAweDdjLCAweGU2LCAweGZlLCAweDA4LCAweGU2LCAweDhlLCAweDgzLCAweDI0LCAweDA0LCAweGY1LCAweDgyLCAweGU0LCAKKzB4MzUsIDB4ODMsIDB4ZjUsIDB4ODMsIDB4MjIsIDB4NTQsIDB4MGYsIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4NDAsIDB4ZjUsIDB4ODIsIDB4ZTQsIAorMHgzNCwgMHhmZiwgMHhmNSwgMHg4MywgMHgyMiwgMHhlNSwgMHg0ZCwgMHg3NSwgMHhmMCwgMHgwOCwgMHhhNCwgMHgyNCwgMHg0OCwgMHhmNSwgMHg4MiwgMHhlNCwgCisweDM0LCAweGZmLCAweDIyLCAweGU1LCAweDRkLCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDA4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweGZmLCAKKzB4MjIsIDB4OTAsIDB4ZmEsIDB4YjYsIDB4ZTAsIDB4ZmYsIDB4MjQsIDB4ZmMsIDB4MjIsIDB4OTAsIDB4ZmYsIDB4MDAsIDB4ZTAsIDB4NTQsIDB4MWYsIDB4MjIsIAorMHg5MCwgMHhmYSwgMHhiYiwgMHhlMCwgMHg5MCwgMHhmYSwgMHhiNywgMHhmMCwgMHgyMiwgMHg3NSwgMHgzMywgMHgwMCwgMHg4ZiwgMHgzNCwgMHg5MCwgMHhmOSwgCisweDZjLCAweDEyLCAweDFiLCAweDNhLCAweDkwLCAweDAwLCAweDAyLCAweDIyLCAweDU0LCAweDBmLCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAwLCAKKzB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4ZmYsIDB4ZjUsIDB4ODMsIDB4MjIsIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4NDEsIDB4ZjUsIDB4ODIsIAorMHhlNCwgMHgzNCwgMHhmZiwgMHhmNSwgMHg4MywgMHgyMiwgMHg3NCwgMHg4MCwgMHhmMCwgMHgwOCwgMHhlNiwgMHhmZiwgMHhlOSwgMHg3NSwgMHhmMCwgMHgwOCwgCisweGE0LCAweDIyLCAweDc0LCAweGFmLCAweDI1LCAweDIyLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweGZhLCAweGY1LCAweDgzLCAweDIyLCAweDc1LCAweGYwLCAKKzB4MDgsIDB4YTQsIDB4MjQsIDB4NDIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4ZmYsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4MjIsIDB4OTAsIAorMHhmZiwgMHg4MiwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHgyMiwgMHg5MCwgMHhmZiwgMHhmZSwgMHhlMCwgMHg0NCwgMHgwMywgMHhmMCwgMHg5MCwgMHhmZiwgCisweGZjLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDIyLCAweDc4LCAweDY3LCAweGU2LCAweDU0LCAweGZkLCAweGY2LCAweDkwLCAweGZmLCAweGZkLCAweDc0LCAKKzB4NjUsIDB4ZjAsIDB4MjIsIDB4MTIsIDB4MWIsIDB4MWMsIDB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4NGUsIDB4MjIsIDB4N2IsIDB4MDEsIDB4N2EsIAorMHhmYSwgMHg3OSwgMHhiNCwgMHgyMiwgMHg5MCwgMHhmZiwgMHg4MCwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHgyMiwgMHg5MCwgMHhmZiwgMHg4MywgMHhlMCwgCisweDU0LCAweDdmLCAweGYwLCAweDIyLCAweGUwLCAweGZmLCAweDkwLCAweGY5LCAweDY3LCAweDAyLCAweDFiLCAweDNhLCAweDkwLCAweGZmLCAweGE0LCAweGUwLCAKKzB4NDQsIDB4MDIsIDB4ZjAsIDB4MjIsIDB4NzUsIDB4MzksIDB4MDEsIDB4NzUsIDB4M2EsIDB4MDksIDB4MjIsIDB4N2IsIDB4MDEsIDB4N2EsIDB4ZjksIDB4NzksIAorMHg2ZiwgMHgyMiwgMHhkMywgMHhlNSwgMHgzYywgMHg5NCwgMHgwOCwgMHhlNSwgMHgzYiwgMHg5NCwgMHgwMSwgMHgyMiwgMHg5MCwgMHhmYSwgMHhiYiwgMHhlMCwgCisweGZmLCAweDkwLCAweGZhLCAweGI3LCAweGYwLCAweDIyLCAweDkwLCAweGZmLCAweGE0LCAweGUwLCAweDU0LCAweGVmLCAweDIyLCAweDkwLCAweGZmLCAweGI0LCAKKzB4ZTAsIDB4NTQsIDB4ZWYsIDB4MjIsIDB4MTIsIDB4MTAsIDB4MDMsIDB4NzgsIDB4ODgsIDB4ZWYsIDB4ZjYsIDB4MTIsIDB4MmEsIDB4MDYsIDB4MTIsIDB4MjIsIAorMHg0YSwgMHg4ZSwgMHg4MywgMHgyNCwgMHgwOSwgMHgxMiwgMHgyMSwgMHhmMywgMHhlMCwgMHhmZCwgMHgxMiwgMHgyMiwgMHgyZCwgMHg5MCwgMHgwMCwgMHgwYSwgCisweDEyLCAweDIyLCAweDUyLCAweDI0LCAweDBhLCAweDEyLCAweDIxLCAweGYzLCAweGUwLCAweDkwLCAweDAwLCAweDBiLCAweDEyLCAweDFhLCAweDRhLCAweDEyLCAKKzB4MjIsIDB4NGEsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4NTMsIDB4MTIsIDB4MjIsIDB4NTYsIDB4MjQsIAorMHgwNCwgMHgxMiwgMHgyMSwgMHhmMywgMHhlMCwgMHhmNSwgMHg1NCwgMHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhhMywgMHhhMywgMHhlMCwgMHhmNSwgMHg1NSwgCisweGU1LCAweDUzLCAweGM0LCAweDEzLCAweDEzLCAweDEzLCAweDU0LCAweDAxLCAweDc4LCAweDg4LCAweGY2LCAweGQzLCAweDk0LCAweDAwLCAweDQwLCAweDA2LCAKKzB4ZTUsIDB4NTQsIDB4MzAsIDB4ZTEsIDB4MDEsIDB4MDYsIDB4NzgsIDB4ODgsIDB4ZTYsIDB4MTIsIDB4MjIsIDB4MmMsIDB4OTAsIDB4MDAsIDB4MGMsIDB4ZWYsIAorMHgxMiwgMHgxYSwgMHg0YSwgMHg3OCwgMHg4MCwgMHgxMiwgMHgyMiwgMHgwOSwgMHhhMywgMHhhMywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmZiwgMHg1MywgCisweDA3LCAweDBjLCAweDUzLCAweDA2LCAweGU2LCAweGU1LCAweDUzLCAweDMwLCAweGU1LCAweDAzLCAweDQzLCAweDA3LCAweDAxLCAweGU1LCAweDU0LCAweDIwLCAKKzB4ZTUsIDB4MGUsIDB4ZTUsIDB4NTMsIDB4NTQsIDB4N2YsIDB4NzAsIDB4MDgsIDB4ZTUsIDB4NTMsIDB4MjAsIDB4ZTcsIDB4MDMsIDB4NDMsIDB4MDcsIDB4MDIsIAorMHhlNSwgMHg1MywgMHgzMCwgMHhlMywgMHgwMywgMHg0MywgMHgwNywgMHgxMCwgMHhlNSwgMHg1MywgMHgzMCwgMHhlMiwgMHgwMywgMHg0MywgMHgwNywgMHgyMCwgCisweGU1LCAweDUzLCAweDU0LCAweDAzLCAweDYwLCAweDAzLCAweDQzLCAweDA3LCAweDQwLCAweGU1LCAweDUzLCAweDMwLCAweGUxLCAweDAzLCAweDQzLCAweDA3LCAKKzB4ODAsIDB4ZTUsIDB4NTMsIDB4MzAsIDB4ZTQsIDB4MDMsIDB4NDMsIDB4MDYsIDB4MDEsIDB4ZTUsIDB4NTMsIDB4MzAsIDB4ZTYsIDB4MDMsIDB4NDMsIDB4MDYsIAorMHgwOCwgMHhlNSwgMHg1NCwgMHgyMCwgMHhlNCwgMHgwZSwgMHhlNSwgMHg1MywgMHg1NCwgMHg3ZiwgMHg3MCwgMHgwOCwgMHhlNSwgMHg1MywgMHgyMCwgMHhlNywgCisweDAzLCAweDQzLCAweDA2LCAweDEwLCAweDUzLCAweDA3LCAweGZiLCAweDUzLCAweDA2LCAweDc5LCAweDkwLCAweDAwLCAweDA1LCAweGVlLCAweDhmLCAweGYwLCAKKzB4MTIsIDB4MWEsIDB4ZWYsIDB4ZTUsIDB4NTUsIDB4MzAsIDB4ZTMsIDB4MTIsIDB4NTQsIDB4MzAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4MTIsIDB4MjIsIAorMHgyYywgMHg5MCwgMHgwMCwgMHgwOCwgMHhlZiwgMHgxMiwgMHgxYSwgMHg0YSwgMHg4MCwgMHgwYSwgMHgxMiwgMHgyMiwgMHgyZCwgMHg5MCwgMHgwMCwgMHgwOCwgCisweGU0LCAweDEyLCAweDFhLCAweDRhLCAweGU1LCAweDU1LCAweDU0LCAweDAzLCAweDEyLCAweDIyLCAweDJjLCAweDkwLCAweDAwLCAweDA3LCAweGVmLCAweDEyLCAKKzB4MWEsIDB4NGEsIDB4ZTUsIDB4NTUsIDB4NTQsIDB4MDQsIDB4ZmYsIDB4YzMsIDB4MTMsIDB4OTAsIDB4MDAsIDB4MDksIDB4MTIsIDB4MWEsIDB4NGEsIDB4OTAsIAorMHgwMCwgMHgwNywgMHgxMiwgMHgxYSwgMHgwYiwgMHg3MCwgMHgxMywgMHgxMiwgMHgyMiwgMHgyZCwgMHhlOSwgMHgyNCwgMHgwOSwgMHhmOSwgMHhlNCwgMHgzYSwgCisweGZhLCAweDEyLCAweDE5LCAweGYyLCAweGZmLCAweGMzLCAweDEzLCAweDEyLCAweDFhLCAweDM4LCAweDEyLCAweDIyLCAweDc4LCAweDI0LCAweDA4LCAweDEyLCAKKzB4MjEsIDB4ZjMsIDB4ZTAsIDB4ZmUsIDB4OGQsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZTUsIDB4ODIsIDB4MjQsIDB4MDcsIDB4MTIsIDB4MjEsIDB4ZjMsIDB4ZTAsIAorMHhmZCwgMHhlZSwgMHhlZCwgMHgxMiwgMHgyMiwgMHgyYywgMHg5MCwgMHgwMCwgMHgwMywgMHhlZSwgMHg4ZiwgMHhmMCwgMHgxMiwgMHgxYSwgMHhlZiwgMHgxMiwgCisweDMxLCAweGM3LCAweDdkLCAweDBhLCAweGU0LCAweGZmLCAweDEyLCAweDJmLCAweDE4LCAweDAyLCAweDEwLCAweDg2LCAweDkwLCAweGZhLCAweGUzLCAweGUwLCAKKzB4YjQsIDB4MDMsIDB4MDYsIDB4N2UsIDB4MDAsIDB4N2YsIDB4NDAsIDB4ODAsIDB4MDQsIDB4N2UsIDB4MDAsIDB4N2YsIDB4MDgsIDB4OTAsIDB4ZmEsIDB4ZDcsIAorMHhlZSwgMHhmMCwgMHhhMywgMHhlZiwgMHhmMCwgMHg5MCwgMHgwMCwgMHgwNSwgMHgxMiwgMHgxYSwgMHgwYiwgMHhmZiwgMHg3ZSwgMHgwMCwgMHg5MCwgMHhmYSwgCisweGQzLCAweGVlLCAweGYwLCAweGEzLCAweGVmLCAweGYwLCAweDcwLCAweDAzLCAweDdmLCAweDA4LCAweDIyLCAweDkwLCAweDAwLCAweDA4LCAweDEyLCAweDFhLCAKKzB4OTgsIDB4ZmYsIDB4OTAsIDB4ZmEsIDB4ZDUsIDB4ZTUsIDB4ZjAsIDB4ZjAsIDB4YTMsIDB4ZWYsIDB4ZjAsIDB4YWUsIDB4MDIsIDB4YWYsIDB4MDEsIDB4OGUsIAorMHg1MCwgMHg4ZiwgMHg1MSwgMHg3NCwgMHgwYSwgMHgyNSwgMHg1MSwgMHhmNSwgMHg1MSwgMHhlNCwgMHgzNSwgMHg1MCwgMHhmNSwgMHg1MCwgMHg5MCwgMHhmYSwgCisweGQ4LCAweGUwLCAweGZmLCAweDE0LCAweGZlLCAweDkwLCAweGZhLCAweGQ2LCAweGUwLCAweDVlLCAweGZlLCAweGMzLCAweGVmLCAweDllLCAweGZmLCAweDkwLCAKKzB4ZmEsIDB4ZGEsIDB4ZjAsIDB4YzMsIDB4OTAsIDB4ZmEsIDB4ZDQsIDB4ZTAsIDB4OWYsIDB4OTAsIDB4ZmEsIDB4ZDMsIDB4ZTAsIDB4OTQsIDB4MDAsIDB4NTAsIAorMHgwNiwgMHhhMywgMHhlMCwgMHg5MCwgMHhmYSwgMHhkYSwgMHhmMCwgMHgxMiwgMHgxZiwgMHhmYiwgMHg2MCwgMHgwMywgMHhlMCwgMHhmZiwgMHgyMiwgMHgxMiwgCisweDJkLCAweDVhLCAweDkwLCAweGZhLCAweGQzLCAweGUwLCAweGZlLCAweGEzLCAweGUwLCAweGZmLCAweDRlLCAweDYwLCAweDJiLCAweDkwLCAweGZhLCAweGQ3LCAKKzB4ZTAsIDB4ZmMsIDB4YTMsIDB4ZTAsIDB4ZmQsIDB4ZDMsIDB4ZWYsIDB4OWQsIDB4ZWUsIDB4OWMsIDB4NDAsIDB4MDcsIDB4ZTAsIDB4OTAsIDB4ZmEsIDB4ZGEsIAorMHhmMCwgMHg4MCwgMHgwOCwgMHg5MCwgMHhmYSwgMHhkNCwgMHhlMCwgMHg5MCwgMHhmYSwgMHhkYSwgMHhmMCwgMHgxMiwgMHgxZiwgMHhmYiwgMHg2MCwgMHgwMywgCisweGUwLCAweGZmLCAweDIyLCAweDEyLCAweDJkLCAweDVhLCAweDgwLCAweGNhLCAweDdiLCAweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDUyLCAweGU0LCAweGY1LCAKKzB4MmQsIDB4ZjUsIDB4MmUsIDB4N2QsIDB4MDEsIDB4MTIsIDB4MjUsIDB4ZDcsIDB4N2YsIDB4MDAsIDB4MjIsIDB4YWEsIDB4NTAsIDB4YTksIDB4NTEsIDB4N2IsIAorMHgwMSwgMHg5MCwgMHhmYSwgMHhkNSwgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHhmZCwgMHg5MCwgMHhmYSwgMHhkYSwgMHhlMCwgMHhmNSwgMHg0YSwgMHgxMiwgCisweDI4LCAweDlmLCAweDkwLCAweGZhLCAweGQ5LCAweGVmLCAweGYwLCAweDIyLCAweGVmLCAweDI0LCAweGFlLCAweDYwLCAweDUyLCAweDI0LCAweGZlLCAweDYwLCAKKzB4MmUsIDB4MjQsIDB4ZmUsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MjAsIDB4YmIsIDB4MjQsIDB4MDYsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MjEsIDB4MDMsIDB4NzgsIAorMHg3MSwgMHhlNiwgMHg1NCwgMHhmYiwgMHhmNiwgMHg5MCwgMHhmZiwgMHhhNSwgMHhlMCwgMHhmNSwgMHgyMiwgMHg0NCwgMHgwZiwgMHhmMCwgMHg3NCwgMHgzMywgCisweDkwLCAweGZhLCAweDkxLCAweGYwLCAweGU1LCAweDIyLCAweGEzLCAweGYwLCAweDkwLCAweGZhLCAweGFmLCAweDc0LCAweDAxLCAweGYwLCAweDIyLCAweDc4LCAKKzB4NzIsIDB4ZTYsIDB4NTQsIDB4ZmIsIDB4ZjYsIDB4OTAsIDB4ZmYsIDB4YjUsIDB4ZTAsIDB4ZjUsIDB4MjIsIDB4NDQsIDB4MGYsIDB4ZjAsIDB4NzQsIDB4NDMsIAorMHg5MCwgMHhmYSwgMHg5MywgMHhmMCwgMHhlNSwgMHgyMiwgMHhhMywgMHhmMCwgMHg5MCwgMHhmYSwgMHhiMCwgMHg3NCwgMHgwMSwgMHhmMCwgMHgyMiwgMHg5MCwgCisweGZhLCAweDlkLCAweGUwLCAweGEzLCAweDIwLCAweGU1LCAweDAzLCAweDAyLCAweDIxLCAweDAzLCAweDkwLCAweGZmLCAweGE2LCAweGUwLCAweDkwLCAweGZhLCAKKzB4Y2EsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4ZmEsIDB4Y2EsIDB4ZTAsIDB4ZmYsIDB4NTQsIDB4MGYsIDB4ZmUsIDB4NjAsIDB4MTAsIDB4OTAsIDB4ZmYsIAorMHhhNiwgMHgxMiwgMHgyMiwgMHg1ZCwgMHg5MCwgMHhmZiwgMHhhNiwgMHhlMCwgMHg5MCwgMHhmYSwgMHhjYSwgMHhmMCwgMHg4MCwgMHhlNiwgMHg5MCwgMHhmYSwgCisweGNiLCAweGUwLCAweGZmLCAweDc0LCAweDM0LCAweGZlLCAweDEyLCAweDJjLCAweGI0LCAweGVmLCAweDcwLCAweDU3LCAweDkwLCAweGZhLCAweGNiLCAweGUwLCAKKzB4ZmYsIDB4NzQsIDB4MzQsIDB4OTAsIDB4ZmEsIDB4OTUsIDB4ZjAsIDB4ZWYsIDB4YTMsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4ZmEsIDB4YTcsIDB4ZTAsIDB4YTMsIAorMHgzMCwgMHhlNSwgMHg0MCwgMHg5MCwgMHhmZiwgMHhiNiwgMHhlMCwgMHg5MCwgMHhmYSwgMHhjYSwgMHhmMCwgMHhhMywgMHhmMCwgMHg5MCwgMHhmYSwgMHhjYSwgCisweGUwLCAweGZmLCAweDU0LCAweDBmLCAweGZlLCAweDYwLCAweDEwLCAweDkwLCAweGZmLCAweGI2LCAweDEyLCAweDIyLCAweDVkLCAweDkwLCAweGZmLCAweGI2LCAKKzB4ZTAsIDB4OTAsIDB4ZmEsIDB4Y2EsIDB4ZjAsIDB4ODAsIDB4ZTYsIDB4OTAsIDB4ZmEsIDB4Y2IsIDB4ZTAsIDB4ZmYsIDB4NzQsIDB4NDQsIDB4ZmUsIDB4MTIsIAorMHgyYywgMHhiNCwgMHhlZiwgMHg3MCwgMHgwZSwgMHg5MCwgMHhmYSwgMHhjYiwgMHhlMCwgMHhmZiwgMHg3NCwgMHg0NCwgMHg5MCwgMHhmYSwgMHg5NywgMHhmMCwgCisweGVmLCAweGEzLCAweGYwLCAweDIyLCAweGMwLCAweGUwLCAweGMwLCAweGYwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweGQwLCAweDc1LCAweGQwLCAKKzB4MDAsIDB4YzAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4YzAsIDB4MDIsIDB4YzAsIDB4MDMsIDB4YzAsIDB4MDQsIDB4YzAsIDB4MDUsIDB4YzAsIDB4MDYsIDB4YzAsIAorMHgwNywgMHg5MCwgMHhmZiwgMHg5MiwgMHhlMCwgMHhmZiwgMHg5MCwgMHhmYSwgMHhjOSwgMHhmMCwgMHg5MCwgMHhmZiwgMHg5MiwgMHhlNCwgMHhmMCwgMHhlZiwgCisweDEyLCAweDFiLCAweDRjLCAweDIxLCAweGJiLCAweDI2LCAweDIxLCAweGJiLCAweDJlLCAweDIxLCAweDVlLCAweDMwLCAweDIxLCAweDVlLCAweDMyLCAweDIxLCAKKzB4NmMsIDB4MzgsIDB4MjEsIDB4N2UsIDB4M2EsIDB4MjEsIDB4YjAsIDB4M2UsIDB4MjEsIDB4OWIsIDB4NDQsIDB4MjEsIDB4OTAsIDB4NDYsIDB4MjEsIDB4YTYsIAorMHg1MCwgMHgyMSwgMHhhNiwgMHg1MiwgMHgyMSwgMHhhNiwgMHg1NCwgMHgyMSwgMHhhNiwgMHg1NiwgMHgwMCwgMHgwMCwgMHgyMSwgMHhjMCwgMHg5MCwgMHhmYSwgCisweGM5LCAweGUwLCAweGZkLCAweDdjLCAweDAwLCAweDdmLCAweDAxLCAweDEyLCAweDExLCAweDE2LCAweDgwLCAweDYyLCAweDdjLCAweDAwLCAweDdkLCAweDAxLCAKKzB4N2YsIDB4MDMsIDB4MTIsIDB4MTEsIDB4MTYsIDB4OTAsIDB4ZmYsIDB4ZmUsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4ODAsIDB4NTAsIDB4N2MsIDB4MDAsIAorMHg3ZCwgMHgwMSwgMHg3ZiwgMHgwMiwgMHgxMiwgMHgxMSwgMHgxNiwgMHg5MCwgMHhmZiwgMHhmZSwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg4MCwgMHgzZSwgCisweDdjLCAweDAwLCAweDdkLCAweDAxLCAweDdmLCAweDA1LCAweDEyLCAweDExLCAweDE2LCAweDgwLCAweDMzLCAweDdjLCAweDAwLCAweDdkLCAweDAxLCAweDdmLCAKKzB4MDYsIDB4MTIsIDB4MTEsIDB4MTYsIDB4ODAsIDB4MjgsIDB4OTAsIDB4ZmEsIDB4YzksIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MjAsIDB4MTgsIDB4ODAsIDB4MWUsIAorMHg3YywgMHgwMCwgMHg3ZCwgMHgwMSwgMHg3ZiwgMHgwNCwgMHgxMiwgMHgxMSwgMHgxNiwgMHg4MCwgMHgxMywgMHgxMiwgMHgyNywgMHg4ZCwgMHg4MCwgMHgwZSwgCisweDkwLCAweGZhLCAweGM5LCAweGUwLCAweDI0LCAweDAwLCAweGZmLCAweGU0LCAweDM0LCAweGZmLCAweGZlLCAweDEyLCAweDJjLCAweGI0LCAweGQwLCAweDA3LCAKKzB4ZDAsIDB4MDYsIDB4ZDAsIDB4MDUsIDB4ZDAsIDB4MDQsIDB4ZDAsIDB4MDMsIDB4ZDAsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4ZDAsIAorMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhmMCwgMHhkMCwgMHhlMCwgMHgzMiwgMHg3OCwgMHg3YywgMHhlNiwgMHhmZSwgMHgwOCwgMHhlNiwgMHgyNCwgCisweDA0LCAweDhlLCAweDgzLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDgzLCAweGY1LCAweDgzLCAweDIyLCAweDc0LCAweDEyLCAweDI1LCAweDI0LCAweGY1LCAKKzB4ODIsIDB4ZTQsIDB4MzQsIDB4ZjksIDB4ZjUsIDB4ODMsIDB4MjIsIDB4NzgsIDB4N2MsIDB4ZTYsIDB4ZmUsIDB4MDgsIDB4ZTYsIDB4ZjUsIDB4ODIsIDB4OGUsIAorMHg4MywgMHgyMiwgMHg3OCwgMHg4MCwgMHhlNiwgMHhmZSwgMHgwOCwgMHhlNiwgMHhhYSwgMHgwNiwgMHhmOCwgMHhhYywgMHgwMiwgMHg3ZCwgMHgwMSwgMHg3YiwgCisweGZmLCAweDdhLCAweDMxLCAweDc5LCAweDk5LCAweDdlLCAweDAwLCAweDdmLCAweDBhLCAweDAyLCAweDE5LCAweGNjLCAweGZmLCAweDkwLCAweGY5LCAweDZjLCAKKzB4MDIsIDB4MWIsIDB4M2EsIDB4OTAsIDB4ZjksIDB4NjcsIDB4MTIsIDB4MWIsIDB4M2EsIDB4OTAsIDB4MDAsIDB4MDQsIDB4MDIsIDB4MWEsIDB4MGIsIDB4ZTYsIAorMHhmYywgMHgwOCwgMHhlNiwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhhMywgMHhhMywgMHgyMiwgMHg3OCwgMHg3ZSwgMHhlNiwgMHhmZSwgMHgwOCwgMHhlNiwgCisweGZmLCAweDIyLCAweGVkLCAweDEyLCAweDFhLCAweDRhLCAweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGU1LCAweDgyLCAweDIyLCAweGVmLCAweGYwLCAweDkwLCAKKzB4ZmEsIDB4Y2IsIDB4ZTAsIDB4NTQsIDB4MGYsIDB4NGUsIDB4ZmUsIDB4ZjAsIDB4ZWYsIDB4NTQsIDB4ZjAsIDB4NGUsIDB4ZjAsIDB4MjIsIDB4MDgsIDB4ZTYsIAorMHhmYywgMHgwOCwgMHhlNiwgMHg4YywgMHg4MywgMHgyNCwgMHgwOSwgMHgyMiwgMHg3OCwgMHg3ZSwgMHhlNiwgMHhmYywgMHgwOCwgMHhlNiwgMHhmZCwgMHg4YywgCisweDgzLCAweDIyLCAweGE2LCAweDA3LCAweGU2LCAweDI0LCAweDZlLCAweGY4LCAweGU2LCAweDIyLCAweDc4LCAweDdlLCAweGU2LCAweGZhLCAweDA4LCAweGU2LCAKKzB4ZmIsIDB4MjIsIDB4MjYsIDB4ZjYsIDB4MTgsIDB4ZWUsIDB4MzYsIDB4ZjYsIDB4MjIsIDB4OGIsIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTUsIDB4ODIsIDB4MjIsIAorMHg4YiwgMHgyNSwgMHg4YSwgMHgyNiwgMHg4OSwgMHgyNywgMHg4ZCwgMHgyOCwgMHg5MCwgMHhmYSwgMHhjZiwgMHhlNCwgMHhmMCwgMHhhMywgMHg3NCwgMHgwMiwgCisweGYwLCAweDdiLCAweDAxLCAweDdhLCAweGZhLCAweDc5LCAweGNlLCAweDkwLCAweGZhLCAweGNmLCAweGUwLCAweGY1LCAweDJkLCAweGEzLCAweGUwLCAweGY1LCAKKzB4MmUsIDB4N2QsIDB4MDEsIDB4MTIsIDB4MjUsIDB4ZDcsIDB4OTAsIDB4ZmEsIDB4Y2UsIDB4ZTAsIDB4NjUsIDB4MjgsIDB4NjAsIDB4NDYsIDB4YTMsIDB4ZTAsIAorMHhmZiwgMHhhMywgMHhlMCwgMHhhMywgMHhjZiwgMHhmMCwgMHhhMywgMHhlZiwgMHhmMCwgMHgxMiwgMHgyMywgMHgyZiwgMHg5MCwgMHhmYSwgMHhjZSwgMHhlMCwgCisweGZmLCAweDkwLCAweGZhLCAweGQxLCAweGU0LCAweDhmLCAweGYwLCAweDEyLCAweDFhLCAweDZjLCAweDEyLCAweDIzLCAweDJmLCAweDkwLCAweGZhLCAweGQxLCAKKzB4ZTAsIDB4ZmYsIDB4YTMsIDB4ZTAsIDB4OTAsIDB4ZmEsIDB4Y2YsIDB4Y2YsIDB4ZjAsIDB4YTMsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4ZmEsIDB4Y2UsIDB4ZTAsIAorMHhhMywgMHg3NSwgMHhmMCwgMHgwMCwgMHgxMiwgMHgxYSwgMHg2YywgMHg5MCwgMHhmYSwgMHhjZiwgMHhlNCwgMHg3NSwgMHhmMCwgMHgwNCwgMHgxMiwgMHgxYSwgCisweDZjLCAweDAyLCAweDIyLCAweGIxLCAweDkwLCAweGZhLCAweGQwLCAweGUwLCAweDI0LCAweDAxLCAweGZmLCAweDkwLCAweGZhLCAweGNmLCAweGUwLCAweDM0LCAKKzB4MDAsIDB4YWIsIDB4MjUsIDB4YWEsIDB4MjYsIDB4YTksIDB4MjcsIDB4OGYsIDB4ZjAsIDB4MTIsIDB4MWEsIDB4ZDAsIDB4N2YsIDB4MDAsIDB4MjIsIDB4N2IsIAorMHgwMSwgMHg3YSwgMHhmYSwgMHg3OSwgMHhjZSwgMHg5MCwgMHhmYSwgMHhjZiwgMHhlNCwgMHg3NSwgMHhmMCwgMHgwMSwgMHgxMiwgMHgxYSwgMHg2YywgMHg4NSwgCisweGYwLCAweDJlLCAweGY1LCAweDJkLCAweDdkLCAweDAxLCAweDAyLCAweDI1LCAweGQ3LCAweDhmLCAweDYyLCAweDEyLCAweDJhLCAweDA2LCAweDEyLCAweDIyLCAKKzB4NGEsIDB4OGUsIDB4ODMsIDB4MjQsIDB4MGIsIDB4MTIsIDB4MjEsIDB4ZjMsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4MDgsIAorMHgxMiwgMHgyMiwgMHgzZiwgMHhlMCwgMHhhMywgMHgzMCwgMHhlNSwgMHgwYywgMHgxMiwgMHgyMiwgMHg1NiwgMHgyNCwgMHgwYiwgMHgxMiwgMHgyMSwgMHhmMywgCisweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDc4LCAweDdjLCAweGU2LCAweGZlLCAweDA4LCAweGU2LCAweGZmLCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGUwLCAKKzB4NTQsIDB4YjgsIDB4ZmQsIDB4ZjAsIDB4ZTUsIDB4NjIsIDB4MjQsIDB4ZmUsIDB4NDQsIDB4MjAsIDB4ZmMsIDB4NGQsIDB4ZjAsIDB4ZTUsIDB4ODIsIDB4MjQsIAorMHgwNCwgMHgxMiwgMHgyMSwgMHhmMywgMHhlMCwgMHg1NCwgMHhiOCwgMHhmMCwgMHg0YywgMHhmMCwgMHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhhMywgMHg3NCwgCisweDAzLCAweGYwLCAweDE4LCAweGU2LCAweGZlLCAweDA4LCAweGU2LCAweGZmLCAweDhlLCAweDgzLCAweDI0LCAweDA1LCAweDEyLCAweDIxLCAweGYzLCAweGMwLCAKKzB4ODMsIDB4YzAsIDB4ODIsIDB4ZTAsIDB4ZmQsIDB4NzQsIDB4OTYsIDB4MjUsIDB4NjIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4ZmEsIDB4ZjUsIDB4ODMsIAorMHhlMCwgMHg1NCwgMHhmYywgMHg0NCwgMHgwMywgMHhmYywgMHhlZCwgMHg0YywgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhmMCwgMHg4ZiwgMHg4MiwgMHg4ZSwgCisweDgzLCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweGU1LCAweDgyLCAweDI0LCAweDA0LCAweDEyLCAweDIxLCAweGYzLCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAKKzB4MTIsIDB4MzEsIDB4YzcsIDB4NzQsIDB4NmUsIDB4MjUsIDB4NjIsIDB4ZjgsIDB4NzQsIDB4MDQsIDB4NDYsIDB4ZjYsIDB4N2YsIDB4MDAsIDB4MjIsIDB4MTIsIAorMHgxMCwgMHgwMywgMHg3ZiwgMHgwMiwgMHgxMiwgMHgxMiwgMHgxOSwgMHg3OCwgMHg2NywgMHhlNiwgMHg0NCwgMHgwMiwgMHhmNiwgMHhkMiwgMHhiMCwgMHhkMiwgCisweGIxLCAweDkwLCAweGY5LCAweDE1LCAweGUwLCAweDMwLCAweGU3LCAweDA3LCAweDkwLCAweGZmLCAweDllLCAweGU0LCAweGYwLCAweDgwLCAweDM2LCAweGQyLCAKKzB4YjMsIDB4OTAsIDB4ZmYsIDB4YTQsIDB4ZTAsIDB4OTAsIDB4ZmEsIDB4N2IsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4YjQsIDB4ZTAsIDB4OTAsIDB4ZmEsIDB4N2MsIAorMHhmMCwgMHg5MCwgMHhmZiwgMHhhMiwgMHhlMCwgMHg5MCwgMHhmYSwgMHg3OSwgMHhmMCwgMHg5MCwgMHhmZiwgMHhiMiwgMHhlMCwgMHg5MCwgMHhmYSwgMHg3YSwgCisweGYwLCAweDkwLCAweGZmLCAweGE0LCAweDc0LCAweDMwLCAweGYwLCAweDkwLCAweGZmLCAweGI0LCAweGYwLCAweDkwLCAweGZmLCAweGEyLCAweDc0LCAweDQwLCAKKzB4ZjAsIDB4OTAsIDB4ZmYsIDB4YjIsIDB4ZjAsIDB4OTAsIDB4ZmEsIDB4ZTQsIDB4ZTUsIDB4YTgsIDB4ZjAsIDB4NzUsIDB4YTgsIDB4ODEsIDB4OTAsIDB4ZmYsIAorMHg5MiwgMHhlMCwgMHg2MCwgMHgwNCwgMHhlNCwgMHhmMCwgMHg4MCwgMHhmNiwgMHg5MCwgMHhmZiwgMHhmZCwgMHg3NCwgMHgzYSwgMHhmMCwgMHg0MywgMHg4NywgCisweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweGZhLCAweDdiLCAweGUwLCAweDkwLCAweGZmLCAweGE0LCAweGYwLCAweDkwLCAweGZhLCAweDdjLCAweGUwLCAKKzB4OTAsIDB4ZmYsIDB4YjQsIDB4ZjAsIDB4OTAsIDB4ZmEsIDB4NzksIDB4ZTAsIDB4OTAsIDB4ZmYsIDB4YTIsIDB4ZjAsIDB4OTAsIDB4ZmEsIDB4N2EsIDB4ZTAsIAorMHg5MCwgMHhmZiwgMHhiMiwgMHhmMCwgMHg5MCwgMHhmOSwgMHgxNywgMHhlMCwgMHg2MCwgMHgwMiwgMHhjMiwgMHhiMywgMHg5MCwgMHhmYSwgMHhlNCwgMHhlMCwgCisweGY1LCAweGE4LCAweDAyLCAweDEwLCAweDg2LCAweDhiLCAweDVjLCAweDhhLCAweDVkLCAweDg5LCAweDVlLCAweDEyLCAweDJkLCAweDNjLCAweDkwLCAweGZhLCAKKzB4YzAsIDB4MTIsIDB4MWIsIDB4NDMsIDB4YWEsIDB4NWQsIDB4YTksIDB4NWUsIDB4OTAsIDB4ZmEsIDB4YzMsIDB4MTIsIDB4MWIsIDB4NDMsIDB4OTAsIDB4ZmEsIAorMHhjNCwgMHhlNCwgMHg3NSwgMHhmMCwgMHgwYSwgMHgxMiwgMHgxYSwgMHg2YywgMHg5MCwgMHhmYSwgMHhjMywgMHgxMiwgMHgxYiwgMHgzYSwgMHhlOSwgMHgyNCwgCisweDAxLCAweGY5LCAweGU0LCAweDNhLCAweGZhLCAweDkwLCAweGZhLCAweGM2LCAweDEyLCAweDFiLCAweDQzLCAweGFiLCAweDVjLCAweGFhLCAweDVkLCAweGE5LCAKKzB4NWUsIDB4MTIsIDB4MmQsIDB4NDgsIDB4ZTAsIDB4ZmYsIDB4YzMsIDB4MTMsIDB4ZjAsIDB4ZTQsIDB4NzgsIDB4ODIsIDB4ZjYsIDB4OTAsIDB4ZmEsIDB4YmUsIAorMHhlMCwgMHhmZiwgMHg3OCwgMHg4MiwgMHhlNiwgMHhjMywgMHg5ZiwgMHg1MCwgMHg0YSwgMHg5MCwgMHhmYSwgMHhjMCwgMHgxMiwgMHgyZCwgMHgxZCwgMHhmZiwgCisweDc4LCAweDgzLCAweGY2LCAweDkwLCAweGZhLCAweGMzLCAweDEyLCAweDJkLCAweDFkLCAweGZlLCAweGY0LCAweDVmLCAweGZmLCAweDc4LCAweDgzLCAweGY2LCAKKzB4MTIsIDB4MmQsIDB4MWEsIDB4NWUsIDB4NGYsIDB4ZmYsIDB4NzgsIDB4ODMsIDB4ZjYsIDB4MTIsIDB4MmQsIDB4MjMsIDB4NzUsIDB4ZjAsIDB4MDIsIDB4MTIsIAorMHgxYSwgMHg2YywgMHg5MCwgMHhmYSwgMHhjNCwgMHhlNCwgMHg3NSwgMHhmMCwgMHgwMiwgMHgxMiwgMHgxYSwgMHg2YywgMHhhYiwgMHg1YywgMHhhYSwgMHg1ZCwgCisweGE5LCAweDVlLCAweDkwLCAweDAwLCAweDA0LCAweDEyLCAweDFhLCAweDBiLCAweDMwLCAweGU0LCAweDAzLCAweDEyLCAweDJkLCAweDMyLCAweDc4LCAweDgyLCAKKzB4MDYsIDB4ODAsIDB4YWEsIDB4ZTQsIDB4OTAsIDB4ZmEsIDB4YmYsIDB4ZjAsIDB4MjIsIDB4OGIsIDB4NTYsIDB4OGEsIDB4NTcsIDB4ODksIDB4NTgsIDB4OTAsIAorMHhmYSwgMHhiZiwgMHg3NCwgMHgwNiwgMHhmMCwgMHhlNCwgMHg5MCwgMHhmYSwgMHhiZSwgMHhmMCwgMHgxMiwgMHgxOSwgMHhmMiwgMHgyNCwgMHg2ZSwgMHg2MCwgCisweDI2LCAweDE0LCAweDcwLCAweDcwLCAweDEyLCAweDJkLCAweDA5LCAweDYwLCAweDA5LCAweDI0LCAweDMwLCAweDcwLCAweDEyLCAweDEyLCAweDI0LCAweDk1LCAKKzB4ODAsIDB4NjIsIDB4MTIsIDB4MmQsIDB4NTMsIDB4MTIsIDB4MWYsIDB4MmMsIDB4OTAsIDB4ZmEsIDB4YmYsIDB4ZWYsIDB4ZjAsIDB4ODAsIDB4NTUsIDB4OTAsIAorMHhmYSwgMHhiZiwgMHg3NCwgMHg4MSwgMHhmMCwgMHg4MCwgMHg0ZCwgMHgxMiwgMHgyZCwgMHgwOSwgMHg2MCwgMHgwOSwgMHgyNCwgMHgzMCwgMHg3MCwgMHgzZSwgCisweDEyLCAweDJjLCAweDVmLCAweDgwLCAweDNmLCAweGU1LCAweDU4LCAweDI0LCAweDAzLCAweGY5LCAweGU0LCAweDM1LCAweDU3LCAweGZhLCAweDdiLCAweDAxLCAKKzB4YzAsIDB4MDMsIDB4YzAsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MTIsIDB4MmQsIDB4NTMsIDB4OTAsIDB4MDAsIDB4MDUsIDB4MTIsIDB4MWEsIDB4MGIsIDB4ZmQsIAorMHg5MCwgMHgwMCwgMHgwOCwgMHgxMiwgMHgxYSwgMHg5OCwgMHhmNSwgMHgyZSwgMHg4NSwgMHhmMCwgMHgyZCwgMHhkMCwgMHgwMSwgMHhkMCwgMHgwMiwgMHhkMCwgCisweDAzLCAweDEyLCAweDI1LCAweGQ3LCAweDkwLCAweGZhLCAweGJlLCAweGVmLCAweGYwLCAweGU0LCAweGEzLCAweGYwLCAweDgwLCAweDA2LCAweDkwLCAweGZhLCAKKzB4YmYsIDB4NzQsIDB4ODEsIDB4ZjAsIDB4OTAsIDB4ZmEsIDB4YmYsIDB4ZTAsIDB4MTIsIDB4MmQsIDB4NTMsIDB4OTAsIDB4MDAsIDB4MDIsIDB4MTIsIDB4MWEsIAorMHg0YSwgMHg5MCwgMHhmYSwgMHhiZSwgMHhlMCwgMHhmZiwgMHgyMiwgMHg4YiwgMHgyOSwgMHg4YSwgMHgyYSwgMHg4OSwgMHgyYiwgMHg4ZCwgMHgyYywgMHhlNSwgCisweDJjLCAweDcwLCAweDAzLCAweGFmLCAweDJjLCAweDIyLCAweDEyLCAweDJkLCAweDgyLCAweDcwLCAweDE2LCAweDEyLCAweDJkLCAweGExLCAweGU1LCAweDJkLCAKKzB4OTAsIDB4ZmYsIDB4ZjEsIDB4ZjAsIDB4MTIsIDB4MzEsIDB4MWIsIDB4NTAsIDB4ZjIsIDB4MTIsIDB4MjYsIDB4NjQsIDB4NDAsIDB4MGIsIDB4N2YsIDB4MDAsIAorMHgyMiwgMHgxMiwgMHgyZCwgMHhhMSwgMHgxMiwgMHgyNiwgMHg2NCwgMHg1MCwgMHhmOCwgMHg5MCwgMHhmZiwgMHhmMywgMHg3NCwgMHhhMSwgMHhmMCwgMHhlNSwgCisweDJjLCAweGI0LCAweDAxLCAweDA3LCAweDkwLCAweGZmLCAweGYwLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDkwLCAweGZmLCAweGYxLCAweGU0LCAweGYwLCAKKzB4ZjUsIDB4MmYsIDB4ZTUsIDB4MmMsIDB4MTQsIDB4ZmYsIDB4ZTUsIDB4MmYsIDB4YzMsIDB4OWYsIDB4NTAsIDB4MmEsIDB4MTIsIDB4MzEsIDB4MDQsIDB4NDAsIAorMHgwMywgMHhhZiwgMHgyZiwgMHgyMiwgMHhjMywgMHhlNSwgMHgyYywgMHg5NSwgMHgyZiwgMHhmZiwgMHhiZiwgMHgwMiwgMHgwNywgMHg5MCwgMHhmZiwgMHhmMCwgCisweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDEyLCAweDJkLCAweDk0LCAweDA1LCAweDJmLCAweDc0LCAweDAxLCAweDI1LCAweDJiLCAweGY1LCAweDJiLCAweGU0LCAKKzB4MzUsIDB4MmEsIDB4ZjUsIDB4MmEsIDB4ODAsIDB4Y2MsIDB4MTIsIDB4MzEsIDB4MDQsIDB4NDAsIDB4MDMsIDB4N2YsIDB4MTgsIDB4MjIsIDB4MTIsIDB4MmQsIAorMHg5NCwgMHhhZiwgMHgyYywgMHgyMiwgMHg5MCwgMHhmZiwgMHhmMSwgMHhlNSwgMHgyZSwgMHhmMCwgMHgwMiwgMHgzMSwgMHgxYiwgMHgxMiwgMHgxMCwgMHgwMywgCisweDc4LCAweDg0LCAweDEyLCAweDIyLCAweDgyLCAweDMwLCAweGUxLCAweDA4LCAweDdmLCAweDEzLCAweDEyLCAweDMwLCAweGVjLCAweDAyLCAweDI2LCAweGZiLCAKKzB4NzgsIDB4ODQsIDB4ZTYsIDB4ZjksIDB4MjQsIDB4MTIsIDB4MTIsIDB4MjEsIDB4ZmYsIDB4ZTAsIDB4ZmYsIDB4MzAsIDB4ZTcsIDB4NDAsIDB4NTQsIDB4MDMsIAorMHg2MCwgMHgxZSwgMHhlOSwgMHhiNCwgMHgwMywgMHgwZCwgMHg5MCwgMHhmZiwgMHg5ZSwgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHhlMCwgMHg0NCwgMHgwNCwgCisweGYwLCAweDgwLCAweDQ2LCAweDkwLCAweGZmLCAweDllLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweGUwLCAweDQ0LCAweDA4LCAweGYwLCAweDgwLCAweDM5LCAKKzB4ZTksIDB4YjQsIDB4MDMsIDB4MGQsIDB4OTAsIDB4ZmYsIDB4OWUsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIAorMHgyOCwgMHg5MCwgMHhmZiwgMHg5ZSwgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg4MCwgMHgxYiwgMHhlZiwgMHg1NCwgCisweDAzLCAweDYwLCAweDE0LCAweGU5LCAweGI0LCAweDAzLCAweDA5LCAweDkwLCAweGZmLCAweGE0LCAweGUwLCAweDU0LCAweGRmLCAweGYwLCAweDgwLCAweDA3LCAKKzB4OTAsIDB4ZmYsIDB4YjQsIDB4ZTAsIDB4NTQsIDB4ZGYsIDB4ZjAsIDB4YzIsIDB4YjMsIDB4OTAsIDB4ZjksIDB4MTcsIDB4ZTAsIDB4MDQsIDB4ZjAsIDB4YWYsIAorMHgwMSwgMHgxMiwgMHgyMiwgMHgzMywgMHhmZCwgMHgxMiwgMHgyZiwgMHg0OSwgMHgxMiwgMHgzMCwgMHhlYywgMHgwMiwgMHgxMCwgMHg4NiwgMHg3NSwgMHhhOCwgCisweDQwLCAweDc4LCAweDdmLCAweGU0LCAweGY2LCAweGQ4LCAweGZkLCAweDc1LCAweDgxLCAweDhiLCAweDAyLCAweDI3LCAweDQ4LCAweDAyLCAweDMwLCAweGNmLCAKKzB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NDAsIDB4MDMsIDB4ZjYsIDB4ODAsIDB4MDEsIDB4ZjIsIDB4MDgsIDB4ZGYsIDB4ZjQsIAorMHg4MCwgMHgyOSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHg1NCwgMHgwNywgMHgyNCwgMHgwYywgMHhjOCwgMHhjMywgMHgzMywgMHhjNCwgMHg1NCwgMHgwZiwgCisweDQ0LCAweDIwLCAweGM4LCAweDgzLCAweDQwLCAweDA0LCAweGY0LCAweDU2LCAweDgwLCAweDAxLCAweDQ2LCAweGY2LCAweGRmLCAweGU0LCAweDgwLCAweDBiLCAKKzB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4OTAsIDB4MmIsIDB4NGMsIDB4ZTQsIDB4N2UsIDB4MDEsIDB4OTMsIDB4NjAsIAorMHhiYywgMHhhMywgMHhmZiwgMHg1NCwgMHgzZiwgMHgzMCwgMHhlNSwgMHgwOSwgMHg1NCwgMHgxZiwgMHhmZSwgMHhlNCwgMHg5MywgMHhhMywgMHg2MCwgMHgwMSwgCisweDBlLCAweGNmLCAweDU0LCAweGMwLCAweDI1LCAweGUwLCAweDYwLCAweGE4LCAweDQwLCAweGI4LCAweGU0LCAweDkzLCAweGEzLCAweGZhLCAweGU0LCAweDkzLCAKKzB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2EsIDB4ZjAsIDB4YTMsIDB4YzgsIAorMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhkZiwgMHhlOSwgMHhkZSwgMHhlNywgMHg4MCwgMHhiZSwgMHhlNCwgMHhmNSwgMHgyMiwgCisweDEyLCAweDFkLCAweDEyLCAweGUwLCAweGI0LCAweDA0LCAweDBkLCAweGU1LCAweDIyLCAweDI0LCAweDAzLCAweGZmLCAweDEyLCAweDJmLCAweDc3LCAweDEyLCAKKzB4MWQsIDB4MTIsIDB4ZTQsIDB4ZjAsIDB4MDUsIDB4MjIsIDB4ZTUsIDB4MjIsIDB4YzMsIDB4OTQsIDB4MDIsIDB4NDAsIDB4ZTMsIDB4ZTQsIDB4ZjUsIDB4MjIsIAorMHg3NSwgMHhmMCwgMHgwMiwgMHhlNSwgMHgyMiwgMHg5MCwgMHhmYSwgMHg5MSwgMHgxMiwgMHgxZCwgMHg1MywgMHg2MCwgMHgyYywgMHgxMiwgMHgyYywgMHhiNCwgCisweGVmLCAweDYwLCAweDUyLCAweDc1LCAweGYwLCAweDAyLCAweGU1LCAweDIyLCAweDkwLCAweGZhLCAweDkxLCAweDEyLCAweDFiLCAweDFjLCAweGU0LCAweGYwLCAKKzB4YTMsIDB4ZjAsIDB4NzUsIDB4ZjAsIDB4MGEsIDB4ZTUsIDB4MjIsIDB4OTAsIDB4ZmEsIDB4OWQsIDB4MTIsIDB4MWIsIDB4MWMsIDB4ZTAsIDB4YTMsIDB4MzAsIAorMHhlNiwgMHgzMywgMHgxMiwgMHgxZCwgMHgxMiwgMHg3NCwgMHgwNCwgMHhmMCwgMHgyMiwgMHg3NSwgMHhmMCwgMHgwMiwgMHhlNSwgMHgyMiwgMHg5MCwgMHhmYSwgCisweDk1LCAweDEyLCAweDFkLCAweDUzLCAweDYwLCAweDE2LCAweDEyLCAweDJjLCAweGI0LCAweGVmLCAweDYwLCAweDE5LCAweDc1LCAweGYwLCAweDAyLCAweGU1LCAKKzB4MjIsIDB4OTAsIDB4ZmEsIDB4OTUsIDB4MTIsIDB4MWIsIDB4MWMsIDB4ZTQsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4MjIsIDB4MDUsIDB4MjIsIDB4ZTUsIDB4MjIsIAorMHhjMywgMHg5NCwgMHgwMiwgMHg0MCwgMHg5YiwgMHgyMiwgMHhlNCwgMHhmZiwgMHg5MCwgMHhmZiwgMHg4MywgMHhlMCwgMHg1NCwgMHgwZiwgMHhmZSwgMHhlZiwgCisweGMzLCAweDllLCAweDUwLCAweDE3LCAweDc0LCAweGYwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweGZlLCAweGY1LCAweDgzLCAweGUwLCAweDEyLCAKKzB4MWMsIDB4MTEsIDB4MTIsIDB4MWEsIDB4MzgsIDB4MGYsIDB4MTIsIDB4MWMsIDB4MDAsIDB4ODAsIDB4ZGQsIDB4ZWYsIDB4ZmQsIDB4YzMsIDB4ZTUsIDB4M2EsIAorMHg5ZCwgMHhmNSwgMHgzYSwgMHhlNSwgMHgzOSwgMHg5NCwgMHgwMCwgMHhmNSwgMHgzOSwgMHhkMywgMHhlNSwgMHgzYSwgMHg5NCwgMHgwMCwgMHhlNSwgMHgzOSwgCisweDk0LCAweDAwLCAweDQwLCAweDA2LCAweGU0LCAweDkwLCAweGZmLCAweDgzLCAweGYwLCAweDIyLCAweDEyLCAweDFkLCAweDJmLCAweDEyLCAweDFkLCAweDg0LCAKKzB4MTIsIDB4MWQsIDB4NzYsIDB4MTIsIDB4MTksIDB4ZjIsIDB4MjQsIDB4NmUsIDB4NjAsIDB4MWUsIDB4MTQsIDB4NjAsIDB4MWIsIDB4MjQsIDB4OGUsIDB4NzAsIAorMHgyZCwgMHg5MCwgMHgwMCwgMHgwMSwgMHgxMiwgMHgxYSwgMHgwYiwgMHhmZiwgMHgyNCwgMHhmYywgMHg2MCwgMHgwMywgMHgwNCwgMHg3MCwgMHgxZiwgMHhlZiwgCisweGZkLCAweDdjLCAweDAwLCAweDdmLCAweDBkLCAweDAyLCAweDExLCAweDE2LCAweDEyLCAweDFkLCAweDhiLCAweDEyLCAweDI1LCAweDM5LCAweDEyLCAweDFjLCAKKzB4ZDksIDB4MTIsIDB4MWEsIDB4MGIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MzEsIDB4YmQsIDB4ZTQsIDB4ZmYsIDB4MTIsIDB4MzEsIDB4YjEsIDB4MjIsIDB4OGIsIAorMHg0NSwgMHg4YSwgMHg0NiwgMHg4OSwgMHg0NywgMHg4YywgMHg0OCwgMHg4ZCwgMHg0OSwgMHhkMiwgMHgwMCwgMHgxMiwgMHgyZCwgMHg4MiwgMHg3MCwgMHgxNiwgCisweDEyLCAweDJkLCAweGExLCAweGU1LCAweDQ4LCAweDkwLCAweGZmLCAweGYxLCAweGYwLCAweDEyLCAweDMxLCAweDFiLCAweDUwLCAweGYyLCAweDEyLCAweDI5LCAKKzB4MTQsIDB4NDAsIDB4MGIsIDB4N2YsIDB4MTgsIDB4MjIsIDB4MTIsIDB4MmQsIDB4YTEsIDB4MTIsIDB4MjksIDB4MTQsIDB4NTAsIDB4ZjgsIDB4ZTQsIDB4ZjUsIAorMHg0YiwgMHhlNSwgMHg0YSwgMHgxNCwgMHhmZiwgMHhlNSwgMHg0YiwgMHhjMywgMHg5ZiwgMHg1MCwgMHgxNywgMHgxMiwgMHgyOSwgMHgwNCwgMHg0MCwgMHgwMywgCisweDdmLCAweDE4LCAweDIyLCAweDA1LCAweDRiLCAweDc0LCAweDAxLCAweDI1LCAweDQ3LCAweGY1LCAweDQ3LCAweGU0LCAweDM1LCAweDQ2LCAweGY1LCAweDQ2LCAKKzB4ODAsIDB4ZGYsIDB4OTAsIDB4ZmYsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MTIsIDB4MjksIDB4MDQsIDB4NDAsIDB4MDMsIDB4N2YsIDB4MTgsIAorMHgyMiwgMHg3ZiwgMHgwMCwgMHgyMiwgMHhhYiwgMHg0NSwgMHhhYSwgMHg0NiwgMHhhOSwgMHg0NywgMHgxMiwgMHgxOSwgMHhmMiwgMHg5MCwgMHhmZiwgMHhmMSwgCisweGYwLCAweDAyLCAweDMxLCAweDFiLCAweDkwLCAweGZmLCAweGYxLCAweGU1LCAweDQ5LCAweGYwLCAweDAyLCAweDMxLCAweDFiLCAweDdiLCAweDAxLCAweDdhLCAKKzB4ZmEsIDB4NzksIDB4Y2MsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MjIsIDB4YTAsIDB4OTAsIDB4ZmEsIDB4Y2MsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDksIDB4MTIsIAorMHgxYSwgMHg2YywgMHg3YiwgMHgwMCwgMHg3YSwgMHgwMCwgMHg3OSwgMHgyMywgMHg5MCwgMHhmYSwgMHhjYywgMHhlNCwgMHg3NSwgMHhmMCwgMHgwMSwgMHgxMiwgCisweDFhLCAweDgyLCAweDg1LCAweGYwLCAweDJlLCAweGY1LCAweDJkLCAweDdkLCAweDAxLCAweDEyLCAweDI1LCAweGQ3LCAweDkwLCAweGZmLCAweGY3LCAweGU1LCAKKzB4MjMsIDB4MTIsIDB4MjksIDB4NzgsIDB4OTAsIDB4ZmYsIDB4ZjYsIDB4ZTUsIDB4MjMsIDB4ZjAsIDB4OTAsIDB4ZmEsIDB4Y2MsIDB4ZTQsIDB4ZjAsIDB4YTMsIAorMHg3NCwgMHgwNiwgMHgxMiwgMHgyOSwgMHg3OCwgMHhlNSwgMHgyMywgMHgzMCwgMHhlMCwgMHgwNywgMHg5MCwgMHhmZiwgMHhmYywgMHg3NCwgMHg5NCwgMHhmMCwgCisweDIyLCAweDkwLCAweGZmLCAweGZjLCAweDc0LCAweDkwLCAweGYwLCAweDIyLCAweGYwLCAweDdiLCAweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDIzLCAweDkwLCAKKzB4ZmEsIDB4Y2MsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDEsIDB4MTIsIDB4MWEsIDB4ODIsIDB4ODUsIDB4ZjAsIDB4MmUsIDB4ZjUsIDB4MmQsIDB4N2QsIDB4MDEsIAorMHgwMiwgMHgyNSwgMHhkNywgMHg5MCwgMHhmZiwgMHg5MywgMHg3NCwgMHgyYSwgMHhmMCwgMHg5MCwgMHhmZiwgMHhmZiwgMHhlMCwgMHg2MCwgMHgwNiwgMHg5MCwgCisweGZmLCAweGZjLCAweDc0LCAweDEwLCAweGYwLCAweDkwLCAweGZmLCAweDkxLCAweGUwLCAweDQ0LCAweDkwLCAweGYwLCAweGU0LCAweDkwLCAweGY5LCAweDE1LCAKKzB4ZjAsIDB4YTMsIDB4ZjAsIDB4MTIsIDB4MmEsIDB4NzgsIDB4MTIsIDB4MTYsIDB4NDIsIDB4MTIsIDB4MmYsIDB4Y2QsIDB4N2UsIDB4MDcsIDB4N2YsIDB4ZDAsIAorMHgxMiwgMHgxMSwgMHhlMiwgMHg3ZSwgMHgwZiwgMHg3ZiwgMHhhMCwgMHgxMiwgMHgxMSwgMHhmYywgMHhlNCwgMHg3OCwgMHg3NywgMHhmNiwgMHg3OCwgMHg3NywgCisweGU2LCAweGZmLCAweGMzLCAweDk0LCAweDA2LCAweDUwLCAweDBiLCAweDc0LCAweDZlLCAweDJmLCAweGY4LCAweGU0LCAweGY2LCAweDc4LCAweDc3LCAweDA2LCAKKzB4ODAsIDB4ZWMsIDB4N2YsIDB4MDMsIDB4MTIsIDB4MmUsIDB4YjMsIDB4OTAsIDB4ZjksIDB4MTUsIDB4ZTAsIDB4MjAsIDB4ZTQsIDB4MDUsIDB4N2YsIDB4MDQsIAorMHgxMiwgMHgyZSwgMHhiMywgMHg5MCwgMHhmZiwgMHg5YiwgMHhlNCwgMHhmMCwgMHg5MCwgMHhmZiwgMHg5YSwgMHhmMCwgMHg5MCwgMHhmZiwgMHhlOCwgMHhlMCwgCisweDU0LCAweDFmLCAweGYwLCAweGQyLCAweGE4LCAweDIyLCAweDE1LCAweDY1LCAweGE4LCAweDY1LCAweGE2LCAweDA3LCAweDMwLCAweDA4LCAweDA1LCAweDEyLCAKKzB4MTEsIDB4NjYsIDB4ODAsIDB4ZjgsIDB4ZDIsIDB4MDgsIDB4YTgsIDB4NjUsIDB4ZTYsIDB4ZmYsIDB4YjQsIDB4MDMsIDB4MGYsIDB4NzgsIDB4N2MsIDB4NzYsIAorMHhmZiwgMHgwOCwgMHg3NiwgMHhlMCwgMHgwOCwgMHg3NiwgMHhmZiwgMHgwOCwgMHg3NiwgMHhhMCwgMHg4MCwgMHgwZCwgMHg3OCwgMHg3YywgMHg3NiwgMHhmZiwgCisweDA4LCAweDc2LCAweGUyLCAweDA4LCAweDc2LCAweGZmLCAweDA4LCAweDc2LCAweGIwLCAweDc4LCAweDgwLCAweDc2LCAweGZhLCAweDA4LCAweDc2LCAweDliLCAKKzB4ZWYsIDB4MjQsIDB4ZmQsIDB4NzUsIDB4ZjAsIDB4MGEsIDB4YTQsIDB4YWUsIDB4ZjAsIDB4MTIsIDB4MjIsIDB4OTIsIDB4N2IsIDB4MDEsIDB4N2EsIDB4ZmYsIAorMHg3OSwgMHg0OCwgMHg3OCwgMHg2OCwgMHgxMiwgMHgxYiwgMHgzMSwgMHhhOCwgMHg2NSwgMHhlNiwgMHgyNCwgMHhmZCwgMHg3NSwgMHhmMCwgMHgwOCwgMHhhNCwgCisweGZmLCAweGFlLCAweGYwLCAweDc4LCAweDZhLCAweDEyLCAweDIyLCAweDkyLCAweDc5LCAweDA4LCAweDc4LCAweDZiLCAweDEyLCAweDFiLCAweDMxLCAweDc4LCAKKzB4NmQsIDB4ZWYsIDB4MTIsIDB4MjIsIDB4OTIsIDB4MDUsIDB4NjUsIDB4MjIsIDB4OTAsIDB4ZmYsIDB4ZjAsIDB4ZTAsIDB4NTQsIDB4YWIsIDB4ZjAsIDB4ZTAsIAorMHg0NCwgMHgyMCwgMHhmMCwgMHg5MCwgMHhmYSwgMHhlMywgMHg3NCwgMHgwMiwgMHhmMCwgMHg3YiwgMHgwMSwgMHg3YSwgMHhmYSwgMHg3OSwgMHhjYywgMHhlNCwgCisweGY1LCAweDJkLCAweGY1LCAweDJlLCAweDdkLCAweDAxLCAweDEyLCAweDI1LCAweGQ3LCAweDdlLCAweDAwLCAweDkwLCAweGZhLCAweGUxLCAweGVlLCAweGYwLCAKKzB4YTMsIDB4ZWYsIDB4ZjAsIDB4NjQsIDB4MDEsIDB4NzAsIDB4MTAsIDB4OTAsIDB4ZmEsIDB4Y2MsIDB4ZTAsIDB4YjQsIDB4NTIsIDB4MDksIDB4OTAsIDB4ZjksIAorMHgxNSwgMHhlMCwgMHg1NCwgMHhlZiwgMHhmMCwgMHg4MCwgMHgyOSwgMHg5MCwgMHhmYSwgMHhlMSwgMHhlMCwgMHg3MCwgMHgwNCwgMHhhMywgMHhlMCwgMHg2NCwgCisweDAxLCAweDcwLCAweDEwLCAweDkwLCAweGZhLCAweGNjLCAweGUwLCAweGI0LCAweDEwLCAweDA5LCAweDkwLCAweGY5LCAweDE1LCAweGUwLCAweDQ0LCAweDEwLCAKKzB4ZjAsIDB4ODAsIDB4MGQsIDB4OTAsIDB4ZmEsIDB4ZTMsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4OTAsIDB4ZjksIDB4MTUsIDB4ZTAsIDB4NTQsIDB4ZWYsIDB4ZjAsIAorMHg5MCwgMHhmZiwgMHhmMCwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHgyMiwgMHgxMiwgMHgxMCwgMHgwMywgMHg3OCwgMHg4YSwgMHhlZiwgMHhmNiwgMHgxMiwgCisweDJhLCAweDA2LCAweDEyLCAweDIyLCAweDMzLCAweDMwLCAweGUwLCAweDI1LCAweDEyLCAweDIyLCAweDA3LCAweGUwLCAweDU0LCAweDdmLCAweGYwLCAweDc4LCAKKzB4NmIsIDB4MTIsIDB4MWIsIDB4MjgsIDB4OTAsIDB4MDAsIDB4MDIsIDB4MTIsIDB4MWEsIDB4MGIsIDB4MzAsIDB4ZTcsIDB4MDksIDB4OTAsIDB4MDAsIDB4MDIsIAorMHhlNCwgMHgxMiwgMHgxYSwgMHg0YSwgMHg4MCwgMHhlOSwgMHgxMiwgMHgyMiwgMHgwNywgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHgxMiwgMHgyMiwgMHgzMywgCisweDMwLCAweGUxLCAweDFlLCAweDEyLCAweDIxLCAweGU5LCAweGUwLCAweDU0LCAweDdmLCAweGYwLCAweDEyLCAweDMxLCAweDVjLCAweDc4LCAweDY4LCAweDEyLCAKKzB4MWIsIDB4MjgsIDB4OTAsIDB4MDAsIDB4MDIsIDB4NzQsIDB4ODAsIDB4MTIsIDB4MWEsIDB4NGEsIDB4MTIsIDB4MjEsIDB4ZTksIDB4ZTAsIDB4NDQsIDB4ODAsIAorMHhmMCwgMHgxMiwgMHgzMSwgMHhjNywgMHhlNCwgMHhmZiwgMHgxMiwgMHgzMCwgMHhlYywgMHgwMiwgMHgxMCwgMHg4NiwgMHgwMywgMHg2OCwgMHgwMSwgMHhmZiwgCisweDQ4LCAweDAzLCAweDZiLCAweDAxLCAweGZmLCAweDA4LCAweDAyLCAweDY2LCAweDAwLCAweDAwLCAweDQ0LCAweGZhLCAweDk1LCAweDAwLCAweDAwLCAweDAwLCAKKzB4MDAsIDB4NDQsIDB4ZmEsIDB4OTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZmEsIDB4YWYsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZmEsIDB4N2IsIAorMHgwMCwgMHgwMCwgMHg0MiwgMHhmYSwgMHg3OSwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmOSwgMHg2YSwgMHhmZiwgMHhmZiwgMHg0MiwgMHhmYSwgMHg3NywgMHgwMCwgCisweDAwLCAweDQzLCAweGY5LCAweDE4LCAweDBhLCAweDMyLCAweDAyLCAweDQxLCAweGY5LCAweDY1LCAweDIwLCAweDQxLCAweGY5LCAweDY2LCAweDIwLCAweDQxLCAKKzB4ZjksIDB4NjMsIDB4MDAsIDB4NDEsIDB4ZjksIDB4NjQsIDB4MDAsIDB4NDQsIDB4ZjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjksIAorMHgxNSwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmOSwgMHgxNywgMHgwMCwgMHgwMSwgMHgyMCwgMHgwMCwgMHg0MSwgMHhmOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxMiwgCisweDEwLCAweDAzLCAweDc4LCAweDg1LCAweGVmLCAweGY2LCAweDEyLCAweDMwLCAweDkzLCAweDEyLCAweDMwLCAweGVjLCAweDc4LCAweDg1LCAweGU2LCAweGZmLCAKKzB4MjQsIDB4MTIsIDB4MTIsIDB4MjEsIDB4ZmYsIDB4ZTAsIDB4ZmUsIDB4MzAsIDB4ZTcsIDB4MTYsIDB4ZWYsIDB4YjQsIDB4MDMsIDB4MDksIDB4OTAsIDB4ZmYsIAorMHg5ZSwgMHhlMCwgMHg1NCwgMHhmYSwgMHhmMCwgMHg4MCwgMHgyMiwgMHg5MCwgMHhmZiwgMHg5ZSwgMHhlMCwgMHg1NCwgMHhmNSwgMHhmMCwgMHg4MCwgMHgxOSwgCisweGVlLCAweDU0LCAweDAzLCAweDYwLCAweDE0LCAweGVmLCAweGI0LCAweDAzLCAweDA5LCAweDkwLCAweGZmLCAweGE0LCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAKKzB4ODAsIDB4MDcsIDB4OTAsIDB4ZmYsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4OTAsIDB4ZjksIDB4MTcsIDB4ZTAsIDB4MTQsIDB4ZjAsIDB4ZTAsIAorMHg3MCwgMHgwMiwgMHhkMiwgMHhiMywgMHgwMiwgMHgxMCwgMHg4NiwgMHgxMiwgMHgxZCwgMHg2YywgMHhlNSwgMHgzYSwgMHg2NCwgMHgwOSwgMHg3MCwgMHgwNCwgCisweGU1LCAweDM5LCAweDY0LCAweDAxLCAweDYwLCAweDQ4LCAweGMzLCAweGU1LCAweDNhLCAweDk0LCAweDA4LCAweGU1LCAweDM5LCAweDk0LCAweDAwLCAweDQwLCAKKzB4MTEsIDB4N2YsIDB4MDgsIDB4ZWYsIDB4ZTUsIDB4M2EsIDB4OTQsIDB4MDgsIDB4ZjUsIDB4M2EsIDB4ZTUsIDB4MzksIDB4OTQsIDB4MDAsIDB4ZjUsIDB4MzksIAorMHg4MCwgMHgwNSwgMHhhZiwgMHgzYSwgMHgxMiwgMHgxZCwgMHg4NCwgMHhlNCwgMHhmZSwgMHhlZSwgMHhjMywgMHg5ZiwgMHg1MCwgMHgxOSwgMHgxMiwgMHgxYywgCisweDExLCAweDEyLCAweDE5LCAweGYyLCAweGZkLCAweDc0LCAweGY4LCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweGZlLCAweGY1LCAweDgzLCAweGVkLCAKKzB4ZjAsIDB4MGUsIDB4MTIsIDB4MWMsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ZWYsIDB4NTQsIDB4N2YsIDB4OTAsIDB4ZmYsIDB4ODEsIDB4ZjAsIDB4MjIsIDB4OGIsIAorMHg1OSwgMHg4YSwgMHg1YSwgMHg4OSwgMHg1YiwgMHgxMiwgMHgyZCwgMHg0OCwgMHg3MCwgMHgwNSwgMHhhMywgMHg3NCwgMHgwOCwgMHhmMCwgMHgyMiwgMHhhYiwgCisweDU5LCAweGFhLCAweDVhLCAweGE5LCAweDViLCAweDEyLCAweDJkLCAweDNjLCAweDkwLCAweGZhLCAweGM2LCAweDEyLCAweDFiLCAweDQzLCAweGU1LCAweDViLCAKKzB4MjQsIDB4MDMsIDB4ZjksIDB4ZTQsIDB4MzUsIDB4NWEsIDB4ZmEsIDB4OTAsIDB4ZmEsIDB4YzAsIDB4MTIsIDB4MWIsIDB4NDMsIDB4ZTQsIDB4OTAsIDB4ZmEsIAorMHhiZiwgMHhmMCwgMHg3OCwgMHg4YiwgMHhmNiwgMHg5MCwgMHhmYSwgMHhiZSwgMHhlMCwgMHhmZiwgMHg3OCwgMHg4YiwgMHhlNiwgMHhjMywgMHg5ZiwgMHg1MCwgCisweDEyLCAweDEyLCAweDJkLCAweDFhLCAweGZmLCAweDEyLCAweDJkLCAweDIzLCAweDEyLCAweDJkLCAweDM2LCAweDc4LCAweDhiLCAweDA2LCAweDEyLCAweDJkLCAKKzB4MzIsIDB4ODAsIDB4ZTIsIDB4MjIsIDB4YWQsIDB4MDcsIDB4YWMsIDB4MDYsIDB4OTAsIDB4MzEsIDB4NGQsIDB4ZTQsIDB4OTMsIDB4ZmYsIDB4NzgsIDB4NzQsIAorMHhmNiwgMHg1NCwgMHgwZiwgMHgxMiwgMHgxYywgMHhmOCwgMHhlMCwgMHgwOCwgMHg3NiwgMHgwMCwgMHgwOCwgMHhmNiwgMHgxOCwgMHgxMiwgMHgxYywgMHgyOSwgCisweGMzLCAweDMzLCAweGNlLCAweDMzLCAweGNlLCAweGQ4LCAweGY5LCAweGZmLCAweDc4LCAweDc1LCAweGVlLCAweGY2LCAweDA4LCAweGVmLCAweGY2LCAweGVlLCAKKzB4NDQsIDB4ZjgsIDB4MTgsIDB4ZjYsIDB4ZWYsIDB4MDgsIDB4ZjYsIDB4OTAsIDB4ZmYsIDB4N2EsIDB4ZTAsIDB4MjAsIDB4ZTcsIDB4MDMsIDB4N2YsIDB4MDAsIAorMHgyMiwgMHg3OCwgMHg3NSwgMHhlNiwgMHhmZSwgMHgwOCwgMHhlNiwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlYywgMHhmMCwgMHhhMywgMHhlZCwgMHhmMCwgCisweDkwLCAweGZmLCAweDdhLCAweDc0LCAweDAyLCAweGYwLCAweDdmLCAweDAxLCAweDIyLCAweGFiLCAweDU2LCAweGFhLCAweDU3LCAweGE5LCAweDU4LCAweDkwLCAKKzB4MDAsIDB4MDMsIDB4MTIsIDB4MWEsIDB4MGIsIDB4NTQsIDB4ZjAsIDB4MjQsIDB4YTAsIDB4MjIsIDB4OTAsIDB4ZmEsIDB4YzYsIDB4MTIsIDB4MWIsIDB4M2EsIAorMHgwMiwgMHgxOSwgMHhmMiwgMHg5MCwgMHhmYSwgMHhjMCwgMHgxMiwgMHgxYiwgMHgzYSwgMHhlZiwgMHgxMiwgMHgxYSwgMHgzOCwgMHg5MCwgMHhmYSwgMHhjNywgCisweGU0LCAweDIyLCAweDkwLCAweGZhLCAweGMxLCAweGU0LCAweDc1LCAweGYwLCAweDAxLCAweDAyLCAweDFhLCAweDZjLCAweDkwLCAweDAwLCAweDA4LCAweDEyLCAKKzB4MWEsIDB4OTgsIDB4YWEsIDB4ZjAsIDB4ZjksIDB4N2IsIDB4MDEsIDB4MjIsIDB4OTAsIDB4MDAsIDB4MDUsIDB4MTIsIDB4MWEsIDB4MGIsIDB4OTAsIDB4ZmEsIAorMHhiZSwgMHhmMCwgMHgyMiwgMHhhYiwgMHg1NiwgMHhhYSwgMHg1NywgMHhhOSwgMHg1OCwgMHgyMiwgMHg5MCwgMHhmYSwgMHhkYSwgMHhlMCwgMHhmZiwgMHg3ZSwgCisweDAwLCAweGMzLCAweDkwLCAweGZhLCAweGQ0LCAweGUwLCAweDlmLCAweGYwLCAweDkwLCAweGZhLCAweGQzLCAweGUwLCAweDllLCAweGYwLCAweDkwLCAweGZhLCAKKzB4ZDUsIDB4ZWUsIDB4OGYsIDB4ZjAsIDB4MTIsIDB4MWEsIDB4NmMsIDB4ZWYsIDB4MjUsIDB4NTEsIDB4ZjUsIDB4NTEsIDB4ZWUsIDB4MzUsIDB4NTAsIDB4ZjUsIAorMHg1MCwgMHgyMiwgMHg5MCwgMHhmZiwgMHhmMCwgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg5MCwgMHhmYSwgMHhlMywgCisweGUwLCAweDY0LCAweDAzLCAweDIyLCAweDkwLCAweGZmLCAweGYyLCAweGUwLCAweGFiLCAweDI5LCAweGFhLCAweDJhLCAweGE5LCAweDJiLCAweDAyLCAweDFhLCAKKzB4MzgsIDB4OTAsIDB4ZmYsIDB4ZjMsIDB4NzQsIDB4YTAsIDB4ZjAsIDB4MjIsIDB4OGYsIDB4NjQsIDB4ZWQsIDB4NzAsIDB4MGYsIDB4ZTUsIDB4NjQsIDB4YjQsIAorMHgwMywgMHgwNSwgMHg3ZiwgMHgwMSwgMHgwMiwgMHgzMSwgMHgzMiwgMHg3ZiwgMHgwMiwgMHgwMiwgMHgzMSwgMHgzMiwgMHhhZiwgMHg2NCwgMHgxMiwgMHgyYSwgCisweDA2LCAweDc0LCAweDZlLCAweDI1LCAweDY0LCAweGY4LCAweGU2LCAweDMwLCAweGUyLCAweDBiLCAweGQyLCAweDA5LCAweDEyLCAweDFjLCAweDgzLCAweGUwLCAKKzB4NTQsIDB4N2YsIDB4ZjAsIDB4ODAsIDB4MDIsIDB4YzIsIDB4MDksIDB4ZTUsIDB4NjQsIDB4YjQsIDB4MDMsIDB4MDcsIDB4N2YsIDB4ODEsIDB4MTIsIDB4MzEsIAorMHgzMiwgMHg4MCwgMHgwNSwgMHg3ZiwgMHg4MiwgMHgxMiwgMHgzMSwgMHgzMiwgMHgzMCwgMHgwOSwgMHgwNywgMHgxMiwgMHgxYywgMHg4MywgMHhlMCwgMHg0NCwgCisweDgwLCAweGYwLCAweDEyLCAweDMxLCAweGM3LCAweDIyLCAweDEyLCAweDEwLCAweDAzLCAweDkwLCAweGZmLCAweGZkLCAweGUwLCAweDQ0LCAweDYwLCAweGYwLCAKKzB4ZDIsIDB4MDEsIDB4OTAsIDB4ZmYsIDB4ZmMsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4ZmYsIDB4MDAsIDB4ZTAsIDB4MzAsIDB4ZTcsIDB4MTMsIAorMHg5MCwgMHhmZiwgMHg4MywgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg0MywgMHgzNSwgMHg4MCwgMHg5MCwgMHhmZiwgMHhmYywgMHhlMCwgMHg0NCwgMHgwMSwgCisweGYwLCAweDgwLCAweDBkLCAweDEyLCAweDFkLCAweDJmLCAweDUzLCAweDM1LCAweDdmLCAweDkwLCAweGZmLCAweGZjLCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAKKzB4OTAsIDB4ZmYsIDB4ODEsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4MTIsIDB4MDIsIDB4YjAsIDB4MTIsIDB4MWQsIDB4MzcsIDB4MDIsIDB4MTAsIDB4ODYsIAorMHgxMiwgMHgxMCwgMHgwMywgMHg3OCwgMHg4OSwgMHhlZiwgMHhmNiwgMHhkMiwgMHgwMCwgMHgxMiwgMHgyYSwgMHgwNiwgMHg5MCwgMHhmOSwgMHg2NywgMHgxMiwgCisweDFiLCAweDNhLCAweGU5LCAweDI0LCAweDAzLCAweGY5LCAweGU0LCAweDNhLCAweGZhLCAweGMwLCAweDAyLCAweDc4LCAweDgwLCAweGU2LCAweGZlLCAweDA4LCAKKzB4ZTYsIDB4YWEsIDB4MDYsIDB4ZjgsIDB4YWMsIDB4MDIsIDB4N2QsIDB4MDEsIDB4ZDAsIDB4MDIsIDB4MTIsIDB4MjIsIDB4MjUsIDB4MTIsIDB4MzEsIDB4YzcsIAorMHg3OCwgMHg4OSwgMHhlNiwgMHhmZiwgMHgxMiwgMHgxMywgMHgzZiwgMHgxMiwgMHgzMCwgMHhlYywgMHgwMiwgMHgxMCwgMHg4NiwgMHg4ZiwgMHg2MywgMHgxMiwgCisweDJhLCAweDA2LCAweDEyLCAweDIyLCAweDA3LCAweGUwLCAweDU0LCAweDNmLCAweGYwLCAweGU1LCAweDgyLCAweDI0LCAweDA0LCAweDEyLCAweDIxLCAweGYzLCAKKzB4ZTAsIDB4NTQsIDB4M2YsIDB4ZjAsIDB4MDgsIDB4ZTYsIDB4ZmUsIDB4MDgsIDB4ZTYsIDB4OGUsIDB4ODMsIDB4MjQsIDB4MGIsIDB4MTIsIDB4MjEsIDB4ZjMsIAorMHhlMCwgMHg1NCwgMHhmOCwgMHhmMCwgMHgxMiwgMHgzMSwgMHhjNywgMHg3NCwgMHg2ZSwgMHgyNSwgMHg2MywgMHhmOCwgMHg3NCwgMHhmYiwgMHg1NiwgMHhmNiwgCisweDdmLCAweDAwLCAweDIyLCAweDhmLCAweDIzLCAweGMyLCAweDA4LCAweDEyLCAweDJhLCAweDA2LCAweDEyLCAweDIyLCAweDEyLCAweDc4LCAweDdlLCAweDEyLCAKKzB4MjEsIDB4ZWIsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MTIsIDB4MjIsIDB4NGEsIDB4MTIsIDB4MjEsIDB4ZWYsIDB4ZTAsIDB4MjAsIDB4ZTAsIDB4ZjYsIAorMHhlZiwgMHgyNCwgMHgwYiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzZSwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmOCwgMHhmMCwgMHgxMiwgMHgzMSwgMHhjNywgCisweGFmLCAweDIzLCAweDEyLCAweDEzLCAweDNmLCAweDIyLCAweDEyLCAweDEwLCAweDAzLCAweDEyLCAweDJhLCAweDA2LCAweDEyLCAweDIyLCAweDRhLCAweDI0LCAKKzB4MDYsIDB4MTIsIDB4MjEsIDB4ZjEsIDB4ZTAsIDB4ZmQsIDB4MTIsIDB4MjIsIDB4MmQsIDB4OTAsIDB4MDAsIDB4MDMsIDB4MTIsIDB4MjIsIDB4NTIsIDB4MjQsIAorMHgwNSwgMHgxMiwgMHgyMSwgMHhmMywgMHhlMCwgMHg5MCwgMHgwMCwgMHgwNCwgMHgxMiwgMHgxYSwgMHg0YSwgMHgxMiwgMHgzMSwgMHhjNywgMHg3ZCwgMHgwMiwgCisweGU0LCAweGZmLCAweDEyLCAweDJmLCAweDE4LCAweDAyLCAweDEwLCAweDg2LCAweGFlLCAweDA1LCAweDEyLCAweDFjLCAweGRlLCAweGVmLCAweDEyLCAweDFhLCAKKzB4NGEsIDB4MGUsIDB4MGUsIDB4MGUsIDB4ZWUsIDB4ZDMsIDB4OTUsIDB4M2MsIDB4ZTQsIDB4OTUsIDB4M2IsIDB4NDAsIDB4MDIsIDB4YWUsIDB4M2MsIDB4ZWUsIAorMHhkMywgMHg5NCwgMHgwOCwgMHg3NCwgMHg4MCwgMHg5NCwgMHg4MSwgMHg0MCwgMHgwYSwgMHg3ZSwgMHgwMywgMHg5MCwgMHgwMCwgMHgwMiwgMHg3NCwgMHgwMiwgCisweDEyLCAweDFhLCAweDRhLCAweGFmLCAweDA2LCAweDEyLCAweDMxLCAweGIxLCAweDIyLCAweGFlLCAweDA3LCAweGVkLCAweDU0LCAweDAzLCAweDY0LCAweDAxLCAKKzB4NjAsIDB4MDMsIDB4N2YsIDB4MTAsIDB4MjIsIDB4ZWQsIDB4NTQsIDB4N2MsIDB4YzMsIDB4OTQsIDB4MDQsIDB4NTAsIDB4MDMsIDB4N2YsIDB4MGIsIDB4MjIsIAorMHg3NCwgMHg2ZSwgMHgyZSwgMHhmOCwgMHg3NCwgMHgwMiwgMHg0NiwgMHhmNiwgMHg3NCwgMHg5NiwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHhmYSwgCisweGY1LCAweDgzLCAweGVkLCAweGYwLCAweDdmLCAweDAwLCAweDIyLCAweGJmLCAweDAzLCAweDA2LCAweDdjLCAweGZmLCAweDdkLCAweGUwLCAweDgwLCAweDA0LCAKKzB4N2MsIDB4ZmYsIDB4N2QsIDB4ZTIsIDB4OGQsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ZTUsIDB4ODIsIDB4MjQsIDB4MDQsIAorMHgxMiwgMHgyMSwgMHhmMywgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg3NCwgMHg2ZSwgMHgyZiwgMHhmOCwgMHg3NCwgMHgwNCwgMHg0NiwgMHhmNiwgMHg3ZiwgCisweDAwLCAweDIyLCAweDEyLCAweDEwLCAweDAzLCAweGU1LCAweDNhLCAweDY0LCAweDA5LCAweDcwLCAweDA0LCAweGU1LCAweDM5LCAweDY0LCAweDAxLCAweDYwLCAKKzB4MTYsIDB4OTAsIDB4ZmYsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4YzMsIDB4ZTUsIDB4M2EsIDB4OWYsIDB4ZTUsIDB4MzksIDB4OTQsIDB4MDAsIAorMHg0MCwgMHgwNSwgMHgxMiwgMHgyOCwgMHgxNiwgMHg4MCwgMHgwMywgMHgxMiwgMHgzMSwgMHhiZCwgMHgwMiwgMHgxMCwgMHg4NiwgMHg5MCwgMHhmZiwgMHhmYywgCisweGUwLCAweDIwLCAweGU3LCAweDFmLCAweGMyLCAweGFmLCAweDdkLCAweGZmLCAweGFjLCAweDA1LCAweDFkLCAweGVjLCAweDYwLCAweDE1LCAweDdlLCAweDA0LCAKKzB4N2YsIDB4MDAsIDB4ZWYsIDB4MWYsIDB4YWEsIDB4MDYsIDB4NzAsIDB4MDEsIDB4MWUsIDB4NGEsIDB4NjAsIDB4ZWMsIDB4OTAsIDB4ZmYsIDB4OTIsIDB4ZTQsIAorMHhmMCwgMHg4MCwgMHhlZiwgMHgyMiwgMHgxMiwgMHgxMCwgMHgwMywgMHg3OCwgMHg2NiwgMHhlNiwgMHhmZSwgMHgwOCwgMHhlNiwgMHhmZiwgMHgzMCwgMHhlMCwgCisweDEyLCAweDMwLCAweGUxLCAweDBmLCAweDkwLCAweGZmLCAweGZjLCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDdmLCAweDA0LCAweDEyLCAweDEyLCAweDE5LCAKKzB4MTIsIDB4MWQsIDB4NDYsIDB4MDIsIDB4MTAsIDB4ODYsIDB4OGUsIDB4NWYsIDB4OGYsIDB4NjAsIDB4ZTUsIDB4NjAsIDB4MTUsIDB4NjAsIDB4YWUsIDB4NWYsIAorMHg3MCwgMHgwMiwgMHgxNSwgMHg1ZiwgMHhkMywgMHg5NCwgMHgwMCwgMHhlZSwgMHg5NCwgMHgwMCwgMHg0MCwgMHgwOSwgMHg3ZSwgMHgwNywgMHg3ZiwgMHhkMCwgCisweDEyLCAweDBmLCAweGRjLCAweDgwLCAweGU1LCAweDIyLCAweDExLCAweDk0LCAweDJkLCAweGY2LCAweDIzLCAweGVmLCAweDMxLCAweGEzLCAweDJmLCAweGY0LCAKKzB4MmYsIDB4YTIsIDB4MzAsIDB4YjIsIDB4MmUsIDB4ZTYsIDB4MjYsIDB4NmQsIDB4MmIsIDB4YWYsIDB4MzAsIDB4NTUsIDB4MzAsIDB4NzQsIDB4MWQsIDB4YjQsIAorMHgyZSwgMHg0MCwgMHgyYSwgMHhlOCwgMHgwZSwgMHgxMiwgMHgxMCwgMHgwMywgMHg3OCwgMHg4NiwgMHgxMiwgMHgyMiwgMHg4MiwgMHgyMCwgMHhlMSwgMHgwNywgCisweDdmLCAweDEyLCAweDEyLCAweDMwLCAweGVjLCAweDgwLCAweDBhLCAweDc4LCAweDg2LCAweGU2LCAweGZmLCAweDEyLCAweDIzLCAweDQ5LCAweDEyLCAweDMwLCAKKzB4ZWMsIDB4MDIsIDB4MTAsIDB4ODYsIDB4MTIsIDB4MTAsIDB4MDMsIDB4NzgsIDB4ODcsIDB4MTIsIDB4MjIsIDB4ODIsIDB4MjAsIDB4ZTIsIDB4MDcsIDB4N2YsIAorMHgxMSwgMHgxMiwgMHgzMCwgMHhlYywgMHg4MCwgMHgwYSwgMHg3OCwgMHg4NywgMHhlNiwgMHhmZiwgMHgxMiwgMHgyZSwgMHg3ZCwgMHgxMiwgMHgzMCwgMHhlYywgCisweDAyLCAweDEwLCAweDg2LCAweDhmLCAweDYxLCAweDEyLCAweDJlLCAweDdkLCAweGFmLCAweDYxLCAweDEyLCAweDJhLCAweDA2LCAweDEyLCAweDIyLCAweDEyLCAKKzB4MTIsIDB4MzEsIDB4YzcsIDB4NzQsIDB4NmUsIDB4MjUsIDB4NjEsIDB4ZjgsIDB4NzQsIDB4ZmQsIDB4NTYsIDB4ZjYsIDB4YWYsIDB4NjEsIDB4MTIsIDB4MTMsIAorMHgzZiwgMHgyMiwgMHgxMiwgMHgxMCwgMHgwMywgMHhlNSwgMHgzYSwgMHg2NCwgMHgwOSwgMHg3MCwgMHgwNCwgMHhlNSwgMHgzOSwgMHg2NCwgMHgwMSwgMHg2MCwgCisweDA1LCAweDEyLCAweDJjLCAweDA3LCAweDgwLCAweDA2LCAweDEyLCAweDFkLCAweDY0LCAweDEyLCAweDFkLCAweDZjLCAweDAyLCAweDEwLCAweDg2LCAweDEyLCAKKzB4MjksIDB4OTMsIDB4MTIsIDB4MTIsIDB4YmIsIDB4OTAsIDB4ZjgsIDB4MDQsIDB4ZTAsIDB4ZmYsIDB4NjAsIDB4MDUsIDB4N2QsIDB4MDEsIDB4MTIsIDB4MTIsIAorMHg1OCwgMHgxMiwgMHgyOSwgMHgxZCwgMHgxMiwgMHgxMiwgMHhmNywgMHgxMiwgMHgxMSwgMHg3NCwgMHg4MCwgMHhlMywgMHgxMiwgMHgxYywgMHhkZSwgMHhlZiwgCisweDEyLCAweDFhLCAweDRhLCAweGU0LCAweGY1LCAweDMzLCAweGY1LCAweDM0LCAweGVmLCAweDYwLCAweDAzLCAweDAyLCAweDMxLCAweGJkLCAweGU0LCAweGZmLCAKKzB4MTIsIDB4MzEsIDB4YjEsIDB4MjIsIDB4OTAsIDB4ZmYsIDB4ZjAsIDB4ZTAsIDB4ZmYsIDB4NTQsIDB4YTAsIDB4NjAsIDB4ZjcsIDB4ZWYsIDB4MzAsIDB4ZTUsIAorMHgwOCwgMHg5MCwgMHhmZiwgMHhmMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHhjMywgMHgyMiwgMHhkMywgMHgyMiwgMHg5MCwgMHhmZiwgMHhmMCwgMHhlMCwgMHhmZiwgCisweDU0LCAweDI4LCAweDYwLCAweGY3LCAweGVmLCAweDMwLCAweGU1LCAweDA4LCAweDkwLCAweGZmLCAweGYwLCAweDQ0LCAweDIwLCAweGYwLCAweGMzLCAweDIyLCAKKzB4ZDMsIDB4MjIsIDB4ZWYsIDB4MzAsIDB4ZTcsIDB4MDgsIDB4MTIsIDB4MWMsIDB4OTUsIDB4ZTAsIDB4NTQsIDB4ZGYsIDB4ZjAsIDB4MjIsIDB4ZWYsIDB4MTIsIAorMHgxYywgMHhlOCwgMHhlMCwgMHg1NCwgMHhkZiwgMHhmMCwgMHgyMiwgMHg4MSwgMHgwMSwgMHg4MiwgMHgwMiwgMHg4MywgMHgwMywgMHg4NywgMHg0MCwgMHgwMCwgCisweDQwLCAweDAwLCAweDQwLCAweDAwLCAweDQwLCAweDAwLCAweDQwLCAweDAwLCAweDQwLCAweDAwLCAweDA4LCAweDAwLCAweDc4LCAweDdlLCAweDEyLCAweDIyLCAKKzB4MDksIDB4YTMsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4MzAsIDB4ZTcsIDB4MDYsIDB4NTQsIDB4N2YsIDB4ZjAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4MjIsIDB4ODUsIAorMHgzYiwgMHgzOSwgMHg4NSwgMHgzYywgMHgzYSwgMHg5MCwgMHhmZiwgMHg4MiwgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHhhMywgMHhlMCwgMHg1NCwgMHg3ZiwgCisweGYwLCAweDIyLCAweGU0LCAweGZlLCAweGVlLCAweDkwLCAweDMxLCAweDQ3LCAweDkzLCAweGI1LCAweDA3LCAweDAyLCAweGQzLCAweDIyLCAweDBlLCAweGJlLCAKKzB4MDcsIDB4ZjIsIDB4YzMsIDB4MjIsIDB4MDAsIDB4MDgsIDB4MTgsIDB4MjgsIDB4MzgsIDB4MDEsIDB4ODEsIDB4MTAsIDB4MGEsIDB4MDIsIDB4MDAsIDB4MDAsIAorMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgxMCwgMHgwMywgMHg3ZiwgMHgwMiwgMHgxMiwgMHgxMCwgMHg5MiwgMHgxMiwgMHgxZCwgMHg0NiwgMHgwMiwgMHgxMCwgCisweDg2LCAweDc1LCAweDM5LCAweDAwLCAweDhmLCAweDNhLCAweDEyLCAweDFjLCAweDMwLCAweDEyLCAweDJjLCAweDA3LCAweDIyLCAweDEyLCAweDFkLCAweDZjLCAKKzB4MTIsIDB4MWQsIDB4MmYsIDB4MTIsIDB4MWQsIDB4NjQsIDB4MjIsIDB4YzIsIDB4MDgsIDB4MjIsIAorfTsKKworI3VuZGVmIElNQUdFX1ZFUlNJT05fTkFNRQorCisjdW5kZWYgSU1BR0VfQVJSQVlfTkFNRQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9faW9uc3AuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19pb25zcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MmUwM2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9faW9uc3AuaApAQCAtMCwwICsxLDQ1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCUlPTlNQLkgJCURlZmluaXRpb25zIGZvciBJL08gTmV0d29ya3MgU2VyaWFsIFByb3RvY29sCisgKgorICoJQ29weXJpZ2h0IChDKSAxOTk3LTE5OTggSW5zaWRlIE91dCBOZXR3b3JrcywgSW5jLgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICoJVGhlc2UgZGVmaW5pdGlvbnMgYXJlIHVzZWQgYnkgYm90aCBrZXJuZWwtbW9kZSBkcml2ZXIgYW5kIHRoZQorICoJcGVyaXBoZXJhbCBmaXJtd2FyZSBhbmQgTVVTVCBiZSBrZXB0IGluIHN5bmMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgZGF0YSB0byBhbmQgZnJvbSBhbGwgcG9ydHMgb24gdGhlIHBlcmlwaGVyYWwgaXMgbXVsdGlwbGV4ZWQKK3Rocm91Z2ggYSBzaW5nbGUgZW5kcG9pbnQgcGFpciAoRVAxIHNpbmNlIGl0IHN1cHBvcnRzIDY0LWJ5dGUKK01heFBhY2tldFNpemUpLiBUaGVyZWZvcmUsIHRoZSBkYXRhLCBjb21tYW5kcywgYW5kIHN0YXR1cyBmb3IKK2VhY2ggcG9ydCBtdXN0IGJlIHByZWNlZGVkIGJ5IGEgc2hvcnQgaGVhZGVyIGlkZW50aWZ5aW5nIHRoZQorZGVzdGluYXRpb24gcG9ydC4gVGhlIGhlYWRlciBhbHNvIGlkZW50aWZpZXMgdGhlIGJ5dGVzIHRoYXQgZm9sbG93CithcyBkYXRhIG9yIGFzIGNvbW1hbmQvc3RhdHVzIGluZm8uCisKK0hlYWRlciBmb3JtYXQsIGZpcnN0IGJ5dGU6CisKKyAgICBDTExMTFBQUAorICAgIC0tLS0tLS0tCisgICAgfCB8CSB8LS0tLS0tIFBvcnQgTnVtYmVyOgkwLTcKKyAgICB8IHwtLS0tLS0tLS0gTGVuZ3RoOglNU0IgYml0cyBvZiBsZW5ndGgKKyAgICB8LS0tLS0tLS0tLS0gRGF0YS9Db21tYW5kOgkwID0gRGF0YSBoZWFkZXIKKwkJCQkxID0gQ21kIC8gU3RhdHVzIChDbWQgaWYgT1VULCBTdGF0dXMgaWYgSU4pCisKK1RoaXMgZ2l2ZXMgMiBwb3NzaWJsZSBmb3JtYXRzOgorCisKKyAgICBEYXRhIGhlYWRlcjoJCTBMTExMUFBQCUxMTExMTExMCisgICAgPT09PT09PT09PT09CisKKyAgICBXaGVyZSAoTExMTCxMTExMTExMKSBpcyAxMi1iaXQgbGVuZ3RoIG9mIGRhdGEgdGhhdCBmb2xsb3dzIGZvcgorICAgIHBvcnQgbnVtYmVyIChQUFApLiBUaGUgbGVuZ3RoIGlzIDAtYmFzZWQgKDAtRkZGIG1lYW5zIDAtNDA5NQorICAgIGJ5dGVzKS4gVGhlIH40SyBsaW1pdCBhbGxvd3MgdGhlIGhvc3QgZHJpdmVyICh3aGljaCBkZWFscyBpbgorICAgIHRyYW5zZmVyIHJlcXVlc3RzIGluc3RlYWQgb2YgaW5kaXZpZHVhbCBwYWNrZXRzKSB0byB3cml0ZSBhCisgICAgbGFyZ2UgY2h1bmsgb2YgZGF0YSBpbiBhIHNpbmdsZSByZXF1ZXN0LiBOb3RlLCBob3dldmVyLCB0aGF0CisgICAgdGhlIGxlbmd0aCBtdXN0IGFsd2F5cyBiZSA8PSB0aGUgY3VycmVudCBUeENyZWRpdHMgZm9yIGEgZ2l2ZW4KKyAgICBwb3J0IGR1ZSB0byBidWZmZXJpbmcgbGltaXRhdGlvbnMgb24gdGhlIHBlcmlwaGVyYWwuCisKKworICAgIENtZC9TdGF0dXMgaGVhZGVyOgkJMWNjY2NQUFAJWyBDQ0NDQ0NDQywJIFBhcmFtcyBdLi4uCisgICAgPT09PT09PT09PT09PT09PT09CisKKyAgICBXaGVyZSAoY2NjYykgb3IgKGNjY2MsQ0NDQ0NDQ0MpIGlzIHRoZSBjbWQgb3Igc3RhdHVzIGlkZW50aWZpZXIuCisgICAgRnJlcXVlbnRseS11c2VkIHZhbHVlcyBhcmUgZW5jb2RlZCBhcyAoY2NjYyksIGxvbmdlciBvbmVzIHVzaW5nCisgICAgKGNjY2MsQ0NDQ0NDQ0MpLiBTdWJzZXF1ZW50IGJ5dGVzIGFyZSBvcHRpb25hbCBwYXJhbWV0ZXJzIGFuZCBhcmUKKyAgICBzcGVjaWZpYyB0byB0aGUgY21kIG9yIHN0YXR1cyBjb2RlLiBUaGlzIG1heSBpbmNsdWRlIGEgbGVuZ3RoCisgICAgZm9yIGNvbW1hbmQgYW5kIHN0YXR1cyBjb2RlcyB0aGF0IG5lZWQgdmFyaWFibGUtbGVuZ3RoIHBhcmFtZXRlcnMuCisKKworSW4gYWRkaXRpb24sIHdlIHVzZSBhbm90aGVyIGludGVycnVwdCBwaXBlIChlbmRwb2ludCkgd2hpY2ggdGhlIGhvc3QgcG9sbHMKK3BlcmlvZGljYWxseSBmb3IgZmxvdyBjb250cm9sIGluZm9ybWF0aW9uLiBUaGUgcGVyaXBoZXJhbCwgd2hlbiB0aGVyZSBoYXMKK2JlZW4gYSBjaGFuZ2UsIHNlbmRzIHRoZSBmb2xsb3dpbmcgMTAtYnl0ZSBwYWNrZXQ6CisKKwlSUlJSUlJSUlJSUlJSUlJSCisJVDBUMFQwVDBUMFQwVDBUMAorCVQxVDFUMVQxVDFUMVQxVDEKKwlUMlQyVDJUMlQyVDJUMlQyCisJVDNUM1QzVDNUM1QzVDNUMworCitUaGUgZmlyc3QgZmllbGQgaXMgdGhlIDE2LWJpdCBSeEJ5dGVzQXZhaWwgZmllbGQsIHdoaWNoIGluZGljYXRlcyB0aGUKK251bWJlciBvZiBieXRlcyB3aGljaCBtYXkgYmUgcmVhZCBieSB0aGUgaG9zdCBmcm9tIEVQMS4gVGhpcyBpcyBuZWNlc3Nhcnk6CisoYSkgYmVjYXVzZSBPU1IyLjEgaGFzIGEgYnVnIHdoaWNoIGNhdXNlcyBkYXRhIGxvc3MgaWYgdGhlIHBlcmlwaGVyYWwgcmV0dXJucworZmV3ZXIgYnl0ZXMgdGhhbiB0aGUgaG9zdCBleHBlY3RzIHRvIHJlYWQsIGFuZCAoYikgYmVjYXVzZSwgb24gTWljcm9zb2Z0CitwbGF0Zm9ybXMgYXQgbGVhc3QsIGFuIG91dHN0YW5kaW5nIHJlYWQgcG9zdGVkIG9uIEVQMSBjb25zdW1lcyBhYm91dCAzNSUgb2YKK3RoZSBDUFUganVzdCBwb2xsaW5nIHRoZSBkZXZpY2UgZm9yIGRhdGEuCisKK1RoZSBuZXh0IDQgZmllbGRzIGFyZSB0aGUgMTYtYml0IFR4Q3JlZGl0cyBmb3IgZWFjaCBwb3J0LCB3aGljaCBpbmRpY2F0ZSBob3cKK21hbnkgYnl0ZXMgdGhlIGhvc3QgaXMgYWxsb3dlZCB0byBzZW5kIG9uIEVQMSBmb3IgdHJhbnNtaXQgdG8gYSBnaXZlbiBwb3J0LgorQWZ0ZXIgYW4gT1BFTl9QT1JUIGNvbW1hbmQsIHRoZSBFZGdlcG9ydCBzZW5kcyB0aGUgaW5pdGlhbCBUeENyZWRpdHMgZm9yIHRoYXQKK3BvcnQuCisKK0FsbCAxNi1iaXQgZmllbGRzIGFyZSBzZW50IGluIGxpdHRsZS1lbmRpYW4gKEludGVsKSBmb3JtYXQuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8KKy8vIERlZmluZSBmb3JtYXQgb2YgSW50ZXJydXB0U3RhdHVzIHBhY2tldCByZXR1cm5lZCBmcm9tIHRoZQorLy8gSW50ZXJydXB0IHBpcGUKKy8vCisKK3N0cnVjdCBpbnRfc3RhdHVzX3BrdCB7CisJX191MTYgICAgICBSeEJ5dGVzQXZhaWw7CQkgICAgLy8gQWRkaXRpb25hbCBieXRlcyBhdmFpbGFibGUgdG8KKwkJCQkJCSAgICAvLyBiZSByZWFkIGZyb20gQnVsayBJTiBwaXBlCisJX191MTYgICAgICBUeENyZWRpdHNbIE1BWF9SUzIzMl9QT1JUUyBdOyAgIC8vIEFkZGl0aW9uYWwgc3BhY2UgYXZhaWxhYmxlIGluCisJCQkJCQkgICAgLy8gZ2l2ZW4gcG9ydCdzIFR4QnVmZmVyCit9OworCisKKyNkZWZpbmUgR0VUX0lOVF9TVEFUVVNfU0laRShOdW1Qb3J0cykgKHNpemVvZihfX3UxNikgKyAoc2l6ZW9mKF9fdTE2KSAqIChOdW1Qb3J0cykpKQorCisKKworLy8KKy8vIERlZmluZSBjbWQvc3RhdHVzIGhlYWRlciB2YWx1ZXMgYW5kIG1hY3JvcyB0byBleHRyYWN0IHRoZW0uCisvLworLy8JRGF0YToJCTBMTExMUFBQIExMTExMTExMCisvLwlDbWQvU3RhdDoJMWNjY2NQUFAgQ0NDQ0NDQ0MKKworI2RlZmluZQlJT1NQX0RBVEFfSERSX1NJWkUJCTIKKyNkZWZpbmUJSU9TUF9DTURfSERSX1NJWkUJCTIKKworI2RlZmluZQlJT1NQX01BWF9EQVRBX0xFTkdUSAkJMHgwRkZGCQkvLyAxMiBiaXRzIC0+IDRLCisKKyNkZWZpbmUJSU9TUF9QT1JUX01BU0sJCQkweDA3CQkvLyBNYXNrIHRvIGlzb2xhdGUgcG9ydCBudW1iZXIKKyNkZWZpbmUJSU9TUF9DTURfU1RBVF9CSVQJCTB4ODAJCS8vIElmIHNldCwgdGhpcyBpcyBjb21tYW5kL3N0YXR1cyBoZWFkZXIKKworI2RlZmluZSBJU19DTURfU1RBVF9IRFIoQnl0ZTEpCQkoKEJ5dGUxKSAmIElPU1BfQ01EX1NUQVRfQklUKQorI2RlZmluZSBJU19EQVRBX0hEUihCeXRlMSkJCSghIElTX0NNRF9TVEFUX0hEUihCeXRlMSkpCisKKyNkZWZpbmUJSU9TUF9HRVRfSERSX1BPUlQoQnl0ZTEpCQkoKF9fdTgpICgoQnl0ZTEpICYgSU9TUF9QT1JUX01BU0spKQorI2RlZmluZQlJT1NQX0dFVF9IRFJfREFUQV9MRU4oQnl0ZTEsIEJ5dGUyKQkoKF9fdTE2KSAoICgoX191MTYpKChCeXRlMSkgJiAweDc4KSkgPDwgNSkgfCAoQnl0ZTIpKQorI2RlZmluZQlJT1NQX0dFVF9TVEFUVVNfQ09ERShCeXRlMSkJCSgoX191OCkgKCgoQnl0ZTEpICYgIDB4NzgpID4+IDMpKQorCisKKy8vCisvLyBUaGVzZSBtYWNyb3MgYnVpbGQgdGhlIDFzdCBhbmQgMm5kIGJ5dGVzIGZvciBhIGRhdGEgaGVhZGVyCisvLworI2RlZmluZQlJT1NQX0JVSUxEX0RBVEFfSERSMShQb3J0LCBMZW4pCQkoKF9fdTgpICgoKFBvcnQpIHwgKChfX3U4KSAoKChfX3UxNikgKExlbikpID4+IDUpICYgMHg3OCApKSkpCisjZGVmaW5lCUlPU1BfQlVJTERfREFUQV9IRFIyKFBvcnQsIExlbikJCSgoX191OCkgKExlbikpCisKKworLy8KKy8vIFRoZXNlIG1hY3JvcyBidWlsZCB0aGUgMXN0IGFuZCAybmQgYnl0ZXMgZm9yIGEgY29tbWFuZCBoZWFkZXIKKy8vCisjZGVmaW5lCUlPU1BfQlVJTERfQ01EX0hEUjEoUG9ydCwgQ21kKQkJKChfX3U4KSAoIElPU1BfQ01EX1NUQVRfQklUIHwgKFBvcnQpIHwJKChfX3U4KSAoKENtZCkgPDwgMykpICkpCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKy8vCURlZmluZSB2YWx1ZXMgZm9yIGNvbW1hbmRzIGFuZCBjb21tYW5kIHBhcmFtZXRlcnMKKy8vCShzZW50IGZyb20gSG9zdCB0byBFZGdlcG9ydCkKKy8vCisvLwkxY2NjY1BQUCBQMVAxUDFQMSBbIFAyUDJQMlAyUDIgXS4uLgorLy8KKy8vCWNjY2M6CTAwLTA3CTItYnl0ZSBjb21tYW5kcy4gV3JpdGUgVUFSVCByZWdpc3RlciAwLTcgd2l0aAorLy8JCQkJCXZhbHVlIGluIFAxLiBTZWUgMTY2NTAuSCBmb3IgZGVmaW5pdGlvbnMgb2YKKy8vCQkJCQlVQVJUIHJlZ2lzdGVyIG51bWJlcnMgYW5kIGNvbnRlbnRzLgorLy8KKy8vCQkwOC0wQgkzLWJ5dGUgY29tbWFuZHM6CQkJCQk9PT09IFAxID09PT0JPT09PSBQMiA9PT09CisvLwkJCQkJMDgJYXZhaWxhYmxlIGZvciBleHBhbnNpb24KKy8vCQkJCQkwOQkxLXBhcmFtIGNvbW1hbmRzCQlDb21tYW5kIENvZGUJUGFyYW0KKy8vCQkJCQkwQQlhdmFpbGFibGUgZm9yIGV4cGFuc2lvbgorLy8JCQkJCTBCCWF2YWlsYWJsZSBmb3IgZXhwYW5zaW9uCisvLworLy8JCTBDLTBECTQtYnl0ZSBjb21tYW5kcy4JUDEgPSBleHRlbmRlZCBjbWQgYW5kIFAyLFAzID0gcGFyYW1zCisvLwkJCQkJCUN1cnJlbnRseSB1bmltcGxlbWVudGVkLgorLy8KKy8vCQkwRS0wRglOLWJ5dGUgY29tbWFuZHM6CVAxID0gbnVtIGJ5dGVzIGFmdGVyIFAxIChpZSwgVG90YWxMZW4gLSAyKQorLy8JCQkJCQlQMiA9IGV4dGVuZGVkIGNtZCwgUDMuLlBuID0gcGFyYW1ldGVycy4KKy8vCQkJCQkJQ3VycmVudGx5IHVuaW1wbGVtZW50ZWQuCisvLworCisjZGVmaW5lCUlPU1BfV1JJVEVfVUFSVF9SRUcobikJKChuKSAmIDB4MDcpCS8vIFVhcnRSZWdbIG4gXSA6PSBQMQorCisvLyBSZWdpc3RlciBudW1iZXJzIGFuZCBjb250ZW50cworLy8gZGVmaW5lZCBpbiAxNjU1NC5ILgorCisvLwkJCQkJMHgwOAkJLy8gQXZhaWxhYmxlIGZvciBleHBhbnNpb24uCisjZGVmaW5lCUlPU1BfRVhUX0NNRAkJCTB4MDkJCS8vIFAxID0gQ29tbWFuZCBjb2RlIChkZWZpbmVkIGJlbG93KQorCisvLyBQMiA9IFBhcmFtZXRlcgorCisvLworLy8gRXh0ZW5kZWQgQ29tbWFuZCB2YWx1ZXMsIHVzZWQgd2l0aCBJT1NQX0VYVF9DTUQsIG1heQorLy8gb3IgbWF5IG5vdCB1c2UgcGFyYW1ldGVyIFAyLgorLy8KKworI2RlZmluZQlJT1NQX0NNRF9PUEVOX1BPUlQJCTB4MDAJCS8vIEVuYWJsZSBpbnRzLCBpbml0IFVBUlQuIChOTyBQQVJBTSkKKyNkZWZpbmUJSU9TUF9DTURfQ0xPU0VfUE9SVAkJMHgwMQkJLy8gRGlzYWJsZSBpbnRzLCBmbHVzaCBidWZmZXJzLiAoTk8gUEFSQU0pCisjZGVmaW5lCUlPU1BfQ01EX0NIQVNFX1BPUlQJCTB4MDIJCS8vIFdhaXQgZm9yIEVkZ2Vwb3J0IFRYIGJ1ZmZlcnMgdG8gZW1wdHkuIChOTyBQQVJBTSkKKyNkZWZpbmUgSU9TUF9DTURfU0VUX1JYX0ZMT1cJCTB4MDMJCS8vIFNldCBSeCBGbG93IENvbnRyb2wgaW4gRWRnZXBvcnQKKyNkZWZpbmUgSU9TUF9DTURfU0VUX1RYX0ZMT1cJCTB4MDQJCS8vIFNldCBUeCBGbG93IENvbnRyb2wgaW4gRWRnZXBvcnQKKyNkZWZpbmUgSU9TUF9DTURfU0VUX1hPTl9DSEFSCQkweDA1CQkvLyBTZXQgWE9OIENoYXJhY3RlciBpbiBFZGdlcG9ydAorI2RlZmluZSBJT1NQX0NNRF9TRVRfWE9GRl9DSEFSCQkweDA2CQkvLyBTZXQgWE9GRiBDaGFyYWN0ZXIgaW4gRWRnZXBvcnQKKyNkZWZpbmUgSU9TUF9DTURfUlhfQ0hFQ0tfUkVRCQkweDA3CQkvLyBSZXF1ZXN0IEVkZ2Vwb3J0IHRvIGluc2VydCBhIENoZWNrcG9pbnQgaW50bworCisvLyB0aGUgcmVjZWl2ZSBkYXRhIHN0cmVhbSAoUGFyYW1ldGVyID0gMSBieXRlIHNlcXVlbmNlIG51bWJlcikKKworI2RlZmluZSBJT1NQX0NNRF9TRVRfQlJFQUsJCTB4MDgJCS8vIFR1cm4gb24gdGhlIEJSRUFLIChMQ1IgYml0IDYpCisjZGVmaW5lIElPU1BfQ01EX0NMRUFSX0JSRUFLCQkweDA5CQkvLyBUdXJuIG9mZiB0aGUgQlJFQUsgKExDUiBiaXQgNikKKworCisvLworLy8gRGVmaW5lIG1hY3JvcyB0byBzaW1wbGlmeSBidWlsZGluZyBvZiBJT1NQIGNtZHMKKy8vCisKKyNkZWZpbmUJTUFLRV9DTURfV1JJVEVfUkVHKHBwQnVmLCBwTGVuLCBQb3J0LCBSZWcsIFZhbCkJCQkJCQlcCisJZG8gewkJCQkJCQkJCQkJXAorCQkoKihwcEJ1ZikpWzBdID0gSU9TUF9CVUlMRF9DTURfSERSMSggKFBvcnQpLCBJT1NQX1dSSVRFX1VBUlRfUkVHKFJlZykgKTsJXAorCQkoKihwcEJ1ZikpWzFdID0gKFZhbCk7CQkJCQkJCQlcCisJCQkJCQkJCQkJCQlcCisJCSpwcEJ1ZiArPSAyOwkJCQkJCQkJCVwKKwkJKnBMZW4gICs9IDI7CQkJCQkJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUJTUFLRV9DTURfRVhUX0NNRChwcEJ1ZiwgcExlbiwgUG9ydCwgRXh0Q21kLCBQYXJhbSkJCQkJCVwKKwlkbyB7CQkJCQkJCQkJCQlcCisJCSgqKHBwQnVmKSlbMF0gPSBJT1NQX0JVSUxEX0NNRF9IRFIxKCAoUG9ydCksIElPU1BfRVhUX0NNRCApOwkJCVwKKwkJKCoocHBCdWYpKVsxXSA9IChFeHRDbWQpOwkJCQkJCQlcCisJCSgqKHBwQnVmKSlbMl0gPSAoUGFyYW0pOwkJCQkJCQlcCisJCQkJCQkJCQkJCQlcCisJCSpwcEJ1ZiArPSAzOwkJCQkJCQkJCVwKKwkJKnBMZW4gICs9IDM7CQkJCQkJCQkJXAorCX0gd2hpbGUgKDApCisKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8JRGVmaW5lIGZvcm1hdCBvZiBmbG93IGNvbnRyb2wgY29tbWFuZHMKKy8vCShzZW50IGZyb20gSG9zdCB0byBFZGdlcG9ydCkKKy8vCisvLwkxMTAwMVBQUCBGbG93Q21kIEZsb3dUeXBlcworLy8KKy8vCU5vdGUgdGhhdCB0aGUgJ0Zsb3dUeXBlcycgcGFyYW1ldGVyIGlzIGEgYml0IG1hc2s7IHRoYXQgaXMsCisvLwltb3JlIHRoYW4gb25lIGZsb3cgY29udHJvbCB0eXBlIGNhbiBiZSBhY3RpdmUgYXQgdGhlIHNhbWUgdGltZS4KKy8vCUZsb3dUeXBlcyA9IDAgbWVhbnMgJ25vIGZsb3cgY29udHJvbCcuCisvLworCisvLworLy8JSU9TUF9DTURfU0VUX1JYX0ZMT1cKKy8vCisvLwlUZWxscyBFZGdlcG9ydCBob3cgaXQgY2FuIHN0b3AgaW5jb21pbmcgVUFSVCBkYXRhCisvLworLy8gIEV4YW1wbGUgZm9yIFBvcnQgMAorLy8JUDAgPSAxMTAwMTAwMAorLy8gIFAxID0gSU9TUF9DTURfU0VUX1JYX0ZMT1cKKy8vICBQMiA9IEJpdCBtYXNrIGFzIGZvbGxvd3M6CisKKyNkZWZpbmUgSU9TUF9SWF9GTE9XX1JUUwkJMHgwMQkvLyBFZGdlcG9ydCBkcm9wcyBSVFMgdG8gc3RvcCBpbmNvbWluZyBkYXRhCisjZGVmaW5lIElPU1BfUlhfRkxPV19EVFIJCTB4MDIJLy8gRWRnZXBvcnQgZHJvcHMgRFRSIHRvIHN0b3AgaW5jb21pbmcgZGF0YQorI2RlZmluZSBJT1NQX1JYX0ZMT1dfRFNSX1NFTlNJVElWSVRZCTB4MDQJLy8gSWdub3JlcyBSeCBkYXRhIHVubGVzcyBEU1IgaGlnaAorCisvLyBOb3QgY3VycmVudGx5IGltcGxlbWVudGVkIGJ5IGZpcm13YXJlLgorI2RlZmluZSBJT1NQX1JYX0ZMT1dfWE9OX1hPRkYJCTB4MDgJLy8gRWRnZXBvcnQgc2VuZHMgWE9GRiBjaGFyIHRvIHN0b3AgaW5jb21pbmcgZGF0YS4KKworLy8gSG9zdCBtdXN0IGhhdmUgcHJldmlvdXNseSBwcm9ncmFtbWVkIHRoZQorLy8gWE9OL1hPRkYgdmFsdWVzIHdpdGggU0VUX1hPTi9TRVRfWE9GRgorLy8gYmVmb3JlIGVuYWJsaW5nIHRoaXMgYml0LgorCisvLworLy8JSU9TUF9DTURfU0VUX1RYX0ZMT1cKKy8vCisvLwlUZWxscyBFZGdlcG9ydCB3aGF0IHNpZ25hbChzKSB3aWxsIHN0b3AgaXQgZnJvbSB0cmFuc21pdHRpbmcgVUFSVCBkYXRhCisvLworLy8gIEV4YW1wbGUgZm9yIFBvcnQgMAorLy8JUDAgPSAxMTAwMTAwMAorLy8gIFAxID0gSU9TUF9DTURfU0VUX1RYX0ZMT1cKKy8vICBQMiA9IEJpdCBtYXNrIGFzIGZvbGxvd3M6CisKKyNkZWZpbmUgSU9TUF9UWF9GTE9XX0NUUwkJMHgwMQkvLyBFZGdlcG9ydCBzdG9wcyBUeCBpZiBDVFMgbG93CisjZGVmaW5lIElPU1BfVFhfRkxPV19EU1IJCTB4MDIJLy8gRWRnZXBvcnQgc3RvcHMgVHggaWYgRFNSIGxvdworI2RlZmluZSBJT1NQX1RYX0ZMT1dfRENECQkweDA0CS8vIEVkZ2Vwb3J0IHN0b3BzIFR4IGlmIERDRCBsb3cKKyNkZWZpbmUgSU9TUF9UWF9GTE9XX1hPTl9YT0ZGCQkweDA4CS8vIEVkZ2Vwb3J0IHN0b3BzIFR4IHVwb24gcmVjZWl2aW5nIFhPRkYgY2hhci4KKworLy8gSG9zdCBtdXN0IGhhdmUgcHJldmlvdXNseSBwcm9ncmFtbWVkIHRoZQorLy8gWE9OL1hPRkYgdmFsdWVzIHdpdGggU0VUX1hPTi9TRVRfWE9GRgorLy8gYmVmb3JlIGVuYWJsaW5nIHRoaXMgYml0LgorI2RlZmluZSBJT1NQX1RYX0ZMT1dfWE9GRl9DT05USU5VRQkweDEwCS8vIElmIG5vdCBzZXQsIEVkZ2Vwb3J0IHN0b3BzIFR4IHdoZW4KKworLy8gc2VuZGluZyBYT0ZGIGluIG9yZGVyIHRvIGZpeCBicm9rZW4KKy8vIHN5c3RlbXMgdGhhdCBpbnRlcnByZXQgdGhlIG5leHQKKy8vIHJlY2VpdmVkIGNoYXIgYXMgWE9OLgorLy8gSWYgc2V0LCBFZGdlcG9ydCBjb250aW51ZXMgVHgKKy8vIG5vcm1hbGx5IGFmdGVyIHRyYW5zbWl0dGluZyBYT0ZGLgorLy8gTm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZCBieSBmaXJtd2FyZS4KKyNkZWZpbmUgSU9TUF9UWF9UT0dHTEVfUlRTCQkweDIwCS8vIEVkZ2Vwb3J0IGRyaXZlcyBSVFMgYXMgYSB0cnVlIGhhbGYtZHVwbGV4CisKKy8vIFJlcXVlc3QtdG8tU2VuZCBzaWduYWw6IGl0IGlzIHJhaXNlZCBiZWZvcmUKKy8vIGJlZ2lubmluZyB0cmFuc21pc3Npb24gYW5kIGxvd2VyZWQgYWZ0ZXIKKy8vIHRoZSBsYXN0IFR4IGNoYXIgbGVhdmVzIHRoZSBVQVJULgorLy8gTm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZCBieSBmaXJtd2FyZS4KKworLy8KKy8vCUlPU1BfQ01EX1NFVF9YT05fQ0hBUgorLy8KKy8vCVNldHMgdGhlIGNoYXJhY3RlciB3aGljaCBFZGdlcG9ydCB0cmFuc21pdHMvaW50ZXJwcmV0cyBhcyBYT04uCisvLwlOb3RlOiBUaGlzIGNvbW1hbmQgTVVTVCBiZSBzZW50IGJlZm9yZSBzZW5kaW5nIGEgU0VUX1JYX0ZMT1cgb3IKKy8vCVNFVF9UWF9GTE9XIHdpdGggdGhlIFhPTl9YT0ZGIGJpdCBzZXQuCisvLworLy8gIEV4YW1wbGUgZm9yIFBvcnQgMAorLy8JUDAgPSAxMTAwMTAwMAorLy8gIFAxID0gSU9TUF9DTURfU0VUX1hPTl9DSEFSCisvLyAgUDIgPSAweDExCisKKworLy8KKy8vCUlPU1BfQ01EX1NFVF9YT0ZGX0NIQVIKKy8vCisvLwlTZXRzIHRoZSBjaGFyYWN0ZXIgd2hpY2ggRWRnZXBvcnQgdHJhbnNtaXRzL2ludGVycHJldHMgYXMgWE9GRi4KKy8vCU5vdGU6IFRoaXMgY29tbWFuZCBtdXN0IGJlIHNlbnQgYmVmb3JlIHNlbmRpbmcgYSBTRVRfUlhfRkxPVyBvcgorLy8JU0VUX1RYX0ZMT1cgd2l0aCB0aGUgWE9OX1hPRkYgYml0IHNldC4KKy8vCisvLyAgRXhhbXBsZSBmb3IgUG9ydCAwCisvLwlQMCA9IDExMDAxMDAwCisvLyAgUDEgPSBJT1NQX0NNRF9TRVRfWE9GRl9DSEFSCisvLyAgUDIgPSAweDEzCisKKworLy8KKy8vCUlPU1BfQ01EX1JYX0NIRUNLX1JFUQorLy8KKy8vICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBhc3Npc3QgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSAKKy8vICBJT0NUTF9TRVJJQUxfUFVSR0UgV2luZG93cyBJT0NUTC4gIAorLy8gIFRoaXMgSU9TUCBjb21tYW5kIHRyaWVzIHRvIHBsYWNlIGEgbWFya2VyIGF0IHRoZSBlbmQgb2YgdGhlIFJYIAorLy8gIHF1ZXVlIGluIHRoZSBFZGdlcG9ydC4gSWYgdGhlIEVkZ2Vwb3J0IFJYIHF1ZXVlIGlzIGZ1bGwgdGhlbiAKKy8vICB0aGUgQ2hlY2sgd2lsbCBiZSBkaXNjYXJkZWQuICAKKy8vICBJdCBpcyB1cCB0byB0aGUgZGV2aWNlIGRyaXZlciB0byB0aW1lb3V0IHdhaXRpbmcgZm9yIHRoZSAKKy8vICBSWF9DSEVDS19SU1AuICBJZiBhIFJYX0NIRUNLX1JTUCBpcyByZWNlaXZlZCwgdGhlIGRyaXZlciBpcyAKKy8vCXN1cmUgdGhhdCBhbGwgZGF0YSBoYXMgYmVlbiByZWNlaXZlZCBmcm9tIHRoZSBlZGdlcG9ydCBhbmQgCisvLwltYXkgbm93IHB1cmdlIGFueSBpbnRlcm5hbCBSWCBidWZmZXJzLgorLy8gIE5vdGUgdGF0IHRoZSBzZXF1ZW5jZSBudW1iZXJzIG1heSBiZSB1c2VkIHRvIGRldGVjdCBsb3N0IAorLy8gIENIRUNLX1JFUXMuCisKKy8vICBFeGFtcGxlIGZvciBQb3J0IDAKKy8vCVAwID0gMTEwMDEwMDAKKy8vICBQMSA9IElPU1BfQ01EX1JYX0NIRUNLX1JFUQorLy8gIFAyID0gU2VxdWVuY2UgbnVtYmVyCisKKworLy8gIFJlc3BvbnNlIHdpbGwgYmU6CisvLyAgUDEgPSBJT1NQX0VYVF9SWF9DSEVDS19SU1AKKy8vICBQMiA9IFJlcXVlc3QgU2VxdWVuY2UgbnVtYmVyCisKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8JRGVmaW5lIHZhbHVlcyBmb3Igc3RhdHVzIGFuZCBzdGF0dXMgcGFyYW1ldGVycworLy8JKHJlY2VpdmVkIGJ5IEhvc3QgZnJvbSBFZGdlcG9ydCkKKy8vCisvLwkxc3Nzc1BQUCBQMVAxUDFQMSBbIFAyUDJQMlAyUDIgXS4uLgorLy8KKy8vIAlzc3NzOgkwMC0wNwkyLWJ5dGUgc3RhdHVzLglzc3NzIGlkZW50aWZpZXMgd2hpY2ggVUFSVCByZWdpc3RlcgorLy8JCQkJCWhhcyBjaGFuZ2VkIHZhbHVlLCBhbmQgdGhlIG5ldyB2YWx1ZSBpcyBpbiBQMS4KKy8vCQkJCQlOb3RlIHRoYXQgdGhlIHNzc3MgdmFsdWVzIGRvIG5vdCBjb3JyZXNwb25kIHRvIHRoZQorLy8JCQkJCTE2NTU0IHJlZ2lzdGVyIG51bWJlcnMgZ2l2ZW4gaW4gMTY1NTQuSC4gSW5zdGVhZCwKKy8vCQkJCQlzZWUgYmVsb3cgZm9yIGRlZmluaXRpb25zIG9mIHRoZSBzc3NzIG51bWJlcnMKKy8vCQkJCQl1c2VkIGluIHRoaXMgc3RhdHVzIG1lc3NhZ2UuCisvLworLy8JCTA4LTBCCTMtYnl0ZSBzdGF0dXM6CQkJCQk9PT09IFAxID09PT0JPT09PSBQMiA9PT09CisvLwkJCQkJMDgJTFNSX0RBVEE6CQlOZXcgTFNSCQlFcnJvcmVkIGJ5dGUKKy8vCQkJCQkwOQkxLXBhcmFtIHJlc3BvbnNlcwlSZXNwb25zZSBDb2RlCVBhcmFtCisvLwkJCQkJMEEJT1BFTl9SU1A6CQlJbml0aWFsTXNyCVR4QnVmZmVyU2l6ZQorLy8JCQkJCTBCCWF2YWlsYWJsZSBmb3IgZXhwYW5zaW9uCisvLworLy8JCTBDLTBECTQtYnl0ZSBzdGF0dXMuCVAxID0gZXh0ZW5kZWQgc3RhdHVzIGNvZGUgYW5kIFAyLFAzID0gcGFyYW1zCisvLwkJCQkJTm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KKy8vCisvLwkJMEUtMEYJTi1ieXRlIHN0YXR1czoJUDEgPSBudW0gYnl0ZXMgYWZ0ZXIgUDEgKGllLCBUb3RhbExlbiAtIDIpCisvLwkJCQkJUDIgPSBleHRlbmRlZCBzdGF0dXMsIFAzLi5QbiA9IHBhcmFtZXRlcnMuCisvLwkJCQkJTm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KKy8vCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglTU1NTIHZhbHVlcyBmb3IgMi1ieXRlIHN0YXR1cyBtZXNzYWdlcyAoMC04KQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUJSU9TUF9TVEFUVVNfTFNSCQkJMHgwMAkvLyBQMSBpcyBuZXcgdmFsdWUgb2YgTFNSIHJlZ2lzdGVyLgorCisvLyBCaXRzIGRlZmluZWQgaW4gMTY1NTQuSC4gRWRnZXBvcnQKKy8vIHJldHVybnMgdGhpcyBpbiBvcmRlciB0byByZXBvcnQKKy8vIGxpbmUgc3RhdHVzIGVycm9ycyAob3ZlcnJ1biwKKy8vIHBhcml0eSwgZnJhbWluZywgYnJlYWspLiBUaGlzIGZvcm0KKy8vIGlzIHVzZWQgd2hlbiBhIGVycm9yZWQgcmVjZWl2ZSBkYXRhCisvLyBjaGFyYWN0ZXIgd2FzIE5PVCBwcmVzZW50IGluIHRoZQorLy8gVUFSVCB3aGVuIHRoZSBMU1IgZXJyb3Igb2NjdXJyZWQKKy8vIChpZSwgd2hlbiBMU1IgYml0IDAgPSAwKS4KKworI2RlZmluZQlJT1NQX1NUQVRVU19NU1IJCQkweDAxCS8vIFAxIGlzIG5ldyB2YWx1ZSBvZiBNU1IgcmVnaXN0ZXIuCisKKy8vIEJpdHMgZGVmaW5lZCBpbiAxNjU1NC5ILiBFZGdlcG9ydAorLy8gcmV0dXJucyB0aGlzIGluIG9yZGVyIHRvIHJlcG9ydAorLy8gY2hhbmdlcyBpbiBtb2RlbSBzdGF0dXMgbGluZXMKKy8vIChDVFMsIERTUiwgUkksIENEKQorLy8gCisKKy8vCQkJCQkweDAyCS8vIEF2YWlsYWJsZSBmb3IgZnV0dXJlIGV4cGFuc2lvbgorLy8JCQkJCTB4MDMJLy8gCisvLwkJCQkJMHgwNAkvLyAKKy8vCQkJCQkweDA1CS8vIAorLy8JCQkJCTB4MDYJLy8gCisvLwkJCQkJMHgwNwkvLyAKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJU1NTUyB2YWx1ZXMgZm9yIDMtYnl0ZSBzdGF0dXMgbWVzc2FnZXMgKDgtQSkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lCUlPU1BfU1RBVFVTX0xTUl9EQVRBCQkweDA4CS8vIFAxIGlzIG5ldyB2YWx1ZSBvZiBMU1IgcmVnaXN0ZXIgKHNhbWUgYXMgU1RBVFVTX0xTUikKKworLy8gUDIgaXMgZXJyb3JlZCBjaGFyYWN0ZXIgcmVhZCBmcm9tCisvLyAgICBSeEZJRk8gYWZ0ZXIgTFNSIHJlcG9ydGVkIGFuIGVycm9yLgkJCQkJCQkJCQkJCQkKKworI2RlZmluZQlJT1NQX0VYVF9TVEFUVVMJCQkweDA5CS8vIFAxIGlzIHN0YXR1cy9yZXNwb25zZSBjb2RlLCBwYXJhbSBpbiBQMi4KKworCisvLyBSZXNwb25zZSBDb2RlcyAoUDEgdmFsdWVzKSBmb3IgMy1ieXRlIHN0YXR1cyBtZXNzYWdlcworCisjZGVmaW5lCUlPU1BfRVhUX1NUQVRVU19DSEFTRV9SU1AJMAkvLyBSZXBseSB0byBDSEFTRV9QT1JUIGNtZC4gUDIgaXMgb3V0Y29tZToKKyNkZWZpbmUJSU9TUF9FWFRfU1RBVFVTX0NIQVNFX1BBU1MJMAkvLyAJUDIgPSAwOiBBbGwgVHggZGF0YSBkcmFpbmVkIHN1Y2Nlc3NmdWxseQorI2RlZmluZQlJT1NQX0VYVF9TVEFUVVNfQ0hBU0VfRkFJTAkxCS8vCVAyID0gMTogVGltZWQgb3V0IChzdHVjayBkdWUgdG8gZmxvdworCisvLwkJCWNvbnRyb2wgZnJvbSByZW1vdGUgZGV2aWNlKS4KKworI2RlZmluZQlJT1NQX0VYVF9TVEFUVVNfUlhfQ0hFQ0tfUlNQCTEJLy8gUmVwbHkgdG8gUlhfQ0hFQ0sgY21kLiBQMiBpcyBzZXF1ZW5jZSBudW1iZXIKKworCisjZGVmaW5lIElPU1BfU1RBVFVTX09QRU5fUlNQCQkweDBBCS8vIFJlcGx5IHRvIE9QRU5fUE9SVCBjbWQuCisKKy8vIFAxIGlzIEluaXRpYWwgTVNSIHZhbHVlCisvLyBQMiBpcyBlbmNvZGVkIFR4QnVmZmVyIFNpemU6CisvLwlUeEJ1ZmZlclNpemUgPSAoUDIgKyAxKSAqIDY0CisKKy8vCQkJCQkweDBCCS8vIEF2YWlsYWJsZSBmb3IgZnV0dXJlIGV4cGFuc2lvbgorCisjZGVmaW5lIEdFVF9UWF9CVUZGRVJfU0laRShQMikgKCgoUDIpICsgMSkgKiA2NCkKKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCVNTU1MgdmFsdWVzIGZvciA0LWJ5dGUgc3RhdHVzIG1lc3NhZ2VzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBJT1NQX0VYVDRfU1RBVFVTCQkweDBDCS8vIEV4dGVuZGVkIHN0YXR1cyBjb2RlIGluIFAxLAorCisvLyBQYXJhbXMgaW4gUDIsIFAzCisvLyBDdXJyZW50bHkgdW5pbXBsZW1lbnRlZC4KKworLy8JCQkJCTB4MEQJLy8gQ3VycmVudGx5IHVudXNlZCwgYXZhaWxhYmxlLgorCisKKworLy8KKy8vIE1hY3JvcyB0byBwYXJzZSBzdGF0dXMgbWVzc2FnZXMKKy8vCisKKyNkZWZpbmUJSU9TUF9HRVRfU1RBVFVTX0xFTihjb2RlKQkoIChjb2RlKSA8IDggPyAyIDogKChjb2RlKSA8IDB4MEEgPyAzIDogNCkgKQorCisjZGVmaW5lCUlPU1BfU1RBVFVTX0lTXzJCWVRFKGNvZGUpCSggKGNvZGUpIDwgMHgwOCApCisjZGVmaW5lCUlPU1BfU1RBVFVTX0lTXzNCWVRFKGNvZGUpCSggKChjb2RlKSA+PSAweDA4KSAmJiAoKGNvZGUpIDw9IDB4MEIpICkKKyNkZWZpbmUJSU9TUF9TVEFUVVNfSVNfNEJZVEUoY29kZSkJKCAoKGNvZGUpID49IDB4MEMpICYmICgoY29kZSkgPD0gMHgwRCkgKQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGFibGVzLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGFibGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdmZmUwMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190YWJsZXMuaApAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIElPIEVkZ2Vwb3J0IERyaXZlciB0YWJsZXMKKyAqCisgKglDb3B5cmlnaHQgKEMpIDIwMDEKKyAqCSAgICBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAKKyAqLworCisjaWZuZGVmIElPX1RBQkxFU19ICisjZGVmaW5lIElPX1RBQkxFU19ICisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBlZGdlcG9ydF8ycG9ydF9pZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMkkpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzQyMSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMjEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzJfRElOKSB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGVkZ2Vwb3J0XzRwb3J0X2lkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9SQVBJRFBPUlRfNCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNFQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX01UNFg1NlVTQikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNEkpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzhfRFVBTF9DUFUpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzRfRElOKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF8yMkkpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzQxMl80KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF9DT01QQVRJQkxFKSB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGVkZ2Vwb3J0Xzhwb3J0X2lkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF84KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF8xNl9EVUFMX0NQVSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfOEkpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzhSKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF84UlIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzQxMl84KSB9LAorCXsgfQorfTsKKworLyogRGV2aWNlcyB0aGF0IHRoaXMgZHJpdmVyIHN1cHBvcnRzICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY29tYmluZWQgW10gPSB7CisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLAlJT05fREVWSUNFX0lEX0VER0VQT1JUXzQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLAlJT05fREVWSUNFX0lEX1JBUElEUE9SVF80KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwJSU9OX0RFVklDRV9JRF9FREdFUE9SVF80VCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfTVQ0WDU2VVNCKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwJSU9OX0RFVklDRV9JRF9FREdFUE9SVF8yKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwJSU9OX0RFVklDRV9JRF9FREdFUE9SVF80SSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sCUlPTl9ERVZJQ0VfSURfRURHRVBPUlRfMkkpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLAlJT05fREVWSUNFX0lEX0VER0VQT1JUXzQyMSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sCUlPTl9ERVZJQ0VfSURfRURHRVBPUlRfMjEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLAlJT05fREVWSUNFX0lEX0VER0VQT1JUXzhfRFVBTF9DUFUpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLAlJT05fREVWSUNFX0lEX0VER0VQT1JUXzgpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLAlJT05fREVWSUNFX0lEX0VER0VQT1JUXzJfRElOKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwJSU9OX0RFVklDRV9JRF9FREdFUE9SVF80X0RJTikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sCUlPTl9ERVZJQ0VfSURfRURHRVBPUlRfMTZfRFVBTF9DUFUpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzIySSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNDEyXzQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLAlJT05fREVWSUNFX0lEX0VER0VQT1JUX0NPTVBBVElCTEUpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLAlJT05fREVWSUNFX0lEX0VER0VQT1JUXzhJKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF84UikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfOFJSKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80MTJfOCkgfSwKKwl7IH0JCQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGVfY29tYmluZWQpOworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZWRnZXBvcnRfMnBvcnRfZGV2aWNlID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCQk9ICJFZGdlcG9ydCAyIHBvcnQgYWRhcHRlciIsCisJLnNob3J0X25hbWUJCT0gImVkZ2Vwb3J0XzIiLAorCS5pZF90YWJsZQkJPSBlZGdlcG9ydF8ycG9ydF9pZF90YWJsZSwKKwkubnVtX2ludGVycnVwdF9pbgk9IDEsCisJLm51bV9idWxrX2luCQk9IDEsCisJLm51bV9idWxrX291dAkJPSAxLAorCS5udW1fcG9ydHMJCT0gMiwKKwkub3BlbgkJCT0gZWRnZV9vcGVuLAorCS5jbG9zZQkJCT0gZWRnZV9jbG9zZSwKKwkudGhyb3R0bGUJCT0gZWRnZV90aHJvdHRsZSwKKwkudW50aHJvdHRsZQkJPSBlZGdlX3VudGhyb3R0bGUsCisJLmF0dGFjaAkJCT0gZWRnZV9zdGFydHVwLAorCS5zaHV0ZG93bgkJPSBlZGdlX3NodXRkb3duLAorCS5pb2N0bAkJCT0gZWRnZV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MJCT0gZWRnZV9zZXRfdGVybWlvcywKKwkudGlvY21nZXQJCT0gZWRnZV90aW9jbWdldCwKKwkudGlvY21zZXQJCT0gZWRnZV90aW9jbXNldCwKKwkud3JpdGUJCQk9IGVkZ2Vfd3JpdGUsCisJLndyaXRlX3Jvb20JCT0gZWRnZV93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIJPSBlZGdlX2NoYXJzX2luX2J1ZmZlciwKKwkuYnJlYWtfY3RsCQk9IGVkZ2VfYnJlYWssCisJLnJlYWRfaW50X2NhbGxiYWNrCT0gZWRnZV9pbnRlcnJ1cHRfY2FsbGJhY2ssCisJLnJlYWRfYnVsa19jYWxsYmFjawk9IGVkZ2VfYnVsa19pbl9jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjawk9IGVkZ2VfYnVsa19vdXRfZGF0YV9jYWxsYmFjaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBlZGdlcG9ydF80cG9ydF9kZXZpY2UgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJCT0gIkVkZ2Vwb3J0IDQgcG9ydCBhZGFwdGVyIiwKKwkuc2hvcnRfbmFtZQkJPSAiZWRnZXBvcnRfNCIsCisJLmlkX3RhYmxlCQk9IGVkZ2Vwb3J0XzRwb3J0X2lkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luCT0gMSwKKwkubnVtX2J1bGtfaW4JCT0gMSwKKwkubnVtX2J1bGtfb3V0CQk9IDEsCisJLm51bV9wb3J0cwkJPSA0LAorCS5vcGVuCQkJPSBlZGdlX29wZW4sCisJLmNsb3NlCQkJPSBlZGdlX2Nsb3NlLAorCS50aHJvdHRsZQkJPSBlZGdlX3Rocm90dGxlLAorCS51bnRocm90dGxlCQk9IGVkZ2VfdW50aHJvdHRsZSwKKwkuYXR0YWNoCQkJPSBlZGdlX3N0YXJ0dXAsCisJLnNodXRkb3duCQk9IGVkZ2Vfc2h1dGRvd24sCisJLmlvY3RsCQkJPSBlZGdlX2lvY3RsLAorCS5zZXRfdGVybWlvcwkJPSBlZGdlX3NldF90ZXJtaW9zLAorCS50aW9jbWdldAkJPSBlZGdlX3Rpb2NtZ2V0LAorCS50aW9jbXNldAkJPSBlZGdlX3Rpb2Ntc2V0LAorCS53cml0ZQkJCT0gZWRnZV93cml0ZSwKKwkud3JpdGVfcm9vbQkJPSBlZGdlX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlcgk9IGVkZ2VfY2hhcnNfaW5fYnVmZmVyLAorCS5icmVha19jdGwJCT0gZWRnZV9icmVhaywKKwkucmVhZF9pbnRfY2FsbGJhY2sJPSBlZGdlX2ludGVycnVwdF9jYWxsYmFjaywKKwkucmVhZF9idWxrX2NhbGxiYWNrCT0gZWRnZV9idWxrX2luX2NhbGxiYWNrLAorCS53cml0ZV9idWxrX2NhbGxiYWNrCT0gZWRnZV9idWxrX291dF9kYXRhX2NhbGxiYWNrLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGVkZ2Vwb3J0Xzhwb3J0X2RldmljZSA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQkJPSAiRWRnZXBvcnQgOCBwb3J0IGFkYXB0ZXIiLAorCS5zaG9ydF9uYW1lCQk9ICJlZGdlcG9ydF84IiwKKwkuaWRfdGFibGUJCT0gZWRnZXBvcnRfOHBvcnRfaWRfdGFibGUsCisJLm51bV9pbnRlcnJ1cHRfaW4JPSAxLAorCS5udW1fYnVsa19pbgkJPSAxLAorCS5udW1fYnVsa19vdXQJCT0gMSwKKwkubnVtX3BvcnRzCQk9IDgsCisJLm9wZW4JCQk9IGVkZ2Vfb3BlbiwKKwkuY2xvc2UJCQk9IGVkZ2VfY2xvc2UsCisJLnRocm90dGxlCQk9IGVkZ2VfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUJCT0gZWRnZV91bnRocm90dGxlLAorCS5hdHRhY2gJCQk9IGVkZ2Vfc3RhcnR1cCwKKwkuc2h1dGRvd24JCT0gZWRnZV9zaHV0ZG93biwKKwkuaW9jdGwJCQk9IGVkZ2VfaW9jdGwsCisJLnNldF90ZXJtaW9zCQk9IGVkZ2Vfc2V0X3Rlcm1pb3MsCisJLnRpb2NtZ2V0CQk9IGVkZ2VfdGlvY21nZXQsCisJLnRpb2Ntc2V0CQk9IGVkZ2VfdGlvY21zZXQsCisJLndyaXRlCQkJPSBlZGdlX3dyaXRlLAorCS53cml0ZV9yb29tCQk9IGVkZ2Vfd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyCT0gZWRnZV9jaGFyc19pbl9idWZmZXIsCisJLmJyZWFrX2N0bAkJPSBlZGdlX2JyZWFrLAorCS5yZWFkX2ludF9jYWxsYmFjawk9IGVkZ2VfaW50ZXJydXB0X2NhbGxiYWNrLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sJPSBlZGdlX2J1bGtfaW5fY2FsbGJhY2ssCisJLndyaXRlX2J1bGtfY2FsbGJhY2sJPSBlZGdlX2J1bGtfb3V0X2RhdGFfY2FsbGJhY2ssCit9OworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yzk2ZmRhZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCkBAIC0wLDAgKzEsMzA5MSBAQAorLyoKKyAqIEVkZ2Vwb3J0IFVTQiBTZXJpYWwgQ29udmVydGVyIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIEluc2lkZSBPdXQgTmV0d29ya3MsIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogU3VwcG9ydHMgdGhlIGZvbGxvd2luZyBkZXZpY2VzOgorICoJRVAvMSBFUC8yIEVQLzQgRVAvMjEgRVAvMjIgRVAvMjIxIEVQLzQyIEVQLzQyMSBXQVRDSFBPUlQKKyAqCisgKiBGb3IgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIGNvbnRhY3QgSW5zaWRlIE91dAorICogTmV0d29ya3MgdGVjaG5pY2FsIHN1cHBvcnQsIG9yIFBldGVyIEJlcmdlciA8cGJlcmdlckBicmltc29uLmNvbT4sCisgKiBvciBBbCBCb3JjaGVycyA8YWxib3JjaGVyc0BzdGVpbmVycG9pbnQuY29tPi4KKyAqCisgKiBWZXJzaW9uIGhpc3Rvcnk6CisgKgorICoJSnVseSAxMSwgMjAwMiAJUmVtb3ZlZCA0IHBvcnQgZGV2aWNlIHN0cnVjdHVyZSBzaW5jZSBhbGwgVEkgVU1QIAorICoJCQljaGlwcyBoYXZlIG9ubHkgMiBwb3J0cyAKKyAqCQkJRGF2aWQgSWFjb3ZlbGxpIChkYXZpZGlAaW9uZXR3b3Jrcy5jb20pCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKyNpbmNsdWRlICJpb18xNjY1NC5oIgorI2luY2x1ZGUgImlvX3VzYnZlbmQuaCIKKyNpbmNsdWRlICJpb190aS5oIgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC43IgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiBhbmQgRGF2aWQgSWFjb3ZlbGxpIgorI2RlZmluZSBEUklWRVJfREVTQyAiRWRnZXBvcnQgVVNCIFNlcmlhbCBEcml2ZXIiCisKKworLyogZmlybXdhcmUgaW1hZ2UgY29kZSAqLworI2RlZmluZSBJTUFHRV9WRVJTSU9OX05BTUUJUGFnYWJsZU9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbgorI2RlZmluZSBJTUFHRV9BUlJBWV9OQU1FCVBhZ2FibGVPcGVyYXRpb25hbENvZGVJbWFnZQorI2RlZmluZSBJTUFHRV9TSVpFCQlQYWdhYmxlT3BlcmF0aW9uYWxDb2RlU2l6ZQorI2luY2x1ZGUgImlvX2Z3X2Rvd24zLmgiCS8qIERlZmluZSBhcnJheSBPcGVyYXRpb25hbENvZGVJbWFnZVtdICovCisKKyNkZWZpbmUgRVBST01fUEFHRV9TSVpFCQk2NAorCisKK3N0cnVjdCBlZGdlcG9ydF91YXJ0X2J1Zl9kZXNjIHsKKwlfX3UzMiBjb3VudDsJCS8vIE51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgaW4gYnVmZmVyCit9OworCisvKiBkaWZmZXJlbnQgaGFyZHdhcmUgdHlwZXMgKi8KKyNkZWZpbmUgSEFSRFdBUkVfVFlQRV85MzAJMAorI2RlZmluZSBIQVJEV0FSRV9UWVBFX1RJVU1QCTEKKworLy8gSU9DVExfUFJJVkFURV9USV9HRVRfTU9ERSBEZWZpbml0aW9ucworI2RlZmluZQlUSV9NT0RFX0NPTkZJR1VSSU5HCTAgICAvLyBEZXZpY2UgaGFzIG5vdCBlbnRlcmVkIHN0YXJ0IGRldmljZSAKKyNkZWZpbmUJVElfTU9ERV9CT09UCQkxICAgLy8gU3RheWluZyBpbiBib290IG1vZGUKKyNkZWZpbmUgVElfTU9ERV9ET1dOTE9BRAkyICAgLy8gTWFkZSBpdCB0byBkb3dubG9hZCBtb2RlCisjZGVmaW5lIFRJX01PREVfVFJBTlNJVElPTklORwkzICAgLy8gQ3VycmVudGx5IGluIGJvb3QgbW9kZSBidXQgdHJhbnNpdGlvbmluZyB0byBkb3dubG9hZCBtb2RlCisKKy8qIHJlYWQgdXJiIHN0YXRlICovCisjZGVmaW5lIEVER0VfUkVBRF9VUkJfUlVOTklORwkwCisjZGVmaW5lIEVER0VfUkVBRF9VUkJfU1RPUFBJTkcJMQorI2RlZmluZSBFREdFX1JFQURfVVJCX1NUT1BQRUQJMgorCisjZGVmaW5lIEVER0VfTE9XX0xBVEVOQ1kJMQorI2RlZmluZSBFREdFX0NMT1NJTkdfV0FJVAk0MDAwCS8qIGluIC4wMSBzZWMgKi8KKworI2RlZmluZSBFREdFX09VVF9CVUZfU0laRQkxMDI0CisKKworLyogUHJvZHVjdCBpbmZvcm1hdGlvbiByZWFkIGZyb20gdGhlIEVkZ2Vwb3J0ICovCitzdHJ1Y3QgcHJvZHVjdF9pbmZvCit7CisJaW50CVRpTW9kZTsJCQkvLyBDdXJyZW50IFRJIE1vZGUKKwlfX3U4CWhhcmR3YXJlX3R5cGU7CQkvLyBUeXBlIG9mIGhhcmR3YXJlCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBjaXJjdWxhciBidWZmZXIgKi8KK3N0cnVjdCBlZGdlX2J1ZiB7CisJdW5zaWduZWQgaW50CWJ1Zl9zaXplOworCWNoYXIJCSpidWZfYnVmOworCWNoYXIJCSpidWZfZ2V0OworCWNoYXIJCSpidWZfcHV0OworfTsKKworc3RydWN0IGVkZ2Vwb3J0X3BvcnQgeworCV9fdTE2IHVhcnRfYmFzZTsKKwlfX3UxNiBkbWFfYWRkcmVzczsKKwlfX3U4IHNoYWRvd19tc3I7CisJX191OCBzaGFkb3dfbWNyOworCV9fdTggc2hhZG93X2xzcjsKKwlfX3U4IGxzcl9tYXNrOworCV9fdTMyIHVtcF9yZWFkX3RpbWVvdXQ7CQkvKiBOdW1iZXIgb2YgbWlsaXNlY29uZHMgdGhlIFVNUCB3aWxsCisJCQkJCSAgIHdhaXQgd2l0aG91dCBkYXRhIGJlZm9yZSBjb21wbGV0aW5nCisJCQkJCSAgIGEgcmVhZCBzaG9ydCAqLworCWludCBiYXVkX3JhdGU7CisJaW50IGNsb3NlX3BlbmRpbmc7CisJaW50IGxzcl9ldmVudDsKKwlzdHJ1Y3QgZWRnZXBvcnRfdWFydF9idWZfZGVzYyB0eDsKKwlzdHJ1Y3QgYXN5bmNfaWNvdW50CWljb3VudDsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlkZWx0YV9tc3Jfd2FpdDsJLyogZm9yIGhhbmRsaW5nIHNsZWVwaW5nIHdoaWxlCisJCQkJCQkgICB3YWl0aW5nIGZvciBtc3IgY2hhbmdlIHRvCisJCQkJCQkgICBoYXBwZW4gKi8KKwlzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsCSplZGdlX3NlcmlhbDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CSpwb3J0OworCV9fdTggYlVhcnRNb2RlOwkJLyogUG9ydCB0eXBlLCAwOiBSUzIzMiwgZXRjLiAqLyAKKwlzcGlubG9ja190IGVwX2xvY2s7CisJaW50IGVwX3JlYWRfdXJiX3N0YXRlOworCWludCBlcF93cml0ZV91cmJfaW5fdXNlOworCXN0cnVjdCBlZGdlX2J1ZiAqZXBfb3V0X2J1ZjsKK307CisKK3N0cnVjdCBlZGdlcG9ydF9zZXJpYWwgeworCXN0cnVjdCBwcm9kdWN0X2luZm8gcHJvZHVjdF9pbmZvOworCXU4IFRJX0kyQ19UeXBlOwkJCS8vIFR5cGUgb2YgSTJDIGluIFVNUAorCXU4IFRpUmVhZEkyQzsJCQkvLyBTZXQgdG8gVFJVRSBpZiB3ZSBoYXZlIHJlYWQgdGhlIEkyYyBpbiBCb290IE1vZGUKKwlzdHJ1Y3Qgc2VtYXBob3JlIGVzX3NlbTsKKwlpbnQgbnVtX3BvcnRzX29wZW47CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKK307CisKKworLyogRGV2aWNlcyB0aGF0IHRoaXMgZHJpdmVyIHN1cHBvcnRzICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZWRnZXBvcnRfMXBvcnRfaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX1RJMzQxMF9FREdFUE9SVF8xKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9USTM0MTBfRURHRVBPUlRfMUkpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX1BST1hJTUlUWSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfV1BfTU9USU9OKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9XUF9NT0lTVFVSRSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfV1BfVEVNUEVSQVRVUkUpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX0hVTUlESVRZKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9XUF9QT1dFUikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfV1BfTElHSFQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX1JBRElBVElPTikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfV1BfRElTVEFOQ0UpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX0FDQ0VMRVJBVElPTikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfV1BfUFJPWF9ESVNUKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9QTFVTX1BXUl9IUDRDRCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfUExVU19QV1JfUENJKSB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGVkZ2Vwb3J0XzJwb3J0X2lkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8yKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8yQykgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMkkpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzQyMSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMjEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzQyKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF80KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF80SSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMjJJKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8yMjFDKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8yMkMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzIxQykgfSwKKy8vIFRoZSA0LXBvcnQgc2hvd3MgdXAgYXMgdHdvIDItcG9ydCBkZXZpY2VzCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzRTKSB9LAorCXsgfQorfTsKKworLyogRGV2aWNlcyB0aGF0IHRoaXMgZHJpdmVyIHN1cHBvcnRzICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY29tYmluZWQgW10gPSB7CisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX1RJMzQxMF9FREdFUE9SVF8xKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9USTM0MTBfRURHRVBPUlRfMUkpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX1BST1hJTUlUWSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfV1BfTU9USU9OKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9XUF9NT0lTVFVSRSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfV1BfVEVNUEVSQVRVUkUpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX0hVTUlESVRZKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9XUF9QT1dFUikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfV1BfTElHSFQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX1JBRElBVElPTikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfV1BfRElTVEFOQ0UpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1dQX0FDQ0VMRVJBVElPTikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfV1BfUFJPWF9ESVNUKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9QTFVTX1BXUl9IUDRDRCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfUExVU19QV1JfUENJKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8yKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8yQykgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMkkpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzQyMSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMjEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzQyKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF80KSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF80SSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMjJJKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8yMjFDKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8yMkMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzIxQykgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfNFMpIH0sCisJeyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlX2NvbWJpbmVkKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGlvX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkiaW9fdGkiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGVfY29tYmluZWQsCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgRURHRV9GSVJNV0FSRV9WRVJTSU9OX0lORk8gT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uOworCitzdGF0aWMgaW50IGRlYnVnOworCitzdGF0aWMgaW50IFRJU3RheUluQm9vdE1vZGUgPSAwOworc3RhdGljIGludCBsb3dfbGF0ZW5jeSA9IEVER0VfTE9XX0xBVEVOQ1k7CitzdGF0aWMgaW50IGNsb3Npbmdfd2FpdCA9IEVER0VfQ0xPU0lOR19XQUlUOworc3RhdGljIGludCBpZ25vcmVfY3B1X3JldiA9IDA7CisKKworc3RhdGljIHZvaWQgZWRnZV90dHlfcmVjdihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgpOworCitzdGF0aWMgdm9pZCBzdG9wX3JlYWQoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCk7CitzdGF0aWMgaW50IHJlc3RhcnRfcmVhZChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0KTsKKworc3RhdGljIHZvaWQgZWRnZV9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKTsKK3N0YXRpYyB2b2lkIGVkZ2Vfc2VuZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKKworLyogY2lyY3VsYXIgYnVmZmVyICovCitzdGF0aWMgc3RydWN0IGVkZ2VfYnVmICplZGdlX2J1Zl9hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSk7CitzdGF0aWMgdm9pZCBlZGdlX2J1Zl9mcmVlKHN0cnVjdCBlZGdlX2J1ZiAqZWIpOworc3RhdGljIHZvaWQgZWRnZV9idWZfY2xlYXIoc3RydWN0IGVkZ2VfYnVmICplYik7CitzdGF0aWMgdW5zaWduZWQgaW50IGVkZ2VfYnVmX2RhdGFfYXZhaWwoc3RydWN0IGVkZ2VfYnVmICplYik7CitzdGF0aWMgdW5zaWduZWQgaW50IGVkZ2VfYnVmX3NwYWNlX2F2YWlsKHN0cnVjdCBlZGdlX2J1ZiAqZWIpOworc3RhdGljIHVuc2lnbmVkIGludCBlZGdlX2J1Zl9wdXQoc3RydWN0IGVkZ2VfYnVmICplYiwgY29uc3QgY2hhciAqYnVmLAorCXVuc2lnbmVkIGludCBjb3VudCk7CitzdGF0aWMgdW5zaWduZWQgaW50IGVkZ2VfYnVmX2dldChzdHJ1Y3QgZWRnZV9idWYgKmViLCBjaGFyICpidWYsCisJdW5zaWduZWQgaW50IGNvdW50KTsKKworCitzdGF0aWMgaW50IFRJUmVhZFZlbmRvclJlcXVlc3RTeW5jIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAorCQkJCV9fdTgJCXJlcXVlc3QsCisJCQkJX191MTYJCXZhbHVlLAorCQkJCV9fdTE2CQlpbmRleCwKKwkJCQl1OCAJCSpkYXRhLAorCQkJCWludAkJc2l6ZSkKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnIChkZXYsCisJCQkJdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCisJCQkJcmVxdWVzdCwKKwkJCQkoVVNCX1RZUEVfVkVORE9SIHwgCisJCQkJIFVTQl9SRUNJUF9ERVZJQ0UgfCAKKwkJCQkgVVNCX0RJUl9JTiksCisJCQkJdmFsdWUsCisJCQkJaW5kZXgsCisJCQkJZGF0YSwKKwkJCQlzaXplLAorCQkJCTEwMDApOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCWlmIChzdGF0dXMgIT0gc2l6ZSkgeworCQlkYmcgKCIlcyAtIHdhbnRlZCB0byB3cml0ZSAlZCwgYnV0IG9ubHkgd3JvdGUgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgc2l6ZSwgc3RhdHVzKTsKKwkJcmV0dXJuIC1FQ09NTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgVElTZW5kVmVuZG9yUmVxdWVzdFN5bmMgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCisJCQkJX191OAkJcmVxdWVzdCwKKwkJCQlfX3UxNgkJdmFsdWUsCisJCQkJX191MTYJCWluZGV4LAorCQkJCXU4IAkJKmRhdGEsCisJCQkJaW50CQlzaXplKQoreworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2cgKGRldiwKKwkJCQl1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCQlyZXF1ZXN0LAorCQkJCShVU0JfVFlQRV9WRU5ET1IgfCAKKwkJCQkgVVNCX1JFQ0lQX0RFVklDRSB8IAorCQkJCSBVU0JfRElSX09VVCksCisJCQkJdmFsdWUsCisJCQkJaW5kZXgsCisJCQkJZGF0YSwKKwkJCQlzaXplLAorCQkJCTEwMDApOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCWlmIChzdGF0dXMgIT0gc2l6ZSkgeworCQlkYmcgKCIlcyAtIHdhbnRlZCB0byB3cml0ZSAlZCwgYnV0IG9ubHkgd3JvdGUgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgc2l6ZSwgc3RhdHVzKTsKKwkJcmV0dXJuIC1FQ09NTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgVElXcml0ZUNvbW1hbmRTeW5jIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBfX3U4IGNvbW1hbmQsCisJCQkJX191OCBtb2R1bGVpZCwgX191MTYgdmFsdWUsIHU4ICpkYXRhLAorCQkJCWludCBzaXplKQoreworCXJldHVybiBUSVNlbmRWZW5kb3JSZXF1ZXN0U3luYyAoZGV2LAorCQkJCQkgIGNvbW1hbmQsCSAgCQkvLyBSZXF1ZXN0CisJCQkJCSAgdmFsdWUsCQkJLy8gd1ZhbHVlIAorCQkJCQkgIG1vZHVsZWlkLAkJCS8vIHdJbmRleAorCQkJCQkgIGRhdGEsCQkJCS8vIFRyYW5zZmVyQnVmZmVyCisJCQkJCSAgc2l6ZSk7CQkJLy8gVHJhbnNmZXJCdWZmZXJMZW5ndGgKKworfQorCisvKiBjbGVhciB0eC9yeCBidWZmZXJzIGFuZCBmaWZvIGluIFRJIFVNUCAqLworc3RhdGljIGludCBUSVB1cmdlRGF0YVN5bmMgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTE2IG1hc2spCit7CisJaW50IHBvcnRfbnVtYmVyID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKworCWRiZyAoIiVzIC0gcG9ydCAlZCwgbWFzayAleCIsIF9fRlVOQ1RJT05fXywgcG9ydF9udW1iZXIsIG1hc2spOworCisJcmV0dXJuIFRJV3JpdGVDb21tYW5kU3luYyAocG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJCVVNUENfUFVSR0VfUE9SVCwKKwkJCQkJKF9fdTgpKFVNUE1fVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwKKwkJCQkJbWFzaywKKwkJCQkJTlVMTCwKKwkJCQkJMCk7Cit9CisKKy8qKgorICogVElSZWFkRG93bmxvYWRNZW1vcnkgLSBSZWFkIGVkZ2Vwb3J0IG1lbW9yeSBmcm9tIFRJIGNoaXAKKyAqIEBkZXY6IHVzYiBkZXZpY2UgcG9pbnRlcgorICogQHN0YXJ0X2FkZHJlc3M6IERldmljZSBDUFUgYWRkcmVzcyBhdCB3aGljaCB0byByZWFkCisgKiBAbGVuZ3RoOiBMZW5ndGggb2YgYWJvdmUgZGF0YQorICogQGFkZHJlc3NfdHlwZTogQ2FuIHJlYWQgYm90aCBYREFUQSBhbmQgSTJDCisgKiBAYnVmZmVyOiBwb2ludGVyIHRvIGlucHV0IGRhdGEgYnVmZmVyCisgKi8KK3N0YXRpYyBpbnQgVElSZWFkRG93bmxvYWRNZW1vcnkoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IHN0YXJ0X2FkZHJlc3MsCisJCQkJaW50IGxlbmd0aCwgX191OCBhZGRyZXNzX3R5cGUsIF9fdTggKmJ1ZmZlcikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlfX3U4IHJlYWRfbGVuZ3RoOworCV9fYmUxNiBiZV9zdGFydF9hZGRyZXNzOworCQorCWRiZyAoIiVzIC0gQCAleCBmb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHN0YXJ0X2FkZHJlc3MsIGxlbmd0aCk7CisKKwkvKiBSZWFkIGluIGJsb2NrcyBvZiA2NCBieXRlcworCSAqIChUSSBmaXJtd2FyZSBjYW4ndCBoYW5kbGUgbW9yZSB0aGFuIDY0IGJ5dGUgcmVhZHMpCisJICovCisJd2hpbGUgKGxlbmd0aCkgeworCQlpZiAobGVuZ3RoID4gNjQpCisJCQlyZWFkX2xlbmd0aD0gNjQ7CisJCWVsc2UKKwkJCXJlYWRfbGVuZ3RoID0gKF9fdTgpbGVuZ3RoOworCisJCWlmIChyZWFkX2xlbmd0aCA+IDEpIHsKKwkJCWRiZyAoIiVzIC0gQCAleCBmb3IgJWQiLCBfX0ZVTkNUSU9OX18sIAorCQkJICAgICBzdGFydF9hZGRyZXNzLCByZWFkX2xlbmd0aCk7CisJCX0KKwkJYmVfc3RhcnRfYWRkcmVzcyA9IGNwdV90b19iZTE2IChzdGFydF9hZGRyZXNzKTsKKwkJc3RhdHVzID0gVElSZWFkVmVuZG9yUmVxdWVzdFN5bmMgKGRldiwKKwkJCQkJCSAgVU1QQ19NRU1PUllfUkVBRCwJLy8gUmVxdWVzdAorCQkJCQkJICAoX191MTYpYWRkcmVzc190eXBlLAkvLyB3VmFsdWUgKEFkZHJlc3MgdHlwZSkKKwkJCQkJCSAgKF9fZm9yY2UgX191MTYpYmVfc3RhcnRfYWRkcmVzcywJLy8gd0luZGV4IChBZGRyZXNzIHRvIHJlYWQpCisJCQkJCQkgIGJ1ZmZlciwJCS8vIFRyYW5zZmVyQnVmZmVyCisJCQkJCQkgIHJlYWRfbGVuZ3RoKTsJLy8gVHJhbnNmZXJCdWZmZXJMZW5ndGgKKworCQlpZiAoc3RhdHVzKSB7CisJCQlkYmcgKCIlcyAtIEVSUk9SICV4IiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCisJCWlmIChyZWFkX2xlbmd0aCA+IDEpIHsKKwkJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJmRldi0+ZGV2LCBfX0ZVTkNUSU9OX18sCisJCQkJCSAgICAgIHJlYWRfbGVuZ3RoLCBidWZmZXIpOworCQl9CisKKwkJLyogVXBkYXRlIHBvaW50ZXJzL2xlbmd0aCAqLworCQlzdGFydF9hZGRyZXNzICs9IHJlYWRfbGVuZ3RoOworCQlidWZmZXIgKz0gcmVhZF9sZW5ndGg7CisJCWxlbmd0aCAtPSByZWFkX2xlbmd0aDsKKwl9CisJCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBUSVJlYWRSYW0gKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBzdGFydF9hZGRyZXNzLCBpbnQgbGVuZ3RoLCBfX3U4ICpidWZmZXIpCit7CisJcmV0dXJuIFRJUmVhZERvd25sb2FkTWVtb3J5IChkZXYsCisJCQkJICAgICBzdGFydF9hZGRyZXNzLAorCQkJCSAgICAgbGVuZ3RoLAorCQkJCSAgICAgRFRLX0FERFJfU1BBQ0VfWERBVEEsCisJCQkJICAgICBidWZmZXIpOworfQorCisvKiBSZWFkIGVkZ2Vwb3J0IG1lbW9yeSB0byBhIGdpdmVuIGJsb2NrICovCitzdGF0aWMgaW50IFRJUmVhZEJvb3RNZW1vcnkgKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKnNlcmlhbCwgaW50IHN0YXJ0X2FkZHJlc3MsIGludCBsZW5ndGgsIF9fdTggKiBidWZmZXIpCit7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IGk7CisKKwlmb3IgKGk9MDsgaTwgbGVuZ3RoOyBpKyspIHsKKwkJc3RhdHVzID0gVElSZWFkVmVuZG9yUmVxdWVzdFN5bmMgKHNlcmlhbC0+c2VyaWFsLT5kZXYsCisJCQkJCVVNUENfTUVNT1JZX1JFQUQsCQkvLyBSZXF1ZXN0CisJCQkJCXNlcmlhbC0+VElfSTJDX1R5cGUsCQkvLyB3VmFsdWUgKEFkZHJlc3MgdHlwZSkKKwkJCQkJKF9fdTE2KShzdGFydF9hZGRyZXNzK2kpLAkvLyB3SW5kZXgKKwkJCQkJJmJ1ZmZlcltpXSwJCQkvLyBUcmFuc2ZlckJ1ZmZlcgorCQkJCQkweDAxKTsJCQkJLy8gVHJhbnNmZXJCdWZmZXJMZW5ndGgKKwkJaWYgKHN0YXR1cykgeworCQkJZGJnICgiJXMgLSBFUlJPUiAleCIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKwl9CisKKwlkYmcgKCIlcyAtIHN0YXJ0X2FkZHJlc3MgPSAleCwgbGVuZ3RoID0gJWQiLCBfX0ZVTkNUSU9OX18sIHN0YXJ0X2FkZHJlc3MsIGxlbmd0aCk7CisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCBfX0ZVTkNUSU9OX18sIGxlbmd0aCwgYnVmZmVyKTsKKworCXNlcmlhbC0+VGlSZWFkSTJDID0gMTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFdyaXRlIGdpdmVuIGJsb2NrIHRvIFRJIEVQUk9NIG1lbW9yeSAqLworc3RhdGljIGludCBUSVdyaXRlQm9vdE1lbW9yeSAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqc2VyaWFsLCBpbnQgc3RhcnRfYWRkcmVzcywgaW50IGxlbmd0aCwgX191OCAqYnVmZmVyKQoreworCWludCBzdGF0dXMgPSAwOworCWludCBpOworCV9fdTggdGVtcDsKKworCS8qIE11c3QgZG8gYSByZWFkIGJlZm9yZSB3cml0ZSAqLworCWlmICghc2VyaWFsLT5UaVJlYWRJMkMpIHsKKwkJc3RhdHVzID0gVElSZWFkQm9vdE1lbW9yeShzZXJpYWwsIDAsIDEsICZ0ZW1wKTsKKwkJaWYgKHN0YXR1cykKKwkJCXJldHVybiBzdGF0dXM7CisJfQorCisJZm9yIChpPTA7IGkgPCBsZW5ndGg7ICsraSkgeworCQlzdGF0dXMgPSBUSVNlbmRWZW5kb3JSZXF1ZXN0U3luYyAoc2VyaWFsLT5zZXJpYWwtPmRldiwKKwkJCQkJCVVNUENfTUVNT1JZX1dSSVRFLAkJLy8gUmVxdWVzdAorCQkJCQkJYnVmZmVyW2ldLAkJCS8vIHdWYWx1ZQorCQkJCQkJKF9fdTE2KShpK3N0YXJ0X2FkZHJlc3MpLAkvLyB3SW5kZXgKKwkJCQkJCU5VTEwsCQkJCS8vIFRyYW5zZmVyQnVmZmVyCisJCQkJCQkwKTsJCQkJLy8gVHJhbnNmZXJCdWZmZXJMZW5ndGgKKwkJaWYgKHN0YXR1cykKKwkJCXJldHVybiBzdGF0dXM7CisJfQorCisgIAlkYmcgKCIlcyAtIHN0YXJ0X3NkZHIgPSAleCwgbGVuZ3RoID0gJWQiLCBfX0ZVTkNUSU9OX18sIHN0YXJ0X2FkZHJlc3MsIGxlbmd0aCk7CisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCBfX0ZVTkNUSU9OX18sIGxlbmd0aCwgYnVmZmVyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKworLyogV3JpdGUgZWRnZXBvcnQgSTJDIG1lbW9yeSB0byBUSSBjaGlwCSovCitzdGF0aWMgaW50IFRJV3JpdGVEb3dubG9hZEkyQyAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqc2VyaWFsLCBpbnQgc3RhcnRfYWRkcmVzcywgaW50IGxlbmd0aCwgX191OCBhZGRyZXNzX3R5cGUsIF9fdTggKmJ1ZmZlcikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlpbnQgd3JpdGVfbGVuZ3RoOworCV9fYmUxNiBiZV9zdGFydF9hZGRyZXNzOworCisJLyogV2UgY2FuIG9ubHkgc2VuZCBhIG1heGltdW0gb2YgMSBhbGlnbmVkIGJ5dGUgcGFnZSBhdCBhIHRpbWUgKi8KKwkKKwkvKiBjYWx1bGF0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIGxlZnQgaW4gdGhlIGZpcnN0IHBhZ2UgKi8KKwl3cml0ZV9sZW5ndGggPSBFUFJPTV9QQUdFX1NJWkUgLSAoc3RhcnRfYWRkcmVzcyAmIChFUFJPTV9QQUdFX1NJWkUgLSAxKSk7CisKKwlpZiAod3JpdGVfbGVuZ3RoID4gbGVuZ3RoKQorCQl3cml0ZV9sZW5ndGggPSBsZW5ndGg7CisKKwlkYmcgKCIlcyAtIEJ5dGVzSW5GaXJzdFBhZ2UgQWRkciA9ICV4LCBsZW5ndGggPSAlZCIsIF9fRlVOQ1RJT05fXywgc3RhcnRfYWRkcmVzcywgd3JpdGVfbGVuZ3RoKTsKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZzZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsIF9fRlVOQ1RJT05fXywgd3JpdGVfbGVuZ3RoLCBidWZmZXIpOworCisJLyogV3JpdGUgZmlyc3QgcGFnZSAqLworCWJlX3N0YXJ0X2FkZHJlc3MgPSBjcHVfdG9fYmUxNiAoc3RhcnRfYWRkcmVzcyk7CisJc3RhdHVzID0gVElTZW5kVmVuZG9yUmVxdWVzdFN5bmMgKHNlcmlhbC0+c2VyaWFsLT5kZXYsCisJCQkJCVVNUENfTUVNT1JZX1dSSVRFLAkvLyBSZXF1ZXN0CisJCQkJCShfX3UxNilhZGRyZXNzX3R5cGUsCS8vIHdWYWx1ZQorCQkJCQkoX19mb3JjZSBfX3UxNiliZV9zdGFydF9hZGRyZXNzLAkvLyB3SW5kZXgKKwkJCQkJYnVmZmVyLAkJCS8vIFRyYW5zZmVyQnVmZmVyCisJCQkJCXdyaXRlX2xlbmd0aCk7CisJaWYgKHN0YXR1cykgeworCQlkYmcgKCIlcyAtIEVSUk9SICVkIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCWxlbmd0aAkJLT0gd3JpdGVfbGVuZ3RoOworCXN0YXJ0X2FkZHJlc3MJKz0gd3JpdGVfbGVuZ3RoOworCWJ1ZmZlcgkJKz0gd3JpdGVfbGVuZ3RoOworCisJLyogV2Ugc2hvdWxkIGJlIGFsaWduZWQgbm93IC0tIGNhbiB3cml0ZSBtYXggcGFnZSBzaXplIGJ5dGVzIGF0IGEgdGltZSAqLworCXdoaWxlIChsZW5ndGgpIHsKKwkJaWYgKGxlbmd0aCA+IEVQUk9NX1BBR0VfU0laRSkKKwkJCXdyaXRlX2xlbmd0aCA9IEVQUk9NX1BBR0VfU0laRTsKKwkJZWxzZQorCQkJd3JpdGVfbGVuZ3RoID0gbGVuZ3RoOworCisJCWRiZyAoIiVzIC0gUGFnZSBXcml0ZSBBZGRyID0gJXgsIGxlbmd0aCA9ICVkIiwgX19GVU5DVElPTl9fLCBzdGFydF9hZGRyZXNzLCB3cml0ZV9sZW5ndGgpOworCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZzZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsIF9fRlVOQ1RJT05fXywgd3JpdGVfbGVuZ3RoLCBidWZmZXIpOworCisJCS8qIFdyaXRlIG5leHQgcGFnZSAqLworCQliZV9zdGFydF9hZGRyZXNzID0gY3B1X3RvX2JlMTYgKHN0YXJ0X2FkZHJlc3MpOworCQlzdGF0dXMgPSBUSVNlbmRWZW5kb3JSZXF1ZXN0U3luYyAoc2VyaWFsLT5zZXJpYWwtPmRldiwKKwkJCQkJCVVNUENfTUVNT1JZX1dSSVRFLAkvLyBSZXF1ZXN0CisJCQkJCQkoX191MTYpYWRkcmVzc190eXBlLAkvLyB3VmFsdWUKKwkJCQkJCShfX2ZvcmNlIF9fdTE2KWJlX3N0YXJ0X2FkZHJlc3MsCS8vIHdJbmRleAorCQkJCQkJYnVmZmVyLAkgIAkJLy8gVHJhbnNmZXJCdWZmZXIKKwkJCQkJCXdyaXRlX2xlbmd0aCk7CQkvLyBUcmFuc2ZlckJ1ZmZlckxlbmd0aAorCQlpZiAoc3RhdHVzKSB7CisJCQlkZXZfZXJyICgmc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBFUlJPUiAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCQkKKwkJbGVuZ3RoCQktPSB3cml0ZV9sZW5ndGg7CisJCXN0YXJ0X2FkZHJlc3MJKz0gd3JpdGVfbGVuZ3RoOworCQlidWZmZXIJCSs9IHdyaXRlX2xlbmd0aDsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogRXhhbWluZSB0aGUgVU1QIERNQSByZWdpc3RlcnMgYW5kIExTUgorICogCisgKiBDaGVjayB0aGUgTVNCaXQgb2YgdGhlIFggYW5kIFkgRE1BIGJ5dGUgY291bnQgcmVnaXN0ZXJzLgorICogQSB6ZXJvIGluIHRoaXMgYml0IGluZGljYXRlcyB0aGF0IHRoZSBUWCBETUEgYnVmZmVycyBhcmUgZW1wdHkKKyAqIHRoZW4gY2hlY2sgdGhlIFRYIEVtcHR5IGJpdCBpbiB0aGUgVUFSVC4KKyAqLworc3RhdGljIGludCBUSUlzVHhBY3RpdmUgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICpwb3J0KQoreworCWludCBzdGF0dXM7CisJc3RydWN0IG91dF9lbmRwb2ludF9kZXNjX2Jsb2NrICpvZWRiOworCV9fdTggKmxzcjsKKwlpbnQgYnl0ZXNfbGVmdCA9IDA7CisKKwlvZWRiID0ga21hbGxvYyAoc2l6ZW9mICgqIG9lZGIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9lZGIpIHsKKwkJZGV2X2VyciAoJnBvcnQtPnBvcnQtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbHNyID0ga21hbGxvYyAoMSwgR0ZQX0tFUk5FTCk7CS8qIFNpZ2gsIHRoYXQncyByaWdodCwganVzdCBvbmUgYnl0ZSwKKwkJCQkJICAgYXMgbm90IGFsbCBwbGF0Zm9ybXMgY2FuIGRvIERNQQorCQkJCQkgICBmcm9tIHN0YWNrICovCisJaWYgKCFsc3IpIHsKKwkJa2ZyZWUob2VkYik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwkvKiBSZWFkIHRoZSBETUEgQ291bnQgUmVnaXN0ZXJzICovCisJc3RhdHVzID0gVElSZWFkUmFtIChwb3J0LT5wb3J0LT5zZXJpYWwtPmRldiwKKwkJCSAgICBwb3J0LT5kbWFfYWRkcmVzcywKKwkJCSAgICBzaXplb2YoICpvZWRiKSwKKwkJCSAgICAodm9pZCAqKW9lZGIpOworCisJaWYgKHN0YXR1cykKKwkJZ290byBleGl0X2lzX3R4X2FjdGl2ZTsKKworCWRiZyAoIiVzIC0gWEJ5dGVDb3VudCAgICAweCVYIiwgX19GVU5DVElPTl9fLCBvZWRiLT5YQnl0ZUNvdW50KTsKKworCS8qIGFuZCB0aGUgTFNSICovCisJc3RhdHVzID0gVElSZWFkUmFtIChwb3J0LT5wb3J0LT5zZXJpYWwtPmRldiwgCisJCQkgICAgcG9ydC0+dWFydF9iYXNlICsgVU1QTUVNX09GRlNfVUFSVF9MU1IsCisJCQkgICAgMSwKKwkJCSAgICBsc3IpOworCisJaWYgKHN0YXR1cykKKwkJZ290byBleGl0X2lzX3R4X2FjdGl2ZTsKKwlkYmcgKCIlcyAtIExTUiA9IDB4JVgiLCBfX0ZVTkNUSU9OX18sICpsc3IpOworCQorCS8qIElmIGVpdGhlciBidWZmZXIgaGFzIGRhdGEgb3Igd2UgYXJlIHRyYW5zbWl0dGluZyB0aGVuIHJldHVybiBUUlVFICovCisJaWYgKChvZWRiLT5YQnl0ZUNvdW50ICYgMHg4MCApICE9IDAgKQorCQlieXRlc19sZWZ0ICs9IDY0OworCisJaWYgKCgqbHNyICYgVU1QX1VBUlRfTFNSX1RYX01BU0sgKSA9PSAwICkKKwkJYnl0ZXNfbGVmdCArPSAxOworCisJLyogV2UgcmV0dXJuIE5vdCBBY3RpdmUgaWYgd2UgZ2V0IGFueSBraW5kIG9mIGVycm9yICovCitleGl0X2lzX3R4X2FjdGl2ZToKKwlkYmcgKCIlcyAtIHJldHVybiAlZCIsIF9fRlVOQ1RJT05fXywgYnl0ZXNfbGVmdCApOworCisJa2ZyZWUobHNyKTsKKwlrZnJlZShvZWRiKTsKKwlyZXR1cm4gYnl0ZXNfbGVmdDsKK30KKworc3RhdGljIHZvaWQgVElDaGFzZVBvcnQoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGxvbmcgdGltZW91dCwgaW50IGZsdXNoKQoreworCWludCBiYXVkX3JhdGU7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnBvcnQtPnR0eTsKKwl3YWl0X3F1ZXVlX3Qgd2FpdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCF0aW1lb3V0KQorCQl0aW1lb3V0ID0gKEhaKkVER0VfQ0xPU0lOR19XQUlUKS8xMDA7CisKKwkvKiB3YWl0IGZvciBkYXRhIHRvIGRyYWluIGZyb20gdGhlIGJ1ZmZlciAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5lcF9sb2NrLCBmbGFncyk7CisJaW5pdF93YWl0cXVldWVfZW50cnkoJndhaXQsIGN1cnJlbnQpOworCWFkZF93YWl0X3F1ZXVlKCZ0dHktPndyaXRlX3dhaXQsICZ3YWl0KTsKKwlmb3IgKDs7KSB7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCWlmIChlZGdlX2J1Zl9kYXRhX2F2YWlsKHBvcnQtPmVwX291dF9idWYpID09IDAKKwkJfHwgdGltZW91dCA9PSAwIHx8IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpCisJCXx8ICF1c2JfZ2V0X2ludGZkYXRhKHBvcnQtPnBvcnQtPnNlcmlhbC0+aW50ZXJmYWNlKSkgIC8qIGRpc2Nvbm5lY3QgKi8KKwkJCWJyZWFrOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5lcF9sb2NrLCBmbGFncyk7CisJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCX0KKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZ0dHktPndyaXRlX3dhaXQsICZ3YWl0KTsKKwlpZiAoZmx1c2gpCisJCWVkZ2VfYnVmX2NsZWFyKHBvcnQtPmVwX291dF9idWYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKworCS8qIHdhaXQgZm9yIGRhdGEgdG8gZHJhaW4gZnJvbSB0aGUgZGV2aWNlICovCisJdGltZW91dCArPSBqaWZmaWVzOworCXdoaWxlICgobG9uZykoamlmZmllcyAtIHRpbWVvdXQpIDwgMCAmJiAhc2lnbmFsX3BlbmRpbmcoY3VycmVudCkKKwkmJiB1c2JfZ2V0X2ludGZkYXRhKHBvcnQtPnBvcnQtPnNlcmlhbC0+aW50ZXJmYWNlKSkgeyAgLyogbm90IGRpc2Nvbm5lY3RlZCAqLworCQlpZiAoIVRJSXNUeEFjdGl2ZShwb3J0KSkKKwkJCWJyZWFrOworCQltc2xlZXAoMTApOworCX0KKworCS8qIGRpc2Nvbm5lY3RlZCAqLworCWlmICghdXNiX2dldF9pbnRmZGF0YShwb3J0LT5wb3J0LT5zZXJpYWwtPmludGVyZmFjZSkpCisJCXJldHVybjsKKworCS8qIHdhaXQgb25lIG1vcmUgY2hhcmFjdGVyIHRpbWUsIGJhc2VkIG9uIGJhdWQgcmF0ZSAqLworCS8qIChUSUlzVHhBY3RpdmUgZG9lc24ndCBzZWVtIHRvIHdhaXQgZm9yIHRoZSBsYXN0IGJ5dGUpICovCisJaWYgKChiYXVkX3JhdGU9cG9ydC0+YmF1ZF9yYXRlKSA9PSAwKQorCQliYXVkX3JhdGUgPSA1MDsKKwltc2xlZXAobWF4KDEsKDEwMDAwK2JhdWRfcmF0ZS0xKS9iYXVkX3JhdGUpKTsKK30KKworc3RhdGljIGludCBUSUNob29zZUNvbmZpZ3VyYXRpb24gKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJLy8gVGhlcmUgbWF5IGJlIG11bHRpcGxlIGNvbmZpZ3VyYXRpb25zIG9uIHRoaXMgZGV2aWNlLCBpbiB3aGljaCBjYXNlCisJLy8gd2Ugd291bGQgbmVlZCB0byByZWFkIGFuZCBwYXJzZSBhbGwgb2YgdGhlbSB0byBmaW5kIG91dCB3aGljaCBvbmUKKwkvLyB3ZSB3YW50LiBIb3dldmVyLCB3ZSBqdXN0IHN1cHBvcnQgb25lIGNvbmZpZyBhdCB0aGlzIHBvaW50LAorCS8vIGNvbmZpZ3VyYXRpb24gIyAxLCB3aGljaCBpcyBDb25maWcgRGVzY3JpcHRvciAwLgorCisJZGJnICgiJXMgLSBOdW1iZXIgb2YgSW50ZXJmYWNlcyA9ICVkIiwgX19GVU5DVElPTl9fLCBkZXYtPmNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlcyk7CisJZGJnICgiJXMgLSBNQVggUG93ZXIgICAgICAgICAgICA9ICVkIiwgX19GVU5DVElPTl9fLCBkZXYtPmNvbmZpZy0+ZGVzYy5iTWF4UG93ZXIqMik7CisKKwlpZiAoZGV2LT5jb25maWctPmRlc2MuYk51bUludGVyZmFjZXMgIT0gMSkgeworCQlkZXZfZXJyICgmZGV2LT5kZXYsICIlcyAtIGJOdW1JbnRlcmZhY2VzIGlzIG5vdCAxLCBFUlJPUiFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IFRJUmVhZFJvbSAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqc2VyaWFsLCBpbnQgc3RhcnRfYWRkcmVzcywgaW50IGxlbmd0aCwgX191OCAqYnVmZmVyKQoreworCWludCBzdGF0dXM7CisKKwlpZiAoc2VyaWFsLT5wcm9kdWN0X2luZm8uVGlNb2RlID09IFRJX01PREVfRE9XTkxPQUQpIHsKKwkJc3RhdHVzID0gVElSZWFkRG93bmxvYWRNZW1vcnkgKHNlcmlhbC0+c2VyaWFsLT5kZXYsCisJCQkJCSAgICAgICBzdGFydF9hZGRyZXNzLAorCQkJCQkgICAgICAgbGVuZ3RoLAorCQkJCQkgICAgICAgc2VyaWFsLT5USV9JMkNfVHlwZSwKKwkJCQkJICAgICAgIGJ1ZmZlcik7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gVElSZWFkQm9vdE1lbW9yeSAoc2VyaWFsLAorCQkJCQkgICBzdGFydF9hZGRyZXNzLAorCQkJCQkgICBsZW5ndGgsCisJCQkJCSAgIGJ1ZmZlcik7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBUSVdyaXRlUm9tIChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICpzZXJpYWwsIGludCBzdGFydF9hZGRyZXNzLCBpbnQgbGVuZ3RoLCBfX3U4ICpidWZmZXIpCit7CisJaWYgKHNlcmlhbC0+cHJvZHVjdF9pbmZvLlRpTW9kZSA9PSBUSV9NT0RFX0JPT1QpCisJCXJldHVybiBUSVdyaXRlQm9vdE1lbW9yeSAoc2VyaWFsLAorCQkJCQkgIHN0YXJ0X2FkZHJlc3MsCisJCQkJCSAgbGVuZ3RoLAorCQkJCQkgIGJ1ZmZlcik7CisKKwlpZiAoc2VyaWFsLT5wcm9kdWN0X2luZm8uVGlNb2RlID09IFRJX01PREVfRE9XTkxPQUQpCisJCXJldHVybiBUSVdyaXRlRG93bmxvYWRJMkMgKHNlcmlhbCwKKwkJCQkJICAgc3RhcnRfYWRkcmVzcywKKwkJCQkJICAgbGVuZ3RoLAorCQkJCQkgICBzZXJpYWwtPlRJX0kyQ19UeXBlLAorCQkJCQkgICBidWZmZXIpOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKworCisvKiBSZWFkIGEgZGVzY3JpcHRvciBoZWFkZXIgZnJvbSBJMkMgYmFzZWQgb24gdHlwZSAqLworc3RhdGljIGludCBUSUdldERlc2NyaXB0b3JBZGRyZXNzIChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICpzZXJpYWwsIGludCBkZXNjX3R5cGUsIHN0cnVjdCB0aV9pMmNfZGVzYyAqcm9tX2Rlc2MpCit7CisJaW50IHN0YXJ0X2FkZHJlc3M7CisJaW50IHN0YXR1czsKKworCS8qIFNlYXJjaCBmb3IgcmVxdWVzdGVkIGRlc2NyaXB0b3IgaW4gSTJDICovCisJc3RhcnRfYWRkcmVzcyA9IDI7CisJZG8geworCQlzdGF0dXMgPSBUSVJlYWRSb20gKHNlcmlhbCwKKwkJCQkgICBzdGFydF9hZGRyZXNzLAorCQkJCSAgIHNpemVvZihzdHJ1Y3QgdGlfaTJjX2Rlc2MpLAorCQkJCSAgIChfX3U4ICopcm9tX2Rlc2MgKTsKKwkJaWYgKHN0YXR1cykKKwkJCXJldHVybiAwOworCisJCWlmIChyb21fZGVzYy0+VHlwZSA9PSBkZXNjX3R5cGUpCisJCQlyZXR1cm4gc3RhcnRfYWRkcmVzczsKKworCQlzdGFydF9hZGRyZXNzID0gc3RhcnRfYWRkcmVzcyArIHNpemVvZihzdHJ1Y3QgdGlfaTJjX2Rlc2MpICsgIHJvbV9kZXNjLT5TaXplOworCisJfSB3aGlsZSAoKHN0YXJ0X2FkZHJlc3MgPCBUSV9NQVhfSTJDX1NJWkUpICYmIHJvbV9kZXNjLT5UeXBlKTsKKwkKKwlyZXR1cm4gMDsKK30KKworLyogVmFsaWRhdGUgZGVzY3JpcHRvciBjaGVja3N1bSAqLworc3RhdGljIGludCBWYWxpZENoZWNrc3VtKHN0cnVjdCB0aV9pMmNfZGVzYyAqcm9tX2Rlc2MsIF9fdTggKmJ1ZmZlcikKK3sKKwlfX3UxNiBpOworCV9fdTggY3MgPSAwOworCisJZm9yIChpPTA7IGkgPCByb21fZGVzYy0+U2l6ZTsgaSsrKSB7CisJCWNzID0gKF9fdTgpKGNzICsgYnVmZmVyW2ldKTsKKwl9CisJaWYgKGNzICE9IHJvbV9kZXNjLT5DaGVja1N1bSkgeworCQlkYmcgKCIlcyAtIE1pc21hdGNoICV4IC0gJXgiLCBfX0ZVTkNUSU9OX18sIHJvbV9kZXNjLT5DaGVja1N1bSwgY3MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBJMkMgaW1hZ2UgaXMgZ29vZCAqLworc3RhdGljIGludCBUaVZhbGlkYXRlSTJjSW1hZ2UgKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2OworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCB0aV9pMmNfZGVzYyAqcm9tX2Rlc2M7CisJaW50IHN0YXJ0X2FkZHJlc3MgPSAyOworCV9fdTggKmJ1ZmZlcjsKKwlfX3UxNiB0dHlwZTsKKworCXJvbV9kZXNjID0ga21hbGxvYyAoc2l6ZW9mICgqcm9tX2Rlc2MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJvbV9kZXNjKSB7CisJCWRldl9lcnIgKGRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWJ1ZmZlciA9IGttYWxsb2MgKFRJX01BWF9JMkNfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VyciAoZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5IHdoZW4gYWxsb2NhdGluZyBidWZmZXJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWtmcmVlIChyb21fZGVzYyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8vIFJlYWQgdGhlIGZpcnN0IGJ5dGUgKFNpZ25hdHVyZTApIG11c3QgYmUgMHg1MiBvciAweDEwCisJc3RhdHVzID0gVElSZWFkUm9tIChzZXJpYWwsIDAsIDEsIGJ1ZmZlcik7CisJaWYgKHN0YXR1cykKKwkJZ290byBFeGl0VGlWYWxpZGF0ZUkyY0ltYWdlOyAKKworCWlmICgqYnVmZmVyICE9IFVNUDUxNTIgJiYgKmJ1ZmZlciAhPSBVTVAzNDEwKSB7CisJCWRldl9lcnIgKGRldiwgIiVzIC0gaW52YWxpZCBidWZmZXIgc2lnbmF0dXJlXG4iLCBfX0ZVTkNUSU9OX18pOworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIEV4aXRUaVZhbGlkYXRlSTJjSW1hZ2U7CisJfQorCisJZG8geworCQkvLyBWYWxpZGF0ZSB0aGUgSTJDCisJCXN0YXR1cyA9IFRJUmVhZFJvbSAoc2VyaWFsLAorCQkJCXN0YXJ0X2FkZHJlc3MsCisJCQkJc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZGVzYyksCisJCQkJKF9fdTggKilyb21fZGVzYyk7CisJCWlmIChzdGF0dXMpCisJCQlicmVhazsKKworCQlpZiAoKHN0YXJ0X2FkZHJlc3MgKyBzaXplb2Yoc3RydWN0IHRpX2kyY19kZXNjKSArIHJvbV9kZXNjLT5TaXplKSA+IFRJX01BWF9JMkNfU0laRSkgeworCQkJc3RhdHVzID0gLUVOT0RFVjsKKwkJCWRiZyAoIiVzIC0gc3RydWN0dXJlIHRvbyBiaWcsIGVycm9yaW5nIG91dC4iLCBfX0ZVTkNUSU9OX18pOworCQkJYnJlYWs7CisJCX0KKworCQlkYmcgKCIlcyBUeXBlID0gMHgleCIsIF9fRlVOQ1RJT05fXywgcm9tX2Rlc2MtPlR5cGUpOworCisJCS8vIFNraXAgdHlwZSAyIHJlY29yZAorCQl0dHlwZSA9IHJvbV9kZXNjLT5UeXBlICYgMHgwZjsKKwkJaWYgKCB0dHlwZSAhPSBJMkNfREVTQ19UWVBFX0ZJUk1XQVJFX0JBU0lDCisJCQkmJiB0dHlwZSAhPSBJMkNfREVTQ19UWVBFX0ZJUk1XQVJFX0FVVE8gKSB7CisJCQkvLyBSZWFkIHRoZSBkZXNjcmlwdG9yIGRhdGEKKwkJCXN0YXR1cyA9IFRJUmVhZFJvbShzZXJpYWwsCisJCQkJCQlzdGFydF9hZGRyZXNzK3NpemVvZihzdHJ1Y3QgdGlfaTJjX2Rlc2MpLAorCQkJCQkJcm9tX2Rlc2MtPlNpemUsCisJCQkJCQlidWZmZXIpOworCQkJaWYgKHN0YXR1cykKKwkJCQlicmVhazsKKworCQkJc3RhdHVzID0gVmFsaWRDaGVja3N1bShyb21fZGVzYywgYnVmZmVyKTsKKwkJCWlmIChzdGF0dXMpCisJCQkJYnJlYWs7CisJCX0KKwkJc3RhcnRfYWRkcmVzcyA9IHN0YXJ0X2FkZHJlc3MgKyBzaXplb2Yoc3RydWN0IHRpX2kyY19kZXNjKSArIHJvbV9kZXNjLT5TaXplOworCisJfSB3aGlsZSAoKHJvbV9kZXNjLT5UeXBlICE9IEkyQ19ERVNDX1RZUEVfSU9OKSAmJiAoc3RhcnRfYWRkcmVzcyA8IFRJX01BWF9JMkNfU0laRSkpOworCisJaWYgKChyb21fZGVzYy0+VHlwZSAhPSBJMkNfREVTQ19UWVBFX0lPTikgfHwgKHN0YXJ0X2FkZHJlc3MgPiBUSV9NQVhfSTJDX1NJWkUpKQorCQlzdGF0dXMgPSAtRU5PREVWOworCitFeGl0VGlWYWxpZGF0ZUkyY0ltYWdlOgkKKwlrZnJlZSAoYnVmZmVyKTsKKwlrZnJlZSAocm9tX2Rlc2MpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgVElSZWFkTWFudWZEZXNjcmlwdG9yIChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICpzZXJpYWwsIF9fdTggKmJ1ZmZlcikKK3sKKwlpbnQgc3RhdHVzOworCWludCBzdGFydF9hZGRyZXNzOworCXN0cnVjdCB0aV9pMmNfZGVzYyAqcm9tX2Rlc2M7CisJc3RydWN0IGVkZ2VfdGlfbWFudWZfZGVzY3JpcHRvciAqZGVzYzsKKworCXJvbV9kZXNjID0ga21hbGxvYyAoc2l6ZW9mICgqcm9tX2Rlc2MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJvbV9kZXNjKSB7CisJCWRldl9lcnIgKCZzZXJpYWwtPnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlzdGFydF9hZGRyZXNzID0gVElHZXREZXNjcmlwdG9yQWRkcmVzcyAoc2VyaWFsLCBJMkNfREVTQ19UWVBFX0lPTiwgcm9tX2Rlc2MpOworCisJaWYgKCFzdGFydF9hZGRyZXNzKSB7CisJCWRiZyAoIiVzIC0gRWRnZSBEZXNjcmlwdG9yIG5vdCBmb3VuZCBpbiBJMkMiLCBfX0ZVTkNUSU9OX18pOworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGV4aXQ7CisJfQorCisJLy8gUmVhZCB0aGUgZGVzY3JpcHRvciBkYXRhCisJc3RhdHVzID0gVElSZWFkUm9tIChzZXJpYWwsCisJCQkJc3RhcnRfYWRkcmVzcytzaXplb2Yoc3RydWN0IHRpX2kyY19kZXNjKSwKKwkJCQlyb21fZGVzYy0+U2l6ZSwKKwkJCQlidWZmZXIpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXhpdDsKKwkKKwlzdGF0dXMgPSBWYWxpZENoZWNrc3VtKHJvbV9kZXNjLCBidWZmZXIpOworCQorCWRlc2MgPSAoc3RydWN0IGVkZ2VfdGlfbWFudWZfZGVzY3JpcHRvciAqKWJ1ZmZlcjsKKwlkYmcgKCAiJXMgLSBJb25Db25maWcgICAgICAweCV4IiwgX19GVU5DVElPTl9fLCBkZXNjLT5Jb25Db25maWcgCSk7CisJZGJnICggIiVzIC0gVmVyc2lvbiAgICAgICAgICAlZCIsIF9fRlVOQ1RJT05fXywgZGVzYy0+VmVyc2lvbgkgIAkpOworCWRiZyAoICIlcyAtIENwdS9Cb2FyZCAgICAgIDB4JXgiLCBfX0ZVTkNUSU9OX18sIGRlc2MtPkNwdVJldl9Cb2FyZFJldgkpOworCWRiZyAoICIlcyAtIE51bVBvcnRzICAgICAgICAgJWQiLCBfX0ZVTkNUSU9OX18sIGRlc2MtPk51bVBvcnRzICAJKTsJCisJZGJnICggIiVzIC0gTnVtVmlydHVhbFBvcnRzICAlZCIsIF9fRlVOQ1RJT05fXywgZGVzYy0+TnVtVmlydHVhbFBvcnRzCSk7CQorCWRiZyAoICIlcyAtIFRvdGFsUG9ydHMgICAgICAgJWQiLCBfX0ZVTkNUSU9OX18sIGRlc2MtPlRvdGFsUG9ydHMgIAkpOwkKKworZXhpdDoKKwlrZnJlZSAocm9tX2Rlc2MpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIEJ1aWxkIGZpcm13YXJlIGhlYWRlciB1c2VkIGZvciBmaXJtd2FyZSB1cGRhdGUgKi8KK3N0YXRpYyBpbnQgQnVpbGRJMkNGaXJtd2FyZUhlYWRlciAoX191OCAqaGVhZGVyLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJX191OCAqYnVmZmVyOworCWludCBidWZmZXJfc2l6ZTsKKwlpbnQgaTsKKwlfX3U4IGNzID0gMDsKKwlzdHJ1Y3QgdGlfaTJjX2Rlc2MgKmkyY19oZWFkZXI7CisJc3RydWN0IHRpX2kyY19pbWFnZV9oZWFkZXIgKmltZ19oZWFkZXI7CisJc3RydWN0IHRpX2kyY19maXJtd2FyZV9yZWMgKmZpcm13YXJlX3JlYzsKKworCS8vIEluIG9yZGVyIHRvIHVwZGF0ZSB0aGUgSTJDIGZpcm13YXJlIHdlIG11c3QgY2hhbmdlIHRoZSB0eXBlIDIgcmVjb3JkIHRvIHR5cGUgMHhGMi4KKwkvLyBUaGlzIHdpbGwgZm9yY2UgdGhlIFVNUCB0byBjb21lIHVwIGluIEJvb3QgTW9kZS4gIFRoZW4gd2hpbGUgaW4gYm9vdCBtb2RlLCB0aGUgZHJpdmVyIAorCS8vIHdpbGwgZG93bmxvYWQgdGhlIGxhdGVzdCBmaXJtd2FyZSAocGFkZGVkIHRvIDE1LjVrKSBpbnRvIHRoZSBVTVAgcmFtLiAKKwkvLyBBbmQgZmluYWxseSB3aGVuIHRoZSBkZXZpY2UgY29tZXMgYmFjayB1cCBpbiBkb3dubG9hZCBtb2RlIHRoZSBkcml2ZXIgd2lsbCBjYXVzZSAKKwkvLyB0aGUgbmV3IGZpcm13YXJlIHRvIGJlIGNvcGllZCBmcm9tIHRoZSBVTVAgUmFtIHRvIEkyQyBhbmQgdGhlIGZpcm13YXJlIHdpbGwgdXBkYXRlCisJLy8gdGhlIHJlY29yZCB0eXBlIGZyb20gMHhmMiB0byAweDAyLgorCQorCS8vIEFsbG9jYXRlIGEgMTUuNWsgYnVmZmVyICsgMiBieXRlcyBmb3IgdmVyc2lvbiBudW1iZXIgKEZpcm13YXJlIFJlY29yZCkKKwlidWZmZXJfc2l6ZSA9ICgoKDEwMjQgKiAxNikgLSA1MTIgKSsgc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZmlybXdhcmVfcmVjKSk7CisKKwlidWZmZXIgPSBrbWFsbG9jIChidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VyciAoZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJCisJLy8gU2V0IGVudGlyZSBpbWFnZSBvZiAweGZmcworCW1lbXNldCAoYnVmZmVyLCAweGZmLCBidWZmZXJfc2l6ZSk7CisKKwkvLyBDb3B5IHZlcnNpb24gbnVtYmVyIGludG8gZmlybXdhcmUgcmVjb3JkCisJZmlybXdhcmVfcmVjID0gKHN0cnVjdCB0aV9pMmNfZmlybXdhcmVfcmVjICopYnVmZmVyOworCisJZmlybXdhcmVfcmVjLT5WZXJfTWFqb3IJPSBPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb24uTWFqb3JWZXJzaW9uOworCWZpcm13YXJlX3JlYy0+VmVyX01pbm9yCT0gT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uLk1pbm9yVmVyc2lvbjsKKworCS8vIFBvaW50ZXIgdG8gZndfZG93biBtZW1vcnkgaW1hZ2UKKwlpbWdfaGVhZGVyID0gKHN0cnVjdCB0aV9pMmNfaW1hZ2VfaGVhZGVyICopJlBhZ2FibGVPcGVyYXRpb25hbENvZGVJbWFnZVswXTsKKworCW1lbWNweSAoYnVmZmVyICsgc2l6ZW9mKHN0cnVjdCB0aV9pMmNfZmlybXdhcmVfcmVjKSwKKwkJJlBhZ2FibGVPcGVyYXRpb25hbENvZGVJbWFnZVtzaXplb2Yoc3RydWN0IHRpX2kyY19pbWFnZV9oZWFkZXIpXSwKKwkJbGUxNl90b19jcHUoaW1nX2hlYWRlci0+TGVuZ3RoKSk7CisKKwlmb3IgKGk9MDsgaSA8IGJ1ZmZlcl9zaXplOyBpKyspIHsKKwkJY3MgPSAoX191OCkoY3MgKyBidWZmZXJbaV0pOworCX0KKworCWtmcmVlIChidWZmZXIpOworCisJLy8gQnVpbGQgbmV3IGhlYWRlcgorCWkyY19oZWFkZXIgPSAgKHN0cnVjdCB0aV9pMmNfZGVzYyAqKWhlYWRlcjsKKwlmaXJtd2FyZV9yZWMgPSAgKHN0cnVjdCB0aV9pMmNfZmlybXdhcmVfcmVjKilpMmNfaGVhZGVyLT5EYXRhOworCQorCWkyY19oZWFkZXItPlR5cGUJPSBJMkNfREVTQ19UWVBFX0ZJUk1XQVJFX0JMQU5LOworCWkyY19oZWFkZXItPlNpemUJPSAoX191MTYpYnVmZmVyX3NpemU7CisJaTJjX2hlYWRlci0+Q2hlY2tTdW0JPSBjczsKKwlmaXJtd2FyZV9yZWMtPlZlcl9NYWpvcgk9IE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbi5NYWpvclZlcnNpb247CisJZmlybXdhcmVfcmVjLT5WZXJfTWlub3IJPSBPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb24uTWlub3JWZXJzaW9uOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRyeSB0byBmaWd1cmUgb3V0IHdoYXQgdHlwZSBvZiBJMmMgd2UgaGF2ZSAqLworc3RhdGljIGludCBUSUdldEkyY1R5cGVJbkJvb3RNb2RlIChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IHN0YXR1czsKKwlfX3U4IGRhdGE7CisJCQorCS8vIFRyeSB0byByZWFkIHR5cGUgMgorCXN0YXR1cyA9IFRJUmVhZFZlbmRvclJlcXVlc3RTeW5jIChzZXJpYWwtPnNlcmlhbC0+ZGV2LAorCQkJCQlVTVBDX01FTU9SWV9SRUFELAkJLy8gUmVxdWVzdAorCQkJCQlEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSSwJLy8gd1ZhbHVlIChBZGRyZXNzIHR5cGUpCisJCQkJCTAsCQkgCQkvLyB3SW5kZXgKKwkJCQkJJmRhdGEsCQkJCS8vIFRyYW5zZmVyQnVmZmVyCisJCQkJCTB4MDEpOwkJCQkvLyBUcmFuc2ZlckJ1ZmZlckxlbmd0aAorCWlmIChzdGF0dXMpCisJCWRiZyAoIiVzIC0gcmVhZCAyIHN0YXR1cyBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCWVsc2UKKwkJZGJnICgiJXMgLSByZWFkIDIgZGF0YSA9IDB4JXgiLCBfX0ZVTkNUSU9OX18sIGRhdGEpOworCWlmICgoIXN0YXR1cykgJiYgKGRhdGEgPT0gVU1QNTE1MiB8fCBkYXRhID09IFVNUDM0MTApKSB7CisJCWRiZyAoIiVzIC0gUk9NX1RZUEVfSUkiLCBfX0ZVTkNUSU9OX18pOworCQlzZXJpYWwtPlRJX0kyQ19UeXBlID0gRFRLX0FERFJfU1BBQ0VfSTJDX1RZUEVfSUk7CisJCXJldHVybiAwOworCX0KKworCS8vIFRyeSB0byByZWFkIHR5cGUgMworCXN0YXR1cyA9IFRJUmVhZFZlbmRvclJlcXVlc3RTeW5jIChzZXJpYWwtPnNlcmlhbC0+ZGV2LAorCQkJCQlVTVBDX01FTU9SWV9SRUFELAkJLy8gUmVxdWVzdAorCQkJCQlEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSUksCS8vIHdWYWx1ZSAoQWRkcmVzcyB0eXBlKQorCQkJCQkwLAkJCQkvLyB3SW5kZXgKKwkJCQkJJmRhdGEsCQkJCS8vIFRyYW5zZmVyQnVmZmVyCisJCQkJCTB4MDEpOwkJCQkvLyBUcmFuc2ZlckJ1ZmZlckxlbmd0aAorCWlmIChzdGF0dXMpCisJCWRiZyAoIiVzIC0gcmVhZCAzIHN0YXR1cyBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCWVsc2UKKwkJZGJnICgiJXMgLSByZWFkIDIgZGF0YSA9IDB4JXgiLCBfX0ZVTkNUSU9OX18sIGRhdGEpOworCWlmICgoIXN0YXR1cykgJiYgKGRhdGEgPT0gVU1QNTE1MiB8fCBkYXRhID09IFVNUDM0MTApKSB7CisJCWRiZyAoIiVzIC0gUk9NX1RZUEVfSUlJIiwgX19GVU5DVElPTl9fKTsKKwkJc2VyaWFsLT5USV9JMkNfVHlwZSA9IERUS19BRERSX1NQQUNFX0kyQ19UWVBFX0lJSTsKKwkJcmV0dXJuIDA7CisJfQorCisJZGJnICgiJXMgLSBVbmtub3duIiwgX19GVU5DVElPTl9fKTsKKwlzZXJpYWwtPlRJX0kyQ19UeXBlID0gRFRLX0FERFJfU1BBQ0VfSTJDX1RZUEVfSUk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgVElTZW5kQnVsa1RyYW5zZmVyU3luYyAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgdm9pZCAqYnVmZmVyLCBpbnQgbGVuZ3RoLCBpbnQgKm51bV9zZW50KQoreworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSB1c2JfYnVsa19tc2cgKHNlcmlhbC0+ZGV2LAorCQkJCXVzYl9zbmRidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCQkJCXNlcmlhbC0+cG9ydFswXS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJCQlidWZmZXIsCisJCQkJbGVuZ3RoLAorCQkJCW51bV9zZW50LAorCQkJCTEwMDApOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIERvd25sb2FkIGdpdmVuIGZpcm13YXJlIGltYWdlIHRvIHRoZSBkZXZpY2UgKElOIEJPT1QgTU9ERSkgKi8KK3N0YXRpYyBpbnQgVElEb3dubG9hZENvZGVJbWFnZSAoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqc2VyaWFsLCBfX3U4ICppbWFnZSwgaW50IGltYWdlX2xlbmd0aCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlpbnQgcG9zOworCWludCB0cmFuc2ZlcjsKKwlpbnQgZG9uZTsKKworCS8vIFRyYW5zZmVyIGZpcm13YXJlIGltYWdlCisJZm9yIChwb3MgPSAwOyBwb3MgPCBpbWFnZV9sZW5ndGg7ICkgeworCQkvLyBSZWFkIHRoZSBuZXh0IGJ1ZmZlciBmcm9tIGZpbGUKKwkJdHJhbnNmZXIgPSBpbWFnZV9sZW5ndGggLSBwb3M7CisJCWlmICh0cmFuc2ZlciA+IEVER0VfRldfQlVMS19NQVhfUEFDS0VUX1NJWkUpCisJCQl0cmFuc2ZlciA9IEVER0VfRldfQlVMS19NQVhfUEFDS0VUX1NJWkU7CisKKwkJLy8gVHJhbnNmZXIgZGF0YQorCQlzdGF0dXMgPSBUSVNlbmRCdWxrVHJhbnNmZXJTeW5jIChzZXJpYWwtPnNlcmlhbCwgJmltYWdlW3Bvc10sIHRyYW5zZmVyLCAmZG9uZSk7CisJCWlmIChzdGF0dXMpCisJCQlicmVhazsKKwkJLy8gQWR2YW5jZSBidWZmZXIgcG9pbnRlcgorCQlwb3MgKz0gZG9uZTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvLyBGSVhNRSEhIQorc3RhdGljIGludCBUSUNvbmZpZ3VyZUJvb3REZXZpY2UgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogRG93bmxvYWRUSUZpcm13YXJlIC0gRG93bmxvYWQgcnVuLXRpbWUgb3BlcmF0aW5nIGZpcm13YXJlIHRvIHRoZSBUSTUwNTIKKyAqIAorICogVGhpcyByb3V0aW5lIGRvd25sb2FkcyB0aGUgbWFpbiBvcGVyYXRpbmcgY29kZSBpbnRvIHRoZSBUSTUwNTIsIHVzaW5nIHRoZQorICogYm9vdCBjb2RlIGFscmVhZHkgYnVybmVkIGludG8gRTJQUk9NIG9yIFJPTS4KKyAqLworc3RhdGljIGludCBUSURvd25sb2FkRmlybXdhcmUgKHN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2OworCWludCBzdGF0dXMgPSAwOworCWludCBzdGFydF9hZGRyZXNzOworCXN0cnVjdCBlZGdlX3RpX21hbnVmX2Rlc2NyaXB0b3IgKnRpX21hbnVmX2Rlc2M7CisJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqaW50ZXJmYWNlOworCWludCBkb3dubG9hZF9jdXJfdmVyOworCWludCBkb3dubG9hZF9uZXdfdmVyOworCisJLyogVGhpcyByb3V0aW5lIGlzIGVudGVyZWQgYnkgYm90aCB0aGUgQk9PVCBtb2RlIGFuZCB0aGUgRG93bmxvYWQgbW9kZQorCSAqIFdlIGNhbiBkZXRlcm1pbmUgd2hpY2ggY29kZSBpcyBydW5uaW5nIGJ5IHRoZSByZWFkaW5nIHRoZSBjb25maWcKKwkgKiBkZXNjcmlwdG9yIGFuZCBpZiB3ZSBoYXZlIG9ubHkgb25lIGJ1bGsgcGlwZSBpdCBpcyBpbiBib290IG1vZGUKKwkgKi8KKwlzZXJpYWwtPnByb2R1Y3RfaW5mby5oYXJkd2FyZV90eXBlID0gSEFSRFdBUkVfVFlQRV9USVVNUDsKKworCS8qIERlZmF1bHQgdG8gdHlwZSAyIGkyYyAqLworCXNlcmlhbC0+VElfSTJDX1R5cGUgPSBEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSTsKKworCXN0YXR1cyA9IFRJQ2hvb3NlQ29uZmlndXJhdGlvbiAoc2VyaWFsLT5zZXJpYWwtPmRldik7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCWludGVyZmFjZSA9ICZzZXJpYWwtPnNlcmlhbC0+aW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYzsKKwlpZiAoIWludGVyZmFjZSkgeworCQlkZXZfZXJyIChkZXYsICIlcyAtIG5vIGludGVyZmFjZSBzZXQsIGVycm9yIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLy8gU2V0dXAgaW5pdGlhbCBtb2RlIC0tIHRoZSBkZWZhdWx0IG1vZGUgMCBpcyBUSV9NT0RFX0NPTkZJR1VSSU5HCisJLy8gaWYgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIGVuZHBvaW50IHdlIGFyZSBkZWZpbml0ZWx5IGluIGRvd25sb2FkIG1vZGUKKwlpZiAoaW50ZXJmYWNlLT5iTnVtRW5kcG9pbnRzID4gMSkKKwkJc2VyaWFsLT5wcm9kdWN0X2luZm8uVGlNb2RlID0gVElfTU9ERV9ET1dOTE9BRDsKKwllbHNlCisJCS8vIE90aGVyd2lzZSB3ZSB3aWxsIHJlbWFpbiBpbiBjb25maWd1cmluZyBtb2RlCisJCXNlcmlhbC0+cHJvZHVjdF9pbmZvLlRpTW9kZSA9IFRJX01PREVfQ09ORklHVVJJTkc7CisKKwkvLyBTYXZlIERvd25sb2FkIFZlcnNpb24gTnVtYmVyCisJT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uLk1ham9yVmVyc2lvbiA9IFBhZ2FibGVPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb24uTWFqb3JWZXJzaW9uOworCU9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbi5NaW5vclZlcnNpb24gPSBQYWdhYmxlT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uLk1pbm9yVmVyc2lvbjsKKwlPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb24uQnVpbGROdW1iZXIJID0gUGFnYWJsZU9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbi5CdWlsZE51bWJlcjsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBEb3dubG9hZCBNb2RlICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCWlmIChzZXJpYWwtPnByb2R1Y3RfaW5mby5UaU1vZGUgPT0gVElfTU9ERV9ET1dOTE9BRCkgeworCQlzdHJ1Y3QgdGlfaTJjX2Rlc2MgKnJvbV9kZXNjOworCisJCWRiZyAoIiVzIC0gPDw8PDw8PDw8PDw8PDw8UlVOTklORyBJTiBET1dOTE9BRCBNT0RFPj4+Pj4+Pj4+PiIsIF9fRlVOQ1RJT05fXyk7CisKKwkJc3RhdHVzID0gVGlWYWxpZGF0ZUkyY0ltYWdlIChzZXJpYWwpOworCQlpZiAoc3RhdHVzKSB7CisJCQlkYmcgKCIlcyAtIDw8PDw8PDw8PDw8PDw8PERPV05MT0FEIE1PREUgLS0gQkFEIEkyQyA+Pj4+Pj4+Pj4+IiwKKwkJCSAgICAgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKwkJCisJCS8qIFZhbGlkYXRlIEhhcmR3YXJlIHZlcnNpb24gbnVtYmVyCisJCSAqIFJlYWQgTWFudWZhY3R1cmluZyBEZXNjcmlwdG9yIGZyb20gVEkgQmFzZWQgRWRnZXBvcnQKKwkJICovCisJCXRpX21hbnVmX2Rlc2MgPSBrbWFsbG9jIChzaXplb2YgKCp0aV9tYW51Zl9kZXNjKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdGlfbWFudWZfZGVzYykgeworCQkJZGV2X2VyciAoZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5LlxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCXN0YXR1cyA9IFRJUmVhZE1hbnVmRGVzY3JpcHRvciAoc2VyaWFsLCAoX191OCAqKXRpX21hbnVmX2Rlc2MpOworCQlpZiAoc3RhdHVzKSB7CisJCQlrZnJlZSAodGlfbWFudWZfZGVzYyk7CisJCQlyZXR1cm4gc3RhdHVzOworCQl9CisKKwkJLy8gQ2hlY2sgdmVyc2lvbiBudW1iZXIgb2YgSU9OIGRlc2NyaXB0b3IKKwkJaWYgKCFpZ25vcmVfY3B1X3JldiAmJiBUSV9HRVRfQ1BVX1JFVklTSU9OKHRpX21hbnVmX2Rlc2MtPkNwdVJldl9Cb2FyZFJldikgPCAyKSB7CisJCQlkYmcgKCAiJXMgLSBXcm9uZyBDUFUgUmV2ICVkIChNdXN0IGJlIDIpIiwgX19GVU5DVElPTl9fLCAKKwkJCSAgICAgVElfR0VUX0NQVV9SRVZJU0lPTih0aV9tYW51Zl9kZXNjLT5DcHVSZXZfQm9hcmRSZXYpKTsKKwkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJICAgCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJcm9tX2Rlc2MgPSBrbWFsbG9jIChzaXplb2YgKCpyb21fZGVzYyksIEdGUF9LRVJORUwpOworCQlpZiAoIXJvbV9kZXNjKSB7CisJCQlkZXZfZXJyIChkZXYsICIlcyAtIG91dCBvZiBtZW1vcnkuXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQkvLyBTZWFyY2ggZm9yIHR5cGUgMiByZWNvcmQgKGZpcm13YXJlIHJlY29yZCkKKwkJaWYgKChzdGFydF9hZGRyZXNzID0gVElHZXREZXNjcmlwdG9yQWRkcmVzcyAoc2VyaWFsLCBJMkNfREVTQ19UWVBFX0ZJUk1XQVJFX0JBU0lDLCByb21fZGVzYykpICE9IDApIHsKKwkJCXN0cnVjdCB0aV9pMmNfZmlybXdhcmVfcmVjICpmaXJtd2FyZV92ZXJzaW9uOworCQkJX191OCByZWNvcmQ7CisKKwkJCWRiZyAoIiVzIC0gRm91bmQgVHlwZSBGSVJNV0FSRSAoVHlwZSAyKSByZWNvcmQiLCBfX0ZVTkNUSU9OX18pOworCisJCQlmaXJtd2FyZV92ZXJzaW9uID0ga21hbGxvYyAoc2l6ZW9mICgqZmlybXdhcmVfdmVyc2lvbiksIEdGUF9LRVJORUwpOworCQkJaWYgKCFmaXJtd2FyZV92ZXJzaW9uKSB7CisJCQkJZGV2X2VyciAoZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5LlxuIiwgX19GVU5DVElPTl9fKTsKKwkJCQlrZnJlZSAocm9tX2Rlc2MpOworCQkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKworCQkJLy8gVmFsaWRhdGUgdmVyc2lvbiBudW1iZXIJCQkJCisJCQkvLyBSZWFkIHRoZSBkZXNjcmlwdG9yIGRhdGEKKwkJCXN0YXR1cyA9IFRJUmVhZFJvbSAoc2VyaWFsLAorCQkJCQlzdGFydF9hZGRyZXNzK3NpemVvZihzdHJ1Y3QgdGlfaTJjX2Rlc2MpLAorCQkJCQlzaXplb2Yoc3RydWN0IHRpX2kyY19maXJtd2FyZV9yZWMpLAorCQkJCQkoX191OCAqKWZpcm13YXJlX3ZlcnNpb24pOworCQkJaWYgKHN0YXR1cykgeworCQkJCWtmcmVlIChmaXJtd2FyZV92ZXJzaW9uKTsKKwkJCQlrZnJlZSAocm9tX2Rlc2MpOworCQkJCWtmcmVlICh0aV9tYW51Zl9kZXNjKTsKKwkJCQlyZXR1cm4gc3RhdHVzOworCQkJfQorCisJCQkvLyBDaGVjayB2ZXJzaW9uIG51bWJlciBvZiBkb3dubG9hZCB3aXRoIGN1cnJlbnQgdmVyc2lvbiBpbiBJMmMKKwkJCWRvd25sb2FkX2N1cl92ZXIgPSAoZmlybXdhcmVfdmVyc2lvbi0+VmVyX01ham9yIDw8IDgpICsgCisJCQkJCSAgIChmaXJtd2FyZV92ZXJzaW9uLT5WZXJfTWlub3IpOworCQkJZG93bmxvYWRfbmV3X3ZlciA9IChPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb24uTWFqb3JWZXJzaW9uIDw8IDgpICsKKwkJCQkJICAgKE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbi5NaW5vclZlcnNpb24pOworCisJCQlkYmcgKCIlcyAtID4+PkZpcm13YXJlIFZlcnNpb25zIERldmljZSAlZC4lZCAgRHJpdmVyICVkLiVkIiwKKwkJCSAgICAgX19GVU5DVElPTl9fLAorCQkJICAgICBmaXJtd2FyZV92ZXJzaW9uLT5WZXJfTWFqb3IsCisJCQkgICAgIGZpcm13YXJlX3ZlcnNpb24tPlZlcl9NaW5vciwKKwkJCSAgICAgT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uLk1ham9yVmVyc2lvbiwKKwkJCSAgICAgT3BlcmF0aW9uYWxDb2RlSW1hZ2VWZXJzaW9uLk1pbm9yVmVyc2lvbik7CisKKwkJCS8vIENoZWNrIGlmIHdlIGhhdmUgYW4gb2xkIHZlcnNpb24gaW4gdGhlIEkyQyBhbmQgdXBkYXRlIGlmIG5lY2Vzc2FyeQorCQkJaWYgKGRvd25sb2FkX2N1cl92ZXIgIT0gZG93bmxvYWRfbmV3X3ZlcikgeworCQkJCWRiZyAoIiVzIC0gVXBkYXRlIEkyQyBEb3dubG9hZCBmcm9tICVkLiVkIHRvICVkLiVkIiwKKwkJCQkgICAgIF9fRlVOQ1RJT05fXywKKwkJCQkgICAgIGZpcm13YXJlX3ZlcnNpb24tPlZlcl9NYWpvciwKKwkJCQkgICAgIGZpcm13YXJlX3ZlcnNpb24tPlZlcl9NaW5vciwKKwkJCQkgICAgIE9wZXJhdGlvbmFsQ29kZUltYWdlVmVyc2lvbi5NYWpvclZlcnNpb24sCisJCQkJICAgICBPcGVyYXRpb25hbENvZGVJbWFnZVZlcnNpb24uTWlub3JWZXJzaW9uKTsKKworCQkJCS8vIEluIG9yZGVyIHRvIHVwZGF0ZSB0aGUgSTJDIGZpcm13YXJlIHdlIG11c3QgY2hhbmdlIHRoZSB0eXBlIDIgcmVjb3JkIHRvIHR5cGUgMHhGMi4KKwkJCQkvLyBUaGlzIHdpbGwgZm9yY2UgdGhlIFVNUCB0byBjb21lIHVwIGluIEJvb3QgTW9kZS4gIFRoZW4gd2hpbGUgaW4gYm9vdCBtb2RlLCB0aGUgZHJpdmVyIAorCQkJCS8vIHdpbGwgZG93bmxvYWQgdGhlIGxhdGVzdCBmaXJtd2FyZSAocGFkZGVkIHRvIDE1LjVrKSBpbnRvIHRoZSBVTVAgcmFtLiAKKwkJCQkvLyBBbmQgZmluYWxseSB3aGVuIHRoZSBkZXZpY2UgY29tZXMgYmFjayB1cCBpbiBkb3dubG9hZCBtb2RlIHRoZSBkcml2ZXIgd2lsbCBjYXVzZSAKKwkJCQkvLyB0aGUgbmV3IGZpcm13YXJlIHRvIGJlIGNvcGllZCBmcm9tIHRoZSBVTVAgUmFtIHRvIEkyQyBhbmQgdGhlIGZpcm13YXJlIHdpbGwgdXBkYXRlCisJCQkJLy8gdGhlIHJlY29yZCB0eXBlIGZyb20gMHhmMiB0byAweDAyLgorCisJCQkJcmVjb3JkID0gSTJDX0RFU0NfVFlQRV9GSVJNV0FSRV9CTEFOSzsKKworCQkJCS8vIENoYW5nZSB0aGUgSTJDIEZpcm13YXJlIHJlY29yZCB0eXBlIHRvIDB4ZjIgdG8gdHJpZ2dlciBhbiB1cGRhdGUKKwkJCQlzdGF0dXMgPSBUSVdyaXRlUm9tIChzZXJpYWwsCisJCQkJCQkJc3RhcnRfYWRkcmVzcywKKwkJCQkJCQlzaXplb2YocmVjb3JkKSwKKwkJCQkJCQkmcmVjb3JkKTsKKwkJCQlpZiAoc3RhdHVzKSB7CisJCQkJCWtmcmVlIChmaXJtd2FyZV92ZXJzaW9uKTsKKwkJCQkJa2ZyZWUgKHJvbV9kZXNjKTsKKwkJCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJCQlyZXR1cm4gc3RhdHVzOworCQkJCX0KKworCQkJCS8vIHZlcmlmeSB0aGUgd3JpdGUgLS0gbXVzdCBkbyB0aGlzIGluIG9yZGVyIGZvciB3cml0ZSB0byAKKwkJCQkvLyBjb21wbGV0ZSBiZWZvcmUgd2UgZG8gdGhlIGhhcmR3YXJlIHJlc2V0CisJCQkJc3RhdHVzID0gVElSZWFkUm9tIChzZXJpYWwsCisJCQkJCQkJc3RhcnRfYWRkcmVzcywKKwkJCQkJCQlzaXplb2YocmVjb3JkKSwKKwkJCQkJCQkmcmVjb3JkKTsKKworCQkJCWlmIChzdGF0dXMpIHsKKwkJCQkJa2ZyZWUgKGZpcm13YXJlX3ZlcnNpb24pOworCQkJCQlrZnJlZSAocm9tX2Rlc2MpOworCQkJCQlrZnJlZSAodGlfbWFudWZfZGVzYyk7CisJCQkJCXJldHVybiBzdGF0dXM7CisJCQkJfQorCisJCQkJaWYgKHJlY29yZCAhPSBJMkNfREVTQ19UWVBFX0ZJUk1XQVJFX0JMQU5LKSB7CisJCQkJCWRldl9lcnIgKGRldiwgIiVzIC0gZXJyb3IgcmVzZXR0aW5nIGRldmljZVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCQkJa2ZyZWUgKGZpcm13YXJlX3ZlcnNpb24pOworCQkJCQlrZnJlZSAocm9tX2Rlc2MpOworCQkJCQlrZnJlZSAodGlfbWFudWZfZGVzYyk7CisJCQkJCXJldHVybiAtRU5PREVWOworCQkJCX0KKworCQkJCWRiZyAoIiVzIC0gSEFSRFdBUkUgUkVTRVQiLCBfX0ZVTkNUSU9OX18pOworCisJCQkJLy8gUmVzZXQgVU1QIC0tIEJhY2sgdG8gQk9PVCBNT0RFCisJCQkJc3RhdHVzID0gVElTZW5kVmVuZG9yUmVxdWVzdFN5bmMgKHNlcmlhbC0+c2VyaWFsLT5kZXYsCisJCQkJCQkJCVVNUENfSEFSRFdBUkVfUkVTRVQsCS8vIFJlcXVlc3QKKwkJCQkJCQkJMCwJCQkvLyB3VmFsdWUKKwkJCQkJCQkJMCwJCQkvLyB3SW5kZXgKKwkJCQkJCQkJTlVMTCwJCQkvLyBUcmFuc2ZlckJ1ZmZlcgorCQkJCQkJCQkwKTsJCQkvLyBUcmFuc2ZlckJ1ZmZlckxlbmd0aAorCisJCQkJZGJnICggIiVzIC0gSEFSRFdBUkUgUkVTRVQgcmV0dXJuICVkIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCisJCQkJLyogcmV0dXJuIGFuIGVycm9yIG9uIHB1cnBvc2UuICovCisJCQkJa2ZyZWUgKGZpcm13YXJlX3ZlcnNpb24pOworCQkJCWtmcmVlIChyb21fZGVzYyk7CisJCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJCXJldHVybiAtRU5PREVWOworCQkJfQorCQkJa2ZyZWUgKGZpcm13YXJlX3ZlcnNpb24pOworCQl9CisJCS8vIFNlYXJjaCBmb3IgdHlwZSAweEYyIHJlY29yZCAoZmlybXdhcmUgYmxhbmsgcmVjb3JkKQorCQllbHNlIGlmICgoc3RhcnRfYWRkcmVzcyA9IFRJR2V0RGVzY3JpcHRvckFkZHJlc3MgKHNlcmlhbCwgSTJDX0RFU0NfVFlQRV9GSVJNV0FSRV9CTEFOSywgcm9tX2Rlc2MpKSAhPSAwKSB7CisJCQkjZGVmaW5lIEhFQURFUl9TSVpFCShzaXplb2Yoc3RydWN0IHRpX2kyY19kZXNjKSArIHNpemVvZihzdHJ1Y3QgdGlfaTJjX2Zpcm13YXJlX3JlYykpCisJCQlfX3U4ICpoZWFkZXI7CisJCQlfX3U4ICp2aGVhZGVyOworCisJCQloZWFkZXIgID0ga21hbGxvYyAoSEVBREVSX1NJWkUsIEdGUF9LRVJORUwpOworCQkJaWYgKCFoZWFkZXIpIHsKKwkJCQlkZXZfZXJyIChkZXYsICIlcyAtIG91dCBvZiBtZW1vcnkuXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCWtmcmVlIChyb21fZGVzYyk7CisJCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQkJCQorCQkJdmhlYWRlciA9IGttYWxsb2MgKEhFQURFUl9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghdmhlYWRlcikgeworCQkJCWRldl9lcnIgKGRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJa2ZyZWUgKGhlYWRlcik7CisJCQkJa2ZyZWUgKHJvbV9kZXNjKTsKKwkJCQlrZnJlZSAodGlfbWFudWZfZGVzYyk7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCQkKKwkJCWRiZyAoIiVzIC0gRm91bmQgVHlwZSBCTEFOSyBGSVJNV0FSRSAoVHlwZSBGMikgcmVjb3JkIiwgX19GVU5DVElPTl9fKTsKKworCQkJLy8gSW4gb3JkZXIgdG8gdXBkYXRlIHRoZSBJMkMgZmlybXdhcmUgd2UgbXVzdCBjaGFuZ2UgdGhlIHR5cGUgMiByZWNvcmQgdG8gdHlwZSAweEYyLgorCQkJLy8gVGhpcyB3aWxsIGZvcmNlIHRoZSBVTVAgdG8gY29tZSB1cCBpbiBCb290IE1vZGUuICBUaGVuIHdoaWxlIGluIGJvb3QgbW9kZSwgdGhlIGRyaXZlciAKKwkJCS8vIHdpbGwgZG93bmxvYWQgdGhlIGxhdGVzdCBmaXJtd2FyZSAocGFkZGVkIHRvIDE1LjVrKSBpbnRvIHRoZSBVTVAgcmFtLiAKKwkJCS8vIEFuZCBmaW5hbGx5IHdoZW4gdGhlIGRldmljZSBjb21lcyBiYWNrIHVwIGluIGRvd25sb2FkIG1vZGUgdGhlIGRyaXZlciB3aWxsIGNhdXNlIAorCQkJLy8gdGhlIG5ldyBmaXJtd2FyZSB0byBiZSBjb3BpZWQgZnJvbSB0aGUgVU1QIFJhbSB0byBJMkMgYW5kIHRoZSBmaXJtd2FyZSB3aWxsIHVwZGF0ZQorCQkJLy8gdGhlIHJlY29yZCB0eXBlIGZyb20gMHhmMiB0byAweDAyLgorCQkJc3RhdHVzID0gQnVpbGRJMkNGaXJtd2FyZUhlYWRlcihoZWFkZXIsIGRldik7CisJCQlpZiAoc3RhdHVzKSB7CisJCQkJa2ZyZWUgKHZoZWFkZXIpOworCQkJCWtmcmVlIChoZWFkZXIpOworCQkJCWtmcmVlIChyb21fZGVzYyk7CisJCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJCXJldHVybiBzdGF0dXM7CisJCQl9CisKKwkJCS8vIFVwZGF0ZSBJMkMgd2l0aCB0eXBlIDB4ZjIgcmVjb3JkIHdpdGggY29ycmVjdCBzaXplIGFuZCBjaGVja3N1bQorCQkJc3RhdHVzID0gVElXcml0ZVJvbSAoc2VyaWFsLAorCQkJCQkJc3RhcnRfYWRkcmVzcywKKwkJCQkJCUhFQURFUl9TSVpFLAorCQkJCQkJaGVhZGVyKTsKKwkJCWlmIChzdGF0dXMpIHsKKwkJCQlrZnJlZSAodmhlYWRlcik7CisJCQkJa2ZyZWUgKGhlYWRlcik7CisJCQkJa2ZyZWUgKHJvbV9kZXNjKTsKKwkJCQlrZnJlZSAodGlfbWFudWZfZGVzYyk7CisJCQkJcmV0dXJuIHN0YXR1czsKKwkJCX0KKworCQkJLy8gdmVyaWZ5IHRoZSB3cml0ZSAtLSBtdXN0IGRvIHRoaXMgaW4gb3JkZXIgZm9yIHdyaXRlIHRvIAorCQkJLy8gY29tcGxldGUgYmVmb3JlIHdlIGRvIHRoZSBoYXJkd2FyZSByZXNldAorCQkJc3RhdHVzID0gVElSZWFkUm9tIChzZXJpYWwsCisJCQkJCQlzdGFydF9hZGRyZXNzLAorCQkJCQkJSEVBREVSX1NJWkUsCisJCQkJCQl2aGVhZGVyKTsKKworCQkJaWYgKHN0YXR1cykgeworCQkJCWRiZyAoIiVzIC0gY2FuJ3QgcmVhZCBoZWFkZXIgYmFjayIsIF9fRlVOQ1RJT05fXyk7CisJCQkJa2ZyZWUgKHZoZWFkZXIpOworCQkJCWtmcmVlIChoZWFkZXIpOworCQkJCWtmcmVlIChyb21fZGVzYyk7CisJCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJCXJldHVybiBzdGF0dXM7CisJCQl9CisJCQlpZiAobWVtY21wKHZoZWFkZXIsIGhlYWRlciwgSEVBREVSX1NJWkUpKSB7CisJCQkJZGJnICgiJXMgLSB3cml0ZSBkb3dubG9hZCByZWNvcmQgZmFpbGVkIiwgX19GVU5DVElPTl9fKTsKKwkJCQlrZnJlZSAodmhlYWRlcik7CisJCQkJa2ZyZWUgKGhlYWRlcik7CisJCQkJa2ZyZWUgKHJvbV9kZXNjKTsKKwkJCQlrZnJlZSAodGlfbWFudWZfZGVzYyk7CisJCQkJcmV0dXJuIHN0YXR1czsKKwkJCX0KKworCQkJa2ZyZWUgKHZoZWFkZXIpOworCQkJa2ZyZWUgKGhlYWRlcik7CisKKwkJCWRiZyAoIiVzIC0gU3RhcnQgZmlybXdhcmUgdXBkYXRlIiwgX19GVU5DVElPTl9fKTsKKworCQkJLy8gVGVsbCBmaXJtd2FyZSB0byBjb3B5IGRvd25sb2FkIGltYWdlIGludG8gSTJDIAorCQkJc3RhdHVzID0gVElTZW5kVmVuZG9yUmVxdWVzdFN5bmMgKHNlcmlhbC0+c2VyaWFsLT5kZXYsCisJCQkJCQlVTVBDX0NPUFlfRE5MRF9UT19JMkMsCS8vIFJlcXVlc3QKKwkJCQkJCTAsCQkJLy8gd1ZhbHVlIAorCQkJCQkJMCwJCQkvLyB3SW5kZXgKKwkJCQkJCU5VTEwsCQkJLy8gVHJhbnNmZXJCdWZmZXIKKwkJCQkJCTApOwkJCS8vIFRyYW5zZmVyQnVmZmVyTGVuZ3RoCisKKwkJICAJZGJnICgiJXMgLSBVcGRhdGUgY29tcGxldGUgMHgleCIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJCWlmIChzdGF0dXMpIHsKKwkJCQlkZXZfZXJyIChkZXYsICIlcyAtIFVNUENfQ09QWV9ETkxEX1RPX0kyQyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJa2ZyZWUgKHJvbV9kZXNjKTsKKwkJCQlrZnJlZSAodGlfbWFudWZfZGVzYyk7CisJCQkJcmV0dXJuIHN0YXR1czsKKwkJCX0KKwkJfQorCisJCS8vIFRoZSBkZXZpY2UgaXMgcnVubmluZyB0aGUgZG93bmxvYWQgY29kZQorCQlrZnJlZSAocm9tX2Rlc2MpOworCQlrZnJlZSAodGlfbWFudWZfZGVzYyk7CisJCXJldHVybiAwOworCX0KKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBCb290IE1vZGUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJZGJnICgiJXMgLSA8PDw8PDw8PDw8PDw8PDxSVU5OSU5HIElOIEJPT1QgTU9ERT4+Pj4+Pj4+Pj4+Pj4+PiIsCisJICAgICBfX0ZVTkNUSU9OX18pOworCisJLy8gQ29uZmlndXJlIHRoZSBUSSBkZXZpY2Ugc28gd2UgY2FuIHVzZSB0aGUgQlVMSyBwaXBlcyBmb3IgZG93bmxvYWQKKwlzdGF0dXMgPSBUSUNvbmZpZ3VyZUJvb3REZXZpY2UgKHNlcmlhbC0+c2VyaWFsLT5kZXYpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAobGUxNl90b19jcHUoc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgIT0gVVNCX1ZFTkRPUl9JRF9JT04pIHsKKwkJZGJnICgiJXMgLSBWSUQgPSAweCV4IiwgX19GVU5DVElPTl9fLAorCQkgICAgIGxlMTZfdG9fY3B1KHNlcmlhbC0+c2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpKTsKKwkJc2VyaWFsLT5USV9JMkNfVHlwZSA9IERUS19BRERSX1NQQUNFX0kyQ19UWVBFX0lJOworCQlnb3RvIFN0YXlJbkJvb3RNb2RlOworCX0KKworCS8vIFdlIGhhdmUgYW4gSU9OIGRldmljZSAoSTJjIE11c3QgYmUgcHJvZ3JhbW1lZCkKKwkvLyBEZXRlcm1pbmUgSTJDIGltYWdlIHR5cGUKKwlpZiAoVElHZXRJMmNUeXBlSW5Cb290TW9kZShzZXJpYWwpKSB7CisJCWdvdG8gU3RheUluQm9vdE1vZGU7CisJfQorCisJLy8gUmVnaXN0cnkgdmFyaWFibGUgc2V0PworCWlmIChUSVN0YXlJbkJvb3RNb2RlKSB7CisJCWRiZyAoIiVzIC0gVElTdGF5SW5Cb290TW9kZSIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gU3RheUluQm9vdE1vZGU7CisJfQorCisJLy8gQ2hlY2sgZm9yIElPTiBWZW5kb3IgSUQgYW5kIHRoYXQgdGhlIEkyQyBpcyB2YWxpZAorCWlmICghVGlWYWxpZGF0ZUkyY0ltYWdlKHNlcmlhbCkpIHsKKwkJc3RydWN0IHRpX2kyY19pbWFnZV9oZWFkZXIgKmhlYWRlcjsKKwkJaW50IGk7CisJCV9fdTggY3MgPSAwOworCQlfX3U4ICpidWZmZXI7CisJCWludCBidWZmZXJfc2l6ZTsKKworCQkvKiBWYWxpZGF0ZSBIYXJkd2FyZSB2ZXJzaW9uIG51bWJlcgorCQkgKiBSZWFkIE1hbnVmYWN0dXJpbmcgRGVzY3JpcHRvciBmcm9tIFRJIEJhc2VkIEVkZ2Vwb3J0CisJCSAqLworCQl0aV9tYW51Zl9kZXNjID0ga21hbGxvYyAoc2l6ZW9mICgqdGlfbWFudWZfZGVzYyksIEdGUF9LRVJORUwpOworCQlpZiAoIXRpX21hbnVmX2Rlc2MpIHsKKwkJCWRldl9lcnIgKGRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlzdGF0dXMgPSBUSVJlYWRNYW51ZkRlc2NyaXB0b3IgKHNlcmlhbCwgKF9fdTggKil0aV9tYW51Zl9kZXNjKTsKKwkJaWYgKHN0YXR1cykgeworCQkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCQkJZ290byBTdGF5SW5Cb290TW9kZTsKKwkJfQorCisJCS8vIENoZWNrIGZvciB2ZXJzaW9uIDIKKwkJaWYgKCFpZ25vcmVfY3B1X3JldiAmJiBUSV9HRVRfQ1BVX1JFVklTSU9OKHRpX21hbnVmX2Rlc2MtPkNwdVJldl9Cb2FyZFJldikgPCAyKSB7CisJCQlkYmcgKCIlcyAtIFdyb25nIENQVSBSZXYgJWQgKE11c3QgYmUgMikiLCBfX0ZVTkNUSU9OX18sCisJCQkgICAgIFRJX0dFVF9DUFVfUkVWSVNJT04odGlfbWFudWZfZGVzYy0+Q3B1UmV2X0JvYXJkUmV2KSk7CisJCQlrZnJlZSAodGlfbWFudWZfZGVzYyk7CisJCQlnb3RvIFN0YXlJbkJvb3RNb2RlOworCQl9CisKKwkJa2ZyZWUgKHRpX21hbnVmX2Rlc2MpOworCisJCS8vIEluIG9yZGVyIHRvIHVwZGF0ZSB0aGUgSTJDIGZpcm13YXJlIHdlIG11c3QgY2hhbmdlIHRoZSB0eXBlIDIgcmVjb3JkIHRvIHR5cGUgMHhGMi4KKwkJLy8gVGhpcyB3aWxsIGZvcmNlIHRoZSBVTVAgdG8gY29tZSB1cCBpbiBCb290IE1vZGUuICBUaGVuIHdoaWxlIGluIGJvb3QgbW9kZSwgdGhlIGRyaXZlciAKKwkJLy8gd2lsbCBkb3dubG9hZCB0aGUgbGF0ZXN0IGZpcm13YXJlIChwYWRkZWQgdG8gMTUuNWspIGludG8gdGhlIFVNUCByYW0uIAorCQkvLyBBbmQgZmluYWxseSB3aGVuIHRoZSBkZXZpY2UgY29tZXMgYmFjayB1cCBpbiBkb3dubG9hZCBtb2RlIHRoZSBkcml2ZXIgd2lsbCBjYXVzZSAKKwkJLy8gdGhlIG5ldyBmaXJtd2FyZSB0byBiZSBjb3BpZWQgZnJvbSB0aGUgVU1QIFJhbSB0byBJMkMgYW5kIHRoZSBmaXJtd2FyZSB3aWxsIHVwZGF0ZQorCQkvLyB0aGUgcmVjb3JkIHR5cGUgZnJvbSAweGYyIHRvIDB4MDIuCisJCQorCQkvKgorCQkgKiBEbyB3ZSByZWFsbHkgaGF2ZSB0byBjb3B5IHRoZSB3aG9sZSBmaXJtd2FyZSBpbWFnZSwKKwkJICogb3IgY291bGQgd2UgZG8gdGhpcyBpbiBwbGFjZSEKKwkJICovCisKKwkJLy8gQWxsb2NhdGUgYSAxNS41ayBidWZmZXIgKyAzIGJ5dGUgaGVhZGVyCisJCWJ1ZmZlcl9zaXplID0gKCgoMTAyNCAqIDE2KSAtIDUxMikgKyBzaXplb2Yoc3RydWN0IHRpX2kyY19pbWFnZV9oZWFkZXIpKTsKKwkJYnVmZmVyID0ga21hbGxvYyAoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIWJ1ZmZlcikgeworCQkJZGV2X2VyciAoZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJCisJCS8vIEluaXRpYWxpemUgdGhlIGJ1ZmZlciB0byAweGZmIChwYWQgdGhlIGJ1ZmZlcikKKwkJbWVtc2V0IChidWZmZXIsIDB4ZmYsIGJ1ZmZlcl9zaXplKTsKKworCQltZW1jcHkgKGJ1ZmZlciwgJlBhZ2FibGVPcGVyYXRpb25hbENvZGVJbWFnZVswXSwgUGFnYWJsZU9wZXJhdGlvbmFsQ29kZVNpemUpOworCisJCWZvcihpID0gc2l6ZW9mKHN0cnVjdCB0aV9pMmNfaW1hZ2VfaGVhZGVyKTsgaSA8IGJ1ZmZlcl9zaXplOyBpKyspIHsKKwkJCWNzID0gKF9fdTgpKGNzICsgYnVmZmVyW2ldKTsKKwkJfQorCQkKKwkJaGVhZGVyID0gKHN0cnVjdCB0aV9pMmNfaW1hZ2VfaGVhZGVyICopYnVmZmVyOworCQkKKwkJLy8gdXBkYXRlIGxlbmd0aCBhbmQgY2hlY2tzdW0gYWZ0ZXIgcGFkZGluZworCQloZWFkZXItPkxlbmd0aCAJID0gY3B1X3RvX2xlMTYoKF9fdTE2KShidWZmZXJfc2l6ZSAtIHNpemVvZihzdHJ1Y3QgdGlfaTJjX2ltYWdlX2hlYWRlcikpKTsKKwkJaGVhZGVyLT5DaGVja1N1bSA9IGNzOworCisJCS8vIERvd25sb2FkIHRoZSBvcGVyYXRpb25hbCBjb2RlIAorCQlkYmcgKCIlcyAtIERvd25sb2FkaW5nIG9wZXJhdGlvbmFsIGNvZGUgaW1hZ2UgKFRJIFVNUCkiLCBfX0ZVTkNUSU9OX18pOworCQlzdGF0dXMgPSBUSURvd25sb2FkQ29kZUltYWdlIChzZXJpYWwsIGJ1ZmZlciwgYnVmZmVyX3NpemUpOworCisJCWtmcmVlIChidWZmZXIpOworCisJCWlmIChzdGF0dXMpIHsKKwkgIAkJZGJnICgiJXMgLSBFcnJvciBkb3dubG9hZGluZyBvcGVyYXRpb25hbCBjb2RlIGltYWdlIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKworCQkvLyBEZXZpY2Ugd2lsbCByZWJvb3QKKwkJc2VyaWFsLT5wcm9kdWN0X2luZm8uVGlNb2RlID0gVElfTU9ERV9UUkFOU0lUSU9OSU5HOworCisgIAkJZGJnICgiJXMgLSBEb3dubG9hZCBzdWNjZXNzZnVsIC0tIERldmljZSByZWJvb3RpbmcuLi4iLCBfX0ZVTkNUSU9OX18pOworCisJCS8qIHJldHVybiBhbiBlcnJvciBvbiBwdXJwb3NlICovCisJCXJldHVybiAtRU5PREVWOworCX0KKworU3RheUluQm9vdE1vZGU6CisJLy8gRXByb20gaXMgaW52YWxpZCBvciBibGFuayBzdGF5IGluIGJvb3QgbW9kZQorCWRiZyAoIiVzIC0gPDw8PDw8PDw8PDw8PDw8U1RBWUlORyBJTiBCT09UIE1PREU+Pj4+Pj4+Pj4+Pj4iLCBfX0ZVTkNUSU9OX18pOworCXNlcmlhbC0+cHJvZHVjdF9pbmZvLlRpTW9kZSA9IFRJX01PREVfQk9PVDsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgVElTZXREdHIgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICpwb3J0KQoreworCWludCBwb3J0X251bWJlciA9IHBvcnQtPnBvcnQtPm51bWJlciAtIHBvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3I7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisJcG9ydC0+c2hhZG93X21jciB8PSBNQ1JfRFRSOworCisJcmV0dXJuIFRJV3JpdGVDb21tYW5kU3luYyAocG9ydC0+cG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJVU1QQ19TRVRfQ0xSX0RUUiwKKwkJCQkoX191OCkoVU1QTV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLAorCQkJCTEsCS8qIHNldCAqLworCQkJCU5VTEwsCisJCQkJMCk7Cit9CisKK3N0YXRpYyBpbnQgVElDbGVhckR0ciAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKnBvcnQpCit7CisJaW50IHBvcnRfbnVtYmVyID0gcG9ydC0+cG9ydC0+bnVtYmVyIC0gcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vcjsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKwlwb3J0LT5zaGFkb3dfbWNyICY9IH5NQ1JfRFRSOworCisJcmV0dXJuIFRJV3JpdGVDb21tYW5kU3luYyAocG9ydC0+cG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJVU1QQ19TRVRfQ0xSX0RUUiwKKwkJCQkoX191OCkoVU1QTV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLAorCQkJCTAsCS8qIGNsZWFyICovCisJCQkJTlVMTCwKKwkJCQkwKTsKK30KKworc3RhdGljIGludCBUSVNldFJ0cyAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKnBvcnQpCit7CisJaW50IHBvcnRfbnVtYmVyID0gcG9ydC0+cG9ydC0+bnVtYmVyIC0gcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vcjsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKwlwb3J0LT5zaGFkb3dfbWNyIHw9IE1DUl9SVFM7CisKKwlyZXR1cm4gVElXcml0ZUNvbW1hbmRTeW5jIChwb3J0LT5wb3J0LT5zZXJpYWwtPmRldiwKKwkJCQlVTVBDX1NFVF9DTFJfUlRTLAorCQkJCShfX3U4KShVTVBNX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksCisJCQkJMSwJLyogc2V0ICovCisJCQkJTlVMTCwKKwkJCQkwKTsKK30KKworc3RhdGljIGludCBUSUNsZWFyUnRzIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqcG9ydCkKK3sKKwlpbnQgcG9ydF9udW1iZXIgPSBwb3J0LT5wb3J0LT5udW1iZXIgLSBwb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCXBvcnQtPnNoYWRvd19tY3IgJj0gfk1DUl9SVFM7CisKKwlyZXR1cm4gVElXcml0ZUNvbW1hbmRTeW5jIChwb3J0LT5wb3J0LT5zZXJpYWwtPmRldiwKKwkJCQlVTVBDX1NFVF9DTFJfUlRTLAorCQkJCShfX3U4KShVTVBNX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksCisJCQkJMCwJLyogY2xlYXIgKi8KKwkJCQlOVUxMLAorCQkJCTApOworfQorCitzdGF0aWMgaW50IFRJU2V0TG9vcEJhY2sgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICpwb3J0KQoreworCWludCBwb3J0X251bWJlciA9IHBvcnQtPnBvcnQtPm51bWJlciAtIHBvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3I7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlyZXR1cm4gVElXcml0ZUNvbW1hbmRTeW5jIChwb3J0LT5wb3J0LT5zZXJpYWwtPmRldiwKKwkJCQlVTVBDX1NFVF9DTFJfTE9PUEJBQ0ssCisJCQkJKF9fdTgpKFVNUE1fVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwKKwkJCQkxLAkvKiBzZXQgKi8KKwkJCQlOVUxMLAorCQkJCTApOworfQorCitzdGF0aWMgaW50IFRJQ2xlYXJMb29wQmFjayAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKnBvcnQpCit7CisJaW50IHBvcnRfbnVtYmVyID0gcG9ydC0+cG9ydC0+bnVtYmVyIC0gcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vcjsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXJldHVybiBUSVdyaXRlQ29tbWFuZFN5bmMgKHBvcnQtPnBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCVVNUENfU0VUX0NMUl9MT09QQkFDSywKKwkJCQkoX191OCkoVU1QTV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLAorCQkJCTAsCS8qIGNsZWFyICovCisJCQkJTlVMTCwKKwkJCQkwKTsKK30KKworc3RhdGljIGludCBUSVNldEJyZWFrIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqcG9ydCkKK3sKKwlpbnQgcG9ydF9udW1iZXIgPSBwb3J0LT5wb3J0LT5udW1iZXIgLSBwb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJcmV0dXJuIFRJV3JpdGVDb21tYW5kU3luYyAocG9ydC0+cG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJVU1QQ19TRVRfQ0xSX0JSRUFLLAorCQkJCShfX3U4KShVTVBNX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksCisJCQkJMSwJLyogc2V0ICovCisJCQkJTlVMTCwKKwkJCQkwKTsKK30KKworc3RhdGljIGludCBUSUNsZWFyQnJlYWsgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICpwb3J0KQoreworCWludCBwb3J0X251bWJlciA9IHBvcnQtPnBvcnQtPm51bWJlciAtIHBvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3I7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlyZXR1cm4gVElXcml0ZUNvbW1hbmRTeW5jIChwb3J0LT5wb3J0LT5zZXJpYWwtPmRldiwKKwkJCQlVTVBDX1NFVF9DTFJfQlJFQUssCisJCQkJKF9fdTgpKFVNUE1fVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwKKwkJCQkwLAkvKiBjbGVhciAqLworCQkJCU5VTEwsCisJCQkJMCk7Cit9CisKK3N0YXRpYyBpbnQgVElSZXN0b3JlTUNSIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqcG9ydCwgX191OCBtY3IpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlkYmcgKCIlcyAtICV4IiwgX19GVU5DVElPTl9fLCBtY3IpOworCisJaWYgKG1jciAmIE1DUl9EVFIpCisJCXN0YXR1cyA9IFRJU2V0RHRyIChwb3J0KTsKKwllbHNlCisJCXN0YXR1cyA9IFRJQ2xlYXJEdHIgKHBvcnQpOworCisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCWlmIChtY3IgJiBNQ1JfUlRTKQorCQlzdGF0dXMgPSBUSVNldFJ0cyAocG9ydCk7CisJZWxzZQorCQlzdGF0dXMgPSBUSUNsZWFyUnRzIChwb3J0KTsKKworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAobWNyICYgTUNSX0xPT1BCQUNLKQorCQlzdGF0dXMgPSBUSVNldExvb3BCYWNrIChwb3J0KTsKKwllbHNlCisJCXN0YXR1cyA9IFRJQ2xlYXJMb29wQmFjayAocG9ydCk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisKKworLyogQ29udmVydCBUSSBMU1IgdG8gc3RhbmRhcmQgVUFSVCBmbGFncyAqLworc3RhdGljIF9fdTggTWFwTGluZVN0YXR1cyAoX191OCB0aV9sc3IpCit7CisJX191OCBsc3IgPSAwOworCisjZGVmaW5lIE1BUF9GTEFHKGZsYWdVbXAsIGZsYWdVYXJ0KSAgICBcCisJaWYgKHRpX2xzciAmIGZsYWdVbXApIFwKKwkJbHNyIHw9IGZsYWdVYXJ0OworCisJTUFQX0ZMQUcoVU1QX1VBUlRfTFNSX09WX01BU0ssIExTUl9PVkVSX0VSUikJLyogb3ZlcnJ1biAqLworCU1BUF9GTEFHKFVNUF9VQVJUX0xTUl9QRV9NQVNLLCBMU1JfUEFSX0VSUikJLyogcGFyaXR5IGVycm9yICovCisJTUFQX0ZMQUcoVU1QX1VBUlRfTFNSX0ZFX01BU0ssIExTUl9GUk1fRVJSKQkvKiBmcmFtaW5nIGVycm9yICovCisJTUFQX0ZMQUcoVU1QX1VBUlRfTFNSX0JSX01BU0ssIExTUl9CUkVBSykJLyogYnJlYWsgZGV0ZWN0ZWQgKi8KKwlNQVBfRkxBRyhVTVBfVUFSVF9MU1JfUlhfTUFTSywgTFNSX1JYX0FWQUlMKQkvKiByZWNlaXZlIGRhdGEgYXZhaWxhYmxlICovCisJTUFQX0ZMQUcoVU1QX1VBUlRfTFNSX1RYX01BU0ssIExTUl9UWF9FTVBUWSkJLyogdHJhbnNtaXQgaG9sZGluZyByZWdpc3RlciBlbXB0eSAqLworCisjdW5kZWYgTUFQX0ZMQUcKKworCXJldHVybiBsc3I7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9uZXdfbXNyIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBfX3U4IG1zcikKK3sKKwlzdHJ1Y3QgYXN5bmNfaWNvdW50ICppY291bnQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKworCWRiZyAoIiVzIC0gJTAyeCIsIF9fRlVOQ1RJT05fXywgbXNyKTsKKworCWlmIChtc3IgJiAoRURHRVBPUlRfTVNSX0RFTFRBX0NUUyB8IEVER0VQT1JUX01TUl9ERUxUQV9EU1IgfCBFREdFUE9SVF9NU1JfREVMVEFfUkkgfCBFREdFUE9SVF9NU1JfREVMVEFfQ0QpKSB7CisJCWljb3VudCA9ICZlZGdlX3BvcnQtPmljb3VudDsKKworCQkvKiB1cGRhdGUgaW5wdXQgbGluZSBjb3VudGVycyAqLworCQlpZiAobXNyICYgRURHRVBPUlRfTVNSX0RFTFRBX0NUUykKKwkJCWljb3VudC0+Y3RzKys7CisJCWlmIChtc3IgJiBFREdFUE9SVF9NU1JfREVMVEFfRFNSKQorCQkJaWNvdW50LT5kc3IrKzsKKwkJaWYgKG1zciAmIEVER0VQT1JUX01TUl9ERUxUQV9DRCkKKwkJCWljb3VudC0+ZGNkKys7CisJCWlmIChtc3IgJiBFREdFUE9SVF9NU1JfREVMVEFfUkkpCisJCQlpY291bnQtPnJuZysrOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUgKCZlZGdlX3BvcnQtPmRlbHRhX21zcl93YWl0KTsKKwl9CisKKwkvKiBTYXZlIHRoZSBuZXcgbW9kZW0gc3RhdHVzICovCisJZWRnZV9wb3J0LT5zaGFkb3dfbXNyID0gbXNyICYgMHhmMDsKKworCXR0eSA9IGVkZ2VfcG9ydC0+cG9ydC0+dHR5OworCS8qIGhhbmRsZSBDVFMgZmxvdyBjb250cm9sICovCisJaWYgKHR0eSAmJiBDX0NSVFNDVFModHR5KSkgeworCQlpZiAobXNyICYgRURHRVBPUlRfTVNSX0NUUykgeworCQkJdHR5LT5od19zdG9wcGVkID0gMDsKKwkJCXR0eV93YWtldXAodHR5KTsKKwkJfSBlbHNlIHsKKwkJCXR0eS0+aHdfc3RvcHBlZCA9IDE7CisJCX0KKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9uZXdfbHNyIChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0LCBpbnQgbHNyX2RhdGEsIF9fdTggbHNyLCBfX3U4IGRhdGEpCit7CisJc3RydWN0IGFzeW5jX2ljb3VudCAqaWNvdW50OworCV9fdTggbmV3X2xzciA9IChfX3U4KShsc3IgJiAoX191OCkoTFNSX09WRVJfRVJSIHwgTFNSX1BBUl9FUlIgfCBMU1JfRlJNX0VSUiB8IExTUl9CUkVBSykpOworCisJZGJnICgiJXMgLSAlMDJ4IiwgX19GVU5DVElPTl9fLCBuZXdfbHNyKTsKKworCWVkZ2VfcG9ydC0+c2hhZG93X2xzciA9IGxzcjsKKworCWlmIChuZXdfbHNyICYgTFNSX0JSRUFLKSB7CisJCS8qCisJCSAqIFBhcml0eSBhbmQgRnJhbWluZyBlcnJvcnMgb25seSBjb3VudCBpZiB0aGV5CisJCSAqIG9jY3VyIGV4Y2x1c2l2ZSBvZiBhIGJyZWFrIGJlaW5nIHJlY2VpdmVkLgorCQkgKi8KKwkJbmV3X2xzciAmPSAoX191OCkoTFNSX09WRVJfRVJSIHwgTFNSX0JSRUFLKTsKKwl9CisKKwkvKiBQbGFjZSBMU1IgZGF0YSBieXRlIGludG8gUnggYnVmZmVyICovCisJaWYgKGxzcl9kYXRhICYmIGVkZ2VfcG9ydC0+cG9ydC0+dHR5KQorCQllZGdlX3R0eV9yZWN2KCZlZGdlX3BvcnQtPnBvcnQtPmRldiwgZWRnZV9wb3J0LT5wb3J0LT50dHksICZkYXRhLCAxKTsKKworCS8qIHVwZGF0ZSBpbnB1dCBsaW5lIGNvdW50ZXJzICovCisJaWNvdW50ID0gJmVkZ2VfcG9ydC0+aWNvdW50OworCWlmIChuZXdfbHNyICYgTFNSX0JSRUFLKQorCQlpY291bnQtPmJyaysrOworCWlmIChuZXdfbHNyICYgTFNSX09WRVJfRVJSKQorCQlpY291bnQtPm92ZXJydW4rKzsKKwlpZiAobmV3X2xzciAmIExTUl9QQVJfRVJSKQorCQlpY291bnQtPnBhcml0eSsrOworCWlmIChuZXdfbHNyICYgTFNSX0ZSTV9FUlIpCisJCWljb3VudC0+ZnJhbWUrKzsKK30KKworCitzdGF0aWMgdm9pZCBlZGdlX2ludGVycnVwdF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICplZGdlX3NlcmlhbCA9IChzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IGxlbmd0aCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwlpbnQgcG9ydF9udW1iZXI7CisJaW50IGZ1bmN0aW9uOworCWludCBzdGF0dXM7CisJX191OCBsc3I7CisJX191OCBtc3I7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCWlmICghbGVuZ3RoKSB7CisJCWRiZyAoIiVzIC0gbm8gZGF0YSBpbiB1cmIiLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXQ7CisJfQorCQkKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZlZGdlX3NlcmlhbC0+c2VyaWFsLT5kZXYtPmRldiwgX19GVU5DVElPTl9fLCBsZW5ndGgsIGRhdGEpOworCQkKKwlpZiAobGVuZ3RoICE9IDIpIHsKKwkJZGJnICgiJXMgLSBleHBlY3RpbmcgcGFja2V0IG9mIHNpemUgMiwgZ290ICVkIiwgX19GVU5DVElPTl9fLCBsZW5ndGgpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcG9ydF9udW1iZXIgPSBUSVVNUF9HRVRfUE9SVF9GUk9NX0NPREUgKGRhdGFbMF0pOworCWZ1bmN0aW9uICAgID0gVElVTVBfR0VUX0ZVTkNfRlJPTV9DT0RFIChkYXRhWzBdKTsKKwlkYmcgKCIlcyAtIHBvcnRfbnVtYmVyICVkLCBmdW5jdGlvbiAlZCwgaW5mbyAweCV4IiwKKwkgICAgIF9fRlVOQ1RJT05fXywgcG9ydF9udW1iZXIsIGZ1bmN0aW9uLCBkYXRhWzFdKTsKKwlwb3J0ID0gZWRnZV9zZXJpYWwtPnNlcmlhbC0+cG9ydFtwb3J0X251bWJlcl07CisJZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWlmICghZWRnZV9wb3J0KSB7CisJCWRiZyAoIiVzIC0gZWRnZV9wb3J0IG5vdCBmb3VuZCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJc3dpdGNoIChmdW5jdGlvbikgeworCWNhc2UgVElVTVBfSU5URVJSVVBUX0NPREVfTFNSOgorCQlsc3IgPSBNYXBMaW5lU3RhdHVzKGRhdGFbMV0pOworCQlpZiAobHNyICYgVU1QX1VBUlRfTFNSX0RBVEFfTUFTSykgeworCQkJLyogU2F2ZSB0aGUgTFNSIGV2ZW50IGZvciBidWxrIHJlYWQgY29tcGxldGlvbiByb3V0aW5lICovCisJCQlkYmcgKCIlcyAtIExTUiBFdmVudCBQb3J0ICV1IExTUiBTdGF0dXMgPSAlMDJ4IiwKKwkJCSAgICAgX19GVU5DVElPTl9fLCBwb3J0X251bWJlciwgbHNyKTsKKwkJCWVkZ2VfcG9ydC0+bHNyX2V2ZW50ID0gMTsKKwkJCWVkZ2VfcG9ydC0+bHNyX21hc2sgPSBsc3I7CisJCX0gZWxzZSB7CisJCQlkYmcgKCIlcyAtID09PT09IFBvcnQgJWQgTFNSIFN0YXR1cyA9ICUwMnggPT09PT09IiwKKwkJCSAgICAgX19GVU5DVElPTl9fLCBwb3J0X251bWJlciwgbHNyKTsKKwkJCWhhbmRsZV9uZXdfbHNyIChlZGdlX3BvcnQsIDAsIGxzciwgMCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFRJVU1QX0lOVEVSUlVQVF9DT0RFX01TUjoJLy8gTVNSCisJCS8qIENvcHkgTVNSIGZyb20gVU1QICovCisJCW1zciA9IGRhdGFbMV07CisJCWRiZyAoIiVzIC0gPT09PT0gUG9ydCAldSBNU1IgU3RhdHVzID0gJTAyeCA9PT09PT1cbiIsCisJCSAgICAgX19GVU5DVElPTl9fLCBwb3J0X251bWJlciwgbXNyKTsKKwkJaGFuZGxlX25ld19tc3IgKGVkZ2VfcG9ydCwgbXNyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyICgmdXJiLT5kZXYtPmRldiwgIiVzIC0gVW5rbm93biBJbnRlcnJ1cHQgY29kZSBmcm9tIFVNUCAleFxuIiwKKwkJCSBfX0ZVTkNUSU9OX18sIGRhdGFbMV0pOworCQlicmVhazsKKwkJCisJfQorCitleGl0OgorCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMpCisJCWRldl9lcnIgKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWRcbiIsCisJCQkgX19GVU5DVElPTl9fLCBzdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCBlZGdlX2J1bGtfaW5fY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IChzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlpbnQgc3RhdHVzID0gMDsKKwlpbnQgcG9ydF9udW1iZXI7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkZXZfZXJyICgmdXJiLT5kZXYtPmRldiwiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkXG4iLAorCQkgICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMgKTsKKwl9CisKKwlpZiAodXJiLT5zdGF0dXMgPT0gLUVQSVBFKQorCQlnb3RvIGV4aXQ7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwiJXMgLSBzdG9wcGluZyByZWFkIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCXBvcnRfbnVtYmVyID0gZWRnZV9wb3J0LT5wb3J0LT5udW1iZXIgLSBlZGdlX3BvcnQtPnBvcnQtPnNlcmlhbC0+bWlub3I7CisKKwlpZiAoZWRnZV9wb3J0LT5sc3JfZXZlbnQpIHsKKwkJZWRnZV9wb3J0LT5sc3JfZXZlbnQgPSAwOworCQlkYmcgKCIlcyA9PT09PSBQb3J0ICV1IExTUiBTdGF0dXMgPSAlMDJ4LCBEYXRhID0gJTAyeCA9PT09PT0iLAorCQkgICAgIF9fRlVOQ1RJT05fXywgcG9ydF9udW1iZXIsIGVkZ2VfcG9ydC0+bHNyX21hc2ssICpkYXRhKTsKKwkJaGFuZGxlX25ld19sc3IgKGVkZ2VfcG9ydCwgMSwgZWRnZV9wb3J0LT5sc3JfbWFzaywgKmRhdGEpOworCQkvKiBBZGp1c3QgYnVmZmVyIGxlbmd0aC9wb2ludGVyICovCisJCS0tdXJiLT5hY3R1YWxfbGVuZ3RoOworCQkrK2RhdGE7CisJfQorCisJdHR5ID0gZWRnZV9wb3J0LT5wb3J0LT50dHk7CisJaWYgKHR0eSAmJiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmZWRnZV9wb3J0LT5wb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKworCQlpZiAoZWRnZV9wb3J0LT5jbG9zZV9wZW5kaW5nKSB7CisJCQlkYmcgKCIlcyAtIGNsb3NlIGlzIHBlbmRpbmcsIGRyb3BwaW5nIGRhdGEgb24gdGhlIGZsb29yLiIsIF9fRlVOQ1RJT05fXyk7CisJCX0gZWxzZSB7CisJCQllZGdlX3R0eV9yZWN2KCZlZGdlX3BvcnQtPnBvcnQtPmRldiwgdHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQl9CisJCWVkZ2VfcG9ydC0+aWNvdW50LnJ4ICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwl9CisKK2V4aXQ6CisJLyogY29udGludWUgcmVhZCB1bmxlc3Mgc3RvcHBlZCAqLworCXNwaW5fbG9jaygmZWRnZV9wb3J0LT5lcF9sb2NrKTsKKwlpZiAoZWRnZV9wb3J0LT5lcF9yZWFkX3VyYl9zdGF0ZSA9PSBFREdFX1JFQURfVVJCX1JVTk5JTkcpIHsKKwkJdXJiLT5kZXYgPSBlZGdlX3BvcnQtPnBvcnQtPnNlcmlhbC0+ZGV2OworCQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCX0gZWxzZSBpZiAoZWRnZV9wb3J0LT5lcF9yZWFkX3VyYl9zdGF0ZSA9PSBFREdFX1JFQURfVVJCX1NUT1BQSU5HKSB7CisJCWVkZ2VfcG9ydC0+ZXBfcmVhZF91cmJfc3RhdGUgPSBFREdFX1JFQURfVVJCX1NUT1BQRUQ7CisJfQorCXNwaW5fdW5sb2NrKCZlZGdlX3BvcnQtPmVwX2xvY2spOworCWlmIChzdGF0dXMpCisJCWRldl9lcnIgKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWRcbiIsCisJCQkgX19GVU5DVElPTl9fLCBzdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCBlZGdlX3R0eV9yZWN2KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKwlpbnQgY250OworCisJZG8geworCQlpZiAodHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpIHsKKwkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQlpZiAodHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpIHsKKwkJCQlkZXZfZXJyKGRldiwgIiVzIC0gZHJvcHBpbmcgZGF0YSwgJWQgYnl0ZXMgbG9zdFxuIiwKKwkJCQkJX19GVU5DVElPTl9fLCBsZW5ndGgpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQljbnQgPSBtaW4obGVuZ3RoLCBUVFlfRkxJUEJVRl9TSVpFIC0gdHR5LT5mbGlwLmNvdW50KTsKKwkJbWVtY3B5KHR0eS0+ZmxpcC5jaGFyX2J1Zl9wdHIsIGRhdGEsIGNudCk7CisJCW1lbXNldCh0dHktPmZsaXAuZmxhZ19idWZfcHRyLCAwLCBjbnQpOworCQl0dHktPmZsaXAuY2hhcl9idWZfcHRyICs9IGNudDsKKwkJdHR5LT5mbGlwLmZsYWdfYnVmX3B0ciArPSBjbnQ7CisJCXR0eS0+ZmxpcC5jb3VudCArPSBjbnQ7CisJCWRhdGEgKz0gY250OworCQlsZW5ndGggLT0gY250OworCX0gd2hpbGUgKGxlbmd0aCA+IDApOworCisJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKK30KKworc3RhdGljIHZvaWQgZWRnZV9idWxrX291dF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWRiZyAoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWVkZ2VfcG9ydC0+ZXBfd3JpdGVfdXJiX2luX3VzZSA9IDA7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGV2X2VyciAoJnVyYi0+ZGV2LT5kZXYsIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWRcbiIsCisJCSAgICAgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJfQorCisJLyogc2VuZCBhbnkgYnVmZmVyZWQgZGF0YSAqLworCWVkZ2Vfc2VuZChwb3J0KTsKK30KKworc3RhdGljIGludCBlZGdlX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBwb3J0X251bWJlcjsKKwlpbnQgc3RhdHVzOworCXUxNiBvcGVuX3NldHRpbmdzOworCXU4IHRyYW5zYWN0aW9uX3RpbWVvdXQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAocG9ydC0+dHR5KQorCQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gbG93X2xhdGVuY3k7CisKKwlwb3J0X251bWJlciA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3I7CisJc3dpdGNoIChwb3J0X251bWJlcikgeworCQljYXNlIDA6CisJCQllZGdlX3BvcnQtPnVhcnRfYmFzZSA9IFVNUE1FTV9CQVNFX1VBUlQxOworCQkJZWRnZV9wb3J0LT5kbWFfYWRkcmVzcyA9IFVNUERfT0VEQjFfQUREUkVTUzsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQllZGdlX3BvcnQtPnVhcnRfYmFzZSA9IFVNUE1FTV9CQVNFX1VBUlQyOworCQkJZWRnZV9wb3J0LT5kbWFfYWRkcmVzcyA9IFVNUERfT0VEQjJfQUREUkVTUzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X2VyciAoJnBvcnQtPmRldiwgIlVua25vd24gcG9ydCBudW1iZXIhISFcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGJnICgiJXMgLSBwb3J0X251bWJlciA9ICVkLCB1YXJ0X2Jhc2UgPSAlMDR4LCBkbWFfYWRkcmVzcyA9ICUwNHgiLAorCSAgICAgX19GVU5DVElPTl9fLCBwb3J0X251bWJlciwgZWRnZV9wb3J0LT51YXJ0X2Jhc2UsIGVkZ2VfcG9ydC0+ZG1hX2FkZHJlc3MpOworCisJZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisKKwltZW1zZXQgKCYoZWRnZV9wb3J0LT5pY291bnQpLCAweDAwLCBzaXplb2YoZWRnZV9wb3J0LT5pY291bnQpKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkICgmZWRnZV9wb3J0LT5kZWx0YV9tc3Jfd2FpdCk7CisKKwkvKiB0dXJuIG9mZiBsb29wYmFjayAqLworCXN0YXR1cyA9IFRJQ2xlYXJMb29wQmFjayAoZWRnZV9wb3J0KTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwiJXMgLSBjYW5ub3Qgc2VuZCBjbGVhciBsb29wYmFjayBjb21tYW5kLCAlZFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJCisJLyogc2V0IHVwIHRoZSBwb3J0IHNldHRpbmdzICovCisJZWRnZV9zZXRfdGVybWlvcyAocG9ydCwgTlVMTCk7CisKKwkvKiBvcGVuIHVwIHRoZSBwb3J0ICovCisKKwkvKiBtaWxsaXNlY29uZHMgdG8gdGltZW91dCBmb3IgRE1BIHRyYW5zZmVyICovCisJdHJhbnNhY3Rpb25fdGltZW91dCA9IDI7CisKKwllZGdlX3BvcnQtPnVtcF9yZWFkX3RpbWVvdXQgPSBtYXggKDIwLCAoKHRyYW5zYWN0aW9uX3RpbWVvdXQgKiAzKSAvIDIpICk7CisKKwkvLyBtaWxsaXNlY29uZHMgdG8gdGltZW91dCBmb3IgRE1BIHRyYW5zZmVyCisJb3Blbl9zZXR0aW5ncyA9ICh1OCkoVU1QX0RNQV9NT0RFX0NPTlRJTk9VUyB8IAorCQkJICAgICBVTVBfUElQRV9UUkFOU19USU1FT1VUX0VOQSB8IAorCQkJICAgICAodHJhbnNhY3Rpb25fdGltZW91dCA8PCAyKSk7CisKKwlkYmcgKCIlcyAtIFNlbmRpbmcgVU1QQ19PUEVOX1BPUlQiLCBfX0ZVTkNUSU9OX18pOworCisJLyogVGVsbCBUSSB0byBvcGVuIGFuZCBzdGFydCB0aGUgcG9ydCAqLworCXN0YXR1cyA9IFRJV3JpdGVDb21tYW5kU3luYyAoZGV2LAorCQkJCQlVTVBDX09QRU5fUE9SVCwKKwkJCQkJKHU4KShVTVBNX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksCisJCQkJCW9wZW5fc2V0dGluZ3MsCisJCQkJCU5VTEwsCisJCQkJCTApOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCIlcyAtIGNhbm5vdCBzZW5kIG9wZW4gY29tbWFuZCwgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkvKiBTdGFydCB0aGUgRE1BPyAqLworCXN0YXR1cyA9IFRJV3JpdGVDb21tYW5kU3luYyAoZGV2LAorCQkJCQlVTVBDX1NUQVJUX1BPUlQsCisJCQkJCSh1OCkoVU1QTV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLAorCQkJCQkwLAorCQkJCQlOVUxMLAorCQkJCQkwKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwiJXMgLSBjYW5ub3Qgc2VuZCBzdGFydCBETUEgY29tbWFuZCwgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkvKiBDbGVhciBUWCBhbmQgUlggYnVmZmVycyBpbiBVTVAgKi8KKwlzdGF0dXMgPSBUSVB1cmdlRGF0YVN5bmMgKHBvcnQsIFVNUF9QT1JUX0RJUl9PVVQgfCBVTVBfUE9SVF9ESVJfSU4pOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCIlcyAtIGNhbm5vdCBzZW5kIGNsZWFyIGJ1ZmZlcnMgY29tbWFuZCwgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkvKiBSZWFkIEluaXRpYWwgTVNSICovCisJc3RhdHVzID0gVElSZWFkVmVuZG9yUmVxdWVzdFN5bmMgKGRldiwKKwkJCQkJVU1QQ19SRUFEX01TUiwJLy8gUmVxdWVzdAorCQkJCQkwLAkJLy8gd1ZhbHVlCisJCQkJCShfX3UxNikoVU1QTV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLAkvLyB3SW5kZXggKEFkZHJlc3MpCisJCQkJCSZlZGdlX3BvcnQtPnNoYWRvd19tc3IsCQkJLy8gVHJhbnNmZXJCdWZmZXIKKwkJCQkJMSk7CQkJCQkvLyBUcmFuc2ZlckJ1ZmZlckxlbmd0aAorCWlmIChzdGF0dXMpIHsKKyAJCWRldl9lcnIoJnBvcnQtPmRldiwiJXMgLSBjYW5ub3Qgc2VuZCByZWFkIE1TUiBjb21tYW5kLCAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCWRiZyAoIlNoYWRvd01TUiAweCVYIiwgZWRnZV9wb3J0LT5zaGFkb3dfbXNyKTsKKyAKKwkvKiBTZXQgSW5pdGlhbCBNQ1IgKi8KKwllZGdlX3BvcnQtPnNoYWRvd19tY3IgPSBNQ1JfUlRTIHwgTUNSX0RUUjsKKwlkYmcgKCJTaGFkb3dNQ1IgMHglWCIsIGVkZ2VfcG9ydC0+c2hhZG93X21jcik7CisKKwllZGdlX3NlcmlhbCA9IGVkZ2VfcG9ydC0+ZWRnZV9zZXJpYWw7CisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZWRnZV9zZXJpYWwtPmVzX3NlbSkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJaWYgKGVkZ2Vfc2VyaWFsLT5udW1fcG9ydHNfb3BlbiA9PSAwKSB7CisJCS8qIHdlIGFyZSB0aGUgZmlyc3QgcG9ydCB0byBiZSBvcGVuZWQsIGxldCdzIHBvc3QgdGhlIGludGVycnVwdCB1cmIgKi8KKwkJdXJiID0gZWRnZV9zZXJpYWwtPnNlcmlhbC0+cG9ydFswXS0+aW50ZXJydXB0X2luX3VyYjsKKwkJaWYgKCF1cmIpIHsKKwkJCWRldl9lcnIgKCZwb3J0LT5kZXYsICIlcyAtIG5vIGludGVycnVwdCB1cmIgcHJlc2VudCwgZXhpdGluZ1xuIiwgX19GVU5DVElPTl9fKTsKKwkJCXN0YXR1cyA9IC1FSU5WQUw7CisJCQlnb3RvIHVwX2VzX3NlbTsKKwkJfQorCQl1cmItPmNvbXBsZXRlID0gZWRnZV9pbnRlcnJ1cHRfY2FsbGJhY2s7CisJCXVyYi0+Y29udGV4dCA9IGVkZ2Vfc2VyaWFsOworCQl1cmItPmRldiA9IGRldjsKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0tFUk5FTCk7CisJCWlmIChzdGF0dXMpIHsKKwkJCWRldl9lcnIgKCZwb3J0LT5kZXYsICIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHZhbHVlICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCQlnb3RvIHVwX2VzX3NlbTsKKwkJfQorCX0KKworCS8qCisJICogcmVzZXQgdGhlIGRhdGEgdG9nZ2xlIG9uIHRoZSBidWxrIGVuZHBvaW50cyB0byB3b3JrIGFyb3VuZCBidWcgaW4KKwkgKiBob3N0IGNvbnRyb2xsZXJzIHdoZXJlIHRoaW5ncyBnZXQgb3V0IG9mIHN5bmMgc29tZSB0aW1lcworCSAqLworCXVzYl9jbGVhcl9oYWx0IChkZXYsIHBvcnQtPndyaXRlX3VyYi0+cGlwZSk7CisJdXNiX2NsZWFyX2hhbHQgKGRldiwgcG9ydC0+cmVhZF91cmItPnBpcGUpOworCisJLyogc3RhcnQgdXAgb3VyIGJ1bGsgcmVhZCB1cmIgKi8KKwl1cmIgPSBwb3J0LT5yZWFkX3VyYjsKKwlpZiAoIXVyYikgeworCQlkZXZfZXJyICgmcG9ydC0+ZGV2LCAiJXMgLSBubyByZWFkIHVyYiBwcmVzZW50LCBleGl0aW5nXG4iLCBfX0ZVTkNUSU9OX18pOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIHVubGlua19pbnRfdXJiOworCX0KKwllZGdlX3BvcnQtPmVwX3JlYWRfdXJiX3N0YXRlID0gRURHRV9SRUFEX1VSQl9SVU5OSU5HOworCXVyYi0+Y29tcGxldGUgPSBlZGdlX2J1bGtfaW5fY2FsbGJhY2s7CisJdXJiLT5jb250ZXh0ID0gZWRnZV9wb3J0OworCXVyYi0+ZGV2ID0gZGV2OworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9LRVJORUwpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VyciAoJnBvcnQtPmRldiwgIiVzIC0gcmVhZCBidWxrIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHZhbHVlICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCWdvdG8gdW5saW5rX2ludF91cmI7CisJfQorCisJKytlZGdlX3NlcmlhbC0+bnVtX3BvcnRzX29wZW47CisKKwlkYmcoIiVzIC0gZXhpdGVkIiwgX19GVU5DVElPTl9fKTsKKworCWdvdG8gdXBfZXNfc2VtOworCit1bmxpbmtfaW50X3VyYjoKKwlpZiAoZWRnZV9wb3J0LT5lZGdlX3NlcmlhbC0+bnVtX3BvcnRzX29wZW4gPT0gMCkKKwkJdXNiX2tpbGxfdXJiKHBvcnQtPnNlcmlhbC0+cG9ydFswXS0+aW50ZXJydXB0X2luX3VyYik7Cit1cF9lc19zZW06CisJdXAoJmVkZ2Vfc2VyaWFsLT5lc19zZW0pOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIGVkZ2VfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBlZGdlcG9ydF9zZXJpYWwgKmVkZ2Vfc2VyaWFsOworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQ7CisJaW50IHBvcnRfbnVtYmVyOworCWludCBzdGF0dXM7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJCSAKKwllZGdlX3NlcmlhbCA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKKwllZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaWYgKChlZGdlX3NlcmlhbCA9PSBOVUxMKSB8fCAoZWRnZV9wb3J0ID09IE5VTEwpKQorCQlyZXR1cm47CisJCisJLyogVGhlIGJ1bGtyZWFkY29tcGxldGlvbiByb3V0aW5lIHdpbGwgY2hlY2sgCisJICogdGhpcyBmbGFnIGFuZCBkdW1wIGFkZCByZWFkIGRhdGEgKi8KKwllZGdlX3BvcnQtPmNsb3NlX3BlbmRpbmcgPSAxOworCisJLyogY2hhc2UgdGhlIHBvcnQgY2xvc2UgYW5kIGZsdXNoICovCisJVElDaGFzZVBvcnQgKGVkZ2VfcG9ydCwgKEhaKmNsb3Npbmdfd2FpdCkvMTAwLCAxKTsKKworCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJZWRnZV9wb3J0LT5lcF93cml0ZV91cmJfaW5fdXNlID0gMDsKKworCS8qIGFzc3VtaW5nIHdlIGNhbiBzdGlsbCB0YWxrIHRvIHRoZSBkZXZpY2UsCisJICogc2VuZCBhIGNsb3NlIHBvcnQgY29tbWFuZCB0byBpdCAqLworCWRiZygiJXMgLSBzZW5kIHVtcGNfY2xvc2VfcG9ydCIsIF9fRlVOQ1RJT05fXyk7CisJcG9ydF9udW1iZXIgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOworCXN0YXR1cyA9IFRJV3JpdGVDb21tYW5kU3luYyAocG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJICAgICBVTVBDX0NMT1NFX1BPUlQsCisJCQkJICAgICAoX191OCkoVU1QTV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLAorCQkJCSAgICAgMCwKKwkJCQkgICAgIE5VTEwsCisJCQkJICAgICAwKTsKKwlkb3duKCZlZGdlX3NlcmlhbC0+ZXNfc2VtKTsKKwktLWVkZ2VfcG9ydC0+ZWRnZV9zZXJpYWwtPm51bV9wb3J0c19vcGVuOworCWlmIChlZGdlX3BvcnQtPmVkZ2Vfc2VyaWFsLT5udW1fcG9ydHNfb3BlbiA8PSAwKSB7CisJCS8qIGxhc3QgcG9ydCBpcyBub3cgY2xvc2VkLCBsZXQncyBzaHV0IGRvd24gb3VyIGludGVycnVwdCB1cmIgKi8KKwkJdXNiX2tpbGxfdXJiKHBvcnQtPnNlcmlhbC0+cG9ydFswXS0+aW50ZXJydXB0X2luX3VyYik7CisJCWVkZ2VfcG9ydC0+ZWRnZV9zZXJpYWwtPm51bV9wb3J0c19vcGVuID0gMDsKKwl9CisJdXAoJmVkZ2Vfc2VyaWFsLT5lc19zZW0pOworCWVkZ2VfcG9ydC0+Y2xvc2VfcGVuZGluZyA9IDA7CisKKwlkYmcoIiVzIC0gZXhpdGVkIiwgX19GVU5DVElPTl9fKTsKK30KKworc3RhdGljIGludCBlZGdlX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgY291bnQpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoY291bnQgPT0gMCkgeworCQlkYmcoIiVzIC0gd3JpdGUgcmVxdWVzdCBvZiAwIGJ5dGVzIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGVkZ2VfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoZWRnZV9wb3J0LT5jbG9zZV9wZW5kaW5nID09IDEpCisJCXJldHVybiAtRU5PREVWOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCWNvdW50ID0gZWRnZV9idWZfcHV0KGVkZ2VfcG9ydC0+ZXBfb3V0X2J1ZiwgZGF0YSwgY291bnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCisJZWRnZV9zZW5kKHBvcnQpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdm9pZCBlZGdlX3NlbmQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlpbnQgY291bnQsIHJlc3VsdDsKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CisKKwlpZiAoZWRnZV9wb3J0LT5lcF93cml0ZV91cmJfaW5fdXNlKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJY291bnQgPSBlZGdlX2J1Zl9nZXQoZWRnZV9wb3J0LT5lcF9vdXRfYnVmLAorCQkJCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJCXBvcnQtPmJ1bGtfb3V0X3NpemUpOworCisJaWYgKGNvdW50ID09IDApIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwllZGdlX3BvcnQtPmVwX3dyaXRlX3VyYl9pbl91c2UgPSAxOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgY291bnQsIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCS8qIHNldCB1cCBvdXIgdXJiICovCisJdXNiX2ZpbGxfYnVsa191cmIgKHBvcnQtPndyaXRlX3VyYiwgcG9ydC0+c2VyaWFsLT5kZXYsCisJCQkgICB1c2Jfc25kYnVsa3BpcGUgKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCQkgICAgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBjb3VudCwKKwkJCSAgIGVkZ2VfYnVsa19vdXRfY2FsbGJhY2ssCisJCQkgICBwb3J0KTsKKworCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQgKi8KKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCWVkZ2VfcG9ydC0+ZXBfd3JpdGVfdXJiX2luX3VzZSA9IDA7CisJCS8vIFRPRE86IHJlc2NoZWR1bGUgZWRnZV9zZW5kCisJfSBlbHNlIHsKKwkJZWRnZV9wb3J0LT5pY291bnQudHggKz0gY291bnQ7CisJfQorCisJLyogd2FrZXVwIGFueSBwcm9jZXNzIHdhaXRpbmcgZm9yIHdyaXRlcyB0byBjb21wbGV0ZSAqLworCS8qIHRoZXJlIGlzIG5vdyBtb3JlIHJvb20gaW4gdGhlIGJ1ZmZlciBmb3IgbmV3IHdyaXRlcyAqLworCWlmICh0dHkpIHsKKwkJLyogbGV0IHRoZSB0dHkgZHJpdmVyIHdha2V1cCBpZiBpdCBoYXMgYSBzcGVjaWFsIHdyaXRlX3dha2V1cCBmdW5jdGlvbiAqLworCQl0dHlfd2FrZXVwKHR0eSk7CisJfQorfQorCitzdGF0aWMgaW50IGVkZ2Vfd3JpdGVfcm9vbSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCByb29tID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoZWRnZV9wb3J0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCWlmIChlZGdlX3BvcnQtPmNsb3NlX3BlbmRpbmcgPT0gMSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CisJcm9vbSA9IGVkZ2VfYnVmX3NwYWNlX2F2YWlsKGVkZ2VfcG9ydC0+ZXBfb3V0X2J1Zik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWRnZV9wb3J0LT5lcF9sb2NrLCBmbGFncyk7CisKKwlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fRlVOQ1RJT05fXywgcm9vbSk7CisJcmV0dXJuIHJvb207Cit9CisKK3N0YXRpYyBpbnQgZWRnZV9jaGFyc19pbl9idWZmZXIgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgY2hhcnMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKGVkZ2VfcG9ydC0+Y2xvc2VfcGVuZGluZyA9PSAxKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKwljaGFycyA9IGVkZ2VfYnVmX2RhdGFfYXZhaWwoZWRnZV9wb3J0LT5lcF9vdXRfYnVmKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKworCWRiZyAoIiVzIC0gcmV0dXJucyAlZCIsIF9fRlVOQ1RJT05fXywgY2hhcnMpOworCXJldHVybiBjaGFyczsKK30KKworc3RhdGljIHZvaWQgZWRnZV90aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKGVkZ2VfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKCF0dHkpIHsKKwkJZGJnICgiJXMgLSBubyB0dHkgYXZhaWxhYmxlIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgWE9OL1hPRkYsIHNlbmQgdGhlIHN0b3AgY2hhcmFjdGVyICovCisJaWYgKElfSVhPRkYodHR5KSkgeworCQl1bnNpZ25lZCBjaGFyIHN0b3BfY2hhciA9IFNUT1BfQ0hBUih0dHkpOworCQlzdGF0dXMgPSBlZGdlX3dyaXRlIChwb3J0LCAmc3RvcF9jaGFyLCAxKTsKKwkJaWYgKHN0YXR1cyA8PSAwKSB7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCB0byB3cml0ZSBzdG9wIGNoYXJhY3RlciwgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJfQorCX0KKworCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgUlRTL0NUUywgc3RvcCByZWFkcyAqLworCS8qIGFuZCB0aGUgRWRnZXBvcnQgd2lsbCBjbGVhciB0aGUgUlRTIGxpbmUgKi8KKwlpZiAoQ19DUlRTQ1RTKHR0eSkpCisJCXN0b3BfcmVhZChlZGdlX3BvcnQpOworCit9CisKK3N0YXRpYyB2b2lkIGVkZ2VfdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKGVkZ2VfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKCF0dHkpIHsKKwkJZGJnICgiJXMgLSBubyB0dHkgYXZhaWxhYmxlIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgWE9OL1hPRkYsIHNlbmQgdGhlIHN0YXJ0IGNoYXJhY3RlciAqLworCWlmIChJX0lYT0ZGKHR0eSkpIHsKKwkJdW5zaWduZWQgY2hhciBzdGFydF9jaGFyID0gU1RBUlRfQ0hBUih0dHkpOworCQlzdGF0dXMgPSBlZGdlX3dyaXRlIChwb3J0LCAmc3RhcnRfY2hhciwgMSk7CisJCWlmIChzdGF0dXMgPD0gMCkgeworCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgdG8gd3JpdGUgc3RhcnQgY2hhcmFjdGVyLCAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQl9CisJfQorCisJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBSVFMvQ1RTLCByZXN0YXJ0IHJlYWRzICovCisJLyogYXJlIHRoZSBFZGdlcG9ydCB3aWxsIGFzc2VydCB0aGUgUlRTIGxpbmUgKi8KKwlpZiAoQ19DUlRTQ1RTKHR0eSkpIHsKKwkJc3RhdHVzID0gcmVzdGFydF9yZWFkKGVkZ2VfcG9ydCk7CisJCWlmIChzdGF0dXMpCisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIHJlYWQgYnVsayB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCB2YWx1ZSAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCX0KKworfQorCitzdGF0aWMgdm9pZCBzdG9wX3JlYWQoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCisJaWYgKGVkZ2VfcG9ydC0+ZXBfcmVhZF91cmJfc3RhdGUgPT0gRURHRV9SRUFEX1VSQl9SVU5OSU5HKQorCQllZGdlX3BvcnQtPmVwX3JlYWRfdXJiX3N0YXRlID0gRURHRV9SRUFEX1VSQl9TVE9QUElORzsKKwllZGdlX3BvcnQtPnNoYWRvd19tY3IgJj0gfk1DUl9SVFM7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCByZXN0YXJ0X3JlYWQoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCkKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IHN0YXR1cyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlZGdlX3BvcnQtPmVwX2xvY2ssIGZsYWdzKTsKKworCWlmIChlZGdlX3BvcnQtPmVwX3JlYWRfdXJiX3N0YXRlID09IEVER0VfUkVBRF9VUkJfU1RPUFBFRCkgeworCQl1cmIgPSBlZGdlX3BvcnQtPnBvcnQtPnJlYWRfdXJiOworCQl1cmItPmNvbXBsZXRlID0gZWRnZV9idWxrX2luX2NhbGxiYWNrOworCQl1cmItPmNvbnRleHQgPSBlZGdlX3BvcnQ7CisJCXVyYi0+ZGV2ID0gZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPmRldjsKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKwl9CisJZWRnZV9wb3J0LT5lcF9yZWFkX3VyYl9zdGF0ZSA9IEVER0VfUkVBRF9VUkJfUlVOTklORzsKKwllZGdlX3BvcnQtPnNoYWRvd19tY3IgfD0gTUNSX1JUUzsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVkZ2VfcG9ydC0+ZXBfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgY2hhbmdlX3BvcnRfc2V0dGluZ3MgKHN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlzdHJ1Y3QgdW1wX3VhcnRfY29uZmlnICpjb25maWc7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlpbnQgYmF1ZDsKKwl1bnNpZ25lZCBjZmxhZzsKKwlpbnQgc3RhdHVzOworCWludCBwb3J0X251bWJlciA9IGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyIC0gZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyKTsKKworCXR0eSA9IGVkZ2VfcG9ydC0+cG9ydC0+dHR5OworCWlmICgoIXR0eSkgfHwKKwkgICAgKCF0dHktPnRlcm1pb3MpKSB7CisJCWRiZygiJXMgLSBubyB0dHkgc3RydWN0dXJlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwljb25maWcgPSBrbWFsbG9jIChzaXplb2YgKCpjb25maWcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvbmZpZykgeworCQlkZXZfZXJyICgmZWRnZV9wb3J0LT5wb3J0LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwljZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKworCWNvbmZpZy0+d0ZsYWdzID0gMDsKKworCS8qIFRoZXNlIGZsYWdzIG11c3QgYmUgc2V0ICovCisJY29uZmlnLT53RmxhZ3MgfD0gVU1QX01BU0tfVUFSVF9GTEFHU19SRUNFSVZFX01TX0lOVDsKKwljb25maWctPndGbGFncyB8PSBVTVBfTUFTS19VQVJUX0ZMQUdTX0FVVE9fU1RBUlRfT05fRVJSOworCWNvbmZpZy0+YlVhcnRNb2RlID0gKF9fdTgpKGVkZ2VfcG9ydC0+YlVhcnRNb2RlKTsKKworCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgeworCQljYXNlIENTNToKKwkJCSAgICBjb25maWctPmJEYXRhQml0cyA9IFVNUF9VQVJUX0NIQVI1QklUUzsKKwkJCSAgICBkYmcgKCIlcyAtIGRhdGEgYml0cyA9IDUiLCBfX0ZVTkNUSU9OX18pOworCQkJICAgIGJyZWFrOworCQljYXNlIENTNjoKKwkJCSAgICBjb25maWctPmJEYXRhQml0cyA9IFVNUF9VQVJUX0NIQVI2QklUUzsKKwkJCSAgICBkYmcgKCIlcyAtIGRhdGEgYml0cyA9IDYiLCBfX0ZVTkNUSU9OX18pOworCQkJICAgIGJyZWFrOworCQljYXNlIENTNzoKKwkJCSAgICBjb25maWctPmJEYXRhQml0cyA9IFVNUF9VQVJUX0NIQVI3QklUUzsKKwkJCSAgICBkYmcgKCIlcyAtIGRhdGEgYml0cyA9IDciLCBfX0ZVTkNUSU9OX18pOworCQkJICAgIGJyZWFrOworCQlkZWZhdWx0OgorCQljYXNlIENTODoKKwkJCSAgICBjb25maWctPmJEYXRhQml0cyA9IFVNUF9VQVJUX0NIQVI4QklUUzsKKwkJCSAgICBkYmcgKCIlcyAtIGRhdGEgYml0cyA9IDgiLCBfX0ZVTkNUSU9OX18pOworCQkJICAgIGJyZWFrOworCX0KKworCWlmIChjZmxhZyAmIFBBUkVOQikgeworCQlpZiAoY2ZsYWcgJiBQQVJPREQpIHsKKwkJCWNvbmZpZy0+d0ZsYWdzIHw9IFVNUF9NQVNLX1VBUlRfRkxBR1NfUEFSSVRZOworCQkJY29uZmlnLT5iUGFyaXR5ID0gVU1QX1VBUlRfT0REUEFSSVRZOworCQkJZGJnKCIlcyAtIHBhcml0eSA9IG9kZCIsIF9fRlVOQ1RJT05fXyk7CisJCX0gZWxzZSB7CisJCQljb25maWctPndGbGFncyB8PSBVTVBfTUFTS19VQVJUX0ZMQUdTX1BBUklUWTsKKwkJCWNvbmZpZy0+YlBhcml0eSA9IFVNUF9VQVJUX0VWRU5QQVJJVFk7CisJCQlkYmcoIiVzIC0gcGFyaXR5ID0gZXZlbiIsIF9fRlVOQ1RJT05fXyk7CisJCX0KKwl9IGVsc2UgeworCQljb25maWctPmJQYXJpdHkgPSBVTVBfVUFSVF9OT1BBUklUWTsgCQorCQlkYmcoIiVzIC0gcGFyaXR5ID0gbm9uZSIsIF9fRlVOQ1RJT05fXyk7CisJfQorCisJaWYgKGNmbGFnICYgQ1NUT1BCKSB7CisJCWNvbmZpZy0+YlN0b3BCaXRzID0gVU1QX1VBUlRfU1RPUEJJVDI7CisJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAyIiwgX19GVU5DVElPTl9fKTsKKwl9IGVsc2UgeworCQljb25maWctPmJTdG9wQml0cyA9IFVNUF9VQVJUX1NUT1BCSVQxOworCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMSIsIF9fRlVOQ1RJT05fXyk7CisJfQorCisJLyogZmlndXJlIG91dCB0aGUgZmxvdyBjb250cm9sIHNldHRpbmdzICovCisJaWYgKGNmbGFnICYgQ1JUU0NUUykgeworCQljb25maWctPndGbGFncyB8PSBVTVBfTUFTS19VQVJUX0ZMQUdTX09VVF9YX0NUU19GTE9XOworCQljb25maWctPndGbGFncyB8PSBVTVBfTUFTS19VQVJUX0ZMQUdTX1JUU19GTE9XOworCQlkYmcoIiVzIC0gUlRTL0NUUyBpcyBlbmFibGVkIiwgX19GVU5DVElPTl9fKTsKKwl9IGVsc2UgeworCQlkYmcoIiVzIC0gUlRTL0NUUyBpcyBkaXNhYmxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCXR0eS0+aHdfc3RvcHBlZCA9IDA7CisJCXJlc3RhcnRfcmVhZChlZGdlX3BvcnQpOworCX0KKworCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgWE9OL1hPRkYsIHNldCB0aGUgc3RhcnQgYW5kIHN0b3AgY2hhcmFjdGVyIGluIHRoZSBkZXZpY2UgKi8KKwlpZiAoSV9JWE9GRih0dHkpIHx8IElfSVhPTih0dHkpKSB7CisJCWNvbmZpZy0+Y1hvbiAgPSBTVEFSVF9DSEFSKHR0eSk7CisJCWNvbmZpZy0+Y1hvZmYgPSBTVE9QX0NIQVIodHR5KTsKKworCQkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIElOQk9VTkQgWE9OL1hPRkYgKi8KKwkJaWYgKElfSVhPRkYodHR5KSkgeworCQkJY29uZmlnLT53RmxhZ3MgfD0gVU1QX01BU0tfVUFSVF9GTEFHU19JTl9YOworCQkJZGJnICgiJXMgLSBJTkJPVU5EIFhPTi9YT0ZGIGlzIGVuYWJsZWQsIFhPTiA9ICUyeCwgWE9GRiA9ICUyeCIsCisJCQkgICAgIF9fRlVOQ1RJT05fXywgY29uZmlnLT5jWG9uLCBjb25maWctPmNYb2ZmKTsKKwkJfSBlbHNlIHsKKwkJCWRiZyAoIiVzIC0gSU5CT1VORCBYT04vWE9GRiBpcyBkaXNhYmxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCX0KKworCQkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIE9VVEJPVU5EIFhPTi9YT0ZGICovCisJCWlmIChJX0lYT04odHR5KSkgeworCQkJY29uZmlnLT53RmxhZ3MgfD0gVU1QX01BU0tfVUFSVF9GTEFHU19PVVRfWDsKKwkJCWRiZyAoIiVzIC0gT1VUQk9VTkQgWE9OL1hPRkYgaXMgZW5hYmxlZCwgWE9OID0gJTJ4LCBYT0ZGID0gJTJ4IiwKKwkJCSAgICAgX19GVU5DVElPTl9fLCBjb25maWctPmNYb24sIGNvbmZpZy0+Y1hvZmYpOworCQl9IGVsc2UgeworCQkJZGJnICgiJXMgLSBPVVRCT1VORCBYT04vWE9GRiBpcyBkaXNhYmxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCX0KKwl9CisKKwkvKiBSb3VuZCB0aGUgYmF1ZCByYXRlICovCisJYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CisJaWYgKCFiYXVkKSB7CisJCS8qIHBpY2sgYSBkZWZhdWx0LCBhbnkgZGVmYXVsdC4uLiAqLworCQliYXVkID0gOTYwMDsKKwl9CisJZWRnZV9wb3J0LT5iYXVkX3JhdGUgPSBiYXVkOworCWNvbmZpZy0+d0JhdWRSYXRlID0gKF9fdTE2KSgoNDYxNTUwTCArIGJhdWQvMikgLyBiYXVkKTsKKworCWRiZyAoIiVzIC0gYmF1ZCByYXRlID0gJWQsIHdCYXVkUmF0ZSA9ICVkIiwgX19GVU5DVElPTl9fLCBiYXVkLCBjb25maWctPndCYXVkUmF0ZSk7CisKKwlkYmcgKCJ3QmF1ZFJhdGU6ICAgJWQiLCAoaW50KSg0NjE1NTBMIC8gY29uZmlnLT53QmF1ZFJhdGUpKTsKKwlkYmcgKCJ3RmxhZ3M6ICAgIDB4JXgiLCBjb25maWctPndGbGFncyk7CisJZGJnICgiYkRhdGFCaXRzOiAgICVkIiwgY29uZmlnLT5iRGF0YUJpdHMpOworCWRiZyAoImJQYXJpdHk6ICAgICAlZCIsIGNvbmZpZy0+YlBhcml0eSk7CisJZGJnICgiYlN0b3BCaXRzOiAgICVkIiwgY29uZmlnLT5iU3RvcEJpdHMpOworCWRiZyAoImNYb246ICAgICAgICAlZCIsIGNvbmZpZy0+Y1hvbik7CisJZGJnICgiY1hvZmY6ICAgICAgICVkIiwgY29uZmlnLT5jWG9mZik7CisJZGJnICgiYlVhcnRNb2RlOiAgICVkIiwgY29uZmlnLT5iVWFydE1vZGUpOworCisJLyogbW92ZSB0aGUgd29yZCB2YWx1ZXMgaW50byBiaWcgZW5kaWFuIG1vZGUgKi8KKwljcHVfdG9fYmUxNnMgKCZjb25maWctPndGbGFncyk7CisJY3B1X3RvX2JlMTZzICgmY29uZmlnLT53QmF1ZFJhdGUpOworCisJc3RhdHVzID0gVElXcml0ZUNvbW1hbmRTeW5jIChlZGdlX3BvcnQtPnBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCVVNUENfU0VUX0NPTkZJRywKKwkJCQkoX191OCkoVU1QTV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLAorCQkJCTAsCisJCQkJKF9fdTggKiljb25maWcsCisJCQkJc2l6ZW9mKCpjb25maWcpKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRiZyAoIiVzIC0gZXJyb3IgJWQgd2hlbiB0cnlpbmcgdG8gd3JpdGUgY29uZmlnIHRvIGRldmljZSIsCisJCSAgICAgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCX0KKworCWtmcmVlIChjb25maWcpOworCQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZWRnZV9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQoreworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnR0eTsKKwl1bnNpZ25lZCBpbnQgY2ZsYWc7CisKKwlpZiAoIXBvcnQtPnR0eSB8fCAhcG9ydC0+dHR5LT50ZXJtaW9zKSB7CisJCWRiZyAoIiVzIC0gbm8gdHR5IG9yIHRlcm1pb3MiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJLyogY2hlY2sgdGhhdCB0aGV5IHJlYWxseSB3YW50IHVzIHRvIGNoYW5nZSBzb21ldGhpbmcgKi8KKwlpZiAob2xkX3Rlcm1pb3MpIHsKKwkJaWYgKGNmbGFnID09IG9sZF90ZXJtaW9zLT5jX2NmbGFnICYmCisJCSAgICB0dHktPnRlcm1pb3MtPmNfaWZsYWcgPT0gb2xkX3Rlcm1pb3MtPmNfaWZsYWcpIHsKKwkJCWRiZyAoIiVzIC0gbm90aGluZyB0byBjaGFuZ2UiLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuOworCQl9CisJfQorCisJZGJnKCIlcyAtIGNsZmFnICUwOHggaWZsYWcgJTA4eCIsIF9fRlVOQ1RJT05fXywgCisJICAgIHR0eS0+dGVybWlvcy0+Y19jZmxhZywgdHR5LT50ZXJtaW9zLT5jX2lmbGFnKTsKKwlpZiAob2xkX3Rlcm1pb3MpIHsKKwkJZGJnKCIlcyAtIG9sZCBjbGZhZyAlMDh4IG9sZCBpZmxhZyAlMDh4IiwgX19GVU5DVElPTl9fLAorCQkgICAgb2xkX3Rlcm1pb3MtPmNfY2ZsYWcsIG9sZF90ZXJtaW9zLT5jX2lmbGFnKTsKKwl9CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChlZGdlX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogY2hhbmdlIHRoZSBwb3J0IHNldHRpbmdzIHRvIHRoZSBuZXcgb25lcyBzcGVjaWZpZWQgKi8KKwljaGFuZ2VfcG9ydF9zZXR0aW5ncyAoZWRnZV9wb3J0LCBvbGRfdGVybWlvcyk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgZWRnZV90aW9jbXNldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGludCBtY3I7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCW1jciA9IGVkZ2VfcG9ydC0+c2hhZG93X21jcjsKKwlpZiAoc2V0ICYgVElPQ01fUlRTKQorCQltY3IgfD0gTUNSX1JUUzsKKwlpZiAoc2V0ICYgVElPQ01fRFRSKQorCQltY3IgfD0gTUNSX0RUUjsKKwlpZiAoc2V0ICYgVElPQ01fTE9PUCkKKwkJbWNyIHw9IE1DUl9MT09QQkFDSzsKKworCWlmIChjbGVhciAmIFRJT0NNX1JUUykKKwkJbWNyICY9IH5NQ1JfUlRTOworCWlmIChjbGVhciAmIFRJT0NNX0RUUikKKwkJbWNyICY9IH5NQ1JfRFRSOworCWlmIChjbGVhciAmIFRJT0NNX0xPT1ApCisJCW1jciAmPSB+TUNSX0xPT1BCQUNLOworCisJZWRnZV9wb3J0LT5zaGFkb3dfbWNyID0gbWNyOworCisJVElSZXN0b3JlTUNSIChlZGdlX3BvcnQsIG1jcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlZGdlX3Rpb2NtZ2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CisJdW5zaWduZWQgaW50IG1zcjsKKwl1bnNpZ25lZCBpbnQgbWNyOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwltc3IgPSBlZGdlX3BvcnQtPnNoYWRvd19tc3I7CisJbWNyID0gZWRnZV9wb3J0LT5zaGFkb3dfbWNyOworCXJlc3VsdCA9ICgobWNyICYgTUNSX0RUUikJPyBUSU9DTV9EVFI6IDApCSAgLyogMHgwMDIgKi8KKwkJICB8ICgobWNyICYgTUNSX1JUUykJPyBUSU9DTV9SVFM6IDApICAgLyogMHgwMDQgKi8KKwkJICB8ICgobXNyICYgRURHRVBPUlRfTVNSX0NUUykJPyBUSU9DTV9DVFM6IDApICAgLyogMHgwMjAgKi8KKwkJICB8ICgobXNyICYgRURHRVBPUlRfTVNSX0NEKQk/IFRJT0NNX0NBUjogMCkgICAvKiAweDA0MCAqLworCQkgIHwgKChtc3IgJiBFREdFUE9SVF9NU1JfUkkpCT8gVElPQ01fUkk6ICAwKSAgIC8qIDB4MDgwICovCisJCSAgfCAoKG1zciAmIEVER0VQT1JUX01TUl9EU1IpCT8gVElPQ01fRFNSOiAwKTsgIC8qIDB4MTAwICovCisKKworCWRiZygiJXMgLS0gJXgiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGdldF9zZXJpYWxfaW5mbyAoc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpyZXRpbmZvKQoreworCXN0cnVjdCBzZXJpYWxfc3RydWN0IHRtcDsKKworCWlmICghcmV0aW5mbykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwltZW1zZXQoJnRtcCwgMCwgc2l6ZW9mKHRtcCkpOworCisJdG1wLnR5cGUJCT0gUE9SVF8xNjU1MEE7CisJdG1wLmxpbmUJCT0gZWRnZV9wb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOworCXRtcC5wb3J0CQk9IGVkZ2VfcG9ydC0+cG9ydC0+bnVtYmVyOworCXRtcC5pcnEJCQk9IDA7CisJdG1wLmZsYWdzCQk9IEFTWU5DX1NLSVBfVEVTVCB8IEFTWU5DX0FVVE9fSVJROworCXRtcC54bWl0X2ZpZm9fc2l6ZQk9IGVkZ2VfcG9ydC0+cG9ydC0+YnVsa19vdXRfc2l6ZTsKKwl0bXAuYmF1ZF9iYXNlCQk9IDk2MDA7CisJdG1wLmNsb3NlX2RlbGF5CQk9IDUqSFo7CisJdG1wLmNsb3Npbmdfd2FpdAk9IGNsb3Npbmdfd2FpdDsKKy8vCXRtcC5jdXN0b21fZGl2aXNvcgk9IHN0YXRlLT5jdXN0b21fZGl2aXNvcjsKKy8vCXRtcC5odWI2CQk9IHN0YXRlLT5odWI2OworLy8JdG1wLmlvX3R5cGUJCT0gc3RhdGUtPmlvX3R5cGU7CisKKworCWlmIChjb3B5X3RvX3VzZXIocmV0aW5mbywgJnRtcCwgc2l6ZW9mKCpyZXRpbmZvKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVkZ2VfaW9jdGwgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCBhc3luY19pY291bnQgY25vdzsKKwlzdHJ1Y3QgYXN5bmNfaWNvdW50IGNwcmV2OworCisJZGJnKCIlcyAtIHBvcnQgJWQsIGNtZCA9IDB4JXgiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY21kKTsKKworCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgVElPQ0lOUToKKwkJCWRiZygiJXMgLSAoJWQpIFRJT0NJTlEiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisvLwkJCXJldHVybiBnZXRfbnVtYmVyX2J5dGVzX2F2YWlsKGVkZ2VfcG9ydCwgKHVuc2lnbmVkIGludCAqKSBhcmcpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUSU9DU0VSR0VUTFNSOgorCQkJZGJnKCIlcyAtICglZCkgVElPQ1NFUkdFVExTUiIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKy8vCQkJcmV0dXJuIGdldF9sc3JfaW5mbyhlZGdlX3BvcnQsICh1bnNpZ25lZCBpbnQgKikgYXJnKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVElPQ0dTRVJJQUw6CisJCQlkYmcoIiVzIC0gKCVkKSBUSU9DR1NFUklBTCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJCXJldHVybiBnZXRfc2VyaWFsX2luZm8oZWRnZV9wb3J0LCAoc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICopIGFyZyk7CisJCQlicmVhazsKKworCQljYXNlIFRJT0NTU0VSSUFMOgorCQkJZGJnKCIlcyAtICglZCkgVElPQ1NTRVJJQUwiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCQlicmVhazsKKworCQljYXNlIFRJT0NNSVdBSVQ6CisJCQlkYmcoIiVzIC0gKCVkKSBUSU9DTUlXQUlUIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQkJY3ByZXYgPSBlZGdlX3BvcnQtPmljb3VudDsKKwkJCXdoaWxlICgxKSB7CisJCQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmZWRnZV9wb3J0LT5kZWx0YV9tc3Jfd2FpdCk7CisJCQkJLyogc2VlIGlmIGEgc2lnbmFsIGRpZCBpdCAqLworCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJCQljbm93ID0gZWRnZV9wb3J0LT5pY291bnQ7CisJCQkJaWYgKGNub3cucm5nID09IGNwcmV2LnJuZyAmJiBjbm93LmRzciA9PSBjcHJldi5kc3IgJiYKKwkJCQkgICAgY25vdy5kY2QgPT0gY3ByZXYuZGNkICYmIGNub3cuY3RzID09IGNwcmV2LmN0cykKKwkJCQkJcmV0dXJuIC1FSU87IC8qIG5vIGNoYW5nZSA9PiBlcnJvciAqLworCQkJCWlmICgoKGFyZyAmIFRJT0NNX1JORykgJiYgKGNub3cucm5nICE9IGNwcmV2LnJuZykpIHx8CisJCQkJICAgICgoYXJnICYgVElPQ01fRFNSKSAmJiAoY25vdy5kc3IgIT0gY3ByZXYuZHNyKSkgfHwKKwkJCQkgICAgKChhcmcgJiBUSU9DTV9DRCkgICYmIChjbm93LmRjZCAhPSBjcHJldi5kY2QpKSB8fAorCQkJCSAgICAoKGFyZyAmIFRJT0NNX0NUUykgJiYgKGNub3cuY3RzICE9IGNwcmV2LmN0cykpICkgeworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQkJY3ByZXYgPSBjbm93OworCQkJfQorCQkJLyogbm90IHJlYWNoZWQgKi8KKwkJCWJyZWFrOworCisJCWNhc2UgVElPQ0dJQ09VTlQ6CisJCQlkYmcgKCIlcyAtICglZCkgVElPQ0dJQ09VTlQgUlg9JWQsIFRYPSVkIiwgX19GVU5DVElPTl9fLAorCQkJICAgICBwb3J0LT5udW1iZXIsIGVkZ2VfcG9ydC0+aWNvdW50LnJ4LCBlZGdlX3BvcnQtPmljb3VudC50eCk7CisJCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmVkZ2VfcG9ydC0+aWNvdW50LCBzaXplb2YoZWRnZV9wb3J0LT5pY291bnQpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyB2b2lkIGVkZ2VfYnJlYWsgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkKK3sKKwlzdHJ1Y3QgZWRnZXBvcnRfcG9ydCAqZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCBzdGF0dXM7CisKKwlkYmcgKCIlcyAtIHN0YXRlID0gJWQiLCBfX0ZVTkNUSU9OX18sIGJyZWFrX3N0YXRlKTsKKworCS8qIGNoYXNlIHRoZSBwb3J0IGNsb3NlICovCisJVElDaGFzZVBvcnQgKGVkZ2VfcG9ydCwgMCwgMCk7CisKKwlpZiAoYnJlYWtfc3RhdGUgPT0gLTEpIHsKKwkJc3RhdHVzID0gVElTZXRCcmVhayAoZWRnZV9wb3J0KTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSBUSUNsZWFyQnJlYWsgKGVkZ2VfcG9ydCk7CisJfQorCWlmIChzdGF0dXMpIHsKKwkJZGJnICgiJXMgLSBlcnJvciAlZCBzZW5kaW5nIGJyZWFrIHNldC9jbGVhciBjb21tYW5kLiIsCisJCSAgICAgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCX0KK30KKworc3RhdGljIGludCBlZGdlX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCAqZWRnZV9zZXJpYWw7CisJc3RydWN0IGVkZ2Vwb3J0X3BvcnQgKmVkZ2VfcG9ydDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCWludCBzdGF0dXM7CisJaW50IGk7CisKKwlkZXYgPSBzZXJpYWwtPmRldjsKKworCS8qIGNyZWF0ZSBvdXIgcHJpdmF0ZSBzZXJpYWwgc3RydWN0dXJlICovCisJZWRnZV9zZXJpYWwgPSBrbWFsbG9jIChzaXplb2Yoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCksIEdGUF9LRVJORUwpOworCWlmIChlZGdlX3NlcmlhbCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQgKGVkZ2Vfc2VyaWFsLCAwLCBzaXplb2Yoc3RydWN0IGVkZ2Vwb3J0X3NlcmlhbCkpOworCXNlbWFfaW5pdCgmZWRnZV9zZXJpYWwtPmVzX3NlbSwgMSk7CisJZWRnZV9zZXJpYWwtPnNlcmlhbCA9IHNlcmlhbDsKKwl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgZWRnZV9zZXJpYWwpOworCisJc3RhdHVzID0gVElEb3dubG9hZEZpcm13YXJlIChlZGdlX3NlcmlhbCk7CisJaWYgKHN0YXR1cykgeworCQlrZnJlZSAoZWRnZV9zZXJpYWwpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCS8qIHNldCB1cCBvdXIgcG9ydCBwcml2YXRlIHN0cnVjdHVyZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQllZGdlX3BvcnQgPSBrbWFsbG9jIChzaXplb2Yoc3RydWN0IGVkZ2Vwb3J0X3BvcnQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGVkZ2VfcG9ydCA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQkJZ290byBjbGVhbnVwOworCQl9CisJCW1lbXNldCAoZWRnZV9wb3J0LCAwLCBzaXplb2Yoc3RydWN0IGVkZ2Vwb3J0X3BvcnQpKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmVkZ2VfcG9ydC0+ZXBfbG9jayk7CisJCWVkZ2VfcG9ydC0+ZXBfb3V0X2J1ZiA9IGVkZ2VfYnVmX2FsbG9jKEVER0VfT1VUX0JVRl9TSVpFKTsKKwkJaWYgKGVkZ2VfcG9ydC0+ZXBfb3V0X2J1ZiA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQkJa2ZyZWUoZWRnZV9wb3J0KTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQllZGdlX3BvcnQtPnBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCWVkZ2VfcG9ydC0+ZWRnZV9zZXJpYWwgPSBlZGdlX3NlcmlhbDsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgZWRnZV9wb3J0KTsKKwkJZWRnZV9wb3J0LT5iVWFydE1vZGUgPSAwOwkvKiBEZWZhdWx0IGlzIFJTMjMyICovCisJfQorCQorCXJldHVybiAwOworCitjbGVhbnVwOgorCWZvciAoLS1pOyBpPj0wOyAtLWkpIHsKKwkJZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSk7CisJCWVkZ2VfYnVmX2ZyZWUoZWRnZV9wb3J0LT5lcF9vdXRfYnVmKTsKKwkJa2ZyZWUoZWRnZV9wb3J0KTsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CisJfQorCWtmcmVlIChlZGdlX3NlcmlhbCk7CisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIE5VTEwpOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBlZGdlX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCBpOworCXN0cnVjdCBlZGdlcG9ydF9wb3J0ICplZGdlX3BvcnQ7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlmb3IgKGk9MDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJZWRnZV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSk7CisJCWlmIChlZGdlX3BvcnQpIHsKKwkJCWVkZ2VfYnVmX2ZyZWUoZWRnZV9wb3J0LT5lcF9vdXRfYnVmKTsKKwkJCWtmcmVlKGVkZ2VfcG9ydCk7CisJCX0KKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CisJfQorCWtmcmVlICh1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCkpOworCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCBOVUxMKTsKK30KKworCisvKiBDaXJjdWxhciBCdWZmZXIgKi8KKworLyoKKyAqIGVkZ2VfYnVmX2FsbG9jCisgKgorICogQWxsb2NhdGUgYSBjaXJjdWxhciBidWZmZXIgYW5kIGFsbCBhc3NvY2lhdGVkIG1lbW9yeS4KKyAqLworCitzdGF0aWMgc3RydWN0IGVkZ2VfYnVmICplZGdlX2J1Zl9hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgZWRnZV9idWYgKmViOworCisKKwlpZiAoc2l6ZSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWViID0gKHN0cnVjdCBlZGdlX2J1ZiAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBlZGdlX2J1ZiksIEdGUF9LRVJORUwpOworCWlmIChlYiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWViLT5idWZfYnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoZWItPmJ1Zl9idWYgPT0gTlVMTCkgeworCQlrZnJlZShlYik7CisJCXJldHVybiBOVUxMOworCX0KKworCWViLT5idWZfc2l6ZSA9IHNpemU7CisJZWItPmJ1Zl9nZXQgPSBlYi0+YnVmX3B1dCA9IGViLT5idWZfYnVmOworCisJcmV0dXJuIGViOworfQorCisKKy8qCisgKiBlZGdlX2J1Zl9mcmVlCisgKgorICogRnJlZSB0aGUgYnVmZmVyIGFuZCBhbGwgYXNzb2NpYXRlZCBtZW1vcnkuCisgKi8KKwordm9pZCBlZGdlX2J1Zl9mcmVlKHN0cnVjdCBlZGdlX2J1ZiAqZWIpCit7CisJaWYgKGViICE9IE5VTEwpIHsKKwkJaWYgKGViLT5idWZfYnVmICE9IE5VTEwpCisJCQlrZnJlZShlYi0+YnVmX2J1Zik7CisJCWtmcmVlKGViKTsKKwl9Cit9CisKKworLyoKKyAqIGVkZ2VfYnVmX2NsZWFyCisgKgorICogQ2xlYXIgb3V0IGFsbCBkYXRhIGluIHRoZSBjaXJjdWxhciBidWZmZXIuCisgKi8KKworc3RhdGljIHZvaWQgZWRnZV9idWZfY2xlYXIoc3RydWN0IGVkZ2VfYnVmICplYikKK3sKKyAgICAgICAgaWYgKGViICE9IE5VTEwpCisgICAgICAgICAgICAgICAgZWItPmJ1Zl9nZXQgPSBlYi0+YnVmX3B1dDsKKyAgICAgICAgICAgICAgICAvKiBlcXVpdmFsZW50IHRvIGEgZ2V0IG9mIGFsbCBkYXRhIGF2YWlsYWJsZSAqLworfQorCisKKy8qCisgKiBlZGdlX2J1Zl9kYXRhX2F2YWlsCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgZGF0YSBhdmFpbGFibGUgaW4gdGhlIGNpcmN1bGFyCisgKiBidWZmZXIuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBlZGdlX2J1Zl9kYXRhX2F2YWlsKHN0cnVjdCBlZGdlX2J1ZiAqZWIpCit7CisJaWYgKGViICE9IE5VTEwpCisJCXJldHVybiAoKGViLT5idWZfc2l6ZSArIGViLT5idWZfcHV0IC0gZWItPmJ1Zl9nZXQpICUgZWItPmJ1Zl9zaXplKTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisKKy8qCisgKiBlZGdlX2J1Zl9zcGFjZV9hdmFpbAorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgY2lyY3VsYXIKKyAqIGJ1ZmZlci4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGVkZ2VfYnVmX3NwYWNlX2F2YWlsKHN0cnVjdCBlZGdlX2J1ZiAqZWIpCit7CisJaWYgKGViICE9IE5VTEwpCisJCXJldHVybiAoKGViLT5idWZfc2l6ZSArIGViLT5idWZfZ2V0IC0gZWItPmJ1Zl9wdXQgLSAxKSAlIGViLT5idWZfc2l6ZSk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworCisvKgorICogZWRnZV9idWZfcHV0CisgKgorICogQ29weSBkYXRhIGRhdGEgZnJvbSBhIHVzZXIgYnVmZmVyIGFuZCBwdXQgaXQgaW50byB0aGUgY2lyY3VsYXIgYnVmZmVyLgorICogUmVzdHJpY3QgdG8gdGhlIGFtb3VudCBvZiBzcGFjZSBhdmFpbGFibGUuCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZWRnZV9idWZfcHV0KHN0cnVjdCBlZGdlX2J1ZiAqZWIsIGNvbnN0IGNoYXIgKmJ1ZiwKKwl1bnNpZ25lZCBpbnQgY291bnQpCit7CisJdW5zaWduZWQgaW50IGxlbjsKKworCisJaWYgKGViID09IE5VTEwpCisJCXJldHVybiAwOworCisJbGVuICA9IGVkZ2VfYnVmX3NwYWNlX2F2YWlsKGViKTsKKwlpZiAoY291bnQgPiBsZW4pCisJCWNvdW50ID0gbGVuOworCisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOworCisJbGVuID0gZWItPmJ1Zl9idWYgKyBlYi0+YnVmX3NpemUgLSBlYi0+YnVmX3B1dDsKKwlpZiAoY291bnQgPiBsZW4pIHsKKwkJbWVtY3B5KGViLT5idWZfcHV0LCBidWYsIGxlbik7CisJCW1lbWNweShlYi0+YnVmX2J1ZiwgYnVmK2xlbiwgY291bnQgLSBsZW4pOworCQllYi0+YnVmX3B1dCA9IGViLT5idWZfYnVmICsgY291bnQgLSBsZW47CisJfSBlbHNlIHsKKwkJbWVtY3B5KGViLT5idWZfcHV0LCBidWYsIGNvdW50KTsKKwkJaWYgKGNvdW50IDwgbGVuKQorCQkJZWItPmJ1Zl9wdXQgKz0gY291bnQ7CisJCWVsc2UgLyogY291bnQgPT0gbGVuICovCisJCQllYi0+YnVmX3B1dCA9IGViLT5idWZfYnVmOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworCisvKgorICogZWRnZV9idWZfZ2V0CisgKgorICogR2V0IGRhdGEgZnJvbSB0aGUgY2lyY3VsYXIgYnVmZmVyIGFuZCBjb3B5IHRvIHRoZSBnaXZlbiBidWZmZXIuCisgKiBSZXN0cmljdCB0byB0aGUgYW1vdW50IG9mIGRhdGEgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGVkZ2VfYnVmX2dldChzdHJ1Y3QgZWRnZV9idWYgKmViLCBjaGFyICpidWYsCisJdW5zaWduZWQgaW50IGNvdW50KQoreworCXVuc2lnbmVkIGludCBsZW47CisKKworCWlmIChlYiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IGVkZ2VfYnVmX2RhdGFfYXZhaWwoZWIpOworCWlmIChjb3VudCA+IGxlbikKKwkJY291bnQgPSBsZW47CisKKwlpZiAoY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBlYi0+YnVmX2J1ZiArIGViLT5idWZfc2l6ZSAtIGViLT5idWZfZ2V0OworCWlmIChjb3VudCA+IGxlbikgeworCQltZW1jcHkoYnVmLCBlYi0+YnVmX2dldCwgbGVuKTsKKwkJbWVtY3B5KGJ1ZitsZW4sIGViLT5idWZfYnVmLCBjb3VudCAtIGxlbik7CisJCWViLT5idWZfZ2V0ID0gZWItPmJ1Zl9idWYgKyBjb3VudCAtIGxlbjsKKwl9IGVsc2UgeworCQltZW1jcHkoYnVmLCBlYi0+YnVmX2dldCwgY291bnQpOworCQlpZiAoY291bnQgPCBsZW4pCisJCQllYi0+YnVmX2dldCArPSBjb3VudDsKKwkJZWxzZSAvKiBjb3VudCA9PSBsZW4gKi8KKwkJCWViLT5idWZfZ2V0ID0gZWItPmJ1Zl9idWY7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBlZGdlcG9ydF8xcG9ydF9kZXZpY2UgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJCT0gIkVkZ2Vwb3J0IFRJIDEgcG9ydCBhZGFwdGVyIiwKKwkuc2hvcnRfbmFtZQkJPSAiZWRnZXBvcnRfdGlfMSIsCisJLmlkX3RhYmxlCQk9IGVkZ2Vwb3J0XzFwb3J0X2lkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luCT0gMSwKKwkubnVtX2J1bGtfaW4JCT0gMSwKKwkubnVtX2J1bGtfb3V0CQk9IDEsCisJLm51bV9wb3J0cwkJPSAxLAorCS5vcGVuCQkJPSBlZGdlX29wZW4sCisJLmNsb3NlCQkJPSBlZGdlX2Nsb3NlLAorCS50aHJvdHRsZQkJPSBlZGdlX3Rocm90dGxlLAorCS51bnRocm90dGxlCQk9IGVkZ2VfdW50aHJvdHRsZSwKKwkuYXR0YWNoCQkJPSBlZGdlX3N0YXJ0dXAsCisJLnNodXRkb3duCQk9IGVkZ2Vfc2h1dGRvd24sCisJLmlvY3RsCQkJPSBlZGdlX2lvY3RsLAorCS5zZXRfdGVybWlvcwkJPSBlZGdlX3NldF90ZXJtaW9zLAorCS50aW9jbWdldAkJPSBlZGdlX3Rpb2NtZ2V0LAorCS50aW9jbXNldAkJPSBlZGdlX3Rpb2Ntc2V0LAorCS53cml0ZQkJCT0gZWRnZV93cml0ZSwKKwkud3JpdGVfcm9vbQkJPSBlZGdlX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlcgk9IGVkZ2VfY2hhcnNfaW5fYnVmZmVyLAorCS5icmVha19jdGwJCT0gZWRnZV9icmVhaywKKwkucmVhZF9pbnRfY2FsbGJhY2sJPSBlZGdlX2ludGVycnVwdF9jYWxsYmFjaywKKwkucmVhZF9idWxrX2NhbGxiYWNrCT0gZWRnZV9idWxrX2luX2NhbGxiYWNrLAorCS53cml0ZV9idWxrX2NhbGxiYWNrCT0gZWRnZV9idWxrX291dF9jYWxsYmFjaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBlZGdlcG9ydF8ycG9ydF9kZXZpY2UgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJCT0gIkVkZ2Vwb3J0IFRJIDIgcG9ydCBhZGFwdGVyIiwKKwkuc2hvcnRfbmFtZQkJPSAiZWRnZXBvcnRfdGlfMiIsCisJLmlkX3RhYmxlCQk9IGVkZ2Vwb3J0XzJwb3J0X2lkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luCT0gMSwKKwkubnVtX2J1bGtfaW4JCT0gMiwKKwkubnVtX2J1bGtfb3V0CQk9IDIsCisJLm51bV9wb3J0cwkJPSAyLAorCS5vcGVuCQkJPSBlZGdlX29wZW4sCisJLmNsb3NlCQkJPSBlZGdlX2Nsb3NlLAorCS50aHJvdHRsZQkJPSBlZGdlX3Rocm90dGxlLAorCS51bnRocm90dGxlCQk9IGVkZ2VfdW50aHJvdHRsZSwKKwkuYXR0YWNoCQkJPSBlZGdlX3N0YXJ0dXAsCisJLnNodXRkb3duCQk9IGVkZ2Vfc2h1dGRvd24sCisJLmlvY3RsCQkJPSBlZGdlX2lvY3RsLAorCS5zZXRfdGVybWlvcwkJPSBlZGdlX3NldF90ZXJtaW9zLAorCS50aW9jbWdldAkJPSBlZGdlX3Rpb2NtZ2V0LAorCS50aW9jbXNldAkJPSBlZGdlX3Rpb2Ntc2V0LAorCS53cml0ZQkJCT0gZWRnZV93cml0ZSwKKwkud3JpdGVfcm9vbQkJPSBlZGdlX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlcgk9IGVkZ2VfY2hhcnNfaW5fYnVmZmVyLAorCS5icmVha19jdGwJCT0gZWRnZV9icmVhaywKKwkucmVhZF9pbnRfY2FsbGJhY2sJPSBlZGdlX2ludGVycnVwdF9jYWxsYmFjaywKKwkucmVhZF9idWxrX2NhbGxiYWNrCT0gZWRnZV9idWxrX2luX2NhbGxiYWNrLAorCS53cml0ZV9idWxrX2NhbGxiYWNrCT0gZWRnZV9idWxrX291dF9jYWxsYmFjaywKK307CisKKworc3RhdGljIGludCBfX2luaXQgZWRnZXBvcnRfaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmZWRnZXBvcnRfMXBvcnRfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF8xcG9ydF9kZXZpY2VfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmZWRnZXBvcnRfMnBvcnRfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF8ycG9ydF9kZXZpY2VfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZpb19kcml2ZXIpOworCWlmIChyZXR2YWwpIAorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiAwOworZmFpbGVkX3VzYl9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmVkZ2Vwb3J0XzJwb3J0X2RldmljZSk7CitmYWlsZWRfMnBvcnRfZGV2aWNlX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmZWRnZXBvcnRfMXBvcnRfZGV2aWNlKTsKK2ZhaWxlZF8xcG9ydF9kZXZpY2VfcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGVkZ2Vwb3J0X2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZpb19kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmVkZ2Vwb3J0XzFwb3J0X2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmZWRnZXBvcnRfMnBvcnRfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoZWRnZXBvcnRfaW5pdCk7Cittb2R1bGVfZXhpdChlZGdlcG9ydF9leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKKworbW9kdWxlX3BhcmFtKGxvd19sYXRlbmN5LCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGxvd19sYXRlbmN5LCAiTG93IGxhdGVuY3kgZW5hYmxlZCBvciBub3QiKTsKKworbW9kdWxlX3BhcmFtKGNsb3Npbmdfd2FpdCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGNsb3Npbmdfd2FpdCwgIk1heGltdW0gd2FpdCBmb3IgZGF0YSB0byBkcmFpbiwgaW4gLjAxIHNlY3MiKTsKKworbW9kdWxlX3BhcmFtKGlnbm9yZV9jcHVfcmV2LCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGlnbm9yZV9jcHVfcmV2LCAiSWdub3JlIHRoZSBjcHUgcmV2aXNpb24gd2hlbiBjb25uZWN0aW5nIHRvIGEgZGV2aWNlIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiODRmMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5oCkBAIC0wLDAgKzEsMTgwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIAorICoKKyAqCUNvcHlyaWdodCAoQykgMTk5Ny0yMDAyIEluc2lkZSBPdXQgTmV0d29ya3MsIEluYy4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqCisgKglGZWItMTYtMjAwMQlETUkJQWRkZWQgSTJDIHN0cnVjdHVyZSBkZWZpbml0aW9ucworICoJTWF5LTI5LTIwMDIJZ2toCVBvcnRlZCB0byBMaW51eAorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9JT19USV9IXworI2RlZmluZSBfSU9fVElfSF8KKworLyogQWRkcmVzcyBTcGFjZSAqLworI2RlZmluZSBEVEtfQUREUl9TUEFDRV9YREFUQQkJMHgwMwkvKiBBZGRyIGlzIHBsYWNlZCBpbiBYREFUQSBzcGFjZSAqLworI2RlZmluZSBEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSQkweDgyCS8qIEFkZHIgaXMgcGxhY2VkIGluIEkyQyBhcmVhICovCisjZGVmaW5lIERUS19BRERSX1NQQUNFX0kyQ19UWVBFX0lJSQkweDgzCS8qIEFkZHIgaXMgcGxhY2VkIGluIEkyQyBhcmVhICovCisKKy8vIFVBUlQgRGVmaW5lcworI2RlZmluZSBVTVBNRU1fQkFTRV9VQVJUMQkJMHhGRkEwICAvKiBVTVAgVUFSVDEgYmFzZSBhZGRyZXNzICAgICAgICAgICovCisjZGVmaW5lIFVNUE1FTV9CQVNFX1VBUlQyCQkweEZGQjAgIC8qIFVNUCBVQVJUMiBiYXNlIGFkZHJlc3MgICAgICAgICAgKi8KKyNkZWZpbmUgVU1QTUVNX09GRlNfVUFSVF9MU1IJCTB4MDUgICAgLyogVU1QIFVBUlQgTFNSIHJlZ2lzdGVyIG9mZnNldCAgICAqLworCisvKiBCaXRzIHBlciBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgVU1QX1VBUlRfQ0hBUjVCSVRTCQkweDAwCisjZGVmaW5lIFVNUF9VQVJUX0NIQVI2QklUUwkJMHgwMQorI2RlZmluZSBVTVBfVUFSVF9DSEFSN0JJVFMJCTB4MDIKKyNkZWZpbmUgVU1QX1VBUlRfQ0hBUjhCSVRTCQkweDAzCisKKy8qIFBhcml0eSAqLworI2RlZmluZSBVTVBfVUFSVF9OT1BBUklUWQkJMHgwMAorI2RlZmluZSBVTVBfVUFSVF9PRERQQVJJVFkJCTB4MDEKKyNkZWZpbmUgVU1QX1VBUlRfRVZFTlBBUklUWQkJMHgwMgorI2RlZmluZSBVTVBfVUFSVF9NQVJLUEFSSVRZCQkweDAzCisjZGVmaW5lIFVNUF9VQVJUX1NQQUNFUEFSSVRZCQkweDA0CisKKy8qIFN0b3AgYml0cyAqLworI2RlZmluZSBVTVBfVUFSVF9TVE9QQklUMQkJMHgwMAorI2RlZmluZSBVTVBfVUFSVF9TVE9QQklUMTUJCTB4MDEKKyNkZWZpbmUgVU1QX1VBUlRfU1RPUEJJVDIJCTB4MDIKKworLyogTGluZSBzdGF0dXMgcmVnaXN0ZXIgbWFza3MgKi8KKyNkZWZpbmUgVU1QX1VBUlRfTFNSX09WX01BU0sJCTB4MDEKKyNkZWZpbmUgVU1QX1VBUlRfTFNSX1BFX01BU0sJCTB4MDIKKyNkZWZpbmUgVU1QX1VBUlRfTFNSX0ZFX01BU0sJCTB4MDQKKyNkZWZpbmUgVU1QX1VBUlRfTFNSX0JSX01BU0sJCTB4MDgKKyNkZWZpbmUgVU1QX1VBUlRfTFNSX0VSX01BU0sJCTB4MEYKKyNkZWZpbmUgVU1QX1VBUlRfTFNSX1JYX01BU0sJCTB4MTAKKyNkZWZpbmUgVU1QX1VBUlRfTFNSX1RYX01BU0sJCTB4MjAKKworI2RlZmluZSBVTVBfVUFSVF9MU1JfREFUQV9NQVNLCQkoIExTUl9QQVJfRVJSIHwgTFNSX0ZSTV9FUlIgfCBMU1JfQlJFQUsgKQorCisvKiBQb3J0IFNldHRpbmdzIENvbnN0YW50cykgKi8KKyNkZWZpbmUgVU1QX01BU0tfVUFSVF9GTEFHU19SVFNfRkxPVwkJMHgwMDAxCisjZGVmaW5lIFVNUF9NQVNLX1VBUlRfRkxBR1NfUlRTX0RJU0FCTEUJCTB4MDAwMgorI2RlZmluZSBVTVBfTUFTS19VQVJUX0ZMQUdTX1BBUklUWQkJMHgwMDA4CisjZGVmaW5lIFVNUF9NQVNLX1VBUlRfRkxBR1NfT1VUX1hfRFNSX0ZMT1cJMHgwMDEwCisjZGVmaW5lIFVNUF9NQVNLX1VBUlRfRkxBR1NfT1VUX1hfQ1RTX0ZMT1cJMHgwMDIwCisjZGVmaW5lIFVNUF9NQVNLX1VBUlRfRkxBR1NfT1VUX1gJCTB4MDA0MAorI2RlZmluZSBVTVBfTUFTS19VQVJUX0ZMQUdTX09VVF9YQQkJMHgwMDgwCisjZGVmaW5lIFVNUF9NQVNLX1VBUlRfRkxBR1NfSU5fWAkJMHgwMTAwCisjZGVmaW5lIFVNUF9NQVNLX1VBUlRfRkxBR1NfRFRSX0ZMT1cJCTB4MDgwMAorI2RlZmluZSBVTVBfTUFTS19VQVJUX0ZMQUdTX0RUUl9ESVNBQkxFCQkweDEwMDAKKyNkZWZpbmUgVU1QX01BU0tfVUFSVF9GTEFHU19SRUNFSVZFX01TX0lOVAkweDIwMDAKKyNkZWZpbmUgVU1QX01BU0tfVUFSVF9GTEFHU19BVVRPX1NUQVJUX09OX0VSUgkweDQwMDAKKworI2RlZmluZSBVTVBfRE1BX01PREVfQ09OVElOT1VTCQkJMHgwMQorI2RlZmluZSBVTVBfUElQRV9UUkFOU19USU1FT1VUX0VOQQkJMHg4MAorI2RlZmluZSBVTVBfUElQRV9UUkFOU0ZFUl9NT0RFX01BU0sJCTB4MDMKKyNkZWZpbmUgVU1QX1BJUEVfVFJBTlNfVElNRU9VVF9NQVNLCQkweDdDCisKKy8qIFB1cmdlIHBvcnQgRGlyZWN0aW9uIE1hc2sgQml0cyAqLworI2RlZmluZSBVTVBfUE9SVF9ESVJfT1VUCQkJMHgwMQorI2RlZmluZSBVTVBfUE9SVF9ESVJfSU4JCQkJMHgwMgorCisvLyBBZGRyZXNzIG9mIFBvcnQgMAorI2RlZmluZSBVTVBNX1VBUlQxX1BPUlQgIAkJCTB4MDMKKworLy8gQ29tbWFuZHMKKyNkZWZpbmUJVU1QQ19TRVRfQ09ORklHIAkJMHgwNQorI2RlZmluZQlVTVBDX09QRU5fUE9SVCAgCQkweDA2CisjZGVmaW5lCVVNUENfQ0xPU0VfUE9SVCAJCTB4MDcKKyNkZWZpbmUJVU1QQ19TVEFSVF9QT1JUIAkJMHgwOAorI2RlZmluZQlVTVBDX1NUT1BfUE9SVCAgCQkweDA5CisjZGVmaW5lCVVNUENfVEVTVF9QT1JUICAJCTB4MEEKKyNkZWZpbmUJVU1QQ19QVVJHRV9QT1JUIAkJMHgwQgorCisjZGVmaW5lCVVNUENfQ09NUExFVEVfUkVBRAkJMHg4MAkvLyBGb3JjZSB0aGUgRmlybXdhcmUgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgUmVhZAorI2RlZmluZQlVTVBDX0hBUkRXQVJFX1JFU0VUCQkweDgxCS8vIEZvcmNlIFVNUCBiYWNrIGludG8gQk9PVCBNb2RlCisjZGVmaW5lCVVNUENfQ09QWV9ETkxEX1RPX0kyQwkJMHg4MgkvLyBDb3B5IGN1cnJlbnQgZG93bmxvYWQgaW1hZ2UgdG8gdHlwZSAweGYyIHJlY29yZCBpbiAxNmsgSTJDCisJCQkJCQkvLyBmaXJtd2FyZSB3aWxsIGNoYW5nZSAweGZmIHJlY29yZCB0byB0eXBlIDIgcmVjb3JkIHdoZW4gY29tcGxldGUKKworCS8vIFNwZWNpYWwgZnVuY3Rpb24gcmVnaXN0ZXIgY29tbWFuZHMKKwkvLyB3SW5kZXggaXMgcmVnaXN0ZXIgYWRkcmVzcworCS8vIHdWYWx1ZSBpcyBNU0IvTFNCIG1hc2svZGF0YQorI2RlZmluZQlVTVBDX1dSSVRFX1NGUgkgIAkJMHg4MwkvLyBXcml0ZSBTRlIgUmVnaXN0ZXIKKworCS8vIHdJbmRleCBpcyByZWdpc3RlciBhZGRyZXNzCisjZGVmaW5lCVVNUENfUkVBRF9TRlIJICAJCTB4ODQJLy8gUmVhZCBTUkYgUmVnaXN0ZXIKKworCS8vIFNldCBvciBDbGVhciBEVFIgKHdWYWx1ZSBiaXQgMCBTZXQvQ2xlYXIpCQl3SW5kZXggTW9kdWxlSUQgKHBvcnQpCisjZGVmaW5lCVVNUENfU0VUX0NMUl9EVFIJCTB4ODUKKworCS8vIFNldCBvciBDbGVhciBSVFMgKHdWYWx1ZSBiaXQgMCBTZXQvQ2xlYXIpCQl3SW5kZXggTW9kdWxlSUQgKHBvcnQpCisjZGVmaW5lCVVNUENfU0VUX0NMUl9SVFMJCTB4ODYKKworCS8vIFNldCBvciBDbGVhciBMT09QQkFDSyAod1ZhbHVlIGJpdCAwIFNldC9DbGVhcikJd0luZGV4IE1vZHVsZUlEIChwb3J0KQorI2RlZmluZQlVTVBDX1NFVF9DTFJfTE9PUEJBQ0sJCTB4ODcKKworCS8vIFNldCBvciBDbGVhciBCUkVBSyAod1ZhbHVlIGJpdCAwIFNldC9DbGVhcikJCXdJbmRleCBNb2R1bGVJRCAocG9ydCkKKyNkZWZpbmUJVU1QQ19TRVRfQ0xSX0JSRUFLCQkweDg4CisKKwkvLyBSZWFkIE1TUiB3SW5kZXggTW9kdWxlSUQgKHBvcnQpCisjZGVmaW5lCVVNUENfUkVBRF9NU1IJCQkweDg5CisKKwkvKiBUb29sa2l0IGNvbW1hbmRzICovCisJLyogUmVhZC13cml0ZSBncm91cCAqLworI2RlZmluZQlVTVBDX01FTU9SWV9SRUFEICAgCQkweDkyCisjZGVmaW5lCVVNUENfTUVNT1JZX1dSSVRFICAJCTB4OTMKKworLyoKKyAqCVVNUCBETUEgRGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBVTVBEX09FREIxX0FERFJFU1MJCTB4RkYwOAorI2RlZmluZSBVTVBEX09FREIyX0FERFJFU1MJCTB4RkYxMAorCitzdHJ1Y3Qgb3V0X2VuZHBvaW50X2Rlc2NfYmxvY2sKK3sKKwlfX3U4IENvbmZpZ3VyYXRpb247CisJX191OCBYQnVmQWRkcjsKKwlfX3U4IFhCeXRlQ291bnQ7CisJX191OCBVbnVzZWQxOworCV9fdTggVW51c2VkMjsKKwlfX3U4IFlCdWZBZGRyOworCV9fdTggWUJ5dGVDb3VudDsKKwlfX3U4IEJ1ZmZlclNpemU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKKy8qCisgKiBUWVBFIERFRklOSVRJT05TCisgKiBTdHJ1Y3R1cmVzIGZvciBGaXJtd2FyZSBjb21tYW5kcworICovCitzdHJ1Y3QgdW1wX3VhcnRfY29uZmlnCQkvKiBVQVJUIHNldHRpbmdzICAgICAgICAgICAgICAgICAgICAqLworeworCV9fdTE2IHdCYXVkUmF0ZTsJLyogQmF1ZCByYXRlICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlfX3UxNiB3RmxhZ3M7CQkvKiBCaXRtYXAgbWFzayBvZiBmbGFncyAgICAgICAgICAgICAqLworCV9fdTggYkRhdGFCaXRzOwkJLyogNS4uOCAtIGRhdGEgYml0cyBwZXIgY2hhcmFjdGVyICAgKi8KKwlfX3U4IGJQYXJpdHk7CQkvKiBQYXJpdHkgc2V0dGluZ3MgICAgICAgICAgICAgICAgICAqLworCV9fdTggYlN0b3BCaXRzOwkJLyogU3RvcCBiaXRzIHNldHRpbmdzICAgICAgICAgICAgICAgKi8KKwljaGFyIGNYb247CQkvKiBYT04gY2hhcmFjdGVyICAgICAgICAgICAgICAgICAgICAqLworCWNoYXIgY1hvZmY7CQkvKiBYT0ZGIGNoYXJhY3RlciAgICAgICAgICAgICAgICAgICAqLworCV9fdTggYlVhcnRNb2RlOwkJLyogV2lsbCBiZSB1cGRhdGVkIHdoZW4gYSB1c2VyICAgICAgKi8KKwkJCQkvKiBpbnRlcmZhY2UgaXMgZGVmaW5lZCAgICAgICAgICAgICAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvKgorICogVFlQRSBERUZJTklUSU9OUworICogU3RydWN0dXJlcyBmb3IgVVNCIGludGVycnVwdHMKKyAqLworc3RydWN0IHVtcF9pbnRlcnJ1cHQJCQkvKiBJbnRlcnJ1cHQgcGFja2V0IHN0cnVjdHVyZSAgICAgICAqLworeworCV9fdTggYklDb2RlOwkJCS8qIEludGVycnVwdCBjb2RlIChpbnRlcnJ1cHQgbnVtKSAgICovCisJX191OCBiSUluZm87CQkJLyogSW50ZXJydXB0IGluZm9ybWF0aW9uICAgICAgICAgICAgKi8KK30gIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKKyNkZWZpbmUgVElVTVBfR0VUX1BPUlRfRlJPTV9DT0RFKGMpCSgoKGMpID4+IDQpIC0gMykKKyNkZWZpbmUgVElVTVBfR0VUX0ZVTkNfRlJPTV9DT0RFKGMpCSgoYykgJiAweDBmKQorI2RlZmluZSBUSVVNUF9JTlRFUlJVUFRfQ09ERV9MU1IJMHgwMworI2RlZmluZSBUSVVNUF9JTlRFUlJVUFRfQ09ERV9NU1IJMHgwNAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb191c2J2ZW5kLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdXNidmVuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMWZhNWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdXNidmVuZC5oCkBAIC0wLDAgKzEsNjg3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoJVVNCVkVORC5ICQlWZW5kb3Itc3BlY2lmaWMgVVNCIGRlZmluaXRpb25zCisgKgorICoJTk9URTogVGhpcyBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBFZGdlcG9ydCBmaXJtd2FyZSBhbmQKKyAqCW11c3QgYmUga2VwdCBiYWNrd2FyZC1jb21wYXRpYmxlIHdpdGggb2xkZXIgZmlybXdhcmUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCUNvcHlyaWdodCAoQykgMTk5OCBJbnNpZGUgT3V0IE5ldHdvcmtzLCBJbmMuCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiAhZGVmaW5lZChfVVNCVkVORF9IKQorI2RlZmluZQlfVVNCVkVORF9ICisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKgkJRCBlIGYgaSBuIGUgcyAgIC8gICBUIHkgcCBlIGQgZSBmIHMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLworLy8gRGVmaW5pdGlvbnMgb2YgVVNCIHByb2R1Y3QgSURzCisvLyAKKworI2RlZmluZQlVU0JfVkVORE9SX0lEX0lPTgkweDE2MDgJCS8vIE91ciBWSUQKKyNkZWZpbmUJVVNCX1ZFTkRPUl9JRF9USQkweDA0NTEJCS8vIFRJIFZJRAorCisvLworLy8gRGVmaW5pdGlvbnMgb2YgVVNCIHByb2R1Y3QgSURzIChQSUQpCisvLyBXZSBicmVhayB0aGUgVVNCLWRlZmluZWQgUElEIGludG8gYW4gT0VNIElkIGZpZWxkICh1cHBlciA2IGJpdHMpCisvLyBhbmQgYSBEZXZpY2UgSWQgKGJvdHRvbSAxMCBiaXRzKS4gVGhlIERldmljZSBJZCBkZWZpbmVzIHdoYXQKKy8vIGRldmljZSB0aGlzIGFjdHVhbGx5IGlzIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB0aGUgT0VNIHdhbnRzIHRvCisvLyBjYWxsIGl0LgorLy8KKworLy8gSU9OLWRldmljZSBPRU0gSURzCisjZGVmaW5lCUlPTl9PRU1fSURfSU9OCQkwCQkvLyAwMGggSW5zaWRlIE91dCBOZXR3b3JrcworI2RlZmluZQlJT05fT0VNX0lEX05MWU5YCTEJCS8vIDAxaCBOTHlueCBTeXN0ZW1zCisjZGVmaW5lCUlPTl9PRU1fSURfR0VORVJJQwkyCQkvLyAwMmggR2VuZXJpYyBPRU0KKyNkZWZpbmUJSU9OX09FTV9JRF9NQUMJCTMJCS8vIDAzaCBNYWMgVmVyc2lvbgorI2RlZmluZQlJT05fT0VNX0lEX01FR0FXT0xGCTQJCS8vIDA0aCBMdXB1c2IgT0VNIE1hYyB2ZXJzaW9uIChNZWdhV29sZikKKyNkZWZpbmUJSU9OX09FTV9JRF9NVUxUSVRFQ0gJNQkJLy8gMDVoIE11bHRpdGVjaCBSYXBpZHBvcnRzCisjZGVmaW5lCUlPTl9PRU1fSURfQUdJTEVOVAk2CQkvLyAwNmggQUdJTEVOVCBib2FyZAorCisKKy8vIElPTi1kZXZpY2UgRGV2aWNlIElEcworLy8gUHJvZHVjdCBJRHMgLSBhc3NpZ25lZCB0byBtYXRjaCBtaWRkbGUgZGlnaXQgb2Ygc2VyaWFsIG51bWJlciAoTm8gbG9uZ2VyIHRydWUpCisKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF84MDI1MV9ORVRDSElQCTB4MDIwCS8vIFRoaXMgYml0IGlzIHNldCBpbiB0aGUgUElEIGlmIHRoaXMgZWRnZXBvcnQgaGFyZHdhcmUkCisJCQkJCQkvLyBpcyBiYXNlZCBvbiB0aGUgODAyNTErTmV0Y2hpcC4gIAorCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfR0VORVJBVElPTl8xCTB4MDAJLy8gVmFsdWUgZm9yIDkzMCBiYXNlZCBlZGdlcG9ydHMKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9HRU5FUkFUSU9OXzIJMHgwMQkvLyBWYWx1ZSBmb3IgODAyNTErTmV0Y2hpcC4KKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9HRU5FUkFUSU9OXzMJMHgwMgkvLyBWYWx1ZSBmb3IgVGV4YXMgSW5zdHJ1bWVudHMgVFVTQjUwNTIgY2hpcAorI2RlZmluZSBJT05fREVWSUNFX0lEX0dFTkVSQVRJT05fNAkweDAzCS8vIFdhdGNocG9ydCBGYW1pbHkgb2YgcHJvZHVjdHMKKyNkZWZpbmUgSU9OX0dFTkVSQVRJT05fTUFTSwkJMHgwMworCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfSFVCX01BU0sJCTB4MDA4MAkvLyBUaGlzIGJpdCBpbiB0aGUgUElEIGRlc2lnbmF0ZXMgYSBIVUIgZGV2aWNlCisJCQkJCQkvLyBmb3IgZXhhbXBsZSA4QyB3b3VsZCBiZSBhIDQyMSA0IHBvcnQgaHViCisJCQkJCQkvLyBhbmQgOEQgd291bGQgYmUgYSAyIHBvcnQgZW1iZWRkZWQgaHViCisKKyNkZWZpbmUgRURHRVBPUlRfREVWSUNFX0lEX01BU0sJCQkweDBmZgkvLyBOb3QgaW5jbHVkaW5nIE9FTSBvciBHRU5FUkFUSU9OIGZpZWxkcworCisjZGVmaW5lCUlPTl9ERVZJQ0VfSURfVU5DT05GSUdVUkVEX0VER0VfREVWSUNFCTB4MDAwCS8vIEluIG1hbnVmYWN0dXJpbmcgb25seQorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzQJCTB4MDAxCS8vIEVkZ2Vwb3J0LzQgUlMyMzIKKyNkZWZpbmUJSU9OX0RFVklDRV9JRF9FREdFUE9SVF84UgkJMHgwMDIJLy8gRWRnZXBvcnQgd2l0aCBSSjQ1IG5vIFJpbmcKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9SQVBJRFBPUlRfNAkJMHgwMDMJLy8gUmFwaWRwb3J0LzQKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80VAkJMHgwMDQJLy8gRWRnZXBvcnQvNCBSUzIzMiBmb3IgVGVseG9uIChha2EgIkZsZWV0cG9ydCIpCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMgkJMHgwMDUJLy8gRWRnZXBvcnQvMiBSUzIzMgorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzRJCQkweDAwNgkvLyBFZGdlcG9ydC80IFJTNDIyCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMkkJCTB4MDA3CS8vIEVkZ2Vwb3J0LzIgUlM0MjIvUlM0ODUKKyNkZWZpbmUJSU9OX0RFVklDRV9JRF9FREdFUE9SVF84UlIJCTB4MDA4CS8vIEVkZ2Vwb3J0IHdpdGggUko0NSB3aXRoIERhdGEgYW5kIFJUUy9DVFMgb25seQorLy8JSU9OX0RFVklDRV9JRF9FREdFUE9SVF84X0hBTkRCVUlMVAkweDAwOQkvLyBIYW5kLWJ1aWx0IEVkZ2Vwb3J0LzggKFBsYWNlaG9sZGVyLCB1c2VkIGluIG1pZGRsZSBkaWdpdCBvZiBzZXJpYWwgbnVtYmVyIG9ubHkhKQorLy8JSU9OX0RFVklDRV9JRF9NVUxUSU1PREVNXzRYNTYJCTB4MDBBCS8vIE11bHRpVGVjaCB2ZXJzaW9uIG9mIFJQLzQgKFBsYWNlaG9sZGVyLCB1c2VkIGluIG1pZGRsZSBkaWdpdCBvZiBzZXJpYWwgbnVtYmVyIG9ubHkhKQorI2RlZmluZQlJT05fREVWSUNFX0lEX0VER0VQT1JUX1BBUkFMTEVMX1BPUlQJMHgwMEIJLy8gRWRnZXBvcnQvKDQpMjEgUGFyYWxsZWwgcG9ydCAoVVNTNzIwKQorI2RlZmluZQlJT05fREVWSUNFX0lEX0VER0VQT1JUXzQyMQkJMHgwMEMJLy8gRWRnZXBvcnQvNDIxIEh1YitSUzIzMitQYXJhbGxlbAorI2RlZmluZQlJT05fREVWSUNFX0lEX0VER0VQT1JUXzIxCQkweDAwRAkvLyBFZGdlcG9ydC8yMSAgUlMyMzIrUGFyYWxsZWwKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF84X0RVQUxfQ1BVCTB4MDBFCS8vIEhhbGYgb2YgYW4gRWRnZXBvcnQvOCAodGhlIGtpbmQgd2l0aCAyIEVQLzRzIG9uIDEgUENCKQorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzgJCTB4MDBGCS8vIEVkZ2Vwb3J0LzggKHNpbmdsZS1DUFUpCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMl9ESU4JCTB4MDEwCS8vIEVkZ2Vwb3J0LzIgUlMyMzIgd2l0aCBBcHBsZSBESU4gY29ubmVjdG9yCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNF9ESU4JCTB4MDExCS8vIEVkZ2Vwb3J0LzQgUlMyMzIgd2l0aCBBcHBsZSBESU4gY29ubmVjdG9yCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMTZfRFVBTF9DUFUJMHgwMTIJLy8gSGFsZiBvZiBhbiBFZGdlcG9ydC8xNiAodGhlIGtpbmQgd2l0aCAyIEVQLzhzKQorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUX0NPTVBBVElCTEUJMHgwMTMJLy8gRWRnZXBvcnQgQ29tcGF0aWJsZSwgZm9yIE5DUiwgQXhpb2htIGV0Yy4gdGVzdGluZworI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzhJCQkweDAxNAkvLyBFZGdlcG9ydC84IFJTNDIyIChzaW5nbGUtQ1BVKQorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzEJCTB4MDE1CS8vIEVkZ2Vwb3J0LzEgUlMyMzIKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FUE9TNDQJCQkweDAxNgkvLyBIYWxmIG9mIGFuIEVQT1MvNDQgKFRJVU1QIEJBU0VEKQorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzQyCQkweDAxNwkvLyBFZGdlcG9ydC80MgorI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzQxMl84CQkweDAxOAkvLyBFZGdlcG9ydC80MTIgOCBwb3J0IHBhcnQKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80MTJfNAkJMHgwMTkJLy8gRWRnZXBvcnQvNDEyCTQgcG9ydCBwYXJ0CisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMjJJCQkweDAxQQkvLyBFZGdlcG9ydC8yMkkgaXMgYW4gRWRnZXBvcnQvNCB3aXRoIHBvcnRzIDEmMiBSUzQyMiBhbmQgcG9ydHMgMyY0IFJTMjMyCisKKy8vIENvbXBhY3QgRm9ybSBmYWN0b3IgVEkgYmFzZWQgZGV2aWNlcyAgMmMsIDIxYywgMjJjLCAyMjFjCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMkMJCTB4MDFCCS8vIEVkZ2Vwb3J0LzJjIGlzIGEgVEkgYmFzZWQgRWRnZXBvcnQvMiAtIFNtYWxsIEkyYworI2RlZmluZSBJT05fREVWSUNFX0lEX0VER0VQT1JUXzIyMUMJCTB4MDFDCS8vIEVkZ2Vwb3J0LzIyMWMgaXMgYSBUSSBiYXNlZCBFZGdlcG9ydC8yIHdpdGggbHVjZW50IGNoaXAgYW5kCisJCQkJCQkJLy8gMiBleHRlcm5hbCBodWIgcG9ydHMgLSBMYXJnZSBJMkMKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF8yMkMJCTB4MDFECS8vIEVkZ2Vwb3J0LzIyYyBpcyBhIFRJIGJhc2VkIEVkZ2Vwb3J0LzIgd2l0aAorCQkJCQkJCS8vIDIgZXh0ZXJuYWwgaHViIHBvcnRzIC0gTGFyZ2UgSTJDCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMjFDCQkweDAxRQkvLyBFZGdlcG9ydC8yMWMgaXMgYSBUSSBiYXNlZCBFZGdlcG9ydC8yIHdpdGggbHVjZW50IGNoaXAKKwkJCQkJCQkvLyBTbWFsbCBJMkMKKworCisvKgorICogIERBTkdFUiBEQU5HRVIgVGhlIDB4MjAgYml0IHdhcyB1c2VkIHRvIGluZGljYXRlIGEgODI1MS9uZXRjaGlwIEdFTiAyIGRldmljZS4KKyAqICBTaW5jZSB0aGUgTUFDLCBMaW51eCwgYW5kIE9wdGltYWwgZHJpdmVycyBzdGlsbCB1c2VkIHRoZSBvbGQgY29kZQorICogIEkgc3VnZ2VzdCB0aGF0IHlvdSBza2lwIHRoZSAweDIwIGJpdCB3aGVuIGNyZWF0aW5nIG5ldyBQSURzCisgKi8KKworCisvLyBHZW5lcmF0aW9uIDMgZGV2aWNlcyAtLSAzNDEwIGJhc2VkIGVkZ3BvcnQvMSAoMjU2IGJ5dGUgSTJDKQorI2RlZmluZSBJT05fREVWSUNFX0lEX1RJMzQxMF9FREdFUE9SVF8xCQkweDA0MAkvLyBFZGdlcG9ydC8xIFJTMjMyCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfVEkzNDEwX0VER0VQT1JUXzFJCTB4MDQxCS8vIEVkZ2Vwb3J0LzFpLSBSUzQyMiBtb2RlbAorCisvLyBUaSBiYXNlZCBzb2Z0d2FyZSBzd2l0Y2hhYmxlIFJTMjMyL1JTNDIyL1JTNDg1IGRldmljZXMKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80UwkJMHgwNDIJLy8gRWRnZXBvcnQvNHMgLSBzb2Z0d2FyZSBzd2l0Y2hhYmxlIG1vZGVsCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfOFMJCTB4MDQzCS8vIEVkZ2Vwb3J0LzhzIC0gc29mdHdhcmUgc3dpdGNoYWJsZSBtb2RlbAorCisvLyBVc2IgdG8gRXRoZXJuZXQgZG9uZ2xlCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfRQkJMHgwRTAJLy8gRWRnZXBvcnQvRSBVc2IgdG8gRXRoZXJuZXQKKworLy8gRWRnZXBvcnQgVEkgYmFzZWQgZGV2aWNlcworI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzQJCTB4MDIwMQkvLyBFZGdlcG9ydC80IFJTMjMyCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMgkJMHgwMjA1CS8vIEVkZ2Vwb3J0LzIgUlMyMzIKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF80SQkJMHgwMjA2CS8vIEVkZ2Vwb3J0LzRpIFJTNDIyCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMkkJCTB4MDIwNwkvLyBFZGdlcG9ydC8yaSBSUzQyMi9SUzQ4NQorI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzQyMQkJMHgwMjBDCS8vIEVkZ2Vwb3J0LzQyMSA0IGh1YiAyIFJTMjMyICsgUGFyYWxsZWwgKGx1Y2VudCBvbiBhIGRpZmZlcmVudCBodWIgcG9ydCkKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8yMQkJMHgwMjBECS8vIEVkZ2Vwb3J0LzIxIDIgUlMyMzIgKyBQYXJhbGxlbCAobHVjZW50IG9uIGEgZGlmZmVyZW50IGh1YiBwb3J0KQorI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzgJCTB4MDIwRgkvLyBFZGdlcG9ydC84IChzaW5nbGUtQ1BVKQorI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzEJCTB4MDIxNQkvLyBFZGdlcG9ydC8xIFJTMjMyCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfNDIJCTB4MDIxNwkvLyBFZGdlcG9ydC80MiA0IGh1YiAyIFJTMjMyCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMjJJICAJCTB4MDIxQQkvLyBFZGdlcG9ydC8yMkkgaXMgYW4gRWRnZXBvcnQvNCB3aXRoIHBvcnRzIDEmMiBSUzQyMiBhbmQgcG9ydHMgMyY0IFJTMjMyCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMkMJCTB4MDIxQgkvLyBFZGdlcG9ydC8yYyBSUzIzMgorI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzIyMUMJCTB4MDIxQwkvLyBFZGdlcG9ydC8yMjFjIGlzIGEgVEkgYmFzZWQgRWRnZXBvcnQvMiB3aXRoIGx1Y2VudCBjaGlwIGFuZAorCQkJCQkJCS8vIDIgZXh0ZXJuYWwgaHViIHBvcnRzIC0gTGFyZ2UgSTJDCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMjJDCQkweDAyMUQJLy8gRWRnZXBvcnQvMjJjIGlzIGEgVEkgYmFzZWQgRWRnZXBvcnQvMiB3aXRoCisJCQkJCQkJLy8gMiBleHRlcm5hbCBodWIgcG9ydHMgLSBMYXJnZSBJMkMKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8yMUMJCTB4MDIxRQkvLyBFZGdlcG9ydC8yMWMgaXMgYSBUSSBiYXNlZCBFZGdlcG9ydC8yIHdpdGggbHVjZW50IGNoaXAKKworLy8gR2VuZXJhdGlvbiAzIGRldmljZXMgLS0gMzQxMCBiYXNlZCBlZGdwb3J0LzEgKDI1NiBieXRlIEkyQykgCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfVElfVEkzNDEwX0VER0VQT1JUXzEJMHgyNDAJLy8gRWRnZXBvcnQvMSBSUzIzMgorI2RlZmluZSBJT05fREVWSUNFX0lEX1RJX1RJMzQxMF9FREdFUE9SVF8xSQkweDI0MQkvLyBFZGdlcG9ydC8xaS0gUlM0MjIgbW9kZWwKKworLy8gVGkgYmFzZWQgc29mdHdhcmUgc3dpdGNoYWJsZSBSUzIzMi9SUzQyMi9SUzQ4NSBkZXZpY2VzCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfNFMJCTB4MjQyCS8vIEVkZ2Vwb3J0LzRzIC0gc29mdHdhcmUgc3dpdGNoYWJsZSBtb2RlbAorI2RlZmluZSBJT05fREVWSUNFX0lEX0lUX0VER0VQT1JUXzhTCQkweDI0MwkvLyBFZGdlcG9ydC84cyAtIHNvZnR3YXJlIHN3aXRjaGFibGUgbW9kZWwKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0aW9uIDQgZGV2aWNlcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vIFdhdGNocG9ydCBiYXNlZCBvbiAzNDEwIGJvdGggMS13aXJlIGFuZCBiaW5hcnkgcHJvZHVjdHMgKDE2SyBJMkMpCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfV1BfVU5TRVJJQUxJWkVECQkweDMwMAkvLyBXYXRjaHBvcnQgYmFzZWQgb24gMzQxMCBib3RoIDEtd2lyZSBhbmQgYmluYXJ5IHByb2R1Y3RzCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfV1BfUFJPWElNSVRZCQkweDMwMQkvLyBXYXRjaHBvcnQvUCBEaXNjb250aW51ZWQKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9XUF9NT1RJT04JCQkweDMwMgkvLyBXYXRjaHBvcnQvTQorI2RlZmluZSBJT05fREVWSUNFX0lEX1dQX01PSVNUVVJFCQkweDMwMwkvLyBXYXRjaHBvcnQvVworI2RlZmluZSBJT05fREVWSUNFX0lEX1dQX1RFTVBFUkFUVVJFCQkweDMwNAkvLyBXYXRjaHBvcnQvVAorI2RlZmluZSBJT05fREVWSUNFX0lEX1dQX0hVTUlESVRZCQkweDMwNQkvLyBXYXRjaHBvcnQvSAorCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfV1BfUE9XRVIJCQkweDMwNgkvLyBXYXRjaHBvcnQKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9XUF9MSUdIVAkJCTB4MzA3CS8vIFdhdGNocG9ydAorI2RlZmluZSBJT05fREVWSUNFX0lEX1dQX1JBRElBVElPTgkJMHgzMDgJLy8gV2F0Y2hwb3J0CisjZGVmaW5lIElPTl9ERVZJQ0VfSURfV1BfQUNDRUxFUkFUSU9OCQkweDMwOQkvLyBXYXRjaHBvcnQvQQorI2RlZmluZSBJT05fREVWSUNFX0lEX1dQX0RJU1RBTkNFCQkweDMwQQkvLyBXYXRjaHBvcnQvRCBEaXNjb250aW51ZWQKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9XUF9QUk9YX0RJU1QJCTB4MzBCCS8vIFdhdGNocG9ydC9EIHVzZXMgZGlzdGFuY2Ugc2Vuc29yCisJCQkJCQkJLy8gRGVmYXVsdCB0byAvUCBmdW5jdGlvbgorCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfUExVU19QV1JfSFA0Q0QJCTB4MzBDCS8vIDUwNTIgUGx1cyBQb3dlciBIdWJQb3J0LzRDRCsgKGZvciBEZWxsKQorI2RlZmluZSBJT05fREVWSUNFX0lEX1BMVVNfUFdSX0hQNEMJCTB4MzBECS8vIDUwNTIgUGx1cyBQb3dlciBIdWJQb3J0LzRDKyAKKyNkZWZpbmUgSU9OX0RFVklDRV9JRF9QTFVTX1BXUl9QQ0kJCTB4MzBFCS8vIDM0MTAgUGx1cyBQb3dlciBQQ0kgSG9zdCBDb250cm9sbGVyIDQgcG9ydAorCisKKy8vCisvLyBEZWZpbml0aW9ucyBmb3IgQVhJT0hNIFVTQiBwcm9kdWN0IElEcworLy8KKyNkZWZpbmUJVVNCX1ZFTkRPUl9JRF9BWElPSE0JCQkweDA1RDkJLy8gQXhpb2htIFZJRAorCisjZGVmaW5lIEFYSU9ITV9ERVZJQ0VfSURfTUFTSwkJCTB4ZmZmZgorI2RlZmluZSBBWElPSE1fREVWSUNFX0lEX0VQSUNfQTc1OAkJMHhBNzU4CisjZGVmaW5lIEFYSU9ITV9ERVZJQ0VfSURfRVBJQ19BNzk0CQkweEE3OTQKKyNkZWZpbmUgQVhJT0hNX0RFVklDRV9JRF9FUElDX0EyMjUJCTB4QTIyNQorCisKKy8vCisvLyBEZWZpbml0aW9ucyBmb3IgTkNSIFVTQiBwcm9kdWN0IElEcworLy8KKyNkZWZpbmUJVVNCX1ZFTkRPUl9JRF9OQ1IJCQkweDA0MDQJLy8gTkNSIFZJRAorCisjZGVmaW5lIE5DUl9ERVZJQ0VfSURfTUFTSwkJCTB4ZmZmZgorI2RlZmluZSBOQ1JfREVWSUNFX0lEX0VQSUNfMDIwMgkJCTB4MDIwMgorI2RlZmluZSBOQ1JfREVWSUNFX0lEX0VQSUNfMDIwMwkJCTB4MDIwMworI2RlZmluZSBOQ1JfREVWSUNFX0lEX0VQSUNfMDMxMAkJCTB4MDMxMAorI2RlZmluZSBOQ1JfREVWSUNFX0lEX0VQSUNfMDMxMQkJCTB4MDMxMQorI2RlZmluZSBOQ1JfREVWSUNFX0lEX0VQSUNfMDMxMgkJCTB4MDMxMgorCisKKy8vCisvLyBEZWZpbml0aW9ucyBmb3IgU1lNQk9MIFVTQiBwcm9kdWN0IElEcworLy8KKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9TWU1CT0wJCQkweDA1RTAJLy8gU3ltYm9sIFZJRAorI2RlZmluZSBTWU1CT0xfREVWSUNFX0lEX01BU0sJCQkweGZmZmYKKyNkZWZpbmUgU1lNQk9MX0RFVklDRV9JRF9LRVlGT0IJCQkweDA3MDAKKworCisvLworLy8gRGVmaW5pdGlvbnMgZm9yIG90aGVyIHByb2R1Y3QgSURzCisjZGVmaW5lIElPTl9ERVZJQ0VfSURfTVQ0WDU2VVNCCQkJMHgxNDAzCS8vIE9FTSBkZXZpY2UKKworCisjZGVmaW5lCUdFTkVSQVRJT05fSURfRlJPTV9VU0JfUFJPRFVDVF9JRCggUHJvZHVjdElkICkJCQkJXAorCQkJKCAoX191MTYpICgoUHJvZHVjdElkID4+IDgpICYgKElPTl9HRU5FUkFUSU9OX01BU0spKSApCisKKyNkZWZpbmUJTUFLRV9VU0JfUFJPRFVDVF9JRCggT2VtSWQsIERldmljZUlkICkJCQkJCVwKKwkJCSggKF9fdTE2KSAoKChPZW1JZCkgPDwgMTApIHx8IChEZXZpY2VJZCkpICkKKworI2RlZmluZQlERVZJQ0VfSURfRlJPTV9VU0JfUFJPRFVDVF9JRCggUHJvZHVjdElkICkJCQkJXAorCQkJKCAoX191MTYpICgoUHJvZHVjdElkKSAmIChFREdFUE9SVF9ERVZJQ0VfSURfTUFTSykpICkKKworI2RlZmluZQlPRU1fSURfRlJPTV9VU0JfUFJPRFVDVF9JRCggUHJvZHVjdElkICkJCQkJCVwKKwkJCSggKF9fdTE2KSAoKChQcm9kdWN0SWQpID4+IDEwKSAmIDB4M0YpICkKKworLy8KKy8vIERlZmluaXRpb25zIG9mIHBhcmFtZXRlcnMgZm9yIGRvd25sb2FkIGNvZGUuIE5vdGUgdGhhdCB0aGVzZSBhcmUKKy8vIHNwZWNpZmljIHRvIGEgZ2l2ZW4gdmVyc2lvbiBvZiBkb3dubG9hZCBjb2RlIGFuZCBtdXN0IGNoYW5nZSBpZiB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgZG93bmxvYWQgY29kZSBjaGFuZ2VzLgorLy8KKworLy8gVHhDcmVkaXRzIHZhbHVlIGJlbG93IHdoaWNoIGRyaXZlciB3b24ndCBib3RoZXIgc2VuZGluZyAodG8gcHJldmVudCB0b28gbWFueSBzbWFsbCB3cml0ZXMpLgorLy8gU2VuZCBvbmx5IGlmIGFib3ZlIDI1JQorI2RlZmluZSBFREdFX0ZXX0dFVF9UWF9DUkVESVRTX1NFTkRfVEhSRVNIT0xEKEluaXRpYWxDcmVkaXQsIE1heFBhY2tldFNpemUpIChtYXgoICgoSW5pdGlhbENyZWRpdCkgLyA0KSwgKE1heFBhY2tldFNpemUpICkpCisKKyNkZWZpbmUJRURHRV9GV19CVUxLX01BWF9QQUNLRVRfU0laRQkJNjQJLy8gTWF4IFBhY2tldCBTaXplIGZvciBCdWxrIEluIEVuZHBvaW50IChFUDEpCisjZGVmaW5lIEVER0VfRldfQlVMS19SRUFEX0JVRkZFUl9TSVpFCQkxMDI0CS8vIFNpemUgdG8gdXNlIGZvciBCdWxrIHJlYWRzCisKKyNkZWZpbmUJRURHRV9GV19JTlRfTUFYX1BBQ0tFVF9TSVpFCQkzMgkvLyBNYXggUGFja2V0IFNpemUgZm9yIEludGVycnVwdCBJbiBFbmRwb2ludAorCQkJCQkJCS8vIE5vdGUgdGhhdCBtYW55IHVuaXRzIHdlcmUgc2hpcHBlZCB3aXRoIE1QUz0xNiwgd2UKKwkJCQkJCQkvLyBmb3JjZSBhbiB1cGdyYWRlIHRvIHRoaXMgdmFsdWUpLgorI2RlZmluZSBFREdFX0ZXX0lOVF9JTlRFUlZBTAkJCTIJLy8gMm1zIHBvbGxpbmcgb24gSW50UGlwZQorCisKKy8vCisvLyBEZWZpbml0aW9ucyBvZiBJL08gTmV0d29ya3MgdmVuZG9yLXNwZWNpZmljIHJlcXVlc3RzCisvLyBmb3IgZGVmYXVsdCBlbmRwb2ludAorLy8KKy8vCWJtUmVxdWVzdFR5cGUgPSAwMTAwMDAwMAlTZXQgdmVuZG9yLXNwZWNpZmljLCB0byBkZXZpY2UKKy8vCWJtUmVxdWVzdFR5cGUgPSAxMTAwMDAwMAlHZXQgdmVuZG9yLXNwZWNpZmljLCB0byBkZXZpY2UKKy8vCisvLyBUaGVzZSBhcmUgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgYlJlcXVlc3QgZmllbGQgZm9yIHRoZQorLy8gYWJvdmUgYm1SZXF1ZXN0VHlwZXMuCisvLworLy8gRm9yIHRoZSByZWFkL3dyaXRlIEVkZ2Vwb3J0IG1lbW9yeSBjb21tYW5kcywgdGhlIHBhcmFtZXRlcnMKKy8vIGFyZSBhcyBmb2xsb3dzOgorLy8JCXdWYWx1ZSA9IDE2LWJpdCBhZGRyZXNzCisvLwkJd0luZGV4ID0gdW51c2VkICh0aG91Z2ggd2UgY291bGQgcHV0IHNlZ21lbnQgMDA6IG9yIEZGOiBoZXJlKQorLy8JCXdMZW5ndGggPSAjIGJ5dGVzIHRvIHJlYWQvd3JpdGUgKG1heCA2NCkKKy8vCQkJCQkJCQorCisjZGVmaW5lIFVTQl9SRVFVRVNUX0lPTl9SRVNFVF9ERVZJQ0UJMAkvLyBXYXJtIHJlYm9vdCBFZGdlcG9ydCwgcmV0YWluaW5nIFVTQiBhZGRyZXNzCisjZGVmaW5lIFVTQl9SRVFVRVNUX0lPTl9HRVRfRVBJQ19ERVNDCTEJLy8gR2V0IEVkZ2Vwb3J0IENvbXBhdGliaWxpdHkgRGVzY3JpcHRvcgorLy8gdW51c2VkCQkJCTIJLy8gVW51c2VkLCBhdmFpbGFibGUKKyNkZWZpbmUgVVNCX1JFUVVFU1RfSU9OX1JFQURfUkFNCTMJLy8gUmVhZCAgRWRnZVBvcnQgUkFNIGF0IHNwZWNpZmllZCBhZGRyCisjZGVmaW5lIFVTQl9SRVFVRVNUX0lPTl9XUklURV9SQU0JNAkvLyBXcml0ZSBFZGdlUG9ydCBSQU0gYXQgc3BlY2lmaWVkIGFkZHIKKyNkZWZpbmUgVVNCX1JFUVVFU1RfSU9OX1JFQURfUk9NCTUJLy8gUmVhZCAgRWRnZVBvcnQgUk9NIGF0IHNwZWNpZmllZCBhZGRyCisjZGVmaW5lIFVTQl9SRVFVRVNUX0lPTl9XUklURV9ST00JNgkvLyBXcml0ZSBFZGdlUG9ydCBST00gYXQgc3BlY2lmaWVkIGFkZHIKKyNkZWZpbmUgVVNCX1JFUVVFU1RfSU9OX0VYRUNfRExfQ09ERQk3CS8vIEJlZ2luIGV4ZWN1dGlvbiBvZiBSQU0tYmFzZWQgZG93bmxvYWQKKwkJCQkJCS8vIGNvZGUgYnkganVtcGluZyB0byBhZGRyZXNzIGluIHdJbmRleDp3VmFsdWUKKy8vCQkJCQk4CS8vIFVudXNlZCwgYXZhaWxhYmxlCisjZGVmaW5lIFVTQl9SRVFVRVNUX0lPTl9FTkFCTEVfU1VTUEVORAk5CS8vIEVuYWJsZS9EaXNhYmxlIHN1c3BlbmQgZmVhdHVyZQorCQkJCQkJLy8gKHdWYWx1ZSAhPSAwOiBFbmFibGU7IHdWYWx1ZSA9IDA6IERpc2FibGUpCisKKyNkZWZpbmUgVVNCX1JFUVVFU1RfSU9OX1NFTkRfSU9TUAkxMAkvLyBTZW5kIGFuIElPU1AgY29tbWFuZCB0byB0aGUgZWRnZXBvcnQgb3ZlciB0aGUgY29udHJvbCBwaXBlCQorI2RlZmluZSBVU0JfUkVRVUVTVF9JT05fUkVDVl9JT1NQCTExCS8vIFJlY2VpdmUgYW4gSU9TUCBjb21tYW5kIGZyb20gdGhlIGVkZ2Vwb3J0IG92ZXIgdGhlIGNvbnRyb2wgcGlwZQorCisKKyNkZWZpbmUgVVNCX1JFUVVFU1RfSU9OX0RJU19JTlRfVElNRVIJMHg4MAkvLyBTZW50IHRvIEF4aW9obSB0byBlbmFibGUvIGRpc2FibGUKKwkJCQkJCS8vIGludGVycnVwdCB0b2tlbiB0aW1lcgorCQkJCQkJLy8gd1ZhbHVlID0gMSwgZW5hYmxlIChkZWZhdWx0KQorCQkJCQkJLy8gd1ZhbHVlID0gMCwgZGlzYWJsZQorCisvLworLy8gRGVmaW5lIHBhcmFtZXRlciB2YWx1ZXMgZm9yIG91ciB2ZW5kb3Itc3BlY2lmaWMgY29tbWFuZHMKKy8vCisKKy8vCisvLyBFZGdlcG9ydCBDb21wYXRpYmxpdHkgRGVzY3JpcHRvcgorLy8KKy8vIFRoaXMgZGVzY3JpcHRvciBpcyBvbmx5IHJldHVybmVkIGJ5IEVkZ2Vwb3J0LWNvbXBhdGlibGUgZGV2aWNlcworLy8gc3VwcG9ydGluZyB0aGUgRVBpQyBzcGVjLiBUcnVlIElPTiBkZXZpY2VzIGRvIG5vdCByZXR1cm4gdGhpcworLy8gZGVzY3JpcHRvciwgYnV0IGluc3RlYWQgcmV0dXJuIFNUQUxMIG9uIHJlY2VpcHQgb2YgdGhlCisvLyBHRVRfRVBJQ19ERVNDIGNvbW1hbmQuIFRoZSBkcml2ZXIgaW50ZXJwcmV0cyBhIFNUQUxMIHRvIG1lYW4gdGhhdAorLy8gdGhpcyBpcyBhICJyZWFsIiBFZGdlcG9ydC4KKy8vCisKK3N0cnVjdCBlZGdlX2NvbXBhdGliaWxpdHlfYml0cworeworCS8vIFRoaXMgX191MzIgZGVmaW5lcyB3aGljaCBWZW5kb3Itc3BlY2lmaWMgY29tbWFuZHMvZnVuY3Rpb25hbGl0eQorCS8vIHRoZSBkZXZpY2Ugc3VwcG9ydHMgb24gdGhlIGRlZmF1bHQgRVAwIHBpcGUuCisKKwlfX3UzMglWZW5kRW5hYmxlU3VzcGVuZAk6ICAxOwkvLyAwMDAxIFNldCBpZiBkZXZpY2Ugc3VwcG9ydHMgSU9OX0VOQUJMRV9TVVNQRU5ECisJX191MzIJVmVuZFVudXNlZAkJOiAzMTsJLy8gQXZhaWxhYmxlIGZvciBmdXR1cmUgZXhwYW5zaW9uLCBtdXN0IGJlIDAKKworCS8vIFRoaXMgX191MzIgZGVmaW5lcyB3aGljaCBJT1NQIGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQgb3ZlciB0aGUKKwkvLyBidWxrIHBpcGUgRVAxLgorCisJCQkJCQkJCQkJCS8vIHh4eHggU2V0IGlmIGRldmljZSBzdXBwb3J0czoKKwlfX3UzMglJT1NQT3BlbgkJOiAgMTsJLy8gMDAwMQlPUEVOIC8gT1BFTl9SU1AgKEN1cnJlbnRseSBtdXN0IGJlIDEpCisJX191MzIJSU9TUENsb3NlCQk6ICAxOwkvLyAwMDAyCUNMT1NFCisJX191MzIJSU9TUENoYXNlCQk6ICAxOwkvLyAwMDA0CUNIQVNFIC8gQ0hBU0VfUlNQCisJX191MzIJSU9TUFNldFJ4RmxvdwkJOiAgMTsJLy8gMDAwOAlTRVRfUlhfRkxPVworCV9fdTMyCUlPU1BTZXRUeEZsb3cJCTogIDE7CS8vIDAwMTAJU0VUX1RYX0ZMT1cKKwlfX3UzMglJT1NQU2V0WENoYXIJCTogIDE7CS8vIDAwMjAJU0VUX1hPTl9DSEFSL1NFVF9YT0ZGX0NIQVIKKwlfX3UzMglJT1NQUnhDaGVjawkJOiAgMTsJLy8gMDA0MAlSWF9DSEVDS19SRVEvUlhfQ0hFQ0tfUlNQCisJX191MzIJSU9TUFNldENsckJyZWFrCQk6ICAxOwkvLyAwMDgwCVNFVF9CUkVBSy9DTEVBUl9CUkVBSworCV9fdTMyCUlPU1BXcml0ZU1DUgkJOiAgMTsJLy8gMDEwMAlNQ1IgcmVnaXN0ZXIgd3JpdGVzIChzZXQvY2xyIERUUi9SVFMpCisJX191MzIJSU9TUFdyaXRlTENSCQk6ICAxOwkvLyAwMjAwCUxDUiByZWdpc3RlciB3cml0ZXMgKHdvcmRsZW4vc3RvcC9wYXJpdHkpCisJX191MzIJSU9TUFNldEJhdWRSYXRlCQk6ICAxOwkvLyAwNDAwCXNldHRpbmcgQmF1ZCByYXRlICh3cml0ZXMgdG8gTENSLjgwaCBhbmQgRExML0RMTSByZWdpc3RlcikKKwlfX3UzMglJT1NQRGlzYWJsZUludFBpcGUJOiAgMTsJLy8gMDgwMCBEbyBub3QgdXNlIHRoZSBpbnRlcnJ1cHQgcGlwZSBmb3IgVHhDcmVkaXRzIG9yIFJ4QnV0ZXNBdmFpbGFibGUKKwlfX3UzMglJT1NQUnhEYXRhQXZhaWwJCTogIDE7ICAgLy8gMTAwMCBSZXR1cm4gc3RhdHVzIG9mIFJYIEZpZm8gKERhdGEgYXZhaWxhYmxlIGluIEZpZm8pCisJX191MzIJSU9TUFR4UHVyZ2UJCTogIDE7CS8vIDIwMDAgUHVyZ2UgVFhCdWZmZXIgYW5kL29yIEZpZm8gaW4gRWRnZXBvcnQgaGFyZHdhcmUKKwlfX3UzMglJT1NQVW51c2VkCQk6IDE4OwkvLyBBdmFpbGFibGUgZm9yIGZ1dHVyZSBleHBhbnNpb24sIG11c3QgYmUgMAorCisJLy8gVGhpcyBfX3UzMiBkZWZpbmVzIHdoaWNoICdnZW5lcmFsJyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkCisKKwlfX3UzMglUcnVlRWRnZXBvcnQJCTogIDE7CS8vIDAwMDEJU2V0IGlmIGRldmljZSBpcyBhICdyZWFsJyBFZGdlcG9ydAorCQkJCQkJCQkJCQkvLyAoVXNlZCBvbmx5IGJ5IGRyaXZlciwgTkVWRVIgc2V0IGJ5IGFuIEVQaUMgZGV2aWNlKQorCV9fdTMyCUdlblVudXNlZAkJOiAzMTsJLy8gQXZhaWxhYmxlIGZvciBmdXR1cmUgZXhwYW5zaW9uLCBtdXN0IGJlIDAKKworfTsKKworc3RydWN0IGVkZ2VfY29tcGF0aWJpbGl0eV9kZXNjcmlwdG9yCit7CisJX191OAlMZW5ndGg7CQkJCS8vIERlc2NyaXB0b3IgTGVuZ3RoIChwZXIgVVNCIHNwZWMpCisJX191OAlEZXNjVHlwZTsJCQkvLyBEZXNjcmlwdG9yIFR5cGUgKHBlciBVU0Igc3BlYywgPURFVklDRSB0eXBlKQorCV9fdTgJRXBpY1ZlcjsJCQkvLyBWZXJzaW9uIG9mIEVQaUMgc3BlYyBzdXBwb3J0ZWQKKwkJCQkJCQkJCQkJLy8gKEN1cnJlbnRseSBtdXN0IGJlIDEpCisJX191OAlOdW1Qb3J0czsJCQkvLyBOdW1iZXIgb2Ygc2VyaWFsIHBvcnRzIHN1cHBvcnRlZAorCV9fdTgJaURvd25sb2FkRmlsZTsJCQkvLyBJbmRleCBvZiBzdHJpbmcgY29udGFpbmluZyBkb3dubG9hZCBjb2RlIGZpbGVuYW1lCisJCQkJCQkJCQkJCS8vIDA9bm8gZG93bmxvYWQsIEZGPWRvd25sb2FkIGNvbXBpbGVkIGludG8gZHJpdmVyLgorCV9fdTgJVW51c2VkWyAzIF07CQkJLy8gQXZhaWxhYmxlIGZvciBmdXR1cmUgZXhwYW5zaW9uLCBtdXN0IGJlIDAKKwkJCQkJCQkJCQkJLy8gKEN1cnJlbnRseSBtdXN0IGJlIDApLgorCV9fdTgJTWFqb3JWZXJzaW9uOwkJCS8vIEZpcm13YXJlIHZlcnNpb246IHh4LgorCV9fdTgJTWlub3JWZXJzaW9uOwkJCS8vICB5eS4KKwlfX2xlMTYJQnVpbGROdW1iZXI7CQkJLy8gIHp6enogKExFIGZvcm1hdCkKKworCS8vIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGNvbnRhaW5zIF9fdTMycywgd2l0aCBlYWNoIGJpdAorCS8vIHNwZWNpZnlpbmcgd2hldGhlciB0aGUgRVBpQyBkZXZpY2Ugc3VwcG9ydHMgdGhlIGdpdmVuCisJLy8gY29tbWFuZCBvciBmdW5jdGlvbmFsaXR5LgorCisJc3RydWN0IGVkZ2VfY29tcGF0aWJpbGl0eV9iaXRzCVN1cHBvcnRzOworCit9OworCisvLyBWYWx1ZXMgZm9yIGlEb3dubG9hZEZpbGUKKyNkZWZpbmUJRURHRV9ET1dOTE9BRF9GSUxFX05PTkUJCTAJLy8gTm8gZG93bmxvYWQgcmVxdWVzdGVkCisjZGVmaW5lCUVER0VfRE9XTkxPQURfRklMRV9JTlRFUk5BTAkweEZGCS8vIERvd25sb2FkIHRoZSBmaWxlIGNvbXBpbGVkIGludG8gZHJpdmVyICg5MzAgdmVyc2lvbikKKyNkZWZpbmUJRURHRV9ET1dOTE9BRF9GSUxFX0k5MzAJCTB4RkYJLy8gRG93bmxvYWQgdGhlIGZpbGUgY29tcGlsZWQgaW50byBkcml2ZXIgKDkzMCB2ZXJzaW9uKQorI2RlZmluZQlFREdFX0RPV05MT0FEX0ZJTEVfODAyNTEJMHhGRQkvLyBEb3dubG9hZCB0aGUgZmlsZSBjb21waWxlZCBpbnRvIGRyaXZlciAoODAyNTEgdmVyc2lvbikKKworCisKKy8qCisgKglTcGVjaWFsIGFkZHJlc3NlcyBmb3IgUkVBRC9XUklURV9SQU0vUk9NCisgKi8KKworLy8gVmVyc2lvbiAxIChvcmlnaW5hbCkgZm9ybWF0IG9mIERldmljZVBhcmFtcworI2RlZmluZQlFREdFX01BTlVGX0RFU0NfQUREUl9WMQkJMHgwMEZGN0YwMAorI2RlZmluZQlFREdFX01BTlVGX0RFU0NfTEVOX1YxCQlzaXplb2YoRURHRV9NQU5VRl9ERVNDUklQVE9SX1YxKQorCisvLyBWZXJzaW9uIDIgZm9ybWF0IG9mIERldmljZVBhcmFtcy4gVGhpcyBmb3JtYXQgaXMgbG9uZ2VyICgzQzBoKQorLy8gYW5kIHN0YXJ0cyBsb3dlciBpbiBtZW1vcnksIGF0IHRoZSB1cHBlcm1vc3QgMUsgaW4gUk9NLgorI2RlZmluZQlFREdFX01BTlVGX0RFU0NfQUREUgkJMHgwMEZGN0MwMAorI2RlZmluZQlFREdFX01BTlVGX0RFU0NfTEVOCQlzaXplb2Yoc3RydWN0IGVkZ2VfbWFudWZfZGVzY3JpcHRvcikKKworLy8gQm9vdCBwYXJhbXMgZGVzY3JpcHRvcgorI2RlZmluZQlFREdFX0JPT1RfREVTQ19BRERSCQkweDAwRkY3RkMwCisjZGVmaW5lCUVER0VfQk9PVF9ERVNDX0xFTgkJc2l6ZW9mKHN0cnVjdCBlZGdlX2Jvb3RfZGVzY3JpcHRvcikKKworLy8gRGVmaW5lIHRoZSBtYXggYmxvY2sgc2l6ZSB0aGF0IG1heSBiZSByZWFkIG9yIHdyaXR0ZW4KKy8vIGluIGEgcmVhZC93cml0ZSBSQU0vUk9NIGNvbW1hbmQuCisjZGVmaW5lCU1BWF9TSVpFX1JFUV9JT05fUkVBRF9NRU0JKCAoX191MTYpIDY0ICkKKyNkZWZpbmUJTUFYX1NJWkVfUkVRX0lPTl9XUklURV9NRU0JKCAoX191MTYpIDY0ICkKKworCisvLworLy8gTm90ZXMgZm9yIHRoZSBmb2xsb3dpbmcgdHdvIElPTiB2ZW5kb3Itc3BlY2lmaWMgcGFyYW0gZGVzY3JpcHRvcnM6CisvLworLy8JMS4JVGhlc2UgaGF2ZSBhIHN0YW5kYXJkIFVTQiBkZXNjcmlwdG9yIGhlYWRlciBzbyB0aGV5IGxvb2sgbGlrZSBhCisvLwkJbm9ybWFsIGRlc2NyaXB0b3IuCisvLwkyLglBbnkgc3RyaW5ncyBpbiB0aGUgc3RydWN0dXJlcyBhcmUgaW4gVVNCLWRlZmluZWQgc3RyaW5nCisvLwkJZGVzY3JpcHRvciBmb3JtYXQsIHNvIHRoYXQgdGhleSBtYXkgYmUgc2VwYXJhdGVseSByZXRyaWV2ZWQsCisvLwkJaWYgbmVjZXNzYXJ5LCB3aXRoIGEgbWluaW11bSBvZiB3b3JrIG9uIHRoZSA5MzAuIFRoaXMgYWxzbworLy8JCXJlcXVpcmVzIHRoZW0gdG8gYmUgaW4gVU5JQ09ERSBmb3JtYXQsIHdoaWNoLCBmb3IgRW5nbGlzaCBhdAorLy8JCWxlYXN0LCBzaW1wbHkgbWVhbnMgZXh0ZW5kaW5nIGVhY2ggX191OCBpbnRvIGEgX191MTYuCisvLwkzLglGb3IgYWxsIGZpZWxkcywgMDAgbWVhbnMgJ3VuaW5pdGlhbGl6ZWQnLgorLy8JNC4JQWxsIHVudXNlZCBhcmVhcyBzaG91bGQgYmUgc2V0IHRvIDAwIGZvciBmdXR1cmUgZXhwYW5zaW9uLgorLy8KKworLy8gVGhpcyBzdHJ1Y3R1cmUgaXMgdmVyIDIgZm9ybWF0LiBJdCBjb250YWlucyBBTEwgVVNCIGRlc2NyaXB0b3JzIGFzCisvLyB3ZWxsIGFzIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgdGhhdCB3ZXJlIGluIHRoZSBvcmlnaW5hbCBWMQorLy8gc3RydWN0dXJlLiBJdCBpcyBOT1QgbW9kaWZpZWQgd2hlbiBuZXcgYm9vdCBjb2RlIGlzIGRvd25sb2FkZWQ7IHJhdGhlciwKKy8vIHRoZXNlIHZhbHVlcyBhcmUgc2V0IG9yIG1vZGlmaWVkIGJ5IG1hbnVmYWN0dXJpbmcuIEl0IGlzIGxvY2F0ZWQgYXQKKy8vIHhDMDAteEZCRiAobGVuZ3RoIDNDMGgpIGluIHRoZSBST00uCisvLyBUaGlzIHN0cnVjdHVyZSBpcyBhIHN1cGVyc2V0IG9mIHRoZSB2MSBzdHJ1Y3R1cmUgYW5kIGlzIGFycmFuZ2VkIHNvCisvLyB0aGF0IGFsbCBvZiB0aGUgdjEgZmllbGRzIHJlbWFpbiBhdCB0aGUgc2FtZSBhZGRyZXNzLiBXZSBhcmUganVzdAorLy8gYWRkaW5nIG1vcmUgcm9vbSB0byB0aGUgZnJvbnQgb2YgdGhlIHN0cnVjdHVyZSB0byBob2xkIHRoZSBkZXNjcmlwdG9ycy4KKy8vCisvLyBUaGUgYWN0dWFsIGNvbnRlbnRzIG9mIHRoaXMgc3RydWN0dXJlIGFyZSBkZWZpbmVkIGluIGEgOTMwIGFzc2VtYmx5CisvLyBmaWxlLCBjb252ZXJ0ZWQgdG8gYSBiaW5hcnkgaW1hZ2UsIGFuZCB0aGVuIHdyaXR0ZW4gYnkgdGhlIHNlcmlhbGl6YXRpb24KKy8vIHByb2dyYW0uIFRoZSBDIGRlZmluaXRpb24gb2YgdGhpcyBzdHJ1Y3R1cmUganVzdCBkZWZpbmVzIGEgZHVtbXkKKy8vIGFyZWEgZm9yIGdlbmVyYWwgVVNCIGRlc2NyaXB0b3JzIGFuZCB0aGUgZGVzY3JpcHRvciB0YWJsZXMgKHRoZSByb290CisvLyBkZXNjcmlwdG9yIHN0YXJ0cyBhdCB4QzAwKS4gQXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RydWN0dXJlIGFyZSB0aGUKKy8vIGZpZWxkcyBpbmhlcml0ZWQgZnJvbSB0aGUgdjEgc3RydWN0dXJlLgorCisjZGVmaW5lIE1BWF9TRVJJQUxOVU1CRVJfTEVOCTEyCisjZGVmaW5lIE1BWF9BU1NFTUJMWU5VTUJFUl9MRU4JMTQKKworc3RydWN0IGVkZ2VfbWFudWZfZGVzY3JpcHRvciB7CisKKwlfX3UxNglSb290RGVzY1RhYmxlWzB4MTBdOwkJCS8vIEMwMCBSb290IG9mIGRlc2NyaXB0b3IgdGFibGVzIChqdXN0IGEgcGxhY2Vob2xkZXIpCisJX191OAlEZXNjcmlwdG9yQXJlYVsweDJFMF07CQkJLy8gQzIwIERlc2NyaXB0b3JzIGdvIGhlcmUsIHVwIHRvIDJFMGggKGp1c3QgYSBwbGFjZWhvbGRlcikKKworCQkJCQkJCS8vICAgICBTdGFydCBvZiB2MS1jb21wYXRpYmxlIHNlY3Rpb24KKwlfX3U4CUxlbmd0aDsJCQkJCS8vIEYwMCBEZXNjIGxlbmd0aCBmb3Igd2hhdCBmb2xsb3dzLCBwZXIgVVNCICg9IEMwaCApCisJX191OAlEZXNjVHlwZTsJCQkJLy8gRjAxIERlc2MgdHlwZSwgcGVyIFVTQiAoPURFVklDRSB0eXBlKQorCV9fdTgJRGVzY1ZlcjsJCQkJLy8gRjAyIERlc2MgdmVyc2lvbi9mb3JtYXQgKGN1cnJlbnRseSAyKQorCV9fdTgJTnVtUm9vdERlc2NFbnRyaWVzOwkJCS8vIEYwMyAjIGVudHJpZXMgaW4gUm9vdERlc2NUYWJsZQorCisJX191OAlSb21TaXplOwkJCQkvLyBGMDQgU2l6ZSBvZiBST00vRTJQUk9NIGluIEsKKwlfX3U4CVJhbVNpemU7CQkJCS8vIEYwNSBTaXplIG9mIGV4dGVybmFsIFJBTSBpbiBLCisJX191OAlDcHVSZXY7CQkJCQkvLyBGMDYgQ1BVIHJldmlzaW9uIGxldmVsIChjaGcgb25seSBpZiBzL3cgdmlzaWJsZSkKKwlfX3U4CUJvYXJkUmV2OwkJCQkvLyBGMDcgUENCIHJldmlzaW9uIGxldmVsIChjaGcgb25seSBpZiBzL3cgdmlzaWJsZSkKKworCV9fdTgJTnVtUG9ydHM7CQkJCS8vIEYwOCBOdW1iZXIgb2YgcG9ydHMKKwlfX3U4CURlc2NEYXRlWzNdOwkJCQkvLyBGMDkgTU0vREQvWVkgd2hlbiBkZXNjcmlwdG9yIHRlbXBsYXRlIHdhcyBjb21waWxlciwKKwkJCQkJCQkvLyAgICAgc28gaG9zdCBjYW4gdHJhY2sgY2hhbmdlcyB0byBVU0Itb25seSBkZXNjcmlwdG9ycy4KKworCV9fdTgJU2VyTnVtTGVuZ3RoOwkJCQkvLyBGMEMgVVNCIHN0cmluZyBkZXNjcmlwdG9yIGxlbgorCV9fdTgJU2VyTnVtRGVzY1R5cGU7CQkJCS8vIEYwRCBVU0IgZGVzY3JpcHRvciB0eXBlICg9U1RSSU5HIHR5cGUpCisJX19sZTE2CVNlcmlhbE51bWJlcltNQVhfU0VSSUFMTlVNQkVSX0xFTl07CS8vIEYwRSAiMDEtMDEtMDAwMTAwIiBVbmljb2RlIFNlcmlhbCBOdW1iZXIKKworCV9fdTgJQXNzZW1ibHlOdW1MZW5ndGg7CQkJLy8gRjI2IFVTQiBzdHJpbmcgZGVzY3JpcHRvciBsZW4KKwlfX3U4CUFzc2VtYmx5TnVtRGVzY1R5cGU7CQkJLy8gRjI3IFVTQiBkZXNjcmlwdG9yIHR5cGUgKD1TVFJJTkcgdHlwZSkKKwlfX2xlMTYJQXNzZW1ibHlOdW1iZXJbTUFYX0FTU0VNQkxZTlVNQkVSX0xFTl07CS8vIEYyOCAiMzUwLTEwMDAtMDEtQSAiIGFzc2VtYmx5IG51bWJlcgorCisJX191OAlPZW1Bc3N5TnVtTGVuZ3RoOwkJCS8vIEY0NCBVU0Igc3RyaW5nIGRlc2NyaXB0b3IgbGVuCisJX191OAlPZW1Bc3N5TnVtRGVzY1R5cGU7CQkJLy8gRjQ1IFVTQiBkZXNjcmlwdG9yIHR5cGUgKD1TVFJJTkcgdHlwZSkKKwlfX2xlMTYJT2VtQXNzeU51bWJlcltNQVhfQVNTRU1CTFlOVU1CRVJfTEVOXTsJLy8gRjQ2ICJ4eHh4eHh4eHh4eHh4eCIgT0VNIGFzc2VtYmx5IG51bWJlcgorCisJX191OAlNYW51ZkRhdGVMZW5ndGg7CQkJLy8gRjYyIFVTQiBzdHJpbmcgZGVzY3JpcHRvciBsZW4KKwlfX3U4CU1hbnVmRGF0ZURlc2NUeXBlOwkJCS8vIEY2MyBVU0IgZGVzY3JpcHRvciB0eXBlICg9U1RSSU5HIHR5cGUpCisJX19sZTE2CU1hbnVmRGF0ZVs2XTsJCQkJLy8gRjY0ICJNTUREWVkiIG1hbnVmYWN0dXJpbmcgZGF0ZQorCisJX191OAlSZXNlcnZlZDNbMHg0RF07CQkJLy8gRjcwIC0tIHVudXNlZCwgc2V0IHRvIDAgLS0KKworCV9fdTgJVWFydFR5cGU7CQkJCS8vIEZCRCBVYXJ0IFR5cGUKKwlfX3U4CUlvblBpZDsJCQkJCS8vIEZCRSBQcm9kdWN0IElELCA9PSBMU0Igb2YgVVNCIERldkRlc2MuUElECisJCQkJCQkJLy8gICAgICAoTm90ZTogRWRnZXBvcnQvNHMgYmVmb3JlIDExLzk4IHdpbGwgaGF2ZQorCQkJCQkJCS8vICAgICAgIDAwIGhlcmUgaW5zdGVhZCBvZiAwMSkKKwlfX3U4CUlvbkNvbmZpZzsJCQkJLy8gRkJGIENvbmZpZyBieXRlIGZvciBJT04gbWFudWZhY3R1cmluZyB1c2UKKwkJCQkJCQkvLyBGQkYgZW5kIG9mIHN0cnVjdHVyZSwgdG90YWwgbGVuID0gM0MwaAorCit9OworCisKKyNkZWZpbmUgTUFOVUZfREVTQ19WRVJfMQkxCS8vIE9yaWdpbmFsIGRlZmluaXRpb24gb2YgTUFOVUZfREVTQworI2RlZmluZSBNQU5VRl9ERVNDX1ZFUl8yCTIJLy8gVmVyIDIsIHN0YXJ0cyBhdCB4QzAwaCBsZW4gM0MwaAorCisKKy8vIFVhcnQgVHlwZXMKKy8vIE5vdGU6IFNpbmNlIHRoaXMgZmllbGQgd2FzIGFkZGVkIG9ubHkgcmVjZW50bHksIGFsbCBFZGdlcG9ydC80IHVuaXRzCisvLyBzaGlwcGVkIGJlZm9yZSAxMS85OCB3aWxsIGhhdmUgMDAgaW4gdGhpcyBmaWVsZC4gVGhlcmVmb3JlLAorLy8gYm90aCAwMCBhbmQgMDEgdmFsdWVzIG1lYW4gJzY1NC4KKyNkZWZpbmUgTUFOVUZfVUFSVF9FWEFSXzY1NF9FQVJMWQkwCS8vIEV4YXIgMTZDNjU0IGluIEVkZ2Vwb3J0LzRzIGJlZm9yZSAxMS85OAorI2RlZmluZSBNQU5VRl9VQVJUX0VYQVJfNjU0CQkxCS8vIEV4YXIgMTZDNjU0CisjZGVmaW5lIE1BTlVGX1VBUlRfRVhBUl8yODUyCQkyCS8vIEV4YXIgMTZDMjg1MgorCisvLworLy8gTm90ZTogVGhlIENwdVJldiBhbmQgQm9hcmRSZXYgdmFsdWVzIGRvIG5vdCBjb25mb3JtIHRvIG1hbnVmYWN0dXJpbmcKKy8vIHJldmlzaW9uczsgdGhleSBhcmUgdG8gYmUgaW5jcmVtZW50ZWQgb25seSB3aGVuIHRoZSBDUFUgb3IgaGFyZHdhcmUKKy8vIGNoYW5nZXMgaW4gYSBzb2Z0d2FyZS12aXNpYmxlIHdheSwgc3VjaCB0aGF0IHRoZSA5MzAgc29mdHdhcmUgb3IKKy8vIHRoZSBob3N0IGRyaXZlciBuZWVkcyB0byBoYW5kbGUgdGhlIGhhcmR3YXJlIGRpZmZlcmVudGx5LgorLy8KKworLy8gVmFsdWVzIG9mIGJvdHRvbSA1IGJpdHMgb2YgQ3B1UmV2ICYgQm9hcmRSZXYgZm9yCisvLyBJbXBsZW1lbnRhdGlvbiAwIChpZSwgOTMwLWJhc2VkKQorI2RlZmluZQlNQU5VRl9DUFVfUkVWX0FENAkJMQkvLyA5MzAgQUQ0LCB3aXRoIEVQMSBSeCBidWcgKG5lZWRzIFJYU1BNKQorI2RlZmluZQlNQU5VRl9DUFVfUkVWX0FENQkJMgkvLyA5MzAgQUQ1LCB3aXRoIGFib3ZlIGJ1ZyAoc3VwcG9zZWRseSkgZml4ZWQKKyNkZWZpbmUJTUFOVUZfQ1BVXzgwMjUxCQkJMHgyMAkvLyBJbnRlbCA4MDI1MQorCisKKyNkZWZpbmUgTUFOVUZfQk9BUkRfUkVWX0EJCTEJLy8gT3JpZ2luYWwgdmVyc2lvbiwgPT0gTWFudWYgUmV2IEEKKyNkZWZpbmUgTUFOVUZfQk9BUkRfUkVWX0IJCTIJLy8gTWFudWYgUmV2IEIsIHdha2V1cCBpbnRlcnJ1cHQgd29ya3MKKyNkZWZpbmUgTUFOVUZfQk9BUkRfUkVWX0MJCTMJLy8gTWFudWYgUmV2IEMsIDIvNCBwb3J0cywgcnMyMzIvcnM0MjIKKyNkZWZpbmUgTUFOVUZfQk9BUkRfUkVWX0dFTkVSQVRJT05fMgkweDIwCS8vIFNlY29uZCBnZW5lcmFpdG9uIGVkZ2Vwb3J0CisKKworLy8gVmFsdWVzIG9mIGJvdHRvbSA1IGJpdHMgb2YgQ3B1UmV2ICYgQm9hcmRSZXYgZm9yCisvLyBJbXBsZW1lbnRhdGlvbiAxIChpZSwgMjUxK05ldGNoaXAtYmFzZWQpCisjZGVmaW5lCU1BTlVGX0NQVV9SRVZfMQkJCTEJLy8gQzI1MVRCIFJldiAxIChOZWVkIGFjdHVhbCBJbnRlbCByZXYgaGVyZSkKKworI2RlZmluZSBNQU5VRl9CT0FSRF9SRVZfQQkJMQkvLyBGaXJzdCByZXYgb2YgMjUxK05ldGNoaXAgZGVzaWduCisKKyNkZWZpbmUJTUFOVUZfU0VSTlVNX0xFTkdUSAkJc2l6ZW9mKCgoc3RydWN0IGVkZ2VfbWFudWZfZGVzY3JpcHRvciAqKTApLT5TZXJpYWxOdW1iZXIpCisjZGVmaW5lCU1BTlVGX0FTU1lOVU1fTEVOR1RICQlzaXplb2YoKChzdHJ1Y3QgZWRnZV9tYW51Zl9kZXNjcmlwdG9yICopMCktPkFzc2VtYmx5TnVtYmVyKQorI2RlZmluZQlNQU5VRl9PRU1BU1NZTlVNX0xFTkdUSAkJc2l6ZW9mKCgoc3RydWN0IGVkZ2VfbWFudWZfZGVzY3JpcHRvciAqKTApLT5PZW1Bc3N5TnVtYmVyKQorI2RlZmluZQlNQU5VRl9NQU5VRkRBVEVfTEVOR1RICQlzaXplb2YoKChzdHJ1Y3QgZWRnZV9tYW51Zl9kZXNjcmlwdG9yICopMCktPk1hbnVmRGF0ZSkKKworI2RlZmluZQlNQU5VRl9JT05fQ09ORklHX0RJQUdfTk9fTE9PUAkweDIwCS8vIEFzIGJlbG93IGJ1dCBubyBleHQgbG9vcGJhY2sgdGVzdAorI2RlZmluZQlNQU5VRl9JT05fQ09ORklHX0RJQUcJCTB4NDAJLy8gOTMwIGJhc2VkIGRldmljZTogMT1SdW4gaC93IGRpYWdzLCAwPW5vcm0KKwkJCQkJCS8vIFRJVU1QIERldmljZSAgICA6IDE9SU9OU0VSSUFMIG5lZWRzIHRvIHJ1biBGaW5hbCBUZXN0CisjZGVmaW5lCU1BTlVGX0lPTl9DT05GSUdfTUFTVEVSCQkweDgwCS8vIDkzMCBiYXNlZCBkZXZpY2U6ICAxPU1hc3RlciBtb2RlLCAwPU5vcm1hbAorCQkJCQkJLy8gVElVTVAgRGV2aWNlICAgIDogIDE9Rmlyc3QgZGV2aWNlIG9uIGEgbXVsdGkgVElVTVAgRGV2aWNlCisKKy8vCisvLyBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgcGFyYW1ldGVycyBmb3IgdGhlIGJvb3QgY29kZSwgYW5kCisvLyBpcyBwcm9ncmFtbWVkIGFsb25nIHdpdGggbmV3IGJvb3QgY29kZS4gVGhlc2UgYXJlIHZhbHVlcworLy8gd2hpY2ggYXJlIHNwZWNpZmljIHRvIGEgZ2l2ZW4gYnVpbGQgb2YgdGhlIGJvb3QgY29kZS4gSXQKKy8vIGlzIGV4YWN0bHkgNjQgYnl0ZXMgbG9uZyBhbmQgaXMgZml4ZWQgYXQgYWRkcmVzcyBGRjp4RkMwCisvLyAtIEZGOnhGRkYuIE5vdGUgdGhhdCB0aGUgOTMwLW1hbmRhdGVkIFVDT05GSUcgYnl0ZXMgYXJlCisvLyBpbmNsdWRlZCBpbiB0aGlzIHN0cnVjdHVyZS4KKy8vCitzdHJ1Y3QgZWRnZV9ib290X2Rlc2NyaXB0b3IgeworCV9fdTgJCUxlbmd0aDsJCQkvLyBDMCBEZXNjIGxlbmd0aCwgcGVyIFVTQiAoPSA0MGgpCisJX191OAkJRGVzY1R5cGU7CQkvLyBDMSBEZXNjIHR5cGUsIHBlciBVU0IgKD0gREVWSUNFIHR5cGUpCisJX191OAkJRGVzY1ZlcjsJCS8vIEMyIERlc2MgdmVyc2lvbi9mb3JtYXQKKwlfX3U4CQlSZXNlcnZlZDE7CQkvLyBDMyAtLSB1bnVzZWQsIHNldCB0byAwIC0tCisKKwlfX2xlMTYJCUJvb3RDb2RlTGVuZ3RoOwkJLy8gQzQgQm9vdCBjb2RlIGdvZXMgZnJvbSBGRjowMDAwIHRvIEZGOihsZW4tMSkKKwkJCQkJCS8vCSAgKExFIGZvcm1hdCkKKworCV9fdTgJCU1ham9yVmVyc2lvbjsJCS8vIEM2IEZpcm13YXJlIHZlcnNpb246IHh4LgorCV9fdTgJCU1pbm9yVmVyc2lvbjsJCS8vIEM3CQkJeXkuCisJX19sZTE2CQlCdWlsZE51bWJlcjsJCS8vIEM4CQkJenp6eiAoTEUgZm9ybWF0KQorCQorCV9fdTE2CQlFbnVtUm9vdERlc2NUYWJsZTsJLy8gQ0EgUm9vdCBvZiBST00tYmFzZWQgZGVzY3JpcHRvciB0YWJsZQorCV9fdTgJCU51bURlc2NUeXBlczsJCS8vIENDIE51bWJlciBvZiBzdXBwb3J0ZWQgZGVzY3JpcHRvciB0eXBlcworCisJX191OAkJUmVzZXJ2ZWQ0OwkJLy8gQ0QgRml4IENvbXBpbGVyIFBhY2tpbmcKKworCV9fbGUxNgkJQ2FwYWJpbGl0aWVzOwkJLy8gQ0UtQ0YgQ2FwYWJpbGl0aWVzIGZsYWdzIChMRSBmb3JtYXQpCisJX191OAkJUmVzZXJ2ZWQyWzB4MjhdOwkvLyBEMCAtLSB1bnVzZWQsIHNldCB0byAwIC0tCisJX191OAkJVUNvbmZpZzA7CQkvLyBGOCA5MzAtZGVmaW5lZCBDUFUgY29uZmlndXJhdGlvbiBieXRlIDAKKwlfX3U4CQlVQ29uZmlnMTsJCS8vIEY5IDkzMC1kZWZpbmVkIENQVSBjb25maWd1cmF0aW9uIGJ5dGUgMQorCV9fdTgJCVJlc2VydmVkM1s2XTsJCS8vIEZBIC0tIHVudXNlZCwgc2V0IHRvIDAgLS0KKwkJCQkJCS8vIEZGIGVuZCBvZiBzdHJ1Y3R1cmUsIHRvdGFsIGxlbiA9IDgwCit9OworCisKKyNkZWZpbmUgQk9PVF9ERVNDX1ZFUl8xCQkxCS8vIE9yaWdpbmFsIGRlZmluaXRpb24gb2YgQk9PVF9QQVJBTVMKKyNkZWZpbmUgQk9PVF9ERVNDX1ZFUl8yCQkyCS8vIDJuZCBkZWZpbml0aW9uLCBkZXNjcmlwdG9ycyBub3QgaW5jbHVkZWQgaW4gYm9vdAorCisKKwkvLyBDYXBhYmlsaXRpZXMgZmxhZ3MKKworI2RlZmluZQlCT09UX0NBUF9SRVNFVF9DTUQJMHgwMDAxCS8vIElmIHNldCwgYm9vdCBjb3JyZWN0bHkgc3VwcG9ydHMgSU9OX1JFU0VUX0RFVklDRQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgVCBJICAgVSBNIFAgICBEIEUgRiBJIE4gSSBUIEkgTyBOIFMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8gQ2hpcCBkZWZpbml0aW9ucyBpbiBJMkMKKyNkZWZpbmUgVU1QNTE1MgkJCTB4NTIKKyNkZWZpbmUgVU1QMzQxMAkJCTB4MTAKKworCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8JVEkgSTJDIEZvcm1hdCBEZWZpbml0aW9ucworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyNkZWZpbmUgSTJDX0RFU0NfVFlQRV9JTkZPX0JBU0lDCTB4MDEKKyNkZWZpbmUgSTJDX0RFU0NfVFlQRV9GSVJNV0FSRV9CQVNJQwkweDAyCisjZGVmaW5lIEkyQ19ERVNDX1RZUEVfREVWSUNFCQkweDAzCisjZGVmaW5lIEkyQ19ERVNDX1RZUEVfQ09ORklHCQkweDA0CisjZGVmaW5lIEkyQ19ERVNDX1RZUEVfU1RSSU5HCQkweDA1CisjZGVmaW5lIEkyQ19ERVNDX1RZUEVfRklSTVdBUkVfQVVUTwkweDA3CS8vIGZvciAzNDEwIGRvd25sb2FkCisjZGVmaW5lIEkyQ19ERVNDX1RZUEVfQ09ORklHX0tMVURHRQkweDE0CS8vIGZvciAzNDEwCisjZGVmaW5lIEkyQ19ERVNDX1RZUEVfV0FUQ0hQT1JUX1ZFUlNJT04JMHgxNQkvLyBmaXJtd2FyZSB2ZXJzaW9uIG51bWJlciBmb3Igd2F0Y2hwb3J0CisjZGVmaW5lIEkyQ19ERVNDX1RZUEVfV0FUQ0hQT1JUX0NBTElCUkFUSU9OX0RBVEEgMHgxNgkvLyBXYXRjaHBvcnQgQ2FsaWJyYXRpb24gRGF0YQorCisjZGVmaW5lIEkyQ19ERVNDX1RZUEVfRklSTVdBUkVfQkxBTksJMHhmMgorCisvLyBTcGVjaWFsIHNlY3Rpb24gZGVmaW5lZCBieSBJT04KKyNkZWZpbmUgSTJDX0RFU0NfVFlQRV9JT04JCTAJLy8gTm90IGRlZmluZWQgYnkgVEkKKworCitzdHJ1Y3QgdGlfaTJjX2Rlc2MKK3sKKwlfX3U4CVR5cGU7CQkJLy8gVHlwZSBvZiBkZXNjcmlwdG9yCisJX191MTYJU2l6ZTsJCQkvLyBTaXplIG9mIGRhdGEgb25seSBub3QgaW5jbHVkaW5nIGhlYWRlcgorCV9fdTgJQ2hlY2tTdW07CQkvLyBDaGVja3N1bSAoOCBiaXQgc3VtIG9mIGRhdGEgb25seSkKKwlfX3U4CURhdGFbMF07CQkvLyBEYXRhIHN0YXJ0cyBoZXJlCit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8vIGZvciA1MTUyIGRldmljZXMgb25seSAodHlwZSAyIHJlY29yZCkKKy8vIGZvciAzNDEwIHRoZSB2ZXJzaW9uIGlzIHN0b3JlZCBpbiB0aGUgV0FUQ0hQT1JUX0ZJUk1XQVJFX1ZFUlNJT04gZGVzY3JpcHRvcgorc3RydWN0IHRpX2kyY19maXJtd2FyZV9yZWMKK3sKKwlfX3U4CVZlcl9NYWpvcjsJCS8vIEZpcm13YXJlIE1ham9yIHZlcnNpb24gbnVtYmVyCisJX191OAlWZXJfTWlub3I7CQkvLyBGaXJtd2FyZSBNaW5vciB2ZXJzaW9uIG51bWJlcgorCV9fdTgJRGF0YVswXTsJCS8vIERvd25sb2FkIHN0YXJ0cyBoZXJlCit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworc3RydWN0IHdhdGNocG9ydF9maXJtd2FyZV92ZXJzaW9uCit7CisvLyBBZGRlZCAyIGJ5dGVzIGZvciB2ZXJzaW9uIG51bWJlcgorCV9fdTgJVmVyc2lvbl9NYWpvcjsJCS8vICBEb3dubG9hZCBWZXJzaW9uIChmb3IgV2F0Y2hwb3J0KQorCV9fdTgJVmVyc2lvbl9NaW5vcjsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvLyBTdHJ1Y3R1cmUgb2YgaGVhZGVyIG9mIGRvd25sb2FkIGltYWdlIGluIGZ3X2Rvd24uaAorc3RydWN0IHRpX2kyY19pbWFnZV9oZWFkZXIKK3sKKwlfX2xlMTYJTGVuZ3RoOworCV9fdTgJQ2hlY2tTdW07Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCB0aV9iYXNpY19kZXNjcmlwdG9yCit7CisJX191OAlQb3dlcjsJCS8vIFNlbGYgcG93ZXJlZAorCQkJCS8vIGJpdCA3OiAxIC0gcG93ZXIgc3dpdGNoaW5nIHN1cHBvcnRlZAorCQkJCS8vICAgICAgICAwIC0gcG93ZXIgc3dpdGNoaW5nIG5vdCBzdXBwb3J0ZWQKKwkJCQkvLworCQkJCS8vIGJpdCAwOiAxIC0gc2VsZiBwb3dlcmVkCisJCQkJLy8gICAgICAgIDAgLSBidXMgcG93ZXJlZAorCQkJCS8vCisJCQkJLy8KKwlfX3UxNglIdWJWaWQ7CQkvLyBWSUQgSFVCCisJX191MTYJSHViUGlkOwkJLy8gUElEIEhVQgorCV9fdTE2CURldlBpZDsJCS8vIFBJRCBFZGdlcG9ydAorCV9fdTgJSHViVGltZTsJLy8gVGltZSBmb3IgcG93ZXIgb24gdG8gcG93ZXIgZ29vZAorCV9fdTgJSHViQ3VycmVudDsJLy8gSFVCIEN1cnJlbnQgPSAxMDBtYQorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvLyBDUFUgLyBCb2FyZCBSZXYgRGVmaW5pdGlvbnMKKyNkZWZpbmUgVElfQ1BVX1JFVl81MDUyCQkJMgkvLyA1MDUyIGJhc2VkIGVkZ2Vwb3J0cworI2RlZmluZSBUSV9DUFVfUkVWXzM0MTAJCQkzCS8vIDM0MTAgYmFzZWQgZWRnZXBvcnRzCisKKyNkZWZpbmUgVElfQk9BUkRfUkVWX1RJX0VQCQkwCS8vIEJhc2ljIHRpIGJhc2VkIGVkZ2Vwb3J0CisjZGVmaW5lIFRJX0JPQVJEX1JFVl9DT01QQUNUCQkxCS8vIENvbXBhY3QgYm9hcmQKKyNkZWZpbmUgVElfQk9BUkRfUkVWX1dBVENIUE9SVAkJMgkvLyBXYXRjaHBvcnQKKworCisjZGVmaW5lIFRJX0dFVF9DUFVfUkVWSVNJT04oeCkJCShfX3U4KSgoKCh4KT4+NCkmMHgwZikpCisjZGVmaW5lIFRJX0dFVF9CT0FSRF9SRVZJU0lPTih4KQkoX191OCkoKCh4KSYweDBmKSkKKworI2RlZmluZSBUSV9JMkNfU0laRV9NQVNLCQkweDFmICAvLyA1IGJpdHMKKyNkZWZpbmUgVElfR0VUX0kyQ19TSVpFKHgpCQkoKCgoeCkgJiBUSV9JMkNfU0laRV9NQVNLKSsxKSoyNTYpCisKKyNkZWZpbmUgVElfTUFYX0kyQ19TSVpFCQkJKCAxNiAqIDEwMjQgKQorCisjZGVmaW5lIFRJX01BTlVGX1ZFUlNJT05fMAkJMAkKKworLy8gSW9uQ29uaWcyIGZsYWdzCisjZGVmaW5lIFRJX0NPTkZJRzJfUlMyMzIJCTB4MDEKKyNkZWZpbmUgVElfQ09ORklHMl9SUzQyMgkJMHgwMgorI2RlZmluZSBUSV9DT05GSUcyX1JTNDg1CQkweDA0CisjZGVmaW5lIFRJX0NPTkZJRzJfU1dJVENIQUJMRQkJMHgwOAorCisjZGVmaW5lIFRJX0NPTkZJRzJfV0FUQ0hQT1JUCQkweDEwCisKKworc3RydWN0IGVkZ2VfdGlfbWFudWZfZGVzY3JpcHRvcgoreworCV9fdTggSW9uQ29uZmlnOwkJLy8gIENvbmZpZyBieXRlIGZvciBJT04gbWFudWZhY3R1cmluZyB1c2UKKwlfX3U4IElvbkNvbmZpZzI7CS8vICBFeHBhbnNpb24KKwlfX3U4IFZlcnNpb247CQkvLyAgVmVyc2lvbgorCV9fdTggQ3B1UmV2X0JvYXJkUmV2OwkvLyAgQ1BVIHJldmlzaW9uIGxldmVsICgweEYwKSBhbmQgQm9hcmQgUmV2IExldmVsICgweDBGKQorCV9fdTggTnVtUG9ydHM7CQkvLyAgTnVtYmVyIG9mIHBvcnRzCWZvciB0aGlzIFVNUAorCV9fdTggTnVtVmlydHVhbFBvcnRzOwkvLyAgTnVtYmVyIG9mIFZpcnR1YWwgcG9ydHMKKwlfX3U4IEh1YkNvbmZpZzE7CS8vICBVc2VkIHRvIGNvbmZpZ3VyZSB0aGUgSHViCisJX191OCBIdWJDb25maWcyOwkvLyAgVXNlZCB0byBjb25maWd1cmUgdGhlIEh1YgorCV9fdTggVG90YWxQb3J0czsJLy8gIFRvdGFsIE51bWJlciBvZiBDb20gUG9ydHMgZm9yIHRoZSBlbnRpcmUgZGV2aWNlIChBbGwgVU1QcykKKwlfX3U4IFJlc2VydmVkOwkJLy8gIFJlc2VydmVkCit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworI2VuZGlmCQkvLyBpZiAhZGVmaW5lZChfVVNCVkVORF9IKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JkNjljNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKQEAgLTAsMCArMSw5NzMgQEAKKy8qCisgKiBVU0IgQ29tcGFxIGlQQVEgZHJpdmVyCisgKgorICoJQ29weXJpZ2h0IChDKSAyMDAxIC0gMjAwMgorICoJICAgIEdhbmVzaCBWYXJhZGFyYWphbiA8Z2FuZXNoQHZlcml0YXMuY29tPgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogKDEyLzEyLzIwMDIpIGdhbmVzaAorICogCUFkZGVkIHN1cHBvcnQgZm9yIHByYWN0aWNhbGx5IGFsbCBkZXZpY2VzIHN1cHBvcnRlZCBieSBBY3RpdmVTeW5jCisgKiAJb24gV2luZG93cy4gVGhhbmtzIHRvIFdlcyBDaWxsZGhhaXJlIDxiaWxseWJvYmpvZWhlbnJ5Ym9iQGhvdG1haWwuY29tPi4KKyAqCisgKiAoMjYvMTEvMjAwMikgZ2FuZXNoCisgKiAJQWRkZWQgaW5zbW9kIG9wdGlvbnMgdG8gc3BlY2lmeSBwcm9kdWN0IGFuZCB2ZW5kb3IgaWQuCisgKiAJVXNlIG1vZHByb2JlIGlwYXEgdmVuZG9yPTB4Zm9vIHByb2R1Y3Q9MHhiYXIKKyAqCisgKiAoMjYvNy8yMDAyKSBnYW5lc2gKKyAqIAlGaXhlZCB1cCBicm9rZW4gZXJyb3IgaGFuZGxpbmcgaW4gaXBhcV9vcGVuLiBSZXRyeSB0aGUgImtpY2tzdGFydCIKKyAqIAlwYWNrZXQgbXVjaCBoYXJkZXIgLSB0aGlzIGRyYXN0aWNhbGx5IHJlZHVjZXMgY29ubmVjdGlvbiBmYWlsdXJlcy4KKyAqCisgKiAoMzAvNC8yMDAyKSBnYW5lc2gKKyAqIAlBZGRlZCBzdXBwb3J0IGZvciB0aGUgQ2FzaW8gRU01MDAuIENvbXBsZXRlbHkgdW50ZXN0ZWQuIFRoYW5rcworICogCXRvIGluZm8gZnJvbSBOYXRoYW4gPHdmaWxhcmRvQGZ1c2UubmV0PgorICoKKyAqICgxOS8zLzIwMDIpIGdhbmVzaAorICoJRG9uJ3Qgc3VibWl0IHVyYnMgd2hpbGUgaG9sZGluZyBzcGlubG9ja3MuIE5vdCBzdHJpY3RseSBuZWNlc3NhcnkKKyAqCWluIDIuNS54LgorICoKKyAqICg4LzMvMjAwMikgZ2FuZXNoCisgKiAJVGhlIGlwYXEgc29tZXRpbWVzIGVtaXRzIGEgJ1wwJyBiZWZvcmUgdGhlIENMSUVOVCBzdHJpbmcuIEF0IHRoaXMKKyAqIAlwb2ludCBvZiB0aW1lLCB0aGUgcHBwIGxkaXNjIGlzIG5vdCB5ZXQgYXR0YWNoZWQgdG8gdGhlIHR0eSwgc28KKyAqIAluX3R0eSBlY2hvZXMgIl4gIiB0byB0aGUgaXBhcSwgd2hpY2ggbWVzc2VzIHVwIHRoZSBjaGF0LiBJbiAyLjUuNi1wcmUyCisgKiAJdGhpcyBjYXVzZXMgYSBwYW5pYyBiZWNhdXNlIGVjaG9fY2hhcigpIHRyaWVzIHRvIHNsZWVwIGluIGludGVycnVwdAorICogCWNvbnRleHQuCisgKiAJVGhlIGZpeCBpcyB0byB0ZWxsIHRoZSB1cHBlciBsYXllcnMgdGhhdCB0aGlzIGlzIGEgcmF3IGRldmljZSBzbyB0aGF0CisgKiAJZWNob2luZyBpcyBzdXBwcmVzc2VkLiBUaGFua3MgdG8gTHlsZSBMaW5kaG9sbSBmb3IgYSBkZXRhaWxlZCBidWcKKyAqIAlyZXBvcnQuCisgKgorICogKDI1LzIvMjAwMikgZ2FuZXNoCisgKiAJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIEhQIEpvcm5hZGEgNTQ4IGFuZCA1NjguIENvbXBsZXRlbHkgdW50ZXN0ZWQuCisgKiAJVGhhbmtzIHRvIGluZm8gZnJvbSBIZWF0aCBSb2JpbnNvbiBhbmQgQXJpZWggRGF2aWRvZmYuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorI2luY2x1ZGUgImlwYXEuaCIKKworI2RlZmluZSBLUF9SRVRSSUVTCTEwMAorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjUiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkdhbmVzaCBWYXJhZGFyYWphbiA8Z2FuZXNoQHZlcml0YXMuY29tPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBQb2NrZXRQQyBQREEgZHJpdmVyIgorCitzdGF0aWMgX191MTYgcHJvZHVjdCwgdmVuZG9yOworc3RhdGljIGludCBkZWJ1ZzsKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgYW4gaXBhcSAqLworc3RhdGljIGludCAgaXBhcV9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBpcGFxX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50ICBpcGFxX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQgaXBhcV9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50IGlwYXFfd3JpdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCQkgICAgICAgaW50IGNvdW50KTsKK3N0YXRpYyBpbnQgaXBhcV93cml0ZV9idWxrKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCSAgIGludCBjb3VudCk7CitzdGF0aWMgdm9pZCBpcGFxX3dyaXRlX2dhdGhlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGlwYXFfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIGlwYXFfd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyBpbnQgaXBhcV93cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCBpcGFxX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGlwYXFfZGVzdHJveV9saXN0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKKworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaXBhcV9pZF90YWJsZSBbXSA9IHsKKwkvKiBUaGUgZmlyc3QgZW50cnkgaXMgYSBwbGFjZWhvbGRlciBmb3IgdGhlIGluc21vZC1zcGVjaWZpZWQgZGV2aWNlICovCisJeyBVU0JfREVWSUNFKDB4MDQ5RiwgMHgwMDAzKSB9LAorCXsgVVNCX0RFVklDRSgweDE2OTAsIDB4MDYwMSkgfSwgLyogQXNrZXkgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOTYwLCAweDAwNjUpIH0sIC8qIEJDT00gVVNCIFN5bmMgMDA2NSAqLworCXsgVVNCX0RFVklDRSgweDA5NjAsIDB4MDA2NikgfSwgLyogQkNPTSBVU0IgU3luYyAwMDY2ICovCisJeyBVU0JfREVWSUNFKDB4MDk2MCwgMHgwMDY3KSB9LCAvKiBCQ09NIFVTQiBTeW5jIDAwNjcgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwN0NGLCAweDIwMDEpIH0sIC8qIENBU0lPIFVTQiBTeW5jIDIwMDEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwN0NGLCAweDIwMDIpIH0sIC8qIENBU0lPIFVTQiBTeW5jIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwN0NGLCAweDIwMDMpIH0sIC8qIENBU0lPIFVTQiBTeW5jIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDlGLCAweDAwMDMpIH0sIC8qIENvbXBhcSBpUEFRIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDQ5RiwgMHgwMDMyKSB9LCAvKiBDb21wYXEgaVBBUSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwMSkgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDAyKSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDMpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwNCkgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDA1KSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDYpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwNykgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDA4KSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDkpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4MTAxNikgfSwgLyogSFAgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDExMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2MTEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDEyMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2MTIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDIwMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2MjAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDIxMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2MjEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDIyMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2MjIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDMwMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2MzAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDMxMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2MzEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDMyMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2MzIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDQwMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2NDAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDQxMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2NDEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDQyMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2NDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDUwMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2NTAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDUxMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2NTEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDUyMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2NTIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOTRCLCAweDAwMDEpIH0sIC8qIExpbmt1cCBTeXN0ZW1zIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDAwKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwMikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDAzKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwNSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDA2KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwOCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDA5KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MEEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwQikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDBDKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MEQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwRSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDBGKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTApIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQxMSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDEyKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQxNCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDE1KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQxNykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDMyKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MzMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzNCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDM1KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MzYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzNykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDM4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MzkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzQSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDNCKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0M0MpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzRCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDNFKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0M0YpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0MCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQxKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0MykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQ0KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0NikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQ3KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0OSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDRBKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NEIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0QykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDREKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NEUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0RikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDUwKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1MikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDUzKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1NSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDU2KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1OCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDU5KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NUEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1QikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDVDKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NUQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1RSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDVGKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjApIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2MSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDYyKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2NCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDY1KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2NykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDY4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2QSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDZCKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NkMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2RCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDZFKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NkYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3MCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDcxKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3MykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDc0KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3NikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDc3KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3OSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDdBKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0N0IpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRDOCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRDOSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRDQSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRDQikgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRDQykgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRDRCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRDRSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMiAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRENykgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDREOCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDREOSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDREQSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDREQikgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDREQykgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRERCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRERSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRERikgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFMCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFMSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFMikgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFMykgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFNCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFNSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFNikgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFNykgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFOCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFOSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFQSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLworCXsgVVNCX0RFVklDRSgweDA5NjEsIDB4MDAxMCkgfSwgLyogUG9ydGF0ZWMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHg1RTA0LCAweENFMDApIH0sIC8qIFNBR0VNIFdpcmVsZXNzIEFzc2lzdGFudCAqLworCXsgVVNCX0RFVklDRSgweDAxMDQsIDB4MDBCRSkgfSwgLyogU29ja2V0IFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzAwKSB9LCAvKiBUT1NISUJBIFVTQiBTeW5jIDA3MDAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MDUpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGUzMTAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MDcpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGUzMzAgU2VyaWVzICovCisJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzA4KSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlMzUwoFNlcmllcyAqLworCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwNikgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTc0MCAqLworCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwOSkgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTc1MCBTZXJpZXMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MEEpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGU0MDAgU2VyaWVzICovCisJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzBCKSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlODAwIFNlcmllcyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MDBDRSkgfSwgLyogSFRDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTAxKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwMikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMDMpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA0KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwNSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMDYpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA3KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwOCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMDkpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBBKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwQikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMEMpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBEKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwRSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMEYpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTEwKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExMSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMTIpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTEzKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExNCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMTUpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE2KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExNykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMTgpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE5KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExQSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMUIpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFDKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExRCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMUUpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFGKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyMCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMjEpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTIyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyMykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMjQpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI1KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyNikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMjcpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI4KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyOSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMkEpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJCKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyQykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMkQpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJFKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyRikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMzApIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTMxKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzMikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMzMpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM0KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzNSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMzYpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM3KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzOCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMzkpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNBKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzQikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBM0MpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNEKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzRSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBM0YpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQwKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0MSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNDIpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQzKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0NCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNDUpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ2KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0NykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNDgpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ5KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0QSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNEIpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTRDKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0RCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNEUpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTRGKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1MCkgfSwgLyogSFRDIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTMpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTYpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTcpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTgpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTkpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNUEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNUIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNUMpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNUQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNUUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNUYpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjApIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjMpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjYpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjcpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjgpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjkpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNkEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNkIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNkMpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNkQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNkUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNkYpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzApIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzMpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzYpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzcpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzgpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzkpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBN0EpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBN0IpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBN0MpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBN0QpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBN0UpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBN0YpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODApIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODMpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODYpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODcpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODgpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODkpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOEEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOEIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOEMpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOEQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOEUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOEYpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTApIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTMpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTYpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTcpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTgpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTkpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOUEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOUIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOUMpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOUQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOUUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOUYpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDA5LCAweDAwRDUpIH0sIC8qIE5FQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0MDksIDB4MDBENikgfSwgLyogTkVDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDQwOSwgMHgwMEQ3KSB9LCAvKiBORUMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNDA5LCAweDgwMjQpIH0sIC8qIE5FQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0MDksIDB4ODAyNSkgfSwgLyogTkVDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRBNCwgMHgwMDE0KSB9LCAvKiBIaXRhY2hpIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJGOCwgMHgxMDAxKSB9LCAvKiBGdWppdHN1IFNpZW1lbnMgQ29tcHV0ZXJzIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEY5OCwgMHgwMjAxKSB9LCAvKiBDeWJlcmJhbmsgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTAyLCAweDE2RTEpIH0sIC8qIEFjZXIgbjEwIEhhbmRoZWxkIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDUwMiwgMHgxNkUzKSB9LCAvKiBBY2VyIG4zMCBIYW5kaGVsZCBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA1MDIsIDB4MTZFMikgfSwgLyogQWNlciBuMjAgSGFuZGhlbGQgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTAyLCAweDE2MzEpIH0sIC8qIGMxMCBTZXJpZXMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTAyLCAweDE2MzIpIH0sIC8qIGMyMCBTZXJpZXMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQjA1LCAweDkyMDIpIH0sIC8qIEFTVVMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQjA1LCAweDQyMEYpIH0sIC8qIEFTVVMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQjA1LCAweDQyMDApIH0sIC8qIEFTVVMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQjA1LCAweDQyMDEpIH0sIC8qIEFTVVMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQjA1LCAweDQyMDIpIH0sIC8qIEFTVVMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQjA1LCAweDkyMDApIH0sIC8qIEFTVVMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwQzhFLCAweDYwMDApIH0sIC8qIENlc3Njb20gTHV4aWFuIFNlcmllcyAqLworCXsgVVNCX0RFVklDRSgweDA0QUQsIDB4MDMwMSkgfSwgLyogVVNCIFN5bmMgMDMwMSAqLworCXsgVVNCX0RFVklDRSgweDA0QUQsIDB4MDMwMikgfSwgLyogVVNCIFN5bmMgMDMwMiAqLworCXsgVVNCX0RFVklDRSgweDA0QUQsIDB4MDMwMykgfSwgLyogVVNCIFN5bmMgMDMwMyAqLworCXsgVVNCX0RFVklDRSgweDEwNjYsIDB4MDMwMCkgfSwgLyogRS1URU4gUDNYWCBQb2NrZXQgUEMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDA1MDApIH0sIC8qIEUtVEVOIFA1WFggUG9ja2V0IFBDICovCisJeyBVU0JfREVWSUNFKDB4MTA2NiwgMHgwNjAwKSB9LCAvKiBFLVRFTiBQNlhYIFBvY2tldCBQQyAqLworCXsgVVNCX0RFVklDRSgweDEwNjYsIDB4MDcwMCkgfSwgLyogRS1URU4gUDdYWCBQb2NrZXQgUEMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDAwQ0UpIH0sIC8qIEUtVEVOIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEY0RSwgMHgwMjAwKSB9LCAvKiBGcmVlZG9tIFNjaWVudGlmaWMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEM1LCAweDEwNTgpIH0sIC8qIEZVSklUU1UgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEM1LCAweDEwNzkpIH0sIC8qIEZVSklUU1UgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNjdFLCAweDEwMDEpIH0sIC8qIEludGVybWVjIE1vYmlsZSBDb21wdXRlciAqLworCXsgVVNCX0RFVklDRSgweDA0ZjEsIDB4MzAxMSkgfSwgLyogSlZDIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRGMSwgMHgzMDEyKSB9LCAvKiBKVkMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgzNzA4LCAweDIwQ0UpIH0sIC8qIExlZ2VuZCBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDM3MDgsIDB4MjFDRSkgfSwgLyogTGVub3ZvIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDQzRSwgMHg5QzAxKSB9LCAvKiBMR0UgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNERBLCAweDI1MDApIH0sIC8qIFBhbmFzb25pYyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MEIxQykgfSwgLyogR2VuZXJpYyBQUEMgU3Ryb25nQVJNICovCisJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwRTNBKSB9LCAvKiBHZW5lcmljIFBQQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MEYzQSkgfSwgLyogR2VuZXJpYyBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwRjFDKSB9LCAvKiBJdGF1dGVjIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgxMzI2KSB9LCAvKiBJdGF1dGVjIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgzMzI2KSB9LCAvKiBNRURJT04gV2lub2R3cyBNb2JsZSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MDMyNikgfSwgLyogTWlvIERpZ2lXYWxrZXIgMzM4ICovCisJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwNDI2KSB9LCAvKiBNaW8gRGlnaVdhbGtlciAzMzggKi8KKwl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDAxMUMpIH0sIC8qIE1pbyBEaWdpV2Fsa2VyIFBQQyBTdHJvbmdBUk0gKi8KKwl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDA1M0EpIH0sIC8qIE1pbyBEaWdpV2Fsa2VyIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDA0M0EpIH0sIC8qIE1pbyBEaWdpV2Fsa2VyIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwNzFDKSB9LCAvKiBNaVRBQyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MDUxQykgfSwgLyogTWlUQUMgVVNCIFN5bmMgNTI4ICovCisJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgyMzI2KSB9LCAvKiBWb2JpcyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MTkxQykgfSwgLyogWUFLVU1PIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4NDExMywgMHgwMjEwKSB9LCAvKiBNb2JpbGUgTWVkaWEgVGVjaG5vbG9neSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDQxMTMsIDB4MDIxMSkgfSwgLyogTW9iaWxlIE1lZGlhIFRlY2hub2xvZ3kgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHg0MTEzLCAweDA0MDApIH0sIC8qIE1vYmlsZSBNZWRpYSBUZWNobm9sb2d5IFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4NDExMywgMHgwNDEwKSB9LCAvKiBNb2JpbGUgTWVkaWEgVGVjaG5vbG9neSBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBDQUQsIDB4OTAwMSkgfSwgLyogTW90b3JvbGEgUG93ZXJQYWQgUG9ja2V0IFBDoERldmljZSAqLworCXsgVVNCX0RFVklDRSgweDBDNDQsIDB4MDNBMikgfSwgLyogTW90b3JvbGEgaURFTiBTbWFydHBob25lICovCisJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjExKSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MTMpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYxNSkgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjE3KSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MTkpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYxQikgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg1RjAwKSB9LCAvKiBTYW1zdW5nIE5FWGlPIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg1RjAxKSB9LCAvKiBTYW1zdW5nIE5FWGlPIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg1RjAyKSB9LCAvKiBTYW1zdW5nIE5FWGlPIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg1RjAzKSB9LCAvKiBTYW1zdW5nIE5FWGlPIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg1RjA0KSB9LCAvKiBTYW1zdW5nIE5FWGlPIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjJFKSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MzApIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYzMikgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4NDUwNSwgMHgwMDEwKSB9LCAvKiBTbWFydHBob25lICovCisJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDAwKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDEpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDIpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDMpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDQpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDUpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDYpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDYgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDcpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDcgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDgpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDggKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDkpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMEEpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMEEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMTgyLCAweDEzODgpIH0sIC8qIFZFUyBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MEVEOSkgfSwgLyogVmlld1NvbmljIENvbG9yIFBvY2tldCBQQyBWMzUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE1MjcpIH0sIC8qIFZpZXdTb25pYyBDb2xvciBQb2NrZXQgUEMgVjM2ICovCisJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxNTI5KSB9LCAvKiBWaWV3U29uaWMgQ29sb3IgUG9ja2V0IFBDIFYzNyAqLworCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MTUyQikgfSwgLyogVmlld1NvbmljIENvbG9yIFBvY2tldCBQQyBWMzggKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE1MkUpIH0sIC8qIFZpZXdTb25pYyBQb2NrZXQgUEMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE5MjEpIH0sIC8qIFZpZXdTb25pYyBDb21tdW5pY2F0b3IgUG9ja2V0IFBDICovCisJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxOTIyKSB9LCAvKiBWaWV3U29uaWMgU21hcnRwaG9uZSAqLworCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MTkyMykgfSwgLyogVmlld1NvbmljIFBvY2tldCBQQyBWMzAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTM2LCAweDAxQTApIH0sIC8qIEhIUCBQRFQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOTlFLCAweDAwNTIpIH0sIC8qIFRyaW1ibGUgR2VvRXhwbG9yZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOTlFLCAweDQwMDApIH0sIC8qIFREUyBEYXRhIENvbGxlY3RvciAqLworCXsgVVNCX0RFVklDRSgweDBGQjgsIDB4MzAwMSkgfSwgLyogV2lzdHJvbiBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBGQjgsIDB4MzAwMikgfSwgLyogV2lzdHJvbiBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBGQjgsIDB4MzAwMykgfSwgLyogV2lzdHJvbiBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDBGQjgsIDB4NDAwMSkgfSwgLyogV2lzdHJvbiBVU0IgU3luYyAqLworCXsgVVNCX0RFVklDRSgweDExRDksIDB4MTAwMykgfSwgLyogUnVnZ2VkIFBvY2tldCBQQyAyMDAzICovCisJeyBVU0JfREVWSUNFKDB4MTFEOSwgMHgxMDAyKSB9LCAvKiBSdWdnZWQgUG9ja2V0IFBDIDIwMDMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgyMkI4LCAweDQyMDQpIH0sIC8qIE1vdG9yb2xhIE1QeDIwMCBTbWFydHBob25lICovCisJeyBVU0JfREVWSUNFKDB4MjJCOCwgMHg0MjE0KSB9LCAvKiBNb3Rvcm9sYSBNUGMgR1NNICovCisJeyBVU0JfREVWSUNFKDB4MjJCOCwgMHg0MjI0KSB9LCAvKiBNb3Rvcm9sYSBNUHgyMjAgU21hcnRwaG9uZSAqLworCXsgVVNCX0RFVklDRSgweDIyQjgsIDB4NDIzNCkgfSwgLyogTW90b3JvbGEgTVBjIENETUEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgyMkI4LCAweDQyNDQpIH0sIC8qIE1vdG9yb2xhIE1QeDEwMCBTbWFydHBob25lICovCisJeyBVU0JfREVWSUNFKDB4MTIzMSwgMHhDRTAxKSB9LCAvKiBVU0IgU3luYyAwMyAqLworCXsgVVNCX0RFVklDRSgweDEyMzEsIDB4Q0UwMikgfSwgLyogVVNCIFN5bmMgMDMgKi8KKwl7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlwYXFfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaXBhcV9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJImlwYXEiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaXBhcV9pZF90YWJsZSwKK307CisKKworLyogQWxsIG9mIHRoZSBkZXZpY2UgaW5mbyBuZWVkZWQgZm9yIHRoZSBDb21wYXEgaVBBUSAqLworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGlwYXFfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIlBvY2tldFBDIFBEQSIsCisJLmlkX3RhYmxlID0JCWlwYXFfaWRfdGFibGUsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQlOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19pbiA9CQkxLAorCS5udW1fYnVsa19vdXQgPQkJMSwKKwkubnVtX3BvcnRzID0JCTEsCisJLm9wZW4gPQkJCWlwYXFfb3BlbiwKKwkuY2xvc2UgPQkJaXBhcV9jbG9zZSwKKwkuYXR0YWNoID0JCWlwYXFfc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkJaXBhcV9zaHV0ZG93biwKKwkud3JpdGUgPQkJaXBhcV93cml0ZSwKKwkud3JpdGVfcm9vbSA9CQlpcGFxX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlciA9CWlwYXFfY2hhcnNfaW5fYnVmZmVyLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQlpcGFxX3JlYWRfYnVsa19jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9CWlwYXFfd3JpdGVfYnVsa19jYWxsYmFjaywKK307CisKK3N0YXRpYyBzcGlubG9ja190CXdyaXRlX2xpc3RfbG9jazsKK3N0YXRpYyBpbnQJCWJ5dGVzX2luOworc3RhdGljIGludAkJYnl0ZXNfb3V0OworCitzdGF0aWMgaW50IGlwYXFfb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbAkqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXY7CisJc3RydWN0IGlwYXFfcGFja2V0CSpwa3Q7CisJaW50CQkJaSwgcmVzdWx0ID0gMDsKKwlpbnQJCQlyZXRyaWVzID0gS1BfUkVUUklFUzsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJYnl0ZXNfaW4gPSAwOworCWJ5dGVzX291dCA9IDA7CisJcHJpdiA9IChzdHJ1Y3QgaXBhcV9wcml2YXRlICopa21hbGxvYyhzaXplb2Yoc3RydWN0IGlwYXFfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmIChwcml2ID09IE5VTEwpIHsKKwkJZXJyKCIlcyAtIE91dCBvZiBtZW1vcnkiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIHByaXYpOworCXByaXYtPmFjdGl2ZSA9IDA7CisJcHJpdi0+cXVldWVfbGVuID0gMDsKKwlwcml2LT5mcmVlX2xlbiA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPnF1ZXVlKTsKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+ZnJlZWxpc3QpOworCisJZm9yIChpID0gMDsgaSA8IFVSQkRBVEFfUVVFVUVfTUFYIC8gUEFDS0VUX1NJWkU7IGkrKykgeworCQlwa3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXBhcV9wYWNrZXQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHBrdCA9PSBOVUxMKSB7CisJCQlnb3RvIGVub21lbTsKKwkJfQorCQlwa3QtPmRhdGEgPSBrbWFsbG9jKFBBQ0tFVF9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHBrdC0+ZGF0YSA9PSBOVUxMKSB7CisJCQlrZnJlZShwa3QpOworCQkJZ290byBlbm9tZW07CisJCX0KKwkJcGt0LT5sZW4gPSAwOworCQlwa3QtPndyaXR0ZW4gPSAwOworCQlJTklUX0xJU1RfSEVBRCgmcGt0LT5saXN0KTsKKwkJbGlzdF9hZGQoJnBrdC0+bGlzdCwgJnByaXYtPmZyZWVsaXN0KTsKKwkJcHJpdi0+ZnJlZV9sZW4gKz0gUEFDS0VUX1NJWkU7CisJfQorCisJLyoKKwkgKiBGb3JjZSBsb3cgbGF0ZW5jeSBvbi4gVGhpcyB3aWxsIGltbWVkaWF0ZWx5IHB1c2ggZGF0YSB0byB0aGUgbGluZQorCSAqIGRpc2NpcGxpbmUgaW5zdGVhZCBvZiBxdWV1ZWluZy4KKwkgKi8KKworCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAxOworCXBvcnQtPnR0eS0+cmF3ID0gMTsKKwlwb3J0LT50dHktPnJlYWxfcmF3ID0gMTsKKworCS8qCisJICogTG9zZSB0aGUgc21hbGwgYnVmZmVycyB1c2JzZXJpYWwgcHJvdmlkZXMuIE1ha2UgbGFyZ2VyIG9uZXMuCisJICovCisKKwlrZnJlZShwb3J0LT5idWxrX2luX2J1ZmZlcik7CisJa2ZyZWUocG9ydC0+YnVsa19vdXRfYnVmZmVyKTsKKwlwb3J0LT5idWxrX2luX2J1ZmZlciA9IGttYWxsb2MoVVJCREFUQV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAocG9ydC0+YnVsa19pbl9idWZmZXIgPT0gTlVMTCkgeworCQlnb3RvIGVub21lbTsKKwl9CisJcG9ydC0+YnVsa19vdXRfYnVmZmVyID0ga21hbGxvYyhVUkJEQVRBX1NJWkUsIEdGUF9LRVJORUwpOworCWlmIChwb3J0LT5idWxrX291dF9idWZmZXIgPT0gTlVMTCkgeworCQlrZnJlZShwb3J0LT5idWxrX2luX2J1ZmZlcik7CisJCWdvdG8gZW5vbWVtOworCX0KKwlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyID0gcG9ydC0+YnVsa19pbl9idWZmZXI7CisJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBwb3J0LT5idWxrX291dF9idWZmZXI7CisJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBVUkJEQVRBX1NJWkU7CisJcG9ydC0+YnVsa19vdXRfc2l6ZSA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IFVSQkRBVEFfU0laRTsKKwkKKwkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLworCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwgCisJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkgICAgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJICAgICAgaXBhcV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVzdWx0KSB7CisJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyoKKwkgKiBTZW5kIG91dCBjb250cm9sIG1lc3NhZ2Ugb2JzZXJ2ZWQgaW4gd2luOTggc25pZmZzLiBOb3Qgc3VyZSB3aGF0CisJICogaXQgZG9lcywgYnV0IGZyb20gZW1waXJpY2FsIG9ic2VydmF0aW9ucywgaXQgc2VlbXMgdGhhdCB0aGUgZGV2aWNlCisJICogd2lsbCBzdGFydCB0aGUgY2hhdCBzZXF1ZW5jZSBvbmNlIG9uZSBvZiB0aGVzZSBtZXNzYWdlcyBnZXRzCisJICogdGhyb3VnaC4gU2luY2UgdGhpcyBoYXMgYSByZWFzb25hYmx5IGhpZ2ggZmFpbHVyZSByYXRlLCB3ZSByZXRyeQorCSAqIHNldmVyYWwgdGltZXMuCisJICovCisKKwl3aGlsZSAocmV0cmllcy0tKSB7CisJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKKwkJCQl1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLCAweDIyLCAweDIxLAorCQkJCTB4MSwgMCwgTlVMTCwgMCwgMTAwKTsKKwkJaWYgKHJlc3VsdCA9PSAwKSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwllcnIoIiVzIC0gZmFpbGVkIGRvaW5nIGNvbnRyb2wgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwlnb3RvIGVycm9yOworCitlbm9tZW06CisJcmVzdWx0ID0gLUVOT01FTTsKKwllcnIoIiVzIC0gT3V0IG9mIG1lbW9yeSIsIF9fRlVOQ1RJT05fXyk7CitlcnJvcjoKKwlpcGFxX2Rlc3Ryb3lfbGlzdHMocG9ydCk7CisJa2ZyZWUocHJpdik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgdm9pZCBpcGFxX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJCSAKKwkvKgorCSAqIHNodXQgZG93biBidWxrIHJlYWQgYW5kIHdyaXRlCisJICovCisJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwlpcGFxX2Rlc3Ryb3lfbGlzdHMocG9ydCk7CisJa2ZyZWUocHJpdik7CisJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIE5VTEwpOworCisJLyogVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSBpZiB5b3Ugd2FudCB0byBzZWUgc29tZSBzdGF0aXN0aWNzIGluIHlvdXIgc3lzbG9nICovCisJLyogaW5mbyAoIkJ5dGVzIEluID0gJWQgIEJ5dGVzIE91dCA9ICVkIiwgYnl0ZXNfaW4sIGJ5dGVzX291dCk7ICovCit9CisKK3N0YXRpYyB2b2lkIGlwYXFfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB0dHlfc3RydWN0CSp0dHk7CisJdW5zaWduZWQgY2hhcgkJKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQJCQlpLCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKHR0eSAmJiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJZm9yIChpID0gMDsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aCA7ICsraSkgeworCQkJLyogaWYgd2UgaW5zZXJ0IG1vcmUgdGhhbiBUVFlfRkxJUEJVRl9TSVpFIGNoYXJhY3RlcnMsIHdlIGRyb3AgdGhlbS4gKi8KKwkJCWlmKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCX0KKwkJCS8qIHRoaXMgZG9lc24ndCBhY3R1YWxseSBwdXNoIHRoZSBkYXRhIHRocm91Z2ggdW5sZXNzIHR0eS0+bG93X2xhdGVuY3kgaXMgc2V0ICovCisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIDApOworCQl9CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCWJ5dGVzX2luICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwl9CisKKwkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgICovCisJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCSAgICAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkgICAgICBpcGFxX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpCisJCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgaXBhcV93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisJCSAgICAgICBpbnQgY291bnQpCit7CisJY29uc3QgdW5zaWduZWQgY2hhcgkqY3VycmVudF9wb3NpdGlvbiA9IGJ1ZjsKKwlpbnQJCQlieXRlc19zZW50ID0gMDsKKwlpbnQJCQl0cmFuc2Zlcl9zaXplOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCXRyYW5zZmVyX3NpemUgPSBtaW4oY291bnQsIFBBQ0tFVF9TSVpFKTsKKwkJaWYgKGlwYXFfd3JpdGVfYnVsayhwb3J0LCBjdXJyZW50X3Bvc2l0aW9uLCB0cmFuc2Zlcl9zaXplKSkgeworCQkJYnJlYWs7CisJCX0KKwkJY3VycmVudF9wb3NpdGlvbiArPSB0cmFuc2Zlcl9zaXplOworCQlieXRlc19zZW50ICs9IHRyYW5zZmVyX3NpemU7CisJCWNvdW50IC09IHRyYW5zZmVyX3NpemU7CisJCWJ5dGVzX291dCArPSB0cmFuc2Zlcl9zaXplOworCX0KKworCXJldHVybiBieXRlc19zZW50OworfSAKKworc3RhdGljIGludCBpcGFxX3dyaXRlX2J1bGsoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJICAgaW50IGNvdW50KQoreworCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IGlwYXFfcGFja2V0CSpwa3QgPSBOVUxMOworCWludAkJCXJlc3VsdCA9IDA7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlpZiAocHJpdi0+ZnJlZV9sZW4gPD0gMCkgeworCQlkYmcoIiVzIC0gd2UncmUgc3R1ZmZlZCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3cml0ZV9saXN0X2xvY2ssIGZsYWdzKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnByaXYtPmZyZWVsaXN0KSkgeworCQlwa3QgPSBsaXN0X2VudHJ5KHByaXYtPmZyZWVsaXN0Lm5leHQsIHN0cnVjdCBpcGFxX3BhY2tldCwgbGlzdCk7CisJCWxpc3RfZGVsKCZwa3QtPmxpc3QpOworCQlwcml2LT5mcmVlX2xlbiAtPSBQQUNLRVRfU0laRTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CisJaWYgKHBrdCA9PSBOVUxMKSB7CisJCWRiZygiJXMgLSB3ZSdyZSBzdHVmZmVkIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJbWVtY3B5KHBrdC0+ZGF0YSwgYnVmLCBjb3VudCk7CisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGNvdW50LCBwa3QtPmRhdGEpOworCisJcGt0LT5sZW4gPSBjb3VudDsKKwlwa3QtPndyaXR0ZW4gPSAwOworCXNwaW5fbG9ja19pcnFzYXZlKCZ3cml0ZV9saXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZwa3QtPmxpc3QsICZwcml2LT5xdWV1ZSk7CisJcHJpdi0+cXVldWVfbGVuICs9IGNvdW50OworCWlmIChwcml2LT5hY3RpdmUgPT0gMCkgeworCQlwcml2LT5hY3RpdmUgPSAxOworCQlpcGFxX3dyaXRlX2dhdGhlcihwb3J0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXN1bHQpIHsKKwkJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQl9CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGlwYXFfd3JpdGVfZ2F0aGVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGlwYXFfcHJpdmF0ZQkqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbAkqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWludAkJCWNvdW50LCByb29tOworCXN0cnVjdCBpcGFxX3BhY2tldAkqcGt0LCAqdG1wOworCXN0cnVjdCB1cmIJCSp1cmIgPSBwb3J0LT53cml0ZV91cmI7CisKKwlpZiAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCS8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwkJZXJyKCIlcyAtIGZsdXNoaW5nIHdoaWxlIHVyYiBpcyBhY3RpdmUgISIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJcm9vbSA9IFVSQkRBVEFfU0laRTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGt0LCB0bXAsICZwcml2LT5xdWV1ZSwgbGlzdCkgeworCQljb3VudCA9IG1pbihyb29tLCAoaW50KShwa3QtPmxlbiAtIHBrdC0+d3JpdHRlbikpOworCQltZW1jcHkodXJiLT50cmFuc2Zlcl9idWZmZXIgKyAoVVJCREFUQV9TSVpFIC0gcm9vbSksCisJCSAgICAgICBwa3QtPmRhdGEgKyBwa3QtPndyaXR0ZW4sIGNvdW50KTsKKwkJcm9vbSAtPSBjb3VudDsKKwkJcGt0LT53cml0dGVuICs9IGNvdW50OworCQlwcml2LT5xdWV1ZV9sZW4gLT0gY291bnQ7CisJCWlmIChwa3QtPndyaXR0ZW4gPT0gcGt0LT5sZW4pIHsKKwkJCWxpc3RfbW92ZSgmcGt0LT5saXN0LCAmcHJpdi0+ZnJlZWxpc3QpOworCQkJcHJpdi0+ZnJlZV9sZW4gKz0gUEFDS0VUX1NJWkU7CisJCX0KKwkJaWYgKHJvb20gPT0gMCkgeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwljb3VudCA9IFVSQkRBVEFfU0laRSAtIHJvb207CisJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+d3JpdGVfdXJiLCBzZXJpYWwtPmRldiwgCisJCSAgICAgIHVzYl9zbmRidWxrcGlwZShzZXJpYWwtPmRldiwgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJICAgICAgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIGNvdW50LCBpcGFxX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJCSAgICAgIHBvcnQpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgaXBhcV93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJaW50CQkJcmVzdWx0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3cml0ZV9saXN0X2xvY2ssIGZsYWdzKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnByaXYtPnF1ZXVlKSkgeworCQlpcGFxX3dyaXRlX2dhdGhlcihwb3J0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXN1bHQpIHsKKwkJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQl9CisJfSBlbHNlIHsKKwkJcHJpdi0+YWN0aXZlID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CisJfQorCisJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7Cit9CisKK3N0YXRpYyBpbnQgaXBhcV93cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGlwYXFfcHJpdmF0ZQkqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWRiZygiJXMgLSBmcmVlbGVuICVkIiwgX19GVU5DVElPTl9fLCBwcml2LT5mcmVlX2xlbik7CisJcmV0dXJuIHByaXYtPmZyZWVfbGVuOworfQorCitzdGF0aWMgaW50IGlwYXFfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGlwYXFfcHJpdmF0ZQkqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWRiZygiJXMgLSBxdWV1ZWxlbiAlZCIsIF9fRlVOQ1RJT05fXywgcHJpdi0+cXVldWVfbGVuKTsKKwlyZXR1cm4gcHJpdi0+cXVldWVfbGVuOworfQorCitzdGF0aWMgdm9pZCBpcGFxX2Rlc3Ryb3lfbGlzdHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCBpcGFxX3BhY2tldAkqcGt0LCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBrdCwgdG1wLCAmcHJpdi0+cXVldWUsIGxpc3QpIHsKKwkJa2ZyZWUocGt0LT5kYXRhKTsKKwkJa2ZyZWUocGt0KTsKKwl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBrdCwgdG1wLCAmcHJpdi0+ZnJlZWxpc3QsIGxpc3QpIHsKKwkJa2ZyZWUocGt0LT5kYXRhKTsKKwkJa2ZyZWUocGt0KTsKKwl9Cit9CisKKworc3RhdGljIGludCBpcGFxX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKwlpZiAoc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlICE9IDEpIHsKKwkJZXJyKCJhY3RpdmUgY29uZmlnICMlZCAhPSAxID8/IiwKKwkJCXNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlyZXR1cm4gdXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24gKHNlcmlhbC0+ZGV2KTsKK30KKworc3RhdGljIHZvaWQgaXBhcV9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworfQorCitzdGF0aWMgaW50IF9faW5pdCBpcGFxX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXNwaW5fbG9ja19pbml0KCZ3cml0ZV9saXN0X2xvY2spOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmlwYXFfZGV2aWNlKTsKKwlpZiAocmV0dmFsKSAKKwkJZ290byBmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjsKKwlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJaWYgKHZlbmRvcikgeworCQlpcGFxX2lkX3RhYmxlWzBdLmlkVmVuZG9yID0gdmVuZG9yOworCQlpcGFxX2lkX3RhYmxlWzBdLmlkUHJvZHVjdCA9IHByb2R1Y3Q7CisJfQorCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmaXBhcV9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKKwkJICAKKwlyZXR1cm4gMDsKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZpcGFxX2RldmljZSk7CitmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjoKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpcGFxX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmaXBhcV9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmaXBhcV9kZXZpY2UpOworfQorCisKK21vZHVsZV9pbml0KGlwYXFfaW5pdCk7Cittb2R1bGVfZXhpdChpcGFxX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CisKK21vZHVsZV9wYXJhbSh2ZW5kb3IsIHVzaG9ydCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZlbmRvciwgIlVzZXIgc3BlY2lmaWVkIFVTQiBpZFZlbmRvciIpOworCittb2R1bGVfcGFyYW0ocHJvZHVjdCwgdXNob3J0LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocHJvZHVjdCwgIlVzZXIgc3BlY2lmaWVkIFVTQiBpZFByb2R1Y3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOTAzNTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBVU0IgQ29tcGFxIGlQQVEgZHJpdmVyCisgKgorICoJQ29weXJpZ2h0IChDKSAyMDAxIC0gMjAwMgorICoJICAgIEdhbmVzaCBWYXJhZGFyYWphbiA8Z2FuZXNoQHZlcml0YXMuY29tPgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19MSU5VWF9VU0JfU0VSSUFMX0lQQVFfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9TRVJJQUxfSVBBUV9ICisKKy8qCisgKiBTaW5jZSB3ZSBjYW4ndCBxdWV1ZSBvdXIgYnVsayB3cml0ZSB1cmJzIChkb24ndCBrbm93IHdoeSAtIGl0IGp1c3QKKyAqIGRvZXNuJ3Qgd29yayksIHdlIGNhbiBzZW5kIGRvd24gb25seSBvbmUgd3JpdGUgdXJiIGF0IGEgdGltZS4gVGhlIHNpbXBsaXN0aWMKKyAqIGFwcHJvYWNoIHRha2VuIGJ5IHRoZSBnZW5lcmljIHVzYnNlcmlhbCBkcml2ZXIgd2lsbCB3b3JrLCBidXQgaXQncyBub3QgZ29vZAorICogZm9yIHBlcmZvcm1hbmNlLiBUaGVyZWZvcmUsIHdlIGJ1ZmZlciB1cHRvIFVSQkRBVEFfUVVFVUVfTUFYIGJ5dGVzIG9mIHdyaXRlCisgKiByZXF1ZXN0cyBjb21pbmcgZnJvbSB0aGUgbGluZSBkaXNjaXBsaW5lLiBUaGlzIGlzIGRvbmUgYnkgY2hhaW5pbmcgdGhlbQorICogaW4gbGlzdHMgb2Ygc3RydWN0IGlwYXFfcGFja2V0LCBlYWNoIHBhY2tldCBob2xkaW5nIGEgbWF4aW11bSBvZgorICogUEFDS0VUX1NJWkUgYnl0ZXMuCisgKgorICogaXBhcV93cml0ZSgpIGNhbiBiZSBjYWxsZWQgZnJvbSBib3R0b20gaGFsZiBjb250ZXh0OyBoZW5jZSB3ZSBjYW4ndAorICogYWxsb2NhdGUgbWVtb3J5IGZvciBwYWNrZXRzIHRoZXJlLiBTbyB3ZSBpbml0aWFsaXplIGEgcG9vbCBvZiBwYWNrZXRzIGF0CisgKiB0aGUgZmlyc3Qgb3BlbiBhbmQgbWFpbnRhaW4gYSBmcmVlbGlzdC4KKyAqCisgKiBUaGUgdmFsdWUgb2YgUEFDS0VUX1NJWkUgd2FzIGVtcGlyaWNhbGx5IGRldGVybWluZWQgYnkKKyAqIGNoZWNraW5nIHRoZSBtYXhpbXVtIHdyaXRlIHNpemVzIHNlbnQgZG93biBieSB0aGUgcHBwIGxkaXNjLgorICogVVJCREFUQV9RVUVVRV9NQVggaXMgc2V0IHRvIDY0Sywgd2hpY2ggaXMgdGhlIG1heGltdW0gVENQIHdpbmRvdyBzaXplLgorICovCisKK3N0cnVjdCBpcGFxX3BhY2tldCB7CisJY2hhcgkJCSpkYXRhOworCXNpemVfdAkJCWxlbjsKKwlzaXplX3QJCQl3cml0dGVuOworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKK307CisKK3N0cnVjdCBpcGFxX3ByaXZhdGUgeworCWludAkJCWFjdGl2ZTsKKwlpbnQJCQlxdWV1ZV9sZW47CisJaW50CQkJZnJlZV9sZW47CisJc3RydWN0IGxpc3RfaGVhZAlxdWV1ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWZyZWVsaXN0OworfTsKKworI2RlZmluZSBVUkJEQVRBX1NJWkUJCTQwOTYKKyNkZWZpbmUgVVJCREFUQV9RVUVVRV9NQVgJKDY0ICogMTAyNCkKKyNkZWZpbmUgUEFDS0VUX1NJWkUJCTI1NgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcHcuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcHcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTEwNWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwdy5jCkBAIC0wLDAgKzEsNDkxIEBACisvKgorICogSVBXaXJlbGVzcyAzRyBVTVRTIFRERCBNb2RlbSBkcml2ZXIgKFVTQiBjb25uZWN0ZWQpCisgKgorICogICBDb3B5cmlnaHQgKEMpIDIwMDQgUm9lbGYgRGllZGVyaWNrcyA8cm9lbGZkQGluZXQuY28uemE+CisgKiAgIENvcHlyaWdodCAoQykgMjAwNCBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBBbGwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRldmljZSB3YXMgYWNxdWlyZWQgdXNpbmcgU25vb3B5UHJvCisgKiBvbiBNU0ZUJ3MgTy9TLCBhbmQgZXhhbWluZyB0aGUgTVNGVCBkcml2ZXJzJyBkZWJ1ZyBvdXRwdXQgCisgKiAoaW5zYW5lbHkgbGVmdCBfb25fIGluIHRoZSBlbmR1c2VyIHZlcnNpb24pCisgKgorICogSXQgd2FzIHdyaXR0ZW4gb3V0IG9mIGZydXN0cmF0aW9uIHdpdGggdGhlIElQV2lyZWxlc3MgVVNCIG1vZGVtCisgKiBzdXBwbGllZCBieSBBeGl0eTNHL1NlbnRlY2ggU291dGggQWZyaWNhIG5vdCBzdXBwb3J0aW5nCisgKiBMaW51eCB3aGF0c29ldmVyLgorICoKKyAqIE5vYm9keSBwcm92aWRlZCBhbnkgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24gdGhhdCB3YXMgbm90IGFscmVhZHkgCisgKiBhdmFpbGFibGUgZm9yIHRoaXMgZGV2aWNlLgorICogCisgKiBUaGUgbW9kZW0gYWRoZXJlcyB0byB0aGUgIjNHUFAgVFMgIDI3LjAwNyBBVCBjb21tYW5kIHNldCBmb3IgM0cgCisgKiBVc2VyIEVxdWlwbWVudCAoVUUpIiBzdGFuZGFyZCwgYXZhaWxhYmxlIGZyb20gCisgKiBodHRwOi8vd3d3LjNncHAub3JnL2Z0cC9TcGVjcy9odG1sLWluZm8vMjcwMDcuaHRtCisgKgorICogVGhlIGNvZGUgd2FzIG9ubHkgdGVzdGVkIHRoZSBJUFdpcmVsZXNzIGhhbmRoZWxkIG1vZGVtIGRpc3RyaWJ1dGVkCisgKiBpbiBTb3V0aCBBZnJpY2EgYnkgU2VudGVjaC4KKyAqIAorICogSXQgbWF5IHdvcmsgZm9yIFdvb3NoIEluYyBpbiAubnogdG9vLCBhcyBpdCBhcHBlYXJzIHRoZXkgdXNlIHRoZQorICogc2FtZSBraXQuCisgKgorICogVGhlcmUgaXMgc3RpbGwgc29tZSB3b3JrIHRvIGJlIGRvbmUgaW4gdGVybXMgb2YgaGFuZGxpbmcgCisgKiBEQ0QsIERUUiwgUlRTLCBDVFMgd2hpY2ggYXJlIGN1cnJlbnRseSBmYWtlZC4KKyAqIEl0J3MgZ29vZCBlbm91Z2ggZm9yIFBQUCBhdCB0aGlzIHBvaW50LiBJdCdzIGJhc2VkIG9mZiBhbGwga2luZHMgb2YKKyAqIGNvZGUgZm91bmQgaW4gdXNiL3NlcmlhbCBhbmQgdXNiL2NsYXNzCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCSJ2MC4zIgorI2RlZmluZSBEUklWRVJfQVVUSE9SCSJSb2VsZiBEaWVkZXJpY2tzIgorI2RlZmluZSBEUklWRVJfREVTQwkiSVBXaXJlbGVzcyB0dHkgZHJpdmVyIgorCisjZGVmaW5lIElQV19UVFlfTUFKT1IJMjQwCS8qIHJlYWwgZGV2aWNlIG5vZGUgbWFqb3IgaWQsIGV4cGVyaW1lbnRhbCByYW5nZSAqLworI2RlZmluZSBJUFdfVFRZX01JTk9SUwkyNTYJLyogd2Ugc3VwcG9ydCAyNTYgZGV2aWNlcywgZHVubm8gd2h5LCBpdCdkIGJlIGluc2FuZSA6KSAqLworCisjZGVmaW5lIFVTQl9JUFdfTUFHSUMJMHg2ZDAyCS8qIG1hZ2ljIG51bWJlciBmb3IgaXB3IHN0cnVjdCAqLworCisKKy8qIE1lc3NhZ2Ugc2l6ZXMgKi8KKyNkZWZpbmUgRVZFTlRfQlVGRkVSX1NJWkUJMHhGRgorI2RlZmluZSBDSEFSMklOVDE2KGMxLGMwKQkoKCh1MzIpKChjMSkgJiAweGZmKSA8PCA4KSArICh1MzIpKChjMCkgJiAweGZmKSkKKyNkZWZpbmUgTlVNX0JVTEtfVVJCUwkJMjQKKyNkZWZpbmUgTlVNX0NPTlRST0xfVVJCUwkxNgorCisvKiB2ZW5kb3IvcHJvZHVjdCBwYWlycyB0aGF0IGFyZSBrbm93biB3b3JrIHdpdGggdGhpcyBkcml2ZXIqLworI2RlZmluZSBJUFdfVklECQkweDBiYzMKKyNkZWZpbmUgSVBXX1BJRAkJMHgwMDAxCisKKworLyogVmVuZG9yIGNvbW1hbmRzOiAqLworCisvKiBiYXVkIHJhdGVzICovCitlbnVtIHsKKwlpcHdfc2lvX2IyNTYwMDAgPSAweDAwMGUsCisJaXB3X3Npb19iMTI4MDAwID0gMHgwMDFkLAorCWlwd19zaW9fYjExNTIwMCA9IDB4MDAyMCwKKwlpcHdfc2lvX2I1NzYwMCAgPSAweDAwNDAsCisJaXB3X3Npb19iNTYwMDAgID0gMHgwMDQyLAorCWlwd19zaW9fYjM4NDAwICA9IDB4MDA2MCwKKwlpcHdfc2lvX2IxOTIwMCAgPSAweDAwYzAsCisJaXB3X3Npb19iMTQ0MDAgID0gMHgwMTAwLAorCWlwd19zaW9fYjk2MDAgICA9IDB4MDE4MCwKKwlpcHdfc2lvX2I0ODAwICAgPSAweDAzMDAsCisJaXB3X3Npb19iMjQwMCAgID0gMHgwNjAwLAorCWlwd19zaW9fYjEyMDAgICA9IDB4MGMwMCwKKwlpcHdfc2lvX2I2MDAgICAgPSAweDE4MDAKK307CisKKy8qIGRhdGEgYml0cyAqLworI2RlZmluZSBpcHdfZHRiXzcJCTB4NzAwCisjZGVmaW5lIGlwd19kdGJfOAkJMHg4MTAJLy8gb2sgc28gdGhlIGRlZmluZSBpcyBtaXNsZWFkaW5nLCBJIGtub3csIGJ1dCBmb3JjZXMgOCxuLDEKKwkJCQkJLy8gSSBtZWFuLCBpcyB0aGVyZSBhIHBvaW50IHRvIGFueSBvdGhlciBzZXR0aW5nIHRoZXNlIGRheXM/IDopCQorCisvKiB1c2IgY29udHJvbCByZXF1ZXN0IHR5cGVzIDogKi8KKyNkZWZpbmUgSVBXX1NJT19SWENUTAkJMHgwMAkvLyBjb250cm9sIGJ1bGsgcnggY2hhbm5lbCB0cmFuc21pc3Npb25zLCB2YWx1ZT0xLzAgKG9uL29mZikKKyNkZWZpbmUgSVBXX1NJT19TRVRfQkFVRAkweDAxCS8vIHNldCBiYXVkLCB2YWx1ZT1yZXF1ZXN0ZWQgaXB3X3Npb19ieHh4eAorI2RlZmluZSBJUFdfU0lPX1NFVF9MSU5FCTB4MDMJLy8gc2V0IGRhdGFiaXRzLCBwYXJpdHkuIHZhbHVlPWlwd19kdGJfeAorI2RlZmluZSBJUFdfU0lPX1NFVF9QSU4JCTB4MDMJLy8gc2V0L2NsZWFyIGR0ci9ydHMgdmFsdWU9aXB3X3Bpbl94eHgKKyNkZWZpbmUgSVBXX1NJT19QT0xMCQkweDA4CS8vIGdldCBzZXJpYWwgcG9ydCBzdGF0dXMgYnl0ZSwgY2FsbCB3aXRoIHZhbHVlPTAKKyNkZWZpbmUgSVBXX1NJT19JTklUCQkweDExCS8vIGluaXRpYWxpemVzID8gdmFsdWU9MCAoYXBwZWFycyBhcyBmaXJzdCB0aGluZyB0b2RvIG9uIG9wZW4pCisjZGVmaW5lIElQV19TSU9fUFVSR0UJCTB4MTIJLy8gcHVyZ2UgYWxsIHRyYW5zbWlzc2lvbnM/LCBjYWxsIHdpdGggdmFsdWU9bnVtY2hhcl90b19wdXJnZQorI2RlZmluZSBJUFdfU0lPX0hBTkRGTE9XCTB4MTMJLy8gc2V0IHhvbi94b2ZmIGxpbWl0cyB2YWx1ZT0wLCBhbmQgYSBidWZmZXIgb2YgMHgxMCBieXRlcworI2RlZmluZSBJUFdfU0lPX1NFVENIQVJTCTB4MTMJLy8gc2V0IHRoZSBmbG93Y29udHJvbCBzcGVjaWFsIGNoYXJzLCB2YWx1ZT0wLCBidWY9NiBieXRlcywgCisJCQkJCS8vIGxhc3QgMiBieXRlcyBjb250YWluIGZsb3djb250cm9sIGNoYXJzIGUuZy4gMDAgMDAgMDAgMDAgMTEgMTMKKworLyogdmFsdWVzIHVzZWQgZm9yIHJlcXVlc3QgSVBXX1NJT19TRVRfUElOICovCisjZGVmaW5lIElQV19QSU5fU0VURFRSCQkweDEwMQorI2RlZmluZSBJUFdfUElOX1NFVFJUUwkJMHgyMDIKKyNkZWZpbmUgSVBXX1BJTl9DTFJEVFIJCTB4MTAwCisjZGVmaW5lIElQV19QSU5fQ0xSUlRTCQkweDIwMCAvLyB1bmNvbmZpcm1lZAorCisvKiB2YWx1ZXMgdXNlZCBmb3IgcmVxdWVzdCBJUFdfU0lPX1JYQ1RMICovCisjZGVmaW5lIElQV19SWEJVTEtfT04JCTEKKyNkZWZpbmUgSVBXX1JYQlVMS19PRkYJCTAKKworLyogdmFyaW91cyAxNiBieXRlIGhhcmRjb2RlZCB0cmFuc2ZlcmJ1ZmZlcnMgdXNlZCBieSBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUgSVBXX0JZVEVTX0ZMT1dJTklUCXsgMHgwMSwgMCwgMCwgMCwgMHg0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisKKy8qIEludGVycHJldGF0aW9uIG9mIG1vZGVtIHN0YXR1cyBsaW5lcyAqLworLyogVGhlc2UgbmVlZCBzb3J0aW5nIG91dCBieSBpbmRpdmlkdWFsbHkgY29ubmVjdGluZyBwaW5zIGFuZCBjaGVja2luZworICogcmVzdWx0cy4gRklYTUUhCisgKiBXaGVuIGRhdGEgaXMgYmVpbmcgc2VudCB3ZSBzZWUgMHgzMCBpbiB0aGUgbG93ZXIgYnl0ZTsgdGhpcyBtdXN0CisgKiBjb250YWluIERTUiBhbmQgQ1RTIC4uLgorICovCisjZGVmaW5lIElQV19EU1IJCQkoKDE8PDQpIHwgKDE8PDUpKQorI2RlZmluZSBJUFdfQ1RTCQkJKCgxPDw1KSB8ICgxPDw0KSkKKworI2RlZmluZSBJUFdfV0FOVFNfVE9fU0VORAkweDMwCisvLyNkZWZpbmUgSVBXX0RUUgkJCS8qIERhdGEgVGVybWluYWwgUmVhZHkgKi8KKy8vI2RlZmluZSBJUFdfQ1RTCQkJLyogQ2xlYXIgVG8gU2VuZCAqLworLy8jZGVmaW5lIElQV19DRAkJCS8qIENhcnJpZXIgRGV0ZWN0ICovCisvLyNkZWZpbmUgSVBXX0RTUgkJCS8qIERhdGEgU2V0IFJlYWR5ICovCisvLyNkZWZpbmUgSVBXX1J4RAkJCS8qIFJlY2VpdmUgcGluICovCisKKy8vI2RlZmluZSBJUFdfTEUKKy8vI2RlZmluZSBJUFdfUlRTCQkKKy8vI2RlZmluZSBJUFdfU1QJCQorLy8jZGVmaW5lIElQV19TUgkJCisvLyNkZWZpbmUgSVBXX1JJCQkJLyogUmluZyBJbmRpY2F0b3IgKi8KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl9pcHdfaWRzW10gPSB7CisJeyBVU0JfREVWSUNFKElQV19WSUQsIElQV19QSUQpIH0sCisJeyB9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVzYl9pcHdfaWRzKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9pcHdfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJpcHd0dHkiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JdXNiX2lwd19pZHMsCit9OworCitzdGF0aWMgaW50IGRlYnVnOworCitzdGF0aWMgdm9pZCBpcHdfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlpbnQgaTsKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCWZvciAoaSA9IDA7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGggOyArK2kpIHsKKwkJCS8qIGlmIHdlIGluc2VydCBtb3JlIHRoYW4gVFRZX0ZMSVBCVUZfU0laRSBjaGFyYWN0ZXJzLCB3ZSBkcm9wIHRoZW0uICovCisJCQlpZih0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkgeworCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQl9CisJCQkvKiB0aGlzIGRvZXNuJ3QgYWN0dWFsbHkgcHVzaCB0aGUgZGF0YSB0aHJvdWdoIHVubGVzcyB0dHktPmxvd19sYXRlbmN5IGlzIHNldCAqLworCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCAwKTsKKwkJfQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCX0KKworCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCAgKi8KKwl1c2JfZmlsbF9idWxrX3VyYiAocG9ydC0+cmVhZF91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJICAgdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCQkgICBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkgICBpcHdfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCXJldHVybjsKK30KKworc3RhdGljIGludCBpcHdfb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJdTggYnVmX2Zsb3dfc3RhdGljWzE2XSA9IElQV19CWVRFU19GTE9XSU5JVDsKKwl1OCAqYnVmX2Zsb3dfaW5pdDsKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlidWZfZmxvd19pbml0ID0ga21hbGxvYygxNiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZfZmxvd19pbml0KQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoYnVmX2Zsb3dfaW5pdCwgYnVmX2Zsb3dfc3RhdGljLCAxNik7CisKKwlpZiAocG9ydC0+dHR5KQorCQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKKworCS8qIC0tMTogVGVsbCB0aGUgbW9kZW0gdG8gaW5pdGlhbGl6ZSAod2UgdGhpbmspIEZyb20gc25pZmZzIHRoaXMgaXMgYWx3YXlzIHRoZQorCSAqIGZpcnN0IHRoaW5nIHRoYXQgZ2V0cyBzZW50IHRvIHRoZSBtb2RlbSBkdXJpbmcgb3BlbmluZyBvZiB0aGUgZGV2aWNlICovCisJZGJnKCIlczogU2VuZGluZyBTSU9fSU5JVCAod2UgZ3Vlc3MpIixfX0ZVTkNUSU9OX18pOworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsMCksCisJCQkJIElQV19TSU9fSU5JVCwKKwkJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAorCQkJCSAwLAorCQkJCSAwLCAvKiBpbmRleCAqLworCQkJCSBOVUxMLAorCQkJCSAwLAorCQkJCSAxMDAwMDApOworCWlmIChyZXN1bHQgPCAwKQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJJbml0IG9mIG1vZGVtIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByZXN1bHQpOworCisJLyogcmVzZXQgdGhlIGJ1bGsgcGlwZXMgKi8KKwl1c2JfY2xlYXJfaGFsdChkZXYsIHVzYl9yY3ZidWxrcGlwZShkZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSk7CisJdXNiX2NsZWFyX2hhbHQoZGV2LCB1c2Jfc25kYnVsa3BpcGUoZGV2LCBwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpKTsKKworCS8qLS0yOiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLwkKKwlkYmcoIiVzOiBzZXR0aW5nIHVwIGJ1bGsgcmVhZCBjYWxsYmFjayIsX19GVU5DVElPTl9fKTsKKwl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgZGV2LAorCQkJICB1c2JfcmN2YnVsa3BpcGUoZGV2LCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkgIHBvcnQtPmJ1bGtfaW5fYnVmZmVyLAorCQkJICBwb3J0LT5idWxrX2luX3NpemUsCisJCQkgIGlwd19yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHJlYWQgYnVsaykgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCisJLyotLTM6IFRlbGwgdGhlIG1vZGVtIHRvIG9wZW4gdGhlIGZsb29kZ2F0ZXMgb24gdGhlIHJ4IGJ1bGsgY2hhbm5lbCAqLworCWRiZygiJXM6YXNraW5nIG1vZGVtIGZvciBSeFJlYWQgKFJYQlVMS19PTikiLF9fRlVOQ1RJT05fXyk7CisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkJIElQV19TSU9fUlhDVEwsCisJCQkJIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCwKKwkJCQkgSVBXX1JYQlVMS19PTiwKKwkJCQkgMCwgLyogaW5kZXggKi8KKwkJCQkgTlVMTCwKKwkJCQkgMCwKKwkJCQkgMTAwMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkgCisJCWRldl9lcnIoJnBvcnQtPmRldiwgIkVuYWJsaW5nIGJ1bGsgUnhSZWFkIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByZXN1bHQpOworCisJLyotLTQ6IHNldHVwIHRoZSBpbml0aWFsIGZsb3djb250cm9sICovCisJZGJnKCIlczpzZXR0aW5nIGluaXQgZmxvd2NvbnRyb2wgKCVzKSIsX19GVU5DVElPTl9fLGJ1Zl9mbG93X2luaXQpOworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJCSBJUFdfU0lPX0hBTkRGTE9XLAorCQkJCSBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9PVVQsCisJCQkJIDAsCisJCQkJIDAsCisJCQkJIGJ1Zl9mbG93X2luaXQsCisJCQkJIDB4MTAsCisJCQkJIDIwMDAwMCk7CisJaWYgKHJlc3VsdCA8IDApCisJCWRldl9lcnIoJnBvcnQtPmRldiwgImluaXRpYWwgZmxvd2NvbnRyb2wgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJlc3VsdCk7CisKKworCS8qLS01OiByYWlzZSB0aGUgZHRyICovCisJZGJnKCIlczpyYWlzaW5nIGR0ciIsX19GVU5DVElPTl9fKTsKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCQkgSVBXX1NJT19TRVRfUElOLAorCQkJCSBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9PVVQsCisJCQkJIElQV19QSU5fU0VURFRSLAorCQkJCSAwLAorCQkJCSBOVUxMLAorCQkJCSAwLAorCQkJCSAyMDAwMDApOworCWlmIChyZXN1bHQgPCAwKQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJzZXR0aW5nIGR0ciBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmVzdWx0KTsKKworCS8qLS02OiByYWlzZSB0aGUgcnRzICovCisJZGJnKCIlczpyYWlzaW5nIHJ0cyIsX19GVU5DVElPTl9fKTsKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCQkgSVBXX1NJT19TRVRfUElOLAorCQkJCSBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9PVVQsCisJCQkJIElQV19QSU5fU0VUUlRTLAorCQkJCSAwLAorCQkJCSBOVUxMLAorCQkJCSAwLAorCQkJCSAyMDAwMDApOworCWlmIChyZXN1bHQgPCAwKQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJzZXR0aW5nIGR0ciBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmVzdWx0KTsKKwkKKwlrZnJlZShidWZfZmxvd19pbml0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaXB3X2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJaW50IHJlc3VsdDsKKworCWlmICh0dHlfaHVuZ191cF9wKGZpbHApKSB7CisJCWRiZygiJXM6IHR0eV9odW5nX3VwX3AgLi4uIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCS8qLS0xOiBkcm9wIHRoZSBkdHIgKi8KKwlkYmcoIiVzOmRyb3BwaW5nIGR0ciIsX19GVU5DVElPTl9fKTsKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCQkgSVBXX1NJT19TRVRfUElOLAorCQkJCSBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9PVVQsCisJCQkJIElQV19QSU5fQ0xSRFRSLAorCQkJCSAwLAorCQkJCSBOVUxMLAorCQkJCSAwLAorCQkJCSAyMDAwMDApOworCWlmIChyZXN1bHQgPCAwKQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJkcm9wcGluZyBkdHIgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJlc3VsdCk7CisKKwkvKi0tMjogZHJvcCB0aGUgcnRzICovCisJZGJnKCIlczpkcm9wcGluZyBydHMiLF9fRlVOQ1RJT05fXyk7CisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkJIElQV19TSU9fU0VUX1BJTiwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAorCQkJCSBJUFdfUElOX0NMUlJUUywKKwkJCQkgMCwKKwkJCQkgTlVMTCwKKwkJCQkgMCwKKwkJCQkgMjAwMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiZHJvcHBpbmcgcnRzIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByZXN1bHQpOworCisKKwkvKi0tMzogcHVyZ2UgKi8KKwlkYmcoIiVzOnNlbmRpbmcgcHVyZ2UiLF9fRlVOQ1RJT05fXyk7CisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCisJCQkJIElQV19TSU9fUFVSR0UsIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCwKKwkJCQkgMHgwMywKKwkJCQkgMCwKKwkJCQkgTlVMTCwKKwkJCQkgMCwKKwkJCQkgMjAwMDAwKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAicHVyZ2UgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJlc3VsdCk7CisKKworCS8qIHNlbmQgUlhCVUxLX29mZiAodGVsbCBtb2RlbSB0byBzdG9wIHRyYW5zbWl0dGluZyBidWxrIGRhdGEgb24gcnggY2hhbikgKi8KKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCQkgSVBXX1NJT19SWENUTCwKKwkJCQkgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9ESVJfT1VULAorCQkJCSBJUFdfUlhCVUxLX09GRiwKKwkJCQkgMCwgLyogaW5kZXggKi8KKwkJCQkgTlVMTCwKKwkJCQkgMCwKKwkJCQkgMTAwMDAwKTsKKworCWlmIChyZXN1bHQgPCAwKQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJEaXNhYmxpbmcgYnVsayBSeFJlYWQgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJlc3VsdCk7CisKKwkvKiBzaHV0ZG93biBhbnkgaW4tZmxpZ2h0IHVyYnMgdGhhdCB3ZSBrbm93IGFib3V0ICovCisJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+d3JpdGVfdXJiKTsKK30KKworc3RhdGljIHZvaWQgaXB3X3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdXJiLT5jb250ZXh0OworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAodXJiLT5zdGF0dXMpCisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCisJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7Cit9CisKK3N0YXRpYyBpbnQgaXB3X3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlpbnQgcmV0OworCisJZGJnKCIlczogVE9QOiBjb3VudD0lZCwgaW5faW50ZXJydXB0PSVsZCIsIF9fRlVOQ1RJT05fXywKKwkJY291bnQsIGluX2ludGVycnVwdCgpICk7CisKKwlpZiAoY291bnQgPT0gMCkgeworCQlkYmcoIiVzIC0gd3JpdGUgcmVxdWVzdCBvZiAwIGJ5dGVzIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIDA7CisJfQorCQorCS8qIFJhY3kgYW5kIGJyb2tlbiwgRklYTUUgcHJvcGVybHkhICovCisJaWYgKHBvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykKKwkJcmV0dXJuIDA7CisKKwljb3VudCA9IG1pbihjb3VudCwgcG9ydC0+YnVsa19vdXRfc2l6ZSk7CisJbWVtY3B5KHBvcnQtPmJ1bGtfb3V0X2J1ZmZlciwgYnVmLCBjb3VudCk7CisKKwlkYmcoIiVzIGNvdW50IG5vdzolZCIsIF9fRlVOQ1RJT05fXywgY291bnQpOworCQorCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPndyaXRlX3VyYiwgZGV2LAorCQkJICB1c2Jfc25kYnVsa3BpcGUoZGV2LCBwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAorCQkJICBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCSAgY291bnQsCisJCQkgIGlwd193cml0ZV9idWxrX2NhbGxiYWNrLAorCQkJICBwb3J0KTsKKworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYih3cml0ZSBidWxrKSBmYWlsZWQgd2l0aCBlcnJvciA9ICVkIiwgX19GVU5DVElPTl9fLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRiZygiJXMgcmV0dXJuaW5nICVkIiwgX19GVU5DVElPTl9fLCBjb3VudCk7CisJcmV0dXJuIGNvdW50OworfSAKKworc3RhdGljIGludCBpcHdfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcHdfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGlwd19kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiSVBXaXJlbGVzcyBjb252ZXJ0ZXIiLAorCS5zaG9ydF9uYW1lID0JCSJpcHciLAorCS5pZF90YWJsZSA9CQl1c2JfaXB3X2lkcywKKwkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX2luID0JCTEsCisJLm51bV9idWxrX291dCA9CQkxLAorCS5udW1fcG9ydHMgPQkJMSwKKwkub3BlbiA9CQkJaXB3X29wZW4sCisJLmNsb3NlID0JCWlwd19jbG9zZSwKKwkucG9ydF9wcm9iZSA9IAkJaXB3X3Byb2JlLAorCS5wb3J0X3JlbW92ZSA9CQlpcHdfZGlzY29ubmVjdCwKKwkud3JpdGUgPQkJaXB3X3dyaXRlLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0JaXB3X3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJLnJlYWRfYnVsa19jYWxsYmFjayA9CWlwd19yZWFkX2J1bGtfY2FsbGJhY2ssCit9OworCisKKworc3RhdGljIGludCB1c2JfaXB3X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmaXB3X2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnVzYl9pcHdfZHJpdmVyKTsKKwlpZiAocmV0dmFsKSB7CisJCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmaXB3X2RldmljZSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXNiX2lwd19leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnVzYl9pcHdfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmlwd19kZXZpY2UpOworfQorCittb2R1bGVfaW5pdCh1c2JfaXB3X2luaXQpOworbW9kdWxlX2V4aXQodXNiX2lwd19leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlmMjM0ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYwpAQCAtMCwwICsxLDYxOSBAQAorLyoKKyAqIFVTQiBJUiBEb25nbGUgZHJpdmVyCisgKgorICoJQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIJR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCUNvcHlyaWdodCAoQykgMjAwMglHYXJ5IEJydWJha2VyICh4YXZ5ZXJAaXgubmV0Y29tLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgZHJpdmVyIGFsbG93cyBhIFVTQiBJckRBIGRldmljZSB0byBiZSB1c2VkIGFzIGEgImR1bWIiIHNlcmlhbCBkZXZpY2UuCisgKiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IGRvIG5vdCBoYXZlIGFjY2VzcyB0byBhIGZ1bGwgSXJEQSBzdGFjayBvbiB0aGUKKyAqIG90aGVyIHNpZGUgb2YgdGhlIGNvbm5lY3Rpb24uICBJZiB5b3UgZG8gaGF2ZSBhbiBJckRBIHN0YWNrIG9uIGJvdGggZGV2aWNlcywKKyAqIHBsZWFzZSB1c2UgdGhlIHVzYi1pcmRhIGRyaXZlciwgYXMgaXQgY29udGFpbnMgdGhlIHByb3BlciBlcnJvciBjaGVja2luZyBhbmQKKyAqIG90aGVyIGdvb2RuZXNzIG9mIGEgZnVsbCBJckRBIHN0YWNrLgorICoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZHJpdmVyIHdlcmUgdGFrZW4gZnJvbSBkcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMsIHdoaWNoCisgKiB3YXMgd3JpdHRlbiBieSBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+LCBEYWcgQnJhdHRsaQorICogPGRhZ0BicmF0dGxpLm5ldD4sIGFuZCBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+CisgKgorICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCisgKgorICogMjAwMl9NYXJfMDcJZ3JlZyBraAorICoJbW92ZWQgc29tZSBuZWVkZWQgc3RydWN0dXJlcyBhbmQgI2RlZmluZSB2YWx1ZXMgZnJvbSB0aGUKKyAqCW5ldC9pcmRhL2lyZGEtdXNiLmggZmlsZSBpbnRvIG91ciBmaWxlLCBhcyB3ZSBkb24ndCB3YW50IHRvIGRlcGVuZCBvbgorICoJdGhhdCBjb2RlYmFzZSBjb21waWxpbmcgY29ycmVjdGx5IDopCisgKgorICogMjAwMl9KYW5fMTQgIGdiCisgKglBZGRlZCBtb2R1bGUgcGFyYW1ldGVyIHRvIGZvcmNlIHNwZWNpZmljIG51bWJlciBvZiBYQk9Gcy4KKyAqCUFkZGVkIGlyX3hib2ZfY2hhbmdlKCkuCisgKglSZW9yZ2FuaXplZCByZWFkX2J1bGtfY2FsbGJhY2sgZXJyb3IgaGFuZGxpbmcuCisgKglTd2l0Y2hlZCBmcm9tIEZJTExfQlVMS19VUkIoKSB0byB1c2JfZmlsbF9idWxrX3VyYigpLgorICoKKyAqIDIwMDFfTm92XzA4ICBncmVnIGtoCisgKglDaGFuZ2VkIHRoZSBpcmRhX3VzYl9maW5kX2NsYXNzX2Rlc2MoKSBmdW5jdGlvbiBiYXNlZCBvbiBjb21tZW50cyBhbmQKKyAqCWNvZGUgZnJvbSBNYXJ0aW4gRGllaGwuCisgKgorICogMjAwMV9Ob3ZfMDEJZ3JlZyBraAorICoJQWRkZWQgc3VwcG9ydCBmb3IgbW9yZSBJckRBIFVTQiBkZXZpY2VzLgorICoJQWRkZWQgc3VwcG9ydCBmb3IgemVybyBwYWNrZXQuICBBZGRlZCBidWZmZXIgb3ZlcnJpZGUgcGFyYW1hdGVyLCBzbworICoJdXNlcnMgY2FuIHRyYW5zZmVyIGxhcmdlciBwYWNrZXRzIGF0IG9uY2UgaWYgdGhleSB3aXNoLiAgQm90aCBwYXRjaGVzCisgKgljYW1lIGZyb20gRGFnIEJyYXR0bGkgPGRhZ0BvYmV4Y29kZS5jb20+LgorICoKKyAqIDIwMDFfT2N0XzA3CWdyZWcga2gKKyAqCWluaXRpYWwgdmVyc2lvbiByZWxlYXNlZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjQiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+IgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIElSIERvbmdsZSBkcml2ZXIiCisKKy8qIFVTQiBJckRBIGNsYXNzIHNwZWMgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgVVNCX0NMQVNTX0lSREEJCTB4MDIKKyNkZWZpbmUgVVNCX0RUX0lSREEJCTB4MjEKKyNkZWZpbmUgSVVfUkVRX0dFVF9DTEFTU19ERVNDCTB4MDYKKyNkZWZpbmUgU1BFRURfMjQwMAkJMHgwMQorI2RlZmluZSBTUEVFRF85NjAwCQkweDAyCisjZGVmaW5lIFNQRUVEXzE5MjAwCQkweDAzCisjZGVmaW5lIFNQRUVEXzM4NDAwCQkweDA0CisjZGVmaW5lIFNQRUVEXzU3NjAwCQkweDA1CisjZGVmaW5lIFNQRUVEXzExNTIwMAkJMHgwNgorI2RlZmluZSBTUEVFRF81NzYwMDAJCTB4MDcKKyNkZWZpbmUgU1BFRURfMTE1MjAwMAkJMHgwOAorI2RlZmluZSBTUEVFRF80MDAwMDAwCQkweDA5CisKK3N0cnVjdCBpcmRhX2NsYXNzX2Rlc2MgeworCXU4CWJMZW5ndGg7CisJdTgJYkRlc2NyaXB0b3JUeXBlOworCXUxNgliY2RTcGVjUmV2aXNpb247CisJdTgJYm1EYXRhU2l6ZTsKKwl1OAlibVdpbmRvd1NpemU7CisJdTgJYm1NaW5UdXJuYXJvdW5kVGltZTsKKwl1MTYJd0JhdWRSYXRlOworCXU4CWJtQWRkaXRpb25hbEJPRnM7CisJdTgJYklyZGFSYXRlU25pZmY7CisJdTgJYk1heFVuaWNhc3RMaXN0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgZGVidWc7CisKKy8qIGlmIG92ZXJyaWRkZW4gYnkgdGhlIHVzZXIsIHRoZW4gdXNlIHRoZWlyIHZhbHVlIGZvciB0aGUgc2l6ZSBvZiB0aGUgcmVhZCBhbmQKKyAqIHdyaXRlIHVyYnMgKi8KK3N0YXRpYyBpbnQgYnVmZmVyX3NpemU7CisvKiBpZiBvdmVycmlkZGVuIGJ5IHRoZSB1c2VyLCB0aGVuIHVzZSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBYQk9GcyAqLworc3RhdGljIGludCB4Ym9mID0gLTE7CisKK3N0YXRpYyBpbnQgIGlyX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgaXJfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGVwKTsKK3N0YXRpYyB2b2lkIGlyX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZXApOworc3RhdGljIGludCAgaXJfd3JpdGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK3N0YXRpYyB2b2lkIGlyX3dyaXRlX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgaXJfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIGlyX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworCitzdGF0aWMgdTggaXJfYmF1ZCA9IDA7CitzdGF0aWMgdTggaXJfeGJvZiA9IDA7CitzdGF0aWMgdTggaXJfYWRkX2JvZiA9IDA7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoMHgwNTBmLCAweDAxODApIH0sCQkvKiBLQyBUZWNobm9sb2d5LCBLQy0xODAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOGU5LCAweDAxMDApIH0sCQkvKiBYVE5EQWNjZXNzICovCisJeyBVU0JfREVWSUNFKDB4MDljNCwgMHgwMDExKSB9LAkJLyogQUNUaVN5cyBBQ1QtSVIyMDAwVSAqLworCXsgVVNCX0lOVEVSRkFDRV9JTkZPIChVU0JfQ0xBU1NfQVBQX1NQRUMsIFVTQl9DTEFTU19JUkRBLCAwKSB9LAorCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaXJfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJpci11c2IiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBpcl9kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiSVIgRG9uZ2xlIiwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGUsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQkxLAorCS5udW1fYnVsa19pbiA9CQkxLAorCS5udW1fYnVsa19vdXQgPQkJMSwKKwkubnVtX3BvcnRzID0JCTEsCisJLnNldF90ZXJtaW9zID0JCWlyX3NldF90ZXJtaW9zLAorCS5hdHRhY2ggPQkJaXJfc3RhcnR1cCwKKwkub3BlbiA9CQkJaXJfb3BlbiwKKwkuY2xvc2UgPQkJaXJfY2xvc2UsCisJLndyaXRlID0JCWlyX3dyaXRlLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0JaXJfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkucmVhZF9idWxrX2NhbGxiYWNrID0JaXJfcmVhZF9idWxrX2NhbGxiYWNrLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIGlyZGFfdXNiX2R1bXBfY2xhc3NfZGVzYyhzdHJ1Y3QgaXJkYV9jbGFzc19kZXNjICpkZXNjKQoreworCWRiZygiYkxlbmd0aD0leCIsIGRlc2MtPmJMZW5ndGgpOworCWRiZygiYkRlc2NyaXB0b3JUeXBlPSV4IiwgZGVzYy0+YkRlc2NyaXB0b3JUeXBlKTsKKwlkYmcoImJjZFNwZWNSZXZpc2lvbj0leCIsIGRlc2MtPmJjZFNwZWNSZXZpc2lvbik7IAorCWRiZygiYm1EYXRhU2l6ZT0leCIsIGRlc2MtPmJtRGF0YVNpemUpOworCWRiZygiYm1XaW5kb3dTaXplPSV4IiwgZGVzYy0+Ym1XaW5kb3dTaXplKTsKKwlkYmcoImJtTWluVHVybmFyb3VuZFRpbWU9JWQiLCBkZXNjLT5ibU1pblR1cm5hcm91bmRUaW1lKTsKKwlkYmcoIndCYXVkUmF0ZT0leCIsIGRlc2MtPndCYXVkUmF0ZSk7CisJZGJnKCJibUFkZGl0aW9uYWxCT0ZzPSV4IiwgZGVzYy0+Ym1BZGRpdGlvbmFsQk9Gcyk7CisJZGJnKCJiSXJkYVJhdGVTbmlmZj0leCIsIGRlc2MtPmJJcmRhUmF0ZVNuaWZmKTsKKwlkYmcoImJNYXhVbmljYXN0TGlzdD0leCIsIGRlc2MtPmJNYXhVbmljYXN0TGlzdCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBGdW5jdGlvbiBpcmRhX3VzYl9maW5kX2NsYXNzX2Rlc2MoZGV2LCBpZm51bSkKKyAqCisgKiAgICBSZXR1cm5zIGluc3RhbmNlIG9mIElyREEgY2xhc3MgZGVzY3JpcHRvciwgb3IgTlVMTCBpZiBub3QgZm91bmQKKyAqCisgKiBUaGUgY2xhc3MgZGVzY3JpcHRvciBpcyBzb21lIGV4dHJhIGluZm8gdGhhdCBJckRBIFVTQiBkZXZpY2VzIHdpbGwKKyAqIG9mZmVyIHRvIHVzLCBkZXNjcmliaW5nIHRoZWlyIElyREEgY2hhcmFjdGVyaXN0aWNzLiBXZSB3aWxsIHVzZSB0aGF0IGluCisgKiBpcmRhX3VzYl9pbml0X3FvcygpCisgKgorICogQmFzZWQgb24gdGhlIHNhbWUgZnVuY3Rpb24gaW4gZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJkYV9jbGFzc19kZXNjICppcmRhX3VzYl9maW5kX2NsYXNzX2Rlc2Moc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlmbnVtKQoreworCXN0cnVjdCBpcmRhX2NsYXNzX2Rlc2MgKmRlc2M7CisJaW50IHJldDsKKwkJCisJZGVzYyA9IGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgaXJkYV9jbGFzc19kZXNjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRlc2MgPT0gTlVMTCkgCisJCXJldHVybiBOVUxMOworCW1lbXNldChkZXNjLCAwLCBzaXplb2Yoc3RydWN0IGlyZGFfY2xhc3NfZGVzYykpOworCQorCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsMCksCisJCQlJVV9SRVFfR0VUX0NMQVNTX0RFU0MsCisJCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJMCwgaWZudW0sIGRlc2MsIHNpemVvZigqZGVzYyksIDEwMDApOworCQorCWRiZygiJXMgLSAgcmV0PSVkIiwgX19GVU5DVElPTl9fLCByZXQpOworCWlmIChyZXQgPCBzaXplb2YoKmRlc2MpKSB7CisJCWRiZygiJXMgLSBjbGFzcyBkZXNjcmlwdG9yIHJlYWQgJXMgKCVkKSIsCisJCQkJX19GVU5DVElPTl9fLCAKKwkJCQkocmV0PDApID8gImZhaWxlZCIgOiAidG9vIHNob3J0IiwKKwkJCQlyZXQpOworCQlnb3RvIGVycm9yOworCX0KKwlpZiAoZGVzYy0+YkRlc2NyaXB0b3JUeXBlICE9IFVTQl9EVF9JUkRBKSB7CisJCWRiZygiJXMgLSBiYWQgY2xhc3MgZGVzY3JpcHRvciB0eXBlIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBlcnJvcjsKKwl9CisJCisJaXJkYV91c2JfZHVtcF9jbGFzc19kZXNjKGRlc2MpOworCXJldHVybiBkZXNjOworZXJyb3I6CisJa2ZyZWUoZGVzYyk7CisJcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGljIHU4IGlyX3hib2ZfY2hhbmdlKHU4IHhib2YpCit7CisJdTggcmVzdWx0OworCS8qIHJlZmVyZW5jZSBpcmRhLXVzYi5jICovCisJc3dpdGNoKHhib2YpIHsKKwkJY2FzZSA0ODogcmVzdWx0ID0gMHgxMDsgYnJlYWs7CisJCWNhc2UgMjg6CisJCWNhc2UgMjQ6IHJlc3VsdCA9IDB4MjA7IGJyZWFrOworCQlkZWZhdWx0OgorCQljYXNlIDEyOiByZXN1bHQgPSAweDMwOyBicmVhazsKKwkJY2FzZSAgNToKKwkJY2FzZSAgNjogcmVzdWx0ID0gMHg0MDsgYnJlYWs7CisJCWNhc2UgIDM6IHJlc3VsdCA9IDB4NTA7IGJyZWFrOworCQljYXNlICAyOiByZXN1bHQgPSAweDYwOyBicmVhazsKKwkJY2FzZSAgMTogcmVzdWx0ID0gMHg3MDsgYnJlYWs7CisJCWNhc2UgIDA6IHJlc3VsdCA9IDB4ODA7IGJyZWFrOworCX0KKwlyZXR1cm4ocmVzdWx0KTsKK30KKworCitzdGF0aWMgaW50IGlyX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IGlyZGFfY2xhc3NfZGVzYyAqaXJkYV9kZXNjOworCisJaXJkYV9kZXNjID0gaXJkYV91c2JfZmluZF9jbGFzc19kZXNjIChzZXJpYWwtPmRldiwgMCk7CisJaWYgKGlyZGFfZGVzYyA9PSBOVUxMKSB7CisJCWRldl9lcnIgKCZzZXJpYWwtPmRldi0+ZGV2LCAiSVJEQSBjbGFzcyBkZXNjcmlwdG9yIG5vdCBmb3VuZCwgZGV2aWNlIG5vdCBib3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRiZyAoIiVzIC0gQmF1ZCByYXRlcyBzdXBwb3J0ZWQ6JXMlcyVzJXMlcyVzJXMlcyVzIiwKKwkJX19GVU5DVElPTl9fLAorCQkoaXJkYV9kZXNjLT53QmF1ZFJhdGUgJiAweDAwMDEpID8gIiAyNDAwIiAgICA6ICIiLAorCQkoaXJkYV9kZXNjLT53QmF1ZFJhdGUgJiAweDAwMDIpID8gIiA5NjAwIiAgICA6ICIiLAorCQkoaXJkYV9kZXNjLT53QmF1ZFJhdGUgJiAweDAwMDQpID8gIiAxOTIwMCIgICA6ICIiLAorCQkoaXJkYV9kZXNjLT53QmF1ZFJhdGUgJiAweDAwMDgpID8gIiAzODQwMCIgICA6ICIiLAorCQkoaXJkYV9kZXNjLT53QmF1ZFJhdGUgJiAweDAwMTApID8gIiA1NzYwMCIgICA6ICIiLAorCQkoaXJkYV9kZXNjLT53QmF1ZFJhdGUgJiAweDAwMjApID8gIiAxMTUyMDAiICA6ICIiLAorCQkoaXJkYV9kZXNjLT53QmF1ZFJhdGUgJiAweDAwNDApID8gIiA1NzYwMDAiICA6ICIiLAorCQkoaXJkYV9kZXNjLT53QmF1ZFJhdGUgJiAweDAwODApID8gIiAxMTUyMDAwIiA6ICIiLAorCQkoaXJkYV9kZXNjLT53QmF1ZFJhdGUgJiAweDAxMDApID8gIiA0MDAwMDAwIiA6ICIiKTsKKworCXN3aXRjaCggaXJkYV9kZXNjLT5ibUFkZGl0aW9uYWxCT0ZzICkgeworCQljYXNlIDB4MDE6IGlyX2FkZF9ib2YgPSA0ODsgYnJlYWs7CisJCWNhc2UgMHgwMjogaXJfYWRkX2JvZiA9IDI0OyBicmVhazsKKwkJY2FzZSAweDA0OiBpcl9hZGRfYm9mID0gMTI7IGJyZWFrOworCQljYXNlIDB4MDg6IGlyX2FkZF9ib2YgPSAgNjsgYnJlYWs7CisJCWNhc2UgMHgxMDogaXJfYWRkX2JvZiA9ICAzOyBicmVhazsKKwkJY2FzZSAweDIwOiBpcl9hZGRfYm9mID0gIDI7IGJyZWFrOworCQljYXNlIDB4NDA6IGlyX2FkZF9ib2YgPSAgMTsgYnJlYWs7CisJCWNhc2UgMHg4MDogaXJfYWRkX2JvZiA9ICAwOyBicmVhazsKKwkJZGVmYXVsdDo7CisJfQorCisJa2ZyZWUgKGlyZGFfZGVzYyk7CisKKwlyZXR1cm4gMDsJCQorfQorCitzdGF0aWMgaW50IGlyX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWNoYXIgKmJ1ZmZlcjsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKGJ1ZmZlcl9zaXplKSB7CisJCS8qIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJ1ZmZlciBzaXplcyAqLworCQlidWZmZXIgPSBrbWFsbG9jIChidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmZmVyKSB7CisJCQlkZXZfZXJyICgmcG9ydC0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5LlxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWtmcmVlIChwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciA9IGJ1ZmZlcjsKKwkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBidWZmZXJfc2l6ZTsKKworCQlidWZmZXIgPSBrbWFsbG9jIChidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmZmVyKSB7CisJCQlkZXZfZXJyICgmcG9ydC0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5LlxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWtmcmVlIChwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyID0gYnVmZmVyOworCQlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBidWZmZXJfc2l6ZTsKKwkJcG9ydC0+YnVsa19vdXRfc2l6ZSA9IGJ1ZmZlcl9zaXplOworCX0KKworCS8qIFN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCisJdXNiX2ZpbGxfYnVsa191cmIgKAorCQlwb3J0LT5yZWFkX3VyYiwKKwkJcG9ydC0+c2VyaWFsLT5kZXYsIAorCQl1c2JfcmN2YnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCWlyX3JlYWRfYnVsa19jYWxsYmFjaywKKwkJcG9ydCk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXN1bHQpCisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBpcl9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQkJIAorCS8qIHNodXRkb3duIG91ciBidWxrIHJlYWQgKi8KKwl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworfQorCitzdGF0aWMgaW50IGlyX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXI7CisJaW50IHJlc3VsdDsKKwlpbnQgdHJhbnNmZXJfc2l6ZTsKKworCWRiZygiJXMgLSBwb3J0ID0gJWQsIGNvdW50ID0gJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY291bnQpOworCisJaWYgKCFwb3J0LT50dHkpIHsKKwkJZGV2X2VyciAoJnBvcnQtPmRldiwgIiVzIC0gbm8gdHR5Pz8/XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAocG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCWRiZyAoIiVzIC0gYWxyZWFkeSB3cml0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdHJhbnNmZXJfYnVmZmVyID0gcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdHJhbnNmZXJfc2l6ZSA9IG1pbihjb3VudCwgcG9ydC0+YnVsa19vdXRfc2l6ZSAtIDEpOworCisJLyoKKwkgKiBUaGUgZmlyc3QgYnl0ZSBvZiB0aGUgcGFja2V0IHdlIHNlbmQgdG8gdGhlIGRldmljZSBjb250YWlucyBhbgorCSAqIGluYmFuZCBoZWFkZXIgd2hpY2ggaW5kaWNhdGVzIGFuIGFkZGl0aW9uYWwgbnVtYmVyIG9mIEJPRnMgYW5kCisJICogYSBiYXVkIHJhdGUgY2hhbmdlLgorCSAqCisJICogU2VlIHNlY3Rpb24gNS40LjIuMiBvZiB0aGUgVVNCIElyREEgc3BlYy4KKwkgKi8KKwkqdHJhbnNmZXJfYnVmZmVyID0gaXJfeGJvZiB8IGlyX2JhdWQ7CisJKyt0cmFuc2Zlcl9idWZmZXI7CisKKwltZW1jcHkgKHRyYW5zZmVyX2J1ZmZlciwgYnVmLCB0cmFuc2Zlcl9zaXplKTsKKworCXVzYl9maWxsX2J1bGtfdXJiICgKKwkJcG9ydC0+d3JpdGVfdXJiLAorCQlwb3J0LT5zZXJpYWwtPmRldiwKKwkJdXNiX3NuZGJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCXRyYW5zZmVyX3NpemUgKyAxLAorCQlpcl93cml0ZV9idWxrX2NhbGxiYWNrLAorCQlwb3J0KTsKKworCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfWkVST19QQUNLRVQ7CisKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiAocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwllbHNlCisJCXJlc3VsdCA9IHRyYW5zZmVyX3NpemU7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBpcl93cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQorCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YSAoCisJCWRlYnVnLAorCQkmcG9ydC0+ZGV2LAorCQlfX0ZVTkNUSU9OX18sCisJCXVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCisJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7Cit9CisKK3N0YXRpYyB2b2lkIGlyX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCWRiZygiJXMgLSBwb3J0IGNsb3NlZC4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCisJCWNhc2UgMDogLyogU3VjY2Vzc2Z1bCAqLworCisJCQkvKgorCQkJICogVGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHBhY2tldCB3ZSBnZXQgZnJvbSB0aGUgZGV2aWNlCisJCQkgKiBjb250YWlucyBhIGJ1c3kgaW5kaWNhdG9yIGFuZCBiYXVkIHJhdGUgY2hhbmdlLgorCQkJICogU2VlIHNlY3Rpb24gNS40LjEuMiBvZiB0aGUgVVNCIElyREEgc3BlYy4KKwkJCSAqLworCQkJaWYgKCgqZGF0YSAmIDB4MGYpID4gMCkKKwkJCQlpcl9iYXVkID0gKmRhdGEgJiAweDBmOworCisJCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEgKAorCQkJCWRlYnVnLAorCQkJCSZwb3J0LT5kZXYsCisJCQkJX19GVU5DVElPTl9fLAorCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJCQlkYXRhKTsKKworCQkJLyoKKwkJCSAqIEJ5cGFzcyBmbGlwLWJ1ZmZlcnMsIGFuZCBmZWVkIHRoZSBsZGlzYyBkaXJlY3RseQorCQkJICogZHVlIHRvIG91ciBwb3RlbnRpYWxseSBsYXJnZSBidWZmZXIgc2l6ZS4gIFNpbmNlIHdlCisJCQkgKiB1c2VkIHRvIHNldCBsb3dfbGF0ZW5jeSwgdGhpcyBpcyBleGFjdGx5IHdoYXQgdGhlCisJCQkgKiB0dHkgbGF5ZXIgZGlkIGFueXdheSA6KQorCQkJICovCisJCQl0dHkgPSBwb3J0LT50dHk7CisKKwkJCS8qCisJCQkgKglGSVhNRTogbXVzdCBub3QgZG8gdGhpcyBpbiBJUlEgY29udGV4dCwKKwkJCSAqCW11c3QgaG9ub3VyIFRUWV9ET05UX0ZMSVAKKwkJCSAqLworCQkJdHR5LT5sZGlzYy5yZWNlaXZlX2J1ZigKKwkJCQl0dHksCisJCQkJZGF0YSsxLAorCQkJCU5VTEwsCisJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLTEpOworCisJCQkvKgorCQkJICogTm8gYnJlYWsgaGVyZS4KKwkJCSAqIFdlIHdhbnQgdG8gcmVzdWJtaXQgdGhlIHVyYiBzbyB3ZSBjYW4gcmVhZAorCQkJICogYWdhaW4uCisJCQkgKi8KKworCQljYXNlIC1FUFJPVE86IC8qIHRha2luZyBpbnNwaXJhdGlvbiBmcm9tIHBsMjMwMy5jICovCisKKwkJCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCAqLworCQkJdXNiX2ZpbGxfYnVsa191cmIgKAorCQkJCXBvcnQtPnJlYWRfdXJiLAorCQkJCXBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJCQl1c2JfcmN2YnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCWlyX3JlYWRfYnVsa19jYWxsYmFjaywKKwkJCQlwb3J0KTsKKworCQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCQkJaWYgKHJlc3VsdCkKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJCQlfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisKKwkJCWJyZWFrIDsKKworCQlkZWZhdWx0OgorCQkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkJCV9fRlVOQ1RJT05fXywgCisJCQkJdXJiLT5zdGF0dXMpOworCQkJYnJlYWsgOworCisJfQorCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBpcl9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQoreworCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlcjsKKwl1bnNpZ25lZCBpbnQgY2ZsYWc7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCghcG9ydC0+dHR5KSB8fCAoIXBvcnQtPnR0eS0+dGVybWlvcykpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSBzdHJ1Y3R1cmVzIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWNmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCS8qIGNoZWNrIHRoYXQgdGhleSByZWFsbHkgd2FudCB1cyB0byBjaGFuZ2Ugc29tZXRoaW5nICovCisJaWYgKG9sZF90ZXJtaW9zKSB7CisJCWlmICgoY2ZsYWcgPT0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWcpICYmCisJCSAgICAoUkVMRVZBTlRfSUZMQUcocG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnKSA9PSBSRUxFVkFOVF9JRkxBRyhvbGRfdGVybWlvcy0+Y19pZmxhZykpKSB7CisJCQlkYmcoIiVzIC0gbm90aGluZyB0byBjaGFuZ2UuLi4iLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogQWxsIHdlIGNhbiBjaGFuZ2UgaXMgdGhlIGJhdWQgcmF0ZSAqLworCWlmIChjZmxhZyAmIENCQVVEKSB7CisKKwkJZGJnICgiJXMgLSBhc2tpbmcgZm9yIGJhdWQgJWQiLAorCQkJX19GVU5DVElPTl9fLAorCQkJdHR5X2dldF9iYXVkX3JhdGUocG9ydC0+dHR5KSk7CisKKwkJLyogCisJCSAqIEZJWE1FLCB3ZSBzaG91bGQgY29tcGFyZSB0aGUgYmF1ZCByZXF1ZXN0IGFnYWluc3QgdGhlCisJCSAqIGNhcGFiaWxpdHkgc3RhdGVkIGluIHRoZSBJUiBoZWFkZXIgdGhhdCB3ZSBnb3QgaW4gdGhlCisJCSAqIHN0YXJ0dXAgZnVuY3Rpb24uCisJCSAqLworCQlzd2l0Y2ggKGNmbGFnICYgQ0JBVUQpIHsKKwkJCWNhc2UgQjI0MDA6ICAgIGlyX2JhdWQgPSBTUEVFRF8yNDAwOyAgICBicmVhazsKKwkJCWRlZmF1bHQ6CisJCQljYXNlIEI5NjAwOiAgICBpcl9iYXVkID0gU1BFRURfOTYwMDsgICAgYnJlYWs7CisJCQljYXNlIEIxOTIwMDogICBpcl9iYXVkID0gU1BFRURfMTkyMDA7ICAgYnJlYWs7CisJCQljYXNlIEIzODQwMDogICBpcl9iYXVkID0gU1BFRURfMzg0MDA7ICAgYnJlYWs7CisJCQljYXNlIEI1NzYwMDogICBpcl9iYXVkID0gU1BFRURfNTc2MDA7ICAgYnJlYWs7CisJCQljYXNlIEIxMTUyMDA6ICBpcl9iYXVkID0gU1BFRURfMTE1MjAwOyAgYnJlYWs7CisJCQljYXNlIEI1NzYwMDA6ICBpcl9iYXVkID0gU1BFRURfNTc2MDAwOyAgYnJlYWs7CisJCQljYXNlIEIxMTUyMDAwOiBpcl9iYXVkID0gU1BFRURfMTE1MjAwMDsgYnJlYWs7CisjaWZkZWYgQjQwMDAwMDAKKwkJCWNhc2UgQjQwMDAwMDA6IGlyX2JhdWQgPSBTUEVFRF80MDAwMDAwOyBicmVhazsKKyNlbmRpZgorCQl9CisKKwkJaWYgKHhib2YgPT0gLTEpIHsKKwkJCWlyX3hib2YgPSBpcl94Ym9mX2NoYW5nZShpcl9hZGRfYm9mKTsKKwkJfSBlbHNlIHsKKwkJCWlyX3hib2YgPSBpcl94Ym9mX2NoYW5nZSh4Ym9mKSA7CisJCX0KKworCQkvKiBOb3RpZnkgdGhlIHR0eSBkcml2ZXIgdGhhdCB0aGUgdGVybWlvcyBoYXZlIGNoYW5nZWQuICovCisJCXBvcnQtPnR0eS0+bGRpc2Muc2V0X3Rlcm1pb3MocG9ydC0+dHR5LCBOVUxMKTsKKworCQkvKiBGSVhNRSBuZWVkIHRvIGNoZWNrIHRvIHNlZSBpZiBvdXIgd3JpdGUgdXJiIGlzIGJ1c3kgcmlnaHQKKwkJICogbm93LCBvciB1c2UgYSB1cmIgcG9vbC4KKwkJICoKKwkJICogc2VuZCB0aGUgYmF1ZCBjaGFuZ2Ugb3V0IG9uIGFuICJlbXB0eSIgZGF0YSBwYWNrZXQKKwkJICovCisJCXRyYW5zZmVyX2J1ZmZlciA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyOworCQkqdHJhbnNmZXJfYnVmZmVyID0gaXJfeGJvZiB8IGlyX2JhdWQ7CisKKwkJdXNiX2ZpbGxfYnVsa191cmIgKAorCQkJcG9ydC0+d3JpdGVfdXJiLAorCQkJcG9ydC0+c2VyaWFsLT5kZXYsCisJCQl1c2Jfc25kYnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJMSwKKwkJCWlyX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJCQlwb3J0KTsKKworCQlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX1pFUk9fUEFDS0VUOworCisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiIChwb3J0LT53cml0ZV91cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmVzdWx0KQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJfQorCXJldHVybjsKK30KKworCitzdGF0aWMgaW50IF9faW5pdCBpcl9pbml0ICh2b2lkKQoreworCWludCByZXR2YWw7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmaXJfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmaXJfZHJpdmVyKTsKKwlpZiAocmV0dmFsKSAKKwkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlyZXR1cm4gMDsKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZpcl9kZXZpY2UpOworZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgaXJfZXhpdCAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlciAoJmlyX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmaXJfZGV2aWNlKTsKK30KKworCittb2R1bGVfaW5pdChpcl9pbml0KTsKK21vZHVsZV9leGl0KGlyX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKK21vZHVsZV9wYXJhbSh4Ym9mLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh4Ym9mLCAiRm9yY2Ugc3BlY2lmaWMgbnVtYmVyIG9mIFhCT0ZzIik7Cittb2R1bGVfcGFyYW0oYnVmZmVyX3NpemUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGJ1ZmZlcl9zaXplLCAiU2l6ZSBvZiB0aGUgdHJhbnNmZXIgYnVmZmVycyIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjA5MjYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYwpAQCAtMCwwICsxLDIzNTQgQEAKKy8qCisgIEtleXNwYW4gVVNCIHRvIFNlcmlhbCBDb252ZXJ0ZXIgZHJpdmVyCisgCisgIChDKSBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMQlIdWdoIEJsZW1pbmdzIDxodWdoQGJsZW1pbmdzLm9yZz4KKyAgKEMpIENvcHlyaWdodCAoQykgMjAwMglHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgorICAgCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgU2VlIGh0dHA6Ly9taXNjLm51L2h1Z2gva2V5c3Bhbi5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAKKyAgQ29kZSBpbiB0aGlzIGRyaXZlciBpbnNwaXJlZCBieSBhbmQgaW4gYSBudW1iZXIgb2YgcGxhY2VzIHRha2VuCisgIGZyb20gQnJpYW4gV2FybmVyJ3Mgb3JpZ2luYWwgS2V5c3Bhbi1QREEgZHJpdmVyLgorCisgIFRoaXMgZHJpdmVyIGhhcyBiZWVuIHB1dCB0b2dldGhlciB3aXRoIHRoZSBzdXBwb3J0IG9mIElubm9zeXMsIEluYy4KKyAgYW5kIEtleXNwYW4sIEluYyB0aGUgbWFudWZhY3R1cmVycyBvZiB0aGUgS2V5c3BhbiBVU0Itc2VyaWFsIHByb2R1Y3RzLgorICBUaGFua3MgR3V5cyA6KQorICAKKyAgVGhhbmtzIHRvIFBhdWx1cyBmb3IgbWlzY2VsbGFuZW91cyB0aWR5IHVwcywgc29tZSBsYXJnaXNoIGNodW5rcworICBvZiBtdWNoIG5pY2VyIGFuZC9vciBjb21wbGV0ZWx5IG5ldyBjb2RlIGFuZCAocGVyaGFwcyBtb3N0IHVuaXF1ZWx5KQorICBoYXZpbmcgdGhlIHBhdGllbmNlIHRvIHNpdCBkb3duIGFuZCBleHBsYWluIHdoeSBhbmQgd2hlcmUgaGUnZCBjaGFuZ2VkCisgIHN0dWZmLiAKKyAgCisgIFRpcCAnbyB0aGUgaGF0IHRvIElCTSAoYW5kIHByZXZpb3VzbHkgTGludXhjYXJlIDopIGZvciBzdXBwb3J0aW5nIAorICBzdGFmZiBpbiB0aGVpciB3b3JrIG9uIG9wZW4gc291cmNlIHByb2plY3RzLgorCisgIENoYW5nZSBIaXN0b3J5CisKKyAgICAyMDAzc2VwMDQJTFBNIChLZXlzcGFuKSBhZGQgc3VwcG9ydCBmb3IgbmV3IHNpbmdsZSBwb3J0IHByb2R1Y3QgVVNBMTlIUy4KKwkJCQlJbXByb3ZlIHNldHVwIG1lc3NhZ2UgaGFuZGxpbmcgZm9yIGFsbCBkZXZpY2VzLgorCisgICAgV2VkIEZlYiAxOSAyMjowMDowMCBQU1QgMjAwMyAoSmVmZnJleSBTLiBMYWluZyA8a2V5c3BhbkBqc2wuY29tPikKKyAgICAgIE1lcmdlZCB0aGUgY3VycmVudCAoMS8zMS8wMykgS2V5c3BhbiBjb2RlIHdpdGggdGhlIGN1cnJlbnQgKDIuNC4yMS1wcmU0KQorICAgICAgTGludXggc291cmNlIHRyZWUuICBUaGUgTGludXggdHJlZSBsYWNrZWQgc3VwcG9ydCBmb3IgdGhlIDQ5V0xDIGFuZAorICAgICAgb3RoZXJzLiAgVGhlIEtleXNwYW4gcGF0Y2hlcyBkaWRuJ3Qgd29yayB3aXRoIHRoZSBjdXJyZW50IGtlcm5lbC4KKworICAgIDIwMDNqYW4zMAlMUE0JYWRkIHN1cHBvcnQgZm9yIHRoZSA0OVdMQyBhbmQgTVBSCisKKyAgICBXZWQgQXByIDI1IDEyOjAwOjAwIFBTVCAyMDAyIChLZXlzcGFuKQorICAgICAgU3RhcnRlZCB3aXRoIEh1Z2ggQmxlbWluZ3MnIGNvZGUgZGF0ZWQgSmFuIDE3LCAyMDAyLiAgQWxsIGFkYXB0ZXJzCisgICAgICBub3cgc3VwcG9ydGVkIChpbmNsdWRpbmcgUUkgYW5kIFFXKS4gIE1vZGlmaWVkIHBvcnQgb3BlbiwgcG9ydAorICAgICAgY2xvc2UsIGFuZCBzZW5kIHNldHVwKCkgbG9naWMgdG8gZml4IHZhcmlvdXMgZGF0YSBhbmQgZW5kcG9pbnQKKyAgICAgIHN5bmNocm9uaXphdGlvbiBidWdzIGFuZCBkZXZpY2UgTEVEIHN0YXR1cyBidWdzLiAgQ2hhbmdlZCBrZXlzcGFuXworICAgICAgd3JpdGVfcm9vbSgpIHRvIGFjY3VyYXRlbHkgcmV0dXJuIHRyYW5zbWl0IGJ1ZmZlciBhdmFpbGFiaWxpdHkuCisgICAgICBDaGFuZ2VkIGZvcndhcmRpbmdMZW5ndGggZnJvbSAxIHRvIDE2IGZvciBhbGwgYWRhcHRlcnMuCisKKyAgICBGcmkgT2N0IDEyIDE2OjQ1OjAwIEVTVCAyMDAxCisgICAgICBQcmVsaW1pbmFyeSBVU0EtMTlRSSBhbmQgVVNBLTI4IHN1cHBvcnQgKGJvdGggdGVzdCBPSyBmb3IgbWUsIFlNTVYpCisKKyAgICBXZWQgQXByIDI1IDEyOjAwOjAwIFBTVCAyMDAyIChLZXlzcGFuKQorICAgICAgU3RhcnRlZCB3aXRoIEh1Z2ggQmxlbWluZ3MnIGNvZGUgZGF0ZWQgSmFuIDE3LCAyMDAyLiAgQWxsIGFkYXB0ZXJzCisgICAgICBub3cgc3VwcG9ydGVkIChpbmNsdWRpbmcgUUkgYW5kIFFXKS4gIE1vZGlmaWVkIHBvcnQgb3BlbiwgcG9ydAorICAgICAgY2xvc2UsIGFuZCBzZW5kIHNldHVwKCkgbG9naWMgdG8gZml4IHZhcmlvdXMgZGF0YSBhbmQgZW5kcG9pbnQKKyAgICAgIHN5bmNocm9uaXphdGlvbiBidWdzIGFuZCBkZXZpY2UgTEVEIHN0YXR1cyBidWdzLiAgQ2hhbmdlZCBrZXlzcGFuXworICAgICAgd3JpdGVfcm9vbSgpIHRvIGFjY3VyYXRlbHkgcmV0dXJuIHRyYW5zbWl0IGJ1ZmZlciBhdmFpbGFiaWxpdHkuCisgICAgICBDaGFuZ2VkIGZvcndhcmRpbmdMZW5ndGggZnJvbSAxIHRvIDE2IGZvciBhbGwgYWRhcHRlcnMuCisKKyAgICBGcmkgT2N0IDEyIDE2OjQ1OjAwIEVTVCAyMDAxCisgICAgICBQcmVsaW1pbmFyeSBVU0EtMTlRSSBhbmQgVVNBLTI4IHN1cHBvcnQgKGJvdGggdGVzdCBPSyBmb3IgbWUsIFlNTVYpCisKKyAgICBNb24gT2N0ICA4IDE0OjI5OjAwIEVTVCAyMDAxIGh1Z2gKKyAgICAgIEZpeGVkIGJ1ZyB0aGF0IHByZXZlbnRlZCBtdWxpdHBvcnQgZGV2aWNlcyBvcGVyYXRpbmcgY29ycmVjdGx5CisgICAgICBpZiB0aGV5IHdlcmVuJ3QgdGhlIGZpcnN0IHVuaXQgYXR0YWNoZWQuCisKKyAgICBTYXQgT2N0ICA2IDEyOjMxOjIxIEVTVCAyMDAxIGh1Z2gKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIFVTQS0yOFhBIGFuZCAtMjhYQiwgbWlzYyBjbGVhbnVwcywgYnJlYWsgc3VwcG9ydAorICAgICAgZm9yIHVzYTI2IGJhc2VkIG1vZGVscyB0aGFua3MgdG8gRGF2aWQgR2lic29uLgorCisgICAgVGh1IE1heSAzMSAxMTo1Njo0MiBQRFQgMjAwMSBna2gKKyAgICAgIHN3aXRjaGVkIGZyb20gdXNpbmcgc3BpbmxvY2sgdG8gYSBzZW1hcGhvcmUKKyAgIAorICAgICgwNC8wOC8yMDAxKSBnYgorCUlkZW50aWZ5IHZlcnNpb24gb24gbW9kdWxlIGxvYWQuCisgICAKKyAgICAoMTEvMDEvMjAwMCkgQWRhbSBKLiBSaWNodGVyCisJdXNiX2RldmljZV9pZCB0YWJsZSBzdXBwb3J0LgorICAgCisgICAgVHVlIE9jdCAxMCAyMzoxNTozMyBFU1QgMjAwMCBIdWdoCisgICAgICBNZXJnZWQgUGF1bCdzIGNoYW5nZXMgd2l0aCBteSBVU0EtNDlXIG1vZHMuICBXb3JrIGluIHByb2dyZXNzCisgICAgICBzdGlsbC4uLgorICAKKyAgICBXZWQgSnVsIDE5IDE0OjAwOjQyIEVTVCAyMDAwIGdraAorICAgICAgQWRkZWQgbW9kdWxlX2luaXQgYW5kIG1vZHVsZV9leGl0IGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlIGZhY3QgdGhhdAorICAgICAgdGhpcyBkcml2ZXIgaXMgYSBsb2FkYWJsZSBtb2R1bGUgbm93LgorIAorICAgIFR1ZSBKdWwgMTggMTY6MTQ6NTIgRVNUIDIwMDAgSHVnaAorICAgICAgQmFzaWMgY2hhcmFjdGVyIGlucHV0L291dHB1dCBmb3IgVVNBLTE5IG5vdyBtb3N0bHkgd29ya3MsCisgICAgICBmaXhlZCBhdCA5NjAwIGJhdWQgZm9yIHRoZSBtb21lbnQuCisKKyAgICBTYXQgSnVsICA4IDExOjExOjQ4IEVTVCAyMDAwIEh1Z2gKKyAgICAgIEZpcnN0IHB1YmxpYyByZWxlYXNlIC0gbm90aGluZyB3b3JrcyBleGNlcHQgdGhlIGZpcm13YXJlIHVwbG9hZC4KKyAgICAgIFRlc3RlZCBvbiBQUEMgYW5kIHg4NiBhcmNoaXRlY3R1cmVzLCBzZWVtcyB0byBiZWhhdmUuLi4KKyovCisKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKyNpbmNsdWRlICJrZXlzcGFuLmgiCisKK3N0YXRpYyBpbnQgZGVidWc7CisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjEuNCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiSHVnaCBCbGVtaW5ncyA8aHVnaEBtaXNjLm51IgorI2RlZmluZSBEUklWRVJfREVTQyAiS2V5c3BhbiBVU0IgdG8gU2VyaWFsIENvbnZlcnRlciBEcml2ZXIiCisKKyNkZWZpbmUgSU5TVEFUX0JVRkxFTgkzMgorI2RlZmluZSBHTE9DT05UX0JVRkxFTgk2NAorCisJLyogUGVyIGRldmljZSBhbmQgcGVyIHBvcnQgcHJpdmF0ZSBkYXRhICovCitzdHJ1Y3Qga2V5c3Bhbl9zZXJpYWxfcHJpdmF0ZSB7CisJY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMJKmRldmljZV9kZXRhaWxzOworCisJc3RydWN0IHVyYgkqaW5zdGF0X3VyYjsKKwljaGFyCQlpbnN0YXRfYnVmW0lOU1RBVF9CVUZMRU5dOworCisJLyogWFhYIHRoaXMgb25lIHByb2JhYmx5IHdpbGwgbmVlZCBhIGxvY2sgKi8KKwlzdHJ1Y3QgdXJiCSpnbG9jb250X3VyYjsKKwljaGFyCQlnbG9jb250X2J1ZltHTE9DT05UX0JVRkxFTl07Cit9OworCitzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUgeworCS8qIEtlZXAgdHJhY2sgb2Ygd2hpY2ggaW5wdXQgJiBvdXRwdXQgZW5kcG9pbnRzIHRvIHVzZSAqLworCWludAkJaW5fZmxpcDsKKwlpbnQJCW91dF9mbGlwOworCisJLyogS2VlcCBkdXBsaWNhdGUgb2YgZGV2aWNlIGRldGFpbHMgaW4gZWFjaCBwb3J0CisJICAgc3RydWN0dXJlIGFzIHdlbGwgLSBzaW1wbGlmaWVzIHNvbWUgb2YgdGhlCisJICAgY2FsbGJhY2sgZnVuY3Rpb25zIGV0Yy4gKi8KKwljb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscwkqZGV2aWNlX2RldGFpbHM7CisKKwkvKiBJbnB1dCBlbmRwb2ludHMgYW5kIGJ1ZmZlciBmb3IgdGhpcyBwb3J0ICovCisJc3RydWN0IHVyYgkqaW5fdXJic1syXTsKKwljaGFyCQlpbl9idWZmZXJbMl1bNjRdOworCS8qIE91dHB1dCBlbmRwb2ludHMgYW5kIGJ1ZmZlciBmb3IgdGhpcyBwb3J0ICovCisJc3RydWN0IHVyYgkqb3V0X3VyYnNbMl07CisJY2hhcgkJb3V0X2J1ZmZlclsyXVs2NF07CisKKwkvKiBJbnB1dCBhY2sgZW5kcG9pbnQgKi8KKwlzdHJ1Y3QgdXJiCSppbmFja191cmI7CisJY2hhcgkJaW5hY2tfYnVmZmVyWzFdOworCisJLyogT3V0cHV0IGNvbnRyb2wgZW5kcG9pbnQgKi8KKwlzdHJ1Y3QgdXJiCSpvdXRjb250X3VyYjsKKwljaGFyCQlvdXRjb250X2J1ZmZlcls2NF07CisKKwkvKiBTZXR0aW5ncyBmb3IgdGhlIHBvcnQgKi8KKwlpbnQJCWJhdWQ7CisJaW50CQlvbGRfYmF1ZDsKKwl1bnNpZ25lZCBpbnQJY2ZsYWc7CisJdW5zaWduZWQgaW50CW9sZF9jZmxhZzsKKwllbnVtCQl7Zmxvd19ub25lLCBmbG93X2N0cywgZmxvd194b259IGZsb3dfY29udHJvbDsKKwlpbnQJCXJ0c19zdGF0ZTsJLyogSGFuZHNoYWtpbmcgcGlucyAob3V0cHV0cykgKi8KKwlpbnQJCWR0cl9zdGF0ZTsKKwlpbnQJCWN0c19zdGF0ZTsJLyogSGFuZHNoYWtpbmcgcGlucyAoaW5wdXRzKSAqLworCWludAkJZHNyX3N0YXRlOworCWludAkJZGNkX3N0YXRlOworCWludAkJcmlfc3RhdGU7CisJaW50CQlicmVha19vbjsKKworCXVuc2lnbmVkIGxvbmcJdHhfc3RhcnRfdGltZVsyXTsKKwlpbnQJCXJlc2VuZF9jb250OwkvKiBuZWVkIHRvIHJlc2VuZCBjb250cm9sIHBhY2tldCAqLworfTsKKworCQorLyogSW5jbHVkZSBLZXlzcGFuIG1lc3NhZ2UgaGVhZGVycy4gIEFsbCBjdXJyZW50IEtleXNwYW4gQWRhcHRlcnMKKyAgIG1ha2UgdXNlIG9mIG9uZSBvZiBmb3VyIG1lc3NhZ2UgZm9ybWF0cyB3aGljaCBhcmUgcmVmZXJyZWQKKyAgIHRvIGFzIFVTQS0yNiwgVVNBLTI4IGFuZCBVU0EtNDksIFVTQS05MCBieSBLZXlzcGFuIGFuZCB3aXRoaW4gdGhpcyBkcml2ZXIuICovCisjaW5jbHVkZSAia2V5c3Bhbl91c2EyNm1zZy5oIgorI2luY2x1ZGUgImtleXNwYW5fdXNhMjhtc2cuaCIKKyNpbmNsdWRlICJrZXlzcGFuX3VzYTQ5bXNnLmgiCisjaW5jbHVkZSAia2V5c3Bhbl91c2E5MG1zZy5oIgorCQorCisvKiBGdW5jdGlvbnMgdXNlZCBieSBuZXcgdXNiLXNlcmlhbCBjb2RlLiAqLworc3RhdGljIGludCBfX2luaXQga2V5c3Bhbl9pbml0ICh2b2lkKQoreworCWludCByZXR2YWw7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3Rlcigma2V5c3Bhbl9wcmVfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF9wcmVfZGV2aWNlX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmtleXNwYW5fMXBvcnRfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF8xcG9ydF9kZXZpY2VfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3Rlcigma2V5c3Bhbl8ycG9ydF9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkXzJwb3J0X2RldmljZV9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZrZXlzcGFuXzRwb3J0X2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfNHBvcnRfZGV2aWNlX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigma2V5c3Bhbl9kcml2ZXIpOworCWlmIChyZXR2YWwpIAorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisKKwlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisKKwlyZXR1cm4gMDsKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZrZXlzcGFuXzRwb3J0X2RldmljZSk7CitmYWlsZWRfNHBvcnRfZGV2aWNlX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigma2V5c3Bhbl8ycG9ydF9kZXZpY2UpOworZmFpbGVkXzJwb3J0X2RldmljZV9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmtleXNwYW5fMXBvcnRfZGV2aWNlKTsKK2ZhaWxlZF8xcG9ydF9kZXZpY2VfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZrZXlzcGFuX3ByZV9kZXZpY2UpOworZmFpbGVkX3ByZV9kZXZpY2VfcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGtleXNwYW5fZXhpdCAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlciAoJmtleXNwYW5fZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZrZXlzcGFuX3ByZV9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmtleXNwYW5fMXBvcnRfZGV2aWNlKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZrZXlzcGFuXzJwb3J0X2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgma2V5c3Bhbl80cG9ydF9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChrZXlzcGFuX2luaXQpOworbW9kdWxlX2V4aXQoa2V5c3Bhbl9leGl0KTsKKworc3RhdGljIHZvaWQga2V5c3Bhbl9yeF90aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKK30KKworCitzdGF0aWMgdm9pZCBrZXlzcGFuX3J4X3VudGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7Cit9CisKKworc3RhdGljIHZvaWQga2V5c3Bhbl9icmVha19jdGwgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkKK3sKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUgCSpwX3ByaXY7CisKKyAJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlpZiAoYnJlYWtfc3RhdGUgPT0gLTEpCisJCXBfcHJpdi0+YnJlYWtfb24gPSAxOworCWVsc2UKKwkJcF9wcml2LT5icmVha19vbiA9IDA7CisKKwlrZXlzcGFuX3NlbmRfc2V0dXAocG9ydCwgMCk7Cit9CisKKworc3RhdGljIHZvaWQga2V5c3Bhbl9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgCisJCQkJICAgICBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJaW50CQkJCWJhdWRfcmF0ZSwgZGV2aWNlX3BvcnQ7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlIAkqcF9wcml2OworCWNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzCSpkX2RldGFpbHM7CisJdW5zaWduZWQgaW50IAkJCWNmbGFnOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7IAorCisJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWRfZGV0YWlscyA9IHBfcHJpdi0+ZGV2aWNlX2RldGFpbHM7CisJY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJZGV2aWNlX3BvcnQgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOworCisJLyogQmF1ZCByYXRlIGNhbGN1bGF0aW9uIHRha2VzIGJhdWQgcmF0ZSBhcyBhbiBpbnRlZ2VyCisJICAgc28gb3RoZXIgcmF0ZXMgY2FuIGJlIGdlbmVyYXRlZCBpZiBkZXNpcmVkLiAqLworCWJhdWRfcmF0ZSA9IHR0eV9nZXRfYmF1ZF9yYXRlKHBvcnQtPnR0eSk7CisJLyogSWYgbm8gbWF0Y2ggb3IgaW52YWxpZCwgZG9uJ3QgY2hhbmdlICovCQkKKwlpZiAoYmF1ZF9yYXRlID49IDAKKwkgICAgJiYgZF9kZXRhaWxzLT5jYWxjdWxhdGVfYmF1ZF9yYXRlKGJhdWRfcmF0ZSwgZF9kZXRhaWxzLT5iYXVkY2xrLAorCQkJCU5VTEwsIE5VTEwsIE5VTEwsIGRldmljZV9wb3J0KSA9PSBLRVlTUEFOX0JBVURfUkFURV9PSykgeworCQkvKiBGSVhNRSAtIG1vcmUgdG8gZG8gaGVyZSB0byBlbnN1cmUgcmF0ZSBjaGFuZ2VzIGNsZWFubHkgKi8KKwkJcF9wcml2LT5iYXVkID0gYmF1ZF9yYXRlOworCX0KKworCS8qIHNldCBDVFMvUlRTIGhhbmRzaGFrZSBldGMuICovCisJcF9wcml2LT5jZmxhZyA9IGNmbGFnOworCXBfcHJpdi0+Zmxvd19jb250cm9sID0gKGNmbGFnICYgQ1JUU0NUUyk/IGZsb3dfY3RzOiBmbG93X25vbmU7CisKKwlrZXlzcGFuX3NlbmRfc2V0dXAocG9ydCwgMCk7Cit9CisKK3N0YXRpYyBpbnQga2V5c3Bhbl90aW9jbWdldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwl1bnNpZ25lZCBpbnQJCQl2YWx1ZTsKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUgCSpwX3ByaXY7CisKKwlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJCisJdmFsdWUgPSAoKHBfcHJpdi0+cnRzX3N0YXRlKSA/IFRJT0NNX1JUUyA6IDApIHwKKwkJKChwX3ByaXYtPmR0cl9zdGF0ZSkgPyBUSU9DTV9EVFIgOiAwKSB8CisJCSgocF9wcml2LT5jdHNfc3RhdGUpID8gVElPQ01fQ1RTIDogMCkgfAorCQkoKHBfcHJpdi0+ZHNyX3N0YXRlKSA/IFRJT0NNX0RTUiA6IDApIHwKKwkJKChwX3ByaXYtPmRjZF9zdGF0ZSkgPyBUSU9DTV9DQVIgOiAwKSB8CisJCSgocF9wcml2LT5yaV9zdGF0ZSkgPyBUSU9DTV9STkcgOiAwKTsgCisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBpbnQga2V5c3Bhbl90aW9jbXNldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlIAkqcF9wcml2OworCisJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQorCWlmIChzZXQgJiBUSU9DTV9SVFMpCisJCXBfcHJpdi0+cnRzX3N0YXRlID0gMTsKKwlpZiAoc2V0ICYgVElPQ01fRFRSKQorCQlwX3ByaXYtPmR0cl9zdGF0ZSA9IDE7CisKKwlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpCisJCXBfcHJpdi0+cnRzX3N0YXRlID0gMDsKKwlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpCisJCXBfcHJpdi0+ZHRyX3N0YXRlID0gMDsKKwlrZXlzcGFuX3NlbmRfc2V0dXAocG9ydCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga2V5c3Bhbl9pb2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworCS8qIFdyaXRlIGZ1bmN0aW9uIGlzIHNpbWlsYXIgZm9yIHRoZSBmb3VyIHByb3RvY29scyB1c2VkCisJICAgd2l0aCBvbmx5IGEgbWlub3IgY2hhbmdlIGZvciB1c2E5MCAodXNhMTlocykgcmVxdWlyZWQgKi8KK3N0YXRpYyBpbnQga2V5c3Bhbl93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCAKKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUgCSpwX3ByaXY7CisJY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMJKmRfZGV0YWlsczsKKwlpbnQJCQkJZmxpcDsKKwlpbnQgCQkJCWxlZnQsIHRvZG87CisJc3RydWN0IHVyYgkJCSp0aGlzX3VyYjsKKyAJaW50IAkJCQllcnIsIG1heERhdGFMZW4sIGRhdGFPZmZzZXQ7CisKKwlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJZF9kZXRhaWxzID0gcF9wcml2LT5kZXZpY2VfZGV0YWlsczsKKworCWlmIChkX2RldGFpbHMtPm1zZ19mb3JtYXQgPT0gbXNnX3VzYTkwKSB7CisgICAJCW1heERhdGFMZW4gPSA2NDsKKwkJZGF0YU9mZnNldCA9IDA7CisJfSBlbHNlIHsKKwkJbWF4RGF0YUxlbiA9IDYzOworCQlkYXRhT2Zmc2V0ID0gMTsKKwl9CisJCisJZGJnKCIlcyAtIGZvciBwb3J0ICVkICglZCBjaGFycyksIGZsaXA9JWQiLAorCSAgICBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY291bnQsIHBfcHJpdi0+b3V0X2ZsaXApOworCisJZm9yIChsZWZ0ID0gY291bnQ7IGxlZnQgPiAwOyBsZWZ0IC09IHRvZG8pIHsKKwkJdG9kbyA9IGxlZnQ7CisJCWlmICh0b2RvID4gbWF4RGF0YUxlbikKKwkJCXRvZG8gPSBtYXhEYXRhTGVuOworCisJCWZsaXAgPSBwX3ByaXYtPm91dF9mbGlwOworCQorCQkvKiBDaGVjayB3ZSBoYXZlIGEgdmFsaWQgdXJiL2VuZHBvaW50IGJlZm9yZSB3ZSB1c2UgaXQuLi4gKi8KKwkJaWYgKCh0aGlzX3VyYiA9IHBfcHJpdi0+b3V0X3VyYnNbZmxpcF0pID09IE5VTEwpIHsKKwkJCS8qIG5vIGJ1bGsgb3V0LCBzbyByZXR1cm4gMCBieXRlcyB3cml0dGVuICovCisJCQlkYmcoIiVzIC0gbm8gb3V0cHV0IHVyYiA6KCIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gY291bnQ7CisJCX0KKworCQlkYmcoIiVzIC0gZW5kcG9pbnQgJWQgZmxpcCAlZCIsIF9fRlVOQ1RJT05fXywgdXNiX3BpcGVlbmRwb2ludCh0aGlzX3VyYi0+cGlwZSksIGZsaXApOworCisJCWlmICh0aGlzX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQkJaWYgKHRoaXNfdXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9BU1lOQ19VTkxJTkspCisJCQkJYnJlYWs7CisJCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgcF9wcml2LT50eF9zdGFydF90aW1lW2ZsaXBdICsgMTAgKiBIWikpCisJCQkJYnJlYWs7CisJCQl0aGlzX3VyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0FTWU5DX1VOTElOSzsKKwkJCXVzYl91bmxpbmtfdXJiKHRoaXNfdXJiKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogRmlyc3QgYnl0ZSBpbiBidWZmZXIgaXMgImxhc3QgZmxhZyIgKGV4Y2VwdCBmb3IgdXNhMTloeCkgLSB1bnVzZWQgc28KKwkJICAgZm9yIG5vdyBzbyBzZXQgdG8gemVybyAqLworCQkoKGNoYXIgKil0aGlzX3VyYi0+dHJhbnNmZXJfYnVmZmVyKVswXSA9IDA7CisKKwkJbWVtY3B5ICh0aGlzX3VyYi0+dHJhbnNmZXJfYnVmZmVyICsgZGF0YU9mZnNldCwgYnVmLCB0b2RvKTsKKwkJYnVmICs9IHRvZG87CisKKwkJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGJ1bGsgcG9ydCAqLworCQl0aGlzX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHRvZG8gKyBkYXRhT2Zmc2V0OworCisJCXRoaXNfdXJiLT50cmFuc2Zlcl9mbGFncyAmPSB+VVJCX0FTWU5DX1VOTElOSzsKKwkJdGhpc191cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCQlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHRoaXNfdXJiLCBHRlBfQVRPTUlDKSkgIT0gMCkgeworCQkJZGJnKCJ1c2Jfc3VibWl0X3VyYih3cml0ZSBidWxrKSBmYWlsZWQgKCVkKSIsIGVycik7CisJCX0KKwkJcF9wcml2LT50eF9zdGFydF90aW1lW2ZsaXBdID0gamlmZmllczsKKworCQkvKiBGbGlwIGZvciBuZXh0IHRpbWUgaWYgdXNhMjYgb3IgdXNhMjggaW50ZXJmYWNlCisJCSAgIChub3QgdXNlZCBvbiB1c2E0OSkgKi8KKwkJcF9wcml2LT5vdXRfZmxpcCA9IChmbGlwICsgMSkgJiBkX2RldGFpbHMtPm91dGRhdF9lbmRwX2ZsaXA7CisJfQorCisJcmV0dXJuIGNvdW50IC0gbGVmdDsKK30KKworc3RhdGljIHZvaWQJdXNhMjZfaW5kYXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQJCQlpLCBlcnI7CisJaW50CQkJZW5kcG9pbnQ7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkqcG9ydDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdAkqdHR5OworCXVuc2lnbmVkIGNoYXIgCQkqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOyAKKworCWVuZHBvaW50ID0gdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpOworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHN0YXR1czogJXggb24gZW5kcG9pbnQgJWQuIiwKKwkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMsIGVuZHBvaW50KTsKKwkJcmV0dXJuOworCX0KKworCXBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB1cmItPmNvbnRleHQ7CisJdHR5ID0gcG9ydC0+dHR5OworCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJLyogMHg4MCBiaXQgaXMgZXJyb3IgZmxhZyAqLworCQlpZiAoKGRhdGFbMF0gJiAweDgwKSA9PSAwKSB7CisJCQkvKiBubyBlcnJvcnMgb24gaW5kaXZpZHVhbCBieXRlcywgb25seSBwb3NzaWJsZSBvdmVycnVuIGVyciovCisJCQlpZiAoZGF0YVswXSAmIFJYRVJST1JfT1ZFUlJVTikKKwkJCQkJZXJyID0gVFRZX09WRVJSVU47CisJCQllbHNlIGVyciA9IDA7CisJCQlmb3IgKGkgPSAxOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIDsgKytpKSB7CisJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCBlcnIpOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogc29tZSBieXRlcyBoYWQgZXJyb3JzLCBldmVyeSBieXRlIGhhcyBzdGF0dXMgKi8KKwkJCWRiZygiJXMgLSBSWCBlcnJvciEhISEiLCBfX0ZVTkNUSU9OX18pOworCQkJZm9yIChpID0gMDsgaSArIDEgPCB1cmItPmFjdHVhbF9sZW5ndGg7IGkgKz0gMikgeworCQkJCWludCBzdGF0ID0gZGF0YVtpXSwgZmxhZyA9IDA7CisJCQkJaWYgKHN0YXQgJiBSWEVSUk9SX09WRVJSVU4pCisJCQkJCWZsYWcgfD0gVFRZX09WRVJSVU47CisJCQkJaWYgKHN0YXQgJiBSWEVSUk9SX0ZSQU1JTkcpCisJCQkJCWZsYWcgfD0gVFRZX0ZSQU1FOworCQkJCWlmIChzdGF0ICYgUlhFUlJPUl9QQVJJVFkpCisJCQkJCWZsYWcgfD0gVFRZX1BBUklUWTsKKwkJCQkvKiBYWFggc2hvdWxkIGhhbmRsZSBicmVhayAoMHgxMCkgKi8KKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaSsxXSwgZmxhZyk7CisJCQl9CisJCX0KKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwl9CisJCQkJCisJCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgKi8KKwl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCWlmIChwb3J0LT5vcGVuX2NvdW50KQorCQlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpICE9IDApIHsKKwkJCWRiZygiJXMgLSByZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQuICglZCkiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCX0KKwlyZXR1cm47Cit9CisKKyAJLyogT3V0ZGF0IGhhbmRsaW5nIGlzIGNvbW1vbiBmb3IgYWxsIGRldmljZXMgKi8KK3N0YXRpYyB2b2lkCXVzYTJ4X291dGRhdF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlICpwX3ByaXY7CisKKwlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlkYmcgKCIlcyAtIHVyYiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiID09IHBfcHJpdi0+b3V0X3VyYnNbMV0pOyAKKworCWlmIChwb3J0LT5vcGVuX2NvdW50KQorCQlzY2hlZHVsZV93b3JrKCZwb3J0LT53b3JrKTsKK30KKworc3RhdGljIHZvaWQJdXNhMjZfaW5hY2tfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7IAorCQorfQorCitzdGF0aWMgdm9pZAl1c2EyNl9vdXRjb250X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUgKnBfcHJpdjsKKworCXBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB1cmItPmNvbnRleHQ7CisJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJaWYgKHBfcHJpdi0+cmVzZW5kX2NvbnQpIHsKKwkJZGJnICgiJXMgLSBzZW5kaW5nIHNldHVwIiwgX19GVU5DVElPTl9fKTsgCisJCWtleXNwYW5fdXNhMjZfc2VuZF9zZXR1cChwb3J0LT5zZXJpYWwsIHBvcnQsIHBfcHJpdi0+cmVzZW5kX2NvbnQgLSAxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCXVzYTI2X2luc3RhdF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGNoYXIgCQkJCSpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IGtleXNwYW5fdXNhMjZfcG9ydFN0YXR1c01lc3NhZ2UJKm1zZzsKKwlzdHJ1Y3QgdXNiX3NlcmlhbAkJCSpzZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkJCSpwb3J0OworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZQkgCSpwX3ByaXY7CisJaW50IG9sZF9kY2Rfc3RhdGUsIGVycjsKKworCXNlcmlhbCA9IChzdHJ1Y3QgdXNiX3NlcmlhbCAqKSB1cmItPmNvbnRleHQ7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gc3RhdHVzOiAleCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCWlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0gOSkgeworCQlkYmcoIiVzIC0gJWQgYnl0ZSByZXBvcnQ/PyIsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJZ290byBleGl0OworCX0KKworCW1zZyA9IChzdHJ1Y3Qga2V5c3Bhbl91c2EyNl9wb3J0U3RhdHVzTWVzc2FnZSAqKWRhdGE7CisKKyNpZiAwCisJZGJnKCIlcyAtIHBvcnQgc3RhdHVzOiBwb3J0ICVkIGN0cyAlZCBkY2QgJWQgZHNyICVkIHJpICVkIHRvZmYgJWQgdHhvZmYgJWQgcnhlbiAlZCBjciAlZCIsCisJICAgIF9fRlVOQ1RJT05fXywgbXNnLT5wb3J0LCBtc2ctPmhza2lhX2N0cywgbXNnLT5ncGlhX2RjZCwgbXNnLT5kc3IsIG1zZy0+cmksIG1zZy0+X3R4T2ZmLAorCSAgICBtc2ctPl90eFhvZmYsIG1zZy0+cnhFbmFibGVkLCBtc2ctPmNvbnRyb2xSZXNwb25zZSk7CisjZW5kaWYKKworCS8qIE5vdyBkbyBzb21ldGhpbmcgdXNlZnVsIHdpdGggdGhlIGRhdGEgKi8KKworCisJLyogQ2hlY2sgcG9ydCBudW1iZXIgZnJvbSBtZXNzYWdlIGFuZCByZXRyaWV2ZSBwcml2YXRlIGRhdGEgKi8JCisJaWYgKG1zZy0+cG9ydCA+PSBzZXJpYWwtPm51bV9wb3J0cykgeworCQlkYmcgKCIlcyAtIFVuZXhwZWN0ZWQgcG9ydCBudW1iZXIgJWQiLCBfX0ZVTkNUSU9OX18sIG1zZy0+cG9ydCk7CisJCWdvdG8gZXhpdDsKKwl9CisJcG9ydCA9IHNlcmlhbC0+cG9ydFttc2ctPnBvcnRdOworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkKKwkvKiBVcGRhdGUgaGFuZHNoYWtpbmcgcGluIHN0YXRlIGluZm9ybWF0aW9uICovCisJb2xkX2RjZF9zdGF0ZSA9IHBfcHJpdi0+ZGNkX3N0YXRlOworCXBfcHJpdi0+Y3RzX3N0YXRlID0gKChtc2ctPmhza2lhX2N0cykgPyAxIDogMCk7CisJcF9wcml2LT5kc3Jfc3RhdGUgPSAoKG1zZy0+ZHNyKSA/IDEgOiAwKTsKKwlwX3ByaXYtPmRjZF9zdGF0ZSA9ICgobXNnLT5ncGlhX2RjZCkgPyAxIDogMCk7CisJcF9wcml2LT5yaV9zdGF0ZSA9ICgobXNnLT5yaSkgPyAxIDogMCk7CisKKwlpZiAocG9ydC0+dHR5ICYmICFDX0NMT0NBTChwb3J0LT50dHkpCisJICAgICYmIG9sZF9kY2Rfc3RhdGUgIT0gcF9wcml2LT5kY2Rfc3RhdGUpIHsKKwkJaWYgKG9sZF9kY2Rfc3RhdGUpCisJCQl0dHlfaGFuZ3VwKHBvcnQtPnR0eSk7CisJCS8qICBlbHNlICovCisJCS8qCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcF9wcml2LT5vcGVuX3dhaXQpOyAqLworCX0KKwkKKwkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCisJdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKwlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpICE9IDApIHsKKwkJZGJnKCIlcyAtIHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gKCVkKSIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwl9CitleGl0OiA7Cit9CisKK3N0YXRpYyB2b2lkCXVzYTI2X2dsb2NvbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisJCit9CisKKworc3RhdGljIHZvaWQgdXNhMjhfaW5kYXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgICAgICAgICAgICAgICAgICAgICBpLCBlcnI7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAgKnBvcnQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgICAgICAgKnR0eTsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAqZGF0YTsKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUgICAgICAgICAgICAgKnBfcHJpdjsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB1cmItPmNvbnRleHQ7CisJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCWlmICh1cmIgIT0gcF9wcml2LT5pbl91cmJzW3BfcHJpdi0+aW5fZmxpcF0pCisJCXJldHVybjsKKworCWRvIHsKKwkJaWYgKHVyYi0+c3RhdHVzKSB7CisJCQlkYmcoIiVzIC0gbm9uemVybyBzdGF0dXM6ICV4IG9uIGVuZHBvaW50ICVkLiIsCisJCQkgICAgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cywgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB1cmItPmNvbnRleHQ7CisJCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkJZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCisJCXR0eSA9IHBvcnQtPnR0eTsKKwkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQkJZm9yIChpID0gMDsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aCA7ICsraSkgeworCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgMCk7CisJCQl9CisJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQl9CisKKwkJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLworCQl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCQlpZiAocG9ydC0+b3Blbl9jb3VudCkKKwkJCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgIT0gMCkgeworCQkJCWRiZygiJXMgLSByZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQuICglZCkiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCQl9CisJCXBfcHJpdi0+aW5fZmxpcCBePSAxOworCisJCXVyYiA9IHBfcHJpdi0+aW5fdXJic1twX3ByaXYtPmluX2ZsaXBdOworCX0gd2hpbGUgKHVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUyk7Cit9CisKK3N0YXRpYyB2b2lkCXVzYTI4X2luYWNrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworfQorCitzdGF0aWMgdm9pZAl1c2EyOF9vdXRjb250X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUgKnBfcHJpdjsKKworCXBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB1cmItPmNvbnRleHQ7CisJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJaWYgKHBfcHJpdi0+cmVzZW5kX2NvbnQpIHsKKwkJZGJnICgiJXMgLSBzZW5kaW5nIHNldHVwIiwgX19GVU5DVElPTl9fKTsKKwkJa2V5c3Bhbl91c2EyOF9zZW5kX3NldHVwKHBvcnQtPnNlcmlhbCwgcG9ydCwgcF9wcml2LT5yZXNlbmRfY29udCAtIDEpOworCX0KK30KKworc3RhdGljIHZvaWQJdXNhMjhfaW5zdGF0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50CQkJCQllcnI7CisJdW5zaWduZWQgY2hhciAJCQkJKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlzdHJ1Y3Qga2V5c3Bhbl91c2EyOF9wb3J0U3RhdHVzTWVzc2FnZQkqbXNnOworCXN0cnVjdCB1c2Jfc2VyaWFsCQkJKnNlcmlhbDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CQkJKnBvcnQ7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlCSAJKnBfcHJpdjsKKwlpbnQgb2xkX2RjZF9zdGF0ZTsKKworCXNlcmlhbCA9IChzdHJ1Y3QgdXNiX3NlcmlhbCAqKSB1cmItPmNvbnRleHQ7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gc3RhdHVzOiAleCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IGtleXNwYW5fdXNhMjhfcG9ydFN0YXR1c01lc3NhZ2UpKSB7CisJCWRiZygiJXMgLSBiYWQgbGVuZ3RoICVkIiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLypkYmcoIiVzICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4IiwgX19GVU5DVElPTl9fCisJICAgIGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10sIGRhdGFbNF0sIGRhdGFbNV0sCisJICAgIGRhdGFbNl0sIGRhdGFbN10sIGRhdGFbOF0sIGRhdGFbOV0sIGRhdGFbMTBdLCBkYXRhWzExXSk7Ki8KKwkKKwkJLyogTm93IGRvIHNvbWV0aGluZyB1c2VmdWwgd2l0aCB0aGUgZGF0YSAqLworCW1zZyA9IChzdHJ1Y3Qga2V5c3Bhbl91c2EyOF9wb3J0U3RhdHVzTWVzc2FnZSAqKWRhdGE7CisKKworCQkvKiBDaGVjayBwb3J0IG51bWJlciBmcm9tIG1lc3NhZ2UgYW5kIHJldHJpZXZlIHByaXZhdGUgZGF0YSAqLwkKKwlpZiAobXNnLT5wb3J0ID49IHNlcmlhbC0+bnVtX3BvcnRzKSB7CisJCWRiZyAoIiVzIC0gVW5leHBlY3RlZCBwb3J0IG51bWJlciAlZCIsIF9fRlVOQ1RJT05fXywgbXNnLT5wb3J0KTsKKwkJZ290byBleGl0OworCX0KKwlwb3J0ID0gc2VyaWFsLT5wb3J0W21zZy0+cG9ydF07CisJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQorCS8qIFVwZGF0ZSBoYW5kc2hha2luZyBwaW4gc3RhdGUgaW5mb3JtYXRpb24gKi8KKwlvbGRfZGNkX3N0YXRlID0gcF9wcml2LT5kY2Rfc3RhdGU7CisJcF9wcml2LT5jdHNfc3RhdGUgPSAoKG1zZy0+Y3RzKSA/IDEgOiAwKTsKKwlwX3ByaXYtPmRzcl9zdGF0ZSA9ICgobXNnLT5kc3IpID8gMSA6IDApOworCXBfcHJpdi0+ZGNkX3N0YXRlID0gKChtc2ctPmRjZCkgPyAxIDogMCk7CisJcF9wcml2LT5yaV9zdGF0ZSA9ICgobXNnLT5yaSkgPyAxIDogMCk7CisKKwlpZiAocG9ydC0+dHR5ICYmICFDX0NMT0NBTChwb3J0LT50dHkpCisJICAgICYmIG9sZF9kY2Rfc3RhdGUgIT0gcF9wcml2LT5kY2Rfc3RhdGUpIHsKKwkJaWYgKG9sZF9kY2Rfc3RhdGUpCisJCQl0dHlfaGFuZ3VwKHBvcnQtPnR0eSk7CisJCS8qICBlbHNlICovCisJCS8qCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcF9wcml2LT5vcGVuX3dhaXQpOyAqLworCX0KKworCQkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCisJdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKwlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpICE9IDApIHsKKwkJZGJnKCIlcyAtIHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gKCVkKSIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwl9CitleGl0OiA7Cit9CisKK3N0YXRpYyB2b2lkCXVzYTI4X2dsb2NvbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7Cit9CisKKworc3RhdGljIHZvaWQJdXNhNDlfZ2xvY29udF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUgKnBfcHJpdjsKKwlpbnQgaTsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXNlcmlhbCA9IChzdHJ1Y3QgdXNiX3NlcmlhbCAqKSB1cmItPmNvbnRleHQ7CisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJCWlmIChwX3ByaXYtPnJlc2VuZF9jb250KSB7CisJCQlkYmcgKCIlcyAtIHNlbmRpbmcgc2V0dXAiLCBfX0ZVTkNUSU9OX18pOyAKKwkJCWtleXNwYW5fdXNhNDlfc2VuZF9zZXR1cChzZXJpYWwsIHBvcnQsIHBfcHJpdi0+cmVzZW5kX2NvbnQgLSAxKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisJLyogVGhpcyBpcyBhY3R1YWxseSBjYWxsZWQgZ2xvc3RhdCBpbiB0aGUgS2V5c3BhbgorCSAgIGRvY28gKi8KK3N0YXRpYyB2b2lkCXVzYTQ5X2luc3RhdF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludAkJCQkJZXJyOworCXVuc2lnbmVkIGNoYXIgCQkJCSpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IGtleXNwYW5fdXNhNDlfcG9ydFN0YXR1c01lc3NhZ2UJKm1zZzsKKwlzdHJ1Y3QgdXNiX3NlcmlhbAkJCSpzZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkJCSpwb3J0OworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZQkgCSpwX3ByaXY7CisJaW50IG9sZF9kY2Rfc3RhdGU7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlzZXJpYWwgPSAoc3RydWN0IHVzYl9zZXJpYWwgKikgdXJiLT5jb250ZXh0OworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHN0YXR1czogJXgiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0gc2l6ZW9mKHN0cnVjdCBrZXlzcGFuX3VzYTQ5X3BvcnRTdGF0dXNNZXNzYWdlKSkgeworCQlkYmcoIiVzIC0gYmFkIGxlbmd0aCAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJZ290byBleGl0OworCX0KKworCS8qZGJnKCIgJXggJXggJXggJXggJXggJXggJXggJXggJXggJXggJXgiLCBfX0ZVTkNUSU9OX18sIAorCSAgICBkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdLCBkYXRhWzRdLCBkYXRhWzVdLAorCSAgICBkYXRhWzZdLCBkYXRhWzddLCBkYXRhWzhdLCBkYXRhWzldLCBkYXRhWzEwXSk7Ki8KKwkKKwkJLyogTm93IGRvIHNvbWV0aGluZyB1c2VmdWwgd2l0aCB0aGUgZGF0YSAqLworCW1zZyA9IChzdHJ1Y3Qga2V5c3Bhbl91c2E0OV9wb3J0U3RhdHVzTWVzc2FnZSAqKWRhdGE7CisKKwkJLyogQ2hlY2sgcG9ydCBudW1iZXIgZnJvbSBtZXNzYWdlIGFuZCByZXRyaWV2ZSBwcml2YXRlIGRhdGEgKi8JCisJaWYgKG1zZy0+cG9ydE51bWJlciA+PSBzZXJpYWwtPm51bV9wb3J0cykgeworCQlkYmcgKCIlcyAtIFVuZXhwZWN0ZWQgcG9ydCBudW1iZXIgJWQiLCBfX0ZVTkNUSU9OX18sIG1zZy0+cG9ydE51bWJlcik7CisJCWdvdG8gZXhpdDsKKwl9CisJcG9ydCA9IHNlcmlhbC0+cG9ydFttc2ctPnBvcnROdW1iZXJdOworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkKKwkvKiBVcGRhdGUgaGFuZHNoYWtpbmcgcGluIHN0YXRlIGluZm9ybWF0aW9uICovCisJb2xkX2RjZF9zdGF0ZSA9IHBfcHJpdi0+ZGNkX3N0YXRlOworCXBfcHJpdi0+Y3RzX3N0YXRlID0gKChtc2ctPmN0cykgPyAxIDogMCk7CisJcF9wcml2LT5kc3Jfc3RhdGUgPSAoKG1zZy0+ZHNyKSA/IDEgOiAwKTsKKwlwX3ByaXYtPmRjZF9zdGF0ZSA9ICgobXNnLT5kY2QpID8gMSA6IDApOworCXBfcHJpdi0+cmlfc3RhdGUgPSAoKG1zZy0+cmkpID8gMSA6IDApOworCisJaWYgKHBvcnQtPnR0eSAmJiAhQ19DTE9DQUwocG9ydC0+dHR5KQorCSAgICAmJiBvbGRfZGNkX3N0YXRlICE9IHBfcHJpdi0+ZGNkX3N0YXRlKSB7CisJCWlmIChvbGRfZGNkX3N0YXRlKQorCQkJdHR5X2hhbmd1cChwb3J0LT50dHkpOworCQkvKiAgZWxzZSAqLworCQkvKgl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBfcHJpdi0+b3Blbl93YWl0KTsgKi8KKwl9CisKKwkJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLworCXVyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisKKwlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpICE9IDApIHsKKwkJZGJnKCIlcyAtIHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gKCVkKSIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwl9CitleGl0Ogk7Cit9CisKK3N0YXRpYyB2b2lkCXVzYTQ5X2luYWNrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworfQorCitzdGF0aWMgdm9pZAl1c2E0OV9pbmRhdF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludAkJCWksIGVycjsKKwlpbnQJCQllbmRwb2ludDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CSpwb3J0OworCXN0cnVjdCB0dHlfc3RydWN0CSp0dHk7CisJdW5zaWduZWQgY2hhciAJCSpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwlkYmcgKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwllbmRwb2ludCA9IHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyBzdGF0dXM6ICV4IG9uIGVuZHBvaW50ICVkLiIsIF9fRlVOQ1RJT05fXywKKwkJICAgIHVyYi0+c3RhdHVzLCBlbmRwb2ludCk7CisJCXJldHVybjsKKwl9CisKKwlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCXR0eSA9IHBvcnQtPnR0eTsKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCS8qIDB4ODAgYml0IGlzIGVycm9yIGZsYWcgKi8KKwkJaWYgKChkYXRhWzBdICYgMHg4MCkgPT0gMCkgeworCQkJLyogbm8gZXJyb3Igb24gYW55IGJ5dGUgKi8KKwkJCWZvciAoaSA9IDE7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGggOyArK2kpIHsKKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIDApOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogc29tZSBieXRlcyBoYWQgZXJyb3JzLCBldmVyeSBieXRlIGhhcyBzdGF0dXMgKi8KKwkJCWZvciAoaSA9IDA7IGkgKyAxIDwgdXJiLT5hY3R1YWxfbGVuZ3RoOyBpICs9IDIpIHsKKwkJCQlpbnQgc3RhdCA9IGRhdGFbaV0sIGZsYWcgPSAwOworCQkJCWlmIChzdGF0ICYgUlhFUlJPUl9PVkVSUlVOKQorCQkJCQlmbGFnIHw9IFRUWV9PVkVSUlVOOworCQkJCWlmIChzdGF0ICYgUlhFUlJPUl9GUkFNSU5HKQorCQkJCQlmbGFnIHw9IFRUWV9GUkFNRTsKKwkJCQlpZiAoc3RhdCAmIFJYRVJST1JfUEFSSVRZKQorCQkJCQlmbGFnIHw9IFRUWV9QQVJJVFk7CisJCQkJLyogWFhYIHNob3VsZCBoYW5kbGUgYnJlYWsgKDB4MTApICovCisJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2krMV0sIGZsYWcpOworCQkJfQorCQl9CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJfQorCQkJCQorCQkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCisJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlpZiAocG9ydC0+b3Blbl9jb3VudCkKKwkJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7CisJCQlkYmcoIiVzIC0gcmVzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLiAoJWQpIiwgX19GVU5DVElPTl9fLCBlcnIpOworCQl9Cit9CisKKy8qIG5vdCB1c2VkLCB1c2EtNDkgZG9lc24ndCBoYXZlIHBlci1wb3J0IGNvbnRyb2wgZW5kcG9pbnRzICovCitzdGF0aWMgdm9pZAl1c2E0OV9vdXRjb250X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworfQorCitzdGF0aWMgdm9pZAl1c2E5MF9pbmRhdF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludAkJCWksIGVycjsKKwlpbnQJCQllbmRwb2ludDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CSpwb3J0OworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZQkgCSpwX3ByaXY7CisJc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eTsKKwl1bnNpZ25lZCBjaGFyIAkJKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsgCisKKwllbmRwb2ludCA9IHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKTsKKworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHN0YXR1czogJXggb24gZW5kcG9pbnQgJWQuIiwKKwkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMsIGVuZHBvaW50KTsKKwkJcmV0dXJuOworCX0KKworCXBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB1cmItPmNvbnRleHQ7CisJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkKKwkJLyogaWYgY3VycmVudCBtb2RlIGlzIERNQSwgbG9va3MgbGlrZSB1c2EyOCBmb3JtYXQKKwkgICAJCW90aGVyd2lzZSBsb29rcyBsaWtlIHVzYTI2IGRhdGEgZm9ybWF0ICovCisKKwkJaWYgKHBfcHJpdi0+YmF1ZCA+IDU3NjAwKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIDsgKytpKSAKKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIDApOworCQl9CisJCWVsc2UgeworCQkJCisJCQkvKiAweDgwIGJpdCBpcyBlcnJvciBmbGFnICovCisJCQlpZiAoKGRhdGFbMF0gJiAweDgwKSA9PSAwKSB7CisJCQkJLyogbm8gZXJyb3JzIG9uIGluZGl2aWR1YWwgYnl0ZXMsIG9ubHkgcG9zc2libGUgb3ZlcnJ1biBlcnIqLworCQkJCWlmIChkYXRhWzBdICYgUlhFUlJPUl9PVkVSUlVOKQorCQkJCQkJZXJyID0gVFRZX09WRVJSVU47CisJCQkJZWxzZSBlcnIgPSAwOworCQkJCWZvciAoaSA9IDE7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGggOyArK2kpIAorCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIGVycik7CisJCQkKKwkJCX0gCisJCQllbHNlIHsKKwkJCS8qIHNvbWUgYnl0ZXMgaGFkIGVycm9ycywgZXZlcnkgYnl0ZSBoYXMgc3RhdHVzICovCisJCQkJZGJnKCIlcyAtIFJYIGVycm9yISEhISIsIF9fRlVOQ1RJT05fXyk7CisJCQkJZm9yIChpID0gMDsgaSArIDEgPCB1cmItPmFjdHVhbF9sZW5ndGg7IGkgKz0gMikgeworCQkJCQlpbnQgc3RhdCA9IGRhdGFbaV0sIGZsYWcgPSAwOworCQkJCQlpZiAoc3RhdCAmIFJYRVJST1JfT1ZFUlJVTikKKwkJCQkJCWZsYWcgfD0gVFRZX09WRVJSVU47CisJCQkJCWlmIChzdGF0ICYgUlhFUlJPUl9GUkFNSU5HKQorCQkJCQkJZmxhZyB8PSBUVFlfRlJBTUU7CisJCQkJCWlmIChzdGF0ICYgUlhFUlJPUl9QQVJJVFkpCisJCQkJCQlmbGFnIHw9IFRUWV9QQVJJVFk7CisJCQkJCS8qIFhYWCBzaG91bGQgaGFuZGxlIGJyZWFrICgweDEwKSAqLworCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaSsxXSwgZmxhZyk7CisJCQkJfQorCQkJfQorCQl9CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJfQorCQkJCQorCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgKi8KKwl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCWlmIChwb3J0LT5vcGVuX2NvdW50KQorCQlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpICE9IDApIHsKKwkJCWRiZygiJXMgLSByZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQuICglZCkiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJCX0KKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQJdXNhOTBfaW5zdGF0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgY2hhciAJCQkJKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlzdHJ1Y3Qga2V5c3Bhbl91c2E5MF9wb3J0U3RhdHVzTWVzc2FnZQkqbXNnOworCXN0cnVjdCB1c2Jfc2VyaWFsCQkJKnNlcmlhbDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CQkJKnBvcnQ7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlCSAJKnBfcHJpdjsKKwlpbnQgb2xkX2RjZF9zdGF0ZSwgZXJyOworCisJc2VyaWFsID0gKHN0cnVjdCB1c2Jfc2VyaWFsICopIHVyYi0+Y29udGV4dDsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyBzdGF0dXM6ICV4IiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA8IDE0KSB7CisJCWRiZygiJXMgLSAlZCBieXRlIHJlcG9ydD8/IiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQlnb3RvIGV4aXQ7CisJfQorCisJbXNnID0gKHN0cnVjdCBrZXlzcGFuX3VzYTkwX3BvcnRTdGF0dXNNZXNzYWdlICopZGF0YTsKKworCS8qIE5vdyBkbyBzb21ldGhpbmcgdXNlZnVsIHdpdGggdGhlIGRhdGEgKi8KKworCXBvcnQgPSBzZXJpYWwtPnBvcnRbMF07CisJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQorCS8qIFVwZGF0ZSBoYW5kc2hha2luZyBwaW4gc3RhdGUgaW5mb3JtYXRpb24gKi8KKwlvbGRfZGNkX3N0YXRlID0gcF9wcml2LT5kY2Rfc3RhdGU7CisJcF9wcml2LT5jdHNfc3RhdGUgPSAoKG1zZy0+Y3RzKSA/IDEgOiAwKTsKKwlwX3ByaXYtPmRzcl9zdGF0ZSA9ICgobXNnLT5kc3IpID8gMSA6IDApOworCXBfcHJpdi0+ZGNkX3N0YXRlID0gKChtc2ctPmRjZCkgPyAxIDogMCk7CisJcF9wcml2LT5yaV9zdGF0ZSA9ICgobXNnLT5yaSkgPyAxIDogMCk7CisKKwlpZiAocG9ydC0+dHR5ICYmICFDX0NMT0NBTChwb3J0LT50dHkpCisJICAgICYmIG9sZF9kY2Rfc3RhdGUgIT0gcF9wcml2LT5kY2Rfc3RhdGUpIHsKKwkJaWYgKG9sZF9kY2Rfc3RhdGUpCisJCQl0dHlfaGFuZ3VwKHBvcnQtPnR0eSk7CisJCS8qICBlbHNlICovCisJCS8qCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcF9wcml2LT5vcGVuX3dhaXQpOyAqLworCX0KKwkKKwkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCisJdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKwlpZiAoKGVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpICE9IDApIHsKKwkJZGJnKCIlcyAtIHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gKCVkKSIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwl9CitleGl0OgorCTsKK30KKworc3RhdGljIHZvaWQJdXNhOTBfb3V0Y29udF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlICpwX3ByaXY7CisKKwlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWlmIChwX3ByaXYtPnJlc2VuZF9jb250KSB7CisJCWRiZyAoIiVzIC0gc2VuZGluZyBzZXR1cCIsIF9fRlVOQ1RJT05fXyk7IAorCQlrZXlzcGFuX3VzYTkwX3NlbmRfc2V0dXAocG9ydC0+c2VyaWFsLCBwb3J0LCBwX3ByaXYtPnJlc2VuZF9jb250IC0gMSk7CisJfQorfQorCitzdGF0aWMgaW50IGtleXNwYW5fd3JpdGVfcm9vbSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUJKnBfcHJpdjsKKwljb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscwkqZF9kZXRhaWxzOworCWludAkJCQlmbGlwOworCWludAkJCQlkYXRhX2xlbjsKKwlzdHJ1Y3QgdXJiCQkJKnRoaXNfdXJiOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWRfZGV0YWlscyA9IHBfcHJpdi0+ZGV2aWNlX2RldGFpbHM7CisKKwlpZiAoZF9kZXRhaWxzLT5tc2dfZm9ybWF0ID09IG1zZ191c2E5MCkKKyAgIAkJZGF0YV9sZW4gPSA2NDsKKwllbHNlCisJCWRhdGFfbGVuID0gNjM7CisKKwlmbGlwID0gcF9wcml2LT5vdXRfZmxpcDsKKworCS8qIENoZWNrIGJvdGggZW5kcG9pbnRzIHRvIHNlZSBpZiBhbnkgYXJlIGF2YWlsYWJsZS4gKi8KKwlpZiAoKHRoaXNfdXJiID0gcF9wcml2LT5vdXRfdXJic1tmbGlwXSkgIT0gTlVMTCkgeworCQlpZiAodGhpc191cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpCisJCQlyZXR1cm4gKGRhdGFfbGVuKTsKKwkJZmxpcCA9IChmbGlwICsgMSkgJiBkX2RldGFpbHMtPm91dGRhdF9lbmRwX2ZsaXA7ICAgICAgICAKKwkJaWYgKCh0aGlzX3VyYiA9IHBfcHJpdi0+b3V0X3VyYnNbZmxpcF0pICE9IE5VTEwpIAorCQkJaWYgKHRoaXNfdXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKQorCQkJCXJldHVybiAoZGF0YV9sZW4pOworCX0KKwlyZXR1cm4gKDApOworfQorCisKK3N0YXRpYyBpbnQga2V5c3Bhbl9jaGFyc19pbl9idWZmZXIgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJcmV0dXJuICgwKTsKK30KKworCitzdGF0aWMgaW50IGtleXNwYW5fb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlIAkqcF9wcml2OworCXN0cnVjdCBrZXlzcGFuX3NlcmlhbF9wcml2YXRlIAkqc19wcml2OworCXN0cnVjdCB1c2Jfc2VyaWFsIAkJKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwljb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscwkqZF9kZXRhaWxzOworCWludAkJCQlpLCBlcnI7CisJaW50CQkJCWJhdWRfcmF0ZSwgZGV2aWNlX3BvcnQ7CisJc3RydWN0IHVyYgkJCSp1cmI7CisJdW5zaWduZWQgaW50CQkJY2ZsYWc7CisKKwlzX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWRfZGV0YWlscyA9IHBfcHJpdi0+ZGV2aWNlX2RldGFpbHM7CisJCisJZGJnKCIlcyAtIHBvcnQlZC4iLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7IAorCisJLyogU2V0IHNvbWUgc2FuZSBkZWZhdWx0cyAqLworCXBfcHJpdi0+cnRzX3N0YXRlID0gMTsKKwlwX3ByaXYtPmR0cl9zdGF0ZSA9IDE7CisJcF9wcml2LT5iYXVkID0gOTYwMDsKKworCS8qIGZvcmNlIGJhdWQgYW5kIGxjciB0byBiZSBzZXQgb24gb3BlbiAqLworCXBfcHJpdi0+b2xkX2JhdWQgPSAwOworCXBfcHJpdi0+b2xkX2NmbGFnID0gMDsKKworCXBfcHJpdi0+b3V0X2ZsaXAgPSAwOworCXBfcHJpdi0+aW5fZmxpcCA9IDA7CisKKwkvKiBSZXNldCBsb3cgbGV2ZWwgZGF0YSB0b2dnbGUgYW5kIHN0YXJ0IHJlYWRpbmcgZnJvbSBlbmRwb2ludHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWlmICgodXJiID0gcF9wcml2LT5pbl91cmJzW2ldKSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCXVyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisKKwkJLyogbWFrZSBzdXJlIGVuZHBvaW50IGRhdGEgdG9nZ2xlIGlzIHN5bmNocm9uaXplZCB3aXRoIHRoZSBkZXZpY2UgKi8KKwkJCisJCXVzYl9jbGVhcl9oYWx0KHVyYi0+ZGV2LCB1cmItPnBpcGUpOworCisJCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKSkgIT0gMCkgeworCQkJZGJnKCIlcyAtIHN1Ym1pdCB1cmIgJWQgZmFpbGVkICglZCkiLCBfX0ZVTkNUSU9OX18sIGksIGVycik7CisJCX0KKwl9CisKKwkvKiBSZXNldCBsb3cgbGV2ZWwgZGF0YSB0b2dnbGUgb24gb3V0IGVuZHBvaW50cyAqLworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJaWYgKCh1cmIgPSBwX3ByaXYtPm91dF91cmJzW2ldKSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCXVyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJCS8qIHVzYl9zZXR0b2dnbGUodXJiLT5kZXYsIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwgdXNiX3BpcGVvdXQodXJiLT5waXBlKSwgMCk7ICovCisJfQorCisJLyogZ2V0IHRoZSB0ZXJtaW5hbCBjb25maWcgZm9yIHRoZSBzZXR1cCBtZXNzYWdlIG5vdyBzbyB3ZSBkb24ndCAKKwkgKiBuZWVkIHRvIHNlbmQgMiBvZiB0aGVtICovCisKKwljZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwlkZXZpY2VfcG9ydCA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3I7CisKKwkvKiBCYXVkIHJhdGUgY2FsY3VsYXRpb24gdGFrZXMgYmF1ZCByYXRlIGFzIGFuIGludGVnZXIKKwkgICBzbyBvdGhlciByYXRlcyBjYW4gYmUgZ2VuZXJhdGVkIGlmIGRlc2lyZWQuICovCisJYmF1ZF9yYXRlID0gdHR5X2dldF9iYXVkX3JhdGUocG9ydC0+dHR5KTsKKwkvKiBJZiBubyBtYXRjaCBvciBpbnZhbGlkLCBsZWF2ZSBhcyBkZWZhdWx0ICovCQkKKwlpZiAoYmF1ZF9yYXRlID49IDAKKwkgICAgJiYgZF9kZXRhaWxzLT5jYWxjdWxhdGVfYmF1ZF9yYXRlKGJhdWRfcmF0ZSwgZF9kZXRhaWxzLT5iYXVkY2xrLAorCQkJCU5VTEwsIE5VTEwsIE5VTEwsIGRldmljZV9wb3J0KSA9PSBLRVlTUEFOX0JBVURfUkFURV9PSykgeworCQlwX3ByaXYtPmJhdWQgPSBiYXVkX3JhdGU7CisJfQorCisJLyogc2V0IENUUy9SVFMgaGFuZHNoYWtlIGV0Yy4gKi8KKwlwX3ByaXYtPmNmbGFnID0gY2ZsYWc7CisJcF9wcml2LT5mbG93X2NvbnRyb2wgPSAoY2ZsYWcgJiBDUlRTQ1RTKT8gZmxvd19jdHM6IGZsb3dfbm9uZTsKKworCWtleXNwYW5fc2VuZF9zZXR1cChwb3J0LCAxKTsKKwkvL21kZWxheSgxMDApOworCS8va2V5c3Bhbl9zZXRfdGVybWlvcyhwb3J0LCBOVUxMKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdG9wX3VyYihzdHJ1Y3QgdXJiICp1cmIpCit7CisJaWYgKHVyYiAmJiB1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyAmPSB+VVJCX0FTWU5DX1VOTElOSzsKKwkJdXNiX2tpbGxfdXJiKHVyYik7CisJfQorfQorCitzdGF0aWMgdm9pZCBrZXlzcGFuX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWludAkJCWk7CisJc3RydWN0IHVzYl9zZXJpYWwJKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3Qga2V5c3Bhbl9zZXJpYWxfcHJpdmF0ZSAJKnNfcHJpdjsKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUgCSpwX3ByaXY7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKwlzX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQorCXBfcHJpdi0+cnRzX3N0YXRlID0gMDsKKwlwX3ByaXYtPmR0cl9zdGF0ZSA9IDA7CisJCisJaWYgKHNlcmlhbC0+ZGV2KSB7CisJCWtleXNwYW5fc2VuZF9zZXR1cChwb3J0LCAyKTsKKwkJLyogcGlsb3QteGZlciBzZWVtcyB0byB3b3JrIGJlc3Qgd2l0aCB0aGlzIGRlbGF5ICovCisJCW1kZWxheSgxMDApOworCQkvLyBrZXlzcGFuX3NldF90ZXJtaW9zKHBvcnQsIE5VTEwpOworCX0KKworCS8qd2hpbGUgKHBfcHJpdi0+b3V0Y29udF91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJZGJnKCIlcyAtIHVyYiBpbiBwcm9ncmVzcyIsIF9fRlVOQ1RJT05fXyk7CisJfSovCisKKwlwX3ByaXYtPm91dF9mbGlwID0gMDsKKwlwX3ByaXYtPmluX2ZsaXAgPSAwOworCisJaWYgKHNlcmlhbC0+ZGV2KSB7CisJCS8qIFN0b3AgcmVhZGluZy93cml0aW5nIHVyYnMgKi8KKwkJc3RvcF91cmIocF9wcml2LT5pbmFja191cmIpOworCQkvKiBzdG9wX3VyYihwX3ByaXYtPm91dGNvbnRfdXJiKTsgKi8KKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJc3RvcF91cmIocF9wcml2LT5pbl91cmJzW2ldKTsKKwkJCXN0b3BfdXJiKHBfcHJpdi0+b3V0X3VyYnNbaV0pOworCQl9CisJfQorCXBvcnQtPnR0eSA9IE5VTEw7Cit9CisKKworCS8qIGRvd25sb2FkIHRoZSBmaXJtd2FyZSB0byBhIHByZS1yZW51bWVyYXRpb24gZGV2aWNlICovCitzdGF0aWMgaW50IGtleXNwYW5fZmFrZV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCAJCQkJcmVzcG9uc2U7CisJY29uc3Qgc3RydWN0IGV6dXNiX2hleF9yZWNvcmQgCSpyZWNvcmQ7CisJY2hhcgkJCQkqZndfbmFtZTsKKworCWRiZygiS2V5c3BhbiBzdGFydHVwIHZlcnNpb24gJTA0eCBwcm9kdWN0ICUwNHgiLAorCSAgICBsZTE2X3RvX2NwdShzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpLAorCSAgICBsZTE2X3RvX2NwdShzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKKwkKKwlpZiAoKGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkgJiAweDgwMDApICE9IDB4ODAwMCkgeworCQlkYmcoIkZpcm13YXJlIGFscmVhZHkgbG9hZGVkLiAgUXVpdHRpbmcuIik7CisJCXJldHVybigxKTsKKwl9CisKKwkJLyogU2VsZWN0IGZpcm13YXJlIGltYWdlIG9uIHRoZSBiYXNpcyBvZiBpZFByb2R1Y3QgKi8KKwlzd2l0Y2ggKGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpIHsKKwljYXNlIGtleXNwYW5fdXNhMjhfcHJlX3Byb2R1Y3RfaWQ6CisJCXJlY29yZCA9ICZrZXlzcGFuX3VzYTI4X2Zpcm13YXJlWzBdOworCQlmd19uYW1lID0gIlVTQTI4IjsKKwkJYnJlYWs7CisKKwljYXNlIGtleXNwYW5fdXNhMjh4X3ByZV9wcm9kdWN0X2lkOgorCQlyZWNvcmQgPSAma2V5c3Bhbl91c2EyOHhfZmlybXdhcmVbMF07CisJCWZ3X25hbWUgPSAiVVNBMjhYIjsKKwkJYnJlYWs7CisKKwljYXNlIGtleXNwYW5fdXNhMjh4YV9wcmVfcHJvZHVjdF9pZDoKKwkJcmVjb3JkID0gJmtleXNwYW5fdXNhMjh4YV9maXJtd2FyZVswXTsKKwkJZndfbmFtZSA9ICJVU0EyOFhBIjsKKwkJYnJlYWs7CisKKwljYXNlIGtleXNwYW5fdXNhMjh4Yl9wcmVfcHJvZHVjdF9pZDoKKwkJcmVjb3JkID0gJmtleXNwYW5fdXNhMjh4Yl9maXJtd2FyZVswXTsKKwkJZndfbmFtZSA9ICJVU0EyOFhCIjsKKwkJYnJlYWs7CisKKwljYXNlIGtleXNwYW5fdXNhMTlfcHJlX3Byb2R1Y3RfaWQ6CisJCXJlY29yZCA9ICZrZXlzcGFuX3VzYTE5X2Zpcm13YXJlWzBdOworCQlmd19uYW1lID0gIlVTQTE5IjsKKwkJYnJlYWs7CisJCQkgICAgIAorCWNhc2Uga2V5c3Bhbl91c2ExOXFpX3ByZV9wcm9kdWN0X2lkOgorCQlyZWNvcmQgPSAma2V5c3Bhbl91c2ExOXFpX2Zpcm13YXJlWzBdOworCQlmd19uYW1lID0gIlVTQTE5UUkiOworCQlicmVhazsKKwkJCSAgICAgCisJY2FzZSBrZXlzcGFuX21wcl9wcmVfcHJvZHVjdF9pZDoKKwkJcmVjb3JkID0gJmtleXNwYW5fbXByX2Zpcm13YXJlWzBdOworCQlmd19uYW1lID0gIk1QUiI7CisJCWJyZWFrOworCisJY2FzZSBrZXlzcGFuX3VzYTE5cXdfcHJlX3Byb2R1Y3RfaWQ6CisJCXJlY29yZCA9ICZrZXlzcGFuX3VzYTE5cXdfZmlybXdhcmVbMF07CisJCWZ3X25hbWUgPSAiVVNBMTlRSSI7CisJCWJyZWFrOworCQkJICAgICAKKwljYXNlIGtleXNwYW5fdXNhMTh4X3ByZV9wcm9kdWN0X2lkOgorCQlyZWNvcmQgPSAma2V5c3Bhbl91c2ExOHhfZmlybXdhcmVbMF07CisJCWZ3X25hbWUgPSAiVVNBMThYIjsKKwkJYnJlYWs7CisJCQkgICAgIAorCWNhc2Uga2V5c3Bhbl91c2ExOXdfcHJlX3Byb2R1Y3RfaWQ6CisJCXJlY29yZCA9ICZrZXlzcGFuX3VzYTE5d19maXJtd2FyZVswXTsKKwkJZndfbmFtZSA9ICJVU0ExOVciOworCQlicmVhazsKKwkJCisJY2FzZSBrZXlzcGFuX3VzYTQ5d19wcmVfcHJvZHVjdF9pZDoKKwkJcmVjb3JkID0gJmtleXNwYW5fdXNhNDl3X2Zpcm13YXJlWzBdOworCQlmd19uYW1lID0gIlVTQTQ5VyI7CisJCWJyZWFrOworCisJY2FzZSBrZXlzcGFuX3VzYTQ5d2xjX3ByZV9wcm9kdWN0X2lkOgorCQlyZWNvcmQgPSAma2V5c3Bhbl91c2E0OXdsY19maXJtd2FyZVswXTsKKwkJZndfbmFtZSA9ICJVU0E0OVdMQyI7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmVjb3JkID0gTlVMTDsKKwkJZndfbmFtZSA9ICJVbmtub3duIjsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJlY29yZCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICJSZXF1aXJlZCBrZXlzcGFuIGZpcm13YXJlIGltYWdlICglcykgdW5hdmFpbGFibGUuXG4iLCBmd19uYW1lKTsKKwkJcmV0dXJuKDEpOworCX0KKworCWRiZygiVXBsb2FkaW5nIEtleXNwYW4gJXMgZmlybXdhcmUuIiwgZndfbmFtZSk7CisKKwkJLyogZG93bmxvYWQgdGhlIGZpcm13YXJlIGltYWdlICovCisJcmVzcG9uc2UgPSBlenVzYl9zZXRfcmVzZXQoc2VyaWFsLCAxKTsKKworCXdoaWxlKHJlY29yZC0+YWRkcmVzcyAhPSAweGZmZmYpIHsKKwkJcmVzcG9uc2UgPSBlenVzYl93cml0ZW1lbW9yeShzZXJpYWwsIHJlY29yZC0+YWRkcmVzcywKKwkJCQkJICAgICAodW5zaWduZWQgY2hhciAqKXJlY29yZC0+ZGF0YSwKKwkJCQkJICAgICByZWNvcmQtPmRhdGFfc2l6ZSwgMHhhMCk7CisJCWlmIChyZXNwb25zZSA8IDApIHsKKwkJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICJlenVzYl93cml0ZW1lbW9yeSBmYWlsZWQgZm9yIEtleXNwYW4iCisJCQkJImZpcm13YXJlICglZCAlMDRYICVwICVkKVxuIiwKKwkJCQlyZXNwb25zZSwgCisJCQkJcmVjb3JkLT5hZGRyZXNzLCByZWNvcmQtPmRhdGEsIHJlY29yZC0+ZGF0YV9zaXplKTsKKwkJCWJyZWFrOworCQl9CisJCXJlY29yZCsrOworCX0KKwkJLyogYnJpbmcgZGV2aWNlIG91dCBvZiByZXNldC4gUmVudW1lcmF0aW9uIHdpbGwgb2NjdXIgaW4gYQorCQkgICBtb21lbnQgYW5kIHRoZSBuZXcgZGV2aWNlIHdpbGwgYmluZCB0byB0aGUgcmVhbCBkcml2ZXIgKi8KKwlyZXNwb25zZSA9IGV6dXNiX3NldF9yZXNldChzZXJpYWwsIDApOworCisJLyogd2UgZG9uJ3Qgd2FudCB0aGlzIGRldmljZSB0byBoYXZlIGEgZHJpdmVyIGFzc2lnbmVkIHRvIGl0LiAqLworCXJldHVybiAoMSk7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbnMgdXNlZCBieSBrZXlzcGFuX3NldHVwX3VyYnMgKi8KK3N0YXRpYyBzdHJ1Y3QgdXJiICprZXlzcGFuX3NldHVwX3VyYiAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgaW50IGVuZHBvaW50LAorCQkJCSAgICAgIGludCBkaXIsIHZvaWQgKmN0eCwgY2hhciAqYnVmLCBpbnQgbGVuLAorCQkJCSAgICAgIHZvaWQgKCpjYWxsYmFjaykoc3RydWN0IHVyYiAqLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykpCit7CisJc3RydWN0IHVyYiAqdXJiOworCisJaWYgKGVuZHBvaW50ID09IC0xKQorCQlyZXR1cm4gTlVMTDsJCS8qIGVuZHBvaW50IG5vdCBuZWVkZWQgKi8KKworCWRiZyAoIiVzIC0gYWxsb2MgZm9yIGVuZHBvaW50ICVkLiIsIF9fRlVOQ1RJT05fXywgZW5kcG9pbnQpOworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CQkvKiBObyBJU08gKi8KKwlpZiAodXJiID09IE5VTEwpIHsKKwkJZGJnICgiJXMgLSBhbGxvYyBmb3IgZW5kcG9pbnQgJWQgZmFpbGVkLiIsIF9fRlVOQ1RJT05fXywgZW5kcG9pbnQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkJLyogRmlsbCBVUkIgdXNpbmcgc3VwcGxpZWQgZGF0YS4gKi8KKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHNlcmlhbC0+ZGV2LAorCQkgICAgICB1c2Jfc25kYnVsa3BpcGUoc2VyaWFsLT5kZXYsIGVuZHBvaW50KSB8IGRpciwKKwkJICAgICAgYnVmLCBsZW4sIGNhbGxiYWNrLCBjdHgpOworCisJcmV0dXJuIHVyYjsKK30KKworc3RhdGljIHN0cnVjdCBjYWxsYmFja3MgeworCXZvaWQJKCppbnN0YXRfY2FsbGJhY2spKHN0cnVjdCB1cmIgKiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCXZvaWQJKCpnbG9jb250X2NhbGxiYWNrKShzdHJ1Y3QgdXJiICosIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwl2b2lkCSgqaW5kYXRfY2FsbGJhY2spKHN0cnVjdCB1cmIgKiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCXZvaWQJKCpvdXRkYXRfY2FsbGJhY2spKHN0cnVjdCB1cmIgKiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCXZvaWQJKCppbmFja19jYWxsYmFjaykoc3RydWN0IHVyYiAqLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisJdm9pZAkoKm91dGNvbnRfY2FsbGJhY2spKHN0cnVjdCB1cmIgKiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworfSBrZXlzcGFuX2NhbGxiYWNrc1tdID0geworCXsKKwkJLyogbXNnX3VzYTI2IGNhbGxiYWNrcyAqLworCQkuaW5zdGF0X2NhbGxiYWNrID0JdXNhMjZfaW5zdGF0X2NhbGxiYWNrLAorCQkuZ2xvY29udF9jYWxsYmFjayA9CXVzYTI2X2dsb2NvbnRfY2FsbGJhY2ssCisJCS5pbmRhdF9jYWxsYmFjayA9CXVzYTI2X2luZGF0X2NhbGxiYWNrLAorCQkub3V0ZGF0X2NhbGxiYWNrID0JdXNhMnhfb3V0ZGF0X2NhbGxiYWNrLAorCQkuaW5hY2tfY2FsbGJhY2sgPQl1c2EyNl9pbmFja19jYWxsYmFjaywKKwkJLm91dGNvbnRfY2FsbGJhY2sgPQl1c2EyNl9vdXRjb250X2NhbGxiYWNrLAorCX0sIHsKKwkJLyogbXNnX3VzYTI4IGNhbGxiYWNrcyAqLworCQkuaW5zdGF0X2NhbGxiYWNrID0JdXNhMjhfaW5zdGF0X2NhbGxiYWNrLAorCQkuZ2xvY29udF9jYWxsYmFjayA9CXVzYTI4X2dsb2NvbnRfY2FsbGJhY2ssCisJCS5pbmRhdF9jYWxsYmFjayA9CXVzYTI4X2luZGF0X2NhbGxiYWNrLAorCQkub3V0ZGF0X2NhbGxiYWNrID0JdXNhMnhfb3V0ZGF0X2NhbGxiYWNrLAorCQkuaW5hY2tfY2FsbGJhY2sgPQl1c2EyOF9pbmFja19jYWxsYmFjaywKKwkJLm91dGNvbnRfY2FsbGJhY2sgPQl1c2EyOF9vdXRjb250X2NhbGxiYWNrLAorCX0sIHsKKwkJLyogbXNnX3VzYTQ5IGNhbGxiYWNrcyAqLworCQkuaW5zdGF0X2NhbGxiYWNrID0JdXNhNDlfaW5zdGF0X2NhbGxiYWNrLAorCQkuZ2xvY29udF9jYWxsYmFjayA9CXVzYTQ5X2dsb2NvbnRfY2FsbGJhY2ssCisJCS5pbmRhdF9jYWxsYmFjayA9CXVzYTQ5X2luZGF0X2NhbGxiYWNrLAorCQkub3V0ZGF0X2NhbGxiYWNrID0JdXNhMnhfb3V0ZGF0X2NhbGxiYWNrLAorCQkuaW5hY2tfY2FsbGJhY2sgPQl1c2E0OV9pbmFja19jYWxsYmFjaywKKwkJLm91dGNvbnRfY2FsbGJhY2sgPQl1c2E0OV9vdXRjb250X2NhbGxiYWNrLAorCX0sIHsKKwkJLyogbXNnX3VzYTkwIGNhbGxiYWNrcyAqLworCQkuaW5zdGF0X2NhbGxiYWNrID0JdXNhOTBfaW5zdGF0X2NhbGxiYWNrLAorCQkuZ2xvY29udF9jYWxsYmFjayA9CXVzYTI4X2dsb2NvbnRfY2FsbGJhY2ssCQkKKwkJLmluZGF0X2NhbGxiYWNrID0JdXNhOTBfaW5kYXRfY2FsbGJhY2ssCisJCS5vdXRkYXRfY2FsbGJhY2sgPQl1c2EyeF9vdXRkYXRfY2FsbGJhY2ssCisJCS5pbmFja19jYWxsYmFjayA9CXVzYTI4X2luYWNrX2NhbGxiYWNrLAorCQkub3V0Y29udF9jYWxsYmFjayA9CXVzYTkwX291dGNvbnRfY2FsbGJhY2ssCisJfQorfTsKKworCS8qIEdlbmVyaWMgc2V0dXAgdXJicyBmdW5jdGlvbiB0aGF0IHVzZXMKKwkgICBkYXRhIGluIGRldmljZV9kZXRhaWxzICovCitzdGF0aWMgdm9pZCBrZXlzcGFuX3NldHVwX3VyYnMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQJCQkJaSwgajsKKwlzdHJ1Y3Qga2V5c3Bhbl9zZXJpYWxfcHJpdmF0ZSAJKnNfcHJpdjsKKwljb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscwkqZF9kZXRhaWxzOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJCSpwb3J0OworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZQkqcF9wcml2OworCXN0cnVjdCBjYWxsYmFja3MJCSpjYmFjazsKKwlpbnQJCQkJZW5kcDsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXNfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKwlkX2RldGFpbHMgPSBzX3ByaXYtPmRldmljZV9kZXRhaWxzOworCisJCS8qIFNldHVwIHZhbHVlcyBmb3IgdGhlIHZhcmlvdXMgY2FsbGJhY2sgcm91dGluZXMgKi8KKwljYmFjayA9ICZrZXlzcGFuX2NhbGxiYWNrc1tkX2RldGFpbHMtPm1zZ19mb3JtYXRdOworCisJCS8qIEFsbG9jYXRlIGFuZCBzZXQgdXAgdXJicyBmb3IgZWFjaCBvbmUgdGhhdCBpcyBpbiB1c2UsIAorCQkgICBzdGFydGluZyB3aXRoIGluc3RhdCBlbmRwb2ludHMgKi8KKwlzX3ByaXYtPmluc3RhdF91cmIgPSBrZXlzcGFuX3NldHVwX3VyYgorCQkoc2VyaWFsLCBkX2RldGFpbHMtPmluc3RhdF9lbmRwb2ludCwgVVNCX0RJUl9JTiwKKwkJIHNlcmlhbCwgc19wcml2LT5pbnN0YXRfYnVmLCBJTlNUQVRfQlVGTEVOLAorCQkgY2JhY2stPmluc3RhdF9jYWxsYmFjayk7CisKKwlzX3ByaXYtPmdsb2NvbnRfdXJiID0ga2V5c3Bhbl9zZXR1cF91cmIKKwkJKHNlcmlhbCwgZF9kZXRhaWxzLT5nbG9jb250X2VuZHBvaW50LCBVU0JfRElSX09VVCwKKwkJIHNlcmlhbCwgc19wcml2LT5nbG9jb250X2J1ZiwgR0xPQ09OVF9CVUZMRU4sCisJCSBjYmFjay0+Z2xvY29udF9jYWxsYmFjayk7CisKKwkJLyogU2V0dXAgZW5kcG9pbnRzIGZvciBlYWNoIHBvcnQgc3BlY2lmaWMgdGhpbmcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZF9kZXRhaWxzLT5udW1fcG9ydHM7IGkgKyspIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJCS8qIERvIGluZGF0IGVuZHBvaW50cyBmaXJzdCwgb25jZSBmb3IgZWFjaCBmbGlwICovCisJCWVuZHAgPSBkX2RldGFpbHMtPmluZGF0X2VuZHBvaW50c1tpXTsKKwkJZm9yIChqID0gMDsgaiA8PSBkX2RldGFpbHMtPmluZGF0X2VuZHBfZmxpcDsgKytqLCArK2VuZHApIHsKKwkJCXBfcHJpdi0+aW5fdXJic1tqXSA9IGtleXNwYW5fc2V0dXBfdXJiCisJCQkJKHNlcmlhbCwgZW5kcCwgVVNCX0RJUl9JTiwgcG9ydCwKKwkJCQkgcF9wcml2LT5pbl9idWZmZXJbal0sIDY0LAorCQkJCSBjYmFjay0+aW5kYXRfY2FsbGJhY2spOworCQl9CisJCWZvciAoOyBqIDwgMjsgKytqKQorCQkJcF9wcml2LT5pbl91cmJzW2pdID0gTlVMTDsKKworCQkvKiBvdXRkYXQgZW5kcG9pbnRzIGFsc28gaGF2ZSBmbGlwICovCisJCWVuZHAgPSBkX2RldGFpbHMtPm91dGRhdF9lbmRwb2ludHNbaV07CisJCWZvciAoaiA9IDA7IGogPD0gZF9kZXRhaWxzLT5vdXRkYXRfZW5kcF9mbGlwOyArK2osICsrZW5kcCkgeworCQkJcF9wcml2LT5vdXRfdXJic1tqXSA9IGtleXNwYW5fc2V0dXBfdXJiCisJCQkJKHNlcmlhbCwgZW5kcCwgVVNCX0RJUl9PVVQsIHBvcnQsCisJCQkJIHBfcHJpdi0+b3V0X2J1ZmZlcltqXSwgNjQsCisJCQkJIGNiYWNrLT5vdXRkYXRfY2FsbGJhY2spOworCQl9CisJCWZvciAoOyBqIDwgMjsgKytqKQorCQkJcF9wcml2LT5vdXRfdXJic1tqXSA9IE5VTEw7CisKKwkJLyogaW5hY2sgZW5kcG9pbnQgKi8KKwkJcF9wcml2LT5pbmFja191cmIgPSBrZXlzcGFuX3NldHVwX3VyYgorCQkJKHNlcmlhbCwgZF9kZXRhaWxzLT5pbmFja19lbmRwb2ludHNbaV0sIFVTQl9ESVJfSU4sCisJCQkgcG9ydCwgcF9wcml2LT5pbmFja19idWZmZXIsIDEsIGNiYWNrLT5pbmFja19jYWxsYmFjayk7CisKKwkJLyogb3V0Y29udCBlbmRwb2ludCAqLworCQlwX3ByaXYtPm91dGNvbnRfdXJiID0ga2V5c3Bhbl9zZXR1cF91cmIKKwkJCShzZXJpYWwsIGRfZGV0YWlscy0+b3V0Y29udF9lbmRwb2ludHNbaV0sIFVTQl9ESVJfT1VULAorCQkJIHBvcnQsIHBfcHJpdi0+b3V0Y29udF9idWZmZXIsIDY0LAorCQkJIGNiYWNrLT5vdXRjb250X2NhbGxiYWNrKTsKKwl9CQorCit9CisKKy8qIHVzYTE5IGZ1bmN0aW9uIGRvZXNuJ3QgcmVxdWlyZSBwcmVzY2FsZXIgKi8KK3N0YXRpYyBpbnQga2V5c3Bhbl91c2ExOV9jYWxjX2JhdWQodTMyIGJhdWRfcmF0ZSwgdTMyIGJhdWRjbGssIHU4ICpyYXRlX2hpLAorCQkJCSAgIHU4ICpyYXRlX2xvdywgdTggKnByZXNjYWxlciwgaW50IHBvcnRudW0pCit7CisJdTMyIAliMTYsCS8qIGJhdWQgcmF0ZSB0aW1lcyAxNiAoYWN0dWFsIHJhdGUgdXNlZCBpbnRlcm5hbGx5KSAqLworCQlkaXYsCS8qIGRpdmlzb3IgKi8JCisJCWNudDsJLyogaW52ZXJzZSBvZiBkaXZpc29yIChwcm9ncmFtbWVkIGludG8gODA1MSkgKi8KKwkJCisJZGJnICgiJXMgLSAlZC4iLCBfX0ZVTkNUSU9OX18sIGJhdWRfcmF0ZSk7CisKKwkJLyogcHJldmVudCBkaXZpZGUgYnkgemVyby4uLiAgKi8KKwlpZiggKGIxNiA9IChiYXVkX3JhdGUgKiAxNkwpKSA9PSAwKSB7CisJCXJldHVybiAoS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSk7CisJfQorCisJCS8qIEFueSAic3RhbmRhcmQiIHJhdGUgb3ZlciA1N2s2IGlzIG1hcmdpbmFsIG9uIHRoZSBVU0EtMTkKKwkJICAgYXMgd2UgcnVuIG91dCBvZiBkaXZpc29yIHJlc29sdXRpb24uICovCisJaWYgKGJhdWRfcmF0ZSA+IDU3NjAwKSB7CisJCXJldHVybiAoS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSk7CisJfQorCisJCS8qIGNhbGN1bGF0ZSB0aGUgZGl2aXNvciBhbmQgdGhlIGNvdW50ZXIgKGl0cyBpbnZlcnNlKSAqLworCWlmKCAoZGl2ID0gKGJhdWRjbGsgLyBiMTYpKSA9PSAwKSB7CisJCXJldHVybiAoS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSk7CisJfQorCWVsc2UgeworCQljbnQgPSAwIC0gZGl2OworCX0KKworCWlmKGRpdiA+IDB4ZmZmZikgeworCQlyZXR1cm4gKEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpOworCX0KKworCQkvKiByZXR1cm4gdGhlIGNvdW50ZXIgdmFsdWVzIGlmIG5vbi1udWxsICovCisJaWYgKHJhdGVfbG93KSB7CisJCSpyYXRlX2xvdyA9ICh1OCkgKGNudCAmIDB4ZmYpOworCX0KKwlpZiAocmF0ZV9oaSkgeworCQkqcmF0ZV9oaSA9ICh1OCkgKChjbnQgPj4gOCkgJiAweGZmKTsKKwl9CisJaWYgKHJhdGVfbG93ICYmIHJhdGVfaGkpIHsKKwkJZGJnICgiJXMgLSAlZCAlMDJ4ICUwMnguIiwgX19GVU5DVElPTl9fLCBiYXVkX3JhdGUsICpyYXRlX2hpLCAqcmF0ZV9sb3cpOworCX0KKwkKKwlyZXR1cm4gKEtFWVNQQU5fQkFVRF9SQVRFX09LKTsKK30KKworLyogdXNhMTlocyBmdW5jdGlvbiBkb2Vzbid0IHJlcXVpcmUgcHJlc2NhbGVyICovCitzdGF0aWMgaW50IGtleXNwYW5fdXNhMTloc19jYWxjX2JhdWQodTMyIGJhdWRfcmF0ZSwgdTMyIGJhdWRjbGssIHU4ICpyYXRlX2hpLAorCQkJCSAgIHU4ICpyYXRlX2xvdywgdTggKnByZXNjYWxlciwgaW50IHBvcnRudW0pCit7CisJdTMyIAliMTYsCS8qIGJhdWQgcmF0ZSB0aW1lcyAxNiAoYWN0dWFsIHJhdGUgdXNlZCBpbnRlcm5hbGx5KSAqLworCQkJZGl2OwkvKiBkaXZpc29yICovCQorCQkKKwlkYmcgKCIlcyAtICVkLiIsIF9fRlVOQ1RJT05fXywgYmF1ZF9yYXRlKTsKKworCQkvKiBwcmV2ZW50IGRpdmlkZSBieSB6ZXJvLi4uICAqLworCWlmKCAoYjE2ID0gKGJhdWRfcmF0ZSAqIDE2TCkpID09IDApIAorCQlyZXR1cm4gKEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpOworCQorCisKKwkJLyogY2FsY3VsYXRlIHRoZSBkaXZpc29yICovCisJaWYoIChkaXYgPSAoYmF1ZGNsayAvIGIxNikpID09IDApIAorCQlyZXR1cm4gKEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpOworCisJaWYoZGl2ID4gMHhmZmZmKSAKKwkJcmV0dXJuIChLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFKTsKKworCQkvKiByZXR1cm4gdGhlIGNvdW50ZXIgdmFsdWVzIGlmIG5vbi1udWxsICovCisJaWYgKHJhdGVfbG93KSAKKwkJKnJhdGVfbG93ID0gKHU4KSAoZGl2ICYgMHhmZik7CisJCisJaWYgKHJhdGVfaGkpIAorCQkqcmF0ZV9oaSA9ICh1OCkgKChkaXYgPj4gOCkgJiAweGZmKTsKKwkKKwlpZiAocmF0ZV9sb3cgJiYgcmF0ZV9oaSkgCisJCWRiZyAoIiVzIC0gJWQgJTAyeCAlMDJ4LiIsIF9fRlVOQ1RJT05fXywgYmF1ZF9yYXRlLCAqcmF0ZV9oaSwgKnJhdGVfbG93KTsKKwkKKwlyZXR1cm4gKEtFWVNQQU5fQkFVRF9SQVRFX09LKTsKK30KKworc3RhdGljIGludCBrZXlzcGFuX3VzYTE5d19jYWxjX2JhdWQodTMyIGJhdWRfcmF0ZSwgdTMyIGJhdWRjbGssIHU4ICpyYXRlX2hpLAorCQkJCSAgICB1OCAqcmF0ZV9sb3csIHU4ICpwcmVzY2FsZXIsIGludCBwb3J0bnVtKQoreworCXUzMiAJYjE2LAkvKiBiYXVkIHJhdGUgdGltZXMgMTYgKGFjdHVhbCByYXRlIHVzZWQgaW50ZXJuYWxseSkgKi8KKwkJY2xrLAkvKiBjbG9jayB3aXRoIDEzLzggcHJlc2NhbGVyICovCisJCWRpdiwJLyogZGl2aXNvciB1c2luZyAxMy84IHByZXNjYWxlciAqLwkKKwkJcmVzLAkvKiByZXN1bHRpbmcgYmF1ZCByYXRlIHVzaW5nIDEzLzggcHJlc2NhbGVyICovCisJCWRpZmYsCS8qIGVycm9yIHVzaW5nIDEzLzggcHJlc2NhbGVyICovCisJCXNtYWxsZXN0X2RpZmY7CisJdTgJYmVzdF9wcmVzY2FsZXI7CisJaW50CWk7CisKKwlkYmcgKCIlcyAtICVkLiIsIF9fRlVOQ1RJT05fXywgYmF1ZF9yYXRlKTsKKworCQkvKiBwcmV2ZW50IGRpdmlkZSBieSB6ZXJvICovCisJaWYoIChiMTYgPSBiYXVkX3JhdGUgKiAxNkwpID09IDApIHsKKwkJcmV0dXJuIChLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFKTsKKwl9CisKKwkJLyogQ2FsY3VsYXRlIHByZXNjYWxlciBieSB0cnlpbmcgdGhlbSBhbGwgYW5kIGxvb2tpbmcKKwkJICAgZm9yIGJlc3QgZml0ICovCisJCQorCQkvKiBzdGFydCB3aXRoIGxhcmdlc3QgcG9zc2libGUgZGlmZmVyZW5jZSAqLworCXNtYWxsZXN0X2RpZmYgPSAweGZmZmZmZmZmOworCisJCS8qIDAgaXMgYW4gaW52YWxpZCBwcmVzY2FsZXIsIHVzZWQgYXMgYSBmbGFnICovCisJYmVzdF9wcmVzY2FsZXIgPSAwOworCisJZm9yKGkgPSA4OyBpIDw9IDB4ZmY7ICsraSkgeworCQljbGsgPSAoYmF1ZGNsayAqIDgpIC8gKHUzMikgaTsKKwkJCisJCWlmKCAoZGl2ID0gY2xrIC8gYjE2KSA9PSAwKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCXJlcyA9IGNsayAvIGRpdjsKKwkJZGlmZj0gKHJlcyA+IGIxNikgPyAocmVzLWIxNikgOiAoYjE2LXJlcyk7CisKKwkJaWYoZGlmZiA8IHNtYWxsZXN0X2RpZmYpIHsKKwkJCWJlc3RfcHJlc2NhbGVyID0gaTsKKwkJCXNtYWxsZXN0X2RpZmYgPSBkaWZmOworCQl9CisJfQorCisJaWYoYmVzdF9wcmVzY2FsZXIgPT0gMCkgeworCQlyZXR1cm4gKEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpOworCX0KKworCWNsayA9IChiYXVkY2xrICogOCkgLyAodTMyKSBiZXN0X3ByZXNjYWxlcjsKKwlkaXYgPSBjbGsgLyBiMTY7CisKKwkJLyogcmV0dXJuIHRoZSBkaXZpc29yIGFuZCBwcmVzY2FsZXIgaWYgbm9uLW51bGwgKi8KKwlpZiAocmF0ZV9sb3cpIHsKKwkJKnJhdGVfbG93ID0gKHU4KSAoZGl2ICYgMHhmZik7CisJfQorCWlmIChyYXRlX2hpKSB7CisJCSpyYXRlX2hpID0gKHU4KSAoKGRpdiA+PiA4KSAmIDB4ZmYpOworCX0KKwlpZiAocHJlc2NhbGVyKSB7CisJCSpwcmVzY2FsZXIgPSBiZXN0X3ByZXNjYWxlcjsKKwkJLyogIGRiZygiJXMgLSAlZCAlZCIsIF9fRlVOQ1RJT05fXywgKnByZXNjYWxlciwgZGl2KTsgKi8KKwl9CisJcmV0dXJuIChLRVlTUEFOX0JBVURfUkFURV9PSyk7Cit9CisKKwkvKiBVU0EtMjggc3VwcG9ydHMgZGlmZmVyZW50IG1heGltdW0gYmF1ZCByYXRlcyBvbiBlYWNoIHBvcnQgKi8KK3N0YXRpYyBpbnQga2V5c3Bhbl91c2EyOF9jYWxjX2JhdWQodTMyIGJhdWRfcmF0ZSwgdTMyIGJhdWRjbGssIHU4ICpyYXRlX2hpLAorCQkJCSAgICB1OCAqcmF0ZV9sb3csIHU4ICpwcmVzY2FsZXIsIGludCBwb3J0bnVtKQoreworCXUzMiAJYjE2LAkvKiBiYXVkIHJhdGUgdGltZXMgMTYgKGFjdHVhbCByYXRlIHVzZWQgaW50ZXJuYWxseSkgKi8KKwkJZGl2LAkvKiBkaXZpc29yICovCQorCQljbnQ7CS8qIGludmVyc2Ugb2YgZGl2aXNvciAocHJvZ3JhbW1lZCBpbnRvIDgwNTEpICovCisKKwlkYmcgKCIlcyAtICVkLiIsIF9fRlVOQ1RJT05fXywgYmF1ZF9yYXRlKTsKKworCQkvKiBwcmV2ZW50IGRpdmlkZSBieSB6ZXJvICovCisJaWYgKChiMTYgPSBiYXVkX3JhdGUgKiAxNkwpID09IDApCisJCXJldHVybiAoS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSk7CisKKwkJLyogY2FsY3VsYXRlIHRoZSBkaXZpc29yIGFuZCB0aGUgY291bnRlciAoaXRzIGludmVyc2UpICovCisJaWYgKChkaXYgPSAoS0VZU1BBTl9VU0EyOF9CQVVEQ0xLIC8gYjE2KSkgPT0gMCkgeworCQlyZXR1cm4gKEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpOworCX0KKwllbHNlIHsKKwkJY250ID0gMCAtIGRpdjsKKwl9CisKKwkJLyogY2hlY2sgZm9yIG91dCBvZiByYW5nZSwgYmFzZWQgb24gcG9ydG51bSwgCisJCSAgIGFuZCByZXR1cm4gcmVzdWx0ICovCisJaWYocG9ydG51bSA9PSAwKSB7CisJCWlmKGRpdiA+IDB4ZmZmZikKKwkJCXJldHVybiAoS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSk7CisJfQorCWVsc2UgeworCQlpZihwb3J0bnVtID09IDEpIHsKKwkJCWlmKGRpdiA+IDB4ZmYpIHsKKwkJCQlyZXR1cm4gKEtFWVNQQU5fSU5WQUxJRF9CQVVEX1JBVEUpOworCQkJfQorCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIChLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFKTsKKwkJfQorCX0KKworCQkvKiByZXR1cm4gdGhlIGNvdW50ZXIgdmFsdWVzIGlmIG5vdCBOVUxMCisJCSAgIChwb3J0IDEgd2lsbCBpZ25vcmUgcmV0SGkpICovCisJaWYgKHJhdGVfbG93KSB7CisJCSpyYXRlX2xvdyA9ICh1OCkgKGNudCAmIDB4ZmYpOworCX0KKwlpZiAocmF0ZV9oaSkgeworCQkqcmF0ZV9oaSA9ICh1OCkgKChjbnQgPj4gOCkgJiAweGZmKTsKKwl9CisJZGJnICgiJXMgLSAlZCBPSy4iLCBfX0ZVTkNUSU9OX18sIGJhdWRfcmF0ZSk7CisJcmV0dXJuIChLRVlTUEFOX0JBVURfUkFURV9PSyk7Cit9CisKK3N0YXRpYyBpbnQga2V5c3Bhbl91c2EyNl9zZW5kX3NldHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCisJCQkJICAgIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJICAgIGludCByZXNldF9wb3J0KQoreworCXN0cnVjdCBrZXlzcGFuX3VzYTI2X3BvcnRDb250cm9sTWVzc2FnZQltc2c7CQkKKwlzdHJ1Y3Qga2V5c3Bhbl9zZXJpYWxfcHJpdmF0ZSAJCSpzX3ByaXY7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlIAkJKnBfcHJpdjsKKwljb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscwkqZF9kZXRhaWxzOworCWludCAJCQkJCW91dGNvbnRfdXJiOworCXN0cnVjdCB1cmIJCQkJKnRoaXNfdXJiOworCWludCAJCQkJCWRldmljZV9wb3J0LCBlcnI7CisKKwlkYmcgKCIlcyByZXNldD0lZCIsIF9fRlVOQ1RJT05fXywgcmVzZXRfcG9ydCk7IAorCisJc19wcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlkX2RldGFpbHMgPSBzX3ByaXYtPmRldmljZV9kZXRhaWxzOworCWRldmljZV9wb3J0ID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKworCW91dGNvbnRfdXJiID0gZF9kZXRhaWxzLT5vdXRjb250X2VuZHBvaW50c1twb3J0LT5udW1iZXJdOworCXRoaXNfdXJiID0gcF9wcml2LT5vdXRjb250X3VyYjsKKworCWRiZygiJXMgLSBlbmRwb2ludCAlZCIsIF9fRlVOQ1RJT05fXywgdXNiX3BpcGVlbmRwb2ludCh0aGlzX3VyYi0+cGlwZSkpOworCisJCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIHVyYiB0aGVuIHNlbmQgdGhlIG1lc3NhZ2UgKi8KKwlpZiAodGhpc191cmIgPT0gTlVMTCkgeworCQlkYmcoIiVzIC0gb29wcyBubyB1cmIuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFNhdmUgcmVzZXQgcG9ydCB2YWwgZm9yIHJlc2VuZC4KKwlEb24ndCBvdmVyd3JpdGUgcmVzZW5kIGZvciBjbG9zZSBjb25kaXRpb24uICovCisJaWYgKHBfcHJpdi0+cmVzZW5kX2NvbnQgIT0gMykKKwkJcF9wcml2LT5yZXNlbmRfY29udCA9IHJlc2V0X3BvcnQgKyAxOworCWlmICh0aGlzX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQkvKiAgZGJnICgiJXMgLSBhbHJlYWR5IHdyaXRpbmciLCBfX0ZVTkNUSU9OX18pOyAqLworCQltZGVsYXkoNSk7CisJCXJldHVybigtMSk7CisJfQorCisJbWVtc2V0KCZtc2csIDAsIHNpemVvZiAoc3RydWN0IGtleXNwYW5fdXNhMjZfcG9ydENvbnRyb2xNZXNzYWdlKSk7CisJCisJCS8qIE9ubHkgc2V0IGJhdWQgcmF0ZSBpZiBpdCdzIGNoYW5nZWQgKi8JCisJaWYgKHBfcHJpdi0+b2xkX2JhdWQgIT0gcF9wcml2LT5iYXVkKSB7CisJCXBfcHJpdi0+b2xkX2JhdWQgPSBwX3ByaXYtPmJhdWQ7CisJCW1zZy5zZXRDbG9ja2luZyA9IDB4ZmY7CisJCWlmIChkX2RldGFpbHMtPmNhbGN1bGF0ZV9iYXVkX3JhdGUKKwkJICAgIChwX3ByaXYtPmJhdWQsIGRfZGV0YWlscy0+YmF1ZGNsaywgJm1zZy5iYXVkSGksCisJCSAgICAgJm1zZy5iYXVkTG8sICZtc2cucHJlc2NhbGVyLCBkZXZpY2VfcG9ydCkgPT0gS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSApIHsKKwkJCWRiZygiJXMgLSBJbnZhbGlkIGJhdWQgcmF0ZSAlZCByZXF1ZXN0ZWQsIHVzaW5nIDk2MDAuIiwgX19GVU5DVElPTl9fLAorCQkJICAgIHBfcHJpdi0+YmF1ZCk7CisJCQltc2cuYmF1ZExvID0gMDsKKwkJCW1zZy5iYXVkSGkgPSAxMjU7CS8qIFZhbHVlcyBmb3IgOTYwMCBiYXVkICovCisJCQltc2cucHJlc2NhbGVyID0gMTA7CisJCX0KKwkJbXNnLnNldFByZXNjYWxlciA9IDB4ZmY7CisJfQorCisJbXNnLmxjciA9IChwX3ByaXYtPmNmbGFnICYgQ1NUT1BCKT8gU1RPUEJJVFNfNjc4XzI6IFNUT1BCSVRTXzU2NzhfMTsKKwlzd2l0Y2ggKHBfcHJpdi0+Y2ZsYWcgJiBDU0laRSkgeworCWNhc2UgQ1M1OgorCQltc2cubGNyIHw9IFVTQV9EQVRBQklUU181OworCQlicmVhazsKKwljYXNlIENTNjoKKwkJbXNnLmxjciB8PSBVU0FfREFUQUJJVFNfNjsKKwkJYnJlYWs7CisJY2FzZSBDUzc6CisJCW1zZy5sY3IgfD0gVVNBX0RBVEFCSVRTXzc7CisJCWJyZWFrOworCWNhc2UgQ1M4OgorCQltc2cubGNyIHw9IFVTQV9EQVRBQklUU184OworCQlicmVhazsKKwl9CisJaWYgKHBfcHJpdi0+Y2ZsYWcgJiBQQVJFTkIpIHsKKwkJLyogbm90ZSBVU0FfUEFSSVRZX05PTkUgPT0gMCAqLworCQltc2cubGNyIHw9IChwX3ByaXYtPmNmbGFnICYgUEFST0REKT8KKwkJCVVTQV9QQVJJVFlfT0REOiBVU0FfUEFSSVRZX0VWRU47CisJfQorCW1zZy5zZXRMY3IgPSAweGZmOworCisJbXNnLmN0c0Zsb3dDb250cm9sID0gKHBfcHJpdi0+Zmxvd19jb250cm9sID09IGZsb3dfY3RzKTsKKwltc2cueG9uRmxvd0NvbnRyb2wgPSAwOworCW1zZy5zZXRGbG93Q29udHJvbCA9IDB4ZmY7CisJbXNnLmZvcndhcmRpbmdMZW5ndGggPSAxNjsKKwltc2cueG9uQ2hhciA9IDE3OworCW1zZy54b2ZmQ2hhciA9IDE5OworCisJLyogT3BlbmluZyBwb3J0ICovCisJaWYgKHJlc2V0X3BvcnQgPT0gMSkgeworCQltc2cuX3R4T24gPSAxOworCQltc2cuX3R4T2ZmID0gMDsKKwkJbXNnLnR4Rmx1c2ggPSAwOworCQltc2cudHhCcmVhayA9IDA7CisJCW1zZy5yeE9uID0gMTsKKwkJbXNnLnJ4T2ZmID0gMDsKKwkJbXNnLnJ4Rmx1c2ggPSAxOworCQltc2cucnhGb3J3YXJkID0gMDsKKwkJbXNnLnJldHVyblN0YXR1cyA9IDA7CisJCW1zZy5yZXNldERhdGFUb2dnbGUgPSAweGZmOworCX0KKworCS8qIENsb3NpbmcgcG9ydCAqLworCWVsc2UgaWYgKHJlc2V0X3BvcnQgPT0gMikgeworCQltc2cuX3R4T24gPSAwOworCQltc2cuX3R4T2ZmID0gMTsKKwkJbXNnLnR4Rmx1c2ggPSAwOworCQltc2cudHhCcmVhayA9IDA7CisJCW1zZy5yeE9uID0gMDsKKwkJbXNnLnJ4T2ZmID0gMTsKKwkJbXNnLnJ4Rmx1c2ggPSAxOworCQltc2cucnhGb3J3YXJkID0gMDsKKwkJbXNnLnJldHVyblN0YXR1cyA9IDA7CisJCW1zZy5yZXNldERhdGFUb2dnbGUgPSAwOworCX0KKworCS8qIFNlbmRpbmcgaW50ZXJtZWRpYXRlIGNvbmZpZ3MgKi8KKwllbHNlIHsKKwkJbXNnLl90eE9uID0gKCEgcF9wcml2LT5icmVha19vbik7CisJCW1zZy5fdHhPZmYgPSAwOworCQltc2cudHhGbHVzaCA9IDA7CisJCW1zZy50eEJyZWFrID0gKHBfcHJpdi0+YnJlYWtfb24pOworCQltc2cucnhPbiA9IDA7CisJCW1zZy5yeE9mZiA9IDA7CisJCW1zZy5yeEZsdXNoID0gMDsKKwkJbXNnLnJ4Rm9yd2FyZCA9IDA7CisJCW1zZy5yZXR1cm5TdGF0dXMgPSAwOworCQltc2cucmVzZXREYXRhVG9nZ2xlID0gMHgwOworCX0KKworCQkvKiBEbyBoYW5kc2hha2luZyBvdXRwdXRzICovCQorCW1zZy5zZXRUeFRyaVN0YXRlX3NldFJ0cyA9IDB4ZmY7CisJbXNnLnR4VHJpU3RhdGVfcnRzID0gcF9wcml2LT5ydHNfc3RhdGU7CisKKwltc2cuc2V0SHNrb2Ffc2V0RHRyID0gMHhmZjsKKwltc2cuaHNrb2FfZHRyID0gcF9wcml2LT5kdHJfc3RhdGU7CisJCQorCXBfcHJpdi0+cmVzZW5kX2NvbnQgPSAwOworCW1lbWNweSAodGhpc191cmItPnRyYW5zZmVyX2J1ZmZlciwgJm1zZywgc2l6ZW9mKG1zZykpOworCQorCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBkZXZpY2Ugb24gY29udHJvbCBlbmRwb2ludCAqLworCXRoaXNfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gc2l6ZW9mKG1zZyk7CisKKwl0aGlzX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYih0aGlzX3VyYiwgR0ZQX0FUT01JQykpICE9IDApIHsKKwkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHNldHVwKSBmYWlsZWQgKCVkKSIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwl9CisjaWYgMAorCWVsc2UgeworCQlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIoJWQpIE9LICVkIGJ5dGVzIChlbmQgJWQpIiwgX19GVU5DVElPTl9fCisJCSAgICBvdXRjb250X3VyYiwgdGhpc191cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCSAgICB1c2JfcGlwZWVuZHBvaW50KHRoaXNfdXJiLT5waXBlKSk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50IGtleXNwYW5fdXNhMjhfc2VuZF9zZXR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCSAgICBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCSAgICBpbnQgcmVzZXRfcG9ydCkKK3sKKwlzdHJ1Y3Qga2V5c3Bhbl91c2EyOF9wb3J0Q29udHJvbE1lc3NhZ2UJbXNnOwkJCisJc3RydWN0IGtleXNwYW5fc2VyaWFsX3ByaXZhdGUJIAkqc19wcml2OworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSAJCSpwX3ByaXY7CisJY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMJKmRfZGV0YWlsczsKKwlzdHJ1Y3QgdXJiCQkJCSp0aGlzX3VyYjsKKwlpbnQgCQkJCQlkZXZpY2VfcG9ydCwgZXJyOworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJc19wcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCXBfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlkX2RldGFpbHMgPSBzX3ByaXYtPmRldmljZV9kZXRhaWxzOworCWRldmljZV9wb3J0ID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKworCS8qIG9ubHkgZG8gc29tZXRoaW5nIGlmIHdlIGhhdmUgYSBidWxrIG91dCBlbmRwb2ludCAqLworCWlmICgodGhpc191cmIgPSBwX3ByaXYtPm91dGNvbnRfdXJiKSA9PSBOVUxMKSB7CisJCWRiZygiJXMgLSBvb3BzIG5vIHVyYi4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogU2F2ZSByZXNldCBwb3J0IHZhbCBmb3IgcmVzZW5kLgorCSAgIERvbid0IG92ZXJ3cml0ZSByZXNlbmQgZm9yIGNsb3NlIGNvbmRpdGlvbi4gKi8KKwlpZiAocF9wcml2LT5yZXNlbmRfY29udCAhPSAzKQorCQlwX3ByaXYtPnJlc2VuZF9jb250ID0gcmVzZXRfcG9ydCArIDE7CisJaWYgKHRoaXNfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCWRiZyAoIiVzIGFscmVhZHkgd3JpdGluZyIsIF9fRlVOQ1RJT05fXyk7CisJCW1kZWxheSg1KTsKKwkJcmV0dXJuKC0xKTsKKwl9CisKKwltZW1zZXQoJm1zZywgMCwgc2l6ZW9mIChzdHJ1Y3Qga2V5c3Bhbl91c2EyOF9wb3J0Q29udHJvbE1lc3NhZ2UpKTsKKworCW1zZy5zZXRCYXVkUmF0ZSA9IDE7CisJaWYgKGRfZGV0YWlscy0+Y2FsY3VsYXRlX2JhdWRfcmF0ZShwX3ByaXYtPmJhdWQsIGRfZGV0YWlscy0+YmF1ZGNsaywKKwkJJm1zZy5iYXVkSGksICZtc2cuYmF1ZExvLCBOVUxMLCBkZXZpY2VfcG9ydCkgPT0gS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSApIHsKKwkJZGJnKCIlcyAtIEludmFsaWQgYmF1ZCByYXRlIHJlcXVlc3RlZCAlZC4iLCBfX0ZVTkNUSU9OX18sIHBfcHJpdi0+YmF1ZCk7CisJCW1zZy5iYXVkTG8gPSAweGZmOworCQltc2cuYmF1ZEhpID0gMHhiMjsJLyogVmFsdWVzIGZvciA5NjAwIGJhdWQgKi8KKwl9CisKKwkvKiBJZiBwYXJpdHkgaXMgZW5hYmxlZCwgd2UgbXVzdCBjYWxjdWxhdGUgaXQgb3Vyc2VsdmVzLiAqLworCW1zZy5wYXJpdHkgPSAwOwkJLyogWFhYIGZvciBub3cgKi8KKworCW1zZy5jdHNGbG93Q29udHJvbCA9IChwX3ByaXYtPmZsb3dfY29udHJvbCA9PSBmbG93X2N0cyk7CisJbXNnLnhvbkZsb3dDb250cm9sID0gMDsKKworCS8qIERvIGhhbmRzaGFraW5nIG91dHB1dHMsIERUUiBpcyBpbnZlcnRlZCByZWxhdGl2ZSB0byBSVFMgKi8JCisJbXNnLnJ0cyA9IHBfcHJpdi0+cnRzX3N0YXRlOworCW1zZy5kdHIgPSBwX3ByaXYtPmR0cl9zdGF0ZTsKKworCW1zZy5mb3J3YXJkaW5nTGVuZ3RoID0gMTY7CisJbXNnLmZvcndhcmRNcyA9IDEwOworCW1zZy5icmVha1RocmVzaG9sZCA9IDQ1OworCW1zZy54b25DaGFyID0gMTc7CisJbXNnLnhvZmZDaGFyID0gMTk7CisKKwkvKm1zZy5yZXR1cm5TdGF0dXMgPSAxOworCW1zZy5yZXNldERhdGFUb2dnbGUgPSAweGZmOyovCisJLyogT3BlbmluZyBwb3J0ICovCisJaWYgKHJlc2V0X3BvcnQgPT0gMSkgeworCQltc2cuX3R4T24gPSAxOworCQltc2cuX3R4T2ZmID0gMDsKKwkJbXNnLnR4Rmx1c2ggPSAwOworCQltc2cudHhGb3JjZVhvZmYgPSAwOworCQltc2cudHhCcmVhayA9IDA7CisJCW1zZy5yeE9uID0gMTsKKwkJbXNnLnJ4T2ZmID0gMDsKKwkJbXNnLnJ4Rmx1c2ggPSAxOworCQltc2cucnhGb3J3YXJkID0gMDsKKwkJbXNnLnJldHVyblN0YXR1cyA9IDA7CisJCW1zZy5yZXNldERhdGFUb2dnbGUgPSAweGZmOworCX0KKwkvKiBDbG9zaW5nIHBvcnQgKi8KKwllbHNlIGlmIChyZXNldF9wb3J0ID09IDIpIHsKKwkJbXNnLl90eE9uID0gMDsKKwkJbXNnLl90eE9mZiA9IDE7CisJCW1zZy50eEZsdXNoID0gMDsKKwkJbXNnLnR4Rm9yY2VYb2ZmID0gMDsKKwkJbXNnLnR4QnJlYWsgPSAwOworCQltc2cucnhPbiA9IDA7CisJCW1zZy5yeE9mZiA9IDE7CisJCW1zZy5yeEZsdXNoID0gMTsKKwkJbXNnLnJ4Rm9yd2FyZCA9IDA7CisJCW1zZy5yZXR1cm5TdGF0dXMgPSAwOworCQltc2cucmVzZXREYXRhVG9nZ2xlID0gMDsKKwl9CisJLyogU2VuZGluZyBpbnRlcm1lZGlhdGUgY29uZmlncyAqLworCWVsc2UgeworCQltc2cuX3R4T24gPSAoISBwX3ByaXYtPmJyZWFrX29uKTsKKwkJbXNnLl90eE9mZiA9IDA7CisJCW1zZy50eEZsdXNoID0gMDsKKwkJbXNnLnR4Rm9yY2VYb2ZmID0gMDsKKwkJbXNnLnR4QnJlYWsgPSAocF9wcml2LT5icmVha19vbik7CisJCW1zZy5yeE9uID0gMDsKKwkJbXNnLnJ4T2ZmID0gMDsKKwkJbXNnLnJ4Rmx1c2ggPSAwOworCQltc2cucnhGb3J3YXJkID0gMDsKKwkJbXNnLnJldHVyblN0YXR1cyA9IDA7CisJCW1zZy5yZXNldERhdGFUb2dnbGUgPSAweDA7CisJfQorCisJcF9wcml2LT5yZXNlbmRfY29udCA9IDA7CisJbWVtY3B5ICh0aGlzX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCAmbXNnLCBzaXplb2YobXNnKSk7CisKKwkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgZGV2aWNlIG9uIGNvbnRyb2wgZW5kcG9pbnQgKi8KKwl0aGlzX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNpemVvZihtc2cpOworCisJdGhpc191cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIodGhpc191cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7CisJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihzZXR1cCkgZmFpbGVkIiwgX19GVU5DVElPTl9fKTsKKwl9CisjaWYgMAorCWVsc2UgeworCQlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIoc2V0dXApIE9LICVkIGJ5dGVzIiwgX19GVU5DVElPTl9fLAorCQkgICAgdGhpc191cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCX0KKyNlbmRpZgorCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludCBrZXlzcGFuX3VzYTQ5X3NlbmRfc2V0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCQkgICAgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkgICAgaW50IHJlc2V0X3BvcnQpCit7CisJc3RydWN0IGtleXNwYW5fdXNhNDlfcG9ydENvbnRyb2xNZXNzYWdlCW1zZzsJCQorCXN0cnVjdCBrZXlzcGFuX3NlcmlhbF9wcml2YXRlIAkJKnNfcHJpdjsKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUgCQkqcF9wcml2OworCWNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzCSpkX2RldGFpbHM7CisJaW50IAkJCQkJZ2xvY29udF91cmI7CisJc3RydWN0IHVyYgkJCQkqdGhpc191cmI7CisJaW50IAkJCQkJZXJyLCBkZXZpY2VfcG9ydDsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXNfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKwlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJZF9kZXRhaWxzID0gc19wcml2LT5kZXZpY2VfZGV0YWlsczsKKworCWdsb2NvbnRfdXJiID0gZF9kZXRhaWxzLT5nbG9jb250X2VuZHBvaW50OworCXRoaXNfdXJiID0gc19wcml2LT5nbG9jb250X3VyYjsKKworCQkvKiBXb3JrIG91dCB3aGljaCBwb3J0IHdpdGhpbiB0aGUgZGV2aWNlIGlzIGJlaW5nIHNldHVwICovCisJZGV2aWNlX3BvcnQgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOworCisJZGJnKCIlcyAtIGVuZHBvaW50ICVkIHBvcnQgJWQgKCVkKSIsX19GVU5DVElPTl9fLCB1c2JfcGlwZWVuZHBvaW50KHRoaXNfdXJiLT5waXBlKSwgcG9ydC0+bnVtYmVyLCBkZXZpY2VfcG9ydCk7CisKKwkJLyogTWFrZSBzdXJlIHdlIGhhdmUgYW4gdXJiIHRoZW4gc2VuZCB0aGUgbWVzc2FnZSAqLworCWlmICh0aGlzX3VyYiA9PSBOVUxMKSB7CisJCWRiZygiJXMgLSBvb3BzIG5vIHVyYiBmb3IgcG9ydCAlZC4iLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBTYXZlIHJlc2V0IHBvcnQgdmFsIGZvciByZXNlbmQuCisJICAgRG9uJ3Qgb3ZlcndyaXRlIHJlc2VuZCBmb3IgY2xvc2UgY29uZGl0aW9uLiAqLworCWlmIChwX3ByaXYtPnJlc2VuZF9jb250ICE9IDMpCisJCXBfcHJpdi0+cmVzZW5kX2NvbnQgPSByZXNldF9wb3J0ICsgMTsKKwlpZiAodGhpc191cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJLyogIGRiZyAoIiVzIC0gYWxyZWFkeSB3cml0aW5nIiwgX19GVU5DVElPTl9fKTsgKi8KKwkJbWRlbGF5KDUpOworCQlyZXR1cm4oLTEpOworCX0KKworCW1lbXNldCgmbXNnLCAwLCBzaXplb2YgKHN0cnVjdCBrZXlzcGFuX3VzYTQ5X3BvcnRDb250cm9sTWVzc2FnZSkpOworCisJLyptc2cucG9ydE51bWJlciA9IHBvcnQtPm51bWJlcjsqLworCW1zZy5wb3J0TnVtYmVyID0gZGV2aWNlX3BvcnQ7CisJCisJCS8qIE9ubHkgc2V0IGJhdWQgcmF0ZSBpZiBpdCdzIGNoYW5nZWQgKi8JCisJaWYgKHBfcHJpdi0+b2xkX2JhdWQgIT0gcF9wcml2LT5iYXVkKSB7CisJCXBfcHJpdi0+b2xkX2JhdWQgPSBwX3ByaXYtPmJhdWQ7CisJCW1zZy5zZXRDbG9ja2luZyA9IDB4ZmY7CisJCWlmIChkX2RldGFpbHMtPmNhbGN1bGF0ZV9iYXVkX3JhdGUKKwkJICAgIChwX3ByaXYtPmJhdWQsIGRfZGV0YWlscy0+YmF1ZGNsaywgJm1zZy5iYXVkSGksCisJCSAgICAgJm1zZy5iYXVkTG8sICZtc2cucHJlc2NhbGVyLCBkZXZpY2VfcG9ydCkgPT0gS0VZU1BBTl9JTlZBTElEX0JBVURfUkFURSApIHsKKwkJCWRiZygiJXMgLSBJbnZhbGlkIGJhdWQgcmF0ZSAlZCByZXF1ZXN0ZWQsIHVzaW5nIDk2MDAuIiwgX19GVU5DVElPTl9fLAorCQkJICAgIHBfcHJpdi0+YmF1ZCk7CisJCQltc2cuYmF1ZExvID0gMDsKKwkJCW1zZy5iYXVkSGkgPSAxMjU7CS8qIFZhbHVlcyBmb3IgOTYwMCBiYXVkICovCisJCQltc2cucHJlc2NhbGVyID0gMTA7CisJCX0KKwkJLy9tc2cuc2V0UHJlc2NhbGVyID0gMHhmZjsKKwl9CisKKwltc2cubGNyID0gKHBfcHJpdi0+Y2ZsYWcgJiBDU1RPUEIpPyBTVE9QQklUU182NzhfMjogU1RPUEJJVFNfNTY3OF8xOworCXN3aXRjaCAocF9wcml2LT5jZmxhZyAmIENTSVpFKSB7CisJY2FzZSBDUzU6CisJCW1zZy5sY3IgfD0gVVNBX0RBVEFCSVRTXzU7CisJCWJyZWFrOworCWNhc2UgQ1M2OgorCQltc2cubGNyIHw9IFVTQV9EQVRBQklUU182OworCQlicmVhazsKKwljYXNlIENTNzoKKwkJbXNnLmxjciB8PSBVU0FfREFUQUJJVFNfNzsKKwkJYnJlYWs7CisJY2FzZSBDUzg6CisJCW1zZy5sY3IgfD0gVVNBX0RBVEFCSVRTXzg7CisJCWJyZWFrOworCX0KKwlpZiAocF9wcml2LT5jZmxhZyAmIFBBUkVOQikgeworCQkvKiBub3RlIFVTQV9QQVJJVFlfTk9ORSA9PSAwICovCisJCW1zZy5sY3IgfD0gKHBfcHJpdi0+Y2ZsYWcgJiBQQVJPREQpPworCQkJVVNBX1BBUklUWV9PREQ6IFVTQV9QQVJJVFlfRVZFTjsKKwl9CisJbXNnLnNldExjciA9IDB4ZmY7CisKKwltc2cuY3RzRmxvd0NvbnRyb2wgPSAocF9wcml2LT5mbG93X2NvbnRyb2wgPT0gZmxvd19jdHMpOworCW1zZy54b25GbG93Q29udHJvbCA9IDA7CisJbXNnLnNldEZsb3dDb250cm9sID0gMHhmZjsKKwkKKwltc2cuZm9yd2FyZGluZ0xlbmd0aCA9IDE2OworCW1zZy54b25DaGFyID0gMTc7CisJbXNnLnhvZmZDaGFyID0gMTk7CisKKwkvKiBPcGVuaW5nIHBvcnQgKi8gCisJaWYgKHJlc2V0X3BvcnQgPT0gMSkgeworCQltc2cuX3R4T24gPSAxOworCQltc2cuX3R4T2ZmID0gMDsKKwkJbXNnLnR4Rmx1c2ggPSAwOworCQltc2cudHhCcmVhayA9IDA7CisJCW1zZy5yeE9uID0gMTsKKwkJbXNnLnJ4T2ZmID0gMDsKKwkJbXNnLnJ4Rmx1c2ggPSAxOworCQltc2cucnhGb3J3YXJkID0gMDsKKwkJbXNnLnJldHVyblN0YXR1cyA9IDA7CisJCW1zZy5yZXNldERhdGFUb2dnbGUgPSAweGZmOworCQltc2cuZW5hYmxlUG9ydCA9IDE7CisJCW1zZy5kaXNhYmxlUG9ydCA9IDA7CisJfQorCS8qIENsb3NpbmcgcG9ydCAqLworCWVsc2UgaWYgKHJlc2V0X3BvcnQgPT0gMikgeworCQltc2cuX3R4T24gPSAwOworCQltc2cuX3R4T2ZmID0gMTsKKwkJbXNnLnR4Rmx1c2ggPSAwOworCQltc2cudHhCcmVhayA9IDA7CisJCW1zZy5yeE9uID0gMDsKKwkJbXNnLnJ4T2ZmID0gMTsKKwkJbXNnLnJ4Rmx1c2ggPSAxOworCQltc2cucnhGb3J3YXJkID0gMDsKKwkJbXNnLnJldHVyblN0YXR1cyA9IDA7CisJCW1zZy5yZXNldERhdGFUb2dnbGUgPSAwOworCQltc2cuZW5hYmxlUG9ydCA9IDA7CisJCW1zZy5kaXNhYmxlUG9ydCA9IDE7CisJfQorCS8qIFNlbmRpbmcgaW50ZXJtZWRpYXRlIGNvbmZpZ3MgKi8KKwllbHNlIHsKKwkJbXNnLl90eE9uID0gKCEgcF9wcml2LT5icmVha19vbik7CisJCW1zZy5fdHhPZmYgPSAwOworCQltc2cudHhGbHVzaCA9IDA7CisJCW1zZy50eEJyZWFrID0gKHBfcHJpdi0+YnJlYWtfb24pOworCQltc2cucnhPbiA9IDA7CisJCW1zZy5yeE9mZiA9IDA7CisJCW1zZy5yeEZsdXNoID0gMDsKKwkJbXNnLnJ4Rm9yd2FyZCA9IDA7CisJCW1zZy5yZXR1cm5TdGF0dXMgPSAwOworCQltc2cucmVzZXREYXRhVG9nZ2xlID0gMHgwOworCQltc2cuZW5hYmxlUG9ydCA9IDA7CisJCW1zZy5kaXNhYmxlUG9ydCA9IDA7CisJfQorCisJCS8qIERvIGhhbmRzaGFraW5nIG91dHB1dHMgKi8JCisJbXNnLnNldFJ0cyA9IDB4ZmY7CisJbXNnLnJ0cyA9IHBfcHJpdi0+cnRzX3N0YXRlOworCisJbXNnLnNldER0ciA9IDB4ZmY7CisJbXNnLmR0ciA9IHBfcHJpdi0+ZHRyX3N0YXRlOworCQkKKwlwX3ByaXYtPnJlc2VuZF9jb250ID0gMDsKKwltZW1jcHkgKHRoaXNfdXJiLT50cmFuc2Zlcl9idWZmZXIsICZtc2csIHNpemVvZihtc2cpKTsKKwkKKwkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgZGV2aWNlIG9uIGNvbnRyb2wgZW5kcG9pbnQgKi8KKwl0aGlzX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHNpemVvZihtc2cpOworCisJdGhpc191cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCWlmICgoZXJyID0gdXNiX3N1Ym1pdF91cmIodGhpc191cmIsIEdGUF9BVE9NSUMpKSAhPSAwKSB7CisJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihzZXR1cCkgZmFpbGVkICglZCkiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJfQorI2lmIDAKKwllbHNlIHsKKwkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKCVkKSBPSyAlZCBieXRlcyAoZW5kICVkKSIsIF9fRlVOQ1RJT05fXywKKwkJICAgIG91dGNvbnRfdXJiLCB0aGlzX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJICAgIHVzYl9waXBlZW5kcG9pbnQodGhpc191cmItPnBpcGUpKTsKKwl9CisjZW5kaWYKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQga2V5c3Bhbl91c2E5MF9zZW5kX3NldHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCisJCQkJICAgIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJICAgIGludCByZXNldF9wb3J0KQoreworCXN0cnVjdCBrZXlzcGFuX3VzYTkwX3BvcnRDb250cm9sTWVzc2FnZQltc2c7CQkKKwlzdHJ1Y3Qga2V5c3Bhbl9zZXJpYWxfcHJpdmF0ZSAJCSpzX3ByaXY7CisJc3RydWN0IGtleXNwYW5fcG9ydF9wcml2YXRlIAkJKnBfcHJpdjsKKwljb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscwkqZF9kZXRhaWxzOworCXN0cnVjdCB1cmIJCQkJKnRoaXNfdXJiOworCWludCAJCQkJCWVycjsKKwl1OAkJCQkJCXByZXNjYWxlcjsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXNfcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKwlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJZF9kZXRhaWxzID0gc19wcml2LT5kZXZpY2VfZGV0YWlsczsKKworCS8qIG9ubHkgZG8gc29tZXRoaW5nIGlmIHdlIGhhdmUgYSBidWxrIG91dCBlbmRwb2ludCAqLworCWlmICgodGhpc191cmIgPSBwX3ByaXYtPm91dGNvbnRfdXJiKSA9PSBOVUxMKSB7CisJCWRiZygiJXMgLSBvb3BzIG5vIHVyYi4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogU2F2ZSByZXNldCBwb3J0IHZhbCBmb3IgcmVzZW5kLgorCSAgIERvbid0IG92ZXJ3cml0ZSByZXNlbmQgZm9yIG9wZW4vY2xvc2UgY29uZGl0aW9uLiAqLworCWlmICgocmVzZXRfcG9ydCArIDEpID4gcF9wcml2LT5yZXNlbmRfY29udCkKKwkJcF9wcml2LT5yZXNlbmRfY29udCA9IHJlc2V0X3BvcnQgKyAxOworCWlmICh0aGlzX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQlkYmcgKCIlcyBhbHJlYWR5IHdyaXRpbmciLCBfX0ZVTkNUSU9OX18pOworCQltZGVsYXkoNSk7CisJCXJldHVybigtMSk7CisJfQorCisJbWVtc2V0KCZtc2csIDAsIHNpemVvZiAoc3RydWN0IGtleXNwYW5fdXNhOTBfcG9ydENvbnRyb2xNZXNzYWdlKSk7CisKKwkvKiBPbmx5IHNldCBiYXVkIHJhdGUgaWYgaXQncyBjaGFuZ2VkICovCQorCWlmIChwX3ByaXYtPm9sZF9iYXVkICE9IHBfcHJpdi0+YmF1ZCkgeworCQlwX3ByaXYtPm9sZF9iYXVkID0gcF9wcml2LT5iYXVkOworCQltc2cuc2V0Q2xvY2tpbmcgPSAweDAxOworCQlpZiAoZF9kZXRhaWxzLT5jYWxjdWxhdGVfYmF1ZF9yYXRlCisJCSAgICAocF9wcml2LT5iYXVkLCBkX2RldGFpbHMtPmJhdWRjbGssICZtc2cuYmF1ZEhpLAorCQkgICAgICZtc2cuYmF1ZExvLCAmcHJlc2NhbGVyLCAwKSA9PSBLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFICkgeworCQkJZGJnKCIlcyAtIEludmFsaWQgYmF1ZCByYXRlICVkIHJlcXVlc3RlZCwgdXNpbmcgOTYwMC4iLCBfX0ZVTkNUSU9OX18sCisJCQkgICAgcF9wcml2LT5iYXVkKTsKKwkJCXBfcHJpdi0+YmF1ZCA9IDk2MDA7CisJCQlkX2RldGFpbHMtPmNhbGN1bGF0ZV9iYXVkX3JhdGUgKHBfcHJpdi0+YmF1ZCwgZF9kZXRhaWxzLT5iYXVkY2xrLCAKKwkJCQkmbXNnLmJhdWRIaSwgJm1zZy5iYXVkTG8sICZwcmVzY2FsZXIsIDApOworCQl9CisJCW1zZy5zZXRSeE1vZGUgPSAxOworCQltc2cuc2V0VHhNb2RlID0gMTsKKwl9CisKKwkvKiBtb2RlcyBtdXN0IGFsd2F5cyBiZSBjb3JyZWN0bHkgc3BlY2lmaWVkICovCisJaWYgKHBfcHJpdi0+YmF1ZCA+IDU3NjAwKQorCXsKKwkJbXNnLnJ4TW9kZSA9IFJYTU9ERV9ETUE7CisJCW1zZy50eE1vZGUgPSBUWE1PREVfRE1BOworCX0KKwllbHNlCisJeworCQltc2cucnhNb2RlID0gUlhNT0RFX0JZSEFORDsKKwkJbXNnLnR4TW9kZSA9IFRYTU9ERV9CWUhBTkQ7CisJfQorCisJbXNnLmxjciA9IChwX3ByaXYtPmNmbGFnICYgQ1NUT1BCKT8gU1RPUEJJVFNfNjc4XzI6IFNUT1BCSVRTXzU2NzhfMTsKKwlzd2l0Y2ggKHBfcHJpdi0+Y2ZsYWcgJiBDU0laRSkgeworCWNhc2UgQ1M1OgorCQltc2cubGNyIHw9IFVTQV9EQVRBQklUU181OworCQlicmVhazsKKwljYXNlIENTNjoKKwkJbXNnLmxjciB8PSBVU0FfREFUQUJJVFNfNjsKKwkJYnJlYWs7CisJY2FzZSBDUzc6CisJCW1zZy5sY3IgfD0gVVNBX0RBVEFCSVRTXzc7CisJCWJyZWFrOworCWNhc2UgQ1M4OgorCQltc2cubGNyIHw9IFVTQV9EQVRBQklUU184OworCQlicmVhazsKKwl9CisJaWYgKHBfcHJpdi0+Y2ZsYWcgJiBQQVJFTkIpIHsKKwkJLyogbm90ZSBVU0FfUEFSSVRZX05PTkUgPT0gMCAqLworCQltc2cubGNyIHw9IChwX3ByaXYtPmNmbGFnICYgUEFST0REKT8KKwkJCVVTQV9QQVJJVFlfT0REOiBVU0FfUEFSSVRZX0VWRU47CisJfQorCWlmIChwX3ByaXYtPm9sZF9jZmxhZyAhPSBwX3ByaXYtPmNmbGFnKSB7CisJCXBfcHJpdi0+b2xkX2NmbGFnID0gcF9wcml2LT5jZmxhZzsKKwkJbXNnLnNldExjciA9IDB4MDE7CisJfQorCisJaWYgKHBfcHJpdi0+Zmxvd19jb250cm9sID09IGZsb3dfY3RzKQorCQltc2cudHhGbG93Q29udHJvbCA9IFRYRkxPV19DVFM7CisJbXNnLnNldFR4Rmxvd0NvbnRyb2wgPSAweDAxOworCW1zZy5zZXRSeEZsb3dDb250cm9sID0gMHgwMTsKKwkKKwltc2cucnhGb3J3YXJkaW5nTGVuZ3RoID0gMTY7CisJbXNnLnJ4Rm9yd2FyZGluZ1RpbWVvdXQgPSAxNjsJCisJbXNnLnR4QWNrU2V0dGluZyA9IDA7CisJbXNnLnhvbkNoYXIgPSAxNzsKKwltc2cueG9mZkNoYXIgPSAxOTsKKworCS8qIE9wZW5pbmcgcG9ydCAqLyAKKwlpZiAocmVzZXRfcG9ydCA9PSAxKSB7CisJCW1zZy5wb3J0RW5hYmxlZCA9IDE7CisJCW1zZy5yeEZsdXNoID0gMTsKKwkJbXNnLnR4QnJlYWsgPSAocF9wcml2LT5icmVha19vbik7CisJfQorCS8qIENsb3NpbmcgcG9ydCAqLworCWVsc2UgaWYgKHJlc2V0X3BvcnQgPT0gMikgeworCQltc2cucG9ydEVuYWJsZWQgPSAwOworCX0KKwkvKiBTZW5kaW5nIGludGVybWVkaWF0ZSBjb25maWdzICovCisJZWxzZSB7CisJCWlmIChwb3J0LT5vcGVuX2NvdW50KQorCQkJbXNnLnBvcnRFbmFibGVkID0gMTsKKwkJbXNnLnR4QnJlYWsgPSAocF9wcml2LT5icmVha19vbik7CisJfQorCisJLyogRG8gaGFuZHNoYWtpbmcgb3V0cHV0cyAqLwkKKwltc2cuc2V0UnRzID0gMHgwMTsKKwltc2cucnRzID0gcF9wcml2LT5ydHNfc3RhdGU7CisKKwltc2cuc2V0RHRyID0gMHgwMTsKKwltc2cuZHRyID0gcF9wcml2LT5kdHJfc3RhdGU7CisJCQorCXBfcHJpdi0+cmVzZW5kX2NvbnQgPSAwOworCW1lbWNweSAodGhpc191cmItPnRyYW5zZmVyX2J1ZmZlciwgJm1zZywgc2l6ZW9mKG1zZykpOworCQorCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBkZXZpY2Ugb24gY29udHJvbCBlbmRwb2ludCAqLworCXRoaXNfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gc2l6ZW9mKG1zZyk7CisKKwl0aGlzX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYih0aGlzX3VyYiwgR0ZQX0FUT01JQykpICE9IDApIHsKKwkJZGJnKCIlcyAtIHVzYl9zdWJtaXRfdXJiKHNldHVwKSBmYWlsZWQgKCVkKSIsIF9fRlVOQ1RJT05fXywgZXJyKTsKKwl9CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHZvaWQga2V5c3Bhbl9zZW5kX3NldHVwKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCByZXNldF9wb3J0KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IGtleXNwYW5fc2VyaWFsX3ByaXZhdGUgKnNfcHJpdjsKKwljb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscyAqZF9kZXRhaWxzOworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJc19wcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCWRfZGV0YWlscyA9IHNfcHJpdi0+ZGV2aWNlX2RldGFpbHM7CisKKwlzd2l0Y2ggKGRfZGV0YWlscy0+bXNnX2Zvcm1hdCkgeworCWNhc2UgbXNnX3VzYTI2OgorCQlrZXlzcGFuX3VzYTI2X3NlbmRfc2V0dXAoc2VyaWFsLCBwb3J0LCByZXNldF9wb3J0KTsKKwkJYnJlYWs7CisJY2FzZSBtc2dfdXNhMjg6CisJCWtleXNwYW5fdXNhMjhfc2VuZF9zZXR1cChzZXJpYWwsIHBvcnQsIHJlc2V0X3BvcnQpOworCQlicmVhazsKKwljYXNlIG1zZ191c2E0OToKKwkJa2V5c3Bhbl91c2E0OV9zZW5kX3NldHVwKHNlcmlhbCwgcG9ydCwgcmVzZXRfcG9ydCk7CisJCWJyZWFrOworCWNhc2UgbXNnX3VzYTkwOgorCQlrZXlzcGFuX3VzYTkwX3NlbmRfc2V0dXAoc2VyaWFsLCBwb3J0LCByZXNldF9wb3J0KTsKKwkJYnJlYWs7CisJfQorfQorCisKKy8qIEdldHMgY2FsbGVkIGJ5IHRoZSAicmVhbCIgZHJpdmVyIChpZSBvbmNlIGZpcm13YXJlIGlzIGxvYWRlZAorICAgYW5kIHJlbnVtZXJhdGlvbiBoYXMgdGFrZW4gcGxhY2UuICovCitzdGF0aWMgaW50IGtleXNwYW5fc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQJCQkJaSwgZXJyOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJCSpwb3J0OworCXN0cnVjdCBrZXlzcGFuX3NlcmlhbF9wcml2YXRlIAkqc19wcml2OworCXN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZQkqcF9wcml2OworCWNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzCSpkX2RldGFpbHM7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWZvciAoaSA9IDA7IChkX2RldGFpbHMgPSBrZXlzcGFuX2RldmljZXNbaV0pICE9IE5VTEw7ICsraSkKKwkJaWYgKGRfZGV0YWlscy0+cHJvZHVjdF9pZCA9PSBsZTE2X3RvX2NwdShzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKQorCQkJYnJlYWs7CisJaWYgKGRfZGV0YWlscyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsICIlcyAtIHVua25vd24gcHJvZHVjdCBpZCAleFxuIiwgX19GVU5DVElPTl9fLCBsZTE2X3RvX2NwdShzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogU2V0dXAgcHJpdmF0ZSBkYXRhIGZvciBzZXJpYWwgZHJpdmVyICovCisJc19wcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGtleXNwYW5fc2VyaWFsX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNfcHJpdikgeworCQlkYmcoIiVzIC0ga21hbGxvYyBmb3Iga2V5c3Bhbl9zZXJpYWxfcHJpdmF0ZSBmYWlsZWQuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChzX3ByaXYsIDAsIHNpemVvZihzdHJ1Y3Qga2V5c3Bhbl9zZXJpYWxfcHJpdmF0ZSkpOworCisJc19wcml2LT5kZXZpY2VfZGV0YWlscyA9IGRfZGV0YWlsczsKKwl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgc19wcml2KTsKKworCS8qIE5vdyBzZXR1cCBwZXIgcG9ydCBwcml2YXRlIGRhdGEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7IGkrKykgeworCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQlwX3ByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwX3ByaXYpIHsKKwkJCWRiZygiJXMgLSBrbWFsbG9jIGZvciBrZXlzcGFuX3BvcnRfcHJpdmF0ZSAoJWQpIGZhaWxlZCEuIiwgX19GVU5DVElPTl9fLCBpKTsKKwkJCXJldHVybiAoMSk7CisJCX0KKwkJbWVtc2V0KHBfcHJpdiwgMCwgc2l6ZW9mKHN0cnVjdCBrZXlzcGFuX3BvcnRfcHJpdmF0ZSkpOworCQlwX3ByaXYtPmRldmljZV9kZXRhaWxzID0gZF9kZXRhaWxzOworCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgcF9wcml2KTsKKwl9CisKKwlrZXlzcGFuX3NldHVwX3VyYnMoc2VyaWFsKTsKKworCXNfcHJpdi0+aW5zdGF0X3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJaWYgKChlcnIgPSB1c2Jfc3VibWl0X3VyYihzX3ByaXYtPmluc3RhdF91cmIsIEdGUF9LRVJORUwpKSAhPSAwKSB7CisJCWRiZygiJXMgLSBzdWJtaXQgaW5zdGF0IHVyYiBmYWlsZWQgJWQiLCBfX0ZVTkNUSU9OX18sIGVycik7CisJfQorCQkJCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHZvaWQga2V5c3Bhbl9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQJCQkJaSwgajsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CQkqcG9ydDsKKwlzdHJ1Y3Qga2V5c3Bhbl9zZXJpYWxfcHJpdmF0ZSAJKnNfcHJpdjsKKwlzdHJ1Y3Qga2V5c3Bhbl9wb3J0X3ByaXZhdGUJKnBfcHJpdjsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJc19wcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCisJLyogU3RvcCByZWFkaW5nL3dyaXRpbmcgdXJicyAqLworCXN0b3BfdXJiKHNfcHJpdi0+aW5zdGF0X3VyYik7CisJc3RvcF91cmIoc19wcml2LT5nbG9jb250X3VyYik7CisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQlzdG9wX3VyYihwX3ByaXYtPmluYWNrX3VyYik7CisJCXN0b3BfdXJiKHBfcHJpdi0+b3V0Y29udF91cmIpOworCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7CisJCQlzdG9wX3VyYihwX3ByaXYtPmluX3VyYnNbal0pOworCQkJc3RvcF91cmIocF9wcml2LT5vdXRfdXJic1tqXSk7CisJCX0KKwl9CisKKwkvKiBOb3cgZnJlZSB0aGVtICovCisJaWYgKHNfcHJpdi0+aW5zdGF0X3VyYikKKwkJdXNiX2ZyZWVfdXJiKHNfcHJpdi0+aW5zdGF0X3VyYik7CisJaWYgKHNfcHJpdi0+Z2xvY29udF91cmIpCisJCXVzYl9mcmVlX3VyYihzX3ByaXYtPmdsb2NvbnRfdXJiKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQlwX3ByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJCWlmIChwX3ByaXYtPmluYWNrX3VyYikKKwkJCXVzYl9mcmVlX3VyYihwX3ByaXYtPmluYWNrX3VyYik7CisJCWlmIChwX3ByaXYtPm91dGNvbnRfdXJiKQorCQkJdXNiX2ZyZWVfdXJiKHBfcHJpdi0+b3V0Y29udF91cmIpOworCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7CisJCQlpZiAocF9wcml2LT5pbl91cmJzW2pdKQorCQkJCXVzYl9mcmVlX3VyYihwX3ByaXYtPmluX3VyYnNbal0pOworCQkJaWYgKHBfcHJpdi0+b3V0X3VyYnNbal0pCisJCQkJdXNiX2ZyZWVfdXJiKHBfcHJpdi0+b3V0X3VyYnNbal0pOworCQl9CisJfQorCisJLyogIGRiZygiRnJlZWluZyBzZXJpYWwtPnByaXZhdGUuIik7ICovCisJa2ZyZWUoc19wcml2KTsKKworCS8qICBkYmcoIkZyZWVpbmcgcG9ydC0+cHJpdmF0ZS4iKTsgKi8KKwkvKiBOb3cgZnJlZSBwZXIgcG9ydCBwcml2YXRlIGRhdGEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7IGkrKykgeworCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQlrZnJlZSh1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCkpOworCX0KK30KKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWI0NWI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaApAQCAtMCwwICsxLDY2MCBAQAorLyoKKyAgS2V5c3BhbiBVU0IgdG8gU2VyaWFsIENvbnZlcnRlciBkcml2ZXIKKyAKKyAgKEMpIENvcHlyaWdodCAoQykgMjAwMC0yMDAxCisgICAgICBIdWdoIEJsZW1pbmdzIDxodWdoQGJsZW1pbmdzLm9yZz4KKyAgIAorICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIFNlZSBodHRwOi8vbWlzYy5udS9odWdoL2tleXNwYW4uaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgCisgIENvZGUgaW4gdGhpcyBkcml2ZXIgaW5zcGlyZWQgYnkgYW5kIGluIGEgbnVtYmVyIG9mIHBsYWNlcyB0YWtlbgorICBmcm9tIEJyaWFuIFdhcm5lcidzIG9yaWdpbmFsIEtleXNwYW4tUERBIGRyaXZlci4KKworICBUaGlzIGRyaXZlciBoYXMgYmVlbiBwdXQgdG9nZXRoZXIgd2l0aCB0aGUgc3VwcG9ydCBvZiBJbm5vc3lzLCBJbmMuCisgIGFuZCBLZXlzcGFuLCBJbmMgdGhlIG1hbnVmYWN0dXJlcnMgb2YgdGhlIEtleXNwYW4gVVNCLXNlcmlhbCBwcm9kdWN0cy4KKyAgVGhhbmtzIEd1eXMgOikKKyAgCisgIFRoYW5rcyB0byBQYXVsdXMgZm9yIG1pc2NlbGxhbmVvdXMgdGlkeSB1cHMsIHNvbWUgbGFyZ2lzaCBjaHVua3MKKyAgb2YgbXVjaCBuaWNlciBhbmQvb3IgY29tcGxldGVseSBuZXcgY29kZSBhbmQgKHBlcmhhcHMgbW9zdCB1bmlxdWVseSkKKyAgaGF2aW5nIHRoZSBwYXRpZW5jZSB0byBzaXQgZG93biBhbmQgZXhwbGFpbiB3aHkgYW5kIHdoZXJlIGhlJ2QgY2hhbmdlZAorICBzdHVmZi4KKworICBUaXAgJ28gdGhlIGhhdCB0byBJQk0gKGFuZCBwcmV2aW91c2x5IExpbnV4Y2FyZSA6KSBmb3Igc3VwcG9ydGluZyAKKyAgc3RhZmYgaW4gdGhlaXIgd29yayBvbiBvcGVuIHNvdXJjZSBwcm9qZWN0cy4KKyAgCisgIFNlZSBrZXlzcGFuLmMgZm9yIHVwZGF0ZSBoaXN0b3J5LgorCisqLworCisjaWZuZGVmIF9fTElOVVhfVVNCX1NFUklBTF9LRVlTUEFOX0gKKyNkZWZpbmUgX19MSU5VWF9VU0JfU0VSSUFMX0tFWVNQQU5fSAorCisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIEtleXNwYW4gc2VyaWFsIGNvbnZlcnRlciAqLworc3RhdGljIGludCAga2V5c3Bhbl9vcGVuCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIGtleXNwYW5fY2xvc2UJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCAga2V5c3Bhbl9zdGFydHVwCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgdm9pZCBrZXlzcGFuX3NodXRkb3duCQkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgdm9pZCBrZXlzcGFuX3J4X3Rocm90dGxlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBrZXlzcGFuX3J4X3VudGhyb3R0bGUJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCAga2V5c3Bhbl93cml0ZV9yb29tCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CisKK3N0YXRpYyBpbnQgIGtleXNwYW5fd3JpdGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJCQkgaW50IGNvdW50KTsKKworc3RhdGljIHZvaWQga2V5c3Bhbl9zZW5kX3NldHVwCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJIGludCByZXNldF9wb3J0KTsKKworCitzdGF0aWMgaW50ICBrZXlzcGFuX2NoYXJzX2luX2J1ZmZlciAJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCAga2V5c3Bhbl9pb2N0bAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJIHVuc2lnbmVkIGludCBjbWQsCisJCQkJCSB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgdm9pZCBrZXlzcGFuX3NldF90ZXJtaW9zCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJIHN0cnVjdCB0ZXJtaW9zICpvbGQpOworc3RhdGljIHZvaWQga2V5c3Bhbl9icmVha19jdGwJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgaW50IGJyZWFrX3N0YXRlKTsKK3N0YXRpYyBpbnQgIGtleXNwYW5fdGlvY21nZXQJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCAga2V5c3Bhbl90aW9jbXNldAkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IHNldCwKKwkJCQkJIHVuc2lnbmVkIGludCBjbGVhcik7CitzdGF0aWMgaW50ICBrZXlzcGFuX2Zha2Vfc3RhcnR1cAkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CisKK3N0YXRpYyBpbnQgIGtleXNwYW5fdXNhMTlfY2FsY19iYXVkCSh1MzIgYmF1ZF9yYXRlLCB1MzIgYmF1ZGNsaywgCisJCQkJCSB1OCAqcmF0ZV9oaSwgdTggKnJhdGVfbG93LAorCQkJCQkgdTggKnByZXNjYWxlciwgaW50IHBvcnRudW0pOworCitzdGF0aWMgaW50ICBrZXlzcGFuX3VzYTE5d19jYWxjX2JhdWQJKHUzMiBiYXVkX3JhdGUsIHUzMiBiYXVkY2xrLAorCQkJCQkgdTggKnJhdGVfaGksIHU4ICpyYXRlX2xvdywKKwkJCQkJIHU4ICpwcmVzY2FsZXIsIGludCBwb3J0bnVtKTsKKworc3RhdGljIGludCAga2V5c3Bhbl91c2EyOF9jYWxjX2JhdWQJKHUzMiBiYXVkX3JhdGUsIHUzMiBiYXVkY2xrLAorCQkJCQkgdTggKnJhdGVfaGksIHU4ICpyYXRlX2xvdywKKwkJCQkJIHU4ICpwcmVzY2FsZXIsIGludCBwb3J0bnVtKTsKKworc3RhdGljIGludCAga2V5c3Bhbl91c2ExOWhzX2NhbGNfYmF1ZAkodTMyIGJhdWRfcmF0ZSwgdTMyIGJhdWRjbGssCisJCQkJCSB1OCAqcmF0ZV9oaSwgdTggKnJhdGVfbG93LAorCQkJCQkgdTggKnByZXNjYWxlciwgaW50IHBvcnRudW0pOworCitzdGF0aWMgaW50ICBrZXlzcGFuX3VzYTI4X3NlbmRfc2V0dXAJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCisJCQkJCSBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgaW50IHJlc2V0X3BvcnQpOworc3RhdGljIGludCAga2V5c3Bhbl91c2EyNl9zZW5kX3NldHVwCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCSAgICAgICAJCQkJIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSBpbnQgcmVzZXRfcG9ydCk7CitzdGF0aWMgaW50ICBrZXlzcGFuX3VzYTQ5X3NlbmRfc2V0dXAJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCisJCQkJCSBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgaW50IHJlc2V0X3BvcnQpOworCitzdGF0aWMgaW50ICBrZXlzcGFuX3VzYTkwX3NlbmRfc2V0dXAJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCisJCQkJCSBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgaW50IHJlc2V0X3BvcnQpOworCisvKiBTdHJ1Y3QgdXNlZCBmb3IgZmlybXdhcmUgLSBpbmNyZWFzZWQgc2l6ZSBvZiBkYXRhIHNlY3Rpb24KKyAgIHRvIGFsbG93IEtleXNwYW4ncyAnQycgZmlybXdhcmUgc3RydWN0IHRvIGJlIHVzZWQgdW5tb2RpZmllZCAqLworc3RydWN0IGV6dXNiX2hleF9yZWNvcmQgeworCV9fdTE2IGFkZHJlc3M7CisJX191OCBkYXRhX3NpemU7CisJX191OCBkYXRhWzY0XTsKK307CisKKy8qIENvbmRpdGlvbmFsbHkgaW5jbHVkZSBmaXJtd2FyZSBpbWFnZXMsIGlmIHRoZXkgYXJlbid0CisgICBpbmNsdWRlZCBjcmVhdGUgYSBudWxsIHBvaW50ZXIgaW5zdGVhZC4gIEN1cnJlbnQgCisgICBmaXJtd2FyZSBpbWFnZXMgYXJlbid0IG9wdGltaXNlZCB0byByZW1vdmUgZHVwbGljYXRlCisgICBhZGRyZXNzZXMgaW4gdGhlIGltYWdlIGl0c2VsZi4gKi8KKyNpZmRlZiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4CisJI2luY2x1ZGUgImtleXNwYW5fdXNhMjhfZncuaCIKKyNlbHNlCisJc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkICprZXlzcGFuX3VzYTI4X2Zpcm13YXJlID0gTlVMTDsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOFgKKwkjaW5jbHVkZSAia2V5c3Bhbl91c2EyOHhfZncuaCIKKyNlbHNlCisJc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkICprZXlzcGFuX3VzYTI4eF9maXJtd2FyZSA9IE5VTEw7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMjhYQQorCSNpbmNsdWRlICJrZXlzcGFuX3VzYTI4eGFfZncuaCIKKyNlbHNlCisJc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkICprZXlzcGFuX3VzYTI4eGFfZmlybXdhcmUgPSBOVUxMOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WEIKKwkjaW5jbHVkZSAia2V5c3Bhbl91c2EyOHhiX2Z3LmgiCisjZWxzZQorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCAqa2V5c3Bhbl91c2EyOHhiX2Zpcm13YXJlID0gTlVMTDsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOQorCSNpbmNsdWRlICJrZXlzcGFuX3VzYTE5X2Z3LmgiCisjZWxzZQorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCAqa2V5c3Bhbl91c2ExOV9maXJtd2FyZSA9IE5VTEw7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlRSQorCSNpbmNsdWRlICJrZXlzcGFuX3VzYTE5cWlfZncuaCIKKyNlbHNlCisJc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkICprZXlzcGFuX3VzYTE5cWlfZmlybXdhcmUgPSBOVUxMOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX01QUgorICAgICAgICAjaW5jbHVkZSAia2V5c3Bhbl9tcHJfZncuaCIKKyNlbHNlCisJc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkICprZXlzcGFuX21wcl9maXJtd2FyZSA9IE5VTEw7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlRVworCSNpbmNsdWRlICJrZXlzcGFuX3VzYTE5cXdfZncuaCIKKyNlbHNlCisJc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkICprZXlzcGFuX3VzYTE5cXdfZmlybXdhcmUgPSBOVUxMOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE4WAorCSNpbmNsdWRlICJrZXlzcGFuX3VzYTE4eF9mdy5oIgorI2Vsc2UKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGV6dXNiX2hleF9yZWNvcmQgKmtleXNwYW5fdXNhMTh4X2Zpcm13YXJlID0gTlVMTDsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVcKKwkjaW5jbHVkZSAia2V5c3Bhbl91c2ExOXdfZncuaCIKKyNlbHNlCisJc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkICprZXlzcGFuX3VzYTE5d19maXJtd2FyZSA9IE5VTEw7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBNDlXCisJI2luY2x1ZGUgImtleXNwYW5fdXNhNDl3X2Z3LmgiCisjZWxzZQorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCAqa2V5c3Bhbl91c2E0OXdfZmlybXdhcmUgPSBOVUxMOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTQ5V0xDCisgICAgICAgICNpbmNsdWRlICJrZXlzcGFuX3VzYTQ5d2xjX2Z3LmgiCisjZWxzZQorCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCAqa2V5c3Bhbl91c2E0OXdsY19maXJtd2FyZSA9IE5VTEw7CisjZW5kaWYKKworLyogVmFsdWVzIHVzZWQgZm9yIGJhdWQgcmF0ZSBjYWxjdWxhdGlvbiAtIGRldmljZSBzcGVjaWZpYyAqLworI2RlZmluZQlLRVlTUEFOX0lOVkFMSURfQkFVRF9SQVRFCQkoLTEpCisjZGVmaW5lCUtFWVNQQU5fQkFVRF9SQVRFX09LCQkJKDApCisjZGVmaW5lCUtFWVNQQU5fVVNBMThYX0JBVURDTEsJCQkoMTIwMDAwMDBMKQkvKiBhIGd1ZXNzICovCisjZGVmaW5lCUtFWVNQQU5fVVNBMTlfQkFVRENMSwkJCSgxMjAwMDAwMEwpCisjZGVmaW5lCUtFWVNQQU5fVVNBMTlXX0JBVURDTEsJCQkoMjQwMDAwMDBMKQorI2RlZmluZQlLRVlTUEFOX1VTQTE5SFNfQkFVRENMSwkJCSgxNDc2OTIzMUwpCisjZGVmaW5lCUtFWVNQQU5fVVNBMjhfQkFVRENMSwkJCSgxODQzMjAwTCkKKyNkZWZpbmUJS0VZU1BBTl9VU0EyOFhfQkFVRENMSwkJCSgxMjAwMDAwMEwpCisjZGVmaW5lCUtFWVNQQU5fVVNBNDlXX0JBVURDTEsJCQkoNDgwMDAwMDBMKQorCisvKiBTb21lIGNvbnN0YW50cyB1c2VkIHRvIGNoYXJhY3RlcmlzZSBlYWNoIGRldmljZS4gICovCisjZGVmaW5lCQlLRVlTUEFOX01BWF9OVU1fUE9SVFMJCSg0KQorI2RlZmluZQkJS0VZU1BBTl9NQVhfRkxJUFMJCSgyKQorCisvKiBEZXZpY2UgaW5mbyBmb3IgdGhlIEtleXNwYW4gc2VyaWFsIGNvbnZlcnRlciwgdXNlZAorICAgYnkgdGhlIG92ZXJhbGwgdXNiLXNlcmlhbCBwcm9iZSBmdW5jdGlvbiAqLworI2RlZmluZSBLRVlTUEFOX1ZFTkRPUl9JRAkJCSgweDA2Y2QpCisKKy8qIFByb2R1Y3QgSURzIGZvciB0aGUgcHJvZHVjdHMgc3VwcG9ydGVkLCBwcmUtcmVudW1lcmF0aW9uICovCisjZGVmaW5lCWtleXNwYW5fdXNhMTh4X3ByZV9wcm9kdWN0X2lkCQkweDAxMDUKKyNkZWZpbmUJa2V5c3Bhbl91c2ExOV9wcmVfcHJvZHVjdF9pZAkJMHgwMTAzCisjZGVmaW5lCWtleXNwYW5fdXNhMTlxaV9wcmVfcHJvZHVjdF9pZAkJMHgwMTBiCisjZGVmaW5lCWtleXNwYW5fbXByX3ByZV9wcm9kdWN0X2lkCQkweDAxMWIKKyNkZWZpbmUJa2V5c3Bhbl91c2ExOXF3X3ByZV9wcm9kdWN0X2lkCQkweDAxMTgKKyNkZWZpbmUJa2V5c3Bhbl91c2ExOXdfcHJlX3Byb2R1Y3RfaWQJCTB4MDEwNgorI2RlZmluZQlrZXlzcGFuX3VzYTI4X3ByZV9wcm9kdWN0X2lkCQkweDAxMDEKKyNkZWZpbmUJa2V5c3Bhbl91c2EyOHhfcHJlX3Byb2R1Y3RfaWQJCTB4MDEwMgorI2RlZmluZQlrZXlzcGFuX3VzYTI4eGFfcHJlX3Byb2R1Y3RfaWQJCTB4MDExNAorI2RlZmluZQlrZXlzcGFuX3VzYTI4eGJfcHJlX3Byb2R1Y3RfaWQJCTB4MDExMworI2RlZmluZQlrZXlzcGFuX3VzYTQ5d19wcmVfcHJvZHVjdF9pZAkJMHgwMTA5CisjZGVmaW5lCWtleXNwYW5fdXNhNDl3bGNfcHJlX3Byb2R1Y3RfaWQJCTB4MDExYQorCisvKiBQcm9kdWN0IElEcyBwb3N0LXJlbnVtZXJhdGlvbi4gIE5vdGUgdGhhdCB0aGUgMjh4IGFuZCAyOHhiCisgICBoYXZlIHRoZSBzYW1lIGlkJ3MgcG9zdC1yZW51bWVyYXRpb24gYnV0IGJlaGF2ZSBpZGVudGljYWxseQorICAgc28gaXQncyBub3QgYW4gaXNzdWUuICovCisjZGVmaW5lCWtleXNwYW5fdXNhMTh4X3Byb2R1Y3RfaWQJCTB4MDExMgorI2RlZmluZQlrZXlzcGFuX3VzYTE5X3Byb2R1Y3RfaWQJCTB4MDEwNworI2RlZmluZQlrZXlzcGFuX3VzYTE5cWlfcHJvZHVjdF9pZAkJMHgwMTBjCisjZGVmaW5lCWtleXNwYW5fdXNhMTloc19wcm9kdWN0X2lkCQkweDAxMjEKKyNkZWZpbmUJa2V5c3Bhbl9tcHJfcHJvZHVjdF9pZAkJCTB4MDExYworI2RlZmluZQlrZXlzcGFuX3VzYTE5cXdfcHJvZHVjdF9pZAkJMHgwMTE5CisjZGVmaW5lCWtleXNwYW5fdXNhMTl3X3Byb2R1Y3RfaWQJCTB4MDEwOAorI2RlZmluZQlrZXlzcGFuX3VzYTI4X3Byb2R1Y3RfaWQJCTB4MDEwZgorI2RlZmluZQlrZXlzcGFuX3VzYTI4eF9wcm9kdWN0X2lkCQkweDAxMTAKKyNkZWZpbmUJa2V5c3Bhbl91c2EyOHhhX3Byb2R1Y3RfaWQJCTB4MDExNQorI2RlZmluZQlrZXlzcGFuX3VzYTI4eGJfcHJvZHVjdF9pZAkJMHgwMTEwCisjZGVmaW5lCWtleXNwYW5fdXNhNDl3X3Byb2R1Y3RfaWQJCTB4MDEwYQorI2RlZmluZQlrZXlzcGFuX3VzYTQ5d2xjX3Byb2R1Y3RfaWQJCTB4MDEyYQorCisKK3N0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzIHsKKwkvKiBwcm9kdWN0IElEIHZhbHVlICovCisJaW50CXByb2R1Y3RfaWQ7CisKKwllbnVtCXttc2dfdXNhMjYsIG1zZ191c2EyOCwgbXNnX3VzYTQ5LCBtc2dfdXNhOTB9IG1zZ19mb3JtYXQ7CisKKwkJLyogTnVtYmVyIG9mIHBoeXNpY2FsIHBvcnRzICovCisJaW50CW51bV9wb3J0czsKKworCQkvKiAxIGlmIGVuZHBvaW50IGZsaXBwaW5nIHVzZWQgb24gaW5wdXQsIDAgaWYgbm90ICovCisJaW50CWluZGF0X2VuZHBfZmxpcDsKKworCQkvKiAxIGlmIGVuZHBvaW50IGZsaXBwaW5nIHVzZWQgb24gb3V0cHV0LCAwIGlmIG5vdCAqLworCWludCAJb3V0ZGF0X2VuZHBfZmxpcDsKKworCQkvKiBUYWJsZSBtYXBwaW5nIGlucHV0IGRhdGEgZW5kcG9pbnQgSURzIHRvIHBoeXNpY2FsCisJCSAgIHBvcnQgbnVtYmVyIGFuZCBmbGlwIGlmIHVzZWQgKi8KKwlpbnQJaW5kYXRfZW5kcG9pbnRzW0tFWVNQQU5fTUFYX05VTV9QT1JUU107CisKKwkJLyogU2FtZSBmb3Igb3V0cHV0IGVuZHBvaW50cyAqLworCWludAlvdXRkYXRfZW5kcG9pbnRzW0tFWVNQQU5fTUFYX05VTV9QT1JUU107CisKKwkJLyogSW5wdXQgYWNrbm93bGVkZ2UgZW5kcG9pbnRzICovCisJaW50CWluYWNrX2VuZHBvaW50c1tLRVlTUEFOX01BWF9OVU1fUE9SVFNdOworCisJCS8qIE91dHB1dCBjb250cm9sIGVuZHBvaW50cyAqLworCWludAlvdXRjb250X2VuZHBvaW50c1tLRVlTUEFOX01BWF9OVU1fUE9SVFNdOworCisJCS8qIEVuZHBvaW50IHVzZWQgZm9yIGlucHV0IHN0YXR1cyAqLworCWludAlpbnN0YXRfZW5kcG9pbnQ7CisKKwkJLyogRW5kcG9pbnQgdXNlZCBmb3IgZ2xvYmFsIGNvbnRyb2wgZnVuY3Rpb25zICovCisJaW50CWdsb2NvbnRfZW5kcG9pbnQ7CisKKwlpbnQJKCpjYWxjdWxhdGVfYmF1ZF9yYXRlKSAodTMyIGJhdWRfcmF0ZSwgdTMyIGJhdWRjbGssCisJCQl1OCAqcmF0ZV9oaSwgdTggKnJhdGVfbG93LCB1OCAqcHJlc2NhbGVyLCBpbnQgcG9ydG51bSk7CisJdTMyCWJhdWRjbGs7Cit9OyAKKworLyogTm93IGZvciBlYWNoIGRldmljZSB0eXBlIHdlIHNldHVwIHRoZSBkZXZpY2UgZGV0YWlsCisgICBzdHJ1Y3R1cmUgd2l0aCB0aGUgYXBwcm9wcmlhdGUgaW5mb3JtYXRpb24gKHByb3ZpZGVkCisgICBpbiBLZXlzcGFuJ3MgZG9jdW1lbnRhdGlvbikgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzIHVzYTE4eF9kZXZpY2VfZGV0YWlscyA9IHsKKwkucHJvZHVjdF9pZAkJPSBrZXlzcGFuX3VzYTE4eF9wcm9kdWN0X2lkLAorCS5tc2dfZm9ybWF0CQk9IG1zZ191c2EyNiwKKwkubnVtX3BvcnRzCQk9IDEsCisJLmluZGF0X2VuZHBfZmxpcAk9IDAsCisJLm91dGRhdF9lbmRwX2ZsaXAJPSAxLAorCS5pbmRhdF9lbmRwb2ludHMJPSB7MHg4MX0sCisJLm91dGRhdF9lbmRwb2ludHMJPSB7MHgwMX0sCisJLmluYWNrX2VuZHBvaW50cwk9IHsweDg1fSwKKwkub3V0Y29udF9lbmRwb2ludHMJPSB7MHgwNX0sCisJLmluc3RhdF9lbmRwb2ludAk9IDB4ODcsCisJLmdsb2NvbnRfZW5kcG9pbnQJPSAweDA3LAorCS5jYWxjdWxhdGVfYmF1ZF9yYXRlCT0ga2V5c3Bhbl91c2ExOXdfY2FsY19iYXVkLAorCS5iYXVkY2xrCQk9IEtFWVNQQU5fVVNBMThYX0JBVURDTEssCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMgdXNhMTlfZGV2aWNlX2RldGFpbHMgPSB7CisJLnByb2R1Y3RfaWQJCT0ga2V5c3Bhbl91c2ExOV9wcm9kdWN0X2lkLAorCS5tc2dfZm9ybWF0CQk9IG1zZ191c2EyOCwKKwkubnVtX3BvcnRzCQk9IDEsCisJLmluZGF0X2VuZHBfZmxpcAk9IDEsCisJLm91dGRhdF9lbmRwX2ZsaXAJPSAxLAorCS5pbmRhdF9lbmRwb2ludHMJPSB7MHg4MX0sCisJLm91dGRhdF9lbmRwb2ludHMJPSB7MHgwMX0sCisJLmluYWNrX2VuZHBvaW50cwk9IHsweDgzfSwKKwkub3V0Y29udF9lbmRwb2ludHMJPSB7MHgwM30sCisJLmluc3RhdF9lbmRwb2ludAk9IDB4ODQsCisJLmdsb2NvbnRfZW5kcG9pbnQJPSAtMSwKKwkuY2FsY3VsYXRlX2JhdWRfcmF0ZQk9IGtleXNwYW5fdXNhMTlfY2FsY19iYXVkLAorCS5iYXVkY2xrCQk9IEtFWVNQQU5fVVNBMTlfQkFVRENMSywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscyB1c2ExOXFpX2RldmljZV9kZXRhaWxzID0geworCS5wcm9kdWN0X2lkCQk9IGtleXNwYW5fdXNhMTlxaV9wcm9kdWN0X2lkLAorCS5tc2dfZm9ybWF0CQk9IG1zZ191c2EyOCwKKwkubnVtX3BvcnRzCQk9IDEsCisJLmluZGF0X2VuZHBfZmxpcAk9IDEsCisJLm91dGRhdF9lbmRwX2ZsaXAJPSAxLAorCS5pbmRhdF9lbmRwb2ludHMJPSB7MHg4MX0sCisJLm91dGRhdF9lbmRwb2ludHMJPSB7MHgwMX0sCisJLmluYWNrX2VuZHBvaW50cwk9IHsweDgzfSwKKwkub3V0Y29udF9lbmRwb2ludHMJPSB7MHgwM30sCisJLmluc3RhdF9lbmRwb2ludAk9IDB4ODQsCisJLmdsb2NvbnRfZW5kcG9pbnQJPSAtMSwKKwkuY2FsY3VsYXRlX2JhdWRfcmF0ZQk9IGtleXNwYW5fdXNhMjhfY2FsY19iYXVkLAorCS5iYXVkY2xrCQk9IEtFWVNQQU5fVVNBMTlfQkFVRENMSywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscyBtcHJfZGV2aWNlX2RldGFpbHMgPSB7CisJLnByb2R1Y3RfaWQJCT0ga2V5c3Bhbl9tcHJfcHJvZHVjdF9pZCwKKwkubXNnX2Zvcm1hdAkJPSBtc2dfdXNhMjgsCisJLm51bV9wb3J0cwkJPSAxLAorCS5pbmRhdF9lbmRwX2ZsaXAJPSAxLAorCS5vdXRkYXRfZW5kcF9mbGlwCT0gMSwKKwkuaW5kYXRfZW5kcG9pbnRzCT0gezB4ODF9LAorCS5vdXRkYXRfZW5kcG9pbnRzCT0gezB4MDF9LAorCS5pbmFja19lbmRwb2ludHMJPSB7MHg4M30sCisJLm91dGNvbnRfZW5kcG9pbnRzCT0gezB4MDN9LAorCS5pbnN0YXRfZW5kcG9pbnQJPSAweDg0LAorCS5nbG9jb250X2VuZHBvaW50CT0gLTEsCisJLmNhbGN1bGF0ZV9iYXVkX3JhdGUJPSBrZXlzcGFuX3VzYTI4X2NhbGNfYmF1ZCwKKwkuYmF1ZGNsawkJPSBLRVlTUEFOX1VTQTE5X0JBVURDTEssCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMgdXNhMTlxd19kZXZpY2VfZGV0YWlscyA9IHsKKwkucHJvZHVjdF9pZAkJPSBrZXlzcGFuX3VzYTE5cXdfcHJvZHVjdF9pZCwKKwkubXNnX2Zvcm1hdAkJPSBtc2dfdXNhMjYsCisJLm51bV9wb3J0cwkJPSAxLAorCS5pbmRhdF9lbmRwX2ZsaXAJPSAwLAorCS5vdXRkYXRfZW5kcF9mbGlwCT0gMSwKKwkuaW5kYXRfZW5kcG9pbnRzCT0gezB4ODF9LAorCS5vdXRkYXRfZW5kcG9pbnRzCT0gezB4MDF9LAorCS5pbmFja19lbmRwb2ludHMJPSB7MHg4NX0sCisJLm91dGNvbnRfZW5kcG9pbnRzCT0gezB4MDV9LAorCS5pbnN0YXRfZW5kcG9pbnQJPSAweDg3LAorCS5nbG9jb250X2VuZHBvaW50CT0gMHgwNywKKwkuY2FsY3VsYXRlX2JhdWRfcmF0ZQk9IGtleXNwYW5fdXNhMTl3X2NhbGNfYmF1ZCwKKwkuYmF1ZGNsawkJPSBLRVlTUEFOX1VTQTE5V19CQVVEQ0xLLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzIHVzYTE5d19kZXZpY2VfZGV0YWlscyA9IHsKKwkucHJvZHVjdF9pZAkJPSBrZXlzcGFuX3VzYTE5d19wcm9kdWN0X2lkLAorCS5tc2dfZm9ybWF0CQk9IG1zZ191c2EyNiwKKwkubnVtX3BvcnRzCQk9IDEsCisJLmluZGF0X2VuZHBfZmxpcAk9IDAsCisJLm91dGRhdF9lbmRwX2ZsaXAJPSAxLAorCS5pbmRhdF9lbmRwb2ludHMJPSB7MHg4MX0sCisJLm91dGRhdF9lbmRwb2ludHMJPSB7MHgwMX0sCisJLmluYWNrX2VuZHBvaW50cwk9IHsweDg1fSwKKwkub3V0Y29udF9lbmRwb2ludHMJPSB7MHgwNX0sCisJLmluc3RhdF9lbmRwb2ludAk9IDB4ODcsCisJLmdsb2NvbnRfZW5kcG9pbnQJPSAweDA3LAorCS5jYWxjdWxhdGVfYmF1ZF9yYXRlCT0ga2V5c3Bhbl91c2ExOXdfY2FsY19iYXVkLAorCS5iYXVkY2xrCQk9IEtFWVNQQU5fVVNBMTlXX0JBVURDTEssCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGtleXNwYW5fZGV2aWNlX2RldGFpbHMgdXNhMTloc19kZXZpY2VfZGV0YWlscyA9IHsKKwkucHJvZHVjdF9pZAkJPSBrZXlzcGFuX3VzYTE5aHNfcHJvZHVjdF9pZCwKKwkubXNnX2Zvcm1hdAkJPSBtc2dfdXNhOTAsCisJLm51bV9wb3J0cwkJPSAxLAorCS5pbmRhdF9lbmRwX2ZsaXAJPSAwLAorCS5vdXRkYXRfZW5kcF9mbGlwCT0gMCwKKwkuaW5kYXRfZW5kcG9pbnRzCT0gezB4ODF9LAorCS5vdXRkYXRfZW5kcG9pbnRzCT0gezB4MDF9LAorCS5pbmFja19lbmRwb2ludHMJPSB7LTF9LAorCS5vdXRjb250X2VuZHBvaW50cwk9IHsweDAyfSwKKwkuaW5zdGF0X2VuZHBvaW50CT0gMHg4MiwKKwkuZ2xvY29udF9lbmRwb2ludAk9IC0xLAorCS5jYWxjdWxhdGVfYmF1ZF9yYXRlCT0ga2V5c3Bhbl91c2ExOWhzX2NhbGNfYmF1ZCwKKwkuYmF1ZGNsawkJPSBLRVlTUEFOX1VTQTE5SFNfQkFVRENMSywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscyB1c2EyOF9kZXZpY2VfZGV0YWlscyA9IHsKKwkucHJvZHVjdF9pZAkJPSBrZXlzcGFuX3VzYTI4X3Byb2R1Y3RfaWQsCisJLm1zZ19mb3JtYXQJCT0gbXNnX3VzYTI4LAorCS5udW1fcG9ydHMJCT0gMiwKKwkuaW5kYXRfZW5kcF9mbGlwCT0gMSwKKwkub3V0ZGF0X2VuZHBfZmxpcAk9IDEsCisJLmluZGF0X2VuZHBvaW50cwk9IHsweDgxLCAweDgzfSwKKwkub3V0ZGF0X2VuZHBvaW50cwk9IHsweDAxLCAweDAzfSwKKwkuaW5hY2tfZW5kcG9pbnRzCT0gezB4ODUsIDB4ODZ9LAorCS5vdXRjb250X2VuZHBvaW50cwk9IHsweDA1LCAweDA2fSwKKwkuaW5zdGF0X2VuZHBvaW50CT0gMHg4NywKKwkuZ2xvY29udF9lbmRwb2ludAk9IDB4MDcsCisJLmNhbGN1bGF0ZV9iYXVkX3JhdGUJPSBrZXlzcGFuX3VzYTI4X2NhbGNfYmF1ZCwKKwkuYmF1ZGNsawkJPSBLRVlTUEFOX1VTQTI4X0JBVURDTEssCQkKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscyB1c2EyOHhfZGV2aWNlX2RldGFpbHMgPSB7CisJLnByb2R1Y3RfaWQJCT0ga2V5c3Bhbl91c2EyOHhfcHJvZHVjdF9pZCwKKwkubXNnX2Zvcm1hdAkJPSBtc2dfdXNhMjYsCisJLm51bV9wb3J0cwkJPSAyLAorCS5pbmRhdF9lbmRwX2ZsaXAJPSAwLAorCS5vdXRkYXRfZW5kcF9mbGlwCT0gMSwKKwkuaW5kYXRfZW5kcG9pbnRzCT0gezB4ODEsIDB4ODN9LAorCS5vdXRkYXRfZW5kcG9pbnRzCT0gezB4MDEsIDB4MDN9LAorCS5pbmFja19lbmRwb2ludHMJPSB7MHg4NSwgMHg4Nn0sCisJLm91dGNvbnRfZW5kcG9pbnRzCT0gezB4MDUsIDB4MDZ9LAorCS5pbnN0YXRfZW5kcG9pbnQJPSAweDg3LAorCS5nbG9jb250X2VuZHBvaW50CT0gMHgwNywKKwkuY2FsY3VsYXRlX2JhdWRfcmF0ZQk9IGtleXNwYW5fdXNhMTl3X2NhbGNfYmF1ZCwKKwkuYmF1ZGNsawkJPSBLRVlTUEFOX1VTQTI4WF9CQVVEQ0xLLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzIHVzYTI4eGFfZGV2aWNlX2RldGFpbHMgPSB7CisJLnByb2R1Y3RfaWQJCT0ga2V5c3Bhbl91c2EyOHhhX3Byb2R1Y3RfaWQsCisJLm1zZ19mb3JtYXQJCT0gbXNnX3VzYTI2LAorCS5udW1fcG9ydHMJCT0gMiwKKwkuaW5kYXRfZW5kcF9mbGlwCT0gMCwKKwkub3V0ZGF0X2VuZHBfZmxpcAk9IDEsCisJLmluZGF0X2VuZHBvaW50cwk9IHsweDgxLCAweDgzfSwKKwkub3V0ZGF0X2VuZHBvaW50cwk9IHsweDAxLCAweDAzfSwKKwkuaW5hY2tfZW5kcG9pbnRzCT0gezB4ODUsIDB4ODZ9LAorCS5vdXRjb250X2VuZHBvaW50cwk9IHsweDA1LCAweDA2fSwKKwkuaW5zdGF0X2VuZHBvaW50CT0gMHg4NywKKwkuZ2xvY29udF9lbmRwb2ludAk9IDB4MDcsCisJLmNhbGN1bGF0ZV9iYXVkX3JhdGUJPSBrZXlzcGFuX3VzYTE5d19jYWxjX2JhdWQsCisJLmJhdWRjbGsJCT0gS0VZU1BBTl9VU0EyOFhfQkFVRENMSywKK307CisKKy8qIFdlIGRvbid0IG5lZWQgYSBzZXBhcmF0ZSBlbnRyeSBmb3IgdGhlIHVzYTI4eGIgYXMgaXQgYXBwZWFycyBhcyBhIDI4eCBhbnl3YXkgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzIHVzYTQ5d19kZXZpY2VfZGV0YWlscyA9IHsKKwkucHJvZHVjdF9pZAkJPSBrZXlzcGFuX3VzYTQ5d19wcm9kdWN0X2lkLAorCS5tc2dfZm9ybWF0CQk9IG1zZ191c2E0OSwKKwkubnVtX3BvcnRzCQk9IDQsCisJLmluZGF0X2VuZHBfZmxpcAk9IDAsCisJLm91dGRhdF9lbmRwX2ZsaXAJPSAwLAorCS5pbmRhdF9lbmRwb2ludHMJPSB7MHg4MSwgMHg4MiwgMHg4MywgMHg4NH0sCisJLm91dGRhdF9lbmRwb2ludHMJPSB7MHgwMSwgMHgwMiwgMHgwMywgMHgwNH0sCisJLmluYWNrX2VuZHBvaW50cwk9IHstMSwgLTEsIC0xLCAtMX0sCisJLm91dGNvbnRfZW5kcG9pbnRzCT0gey0xLCAtMSwgLTEsIC0xfSwKKwkuaW5zdGF0X2VuZHBvaW50CT0gMHg4NywKKwkuZ2xvY29udF9lbmRwb2ludAk9IDB4MDcsCisJLmNhbGN1bGF0ZV9iYXVkX3JhdGUJPSBrZXlzcGFuX3VzYTE5d19jYWxjX2JhdWQsCisJLmJhdWRjbGsJCT0gS0VZU1BBTl9VU0E0OVdfQkFVRENMSywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2V5c3Bhbl9kZXZpY2VfZGV0YWlscyB1c2E0OXdsY19kZXZpY2VfZGV0YWlscyA9IHsKKwkucHJvZHVjdF9pZAkJPSBrZXlzcGFuX3VzYTQ5d2xjX3Byb2R1Y3RfaWQsCisJLm1zZ19mb3JtYXQJCT0gbXNnX3VzYTQ5LAorCS5udW1fcG9ydHMJCT0gNCwKKwkuaW5kYXRfZW5kcF9mbGlwCT0gMCwKKwkub3V0ZGF0X2VuZHBfZmxpcAk9IDAsCisJLmluZGF0X2VuZHBvaW50cwk9IHsweDgxLCAweDgyLCAweDgzLCAweDg0fSwKKwkub3V0ZGF0X2VuZHBvaW50cwk9IHsweDAxLCAweDAyLCAweDAzLCAweDA0fSwKKwkuaW5hY2tfZW5kcG9pbnRzCT0gey0xLCAtMSwgLTEsIC0xfSwKKwkub3V0Y29udF9lbmRwb2ludHMJPSB7LTEsIC0xLCAtMSwgLTF9LAorCS5pbnN0YXRfZW5kcG9pbnQJPSAweDg3LAorCS5nbG9jb250X2VuZHBvaW50CT0gMHgwNywKKwkuY2FsY3VsYXRlX2JhdWRfcmF0ZQk9IGtleXNwYW5fdXNhMTl3X2NhbGNfYmF1ZCwKKwkuYmF1ZGNsawkJPSBLRVlTUEFOX1VTQTE5V19CQVVEQ0xLLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBrZXlzcGFuX2RldmljZV9kZXRhaWxzICprZXlzcGFuX2RldmljZXNbXSA9IHsKKwkmdXNhMTh4X2RldmljZV9kZXRhaWxzLAorCSZ1c2ExOV9kZXZpY2VfZGV0YWlscywKKwkmdXNhMTlxaV9kZXZpY2VfZGV0YWlscywKKwkmbXByX2RldmljZV9kZXRhaWxzLAorCSZ1c2ExOXF3X2RldmljZV9kZXRhaWxzLAorCSZ1c2ExOXdfZGV2aWNlX2RldGFpbHMsCisJJnVzYTE5aHNfZGV2aWNlX2RldGFpbHMsCisJJnVzYTI4X2RldmljZV9kZXRhaWxzLAorCSZ1c2EyOHhfZGV2aWNlX2RldGFpbHMsCisJJnVzYTI4eGFfZGV2aWNlX2RldGFpbHMsCisJLyogMjh4YiBub3QgcmVxdWlyZWQgYXMgaXQgcmVudW1lcmF0ZXMgYXMgYSAyOHggKi8KKwkmdXNhNDl3X2RldmljZV9kZXRhaWxzLAorCSZ1c2E0OXdsY19kZXZpY2VfZGV0YWlscywKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGtleXNwYW5faWRzX2NvbWJpbmVkW10gPSB7CisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE4eF9wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTlfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5d19wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTlxaV9wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTlxd19wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fbXByX3ByZV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2EyOF9wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjh4X3ByZV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2EyOHhhX3ByZV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2EyOHhiX3ByZV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2E0OXdfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTQ5d2xjX3ByZV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOHhfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTlfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTl3X3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5cWlfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTlxd19wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOWhzX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX21wcl9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2EyOF9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2EyOHhfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjh4YV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2EyOHhiX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTQ5d19wcm9kdWN0X2lkKX0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTQ5d2xjX3Byb2R1Y3RfaWQpfSwKKwl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBrZXlzcGFuX2lkc19jb21iaW5lZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBrZXlzcGFuX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkia2V5c3BhbiIsICAgICAgICAgICAgICAgIAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0Ja2V5c3Bhbl9pZHNfY29tYmluZWQsCit9OworCisvKiB1c2JfZGV2aWNlX2lkIHRhYmxlIGZvciB0aGUgcHJlLWZpcm13YXJlIGRvd25sb2FkIGtleXNwYW4gZGV2aWNlcyAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGtleXNwYW5fcHJlX2lkc1tdID0geworCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOHhfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5X3ByZV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOXFpX3ByZV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOXF3X3ByZV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOXdfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX21wcl9wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjhfcHJlX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTI4eF9wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjh4YV9wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjh4Yl9wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhNDl3X3ByZV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2E0OXdsY19wcmVfcHJvZHVjdF9pZCkgfSwKKwl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBrZXlzcGFuXzFwb3J0X2lkc1tdID0geworCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOHhfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTlfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTlxaV9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOXF3X3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5d19wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOWhzX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX21wcl9wcm9kdWN0X2lkKSB9LAorCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGtleXNwYW5fMnBvcnRfaWRzW10gPSB7CisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTI4X3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTI4eF9wcm9kdWN0X2lkKSB9LAorCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2EyOHhhX3Byb2R1Y3RfaWQpIH0sCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTI4eGJfcHJvZHVjdF9pZCkgfSwKKwl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBrZXlzcGFuXzRwb3J0X2lkc1tdID0geworCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2E0OXdfcHJvZHVjdF9pZCkgfSwKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhNDl3bGNfcHJvZHVjdF9pZCl9LAorCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworLyogU3RydWN0cyBmb3IgdGhlIGRldmljZXMsIHByZSBhbmQgcG9zdCByZW51bWVyYXRpb24uICovCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUga2V5c3Bhbl9wcmVfZGV2aWNlID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCQk9ICJLZXlzcGFuIC0gKHdpdGhvdXQgZmlybXdhcmUpIiwKKwkuc2hvcnRfbmFtZQkJPSAia2V5c3Bhbl9ub19maXJtIiwKKwkuaWRfdGFibGUJCT0ga2V5c3Bhbl9wcmVfaWRzLAorCS5udW1faW50ZXJydXB0X2luCT0gTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4JCT0gTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfb3V0CQk9IE5VTV9ET05UX0NBUkUsCisJLm51bV9wb3J0cwkJPSAxLAorCS5hdHRhY2gJCQk9IGtleXNwYW5fZmFrZV9zdGFydHVwLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGtleXNwYW5fMXBvcnRfZGV2aWNlID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCQk9ICJLZXlzcGFuIDEgcG9ydCBhZGFwdGVyIiwKKwkuc2hvcnRfbmFtZQkJPSAia2V5c3Bhbl8xIiwKKwkuaWRfdGFibGUJCT0ga2V5c3Bhbl8xcG9ydF9pZHMsCisJLm51bV9pbnRlcnJ1cHRfaW4JPSBOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19pbgkJPSBOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19vdXQJCT0gTlVNX0RPTlRfQ0FSRSwKKwkubnVtX3BvcnRzCQk9IDEsCisJLm9wZW4JCQk9IGtleXNwYW5fb3BlbiwKKwkuY2xvc2UJCQk9IGtleXNwYW5fY2xvc2UsCisJLndyaXRlCQkJPSBrZXlzcGFuX3dyaXRlLAorCS53cml0ZV9yb29tCQk9IGtleXNwYW5fd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyCT0ga2V5c3Bhbl9jaGFyc19pbl9idWZmZXIsCisJLnRocm90dGxlCQk9IGtleXNwYW5fcnhfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUJCT0ga2V5c3Bhbl9yeF91bnRocm90dGxlLAorCS5pb2N0bAkJCT0ga2V5c3Bhbl9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MJCT0ga2V5c3Bhbl9zZXRfdGVybWlvcywKKwkuYnJlYWtfY3RsCQk9IGtleXNwYW5fYnJlYWtfY3RsLAorCS50aW9jbWdldAkJPSBrZXlzcGFuX3Rpb2NtZ2V0LAorCS50aW9jbXNldAkJPSBrZXlzcGFuX3Rpb2Ntc2V0LAorCS5hdHRhY2gJCQk9IGtleXNwYW5fc3RhcnR1cCwKKwkuc2h1dGRvd24JCT0ga2V5c3Bhbl9zaHV0ZG93biwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBrZXlzcGFuXzJwb3J0X2RldmljZSA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQkJPSAiS2V5c3BhbiAyIHBvcnQgYWRhcHRlciIsCisJLnNob3J0X25hbWUJCT0gImtleXNwYW5fMiIsCisJLmlkX3RhYmxlCQk9IGtleXNwYW5fMnBvcnRfaWRzLAorCS5udW1faW50ZXJydXB0X2luCT0gTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4JCT0gTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfb3V0CQk9IE5VTV9ET05UX0NBUkUsCisJLm51bV9wb3J0cwkJPSAyLAorCS5vcGVuCQkJPSBrZXlzcGFuX29wZW4sCisJLmNsb3NlCQkJPSBrZXlzcGFuX2Nsb3NlLAorCS53cml0ZQkJCT0ga2V5c3Bhbl93cml0ZSwKKwkud3JpdGVfcm9vbQkJPSBrZXlzcGFuX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlcgk9IGtleXNwYW5fY2hhcnNfaW5fYnVmZmVyLAorCS50aHJvdHRsZQkJPSBrZXlzcGFuX3J4X3Rocm90dGxlLAorCS51bnRocm90dGxlCQk9IGtleXNwYW5fcnhfdW50aHJvdHRsZSwKKwkuaW9jdGwJCQk9IGtleXNwYW5faW9jdGwsCisJLnNldF90ZXJtaW9zCQk9IGtleXNwYW5fc2V0X3Rlcm1pb3MsCisJLmJyZWFrX2N0bAkJPSBrZXlzcGFuX2JyZWFrX2N0bCwKKwkudGlvY21nZXQJCT0ga2V5c3Bhbl90aW9jbWdldCwKKwkudGlvY21zZXQJCT0ga2V5c3Bhbl90aW9jbXNldCwKKwkuYXR0YWNoCQkJPSBrZXlzcGFuX3N0YXJ0dXAsCisJLnNodXRkb3duCQk9IGtleXNwYW5fc2h1dGRvd24sCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUga2V5c3Bhbl80cG9ydF9kZXZpY2UgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJCT0gIktleXNwYW4gNCBwb3J0IGFkYXB0ZXIiLAorCS5zaG9ydF9uYW1lCQk9ICJrZXlzcGFuXzQiLAorCS5pZF90YWJsZQkJPSBrZXlzcGFuXzRwb3J0X2lkcywKKwkubnVtX2ludGVycnVwdF9pbgk9IE5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX2luCQk9IDUsCisJLm51bV9idWxrX291dAkJPSA1LAorCS5udW1fcG9ydHMJCT0gNCwKKwkub3BlbgkJCT0ga2V5c3Bhbl9vcGVuLAorCS5jbG9zZQkJCT0ga2V5c3Bhbl9jbG9zZSwKKwkud3JpdGUJCQk9IGtleXNwYW5fd3JpdGUsCisJLndyaXRlX3Jvb20JCT0ga2V5c3Bhbl93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIJPSBrZXlzcGFuX2NoYXJzX2luX2J1ZmZlciwKKwkudGhyb3R0bGUJCT0ga2V5c3Bhbl9yeF90aHJvdHRsZSwKKwkudW50aHJvdHRsZQkJPSBrZXlzcGFuX3J4X3VudGhyb3R0bGUsCisJLmlvY3RsCQkJPSBrZXlzcGFuX2lvY3RsLAorCS5zZXRfdGVybWlvcwkJPSBrZXlzcGFuX3NldF90ZXJtaW9zLAorCS5icmVha19jdGwJCT0ga2V5c3Bhbl9icmVha19jdGwsCisJLnRpb2NtZ2V0CQk9IGtleXNwYW5fdGlvY21nZXQsCisJLnRpb2Ntc2V0CQk9IGtleXNwYW5fdGlvY21zZXQsCisJLmF0dGFjaAkJCT0ga2V5c3Bhbl9zdGFydHVwLAorCS5zaHV0ZG93bgkJPSBrZXlzcGFuX3NodXRkb3duLAorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9tcHJfZncuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX21wcl9mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzODgwNWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9tcHJfZncuaApAQCAtMCwwICsxLDI4NiBAQAorLyoga2V5c3Bhbl9tcHJfZncuaAorIAorCVRoZSBmaXJtd2FyZSBjb250YWluZWQgaGVyZWluIGFzIGtleXNwYW5fbXByX2Z3LmggaXMKKworCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwMQorCQlLZXlzcGFuLCBBIGRpdmlzaW9uIG9mIElubm9TeXMgSW5jb3Jwb3JhdGVkICgiS2V5c3BhbiIpCisJCQorCWFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZCBvcgorCXB1YmxpYyBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGZyb20gd2hpY2ggdGhpcyBmaXJtd2FyZSBpbWFnZSBpcworCWRlcml2ZWQuICBFeGNlcHQgYXMgbm90ZWQgYmVsb3cgdGhpcyBmaXJtd2FyZSBpbWFnZSBtYXkgbm90IGJlIAorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgCisJS2V5c3BhbidzIHByaW9yIHdyaXR0ZW4gY29uc2VudC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKwlQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgCisJaW1hZ2UgYXMgcGFydCBvZiBhIExpbnV4IG9yIG90aGVyIE9wZW4gU291cmNlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuIAorCisJVGhpcyBmaXJtd2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggIAorCUtleXNwYW4gaGFyZHdhcmUuICBEaXN0cmlidXRpb24gYW5kL29yIE1vZGlmaWNhdGlvbiBvZiB0aGUgCisJa2V5c3Bhbi5jIGRyaXZlciB3aGljaCBpbmNsdWRlcyB0aGlzIGZpcm13YXJlLCBpbiB3aG9sZSBvciBpbiAKKwlwYXJ0LCByZXF1aXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3RhdGVtZW50LiIKKworc3RhdGljIGNoYXIgdGhlRmlybXdhcmVEYXRlNTNbXSA9CisJIjA0LzI2LzIwMDIgIDAyOjQ3cCAgICAgICAgICAgICAgMTEsNTcwIFVTQTUzIjsKKyovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCBrZXlzcGFuX21wcl9maXJtd2FyZVtdID0geworIHsweDAwMzMsICAzLCB7IDB4MDIsIDB4MDAsIDB4MWF9fSwKKyB7MHgwMDFhLCAgNCwgeyAweDUzLCAweGQ4LCAweGVmLCAweDMyfX0sCisgezB4MDAwMywgMTYsIHsgMHg4ZSwgMHg1NiwgMHg4ZiwgMHg1NywgMHhlNSwgMHg1NywgMHgxNSwgMHg1NywgMHhhZSwgMHg1NiwgMHg3MCwgMHgwMiwgMHgxNSwgMHg1NiwgMHg0ZSwgMHg2MH19LAorIHsweDAwMTMsICA3LCB7IDB4MDUsIDB4MTIsIDB4MGYsIDB4YTIsIDB4ODAsIDB4ZWUsIDB4MjJ9fSwKKyB7MHgwMDIzLCAgMywgeyAweDAyLCAweDAwLCAweDQ2fX0sCisgezB4MDA0NiwgMTYsIHsgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhjMCwgMHhkMCwgMHg3NSwgMHhkMCwgMHgwOH19LAorIHsweDAwNTYsIDE2LCB7IDB4MzAsIDB4OTksIDB4MGUsIDB4MzAsIDB4MGIsIDB4MDcsIDB4YTIsIDB4MGUsIDB4OTIsIDB4OWIsIDB4ODUsIDB4MzYsIDB4OTksIDB4YzIsIDB4OTksIDB4ZDJ9fSwKKyB7MHgwMDY2LCAxNiwgeyAweDEyLCAweDIwLCAweDEyLCAweDAzLCAweDAyLCAweDAyLCAweGY5LCAweGMyLCAweDEyLCAweDMwLCAweDAzLCAweDE5LCAweDdlLCAweDdlLCAweDdmLCAweDQwfX0sCisgezB4MDA3NiwgMTYsIHsgMHg3NSwgMHgxYSwgMHg3ZSwgMHg3NSwgMHgxYiwgMHg0MCwgMHg3NSwgMHgxNywgMHgwMCwgMHg3ZSwgMHg3ZCwgMHg3ZiwgMHhjMCwgMHg3NSwgMHgxOCwgMHg3ZH19LAorIHsweDAwODYsIDE2LCB7IDB4NzUsIDB4MTksIDB4YzAsIDB4ODAsIDB4MTcsIDB4N2UsIDB4N2QsIDB4N2YsIDB4YzAsIDB4NzUsIDB4MWEsIDB4N2QsIDB4NzUsIDB4MWIsIDB4YzAsIDB4NzV9fSwKKyB7MHgwMDk2LCAxNiwgeyAweDE3LCAweDAxLCAweDdlLCAweDdlLCAweDdmLCAweDQwLCAweDc1LCAweDE4LCAweDdlLCAweDc1LCAweDE5LCAweDQwLCAweDIwLCAweDBiLCAweDAzLCAweDAyfX0sCisgezB4MDBhNiwgMTYsIHsgMHgwMSwgMHg4NCwgMHhlNSwgMHgzYSwgMHhjMywgMHg5NSwgMHg1MywgMHg1MCwgMHgzYywgMHgyMCwgMHgwYywgMHgzNCwgMHgyMCwgMHgwOSwgMHgzMSwgMHg5MH19LAorIHsweDAwYjYsIDE2LCB7IDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTUsIDB4MzgsIDB4NzAsIDB4MjksIDB4MzAsIDB4MTAsIDB4MTIsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsIDB4ZTUsIDB4MWJ9fSwKKyB7MHgwMGM2LCAxNiwgeyAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDFhLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweGFmLCAweDNhLCAweDA1LCAweDNhfX0sCisgezB4MDBkNiwgMTYsIHsgMHhlNSwgMHgxYiwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxYSwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHgzNiwgMHgwMiwgMHgwMiwgMHhmN319LAorIHsweDAwZTYsIDE2LCB7IDB4YzIsIDB4MGIsIDB4MDIsIDB4MDIsIDB4ZjcsIDB4MzAsIDB4MDMsIDB4MTEsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTQsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NTR9fSwKKyB7MHgwMGY2LCAxNiwgeyAweDAyLCAweGY1LCAweDFkLCAweGEzLCAweGUwLCAweGY1LCAweDFjLCAweDgwLCAweDExLCAweDkwLCAweDdmLCAweGM5LCAweGU0LCAweGYwLCAweDkwLCAweDdmfX0sCisgezB4MDA0MywgIDMsIHsgMHgwMiwgMHgwZiwgMHgwMH19LAorIHsweDAwMDAsICAzLCB7IDB4MDIsIDB4MDAsIDB4MjZ9fSwKKyB7MHgwMDI2LCAxMiwgeyAweDc4LCAweDdmLCAweGU0LCAweGY2LCAweGQ4LCAweGZkLCAweDc1LCAweDgxLCAweDVhLCAweDAyLCAweDBhLCAweDMzfX0sCisgezB4MDEwNiwgNjQsIHsgMHhjNiwgMHhlMCwgMHg1NCwgMHgwMiwgMHhmNSwgMHgxZCwgMHhhMywgMHhlMCwgMHhmNSwgMHgxYywgMHhlNSwgMHgxNywgMHgyNCwgMHhmZiwgMHg5MiwgMHgwMywgMHgzMCwKKyAgMHgwZCwgMHgwZCwgMHhjMiwgMHgwZCwgMHg5MCwgMHg3ZiwgMHhiYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhjMiwgMHgwYiwgMHgwMiwgMHgwMiwgMHhmNywgMHhlNSwKKyAgMHgxZCwgMHg2MCwgMHgwNSwgMHhjMiwgMHgwYiwgMHgwMiwgMHgwMiwgMHhmNywgMHg4NSwgMHgxYywgMHg1MywgMHg4NSwgMHgxOSwgMHg4MiwgMHg4NSwgMHgxOCwKKyAgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgwZCwgMHg3NSwgMHgxMiwgMHhmZiwgMHgyMCwgMHgwYywgMHgzYSwgMHgyMCwgMHgwOSwgMHgzNywgMHg5MH19LAorIHsweDAxNDYsIDY0LCB7IDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTUsIDB4MzgsIDB4NzAsIDB4MmYsIDB4MzAsIDB4MTAsIDB4MWMsIDB4ODUsIDB4MTksIDB4ODIsIDB4ODUsIDB4MTgsIDB4ODMsIDB4YTMsCisgIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGUsIDB4ODUsIDB4MTksIDB4ODIsIDB4ODUsIDB4MTgsIDB4ODMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4MzYsIDB4NzUsCisgIDB4M2EsIDB4MDMsIDB4MDIsIDB4MDIsIDB4ZjcsIDB4NzUsIDB4M2EsIDB4MDIsIDB4ODUsIDB4MTksIDB4ODIsIDB4ODUsIDB4MTgsIDB4ODMsIDB4YTMsIDB4ZTAsCisgIDB4ZjUsIDB4MzYsIDB4MDIsIDB4MDIsIDB4ZjcsIDB4NzUsIDB4M2EsIDB4MDEsIDB4YzIsIDB4MGIsIDB4MDIsIDB4MDIsIDB4ZjcsIDB4MzAsIDB4MDN9fSwKKyB7MHgwMTg2LCA2NCwgeyAweDBlLCAweDkwLCAweDdmLCAweGM2LCAweGUwLCAweDU0LCAweDAyLCAweGY1LCAweDFkLCAweGEzLCAweGUwLCAweGY1LCAweDFjLCAweDgwLCAweDBjLCAweDkwLCAweDdmLAorICAweGM4LCAweGUwLCAweDU0LCAweDAyLCAweGY1LCAweDFkLCAweGEzLCAweGUwLCAweGY1LCAweDFjLCAweGU1LCAweDNhLCAweGMzLCAweDk1LCAweDUzLCAweDUwLAorICAweDAzLCAweDAyLCAweDAyLCAweDY4LCAweGU1LCAweDFkLCAweDYwLCAweDA3LCAweGMyLCAweDE0LCAweGMyLCAweDA1LCAweDAyLCAweDAyLCAweGY3LCAweDg1LAorICAweDFjLCAweDUzLCAweDg1LCAweDFiLCAweDgyLCAweDg1LCAweDFhLCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDBkLCAweDc1LCAweDEyLCAweGZmfX0sCisgezB4MDFjNiwgNjQsIHsgMHgzMCwgMHgwYywgMHgwMywgMHgwMiwgMHgwMiwgMHg2MCwgMHgzMCwgMHgwOSwgMHgwMywgMHgwMiwgMHgwMiwgMHg2MCwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHg1NSwKKyAgMHgzOCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwMiwgMHg2MCwgMHgzMCwgMHgxMCwgMHgxYiwgMHg4NSwgMHgxYiwgMHg4MiwgMHg4NSwgMHgxYSwgMHg4MywgMHhhMywKKyAgMHhlMCwgMHgxMywgMHg5MiwgMHg5YiwgMHg4NSwgMHgxYiwgMHg4MiwgMHg4NSwgMHgxYSwgMHg4MywgMHhhMywgMHhhMywgMHhlMCwgMHhmNSwgMHg5OSwgMHg3NSwKKyAgMHgzYSwgMHgwMywgMHg4MCwgMHgwZCwgMHg4NSwgMHgxYiwgMHg4MiwgMHg4NSwgMHgxYSwgMHg4MywgMHhhMywgMHhlMCwgMHhmNSwgMHg5OSwgMHg3NX19LAorIHsweDAyMDYsIDY0LCB7IDB4M2EsIDB4MDIsIDB4ZTUsIDB4M2EsIDB4YzMsIDB4OTUsIDB4NTMsIDB4NDAsIDB4MjYsIDB4MzAsIDB4MDMsIDB4MDcsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTQsIDB4ZjAsCisgIDB4ODAsIDB4MDUsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZTQsIDB4ZjAsIDB4ZTUsIDB4MTcsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4MDMsIDB4MjAsIDB4MGQsIDB4MDMsCisgIDB4MDIsIDB4MDIsIDB4ZjcsIDB4YzIsIDB4MGQsIDB4OTAsIDB4N2YsIDB4YmIsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDIsIDB4ZjcsIDB4MzAsIDB4MTAsCisgIDB4MTIsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsIDB4ZTUsIDB4MWIsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MWEsIDB4ZjUsIDB4ODN9fSwKKyB7MHgwMjQ2LCA2NCwgeyAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweGU1LCAweDFiLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDFhLCAweGY1LAorICAweDgzLCAweGUwLCAweGY1LCAweDM2LCAweGQyLCAweDBiLCAweDAyLCAweDAyLCAweGY3LCAweDc1LCAweDNhLCAweDAxLCAweGMyLCAweDE0LCAweDAyLCAweDAyLAorICAweGY3LCAweDMwLCAweDBjLCAweDAzLCAweDAyLCAweDAyLCAweGY1LCAweDMwLCAweDA5LCAweDAzLCAweDAyLCAweDAyLCAweGY1LCAweDkwLCAweDdmLCAweDliLAorICAweGUwLCAweDU1LCAweDM4LCAweDcwLCAweDc5LCAweDMwLCAweDEwLCAweDEyLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweGU1LCAweDFiLCAweDJmfX0sCisgezB4MDI4NiwgNjQsIHsgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxYSwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHg5YiwgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYSwgMHhlNSwgMHgxYiwKKyAgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxYSwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHg5OSwgMHhlNSwgMHgzYSwgMHhjMywgMHg5NSwgMHg1MywKKyAgMHg0MCwgMHgyMiwgMHgzMCwgMHgwMywgMHgwNywgMHg5MCwgMHg3ZiwgMHhjNywgMHhlNCwgMHhmMCwgMHg4MCwgMHgwNSwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlNCwKKyAgMHhmMCwgMHhlNSwgMHgxNywgMHgyNCwgMHhmZiwgMHg5MiwgMHgwMywgMHgzMCwgMHgwZCwgMHgzNiwgMHhjMiwgMHgwZCwgMHg5MCwgMHg3ZiwgMHhiYn19LAorIHsweDAyYzYsIDY0LCB7IDB4NzQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MmMsIDB4MzAsIDB4MTAsIDB4MTIsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsIDB4ZTUsIDB4MWIsIDB4MmYsIDB4ZjUsIDB4ODIsCisgIDB4ZTQsIDB4MzUsIDB4MWEsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGUsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsIDB4ZTUsIDB4MWIsIDB4MmYsCisgIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MWEsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MzYsIDB4ZDIsIDB4MGIsIDB4ODAsIDB4MDIsIDB4YzIsIDB4MTQsCisgIDB4ZDIsIDB4MDEsIDB4MjAsIDB4OTgsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MzUsIDB4YzIsIDB4OTgsIDB4MjAsIDB4MDIsIDB4MDMsIDB4MDIsIDB4MDN9fSwKKyB7MHgwMzA2LCA2NCwgeyAweGEyLCAweDIwLCAweDE1LCAweDI3LCAweGFmLCAweDM5LCAweDA1LCAweDM5LCAweDc0LCAweDgwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LAorICAweDgzLCAweGU1LCAweDk5LCAweGYwLCAweDMwLCAweDEwLCAweDRkLCAweGFmLCAweDM5LCAweDA1LCAweDM5LCAweDc0LCAweDgwLCAweDJmLCAweGY1LCAweDgyLAorICAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGU1LCAweDk4LCAweGYwLCAweDgwLCAweDNhLCAweDg1LCAweDk5LCAweDU1LCAweGU1LCAweDU1LCAweGI1LAorICAweDQ3LCAweDA0LCAweGQyLCAweDA5LCAweDgwLCAweDJlLCAweGU1LCAweDU1LCAweGI1LCAweDQ2LCAweDA0LCAweGMyLCAweDA5LCAweDgwLCAweDI1fX0sCisgezB4MDM0NiwgNjQsIHsgMHhhZiwgMHgzOSwgMHgwNSwgMHgzOSwgMHg3NCwgMHg4MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg1NSwgMHhmMCwKKyAgMHgzMCwgMHgxMCwgMHgxMSwgMHhhZiwgMHgzOSwgMHgwNSwgMHgzOSwgMHg3NCwgMHg4MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwKKyAgMHg4MywgMHhlNSwgMHg5OCwgMHhmMCwgMHhkMiwgMHgwZiwgMHhlNSwgMHgzOSwgMHhjMywgMHg5NSwgMHg0MywgMHg1MCwgMHgwMywgMHgwMiwgMHgwNCwgMHgzMywKKyAgMHg5MCwgMHg3ZiwgMHhiOCwgMHhlMCwgMHgzMCwgMHhlMSwgMHgxNiwgMHhlNSwgMHgzOSwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHgwMywgMHgwMn19LAorIHsweDAzODYsIDY0LCB7IDB4MDQsIDB4MzMsIDB4MTUsIDB4MzksIDB4MTUsIDB4MzksIDB4MDUsIDB4MmIsIDB4NDMsIDB4MzQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MzMsIDB4OTAsIDB4N2YsIDB4YjcsCisgIDB4ZTUsIDB4MzksIDB4ZjAsIDB4NzUsIDB4MzksIDB4MDAsIDB4YzIsIDB4MDIsIDB4MDIsIDB4MDQsIDB4MzMsIDB4MjAsIDB4MTUsIDB4MjcsIDB4YWYsIDB4MzksCisgIDB4MDUsIDB4MzksIDB4NzQsIDB4MDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4OTksIDB4ZjAsIDB4MzAsCisgIDB4MTAsIDB4NGQsIDB4YWYsIDB4MzksIDB4MDUsIDB4MzksIDB4NzQsIDB4MDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjV9fSwKKyB7MHgwM2M2LCA2NCwgeyAweDgzLCAweGU1LCAweDk4LCAweGYwLCAweDgwLCAweDNhLCAweDg1LCAweDk5LCAweDU1LCAweGU1LCAweDU1LCAweGI1LCAweDQ3LCAweDA0LCAweGQyLCAweDA5LCAweDgwLAorICAweDJlLCAweGU1LCAweDU1LCAweGI1LCAweDQ2LCAweDA0LCAweGMyLCAweDA5LCAweDgwLCAweDI1LCAweGFmLCAweDM5LCAweDA1LCAweDM5LCAweDc0LCAweDAwLAorICAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGU1LCAweDU1LCAweGYwLCAweDMwLCAweDEwLCAweDExLCAweGFmLCAweDM5LAorICAweDA1LCAweDM5LCAweDc0LCAweDAwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGU1LCAweDk4LCAweGYwfX0sCisgezB4MDQwNiwgNjQsIHsgMHhkMiwgMHgwZiwgMHhlNSwgMHgzOSwgMHhjMywgMHg5NSwgMHg0MywgMHg0MCwgMHgyNCwgMHg5MCwgMHg3ZiwgMHhiNiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgxMiwgMHhlNSwKKyAgMHgzOSwgMHhjMywgMHg5NCwgMHg0MCwgMHg0MCwgMHgxNiwgMHgxNSwgMHgzOSwgMHgxNSwgMHgzOSwgMHgwNSwgMHgyYiwgMHg0MywgMHgzNCwgMHgwMSwgMHg4MCwKKyAgMHgwYiwgMHg5MCwgMHg3ZiwgMHhiOSwgMHhlNSwgMHgzOSwgMHhmMCwgMHg3NSwgMHgzOSwgMHgwMCwgMHhkMiwgMHgwMiwgMHhkMiwgMHgwMSwgMHgzMCwgMHgwMSwKKyAgMHgwNSwgMHhjMiwgMHgwMSwgMHgwMiwgMHgwMCwgMHg1NiwgMHhkMCwgMHhkMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMH19LAorIHsweDA0NDYsIDY0LCB7IDB4ZTAsIDB4MzIsIDB4OTAsIDB4N2YsIDB4YmMsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4NTQsIDB4ZTUsIDB4MzQsIDB4NjAsIDB4NTAsIDB4ZTUsIDB4MzEsIDB4NzAsIDB4NGMsCisgIDB4ZTUsIDB4MzQsIDB4MzAsIDB4ZTEsIDB4MGIsIDB4ZTQsIDB4ZjUsIDB4MmYsIDB4NzUsIDB4MzQsIDB4MDEsIDB4NzUsIDB4MzEsIDB4MDIsIDB4ODAsIDB4MGUsCisgIDB4YTIsIDB4MDgsIDB4ZTQsIDB4MzMsIDB4ZjUsIDB4MmYsIDB4YzIsIDB4MDgsIDB4ZTQsIDB4ZjUsIDB4MzQsIDB4NzUsIDB4MzEsIDB4MTAsIDB4ZTQsIDB4ZjUsCisgIDB4NTYsIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MjQsIDB4MjUsIDB4NTYsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTJ9fSwKKyB7MHgwNDg2LCA2NCwgeyAweDBjLCAweDc5LCAweGZmLCAweDc0LCAweDAwLCAweDI1LCAweDU2LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LAorICAweDU2LCAweGU1LCAweDU2LCAweGI0LCAweDBjLCAweGRiLCAweDkwLCAweDdmLCAweGJkLCAweDc0LCAweDBjLCAweGYwLCAweDkwLCAweDdmLCAweGNhLCAweGUwLAorICAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDA1LCAweGQxLCAweGU0LCAweGY1LCAweDU2LCAweDc0LCAweDQwLCAweDI1LCAweDU2LCAweGY1LCAweDgyLCAweGU0LAorICAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDU2LCAweDdjLCAweDAwLCAweDdiLCAweDAwLCAweDI0LCAweDNiLCAweGY5fX0sCisgezB4MDRjNiwgNjQsIHsgMHhlYywgMHgzNCwgMHgwMCwgMHhmYSwgMHhlZiwgMHgxMiwgMHgwYywgMHg5MiwgMHgwNSwgMHg1NiwgMHhlNSwgMHg1NiwgMHhiNCwgMHgxOCwgMHhkYiwgMHhlNSwgMHgzYiwKKyAgMHg2MCwgMHgxMSwgMHg3NSwgMHhjOSwgMHgyMCwgMHg3NSwgMHhjOCwgMHgzNiwgMHg4NSwgMHgzYywgMHhjYSwgMHg4NSwgMHgzZCwgMHhjYiwgMHhlNCwgMHg5MCwKKyAgMHg3ZiwgMHg5ZiwgMHhmMCwgMHhlNSwgMHgzZSwgMHgxMywgMHg5MiwgMHgxMCwgMHg5MiwgMHg5ZiwgMHg4NSwgMHgzZiwgMHgzOCwgMHhlNSwgMHg0MCwgMHgxMywKKyAgMHg5MiwgMHgxNSwgMHhlNSwgMHg0MSwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHg4MCwgMHgwN319LAorIHsweDA1MDYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4OTgsIDB4ZTAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4ZTUsIDB4NDIsIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZTAsIDB4NTQsIDB4N2YsCisgIDB4ZjAsIDB4ODAsIDB4MDcsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ZTUsIDB4NDgsIDB4NjAsIDB4MGIsIDB4YzIsIDB4MGMsCisgIDB4YzIsIDB4MDksIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4NDksIDB4NjAsIDB4MGMsIDB4ZDIsIDB4MDksIDB4NDMsCisgIDB4MzQsIDB4MDEsIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4NGEsIDB4NjAsIDB4MGQsIDB4YzIsIDB4YWZ9fSwKKyB7MHgwNTQ2LCA2NCwgeyAweGMyLCAweDBiLCAweGQyLCAweDAwLCAweGU0LCAweGY1LCAweDUzLCAweGY1LCAweDNhLCAweGQyLCAweGFmLCAweGU1LCAweDRiLCAweDYwLCAweDA1LCAweDMwLCAweDE1LAorICAweDAyLCAweGQyLCAweDA5LCAweGU1LCAweDRjLCAweDYwLCAweDE1LCAweDkwLCAweDdmLCAweDk1LCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDkwLCAweDdmLAorICAweDllLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweGU1LCAweDRkLCAweDYwLCAweDBhLAorICAweGQyLCAweDljLCAweGMyLCAweDk4LCAweDc1LCAweDJjLCAweDAxLCAweDc1LCAweDMxLCAweDFlLCAweGU1LCAweDRlLCAweDYwLCAweDA3LCAweGMyfX0sCisgezB4MDU4NiwgNjQsIHsgMHg5YywgMHhlNCwgMHhmNSwgMHgzOSwgMHhmNSwgMHgyYywgMHhlNSwgMHg0ZiwgMHg2MCwgMHgwMywgMHhlNCwgMHhmNSwgMHgzOSwgMHhlNSwgMHg1MCwgMHg2MCwgMHgwMiwKKyAgMHhkMiwgMHgwNywgMHhlNSwgMHg1MSwgMHg2MCwgMHgwYSwgMHhlNSwgMHg0ZCwgMHg3MCwgMHgwMiwgMHhmNSwgMHgzMSwgMHhlNSwgMHg1MSwgMHg0MiwgMHgzNCwKKyAgMHhlNSwgMHg1MiwgMHg2MCwgMHgxZiwgMHg5MCwgMHg3ZiwgMHhkNywgMHg3NCwgMHgxMSwgMHhmMCwgMHg3NCwgMHgzMSwgMHhmMCwgMHg3NCwgMHgxMiwgMHhmMCwKKyAgMHg3NCwgMHgzMiwgMHhmMCwgMHg3NCwgMHgxMywgMHhmMCwgMHg3NCwgMHgzMywgMHhmMCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg3NCwgMHgzNCwgMHhmMH19LAorIHsweDA1YzYsIDY0LCB7IDB4ZDIsIDB4MDMsIDB4ZDIsIDB4MDIsIDB4ZDIsIDB4MDgsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZjAsIDB4YTIsIDB4MGMsIDB4ZTQsIDB4MzMsIDB4ZmYsIDB4NjUsCisgIDB4MjksIDB4NjAsIDB4MDUsIDB4OGYsIDB4MjksIDB4NDMsIDB4MzQsIDB4MDEsIDB4YTIsIDB4MDksIDB4ZTQsIDB4MzMsIDB4ZmYsIDB4NjUsIDB4MmEsIDB4NjAsCisgIDB4MDUsIDB4OGYsIDB4MmEsIDB4NDMsIDB4MzQsIDB4MDEsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4ZmYsIDB4NTQsIDB4MDgsIDB4NjQsIDB4MDgsIDB4ZjUsCisgIDB4NTcsIDB4NjUsIDB4MjUsIDB4NjAsIDB4MDYsIDB4ODUsIDB4NTcsIDB4MjUsIDB4NDMsIDB4MzQsIDB4MDEsIDB4ZWYsIDB4NTQsIDB4MTAsIDB4NjR9fSwKKyB7MHgwNjA2LCA2NCwgeyAweDEwLCAweGY1LCAweDU3LCAweDY1LCAweDI2LCAweDYwLCAweDA2LCAweDg1LCAweDU3LCAweDI2LCAweDQzLCAweDM0LCAweDAxLCAweGVmLCAweDU0LCAweDQwLCAweDY0LAorICAweDQwLCAweGY1LCAweDU3LCAweDY1LCAweDI3LCAweDYwLCAweDA2LCAweDg1LCAweDU3LCAweDI3LCAweDQzLCAweDM0LCAweDAxLCAweGVmLCAweDU0LCAweDIwLAorICAweDY0LCAweDIwLCAweGY1LCAweDU3LCAweDY1LCAweDI4LCAweDYwLCAweDA2LCAweDg1LCAweDU3LCAweDI4LCAweDQzLCAweDM0LCAweDAxLCAweDkwLCAweDdmLAorICAweDlhLCAweGUwLCAweDU0LCAweDQwLCAweDY0LCAweDQwLCAweGY1LCAweDU3LCAweDY1LCAweDJlLCAweDYwLCAweDA2LCAweDg1LCAweDU3LCAweDJlfX0sCisgezB4MDY0NiwgNjQsIHsgMHg0MywgMHgzNCwgMHgwMSwgMHgzMCwgMHgwNywgMHgzNSwgMHhjMiwgMHhhZiwgMHgzMCwgMHgwMiwgMHgxOCwgMHg5MCwgMHg3ZiwgMHhiOCwgMHhlMCwgMHgyMCwgMHhlMSwKKyAgMHgyNywgMHhlNSwgMHgzOSwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHhiNywgMHhmMCwgMHhlNCwgMHhmNSwgMHgzOSwgMHhjMiwgMHgwMiwgMHhjMiwgMHgwNywKKyAgMHg4MCwgMHgxNiwgMHg5MCwgMHg3ZiwgMHhiNiwgMHhlMCwgMHgyMCwgMHhlMSwgMHgwZiwgMHhlNSwgMHgzOSwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHhiOSwKKyAgMHhmMCwgMHhlNCwgMHhmNSwgMHgzOSwgMHhkMiwgMHgwMiwgMHhjMiwgMHgwNywgMHhkMiwgMHhhZiwgMHgyMCwgMHgwNSwgMHgzZCwgMHgzMCwgMHgwM319LAorIHsweDA2ODYsIDY0LCB7IDB4MWUsIDB4OTAsIDB4N2YsIDB4YzYsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MzMsIDB4OTAsIDB4N2UsIDB4NDAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGQsIDB4NzUsIDB4M2EsCisgIDB4MDEsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTAsIDB4ZjUsIDB4NTMsIDB4ZDIsIDB4MDUsIDB4NzUsIDB4MTIsIDB4ZmYsIDB4ODAsIDB4MWMsIDB4OTAsIDB4N2YsCisgIDB4YzgsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MTUsIDB4OTAsIDB4N2QsIDB4YzAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGQsIDB4NzUsIDB4M2EsIDB4MDEsIDB4OTAsCisgIDB4N2YsIDB4YzksIDB4ZTAsIDB4ZjUsIDB4NTMsIDB4ZDIsIDB4MDUsIDB4NzUsIDB4MTIsIDB4ZmYsIDB4MjAsIDB4MTQsIDB4MzMsIDB4MjAsIDB4MDB9fSwKKyB7MHgwNmM2LCA2NCwgeyAweDA2LCAweGU1LCAweDNhLCAweDY1LCAweDUzLCAweDcwLCAweDJhLCAweDMwLCAweDA1LCAweDFhLCAweDMwLCAweDAzLCAweDA5LCAweGU0LCAweDkwLCAweDdmLCAweGM3LAorICAweGYwLCAweGMyLCAweDAzLCAweDgwLCAweDA3LCAweGU0LCAweDkwLCAweDdmLCAweGM5LCAweGYwLCAweGQyLCAweDAzLCAweGMyLCAweDA1LCAweGU0LCAweGY1LAorICAweDUzLCAweGY1LCAweDNhLCAweDMwLCAweDBkLCAweDBhLCAweGMyLCAweDBkLCAweGMyLCAweDAwLCAweDkwLCAweDdmLCAweGJiLCAweDc0LCAweDAxLCAweGYwLAorICAweDMwLCAweDE0LCAweDAzLCAweDAyLCAweDA3LCAweGJmLCAweDIwLCAweDA1LCAweDAzLCAweDAyLCAweDA3LCAweGJmLCAweDMwLCAweDBjLCAweDAzfX0sCisgezB4MDcwNiwgNjQsIHsgMHgwMiwgMHgwNywgMHhiZiwgMHgzMCwgMHgwOSwgMHgwMywgMHgwMiwgMHgwNywgMHhiZiwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHg1NSwgMHgzOCwgMHg2MCwgMHgwMywKKyAgMHgwMiwgMHgwNywgMHhiZiwgMHgzMCwgMHgwMywgMHgwYywgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg0MCwgMHg3NSwgMHg1OCwgMHg3ZSwgMHg3NSwgMHg1OSwgMHg0MCwKKyAgMHg4MCwgMHgwYSwgMHg3ZSwgMHg3ZCwgMHg3ZiwgMHhjMCwgMHg3NSwgMHg1OCwgMHg3ZCwgMHg3NSwgMHg1OSwgMHhjMCwgMHgzMCwgMHgxMCwgMHgxMiwgMHhhZiwKKyAgMHgzYSwgMHgwNSwgMHgzYSwgMHhlNSwgMHg1OSwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1OCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxM319LAorIHsweDA3NDYsIDY0LCB7IDB4OTIsIDB4MWEsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsIDB4ZTUsIDB4NTksIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTgsIDB4ZjUsIDB4ODMsIDB4ZTAsCisgIDB4ZjUsIDB4NTcsIDB4ZTUsIDB4M2EsIDB4YzMsIDB4OTUsIDB4NTMsIDB4NTAsIDB4MmEsIDB4MzAsIDB4MTAsIDB4MTIsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsCisgIDB4ZTUsIDB4NTksIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTgsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGUsIDB4YWYsIDB4M2EsCisgIDB4MDUsIDB4M2EsIDB4ZTUsIDB4NTksIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTgsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MzZ9fSwKKyB7MHgwNzg2LCA2NCwgeyAweGQyLCAweDBiLCAweDgwLCAweDE1LCAweGMyLCAweDBiLCAweDMwLCAweDAzLCAweDA5LCAweGU0LCAweDkwLCAweDdmLCAweGM3LCAweGYwLCAweGMyLCAweDAzLCAweDgwLAorICAweDA3LCAweGU0LCAweDkwLCAweDdmLCAweGM5LCAweGYwLCAweGQyLCAweDAzLCAweDMwLCAweDEwLCAweDA0LCAweGEyLCAweDFhLCAweDkyLCAweDliLCAweGQyLAorICAweDE0LCAweGMyLCAweGFmLCAweDg1LCAweDU3LCAweDk5LCAweDIwLCAweDBiLCAweDBkLCAweDMwLCAweDBkLCAweDBhLCAweGMyLCAweDBkLCAweGMyLCAweDAwLAorICAweDkwLCAweDdmLCAweGJiLCAweDc0LCAweDAxLCAweGYwLCAweGQyLCAweGFmLCAweDIyLCAweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDEyLCAweDBjfX0sCisgezB4MDdjNiwgNjQsIHsgMHhhNCwgMHgwOSwgMHgxYywgMHgwMCwgMHgwOSwgMHg4OSwgMHgwMSwgMHgwOSwgMHhlNiwgMHgwMywgMHgwNywgMHhlMywgMHgwNiwgMHgwOSwgMHgwZCwgMHgwOCwgMHgwOSwKKyAgMHgwMSwgMHgwOSwgMHgwOCwgMHhlOSwgMHgwYSwgMHgwOCwgMHhmOCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwYSwgMHgyNCwgMHg5MCwgMHg3ZiwgMHhlYiwgMHhlMCwKKyAgMHgyNCwgMHhmZSwgMHg2MCwgMHgxYywgMHgxNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgwOCwgMHg3OSwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwYSwKKyAgMHgyNCwgMHg3NCwgMHgwZCwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHg3NCwgMHg4NywgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwYX19LAorIHsweDA4MDYsIDY0LCB7IDB4MmIsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDQsIDB4N2YsIDB4MDIsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDMsIDB4NzUsIDB4ODIsIDB4ZDgsCisgIDB4NzUsIDB4ODMsIDB4MGQsIDB4ZWYsIDB4ZjAsIDB4NzUsIDB4ODIsIDB4ZDEsIDB4NzUsIDB4ODMsIDB4MGQsIDB4ZjAsIDB4NzUsIDB4ODIsIDB4Y2EsIDB4NzUsCisgIDB4ODMsIDB4MGQsIDB4ZjAsIDB4NzUsIDB4ODIsIDB4YzMsIDB4NzUsIDB4ODMsIDB4MGQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4MDQsIDB4NzUsCisgIDB4ODIsIDB4OWUsIDB4NzUsIDB4ODMsIDB4MGQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZWYsIDB4ZTAsIDB4ZmUsIDB4OTAsIDB4N2YsIDB4ZWUsIDB4ZTB9fSwKKyB7MHgwODQ2LCA2NCwgeyAweDdjLCAweDAwLCAweDI0LCAweDAwLCAweGY1LCAweDVhLCAweGVjLCAweDNlLCAweGY1LCAweDU5LCAweDc1LCAweDE1LCAweDBkLCAweDc1LCAweDE2LCAweDk5LCAweDc1LAorICAweDgyLCAweDliLCAweDc1LCAweDgzLCAweDBkLCAweGUwLCAweDc1LCAweDEzLCAweDAwLCAweGY1LCAweDE0LCAweGQzLCAweGU1LCAweDE0LCAweDk1LCAweDVhLAorICAweGU1LCAweDEzLCAweDk1LCAweDU5LCAweDQwLCAweDA2LCAweDg1LCAweDU5LCAweDEzLCAweDg1LCAweDVhLCAweDE0LCAweDEyLCAweDBiLCAweGJhLCAweDAyLAorICAweDBhLCAweDJiLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDBiLCAweDc1LCAweDU2LCAweGZmLCAweDc1LCAweDU3LCAweDBkLCAweDc1fX0sCisgezB4MDg4NiwgNjQsIHsgMHg1OCwgMHhkYywgMHg4MCwgMHgyZCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNCwgMHgwMSwgMHgwYiwgMHg3NSwgMHg1NiwgMHhmZiwgMHg3NSwgMHg1NywgMHgwZCwKKyAgMHg3NSwgMHg1OCwgMHhlMCwgMHg4MCwgMHgxYiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNCwgMHgwMiwgMHgwYiwgMHg3NSwgMHg1NiwgMHhmZiwgMHg3NSwKKyAgMHg1NywgMHgwZCwgMHg3NSwgMHg1OCwgMHhmMCwgMHg4MCwgMHgwOSwgMHg3NSwgMHg1NiwgMHhmZiwgMHg3NSwgMHg1NywgMHgwZSwgMHg3NSwgMHg1OCwgMHgxZSwKKyAgMHg5MCwgMHg3ZiwgMHhlZSwgMHhlMCwgMHg3NSwgMHg1OSwgMHgwMCwgMHhmNSwgMHg1YSwgMHhhZSwgMHg1NywgMHhhZiwgMHg1OCwgMHg4ZSwgMHgxNX19LAorIHsweDA4YzYsIDY0LCB7IDB4OGYsIDB4MTYsIDB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsIDB4OGUsIDB4MTMsIDB4ZjUsIDB4MTQsIDB4ZDMsIDB4OTUsIDB4NWEsCisgIDB4ZTUsIDB4MTMsIDB4OTUsIDB4NTksIDB4NDAsIDB4MDYsIDB4ODUsIDB4NTksIDB4MTMsIDB4ODUsIDB4NWEsIDB4MTQsIDB4MTIsIDB4MGIsIDB4YmEsIDB4MDIsCisgIDB4MGEsIDB4MmIsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGEsCisgIDB4MmIsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MTEsIDB4MDIsIDB4MGEsIDB4MmIsIDB4MTIsIDB4MGMsIDB4MjQsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwOTA2LCA2NCwgeyAweGVhLCAweGUwLCAweGY1LCAweDEwLCAweDAyLCAweDBhLCAweDJiLCAweDkwLCAweDdmLCAweDAwLCAweGU1LCAweDEwLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LAorICAweDAxLCAweGYwLCAweDAyLCAweDBhLCAweDJiLCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweDdmLCAweDYwLCAweDI3LCAweDE0LCAweDYwLCAweDM0LAorICAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDBhLCAweDI0LCAweGEyLCAweDE2LCAweGU0LCAweDMzLCAweGZmLCAweDI1LCAweGUwLCAweGZmLCAweGEyLAorICAweDE4LCAweGU0LCAweDMzLCAweDRmLCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGU0LCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0fX0sCisgezB4MDk0NiwgNjQsIHsgMHgwMiwgMHhmMCwgMHgwMiwgMHgwYSwgMHgyYiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwKKyAgMHhmMCwgMHgwMiwgMHgwYSwgMHgyYiwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwKKyAgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlMCwKKyAgMHg1NCwgMHhmZCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMH19LAorIHsweDA5ODYsIDY0LCB7IDB4MDIsIDB4MGEsIDB4MmIsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTcsIDB4MjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGEsCisgIDB4MmIsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NjQsIDB4MDEsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGEsIDB4MjQsIDB4YzIsIDB4MTYsIDB4MDIsIDB4MGEsCisgIDB4MmIsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4NzYsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsCisgIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzR9fSwKKyB7MHgwOWM2LCA2NCwgeyAweDdmLCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweDU0LCAweDgwLCAweGZmLCAweDEzLCAweDEzLCAweDEzLCAweDU0LCAweDFmLAorICAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDkwLCAweDdmLCAweGQ3LCAweGYwLCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDgwLCAweDQ1LCAweDkwLAorICAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDEwLCAweDI0LCAweDAyLCAweDcwLCAweDM5LCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDY0LAorICAweDAxLCAweDcwLCAweDJhLCAweGQyLCAweDE2LCAweDgwLCAweDJkLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDIwLCAweDkwLCAweDdmfX0sCisgezB4MGEwNiwgNjQsIHsgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwKKyAgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHg3ZiwgMHhiNCwKKyAgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgyMiwgMHhjMiwgMHgxMCwgMHhlNCwgMHhmNSwKKyAgMHgxMCwgMHhmNSwgMHgzNCwgMHhjMiwgMHgwOSwgMHhjMiwgMHgwYywgMHhjMiwgMHgwYiwgMHhjMiwgMHgxNCwgMHhjMiwgMHgwZCwgMHhjMiwgMHgxNX19LAorIHsweDBhNDYsIDY0LCB7IDB4YzIsIDB4MTEsIDB4YzIsIDB4MDcsIDB4YzIsIDB4MTIsIDB4YzIsIDB4MGYsIDB4YzIsIDB4MDgsIDB4ZjUsIDB4MzUsIDB4ZjUsIDB4MzksIDB4ZjUsIDB4NTMsIDB4ZjUsCisgIDB4M2EsIDB4ZjUsIDB4MzMsIDB4ZjUsIDB4MzAsIDB4ZjUsIDB4MmYsIDB4ZjUsIDB4MmUsIDB4ZjUsIDB4MmQsIDB4ZjUsIDB4MmMsIDB4ZjUsIDB4MmIsIDB4ZjUsCisgIDB4MmEsIDB4ZjUsIDB4MjksIDB4ZjUsIDB4MjgsIDB4ZjUsIDB4MjcsIDB4ZjUsIDB4MjYsIDB4ZjUsIDB4MjUsIDB4ZjUsIDB4MjQsIDB4YzIsIDB4MDUsIDB4YzIsCisgIDB4MTcsIDB4YzIsIDB4MTksIDB4YzIsIDB4MTYsIDB4YzIsIDB4MTgsIDB4YzIsIDB4MDQsIDB4ZDIsIDB4MTMsIDB4YzIsIDB4MDYsIDB4YzIsIDB4MDF9fSwKKyB7MHgwYTg2LCA2NCwgeyAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweGQyLCAweGU4LCAweDQzLCAweGQ4LCAweDIwLCAweDkwLCAweDdmLCAweGRlLCAweDc0LCAweDAxLAorICAweGYwLCAweDkwLCAweDdmLCAweGRmLCAweGYwLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGE5LCAweGYwLCAweDkwLAorICAweDdmLCAweGFhLCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFmLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGFlLAorICAweGUwLCAweDQ0LCAweDBmLCAweGYwLCAweDkwLCAweDdmLCAweGFjLCAweDc0LCAweDBlLCAweGYwLCAweGQyLCAweGFmLCAweGQyLCAweGJjLCAweGQyfX0sCisgezB4MGFjNiwgNjQsIHsgMHgxYSwgMHgxMiwgMHgwZiwgMHg3ZCwgMHhjMiwgMHgxNywgMHgzMCwgMHgwNCwgMHgwMywgMHgxMiwgMHgwNCwgMHg0OCwgMHgzMCwgMHgwNCwgMHgyYSwgMHgzMCwgMHgwNiwKKyAgMHgyNywgMHhjMiwgMHgwNiwgMHhlNSwgMHgxMiwgMHg2MCwgMHgxNiwgMHgxNSwgMHgxMiwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHgzMCwgMHhlNiwgMHgwNCwKKyAgMHg3ZiwgMHgwMCwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgyMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlZiwgMHhmMCwgMHg4MCwgMHgwNiwgMHg5MCwgMHg3ZiwgMHg5NiwKKyAgMHg3NCwgMHgyMCwgMHhmMCwgMHgxMiwgMHgwYiwgMHgxNCwgMHg4MCwgMHhjZCwgMHgzMCwgMHgxNywgMHgwNywgMHhjMiwgMHgxNywgMHgxMiwgMHgwN319LAorIHsweDBiMDYsIDY0LCB7IDB4YzAsIDB4ODAsIDB4YzMsIDB4MzAsIDB4MTksIDB4YzAsIDB4YzIsIDB4MTksIDB4MTIsIDB4MGUsIDB4ZGMsIDB4ODAsIDB4YjksIDB4MjIsIDB4ZTUsIDB4MzEsIDB4NjAsCisgIDB4MDIsIDB4MTUsIDB4MzEsIDB4ZTUsIDB4MzksIDB4NjAsIDB4NTUsIDB4NjUsIDB4MzUsIDB4NzAsIDB4NGIsIDB4ZTUsIDB4MzMsIDB4ZjQsIDB4NjAsIDB4MDIsCisgIDB4MDUsIDB4MzMsIDB4ZTUsIDB4MzMsIDB4YzMsIDB4OTUsIDB4NDQsIDB4NDAsIDB4NDMsIDB4YzIsIDB4YWYsIDB4MzAsIDB4MDIsIDB4MWIsIDB4OTAsIDB4N2YsCisgIDB4YjgsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MmQsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZTUsIDB4MzksIDB4ZjAsIDB4YzIsIDB4MDIsIDB4ZTQsIDB4ZjV9fSwKKyB7MHgwYjQ2LCA2NCwgeyAweDM5LCAweGY1LCAweDMzLCAweGY1LCAweDM1LCAweDc1LCAweDEyLCAweGZmLCAweDgwLCAweDE5LCAweDkwLCAweDdmLCAweGI2LCAweGUwLCAweDIwLCAweGUxLCAweDEyLAorICAweDkwLCAweDdmLCAweGI5LCAweGU1LCAweDM5LCAweGYwLCAweGQyLCAweDAyLCAweGU0LCAweGY1LCAweDM5LCAweGY1LCAweDMzLCAweGY1LCAweDM1LCAweDc1LAorICAweDEyLCAweGZmLCAweGQyLCAweGFmLCAweDgwLCAweDA2LCAweDg1LCAweDM5LCAweDM1LCAweGU0LCAweGY1LCAweDMzLCAweGU1LCAweDJjLCAweDYwLCAweDMwLAorICAweDIwLCAweDBmLCAweDA3LCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDMwLCAweGUwLCAweDBmLCAweGU1LCAweDJkLCAweDYwLCAweDA2LCAweGU0fX0sCisgezB4MGI4NiwgNjQsIHsgMHhmNSwgMHgyZCwgMHg0MywgMHgzNCwgMHgwMSwgMHhlNCwgMHhmNSwgMHgzMCwgMHg4MCwgMHgxNCwgMHhlNSwgMHgzMCwgMHhkMywgMHg5NSwgMHg0NSwgMHg1MCwgMHgwZCwKKyAgMHhlNSwgMHgzMCwgMHhiNSwgMHg0NSwgMHgwNiwgMHg3NSwgMHgyZCwgMHgwMSwgMHg0MywgMHgzNCwgMHgwMSwgMHgwNSwgMHgzMCwgMHhjMiwgMHgwZiwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHhkOSwgMHhlMCwgMHgzMCwgMHhlMiwgMHgwNCwgMHg3ZiwgMHgwMCwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgyMCwgMHg5MCwgMHg3ZiwgMHg5NiwKKyAgMHhlZiwgMHhmMCwgMHgyMiwgMHhlNSwgMHgxNCwgMHg0NSwgMHgxMywgMHg2MCwgMHg1NywgMHhhZSwgMHgxMywgMHhhZiwgMHgxNCwgMHhkMywgMHhlZn19LAorIHsweDBiYzYsIDY0LCB7IDB4OTQsIDB4NDAsIDB4ZWUsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDQsIDB4N2UsIDB4MDAsIDB4N2YsIDB4NDAsIDB4YzMsIDB4ZTUsIDB4MTQsIDB4OWYsIDB4ZjUsIDB4MTQsCisgIDB4ZTUsIDB4MTMsIDB4OWUsIDB4ZjUsIDB4MTMsIDB4ZTQsIDB4ZmQsIDB4ZWQsIDB4YzMsIDB4OWYsIDB4ZTQsIDB4OWUsIDB4NTAsIDB4MWYsIDB4ODUsIDB4MTYsCisgIDB4ODIsIDB4ODUsIDB4MTUsIDB4ODMsIDB4ZTAsIDB4ZmMsIDB4NzQsIDB4MDAsIDB4MmQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsCisgIDB4ZWMsIDB4ZjAsIDB4MGQsIDB4MDUsIDB4MTYsIDB4ZTUsIDB4MTYsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MTUsIDB4ODAsIDB4ZGEsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwYzA2LCA2NCwgeyAweGE5LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGFjLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweGVmLCAweGYwLCAweDIyLAorICAweDkwLCAweDdmLCAweGFjLCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweGI1LCAweGYwLCAweDIyLCAweGU0LCAweDkwLCAweDdmLAorICAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweDMwLCAweGYwLCAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweDIwLCAweGYwLCAweDkwLCAweDdmLAorICAweDk0LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweDk3LCAweDc0LCAweDg2fX0sCisgezB4MGM0NiwgNjQsIHsgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NSwgMHg3NCwgMHgwMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwgMHg4NCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhmMCwKKyAgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjYiwgMHhmMCwgMHg3NSwgMHg5OCwgMHg0MCwKKyAgMHg0MywgMHhhOCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHhkZSwgMHg3NCwgMHgxZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZiwgMHg3NCwgMHgwZiwgMHhmMCwgMHhkMiwKKyAgMHgwNCwgMHgyMiwgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwMiwgMHhlNywgMHgyMn19LAorIHsweDBjODYsIDY0LCB7IDB4YmIsIDB4ZmUsIDB4MDIsIDB4ZTMsIDB4MjIsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsCisgIDB4OGEsIDB4ODMsIDB4ZjAsIDB4MjIsIDB4NTAsIDB4MDIsIDB4ZjcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDEsIDB4ZjMsIDB4MjIsIDB4ZDAsIDB4ODMsIDB4ZDAsCisgIDB4ODIsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4NzAsIDB4MTIsIDB4NzQsIDB4MDEsIDB4OTMsIDB4NzAsIDB4MGQsIDB4YTMsIDB4YTMsIDB4OTMsIDB4ZjgsIDB4NzQsCisgIDB4MDEsIDB4OTMsIDB4ZjUsIDB4ODIsIDB4ODgsIDB4ODMsIDB4ZTQsIDB4NzMsIDB4NzQsIDB4MDIsIDB4OTMsIDB4NjgsIDB4NjAsIDB4ZWYsIDB4YTN9fSwKKyB7MHgwY2M2LCA2NCwgeyAweGEzLCAweGEzLCAweDgwLCAweGRmLCAweGU0LCAweDkwLCAweDdmLCAweDk1LCAweGYwLCAweDkwLCAweDdmLCAweDk0LCAweGYwLCAweDkwLCAweDdmLCAweDkzLCAweGYwLAorICAweDkwLCAweDdmLCAweDlkLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDkwLCAweDdmLCAweDk3LCAweGUwLCAweDQ0LCAweDQyLCAweGYwLCAweDkwLCAweDdmLAorICAweDljLCAweDc0LCAweDEwLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk2LCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweDc0LCAweGJlLCAweGYwLCAweDMwLAorICAweDE2LCAweDA0LCAweDdmLCAweDgwLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweDkwLCAweDdmLCAweDk3LCAweGVmLCAweGYwLCAweGU0LCAweDkwfX0sCisgezB4MGQwNiwgNjQsIHsgMHg3ZiwgMHg5NSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhmMCwgMHgyMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHhmMCwgMHhjMCwKKyAgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhjMCwgMHhkMCwgMHg3NSwgMHhkMCwKKyAgMHgwOCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhOSwgMHg3NCwgMHgwMSwgMHhmMCwgMHgxMiwgMHgwYiwgMHhiYSwgMHhkMCwgMHhkMCwgMHhkMCwKKyAgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhmMCwgMHhkMCwgMHhlMCwgMHgzMiwgMHhjMH19LAorIHsweDBkNDYsIDY0LCB7IDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YzQsCisgIDB4ZTQsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsCisgIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgwZDg2LCA2NCwgeyAweDAwLCAweDEyLCAweDAxLCAweDEwLCAweDAxLCAweGZmLCAweGZmLCAweGZmLCAweDQwLCAweGNkLCAweDA2LCAweDFjLCAweDAxLCAweDAxLCAweDAwLCAweDAxLCAweDAyLAorICAweDAwLCAweDAyLCAweDA5LCAweDAyLCAweDQzLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweDA3LAorICAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAxLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAyLCAweDAyLCAweDQwLAorICAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAzLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDgxLCAweDAyLCAweDQwLCAweDAwfX0sCisgezB4MGRjNiwgNjQsIHsgMHgwMSwgMHgwNywgMHgwNSwgMHg4MiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwKKyAgMHg4NCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNCwgMHgwMywgMHgwOSwgMHgwNCwgMHgxMCwgMHgwMywgMHg0YiwgMHgwMCwgMHg2NSwgMHgwMCwgMHg3OSwKKyAgMHgwMCwgMHg3MywgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyZSwgMHgwMywgMHg0YiwgMHgwMCwgMHg2NSwgMHgwMCwgMHg3OSwKKyAgMHgwMCwgMHg3MywgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1NSwgMHgwMCwgMHg1MCwgMHgwMH19LAorIHsweDBlMDYsIDY0LCB7IDB4NTMsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MzEsIDB4MDAsIDB4MzEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmQsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzIsCisgIDB4MDAsIDB4NjksIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MjIsIDB4MDMsIDB4NTUsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MmQsCisgIDB4MDAsIDB4MzUsIDB4MDAsIDB4MzMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4NjEsCisgIDB4MDAsIDB4NzAsIDB4MDAsIDB4NzIsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODN9fSwKKyB7MHgwZTQ2LCA2NCwgeyAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLAorICAweDc0LCAweDAyLCAweGYwLCAweGQyLCAweDA2LCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLAorICAweGUwLCAweDMyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LAorICAweDAwLCAweGQyLCAweDE3LCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDAxLCAweGYwLCAweGQwLCAweDg2LCAweGQwfX0sCisgezB4MGU4NiwgNjQsIHsgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwKKyAgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhkMiwgMHgxOSwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwKKyAgMHg3NCwgMHgwOCwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwKKyAgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMH19LAorIHsweDBlYzYsIDY0LCB7IDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YTksIDB4NzQsIDB4MDIsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsCisgIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4MTIsIDB4MGMsIDB4Y2EsIDB4MTIsIDB4MGYsIDB4YjMsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4MzAsCisgIDB4ZTcsIDB4MTIsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4N2YsIDB4MGQsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDMsIDB4OTAsIDB4N2YsIDB4ZDYsCisgIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4MTIsIDB4MGMsIDB4MjQsIDB4MjIsIDB4MDAsIDB4MDIsIDB4MGUsIDB4NjksIDB4MDAsIDB4MDIsIDB4MGV9fSwKKyB7MHgwZjA2LCA2NCwgeyAweDQyLCAweDAwLCAweDAyLCAweDBkLCAweDQ1LCAweDAwLCAweDAyLCAweDBlLCAweDkwLCAweDAwLCAweDAyLCAweDBmLCAweDEwLCAweDAwLCAweDAyLCAweDBmLCAweDE0LAorICAweDAwLCAweDAyLCAweDBkLCAweDEyLCAweDAwLCAweDAyLCAweDBmLCAweDFjLCAweDAwLCAweDAyLCAweDBlLCAweGI3LCAweDAwLCAweDAyLCAweDBmLCAweDI0LAorICAweDAwLCAweDAyLCAweDBmLCAweDMzLCAweDAwLCAweDAyLCAweDBmLCAweDJjLCAweDAwLCAweDAyLCAweDBmLCAweDU4LCAweGMwLCAweGUwLCAweGMwLCAweDgzLAorICAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweDUzLCAweDkxLCAweGVmLCAweDkwfX0sCisgezB4MGY0NiwgNjQsIHsgMHg3ZiwgMHhhOSwgMHg3NCwgMHgwNCwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwKKyAgMHgzMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwKKyAgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhOSwgMHg3NCwgMHgwOCwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwKKyAgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHhlMCwgMHg0NH19LAorIHsweDBmODYsIDYxLCB7IDB4MDgsIDB4ZjAsIDB4MzAsIDB4MWEsIDB4MDQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4N2YsIDB4ZjQsIDB4N2UsIDB4MDEsIDB4MTIsIDB4MDAsIDB4MDMsIDB4OTAsCisgIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4MjIsIDB4NzQsIDB4MDAsIDB4ZjUsIDB4ODYsIDB4OTAsCisgIDB4ZmQsIDB4YTUsIDB4N2MsIDB4MDUsIDB4YTMsIDB4ZTUsIDB4ODIsIDB4NDUsIDB4ODMsIDB4NzAsIDB4ZjksIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsCisgIDB4NDQsIDB4ODAsIDB4ZjAsIDB4NDMsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjJ9fSwKKyB7MHhmZmZmLAkwLAl7MHgwMH19Cit9OworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuUyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxOGZlNjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuUwpAQCAtMCwwICsxLDExMjQgQEAKKy8qICAkSWQ6IGxvb3Aucyx2IDEuMjMgMjAwMC8wMy8yMCAwOTo0OTowNiB3YXJuZXIgRXhwICQKKyAqIAorICogIEZpcm13YXJlIGZvciB0aGUgS2V5c3BhbiBQREEgU2VyaWFsIEFkYXB0ZXIsIGEgVVNCIHNlcmlhbCBwb3J0IGJhc2VkIG9uCisgKiAgdGhlIEV6VVNCIG1pY3JvY29udHJvbGxlci4KKyAqIAorICogIChDKSBDb3B5cmlnaHQgMjAwMCBCcmlhbiBXYXJuZXIgPHdhcm5lckBsb3RoYXIuY29tPgorICogCisgKiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIAlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogICJLZXlzcGFuIFBEQSBTZXJpYWwgQWRhcHRlciIgaXMgcHJvYmFibHkgYSBjb3B5cmlnaHQgb2YgS2V5c3BhbiwgdGhlCisgKiAgY29tcGFueS4KKyAqIAorICogIFRoaXMgc2VyaWFsIGFkYXB0ZXIgaXMgYmFzaWNhbGx5IGFuIEV6VVNCIGNoaXAgYW5kIGFuIFJTLTIzMiBsaW5lIGRyaXZlcgorICogIGluIGEgbGl0dGxlIHdpZGdldCB0aGF0IGhhcyBhIERCLTkgb24gb25lIGVuZCBhbmQgYSBVU0IgcGx1ZyBvbiB0aGUgb3RoZXIuCisgKiAgSXQgdXNlcyB0aGUgRXpVU0IncyBpbnRlcm5hbCBVQVJUMCAodXNpbmcgdGhlIHBpbnMgZnJvbSBQb3J0IEMpIGFuZCB0aW1lcjIKKyAqICBhcyBhIGJhdWQtcmF0ZSBnZW5lcmF0b3IuIFRoZSB3aXJpbmcgaXM6CisgKiAgIFBDMC9SeEQwIDwtIHJ4ZCAoREI5IHBpbiAyKSAgICAgICAgIFBDNCA8LSBkc3IgcGluIDYKKyAqICAgUEMxL1R4RDAgLT4gdHhkIHBpbiAzICAgICAgICAgICAgICAgUEM1IDwtIHJpICBwaW4gOQorICogICBQQzIgICAgICAtPiBydHMgcGluIDcgICAgICAgICAgICAgICBQQzYgPC0gZGNkIHBpbiAxCisgKiAgIFBDMyAgICAgIDwtIGN0cyBwaW4gOCAgICAgICAgICAgICAgIFBDNyAtPiBkdHIgcGluIDQKKyAqICAgUEIxIC0+IGxpbmUgZHJpdmVyIHN0YW5kYnkKKyAqCisgKiAgVGhlIEV6VVNCIHJlZ2lzdGVyIGNvbnN0YW50cyBiZWxvdyBjb21lIGZyb20gdGhlaXIgZXhjZWxsZW50IGRvY3VtZW50YXRpb24KKyAqICBhbmQgc2FtcGxlIGNvZGUgKHdoaWNoIHVzZWQgdG8gYmUgYXZhaWxhYmxlIGF0IHd3dy5hbmNob3JjaGlwcy5jb20sIGJ1dAorICogIHRoYXQgaGFzIG5vdyBiZWVuIGFic29yYmVkIGludG8gQ3lwcmVzcycgc2l0ZSBhbmQgdGhlIENELVJPTSBjb250ZW50cworICogIGRvbid0IGFwcGVhciB0byBiZSBhdmFpbGFibGUgb25saW5lIGFueW1vcmUpLiBJZiB3ZSBnZXQgbXVsdGlwbGUKKyAqICBFelVTQi1iYXNlZCBkcml2ZXJzIGludG8gdGhlIGtlcm5lbCwgaXQgbWlnaHQgYmUgdXNlZnVsIHRvIHB1bGwgdGhlbSBvdXQKKyAqICBpbnRvIGEgc2VwYXJhdGUgLmggZmlsZS4KKyAqIAorICogVEhFT1JZIE9GIE9QRVJBVElPTjoKKyAqCisgKiAgIFRoZXJlIGFyZSB0d28gMjU2LWJ5dGUgcmluZyBidWZmZXJzLCBvbmUgZm9yIHR4LCBvbmUgZm9yIHJ4LgorICoKKyAqICAgRVAyb3V0IGlzIHB1cmUgdHggZGF0YS4gV2hlbiBpdCBhcHBlYXJzLCB0aGUgZGF0YSBpcyBjb3BpZWQgaW50byB0aGUgdHgKKyAqICAgcmluZyBhbmQgc2VyaWFsIHRyYW5zbWlzc2lvbiBpcyBzdGFydGVkIGlmIGl0IHdhc24ndCBhbHJlYWR5IHJ1bm5pbmcuIFRoZQorICogICAidHggYnVmZmVyIGVtcHR5IiBpbnRlcnJ1cHQgbWF5IGtpY2sgb2ZmIGFub3RoZXIgY2hhcmFjdGVyIGlmIHRoZSByaW5nCisgKiAgIHN0aWxsIGhhcyBkYXRhLiBJZiB0aGUgaG9zdCBpcyB0eC1ibG9ja2VkIGJlY2F1c2UgdGhlIHJpbmcgZmlsbGVkIHVwLAorICogICBpdCB3aWxsIHJlcXVlc3QgYSAidHggdW50aHJvdHRsZSIgaW50ZXJydXB0LiBJZiBzZW5kaW5nIGEgc2VyaWFsIGNoYXJhY3RlcgorICogICBlbXB0aWVzIHRoZSByaW5nIGJlbG93IHRoZSBkZXNpcmVkIHRocmVzaG9sZCwgd2Ugc2V0IGEgYml0IHRoYXQgd2lsbCBzZW5kCisgKiAgIHVwIHRoZSB0eCB1bnRocm90dGxlIG1lc3NhZ2UgYXMgc29vbiBhcyB0aGUgcnggYnVmZmVyIGJlY29tZXMgZnJlZS4KKyAqCisgKiAgIEVQMmluIChpbnRlcnJ1cHQpIGlzIHVzZWQgdG8gc2VuZCBib3RoIHJ4IGNoYXJzIGFuZCByeCBzdGF0dXMgbWVzc2FnZXMKKyAqICAgKG9ubHkgInR4IHVudGhyb3R0bGUiIGF0IHRoaXMgdGltZSkgYmFjayB1cCB0byB0aGUgaG9zdC4gVGhlIGZpcnN0IGJ5dGUKKyAqICAgb2YgdGhlIHJ4IG1lc3NhZ2UgaW5kaWNhdGVzIGRhdGEgKDApIG9yIHN0YXR1cyBtc2cgKDEpLiBTdGF0dXMgbWVzc2FnZXMKKyAqICAgYXJlIHNlbnQgYmVmb3JlIGFueSBkYXRhLgorICoKKyAqICAgSW5jb21pbmcgc2VyaWFsIGNoYXJhY3RlcnMgYXJlIHB1dCBpbnRvIHRoZSByeCByaW5nIGJ5IHRoZSBzZXJpYWwKKyAqICAgaW50ZXJydXB0LCBhbmQgdGhlIEVQMmluIGJ1ZmZlciBzZW50IGlmIGl0IHdhc24ndCBhbHJlYWR5IGluIHRyYW5zaXQuCisgKiAgIFdoZW4gdGhlIEVQMmluIGJ1ZmZlciByZXR1cm5zLCB0aGUgaW50ZXJydXB0IHByb21wdHMgdXMgdG8gc2VuZCBtb3JlCisgKiAgIHJ4IGNoYXJzIChvciBzdGF0dXMgbWVzc2FnZXMpIGlmIHRoZXkgYXJlIHBlbmRpbmcuCisgKgorICogICBEZXZpY2UgY29udHJvbCBoYXBwZW5zIHRocm91Z2ggInZlbmRvciBzcGVjaWZpYyIgY29udHJvbCBtZXNzYWdlcyBvbiBFUDAuCisgKiAgIEFsbCBtZXNzYWdlcyBhcmUgZGVzdGluZWQgZm9yIHRoZSAiSW50ZXJmYWNlIiAod2l0aCB0aGUgaW5kZXggYWx3YXlzIDAsCisgKiAgIHNvIHRoYXQgaWYgdGhlaXIgdHdvLXBvcnQgZGV2aWNlIG1pZ2h0IHNvbWVkYXkgdXNlIHNpbWlsYXIgZmlybXdhcmUsIHdlCisgKiAgIGNhbiB1c2UgaW5kZXg9MSB0byByZWZlciB0byB0aGUgc2Vjb25kIHBvcnQpLiBUaGUgbWVzc2FnZXMgZGVmaW5lZCBhcmU6CisgKgorICogICAgYlJlcXVlc3QgPSAwIDogc2V0IGJhdWQvYml0cy9wYXJpdHkKKyAqICAgICAgICAgICAgICAgMSA6IHVudXNlZAorICogICAgICAgICAgICAgICAyIDogcmVzZXJ2ZWQgZm9yIHNldHRpbmcgSFcgZmxvdyBjb250cm9sIChDVFNSVFMpCisgKiAgICAgICAgICAgICAgIDMgOiBnZXQvc2V0ICJtb2RlbSBpbmZvIiAocGluIHN0YXRlczogRFRSLCBSVFMsIERDRCwgUkksIGV0YykKKyAqICAgICAgICAgICAgICAgNCA6IHNldCBicmVhayAob24vb2ZmKQorICogICAgICAgICAgICAgICA1IDogcmVzZXJ2ZWQgZm9yIHJlcXVlc3RpbmcgaW50ZXJydXB0cyBvbiBwaW4gc3RhdGUgY2hhbmdlCisgKiAgICAgICAgICAgICAgIDYgOiBxdWVyeSBidWZmZXIgcm9vbSBvciBjaGFycyBpbiB0eCBidWZmZXIKKyAqICAgICAgICAgICAgICAgNyA6IHJlcXVlc3QgdHggdW50aHJvdHRsZSBpbnRlcnJ1cHQKKyAqCisgKiAgVGhlIGhvc3Qtc2lkZSBkcml2ZXIgaXMgc2V0IHRvIHJlY29nbml6ZSB0aGUgZGV2aWNlIElEIHZhbHVlcyBzdGFzaGVkIGluCisgKiAgc2VyaWFsIEVFUFJPTSAoMHgwNmNkLCAweDAxMDMpLCBwcm9ncmFtIHRoaXMgZmlybXdhcmUgaW50byBwbGFjZSwgdGhlbgorICogIHN0YXJ0IGl0IHJ1bm5pbmcuIFRoaXMgZmlybXdhcmUgd2lsbCB1c2UgRXpVU0IncyAicmVudW1lcmF0aW9uIiB0cmljayBieQorICogIHNpbXVsYXRpbmcgYSBidXMgZGlzY29ubmVjdCwgdGhlbiByZWNvbm5lY3Qgd2l0aCBhIGRpZmZlcmVudCBkZXZpY2UgSUQKKyAqICAoZW5jb2RlZCBpbiB0aGUgZGVzY19kZXZpY2UgZGVzY3JpcHRvciBiZWxvdykuIFRoZSBob3N0IGRyaXZlciB0aGVuCisgKiAgcmVjb2duaXplcyB0aGUgbmV3IGRldmljZSBJRCBhbmQgZ2x1ZXMgaXQgdG8gdGhlIHJlYWwgc2VyaWFsIGRyaXZlciBjb2RlLgorICoKKyAqIFVTRUZVTCBET0NTOgorICogIEV6VVNCIFRlY2huaWNhbCBSZWZlcmVuY2UgTWFudWFsOiA8aHR0cDovL3d3dy5hbmNob3JjaGlwcy5jb20+CisgKiAgODA1MSBtYW51YWxzOiBldmVyeXdoZXJlLCBidXQgdHJ5IHd3dy5kYWxzZW1pLmNvbSBiZWNhdXNlIHRoZSBFelVTQiBpcworICogICBiYXNpY2FsbHkgdGhlIERhbGxhcyBlbmhhbmNlZCA4MDUxIGNvZGUuIFJlbWVtYmVyIHRoYXQgdGhlIEV6VVNCIElPIHBvcnRzCisgKiAgIHVzZSB0b3RhbGx5IGRpZmZlcmVudCByZWdpc3RlcnMhCisgKiAgVVNCIDEuMSBzcGVjOiB3d3cudXNiLm9yZworICoKKyAqIEhPVyBUTyBCVUlMRDoKKyAqICBnY2MgLXggYXNzZW1ibGVyLXdpdGgtY3BwIC1QIC1FIC1vIGtleXNwYW5fcGRhLmFzbSBrZXlzcGFuX3BkYS5zCisgKiAgYXMzMSAtbCBrZXlzcGFuX3BkYS5hc20KKyAqICBtdiBrZXlzcGFuX3BkYS5vYmoga2V5c3Bhbl9wZGEuaGV4CisgKiAgcGVybCBlenVzYl9jb252ZXJ0LnBsIGtleXNwYW5fcGRhIDwga2V5c3Bhbl9wZGEuaGV4ID4ga2V5c3Bhbl9wZGFfZncuaAorICogR2V0IGFzMzEgZnJvbSA8aHR0cDovL3d3dy5wanJjLmNvbS90ZWNoLzgwNTEvaW5kZXguaHRtbD4sIGFuZCBoYWNrIG9uIGl0CisgKiBhIGJpdCB0byBtYWtlIGl0IGJ1aWxkLgorICoKKyAqIFRIQU5LUzoKKyAqICBHcmVnIEtyb2FoLUhhcnRtYW4sIGZvciBjb29yZGluYXRpbmcgdGhlIHdob2xlIHVzYi1zZXJpYWwgdGhpbmcuCisgKiAgQW5jaG9yQ2hpcHMsIGZvciBtYWtpbmcgc3VjaCBhbiBpbmNyZWRpYmx5IHVzZWZ1bCBsaXR0bGUgbWljcm9jb250cm9sbGVyLgorICogIEtleVNwYW4sIGZvciBtYWtpbmcgYSBoYW5keSwgY2hlYXAgKCQ0MCkgd2lkZ2V0IHRoYXQgd2FzIHNvIGVhc3kgdG8gdGFrZQorICogICAgICAgICAgIGFwYXJ0IGFuZCB0cmFjZSB3aXRoIGFuIG9obW1ldGVyLgorICoKKyAqIFRPRE86CisgKiAgbG90cy4gZ3JlcCBmb3IgVE9ETy4gSW50ZXJydXB0IHNhZmV0eSBuZWVkcyBzdHJlc3MtdGVzdGluZy4gQmV0dGVyIGZsb3cKKyAqICBjb250cm9sLiBJbnRlcnJ1cHRpbmcgaG9zdCB1cG9uIGNoYW5nZSBpbiBEQ0QsIGV0YywgY291bnRpbmcgdHJhbnNpdGlvbnMuCisgKiAgTmVlZCB0byBmaW5kIGEgc2FmZSBkZXZpY2UgaWQgdG8gdXNlICh0aGUgb25lIHVzZWQgYnkgdGhlIEtleXNwYW4gZmlybXdhcmUKKyAqICB1bmRlciBXaW5kb3dzIHdvdWxkIGJlIGlkZWFsLi4gY2FuIGFueW9uZSBmaWd1cmUgb3V0IHdoYXQgaXQgaXM/KS4gUGFyaXR5LgorICogIE1vcmUgYmF1ZCByYXRlcy4gT2gsIGFuZCB0aGUgc3RyaW5nLWRlc2NyaXB0b3ItbGVuZ3RoIHNpbGljb24gYnVnCisgKiAgd29ya2Fyb3VuZCBzaG91bGQgYmUgaW1wbGVtZW50ZWQsIGJ1dCBJJ20gbGF6eSwgYW5kIHRoZSBjb25zZXF1ZW5jZSBpcworICogIHRoYXQgdGhlIGRldmljZSBuYW1lIHN0cmluZ3MgdGhhdCBzaG93IHVwIGluIHlvdXIga2VybmVsIGxvZyB3aWxsIGhhdmUKKyAqICBsb3RzIG9mIHRyYWlsaW5nIGJpbmFyeSBnYXJiYWdlIGluIHRoZW0gKGFwcGVhcnMgYXMgPz8/PykuIERldmljZSBzdHJpbmdzCisgKiAgc2hvdWxkIGJlIG1hZGUgbW9yZSBhY2N1cmF0ZS4KKyAqCisgKiBRdWVzdGlvbnMsIGJ1Z3MsIHBhdGNoZXMgdG8gQnJpYW4uCisgKgorICogIC1CcmlhbiBXYXJuZXIgPHdhcm5lckBsb3RoYXIuY29tPgorICoKKyAqLworCQorI2RlZmluZSBISUdIKHgpICgoKHgpICYgMHhmZjAwKSAvIDI1NikKKyNkZWZpbmUgTE9XKHgpICgoeCkgJiAweGZmKQorCisjZGVmaW5lIGRwbDEgMHg4NAorI2RlZmluZSBkcGgxIDB4ODUKKyNkZWZpbmUgZHBzIDB4ODYKKworOzs7IG91ciBiaXQgYXNzaWdubWVudHMKKyNkZWZpbmUgVFhfUlVOTklORyAwCisjZGVmaW5lIERPX1RYX1VOVEhST1RUTEUgMQorCQorCTs7IHN0YWNrIGZyb20gMHg2MCB0byAweDdmOiBzaG91bGQgcmVhbGx5IHNldCBTUCB0byAweDYwLTEsIG5vdCAweDYwCisjZGVmaW5lIFNUQUNLICMweDYwLTEKKworI2RlZmluZSBFWElGIDB4OTEKKyNkZWZpbmUgRUlFIDB4ZTgKKwkuZmxhZyBFVVNCLCBFSUUuMAorCS5mbGFnIEVTMCwgSUUuNAorCisjZGVmaW5lIEVQMENTICMweDdmYjQKKyNkZWZpbmUgRVAwU1RBTExiaXQgIzB4MDEKKyNkZWZpbmUgSU4wQlVGICMweDdmMDAKKyNkZWZpbmUgSU4wQkMgIzB4N2ZiNQorI2RlZmluZSBPVVQwQlVGICMweDdlYzAKKyNkZWZpbmUgT1VUMEJDICMweDdmYzUJCQorI2RlZmluZSBJTjJCVUYgIzB4N2UwMAorI2RlZmluZSBJTjJCQyAjMHg3ZmI5CisjZGVmaW5lIElOMkNTICMweDdmYjgKKyNkZWZpbmUgT1VUMkJDICMweDdmYzkKKyNkZWZpbmUgT1VUMkNTICMweDdmYzgKKyNkZWZpbmUgT1VUMkJVRiAjMHg3ZGMwCisjZGVmaW5lIElONEJVRiAjMHg3ZDAwCisjZGVmaW5lIElONEJDICMweDdmYmQKKyNkZWZpbmUgSU40Q1MgIzB4N2ZiYworI2RlZmluZSBPRUIgIzB4N2Y5ZAorI2RlZmluZSBPVVRCICMweDdmOTcKKyNkZWZpbmUgT0VDICMweDdmOWUKKyNkZWZpbmUgT1VUQyAjMHg3Zjk4CisjZGVmaW5lIFBJTlNDICMweDdmOWIKKyNkZWZpbmUgUE9SVENDRkcgIzB4N2Y5NQorI2RlZmluZSBJTjA3SVJRICMweDdmYTkKKyNkZWZpbmUgT1VUMDdJUlEgIzB4N2ZhYQorI2RlZmluZSBJTjA3SUVOICMweDdmYWMKKyNkZWZpbmUgT1VUMDdJRU4gIzB4N2ZhZAorI2RlZmluZSBVU0JJUlEgIzB4N2ZhYgorI2RlZmluZSBVU0JJRU4gIzB4N2ZhZQorI2RlZmluZSBVU0JCQVYgIzB4N2ZhZgorI2RlZmluZSBVU0JDUyAjMHg3ZmQ2CisjZGVmaW5lIFNVRFBUUkggIzB4N2ZkNAorI2RlZmluZSBTVURQVFJMICMweDdmZDUKKyNkZWZpbmUgU0VUVVBEQVQgIzB4N2ZlOAorCQkKKwk7OyB1c2IgaW50ZXJydXB0IDogZW5hYmxlIGlzIEVJRS4wICgweGU4KSwgZmxhZyBpcyBFWElGLjQgKDB4OTEpCisKKwkub3JnIDAKKwlsam1wIHN0YXJ0CisJOzsgaW50ZXJydXB0IHZlY3RvcnMKKwkub3JnIDIzSAorCWxqbXAgc2VyaWFsX2ludAorCS5ieXRlIDAKKwkKKwkub3JnIDQzSAorCWxqbXAgVVNCX0p1bXBfVGFibGUKKwkuYnl0ZSAwCQkJOyBmaWxsZWQgaW4gYnkgdGhlIFVTQiBjb3JlCisKKzs7OyBsb2NhbCB2YXJpYWJsZXMuIFRoZXNlIGFyZSBub3QgaW5pdGlhbGl6ZWQgcHJvcGVybHk6IGRvIGl0IGJ5IGhhbmQuCisJLm9yZyAzMEgKK3J4X3JpbmdfaW46CS5ieXRlIDAKK3J4X3Jpbmdfb3V0OgkuYnl0ZSAwCit0eF9yaW5nX2luOgkuYnl0ZSAwCit0eF9yaW5nX291dDoJLmJ5dGUgMAordHhfdW50aHJvdHRsZV90aHJlc2hvbGQ6CS5ieXRlIDAKKwkJCisJLm9yZyAweDEwMEgJCTsgd2FudHMgdG8gYmUgb24gYSBwYWdlIGJvdW5kYXJ5CitVU0JfSnVtcF9UYWJsZToKKwlsam1wCUlTUl9TdWRhdgk7IFNldHVwIERhdGEgQXZhaWxhYmxlCisJLmJ5dGUgMAorCWxqbXAJMAkJOyBTdGFydCBvZiBGcmFtZQorCS5ieXRlIDAKKwlsam1wCTAJCTsgU2V0dXAgRGF0YSBMb2FkaW5nCisJLmJ5dGUgMAorCWxqbXAJMAkJOyBHbG9iYWwgU3VzcGVuZAorCS5ieXRlIAkwCisJbGptcAkwCQk7IFVTQiBSZXNldCAgCQorCS5ieXRlCTAKKwlsam1wCTAJCTsgUmVzZXJ2ZWQKKwkuYnl0ZQkwCisJbGptcAkwCQk7IEVuZCBQb2ludCAwIEluCisJLmJ5dGUJMAorCWxqbXAJMAkJOyBFbmQgUG9pbnQgMCBPdXQKKwkuYnl0ZQkwCisJbGptcAkwCQk7IEVuZCBQb2ludCAxIEluCisJLmJ5dGUJMAorCWxqbXAJMAkJOyBFbmQgUG9pbnQgMSBPdXQKKwkuYnl0ZQkwCisJbGptcAlJU1JfRXAyaW4KKwkuYnl0ZQkwCisJbGptcAlJU1JfRXAyb3V0CisJLmJ5dGUJMAorCisKKwkub3JnIDB4MjAwCisJCQorc3RhcnQ6CW1vdiBTUCxTVEFDSy0xIDsgc2V0IHN0YWNrCisJOzsgY2xlYXIgbG9jYWwgdmFyaWFibGVzCisJY2xyIGEKKwltb3YgdHhfcmluZ19pbiwgYQorCW1vdiB0eF9yaW5nX291dCwgYQorCW1vdiByeF9yaW5nX2luLCBhCisJbW92IHJ4X3Jpbmdfb3V0LCBhCisJbW92IHR4X3VudGhyb3R0bGVfdGhyZXNob2xkLCBhCisJY2xyIFRYX1JVTk5JTkcKKwljbHIgRE9fVFhfVU5USFJPVFRMRQorCQorCTs7IGNsZWFyIGZpZm8gd2l0aCAiZmUiCisJbW92IHIxLCAwCisJbW92IGEsICMweGZlCisJbW92IGRwdHIsICN0eF9yaW5nCitjbGVhcl90eF9yaW5nX2xvb3A6CisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJZGpueiByMSwgY2xlYXJfdHhfcmluZ19sb29wCisKKwltb3YgYSwgIzB4ZmQKKwltb3YgZHB0ciwgI3J4X3JpbmcKK2NsZWFyX3J4X3JpbmdfbG9vcDoKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwlkam56IHIxLCBjbGVhcl9yeF9yaW5nX2xvb3AKKworOzs7IHR1cm4gb24gdGhlIFJTLTIzMiBkcml2ZXIgY2hpcCAoYnJpbmcgdGhlIFNUQU5EQlkgcGluIGxvdykKKwk7OyBzZXQgT0VCLjEKKwltb3YgYSwgIzAySAorCW1vdiBkcHRyLE9FQgorCW1vdnggQGRwdHIsYQorCTs7IGNsZWFyIFBCMQorCW1vdiBhLCAjMDBICisJbW92IGRwdHIsT1VUQgorCW1vdnggQGRwdHIsYQorCTs7IHNldCBPRUMuWzEyN10KKwltb3YgYSwgIzB4ODYKKwltb3YgZHB0cixPRUMKKwltb3Z4IEBkcHRyLGEKKwk7OyBzZXQgUE9SVENDRkcuWzAxXSB0byByb3V0ZSBUeEQwLFJ4RDAgdG8gc2VyaWFsIHBvcnQKKwltb3YgZHB0ciwgUE9SVENDRkcKKwltb3YgYSwgIzB4MDMKKwltb3Z4IEBkcHRyLCBhCisJCisJOzsgc2V0IHVwIGludGVycnVwdHMsIGF1dG92ZWN0b3JpbmcKKwltb3YgZHB0ciwgVVNCQkFWCisJbW92eCBhLEBkcHRyCisJc2V0YiBhY2MuMAkJOyBBVkVOIGJpdCB0byAwCisJbW92eCBAZHB0ciwgYQorCisJbW92IGEsIzB4MDEJCTsgZW5hYmxlIFNVREFWOglzZXR1cCBkYXRhIGF2YWlsYWJsZSAoZm9yIGVwMCkKKwltb3YgZHB0ciwgVVNCSVJRCisJbW92eCBAZHB0ciwgYQkJOyBjbGVhciBTVURBVkkKKwltb3YgZHB0ciwgVVNCSUVOCisJbW92eCBAZHB0ciwgYQorCQorCW1vdiBkcHRyLCBJTjA3SUVOCisJbW92IGEsIzB4MDQJCTsgZW5hYmxlIElOMiBpbnQKKwltb3Z4IEBkcHRyLCBhCisJCisJbW92IGRwdHIsIE9VVDA3SUVOCisJbW92IGEsIzB4MDQJCTsgZW5hYmxlIE9VVDIgaW50CisJbW92eCBAZHB0ciwgYQorCW1vdiBkcHRyLCBPVVQyQkMKKwltb3Z4IEBkcHRyLCBhCQk7IGFybSBPVVQyCisKKwltb3YgYSwgIzB4ODQJCTsgdHVybiBvbiBSVFMsIERUUgorCW1vdiBkcHRyLE9VVEMKKwltb3Z4IEBkcHRyLCBhCisJOzsgc2V0dXAgdGhlIHNlcmlhbCBwb3J0LiA5NjAwIDhOMS4KKwltb3YgYSwjMDEwMTAwMTEJCTsgbW9kZSAxLCBlbmFibGUgcngsIGNsZWFyIGludAorCW1vdiBTQ09OLCBhCisJOzsgIHVzaW5nIHRpbWVyMiwgaW4gMTYtYml0IGJhdWQtcmF0ZS1nZW5lcmF0b3IgbW9kZQorCTs7ICAgKHh0YWwgMTJNSHosIGludGVybmFsIGZvc2MgMjRNSHopCisJOzsgIFJDQVAySCxSQ0FQMkwgPSA2NTUzNiAtIGZvc2MvKDMyKmJhdWQpCisJOzsgIDU3NjAwOiAweEZGRjIuRiwgc2F5IDB4RkZGMworCTs7ICAgOTYwMDogMHhGRkIxLkUsIHNheSAweEZGQjIKKwk7OyAgICAzMDA6IDB4RjYzQworI2RlZmluZSBCQVVEIDk2MDAKKyNkZWZpbmUgQkFVRF9USU1FT1VUKHJhdGUpICg2NTUzNiAtICgyNCAqIDEwMDAgKiAxMDAwKSAvICgzMiAqIHJhdGUpKQorI2RlZmluZSBCQVVEX0hJR0gocmF0ZSkgSElHSChCQVVEX1RJTUVPVVQocmF0ZSkpCisjZGVmaW5lIEJBVURfTE9XKHJhdGUpIExPVyhCQVVEX1RJTUVPVVQocmF0ZSkpCisJCQorCW1vdiBUMkNPTiwgIzAzMGgJOyByY2xrPTEsdGNsaz0xLGNwPTAsdHIyPTAoZW5hYmxlIGxhdGVyKQorCW1vdiByMywgIzUKKwlhY2FsbCBzZXRfYmF1ZAorCXNldGIgVFIyCisJbW92IFNDT04sICMwNTBoCisJCisjaWYgMAorCW1vdiByMSwgIzB4NDAKKwltb3YgYSwgIzB4NDEKK3NlbmQ6CQorCW1vdiBTQlVGLCBhCisJaW5jIGEKKwlhbmwgYSwgIzB4M0YKKwlvcmwgYSwgIzB4NDAKKzsJeHJsIGEsICMweDAyCit3YWl0MToJCisJam5iIFRJLCB3YWl0MQorCWNsciBUSQorCWRqbnogcjEsIHNlbmQKKztkb25lOglzam1wIGRvbmUKKworI2VuZGlmCisJCisJc2V0YiBFVVNCCisJc2V0YiBFQQorCXNldGIgRVMwCisJO2FjYWxsIGR1bXBfc3RhdAorCisJOzsgaGV5LCB3aGF0IHNheSB3ZSBSRU5VTUVSQVRFISAoVFJNIHAuNjIpCisJbW92IGEsICMwCisJbW92IGRwcywgYQorCW1vdiBkcHRyLCBVU0JDUworCW1vdiBhLCAjMHgwMgkJOyBESVNDT049MCwgRElTQ09FPTAsIFJFTlVNPTEKKwltb3Z4IEBkcHRyLCBhCisJOzsgbm93IHByZXNlbmNlIHBpbiBpcyBmbG9hdGluZywgc2ltdWxhdGluZyBkaXNjb25uZWN0LiB3YWl0IDAuNXMKKwltb3YgcjEsICM0NgorcmVudW1fd2FpdDE6CisJbW92IHIyLCAjMAorcmVudW1fd2FpdDI6CisJbW92IHIzLCAjMAorcmVudW1fd2FpdDM6CisJZGpueiByMywgcmVudW1fd2FpdDMKKwlkam56IHIyLCByZW51bV93YWl0MgorCWRqbnogcjEsIHJlbnVtX3dhaXQxCTsgd2FpdCBhYm91dCBuKigyNTZeMikgNk1IeiBjbG9ja3MKKwltb3YgYSwgIzB4MDYJCTsgRElTQ09OPTAsIERJU0NPRT0xLCBSRU5VTT0xCisJbW92eCBAZHB0ciwgYQorCTs7IHdlIGFyZSBiYWNrIG9ubGluZS4gdGhlIGhvc3QgZGV2aWNlIHdpbGwgbm93IHJlLXF1ZXJ5IHVzCisJCisJCittYWluOglzam1wIG1haW4KKworCQorCitJU1JfU3VkYXY6CisJcHVzaCBkcHMKKwlwdXNoIGRwbAorCXB1c2ggZHBoCisJcHVzaCBkcGwxCisJcHVzaCBkcGgxCisJcHVzaCBhY2MKKwltb3YgYSxFWElGCisJY2xyIGFjYy40CisJbW92IEVYSUYsYQkJOyBjbGVhciBJTlQyIGZpcnN0CisJbW92IGRwdHIsIFVTQklSUQk7IGNsZWFyIFVTQiBpbnQKKwltb3YgYSwjMDFoCisJbW92eCBAZHB0cixhCisKKwk7OyBnZXQgcmVxdWVzdCB0eXBlCisJbW92IGRwdHIsIFNFVFVQREFUCisJbW92eCBhLCBAZHB0cgorCW1vdiByMSwgYQkJOyByMSA9IGJtUmVxdWVzdFR5cGUKKwlpbmMgZHB0cgorCW1vdnggYSwgQGRwdHIKKwltb3YgcjIsIGEJCTsgcjIgPSBiUmVxdWVzdAorCWluYyBkcHRyCisJbW92eCBhLCBAZHB0cgorCW1vdiByMywgYQkJOyByMyA9IHdWYWx1ZUwKKwlpbmMgZHB0cgorCW1vdnggYSwgQGRwdHIKKwltb3YgcjQsIGEJCTsgcjQgPSB3VmFsdWVICisKKwk7OyBtYWluIHN3aXRjaCBvbiBibVJlcXVlc3QudHlwZTogc3RhbmRhcmQgb3IgdmVuZG9yCisJbW92IGEsIHIxCisJYW5sIGEsICMweDYwCisJY2puZSBhLCAjMHgwMCwgc2V0dXBfYm1yZXFfdHlwZV9ub3Rfc3RhbmRhcmQKKwk7OyBzdGFuZGFyZCByZXF1ZXN0OiBub3cgbWFpbiBzd2l0Y2ggaXMgb24gYlJlcXVlc3QKKwlsam1wIHNldHVwX2JtcmVxX2lzX3N0YW5kYXJkCisJCitzZXR1cF9ibXJlcV90eXBlX25vdF9zdGFuZGFyZDoJCisJOzsgYSBzdGlsbCBoYXMgYm1yZXEmMHg2MAorCWNqbmUgYSwgIzB4NDAsIHNldHVwX2JtcmVxX3R5cGVfbm90X3ZlbmRvcgorCTs7IEFuY2hvciByZXNlcnZlcyBiUmVxdWVzdCAweGEwLTB4YWYsIHdlIHVzZSBzbWFsbCBvbmVzCisJOzsgc3dpdGNoIG9uIGJSZXF1ZXN0LiBibVJlcXVlc3Qgd2lsbCBhbHdheXMgYmUgMHg0MSBvciAweGMxCisJY2puZSByMiwgIzB4MDAsIHNldHVwX2N0cmxfbm90XzAwCisJOzsgMDAgaXMgc2V0IGJhdWQsIHdWYWx1ZVswXSBoYXMgYmF1ZCByYXRlIGluZGV4CisJbGNhbGwgc2V0X2JhdWQJCTsgaW5kZXggaW4gcjMsIGNhcnJ5IHNldCBpZiBlcnJvcgorCWpjIHNldHVwX2JtcmVxX3R5cGVfbm90X3N0YW5kYXJkX19kb19zdGFsbAorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX2JtcmVxX3R5cGVfbm90X3N0YW5kYXJkX19kb19zdGFsbDoKKwlsam1wIHNldHVwX3N0YWxsCitzZXR1cF9jdHJsX25vdF8wMDoKKwljam5lIHIyLCAjMHgwMSwgc2V0dXBfY3RybF9ub3RfMDEKKwk7OyAwMSBpcyByZXNlcnZlZCBmb3Igc2V0IGJpdHMgKHBhcml0eSkuIFRPRE8KKwlsam1wIHNldHVwX3N0YWxsCitzZXR1cF9jdHJsX25vdF8wMToKKwljam5lIHIyLCAjMHgwMiwgc2V0dXBfY3RybF9ub3RfMDIKKwk7OyAwMiBpcyBzZXQgSFcgZmxvdyBjb250cm9sLiBUT0RPCisJbGptcCBzZXR1cF9zdGFsbAorc2V0dXBfY3RybF9ub3RfMDI6CisJY2puZSByMiwgIzB4MDMsIHNldHVwX2N0cmxfbm90XzAzCisJOzsgMDMgaXMgY29udHJvbCBwaW5zIChSVFMsIERUUikuCisJbGptcCBjb250cm9sX3BpbnMJOyB3aWxsIGp1bXAgdG8gc2V0dXBfZG9uZV9hY2ssCisJCQkJOyAgb3Igc2V0dXBfcmV0dXJuX29uZV9ieXRlCitzZXR1cF9jdHJsX25vdF8wMzoKKwljam5lIHIyLCAjMHgwNCwgc2V0dXBfY3RybF9ub3RfMDQKKwk7OyAwNCBpcyBzZW5kIGJyZWFrIChyZWFsbHkgInR1cm4gYnJlYWsgb24vb2ZmIikuIFRPRE8KKwljam5lIHIzLCAjMHgwMCwgc2V0dXBfY3RybF9kb19icmVha19vbgorCTs7IGRvIGJyZWFrIG9mZjogcmVzdG9yZSBQT1JUQ0NGRy4xIHRvIHJlY29ubmVjdCBUeEQwIHRvIHNlcmlhbCBwb3J0CisJbW92IGRwdHIsIFBPUlRDQ0ZHCisJbW92eCBhLCBAZHB0cgorCW9ybCBhLCAjMHgwMgorCW1vdnggQGRwdHIsIGEKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9jdHJsX2RvX2JyZWFrX29uOgorCTs7IGRvIGJyZWFrIG9uOiBjbGVhciBQT1JUQ0NGRy4wLCBzZXQgVHhEIGhpZ2goPykgKGIxIGxvdykKKwltb3YgZHB0ciwgT1VUQworCW1vdnggYSwgQGRwdHIKKwlhbmwgYSwgIzB4ZmQJCTsgfjB4MDIKKwltb3Z4IEBkcHRyLCBhCisJbW92IGRwdHIsIFBPUlRDQ0ZHCisJbW92eCBhLCBAZHB0cgorCWFubCBhLCAjMHhmZAkJOyB+MHgwMgorCW1vdnggQGRwdHIsIGEKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9jdHJsX25vdF8wNDoKKwljam5lIHIyLCAjMHgwNSwgc2V0dXBfY3RybF9ub3RfMDUKKwk7OyAwNSBpcyBzZXQgZGVzaXJlZCBpbnRlcnJ1cHQgYml0bWFwLiBUT0RPCisJbGptcCBzZXR1cF9zdGFsbAorc2V0dXBfY3RybF9ub3RfMDU6CisJY2puZSByMiwgIzB4MDYsIHNldHVwX2N0cmxfbm90XzA2CisJOzsgMDYgaXMgcXVlcnkgcm9vbQorCWNqbmUgcjMsICMweDAwLCBzZXR1cF9jdHJsXzA2X25vdF8wMAorCTs7IDA2LCB3VmFsdWVbMF09MCBpcyBxdWVyeSB3cml0ZV9yb29tCisJbW92IGEsIHR4X3Jpbmdfb3V0CisJc2V0YiBjCisJc3ViYiBhLCB0eF9yaW5nX2luCTsgb3V0LTEtaW4gPSAyNTUgLSAoaW4tb3V0KQorCWxqbXAgc2V0dXBfcmV0dXJuX29uZV9ieXRlCitzZXR1cF9jdHJsXzA2X25vdF8wMDoKKwljam5lIHIzLCAjMHgwMSwgc2V0dXBfY3RybF8wNl9ub3RfMDEKKwk7OyAwNiwgd1ZhbHVlWzBdPTEgaXMgcXVlcnkgY2hhcnNfaW5fYnVmZmVyCisJbW92IGEsIHR4X3JpbmdfaW4KKwljbHIgYworCXN1YmIgYSwgdHhfcmluZ19vdXQJOyBpbi1vdXQKKwlsam1wIHNldHVwX3JldHVybl9vbmVfYnl0ZQorc2V0dXBfY3RybF8wNl9ub3RfMDE6CQorCWxqbXAgc2V0dXBfc3RhbGwKK3NldHVwX2N0cmxfbm90XzA2OgorCWNqbmUgcjIsICMweDA3LCBzZXR1cF9jdHJsX25vdF8wNworCTs7IDA3IGlzIHJlcXVlc3QgdHggdW50aHJvdHRsZSBpbnRlcnJ1cHQKKwltb3YgdHhfdW50aHJvdHRsZV90aHJlc2hvbGQsIHIzOyB3VmFsdWVbMF0gaXMgdGhyZXNob2xkIHZhbHVlCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfY3RybF9ub3RfMDc6CisJbGptcCBzZXR1cF9zdGFsbAorCQorc2V0dXBfYm1yZXFfdHlwZV9ub3RfdmVuZG9yOgorCWxqbXAgc2V0dXBfc3RhbGwKKworCitzZXR1cF9ibXJlcV9pc19zdGFuZGFyZDoJCisJY2puZSByMiwgIzB4MDAsIHNldHVwX2JyZXFfbm90XzAwCisJOzsgMDA6CUdldF9TdGF0dXMgKHN1Yi1zd2l0Y2ggb24gYm1SZXF1ZXN0VHlwZTogZGV2aWNlLCBlcCwgaW50KQorCWNqbmUgcjEsICMweDgwLCBzZXR1cF9HZXRfU3RhdHVzX25vdF9kZXZpY2UKKwk7OyBHZXRfU3RhdHVzKGRldmljZSkKKwk7OyAgYXJlIHdlIHNlbGYtcG93ZXJlZD8gbm8uIGNhbiB3ZSBkbyByZW1vdGUgd2FrZXVwPyBubworCTs7ICAgc28gcmV0dXJuIHR3byB6ZXJvIGJ5dGVzLiBUaGlzIGlzIHJldXNhYmxlCitzZXR1cF9yZXR1cm5fdHdvX3plcm9fYnl0ZXM6CisJbW92IGRwdHIsIElOMEJVRgorCWNsciBhCisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJbW92eCBAZHB0ciwgYQorCW1vdiBkcHRyLCBJTjBCQworCW1vdiBhLCAjMgorCW1vdnggQGRwdHIsIGEKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9HZXRfU3RhdHVzX25vdF9kZXZpY2U6CisJY2puZSByMSwgIzB4ODIsIHNldHVwX0dldF9TdGF0dXNfbm90X2VuZHBvaW50CisJOzsgR2V0X1N0YXR1cyhlbmRwb2ludCkKKwk7OyAgbXVzdCBnZXQgc3RhbGwgYml0IGZvciBlcFt3SW5kZXhMXSwgcmV0dXJuIHR3byBieXRlcywgYml0IGluIGxzYiAwCisJOzsgZm9yIG5vdzogY2hlYXQuIFRPRE8KKwlzam1wIHNldHVwX3JldHVybl90d29femVyb19ieXRlcworc2V0dXBfR2V0X1N0YXR1c19ub3RfZW5kcG9pbnQ6CisJY2puZSByMSwgIzB4ODEsIHNldHVwX0dldF9TdGF0dXNfbm90X2ludGVyZmFjZQorCTs7IEdldF9TdGF0dXMoaW50ZXJmYWNlKTogcmV0dXJuIHR3byB6ZXJvcworCXNqbXAgc2V0dXBfcmV0dXJuX3R3b196ZXJvX2J5dGVzCitzZXR1cF9HZXRfU3RhdHVzX25vdF9pbnRlcmZhY2U6CQorCWxqbXAgc2V0dXBfc3RhbGwKKwkKK3NldHVwX2JyZXFfbm90XzAwOgorCWNqbmUgcjIsICMweDAxLCBzZXR1cF9icmVxX25vdF8wMQorCTs7IDAxOglDbGVhcl9GZWF0dXJlIChzdWItc3dpdGNoIG9uIHdWYWx1ZUw6IHN0YWxsLCByZW1vdGUgd2FrZXVwKQorCWNqbmUgcjMsICMweDAwLCBzZXR1cF9DbGVhcl9GZWF0dXJlX25vdF9zdGFsbAorCTs7IENsZWFyX0ZlYXR1cmUoc3RhbGwpLiBzaG91bGQgY2xlYXIgYSBzdGFsbCBiaXQuIFRPRE8KKwlsam1wIHNldHVwX3N0YWxsCitzZXR1cF9DbGVhcl9GZWF0dXJlX25vdF9zdGFsbDoKKwljam5lIHIzLCAjMHgwMSwgc2V0dXBfQ2xlYXJfRmVhdHVyZV9ub3Rfcndha2UKKwk7OyBDbGVhcl9GZWF0dXJlKHJlbW90ZSB3YWtldXApLiBpZ25vcmVkLgorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX0NsZWFyX0ZlYXR1cmVfbm90X3J3YWtlOgorCWxqbXAgc2V0dXBfc3RhbGwKKwkKK3NldHVwX2JyZXFfbm90XzAxOgorCWNqbmUgcjIsICMweDAzLCBzZXR1cF9icmVxX25vdF8wMworCTs7IDAzOglTZXRfRmVhdHVyZSAoc3ViLXN3aXRjaCBvbiB3VmFsdWVMOiBzdGFsbCwgcmVtb3RlIHdha2V1cCkKKwljam5lIHIzLCAjMHgwMCwgc2V0dXBfU2V0X0ZlYXR1cmVfbm90X3N0YWxsCisJOzsgU2V0X0ZlYXR1cmUoc3RhbGwpLiBTaG91bGQgc2V0IGEgc3RhbGwgYml0LiBUT0RPCisJbGptcCBzZXR1cF9zdGFsbAorc2V0dXBfU2V0X0ZlYXR1cmVfbm90X3N0YWxsOgorCWNqbmUgcjMsICMweDAxLCBzZXR1cF9TZXRfRmVhdHVyZV9ub3Rfcndha2UKKwk7OyBTZXRfRmVhdHVyZShyZW1vdGUgd2FrZXVwKS4gaWdub3JlZC4KKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9TZXRfRmVhdHVyZV9ub3Rfcndha2U6CisJbGptcCBzZXR1cF9zdGFsbAorCQorc2V0dXBfYnJlcV9ub3RfMDM6CQorCWNqbmUgcjIsICMweDA2LCBzZXR1cF9icmVxX25vdF8wNgorCTs7IDA2OglHZXRfRGVzY3JpcHRvciAocy1zd2l0Y2ggb24gd1ZhbHVlSDogZGV2LCBjb25maWdbbl0sIHN0cmluZ1tuXSkKKwljam5lIHI0LCAjMHgwMSwgc2V0dXBfR2V0X0Rlc2NyaXB0b3Jfbm90X2RldmljZQorCTs7IEdldF9EZXNjcmlwdG9yKGRldmljZSkKKwltb3YgZHB0ciwgU1VEUFRSSAorCW1vdiBhLCAjSElHSChkZXNjX2RldmljZSkKKwltb3Z4IEBkcHRyLCBhCisJbW92IGRwdHIsIFNVRFBUUkwKKwltb3YgYSwgI0xPVyhkZXNjX2RldmljZSkKKwltb3Z4IEBkcHRyLCBhCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfR2V0X0Rlc2NyaXB0b3Jfbm90X2RldmljZToKKwljam5lIHI0LCAjMHgwMiwgc2V0dXBfR2V0X0Rlc2NyaXB0b3Jfbm90X2NvbmZpZworCTs7IEdldF9EZXNjcmlwdG9yKGNvbmZpZ1tuXSkKKwljam5lIHIzLCAjMHgwMCwgc2V0dXBfc3RhbGw7IG9ubHkgaGFuZGxlIG49PTAKKwk7OyBHZXRfRGVzY3JpcHRvcihjb25maWdbMF0pCisJbW92IGRwdHIsIFNVRFBUUkgKKwltb3YgYSwgI0hJR0goZGVzY19jb25maWcxKQorCW1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgU1VEUFRSTAorCW1vdiBhLCAjTE9XKGRlc2NfY29uZmlnMSkKKwltb3Z4IEBkcHRyLCBhCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfR2V0X0Rlc2NyaXB0b3Jfbm90X2NvbmZpZzoKKwljam5lIHI0LCAjMHgwMywgc2V0dXBfR2V0X0Rlc2NyaXB0b3Jfbm90X3N0cmluZworCTs7IEdldF9EZXNjcmlwdG9yKHN0cmluZ1t3VmFsdWVMXSkKKwk7OyAgaWYgKHdWYWx1ZUwgPj0gbWF4c3RyaW5ncykgc3RhbGwKKwltb3YgYSwgIygoZGVzY19zdHJpbmdzX2VuZC1kZXNjX3N0cmluZ3MpLzIpCisJY2xyIGMKKwlzdWJiIGEscjMJCTsgYT00LCByMyA9IDAuLjMgLiBpZiBhPD0wIHRoZW4gc3RhbGwKKwlqYyAgc2V0dXBfc3RhbGwKKwlqeiAgc2V0dXBfc3RhbGwKKwltb3YgYSwgcjMKKwlhZGQgYSwgcjMJCTsgYSA9IDIqd1ZhbHVlTAorCW1vdiBkcHRyLCAjZGVzY19zdHJpbmdzCisJYWRkIGEsIGRwbAorCW1vdiBkcGwsIGEKKwltb3YgYSwgIzAKKwlhZGRjIGEsIGRwaAorCW1vdiBkcGgsIGEJCTsgZHBoID0gZGVzY19zdHJpbmdzW2FdLiBiaWcgZW5kaWFuISAoaGFuZHkpCisJOzsgaXQgbG9va3MgbGlrZSBteSBhZGFwdGVyIHVzZXMgYSByZXZpc2lvbiBvZiB0aGUgRVpVU0IgdGhhdAorCTs7IGNvbnRhaW5zICJyZXYgRCBlcnJhdGEgbnVtYmVyIDgiLCBhcyBoaW50ZWQgaW4gdGhlIEV6VVNCIGV4YW1wbGUKKwk7OyBjb2RlLiBJIGNhbm5vdCBmaW5kIGFuIGFjdHVhbCBlcnJhdGEgZGVzY3JpcHRpb24gb24gdGhlIEN5cHJlc3MKKwk7OyB3ZWIgc2l0ZSwgYnV0IGZyb20gdGhlIGV4YW1wbGUgY29kZSBpdCBsb29rcyBsaWtlIHRoaXMgYnVnIGNhdXNlcworCTs7IHRoZSBsZW5ndGggb2Ygc3RyaW5nIGRlc2NyaXB0b3JzIHRvIGJlIHJlYWQgaW5jb3JyZWN0bHksIHBvc3NpYmx5CisJOzsgc2VuZGluZyBiYWNrIG1vcmUgY2hhcmFjdGVycyB0aGFuIHRoZSBkZXNjcmlwdG9yIGhhcy4gVGhlIHdvcmthcm91bmQKKwk7OyBpcyB0byBtYW51YWxseSBzZW5kIG91dCBhbGwgb2YgdGhlIGRhdGEuIFRoZSBjb25zZXF1ZW5jZSBvZiBub3QKKwk7OyB1c2luZyB0aGUgd29ya2Fyb3VuZCBpcyB0aGF0IHRoZSBzdHJpbmdzIGdhdGhlcmVkIGJ5IHRoZSBrZXJuZWwKKwk7OyBkcml2ZXIgYXJlIHRvbyBsb25nIGFuZCBhcmUgZmlsbGVkIHdpdGggdHJhaWxpbmcgZ2FyYmFnZSAoaW5jbHVkaW5nCisJOzsgbGVmdG92ZXIgc3RyaW5ncykuIFdyaXRpbmcgdGhpcyBvdXQgYnkgaGFuZCBpcyBhIG51aXNhbmNlLCBzbyBmb3IKKwk7OyBub3cgSSB3aWxsIGp1c3QgbGl2ZSB3aXRoIHRoZSBidWcuCisJbW92eCBhLCBAZHB0cgorCW1vdiByMSwgYQorCWluYyBkcHRyCisJbW92eCBhLCBAZHB0cgorCW1vdiByMiwgYQorCW1vdiBkcHRyLCBTVURQVFJICisJbW92IGEsIHIxCisJbW92eCBAZHB0ciwgYQorCW1vdiBkcHRyLCBTVURQVFJMCisJbW92IGEsIHIyCisJbW92eCBAZHB0ciwgYQorCTs7IGRvbmUKKwlsam1wIHNldHVwX2RvbmVfYWNrCisJCitzZXR1cF9HZXRfRGVzY3JpcHRvcl9ub3Rfc3RyaW5nOgorCWxqbXAgc2V0dXBfc3RhbGwKKwkKK3NldHVwX2JyZXFfbm90XzA2OgorCWNqbmUgcjIsICMweDA4LCBzZXR1cF9icmVxX25vdF8wOAorCTs7IEdldF9Db25maWd1cmF0aW9uLiBhbHdheXMgMS4gcmV0dXJuIG9uZSBieXRlLgorCTs7IHRoaXMgaXMgcmV1c2FibGUKKwltb3YgYSwgIzEKK3NldHVwX3JldHVybl9vbmVfYnl0ZToJCisJbW92IGRwdHIsIElOMEJVRgorCW1vdnggQGRwdHIsIGEKKwltb3YgYSwgIzEKKwltb3YgZHB0ciwgSU4wQkMKKwltb3Z4IEBkcHRyLCBhCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfYnJlcV9ub3RfMDg6CisJY2puZSByMiwgIzB4MDksIHNldHVwX2JyZXFfbm90XzA5CisJOzsgMDk6IFNldF9Db25maWd1cmF0aW9uLiBpZ25vcmVkLgorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX2JyZXFfbm90XzA5OgorCWNqbmUgcjIsICMweDBhLCBzZXR1cF9icmVxX25vdF8wYQorCTs7IDBhOiBHZXRfSW50ZXJmYWNlLiBnZXQgdGhlIGN1cnJlbnQgYWx0c2V0dGluZyBmb3IgaW50W3dJbmRleExdCisJOzsgIHNpbmNlIHdlIG9ubHkgaGF2ZSBvbmUgaW50ZXJmYWNlLCBpZ25vcmUgd0luZGV4TCwgcmV0dXJuIGEgMAorCW1vdiBhLCAjMAorCWxqbXAgc2V0dXBfcmV0dXJuX29uZV9ieXRlCitzZXR1cF9icmVxX25vdF8wYToKKwljam5lIHIyLCAjMHgwYiwgc2V0dXBfYnJlcV9ub3RfMGIKKwk7OyAwYjogU2V0X0ludGVyZmFjZS4gc2V0IGFsdHNldHRpbmcgZm9yIGludGVyZmFjZVt3SW5kZXhMXS4gaWdub3JlZAorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX2JyZXFfbm90XzBiOgorCWxqbXAgc2V0dXBfc3RhbGwKKworCQkKK3NldHVwX2RvbmVfYWNrOgkKKwk7OyBub3cgY2xlYXIgSFNOQUsKKwltb3YgZHB0ciwgRVAwQ1MKKwltb3YgYSwgIzB4MDIKKwltb3Z4IEBkcHRyLCBhCisJc2ptcCBzZXR1cF9kb25lCitzZXR1cF9zdGFsbDoJCisJOzsgdW5oYW5kbGVkLiBTVEFMTAorCTtFUDBDUyB8PSBibUVQU1RBTEwKKwltb3YgZHB0ciwgRVAwQ1MKKwltb3Z4IGEsIEBkcHRyCisJb3JsIGEsIEVQMFNUQUxMYml0CisJbW92eCBAZHB0ciwgYQorCXNqbXAgc2V0dXBfZG9uZQorCQorc2V0dXBfZG9uZToJCisJcG9wIGFjYworCXBvcCBkcGgxCisJcG9wIGRwbDEKKwlwb3AgZHBoCisJcG9wIGRwbAorCXBvcCBkcHMKKwlyZXRpCisKKzs7OyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQorc2V0X2JhdWQ6CQkJOyBiYXVkIGluZGV4IGluIHIzCisJOzsgdmVyaWZ5IGEgPCAxMAorCW1vdiBhLCByMworCWpiIEFDQy43LCBzZXRfYmF1ZF9fYmFkYmF1ZAorCWNsciBjCisJc3ViYiBhLCAjMTAKKwlqbmMgc2V0X2JhdWRfX2JhZGJhdWQKKwltb3YgYSwgcjMKKwlybCBhCQkJOyBhID0gaW5kZXgqMgorCWFkZCBhLCAjTE9XKGJhdWRfdGFibGUpCisJbW92IGRwbCwgYQorCW1vdiBhLCAjSElHSChiYXVkX3RhYmxlKQorCWFkZGMgYSwgIzAKKwltb3YgZHBoLCBhCisJOzsgVE9ETzogc2h1dCBkb3duIHhtaXQvcmVjZWl2ZQorCTs7IFRPRE86IHdhaXQgZm9yIGN1cnJlbnQgeG1pdCBjaGFyIHRvIGxlYXZlCisJOzsgVE9ETzogc2h1dCBkb3duIHRpbWVyIHRvIGF2b2lkIHBhcnRpYWwtY2hhciBnbGl0Y2gKKwltb3Z4IGEsQGRwdHIJCTsgQkFVRF9ISUdICisJbW92IFJDQVAySCwgYQorCW1vdiBUSDIsIGEKKwlpbmMgZHB0cgorCW1vdnggYSxAZHB0cgkJOyBCQVVEX0xPVworCW1vdiBSQ0FQMkwsIGEKKwltb3YgVEwyLCBhCisJOzsgVE9ETzogcmVzdGFydCB4bWl0L3JlY2VpdmUKKwk7OyBUT0RPOiByZWVuYWJsZSBpbnRlcnJ1cHRzLCByZXN1bWUgdHggaWYgcGVuZGluZworCWNsciBjCQkJOyBjPTA6IHN1Y2Nlc3MKKwlyZXQKK3NldF9iYXVkX19iYWRiYXVkOgorCXNldGIgYwkJCTsgYz0xOiBmYWlsdXJlCisJcmV0CisJCis7OzsgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2NvbnRyb2xfcGluczoKKwljam5lIHIxLCAjMHg0MSwgY29udHJvbF9waW5zX2luCitjb250cm9sX3BpbnNfb3V0OgorCW1vdiBhLCByMyA7IHdWYWx1ZVswXSBob2xkcyBuZXcgYml0czoJYjcgaXMgbmV3IERUUiwgYjIgaXMgbmV3IFJUUworCXhybCBhLCAjMHhmZgkJOyAxIG1lYW5zIGFjdGl2ZSwgMFYsICsxMlYgPworCWFubCBhLCAjMHg4NAorCW1vdiByMywgYQorCW1vdiBkcHRyLCBPVVRDCisJbW92eCBhLCBAZHB0cgkJOyBvbmx5IGNoYW5nZSBiaXRzIDcgYW5kIDIKKwlhbmwgYSwgIzB4N2IJCTsgfjB4ODQKKwlvcmwgYSwgcjMKKwltb3Z4IEBkcHRyLCBhCQk7IG90aGVyIHBpbnMgYXJlIGlucHV0cywgYml0cyBpZ25vcmVkCisJbGptcCBzZXR1cF9kb25lX2FjaworY29udHJvbF9waW5zX2luOgorCW1vdiBkcHRyLCBQSU5TQworCW1vdnggYSwgQGRwdHIKKwl4cmwgYSwgIzB4ZmYKKwlsam1wIHNldHVwX3JldHVybl9vbmVfYnl0ZQorCis7OzsgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQorSVNSX0VwMmluOgorCXB1c2ggZHBzCisJcHVzaCBkcGwKKwlwdXNoIGRwaAorCXB1c2ggZHBsMQorCXB1c2ggZHBoMQorCXB1c2ggYWNjCisJbW92IGEsRVhJRgorCWNsciBhY2MuNAorCW1vdiBFWElGLGEJCTsgY2xlYXIgSU5UMiBmaXJzdAorCW1vdiBkcHRyLCBJTjA3SVJRCTsgY2xlYXIgVVNCIGludAorCW1vdiBhLCMwNGgKKwltb3Z4IEBkcHRyLGEKKworCTs7IGRvIHN0dWZmCisJbGNhbGwgc3RhcnRfaW4KKwkKKwlwb3AgYWNjCisJcG9wIGRwaDEKKwlwb3AgZHBsMQorCXBvcCBkcGgKKwlwb3AgZHBsCisJcG9wIGRwcworCXJldGkKKworSVNSX0VwMm91dDoKKwlwdXNoIGRwcworCXB1c2ggZHBsCisJcHVzaCBkcGgKKwlwdXNoIGRwbDEKKwlwdXNoIGRwaDEKKwlwdXNoIGFjYworCW1vdiBhLEVYSUYKKwljbHIgYWNjLjQKKwltb3YgRVhJRixhCQk7IGNsZWFyIElOVDIgZmlyc3QKKwltb3YgZHB0ciwgT1VUMDdJUlEJOyBjbGVhciBVU0IgaW50CisJbW92IGEsIzA0aAorCW1vdnggQGRwdHIsYQorCisJOzsgZG8gc3R1ZmYKKworCTs7IGNvcHkgZGF0YSBpbnRvIGJ1ZmZlci4gZm9yIG5vdywgYXNzdW1lIHdlIHdpbGwgaGF2ZSBlbm91Z2ggc3BhY2UKKwltb3YgZHB0ciwgT1VUMkJDCTsgZ2V0IGJ5dGUgY291bnQKKwltb3Z4IGEsQGRwdHIKKwltb3YgcjEsIGEKKwljbHIgYQorCW1vdiBkcHMsIGEKKwltb3YgZHB0ciwgT1VUMkJVRgk7IGxvYWQgRFBUUjAgd2l0aCBzb3VyY2UKKwltb3YgZHBoMSwgI0hJR0godHhfcmluZykJOyBsb2FkIERQVFIxIHdpdGggdGFyZ2V0CisJbW92IGRwbDEsIHR4X3JpbmdfaW4KK09VVF9sb29wOgorCW1vdnggYSxAZHB0cgkJOyByZWFkCisJaW5jIGRwcwkJCTsgc3dpdGNoIHRvIERQVFIxOiB0YXJnZXQKKwlpbmMgZHBsMQkJOyB0YXJnZXQgPSB0eF9yaW5nX2luKzEKKwltb3Z4IEBkcHRyLGEJCTsgc3RvcmUKKwltb3YgYSxkcGwxCisJY2puZSBhLCB0eF9yaW5nX291dCwgT1VUX25vX292ZXJmbG93CisJc2ptcCBPVVRfb3ZlcmZsb3cKK09VVF9ub19vdmVyZmxvdzoJCisJaW5jIHR4X3JpbmdfaW4JCTsgdHhfcmluZ19pbisrCisJaW5jIGRwcwkJCTsgc3dpdGNoIHRvIERQVFIwOiBzb3VyY2UKKwlpbmMgZHB0cgorCWRqbnogcjEsIE9VVF9sb29wCisJc2ptcCBPVVRfZG9uZQorT1VUX292ZXJmbG93OgorCTs7IHNpZ25hbCBvdmVyZmxvdworCTs7IGZhbGwgdGhyb3VnaAorT1VUX2RvbmU6CQorCTs7IGFjaworCW1vdiBkcHRyLE9VVDJCQworCW1vdnggQGRwdHIsYQorCisJOzsgc3RhcnQgdHgKKwlhY2FsbCBtYXliZV9zdGFydF90eAorCTthY2FsbCBkdW1wX3N0YXQKKwkKKwlwb3AgYWNjCisJcG9wIGRwaDEKKwlwb3AgZHBsMQorCXBvcCBkcGgKKwlwb3AgZHBsCisJcG9wIGRwcworCXJldGkKKworZHVtcF9zdGF0OgorCTs7IGZpbGwgaW4gRVA0aW4gd2l0aCBhIGRlYnVnZ2luZyBtZXNzYWdlOgorCTs7ICAgdHhfcmluZ19pbiwgdHhfcmluZ19vdXQsIHJ4X3JpbmdfaW4sIHJ4X3Jpbmdfb3V0CisJOzsgICB0eF9hY3RpdmUKKwk7OyAgIHR4X3JpbmdbMC4uMTVdCisJOzsgICAweGZjCisJOzsgICByeF9yaW5nWzAuLjE1XQorCWNsciBhCisJbW92IGRwcywgYQorCQorCW1vdiBkcHRyLCBJTjRDUworCW1vdnggYSwgQGRwdHIKKwlqYiBhY2MuMSwgZHVtcF9zdGF0X19kb25lOyBidXN5OiBjYW5ub3QgZHVtcCwgb2xkIG9uZSBzdGlsbCBwZW5kaW5nCisJbW92IGRwdHIsIElONEJVRgorCQorCW1vdiBhLCB0eF9yaW5nX2luCisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJbW92IGEsIHR4X3Jpbmdfb3V0CisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisKKwltb3YgYSwgcnhfcmluZ19pbgorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCW1vdiBhLCByeF9yaW5nX291dAorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCQorCWNsciBhCisJam5iIFRYX1JVTk5JTkcsIGR1bXBfc3RhdF9fbm9fdHhfcnVubmluZworCWluYyBhCitkdW1wX3N0YXRfX25vX3R4X3J1bm5pbmc6CisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJOzsgdHhfcmluZ1swLi4xNV0KKwlpbmMgZHBzCisJbW92IGRwdHIsICN0eF9yaW5nCTsgRFBUUjE6IHNvdXJjZQorCW1vdiByMSwgIzE2CitkdW1wX3N0YXRfX3R4X3JpbmdfbG9vcDoKKwltb3Z4IGEsIEBkcHRyCisJaW5jIGRwdHIKKwlpbmMgZHBzCisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJaW5jIGRwcworCWRqbnogcjEsIGR1bXBfc3RhdF9fdHhfcmluZ19sb29wCisJaW5jIGRwcworCQorCW1vdiBhLCAjMHhmYworCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCQorCTs7IHJ4X3JpbmdbMC4uMTVdCisJaW5jIGRwcworCW1vdiBkcHRyLCAjcnhfcmluZwk7IERQVFIxOiBzb3VyY2UKKwltb3YgcjEsICMxNgorZHVtcF9zdGF0X19yeF9yaW5nX2xvb3A6CisJbW92eCBhLCBAZHB0cgorCWluYyBkcHRyCisJaW5jIGRwcworCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCWluYyBkcHMKKwlkam56IHIxLCBkdW1wX3N0YXRfX3J4X3JpbmdfbG9vcAorCQorCTs7IG5vdyBzZW5kIGl0CisJY2xyIGEKKwltb3YgZHBzLCBhCisJbW92IGRwdHIsIElONEJDCisJbW92IGEsICMzOAorCW1vdnggQGRwdHIsIGEKK2R1bXBfc3RhdF9fZG9uZToJCisJcmV0CisJCQorOzs7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQorbWF5YmVfc3RhcnRfdHg6CisJOzsgbWFrZSBzdXJlIHRoZSB0eCBwcm9jZXNzIGlzIHJ1bm5pbmcuCisJamIgVFhfUlVOTklORywgc3RhcnRfdHhfZG9uZQorc3RhcnRfdHg6CisJOzsgaXMgdGhlcmUgd29yayB0byBiZSBkb25lPworCW1vdiBhLCB0eF9yaW5nX2luCisJY2puZSBhLHR4X3Jpbmdfb3V0LCBzdGFydF90eF9fd29yaworCXJldAkJCTsgbm8gd29yaworc3RhcnRfdHhfX3dvcms6CQorCTs7IHR4IHdhcyBub3QgcnVubmluZy4gc2VuZCB0aGUgZmlyc3QgY2hhcmFjdGVyLCBzZXR1cCB0aGUgVEkgaW50CisJaW5jIHR4X3Jpbmdfb3V0CQk7IFsrK3R4X3Jpbmdfb3V0XQorCW1vdiBkcGgsICNISUdIKHR4X3JpbmcpCisJbW92IGRwbCwgdHhfcmluZ19vdXQKKwltb3Z4IGEsIEBkcHRyCisJbW92IHNidWYsIGEKKwlzZXRiIFRYX1JVTk5JTkcKK3N0YXJ0X3R4X2RvbmU6CisJOzsgY2FuIHdlIHVudGhyb3R0bGUgdGhlIGhvc3QgdHggcHJvY2Vzcz8KKwk7OyAgc3RlcCAxOiBkbyB3ZSBjYXJlPworCW1vdiBhLCAjMAorCWNqbmUgYSwgdHhfdW50aHJvdHRsZV90aHJlc2hvbGQsIHN0YXJ0X3R4X19tYXliZV91bnRocm90dGxlX3R4CisJOzsgbm9wZQorc3RhcnRfdHhfcmVhbGx5X2RvbmU6CisJcmV0CitzdGFydF90eF9fbWF5YmVfdW50aHJvdHRsZV90eDoKKwk7OyAgc3RlcCAyOiBpcyB0aGVyZSBub3cgcm9vbT8KKwltb3YgYSwgdHhfcmluZ19vdXQKKwlzZXRiIGMKKwlzdWJiIGEsIHR4X3JpbmdfaW4KKwk7OyBhIGlzIG5vdyB3cml0ZV9yb29tLiBJZiB0aHJlc2ggPj0gYSwgd2UgY2FuIHVudGhyb3R0bGUKKwljbHIgYworCXN1YmIgYSwgdHhfdW50aHJvdHRsZV90aHJlc2hvbGQKKwlqYyBzdGFydF90eF9yZWFsbHlfZG9uZQk7IG5vcGUKKwk7OyB5ZXMsIHdlIGNhbiB1bnRocm90dGxlLiByZW1vdmUgdGhlIHRocmVzaG9sZCBhbmQgbWFyayBhIHJlcXVlc3QKKwltb3YgdHhfdW50aHJvdHRsZV90aHJlc2hvbGQsICMwCisJc2V0YiBET19UWF9VTlRIUk9UVExFCisJOzsgcHJvZCByeCwgd2hpY2ggd2lsbCBhY3R1YWxseSBzZW5kIHRoZSBtZXNzYWdlIHdoZW4gaW4yIGJlY29tZXMgZnJlZQorCWxqbXAgc3RhcnRfaW4KKwkKKworc2VyaWFsX2ludDoKKwlwdXNoIGRwcworCXB1c2ggZHBsCisJcHVzaCBkcGgKKwlwdXNoIGRwbDEKKwlwdXNoIGRwaDEKKwlwdXNoIGFjYworCWpuYiBUSSwgc2VyaWFsX2ludF9fbm90X3R4CisJOzsgdHggZmluaXNoZWQuIHNlbmQgYW5vdGhlciBjaGFyYWN0ZXIgaWYgd2UgaGF2ZSBvbmUKKwljbHIgVEkJCQk7IGNsZWFyIGludAorCWNsciBUWF9SVU5OSU5HCisJbGNhbGwgc3RhcnRfdHgKK3NlcmlhbF9pbnRfX25vdF90eDoKKwlqbmIgUkksIHNlcmlhbF9pbnRfX25vdF9yeAorCWxjYWxsIGdldF9yeF9jaGFyCisJY2xyIFJJCQkJOyBjbGVhciBpbnQKK3NlcmlhbF9pbnRfX25vdF9yeDoJCisJOzsgcmV0dXJuCisJcG9wIGFjYworCXBvcCBkcGgxCisJcG9wIGRwbDEKKwlwb3AgZHBoCisJcG9wIGRwbAorCXBvcCBkcHMKKwlyZXRpCisKK2dldF9yeF9jaGFyOgorCW1vdiBkcGgsICNISUdIKHJ4X3JpbmcpCisJbW92IGRwbCwgcnhfcmluZ19pbgorCWluYyBkcGwJCQk7IHRhcmdldCA9IHJ4X3JpbmdfaW4rMQorCW1vdiBhLCBzYnVmCisJbW92eCBAZHB0ciwgYQorCTs7IGNoZWNrIGZvciBvdmVyZmxvdyBiZWZvcmUgaW5jcmVtZW50aW5nIHJ4X3JpbmdfaW4KKwltb3YgYSwgZHBsCisJY2puZSBhLCByeF9yaW5nX291dCwgZ2V0X3J4X2NoYXJfX25vX292ZXJmbG93CisJOzsgc2lnbmFsIG92ZXJmbG93CisJcmV0CitnZXRfcnhfY2hhcl9fbm9fb3ZlcmZsb3c6CQorCWluYyByeF9yaW5nX2luCisJOzsga2ljayBvZmYgVVNCIElOcGlwZQorCWFjYWxsIHN0YXJ0X2luCisJcmV0CisKK3N0YXJ0X2luOgorCTs7IGNoZWNrIGlmIHRoZSBpbnBpcGUgaXMgYWxyZWFkeSBydW5uaW5nLgorCW1vdiBkcHRyLCBJTjJDUworCW1vdnggYSwgQGRwdHIKKwlqYiBhY2MuMSwgc3RhcnRfaW5fX2RvbmU7IGludCB3aWxsIGhhbmRsZSBpdAorCWpiIERPX1RYX1VOVEhST1RUTEUsIHN0YXJ0X2luX19kb190eF91bnRocm90dGxlCisJOzsgc2VlIGlmIHRoZXJlIGlzIGFueSB3b3JrIHRvIGRvLiBhIHNlcmlhbCBpbnRlcnJ1cHQgbWlnaHQgb2NjdXIKKwk7OyBkdXJpbmcgdGhpcyBzZXF1ZW5jZT8KKwltb3YgYSwgcnhfcmluZ19pbgorCWNqbmUgYSwgcnhfcmluZ19vdXQsIHN0YXJ0X2luX19oYXZlX3dvcmsKKwlyZXQJCQk7IG5vcGUKK3N0YXJ0X2luX19oYXZlX3dvcms6CQorCTs7IG5vdyBjb3B5IGFzIG11Y2ggZGF0YSBhcyBwb3NzaWJsZSBpbnRvIHRoZSBwaXBlLiA2MyBieXRlcyBtYXguCisJY2xyIGEKKwltb3YgZHBzLCBhCisJbW92IGRwaCwgI0hJR0gocnhfcmluZykJOyBsb2FkIERQVFIwIHdpdGggc291cmNlCisJaW5jIGRwcworCW1vdiBkcHRyLCBJTjJCVUYJOyBsb2FkIERQVFIxIHdpdGggdGFyZ2V0CisJbW92eCBAZHB0ciwgYQkJOyBpblswXSBzaWduYWxzIHRoYXQgcmVzdCBvZiBJTiBpcyByeCBkYXRhCisJaW5jIGRwdHIKKwlpbmMgZHBzCisJOzsgbG9vcCB1bnRpbCB3ZSBydW4gb3V0IG9mIGRhdGEsIG9yIHdlIGhhdmUgY29waWVkIDY0IGJ5dGVzCisJbW92IHIxLCAjMQkJOyBJTmJ1ZiBzaXplIGNvdW50ZXIKK3N0YXJ0X2luX19sb29wOgorCW1vdiBhLCByeF9yaW5nX2luCisJY2puZSBhLCByeF9yaW5nX291dCwgc3RhcnRfaW5sb2NhbF9pcnFfZW5hYmxlbGxfY29weWluZworCXNqbXAgc3RhcnRfaW5fX2tpY2sKK3N0YXJ0X2lubG9jYWxfaXJxX2VuYWJsZWxsX2NvcHlpbmc6CisJaW5jIHJ4X3Jpbmdfb3V0CisJbW92IGRwbCwgcnhfcmluZ19vdXQKKwltb3Z4IGEsIEBkcHRyCisJaW5jIGRwcworCW1vdnggQGRwdHIsIGEJCTsgd3JpdGUgaW50byBJTiBidWZmZXIKKwlpbmMgZHB0cgorCWluYyBkcHMKKwlpbmMgcjEKKwljam5lIHIxLCAjNjQsIHN0YXJ0X2luX19sb29wOyBsb29wCitzdGFydF9pbl9fa2ljazoKKwk7OyBlaXRoZXIgd2UgcmFuIG91dCBvZiBkYXRhLCBvciB3ZSBjb3BpZWQgNjQgYnl0ZXMuIHIxIGhhcyBieXRlIGNvdW50CisJOzsga2ljayBvZmYgSU4KKwltb3YgZHB0ciwgSU4yQkMKKwltb3YgYSwgcjEKKwlqeiBzdGFydF9pbl9fZG9uZQorCW1vdnggQGRwdHIsIGEKKwk7OyBkb25lCitzdGFydF9pbl9fZG9uZToKKwk7YWNhbGwgZHVtcF9zdGF0CisJcmV0CitzdGFydF9pbl9fZG9fdHhfdW50aHJvdHRsZToKKwk7OyBzcGVjaWFsIHNlcXVlbmNlOiBzZW5kIGEgdHggdW50aHJvdHRsZSBtZXNzYWdlCisJY2xyIERPX1RYX1VOVEhST1RUTEUKKwljbHIgYQorCW1vdiBkcHMsIGEKKwltb3YgZHB0ciwgSU4yQlVGCisJbW92IGEsICMxCisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJbW92IGEsICMyCisJbW92eCBAZHB0ciwgYQorCW1vdiBkcHRyLCBJTjJCQworCW1vdnggQGRwdHIsIGEKKwlyZXQKKwkKK3B1dGNoYXI6CisJY2xyIFRJCisJbW92IFNCVUYsIGEKK3B1dGNoYXJfd2FpdDoKKwlqbmIgVEksIHB1dGNoYXJfd2FpdAorCWNsciBUSQorCXJldAorCisJCitiYXVkX3RhYmxlOgkJCTsgYmF1ZF9oaWdoLCB0aGVuIGJhdWRfbG93CisJOzsgYmF1ZFswXTogMTEwCisJLmJ5dGUgQkFVRF9ISUdIKDExMCkKKwkuYnl0ZSBCQVVEX0xPVygxMTApCisJOzsgYmF1ZFsxXTogMzAwCisJLmJ5dGUgQkFVRF9ISUdIKDMwMCkKKwkuYnl0ZSBCQVVEX0xPVygzMDApCisJOzsgYmF1ZFsyXTogMTIwMAorCS5ieXRlIEJBVURfSElHSCgxMjAwKQorCS5ieXRlIEJBVURfTE9XKDEyMDApCisJOzsgYmF1ZFszXTogMjQwMAorCS5ieXRlIEJBVURfSElHSCgyNDAwKQorCS5ieXRlIEJBVURfTE9XKDI0MDApCisJOzsgYmF1ZFs0XTogNDgwMAorCS5ieXRlIEJBVURfSElHSCg0ODAwKQorCS5ieXRlIEJBVURfTE9XKDQ4MDApCisJOzsgYmF1ZFs1XTogOTYwMAorCS5ieXRlIEJBVURfSElHSCg5NjAwKQorCS5ieXRlIEJBVURfTE9XKDk2MDApCisJOzsgYmF1ZFs2XTogMTkyMDAKKwkuYnl0ZSBCQVVEX0hJR0goMTkyMDApCisJLmJ5dGUgQkFVRF9MT1coMTkyMDApCisJOzsgYmF1ZFs3XTogMzg0MDAKKwkuYnl0ZSBCQVVEX0hJR0goMzg0MDApCisJLmJ5dGUgQkFVRF9MT1coMzg0MDApCisJOzsgYmF1ZFs4XTogNTc2MDAKKwkuYnl0ZSBCQVVEX0hJR0goNTc2MDApCisJLmJ5dGUgQkFVRF9MT1coNTc2MDApCisJOzsgYmF1ZFs5XTogMTE1MjAwCisJLmJ5dGUgQkFVRF9ISUdIKDExNTIwMCkKKwkuYnl0ZSBCQVVEX0xPVygxMTUyMDApCisKK2Rlc2NfZGV2aWNlOgorCS5ieXRlIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NDAKKwkuYnl0ZSAweGNkLCAweDA2LCAweDA0LCAweDAxLCAweDg5LCAweGFiLCAxLCAyLCAzLCAweDAxCis7OzsgVGhlICJyZWFsIiBkZXZpY2UgaWQsIHdoaWNoIG11c3QgbWF0Y2ggdGhlIGhvc3QgZHJpdmVyLCBpcyB0aGF0Cis7OzsgIjB4Y2QgMHgwNiAweDA0IDB4MDEiIHNlcXVlbmNlLCB3aGljaCBpcyAweDA2Y2QsIDB4MDEwNAorCQorZGVzY19jb25maWcxOgorCS5ieXRlIDB4MDksIDB4MDIsIDB4MjAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIKKwkuYnl0ZSAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweDAyLCAweGZmLCAweGZmLCAweGZmLCAweDAwCisJLmJ5dGUgMHgwNywgMHgwNSwgMHg4MiwgMHgwMywgMHg0MCwgMHgwMCwgMHgwMQorCS5ieXRlIDB4MDcsIDB4MDUsIDB4MDIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAKKworZGVzY19zdHJpbmdzOgorCS53b3JkIHN0cmluZ19sYW5naWRzLCBzdHJpbmdfbWZnLCBzdHJpbmdfcHJvZHVjdCwgc3RyaW5nX3NlcmlhbAorZGVzY19zdHJpbmdzX2VuZDoKKworc3RyaW5nX2xhbmdpZHM6CS5ieXRlIHN0cmluZ19sYW5naWRzX2VuZC1zdHJpbmdfbGFuZ2lkcworCS5ieXRlIDMKKwkud29yZCAwCitzdHJpbmdfbGFuZ2lkc19lbmQ6CisKKwk7OyBzaWdoLiBUaGVzZSBzdHJpbmdzIGFyZSBVbmljb2RlLCBtZWFuaW5nIFVURjE2PyAyIGJ5dGVzIGVhY2guIE5vdworCTs7ICp0aGF0KiBpcyBhIHBhaW4gaW4gdGhlIGFzcyB0byBlbmNvZGUuIEFuZCB0aGV5IGFyZSBsaXR0bGUtZW5kaWFuCisJOzsgdG9vLiBVc2UgdGhpcyBwZXJsIHNuaXBwZXQgdG8gZ2V0IHRoZSBieXRlY29kZXM6CisJLyogd2hpbGUgKDw+KSB7CisJICAgIEBjID0gc3BsaXQoLy8pOworCSAgICBmb3JlYWNoICRjIChAYykgeworCSAgICAgcHJpbnRmKCIweCUwMngsIDB4MDAsICIsIG9yZCgkYykpOworCSAgICB9CisJICAgfQorCSovCisKK3N0cmluZ19tZmc6CS5ieXRlIHN0cmluZ19tZmdfZW5kLXN0cmluZ19tZmcKKwkuYnl0ZSAzCis7CS5ieXRlICJBQ01FIHVzYiB3aWRnZXRzIgorCS5ieXRlIDB4NDEsIDB4MDAsIDB4NDMsIDB4MDAsIDB4NGQsIDB4MDAsIDB4NDUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NzUsIDB4MDAsIDB4NzMsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4NjksIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjcsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NzMsIDB4MDAKK3N0cmluZ19tZmdfZW5kOgorCQorc3RyaW5nX3Byb2R1Y3Q6CS5ieXRlIHN0cmluZ19wcm9kdWN0X2VuZC1zdHJpbmdfcHJvZHVjdAorCS5ieXRlIDMKKzsJLmJ5dGUgIkFDTUUgVVNCIHNlcmlhbCB3aWRnZXQiCisJLmJ5dGUgMHg0MSwgMHgwMCwgMHg0MywgMHgwMCwgMHg0ZCwgMHgwMCwgMHg0NSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1NSwgMHgwMCwgMHg1MywgMHgwMCwgMHg0MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg3MywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2YywgMHgwMCwgMHgyMCwgMHgwMCwgMHg3NywgMHgwMCwgMHg2OSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2NywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3NCwgMHgwMAorc3RyaW5nX3Byb2R1Y3RfZW5kOgorCQorc3RyaW5nX3NlcmlhbDoJLmJ5dGUgc3RyaW5nX3NlcmlhbF9lbmQtc3RyaW5nX3NlcmlhbAorCS5ieXRlIDMKKzsJLmJ5dGUgIjQ3IgorCS5ieXRlIDB4MzQsIDB4MDAsIDB4MzcsIDB4MDAKK3N0cmluZ19zZXJpYWxfZW5kOgorCQkKKzs7OyByaW5nIGJ1ZmZlciBtZW1vcnkKKwk7OyB0eF9yaW5nX2luKzEgaXMgd2hlcmUgdGhlIG5leHQgaW5wdXQgYnl0ZSB3aWxsIGdvCisJOzsgW3R4X3Jpbmdfb3V0XSBoYXMgYmVlbiBzZW50CisJOzsgaWYgdHhfcmluZ19pbiA9PSB0eF9yaW5nX291dCwgdGhlcmVzIG5vIHdvcmsgdG8gZG8KKwk7OyB0aGVyZSBhcmUgKHR4X3JpbmdfaW4gLSB0eF9yaW5nX291dCkgY2hhcnMgdG8gYmUgd3JpdHRlbgorCTs7IGRvbnQgbGV0IF9pbiBsYXAgX291dAorCTs7ICAgY2Fubm90IGluYyBpZiB0eF9yaW5nX2luKzEgPT0gdHhfcmluZ19vdXQKKwk7OyAgd3JpdGUgW3R4X3JpbmdfaW4rMV0gdGhlbiB0eF9yaW5nX2luKysKKwk7OyAgIGlmICh0eF9yaW5nX2luKzEgPT0gdHhfcmluZ19vdXQpLCBvdmVyZmxvdworCTs7ICAgZWxzZSB0eF9yaW5nX2luKysKKwk7OyAgcmVhZC9zZW5kIFt0eF9yaW5nX291dCsxXSwgdGhlbiB0eF9yaW5nX291dCsrCisKKwk7OyByeF9yaW5nX2luIHdvcmtzIHRoZSBzYW1lIHdheQorCQorCS5vcmcgMHgxMDAwCit0eF9yaW5nOgorCS5za2lwIDB4MTAwCQk7IDI1NiBieXRlcworcnhfcmluZzoKKwkuc2tpcCAweDEwMAkJOyAyNTYgYnl0ZXMKKwkKKwkKKwkuRU5ECisJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZDBhYTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwpAQCAtMCwwICsxLDg5NCBAQAorLyoKKyAqIFVTQiBLZXlzcGFuIFBEQSAvIFhpcmNvbSAvIEVudHJlZ3JhIENvbnZlcnRlciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDAxIEdyZWcgS3JvYWgtSGFydG1hbgk8Z3JlZ0Brcm9haC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgQnJpYW4gV2FybmVyCTx3YXJuZXJAbG90aGFyLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwMCBBbCBCb3JjaGVycwkJPGJvcmNoZXJzQHN0ZWluZXJwb2ludC5jb20+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcyBkcml2ZXIKKyAqIAorICogKDA5LzA3LzIwMDEpIGdraAorICoJY2xlYW5lZCB1cCB0aGUgWGlyY29tIHN1cHBvcnQuICBBZGRlZCBpZHMgZm9yIEVudHJlZ3JhIGRldmljZSB3aGljaCBpcworICoJdGhlIHNhbWUgYXMgdGhlIFhpcmNvbSBkZXZpY2UuICBFbmFibGVkIHRoZSBjb2RlIHRvIGJlIGNvbXBpbGVkIGZvcgorICoJZWl0aGVyIFhpcmNvbSBvciBLZXlzcGFuIGRldmljZXMuCisgKgorICogKDA4LzExLzIwMDEpIENyaXN0aWFuIE0uIENyYWNpdW5lc2N1CisgKglzdXBwb3J0IGZvciBYaXJjb20gUEdTREI5CisgKgorICogKDA1LzMxLzIwMDEpIGdraAorICoJc3dpdGNoZWQgZnJvbSB1c2luZyBzcGlubG9jayB0byBhIHNlbWFwaG9yZSwgd2hpY2ggZml4ZXMgbG90cyBvZiBwcm9ibGVtcy4KKyAqCisgKiAoMDQvMDgvMjAwMSkgZ2IKKyAqCUlkZW50aWZ5IHZlcnNpb24gb24gbW9kdWxlIGxvYWQuCisgKiAKKyAqICgxMS8wMS8yMDAwKSBBZGFtIEouIFJpY2h0ZXIKKyAqCXVzYl9kZXZpY2VfaWQgdGFibGUgc3VwcG9ydAorICogCisgKiAoMTAvMDUvMjAwMCkgZ2toCisgKglGaXhlZCBidWcgd2l0aCB1cmItPmRldiBub3QgYmVpbmcgc2V0IHByb3Blcmx5LCBub3cgdGhhdCB0aGUgdXNiCisgKgljb3JlIG5lZWRzIGl0LgorICogCisgKiAoMDgvMjgvMjAwMCkgZ2toCisgKglBZGRlZCBsb2NrcyBmb3IgU01QIHNhZmVuZXNzLgorICoJRml4ZWQgTU9EX0lOQyBhbmQgTU9EX0RFQyBsb2dpYyBhbmQgdGhlIGFiaWxpdHkgdG8gb3BlbiBhIHBvcnQgbW9yZSAKKyAqCXRoYW4gb25jZS4KKyAqIAorICogKDA3LzIwLzIwMDApIGJvcmNoZXJzCisgKgktIGtleXNwYW5fcGRhX3dyaXRlIG5vIGxvbmdlciBzbGVlcHMgaWYgaXQgaXMgY2FsbGVkIG9uIGludGVycnVwdCB0aW1lOworICoJICBQUFAgYW5kIHRoZSBsaW5lIGRpc2NpcGxpbmUgd2l0aCBzdHR5IGVjaG8gb24gY2FuIGNhbGwgd3JpdGUgb24KKyAqCSAgaW50ZXJydXB0IHRpbWUgYW5kIHRoaXMgd291bGQgY2F1c2UgYW4gb29wcyBpZiB3cml0ZSBzbGVwdAorICoJLSBpZiBrZXlzcGFuX3BkYV93cml0ZSBpcyBpbiBhbiBpbnRlcnJ1cHQsIGl0IHdpbGwgbm90IGNhbGwKKyAqCSAgdXNiX2NvbnRyb2xfbXNnICh3aGljaCBzbGVlcHMpIHRvIHF1ZXJ5IHRoZSByb29tIGluIHRoZSBkZXZpY2UKKyAqCSAgYnVmZmVyLCBpdCBzaW1wbHkgdXNlcyB0aGUgY3VycmVudCByb29tIHZhbHVlIGl0IGhhcworICoJLSBpZiB0aGUgdXJiIGlzIGJ1c3kgb3IgaWYgaXQgaXMgdGhyb3R0bGVkIGtleXNwYW5fcGRhX3dyaXRlIGp1c3QKKyAqCSAgcmV0dXJucyAwLCByYXRoZXIgdGhhbiBzbGVlcGluZyB0byB3YWl0IGZvciB0aGlzIHRvIGNoYW5nZTsgdGhlCisgKgkgIHdyaXRlX2NoYW4gY29kZSBpbiBuX3R0eS5jIHdpbGwgc2xlZXAgaWYgbmVlZGVkIGJlZm9yZSBjYWxsaW5nCisgKgkgIGtleXNwYW5fcGRhX3dyaXRlIGFnYWluCisgKgktIGlmIHRoZSBkZXZpY2UgbmVlZHMgdG8gYmUgdW50aHJvdHRsZWQsIHdyaXRlIG5vdyBxdWV1ZXMgdXAgdGhlCisgKgkgIGNhbGwgdG8gdXNiX2NvbnRyb2xfbXNnICh3aGljaCBzbGVlcHMpIHRvIHVudGhyb3R0bGUgdGhlIGRldmljZQorICoJLSB0aGUgd2FrZXVwcyBmcm9tIGtleXNwYW5fcGRhX3dyaXRlX2J1bGtfY2FsbGJhY2sgYXJlIHF1ZXVlZCByYXRoZXIKKyAqCSAgdGhhbiBkb25lIGRpcmVjdGx5IGZyb20gdGhlIGNhbGxiYWNrIHRvIGF2b2lkIHRoZSByYWNlIGluIHdyaXRlX2NoYW4KKyAqCS0ga2V5c3Bhbl9wZGFfY2hhcnNfaW5fYnVmZmVyIGFsc28gaW5kaWNhdGVzIGl0cyBidWZmZXIgaXMgZnVsbCBpZiB0aGUKKyAqCSAgdXJiIHN0YXR1cyBpcyAtRUlOUFJPR1JFU1MsIG1lYW5pbmcgaXQgY2Fubm90IHdyaXRlIGF0IHRoZSBtb21lbnQKKyAqICAgICAgCisgKiAoMDcvMTkvMjAwMCkgZ2toCisgKglBZGRlZCBtb2R1bGVfaW5pdCBhbmQgbW9kdWxlX2V4aXQgZnVuY3Rpb25zIHRvIGhhbmRsZSB0aGUgZmFjdCB0aGF0IHRoaXMKKyAqCWRyaXZlciBpcyBhIGxvYWRhYmxlIG1vZHVsZSBub3cuCisgKgorICogKDAzLzI2LzIwMDApIGdraAorICoJU3BsaXQgZHJpdmVyIHVwIGludG8gZGV2aWNlIHNwZWNpZmljIHBpZWNlcy4KKyAqIAorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKK3N0YXRpYyBpbnQgZGVidWc7CisKK3N0cnVjdCBlenVzYl9oZXhfcmVjb3JkIHsKKwlfX3UxNiBhZGRyZXNzOworCV9fdTggZGF0YV9zaXplOworCV9fdTggZGF0YVsxNl07Cit9OworCisvKiBtYWtlIGEgc2ltcGxlIGRlZmluZSB0byBoYW5kbGUgaWYgd2UgYXJlIGNvbXBpbGluZyBrZXlzcGFuX3BkYSBvciB4aXJjb20gc3VwcG9ydCAqLworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9QREEpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9QREFfTU9EVUxFKQorCSNkZWZpbmUgS0VZU1BBTgorI2Vsc2UKKwkjdW5kZWYgS0VZU1BBTgorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NFUklBTF9YSVJDT00pIHx8IGRlZmluZWQoQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NX01PRFVMRSkKKwkjZGVmaW5lIFhJUkNPTQorI2Vsc2UKKwkjdW5kZWYgWElSQ09NCisjZW5kaWYKKworI2lmZGVmIEtFWVNQQU4KKyNpbmNsdWRlICJrZXlzcGFuX3BkYV9mdy5oIgorI2VuZGlmCisKKyNpZmRlZiBYSVJDT00KKyNpbmNsdWRlICJ4aXJjb21fcGdzX2Z3LmgiCisjZW5kaWYKKworI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuMSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiQnJpYW4gV2FybmVyIDx3YXJuZXJAbG90aGFyLmNvbT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgS2V5c3BhbiBQREEgQ29udmVydGVyIGRyaXZlciIKKworc3RydWN0IGtleXNwYW5fcGRhX3ByaXZhdGUgeworCWludAkJCXR4X3Jvb207CisJaW50CQkJdHhfdGhyb3R0bGVkOworCXN0cnVjdCB3b3JrX3N0cnVjdAkJCXdha2V1cF93b3JrOworCXN0cnVjdCB3b3JrX3N0cnVjdAkJCXVudGhyb3R0bGVfd29yazsKK307CisKKworI2RlZmluZSBLRVlTUEFOX1ZFTkRPUl9JRAkJMHgwNmNkCisjZGVmaW5lIEtFWVNQQU5fUERBX0ZBS0VfSUQJCTB4MDEwMworI2RlZmluZSBLRVlTUEFOX1BEQV9JRAkJCTB4MDEwNCAvKiBubyBjbHVlICovCisKKy8qIEZvciBYaXJjb20gUEdTREI5IGFuZCBvbGRlciBFbnRyZWdyYSB2ZXJzaW9uIG9mIHRoZSBzYW1lIGRldmljZSAqLworI2RlZmluZSBYSVJDT01fVkVORE9SX0lECQkweDA4NWEKKyNkZWZpbmUgWElSQ09NX0ZBS0VfSUQJCQkweDgwMjcKKyNkZWZpbmUgRU5UUkVHUkFfVkVORE9SX0lECQkweDE2NDUKKyNkZWZpbmUgRU5UUkVHUkFfRkFLRV9JRAkJMHg4MDkzCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jb21iaW5lZCBbXSA9IHsKKyNpZmRlZiBLRVlTUEFOCisJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBLRVlTUEFOX1BEQV9GQUtFX0lEKSB9LAorI2VuZGlmCisjaWZkZWYgWElSQ09NCisJeyBVU0JfREVWSUNFKFhJUkNPTV9WRU5ET1JfSUQsIFhJUkNPTV9GQUtFX0lEKSB9LAorCXsgVVNCX0RFVklDRShFTlRSRUdSQV9WRU5ET1JfSUQsIEVOVFJFR1JBX0ZBS0VfSUQpIH0sCisjZW5kaWYKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIEtFWVNQQU5fUERBX0lEKSB9LAorCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlX2NvbWJpbmVkKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGtleXNwYW5fcGRhX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkia2V5c3Bhbl9wZGEiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGVfY29tYmluZWQsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfc3RkIFtdID0geworCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwgS0VZU1BBTl9QREFfSUQpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyNpZmRlZiBLRVlTUEFOCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfZmFrZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIEtFWVNQQU5fUERBX0ZBS0VfSUQpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisjZW5kaWYKKworI2lmZGVmIFhJUkNPTQorc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2Zha2VfeGlyY29tIFtdID0geworICAgICAgICB7IFVTQl9ERVZJQ0UoWElSQ09NX1ZFTkRPUl9JRCwgWElSQ09NX0ZBS0VfSUQpIH0sCisgICAgICAgIHsgVVNCX0RFVklDRShFTlRSRUdSQV9WRU5ET1JfSUQsIEVOVFJFR1JBX0ZBS0VfSUQpIH0sCisgICAgICAgIHsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorfTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBrZXlzcGFuX3BkYV93YWtldXBfd3JpdGUoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgKQoreworCisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnR0eTsKKworCS8qIHdha2UgdXAgcG9ydCBwcm9jZXNzZXMgKi8KKwl3YWtlX3VwX2ludGVycnVwdGlibGUoICZwb3J0LT53cml0ZV93YWl0ICk7CisKKwkvKiB3YWtlIHVwIGxpbmUgZGlzY2lwbGluZSAqLworCXR0eV93YWtldXAodHR5KTsKK30KKworc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfcmVxdWVzdF91bnRocm90dGxlKCBzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsICkKK3sKKwlpbnQgcmVzdWx0OworCisJZGJnKCIgcmVxdWVzdF91bnRocm90dGxlIik7CisJLyogYXNrIHRoZSBkZXZpY2UgdG8gdGVsbCB1cyB3aGVuIHRoZSB0eCBidWZmZXIgYmVjb21lcworCSAgIHN1ZmZpY2llbnRseSBlbXB0eSAqLworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgCisJCQkJIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkJIDcsIC8qIHJlcXVlc3RfdW50aHJvdHRsZSAqLworCQkJCSBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFCisJCQkJIHwgVVNCX0RJUl9PVVQsCisJCQkJIDE2LCAvKiB2YWx1ZTogdGhyZXNob2xkICovCisJCQkJIDAsIC8qIGluZGV4ICovCisJCQkJIE5VTEwsCisJCQkJIDAsCisJCQkJIDIwMDApOworCWlmIChyZXN1bHQgPCAwKQorCQlkYmcoIiVzIC0gZXJyb3IgJWQgZnJvbSB1c2JfY29udHJvbF9tc2ciLCAKKwkJICAgIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKK30KKworCitzdGF0aWMgdm9pZCBrZXlzcGFuX3BkYV9yeF9pbnRlcnJ1cHQgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworICAgICAgIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgaTsKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBrZXlzcGFuX3BkYV9wcml2YXRlICpwcml2OworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworIAkvKiBzZWUgaWYgdGhlIG1lc3NhZ2UgaXMgZGF0YSBvciBhIHN0YXR1cyBpbnRlcnJ1cHQgKi8KKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIDA6CisJCS8qIHJlc3Qgb2YgbWVzc2FnZSBpcyByeCBkYXRhICovCisJCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJCWZvciAoaSA9IDE7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGggOyArK2kpIHsKKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIDApOworCQkJfQorCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJfQorCQlicmVhazsKKwljYXNlIDE6CisJCS8qIHN0YXR1cyBpbnRlcnJ1cHQgKi8KKwkJZGJnKCIgcnggaW50LCBkMT0lZCwgZDI9JWQiLCBkYXRhWzFdLCBkYXRhWzJdKTsKKwkJc3dpdGNoIChkYXRhWzFdKSB7CisJCWNhc2UgMTogLyogbW9kZW1saW5lIGNoYW5nZSAqLworCQkJYnJlYWs7CisJCWNhc2UgMjogLyogdHggdW50aHJvdHRsZSBpbnRlcnJ1cHQgKi8KKwkJCXByaXYtPnR4X3Rocm90dGxlZCA9IDA7CisJCQkvKiBxdWV1ZSB1cCBhIHdha2V1cCBhdCBzY2hlZHVsZXIgdGltZSAqLworCQkJc2NoZWR1bGVfd29yaygmcHJpdi0+d2FrZXVwX3dvcmspOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKK2V4aXQ6CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKK30KKworCitzdGF0aWMgdm9pZCBrZXlzcGFuX3BkYV9yeF90aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwkvKiBzdG9wIHJlY2VpdmluZyBjaGFyYWN0ZXJzLiBXZSBqdXN0IHR1cm4gb2ZmIHRoZSBVUkIgcmVxdWVzdCwgYW5kCisJICAgbGV0IGNoYXJzIHBpbGUgdXAgaW4gdGhlIGRldmljZS4gSWYgd2UncmUgZG9pbmcgaGFyZHdhcmUKKwkgICBmbG93Y29udHJvbCwgdGhlIGRldmljZSB3aWxsIHNpZ25hbCB0aGUgb3RoZXIgZW5kIHdoZW4gaXRzIGJ1ZmZlcgorCSAgIGZpbGxzIHVwLiBJZiB3ZSdyZSBkb2luZyBYT04vWE9GRiwgdGhpcyB3b3VsZCBiZSBhIGdvb2QgdGltZSB0bworCSAgIHNlbmQgYW4gWE9GRiwgYWx0aG91Z2ggaXQgbWlnaHQgbWFrZSBzZW5zZSB0byBmb2lzdCB0aGF0IG9mZgorCSAgIHVwb24gdGhlIGRldmljZSB0b28uICovCisKKwlkYmcoImtleXNwYW5fcGRhX3J4X3Rocm90dGxlIHBvcnQgJWQiLCBwb3J0LT5udW1iZXIpOworCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKK30KKworCitzdGF0aWMgdm9pZCBrZXlzcGFuX3BkYV9yeF91bnRocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCS8qIGp1c3QgcmVzdGFydCB0aGUgcmVjZWl2ZSBpbnRlcnJ1cHQgVVJCICovCisJZGJnKCJrZXlzcGFuX3BkYV9yeF91bnRocm90dGxlIHBvcnQgJWQiLCBwb3J0LT5udW1iZXIpOworCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCWlmICh1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfQVRPTUlDKSkKKwkJZGJnKCIgdXNiX3N1Ym1pdF91cmIocmVhZCB1cmIpIGZhaWxlZCIpOworCXJldHVybjsKK30KKworCitzdGF0aWMgaW50IGtleXNwYW5fcGRhX3NldGJhdWQgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGludCBiYXVkKQoreworCWludCByYzsKKwlpbnQgYmluZGV4OworCisJc3dpdGNoKGJhdWQpIHsKKwkJY2FzZSAxMTA6IGJpbmRleCA9IDA7IGJyZWFrOworCQljYXNlIDMwMDogYmluZGV4ID0gMTsgYnJlYWs7CisJCWNhc2UgMTIwMDogYmluZGV4ID0gMjsgYnJlYWs7CisJCWNhc2UgMjQwMDogYmluZGV4ID0gMzsgYnJlYWs7CisJCWNhc2UgNDgwMDogYmluZGV4ID0gNDsgYnJlYWs7CisJCWNhc2UgOTYwMDogYmluZGV4ID0gNTsgYnJlYWs7CisJCWNhc2UgMTkyMDA6IGJpbmRleCA9IDY7IGJyZWFrOworCQljYXNlIDM4NDAwOiBiaW5kZXggPSA3OyBicmVhazsKKwkJY2FzZSA1NzYwMDogYmluZGV4ID0gODsgYnJlYWs7CisJCWNhc2UgMTE1MjAwOiBiaW5kZXggPSA5OyBicmVhazsKKwkJZGVmYXVsdDogcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogcmF0aGVyIHRoYW4gZmlndXJlIG91dCBob3cgdG8gc2xlZXAgd2hpbGUgd2FpdGluZyBmb3IgdGhpcworCSAgIHRvIGNvbXBsZXRlLCBJIGp1c3QgdXNlIHRoZSAibGVnYWN5IiBBUEkuICovCisJcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkgICAgIDAsIC8qIHNldCBiYXVkICovCisJCQkgICAgIFVTQl9UWVBFX1ZFTkRPUiAKKwkJCSAgICAgfCBVU0JfUkVDSVBfSU5URVJGQUNFCisJCQkgICAgIHwgVVNCX0RJUl9PVVQsIC8qIHR5cGUgKi8KKwkJCSAgICAgYmluZGV4LCAvKiB2YWx1ZSAqLworCQkJICAgICAwLCAvKiBpbmRleCAqLworCQkJICAgICBOVUxMLCAvKiAmZGF0YSAqLworCQkJICAgICAwLCAvKiBzaXplICovCisJCQkgICAgIDIwMDApOyAvKiB0aW1lb3V0ICovCisJcmV0dXJuKHJjKTsKK30KKworCitzdGF0aWMgdm9pZCBrZXlzcGFuX3BkYV9icmVha19jdGwgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWludCB2YWx1ZTsKKwlpbnQgcmVzdWx0OworCisJaWYgKGJyZWFrX3N0YXRlID09IC0xKQorCQl2YWx1ZSA9IDE7IC8qIHN0YXJ0IGJyZWFrICovCisJZWxzZQorCQl2YWx1ZSA9IDA7IC8qIGNsZWFyIGJyZWFrICovCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJCTQsIC8qIHNldCBicmVhayAqLworCQkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCwKKwkJCQl2YWx1ZSwgMCwgTlVMTCwgMCwgMjAwMCk7CisJaWYgKHJlc3VsdCA8IDApCisJCWRiZygiJXMgLSBlcnJvciAlZCBmcm9tIHVzYl9jb250cm9sX21zZyIsIAorCQkgICAgX19GVU5DVElPTl9fLCByZXN1bHQpOworCS8qIHRoZXJlIGlzIHNvbWV0aGluZyBmdW5reSBhYm91dCB0aGlzLi4gdGhlIFRDU0JSSyB0aGF0ICdjdScgcGVyZm9ybXMKKwkgICBvdWdodCB0byB0cmFuc2xhdGUgaW50byBhIGJyZWFrX2N0bCgtMSksYnJlYWtfY3RsKDApIHBhaXIgSFovNAorCSAgIHNlY29uZHMgYXBhcnQsIGJ1dCBpdCBmZWVscyBsaWtlIHRoZSBicmVhayBzZW50IGlzbid0IGFzIGxvbmcgYXMgaXQKKwkgICBpcyBvbiAvZGV2L3R0eVMwICovCit9CisKKworc3RhdGljIHZvaWQga2V5c3Bhbl9wZGFfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIAorCQkJCSAgICAgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJdW5zaWduZWQgaW50IGNmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCisJLyogY2ZsYWcgc3BlY2lmaWVzIGxvdHMgb2Ygc3R1ZmY6IG51bWJlciBvZiBzdG9wIGJpdHMsIHBhcml0eSwgbnVtYmVyCisJICAgb2YgZGF0YSBiaXRzLCBiYXVkLiBXaGF0IGNhbiB0aGUgZGV2aWNlIGFjdHVhbGx5IGhhbmRsZT86CisJICAgQ1NUT1BCICgxIHN0b3AgYml0IG9yIDIpCisJICAgUEFSRU5CIChwYXJpdHkpCisJICAgQ1NJWkUgKDViaXQgLi4gOGJpdCkKKwkgICBUaGVyZSBpcyBtaW5pbWFsIGh3IHN1cHBvcnQgZm9yIHBhcml0eSAoYSBQU1cgYml0IHNlZW1zIHRvIGhvbGQgdGhlCisJICAgcGFyaXR5IG9mIHdoYXRldmVyIGlzIGluIHRoZSBhY2N1bXVsYXRvcikuIFRoZSBVQVJUIGVpdGhlciBkZWFscworCSAgIHdpdGggMTAgYml0cyAoc3RhcnQsIDggZGF0YSwgc3RvcCkgb3IgMTEgYml0cyAoc3RhcnQsIDggZGF0YSwKKwkgICAxIHNwZWNpYWwsIHN0b3ApLiBTbywgd2l0aCBmaXJtd2FyZSBjaGFuZ2VzLCB3ZSBjb3VsZCBkbzoKKwkgICA4TjE6IDEwIGJpdAorCSAgIDhOMjogMTEgYml0LCBleHRyYSBiaXQgYWx3YXlzIChtYXJrPykKKwkgICA4W0VPTVNdMTogMTEgYml0LCBleHRyYSBiaXQgaXMgcGFyaXR5CisJICAgN1tFT01TXTE6IDEwIGJpdCwgYjAvYjcgaXMgcGFyaXR5CisJICAgN1tFT01TXTI6IDExIGJpdCwgYjAvYjcgaXMgcGFyaXR5LCBleHRyYSBiaXQgYWx3YXlzIChtYXJrPykKKworCSAgIEhXIGZsb3cgY29udHJvbCBpcyBkaWN0YXRlZCBieSB0aGUgdHR5LT50ZXJtaW9zLT5jX2NmbGFncyAmIENSVFNDVFMKKwkgICBiaXQuCisKKwkgICBGb3Igbm93LCBqdXN0IGRvIGJhdWQuICovCisKKwlzd2l0Y2ggKGNmbGFnICYgQ0JBVUQpIHsKKwkJLyogd2UgY291bGQgc3VwcG9ydCBtb3JlIHZhbHVlcyBoZXJlLCBqdXN0IG5lZWQgdG8gY2FsY3VsYXRlCisJCSAgIHRoZSBuZWNlc3NhcnkgZGl2aXNvcnMgaW4gdGhlIGZpcm13YXJlLiA8YXNtL3Rlcm1iaXRzLmg+CisJCSAgIGhhcyB0aGUgQm5ubiBjb25zdGFudHMuICovCisJCWNhc2UgQjExMDoga2V5c3Bhbl9wZGFfc2V0YmF1ZChzZXJpYWwsIDExMCk7IGJyZWFrOworCQljYXNlIEIzMDA6IGtleXNwYW5fcGRhX3NldGJhdWQoc2VyaWFsLCAzMDApOyBicmVhazsKKwkJY2FzZSBCMTIwMDoga2V5c3Bhbl9wZGFfc2V0YmF1ZChzZXJpYWwsIDEyMDApOyBicmVhazsKKwkJY2FzZSBCMjQwMDoga2V5c3Bhbl9wZGFfc2V0YmF1ZChzZXJpYWwsIDI0MDApOyBicmVhazsKKwkJY2FzZSBCNDgwMDoga2V5c3Bhbl9wZGFfc2V0YmF1ZChzZXJpYWwsIDQ4MDApOyBicmVhazsKKwkJY2FzZSBCOTYwMDoga2V5c3Bhbl9wZGFfc2V0YmF1ZChzZXJpYWwsIDk2MDApOyBicmVhazsKKwkJY2FzZSBCMTkyMDA6IGtleXNwYW5fcGRhX3NldGJhdWQoc2VyaWFsLCAxOTIwMCk7IGJyZWFrOworCQljYXNlIEIzODQwMDoga2V5c3Bhbl9wZGFfc2V0YmF1ZChzZXJpYWwsIDM4NDAwKTsgYnJlYWs7CisJCWNhc2UgQjU3NjAwOiBrZXlzcGFuX3BkYV9zZXRiYXVkKHNlcmlhbCwgNTc2MDApOyBicmVhazsKKwkJY2FzZSBCMTE1MjAwOiBrZXlzcGFuX3BkYV9zZXRiYXVkKHNlcmlhbCwgMTE1MjAwKTsgYnJlYWs7CisJCWRlZmF1bHQ6IGRiZygiY2FuJ3QgaGFuZGxlIHJlcXVlc3RlZCBiYXVkIHJhdGUiKTsgYnJlYWs7CisJfQorfQorCisKKy8qIG1vZGVtIGNvbnRyb2wgcGluczogRFRSIGFuZCBSVFMgYXJlIG91dHB1dHMgYW5kIGNhbiBiZSBjb250cm9sbGVkLgorICAgRENELCBSSSwgRFNSLCBDVFMgYXJlIGlucHV0cyBhbmQgY2FuIGJlIHJlYWQuIEFsbCBvdXRwdXRzIGNhbiBhbHNvIGJlCisgICByZWFkLiBUaGUgYnl0ZSBwYXNzZWQgaXM6IERUUihiNykgRENEIFJJIERTUiBDVFMgUlRTKGIyKSB1bnVzZWQgdW51c2VkICovCisKK3N0YXRpYyBpbnQga2V5c3Bhbl9wZGFfZ2V0X21vZGVtX2luZm8oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCQkgICAgICB1bnNpZ25lZCBjaGFyICp2YWx1ZSkKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgY2hhciBkYXRhOworCXJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJICAgICAzLCAvKiBnZXQgcGlucyAqLworCQkJICAgICBVU0JfVFlQRV9WRU5ET1J8VVNCX1JFQ0lQX0lOVEVSRkFDRXxVU0JfRElSX0lOLAorCQkJICAgICAwLCAwLCAmZGF0YSwgMSwgMjAwMCk7CisJaWYgKHJjID4gMCkKKwkJKnZhbHVlID0gZGF0YTsKKwlyZXR1cm4gcmM7Cit9CisKKworc3RhdGljIGludCBrZXlzcGFuX3BkYV9zZXRfbW9kZW1faW5mbyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgdmFsdWUpCit7CisJaW50IHJjOworCXJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJICAgICAzLCAvKiBzZXQgcGlucyAqLworCQkJICAgICBVU0JfVFlQRV9WRU5ET1J8VVNCX1JFQ0lQX0lOVEVSRkFDRXxVU0JfRElSX09VVCwKKwkJCSAgICAgdmFsdWUsIDAsIE5VTEwsIDAsIDIwMDApOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBrZXlzcGFuX3BkYV90aW9jbWdldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWludCByYzsKKwl1bnNpZ25lZCBjaGFyIHN0YXR1czsKKwlpbnQgdmFsdWU7CisKKwlyYyA9IGtleXNwYW5fcGRhX2dldF9tb2RlbV9pbmZvKHNlcmlhbCwgJnN0YXR1cyk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCXZhbHVlID0KKwkJKChzdGF0dXMgJiAoMTw8NykpID8gVElPQ01fRFRSIDogMCkgfAorCQkoKHN0YXR1cyAmICgxPDw2KSkgPyBUSU9DTV9DQVIgOiAwKSB8CisJCSgoc3RhdHVzICYgKDE8PDUpKSA/IFRJT0NNX1JORyA6IDApIHwKKwkJKChzdGF0dXMgJiAoMTw8NCkpID8gVElPQ01fRFNSIDogMCkgfAorCQkoKHN0YXR1cyAmICgxPDwzKSkgPyBUSU9DTV9DVFMgOiAwKSB8CisJCSgoc3RhdHVzICYgKDE8PDIpKSA/IFRJT0NNX1JUUyA6IDApOworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIGludCBrZXlzcGFuX3BkYV90aW9jbXNldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQgcmM7CisJdW5zaWduZWQgY2hhciBzdGF0dXM7CisKKwlyYyA9IGtleXNwYW5fcGRhX2dldF9tb2RlbV9pbmZvKHNlcmlhbCwgJnN0YXR1cyk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJaWYgKHNldCAmIFRJT0NNX1JUUykKKwkJc3RhdHVzIHw9ICgxPDwyKTsKKwlpZiAoc2V0ICYgVElPQ01fRFRSKQorCQlzdGF0dXMgfD0gKDE8PDcpOworCisJaWYgKGNsZWFyICYgVElPQ01fUlRTKQorCQlzdGF0dXMgJj0gfigxPDwyKTsKKwlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpCisJCXN0YXR1cyAmPSB+KDE8PDcpOworCXJjID0ga2V5c3Bhbl9wZGFfc2V0X21vZGVtX2luZm8oc2VyaWFsLCBzdGF0dXMpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBrZXlzcGFuX3BkYV9pb2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFRJT0NNSVdBSVQ6CisJCS8qIHdhaXQgZm9yIGFueSBvZiB0aGUgNCBtb2RlbSBpbnB1dHMgKERDRCxSSSxEU1IsQ1RTKSovCisJCS8qIFRPRE8gKi8KKwljYXNlIFRJT0NHSUNPVU5UOgorCQkvKiByZXR1cm4gY291bnQgb2YgbW9kZW1saW5lIHRyYW5zaXRpb25zICovCisJCXJldHVybiAwOyAvKiBUT0RPICovCisJfQorCQorCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyBpbnQga2V5c3Bhbl9wZGFfd3JpdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgCisJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJaW50IHJlcXVlc3RfdW50aHJvdHRsZSA9IDA7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3Qga2V5c3Bhbl9wZGFfcHJpdmF0ZSAqcHJpdjsKKworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJLyogZ3Vlc3MgaG93IG11Y2ggcm9vbSBpcyBsZWZ0IGluIHRoZSBkZXZpY2UncyByaW5nIGJ1ZmZlciwgYW5kIGlmIHdlCisJICAgd2FudCB0byBzZW5kIG1vcmUgdGhhbiB0aGF0LCBjaGVjayBmaXJzdCwgdXBkYXRpbmcgb3VyIG5vdGlvbiBvZgorCSAgIHdoYXQgaXMgbGVmdC4gSWYgb3VyIHdyaXRlIHdpbGwgcmVzdWx0IGluIG5vIHJvb20gbGVmdCwgYXNrIHRoZQorCSAgIGRldmljZSB0byBnaXZlIHVzIGFuIGludGVycnVwdCB3aGVuIHRoZSByb29tIGF2YWlsYWJsZSByaXNlcyBhYm92ZQorCSAgIGEgdGhyZXNob2xkLCBhbmQgaG9sZCBvZmYgYWxsIHdyaXRlcnMgKGV2ZW50dWFsbHksIHRob3NlIHVzaW5nCisJICAgc2VsZWN0KCkgb3IgcG9sbCgpIHRvbykgdW50aWwgd2UgcmVjZWl2ZSB0aGF0IHVudGhyb3R0bGUgaW50ZXJydXB0LgorCSAgIEJsb2NrIGlmIHdlIGNhbid0IHdyaXRlIGFueXRoaW5nIGF0IGFsbCwgb3RoZXJ3aXNlIHdyaXRlIGFzIG11Y2ggYXMKKwkgICB3ZSBjYW4uICovCisJZGJnKCJrZXlzcGFuX3BkYV93cml0ZSglZCkiLGNvdW50KTsKKwlpZiAoY291bnQgPT0gMCkgeworCQlkYmcoIiB3cml0ZSByZXF1ZXN0IG9mIDAgYnl0ZXMiKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwkvKiB3ZSBtaWdodCBibG9jayBiZWNhdXNlIG9mOgorCSAgIHRoZSBUWCB1cmIgaXMgaW4tZmxpZ2h0ICh3YWl0IHVudGlsIGl0IGNvbXBsZXRlcykKKwkgICB0aGUgZGV2aWNlIGlzIGZ1bGwgKHdhaXQgdW50aWwgaXQgc2F5cyB0aGVyZSBpcyByb29tKQorCSovCisJaWYgKHBvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUyB8fCBwcml2LT50eF90aHJvdHRsZWQgKSB7CisJCXJldHVybiggMCApOworCX0KKworCS8qIEF0IHRoaXMgcG9pbnQgdGhlIFVSQiBpcyBpbiBvdXIgY29udHJvbCwgbm9ib2R5IGVsc2UgY2FuIHN1Ym1pdCBpdAorCSAgIGFnYWluICh0aGUgb25seSBzdWRkZW4gdHJhbnNpdGlvbiB3YXMgdGhlIG9uZSBmcm9tIEVJTlBST0dSRVNTIHRvCisJICAgZmluaXNoZWQpLiAgQWxzbywgdGhlIHR4IHByb2Nlc3MgaXMgbm90IHRocm90dGxlZC4gU28gd2UgYXJlCisJICAgcmVhZHkgdG8gd3JpdGUuICovCisKKwljb3VudCA9IChjb3VudCA+IHBvcnQtPmJ1bGtfb3V0X3NpemUpID8gcG9ydC0+YnVsa19vdXRfc2l6ZSA6IGNvdW50OworCisJLyogQ2hlY2sgaWYgd2UgbWlnaHQgb3ZlcnJ1biB0aGUgVHggYnVmZmVyLiAgIElmIHNvLCBhc2sgdGhlCisJICAgZGV2aWNlIGhvdyBtdWNoIHJvb20gaXQgcmVhbGx5IGhhcy4gIFRoaXMgaXMgZG9uZSBvbmx5IG9uCisJICAgc2NoZWR1bGVyIHRpbWUsIHNpbmNlIHVzYl9jb250cm9sX21zZygpIHNsZWVwcy4gKi8KKwlpZiAoY291bnQgPiBwcml2LT50eF9yb29tICYmICFpbl9pbnRlcnJ1cHQoKSkgeworCQl1bnNpZ25lZCBjaGFyIHJvb207CisJCXJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCAKKwkJCQkgICAgIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkJICAgICA2LCAvKiB3cml0ZV9yb29tICovCisJCQkJICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFCisJCQkJICAgICB8IFVTQl9ESVJfSU4sCisJCQkJICAgICAwLCAvKiB2YWx1ZTogMCBtZWFucyAicmVtYWluaW5nIHJvb20iICovCisJCQkJICAgICAwLCAvKiBpbmRleCAqLworCQkJCSAgICAgJnJvb20sCisJCQkJICAgICAxLAorCQkJCSAgICAgMjAwMCk7CisJCWlmIChyYyA8IDApIHsKKwkJCWRiZygiIHJvb21xdWVyeSBmYWlsZWQiKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlpZiAocmMgPT0gMCkgeworCQkJZGJnKCIgcm9vbXF1ZXJ5IHJldHVybmVkIDAgYnl0ZXMiKTsKKwkJCXJjID0gLUVJTzsgLyogZGV2aWNlIGRpZG4ndCByZXR1cm4gYW55IGRhdGEgKi8KKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlkYmcoIiByb29tcXVlcnkgc2F5cyAlZCIsIHJvb20pOworCQlwcml2LT50eF9yb29tID0gcm9vbTsKKwl9CisJaWYgKGNvdW50ID4gcHJpdi0+dHhfcm9vbSkgeworCQkvKiB3ZSdyZSBhYm91dCB0byBjb21wbGV0ZWx5IGZpbGwgdGhlIFR4IGJ1ZmZlciwgc28KKwkJICAgd2UnbGwgYmUgdGhyb3R0bGVkIGFmdGVyd2FyZHMuICovCisJCWNvdW50ID0gcHJpdi0+dHhfcm9vbTsKKwkJcmVxdWVzdF91bnRocm90dGxlID0gMTsKKwl9CisKKwlpZiAoY291bnQpIHsKKwkJLyogbm93IHRyYW5zZmVyIGRhdGEgKi8KKwkJbWVtY3B5IChwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgYnVmLCBjb3VudCk7CisJCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQgKi8KKwkJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gY291bnQ7CisJCQorCQlwcml2LT50eF9yb29tIC09IGNvdW50OworCisJCXBvcnQtPndyaXRlX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJCXJjID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJjKSB7CisJCQlkYmcoIiB1c2Jfc3VibWl0X3VyYih3cml0ZSBidWxrKSBmYWlsZWQiKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKwllbHNlIHsKKwkJLyogVGhlcmUgd2Fzbid0IGFueSByb29tIGxlZnQsIHNvIHdlIGFyZSB0aHJvdHRsZWQgdW50aWwKKwkJICAgdGhlIGJ1ZmZlciBlbXB0aWVzIGEgYml0ICovCisJCXJlcXVlc3RfdW50aHJvdHRsZSA9IDE7CisJfQorCisJaWYgKHJlcXVlc3RfdW50aHJvdHRsZSkgeworCQlwcml2LT50eF90aHJvdHRsZWQgPSAxOyAvKiBibG9jayB3cml0ZXJzICovCisJCXNjaGVkdWxlX3dvcmsoJnByaXYtPnVudGhyb3R0bGVfd29yayk7CisJfQorCisJcmMgPSBjb3VudDsKK2V4aXQ6CisJcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyB2b2lkIGtleXNwYW5fcGRhX3dyaXRlX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBrZXlzcGFuX3BkYV9wcml2YXRlICpwcml2OworCisJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCS8qIHF1ZXVlIHVwIGEgd2FrZXVwIGF0IHNjaGVkdWxlciB0aW1lICovCisJc2NoZWR1bGVfd29yaygmcHJpdi0+d2FrZXVwX3dvcmspOworfQorCisKK3N0YXRpYyBpbnQga2V5c3Bhbl9wZGFfd3JpdGVfcm9vbSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qga2V5c3Bhbl9wZGFfcHJpdmF0ZSAqcHJpdjsKKworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwkvKiB1c2VkIGJ5IG5fdHR5LmMgZm9yIHByb2Nlc3Npbmcgb2YgdGFicyBhbmQgc3VjaC4gR2l2aW5nIGl0IG91cgorCSAgIGNvbnNlcnZhdGl2ZSBndWVzcyBpcyBwcm9iYWJseSBnb29kIGVub3VnaCwgYnV0IG5lZWRzIHRlc3RpbmcgYnkKKwkgICBydW5uaW5nIGEgY29uc29sZSB0aHJvdWdoIHRoZSBkZXZpY2UuICovCisKKwlyZXR1cm4gKHByaXYtPnR4X3Jvb20pOworfQorCisKK3N0YXRpYyBpbnQga2V5c3Bhbl9wZGFfY2hhcnNfaW5fYnVmZmVyIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBrZXlzcGFuX3BkYV9wcml2YXRlICpwcml2OworCQorCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJCisJLyogd2hlbiB0aHJvdHRsZWQsIHJldHVybiBhdCBsZWFzdCBXQUtFVVBfQ0hBUlMgdG8gdGVsbCBzZWxlY3QoKSAodmlhCisJICAgbl90dHkuYzpub3JtYWxfcG9sbCgpICkgdGhhdCB3ZSdyZSBub3Qgd3JpdGVhYmxlLiAqLworCWlmKCBwb3J0LT53cml0ZV91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MgfHwgcHJpdi0+dHhfdGhyb3R0bGVkICkKKwkJcmV0dXJuIDI1NjsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGtleXNwYW5fcGRhX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJdW5zaWduZWQgY2hhciByb29tOworCWludCByYyA9IDA7CisJc3RydWN0IGtleXNwYW5fcGRhX3ByaXZhdGUgKnByaXY7CisKKwkvKiBmaW5kIG91dCBob3cgbXVjaCByb29tIGlzIGluIHRoZSBUeCByaW5nICovCisJcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkgICAgIDYsIC8qIHdyaXRlX3Jvb20gKi8KKwkJCSAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRQorCQkJICAgICB8IFVTQl9ESVJfSU4sCisJCQkgICAgIDAsIC8qIHZhbHVlICovCisJCQkgICAgIDAsIC8qIGluZGV4ICovCisJCQkgICAgICZyb29tLAorCQkJICAgICAxLAorCQkJICAgICAyMDAwKTsKKwlpZiAocmMgPCAwKSB7CisJCWRiZygiJXMgLSByb29tcXVlcnkgZmFpbGVkIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKHJjID09IDApIHsKKwkJZGJnKCIlcyAtIHJvb21xdWVyeSByZXR1cm5lZCAwIGJ5dGVzIiwgX19GVU5DVElPTl9fKTsKKwkJcmMgPSAtRUlPOworCQlnb3RvIGVycm9yOworCX0KKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXByaXYtPnR4X3Jvb20gPSByb29tOworCXByaXYtPnR4X3Rocm90dGxlZCA9IHJvb20gPyAwIDogMTsKKworCS8qIHRoZSBub3JtYWwgc2VyaWFsIGRldmljZSBzZWVtcyB0byBhbHdheXMgdHVybiBvbiBEVFIgYW5kIFJUUyBoZXJlLAorCSAgIHNvIGRvIHRoZSBzYW1lICovCisJaWYgKHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKQorCQlrZXlzcGFuX3BkYV9zZXRfbW9kZW1faW5mbyhzZXJpYWwsICgxPDw3KSB8ICgxPDwyKSApOworCWVsc2UKKwkJa2V5c3Bhbl9wZGFfc2V0X21vZGVtX2luZm8oc2VyaWFsLCAwKTsKKworCS8qU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UqLworCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCXJjID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJjKSB7CisJCWRiZygiJXMgLSB1c2Jfc3VibWl0X3VyYihyZWFkIGludCkgZmFpbGVkIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBlcnJvcjsKKwl9CisKK2Vycm9yOgorCXJldHVybiByYzsKK30KKworCitzdGF0aWMgdm9pZCBrZXlzcGFuX3BkYV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCisJaWYgKHNlcmlhbC0+ZGV2KSB7CisJCS8qIHRoZSBub3JtYWwgc2VyaWFsIGRldmljZSBzZWVtcyB0byBhbHdheXMgc2h1dCBvZmYgRFRSIGFuZCBSVFMgbm93ICovCisJCWlmIChwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBIVVBDTCkKKwkJCWtleXNwYW5fcGRhX3NldF9tb2RlbV9pbmZvKHNlcmlhbCwgMCk7CisKKwkJLyogc2h1dGRvd24gb3VyIGJ1bGsgcmVhZHMgYW5kIHdyaXRlcyAqLworCQl1c2Jfa2lsbF91cmIocG9ydC0+d3JpdGVfdXJiKTsKKwkJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOworCX0KK30KKworCisvKiBkb3dubG9hZCB0aGUgZmlybXdhcmUgdG8gYSAiZmFrZSIgZGV2aWNlIChwcmUtcmVudW1lcmF0aW9uKSAqLworc3RhdGljIGludCBrZXlzcGFuX3BkYV9mYWtlX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IHJlc3BvbnNlOworCWNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkICpyZWNvcmQgPSBOVUxMOworCisJLyogZG93bmxvYWQgdGhlIGZpcm13YXJlIGhlcmUgLi4uICovCisJcmVzcG9uc2UgPSBlenVzYl9zZXRfcmVzZXQoc2VyaWFsLCAxKTsKKworI2lmZGVmIEtFWVNQQU4KKwlpZiAobGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IEtFWVNQQU5fVkVORE9SX0lEKQorCQlyZWNvcmQgPSAma2V5c3Bhbl9wZGFfZmlybXdhcmVbMF07CisjZW5kaWYKKyNpZmRlZiBYSVJDT00KKwlpZiAoKGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBYSVJDT01fVkVORE9SX0lEKSB8fAorCSAgICAobGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IEVOVFJFR1JBX1ZFTkRPUl9JRCkpCisJCXJlY29yZCA9ICZ4aXJjb21fcGdzX2Zpcm13YXJlWzBdOworI2VuZGlmCisJaWYgKHJlY29yZCA9PSBOVUxMKSB7CisJCWVycigiJXM6IHVua25vd24gdmVuZG9yLCBhYm9ydGluZy4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwl3aGlsZShyZWNvcmQtPmFkZHJlc3MgIT0gMHhmZmZmKSB7CisJCXJlc3BvbnNlID0gZXp1c2Jfd3JpdGVtZW1vcnkoc2VyaWFsLCByZWNvcmQtPmFkZHJlc3MsCisJCQkJCSAgICAgKHVuc2lnbmVkIGNoYXIgKilyZWNvcmQtPmRhdGEsCisJCQkJCSAgICAgcmVjb3JkLT5kYXRhX3NpemUsIDB4YTApOworCQlpZiAocmVzcG9uc2UgPCAwKSB7CisJCQllcnIoImV6dXNiX3dyaXRlbWVtb3J5IGZhaWxlZCBmb3IgS2V5c3BhbiBQREEgIgorCQkJICAgICJmaXJtd2FyZSAoJWQgJTA0WCAlcCAlZCkiLAorCQkJICAgIHJlc3BvbnNlLCAKKwkJCSAgICByZWNvcmQtPmFkZHJlc3MsIHJlY29yZC0+ZGF0YSwgcmVjb3JkLT5kYXRhX3NpemUpOworCQkJYnJlYWs7CisJCX0KKwkJcmVjb3JkKys7CisJfQorCS8qIGJyaW5nIGRldmljZSBvdXQgb2YgcmVzZXQuIFJlbnVtZXJhdGlvbiB3aWxsIG9jY3VyIGluIGEgbW9tZW50CisJICAgYW5kIHRoZSBuZXcgZGV2aWNlIHdpbGwgYmluZCB0byB0aGUgcmVhbCBkcml2ZXIgKi8KKwlyZXNwb25zZSA9IGV6dXNiX3NldF9yZXNldChzZXJpYWwsIDApOworCisJLyogd2Ugd2FudCB0aGlzIGRldmljZSB0byBmYWlsIHRvIGhhdmUgYSBkcml2ZXIgYXNzaWduZWQgdG8gaXQuICovCisJcmV0dXJuICgxKTsKK30KKworc3RhdGljIGludCBrZXlzcGFuX3BkYV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCisJc3RydWN0IGtleXNwYW5fcGRhX3ByaXZhdGUgKnByaXY7CisKKwkvKiBhbGxvY2F0ZSB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMgZm9yIGFsbCBwb3J0cy4gV2VsbCwgZm9yIGFsbAorCSAgIG9uZSBwb3J0cy4gKi8KKworCXByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga2V5c3Bhbl9wZGFfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuICgxKTsgLyogZXJyb3IgKi8KKwl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdLCBwcml2KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZXJpYWwtPnBvcnRbMF0tPndyaXRlX3dhaXQpOworCUlOSVRfV09SSygmcHJpdi0+d2FrZXVwX3dvcmssICh2b2lkICopa2V5c3Bhbl9wZGFfd2FrZXVwX3dyaXRlLAorCQkJKHZvaWQgKikoc2VyaWFsLT5wb3J0WzBdKSk7CisJSU5JVF9XT1JLKCZwcml2LT51bnRocm90dGxlX3dvcmssCisJCQkodm9pZCAqKWtleXNwYW5fcGRhX3JlcXVlc3RfdW50aHJvdHRsZSwKKwkJCSh2b2lkICopKHNlcmlhbCkpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkIGtleXNwYW5fcGRhX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCQorCWtmcmVlKHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0pKTsKK30KKworI2lmZGVmIEtFWVNQQU4KK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBrZXlzcGFuX3BkYV9mYWtlX2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJLZXlzcGFuIFBEQSAtIChwcmVyZW51bWVyYXRpb24pIiwKKwkuc2hvcnRfbmFtZSA9CQkia2V5c3Bhbl9wZGFfcHJlIiwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGVfZmFrZSwKKwkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX2luID0JCU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX291dCA9CQlOVU1fRE9OVF9DQVJFLAorCS5udW1fcG9ydHMgPQkJMSwKKwkuYXR0YWNoID0JCWtleXNwYW5fcGRhX2Zha2Vfc3RhcnR1cCwKK307CisjZW5kaWYKKworI2lmZGVmIFhJUkNPTQorc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIHhpcmNvbV9wZ3NfZmFrZV9kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiWGlyY29tIC8gRW50cmVncmEgUEdTIC0gKHByZXJlbnVtZXJhdGlvbikiLAorCS5zaG9ydF9uYW1lID0JCSJ4aXJjb21fbm9fZmlybSIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlX2Zha2VfeGlyY29tLAorCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4gPQkJTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfb3V0ID0JCU5VTV9ET05UX0NBUkUsCisJLm51bV9wb3J0cyA9CQkxLAorCS5hdHRhY2ggPQkJa2V5c3Bhbl9wZGFfZmFrZV9zdGFydHVwLAorfTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUga2V5c3Bhbl9wZGFfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIktleXNwYW4gUERBIiwKKwkuc2hvcnRfbmFtZSA9CQkia2V5c3Bhbl9wZGEiLAorCS5pZF90YWJsZSA9CQlpZF90YWJsZV9zdGQsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQkxLAorCS5udW1fYnVsa19pbiA9CQkwLAorCS5udW1fYnVsa19vdXQgPQkJMSwKKwkubnVtX3BvcnRzID0JCTEsCisJLm9wZW4gPQkJCWtleXNwYW5fcGRhX29wZW4sCisJLmNsb3NlID0JCWtleXNwYW5fcGRhX2Nsb3NlLAorCS53cml0ZSA9CQlrZXlzcGFuX3BkYV93cml0ZSwKKwkud3JpdGVfcm9vbSA9CQlrZXlzcGFuX3BkYV93cml0ZV9yb29tLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0gCWtleXNwYW5fcGRhX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJLnJlYWRfaW50X2NhbGxiYWNrID0Ja2V5c3Bhbl9wZGFfcnhfaW50ZXJydXB0LAorCS5jaGFyc19pbl9idWZmZXIgPQlrZXlzcGFuX3BkYV9jaGFyc19pbl9idWZmZXIsCisJLnRocm90dGxlID0JCWtleXNwYW5fcGRhX3J4X3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCWtleXNwYW5fcGRhX3J4X3VudGhyb3R0bGUsCisJLmlvY3RsID0JCWtleXNwYW5fcGRhX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQlrZXlzcGFuX3BkYV9zZXRfdGVybWlvcywKKwkuYnJlYWtfY3RsID0JCWtleXNwYW5fcGRhX2JyZWFrX2N0bCwKKwkudGlvY21nZXQgPQkJa2V5c3Bhbl9wZGFfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0JCWtleXNwYW5fcGRhX3Rpb2Ntc2V0LAorCS5hdHRhY2ggPQkJa2V5c3Bhbl9wZGFfc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkJa2V5c3Bhbl9wZGFfc2h1dGRvd24sCit9OworCisKK3N0YXRpYyBpbnQgX19pbml0IGtleXNwYW5fcGRhX2luaXQgKHZvaWQpCit7CisJaW50IHJldHZhbDsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZrZXlzcGFuX3BkYV9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3BkYV9yZWdpc3RlcjsKKyNpZmRlZiBLRVlTUEFOCisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3Rlcigma2V5c3Bhbl9wZGFfZmFrZV9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3BkYV9mYWtlX3JlZ2lzdGVyOworI2VuZGlmCisjaWZkZWYgWElSQ09NCisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmeGlyY29tX3Bnc19mYWtlX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfeGlyY29tX3JlZ2lzdGVyOworI2VuZGlmCisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZrZXlzcGFuX3BkYV9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKKwlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgkKKyNpZmRlZiBYSVJDT00KKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnhpcmNvbV9wZ3NfZmFrZV9kZXZpY2UpOworZmFpbGVkX3hpcmNvbV9yZWdpc3RlcjoKKyNlbmRpZiAvKiBYSVJDT00gKi8KKyNpZmRlZiBLRVlTUEFOCisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZrZXlzcGFuX3BkYV9mYWtlX2RldmljZSk7CisjZW5kaWYKKyNpZmRlZiBLRVlTUEFOCitmYWlsZWRfcGRhX2Zha2VfcmVnaXN0ZXI6CisjZW5kaWYKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmtleXNwYW5fcGRhX2RldmljZSk7CitmYWlsZWRfcGRhX3JlZ2lzdGVyOgorCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IGtleXNwYW5fcGRhX2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZrZXlzcGFuX3BkYV9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmtleXNwYW5fcGRhX2RldmljZSk7CisjaWZkZWYgS0VZU1BBTgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmtleXNwYW5fcGRhX2Zha2VfZGV2aWNlKTsKKyNlbmRpZgorI2lmZGVmIFhJUkNPTQorCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJnhpcmNvbV9wZ3NfZmFrZV9kZXZpY2UpOworI2VuZGlmCit9CisKKworbW9kdWxlX2luaXQoa2V5c3Bhbl9wZGFfaW5pdCk7Cittb2R1bGVfZXhpdChrZXlzcGFuX3BkYV9leGl0KTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGFfZncuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYV9mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNTNhY2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGFfZncuaApAQCAtMCwwICsxLDk5IEBACisvKgorICogVVNCIEtleXNwYW4gUERBIEZpcm13YXJlCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIEJyaWFuIFdhcm5lcgk8d2FybmVyQGxvdGhhci5jb20+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBHZW5lcmF0ZWQgZnJvbSBrZXlzcGFuX3BkYS5zIGJ5IGV6dXNiX2NvbnZlcnQucGwKKyAqCisgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkIGtleXNwYW5fcGRhX2Zpcm13YXJlW10gPSB7Cit7IDB4MDAwMCwJMywJezB4MDIsIDB4MDIsIDB4MDB9IH0sCit7IDB4MDAyMywJNCwJezB4MDIsIDB4MDUsIDB4NWYsIDB4MDB9IH0sCit7IDB4MDA0MywJNCwJezB4MDIsIDB4MDEsIDB4MDAsIDB4MDB9IH0sCit7IDB4MDAzMCwJNSwJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9IH0sCit7IDB4MDEwMCwJMTYsCXsweDAyLCAweDAyLCAweDk2LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwfSB9LAoreyAweDAxMTAsCTE2LAl7MHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMH0gfSwKK3sgMHgwMTIwLAkxNiwJezB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDQsIDB4NjEsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ODksIDB4MDB9IH0sCit7IDB4MDIwMCwJMTYsCXsweDc1LCAweDgxLCAweDVlLCAweGU0LCAweGY1LCAweDMyLCAweGY1LCAweDMzLCAweGY1LCAweDMwLCAweGY1LCAweDMxLCAweGY1LCAweDM0LCAweGMyLCAweDAwfSB9LAoreyAweDAyMTAsCTE2LAl7MHhjMiwgMHgwMSwgMHhhOSwgMHgwMCwgMHg3NCwgMHhmZSwgMHg5MCwgMHgxMCwgMHgwMCwgMHhmMCwgMHhhMywgMHhkOSwgMHhmYywgMHg3NCwgMHhmZCwgMHg5MH0gfSwKK3sgMHgwMjIwLAkxNiwJezB4MTEsIDB4MDAsIDB4ZjAsIDB4YTMsIDB4ZDksIDB4ZmMsIDB4NzQsIDB4MDIsIDB4OTAsIDB4N2YsIDB4OWQsIDB4ZjAsIDB4NzQsIDB4MDAsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MDIzMCwJMTYsCXsweDk3LCAweGYwLCAweDc0LCAweDg2LCAweDkwLCAweDdmLCAweDllLCAweGYwLCAweDkwLCAweDdmLCAweDk1LCAweDc0LCAweDAzLCAweGYwLCAweDkwLCAweDdmfSB9LAoreyAweDAyNDAsCTE2LAl7MHhhZiwgMHhlMCwgMHhkMiwgMHhlMCwgMHhmMCwgMHg3NCwgMHgwMSwgMHg5MCwgMHg3ZiwgMHhhYiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZSwgMHhmMCwgMHg5MH0gfSwKK3sgMHgwMjUwLAkxNiwJezB4N2YsIDB4YWMsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWQsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZjAsIDB4NzR9IH0sCit7IDB4MDI2MCwJMTYsCXsweDg0LCAweDkwLCAweDdmLCAweDk4LCAweGYwLCAweDc0LCAweDAwLCAweGY1LCAweDk4LCAweDc1LCAweGM4LCAweDMwLCAweDdiLCAweDA1LCAweDkxLCAweDIwfSB9LAoreyAweDAyNzAsCTE2LAl7MHhkMiwgMHhjYSwgMHg3NSwgMHg5OCwgMHg1MCwgMHhkMiwgMHhlOCwgMHhkMiwgMHhhZiwgMHhkMiwgMHhhYywgMHg3NCwgMHgwMCwgMHhmNSwgMHg4NiwgMHg5MH0gfSwKK3sgMHgwMjgwLAkxNiwJezB4N2YsIDB4ZDYsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4NzksIDB4MmUsIDB4N2EsIDB4MDAsIDB4N2IsIDB4MDAsIDB4ZGIsIDB4ZmUsIDB4ZGEsIDB4ZmEsIDB4ZDl9IH0sCit7IDB4MDI5MCwJMTYsCXsweGY2LCAweDc0LCAweDA2LCAweGYwLCAweDgwLCAweGZlLCAweGMwLCAweDg2LCAweGMwLCAweDgyLCAweGMwLCAweDgzLCAweGMwLCAweDg0LCAweGMwLCAweDg1fSB9LAoreyAweDAyYTAsCTE2LAl7MHhjMCwgMHhlMCwgMHhlNSwgMHg5MSwgMHhjMiwgMHhlNCwgMHhmNSwgMHg5MSwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwMmIwLAkxNiwJezB4ZTgsIDB4ZTAsIDB4ZjksIDB4YTMsIDB4ZTAsIDB4ZmEsIDB4YTMsIDB4ZTAsIDB4ZmIsIDB4YTMsIDB4ZTAsIDB4ZmMsIDB4ZTksIDB4NTQsIDB4NjAsIDB4YjR9IH0sCit7IDB4MDJjMCwJMTYsCXsweDAwLCAweDAzLCAweDAyLCAweDAzLCAweDM5LCAweGI0LCAweDQwLCAweDZlLCAweGJhLCAweDAwLCAweDBiLCAweDEyLCAweDA0LCAweDIwLCAweDQwLCAweDAzfSB9LAoreyAweDAyZDAsCTE2LAl7MHgwMiwgMHgwNCwgMHgwMiwgMHgwMiwgMHgwNCwgMHgwYSwgMHhiYSwgMHgwMSwgMHgwMywgMHgwMiwgMHgwNCwgMHgwYSwgMHhiYSwgMHgwMiwgMHgwMywgMHgwMn0gfSwKK3sgMHgwMmUwLAkxNiwJezB4MDQsIDB4MGEsIDB4YmEsIDB4MDMsIDB4MDMsIDB4MDIsIDB4MDQsIDB4NDQsIDB4YmEsIDB4MDQsIDB4MWUsIDB4YmIsIDB4MDAsIDB4MGEsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MDJmMCwJMTYsCXsweDk1LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDAyLCAweDA0LCAweDAyLCAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDkwfSB9LAoreyAweDAzMDAsCTE2LAl7MHg3ZiwgMHg5NSwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHgwMiwgMHgwNCwgMHgwMiwgMHhiYSwgMHgwNSwgMHgwMywgMHgwMiwgMHgwNCwgMHgwYSwgMHhiYX0gfSwKK3sgMHgwMzEwLAkxNiwJezB4MDYsIDB4MTksIDB4YmIsIDB4MDAsIDB4MDgsIDB4ZTUsIDB4MzMsIDB4ZDMsIDB4OTUsIDB4MzIsIDB4MDIsIDB4MDMsIDB4ZGUsIDB4YmIsIDB4MDEsIDB4MDh9IH0sCit7IDB4MDMyMCwJMTYsCXsweGU1LCAweDMyLCAweGMzLCAweDk1LCAweDMzLCAweDAyLCAweDAzLCAweGRlLCAweDAyLCAweDA0LCAweDBhLCAweGJhLCAweDA3LCAweDA1LCAweDhiLCAweDM0fSB9LAoreyAweDAzMzAsCTE2LAl7MHgwMiwgMHgwNCwgMHgwMiwgMHgwMiwgMHgwNCwgMHgwYSwgMHgwMiwgMHgwNCwgMHgwYSwgMHhiYSwgMHgwMCwgMHgyMCwgMHhiOSwgMHg4MCwgMHgxMCwgMHg5MH0gfSwKK3sgMHgwMzQwLAkxNiwJezB4N2YsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MDIsIDB4Yjl9IH0sCit7IDB4MDM1MCwJMTYsCXsweDgyLCAweDAyLCAweDgwLCAweGViLCAweGI5LCAweDgxLCAweDAyLCAweDgwLCAweGU2LCAweDAyLCAweDA0LCAweDBhLCAweGJhLCAweDAxLCAweDBmLCAweGJifSB9LAoreyAweDAzNjAsCTE2LAl7MHgwMCwgMHgwMywgMHgwMiwgMHgwNCwgMHgwYSwgMHhiYiwgMHgwMSwgMHgwMywgMHgwMiwgMHgwNCwgMHgwMiwgMHgwMiwgMHgwNCwgMHgwYSwgMHhiYSwgMHgwM30gfSwKK3sgMHgwMzcwLAkxNiwJezB4MGYsIDB4YmIsIDB4MDAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MGEsIDB4YmIsIDB4MDEsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MDIsIDB4MDIsIDB4MDQsIDB4MGF9IH0sCit7IDB4MDM4MCwJMTYsCXsweGJhLCAweDA2LCAweDU2LCAweGJjLCAweDAxLCAweDBmLCAweDkwLCAweDdmLCAweGQ0LCAweDc0LCAweDA2LCAweGYwLCAweDkwLCAweDdmLCAweGQ1LCAweDc0fSB9LAoreyAweDAzOTAsCTE2LAl7MHgxMiwgMHhmMCwgMHgwMiwgMHgwNCwgMHgwMiwgMHhiYywgMHgwMiwgMHgxMiwgMHhiYiwgMHgwMCwgMHg2ZiwgMHg5MCwgMHg3ZiwgMHhkNCwgMHg3NCwgMHgwNn0gfSwKK3sgMHgwM2EwLAkxNiwJezB4ZjAsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4NzQsIDB4MjQsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MDIsIDB4YmMsIDB4MDMsIDB4MjksIDB4NzQsIDB4MDQsIDB4YzN9IH0sCit7IDB4MDNiMCwJMTYsCXsweDliLCAweDQwLCAweDU3LCAweDYwLCAweDU1LCAweGViLCAweDJiLCAweDkwLCAweDA2LCAweDQ0LCAweDI1LCAweDgyLCAweGY1LCAweDgyLCAweDc0LCAweDAwfSB9LAoreyAweDAzYzAsCTE2LAl7MHgzNSwgMHg4MywgMHhmNSwgMHg4MywgMHhlMCwgMHhmOSwgMHhhMywgMHhlMCwgMHhmYSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhlOSwgMHhmMCwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwM2QwLAkxNiwJezB4ZDUsIDB4ZWEsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MDIsIDB4MDIsIDB4MDQsIDB4MGEsIDB4YmEsIDB4MDgsIDB4MGYsIDB4NzQsIDB4MDEsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MDNlMCwJMTYsCXsweDAwLCAweGYwLCAweDc0LCAweDAxLCAweDkwLCAweDdmLCAweGI1LCAweGYwLCAweDAyLCAweDA0LCAweDAyLCAweGJhLCAweDA5LCAweDAzLCAweDAyLCAweDA0fSB9LAoreyAweDAzZjAsCTE2LAl7MHgwMiwgMHhiYSwgMHgwYSwgMHgwNSwgMHg3NCwgMHgwMCwgMHgwMiwgMHgwMywgMHhkZSwgMHhiYSwgMHgwYiwgMHgwMywgMHgwMiwgMHgwNCwgMHgwMiwgMHgwMn0gfSwKK3sgMHgwNDAwLAkxNiwJezB4MDQsIDB4MGEsIDB4OTAsIDB4N2YsIDB4YjQsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4ODAsIDB4MDksIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDF9IH0sCit7IDB4MDQxMCwJMTYsCXsweGYwLCAweDgwLCAweDAwLCAweGQwLCAweGUwLCAweGQwLCAweDg1LCAweGQwLCAweDg0LCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAweGQwLCAweDg2LCAweDMyfSB9LAoreyAweDA0MjAsCTE2LAl7MHhlYiwgMHgyMCwgMHhlNywgMHgxZSwgMHhjMywgMHg5NCwgMHgwYSwgMHg1MCwgMHgxOSwgMHhlYiwgMHgyMywgMHgyNCwgMHhmZSwgMHhmNSwgMHg4MiwgMHg3NH0gfSwKK3sgMHgwNDMwLAkxNiwJezB4MDUsIDB4MzQsIDB4MDAsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4Y2IsIDB4ZjUsIDB4Y2QsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4Y2EsIDB4ZjUsIDB4Y2N9IH0sCit7IDB4MDQ0MCwJMTYsCXsweGMzLCAweDIyLCAweGQzLCAweDIyLCAweGI5LCAweDQxLCAweDExLCAweGViLCAweDY0LCAweGZmLCAweDU0LCAweDg0LCAweGZiLCAweDkwLCAweDdmLCAweDk4fSB9LAoreyAweDA0NTAsCTE2LAl7MHhlMCwgMHg1NCwgMHg3YiwgMHg0YiwgMHhmMCwgMHgwMiwgMHgwNCwgMHgwMiwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHg2NCwgMHhmZiwgMHgwMiwgMHgwM30gfSwKK3sgMHgwNDYwLAkxNiwJezB4ZGUsIDB4YzAsIDB4ODYsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ZTAsIDB4ZTUsIDB4OTEsIDB4YzJ9IH0sCit7IDB4MDQ3MCwJMTYsCXsweGU0LCAweGY1LCAweDkxLCAweDkwLCAweDdmLCAweGE5LCAweDc0LCAweDA0LCAweGYwLCAweDEyLCAweDA1LCAweGEwLCAweGQwLCAweGUwLCAweGQwLCAweDg1fSB9LAoreyAweDA0ODAsCTE2LAl7MHhkMCwgMHg4NCwgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgMHhkMCwgMHg4NiwgMHgzMiwgMHhjMCwgMHg4NiwgMHhjMCwgMHg4MiwgMHhjMCwgMHg4MywgMHhjMH0gfSwKK3sgMHgwNDkwLAkxNiwJezB4ODQsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ZTAsIDB4ZTUsIDB4OTEsIDB4YzIsIDB4ZTQsIDB4ZjUsIDB4OTEsIDB4OTAsIDB4N2YsIDB4YWEsIDB4NzQsIDB4MDR9IH0sCit7IDB4MDRhMCwJMTYsCXsweGYwLCAweDkwLCAweDdmLCAweGM5LCAweGUwLCAweGY5LCAweGU0LCAweGY1LCAweDg2LCAweDkwLCAweDdkLCAweGMwLCAweDc1LCAweDg1LCAweDEwLCAweDg1fSB9LAoreyAweDA0YjAsCTE2LAl7MHgzMiwgMHg4NCwgMHhlMCwgMHgwNSwgMHg4NiwgMHgwNSwgMHg4NCwgMHhmMCwgMHhlNSwgMHg4NCwgMHhiNSwgMHgzMywgMHgwMiwgMHg4MCwgMHgwOSwgMHgwNX0gfSwKK3sgMHgwNGMwLAkxNiwJezB4MzIsIDB4MDUsIDB4ODYsIDB4YTMsIDB4ZDksIDB4ZWMsIDB4ODAsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZjAsIDB4YjEsIDB4MzEsIDB4ZDAsIDB4ZTB9IH0sCit7IDB4MDRkMCwJMTYsCXsweGQwLCAweDg1LCAweGQwLCAweDg0LCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAweGQwLCAweDg2LCAweDMyLCAweGU0LCAweGY1LCAweDg2LCAweDkwLCAweDdmfSB9LAoreyAweDA0ZTAsCTE2LAl7MHhiYywgMHhlMCwgMHgyMCwgMHhlMSwgMHg0YiwgMHg5MCwgMHg3ZCwgMHgwMCwgMHhlNSwgMHgzMiwgMHhmMCwgMHhhMywgMHhlNSwgMHgzMywgMHhmMCwgMHhhM30gfSwKK3sgMHgwNGYwLAkxNiwJezB4ZTUsIDB4MzAsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4MzEsIDB4ZjAsIDB4YTMsIDB4ZTQsIDB4MzAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4ZjAsIDB4YTMsIDB4MDV9IH0sCit7IDB4MDUwMCwJMTYsCXsweDg2LCAweDkwLCAweDEwLCAweDAwLCAweDc5LCAweDEwLCAweGUwLCAweGEzLCAweDA1LCAweDg2LCAweGYwLCAweGEzLCAweDA1LCAweDg2LCAweGQ5LCAweGY2fSB9LAoreyAweDA1MTAsCTE2LAl7MHgwNSwgMHg4NiwgMHg3NCwgMHhmYywgMHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHg5MCwgMHgxMSwgMHgwMCwgMHg3OSwgMHgxMCwgMHhlMCwgMHhhMywgMHgwNX0gfSwKK3sgMHgwNTIwLAkxNiwJezB4ODYsIDB4ZjAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4ZDksIDB4ZjYsIDB4ZTQsIDB4ZjUsIDB4ODYsIDB4OTAsIDB4N2YsIDB4YmQsIDB4NzQsIDB4MjYsIDB4ZjB9IH0sCit7IDB4MDUzMCwJMTYsCXsweDIyLCAweDIwLCAweDAwLCAweDEzLCAweGU1LCAweDMyLCAweGI1LCAweDMzLCAweDAxLCAweDIyLCAweDA1LCAweDMzLCAweDc1LCAweDgzLCAweDEwLCAweDg1fSB9LAoreyAweDA1NDAsCTE2LAl7MHgzMywgMHg4MiwgMHhlMCwgMHhmNSwgMHg5OSwgMHhkMiwgMHgwMCwgMHg3NCwgMHgwMCwgMHhiNSwgMHgzNCwgMHgwMSwgMHgyMiwgMHhlNSwgMHgzMywgMHhkM30gfSwKK3sgMHgwNTUwLAkxNiwJezB4OTUsIDB4MzIsIDB4YzMsIDB4OTUsIDB4MzQsIDB4NDAsIDB4ZjUsIDB4NzUsIDB4MzQsIDB4MDAsIDB4ZDIsIDB4MDEsIDB4MDIsIDB4MDUsIDB4YTAsIDB4YzB9IH0sCit7IDB4MDU2MCwJMTYsCXsweDg2LCAweGMwLCAweDgyLCAweGMwLCAweDgzLCAweGMwLCAweDg0LCAweGMwLCAweDg1LCAweGMwLCAweGUwLCAweDMwLCAweDk5LCAweDA3LCAweGMyLCAweDk5fSB9LAoreyAweDA1NzAsCTE2LAl7MHhjMiwgMHgwMCwgMHgxMiwgMHgwNSwgMHgzNCwgMHgzMCwgMHg5OCwgMHgwNSwgMHgxMiwgMHgwNSwgMHg4YSwgMHhjMiwgMHg5OCwgMHhkMCwgMHhlMCwgMHhkMH0gfSwKK3sgMHgwNTgwLAkxNiwJezB4ODUsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODYsIDB4MzIsIDB4NzUsIDB4ODMsIDB4MTEsIDB4ODUsIDB4MzAsIDB4ODJ9IH0sCit7IDB4MDU5MCwJMTYsCXsweDA1LCAweDgyLCAweGU1LCAweDk5LCAweGYwLCAweGU1LCAweDgyLCAweGI1LCAweDMxLCAweDAxLCAweDIyLCAweDA1LCAweDMwLCAweGIxLCAweGEwLCAweDIyfSB9LAoreyAweDA1YTAsCTE2LAl7MHg5MCwgMHg3ZiwgMHhiOCwgMHhlMCwgMHgyMCwgMHhlMSwgMHgzOCwgMHgyMCwgMHgwMSwgMHgzNiwgMHhlNSwgMHgzMCwgMHhiNSwgMHgzMSwgMHgwMSwgMHgyMn0gfSwKK3sgMHgwNWIwLAkxNiwJezB4ZTQsIDB4ZjUsIDB4ODYsIDB4NzUsIDB4ODMsIDB4MTEsIDB4MDUsIDB4ODYsIDB4OTAsIDB4N2UsIDB4MDAsIDB4ZjAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4Nzl9IH0sCit7IDB4MDVjMCwJMTYsCXsweDAxLCAweGU1LCAweDMwLCAweGI1LCAweDMxLCAweDAyLCAweDgwLCAweDEwLCAweDA1LCAweDMxLCAweDg1LCAweDMxLCAweDgyLCAweGUwLCAweDA1LCAweDg2fSB9LAoreyAweDA1ZDAsCTE2LAl7MHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHgwOSwgMHhiOSwgMHg0MCwgMHhlOSwgMHg5MCwgMHg3ZiwgMHhiOSwgMHhlOSwgMHg2MCwgMHgwMSwgMHhmMCwgMHgyMn0gfSwKK3sgMHgwNWUwLAkxNiwJezB4YzIsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4ODYsIDB4OTAsIDB4N2UsIDB4MDAsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4OTB9IH0sCit7IDB4MDVmMCwJMTYsCXsweDdmLCAweGI5LCAweGYwLCAweDIyLCAweGMyLCAweDk5LCAweGY1LCAweDk5LCAweDMwLCAweDk5LCAweGZkLCAweGMyLCAweDk5LCAweDIyLCAweGU1LCAweDVlfSB9LAoreyAweDA2MDAsCTE2LAl7MHhmNiwgMHgzYywgMHhmZCwgMHg4ZiwgMHhmZSwgMHhjOCwgMHhmZiwgMHg2NCwgMHhmZiwgMHhiMiwgMHhmZiwgMHhkOSwgMHhmZiwgMHhlZCwgMHhmZiwgMHhmM30gfSwKK3sgMHgwNjEwLAkxNiwJezB4ZmYsIDB4ZmEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NDAsIDB4Y2QsIDB4MDYsIDB4MDQsIDB4MDEsIDB4ODksIDB4YWJ9IH0sCit7IDB4MDYyMCwJMTYsCXsweDAxLCAweDAyLCAweDAzLCAweDAxLCAweDA5LCAweDAyLCAweDIwLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDA5LCAweDA0LCAweDAwfSB9LAoreyAweDA2MzAsCTE2LAl7MHgwMCwgMHgwMiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywgMHgwNSwgMHg4MiwgMHgwMywgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHgwMn0gfSwKK3sgMHgwNjQwLAkxNiwJezB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4NGMsIDB4MDYsIDB4NTAsIDB4MDYsIDB4NzIsIDB4MDYsIDB4YTAsIDB4MDQsIDB4MDMsIDB4MDAsIDB4MDB9IH0sCit7IDB4MDY1MCwJMTYsCXsweDIyLCAweDAzLCAweDQxLCAweDAwLCAweDQzLCAweDAwLCAweDRkLCAweDAwLCAweDQ1LCAweDAwLCAweDIwLCAweDAwLCAweDc1LCAweDAwLCAweDczLCAweDAwfSB9LAoreyAweDA2NjAsCTE2LAl7MHg2MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg3NywgMHgwMCwgMHg2OSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2NywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3NCwgMHgwMH0gfSwKK3sgMHgwNjcwLAkxNiwJezB4NzMsIDB4MDAsIDB4MmUsIDB4MDMsIDB4NDEsIDB4MDAsIDB4NDMsIDB4MDAsIDB4NGQsIDB4MDAsIDB4NDUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NTUsIDB4MDB9IH0sCit7IDB4MDY4MCwJMTYsCXsweDUzLCAweDAwLCAweDQyLCAweDAwLCAweDIwLCAweDAwLCAweDczLCAweDAwLCAweDY1LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDYxLCAweDAwfSB9LAoreyAweDA2OTAsCTE2LAl7MHg2YywgMHgwMCwgMHgyMCwgMHgwMCwgMHg3NywgMHgwMCwgMHg2OSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2NywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3NCwgMHgwMH0gfSwKK3sgMHgwNmEwLAk2LAl7MHgwNiwgMHgwMywgMHgzNCwgMHgwMCwgMHgzNywgMHgwMH0gfSwKK3sgMHhmZmZmLAkwLAl7MHgwMH0gfQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTE4eF9mdy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMTh4X2Z3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdiM2JjMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTE4eF9mdy5oCkBAIC0wLDAgKzEsNDQ3IEBACisvKiBrZXlzcGFuX3VzYTE4eF9mdy5oCisKKwlUaGUgZmlybXdhcmUgY29udGFpbmVkIGhlcmVpbiBhcyBrZXlzcGFuX3VzYTE4eF9mdy5oIGlzCisKKwkJQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEKKwkJS2V5c3BhbiwgQSBkaXZpc2lvbiBvZiBJbm5vU3lzIEluY29ycG9yYXRlZCAoIktleXNwYW4iKQorCQkKKwlhcyBhbiB1bnB1Ymxpc2hlZCB3b3JrLiBUaGlzIG5vdGljZSBkb2VzIG5vdCBpbXBseSB1bnJlc3RyaWN0ZWQgb3IKKwlwdWJsaWMgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBmcm9tIHdoaWNoIHRoaXMgZmlybXdhcmUgaW1hZ2UgaXMKKwlkZXJpdmVkLiAgRXhjZXB0IGFzIG5vdGVkIGJlbG93IHRoaXMgZmlybXdhcmUgaW1hZ2UgbWF5IG5vdCBiZSAKKwlyZXByb2R1Y2VkLCB1c2VkLCBzb2xkIG9yIHRyYW5zZmVycmVkIHRvIGFueSB0aGlyZCBwYXJ0eSB3aXRob3V0IAorCUtleXNwYW4ncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisJUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIAorCWltYWdlIGFzIHBhcnQgb2YgYSBMaW51eCBvciBvdGhlciBPcGVuIFNvdXJjZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbCAKKwlpbiB0ZXh0IG9yIGJpbmFyeSBmb3JtIGFzIHJlcXVpcmVkLiAKKworCVRoaXMgZmlybXdhcmUgbWF5IG5vdCBiZSBtb2RpZmllZCBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoICAKKwlLZXlzcGFuIGhhcmR3YXJlLiAgRGlzdHJpYnV0aW9uIGFuZC9vciBNb2RpZmljYXRpb24gb2YgdGhlIAorCWtleXNwYW4uYyBkcml2ZXIgd2hpY2ggaW5jbHVkZXMgdGhpcyBmaXJtd2FyZSwgaW4gd2hvbGUgb3IgaW4gCisJcGFydCwgcmVxdWlyZXMgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHN0YXRlbWVudC4iCisqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGV6dXNiX2hleF9yZWNvcmQga2V5c3Bhbl91c2ExOHhfZmlybXdhcmVbXSA9IHsKKyB7MHgwMDMzLCAgMywgeyAweDAyLCAweDEyLCAweGY3fX0sCisgezB4MDAwMywgMTYsIHsgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5MywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHgzMCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhmMH19LAorIHsweDAwMTMsIDE2LCB7IDB4OTAsIDB4N2YsIDB4OTQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWQsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTcsIDB4ZjAsIDB4OTB9fSwKKyB7MHgwMDIzLCAxNSwgeyAweDdmLCAweDk1LCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LCAweDA3LCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk4LCAweGYwLCAweDIyfX0sCisgezB4MDA0NiwgMTYsIHsgMHgzMCwgMHgwOSwgMHgxOCwgMHgxMiwgMHgxMywgMHgxYiwgMHhlZiwgMHhjMywgMHg5NSwgMHgzYywgMHg0MCwgMHgwMywgMHgwMiwgMHgwMCwgMHhkOCwgMHg5MH19LAorIHsweDAwNTYsIDE2LCB7IDB4N2YsIDB4YmYsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4YzIsIDB4MDksIDB4YzIsIDB4MDAsIDB4ODAsIDB4NzcsIDB4MzAsIDB4MDMsIDB4M2IsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwMDY2LCAxNiwgeyAweGM2LCAweGUwLCAweDIwLCAweGUxLCAweDZkLCAweDEyLCAweDEzLCAweDFiLCAweGVmLCAweGMzLCAweDk0LCAweDQwLCAweDUwLCAweDY0LCAweDkwLCAweDdlfX0sCisgezB4MDA3NiwgMTYsIHsgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwOSwgMHg5MCwgMHg3ZiwgMHhjNywgMHhlMCwgMHgxNCwgMHhmNSwgMHgxOSwgMHgyMCwgMHgwMCwgMHgxMSwgMHg2MH19LAorIHsweDAwODYsIDE2LCB7IDB4MGYsIDB4ZjUsIDB4MDgsIDB4N2UsIDB4N2UsIDB4N2YsIDB4NDEsIDB4NzUsIDB4MGMsIDB4N2UsIDB4NzUsIDB4MGQsIDB4NDEsIDB4MTIsIDB4MGMsIDB4YmF9fSwKKyB7MHgwMDk2LCAxNiwgeyAweGMyLCAweDAzLCAweGU0LCAweDkwLCAweDdmLCAweGM3LCAweGYwLCAweDgwLCAweDM5LCAweDkwLCAweDdmLCAweGM4LCAweGUwLCAweDIwLCAweGUxLCAweDMyfX0sCisgezB4MDBhNiwgMTYsIHsgMHgxMiwgMHgxMywgMHgxYiwgMHhlZiwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHgyOSwgMHg5MCwgMHg3ZCwgMHhjMCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwOX19LAorIHsweDAwYjYsIDE2LCB7IDB4OTAsIDB4N2YsIDB4YzksIDB4ZTAsIDB4MTQsIDB4ZjUsIDB4MTksIDB4MjAsIDB4MDAsIDB4MTEsIDB4NjAsIDB4MGYsIDB4ZjUsIDB4MDgsIDB4N2UsIDB4N2R9fSwKKyB7MHgwMGM2LCAxNiwgeyAweDdmLCAweGMxLCAweDc1LCAweDBjLCAweDdkLCAweDc1LCAweDBkLCAweGMxLCAweDEyLCAweDBjLCAweGJhLCAweGQyLCAweDAzLCAweGU0LCAweDkwLCAweDdmfX0sCisgezB4MDBkNiwgMTYsIHsgMHhjOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwMSwgMHg2MCwgMHgxMiwgMHgxMSwgMHhkNiwgMHg4Zn19LAorIHsweDAwZTYsIDE2LCB7IDB4MTksIDB4MTIsIDB4MTMsIDB4MjcsIDB4OGYsIDB4MzYsIDB4ZTUsIDB4MTksIDB4YzMsIDB4OTUsIDB4M2EsIDB4NTAsIDB4MGYsIDB4MTIsIDB4MTIsIDB4ZWJ9fSwKKyB7MHgwMGY2LCAxNiwgeyAweGVmLCAweDMwLCAweGUwLCAweDA4LCAweGU1LCAweDM2LCAweDIwLCAweGU3LCAweDAzLCAweDMwLCAweDBiLCAweDVlLCAweGMyLCAweDBiLCAweGU1LCAweDE5fX0sCisgezB4MDAzNiwgMTIsIHsgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMn19LAorIHsweDAwNDMsICAzLCB7IDB4MDIsIDB4MTMsIDB4MDB9fSwKKyB7MHgwMDAwLCAgMywgeyAweDAyLCAweDBlLCAweDAwfX0sCisgezB4MDEwNiwgNjQsIHsgMHg2MCwgMHg1OCwgMHhiNCwgMHg4MCwgMHgwMywgMHg0MywgMHgzNiwgMHgwMiwgMHhlNSwgMHgzNiwgMHgzMCwgMHhlNywgMHgyNiwgMHhlNSwgMHgxOSwgMHhkMywgMHg5NCwKKyAgMHgyMCwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOSwgMHgyMCwgMHg4NSwgMHgxOSwgMHgwOCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg4MCwgMHg3NSwgMHgwYywgMHg3ZSwKKyAgMHg3NSwgMHgwZCwgMHg4MCwgMHhhZiwgMHgzNiwgMHgxMiwgMHgwZiwgMHg0YiwgMHhlNSwgMHgxOSwgMHgyNSwgMHhlMCwgMHg5MCwgMHg3ZiwgMHhiNywgMHhmMCwKKyAgMHg4MCwgMHgyNywgMHhlNSwgMHgxOSwgMHhkMywgMHg5NCwgMHgzZiwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOSwgMHgzZiwgMHg4NSwgMHgxOSwgMHgwOH19LAorIHsweDAxNDYsIDY0LCB7IDB4OTAsIDB4N2UsIDB4ODAsIDB4ZTUsIDB4MzYsIDB4ZjAsIDB4N2UsIDB4N2UsIDB4N2YsIDB4ODEsIDB4NzUsIDB4MGMsIDB4N2UsIDB4NzUsIDB4MGQsIDB4ODEsIDB4MTIsCisgIDB4MGMsIDB4ZGYsIDB4ZTUsIDB4MTksIDB4MDQsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4Y2UsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDYsCisgIDB4MjAsIDB4MDUsIDB4MDMsIDB4MDIsIDB4MDMsIDB4YzEsIDB4YzIsIDB4MDUsIDB4ZTQsIDB4ZjUsIDB4MTgsIDB4NzQsIDB4NDAsIDB4MjUsIDB4MTgsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2MsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTgsIDB4N2MsIDB4MDAsIDB4N2IsIDB4MDEsIDB4N2F9fSwKKyB7MHgwMTg2LCA2NCwgeyAweDdlLCAweDc5LCAweDAwLCAweDI0LCAweDAwLCAweGY5LCAweGVjLCAweDM0LCAweDdlLCAweGZhLCAweGVmLCAweDEyLCAweDBlLCAweGQyLCAweDA1LCAweDE4LCAweGU1LAorICAweDE4LCAweGI0LCAweDIwLCAweGQ3LCAweDkwLCAweDdlLCAweDAwLCAweGUwLCAweDYwLCAweDY4LCAweDkwLCAweDdlLCAweDAzLCAweGUwLCAweDYwLCAweDI0LAorICAweDdmLCAweDAxLCAweGU0LCAweGZkLCAweDEyLCAweDExLCAweGIxLCAweDdmLCAweDAzLCAweDdkLCAweGNkLCAweDEyLCAweDExLCAweGIxLCAweDQzLCAweDQ2LAorICAweDgwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ2LCAweGYwLCAweGU0LCAweDkwfX0sCisgezB4MDFjNiwgNjQsIHsgMHg3ZSwgMHgxMywgMHhmMCwgMHg4MCwgMHgzMCwgMHg5MCwgMHg3ZSwgMHgwMSwgMHhlMCwgMHhmZiwgMHgxMiwgMHgxMCwgMHgzNSwgMHg5MCwgMHg3ZSwgMHgwMiwgMHhlMCwKKyAgMHhmZiwgMHgxMiwgMHgxMCwgMHg1YiwgMHg3ZiwgMHgwMSwgMHg5MCwgMHg3ZSwgMHgxMSwgMHhlMCwgMHhmZCwgMHgxMiwgMHgxMSwgMHhiMSwgMHg3ZiwgMHgwMywKKyAgMHg3ZCwgMHgwNywgMHgxMiwgMHgxMSwgMHhiMSwgMHg0MywgMHg0NiwgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhlNSwgMHg0NiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHhlNSwgMHg0MCwgMHg0NCwgMHgwNiwgMHg5MH19LAorIHsweDAyMDYsIDY0LCB7IDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MDMsIDB4ZTAsIDB4NzAsIDB4MDYsIDB4OTAsIDB4N2UsIDB4MTMsIDB4ZTAsIDB4NzAsIDB4MDgsIDB4ZTQsIDB4OTAsCisgIDB4N2UsIDB4MTMsIDB4ZjAsIDB4NzUsIDB4MjUsIDB4ZmYsIDB4OTAsIDB4N2UsIDB4MDUsIDB4ZTAsIDB4NjAsIDB4MTIsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4M2YsCisgIDB4ZjUsIDB4NDQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDQsIDB4ZjAsIDB4OTAsIDB4N2UsCisgIDB4MDcsIDB4ZTAsIDB4NjAsIDB4MmIsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDIsIDB4ODAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDJ9fSwKKyB7MHgwMjQ2LCA2NCwgeyAweDdmLCAweDUzLCAweDQyLCAweGZjLCAweDkwLCAweDdlLCAweDA5LCAweGUwLCAweDYwLCAweDExLCAweDQzLCAweDQyLCAweDAyLCAweGEzLCAweGUwLCAweGZmLCAweDEyLAorICAweDEwLCAweGE3LCAweDkwLCAweDdlLCAweDBiLCAweGUwLCAweGZmLCAweDEyLCAweDEwLCAweGNkLCAweGFmLCAweDQyLCAweDEyLCAweDEwLCAweDgxLCAweDkwLAorICAweDdlLCAweDAzLCAweGUwLCAweDYwLCAweDA4LCAweDUzLCAweDQyLCAweDdmLCAweGFmLCAweDQyLCAweDEyLCAweDEwLCAweDgxLCAweDkwLCAweDdlLCAweDBjLAorICAweGUwLCAweDYwLCAweDE4LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQ2LCAweDAyLCAweDgwLCAweDAzLCAweDUzLCAweDQ2LCAweGZkfX0sCisgezB4MDI4NiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NiwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgwZSwgMHhlMCwgMHg2MCwKKyAgMHgxOCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NiwgMHgwMSwgMHg4MCwgMHgwMywgMHg1MywgMHg0NiwgMHhmZSwgMHg5MCwgMHg3ZiwgMHg5OCwKKyAgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NiwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxMiwgMHhlMCwgMHhmNSwgMHgzYSwgMHhhMywKKyAgMHhlMCwgMHgxMywgMHg5MiwgMHgwZCwgMHhhMywgMHhlMCwgMHhmNSwgMHgzYywgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NiwgMHgxMH19LAorIHsweDAyYzYsIDY0LCB7IDB4ODAsIDB4MDMsIDB4NTMsIDB4NDYsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4ZjAsCisgIDB4OTAsIDB4N2UsIDB4MTYsIDB4ZTAsIDB4NjAsIDB4MzIsIDB4NTMsIDB4NDQsIDB4YmYsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsCisgIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4MTIsIDB4MTIsIDB4ZGYsCisgIDB4ZWYsIDB4NTQsIDB4ZmUsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4NTMsIDB4M2UsIDB4ZmQsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2UsIDB4MTJ9fSwKKyB7MHgwMzA2LCA2NCwgeyAweDExLCAweGIxLCAweGU0LCAweGY1LCAweDJhLCAweGY1LCAweDI5LCAweGQyLCAweDA3LCAweDkwLCAweDdlLCAweDE3LCAweGUwLCAweDYwLCAweDBmLCAweDQzLCAweDNlLAorICAweDAyLCAweGU0LCAweGZmLCAweGFkLCAweDNlLCAweDEyLCAweDExLCAweGIxLCAweDc1LCAweDI5LCAweDAxLCAweGQyLCAweDA3LCAweDkwLCAweDdlLCAweDE4LAorICAweGUwLCAweDYwLCAweDEwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweGU1LCAweDQwLCAweDQ0LCAweDA0LCAweDkwLCAweGMwLCAweDAwLAorICAweGYwLCAweGQyLCAweDAwLCAweDkwLCAweDdlLCAweDE5LCAweGUwLCAweDYwLCAweDExLCAweDQzLCAweDQ0LCAweDQwLCAweDkwLCAweDdmLCAweDk4fX0sCisgezB4MDM0NiwgNjQsIHsgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxYSwgMHhlMCwgMHg2MCwgMHgwZiwKKyAgMHg1MywgMHgzZSwgMHhmZSwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZSwgMHgxMiwgMHgxMSwgMHhiMSwgMHg3NSwgMHgyYiwgMHgwMSwgMHhkMiwgMHgwNywgMHg5MCwKKyAgMHg3ZSwgMHgxYiwgMHhlMCwgMHg2MCwgMHgwZiwgMHg0MywgMHgzZSwgMHgwMSwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZSwgMHgxMiwgMHgxMSwgMHhiMSwgMHhlNCwKKyAgMHhmNSwgMHgyYiwgMHhkMiwgMHgwNywgMHg5MCwgMHg3ZSwgMHgxYywgMHhlMCwgMHg2MCwgMHgwZSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMn19LAorIHsweDAzODYsIDY0LCB7IDB4ZjAsIDB4ZTUsIDB4NDAsIDB4NDQsIDB4MDIsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MWQsIDB4ZTAsIDB4NjAsIDB4MDIsIDB4ZDIsIDB4MGIsCisgIDB4OTAsIDB4N2UsIDB4MWUsIDB4ZTAsIDB4NjAsIDB4MDgsIDB4NzUsIDB4MmMsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4MzgsIDB4ZDIsIDB4MDcsIDB4OTAsIDB4N2UsCisgIDB4MWYsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4NzQsIDB4MzEsIDB4ZjAsIDB4NzQsIDB4MTUsIDB4ZjAsCisgIDB4NzQsIDB4MzUsIDB4ZjAsIDB4ZDIsIDB4MDMsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4Y2YsIDB4ZjAsIDB4MzAsIDB4MWEsIDB4NTIsIDB4ZTUsIDB4Mzh9fSwKKyB7MHgwM2M2LCA2NCwgeyAweDYwLCAweDAyLCAweDE1LCAweDM4LCAweDIwLCAweDEzLCAweDQ5LCAweGU1LCAweDEzLCAweGQzLCAweDk0LCAweDAwLCAweDQwLCAweDA0LCAweDE1LCAweDEzLCAweDgwLAorICAweDNlLCAweDc1LCAweDEzLCAweDBhLCAweDMwLCAweDFiLCAweDAyLCAweGQyLCAweDEzLCAweDEyLCAweDEyLCAweGRmLCAweGVmLCAweDU0LCAweDAxLCAweGY1LAorICAweDE5LCAweDY1LCAweDJhLCAweDYwLCAweDA1LCAweDg1LCAweDE5LCAweDJhLCAweGQyLCAweDA3LCAweDEyLCAweDEzLCAweDMzLCAweGVmLCAweDU0LCAweDgwLAorICAweGY1LCAweDE5LCAweDY1LCAweDI2LCAweDYwLCAweDA1LCAweDg1LCAweDE5LCAweDI2LCAweGQyLCAweDA3LCAweDMwLCAweDBkLCAweDExLCAweDEyfX0sCisgezB4MDQwNiwgNjQsIHsgMHgxMywgMHgzMywgMHhlZiwgMHg1NCwgMHgxMCwgMHhmNSwgMHgxOSwgMHg2NSwgMHgyNSwgMHg2MCwgMHgwNSwgMHg4NSwgMHgxOSwgMHgyNSwgMHhkMiwgMHgwNywgMHgyMCwKKyAgMHgxYiwgMHgwMywgMHgwMiwgMHgwNywgMHhlYywgMHgzMCwgMHgwYSwgMHgxOCwgMHgxMiwgMHgxMywgMHg2ZiwgMHhlZiwgMHhjMywgMHg5NSwgMHgzZCwgMHg0MCwKKyAgMHgwMywgMHgwMiwgMHgwNCwgMHhhZSwgMHg5MCwgMHg3ZiwgMHhjMSwgMHg3NCwgMHgwMSwgMHhmMCwgMHhjMiwgMHgwYSwgMHhjMiwgMHgwMCwgMHg4MCwgMHg3NywKKyAgMHgzMCwgMHgwNCwgMHgzYiwgMHg5MCwgMHg3ZiwgMHhjYSwgMHhlMCwgMHgyMCwgMHhlMSwgMHg2ZCwgMHgxMiwgMHgxMywgMHg2ZiwgMHhlZiwgMHhjM319LAorIHsweDA0NDYsIDY0LCB7IDB4OTQsIDB4NDAsIDB4NTAsIDB4NjQsIDB4OTAsIDB4N2QsIDB4NDAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGEsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZTAsIDB4MTQsIDB4ZjUsCisgIDB4MTksIDB4MjAsIDB4MDAsIDB4MTEsIDB4NjAsIDB4MGYsIDB4ZjUsIDB4MDgsIDB4N2UsIDB4N2QsIDB4N2YsIDB4NDEsIDB4NzUsIDB4MGMsIDB4N2QsIDB4NzUsCisgIDB4MGQsIDB4NDEsIDB4MTIsIDB4MGQsIDB4MDQsIDB4YzIsIDB4MDQsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZjAsIDB4ODAsIDB4MzksIDB4OTAsIDB4N2YsCisgIDB4Y2MsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MzIsIDB4MTIsIDB4MTMsIDB4NmYsIDB4ZWYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4MjksIDB4OTB9fSwKKyB7MHgwNDg2LCA2NCwgeyAweDdjLCAweGMwLCAweGUwLCAweDEzLCAweDkyLCAweDBhLCAweDkwLCAweDdmLCAweGNkLCAweGUwLCAweDE0LCAweGY1LCAweDE5LCAweDIwLCAweDAwLCAweDExLCAweDYwLAorICAweDBmLCAweGY1LCAweDA4LCAweDdlLCAweDdjLCAweDdmLCAweGMxLCAweDc1LCAweDBjLCAweDdjLCAweDc1LCAweDBkLCAweGMxLCAweDEyLCAweDBkLCAweDA0LAorICAweGQyLCAweDA0LCAweGU0LCAweDkwLCAweDdmLCAweGNkLCAweGYwLCAweDkwLCAweDdmLCAweGJhLCAweGUwLCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDA1LAorICAweDM2LCAweDEyLCAweDEyLCAweDIwLCAweDhmLCAweDE5LCAweDEyLCAweDEzLCAweDdiLCAweDhmLCAweDM3LCAweGU1LCAweDE5LCAweGMzLCAweDk1fX0sCisgezB4MDRjNiwgNjQsIHsgMHgzYiwgMHg1MCwgMHgwZiwgMHgxMiwgMHgxMywgMHg1NywgMHhlZiwgMHgzMCwgMHhlMCwgMHgwOCwgMHhlNSwgMHgzNywgMHgyMCwgMHhlNywgMHgwMywgMHgzMCwgMHgwYywKKyAgMHg1ZSwgMHhjMiwgMHgwYywgMHhlNSwgMHgxOSwgMHg2MCwgMHg1OCwgMHhiNCwgMHg4MCwgMHgwMywgMHg0MywgMHgzNywgMHgwMiwgMHhlNSwgMHgzNywgMHgzMCwKKyAgMHhlNywgMHgyNiwgMHhlNSwgMHgxOSwgMHhkMywgMHg5NCwgMHgyMCwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOSwgMHgyMCwgMHg4NSwgMHgxOSwgMHgwOCwgMHg3ZSwKKyAgMHg3ZCwgMHg3ZiwgMHg4MCwgMHg3NSwgMHgwYywgMHg3ZCwgMHg3NSwgMHgwZCwgMHg4MCwgMHhhZiwgMHgzNywgMHgxMiwgMHgwZiwgMHg4NCwgMHhlNX19LAorIHsweDA1MDYsIDY0LCB7IDB4MTksIDB4MjUsIDB4ZTAsIDB4OTAsIDB4N2YsIDB4YmIsIDB4ZjAsIDB4ODAsIDB4MjcsIDB4ZTUsIDB4MTksIDB4ZDMsIDB4OTQsIDB4M2YsIDB4NDAsIDB4MDMsIDB4NzUsCisgIDB4MTksIDB4M2YsIDB4ODUsIDB4MTksIDB4MDgsIDB4OTAsIDB4N2QsIDB4ODAsIDB4ZTUsIDB4MzcsIDB4ZjAsIDB4N2UsIDB4N2QsIDB4N2YsIDB4ODEsIDB4NzUsCisgIDB4MGMsIDB4N2QsIDB4NzUsIDB4MGQsIDB4ODEsIDB4MTIsIDB4MGQsIDB4MjksIDB4ZTUsIDB4MTksIDB4MDQsIDB4OTAsIDB4N2YsIDB4YmIsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4ZDAsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDYsIDB4MjAsIDB4MDYsIDB4MDMsIDB4MDIsIDB4MDcsIDB4OTcsIDB4YzIsIDB4MDYsIDB4ZTR9fSwKKyB7MHgwNTQ2LCA2NCwgeyAweGY1LCAweDE4LCAweDc0LCAweGMwLCAweDI1LCAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDE4LAorICAweDdjLCAweDAwLCAweDdiLCAweDAxLCAweDdhLCAweDdlLCAweDc5LCAweDIwLCAweDI0LCAweDIwLCAweGY5LCAweGVjLCAweDM0LCAweDdlLCAweGZhLCAweGVmLAorICAweDEyLCAweDBlLCAweGQyLCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDIwLCAweGQ3LCAweDkwLCAweDdlLCAweDIwLCAweGUwLCAweDYwLCAweDY4LAorICAweDkwLCAweDdlLCAweDIzLCAweGUwLCAweDYwLCAweDI0LCAweDdmLCAweDAxLCAweGU0LCAweGZkLCAweDEyLCAweDExLCAweGZiLCAweDdmLCAweDAzfX0sCisgezB4MDU4NiwgNjQsIHsgMHg3ZCwgMHhjZCwgMHgxMiwgMHgxMSwgMHhmYiwgMHg0MywgMHg0NywgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHhlNSwgMHg0NywgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZSwgMHgzMywgMHhmMCwgMHg4MCwgMHgzMCwgMHg5MCwgMHg3ZSwgMHgyMSwgMHhlMCwgMHhmZiwgMHgxMiwKKyAgMHgxMSwgMHgxOSwgMHg5MCwgMHg3ZSwgMHgyMiwgMHhlMCwgMHhmZiwgMHgxMiwgMHgxMSwgMHgzZiwgMHg3ZiwgMHgwMSwgMHg5MCwgMHg3ZSwgMHgzMSwgMHhlMCwKKyAgMHhmZCwgMHgxMiwgMHgxMSwgMHhmYiwgMHg3ZiwgMHgwMywgMHg3ZCwgMHgwNywgMHgxMiwgMHgxMSwgMHhmYiwgMHg0MywgMHg0NywgMHg4MCwgMHg5MH19LAorIHsweDA1YzYsIDY0LCB7IDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsCisgIDB4ZTUsIDB4NDEsIDB4NDQsIDB4MDYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MjMsIDB4ZTAsIDB4NzAsIDB4MDYsIDB4OTAsIDB4N2UsCisgIDB4MzMsIDB4ZTAsIDB4NzAsIDB4MDgsIDB4ZTQsIDB4OTAsIDB4N2UsIDB4MzMsIDB4ZjAsIDB4NzUsIDB4MmUsIDB4ZmYsIDB4OTAsIDB4N2UsIDB4MjUsIDB4ZTAsCisgIDB4NjAsIDB4MTIsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4M2YsIDB4ZjUsIDB4NDUsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTB9fSwKKyB7MHgwNjA2LCA2NCwgeyAweGMwLCAweDAwLCAweGU1LCAweDQ1LCAweGYwLCAweDkwLCAweDdlLCAweDI3LCAweGUwLCAweDYwLCAweDJiLCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQzLAorICAweDgwLCAweDgwLCAweDAzLCAweDUzLCAweDQzLCAweDdmLCAweDUzLCAweDQzLCAweGZjLCAweDkwLCAweDdlLCAweDI5LCAweGUwLCAweDYwLCAweDExLCAweDQzLAorICAweDQzLCAweDAyLCAweGEzLCAweGUwLCAweGZmLCAweDEyLCAweDExLCAweDY1LCAweDkwLCAweDdlLCAweDJiLCAweGUwLCAweGZmLCAweDEyLCAweDExLCAweDhiLAorICAweGFmLCAweDQzLCAweDEyLCAweDEwLCAweGYzLCAweDkwLCAweDdlLCAweDIzLCAweGUwLCAweDYwLCAweDA4LCAweDUzLCAweDQzLCAweDdmLCAweGFmfX0sCisgezB4MDY0NiwgNjQsIHsgMHg0MywgMHgxMiwgMHgxMCwgMHhmMywgMHg5MCwgMHg3ZSwgMHgyYywgMHhlMCwgMHg2MCwgMHgxOCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NywgMHgwMiwKKyAgMHg4MCwgMHgwMywgMHg1MywgMHg0NywgMHhmZCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NywKKyAgMHhmMCwgMHg5MCwgMHg3ZSwgMHgyZSwgMHhlMCwgMHg2MCwgMHgxOCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NywgMHgwMSwgMHg4MCwgMHgwMywKKyAgMHg1MywgMHg0NywgMHhmZSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NywgMHhmMH19LAorIHsweDA2ODYsIDY0LCB7IDB4OTAsIDB4N2UsIDB4MzIsIDB4ZTAsIDB4ZjUsIDB4M2IsIDB4YTMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGUsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4M2QsIDB4YTMsIDB4ZTAsCisgIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDcsIDB4MTAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDcsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsCisgIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDcsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MzYsIDB4ZTAsIDB4NjAsIDB4MzIsIDB4NTMsIDB4NDUsIDB4YmYsIDB4OTAsCisgIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwNmM2LCA2NCwgeyAweDk4LCAweDc0LCAweDA5LCAweGYwLCAweDEyLCAweDEzLCAweDRiLCAweGVmLCAweDU0LCAweGZlLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDUzLCAweDNmLCAweGZkLAorICAweGU0LCAweGZmLCAweGFkLCAweDNmLCAweDEyLCAweDExLCAweGZiLCAweGU0LCAweGY1LCAweDMzLCAweGY1LCAweDMyLCAweGQyLCAweDA4LCAweDkwLCAweDdlLAorICAweDM3LCAweGUwLCAweDYwLCAweDBmLCAweDQzLCAweDNmLCAweDAyLCAweGU0LCAweGZmLCAweGFkLCAweDNmLCAweDEyLCAweDExLCAweGZiLCAweDc1LCAweDMyLAorICAweDAxLCAweGQyLCAweDA4LCAweDkwLCAweDdlLCAweDM4LCAweGUwLCAweDYwLCAweDEwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBhLCAweGYwfX0sCisgezB4MDcwNiwgNjQsIHsgMHhlNSwgMHg0MSwgMHg0NCwgMHgwNCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHhkMiwgMHgwMCwgMHg5MCwgMHg3ZSwgMHgzOSwgMHhlMCwgMHg2MCwgMHgxMSwgMHg0MywKKyAgMHg0NSwgMHg0MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwKKyAgMHg5MCwgMHg3ZSwgMHgzYSwgMHhlMCwgMHg2MCwgMHgwZiwgMHg1MywgMHgzZiwgMHhmZSwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZiwgMHgxMiwgMHgxMSwgMHhmYiwKKyAgMHg3NSwgMHgzNCwgMHgwMSwgMHhkMiwgMHgwOCwgMHg5MCwgMHg3ZSwgMHgzYiwgMHhlMCwgMHg2MCwgMHgwZiwgMHg0MywgMHgzZiwgMHgwMSwgMHhlNH19LAorIHsweDA3NDYsIDY0LCB7IDB4ZmYsIDB4YWQsIDB4M2YsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4ZTQsIDB4ZjUsIDB4MzQsIDB4ZDIsIDB4MDgsIDB4OTAsIDB4N2UsIDB4M2MsIDB4ZTAsIDB4NjAsIDB4MGUsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4ZTUsIDB4NDEsIDB4NDQsIDB4MDIsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsCisgIDB4M2QsIDB4ZTAsIDB4NjAsIDB4MDIsIDB4ZDIsIDB4MGMsIDB4OTAsIDB4N2UsIDB4M2UsIDB4ZTAsIDB4NjAsIDB4MDgsIDB4NzUsIDB4MzUsIDB4MDEsIDB4ZTQsCisgIDB4ZjUsIDB4MzksIDB4ZDIsIDB4MDgsIDB4OTAsIDB4N2UsIDB4M2YsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTN9fSwKKyB7MHgwNzg2LCA2NCwgeyAweGYwLCAweDc0LCAweDMzLCAweGYwLCAweDc0LCAweDE2LCAweGYwLCAweDc0LCAweDM2LCAweGYwLCAweGQyLCAweDA0LCAweGU0LCAweDkwLCAweDdmLCAweGQxLCAweGYwLAorICAweDMwLCAweDFhLCAweDUyLCAweGU1LCAweDM5LCAweDYwLCAweDAyLCAweDE1LCAweDM5LCAweDMwLCAweDEzLCAweDQ5LCAweGU1LCAweDEzLCAweGQzLCAweDk0LAorICAweDAwLCAweDQwLCAweDA0LCAweDE1LCAweDEzLCAweDgwLCAweDNlLCAweDc1LCAweDEzLCAweDBhLCAweDMwLCAweDFiLCAweDAyLCAweGMyLCAweDEzLCAweDEyLAorICAweDEzLCAweDRiLCAweGVmLCAweDU0LCAweDAxLCAweGY1LCAweDE5LCAweDY1LCAweDMzLCAweDYwLCAweDA1LCAweDg1LCAweDE5LCAweDMzLCAweGQyfX0sCisgezB4MDdjNiwgNjQsIHsgMHgwOCwgMHgxMiwgMHgxMywgMHg4NywgMHhlZiwgMHg1NCwgMHg4MCwgMHhmNSwgMHgxOSwgMHg2NSwgMHgyZiwgMHg2MCwgMHgwNSwgMHg4NSwgMHgxOSwgMHgyZiwgMHhkMiwKKyAgMHgwOCwgMHgzMCwgMHgwZSwgMHgxMSwgMHgxMiwgMHgxMywgMHg4NywgMHhlZiwgMHg1NCwgMHgxMCwgMHhmNSwgMHgxOSwgMHg2NSwgMHgyZSwgMHg2MCwgMHgwNSwKKyAgMHg4NSwgMHgxOSwgMHgyZSwgMHhkMiwgMHgwOCwgMHgzMCwgMHgxYSwgMHgyYSwgMHg5MCwgMHg3ZiwgMHhkMiwgMHhlMCwgMHgyMCwgMHhlMSwgMHgyMywgMHg5MCwKKyAgMHg3YiwgMHg0MCwgMHhlMCwgMHg2MCwgMHgwOSwgMHhlMCwgMHhmNSwgMHgxNSwgMHg5MCwgMHg3YiwgMHg0MiwgMHhlMCwgMHhmNSwgMHgxNiwgMHg5MH19LAorIHsweDA4MDYsIDY0LCB7IDB4N2IsIDB4NDEsIDB4ZTAsIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4NzQsIDB4MzcsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsCisgIDB4ZDMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YzIsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MDksIDB4MjAsIDB4ZTUsIDB4MGEsIDB4NzAsIDB4NDAsCisgIDB4MzAsIDB4MDcsIDB4MzksIDB4ZTUsIDB4MzgsIDB4NzAsIDB4MzUsIDB4YzIsIDB4MDcsIDB4ZjUsIDB4MTgsIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsCisgIDB4MjQsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MGUsIDB4OGMsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjV9fSwKKyB7MHgwODQ2LCA2NCwgeyAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDA5LCAweGRiLAorICAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDA5LCAweGYwLCAweDc1LCAweDM4LCAweDEwLCAweGU0LCAweGY1LCAweDJjLCAweDc1LCAweDBhLCAweDAxLCAweDIyLAorICAweGU1LCAweDBhLCAweDY0LCAweDAxLCAweDcwLCAweDQwLCAweDMwLCAweDA4LCAweDM5LCAweGU1LCAweDM5LCAweDcwLCAweDM1LCAweGMyLCAweDA4LCAweGY1LAorICAweDE4LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDJkLCAweDI1LCAweDE4LCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyfX0sCisgezB4MDg4NiwgNjQsIHsgMHgwZSwgMHg4YywgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNSwgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwKKyAgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwOSwgMHhkYiwgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwOSwgMHhmMCwgMHg3NSwgMHgzOSwgMHgxMCwgMHhlNCwKKyAgMHhmNSwgMHgzNSwgMHg3NSwgMHgwYSwgMHgwMiwgMHgyMiwgMHhlNSwgMHgwYSwgMHg2NCwgMHgwMiwgMHg3MCwgMHgzNiwgMHgzMCwgMHgxNCwgMHgyZiwgMHhjMiwKKyAgMHgxNCwgMHhmNSwgMHgxOCwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgwZSwgMHgyNSwgMHgxOCwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMH19LAorIHsweDA4YzYsIDY0LCB7IDB4ZmEsIDB4MTIsIDB4MGUsIDB4OGMsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjUsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsCisgIDB4ZjAsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDUsIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDUsIDB4ZjAsIDB4NzUsIDB4MGEsCisgIDB4MDMsIDB4MjIsIDB4ZTUsIDB4MTUsIDB4NjAsIDB4MzAsIDB4MTUsIDB4MTUsIDB4ZTQsIDB4ZjUsIDB4MTgsIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsCisgIDB4MTQsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MGUsIDB4OGMsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjV9fSwKKyB7MHgwOTA2LCA2NCwgeyAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDAzLCAweGRiLAorICAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDAzLCAweGYwLCAweGU0LCAweGY1LCAweDBhLCAweDIyLCAweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDEyLCAweDBlLAorICAweGU0LCAweDBhLCAweDA4LCAweDAwLCAweDBhLCAweDdjLCAweDAxLCAweDBhLCAweGU4LCAweDAzLCAweDA5LCAweDQ0LCAweDA2LCAweDA5LCAweGZiLCAweDA4LAorICAweDA5LCAweGY1LCAweDA5LCAweDA5LCAweGRkLCAweDBhLCAweDA5LCAweGVjLCAweDBiLCAweDAwLCAweDAwLCAweDBiLCAweDM3LCAweDkwLCAweDdmfX0sCisgezB4MDk0NiwgNjQsIHsgMHhlYiwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxOSwgMHgxNCwgMHg2MCwgMHg2MSwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwOSwgMHhkMywgMHg3NCwKKyAgMHgxOSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHg3NCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwKKyAgMHhlYSwgMHhlMCwgMHg3MCwgMHgwNCwgMHg3ZiwgMHgwMiwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMywgMHg3NSwgMHg4MiwgMHg4MiwgMHg3NSwgMHg4MywgMHgxOSwKKyAgMHhlZiwgMHhmMCwgMHg3NSwgMHg4MiwgMHg3YiwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NSwgMHg4MiwgMHg3NCwgMHg3NSwgMHg4MywgMHgxOX19LAorIHsweDA5ODYsIDY0LCB7IDB4ZjAsIDB4NzUsIDB4ODIsIDB4NjYsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4NzUsIDB4ODIsIDB4NTgsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4ZWEsIDB4ZTAsIDB4MDQsIDB4NzUsIDB4ODIsIDB4MTcsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4NzQsIDB4MTksIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsCisgIDB4NzQsIDB4MTIsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGYsCisgIDB4MGEsIDB4ZWEsIDB4NDksIDB4NjAsIDB4MGQsIDB4ZWEsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4ZTksIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjB9fSwKKyB7MHgwOWM2LCA2NCwgeyAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGI0LCAweGUwLAorICAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweDAwLCAweGU1LCAweDA5LCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LAorICAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGY1LCAweDA5LCAweDAyLCAweDBiLCAweDNlLCAweDEyLCAweDBiLAorICAweDQ2LCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweDAwLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweGYwLCAweDAyfX0sCisgezB4MGEwNiwgNjQsIHsgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHg3ZiwgMHg2MCwgMHgyNCwgMHgxNCwgMHg2MCwgMHgzMSwgMHgyNCwgMHgwMiwgMHg3MCwgMHg1YiwKKyAgMHhhMiwgMHgxMCwgMHhlNCwgMHgzMywgMHhmZiwgMHgyNSwgMHhlMCwgMHhmZiwgMHhhMiwgMHgxNiwgMHhlNCwgMHgzMywgMHg0ZiwgMHg5MCwgMHg3ZiwgMHgwMCwKKyAgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHhlNCwgMHg5MCwgMHg3ZiwKKyAgMHgwMCwgMHhmMCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3Zn19LAorIHsweDBhNDYsIDY0LCB7IDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsCisgIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4ZTQsCisgIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsCisgIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MWQsIDB4MjQsIDB4MDJ9fSwKKyB7MHgwYTg2LCA2NCwgeyAweDYwLCAweDAzLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA1LCAweGMyLCAweDEwLCAweDAyLCAweDBiLCAweDNlLAorICAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDM4LAorICAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLAorICAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweDkwLCAweDdmfX0sCisgezB4MGFjNiwgNjQsIHsgMHhlYywgMHhlMCwgMHg1NCwgMHg4MCwgMHhmZiwgMHgxMywgMHgxMywgMHgxMywgMHg1NCwgMHgxZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHg5MCwgMHg3ZiwKKyAgMHhkNywgMHhmMCwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHg4MCwgMHg1ZiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwKKyAgMHg1NiwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxOCwgMHgyNCwgMHgwMiwgMHg3MCwgMHg0YSwgMHg5MCwgMHg3ZiwgMHhlYSwKKyAgMHhlMCwgMHhiNCwgMHgwMSwgMHgwNCwgMHhkMiwgMHgxMCwgMHg4MCwgMHgzZiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMH19LAorIHsweDBiMDYsIDY0LCB7IDB4ODAsIDB4MzYsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsCisgIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsCisgIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MTAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MDcsCisgIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4MjJ9fSwKKyB7MHgwYjQ2LCA2NCwgeyAweGU0LCAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweDMwLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk2LCAweGYwLCAweDkwLAorICAweDdmLCAweDk1LCAweDc0LCAweGMwLCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LCAweDNmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE4LAorICAweGYwLCAweGU0LCAweGY1LCAweDhlLCAweDkwLCAweDdmLCAweGRmLCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGRlLCAweGYwLCAweGU0LCAweGY1LAorICAweDI0LCAweDc1LCAweDE4LCAweDAxLCAweDdiLCAweDAwLCAweDc0LCAweDI0LCAweDI1LCAweDE4LCAweGY5LCAweGU0LCAweDM0LCAweDAwLCAweGZhfX0sCisgezB4MGI4NiwgNjQsIHsgMHhlNCwgMHgxMiwgMHgwZSwgMHhkMiwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwOSwgMHhlYSwgMHg3NSwgMHgzYSwgMHgwMSwgMHhlNCwgMHhmNSwgMHgzOCwKKyAgMHhmNSwgMHgxMywgMHhmNSwgMHgzNiwgMHhjMiwgMHgwNywgMHhjMiwgMHgwYiwgMHhjMiwgMHgwNSwgMHhjMiwgMHgwMCwgMHhjMiwgMHgwOSwgMHhjMiwgMHgxMywKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg3NSwgMHg0NCwgMHgwMywgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHgwMywgMHhmMCwgMHg3ZiwKKyAgMHgwYywgMHhlNCwgMHhmZCwgMHgxMiwgMHgxMSwgMHhiMSwgMHg3ZiwgMHgxMCwgMHg4ZiwgMHg0MiwgMHgxMiwgMHgxMCwgMHg4MSwgMHg5MCwgMHg3Zn19LAorIHsweDBiYzYsIDY0LCB7IDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4N2YsIDB4MDEsIDB4OGYsIDB4NDAsIDB4ZWYsIDB4NDQsIDB4MDYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4NzUsIDB4NDYsIDB4ODAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4MGYsIDB4ZTQsIDB4ZmQsCisgIDB4MTIsIDB4MTEsIDB4YjEsIDB4ZTQsIDB4ZmYsIDB4N2UsIDB4YTMsIDB4YWQsIDB4MDYsIDB4OGQsIDB4M2UsIDB4MTIsIDB4MTEsIDB4YjEsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4N2YsIDB4MDUsIDB4N2QsIDB4N2YsIDB4MTIsIDB4MTF9fSwKKyB7MHgwYzA2LCA2NCwgeyAweGIxLCAweDdmLCAweDAxLCAweDEyLCAweDEyLCAweDZhLCAweDdmLCAweDAzLCAweDdkLCAweDA3LCAweDEyLCAweDExLCAweGIxLCAweDIwLCAweDFiLCAweDAzLCAweDAyLAorICAweDBjLCAweGI3LCAweDc1LCAweDJkLCAweDAxLCAweDc1LCAweDE4LCAweDAxLCAweDdiLCAweDAwLCAweDc0LCAweDJkLCAweDI1LCAweDE4LCAweGY5LCAweGU0LAorICAweDM0LCAweDAwLCAweGZhLCAweGU0LCAweDEyLCAweDBlLCAweGQyLCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDA5LCAweGVhLCAweDc1LCAweDNiLAorICAweDAxLCAweGU0LCAweGY1LCAweDM5LCAweGY1LCAweDEzLCAweGY1LCAweDM3LCAweGMyLCAweDA4LCAweGMyLCAweDBjLCAweGMyLCAweDA2LCAweGMyfX0sCisgezB4MGM0NiwgNjQsIHsgMHgwMCwgMHhjMiwgMHgwYSwgMHhjMiwgMHgxMywgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg3NSwgMHg0NSwgMHgwMywgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHg3NCwgMHgwMywgMHhmMCwgMHg3ZiwgMHgwYywgMHhlNCwgMHhmZCwgMHgxMiwgMHgxMSwgMHhmYiwgMHg3ZiwgMHgxMCwgMHg4ZiwgMHg0MywgMHgxMiwgMHgxMCwKKyAgMHhmMywgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYSwgMHhmMCwgMHg3ZiwgMHgwMSwgMHg4ZiwgMHg0MSwgMHhlZiwgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg3NSwgMHg0NywgMHg4MCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NH19LAorIHsweDBjODYsIDY0LCB7IDB4ODAsIDB4ZjAsIDB4MGYsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4ZTQsIDB4ZmYsIDB4N2UsIDB4YTMsIDB4YWQsIDB4MDYsIDB4OGQsIDB4M2YsIDB4MTIsCisgIDB4MTEsIDB4ZmIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDksIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4N2YsIDB4MDUsIDB4N2QsCisgIDB4N2YsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4N2YsIDB4MDEsIDB4MTIsIDB4MTIsIDB4OGIsIDB4N2YsIDB4MDMsIDB4N2QsIDB4MDcsIDB4MTIsIDB4MTEsIDB4ZmIsCisgIDB4ZDIsIDB4MTIsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4YWYsIDB4MDgsIDB4ZTUsIDB4MGQsIDB4ZjUsIDB4ODJ9fSwKKyB7MHgwY2M2LCA2NCwgeyAweGU1LCAweDBjLCAweGY1LCAweDgzLCAweGMyLCAweGFmLCAweDA1LCAweDg2LCAweDkwLCAweGMwLCAweDAwLCAweDA1LCAweDg2LCAweGUwLCAweGEzLCAweDA1LCAweDg2LAorICAweGYwLCAweDA1LCAweDg2LCAweGRmLCAweGY3LCAweGQyLCAweGFmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweGFmLCAweDA4LAorICAweGU1LCAweDBkLCAweGY1LCAweDgyLCAweGU1LCAweDBjLCAweGY1LCAweDgzLCAweGMyLCAweGFmLCAweDA1LCAweDg2LCAweDkwLCAweGMwLCAweDAwLCAweGUwLAorICAweDA1LCAweDg2LCAweGYwLCAweGEzLCAweDA1LCAweDg2LCAweGRmLCAweGY3LCAweDA1LCAweDg2LCAweGQyLCAweGFmLCAweDIyLCAweDkwLCAweDdmfX0sCisgezB4MGQwNiwgNjQsIHsgMHg5OCwgMHg3NCwgMHgwOCwgMHhmMCwgMHhhZiwgMHgwOCwgMHhlNSwgMHgwZCwgMHhmNSwgMHg4MiwgMHhlNSwgMHgwYywgMHhmNSwgMHg4MywgMHhjMiwgMHhhZiwgMHgwNSwKKyAgMHg4NiwgMHg5MCwgMHhjMCwgMHgwMCwgMHgwNSwgMHg4NiwgMHhlMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhmMCwgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHhkMiwKKyAgMHhhZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOCwgMHhmMCwgMHhhZiwgMHgwOCwgMHhlNSwgMHgwZCwgMHhmNSwgMHg4MiwgMHhlNSwgMHgwYywKKyAgMHhmNSwgMHg4MywgMHhjMiwgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHgwNSwgMHg4NiwgMHhmMCwgMHhhMywgMHgwNX19LAorIHsweDBkNDYsIDY0LCB7IDB4ODYsIDB4ZGYsIDB4ZjcsIDB4MDUsIDB4ODYsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4NzQsIDB4MDAsIDB4ZjUsIDB4ODYsIDB4OTAsIDB4ZmQsIDB4YTUsIDB4N2MsIDB4MDUsCisgIDB4YTMsIDB4ZTUsIDB4ODIsIDB4NDUsIDB4ODMsIDB4NzAsIDB4ZjksIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4NDMsCisgIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ZDIsIDB4MTksIDB4OTAsIDB4N2YsIDB4OTIsIDB4ZTAsIDB4NDQsIDB4MDIsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWUsIDB4ZTAsIDB4ZmYsIDB4ZDMsIDB4OTIsIDB4MTAsIDB4ZTQsIDB4MzMsIDB4ZmUsIDB4ZWYsIDB4NGUsIDB4ZjB9fSwKKyB7MHgwZDg2LCA2NCwgeyAweGQyLCAweGU4LCAweDQzLCAweGQ4LCAweDIwLCAweDkwLCAweDdmLCAweGRlLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGRmLCAweGYwLCAweDkwLCAweDdmLAorICAweGFiLCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGE5LCAweGYwLCAweDkwLCAweDdmLCAweGFhLCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLAorICAweDdmLCAweGFmLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGFlLCAweGUwLCAweDQ0LCAweDBkLCAweGYwLCAweGQyLCAweGFmLCAweGQyLAorICAweDFhLCAweDEyLCAweDEyLCAweDQ1LCAweGMyLCAweDExLCAweGU0LCAweGY1LCAweDBiLCAweGY1LCAweDEzLCAweGMyLCAweDE3LCAweGMyLCAweDEyfX0sCisgezB4MGRjNiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHhhMSwgMHgwNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHg2NSwgMHgxNywgMHg2MCwgMHgxMCwgMHgzMCwgMHgxMiwgMHgwNSwgMHhkMiwKKyAgMHgxYSwgMHgxMiwgMHgwMCwgMHg0NiwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHhmNSwgMHgxNywgMHg4MCwgMHgwOCwgMHgzMCwgMHgxMiwgMHgwNSwgMHhjMiwKKyAgMHgxYSwgMHgxMiwgMHgwMCwgMHg0NiwgMHgzMCwgMHgxMSwgMHgwNywgMHhjMiwgMHgxMSwgMHgxMiwgMHgwOSwgMHgyMSwgMHg4MCwgMHhkNiwgMHgzMCwgMHgxOCwKKyAgMHhkMywgMHhjMiwgMHgxOCwgMHgxMiwgMHgxMywgMHg5MywgMHg4MCwgMHhjYywgMHgyMiwgMHg3OCwgMHg3ZiwgMHhlNCwgMHhmNiwgMHhkOCwgMHhmZH19LAorIHsweDBlMDYsIDY0LCB7IDB4NzUsIDB4ODEsIDB4NDcsIDB4MDIsIDB4MGUsIDB4NDcsIDB4MDIsIDB4MGQsIDB4NmYsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NDAsCisgIDB4MDMsIDB4ZjYsIDB4ODAsIDB4MDEsIDB4ZjIsIDB4MDgsIDB4ZGYsIDB4ZjQsIDB4ODAsIDB4MjksIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4NTQsIDB4MDcsCisgIDB4MjQsIDB4MGMsIDB4YzgsIDB4YzMsIDB4MzMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MjAsIDB4YzgsIDB4ODMsIDB4NDAsIDB4MDQsIDB4ZjQsIDB4NTYsCisgIDB4ODAsIDB4MDEsIDB4NDYsIDB4ZjYsIDB4ZGYsIDB4ZTQsIDB4ODAsIDB4MGIsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDB9fSwKKyB7MHgwZTQ2LCA2NCwgeyAweDgwLCAweDkwLCAweDEyLCAweGFjLCAweGU0LCAweDdlLCAweDAxLCAweDkzLCAweDYwLCAweGJjLCAweGEzLCAweGZmLCAweDU0LCAweDNmLCAweDMwLCAweGU1LCAweDA5LAorICAweDU0LCAweDFmLCAweGZlLCAweGU0LCAweDkzLCAweGEzLCAweDYwLCAweDAxLCAweDBlLCAweGNmLCAweDU0LCAweGMwLCAweDI1LCAweGUwLCAweDYwLCAweGE4LAorICAweDQwLCAweGI4LCAweGU0LCAweDkzLCAweGEzLCAweGZhLCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweGU0LCAweDkzLCAweGEzLCAweGM4LCAweGM1LCAweDgyLAorICAweGM4LCAweGNhLCAweGM1LCAweDgzLCAweGNhLCAweGYwLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNhLCAweGM1LCAweDgzLCAweGNhfX0sCisgezB4MGU4NiwgNjQsIHsgMHhkZiwgMHhlOSwgMHhkZSwgMHhlNywgMHg4MCwgMHhiZSwgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwMiwKKyAgMHhlNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMiwgMHhlMywgMHgyMiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMiwgMHhiYiwgMHgwMSwKKyAgMHgwYywgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwNiwgMHhlOSwKKyAgMHgyNSwgMHg4MiwgMHhmOCwgMHhlNiwgMHgyMiwgMHhiYiwgMHhmZSwgMHgwNiwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgMHhlMiwgMHgyMiwgMHhlNX19LAorIHsweDBlYzYsIDY0LCB7IDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsCisgIDB4OGEsIDB4ODMsIDB4ZjAsIDB4MjIsIDB4NTAsIDB4MDIsIDB4ZjcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDEsIDB4ZjMsIDB4MjIsIDB4ZDAsIDB4ODMsIDB4ZDAsCisgIDB4ODIsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4NzAsIDB4MTIsIDB4NzQsIDB4MDEsIDB4OTMsIDB4NzAsIDB4MGQsIDB4YTMsIDB4YTMsIDB4OTMsIDB4ZjgsIDB4NzQsCisgIDB4MDEsIDB4OTMsIDB4ZjUsIDB4ODIsIDB4ODgsIDB4ODMsIDB4ZTQsIDB4NzMsIDB4NzQsIDB4MDIsIDB4OTMsIDB4NjgsIDB4NjAsIDB4ZWYsIDB4YTN9fSwKKyB7MHgwZjA2LCA2NCwgeyAweGEzLCAweGEzLCAweDgwLCAweGRmLCAweDhmLCAweDE4LCAweGU0LCAweGY1LCAweDE5LCAweDc1LCAweDFhLCAweGZmLCAweDc1LCAweDFiLCAweDE5LCAweDc1LCAweDFjLAorICAweDg2LCAweGFiLCAweDFhLCAweGFhLCAweDFiLCAweGE5LCAweDFjLCAweDkwLCAweDAwLCAweDAxLCAweDEyLCAweDBlLCAweGE1LCAweGI0LCAweDAzLCAweDFkLAorICAweGFmLCAweDE5LCAweDA1LCAweDE5LCAweGVmLCAweGI1LCAweDE4LCAweDAxLCAweDIyLCAweDEyLCAweDBlLCAweDhjLCAweDdlLCAweDAwLCAweDI5LCAweGZmLAorICAweGVlLCAweDNhLCAweGE5LCAweDA3LCAweDc1LCAweDFhLCAweGZmLCAweGY1LCAweDFiLCAweDg5LCAweDFjLCAweDgwLCAweGQ0LCAweDdiLCAweDAwfX0sCisgezB4MGY0NiwgNjQsIHsgMHg3YSwgMHgwMCwgMHg3OSwgMHgwMCwgMHgyMiwgMHg4ZiwgMHgxYSwgMHgwNSwgMHgwZCwgMHhlNSwgMHgwZCwgMHhhZSwgMHgwYywgMHg3MCwgMHgwMiwgMHgwNSwgMHgwYywKKyAgMHgxNCwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlNSwgMHgxYSwgMHhmMCwgMHgxMiwgMHgwMCwgMHgzNiwgMHgwNSwgMHgwZCwgMHhlNSwgMHgwZCwgMHhhYywKKyAgMHgwYywgMHg3MCwgMHgwMiwgMHgwNSwgMHgwYywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHgxNSwgMHgwOCwgMHhlNSwgMHgwOCwKKyAgMHg2MCwgMHgwYSwgMHgxMiwgMHgxMywgMHgyNywgMHg4ZiwgMHgxYSwgMHhlZiwgMHg0MiwgMHgzNiwgMHg4MCwgMHhjYSwgMHgyMiwgMHg4ZiwgMHgxYX19LAorIHsweDBmODYsIDY0LCB7IDB4MDUsIDB4MGQsIDB4ZTUsIDB4MGQsIDB4YWUsIDB4MGMsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MGMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTUsIDB4MWEsCisgIDB4ZjAsIDB4MTIsIDB4MTMsIDB4M2YsIDB4MDUsIDB4MGQsIDB4ZTUsIDB4MGQsIDB4YWMsIDB4MGMsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MGMsIDB4MTQsIDB4ZjUsCisgIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MTUsIDB4MDgsIDB4ZTUsIDB4MDgsIDB4NjAsIDB4MGEsIDB4MTIsIDB4MTMsIDB4N2IsIDB4OGYsIDB4MWEsCisgIDB4ZWYsIDB4NDIsIDB4MzcsIDB4ODAsIDB4Y2EsIDB4MjIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzB9fSwKKyB7MHgwZmM2LCA2NCwgeyAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweDkwLCAweDdmLCAweGM0LCAweGU0LCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLAorICAweDc0LCAweDA0LCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLAorICAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGQyLAorICAweDExLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDAxLCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwfX0sCisgezB4MTAwNiwgNjQsIHsgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwKKyAgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhkMiwgMHgxOCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwOCwKKyAgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMH19LAorIHsweDEwNDYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsCisgIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsCisgIDB4ZjAsIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTN9fSwKKyB7MHgxMDg2LCA2NCwgeyAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLAorICAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDQ0fX0sCisgezB4MTBjNiwgNjQsIHsgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwKKyAgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwKKyAgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwKKyAgMHgwYiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYSwgMHhmMCwgMHg5MH19LAorIHsweDExMDYsIDY0LCB7IDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsCisgIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTB9fSwKKyB7MHgxMTQ2LCA2NCwgeyAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA5LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLAorICAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLAorICAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmfX0sCisgezB4MTE4NiwgNjQsIHsgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwZSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwKKyAgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwKKyAgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNywgMHhmMCwgMHg5MH19LAorIHsweDExYzYsIDY0LCB7IDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MTIsCisgIDB4MTMsIDB4MGYsIDB4OGYsIDB4MWEsIDB4MTIsIDB4MTMsIDB4MGYsIDB4OGYsIDB4MWIsIDB4ZTUsIDB4MWEsIDB4NjUsIDB4MWIsIDB4NjAsIDB4MTIsIDB4MTIsCisgIDB4MTMsIDB4MGYsIDB4OGYsIDB4MWEsIDB4ZTUsIDB4MWEsIDB4NjUsIDB4MWIsIDB4NjAsIDB4MDcsIDB4MTIsIDB4MTMsIDB4MGYsIDB4OGYsIDB4MWIsIDB4ODAsCisgIDB4ZTgsIDB4YWYsIDB4MWEsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTB9fSwKKyB7MHgxMjA2LCA2NCwgeyAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBmLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LAorICAweDc0LCAweDBkLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVkLCAweGYwLCAweDIyLCAweDEyLCAweDEzLCAweDYzLCAweDhmLCAweDFhLCAweDEyLCAweDEzLAorICAweDYzLCAweDhmLCAweDFiLCAweGU1LCAweDFhLCAweDY1LCAweDFiLCAweDYwLCAweDEyLCAweDEyLCAweDEzLCAweDYzLCAweDhmLCAweDFhLCAweGU1LCAweDFhLAorICAweDY1LCAweDFiLCAweDYwLCAweDA3LCAweDEyLCAweDEzLCAweDYzLCAweDhmLCAweDFiLCAweDgwLCAweGU4LCAweGFmLCAweDFhLCAweDIyLCAweDkwfX0sCisgezB4MTI0NiwgNjQsIHsgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHgzMCwgMHgxYSwgMHgwNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwKKyAgMHg3ZiwgMHhmNCwgMHg3ZSwgMHgwMSwgMHgxMiwgMHgxMiwgMHhjOCwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHhlMCwgMHg0NCwKKyAgMHgwNCwgMHhmMCwgMHgyMiwgMHhhZSwgMHgwNywgMHhlNCwgMHhmZiwgMHhlNSwgMHgzZSwgMHg1NCwgMHg3ZiwgMHhmZCwgMHgxMiwgMHgxMSwgMHhiMSwgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZSwgMHhmMCwgMHhlNCwgMHhlNSwgMHgzZSwgMHg0NCwgMHg4MH19LAorIHsweDEyODYsIDY0LCB7IDB4ZmQsIDB4MTIsIDB4MTEsIDB4YjEsIDB4MjIsIDB4YWUsIDB4MDcsIDB4ZTQsIDB4ZmYsIDB4ZTUsIDB4M2YsIDB4NTQsIDB4N2YsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4ZmIsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDksIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWUsIDB4ZjAsIDB4ZTQsIDB4ZTUsIDB4M2YsIDB4NDQsIDB4ODAsCisgIDB4ZmQsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4MjIsIDB4MDUsIDB4MGUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MTQsIDB4MDMsIDB4MDAsCisgIDB4MDAsIDB4YzEsIDB4MTEsIDB4YzEsIDB4MTgsIDB4YzEsIDB4OTUsIDB4YzEsIDB4MTAsIDB4YzEsIDB4MTYsIDB4MDEsIDB4MGEsIDB4MDAsIDB4YzF9fSwKKyB7MHgxMmM2LCA2NCwgeyAweDFiLCAweDAwLCAweDhlLCAweDE4LCAweDhmLCAweDE5LCAweGU1LCAweDE5LCAweDE1LCAweDE5LCAweGFlLCAweDE4LCAweDcwLCAweDAyLCAweDE1LCAweDE4LCAweDRlLAorICAweDYwLCAweDA1LCAweDEyLCAweDBkLCAweDRlLCAweDgwLCAweGVlLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDkwLCAweGMwLAorICAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLAorICAweDUzLCAweGQ4LCAweGVmLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDBmLCAweGU3LCAweDAwLCAweDAyLCAweDEzfX0sCisgezB4MTMwNiwgNjQsIHsgMHgwNCwgMHgwMCwgMHgwMiwgMHgwZiwgMHhiZCwgMHgwMCwgMHgwMiwgMHgxMCwgMHgwZSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwKKyAgMHgxNiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOCwgMHhmMCwgMHg5MH19LAorIHsweDEzNDYsIDY0LCB7IDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDksIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsCisgIDB4MGIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmZ9fSwKKyB7MHgxMzg2LCA2NCwgeyAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBlLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDEyLCAweDAwLCAweDAzLCAweDEyLAorICAweDBkLCAweDVmLCAweDEyLCAweDBiLCAweDQ2LCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTNjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNDQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTQ4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNTA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTU0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNWM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTYwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNjg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTZjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNzQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTc4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxODA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTg0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxOGM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDEwLCAweDAxLCAweGZmLCAweDAwfX0sCisgezB4MTkwNiwgNjQsIHsgMHgwMCwgMHg0MCwgMHhjZCwgMHgwNiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMiwgMHgwOSwgMHgwMiwgMHg3NCwgMHgwMCwgMHgwMSwKKyAgMHgwMSwgMHgwMCwgMHhhMCwgMHgzMiwgMHgwOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMSwKKyAgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMywgMHgwMiwgMHg0MCwKKyAgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNSwgMHgwMiwgMHg0MCwgMHgwMH19LAorIHsweDE5NDYsIDY0LCB7IDB4MDAsIDB4MDcsIDB4MDUsIDB4MDYsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsCisgIDB4ODEsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODMsIDB4MDIsCisgIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODQsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODUsIDB4MDIsIDB4NDAsIDB4MDAsCisgIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODYsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDcsIDB4MDUsIDB4ODcsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDF9fSwKKyB7MHgxOTg2LCA2NCwgeyAweDA0LCAweDAzLCAweDA5LCAweDA0LCAweDQ4LCAweDAzLCAweDRiLCAweDAwLCAweDY1LCAweDAwLCAweDc5LCAweDAwLCAweDczLCAweDAwLCAweDcwLCAweDAwLCAweDYxLAorICAweDAwLCAweDZlLCAweDAwLCAweDJjLCAweDAwLCAweDIwLCAweDAwLCAweDYxLCAweDAwLCAweDIwLCAweDAwLCAweDY0LCAweDAwLCAweDY5LCAweDAwLCAweDc2LAorICAweDAwLCAweDY5LCAweDAwLCAweDczLCAweDAwLCAweDY5LCAweDAwLCAweDZmLCAweDAwLCAweDZlLCAweDAwLCAweDIwLCAweDAwLCAweDZmLCAweDAwLCAweDY2LAorICAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDZlLCAweDAwLCAweDZmLCAweDAwLCAweDUzLCAweDAwLCAweDc5LCAweDAwfX0sCisgezB4MTljNiwgNjQsIHsgMHg3MywgMHgwMCwgMHgyMCwgMHgwMCwgMHg0OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2MywgMHgwMCwgMHgyZSwgMHgwMCwgMHgzNiwgMHgwMywgMHg0YiwgMHgwMCwgMHg2NSwKKyAgMHgwMCwgMHg3OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1NSwgMHgwMCwgMHg1MywKKyAgMHgwMCwgMHg0MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg1MywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2YywKKyAgMHgwMCwgMHgyMCwgMHgwMCwgMHg0MSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg3MCwgMHgwMCwgMHg3NCwgMHgwMCwgMHg2NSwgMHgwMH19LAorIHsweDFhMDYsIDIwLCB7IDB4NzIsIDB4MDAsIDB4MTAsIDB4MDMsIDB4MzAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzAsCisgIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHhmZmZmLAkwLAl7MHgwMH0gfQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTE5X2Z3LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2ExOV9mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMjNjNTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2ExOV9mdy5oCkBAIC0wLDAgKzEsMjg1IEBACisvKiBrZXlzcGFuX3VzYTE5X2Z3LmgKKyAKKwlUaGUgZmlybXdhcmUgY29udGFpbmVkIGhlcmVpbiBhcyBrZXlzcGFuX3VzYTE5X2Z3LmggaXMKKworCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwMQorCQlLZXlzcGFuLCBBIGRpdmlzaW9uIG9mIElubm9TeXMgSW5jb3Jwb3JhdGVkICgiS2V5c3BhbiIpCisJCQorCWFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZCBvcgorCXB1YmxpYyBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGZyb20gd2hpY2ggdGhpcyBmaXJtd2FyZSBpbWFnZSBpcworCWRlcml2ZWQuICBFeGNlcHQgYXMgbm90ZWQgYmVsb3cgdGhpcyBmaXJtd2FyZSBpbWFnZSBtYXkgbm90IGJlIAorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgCisJS2V5c3BhbidzIHByaW9yIHdyaXR0ZW4gY29uc2VudC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKwlQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgCisJaW1hZ2UgYXMgcGFydCBvZiBhIExpbnV4IG9yIG90aGVyIE9wZW4gU291cmNlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuIAorCisJVGhpcyBmaXJtd2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggIAorCUtleXNwYW4gaGFyZHdhcmUuICBEaXN0cmlidXRpb24gYW5kL29yIE1vZGlmaWNhdGlvbiBvZiB0aGUgCisJa2V5c3Bhbi5jIGRyaXZlciB3aGljaCBpbmNsdWRlcyB0aGlzIGZpcm13YXJlLCBpbiB3aG9sZSBvciBpbiAKKwlwYXJ0LCByZXF1aXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3RhdGVtZW50LiIKKyovCisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkIGtleXNwYW5fdXNhMTlfZmlybXdhcmVbXSA9IHsKKyB7MHgwMDI2LCAxMCwgeyAweDEyLCAweDBkLCAweGJmLCAweDEyLCAweDBmLCAweDQ3LCAweDEyLCAweDBkLCAweDZiLCAweDIyfX0sCisgezB4MDAzMywgIDMsIHsgMHgwMiwgMHgwMCwgMHgxYX19LAorIHsweDAwMWEsICA0LCB7IDB4NTMsIDB4ZDgsIDB4ZWYsIDB4MzJ9fSwKKyB7MHgwMDAzLCAxNiwgeyAweDhlLCAweDEzLCAweDhmLCAweDE0LCAweGU1LCAweDE0LCAweDE1LCAweDE0LCAweGFlLCAweDEzLCAweDcwLCAweDAyLCAweDE1LCAweDEzLCAweDRlLCAweDYwfX0sCisgezB4MDAxMywgIDcsIHsgMHgwNSwgMHgxMiwgMHgwZiwgMHgzNiwgMHg4MCwgMHhlZSwgMHgyMn19LAorIHsweDAwMjMsICAzLCB7IDB4MDIsIDB4MDAsIDB4NDZ9fSwKKyB7MHgwMDQ2LCAxNiwgeyAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGMwLCAweGQwLCAweDc1LCAweGQwLCAweDA4fX0sCisgezB4MDA1NiwgMTYsIHsgMHgzMCwgMHg5OSwgMHgwZSwgMHgzMCwgMHgwOCwgMHgwNywgMHhhMiwgMHgwYiwgMHg5MiwgMHg5YiwgMHg4NSwgMHgzNSwgMHg5OSwgMHhjMiwgMHg5OSwgMHhkMn19LAorIHsweDAwNjYsIDE2LCB7IDB4MGYsIDB4MjAsIDB4MGYsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MzEsIDB4YzIsIDB4MGYsIDB4MjAsIDB4MDIsIDB4MDMsIDB4MDIsIDB4MDIsIDB4NTYsIDB4MjB9fSwKKyB7MHgwMDc2LCAxNiwgeyAweDA4LCAweDAzLCAweDAyLCAweDAxLCAweDI3LCAweGU1LCAweDM3LCAweGMzLCAweDk1LCAweDUwLCAweDUwLCAweDNlLCAweDIwLCAweDA5LCAweDM2LCAweDIwfX0sCisgezB4MDA4NiwgMTYsIHsgMHgwNiwgMHgzMywgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHgzMCwgMHhlMywgMHgwMywgMHgyMCwgMHgwZSwgMHgyOSwgMHgzMCwgMHgwZCwgMHgxMiwgMHhhZn19LAorIHsweDAwOTYsIDE2LCB7IDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTJ9fSwKKyB7MHgwMGE2LCAxNiwgeyAweDBiLCAweGFmLCAweDM3LCAweDA1LCAweDM3LCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwfX0sCisgezB4MDBiNiwgMTYsIHsgMHhmNSwgMHgzNSwgMHgwMiwgMHgwNCwgMHgyZiwgMHhjMiwgMHgwOCwgMHgwMiwgMHgwNCwgMHgyZiwgMHg5MCwgMHg3ZiwgMHhjNywgMHhlNCwgMHhmMCwgMHhjMn19LAorIHsweDAwYzYsIDE2LCB7IDB4MDIsIDB4MzAsIDB4MGEsIDB4MGMsIDB4YzIsIDB4MGEsIDB4OTAsIDB4N2YsIDB4YmIsIDB4MDQsIDB4ZjAsIDB4YzIsIDB4MDgsIDB4MDIsIDB4MDQsIDB4MmZ9fSwKKyB7MHgwMGQ2LCAxNiwgeyAweDkwLCAweDdmLCAweGM4LCAweGUwLCAweDMwLCAweGUxLCAweDA1LCAweGMyLCAweDA4LCAweDAyLCAweDA0LCAweDJmLCAweDkwLCAweDdmLCAweGM5LCAweGUwfX0sCisgezB4MDBlNiwgMTYsIHsgMHhmNSwgMHg1MCwgMHg5MCwgMHg3ZCwgMHhjMCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwYSwgMHgyMCwgMHgwOSwgMHgyZCwgMHgyMCwgMHgwNiwgMHgyYSwgMHg5MH19LAorIHsweDAwZjYsIDE2LCB7IDB4N2YsIDB4OWIsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MDMsIDB4MjAsIDB4MGUsIDB4MjAsIDB4MzAsIDB4MGQsIDB4MTEsIDB4OTAsIDB4N2QsIDB4YzEsIDB4ZTB9fSwKKyB7MHgwMDQzLCAgMywgeyAweDAyLCAweDBmLCAweDAwfX0sCisgezB4MDAwMCwgIDMsIHsgMHgwMiwgMHgwYywgMHg2MX19LAorIHsweDAxMDYsIDY0LCB7IDB4MTMsIDB4OTIsIDB4MGIsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4MzUsIDB4NzUsIDB4MzcsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MmYsIDB4NzUsIDB4MzcsIDB4MDIsIDB4OTAsCisgIDB4N2QsIDB4YzEsIDB4ZTAsIDB4ZjUsIDB4MzUsIDB4MDIsIDB4MDQsIDB4MmYsIDB4NzUsIDB4MzcsIDB4MDEsIDB4YzIsIDB4MDgsIDB4MDIsIDB4MDQsIDB4MmYsCisgIDB4ZTUsIDB4MzcsIDB4YzMsIDB4OTUsIDB4NTAsIDB4NTAsIDB4MDMsIDB4MDIsIDB4MDEsIDB4Y2YsIDB4OTAsIDB4N2YsIDB4YzYsIDB4ZTAsIDB4MzAsIDB4ZTEsCisgIDB4MDcsIDB4YzIsIDB4MTAsIDB4YzIsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MmYsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTAsIDB4ZjUsIDB4NTAsIDB4OTB9fSwKKyB7MHgwMTQ2LCA2NCwgeyAweDdlLCAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDBhLCAweDMwLCAweDA5LCAweDAzLCAweDAyLCAweDAxLCAweGM3LCAweDIwLCAweDA2LCAweDcyLCAweDIwLCAweDAwLAorICAweDZmLCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDMwLCAweGUzLCAweDAzLCAweDIwLCAweDBlLCAweDY1LCAweDMwLCAweDBkLCAweDEwLCAweDkwLCAweDdlLAorICAweDQxLCAweGUwLCAweDEzLCAweDkyLCAweDliLCAweGEzLCAweGUwLCAweGY1LCAweDk5LCAweDc1LCAweDM3LCAweDAzLCAweDgwLCAweDA5LCAweDkwLCAweDdlLAorICAweDQxLCAweGUwLCAweGY1LCAweDk5LCAweDc1LCAweDM3LCAweDAyLCAweGU1LCAweDM3LCAweGMzLCAweDk1LCAweDUwLCAweDQwLCAweDE3LCAweDkwfX0sCisgezB4MDE4NiwgNjQsIHsgMHg3ZiwgMHhjNywgMHhlNCwgMHhmMCwgMHhjMiwgMHgwMiwgMHgyMCwgMHgwYSwgMHgwMywgMHgwMiwgMHgwNCwgMHgyZiwgMHhjMiwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhiYiwKKyAgMHgwNCwgMHhmMCwgMHgwMiwgMHgwNCwgMHgyZiwgMHgzMCwgMHgwZCwgMHgxMiwgMHhhZiwgMHgzNywgMHgwNSwgMHgzNywgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwKKyAgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgwYiwgMHhhZiwgMHgzNywgMHgwNSwgMHgzNywgMHg3NCwgMHg0MCwKKyAgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHgzNSwgMHhkMiwgMHgwOCwgMHgwMiwgMHgwNH19LAorIHsweDAxYzYsIDY0LCB7IDB4MmYsIDB4NzUsIDB4MzcsIDB4MDEsIDB4YzIsIDB4MTAsIDB4MDIsIDB4MDQsIDB4MmYsIDB4MzAsIDB4MDksIDB4MDMsIDB4MDIsIDB4MDIsIDB4NTEsIDB4MjAsIDB4MDYsCisgIDB4NzksIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MDMsIDB4MjAsIDB4MGUsIDB4NmYsIDB4MzAsIDB4MGQsIDB4MTIsIDB4YWYsIDB4MzcsCisgIDB4MDUsIDB4MzcsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4OWIsCisgIDB4YWYsIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTB9fSwKKyB7MHgwMjA2LCA2NCwgeyAweGY1LCAweDk5LCAweGU1LCAweDM3LCAweGMzLCAweDk1LCAweDUwLCAweDQwLCAweDE3LCAweDkwLCAweDdmLCAweGM3LCAweGU0LCAweGYwLCAweGMyLCAweDAyLCAweDIwLAorICAweDBhLCAweDAzLCAweDAyLCAweDA0LCAweDJmLCAweGMyLCAweDBhLCAweDkwLCAweDdmLCAweGJiLCAweDA0LCAweGYwLCAweDAyLCAweDA0LCAweDJmLCAweDMwLAorICAweDBkLCAweDEyLCAweGFmLCAweDM3LCAweDA1LCAweDM3LCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLAorICAweGUwLCAweDEzLCAweDkyLCAweDBiLCAweGFmLCAweDM3LCAweDA1LCAweDM3LCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0fX0sCisgezB4MDI0NiwgNjQsIHsgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHgzNSwgMHhkMiwgMHgwOCwgMHgwMiwgMHgwNCwgMHgyZiwgMHhjMiwgMHgxMCwgMHgwMiwgMHgwNCwgMHgyZiwgMHgyMCwKKyAgMHgwOCwgMHgwMywgMHgwMiwgMHgwMywgMHgwOCwgMHhlNSwgMHgzNywgMHhjMywgMHg5NSwgMHg1MCwgMHg1MCwgMHgzZSwgMHgyMCwgMHgwOSwgMHgzNiwgMHgyMCwKKyAgMHgwNiwgMHgzMywgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHgzMCwgMHhlMywgMHgwMywgMHgyMCwgMHgwZSwgMHgyOSwgMHgzMCwgMHgwZCwgMHgxMiwgMHhhZiwKKyAgMHgzNywgMHgwNSwgMHgzNywgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxM319LAorIHsweDAyODYsIDY0LCB7IDB4OTIsIDB4MGIsIDB4YWYsIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsCisgIDB4ZjUsIDB4MzUsIDB4MDIsIDB4MDQsIDB4MmYsIDB4YzIsIDB4MDgsIDB4MDIsIDB4MDQsIDB4MmYsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZTQsIDB4ZjAsIDB4ZDIsCisgIDB4MDIsIDB4MzAsIDB4MGEsIDB4MGMsIDB4YzIsIDB4MGEsIDB4OTAsIDB4N2YsIDB4YmIsIDB4MDQsIDB4ZjAsIDB4YzIsIDB4MDgsIDB4MDIsIDB4MDQsIDB4MmYsCisgIDB4OTAsIDB4N2YsIDB4YzYsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDUsIDB4YzIsIDB4MDgsIDB4MDIsIDB4MDQsIDB4MmYsIDB4OTAsIDB4N2YsIDB4Yzd9fSwKKyB7MHgwMmM2LCA2NCwgeyAweGUwLCAweGY1LCAweDUwLCAweDkwLCAweDdlLCAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDBhLCAweDIwLCAweDA5LCAweDJkLCAweDIwLCAweDA2LCAweDJhLCAweDkwLAorICAweDdmLCAweDliLCAweGUwLCAweDMwLCAweGUzLCAweDAzLCAweDIwLCAweDBlLCAweDIwLCAweDMwLCAweDBkLCAweDExLCAweDkwLCAweDdlLCAweDQxLCAweGUwLAorICAweDEzLCAweDkyLCAweDBiLCAweGEzLCAweGUwLCAweGY1LCAweDM1LCAweDc1LCAweDM3LCAweDAzLCAweDAyLCAweDA0LCAweDJmLCAweDc1LCAweDM3LCAweDAyLAorICAweDkwLCAweDdlLCAweDQxLCAweGUwLCAweGY1LCAweDM1LCAweDAyLCAweDA0LCAweDJmLCAweDc1LCAweDM3LCAweDAxLCAweGMyLCAweDA4LCAweDAyfX0sCisgezB4MDMwNiwgNjQsIHsgMHgwNCwgMHgyZiwgMHhlNSwgMHgzNywgMHhjMywgMHg5NSwgMHg1MCwgMHg1MCwgMHgwMywgMHgwMiwgMHgwMywgMHhiMCwgMHg5MCwgMHg3ZiwgMHhjOCwgMHhlMCwgMHgzMCwKKyAgMHhlMSwgMHgwNywgMHhjMiwgMHgxMCwgMHhjMiwgMHgwMywgMHgwMiwgMHgwNCwgMHgyZiwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHhmNSwgMHg1MCwgMHg5MCwKKyAgMHg3ZCwgMHhjMCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwYSwgMHgzMCwgMHgwOSwgMHgwMywgMHgwMiwgMHgwMywgMHhhOCwgMHgyMCwgMHgwNiwgMHg3MiwgMHgyMCwKKyAgMHgwMCwgMHg2ZiwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHgzMCwgMHhlMywgMHgwMywgMHgyMCwgMHgwZSwgMHg2NSwgMHgzMCwgMHgwZCwgMHgxMH19LAorIHsweDAzNDYsIDY0LCB7IDB4OTAsIDB4N2QsIDB4YzEsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4OWIsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4OTksIDB4NzUsIDB4MzcsIDB4MDMsIDB4ODAsIDB4MDksIDB4OTAsCisgIDB4N2QsIDB4YzEsIDB4ZTAsIDB4ZjUsIDB4OTksIDB4NzUsIDB4MzcsIDB4MDIsIDB4ZTUsIDB4MzcsIDB4YzMsIDB4OTUsIDB4NTAsIDB4NDAsIDB4MTcsIDB4OTAsCisgIDB4N2YsIDB4YzksIDB4ZTQsIDB4ZjAsIDB4ZDIsIDB4MDIsIDB4MjAsIDB4MGEsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MmYsIDB4YzIsIDB4MGEsIDB4OTAsIDB4N2YsCisgIDB4YmIsIDB4MDQsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MmYsIDB4MzAsIDB4MGQsIDB4MTIsIDB4YWYsIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4YzB9fSwKKyB7MHgwMzg2LCA2NCwgeyAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDBiLCAweGFmLCAweDM3LCAweDA1LCAweDM3LCAweDc0LAorICAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDM1LCAweGQyLCAweDA4LCAweDAyLCAweDA0LAorICAweDJmLCAweDc1LCAweDM3LCAweDAxLCAweGMyLCAweDEwLCAweDAyLCAweDA0LCAweDJmLCAweDMwLCAweDA5LCAweDAzLCAweDAyLCAweDA0LCAweDJkLCAweDIwLAorICAweDA2LCAweDc0LCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDMwLCAweGUzLCAweDAzLCAweDIwLCAweDBlLCAweDZhLCAweDMwLCAweDBkLCAweDEyfX0sCisgezB4MDNjNiwgNjQsIHsgMHhhZiwgMHgzNywgMHgwNSwgMHgzNywgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwKKyAgMHg5YiwgMHhhZiwgMHgzNywgMHgwNSwgMHgzNywgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwKKyAgMHhmNSwgMHg5OSwgMHhlNSwgMHgzNywgMHhjMywgMHg5NSwgMHg1MCwgMHg0MCwgMHgxMywgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlNCwgMHhmMCwgMHhkMiwgMHgwMiwKKyAgMHgzMCwgMHgwYSwgMHgzNSwgMHhjMiwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhiYiwgMHgwNCwgMHhmMCwgMHg4MCwgMHgyYywgMHgzMCwgMHgwZCwgMHgxMn19LAorIHsweDA0MDYsIDY0LCB7IDB4YWYsIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsCisgIDB4MGIsIDB4YWYsIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsCisgIDB4ZjUsIDB4MzUsIDB4ZDIsIDB4MDgsIDB4ODAsIDB4MDIsIDB4YzIsIDB4MTAsIDB4ZDIsIDB4MTIsIDB4MjAsIDB4OTgsIDB4MDMsIDB4MDIsIDB4MDUsIDB4NmQsCisgIDB4YzIsIDB4OTgsIDB4MjAsIDB4MDEsIDB4MDMsIDB4MDIsIDB4MDQsIDB4ZGEsIDB4MjAsIDB4MTEsIDB4MjcsIDB4YWYsIDB4MzYsIDB4MDUsIDB4MzZ9fSwKKyB7MHgwNDQ2LCA2NCwgeyAweDc0LCAweDgwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGU1LCAweDk5LCAweGYwLCAweDMwLCAweDBkLCAweDRkLCAweGFmLAorICAweDM2LCAweDA1LCAweDM2LCAweDc0LCAweDgwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGU1LCAweDk4LCAweGYwLAorICAweDgwLCAweDNhLCAweDg1LCAweDk5LCAweDEwLCAweGU1LCAweDEwLCAweGI1LCAweDQ0LCAweDA0LCAweGQyLCAweDA2LCAweDgwLCAweDJlLCAweGU1LCAweDEwLAorICAweGI1LCAweDQzLCAweDA0LCAweGMyLCAweDA2LCAweDgwLCAweDI1LCAweGFmLCAweDM2LCAweDA1LCAweDM2LCAweDc0LCAweDgwLCAweDJmLCAweGY1fX0sCisgezB4MDQ4NiwgNjQsIHsgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHgxMCwgMHhmMCwgMHgzMCwgMHgwZCwgMHgxMSwgMHhhZiwgMHgzNiwgMHgwNSwgMHgzNiwgMHg3NCwKKyAgMHg4MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg5OCwgMHhmMCwgMHhkMiwgMHgwYywgMHhlNSwgMHgzNiwKKyAgMHhjMywgMHg5NSwgMHg0MCwgMHg1MCwgMHgwMywgMHgwMiwgMHgwNSwgMHg2YiwgMHg5MCwgMHg3ZiwgMHhiOCwgMHhlMCwgMHgzMCwgMHhlMSwgMHgxNiwgMHhlNSwKKyAgMHgzNiwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHgwMywgMHgwMiwgMHgwNSwgMHg2YiwgMHgxNSwgMHgzNiwgMHgxNSwgMHgzNiwgMHgwNSwgMHgyYn19LAorIHsweDA0YzYsIDY0LCB7IDB4NDMsIDB4MzMsIDB4MDEsIDB4MDIsIDB4MDUsIDB4NmIsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZTUsIDB4MzYsIDB4ZjAsIDB4NzUsIDB4MzYsIDB4MDAsIDB4YzIsIDB4MDEsCisgIDB4MDIsIDB4MDUsIDB4NmIsIDB4MjAsIDB4MTEsIDB4MjcsIDB4YWYsIDB4MzYsIDB4MDUsIDB4MzYsIDB4NzQsIDB4MDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsCisgIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4OTksIDB4ZjAsIDB4MzAsIDB4MGQsIDB4NGQsIDB4YWYsIDB4MzYsIDB4MDUsIDB4MzYsIDB4NzQsIDB4MDAsCisgIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4OTgsIDB4ZjAsIDB4ODAsIDB4M2EsIDB4ODUsIDB4OTl9fSwKKyB7MHgwNTA2LCA2NCwgeyAweDEwLCAweGU1LCAweDEwLCAweGI1LCAweDQ0LCAweDA0LCAweGQyLCAweDA2LCAweDgwLCAweDJlLCAweGU1LCAweDEwLCAweGI1LCAweDQzLCAweDA0LCAweGMyLCAweDA2LAorICAweDgwLCAweDI1LCAweGFmLCAweDM2LCAweDA1LCAweDM2LCAweDc0LCAweDAwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLAorICAweGU1LCAweDEwLCAweGYwLCAweDMwLCAweDBkLCAweDExLCAweGFmLCAweDM2LCAweDA1LCAweDM2LCAweDc0LCAweDAwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LAorICAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGU1LCAweDk4LCAweGYwLCAweGQyLCAweDBjLCAweGU1LCAweDM2LCAweGMzLCAweDk1LCAweDQwLCAweDQwfX0sCisgezB4MDU0NiwgNjQsIHsgMHgyNCwgMHg5MCwgMHg3ZiwgMHhiNiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgxMiwgMHhlNSwgMHgzNiwgMHhjMywgMHg5NCwgMHg0MCwgMHg0MCwgMHgxNiwgMHgxNSwgMHgzNiwKKyAgMHgxNSwgMHgzNiwgMHgwNSwgMHgyYiwgMHg0MywgMHgzMywgMHgwMSwgMHg4MCwgMHgwYiwgMHg5MCwgMHg3ZiwgMHhiOSwgMHhlNSwgMHgzNiwgMHhmMCwgMHg3NSwKKyAgMHgzNiwgMHgwMCwgMHhkMiwgMHgwMSwgMHhkMiwgMHgxMiwgMHgzMCwgMHgxMiwgMHgwNSwgMHhjMiwgMHgxMiwgMHgwMiwgMHgwMCwgMHg1NiwgMHhkMCwgMHhkMCwKKyAgMHhkMCwgMHg4NiwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHg5MCwgMHg3ZiwgMHhjYSwgMHhlMCwgMHgzMCwgMHhlMX19LAorIHsweDA1ODYsIDY0LCB7IDB4MDMsIDB4MDIsIDB4MDYsIDB4YWIsIDB4ZTQsIDB4ZjUsIDB4MTMsIDB4NzQsIDB4NDAsIDB4MjUsIDB4MTMsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsCisgIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTMsIDB4N2MsIDB4MDAsIDB4N2IsIDB4MDAsIDB4MjQsIDB4MzgsIDB4ZjksIDB4ZWMsIDB4MzQsIDB4MDAsIDB4ZmEsCisgIDB4ZWYsIDB4MTIsIDB4MGQsIDB4MzMsIDB4MDUsIDB4MTMsIDB4ZTUsIDB4MTMsIDB4YjQsIDB4MTgsIDB4ZGIsIDB4ZTUsIDB4MzgsIDB4NjAsIDB4MGMsIDB4NzUsCisgIDB4YzksIDB4MjAsIDB4NzUsIDB4YzgsIDB4MzQsIDB4ODUsIDB4MzksIDB4Y2EsIDB4ODUsIDB4M2EsIDB4Y2IsIDB4ZTUsIDB4M2IsIDB4MTMsIDB4OTJ9fSwKKyB7MHgwNWM2LCA2NCwgeyAweDBkLCAweDkyLCAweDlmLCAweGU1LCAweDNjLCAweDEzLCAweDkyLCAweDBlLCAweGU1LCAweDNkLCAweDEzLCAweDkyLCAweDExLCAweGU1LCAweDNlLCAweDYwLCAweDA5LAorICAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweDgwLCAweDA3LCAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDQ0LCAweDA0LCAweGYwLAorICAweGU1LCAweDNmLCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDU0LCAweDdmLCAweGYwLCAweDgwLCAweDA3LCAweDkwLCAweDdmLCAweDk4LAorICAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweGU1LCAweDQ1LCAweDYwLCAweDBiLCAweGMyLCAweDA5LCAweGMyLCAweDA2LCAweDkwLCAweDdmLCAweDk1fX0sCisgezB4MDYwNiwgNjQsIHsgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHg0NiwgMHg2MCwgMHgwYywgMHhkMiwgMHgwNiwgMHg0MywgMHgzMywgMHgwMSwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhlMCwKKyAgMHg0NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHg0NywgMHg2MCwgMHgwZCwgMHhjMiwgMHhhZiwgMHhjMiwgMHgwOCwgMHhkMiwgMHgwMCwgMHhlNCwgMHhmNSwgMHg1MCwKKyAgMHhmNSwgMHgzNywgMHhkMiwgMHhhZiwgMHhlNSwgMHg0OCwgMHg2MCwgMHgwNSwgMHgzMCwgMHgxMSwgMHgwMiwgMHhkMiwgMHgwNiwgMHhlNSwgMHg0OSwgMHg2MCwKKyAgMHgxNSwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMH19LAorIHsweDA2NDYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4OTgsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4ZTUsIDB4NGEsIDB4NjAsIDB4MGEsIDB4ZDIsIDB4OWMsIDB4YzIsIDB4OTgsIDB4NzUsIDB4MmMsCisgIDB4MDEsIDB4NzUsIDB4MzEsIDB4MWUsIDB4ZTUsIDB4NGIsIDB4NjAsIDB4MDcsIDB4YzIsIDB4OWMsIDB4ZTQsIDB4ZjUsIDB4MzYsIDB4ZjUsIDB4MmMsIDB4ZTUsCisgIDB4NGMsIDB4NjAsIDB4MDMsIDB4ZTQsIDB4ZjUsIDB4MzYsIDB4ZTUsIDB4NGQsIDB4NjAsIDB4MDIsIDB4ZDIsIDB4MDQsIDB4ZTUsIDB4NGUsIDB4NjAsIDB4MGEsCisgIDB4ZTUsIDB4NGEsIDB4NzAsIDB4MDIsIDB4ZjUsIDB4MzEsIDB4ZTUsIDB4NGUsIDB4NDIsIDB4MzMsIDB4ZTUsIDB4NGYsIDB4NjAsIDB4MWYsIDB4OTB9fSwKKyB7MHgwNjg2LCA2NCwgeyAweDdmLCAweGQ3LCAweDc0LCAweDExLCAweGYwLCAweDc0LCAweDMxLCAweGYwLCAweDc0LCAweDEyLCAweGYwLCAweDc0LCAweDMyLCAweGYwLCAweDc0LCAweDEzLCAweGYwLAorICAweDc0LCAweDMzLCAweGYwLCAweDc0LCAweDE0LCAweGYwLCAweDc0LCAweDM0LCAweGYwLCAweGQyLCAweDAyLCAweGQyLCAweDAxLCAweGQyLCAweDA1LCAweGU0LAorICAweDkwLCAweDdmLCAweGNiLCAweGYwLCAweGEyLCAweDA5LCAweGU0LCAweDMzLCAweGZmLCAweDY1LCAweDI5LCAweDYwLCAweDA1LCAweDhmLCAweDI5LCAweDQzLAorICAweDMzLCAweDAxLCAweGEyLCAweDA2LCAweGU0LCAweDMzLCAweGZmLCAweDY1LCAweDJhLCAweDYwLCAweDA1LCAweDhmLCAweDJhLCAweDQzLCAweDMzfX0sCisgezB4MDZjNiwgNjQsIHsgMHgwMSwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHg1NCwgMHgwOCwgMHhiNSwgMHgyNSwgMHgwYSwgMHhlMCwgMHg1NCwgMHgwOCwgMHg2NCwgMHgwOCwgMHhmNSwgMHgyNSwKKyAgMHg0MywgMHgzMywgMHgwMSwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHg1NCwgMHgxMCwgMHhiNSwgMHgyNiwgMHgwYSwgMHhlMCwgMHg1NCwgMHgxMCwgMHg2NCwKKyAgMHgxMCwgMHhmNSwgMHgyNiwgMHg0MywgMHgzMywgMHgwMSwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHg1NCwgMHg0MCwgMHhiNSwgMHgyNywgMHgwYSwgMHhlMCwKKyAgMHg1NCwgMHg0MCwgMHg2NCwgMHg0MCwgMHhmNSwgMHgyNywgMHg0MywgMHgzMywgMHgwMSwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHg1NCwgMHgyMH19LAorIHsweDA3MDYsIDY0LCB7IDB4YjUsIDB4MjgsIDB4MGEsIDB4ZTAsIDB4NTQsIDB4MjAsIDB4NjQsIDB4MjAsIDB4ZjUsIDB4MjgsIDB4NDMsIDB4MzMsIDB4MDEsIDB4MzAsIDB4MDQsIDB4MzUsIDB4YzIsCisgIDB4YWYsIDB4MzAsIDB4MDEsIDB4MTgsIDB4OTAsIDB4N2YsIDB4YjgsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MjcsIDB4ZTUsIDB4MzYsIDB4NjAsIDB4MDksIDB4OTAsCisgIDB4N2YsIDB4YjcsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MzYsIDB4YzIsIDB4MDEsIDB4YzIsIDB4MDQsIDB4ODAsIDB4MTYsIDB4OTAsIDB4N2YsIDB4YjYsIDB4ZTAsCisgIDB4MjAsIDB4ZTEsIDB4MGYsIDB4ZTUsIDB4MzYsIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4YjksIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MzYsIDB4ZDJ9fSwKKyB7MHgwNzQ2LCA2NCwgeyAweDAxLCAweGMyLCAweDA0LCAweGQyLCAweGFmLCAweDIwLCAweDAzLCAweDM3LCAweDMwLCAweDAyLCAweDFiLCAweDkwLCAweDdmLCAweGM2LCAweGUwLCAweDIwLCAweGUxLAorICAweDJkLCAweDkwLCAweDdlLCAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDBhLCAweDc1LCAweDM3LCAweDAxLCAweDkwLCAweDdmLCAweGM3LCAweGUwLCAweGY1LAorICAweDUwLCAweGQyLCAweDAzLCAweDgwLCAweDE5LCAweDkwLCAweDdmLCAweGM4LCAweGUwLCAweDIwLCAweGUxLCAweDEyLCAweDkwLCAweDdkLCAweGMwLCAweGUwLAorICAweDEzLCAweDkyLCAweDBhLCAweDc1LCAweDM3LCAweDAxLCAweDkwLCAweDdmLCAweGM5LCAweGUwLCAweGY1LCAweDUwLCAweGQyLCAweDAzLCAweDIwfX0sCisgezB4MDc4NiwgNjQsIHsgMHgxMCwgMHgzMywgMHgyMCwgMHgwMCwgMHgwNiwgMHhlNSwgMHgzNywgMHg2NSwgMHg1MCwgMHg3MCwgMHgyYSwgMHgzMCwgMHgwMywgMHgxYSwgMHgzMCwgMHgwMiwgMHgwOSwKKyAgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHhjMiwgMHgwMiwgMHg4MCwgMHgwNywgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhmMCwgMHhkMiwgMHgwMiwKKyAgMHhjMiwgMHgwMywgMHhlNCwgMHhmNSwgMHg1MCwgMHhmNSwgMHgzNywgMHgzMCwgMHgwYSwgMHgwYSwgMHhjMiwgMHgwYSwgMHhjMiwgMHgwMCwgMHg5MCwgMHg3ZiwKKyAgMHhiYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHgzMCwgMHgxMCwgMHgwMywgMHgwMiwgMHgwOCwgMHhjNSwgMHgyMCwgMHgwMywgMHgwMywgMHgwMiwgMHgwOH19LAorIHsweDA3YzYsIDY0LCB7IDB4YzUsIDB4MzAsIDB4MGUsIDB4MGEsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MDMsIDB4MDIsIDB4MDgsIDB4YzUsIDB4MzAsIDB4MDYsIDB4MDMsCisgIDB4MDIsIDB4MDgsIDB4YzUsIDB4MzAsIDB4MDksIDB4MDMsIDB4MDIsIDB4MDgsIDB4YzUsIDB4MzAsIDB4MDIsIDB4NjIsIDB4MzAsIDB4MGQsIDB4MTIsIDB4YWYsCisgIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsCisgIDB4MTksIDB4YWYsIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODN9fSwKKyB7MHgwODA2LCA2NCwgeyAweGUwLCAweGY1LCAweDE0LCAweGU1LCAweDM3LCAweGMzLCAweDk1LCAweDUwLCAweDUwLCAweDJhLCAweDMwLCAweDBkLCAweDEyLCAweGFmLCAweDM3LCAweDA1LCAweDM3LAorICAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDBiLCAweGFmLCAweDM3LAorICAweDA1LCAweDM3LCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDM1LCAweGQyLAorICAweDA4LCAweDgwLCAweDZiLCAweGMyLCAweDA4LCAweGU0LCAweDkwLCAweDdmLCAweGM3LCAweGYwLCAweGMyLCAweDAyLCAweDgwLCAweDYwLCAweDMwfX0sCisgezB4MDg0NiwgNjQsIHsgMHgwZCwgMHgxMiwgMHhhZiwgMHgzNywgMHgwNSwgMHgzNywgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwKKyAgMHgxMywgMHg5MiwgMHgxOSwgMHhhZiwgMHgzNywgMHgwNSwgMHgzNywgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwKKyAgMHg4MywgMHhlMCwgMHhmNSwgMHgxNCwgMHhlNSwgMHgzNywgMHhjMywgMHg5NSwgMHg1MCwgMHg1MCwgMHgyYSwgMHgzMCwgMHgwZCwgMHgxMiwgMHhhZiwgMHgzNywKKyAgMHgwNSwgMHgzNywgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5Mn19LAorIHsweDA4ODYsIDY0LCB7IDB4MGIsIDB4YWYsIDB4MzcsIDB4MDUsIDB4MzcsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsCisgIDB4MzUsIDB4ZDIsIDB4MDgsIDB4ODAsIDB4MDksIDB4YzIsIDB4MDgsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZjAsIDB4ZDIsIDB4MDIsIDB4MzAsIDB4MGQsCisgIDB4MDQsIDB4YTIsIDB4MTksIDB4OTIsIDB4OWIsIDB4ZDIsIDB4MTAsIDB4YzIsIDB4YWYsIDB4ODUsIDB4MTQsIDB4OTksIDB4MjAsIDB4MDgsIDB4MGQsIDB4MzAsCisgIDB4MGEsIDB4MGEsIDB4YzIsIDB4MGEsIDB4YzIsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YmIsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4OTB9fSwKKyB7MHgwOGM2LCA2NCwgeyAweDdmLCAweGJjLCAweGUwLCAweDIwLCAweGUxLCAweDUxLCAweGU1LCAweDMzLCAweDYwLCAweDRkLCAweGU1LCAweDMxLCAweDcwLCAweDQ5LCAweGU1LCAweDMzLCAweDMwLAorICAweGUxLCAweDA4LCAweGU0LCAweGY1LCAweDJmLCAweDc1LCAweDMzLCAweDAxLCAweDgwLCAweDBiLCAweGEyLCAweDA1LCAweGU0LCAweDMzLCAweGY1LCAweDJmLAorICAweGMyLCAweDA1LCAweGU0LCAweGY1LCAweDMzLCAweGU0LCAweGY1LCAweDEzLCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDI0LCAweDI1LCAweDEzLAorICAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyLCAweDBjLCAweGVkLCAweGZmLCAweDc0LCAweDAwLCAweDI1LCAweDEzLCAweGY1LCAweDgyfX0sCisgezB4MDkwNiwgNjQsIHsgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxMywgMHhlNSwgMHgxMywgMHhiNCwgMHgwYywgMHhkYiwgMHg5MCwgMHg3ZiwgMHhiZCwKKyAgMHg3NCwgMHgwYywgMHhmMCwgMHg3NSwgMHgzMSwgMHgxMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhlOSwgMHhlMCwgMHgxMiwgMHgwZCwgMHg0NSwgMHgwYSwgMHgwMywKKyAgMHgwMCwgMHgwYSwgMHg3NywgMHgwMSwgMHgwYSwgMHhlMywgMHgwMywgMHgwOSwgMHg0MSwgMHgwNiwgMHgwOSwgMHhmNCwgMHgwOCwgMHgwOSwgMHhlOCwgMHgwOSwKKyAgMHgwOSwgMHhkMCwgMHgwYSwgMHgwOSwgMHhkZiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwYiwgMHgzMiwgMHg5MCwgMHg3ZiwgMHhlYiwgMHhlMCwgMHgyNH19LAorIHsweDA5NDYsIDY0LCB7IDB4ZmUsIDB4NjAsIDB4MTYsIDB4MTQsIDB4NjAsIDB4NTcsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NzYsIDB4NzQsIDB4MGYsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4NzQsCisgIDB4NjQsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4MzksIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MDQsIDB4N2YsIDB4MDIsCisgIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDMsIDB4NzUsIDB4ODIsIDB4YjUsIDB4NzUsIDB4ODMsIDB4MGYsIDB4ZWYsIDB4ZjAsIDB4NzUsIDB4ODIsIDB4YWUsIDB4NzUsCisgIDB4ODMsIDB4MGYsIDB4ZjAsIDB4NzUsIDB4ODIsIDB4YTcsIDB4NzUsIDB4ODMsIDB4MGYsIDB4ZjAsIDB4NzUsIDB4ODIsIDB4YTAsIDB4NzUsIDB4ODN9fSwKKyB7MHgwOTg2LCA2NCwgeyAweDBmLCAweGYwLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDA0LCAweDc1LCAweDgyLCAweDdiLCAweDc1LCAweDgzLCAweDBmLCAweGYwLCAweDc0LCAweDBmLCAweDkwLAorICAweDdmLCAweGQ0LCAweGYwLCAweDc0LCAweDc2LCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDBiLCAweDM5LCAweDkwLCAweDdmLCAweGVhLCAweGUwLAorICAweGZmLCAweDEyLCAweDBlLCAweDQ4LCAweGVhLCAweDQ5LCAweDYwLCAweDBkLCAweGVhLCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweGU5LCAweDkwLCAweDdmLAorICAweGQ1LCAweGYwLCAweDAyLCAweDBiLCAweDM5LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDM5fX0sCisgezB4MDljNiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzOSwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhlNSwgMHgxOSwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzOSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmNSwgMHgxOSwgMHgwMiwgMHgwYiwKKyAgMHgzOSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmNSwgMHgxOCwgMHgxMiwgMHgwZCwgMHg2YiwgMHgwMiwgMHgwYiwgMHgzOSwgMHg5MCwgMHg3ZiwgMHgwMCwKKyAgMHhlNSwgMHgxOCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzOSwgMHg5MCwgMHg3ZiwgMHhlOH19LAorIHsweDBhMDYsIDY0LCB7IDB4ZTAsIDB4MjQsIDB4N2YsIDB4NjAsIDB4MjQsIDB4MTQsIDB4NjAsIDB4MzEsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NWIsIDB4YTIsIDB4MTMsIDB4ZTQsIDB4MzMsIDB4ZmYsCisgIDB4MjUsIDB4ZTAsIDB4ZmYsIDB4YTIsIDB4MTcsIDB4ZTQsIDB4MzMsIDB4NGYsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4MzksIDB4ZTQsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4MzksIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODB9fSwKKyB7MHgwYTQ2LCA2NCwgeyAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LAorICAweDdmLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZkLCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGU0LCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LAorICAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDBiLCAweDM5LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDM5LAorICAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDFkLCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDBiLCAweDM5fX0sCisgezB4MGE4NiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNCwgMHgwMSwgMHgwNSwgMHhjMiwgMHgxMywgMHgwMiwgMHgwYiwgMHgzOSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwKKyAgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzOSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgzOCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwKKyAgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwKKyAgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHg1NCwgMHg4MCwgMHhmZn19LAorIHsweDBhYzYsIDY0LCB7IDB4MTMsIDB4MTMsIDB4MTMsIDB4NTQsIDB4MWYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4OTAsIDB4N2YsIDB4ZDcsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MjAsCisgIDB4ZjAsIDB4ODAsIDB4NWYsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4NTYsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsCisgIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTgsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NGEsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDQsIDB4ZDIsCisgIDB4MTMsIDB4ODAsIDB4M2YsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MzYsIDB4OTAsIDB4N2YsIDB4ZWF9fSwKKyB7MHgwYjA2LCA2NCwgeyAweGUwLCAweDcwLCAweDIwLCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LAorICAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweDc0LCAweDAxLCAweGYwLAorICAweDgwLCAweDEwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDA3LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LAorICAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDIyLCAweDIwLCAweDE1LCAweDAzLCAweDAyLCAweDBifX0sCisgezB4MGI0NiwgNjQsIHsgMHhkMywgMHhlNSwgMHgzMSwgMHg2MCwgMHgwMiwgMHgxNSwgMHgzMSwgMHhlNSwgMHgzNiwgMHg2MCwgMHg0ZiwgMHg2NSwgMHgzNCwgMHg3MCwgMHg0NSwgMHhlNSwgMHgzMiwKKyAgMHhmNCwgMHg2MCwgMHgwMiwgMHgwNSwgMHgzMiwgMHhlNSwgMHgzMiwgMHhjMywgMHg5NSwgMHg0MSwgMHg0MCwgMHgzZCwgMHhjMiwgMHhhZiwgMHgzMCwgMHgwMSwKKyAgMHgxOCwgMHg5MCwgMHg3ZiwgMHhiOCwgMHhlMCwgMHgyMCwgMHhlMSwgMHgyNywgMHg5MCwgMHg3ZiwgMHhiNywgMHhlNSwgMHgzNiwgMHhmMCwgMHhjMiwgMHgwMSwKKyAgMHhlNCwgMHhmNSwgMHgzNiwgMHhmNSwgMHgzMiwgMHhmNSwgMHgzNCwgMHg4MCwgMHgxNiwgMHg5MCwgMHg3ZiwgMHhiNiwgMHhlMCwgMHgyMCwgMHhlMX19LAorIHsweDBiODYsIDY0LCB7IDB4MGYsIDB4OTAsIDB4N2YsIDB4YjksIDB4ZTUsIDB4MzYsIDB4ZjAsIDB4ZDIsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4MzYsIDB4ZjUsIDB4MzIsIDB4ZjUsIDB4MzQsIDB4ZDIsCisgIDB4YWYsIDB4ODAsIDB4MDYsIDB4ODUsIDB4MzYsIDB4MzQsIDB4ZTQsIDB4ZjUsIDB4MzIsIDB4ZTUsIDB4MmMsIDB4NjAsIDB4MmYsIDB4MjAsIDB4MGMsIDB4MDcsCisgIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4MzAsIDB4ZTAsIDB4MGYsIDB4ZTUsIDB4MmQsIDB4NjAsIDB4MDYsIDB4ZTQsIDB4ZjUsIDB4MmQsIDB4NDMsIDB4MzMsCisgIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4MzAsIDB4ODAsIDB4MTQsIDB4ZTUsIDB4MzAsIDB4ZDMsIDB4OTUsIDB4NDIsIDB4NTAsIDB4MGQsIDB4ZTUsIDB4MzB9fSwKKyB7MHgwYmM2LCA2NCwgeyAweGI1LCAweDQyLCAweDA2LCAweDc1LCAweDJkLCAweDAxLCAweDQzLCAweDMzLCAweDAxLCAweDA1LCAweDMwLCAweGMyLCAweDBjLCAweDIyLCAweDc1LCAweDEyLCAweDAxLAorICAweGMyLCAweDE0LCAweGMyLCAweDE4LCAweGMyLCAweDEzLCAweGMyLCAweDE3LCAweGMyLCAweDE1LCAweGMyLCAweDEyLCAweGQyLCAweDE2LCAweGU0LCAweGY1LAorICAweDE4LCAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDkwLCAweDdmLCAweGFlLCAweGUwLCAweGZmLCAweGQzLCAweDkyLCAweDEzLAorICAweGU0LCAweDMzLCAweGZlLCAweGVmLCAweDRlLCAweGYwLCAweGQyLCAweGU4LCAweDQzLCAweGQ4LCAweDIwLCAweDkwLCAweDdmLCAweGRlLCAweDc0fX0sCisgezB4MGMwNiwgNjQsIHsgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhOSwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHhhYSwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhZiwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZSwKKyAgMHhlMCwgMHg0NCwgMHgwZCwgMHhmMCwgMHhkMiwgMHhhZiwgMHhkMiwgMHhiYywgMHhkMiwgMHgxOSwgMHgxMiwgMHgwZSwgMHhkYSwgMHhjMiwgMHgxNCwgMHgzMCwKKyAgMHgxNSwgMHgwMywgMHgxMiwgMHgwNSwgMHg4MCwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHg2NSwgMHgxMSwgMHg2MCwgMHgwOCwgMHhlMCwgMHhmNX19LAorIHsweDBjNDYsIDY0LCB7IDB4MTEsIDB4MTIsIDB4MGIsIDB4NDEsIDB4ODAsIDB4ZWEsIDB4MzAsIDB4MTQsIDB4MDcsIDB4YzIsIDB4MTQsIDB4MTIsIDB4MDksIDB4MWUsIDB4ODAsIDB4ZTAsIDB4MzAsCisgIDB4MTgsIDB4ZGQsIDB4YzIsIDB4MTgsIDB4MTIsIDB4MDAsIDB4MjYsIDB4ODAsIDB4ZDYsIDB4MjIsIDB4NzgsIDB4N2YsIDB4ZTQsIDB4ZjYsIDB4ZDgsIDB4ZmQsCisgIDB4NzUsIDB4ODEsIDB4NTAsIDB4MDIsIDB4MGMsIDB4YTgsIDB4MDIsIDB4MGIsIDB4ZDQsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsCisgIDB4NDAsIDB4MDMsIDB4ZjYsIDB4ODAsIDB4MDEsIDB4ZjIsIDB4MDgsIDB4ZGYsIDB4ZjQsIDB4ODAsIDB4MjksIDB4ZTQsIDB4OTMsIDB4YTMsIDB4Zjh9fSwKKyB7MHgwYzg2LCA2NCwgeyAweDU0LCAweDA3LCAweDI0LCAweDBjLCAweGM4LCAweGMzLCAweDMzLCAweGM0LCAweDU0LCAweDBmLCAweDQ0LCAweDIwLCAweGM4LCAweDgzLCAweDQwLCAweDA0LCAweGY0LAorICAweDU2LCAweDgwLCAweDAxLCAweDQ2LCAweGY2LCAweGRmLCAweGU0LCAweDgwLCAweDBiLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLAorICAweDgwLCAweDkwLCAweDBlLCAweDA0LCAweGU0LCAweDdlLCAweDAxLCAweDkzLCAweDYwLCAweGJjLCAweGEzLCAweGZmLCAweDU0LCAweDNmLCAweDMwLCAweGU1LAorICAweDA5LCAweDU0LCAweDFmLCAweGZlLCAweGU0LCAweDkzLCAweGEzLCAweDYwLCAweDAxLCAweDBlLCAweGNmLCAweDU0LCAweGMwLCAweDI1LCAweGUwfX0sCisgezB4MGNjNiwgNjQsIHsgMHg2MCwgMHhhOCwgMHg0MCwgMHhiOCwgMHhlNCwgMHg5MywgMHhhMywgMHhmYSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHhjOCwgMHhjNSwKKyAgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhmMCwgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwKKyAgMHhkZiwgMHhlOSwgMHhkZSwgMHhlNywgMHg4MCwgMHhiZSwgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwKKyAgMHgwMiwgMHhlNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMiwgMHhlMywgMHgyMiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMn19LAorIHsweDBkMDYsIDY0LCB7IDB4YmIsIDB4MDEsIDB4MGMsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDYsCisgIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4MjIsIDB4ZTUsCisgIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksCisgIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZjAsIDB4MjIsIDB4NTAsIDB4MDIsIDB4ZjcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDEsIDB4ZjMsIDB4MjIsIDB4ZDB9fSwKKyB7MHgwZDQ2LCA2NCwgeyAweDgzLCAweGQwLCAweDgyLCAweGY4LCAweGU0LCAweDkzLCAweDcwLCAweDEyLCAweDc0LCAweDAxLCAweDkzLCAweDcwLCAweDBkLCAweGEzLCAweGEzLCAweDkzLCAweGY4LAorICAweDc0LCAweDAxLCAweDkzLCAweGY1LCAweDgyLCAweDg4LCAweDgzLCAweGU0LCAweDczLCAweDc0LCAweDAyLCAweDkzLCAweDY4LCAweDYwLCAweGVmLCAweGEzLAorICAweGEzLCAweGEzLCAweDgwLCAweGRmLCAweGU0LCAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweDMwLCAweGYwLCAweDkwLAorICAweDdmLCAweDk2LCAweDc0LCAweDEwLCAweGYwLCAweDkwLCAweDdmLCAweDk0LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweDA0fX0sCisgezB4MGQ4NiwgNjQsIHsgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NywgMHg3NCwgMHgyMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NSwgMHg3NCwgMHgwMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwKKyAgMHg4NCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHhjYiwgMHhmMCwgMHg3NSwgMHg5OCwgMHg0MCwgMHg0MywgMHhhOCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHhkZSwgMHg3NCwgMHgxZiwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHhkZiwgMHg3NCwgMHgwZiwgMHhmMCwgMHhkMiwgMHgxNSwgMHgyMiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhmMCwgMHg5MCwgMHg3Zn19LAorIHsweDBkYzYsIDY0LCB7IDB4OTQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTcsIDB4ZTAsCisgIDB4NDQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWQsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsIDB4MjAsIDB4ZjAsCisgIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWQsIDB4ZTAsIDB4NDQsIDB4ZmQsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTcsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjAsIDB4MjIsIDB4MGMsIDB4MjR9fSwKKyB7MHgwZTA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDMwLCAweDAwLCAweDAxLCAweDMzLAorICAweDAxLCAweDAxLCAweDMyLCAweDAwLCAweDAxLCAweDM3LCAweDAwLCAweDAxLCAweDUwLCAweDAwLCAweDAxLCAweDM2LCAweDAwLCAweDAxLCAweDM0LCAweDAwLAorICAweGMxLCAweDA1LCAweGMxLCAweDBjLCAweGMxLCAweDAzLCAweGMxLCAweDBmLCAweGMxLCAweDA0LCAweGMxLCAweDBlLCAweGMxLCAweDExLCAweGMxLCAweDBhLAorICAweGMxLCAweDEwLCAweGMxLCAweDA4LCAweGMxLCAweDA5LCAweGMxLCAweDA2LCAweGMxLCAweDAwLCAweGMxLCAweDBkLCAweGMxLCAweDgxLCAweGMxfX0sCisgezB4MGU0NiwgNjQsIHsgMHg4MiwgMHgwMCwgMHg4ZiwgMHgxMywgMHhlNCwgMHhmNSwgMHgxNCwgMHg3NSwgMHgxNSwgMHhmZiwgMHg3NSwgMHgxNiwgMHgwZiwgMHg3NSwgMHgxNywgMHhiOSwgMHhhYiwKKyAgMHgxNSwgMHhhYSwgMHgxNiwgMHhhOSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMSwgMHgxMiwgMHgwZCwgMHgwNiwgMHhiNCwgMHgwMywgMHgxZCwgMHhhZiwgMHgxNCwKKyAgMHgwNSwgMHgxNCwgMHhlZiwgMHhiNSwgMHgxMywgMHgwMSwgMHgyMiwgMHgxMiwgMHgwYywgMHhlZCwgMHg3ZSwgMHgwMCwgMHgyOSwgMHhmZiwgMHhlZSwgMHgzYSwKKyAgMHhhOSwgMHgwNywgMHg3NSwgMHgxNSwgMHhmZiwgMHhmNSwgMHgxNiwgMHg4OSwgMHgxNywgMHg4MCwgMHhkNCwgMHg3YiwgMHgwMCwgMHg3YSwgMHgwMH19LAorIHsweDBlODYsIDY0LCB7IDB4NzksIDB4MDAsIDB4MjIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsCisgIDB4MDAsIDB4OTAsIDB4N2YsIDB4YzQsIDB4ZTQsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZDAsCisgIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsCisgIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4ZDIsIDB4MTQsIDB4NTMsIDB4OTF9fSwKKyB7MHgwZWM2LCA2NCwgeyAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDAxLCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLAorICAweGQwLCAweGUwLCAweDMyLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweGUwLCAweDQ0LCAweDA4LCAweGYwLCAweDMwLCAweDE5LAorICAweDA0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDdmLCAweGY0LCAweDdlLCAweDAxLCAweDEyLCAweDAwLCAweDAzLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLAorICAweDU0LCAweGY3LCAweGYwLCAweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweDIyLCAweDAwLCAweDAyLCAweDBlLCAweGIzLCAweDAwLCAweDAyLCAweDBmfX0sCisgezB4MGYwNiwgNjQsIHsgMHgwNCwgMHgwMCwgMHgwMiwgMHgwZSwgMHg4OSwgMHgwMCwgMHgwMiwgMHgwZiwgMHgwZiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwKKyAgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhkMiwgMHgxOCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwKKyAgMHgwOCwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHg3NCwKKyAgMHgwMCwgMHhmNSwgMHg4NiwgMHg5MCwgMHhmZCwgMHhhNSwgMHg3YywgMHgwNSwgMHhhMywgMHhlNSwgMHg4MiwgMHg0NSwgMHg4MywgMHg3MCwgMHhmOX19LAorIHsweDBmNDYsIDY0LCB7IDB4MjIsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4NDMsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MTAsCisgIDB4MDEsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4Y2QsIDB4MDYsIDB4MDcsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MDksCisgIDB4MDIsIDB4NDMsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZmYsIDB4MDB9fSwKKyB7MHgwZjg2LCA2NCwgeyAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAxLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAyLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LAorICAweDA1LCAweDAzLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDgxLCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDgyLAorICAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDgzLCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDg0LCAweDAyLCAweDQwLAorICAweDAwLCAweDAxLCAweDA0LCAweDAzLCAweDA5LCAweDA0LCAweDEwLCAweDAzLCAweDRiLCAweDAwLCAweDY1LCAweDAwLCAweDc5LCAweDAwLCAweDczfX0sCisgezB4MGZjNiwgMjMsIHsgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHgwZSwgMHgwMywgMHg1MywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwKKyAgMHg2MSwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweGZmZmYsCTAsCXsweDAwfSB9Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMTlxaV9mdy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMTlxaV9mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMjY0NzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2ExOXFpX2Z3LmgKQEAgLTAsMCArMSwyODQgQEAKKy8qIGtleXNwYW5fdXNhMTlxaV9mdy5oCisgCisJVGhlIGZpcm13YXJlIGNvbnRhaW5lZCBoZXJlaW4gYXMga2V5c3BuX3VzYTE5cWlfZncuaCBpcworCisJCUNvcHlyaWdodCAoQykgMTk5OS0yMDAxCisJCUtleXNwYW4sIEEgZGl2aXNpb24gb2YgSW5ub1N5cyBJbmNvcnBvcmF0ZWQgKCJLZXlzcGFuIikKKwkJCisJYXMgYW4gdW5wdWJsaXNoZWQgd29yay4gVGhpcyBub3RpY2UgZG9lcyBub3QgaW1wbHkgdW5yZXN0cmljdGVkIG9yCisJcHVibGljIGFjY2VzcyB0byB0aGUgc291cmNlIGNvZGUgZnJvbSB3aGljaCB0aGlzIGZpcm13YXJlIGltYWdlIGlzCisJZGVyaXZlZC4gIEV4Y2VwdCBhcyBub3RlZCBiZWxvdyB0aGlzIGZpcm13YXJlIGltYWdlIG1heSBub3QgYmUgCisJcmVwcm9kdWNlZCwgdXNlZCwgc29sZCBvciB0cmFuc2ZlcnJlZCB0byBhbnkgdGhpcmQgcGFydHkgd2l0aG91dCAKKwlLZXlzcGFuJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworCVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSAKKwlpbWFnZSBhcyBwYXJ0IG9mIGEgTGludXggb3Igb3RoZXIgT3BlbiBTb3VyY2Ugb3BlcmF0aW5nIHN5c3RlbSBrZXJuZWwgCisJaW4gdGV4dCBvciBiaW5hcnkgZm9ybSBhcyByZXF1aXJlZC4gCisKKwlUaGlzIGZpcm13YXJlIG1heSBub3QgYmUgbW9kaWZpZWQgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aCAgCisJS2V5c3BhbiBoYXJkd2FyZS4gIERpc3RyaWJ1dGlvbiBhbmQvb3IgTW9kaWZpY2F0aW9uIG9mIHRoZSAKKwlrZXlzcGFuLmMgZHJpdmVyIHdoaWNoIGluY2x1ZGVzIHRoaXMgZmlybXdhcmUsIGluIHdob2xlIG9yIGluIAorCXBhcnQsIHJlcXVpcmVzIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBzdGF0ZW1lbnQuIgorCisqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGV6dXNiX2hleF9yZWNvcmQga2V5c3Bhbl91c2ExOXFpX2Zpcm13YXJlW10gPSB7CisgezB4MDAzMywgIDMsIHsgMHgwMiwgMHgwMCwgMHgxYX19LAorIHsweDAwMWEsICA0LCB7IDB4NTMsIDB4ZDgsIDB4ZWYsIDB4MzJ9fSwKKyB7MHgwMDAzLCAxNiwgeyAweDhlLCAweDExLCAweDhmLCAweDEyLCAweGU1LCAweDEyLCAweDE1LCAweDEyLCAweGFlLCAweDExLCAweDcwLCAweDAyLCAweDE1LCAweDExLCAweDRlLCAweDYwfX0sCisgezB4MDAxMywgIDcsIHsgMHgwNSwgMHgxMiwgMHgwZiwgMHg4NCwgMHg4MCwgMHhlZSwgMHgyMn19LAorIHsweDAwMjMsICAzLCB7IDB4MDIsIDB4MDAsIDB4NDZ9fSwKKyB7MHgwMDQ2LCAxNiwgeyAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGMwLCAweGQwLCAweDc1LCAweGQwLCAweDA4fX0sCisgezB4MDA1NiwgMTYsIHsgMHgzMCwgMHg5OSwgMHgwZSwgMHgzMCwgMHgwYiwgMHgwNywgMHhhMiwgMHgwZSwgMHg5MiwgMHg5YiwgMHg4NSwgMHgzNiwgMHg5OSwgMHhjMiwgMHg5OSwgMHhkMn19LAorIHsweDAwNjYsIDE2LCB7IDB4MTIsIDB4MjAsIDB4MTIsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MWUsIDB4YzIsIDB4MTIsIDB4MjAsIDB4MDMsIDB4MDMsIDB4MDIsIDB4MDIsIDB4NGUsIDB4MjB9fSwKKyB7MHgwMDc2LCAxNiwgeyAweDBiLCAweDAzLCAweDAyLCAweDAxLCAweDI2LCAweGU1LCAweDNhLCAweGMzLCAweDk1LCAweDUzLCAweDUwLCAweDNjLCAweDIwLCAweDBjLCAweDM0LCAweDIwfX0sCisgezB4MDA4NiwgMTYsIHsgMHgwOSwgMHgzMSwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHg1NSwgMHgzOCwgMHg3MCwgMHgyOSwgMHgzMCwgMHgxMCwgMHgxMiwgMHhhZiwgMHgzYSwgMHgwNX19LAorIHsweDAwOTYsIDE2LCB7IDB4M2EsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGUsIDB4YWZ9fSwKKyB7MHgwMGE2LCAxNiwgeyAweDNhLCAweDA1LCAweDNhLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDM2fX0sCisgezB4MDBiNiwgMTYsIHsgMHgwMiwgMHgwNCwgMHgxYywgMHhjMiwgMHgwYiwgMHgwMiwgMHgwNCwgMHgxYywgMHg5MCwgMHg3ZiwgMHhjNywgMHhlNCwgMHhmMCwgMHhjMiwgMHgwMywgMHgzMH19LAorIHsweDAwYzYsIDE2LCB7IDB4MGQsIDB4MGMsIDB4YzIsIDB4MGQsIDB4OTAsIDB4N2YsIDB4YmIsIDB4MDQsIDB4ZjAsIDB4YzIsIDB4MGIsIDB4MDIsIDB4MDQsIDB4MWMsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwMGQ2LCAxNiwgeyAweGM4LCAweGUwLCAweDMwLCAweGUxLCAweDA1LCAweGMyLCAweDBiLCAweDAyLCAweDA0LCAweDFjLCAweDkwLCAweDdmLCAweGM5LCAweGUwLCAweGY1LCAweDUzfX0sCisgezB4MDBlNiwgMTYsIHsgMHg5MCwgMHg3ZCwgMHhjMCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwZCwgMHg3NSwgMHgxNiwgMHhmZiwgMHgyMCwgMHgwYywgMHgyYiwgMHgyMCwgMHgwOSwgMHgyOH19LAorIHsweDAwZjYsIDE2LCB7IDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTUsIDB4MzgsIDB4NzAsIDB4MjAsIDB4MzAsIDB4MTAsIDB4MTEsIDB4OTAsIDB4N2QsIDB4YzEsIDB4ZTAsIDB4MTN9fSwKKyB7MHgwMDQzLCAgMywgeyAweDAyLCAweDBlLCAweDAwfX0sCisgezB4MDAwMCwgIDMsIHsgMHgwMiwgMHgwMCwgMHgyNn19LAorIHsweDAwMjYsIDEyLCB7IDB4NzgsIDB4N2YsIDB4ZTQsIDB4ZjYsIDB4ZDgsIDB4ZmQsIDB4NzUsIDB4ODEsIDB4NTQsIDB4MDIsIDB4MGIsIDB4Mjh9fSwKKyB7MHgwMTA2LCA2NCwgeyAweDkyLCAweDBlLCAweGEzLCAweGUwLCAweGY1LCAweDM2LCAweDc1LCAweDNhLCAweDAzLCAweDAyLCAweDA0LCAweDFjLCAweDc1LCAweDNhLCAweDAyLCAweDkwLCAweDdkLAorICAweGMxLCAweGUwLCAweGY1LCAweDM2LCAweDAyLCAweDA0LCAweDFjLCAweDc1LCAweDNhLCAweDAxLCAweGMyLCAweDBiLCAweDAyLCAweDA0LCAweDFjLCAweGU1LAorICAweDNhLCAweGMzLCAweDk1LCAweDUzLCAweDUwLCAweDAzLCAweDAyLCAweDAxLCAweGM5LCAweDkwLCAweDdmLCAweGM2LCAweGUwLCAweDMwLCAweGUxLCAweDA3LAorICAweGMyLCAweDE0LCAweGMyLCAweDA1LCAweDAyLCAweDA0LCAweDFjLCAweDkwLCAweDdmLCAweGM3LCAweGUwLCAweGY1LCAweDUzLCAweDkwLCAweDdlfX0sCisgezB4MDE0NiwgNjQsIHsgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwZCwgMHg3NSwgMHgxNiwgMHhmZiwgMHgyMCwgMHgwYywgMHg3MCwgMHgyMCwgMHgwOSwgMHg2ZCwgMHg5MCwgMHg3ZiwgMHg5YiwKKyAgMHhlMCwgMHg1NSwgMHgzOCwgMHg3MCwgMHg2NSwgMHgzMCwgMHgxMCwgMHgxMCwgMHg5MCwgMHg3ZSwgMHg0MSwgMHhlMCwgMHgxMywgMHg5MiwgMHg5YiwgMHhhMywKKyAgMHhlMCwgMHhmNSwgMHg5OSwgMHg3NSwgMHgzYSwgMHgwMywgMHg4MCwgMHgwOSwgMHg5MCwgMHg3ZSwgMHg0MSwgMHhlMCwgMHhmNSwgMHg5OSwgMHg3NSwgMHgzYSwKKyAgMHgwMiwgMHhlNSwgMHgzYSwgMHhjMywgMHg5NSwgMHg1MywgMHg0MCwgMHgxNywgMHg5MCwgMHg3ZiwgMHhjNywgMHhlNCwgMHhmMCwgMHhjMiwgMHgwM319LAorIHsweDAxODYsIDY0LCB7IDB4MjAsIDB4MGQsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MWMsIDB4YzIsIDB4MGQsIDB4OTAsIDB4N2YsIDB4YmIsIDB4MDQsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MWMsIDB4MzAsCisgIDB4MTAsIDB4MTIsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsCisgIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGUsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsCisgIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MzYsIDB4ZDIsIDB4MGIsIDB4MDIsIDB4MDQsIDB4MWMsIDB4NzUsIDB4M2EsIDB4MDEsIDB4YzIsIDB4MTR9fSwKKyB7MHgwMWM2LCA2NCwgeyAweDAyLCAweDA0LCAweDFjLCAweDMwLCAweDBjLCAweDAzLCAweDAyLCAweDAyLCAweDQ5LCAweDIwLCAweDA5LCAweDc3LCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDU1LAorICAweDM4LCAweDcwLCAweDZmLCAweDMwLCAweDEwLCAweDEyLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LAorICAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDliLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweDc0LCAweDQwLCAweDJmLCAweGY1LAorICAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDk5LCAweGU1LCAweDNhLCAweGMzLCAweDk1LCAweDUzLCAweDQwfX0sCisgezB4MDIwNiwgNjQsIHsgMHgxNywgMHg5MCwgMHg3ZiwgMHhjNywgMHhlNCwgMHhmMCwgMHhjMiwgMHgwMywgMHgyMCwgMHgwZCwgMHgwMywgMHgwMiwgMHgwNCwgMHgxYywgMHhjMiwgMHgwZCwgMHg5MCwKKyAgMHg3ZiwgMHhiYiwgMHgwNCwgMHhmMCwgMHgwMiwgMHgwNCwgMHgxYywgMHgzMCwgMHgxMCwgMHgxMiwgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYSwgMHg3NCwgMHg0MCwKKyAgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgwZSwgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYSwKKyAgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHgzNiwgMHhkMiwgMHgwYn19LAorIHsweDAyNDYsIDY0LCB7IDB4MDIsIDB4MDQsIDB4MWMsIDB4YzIsIDB4MTQsIDB4MDIsIDB4MDQsIDB4MWMsIDB4MjAsIDB4MGIsIDB4MDMsIDB4MDIsIDB4MDIsIDB4ZmYsIDB4ZTUsIDB4M2EsIDB4YzMsCisgIDB4OTUsIDB4NTMsIDB4NTAsIDB4M2MsIDB4MjAsIDB4MGMsIDB4MzQsIDB4MjAsIDB4MDksIDB4MzEsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTUsIDB4MzgsCisgIDB4NzAsIDB4MjksIDB4MzAsIDB4MTAsIDB4MTIsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsCisgIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGUsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjV9fSwKKyB7MHgwMjg2LCA2NCwgeyAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDM2LCAweDAyLCAweDA0LCAweDFjLCAweGMyLCAweDBiLCAweDAyLCAweDA0LCAweDFjLAorICAweDkwLCAweDdmLCAweGM5LCAweGU0LCAweGYwLCAweGQyLCAweDAzLCAweDMwLCAweDBkLCAweDBjLCAweGMyLCAweDBkLCAweDkwLCAweDdmLCAweGJiLCAweDA0LAorICAweGYwLCAweGMyLCAweDBiLCAweDAyLCAweDA0LCAweDFjLCAweDkwLCAweDdmLCAweGM2LCAweGUwLCAweDMwLCAweGUxLCAweDA1LCAweGMyLCAweDBiLCAweDAyLAorICAweDA0LCAweDFjLCAweDkwLCAweDdmLCAweGM3LCAweGUwLCAweGY1LCAweDUzLCAweDkwLCAweDdlLCAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDBkfX0sCisgezB4MDJjNiwgNjQsIHsgMHg3NSwgMHgxNiwgMHhmZiwgMHgyMCwgMHgwYywgMHgyYiwgMHgyMCwgMHgwOSwgMHgyOCwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHg1NSwgMHgzOCwgMHg3MCwgMHgyMCwKKyAgMHgzMCwgMHgxMCwgMHgxMSwgMHg5MCwgMHg3ZSwgMHg0MSwgMHhlMCwgMHgxMywgMHg5MiwgMHgwZSwgMHhhMywgMHhlMCwgMHhmNSwgMHgzNiwgMHg3NSwgMHgzYSwKKyAgMHgwMywgMHgwMiwgMHgwNCwgMHgxYywgMHg3NSwgMHgzYSwgMHgwMiwgMHg5MCwgMHg3ZSwgMHg0MSwgMHhlMCwgMHhmNSwgMHgzNiwgMHgwMiwgMHgwNCwgMHgxYywKKyAgMHg3NSwgMHgzYSwgMHgwMSwgMHhjMiwgMHgwYiwgMHgwMiwgMHgwNCwgMHgxYywgMHhlNSwgMHgzYSwgMHhjMywgMHg5NSwgMHg1MywgMHg1MCwgMHgwM319LAorIHsweDAzMDYsIDY0LCB7IDB4MDIsIDB4MDMsIDB4YTIsIDB4OTAsIDB4N2YsIDB4YzgsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDcsIDB4YzIsIDB4MTQsIDB4YzIsIDB4MDUsIDB4MDIsIDB4MDQsIDB4MWMsCisgIDB4OTAsIDB4N2YsIDB4YzksIDB4ZTAsIDB4ZjUsIDB4NTMsIDB4OTAsIDB4N2QsIDB4YzAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGQsIDB4NzUsIDB4MTYsIDB4ZmYsCisgIDB4MjAsIDB4MGMsIDB4NzAsIDB4MjAsIDB4MDksIDB4NmQsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4NTUsIDB4MzgsIDB4NzAsIDB4NjUsIDB4MzAsIDB4MTAsCisgIDB4MTAsIDB4OTAsIDB4N2QsIDB4YzEsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4OWIsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4OTksIDB4NzUsIDB4M2EsIDB4MDN9fSwKKyB7MHgwMzQ2LCA2NCwgeyAweDgwLCAweDA5LCAweDkwLCAweDdkLCAweGMxLCAweGUwLCAweGY1LCAweDk5LCAweDc1LCAweDNhLCAweDAyLCAweGU1LCAweDNhLCAweGMzLCAweDk1LCAweDUzLCAweDQwLAorICAweDE3LCAweDkwLCAweDdmLCAweGM5LCAweGU0LCAweGYwLCAweGQyLCAweDAzLCAweDIwLCAweDBkLCAweDAzLCAweDAyLCAweDA0LCAweDFjLCAweGMyLCAweDBkLAorICAweDkwLCAweDdmLCAweGJiLCAweDA0LCAweGYwLCAweDAyLCAweDA0LCAweDFjLCAweDMwLCAweDEwLCAweDEyLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweDc0LAorICAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweGFmLCAweDNhfX0sCisgezB4MDM4NiwgNjQsIHsgMHgwNSwgMHgzYSwgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHgzNiwgMHhkMiwgMHgwYiwKKyAgMHgwMiwgMHgwNCwgMHgxYywgMHg3NSwgMHgzYSwgMHgwMSwgMHhjMiwgMHgxNCwgMHgwMiwgMHgwNCwgMHgxYywgMHgyMCwgMHgwYywgMHg3NSwgMHgyMCwgMHgwOSwKKyAgMHg3MiwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHg1NSwgMHgzOCwgMHg3MCwgMHg2YSwgMHgzMCwgMHgxMCwgMHgxMiwgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYSwKKyAgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHg5YiwgMHhhZn19LAorIHsweDAzYzYsIDY0LCB7IDB4M2EsIDB4MDUsIDB4M2EsIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4OTksIDB4ZTUsCisgIDB4M2EsIDB4YzMsIDB4OTUsIDB4NTMsIDB4NDAsIDB4MTMsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZTQsIDB4ZjAsIDB4ZDIsIDB4MDMsIDB4MzAsIDB4MGQsIDB4MzUsCisgIDB4YzIsIDB4MGQsIDB4OTAsIDB4N2YsIDB4YmIsIDB4MDQsIDB4ZjAsIDB4ODAsIDB4MmMsIDB4MzAsIDB4MTAsIDB4MTIsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsCisgIDB4NzQsIDB4YzAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGUsIDB4YWZ9fSwKKyB7MHgwNDA2LCA2NCwgeyAweDNhLCAweDA1LCAweDNhLCAweDc0LCAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDM2LCAweGQyLAorICAweDBiLCAweDgwLCAweDAyLCAweGMyLCAweDE0LCAweGQyLCAweDAxLCAweDIwLCAweDk4LCAweDAzLCAweDAyLCAweDA1LCAweDVhLCAweGMyLCAweDk4LCAweDIwLAorICAweDAyLCAweDAzLCAweDAyLCAweDA0LCAweGM3LCAweDIwLCAweDE2LCAweDI3LCAweGFmLCAweDM5LCAweDA1LCAweDM5LCAweDc0LCAweDgwLCAweDJmLCAweGY1LAorICAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGU1LCAweDk5LCAweGYwLCAweDMwLCAweDEwLCAweDRkLCAweGFmLCAweDM5LCAweDA1fX0sCisgezB4MDQ0NiwgNjQsIHsgMHgzOSwgMHg3NCwgMHg4MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg5OCwgMHhmMCwgMHg4MCwgMHgzYSwgMHg4NSwKKyAgMHg5OSwgMHgxMCwgMHhlNSwgMHgxMCwgMHhiNSwgMHg0NywgMHgwNCwgMHhkMiwgMHgwOSwgMHg4MCwgMHgyZSwgMHhlNSwgMHgxMCwgMHhiNSwgMHg0NiwgMHgwNCwKKyAgMHhjMiwgMHgwOSwgMHg4MCwgMHgyNSwgMHhhZiwgMHgzOSwgMHgwNSwgMHgzOSwgMHg3NCwgMHg4MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwKKyAgMHhmNSwgMHg4MywgMHhlNSwgMHgxMCwgMHhmMCwgMHgzMCwgMHgxMCwgMHgxMSwgMHhhZiwgMHgzOSwgMHgwNSwgMHgzOSwgMHg3NCwgMHg4MCwgMHgyZn19LAorIHsweDA0ODYsIDY0LCB7IDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4OTgsIDB4ZjAsIDB4ZDIsIDB4MGYsIDB4ZTUsIDB4MzksIDB4YzMsIDB4OTUsIDB4NDMsCisgIDB4NTAsIDB4MDMsIDB4MDIsIDB4MDUsIDB4NTgsIDB4OTAsIDB4N2YsIDB4YjgsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MTYsIDB4ZTUsIDB4MzksIDB4YzMsIDB4OTQsCisgIDB4NDAsIDB4NTAsIDB4MDMsIDB4MDIsIDB4MDUsIDB4NTgsIDB4MTUsIDB4MzksIDB4MTUsIDB4MzksIDB4MDUsIDB4MmIsIDB4NDMsIDB4MzQsIDB4MDEsIDB4MDIsCisgIDB4MDUsIDB4NTgsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZTUsIDB4MzksIDB4ZjAsIDB4NzUsIDB4MzksIDB4MDAsIDB4YzIsIDB4MDIsIDB4MDIsIDB4MDV9fSwKKyB7MHgwNGM2LCA2NCwgeyAweDU4LCAweDIwLCAweDE2LCAweDI3LCAweGFmLCAweDM5LCAweDA1LCAweDM5LCAweDc0LCAweDAwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LAorICAweDgzLCAweGU1LCAweDk5LCAweGYwLCAweDMwLCAweDEwLCAweDRkLCAweGFmLCAweDM5LCAweDA1LCAweDM5LCAweDc0LCAweDAwLCAweDJmLCAweGY1LCAweDgyLAorICAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGU1LCAweDk4LCAweGYwLCAweDgwLCAweDNhLCAweDg1LCAweDk5LCAweDEwLCAweGU1LCAweDEwLCAweGI1LAorICAweDQ3LCAweDA0LCAweGQyLCAweDA5LCAweDgwLCAweDJlLCAweGU1LCAweDEwLCAweGI1LCAweDQ2LCAweDA0LCAweGMyLCAweDA5LCAweDgwLCAweDI1fX0sCisgezB4MDUwNiwgNjQsIHsgMHhhZiwgMHgzOSwgMHgwNSwgMHgzOSwgMHg3NCwgMHgwMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHgxMCwgMHhmMCwKKyAgMHgzMCwgMHgxMCwgMHgxMSwgMHhhZiwgMHgzOSwgMHgwNSwgMHgzOSwgMHg3NCwgMHgwMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwKKyAgMHg4MywgMHhlNSwgMHg5OCwgMHhmMCwgMHhkMiwgMHgwZiwgMHhlNSwgMHgzOSwgMHhjMywgMHg5NSwgMHg0MywgMHg0MCwgMHgyNCwgMHg5MCwgMHg3ZiwgMHhiNiwKKyAgMHhlMCwgMHgzMCwgMHhlMSwgMHgxMiwgMHhlNSwgMHgzOSwgMHhjMywgMHg5NCwgMHg0MCwgMHg0MCwgMHgxNiwgMHgxNSwgMHgzOSwgMHgxNSwgMHgzOX19LAorIHsweDA1NDYsIDY0LCB7IDB4MDUsIDB4MmIsIDB4NDMsIDB4MzQsIDB4MDEsIDB4ODAsIDB4MGIsIDB4OTAsIDB4N2YsIDB4YjksIDB4ZTUsIDB4MzksIDB4ZjAsIDB4NzUsIDB4MzksIDB4MDAsIDB4ZDIsCisgIDB4MDIsIDB4ZDIsIDB4MDEsIDB4MzAsIDB4MDEsIDB4MDUsIDB4YzIsIDB4MDEsIDB4MDIsIDB4MDAsIDB4NTYsIDB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ODYsIDB4ZDAsCisgIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4OTAsIDB4N2YsIDB4YmMsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4NTEsIDB4ZTUsIDB4MzQsIDB4NjAsCisgIDB4NGQsIDB4ZTUsIDB4MzEsIDB4NzAsIDB4NDksIDB4ZTUsIDB4MzQsIDB4MzAsIDB4ZTEsIDB4MDgsIDB4ZTQsIDB4ZjUsIDB4MmYsIDB4NzUsIDB4MzR9fSwKKyB7MHgwNTg2LCA2NCwgeyAweDAxLCAweDgwLCAweDBiLCAweGEyLCAweDA4LCAweGU0LCAweDMzLCAweGY1LCAweDJmLCAweGMyLCAweDA4LCAweGU0LCAweGY1LCAweDM0LCAweGU0LCAweGY1LCAweDExLAorICAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDI0LCAweDI1LCAweDExLCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyLCAweDBkLCAweDA2LAorICAweGZmLCAweDc0LCAweDAwLCAweDI1LCAweDExLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDExLAorICAweGU1LCAweDExLCAweGI0LCAweDBjLCAweGRiLCAweDkwLCAweDdmLCAweGJkLCAweDc0LCAweDBjLCAweGYwLCAweDc1LCAweDMxLCAweDEwLCAweDkwfX0sCisgezB4MDVjNiwgNjQsIHsgMHg3ZiwgMHhjYSwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwNiwgMHhmMywgMHhlNCwgMHhmNSwgMHgxMSwgMHg3NCwgMHg0MCwgMHgyNSwgMHgxMSwgMHhmNSwKKyAgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgxMSwgMHg3YywgMHgwMCwgMHg3YiwgMHgwMCwgMHgyNCwgMHgzYiwKKyAgMHhmOSwgMHhlYywgMHgzNCwgMHgwMCwgMHhmYSwgMHhlZiwgMHgxMiwgMHgwZCwgMHgxZiwgMHgwNSwgMHgxMSwgMHhlNSwgMHgxMSwgMHhiNCwgMHgxOCwgMHhkYiwKKyAgMHhlNSwgMHgzYiwgMHg2MCwgMHgxMSwgMHg3NSwgMHhjOSwgMHgyMCwgMHg3NSwgMHhjOCwgMHgzNiwgMHg4NSwgMHgzYywgMHhjYSwgMHg4NSwgMHgzZH19LAorIHsweDA2MDYsIDY0LCB7IDB4Y2IsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OWYsIDB4ZjAsIDB4ZTUsIDB4M2UsIDB4MTMsIDB4OTIsIDB4MTAsIDB4OTIsIDB4OWYsIDB4ODUsIDB4M2YsIDB4MzgsIDB4ZTUsCisgIDB4NDAsIDB4MTMsIDB4OTIsIDB4MTYsIDB4ZTUsIDB4NDEsIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4ODAsCisgIDB4MDcsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZTAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4ZTUsIDB4NDIsIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZTAsCisgIDB4NTQsIDB4N2YsIDB4ZjAsIDB4ODAsIDB4MDcsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ZTUsIDB4NDgsIDB4NjB9fSwKKyB7MHgwNjQ2LCA2NCwgeyAweDBiLCAweGMyLCAweDBjLCAweGMyLCAweDA5LCAweDkwLCAweDdmLCAweDk1LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGU1LCAweDQ5LCAweDYwLCAweDBjLCAweGQyLAorICAweDA5LCAweDQzLCAweDM0LCAweDAxLCAweDkwLCAweDdmLCAweDk1LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGU1LCAweDRhLCAweDYwLCAweDBkLCAweGMyLAorICAweGFmLCAweGMyLCAweDBiLCAweGQyLCAweDAwLCAweGU0LCAweGY1LCAweDUzLCAweGY1LCAweDNhLCAweGQyLCAweGFmLCAweGU1LCAweDRiLCAweDYwLCAweDA1LAorICAweDMwLCAweDE2LCAweDAyLCAweGQyLCAweDA5LCAweGU1LCAweDRjLCAweDYwLCAweDE1LCAweDkwLCAweDdmLCAweDk1LCAweGUwLCAweDU0LCAweGZkfX0sCisgezB4MDY4NiwgNjQsIHsgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHhlNSwgMHg0ZCwKKyAgMHg2MCwgMHgwYSwgMHhkMiwgMHg5YywgMHhjMiwgMHg5OCwgMHg3NSwgMHgyYywgMHgwMSwgMHg3NSwgMHgzMSwgMHgxZSwgMHhlNSwgMHg0ZSwgMHg2MCwgMHgwNywKKyAgMHhjMiwgMHg5YywgMHhlNCwgMHhmNSwgMHgzOSwgMHhmNSwgMHgyYywgMHhlNSwgMHg0ZiwgMHg2MCwgMHgwMywgMHhlNCwgMHhmNSwgMHgzOSwgMHhlNSwgMHg1MCwKKyAgMHg2MCwgMHgwMiwgMHhkMiwgMHgwNywgMHhlNSwgMHg1MSwgMHg2MCwgMHgwYSwgMHhlNSwgMHg0ZCwgMHg3MCwgMHgwMiwgMHhmNSwgMHgzMSwgMHhlNX19LAorIHsweDA2YzYsIDY0LCB7IDB4NTEsIDB4NDIsIDB4MzQsIDB4ZTUsIDB4NTIsIDB4NjAsIDB4MWYsIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4NzQsIDB4MzEsIDB4ZjAsIDB4NzQsCisgIDB4MTIsIDB4ZjAsIDB4NzQsIDB4MzIsIDB4ZjAsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4NzQsIDB4MzMsIDB4ZjAsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4NzQsIDB4MzQsCisgIDB4ZjAsIDB4ZDIsIDB4MDMsIDB4ZDIsIDB4MDIsIDB4ZDIsIDB4MDgsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZjAsIDB4YTIsIDB4MGMsIDB4ZTQsIDB4MzMsCisgIDB4ZmYsIDB4NjUsIDB4MjksIDB4NjAsIDB4MDUsIDB4OGYsIDB4MjksIDB4NDMsIDB4MzQsIDB4MDEsIDB4YTIsIDB4MDksIDB4ZTQsIDB4MzMsIDB4ZmZ9fSwKKyB7MHgwNzA2LCA2NCwgeyAweDY1LCAweDJhLCAweDYwLCAweDA1LCAweDhmLCAweDJhLCAweDQzLCAweDM0LCAweDAxLCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweGZmLCAweDU0LCAweDA4LCAweDY0LAorICAweDA4LCAweGZlLCAweDY1LCAweDI1LCAweDYwLCAweDA1LCAweDhlLCAweDI1LCAweDQzLCAweDM0LCAweDAxLCAweGVmLCAweDU0LCAweDEwLCAweDY0LCAweDEwLAorICAweGZlLCAweDY1LCAweDI2LCAweDYwLCAweDA1LCAweDhlLCAweDI2LCAweDQzLCAweDM0LCAweDAxLCAweGVmLCAweDU0LCAweDQwLCAweDY0LCAweDQwLCAweGZlLAorICAweDY1LCAweDI3LCAweDYwLCAweDA1LCAweDhlLCAweDI3LCAweDQzLCAweDM0LCAweDAxLCAweGVmLCAweDU0LCAweDIwLCAweDY0LCAweDIwLCAweGZlfX0sCisgezB4MDc0NiwgNjQsIHsgMHg2NSwgMHgyOCwgMHg2MCwgMHgwNSwgMHg4ZSwgMHgyOCwgMHg0MywgMHgzNCwgMHgwMSwgMHg5MCwgMHg3ZiwgMHg5YSwgMHhlMCwgMHg1NCwgMHg0MCwgMHg2NCwgMHg0MCwKKyAgMHhmZSwgMHg2NSwgMHgyZSwgMHg2MCwgMHgwNSwgMHg4ZSwgMHgyZSwgMHg0MywgMHgzNCwgMHgwMSwgMHgzMCwgMHgwNywgMHgzNSwgMHhjMiwgMHhhZiwgMHgzMCwKKyAgMHgwMiwgMHgxOCwgMHg5MCwgMHg3ZiwgMHhiOCwgMHhlMCwgMHgyMCwgMHhlMSwgMHgyNywgMHhlNSwgMHgzOSwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHhiNywKKyAgMHhmMCwgMHhlNCwgMHhmNSwgMHgzOSwgMHhjMiwgMHgwMiwgMHhjMiwgMHgwNywgMHg4MCwgMHgxNiwgMHg5MCwgMHg3ZiwgMHhiNiwgMHhlMCwgMHgyMH19LAorIHsweDA3ODYsIDY0LCB7IDB4ZTEsIDB4MGYsIDB4ZTUsIDB4MzksIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4YjksIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MzksIDB4ZDIsIDB4MDIsIDB4YzIsIDB4MDcsCisgIDB4ZDIsIDB4YWYsIDB4MjAsIDB4MDUsIDB4M2QsIDB4MzAsIDB4MDMsIDB4MWUsIDB4OTAsIDB4N2YsIDB4YzYsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MzMsIDB4OTAsCisgIDB4N2UsIDB4NDAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGQsIDB4NzUsIDB4M2EsIDB4MDEsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTAsIDB4ZjUsIDB4NTMsIDB4ZDIsCisgIDB4MDUsIDB4NzUsIDB4MTYsIDB4ZmYsIDB4ODAsIDB4MWMsIDB4OTAsIDB4N2YsIDB4YzgsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MTUsIDB4OTAsIDB4N2R9fSwKKyB7MHgwN2M2LCA2NCwgeyAweGMwLCAweGUwLCAweDEzLCAweDkyLCAweDBkLCAweDc1LCAweDNhLCAweDAxLCAweDkwLCAweDdmLCAweGM5LCAweGUwLCAweGY1LCAweDUzLCAweGQyLCAweDA1LCAweDc1LAorICAweDE2LCAweGZmLCAweDIwLCAweDE0LCAweDMzLCAweDIwLCAweDAwLCAweDA2LCAweGU1LCAweDNhLCAweDY1LCAweDUzLCAweDcwLCAweDJhLCAweDMwLCAweDA1LAorICAweDFhLCAweDMwLCAweDAzLCAweDA5LCAweGU0LCAweDkwLCAweDdmLCAweGM3LCAweGYwLCAweGMyLCAweDAzLCAweDgwLCAweDA3LCAweGU0LCAweDkwLCAweDdmLAorICAweGM5LCAweGYwLCAweGQyLCAweDAzLCAweGMyLCAweDA1LCAweGU0LCAweGY1LCAweDUzLCAweGY1LCAweDNhLCAweDMwLCAweDBkLCAweDBhLCAweGMyfX0sCisgezB4MDgwNiwgNjQsIHsgMHgwZCwgMHhjMiwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhiYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHgzMCwgMHgxNCwgMHgwMywgMHgwMiwgMHgwOSwgMHgxNCwgMHgyMCwgMHgwNSwKKyAgMHgwMywgMHgwMiwgMHgwOSwgMHgxNCwgMHgzMCwgMHgwYywgMHgwMywgMHgwMiwgMHgwOSwgMHgxNCwgMHgzMCwgMHgwOSwgMHgwMywgMHgwMiwgMHgwOSwgMHgxNCwKKyAgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHg1NSwgMHgzOCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwOSwgMHgxNCwgMHgzMCwgMHgwMywgMHg2MSwgMHgzMCwgMHgxMCwKKyAgMHgxMiwgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYSwgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4M319LAorIHsweDA4NDYsIDY0LCB7IDB4ZTAsIDB4MTMsIDB4OTIsIDB4MWIsIDB4YWYsIDB4M2EsIDB4MDUsIDB4M2EsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsCisgIDB4ODMsIDB4ZTAsIDB4ZmUsIDB4ZTUsIDB4M2EsIDB4YzMsIDB4OTUsIDB4NTMsIDB4NTAsIDB4MmEsIDB4MzAsIDB4MTAsIDB4MTIsIDB4YWYsIDB4M2EsIDB4MDUsCisgIDB4M2EsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGUsIDB4YWYsCisgIDB4M2EsIDB4MDUsIDB4M2EsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjV9fSwKKyB7MHgwODg2LCA2NCwgeyAweDM2LCAweGQyLCAweDBiLCAweDgwLCAweDZhLCAweGMyLCAweDBiLCAweGU0LCAweDkwLCAweDdmLCAweGM3LCAweGYwLCAweGMyLCAweDAzLCAweDgwLCAweDVmLCAweDMwLAorICAweDEwLCAweDEyLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweDc0LCAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLAorICAweGUwLCAweDEzLCAweDkyLCAweDFiLCAweGFmLCAweDNhLCAweDA1LCAweDNhLCAweDc0LCAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLAorICAweGY1LCAweDgzLCAweGUwLCAweGZlLCAweGU1LCAweDNhLCAweGMzLCAweDk1LCAweDUzLCAweDUwLCAweDJhLCAweDMwLCAweDEwLCAweDEyLCAweGFmfX0sCisgezB4MDhjNiwgNjQsIHsgMHgzYSwgMHgwNSwgMHgzYSwgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgwZSwKKyAgMHhhZiwgMHgzYSwgMHgwNSwgMHgzYSwgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwKKyAgMHgzNiwgMHhkMiwgMHgwYiwgMHg4MCwgMHgwOSwgMHhjMiwgMHgwYiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhmMCwgMHhkMiwgMHgwMywgMHgzMCwgMHgxMCwKKyAgMHgwNCwgMHhhMiwgMHgxYiwgMHg5MiwgMHg5YiwgMHhkMiwgMHgxNCwgMHhjMiwgMHhhZiwgMHg4ZSwgMHg5OSwgMHgyMCwgMHgwYiwgMHgwZCwgMHgzMH19LAorIHsweDA5MDYsIDY0LCB7IDB4MGQsIDB4MGEsIDB4YzIsIDB4MGQsIDB4YzIsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YmIsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4OTAsIDB4N2YsCisgIDB4ZTksIDB4ZTAsIDB4MTIsIDB4MGQsIDB4MzEsIDB4MGEsIDB4MTEsIDB4MDAsIDB4MGEsIDB4N2UsIDB4MDEsIDB4MGEsIDB4ZGIsIDB4MDMsIDB4MDksIDB4MzgsCisgIDB4MDYsIDB4MGEsIDB4MDIsIDB4MDgsIDB4MDksIDB4ZjYsIDB4MDksIDB4MDksIDB4ZGUsIDB4MGEsIDB4MDksIDB4ZWQsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MGIsCisgIDB4MTksIDB4OTAsIDB4N2YsIDB4ZWIsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTksIDB4MTQsIDB4NjAsIDB4NWEsIDB4MjQsIDB4MDIsIDB4NjB9fSwKKyB7MHgwOTQ2LCA2NCwgeyAweDAzLCAweDAyLCAweDBiLCAweDE5LCAweDc0LCAweDBkLCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweDc0LCAweDg3LCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLAorICAweDBiLCAweDIwLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDA0LCAweDdmLCAweDAyLCAweDgwLCAweDAyLCAweDdmLCAweDAzLCAweDc1LCAweDgyLAorICAweGQ4LCAweDc1LCAweDgzLCAweDBkLCAweGVmLCAweGYwLCAweDc1LCAweDgyLCAweGQxLCAweDc1LCAweDgzLCAweDBkLCAweGYwLCAweDc1LCAweDgyLCAweGNhLAorICAweDc1LCAweDgzLCAweDBkLCAweGYwLCAweDc1LCAweDgyLCAweGMzLCAweDc1LCAweDgzLCAweDBkLCAweGYwLCAweDkwLCAweDdmLCAweGVhLCAweGUwfX0sCisgezB4MDk4NiwgNjQsIHsgMHgwNCwgMHg3NSwgMHg4MiwgMHg5ZSwgMHg3NSwgMHg4MywgMHgwZCwgMHhmMCwgMHg3NCwgMHgwZCwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHg3NCwgMHg5OSwgMHg5MCwKKyAgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgwYiwgMHg3NSwgMHgxMSwgMHhmZiwgMHg3NSwKKyAgMHgxMiwgMHgwZCwgMHg3NSwgMHgxMywgMHhkYywgMHg4MCwgMHgxYiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNCwgMHgwMSwgMHgwYiwgMHg3NSwgMHgxMSwKKyAgMHhmZiwgMHg3NSwgMHgxMiwgMHgwZCwgMHg3NSwgMHgxMywgMHhlMCwgMHg4MCwgMHgwOSwgMHg3NSwgMHgxMSwgMHhmZiwgMHg3NSwgMHgxMiwgMHgwZH19LAorIHsweDA5YzYsIDY0LCB7IDB4NzUsIDB4MTMsIDB4ZjAsIDB4YWEsIDB4MTIsIDB4YTksIDB4MTMsIDB4YWUsIDB4MDIsIDB4ZWUsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4YWYsIDB4MDEsIDB4ZWYsCisgIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4MjAsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4MTUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsCisgIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MTUsIDB4MDIsIDB4MGIsIDB4MjAsIDB4MTIsCisgIDB4MGMsIDB4YjEsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MTQsIDB4MDIsIDB4MGIsIDB4MjAsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZTV9fSwKKyB7MHgwYTA2LCA2NCwgeyAweDE0LCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDIwLCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweDdmLAorICAweDYwLCAweDI3LCAweDE0LCAweDYwLCAweDM0LCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDBiLCAweDE5LCAweGEyLCAweDE3LCAweGU0LCAweDMzLAorICAweGZmLCAweDI1LCAweGUwLCAweGZmLCAweGEyLCAweDE5LCAweGU0LCAweDMzLCAweDRmLCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGU0LCAweGEzLCAweGYwLAorICAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDBiLCAweDIwLCAweGU0LCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGEzfX0sCisgezB4MGE0NiwgNjQsIHsgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwYiwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwKKyAgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwKKyAgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmZCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwYiwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxN319LAorIHsweDBhODYsIDY0LCB7IDB4MjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGIsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NjQsIDB4MDEsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGIsCisgIDB4MTksIDB4YzIsIDB4MTcsIDB4MDIsIDB4MGIsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4NzYsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsCisgIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsCisgIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4NTQsIDB4ODB9fSwKKyB7MHgwYWM2LCA2NCwgeyAweGZmLCAweDEzLCAweDEzLCAweDEzLCAweDU0LCAweDFmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDkwLCAweDdmLCAweGQ3LCAweGYwLCAweGUwLCAweDQ0LAorICAweDIwLCAweGYwLCAweDgwLCAweDQ1LCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDEwLCAweDI0LCAweDAyLCAweDcwLCAweDM5LAorICAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDY0LCAweDAxLCAweDcwLCAweDJhLCAweGQyLCAweDE3LCAweDgwLCAweDJkLCAweDkwLCAweDdmLCAweGVhLCAweGUwLAorICAweDcwLCAweDIwLCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwfX0sCisgezB4MGIwNiwgNjQsIHsgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMSwgMHhmMCwKKyAgMHg4MCwgMHgwNywgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwKKyAgMHgyMiwgMHhjMiwgMHgxMCwgMHhlNCwgMHhmNSwgMHgxNCwgMHhmNSwgMHgzNCwgMHhjMiwgMHgwOSwgMHhjMiwgMHgwYywgMHhjMiwgMHgwYiwgMHhjMiwgMHgxNCwKKyAgMHhjMiwgMHgwZCwgMHhjMiwgMHgxNiwgMHhjMiwgMHgxMSwgMHhjMiwgMHgwNywgMHhjMiwgMHgxMiwgMHhjMiwgMHgwZiwgMHhjMiwgMHgwOCwgMHhmNX19LAorIHsweDBiNDYsIDY0LCB7IDB4MzUsIDB4ZjUsIDB4MzksIDB4ZjUsIDB4NTMsIDB4ZjUsIDB4M2EsIDB4ZjUsIDB4MzMsIDB4ZjUsIDB4MzAsIDB4ZjUsIDB4MmYsIDB4ZjUsIDB4MmUsIDB4ZjUsIDB4MmQsCisgIDB4ZjUsIDB4MmMsIDB4ZjUsIDB4MmIsIDB4ZjUsIDB4MmEsIDB4ZjUsIDB4MjksIDB4ZjUsIDB4MjgsIDB4ZjUsIDB4MjcsIDB4ZjUsIDB4MjYsIDB4ZjUsIDB4MjUsCisgIDB4ZjUsIDB4MjQsIDB4YzIsIDB4MDUsIDB4YzIsIDB4MTgsIDB4YzIsIDB4MWEsIDB4YzIsIDB4MTcsIDB4YzIsIDB4MTksIDB4YzIsIDB4MTUsIDB4YzIsIDB4MDQsCisgIDB4ZDIsIDB4MTMsIDB4YzIsIDB4MDYsIDB4YzIsIDB4MDEsIDB4OTAsIDB4N2YsIDB4OTIsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4ZDIsIDB4ZTh9fSwKKyB7MHgwYjg2LCA2NCwgeyAweDQzLCAweGQ4LCAweDIwLCAweDkwLCAweDdmLCAweGRlLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGRmLCAweGYwLCAweDkwLCAweDdmLCAweGFiLCAweDc0LAorICAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGE5LCAweGYwLCAweDkwLCAweDdmLCAweGFhLCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFmLAorICAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGFlLCAweGUwLCAweDQ0LCAweDBmLCAweGYwLCAweDkwLCAweDdmLCAweGFjLCAweDc0LCAweDBlLAorICAweGYwLCAweGQyLCAweGFmLCAweGQyLCAweGJjLCAweGQyLCAweDFiLCAweDEyLCAweDBmLCAweDVmLCAweGMyLCAweDE4LCAweDMwLCAweDA0LCAweDAzfX0sCisgezB4MGJjNiwgNjQsIHsgMHgxMiwgMHgwNSwgMHg2ZCwgMHgzMCwgMHgwNCwgMHgyYSwgMHgzMCwgMHgwNiwgMHgyNywgMHhjMiwgMHgwNiwgMHhlNSwgMHgxNiwgMHg2MCwgMHgxNiwgMHgxNSwgMHgxNiwKKyAgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHgzMCwgMHhlNiwgMHgwNCwgMHg3ZiwgMHgwMCwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgyMCwgMHg5MCwgMHg3ZiwgMHg5NiwKKyAgMHhlZiwgMHhmMCwgMHg4MCwgMHgwNiwgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHgyMCwgMHhmMCwgMHgxMiwgMHgwYywgMHgwYiwgMHg4MCwgMHhjZCwgMHgzMCwKKyAgMHgxOCwgMHgwNywgMHhjMiwgMHgxOCwgMHgxMiwgMHgwOSwgMHgxNSwgMHg4MCwgMHhjMywgMHgzMCwgMHgxYSwgMHhjMCwgMHhjMiwgMHgxYSwgMHgxMn19LAorIHsweDBjMDYsIDY0LCB7IDB4MGYsIDB4YmIsIDB4ODAsIDB4YjksIDB4MjIsIDB4ZTUsIDB4MzEsIDB4NjAsIDB4MDIsIDB4MTUsIDB4MzEsIDB4ZTUsIDB4MzksIDB4NjAsIDB4NTUsIDB4NjUsIDB4MzUsCisgIDB4NzAsIDB4NGIsIDB4ZTUsIDB4MzMsIDB4ZjQsIDB4NjAsIDB4MDIsIDB4MDUsIDB4MzMsIDB4ZTUsIDB4MzMsIDB4YzMsIDB4OTUsIDB4NDQsIDB4NDAsIDB4NDMsCisgIDB4YzIsIDB4YWYsIDB4MzAsIDB4MDIsIDB4MWIsIDB4OTAsIDB4N2YsIDB4YjgsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MmQsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZTUsCisgIDB4MzksIDB4ZjAsIDB4YzIsIDB4MDIsIDB4ZTQsIDB4ZjUsIDB4MzksIDB4ZjUsIDB4MzMsIDB4ZjUsIDB4MzUsIDB4NzUsIDB4MTYsIDB4ZmYsIDB4ODB9fSwKKyB7MHgwYzQ2LCA2NCwgeyAweDE5LCAweDkwLCAweDdmLCAweGI2LCAweGUwLCAweDIwLCAweGUxLCAweDEyLCAweDkwLCAweDdmLCAweGI5LCAweGU1LCAweDM5LCAweGYwLCAweGQyLCAweDAyLCAweGU0LAorICAweGY1LCAweDM5LCAweGY1LCAweDMzLCAweGY1LCAweDM1LCAweDc1LCAweDE2LCAweGZmLCAweGQyLCAweGFmLCAweDgwLCAweDA2LCAweDg1LCAweDM5LCAweDM1LAorICAweGU0LCAweGY1LCAweDMzLCAweGU1LCAweDJjLCAweDYwLCAweDMwLCAweDIwLCAweDBmLCAweDA3LCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDMwLCAweGUwLAorICAweDBmLCAweGU1LCAweDJkLCAweDYwLCAweDA2LCAweGU0LCAweGY1LCAweDJkLCAweDQzLCAweDM0LCAweDAxLCAweGU0LCAweGY1LCAweDMwLCAweDgwfX0sCisgezB4MGM4NiwgNjQsIHsgMHgxNCwgMHhlNSwgMHgzMCwgMHhkMywgMHg5NSwgMHg0NSwgMHg1MCwgMHgwZCwgMHhlNSwgMHgzMCwgMHhiNSwgMHg0NSwgMHgwNiwgMHg3NSwgMHgyZCwgMHgwMSwgMHg0MywKKyAgMHgzNCwgMHgwMSwgMHgwNSwgMHgzMCwgMHhjMiwgMHgwZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkOSwgMHhlMCwgMHgzMCwgMHhlMiwgMHgwNCwgMHg3ZiwgMHgwMCwKKyAgMHg4MCwgMHgwMiwgMHg3ZiwgMHgyMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlZiwgMHhmMCwgMHgyMiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5MywgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHg5YywgMHg3NCwgMHgzMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHgyMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NCwgMHg3NH19LAorIHsweDBjYzYsIDY0LCB7IDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWQsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTcsIDB4NzQsIDB4ODYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTUsCisgIDB4NzQsIDB4MDMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4ODQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsCisgIDB4YzcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZjAsIDB4NzUsIDB4OTgsIDB4NDAsIDB4NDMsIDB4YTgsIDB4MTAsCisgIDB4OTAsIDB4N2YsIDB4ZGUsIDB4NzQsIDB4MWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4NzQsIDB4MGYsIDB4ZjAsIDB4ZDIsIDB4MDQsIDB4MjJ9fSwKKyB7MHgwZDA2LCA2NCwgeyAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDAyLCAweGU3LCAweDIyLCAweGJiLCAweGZlLCAweDAyLCAweGUzLAorICAweDIyLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGYwLAorICAweDIyLCAweDUwLCAweDAyLCAweGY3LCAweDIyLCAweGJiLCAweGZlLCAweDAxLCAweGYzLCAweDIyLCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAweGY4LCAweGU0LAorICAweDkzLCAweDcwLCAweDEyLCAweDc0LCAweDAxLCAweDkzLCAweDcwLCAweDBkLCAweGEzLCAweGEzLCAweDkzLCAweGY4LCAweDc0LCAweDAxLCAweDkzfX0sCisgezB4MGQ0NiwgNjQsIHsgMHhmNSwgMHg4MiwgMHg4OCwgMHg4MywgMHhlNCwgMHg3MywgMHg3NCwgMHgwMiwgMHg5MywgMHg2OCwgMHg2MCwgMHhlZiwgMHhhMywgMHhhMywgMHhhMywgMHg4MCwgMHhkZiwKKyAgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHg5MCwKKyAgMHg3ZiwgMHhjNCwgMHhlNCwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwNCwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwKKyAgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDBkODYsIDY0LCB7IDB4MDAsIDB4MTIsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4Y2QsIDB4MDYsIDB4MGMsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDIsCisgIDB4MDAsIDB4MDIsIDB4MDksIDB4MDIsIDB4NDMsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDcsCisgIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDEsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDIsIDB4MDIsIDB4NDAsCisgIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDMsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4ODEsIDB4MDIsIDB4NDAsIDB4MDB9fSwKKyB7MHgwZGM2LCA2NCwgeyAweDAxLCAweDA3LCAweDA1LCAweDgyLCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDgzLCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LAorICAweDg0LCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA0LCAweDAzLCAweDA5LCAweDA0LCAweDEwLCAweDAzLCAweDRiLCAweDAwLCAweDY1LCAweDAwLCAweDc5LAorICAweDAwLCAweDczLCAweDAwLCAweDcwLCAweDAwLCAweDYxLCAweDAwLCAweDZlLCAweDAwLCAweDBlLCAweDAzLCAweDUzLCAweDAwLCAweDY1LCAweDAwLCAweDcyLAorICAweDAwLCAweDY5LCAweDAwLCAweDYxLCAweDAwLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDBlLCAweGEyLCAweDAwLCAweDAyLCAweDBlfX0sCisgezB4MGUwNiwgNjQsIHsgMHg3YiwgMHgwMCwgMHgwMiwgMHgwZCwgMHg1NywgMHgwMCwgMHgwMiwgMHgwZSwgMHhjOSwgMHgwMCwgMHgwMiwgMHgwZSwgMHgxMCwgMHgwMCwgMHgwMiwgMHgwZSwgMHgxNCwKKyAgMHgwMCwgMHgwMiwgMHgwZSwgMHgxOCwgMHgwMCwgMHgwMiwgMHgwZSwgMHgxYywgMHgwMCwgMHgwMiwgMHgwZSwgMHhmMCwgMHgwMCwgMHgwMiwgMHgwZSwgMHgyNCwKKyAgMHgwMCwgMHgwMiwgMHgwZiwgMHgxNSwgMHgwMCwgMHgwMiwgMHgwZSwgMHgyYywgMHgwMCwgMHgwMiwgMHgwZiwgMHgzYSwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NSwKKyAgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5MywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZCwgMHhlMCwgMHg0NCwgMHgwMn19LAorIHsweDBlNDYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTcsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsCisgIDB4OTYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWQsIDB4NzQsIDB4ZmUsIDB4ZjAsIDB4MzAsIDB4MTcsIDB4MDQsIDB4N2YsIDB4ODAsIDB4ODAsIDB4MDIsIDB4N2YsCisgIDB4MDAsIDB4OTAsIDB4N2YsIDB4OTcsIDB4ZWYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4OTgsIDB4ZjAsIDB4MjIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzB9fSwKKyB7MHgwZTg2LCA2NCwgeyAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDAyLCAweGYwLCAweGQyLCAweDA2LCAweGQwLCAweDg2LAorICAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLAorICAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGQyLCAweDE4LCAweDUzLCAweDkxLCAweGVmLCAweDkwLAorICAweDdmLCAweGFiLCAweDc0LCAweDAxLCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzfX0sCisgezB4MGVjNiwgNjQsIHsgMHhkMCwgMHhlMCwgMHgzMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwKKyAgMHgwMCwgMHhkMiwgMHgxYSwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwOCwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwKKyAgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwKKyAgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhOSwgMHg3NH19LAorIHsweDBmMDYsIDY0LCB7IDB4MDIsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzAsIDB4ZTAsCisgIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4NTMsIDB4OTEsIDB4ZWYsCisgIDB4OTAsIDB4N2YsIDB4YTksIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsCisgIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODZ9fSwKKyB7MHgwZjQ2LCA2NCwgeyAweDc1LCAweDg2LCAweDAwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGE5LCAweDc0LCAweDA4LCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLAorICAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweGUwLAorICAweDQ0LCAweDA4LCAweGYwLCAweDMwLCAweDFiLCAweDA0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDdmLCAweGY0LCAweDdlLCAweDAxLCAweDEyLCAweDAwLAorICAweDAzLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweDIyLCAweDc0LCAweDAwfX0sCisgezB4MGY4NiwgNjQsIHsgMHhmNSwgMHg4NiwgMHg5MCwgMHhmZCwgMHhhNSwgMHg3YywgMHgwNSwgMHhhMywgMHhlNSwgMHg4MiwgMHg0NSwgMHg4MywgMHg3MCwgMHhmOSwgMHgyMiwgMHg5MCwgMHg3ZiwKKyAgMHhkNiwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg0MywgMHg4NywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg5MCwgMHg3ZiwKKyAgMHhkNiwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg3ZiwgMHgwZCwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMywgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwKKyAgMHg1NCwgMHhmZSwgMHhmMCwgMHgyMiwgMHgxMiwgMHgwZSwgMHgzMywgMHgxMiwgMHgwZiwgMHg5NSwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHgzMH19LAorIHsweDBmYzYsICA5LCB7IDB4ZTcsIDB4MDMsIDB4MTIsIDB4MGYsIDB4YTUsIDB4MTIsIDB4MGMsIDB4YjEsIDB4MjJ9fSwKKyB7MHhmZmZmLAkwLAl7MHgwMH19Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMTlxd19mdy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMTlxd19mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MDNmOGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2ExOXF3X2Z3LmgKQEAgLTAsMCArMSw0NDggQEAKKy8qIGtleXNwYW5fdXNhMTlxd19mdy5oCisKKwlUaGUgZmlybXdhcmUgY29udGFpbmVkIGhlcmVpbiBhcyBrZXlzcGFuX3VzYTE5d3FfZncuaCBpcworCisJCUNvcHlyaWdodCAoQykgMTk5OS0yMDAxCisJCUtleXNwYW4sIEEgZGl2aXNpb24gb2YgSW5ub1N5cyBJbmNvcnBvcmF0ZWQgKCJLZXlzcGFuIikKKwkJCisJYXMgYW4gdW5wdWJsaXNoZWQgd29yay4gVGhpcyBub3RpY2UgZG9lcyBub3QgaW1wbHkgdW5yZXN0cmljdGVkIG9yCisJcHVibGljIGFjY2VzcyB0byB0aGUgc291cmNlIGNvZGUgZnJvbSB3aGljaCB0aGlzIGZpcm13YXJlIGltYWdlIGlzCisJZGVyaXZlZC4gIEV4Y2VwdCBhcyBub3RlZCBiZWxvdyB0aGlzIGZpcm13YXJlIGltYWdlIG1heSBub3QgYmUgCisJcmVwcm9kdWNlZCwgdXNlZCwgc29sZCBvciB0cmFuc2ZlcnJlZCB0byBhbnkgdGhpcmQgcGFydHkgd2l0aG91dCAKKwlLZXlzcGFuJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworCVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSAKKwlpbWFnZSBhcyBwYXJ0IG9mIGEgTGludXggb3Igb3RoZXIgT3BlbiBTb3VyY2Ugb3BlcmF0aW5nIHN5c3RlbSBrZXJuZWwgCisJaW4gdGV4dCBvciBiaW5hcnkgZm9ybSBhcyByZXF1aXJlZC4gCisKKwlUaGlzIGZpcm13YXJlIG1heSBub3QgYmUgbW9kaWZpZWQgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aCAgCisJS2V5c3BhbiBoYXJkd2FyZS4gIERpc3RyaWJ1dGlvbiBhbmQvb3IgTW9kaWZpY2F0aW9uIG9mIHRoZSAKKwlrZXlzcGFuLmMgZHJpdmVyIHdoaWNoIGluY2x1ZGVzIHRoaXMgZmlybXdhcmUsIGluIHdob2xlIG9yIGluIAorCXBhcnQsIHJlcXVpcmVzIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBzdGF0ZW1lbnQuIgorCisqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGV6dXNiX2hleF9yZWNvcmQga2V5c3Bhbl91c2ExOXF3X2Zpcm13YXJlW10gPSB7CisgezB4MDAzMywgIDMsIHsgMHgwMiwgMHgwMCwgMHgyZH19LAorIHsweDAwMmQsICA0LCB7IDB4NTMsIDB4ZDgsIDB4ZWYsIDB4MzJ9fSwKKyB7MHgwMDQ2LCAxNiwgeyAweDMwLCAweDEwLCAweDE5LCAweDEyLCAweDBlLCAweDBmLCAweGVmLCAweGMzLCAweDk1LCAweDE0LCAweDQwLCAweDAzLCAweDAyLCAweDAwLCAweGRmLCAweDkwfX0sCisgezB4MDA1NiwgMTYsIHsgMHg3ZiwgMHhiZiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhjMiwgMHgxMCwgMHhjMiwgMHgwYiwgMHgwMiwgMHgwMCwgMHhkZiwgMHgzMCwgMHgwZCwgMHgzZSwgMHg5MH19LAorIHsweDAwNjYsIDE2LCB7IDB4N2YsIDB4YzYsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4NzMsIDB4MTIsIDB4MGUsIDB4MGYsIDB4ZWYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4NmEsIDB4OTB9fSwKKyB7MHgwMDc2LCAxNiwgeyAweDdlLCAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDEwLCAweDkwLCAweDdmLCAweGM3LCAweGUwLCAweDE0LCAweGY1LCAweDM2LCAweDIwLCAweDBiLCAweDExfX0sCisgezB4MDA4NiwgMTYsIHsgMHg2MCwgMHgwZiwgMHhmNSwgMHgyNCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg0MSwgMHg3NSwgMHgyOSwgMHg3ZSwgMHg3NSwgMHgyYSwgMHg0MSwgMHgxMiwgMHgwOX19LAorIHsweDAwOTYsIDE2LCB7IDB4MTAsIDB4YzIsIDB4MGQsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZjAsIDB4NzUsIDB4MjYsIDB4ZmYsIDB4ODAsIDB4M2MsIDB4OTAsIDB4N2YsIDB4Yzh9fSwKKyB7MHgwMGE2LCAxNiwgeyAweGUwLCAweDIwLCAweGUxLCAweDM1LCAweDEyLCAweDBlLCAweDBmLCAweGVmLCAweGMzLCAweDk0LCAweDQwLCAweDUwLCAweDJjLCAweDkwLCAweDdkLCAweGMwfX0sCisgezB4MDBiNiwgMTYsIHsgMHhlMCwgMHgxMywgMHg5MiwgMHgxMCwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHgxNCwgMHhmNSwgMHgzNiwgMHgyMCwgMHgwYiwgMHgxMSwgMHg2MCwgMHgwZn19LAorIHsweDAwYzYsIDE2LCB7IDB4ZjUsIDB4MjQsIDB4N2UsIDB4N2QsIDB4N2YsIDB4YzEsIDB4NzUsIDB4MjksIDB4N2QsIDB4NzUsIDB4MmEsIDB4YzEsIDB4MTIsIDB4MDksIDB4MTAsIDB4ZDJ9fSwKKyB7MHgwMGQ2LCAxNiwgeyAweDBkLCAweGU0LCAweDkwLCAweDdmLCAweGM5LCAweGYwLCAweDc1LCAweDI2LCAweGZmLCAweDkwLCAweDdmLCAweGI2LCAweGUwLCAweDMwLCAweGUxLCAweDAzfX0sCisgezB4MDBlNiwgMTYsIHsgMHgwMiwgMHgwMSwgMHg2OCwgMHgxMiwgMHgwYywgMHhmZiwgMHg4ZiwgMHgzNiwgMHgxMiwgMHgwZSwgMHgxYiwgMHg4ZiwgMHgxMSwgMHhlNSwgMHgzNiwgMHhjM319LAorIHsweDAwZjYsIDE2LCB7IDB4OTUsIDB4MTMsIDB4NTAsIDB4MGYsIDB4MTIsIDB4MGQsIDB4ZGUsIDB4ZWYsIDB4MzAsIDB4ZTAsIDB4MDgsIDB4ZTUsIDB4MTEsIDB4MjAsIDB4ZTcsIDB4MDN9fSwKKyB7MHgwMDM2LCAxMiwgeyAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyfX0sCisgezB4MDA0MywgIDMsIHsgMHgwMiwgMHgwZSwgMHgwMH19LAorIHsweDAwMDMsIDE2LCB7IDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4OTB9fSwKKyB7MHgwMDEzLCAxNiwgeyAweDdmLCAweGM0LCAweGU0LCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA0LCAweGYwLCAweGQwLCAweDg2LCAweGQwfX0sCisgezB4MDAyMywgMTAsIHsgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn19LAorIHsweDAwMDAsICAzLCB7IDB4MDIsIDB4MDksIDB4YzV9fSwKKyB7MHgwMTA2LCA2NCwgeyAweDMwLCAweDEzLCAweDVmLCAweGMyLCAweDEzLCAweGU1LCAweDM2LCAweDYwLCAweDU5LCAweGI0LCAweDgwLCAweDAzLCAweDQzLCAweDExLCAweDAyLCAweGU1LCAweDExLAorICAweDMwLCAweGU3LCAweDI0LCAweGU1LCAweDM2LCAweGQzLCAweDk0LCAweDIwLCAweDQwLCAweDAzLCAweDc1LCAweDM2LCAweDIwLCAweDg1LCAweDM2LCAweDI0LAorICAweDdlLCAweDdlLCAweDdmLCAweDgwLCAweDc1LCAweDI5LCAweDdlLCAweDc1LCAweDJhLCAweDgwLCAweDEyLCAweDBiLCAweDlhLCAweGU1LCAweDM2LCAweDI1LAorICAweGUwLCAweDkwLCAweDdmLCAweGI3LCAweGYwLCAweDgwLCAweDJhLCAweGU1LCAweDM2LCAweGQzLCAweDk0LCAweDNmLCAweDQwLCAweDAzLCAweDc1fX0sCisgezB4MDE0NiwgNjQsIHsgMHgzNiwgMHgzZiwgMHg4NSwgMHgzNiwgMHgyNCwgMHg5MCwgMHg3ZSwgMHg4MCwgMHhlNSwgMHgxMSwgMHhmMCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg4MSwgMHg3NSwgMHgyOSwKKyAgMHg3ZSwgMHg3NSwgMHgyYSwgMHg4MSwgMHgxMiwgMHgwOSwgMHgzNSwgMHhlNSwgMHgzNiwgMHgwNCwgMHg5MCwgMHg3ZiwgMHhiNywgMHhmMCwgMHg3NSwgMHgyNiwKKyAgMHhmZiwgMHg5MCwgMHg3ZiwgMHhjZSwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNiwgMHgyMCwgMHgwZSwgMHgwMywgMHgwMiwgMHgwMywgMHhjNCwgMHhlNCwgMHhmNSwKKyAgMHgzNSwgMHg3NCwgMHg0MCwgMHgyNSwgMHgzNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YywgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNX19LAorIHsweDAxODYsIDY0LCB7IDB4MzUsIDB4N2MsIDB4MDAsIDB4N2IsIDB4MDEsIDB4N2EsIDB4N2UsIDB4NzksIDB4MDAsIDB4MjQsIDB4MDAsIDB4ZjksIDB4ZWMsIDB4MzQsIDB4N2UsIDB4ZmEsIDB4ZWYsCisgIDB4MTIsIDB4MGEsIDB4OTcsIDB4MDUsIDB4MzUsIDB4ZTUsIDB4MzUsIDB4YjQsIDB4MjAsIDB4ZDcsIDB4OTAsIDB4N2UsIDB4MDAsIDB4ZTAsIDB4NjAsIDB4NmUsCisgIDB4N2YsIDB4MDEsIDB4OTAsIDB4N2UsIDB4MTEsIDB4ZTAsIDB4ZmQsIDB4MTIsIDB4MGMsIDB4ZGEsIDB4OTAsIDB4N2UsIDB4MDEsIDB4ZTAsIDB4ZmYsIDB4MTIsCisgIDB4MGMsIDB4MWMsIDB4OTAsIDB4N2UsIDB4MDIsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGMsIDB4NDIsIDB4ZDIsIDB4MTEsIDB4ZDIsIDB4MTIsIDB4NzV9fSwKKyB7MHgwMWM2LCA2NCwgeyAweDM2LCAweDA0LCAweDkwLCAweDdlLCAweDAzLCAweGUwLCAweDYwLCAweDA1LCAweGMyLCAweDEyLCAweDQzLCAweDM2LCAweGMwLCAweDkwLCAweDdlLCAweDA0LCAweGUwLAorICAweGI0LCAweDAxLCAweDA3LCAweGMyLCAweDEyLCAweDQzLCAweDM2LCAweDBiLCAweDgwLCAweDEwLCAweDkwLCAweDdlLCAweDA0LCAweGUwLCAweDYwLCAweDA3LAorICAweGMyLCAweDExLCAweDQzLCAweDM2LCAweDA5LCAweDgwLCAweDAzLCAweDQzLCAweDM2LCAweDAyLCAweDdmLCAweDAzLCAweGFkLCAweDM2LCAweDEyLCAweDBjLAorICAweGRhLCAweDQzLCAweDFhLCAweDgwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDFhfX0sCisgezB4MDIwNiwgNjQsIHsgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHhlNSwgMHgxNywgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwKKyAgMHgwNSwgMHhlMCwgMHg2MCwgMHgxMiwgMHhhMywgMHhlMCwgMHg1NCwgMHgzZiwgMHhmNSwgMHgxOSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwKKyAgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHgxOSwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgwNywgMHhlMCwgMHg2MCwgMHg0MiwgMHg5MCwgMHg3ZSwgMHgxMywgMHhlMCwKKyAgMHg2MCwgMHgwNSwgMHg0MywgMHgxNiwgMHgwNCwgMHg4MCwgMHgwMywgMHg1MywgMHgxNiwgMHhmYiwgMHhlNCwgMHhmZiwgMHhhZCwgMHgxNiwgMHgxMn19LAorIHsweDAyNDYsIDY0LCB7IDB4MGMsIDB4ZGEsIDB4OTAsIDB4N2UsIDB4MDgsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4MTgsIDB4ODAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4MTgsIDB4N2YsIDB4NTMsCisgIDB4MTgsIDB4ZmMsIDB4OTAsIDB4N2UsIDB4MDksIDB4ZTAsIDB4NjAsIDB4MTEsIDB4NDMsIDB4MTgsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGMsCisgIDB4OGUsIDB4OTAsIDB4N2UsIDB4MGIsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGMsIDB4YjQsIDB4YWYsIDB4MTgsIDB4MTIsIDB4MGMsIDB4NjgsIDB4OTAsIDB4N2UsCisgIDB4MGUsIDB4ZTAsIDB4NjAsIDB4MTgsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4MWEsIDB4MDEsIDB4ODAsIDB4MDMsIDB4NTMsIDB4MWF9fSwKKyB7MHgwMjg2LCA2NCwgeyAweGZlLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDFhLCAweGYwLCAweDkwLCAweDdlLCAweDBjLCAweGUwLAorICAweDYwLCAweDE4LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDFhLCAweDAyLCAweDgwLCAweDAzLCAweDUzLCAweDFhLCAweGZkLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDFhLCAweGYwLCAweDkwLCAweDdlLCAweDEyLCAweGUwLCAweGY1LCAweDEzLAorICAweGEzLCAweGUwLCAweDEzLCAweDkyLCAweDE0LCAweGEzLCAweGUwLCAweGY1LCAweDE0LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDFhfX0sCisgezB4MDJjNiwgNjQsIHsgMHgxMCwgMHg4MCwgMHgwMywgMHg1MywgMHgxYSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHgxYSwKKyAgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxNiwgMHhlMCwgMHg2MCwgMHgzMiwgMHg1MywgMHgxOSwgMHhiZiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwKKyAgMHhlNSwgMHgxOSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHgxMiwgMHgwZCwKKyAgMHhkMiwgMHhlZiwgMHg1NCwgMHhmZSwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg1MywgMHgxNiwgMHhmZCwgMHhlNCwgMHhmZiwgMHhhZCwgMHgxNn19LAorIHsweDAzMDYsIDY0LCB7IDB4MTIsIDB4MGMsIDB4ZGEsIDB4ZTQsIDB4ZjUsIDB4MGUsIDB4ZjUsIDB4MGQsIDB4ZDIsIDB4MGYsIDB4OTAsIDB4N2UsIDB4MTcsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NDMsCisgIDB4MTYsIDB4MDIsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4MTYsIDB4MTIsIDB4MGMsIDB4ZGEsIDB4NzUsIDB4MGQsIDB4MDEsIDB4ZDIsIDB4MGYsIDB4OTAsIDB4N2UsCisgIDB4MTgsIDB4ZTAsIDB4NjAsIDB4MTAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4ZTUsIDB4MTcsIDB4NDQsIDB4MDQsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZjAsIDB4ZDIsIDB4MGIsIDB4OTAsIDB4N2UsIDB4MTksIDB4ZTAsIDB4NjAsIDB4MTEsIDB4NDMsIDB4MTksIDB4NDAsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwMzQ2LCA2NCwgeyAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDE5LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdlLCAweDFhLCAweGUwLCAweDYwLAorICAweDBmLCAweDUzLCAweDE2LCAweGZlLCAweGU0LCAweGZmLCAweGFkLCAweDE2LCAweDEyLCAweDBjLCAweGRhLCAweDc1LCAweDBmLCAweDAxLCAweGQyLCAweDBmLAorICAweDkwLCAweDdlLCAweDFiLCAweGUwLCAweDYwLCAweDBmLCAweDQzLCAweDE2LCAweDAxLCAweGU0LCAweGZmLCAweGFkLCAweDE2LCAweDEyLCAweDBjLCAweGRhLAorICAweGU0LCAweGY1LCAweDBmLCAweGQyLCAweDBmLCAweDkwLCAweDdlLCAweDFjLCAweGUwLCAweDYwLCAweDBlLCAweDkwLCAweDdmLCAweDk4LCAweDc0fX0sCisgezB4MDM4NiwgNjQsIHsgMHgxMiwgMHhmMCwgMHhlNSwgMHgxNywgMHg0NCwgMHgwMiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxZCwgMHhlMCwgMHg2MCwgMHgwMiwgMHhkMiwKKyAgMHgxMywgMHg5MCwgMHg3ZSwgMHgxZSwgMHhlMCwgMHg2MCwgMHgwOCwgMHg3NSwgMHgxMCwgMHgwMSwgMHhlNCwgMHhmNSwgMHgxMiwgMHhkMiwgMHgwZiwgMHg5MCwKKyAgMHg3ZSwgMHgxZiwgMHhlMCwgMHg2MCwgMHgxMSwgMHg5MCwgMHg3ZiwgMHhkNywgMHg3NCwgMHgxMSwgMHhmMCwgMHg3NCwgMHgzMSwgMHhmMCwgMHg3NCwgMHgxNSwKKyAgMHhmMCwgMHg3NCwgMHgzNSwgMHhmMCwgMHhkMiwgMHgwZCwgMHhjMiwgMHgwZSwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjZiwgMHhmMCwgMHgzMCwgMHgxNn19LAorIHsweDAzYzYsIDY0LCB7IDB4NzEsIDB4ZTUsIDB4MTIsIDB4NjAsIDB4MDIsIDB4MTUsIDB4MTIsIDB4ZTUsIDB4MzAsIDB4ZDMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDQsIDB4MTUsIDB4MzAsIDB4ODAsCisgIDB4NjAsIDB4NzUsIDB4MzAsIDB4MGEsIDB4MTIsIDB4MGQsIDB4ZDIsIDB4ZWYsIDB4NTQsIDB4MDEsIDB4ZjUsIDB4MzYsIDB4NjUsIDB4MGUsIDB4NjAsIDB4MDcsCisgIDB4ODUsIDB4MzYsIDB4MGUsIDB4ZDIsIDB4MGYsIDB4ODAsIDB4MTEsIDB4MTIsIDB4MGUsIDB4MjcsIDB4ZWYsIDB4NTQsIDB4MTAsIDB4ZjUsIDB4MzYsIDB4NjUsCisgIDB4MDksIDB4NjAsIDB4MDUsIDB4ODUsIDB4MzYsIDB4MDksIDB4ZDIsIDB4MGYsIDB4MTIsIDB4MGUsIDB4MjcsIDB4ZWYsIDB4NTQsIDB4ODAsIDB4ZjV9fSwKKyB7MHgwNDA2LCA2NCwgeyAweDM2LCAweDY1LCAweDBhLCAweDYwLCAweDA1LCAweDg1LCAweDM2LCAweDBhLCAweGQyLCAweDBmLCAweDEyLCAweDBlLCAweDI3LCAweGVmLCAweDU0LCAweDIwLCAweGY1LAorICAweDM2LCAweDY1LCAweDBiLCAweDYwLCAweDA4LCAweDg1LCAweDM2LCAweDBiLCAweDMwLCAweDExLCAweDAyLCAweGQyLCAweDBmLCAweDEyLCAweDBlLCAweDI3LAorICAweGVmLCAweDU0LCAweDQwLCAweGY1LCAweDM2LCAweDY1LCAweDBjLCAweDYwLCAweDA4LCAweDg1LCAweDM2LCAweDBjLCAweDMwLCAweDEyLCAweDAyLCAweGQyLAorICAweDBmLCAweDMwLCAweDE2LCAweDJhLCAweDkwLCAweDdmLCAweGQyLCAweGUwLCAweDIwLCAweGUxLCAweDIzLCAweDkwLCAweDdiLCAweDQwLCAweGUwfX0sCisgezB4MDQ0NiwgNjQsIHsgMHg2MCwgMHgwOSwgMHhlMCwgMHhmNSwgMHgzMiwgMHg5MCwgMHg3YiwgMHg0MiwgMHhlMCwgMHhmNSwgMHgzMywgMHg5MCwgMHg3YiwgMHg0MSwgMHhlMCwgMHg2MCwgMHgwOSwKKyAgMHg5MCwgMHg3ZiwgMHhkNywgMHg3NCwgMHgxNywgMHhmMCwgMHg3NCwgMHgzNywgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhkMywgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHhjMiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwNSwgMHgyOSwgMHhlNSwgMHgyNywgMHg3MCwgMHg0MCwgMHgzMCwgMHgwZiwgMHgzOSwgMHhlNSwKKyAgMHgxMiwgMHg3MCwgMHgzNSwgMHhjMiwgMHgwZiwgMHhmNSwgMHgzNSwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgwOCwgMHgyNSwgMHgzNX19LAorIHsweDA0ODYsIDY0LCB7IDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MGEsIDB4NTEsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjUsIDB4MzUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsCisgIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MzUsIDB4ZTUsIDB4MzUsIDB4YjQsIDB4MDksIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsCisgIDB4MDksIDB4ZjAsIDB4NzUsIDB4MTIsIDB4MTAsIDB4ZTQsIDB4ZjUsIDB4MTAsIDB4NzUsIDB4MjcsIDB4MDIsIDB4MjIsIDB4ZTUsIDB4MjcsIDB4NjQsIDB4MDIsCisgIDB4NzAsIDB4MzYsIDB4MzAsIDB4MDUsIDB4MmYsIDB4YzIsIDB4MDUsIDB4ZjUsIDB4MzUsIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MmJ9fSwKKyB7MHgwNGM2LCA2NCwgeyAweDI1LCAweDM1LCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyLCAweDBhLCAweDUxLCAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDM1LCAweGY1LCAweDgyLAorICAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDM1LCAweGU1LCAweDM1LCAweGI0LCAweDA1LCAweGRiLCAweDkwLCAweDdmLAorICAweGMzLCAweDc0LCAweDA1LCAweGYwLCAweDc1LCAweDI3LCAweDAzLCAweDIyLCAweGU1LCAweDMyLCAweDYwLCAweDMzLCAweDc1LCAweDMxLCAweDAzLCAweDE1LAorICAweDMyLCAweGU0LCAweGY1LCAweDM1LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDMxLCAweDI1LCAweDM1LCAweGY5LCAweGVlLCAweDM0fX0sCisgezB4MDUwNiwgNjQsIHsgMHgwMCwgMHhmYSwgMHgxMiwgMHgwYSwgMHg1MSwgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNSwgMHgzNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywKKyAgMHhlZiwgMHhmMCwgMHgwNSwgMHgzNSwgMHhlNSwgMHgzNSwgMHhiNCwgMHgwMywgMHhkYiwgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwMywgMHhmMCwgMHhlNCwKKyAgMHhmNSwgMHgyNywgMHgyMiwgMHg5MCwgMHg3ZiwgMHhlOSwgMHhlMCwgMHgxMiwgMHgwYSwgMHhhOSwgMHgwNiwgMHgwOCwgMHgwMCwgMHgwNiwgMHg3YywgMHgwMSwKKyAgMHgwNiwgMHhlOSwgMHgwMywgMHgwNSwgMHg0ZCwgMHgwNiwgMHgwNSwgMHhmOSwgMHgwOCwgMHgwNSwgMHhlZCwgMHgwOSwgMHgwNSwgMHhkNSwgMHgwYX19LAorIHsweDA1NDYsIDY0LCB7IDB4MDUsIDB4ZTQsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MzksIDB4OTAsIDB4N2YsIDB4ZWIsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTYsIDB4MTQsIDB4NjAsCisgIDB4NTAsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NmYsIDB4NzQsIDB4MTksIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4NzQsIDB4MDAsIDB4OTAsIDB4N2YsIDB4ZDUsCisgIDB4ZjAsIDB4MDIsIDB4MDcsIDB4NDAsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MDQsIDB4N2YsIDB4MDIsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDMsCisgIDB4NzUsIDB4ODIsIDB4ODIsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZWYsIDB4ZjAsIDB4NzUsIDB4ODIsIDB4NzQsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjB9fSwKKyB7MHgwNTg2LCA2NCwgeyAweDc1LCAweDgyLCAweDU4LCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDA0LCAweDc1LCAweDgyLCAweDE3LCAweDc1LCAweDgzLAorICAweDE5LCAweGYwLCAweDc0LCAweDE5LCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweDc0LCAweDEyLCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDA3LAorICAweDQwLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGZmLCAweDEyLCAweDBiLCAweDFjLCAweGVhLCAweDQ5LCAweDYwLCAweDBkLCAweGVhLCAweDkwLCAweDdmLAorICAweGQ0LCAweGYwLCAweGU5LCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDA3LCAweDQwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0fX0sCisgezB4MDVjNiwgNjQsIHsgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNywgMHg0MCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNywgMHg0MCwgMHg5MCwgMHg3ZiwKKyAgMHgwMCwgMHhlNSwgMHgyNSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNywgMHg0MCwgMHg5MCwgMHg3ZiwgMHhlYSwKKyAgMHhlMCwgMHhmNSwgMHgyNSwgMHgwMiwgMHgwNywgMHg0MCwgMHgxMiwgMHgwNywgMHg0OCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmNSwgMHgyMywgMHgwMiwKKyAgMHgwNywgMHg0MCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhlNSwgMHgyMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHgwMn19LAorIHsweDA2MDYsIDY0LCB7IDB4MDcsIDB4NDAsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4N2YsIDB4NjAsIDB4MjQsIDB4MTQsIDB4NjAsIDB4MzEsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NWIsCisgIDB4YTIsIDB4MDEsIDB4ZTQsIDB4MzMsIDB4ZmYsIDB4MjUsIDB4ZTAsIDB4ZmYsIDB4YTIsIDB4MDcsIDB4ZTQsIDB4MzMsIDB4NGYsIDB4OTAsIDB4N2YsIDB4MDAsCisgIDB4ZjAsIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4NDAsIDB4ZTQsIDB4OTAsIDB4N2YsCisgIDB4MDAsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4NDAsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwNjQ2LCA2NCwgeyAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LAorICAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZkLCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGU0LAorICAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDA3LCAweDQwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LAorICAweDAxLCAweGYwLCAweDAyLCAweDA3LCAweDQwLCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDFlLCAweDI0LCAweDAyfX0sCisgezB4MDY4NiwgNjQsIHsgMHg2MCwgMHgwMywgMHgwMiwgMHgwNywgMHg0MCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNCwgMHgwMSwgMHgwNiwgMHgxMiwgMHgwZCwgMHhmOSwgMHgwMiwgMHgwNywKKyAgMHg0MCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNywgMHg0MCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwKKyAgMHgzOCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywKKyAgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHg5MH19LAorIHsweDA2YzYsIDY0LCB7IDB4N2YsIDB4ZWMsIDB4ZTAsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4MTMsIDB4MTMsIDB4MTMsIDB4NTQsIDB4MWYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4OTAsCisgIDB4N2YsIDB4ZDcsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4ODAsIDB4NjAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsCisgIDB4ODAsIDB4NTcsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTksIDB4MjQsIDB4MDIsIDB4NzAsIDB4NGIsIDB4OTAsIDB4N2YsCisgIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDUsIDB4MTIsIDB4MGQsIDB4ZjYsIDB4ODAsIDB4M2YsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDR9fSwKKyB7MHgwNzA2LCA2NCwgeyAweDAxLCAweGYwLCAweDgwLCAweDM2LCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDIwLCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLAorICAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LAorICAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweDc0LCAweDAxLCAweGYwLCAweDgwLCAweDEwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLAorICAweDgwLCAweDA3LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyfX0sCisgezB4MDc0NiwgNjQsIHsgMHhmMCwgMHgyMiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5MywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHgzMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwKKyAgMHgyMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NSwgMHg3NCwgMHhjMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwgMHgzZiwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgxMCwgMHhmMCwgMHhlNCwgMHhmNSwgMHg4ZSwgMHg5MCwgMHg3ZiwgMHhkZiwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZSwKKyAgMHhmMCwgMHhlNCwgMHhmNSwgMHgwOCwgMHg3ZiwgMHgwMSwgMHg3YiwgMHgwMCwgMHg3NCwgMHgwOCwgMHgyZiwgMHhmOSwgMHhlNCwgMHgzNCwgMHgwMH19LAorIHsweDA3ODYsIDY0LCB7IDB4ZmEsIDB4ZTQsIDB4MTIsIDB4MGEsIDB4OTcsIDB4MGYsIDB4YmYsIDB4MDksIDB4ZWUsIDB4NzUsIDB4MTMsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4MTIsIDB4ZjUsIDB4MzAsCisgIDB4ZjUsIDB4MTEsIDB4YzIsIDB4MGYsIDB4YzIsIDB4MTMsIDB4YzIsIDB4MGUsIDB4YzIsIDB4MGIsIDB4YzIsIDB4MTAsIDB4YzIsIDB4MDQsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4NzUsIDB4MTksIDB4MDMsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4N2YsIDB4MGMsIDB4ZTQsCisgIDB4ZmQsIDB4MTIsIDB4MGMsIDB4ZGEsIDB4N2YsIDB4MTAsIDB4OGYsIDB4MTgsIDB4MTIsIDB4MGMsIDB4NjgsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzR9fSwKKyB7MHgwN2M2LCA2NCwgeyAweDEyLCAweGYwLCAweDdmLCAweDAxLCAweDhmLCAweDE3LCAweGVmLCAweDQ0LCAweDA2LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDBmLCAweGU0LCAweGZkLCAweDEyLAorICAweDBjLCAweGRhLCAweGU0LCAweGZmLCAweDdlLCAweGEzLCAweGFkLCAweDA2LCAweDhkLCAweDE2LCAweDEyLCAweDBjLCAweGRhLCAweDkwLCAweDdmLCAweDk4LAorICAweDc0LCAweDExLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU0LCAweGYwLCAweDdmLCAweDA1LCAweDdkLCAweDdmLCAweDEyLCAweDBjLCAweGRhLCAweDdmLAorICAweDAxLCAweDEyLCAweDBkLCAweDZhLCAweDdmLCAweDAzLCAweDdkLCAweDA3LCAweDEyLCAweDBjLCAweGRhLCAweGU0LCAweGZmLCAweGU1LCAweDE2fX0sCisgezB4MDgwNiwgNjQsIHsgMHg1NCwgMHg3ZiwgMHhmZCwgMHgxMiwgMHgwYywgMHhkYSwgMHgxMiwgMHgwZSwgMHgwZiwgMHg4ZiwgMHgxNSwgMHhlNCwgMHhmZiwgMHhlNSwgMHgxNiwgMHg0NCwgMHg4MCwKKyAgMHhmZCwgMHgxMiwgMHgwYywgMHhkYSwgMHhlNSwgMHgxNSwgMHgzMCwgMHhlNywgMHgwNCwgMHhjMiwgMHgwOCwgMHg4MCwgMHgwMiwgMHhkMiwgMHgwOCwgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg3NSwgMHgxYSwgMHg4MCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhkMiwgMHgwMywKKyAgMHgyMiwgMHhkMiwgMHgxNSwgMHg5MCwgMHg3ZiwgMHg5MiwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgxMiwgMHgwZCwgMHhmOSwgMHhkMiwgMHhlOH19LAorIHsweDA4NDYsIDY0LCB7IDB4NDMsIDB4ZDgsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZGUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsCisgIDB4ZmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YTksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWEsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWYsCisgIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWUsIDB4NzQsIDB4MGQsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4ZDIsIDB4MTYsIDB4MTIsIDB4MGQsCisgIDB4MjQsIDB4YzIsIDB4MDIsIDB4ZTQsIDB4ZjUsIDB4MjgsIDB4ZjUsIDB4MzAsIDB4YzIsIDB4MDksIDB4ZjUsIDB4MjMsIDB4YzIsIDB4MDMsIDB4OTB9fSwKKyB7MHgwODg2LCA2NCwgeyAweDdmLCAweGExLCAweDA0LCAweGYwLCAweDkwLCAweDdmLCAweGQ4LCAweGUwLCAweDY1LCAweDM0LCAweDYwLCAweDQ4LCAweDMwLCAweDAzLCAweDA1LCAweGQyLCAweDE2LAorICAweDEyLCAweDAwLCAweDQ2LCAweGU1LCAweDBmLCAweDYwLCAweDIyLCAweGU1LCAweDI2LCAweDYwLCAweDE2LCAweDE1LCAweDI2LCAweDkwLCAweDdmLCAweGQ4LAorICAweGUwLCAweDMwLCAweGU2LCAweDA0LCAweDdmLCAweDIwLCAweDgwLCAweDAyLCAweDdmLCAweDMwLCAweDkwLCAweDdmLCAweDk2LCAweGVmLCAweGYwLCAweDgwLAorICAweDFhLCAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweDMwLCAweGYwLCAweDgwLCAweDEyLCAweDkwLCAweDdmLCAweGQ5LCAweGUwLCAweDMwLCAweGUyfX0sCisgezB4MDhjNiwgNjQsIHsgMHgwNCwgMHg3ZiwgMHgzMCwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgyMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHhmNSwKKyAgMHgzNCwgMHg4MCwgMHgyMCwgMHgzMCwgMHgwMywgMHgwNywgMHhjMiwgMHgxNiwgMHgxMiwgMHgwMCwgMHg0NiwgMHg4MCwgMHgxNiwgMHhlNSwgMHgwZiwgMHg3MCwKKyAgMHgxMiwgMHg5MCwgMHg3ZiwgMHhkOSwgMHhlMCwgMHgzMCwgMHhlMiwgMHgwNCwgMHg3ZiwgMHgzMCwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgyMCwgMHg5MCwgMHg3ZiwKKyAgMHg5NiwgMHhlZiwgMHhmMCwgMHgzMCwgMHgwMiwgMHgwNywgMHhjMiwgMHgwMiwgMHgxMiwgMHgwNSwgMHgyYSwgMHg4MCwgMHg4NiwgMHgzMCwgMHgwYX19LAorIHsweDA5MDYsIDY0LCB7IDB4ODMsIDB4YzIsIDB4MGEsIDB4MTIsIDB4MGIsIDB4NWQsIDB4MDIsIDB4MDgsIDB4OGEsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4YWYsCisgIDB4MjQsIDB4ZTUsIDB4MmEsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MjksIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4MDUsIDB4ODYsIDB4ZTAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4ZjAsIDB4MDUsIDB4ODYsIDB4ZGYsIDB4ZjcsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4YWYsIDB4MjQsIDB4ZTUsIDB4MmEsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MjksIDB4ZjUsIDB4ODMsIDB4YzJ9fSwKKyB7MHgwOTQ2LCA2NCwgeyAweGFmLCAweDA1LCAweDg2LCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweDA1LCAweDg2LCAweGYwLCAweGEzLCAweDA1LCAweDg2LCAweGRmLCAweGY3LCAweDA1LCAweDg2LAorICAweGQyLCAweGFmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA4LCAweGYwLCAweGFmLCAweDI0LCAweGU1LCAweDJhLCAweGY1LCAweDgyLCAweGU1LAorICAweDI5LCAweGY1LCAweDgzLCAweGMyLCAweGFmLCAweDA1LCAweDg2LCAweDkwLCAweGMwLCAweDAwLCAweDA1LCAweDg2LCAweGUwLCAweGEzLCAweDA1LCAweDg2LAorICAweGYwLCAweDA1LCAweDg2LCAweGRmLCAweGY3LCAweGQyLCAweGFmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA4LCAweGYwLCAweGFmfX0sCisgezB4MDk4NiwgNjQsIHsgMHgyNCwgMHhlNSwgMHgyYSwgMHhmNSwgMHg4MiwgMHhlNSwgMHgyOSwgMHhmNSwgMHg4MywgMHhjMiwgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwKKyAgMHgwNSwgMHg4NiwgMHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHgwNSwgMHg4NiwgMHhkMiwgMHhhZiwgMHgyMiwgMHg3NCwgMHgwMCwgMHhmNSwKKyAgMHg4NiwgMHg5MCwgMHhmZCwgMHhhNSwgMHg3YywgMHgwNSwgMHhhMywgMHhlNSwgMHg4MiwgMHg0NSwgMHg4MywgMHg3MCwgMHhmOSwgMHgyMiwgMHg5MCwgMHg3ZiwKKyAgMHhkNiwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg0MywgMHg4NywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg3OH19LAorIHsweDA5YzYsIDY0LCB7IDB4N2YsIDB4ZTQsIDB4ZjYsIDB4ZDgsIDB4ZmQsIDB4NzUsIDB4ODEsIDB4MzksIDB4MDIsIDB4MGEsIDB4MGMsIDB4MDIsIDB4MDgsIDB4MzgsIDB4ZTQsIDB4OTMsIDB4YTMsCisgIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NDAsIDB4MDMsIDB4ZjYsIDB4ODAsIDB4MDEsIDB4ZjIsIDB4MDgsIDB4ZGYsIDB4ZjQsIDB4ODAsIDB4MjksIDB4ZTQsCisgIDB4OTMsIDB4YTMsIDB4ZjgsIDB4NTQsIDB4MDcsIDB4MjQsIDB4MGMsIDB4YzgsIDB4YzMsIDB4MzMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MjAsIDB4YzgsCisgIDB4ODMsIDB4NDAsIDB4MDQsIDB4ZjQsIDB4NTYsIDB4ODAsIDB4MDEsIDB4NDYsIDB4ZjYsIDB4ZGYsIDB4ZTQsIDB4ODAsIDB4MGIsIDB4MDEsIDB4MDJ9fSwKKyB7MHgwYTA2LCA2NCwgeyAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDkwLCAweDBkLCAweDhiLCAweGU0LCAweDdlLCAweDAxLCAweDkzLCAweDYwLCAweGJjLCAweGEzLCAweGZmLAorICAweDU0LCAweDNmLCAweDMwLCAweGU1LCAweDA5LCAweDU0LCAweDFmLCAweGZlLCAweGU0LCAweDkzLCAweGEzLCAweDYwLCAweDAxLCAweDBlLCAweGNmLCAweDU0LAorICAweGMwLCAweDI1LCAweGUwLCAweDYwLCAweGE4LCAweDQwLCAweGI4LCAweGU0LCAweDkzLCAweGEzLCAweGZhLCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweGU0LAorICAweDkzLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNhLCAweGM1LCAweDgzLCAweGNhLCAweGYwLCAweGEzLCAweGM4LCAweGM1LCAweDgyfX0sCisgezB4MGE0NiwgNjQsIHsgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhkZiwgMHhlOSwgMHhkZSwgMHhlNywgMHg4MCwgMHhiZSwgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwKKyAgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwMiwgMHhlNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMiwgMHhlMywgMHgyMiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywKKyAgMHhlNCwgMHg5MywgMHgyMiwgMHhiYiwgMHgwMSwgMHgwYywgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHgyMiwgMHg1MCwgMHgwNiwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgMHhlNiwgMHgyMiwgMHhiYiwgMHhmZSwgMHgwNiwgMHhlOSwgMHgyNX19LAorIHsweDBhODYsIDY0LCB7IDB4ODIsIDB4ZjgsIDB4ZTIsIDB4MjIsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsCisgIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZjAsIDB4MjIsIDB4NTAsIDB4MDIsIDB4ZjcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDEsCisgIDB4ZjMsIDB4MjIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4NzAsIDB4MTIsIDB4NzQsIDB4MDEsIDB4OTMsIDB4NzAsIDB4MGQsCisgIDB4YTMsIDB4YTMsIDB4OTMsIDB4ZjgsIDB4NzQsIDB4MDEsIDB4OTMsIDB4ZjUsIDB4ODIsIDB4ODgsIDB4ODMsIDB4ZTQsIDB4NzMsIDB4NzQsIDB4MDJ9fSwKKyB7MHgwYWM2LCA2NCwgeyAweDkzLCAweDY4LCAweDYwLCAweGVmLCAweGEzLCAweGEzLCAweGEzLCAweDgwLCAweGRmLCAweGU0LCAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDljLAorICAweDc0LCAweDIwLCAweGYwLCAweDMwLCAweDAxLCAweDAzLCAweGZmLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweDkwLCAweDdmLCAweDk2LCAweGVmLCAweGYwLAorICAweGU0LCAweDkwLCAweDdmLCAweDk0LCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweDc0LCAweGZmLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk3LCAweGYwLAorICAweDMwLCAweDA4LCAweDExLCAweDkwLCAweDdmLCAweDk1LCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmfX0sCisgezB4MGIwNiwgNjQsIHsgMHg5OCwgMHg3NCwgMHgyMCwgMHhmMCwgMHgyMiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwgMHhkZiwgMHhmMCwgMHhlNCwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHhmMCwgMHgyMiwgMHg4ZiwgMHgzNSwgMHhlNCwgMHhmNSwgMHgzNiwgMHg3NSwgMHgzNywgMHhmZiwgMHg3NSwgMHgzOCwgMHgxOSwKKyAgMHg3NSwgMHgzOSwgMHg4NiwgMHhhYiwgMHgzNywgMHhhYSwgMHgzOCwgMHhhOSwgMHgzOSwgMHg5MCwgMHgwMCwgMHgwMSwgMHgxMiwgMHgwYSwgMHg2YSwgMHhiNCwKKyAgMHgwMywgMHgxZCwgMHhhZiwgMHgzNiwgMHgwNSwgMHgzNiwgMHhlZiwgMHhiNSwgMHgzNSwgMHgwMSwgMHgyMiwgMHgxMiwgMHgwYSwgMHg1MSwgMHg3ZX19LAorIHsweDBiNDYsIDY0LCB7IDB4MDAsIDB4MjksIDB4ZmYsIDB4ZWUsIDB4M2EsIDB4YTksIDB4MDcsIDB4NzUsIDB4MzcsIDB4ZmYsIDB4ZjUsIDB4MzgsIDB4ODksIDB4MzksIDB4ODAsIDB4ZDQsIDB4N2IsCisgIDB4MDAsIDB4N2EsIDB4MDAsIDB4NzksIDB4MDAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4ZjUsIDB4MzUsIDB4MTIsIDB4MGEsIDB4Y2YsIDB4MjAsCisgIDB4MDgsIDB4MDcsIDB4OTAsIDB4N2YsIDB4OTIsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsCisgIDB4MTIsIDB4MDksIDB4YjUsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4MzAsIDB4ZTcsIDB4MGUsIDB4MzAsIDB4MDEsIDB4MDUsIDB4MTIsIDB4MGR9fSwKKyB7MHgwYjg2LCA2NCwgeyAweGJjLCAweDgwLCAweDA2LCAweDEyLCAweDBkLCAweDQ5LCAweGVmLCAweDYwLCAweGUxLCAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDEyLAorICAweDA3LCAweDQ4LCAweDIyLCAweDA1LCAweDJhLCAweGU1LCAweDJhLCAweGFlLCAweDI5LCAweDcwLCAweDAyLCAweDA1LCAweDI5LCAweDE0LCAweGY1LCAweDgyLAorICAweDhlLCAweDgzLCAweGU1LCAweDExLCAweGYwLCAweDEyLCAweDAwLCAweDM2LCAweDA1LCAweDJhLCAweGU1LCAweDJhLCAweGFjLCAweDI5LCAweDcwLCAweDAyLAorICAweDA1LCAweDI5LCAweDE0LCAweGY1LCAweDgyLCAweDhjLCAweDgzLCAweGVmLCAweGYwLCAweDE1LCAweDI0LCAweGU1LCAweDI0LCAweDYwLCAweDA3fX0sCisgezB4MGJjNiwgNjQsIHsgMHgxMiwgMHgwZSwgMHgxYiwgMHg4ZiwgMHgxMSwgMHg4MCwgMHhjZCwgMHgyMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwKKyAgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhkMiwgMHgwMiwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMSwKKyAgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHhjMCwgMHhlMCwKKyAgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhkMiwgMHgwYX19LAorIHsweDBjMDYsIDY0LCB7IDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsCisgIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsCisgIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4MTksIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzR9fSwKKyB7MHgwYzQ2LCA2NCwgeyAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDkwLCAweGMwLCAweDAwLAorICAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDE5LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLAorICAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LAorICAweDc0LCAweDEyLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1fX0sCisgezB4MGM4NiwgNjQsIHsgMHgxOSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHgxOSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwKKyAgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNiwgMHhmMH19LAorIHsweDBjYzYsIDY0LCB7IDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4MTksIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4MTksIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsCisgIDB4MTUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MTIsIDB4MGQsIDB4ZWEsIDB4OGYsIDB4MzcsIDB4MTIsIDB4MGR9fSwKKyB7MHgwZDA2LCA2NCwgeyAweGVhLCAweDhmLCAweDM4LCAweGU1LCAweDM3LCAweDY1LCAweDM4LCAweDYwLCAweDEyLCAweDEyLCAweDBkLCAweGVhLCAweDhmLCAweDM3LCAweGU1LCAweDM3LCAweDY1LAorICAweDM4LCAweDYwLCAweDA3LCAweDEyLCAweDBkLCAweGVhLCAweDhmLCAweDM4LCAweDgwLCAweGU4LCAweGFmLCAweDM3LCAweDIyLCAweDkwLCAweDdmLCAweGQ2LAorICAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweGUwLCAweDQ0LCAweDA4LCAweGYwLCAweDMwLCAweDE2LCAweDA0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDdmLAorICAweGY0LCAweDdlLCAweDAxLCAweDEyLCAweDBkLCAweGE1LCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweGUwLCAweDQ0fX0sCisgezB4MGQ0NiwgNjQsIHsgMHgwNCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHhmNSwgMHgzNiwgMHgxMiwgMHgwNywgMHg0OCwgMHgxMiwgMHgwZSwgMHgyNywgMHhlZiwgMHgzMCwKKyAgMHhlNiwgMHgwYiwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHg2NSwgMHgzNiwgMHg2MCwgMHhmMSwgMHg3ZiwgMHgwMSwgMHgyMiwgMHgxMiwgMHgwYSwgMHhjZiwKKyAgMHg3ZiwgMHgwMCwgMHgyMiwgMHhhZSwgMHgwNywgMHhlNCwgMHhmZiwgMHhlNSwgMHgxNiwgMHg1NCwgMHg3ZiwgMHhmZCwgMHgxMiwgMHgwYywgMHhkYSwgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZSwgMHhmMCwgMHhlNCwgMHhlNSwgMHgxNiwgMHg0NCwgMHg4MH19LAorIHsweDBkODYsIDY0LCB7IDB4ZmQsIDB4MTIsIDB4MGMsIDB4ZGEsIDB4MjIsIDB4MDUsIDB4MmIsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MzEsIDB4MDMsIDB4MDAsIDB4MDAsCisgIDB4YzEsIDB4ODYsIDB4YzEsIDB4MDIsIDB4YzEsIDB4MGEsIDB4YzEsIDB4MDEsIDB4YzEsIDB4MDcsIDB4MDEsIDB4MjcsIDB4MDAsIDB4MDAsIDB4OGUsIDB4MzYsCisgIDB4OGYsIDB4MzcsIDB4ZTUsIDB4MzcsIDB4MTUsIDB4MzcsIDB4YWUsIDB4MzYsIDB4NzAsIDB4MDIsIDB4MTUsIDB4MzYsIDB4NGUsIDB4NjAsIDB4MDUsIDB4MTIsCisgIDB4MDksIDB4YTQsIDB4ODAsIDB4ZWUsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4N2YsIDB4MGQsIDB4N2V9fSwKKyB7MHgwZGM2LCA2NCwgeyAweDAwLCAweDEyLCAweDBkLCAweGE1LCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDExLAorICAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweDkwLCAweGMwLCAweDAwLAorICAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweGQyLAorICAweDAxLCAweDIyLCAweGMyLCAweDAxLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDBiLCAweGNlLCAweDAwLCAweDAyLCAweDBlfX0sCisgezB4MGUwNiwgNjQsIHsgMHgwNCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMiwgMHgwYiwgMHhmNSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDBlNDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgwZTg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MGVjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDBmMDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgwZjQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MGY4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDBmYzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMDA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTA0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEwODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMGM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTEwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDExNDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMTg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTFjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEyMDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMjQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTI4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEyYzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMzA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTM0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEzODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxM2M2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTQwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNDg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTRjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNTQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTU4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNjA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTY0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNmM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTcwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNzg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTdjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxODQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTg4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZmYsIDB4MDB9fSwKKyB7MHgxOTA2LCA2NCwgeyAweDAwLCAweDQwLCAweGNkLCAweDA2LCAweDE5LCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAyLCAweDAwLCAweDAyLCAweDA5LCAweDAyLCAweDc0LCAweDAwLCAweDAxLAorICAweDAxLCAweDAwLCAweGEwLCAweDMyLCAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweDBlLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAxLAorICAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAyLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAzLCAweDAyLCAweDQwLAorICAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA0LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA1LCAweDAyLCAweDQwLCAweDAwfX0sCisgezB4MTk0NiwgNjQsIHsgMHgwMCwgMHgwNywgMHgwNSwgMHgwNiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwKKyAgMHg4MSwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MywgMHgwMiwKKyAgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NSwgMHgwMiwgMHg0MCwgMHgwMCwKKyAgMHgwMSwgMHgwNywgMHgwNSwgMHg4NiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMX19LAorIHsweDE5ODYsIDY0LCB7IDB4MDQsIDB4MDMsIDB4MDksIDB4MDQsIDB4NDgsIDB4MDMsIDB4NGIsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsCisgIDB4MDAsIDB4NmUsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjksIDB4MDAsIDB4NzYsCisgIDB4MDAsIDB4NjksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NjksIDB4MDAsIDB4NmYsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NjYsCisgIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NzksIDB4MDB9fSwKKyB7MHgxOWM2LCA2NCwgeyAweDczLCAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDYzLCAweDAwLCAweDJlLCAweDAwLCAweDM2LCAweDAzLCAweDRiLCAweDAwLCAweDY1LAorICAweDAwLCAweDc5LCAweDAwLCAweDczLCAweDAwLCAweDcwLCAweDAwLCAweDYxLCAweDAwLCAweDZlLCAweDAwLCAweDIwLCAweDAwLCAweDU1LCAweDAwLCAweDUzLAorICAweDAwLCAweDQyLCAweDAwLCAweDIwLCAweDAwLCAweDUzLCAweDAwLCAweDY1LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDYxLCAweDAwLCAweDZjLAorICAweDAwLCAweDIwLCAweDAwLCAweDQxLCAweDAwLCAweDY0LCAweDAwLCAweDYxLCAweDAwLCAweDcwLCAweDAwLCAweDc0LCAweDAwLCAweDY1LCAweDAwfX0sCisgezB4MWEwNiwgIDQsIHsgMHg3MiwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweGZmZmYsIDAsCXsweDAwfX0KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2ExOXdfZncuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTE5d19mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDYxOTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2ExOXdfZncuaApAQCAtMCwwICsxLDQ0NiBAQAorLyoga2V5c3Bhbl91c2ExOXdfZncuaAorCisJVGhlIGZpcm13YXJlIGNvbnRhaW5lZCBoZXJlaW4gYXMga2V5c3Bhbl91c2ExOXdfZncuaCBpcworCisJCUNvcHlyaWdodCAoQykgMTk5OS0yMDAxCisJCUtleXNwYW4sIEEgZGl2aXNpb24gb2YgSW5ub1N5cyBJbmNvcnBvcmF0ZWQgKCJLZXlzcGFuIikKKwkJCisJYXMgYW4gdW5wdWJsaXNoZWQgd29yay4gVGhpcyBub3RpY2UgZG9lcyBub3QgaW1wbHkgdW5yZXN0cmljdGVkIG9yCisJcHVibGljIGFjY2VzcyB0byB0aGUgc291cmNlIGNvZGUgZnJvbSB3aGljaCB0aGlzIGZpcm13YXJlIGltYWdlIGlzCisJZGVyaXZlZC4gIEV4Y2VwdCBhcyBub3RlZCBiZWxvdyB0aGlzIGZpcm13YXJlIGltYWdlIG1heSBub3QgYmUgCisJcmVwcm9kdWNlZCwgdXNlZCwgc29sZCBvciB0cmFuc2ZlcnJlZCB0byBhbnkgdGhpcmQgcGFydHkgd2l0aG91dCAKKwlLZXlzcGFuJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworCVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSAKKwlpbWFnZSBhcyBwYXJ0IG9mIGEgTGludXggb3Igb3RoZXIgT3BlbiBTb3VyY2Ugb3BlcmF0aW5nIHN5c3RlbSBrZXJuZWwgCisJaW4gdGV4dCBvciBiaW5hcnkgZm9ybSBhcyByZXF1aXJlZC4gCisKKwlUaGlzIGZpcm13YXJlIG1heSBub3QgYmUgbW9kaWZpZWQgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aCAgCisJS2V5c3BhbiBoYXJkd2FyZS4gIERpc3RyaWJ1dGlvbiBhbmQvb3IgTW9kaWZpY2F0aW9uIG9mIHRoZSAKKwlrZXlzcGFuLmMgZHJpdmVyIHdoaWNoIGluY2x1ZGVzIHRoaXMgZmlybXdhcmUsIGluIHdob2xlIG9yIGluIAorCXBhcnQsIHJlcXVpcmVzIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBzdGF0ZW1lbnQuIgorKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkIGtleXNwYW5fdXNhMTl3X2Zpcm13YXJlW10gPSB7CisgezB4MDAzMywgIDMsIHsgMHgwMiwgMHgwZCwgMHg1Y319LAorIHsweDAwMDMsIDE2LCB7IDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsIDB4MzAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZjB9fSwKKyB7MHgwMDEzLCAxNiwgeyAweDkwLCAweDdmLCAweDk0LCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweDc0LCAweGZmLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk3LCAweGYwLCAweDkwfX0sCisgezB4MDAyMywgMTUsIHsgMHg3ZiwgMHg5NSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwgMHgxNywgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhmMCwgMHgyMn19LAorIHsweDAwNDYsIDE2LCB7IDB4MzAsIDB4MGYsIDB4MTgsIDB4MTIsIDB4MGQsIDB4MzgsIDB4ZWYsIDB4YzMsIDB4OTUsIDB4MTQsIDB4NDAsIDB4MDMsIDB4MDIsIDB4MDAsIDB4ZDgsIDB4OTB9fSwKKyB7MHgwMDU2LCAxNiwgeyAweDdmLCAweGJmLCAweDc0LCAweDAxLCAweGYwLCAweGMyLCAweDBmLCAweGMyLCAweDBhLCAweDgwLCAweDc3LCAweDMwLCAweDBjLCAweDNiLCAweDkwLCAweDdmfX0sCisgezB4MDA2NiwgMTYsIHsgMHhjNiwgMHhlMCwgMHgyMCwgMHhlMSwgMHg2ZCwgMHgxMiwgMHgwZCwgMHgzOCwgMHhlZiwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHg2NCwgMHg5MCwgMHg3ZX19LAorIHsweDAwNzYsIDE2LCB7IDB4NDAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGYsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTAsIDB4MTQsIDB4ZjUsIDB4MWMsIDB4MjAsIDB4MGEsIDB4MTEsIDB4NjB9fSwKKyB7MHgwMDg2LCAxNiwgeyAweDBmLCAweGY1LCAweDIzLCAweDdlLCAweDdlLCAweDdmLCAweDQxLCAweDc1LCAweDI3LCAweDdlLCAweDc1LCAweDI4LCAweDQxLCAweDEyLCAweDA4LCAweDAxfX0sCisgezB4MDA5NiwgMTYsIHsgMHhjMiwgMHgwYywgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHg4MCwgMHgzOSwgMHg5MCwgMHg3ZiwgMHhjOCwgMHhlMCwgMHgyMCwgMHhlMSwgMHgzMn19LAorIHsweDAwYTYsIDE2LCB7IDB4MTIsIDB4MGQsIDB4MzgsIDB4ZWYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4MjksIDB4OTAsIDB4N2QsIDB4YzAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGZ9fSwKKyB7MHgwMGI2LCAxNiwgeyAweDkwLCAweDdmLCAweGM5LCAweGUwLCAweDE0LCAweGY1LCAweDFjLCAweDIwLCAweDBhLCAweDExLCAweDYwLCAweDBmLCAweGY1LCAweDIzLCAweDdlLCAweDdkfX0sCisgezB4MDBjNiwgMTYsIHsgMHg3ZiwgMHhjMSwgMHg3NSwgMHgyNywgMHg3ZCwgMHg3NSwgMHgyOCwgMHhjMSwgMHgxMiwgMHgwOCwgMHgwMSwgMHhkMiwgMHgwYywgMHhlNCwgMHg5MCwgMHg3Zn19LAorIHsweDAwZDYsIDE2LCB7IDB4YzksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjYsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MDEsIDB4NWUsIDB4MTIsIDB4MGMsIDB4NDEsIDB4OGZ9fSwKKyB7MHgwMGU2LCAxNiwgeyAweDFjLCAweDEyLCAweDBkLCAweDQ0LCAweDhmLCAweDExLCAweGU1LCAweDFjLCAweGMzLCAweDk1LCAweDEzLCAweDUwLCAweDBmLCAweDEyLCAweDBkLCAweDIwfX0sCisgezB4MDBmNiwgMTYsIHsgMHhlZiwgMHgzMCwgMHhlMCwgMHgwOCwgMHhlNSwgMHgxMSwgMHgyMCwgMHhlNywgMHgwMywgMHgzMCwgMHgxMiwgMHg1YywgMHhjMiwgMHgxMiwgMHhlNSwgMHgxY319LAorIHsweDAwMzYsIDEyLCB7IDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjJ9fSwKKyB7MHgwMDQzLCAgMywgeyAweDAyLCAweDBlLCAweDAwfX0sCisgezB4MDAwMCwgIDMsIHsgMHgwMiwgMHgwOCwgMHhiNn19LAorIHsweDAxMDYsIDY0LCB7IDB4NjAsIDB4NTYsIDB4YjQsIDB4ODAsIDB4MDMsIDB4NDMsIDB4MTEsIDB4MDIsIDB4ZTUsIDB4MTEsIDB4MzAsIDB4ZTcsIDB4MjQsIDB4ZTUsIDB4MWMsIDB4ZDMsIDB4OTQsCisgIDB4MjAsIDB4NDAsIDB4MDMsIDB4NzUsIDB4MWMsIDB4MjAsIDB4ODUsIDB4MWMsIDB4MjMsIDB4N2UsIDB4N2UsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MjcsIDB4N2UsCisgIDB4NzUsIDB4MjgsIDB4ODAsIDB4MTIsIDB4MGEsIDB4ODYsIDB4ZTUsIDB4MWMsIDB4MjUsIDB4MWMsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZjAsIDB4ODAsIDB4MjcsCisgIDB4ZTUsIDB4MWMsIDB4ZDMsIDB4OTQsIDB4M2YsIDB4NDAsIDB4MDMsIDB4NzUsIDB4MWMsIDB4M2YsIDB4ODUsIDB4MWMsIDB4MjMsIDB4OTAsIDB4N2V9fSwKKyB7MHgwMTQ2LCA2NCwgeyAweDgwLCAweGU1LCAweDExLCAweGYwLCAweDdlLCAweDdlLCAweDdmLCAweDgxLCAweDc1LCAweDI3LCAweDdlLCAweDc1LCAweDI4LCAweDgxLCAweDEyLCAweDA4LCAweDI2LAorICAweGU1LCAweDFjLCAweDA0LCAweDkwLCAweDdmLCAweGI3LCAweGYwLCAweDkwLCAweDdmLCAweGNlLCAweGUwLCAweDMwLCAweGUxLCAweDA2LCAweDIwLCAweDBkLAorICAweDAzLCAweDAyLCAweDAzLCAweGJhLCAweGU0LCAweGY1LCAweDFiLCAweDc0LCAweDQwLCAweDI1LCAweDFiLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdjLAorICAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDFiLCAweDdjLCAweDAwLCAweDdiLCAweDAxLCAweDdhLCAweDdlLCAweDc5LCAweDAwLCAweDI0fX0sCisgezB4MDE4NiwgNjQsIHsgMHgwMCwgMHhmOSwgMHhlYywgMHgzNCwgMHg3ZSwgMHhmYSwgMHhlZiwgMHgxMiwgMHgwYSwgMHgwZCwgMHgwNSwgMHgxYiwgMHhlNSwgMHgxYiwgMHhiNCwgMHgyMCwgMHhkNywKKyAgMHg5MCwgMHg3ZSwgMHgwMCwgMHhlMCwgMHg2MCwgMHg2ZSwgMHg3ZiwgMHgwMSwgMHg5MCwgMHg3ZSwgMHgxMSwgMHhlMCwgMHhmZCwgMHgxMiwgMHgwYywgMHgxYywKKyAgMHg5MCwgMHg3ZSwgMHgwMSwgMHhlMCwgMHhmZiwgMHgxMiwgMHgwYiwgMHg1ZSwgMHg5MCwgMHg3ZSwgMHgwMiwgMHhlMCwgMHhmZiwgMHgxMiwgMHgwYiwgMHg4NCwKKyAgMHhkMiwgMHgxMCwgMHhkMiwgMHgxMSwgMHg3NSwgMHgxYywgMHgwNCwgMHg5MCwgMHg3ZSwgMHgwMywgMHhlMCwgMHg2MCwgMHgwNSwgMHhjMiwgMHgxMX19LAorIHsweDAxYzYsIDY0LCB7IDB4NDMsIDB4MWMsIDB4YzAsIDB4OTAsIDB4N2UsIDB4MDQsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDcsIDB4YzIsIDB4MTEsIDB4NDMsIDB4MWMsIDB4MGIsIDB4ODAsIDB4MTAsCisgIDB4OTAsIDB4N2UsIDB4MDQsIDB4ZTAsIDB4NjAsIDB4MDcsIDB4YzIsIDB4MTAsIDB4NDMsIDB4MWMsIDB4MDksIDB4ODAsIDB4MDMsIDB4NDMsIDB4MWMsIDB4MDIsCisgIDB4N2YsIDB4MDMsIDB4YWQsIDB4MWMsIDB4MTIsIDB4MGMsIDB4MWMsIDB4NDMsIDB4MTksIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsCisgIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4MTksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4ZTUsIDB4MTYsIDB4NDR9fSwKKyB7MHgwMjA2LCA2NCwgeyAweDA2LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdlLCAweDA1LCAweGUwLCAweDYwLCAweDEyLCAweGEzLCAweGUwLCAweDU0LCAweDNmLCAweGY1LCAweDE4LAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDE4LCAweGYwLCAweDkwLCAweDdlLCAweDA3LCAweGUwLAorICAweDYwLCAweDQyLCAweDkwLCAweDdlLCAweDEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDE1LCAweDA0LCAweDgwLCAweDAzLCAweDUzLCAweDE1LCAweGZiLAorICAweGU0LCAweGZmLCAweGFkLCAweDE1LCAweDEyLCAweDBjLCAweDFjLCAweDkwLCAweDdlLCAweDA4LCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDE3fX0sCisgezB4MDI0NiwgNjQsIHsgMHg4MCwgMHg4MCwgMHgwMywgMHg1MywgMHgxNywgMHg3ZiwgMHg1MywgMHgxNywgMHhmYywgMHg5MCwgMHg3ZSwgMHgwOSwgMHhlMCwgMHg2MCwgMHgxMSwgMHg0MywgMHgxNywKKyAgMHgwMiwgMHhhMywgMHhlMCwgMHhmZiwgMHgxMiwgMHgwYiwgMHhkMCwgMHg5MCwgMHg3ZSwgMHgwYiwgMHhlMCwgMHhmZiwgMHgxMiwgMHgwYiwgMHhmNiwgMHhhZiwKKyAgMHgxNywgMHgxMiwgMHgwYiwgMHhhYSwgMHg5MCwgMHg3ZSwgMHgwZSwgMHhlMCwgMHg2MCwgMHgxOCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHgxOSwKKyAgMHgwMSwgMHg4MCwgMHgwMywgMHg1MywgMHgxOSwgMHhmZSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMH19LAorIHsweDAyODYsIDY0LCB7IDB4ZTUsIDB4MTksIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MGMsIDB4ZTAsIDB4NjAsIDB4MTgsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4MTksIDB4MDIsIDB4ODAsCisgIDB4MDMsIDB4NTMsIDB4MTksIDB4ZmQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4MTksIDB4ZjAsCisgIDB4OTAsIDB4N2UsIDB4MTIsIDB4ZTAsIDB4ZjUsIDB4MTMsIDB4YTMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTMsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4MTQsIDB4YTMsCisgIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4MTksIDB4MTAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4MTksIDB4ZWYsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzR9fSwKKyB7MHgwMmM2LCA2NCwgeyAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDE5LCAweGYwLCAweDkwLCAweDdlLCAweDE2LCAweGUwLCAweDYwLCAweDMyLCAweDUzLCAweDE4LCAweGJmLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDE4LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDEyLCAweDBkLCAweDE0LCAweGVmLCAweDU0LCAweGZlLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDUzLCAweDE1LAorICAweGZkLCAweGU0LCAweGZmLCAweGFkLCAweDE1LCAweDEyLCAweDBjLCAweDFjLCAweGU0LCAweGY1LCAweDBlLCAweGY1LCAweDBkLCAweGQyLCAweDBlfX0sCisgezB4MDMwNiwgNjQsIHsgMHg5MCwgMHg3ZSwgMHgxNywgMHhlMCwgMHg2MCwgMHgwZiwgMHg0MywgMHgxNSwgMHgwMiwgMHhlNCwgMHhmZiwgMHhhZCwgMHgxNSwgMHgxMiwgMHgwYywgMHgxYywgMHg3NSwKKyAgMHgwZCwgMHgwMSwgMHhkMiwgMHgwZSwgMHg5MCwgMHg3ZSwgMHgxOCwgMHhlMCwgMHg2MCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwKKyAgMHhlNSwgMHgxNiwgMHg0NCwgMHgwNCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHhkMiwgMHgwYSwgMHg5MCwgMHg3ZSwgMHgxOSwgMHhlMCwgMHg2MCwgMHgxMSwKKyAgMHg0MywgMHgxOCwgMHg0MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHgxOCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMH19LAorIHsweDAzNDYsIDY0LCB7IDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MWEsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NTMsIDB4MTUsIDB4ZmUsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4MTUsIDB4MTIsIDB4MGMsCisgIDB4MWMsIDB4NzUsIDB4MGYsIDB4MDEsIDB4ZDIsIDB4MGUsIDB4OTAsIDB4N2UsIDB4MWIsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NDMsIDB4MTUsIDB4MDEsIDB4ZTQsCisgIDB4ZmYsIDB4YWQsIDB4MTUsIDB4MTIsIDB4MGMsIDB4MWMsIDB4ZTQsIDB4ZjUsIDB4MGYsIDB4ZDIsIDB4MGUsIDB4OTAsIDB4N2UsIDB4MWMsIDB4ZTAsIDB4NjAsCisgIDB4MGUsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4ZTUsIDB4MTYsIDB4NDQsIDB4MDIsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjB9fSwKKyB7MHgwMzg2LCA2NCwgeyAweDkwLCAweDdlLCAweDFkLCAweGUwLCAweDYwLCAweDAyLCAweGQyLCAweDEyLCAweDkwLCAweDdlLCAweDFlLCAweGUwLCAweDYwLCAweDA4LCAweDc1LCAweDEwLCAweDAxLAorICAweGU0LCAweGY1LCAweDEyLCAweGQyLCAweDBlLCAweDkwLCAweDdlLCAweDFmLCAweGUwLCAweDYwLCAweDExLCAweDkwLCAweDdmLCAweGQ3LCAweDc0LCAweDExLAorICAweGYwLCAweDc0LCAweDMxLCAweGYwLCAweDc0LCAweDE1LCAweGYwLCAweDc0LCAweDM1LCAweGYwLCAweGQyLCAweDBjLCAweGMyLCAweDBkLCAweGU0LCAweDkwLAorICAweDdmLCAweGNmLCAweGYwLCAweDMwLCAweDE1LCAweDcxLCAweGU1LCAweDEyLCAweDYwLCAweDAyLCAweDE1LCAweDEyLCAweGU1LCAweDJlLCAweGQzfX0sCisgezB4MDNjNiwgNjQsIHsgMHg5NCwgMHgwMCwgMHg0MCwgMHgwNCwgMHgxNSwgMHgyZSwgMHg4MCwgMHg2MCwgMHg3NSwgMHgyZSwgMHgwYSwgMHgxMiwgMHgwZCwgMHgxNCwgMHhlZiwgMHg1NCwgMHgwMSwKKyAgMHhmNSwgMHgxYywgMHg2NSwgMHgwZSwgMHg2MCwgMHgwNywgMHg4NSwgMHgxYywgMHgwZSwgMHhkMiwgMHgwZSwgMHg4MCwgMHgxMSwgMHgxMiwgMHgwZCwgMHg1MCwKKyAgMHhlZiwgMHg1NCwgMHgxMCwgMHhmNSwgMHgxYywgMHg2NSwgMHgwOSwgMHg2MCwgMHgwNSwgMHg4NSwgMHgxYywgMHgwOSwgMHhkMiwgMHgwZSwgMHgxMiwgMHgwZCwKKyAgMHg1MCwgMHhlZiwgMHg1NCwgMHg4MCwgMHhmNSwgMHgxYywgMHg2NSwgMHgwYSwgMHg2MCwgMHgwNSwgMHg4NSwgMHgxYywgMHgwYSwgMHhkMiwgMHgwZX19LAorIHsweDA0MDYsIDY0LCB7IDB4MTIsIDB4MGQsIDB4NTAsIDB4ZWYsIDB4NTQsIDB4MjAsIDB4ZjUsIDB4MWMsIDB4NjUsIDB4MGIsIDB4NjAsIDB4MDgsIDB4ODUsIDB4MWMsIDB4MGIsIDB4MzAsIDB4MTAsCisgIDB4MDIsIDB4ZDIsIDB4MGUsIDB4MTIsIDB4MGQsIDB4NTAsIDB4ZWYsIDB4NTQsIDB4NDAsIDB4ZjUsIDB4MWMsIDB4NjUsIDB4MGMsIDB4NjAsIDB4MDgsIDB4ODUsCisgIDB4MWMsIDB4MGMsIDB4MzAsIDB4MTEsIDB4MDIsIDB4ZDIsIDB4MGUsIDB4MzAsIDB4MTUsIDB4MmEsIDB4OTAsIDB4N2YsIDB4ZDIsIDB4ZTAsIDB4MjAsIDB4ZTEsCisgIDB4MjMsIDB4OTAsIDB4N2IsIDB4NDAsIDB4ZTAsIDB4NjAsIDB4MDksIDB4ZTAsIDB4ZjUsIDB4MzAsIDB4OTAsIDB4N2IsIDB4NDIsIDB4ZTAsIDB4ZjV9fSwKKyB7MHgwNDQ2LCA2NCwgeyAweDMxLCAweDkwLCAweDdiLCAweDQxLCAweGUwLCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweGQ3LCAweDc0LCAweDE3LCAweGYwLCAweDc0LCAweDM3LCAweGYwLCAweGU0LAorICAweDkwLCAweDdmLCAweGQzLCAweGYwLCAweDkwLCAweDdmLCAweGMyLCAweGUwLCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDA1LCAweDFmLCAweGU1LCAweDI1LAorICAweDcwLCAweDQwLCAweDMwLCAweDBlLCAweDM5LCAweGU1LCAweDEyLCAweDcwLCAweDM1LCAweGMyLCAweDBlLCAweGY1LCAweDFiLCAweDdlLCAweDAwLCAweDdiLAorICAweDAwLCAweDc0LCAweDA4LCAweDI1LCAweDFiLCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyLCAweDA5LCAweGM3LCAweGZmLCAweDc0fX0sCisgezB4MDQ4NiwgNjQsIHsgMHg4MCwgMHgyNSwgMHgxYiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxYiwgMHhlNSwgMHgxYiwgMHhiNCwKKyAgMHgwOSwgMHhkYiwgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwOSwgMHhmMCwgMHg3NSwgMHgxMiwgMHgxMCwgMHhlNCwgMHhmNSwgMHgxMCwgMHg3NSwgMHgyNSwKKyAgMHgwMiwgMHgyMiwgMHhlNSwgMHgyNSwgMHg2NCwgMHgwMiwgMHg3MCwgMHgzNiwgMHgzMCwgMHgwNSwgMHgyZiwgMHhjMiwgMHgwNSwgMHhmNSwgMHgxYiwgMHg3ZSwKKyAgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgyOSwgMHgyNSwgMHgxYiwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgwOSwgMHhjN319LAorIHsweDA0YzYsIDY0LCB7IDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjUsIDB4MWIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MWIsIDB4ZTUsCisgIDB4MWIsIDB4YjQsIDB4MDUsIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDUsIDB4ZjAsIDB4NzUsIDB4MjUsIDB4MDMsIDB4MjIsIDB4ZTUsIDB4MzAsCisgIDB4NjAsIDB4MzMsIDB4NzUsIDB4MmYsIDB4MDMsIDB4MTUsIDB4MzAsIDB4ZTQsIDB4ZjUsIDB4MWIsIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MmYsCisgIDB4MjUsIDB4MWIsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MDksIDB4YzcsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjUsIDB4MWJ9fSwKKyB7MHgwNTA2LCA2NCwgeyAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDFiLCAweGU1LCAweDFiLCAweGI0LCAweDAzLCAweGRiLCAweDkwLAorICAweDdmLCAweGMzLCAweDc0LCAweDAzLCAweGYwLCAweGU0LCAweGY1LCAweDI1LCAweDIyLCAweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDEyLCAweDBhLCAweDFmLAorICAweDA1LCAweGY2LCAweDAwLCAweDA2LCAweDZhLCAweDAxLCAweDA2LCAweGQ3LCAweDAzLCAweDA1LCAweDQzLCAweDA2LCAweDA1LCAweGU5LCAweDA4LCAweDA1LAorICAweGUzLCAweDA5LCAweDA1LCAweGNiLCAweDBhLCAweDA1LCAweGRhLCAweDBiLCAweDAwLCAweDAwLCAweDA3LCAweDI3LCAweDkwLCAweDdmLCAweGVifX0sCisgezB4MDU0NiwgNjQsIHsgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxNiwgMHgxNCwgMHg2MCwgMHg1MCwgMHgyNCwgMHgwMiwgMHg3MCwgMHg2ZiwgMHg3NCwgMHgxOSwgMHg5MCwgMHg3ZiwgMHhkNCwKKyAgMHhmMCwgMHg3NCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwNywgMHgyZSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgwNCwKKyAgMHg3ZiwgMHgwMiwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMywgMHg3NSwgMHg4MiwgMHg4MiwgMHg3NSwgMHg4MywgMHgxOSwgMHhlZiwgMHhmMCwgMHg3NSwgMHg4MiwKKyAgMHg3NCwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NSwgMHg4MiwgMHg1OCwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYX19LAorIHsweDA1ODYsIDY0LCB7IDB4ZTAsIDB4MDQsIDB4NzUsIDB4ODIsIDB4MTcsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4NzQsIDB4MTksIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4NzQsIDB4MTIsCisgIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4MmUsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGEsIDB4NDUsIDB4ZWEsCisgIDB4NDksIDB4NjAsIDB4MGQsIDB4ZWEsIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4ZTksIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4MmUsCisgIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4MmUsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDR9fSwKKyB7MHgwNWM2LCA2NCwgeyAweDAxLCAweGYwLCAweDAyLCAweDA3LCAweDJlLCAweDkwLCAweDdmLCAweDAwLCAweGU1LCAweDI0LCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwLAorICAweDAyLCAweDA3LCAweDJlLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGY1LCAweDI0LCAweDAyLCAweDA3LCAweDJlLCAweDEyLCAweDA3LCAweDM2LCAweDAyLAorICAweDA3LCAweDJlLCAweDkwLCAweDdmLCAweDAwLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweGYwLCAweDAyLCAweDA3LCAweDJlLCAweDkwLAorICAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweDdmLCAweDYwLCAweDI0LCAweDE0LCAweDYwLCAweDMxLCAweDI0LCAweDAyLCAweDcwLCAweDViLCAweGEyfX0sCisgezB4MDYwNiwgNjQsIHsgMHgwMSwgMHhlNCwgMHgzMywgMHhmZiwgMHgyNSwgMHhlMCwgMHhmZiwgMHhhMiwgMHgwNywgMHhlNCwgMHgzMywgMHg0ZiwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwKKyAgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwNywgMHgyZSwgMHhlNCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwKKyAgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwNywgMHgyZSwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwKKyAgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNH19LAorIHsweDA2NDYsIDY0LCB7IDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4ZTQsIDB4YTMsIDB4ZjAsCisgIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4MmUsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsCisgIDB4MDIsIDB4MDcsIDB4MmUsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MWUsIDB4MjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsCisgIDB4MDcsIDB4MmUsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDYsIDB4MTIsIDB4MGQsIDB4NjMsIDB4MDIsIDB4MDcsIDB4MmV9fSwKKyB7MHgwNjg2LCA2NCwgeyAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDA3LCAweDJlLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDM4LCAweDkwLAorICAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LAorICAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweDkwLCAweDdmLCAweGVjLCAweGUwLAorICAweDU0LCAweDgwLCAweGZmLCAweDEzLCAweDEzLCAweDEzLCAweDU0LCAweDFmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDkwLCAweDdmfX0sCisgezB4MDZjNiwgNjQsIHsgMHhkNywgMHhmMCwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHg4MCwgMHg2MCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHg1NywKKyAgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxOSwgMHgyNCwgMHgwMiwgMHg3MCwgMHg0YiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwKKyAgMHhiNCwgMHgwMSwgMHgwNSwgMHgxMiwgMHgwZCwgMHg2MCwgMHg4MCwgMHgzZiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwKKyAgMHgzNiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZn19LAorIHsweDA3MDYsIDY0LCB7IDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsCisgIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MTAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MDcsCisgIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4MjIsIDB4ZTQsCisgIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsIDB4MzAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZjB9fSwKKyB7MHgwNzQ2LCA2NCwgeyAweDkwLCAweDdmLCAweDk1LCAweDc0LCAweGMwLCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LCAweDNmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE4LAorICAweGYwLCAweGU0LCAweGY1LCAweDhlLCAweDkwLCAweDdmLCAweGRmLCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGRlLCAweGYwLCAweGU0LCAweGY1LAorICAweDA4LCAweDdmLCAweDAxLCAweDdiLCAweDAwLCAweDc0LCAweDA4LCAweDJmLCAweGY5LCAweGU0LCAweDM0LCAweDAwLCAweGZhLCAweGU0LCAweDEyLCAweDBhLAorICAweDBkLCAweDBmLCAweGJmLCAweDA5LCAweGVlLCAweDc1LCAweDEzLCAweDAxLCAweGU0LCAweGY1LCAweDEyLCAweGY1LCAweDJlLCAweGY1LCAweDExfX0sCisgezB4MDc4NiwgNjQsIHsgMHhjMiwgMHgwZSwgMHhjMiwgMHgxMiwgMHhjMiwgMHgwZCwgMHhjMiwgMHgwYSwgMHhjMiwgMHgwZiwgMHhjMiwgMHgwNCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywKKyAgMHhmMCwgMHg3NSwgMHgxOCwgMHgwMywgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHgwMywgMHhmMCwgMHg3ZiwgMHgwYywgMHhlNCwgMHhmZCwgMHgxMiwgMHgwYywKKyAgMHgxYywgMHg3ZiwgMHgxMCwgMHg4ZiwgMHgxNywgMHgxMiwgMHgwYiwgMHhhYSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHg3ZiwgMHgwMSwKKyAgMHg4ZiwgMHgxNiwgMHhlZiwgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgwZiwgMHhlNCwgMHhmZCwgMHgxMiwgMHgwYywgMHgxY319LAorIHsweDA3YzYsIDY0LCB7IDB4ZTQsIDB4ZmYsIDB4N2UsIDB4YTMsIDB4YWQsIDB4MDYsIDB4OGQsIDB4MTUsIDB4MTIsIDB4MGMsIDB4MWMsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsCisgIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4N2YsIDB4MDUsIDB4N2QsIDB4N2YsIDB4MTIsIDB4MGMsIDB4MWMsIDB4N2YsIDB4MDEsIDB4MTIsIDB4MGMsCisgIDB4YWMsIDB4N2YsIDB4MDMsIDB4N2QsIDB4MDcsIDB4MTIsIDB4MGMsIDB4MWMsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4NzUsIDB4MTksCisgIDB4ODAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZDIsIDB4MDMsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTB9fSwKKyB7MHgwODA2LCA2NCwgeyAweGYwLCAweGFmLCAweDIzLCAweGU1LCAweDI4LCAweGY1LCAweDgyLCAweGU1LCAweDI3LCAweGY1LCAweDgzLCAweGMyLCAweGFmLCAweDA1LCAweDg2LCAweDkwLCAweGMwLAorICAweDAwLCAweDA1LCAweDg2LCAweGUwLCAweGEzLCAweDA1LCAweDg2LCAweGYwLCAweDA1LCAweDg2LCAweGRmLCAweGY3LCAweGQyLCAweGFmLCAweDIyLCAweDkwLAorICAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweGFmLCAweDIzLCAweGU1LCAweDI4LCAweGY1LCAweDgyLCAweGU1LCAweDI3LCAweGY1LCAweDgzLCAweGMyLAorICAweGFmLCAweDA1LCAweDg2LCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweDA1LCAweDg2LCAweGYwLCAweGEzLCAweDA1LCAweDg2LCAweGRmLCAweGY3fX0sCisgezB4MDg0NiwgNjQsIHsgMHgwNSwgMHg4NiwgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOCwgMHhmMCwgMHhhZiwgMHgyMywgMHhlNSwgMHgyOCwgMHhmNSwgMHg4MiwKKyAgMHhlNSwgMHgyNywgMHhmNSwgMHg4MywgMHhjMiwgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMCwgMHgwMCwgMHgwNSwgMHg4NiwgMHhlMCwgMHhhMywgMHgwNSwKKyAgMHg4NiwgMHhmMCwgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOCwgMHhmMCwgMHhhZiwKKyAgMHgyMywgMHhlNSwgMHgyOCwgMHhmNSwgMHg4MiwgMHhlNSwgMHgyNywgMHhmNSwgMHg4MywgMHhjMiwgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMH19LAorIHsweDA4ODYsIDY0LCB7IDB4MDAsIDB4ZTAsIDB4MDUsIDB4ODYsIDB4ZjAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4ZGYsIDB4ZjcsIDB4MDUsIDB4ODYsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4NzQsIDB4MDAsCisgIDB4ZjUsIDB4ODYsIDB4OTAsIDB4ZmQsIDB4YTUsIDB4N2MsIDB4MDUsIDB4YTMsIDB4ZTUsIDB4ODIsIDB4NDUsIDB4ODMsIDB4NzAsIDB4ZjksIDB4MjIsIDB4OTAsCisgIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4NDMsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4NzgsCisgIDB4N2YsIDB4ZTQsIDB4ZjYsIDB4ZDgsIDB4ZmQsIDB4NzUsIDB4ODEsIDB4MzEsIDB4MDIsIDB4MDgsIDB4ZmQsIDB4MDIsIDB4MDksIDB4NDIsIDB4ZTR9fSwKKyB7MHgwOGM2LCA2NCwgeyAweDkzLCAweGEzLCAweGY4LCAweGU0LCAweDkzLCAweGEzLCAweDQwLCAweDAzLCAweGY2LCAweDgwLCAweDAxLCAweGYyLCAweDA4LCAweGRmLCAweGY0LCAweDgwLCAweDI5LAorICAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweDU0LCAweDA3LCAweDI0LCAweDBjLCAweGM4LCAweGMzLCAweDMzLCAweGM0LCAweDU0LCAweDBmLCAweDQ0LCAweDIwLAorICAweGM4LCAweDgzLCAweDQwLCAweDA0LCAweGY0LCAweDU2LCAweDgwLCAweDAxLCAweDQ2LCAweGY2LCAweGRmLCAweGU0LCAweDgwLCAweDBiLCAweDAxLCAweDAyLAorICAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDkwLCAweDBjLCAweGNkLCAweGU0LCAweDdlLCAweDAxLCAweDkzLCAweDYwLCAweGJjfX0sCisgezB4MDkwNiwgNjQsIHsgMHhhMywgMHhmZiwgMHg1NCwgMHgzZiwgMHgzMCwgMHhlNSwgMHgwOSwgMHg1NCwgMHgxZiwgMHhmZSwgMHhlNCwgMHg5MywgMHhhMywgMHg2MCwgMHgwMSwgMHgwZSwgMHhjZiwKKyAgMHg1NCwgMHhjMCwgMHgyNSwgMHhlMCwgMHg2MCwgMHhhOCwgMHg0MCwgMHhiOCwgMHhlNCwgMHg5MywgMHhhMywgMHhmYSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwKKyAgMHhlNCwgMHg5MywgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhmMCwgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwKKyAgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhkZiwgMHhlOSwgMHhkZSwgMHhlNywgMHg4MCwgMHhiZSwgMHhkMiwgMHgxNCwgMHg5MCwgMHg3Zn19LAorIHsweDA5NDYsIDY0LCB7IDB4OTIsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4MTIsIDB4MGQsIDB4NjMsIDB4ZDIsIDB4ZTgsIDB4NDMsIDB4ZDgsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZGUsIDB4NzQsCisgIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YTksIDB4ZjAsCisgIDB4OTAsIDB4N2YsIDB4YWEsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWYsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4YWUsIDB4NzQsIDB4MGQsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4ZDIsIDB4MTUsIDB4MTIsIDB4MGMsIDB4NjYsIDB4YzIsIDB4MDIsIDB4ZTQsIDB4ZjV9fSwKKyB7MHgwOTg2LCA2NCwgeyAweDI2LCAweGY1LCAweDJlLCAweGMyLCAweDA4LCAweGMyLCAweDAzLCAweDkwLCAweDdmLCAweGExLCAweDA0LCAweGYwLCAweDkwLCAweDdmLCAweGQ4LCAweGUwLCAweDY1LAorICAweDFhLCAweDYwLCAweDEwLCAweDMwLCAweDAzLCAweDA1LCAweGQyLCAweDE1LCAweDEyLCAweDAwLCAweDQ2LCAweDkwLCAweDdmLCAweGQ4LCAweGUwLCAweGY1LAorICAweDFhLCAweDgwLCAweDA4LCAweDMwLCAweDAzLCAweDA1LCAweGMyLCAweDE1LCAweDEyLCAweDAwLCAweDQ2LCAweDMwLCAweDAyLCAweDA3LCAweGMyLCAweDAyLAorICAweDEyLCAweDA1LCAweDIwLCAweDgwLCAweGQ2LCAweDMwLCAweDA5LCAweGQzLCAweGMyLCAweDA5LCAweDEyLCAweDBhLCAweGJhLCAweDgwLCAweGNjfX0sCisgezB4MDljNiwgNjQsIHsgMHgyMiwgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwMiwgMHhlNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMiwKKyAgMHhlMywgMHgyMiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMiwgMHhiYiwgMHgwMSwgMHgwYywgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwKKyAgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwNiwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgMHhlNiwgMHgyMiwKKyAgMHhiYiwgMHhmZSwgMHgwNiwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgMHhlMiwgMHgyMiwgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNX19LAorIHsweDBhMDYsIDY0LCB7IDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZjAsIDB4MjIsIDB4NTAsCisgIDB4MDIsIDB4ZjcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDEsIDB4ZjMsIDB4MjIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4NzAsCisgIDB4MTIsIDB4NzQsIDB4MDEsIDB4OTMsIDB4NzAsIDB4MGQsIDB4YTMsIDB4YTMsIDB4OTMsIDB4ZjgsIDB4NzQsIDB4MDEsIDB4OTMsIDB4ZjUsIDB4ODIsIDB4ODgsCisgIDB4ODMsIDB4ZTQsIDB4NzMsIDB4NzQsIDB4MDIsIDB4OTMsIDB4NjgsIDB4NjAsIDB4ZWYsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ODAsIDB4ZGYsIDB4OGZ9fSwKKyB7MHgwYTQ2LCA2NCwgeyAweDFiLCAweGU0LCAweGY1LCAweDFjLCAweDc1LCAweDFkLCAweGZmLCAweDc1LCAweDFlLCAweDE5LCAweDc1LCAweDFmLCAweDg2LCAweGFiLCAweDFkLCAweGFhLCAweDFlLAorICAweGE5LCAweDFmLCAweDkwLCAweDAwLCAweDAxLCAweDEyLCAweDA5LCAweGUwLCAweGI0LCAweDAzLCAweDFkLCAweGFmLCAweDFjLCAweDA1LCAweDFjLCAweGVmLAorICAweGI1LCAweDFiLCAweDAxLCAweDIyLCAweDEyLCAweDA5LCAweGM3LCAweDdlLCAweDAwLCAweDI5LCAweGZmLCAweGVlLCAweDNhLCAweGE5LCAweDA3LCAweDc1LAorICAweDFkLCAweGZmLCAweGY1LCAweDFlLCAweDg5LCAweDFmLCAweDgwLCAweGQ0LCAweDdiLCAweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDAwLCAweDIyfX0sCisgezB4MGE4NiwgNjQsIHsgMHgwNSwgMHgyOCwgMHhlNSwgMHgyOCwgMHhhZSwgMHgyNywgMHg3MCwgMHgwMiwgMHgwNSwgMHgyNywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlNSwgMHgxMSwKKyAgMHhmMCwgMHgxMiwgMHgwMCwgMHgzNiwgMHgwNSwgMHgyOCwgMHhlNSwgMHgyOCwgMHhhYywgMHgyNywgMHg3MCwgMHgwMiwgMHgwNSwgMHgyNywgMHgxNCwgMHhmNSwKKyAgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHgxNSwgMHgyMywgMHhlNSwgMHgyMywgMHg2MCwgMHgwNywgMHgxMiwgMHgwZCwgMHg0NCwgMHg4ZiwgMHgxMSwKKyAgMHg4MCwgMHhjZCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkOCwgMHhlMCwgMHhmNSwgMHgxYiwgMHgxMiwgMHgwMCwgMHgwMywgMHg5MCwgMHg3ZiwgMHhkNn19LAorIHsweDBhYzYsIDY0LCB7IDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4MTIsIDB4MDgsIDB4YTYsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4MzAsIDB4ZTcsIDB4MGUsIDB4MzAsIDB4MDEsIDB4MDUsCisgIDB4MTIsIDB4MGMsIDB4ZmUsIDB4ODAsIDB4MDYsIDB4MTIsIDB4MGMsIDB4OGIsIDB4ZWYsIDB4NjAsIDB4ZTEsIDB4MTIsIDB4MDcsIDB4MzYsIDB4MjIsIDB4YzAsCisgIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4OTAsIDB4N2YsCisgIDB4YzQsIDB4ZTQsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDB9fSwKKyB7MHgwYjA2LCA2NCwgeyAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLAorICAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGQyLCAweDAyLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLAorICAweDc0LCAweDAxLCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLAorICAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwfX0sCisgezB4MGI0NiwgNjQsIHsgMHhkMiwgMHgwOSwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwOCwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwKKyAgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHgxOCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3Zn19LAorIHsweDBiODYsIDY0LCB7IDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsCisgIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4MTgsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTN9fSwKKyB7MHgwYmM2LCA2NCwgeyAweGYwLCAweGU1LCAweDE4LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLAorICAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDE4LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLAorICAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0fX0sCisgezB4MGMwNiwgNjQsIHsgMHgxNiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHgxOCwgMHg1NCwgMHg3ZiwKKyAgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHgxOCwgMHg1NCwgMHg3ZiwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgxNSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZCwgMHhmMCwgMHgyMiwgMHgxMiwgMHgwZCwgMHgyYywgMHg4ZiwgMHgxZH19LAorIHsweDBjNDYsIDY0LCB7IDB4MTIsIDB4MGQsIDB4MmMsIDB4OGYsIDB4MWUsIDB4ZTUsIDB4MWQsIDB4NjUsIDB4MWUsIDB4NjAsIDB4MTIsIDB4MTIsIDB4MGQsIDB4MmMsIDB4OGYsIDB4MWQsIDB4ZTUsCisgIDB4MWQsIDB4NjUsIDB4MWUsIDB4NjAsIDB4MDcsIDB4MTIsIDB4MGQsIDB4MmMsIDB4OGYsIDB4MWUsIDB4ODAsIDB4ZTgsIDB4YWYsIDB4MWQsIDB4MjIsIDB4OTAsCisgIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4MzAsIDB4MTUsIDB4MDQsIDB4ZTAsIDB4NDQsIDB4MDIsCisgIDB4ZjAsIDB4N2YsIDB4ZjQsIDB4N2UsIDB4MDEsIDB4MTIsIDB4MGMsIDB4ZTcsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjB9fSwKKyB7MHgwYzg2LCA2NCwgeyAweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweGQ4LCAweGUwLCAweGY1LCAweDFjLCAweDEyLCAweDA3LCAweDM2LCAweDEyLCAweDBkLCAweDUwLAorICAweGVmLCAweDMwLCAweGU2LCAweDBiLCAweDkwLCAweDdmLCAweGQ4LCAweGUwLCAweDY1LCAweDFjLCAweDYwLCAweGYxLCAweDdmLCAweDAxLCAweDIyLCAweDEyLAorICAweDAwLCAweDAzLCAweDdmLCAweDAwLCAweDIyLCAweGFlLCAweDA3LCAweGU0LCAweGZmLCAweGU1LCAweDE1LCAweDU0LCAweDdmLCAweGZkLCAweDEyLCAweDBjLAorICAweDFjLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVlLCAweGYwLCAweGU0LCAweGU1LCAweDE1fX0sCisgezB4MGNjNiwgNjQsIHsgMHg0NCwgMHg4MCwgMHhmZCwgMHgxMiwgMHgwYywgMHgxYywgMHgyMiwgMHgwNSwgMHgyOSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgyZiwgMHgwMywKKyAgMHgwMCwgMHgwMCwgMHhjMSwgMHg4NiwgMHhjMSwgMHgwMiwgMHhjMSwgMHgwOSwgMHhjMSwgMHgwMSwgMHhjMSwgMHgwNywgMHgwMSwgMHgyNSwgMHgwMCwgMHgwMCwKKyAgMHg4ZSwgMHgxYywgMHg4ZiwgMHgxZCwgMHhlNSwgMHgxZCwgMHgxNSwgMHgxZCwgMHhhZSwgMHgxYywgMHg3MCwgMHgwMiwgMHgxNSwgMHgxYywgMHg0ZSwgMHg2MCwKKyAgMHgwNSwgMHgxMiwgMHgwOCwgMHg5NSwgMHg4MCwgMHhlZSwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg3Zn19LAorIHsweDBkMDYsIDY0LCB7IDB4MGQsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MGMsIDB4ZTcsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsCisgIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4OTAsCisgIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsCisgIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwZDQ2LCA2NCwgeyAweDk4LCAweDc0LCAweDE1LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE2LCAweGYwLCAweDkwLAorICAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDUzLCAweGQ4LCAweGVmLCAweDMyLCAweGQyLCAweDAxLCAweDIyLCAweGMyLCAweDAxLCAweDIyLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MGQ4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDBkYzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MGIsIDB4MTAsIDB4MDAsIDB4MDIsIDB4MGV9fSwKKyB7MHgwZTA2LCA2NCwgeyAweDA0LCAweDAwLCAweDAyLCAweDBhLCAweGU2LCAweDAwLCAweDAyLCAweDBiLCAweDM3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MGU0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDBlODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgwZWM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MGYwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDBmNDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgwZjg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MGZjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEwMDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMDQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTA4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEwYzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMTA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTE0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDExODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMWM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTIwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEyNDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMjg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTJjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEzMDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxMzQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTM4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEzYzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNDA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTQ0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNGM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTUwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNTg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTVjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNjQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTY4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNzA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTc0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxN2M2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTgwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxODg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MThjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmZiwgMHgwMH19LAorIHsweDE5MDYsIDY0LCB7IDB4MDAsIDB4NDAsIDB4Y2QsIDB4MDYsIDB4MDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MDksIDB4MDIsIDB4NzQsIDB4MDAsIDB4MDEsCisgIDB4MDEsIDB4MDAsIDB4YTAsIDB4MzIsIDB4MDksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDEsCisgIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDMsIDB4MDIsIDB4NDAsCisgIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDQsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDUsIDB4MDIsIDB4NDAsIDB4MDB9fSwKKyB7MHgxOTQ2LCA2NCwgeyAweDAwLCAweDA3LCAweDA1LCAweDA2LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA3LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LAorICAweDgxLCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDgyLCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDgzLCAweDAyLAorICAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDg0LCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDg1LCAweDAyLCAweDQwLCAweDAwLAorICAweDAxLCAweDA3LCAweDA1LCAweDg2LCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDg3LCAweDAyLCAweDQwLCAweDAwLCAweDAxfX0sCisgezB4MTk4NiwgNjQsIHsgMHgwNCwgMHgwMywgMHgwOSwgMHgwNCwgMHg0OCwgMHgwMywgMHg0YiwgMHgwMCwgMHg2NSwgMHgwMCwgMHg3OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MSwKKyAgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyYywgMHgwMCwgMHgyMCwgMHgwMCwgMHg2MSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2OSwgMHgwMCwgMHg3NiwKKyAgMHgwMCwgMHg2OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg2OSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg2ZiwgMHgwMCwgMHg2NiwKKyAgMHgwMCwgMHgyMCwgMHgwMCwgMHg0OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHg1MywgMHgwMCwgMHg3OSwgMHgwMH19LAorIHsweDE5YzYsIDY0LCB7IDB4NzMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjMsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MzYsIDB4MDMsIDB4NGIsIDB4MDAsIDB4NjUsCisgIDB4MDAsIDB4NzksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NTUsIDB4MDAsIDB4NTMsCisgIDB4MDAsIDB4NDIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjksIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmMsCisgIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NjUsIDB4MDB9fSwKKyB7MHgxYTA2LCAgNCwgeyAweDcyLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4ZmZmZiwJMCwJezB4MDB9IH0KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2EyNm1zZy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjZtc2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODA4NzI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjZtc2cuaApAQCAtMCwwICsxLDI2MCBAQAorLyoKKwl1c2EyNm1zZy5oCisKKwlDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBJbm5vU3lzIEluY29ycG9yYXRlZC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKwlUaGlzIGZpbGUgaXMgYXZhaWxhYmxlIHVuZGVyIGEgQlNELXN0eWxlIGNvcHlyaWdodAorCisJS2V5c3BhbiBVU0IgQXN5bmMgTWVzc2FnZSBGb3JtYXRzIGZvciB0aGUgVVNBMjhYCisKKwlSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKwltb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisJbWV0OgorCisJMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoaXMgbGljZW5jZSB0ZXh0CisgICAJd2l0aG91dCBtb2RpZmljYXRpb24sIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICAgCWRpc2NsYWltZXIuICBUaGUgZm9sbG93aW5nIGNvcHlyaWdodCBub3RpY2UgbXVzdCBhcHBlYXIgaW1tZWRpYXRlbHkgYXQKKyAgIAl0aGUgYmVnaW5uaW5nIG9mIGFsbCBzb3VyY2UgZmlsZXM6CisKKyAgICAgICAgCUNvcHlyaWdodCAoQykgMTk5OC0yMDAwIElubm9TeXMgSW5jb3Jwb3JhdGVkLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorCisgICAgICAgIAlUaGlzIGZpbGUgaXMgYXZhaWxhYmxlIHVuZGVyIGEgQlNELXN0eWxlIGNvcHlyaWdodAorCisJMi4gVGhlIG5hbWUgb2YgSW5ub1N5cyBJbmNvcnBvcmF0ZWQgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgCXByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICAgCXBlcm1pc3Npb24uCisKKwlUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIElOTk9TWVMgQ09SUC4gYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorCUlNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKwlPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorCU5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKwlJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKwkoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKwlTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorCUNBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorCUxJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKwlPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisJU1VDSCBEQU1BR0UuICAgIAorCisJVGhpcmQgcmV2aXNpb246IFVTQTI4WCB2ZXJzaW9uIChha2EgVVNBMjYpCisKKwlCdWZmZXIgZm9ybWF0cyBmb3IgUlgvVFggZGF0YSBtZXNzYWdlcyBhcmUgbm90IGRlZmluZWQgYnkKKwlhIHN0cnVjdHVyZSwgYnV0IGFyZSBkZXNjcmliZWQgaGVyZToKKworCVVTQiBPVVQgKGhvc3QgLT4gVVNBeHgsIHRyYW5zbWl0KSBtZXNzYWdlcyBjb250YWluIGEgCisJUkVRVUVTVF9BQ0sgaW5kaWNhdG9yIChzZXQgdG8gMHhmZiB0byByZXF1ZXN0IGFuIEFDSyBhdCB0aGUgCisJY29tcGxldGlvbiBvZiB0cmFuc21pdDsgMHgwMCBvdGhlcndpc2UpLCBmb2xsb3dlZCBieSBkYXRhOgorCisJCVJRU1RBQ0sgREFUIERBVCBEQVQgLi4uCisKKwl3aXRoIGEgdG90YWwgZGF0YSBsZW5ndGggb2YgNjMuCisKKwlVU0IgSU4gKFVTQXh4IC0+IGhvc3QsIHJlY2VpdmUpIG1lc3NhZ2VzIGJlZ2luIHdpdGggYSBzdGF0dXMKKwlieXRlIGluIHdoaWNoIHRoZSAweDgwIGJpdCBpcyBlaXRoZXI6CisKKwkJKGEpCTB4ODAgYml0IGNsZWFyCisJCQlpbmRpY2F0ZXMgdGhhdCB0aGUgYnl0ZXMgZm9sbG93aW5nIGl0IGFyZSBhbGwgZGF0YQorCQkJYnl0ZXM6CisKKwkJCQlTVEFUIERBVEEgREFUQSBEQVRBIERBVEEgREFUQSAuLi4KKworCQkJZm9yIGEgdG90YWwgb2YgdXAgdG8gNjMgREFUQSBieXRlcywKKworCW9yOgorCisJCShiKQkweDgwIGJpdCBzZXQKKwkJCWluZGlhdGVzIHRoYXQgdGhlIGJ5dGVzIGZvbGxvd2luZyBhbHRlcm5hdGUgZGF0YSBhbmQKKwkJCXN0YXR1cyBieXRlczoKKworCQkJCVNUQVQgREFUQSBTVEFUIERBVEEgU1RBVCBEQVRBIFNUQVQgREFUQSAuLi4KKworCQkJZm9yIGEgdG90YWwgb2YgdXAgdG8gMzIgREFUQSBieXRlcy4KKworCVRoZSB2YWxpZCBiaXRzIGluIHRoZSBTVEFUIGJ5dGVzIGFyZToKKworCQlPVkVSUlVOCTB4MDIKKwkJUEFSSVRZCTB4MDQKKwkJRlJBTUlORwkweDA4CisJCUJSRUFLCTB4MTAKKworCU5vdGVzOgorCisJKDEpIFRoZSBPVkVSUlVOIGJpdCBjYW4gYXBwZWFyIGluIGVpdGhlciAoYSkgb3IgKGIpIGZvcm1hdAorCQltZXNzYWdlcywgYnV0IHRoZSBidXQgdGhlIFBBUklUWS9GUkFNSU5HL0JSRUFLIGJpdHMKKwkJb25seSBhcHBlYXIgaW4gKGIpIGZvcm1hdCBtZXNzYWdlcy4KKwkoMikgRm9yIHRoZSBob3N0IHRvIGRldGVybWluZSB0aGUgZXhhY3QgcG9pbnQgYXQgd2hpY2ggdGhlCisJCW92ZXJydW4gb2NjdXJyZWQgKHRvIGlkZW50aWZ5IHRoZSBwb2ludCBpbiB0aGUgZGF0YQorCQlzdHJlYW0gYXQgd2hpY2ggdGhlIGRhdGEgd2FzIGxvc3QpLCBpdCBuZWVkcyB0byBjb3VudAorCQkxMjggY2hhcmFjdGVycywgc3RhcnRpbmcgYXQgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUKKwkJbWVzc2FnZSBpbiB3aGljaCBPVkVSUlVOIHdhcyByZXBvcnRlZDsgdGhlIGxvc3QgY2hhcmFjdGVyKHMpCisJCXdvdWxkIGhhdmUgYmVlbiByZWNlaXZlZCBiZXR3ZWVuIHRoZSAxMjh0aCBhbmQgMTI5dGgKKwkJY2hhcmFjdGVycy4KKwkoMykJQW4gUlggZGF0YSBtZXNzYWdlIGluIHdoaWNoIHRoZSBmaXJzdCBieXRlIGhhcyAweDgwIGNsZWFyCisJCXNlcnZlcyBhcyBhICJicmVhayBvZmYiIGluZGljYXRvci4KKworCXJldmlzaW9uIGhpc3Rvcnk6CisKKwkxOTk5ZmViMTAJYWRkIHJlcG9ydEhza2lhQ2hhbmdlcyB0byBhbGxvdyB1cyB0byBpZ25vcmUgdGhlbQorCTE5OTlmZWIxMAlhZGQgdHhBY2tUaHJlc2hvbGQgZm9yIGZhc3QrbG9vc2UgdGhyb3VnaHB1dCBlbmhhbmNlbWVudAorCTE5OTltYXIzMAliZWVmIHVwIHN1cHBvcnQgZm9yIFJYIGVycm9yIHJlcG9ydGluZworCTE5OTlhcHIxNAlhZGQgcmVzZXREYXRhVG9nZ2xlIHRvIGNvbnRyb2wgbWVzc2FnZQorCTIwMDBqYW4wNAltZXJnZSB3aXRoIHVzYTE3bXNnLmgKKwkyMDAwanVuMDEJYWRkIGV4dGVuZGVkIEJTRC1zdHlsZSBjb3B5cmlnaHQgdGV4dAorCTIwMDFqdWwwNQljaGFuZ2UgbWVzc2FnZSBmb3JtYXQgdG8gaW1wcm92ZSBPVkVSUlVOIGNhc2UKKworCU5vdGUgb24gc2hhcmVkIG5hbWVzOgorCisJSW4gdGhlIGNhc2Ugb2YgZmllbGRzIHdoaWNoIGhhdmUgYmVlbiBtZXJnZWQgYmV0d2VlbiB0aGUgVVNBMTcKKwlhbmQgVVNBMjYgZGVmaW5pdGlvbnMsIHRoZSBVU0EyNiBkZWZpbml0aW9uIGlzIHRoZSBmaXJzdCBwYXJ0CisJb2YgdGhlIG5hbWUgYW5kIHRoZSBVU0ExNyBkZWZpbml0aW9uIGlzIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUKKwluYW1lOyBib3RoIG1lYW5pbmdzIGFyZSBkZXNjcmliZWQgYmVsb3cuCisqLworCisjaWZuZGVmCV9fVVNBMjZNU0dfXworI2RlZmluZQlfX1VTQTI2TVNHX18KKworCitzdHJ1Y3Qga2V5c3Bhbl91c2EyNl9wb3J0Q29udHJvbE1lc3NhZ2UKK3sKKwkvKgorCQl0aGVyZSBhcmUgdGhyZWUgdHlwZXMgb2YgImNvbW1hbmRzIiBzZW50IGluIHRoZSBjb250cm9sIG1lc3NhZ2U6CisKKwkJMS4JY29uZmlndXJhdGlvbiBjaGFuZ2VzIHdoaWNoIG11c3QgYmUgcmVxdWVzdGVkIGJ5IHNldHRpbmcKKwkJCXRoZSBjb3JyZXNwb25kaW5nICJzZXQiIGZsYWcgKGFuZCBzaG91bGQgb25seSBiZSByZXF1ZXN0ZWQKKwkJCXdoZW4gbmVjZXNzYXJ5LCB0byByZWR1Y2Ugb3ZlcmhlYWQgb24gdGhlIFVTQTI2KToKKwkqLworCXU4CXNldENsb2NraW5nLAkvLyBCT1RIOiBob3N0IHJlcXVlc3RzIGJhdWQgcmF0ZSBiZSBzZXQKKwkJYmF1ZExvLAkJLy8gQk9USDogaG9zdCBkb2VzIGJhdWQgZGl2aXNvciBjYWxjdWxhdGlvbgorCQliYXVkSGksCQkvLyBCT1RIOiBiYXVkSGkgaXMgb25seSB1c2VkIGZvciBmaXJzdCBwb3J0IChnaXZlcyBsb3dlciByYXRlcykKKwkJZXh0ZXJuYWxDbG9ja190eENsb2NraW5nLAorCQkJCQkvLyBVU0EyNjogMD1pbnRlcm5hbCwgb3RoZXI9ZXh0ZXJuYWwKKwkJCQkJLy8gVVNBMTc6IDA9aW50ZXJuYWwsIG90aGVyPWV4dGVybmFsL1JJCisJCXJ4Q2xvY2tpbmcsCQkvLyBVU0ExNzogMD1pbnRlcm5hbCwgMT1leHRlcm5hbC9SSSwgb3RoZXI9ZXh0ZXJuYWwvRFNSCisKKworCQlzZXRMY3IsCQkJLy8gQk9USDogaG9zdCByZXF1ZXN0cyBsY3IgYmUgc2V0CisJCWxjciwJCQkvLyBCT1RIOiB1c2UgUEFSSVRZLCBTVE9QQklUUywgREFUQUJJVFMgYmVsb3cKKworCQlzZXRGbG93Q29udHJvbCwJCS8vIEJPVEg6IGhvc3QgcmVxdWVzdHMgZmxvdyBjb250cm9sIGJlIHNldAorCQljdHNGbG93Q29udHJvbCwJCS8vIEJPVEg6IDE9dXNlIENUUyBmbG93IGNvbnRyb2wsIDA9ZG9uJ3QKKwkJeG9uRmxvd0NvbnRyb2wsCQkvLyBCT1RIOiAxPXVzZSBYT04vWE9GRiBmbG93IGNvbnRyb2wsIDA9ZG9uJ3QKKwkJeG9uQ2hhciwJCS8vIEJPVEg6IHNwZWNpZmllZCBpbiBjdXJyZW50IGNoYXJhY3RlciBmb3JtYXQKKwkJeG9mZkNoYXIsCQkvLyBCT1RIOiBzcGVjaWZpZWQgaW4gY3VycmVudCBjaGFyYWN0ZXIgZm9ybWF0CisKKwkJc2V0VHhUcmlTdGF0ZV9zZXRSdHMsCisJCQkJCS8vIFVTQTI2OiBob3N0IHJlcXVlc3RzIFRYIHRyaS1zdGF0ZSBiZSBzZXQKKwkJCQkJLy8gVVNBMTc6IGhvc3QgcmVxdWVzdHMgUlRTIG91dHB1dCBiZSBzZXQKKwkJdHhUcmlTdGF0ZV9ydHMsCQkvLyBCT1RIOiAxPWFjdGl2ZSAobm9ybWFsKSwgMD10cmlzdGF0ZSAob2ZmKQorCisJCXNldEhza29hX3NldER0ciwKKwkJCQkJLy8gVVNBMjY6IGhvc3QgcmVxdWVzdHMgSFNLT0Egb3V0cHV0IGJlIHNldAorCQkJCQkvLyBVU0ExNzogaG9zdCByZXF1ZXN0cyBEVFIgb3V0cHV0IGJlIHNldAorCQloc2tvYV9kdHIsCQkvLyBCT1RIOiAxPW9uLCAwPW9mZgorCisJCXNldFByZXNjYWxlciwJCS8vIFVTQTI2OiBob3N0IHJlcXVlc3RzIHByZXNjYWxhciBiZSBzZXQgKGRlZmF1bHQ6IDEzKQorCQlwcmVzY2FsZXI7CQkvLyBCT1RIOiBzcGVjaWZpZWQgYXMgTi84OyB2YWx1ZXMgOC1mZiBhcmUgdmFsaWQKKwkJCQkJLy8gbXVzdCBiZSBzZXQgYW55IHRpbWUgaW50ZXJuYWwgYmF1ZCByYXRlIGlzIHNldDsKKwkJCQkJLy8gbXVzdCBub3QgYmUgc2V0IHdoZW4gZXh0ZXJuYWwgY2xvY2tpbmcgaXMgdXNlZAorCQkJCQkvLyBub3RlOiBpbiBVU0ExNywgcHJlc2NhbGVyIGlzIGFwcGxpZWQgd2hlbmV2ZXIKKwkJCQkJLy8gc2V0Q2xvY2tpbmcgaXMgcmVxdWVzdGVkCisKKwkvKgorCQkzLgljb25maWd1cmF0aW9uIGRhdGEgd2hpY2ggaXMgc2ltcGx5IHVzZWQgYXMgaXMgKG5vIG92ZXJoZWFkLAorCQkJYnV0IG11c3QgYmUgc3BlY2lmaWVkIGNvcnJlY3RseSBpbiBldmVyeSBob3N0IG1lc3NhZ2UpLgorCSovCisJdTgJZm9yd2FyZGluZ0xlbmd0aCwgIC8vIEJPVEg6IGZvcndhcmQgd2hlbiB0aGlzIG51bWJlciBvZiBjaGFycyBhdmFpbGFibGUKKwkJcmVwb3J0SHNraWFDaGFuZ2VzX2RzckZsb3dDb250cm9sLAorCQkJCQkJLy8gVVNBMjY6IDE9bm9ybWFsOyAwPWlnbm9yZSBleHRlcm5hbCBjbG9jaworCQkJCQkJLy8gVVNBMTc6IDE9dXNlIERTUiBmbG93IGNvbnRyb2wsIDA9ZG9uJ3QKKwkJdHhBY2tUaHJlc2hvbGQsCS8vIEJPVEg6IDA9bm90IGFsbG93ZWQsIDE9bm9ybWFsLCAyLTI1NSBkZWxpdmVyIEFDSyBmYXN0ZXIKKwkJbG9vcGJhY2tNb2RlOwkvLyBCT1RIOiAwPW5vIGxvb3BiYWNrLCAxPWxvb3BiYWNrIGVuYWJsZWQKKworCS8qCisJCTQuCWNvbW1hbmRzIHdoaWNoIGFyZSBmbGFncyBvbmx5OyB0aGVzZSBhcmUgcHJvY2Vzc2VkIGluIG9yZGVyCisJCQkoc28gdGhhdCwgZS5nLiwgaWYgYm90aCBfdHhPbiBhbmQgX3R4T2ZmIGZsYWdzIGFyZSBzZXQsIHRoZQorCQkJcG9ydCBlbmRzIGluIGEgVFhfT0ZGIHN0YXRlKTsgYW55IG5vbi16ZXJvIHZhbHVlIGlzIHJlc3BlY3RlZAorCSovCisJdTgJX3R4T24sCQkJLy8gQk9USDogZW5hYmxlIHRyYW5zbWl0dGluZyAoYW5kIGNvbnRpbnVlIGlmIHRoZXJlJ3MgZGF0YSkKKwkJX3R4T2ZmLAkJCS8vIEJPVEg6IHN0b3AgdHJhbnNtaXR0aW5nCisJCXR4Rmx1c2gsCQkvLyBCT1RIOiB0b3NzIG91dGJvdW5kIGRhdGEKKwkJdHhCcmVhaywJCS8vIEJPVEg6IHR1cm4gb24gYnJlYWsgKGNsZWFyZWQgYnkgX3R4T24pCisJCXJ4T24sCQkJLy8gQk9USDogdHVybiBvbiByZWNlaXZlcgorCQlyeE9mZiwJCQkvLyBCT1RIOiB0dXJuIG9mZiByZWNlaXZlcgorCQlyeEZsdXNoLAkJLy8gQk9USDogdG9zcyBpbmJvdW5kIGRhdGEKKwkJcnhGb3J3YXJkLAkJLy8gQk9USDogZm9yd2FyZCBhbGwgaW5ib3VuZCBkYXRhLCBOT1cgKGFzIGlmIGZ3ZExlbj09MSkKKwkJcmV0dXJuU3RhdHVzLAkvLyBCT1RIOiByZXR1cm4gY3VycmVudCBzdGF0dXMgKGV2ZW4gaWYgaXQgaGFzbid0IGNoYW5nZWQpCisJCXJlc2V0RGF0YVRvZ2dsZTsvLyBCT1RIOiByZXNldCBkYXRhIHRvZ2dsZSBzdGF0ZSB0byBEQVRBMAorCQorfTsKKworLy8gZGVmaW5lcyBmb3IgYml0cyBpbiBsY3IKKyNkZWZpbmUJVVNBX0RBVEFCSVRTXzUJCTB4MDAKKyNkZWZpbmUJVVNBX0RBVEFCSVRTXzYJCTB4MDEKKyNkZWZpbmUJVVNBX0RBVEFCSVRTXzcJCTB4MDIKKyNkZWZpbmUJVVNBX0RBVEFCSVRTXzgJCTB4MDMKKyNkZWZpbmUJU1RPUEJJVFNfNTY3OF8xCTB4MDAJLy8gMSBzdG9wIGJpdCBmb3IgYWxsIGJ5dGUgc2l6ZXMKKyNkZWZpbmUJU1RPUEJJVFNfNV8xcDUJMHgwNAkvLyAxLjUgc3RvcCBiaXRzIGZvciA1LWJpdCBieXRlCisjZGVmaW5lCVNUT1BCSVRTXzY3OF8yCTB4MDQJLy8gMiBzdG9wIGJpdHMgZm9yIDYvNy84LWJpdCBieXRlCisjZGVmaW5lCVVTQV9QQVJJVFlfTk9ORQkJMHgwMAorI2RlZmluZQlVU0FfUEFSSVRZX09ERAkJMHgwOAorI2RlZmluZQlVU0FfUEFSSVRZX0VWRU4JCTB4MTgKKyNkZWZpbmUJUEFSSVRZXzEJCTB4MjgKKyNkZWZpbmUJUEFSSVRZXzAJCTB4MzgKKworLy8gYWxsIHRoaW5ncyBjYWxsZWQgIlN0YXR1c01lc3NhZ2UiIGFyZSBzZW50IG9uIHRoZSBzdGF0dXMgZW5kcG9pbnQKKworc3RydWN0IGtleXNwYW5fdXNhMjZfcG9ydFN0YXR1c01lc3NhZ2UJLy8gb25lIGZvciBlYWNoIHBvcnQKK3sKKwl1OAlwb3J0LAkJCS8vIEJPVEg6IDA9Zmlyc3QsIDE9c2Vjb25kLCBvdGhlcj1zZWUgYmVsb3cKKwkJaHNraWFfY3RzLAkJLy8gVVNBMjY6IHJlcG9ydHMgSFNLSUEgcGluCisJCQkJCQkvLyBVU0ExNzogcmVwb3J0cyBDVFMgcGluCisJCWdwaWFfZGNkLAkJLy8gVVNBMjY6IHJlcG9ydHMgR1BJQSBwaW4KKwkJCQkJCS8vIFVTQTE3OiByZXBvcnRzIERDRCBwaW4KKwkJZHNyLAkJCS8vIFVTQTE3OiByZXBvcnRzIERTUiBwaW4KKwkJcmksCQkJCS8vIFVTQTE3OiByZXBvcnRzIFJJIHBpbgorCQlfdHhPZmYsCQkJLy8gcG9ydCBoYXMgYmVlbiBkaXNhYmxlZCAoYnkgaG9zdCkKKwkJX3R4WG9mZiwJCS8vIHBvcnQgaXMgaW4gWE9GRiBzdGF0ZSAoZWl0aGVyIGhvc3Qgb3IgUlggWE9GRikKKwkJcnhFbmFibGVkLAkJLy8gYXMgY29uZmlndXJlZCBieSByeE9uL3J4T2ZmIDE9b24sIDA9b2ZmCisJCWNvbnRyb2xSZXNwb25zZTsvLyAxPWEgY29udHJvbCBtZXNzYWdlIGhhcyBiZWVuIHByb2Nlc3NlZAorfTsKKworLy8gYml0cyBpbiBSWCBkYXRhIG1lc3NhZ2Ugd2hlbiBTVEFUIGJ5dGUgaXMgaW5jbHVkZWQKKyNkZWZpbmUJUlhFUlJPUl9PVkVSUlVOCTB4MDIKKyNkZWZpbmUJUlhFUlJPUl9QQVJJVFkJMHgwNAorI2RlZmluZQlSWEVSUk9SX0ZSQU1JTkcJMHgwOAorI2RlZmluZQlSWEVSUk9SX0JSRUFLCTB4MTAKKworc3RydWN0IGtleXNwYW5fdXNhMjZfZ2xvYmFsQ29udHJvbE1lc3NhZ2UKK3sKKwl1OAlzZW5kR2xvYmFsU3RhdHVzLAkvLyAyPXJlcXVlc3QgZm9yIHR3byBzdGF0dXMgcmVzcG9uc2VzCisJCXJlc2V0U3RhdHVzVG9nZ2xlLAkvLyAxPXJlc2V0IGdsb2JhbCBzdGF0dXMgdG9nZ2xlCisJCXJlc2V0U3RhdHVzQ291bnQ7CS8vIGEgY3ljbGluZyB2YWx1ZQorfTsKKworc3RydWN0IGtleXNwYW5fdXNhMjZfZ2xvYmFsU3RhdHVzTWVzc2FnZQoreworCXU4CXBvcnQsCQkJCS8vIDMKKwkJc2VuZEdsb2JhbFN0YXR1cywJLy8gZnJvbSByZXF1ZXN0LCBkZWNyZW1lbnRlZAorCQlyZXNldFN0YXR1c0NvdW50OwkvLyBhcyBpbiByZXF1ZXN0Cit9OworCitzdHJ1Y3Qga2V5c3Bhbl91c2EyNl9nbG9iYWxEZWJ1Z01lc3NhZ2UKK3sKKwl1OAlwb3J0LAkJCQkvLyAyCisJCWEsCisJCWIsCisJCWMsCisJCWQ7Cit9OworCisvLyBpZTogdGhlIG1heGltdW0gbGVuZ3RoIG9mIGFuIEVaVVNCIGVuZHBvaW50IGJ1ZmZlcgorI2RlZmluZQlNQVhfREFUQV9MRU4JCQk2NAorCisvLyB1cGRhdGUgc3RhdHVzIGFwcHJveC4gNjAgdGltZXMgYSBzZWNvbmQgKDE2LjY2NjYgbXMpCisjZGVmaW5lCVNUQVRVU19VUERBVEVfSU5URVJWQUwJMTYKKworLy8gc3RhdHVzIHJhdGlvbmluZyB0dW5pbmcgdmFsdWUgKGVhY2ggcG9ydCBnZXRzIGNoZWNrZWQgZWFjaCBuIG1zKQorI2RlZmluZQlTVEFUVVNfUkFUSU9OCTEwCisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTI4X2Z3LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2EyOF9mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OGIwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2EyOF9mdy5oCkBAIC0wLDAgKzEsNDY2IEBACisvKiBrZXlzcGFuX3VzYTI4X2Z3LmgKKworCVRoZSBmaXJtd2FyZSBjb250YWluZWQgaGVyZWluIGFzIGtleXNwYW5fdXNhMjhfZncuaCBpcworCisJCUNvcHlyaWdodCAoQykgMTk5OS0yMDAxCisJCUtleXNwYW4sIEEgZGl2aXNpb24gb2YgSW5ub1N5cyBJbmNvcnBvcmF0ZWQgKCJLZXlzcGFuIikKKwkJCisJYXMgYW4gdW5wdWJsaXNoZWQgd29yay4gVGhpcyBub3RpY2UgZG9lcyBub3QgaW1wbHkgdW5yZXN0cmljdGVkIG9yCisJcHVibGljIGFjY2VzcyB0byB0aGUgc291cmNlIGNvZGUgZnJvbSB3aGljaCB0aGlzIGZpcm13YXJlIGltYWdlIGlzCisJZGVyaXZlZC4gIEV4Y2VwdCBhcyBub3RlZCBiZWxvdyB0aGlzIGZpcm13YXJlIGltYWdlIG1heSBub3QgYmUgCisJcmVwcm9kdWNlZCwgdXNlZCwgc29sZCBvciB0cmFuc2ZlcnJlZCB0byBhbnkgdGhpcmQgcGFydHkgd2l0aG91dCAKKwlLZXlzcGFuJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworCVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSAKKwlpbWFnZSBhcyBwYXJ0IG9mIGEgTGludXggb3Igb3RoZXIgT3BlbiBTb3VyY2Ugb3BlcmF0aW5nIHN5c3RlbSBrZXJuZWwgCisJaW4gdGV4dCBvciBiaW5hcnkgZm9ybSBhcyByZXF1aXJlZC4gCisKKwlUaGlzIGZpcm13YXJlIG1heSBub3QgYmUgbW9kaWZpZWQgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aCAgCisJS2V5c3BhbiBoYXJkd2FyZS4gIERpc3RyaWJ1dGlvbiBhbmQvb3IgTW9kaWZpY2F0aW9uIG9mIHRoZSAKKwlrZXlzcGFuLmMgZHJpdmVyIHdoaWNoIGluY2x1ZGVzIHRoaXMgZmlybXdhcmUsIGluIHdob2xlIG9yIGluIAorCXBhcnQsIHJlcXVpcmVzIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBzdGF0ZW1lbnQuIgorCisqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGV6dXNiX2hleF9yZWNvcmQga2V5c3Bhbl91c2EyOF9maXJtd2FyZVtdID0geworIHsweDAwMjYsIDEwLCB7IDB4MTIsIDB4MTcsIDB4ZGIsIDB4MTIsIDB4MTgsIDB4YjUsIDB4MTIsIDB4MTQsIDB4YzMsIDB4MjJ9fSwKKyB7MHgwMDMzLCAgMywgeyAweDAyLCAweDAwLCAweDFkfX0sCisgezB4MDAxZCwgIDQsIHsgMHg1MywgMHhkOCwgMHhlZiwgMHgzMn19LAorIHsweDAwMDYsIDE2LCB7IDB4OGUsIDB4MTIsIDB4OGYsIDB4MTMsIDB4ZTUsIDB4MTMsIDB4MTUsIDB4MTMsIDB4YWUsIDB4MTIsIDB4NzAsIDB4MDIsIDB4MTUsIDB4MTIsIDB4NGUsIDB4NjB9fSwKKyB7MHgwMDE2LCAgNywgeyAweDA1LCAweDEyLCAweDE4LCAweGE0LCAweDgwLCAweGVlLCAweDIyfX0sCisgezB4MDAwMywgIDMsIHsgMHgwMiwgMHgwMCwgMHg0Nn19LAorIHsweDAwNDYsIDE2LCB7IDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4YzAsIDB4ZDAsIDB4NzUsIDB4ZDAsIDB4MDh9fSwKKyB7MHgwMDU2LCAxNiwgeyAweDMwLCAweDk5LCAweDBlLCAweDMwLCAweDExLCAweDA3LCAweGEyLCAweDE3LCAweDkyLCAweDliLCAweDg1LCAweDQ2LCAweDk5LCAweGMyLCAweDk5LCAweGQyfX0sCisgezB4MDA2NiwgMTYsIHsgMHgxZiwgMHgzMCwgMHhjMSwgMHgwZSwgMHgzMCwgMHgxMiwgMHgwNywgMHhhMiwgMHgxOCwgMHg5MiwgMHhjMywgMHg4NSwgMHg0NywgMHhjMSwgMHhjMiwgMHhjMX19LAorIHsweDAwNzYsIDE2LCB7IDB4ZDIsIDB4MjAsIDB4MjAsIDB4MWYsIDB4MDMsIDB4MDIsIDB4MDQsIDB4NDIsIDB4YzIsIDB4MWYsIDB4MjAsIDB4MDMsIDB4MDMsIDB4MDIsIDB4MDIsIDB4Njd9fSwKKyB7MHgwMDg2LCAxNiwgeyAweDIwLCAweDExLCAweDAzLCAweDAyLCAweDAxLCAweDM4LCAweGU1LCAweDRhLCAweGMzLCAweDk1LCAweDdjLCAweDUwLCAweDNlLCAweDIwLCAweDEzLCAweDM2fX0sCisgezB4MDA5NiwgMTYsIHsgMHgyMCwgMHgwYiwgMHgzMywgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHgyMCwgMHhlMywgMHgwMywgMHgyMCwgMHgxYywgMHgyOSwgMHgzMCwgMHgxYiwgMHgxMn19LAorIHsweDAwYTYsIDE2LCB7IDB4YWUsIDB4NGEsIDB4MDUsIDB4NGEsIDB4NzQsIDB4NDAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTN9fSwKKyB7MHgwMGI2LCAxNiwgeyAweDkyLCAweDE3LCAweGFlLCAweDRhLCAweDA1LCAweDRhLCAweDc0LCAweDQwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzfX0sCisgezB4MDBjNiwgMTYsIHsgMHhlMCwgMHhmNSwgMHg0NiwgMHgwMiwgMHgwNCwgMHg0MCwgMHhjMiwgMHgxMSwgMHgwMiwgMHgwNCwgMHg0MCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhlNCwgMHhmMH19LAorIHsweDAwZDYsIDE2LCB7IDB4YzIsIDB4MDMsIDB4MzAsIDB4MTUsIDB4MGMsIDB4YzIsIDB4MTUsIDB4OTAsIDB4N2YsIDB4YmYsIDB4MDQsIDB4ZjAsIDB4YzIsIDB4MTEsIDB4MDIsIDB4MDR9fSwKKyB7MHgwMGU2LCAxNiwgeyAweDQwLCAweDkwLCAweDdmLCAweGM4LCAweGUwLCAweDMwLCAweGUxLCAweDA1LCAweGMyLCAweDExLCAweDAyLCAweDA0LCAweDQwLCAweDkwLCAweDdmLCAweGM5fX0sCisgezB4MDBmNiwgMTYsIHsgMHhlMCwgMHhmNSwgMHg3YywgMHg5MCwgMHg3ZCwgMHhjMCwgMHhlMCwgMHgxMywgMHg5MiwgMHgxNSwgMHgyMCwgMHgxMywgMHgyZCwgMHgyMCwgMHgwYiwgMHgyYX19LAorIHsweDAwNDMsICAzLCB7IDB4MDIsIDB4MWIsIDB4MDB9fSwKKyB7MHgwMDIzLCAgMywgeyAweDAyLCAweDAwLCAweDQ2fX0sCisgezB4MDAzYiwgIDMsIHsgMHgwMiwgMHgwMCwgMHg0Nn19LAorIHsweDAwMDAsICAzLCB7IDB4MDIsIDB4MTYsIDB4M2R9fSwKKyB7MHgwMTA2LCA2NCwgeyAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDIwLCAweGUzLCAweDAzLCAweDIwLCAweDFjLCAweDIwLCAweDMwLCAweDFiLCAweDExLCAweDkwLCAweDdkLCAweGMxLCAweGUwLAorICAweDEzLCAweDkyLCAweDE3LCAweGEzLCAweGUwLCAweGY1LCAweDQ2LCAweDc1LCAweDRhLCAweDAzLCAweDAyLCAweDA0LCAweDQwLCAweDc1LCAweDRhLCAweDAyLAorICAweDkwLCAweDdkLCAweGMxLCAweGUwLCAweGY1LCAweDQ2LCAweDAyLCAweDA0LCAweDQwLCAweDc1LCAweDRhLCAweDAxLCAweGMyLCAweDExLCAweDAyLCAweDA0LAorICAweDQwLCAweGU1LCAweDRhLCAweGMzLCAweDk1LCAweDdjLCAweDUwLCAweDAzLCAweDAyLCAweDAxLCAweGUwLCAweDkwLCAweDdmLCAweGM2LCAweGUwfX0sCisgezB4MDE0NiwgNjQsIHsgMHgzMCwgMHhlMSwgMHgwNywgMHhjMiwgMHgyMSwgMHhjMiwgMHgwNSwgMHgwMiwgMHgwNCwgMHg0MCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhlMCwgMHhmNSwgMHg3YywgMHg5MCwKKyAgMHg3ZSwgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgxNSwgMHgzMCwgMHgxMywgMHgwMywgMHgwMiwgMHgwMSwgMHhkOCwgMHgyMCwgMHgwYiwgMHg3MiwgMHgyMCwKKyAgMHgwMCwgMHg2ZiwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHgyMCwgMHhlMywgMHgwMywgMHgyMCwgMHgxYywgMHg2NSwgMHgzMCwgMHgxYiwgMHgxMCwgMHg5MCwKKyAgMHg3ZSwgMHg0MSwgMHhlMCwgMHgxMywgMHg5MiwgMHg5YiwgMHhhMywgMHhlMCwgMHhmNSwgMHg5OSwgMHg3NSwgMHg0YSwgMHgwMywgMHg4MCwgMHgwOX19LAorIHsweDAxODYsIDY0LCB7IDB4OTAsIDB4N2UsIDB4NDEsIDB4ZTAsIDB4ZjUsIDB4OTksIDB4NzUsIDB4NGEsIDB4MDIsIDB4ZTUsIDB4NGEsIDB4YzMsIDB4OTUsIDB4N2MsIDB4NDAsIDB4MTcsIDB4OTAsCisgIDB4N2YsIDB4YzcsIDB4ZTQsIDB4ZjAsIDB4YzIsIDB4MDMsIDB4MjAsIDB4MTUsIDB4MDMsIDB4MDIsIDB4MDQsIDB4NDAsIDB4YzIsIDB4MTUsIDB4OTAsIDB4N2YsCisgIDB4YmYsIDB4MDQsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4NDAsIDB4MzAsIDB4MWIsIDB4MTIsIDB4YWUsIDB4NGEsIDB4MDUsIDB4NGEsIDB4NzQsIDB4NDAsIDB4MmUsCisgIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTcsIDB4YWUsIDB4NGEsIDB4MDUsIDB4NGF9fSwKKyB7MHgwMWM2LCA2NCwgeyAweDc0LCAweDQwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDQ2LCAweGQyLCAweDExLCAweDAyLCAweDA0LAorICAweDQwLCAweDc1LCAweDRhLCAweDAxLCAweGMyLCAweDIxLCAweDAyLCAweDA0LCAweDQwLCAweDMwLCAweDEzLCAweDAzLCAweDAyLCAweDAyLCAweDYyLCAweDIwLAorICAweDBiLCAweDc5LCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDIwLCAweGUzLCAweDAzLCAweDIwLCAweDFjLCAweDZmLCAweDMwLCAweDFiLCAweDEyLCAweGFlLAorICAweDRhLCAweDA1LCAweDRhLCAweDc0LCAweDQwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGUwLCAweDEzfX0sCisgezB4MDIwNiwgNjQsIHsgMHg5MiwgMHg5YiwgMHhhZSwgMHg0YSwgMHgwNSwgMHg0YSwgMHg3NCwgMHg0MCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwKKyAgMHhmNSwgMHg5OSwgMHhlNSwgMHg0YSwgMHhjMywgMHg5NSwgMHg3YywgMHg0MCwgMHgxNywgMHg5MCwgMHg3ZiwgMHhjNywgMHhlNCwgMHhmMCwgMHhjMiwgMHgwMywKKyAgMHgyMCwgMHgxNSwgMHgwMywgMHgwMiwgMHgwNCwgMHg0MCwgMHhjMiwgMHgxNSwgMHg5MCwgMHg3ZiwgMHhiZiwgMHgwNCwgMHhmMCwgMHgwMiwgMHgwNCwgMHg0MCwKKyAgMHgzMCwgMHgxYiwgMHgxMiwgMHhhZSwgMHg0YSwgMHgwNSwgMHg0YSwgMHg3NCwgMHg0MCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZX19LAorIHsweDAyNDYsIDY0LCB7IDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTcsIDB4YWUsIDB4NGEsIDB4MDUsIDB4NGEsIDB4NzQsIDB4NDAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsCisgIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4NDYsIDB4ZDIsIDB4MTEsIDB4MDIsIDB4MDQsIDB4NDAsIDB4YzIsIDB4MjEsIDB4MDIsIDB4MDQsIDB4NDAsCisgIDB4MjAsIDB4MTEsIDB4MDMsIDB4MDIsIDB4MDMsIDB4MTksIDB4ZTUsIDB4NGEsIDB4YzMsIDB4OTUsIDB4N2MsIDB4NTAsIDB4M2UsIDB4MjAsIDB4MTMsIDB4MzYsCisgIDB4MjAsIDB4MGIsIDB4MzMsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4MjAsIDB4ZTMsIDB4MDMsIDB4MjAsIDB4MWMsIDB4MjksIDB4MzAsIDB4MWJ9fSwKKyB7MHgwMjg2LCA2NCwgeyAweDEyLCAweGFlLCAweDRhLCAweDA1LCAweDRhLCAweDc0LCAweGMwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweDEzLAorICAweDkyLCAweDE3LCAweGFlLCAweDRhLCAweDA1LCAweDRhLCAweDc0LCAweGMwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLAorICAweGUwLCAweGY1LCAweDQ2LCAweDAyLCAweDA0LCAweDQwLCAweGMyLCAweDExLCAweDAyLCAweDA0LCAweDQwLCAweDkwLCAweDdmLCAweGM5LCAweGU0LCAweGYwLAorICAweGQyLCAweDAzLCAweDMwLCAweDE1LCAweDBjLCAweGMyLCAweDE1LCAweDkwLCAweDdmLCAweGJmLCAweDA0LCAweGYwLCAweGMyLCAweDExLCAweDAyfX0sCisgezB4MDJjNiwgNjQsIHsgMHgwNCwgMHg0MCwgMHg5MCwgMHg3ZiwgMHhjNiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNSwgMHhjMiwgMHgxMSwgMHgwMiwgMHgwNCwgMHg0MCwgMHg5MCwgMHg3ZiwgMHhjNywKKyAgMHhlMCwgMHhmNSwgMHg3YywgMHg5MCwgMHg3ZSwgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgxNSwgMHgyMCwgMHgxMywgMHgyZCwgMHgyMCwgMHgwYiwgMHgyYSwKKyAgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHgyMCwgMHhlMywgMHgwMywgMHgyMCwgMHgxYywgMHgyMCwgMHgzMCwgMHgxYiwgMHgxMSwgMHg5MCwgMHg3ZSwgMHg0MSwKKyAgMHhlMCwgMHgxMywgMHg5MiwgMHgxNywgMHhhMywgMHhlMCwgMHhmNSwgMHg0NiwgMHg3NSwgMHg0YSwgMHgwMywgMHgwMiwgMHgwNCwgMHg0MCwgMHg3NX19LAorIHsweDAzMDYsIDY0LCB7IDB4NGEsIDB4MDIsIDB4OTAsIDB4N2UsIDB4NDEsIDB4ZTAsIDB4ZjUsIDB4NDYsIDB4MDIsIDB4MDQsIDB4NDAsIDB4NzUsIDB4NGEsIDB4MDEsIDB4YzIsIDB4MTEsIDB4MDIsCisgIDB4MDQsIDB4NDAsIDB4ZTUsIDB4NGEsIDB4YzMsIDB4OTUsIDB4N2MsIDB4NTAsIDB4MDMsIDB4MDIsIDB4MDMsIDB4YzEsIDB4OTAsIDB4N2YsIDB4YzgsIDB4ZTAsCisgIDB4MzAsIDB4ZTEsIDB4MDcsIDB4YzIsIDB4MjEsIDB4YzIsIDB4MDUsIDB4MDIsIDB4MDQsIDB4NDAsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZTAsIDB4ZjUsIDB4N2MsCisgIDB4OTAsIDB4N2QsIDB4YzAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTUsIDB4MzAsIDB4MTMsIDB4MDMsIDB4MDIsIDB4MDMsIDB4YjksIDB4MjAsIDB4MGJ9fSwKKyB7MHgwMzQ2LCA2NCwgeyAweDcyLCAweDIwLCAweDAwLCAweDZmLCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDIwLCAweGUzLCAweDAzLCAweDIwLCAweDFjLCAweDY1LCAweDMwLCAweDFiLCAweDEwLAorICAweDkwLCAweDdkLCAweGMxLCAweGUwLCAweDEzLCAweDkyLCAweDliLCAweGEzLCAweGUwLCAweGY1LCAweDk5LCAweDc1LCAweDRhLCAweDAzLCAweDgwLCAweDA5LAorICAweDkwLCAweDdkLCAweGMxLCAweGUwLCAweGY1LCAweDk5LCAweDc1LCAweDRhLCAweDAyLCAweGU1LCAweDRhLCAweGMzLCAweDk1LCAweDdjLCAweDQwLCAweDE3LAorICAweDkwLCAweDdmLCAweGM5LCAweGU0LCAweGYwLCAweGQyLCAweDAzLCAweDIwLCAweDE1LCAweDAzLCAweDAyLCAweDA0LCAweDQwLCAweGMyLCAweDE1fX0sCisgezB4MDM4NiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHhiZiwgMHgwNCwgMHhmMCwgMHgwMiwgMHgwNCwgMHg0MCwgMHgzMCwgMHgxYiwgMHgxMiwgMHhhZSwgMHg0YSwgMHgwNSwgMHg0YSwgMHg3NCwgMHhjMCwKKyAgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgxNywgMHhhZSwgMHg0YSwgMHgwNSwgMHg0YSwKKyAgMHg3NCwgMHhjMCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHg0NiwgMHhkMiwgMHgxMSwgMHgwMiwKKyAgMHgwNCwgMHg0MCwgMHg3NSwgMHg0YSwgMHgwMSwgMHhjMiwgMHgyMSwgMHgwMiwgMHgwNCwgMHg0MCwgMHgzMCwgMHgxMywgMHgwMywgMHgwMiwgMHgwNH19LAorIHsweDAzYzYsIDY0LCB7IDB4M2UsIDB4MjAsIDB4MGIsIDB4NzQsIDB4OTAsIDB4N2YsIDB4OWIsIDB4ZTAsIDB4MjAsIDB4ZTMsIDB4MDMsIDB4MjAsIDB4MWMsIDB4NmEsIDB4MzAsIDB4MWIsIDB4MTIsCisgIDB4YWUsIDB4NGEsIDB4MDUsIDB4NGEsIDB4NzQsIDB4YzAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsCisgIDB4OTIsIDB4OWIsIDB4YWUsIDB4NGEsIDB4MDUsIDB4NGEsIDB4NzQsIDB4YzAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsCisgIDB4ZTAsIDB4ZjUsIDB4OTksIDB4ZTUsIDB4NGEsIDB4YzMsIDB4OTUsIDB4N2MsIDB4NDAsIDB4MTMsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZTQsIDB4ZjB9fSwKKyB7MHgwNDA2LCA2NCwgeyAweGQyLCAweDAzLCAweDMwLCAweDE1LCAweDM1LCAweGMyLCAweDE1LCAweDkwLCAweDdmLCAweGJmLCAweDA0LCAweGYwLCAweDgwLCAweDJjLCAweDMwLCAweDFiLCAweDEyLAorICAweGFlLCAweDRhLCAweDA1LCAweDRhLCAweDc0LCAweGMwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweDEzLAorICAweDkyLCAweDE3LCAweGFlLCAweDRhLCAweDA1LCAweDRhLCAweDc0LCAweGMwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLAorICAweGUwLCAweGY1LCAweDQ2LCAweGQyLCAweDExLCAweDgwLCAweDAyLCAweGMyLCAweDIxLCAweGQyLCAweDI1LCAweDIwLCAweDIwLCAweDAzLCAweDAyfX0sCisgezB4MDQ0NiwgNjQsIHsgMHgwOCwgMHgwYywgMHhjMiwgMHgyMCwgMHgyMCwgMHgwNCwgMHgwMywgMHgwMiwgMHgwNiwgMHgzMSwgMHgyMCwgMHgxMiwgMHgwMywgMHgwMiwgMHgwNSwgMHgwMiwgMHhlNSwKKyAgMHg0YiwgMHhjMywgMHg5NSwgMHg3ZCwgMHg1MCwgMHgzZSwgMHgyMCwgMHgxNCwgMHgzNiwgMHgyMCwgMHgwZCwgMHgzMywgMHg5MCwgMHg3ZiwgMHg5YSwgMHhlMCwKKyAgMHgyMCwgMHhlNSwgMHgwMywgMHgyMCwgMHgxZSwgMHgyOSwgMHgzMCwgMHgxZCwgMHgxMiwgMHhhZSwgMHg0YiwgMHgwNSwgMHg0YiwgMHg3NCwgMHg0MCwgMHgyZSwKKyAgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgxOCwgMHhhZSwgMHg0YiwgMHgwNSwgMHg0Yn19LAorIHsweDA0ODYsIDY0LCB7IDB4NzQsIDB4NDAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4NDcsIDB4MDIsIDB4MDgsIDB4MGEsIDB4YzIsCisgIDB4MTIsIDB4MDIsIDB4MDgsIDB4MGEsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZTQsIDB4ZjAsIDB4YzIsIDB4MDQsIDB4MzAsIDB4MTYsIDB4MGMsIDB4YzIsIDB4MTYsCisgIDB4OTAsIDB4N2YsIDB4YzEsIDB4MDQsIDB4ZjAsIDB4YzIsIDB4MTIsIDB4MDIsIDB4MDgsIDB4MGEsIDB4OTAsIDB4N2YsIDB4Y2MsIDB4ZTAsIDB4MzAsIDB4ZTEsCisgIDB4MDUsIDB4YzIsIDB4MTIsIDB4MDIsIDB4MDgsIDB4MGEsIDB4OTAsIDB4N2YsIDB4Y2QsIDB4ZTAsIDB4ZjUsIDB4N2QsIDB4OTAsIDB4N2MsIDB4YzB9fSwKKyB7MHgwNGM2LCA2NCwgeyAweGUwLCAweDEzLCAweDkyLCAweDE2LCAweDIwLCAweDE0LCAweDJkLCAweDIwLCAweDBkLCAweDJhLCAweDkwLCAweDdmLCAweDlhLCAweGUwLCAweDIwLCAweGU1LCAweDAzLAorICAweDIwLCAweDFlLCAweDIwLCAweDMwLCAweDFkLCAweDExLCAweDkwLCAweDdjLCAweGMxLCAweGUwLCAweDEzLCAweDkyLCAweDE4LCAweGEzLCAweGUwLCAweGY1LAorICAweDQ3LCAweDc1LCAweDRiLCAweDAzLCAweDAyLCAweDA4LCAweDBhLCAweDc1LCAweDRiLCAweDAyLCAweDkwLCAweDdjLCAweGMxLCAweGUwLCAweGY1LCAweDQ3LAorICAweDAyLCAweDA4LCAweDBhLCAweDc1LCAweDRiLCAweDAxLCAweGMyLCAweDEyLCAweDAyLCAweDA4LCAweDBhLCAweGU1LCAweDRiLCAweGMzLCAweDk1fX0sCisgezB4MDUwNiwgNjQsIHsgMHg3ZCwgMHg1MCwgMHgwMywgMHgwMiwgMHgwNSwgMHhhYSwgMHg5MCwgMHg3ZiwgMHhjYSwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNywgMHhjMiwgMHgyMiwgMHhjMiwgMHgwNiwKKyAgMHgwMiwgMHgwOCwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhjYiwgMHhlMCwgMHhmNSwgMHg3ZCwgMHg5MCwgMHg3ZCwgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgxNiwKKyAgMHgzMCwgMHgxNCwgMHgwMywgMHgwMiwgMHgwNSwgMHhhMiwgMHgyMCwgMHgwZCwgMHg3MiwgMHgyMCwgMHgwMCwgMHg2ZiwgMHg5MCwgMHg3ZiwgMHg5YSwgMHhlMCwKKyAgMHgyMCwgMHhlNSwgMHgwMywgMHgyMCwgMHgxZSwgMHg2NSwgMHgzMCwgMHgxZCwgMHgxMCwgMHg5MCwgMHg3ZCwgMHg0MSwgMHhlMCwgMHgxMywgMHg5Mn19LAorIHsweDA1NDYsIDY0LCB7IDB4YzMsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4YzEsIDB4NzUsIDB4NGIsIDB4MDMsIDB4ODAsIDB4MDksIDB4OTAsIDB4N2QsIDB4NDEsIDB4ZTAsIDB4ZjUsIDB4YzEsIDB4NzUsCisgIDB4NGIsIDB4MDIsIDB4ZTUsIDB4NGIsIDB4YzMsIDB4OTUsIDB4N2QsIDB4NDAsIDB4MTcsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZTQsIDB4ZjAsIDB4YzIsIDB4MDQsCisgIDB4MjAsIDB4MTYsIDB4MDMsIDB4MDIsIDB4MDgsIDB4MGEsIDB4YzIsIDB4MTYsIDB4OTAsIDB4N2YsIDB4YzEsIDB4MDQsIDB4ZjAsIDB4MDIsIDB4MDgsIDB4MGEsCisgIDB4MzAsIDB4MWQsIDB4MTIsIDB4YWUsIDB4NGIsIDB4MDUsIDB4NGIsIDB4NzQsIDB4NDAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2R9fSwKKyB7MHgwNTg2LCA2NCwgeyAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDE4LCAweGFlLCAweDRiLCAweDA1LCAweDRiLCAweDc0LCAweDQwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LAorICAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDQ3LCAweGQyLCAweDEyLCAweDAyLCAweDA4LCAweDBhLCAweDc1LCAweDRiLCAweDAxLCAweGMyLCAweDIyLAorICAweDAyLCAweDA4LCAweDBhLCAweDMwLCAweDE0LCAweDAzLCAweDAyLCAweDA2LCAweDJjLCAweDIwLCAweDBkLCAweDc5LCAweDkwLCAweDdmLCAweDlhLCAweGUwLAorICAweDIwLCAweGU1LCAweDAzLCAweDIwLCAweDFlLCAweDZmLCAweDMwLCAweDFkLCAweDEyLCAweGFlLCAweDRiLCAweDA1LCAweDRiLCAweDc0LCAweDQwfX0sCisgezB4MDVjNiwgNjQsIHsgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHhjMywgMHhhZSwgMHg0YiwgMHgwNSwgMHg0YiwgMHg3NCwKKyAgMHg0MCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHhjMSwgMHhlNSwgMHg0YiwgMHhjMywgMHg5NSwKKyAgMHg3ZCwgMHg0MCwgMHgxNywgMHg5MCwgMHg3ZiwgMHhjYiwgMHhlNCwgMHhmMCwgMHhjMiwgMHgwNCwgMHgyMCwgMHgxNiwgMHgwMywgMHgwMiwgMHgwOCwgMHgwYSwKKyAgMHhjMiwgMHgxNiwgMHg5MCwgMHg3ZiwgMHhjMSwgMHgwNCwgMHhmMCwgMHgwMiwgMHgwOCwgMHgwYSwgMHgzMCwgMHgxZCwgMHgxMiwgMHhhZSwgMHg0Yn19LAorIHsweDA2MDYsIDY0LCB7IDB4MDUsIDB4NGIsIDB4NzQsIDB4NDAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTgsIDB4YWUsCisgIDB4NGIsIDB4MDUsIDB4NGIsIDB4NzQsIDB4NDAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4NDcsCisgIDB4ZDIsIDB4MTIsIDB4MDIsIDB4MDgsIDB4MGEsIDB4YzIsIDB4MjIsIDB4MDIsIDB4MDgsIDB4MGEsIDB4MjAsIDB4MTIsIDB4MDMsIDB4MDIsIDB4MDYsIDB4ZTMsCisgIDB4ZTUsIDB4NGIsIDB4YzMsIDB4OTUsIDB4N2QsIDB4NTAsIDB4M2UsIDB4MjAsIDB4MTQsIDB4MzYsIDB4MjAsIDB4MGQsIDB4MzMsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwNjQ2LCA2NCwgeyAweDlhLCAweGUwLCAweDIwLCAweGU1LCAweDAzLCAweDIwLCAweDFlLCAweDI5LCAweDMwLCAweDFkLCAweDEyLCAweGFlLCAweDRiLCAweDA1LCAweDRiLCAweDc0LCAweGMwLAorICAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdjLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDE4LCAweGFlLCAweDRiLCAweDA1LCAweDRiLAorICAweDc0LCAweGMwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdjLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDQ3LCAweDAyLCAweDA4LCAweDBhLAorICAweGMyLCAweDEyLCAweDAyLCAweDA4LCAweDBhLCAweDkwLCAweDdmLCAweGNkLCAweGU0LCAweGYwLCAweGQyLCAweDA0LCAweDMwLCAweDE2LCAweDBjfX0sCisgezB4MDY4NiwgNjQsIHsgMHhjMiwgMHgxNiwgMHg5MCwgMHg3ZiwgMHhjMSwgMHgwNCwgMHhmMCwgMHhjMiwgMHgxMiwgMHgwMiwgMHgwOCwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhjYSwgMHhlMCwgMHgzMCwKKyAgMHhlMSwgMHgwNSwgMHhjMiwgMHgxMiwgMHgwMiwgMHgwOCwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhjYiwgMHhlMCwgMHhmNSwgMHg3ZCwgMHg5MCwgMHg3ZCwgMHg0MCwKKyAgMHhlMCwgMHgxMywgMHg5MiwgMHgxNiwgMHgyMCwgMHgxNCwgMHgyZCwgMHgyMCwgMHgwZCwgMHgyYSwgMHg5MCwgMHg3ZiwgMHg5YSwgMHhlMCwgMHgyMCwgMHhlNSwKKyAgMHgwMywgMHgyMCwgMHgxZSwgMHgyMCwgMHgzMCwgMHgxZCwgMHgxMSwgMHg5MCwgMHg3ZCwgMHg0MSwgMHhlMCwgMHgxMywgMHg5MiwgMHgxOCwgMHhhM319LAorIHsweDA2YzYsIDY0LCB7IDB4ZTAsIDB4ZjUsIDB4NDcsIDB4NzUsIDB4NGIsIDB4MDMsIDB4MDIsIDB4MDgsIDB4MGEsIDB4NzUsIDB4NGIsIDB4MDIsIDB4OTAsIDB4N2QsIDB4NDEsIDB4ZTAsIDB4ZjUsCisgIDB4NDcsIDB4MDIsIDB4MDgsIDB4MGEsIDB4NzUsIDB4NGIsIDB4MDEsIDB4YzIsIDB4MTIsIDB4MDIsIDB4MDgsIDB4MGEsIDB4ZTUsIDB4NGIsIDB4YzMsIDB4OTUsCisgIDB4N2QsIDB4NTAsIDB4MDMsIDB4MDIsIDB4MDcsIDB4OGIsIDB4OTAsIDB4N2YsIDB4Y2MsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDcsIDB4YzIsIDB4MjIsIDB4YzIsCisgIDB4MDYsIDB4MDIsIDB4MDgsIDB4MGEsIDB4OTAsIDB4N2YsIDB4Y2QsIDB4ZTAsIDB4ZjUsIDB4N2QsIDB4OTAsIDB4N2MsIDB4YzAsIDB4ZTAsIDB4MTN9fSwKKyB7MHgwNzA2LCA2NCwgeyAweDkyLCAweDE2LCAweDMwLCAweDE0LCAweDAzLCAweDAyLCAweDA3LCAweDgzLCAweDIwLCAweDBkLCAweDcyLCAweDIwLCAweDAwLCAweDZmLCAweDkwLCAweDdmLCAweDlhLAorICAweGUwLCAweDIwLCAweGU1LCAweDAzLCAweDIwLCAweDFlLCAweDY1LCAweDMwLCAweDFkLCAweDEwLCAweDkwLCAweDdjLCAweGMxLCAweGUwLCAweDEzLCAweDkyLAorICAweGMzLCAweGEzLCAweGUwLCAweGY1LCAweGMxLCAweDc1LCAweDRiLCAweDAzLCAweDgwLCAweDA5LCAweDkwLCAweDdjLCAweGMxLCAweGUwLCAweGY1LCAweGMxLAorICAweDc1LCAweDRiLCAweDAyLCAweGU1LCAweDRiLCAweGMzLCAweDk1LCAweDdkLCAweDQwLCAweDE3LCAweDkwLCAweDdmLCAweGNkLCAweGU0LCAweGYwfX0sCisgezB4MDc0NiwgNjQsIHsgMHhkMiwgMHgwNCwgMHgyMCwgMHgxNiwgMHgwMywgMHgwMiwgMHgwOCwgMHgwYSwgMHhjMiwgMHgxNiwgMHg5MCwgMHg3ZiwgMHhjMSwgMHgwNCwgMHhmMCwgMHgwMiwgMHgwOCwKKyAgMHgwYSwgMHgzMCwgMHgxZCwgMHgxMiwgMHhhZSwgMHg0YiwgMHgwNSwgMHg0YiwgMHg3NCwgMHhjMCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YywKKyAgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgxOCwgMHhhZSwgMHg0YiwgMHgwNSwgMHg0YiwgMHg3NCwgMHhjMCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwKKyAgMHgzNCwgMHg3YywgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHg0NywgMHhkMiwgMHgxMiwgMHgwMiwgMHgwOCwgMHgwYSwgMHg3NSwgMHg0YiwgMHgwMX19LAorIHsweDA3ODYsIDY0LCB7IDB4YzIsIDB4MjIsIDB4MDIsIDB4MDgsIDB4MGEsIDB4MzAsIDB4MTQsIDB4MDMsIDB4MDIsIDB4MDgsIDB4MDgsIDB4MjAsIDB4MGQsIDB4NzQsIDB4OTAsIDB4N2YsIDB4OWEsCisgIDB4ZTAsIDB4MjAsIDB4ZTUsIDB4MDMsIDB4MjAsIDB4MWUsIDB4NmEsIDB4MzAsIDB4MWQsIDB4MTIsIDB4YWUsIDB4NGIsIDB4MDUsIDB4NGIsIDB4NzQsIDB4YzAsCisgIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2MsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4YzMsIDB4YWUsIDB4NGIsIDB4MDUsIDB4NGIsCisgIDB4NzQsIDB4YzAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2MsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4YzEsIDB4ZTUsIDB4NGJ9fSwKKyB7MHgwN2M2LCA2NCwgeyAweGMzLCAweDk1LCAweDdkLCAweDQwLCAweDEzLCAweDkwLCAweDdmLCAweGNkLCAweGU0LCAweGYwLCAweGQyLCAweDA0LCAweDMwLCAweDE2LCAweDM1LCAweGMyLCAweDE2LAorICAweDkwLCAweDdmLCAweGMxLCAweDA0LCAweGYwLCAweDgwLCAweDJjLCAweDMwLCAweDFkLCAweDEyLCAweGFlLCAweDRiLCAweDA1LCAweDRiLCAweDc0LCAweGMwLAorICAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdjLCAweGY1LCAweDgzLCAweGUwLCAweDEzLCAweDkyLCAweDE4LCAweGFlLCAweDRiLCAweDA1LCAweDRiLAorICAweDc0LCAweGMwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdjLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDQ3LCAweGQyLCAweDEyfX0sCisgezB4MDgwNiwgNjQsIHsgMHg4MCwgMHgwMiwgMHhjMiwgMHgyMiwgMHhkMiwgMHgyNSwgMHgyMCwgMHg5OCwgMHgwMywgMHgwMiwgMHgwOSwgMHgzZSwgMHhjMiwgMHg5OCwgMHgyMCwgMHgwMSwgMHgwMywKKyAgMHgwMiwgMHgwOCwgMHhiMCwgMHgyMCwgMHgyMywgMHgyNywgMHhhZSwgMHg0OCwgMHgwNSwgMHg0OCwgMHg3NCwgMHg4MCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwKKyAgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg5OSwgMHhmMCwgMHgzMCwgMHgxYiwgMHg0OSwgMHhhZSwgMHg0OCwgMHgwNSwgMHg0OCwgMHg3NCwgMHg4MCwKKyAgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg5OCwgMHhmMCwgMHg4MCwgMHgzNiwgMHhhZiwgMHg5OX19LAorIHsweDA4NDYsIDY0LCB7IDB4ZWYsIDB4YjUsIDB4NTgsIDB4MDQsIDB4ZDIsIDB4MGIsIDB4ODAsIDB4MmMsIDB4ZWYsIDB4YjUsIDB4NTcsIDB4MDQsIDB4YzIsIDB4MGIsIDB4ODAsIDB4MjQsIDB4YWUsCisgIDB4NDgsIDB4MDUsIDB4NDgsIDB4NzQsIDB4ODAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MzAsCisgIDB4MWIsIDB4MTEsIDB4YWUsIDB4NDgsIDB4MDUsIDB4NDgsIDB4NzQsIDB4ODAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsCisgIDB4ZTUsIDB4OTgsIDB4ZjAsIDB4ZDIsIDB4MTksIDB4ZTUsIDB4NDgsIDB4YzMsIDB4OTUsIDB4NTQsIDB4NTAsIDB4MDMsIDB4MDIsIDB4MDksIDB4M2N9fSwKKyB7MHgwODg2LCA2NCwgeyAweDkwLCAweDdmLCAweGI4LCAweGUwLCAweDMwLCAweGUxLCAweDE1LCAweGU1LCAweDQ4LCAweGMzLCAweDk0LCAweDQwLCAweDUwLCAweDAzLCAweDAyLCAweDA5LCAweDNjLAorICAweDE1LCAweDQ4LCAweDE1LCAweDQ4LCAweDA1LCAweDJkLCAweGQyLCAweDBjLCAweDAyLCAweDA5LCAweDNjLCAweDkwLCAweDdmLCAweGI3LCAweGU1LCAweDQ4LAorICAweGYwLCAweDc1LCAweDQ4LCAweDAwLCAweGMyLCAweDAxLCAweDAyLCAweDA5LCAweDNjLCAweDIwLCAweDIzLCAweDI3LCAweGFlLCAweDQ4LCAweDA1LCAweDQ4LAorICAweDc0LCAweDAwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdlLCAweGY1LCAweDgzLCAweGU1LCAweDk5LCAweGYwLCAweDMwLCAweDFifX0sCisgezB4MDhjNiwgNjQsIHsgMHg0OSwgMHhhZSwgMHg0OCwgMHgwNSwgMHg0OCwgMHg3NCwgMHgwMCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlNSwgMHg5OCwKKyAgMHhmMCwgMHg4MCwgMHgzNiwgMHhhZiwgMHg5OSwgMHhlZiwgMHhiNSwgMHg1OCwgMHgwNCwgMHhkMiwgMHgwYiwgMHg4MCwgMHgyYywgMHhlZiwgMHhiNSwgMHg1NywKKyAgMHgwNCwgMHhjMiwgMHgwYiwgMHg4MCwgMHgyNCwgMHhhZSwgMHg0OCwgMHgwNSwgMHg0OCwgMHg3NCwgMHgwMCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwKKyAgMHg3ZSwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgzMCwgMHgxYiwgMHgxMSwgMHhhZSwgMHg0OCwgMHgwNSwgMHg0OCwgMHg3NCwgMHgwMCwgMHgyZX19LAorIHsweDA5MDYsIDY0LCB7IDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4OTgsIDB4ZjAsIDB4ZDIsIDB4MTksIDB4ZTUsIDB4NDgsIDB4YzMsIDB4OTUsIDB4NTQsCisgIDB4NDAsIDB4MjMsIDB4OTAsIDB4N2YsIDB4YjYsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MTEsIDB4ZTUsIDB4NDgsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NDAsIDB4MTUsCisgIDB4MTUsIDB4NDgsIDB4MTUsIDB4NDgsIDB4MDUsIDB4MmQsIDB4ZDIsIDB4MGMsIDB4ODAsIDB4MGIsIDB4OTAsIDB4N2YsIDB4YjksIDB4ZTUsIDB4NDgsIDB4ZjAsCisgIDB4NzUsIDB4NDgsIDB4MDAsIDB4ZDIsIDB4MDEsIDB4ZDIsIDB4MjUsIDB4MjAsIDB4YzAsIDB4MDMsIDB4MDIsIDB4MGEsIDB4NzAsIDB4YzIsIDB4YzB9fSwKKyB7MHgwOTQ2LCA2NCwgeyAweDIwLCAweDAyLCAweDAzLCAweDAyLCAweDA5LCAweGUyLCAweDIwLCAweDI0LCAweDI3LCAweGFlLCAweDQ5LCAweDA1LCAweDQ5LCAweDc0LCAweDgwLCAweDJlLCAweGY1LAorICAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGU1LCAweGMxLCAweGYwLCAweDMwLCAweDFkLCAweDQ5LCAweGFlLCAweDQ5LCAweDA1LCAweDQ5LAorICAweDc0LCAweDgwLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGU1LCAweGMwLCAweGYwLCAweDgwLCAweDM2LCAweGFmLAorICAweGMxLCAweGVmLCAweGI1LCAweDcwLCAweDA0LCAweGQyLCAweDBkLCAweDgwLCAweDJjLCAweGVmLCAweGI1LCAweDZmLCAweDA0LCAweGMyLCAweDBkfX0sCisgezB4MDk4NiwgNjQsIHsgMHg4MCwgMHgyNCwgMHhhZSwgMHg0OSwgMHgwNSwgMHg0OSwgMHg3NCwgMHg4MCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlZiwKKyAgMHhmMCwgMHgzMCwgMHgxZCwgMHgxMSwgMHhhZSwgMHg0OSwgMHgwNSwgMHg0OSwgMHg3NCwgMHg4MCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwKKyAgMHhmNSwgMHg4MywgMHhlNSwgMHhjMCwgMHhmMCwgMHhkMiwgMHgxYSwgMHhlNSwgMHg0OSwgMHhjMywgMHg5NSwgMHg2YywgMHg1MCwgMHgwMywgMHgwMiwgMHgwYSwKKyAgMHg2ZSwgMHg5MCwgMHg3ZiwgMHhiYywgMHhlMCwgMHgzMCwgMHhlMSwgMHgxNSwgMHhlNSwgMHg0OSwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHgwM319LAorIHsweDA5YzYsIDY0LCB7IDB4MDIsIDB4MGEsIDB4NmUsIDB4MTUsIDB4NDksIDB4MTUsIDB4NDksIDB4MDUsIDB4MzksIDB4ZDIsIDB4MGUsIDB4MDIsIDB4MGEsIDB4NmUsIDB4OTAsIDB4N2YsIDB4YmIsCisgIDB4ZTUsIDB4NDksIDB4ZjAsIDB4NzUsIDB4NDksIDB4MDAsIDB4YzIsIDB4MDIsIDB4MDIsIDB4MGEsIDB4NmUsIDB4MjAsIDB4MjQsIDB4MjcsIDB4YWUsIDB4NDksCisgIDB4MDUsIDB4NDksIDB4NzQsIDB4MDAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4YzEsIDB4ZjAsIDB4MzAsCisgIDB4MWQsIDB4NDksIDB4YWUsIDB4NDksIDB4MDUsIDB4NDksIDB4NzQsIDB4MDAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjV9fSwKKyB7MHgwYTA2LCA2NCwgeyAweDgzLCAweGU1LCAweGMwLCAweGYwLCAweDgwLCAweDM2LCAweGFmLCAweGMxLCAweGVmLCAweGI1LCAweDcwLCAweDA0LCAweGQyLCAweDBkLCAweDgwLCAweDJjLCAweGVmLAorICAweGI1LCAweDZmLCAweDA0LCAweGMyLCAweDBkLCAweDgwLCAweDI0LCAweGFlLCAweDQ5LCAweDA1LCAweDQ5LCAweDc0LCAweDAwLCAweDJlLCAweGY1LCAweDgyLAorICAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDMwLCAweDFkLCAweDExLCAweGFlLCAweDQ5LCAweDA1LCAweDQ5LCAweDc0LCAweDAwLAorICAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGU1LCAweGMwLCAweGYwLCAweGQyLCAweDFhLCAweGU1LCAweDQ5fX0sCisgezB4MGE0NiwgNjQsIHsgMHhjMywgMHg5NSwgMHg2YywgMHg0MCwgMHgyMywgMHg5MCwgMHg3ZiwgMHhiYSwgMHhlMCwgMHgzMCwgMHhlMSwgMHgxMSwgMHhlNSwgMHg0OSwgMHhjMywgMHg5NCwgMHg0MCwKKyAgMHg0MCwgMHgxNSwgMHgxNSwgMHg0OSwgMHgxNSwgMHg0OSwgMHgwNSwgMHgzOSwgMHhkMiwgMHgwZSwgMHg4MCwgMHgwYiwgMHg5MCwgMHg3ZiwgMHhiZCwgMHhlNSwKKyAgMHg0OSwgMHhmMCwgMHg3NSwgMHg0OSwgMHgwMCwgMHhkMiwgMHgwMiwgMHhkMiwgMHgyNSwgMHgzMCwgMHgyNSwgMHgwNSwgMHhjMiwgMHgyNSwgMHgwMiwgMHgwMCwKKyAgMHg1NiwgMHhkMCwgMHhkMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHg5MCwgMHg3ZiwgMHhjZX19LAorIHsweDBhODYsIDY0LCB7IDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MGIsIDB4YTUsIDB4ZTQsIDB4ZjUsIDB4MTIsIDB4NzQsIDB4NDAsIDB4MjUsIDB4MTIsIDB4ZjUsIDB4ODIsIDB4ZTQsCisgIDB4MzQsIDB4N2MsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTIsIDB4N2MsIDB4MDAsIDB4N2IsIDB4MDAsIDB4MjQsIDB4NGMsIDB4ZjksIDB4ZWMsCisgIDB4MzQsIDB4MDAsIDB4ZmEsIDB4ZWYsIDB4MTIsIDB4MTUsIDB4Y2QsIDB4MDUsIDB4MTIsIDB4ZTUsIDB4MTIsIDB4YjQsIDB4MTgsIDB4ZGIsIDB4ZTUsIDB4NGMsCisgIDB4NjAsIDB4MGMsIDB4NzUsIDB4YzksIDB4MjAsIDB4NzUsIDB4YzgsIDB4MzYsIDB4ODUsIDB4NGQsIDB4Y2EsIDB4ODUsIDB4NGUsIDB4Y2IsIDB4ZTV9fSwKKyB7MHgwYWM2LCA2NCwgeyAweDRmLCAweDEzLCAweDkyLCAweDFiLCAweDkyLCAweDlmLCAweGU1LCAweDUwLCAweDEzLCAweDkyLCAweDFjLCAweGU1LCAweDUxLCAweDEzLCAweDkyLCAweDIzLCAweGU1LAorICAweDUyLCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweDgwLCAweDA3LCAweDkwLCAweDdmLCAweDk4LCAweGUwLAorICAweDQ0LCAweDA0LCAweGYwLCAweGU1LCAweDUzLCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDU0LCAweDdmLCAweGYwLCAweDgwLCAweDA3LAorICAweDkwLCAweDdmLCAweDk4LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweGU1LCAweDU5LCAweDYwLCAweDBiLCAweGMyLCAweDEzLCAweGMyLCAweDBifX0sCisgezB4MGIwNiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHg5NSwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHg1YSwgMHg2MCwgMHgwYiwgMHhkMiwgMHgwYiwgMHhkMiwgMHgwYywgMHg5MCwgMHg3ZiwKKyAgMHg5NSwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHg1YiwgMHg2MCwgMHgwZCwgMHhjMiwgMHhhZiwgMHhjMiwgMHgxMSwgMHhkMiwgMHgwMCwgMHhlNCwKKyAgMHhmNSwgMHg3YywgMHhmNSwgMHg0YSwgMHhkMiwgMHhhZiwgMHhlNSwgMHg1YywgMHg2MCwgMHgwNSwgMHgzMCwgMHgyMywgMHgwMiwgMHhkMiwgMHgwYiwgMHhlNSwKKyAgMHg1ZCwgMHg2MCwgMHgxNSwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHhlMCwgMHg0NH19LAorIHsweDBiNDYsIDY0LCB7IDB4MDIsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4ZTUsIDB4NWUsIDB4NjAsIDB4MGEsIDB4ZDIsIDB4OWMsIDB4YzIsIDB4OTgsCisgIDB4NzUsIDB4MmUsIDB4MDEsIDB4NzUsIDB4NDAsIDB4MjgsIDB4ZTUsIDB4NWYsIDB4NjAsIDB4MDcsIDB4YzIsIDB4OWMsIDB4ZTQsIDB4ZjUsIDB4NDgsIDB4ZjUsCisgIDB4MmUsIDB4ZTUsIDB4NjAsIDB4NjAsIDB4MDMsIDB4ZTQsIDB4ZjUsIDB4NDgsIDB4ZTUsIDB4NjEsIDB4NjAsIDB4MDIsIDB4ZDIsIDB4MDcsIDB4ZTUsIDB4NjIsCisgIDB4NjAsIDB4MDgsIDB4ZTUsIDB4NWUsIDB4NzAsIDB4MDIsIDB4ZjUsIDB4NDAsIDB4ZDIsIDB4MGMsIDB4ZTUsIDB4NjMsIDB4NjAsIDB4MTksIDB4OTB9fSwKKyB7MHgwYjg2LCA2NCwgeyAweDdmLCAweGQ3LCAweDc0LCAweDExLCAweGYwLCAweDc0LCAweDMxLCAweGYwLCAweDc0LCAweDEyLCAweGYwLCAweDc0LCAweDMyLCAweGYwLCAweDc0LCAweDE1LCAweGYwLAorICAweDc0LCAweDM1LCAweGYwLCAweGQyLCAweDAzLCAweGQyLCAweDAxLCAweGQyLCAweDA5LCAweGU0LCAweDkwLCAweDdmLCAweGNmLCAweGYwLCAweGEyLCAweDEzLAorICAweGU0LCAweDMzLCAweGZmLCAweDY1LCAweDJiLCAweDYwLCAweDA0LCAweDhmLCAweDJiLCAweGQyLCAweDBjLCAweGEyLCAweDBiLCAweGU0LCAweDMzLCAweGZmLAorICAweDY1LCAweDJjLCAweDYwLCAweDA0LCAweDhmLCAweDJjLCAweGQyLCAweDBjLCAweDkwLCAweDdmLCAweDliLCAweGUwLCAweDU0LCAweDA4LCAweDY1fX0sCisgezB4MGJjNiwgNjQsIHsgMHgyNywgMHg2MCwgMHgwNywgMHhlMCwgMHg1NCwgMHgwOCwgMHhmNSwgMHgyNywgMHhkMiwgMHgwYywgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHg1NCwgMHg0MCwgMHhiNSwKKyAgMHgyOSwgMHgwOSwgMHhlMCwgMHg1NCwgMHg0MCwgMHg2NCwgMHg0MCwgMHhmNSwgMHgyOSwgMHhkMiwgMHgwYywgMHgzMCwgMHgwNywgMHgzNSwgMHhjMiwgMHhhZiwKKyAgMHgzMCwgMHgwMSwgMHgxOCwgMHg5MCwgMHg3ZiwgMHhiOCwgMHhlMCwgMHgyMCwgMHhlMSwgMHgyNywgMHhlNSwgMHg0OCwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwKKyAgMHhiNywgMHhmMCwgMHhlNCwgMHhmNSwgMHg0OCwgMHhjMiwgMHgwMSwgMHhjMiwgMHgwNywgMHg4MCwgMHgxNiwgMHg5MCwgMHg3ZiwgMHhiNiwgMHhlMH19LAorIHsweDBjMDYsIDY0LCB7IDB4MjAsIDB4ZTEsIDB4MGYsIDB4ZTUsIDB4NDgsIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4YjksIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4NDgsIDB4ZDIsIDB4MDEsIDB4YzIsCisgIDB4MDcsIDB4ZDIsIDB4YWYsIDB4MjAsIDB4MDUsIDB4MzcsIDB4MzAsIDB4MDMsIDB4MWIsIDB4OTAsIDB4N2YsIDB4YzYsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MmQsCisgIDB4OTAsIDB4N2UsIDB4NDAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTUsIDB4NzUsIDB4NGEsIDB4MDEsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTAsIDB4ZjUsIDB4N2MsCisgIDB4ZDIsIDB4MDUsIDB4ODAsIDB4MTksIDB4OTAsIDB4N2YsIDB4YzgsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MTIsIDB4OTAsIDB4N2QsIDB4YzAsIDB4ZTB9fSwKKyB7MHgwYzQ2LCA2NCwgeyAweDEzLCAweDkyLCAweDE1LCAweDc1LCAweDRhLCAweDAxLCAweDkwLCAweDdmLCAweGM5LCAweGUwLCAweGY1LCAweDdjLCAweGQyLCAweDA1LCAweDIwLCAweDIxLCAweDMzLAorICAweDIwLCAweDAwLCAweDA2LCAweGU1LCAweDRhLCAweDY1LCAweDdjLCAweDcwLCAweDJhLCAweDMwLCAweDA1LCAweDFhLCAweDMwLCAweDAzLCAweDA5LCAweGU0LAorICAweDkwLCAweDdmLCAweGM3LCAweGYwLCAweGMyLCAweDAzLCAweDgwLCAweDA3LCAweGU0LCAweDkwLCAweDdmLCAweGM5LCAweGYwLCAweGQyLCAweDAzLCAweGMyLAorICAweDA1LCAweGU0LCAweGY1LCAweDdjLCAweGY1LCAweDRhLCAweDMwLCAweDE1LCAweDBhLCAweGMyLCAweDE1LCAweGMyLCAweDAwLCAweDkwLCAweDdmfX0sCisgezB4MGM4NiwgNjQsIHsgMHhiZiwgMHg3NCwgMHgwMSwgMHhmMCwgMHgzMCwgMHgyMSwgMHgwMywgMHgwMiwgMHgwZCwgMHg5NCwgMHgyMCwgMHgwNSwgMHgwMywgMHgwMiwgMHgwZCwgMHg5NCwgMHgzMCwKKyAgMHgxYywgMHgwYSwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMCwgMHgyMCwgMHhlMywgMHgwMywgMHgwMiwgMHgwZCwgMHg5NCwgMHgzMCwgMHgwYiwgMHgwMywgMHgwMiwKKyAgMHgwZCwgMHg5NCwgMHgzMCwgMHgxMywgMHgwMywgMHgwMiwgMHgwZCwgMHg5NCwgMHgzMCwgMHgwMywgMHg2MiwgMHgzMCwgMHgxYiwgMHgxMiwgMHhhZiwgMHg0YSwKKyAgMHgwNSwgMHg0YSwgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5Mn19LAorIHsweDBjYzYsIDY0LCB7IDB4MmQsIDB4YWYsIDB4NGEsIDB4MDUsIDB4NGEsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsCisgIDB4MTMsIDB4ZTUsIDB4NGEsIDB4YzMsIDB4OTUsIDB4N2MsIDB4NTAsIDB4MmEsIDB4MzAsIDB4MWIsIDB4MTIsIDB4YWYsIDB4NGEsIDB4MDUsIDB4NGEsIDB4NzQsCisgIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTcsIDB4YWYsIDB4NGEsIDB4MDUsCisgIDB4NGEsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4NDYsIDB4ZDJ9fSwKKyB7MHgwZDA2LCA2NCwgeyAweDExLCAweDgwLCAweDZiLCAweGMyLCAweDExLCAweGU0LCAweDkwLCAweDdmLCAweGM3LCAweGYwLCAweGMyLCAweDAzLCAweDgwLCAweDYwLCAweDMwLCAweDFiLCAweDEyLAorICAweGFmLCAweDRhLCAweDA1LCAweDRhLCAweDc0LCAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweDEzLAorICAweDkyLCAweDJkLCAweGFmLCAweDRhLCAweDA1LCAweDRhLCAweDc0LCAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLAorICAweGUwLCAweGY1LCAweDEzLCAweGU1LCAweDRhLCAweGMzLCAweDk1LCAweDdjLCAweDUwLCAweDJhLCAweDMwLCAweDFiLCAweDEyLCAweGFmLCAweDRhfX0sCisgezB4MGQ0NiwgNjQsIHsgMHgwNSwgMHg0YSwgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgxNywgMHhhZiwKKyAgMHg0YSwgMHgwNSwgMHg0YSwgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHg0NiwKKyAgMHhkMiwgMHgxMSwgMHg4MCwgMHgwOSwgMHhjMiwgMHgxMSwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhmMCwgMHhkMiwgMHgwMywgMHgzMCwgMHgxYiwgMHgwNCwKKyAgMHhhMiwgMHgyZCwgMHg5MiwgMHg5YiwgMHhkMiwgMHgyMSwgMHhjMiwgMHhhZiwgMHg4NSwgMHgxMywgMHg5OSwgMHgyMCwgMHgxMSwgMHgwZCwgMHgzMH19LAorIHsweDBkODYsIDY0LCB7IDB4MTUsIDB4MGEsIDB4YzIsIDB4MTUsIDB4YzIsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YmYsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4OTAsIDB4N2YsIDB4ZDAsCisgIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MGUsIDB4YjUsIDB4ZTQsIDB4ZjUsIDB4MTIsIDB4NzQsIDB4YzAsIDB4MjUsIDB4MTIsIDB4ZjUsIDB4ODIsCisgIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTIsIDB4N2MsIDB4MDAsIDB4N2IsIDB4MDAsIDB4MjQsIDB4NjQsIDB4ZjksCisgIDB4ZWMsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4ZWYsIDB4MTIsIDB4MTUsIDB4Y2QsIDB4MDUsIDB4MTIsIDB4ZTUsIDB4MTIsIDB4YjQsIDB4MTgsIDB4ZGJ9fSwKKyB7MHgwZGM2LCA2NCwgeyAweGU1LCAweDY0LCAweDYwLCAweDBiLCAweDc1LCAweDg5LCAweDYwLCAweDc1LCAweDg4LCAweDQwLCAweGQyLCAweGRmLCAweDg1LCAweDY1LCAweDhkLCAweGU1LCAweDY3LAorICAweDEzLCAweDkyLCAweDFkLCAweDkyLCAweGM3LCAweGU1LCAweDY4LCAweDEzLCAweDkyLCAweDFlLCAweGU1LCAweDY5LCAweDEzLCAweDkyLCAweDI0LCAweGU1LAorICAweDZhLCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweDk3LCAweGUwLCAweDU0LCAweGVmLCAweGYwLCAweDgwLCAweDA3LCAweDkwLCAweDdmLCAweDk3LCAweGUwLAorICAweDQ0LCAweDEwLCAweGYwLCAweGU1LCAweDZiLCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweDk3LCAweGUwLCAweDU0LCAweDdmLCAweGYwLCAweDgwfX0sCisgezB4MGUwNiwgNjQsIHsgMHgwNywgMHg5MCwgMHg3ZiwgMHg5NywgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHhlNSwgMHg3MSwgMHg2MCwgMHgwYiwgMHhjMiwgMHgxNCwgMHhjMiwgMHgwZCwgMHg5MCwKKyAgMHg3ZiwgMHg5NCwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHhlNSwgMHg3MiwgMHg2MCwgMHgwYiwgMHhkMiwgMHgwZCwgMHhkMiwgMHgwZSwgMHg5MCwgMHg3ZiwKKyAgMHg5NCwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHhlNSwgMHg3MywgMHg2MCwgMHgwZCwgMHhjMiwgMHhhZiwgMHhjMiwgMHgxMiwgMHhkMiwgMHgwMCwgMHhlNCwKKyAgMHhmNSwgMHg3ZCwgMHhmNSwgMHg0YiwgMHhkMiwgMHhhZiwgMHhlNSwgMHg3NCwgMHg2MCwgMHgwNSwgMHgzMCwgMHgyNCwgMHgwMiwgMHhkMiwgMHgwZH19LAorIHsweDBlNDYsIDY0LCB7IDB4ZTUsIDB4NzUsIDB4NjAsIDB4MTUsIDB4OTAsIDB4N2YsIDB4OTQsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWQsIDB4ZTAsIDB4NDQsIDB4MDgsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTcsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjAsIDB4ZTUsIDB4NzYsIDB4NjAsIDB4MGEsIDB4ZDIsIDB4YzQsIDB4YzIsIDB4YzAsCisgIDB4NzUsIDB4M2EsIDB4MDEsIDB4NzUsIDB4NDEsIDB4MjgsIDB4ZTUsIDB4NzcsIDB4NjAsIDB4MDcsIDB4YzIsIDB4YzQsIDB4ZTQsIDB4ZjUsIDB4NDksIDB4ZjUsCisgIDB4M2EsIDB4ZTUsIDB4NzgsIDB4NjAsIDB4MDMsIDB4ZTQsIDB4ZjUsIDB4NDksIDB4ZTUsIDB4NzksIDB4NjAsIDB4MDIsIDB4ZDIsIDB4MDgsIDB4ZTV9fSwKKyB7MHgwZTg2LCA2NCwgeyAweDdhLCAweDYwLCAweDA4LCAweGU1LCAweDc2LCAweDcwLCAweDAyLCAweGY1LCAweDQxLCAweGQyLCAweDBlLCAweGU1LCAweDdiLCAweDYwLCAweDE5LCAweDkwLCAweDdmLAorICAweGQ3LCAweDc0LCAweDEzLCAweGYwLCAweDc0LCAweDMzLCAweGYwLCAweDc0LCAweDE0LCAweGYwLCAweDc0LCAweDM0LCAweGYwLCAweDc0LCAweDE2LCAweGYwLAorICAweDc0LCAweDM2LCAweGYwLCAweGQyLCAweDA0LCAweGQyLCAweDAyLCAweGQyLCAweDBhLCAweGU0LCAweDkwLCAweDdmLCAweGQxLCAweGYwLCAweGEyLCAweDE0LAorICAweGU0LCAweDMzLCAweGZmLCAweDY1LCAweDM3LCAweDYwLCAweDA0LCAweDhmLCAweDM3LCAweGQyLCAweDBlLCAweGEyLCAweDBkLCAweGU0LCAweDMzfX0sCisgezB4MGVjNiwgNjQsIHsgMHhmZiwgMHg2NSwgMHgzOCwgMHg2MCwgMHgwNCwgMHg4ZiwgMHgzOCwgMHhkMiwgMHgwZSwgMHg5MCwgMHg3ZiwgMHg5YSwgMHhlMCwgMHg1NCwgMHgyMCwgMHg2NSwgMHgzMywKKyAgMHg2MCwgMHgwNywgMHhlMCwgMHg1NCwgMHgyMCwgMHhmNSwgMHgzMywgMHhkMiwgMHgwZSwgMHg5MCwgMHg3ZiwgMHg5YSwgMHhlMCwgMHg1NCwgMHg0MCwgMHhiNSwKKyAgMHgzNSwgMHgwOSwgMHhlMCwgMHg1NCwgMHg0MCwgMHg2NCwgMHg0MCwgMHhmNSwgMHgzNSwgMHhkMiwgMHgwZSwgMHgzMCwgMHgwOCwgMHgzNSwgMHhjMiwgMHhhZiwKKyAgMHgzMCwgMHgwMiwgMHgxOCwgMHg5MCwgMHg3ZiwgMHhiYywgMHhlMCwgMHgyMCwgMHhlMSwgMHgyNywgMHhlNSwgMHg0OSwgMHg2MCwgMHgwOSwgMHg5MH19LAorIHsweDBmMDYsIDY0LCB7IDB4N2YsIDB4YmIsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4NDksIDB4YzIsIDB4MDIsIDB4YzIsIDB4MDgsIDB4ODAsIDB4MTYsIDB4OTAsIDB4N2YsIDB4YmEsIDB4ZTAsIDB4MjAsCisgIDB4ZTEsIDB4MGYsIDB4ZTUsIDB4NDksIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4YmQsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4NDksIDB4ZDIsIDB4MDIsIDB4YzIsCisgIDB4MDgsIDB4ZDIsIDB4YWYsIDB4MjAsIDB4MDYsIDB4MzcsIDB4MzAsIDB4MDQsIDB4MWIsIDB4OTAsIDB4N2YsIDB4Y2EsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MmQsCisgIDB4OTAsIDB4N2QsIDB4NDAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTYsIDB4NzUsIDB4NGIsIDB4MDEsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZTAsIDB4ZjV9fSwKKyB7MHgwZjQ2LCA2NCwgeyAweDdkLCAweGQyLCAweDA2LCAweDgwLCAweDE5LCAweDkwLCAweDdmLCAweGNjLCAweGUwLCAweDIwLCAweGUxLCAweDEyLCAweDkwLCAweDdjLCAweGMwLCAweGUwLCAweDEzLAorICAweDkyLCAweDE2LCAweDc1LCAweDRiLCAweDAxLCAweDkwLCAweDdmLCAweGNkLCAweGUwLCAweGY1LCAweDdkLCAweGQyLCAweDA2LCAweDIwLCAweDIyLCAweDMzLAorICAweDIwLCAweDAwLCAweDA2LCAweGU1LCAweDRiLCAweDY1LCAweDdkLCAweDcwLCAweDJhLCAweDMwLCAweDA2LCAweDFhLCAweDMwLCAweDA0LCAweDA5LCAweGU0LAorICAweDkwLCAweDdmLCAweGNiLCAweGYwLCAweGMyLCAweDA0LCAweDgwLCAweDA3LCAweGU0LCAweDkwLCAweDdmLCAweGNkLCAweGYwLCAweGQyLCAweDA0fX0sCisgezB4MGY4NiwgNjQsIHsgMHhjMiwgMHgwNiwgMHhlNCwgMHhmNSwgMHg3ZCwgMHhmNSwgMHg0YiwgMHgzMCwgMHgxNiwgMHgwYSwgMHhjMiwgMHgxNiwgMHhjMiwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhjMSwKKyAgMHg3NCwgMHgwMSwgMHhmMCwgMHgzMCwgMHgyMiwgMHgwMywgMHgwMiwgMHgxMCwgMHhhNCwgMHgyMCwgMHgwNiwgMHgwMywgMHgwMiwgMHgxMCwgMHhhNCwgMHgzMCwKKyAgMHgxZSwgMHgwYSwgMHg5MCwgMHg3ZiwgMHg5YSwgMHhlMCwgMHgyMCwgMHhlNSwgMHgwMywgMHgwMiwgMHgxMCwgMHhhNCwgMHgzMCwgMHgwZCwgMHgwMywgMHgwMiwKKyAgMHgxMCwgMHhhNCwgMHgzMCwgMHgxNCwgMHgwMywgMHgwMiwgMHgxMCwgMHhhNCwgMHgzMCwgMHgwNCwgMHg2MiwgMHgzMCwgMHgxZCwgMHgxMiwgMHhhZn19LAorIHsweDBmYzYsIDY0LCB7IDB4NGIsIDB4MDUsIDB4NGIsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MmQsCisgIDB4YWYsIDB4NGIsIDB4MDUsIDB4NGIsIDB4NzQsIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsCisgIDB4MTMsIDB4ZTUsIDB4NGIsIDB4YzMsIDB4OTUsIDB4N2QsIDB4NTAsIDB4MmEsIDB4MzAsIDB4MWQsIDB4MTIsIDB4YWYsIDB4NGIsIDB4MDUsIDB4NGIsIDB4NzQsCisgIDB4NDAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2QsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MTgsIDB4YWYsIDB4NGJ9fSwKKyB7MHgxMDA2LCA2NCwgeyAweDA1LCAweDRiLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdkLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDQ3LCAweGQyLCAweDEyLAorICAweDgwLCAweDZiLCAweGMyLCAweDEyLCAweGU0LCAweDkwLCAweDdmLCAweGNiLCAweGYwLCAweGMyLCAweDA0LCAweDgwLCAweDYwLCAweDMwLCAweDFkLCAweDEyLAorICAweGFmLCAweDRiLCAweDA1LCAweDRiLCAweDc0LCAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdjLCAweGY1LCAweDgzLCAweGUwLCAweDEzLAorICAweDkyLCAweDJkLCAweGFmLCAweDRiLCAweDA1LCAweDRiLCAweDc0LCAweGMwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdjLCAweGY1fX0sCisgezB4MTA0NiwgNjQsIHsgMHg4MywgMHhlMCwgMHhmNSwgMHgxMywgMHhlNSwgMHg0YiwgMHhjMywgMHg5NSwgMHg3ZCwgMHg1MCwgMHgyYSwgMHgzMCwgMHgxZCwgMHgxMiwgMHhhZiwgMHg0YiwgMHgwNSwKKyAgMHg0YiwgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YywgMHhmNSwgMHg4MywgMHhlMCwgMHgxMywgMHg5MiwgMHgxOCwgMHhhZiwKKyAgMHg0YiwgMHgwNSwgMHg0YiwgMHg3NCwgMHhjMCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YywgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHg0NywKKyAgMHhkMiwgMHgxMiwgMHg4MCwgMHgwOSwgMHhjMiwgMHgxMiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjZCwgMHhmMCwgMHhkMiwgMHgwNCwgMHgzMCwgMHgxZH19LAorIHsweDEwODYsIDY0LCB7IDB4MDQsIDB4YTIsIDB4MmQsIDB4OTIsIDB4YzMsIDB4ZDIsIDB4MjIsIDB4YzIsIDB4YWYsIDB4ODUsIDB4MTMsIDB4YzEsIDB4MjAsIDB4MTIsIDB4MGQsIDB4MzAsIDB4MTYsCisgIDB4MGEsIDB4YzIsIDB4MTYsIDB4YzIsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YzEsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4OTAsIDB4N2YsIDB4YzIsCisgIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MTEsIDB4N2EsIDB4ZTUsIDB4MWEsIDB4NzAsIDB4NDYsIDB4MzAsIDB4MGMsIDB4M2YsIDB4ZTUsIDB4NDAsCisgIDB4NzAsIDB4M2IsIDB4YTIsIDB4MDksIDB4MzMsIDB4ZjUsIDB4MzEsIDB4YzIsIDB4MDksIDB4YzIsIDB4MGMsIDB4ZTQsIDB4ZjUsIDB4MTIsIDB4N2V9fSwKKyB7MHgxMGM2LCA2NCwgeyAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDI2LCAweDI1LCAweDEyLCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyLCAweDE1LCAweDg3LCAweGZmLCAweDc0LAorICAweDgwLCAweDI1LCAweDEyLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDEyLCAweGU1LCAweDEyLAorICAweGI0LCAweDBjLCAweGRiLCAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDBjLCAweGYwLCAweDc1LCAweDQwLCAweDEwLCAweDIyLCAweDc1LCAweDFhLCAweDAxLAorICAweDIyLCAweGU1LCAweDFhLCAweDY0LCAweDAxLCAweDcwLCAweDQ1LCAweDMwLCAweDBlLCAweDNlLCAweGU1LCAweDQxLCAweDcwLCAweDNhLCAweGEyfX0sCisgezB4MTEwNiwgNjQsIHsgMHgwYSwgMHgzMywgMHhmNSwgMHgzZCwgMHhjMiwgMHgwYSwgMHhjMiwgMHgwZSwgMHhlNCwgMHhmNSwgMHgxMiwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgzMiwKKyAgMHgyNSwgMHgxMiwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgxNSwgMHg4NywgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNSwgMHgxMiwgMHhmNSwKKyAgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxMiwgMHhlNSwgMHgxMiwgMHhiNCwgMHgwYywgMHhkYiwgMHg5MCwKKyAgMHg3ZiwgMHhjMywgMHg3NCwgMHgwYywgMHhmMCwgMHg3NSwgMHg0MSwgMHgxMCwgMHg3NSwgMHgxYSwgMHgwMiwgMHgyMiwgMHhlNSwgMHgxYywgMHg2MH19LAorIHsweDExNDYsIDY0LCB7IDB4MzAsIDB4MTUsIDB4MWMsIDB4ZTQsIDB4ZjUsIDB4MTIsIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MWIsIDB4MjUsIDB4MTIsIDB4ZjksIDB4ZWUsIDB4MzQsCisgIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MTUsIDB4ODcsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjUsIDB4MTIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsCisgIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MTIsIDB4ZTUsIDB4MTIsIDB4YjQsIDB4MDMsIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDMsIDB4ZjAsCisgIDB4ZTQsIDB4ZjUsIDB4MWEsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZTksIDB4ZTAsIDB4MTIsIDB4MTYsIDB4MTcsIDB4MTIsIDB4NDAsIDB4MDAsIDB4MTJ9fSwKKyB7MHgxMTg2LCA2NCwgeyAweGI0LCAweDAxLCAweDEzLCAweDIwLCAweDAzLCAweDExLCAweDllLCAweDA2LCAweDEyLCAweDMzLCAweDA4LCAweDEyLCAweDJkLCAweDA5LCAweDEyLCAweDIwLCAweDBhLAorICAweDEzLCAweDc2LCAweDBiLCAweDAwLCAweDAwLCAweDEzLCAweDZmLCAweDkwLCAweDdmLCAweGViLCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE2LCAweDE0LAorICAweDYwLCAweDQwLCAweDI0LCAweDAyLCAweDcwLCAweDY5LCAweDc0LCAweDE5LCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweDc0LCAweDAwLCAweDkwLCAweDdmLAorICAweGQ1LCAweGYwLCAweDAyLCAweDEzLCAweDc2LCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGZmLCAweDEyLCAweDE3LCAweDRiLCAweDhiLCAweDEyfX0sCisgezB4MTFjNiwgNjQsIHsgMHg4YSwgMHgxMywgMHg4OSwgMHgxNCwgMHhlYSwgMHg0OSwgMHg2MCwgMHgxMSwgMHhhZSwgMHgwMiwgMHhlZSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHhhZiwgMHgwMSwKKyAgMHhlZiwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgxMywgMHg3NiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwKKyAgMHgxMywgMHg3NiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmZiwgMHgxMiwgMHgxNywgMHg5YSwgMHg4YiwgMHgxMiwgMHg4YSwgMHgxMywgMHg4OSwgMHgxNCwKKyAgMHhlYSwgMHg0OSwgMHg2MCwgMHgxMSwgMHhhZSwgMHgwMiwgMHhlZSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHhhZiwgMHgwMSwgMHhlZiwgMHg5MH19LAorIHsweDEyMDYsIDY0LCB7IDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NzYsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NzYsIDB4OTAsCisgIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NzYsIDB4OTAsIDB4N2YsIDB4MDAsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4YjUsIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NzYsIDB4MTIsIDB4MTQsIDB4YzMsIDB4MDIsIDB4MTMsIDB4NzYsIDB4OTAsIDB4N2YsIDB4MDAsIDB4NzQsCisgIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NzYsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4N2Z9fSwKKyB7MHgxMjQ2LCA2NCwgeyAweDYwLCAweDI0LCAweDE0LCAweDYwLCAweDMxLCAweDI0LCAweDAyLCAweDcwLCAweDViLCAweGEyLCAweDI2LCAweGU0LCAweDMzLCAweGZmLCAweDI1LCAweGUwLCAweGZmLAorICAweGEyLCAweDJiLCAweGU0LCAweDMzLCAweDRmLCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGU0LCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LAorICAweDAyLCAweGYwLCAweDAyLCAweDEzLCAweDc2LCAweGU0LCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LAorICAweDAyLCAweGYwLCAweDAyLCAweDEzLCAweDc2LCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0fX0sCisgezB4MTI4NiwgNjQsIHsgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHg1NCwgMHhmZCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwKKyAgMHgwMiwgMHgxMywgMHg3NiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgxMywgMHg3NiwgMHg5MCwgMHg3ZiwgMHhlOCwKKyAgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxZCwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgxMywgMHg3NiwgMHg5MCwgMHg3ZiwgMHhlYX19LAorIHsweDEyYzYsIDY0LCB7IDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDUsIDB4YzIsIDB4MjYsIDB4MDIsIDB4MTMsIDB4NzYsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsCisgIDB4MTMsIDB4NzYsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MzgsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsCisgIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsCisgIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4MTMsIDB4MTMsIDB4MTN9fSwKKyB7MHgxMzA2LCA2NCwgeyAweDU0LCAweDFmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDkwLCAweDdmLCAweGQ3LCAweGYwLCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDgwLCAweDVmLAorICAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDU2LCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLAorICAweDE4LCAweDI0LCAweDAyLCAweDcwLCAweDRhLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA0LCAweGQyLCAweDI2LCAweDgwLCAweDNmLAorICAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDM2LCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDIwfX0sCisgezB4MTM0NiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwKKyAgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgxMCwgMHg5MCwKKyAgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgyMiwgMHgyMCwgMHgyOCwgMHgwMywgMHgwMiwgMHgxNCwgMHhjMiwgMHhlNSwgMHg0MH19LAorIHsweDEzODYsIDY0LCB7IDB4NjAsIDB4MDIsIDB4MTUsIDB4NDAsIDB4ZTUsIDB4NDgsIDB4NjAsIDB4NGYsIDB4NjUsIDB4NDQsIDB4NzAsIDB4NDUsIDB4ZTUsIDB4NDIsIDB4ZjQsIDB4NjAsIDB4MDIsCisgIDB4MDUsIDB4NDIsIDB4ZTUsIDB4NDIsIDB4YzMsIDB4OTUsIDB4NTUsIDB4NDAsIDB4M2QsIDB4YzIsIDB4YWYsIDB4MzAsIDB4MDEsIDB4MTgsIDB4OTAsIDB4N2YsCisgIDB4YjgsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MjcsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZTUsIDB4NDgsIDB4ZjAsIDB4YzIsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4NDgsCisgIDB4ZjUsIDB4NDIsIDB4ZjUsIDB4NDQsIDB4ODAsIDB4MTYsIDB4OTAsIDB4N2YsIDB4YjYsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MGYsIDB4OTAsIDB4N2Z9fSwKKyB7MHgxM2M2LCA2NCwgeyAweGI5LCAweGU1LCAweDQ4LCAweGYwLCAweGQyLCAweDAxLCAweGU0LCAweGY1LCAweDQ4LCAweGY1LCAweDQyLCAweGY1LCAweDQ0LCAweGQyLCAweGFmLCAweDgwLCAweDA2LAorICAweDg1LCAweDQ4LCAweDQ0LCAweGU0LCAweGY1LCAweDQyLCAweGU1LCAweDJlLCAweDYwLCAweDJkLCAweDIwLCAweDE5LCAweDA3LCAweDkwLCAweDdmLCAweDliLAorICAweGUwLCAweDMwLCAweGUwLCAweDBlLCAweGU1LCAweDJmLCAweDYwLCAweDA1LCAweGU0LCAweGY1LCAweDJmLCAweGQyLCAweDBjLCAweGU0LCAweGY1LCAweDNlLAorICAweDgwLCAweDEzLCAweGU1LCAweDNlLCAweGQzLCAweDk1LCAweDU2LCAweDUwLCAweDBjLCAweGU1LCAweDNlLCAweGI1LCAweDU2LCAweDA1LCAweDc1fX0sCisgezB4MTQwNiwgNjQsIHsgMHgyZiwgMHgwMSwgMHhkMiwgMHgwYywgMHgwNSwgMHgzZSwgMHhjMiwgMHgxOSwgMHhlNSwgMHg0MSwgMHg2MCwgMHgwMiwgMHgxNSwgMHg0MSwgMHhlNSwgMHg0OSwgMHg2MCwKKyAgMHg0ZiwgMHg2NSwgMHg0NSwgMHg3MCwgMHg0NSwgMHhlNSwgMHg0MywgMHhmNCwgMHg2MCwgMHgwMiwgMHgwNSwgMHg0MywgMHhlNSwgMHg0MywgMHhjMywgMHg5NSwKKyAgMHg2ZCwgMHg0MCwgMHgzZCwgMHhjMiwgMHhhZiwgMHgzMCwgMHgwMiwgMHgxOCwgMHg5MCwgMHg3ZiwgMHhiYywgMHhlMCwgMHgyMCwgMHhlMSwgMHgyNywgMHg5MCwKKyAgMHg3ZiwgMHhiYiwgMHhlNSwgMHg0OSwgMHhmMCwgMHhjMiwgMHgwMiwgMHhlNCwgMHhmNSwgMHg0OSwgMHhmNSwgMHg0MywgMHhmNSwgMHg0NSwgMHg4MH19LAorIHsweDE0NDYsIDY0LCB7IDB4MTYsIDB4OTAsIDB4N2YsIDB4YmEsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MGYsIDB4OTAsIDB4N2YsIDB4YmQsIDB4ZTUsIDB4NDksIDB4ZjAsIDB4ZDIsIDB4MDIsIDB4ZTQsCisgIDB4ZjUsIDB4NDksIDB4ZjUsIDB4NDMsIDB4ZjUsIDB4NDUsIDB4ZDIsIDB4YWYsIDB4ODAsIDB4MDYsIDB4ODUsIDB4NDksIDB4NDUsIDB4ZTQsIDB4ZjUsIDB4NDMsCisgIDB4ZTUsIDB4M2EsIDB4NjAsIDB4MmQsIDB4MjAsIDB4MWEsIDB4MDcsIDB4OTAsIDB4N2YsIDB4OWEsIDB4ZTAsIDB4MzAsIDB4ZTIsIDB4MGUsIDB4ZTUsIDB4M2IsCisgIDB4NjAsIDB4MDUsIDB4ZTQsIDB4ZjUsIDB4M2IsIDB4ZDIsIDB4MGUsIDB4ZTQsIDB4ZjUsIDB4M2YsIDB4ODAsIDB4MTMsIDB4ZTUsIDB4M2YsIDB4ZDN9fSwKKyB7MHgxNDg2LCA2NCwgeyAweDk1LCAweDZlLCAweDUwLCAweDBjLCAweGU1LCAweDNmLCAweGI1LCAweDZlLCAweDA1LCAweDc1LCAweDNiLCAweDAxLCAweGQyLCAweDBlLCAweDA1LCAweDNmLCAweGMyLAorICAweDFhLCAweDkwLCAweDdmLCAweGQyLCAweGUwLCAweDIwLCAweGUxLCAweDIzLCAweDkwLCAweDdiLCAweDQwLCAweGUwLCAweDYwLCAweDA5LCAweGUwLCAweGY1LAorICAweDFjLCAweDkwLCAweDdiLCAweDQyLCAweGUwLCAweGY1LCAweDFkLCAweDkwLCAweDdiLCAweDQxLCAweGUwLCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweGQ3LAorICAweDc0LCAweDE3LCAweGYwLCAweDc0LCAweDM3LCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweGQzLCAweGYwLCAweDIyLCAweGU0LCAweDkwLCAweDdmfX0sCisgezB4MTRjNiwgNjQsIHsgMHg5MywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHgzMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlMCwgMHg0NCwgMHgxMCwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5NCwgMHg3NCwgMHgwZCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZCwgMHg3NCwgMHg5YSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NywgMHhlMCwgMHg1NCwgMHhmZCwKKyAgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NSwgMHg3NCwgMHgyMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwgMHg4NCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwKKyAgMHhjNywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjZiwgMHhmMCwgMHg3NSwgMHg5OCwgMHg0MCwgMHg0MywgMHhhOH19LAorIHsweDE1MDYsIDY0LCB7IDB4MTAsIDB4YzIsIDB4MWIsIDB4YzIsIDB4MDUsIDB4YzIsIDB4MjEsIDB4YzIsIDB4MGIsIDB4YzIsIDB4MTMsIDB4ZjUsIDB4N2MsIDB4ZjUsIDB4NGEsIDB4YzIsIDB4MTEsCisgIDB4YzIsIDB4MTUsIDB4ZjUsIDB4NDIsIDB4YzIsIDB4MTksIDB4ZjUsIDB4NDQsIDB4ZjUsIDB4NDgsIDB4YzIsIDB4MjMsIDB4YzIsIDB4MWMsIDB4ZjUsIDB4MmQsCisgIDB4ZjUsIDB4MmYsIDB4YzIsIDB4MDcsIDB4YzIsIDB4MDAsIDB4YzIsIDB4MWYsIDB4ZjUsIDB4M2UsIDB4YzIsIDB4MDksIDB4ZDIsIDB4MGMsIDB4ZjUsIDB4MjYsCisgIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4Y2QsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZDEsIDB4ZjAsIDB4NzUsIDB4YzAsIDB4NDB9fSwKKyB7MHgxNTQ2LCA2NCwgeyAweDQzLCAweGE4LCAweDQwLCAweGMyLCAweDFkLCAweGMyLCAweDA2LCAweGMyLCAweDIyLCAweGMyLCAweDBkLCAweGMyLCAweDE0LCAweGY1LCAweDdkLCAweGY1LCAweDRiLAorICAweGMyLCAweDEyLCAweGMyLCAweDE2LCAweGY1LCAweDQzLCAweGMyLCAweDFhLCAweGY1LCAweDQ1LCAweGY1LCAweDQ5LCAweGMyLCAweDI0LCAweGMyLCAweDFlLAorICAweGY1LCAweDM5LCAweGY1LCAweDNiLCAweGMyLCAweDA4LCAweGMyLCAweDAwLCAweGMyLCAweDIwLCAweGY1LCAweDNmLCAweGMyLCAweDBhLCAweGQyLCAweDBlLAorICAweDc1LCAweDMyLCAweDAxLCAweDkwLCAweDdmLCAweGRmLCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGRlLCAweGYwLCAweGQyLCAweDI4fX0sCisgezB4MTU4NiwgNjQsIHsgMHgyMiwgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwMiwgMHhlNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMiwKKyAgMHhlMywgMHgyMiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMiwgMHhiYiwgMHgwMSwgMHgwYywgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwKKyAgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwNiwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgMHhlNiwgMHgyMiwKKyAgMHhiYiwgMHhmZSwgMHgwNiwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgMHhlMiwgMHgyMiwgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNX19LAorIHsweDE1YzYsIDY0LCB7IDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZjAsIDB4MjIsIDB4NTAsCisgIDB4MDIsIDB4ZjcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDEsIDB4ZjMsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MTAsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsCisgIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDksIDB4ZTksIDB4MjUsIDB4ODIsCisgIDB4ZjgsIDB4ODYsIDB4ZjAsIDB4MDgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MGEsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4ZjV9fSwKKyB7MHgxNjA2LCA2NCwgeyAweGYwLCAweDA4LCAweGUyLCAweDIyLCAweGU1LCAweDgzLCAweDJhLCAweGY1LCAweDgzLCAweGU5LCAweDkzLCAweGY1LCAweGYwLCAweGEzLCAweGU5LCAweDkzLCAweDIyLAorICAweGQwLCAweDgzLCAweGQwLCAweDgyLCAweGY4LCAweGU0LCAweDkzLCAweDcwLCAweDEyLCAweDc0LCAweDAxLCAweDkzLCAweDcwLCAweDBkLCAweGEzLCAweGEzLAorICAweDkzLCAweGY4LCAweDc0LCAweDAxLCAweDkzLCAweGY1LCAweDgyLCAweDg4LCAweDgzLCAweGU0LCAweDczLCAweDc0LCAweDAyLCAweDkzLCAweDY4LCAweDYwLAorICAweGVmLCAweGEzLCAweGEzLCAweGEzLCAweDgwLCAweGRmLCAweDc4LCAweDdmLCAweGU0LCAweGY2LCAweGQ4LCAweGZkLCAweDc1LCAweDgxLCAweDdkfX0sCisgezB4MTY0NiwgNjQsIHsgMHgwMiwgMHgxNiwgMHg4NCwgMHgwMiwgMHgxNiwgMHhjOSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHg0MCwgMHgwMywgMHhmNiwgMHg4MCwKKyAgMHgwMSwgMHhmMiwgMHgwOCwgMHhkZiwgMHhmNCwgMHg4MCwgMHgyOSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHg1NCwgMHgwNywgMHgyNCwgMHgwYywgMHhjOCwKKyAgMHhjMywgMHgzMywgMHhjNCwgMHg1NCwgMHgwZiwgMHg0NCwgMHgyMCwgMHhjOCwgMHg4MywgMHg0MCwgMHgwNCwgMHhmNCwgMHg1NiwgMHg4MCwgMHgwMSwgMHg0NiwKKyAgMHhmNiwgMHhkZiwgMHhlNCwgMHg4MCwgMHgwYiwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHg5MCwgMHgxOH19LAorIHsweDE2ODYsIDY0LCB7IDB4YzUsIDB4ZTQsIDB4N2UsIDB4MDEsIDB4OTMsIDB4NjAsIDB4YmMsIDB4YTMsIDB4ZmYsIDB4NTQsIDB4M2YsIDB4MzAsIDB4ZTUsIDB4MDksIDB4NTQsIDB4MWYsIDB4ZmUsCisgIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NjAsIDB4MDEsIDB4MGUsIDB4Y2YsIDB4NTQsIDB4YzAsIDB4MjUsIDB4ZTAsIDB4NjAsIDB4YTgsIDB4NDAsIDB4YjgsIDB4ZTQsCisgIDB4OTMsIDB4YTMsIDB4ZmEsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2EsIDB4YzUsCisgIDB4ODMsIDB4Y2EsIDB4ZjAsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2EsIDB4ZGYsIDB4ZTksIDB4ZGV9fSwKKyB7MHgxNmM2LCA2NCwgeyAweGU3LCAweDgwLCAweGJlLCAweDc1LCAweDExLCAweDAxLCAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDkwLCAweDdmLCAweGFlLCAweGUwLAorICAweGZmLCAweGQzLCAweDkyLCAweDI2LCAweGU0LCAweDMzLCAweGZlLCAweGVmLCAweDRlLCAweGYwLCAweGQyLCAweGU4LCAweDQzLCAweGQ4LCAweDIwLCAweDkwLAorICAweDdmLCAweGRlLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGRmLCAweGYwLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweGZmLCAweGYwLCAweDkwLAorICAweDdmLCAweGE5LCAweGYwLCAweDkwLCAweDdmLCAweGFhLCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFmLCAweGUwLCAweDQ0fX0sCisgezB4MTcwNiwgNjQsIHsgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZSwgMHhlMCwgMHg0NCwgMHgwZCwgMHhmMCwgMHhkMiwgMHhhZiwgMHhkMiwgMHhiYywgMHhkMiwgMHhiZSwgMHhkMiwgMHgyZCwKKyAgMHgxMiwgMHgxOCwgMHg3ZiwgMHhjMiwgMHgyNywgMHhjMiwgMHgyNSwgMHhjMiwgMHgyOCwgMHgzMCwgMHgyOCwgMHgwMywgMHgxMiwgMHgwYSwgMHg4MywgMHg5MCwKKyAgMHg3ZiwgMHhkOCwgMHhlMCwgMHg2NSwgMHgxMCwgMHg2MCwgMHgwOCwgMHhlMCwgMHhmNSwgMHgxMCwgMHgxMiwgMHgxMywgMHg3ZSwgMHg4MCwgMHhlYSwgMHgzMCwKKyAgMHgyNywgMHgwNywgMHhjMiwgMHgyNywgMHgxMiwgMHgxMSwgMHg3YiwgMHg4MCwgMHhlMCwgMHgzMCwgMHgyYywgMHhkZCwgMHhjMiwgMHgyYywgMHgxMn19LAorIHsweDE3NDYsIDY0LCB7IDB4MDAsIDB4MjYsIDB4ODAsIDB4ZDYsIDB4MjIsIDB4ZTQsIDB4ZmUsIDB4NzUsIDB4MTcsIDB4ZmYsIDB4NzUsIDB4MTgsIDB4MTksIDB4NzUsIDB4MTksIDB4MTIsIDB4YWIsCisgIDB4MTcsIDB4YWEsIDB4MTgsIDB4YTksIDB4MTksIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4MTUsIDB4YTAsIDB4NjQsIDB4MDIsIDB4NzAsIDB4MmQsIDB4YWQsCisgIDB4MDYsIDB4MGUsIDB4ZWQsIDB4YjUsIDB4MDcsIDB4MDEsIDB4MjIsIDB4OTAsIDB4MDAsIDB4MDIsIDB4MTIsIDB4MTUsIDB4ZGYsIDB4ODUsIDB4ZjAsIDB4MTUsCisgIDB4ZjUsIDB4MTYsIDB4NjIsIDB4MTUsIDB4ZTUsIDB4MTUsIDB4NjIsIDB4MTYsIDB4ZTUsIDB4MTYsIDB4NjIsIDB4MTUsIDB4MjksIDB4ZmQsIDB4ZTV9fSwKKyB7MHgxNzg2LCA2NCwgeyAweDE1LCAweDNhLCAweGE5LCAweDA1LCAweDc1LCAweDE3LCAweGZmLCAweGY1LCAweDE4LCAweDg5LCAweDE5LCAweDgwLCAweGMzLCAweDdiLCAweDAwLCAweDdhLCAweDAwLAorICAweDc5LCAweDAwLCAweDIyLCAweDhmLCAweDE1LCAweGU0LCAweGY1LCAweDE2LCAweDc1LCAweDE3LCAweGZmLCAweDc1LCAweDE4LCAweDE5LCAweDc1LCAweDE5LAorICAweDg2LCAweGFiLCAweDE3LCAweGFhLCAweDE4LCAweGE5LCAweDE5LCAweDkwLCAweDAwLCAweDAxLCAweDEyLCAweDE1LCAweGEwLCAweGI0LCAweDAzLCAweDFkLAorICAweGFmLCAweDE2LCAweDA1LCAweDE2LCAweGVmLCAweGI1LCAweDE1LCAweDAxLCAweDIyLCAweDEyLCAweDE1LCAweDg3LCAweDdlLCAweDAwLCAweDI5fX0sCisgezB4MTdjNiwgNjQsIHsgMHhmZiwgMHhlZSwgMHgzYSwgMHhhOSwgMHgwNywgMHg3NSwgMHgxNywgMHhmZiwgMHhmNSwgMHgxOCwgMHg4OSwgMHgxOSwgMHg4MCwgMHhkNCwgMHg3YiwgMHgwMCwgMHg3YSwKKyAgMHgwMCwgMHg3OSwgMHgwMCwgMHgyMiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5MywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NCwKKyAgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZCwgMHg3NCwgMHgwMiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NywgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhmMCwKKyAgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwgMHhmZiwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZCwgMHhmMH19LAorIHsweDE4MDYsIDY0LCB7IDB4MjIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4OTAsCisgIDB4N2YsIDB4YzQsIDB4ZTQsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsCisgIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsCisgIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4ZDIsIDB4MjcsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTB9fSwKKyB7MHgxODQ2LCA2NCwgeyAweDdmLCAweGFiLCAweDc0LCAweDAxLCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLAorICAweDMyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLAorICAweGQyLCAweDJjLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA4LCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLAorICAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGZiLCAweGYwfX0sCisgezB4MTg4NiwgNjQsIHsgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHgzMCwgMHgyZCwgMHgwNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg3ZiwgMHhmNCwgMHg3ZSwgMHgwMSwgMHgxMiwgMHgwMCwKKyAgMHgwNiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwgMHgyMiwgMHg3NCwgMHgwMCwgMHhmNSwKKyAgMHg4NiwgMHg5MCwgMHhmZCwgMHhhNSwgMHg3YywgMHgwNSwgMHhhMywgMHhlNSwgMHg4MiwgMHg0NSwgMHg4MywgMHg3MCwgMHhmOSwgMHgyMiwgMHg5MCwgMHg3ZiwKKyAgMHhkNiwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg0MywgMHg4NywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHhjMX19LAorIHsweDE4YzYsIDY0LCB7IDB4YWEsIDB4MDEsIDB4MWEsIDB4MDAsIDB4MDMsIDB4MWIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4YzEsIDB4MjcsIDB4YzEsIDB4MmMsIDB4YzEsIDB4MjYsIDB4YzEsIDB4MmIsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZmYsIDB4MDB9fSwKKyB7MHgxOTA2LCA2NCwgeyAweDAwLCAweDQwLCAweGNkLCAweDA2LCAweDBmLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAyLCAweDAwLCAweDAxLCAweDA5LCAweDAyLCAweDc0LCAweDAwLCAweDAxLAorICAweDAxLCAweDAwLCAweGEwLCAweDMyLCAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweDBlLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAxLAorICAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAyLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAzLCAweDAyLCAweDQwLAorICAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA0LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA1LCAweDAyLCAweDQwLCAweDAwfX0sCisgezB4MTk0NiwgNjQsIHsgMHgwMCwgMHgwNywgMHgwNSwgMHgwNiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwKKyAgMHg4MSwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MywgMHgwMiwKKyAgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NSwgMHgwMiwgMHg0MCwgMHgwMCwKKyAgMHgwMSwgMHgwNywgMHgwNSwgMHg4NiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMX19LAorIHsweDE5ODYsIDY0LCB7IDB4MDQsIDB4MDMsIDB4MDksIDB4MDQsIDB4NDgsIDB4MDMsIDB4NGIsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsCisgIDB4MDAsIDB4NmUsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjksIDB4MDAsIDB4NzYsCisgIDB4MDAsIDB4NjksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NjksIDB4MDAsIDB4NmYsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NjYsCisgIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NzksIDB4MDB9fSwKKyB7MHgxOWM2LCA2NCwgeyAweDczLCAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDYzLCAweDAwLCAweDJlLCAweDAwLCAweDM2LCAweDAzLCAweDRiLCAweDAwLCAweDY1LAorICAweDAwLCAweDc5LCAweDAwLCAweDczLCAweDAwLCAweDcwLCAweDAwLCAweDYxLCAweDAwLCAweDZlLCAweDAwLCAweDIwLCAweDAwLCAweDU1LCAweDAwLCAweDUzLAorICAweDAwLCAweDQyLCAweDAwLCAweDIwLCAweDAwLCAweDUzLCAweDAwLCAweDY1LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDYxLCAweDAwLCAweDZjLAorICAweDAwLCAweDIwLCAweDAwLCAweDQxLCAweDAwLCAweDY0LCAweDAwLCAweDYxLCAweDAwLCAweDcwLCAweDAwLCAweDc0LCAweDAwLCAweDY1LCAweDAwfX0sCisgezB4MWEwNiwgNjQsIHsgMHg3MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDFhNDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxYTg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MWFjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxOCwgMHgzMSwgMHgwMCwgMHgwMiwgMHgxYn19LAorIHsweDFiMDYsICA5LCB7IDB4MDQsIDB4MDAsIDB4MDIsIDB4MTgsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MTgsIDB4NTh9fSwKKyB7MHhmZmZmLCAgMCwgezB4MDB9fQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTI4bXNnLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2EyOG1zZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZTQ1NGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2EyOG1zZy5oCkBAIC0wLDAgKzEsMjAxIEBACisvKgorCXVzYTI4bXNnLmgKKworCUNvcHlyaWdodCAoQykgMTk5OC0yMDAwIElubm9TeXMgSW5jb3Jwb3JhdGVkLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorCVRoaXMgZmlsZSBpcyBhdmFpbGFibGUgdW5kZXIgYSBCU0Qtc3R5bGUgY29weXJpZ2h0CisKKwlLZXlzcGFuIFVTQiBBc3luYyBNZXNzYWdlIEZvcm1hdHMgZm9yIHRoZSBVU0EyNlgKKworCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorCW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKwltZXQ6CisKKwkxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhpcyBsaWNlbmNlIHRleHQKKyAgIAl3aXRob3V0IG1vZGlmaWNhdGlvbiwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgICAJZGlzY2xhaW1lci4gIFRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IG5vdGljZSBtdXN0IGFwcGVhciBpbW1lZGlhdGVseSBhdAorICAgCXRoZSBiZWdpbm5pbmcgb2YgYWxsIHNvdXJjZSBmaWxlczoKKworICAgICAgICAJQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgSW5ub1N5cyBJbmNvcnBvcmF0ZWQuICBBbGwgUmlnaHRzIFJlc2VydmVkCisKKyAgICAgICAgCVRoaXMgZmlsZSBpcyBhdmFpbGFibGUgdW5kZXIgYSBCU0Qtc3R5bGUgY29weXJpZ2h0CisKKwkyLiBUaGUgbmFtZSBvZiBJbm5vU3lzIEluY29ycG9yYXRlZCBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgICAJcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgICAJcGVybWlzc2lvbi4KKworCVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgSU5OT1NZUyBDT1JQLiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisJSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworCU9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCisJTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorCUlORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworCShJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorCVNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisJQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisJTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorCU9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKwlTVUNIIERBTUFHRS4gICAgCisKKwlOb3RlOiB0aGVzZSBtZXNzYWdlIGZvcm1hdHMgYXJlIGNvbW1vbiB0byBVU0ExOCwgVVNBMTksIGFuZCBVU0EyODsKKwkoZm9yIFVTQTI4WCwgc2VlIHVzYTI2bXNnLmgpCisKKwlCdWZmZXIgZm9ybWF0cyBmb3IgUlgvVFggZGF0YSBtZXNzYWdlcyBhcmUgbm90IGRlZmluZWQgYnkKKwlhIHN0cnVjdHVyZSwgYnV0IGFyZSBkZXNjcmliZWQgaGVyZToKKworCVVTQiBPVVQgKGhvc3QgLT4gVVNBMjgsIHRyYW5zbWl0KSBtZXNzYWdlcyBjb250YWluIGEgCisJUkVRVUVTVF9BQ0sgaW5kaWNhdG9yIChzZXQgdG8gMHhmZiB0byByZXF1ZXN0IGFuIEFDSyBhdCB0aGUgCisJY29tcGxldGlvbiBvZiB0cmFuc21pdDsgMHgwMCBvdGhlcndpc2UpLCBmb2xsb3dlZCBieSBkYXRhLgorCUlmIHRoZSBwb3J0IGlzIGNvbmZpZ3VyZWQgZm9yIHBhcml0eSwgdGhlIGRhdGEgd2lsbCBiZSBhbiAKKwlhbHRlcm5hdGluZyBzdHJpbmcgb2YgcGFyaXR5IGFuZCBkYXRhIGJ5dGVzLCBzbyB0aGUgbWVzc2FnZQorCWZvcm1hdCB3aWxsIGJlOgorCisJCVJRU1RBQ0sgUEFSIERBVCBQQVIgREFUIC4uLgorCisJc28gdGhlIG1heGltdW0gbGVuZ3RoIGlzIDYzIGJ5dGVzICgxICsgNjIsIG9yIDMxIGRhdGEgYnl0ZXMpOworCWFsd2F5cyBhbiBvZGQgbnVtYmVyIGZvciB0aGUgdG90YWwgbWVzc2FnZSBsZW5ndGguCisKKwlJZiB0aGVyZSBpcyBubyBwYXJpdHksIHRoZSBmb3JtYXQgaXMgc2ltcGx5OgorCisJCVJRU1RBQ0sgREFUIERBVCBEQVQgLi4uCisKKwl3aXRoIGEgdG90YWwgZGF0YSBsZW5ndGggb2YgNjMuCisKKwlVU0IgSU4gKFVTQTI4IC0+IGhvc3QsIHJlY2VpdmUpIG1lc3NhZ2VzIGNvbnRhaW4gZGF0YSBhbmQgcGFyaXR5CisJaWYgcGFyaXR5IGlzIGNvbmZpZ3JlZCwgdGh1c2x5OgorCQorCQlEQVQgUEFSIERBVCBQQVIgREFUIFBBUiAuLi4KKworCWZvciBhIHRvdGFsIG9mIDMyIGRhdGEgYnl0ZXM7CisJCisJSWYgcGFyaXR5IGlzIG5vdCBjb25maWd1cmVkLCB0aGUgZm9ybWF0IGlzOgorCisJCURBVCBEQVQgREFUIC4uLgorCisJZm9yIGEgdG90YWwgb2YgNjQgZGF0YSBieXRlcy4KKworCUluIHRoZSBUWCBtZXNzYWdlcyAoVVNCIE9VVCksIHRoZSAweDAxIGJpdCBvZiB0aGUgUEFSaXR5IGJ5dGUgaXMgCisJdGhlIHBhcml0eSBiaXQuICBJbiB0aGUgUlggbWVzc2FnZXMgKFVTQiBJTiksIHRoZSBQQVJpdHkgYnl0ZSBpcyAKKwl0aGUgY29udGVudCBvZiB0aGUgODA1MSdzIHN0YXR1cyByZWdpc3RlcjsgdGhlIHBhcml0eSBiaXQgCisJKFJYX1BBUklUWV9CSVQpIGlzIHRoZSAweDA0IGJpdC4KKworCXJldmlzaW9uIGhpc3Rvcnk6CisKKwkxOTk5bWF5MDYJYWRkIHJlc2V0RGF0YVRvZ2dsZSB0byBjb250cm9sIG1lc3NhZ2UKKwkyMDAwbWFyMjEJYWRkIHJzMjMyaW52YWxpZCB0byBzdGF0dXMgcmVzcG9uc2UgbWVzc2FnZQorCTIwMDBhcHIwNAlhZGQgMjMwLjRLYiBkZWZpbml0aW9uIHRvIHNldEJhdWRSYXRlCisJMjAwMGFwcjEzCWFkZC9yZW1vdmUgbG9vcGJhY2tNb2RlIHN3aXRjaAorCTIwMDBhcHIxMwljaGFuZ2UgZGVmaW5pdGlvbiBvZiBzZXRCYXVkUmF0ZSB0byBjb3ZlciAxMTUuMktiLCB0b28KKwkyMDAwanVuMDEJYWRkIGV4dGVuZGVkIEJTRC1zdHlsZSBjb3B5cmlnaHQgdGV4dAorKi8KKworI2lmbmRlZglfX1VTQTI4TVNHX18KKyNkZWZpbmUJX19VU0EyOE1TR19fCisKKworc3RydWN0IGtleXNwYW5fdXNhMjhfcG9ydENvbnRyb2xNZXNzYWdlCit7CisJLyoKKwkJdGhlcmUgYXJlIGZvdXIgdHlwZXMgb2YgImNvbW1hbmRzIiBzZW50IGluIHRoZSBjb250cm9sIG1lc3NhZ2U6CisKKwkJMS4JY29uZmlndXJhdGlvbiBjaGFuZ2VzIHdoaWNoIG11c3QgYmUgcmVxdWVzdGVkIGJ5IHNldHRpbmcKKwkJCXRoZSBjb3JyZXNwb25kaW5nICJzZXQiIGZsYWcgKGFuZCBzaG91bGQgb25seSBiZSByZXF1ZXN0ZWQKKwkJCXdoZW4gbmVjZXNzYXJ5LCB0byByZWR1Y2Ugb3ZlcmhlYWQgb24gdGhlIFVTQTI4KToKKwkqLworCXU4CXNldEJhdWRSYXRlLAkvLyAwPWRvbid0IHNldCwgMT1iYXVkTG8vSGksIDI9MTE1LjJLLCAzPTIzMC40SworCQliYXVkTG8sCQkJLy8gaG9zdCBkb2VzIGJhdWQgZGl2aXNvciBjYWxjdWxhdGlvbgorCQliYXVkSGk7CQkJLy8gYmF1ZEhpIGlzIG9ubHkgdXNlZCBmb3IgZmlyc3QgcG9ydCAoZ2l2ZXMgbG93ZXIgcmF0ZXMpCisKKwkvKgorCQkyLgljb25maWd1cmF0aW9uIGNoYW5nZXMgd2hpY2ggYXJlIGRvbmUgZXZlcnkgdGltZSAoYmVjYXVzZSBpdCdzCisJCQloYXJkbHkgbW9yZSB0cm91YmxlIHRvIGRvIHRoZW0gdGhhbiB0byBjaGVjayB3aGV0aGVyIHRvIGRvIHRoZW0pOgorCSovCisJdTgJcGFyaXR5LAkJCS8vIDE9dXNlIHBhcml0eSwgMD1kb24ndAorCQljdHNGbG93Q29udHJvbCwJICAgICAgICAvLyBhbGwgZXhjZXB0IDE5UTogMT11c2UgQ1RTIGZsb3cgY29udHJvbCwgMD1kb24ndAorCQkJCQkvLyAxOVE6IDB4MDg6Q1RTZmxvd0NvbnRyb2wgMHgxMDpEU1JmbG93Q29udHJvbAorCQl4b25GbG93Q29udHJvbCwJLy8gMT11c2UgWE9OL1hPRkYgZmxvdyBjb250cm9sLCAwPWRvbid0CisJCXJ0cywJCQkvLyAxPW9uLCAwPW9mZgorCQlkdHI7CQkJLy8gMT1vbiwgMD1vZmYKKworCS8qCisJCTMuCWNvbmZpZ3VyYXRpb24gZGF0YSB3aGljaCBpcyBzaW1wbHkgdXNlZCBhcyBpcyAobm8gb3ZlcmhlYWQsCisJCQlidXQgbXVzdCBiZSBjb3JyZWN0IGluIGV2ZXJ5IGhvc3QgbWVzc2FnZSkuCisJKi8KKwl1OAlmb3J3YXJkaW5nTGVuZ3RoLCAgLy8gZm9yd2FyZCB3aGVuIHRoaXMgbnVtYmVyIG9mIGNoYXJzIGF2YWlsYWJsZQorCQlmb3J3YXJkTXMsCQkvLyBmb3J3YXJkIHRoaXMgbWFueSBtcyBhZnRlciBsYXN0IHJ4IGRhdGEKKwkJYnJlYWtUaHJlc2hvbGQsCS8vIHNwZWNpZmllZCBpbiBtcywgMS0yNTUgKHNlZSBub3RlIGJlbG93KQorCQl4b25DaGFyLAkJLy8gc3BlY2lmaWVkIGluIGN1cnJlbnQgY2hhcmFjdGVyIGZvcm1hdAorCQl4b2ZmQ2hhcjsJCS8vIHNwZWNpZmllZCBpbiBjdXJyZW50IGNoYXJhY3RlciBmb3JtYXQKKworCS8qCisJCTQuCWNvbW1hbmRzIHdoaWNoIGFyZSBmbGFncyBvbmx5OyB0aGVzZSBhcmUgcHJvY2Vzc2VkIGluIG9yZGVyCisJCQkoc28gdGhhdCwgZS5nLiwgaWYgYm90aCBfdHhPbiBhbmQgX3R4T2ZmIGZsYWdzIGFyZSBzZXQsIHRoZQorCQkJcG9ydCBlbmRzIGluIGEgVFhfT0ZGIHN0YXRlKTsgYW55IG5vbi16ZXJvIHZhbHVlIGlzIHJlc3BlY3RlZAorCSovCisJdTgJX3R4T24sCQkJLy8gZW5hYmxlIHRyYW5zbWl0dGluZyAoYW5kIGNvbnRpbnVlIGlmIHRoZXJlJ3MgZGF0YSkKKwkJX3R4T2ZmLAkJCS8vIHN0b3AgdHJhbnNtaXR0aW5nCisJCXR4Rmx1c2gsCQkvLyB0b3NzIG91dGJvdW5kIGRhdGEKKwkJdHhGb3JjZVhvZmYsCS8vIHByZXRlbmQgd2UndmUgcmVjZWl2ZWQgWE9GRgorCQl0eEJyZWFrLAkJLy8gdHVybiBvbiBicmVhayAobGVhdmUgb24gdW50aWwgdHhPbiBjbGVhcnMgaXQpCisJCXJ4T24sCQkJLy8gdHVybiBvbiByZWNlaXZlcgorCQlyeE9mZiwJCQkvLyB0dXJuIG9mZiByZWNlaXZlcgorCQlyeEZsdXNoLAkJLy8gdG9zcyBpbmJvdW5kIGRhdGEKKwkJcnhGb3J3YXJkLAkJLy8gZm9yd2FyZCBhbGwgaW5ib3VuZCBkYXRhLCBOT1cKKwkJcmV0dXJuU3RhdHVzLAkvLyByZXR1cm4gY3VycmVudCBzdGF0dXMgbiB0aW1lcyAoMSBvciAyKQorCQlyZXNldERhdGFUb2dnbGU7Ly8gcmVzZXQgZGF0YSB0b2dnbGUgc3RhdGUgdG8gREFUQTAKKwkKK307CisKK3N0cnVjdCBrZXlzcGFuX3VzYTI4X3BvcnRTdGF0dXNNZXNzYWdlCit7CisJdTgJcG9ydCwJCQkvLyAwPWZpcnN0LCAxPXNlY29uZCwgMj1nbG9iYWwgKHNlZSBiZWxvdykKKwkJY3RzLAorCQlkc3IsCQkJLy8gKG5vdCB1c2VkIGluIGFsbCBwcm9kdWN0cykKKwkJZGNkLAorCisJCXJpLAkJCQkvLyAobm90IHVzZWQgaW4gYWxsIHByb2R1Y3RzKQorCQlfdHhPZmYsCQkJLy8gcG9ydCBoYXMgYmVlbiBkaXNhYmxlZCAoYnkgaG9zdCkKKwkJX3R4WG9mZiwJCS8vIHBvcnQgaXMgaW4gWE9GRiBzdGF0ZSAoZWl0aGVyIGhvc3Qgb3IgUlggWE9GRikKKwkJZGF0YUxvc3QsCQkvLyBjb3VudCBvZiBsb3N0IGNoYXJzOyB3cmFwczsgbm90IGd1YXJhbnRlZWQgZXhhY3QKKworCQlyeEVuYWJsZWQsCQkvLyBhcyBjb25maWd1cmVkIGJ5IHJ4T24vcnhPZmYgMT1vbiwgMD1vZmYKKwkJcnhCcmVhaywJCS8vIDE9d2UncmUgaW4gYnJlYWsgc3RhdGUKKwkJcnMyMzJpbnZhbGlkLAkvLyAxPW5vIHZhbGlkIHNpZ25hbHMgb24gcnMtMjMyIGlucHV0cworCQljb250cm9sUmVzcG9uc2U7Ly8gMT1hIGNvbnRyb2wgbWVzc2FnZXMgaGFzIGJlZW4gcHJvY2Vzc2VkCit9OworCisvLyBiaXQgZGVmaW5lcyBpbiB0eFN0YXRlCisjZGVmaW5lCVRYX09GRgkJCTB4MDEJLy8gcmVxdWVzdGVkIGJ5IGhvc3QgdHhPZmYgY29tbWFuZAorI2RlZmluZQlUWF9YT0ZGCQkJMHgwMgkvLyBlaXRoZXIgcmVhbCwgb3Igc2ltdWxhdGVkIGJ5IGhvc3QKKworc3RydWN0IGtleXNwYW5fdXNhMjhfZ2xvYmFsQ29udHJvbE1lc3NhZ2UKK3sKKwl1OAlzZW5kR2xvYmFsU3RhdHVzLAkvLyAyPXJlcXVlc3QgZm9yIHR3byBzdGF0dXMgcmVzcG9uc2VzCisJCXJlc2V0U3RhdHVzVG9nZ2xlLAkvLyAxPXJlc2V0IGdsb2JhbCBzdGF0dXMgdG9nZ2xlCisJCXJlc2V0U3RhdHVzQ291bnQ7CS8vIGEgY3ljbGluZyB2YWx1ZQorfTsKKworc3RydWN0IGtleXNwYW5fdXNhMjhfZ2xvYmFsU3RhdHVzTWVzc2FnZQoreworCXU4CXBvcnQsCQkJCS8vIDMKKwkJc2VuZEdsb2JhbFN0YXR1cywJLy8gZnJvbSByZXF1ZXN0LCBkZWNyZW1lbnRlZAorCQlyZXNldFN0YXR1c0NvdW50OwkvLyBhcyBpbiByZXF1ZXN0Cit9OworCitzdHJ1Y3Qga2V5c3Bhbl91c2EyOF9nbG9iYWxEZWJ1Z01lc3NhZ2UKK3sKKwl1OAlwb3J0LAkJCQkvLyAyCisJCW4sCQkJCQkvLyB0eXBpY2FsbHkgYSBjb3VudC9zdGF0dXMgYnl0ZQorCQliOwkJCQkJLy8gdHlwaWNhbGx5IGEgZGF0YSBieXRlCit9OworCisvLyBpZTogdGhlIG1heGltdW0gbGVuZ3RoIG9mIGFuIEVaVVNCIGVuZHBvaW50IGJ1ZmZlcgorI2RlZmluZQlNQVhfREFUQV9MRU4JCQk2NAorCisvLyB0aGUgcGFyaXR5IGJ5dGVzIGhhdmUgb25seSBvbmUgc2lnbmlmaWNhbnQgYml0CisjZGVmaW5lCVJYX1BBUklUWV9CSVQJCQkweDA0CisjZGVmaW5lCVRYX1BBUklUWV9CSVQJCQkweDAxCisKKy8vIHVwZGF0ZSBzdGF0dXMgYXBwcm94LiA2MCB0aW1lcyBhIHNlY29uZCAoMTYuNjY2NiBtcykKKyNkZWZpbmUJU1RBVFVTX1VQREFURV9JTlRFUlZBTAkxNgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjh4X2Z3LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2EyOHhfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzg3ZWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjh4X2Z3LmgKQEAgLTAsMCArMSw0NDcgQEAKKy8qIGtleXNwYW5fdXNhMjh4X2Z3LmgKKworCVRoZSBmaXJtd2FyZSBjb250YWluZWQgaGVyZWluIGFzIGtleXNwYW5fdXNhMjh4X2Z3LmggaXMKKworCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwMQorCQlLZXlzcGFuLCBBIGRpdmlzaW9uIG9mIElubm9TeXMgSW5jb3Jwb3JhdGVkICgiS2V5c3BhbiIpCisJCQorCWFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZCBvcgorCXB1YmxpYyBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGZyb20gd2hpY2ggdGhpcyBmaXJtd2FyZSBpbWFnZSBpcworCWRlcml2ZWQuICBFeGNlcHQgYXMgbm90ZWQgYmVsb3cgdGhpcyBmaXJtd2FyZSBpbWFnZSBtYXkgbm90IGJlIAorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgCisJS2V5c3BhbidzIHByaW9yIHdyaXR0ZW4gY29uc2VudC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKwlQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgCisJaW1hZ2UgYXMgcGFydCBvZiBhIExpbnV4IG9yIG90aGVyIE9wZW4gU291cmNlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuIAorCisJVGhpcyBmaXJtd2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggIAorCUtleXNwYW4gaGFyZHdhcmUuICBEaXN0cmlidXRpb24gYW5kL29yIE1vZGlmaWNhdGlvbiBvZiB0aGUgCisJa2V5c3Bhbi5jIGRyaXZlciB3aGljaCBpbmNsdWRlcyB0aGlzIGZpcm13YXJlLCBpbiB3aG9sZSBvciBpbiAKKwlwYXJ0LCByZXF1aXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3RhdGVtZW50LiIKKworKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkIGtleXNwYW5fdXNhMjh4X2Zpcm13YXJlW10gPSB7CisgezB4MDAzMywgIDMsIHsgMHgwMiwgMHgxMiwgMHhmN319LAorIHsweDAwMDMsIDE2LCB7IDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsIDB4MzAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZjB9fSwKKyB7MHgwMDEzLCAxNiwgeyAweDkwLCAweDdmLCAweDk0LCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweDc0LCAweGZmLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk3LCAweGYwLCAweDkwfX0sCisgezB4MDAyMywgMTUsIHsgMHg3ZiwgMHg5NSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwgMHgwNywgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhmMCwgMHgyMn19LAorIHsweDAwNDYsIDE2LCB7IDB4MzAsIDB4MDksIDB4MTgsIDB4MTIsIDB4MTMsIDB4MWIsIDB4ZWYsIDB4YzMsIDB4OTUsIDB4M2MsIDB4NDAsIDB4MDMsIDB4MDIsIDB4MDAsIDB4ZDgsIDB4OTB9fSwKKyB7MHgwMDU2LCAxNiwgeyAweDdmLCAweGJmLCAweDc0LCAweDAxLCAweGYwLCAweGMyLCAweDA5LCAweGMyLCAweDAwLCAweDgwLCAweDc3LCAweDMwLCAweDAzLCAweDNiLCAweDkwLCAweDdmfX0sCisgezB4MDA2NiwgMTYsIHsgMHhjNiwgMHhlMCwgMHgyMCwgMHhlMSwgMHg2ZCwgMHgxMiwgMHgxMywgMHgxYiwgMHhlZiwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHg2NCwgMHg5MCwgMHg3ZX19LAorIHsweDAwNzYsIDE2LCB7IDB4NDAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MDksIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZTAsIDB4MTQsIDB4ZjUsIDB4MTksIDB4MjAsIDB4MDAsIDB4MTEsIDB4NjB9fSwKKyB7MHgwMDg2LCAxNiwgeyAweDBmLCAweGY1LCAweDA4LCAweDdlLCAweDdlLCAweDdmLCAweDQxLCAweDc1LCAweDBjLCAweDdlLCAweDc1LCAweDBkLCAweDQxLCAweDEyLCAweDBjLCAweGJhfX0sCisgezB4MDA5NiwgMTYsIHsgMHhjMiwgMHgwMywgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHg4MCwgMHgzOSwgMHg5MCwgMHg3ZiwgMHhjOCwgMHhlMCwgMHgyMCwgMHhlMSwgMHgzMn19LAorIHsweDAwYTYsIDE2LCB7IDB4MTIsIDB4MTMsIDB4MWIsIDB4ZWYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4MjksIDB4OTAsIDB4N2QsIDB4YzAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MDl9fSwKKyB7MHgwMGI2LCAxNiwgeyAweDkwLCAweDdmLCAweGM5LCAweGUwLCAweDE0LCAweGY1LCAweDE5LCAweDIwLCAweDAwLCAweDExLCAweDYwLCAweDBmLCAweGY1LCAweDA4LCAweDdlLCAweDdkfX0sCisgezB4MDBjNiwgMTYsIHsgMHg3ZiwgMHhjMSwgMHg3NSwgMHgwYywgMHg3ZCwgMHg3NSwgMHgwZCwgMHhjMSwgMHgxMiwgMHgwYywgMHhiYSwgMHhkMiwgMHgwMywgMHhlNCwgMHg5MCwgMHg3Zn19LAorIHsweDAwZDYsIDE2LCB7IDB4YzksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjYsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MDEsIDB4NjAsIDB4MTIsIDB4MTEsIDB4ZDYsIDB4OGZ9fSwKKyB7MHgwMGU2LCAxNiwgeyAweDE5LCAweDEyLCAweDEzLCAweDI3LCAweDhmLCAweDM2LCAweGU1LCAweDE5LCAweGMzLCAweDk1LCAweDNhLCAweDUwLCAweDBmLCAweDEyLCAweDEyLCAweGVifX0sCisgezB4MDBmNiwgMTYsIHsgMHhlZiwgMHgzMCwgMHhlMCwgMHgwOCwgMHhlNSwgMHgzNiwgMHgyMCwgMHhlNywgMHgwMywgMHgzMCwgMHgwYiwgMHg1ZSwgMHhjMiwgMHgwYiwgMHhlNSwgMHgxOX19LAorIHsweDAwMzYsIDEyLCB7IDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjJ9fSwKKyB7MHgwMDQzLCAgMywgeyAweDAyLCAweDEzLCAweDAwfX0sCisgezB4MDAwMCwgIDMsIHsgMHgwMiwgMHgwZSwgMHgwMH19LAorIHsweDAxMDYsIDY0LCB7IDB4NjAsIDB4NTgsIDB4YjQsIDB4ODAsIDB4MDMsIDB4NDMsIDB4MzYsIDB4MDIsIDB4ZTUsIDB4MzYsIDB4MzAsIDB4ZTcsIDB4MjYsIDB4ZTUsIDB4MTksIDB4ZDMsIDB4OTQsCisgIDB4MjAsIDB4NDAsIDB4MDMsIDB4NzUsIDB4MTksIDB4MjAsIDB4ODUsIDB4MTksIDB4MDgsIDB4N2UsIDB4N2UsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MGMsIDB4N2UsCisgIDB4NzUsIDB4MGQsIDB4ODAsIDB4YWYsIDB4MzYsIDB4MTIsIDB4MGYsIDB4NGIsIDB4ZTUsIDB4MTksIDB4MjUsIDB4ZTAsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZjAsCisgIDB4ODAsIDB4MjcsIDB4ZTUsIDB4MTksIDB4ZDMsIDB4OTQsIDB4M2YsIDB4NDAsIDB4MDMsIDB4NzUsIDB4MTksIDB4M2YsIDB4ODUsIDB4MTksIDB4MDh9fSwKKyB7MHgwMTQ2LCA2NCwgeyAweDkwLCAweDdlLCAweDgwLCAweGU1LCAweDM2LCAweGYwLCAweDdlLCAweDdlLCAweDdmLCAweDgxLCAweDc1LCAweDBjLCAweDdlLCAweDc1LCAweDBkLCAweDgxLCAweDEyLAorICAweDBjLCAweGRmLCAweGU1LCAweDE5LCAweDA0LCAweDkwLCAweDdmLCAweGI3LCAweGYwLCAweDkwLCAweDdmLCAweGNlLCAweGUwLCAweDMwLCAweGUxLCAweDA2LAorICAweDIwLCAweDA1LCAweDAzLCAweDAyLCAweDAzLCAweGMxLCAweGMyLCAweDA1LCAweGU0LCAweGY1LCAweDE4LCAweDc0LCAweDQwLCAweDI1LCAweDE4LCAweGY1LAorICAweDgyLCAweGU0LCAweDM0LCAweDdjLCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDE4LCAweDdjLCAweDAwLCAweDdiLCAweDAxLCAweDdhfX0sCisgezB4MDE4NiwgNjQsIHsgMHg3ZSwgMHg3OSwgMHgwMCwgMHgyNCwgMHgwMCwgMHhmOSwgMHhlYywgMHgzNCwgMHg3ZSwgMHhmYSwgMHhlZiwgMHgxMiwgMHgwZSwgMHhkMiwgMHgwNSwgMHgxOCwgMHhlNSwKKyAgMHgxOCwgMHhiNCwgMHgyMCwgMHhkNywgMHg5MCwgMHg3ZSwgMHgwMCwgMHhlMCwgMHg2MCwgMHg2OCwgMHg5MCwgMHg3ZSwgMHgwMywgMHhlMCwgMHg2MCwgMHgyNCwKKyAgMHg3ZiwgMHgwMSwgMHhlNCwgMHhmZCwgMHgxMiwgMHgxMSwgMHhiMSwgMHg3ZiwgMHgwMywgMHg3ZCwgMHhjZCwgMHgxMiwgMHgxMSwgMHhiMSwgMHg0MywgMHg0NiwKKyAgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NiwgMHhmMCwgMHhlNCwgMHg5MH19LAorIHsweDAxYzYsIDY0LCB7IDB4N2UsIDB4MTMsIDB4ZjAsIDB4ODAsIDB4MzAsIDB4OTAsIDB4N2UsIDB4MDEsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTAsIDB4MzUsIDB4OTAsIDB4N2UsIDB4MDIsIDB4ZTAsCisgIDB4ZmYsIDB4MTIsIDB4MTAsIDB4NWIsIDB4N2YsIDB4MDEsIDB4OTAsIDB4N2UsIDB4MTEsIDB4ZTAsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4YjEsIDB4N2YsIDB4MDMsCisgIDB4N2QsIDB4MDcsIDB4MTIsIDB4MTEsIDB4YjEsIDB4NDMsIDB4NDYsIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZTUsIDB4NDYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4ZTUsIDB4NDAsIDB4NDQsIDB4MDYsIDB4OTB9fSwKKyB7MHgwMjA2LCA2NCwgeyAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdlLCAweDAzLCAweGUwLCAweDcwLCAweDA2LCAweDkwLCAweDdlLCAweDEzLCAweGUwLCAweDcwLCAweDA4LCAweGU0LCAweDkwLAorICAweDdlLCAweDEzLCAweGYwLCAweDc1LCAweDI1LCAweGZmLCAweDkwLCAweDdlLCAweDA1LCAweGUwLCAweDYwLCAweDEyLCAweGEzLCAweGUwLCAweDU0LCAweDNmLAorICAweGY1LCAweDQ0LCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ0LCAweGYwLCAweDkwLCAweDdlLAorICAweDA3LCAweGUwLCAweDYwLCAweDJiLCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQyLCAweDgwLCAweDgwLCAweDAzLCAweDUzLCAweDQyfX0sCisgezB4MDI0NiwgNjQsIHsgMHg3ZiwgMHg1MywgMHg0MiwgMHhmYywgMHg5MCwgMHg3ZSwgMHgwOSwgMHhlMCwgMHg2MCwgMHgxMSwgMHg0MywgMHg0MiwgMHgwMiwgMHhhMywgMHhlMCwgMHhmZiwgMHgxMiwKKyAgMHgxMCwgMHhhNywgMHg5MCwgMHg3ZSwgMHgwYiwgMHhlMCwgMHhmZiwgMHgxMiwgMHgxMCwgMHhjZCwgMHhhZiwgMHg0MiwgMHgxMiwgMHgxMCwgMHg4MSwgMHg5MCwKKyAgMHg3ZSwgMHgwMywgMHhlMCwgMHg2MCwgMHgwOCwgMHg1MywgMHg0MiwgMHg3ZiwgMHhhZiwgMHg0MiwgMHgxMiwgMHgxMCwgMHg4MSwgMHg5MCwgMHg3ZSwgMHgwYywKKyAgMHhlMCwgMHg2MCwgMHgxOCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0NiwgMHgwMiwgMHg4MCwgMHgwMywgMHg1MywgMHg0NiwgMHhmZH19LAorIHsweDAyODYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MGUsIDB4ZTAsIDB4NjAsCisgIDB4MTgsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDYsIDB4MDEsIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDYsIDB4ZmUsIDB4OTAsIDB4N2YsIDB4OTgsCisgIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MTIsIDB4ZTAsIDB4ZjUsIDB4M2EsIDB4YTMsCisgIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGQsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4M2MsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDYsIDB4MTB9fSwKKyB7MHgwMmM2LCA2NCwgeyAweDgwLCAweDAzLCAweDUzLCAweDQ2LCAweGVmLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ2LCAweGYwLAorICAweDkwLCAweDdlLCAweDE2LCAweGUwLCAweDYwLCAweDMyLCAweDUzLCAweDQ0LCAweGJmLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LAorICAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDEyLCAweDEyLCAweGRmLAorICAweGVmLCAweDU0LCAweGZlLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDUzLCAweDNlLCAweGZkLCAweGU0LCAweGZmLCAweGFkLCAweDNlLCAweDEyfX0sCisgezB4MDMwNiwgNjQsIHsgMHgxMSwgMHhiMSwgMHhlNCwgMHhmNSwgMHgyYSwgMHhmNSwgMHgyOSwgMHhkMiwgMHgwNywgMHg5MCwgMHg3ZSwgMHgxNywgMHhlMCwgMHg2MCwgMHgwZiwgMHg0MywgMHgzZSwKKyAgMHgwMiwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZSwgMHgxMiwgMHgxMSwgMHhiMSwgMHg3NSwgMHgyOSwgMHgwMSwgMHhkMiwgMHgwNywgMHg5MCwgMHg3ZSwgMHgxOCwKKyAgMHhlMCwgMHg2MCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHhlNSwgMHg0MCwgMHg0NCwgMHgwNCwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHhmMCwgMHhkMiwgMHgwMCwgMHg5MCwgMHg3ZSwgMHgxOSwgMHhlMCwgMHg2MCwgMHgxMSwgMHg0MywgMHg0NCwgMHg0MCwgMHg5MCwgMHg3ZiwgMHg5OH19LAorIHsweDAzNDYsIDY0LCB7IDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MWEsIDB4ZTAsIDB4NjAsIDB4MGYsCisgIDB4NTMsIDB4M2UsIDB4ZmUsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2UsIDB4MTIsIDB4MTEsIDB4YjEsIDB4NzUsIDB4MmIsIDB4MDEsIDB4ZDIsIDB4MDcsIDB4OTAsCisgIDB4N2UsIDB4MWIsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NDMsIDB4M2UsIDB4MDEsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2UsIDB4MTIsIDB4MTEsIDB4YjEsIDB4ZTQsCisgIDB4ZjUsIDB4MmIsIDB4ZDIsIDB4MDcsIDB4OTAsIDB4N2UsIDB4MWMsIDB4ZTAsIDB4NjAsIDB4MGUsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTJ9fSwKKyB7MHgwMzg2LCA2NCwgeyAweGYwLCAweGU1LCAweDQwLCAweDQ0LCAweDAyLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdlLCAweDFkLCAweGUwLCAweDYwLCAweDAyLCAweGQyLCAweDBiLAorICAweDkwLCAweDdlLCAweDFlLCAweGUwLCAweDYwLCAweDA4LCAweDc1LCAweDJjLCAweDAxLCAweGU0LCAweGY1LCAweDM4LCAweGQyLCAweDA3LCAweDkwLCAweDdlLAorICAweDFmLCAweGUwLCAweDYwLCAweDExLCAweDkwLCAweDdmLCAweGQ3LCAweDc0LCAweDExLCAweGYwLCAweDc0LCAweDMxLCAweGYwLCAweDc0LCAweDE1LCAweGYwLAorICAweDc0LCAweDM1LCAweGYwLCAweGQyLCAweDAzLCAweGU0LCAweDkwLCAweDdmLCAweGNmLCAweGYwLCAweDMwLCAweDFhLCAweDUyLCAweGU1LCAweDM4fX0sCisgezB4MDNjNiwgNjQsIHsgMHg2MCwgMHgwMiwgMHgxNSwgMHgzOCwgMHgyMCwgMHgxMywgMHg0OSwgMHhlNSwgMHgxMywgMHhkMywgMHg5NCwgMHgwMCwgMHg0MCwgMHgwNCwgMHgxNSwgMHgxMywgMHg4MCwKKyAgMHgzZSwgMHg3NSwgMHgxMywgMHgwYSwgMHgzMCwgMHgxYiwgMHgwMiwgMHhkMiwgMHgxMywgMHgxMiwgMHgxMiwgMHhkZiwgMHhlZiwgMHg1NCwgMHgwMSwgMHhmNSwKKyAgMHgxOSwgMHg2NSwgMHgyYSwgMHg2MCwgMHgwNSwgMHg4NSwgMHgxOSwgMHgyYSwgMHhkMiwgMHgwNywgMHgxMiwgMHgxMywgMHgzMywgMHhlZiwgMHg1NCwgMHg4MCwKKyAgMHhmNSwgMHgxOSwgMHg2NSwgMHgyNiwgMHg2MCwgMHgwNSwgMHg4NSwgMHgxOSwgMHgyNiwgMHhkMiwgMHgwNywgMHgzMCwgMHgwZCwgMHgxMSwgMHgxMn19LAorIHsweDA0MDYsIDY0LCB7IDB4MTMsIDB4MzMsIDB4ZWYsIDB4NTQsIDB4MTAsIDB4ZjUsIDB4MTksIDB4NjUsIDB4MjUsIDB4NjAsIDB4MDUsIDB4ODUsIDB4MTksIDB4MjUsIDB4ZDIsIDB4MDcsIDB4MjAsCisgIDB4MWIsIDB4MDMsIDB4MDIsIDB4MDcsIDB4ZWMsIDB4MzAsIDB4MGEsIDB4MTgsIDB4MTIsIDB4MTMsIDB4NmYsIDB4ZWYsIDB4YzMsIDB4OTUsIDB4M2QsIDB4NDAsCisgIDB4MDMsIDB4MDIsIDB4MDQsIDB4YWUsIDB4OTAsIDB4N2YsIDB4YzEsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4YzIsIDB4MGEsIDB4YzIsIDB4MDAsIDB4ODAsIDB4NzcsCisgIDB4MzAsIDB4MDQsIDB4M2IsIDB4OTAsIDB4N2YsIDB4Y2EsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4NmQsIDB4MTIsIDB4MTMsIDB4NmYsIDB4ZWYsIDB4YzN9fSwKKyB7MHgwNDQ2LCA2NCwgeyAweDk0LCAweDQwLCAweDUwLCAweDY0LCAweDkwLCAweDdkLCAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDBhLCAweDkwLCAweDdmLCAweGNiLCAweGUwLCAweDE0LCAweGY1LAorICAweDE5LCAweDIwLCAweDAwLCAweDExLCAweDYwLCAweDBmLCAweGY1LCAweDA4LCAweDdlLCAweDdkLCAweDdmLCAweDQxLCAweDc1LCAweDBjLCAweDdkLCAweDc1LAorICAweDBkLCAweDQxLCAweDEyLCAweDBkLCAweDA0LCAweGMyLCAweDA0LCAweGU0LCAweDkwLCAweDdmLCAweGNiLCAweGYwLCAweDgwLCAweDM5LCAweDkwLCAweDdmLAorICAweGNjLCAweGUwLCAweDIwLCAweGUxLCAweDMyLCAweDEyLCAweDEzLCAweDZmLCAweGVmLCAweGMzLCAweDk0LCAweDQwLCAweDUwLCAweDI5LCAweDkwfX0sCisgezB4MDQ4NiwgNjQsIHsgMHg3YywgMHhjMCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhjZCwgMHhlMCwgMHgxNCwgMHhmNSwgMHgxOSwgMHgyMCwgMHgwMCwgMHgxMSwgMHg2MCwKKyAgMHgwZiwgMHhmNSwgMHgwOCwgMHg3ZSwgMHg3YywgMHg3ZiwgMHhjMSwgMHg3NSwgMHgwYywgMHg3YywgMHg3NSwgMHgwZCwgMHhjMSwgMHgxMiwgMHgwZCwgMHgwNCwKKyAgMHhkMiwgMHgwNCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjZCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiYSwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwNSwKKyAgMHgzNiwgMHgxMiwgMHgxMiwgMHgyMCwgMHg4ZiwgMHgxOSwgMHgxMiwgMHgxMywgMHg3YiwgMHg4ZiwgMHgzNywgMHhlNSwgMHgxOSwgMHhjMywgMHg5NX19LAorIHsweDA0YzYsIDY0LCB7IDB4M2IsIDB4NTAsIDB4MGYsIDB4MTIsIDB4MTMsIDB4NTcsIDB4ZWYsIDB4MzAsIDB4ZTAsIDB4MDgsIDB4ZTUsIDB4MzcsIDB4MjAsIDB4ZTcsIDB4MDMsIDB4MzAsIDB4MGMsCisgIDB4NWUsIDB4YzIsIDB4MGMsIDB4ZTUsIDB4MTksIDB4NjAsIDB4NTgsIDB4YjQsIDB4ODAsIDB4MDMsIDB4NDMsIDB4MzcsIDB4MDIsIDB4ZTUsIDB4MzcsIDB4MzAsCisgIDB4ZTcsIDB4MjYsIDB4ZTUsIDB4MTksIDB4ZDMsIDB4OTQsIDB4MjAsIDB4NDAsIDB4MDMsIDB4NzUsIDB4MTksIDB4MjAsIDB4ODUsIDB4MTksIDB4MDgsIDB4N2UsCisgIDB4N2QsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MGMsIDB4N2QsIDB4NzUsIDB4MGQsIDB4ODAsIDB4YWYsIDB4MzcsIDB4MTIsIDB4MGYsIDB4ODQsIDB4ZTV9fSwKKyB7MHgwNTA2LCA2NCwgeyAweDE5LCAweDI1LCAweGUwLCAweDkwLCAweDdmLCAweGJiLCAweGYwLCAweDgwLCAweDI3LCAweGU1LCAweDE5LCAweGQzLCAweDk0LCAweDNmLCAweDQwLCAweDAzLCAweDc1LAorICAweDE5LCAweDNmLCAweDg1LCAweDE5LCAweDA4LCAweDkwLCAweDdkLCAweDgwLCAweGU1LCAweDM3LCAweGYwLCAweDdlLCAweDdkLCAweDdmLCAweDgxLCAweDc1LAorICAweDBjLCAweDdkLCAweDc1LCAweDBkLCAweDgxLCAweDEyLCAweDBkLCAweDI5LCAweGU1LCAweDE5LCAweDA0LCAweDkwLCAweDdmLCAweGJiLCAweGYwLCAweDkwLAorICAweDdmLCAweGQwLCAweGUwLCAweDMwLCAweGUxLCAweDA2LCAweDIwLCAweDA2LCAweDAzLCAweDAyLCAweDA3LCAweDk3LCAweGMyLCAweDA2LCAweGU0fX0sCisgezB4MDU0NiwgNjQsIHsgMHhmNSwgMHgxOCwgMHg3NCwgMHhjMCwgMHgyNSwgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgxOCwKKyAgMHg3YywgMHgwMCwgMHg3YiwgMHgwMSwgMHg3YSwgMHg3ZSwgMHg3OSwgMHgyMCwgMHgyNCwgMHgyMCwgMHhmOSwgMHhlYywgMHgzNCwgMHg3ZSwgMHhmYSwgMHhlZiwKKyAgMHgxMiwgMHgwZSwgMHhkMiwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgyMCwgMHhkNywgMHg5MCwgMHg3ZSwgMHgyMCwgMHhlMCwgMHg2MCwgMHg2OCwKKyAgMHg5MCwgMHg3ZSwgMHgyMywgMHhlMCwgMHg2MCwgMHgyNCwgMHg3ZiwgMHgwMSwgMHhlNCwgMHhmZCwgMHgxMiwgMHgxMSwgMHhmYiwgMHg3ZiwgMHgwM319LAorIHsweDA1ODYsIDY0LCB7IDB4N2QsIDB4Y2QsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4NDMsIDB4NDcsIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4ZTUsIDB4NDcsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2UsIDB4MzMsIDB4ZjAsIDB4ODAsIDB4MzAsIDB4OTAsIDB4N2UsIDB4MjEsIDB4ZTAsIDB4ZmYsIDB4MTIsCisgIDB4MTEsIDB4MTksIDB4OTAsIDB4N2UsIDB4MjIsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTEsIDB4M2YsIDB4N2YsIDB4MDEsIDB4OTAsIDB4N2UsIDB4MzEsIDB4ZTAsCisgIDB4ZmQsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4N2YsIDB4MDMsIDB4N2QsIDB4MDcsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4NDMsIDB4NDcsIDB4ODAsIDB4OTB9fSwKKyB7MHgwNWM2LCA2NCwgeyAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ3LCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBhLCAweGYwLAorICAweGU1LCAweDQxLCAweDQ0LCAweDA2LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdlLCAweDIzLCAweGUwLCAweDcwLCAweDA2LCAweDkwLCAweDdlLAorICAweDMzLCAweGUwLCAweDcwLCAweDA4LCAweGU0LCAweDkwLCAweDdlLCAweDMzLCAweGYwLCAweDc1LCAweDJlLCAweGZmLCAweDkwLCAweDdlLCAweDI1LCAweGUwLAorICAweDYwLCAweDEyLCAweGEzLCAweGUwLCAweDU0LCAweDNmLCAweGY1LCAweDQ1LCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDkwfX0sCisgezB4MDYwNiwgNjQsIHsgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NSwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgyNywgMHhlMCwgMHg2MCwgMHgyYiwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0MywKKyAgMHg4MCwgMHg4MCwgMHgwMywgMHg1MywgMHg0MywgMHg3ZiwgMHg1MywgMHg0MywgMHhmYywgMHg5MCwgMHg3ZSwgMHgyOSwgMHhlMCwgMHg2MCwgMHgxMSwgMHg0MywKKyAgMHg0MywgMHgwMiwgMHhhMywgMHhlMCwgMHhmZiwgMHgxMiwgMHgxMSwgMHg2NSwgMHg5MCwgMHg3ZSwgMHgyYiwgMHhlMCwgMHhmZiwgMHgxMiwgMHgxMSwgMHg4YiwKKyAgMHhhZiwgMHg0MywgMHgxMiwgMHgxMCwgMHhmMywgMHg5MCwgMHg3ZSwgMHgyMywgMHhlMCwgMHg2MCwgMHgwOCwgMHg1MywgMHg0MywgMHg3ZiwgMHhhZn19LAorIHsweDA2NDYsIDY0LCB7IDB4NDMsIDB4MTIsIDB4MTAsIDB4ZjMsIDB4OTAsIDB4N2UsIDB4MmMsIDB4ZTAsIDB4NjAsIDB4MTgsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDcsIDB4MDIsCisgIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDcsIDB4ZmQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDcsCisgIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MmUsIDB4ZTAsIDB4NjAsIDB4MTgsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDcsIDB4MDEsIDB4ODAsIDB4MDMsCisgIDB4NTMsIDB4NDcsIDB4ZmUsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDcsIDB4ZjB9fSwKKyB7MHgwNjg2LCA2NCwgeyAweDkwLCAweDdlLCAweDMyLCAweGUwLCAweGY1LCAweDNiLCAweGEzLCAweGUwLCAweDEzLCAweDkyLCAweDBlLCAweGEzLCAweGUwLCAweGY1LCAweDNkLCAweGEzLCAweGUwLAorICAweDYwLCAweDA1LCAweDQzLCAweDQ3LCAweDEwLCAweDgwLCAweDAzLCAweDUzLCAweDQ3LCAweGVmLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLAorICAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ3LCAweGYwLCAweDkwLCAweDdlLCAweDM2LCAweGUwLCAweDYwLCAweDMyLCAweDUzLCAweDQ1LCAweGJmLCAweDkwLAorICAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdmfX0sCisgezB4MDZjNiwgNjQsIHsgMHg5OCwgMHg3NCwgMHgwOSwgMHhmMCwgMHgxMiwgMHgxMywgMHg0YiwgMHhlZiwgMHg1NCwgMHhmZSwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg1MywgMHgzZiwgMHhmZCwKKyAgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZiwgMHgxMiwgMHgxMSwgMHhmYiwgMHhlNCwgMHhmNSwgMHgzMywgMHhmNSwgMHgzMiwgMHhkMiwgMHgwOCwgMHg5MCwgMHg3ZSwKKyAgMHgzNywgMHhlMCwgMHg2MCwgMHgwZiwgMHg0MywgMHgzZiwgMHgwMiwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZiwgMHgxMiwgMHgxMSwgMHhmYiwgMHg3NSwgMHgzMiwKKyAgMHgwMSwgMHhkMiwgMHgwOCwgMHg5MCwgMHg3ZSwgMHgzOCwgMHhlMCwgMHg2MCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYSwgMHhmMH19LAorIHsweDA3MDYsIDY0LCB7IDB4ZTUsIDB4NDEsIDB4NDQsIDB4MDQsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZDIsIDB4MDAsIDB4OTAsIDB4N2UsIDB4MzksIDB4ZTAsIDB4NjAsIDB4MTEsIDB4NDMsCisgIDB4NDUsIDB4NDAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsCisgIDB4OTAsIDB4N2UsIDB4M2EsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NTMsIDB4M2YsIDB4ZmUsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2YsIDB4MTIsIDB4MTEsIDB4ZmIsCisgIDB4NzUsIDB4MzQsIDB4MDEsIDB4ZDIsIDB4MDgsIDB4OTAsIDB4N2UsIDB4M2IsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NDMsIDB4M2YsIDB4MDEsIDB4ZTR9fSwKKyB7MHgwNzQ2LCA2NCwgeyAweGZmLCAweGFkLCAweDNmLCAweDEyLCAweDExLCAweGZiLCAweGU0LCAweGY1LCAweDM0LCAweGQyLCAweDA4LCAweDkwLCAweDdlLCAweDNjLCAweGUwLCAweDYwLCAweDBlLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBhLCAweGYwLCAweGU1LCAweDQxLCAweDQ0LCAweDAyLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdlLAorICAweDNkLCAweGUwLCAweDYwLCAweDAyLCAweGQyLCAweDBjLCAweDkwLCAweDdlLCAweDNlLCAweGUwLCAweDYwLCAweDA4LCAweDc1LCAweDM1LCAweDAxLCAweGU0LAorICAweGY1LCAweDM5LCAweGQyLCAweDA4LCAweDkwLCAweDdlLCAweDNmLCAweGUwLCAweDYwLCAweDExLCAweDkwLCAweDdmLCAweGQ3LCAweDc0LCAweDEzfX0sCisgezB4MDc4NiwgNjQsIHsgMHhmMCwgMHg3NCwgMHgzMywgMHhmMCwgMHg3NCwgMHgxNiwgMHhmMCwgMHg3NCwgMHgzNiwgMHhmMCwgMHhkMiwgMHgwNCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhkMSwgMHhmMCwKKyAgMHgzMCwgMHgxYSwgMHg1MiwgMHhlNSwgMHgzOSwgMHg2MCwgMHgwMiwgMHgxNSwgMHgzOSwgMHgzMCwgMHgxMywgMHg0OSwgMHhlNSwgMHgxMywgMHhkMywgMHg5NCwKKyAgMHgwMCwgMHg0MCwgMHgwNCwgMHgxNSwgMHgxMywgMHg4MCwgMHgzZSwgMHg3NSwgMHgxMywgMHgwYSwgMHgzMCwgMHgxYiwgMHgwMiwgMHhjMiwgMHgxMywgMHgxMiwKKyAgMHgxMywgMHg0YiwgMHhlZiwgMHg1NCwgMHgwMSwgMHhmNSwgMHgxOSwgMHg2NSwgMHgzMywgMHg2MCwgMHgwNSwgMHg4NSwgMHgxOSwgMHgzMywgMHhkMn19LAorIHsweDA3YzYsIDY0LCB7IDB4MDgsIDB4MTIsIDB4MTMsIDB4ODcsIDB4ZWYsIDB4NTQsIDB4ODAsIDB4ZjUsIDB4MTksIDB4NjUsIDB4MmYsIDB4NjAsIDB4MDUsIDB4ODUsIDB4MTksIDB4MmYsIDB4ZDIsCisgIDB4MDgsIDB4MzAsIDB4MGUsIDB4MTEsIDB4MTIsIDB4MTMsIDB4ODcsIDB4ZWYsIDB4NTQsIDB4MTAsIDB4ZjUsIDB4MTksIDB4NjUsIDB4MmUsIDB4NjAsIDB4MDUsCisgIDB4ODUsIDB4MTksIDB4MmUsIDB4ZDIsIDB4MDgsIDB4MzAsIDB4MWEsIDB4MmEsIDB4OTAsIDB4N2YsIDB4ZDIsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MjMsIDB4OTAsCisgIDB4N2IsIDB4NDAsIDB4ZTAsIDB4NjAsIDB4MDksIDB4ZTAsIDB4ZjUsIDB4MTUsIDB4OTAsIDB4N2IsIDB4NDIsIDB4ZTAsIDB4ZjUsIDB4MTYsIDB4OTB9fSwKKyB7MHgwODA2LCA2NCwgeyAweDdiLCAweDQxLCAweGUwLCAweDYwLCAweDA5LCAweDkwLCAweDdmLCAweGQ3LCAweDc0LCAweDE3LCAweGYwLCAweDc0LCAweDM3LCAweGYwLCAweGU0LCAweDkwLCAweDdmLAorICAweGQzLCAweGYwLCAweDkwLCAweDdmLCAweGMyLCAweGUwLCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDA5LCAweDIwLCAweGU1LCAweDBhLCAweDcwLCAweDQwLAorICAweDMwLCAweDA3LCAweDM5LCAweGU1LCAweDM4LCAweDcwLCAweDM1LCAweGMyLCAweDA3LCAweGY1LCAweDE4LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LAorICAweDI0LCAweDI1LCAweDE4LCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyLCAweDBlLCAweDhjLCAweGZmLCAweDc0LCAweDgwLCAweDI1fX0sCisgezB4MDg0NiwgNjQsIHsgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwOSwgMHhkYiwKKyAgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwOSwgMHhmMCwgMHg3NSwgMHgzOCwgMHgxMCwgMHhlNCwgMHhmNSwgMHgyYywgMHg3NSwgMHgwYSwgMHgwMSwgMHgyMiwKKyAgMHhlNSwgMHgwYSwgMHg2NCwgMHgwMSwgMHg3MCwgMHg0MCwgMHgzMCwgMHgwOCwgMHgzOSwgMHhlNSwgMHgzOSwgMHg3MCwgMHgzNSwgMHhjMiwgMHgwOCwgMHhmNSwKKyAgMHgxOCwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgyZCwgMHgyNSwgMHgxOCwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMn19LAorIHsweDA4ODYsIDY0LCB7IDB4MGUsIDB4OGMsIDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjUsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsCisgIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDksIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDksIDB4ZjAsIDB4NzUsIDB4MzksIDB4MTAsIDB4ZTQsCisgIDB4ZjUsIDB4MzUsIDB4NzUsIDB4MGEsIDB4MDIsIDB4MjIsIDB4ZTUsIDB4MGEsIDB4NjQsIDB4MDIsIDB4NzAsIDB4MzYsIDB4MzAsIDB4MTQsIDB4MmYsIDB4YzIsCisgIDB4MTQsIDB4ZjUsIDB4MTgsIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MGUsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDB9fSwKKyB7MHgwOGM2LCA2NCwgeyAweGZhLCAweDEyLCAweDBlLCAweDhjLCAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLAorICAweGYwLCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDA1LCAweGRiLCAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDA1LCAweGYwLCAweDc1LCAweDBhLAorICAweDAzLCAweDIyLCAweGU1LCAweDE1LCAweDYwLCAweDMwLCAweDE1LCAweDE1LCAweGU0LCAweGY1LCAweDE4LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LAorICAweDE0LCAweDI1LCAweDE4LCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyLCAweDBlLCAweDhjLCAweGZmLCAweDc0LCAweDgwLCAweDI1fX0sCisgezB4MDkwNiwgNjQsIHsgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwMywgMHhkYiwKKyAgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwMywgMHhmMCwgMHhlNCwgMHhmNSwgMHgwYSwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhlOSwgMHhlMCwgMHgxMiwgMHgwZSwKKyAgMHhlNCwgMHgwYSwgMHgwOCwgMHgwMCwgMHgwYSwgMHg3YywgMHgwMSwgMHgwYSwgMHhlOCwgMHgwMywgMHgwOSwgMHg0NCwgMHgwNiwgMHgwOSwgMHhmYiwgMHgwOCwKKyAgMHgwOSwgMHhmNSwgMHgwOSwgMHgwOSwgMHhkZCwgMHgwYSwgMHgwOSwgMHhlYywgMHgwYiwgMHgwMCwgMHgwMCwgMHgwYiwgMHgzNywgMHg5MCwgMHg3Zn19LAorIHsweDA5NDYsIDY0LCB7IDB4ZWIsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTksIDB4MTQsIDB4NjAsIDB4NjEsIDB4MjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MDksIDB4ZDMsIDB4NzQsCisgIDB4MTksIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4NzQsIDB4MDAsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsCisgIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MDQsIDB4N2YsIDB4MDIsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDMsIDB4NzUsIDB4ODIsIDB4ODIsIDB4NzUsIDB4ODMsIDB4MTksCisgIDB4ZWYsIDB4ZjAsIDB4NzUsIDB4ODIsIDB4N2IsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZjAsIDB4NzUsIDB4ODIsIDB4NzQsIDB4NzUsIDB4ODMsIDB4MTl9fSwKKyB7MHgwOTg2LCA2NCwgeyAweGYwLCAweDc1LCAweDgyLCAweDY2LCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDc1LCAweDgyLCAweDU4LCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDkwLCAweDdmLAorICAweGVhLCAweGUwLCAweDA0LCAweDc1LCAweDgyLCAweDE3LCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDc0LCAweDE5LCAweDkwLCAweDdmLCAweGQ0LCAweGYwLAorICAweDc0LCAweDEyLCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGZmLCAweDEyLCAweDBmLAorICAweDBhLCAweGVhLCAweDQ5LCAweDYwLCAweDBkLCAweGVhLCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweGU5LCAweDkwLCAweDdmLCAweGQ1LCAweGYwfX0sCisgezB4MDljNiwgNjQsIHsgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwKKyAgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhlNSwgMHgwOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwKKyAgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmNSwgMHgwOSwgMHgwMiwgMHgwYiwgMHgzZSwgMHgxMiwgMHgwYiwKKyAgMHg0NiwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHgwMCwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHhmMCwgMHgwMn19LAorIHsweDBhMDYsIDY0LCB7IDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4N2YsIDB4NjAsIDB4MjQsIDB4MTQsIDB4NjAsIDB4MzEsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NWIsCisgIDB4YTIsIDB4MTAsIDB4ZTQsIDB4MzMsIDB4ZmYsIDB4MjUsIDB4ZTAsIDB4ZmYsIDB4YTIsIDB4MTYsIDB4ZTQsIDB4MzMsIDB4NGYsIDB4OTAsIDB4N2YsIDB4MDAsCisgIDB4ZjAsIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4ZTQsIDB4OTAsIDB4N2YsCisgIDB4MDAsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwYTQ2LCA2NCwgeyAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LAorICAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZkLCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGU0LAorICAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LAorICAweDAxLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDFkLCAweDI0LCAweDAyfX0sCisgezB4MGE4NiwgNjQsIHsgMHg2MCwgMHgwMywgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNCwgMHgwMSwgMHgwNSwgMHhjMiwgMHgxMCwgMHgwMiwgMHgwYiwgMHgzZSwKKyAgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgzOCwKKyAgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwKKyAgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHg5MCwgMHg3Zn19LAorIHsweDBhYzYsIDY0LCB7IDB4ZWMsIDB4ZTAsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4MTMsIDB4MTMsIDB4MTMsIDB4NTQsIDB4MWYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4OTAsIDB4N2YsCisgIDB4ZDcsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4ODAsIDB4NWYsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsCisgIDB4NTYsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTgsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NGEsIDB4OTAsIDB4N2YsIDB4ZWEsCisgIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDQsIDB4ZDIsIDB4MTAsIDB4ODAsIDB4M2YsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjB9fSwKKyB7MHgwYjA2LCA2NCwgeyAweDgwLCAweDM2LCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDIwLCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LAorICAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLAorICAweGY1LCAweDgzLCAweDc0LCAweDAxLCAweGYwLCAweDgwLCAweDEwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDA3LAorICAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDIyfX0sCisgezB4MGI0NiwgNjQsIHsgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5MywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHgzMCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHg5NSwgMHg3NCwgMHhjMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwgMHgzZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxOCwKKyAgMHhmMCwgMHhlNCwgMHhmNSwgMHg4ZSwgMHg5MCwgMHg3ZiwgMHhkZiwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZSwgMHhmMCwgMHhlNCwgMHhmNSwKKyAgMHgyNCwgMHg3NSwgMHgxOCwgMHgwMSwgMHg3YiwgMHgwMCwgMHg3NCwgMHgyNCwgMHgyNSwgMHgxOCwgMHhmOSwgMHhlNCwgMHgzNCwgMHgwMCwgMHhmYX19LAorIHsweDBiODYsIDY0LCB7IDB4ZTQsIDB4MTIsIDB4MGUsIDB4ZDIsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDksIDB4ZWEsIDB4NzUsIDB4M2EsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4MzgsCisgIDB4ZjUsIDB4MTMsIDB4ZjUsIDB4MzYsIDB4YzIsIDB4MDcsIDB4YzIsIDB4MGIsIDB4YzIsIDB4MDUsIDB4YzIsIDB4MDAsIDB4YzIsIDB4MDksIDB4YzIsIDB4MTMsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4NzUsIDB4NDQsIDB4MDMsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4N2YsCisgIDB4MGMsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4YjEsIDB4N2YsIDB4MTAsIDB4OGYsIDB4NDIsIDB4MTIsIDB4MTAsIDB4ODEsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwYmM2LCA2NCwgeyAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweDdmLCAweDAxLCAweDhmLCAweDQwLCAweGVmLCAweDQ0LCAweDA2LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDc1LCAweDQ2LCAweDgwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweDgwLCAweGYwLCAweDBmLCAweGU0LCAweGZkLAorICAweDEyLCAweDExLCAweGIxLCAweGU0LCAweGZmLCAweDdlLCAweGEzLCAweGFkLCAweDA2LCAweDhkLCAweDNlLCAweDEyLCAweDExLCAweGIxLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU0LCAweGYwLCAweDdmLCAweDA1LCAweDdkLCAweDdmLCAweDEyLCAweDExfX0sCisgezB4MGMwNiwgNjQsIHsgMHhiMSwgMHg3ZiwgMHgwMSwgMHgxMiwgMHgxMiwgMHg2YSwgMHg3ZiwgMHgwMywgMHg3ZCwgMHgwNywgMHgxMiwgMHgxMSwgMHhiMSwgMHgyMCwgMHgxYiwgMHgwMywgMHgwMiwKKyAgMHgwYywgMHhiNywgMHg3NSwgMHgyZCwgMHgwMSwgMHg3NSwgMHgxOCwgMHgwMSwgMHg3YiwgMHgwMCwgMHg3NCwgMHgyZCwgMHgyNSwgMHgxOCwgMHhmOSwgMHhlNCwKKyAgMHgzNCwgMHgwMCwgMHhmYSwgMHhlNCwgMHgxMiwgMHgwZSwgMHhkMiwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwOSwgMHhlYSwgMHg3NSwgMHgzYiwKKyAgMHgwMSwgMHhlNCwgMHhmNSwgMHgzOSwgMHhmNSwgMHgxMywgMHhmNSwgMHgzNywgMHhjMiwgMHgwOCwgMHhjMiwgMHgwYywgMHhjMiwgMHgwNiwgMHhjMn19LAorIHsweDBjNDYsIDY0LCB7IDB4MDAsIDB4YzIsIDB4MGEsIDB4YzIsIDB4MTMsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4NzUsIDB4NDUsIDB4MDMsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4NzQsIDB4MDMsIDB4ZjAsIDB4N2YsIDB4MGMsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4ZmIsIDB4N2YsIDB4MTAsIDB4OGYsIDB4NDMsIDB4MTIsIDB4MTAsCisgIDB4ZjMsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4N2YsIDB4MDEsIDB4OGYsIDB4NDEsIDB4ZWYsIDB4NDQsIDB4MDYsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4NzUsIDB4NDcsIDB4ODAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzR9fSwKKyB7MHgwYzg2LCA2NCwgeyAweDgwLCAweGYwLCAweDBmLCAweGU0LCAweGZkLCAweDEyLCAweDExLCAweGZiLCAweGU0LCAweGZmLCAweDdlLCAweGEzLCAweGFkLCAweDA2LCAweDhkLCAweDNmLCAweDEyLAorICAweDExLCAweGZiLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA5LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU0LCAweGYwLCAweDdmLCAweDA1LCAweDdkLAorICAweDdmLCAweDEyLCAweDExLCAweGZiLCAweDdmLCAweDAxLCAweDEyLCAweDEyLCAweDhiLCAweDdmLCAweDAzLCAweDdkLCAweDA3LCAweDEyLCAweDExLCAweGZiLAorICAweGQyLCAweDEyLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweGFmLCAweDA4LCAweGU1LCAweDBkLCAweGY1LCAweDgyfX0sCisgezB4MGNjNiwgNjQsIHsgMHhlNSwgMHgwYywgMHhmNSwgMHg4MywgMHhjMiwgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMCwgMHgwMCwgMHgwNSwgMHg4NiwgMHhlMCwgMHhhMywgMHgwNSwgMHg4NiwKKyAgMHhmMCwgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMCwgMHhmMCwgMHhhZiwgMHgwOCwKKyAgMHhlNSwgMHgwZCwgMHhmNSwgMHg4MiwgMHhlNSwgMHgwYywgMHhmNSwgMHg4MywgMHhjMiwgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwKKyAgMHgwNSwgMHg4NiwgMHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHgwNSwgMHg4NiwgMHhkMiwgMHhhZiwgMHgyMiwgMHg5MCwgMHg3Zn19LAorIHsweDBkMDYsIDY0LCB7IDB4OTgsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4YWYsIDB4MDgsIDB4ZTUsIDB4MGQsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MGMsIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsCisgIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4MDUsIDB4ODYsIDB4ZTAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4ZjAsIDB4MDUsIDB4ODYsIDB4ZGYsIDB4ZjcsIDB4ZDIsCisgIDB4YWYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4YWYsIDB4MDgsIDB4ZTUsIDB4MGQsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MGMsCisgIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4MDUsIDB4ODYsIDB4ZjAsIDB4YTMsIDB4MDV9fSwKKyB7MHgwZDQ2LCA2NCwgeyAweDg2LCAweGRmLCAweGY3LCAweDA1LCAweDg2LCAweGQyLCAweGFmLCAweDIyLCAweDc0LCAweDAwLCAweGY1LCAweDg2LCAweDkwLCAweGZkLCAweGE1LCAweDdjLCAweDA1LAorICAweGEzLCAweGU1LCAweDgyLCAweDQ1LCAweDgzLCAweDcwLCAweGY5LCAweDIyLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDQzLAorICAweDg3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIyLCAweGQyLCAweDE5LCAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweDQ0LCAweDAyLAorICAweGYwLCAweDkwLCAweDdmLCAweGFlLCAweGUwLCAweGZmLCAweGQzLCAweDkyLCAweDEwLCAweGU0LCAweDMzLCAweGZlLCAweGVmLCAweDRlLCAweGYwfX0sCisgezB4MGQ4NiwgNjQsIHsgMHhkMiwgMHhlOCwgMHg0MywgMHhkOCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhkZSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZiwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHhhYiwgMHg3NCwgMHhmZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYSwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwKKyAgMHg3ZiwgMHhhZiwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZSwgMHhlMCwgMHg0NCwgMHgwZCwgMHhmMCwgMHhkMiwgMHhhZiwgMHhkMiwKKyAgMHgxYSwgMHgxMiwgMHgxMiwgMHg0NSwgMHhjMiwgMHgxMSwgMHhlNCwgMHhmNSwgMHgwYiwgMHhmNSwgMHgxMywgMHhjMiwgMHgxNywgMHhjMiwgMHgxMn19LAorIHsweDBkYzYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4YTEsIDB4MDQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4NjUsIDB4MTcsIDB4NjAsIDB4MTAsIDB4MzAsIDB4MTIsIDB4MDUsIDB4ZDIsCisgIDB4MWEsIDB4MTIsIDB4MDAsIDB4NDYsIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsIDB4ZjUsIDB4MTcsIDB4ODAsIDB4MDgsIDB4MzAsIDB4MTIsIDB4MDUsIDB4YzIsCisgIDB4MWEsIDB4MTIsIDB4MDAsIDB4NDYsIDB4MzAsIDB4MTEsIDB4MDcsIDB4YzIsIDB4MTEsIDB4MTIsIDB4MDksIDB4MjEsIDB4ODAsIDB4ZDYsIDB4MzAsIDB4MTgsCisgIDB4ZDMsIDB4YzIsIDB4MTgsIDB4MTIsIDB4MTMsIDB4OTMsIDB4ODAsIDB4Y2MsIDB4MjIsIDB4NzgsIDB4N2YsIDB4ZTQsIDB4ZjYsIDB4ZDgsIDB4ZmR9fSwKKyB7MHgwZTA2LCA2NCwgeyAweDc1LCAweDgxLCAweDQ3LCAweDAyLCAweDBlLCAweDQ3LCAweDAyLCAweDBkLCAweDZmLCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweGU0LCAweDkzLCAweGEzLCAweDQwLAorICAweDAzLCAweGY2LCAweDgwLCAweDAxLCAweGYyLCAweDA4LCAweGRmLCAweGY0LCAweDgwLCAweDI5LCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweDU0LCAweDA3LAorICAweDI0LCAweDBjLCAweGM4LCAweGMzLCAweDMzLCAweGM0LCAweDU0LCAweDBmLCAweDQ0LCAweDIwLCAweGM4LCAweDgzLCAweDQwLCAweDA0LCAweGY0LCAweDU2LAorICAweDgwLCAweDAxLCAweDQ2LCAweGY2LCAweGRmLCAweGU0LCAweDgwLCAweDBiLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwfX0sCisgezB4MGU0NiwgNjQsIHsgMHg4MCwgMHg5MCwgMHgxMiwgMHhhYywgMHhlNCwgMHg3ZSwgMHgwMSwgMHg5MywgMHg2MCwgMHhiYywgMHhhMywgMHhmZiwgMHg1NCwgMHgzZiwgMHgzMCwgMHhlNSwgMHgwOSwKKyAgMHg1NCwgMHgxZiwgMHhmZSwgMHhlNCwgMHg5MywgMHhhMywgMHg2MCwgMHgwMSwgMHgwZSwgMHhjZiwgMHg1NCwgMHhjMCwgMHgyNSwgMHhlMCwgMHg2MCwgMHhhOCwKKyAgMHg0MCwgMHhiOCwgMHhlNCwgMHg5MywgMHhhMywgMHhmYSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwKKyAgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhmMCwgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYX19LAorIHsweDBlODYsIDY0LCB7IDB4ZGYsIDB4ZTksIDB4ZGUsIDB4ZTcsIDB4ODAsIDB4YmUsIDB4YmIsIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDIsCisgIDB4ZTcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDIsIDB4ZTMsIDB4MjIsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsCisgIDB4MGMsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4ODMsIDB4M2EsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDYsIDB4ZTksCisgIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4MjIsIDB4ZTV9fSwKKyB7MHgwZWM2LCA2NCwgeyAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLAorICAweDhhLCAweDgzLCAweGYwLCAweDIyLCAweDUwLCAweDAyLCAweGY3LCAweDIyLCAweGJiLCAweGZlLCAweDAxLCAweGYzLCAweDIyLCAweGQwLCAweDgzLCAweGQwLAorICAweDgyLCAweGY4LCAweGU0LCAweDkzLCAweDcwLCAweDEyLCAweDc0LCAweDAxLCAweDkzLCAweDcwLCAweDBkLCAweGEzLCAweGEzLCAweDkzLCAweGY4LCAweDc0LAorICAweDAxLCAweDkzLCAweGY1LCAweDgyLCAweDg4LCAweDgzLCAweGU0LCAweDczLCAweDc0LCAweDAyLCAweDkzLCAweDY4LCAweDYwLCAweGVmLCAweGEzfX0sCisgezB4MGYwNiwgNjQsIHsgMHhhMywgMHhhMywgMHg4MCwgMHhkZiwgMHg4ZiwgMHgxOCwgMHhlNCwgMHhmNSwgMHgxOSwgMHg3NSwgMHgxYSwgMHhmZiwgMHg3NSwgMHgxYiwgMHgxOSwgMHg3NSwgMHgxYywKKyAgMHg4NiwgMHhhYiwgMHgxYSwgMHhhYSwgMHgxYiwgMHhhOSwgMHgxYywgMHg5MCwgMHgwMCwgMHgwMSwgMHgxMiwgMHgwZSwgMHhhNSwgMHhiNCwgMHgwMywgMHgxZCwKKyAgMHhhZiwgMHgxOSwgMHgwNSwgMHgxOSwgMHhlZiwgMHhiNSwgMHgxOCwgMHgwMSwgMHgyMiwgMHgxMiwgMHgwZSwgMHg4YywgMHg3ZSwgMHgwMCwgMHgyOSwgMHhmZiwKKyAgMHhlZSwgMHgzYSwgMHhhOSwgMHgwNywgMHg3NSwgMHgxYSwgMHhmZiwgMHhmNSwgMHgxYiwgMHg4OSwgMHgxYywgMHg4MCwgMHhkNCwgMHg3YiwgMHgwMH19LAorIHsweDBmNDYsIDY0LCB7IDB4N2EsIDB4MDAsIDB4NzksIDB4MDAsIDB4MjIsIDB4OGYsIDB4MWEsIDB4MDUsIDB4MGQsIDB4ZTUsIDB4MGQsIDB4YWUsIDB4MGMsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MGMsCisgIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTUsIDB4MWEsIDB4ZjAsIDB4MTIsIDB4MDAsIDB4MzYsIDB4MDUsIDB4MGQsIDB4ZTUsIDB4MGQsIDB4YWMsCisgIDB4MGMsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MGMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MTUsIDB4MDgsIDB4ZTUsIDB4MDgsCisgIDB4NjAsIDB4MGEsIDB4MTIsIDB4MTMsIDB4MjcsIDB4OGYsIDB4MWEsIDB4ZWYsIDB4NDIsIDB4MzYsIDB4ODAsIDB4Y2EsIDB4MjIsIDB4OGYsIDB4MWF9fSwKKyB7MHgwZjg2LCA2NCwgeyAweDA1LCAweDBkLCAweGU1LCAweDBkLCAweGFlLCAweDBjLCAweDcwLCAweDAyLCAweDA1LCAweDBjLCAweDE0LCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGU1LCAweDFhLAorICAweGYwLCAweDEyLCAweDEzLCAweDNmLCAweDA1LCAweDBkLCAweGU1LCAweDBkLCAweGFjLCAweDBjLCAweDcwLCAweDAyLCAweDA1LCAweDBjLCAweDE0LCAweGY1LAorICAweDgyLCAweDhjLCAweDgzLCAweGVmLCAweGYwLCAweDE1LCAweDA4LCAweGU1LCAweDA4LCAweDYwLCAweDBhLCAweDEyLCAweDEzLCAweDdiLCAweDhmLCAweDFhLAorICAweGVmLCAweDQyLCAweDM3LCAweDgwLCAweGNhLCAweDIyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwfX0sCisgezB4MGZjNiwgNjQsIHsgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhjNCwgMHhlNCwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwKKyAgMHg3NCwgMHgwNCwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwKKyAgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhkMiwKKyAgMHgxMSwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMH19LAorIHsweDEwMDYsIDY0LCB7IDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsCisgIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4ZDIsIDB4MTgsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDgsCisgIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTB9fSwKKyB7MHgxMDQ2LCA2NCwgeyAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLAorICAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLAorICAweGYwLCAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzfX0sCisgezB4MTA4NiwgNjQsIHsgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwKKyAgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwKKyAgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHg0NH19LAorIHsweDEwYzYsIDY0LCB7IDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsCisgIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTYsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsCisgIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsCisgIDB4MGIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4OTB9fSwKKyB7MHgxMTA2LCA2NCwgeyAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLAorICAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDA4LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LAorICAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDkwfX0sCisgezB4MTE0NiwgNjQsIHsgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwKKyAgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3Zn19LAorIHsweDExODYsIDY0LCB7IDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsCisgIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsCisgIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4OTB9fSwKKyB7MHgxMWM2LCA2NCwgeyAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE1LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVkLCAweGYwLCAweDIyLCAweDEyLAorICAweDEzLCAweDBmLCAweDhmLCAweDFhLCAweDEyLCAweDEzLCAweDBmLCAweDhmLCAweDFiLCAweGU1LCAweDFhLCAweDY1LCAweDFiLCAweDYwLCAweDEyLCAweDEyLAorICAweDEzLCAweDBmLCAweDhmLCAweDFhLCAweGU1LCAweDFhLCAweDY1LCAweDFiLCAweDYwLCAweDA3LCAweDEyLCAweDEzLCAweDBmLCAweDhmLCAweDFiLCAweDgwLAorICAweGU4LCAweGFmLCAweDFhLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwfX0sCisgezB4MTIwNiwgNjQsIHsgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwZiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwKKyAgMHg3NCwgMHgwZCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZCwgMHhmMCwgMHgyMiwgMHgxMiwgMHgxMywgMHg2MywgMHg4ZiwgMHgxYSwgMHgxMiwgMHgxMywKKyAgMHg2MywgMHg4ZiwgMHgxYiwgMHhlNSwgMHgxYSwgMHg2NSwgMHgxYiwgMHg2MCwgMHgxMiwgMHgxMiwgMHgxMywgMHg2MywgMHg4ZiwgMHgxYSwgMHhlNSwgMHgxYSwKKyAgMHg2NSwgMHgxYiwgMHg2MCwgMHgwNywgMHgxMiwgMHgxMywgMHg2MywgMHg4ZiwgMHgxYiwgMHg4MCwgMHhlOCwgMHhhZiwgMHgxYSwgMHgyMiwgMHg5MH19LAorIHsweDEyNDYsIDY0LCB7IDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4MzAsIDB4MWEsIDB4MDQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsCisgIDB4N2YsIDB4ZjQsIDB4N2UsIDB4MDEsIDB4MTIsIDB4MTIsIDB4YzgsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjAsIDB4ZTAsIDB4NDQsCisgIDB4MDQsIDB4ZjAsIDB4MjIsIDB4YWUsIDB4MDcsIDB4ZTQsIDB4ZmYsIDB4ZTUsIDB4M2UsIDB4NTQsIDB4N2YsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4YjEsIDB4OTAsCisgIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWUsIDB4ZjAsIDB4ZTQsIDB4ZTUsIDB4M2UsIDB4NDQsIDB4ODB9fSwKKyB7MHgxMjg2LCA2NCwgeyAweGZkLCAweDEyLCAweDExLCAweGIxLCAweDIyLCAweGFlLCAweDA3LCAweGU0LCAweGZmLCAweGU1LCAweDNmLCAweDU0LCAweDdmLCAweGZkLCAweDEyLCAweDExLCAweGZiLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA5LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVlLCAweGYwLCAweGU0LCAweGU1LCAweDNmLCAweDQ0LCAweDgwLAorICAweGZkLCAweDEyLCAweDExLCAweGZiLCAweDIyLCAweDA1LCAweDBlLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDE0LCAweDAzLCAweDAwLAorICAweDAwLCAweGMxLCAweDExLCAweGMxLCAweDE4LCAweGMxLCAweDk1LCAweGMxLCAweDEwLCAweGMxLCAweDE2LCAweDAxLCAweDBhLCAweDAwLCAweGMxfX0sCisgezB4MTJjNiwgNjQsIHsgMHg5YiwgMHgwMCwgMHg4ZSwgMHgxOCwgMHg4ZiwgMHgxOSwgMHhlNSwgMHgxOSwgMHgxNSwgMHgxOSwgMHhhZSwgMHgxOCwgMHg3MCwgMHgwMiwgMHgxNSwgMHgxOCwgMHg0ZSwKKyAgMHg2MCwgMHgwNSwgMHgxMiwgMHgwZCwgMHg0ZSwgMHg4MCwgMHhlZSwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwKKyAgMHg1MywgMHhkOCwgMHhlZiwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwZiwgMHhlNywgMHgwMCwgMHgwMiwgMHgxM319LAorIHsweDEzMDYsIDY0LCB7IDB4MDQsIDB4MDAsIDB4MDIsIDB4MGYsIDB4YmQsIDB4MDAsIDB4MDIsIDB4MTAsIDB4MGUsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsCisgIDB4MTYsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4OTB9fSwKKyB7MHgxMzQ2LCA2NCwgeyAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA5LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBhLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDBiLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwLCAweGMwLAorICAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBkLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmfX0sCisgezB4MTM4NiwgNjQsIHsgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwZSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHgxMiwgMHgwMCwgMHgwMywgMHgxMiwKKyAgMHgwZCwgMHg1ZiwgMHgxMiwgMHgwYiwgMHg0NiwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDEzYzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNDA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTQ0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNGM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTUwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNTg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTVjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNjQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTY4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNzA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTc0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxN2M2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTgwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxODg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MThjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmZiwgMHgwMH19LAorIHsweDE5MDYsIDY0LCB7IDB4MDAsIDB4NDAsIDB4Y2QsIDB4MDYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MDksIDB4MDIsIDB4NzQsIDB4MDAsIDB4MDEsCisgIDB4MDEsIDB4MDAsIDB4YTAsIDB4MzIsIDB4MDksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDEsCisgIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDMsIDB4MDIsIDB4NDAsCisgIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDQsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDUsIDB4MDIsIDB4NDAsIDB4MDB9fSwKKyB7MHgxOTQ2LCA2NCwgeyAweDAwLCAweDA3LCAweDA1LCAweDA2LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA3LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LAorICAweDgxLCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDgyLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDgzLCAweDAyLAorICAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDg0LCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDg1LCAweDAyLCAweDQwLCAweDAwLAorICAweDAxLCAweDA3LCAweDA1LCAweDg2LCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDg3LCAweDAyLCAweDQwLCAweDAwLCAweDAxfX0sCisgezB4MTk4NiwgNjQsIHsgMHgwNCwgMHgwMywgMHgwOSwgMHgwNCwgMHg0OCwgMHgwMywgMHg0YiwgMHgwMCwgMHg2NSwgMHgwMCwgMHg3OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MSwKKyAgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyYywgMHgwMCwgMHgyMCwgMHgwMCwgMHg2MSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2OSwgMHgwMCwgMHg3NiwKKyAgMHgwMCwgMHg2OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg2OSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg2ZiwgMHgwMCwgMHg2NiwKKyAgMHgwMCwgMHgyMCwgMHgwMCwgMHg0OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHg1MywgMHgwMCwgMHg3OSwgMHgwMH19LAorIHsweDE5YzYsIDY0LCB7IDB4NzMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjMsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MzYsIDB4MDMsIDB4NGIsIDB4MDAsIDB4NjUsCisgIDB4MDAsIDB4NzksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NTUsIDB4MDAsIDB4NTMsCisgIDB4MDAsIDB4NDIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjksIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmMsCisgIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NjUsIDB4MDB9fSwKKyB7MHgxYTA2LCAgNCwgeyAweDcyLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4ZmZmZiwgIDAsICB7MHgwMH19Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjh4YV9mdy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjh4YV9mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNTY2NzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2EyOHhhX2Z3LmgKQEAgLTAsMCArMSw0NDkgQEAKKy8qIGtleXNwYW5fdXNhMjh4YV9mdy5oCisKKwlUaGUgZmlybXdhcmUgY29udGFpbmVkIGhlcmVpbiBhcyBrZXlzcGFuX3VzYTI4eGEuaCBpcworCisJCUNvcHlyaWdodCAoQykgMTk5OS0yMDAxCisJCUtleXNwYW4sIEEgZGl2aXNpb24gb2YgSW5ub1N5cyBJbmNvcnBvcmF0ZWQgKCJLZXlzcGFuIikKKwkJCisJYXMgYW4gdW5wdWJsaXNoZWQgd29yay4gVGhpcyBub3RpY2UgZG9lcyBub3QgaW1wbHkgdW5yZXN0cmljdGVkIG9yCisJcHVibGljIGFjY2VzcyB0byB0aGUgc291cmNlIGNvZGUgZnJvbSB3aGljaCB0aGlzIGZpcm13YXJlIGltYWdlIGlzCisJZGVyaXZlZC4gIEV4Y2VwdCBhcyBub3RlZCBiZWxvdyB0aGlzIGZpcm13YXJlIGltYWdlIG1heSBub3QgYmUgCisJcmVwcm9kdWNlZCwgdXNlZCwgc29sZCBvciB0cmFuc2ZlcnJlZCB0byBhbnkgdGhpcmQgcGFydHkgd2l0aG91dCAKKwlLZXlzcGFuJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworCVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSAKKwlpbWFnZSBhcyBwYXJ0IG9mIGEgTGludXggb3Igb3RoZXIgT3BlbiBTb3VyY2Ugb3BlcmF0aW5nIHN5c3RlbSBrZXJuZWwgCisJaW4gdGV4dCBvciBiaW5hcnkgZm9ybSBhcyByZXF1aXJlZC4gCisKKwlUaGlzIGZpcm13YXJlIG1heSBub3QgYmUgbW9kaWZpZWQgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aCAgCisJS2V5c3BhbiBoYXJkd2FyZS4gIERpc3RyaWJ1dGlvbiBhbmQvb3IgTW9kaWZpY2F0aW9uIG9mIHRoZSAKKwlrZXlzcGFuLmMgZHJpdmVyIHdoaWNoIGluY2x1ZGVzIHRoaXMgZmlybXdhcmUsIGluIHdob2xlIG9yIGluIAorCXBhcnQsIHJlcXVpcmVzIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBzdGF0ZW1lbnQuIgorCisKKworKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkIGtleXNwYW5fdXNhMjh4YV9maXJtd2FyZVtdID0geworIHsweDAwMzMsICAzLCB7IDB4MDIsIDB4MTIsIDB4Zjl9fSwKKyB7MHgwMDAzLCAxNiwgeyAweGU0LCAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweDMwLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk2LCAweGYwfX0sCisgezB4MDAxMywgMTYsIHsgMHg5MCwgMHg3ZiwgMHg5NCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZCwgMHg3NCwgMHhmZiwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NywgMHhmMCwgMHg5MH19LAorIHsweDAwMjMsIDE1LCB7IDB4N2YsIDB4OTUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4MDcsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjAsIDB4MjJ9fSwKKyB7MHgwMDQ2LCAxNiwgeyAweDMwLCAweDA5LCAweDE4LCAweDEyLCAweDEzLCAweDI3LCAweGVmLCAweGMzLCAweDk1LCAweDNjLCAweDQwLCAweDAzLCAweDAyLCAweDAwLCAweGQ4LCAweDkwfX0sCisgezB4MDA1NiwgMTYsIHsgMHg3ZiwgMHhiZiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhjMiwgMHgwOSwgMHhjMiwgMHgwMCwgMHg4MCwgMHg3NywgMHgzMCwgMHgwMywgMHgzYiwgMHg5MCwgMHg3Zn19LAorIHsweDAwNjYsIDE2LCB7IDB4YzYsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4NmQsIDB4MTIsIDB4MTMsIDB4MjcsIDB4ZWYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4NjQsIDB4OTAsIDB4N2V9fSwKKyB7MHgwMDc2LCAxNiwgeyAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDA5LCAweDkwLCAweDdmLCAweGM3LCAweGUwLCAweDE0LCAweGY1LCAweDE5LCAweDIwLCAweDAwLCAweDExLCAweDYwfX0sCisgezB4MDA4NiwgMTYsIHsgMHgwZiwgMHhmNSwgMHgwOCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg0MSwgMHg3NSwgMHgwYywgMHg3ZSwgMHg3NSwgMHgwZCwgMHg0MSwgMHgxMiwgMHgwYywgMHhjOH19LAorIHsweDAwOTYsIDE2LCB7IDB4YzIsIDB4MDMsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZjAsIDB4ODAsIDB4MzksIDB4OTAsIDB4N2YsIDB4YzgsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MzJ9fSwKKyB7MHgwMGE2LCAxNiwgeyAweDEyLCAweDEzLCAweDI3LCAweGVmLCAweGMzLCAweDk0LCAweDQwLCAweDUwLCAweDI5LCAweDkwLCAweDdkLCAweGMwLCAweGUwLCAweDEzLCAweDkyLCAweDA5fX0sCisgezB4MDBiNiwgMTYsIHsgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHgxNCwgMHhmNSwgMHgxOSwgMHgyMCwgMHgwMCwgMHgxMSwgMHg2MCwgMHgwZiwgMHhmNSwgMHgwOCwgMHg3ZSwgMHg3ZH19LAorIHsweDAwYzYsIDE2LCB7IDB4N2YsIDB4YzEsIDB4NzUsIDB4MGMsIDB4N2QsIDB4NzUsIDB4MGQsIDB4YzEsIDB4MTIsIDB4MGMsIDB4YzgsIDB4ZDIsIDB4MDMsIDB4ZTQsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwMGQ2LCAxNiwgeyAweGM5LCAweGYwLCAweDkwLCAweDdmLCAweGI2LCAweGUwLCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDAxLCAweDYwLCAweDEyLCAweDExLCAweGU0LCAweDhmfX0sCisgezB4MDBlNiwgMTYsIHsgMHgxOSwgMHgxMiwgMHgxMywgMHgzMywgMHg4ZiwgMHgzNiwgMHhlNSwgMHgxOSwgMHhjMywgMHg5NSwgMHgzYSwgMHg1MCwgMHgwZiwgMHgxMiwgMHgxMywgMHgwZn19LAorIHsweDAwZjYsIDE2LCB7IDB4ZWYsIDB4MzAsIDB4ZTAsIDB4MDgsIDB4ZTUsIDB4MzYsIDB4MjAsIDB4ZTcsIDB4MDMsIDB4MzAsIDB4MGIsIDB4NWUsIDB4YzIsIDB4MGIsIDB4ZTUsIDB4MTl9fSwKKyB7MHgwMDM2LCAxMiwgeyAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyfX0sCisgezB4MDA0MywgIDMsIHsgMHgwMiwgMHgxMywgMHgwMH19LAorIHsweDAwMDAsICAzLCB7IDB4MDIsIDB4MGUsIDB4MGV9fSwKKyB7MHgwMTA2LCA2NCwgeyAweDYwLCAweDU4LCAweGI0LCAweDgwLCAweDAzLCAweDQzLCAweDM2LCAweDAyLCAweGU1LCAweDM2LCAweDMwLCAweGU3LCAweDI2LCAweGU1LCAweDE5LCAweGQzLCAweDk0LAorICAweDIwLCAweDQwLCAweDAzLCAweDc1LCAweDE5LCAweDIwLCAweDg1LCAweDE5LCAweDA4LCAweDdlLCAweDdlLCAweDdmLCAweDgwLCAweDc1LCAweDBjLCAweDdlLAorICAweDc1LCAweDBkLCAweDgwLCAweGFmLCAweDM2LCAweDEyLCAweDBmLCAweDU5LCAweGU1LCAweDE5LCAweDI1LCAweGUwLCAweDkwLCAweDdmLCAweGI3LCAweGYwLAorICAweDgwLCAweDI3LCAweGU1LCAweDE5LCAweGQzLCAweDk0LCAweDNmLCAweDQwLCAweDAzLCAweDc1LCAweDE5LCAweDNmLCAweDg1LCAweDE5LCAweDA4fX0sCisgezB4MDE0NiwgNjQsIHsgMHg5MCwgMHg3ZSwgMHg4MCwgMHhlNSwgMHgzNiwgMHhmMCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg4MSwgMHg3NSwgMHgwYywgMHg3ZSwgMHg3NSwgMHgwZCwgMHg4MSwgMHgxMiwKKyAgMHgwYywgMHhlZCwgMHhlNSwgMHgxOSwgMHgwNCwgMHg5MCwgMHg3ZiwgMHhiNywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjZSwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNiwKKyAgMHgyMCwgMHgwNSwgMHgwMywgMHgwMiwgMHgwMywgMHhjMSwgMHhjMiwgMHgwNSwgMHhlNCwgMHhmNSwgMHgxOCwgMHg3NCwgMHg0MCwgMHgyNSwgMHgxOCwgMHhmNSwKKyAgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YywgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgxOCwgMHg3YywgMHgwMCwgMHg3YiwgMHgwMSwgMHg3YX19LAorIHsweDAxODYsIDY0LCB7IDB4N2UsIDB4NzksIDB4MDAsIDB4MjQsIDB4MDAsIDB4ZjksIDB4ZWMsIDB4MzQsIDB4N2UsIDB4ZmEsIDB4ZWYsIDB4MTIsIDB4MGUsIDB4ZTAsIDB4MDUsIDB4MTgsIDB4ZTUsCisgIDB4MTgsIDB4YjQsIDB4MjAsIDB4ZDcsIDB4OTAsIDB4N2UsIDB4MDAsIDB4ZTAsIDB4NjAsIDB4NjgsIDB4OTAsIDB4N2UsIDB4MDMsIDB4ZTAsIDB4NjAsIDB4MjQsCisgIDB4N2YsIDB4MDEsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4YmYsIDB4N2YsIDB4MDMsIDB4N2QsIDB4Y2QsIDB4MTIsIDB4MTEsIDB4YmYsIDB4NDMsIDB4NDYsCisgIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4ZjAsIDB4ZTQsIDB4OTB9fSwKKyB7MHgwMWM2LCA2NCwgeyAweDdlLCAweDEzLCAweGYwLCAweDgwLCAweDMwLCAweDkwLCAweDdlLCAweDAxLCAweGUwLCAweGZmLCAweDEyLCAweDEwLCAweDQzLCAweDkwLCAweDdlLCAweDAyLCAweGUwLAorICAweGZmLCAweDEyLCAweDEwLCAweDY5LCAweDdmLCAweDAxLCAweDkwLCAweDdlLCAweDExLCAweGUwLCAweGZkLCAweDEyLCAweDExLCAweGJmLCAweDdmLCAweDAzLAorICAweDdkLCAweDA3LCAweDEyLCAweDExLCAweGJmLCAweDQzLCAweDQ2LCAweDgwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLAorICAweDAwLCAweGU1LCAweDQ2LCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweGU1LCAweDQwLCAweDQ0LCAweDA2LCAweDkwfX0sCisgezB4MDIwNiwgNjQsIHsgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgwMywgMHhlMCwgMHg3MCwgMHgwNiwgMHg5MCwgMHg3ZSwgMHgxMywgMHhlMCwgMHg3MCwgMHgwOCwgMHhlNCwgMHg5MCwKKyAgMHg3ZSwgMHgxMywgMHhmMCwgMHg3NSwgMHgyNSwgMHhmZiwgMHg5MCwgMHg3ZSwgMHgwNSwgMHhlMCwgMHg2MCwgMHgxMiwgMHhhMywgMHhlMCwgMHg1NCwgMHgzZiwKKyAgMHhmNSwgMHg0NCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NCwgMHhmMCwgMHg5MCwgMHg3ZSwKKyAgMHgwNywgMHhlMCwgMHg2MCwgMHgyYiwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0MiwgMHg4MCwgMHg4MCwgMHgwMywgMHg1MywgMHg0Mn19LAorIHsweDAyNDYsIDY0LCB7IDB4N2YsIDB4NTMsIDB4NDIsIDB4ZmMsIDB4OTAsIDB4N2UsIDB4MDksIDB4ZTAsIDB4NjAsIDB4MTEsIDB4NDMsIDB4NDIsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4MTIsCisgIDB4MTAsIDB4YjUsIDB4OTAsIDB4N2UsIDB4MGIsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTAsIDB4ZGIsIDB4YWYsIDB4NDIsIDB4MTIsIDB4MTAsIDB4OGYsIDB4OTAsCisgIDB4N2UsIDB4MDMsIDB4ZTAsIDB4NjAsIDB4MDgsIDB4NTMsIDB4NDIsIDB4N2YsIDB4YWYsIDB4NDIsIDB4MTIsIDB4MTAsIDB4OGYsIDB4OTAsIDB4N2UsIDB4MGMsCisgIDB4ZTAsIDB4NjAsIDB4MTgsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDYsIDB4MDIsIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDYsIDB4ZmR9fSwKKyB7MHgwMjg2LCA2NCwgeyAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ2LCAweGYwLCAweDkwLCAweDdlLCAweDBlLCAweGUwLCAweDYwLAorICAweDE4LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQ2LCAweDAxLCAweDgwLCAweDAzLCAweDUzLCAweDQ2LCAweGZlLCAweDkwLCAweDdmLCAweDk4LAorICAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ2LCAweGYwLCAweDkwLCAweDdlLCAweDEyLCAweGUwLCAweGY1LCAweDNhLCAweGEzLAorICAweGUwLCAweDEzLCAweDkyLCAweDBkLCAweGEzLCAweGUwLCAweGY1LCAweDNjLCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQ2LCAweDEwfX0sCisgezB4MDJjNiwgNjQsIHsgMHg4MCwgMHgwMywgMHg1MywgMHg0NiwgMHhlZiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NiwgMHhmMCwKKyAgMHg5MCwgMHg3ZSwgMHgxNiwgMHhlMCwgMHg2MCwgMHgzMiwgMHg1MywgMHg0NCwgMHhiZiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwKKyAgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHgxMiwgMHgxMiwgMHhlZCwKKyAgMHhlZiwgMHg1NCwgMHhmZSwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg1MywgMHgzZSwgMHhmZCwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZSwgMHgxMn19LAorIHsweDAzMDYsIDY0LCB7IDB4MTEsIDB4YmYsIDB4ZTQsIDB4ZjUsIDB4MmEsIDB4ZjUsIDB4MjksIDB4ZDIsIDB4MDcsIDB4OTAsIDB4N2UsIDB4MTcsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NDMsIDB4M2UsCisgIDB4MDIsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2UsIDB4MTIsIDB4MTEsIDB4YmYsIDB4NzUsIDB4MjksIDB4MDEsIDB4ZDIsIDB4MDcsIDB4OTAsIDB4N2UsIDB4MTgsCisgIDB4ZTAsIDB4NjAsIDB4MTAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4ZTUsIDB4NDAsIDB4NDQsIDB4MDQsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4ZjAsIDB4ZDIsIDB4MDAsIDB4OTAsIDB4N2UsIDB4MTksIDB4ZTAsIDB4NjAsIDB4MTEsIDB4NDMsIDB4NDQsIDB4NDAsIDB4OTAsIDB4N2YsIDB4OTh9fSwKKyB7MHgwMzQ2LCA2NCwgeyAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdlLCAweDFhLCAweGUwLCAweDYwLCAweDBmLAorICAweDUzLCAweDNlLCAweGZlLCAweGU0LCAweGZmLCAweGFkLCAweDNlLCAweDEyLCAweDExLCAweGJmLCAweDc1LCAweDJiLCAweDAxLCAweGQyLCAweDA3LCAweDkwLAorICAweDdlLCAweDFiLCAweGUwLCAweDYwLCAweDBmLCAweDQzLCAweDNlLCAweDAxLCAweGU0LCAweGZmLCAweGFkLCAweDNlLCAweDEyLCAweDExLCAweGJmLCAweGU0LAorICAweGY1LCAweDJiLCAweGQyLCAweDA3LCAweDkwLCAweDdlLCAweDFjLCAweGUwLCAweDYwLCAweDBlLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyfX0sCisgezB4MDM4NiwgNjQsIHsgMHhmMCwgMHhlNSwgMHg0MCwgMHg0NCwgMHgwMiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxZCwgMHhlMCwgMHg2MCwgMHgwMiwgMHhkMiwgMHgwYiwKKyAgMHg5MCwgMHg3ZSwgMHgxZSwgMHhlMCwgMHg2MCwgMHgwOCwgMHg3NSwgMHgyYywgMHgwMSwgMHhlNCwgMHhmNSwgMHgzOCwgMHhkMiwgMHgwNywgMHg5MCwgMHg3ZSwKKyAgMHgxZiwgMHhlMCwgMHg2MCwgMHgxMSwgMHg5MCwgMHg3ZiwgMHhkNywgMHg3NCwgMHgxMSwgMHhmMCwgMHg3NCwgMHgzMSwgMHhmMCwgMHg3NCwgMHgxNSwgMHhmMCwKKyAgMHg3NCwgMHgzNSwgMHhmMCwgMHhkMiwgMHgwMywgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjZiwgMHhmMCwgMHgzMCwgMHgxYSwgMHg1MiwgMHhlNSwgMHgzOH19LAorIHsweDAzYzYsIDY0LCB7IDB4NjAsIDB4MDIsIDB4MTUsIDB4MzgsIDB4MjAsIDB4MTMsIDB4NDksIDB4ZTUsIDB4MTMsIDB4ZDMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDQsIDB4MTUsIDB4MTMsIDB4ODAsCisgIDB4M2UsIDB4NzUsIDB4MTMsIDB4MGEsIDB4MzAsIDB4MWIsIDB4MDIsIDB4ZDIsIDB4MTMsIDB4MTIsIDB4MTIsIDB4ZWQsIDB4ZWYsIDB4NTQsIDB4MDEsIDB4ZjUsCisgIDB4MTksIDB4NjUsIDB4MmEsIDB4NjAsIDB4MDUsIDB4ODUsIDB4MTksIDB4MmEsIDB4ZDIsIDB4MDcsIDB4MTIsIDB4MTMsIDB4M2YsIDB4ZWYsIDB4NTQsIDB4ODAsCisgIDB4ZjUsIDB4MTksIDB4NjUsIDB4MjYsIDB4NjAsIDB4MDUsIDB4ODUsIDB4MTksIDB4MjYsIDB4ZDIsIDB4MDcsIDB4MzAsIDB4MGQsIDB4MTEsIDB4MTJ9fSwKKyB7MHgwNDA2LCA2NCwgeyAweDEzLCAweDNmLCAweGVmLCAweDU0LCAweDEwLCAweGY1LCAweDE5LCAweDY1LCAweDI1LCAweDYwLCAweDA1LCAweDg1LCAweDE5LCAweDI1LCAweGQyLCAweDA3LCAweDIwLAorICAweDFiLCAweDAzLCAweDAyLCAweDA3LCAweGVjLCAweDMwLCAweDBhLCAweDE4LCAweDEyLCAweDEzLCAweDdiLCAweGVmLCAweGMzLCAweDk1LCAweDNkLCAweDQwLAorICAweDAzLCAweDAyLCAweDA0LCAweGFlLCAweDkwLCAweDdmLCAweGMxLCAweDc0LCAweDAxLCAweGYwLCAweGMyLCAweDBhLCAweGMyLCAweDAwLCAweDgwLCAweDc3LAorICAweDMwLCAweDA0LCAweDNiLCAweDkwLCAweDdmLCAweGNhLCAweGUwLCAweDIwLCAweGUxLCAweDZkLCAweDEyLCAweDEzLCAweDdiLCAweGVmLCAweGMzfX0sCisgezB4MDQ0NiwgNjQsIHsgMHg5NCwgMHg0MCwgMHg1MCwgMHg2NCwgMHg5MCwgMHg3ZCwgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhjYiwgMHhlMCwgMHgxNCwgMHhmNSwKKyAgMHgxOSwgMHgyMCwgMHgwMCwgMHgxMSwgMHg2MCwgMHgwZiwgMHhmNSwgMHgwOCwgMHg3ZSwgMHg3ZCwgMHg3ZiwgMHg0MSwgMHg3NSwgMHgwYywgMHg3ZCwgMHg3NSwKKyAgMHgwZCwgMHg0MSwgMHgxMiwgMHgwZCwgMHgxMiwgMHhjMiwgMHgwNCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjYiwgMHhmMCwgMHg4MCwgMHgzOSwgMHg5MCwgMHg3ZiwKKyAgMHhjYywgMHhlMCwgMHgyMCwgMHhlMSwgMHgzMiwgMHgxMiwgMHgxMywgMHg3YiwgMHhlZiwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHgyOSwgMHg5MH19LAorIHsweDA0ODYsIDY0LCB7IDB4N2MsIDB4YzAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGEsIDB4OTAsIDB4N2YsIDB4Y2QsIDB4ZTAsIDB4MTQsIDB4ZjUsIDB4MTksIDB4MjAsIDB4MDAsIDB4MTEsIDB4NjAsCisgIDB4MGYsIDB4ZjUsIDB4MDgsIDB4N2UsIDB4N2MsIDB4N2YsIDB4YzEsIDB4NzUsIDB4MGMsIDB4N2MsIDB4NzUsIDB4MGQsIDB4YzEsIDB4MTIsIDB4MGQsIDB4MTIsCisgIDB4ZDIsIDB4MDQsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4Y2QsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YmEsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MDUsCisgIDB4MzYsIDB4MTIsIDB4MTIsIDB4MmUsIDB4OGYsIDB4MTksIDB4MTIsIDB4MTMsIDB4ODcsIDB4OGYsIDB4MzcsIDB4ZTUsIDB4MTksIDB4YzMsIDB4OTV9fSwKKyB7MHgwNGM2LCA2NCwgeyAweDNiLCAweDUwLCAweDBmLCAweDEyLCAweDEzLCAweDYzLCAweGVmLCAweDMwLCAweGUwLCAweDA4LCAweGU1LCAweDM3LCAweDIwLCAweGU3LCAweDAzLCAweDMwLCAweDBjLAorICAweDVlLCAweGMyLCAweDBjLCAweGU1LCAweDE5LCAweDYwLCAweDU4LCAweGI0LCAweDgwLCAweDAzLCAweDQzLCAweDM3LCAweDAyLCAweGU1LCAweDM3LCAweDMwLAorICAweGU3LCAweDI2LCAweGU1LCAweDE5LCAweGQzLCAweDk0LCAweDIwLCAweDQwLCAweDAzLCAweDc1LCAweDE5LCAweDIwLCAweDg1LCAweDE5LCAweDA4LCAweDdlLAorICAweDdkLCAweDdmLCAweDgwLCAweDc1LCAweDBjLCAweDdkLCAweDc1LCAweDBkLCAweDgwLCAweGFmLCAweDM3LCAweDEyLCAweDBmLCAweDkyLCAweGU1fX0sCisgezB4MDUwNiwgNjQsIHsgMHgxOSwgMHgyNSwgMHhlMCwgMHg5MCwgMHg3ZiwgMHhiYiwgMHhmMCwgMHg4MCwgMHgyNywgMHhlNSwgMHgxOSwgMHhkMywgMHg5NCwgMHgzZiwgMHg0MCwgMHgwMywgMHg3NSwKKyAgMHgxOSwgMHgzZiwgMHg4NSwgMHgxOSwgMHgwOCwgMHg5MCwgMHg3ZCwgMHg4MCwgMHhlNSwgMHgzNywgMHhmMCwgMHg3ZSwgMHg3ZCwgMHg3ZiwgMHg4MSwgMHg3NSwKKyAgMHgwYywgMHg3ZCwgMHg3NSwgMHgwZCwgMHg4MSwgMHgxMiwgMHgwZCwgMHgzNywgMHhlNSwgMHgxOSwgMHgwNCwgMHg5MCwgMHg3ZiwgMHhiYiwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHhkMCwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNiwgMHgyMCwgMHgwNiwgMHgwMywgMHgwMiwgMHgwNywgMHg5NywgMHhjMiwgMHgwNiwgMHhlNH19LAorIHsweDA1NDYsIDY0LCB7IDB4ZjUsIDB4MTgsIDB4NzQsIDB4YzAsIDB4MjUsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTgsCisgIDB4N2MsIDB4MDAsIDB4N2IsIDB4MDEsIDB4N2EsIDB4N2UsIDB4NzksIDB4MjAsIDB4MjQsIDB4MjAsIDB4ZjksIDB4ZWMsIDB4MzQsIDB4N2UsIDB4ZmEsIDB4ZWYsCisgIDB4MTIsIDB4MGUsIDB4ZTAsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MjAsIDB4ZDcsIDB4OTAsIDB4N2UsIDB4MjAsIDB4ZTAsIDB4NjAsIDB4NjgsCisgIDB4OTAsIDB4N2UsIDB4MjMsIDB4ZTAsIDB4NjAsIDB4MjQsIDB4N2YsIDB4MDEsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTIsIDB4MDksIDB4N2YsIDB4MDN9fSwKKyB7MHgwNTg2LCA2NCwgeyAweDdkLCAweGNkLCAweDEyLCAweDEyLCAweDA5LCAweDQzLCAweDQ3LCAweDgwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwLCAweGMwLCAweDAwLAorICAweGU1LCAweDQ3LCAweGYwLCAweGU0LCAweDkwLCAweDdlLCAweDMzLCAweGYwLCAweDgwLCAweDMwLCAweDkwLCAweDdlLCAweDIxLCAweGUwLCAweGZmLCAweDEyLAorICAweDExLCAweDI3LCAweDkwLCAweDdlLCAweDIyLCAweGUwLCAweGZmLCAweDEyLCAweDExLCAweDRkLCAweDdmLCAweDAxLCAweDkwLCAweDdlLCAweDMxLCAweGUwLAorICAweGZkLCAweDEyLCAweDEyLCAweDA5LCAweDdmLCAweDAzLCAweDdkLCAweDA3LCAweDEyLCAweDEyLCAweDA5LCAweDQzLCAweDQ3LCAweDgwLCAweDkwfX0sCisgezB4MDVjNiwgNjQsIHsgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYSwgMHhmMCwKKyAgMHhlNSwgMHg0MSwgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgyMywgMHhlMCwgMHg3MCwgMHgwNiwgMHg5MCwgMHg3ZSwKKyAgMHgzMywgMHhlMCwgMHg3MCwgMHgwOCwgMHhlNCwgMHg5MCwgMHg3ZSwgMHgzMywgMHhmMCwgMHg3NSwgMHgyZSwgMHhmZiwgMHg5MCwgMHg3ZSwgMHgyNSwgMHhlMCwKKyAgMHg2MCwgMHgxMiwgMHhhMywgMHhlMCwgMHg1NCwgMHgzZiwgMHhmNSwgMHg0NSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MH19LAorIHsweDA2MDYsIDY0LCB7IDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDUsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MjcsIDB4ZTAsIDB4NjAsIDB4MmIsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDMsCisgIDB4ODAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDMsIDB4N2YsIDB4NTMsIDB4NDMsIDB4ZmMsIDB4OTAsIDB4N2UsIDB4MjksIDB4ZTAsIDB4NjAsIDB4MTEsIDB4NDMsCisgIDB4NDMsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTEsIDB4NzMsIDB4OTAsIDB4N2UsIDB4MmIsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTEsIDB4OTksCisgIDB4YWYsIDB4NDMsIDB4MTIsIDB4MTEsIDB4MDEsIDB4OTAsIDB4N2UsIDB4MjMsIDB4ZTAsIDB4NjAsIDB4MDgsIDB4NTMsIDB4NDMsIDB4N2YsIDB4YWZ9fSwKKyB7MHgwNjQ2LCA2NCwgeyAweDQzLCAweDEyLCAweDExLCAweDAxLCAweDkwLCAweDdlLCAweDJjLCAweGUwLCAweDYwLCAweDE4LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQ3LCAweDAyLAorICAweDgwLCAweDAzLCAweDUzLCAweDQ3LCAweGZkLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ3LAorICAweGYwLCAweDkwLCAweDdlLCAweDJlLCAweGUwLCAweDYwLCAweDE4LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQ3LCAweDAxLCAweDgwLCAweDAzLAorICAweDUzLCAweDQ3LCAweGZlLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ3LCAweGYwfX0sCisgezB4MDY4NiwgNjQsIHsgMHg5MCwgMHg3ZSwgMHgzMiwgMHhlMCwgMHhmNSwgMHgzYiwgMHhhMywgMHhlMCwgMHgxMywgMHg5MiwgMHgwZSwgMHhhMywgMHhlMCwgMHhmNSwgMHgzZCwgMHhhMywgMHhlMCwKKyAgMHg2MCwgMHgwNSwgMHg0MywgMHg0NywgMHgxMCwgMHg4MCwgMHgwMywgMHg1MywgMHg0NywgMHhlZiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwKKyAgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NywgMHhmMCwgMHg5MCwgMHg3ZSwgMHgzNiwgMHhlMCwgMHg2MCwgMHgzMiwgMHg1MywgMHg0NSwgMHhiZiwgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3Zn19LAorIHsweDA2YzYsIDY0LCB7IDB4OTgsIDB4NzQsIDB4MDksIDB4ZjAsIDB4MTIsIDB4MTMsIDB4NTcsIDB4ZWYsIDB4NTQsIDB4ZmUsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4NTMsIDB4M2YsIDB4ZmQsCisgIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2YsIDB4MTIsIDB4MTIsIDB4MDksIDB4ZTQsIDB4ZjUsIDB4MzMsIDB4ZjUsIDB4MzIsIDB4ZDIsIDB4MDgsIDB4OTAsIDB4N2UsCisgIDB4MzcsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NDMsIDB4M2YsIDB4MDIsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2YsIDB4MTIsIDB4MTIsIDB4MDksIDB4NzUsIDB4MzIsCisgIDB4MDEsIDB4ZDIsIDB4MDgsIDB4OTAsIDB4N2UsIDB4MzgsIDB4ZTAsIDB4NjAsIDB4MTAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjB9fSwKKyB7MHgwNzA2LCA2NCwgeyAweGU1LCAweDQxLCAweDQ0LCAweDA0LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGQyLCAweDAwLCAweDkwLCAweDdlLCAweDM5LCAweGUwLCAweDYwLCAweDExLCAweDQzLAorICAweDQ1LCAweDQwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLAorICAweDkwLCAweDdlLCAweDNhLCAweGUwLCAweDYwLCAweDBmLCAweDUzLCAweDNmLCAweGZlLCAweGU0LCAweGZmLCAweGFkLCAweDNmLCAweDEyLCAweDEyLCAweDA5LAorICAweDc1LCAweDM0LCAweDAxLCAweGQyLCAweDA4LCAweDkwLCAweDdlLCAweDNiLCAweGUwLCAweDYwLCAweDBmLCAweDQzLCAweDNmLCAweDAxLCAweGU0fX0sCisgezB4MDc0NiwgNjQsIHsgMHhmZiwgMHhhZCwgMHgzZiwgMHgxMiwgMHgxMiwgMHgwOSwgMHhlNCwgMHhmNSwgMHgzNCwgMHhkMiwgMHgwOCwgMHg5MCwgMHg3ZSwgMHgzYywgMHhlMCwgMHg2MCwgMHgwZSwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYSwgMHhmMCwgMHhlNSwgMHg0MSwgMHg0NCwgMHgwMiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwKKyAgMHgzZCwgMHhlMCwgMHg2MCwgMHgwMiwgMHhkMiwgMHgwYywgMHg5MCwgMHg3ZSwgMHgzZSwgMHhlMCwgMHg2MCwgMHgwOCwgMHg3NSwgMHgzNSwgMHgwMSwgMHhlNCwKKyAgMHhmNSwgMHgzOSwgMHhkMiwgMHgwOCwgMHg5MCwgMHg3ZSwgMHgzZiwgMHhlMCwgMHg2MCwgMHgxMSwgMHg5MCwgMHg3ZiwgMHhkNywgMHg3NCwgMHgxM319LAorIHsweDA3ODYsIDY0LCB7IDB4ZjAsIDB4NzQsIDB4MzMsIDB4ZjAsIDB4NzQsIDB4MTYsIDB4ZjAsIDB4NzQsIDB4MzYsIDB4ZjAsIDB4ZDIsIDB4MDQsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4ZDEsIDB4ZjAsCisgIDB4MzAsIDB4MWEsIDB4NTIsIDB4ZTUsIDB4MzksIDB4NjAsIDB4MDIsIDB4MTUsIDB4MzksIDB4MzAsIDB4MTMsIDB4NDksIDB4ZTUsIDB4MTMsIDB4ZDMsIDB4OTQsCisgIDB4MDAsIDB4NDAsIDB4MDQsIDB4MTUsIDB4MTMsIDB4ODAsIDB4M2UsIDB4NzUsIDB4MTMsIDB4MGEsIDB4MzAsIDB4MWIsIDB4MDIsIDB4YzIsIDB4MTMsIDB4MTIsCisgIDB4MTMsIDB4NTcsIDB4ZWYsIDB4NTQsIDB4MDEsIDB4ZjUsIDB4MTksIDB4NjUsIDB4MzMsIDB4NjAsIDB4MDUsIDB4ODUsIDB4MTksIDB4MzMsIDB4ZDJ9fSwKKyB7MHgwN2M2LCA2NCwgeyAweDA4LCAweDEyLCAweDEzLCAweDkzLCAweGVmLCAweDU0LCAweDgwLCAweGY1LCAweDE5LCAweDY1LCAweDJmLCAweDYwLCAweDA1LCAweDg1LCAweDE5LCAweDJmLCAweGQyLAorICAweDA4LCAweDMwLCAweDBlLCAweDExLCAweDEyLCAweDEzLCAweDkzLCAweGVmLCAweDU0LCAweDEwLCAweGY1LCAweDE5LCAweDY1LCAweDJlLCAweDYwLCAweDA1LAorICAweDg1LCAweDE5LCAweDJlLCAweGQyLCAweDA4LCAweDMwLCAweDFhLCAweDJhLCAweDkwLCAweDdmLCAweGQyLCAweGUwLCAweDIwLCAweGUxLCAweDIzLCAweDkwLAorICAweDdiLCAweDQwLCAweGUwLCAweDYwLCAweDA5LCAweGUwLCAweGY1LCAweDE1LCAweDkwLCAweDdiLCAweDQyLCAweGUwLCAweGY1LCAweDE2LCAweDkwfX0sCisgezB4MDgwNiwgNjQsIHsgMHg3YiwgMHg0MSwgMHhlMCwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHhkNywgMHg3NCwgMHgxNywgMHhmMCwgMHg3NCwgMHgzNywgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwKKyAgMHhkMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjMiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwOSwgMHgyMCwgMHhlNSwgMHgwYSwgMHg3MCwgMHg0MCwKKyAgMHgzMCwgMHgwNywgMHgzOSwgMHhlNSwgMHgzOCwgMHg3MCwgMHgzNSwgMHhjMiwgMHgwNywgMHhmNSwgMHgxOCwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwKKyAgMHgyNCwgMHgyNSwgMHgxOCwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgwZSwgMHg5YSwgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNX19LAorIHsweDA4NDYsIDY0LCB7IDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDksIDB4ZGIsCisgIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDksIDB4ZjAsIDB4NzUsIDB4MzgsIDB4MTAsIDB4ZTQsIDB4ZjUsIDB4MmMsIDB4NzUsIDB4MGEsIDB4MDEsIDB4MjIsCisgIDB4ZTUsIDB4MGEsIDB4NjQsIDB4MDEsIDB4NzAsIDB4NDAsIDB4MzAsIDB4MDgsIDB4MzksIDB4ZTUsIDB4MzksIDB4NzAsIDB4MzUsIDB4YzIsIDB4MDgsIDB4ZjUsCisgIDB4MTgsIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MmQsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTJ9fSwKKyB7MHgwODg2LCA2NCwgeyAweDBlLCAweDlhLCAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LAorICAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDA5LCAweGRiLCAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDA5LCAweGYwLCAweDc1LCAweDM5LCAweDEwLCAweGU0LAorICAweGY1LCAweDM1LCAweDc1LCAweDBhLCAweDAyLCAweDIyLCAweGU1LCAweDBhLCAweDY0LCAweDAyLCAweDcwLCAweDM2LCAweDMwLCAweDE0LCAweDJmLCAweGMyLAorICAweDE0LCAweGY1LCAweDE4LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDBlLCAweDI1LCAweDE4LCAweGY5LCAweGVlLCAweDM0LCAweDAwfX0sCisgezB4MDhjNiwgNjQsIHsgMHhmYSwgMHgxMiwgMHgwZSwgMHg5YSwgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNSwgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwKKyAgMHhmMCwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwNSwgMHhkYiwgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwNSwgMHhmMCwgMHg3NSwgMHgwYSwKKyAgMHgwMywgMHgyMiwgMHhlNSwgMHgxNSwgMHg2MCwgMHgzMCwgMHgxNSwgMHgxNSwgMHhlNCwgMHhmNSwgMHgxOCwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwKKyAgMHgxNCwgMHgyNSwgMHgxOCwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgwZSwgMHg5YSwgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNX19LAorIHsweDA5MDYsIDY0LCB7IDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDMsIDB4ZGIsCisgIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MGEsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZTksIDB4ZTAsIDB4MTIsIDB4MGUsCisgIDB4ZjIsIDB4MGEsIDB4MDgsIDB4MDAsIDB4MGEsIDB4N2MsIDB4MDEsIDB4MGEsIDB4ZTgsIDB4MDMsIDB4MDksIDB4NDQsIDB4MDYsIDB4MDksIDB4ZmIsIDB4MDgsCisgIDB4MDksIDB4ZjUsIDB4MDksIDB4MDksIDB4ZGQsIDB4MGEsIDB4MDksIDB4ZWMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MzcsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwOTQ2LCA2NCwgeyAweGViLCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE5LCAweDE0LCAweDYwLCAweDYxLCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDA5LCAweGQzLCAweDc0LAorICAweDE5LCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweDc0LCAweDAwLCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmLAorICAweGVhLCAweGUwLCAweDcwLCAweDA0LCAweDdmLCAweDAyLCAweDgwLCAweDAyLCAweDdmLCAweDAzLCAweDc1LCAweDgyLCAweDgyLCAweDc1LCAweDgzLCAweDE5LAorICAweGVmLCAweGYwLCAweDc1LCAweDgyLCAweDdiLCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDc1LCAweDgyLCAweDc0LCAweDc1LCAweDgzLCAweDE5fX0sCisgezB4MDk4NiwgNjQsIHsgMHhmMCwgMHg3NSwgMHg4MiwgMHg2NiwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NSwgMHg4MiwgMHg1OCwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHhlYSwgMHhlMCwgMHgwNCwgMHg3NSwgMHg4MiwgMHgxNywgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NCwgMHgxOSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwKKyAgMHg3NCwgMHgxMiwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmZiwgMHgxMiwgMHgwZiwKKyAgMHgxOCwgMHhlYSwgMHg0OSwgMHg2MCwgMHgwZCwgMHhlYSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHhlOSwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMH19LAorIHsweDA5YzYsIDY0LCB7IDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsCisgIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4MDksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsCisgIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MDksIDB4MDIsIDB4MGIsIDB4M2UsIDB4MTIsIDB4MGIsCisgIDB4NDYsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4MDAsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4ZjAsIDB4MDJ9fSwKKyB7MHgwYTA2LCA2NCwgeyAweDBiLCAweDNlLCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweDdmLCAweDYwLCAweDI0LCAweDE0LCAweDYwLCAweDMxLCAweDI0LCAweDAyLCAweDcwLCAweDViLAorICAweGEyLCAweDEwLCAweGU0LCAweDMzLCAweGZmLCAweDI1LCAweGUwLCAweGZmLCAweGEyLCAweDE2LCAweGU0LCAweDMzLCAweDRmLCAweDkwLCAweDdmLCAweDAwLAorICAweGYwLCAweGU0LCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweGU0LCAweDkwLCAweDdmLAorICAweDAwLCAweGYwLCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDBiLCAweDNlLCAweDkwLCAweDdmfX0sCisgezB4MGE0NiwgNjQsIHsgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwKKyAgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmZCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwKKyAgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwKKyAgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHgzZSwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxZCwgMHgyNCwgMHgwMn19LAorIHsweDBhODYsIDY0LCB7IDB4NjAsIDB4MDMsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDUsIDB4YzIsIDB4MTAsIDB4MDIsIDB4MGIsIDB4M2UsCisgIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4M2UsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MzgsCisgIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsCisgIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwYWM2LCA2NCwgeyAweGVjLCAweGUwLCAweDU0LCAweDgwLCAweGZmLCAweDEzLCAweDEzLCAweDEzLCAweDU0LCAweDFmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDkwLCAweDdmLAorICAweGQ3LCAweGYwLCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDgwLCAweDVmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLAorICAweDU2LCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE4LCAweDI0LCAweDAyLCAweDcwLCAweDRhLCAweDkwLCAweDdmLCAweGVhLAorICAweGUwLCAweGI0LCAweDAxLCAweDA0LCAweGQyLCAweDEwLCAweDgwLCAweDNmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwfX0sCisgezB4MGIwNiwgNjQsIHsgMHg4MCwgMHgzNiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwKKyAgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwKKyAgMHhmNSwgMHg4MywgMHg3NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgwNywKKyAgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgyMn19LAorIHsweDBiNDYsIDY0LCB7IDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsIDB4MzAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4OTUsIDB4NzQsIDB4YzAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4M2YsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTgsCisgIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4OGUsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGUsIDB4ZjAsIDB4ZTQsIDB4ZjUsCisgIDB4MjQsIDB4NzUsIDB4MTgsIDB4MDEsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MjQsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZTQsIDB4MzQsIDB4MDAsIDB4ZmF9fSwKKyB7MHgwYjg2LCA2NCwgeyAweGU0LCAweDEyLCAweDBlLCAweGUwLCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDA5LCAweGVhLCAweDc1LCAweDNhLCAweDAxLCAweGU0LCAweGY1LCAweDM4LAorICAweGY1LCAweDEzLCAweGY1LCAweDM2LCAweGMyLCAweDA3LCAweGMyLCAweDBiLCAweGMyLCAweDA1LCAweGMyLCAweDAwLCAweGMyLCAweDA5LCAweGMyLCAweDEzLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDc1LCAweDQ0LCAweDAzLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweDAzLCAweGYwLCAweDdmLAorICAweDBjLCAweGU0LCAweGZkLCAweDEyLCAweDExLCAweGJmLCAweDdmLCAweDEwLCAweDhmLCAweDQyLCAweDEyLCAweDEwLCAweDhmLCAweDkwLCAweDdmfX0sCisgezB4MGJjNiwgNjQsIHsgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHg3ZiwgMHgwMSwgMHg4ZiwgMHg0MCwgMHhlZiwgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg3NSwgMHg0NiwgMHg4MCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHg4MCwgMHhmMCwgMHgwZiwgMHhlNCwgMHhmZCwKKyAgMHgxMiwgMHgxMSwgMHhiZiwgMHhlNCwgMHhmZiwgMHg3ZSwgMHhhMywgMHhhZCwgMHgwNiwgMHg4ZCwgMHgzZSwgMHgxMiwgMHgxMSwgMHhiZiwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNCwgMHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZCwgMHg3ZiwgMHgxMiwgMHgxMX19LAorIHsweDBjMDYsIDY0LCB7IDB4YmYsIDB4N2YsIDB4MDEsIDB4MTIsIDB4MTIsIDB4NzgsIDB4N2YsIDB4MDMsIDB4N2QsIDB4MDcsIDB4MTIsIDB4MTEsIDB4YmYsIDB4N2YsIDB4MTMsIDB4N2QsIDB4MDEsCisgIDB4MTIsIDB4MTEsIDB4YmYsIDB4MjAsIDB4MWIsIDB4MDMsIDB4MDIsIDB4MGMsIDB4YzUsIDB4NzUsIDB4MmQsIDB4MDEsIDB4NzUsIDB4MTgsIDB4MDEsIDB4N2IsCisgIDB4MDAsIDB4NzQsIDB4MmQsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZTQsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4ZTQsIDB4MTIsIDB4MGUsIDB4ZTAsIDB4MDUsIDB4MTgsCisgIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDksIDB4ZWEsIDB4NzUsIDB4M2IsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4MzksIDB4ZjUsIDB4MTMsIDB4ZjUsIDB4Mzd9fSwKKyB7MHgwYzQ2LCA2NCwgeyAweGMyLCAweDA4LCAweGMyLCAweDBjLCAweGMyLCAweDA2LCAweGMyLCAweDAwLCAweGMyLCAweDBhLCAweGMyLCAweDEzLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLAorICAweGYwLCAweDc1LCAweDQ1LCAweDAzLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweDAzLCAweGYwLCAweDdmLCAweDBjLCAweGU0LCAweGZkLCAweDEyLCAweDEyLAorICAweDA5LCAweDdmLCAweDEwLCAweDhmLCAweDQzLCAweDEyLCAweDExLCAweDAxLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBhLCAweGYwLCAweDdmLCAweDAxLAorICAweDhmLCAweDQxLCAweGVmLCAweDQ0LCAweDA2LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwfX0sCisgezB4MGM4NiwgNjQsIHsgMHg3NSwgMHg0NywgMHg4MCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHg4MCwgMHhmMCwgMHgwZiwgMHhlNCwgMHhmZCwgMHgxMiwgMHgxMiwgMHgwOSwgMHhlNCwgMHhmZiwKKyAgMHg3ZSwgMHhhMywgMHhhZCwgMHgwNiwgMHg4ZCwgMHgzZiwgMHgxMiwgMHgxMiwgMHgwOSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOSwgMHhmMCwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHhlNCwgMHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZCwgMHg3ZiwgMHgxMiwgMHgxMiwgMHgwOSwgMHg3ZiwgMHgwMSwgMHgxMiwgMHgxMiwgMHg5OSwKKyAgMHg3ZiwgMHgwMywgMHg3ZCwgMHgwNywgMHgxMiwgMHgxMiwgMHgwOSwgMHg3ZiwgMHgxMywgMHg3ZCwgMHgwMSwgMHgxMiwgMHgxMiwgMHgwOSwgMHhkMn19LAorIHsweDBjYzYsIDY0LCB7IDB4MTIsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4YWYsIDB4MDgsIDB4ZTUsIDB4MGQsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MGMsIDB4ZjUsCisgIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4MDUsIDB4ODYsIDB4ZTAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4ZjAsIDB4MDUsCisgIDB4ODYsIDB4ZGYsIDB4ZjcsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4YWYsIDB4MDgsIDB4ZTUsIDB4MGQsCisgIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MGMsIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4MDV9fSwKKyB7MHgwZDA2LCA2NCwgeyAweDg2LCAweGYwLCAweGEzLCAweDA1LCAweDg2LCAweGRmLCAweGY3LCAweDA1LCAweDg2LCAweGQyLCAweGFmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA4LAorICAweGYwLCAweGFmLCAweDA4LCAweGU1LCAweDBkLCAweGY1LCAweDgyLCAweGU1LCAweDBjLCAweGY1LCAweDgzLCAweGMyLCAweGFmLCAweDA1LCAweDg2LCAweDkwLAorICAweGMwLCAweDAwLCAweDA1LCAweDg2LCAweGUwLCAweGEzLCAweDA1LCAweDg2LCAweGYwLCAweDA1LCAweDg2LCAweGRmLCAweGY3LCAweGQyLCAweGFmLCAweDIyLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA4LCAweGYwLCAweGFmLCAweDA4LCAweGU1LCAweDBkLCAweGY1LCAweDgyLCAweGU1LCAweDBjLCAweGY1fX0sCisgezB4MGQ0NiwgNjQsIHsgMHg4MywgMHhjMiwgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHgwNSwgMHg4NiwgMHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywKKyAgMHgwNSwgMHg4NiwgMHhkMiwgMHhhZiwgMHgyMiwgMHg3NCwgMHgwMCwgMHhmNSwgMHg4NiwgMHg5MCwgMHhmZCwgMHhhNSwgMHg3YywgMHgwNSwgMHhhMywgMHhlNSwKKyAgMHg4MiwgMHg0NSwgMHg4MywgMHg3MCwgMHhmOSwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg0MywgMHg4NywgMHgwMSwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHhkMiwgMHgxOSwgMHg5MCwgMHg3ZiwgMHg5MiwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMH19LAorIHsweDBkODYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4YWUsIDB4ZTAsIDB4ZmYsIDB4ZDMsIDB4OTIsIDB4MTAsIDB4ZTQsIDB4MzMsIDB4ZmUsIDB4ZWYsIDB4NGUsIDB4ZjAsIDB4ZDIsIDB4ZTgsIDB4NDMsCisgIDB4ZDgsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZGUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsCisgIDB4ZmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YTksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWEsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWYsCisgIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWUsIDB4ZTAsIDB4NDQsIDB4MGQsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4ZDIsIDB4MWF9fSwKKyB7MHgwZGM2LCA2NCwgeyAweDEyLCAweDEyLCAweDUzLCAweGMyLCAweDExLCAweGU0LCAweGY1LCAweDBiLCAweGY1LCAweDEzLCAweGMyLCAweDE3LCAweGMyLCAweDEyLCAweDkwLCAweDdmLCAweGExLAorICAweDA0LCAweGYwLCAweDkwLCAweDdmLCAweGQ4LCAweGUwLCAweDY1LCAweDE3LCAweDYwLCAweDEwLCAweDMwLCAweDEyLCAweDA1LCAweGQyLCAweDFhLCAweDEyLAorICAweDAwLCAweDQ2LCAweDkwLCAweDdmLCAweGQ4LCAweGUwLCAweGY1LCAweDE3LCAweDgwLCAweDA4LCAweDMwLCAweDEyLCAweDA1LCAweGMyLCAweDFhLCAweDEyLAorICAweDAwLCAweDQ2LCAweDMwLCAweDExLCAweDA3LCAweGMyLCAweDExLCAweDEyLCAweDA5LCAweDIxLCAweDgwLCAweGQ2LCAweDMwLCAweDE4LCAweGQzfX0sCisgezB4MGUwNiwgNjQsIHsgMHhjMiwgMHgxOCwgMHgxMiwgMHgxMywgMHg5ZiwgMHg4MCwgMHhjYywgMHgyMiwgMHg3OCwgMHg3ZiwgMHhlNCwgMHhmNiwgMHhkOCwgMHhmZCwgMHg3NSwgMHg4MSwgMHg0NywKKyAgMHgwMiwgMHgwZSwgMHg1NSwgMHgwMiwgMHgwZCwgMHg3ZCwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHg0MCwgMHgwMywgMHhmNiwKKyAgMHg4MCwgMHgwMSwgMHhmMiwgMHgwOCwgMHhkZiwgMHhmNCwgMHg4MCwgMHgyOSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHg1NCwgMHgwNywgMHgyNCwgMHgwYywKKyAgMHhjOCwgMHhjMywgMHgzMywgMHhjNCwgMHg1NCwgMHgwZiwgMHg0NCwgMHgyMCwgMHhjOCwgMHg4MywgMHg0MCwgMHgwNCwgMHhmNCwgMHg1NiwgMHg4MH19LAorIHsweDBlNDYsIDY0LCB7IDB4MDEsIDB4NDYsIDB4ZjYsIDB4ZGYsIDB4ZTQsIDB4ODAsIDB4MGIsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4OTAsIDB4MTIsCisgIDB4YmEsIDB4ZTQsIDB4N2UsIDB4MDEsIDB4OTMsIDB4NjAsIDB4YmMsIDB4YTMsIDB4ZmYsIDB4NTQsIDB4M2YsIDB4MzAsIDB4ZTUsIDB4MDksIDB4NTQsIDB4MWYsCisgIDB4ZmUsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NjAsIDB4MDEsIDB4MGUsIDB4Y2YsIDB4NTQsIDB4YzAsIDB4MjUsIDB4ZTAsIDB4NjAsIDB4YTgsIDB4NDAsIDB4YjgsCisgIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZmEsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4Yzh9fSwKKyB7MHgwZTg2LCA2NCwgeyAweGNhLCAweGM1LCAweDgzLCAweGNhLCAweGYwLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNhLCAweGM1LCAweDgzLCAweGNhLCAweGRmLCAweGU5LCAweGRlLAorICAweGU3LCAweDgwLCAweGJlLCAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDAyLCAweGU3LCAweDIyLAorICAweGJiLCAweGZlLCAweDAyLCAweGUzLCAweDIyLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxLCAweDBjLCAweGU1LAorICAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDA2LCAweGU5LCAweDI1fX0sCisgezB4MGVjNiwgNjQsIHsgMHg4MiwgMHhmOCwgMHhlNiwgMHgyMiwgMHhiYiwgMHhmZSwgMHgwNiwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgMHhlMiwgMHgyMiwgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwKKyAgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMiwgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywKKyAgMHhmMCwgMHgyMiwgMHg1MCwgMHgwMiwgMHhmNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMSwgMHhmMywgMHgyMiwgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgMHhmOCwKKyAgMHhlNCwgMHg5MywgMHg3MCwgMHgxMiwgMHg3NCwgMHgwMSwgMHg5MywgMHg3MCwgMHgwZCwgMHhhMywgMHhhMywgMHg5MywgMHhmOCwgMHg3NCwgMHgwMX19LAorIHsweDBmMDYsIDY0LCB7IDB4OTMsIDB4ZjUsIDB4ODIsIDB4ODgsIDB4ODMsIDB4ZTQsIDB4NzMsIDB4NzQsIDB4MDIsIDB4OTMsIDB4NjgsIDB4NjAsIDB4ZWYsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ODAsCisgIDB4ZGYsIDB4OGYsIDB4MTgsIDB4ZTQsIDB4ZjUsIDB4MTksIDB4NzUsIDB4MWEsIDB4ZmYsIDB4NzUsIDB4MWIsIDB4MTksIDB4NzUsIDB4MWMsIDB4ODYsIDB4YWIsCisgIDB4MWEsIDB4YWEsIDB4MWIsIDB4YTksIDB4MWMsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4MGUsIDB4YjMsIDB4YjQsIDB4MDMsIDB4MWQsIDB4YWYsIDB4MTksCisgIDB4MDUsIDB4MTksIDB4ZWYsIDB4YjUsIDB4MTgsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MGUsIDB4OWEsIDB4N2UsIDB4MDAsIDB4MjksIDB4ZmYsIDB4ZWV9fSwKKyB7MHgwZjQ2LCA2NCwgeyAweDNhLCAweGE5LCAweDA3LCAweDc1LCAweDFhLCAweGZmLCAweGY1LCAweDFiLCAweDg5LCAweDFjLCAweDgwLCAweGQ0LCAweDdiLCAweDAwLCAweDdhLCAweDAwLCAweDc5LAorICAweDAwLCAweDIyLCAweDhmLCAweDFhLCAweDA1LCAweDBkLCAweGU1LCAweDBkLCAweGFlLCAweDBjLCAweDcwLCAweDAyLCAweDA1LCAweDBjLCAweDE0LCAweGY1LAorICAweDgyLCAweDhlLCAweDgzLCAweGU1LCAweDFhLCAweGYwLCAweDEyLCAweDAwLCAweDM2LCAweDA1LCAweDBkLCAweGU1LCAweDBkLCAweGFjLCAweDBjLCAweDcwLAorICAweDAyLCAweDA1LCAweDBjLCAweDE0LCAweGY1LCAweDgyLCAweDhjLCAweDgzLCAweGVmLCAweGYwLCAweDE1LCAweDA4LCAweGU1LCAweDA4LCAweDYwfX0sCisgezB4MGY4NiwgNjQsIHsgMHgwYSwgMHgxMiwgMHgxMywgMHgzMywgMHg4ZiwgMHgxYSwgMHhlZiwgMHg0MiwgMHgzNiwgMHg4MCwgMHhjYSwgMHgyMiwgMHg4ZiwgMHgxYSwgMHgwNSwgMHgwZCwgMHhlNSwKKyAgMHgwZCwgMHhhZSwgMHgwYywgMHg3MCwgMHgwMiwgMHgwNSwgMHgwYywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlNSwgMHgxYSwgMHhmMCwgMHgxMiwKKyAgMHgxMywgMHg0YiwgMHgwNSwgMHgwZCwgMHhlNSwgMHgwZCwgMHhhYywgMHgwYywgMHg3MCwgMHgwMiwgMHgwNSwgMHgwYywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YywKKyAgMHg4MywgMHhlZiwgMHhmMCwgMHgxNSwgMHgwOCwgMHhlNSwgMHgwOCwgMHg2MCwgMHgwYSwgMHgxMiwgMHgxMywgMHg4NywgMHg4ZiwgMHgxYSwgMHhlZn19LAorIHsweDBmYzYsIDY0LCB7IDB4NDIsIDB4MzcsIDB4ODAsIDB4Y2EsIDB4MjIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsCisgIDB4NzUsIDB4ODYsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YzQsIDB4ZTQsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDQsCisgIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzAsIDB4ZTAsCisgIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4ZDIsIDB4MTF9fSwKKyB7MHgxMDA2LCA2NCwgeyAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDAxLCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLAorICAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLAorICAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGQyLCAweDE4LCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA4LCAweGYwLCAweGQwLAorICAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweDkwLCAweDdmLCAweDk4fX0sCisgezB4MTA0NiwgNjQsIHsgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMCwgMHhmMCwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMH19LAorIHsweDEwODYsIDY0LCB7IDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTR9fSwKKyB7MHgxMGM2LCA2NCwgeyAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLAorICAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE2LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLAorICAweGYwLCAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBifX0sCisgezB4MTEwNiwgNjQsIHsgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwKKyAgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwKKyAgMHgwOCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NX19LAorIHsweDExNDYsIDY0LCB7IDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsCisgIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDksIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsCisgIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsCisgIDB4MGIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4OTB9fSwKKyB7MHgxMTg2LCA2NCwgeyAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLAorICAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLAorICAweDk4LCAweDc0LCAweDBlLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LAorICAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1fX0sCisgezB4MTFjNiwgNjQsIHsgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwKKyAgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZCwgMHhmMCwgMHgyMiwgMHgxMiwgMHgxMywgMHgxYiwKKyAgMHg4ZiwgMHgxYSwgMHgxMiwgMHgxMywgMHgxYiwgMHg4ZiwgMHgxYiwgMHhlNSwgMHgxYSwgMHg2NSwgMHgxYiwgMHg2MCwgMHgxMiwgMHgxMiwgMHgxMywgMHgxYiwKKyAgMHg4ZiwgMHgxYSwgMHhlNSwgMHgxYSwgMHg2NSwgMHgxYiwgMHg2MCwgMHgwNywgMHgxMiwgMHgxMywgMHgxYiwgMHg4ZiwgMHgxYiwgMHg4MCwgMHhlOH19LAorIHsweDEyMDYsIDY0LCB7IDB4YWYsIDB4MWEsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGYsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGQsCisgIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MTIsIDB4MTMsIDB4NmYsIDB4OGYsIDB4MWEsIDB4MTIsIDB4MTMsIDB4NmYsIDB4OGYsCisgIDB4MWIsIDB4ZTUsIDB4MWEsIDB4NjUsIDB4MWIsIDB4NjAsIDB4MTIsIDB4MTIsIDB4MTMsIDB4NmYsIDB4OGYsIDB4MWEsIDB4ZTUsIDB4MWEsIDB4NjV9fSwKKyB7MHgxMjQ2LCA2NCwgeyAweDFiLCAweDYwLCAweDA3LCAweDEyLCAweDEzLCAweDZmLCAweDhmLCAweDFiLCAweDgwLCAweGU4LCAweGFmLCAweDFhLCAweDIyLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLAorICAweDU0LCAweGZiLCAweGYwLCAweGUwLCAweDQ0LCAweDA4LCAweGYwLCAweDMwLCAweDFhLCAweDA0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDdmLCAweGY0LAorICAweDdlLCAweDAxLCAweDEyLCAweDEyLCAweGQ2LCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweGUwLCAweDQ0LCAweDA0LCAweGYwLAorICAweDIyLCAweGFlLCAweDA3LCAweGU0LCAweGZmLCAweGU1LCAweDNlLCAweDU0LCAweDdmLCAweGZkLCAweDEyLCAweDExLCAweGJmLCAweDkwLCAweDdmfX0sCisgezB4MTI4NiwgNjQsIHsgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZSwgMHhmMCwgMHhlNCwgMHhlNSwgMHgzZSwgMHg0NCwgMHg4MCwgMHhmZCwgMHgxMiwgMHgxMSwKKyAgMHhiZiwgMHgyMiwgMHhhZSwgMHgwNywgMHhlNCwgMHhmZiwgMHhlNSwgMHgzZiwgMHg1NCwgMHg3ZiwgMHhmZCwgMHgxMiwgMHgxMiwgMHgwOSwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgwOSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZSwgMHhmMCwgMHhlNCwgMHhlNSwgMHgzZiwgMHg0NCwgMHg4MCwgMHhmZCwgMHgxMiwKKyAgMHgxMiwgMHgwOSwgMHgyMiwgMHgwNSwgMHgwZSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgxNCwgMHgwMywgMHgwMCwgMHgwMH19LAorIHsweDEyYzYsIDY0LCB7IDB4YzEsIDB4MTEsIDB4YzEsIDB4MTgsIDB4YzEsIDB4OTUsIDB4YzEsIDB4MTAsIDB4YzEsIDB4MTYsIDB4MDEsIDB4MGEsIDB4MDAsIDB4YzEsIDB4OWIsIDB4MDAsIDB4OGUsCisgIDB4MTgsIDB4OGYsIDB4MTksIDB4ZTUsIDB4MTksIDB4MTUsIDB4MTksIDB4YWUsIDB4MTgsIDB4NzAsIDB4MDIsIDB4MTUsIDB4MTgsIDB4NGUsIDB4NjAsIDB4MDUsCisgIDB4MTIsIDB4MGQsIDB4NWMsIDB4ODAsIDB4ZWUsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsCisgIDB4ZmYsIDB4MjIsIDB4NTMsIDB4ZDgsIDB4ZWYsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MGYsIDB4ZjUsIDB4MDAsIDB4MDIsIDB4MTN9fSwKKyB7MHgxMzA2LCA2NCwgeyAweDA0LCAweDAwLCAweDAyLCAweDBmLCAweGNiLCAweDAwLCAweDAyLCAweDEwLCAweDFjLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweDkwLCAweGMwLAorICAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDE1LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE2LCAweGYwLCAweDkwfX0sCisgezB4MTM0NiwgNjQsIHsgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwKKyAgMHgwYSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZn19LAorIHsweDEzODYsIDY0LCB7IDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsCisgIDB4MGUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MDAsIDB4MDMsIDB4MTIsIDB4MGQsIDB4NmQsIDB4MTIsIDB4MGIsCisgIDB4NDYsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxM2M2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTQwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNDg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTRjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNTQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTU4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNjA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTY0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNmM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTcwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNzg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTdjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxODQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTg4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZmYsIDB4MDB9fSwKKyB7MHgxOTA2LCA2NCwgeyAweDAwLCAweDQwLCAweGNkLCAweDA2LCAweDE1LCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAyLCAweDAwLCAweDAyLCAweDA5LCAweDAyLCAweDc0LCAweDAwLCAweDAxLAorICAweDAxLCAweDAwLCAweGEwLCAweDMyLCAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweDBlLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAxLAorICAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAyLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAzLCAweDAyLCAweDQwLAorICAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA0LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA1LCAweDAyLCAweDQwLCAweDAwfX0sCisgezB4MTk0NiwgNjQsIHsgMHgwMCwgMHgwNywgMHgwNSwgMHgwNiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwKKyAgMHg4MSwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MywgMHgwMiwKKyAgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NSwgMHgwMiwgMHg0MCwgMHgwMCwKKyAgMHgwMSwgMHgwNywgMHgwNSwgMHg4NiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMX19LAorIHsweDE5ODYsIDY0LCB7IDB4MDQsIDB4MDMsIDB4MDksIDB4MDQsIDB4NDgsIDB4MDMsIDB4NGIsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsCisgIDB4MDAsIDB4NmUsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjksIDB4MDAsIDB4NzYsCisgIDB4MDAsIDB4NjksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NjksIDB4MDAsIDB4NmYsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NjYsCisgIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NzksIDB4MDB9fSwKKyB7MHgxOWM2LCA2NCwgeyAweDczLCAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDYzLCAweDAwLCAweDJlLCAweDAwLCAweDM2LCAweDAzLCAweDRiLCAweDAwLCAweDY1LAorICAweDAwLCAweDc5LCAweDAwLCAweDczLCAweDAwLCAweDcwLCAweDAwLCAweDYxLCAweDAwLCAweDZlLCAweDAwLCAweDIwLCAweDAwLCAweDU1LCAweDAwLCAweDUzLAorICAweDAwLCAweDQyLCAweDAwLCAweDIwLCAweDAwLCAweDUzLCAweDAwLCAweDY1LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDYxLCAweDAwLCAweDZjLAorICAweDAwLCAweDIwLCAweDAwLCAweDQxLCAweDAwLCAweDY0LCAweDAwLCAweDYxLCAweDAwLCAweDcwLCAweDAwLCAweDc0LCAweDAwLCAweDY1LCAweDAwfX0sCisgezB4MWEwNiwgIDQsIHsgMHg3MiwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweGZmZmYsICAwLCB7MHgwMH19Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjh4Yl9mdy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhMjh4Yl9mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZmNhZDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2EyOHhiX2Z3LmgKQEAgLTAsMCArMSw0NDggQEAKKy8qIGtleXNwYW5fdXNhMjh4Yl9mdy5oCisKKwlUaGUgZmlybXdhcmUgY29udGFpbmVkIGhlcmVpbiBhcyBrZXlzcGFuX3VzYTI5eGJfZncuaCBpcworCisJCUNvcHlyaWdodCAoQykgMTk5OS0yMDAxCisJCUtleXNwYW4sIEEgZGl2aXNpb24gb2YgSW5ub1N5cyBJbmNvcnBvcmF0ZWQgKCJLZXlzcGFuIikKKwkJCisJYXMgYW4gdW5wdWJsaXNoZWQgd29yay4gVGhpcyBub3RpY2UgZG9lcyBub3QgaW1wbHkgdW5yZXN0cmljdGVkIG9yCisJcHVibGljIGFjY2VzcyB0byB0aGUgc291cmNlIGNvZGUgZnJvbSB3aGljaCB0aGlzIGZpcm13YXJlIGltYWdlIGlzCisJZGVyaXZlZC4gIEV4Y2VwdCBhcyBub3RlZCBiZWxvdyB0aGlzIGZpcm13YXJlIGltYWdlIG1heSBub3QgYmUgCisJcmVwcm9kdWNlZCwgdXNlZCwgc29sZCBvciB0cmFuc2ZlcnJlZCB0byBhbnkgdGhpcmQgcGFydHkgd2l0aG91dCAKKwlLZXlzcGFuJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworCVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSAKKwlpbWFnZSBhcyBwYXJ0IG9mIGEgTGludXggb3Igb3RoZXIgT3BlbiBTb3VyY2Ugb3BlcmF0aW5nIHN5c3RlbSBrZXJuZWwgCisJaW4gdGV4dCBvciBiaW5hcnkgZm9ybSBhcyByZXF1aXJlZC4gCisKKwlUaGlzIGZpcm13YXJlIG1heSBub3QgYmUgbW9kaWZpZWQgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aCAgCisJS2V5c3BhbiBoYXJkd2FyZS4gIERpc3RyaWJ1dGlvbiBhbmQvb3IgTW9kaWZpY2F0aW9uIG9mIHRoZSAKKwlrZXlzcGFuLmMgZHJpdmVyIHdoaWNoIGluY2x1ZGVzIHRoaXMgZmlybXdhcmUsIGluIHdob2xlIG9yIGluIAorCXBhcnQsIHJlcXVpcmVzIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBzdGF0ZW1lbnQuIgorCisqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGV6dXNiX2hleF9yZWNvcmQga2V5c3Bhbl91c2EyOHhiX2Zpcm13YXJlW10gPSB7CisgezB4MDAzMywgIDMsIHsgMHgwMiwgMHgwMCwgMHgyZH19LAorIHsweDAwMmQsICA0LCB7IDB4NTMsIDB4ZDgsIDB4ZWYsIDB4MzJ9fSwKKyB7MHgwMDQ2LCAxNiwgeyAweDMwLCAweDA5LCAweDE4LCAweDEyLCAweDEzLCAweDMzLCAweGVmLCAweGMzLCAweDk1LCAweDNjLCAweDQwLCAweDAzLCAweDAyLCAweDAwLCAweGQ4LCAweDkwfX0sCisgezB4MDA1NiwgMTYsIHsgMHg3ZiwgMHhiZiwgMHg3NCwgMHgwMSwgMHhmMCwgMHhjMiwgMHgwOSwgMHhjMiwgMHgwMCwgMHg4MCwgMHg3NywgMHgzMCwgMHgwMywgMHgzYiwgMHg5MCwgMHg3Zn19LAorIHsweDAwNjYsIDE2LCB7IDB4YzYsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4NmQsIDB4MTIsIDB4MTMsIDB4MzMsIDB4ZWYsIDB4YzMsIDB4OTQsIDB4NDAsIDB4NTAsIDB4NjQsIDB4OTAsIDB4N2V9fSwKKyB7MHgwMDc2LCAxNiwgeyAweDQwLCAweGUwLCAweDEzLCAweDkyLCAweDA5LCAweDkwLCAweDdmLCAweGM3LCAweGUwLCAweDE0LCAweGY1LCAweDE5LCAweDIwLCAweDAwLCAweDExLCAweDYwfX0sCisgezB4MDA4NiwgMTYsIHsgMHgwZiwgMHhmNSwgMHgwOCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg0MSwgMHg3NSwgMHgwYywgMHg3ZSwgMHg3NSwgMHgwZCwgMHg0MSwgMHgxMiwgMHgwYywgMHhjY319LAorIHsweDAwOTYsIDE2LCB7IDB4YzIsIDB4MDMsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4YzcsIDB4ZjAsIDB4ODAsIDB4MzksIDB4OTAsIDB4N2YsIDB4YzgsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MzJ9fSwKKyB7MHgwMGE2LCAxNiwgeyAweDEyLCAweDEzLCAweDMzLCAweGVmLCAweGMzLCAweDk0LCAweDQwLCAweDUwLCAweDI5LCAweDkwLCAweDdkLCAweGMwLCAweGUwLCAweDEzLCAweDkyLCAweDA5fX0sCisgezB4MDBiNiwgMTYsIHsgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHgxNCwgMHhmNSwgMHgxOSwgMHgyMCwgMHgwMCwgMHgxMSwgMHg2MCwgMHgwZiwgMHhmNSwgMHgwOCwgMHg3ZSwgMHg3ZH19LAorIHsweDAwYzYsIDE2LCB7IDB4N2YsIDB4YzEsIDB4NzUsIDB4MGMsIDB4N2QsIDB4NzUsIDB4MGQsIDB4YzEsIDB4MTIsIDB4MGMsIDB4Y2MsIDB4ZDIsIDB4MDMsIDB4ZTQsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwMGQ2LCAxNiwgeyAweGM5LCAweGYwLCAweDkwLCAweDdmLCAweGI2LCAweGUwLCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDAxLCAweDYwLCAweDEyLCAweDExLCAweGY1LCAweDhmfX0sCisgezB4MDBlNiwgMTYsIHsgMHgxOSwgMHgxMiwgMHgxMywgMHgzZiwgMHg4ZiwgMHgzNiwgMHhlNSwgMHgxOSwgMHhjMywgMHg5NSwgMHgzYSwgMHg1MCwgMHgwZiwgMHgxMiwgMHgxMywgMHgxYn19LAorIHsweDAwZjYsIDE2LCB7IDB4ZWYsIDB4MzAsIDB4ZTAsIDB4MDgsIDB4ZTUsIDB4MzYsIDB4MjAsIDB4ZTcsIDB4MDMsIDB4MzAsIDB4MGIsIDB4NWUsIDB4YzIsIDB4MGIsIDB4ZTUsIDB4MTl9fSwKKyB7MHgwMDM2LCAxMiwgeyAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyfX0sCisgezB4MDA0MywgIDMsIHsgMHgwMiwgMHgxMywgMHgwMH19LAorIHsweDAwMDMsIDE2LCB7IDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4OTB9fSwKKyB7MHgwMDEzLCAxNiwgeyAweDdmLCAweGM0LCAweGU0LCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA0LCAweGYwLCAweGQwLCAweDg2LCAweGQwfX0sCisgezB4MDAyMywgMTAsIHsgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn19LAorIHsweDAwMDAsICAzLCB7IDB4MDIsIDB4MGUsIDB4MTJ9fSwKKyB7MHgwMTA2LCA2NCwgeyAweDYwLCAweDU4LCAweGI0LCAweDgwLCAweDAzLCAweDQzLCAweDM2LCAweDAyLCAweGU1LCAweDM2LCAweDMwLCAweGU3LCAweDI2LCAweGU1LCAweDE5LCAweGQzLCAweDk0LAorICAweDIwLCAweDQwLCAweDAzLCAweDc1LCAweDE5LCAweDIwLCAweDg1LCAweDE5LCAweDA4LCAweDdlLCAweDdlLCAweDdmLCAweDgwLCAweDc1LCAweDBjLCAweDdlLAorICAweDc1LCAweDBkLCAweDgwLCAweGFmLCAweDM2LCAweDEyLCAweDBmLCAweDVkLCAweGU1LCAweDE5LCAweDI1LCAweGUwLCAweDkwLCAweDdmLCAweGI3LCAweGYwLAorICAweDgwLCAweDI3LCAweGU1LCAweDE5LCAweGQzLCAweDk0LCAweDNmLCAweDQwLCAweDAzLCAweDc1LCAweDE5LCAweDNmLCAweDg1LCAweDE5LCAweDA4fX0sCisgezB4MDE0NiwgNjQsIHsgMHg5MCwgMHg3ZSwgMHg4MCwgMHhlNSwgMHgzNiwgMHhmMCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg4MSwgMHg3NSwgMHgwYywgMHg3ZSwgMHg3NSwgMHgwZCwgMHg4MSwgMHgxMiwKKyAgMHgwYywgMHhmMSwgMHhlNSwgMHgxOSwgMHgwNCwgMHg5MCwgMHg3ZiwgMHhiNywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjZSwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNiwKKyAgMHgyMCwgMHgwNSwgMHgwMywgMHgwMiwgMHgwMywgMHhjMSwgMHhlNCwgMHhmNSwgMHgxOCwgMHg3NCwgMHg0MCwgMHgyNSwgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwKKyAgMHgzNCwgMHg3YywgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgxOCwgMHg3YywgMHgwMCwgMHg3YiwgMHgwMSwgMHg3YSwgMHg3ZSwgMHg3OX19LAorIHsweDAxODYsIDY0LCB7IDB4MDAsIDB4MjQsIDB4MDAsIDB4ZjksIDB4ZWMsIDB4MzQsIDB4N2UsIDB4ZmEsIDB4ZWYsIDB4MTIsIDB4MGUsIDB4ZTQsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsCisgIDB4MjAsIDB4ZDcsIDB4OTAsIDB4N2UsIDB4MDAsIDB4ZTAsIDB4NjAsIDB4NjgsIDB4OTAsIDB4N2UsIDB4MDMsIDB4ZTAsIDB4NjAsIDB4MjQsIDB4N2YsIDB4MDEsCisgIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTEsIDB4ZDAsIDB4N2YsIDB4MDMsIDB4N2QsIDB4Y2QsIDB4MTIsIDB4MTEsIDB4ZDAsIDB4NDMsIDB4NDYsIDB4ODAsIDB4OTAsCisgIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2UsIDB4MTN9fSwKKyB7MHgwMWM2LCA2NCwgeyAweGYwLCAweDgwLCAweDMwLCAweDkwLCAweDdlLCAweDAxLCAweGUwLCAweGZmLCAweDEyLCAweDEwLCAweDU0LCAweDkwLCAweDdlLCAweDAyLCAweGUwLCAweGZmLCAweDEyLAorICAweDEwLCAweDdhLCAweDdmLCAweDAxLCAweDkwLCAweDdlLCAweDExLCAweGUwLCAweGZkLCAweDEyLCAweDExLCAweGQwLCAweDdmLCAweDAzLCAweDdkLCAweDA3LAorICAweDEyLCAweDExLCAweGQwLCAweDQzLCAweDQ2LCAweDgwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LAorICAweDQ2LCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweGU1LCAweDQwLCAweDQ0LCAweDA2LCAweDkwLCAweGMwLCAweDAwfX0sCisgezB4MDIwNiwgNjQsIHsgMHhmMCwgMHg5MCwgMHg3ZSwgMHgwMywgMHhlMCwgMHg3MCwgMHgwNiwgMHg5MCwgMHg3ZSwgMHgxMywgMHhlMCwgMHg3MCwgMHgwOCwgMHhlNCwgMHg5MCwgMHg3ZSwgMHgxMywKKyAgMHhmMCwgMHg3NSwgMHgyNSwgMHhmZiwgMHg5MCwgMHg3ZSwgMHgwNSwgMHhlMCwgMHg2MCwgMHgxMiwgMHhhMywgMHhlMCwgMHg1NCwgMHgzZiwgMHhmNSwgMHg0NCwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgwNywgMHhlMCwKKyAgMHg2MCwgMHgyYiwgMHhhMywgMHhlMCwgMHg2MCwgMHgwNSwgMHg0MywgMHg0MiwgMHg4MCwgMHg4MCwgMHgwMywgMHg1MywgMHg0MiwgMHg3ZiwgMHg1M319LAorIHsweDAyNDYsIDY0LCB7IDB4NDIsIDB4ZmMsIDB4OTAsIDB4N2UsIDB4MDksIDB4ZTAsIDB4NjAsIDB4MTEsIDB4NDMsIDB4NDIsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTAsIDB4YzYsCisgIDB4OTAsIDB4N2UsIDB4MGIsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTAsIDB4ZWMsIDB4YWYsIDB4NDIsIDB4MTIsIDB4MTAsIDB4YTAsIDB4OTAsIDB4N2UsIDB4MDMsCisgIDB4ZTAsIDB4NjAsIDB4MDgsIDB4NTMsIDB4NDIsIDB4N2YsIDB4YWYsIDB4NDIsIDB4MTIsIDB4MTAsIDB4YTAsIDB4OTAsIDB4N2UsIDB4MGMsIDB4ZTAsIDB4NjAsCisgIDB4MTgsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDYsIDB4MDIsIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDYsIDB4ZmQsIDB4OTAsIDB4N2Z9fSwKKyB7MHgwMjg2LCA2NCwgeyAweDk4LCAweDc0LCAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ2LCAweGYwLCAweDkwLCAweDdlLCAweDBlLCAweGUwLCAweDYwLCAweDE4LCAweGEzLAorICAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQ2LCAweDAxLCAweDgwLCAweDAzLCAweDUzLCAweDQ2LCAweGZlLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LAorICAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ2LCAweGYwLCAweDkwLCAweDdlLCAweDEyLCAweGUwLCAweGY1LCAweDNhLCAweGEzLCAweGUwLCAweDEzLAorICAweDkyLCAweDBkLCAweGEzLCAweGUwLCAweGY1LCAweDNjLCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQ2LCAweDEwLCAweDgwLCAweDAzfX0sCisgezB4MDJjNiwgNjQsIHsgMHg1MywgMHg0NiwgMHhlZiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NiwgMHhmMCwgMHg5MCwgMHg3ZSwKKyAgMHgxNiwgMHhlMCwgMHg2MCwgMHgzMiwgMHg1MywgMHg0NCwgMHhiZiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwKKyAgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHgxMiwgMHgxMywgMHgwZiwgMHhlZiwgMHg1NCwKKyAgMHhmZSwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg1MywgMHgzZSwgMHhmZCwgMHhlNCwgMHhmZiwgMHhhZCwgMHgzZSwgMHgxMiwgMHgxMSwgMHhkMH19LAorIHsweDAzMDYsIDY0LCB7IDB4ZTQsIDB4ZjUsIDB4MmEsIDB4ZjUsIDB4MjksIDB4ZDIsIDB4MDcsIDB4OTAsIDB4N2UsIDB4MTcsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NDMsIDB4M2UsIDB4MDIsIDB4ZTQsCisgIDB4ZmYsIDB4YWQsIDB4M2UsIDB4MTIsIDB4MTEsIDB4ZDAsIDB4NzUsIDB4MjksIDB4MDEsIDB4ZDIsIDB4MDcsIDB4OTAsIDB4N2UsIDB4MTgsIDB4ZTAsIDB4NjAsCisgIDB4MTAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4ZTUsIDB4NDAsIDB4NDQsIDB4MDQsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZDIsCisgIDB4MDAsIDB4OTAsIDB4N2UsIDB4MTksIDB4ZTAsIDB4NjAsIDB4MTEsIDB4NDMsIDB4NDQsIDB4NDAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTN9fSwKKyB7MHgwMzQ2LCA2NCwgeyAweGYwLCAweGU1LCAweDQ0LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdlLCAweDFhLCAweGUwLCAweDYwLCAweDBmLCAweDUzLCAweDNlLAorICAweGZlLCAweGU0LCAweGZmLCAweGFkLCAweDNlLCAweDEyLCAweDExLCAweGQwLCAweDc1LCAweDJiLCAweDAxLCAweGQyLCAweDA3LCAweDkwLCAweDdlLCAweDFiLAorICAweGUwLCAweDYwLCAweDBmLCAweDQzLCAweDNlLCAweDAxLCAweGU0LCAweGZmLCAweGFkLCAweDNlLCAweDEyLCAweDExLCAweGQwLCAweGU0LCAweGY1LCAweDJiLAorICAweGQyLCAweDA3LCAweDkwLCAweDdlLCAweDFjLCAweGUwLCAweDYwLCAweDBlLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweGU1fX0sCisgezB4MDM4NiwgNjQsIHsgMHg0MCwgMHg0NCwgMHgwMiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgxZCwgMHhlMCwgMHg2MCwgMHgwMiwgMHhkMiwgMHgwYiwgMHg5MCwgMHg3ZSwKKyAgMHgxZSwgMHhlMCwgMHg2MCwgMHgwOCwgMHg3NSwgMHgyYywgMHgwMSwgMHhlNCwgMHhmNSwgMHgzOCwgMHhkMiwgMHgwNywgMHg5MCwgMHg3ZSwgMHgxZiwgMHhlMCwKKyAgMHg2MCwgMHgxMSwgMHg5MCwgMHg3ZiwgMHhkNywgMHg3NCwgMHgxMSwgMHhmMCwgMHg3NCwgMHgzMSwgMHhmMCwgMHg3NCwgMHgxNSwgMHhmMCwgMHg3NCwgMHgzNSwKKyAgMHhmMCwgMHhkMiwgMHgwMywgMHhjMiwgMHgwNSwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjZiwgMHhmMCwgMHgzMCwgMHgxYSwgMHg1NCwgMHhlNSwgMHgzOH19LAorIHsweDAzYzYsIDY0LCB7IDB4NjAsIDB4MDIsIDB4MTUsIDB4MzgsIDB4MjAsIDB4MTMsIDB4NGIsIDB4ZTUsIDB4MTMsIDB4ZDMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDQsIDB4MTUsIDB4MTMsIDB4ODAsCisgIDB4NDAsIDB4NzUsIDB4MTMsIDB4MGEsIDB4MzAsIDB4MWIsIDB4MDIsIDB4ZDIsIDB4MTMsIDB4MTIsIDB4MTMsIDB4MGYsIDB4ZWYsIDB4NTQsIDB4MDEsIDB4ZjUsCisgIDB4MTksIDB4NjUsIDB4MmEsIDB4NjAsIDB4MDUsIDB4ODUsIDB4MTksIDB4MmEsIDB4ZDIsIDB4MDcsIDB4MTIsIDB4MTMsIDB4NGIsIDB4ZWYsIDB4NTQsIDB4ODAsCisgIDB4NjQsIDB4ODAsIDB4ZjUsIDB4MTksIDB4NjUsIDB4MjYsIDB4NjAsIDB4MDUsIDB4ODUsIDB4MTksIDB4MjYsIDB4ZDIsIDB4MDcsIDB4MzAsIDB4MGR9fSwKKyB7MHgwNDA2LCA2NCwgeyAweDExLCAweDEyLCAweDEzLCAweDRiLCAweGVmLCAweDU0LCAweDEwLCAweGY1LCAweDE5LCAweDY1LCAweDI1LCAweDYwLCAweDA1LCAweDg1LCAweDE5LCAweDI1LCAweGQyLAorICAweDA3LCAweDIwLCAweDFiLCAweDAzLCAweDAyLCAweDA3LCAweGYwLCAweDMwLCAweDBhLCAweDE4LCAweDEyLCAweDEzLCAweDg3LCAweGVmLCAweGMzLCAweDk1LAorICAweDNkLCAweDQwLCAweDAzLCAweDAyLCAweDA0LCAweGIwLCAweDkwLCAweDdmLCAweGMxLCAweDc0LCAweDAxLCAweGYwLCAweGMyLCAweDBhLCAweGMyLCAweDAwLAorICAweDgwLCAweDc3LCAweDMwLCAweDA0LCAweDNiLCAweDkwLCAweDdmLCAweGNhLCAweGUwLCAweDIwLCAweGUxLCAweDZkLCAweDEyLCAweDEzLCAweDg3fX0sCisgezB4MDQ0NiwgNjQsIHsgMHhlZiwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHg2NCwgMHg5MCwgMHg3ZCwgMHg0MCwgMHhlMCwgMHgxMywgMHg5MiwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhjYiwgMHhlMCwKKyAgMHgxNCwgMHhmNSwgMHgxOSwgMHgyMCwgMHgwMCwgMHgxMSwgMHg2MCwgMHgwZiwgMHhmNSwgMHgwOCwgMHg3ZSwgMHg3ZCwgMHg3ZiwgMHg0MSwgMHg3NSwgMHgwYywKKyAgMHg3ZCwgMHg3NSwgMHgwZCwgMHg0MSwgMHgxMiwgMHgwZCwgMHgxNiwgMHhjMiwgMHgwNCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhjYiwgMHhmMCwgMHg4MCwgMHgzOSwKKyAgMHg5MCwgMHg3ZiwgMHhjYywgMHhlMCwgMHgyMCwgMHhlMSwgMHgzMiwgMHgxMiwgMHgxMywgMHg4NywgMHhlZiwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MH19LAorIHsweDA0ODYsIDY0LCB7IDB4MjksIDB4OTAsIDB4N2MsIDB4YzAsIDB4ZTAsIDB4MTMsIDB4OTIsIDB4MGEsIDB4OTAsIDB4N2YsIDB4Y2QsIDB4ZTAsIDB4MTQsIDB4ZjUsIDB4MTksIDB4MjAsIDB4MDAsCisgIDB4MTEsIDB4NjAsIDB4MGYsIDB4ZjUsIDB4MDgsIDB4N2UsIDB4N2MsIDB4N2YsIDB4YzEsIDB4NzUsIDB4MGMsIDB4N2MsIDB4NzUsIDB4MGQsIDB4YzEsIDB4MTIsCisgIDB4MGQsIDB4MTYsIDB4ZDIsIDB4MDQsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4Y2QsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YmEsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4MDMsCisgIDB4MDIsIDB4MDUsIDB4MzgsIDB4MTIsIDB4MTIsIDB4M2YsIDB4OGYsIDB4MTksIDB4MTIsIDB4MTMsIDB4OTMsIDB4OGYsIDB4MzcsIDB4ZTUsIDB4MTl9fSwKKyB7MHgwNGM2LCA2NCwgeyAweGMzLCAweDk1LCAweDNiLCAweDUwLCAweDBmLCAweDEyLCAweDEzLCAweDZmLCAweGVmLCAweDMwLCAweGUwLCAweDA4LCAweGU1LCAweDM3LCAweDIwLCAweGU3LCAweDAzLAorICAweDMwLCAweDBjLCAweDVlLCAweGMyLCAweDBjLCAweGU1LCAweDE5LCAweDYwLCAweDU4LCAweGI0LCAweDgwLCAweDAzLCAweDQzLCAweDM3LCAweDAyLCAweGU1LAorICAweDM3LCAweDMwLCAweGU3LCAweDI2LCAweGU1LCAweDE5LCAweGQzLCAweDk0LCAweDIwLCAweDQwLCAweDAzLCAweDc1LCAweDE5LCAweDIwLCAweDg1LCAweDE5LAorICAweDA4LCAweDdlLCAweDdkLCAweDdmLCAweDgwLCAweDc1LCAweDBjLCAweDdkLCAweDc1LCAweDBkLCAweDgwLCAweGFmLCAweDM3LCAweDEyLCAweDBmfX0sCisgezB4MDUwNiwgNjQsIHsgMHg5NiwgMHhlNSwgMHgxOSwgMHgyNSwgMHhlMCwgMHg5MCwgMHg3ZiwgMHhiYiwgMHhmMCwgMHg4MCwgMHgyNywgMHhlNSwgMHgxOSwgMHhkMywgMHg5NCwgMHgzZiwgMHg0MCwKKyAgMHgwMywgMHg3NSwgMHgxOSwgMHgzZiwgMHg4NSwgMHgxOSwgMHgwOCwgMHg5MCwgMHg3ZCwgMHg4MCwgMHhlNSwgMHgzNywgMHhmMCwgMHg3ZSwgMHg3ZCwgMHg3ZiwKKyAgMHg4MSwgMHg3NSwgMHgwYywgMHg3ZCwgMHg3NSwgMHgwZCwgMHg4MSwgMHgxMiwgMHgwZCwgMHgzYiwgMHhlNSwgMHgxOSwgMHgwNCwgMHg5MCwgMHg3ZiwgMHhiYiwKKyAgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkMCwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNiwgMHgyMCwgMHgwNiwgMHgwMywgMHgwMiwgMHgwNywgMHg5OSwgMHhlNH19LAorIHsweDA1NDYsIDY0LCB7IDB4ZjUsIDB4MTgsIDB4NzQsIDB4YzAsIDB4MjUsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTgsCisgIDB4N2MsIDB4MDAsIDB4N2IsIDB4MDEsIDB4N2EsIDB4N2UsIDB4NzksIDB4MjAsIDB4MjQsIDB4MjAsIDB4ZjksIDB4ZWMsIDB4MzQsIDB4N2UsIDB4ZmEsIDB4ZWYsCisgIDB4MTIsIDB4MGUsIDB4ZTQsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MjAsIDB4ZDcsIDB4OTAsIDB4N2UsIDB4MjAsIDB4ZTAsIDB4NjAsIDB4NjgsCisgIDB4OTAsIDB4N2UsIDB4MjMsIDB4ZTAsIDB4NjAsIDB4MjQsIDB4N2YsIDB4MDEsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTIsIDB4MWEsIDB4N2YsIDB4MDN9fSwKKyB7MHgwNTg2LCA2NCwgeyAweDdkLCAweGNkLCAweDEyLCAweDEyLCAweDFhLCAweDQzLCAweDQ3LCAweDgwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwLCAweGMwLCAweDAwLAorICAweGU1LCAweDQ3LCAweGYwLCAweGU0LCAweDkwLCAweDdlLCAweDMzLCAweGYwLCAweDgwLCAweDMwLCAweDkwLCAweDdlLCAweDIxLCAweGUwLCAweGZmLCAweDEyLAorICAweDExLCAweDM4LCAweDkwLCAweDdlLCAweDIyLCAweGUwLCAweGZmLCAweDEyLCAweDExLCAweDVlLCAweDdmLCAweDAxLCAweDkwLCAweDdlLCAweDMxLCAweGUwLAorICAweGZkLCAweDEyLCAweDEyLCAweDFhLCAweDdmLCAweDAzLCAweDdkLCAweDA3LCAweDEyLCAweDEyLCAweDFhLCAweDQzLCAweDQ3LCAweDgwLCAweDkwfX0sCisgezB4MDVjNiwgNjQsIHsgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYSwgMHhmMCwKKyAgMHhlNSwgMHg0MSwgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwgMHgyMywgMHhlMCwgMHg3MCwgMHgwNiwgMHg5MCwgMHg3ZSwKKyAgMHgzMywgMHhlMCwgMHg3MCwgMHgwOCwgMHhlNCwgMHg5MCwgMHg3ZSwgMHgzMywgMHhmMCwgMHg3NSwgMHgyZSwgMHhmZiwgMHg5MCwgMHg3ZSwgMHgyNSwgMHhlMCwKKyAgMHg2MCwgMHgxMiwgMHhhMywgMHhlMCwgMHg1NCwgMHgzZiwgMHhmNSwgMHg0NSwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MH19LAorIHsweDA2MDYsIDY0LCB7IDB4YzAsIDB4MDAsIDB4ZTUsIDB4NDUsIDB4ZjAsIDB4OTAsIDB4N2UsIDB4MjcsIDB4ZTAsIDB4NjAsIDB4MmIsIDB4YTMsIDB4ZTAsIDB4NjAsIDB4MDUsIDB4NDMsIDB4NDMsCisgIDB4ODAsIDB4ODAsIDB4MDMsIDB4NTMsIDB4NDMsIDB4N2YsIDB4NTMsIDB4NDMsIDB4ZmMsIDB4OTAsIDB4N2UsIDB4MjksIDB4ZTAsIDB4NjAsIDB4MTEsIDB4NDMsCisgIDB4NDMsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTEsIDB4ODQsIDB4OTAsIDB4N2UsIDB4MmIsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTEsIDB4YWEsCisgIDB4YWYsIDB4NDMsIDB4MTIsIDB4MTEsIDB4MTIsIDB4OTAsIDB4N2UsIDB4MjMsIDB4ZTAsIDB4NjAsIDB4MDgsIDB4NTMsIDB4NDMsIDB4N2YsIDB4YWZ9fSwKKyB7MHgwNjQ2LCA2NCwgeyAweDQzLCAweDEyLCAweDExLCAweDEyLCAweDkwLCAweDdlLCAweDJjLCAweGUwLCAweDYwLCAweDE4LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQ3LCAweDAyLAorICAweDgwLCAweDAzLCAweDUzLCAweDQ3LCAweGZkLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ3LAorICAweGYwLCAweDkwLCAweDdlLCAweDJlLCAweGUwLCAweDYwLCAweDE4LCAweGEzLCAweGUwLCAweDYwLCAweDA1LCAweDQzLCAweDQ3LCAweDAxLCAweDgwLCAweDAzLAorICAweDUzLCAweDQ3LCAweGZlLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGU1LCAweDQ3LCAweGYwfX0sCisgezB4MDY4NiwgNjQsIHsgMHg5MCwgMHg3ZSwgMHgzMiwgMHhlMCwgMHhmNSwgMHgzYiwgMHhhMywgMHhlMCwgMHgxMywgMHg5MiwgMHgwZSwgMHhhMywgMHhlMCwgMHhmNSwgMHgzZCwgMHhhMywgMHhlMCwKKyAgMHg2MCwgMHgwNSwgMHg0MywgMHg0NywgMHgxMCwgMHg4MCwgMHgwMywgMHg1MywgMHg0NywgMHhlZiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwKKyAgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNSwgMHg0NywgMHhmMCwgMHg5MCwgMHg3ZSwgMHgzNiwgMHhlMCwgMHg2MCwgMHgzMiwgMHg1MywgMHg0NSwgMHhiZiwgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3Zn19LAorIHsweDA2YzYsIDY0LCB7IDB4OTgsIDB4NzQsIDB4MDksIDB4ZjAsIDB4MTIsIDB4MTMsIDB4NjMsIDB4ZWYsIDB4NTQsIDB4ZmUsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4NTMsIDB4M2YsIDB4ZmQsCisgIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2YsIDB4MTIsIDB4MTIsIDB4MWEsIDB4ZTQsIDB4ZjUsIDB4MzMsIDB4ZjUsIDB4MzIsIDB4ZDIsIDB4MDgsIDB4OTAsIDB4N2UsCisgIDB4MzcsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4NDMsIDB4M2YsIDB4MDIsIDB4ZTQsIDB4ZmYsIDB4YWQsIDB4M2YsIDB4MTIsIDB4MTIsIDB4MWEsIDB4NzUsIDB4MzIsCisgIDB4MDEsIDB4ZDIsIDB4MDgsIDB4OTAsIDB4N2UsIDB4MzgsIDB4ZTAsIDB4NjAsIDB4MTAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGEsIDB4ZjB9fSwKKyB7MHgwNzA2LCA2NCwgeyAweGU1LCAweDQxLCAweDQ0LCAweDA0LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGQyLCAweDAwLCAweDkwLCAweDdlLCAweDM5LCAweGUwLCAweDYwLCAweDExLCAweDQzLAorICAweDQ1LCAweDQwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLAorICAweDkwLCAweDdlLCAweDNhLCAweGUwLCAweDYwLCAweDBmLCAweDUzLCAweDNmLCAweGZlLCAweGU0LCAweGZmLCAweGFkLCAweDNmLCAweDEyLCAweDEyLCAweDFhLAorICAweDc1LCAweDM0LCAweDAxLCAweGQyLCAweDA4LCAweDkwLCAweDdlLCAweDNiLCAweGUwLCAweDYwLCAweDBmLCAweDQzLCAweDNmLCAweDAxLCAweGU0fX0sCisgezB4MDc0NiwgNjQsIHsgMHhmZiwgMHhhZCwgMHgzZiwgMHgxMiwgMHgxMiwgMHgxYSwgMHhlNCwgMHhmNSwgMHgzNCwgMHhkMiwgMHgwOCwgMHg5MCwgMHg3ZSwgMHgzYywgMHhlMCwgMHg2MCwgMHgwZSwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYSwgMHhmMCwgMHhlNSwgMHg0MSwgMHg0NCwgMHgwMiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZSwKKyAgMHgzZCwgMHhlMCwgMHg2MCwgMHgwMiwgMHhkMiwgMHgwYywgMHg5MCwgMHg3ZSwgMHgzZSwgMHhlMCwgMHg2MCwgMHgwOCwgMHg3NSwgMHgzNSwgMHgwMSwgMHhlNCwKKyAgMHhmNSwgMHgzOSwgMHhkMiwgMHgwOCwgMHg5MCwgMHg3ZSwgMHgzZiwgMHhlMCwgMHg2MCwgMHgxMSwgMHg5MCwgMHg3ZiwgMHhkNywgMHg3NCwgMHgxM319LAorIHsweDA3ODYsIDY0LCB7IDB4ZjAsIDB4NzQsIDB4MzMsIDB4ZjAsIDB4NzQsIDB4MTYsIDB4ZjAsIDB4NzQsIDB4MzYsIDB4ZjAsIDB4ZDIsIDB4MDQsIDB4YzIsIDB4MDYsIDB4ZTQsIDB4OTAsIDB4N2YsCisgIDB4ZDEsIDB4ZjAsIDB4MzAsIDB4MWEsIDB4NTQsIDB4ZTUsIDB4MzksIDB4NjAsIDB4MDIsIDB4MTUsIDB4MzksIDB4MzAsIDB4MTMsIDB4NGIsIDB4ZTUsIDB4MTMsCisgIDB4ZDMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDQsIDB4MTUsIDB4MTMsIDB4ODAsIDB4NDAsIDB4NzUsIDB4MTMsIDB4MGEsIDB4MzAsIDB4MWIsIDB4MDIsIDB4YzIsCisgIDB4MTMsIDB4MTIsIDB4MTMsIDB4NjMsIDB4ZWYsIDB4NTQsIDB4MDEsIDB4ZjUsIDB4MTksIDB4NjUsIDB4MzMsIDB4NjAsIDB4MDUsIDB4ODUsIDB4MTl9fSwKKyB7MHgwN2M2LCA2NCwgeyAweDMzLCAweGQyLCAweDA4LCAweDEyLCAweDEzLCAweDlmLCAweGVmLCAweDU0LCAweDgwLCAweDY0LCAweDgwLCAweGY1LCAweDE5LCAweDY1LCAweDJmLCAweDYwLCAweDA1LAorICAweDg1LCAweDE5LCAweDJmLCAweGQyLCAweDA4LCAweDMwLCAweDBlLCAweDExLCAweDEyLCAweDEzLCAweDlmLCAweGVmLCAweDU0LCAweDEwLCAweGY1LCAweDE5LAorICAweDY1LCAweDJlLCAweDYwLCAweDA1LCAweDg1LCAweDE5LCAweDJlLCAweGQyLCAweDA4LCAweDMwLCAweDFhLCAweDJhLCAweDkwLCAweDdmLCAweGQyLCAweGUwLAorICAweDIwLCAweGUxLCAweDIzLCAweDkwLCAweDdiLCAweDQwLCAweGUwLCAweDYwLCAweDA5LCAweGUwLCAweGY1LCAweDE1LCAweDkwLCAweDdiLCAweDQyfX0sCisgezB4MDgwNiwgNjQsIHsgMHhlMCwgMHhmNSwgMHgxNiwgMHg5MCwgMHg3YiwgMHg0MSwgMHhlMCwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHhkNywgMHg3NCwgMHgxNywgMHhmMCwgMHg3NCwgMHgzNywKKyAgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhkMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjMiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwOSwgMHgyNCwKKyAgMHhlNSwgMHgwYSwgMHg3MCwgMHg0MCwgMHgzMCwgMHgwNywgMHgzOSwgMHhlNSwgMHgzOCwgMHg3MCwgMHgzNSwgMHhjMiwgMHgwNywgMHhmNSwgMHgxOCwgMHg3ZSwKKyAgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgyNCwgMHgyNSwgMHgxOCwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgwZSwgMHg5ZX19LAorIHsweDA4NDYsIDY0LCB7IDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjUsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MTgsIDB4ZTUsCisgIDB4MTgsIDB4YjQsIDB4MDksIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDksIDB4ZjAsIDB4NzUsIDB4MzgsIDB4MTAsIDB4ZTQsIDB4ZjUsIDB4MmMsCisgIDB4NzUsIDB4MGEsIDB4MDEsIDB4MjIsIDB4ZTUsIDB4MGEsIDB4NjQsIDB4MDEsIDB4NzAsIDB4NDAsIDB4MzAsIDB4MDgsIDB4MzksIDB4ZTUsIDB4MzksIDB4NzAsCisgIDB4MzUsIDB4YzIsIDB4MDgsIDB4ZjUsIDB4MTgsIDB4N2UsIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MmQsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZWV9fSwKKyB7MHgwODg2LCA2NCwgeyAweDM0LCAweDAwLCAweGZhLCAweDEyLCAweDBlLCAweDllLCAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LAorICAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDA5LCAweGRiLCAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDA5LCAweGYwLAorICAweDc1LCAweDM5LCAweDEwLCAweGU0LCAweGY1LCAweDM1LCAweDc1LCAweDBhLCAweDAyLCAweDIyLCAweGU1LCAweDBhLCAweDY0LCAweDAyLCAweDcwLCAweDM2LAorICAweDMwLCAweDE0LCAweDJmLCAweGMyLCAweDE0LCAweGY1LCAweDE4LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDBlLCAweDI1LCAweDE4fX0sCisgezB4MDhjNiwgNjQsIHsgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgwZSwgMHg5ZSwgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNSwgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwKKyAgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwNSwgMHhkYiwgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwKKyAgMHgwNSwgMHhmMCwgMHg3NSwgMHgwYSwgMHgwMywgMHgyMiwgMHhlNSwgMHgxNSwgMHg2MCwgMHgzMCwgMHgxNSwgMHgxNSwgMHhlNCwgMHhmNSwgMHgxOCwgMHg3ZSwKKyAgMHgwMCwgMHg3YiwgMHgwMCwgMHg3NCwgMHgxNCwgMHgyNSwgMHgxOCwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgwZSwgMHg5ZX19LAorIHsweDA5MDYsIDY0LCB7IDB4ZmYsIDB4NzQsIDB4ODAsIDB4MjUsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MTgsIDB4ZTUsCisgIDB4MTgsIDB4YjQsIDB4MDMsIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MGEsIDB4MjIsIDB4OTAsIDB4N2YsCisgIDB4ZTksIDB4ZTAsIDB4MTIsIDB4MGUsIDB4ZjYsIDB4MGEsIDB4MGMsIDB4MDAsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MGEsIDB4ZWMsIDB4MDMsIDB4MDksIDB4NDgsCisgIDB4MDYsIDB4MDksIDB4ZmYsIDB4MDgsIDB4MDksIDB4ZjksIDB4MDksIDB4MDksIDB4ZTEsIDB4MGEsIDB4MDksIDB4ZjAsIDB4MGIsIDB4MDAsIDB4MDB9fSwKKyB7MHgwOTQ2LCA2NCwgeyAweDBiLCAweDNiLCAweDkwLCAweDdmLCAweGViLCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE5LCAweDE0LCAweDYwLCAweDYxLCAweDI0LCAweDAyLCAweDYwLCAweDAzLAorICAweDAyLCAweDA5LCAweGQ3LCAweDc0LCAweDE5LCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweDc0LCAweDAwLCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLAorICAweDBiLCAweDQyLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDA0LCAweDdmLCAweDAyLCAweDgwLCAweDAyLCAweDdmLCAweDAzLCAweDc1LCAweDgyLAorICAweDgyLCAweDc1LCAweDgzLCAweDE5LCAweGVmLCAweGYwLCAweDc1LCAweDgyLCAweDdiLCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDc1LCAweDgyfX0sCisgezB4MDk4NiwgNjQsIHsgMHg3NCwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NSwgMHg4MiwgMHg2NiwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NSwgMHg4MiwgMHg1OCwgMHg3NSwgMHg4MywKKyAgMHgxOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHgwNCwgMHg3NSwgMHg4MiwgMHgxNywgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NCwgMHgxOSwKKyAgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHg3NCwgMHgxMiwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwYiwgMHg0MiwgMHg5MCwgMHg3ZiwgMHhlYSwKKyAgMHhlMCwgMHhmZiwgMHgxMiwgMHgwZiwgMHgxYywgMHhlYSwgMHg0OSwgMHg2MCwgMHgwZCwgMHhlYSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHhlOX19LAorIHsweDA5YzYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4NDIsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4NDIsCisgIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4NDIsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4MDksIDB4ZjAsCisgIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4NDIsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MDksIDB4MDIsCisgIDB4MGIsIDB4NDIsIDB4MTIsIDB4MGIsIDB4NGEsIDB4MDIsIDB4MGIsIDB4NDIsIDB4OTAsIDB4N2YsIDB4MDAsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTB9fSwKKyB7MHgwYTA2LCA2NCwgeyAweDdmLCAweGI1LCAweGYwLCAweDAyLCAweDBiLCAweDQyLCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweDdmLCAweDYwLCAweDI0LCAweDE0LCAweDYwLCAweDMxLAorICAweDI0LCAweDAyLCAweDcwLCAweDViLCAweGEyLCAweDEwLCAweGU0LCAweDMzLCAweGZmLCAweDI1LCAweGUwLCAweGZmLCAweGEyLCAweDE2LCAweGU0LCAweDMzLAorICAweDRmLCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGU0LCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDBiLAorICAweDQyLCAweGU0LCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyfX0sCisgezB4MGE0NiwgNjQsIHsgMHgwYiwgMHg0MiwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywKKyAgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmZCwgMHg5MCwKKyAgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwYiwgMHg0MiwgMHg5MCwKKyAgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwYiwgMHg0MiwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZX19LAorIHsweDBhODYsIDY0LCB7IDB4NjAsIDB4MWQsIDB4MjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MGIsIDB4NDIsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDUsIDB4YzIsCisgIDB4MTAsIDB4MDIsIDB4MGIsIDB4NDIsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MGIsIDB4NDIsIDB4OTAsIDB4N2YsCisgIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MzgsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsCisgIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODN9fSwKKyB7MHgwYWM2LCA2NCwgeyAweGU0LCAweGYwLCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweDU0LCAweDgwLCAweGZmLCAweDEzLCAweDEzLCAweDEzLCAweDU0LCAweDFmLCAweGZmLCAweGUwLCAweDU0LAorICAweDA3LCAweDJmLCAweDkwLCAweDdmLCAweGQ3LCAweGYwLCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDgwLCAweDVmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLAorICAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDU2LCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE4LCAweDI0LCAweDAyLCAweDcwLAorICAweDRhLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA0LCAweGQyLCAweDEwLCAweDgwLCAweDNmLCAweDkwLCAweDdmLCAweGI0fX0sCisgezB4MGIwNiwgNjQsIHsgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgzNiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwKKyAgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwKKyAgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwKKyAgMHgwMSwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMH19LAorIHsweDBiNDYsIDY0LCB7IDB4NDQsIDB4MDIsIDB4ZjAsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsIDB4MzAsIDB4ZjAsIDB4ZTQsIDB4OTAsCisgIDB4N2YsIDB4OTYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTUsIDB4NzQsIDB4YzAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4M2YsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTgsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4OGUsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4ZGUsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MjQsIDB4NzUsIDB4MTgsIDB4MDEsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MjQsIDB4MjUsIDB4MTgsIDB4Zjl9fSwKKyB7MHgwYjg2LCA2NCwgeyAweGU0LCAweDM0LCAweDAwLCAweGZhLCAweGU0LCAweDEyLCAweDBlLCAweGU0LCAweDA1LCAweDE4LCAweGU1LCAweDE4LCAweGI0LCAweDA5LCAweGVhLCAweDc1LCAweDNhLAorICAweDAxLCAweGU0LCAweGY1LCAweDM4LCAweGY1LCAweDEzLCAweGY1LCAweDM2LCAweGMyLCAweDA3LCAweGMyLCAweDBiLCAweGMyLCAweDA1LCAweGMyLCAweDAwLAorICAweGMyLCAweDA5LCAweGMyLCAweDEzLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDc1LCAweDQ0LCAweDAzLCAweDkwLCAweGMwLCAweDAwLAorICAweDc0LCAweDAzLCAweGYwLCAweDdmLCAweDBjLCAweGU0LCAweGZkLCAweDEyLCAweDExLCAweGQwLCAweDdmLCAweDEwLCAweDhmLCAweDQyLCAweDEyfX0sCisgezB4MGJjNiwgNjQsIHsgMHgxMCwgMHhhMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMiwgMHhmMCwgMHg3ZiwgMHgwMSwgMHg4ZiwgMHg0MCwgMHhlZiwgMHg0NCwgMHgwNiwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNCwgMHhmMCwgMHg3NSwgMHg0NiwgMHg4MCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHg4MCwKKyAgMHhmMCwgMHgwZiwgMHhlNCwgMHhmZCwgMHgxMiwgMHgxMSwgMHhkMCwgMHhlNCwgMHhmZiwgMHg3ZSwgMHhhMywgMHhhZCwgMHgwNiwgMHg4ZCwgMHgzZSwgMHgxMiwKKyAgMHgxMSwgMHhkMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNCwgMHhmMCwgMHg3ZiwgMHgwNX19LAorIHsweDBjMDYsIDY0LCB7IDB4N2QsIDB4N2YsIDB4MTIsIDB4MTEsIDB4ZDAsIDB4N2YsIDB4MDEsIDB4MTIsIDB4MTIsIDB4ODksIDB4N2YsIDB4MDMsIDB4N2QsIDB4MDcsIDB4MTIsIDB4MTEsIDB4ZDAsCisgIDB4N2YsIDB4MTMsIDB4N2QsIDB4MDksIDB4MTIsIDB4MTEsIDB4ZDAsIDB4MjAsIDB4MWIsIDB4MDMsIDB4MDIsIDB4MGMsIDB4YzksIDB4NzUsIDB4MmQsIDB4MDEsCisgIDB4NzUsIDB4MTgsIDB4MDEsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MmQsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZTQsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4ZTQsIDB4MTIsCisgIDB4MGUsIDB4ZTQsIDB4MDUsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4YjQsIDB4MDksIDB4ZWEsIDB4NzUsIDB4M2IsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4Mzl9fSwKKyB7MHgwYzQ2LCA2NCwgeyAweGY1LCAweDEzLCAweGY1LCAweDM3LCAweGMyLCAweDA4LCAweGMyLCAweDBjLCAweGMyLCAweDA2LCAweGMyLCAweDAwLCAweGMyLCAweDBhLCAweGMyLCAweDEzLCAweDkwLAorICAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDc1LCAweDQ1LCAweDAzLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweDAzLCAweGYwLCAweDdmLCAweDBjLAorICAweGU0LCAweGZkLCAweDEyLCAweDEyLCAweDFhLCAweDdmLCAweDEwLCAweDhmLCAweDQzLCAweDEyLCAweDExLCAweDEyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDBhLCAweGYwLCAweDdmLCAweDAxLCAweDhmLCAweDQxLCAweGVmLCAweDQ0LCAweDA2LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDdmfX0sCisgezB4MGM4NiwgNjQsIHsgMHg5OCwgMHg3NCwgMHgwYywgMHhmMCwgMHg3NSwgMHg0NywgMHg4MCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHg4MCwgMHhmMCwgMHgwZiwgMHhlNCwgMHhmZCwgMHgxMiwKKyAgMHgxMiwgMHgxYSwgMHhlNCwgMHhmZiwgMHg3ZSwgMHhhMywgMHhhZCwgMHgwNiwgMHg4ZCwgMHgzZiwgMHgxMiwgMHgxMiwgMHgxYSwgMHg5MCwgMHg3ZiwgMHg5OCwKKyAgMHg3NCwgMHgwOSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNCwgMHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZCwgMHg3ZiwgMHgxMiwgMHgxMiwgMHgxYSwgMHg3ZiwKKyAgMHgwMSwgMHgxMiwgMHgxMiwgMHhhYSwgMHg3ZiwgMHgwMywgMHg3ZCwgMHgwNywgMHgxMiwgMHgxMiwgMHgxYSwgMHg3ZiwgMHgxMywgMHg3ZCwgMHgwOX19LAorIHsweDBjYzYsIDY0LCB7IDB4MTIsIDB4MTIsIDB4MWEsIDB4ZDIsIDB4MTIsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4YWYsIDB4MDgsIDB4ZTUsIDB4MGQsIDB4ZjUsCisgIDB4ODIsIDB4ZTUsIDB4MGMsIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4MDUsIDB4ODYsIDB4ZTAsIDB4YTMsCisgIDB4MDUsIDB4ODYsIDB4ZjAsIDB4MDUsIDB4ODYsIDB4ZGYsIDB4ZjcsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTAsIDB4ZjAsCisgIDB4YWYsIDB4MDgsIDB4ZTUsIDB4MGQsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MGMsIDB4ZjUsIDB4ODMsIDB4YzIsIDB4YWYsIDB4MDUsIDB4ODYsIDB4OTB9fSwKKyB7MHgwZDA2LCA2NCwgeyAweGMwLCAweDAwLCAweGUwLCAweDA1LCAweDg2LCAweGYwLCAweGEzLCAweDA1LCAweDg2LCAweGRmLCAweGY3LCAweDA1LCAweDg2LCAweGQyLCAweGFmLCAweDIyLCAweDkwLAorICAweDdmLCAweDk4LCAweDc0LCAweDA4LCAweGYwLCAweGFmLCAweDA4LCAweGU1LCAweDBkLCAweGY1LCAweDgyLCAweGU1LCAweDBjLCAweGY1LCAweDgzLCAweGMyLAorICAweGFmLCAweDA1LCAweDg2LCAweDkwLCAweGMwLCAweDAwLCAweDA1LCAweDg2LCAweGUwLCAweGEzLCAweDA1LCAweDg2LCAweGYwLCAweDA1LCAweDg2LCAweGRmLAorICAweGY3LCAweGQyLCAweGFmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDA4LCAweGYwLCAweGFmLCAweDA4LCAweGU1LCAweDBkLCAweGY1fX0sCisgezB4MGQ0NiwgNjQsIHsgMHg4MiwgMHhlNSwgMHgwYywgMHhmNSwgMHg4MywgMHhjMiwgMHhhZiwgMHgwNSwgMHg4NiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHgwNSwgMHg4NiwgMHhmMCwgMHhhMywKKyAgMHgwNSwgMHg4NiwgMHhkZiwgMHhmNywgMHgwNSwgMHg4NiwgMHhkMiwgMHhhZiwgMHgyMiwgMHg3NCwgMHgwMCwgMHhmNSwgMHg4NiwgMHg5MCwgMHhmZCwgMHhhNSwKKyAgMHg3YywgMHgwNSwgMHhhMywgMHhlNSwgMHg4MiwgMHg0NSwgMHg4MywgMHg3MCwgMHhmOSwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg0NCwgMHg4MCwKKyAgMHhmMCwgMHg0MywgMHg4NywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHhkMiwgMHgxOSwgMHg5MCwgMHg3ZiwgMHg5Mn19LAorIHsweDBkODYsIDY0LCB7IDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWUsIDB4ZTAsIDB4ZmYsIDB4ZDMsIDB4OTIsIDB4MTAsIDB4ZTQsIDB4MzMsIDB4ZmUsIDB4ZWYsIDB4NGUsCisgIDB4ZjAsIDB4ZDIsIDB4ZTgsIDB4NDMsIDB4ZDgsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZGUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4ZjAsCisgIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YTksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWEsIDB4ZjAsIDB4NTMsIDB4OTEsCisgIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWYsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWUsIDB4ZTAsIDB4NDQsIDB4MGQsIDB4ZjB9fSwKKyB7MHgwZGM2LCA2NCwgeyAweGQyLCAweGFmLCAweGQyLCAweDFhLCAweDEyLCAweDEyLCAweDY0LCAweGMyLCAweDExLCAweGU0LCAweGY1LCAweDBiLCAweGY1LCAweDEzLCAweGMyLCAweDE3LCAweGMyLAorICAweDEyLCAweDkwLCAweDdmLCAweGExLCAweDA0LCAweGYwLCAweDkwLCAweDdmLCAweGQ4LCAweGUwLCAweDY1LCAweDE3LCAweDYwLCAweDEwLCAweDMwLCAweDEyLAorICAweDA1LCAweGQyLCAweDFhLCAweDEyLCAweDAwLCAweDQ2LCAweDkwLCAweDdmLCAweGQ4LCAweGUwLCAweGY1LCAweDE3LCAweDgwLCAweDA4LCAweDMwLCAweDEyLAorICAweDA1LCAweGMyLCAweDFhLCAweDEyLCAweDAwLCAweDQ2LCAweDMwLCAweDExLCAweDA3LCAweGMyLCAweDExLCAweDEyLCAweDA5LCAweDI1LCAweDgwfX0sCisgezB4MGUwNiwgNjQsIHsgMHhkNiwgMHgzMCwgMHgxOCwgMHhkMywgMHhjMiwgMHgxOCwgMHgxMiwgMHgxMywgMHhhYiwgMHg4MCwgMHhjYywgMHgyMiwgMHg3OCwgMHg3ZiwgMHhlNCwgMHhmNiwgMHhkOCwKKyAgMHhmZCwgMHg3NSwgMHg4MSwgMHg0NywgMHgwMiwgMHgwZSwgMHg1OSwgMHgwMiwgMHgwZCwgMHg4MSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywKKyAgMHhhMywgMHg0MCwgMHgwMywgMHhmNiwgMHg4MCwgMHgwMSwgMHhmMiwgMHgwOCwgMHhkZiwgMHhmNCwgMHg4MCwgMHgyOSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwKKyAgMHg1NCwgMHgwNywgMHgyNCwgMHgwYywgMHhjOCwgMHhjMywgMHgzMywgMHhjNCwgMHg1NCwgMHgwZiwgMHg0NCwgMHgyMCwgMHhjOCwgMHg4MywgMHg0MH19LAorIHsweDBlNDYsIDY0LCB7IDB4MDQsIDB4ZjQsIDB4NTYsIDB4ODAsIDB4MDEsIDB4NDYsIDB4ZjYsIDB4ZGYsIDB4ZTQsIDB4ODAsIDB4MGIsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsCisgIDB4NDAsIDB4ODAsIDB4OTAsIDB4MTIsIDB4Y2IsIDB4ZTQsIDB4N2UsIDB4MDEsIDB4OTMsIDB4NjAsIDB4YmMsIDB4YTMsIDB4ZmYsIDB4NTQsIDB4M2YsIDB4MzAsCisgIDB4ZTUsIDB4MDksIDB4NTQsIDB4MWYsIDB4ZmUsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NjAsIDB4MDEsIDB4MGUsIDB4Y2YsIDB4NTQsIDB4YzAsIDB4MjUsIDB4ZTAsCisgIDB4NjAsIDB4YTgsIDB4NDAsIDB4YjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZmEsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTN9fSwKKyB7MHgwZTg2LCA2NCwgeyAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNhLCAweGM1LCAweDgzLCAweGNhLCAweGYwLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNhLCAweGM1LCAweDgzLAorICAweGNhLCAweGRmLCAweGU5LCAweGRlLCAweGU3LCAweDgwLCAweGJlLCAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweDIyLAorICAweDUwLCAweDAyLCAweGU3LCAweDIyLCAweGJiLCAweGZlLCAweDAyLCAweGUzLCAweDIyLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweDIyLAorICAweGJiLCAweDAxLCAweDBjLCAweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGUwLCAweDIyfX0sCisgezB4MGVjNiwgNjQsIHsgMHg1MCwgMHgwNiwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgMHhlNiwgMHgyMiwgMHhiYiwgMHhmZSwgMHgwNiwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgMHhlMiwgMHgyMiwKKyAgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMiwgMHhiYiwgMHgwMSwgMHgwNiwKKyAgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhmMCwgMHgyMiwgMHg1MCwgMHgwMiwgMHhmNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMSwgMHhmMywgMHgyMiwgMHhkMCwKKyAgMHg4MywgMHhkMCwgMHg4MiwgMHhmOCwgMHhlNCwgMHg5MywgMHg3MCwgMHgxMiwgMHg3NCwgMHgwMSwgMHg5MywgMHg3MCwgMHgwZCwgMHhhMywgMHhhM319LAorIHsweDBmMDYsIDY0LCB7IDB4OTMsIDB4ZjgsIDB4NzQsIDB4MDEsIDB4OTMsIDB4ZjUsIDB4ODIsIDB4ODgsIDB4ODMsIDB4ZTQsIDB4NzMsIDB4NzQsIDB4MDIsIDB4OTMsIDB4NjgsIDB4NjAsIDB4ZWYsCisgIDB4YTMsIDB4YTMsIDB4YTMsIDB4ODAsIDB4ZGYsIDB4OGYsIDB4MTgsIDB4ZTQsIDB4ZjUsIDB4MTksIDB4NzUsIDB4MWEsIDB4ZmYsIDB4NzUsIDB4MWIsIDB4MTksCisgIDB4NzUsIDB4MWMsIDB4ODYsIDB4YWIsIDB4MWEsIDB4YWEsIDB4MWIsIDB4YTksIDB4MWMsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4MGUsIDB4YjcsIDB4YjQsCisgIDB4MDMsIDB4MWQsIDB4YWYsIDB4MTksIDB4MDUsIDB4MTksIDB4ZWYsIDB4YjUsIDB4MTgsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MGUsIDB4OWUsIDB4N2V9fSwKKyB7MHgwZjQ2LCA2NCwgeyAweDAwLCAweDI5LCAweGZmLCAweGVlLCAweDNhLCAweGE5LCAweDA3LCAweDc1LCAweDFhLCAweGZmLCAweGY1LCAweDFiLCAweDg5LCAweDFjLCAweDgwLCAweGQ0LCAweDdiLAorICAweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDAwLCAweDIyLCAweDhmLCAweDFhLCAweDA1LCAweDBkLCAweGU1LCAweDBkLCAweGFlLCAweDBjLCAweDcwLCAweDAyLAorICAweDA1LCAweDBjLCAweDE0LCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGU1LCAweDFhLCAweGYwLCAweDEyLCAweDAwLCAweDM2LCAweDA1LCAweDBkLCAweGU1LAorICAweDBkLCAweGFjLCAweDBjLCAweDcwLCAweDAyLCAweDA1LCAweDBjLCAweDE0LCAweGY1LCAweDgyLCAweDhjLCAweDgzLCAweGVmLCAweGYwLCAweDE1fX0sCisgezB4MGY4NiwgNjQsIHsgMHgwOCwgMHhlNSwgMHgwOCwgMHg2MCwgMHgwYSwgMHgxMiwgMHgxMywgMHgzZiwgMHg4ZiwgMHgxYSwgMHhlZiwgMHg0MiwgMHgzNiwgMHg4MCwgMHhjYSwgMHgyMiwgMHg4ZiwKKyAgMHgxYSwgMHgwNSwgMHgwZCwgMHhlNSwgMHgwZCwgMHhhZSwgMHgwYywgMHg3MCwgMHgwMiwgMHgwNSwgMHgwYywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywKKyAgMHhlNSwgMHgxYSwgMHhmMCwgMHgxMiwgMHgxMywgMHg1NywgMHgwNSwgMHgwZCwgMHhlNSwgMHgwZCwgMHhhYywgMHgwYywgMHg3MCwgMHgwMiwgMHgwNSwgMHgwYywKKyAgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHgxNSwgMHgwOCwgMHhlNSwgMHgwOCwgMHg2MCwgMHgwYSwgMHgxMiwgMHgxM319LAorIHsweDBmYzYsIDY0LCB7IDB4OTMsIDB4OGYsIDB4MWEsIDB4ZWYsIDB4NDIsIDB4MzcsIDB4ODAsIDB4Y2EsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsCisgIDB4NzQsIDB4MzAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsCisgIDB4MjcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MjAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4MDcsIDB4ZjAsIDB4ZTQsIDB4OTAsCisgIDB4N2YsIDB4OTQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWQsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTcsIDB4ZjAsIDB4MjJ9fSwKKyB7MHgxMDA2LCA2NCwgeyAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGQyLCAweDExLAorICAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDAxLCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLAorICAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LAorICAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGQyLCAweDE4LCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA4fX0sCisgezB4MTA0NiwgNjQsIHsgMHhmMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHg5MCwgMHg3ZiwgMHg5OCwKKyAgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMCwgMHhmMCwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMH19LAorIHsweDEwODYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsCisgIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4OTAsCisgIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsCisgIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NDQsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjJ9fSwKKyB7MHgxMGM2LCA2NCwgeyAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE0LAorICAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweGU1LCAweDQ0LCAweDU0LCAweDdmLAorICAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLAorICAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE2LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4fX0sCisgezB4MTEwNiwgNjQsIHsgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwKKyAgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwKKyAgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3Zn19LAorIHsweDExNDYsIDY0LCB7IDB4OTgsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsCisgIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MDksIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2Z9fSwKKyB7MHgxMTg2LCA2NCwgeyAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBjLCAweGYwLCAweDkwLAorICAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweGU1LCAweDQ1LCAweDU0LCAweDdmLCAweDkwLCAweGMwLAorICAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBiLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLAorICAweDdmLCAweDk4LCAweDc0LCAweDBlLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBifX0sCisgezB4MTFjNiwgNjQsIHsgMHhmMCwgMHhlNSwgMHg0NSwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxMywgMHhmMCwgMHhlNSwKKyAgMHg0NCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZCwgMHhmMCwgMHgyMiwgMHgxMiwgMHgxMywKKyAgMHgyNywgMHg4ZiwgMHgxYSwgMHgxMiwgMHgxMywgMHgyNywgMHg4ZiwgMHgxYiwgMHhlNSwgMHgxYSwgMHg2NSwgMHgxYiwgMHg2MCwgMHgxMiwgMHgxMn19LAorIHsweDEyMDYsIDY0LCB7IDB4MTMsIDB4MjcsIDB4OGYsIDB4MWEsIDB4ZTUsIDB4MWEsIDB4NjUsIDB4MWIsIDB4NjAsIDB4MDcsIDB4MTIsIDB4MTMsIDB4MjcsIDB4OGYsIDB4MWIsIDB4ODAsIDB4ZTgsCisgIDB4YWYsIDB4MWEsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4NDUsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGYsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsCisgIDB4MGQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MTIsIDB4MTMsIDB4N2IsIDB4OGYsIDB4MWEsIDB4MTIsIDB4MTN9fSwKKyB7MHgxMjQ2LCA2NCwgeyAweDdiLCAweDhmLCAweDFiLCAweGU1LCAweDFhLCAweDY1LCAweDFiLCAweDYwLCAweDEyLCAweDEyLCAweDEzLCAweDdiLCAweDhmLCAweDFhLCAweGU1LCAweDFhLCAweDY1LAorICAweDFiLCAweDYwLCAweDA3LCAweDEyLCAweDEzLCAweDdiLCAweDhmLCAweDFiLCAweDgwLCAweGU4LCAweGFmLCAweDFhLCAweDIyLCAweDkwLCAweDdmLCAweGQ2LAorICAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweGUwLCAweDQ0LCAweDA4LCAweGYwLCAweDMwLCAweDFhLCAweDA0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDdmLAorICAweGY0LCAweDdlLCAweDAxLCAweDEyLCAweDEyLCAweGU3LCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweGUwLCAweDQ0fX0sCisgezB4MTI4NiwgNjQsIHsgMHgwNCwgMHhmMCwgMHgyMiwgMHhhZSwgMHgwNywgMHhlNCwgMHhmZiwgMHhlNSwgMHgzZSwgMHg1NCwgMHg3ZiwgMHhmZCwgMHgxMiwgMHgxMSwgMHhkMCwgMHg5MCwgMHg3ZiwKKyAgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZSwgMHhmMCwgMHhlNCwgMHhlNSwgMHgzZSwgMHg0NCwgMHg4MCwgMHhmZCwgMHgxMiwKKyAgMHgxMSwgMHhkMCwgMHgyMiwgMHhhZSwgMHgwNywgMHhlNCwgMHhmZiwgMHhlNSwgMHgzZiwgMHg1NCwgMHg3ZiwgMHhmZCwgMHgxMiwgMHgxMiwgMHgxYSwgMHg5MCwKKyAgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZSwgMHhmMCwgMHhlNCwgMHhlNSwgMHgzZiwgMHg0NCwgMHg4MH19LAorIHsweDEyYzYsIDY0LCB7IDB4ZmQsIDB4MTIsIDB4MTIsIDB4MWEsIDB4MjIsIDB4MDUsIDB4MGUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MTQsIDB4MDMsIDB4MDAsIDB4MDAsCisgIDB4YzEsIDB4MTEsIDB4YzEsIDB4MTgsIDB4YzEsIDB4OTUsIDB4YzEsIDB4MTAsIDB4YzEsIDB4MTYsIDB4MDEsIDB4MGEsIDB4MDAsIDB4YzEsIDB4OWIsIDB4MDAsCisgIDB4OGUsIDB4MTgsIDB4OGYsIDB4MTksIDB4ZTUsIDB4MTksIDB4MTUsIDB4MTksIDB4YWUsIDB4MTgsIDB4NzAsIDB4MDIsIDB4MTUsIDB4MTgsIDB4NGUsIDB4NjAsCisgIDB4MDUsIDB4MTIsIDB4MGQsIDB4NjAsIDB4ODAsIDB4ZWUsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTAsIDB4MDYsIDB4MDAsIDB4MDIsIDB4MTN9fSwKKyB7MHgxMzA2LCA2NCwgeyAweDA0LCAweDAwLCAweDAyLCAweDAwLCAweDAzLCAweDAwLCAweDAyLCAweDEwLCAweDJkLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDkwLCAweGMwLAorICAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEyLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDEzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LAorICAweDE0LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDE1LCAweGYwLCAweDkwfX0sCisgezB4MTM0NiwgNjQsIHsgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxNiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwOCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwKKyAgMHgwOSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYSwgMHhmMCwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZn19LAorIHsweDEzODYsIDY0LCB7IDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsCisgIDB4MGQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MGUsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MGYsIDB4Y2YsIDB4MTIsIDB4MGQsIDB4NzEsIDB4MTIsIDB4MGIsIDB4NGEsIDB4MjIsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxM2M2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTQwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE0NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNDg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTRjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNTQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTU4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE1YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNjA2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTY0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE2ODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNmM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTcwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE3NDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxNzg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTdjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4MDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxODQ2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTg4NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDE4YzYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZmYsIDB4MDB9fSwKKyB7MHgxOTA2LCA2NCwgeyAweDAwLCAweDQwLCAweGNkLCAweDA2LCAweDEwLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAyLCAweDAwLCAweDAyLCAweDA5LCAweDAyLCAweDc0LCAweDAwLCAweDAxLAorICAweDAxLCAweDAwLCAweGEwLCAweDMyLCAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweDBlLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAxLAorICAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAyLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAzLCAweDAyLCAweDQwLAorICAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA0LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA1LCAweDAyLCAweDQwLCAweDAwfX0sCisgezB4MTk0NiwgNjQsIHsgMHgwMCwgMHgwNywgMHgwNSwgMHgwNiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwKKyAgMHg4MSwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHg4MywgMHgwMiwKKyAgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NSwgMHgwMiwgMHg0MCwgMHgwMCwKKyAgMHgwMSwgMHgwNywgMHgwNSwgMHg4NiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMX19LAorIHsweDE5ODYsIDY0LCB7IDB4MDQsIDB4MDMsIDB4MDksIDB4MDQsIDB4NDgsIDB4MDMsIDB4NGIsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsCisgIDB4MDAsIDB4NmUsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjksIDB4MDAsIDB4NzYsCisgIDB4MDAsIDB4NjksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NjksIDB4MDAsIDB4NmYsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NjYsCisgIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NzksIDB4MDB9fSwKKyB7MHgxOWM2LCA2NCwgeyAweDczLCAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDYzLCAweDAwLCAweDJlLCAweDAwLCAweDM2LCAweDAzLCAweDRiLCAweDAwLCAweDY1LAorICAweDAwLCAweDc5LCAweDAwLCAweDczLCAweDAwLCAweDcwLCAweDAwLCAweDYxLCAweDAwLCAweDZlLCAweDAwLCAweDIwLCAweDAwLCAweDU1LCAweDAwLCAweDUzLAorICAweDAwLCAweDQyLCAweDAwLCAweDIwLCAweDAwLCAweDUzLCAweDAwLCAweDY1LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDYxLCAweDAwLCAweDZjLAorICAweDAwLCAweDIwLCAweDAwLCAweDQxLCAweDAwLCAweDY0LCAweDAwLCAweDYxLCAweDAwLCAweDcwLCAweDAwLCAweDc0LCAweDAwLCAweDY1LCAweDAwfX0sCisgezB4MWEwNiwgIDQsIHsgMHg3MiwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweGZmZmYsICAwLCB7MHgwMH19Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhNDltc2cuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTQ5bXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYzYjJkZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTQ5bXNnLmgKQEAgLTAsMCArMSwyODIgQEAKKy8qCisJdXNhNDltc2cuaAorCisJQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgSW5ub1N5cyBJbmNvcnBvcmF0ZWQuICBBbGwgUmlnaHRzIFJlc2VydmVkCisJVGhpcyBmaWxlIGlzIGF2YWlsYWJsZSB1bmRlciBhIEJTRC1zdHlsZSBjb3B5cmlnaHQKKworCUtleXNwYW4gVVNCIEFzeW5jIE1lc3NhZ2UgRm9ybWF0cyBmb3IgdGhlIFVTQTQ5VworCisJUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisJbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorCW1ldDoKKworCTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGlzIGxpY2VuY2UgdGV4dAorICAgCXdpdGhvdXQgbW9kaWZpY2F0aW9uLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKyAgIAlkaXNjbGFpbWVyLiAgVGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgbm90aWNlIG11c3QgYXBwZWFyIGltbWVkaWF0ZWx5IGF0CisgICAJdGhlIGJlZ2lubmluZyBvZiBhbGwgc291cmNlIGZpbGVzOgorCisgICAgICAgIAlDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBJbm5vU3lzIEluY29ycG9yYXRlZC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKworICAgICAgICAJVGhpcyBmaWxlIGlzIGF2YWlsYWJsZSB1bmRlciBhIEJTRC1zdHlsZSBjb3B5cmlnaHQKKworCTIuIFRoZSBuYW1lIG9mIElubm9TeXMgSW5jb3Jwb3JhdGVkIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAgIAlwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KKyAgIAlwZXJtaXNzaW9uLgorCisJVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBJTk5PU1lTIENPUlAuIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKwlJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisJT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKwlOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisJSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisJKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisJU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKwlDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKwlMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisJT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorCVNVQ0ggREFNQUdFLiAgICAKKworCTR0aCByZXZpc2lvbjogVVNBNDlXIHZlcnNpb24KKworCUJ1ZmZlciBmb3JtYXRzIGZvciBSWC9UWCBkYXRhIG1lc3NhZ2VzIGFyZSBub3QgZGVmaW5lZCBieQorCWEgc3RydWN0dXJlLCBidXQgYXJlIGRlc2NyaWJlZCBoZXJlOgorCisJVVNCIE9VVCAoaG9zdCAtPiBVU0F4eCwgdHJhbnNtaXQpIG1lc3NhZ2VzIGNvbnRhaW4gYSAKKwlSRVFVRVNUX0FDSyBpbmRpY2F0b3IgKHNldCB0byAweGZmIHRvIHJlcXVlc3QgYW4gQUNLIGF0IHRoZSAKKwljb21wbGV0aW9uIG9mIHRyYW5zbWl0OyAweDAwIG90aGVyd2lzZSksIGZvbGxvd2VkIGJ5IGRhdGE6CisKKwkJUlFTVEFDSyBEQVQgREFUIERBVCAuLi4KKworCXdpdGggYSB0b3RhbCBkYXRhIGxlbmd0aCBvZiA2My4KKworCVVTQiBJTiAoVVNBeHggLT4gaG9zdCwgcmVjZWl2ZSkgbWVzc2FnZXMgYmVnaW4gd2l0aCBhIHN0YXR1cworCWJ5dGUgaW4gd2hpY2ggdGhlIDB4ODAgYml0IGlzIGVpdGhlcjoKKwkJCQkgICAJCisJCShhKQkweDgwIGJpdCBjbGVhcgorCQkJaW5kaWNhdGVzIHRoYXQgdGhlIGJ5dGVzIGZvbGxvd2luZyBpdCBhcmUgYWxsIGRhdGEKKwkJCWJ5dGVzOgorCisJCQkJU1RBVCBEQVRBIERBVEEgREFUQSBEQVRBIERBVEEgLi4uCisKKwkJCWZvciBhIHRvdGFsIG9mIHVwIHRvIDYzIERBVEEgYnl0ZXMsCisKKwlvcjoKKworCQkoYikJMHg4MCBiaXQgc2V0CisJCQlpbmRpYXRlcyB0aGF0IHRoZSBieXRlcyBmb2xsb3dpbmcgYWx0ZXJuYXRlIGRhdGEgYW5kCisJCQlzdGF0dXMgYnl0ZXM6CisKKwkJCQlTVEFUIERBVEEgU1RBVCBEQVRBIFNUQVQgREFUQSBTVEFUIERBVEEgLi4uCisKKwkJCWZvciBhIHRvdGFsIG9mIHVwIHRvIDMyIERBVEEgYnl0ZXMuCisKKwlUaGUgdmFsaWQgYml0cyBpbiB0aGUgU1RBVCBieXRlcyBhcmU6CisKKwkJT1ZFUlJVTgkweDAyCisJCVBBUklUWQkweDA0CisJCUZSQU1JTkcJMHgwOAorCQlCUkVBSwkweDEwCisKKwlOb3RlczoKKwkKKwkoMSkgVGhlIE9WRVJSVU4gYml0IGNhbiBhcHBlYXIgaW4gZWl0aGVyIChhKSBvciAoYikgZm9ybWF0CisJCW1lc3NhZ2VzLCBidXQgdGhlIGJ1dCB0aGUgUEFSSVRZL0ZSQU1JTkcvQlJFQUsgYml0cworCQlvbmx5IGFwcGVhciBpbiAoYikgZm9ybWF0IG1lc3NhZ2VzLgorCSgyKSBGb3IgdGhlIGhvc3QgdG8gZGV0ZXJtaW5lIHRoZSBleGFjdCBwb2ludCBhdCB3aGljaCB0aGUKKwkJb3ZlcnJ1biBvY2N1cnJlZCAodG8gaWRlbnRpZnkgdGhlIHBvaW50IGluIHRoZSBkYXRhCisJCXN0cmVhbSBhdCB3aGljaCB0aGUgZGF0YSB3YXMgbG9zdCksIGl0IG5lZWRzIHRvIGNvdW50CisJCTEyOCBjaGFyYWN0ZXJzLCBzdGFydGluZyBhdCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZQorCQltZXNzYWdlIGluIHdoaWNoIE9WRVJSVU4gd2FzIHJlcG9ydGVkOyB0aGUgbG9zdCBjaGFyYWN0ZXIocykKKwkJd291bGQgaGF2ZSBiZWVuIHJlY2VpdmVkIGJldHdlZW4gdGhlIDEyOHRoIGFuZCAxMjl0aAorCQljaGFyYWN0ZXJzLgorCSgzKQlBbiBSWCBkYXRhIG1lc3NhZ2UgaW4gd2hpY2ggdGhlIGZpcnN0IGJ5dGUgaGFzIDB4ODAgY2xlYXIKKwkJc2VydmVzIGFzIGEgImJyZWFrIG9mZiIgaW5kaWNhdG9yLgorCSg0KQlhIGNvbnRyb2wgbWVzc2FnZSBzcGVjaWZ5aW5nIGRpc2FibGVQb3J0IHdpbGwgYmUgYW5zd2VyZWQKKwkJd2l0aCBhIHN0YXR1cyBtZXNzYWdlLCBidXQgbm8gZnVydGhlciBzdGF0dXMgd2lsbCBiZSBzZW50CisJCXVudGlsIGEgY29udHJvbCBtZXNzYWdlcyB3aXRoIGVuYWJsZVBvcnQgaXMgc2VudAorCisJcmV2aXNpb24gaGlzdG9yeToKKworCTE5OTlmZWIxMAlhZGQgcmVwb3J0SHNraWFDaGFuZ2VzIHRvIGFsbG93IHVzIHRvIGlnbm9yZSB0aGVtCisJMTk5OWZlYjEwCWFkZCB0eEFja1RocmVzaG9sZCBmb3IgZmFzdCtsb29zZSB0aHJvdWdocHV0IGVuaGFuY2VtZW50CisJMTk5OW1hcjMwCWJlZWYgdXAgc3VwcG9ydCBmb3IgUlggZXJyb3IgcmVwb3J0aW5nCisJMTk5OWFwcjE0CWFkZCByZXNldERhdGFUb2dnbGUgdG8gY29udHJvbCBtZXNzYWdlCisJMjAwMGphbjA0CW1lcmdlIHdpdGggdXNhMTdtc2cuaAorCTIwMDBtYXIwOAljbG9uZSBmcm9tIHVzYTI2bXNnLmggLT4gdXNhNDltc2cuaAorCTIwMDBtYXIwOQljaGFuZ2UgdG8gc3VwcG9ydCA0IHBvcnRzCisJMjAwMG1heTAzCWNoYW5nZSBleHRlcm5hbCBjbG9ja2luZyB0byBtYXRjaCBVU0EtNDlXIGhhcmR3YXJlCisJMjAwMGp1bjAxCWFkZCBleHRlbmRlZCBCU0Qtc3R5bGUgY29weXJpZ2h0IHRleHQKKwkyMDAxanVsMDUJY2hhbmdlIG1lc3NhZ2UgZm9ybWF0IHRvIGltcHJvdmUgT1ZFUlJVTiBjYXNlCisqLworCisjaWZuZGVmCV9fVVNBNDlNU0dfXworI2RlZmluZQlfX1VTQTQ5TVNHX18KKworCisvKgorCUhvc3QtPmRldmljZSBtZXNzYWdlcyBzZW50IG9uIHRoZSBnbG9iYWwgY29udHJvbCBlbmRwb2ludDoKKworCXBvcnROdW1iZXIJbWVzc2FnZQorCS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkwLDEsMiwzCQlwb3J0Q29udHJvbE1lc3NhZ2UKKwkweDgwCQlnbG9iYWxDb250cm9sTWVzc2FnZQorKi8KKworc3RydWN0IGtleXNwYW5fdXNhNDlfcG9ydENvbnRyb2xNZXNzYWdlCit7CisJLyoKKwkJMC4JMC8xLzIvMyAJcG9ydCBjb250cm9sIG1lc3NhZ2UgZm9sbG93cworCQkJMHg4MCBzZXQJbm9uLXBvcnQgY29udHJvbCBtZXNzYWdlIGZvbGxvd3MKKwkqLworCXU4CXBvcnROdW1iZXIsCisKKwkvKgorCQl0aGVyZSBhcmUgdGhyZWUgdHlwZXMgb2YgImNvbW1hbmRzIiBzZW50IGluIHRoZSBjb250cm9sIG1lc3NhZ2U6CisKKwkJMS4JY29uZmlndXJhdGlvbiBjaGFuZ2VzIHdoaWNoIG11c3QgYmUgcmVxdWVzdGVkIGJ5IHNldHRpbmcKKwkJCXRoZSBjb3JyZXNwb25kaW5nICJzZXQiIGZsYWcgKGFuZCBzaG91bGQgb25seSBiZSByZXF1ZXN0ZWQKKwkJCXdoZW4gbmVjZXNzYXJ5LCB0byByZWR1Y2Ugb3ZlcmhlYWQgb24gdGhlIFVTQTI2KToKKwkqLworCQlzZXRDbG9ja2luZywJLy8gaG9zdCByZXF1ZXN0cyBiYXVkIHJhdGUgYmUgc2V0CisJCWJhdWRMbywJCQkvLyBob3N0IGRvZXMgYmF1ZCBkaXZpc29yIGNhbGN1bGF0aW9uCisJCWJhdWRIaSwJCQkvLyBiYXVkSGkgaXMgb25seSB1c2VkIGZvciBmaXJzdCBwb3J0IChnaXZlcyBsb3dlciByYXRlcykKKwkJcHJlc2NhbGVyLAkJLy8gc3BlY2lmaWVkIGFzIE4vODsgdmFsdWVzIDgtZmYgYXJlIHZhbGlkCisJCQkJCQkvLyBtdXN0IGJlIHNldCBhbnkgdGltZSBpbnRlcm5hbCBiYXVkIHJhdGUgaXMgc2V0OworCQl0eENsb2NraW5nLAkJLy8gMD1pbnRlcm5hbCwgMT1leHRlcm5hbC9EU1IKKwkJcnhDbG9ja2luZywJCS8vIDA9aW50ZXJuYWwsIDE9ZXh0ZXJuYWwvRFNSCisKKwkJc2V0TGNyLAkJCS8vIGhvc3QgcmVxdWVzdHMgbGNyIGJlIHNldAorCQlsY3IsCQkJLy8gdXNlIFBBUklUWSwgU1RPUEJJVFMsIERBVEFCSVRTIGJlbG93CisKKwkJc2V0Rmxvd0NvbnRyb2wsCS8vIGhvc3QgcmVxdWVzdHMgZmxvdyBjb250cm9sIGJlIHNldAorCQljdHNGbG93Q29udHJvbCwJLy8gMT11c2UgQ1RTIGZsb3cgY29udHJvbCwgMD1kb24ndAorCQl4b25GbG93Q29udHJvbCwJLy8gMT11c2UgWE9OL1hPRkYgZmxvdyBjb250cm9sLCAwPWRvbid0CisJCXhvbkNoYXIsCQkvLyBzcGVjaWZpZWQgaW4gY3VycmVudCBjaGFyYWN0ZXIgZm9ybWF0CisJCXhvZmZDaGFyLAkJLy8gc3BlY2lmaWVkIGluIGN1cnJlbnQgY2hhcmFjdGVyIGZvcm1hdAorCisJCXNldFJ0cywJCQkvLyBob3N0IHJlcXVlc3RzIFJUUyBvdXRwdXQgYmUgc2V0CisJCXJ0cywJCQkvLyAxPWFjdGl2ZSwgMD1pbmFjdGl2ZQorCisJCXNldER0ciwJCQkvLyBob3N0IHJlcXVlc3RzIERUUiBvdXRwdXQgYmUgc2V0CisJCWR0cjsJCQkvLyAxPW9uLCAwPW9mZgorCisKKwkvKgorCQkzLgljb25maWd1cmF0aW9uIGRhdGEgd2hpY2ggaXMgc2ltcGx5IHVzZWQgYXMgaXMgKG5vIG92ZXJoZWFkLAorCQkJYnV0IG11c3QgYmUgc3BlY2lmaWVkIGNvcnJlY3RseSBpbiBldmVyeSBob3N0IG1lc3NhZ2UpLgorCSovCisJdTgJZm9yd2FyZGluZ0xlbmd0aCwgIC8vIGZvcndhcmQgd2hlbiB0aGlzIG51bWJlciBvZiBjaGFycyBhdmFpbGFibGUKKwkJZHNyRmxvd0NvbnRyb2wsCS8vIDE9dXNlIERTUiBmbG93IGNvbnRyb2wsIDA9ZG9uJ3QKKwkJdHhBY2tUaHJlc2hvbGQsCS8vIDA9bm90IGFsbG93ZWQsIDE9bm9ybWFsLCAyLTI1NSBkZWxpdmVyIEFDSyBmYXN0ZXIKKwkJbG9vcGJhY2tNb2RlOwkvLyAwPW5vIGxvb3BiYWNrLCAxPWxvb3BiYWNrIGVuYWJsZWQKKworCS8qCisJCTQuCWNvbW1hbmRzIHdoaWNoIGFyZSBmbGFncyBvbmx5OyB0aGVzZSBhcmUgcHJvY2Vzc2VkIGluIG9yZGVyCisJCQkoc28gdGhhdCwgZS5nLiwgaWYgYm90aCBfdHhPbiBhbmQgX3R4T2ZmIGZsYWdzIGFyZSBzZXQsIHRoZQorCQkJcG9ydCBlbmRzIGluIGEgVFhfT0ZGIHN0YXRlKTsgYW55IG5vbi16ZXJvIHZhbHVlIGlzIHJlc3BlY3RlZAorCSovCisJdTgJX3R4T24sCQkJLy8gZW5hYmxlIHRyYW5zbWl0dGluZyAoYW5kIGNvbnRpbnVlIGlmIHRoZXJlJ3MgZGF0YSkKKwkJX3R4T2ZmLAkJCS8vIHN0b3AgdHJhbnNtaXR0aW5nCisJCXR4Rmx1c2gsCQkvLyB0b3NzIG91dGJvdW5kIGRhdGEKKwkJdHhCcmVhaywJCS8vIHR1cm4gb24gYnJlYWsgKGNsZWFyZWQgYnkgX3R4T24pCisJCXJ4T24sCQkJLy8gdHVybiBvbiByZWNlaXZlcgorCQlyeE9mZiwJCQkvLyB0dXJuIG9mZiByZWNlaXZlcgorCQlyeEZsdXNoLAkJLy8gdG9zcyBpbmJvdW5kIGRhdGEKKwkJcnhGb3J3YXJkLAkJLy8gZm9yd2FyZCBhbGwgaW5ib3VuZCBkYXRhLCBOT1cgKGFzIGlmIGZ3ZExlbj09MSkKKwkJcmV0dXJuU3RhdHVzLAkvLyByZXR1cm4gY3VycmVudCBzdGF0dXMgKGV2ZW4gaWYgaXQgaGFzbid0IGNoYW5nZWQpCisJCXJlc2V0RGF0YVRvZ2dsZSwvLyByZXNldCBkYXRhIHRvZ2dsZSBzdGF0ZSB0byBEQVRBMAorCQllbmFibGVQb3J0LAkJLy8gc3RhcnQgc2VydmljaW5nIHBvcnQgKG1vdmUgZGF0YSwgY2hlY2sgc3RhdHVzKQorCQlkaXNhYmxlUG9ydDsJLy8gc3RvcCBzZXJ2aWNpbmcgcG9ydCAoZG9lcyBpbXBsaWNpdCB0eC9yeCBmbHVzaC9vZmYpCisJCit9OworCisvLyBkZWZpbmVzIGZvciBiaXRzIGluIGxjcgorI2RlZmluZQlVU0FfREFUQUJJVFNfNQkJMHgwMAorI2RlZmluZQlVU0FfREFUQUJJVFNfNgkJMHgwMQorI2RlZmluZQlVU0FfREFUQUJJVFNfNwkJMHgwMgorI2RlZmluZQlVU0FfREFUQUJJVFNfOAkJMHgwMworI2RlZmluZQlTVE9QQklUU181Njc4XzEJCTB4MDAJLy8gMSBzdG9wIGJpdCBmb3IgYWxsIGJ5dGUgc2l6ZXMKKyNkZWZpbmUJU1RPUEJJVFNfNV8xcDUJCTB4MDQJLy8gMS41IHN0b3AgYml0cyBmb3IgNS1iaXQgYnl0ZQorI2RlZmluZQlTVE9QQklUU182NzhfMgkJMHgwNAkvLyAyIHN0b3AgYml0cyBmb3IgNi83LzgtYml0IGJ5dGUKKyNkZWZpbmUJVVNBX1BBUklUWV9OT05FCQkweDAwCisjZGVmaW5lCVVTQV9QQVJJVFlfT0RECQkweDA4CisjZGVmaW5lCVVTQV9QQVJJVFlfRVZFTgkJMHgxOAorI2RlZmluZQlQQVJJVFlfMQkJCTB4MjgKKyNkZWZpbmUJUEFSSVRZXzAJCQkweDM4CisKKy8qCisJZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24sIHN0YXR1cyBtZXNzYWdlcyBhcmUgcmV0dXJuZWQgCisJdG8gdGhlIGhvc3Qgd2hlbmV2ZXIgdGhlIGJvYXJkIGRldGVjdHMgY2hhbmdlcy4gIEluIHNvbWUKKwljaXJjdW1zdGFuY2VzIChlLmcuIFdpbmRvd3MpLCBzdGF0dXMgbWVzc2FnZXMgZnJvbSB0aGUKKwlkZXZpY2UgY2F1c2UgcHJvYmxlbXM7IHRvIHNodXQgdGhlbSBvZmYsIHRoZSBob3N0IGlzc3VlcworCWEgY29udHJvbCBtZXNzYWdlIHdpdGggdGhlIGRpc2FibGVTdGF0dXNNZXNzYWdlcyBmbGFncworCXNldCAodG8gYW55IG5vbi16ZXJvIHZhbHVlKS4gIFRoZSBkZXZpY2Ugd2lsbCByZXNwb25kIHRvCisJdGhpcyBtZXNzYWdlLCBhbmQgdGhlbiBzdXBwcmVzcyBmdXJ0aGVyIHN0YXR1cyBtZXNzYWdlczsKKwlpdCB3aWxsIHJlc3VtZSBzZW5kaW5nIHN0YXR1cyBtZXNzYWdlcyBhbnkgdGltZSB0aGUgaG9zdAorCXNlbmRzIGFueSBjb250cm9sIG1lc3NhZ2UgKGVpdGhlciBnbG9iYWwgb3IgcG9ydC1zcGVjaWZpYykuCisqLworCitzdHJ1Y3Qga2V5c3Bhbl91c2E0OV9nbG9iYWxDb250cm9sTWVzc2FnZQoreworCXU4CXBvcnROdW1iZXIsCQkJLy8gMHg4MAorCQlzZW5kR2xvYmFsU3RhdHVzLAkvLyAxLzI9bnVtYmVyIG9mIHN0YXR1cyByZXNwb25zZXMgcmVxdWVzdGVkCisJCXJlc2V0U3RhdHVzVG9nZ2xlLAkvLyAxPXJlc2V0IGdsb2JhbCBzdGF0dXMgdG9nZ2xlCisJCXJlc2V0U3RhdHVzQ291bnQsCS8vIGEgY3ljbGluZyB2YWx1ZQorCQlyZW1vdGVXYWtldXBFbmFibGUsCQkvLyAweDEwPVAxLCAweDIwPVAyLCAweDQwPVAzLCAweDgwPVA0CisJCWRpc2FibGVTdGF0dXNNZXNzYWdlczsJLy8gMT1zZW5kIG5vIHN0YXR1cyB1bnRpbCBob3N0IHRhbGtzCit9OworCisvKgorCURldmljZS0+aG9zdCBtZXNzYWdlcyBzZW5kIG9uIHRoZSBnbG9iYWwgc3RhdHVzIGVuZHBvaW50CisKKwlwb3J0TnVtYmVyCQkJbWVzc2FnZQorCS0tLS0tLS0tLS0JCQktLS0tLS0tLS0tLS0tLS0tLS0tLQorCTB4MDAsMHgwMSwweDAyLDB4MDMJcG9ydFN0YXR1c01lc3NhZ2UKKwkweDgwCQkJCWdsb2JhbFN0YXR1c01lc3NhZ2UKKwkweDgxCQkJCWdsb2JhbERlYnVnTWVzc2FnZQorKi8KKworc3RydWN0IGtleXNwYW5fdXNhNDlfcG9ydFN0YXR1c01lc3NhZ2UJLy8gb25lIGZvciBlYWNoIHBvcnQKK3sKKwl1OAlwb3J0TnVtYmVyLAkJLy8gMCwxLDIsMworCQljdHMsCQkJLy8gcmVwb3J0cyBDVFMgcGluCisJCWRjZCwJCQkvLyByZXBvcnRzIERDRCBwaW4KKwkJZHNyLAkJCS8vIHJlcG9ydHMgRFNSIHBpbgorCQlyaSwJCQkJLy8gcmVwb3J0cyBSSSBwaW4KKwkJX3R4T2ZmLAkJCS8vIHRyYW5zbWl0IGhhcyBiZWVuIGRpc2FibGVkIChieSBob3N0KQorCQlfdHhYb2ZmLAkJLy8gdHJhbnNtaXQgaXMgaW4gWE9GRiBzdGF0ZSAoZWl0aGVyIGhvc3Qgb3IgUlggWE9GRikKKwkJcnhFbmFibGVkLAkJLy8gYXMgY29uZmlndXJlZCBieSByeE9uL3J4T2ZmIDE9b24sIDA9b2ZmCisJCWNvbnRyb2xSZXNwb25zZSwvLyAxPWEgY29udHJvbCBtZXNzYWdlIGhhcyBiZWVuIHByb2Nlc3NlZAorCQl0eEFjaywJCQkvLyBBQ0sgKGRhdGEgVFggY29tcGxldGUpCisJCXJzMjMydmFsaWQ7CQkvLyBSUy0yMzIgc2lnbmFsIHZhbGlkCit9OworCisvLyBiaXRzIGluIFJYIGRhdGEgbWVzc2FnZSB3aGVuIFNUQVQgYnl0ZSBpcyBpbmNsdWRlZAorI2RlZmluZQlSWEVSUk9SX09WRVJSVU4JMHgwMgorI2RlZmluZQlSWEVSUk9SX1BBUklUWQkweDA0CisjZGVmaW5lCVJYRVJST1JfRlJBTUlORwkweDA4CisjZGVmaW5lCVJYRVJST1JfQlJFQUsJMHgxMAorCitzdHJ1Y3Qga2V5c3Bhbl91c2E0OV9nbG9iYWxTdGF0dXNNZXNzYWdlCit7CisJdTgJcG9ydE51bWJlciwJCQkvLyAweDgwPWdsb2JhbFN0YXR1c01lc3NhZ2UKKwkJc2VuZEdsb2JhbFN0YXR1cywJLy8gZnJvbSByZXF1ZXN0LCBkZWNyZW1lbnRlZAorCQlyZXNldFN0YXR1c0NvdW50OwkvLyBhcyBpbiByZXF1ZXN0Cit9OworCitzdHJ1Y3Qga2V5c3Bhbl91c2E0OV9nbG9iYWxEZWJ1Z01lc3NhZ2UKK3sKKwl1OAlwb3J0TnVtYmVyLAkJCS8vIDB4ODE9Z2xvYmFsRGVidWdNZXNzYWdlCisJCW4sCQkJCQkvLyB0eXBpY2FsbHkgYSBjb3VudC9zdGF0dXMgYnl0ZQorCQliOwkJCQkJLy8gdHlwaWNhbGx5IGEgZGF0YSBieXRlCit9OworCisvLyBpZTogdGhlIG1heGltdW0gbGVuZ3RoIG9mIGFuIEVaVVNCIGVuZHBvaW50IGJ1ZmZlcgorI2RlZmluZQlNQVhfREFUQV9MRU4JCQk2NAorCisvLyB1cGRhdGUgc3RhdHVzIGFwcHJveC4gNjAgdGltZXMgYSBzZWNvbmQgKDE2LjY2NjYgbXMpCisjZGVmaW5lCVNUQVRVU19VUERBVEVfSU5URVJWQUwJMTYKKworLy8gc3RhdHVzIHJhdGlvbmluZyB0dW5pbmcgdmFsdWUgKGVhY2ggcG9ydCBnZXRzIGNoZWNrZWQgZWFjaCBuIG1zKQorI2RlZmluZQlTVEFUVVNfUkFUSU9OCTEwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhNDl3X2Z3LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl91c2E0OXdfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzI0ZGFjZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTQ5d19mdy5oCkBAIC0wLDAgKzEsNDY0IEBACisvKiBrZXlzcGFuX3VzYTQ5d19mdy5oCisKKwlUaGUgZmlybXdhcmUgY29udGFpbmVkIGhlcmVpbiBhcyBrZXlzcGFuX3VzYTQ5d19mdy5oIGlzCisKKwkJQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEKKwkJS2V5c3BhbiwgQSBkaXZpc2lvbiBvZiBJbm5vU3lzIEluY29ycG9yYXRlZCAoIktleXNwYW4iKQorCQkKKwlhcyBhbiB1bnB1Ymxpc2hlZCB3b3JrLiBUaGlzIG5vdGljZSBkb2VzIG5vdCBpbXBseSB1bnJlc3RyaWN0ZWQgb3IKKwlwdWJsaWMgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBmcm9tIHdoaWNoIHRoaXMgZmlybXdhcmUgaW1hZ2UgaXMKKwlkZXJpdmVkLiAgRXhjZXB0IGFzIG5vdGVkIGJlbG93IHRoaXMgZmlybXdhcmUgaW1hZ2UgbWF5IG5vdCBiZSAKKwlyZXByb2R1Y2VkLCB1c2VkLCBzb2xkIG9yIHRyYW5zZmVycmVkIHRvIGFueSB0aGlyZCBwYXJ0eSB3aXRob3V0IAorCUtleXNwYW4ncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisJUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIAorCWltYWdlIGFzIHBhcnQgb2YgYSBMaW51eCBvciBvdGhlciBPcGVuIFNvdXJjZSBvcGVyYXRpbmcgc3lzdGVtIGtlcm5lbCAKKwlpbiB0ZXh0IG9yIGJpbmFyeSBmb3JtIGFzIHJlcXVpcmVkLiAKKworCVRoaXMgZmlybXdhcmUgbWF5IG5vdCBiZSBtb2RpZmllZCBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoICAKKwlLZXlzcGFuIGhhcmR3YXJlLiAgRGlzdHJpYnV0aW9uIGFuZC9vciBNb2RpZmljYXRpb24gb2YgdGhlIAorCWtleXNwYW4uYyBkcml2ZXIgd2hpY2ggaW5jbHVkZXMgdGhpcyBmaXJtd2FyZSwgaW4gd2hvbGUgb3IgaW4gCisJcGFydCwgcmVxdWlyZXMgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHN0YXRlbWVudC4iCisKKyovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXp1c2JfaGV4X3JlY29yZCBrZXlzcGFuX3VzYTQ5d19maXJtd2FyZVtdID0geworIHsweDAwMzMsICAzLCB7IDB4MDIsIDB4MTgsIDB4ZmJ9fSwKKyB7MHgwMDM2LCAxMiwgeyAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyfX0sCisgezB4MDA0NiwgMTYsIHsgMHhlNCwgMHhmZiwgMHg3NCwgMHg0MCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZSwgMHhlNSwgMHgxNX19LAorIHsweDAwNTYsIDE2LCB7IDB4MjQsIDB4MDQsIDB4ZmQsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZmEsIDB4YTksIDB4MDUsIDB4N2IsIDB4MDEsIDB4ZWYsIDB4N2MsIDB4MDAsIDB4MjksIDB4Zjl9fSwKKyB7MHgwMDY2LCAxNiwgeyAweGVjLCAweDNhLCAweGZhLCAweGVlLCAweDEyLCAweDExLCAweGYxLCAweDBmLCAweGJmLCAweDIyLCAweGQ3LCAweGU1LCAweDE1LCAweDI0LCAweDA1LCAweGY1fX0sCisgezB4MDA3NiwgMTYsIHsgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg3MCwgMHgwMywgMHgwMiwgMHgwMSwgMHgzNCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgwOX19LAorIHsweDAwODYsIDE2LCB7IDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NzAsIDB4MGUsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MGEsIDB4ZjUsIDB4ODJ9fSwKKyB7MHgwMDk2LCAxNiwgeyAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDE4LCAweDdmLCAweDAxLCAweGU0LCAweGZkLCAweDEyLCAweDE2LCAweDQ3LCAweGU1fX0sCisgezB4MDBhNiwgMTYsIHsgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhjZiwgMHhmMCwgMHg4MCwgMHg0MX19LAorIHsweDAwYjYsIDE2LCB7IDB4ZTUsIDB4MTUsIDB4MjQsIDB4MDYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTYsIDB4NzZ9fSwKKyB7MHgwMGM2LCAxNiwgeyAweGU1LCAweDE1LCAweDI0LCAweDA3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweDEyLCAweDAwLCAweDAzfX0sCisgezB4MDBkNiwgMTYsIHsgMHg3ZiwgMHgwMSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgwOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZCwgMHgxMn19LAorIHsweDAwZTYsIDE2LCB7IDB4MTYsIDB4NDcsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MzB9fSwKKyB7MHgwMGY2LCAxNiwgeyAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDgwLCAweGYwfX0sCisgezB4MDAwMywgMTYsIHsgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NH19LAorIHsweDAwMTMsIDE2LCB7IDB4MDEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjR9fSwKKyB7MHgwMDIzLCAxNiwgeyAweDM3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyfX0sCisgezB4MDA0MywgIDMsIHsgMHgwMiwgMHgxYiwgMHgwMH19LAorIHsweDAwMDAsICAzLCB7IDB4MDIsIDB4MTAsIDB4OTV9fSwKKyB7MHgwMTA2LCA2NCwgeyAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDA0LCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLAorICAweGUwLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDAyLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM2LCAweGY1LAorICAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDA2LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGU1LCAweDE1LCAweDI0LAorICAweDBiLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDMyLCAweGU1LCAweDE1LCAweDI0LCAweDBjfX0sCisgezB4MDE0NiwgNjQsIHsgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHgzZiwgMHhmZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNywgMHhmNSwgMHg4MiwKKyAgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwMywgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwKKyAgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwKKyAgMHgwZCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg3MCwgMHgwMywgMHgwMiwgMHgwMiwgMHg0ZiwgMHhlNX19LAorIHsweDAxODYsIDY0LCB7IDB4MTUsIDB4MjQsIDB4MTcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzIsCisgIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4ODAsIDB4MGYsIDB4ZTUsIDB4MTUsIDB4MjQsCisgIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4ZTQsIDB4ZmYsIDB4ZTUsIDB4MTUsCisgIDB4MjQsIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmQsIDB4MTIsIDB4MTYsIDB4NDcsIDB4ZTV9fSwKKyB7MHgwMWM2LCA2NCwgeyAweDE1LCAweDI0LCAweDBlLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDExLCAweGU1LCAweDE1LCAweDI0LCAweDMzLAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDgwLCAweDBmLCAweGU1LCAweDE1LCAweDI0LAorICAweDMzLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDMzLAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZjLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDBmfX0sCisgezB4MDIwNiwgNjQsIHsgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgyZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMywgMHhmNSwgMHg4MiwgMHhlNCwKKyAgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxMCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwKKyAgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHgxMiwgMHgxNSwgMHhlNywgMHhlNSwgMHgxNSwgMHgyNCwgMHgxMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwKKyAgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHgxMiwgMHgxNiwgMHgxNywgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMywgMHhmNSwgMHg4MiwgMHhlNH19LAorIHsweDAyNDYsIDY0LCB7IDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTUsIDB4YjcsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsCisgIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4NDQsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MTUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsCisgIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsCisgIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MGYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjV9fSwKKyB7MHgwMjg2LCA2NCwgeyAweDgzLCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDA0LCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM5LCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDEyLCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDQ0LCAweGU1LCAweDE1LCAweDI0LCAweDEzLCAweGY1LCAweDgyLCAweGU0LCAweDM1LAorICAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDExLCAweGU1LCAweDE1LCAweDI0LCAweDM5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0fX0sCisgezB4MDJjNiwgNjQsIHsgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg4MCwgMHgwZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwKKyAgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwNCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOSwKKyAgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxNiwKKyAgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNSwgMHhmNSwgMHg4Mn19LAorIHsweDAzMDYsIDY0LCB7IDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MTcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsCisgIDB4ODMsIDB4ZTAsIDB4MzAsIDB4ZTAsIDB4MTEsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsCisgIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4ODAsIDB4MGYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsCisgIDB4ODMsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MTgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjV9fSwKKyB7MHgwMzQ2LCA2NCwgeyAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDE1LCAweDI0LCAweDNiLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweGU1LAorICAweDE1LCAweDI0LCAweDE5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDExLCAweGU1LCAweDE1LCAweDI0LAorICAweDM5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDEwLCAweGYwLCAweDgwLCAweDBmLCAweGU1LCAweDE1LAorICAweDI0LCAweDM5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGVmLCAweGYwLCAweDkwLCAweDc4fX0sCisgezB4MDM4NiwgNjQsIHsgMHg0MSwgMHg3NCwgMHgwNCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxYSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwKKyAgMHg2YiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwKKyAgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwMywgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNH19LAorIHsweDAzYzYsIDY0LCB7IDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MTIsIDB4MDAsCisgIDB4MzYsIDB4ZWYsIDB4NTQsIDB4ZmUsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsCisgIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZmYsIDB4ZjAsIDB4ZmQsIDB4ZTQsIDB4ZmYsIDB4MTIsIDB4MTYsIDB4NDcsIDB4ZTUsIDB4MTUsCisgIDB4MjQsIDB4MmMsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MmJ9fSwKKyB7MHgwNDA2LCA2NCwgeyAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweGU1LCAweDE2LCAweDQyLCAweDEzLCAweGU1LCAweDE1LCAweDI0LCAweDFiLAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDcwLCAweDBlLCAweGU1LCAweDE1LCAweDI0LCAweDI1LCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDI4LCAweGU1LCAweDE1LCAweDI0LCAweDMyLCAweGY1LCAweDgyLCAweGU0LCAweDM1LAorICAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDAyLCAweGZmLCAweGYwLCAweGZkLCAweGU0LCAweGZmLCAweDEyLCAweDE2LCAweDQ3LCAweGU1fX0sCisgezB4MDQ0NiwgNjQsIHsgMHgxNSwgMHgyNCwgMHgyYiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMSwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgxMywKKyAgMHhlNSwgMHgxNSwgMHgyNCwgMHgxYywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHg3MCwgMHgwZSwgMHhlNSwKKyAgMHgxNSwgMHgyNCwgMHgyNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgyYSwgMHg5MCwgMHg3OCwgMHg0MSwKKyAgMHg3NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMH19LAorIHsweDA0ODYsIDY0LCB7IDB4NDQsIDB4MDQsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZWYsIDB4NjAsIDB4MGYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsCisgIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MWQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsCisgIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MjcsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsCisgIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzcsIDB4ZjV9fSwKKyB7MHgwNGM2LCA2NCwgeyAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDFlLAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDI4LCAweGU1LCAweDE1LCAweDI0LCAweDMyLCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZlLCAweGZmLCAweGYwLCAweGZkLCAweGU0LCAweGZmLCAweDEyLCAweDE2LCAweDQ3LAorICAweGU1LCAweDE1LCAweDI0LCAweDJkLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDAxLCAweGYwLCAweGU1fX0sCisgezB4MDUwNiwgNjQsIHsgMHgxNiwgMHg0MiwgMHgxMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgxZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg3MCwgMHgwZSwKKyAgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgyNywgMHhlNSwgMHgxNSwKKyAgMHgyNCwgMHgzMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwMSwgMHhmZiwgMHhmMCwgMHhmZCwgMHhlNCwKKyAgMHhmZiwgMHgxMiwgMHgxNiwgMHg0NywgMHhlNSwgMHgxNSwgMHgyNCwgMHgyZCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4M319LAorIHsweDA1NDYsIDY0LCB7IDB4ZTQsIDB4ZjAsIDB4ZTUsIDB4MTYsIDB4NDIsIDB4MTMsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjAsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsCisgIDB4ZTAsIDB4NzAsIDB4MGUsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsCisgIDB4MTgsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsCisgIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjEsIDB4ZjUsIDB4ODJ9fSwKKyB7MHgwNTg2LCA2NCwgeyAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDBmLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LAorICAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDIyLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LAorICAweDgzLCAweGUwLCAweDYwLCAweDFmLCAweGU1LCAweDE1LCAweDI0LCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LAorICAweDAxLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDNhLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGU0LCAweGYwfX0sCisgezB4MDVjNiwgNjQsIHsgMHhlNSwgMHgxNiwgMHg0MiwgMHgxMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgyMywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwKKyAgMHgwMywgMHgxMiwgMHgxOCwgMHg4NSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwKKyAgMHg2MCwgMHgxYiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwOCwKKyAgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHhmZiwgMHhlNSwgMHgxNiwgMHhmNCwgMHhmZSwgMHhlZiwgMHg1ZSwgMHhmMCwgMHhlNSwgMHgxNX19LAorIHsweDA2MDYsIDY0LCB7IDB4MjQsIDB4MjUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MTYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZTAsIDB4NDUsIDB4MTYsCisgIDB4ZjAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZTksIDB4ZTAsIDB4MTIsIDB4MTIsIDB4MDMsIDB4MDcsIDB4ODMsIDB4MDAsIDB4MDcsIDB4ZjcsIDB4MDEsIDB4MDgsCisgIDB4NjMsIDB4MDMsIDB4MDYsIDB4NGMsIDB4MDYsIDB4MDcsIDB4NzQsIDB4MDgsIDB4MDcsIDB4NjgsIDB4MDksIDB4MDcsIDB4NTAsIDB4MGEsIDB4MDd9fSwKKyB7MHgwNjQ2LCA2NCwgeyAweDVmLCAweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGIyLCAweDkwLCAweDdmLCAweGViLCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDFjLCAweDE0LCAweDcwLCAweDAzLAorICAweDAyLCAweDA2LCAweGZlLCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDA3LCAweDQ2LCAweDc0LCAweDE5LCAweDkwLCAweDdmLCAweGQ0LCAweGYwLAorICAweDc0LCAweDAwLCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDA4LCAweGI5LCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDA0LCAweDc1LCAweDgyLAorICAweDE3LCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDMwLCAweGUwLCAweDA0LCAweDdmLCAweDAzLCAweDgwfX0sCisgezB4MDY4NiwgNjQsIHsgMHgwMiwgMHg3ZiwgMHgwMiwgMHg3NSwgMHg4MiwgMHg4MiwgMHg3NSwgMHg4MywgMHgxOSwgMHhlZiwgMHhmMCwgMHg3NSwgMHg4MiwgMHg2ZCwgMHg3NSwgMHg4MywgMHgxOSwKKyAgMHhmMCwgMHg3NSwgMHg4MiwgMHg2NiwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NSwgMHg4MiwgMHg1ZiwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg3NSwKKyAgMHg4MiwgMHg1OCwgMHg3NSwgMHg4MywgMHgxOSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNCwgMHg3ZiwgMHg2NCwgMHg4MCwKKyAgMHgwMiwgMHg3ZiwgMHgzMiwgMHg3NSwgMHg4MiwgMHgxYSwgMHg3NSwgMHg4MywgMHgxOSwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlZiwgMHhlMH19LAorIHsweDA2YzYsIDY0LCB7IDB4ZmUsIDB4OTAsIDB4N2YsIDB4ZWUsIDB4ZTAsIDB4N2MsIDB4MDAsIDB4MjQsIDB4MDAsIDB4ZjUsIDB4MTksIDB4ZWMsIDB4M2UsIDB4ZjUsIDB4MTgsIDB4NzUsIDB4MzMsCisgIDB4MTksIDB4NzUsIDB4MzQsIDB4MTIsIDB4NzUsIDB4ODIsIDB4MTQsIDB4NzUsIDB4ODMsIDB4MTksIDB4ZTAsIDB4NzUsIDB4MjcsIDB4MDAsIDB4ZjUsIDB4MjgsCisgIDB4ZDMsIDB4ZTUsIDB4MjgsIDB4OTUsIDB4MTksIDB4ZTUsIDB4MjcsIDB4OTUsIDB4MTgsIDB4NDAsIDB4MDYsIDB4ODUsIDB4MTgsIDB4MjcsIDB4ODUsIDB4MTksCisgIDB4MjgsIDB4MTIsIDB4MTMsIDB4MTIsIDB4MDIsIDB4MDgsIDB4YjksIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTQsIDB4MmJ9fSwKKyB7MHgwNzA2LCA2NCwgeyAweGVhLCAweDQ5LCAweDYwLCAweDMyLCAweDkwLCAweDdmLCAweGVlLCAweGUwLCAweDc1LCAweDE4LCAweDAwLCAweGY1LCAweDE5LCAweGFlLCAweDAyLCAweGFmLCAweDAxLAorICAweDhlLCAweDMzLCAweDhmLCAweDM0LCAweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGUwLCAweGZlLCAweGEzLCAweGUwLCAweDhlLCAweDI3LCAweGY1LCAweDI4LAorICAweGQzLCAweDk1LCAweDE5LCAweGU1LCAweDI3LCAweDk1LCAweDE4LCAweDQwLCAweDA2LCAweDg1LCAweDE4LCAweDI3LCAweDg1LCAweDE5LCAweDI4LCAweDEyLAorICAweDEzLCAweDEyLCAweDAyLCAweDA4LCAweGI5LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDA4LCAweGI5fX0sCisgezB4MDc0NiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwOCwgMHhiOSwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhlNSwgMHgyNSwgMHhmMCwgMHg5MCwKKyAgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwOCwgMHhiOSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmNSwgMHgyNSwgMHgwMiwgMHgwOCwKKyAgMHhiOSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmNSwgMHgyMiwgMHgxMiwgMHgwYSwgMHhiOCwgMHgwMiwgMHgwOCwgMHhiOSwgMHg5MCwgMHg3ZiwgMHgwMCwKKyAgMHhlNSwgMHgyMiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwOCwgMHhiOSwgMHg5MCwgMHg3ZiwgMHhlOH19LAorIHsweDA3ODYsIDY0LCB7IDB4ZTAsIDB4MjQsIDB4N2YsIDB4NjAsIDB4MjQsIDB4MTQsIDB4NjAsIDB4MzEsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NWIsIDB4YTIsIDB4MDAsIDB4ZTQsIDB4MzMsIDB4ZmYsCisgIDB4MjUsIDB4ZTAsIDB4ZmYsIDB4YTIsIDB4MDYsIDB4ZTQsIDB4MzMsIDB4NGYsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDgsIDB4YjksIDB4ZTQsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4OTAsCisgIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDgsIDB4YjksIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODB9fSwKKyB7MHgwN2M2LCA2NCwgeyAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LAorICAweDdmLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZkLCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGU0LCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LAorICAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDA4LCAweGI5LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDA4LCAweGI5LAorICAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDFkLCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDA4LCAweGI5fX0sCisgezB4MDgwNiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNCwgMHgwMSwgMHgwNSwgMHhjMiwgMHgwMCwgMHgwMiwgMHgwOCwgMHhiOSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwKKyAgMHgwMSwgMHhmMCwgMHgwMiwgMHgwOCwgMHhiOSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHg3MCwgMHgzOCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwKKyAgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwKKyAgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHg1NCwgMHg4MCwgMHhmZn19LAorIHsweDA4NDYsIDY0LCB7IDB4MTMsIDB4MTMsIDB4MTMsIDB4NTQsIDB4MWYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4OTAsIDB4N2YsIDB4ZDcsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MjAsCisgIDB4ZjAsIDB4ODAsIDB4NWYsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4NTYsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsCisgIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTgsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NGEsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDQsIDB4ZDIsCisgIDB4MDAsIDB4ODAsIDB4M2YsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MzYsIDB4OTAsIDB4N2YsIDB4ZWF9fSwKKyB7MHgwODg2LCA2NCwgeyAweGUwLCAweDcwLCAweDIwLCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LAorICAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweDc0LCAweDAxLCAweGYwLAorICAweDgwLCAweDEwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDA3LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LAorICAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDIyLCAweGU1LCAweDExLCAweDU0LCAweDBmLCAweDcwfX0sCisgezB4MDhjNiwgNjQsIHsgMHgwMywgMHgwMiwgMHgwOSwgMHhiMiwgMHgxMiwgMHgxNiwgMHhhNSwgMHhlZiwgMHgyMCwgMHhlMSwgMHg3NSwgMHgxMiwgMHgxNywgMHgwMywgMHhlZiwgMHgxNCwgMHhmNSwKKyAgMHgxOSwgMHgxMiwgMHgxOCwgMHhjYywgMHhlZiwgMHgyNSwgMHgxOSwgMHhmZiwgMHhlNCwgMHgzMywgMHhmZSwgMHhjMywgMHhlZiwgMHg5NCwgMHg4MCwgMHhlZSwKKyAgMHg2NCwgMHg4MCwgMHg5NCwgMHg4MCwgMHg1MCwgMHg1OSwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwKKyAgMHhmZiwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHgzMCwgMHhlMCwgMHgxMSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4Mn19LAorIHsweDA5MDYsIDY0LCB7IDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ODAsIDB4MGYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsCisgIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsCisgIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjAsIDB4ZTIsIDB4MTIsIDB4ZTUsIDB4MTksIDB4NjAsIDB4MGUsIDB4ZjUsIDB4MjMsIDB4ZWYsIDB4MjQsCisgIDB4MDEsIDB4ZjUsIDB4MmQsIDB4ZTQsIDB4M2UsIDB4ZjUsIDB4MmMsIDB4MTIsIDB4MTQsIDB4YWQsIDB4ZTQsIDB4ZmYsIDB4MTIsIDB4MTQsIDB4ZTN9fSwKKyB7MHgwOTQ2LCA2NCwgeyAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDMwLCAweGU3LCAweDVkLCAweDEyLCAweDE4LAorICAweGNjLCAweGU1LCAweDE1LCAweDI0LCAweDNiLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZlLCAweGVmLCAweGMzLAorICAweDllLCAweDUwLCAweDQ4LCAweGU1LCAweDE1LCAweDI0LCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDAxLAorICAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdifX0sCisgezB4MDk4NiwgNjQsIHsgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzYSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwKKyAgMHgxMywgMHg5MCwgMHg3ZiwgMHhjMiwgMHhlMCwgMHgzMCwgMHhlMSwgMHgxMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwKKyAgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNSwgMHgyNCwgMHg4MCwgMHgwMywgMHgxMiwgMHgxMiwgMHhhMSwgMHgxMiwgMHgxNiwgMHhkNCwgMHhlZiwgMHgzMCwKKyAgMHhlMSwgMHgwMywgMHgwMiwgMHgwYSwgMHhiNywgMHgxMiwgMHgxNywgMHhkMiwgMHg4ZiwgMHgxOSwgMHgxMiwgMHgxOCwgMHhkOCwgMHhlNSwgMHgxNX19LAorIHsweDA5YzYsIDY0LCB7IDB4MjQsIDB4MzgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzUsIDB4ZjUsIDB4ODIsCisgIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTksIDB4YzMsIDB4OWYsIDB4NTAsIDB4MjgsIDB4MTIsIDB4MTgsIDB4YjQsCisgIDB4ZWYsIDB4MzAsIDB4ZTAsIDB4MjEsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsCisgIDB4MjAsIDB4ZTcsIDB4MTIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTB9fSwKKyB7MHgwYTA2LCA2NCwgeyAweDIwLCAweGUxLCAweDAzLCAweDAyLCAweDBhLCAweGI3LCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLAorICAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweGU1LCAweDE5LCAweDcwLCAweDAzLCAweDAyLCAweDBhLCAweGI3LCAweGI0LCAweDgwLCAweDBmLCAweGU1LCAweDE1LAorICAweDI0LCAweDM4LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGU1LCAweDE1LCAweDI0LAorICAweDM4LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweDMwLCAweGU3LCAweDI5LCAweGU1LCAweDE5fX0sCisgezB4MGE0NiwgNjQsIHsgMHhkMywgMHg5NCwgMHgyMCwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOSwgMHgyMCwgMHg4NSwgMHgxOSwgMHgyMywgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywKKyAgMHhhMywgMHhhMywgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHg4YywgMHgyYywgMHhmNSwgMHgyZCwgMHgxMiwgMHgxMywgMHhkZCwgMHhlNSwgMHgxOSwgMHgyNSwKKyAgMHhlMCwgMHhmZiwgMHgxMiwgMHgxNSwgMHgxOSwgMHgyMiwgMHhlNSwgMHgxOSwgMHhkMywgMHg5NCwgMHgzZiwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOSwgMHgzZiwKKyAgMHg4NSwgMHgxOSwgMHgyMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMH19LAorIHsweDBhODYsIDY0LCB7IDB4ZmYsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsIDB4ODMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4ZmMsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsCisgIDB4ZWYsIDB4ZjAsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsIDB4ODMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsIDB4MjQsIDB4MDEsCisgIDB4ZjUsIDB4MmQsIDB4ZTQsIDB4M2UsIDB4ZjUsIDB4MmMsIDB4MTIsIDB4MTQsIDB4NmMsIDB4ZTUsIDB4MTksIDB4MDQsIDB4ZmYsIDB4MTIsIDB4MTUsIDB4MTksCisgIDB4MjIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsIDB4ZjAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTZ9fSwKKyB7MHgwYWM2LCA2NCwgeyAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk0LCAweGYwLCAweDkwLCAweDc4LCAweDRhLCAweDA0LCAweGYwLCAweGY1LCAweDhlLCAweDkwLCAweDdmLCAweDk1LCAweDc0LAorICAweGMwLCAweGYwLCAweDkwLCAweDdmLCAweDllLCAweDc0LCAweDNmLCAweGYwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDFmLCAweGYwLCAweDkwLCAweDc4LAorICAweDQzLCAweDc0LCAweGZmLCAweGYwLCAweGU0LCAweDkwLCAweDc4LCAweDQxLCAweGYwLCAweDkwLCAweDdmLCAweGRmLCAweDc0LCAweDlmLCAweGYwLCAweDkwLAorICAweDdmLCAweGRlLCAweGYwLCAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDdlLCAweDdiLCAweDdmLCAweGMwLCAweDc1fX0sCisgezB4MGIwNiwgNjQsIHsgMHgxNCwgMHg3YiwgMHg3NSwgMHgxNSwgMHhjMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHhlZiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwMSwgMHgxMiwgMHgwZiwgMHgxMiwKKyAgMHg3ZSwgMHg3YiwgMHg3ZiwgMHhjMCwgMHg3NSwgMHgxNCwgMHg3YiwgMHg3NSwgMHgxNSwgMHhjMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHhlZiwgMHhmMCwKKyAgMHg3NSwgMHgxNiwgMHgwMSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwKKyAgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg0MCwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywgMHg3NCwgMHg3ZSwgMHhmMCwgMHhhMywgMHg3NH19LAorIHsweDBiNDYsIDY0LCB7IDB4NDAsIDB4ZjAsIDB4N2UsIDB4N2UsIDB4N2YsIDB4ODAsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsIDB4ODMsIDB4YTMsIDB4YTMsIDB4NzQsIDB4N2UsIDB4ZjAsCisgIDB4YTMsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4N2UsIDB4N2MsIDB4N2YsIDB4MDAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4MDAsIDB4OTAsIDB4N2YsCisgIDB4OTYsIDB4NzQsIDB4ZGYsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDIsIDB4MTIsIDB4MGYsIDB4MTIsIDB4N2UsIDB4N2MsIDB4N2YsIDB4MDAsIDB4NzUsIDB4MTQsCisgIDB4N2MsIDB4NzUsIDB4MTUsIDB4MDAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4ZGYsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDIsIDB4ZTUsIDB4MTV9fSwKKyB7MHgwYjg2LCA2NCwgeyAweDI0LCAweDI2LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDAxLCAweGYwLCAweDdlLCAweDdkLCAweDdmLCAweGMwLCAweDg1LAorICAweDE1LCAweDgyLCAweDg1LCAweDE0LCAweDgzLCAweDc0LCAweDdkLCAweGYwLCAweGEzLCAweDc0LCAweGMwLCAweGYwLCAweDdlLCAweDdlLCAweDdmLCAweDAwLAorICAweDg1LCAweDE1LCAweDgyLCAweDg1LCAweDE0LCAweDgzLCAweGEzLCAweGEzLCAweDc0LCAweDdlLCAweGYwLCAweGEzLCAweDc0LCAweDAwLCAweGYwLCAweDdlLAorICAweDdjLCAweDdmLCAweDQwLCAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDQwLCAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweGJmLCAweGYwfX0sCisgezB4MGJjNiwgNjQsIHsgMHg3NSwgMHgxNiwgMHgwNCwgMHgxMiwgMHgwZiwgMHgxMiwgMHg3ZSwgMHg3YywgMHg3ZiwgMHg0MCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHg0MCwgMHg5MCwKKyAgMHg3ZiwgMHg5NiwgMHg3NCwgMHhiZiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwNCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwKKyAgMHgxNCwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMiwgMHhmMCwgMHg3ZSwgMHg3ZCwgMHg3ZiwgMHg0MCwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywKKyAgMHg3NCwgMHg3ZCwgMHhmMCwgMHhhMywgMHg3NCwgMHg0MCwgMHhmMCwgMHg3ZSwgMHg3ZCwgMHg3ZiwgMHg4MCwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NX19LAorIHsweDBjMDYsIDY0LCB7IDB4MTQsIDB4ODMsIDB4YTMsIDB4YTMsIDB4NzQsIDB4N2QsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4N2UsIDB4N2MsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MTQsCisgIDB4N2MsIDB4NzUsIDB4MTUsIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4N2YsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDgsIDB4MTIsIDB4MGYsIDB4MTIsCisgIDB4N2UsIDB4N2MsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4N2YsIDB4ZjAsCisgIDB4NzUsIDB4MTYsIDB4MDgsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4NzR9fSwKKyB7MHgwYzQ2LCA2NCwgeyAweDAzLCAweGYwLCAweDdlLCAweDdjLCAweDdmLCAweGMwLCAweDg1LCAweDE1LCAweDgyLCAweDg1LCAweDE0LCAweDgzLCAweDc0LCAweDdjLCAweGYwLCAweGEzLCAweDc0LAorICAweGMwLCAweGYwLCAweDdlLCAweDdkLCAweDdmLCAweDAwLCAweDg1LCAweDE1LCAweDgyLCAweDg1LCAweDE0LCAweDgzLCAweGEzLCAweGEzLCAweDc0LCAweDdkLAorICAweGYwLCAweGEzLCAweDc0LCAweDAwLCAweGYwLCAweGMyLCAweDBhLCAweGMyLCAweDA5LCAweGQyLCAweDAyLCAweDIyLCAweGU1LCAweDEwLCAweDA0LCAweDU0LAorICAweDAzLCAweGY1LCAweDEwLCAweDE0LCAweDYwLCAweDFmLCAweDE0LCAweDYwLCAweDMxLCAweDE0LCAweDYwLCAweDQzLCAweDI0LCAweDAzLCAweDcwfX0sCisgezB4MGM4NiwgNjQsIHsgMHg1MiwgMHg3ZSwgMHg3YiwgMHg3ZiwgMHhjMCwgMHg3NSwgMHgxNCwgMHg3YiwgMHg3NSwgMHgxNSwgMHhjMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHhlZiwgMHhmMCwKKyAgMHg3NSwgMHgxNiwgMHgwMSwgMHg4MCwgMHgzZCwgMHg3ZSwgMHg3YywgMHg3ZiwgMHgwMCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHgwMCwgMHg5MCwKKyAgMHg3ZiwgMHg5NiwgMHg3NCwgMHhkZiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwMiwgMHg4MCwgMHgyOCwgMHg3ZSwgMHg3YywgMHg3ZiwgMHg0MCwgMHg3NSwgMHgxNCwKKyAgMHg3YywgMHg3NSwgMHgxNSwgMHg0MCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHhiZiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwNCwgMHg4MCwgMHgxM319LAorIHsweDBjYzYsIDY0LCB7IDB4N2UsIDB4N2MsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4N2YsIDB4ZjAsIDB4NzUsCisgIDB4MTYsIDB4MDgsIDB4ZTUsIDB4MzIsIDB4NTUsIDB4MTYsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MGUsIDB4MTEsIDB4ZTUsIDB4MTYsIDB4ZjQsIDB4ZmYsIDB4NTIsCisgIDB4MzIsIDB4ZTUsIDB4MjYsIDB4NTQsIDB4N2YsIDB4ZmUsIDB4NzAsIDB4MGYsIDB4ZTUsIDB4MmEsIDB4NTUsIDB4MTYsIDB4NjAsIDB4MjQsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4ZTAsIDB4NDUsIDB4MTYsIDB4ZjAsIDB4ODAsIDB4MWIsIDB4YmUsIDB4MjAsIDB4MTgsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjV9fSwKKyB7MHgwZDA2LCA2NCwgeyAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDMwLCAweGUzLCAweDA5LCAweGU0LCAweGY1LCAweDJhLCAweDkwLCAweDdmLCAweDk4LCAweGUwLAorICAweDVmLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDNhLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDAzLAorICAweGUwLCAweDE0LCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM0LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLAorICAweDAzLCAweGUwLCAweDE0LCAweGYwLCAweGUwLCAweDYwLCAweDAzLCAweDAyLCAweDBlLCAweDExLCAweDc0LCAweDBhLCAweGYwLCAweDEyLCAweDAwfX0sCisgezB4MGQ0NiwgNjQsIHsgMHgzNiwgMHhlZiwgMHg1NCwgMHgwMSwgMHhmZiwgMHhmNSwgMHgxOSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyYywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwKKyAgMHg4MywgMHhlMCwgMHg2ZiwgMHg2MCwgMHgwNywgMHhlNSwgMHgxOSwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgxMywgMHgxMiwgMHgxOCwgMHhlNCwgMHg4ZiwKKyAgMHgxOSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgxOSwKKyAgMHg1NCwgMHgxMCwgMHhmZSwgMHg2ZiwgMHg2MCwgMHgwNiwgMHhlZSwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgxMywgMHhlNSwgMHgxNSwgMHgyNH19LAorIHsweDBkODYsIDY0LCB7IDB4MjgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTksIDB4NTQsIDB4ODAsIDB4ZmUsIDB4NmYsIDB4NjAsCisgIDB4MDYsIDB4ZWUsIDB4ZjAsIDB4ZTUsIDB4MTYsIDB4NDIsIDB4MTMsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsCisgIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTksIDB4NTQsIDB4MjAsIDB4ZmUsIDB4NmYsIDB4NjAsIDB4MTUsIDB4ZWUsIDB4ZjAsIDB4ZTUsIDB4MTUsCisgIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MzAsIDB4ZTQsIDB4MDQsIDB4ZTUsIDB4MTZ9fSwKKyB7MHgwZGM2LCA2NCwgeyAweDQyLCAweDEzLCAweGU1LCAweDEyLCAweDU1LCAweDE2LCAweGZmLCAweGY1LCAweDE5LCAweGU1LCAweDE1LCAweDI0LCAweDJhLCAweGY1LCAweDgyLCAweGU0LCAweDM1LAorICAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDZmLCAweDYwLCAweDE2LCAweGU1LCAweDE5LCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDMwLCAweGU1LCAweDA0LCAweGU1LCAweDE2LCAweDQyLCAweDEzLCAweGU1LCAweDE3LCAweDU1LAorICAweDE2LCAweGZmLCAweGY1LCAweDE5LCAweGU1LCAweDE1LCAweDI0LCAweDMwLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzfX0sCisgezB4MGUwNiwgNjQsIHsgMHhlMCwgMHg2ZiwgMHg2MCwgMHgwNywgMHhlNSwgMHgxOSwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgxMywgMHgyMiwgMHgzMCwgMHgwOSwgMHgwMywgMHgwMiwgMHgwZiwKKyAgMHgxMSwgMHhlNSwgMHgyNCwgMHgxNCwgMHg2MCwgMHgyYSwgMHgxNCwgMHg2MCwgMHg0MSwgMHgxNCwgMHg2MCwgMHg1OCwgMHgxNCwgMHg2MCwgMHg2ZiwgMHgyNCwKKyAgMHgwNCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwZSwgMHhjZiwgMHg3ZSwgMHg3YiwgMHg3ZiwgMHhjMCwgMHg3NSwgMHgxNCwgMHg3YiwgMHg3NSwgMHgxNSwgMHhjMCwKKyAgMHg5MCwgMHg3ZiwgMHg5NiwgMHg3NCwgMHhlZiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwMSwgMHgxMiwgMHgxMiwgMHhhMSwgMHg3NSwgMHgyNCwgMHgwMX19LAorIHsweDBlNDYsIDY0LCB7IDB4MjIsIDB4N2UsIDB4N2MsIDB4N2YsIDB4MDAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4MDAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4ZGYsIDB4ZjAsCisgIDB4NzUsIDB4MTYsIDB4MDIsIDB4MTIsIDB4MTIsIDB4YTEsIDB4NzUsIDB4MjQsIDB4MDIsIDB4MjIsIDB4N2UsIDB4N2MsIDB4N2YsIDB4NDAsIDB4NzUsIDB4MTQsCisgIDB4N2MsIDB4NzUsIDB4MTUsIDB4NDAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDQsIDB4MTIsIDB4MTIsIDB4YTEsCisgIDB4NzUsIDB4MjQsIDB4MDMsIDB4MjIsIDB4N2UsIDB4N2MsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4ODAsIDB4OTB9fSwKKyB7MHgwZTg2LCA2NCwgeyAweDdmLCAweDk2LCAweDc0LCAweDdmLCAweGYwLCAweDc1LCAweDE2LCAweDA4LCAweDEyLCAweDEyLCAweGExLCAweDc1LCAweDI0LCAweDA0LCAweDIyLCAweDMwLCAweDA0LAorICAweDMzLCAweGMyLCAweDA0LCAweDUzLCAweDEzLCAweGRmLCAweGU0LCAweGY1LCAweDE5LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDJlLCAweDI1LAorICAweDE5LCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhLCAweDEyLCAweDExLCAweGFiLCAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDE5LCAweGY1LCAweDgyLAorICAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDE5LCAweGU1LCAweDE5LCAweGI0LCAweDAzLCAweGRiLCAweDkwfX0sCisgezB4MGVjNiwgNjQsIHsgMHg3ZiwgMHhjMywgMHg3NCwgMHgwMywgMHhmMCwgMHg3NSwgMHgyNCwgMHgwNSwgMHgyMiwgMHhlNSwgMHgzNiwgMHg2MCwgMHgzYiwgMHhkNSwgMHgzNiwgMHgwYSwgMHg1MywKKyAgMHgxMywgMHhlZiwgMHgzMCwgMHgwYSwgMHgwNCwgMHhkMiwgMHgwOSwgMHhjMiwgMHgwYSwgMHhlNCwgMHhmNSwgMHgxOSwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMCwKKyAgMHg3NCwgMHgzNSwgMHgyNSwgMHgxOSwgMHhmOSwgMHhlZSwgMHgzNCwgMHgwMCwgMHhmYSwgMHgxMiwgMHgxMSwgMHhhYiwgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNSwKKyAgMHgxOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHgwNSwgMHgxOSwgMHhlNSwgMHgxOSwgMHhiNH19LAorIHsweDBmMDYsIDY0LCB7IDB4MDMsIDB4ZGIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MjQsIDB4MjIsIDB4ZTQsIDB4ZjUsIDB4MWEsIDB4N2UsIDB4MDAsCisgIDB4N2IsIDB4MDEsIDB4ZTUsIDB4MTUsIDB4MjUsIDB4MWEsIDB4ZjksIDB4ZWUsIDB4MzUsIDB4MTQsIDB4ZmEsIDB4ZTQsIDB4MTIsIDB4MTEsIDB4ZjEsIDB4MDUsCisgIDB4MWEsIDB4ZTUsIDB4MWEsIDB4YjQsIDB4M2MsIDB4ZTgsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsCisgIDB4ODMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzcsIDB4ZjV9fSwKKyB7MHgwZjQ2LCA2NCwgeyAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDAzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDdmLCAweDBjLCAweGU0LCAweGZkLAorICAweDEyLCAweDE2LCAweDQ3LCAweDdmLCAweDEwLCAweGU1LCAweDE1LCAweDI0LCAweDMzLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLAorICAweGVmLCAweGYwLCAweDEyLCAweDE1LCAweGI3LCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDAyLCAweGYwLCAweDdmLCAweDAxLCAweGU1LCAweDE1LCAweDI0LAorICAweDM2LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDQ0LCAweDA2LCAweDkwLCAweGMwLCAweDAwfX0sCisgezB4MGY4NiwgNjQsIHsgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwNCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwKKyAgMHg4MywgMHg3NCwgMHg4MCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHgwZiwgMHhlNCwgMHhmZCwgMHgxMiwgMHgxNiwgMHg0NywgMHhlNCwgMHhmZiwKKyAgMHg3ZSwgMHhhMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlZSwgMHhmMCwgMHhmZCwKKyAgMHgxMiwgMHgxNiwgMHg0NywgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlNCwgMHhmMCwgMHg3Zn19LAorIHsweDBmYzYsIDY0LCB7IDB4MDUsIDB4N2QsIDB4N2YsIDB4MTIsIDB4MTYsIDB4NDcsIDB4N2YsIDB4MDEsIDB4MTIsIDB4MTUsIDB4NGYsIDB4N2YsIDB4MDMsIDB4N2QsIDB4MDcsIDB4MTIsIDB4MTYsCisgIDB4NDcsIDB4MjIsIDB4NTMsIDB4MTMsIDB4M2YsIDB4OTAsIDB4N2IsIDB4ZjEsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MTYsIDB4N2UsIDB4N2IsIDB4N2YsIDB4YzAsCisgIDB4NzUsIDB4MTQsIDB4N2IsIDB4NzUsIDB4MTUsIDB4YzAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4ZWYsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDEsIDB4MTIsCisgIDB4MDgsIDB4YzEsIDB4OTAsIDB4N2MsIDB4MzEsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MTYsIDB4N2UsIDB4N2MsIDB4N2YsIDB4MDAsIDB4NzUsIDB4MTR9fSwKKyB7MHgxMDA2LCA2NCwgeyAweDdjLCAweDc1LCAweDE1LCAweDAwLCAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweGRmLCAweGYwLCAweDc1LCAweDE2LCAweDAyLCAweDEyLCAweDA4LCAweGMxLCAweDkwLAorICAweDdjLCAweDcxLCAweGUwLCAweDMwLCAweGUzLCAweDE2LCAweDdlLCAweDdjLCAweDdmLCAweDQwLCAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDQwLAorICAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweGJmLCAweGYwLCAweDc1LCAweDE2LCAweDA0LCAweDEyLCAweDA4LCAweGMxLCAweDkwLCAweDdjLCAweGIxLCAweGUwLAorICAweDMwLCAweGUzLCAweDE2LCAweDdlLCAweDdjLCAweDdmLCAweDgwLCAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDgwLCAweDkwLCAweDdmfX0sCisgezB4MTA0NiwgNjQsIHsgMHg5NiwgMHg3NCwgMHg3ZiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwOCwgMHgxMiwgMHgwOCwgMHhjMSwgMHgwNSwgMHgxMSwgMHhlNSwgMHgxMSwgMHg1NCwgMHgwZiwgMHhmNSwKKyAgMHgxOCwgMHg3MCwgMHgxZiwgMHg5MCwgMHg3OCwgMHg0MSwgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OSwgMHhlMCwgMHhmNSwgMHgxNywKKyAgMHg5MCwgMHg3OCwgMHg0MSwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OSwgMHhlMCwgMHhmNCwgMHhmNSwgMHgxMiwgMHgxMiwgMHgxMSwKKyAgMHgyMSwgMHgyMiwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwMSwgMHgwNCwgMHgxMiwgMHgwYywgMHg3MywgMHgyMiwgMHg5MCwgMHg3ZiwgMHhjMiwgMHhlMH19LAorIHsweDEwODYsIDY0LCB7IDB4MjAsIDB4ZTEsIDB4MDgsIDB4ZTUsIDB4MTMsIDB4NjAsIDB4MDQsIDB4MTIsIDB4MGUsIDB4MTIsIDB4MjIsIDB4MTIsIDB4MGMsIDB4NzMsIDB4MjIsIDB4NzgsIDB4N2YsCisgIDB4ZTQsIDB4ZjYsIDB4ZDgsIDB4ZmQsIDB4NzUsIDB4ODEsIDB4MzcsIDB4MDIsIDB4MTAsIDB4ZGMsIDB4MDIsIDB4MTIsIDB4MjksIDB4ZTQsIDB4OTMsIDB4YTMsCisgIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NDAsIDB4MDMsIDB4ZjYsIDB4ODAsIDB4MDEsIDB4ZjIsIDB4MDgsIDB4ZGYsIDB4ZjQsIDB4ODAsIDB4MjksIDB4ZTQsCisgIDB4OTMsIDB4YTMsIDB4ZjgsIDB4NTQsIDB4MDcsIDB4MjQsIDB4MGMsIDB4YzgsIDB4YzMsIDB4MzMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MjB9fSwKKyB7MHgxMGM2LCA2NCwgeyAweGM4LCAweDgzLCAweDQwLCAweDA0LCAweGY0LCAweDU2LCAweDgwLCAweDAxLCAweDQ2LCAweGY2LCAweGRmLCAweGU0LCAweDgwLCAweDBiLCAweDAxLCAweDAyLCAweDA0LAorICAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDkwLCAweDE4LCAweDUwLCAweGU0LCAweDdlLCAweDAxLCAweDkzLCAweDYwLCAweGJjLCAweGEzLCAweGZmLAorICAweDU0LCAweDNmLCAweDMwLCAweGU1LCAweDA5LCAweDU0LCAweDFmLCAweGZlLCAweGU0LCAweDkzLCAweGEzLCAweDYwLCAweDAxLCAweDBlLCAweGNmLCAweDU0LAorICAweGMwLCAweDI1LCAweGUwLCAweDYwLCAweGE4LCAweDQwLCAweGI4LCAweGU0LCAweDkzLCAweGEzLCAweGZhLCAweGU0LCAweDkzLCAweGEzLCAweGY4fX0sCisgezB4MTEwNiwgNjQsIHsgMHhlNCwgMHg5MywgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhmMCwgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwKKyAgMHhjYSwgMHhjNSwgMHg4MywgMHhjYSwgMHhkZiwgMHhlOSwgMHhkZSwgMHhlNywgMHg4MCwgMHhiZSwgMHg5MCwgMHg3ZiwgMHhkMiwgMHhlMCwgMHgzMCwgMHhlMSwKKyAgMHgwMywgMHgwMiwgMHgxMSwgMHhhYSwgMHhjMiwgMHgwOSwgMHg5MCwgMHg3YiwgMHg0MCwgMHhlMCwgMHgxNCwgMHg2MCwgMHgyNiwgMHgxNCwgMHg2MCwgMHgzYiwKKyAgMHgxNCwgMHg2MCwgMHg1MCwgMHgyNCwgMHg4MywgMHg2MCwgMHg2NCwgMHgyNCwgMHg4MCwgMHg3MCwgMHg2MywgMHg3ZSwgMHg3YiwgMHg3ZiwgMHhjMH19LAorIHsweDExNDYsIDY0LCB7IDB4NzUsIDB4MTQsIDB4N2IsIDB4NzUsIDB4MTUsIDB4YzAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4ZWYsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDEsIDB4MTIsIDB4MDAsCisgIDB4NDYsIDB4ODAsIDB4NGIsIDB4N2UsIDB4N2MsIDB4N2YsIDB4MDAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4MDAsIDB4OTAsIDB4N2YsIDB4OTYsCisgIDB4NzQsIDB4ZGYsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDIsIDB4MTIsIDB4MDAsIDB4NDYsIDB4ODAsIDB4MzMsIDB4N2UsIDB4N2MsIDB4N2YsIDB4NDAsIDB4NzUsCisgIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4NDAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDQsIDB4MTJ9fSwKKyB7MHgxMTg2LCA2NCwgeyAweDAwLCAweDQ2LCAweDgwLCAweDFiLCAweDdlLCAweDdjLCAweDdmLCAweDgwLCAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDgwLCAweDkwLCAweDdmLCAweDk2LAorICAweDc0LCAweDdmLCAweGYwLCAweDc1LCAweDE2LCAweDA4LCAweDEyLCAweDAwLCAweDQ2LCAweDgwLCAweDAzLCAweDEyLCAweDE3LCAweDVjLCAweGU0LCAweDkwLAorICAweDdmLCAweGQzLCAweGYwLCAweDIyLCAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDAyLCAweGU3LAorICAweDIyLCAweGJiLCAweGZlLCAweDAyLCAweGUzLCAweDIyLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxfX0sCisgezB4MTFjNiwgNjQsIHsgMHgwYywgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwNiwgMHhlOSwgMHgyNSwKKyAgMHg4MiwgMHhmOCwgMHhlNiwgMHgyMiwgMHhiYiwgMHhmZSwgMHgwNiwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgMHhlMiwgMHgyMiwgMHhlNSwgMHg4MiwgMHgyOSwKKyAgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlNCwgMHg5MywgMHgyMiwgMHhiYiwgMHgwMSwgMHgwNiwgMHg4OSwgMHg4MiwgMHg4YSwKKyAgMHg4MywgMHhmMCwgMHgyMiwgMHg1MCwgMHgwMiwgMHhmNywgMHgyMiwgMHhiYiwgMHhmZSwgMHgwMSwgMHhmMywgMHgyMiwgMHhkMCwgMHg4MywgMHhkMH19LAorIHsweDEyMDYsIDY0LCB7IDB4ODIsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4NzAsIDB4MTIsIDB4NzQsIDB4MDEsIDB4OTMsIDB4NzAsIDB4MGQsIDB4YTMsIDB4YTMsIDB4OTMsIDB4ZjgsIDB4NzQsIDB4MDEsCisgIDB4OTMsIDB4ZjUsIDB4ODIsIDB4ODgsIDB4ODMsIDB4ZTQsIDB4NzMsIDB4NzQsIDB4MDIsIDB4OTMsIDB4NjgsIDB4NjAsIDB4ZWYsIDB4YTMsIDB4YTMsIDB4YTMsCisgIDB4ODAsIDB4ZGYsIDB4OTAsIDB4N2YsIDB4YWUsIDB4ZTAsIDB4ZmYsIDB4ZDMsIDB4OTIsIDB4MDAsIDB4ZTQsIDB4MzMsIDB4ZmUsIDB4ZWYsIDB4NGUsIDB4ZjAsCisgIDB4ZDIsIDB4ZTgsIDB4NDMsIDB4ZDgsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZGUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4ZjB9fSwKKyB7MHgxMjQ2LCA2NCwgeyAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGE5LCAweGYwLCAweDkwLCAweDdmLCAweGFhLCAweGYwLCAweDUzLCAweDkxLCAweGVmLAorICAweDkwLCAweDdmLCAweGFmLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGFlLCAweDc0LCAweDBkLCAweGYwLCAweGQyLCAweGFmLCAweGQyLCAweDBiLAorICAweDEyLCAweDE4LCAweDE0LCAweGMyLCAweDAxLCAweGU0LCAweGY1LCAweDJiLCAweGY1LCAweDMxLCAweGMyLCAweDA3LCAweGMyLCAweDAyLCAweDc1LCAweDI5LAorICAweGYwLCAweDkwLCAweDdmLCAweGQ4LCAweGUwLCAweDY1LCAweDI2LCAweDYwLCAweDA2LCAweDc1LCAweDMyLCAweDBmLCAweGUwLCAweGY1LCAweDI2fX0sCisgezB4MTI4NiwgNjQsIHsgMHgzMCwgMHgwMiwgMHgwMywgMHgxMiwgMHgwZiwgMHhkOSwgMHgzMCwgMHgwMSwgMHgwNywgMHhjMiwgMHgwMSwgMHgxMiwgMHgwNiwgMHgyOSwgMHg4MCwgMHhlMiwgMHgzMCwKKyAgMHgwOCwgMHhkZiwgMHhjMiwgMHgwOCwgMHgxMiwgMHgxOCwgMHgzNSwgMHg4MCwgMHhkOCwgMHgyMiwgMHhlNSwgMHgxMywgMHg1NSwgMHgxNiwgMHg2MCwgMHg2YSwKKyAgMHhlNSwgMHgxNSwgMHgyNCwgMHgzYSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg3MCwgMHg1YywgMHhlNSwgMHgxNiwKKyAgMHhmNCwgMHg1MiwgMHgxMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNiwgMHhmZiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmZSwgMHhlNCwgMHhmZCwgMHgwZn19LAorIHsweDEyYzYsIDY0LCB7IDB4ZWYsIDB4YWEsIDB4MDYsIDB4NzAsIDB4MDEsIDB4MGUsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTAsIDB4ZmMsIDB4NzQsIDB4ODAsIDB4MmQsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2IsIDB4ZjUsIDB4ODMsIDB4ZWMsIDB4ZjAsIDB4MGQsIDB4YmQsIDB4MGIsIDB4ZTIsIDB4OTAsIDB4N2YsIDB4YzMsIDB4NzQsCisgIDB4MGIsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4M2EsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MTAsIDB4ZjAsCisgIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4ZTUsIDB4MTV9fSwKKyB7MHgxMzA2LCA2NCwgeyAweDI0LCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweDIyLCAweGU1LCAweDI4LCAweDQ1LCAweDI3LCAweDYwLAorICAweDU3LCAweGFlLCAweDI3LCAweGFmLCAweDI4LCAweGQzLCAweGVmLCAweDk0LCAweDQwLCAweGVlLCAweDk0LCAweDAwLCAweDQwLCAweDA0LCAweDdlLCAweDAwLAorICAweDdmLCAweDQwLCAweGMzLCAweGU1LCAweDI4LCAweDlmLCAweGY1LCAweDI4LCAweGU1LCAweDI3LCAweDllLCAweGY1LCAweDI3LCAweGU0LCAweGZkLCAweGVkLAorICAweGMzLCAweDlmLCAweGU0LCAweDllLCAweDUwLCAweDFmLCAweDg1LCAweDM0LCAweDgyLCAweDg1LCAweDMzLCAweDgzLCAweGUwLCAweGZjLCAweDc0fX0sCisgezB4MTM0NiwgNjQsIHsgMHgwMCwgMHgyZCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlYywgMHhmMCwgMHgwZCwgMHgwNSwgMHgzNCwgMHhlNSwgMHgzNCwgMHg3MCwKKyAgMHgwMiwgMHgwNSwgMHgzMywgMHg4MCwgMHhkYSwgMHg5MCwgMHg3ZiwgMHhhOSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYywgMHhlMCwgMHg0NCwKKyAgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHhlZiwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhhYywgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHhlNCwKKyAgMHg5MCwgMHg3ZiwgMHhiNSwgMHhmMCwgMHgyMiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5MywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHhmMH19LAorIHsweDEzODYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzgsIDB4NGEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWQsCisgIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTcsIDB4ZjAsIDB4MzAsIDB4MDAsIDB4MDcsIDB4ZTUsIDB4MjksIDB4NTQsIDB4ZjAsIDB4ZmYsCisgIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4ZWYsIDB4NDQsIDB4MDgsIDB4OTAsIDB4NzgsIDB4NDEsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjAsCisgIDB4OTAsIDB4N2YsIDB4OTUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTgsIDB4ZjB9fSwKKyB7MHgxM2M2LCA2NCwgeyAweDkwLCAweDdmLCAweDkzLCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweGYwLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweDk2LCAweGYwLCAweDkwLCAweDdmLAorICAweDkyLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDIyLCAweDhmLCAweDFhLCAweDA1LCAweDJkLCAweGU1LCAweDJkLCAweGFlLCAweDJjLCAweDcwLCAweDAyLAorICAweDA1LCAweDJjLCAweDE0LCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGU1LCAweDFhLCAweGYwLCAweDEyLCAweDE4LCAweGYwLCAweDA1LCAweDJkLCAweGU1LAorICAweDJkLCAweGFjLCAweDJjLCAweDcwLCAweDAyLCAweDA1LCAweDJjLCAweDE0LCAweGY1LCAweDgyLCAweDhjLCAweDgzLCAweGVmLCAweGYwLCAweDE1fX0sCisgezB4MTQwNiwgNjQsIHsgMHgyMywgMHhlNSwgMHgyMywgMHg2MCwgMHgxZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhjMCwKKyAgMHg4MywgMHhjMCwgMHg4MiwgMHhlMCwgMHhmZSwgMHgxMiwgMHgxOCwgMHhkOCwgMHg4ZiwgMHgxYSwgMHhlZSwgMHg0ZiwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywKKyAgMHhmMCwgMHg4MCwgMHhiNSwgMHgyMiwgMHg4ZiwgMHgxYSwgMHhlNCwgMHhmNSwgMHgxYiwgMHg3NSwgMHgxYywgMHhmZiwgMHg3NSwgMHgxZCwgMHgxOSwgMHg3NSwKKyAgMHgxZSwgMHg4NiwgMHhhYiwgMHgxYywgMHhhYSwgMHgxZCwgMHhhOSwgMHgxZSwgMHg5MCwgMHgwMCwgMHgwMSwgMHgxMiwgMHgxMSwgMHhjNCwgMHhiNH19LAorIHsweDE0NDYsIDY0LCB7IDB4MDMsIDB4MWQsIDB4YWYsIDB4MWIsIDB4MDUsIDB4MWIsIDB4ZWYsIDB4YjUsIDB4MWEsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MTEsIDB4YWIsIDB4N2UsIDB4MDAsIDB4MjksCisgIDB4ZmYsIDB4ZWUsIDB4M2EsIDB4YTksIDB4MDcsIDB4NzUsIDB4MWMsIDB4ZmYsIDB4ZjUsIDB4MWQsIDB4ODksIDB4MWUsIDB4ODAsIDB4ZDQsIDB4N2IsIDB4MDAsCisgIDB4N2EsIDB4MDAsIDB4NzksIDB4MDAsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4NzgsIDB4NDEsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NGYsIDB4NzQsIDB4YzAsIDB4ZjAsCisgIDB4ZTQsIDB4OTAsIDB4NzgsIDB4NTAsIDB4ZjAsIDB4ZTUsIDB4MmMsIDB4OTAsIDB4NzgsIDB4NTEsIDB4ZjAsIDB4YWUsIDB4MmMsIDB4ZTUsIDB4MmR9fSwKKyB7MHgxNDg2LCA2NCwgeyAweDkwLCAweDc4LCAweDUyLCAweGYwLCAweDkwLCAweDc4LCAweDU0LCAweGU1LCAweDIzLCAweGYwLCAweDkwLCAweDc4LCAweDU3LCAweDc0LCAweDA0LCAweGYwLCAweDkwLAorICAweDdmLCAweGUyLCAweGUwLCAweDQ0LCAweDEwLCAweGYwLCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweGU0LCAweDkwLCAweDc4LCAweDU1LCAweGYwLCAweDkwLAorICAweDc4LCAweDU1LCAweGUwLCAweDYwLCAweGZhLCAweDIyLCAweGU0LCAweDkwLCAweDc4LCAweDQxLCAweGYwLCAweGU1LCAweDJjLCAweDkwLCAweDc4LCAweDRmLAorICAweGYwLCAweGFlLCAweDJjLCAweGU1LCAweDJkLCAweDkwLCAweDc4LCAweDUwLCAweGYwLCAweDkwLCAweDc4LCAweDUxLCAweDc0LCAweGMwLCAweGYwfX0sCisgezB4MTRjNiwgNjQsIHsgMHhlNCwgMHg5MCwgMHg3OCwgMHg1MiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg1NCwgMHhlNSwgMHgyMywgMHhmMCwgMHg5MCwgMHg3OCwgMHg1NywgMHg3NCwgMHgwNCwgMHhmMCwKKyAgMHhlNCwgMHg5MCwgMHg3OCwgMHg1NSwgMHhmMCwgMHg5MCwgMHg3OCwgMHg1NSwgMHhlMCwgMHg2MCwgMHhmYSwgMHgyMiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgwNCwKKyAgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxNCwgMHg2MCwgMHgwZiwgMHgxNCwgMHg2MCwgMHgxMywgMHgxNCwgMHg2MCwKKyAgMHgxNywgMHg4MCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhlZiwgMHhmMCwgMHg4MCwgMHgxMywgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlZiwgMHhmMH19LAorIHsweDE1MDYsIDY0LCB7IDB4ODAsIDB4MGMsIDB4OTAsIDB4N2YsIDB4Y2IsIDB4ZWYsIDB4ZjAsIDB4ODAsIDB4MDUsIDB4OTAsIDB4N2YsIDB4Y2QsIDB4ZWYsIDB4ZjAsIDB4ZTUsIDB4MTYsIDB4NDIsCisgIDB4MmEsIDB4MjIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4NjAsCisgIDB4MGYsIDB4MTQsIDB4NjAsIDB4MTMsIDB4MTQsIDB4NjAsIDB4MTcsIDB4ODAsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZWYsIDB4ZjAsIDB4ODAsIDB4MTMsCisgIDB4OTAsIDB4N2YsIDB4YjksIDB4ZWYsIDB4ZjAsIDB4ODAsIDB4MGMsIDB4OTAsIDB4N2YsIDB4YmIsIDB4ZWYsIDB4ZjAsIDB4ODAsIDB4MDUsIDB4OTB9fSwKKyB7MHgxNTQ2LCA2NCwgeyAweDdmLCAweGJkLCAweGVmLCAweGYwLCAweGU1LCAweDE2LCAweDQyLCAweDJhLCAweDIyLCAweGFlLCAweDA3LCAweGU0LCAweGZmLCAweGU1LCAweDE1LCAweDI0LCAweDMyLAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweGZkLCAweDEyLCAweDE2LCAweDQ3LCAweDkwLCAweDc4LAorICAweDQxLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVlLCAweGYwLCAweGU0LCAweGU1LCAweDE1LCAweDI0LCAweDMyLCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDgwLCAweGZkLCAweDEyLCAweDE2LCAweDQ3LCAweDIyLCAweGMwLCAweGUwfX0sCisgezB4MTU4NiwgNjQsIHsgMHhjMCwgMHhmMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhjMCwgMHhkMCwKKyAgMHg3NSwgMHhkMCwgMHgwOCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhOSwgMHg3NCwgMHgwMSwgMHhmMCwgMHgxMiwgMHgxMywgMHgxMiwgMHhkMCwKKyAgMHhkMCwgMHhkMCwgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhmMCwgMHhkMCwgMHhlMCwgMHgzMiwKKyAgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MX19LAorIHsweDE1YzYsIDY0LCB7IDB4NzQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsCisgIDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsCisgIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsCisgIDB4MDQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTUsIDB4MTV9fSwKKyB7MHgxNjA2LCA2NCwgeyAweDI0LCAweDM3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDIyLAorICAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDAzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LAorICAweDA2LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweDAzLCAweGYwLCAweGU1LCAweDE1LCAweDI0LAorICAweDM3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwfX0sCisgezB4MTY0NiwgNjQsIHsgMHgyMiwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwMywgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwKKyAgMHg4MywgMHhlMCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwNywgMHhmMCwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwNSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZCwgMHhmMCwgMHgyMiwgMHg5MCwKKyAgMHg3OCwgMHg0MSwgMHg3NCwgMHgwMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3OCwgMHg0MX19LAorIHsweDE2ODYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzcsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4ZTUsIDB4MTUsCisgIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4NjAsIDB4MGUsIDB4MTQsIDB4NjAsIDB4MTEsCisgIDB4MTQsIDB4NjAsIDB4MTQsIDB4ODAsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YzYsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4YzgsIDB4ZTB9fSwKKyB7MHgxNmM2LCA2NCwgeyAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweGNhLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweGNjLCAweGUwLCAweGZmLCAweDIyLCAweGU1LCAweDE1LCAweDI0LAorICAweDA0LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDE0LCAweDYwLCAweDBlLCAweDE0LCAweDYwLCAweDExLCAweDE0LAorICAweDYwLCAweDE0LCAweDgwLCAweDAwLCAweDkwLCAweDdmLCAweGI2LCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweGI4LCAweGUwLCAweGZmLCAweDIyLAorICAweDkwLCAweDdmLCAweGJhLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweGJjLCAweGUwLCAweGZmLCAweDIyLCAweGU1LCAweDE1LCAweDI0fX0sCisgezB4MTcwNiwgNjQsIHsgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxNCwgMHg2MCwgMHgwZSwgMHgxNCwgMHg2MCwgMHgxMSwgMHgxNCwgMHg2MCwKKyAgMHgxNCwgMHg4MCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwKKyAgMHg3ZiwgMHhjYiwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhjZCwgMHhlMCwgMHhmZiwgMHgyMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwKKyAgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhjNCwgMHhlNCwgMHhmMH19LAorIHsweDE3NDYsIDY0LCB7IDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsCisgIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4OTAsIDB4N2IsIDB4NDEsIDB4ZTAsIDB4ZjUsIDB4MzYsIDB4NDMsIDB4MTMsIDB4MTAsIDB4YTMsIDB4ZTAsCisgIDB4NjAsIDB4MDksIDB4OTAsIDB4N2YsIDB4ZDcsIDB4NzQsIDB4MTcsIDB4ZjAsIDB4NzQsIDB4MzcsIDB4ZjAsIDB4OTAsIDB4N2IsIDB4NDMsIDB4ZTAsIDB4ZjUsCisgIDB4MzcsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4ZjAsIDB4ZjUsIDB4MjksIDB4ZTAsIDB4NjAsIDB4MDIsIDB4ZDIsIDB4MGEsIDB4MjIsIDB4YzAsIDB4ZTB9fSwKKyB7MHgxNzg2LCA2NCwgeyAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweGQyLCAweDAxLCAweDUzLCAweDkxLAorICAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDAxLCAweGYwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLAorICAweDgzLCAweGQwLCAweGUwLCAweDMyLCAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LAorICAweDc1LCAweDg2LCAweDAwLCAweGQyLCAweDA4LCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA4LCAweGYwLCAweGQwfX0sCisgezB4MTdjNiwgNjQsIHsgMHg4NiwgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHgxMiwgMHgxOCwgMHhjMCwgMHhhZSwgMHgwNywKKyAgMHgxMiwgMHgxOCwgMHhjMCwgMHhhZCwgMHgwNywgMHhlZSwgMHg2ZCwgMHg2MCwgMHgxMCwgMHgxMiwgMHgxOCwgMHhjMCwgMHhhZSwgMHgwNywgMHhlZSwgMHg2ZCwKKyAgMHg2MCwgMHgwNywgMHgxMiwgMHgxOCwgMHhjMCwgMHhhZCwgMHgwNywgMHg4MCwgMHhlYywgMHhhZiwgMHgwNiwgMHgyMiwgMHg3NCwgMHgwMCwgMHhmNSwgMHg4NiwKKyAgMHg5MCwgMHhmZCwgMHhhNSwgMHg3YywgMHgwNSwgMHhhMywgMHhlNSwgMHg4MiwgMHg0NSwgMHg4MywgMHg3MCwgMHhmOSwgMHgyMiwgMHg5MCwgMHg3Zn19LAorIHsweDE4MDYsIDY0LCB7IDB4ZDYsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4NDMsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4ZDYsCisgIDB4ZTAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4MzAsIDB4MGIsIDB4MDQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4N2YsCisgIDB4ZjQsIDB4N2UsIDB4MDEsIDB4MTIsIDB4MTgsIDB4NmIsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjAsIDB4MjIsIDB4MTIsIDB4MTMsCisgIDB4N2MsIDB4MTIsIDB4MTgsIDB4MDQsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4MzAsIDB4ZTcsIDB4MGEsIDB4N2YsIDB4MDUsIDB4N2UsIDB4MDB9fSwKKyB7MHgxODQ2LCA2NCwgeyAweDEyLCAweDE4LCAweDZiLCAweDEyLCAweDE4LCAweDllLCAweDEyLCAweDBhLCAweGI4LCAweDIyLCAweDAzLCAweDM1LCAweDgwLCAweDAwLCAweDAwLCAweDAzLCAweDJlLAorICAweDgxLCAweDAwLCAweDAwLCAweGMxLCAweDg1LCAweGMxLCAweDgxLCAweGMxLCAweDA4LCAweGMxLCAweDAwLCAweGMxLCAweDA2LCAweDAxLCAweDIyLCAweDAwLAorICAweDAxLCAweDI0LCAweDAwLCAweDAwLCAweDhlLCAweDE4LCAweDhmLCAweDE5LCAweGU1LCAweDE5LCAweDE1LCAweDE5LCAweGFlLCAweDE4LCAweDcwLCAweDAyLAorICAweDE1LCAweDE4LCAweDRlLCAweDYwLCAweDA4LCAweDEyLCAweDE3LCAweGYzLCAweDEyLCAweDE3LCAweGYzLCAweDgwLCAweGViLCAweDIyLCAweGU1fX0sCisgezB4MTg4NiwgNjQsIHsgMHgxNSwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHgwNCwgMHhmZiwgMHg0NCwgMHgxMCwgMHg5MCwgMHg3ZiwKKyAgMHhkNywgMHhmMCwgMHhlZiwgMHg0NCwgMHgzMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg3ZiwgMHgwZCwKKyAgMHg3ZSwgMHgwMCwgMHgxMiwgMHgxOCwgMHg2YiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3OCwgMHg0MSwKKyAgMHg3NCwgMHgwMiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHgwMywgMHhmMH19LAorIHsweDE4YzYsIDY0LCB7IDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsCisgIDB4MjIsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4MDUsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4NzgsIDB4NDEsCisgIDB4NzQsIDB4MDYsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4NzgsIDB4NDEsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4NTMsIDB4ZDgsIDB4ZWYsIDB4MzIsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZmYsIDB4MDB9fSwKKyB7MHgxOTA2LCA2NCwgeyAweDAwLCAweDQwLCAweGNkLCAweDA2LCAweDBhLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAyLCAweDAwLCAweDA0LCAweDA5LCAweDAyLCAweDc0LCAweDAwLCAweDAxLAorICAweDAxLCAweDAwLCAweGEwLCAweDMyLCAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweDBlLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAxLAorICAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAyLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAzLCAweDAyLCAweDQwLAorICAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA0LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA1LCAweDAyLCAweDQwLCAweDAwfX0sCisgezB4MTk0NiwgNjQsIHsgMHgwMCwgMHgwNywgMHgwNSwgMHgwNiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwKKyAgMHg4MSwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4MywgMHgwMiwKKyAgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NSwgMHgwMiwgMHg0MCwgMHgwMCwKKyAgMHgwMSwgMHgwNywgMHgwNSwgMHg4NiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHg4NywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMX19LAorIHsweDE5ODYsIDY0LCB7IDB4MDQsIDB4MDMsIDB4MDksIDB4MDQsIDB4NDgsIDB4MDMsIDB4NGIsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsCisgIDB4MDAsIDB4NmUsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjksIDB4MDAsIDB4NzYsCisgIDB4MDAsIDB4NjksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NjksIDB4MDAsIDB4NmYsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NjYsCisgIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NzksIDB4MDB9fSwKKyB7MHgxOWM2LCA2NCwgeyAweDczLCAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDYzLCAweDAwLCAweDJlLCAweDAwLCAweDM2LCAweDAzLCAweDU1LCAweDAwLCAweDUzLAorICAweDAwLCAweDQyLCAweDAwLCAweDIwLCAweDAwLCAweDM0LCAweDAwLCAweDJkLCAweDAwLCAweDcwLCAweDAwLCAweDZmLCAweDAwLCAweDcyLCAweDAwLCAweDc0LAorICAweDAwLCAweDIwLCAweDAwLCAweDUzLCAweDAwLCAweDY1LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDYxLCAweDAwLCAweDZjLCAweDAwLCAweDIwLAorICAweDAwLCAweDQxLCAweDAwLCAweDY0LCAweDAwLCAweDYxLCAweDAwLCAweDcwLCAweDAwLCAweDc0LCAweDAwLCAweDY1LCAweDAwLCAweDcyLCAweDAwfX0sCisgezB4MWEwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDFhNDYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxYTg2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MWFjNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxNywgMHg4NCwgMHgwMCwgMHgwMiwgMHgxYn19LAorIHsweDFiMDYsIDIxLCB7IDB4MDQsIDB4MDAsIDB4MDIsIDB4MTcsIDB4MzIsIDB4MDAsIDB4MDIsIDB4MTcsIDB4YWIsIDB4MDAsIDB4MDIsIDB4MWIsIDB4MTAsIDB4MDAsIDB4MDIsIDB4MWIsIDB4MTQsCisgIDB4MDAsIDB4MDIsIDB4MTUsIDB4ODR9fSwKKyB7MHhmZmZmLCAwLCB7MHgwMH19Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhNDl3bGNfZncuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTQ5d2xjX2Z3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVmMDZhMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTQ5d2xjX2Z3LmgKQEAgLTAsMCArMSw0NzYgQEAKKy8qIGtleXNwYW5fdXNhNDl3X2Z3LmgKKworCVRoZSBmaXJtd2FyZSBjb250YWluZWQgaGVyZWluIGFzIGtleXNwYW5fdXNhNDl3X2Z3LmggaXMKKworCQlDb3B5cmlnaHQgKEMpIDE5OTktMjAwMworCQlLZXlzcGFuLCBBIGRpdmlzaW9uIG9mIElubm9TeXMgSW5jb3Jwb3JhdGVkICgiS2V5c3BhbiIpCisJCQorCWFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZCBvcgorCXB1YmxpYyBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGZyb20gd2hpY2ggdGhpcyBmaXJtd2FyZSBpbWFnZSBpcworCWRlcml2ZWQuICBFeGNlcHQgYXMgbm90ZWQgYmVsb3cgdGhpcyBmaXJtd2FyZSBpbWFnZSBtYXkgbm90IGJlIAorCXJlcHJvZHVjZWQsIHVzZWQsIHNvbGQgb3IgdHJhbnNmZXJyZWQgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgCisJS2V5c3BhbidzIHByaW9yIHdyaXR0ZW4gY29uc2VudC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKwlQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgCisJaW1hZ2UgYXMgcGFydCBvZiBhIExpbnV4IG9yIG90aGVyIE9wZW4gU291cmNlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsIAorCWluIHRleHQgb3IgYmluYXJ5IGZvcm0gYXMgcmVxdWlyZWQuIAorCisJVGhpcyBmaXJtd2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggIAorCUtleXNwYW4gaGFyZHdhcmUuICBEaXN0cmlidXRpb24gYW5kL29yIE1vZGlmaWNhdGlvbiBvZiB0aGUgCisJa2V5c3Bhbi5jIGRyaXZlciB3aGljaCBpbmNsdWRlcyB0aGlzIGZpcm13YXJlLCBpbiB3aG9sZSBvciBpbiAKKwlwYXJ0LCByZXF1aXJlcyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgc3RhdGVtZW50LiIKKworc3RhdGljIGNoYXIgdGhlRmlybXdhcmVEYXRlNDlbXSA9CisJIjAyLzE0LzIwMDIgIDAyOjM3cCAgICAgICAgICAgICAgMTksMzQ3IFVTQTQ5IjsKKworCisKK3N0YXRpYyBjaGFyIHRoZUZpcm13YXJlRGF0ZTY1W10gPQorCSIwMS8zMS8yMDAzICAwOTozNGEgICAgICAgICAgICAgIDE5LDMzMSBVU0E2NSI7CisKKworKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBlenVzYl9oZXhfcmVjb3JkIGtleXNwYW5fdXNhNDl3bGNfZmlybXdhcmVbXSA9IHsKKyB7MHg3ZjkyLCAgMSwgeyAweDAxfX0sCisgezB4MDAzMywgIDMsIHsgMHgwMiwgMHgxOCwgMHhmYn19LAorIHsweDAwMzYsIDEzLCB7IDB4ZTUsIDB4MTEsIDB4MDQsIDB4OTAsIDB4NzgsIDB4NDEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZTAsIDB4ZmYsIDB4MjJ9fSwKKyB7MHgwMDQ2LCAxNiwgeyAweGU0LCAweGZmLCAweDc0LCAweDQwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGUwLCAweGZlLCAweGU1LCAweDE1fX0sCisgezB4MDA1NiwgMTYsIHsgMHgyNCwgMHgwNCwgMHhmZCwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmYSwgMHhhOSwgMHgwNSwgMHg3YiwgMHgwMSwgMHhlZiwgMHg3YywgMHgwMCwgMHgyOSwgMHhmOX19LAorIHsweDAwNjYsIDE2LCB7IDB4ZWMsIDB4M2EsIDB4ZmEsIDB4ZWUsIDB4MTIsIDB4MTEsIDB4ZWMsIDB4MGYsIDB4YmYsIDB4MjIsIDB4ZDcsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MDUsIDB4ZjV9fSwKKyB7MHgwMDc2LCAxNiwgeyAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDcwLCAweDAzLCAweDAyLCAweDAxLCAweDM0LCAweGU1LCAweDE1LCAweDI0LCAweDA5fX0sCisgezB4MDA4NiwgMTYsIHsgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg3MCwgMHgwZSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgwYSwgMHhmNSwgMHg4Mn19LAorIHsweDAwOTYsIDE2LCB7IDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MTgsIDB4N2YsIDB4MDEsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTYsIDB4NmIsIDB4ZTV9fSwKKyB7MHgwMGE2LCAxNiwgeyAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGNmLCAweGYwLCAweDgwLCAweDQxfX0sCisgezB4MDBiNiwgMTYsIHsgMHhlNSwgMHgxNSwgMHgyNCwgMHgwNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHgxMiwgMHgwMCwgMHgwM319LAorIHsweDAwYzYsIDE2LCB7IDB4ZTUsIDB4MTUsIDB4MjQsIDB4MDcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTUsIDB4YWJ9fSwKKyB7MHgwMGQ2LCAxNiwgeyAweDdmLCAweDAxLCAweGU1LCAweDE1LCAweDI0LCAweDA4LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZkLCAweDEyfX0sCisgezB4MDBlNiwgMTYsIHsgMHgxNiwgMHg2YiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgzMH19LAorIHsweDAwZjYsIDE2LCB7IDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjB9fSwKKyB7MHgwMDAzLCAxNiwgeyAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGYzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0fX0sCisgezB4MDAxMywgMTYsIHsgMHhmMCwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMywgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNH19LAorIHsweDAwMjMsIDE2LCB7IDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjJ9fSwKKyB7MHgwMDQzLCAgMywgeyAweDAyLCAweDFiLCAweDAwfX0sCisgezB4MDAwMCwgIDMsIHsgMHgwMiwgMHgxMCwgMHg5MH19LAorIHsweDAxMDYsIDY0LCB7IDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjQsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsCisgIDB4ZTAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjIsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzYsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDYsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsCisgIDB4MGIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MzIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MGN9fSwKKyB7MHgwMTQ2LCA2NCwgeyAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDNmLCAweGZmLCAweGU1LCAweDE1LCAweDI0LCAweDM3LCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGYzLCAweGYwLCAweGU1LCAweDE1LCAweDI0LAorICAweDM3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGU1LCAweDE1LCAweDI0LAorICAweDBkLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDcwLCAweDAzLCAweDAyLCAweDAyLCAweDRmLCAweGU1fX0sCisgezB4MDE4NiwgNjQsIHsgMHgxNSwgMHgyNCwgMHgxNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgxMSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMiwKKyAgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwgMHg4MCwgMHgwZiwgMHhlNSwgMHgxNSwgMHgyNCwKKyAgMHgzMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHhlNCwgMHhmZiwgMHhlNSwgMHgxNSwKKyAgMHgyNCwgMHgzMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZCwgMHgxMiwgMHgxNiwgMHg2YiwgMHhlNX19LAorIHsweDAxYzYsIDY0LCB7IDB4MTUsIDB4MjQsIDB4MGUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzMsCisgIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ODAsIDB4MGYsIDB4ZTUsIDB4MTUsIDB4MjQsCisgIDB4MzMsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzMsCisgIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmMsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MGZ9fSwKKyB7MHgwMjA2LCA2NCwgeyAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDJmLCAweGU1LCAweDE1LCAweDI0LCAweDMzLCAweGY1LCAweDgyLCAweGU0LAorICAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDEwLCAweGY1LCAweDgyLCAweGU0LCAweDM1LAorICAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweDEyLCAweDE2LCAweDBiLCAweGU1LCAweDE1LCAweDI0LCAweDExLCAweGY1LCAweDgyLCAweGU0LCAweDM1LAorICAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweDEyLCAweDE2LCAweDNiLCAweGU1LCAweDE1LCAweDI0LCAweDMzLCAweGY1LCAweDgyLCAweGU0fX0sCisgezB4MDI0NiwgNjQsIHsgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHgxMiwgMHgxNSwgMHhkYiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwKKyAgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHg0NCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwKKyAgMHg4MywgMHhlMCwgMHg2MCwgMHgxMSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwKKyAgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgwZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNX19LAorIHsweDAyODYsIDY0LCB7IDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjQsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzksIDB4ZjUsIDB4ODIsCisgIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MTIsIDB4ZjUsIDB4ODIsCisgIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4NDQsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MTMsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsCisgIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTR9fSwKKyB7MHgwMmM2LCA2NCwgeyAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDgwLCAweDBmLCAweGU1LCAweDE1LCAweDI0LCAweDM5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LAorICAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGY0LCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM5LAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDE2LAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDE1LCAweDI0LCAweDM1LCAweGY1LCAweDgyfX0sCisgezB4MDMwNiwgNjQsIHsgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwKKyAgMHg4MywgMHhlMCwgMHgzMCwgMHhlMCwgMHgxMSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg4MCwgMHgwZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwKKyAgMHg4MywgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNX19LAorIHsweDAzNDYsIDY0LCB7IDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4M2IsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4ZTUsCisgIDB4MTUsIDB4MjQsIDB4MTksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MTEsIDB4ZTUsIDB4MTUsIDB4MjQsCisgIDB4MzksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MTAsIDB4ZjAsIDB4ODAsIDB4MGYsIDB4ZTUsIDB4MTUsCisgIDB4MjQsIDB4MzksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4Nzh9fSwKKyB7MHgwMzg2LCA2NCwgeyAweDQxLCAweDc0LCAweGY0LCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM5LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDkwLAorICAweGMwLCAweDAwLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDFhLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLAorICAweDZiLCAweGU1LCAweDE1LCAweDI0LCAweDM3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGJmLCAweGYwLAorICAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGYzLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0fX0sCisgezB4MDNjNiwgNjQsIHsgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHg3ZiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMSwgMHhmMCwgMHgxMiwgMHgwMCwKKyAgMHgzNiwgMHhlZiwgMHg1NCwgMHhmZSwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwKKyAgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmZCwgMHhmZiwgMHhmMCwgMHhmZCwgMHhlNCwgMHhmZiwgMHgxMiwgMHgxNiwgMHg2YiwgMHhlNSwgMHgxNSwKKyAgMHgyNCwgMHgyYywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyYn19LAorIHsweDA0MDYsIDY0LCB7IDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4ZTUsIDB4MTYsIDB4NDIsIDB4MTMsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MWIsCisgIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NzAsIDB4MGUsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjUsIDB4ZjUsIDB4ODIsCisgIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MjgsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsCisgIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZmYsIDB4ZjAsIDB4ZmQsIDB4ZTQsIDB4ZmYsIDB4MTIsIDB4MTYsIDB4NmIsIDB4ZTV9fSwKKyB7MHgwNDQ2LCA2NCwgeyAweDE1LCAweDI0LCAweDJiLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDAxLCAweGYwLCAweGU1LCAweDE2LCAweDQyLCAweDEzLAorICAweGU1LCAweDE1LCAweDI0LCAweDFjLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweDcwLCAweDBlLCAweGU1LAorICAweDE1LCAweDI0LCAweDI1LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDJhLCAweDkwLCAweDc4LCAweDQxLAorICAweDc0LCAweGYyLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM2LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwfX0sCisgezB4MDQ4NiwgNjQsIHsgMHg0NCwgMHgwNCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHhlZiwgMHg2MCwgMHgwZiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwKKyAgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgxZCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwKKyAgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwgMHgyNywgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMywgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNywgMHhmNX19LAorIHsweDA0YzYsIDY0LCB7IDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MWUsCisgIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MjgsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzIsIDB4ZjUsIDB4ODIsCisgIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZmYsIDB4ZjAsIDB4ZmQsIDB4ZTQsIDB4ZmYsIDB4MTIsIDB4MTYsIDB4NmIsCisgIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MmQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ZTV9fSwKKyB7MHgwNTA2LCA2NCwgeyAweDE2LCAweDQyLCAweDEzLCAweGU1LCAweDE1LCAweDI0LCAweDFmLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDcwLCAweDBlLAorICAweGU1LCAweDE1LCAweDI0LCAweDI1LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDI3LCAweGU1LCAweDE1LAorICAweDI0LCAweDMyLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDAxLCAweGZmLCAweGYwLCAweGZkLCAweGU0LAorICAweGZmLCAweDEyLCAweDE2LCAweDZiLCAweGU1LCAweDE1LCAweDI0LCAweDJkLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzfX0sCisgezB4MDU0NiwgNjQsIHsgMHhlNCwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgxMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgyMCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHg3MCwgMHgwZSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg2MCwKKyAgMHgxOCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwKKyAgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwMiwgMHg5MCwgMHhjMCwgMHgwMCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyMSwgMHhmNSwgMHg4Mn19LAorIHsweDA1ODYsIDY0LCB7IDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MGYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsCisgIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsCisgIDB4ODMsIDB4ZTAsIDB4NjAsIDB4MWYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4NzQsCisgIDB4MDEsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4M2EsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjB9fSwKKyB7MHgwNWM2LCA2NCwgeyAweGU1LCAweDE2LCAweDQyLCAweDEzLCAweGU1LCAweDE1LCAweDI0LCAweDIzLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLAorICAweDAzLCAweDEyLCAweDE4LCAweDdhLCAweGU1LCAweDE1LCAweDI0LCAweDI0LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLAorICAweDYwLCAweDIzLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDA4LAorICAweGYwLCAweGU1LCAweDE2LCAweGM0LCAweDU0LCAweGYwLCAweGZmLCAweDQyLCAweDExLCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDRmLCAweGYwfX0sCisgezB4MDYwNiwgNjQsIHsgMHg5MCwgMHg3OCwgMHg0MSwgMHhlMCwgMHg0ZiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywKKyAgMHhlMCwgMHg2MCwgMHgyNCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwKKyAgMHhmNywgMHhmMCwgMHhlNSwgMHgxNiwgMHhjNCwgMHg1NCwgMHhmMCwgMHhmNCwgMHhmZiwgMHg1MiwgMHgxMSwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlMCwgMHg1ZiwKKyAgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHhlMCwgMHg1ZiwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhlOSwgMHhlMCwgMHgxMiwgMHgxMSwgMHhmZX19LAorIHsweDA2NDYsIDY0LCB7IDB4MDcsIDB4OTksIDB4MDAsIDB4MDgsIDB4MGQsIDB4MDEsIDB4MDgsIDB4NzksIDB4MDMsIDB4MDYsIDB4NjIsIDB4MDYsIDB4MDcsIDB4OGEsIDB4MDgsIDB4MDcsIDB4N2UsCisgIDB4MDksIDB4MDcsIDB4NjYsIDB4MGEsIDB4MDcsIDB4NzUsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4YzgsIDB4OTAsIDB4N2YsIDB4ZWIsIDB4ZTAsIDB4MjQsCisgIDB4ZmUsIDB4NjAsIDB4MWMsIDB4MTQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDcsIDB4MTQsIDB4MjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MDcsIDB4NWMsCisgIDB4NzQsIDB4MTksIDB4OTAsIDB4N2YsIDB4ZDQsIDB4ZjAsIDB4NzQsIDB4MDAsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MDgsIDB4Y2Z9fSwKKyB7MHgwNjg2LCA2NCwgeyAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDA0LCAweDc1LCAweDgyLCAweDE3LCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDMwLAorICAweGUwLCAweDA0LCAweDdmLCAweDAyLCAweDgwLCAweDAyLCAweDdmLCAweDAzLCAweDc1LCAweDgyLCAweDgyLCAweDc1LCAweDgzLCAweDE5LCAweGVmLCAweGYwLAorICAweDc1LCAweDgyLCAweDZkLCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDc1LCAweDgyLCAweDY2LCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDc1LCAweDgyLAorICAweDVmLCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDc1LCAweDgyLCAweDU4LCAweDc1LCAweDgzLCAweDE5LCAweGYwLCAweDkwLCAweDdmLCAweGVhfX0sCisgezB4MDZjNiwgNjQsIHsgMHhlMCwgMHgzMCwgMHhlMSwgMHgwNCwgMHg3ZiwgMHg2NCwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgzMiwgMHg3NSwgMHg4MiwgMHgxYSwgMHg3NSwgMHg4MywgMHgxOSwgMHhlZiwKKyAgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlZiwgMHhlMCwgMHhmZSwgMHg5MCwgMHg3ZiwgMHhlZSwgMHhlMCwgMHg3YywgMHgwMCwgMHgyNCwgMHgwMCwgMHhmNSwgMHgxOCwKKyAgMHhlYywgMHgzZSwgMHhmNSwgMHgxNywgMHg3NSwgMHgzMywgMHgxOSwgMHg3NSwgMHgzNCwgMHgxMiwgMHg3NSwgMHg4MiwgMHgxNCwgMHg3NSwgMHg4MywgMHgxOSwKKyAgMHhlMCwgMHg3NSwgMHgyNywgMHgwMCwgMHhmNSwgMHgyOCwgMHhkMywgMHhlNSwgMHgyOCwgMHg5NSwgMHgxOCwgMHhlNSwgMHgyNywgMHg5NSwgMHgxN319LAorIHsweDA3MDYsIDY0LCB7IDB4NDAsIDB4MDYsIDB4ODUsIDB4MTcsIDB4MjcsIDB4ODUsIDB4MTgsIDB4MjgsIDB4MTIsIDB4MTMsIDB4MGQsIDB4MDIsIDB4MDgsIDB4Y2YsIDB4OTAsIDB4N2YsIDB4ZWEsCisgIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MTQsIDB4NWYsIDB4ZWEsIDB4NDksIDB4NjAsIDB4MzIsIDB4OTAsIDB4N2YsIDB4ZWUsIDB4ZTAsIDB4NzUsIDB4MTcsIDB4MDAsCisgIDB4ZjUsIDB4MTgsIDB4YWUsIDB4MDIsIDB4YWYsIDB4MDEsIDB4OGUsIDB4MzMsIDB4OGYsIDB4MzQsIDB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4ZmUsCisgIDB4YTMsIDB4ZTAsIDB4OGUsIDB4MjcsIDB4ZjUsIDB4MjgsIDB4ZDMsIDB4OTUsIDB4MTgsIDB4ZTUsIDB4MjcsIDB4OTUsIDB4MTcsIDB4NDAsIDB4MDZ9fSwKKyB7MHgwNzQ2LCA2NCwgeyAweDg1LCAweDE3LCAweDI3LCAweDg1LCAweDE4LCAweDI4LCAweDEyLCAweDEzLCAweDBkLCAweDAyLCAweDA4LCAweGNmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LAorICAweDAxLCAweGYwLCAweDAyLCAweDA4LCAweGNmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDA4LCAweGNmLCAweDkwLAorICAweDdmLCAweDAwLCAweGU1LCAweDI1LCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwLCAweDAyLCAweDA4LCAweGNmLCAweDkwLCAweDdmLAorICAweGVhLCAweGUwLCAweGY1LCAweDI1LCAweDAyLCAweDA4LCAweGNmLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGY1LCAweDIyLCAweDEyLCAweDBhfX0sCisgezB4MDc4NiwgNjQsIHsgMHhjZSwgMHgwMiwgMHgwOCwgMHhjZiwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhlNSwgMHgyMiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHgwMiwKKyAgMHgwOCwgMHhjZiwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHg3ZiwgMHg2MCwgMHgyNCwgMHgxNCwgMHg2MCwgMHgzMSwgMHgyNCwgMHgwMiwgMHg3MCwKKyAgMHg1YiwgMHhhMiwgMHgwMCwgMHhlNCwgMHgzMywgMHhmZiwgMHgyNSwgMHhlMCwgMHhmZiwgMHhhMiwgMHgwNiwgMHhlNCwgMHgzMywgMHg0ZiwgMHg5MCwgMHg3ZiwKKyAgMHgwMCwgMHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwOCwgMHhjZiwgMHhlNH19LAorIHsweDA3YzYsIDY0LCB7IDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDgsIDB4Y2YsIDB4OTAsIDB4N2YsCisgIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsCisgIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjAsCisgIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDgsIDB4Y2YsIDB4OTAsIDB4N2YsIDB4YjR9fSwKKyB7MHgwODA2LCA2NCwgeyAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDA4LCAweGNmLCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDFkLCAweDI0LCAweDAyLAorICAweDYwLCAweDAzLCAweDAyLCAweDA4LCAweGNmLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA1LCAweGMyLCAweDAwLCAweDAyLCAweDA4LAorICAweGNmLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDA4LCAweGNmLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLAorICAweDM4LCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0fX0sCisgezB4MDg0NiwgNjQsIHsgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHhlYywgMHhlMCwgMHg1NCwgMHg4MCwgMHhmZiwgMHgxMywgMHgxMywgMHgxMywgMHg1NCwgMHgxZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHg5MCwKKyAgMHg3ZiwgMHhkNywgMHhmMCwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHg4MCwgMHg1ZiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwKKyAgMHg4MCwgMHg1NiwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxOCwgMHgyNCwgMHgwMiwgMHg3MCwgMHg0YSwgMHg5MH19LAorIHsweDA4ODYsIDY0LCB7IDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDQsIDB4ZDIsIDB4MDAsIDB4ODAsIDB4M2YsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsCisgIDB4ODAsIDB4MzYsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsCisgIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsCisgIDB4N2YsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MTAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjB9fSwKKyB7MHgwOGM2LCA2NCwgeyAweDgwLCAweDA3LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDIyLAorICAweGU1LCAweDEyLCAweDU0LCAweDBmLCAweDcwLCAweDAzLCAweDAyLCAweDA5LCAweGM4LCAweDEyLCAweDE2LCAweDlhLCAweGVmLCAweDIwLCAweGUxLCAweDc1LAorICAweDEyLCAweDE2LCAweGY4LCAweGVmLCAweDE0LCAweGY1LCAweDE4LCAweDEyLCAweDE4LCAweGM1LCAweGVmLCAweDI1LCAweDE4LCAweGZmLCAweGU0LCAweDMzLAorICAweGZlLCAweGMzLCAweGVmLCAweDk0LCAweDgwLCAweGVlLCAweDY0LCAweDgwLCAweDk0LCAweDgwLCAweDUwLCAweDU5LCAweDg1LCAweDE1LCAweDgyfX0sCisgezB4MDkwNiwgNjQsIHsgMHg4NSwgMHgxNCwgMHg4MywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmZiwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHgzMCwgMHhlMCwgMHgxMSwgMHhlNSwKKyAgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg4MCwgMHgwZiwKKyAgMHhlNSwgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHhlNSwKKyAgMHgxNSwgMHgyNCwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMCwgMHhlMiwgMHgxMiwgMHhlNX19LAorIHsweDA5NDYsIDY0LCB7IDB4MTgsIDB4NjAsIDB4MGUsIDB4ZjUsIDB4MjMsIDB4ZWYsIDB4MjQsIDB4MDEsIDB4ZjUsIDB4MmQsIDB4ZTQsIDB4M2UsIDB4ZjUsIDB4MmMsIDB4MTIsIDB4MTQsIDB4YTAsCisgIDB4ZTQsIDB4ZmYsIDB4MTIsIDB4MTQsIDB4ZDcsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsCisgIDB4ZTAsIDB4MzAsIDB4ZTcsIDB4NWQsIDB4MTIsIDB4MTgsIDB4YzUsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4M2IsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsCisgIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmUsIDB4ZWYsIDB4YzMsIDB4OWUsIDB4NTAsIDB4NDgsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MmYsIDB4ZjUsIDB4ODJ9fSwKKyB7MHgwOTg2LCA2NCwgeyAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDAxLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LAorICAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdiLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDNhLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LAorICAweDgzLCAweGU0LCAweGYwLCAweGU1LCAweDE2LCAweDQyLCAweDEzLCAweDkwLCAweDdmLCAweGMyLCAweGUwLCAweDMwLCAweGUxLCAweDEwLCAweGU1LCAweDE1LAorICAweDI0LCAweDI2LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweDI0LCAweDgwLCAweDAzLCAweDEyfX0sCisgezB4MDljNiwgNjQsIHsgMHgxMiwgMHg5YywgMHgxMiwgMHgxNiwgMHhjOSwgMHhlZiwgMHgzMCwgMHhlMSwgMHgwMywgMHgwMiwgMHgwYSwgMHhjZCwgMHgxMiwgMHgxNywgMHhjNywgMHg4ZiwgMHgxOCwKKyAgMHgxMiwgMHgxOCwgMHhkMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwKKyAgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgxOCwgMHhjMywKKyAgMHg5ZiwgMHg1MCwgMHgyOCwgMHgxMiwgMHgxOCwgMHhhOSwgMHhlZiwgMHgzMCwgMHhlMCwgMHgyMSwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOCwgMHhmNX19LAorIHsweDBhMDYsIDY0LCB7IDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjAsIDB4ZTcsIDB4MTIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsCisgIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MGEsIDB4Y2QsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4ZTUsIDB4MTgsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MGEsCisgIDB4Y2QsIDB4YjQsIDB4ODAsIDB4MGYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODN9fSwKKyB7MHgwYTQ2LCA2NCwgeyAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM4LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweGZmLAorICAweDMwLCAweGU3LCAweDI5LCAweGU1LCAweDE4LCAweGQzLCAweDk0LCAweDIwLCAweDQwLCAweDAzLCAweDc1LCAweDE4LCAweDIwLCAweDg1LCAweDE4LCAweDIzLAorICAweDg1LCAweDE1LCAweDgyLCAweDg1LCAweDE0LCAweDgzLCAweGEzLCAweGEzLCAweGUwLCAweGZjLCAweGEzLCAweGUwLCAweDhjLCAweDJjLCAweGY1LCAweDJkLAorICAweDEyLCAweDEzLCAweGNmLCAweGU1LCAweDE4LCAweDI1LCAweGUwLCAweGZmLCAweDEyLCAweDE1LCAweDBkLCAweDIyLCAweGU1LCAweDE4LCAweGQzfX0sCisgezB4MGE4NiwgNjQsIHsgMHg5NCwgMHgzZiwgMHg0MCwgMHgwMywgMHg3NSwgMHgxOCwgMHgzZiwgMHg4NSwgMHgxOCwgMHgyMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgzOCwgMHhmNSwgMHg4MiwgMHhlNCwKKyAgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywgMHhhMywgMHhhMywgMHhlMCwgMHhmYywKKyAgMHhhMywgMHhlMCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywgMHhhMywgMHhhMywKKyAgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHgyNCwgMHgwMSwgMHhmNSwgMHgyZCwgMHhlNCwgMHgzZSwgMHhmNSwgMHgyYywgMHgxMiwgMHgxNCwgMHgxZH19LAorIHsweDBhYzYsIDY0LCB7IDB4ZTUsIDB4MTgsIDB4MDQsIDB4ZmYsIDB4MTIsIDB4MTUsIDB4MGQsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWMsIDB4NzQsCisgIDB4ZmYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTQsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NGEsIDB4MDQsIDB4ZjAsCisgIDB4ZjUsIDB4OGUsIDB4OTAsIDB4N2YsIDB4OTUsIDB4NzQsIDB4YzAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OWUsIDB4NzQsIDB4M2YsIDB4ZjAsIDB4OTAsIDB4N2YsCisgIDB4OTgsIDB4NzQsIDB4MmYsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDMsIDB4NzQsIDB4ZjcsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzgsIDB4NDEsIDB4ZjB9fSwKKyB7MHgwYjA2LCA2NCwgeyAweDkwLCAweDdmLCAweGRmLCAweDc0LCAweDlmLCAweGYwLCAweDkwLCAweDdmLCAweGRlLCAweGYwLCAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweDQ0LCAweDAyLCAweGYwLAorICAweDdlLCAweDdiLCAweDdmLCAweGMwLCAweDc1LCAweDE0LCAweDdiLCAweDc1LCAweDE1LCAweGMwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDJlLCAweGYwLAorICAweDc1LCAweDE2LCAweDAxLCAweDEyLCAweDBmLCAweDI4LCAweDdlLCAweDdiLCAweDdmLCAweGMwLCAweDc1LCAweDE0LCAweDdiLCAweDc1LCAweDE1LCAweGMwLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDJlLCAweGYwLCAweDc1LCAweDE2LCAweDAxLCAweGU1LCAweDE1LCAweDI0LCAweDI2LCAweGY1LCAweDgyfX0sCisgezB4MGI0NiwgNjQsIHsgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg0MCwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywKKyAgMHg3NCwgMHg3ZSwgMHhmMCwgMHhhMywgMHg3NCwgMHg0MCwgMHhmMCwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg4MCwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwKKyAgMHg4MywgMHhhMywgMHhhMywgMHg3NCwgMHg3ZSwgMHhmMCwgMHhhMywgMHg3NCwgMHg4MCwgMHhmMCwgMHg3ZSwgMHg3YywgMHg3ZiwgMHgwMCwgMHg3NSwgMHgxNCwKKyAgMHg3YywgMHg3NSwgMHgxNSwgMHgwMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyZCwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwMiwgMHgxMiwgMHgwZn19LAorIHsweDBiODYsIDY0LCB7IDB4MjgsIDB4N2UsIDB4N2MsIDB4N2YsIDB4MDAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4MDAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MmQsIDB4ZjAsCisgIDB4NzUsIDB4MTYsIDB4MDIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDEsCisgIDB4ZjAsIDB4N2UsIDB4N2QsIDB4N2YsIDB4YzAsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsIDB4ODMsIDB4NzQsIDB4N2QsIDB4ZjAsIDB4YTMsIDB4NzQsCisgIDB4YzAsIDB4ZjAsIDB4N2UsIDB4N2UsIDB4N2YsIDB4MDAsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsIDB4ODMsIDB4YTMsIDB4YTMsIDB4NzR9fSwKKyB7MHgwYmM2LCA2NCwgeyAweDdlLCAweGYwLCAweGEzLCAweDc0LCAweDAwLCAweGYwLCAweDdlLCAweDdjLCAweDdmLCAweDQwLCAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDQwLCAweDkwLAorICAweDdmLCAweDk4LCAweDc0LCAweDJiLCAweGYwLCAweDc1LCAweDE2LCAweDA0LCAweDEyLCAweDBmLCAweDI4LCAweDdlLCAweDdjLCAweDdmLCAweDQwLCAweDc1LAorICAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDQwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDJiLCAweGYwLCAweDc1LCAweDE2LCAweDA0LCAweGU1LCAweDE1LAorICAweDI0LCAweDI2LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDAyLCAweGYwLCAweDdlLCAweDdkLCAweDdmfX0sCisgezB4MGMwNiwgNjQsIHsgMHg0MCwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywgMHg3NCwgMHg3ZCwgMHhmMCwgMHhhMywgMHg3NCwgMHg0MCwgMHhmMCwgMHg3ZSwgMHg3ZCwgMHg3ZiwKKyAgMHg4MCwgMHg4NSwgMHgxNSwgMHg4MiwgMHg4NSwgMHgxNCwgMHg4MywgMHhhMywgMHhhMywgMHg3NCwgMHg3ZCwgMHhmMCwgMHhhMywgMHg3NCwgMHg4MCwgMHhmMCwKKyAgMHg3ZSwgMHg3YywgMHg3ZiwgMHg4MCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyNywgMHhmMCwKKyAgMHg3NSwgMHgxNiwgMHgwOCwgMHgxMiwgMHgwZiwgMHgyOCwgMHg3ZSwgMHg3YywgMHg3ZiwgMHg4MCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNX19LAorIHsweDBjNDYsIDY0LCB7IDB4ODAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MjcsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDgsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjYsIDB4ZjUsIDB4ODIsIDB4ZTQsCisgIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4N2UsIDB4N2MsIDB4N2YsIDB4YzAsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsIDB4MTQsCisgIDB4ODMsIDB4NzQsIDB4N2MsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4YzAsIDB4ZjAsIDB4N2UsIDB4N2QsIDB4N2YsIDB4MDAsIDB4ODUsIDB4MTUsIDB4ODIsIDB4ODUsCisgIDB4MTQsIDB4ODMsIDB4YTMsIDB4YTMsIDB4NzQsIDB4N2QsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MDAsIDB4ZjAsIDB4YzIsIDB4MGEsIDB4YzIsIDB4MDl9fSwKKyB7MHgwYzg2LCA2NCwgeyAweGU0LCAweGY1LCAweDExLCAweGQyLCAweDAyLCAweDIyLCAweGU1LCAweDEwLCAweDA0LCAweDU0LCAweDAzLCAweGY1LCAweDEwLCAweDE0LCAweDYwLCAweDFmLCAweDE0LAorICAweDYwLCAweDMxLCAweDE0LCAweDYwLCAweDQzLCAweDI0LCAweDAzLCAweDcwLCAweDUyLCAweDdlLCAweDdiLCAweDdmLCAweGMwLCAweDc1LCAweDE0LCAweDdiLAorICAweDc1LCAweDE1LCAweGMwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDJlLCAweGYwLCAweDc1LCAweDE2LCAweDAxLCAweDgwLCAweDNkLCAweDdlLCAweDdjLAorICAweDdmLCAweDAwLCAweDc1LCAweDE0LCAweDdjLCAweDc1LCAweDE1LCAweDAwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDJkLCAweGYwLCAweDc1fX0sCisgezB4MGNjNiwgNjQsIHsgMHgxNiwgMHgwMiwgMHg4MCwgMHgyOCwgMHg3ZSwgMHg3YywgMHg3ZiwgMHg0MCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHg0MCwgMHg5MCwgMHg3ZiwgMHg5OCwKKyAgMHg3NCwgMHgyYiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwNCwgMHg4MCwgMHgxMywgMHg3ZSwgMHg3YywgMHg3ZiwgMHg4MCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwKKyAgMHgxNSwgMHg4MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyNywgMHhmMCwgMHg3NSwgMHgxNiwgMHgwOCwgMHhlNSwgMHgzMiwgMHg1NSwgMHgxNiwgMHg3MCwKKyAgMHgwMywgMHgwMiwgMHgwZSwgMHgyNywgMHhlNSwgMHgxNiwgMHhmNCwgMHg1MiwgMHgzMiwgMHhlNSwgMHgyNiwgMHg1NCwgMHg3ZiwgMHhmZiwgMHg3MH19LAorIHsweDBkMDYsIDY0LCB7IDB4MTcsIDB4ZTUsIDB4MmEsIDB4NTUsIDB4MTYsIDB4NjAsIDB4MzQsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4ZmUsIDB4ZTUsIDB4MTYsIDB4YzQsIDB4NTQsIDB4ZjAsCisgIDB4ZjQsIDB4ZmQsIDB4ZWUsIDB4NWQsIDB4ZjAsIDB4ODAsIDB4MjMsIDB4YmYsIDB4MjAsIDB4MjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsCisgIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MTEsIDB4ZTQsIDB4ZjUsIDB4MmEsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsCisgIDB4ZmYsIDB4ZTUsIDB4MTYsIDB4YzQsIDB4NTQsIDB4ZjAsIDB4ZmUsIDB4ZWYsIDB4NGUsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4M2EsIDB4ZjV9fSwKKyB7MHgwZDQ2LCA2NCwgeyAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDAzLCAweGUwLCAweDE0LCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM0LCAweGY1LAorICAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDYwLCAweDAzLCAweGUwLCAweDE0LCAweGYwLCAweGUwLCAweDYwLCAweDAzLCAweDAyLAorICAweDBlLCAweDI3LCAweDc0LCAweDBhLCAweGYwLCAweDEyLCAweDAwLCAweDM2LCAweGVmLCAweDU0LCAweDAxLCAweGZmLCAweGY1LCAweDE4LCAweGU1LCAweDE1LAorICAweDI0LCAweDJjLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDZmLCAweDYwLCAweDA3LCAweGU1LCAweDE4fX0sCisgezB4MGQ4NiwgNjQsIHsgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgxMywgMHgxMiwgMHgxOCwgMHhlMSwgMHg4ZiwgMHgxOCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyNywgMHhmNSwgMHg4MiwgMHhlNCwKKyAgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgxOCwgMHg1NCwgMHgxMCwgMHhmZSwgMHg2ZiwgMHg2MCwgMHgwNiwgMHhlZSwgMHhmMCwKKyAgMHhlNSwgMHgxNiwgMHg0MiwgMHgxMywgMHhlNSwgMHgxNSwgMHgyNCwgMHgyOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwKKyAgMHhmZiwgMHhlNSwgMHgxOCwgMHg1NCwgMHg4MCwgMHhmZSwgMHg2ZiwgMHg2MCwgMHgwNiwgMHhlZSwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgxM319LAorIHsweDBkYzYsIDY0LCB7IDB4ZTUsIDB4MTUsIDB4MjQsIDB4MjksIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTgsIDB4NTQsIDB4MjAsCisgIDB4ZmUsIDB4NmYsIDB4NjAsIDB4MTUsIDB4ZWUsIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsCisgIDB4ODMsIDB4ZTAsIDB4MzAsIDB4ZTQsIDB4MDQsIDB4ZTUsIDB4MTYsIDB4NDIsIDB4MTMsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MmEsIDB4ZjUsIDB4ODIsIDB4ZTQsCisgIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4MTgsIDB4NTQsIDB4NDAsIDB4ZmUsIDB4NmYsIDB4NjAsIDB4MTUsIDB4ZWV9fSwKKyB7MHgwZTA2LCA2NCwgeyAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDMwLCAweGU1LCAweDA0LCAweGU1LAorICAweDE2LCAweDQyLCAweDEzLCAweGU1LCAweDE1LCAweDI0LCAweDMwLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGU0LCAweGYwLAorICAweDIyLCAweDMwLCAweDA5LCAweDAzLCAweDAyLCAweDBmLCAweDI3LCAweGU1LCAweDI0LCAweDE0LCAweDYwLCAweDJhLCAweDE0LCAweDYwLCAweDQxLCAweDE0LAorICAweDYwLCAweDU4LCAweDE0LCAweDYwLCAweDZmLCAweDI0LCAweDA0LCAweDYwLCAweDAzLCAweDAyLCAweDBlLCAweGU1LCAweDdlLCAweDdiLCAweDdmfX0sCisgezB4MGU0NiwgNjQsIHsgMHhjMCwgMHg3NSwgMHgxNCwgMHg3YiwgMHg3NSwgMHgxNSwgMHhjMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyZSwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwMSwgMHgxMiwKKyAgMHgxMiwgMHg5YywgMHg3NSwgMHgyNCwgMHgwMSwgMHgyMiwgMHg3ZSwgMHg3YywgMHg3ZiwgMHgwMCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHgwMCwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyZCwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwMiwgMHgxMiwgMHgxMiwgMHg5YywgMHg3NSwgMHgyNCwgMHgwMiwgMHgyMiwKKyAgMHg3ZSwgMHg3YywgMHg3ZiwgMHg0MCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHg0MCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyYn19LAorIHsweDBlODYsIDY0LCB7IDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDQsIDB4MTIsIDB4MTIsIDB4OWMsIDB4NzUsIDB4MjQsIDB4MDMsIDB4MjIsIDB4N2UsIDB4N2MsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MTQsCisgIDB4N2MsIDB4NzUsIDB4MTUsIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MjcsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDgsIDB4MTIsIDB4MTIsIDB4OWMsCisgIDB4NzUsIDB4MjQsIDB4MDQsIDB4MjIsIDB4MzAsIDB4MDQsIDB4MzMsIDB4YzIsIDB4MDQsIDB4NTMsIDB4MTMsIDB4ZGYsIDB4ZTQsIDB4ZjUsIDB4MTgsIDB4N2UsCisgIDB4MDAsIDB4N2IsIDB4MDAsIDB4NzQsIDB4MmUsIDB4MjUsIDB4MTgsIDB4ZjksIDB4ZWUsIDB4MzQsIDB4MDAsIDB4ZmEsIDB4MTIsIDB4MTEsIDB4YTZ9fSwKKyB7MHgwZWM2LCA2NCwgeyAweGZmLCAweDc0LCAweDgwLCAweDI1LCAweDE4LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdiLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDE4LCAweGU1LAorICAweDE4LCAweGI0LCAweDAzLCAweGRiLCAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDAzLCAweGYwLCAweDc1LCAweDI0LCAweDA1LCAweDIyLCAweGU1LCAweDM2LAorICAweDYwLCAweDNiLCAweGQ1LCAweDM2LCAweDBhLCAweDUzLCAweDEzLCAweGVmLCAweDMwLCAweDBhLCAweDA0LCAweGQyLCAweDA5LCAweGMyLCAweDBhLCAweGU0LAorICAweGY1LCAweDE4LCAweDdlLCAweDAwLCAweDdiLCAweDAwLCAweDc0LCAweDM1LCAweDI1LCAweDE4LCAweGY5LCAweGVlLCAweDM0LCAweDAwLCAweGZhfX0sCisgezB4MGYwNiwgNjQsIHsgMHgxMiwgMHgxMSwgMHhhNiwgMHhmZiwgMHg3NCwgMHg4MCwgMHgyNSwgMHgxOCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwKKyAgMHgwNSwgMHgxOCwgMHhlNSwgMHgxOCwgMHhiNCwgMHgwMywgMHhkYiwgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwMywgMHhmMCwgMHhlNCwgMHhmNSwgMHgyNCwKKyAgMHgyMiwgMHhlNCwgMHhmNSwgMHgxOSwgMHg3ZSwgMHgwMCwgMHg3YiwgMHgwMSwgMHhlNSwgMHgxNSwgMHgyNSwgMHgxOSwgMHhmOSwgMHhlZSwgMHgzNSwgMHgxNCwKKyAgMHhmYSwgMHhlNCwgMHgxMiwgMHgxMSwgMHhlYywgMHgwNSwgMHgxOSwgMHhlNSwgMHgxOSwgMHhiNCwgMHgzYywgMHhlOCwgMHhlNSwgMHgxNSwgMHgyNH19LAorIHsweDBmNDYsIDY0LCB7IDB4MzUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjMsIDB4ZjAsCisgIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4OTAsIDB4YzAsCisgIDB4MDAsIDB4ZjAsIDB4N2YsIDB4MGMsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4MTYsIDB4NmIsIDB4N2YsIDB4MTAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzMsIDB4ZjUsCisgIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MTIsIDB4MTUsIDB4ZGIsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzR9fSwKKyB7MHgwZjg2LCA2NCwgeyAweGYyLCAweGYwLCAweDdmLCAweDAxLCAweGU1LCAweDE1LCAweDI0LCAweDM2LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGVmLCAweGYwLAorICAweDQ0LCAweDA2LCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGY0LCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM5LAorICAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweDc0LCAweDgwLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDBmLCAweGU0LAorICAweGZkLCAweDEyLCAweDE2LCAweDZiLCAweGU0LCAweGZmLCAweDdlLCAweGEzLCAweGU1LCAweDE1LCAweDI0LCAweDMyLCAweGY1LCAweDgyLCAweGU0fX0sCisgezB4MGZjNiwgNjQsIHsgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlZSwgMHhmMCwgMHhmZCwgMHgxMiwgMHgxNiwgMHg2YiwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMSwgMHhmMCwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHhlNCwgMHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZCwgMHg3ZiwgMHgxMiwgMHgxNiwgMHg2YiwgMHg3ZiwgMHgwMSwgMHgxMiwgMHgxNSwgMHg0MywKKyAgMHg3ZiwgMHgwMywgMHg3ZCwgMHgwNywgMHgxMiwgMHgxNiwgMHg2YiwgMHgyMiwgMHg1MywgMHgxMywgMHgzZiwgMHg5MCwgMHg3YiwgMHhmMSwgMHhlMCwgMHgzMCwKKyAgMHhlMywgMHgxNiwgMHg3ZSwgMHg3YiwgMHg3ZiwgMHhjMCwgMHg3NSwgMHgxNCwgMHg3YiwgMHg3NSwgMHgxNSwgMHhjMCwgMHg5MCwgMHg3ZiwgMHg5OH19LAorIHsweDEwMDYsIDY0LCB7IDB4NzQsIDB4MmUsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDEsIDB4MTIsIDB4MDgsIDB4ZDcsIDB4OTAsIDB4N2MsIDB4MzEsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MTYsIDB4N2UsCisgIDB4N2MsIDB4N2YsIDB4MDAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4MDAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MmQsIDB4ZjAsIDB4NzUsCisgIDB4MTYsIDB4MDIsIDB4MTIsIDB4MDgsIDB4ZDcsIDB4OTAsIDB4N2MsIDB4NzEsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MTYsIDB4N2UsIDB4N2MsIDB4N2YsIDB4NDAsCisgIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4NDAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MmIsIDB4ZjAsIDB4NzUsIDB4MTYsIDB4MDR9fSwKKyB7MHgxMDQ2LCA2NCwgeyAweDEyLCAweDA4LCAweGQ3LCAweDkwLCAweDdjLCAweGIxLCAweGUwLCAweDMwLCAweGUzLCAweDE2LCAweDdlLCAweDdjLCAweDdmLCAweDgwLCAweDc1LCAweDE0LCAweDdjLAorICAweDc1LCAweDE1LCAweDgwLCAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDI3LCAweGYwLCAweDc1LCAweDE2LCAweDA4LCAweDEyLCAweDA4LCAweGQ3LCAweDA1LAorICAweDEyLCAweGU1LCAweDEyLCAweDU0LCAweDBmLCAweGY1LCAweDE3LCAweDcwLCAweDA0LCAweDEyLCAweDExLCAweDFjLCAweDIyLCAweGU1LCAweDE3LCAweGI0LAorICAweDAxLCAweDA0LCAweDEyLCAweDBjLCAweDhjLCAweDIyLCAweDkwLCAweDdmLCAweGMyLCAweGUwLCAweDIwLCAweGUxLCAweDA4LCAweGU1LCAweDEzfX0sCisgezB4MTA4NiwgNjQsIHsgMHg2MCwgMHgwNCwgMHgxMiwgMHgwZSwgMHgyOCwgMHgyMiwgMHgxMiwgMHgwYywgMHg4YywgMHgyMiwgMHg3OCwgMHg3ZiwgMHhlNCwgMHhmNiwgMHhkOCwgMHhmZCwgMHg3NSwKKyAgMHg4MSwgMHgzNywgMHgwMiwgMHgxMCwgMHhkNywgMHgwMiwgMHgxMiwgMHgyNCwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHg0MCwKKyAgMHgwMywgMHhmNiwgMHg4MCwgMHgwMSwgMHhmMiwgMHgwOCwgMHhkZiwgMHhmNCwgMHg4MCwgMHgyOSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHg1NCwgMHgwNywKKyAgMHgyNCwgMHgwYywgMHhjOCwgMHhjMywgMHgzMywgMHhjNCwgMHg1NCwgMHgwZiwgMHg0NCwgMHgyMCwgMHhjOCwgMHg4MywgMHg0MCwgMHgwNCwgMHhmNH19LAorIHsweDEwYzYsIDY0LCB7IDB4NTYsIDB4ODAsIDB4MDEsIDB4NDYsIDB4ZjYsIDB4ZGYsIDB4ZTQsIDB4ODAsIDB4MGIsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsCisgIDB4OTAsIDB4MTgsIDB4NDUsIDB4ZTQsIDB4N2UsIDB4MDEsIDB4OTMsIDB4NjAsIDB4YmMsIDB4YTMsIDB4ZmYsIDB4NTQsIDB4M2YsIDB4MzAsIDB4ZTUsIDB4MDksCisgIDB4NTQsIDB4MWYsIDB4ZmUsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NjAsIDB4MDEsIDB4MGUsIDB4Y2YsIDB4NTQsIDB4YzAsIDB4MjUsIDB4ZTAsIDB4NjAsIDB4YTgsCisgIDB4NDAsIDB4YjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZmEsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4YzgsIDB4YzV9fSwKKyB7MHgxMTA2LCA2NCwgeyAweDgyLCAweGM4LCAweGNhLCAweGM1LCAweDgzLCAweGNhLCAweGYwLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNhLCAweGM1LCAweDgzLCAweGNhLCAweGRmLAorICAweGU5LCAweGRlLCAweGU3LCAweDgwLCAweGJlLCAweDkwLCAweDdmLCAweGQyLCAweGUwLCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDExLCAweGE1LCAweGMyLAorICAweDA5LCAweDkwLCAweDdiLCAweDQwLCAweGUwLCAweDE0LCAweDYwLCAweDI2LCAweDE0LCAweDYwLCAweDNiLCAweDE0LCAweDYwLCAweDUwLCAweDI0LCAweDgzLAorICAweDYwLCAweDY0LCAweDI0LCAweDgwLCAweDcwLCAweDYzLCAweDdlLCAweDdiLCAweDdmLCAweGMwLCAweDc1LCAweDE0LCAweDdiLCAweDc1LCAweDE1fX0sCisgezB4MTE0NiwgNjQsIHsgMHhjMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyZSwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwMSwgMHgxMiwgMHgwMCwgMHg0NiwgMHg4MCwgMHg0YiwgMHg3ZSwgMHg3YywKKyAgMHg3ZiwgMHgwMCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHgwMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyZCwgMHhmMCwgMHg3NSwgMHgxNiwKKyAgMHgwMiwgMHgxMiwgMHgwMCwgMHg0NiwgMHg4MCwgMHgzMywgMHg3ZSwgMHg3YywgMHg3ZiwgMHg0MCwgMHg3NSwgMHgxNCwgMHg3YywgMHg3NSwgMHgxNSwgMHg0MCwKKyAgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgyYiwgMHhmMCwgMHg3NSwgMHgxNiwgMHgwNCwgMHgxMiwgMHgwMCwgMHg0NiwgMHg4MCwgMHgxYiwgMHg3ZX19LAorIHsweDExODYsIDY0LCB7IDB4N2MsIDB4N2YsIDB4ODAsIDB4NzUsIDB4MTQsIDB4N2MsIDB4NzUsIDB4MTUsIDB4ODAsIDB4OTAsIDB4N2YsIDB4OTgsIDB4NzQsIDB4MjcsIDB4ZjAsIDB4NzUsIDB4MTYsCisgIDB4MDgsIDB4MTIsIDB4MDAsIDB4NDYsIDB4ODAsIDB4MDMsIDB4MTIsIDB4MTcsIDB4NTEsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4ZDMsIDB4ZjAsIDB4MjIsIDB4YmIsCisgIDB4MDEsIDB4MDYsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTAsIDB4MjIsIDB4NTAsIDB4MDIsIDB4ZTcsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDIsIDB4ZTMsCisgIDB4MjIsIDB4ODksIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZTQsIDB4OTMsIDB4MjIsIDB4YmIsIDB4MDEsIDB4MGMsIDB4ZTUsIDB4ODIsIDB4MjksIDB4ZjV9fSwKKyB7MHgxMWM2LCA2NCwgeyAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDA2LCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGU2LCAweDIyLCAweGJiLAorICAweGZlLCAweDA2LCAweGU5LCAweDI1LCAweDgyLCAweGY4LCAweGUyLCAweDIyLCAweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLAorICAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweDIyLCAweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGYwLCAweDIyLCAweDUwLCAweDAyLAorICAweGY3LCAweDIyLCAweGJiLCAweGZlLCAweDAxLCAweGYzLCAweDIyLCAweGQwLCAweDgzLCAweGQwLCAweDgyLCAweGY4LCAweGU0LCAweDkzLCAweDcwfX0sCisgezB4MTIwNiwgNjQsIHsgMHgxMiwgMHg3NCwgMHgwMSwgMHg5MywgMHg3MCwgMHgwZCwgMHhhMywgMHhhMywgMHg5MywgMHhmOCwgMHg3NCwgMHgwMSwgMHg5MywgMHhmNSwgMHg4MiwgMHg4OCwgMHg4MywKKyAgMHhlNCwgMHg3MywgMHg3NCwgMHgwMiwgMHg5MywgMHg2OCwgMHg2MCwgMHhlZiwgMHhhMywgMHhhMywgMHhhMywgMHg4MCwgMHhkZiwgMHg5MCwgMHg3ZiwgMHhhZSwKKyAgMHhlMCwgMHhmZiwgMHhkMywgMHg5MiwgMHgwMCwgMHhlNCwgMHgzMywgMHhmZSwgMHhlZiwgMHg0ZSwgMHhmMCwgMHhkMiwgMHhlOCwgMHg0MywgMHhkOCwgMHgyMCwKKyAgMHg5MCwgMHg3ZiwgMHhkZSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHhmZn19LAorIHsweDEyNDYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4N2YsIDB4YTksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWEsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWYsIDB4NzQsIDB4MDEsCisgIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWUsIDB4NzQsIDB4MGQsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4ZDIsIDB4MGIsIDB4MTIsIDB4MTgsIDB4MDksIDB4YzIsIDB4MDEsCisgIDB4ZTQsIDB4ZjUsIDB4MmIsIDB4ZjUsIDB4MzEsIDB4YzIsIDB4MDcsIDB4YzIsIDB4MDIsIDB4NzUsIDB4MjksIDB4MGYsIDB4OTAsIDB4N2YsIDB4ZDgsIDB4ZTAsCisgIDB4NjUsIDB4MjYsIDB4NjAsIDB4MDYsIDB4NzUsIDB4MzIsIDB4MGYsIDB4ZTAsIDB4ZjUsIDB4MjYsIDB4MzAsIDB4MDIsIDB4MDMsIDB4MTIsIDB4MGZ9fSwKKyB7MHgxMjg2LCA2NCwgeyAweGVmLCAweDMwLCAweDAxLCAweDA3LCAweGMyLCAweDAxLCAweDEyLCAweDA2LCAweDNmLCAweDgwLCAweGUyLCAweDMwLCAweDA4LCAweGRmLCAweGMyLCAweDA4LCAweDEyLAorICAweDE4LCAweDJhLCAweDgwLCAweGQ4LCAweDIyLCAweGU1LCAweDEzLCAweDU1LCAweDE2LCAweDYwLCAweDZhLCAweGU1LCAweDE1LCAweDI0LCAweDNhLCAweGY1LAorICAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDcwLCAweDVjLCAweGU1LCAweDE2LCAweGY0LCAweDUyLCAweDEzLCAweGU1LCAweDE1LAorICAweDI0LCAweDI2LCAweGZmLCAweGU0LCAweDM1LCAweDE0LCAweGZlLCAweGU0LCAweGZkLCAweDBmLCAweGVmLCAweGFhLCAweDA2LCAweDcwLCAweDAxfX0sCisgezB4MTJjNiwgNjQsIHsgMHgwZSwgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHhmYywgMHg3NCwgMHg4MCwgMHgyZCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3YiwgMHhmNSwKKyAgMHg4MywgMHhlYywgMHhmMCwgMHgwZCwgMHhiZCwgMHgwYiwgMHhlMiwgMHg5MCwgMHg3ZiwgMHhjMywgMHg3NCwgMHgwYiwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwKKyAgMHgzYSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHg3NCwgMHgxMCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyZSwgMHhmNSwKKyAgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNH19LAorIHsweDEzMDYsIDY0LCB7IDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4MjIsIDB4ZTUsIDB4MjgsIDB4NDUsIDB4MjcsIDB4NjAsIDB4NTcsIDB4YWUsIDB4MjcsIDB4YWYsIDB4MjgsCisgIDB4ZDMsIDB4ZWYsIDB4OTQsIDB4NDAsIDB4ZWUsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDQsIDB4N2UsIDB4MDAsIDB4N2YsIDB4NDAsIDB4YzMsIDB4ZTUsIDB4MjgsCisgIDB4OWYsIDB4ZjUsIDB4MjgsIDB4ZTUsIDB4MjcsIDB4OWUsIDB4ZjUsIDB4MjcsIDB4ZTQsIDB4ZmQsIDB4ZWQsIDB4YzMsIDB4OWYsIDB4ZTQsIDB4OWUsIDB4NTAsCisgIDB4MWYsIDB4ODUsIDB4MzQsIDB4ODIsIDB4ODUsIDB4MzMsIDB4ODMsIDB4ZTAsIDB4ZmMsIDB4NzQsIDB4MDAsIDB4MmQsIDB4ZjUsIDB4ODIsIDB4ZTR9fSwKKyB7MHgxMzQ2LCA2NCwgeyAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGVjLCAweGYwLCAweDBkLCAweDA1LCAweDM0LCAweGU1LCAweDM0LCAweDcwLCAweDAyLCAweDA1LCAweDMzLCAweDgwLCAweGRhLAorICAweDkwLCAweDdmLCAweGE5LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGFjLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI1LAorICAweGVmLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweGFjLCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweGU0LCAweDkwLCAweDdmLCAweGI1LCAweGYwLCAweDIyLAorICAweDkwLCAweDdmLCAweDk4LCAweDc0LCAweDBmLCAweGYwLCAweGU0LCAweDkwLCAweDc4LCAweDRhLCAweGYwLCAweDkwLCAweDdmLCAweDk0LCAweGYwfX0sCisgezB4MTM4NiwgNjQsIHsgMHg5MCwgMHg3ZiwgMHg5ZCwgMHg3NCwgMHhmZiwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHg5NywgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHhmMCwgMHg5MCwgMHg3ZiwKKyAgMHg5MywgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHhmZiwgMHhmMCwgMHgzMCwgMHgwMCwgMHgwNywgMHhlNSwgMHgyOSwgMHg1NCwgMHgwZiwgMHhmZiwKKyAgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHgxZiwgMHhmMCwgMHhlNCwKKyAgMHg5MCwgMHg3ZiwgMHg5NSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwgMHgzZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHg3NCwgMHhkZn19LAorIHsweDEzYzYsIDY0LCB7IDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTIsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4MjIsIDB4OGYsIDB4MTksIDB4MDUsIDB4MmQsIDB4ZTUsIDB4MmQsIDB4YWUsIDB4MmMsCisgIDB4NzAsIDB4MDIsIDB4MDUsIDB4MmMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTUsIDB4MTksIDB4ZjAsIDB4MTIsIDB4MTgsIDB4ZWYsIDB4MDUsCisgIDB4MmQsIDB4ZTUsIDB4MmQsIDB4YWMsIDB4MmMsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MmMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsCisgIDB4MTUsIDB4MjMsIDB4ZTUsIDB4MjMsIDB4NjAsIDB4MWYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzgsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTR9fSwKKyB7MHgxNDA2LCA2NCwgeyAweGY1LCAweDgzLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGUwLCAweGZlLCAweDEyLCAweDE4LCAweGQzLCAweDhmLCAweDE5LCAweGVlLCAweDRmLCAweGQwLCAweDgyLAorICAweGQwLCAweDgzLCAweGYwLCAweDgwLCAweGI1LCAweDIyLCAweDkwLCAweDc4LCAweDQxLCAweGU1LCAweDExLCAweGYwLCAweDkwLCAweDc4LCAweDRmLCAweDc0LAorICAweGMwLCAweGYwLCAweGU0LCAweDkwLCAweDc4LCAweDUwLCAweGYwLCAweGU1LCAweDJjLCAweDkwLCAweDc4LCAweDUxLCAweGYwLCAweGFlLCAweDJjLCAweGU1LAorICAweDJkLCAweDkwLCAweDc4LCAweDUyLCAweGYwLCAweDkwLCAweDc4LCAweDU0LCAweGU1LCAweDIzLCAweGYwLCAweDkwLCAweDc4LCAweDU3LCAweDc0fX0sCisgezB4MTQ0NiwgNjQsIHsgMHgwNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlMiwgMHhlMCwgMHg0NCwgMHgxMCwgMHhmMCwgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHhlNCwgMHg5MCwgMHg3OCwgMHg1NSwKKyAgMHhmMCwgMHg5MCwgMHg3OCwgMHg1NSwgMHhlMCwgMHg2MCwgMHhmYSwgMHgyMiwgMHg4ZiwgMHgxOSwgMHhlNCwgMHhmNSwgMHgxYSwgMHg3NSwgMHgxYiwgMHhmZiwKKyAgMHg3NSwgMHgxYywgMHgxOSwgMHg3NSwgMHgxZCwgMHg4NiwgMHhhYiwgMHgxYiwgMHhhYSwgMHgxYywgMHhhOSwgMHgxZCwgMHg5MCwgMHgwMCwgMHgwMSwgMHgxMiwKKyAgMHgxMSwgMHhiZiwgMHhiNCwgMHgwMywgMHgxZCwgMHhhZiwgMHgxYSwgMHgwNSwgMHgxYSwgMHhlZiwgMHhiNSwgMHgxOSwgMHgwMSwgMHgyMiwgMHgxMn19LAorIHsweDE0ODYsIDY0LCB7IDB4MTEsIDB4YTYsIDB4N2UsIDB4MDAsIDB4MjksIDB4ZmYsIDB4ZWUsIDB4M2EsIDB4YTksIDB4MDcsIDB4NzUsIDB4MWIsIDB4ZmYsIDB4ZjUsIDB4MWMsIDB4ODksIDB4MWQsCisgIDB4ODAsIDB4ZDQsIDB4N2IsIDB4MDAsIDB4N2EsIDB4MDAsIDB4NzksIDB4MDAsIDB4MjIsIDB4OTAsIDB4NzgsIDB4NDEsIDB4ZTUsIDB4MTEsIDB4ZjAsIDB4ZTUsCisgIDB4MmMsIDB4OTAsIDB4NzgsIDB4NGYsIDB4ZjAsIDB4YWUsIDB4MmMsIDB4ZTUsIDB4MmQsIDB4OTAsIDB4NzgsIDB4NTAsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NTEsCisgIDB4NzQsIDB4YzAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzgsIDB4NTIsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NTQsIDB4ZTUsIDB4MjMsIDB4ZjAsIDB4OTB9fSwKKyB7MHgxNGM2LCA2NCwgeyAweDc4LCAweDU3LCAweDc0LCAweDA0LCAweGYwLCAweGU0LCAweDkwLCAweDc4LCAweDU1LCAweGYwLCAweDkwLCAweDc4LCAweDU1LCAweGUwLCAweDYwLCAweGZhLCAweDIyLAorICAweGU1LCAweDE1LCAweDI0LCAweDA0LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDE0LCAweDYwLCAweDBmLCAweDE0LAorICAweDYwLCAweDEzLCAweDE0LCAweDYwLCAweDE3LCAweDgwLCAweDAwLCAweDkwLCAweDdmLCAweGM3LCAweGVmLCAweGYwLCAweDgwLCAweDEzLCAweDkwLCAweDdmLAorICAweGM5LCAweGVmLCAweGYwLCAweDgwLCAweDBjLCAweDkwLCAweDdmLCAweGNiLCAweGVmLCAweGYwLCAweDgwLCAweDA1LCAweDkwLCAweDdmLCAweGNkfX0sCisgezB4MTUwNiwgNjQsIHsgMHhlZiwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgyYSwgMHgyMiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwKKyAgMHg4MywgMHhlMCwgMHgxNCwgMHg2MCwgMHgwZiwgMHgxNCwgMHg2MCwgMHgxMywgMHgxNCwgMHg2MCwgMHgxNywgMHg4MCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhiNywKKyAgMHhlZiwgMHhmMCwgMHg4MCwgMHgxMywgMHg5MCwgMHg3ZiwgMHhiOSwgMHhlZiwgMHhmMCwgMHg4MCwgMHgwYywgMHg5MCwgMHg3ZiwgMHhiYiwgMHhlZiwgMHhmMCwKKyAgMHg4MCwgMHgwNSwgMHg5MCwgMHg3ZiwgMHhiZCwgMHhlZiwgMHhmMCwgMHhlNSwgMHgxNiwgMHg0MiwgMHgyYSwgMHgyMiwgMHhhZSwgMHgwNywgMHhlNH19LAorIHsweDE1NDYsIDY0LCB7IDB4ZmYsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4ZmQsIDB4MTIsCisgIDB4MTYsIDB4NmIsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjEsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWUsIDB4ZjAsIDB4ZTQsIDB4ZTUsIDB4MTUsCisgIDB4MjQsIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZmQsIDB4MTIsIDB4MTYsIDB4NmIsCisgIDB4MjIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ZjAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODZ9fSwKKyB7MHgxNTg2LCA2NCwgeyAweDc1LCAweDg2LCAweDAwLCAweGMwLCAweGQwLCAweDc1LCAweGQwLCAweDA4LCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGE5LCAweDc0LCAweDAxLCAweGYwLAorICAweDEyLCAweDEzLCAweDBkLCAweGQwLCAweGQwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLAorICAweGYwLCAweGQwLCAweGUwLCAweDMyLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGYzLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweDc0LCAweGJmLCAweGYwLAorICAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGYxLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0fX0sCisgezB4MTVjNiwgNjQsIHsgMHhmMywgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHg3ZiwgMHg5MCwKKyAgMHhjMCwgMHgwMCwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHg3NCwgMHhiZiwgMHhmMCwKKyAgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMiwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmMywKKyAgMHhmMCwgMHhlNSwgMHgxNSwgMHgyNCwgMHgzNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHg3Zn19LAorIHsweDE2MDYsIDY0LCB7IDB4OTAsIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmYsIDB4ZjAsCisgIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjQsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjMsCisgIDB4ZjAsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4OTAsCisgIDB4YzAsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4OTAsIDB4NzgsIDB4NDEsIDB4NzQsIDB4ZjMsIDB4ZjAsIDB4OTAsIDB4YzAsIDB4MDAsIDB4NzQsIDB4YmZ9fSwKKyB7MHgxNjQ2LCA2NCwgeyAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGY2LCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGVmLCAweGYwLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGYzLAorICAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweDkwLAorICAweGMwLCAweDAwLCAweGYwLCAweDIyLCAweDkwLCAweDc4LCAweDQxLCAweDc0LCAweGYzLCAweGYwLCAweGU1LCAweDE1LCAweDI0LCAweDM3LCAweGY1LCAweDgyLAorICAweGU0LCAweDM1LCAweDE0LCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDdmLCAweDkwLCAweGMwLCAweDAwLCAweGYwLCAweDkwLCAweDc4LCAweDQxfX0sCisgezB4MTY4NiwgNjQsIHsgMHg3NCwgMHhmNywgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlZiwgMHhmMCwgMHg5MCwgMHg3OCwgMHg0MSwgMHg3NCwgMHhmNSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwKKyAgMHhlZCwgMHhmMCwgMHgyMiwgMHhlNSwgMHgxNSwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHgxNCwgMHhmNSwgMHg4MywgMHhlMCwgMHgxNCwKKyAgMHg2MCwgMHgwZSwgMHgxNCwgMHg2MCwgMHgxMSwgMHgxNCwgMHg2MCwgMHgxNCwgMHg4MCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhjNiwgMHhlMCwgMHhmZiwgMHgyMiwKKyAgMHg5MCwgMHg3ZiwgMHhjOCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhjYSwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhjY319LAorIHsweDE2YzYsIDY0LCB7IDB4ZTAsIDB4ZmYsIDB4MjIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4NjAsCisgIDB4MGUsIDB4MTQsIDB4NjAsIDB4MTEsIDB4MTQsIDB4NjAsIDB4MTQsIDB4ODAsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YjYsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsCisgIDB4N2YsIDB4YjgsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4YmEsIDB4ZTAsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4N2YsIDB4YmMsIDB4ZTAsIDB4ZmYsCisgIDB4MjIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4NjB9fSwKKyB7MHgxNzA2LCA2NCwgeyAweDBlLCAweDE0LCAweDYwLCAweDExLCAweDE0LCAweDYwLCAweDE0LCAweDgwLCAweDAwLCAweDkwLCAweDdmLCAweGM3LCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLAorICAweGM5LCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweGNiLCAweGUwLCAweGZmLCAweDIyLCAweDkwLCAweDdmLCAweGNkLCAweGUwLCAweGZmLCAweDIyLAorICAweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweDc1LCAweDg2LCAweDAwLCAweDkwLAorICAweDdmLCAweGM0LCAweGU0LCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA0LCAweGYwLCAweGQwLCAweDg2fX0sCisgezB4MTc0NiwgNjQsIHsgMHhkMCwgMHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMiwgMHg5MCwgMHg3YiwgMHg0MSwgMHhlMCwgMHhmNSwgMHgzNiwKKyAgMHg0MywgMHgxMywgMHgxMCwgMHhhMywgMHhlMCwgMHg2MCwgMHgwOSwgMHg5MCwgMHg3ZiwgMHhkNywgMHg3NCwgMHgxNywgMHhmMCwgMHg3NCwgMHgzNywgMHhmMCwKKyAgMHg5MCwgMHg3YiwgMHg0MywgMHhlMCwgMHhmNSwgMHgzNywgMHhhMywgMHhlMCwgMHg1NCwgMHhmMCwgMHhmNSwgMHgyOSwgMHhlMCwgMHg2MCwgMHgwMiwgMHhkMiwKKyAgMHgwYSwgMHgyMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NX19LAorIHsweDE3ODYsIDY0LCB7IDB4ODYsIDB4MDAsIDB4ZDIsIDB4MDEsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsCisgIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsCisgIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4ZDIsIDB4MDgsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsCisgIDB4NzQsIDB4MDgsIDB4ZjAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTB9fSwKKyB7MHgxN2M2LCA2NCwgeyAweDMyLCAweDEyLCAweDE4LCAweGI3LCAweGFlLCAweDA3LCAweDEyLCAweDE4LCAweGI3LCAweGFkLCAweDA3LCAweGVlLCAweDZkLCAweDYwLCAweDEwLCAweDEyLCAweDE4LAorICAweGI3LCAweGFlLCAweDA3LCAweGVlLCAweDZkLCAweDYwLCAweDA3LCAweDEyLCAweDE4LCAweGI3LCAweGFkLCAweDA3LCAweDgwLCAweGVjLCAweGFmLCAweDA2LAorICAweDIyLCAweDc0LCAweDAwLCAweGY1LCAweDg2LCAweDkwLCAweGZkLCAweGE1LCAweDdjLCAweDA1LCAweGEzLCAweGU1LCAweDgyLCAweDQ1LCAweDgzLCAweDcwLAorICAweGY5LCAweDIyLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDQzLCAweDg3LCAweDAxLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MTgwNiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHgzMCwgMHgwYiwgMHgwNCwKKyAgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg3ZiwgMHhmNCwgMHg3ZSwgMHgwMSwgMHgxMiwgMHgxOCwgMHg2MCwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwKKyAgMHhmNywgMHhmMCwgMHgyMiwgMHgxMiwgMHgxMywgMHg3NywgMHgxMiwgMHgxNywgMHhmOSwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHgzMCwgMHhlNywgMHgwYSwKKyAgMHg3ZiwgMHgwNSwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgxOCwgMHg2MCwgMHgxMiwgMHgxOCwgMHg5MywgMHgxMiwgMHgwYSwgMHhjZSwgMHgyMiwgMHgwM319LAorIHsweDE4NDYsIDY0LCB7IDB4MzUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MmUsIDB4ODEsIDB4MDAsIDB4MDAsIDB4YzEsIDB4ODUsIDB4YzEsIDB4ODEsIDB4YzEsIDB4MDgsIDB4YzEsIDB4MDAsCisgIDB4YzEsIDB4MDYsIDB4MDEsIDB4MjIsIDB4MDAsIDB4MDEsIDB4MjQsIDB4MDAsIDB4MDAsIDB4OGUsIDB4MTcsIDB4OGYsIDB4MTgsIDB4ZTUsIDB4MTgsIDB4MTUsCisgIDB4MTgsIDB4YWUsIDB4MTcsIDB4NzAsIDB4MDIsIDB4MTUsIDB4MTcsIDB4NGUsIDB4NjAsIDB4MDgsIDB4MTIsIDB4MTcsIDB4ZTgsIDB4MTIsIDB4MTcsIDB4ZTgsCisgIDB4ODAsIDB4ZWIsIDB4MjIsIDB4ZTUsIDB4MTUsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4MTQsIDB4ZjUsIDB4ODMsIDB4ZTB9fSwKKyB7MHgxODg2LCA2NCwgeyAweDA0LCAweGZmLCAweDQ0LCAweDEwLCAweDkwLCAweDdmLCAweGQ3LCAweGYwLCAweGVmLCAweDQ0LCAweDMwLCAweGYwLCAweDIyLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLAorICAweDQ0LCAweDAxLCAweGYwLCAweDdmLCAweDBkLCAweDdlLCAweDAwLCAweDEyLCAweDE4LCAweDYwLCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGZlLAorICAweGYwLCAweDIyLCAweGU1LCAweDExLCAweDI0LCAweDAyLCAweDkwLCAweDc4LCAweDQxLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLAorICAweGU1LCAweDExLCAweDI0LCAweDAzLCAweDkwLCAweDc4LCAweDQxLCAweGYwLCAweDkwLCAweGMwLCAweDAwLCAweGUwLCAweGZmLCAweDIyLCAweGU1fX0sCisgezB4MThjNiwgNjQsIHsgMHgxMSwgMHgyNCwgMHgwNCwgMHg5MCwgMHg3OCwgMHg0MSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHhlNSwgMHgxMSwgMHgyNCwgMHgwNSwKKyAgMHg5MCwgMHg3OCwgMHg0MSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHhlNSwgMHgxMSwgMHgyNCwgMHgwNiwgMHg5MCwgMHg3OCwKKyAgMHg0MSwgMHhmMCwgMHg5MCwgMHhjMCwgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg5MCwgMHg3OCwgMHg0MSwgMHhlNSwgMHgxMSwgMHhmMCwgMHg5MCwgMHhjMCwKKyAgMHgwMCwgMHhlMCwgMHhmZiwgMHgyMiwgMHg1MywgMHhkOCwgMHhlZiwgMHgzMiwgMHgwMCwgMHgxMiwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmZiwgMHhmZn19LAorIHsweDE5MDYsIDY0LCB7IDB4ZmYsIDB4NDAsIDB4Y2QsIDB4MDYsIDB4MmEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDQsIDB4MDksIDB4MDIsIDB4NzQsIDB4MDAsIDB4MDEsCisgIDB4MDEsIDB4MDAsIDB4YTAsIDB4MzIsIDB4MDksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDEsCisgIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDMsIDB4MDIsIDB4NDAsCisgIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDQsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDUsIDB4MDIsIDB4NDAsIDB4MDB9fSwKKyB7MHgxOTQ2LCA2NCwgeyAweDAwLCAweDA3LCAweDA1LCAweDA2LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA3LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LAorICAweDgxLCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDgyLCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDgzLCAweDAyLAorICAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDg0LCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDg1LCAweDAyLCAweDQwLCAweDAwLAorICAweDAxLCAweDA3LCAweDA1LCAweDg2LCAweDAyLCAweDQwLCAweDAwLCAweDAxLCAweDA3LCAweDA1LCAweDg3LCAweDAyLCAweDQwLCAweDAwLCAweDAxfX0sCisgezB4MTk4NiwgNjQsIHsgMHgwNCwgMHgwMywgMHgwOSwgMHgwNCwgMHg0OCwgMHgwMywgMHg0YiwgMHgwMCwgMHg2NSwgMHgwMCwgMHg3OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg3MCwgMHgwMCwgMHg2MSwKKyAgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyYywgMHgwMCwgMHgyMCwgMHgwMCwgMHg2MSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2OSwgMHgwMCwgMHg3NiwKKyAgMHgwMCwgMHg2OSwgMHgwMCwgMHg3MywgMHgwMCwgMHg2OSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHg2ZSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg2ZiwgMHgwMCwgMHg2NiwKKyAgMHgwMCwgMHgyMCwgMHgwMCwgMHg0OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHg1MywgMHgwMCwgMHg3OSwgMHgwMH19LAorIHsweDE5YzYsIDY0LCB7IDB4NzMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjMsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MjQsIDB4MDMsIDB4NGIsIDB4MDAsIDB4NjUsCisgIDB4MDAsIDB4NzksIDB4MDAsIDB4NzMsIDB4MDAsIDB4NzAsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NmUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NTUsIDB4MDAsIDB4NTMsCisgIDB4MDAsIDB4NDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MzksIDB4MDAsIDB4NTcsIDB4MDAsIDB4NGMsIDB4MDAsIDB4NDMsIDB4MDAsIDB4MjIsCisgIDB4MDMsIDB4NTUsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MjAsIDB4MDB9fSwKKyB7MHgxYTA2LCA2NCwgeyAweDMyLCAweDAwLCAweDMwLCAweDAwLCAweDMwLCAweDAwLCAweDMzLCAweDAwLCAweDZhLCAweDAwLCAweDYxLCAweDAwLCAweDZlLCAweDAwLCAweDMzLCAweDAwLCAweDMxLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfX0sCisgezB4MWE0NiwgNjQsIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH19LAorIHsweDFhODYsIDY0LCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9fSwKKyB7MHgxYWM2LCA2NCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDE3LCAweDc5LCAweDAwLCAweDAyLCAweDFifX0sCisgezB4MWIwNiwgMjEsIHsgMHgwNCwgMHgwMCwgMHgwMiwgMHgxNywgMHgyNywgMHgwMCwgMHgwMiwgMHgxNywgMHhhMCwgMHgwMCwgMHgwMiwgMHgxYiwgMHgxMCwgMHgwMCwgMHgwMiwgMHgxYiwgMHgxNCwKKyAgMHgwMCwgMHgwMiwgMHgxNSwgMHg3OH19LAorIHsweGZmZmYsICAwLCB7IDB4MDB9fSwKK307CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fdXNhOTBtc2cuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTkwbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ5MzViNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3VzYTkwbXNnLmgKQEAgLTAsMCArMSwxOTggQEAKKy8qCisJdXNhOTBtc2cuaAorCisJQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMgSW5ub1N5cyBJbmNvcnBvcmF0ZWQuICBBbGwgUmlnaHRzIFJlc2VydmVkCisJVGhpcyBmaWxlIGlzIGF2YWlsYWJsZSB1bmRlciBhIEJTRC1zdHlsZSBjb3B5cmlnaHQKKworCUtleXNwYW4gVVNCIEFzeW5jIE1lc3NhZ2UgRm9ybWF0cyBmb3IgdGhlIFVTQTE5SFMKKworCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorCW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKwltZXQ6CisKKwkxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhpcyBsaWNlbmNlIHRleHQKKyAgIAl3aXRob3V0IG1vZGlmaWNhdGlvbiwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgICAJZGlzY2xhaW1lci4gIFRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IG5vdGljZSBtdXN0IGFwcGVhciBpbW1lZGlhdGVseSBhdAorICAgCXRoZSBiZWdpbm5pbmcgb2YgYWxsIHNvdXJjZSBmaWxlczoKKworICAgICAgICAJQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMgSW5ub1N5cyBJbmNvcnBvcmF0ZWQuICBBbGwgUmlnaHRzIFJlc2VydmVkCisKKyAgICAgICAgCVRoaXMgZmlsZSBpcyBhdmFpbGFibGUgdW5kZXIgYSBCU0Qtc3R5bGUgY29weXJpZ2h0CisKKwkyLiBUaGUgbmFtZSBvZiBJbm5vU3lzIEluY29ycHJhdGVkIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAgIAlwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KKyAgIAlwZXJtaXNzaW9uLgorCisJVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBJTk5PU1lTIENPUlAuIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKwlJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisJT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKwlOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisJSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisJKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisJU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKwlDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKwlMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisJT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorCVNVQ0ggREFNQUdFLiAgICAKKworCVJldmlzaW9uczoKKworCTIwMDNmZWIxNAkJYWRkIHNldFR4TW9kZS90eE1vZGUgIGFuZCBjYW5jZWxSeFhvZmYgdG8gcG9ydENvbnRyb2wKKwkyMDAzbWFyMjEJCWNoYW5nZSBuYW1lIG9mIFBBUklUWV8wLzEgdG8gYWRkIE1BUksvU1BBQ0UKKyovCisKKyNpZm5kZWYJX19VU0E5ME1TR19fCisjZGVmaW5lCV9fVVNBOTBNU0dfXworCitzdHJ1Y3Qga2V5c3Bhbl91c2E5MF9wb3J0Q29udHJvbE1lc3NhZ2UKK3sKKwkvKgorCQl0aGVyZSBhcmUgdGhyZWUgdHlwZXMgb2YgImNvbW1hbmRzIiBzZW50IGluIHRoZSBjb250cm9sIG1lc3NhZ2U6CisKKwkJMS4JY29uZmlndXJhdGlvbiBjaGFuZ2VzIHdoaWNoIG11c3QgYmUgcmVxdWVzdGVkIGJ5IHNldHRpbmcKKwkJCXRoZSBjb3JyZXNwb25kaW5nICJzZXQiIGZsYWcgKGFuZCBzaG91bGQgb25seSBiZSByZXF1ZXN0ZWQKKwkJCXdoZW4gbmVjZXNzYXJ5LCB0byByZWR1Y2Ugb3ZlcmhlYWQgb24gdGhlIGRldmljZSk6CisJKi8KKworCXU4CXNldENsb2NraW5nLAkvLyBob3N0IHJlcXVlc3RzIGJhdWQgcmF0ZSBiZSBzZXQKKwkJYmF1ZExvLAkJCS8vIGhvc3QgZG9lcyBiYXVkIGRpdmlzb3IgY2FsY3VsYXRpb24KKwkJYmF1ZEhpLAkJCS8vIGhvc3QgZG9lcyBiYXVkIGRpdmlzb3IgY2FsY3VsYXRpb24gCisJCQorCQlzZXRMY3IsCQkJLy8gaG9zdCByZXF1ZXN0cyBsY3IgYmUgc2V0CisJCWxjciwJCQkvLyB1c2UgUEFSSVRZLCBTVE9QQklUUywgREFUQUJJVFMgYmVsb3cKKwkJCisJCXNldFJ4TW9kZSwJCS8vIHNldCByZWNlaXZlIG1vZGUKKwkJcnhNb2RlLAkJCS8vIFJYTU9ERV9ETUEgb3IgUlhNT0RFX0JZSEFORAorCisJCXNldFR4TW9kZSwJCS8vIHNldCB0cmFuc21pdCBtb2RlCisJCXR4TW9kZSwJCQkvLyBUWE1PREVfRE1BIG9yIFRYTU9ERV9CWUhBTkQKKworCQlzZXRUeEZsb3dDb250cm9sLAkvLyBob3N0IHJlcXVlc3RzIHR4IGZsb3cgY29udHJvbCBiZSBzZXQKKwkJdHhGbG93Q29udHJvbAksCS8vIHVzZSBUWF9GTE9XLi4uIGJpdHMgYmVsb3cKKwkJc2V0UnhGbG93Q29udHJvbCwJLy8gaG9zdCByZXF1ZXN0cyByeCBmbG93IGNvbnRyb2wgYmUgc2V0CisJCXJ4Rmxvd0NvbnRyb2wsCS8vIHVzZSBSWF9GTE9XLi4uIGJpdHMgYmVsb3cKKwkJc2VuZFhvZmYsCQkvLyBob3N0IHJlcXVlc3RzIFhPRkYgdHJhbnNtaXR0ZWQgaW1tZWRpYXRlbHkKKwkJc2VuZFhvbiwJCS8vIGhvc3QgcmVxdWVzdHMgWE9OIGNoYXIgdHJhbnNtaXR0ZWQKKwkJeG9uQ2hhciwJCS8vIHNwZWNpZmllZCBpbiBjdXJyZW50IGNoYXJhY3RlciBmb3JtYXQKKwkJeG9mZkNoYXIsCQkvLyBzcGVjaWZpZWQgaW4gY3VycmVudCBjaGFyYWN0ZXIgZm9ybWF0CisKKwkJc2VuZENoYXIsCQkvLyBob3N0IHJlcXVlc3RzIGNoYXIgdHJhbnNtaXR0ZWQgaW1tZWRpYXRlbHkKKwkJdHhDaGFyLAkJCS8vIGNoYXJhY3RlciB0byBzZW5kCisKKwkJc2V0UnRzLAkJCS8vIGhvc3QgcmVxdWVzdHMgUlRTIG91dHB1dCBiZSBzZXQKKwkJcnRzLAkJCS8vIDE9b24sIDA9b2ZmCisJCXNldER0ciwgCQkvLyBob3N0IHJlcXVlc3RzIERUUiBvdXRwdXQgYmUgc2V0CisJCWR0cjsJCQkvLyAxPW9uLCAwPW9mZgorCisJCisJLyoKKwkJMi4JY29uZmlndXJhdGlvbiBkYXRhIHdoaWNoIGlzIHNpbXBseSB1c2VkIGFzIGlzIAorCQkJYW5kIG11c3QgYmUgc3BlY2lmaWVkIGNvcnJlY3RseSBpbiBldmVyeSBob3N0IG1lc3NhZ2UuCisJKi8KKworCXU4CXJ4Rm9yd2FyZGluZ0xlbmd0aCwgIC8vIGZvcndhcmQgd2hlbiB0aGlzIG51bWJlciBvZiBjaGFycyBhdmFpbGFibGUKKwkJcnhGb3J3YXJkaW5nVGltZW91dCwgLy8gKDEtMzEgaW4gbXMpCisJCXR4QWNrU2V0dGluZzsJICAgLy8gMD1kb24ndCBhY2ssIDE9bm9ybWFsLCAyLTI1NSBUQkQuLi4KKwkvKgorCQkzLglGaXJtd2FyZSBzdGF0ZXMgd2hpY2ggY2F1c2UgYWN0aW9ucyBpZiB0aGV5IGNoYW5nZQkJCQkJCisJCWFuZCBtdXN0IGJlIHNwZWNpZmllZCBjb3JyZWN0bHkgaW4gZXZlcnkgaG9zdCBtZXNzYWdlLgorCSovCisKKwl1OAlwb3J0RW5hYmxlZCwJLy8gMD1kaXNhYmxlZCwgMT1lbmFibGVkCisJCXR4Rmx1c2gsCQkvLyAwPW5vcm1hbCwgMT10b3NzIG91dGJvdW5kIGRhdGEKKwkJdHhCcmVhaywJCS8vIDA9YnJlYWsgb2ZmLCAxPWJyZWFrIG9uCisJCWxvb3BiYWNrTW9kZTsJLy8gMD1ubyBsb29wYmFjaywgMT1sb29wYmFjayBlbmFibGVkCisKKwkvKgorCQk0Lgljb21tYW5kcyB3aGljaCBhcmUgZmxhZ3Mgb25seTsgdGhlc2UgYXJlIHByb2Nlc3NlZCBpbiBvcmRlcgorCQkJKHNvIHRoYXQsIGUuZy4sIGlmIHJ4Rmx1c2ggYW5kIHJ4Rm9yd2FyZCBmbGFncyBhcmUgc2V0LCB0aGUKKwkJCXBvcnQgd2lsbCBoYXZlIG5vIGRhdGEgdG8gZm9yd2FyZCk7IGFueSBub24temVybyB2YWx1ZSAKKwkJCWlzIHJlc3BlY3RlZAorCSovCisKKwl1OAlyeEZsdXNoLAkJLy8gdG9zcyBpbmJvdW5kIGRhdGEKKwkJcnhGb3J3YXJkLAkJLy8gZm9yd2FyZCBhbGwgaW5ib3VuZCBkYXRhLCBOT1cgKGFzIGlmIGZ3ZExlbj09MSkKKwkJY2FuY2VsUnhYb2ZmLAkvLyBjYW5jZWwgYW55IHJlY2VpdmUgWE9GRiBzdGF0ZSAoX3R4WG9mZikKKwkJcmV0dXJuU3RhdHVzOwkvLyByZXR1cm4gY3VycmVudCBzdGF0dXMgTk9XCit9OworCisvLyBkZWZpbmVzIGZvciBiaXRzIGluIGxjcgorI2RlZmluZQkJVVNBX0RBVEFCSVRTXzUJCTB4MDAKKyNkZWZpbmUJCVVTQV9EQVRBQklUU182CQkweDAxCisjZGVmaW5lCQlVU0FfREFUQUJJVFNfNwkJMHgwMgorI2RlZmluZQkJVVNBX0RBVEFCSVRTXzgJCTB4MDMKKyNkZWZpbmUJCVNUT1BCSVRTXzU2NzhfMQkJMHgwMAkvLyAxIHN0b3AgYml0IGZvciBhbGwgYnl0ZSBzaXplcworI2RlZmluZQkJU1RPUEJJVFNfNV8xcDUJCTB4MDQJLy8gMS41IHN0b3AgYml0cyBmb3IgNS1iaXQgYnl0ZQorI2RlZmluZQkJU1RPUEJJVFNfNjc4XzIJCTB4MDQJLy8gMiBzdG9wIGJpdHMgZm9yIDYtOCBiaXQgYnl0ZQorI2RlZmluZQkJVVNBX1BBUklUWV9OT05FCQkweDAwCisjZGVmaW5lCQlVU0FfUEFSSVRZX09ERAkJMHgwOAorI2RlZmluZQkJVVNBX1BBUklUWV9FVkVOCQkweDE4CisjZGVmaW5lCQlQQVJJVFlfTUFSS18xICAJCTB4MjggICAJLy8gZm9yY2UgcGFyaXR5IE1BUksKKyNkZWZpbmUJCVBBUklUWV9TUEFDRV8wIAkJMHgzOAkvLyBmb3JjZSBwYXJpdHkgU1BBQ0UKKworI2RlZmluZQkJVFhGTE9XX0NUUwkJCTB4MDQJCisjZGVmaW5lCQlUWEZMT1dfRFNSCQkJMHgwOAorI2RlZmluZQkJVFhGTE9XX1hPRkYJCQkweDAxCQorI2RlZmluZQkJVFhGTE9XX1hPRkZfQU5ZCQkweDAyCQorI2RlZmluZQkJVFhGTE9XX1hPRkZfQklUUwkoVFhGTE9XX1hPRkYgfCBUWEZMT1dfWE9GRl9BTlkpCisKKyNkZWZpbmUJCVJYRkxPV19YT0ZGCQkJMHgxMAkKKyNkZWZpbmUJCVJYRkxPV19SVFMJCQkweDIwCQorI2RlZmluZQkJUlhGTE9XX0RUUgkJCTB4NDAKKyNkZWZpbmUJCVJYRkxPV19EU1JfU0VOU0lUSVZJVFkJMHg4MAorCisjZGVmaW5lCQlSWE1PREVfQllIQU5ECQkweDAwCQorI2RlZmluZQkJUlhNT0RFX0RNQQkJCTB4MDIJCisKKyNkZWZpbmUJCVRYTU9ERV9CWUhBTkQJCTB4MDAJCisjZGVmaW5lCQlUWE1PREVfRE1BCQkJMHgwMgkKKworCisvLyBhbGwgdGhpbmdzIGNhbGxlZCAiU3RhdHVzTWVzc2FnZSIgYXJlIHNlbnQgb24gdGhlIHN0YXR1cyBlbmRwb2ludAorCitzdHJ1Y3Qga2V5c3Bhbl91c2E5MF9wb3J0U3RhdHVzTWVzc2FnZQkKK3sKKwl1OAltc3IsCQkJLy8gcmVwb3J0cyB0aGUgYWN0dWFsIE1TUiByZWdpc3RlcgorCQljdHMsCQkJLy8gcmVwb3J0cyBDVFMgcGluCisJCWRjZCwJCQkvLyByZXBvcnRzIERDRCBwaW4KKwkJZHNyLAkJCS8vIHJlcG9ydHMgRFNSIHBpbgorCQlyaSwJCQkJLy8gcmVwb3J0cyBSSSBwaW4KKwkJX3R4WG9mZiwJCS8vIHBvcnQgaXMgaW4gWE9GRiBzdGF0ZSAod2UgcmVjZWl2ZWQgWE9GRikKKwkJcnhCcmVhaywJCS8vIHJlcG9ydHMgYnJlYWsgc3RhdGUKKwkJcnhPdmVycnVuLAkJLy8gY291bnQgb2Ygb3ZlcnJ1biBlcnJvcnMgKHNpbmNlIGxhc3QgcmVwb3J0ZWQpCisJCXJ4UGFyaXR5LAkJLy8gY291bnQgb2YgcGFyaXR5IGVycm9ycyAoc2luY2UgbGFzdCByZXBvcnRlZCkKKwkJcnhGcmFtZSwJCS8vIGNvdW50IG9mIGZyYW1lIGVycm9ycyAoc2luY2UgbGFzdCByZXBvcnRlZCkKKwkJcG9ydFN0YXRlLAkJLy8gUE9SVFNUQVRFX3h4eCBiaXRzICh1c2VmdWwgZm9yIGRlYnVnZ2luZykKKwkJbWVzc2FnZUFjaywJCS8vIG1lc3NhZ2UgYWNrbm93bGVkZ2VtZW50CisJCWNoYXJBY2ssCQkvLyBjaGFyYWN0ZXIgYWNrbm93bGVkZ2VtZW50CisJCWNvbnRyb2xSZXNwb25zZTsJLy8gKHZhbHVlID0gcmV0dXJuU3RhdHVzKSBhIGNvbnRyb2wgbWVzc2FnZSBoYXMgYmVlbiBwcm9jZXNzZWQgCit9OworCisvLyBiaXRzIGluIFJYIGRhdGEgbWVzc2FnZSB3aGVuIFNUQVQgYnl0ZSBpcyBpbmNsdWRlZAorCisjZGVmaW5lCVJYRVJST1JfT1ZFUlJVTgkJMHgwMgorI2RlZmluZQlSWEVSUk9SX1BBUklUWQkJMHgwNAorI2RlZmluZQlSWEVSUk9SX0ZSQU1JTkcJCTB4MDgKKyNkZWZpbmUJUlhFUlJPUl9CUkVBSwkJMHgxMAorCisjZGVmaW5lCVBPUlRTVEFURV9FTkFCTEVECTB4ODAKKyNkZWZpbmUJUE9SVFNUQVRFX1RYRkxVU0gJMHgwMQorI2RlZmluZQlQT1JUU1RBVEVfVFhCUkVBSwkweDAyCisjZGVmaW5lCVBPUlRTVEFURV9MT09QQkFDSyAJMHgwNAorCisvLyBNU1IgYml0cworCisjZGVmaW5lIFVTQV9NU1JfZENUUwkgIAkJMHgwMQkJLy8gQ1RTIGhhcyBjaGFuZ2VkIHNpbmNlIGxhc3QgcmVwb3J0CQorI2RlZmluZSBVU0FfTVNSX2REU1IJICAJCTB4MDIKKyNkZWZpbmUgVVNBX01TUl9kUkkJCQkweDA0CisjZGVmaW5lIFVTQV9NU1JfZERDRAkgIAkJMHgwOAorCisjZGVmaW5lIFVTQV9NU1JfQ1RTCQkJMHgxMAkgIAkvLyBjdXJyZW50IHN0YXRlIG9mIENUUworI2RlZmluZSBVU0FfTVNSX0RTUgkJCTB4MjAKKyNkZWZpbmUgVVNBX1VTQV9NU1JfUkkJCQkweDQwCisjZGVmaW5lIE1TUl9EQ0QJCQkJMHg4MAorCisvLyBpZTogdGhlIG1heGltdW0gbGVuZ3RoIG9mIGFuIGVuZHBvaW50IGJ1ZmZlcgorI2RlZmluZQkJTUFYX0RBVEFfTEVOCQkJNjQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWM2MDJhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKQEAgLTAsMCArMSwxMDM0IEBACisvKgorICogS0xTSSBLTDVLVVNCMTA1IGNoaXAgUlMyMzIgY29udmVydGVyIGRyaXZlcgorICoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDAxIFV0ei1Vd2UgSGF1cyA8aGF1c0B1dWhhdXMuZGU+CisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEFsbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGV2aWNlIHdhcyBhY3F1aXJlZCB1c2luZyBTbmlmZlVTQiBhbnMgc25vb3BVU0IKKyAqIG9uIFdpbmRvd3M5OC4KKyAqIEl0IHdhcyB3cml0dGVuIG91dCBvZiBmcnVzdHJhdGlvbiB3aXRoIHRoZSBQYWxtQ29ubmVjdCBVU0IgU2VyaWFsIGFkYXB0ZXIKKyAqIHNvbGQgYnkgUGFsbSBJbmMuCisgKiBOZWl0aGVyIFBhbG0sIG5vciB0aGVpciBjb250cmFjdG9yIChNQ0NJKSBvciB0aGVpciBzdXBwbGllciAoS0xTSSkgcHJvdmlkZWQKKyAqIGluZm9ybWF0aW9uIHRoYXQgd2FzIG5vdCBhbHJlYWR5IGF2YWlsYWJsZS4KKyAqCisgKiBJdCBzZWVtcyB0aGF0IEtMU0kgYm91Z2h0IHNvbWUgc2lsaWNvbi1kZXNpZ24gaW5mb3JtYXRpb24gZnJvbSBTY2FuTG9naWMsIAorICogd2hvc2UgU0wxMVIgcHJvY2Vzc29yIGlzIGF0IHRoZSBjb3JlIG9mIHRoZSBLTDVLVVNCIGNoaXBzZXQgZnJvbSBLTFNJLgorICogS0xTSSBoYXMgZmlybXdhcmUgYXZhaWxhYmxlIGZvciB0aGVpciBkZXZpY2VzOyBpdCBpcyBwcm9iYWJsZSB0aGF0IHRoZQorICogZmlybXdhcmUgZGlmZmVycyBmcm9tIHRoYXQgdXNlZCBieSBLTFNJIGluIHRoZWlyIHByb2R1Y3RzLiBJZiB5b3UgaGF2ZSBhbgorICogb3JpZ2luYWwgS0xTSSBkZXZpY2UgYW5kIGNhbiBwcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gb24gaXQsIEkgd291bGQgYmUgCisgKiBtb3N0IGludGVyZXN0ZWQgaW4gYWRkaW5nIHN1cHBvcnQgZm9yIGl0IGhlcmUuIElmIHlvdSBoYXZlIGFueSBpbmZvcm1hdGlvbiAKKyAqIG9uIHRoZSBwcm90b2NvbCB1c2VkIChvciBmaW5kIGVycm9ycyBpbiBteSByZXZlcnNlLWVuZ2luZWVyZWQgc3R1ZmYpLCBwbGVhc2UKKyAqIGxldCBtZSBrbm93LgorICoKKyAqIFRoZSBjb2RlIHdhcyBvbmx5IHRlc3RlZCB3aXRoIGEgUGFsbUNvbm5lY3QgVVNCIGFkYXB0ZXI7IGlmIHlvdQorICogYXJlIGFkdmVudHVyb3VzLCB0cnkgaXQgd2l0aCBhbnkgS0xTSS1iYXNlZCBkZXZpY2UgYW5kIGxldCBtZSBrbm93IGhvdyBpdAorICogYnJlYWtzIHNvIHRoYXQgSSBjYW4gZml4IGl0IQorICovCisKKy8qIFRPRE86CisgKgljaGVjayBtb2RlbSBsaW5lIHNpZ25hbHMKKyAqCWltcGxlbWVudCBoYW5kc2hha2luZyBvciBkZWNpZGUgdGhhdCB3ZSBkbyBub3Qgc3VwcG9ydCBpdAorICovCisKKy8qIEhpc3Rvcnk6CisgKiAgIDAuM2EgLSBpbXBsZW1lbnRlZCBwb29scyBvZiB3cml0ZSBVUkJzCisgKiAgIDAuMyAgLSBhbHBoYSB2ZXJzaW9uIGZvciBwdWJsaWMgdGVzdGluZworICogICAwLjIgIC0gVElPQ01HRVQgd29ya3MsIHNvIGF1dG9waWxvdCgxKSBjYW4gYmUgdXNlZCEKKyAqICAgMC4xICAtIGNhbiBiZSB1c2VkIHRvIHRvIHBpbG90LXhmZXIgLXAgL2Rldi90dHlVU0IwIC1sCisgKgorICogICBUaGUgZHJpdmVyIHNrZWxldG9uIGlzIG1haW5seSBiYXNlZCBvbiBtY3RfdTIzMi5jIGFuZCB2YXJpb3VzIG90aGVyIAorICogICBwaWVjZXMgb2YgY29kZSBzaGFtZWxlc3NseSBjb3BpZWQgZnJvbSB0aGUgZHJpdmVycy91c2Ivc2VyaWFsLyBkaXJlY3RvcnkuCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorI2luY2x1ZGUgImtsNWt1c2IxMDUuaCIKKworc3RhdGljIGludCBkZWJ1ZzsKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuM2EiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlV0ei1Vd2UgSGF1cyA8aGF1c0B1dWhhdXMuZGU+IgorI2RlZmluZSBEUklWRVJfREVTQyAiS0xTSSBLTDVLVVNCMTA1IGNoaXBzZXQgVVNCLT5TZXJpYWwgQ29udmVydGVyIGRyaXZlciIKKworCisvKgorICogRnVuY3Rpb24gcHJvdG90eXBlcworICovCitzdGF0aWMgaW50ICBrbHNpXzEwNV9zdGFydHVwCSAgICAgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIGtsc2lfMTA1X3NodXRkb3duCSAgICAgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIGtsc2lfMTA1X29wZW4JICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSAgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQga2xzaV8xMDVfY2xvc2UJICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSAgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCAga2xzaV8xMDVfd3JpdGUJICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJCQkgIGludCBjb3VudCk7CitzdGF0aWMgdm9pZCBrbHNpXzEwNV93cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyBpbnQgIGtsc2lfMTA1X2NoYXJzX2luX2J1ZmZlciAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCAga2xzaV8xMDVfd3JpdGVfcm9vbSAgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CisKK3N0YXRpYyB2b2lkIGtsc2lfMTA1X3JlYWRfYnVsa19jYWxsYmFjayAgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQga2xzaV8xMDVfc2V0X3Rlcm1pb3MgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJICBzdHJ1Y3QgdGVybWlvcyAqIG9sZCk7CitzdGF0aWMgaW50ICBrbHNpXzEwNV9pb2N0bAkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJICBzdHJ1Y3QgZmlsZSAqIGZpbGUsCisJCQkJCSAgdW5zaWduZWQgaW50IGNtZCwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgdm9pZCBrbHNpXzEwNV90aHJvdHRsZQkJIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGtsc2lfMTA1X3VudGhyb3R0bGUJCSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CisvKgorc3RhdGljIHZvaWQga2xzaV8xMDVfYnJlYWtfY3RsCSAgICAgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgIGludCBicmVha19zdGF0ZSApOworICovCitzdGF0aWMgaW50ICBrbHNpXzEwNV90aW9jbWdldAkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50ICBrbHNpXzEwNV90aW9jbXNldAkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IHNldCwKKwkJCQkJICB1bnNpZ25lZCBpbnQgY2xlYXIpOworCisvKgorICogQWxsIG9mIHRoZSBkZXZpY2UgaW5mbyBuZWVkZWQgZm9yIHRoZSBLTFNJIGNvbnZlcnRlcnMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoUEFMTUNPTk5FQ1RfVklELCBQQUxNQ09OTkVDVF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEtMU0lfVklELCBLTFNJX0tMNUtVU0IxMDVEX1BJRCkgfSwKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGtsNWt1c2IxMDVkX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkia2w1a3VzYjEwNWQiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUga2w1a3VzYjEwNWRfZGV2aWNlID0geworCS5vd25lciA9ICAgICAgICAgICAgIFRISVNfTU9EVUxFLAorCS5uYW1lID0JCSAgICAgIktMNUtVU0IxMDVEIC8gUGFsbUNvbm5lY3QiLAorCS5zaG9ydF9uYW1lID0JICAgICAia2w1a3VzYjEwNWQiLAorCS5pZF90YWJsZSA9CSAgICAgaWRfdGFibGUsCisJLm51bV9pbnRlcnJ1cHRfaW4gPSAgMSwKKwkubnVtX2J1bGtfaW4gPQkgICAgIDEsCisJLm51bV9idWxrX291dCA9CSAgICAgMSwKKwkubnVtX3BvcnRzID0JICAgICAxLAorCS5vcGVuID0JCSAgICAga2xzaV8xMDVfb3BlbiwKKwkuY2xvc2UgPQkgICAgIGtsc2lfMTA1X2Nsb3NlLAorCS53cml0ZSA9CSAgICAga2xzaV8xMDVfd3JpdGUsCisJLndyaXRlX2J1bGtfY2FsbGJhY2sgPSBrbHNpXzEwNV93cml0ZV9idWxrX2NhbGxiYWNrLAorCS5jaGFyc19pbl9idWZmZXIgPSAgIGtsc2lfMTA1X2NoYXJzX2luX2J1ZmZlciwKKwkud3JpdGVfcm9vbSA9ICAgICAgICBrbHNpXzEwNV93cml0ZV9yb29tLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPWtsc2lfMTA1X3JlYWRfYnVsa19jYWxsYmFjaywKKwkuaW9jdGwgPQkgICAgIGtsc2lfMTA1X2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CSAgICAga2xzaV8xMDVfc2V0X3Rlcm1pb3MsCisJLyouYnJlYWtfY3RsID0JICAgICBrbHNpXzEwNV9icmVha19jdGwsKi8KKwkudGlvY21nZXQgPSAgICAgICAgICBrbHNpXzEwNV90aW9jbWdldCwKKwkudGlvY21zZXQgPSAgICAgICAgICBrbHNpXzEwNV90aW9jbXNldCwKKwkuYXR0YWNoID0JICAgICBrbHNpXzEwNV9zdGFydHVwLAorCS5zaHV0ZG93biA9CSAgICAga2xzaV8xMDVfc2h1dGRvd24sCisJLnRocm90dGxlID0JICAgICBrbHNpXzEwNV90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CSAgICAga2xzaV8xMDVfdW50aHJvdHRsZSwKK307CisKK3N0cnVjdCBrbHNpXzEwNV9wb3J0X3NldHRpbmdzIHsKKwlfX3U4CXBrdGxlbjsJCS8qIGFsd2F5cyA1LCBpdCBzZWVtcyAqLworCV9fdTgJYmF1ZHJhdGU7CisJX191OAlkYXRhYml0czsKKwlfX3U4CXVua25vd24xOworCV9fdTgJdW5rbm93bjI7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogd2UgaW1wbGVtZW50IGEgcG9vbCBvZiBOVU1fVVJCUyB1cmJzIHBlciB1c2Jfc2VyaWFsICovCisjZGVmaW5lIE5VTV9VUkJTCQkJMQorI2RlZmluZSBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUJNjQKK3N0cnVjdCBrbHNpXzEwNV9wcml2YXRlIHsKKwlzdHJ1Y3Qga2xzaV8xMDVfcG9ydF9zZXR0aW5ncwljZmc7CisJc3RydWN0IHRlcm1pb3MJCQl0ZXJtaW9zOworCXVuc2lnbmVkIGxvbmcJCQlsaW5lX3N0YXRlOyAvKiBtb2RlbSBsaW5lIHNldHRpbmdzICovCisJLyogd3JpdGUgcG9vbCAqLworCXN0cnVjdCB1cmIgKgkJCXdyaXRlX3VyYl9wb29sW05VTV9VUkJTXTsKKwlzcGlubG9ja190CQkJbG9jazsKKwl1bnNpZ25lZCBsb25nCQkJYnl0ZXNfaW47CisJdW5zaWduZWQgbG9uZwkJCWJ5dGVzX291dDsKK307CisKKworLyoKKyAqIEhhbmRsZSB2ZW5kb3Igc3BlY2lmaWMgVVNCIHJlcXVlc3RzCisgKi8KKworCisjZGVmaW5lIEtMU0lfVElNRU9VVAkgNTAwMCAvKiBkZWZhdWx0IHVyYiB0aW1lb3V0ICovCisKK3N0YXRpYyBpbnQga2xzaV8xMDVfY2hnX3BvcnRfc2V0dGluZ3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkgICAgICBzdHJ1Y3Qga2xzaV8xMDVfcG9ydF9zZXR0aW5ncyAqc2V0dGluZ3MpCit7CisJaW50IHJjOworCisgICAgICAgIHJjID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJICAgICB1c2Jfc25kY3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJICAgICBLTDVLVVNCMTA1QV9TSU9fU0VUX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCSAgICAgMCwgLyogdmFsdWUgKi8KKwkJCSAgICAgMCwgLyogaW5kZXggKi8KKwkJCSAgICAgc2V0dGluZ3MsCisJCQkgICAgIHNpemVvZihzdHJ1Y3Qga2xzaV8xMDVfcG9ydF9zZXR0aW5ncyksCisJCQkgICAgIEtMU0lfVElNRU9VVCk7CisJaWYgKHJjIDwgMCkKKwkJZXJyKCJDaGFuZ2UgcG9ydCBzZXR0aW5ncyBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmMpOworCWluZm8oIiVzIC0gJWQgYnl0ZSBibG9jaywgYmF1ZHJhdGUgJXgsIGRhdGFiaXRzICVkLCB1MSAlZCwgdTIgJWQiLAorCSAgICBfX0ZVTkNUSU9OX18sCisJICAgIHNldHRpbmdzLT5wa3RsZW4sCisJICAgIHNldHRpbmdzLT5iYXVkcmF0ZSwgc2V0dGluZ3MtPmRhdGFiaXRzLAorCSAgICBzZXR0aW5ncy0+dW5rbm93bjEsIHNldHRpbmdzLT51bmtub3duMik7CisgICAgICAgIHJldHVybiByYzsKK30gLyoga2xzaV8xMDVfY2hnX3BvcnRfc2V0dGluZ3MgKi8KKworLyogdHJhbnNsYXRlIGEgMTYtYml0IHN0YXR1cyB2YWx1ZSBmcm9tIHRoZSBkZXZpY2UgdG8gbGludXgncyBUSU8gYml0cyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcga2xzaV8xMDVfc3RhdHVzMmxpbmVzdGF0ZShjb25zdCBfX3UxNiBzdGF0dXMpCit7CisJdW5zaWduZWQgbG9uZyByZXMgPSAwOworCisJcmVzID0gICAoKHN0YXR1cyAmIEtMNUtVU0IxMDVBX0RTUikgPyBUSU9DTV9EU1IgOiAwKQorCSAgICAgIHwgKChzdGF0dXMgJiBLTDVLVVNCMTA1QV9DVFMpID8gVElPQ01fQ1RTIDogMCkKKwkgICAgICA7CisKKwlyZXR1cm4gcmVzOworfQorLyogCisgKiBSZWFkIGxpbmUgY29udHJvbCB2aWEgdmVuZG9yIGNvbW1hbmQgYW5kIHJldHVybiByZXN1bHQgdGhyb3VnaAorICogKmxpbmVfc3RhdGVfcCAKKyAqLworLyogSXQgc2VlbXMgdGhhdCB0aGUgc3RhdHVzIGJ1ZmZlciBoYXMgYWx3YXlzIG9ubHkgMiBieXRlcyBsZW5ndGggKi8KKyNkZWZpbmUgS0xTSV9TVEFUVVNCVUZfTEVOCTIKK3N0YXRpYyBpbnQga2xzaV8xMDVfZ2V0X2xpbmVfc3RhdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkgICB1bnNpZ25lZCBsb25nICpsaW5lX3N0YXRlX3ApCit7CisJaW50IHJjOworCV9fdTggc3RhdHVzX2J1ZltLTFNJX1NUQVRVU0JVRl9MRU5dID0geyAtMSwtMX07CisJX191MTYgc3RhdHVzOworCisJaW5mbygiJXMgLSBzZW5kaW5nIFNJTyBQb2xsIHJlcXVlc3QiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICByYyA9IHVzYl9jb250cm9sX21zZyhwb3J0LT5zZXJpYWwtPmRldiwKKwkJCSAgICAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICAgS0w1S1VTQjEwNUFfU0lPX1BPTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4sCisJCQkgICAgIDAsIC8qIHZhbHVlICovCisJCQkgICAgIDAsIC8qIGluZGV4ICovCisJCQkgICAgIHN0YXR1c19idWYsIEtMU0lfU1RBVFVTQlVGX0xFTiwKKwkJCSAgICAgMTAwMDAKKwkJCSAgICAgKTsKKwlpZiAocmMgPCAwKQorCQllcnIoIlJlYWRpbmcgbGluZSBzdGF0dXMgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJjKTsKKwllbHNlIHsKKwkJc3RhdHVzID0gc3RhdHVzX2J1ZlswXSArIChzdGF0dXNfYnVmWzFdPDw4KTsKKworCQlpbmZvKCIlcyAtIHJlYWQgc3RhdHVzICV4ICV4IiwgX19GVU5DVElPTl9fLAorCQkgICAgIHN0YXR1c19idWZbMF0sIHN0YXR1c19idWZbMV0pOworCisJCSpsaW5lX3N0YXRlX3AgPSBrbHNpXzEwNV9zdGF0dXMybGluZXN0YXRlKHN0YXR1cyk7CisJfQorCisgICAgICAgIHJldHVybiByYzsKK30KKworCisvKgorICogRHJpdmVyJ3MgdHR5IGludGVyZmFjZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgaW50IGtsc2lfMTA1X3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXY7CisJaW50IGk7CisKKwkvKiBjaGVjayBpZiB3ZSBzdXBwb3J0IHRoZSBwcm9kdWN0IGlkIChzZWUga2V5c3Bhbi5jKQorCSAqIEZJWE1FCisJICovCisKKwkvKiBhbGxvY2F0ZSB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSAqLworCWZvciAoaT0wOyBpPHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKKwkJaW50IGo7CisJCXByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga2xzaV8xMDVfcHJpdmF0ZSksCisJCQkJCQkgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcml2KSB7CisJCQlkYmcoIiVza21hbGxvYyBmb3Iga2xzaV8xMDVfcHJpdmF0ZSBmYWlsZWQuIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCS8qIHNldCBpbml0aWFsIHZhbHVlcyBmb3IgY29udHJvbCBzdHJ1Y3R1cmVzICovCisJCXByaXYtPmNmZy5wa3RsZW4gICAgPSA1OworCQlwcml2LT5jZmcuYmF1ZHJhdGUgID0ga2w1a3VzYjEwNWFfc2lvX2I5NjAwOworCQlwcml2LT5jZmcuZGF0YWJpdHMgID0ga2w1a3VzYjEwNWFfZHRiXzg7CisJCXByaXYtPmNmZy51bmtub3duMSAgPSAwOworCQlwcml2LT5jZmcudW5rbm93bjIgID0gMTsKKworCQlwcml2LT5saW5lX3N0YXRlICAgID0gMDsKKworCQlwcml2LT5ieXRlc19pbgkgICAgPSAwOworCQlwcml2LT5ieXRlc19vdXQJICAgID0gMDsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgcHJpdik7CisKKwkJc3Bpbl9sb2NrX2luaXQgKCZwcml2LT5sb2NrKTsKKwkJZm9yIChqPTA7IGo8TlVNX1VSQlM7IGorKykgeworCQkJc3RydWN0IHVyYiogdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKworCQkJcHJpdi0+d3JpdGVfdXJiX3Bvb2xbal0gPSB1cmI7CisJCQlpZiAodXJiID09IE5VTEwpIHsKKwkJCQllcnIoIk5vIG1vcmUgdXJicz8/PyIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IE5VTEw7CisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MgKFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKKwkJCQllcnIoIiVzIC0gb3V0IG9mIG1lbW9yeSBmb3IgdXJiIGJ1ZmZlcnMuIiwgX19GVU5DVElPTl9fKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCS8qIHByaXYtPnRlcm1pb3MgaXMgbGVmdCB1bmluaXRhbGl6ZWQgdW50aWwgcG9ydCBvcGVuaW5nICovCisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNlcmlhbC0+cG9ydFtpXS0+d3JpdGVfd2FpdCk7CisJfQorCQorCXJldHVybiAoMCk7Cit9IC8qIGtsc2lfMTA1X3N0YXJ0dXAgKi8KKworCitzdGF0aWMgdm9pZCBrbHNpXzEwNV9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgaTsKKwkKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCS8qIHN0b3AgcmVhZHMgYW5kIHdyaXRlcyBvbiBhbGwgcG9ydHMgKi8KKwlmb3IgKGk9MDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldKTsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlpZiAocHJpdikgeworCQkJLyoga2lsbCBvdXIgd3JpdGUgdXJiIHBvb2wgKi8KKwkJCWludCBqOworCQkJc3RydWN0IHVyYiAqKndyaXRlX3VyYnMgPSBwcml2LT53cml0ZV91cmJfcG9vbDsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLGZsYWdzKTsKKworCQkJZm9yIChqID0gMDsgaiA8IE5VTV9VUkJTOyBqKyspIHsKKwkJCQlpZiAod3JpdGVfdXJic1tqXSkgeworCQkJCQkvKiBGSVhNRSAtIHVuY29tbWVudCB0aGUgZm9sbG93aW5nCisJCQkJCSAqIHVzYl9raWxsX3VyYiBjYWxsIHdoZW4gdGhlIGhvc3QKKwkJCQkJICogY29udHJvbGxlcnMgZ2V0IGZpeGVkIHRvIHNldAorCQkJCQkgKiB1cmItPmRldiA9IE5VTEwgYWZ0ZXIgdGhlIHVyYiBpcworCQkJCQkgKiBmaW5pc2hlZC4gIE90aGVyd2lzZSB0aGlzIGNhbGwKKwkJCQkJICogb29wc2VzLiAqLworCQkJCQkvKiB1c2Jfa2lsbF91cmIod3JpdGVfdXJic1tqXSk7ICovCisJCQkJCWlmICh3cml0ZV91cmJzW2pdLT50cmFuc2Zlcl9idWZmZXIpCisJCQkJCQkgICAga2ZyZWUod3JpdGVfdXJic1tqXS0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJCQkJdXNiX2ZyZWVfdXJiICh3cml0ZV91cmJzW2pdKTsKKwkJCQl9CisJCQl9CisKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkJCWtmcmVlKHByaXYpOworCQkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CisJCX0KKwl9Cit9IC8qIGtsc2lfMTA1X3NodXRkb3duICovCisKK3N0YXRpYyBpbnQgIGtsc2lfMTA1X29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBrbHNpXzEwNV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCByZXR2YWwgPSAwOworCWludCByYzsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGxpbmVfc3RhdGU7CisJc3RydWN0IGtsc2lfMTA1X3BvcnRfc2V0dGluZ3MgY2ZnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiBmb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMKKwkgKiB0aGUgZGF0YSB0aHJvdWdoCisJICogcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IDE7ICovCisKKwkvKiBEbyBhIGRlZmluZWQgcmVzdGFydDoKKwkgKiBTZXQgdXAgc2FuZSBkZWZhdWx0IGJhdWQgcmF0ZSBhbmQgc2VuZCB0aGUgJ1JFQURfT04nCisJICogdmVuZG9yIGNvbW1hbmQuIAorCSAqIEZJWE1FOiBzZXQgbW9kZW0gbGluZSBjb250cm9sIChob3c/KQorCSAqIFRoZW4gcmVhZCB0aGUgbW9kZW0gbGluZSBjb250cm9sIGFuZCBzdG9yZSB2YWx1ZXMgaW4KKwkgKiBwcml2LT5saW5lX3N0YXRlLgorCSAqLworCWNmZy5wa3RsZW4gICA9IDU7CisJY2ZnLmJhdWRyYXRlID0ga2w1a3VzYjEwNWFfc2lvX2I5NjAwOworCWNmZy5kYXRhYml0cyA9IGtsNWt1c2IxMDVhX2R0Yl84OworCWNmZy51bmtub3duMSA9IDA7CisJY2ZnLnVua25vd24yID0gMTsKKwlrbHNpXzEwNV9jaGdfcG9ydF9zZXR0aW5ncyhwb3J0LCAmY2ZnKTsKKwkKKwkvKiBzZXQgdXAgdGVybWlvcyBzdHJ1Y3R1cmUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT50ZXJtaW9zLmNfaWZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWc7CisJcHJpdi0+dGVybWlvcy5jX29mbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX29mbGFnOworCXByaXYtPnRlcm1pb3MuY19jZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwlwcml2LT50ZXJtaW9zLmNfbGZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfbGZsYWc7CisJZm9yIChpPTA7IGk8TkNDUzsgaSsrKQorCQlwcml2LT50ZXJtaW9zLmNfY2NbaV0gPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2NbaV07CisJcHJpdi0+Y2ZnLnBrdGxlbiAgID0gY2ZnLnBrdGxlbjsKKwlwcml2LT5jZmcuYmF1ZHJhdGUgPSBjZmcuYmF1ZHJhdGU7CisJcHJpdi0+Y2ZnLmRhdGFiaXRzID0gY2ZnLmRhdGFiaXRzOworCXByaXYtPmNmZy51bmtub3duMSA9IGNmZy51bmtub3duMTsKKwlwcml2LT5jZmcudW5rbm93bjIgPSBjZmcudW5rbm93bjI7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIFJFQURfT04gYW5kIHVyYiBzdWJtaXNzaW9uICovCisJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCSAgICAgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJICAgICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJICAgICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCSAgICAgIGtsc2lfMTA1X3JlYWRfYnVsa19jYWxsYmFjaywKKwkJICAgICAgcG9ydCk7CisKKwlyYyA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmMpIHsKKwkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmMpOworCQlyZXR2YWwgPSByYzsKKwkJZ290byBleGl0OworCX0KKworCXJjID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJICAgICB1c2Jfc25kY3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsMCksCisJCQkgICAgIEtMNUtVU0IxMDVBX1NJT19DT05GSUdVUkUsCisJCQkgICAgIFVTQl9UWVBFX1ZFTkRPUnxVU0JfRElSX09VVHxVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJICAgICBLTDVLVVNCMTA1QV9TSU9fQ09ORklHVVJFX1JFQURfT04sCisJCQkgICAgIDAsIC8qIGluZGV4ICovCisJCQkgICAgIE5VTEwsCisJCQkgICAgIDAsCisJCQkgICAgIEtMU0lfVElNRU9VVCk7CisJaWYgKHJjIDwgMCkgeworCQllcnIoIkVuYWJsaW5nIHJlYWQgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJjKTsKKwkJcmV0dmFsID0gcmM7CisJfSBlbHNlIAorCQlkYmcoIiVzIC0gZW5hYmxlZCByZWFkaW5nIiwgX19GVU5DVElPTl9fKTsKKworCXJjID0ga2xzaV8xMDVfZ2V0X2xpbmVfc3RhdGUocG9ydCwgJmxpbmVfc3RhdGUpOworCWlmIChyYyA+PSAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlwcml2LT5saW5lX3N0YXRlID0gbGluZV9zdGF0ZTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJZGJnKCIlcyAtIHJlYWQgbGluZSBzdGF0ZSAweCVseCIsIF9fRlVOQ1RJT05fXywgbGluZV9zdGF0ZSk7CisJCXJldHZhbCA9IDA7CisJfSBlbHNlCisJCXJldHZhbCA9IHJjOworCitleGl0OgorCXJldHVybiByZXR2YWw7Cit9IC8qIGtsc2lfMTA1X29wZW4gKi8KKworCitzdGF0aWMgdm9pZCBrbHNpXzEwNV9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IHJjOworCisJZGJnKCIlcyBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLyogc2VuZCBSRUFEX09GRiAqLworCXJjID0gdXNiX2NvbnRyb2xfbXNnIChwb3J0LT5zZXJpYWwtPmRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCisJCQkgICAgICBLTDVLVVNCMTA1QV9TSU9fQ09ORklHVVJFLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQsCisJCQkgICAgICBLTDVLVVNCMTA1QV9TSU9fQ09ORklHVVJFX1JFQURfT0ZGLAorCQkJICAgICAgMCwgLyogaW5kZXggKi8KKwkJCSAgICAgIE5VTEwsIDAsCisJCQkgICAgICBLTFNJX1RJTUVPVVQpOworCWlmIChyYyA8IDApCisJCSAgICBlcnIoIkRpc2FibGluZyByZWFkIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByYyk7CisKKwkvKiBzaHV0ZG93biBvdXIgYnVsayByZWFkcyBhbmQgd3JpdGVzICovCisJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwkvKiB1bmxpbmsgb3VyIHdyaXRlIHBvb2wgKi8KKwkvKiBGSVhNRSAqLworCS8qIHdnZyAtIGRvIEkgbmVlZCB0aGlzPyBJIHRoaW5rIHNvLiAqLworCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwlpbmZvKCJrbDVrdXNiMTA1IHBvcnQgc3RhdHM6ICVsZCBieXRlcyBpbiwgJWxkIGJ5dGVzIG91dCIsIHByaXYtPmJ5dGVzX2luLCBwcml2LT5ieXRlc19vdXQpOworfSAvKiBrbHNpXzEwNV9jbG9zZSAqLworCisKKy8qIFdlIG5lZWQgdG8gd3JpdGUgYSBjb21wbGV0ZSA2NC1ieXRlIGRhdGEgYmxvY2sgYW5kIGVuY29kZSB0aGUKKyAqIG51bWJlciBhY3R1YWxseSBzZW50IGluIHRoZSBmaXJzdCBkb3VibGUtYnl0ZSwgTFNCLW9yZGVyLiBUaGF0IAorICogbGVhdmVzIGF0IG1vc3QgNjIgYnl0ZXMgb2YgcGF5bG9hZC4KKyAqLworI2RlZmluZSBLTFNJXzEwNV9EQVRBX09GRlNFVAkyICAgLyogaW4gdGhlIGJ1bGsgdXJiIGRhdGEgYmxvY2sgKi8KKworCitzdGF0aWMgaW50IGtsc2lfMTA1X3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IHJlc3VsdCwgc2l6ZTsKKwlpbnQgYnl0ZXNfc2VudD0wOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCS8qIHRyeSB0byBmaW5kIGEgZnJlZSB1cmIgKHdyaXRlIDAgYnl0ZXMgaWYgbm9uZSkgKi8KKwkJc3RydWN0IHVyYiAqdXJiID0gTlVMTDsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJaW50IGk7CisJCS8qIHNpbmNlIHRoZSBwb29sIGlzIHBlci1wb3J0IHdlIG1pZ2h0IG5vdCBuZWVkIHRoZSBzcGluIGxvY2sgIT8gKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCWZvciAoaT0wOyBpPE5VTV9VUkJTOyBpKyspIHsKKwkJCWlmIChwcml2LT53cml0ZV91cmJfcG9vbFtpXS0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQkJCXVyYiA9IHByaXYtPndyaXRlX3VyYl9wb29sW2ldOworCQkJCWRiZygiJXMgLSB1c2luZyBwb29sIFVSQiAlZCIsIF9fRlVOQ1RJT05fXywgaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCQlpZiAodXJiPT1OVUxMKSB7CisJCQlkYmcoIiVzIC0gbm8gbW9yZSBmcmVlIHVyYnMiLCBfX0ZVTkNUSU9OX18pOworCQkJZ290byBleGl0OworCQl9CisKKwkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpIHsKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyAoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLCBHRlBfQVRPTUlDKTsKKwkJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7CisJCQkJZXJyKCIlcyAtIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJZ290byBleGl0OworCQkJfQorCQl9CisKKwkJc2l6ZSA9IG1pbiAoY291bnQsIHBvcnQtPmJ1bGtfb3V0X3NpemUgLSBLTFNJXzEwNV9EQVRBX09GRlNFVCk7CisJCXNpemUgPSBtaW4gKHNpemUsIFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSAtIEtMU0lfMTA1X0RBVEFfT0ZGU0VUKTsKKworCQltZW1jcHkgKHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgS0xTSV8xMDVfREFUQV9PRkZTRVQsIGJ1Ziwgc2l6ZSk7CisKKwkJLyogd3JpdGUgcGF5bG9hZCBzaXplIGludG8gdHJhbnNmZXIgYnVmZmVyICovCisJCSgoX191OCAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyKVswXSA9IChfX3U4KSAoc2l6ZSAmIDB4RkYpOworCQkoKF9fdTggKil1cmItPnRyYW5zZmVyX2J1ZmZlcilbMV0gPSAoX191OCkgKChzaXplICYgMHhGRjAwKT4+OCk7CisKKwkJLyogc2V0IHVwIG91ciB1cmIgKi8KKwkJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKKwkJCSAgICAgIHVzYl9zbmRidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKKwkJCQkJICAgICAgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJICAgICAgVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLAorCQkJICAgICAga2xzaV8xMDVfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkJCSAgICAgIHBvcnQpOworCisJCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQgKi8KKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJlc3VsdCkgeworCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJYnVmICs9IHNpemU7CisJCWJ5dGVzX3NlbnQgKz0gc2l6ZTsKKwkJY291bnQgLT0gc2l6ZTsKKwl9CitleGl0OgorCS8qIGxvY2tsZXNzLCBidXQgaXQncyBmb3IgZGVidWcgaW5mbyBvbmx5Li4uICovCisJcHJpdi0+Ynl0ZXNfb3V0Kz1ieXRlc19zZW50OworCisJcmV0dXJuIGJ5dGVzX3NlbnQ7CS8qIHRoYXQncyBob3cgbXVjaCB3ZSB3cm90ZSAqLworfSAvKiBrbHNpXzEwNV93cml0ZSAqLworCitzdGF0aWMgdm9pZCBrbHNpXzEwNV93cml0ZV9idWxrX2NhbGxiYWNrICggc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLAorCQkgICAgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJLyogZnJvbSBnZW5lcmljX3dyaXRlX2J1bGtfY2FsbGJhY2sgKi8KKwlzY2hlZHVsZV93b3JrKCZwb3J0LT53b3JrKTsKK30gLyoga2xzaV8xMDVfd3JpdGVfYnVsa19jb21wbGV0aW9uX2NhbGxiYWNrICovCisKKworLyogcmV0dXJuIG51bWJlciBvZiBjaGFyYWN0ZXJzIGN1cnJlbnRseSBpbiB0aGUgd3JpdGluZyBwcm9jZXNzICovCitzdGF0aWMgaW50IGtsc2lfMTA1X2NoYXJzX2luX2J1ZmZlciAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlpbnQgY2hhcnMgPSAwOworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fVVJCUzsgKytpKSB7CisJCWlmIChwcml2LT53cml0ZV91cmJfcG9vbFtpXS0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQkJY2hhcnMgKz0gVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19GVU5DVElPTl9fLCBjaGFycyk7CisJcmV0dXJuIChjaGFycyk7Cit9CisKK3N0YXRpYyBpbnQga2xzaV8xMDVfd3JpdGVfcm9vbSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCWludCByb29tID0gMDsKKwlzdHJ1Y3Qga2xzaV8xMDVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBOVU1fVVJCUzsgKytpKSB7CisJCWlmIChwcml2LT53cml0ZV91cmJfcG9vbFtpXS0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQkJcm9vbSArPSBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkU7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJZGJnKCIlcyAtIHJldHVybnMgJWQiLCBfX0ZVTkNUSU9OX18sIHJvb20pOworCXJldHVybiAocm9vbSk7Cit9CisKKworCitzdGF0aWMgdm9pZCBrbHNpXzEwNV9yZWFkX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBrbHNpXzEwNV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCByYzsKKworICAgICAgICBkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIFRoZSB1cmIgbWlnaHQgaGF2ZSBiZWVuIGtpbGxlZC4gKi8KKyAgICAgICAgaWYgKHVyYi0+c3RhdHVzKSB7CisgICAgICAgICAgICAgICAgZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sCisJCSAgICB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisJCisJLyogVGhlIGRhdGEgcmVjZWl2ZWQgaXMgYWdhaW4gcHJlY2VkZWQgYnkgYSBsZW5ndGggZG91YmxlLWJ5dGUgaW4gTFNCLQorCSAqIGZpcnN0IG9yZGVyIChzZWUga2xzaV8xMDVfd3JpdGUoKSApCisJICovCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSAwKSB7CisJCS8qIGVtcHR5IHVyYnMgc2VlbSB0byBoYXBwZW4sIHdlIGlnbm9yZSB0aGVtICovCisJCS8qIGRiZygiJXMgLSBlbXRweSBVUkIiLCBfX0ZVTkNUSU9OX18pOyAqLworCSAgICAgICA7CisJfSBlbHNlIGlmICh1cmItPmFjdHVhbF9sZW5ndGggPD0gMikgeworCQlkYmcoIiVzIC0gc2l6ZSAlZCBVUkIgbm90IHVuZGVyc3Rvb2QiLCBfX0ZVTkNUSU9OX18sCisJCSAgICB1cmItPmFjdHVhbF9sZW5ndGgpOworCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywKKwkJCQkgICAgICB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCX0gZWxzZSB7CisJCWludCBpOworCQlpbnQgYnl0ZXNfc2VudCA9ICgoX191OCAqKSBkYXRhKVswXSArCisJCQkJICgodW5zaWduZWQgaW50KSAoKF9fdTggKikgZGF0YSlbMV0gPDwgOCk7CisJCXR0eSA9IHBvcnQtPnR0eTsKKwkJLyogd2Ugc2hvdWxkIGltbWVkaWF0ZWx5IHJlc3VibWl0IHRoZSBVUkIsIGJlZm9yZSBhdHRlbXB0aW5nCisJCSAqIHRvIHBhc3MgdGhlIGRhdGEgb24gdG8gdGhlIHR0eSBsYXllci4gQnV0IHRoYXQgbmVlZHMgbG9ja2luZworCQkgKiBhZ2FpbnN0IHJlLWVudHJ5IGFuIHRoZW4gbWl4ZWQtdXAgZGF0YSBiZWNhdXNlIG9mCisJCSAqIGludGVybWl4ZWQgdHR5X2ZsaXBfYnVmZmVyX3B1c2goKXMKKwkJICogRklYTUUKKwkJICovIAorCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywKKwkJCQkgICAgICB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCisJCWlmIChieXRlc19zZW50ICsgMiA+IHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQkJZGJnKCIlcyAtIHRyeWluZyB0byByZWFkIG1vcmUgZGF0YSB0aGFuIGF2YWlsYWJsZSIKKwkJCSAgICAiICglZCB2cy4gJWQpIiwgX19GVU5DVElPTl9fLAorCQkJICAgIGJ5dGVzX3NlbnQrMiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJCS8qIGNhcCBhdCBpbXBsaWVkIGxpbWl0ICovCisJCQlieXRlc19zZW50ID0gdXJiLT5hY3R1YWxfbGVuZ3RoIC0gMjsKKwkJfQorCisJCWZvciAoaSA9IDI7IGkgPCAyK2J5dGVzX3NlbnQ7IGkrKykgeworCQkJLyogaWYgd2UgaW5zZXJ0IG1vcmUgdGhhbiBUVFlfRkxJUEJVRl9TSVpFIGNoYXJhY3RlcnMsCisJCQkgKiB3ZSBkcm9wIHRoZW0uICovCisJCQlpZih0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkgeworCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQl9CisJCQkvKiB0aGlzIGRvZXNuJ3QgYWN0dWFsbHkgcHVzaCB0aGUgZGF0YSB0aHJvdWdoIHVubGVzcyAKKwkJCSAqIHR0eS0+bG93X2xhdGVuY3kgaXMgc2V0ICovCisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksICgoX191OCopIGRhdGEpW2ldLCAwKTsKKwkJfQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCisJCS8qIGFnYWluIGxvY2tsZXNzLCBidXQgZGVidWcgaW5mbyBvbmx5ICovCisJCXByaXYtPmJ5dGVzX2luICs9IGJ5dGVzX3NlbnQ7CisJfQorCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCAgKi8KKwl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgcG9ydC0+c2VyaWFsLT5kZXYsIAorCQkgICAgICB1c2JfcmN2YnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsCisJCQkJICAgICAgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkgICAgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkgICAgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJICAgICAga2xzaV8xMDVfcmVhZF9idWxrX2NhbGxiYWNrLAorCQkgICAgICBwb3J0KTsKKwlyYyA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmMpCisJCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmMpOworfSAvKiBrbHNpXzEwNV9yZWFkX2J1bGtfY2FsbGJhY2sgKi8KKworCitzdGF0aWMgdm9pZCBrbHNpXzEwNV9zZXRfdGVybWlvcyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkgIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlzdHJ1Y3Qga2xzaV8xMDVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBpbnQgaWZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWc7CisJdW5zaWduZWQgaW50IG9sZF9pZmxhZyA9IG9sZF90ZXJtaW9zLT5jX2lmbGFnOworCXVuc2lnbmVkIGludCBjZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwl1bnNpZ25lZCBpbnQgb2xkX2NmbGFnID0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWc7CisJc3RydWN0IGtsc2lfMTA1X3BvcnRfc2V0dGluZ3MgY2ZnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCisJLyogbG9jayB3aGlsZSB3ZSBhcmUgbW9kaWZ5aW5nIHRoZSBzZXR0aW5ncyAqLworCXNwaW5fbG9ja19pcnFzYXZlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQorCS8qCisJICogVXBkYXRlIGJhdWQgcmF0ZQorCSAqLworCWlmKCAoY2ZsYWcgJiBDQkFVRCkgIT0gKG9sZF9jZmxhZyAmIENCQVVEKSApIHsKKwkgICAgICAgIC8qIHJlYXNzZXJ0IERUUiBhbmQgKG1heWJlKSBSVFMgb24gdHJhbnNpdGlvbiBmcm9tIEIwICovCisJCWlmKCAob2xkX2NmbGFnICYgQ0JBVUQpID09IEIwICkgeworCQkJZGJnKCIlczogYmF1ZCB3YXMgQjAiLCBfX0ZVTkNUSU9OX18pOworI2lmIDAKKwkJCXByaXYtPmNvbnRyb2xfc3RhdGUgfD0gVElPQ01fRFRSOworCQkJLyogZG9uJ3Qgc2V0IFJUUyBpZiB1c2luZyBoYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8KKwkJCWlmICghKG9sZF9jZmxhZyAmIENSVFNDVFMpKSB7CisJCQkJcHJpdi0+Y29udHJvbF9zdGF0ZSB8PSBUSU9DTV9SVFM7CisJCQl9CisJCQltY3RfdTIzMl9zZXRfbW9kZW1fY3RybChzZXJpYWwsIHByaXYtPmNvbnRyb2xfc3RhdGUpOworI2VuZGlmCisJCX0KKwkJCisJCXN3aXRjaChjZmxhZyAmIENCQVVEKSB7CisJCWNhc2UgQjA6IC8qIGhhbmRsZWQgYmVsb3cgKi8KKwkJCWJyZWFrOworCQljYXNlIEIxMjAwOiBwcml2LT5jZmcuYmF1ZHJhdGUgPSBrbDVrdXNiMTA1YV9zaW9fYjEyMDA7CisJCQlicmVhazsKKwkJY2FzZSBCMjQwMDogcHJpdi0+Y2ZnLmJhdWRyYXRlID0ga2w1a3VzYjEwNWFfc2lvX2IyNDAwOworCQkJYnJlYWs7CisJCWNhc2UgQjQ4MDA6IHByaXYtPmNmZy5iYXVkcmF0ZSA9IGtsNWt1c2IxMDVhX3Npb19iNDgwMDsKKwkJCWJyZWFrOworCQljYXNlIEI5NjAwOiBwcml2LT5jZmcuYmF1ZHJhdGUgPSBrbDVrdXNiMTA1YV9zaW9fYjk2MDA7CisJCQlicmVhazsKKwkJY2FzZSBCMTkyMDA6IHByaXYtPmNmZy5iYXVkcmF0ZSA9IGtsNWt1c2IxMDVhX3Npb19iMTkyMDA7CisJCQlicmVhazsKKwkJY2FzZSBCMzg0MDA6IHByaXYtPmNmZy5iYXVkcmF0ZSA9IGtsNWt1c2IxMDVhX3Npb19iMzg0MDA7CisJCQlicmVhazsKKwkJY2FzZSBCNTc2MDA6IHByaXYtPmNmZy5iYXVkcmF0ZSA9IGtsNWt1c2IxMDVhX3Npb19iNTc2MDA7CisJCQlicmVhazsKKwkJY2FzZSBCMTE1MjAwOiBwcml2LT5jZmcuYmF1ZHJhdGUgPSBrbDVrdXNiMTA1YV9zaW9fYjExNTIwMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZXJyKCJLTFNJIFVTQi0+U2VyaWFsIGNvbnZlcnRlcjoiCisJCQkgICAgIiB1bnN1cHBvcnRlZCBiYXVkcmF0ZSByZXF1ZXN0LCB1c2luZyBkZWZhdWx0IgorCQkJICAgICIgb2YgOTYwMCIpOworCQkJcHJpdi0+Y2ZnLmJhdWRyYXRlID0ga2w1a3VzYjEwNWFfc2lvX2I5NjAwOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKChjZmxhZyAmIENCQVVEKSA9PSBCMCApIHsKKwkJCWRiZygiJXM6IGJhdWQgaXMgQjAiLCBfX0ZVTkNUSU9OX18pOworCQkJLyogRHJvcCBSVFMgYW5kIERUUiAqLworCQkJLyogbWF5YmUgdGhpcyBzaG91bGQgYmUgc2ltdWxhdGVkIGJ5IHNlbmRpbmcgcmVhZAorCQkJICogZGlzYWJsZSBhbmQgcmVhZCBlbmFibGUgbWVzc2FnZXM/CisJCQkgKi8KKwkJCTsKKyNpZiAwCisJCQlwcml2LT5jb250cm9sX3N0YXRlICY9IH4oVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKKyAgICAgICAgCQltY3RfdTIzMl9zZXRfbW9kZW1fY3RybChzZXJpYWwsIHByaXYtPmNvbnRyb2xfc3RhdGUpOworI2VuZGlmCisJCX0KKwl9CisKKwlpZiAoKGNmbGFnICYgQ1NJWkUpICE9IChvbGRfY2ZsYWcgJiBDU0laRSkpIHsKKwkJLyogc2V0IHRoZSBudW1iZXIgb2YgZGF0YSBiaXRzICovCisJCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgeworCQljYXNlIENTNToKKwkJCWRiZygiJXMgLSA1IGJpdHMvYnl0ZSBub3Qgc3VwcG9ydGVkIiwgX19GVU5DVElPTl9fKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gOworCQljYXNlIENTNjoKKwkJCWRiZygiJXMgLSA2IGJpdHMvYnl0ZSBub3Qgc3VwcG9ydGVkIiwgX19GVU5DVElPTl9fKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gOworCQljYXNlIENTNzoKKwkJCXByaXYtPmNmZy5kYXRhYml0cyA9IGtsNWt1c2IxMDVhX2R0Yl83OworCQkJYnJlYWs7CisJCWNhc2UgQ1M4OgorCQkJcHJpdi0+Y2ZnLmRhdGFiaXRzID0ga2w1a3VzYjEwNWFfZHRiXzg7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVycigiQ1NJWkUgd2FzIG5vdCBDUzUtQ1M4LCB1c2luZyBkZWZhdWx0IG9mIDgiKTsKKwkJCXByaXYtPmNmZy5kYXRhYml0cyA9IGtsNWt1c2IxMDVhX2R0Yl84OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIFVwZGF0ZSBsaW5lIGNvbnRyb2wgcmVnaXN0ZXIgKExDUikKKwkgKi8KKwlpZiAoKGNmbGFnICYgKFBBUkVOQnxQQVJPREQpKSAhPSAob2xkX2NmbGFnICYgKFBBUkVOQnxQQVJPREQpKQorCSAgICB8fCAoY2ZsYWcgJiBDU1RPUEIpICE9IChvbGRfY2ZsYWcgJiBDU1RPUEIpICkgeworCQkKKyNpZiAwCisJCXByaXYtPmxhc3RfbGNyID0gMDsKKworCQkvKiBzZXQgdGhlIHBhcml0eSAqLworCQlpZiAoY2ZsYWcgJiBQQVJFTkIpCisJCQlwcml2LT5sYXN0X2xjciB8PSAoY2ZsYWcgJiBQQVJPREQpID8KKwkJCQlNQ1RfVTIzMl9QQVJJVFlfT0REIDogTUNUX1UyMzJfUEFSSVRZX0VWRU47CisJCWVsc2UKKwkJCXByaXYtPmxhc3RfbGNyIHw9IE1DVF9VMjMyX1BBUklUWV9OT05FOworCisJCS8qIHNldCB0aGUgbnVtYmVyIG9mIHN0b3AgYml0cyAqLworCQlwcml2LT5sYXN0X2xjciB8PSAoY2ZsYWcgJiBDU1RPUEIpID8KKwkJCU1DVF9VMjMyX1NUT1BfQklUU18yIDogTUNUX1UyMzJfU1RPUF9CSVRTXzE7CisKKwkJbWN0X3UyMzJfc2V0X2xpbmVfY3RybChzZXJpYWwsIHByaXYtPmxhc3RfbGNyKTsKKyNlbmRpZgorCQk7CisJfQorCQorCS8qCisJICogU2V0IGZsb3cgY29udHJvbDogd2VsbCwgSSBkbyBub3QgcmVhbGx5IG5vdyBob3cgdG8gaGFuZGxlIERUUi9SVFMuCisJICogSnVzdCBkbyB3aGF0IHdlIGhhdmUgc2VlbiB3aXRoIFNuaWZmVVNCIG9uIFdpbjk4LgorCSAqLworCWlmKCAoaWZsYWcgJiBJWE9GRikgIT0gKG9sZF9pZmxhZyAmIElYT0ZGKQorCSAgICB8fCAoaWZsYWcgJiBJWE9OKSAhPSAob2xkX2lmbGFnICYgSVhPTikKKwkgICAgfHwgIChjZmxhZyAmIENSVFNDVFMpICE9IChvbGRfY2ZsYWcgJiBDUlRTQ1RTKSApIHsKKwkJCisJCS8qIERyb3AgRFRSL1JUUyBpZiBubyBmbG93IGNvbnRyb2wgb3RoZXJ3aXNlIGFzc2VydCAqLworI2lmIDAKKwkJaWYgKChpZmxhZyAmIElYT0ZGKSB8fCAoaWZsYWcgJiBJWE9OKSB8fCAoY2ZsYWcgJiBDUlRTQ1RTKSApCisJCQlwcml2LT5jb250cm9sX3N0YXRlIHw9IFRJT0NNX0RUUiB8IFRJT0NNX1JUUzsKKwkJZWxzZQorCQkJcHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+KFRJT0NNX0RUUiB8IFRJT0NNX1JUUyk7CisJCW1jdF91MjMyX3NldF9tb2RlbV9jdHJsKHNlcmlhbCwgcHJpdi0+Y29udHJvbF9zdGF0ZSk7CisjZW5kaWYKKwkJOworCX0KKwltZW1jcHkgKCZjZmcsICZwcml2LT5jZmcsIHNpemVvZihjZmcpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQorCS8qIG5vdyBjb21taXQgY2hhbmdlcyB0byBkZXZpY2UgKi8KKwlrbHNpXzEwNV9jaGdfcG9ydF9zZXR0aW5ncyhwb3J0LCAmY2ZnKTsKK30gLyoga2xzaV8xMDVfc2V0X3Rlcm1pb3MgKi8KKworCisjaWYgMAorc3RhdGljIHZvaWQgbWN0X3UyMzJfYnJlYWtfY3RsKCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUgKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKnByaXYgPSAoc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKilwb3J0LT5wcml2YXRlOworCXVuc2lnbmVkIGNoYXIgbGNyID0gcHJpdi0+bGFzdF9sY3I7CisKKwlkYmcoIiVzc3RhdGU9JWQiLCBfX0ZVTkNUSU9OX18sIGJyZWFrX3N0YXRlKTsKKworCWlmIChicmVha19zdGF0ZSkKKwkJbGNyIHw9IE1DVF9VMjMyX1NFVF9CUkVBSzsKKworCW1jdF91MjMyX3NldF9saW5lX2N0cmwoc2VyaWFsLCBsY3IpOworfSAvKiBtY3RfdTIzMl9icmVha19jdGwgKi8KKyNlbmRpZgorCitzdGF0aWMgaW50IGtsc2lfMTA1X3Rpb2NtZ2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qga2xzaV8xMDVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYzsKKwl1bnNpZ25lZCBsb25nIGxpbmVfc3RhdGU7CisJZGJnKCIlcyAtIHJlcXVlc3QsIGp1c3QgZ3Vlc3NpbmciLCBfX0ZVTkNUSU9OX18pOworCisJcmMgPSBrbHNpXzEwNV9nZXRfbGluZV9zdGF0ZShwb3J0LCAmbGluZV9zdGF0ZSk7CisJaWYgKHJjIDwgMCkgeworCQllcnIoIlJlYWRpbmcgbGluZSBjb250cm9sIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByYyk7CisJCS8qIGJldHRlciByZXR1cm4gdmFsdWU/IEVBR0FJTj8gKi8KKwkJcmV0dXJuIHJjOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPmxpbmVfc3RhdGUgPSBsaW5lX3N0YXRlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJZGJnKCIlcyAtIHJlYWQgbGluZSBzdGF0ZSAweCVseCIsIF9fRlVOQ1RJT05fXywgbGluZV9zdGF0ZSk7CisJcmV0dXJuIChpbnQpbGluZV9zdGF0ZTsKK30KKworc3RhdGljIGludCBrbHNpXzEwNV90aW9jbXNldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJaW50IHJldHZhbCA9IC1FSU5WQUw7CisJCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKy8qIGlmIHRoaXMgZXZlciBnZXRzIGltcGxlbWVudGVkLCBpdCBzaG91bGQgYmUgZG9uZSBzb21ldGhpbmcgbGlrZSB0aGlzOgorCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IGtsc2lfMTA1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY29udHJvbDsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChzZXQgJiBUSU9DTV9SVFMpCisJCXByaXYtPmNvbnRyb2xfc3RhdGUgfD0gVElPQ01fUlRTOworCWlmIChzZXQgJiBUSU9DTV9EVFIpCisJCXByaXYtPmNvbnRyb2xfc3RhdGUgfD0gVElPQ01fRFRSOworCWlmIChjbGVhciAmIFRJT0NNX1JUUykKKwkJcHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+VElPQ01fUlRTOworCWlmIChjbGVhciAmIFRJT0NNX0RUUikKKwkJcHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+VElPQ01fRFRSOworCWNvbnRyb2wgPSBwcml2LT5jb250cm9sX3N0YXRlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcmV0dmFsID0gbWN0X3UyMzJfc2V0X21vZGVtX2N0cmwoc2VyaWFsLCBjb250cm9sKTsKKyovCisJcmV0dXJuIHJldHZhbDsKK30KKwkJCQkJCitzdGF0aWMgaW50IGtsc2lfMTA1X2lvY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCisJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qga2xzaV8xMDVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl2b2lkIF9fdXNlciAqdXNlcl9hcmcgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJCisJZGJnKCIlc2NtZD0weCV4IiwgX19GVU5DVElPTl9fLCBjbWQpOworCisJLyogQmFzZWQgb24gY29kZSBmcm9tIGFjbS5jIGFuZCBvdGhlcnMgKi8KKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVElPQ01JV0FJVDoKKwkJLyogd2FpdCBmb3IgYW55IG9mIHRoZSA0IG1vZGVtIGlucHV0cyAoRENELFJJLERTUixDVFMpKi8KKwkJLyogVE9ETyAqLworCQlkYmcoIiVzIC0gVElPQ01JV0FJVCBub3QgaGFuZGxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJY2FzZSBUSU9DR0lDT1VOVDoKKwkJLyogcmV0dXJuIGNvdW50IG9mIG1vZGVtbGluZSB0cmFuc2l0aW9ucyAqLworCQkvKiBUT0RPICovCisJCWRiZygiJXMgLSBUSU9DR0lDT1VOVCBub3QgaGFuZGxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJY2FzZSBUQ0dFVFM6CisJCS8qIHJldHVybiBjdXJyZW50IGluZm8gdG8gY2FsbGVyICovCisJCWRiZygiJXMgLSBUQ0dFVFMgZGF0YSBmYWtlZC9pbmNvbXBsZXRlIiwgX19GVU5DVElPTl9fKTsKKworCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVzZXJfYXJnLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3MoKHN0cnVjdCB0ZXJtaW9zIF9fdXNlciAqKWFyZywKKwkJCQkJCSAgICZwcml2LT50ZXJtaW9zKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKwljYXNlIFRDU0VUUzoKKwkJLyogc2V0IHBvcnQgdGVybWlvcyB0byB0aGUgb25lIGdpdmVuIGJ5IHRoZSB1c2VyICovCisJCWRiZygiJXMgLSBUQ1NFVFMgbm90IGhhbmRsZWQiLCBfX0ZVTkNUSU9OX18pOworCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCB1c2VyX2FyZywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAodXNlcl90ZXJtaW9zX3RvX2tlcm5lbF90ZXJtaW9zKCZwcml2LT50ZXJtaW9zLAorCQkJCQkJICAgKHN0cnVjdCB0ZXJtaW9zIF9fdXNlciAqKWFyZykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJa2xzaV8xMDVfc2V0X3Rlcm1pb3MocG9ydCwgJnByaXYtPnRlcm1pb3MpOworCQlyZXR1cm4gMDsKKwljYXNlIFRDU0VUU1c6IHsKKwkJLyogc2V0IHBvcnQgdGVybWlvcyBhbmQgdHJ5IHRvIHdhaXQgZm9yIGNvbXBsZXRpb24gb2YgbGFzdAorCQkgKiB3cml0ZSBvcGVyYXRpb24gKi8KKwkJLyogV2UgZ3Vlc3MgaGVyZS4gSWYgdGhlcmUgYXJlIG5vdCB0b28gbWFueSB3cml0ZSB1cmJzCisJCSAqIG91dHN0YW5kaW5nLCB3ZSBsaWUuICovCisJCS8qIHdoYXQgaXMgdGhlIHJpZ2h0IHdheSB0byB3YWl0IGhlcmU/IHNjaGVkdWxlKCkgPyAqLworCSAgICAgICAgLyoKKwkJd2hpbGUgKGtsc2lfMTA1X2NoYXJzX2luX2J1ZmZlcihwb3J0KSA+IChOVU1fVVJCUyAvIDQgKSAqIFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSkKKwkJCSAgICBzY2hlZHVsZSgpOworCQkgKi8KKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwkJICAgICAgfQorCWRlZmF1bHQ6CisJCWRiZygiJXM6IGFyZyBub3Qgc3VwcG9ydGVkIC0gMHglMDR4IiwgX19GVU5DVElPTl9fLGNtZCk7CisJCXJldHVybigtRU5PSU9DVExDTUQpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9IC8qIGtsc2lfMTA1X2lvY3RsICovCisKK3N0YXRpYyB2b2lkIGtsc2lfMTA1X3Rocm90dGxlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7Cit9CisKK3N0YXRpYyB2b2lkIGtsc2lfMTA1X3VudGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KQorCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLAorCQkgICAgcmVzdWx0KTsKK30KKworCisKK3N0YXRpYyBpbnQgX19pbml0IGtsc2lfMTA1X2luaXQgKHZvaWQpCit7CisJaW50IHJldHZhbDsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZrbDVrdXNiMTA1ZF9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZrbDVrdXNiMTA1ZF9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKKworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlyZXR1cm4gMDsKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZrbDVrdXNiMTA1ZF9kZXZpY2UpOworZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQga2xzaV8xMDVfZXhpdCAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlciAoJmtsNWt1c2IxMDVkX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgma2w1a3VzYjEwNWRfZGV2aWNlKTsKK30KKworCittb2R1bGVfaW5pdCAoa2xzaV8xMDVfaW5pdCk7Cittb2R1bGVfZXhpdCAoa2xzaV8xMDVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsgCisKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZW5hYmxlIGV4dGVuc2l2ZSBkZWJ1Z2dpbmcgbWVzc2FnZXMiKTsKKworLyogdmltOiBzZXQgc3RzPTggdHM9OCBzdz04OiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIzMWQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciB0aGUgS0xTSSBLTDVLVVNCMTA1IHNlcmlhbCBwb3J0IGFkYXB0ZXIKKyAqLworCisvKiB2ZW5kb3IvcHJvZHVjdCBwYWlycyB0aGF0IGFyZSBrbm93biB0byBjb250YWluIHRoaXMgY2hpcHNldCAqLworI2RlZmluZSBQQUxNQ09OTkVDVF9WSUQJCTB4MDgzMAorI2RlZmluZSBQQUxNQ09OTkVDVF9QSUQJCTB4MDA4MAorCisjZGVmaW5lIEtMU0lfVklECQkweDA1ZTkKKyNkZWZpbmUgS0xTSV9LTDVLVVNCMTA1RF9QSUQJMHgwMGMwCisKKy8qIFZlbmRvciBjb21tYW5kczogKi8KKworCisvKiBwb3J0IHRhYmxlIC0tIHRoZSBjaGlwIHN1cHBvcnRzIHVwIHRvIDQgY2hhbm5lbHMgKi8KKworLyogYmF1ZCByYXRlcyAqLworCitlbnVtIHsKKyAga2w1a3VzYjEwNWFfc2lvX2IxMTUyMDAgPSAwLAorICBrbDVrdXNiMTA1YV9zaW9fYjU3NjAwICA9IDEsCisgIGtsNWt1c2IxMDVhX3Npb19iMzg0MDAgID0gMiwKKyAga2w1a3VzYjEwNWFfc2lvX2IxOTIwMCAgPSA0LAorICBrbDVrdXNiMTA1YV9zaW9fYjE0NDAwICA9IDUsCisgIGtsNWt1c2IxMDVhX3Npb19iOTYwMCAgID0gNiwKKyAga2w1a3VzYjEwNWFfc2lvX2I0ODAwICAgPSA4LCAgIC8qIHVuY2hlY2tlZCAqLworICBrbDVrdXNiMTA1YV9zaW9fYjI0MDAgICA9IDksICAgLyogdW5jaGVja2VkICovCisgIGtsNWt1c2IxMDVhX3Npb19iMTIwMCAgID0gMHhhLCAgLyogdW5jaGVja2VkICovCisgIGtsNWt1c2IxMDVhX3Npb19iNjAwICAgID0gMHhiICAgLyogdW5jaGVja2VkICovCit9OworCisvKiBkYXRhIGJpdHMgKi8KKyNkZWZpbmUga2w1a3VzYjEwNWFfZHRiXzcgICA3CisjZGVmaW5lIGtsNWt1c2IxMDVhX2R0Yl84ICAgOAorCisKKworLyogcmVxdWVzdHM6ICovCisjZGVmaW5lIEtMNUtVU0IxMDVBX1NJT19TRVRfREFUQSAgMQorI2RlZmluZSBLTDVLVVNCMTA1QV9TSU9fUE9MTCAgICAgIDIKKyNkZWZpbmUgS0w1S1VTQjEwNUFfU0lPX0NPTkZJR1VSRSAgICAgIDMKKy8qIHZhbHVlcyB1c2VkIGZvciByZXF1ZXN0IEtMNUtVU0IxMDVBX1NJT19DT05GSUdVUkUgKi8KKyNkZWZpbmUgS0w1S1VTQjEwNUFfU0lPX0NPTkZJR1VSRV9SRUFEX09OICAgICAgMworI2RlZmluZSBLTDVLVVNCMTA1QV9TSU9fQ09ORklHVVJFX1JFQURfT0ZGICAgICAyCisKKy8qIEludGVycHJldGF0aW9uIG9mIG1vZGVtIHN0YXR1cyBsaW5lcyAqLworLyogVGhlc2UgbmVlZCBzb3J0aW5nIG91dCBieSBpbmRpdmlkdWFsbHkgY29ubmVjdGluZyBwaW5zIGFuZCBjaGVja2luZworICogcmVzdWx0cy4gRklYTUUhCisgKiBXaGVuIGRhdGEgaXMgYmVpbmcgc2VudCB3ZSBzZWUgMHgzMCBpbiB0aGUgbG93ZXIgYnl0ZTsgdGhpcyBtdXN0CisgKiBjb250YWluIERTUiBhbmQgQ1RTIC4uLgorICovCisjZGVmaW5lIEtMNUtVU0IxMDVBX0RTUgkJCSgoMTw8NCkgfCAoMTw8NSkpCisjZGVmaW5lIEtMNUtVU0IxMDVBX0NUUwkJCSgoMTw8NSkgfCAoMTw8NCkpCisKKyNkZWZpbmUgS0w1S1VTQjEwNUFfV0FOVFNfVE9fU0VORAkweDMwCisvLyNkZWZpbmUgS0w1S1VTQjEwNUFfRFRSCQkJLyogRGF0YSBUZXJtaW5hbCBSZWFkeSAqLworLy8jZGVmaW5lIEtMNUtVU0IxMDVBX0NUUwkJCS8qIENsZWFyIFRvIFNlbmQgKi8KKy8vI2RlZmluZSBLTDVLVVNCMTA1QV9DRAkJCS8qIENhcnJpZXIgRGV0ZWN0ICovCisvLyNkZWZpbmUgS0w1S1VTQjEwNUFfRFNSCQkJLyogRGF0YSBTZXQgUmVhZHkgKi8KKy8vI2RlZmluZSBLTDVLVVNCMTA1QV9SeEQJCQkvKiBSZWNlaXZlIHBpbiAqLworCisvLyNkZWZpbmUgS0w1S1VTQjEwNUFfTEUKKy8vI2RlZmluZSBLTDVLVVNCMTA1QV9SVFMJCQorLy8jZGVmaW5lIEtMNUtVU0IxMDVBX1NUCQkKKy8vI2RlZmluZSBLTDVLVVNCMTA1QV9TUgkJCisvLyNkZWZpbmUgS0w1S1VTQjEwNUFfUkkJCQkvKiBSaW5nIEluZGljYXRvciAqLworCisvKiB2aW06IHNldCB0cz04IHN0cz04OiAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU0Yzk4YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYwpAQCAtMCwwICsxLDc3NCBAQAorLyoKKyAqICBLT0JJTCBVU0IgU21hcnQgQ2FyZCBUZXJtaW5hbCBEcml2ZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyICBLT0JJTCBTeXN0ZW1zIEdtYkggCisgKiAgQXV0aG9yOiBUaG9tYXMgV2FocmVuYnJ1Y2gKKyAqCisgKiAgQ29udGFjdDogbGludXh1c2JAa29iaWwuZGUKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGxhcmdlbHkgZGVyaXZlZCBmcm9tIHdvcmsgYnkgdGhlIGxpbnV4LXVzYiBncm91cAorICogIGFuZCBhc3NvY2lhdGVkIHNvdXJjZSBmaWxlcy4gIFBsZWFzZSBzZWUgdGhlIHVzYi9zZXJpYWwgZmlsZXMgZm9yCisgKiAgaW5kaXZpZHVhbCBjcmVkaXRzIGFuZCBjb3B5cmlnaHRzLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGFua3MgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkgZm9yIGhpcyBoZWxwIGFuZAorICogIHBhdGllbmNlLgorICoKKyAqIFN1cHBvcnRlZCByZWFkZXJzOiBVU0IgVFdJTiwgS0FBTiBTdGFuZGFyZCBQbHVzIGFuZCBTZWNPVklEIFJlYWRlciBQbHVzCisgKiAoQWRhcHRlciBLKSwgQjEgUHJvZmVzc2lvbmFsIGFuZCBLQUFOIFByb2Zlc3Npb25hbCAoQWRhcHRlciBCKQorICogCisgKiAoMjEvMDUvMjAwNCkgdHcKKyAqICAgICAgRml4IGJ1ZyB3aXRoIFAnbidQIHJlYWRlcnMKKyAqCisgKiAoMjgvMDUvMjAwMykgdHcKKyAqICAgICAgQWRkIHN1cHBvcnQgZm9yIEtBQU4gU0lNCisgKgorICogKDEyLzA5LzIwMDIpIHR3CisgKiAgICAgIEFkYXB0ZWQgdG8gMi41LgorICoKKyAqICgxMS8wOC8yMDAyKSB0dworICogICAgICBJbml0aWFsIHZlcnNpb24uCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKyNpbmNsdWRlICJrb2JpbF9zY3QuaCIKKworc3RhdGljIGludCBkZWJ1ZzsKKworLyogVmVyc2lvbiBJbmZvcm1hdGlvbiAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMjEvMDUvMjAwNCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiS09CSUwgU3lzdGVtcyBHbWJIIC0gaHR0cDovL3d3dy5rb2JpbC5jb20iCisjZGVmaW5lIERSSVZFUl9ERVNDICJLT0JJTCBVU0IgU21hcnQgQ2FyZCBUZXJtaW5hbCBEcml2ZXIgKGV4cGVyaW1lbnRhbCkiCisKKyNkZWZpbmUgS09CSUxfVkVORE9SX0lECQkJMHgwRDQ2CisjZGVmaW5lIEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lECTB4MjAxMQorI2RlZmluZSBLT0JJTF9BREFQVEVSX0tfUFJPRFVDVF9JRAkweDIwMTIKKyNkZWZpbmUgS09CSUxfVVNCVFdJTl9QUk9EVUNUX0lECTB4MDA3OAorI2RlZmluZSBLT0JJTF9LQUFOX1NJTV9QUk9EVUNUX0lEICAgICAgIDB4MDA4MQorCisjZGVmaW5lIEtPQklMX1RJTUVPVVQJCTUwMAorI2RlZmluZSBLT0JJTF9CVUZfTEVOR1RICTMwMAorCisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgIGtvYmlsX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQga29iaWxfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAga29iaWxfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQga29iaWxfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgIGtvYmlsX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCAKKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CitzdGF0aWMgaW50ICBrb2JpbF93cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCAga29iaWxfaW9jdGwoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgaW50ICBrb2JpbF90aW9jbWdldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50ICBrb2JpbF90aW9jbXNldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CitzdGF0aWMgdm9pZCBrb2JpbF9yZWFkX2ludF9jYWxsYmFjayggc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyApOworc3RhdGljIHZvaWQga29iaWxfd3JpdGVfY2FsbGJhY2soIHN0cnVjdCB1cmIgKnB1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzICk7CisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShLT0JJTF9WRU5ET1JfSUQsIEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShLT0JJTF9WRU5ET1JfSUQsIEtPQklMX0FEQVBURVJfS19QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShLT0JJTF9WRU5ET1JfSUQsIEtPQklMX1VTQlRXSU5fUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoS09CSUxfVkVORE9SX0lELCBLT0JJTF9LQUFOX1NJTV9QUk9EVUNUX0lEKSB9LAorCXsgfQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIga29iaWxfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJrb2JpbCIsCisJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZSwKK307CisKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGtvYmlsX2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJLT0JJTCBVU0Igc21hcnQgY2FyZCB0ZXJtaW5hbCIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4gPQkJMCwKKwkubnVtX2J1bGtfb3V0ID0JCTAsCisJLm51bV9wb3J0cyA9CQkxLAorCS5hdHRhY2ggPQkJa29iaWxfc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkJa29iaWxfc2h1dGRvd24sCisJLmlvY3RsID0JCWtvYmlsX2lvY3RsLAorCS50aW9jbWdldCA9CQlrb2JpbF90aW9jbWdldCwKKwkudGlvY21zZXQgPQkJa29iaWxfdGlvY21zZXQsCisJLm9wZW4gPQkJCWtvYmlsX29wZW4sCisJLmNsb3NlID0JCWtvYmlsX2Nsb3NlLAorCS53cml0ZSA9CQlrb2JpbF93cml0ZSwKKwkud3JpdGVfcm9vbSA9CQlrb2JpbF93cml0ZV9yb29tLAorCS5yZWFkX2ludF9jYWxsYmFjayA9CWtvYmlsX3JlYWRfaW50X2NhbGxiYWNrLAorfTsKKworCitzdHJ1Y3Qga29iaWxfcHJpdmF0ZSB7CisJaW50IHdyaXRlX2ludF9lbmRwb2ludF9hZGRyZXNzOworCWludCByZWFkX2ludF9lbmRwb2ludF9hZGRyZXNzOworCXVuc2lnbmVkIGNoYXIgYnVmW0tPQklMX0JVRl9MRU5HVEhdOyAvLyBidWZmZXIgZm9yIHRoZSBBUERVIHRvIHNlbmQKKwlpbnQgZmlsbGVkOyAgLy8gaW5kZXggb2YgdGhlIGxhc3QgY2hhciBpbiBidWYKKwlpbnQgY3VyX3BvczsgLy8gaW5kZXggb2YgdGhlIG5leHQgY2hhciB0byBzZW5kIGluIGJ1ZgorCV9fdTE2IGRldmljZV90eXBlOworCWludCBsaW5lX3N0YXRlOworCXN0cnVjdCB0ZXJtaW9zIGludGVybmFsX3Rlcm1pb3M7Cit9OworCisKK3N0YXRpYyBpbnQga29iaWxfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qga29iaWxfcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgdXNiX2hvc3RfY29uZmlnICphY3Rjb25maWc7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzZXR0aW5nOworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZW5kcG9pbnQ7CisKKwlwcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGtvYmlsX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwcml2LT5maWxsZWQgPSAwOworCXByaXYtPmN1cl9wb3MgPSAwOworCXByaXYtPmRldmljZV90eXBlID0gbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwlwcml2LT5saW5lX3N0YXRlID0gMDsKKworCXN3aXRjaCAocHJpdi0+ZGV2aWNlX3R5cGUpeworCWNhc2UgS09CSUxfQURBUFRFUl9CX1BST0RVQ1RfSUQ6CisJCXByaW50ayhLRVJOX0RFQlVHICJLT0JJTCBCMSBQUk8gLyBLQUFOIFBSTyBkZXRlY3RlZFxuIik7CisJCWJyZWFrOworCWNhc2UgS09CSUxfQURBUFRFUl9LX1BST0RVQ1RfSUQ6CisJCXByaW50ayhLRVJOX0RFQlVHICJLT0JJTCBLQUFOIFN0YW5kYXJkIFBsdXMgLyBTZWNPVklEIFJlYWRlciBQbHVzIGRldGVjdGVkXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBLT0JJTF9VU0JUV0lOX1BST0RVQ1RfSUQ6CisJCXByaW50ayhLRVJOX0RFQlVHICJLT0JJTCBVU0JUV0lOIGRldGVjdGVkXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBLT0JJTF9LQUFOX1NJTV9QUk9EVUNUX0lEOgorCQlwcmludGsoS0VSTl9ERUJVRyAiS09CSUwgS0FBTiBTSU0gZGV0ZWN0ZWRcbiIpOworCQlicmVhazsKKwl9CisJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSwgcHJpdik7CisKKwkvLyBzZWFyY2ggZm9yIHRoZSBuZWNlc3NhcnkgZW5kcG9pbnRzCisJcGRldiA9IHNlcmlhbC0+ZGV2OworIAlhY3Rjb25maWcgPSBwZGV2LT5hY3Rjb25maWc7CisgCWludGVyZmFjZSA9IGFjdGNvbmZpZy0+aW50ZXJmYWNlWzBdOworCWFsdHNldHRpbmcgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworIAllbmRwb2ludCA9IGFsdHNldHRpbmctPmVuZHBvaW50OworICAKKyAJZm9yIChpID0gMDsgaSA8IGFsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50czsgaSsrKSB7CisJCWVuZHBvaW50ID0gJmFsdHNldHRpbmctPmVuZHBvaW50W2ldOworCQlpZiAoKChlbmRwb2ludC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKSA9PSBVU0JfRElSX09VVCkgJiYgCisgCQkgICAgKChlbmRwb2ludC0+ZGVzYy5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSkgeworCQkgCWRiZygiJXMgRm91bmQgaW50ZXJydXB0IG91dCBlbmRwb2ludC4gQWRkcmVzczogJWQiLCBfX0ZVTkNUSU9OX18sIGVuZHBvaW50LT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOworCQkgCXByaXYtPndyaXRlX2ludF9lbmRwb2ludF9hZGRyZXNzID0gZW5kcG9pbnQtPmRlc2MuYkVuZHBvaW50QWRkcmVzczsKKyAJCX0KKyAJCWlmICgoKGVuZHBvaW50LT5kZXNjLmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfSU4pICYmIAorIAkJICAgICgoZW5kcG9pbnQtPmRlc2MuYm1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkpIHsKKwkJIAlkYmcoIiVzIEZvdW5kIGludGVycnVwdCBpbiAgZW5kcG9pbnQuIEFkZHJlc3M6ICVkIiwgX19GVU5DVElPTl9fLCBlbmRwb2ludC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKKwkJIAlwcml2LT5yZWFkX2ludF9lbmRwb2ludF9hZGRyZXNzID0gZW5kcG9pbnQtPmRlc2MuYkVuZHBvaW50QWRkcmVzczsKKwkgCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQga29iaWxfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IGk7CisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHNlcmlhbC0+cG9ydFswXS0+bnVtYmVyKTsKKworCWZvciAoaT0wOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQl3aGlsZSAoc2VyaWFsLT5wb3J0W2ldLT5vcGVuX2NvdW50ID4gMCkgeworCQkJa29iaWxfY2xvc2UgKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CisJCX0KKwkJa2ZyZWUodXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSkpOworCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldLCBOVUxMKTsKKwl9Cit9CisKKworc3RhdGljIGludCBrb2JpbF9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgaSwgcmVzdWx0ID0gMDsKKwlzdHJ1Y3Qga29iaWxfcHJpdmF0ZSAqcHJpdjsKKwl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXI7CisJaW50IHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSA4OworCWludCB3cml0ZV91cmJfdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDg7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXByaXYtPmxpbmVfc3RhdGUgPSAwOworCisJLy8gc29tZW9uZSBzZXRzIHRoZSBkZXYgdG8gMCBpZiB0aGUgY2xvc2UgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZAorCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCisKKwkvKiBmb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMKKwkgKiB0aGUgZGF0YSB0aHJvdWdoLCBvdGhlcndpc2UgaXQgaXMgc2NoZWR1bGVkLCBhbmQgd2l0aCBoaWdoCisJICogZGF0YSByYXRlcyAobGlrZSB3aXRoIE9IQ0kpIGRhdGEgY2FuIGdldCBsb3N0LgorCSAqLworCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAxOworCisJLy8gd2l0aG91dCB0aGlzLCBldmVyeSBwdXNoX3R0eV9jaGFyIGlzIGVjaG9lZCA6LSggIAorCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19sZmxhZyA9IDA7CisJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2xmbGFnICY9IH4oSVNJRyB8IElDQU5PTiB8IEVDSE8gfCBJRVhURU4gfCBYQ0FTRSk7CisJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnID0gSUdOQlJLIHwgSUdOUEFSIHwgSVhPRkY7CisJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX29mbGFnICY9IH5PTkxDUjsgLy8gZG8gTk9UIHRyYW5zbGF0ZSBDUiB0byBDUi1OTCAoMHgwQSAtPiAweDBBIDB4MEQpCisJCisJLy8gc2V0IHVwIGludGVybmFsIHRlcm1pb3Mgc3RydWN0dXJlIAorCXByaXYtPmludGVybmFsX3Rlcm1pb3MuY19pZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19pZmxhZzsKKwlwcml2LT5pbnRlcm5hbF90ZXJtaW9zLmNfb2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfb2ZsYWc7CisJcHJpdi0+aW50ZXJuYWxfdGVybWlvcy5jX2NmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCXByaXYtPmludGVybmFsX3Rlcm1pb3MuY19sZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19sZmxhZzsKKworCWZvciAoaT0wOyBpPE5DQ1M7IGkrKykgeworCQlwcml2LT5pbnRlcm5hbF90ZXJtaW9zLmNfY2NbaV0gPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2NbaV07CisJfQorCQorCS8vIGFsbG9jYXRlIG1lbW9yeSBmb3IgdHJhbnNmZXIgYnVmZmVyCisJdHJhbnNmZXJfYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikga21hbGxvYyh0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCBHRlBfS0VSTkVMKTsgIAorCWlmICghIHRyYW5zZmVyX2J1ZmZlcikgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9IGVsc2UgeworCQltZW1zZXQodHJhbnNmZXJfYnVmZmVyLCAwLCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwl9CisJCisJLy8gYWxsb2NhdGUgd3JpdGVfdXJiCisJaWYgKCFwb3J0LT53cml0ZV91cmIpIHsgCisJCWRiZygiJXMgLSBwb3J0ICVkICBBbGxvY2F0aW5nIHBvcnQtPndyaXRlX3VyYiIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJcG9ydC0+d3JpdGVfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsgIAorCQlpZiAoIXBvcnQtPndyaXRlX3VyYikgeworCQkJZGJnKCIlcyAtIHBvcnQgJWQgdXNiX2FsbG9jX3VyYiBmYWlsZWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCQlrZnJlZSh0cmFuc2Zlcl9idWZmZXIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwkvLyBhbGxvY2F0ZSBtZW1vcnkgZm9yIHdyaXRlX3VyYiB0cmFuc2ZlciBidWZmZXIKKwlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIGttYWxsb2Mod3JpdGVfdXJiX3RyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIEdGUF9LRVJORUwpOworCWlmICghIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CisJCWtmcmVlKHRyYW5zZmVyX2J1ZmZlcik7CisJCXVzYl9mcmVlX3VyYihwb3J0LT53cml0ZV91cmIpOworCQlwb3J0LT53cml0ZV91cmIgPSBOVUxMOworCQlyZXR1cm4gLUVOT01FTTsKKwl9IAorCisJLy8gZ2V0IGhhcmR3YXJlIHZlcnNpb24KKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coIHBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJCQkgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCApLCAKKwkJCQkgIFNVU0JDUmVxdWVzdF9HZXRNaXNjLAorCQkJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UIHwgVVNCX0RJUl9JTiwKKwkJCQkgIFNVU0JDUl9NU0NfR2V0SFdWZXJzaW9uLAorCQkJCSAgMCwKKwkJCQkgIHRyYW5zZmVyX2J1ZmZlciwKKwkJCQkgIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJICBLT0JJTF9USU1FT1VUCisJCSk7CisJZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCBnZXRfSFdfdmVyc2lvbiBVUkIgcmV0dXJuczogJWkiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgcmVzdWx0KTsKKwlkYmcoIkhhcndhcmUgdmVyc2lvbjogJWkuJWkuJWkiLCB0cmFuc2Zlcl9idWZmZXJbMF0sIHRyYW5zZmVyX2J1ZmZlclsxXSwgdHJhbnNmZXJfYnVmZmVyWzJdICk7CisJCisJLy8gZ2V0IGZpcm13YXJlIHZlcnNpb24KKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coIHBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJCQkgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCApLCAKKwkJCQkgIFNVU0JDUmVxdWVzdF9HZXRNaXNjLAorCQkJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UIHwgVVNCX0RJUl9JTiwKKwkJCQkgIFNVU0JDUl9NU0NfR2V0RldWZXJzaW9uLAorCQkJCSAgMCwKKwkJCQkgIHRyYW5zZmVyX2J1ZmZlciwKKwkJCQkgIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJICBLT0JJTF9USU1FT1VUCisJCSk7CisJZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCBnZXRfRldfdmVyc2lvbiBVUkIgcmV0dXJuczogJWkiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgcmVzdWx0KTsKKwlkYmcoIkZpcm13YXJlIHZlcnNpb246ICVpLiVpLiVpIiwgdHJhbnNmZXJfYnVmZmVyWzBdLCB0cmFuc2Zlcl9idWZmZXJbMV0sIHRyYW5zZmVyX2J1ZmZlclsyXSApOworCisJaWYgKHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lEIHx8IHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0FEQVBURVJfS19QUk9EVUNUX0lEKSB7CisJCS8vIFNldHRpbmcgQmF1ZHJhdGUsIFBhcml0eSBhbmQgU3RvcGJpdHMKKwkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKCBwb3J0LT5zZXJpYWwtPmRldiwgCisJCQkJCSAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwICksIAorCQkJCQkgIFNVU0JDUmVxdWVzdF9TZXRCYXVkUmF0ZVBhcml0eUFuZFN0b3BCaXRzLAorCQkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCB8IFVTQl9ESVJfT1VULAorCQkJCQkgIFNVU0JDUl9TQlJfOTYwMCB8IFNVU0JDUl9TUEFTQl9FdmVuUGFyaXR5IHwgU1VTQkNSX1NQQVNCXzFTdG9wQml0LAorCQkJCQkgIDAsCisJCQkJCSAgdHJhbnNmZXJfYnVmZmVyLAorCQkJCQkgIDAsCisJCQkJCSAgS09CSUxfVElNRU9VVAorCQkJKTsKKwkJZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCBzZXRfYmF1ZHJhdGUgVVJCIHJldHVybnM6ICVpIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIHJlc3VsdCk7CisJCQorCQkvLyByZXNldCBhbGwgcXVldWVzCisJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyggcG9ydC0+c2VyaWFsLT5kZXYsIAorCQkJCQkgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCApLCAKKwkJCQkJICBTVVNCQ1JlcXVlc3RfTWlzYywKKwkJCQkJICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQgfCBVU0JfRElSX09VVCwKKwkJCQkJICBTVVNCQ1JfTVNDX1Jlc2V0QWxsUXVldWVzLAorCQkJCQkgIDAsCisJCQkJCSAgdHJhbnNmZXJfYnVmZmVyLAorCQkJCQkgIDAsCisJCQkJCSAgS09CSUxfVElNRU9VVAorCQkJKTsKKwkJZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCByZXNldF9hbGxfcXVldWVzIFVSQiByZXR1cm5zOiAlaSIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCByZXN1bHQpOworCX0KKwlpZiAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfVVNCVFdJTl9QUk9EVUNUX0lEIHx8IHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0FEQVBURVJfQl9QUk9EVUNUX0lEIHx8CisJICAgIHByaXYtPmRldmljZV90eXBlID09IEtPQklMX0tBQU5fU0lNX1BST0RVQ1RfSUQpIHsKKwkJLy8gc3RhcnQgcmVhZGluZyAoQWRhcHRlciBCICdjYXVzZSBQTlAgc3RyaW5nKQorCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiggcG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyAgKTsgCisJCWRiZygiJXMgLSBwb3J0ICVkIFNlbmQgcmVhZCBVUkIgcmV0dXJuczogJWkiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgcmVzdWx0KTsKKwl9CisKKwlrZnJlZSh0cmFuc2Zlcl9idWZmZXIpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIGtvYmlsX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChwb3J0LT53cml0ZV91cmIpIHsKKwkJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJCXVzYl9mcmVlX3VyYiggcG9ydC0+d3JpdGVfdXJiICk7CisJCXBvcnQtPndyaXRlX3VyYiA9IE5VTEw7CisJfQorCWlmIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKQorCQl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7Cit9CisKKworc3RhdGljIHZvaWQga29iaWxfcmVhZF9pbnRfY2FsbGJhY2soIHN0cnVjdCB1cmIgKnB1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBpOworCWludCByZXN1bHQ7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHB1cmItPmNvbnRleHQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gcHVyYi0+dHJhbnNmZXJfYnVmZmVyOworLy8JY2hhciAqZGJnX2RhdGE7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChwdXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIHBvcnQgJWQgUmVhZCBpbnQgc3RhdHVzIG5vdCB6ZXJvOiAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCBwdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCQorCXR0eSA9IHBvcnQtPnR0eTsgCisJaWYgKHB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJCisJCS8vIEJFR0lOIERFQlVHCisJCS8qCisJCSAgZGJnX2RhdGEgPSAodW5zaWduZWQgY2hhciAqKSBrbWFsbG9jKCgzICogIHB1cmItPmFjdHVhbF9sZW5ndGggKyAxMCkgKiBzaXplb2YoY2hhciksIEdGUF9LRVJORUwpOworCQkgIGlmICghIGRiZ19kYXRhKSB7CisJCSAgcmV0dXJuOworCQkgIH0KKwkJICBtZW1zZXQoZGJnX2RhdGEsIDAsICgzICogIHB1cmItPmFjdHVhbF9sZW5ndGggKyAxMCkpOworCQkgIGZvciAoaSA9IDA7IGkgPCBwdXJiLT5hY3R1YWxfbGVuZ3RoOyBpKyspIHsgCisJCSAgc3ByaW50ZihkYmdfZGF0YSArMyppLCAiJTAyWCAiLCBkYXRhW2ldKTsgCisJCSAgfQorCQkgIGRiZygiIDwtLSAlcyIsIGRiZ19kYXRhICk7CisJCSAga2ZyZWUoZGJnX2RhdGEpOworCQkqLworCQkvLyBFTkQgREVCVUcKKworCQlmb3IgKGkgPSAwOyBpIDwgcHVyYi0+YWN0dWFsX2xlbmd0aDsgKytpKSB7CisJCQkvLyBpZiB3ZSBpbnNlcnQgbW9yZSB0aGFuIFRUWV9GTElQQlVGX1NJWkUgY2hhcmFjdGVycywgd2UgZHJvcCB0aGVtLgorCQkJaWYodHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpIHsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJfQorCQkJLy8gdGhpcyBkb2Vzbid0IGFjdHVhbGx5IHB1c2ggdGhlIGRhdGEgdGhyb3VnaCB1bmxlc3MgdHR5LT5sb3dfbGF0ZW5jeSBpcyBzZXQKKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgMCk7CisJCX0KKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwl9CisKKwkvLyBzb21lb25lIHNldHMgdGhlIGRldiB0byAwIGlmIHRoZSBjbG9zZSBtZXRob2QgaGFzIGJlZW4gY2FsbGVkCisJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiggcG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyApOyAKKwlkYmcoIiVzIC0gcG9ydCAlZCBTZW5kIHJlYWQgVVJCIHJldHVybnM6ICVpIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIHJlc3VsdCk7Cit9CisKKworc3RhdGljIHZvaWQga29iaWxfd3JpdGVfY2FsbGJhY2soIHN0cnVjdCB1cmIgKnB1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzICkKK3sKK30KKworCitzdGF0aWMgaW50IGtvYmlsX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCAKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCWludCBsZW5ndGggPSAwOworCWludCByZXN1bHQgPSAwOworCWludCB0b2RvID0gMDsKKwlzdHJ1Y3Qga29iaWxfcHJpdmF0ZSAqIHByaXY7CisKKwlpZiAoY291bnQgPT0gMCkgeworCQlkYmcoIiVzIC0gcG9ydCAlZCB3cml0ZSByZXF1ZXN0IG9mIDAgYnl0ZXMiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCXJldHVybiAwOworCX0KKworCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlpZiAoY291bnQgPiAoS09CSUxfQlVGX0xFTkdUSCAtIHByaXYtPmZpbGxlZCkpIHsKKwkJZGJnKCIlcyAtIHBvcnQgJWQgRXJyb3I6IHdyaXRlIHJlcXVlc3QgYmlnZ2VyIHRoYW4gYnVmZmVyIHNpemUiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8vIENvcHkgZGF0YSB0byBidWZmZXIKKwltZW1jcHkgKHByaXYtPmJ1ZiArIHByaXYtPmZpbGxlZCwgYnVmLCBjb3VudCk7CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgY291bnQsIHByaXYtPmJ1ZiArIHByaXYtPmZpbGxlZCk7CisKKwlwcml2LT5maWxsZWQgPSBwcml2LT5maWxsZWQgKyBjb3VudDsKKworCisJLy8gb25seSBzZW5kIGNvbXBsZXRlIGJsb2NrLiBUV0lOLCBLQUFOIFNJTSBhbmQgYWRhcHRlciBLIHVzZSB0aGUgc2FtZSBwcm90b2NvbC4KKwlpZiAoICgocHJpdi0+ZGV2aWNlX3R5cGUgIT0gS09CSUxfQURBUFRFUl9CX1BST0RVQ1RfSUQpICYmIChwcml2LT5maWxsZWQgPiAyKSAmJiAocHJpdi0+ZmlsbGVkID49IChwcml2LT5idWZbMV0gKyAzKSkpIHx8IAorCSAgICAgKChwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9BREFQVEVSX0JfUFJPRFVDVF9JRCkgJiYgKHByaXYtPmZpbGxlZCA+IDMpICYmIChwcml2LT5maWxsZWQgPj0gKHByaXYtPmJ1ZlsyXSArIDQpKSkgKSB7CisJCQorCQkvLyBzdG9wIHJlYWRpbmcgKGV4Y2VwdCBUV0lOIGFuZCBLQUFOIFNJTSkKKwkJaWYgKCAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfQURBUFRFUl9CX1BST0RVQ1RfSUQpIHx8IChwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9BREFQVEVSX0tfUFJPRFVDVF9JRCkgKQorCQkJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOworCisJCXRvZG8gPSBwcml2LT5maWxsZWQgLSBwcml2LT5jdXJfcG9zOworCisJCXdoaWxlKHRvZG8gPiAwKSB7CisJCQkvLyBtYXggOCBieXRlIGluIG9uZSB1cmIgKGVuZHBvaW50IHNpemUpCisJCQlsZW5ndGggPSAodG9kbyA8IDgpID8gdG9kbyA6IDg7CisJCQkvLyBjb3B5IGRhdGEgdG8gdHJhbnNmZXIgYnVmZmVyCisJCQltZW1jcHkocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsIHByaXYtPmJ1ZiArIHByaXYtPmN1cl9wb3MsIGxlbmd0aCApOworCQkJdXNiX2ZpbGxfaW50X3VyYiggcG9ydC0+d3JpdGVfdXJiLAorCQkJCQkgIHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCQkgIHVzYl9zbmRpbnRwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwcml2LT53cml0ZV9pbnRfZW5kcG9pbnRfYWRkcmVzcyksCisJCQkJCSAgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJCSAgbGVuZ3RoLAorCQkJCQkgIGtvYmlsX3dyaXRlX2NhbGxiYWNrLAorCQkJCQkgIHBvcnQsCisJCQkJCSAgOAorCQkJCSk7CisKKwkJCXByaXYtPmN1cl9wb3MgPSBwcml2LT5jdXJfcG9zICsgbGVuZ3RoOworCQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIoIHBvcnQtPndyaXRlX3VyYiwgR0ZQX05PSU8gKTsKKwkJCWRiZygiJXMgLSBwb3J0ICVkIFNlbmQgd3JpdGUgVVJCIHJldHVybnM6ICVpIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIHJlc3VsdCk7CisJCQl0b2RvID0gcHJpdi0+ZmlsbGVkIC0gcHJpdi0+Y3VyX3BvczsKKworCQkJaWYgKHRvZG8gPiAwKSB7CisJCQkJbXNsZWVwKDI0KTsKKwkJCX0KKworCQl9IC8vIGVuZCB3aGlsZQorCQkKKwkJcHJpdi0+ZmlsbGVkID0gMDsKKwkJcHJpdi0+Y3VyX3BvcyA9IDA7CisKKwkJLy8gc29tZW9uZSBzZXRzIHRoZSBkZXYgdG8gMCBpZiB0aGUgY2xvc2UgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZAorCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwkJCisJCS8vIHN0YXJ0IHJlYWRpbmcgKGV4Y2VwdCBUV0lOIGFuZCBLQUFOIFNJTSkKKwkJaWYgKCAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfQURBUFRFUl9CX1BST0RVQ1RfSUQpIHx8IChwcml2LT5kZXZpY2VfdHlwZSA9PSBLT0JJTF9BREFQVEVSX0tfUFJPRFVDVF9JRCkgKSB7CisJCQkvLyBzb21lb25lIHNldHMgdGhlIGRldiB0byAwIGlmIHRoZSBjbG9zZSBtZXRob2QgaGFzIGJlZW4gY2FsbGVkCisJCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwkJCQorCQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIoIHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9OT0lPICk7IAorCQkJZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCByZWFkIFVSQiByZXR1cm5zOiAlaSIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCByZXN1bHQpOworCQl9CisJfQorCXJldHVybiBjb3VudDsKK30KKworCitzdGF0aWMgaW50IGtvYmlsX3dyaXRlX3Jvb20gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJLy9kYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwlyZXR1cm4gODsKK30KKworCitzdGF0aWMgaW50IGtvYmlsX3Rpb2NtZ2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBrb2JpbF9wcml2YXRlICogcHJpdjsKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDg7CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWlmICgocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfVVNCVFdJTl9QUk9EVUNUX0lEKSB8fCAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfS0FBTl9TSU1fUFJPRFVDVF9JRCkpIHsKKwkJLy8gVGhpcyBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IGlvY3RsIGNhbGxzCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8vIGFsbG9jYXRlIG1lbW9yeSBmb3IgdHJhbnNmZXIgYnVmZmVyCisJdHJhbnNmZXJfYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikga21hbGxvYyh0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCBHRlBfS0VSTkVMKTsgIAorCWlmICghdHJhbnNmZXJfYnVmZmVyKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQodHJhbnNmZXJfYnVmZmVyLCAwLCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyggcG9ydC0+c2VyaWFsLT5kZXYsIAorCQkJCSAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwICksIAorCQkJCSAgU1VTQkNSZXF1ZXN0X0dldFN0YXR1c0xpbmVTdGF0ZSwKKwkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCB8IFVTQl9ESVJfSU4sCisJCQkJICAwLAorCQkJCSAgMCwKKwkJCQkgIHRyYW5zZmVyX2J1ZmZlciwKKwkJCQkgIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJICBLT0JJTF9USU1FT1VUKTsKKworCWRiZygiJXMgLSBwb3J0ICVkIFNlbmQgZ2V0X3N0YXR1c19saW5lX3N0YXRlIFVSQiByZXR1cm5zOiAlaS4gU3RhdHVzbGluZTogJTAyeCIsIAorCSAgICBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgcmVzdWx0LCB0cmFuc2Zlcl9idWZmZXJbMF0pOworCisJaWYgKCh0cmFuc2Zlcl9idWZmZXJbMF0gJiBTVVNCQ1JfR1NMX0RTUikgIT0gMCkgeworCQlwcml2LT5saW5lX3N0YXRlIHw9IFRJT0NNX0RTUjsKKwl9IGVsc2UgeworCQlwcml2LT5saW5lX3N0YXRlICY9IH5USU9DTV9EU1I7IAorCX0KKworCWtmcmVlKHRyYW5zZmVyX2J1ZmZlcik7CisJcmV0dXJuIHByaXYtPmxpbmVfc3RhdGU7Cit9CisKK3N0YXRpYyBpbnQgIGtvYmlsX3Rpb2Ntc2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCBrb2JpbF9wcml2YXRlICogcHJpdjsKKwlpbnQgcmVzdWx0OworCWludCBkdHIgPSAwOworCWludCBydHMgPSAwOworCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDg7CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWlmICgocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfVVNCVFdJTl9QUk9EVUNUX0lEKSB8fCAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfS0FBTl9TSU1fUFJPRFVDVF9JRCkpIHsKKwkJLy8gVGhpcyBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IGlvY3RsIGNhbGxzCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8vIGFsbG9jYXRlIG1lbW9yeSBmb3IgdHJhbnNmZXIgYnVmZmVyCisJdHJhbnNmZXJfYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikga21hbGxvYyh0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlpZiAoISB0cmFuc2Zlcl9idWZmZXIpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldCh0cmFuc2Zlcl9idWZmZXIsIDAsIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCisJaWYgKHNldCAmIFRJT0NNX1JUUykKKwkJcnRzID0gMTsKKwlpZiAoc2V0ICYgVElPQ01fRFRSKQorCQlkdHIgPSAxOworCWlmIChjbGVhciAmIFRJT0NNX1JUUykKKwkJcnRzID0gMDsKKwlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpCisJCWR0ciA9IDA7CisKKwlpZiAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfQURBUFRFUl9CX1BST0RVQ1RfSUQpIHsKKwkJaWYgKGR0ciAhPSAwKQorCQkJZGJnKCIlcyAtIHBvcnQgJWQgU2V0dGluZyBEVFIiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCWVsc2UKKwkJCWRiZygiJXMgLSBwb3J0ICVkIENsZWFyaW5nIERUUiIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKCBwb3J0LT5zZXJpYWwtPmRldiwgCisJCQkJCSAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwICksIAorCQkJCQkgIFNVU0JDUmVxdWVzdF9TZXRTdGF0dXNMaW5lc09yUXVldWVzLAorCQkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCB8IFVTQl9ESVJfT1VULAorCQkJCQkgICgoZHRyICE9IDApID8gU1VTQkNSX1NTTF9TRVREVFIgOiBTVVNCQ1JfU1NMX0NMUkRUUiksCisJCQkJCSAgMCwKKwkJCQkJICB0cmFuc2Zlcl9idWZmZXIsCisJCQkJCSAgMCwKKwkJCQkJICBLT0JJTF9USU1FT1VUKTsKKwl9IGVsc2UgeworCQlpZiAocnRzICE9IDApCisJCQlkYmcoIiVzIC0gcG9ydCAlZCBTZXR0aW5nIFJUUyIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJZWxzZQorCQkJZGJnKCIlcyAtIHBvcnQgJWQgQ2xlYXJpbmcgUlRTIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coIHBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJCQkJICB1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDAgKSwgCisJCQkJCSAgU1VTQkNSZXF1ZXN0X1NldFN0YXR1c0xpbmVzT3JRdWV1ZXMsCisJCQkJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UIHwgVVNCX0RJUl9PVVQsCisJCQkJCSAgKChydHMgIT0gMCkgPyBTVVNCQ1JfU1NMX1NFVFJUUyA6IFNVU0JDUl9TU0xfQ0xSUlRTKSwKKwkJCQkJICAwLAorCQkJCQkgIHRyYW5zZmVyX2J1ZmZlciwKKwkJCQkJICAwLAorCQkJCQkgIEtPQklMX1RJTUVPVVQpOworCX0KKwlkYmcoIiVzIC0gcG9ydCAlZCBTZW5kIHNldF9zdGF0dXNfbGluZSBVUkIgcmV0dXJuczogJWkiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgcmVzdWx0KTsKKwlrZnJlZSh0cmFuc2Zlcl9idWZmZXIpOworCXJldHVybiAocmVzdWx0IDwgMCkgPyByZXN1bHQgOiAwOworfQorCisKK3N0YXRpYyBpbnQgIGtvYmlsX2lvY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGtvYmlsX3ByaXZhdGUgKiBwcml2OworCWludCByZXN1bHQ7CisJdW5zaWduZWQgc2hvcnQgdXJiX3ZhbCA9IDA7CisJdW5zaWduZWQgY2hhciAqdHJhbnNmZXJfYnVmZmVyOworCWludCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gODsKKwljaGFyICpzZXR0aW5nczsKKwl2b2lkIF9fdXNlciAqdXNlcl9hcmcgPSAodm9pZCBfX3VzZXIgKilhcmc7CisKKwlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWlmICgocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfVVNCVFdJTl9QUk9EVUNUX0lEKSB8fCAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfS0FBTl9TSU1fUFJPRFVDVF9JRCkpIHsKKwkJLy8gVGhpcyBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IGlvY3RsIGNhbGxzCisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBUQ0dFVFM6ICAgLy8gMHg1NDAxCisJCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdXNlcl9hcmcsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpKSB7CisJCQlkYmcoIiVzIC0gcG9ydCAlZCBFcnJvciBpbiBhY2Nlc3Nfb2siLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlpZiAoa2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW9zKChzdHJ1Y3QgdGVybWlvcyBfX3VzZXIgKilhcmcsCisJCQkJCQkgICAmcHJpdi0+aW50ZXJuYWxfdGVybWlvcykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFRDU0VUUzogICAvLyAweDU0MDIKKwkJaWYgKCEocG9ydC0+dHR5LT50ZXJtaW9zKSkgeworCQkJZGJnKCIlcyAtIHBvcnQgJWQgRXJyb3I6IHBvcnQtPnR0eS0+dGVybWlvcyBpcyBOVUxMIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQkJcmV0dXJuIC1FTk9UVFk7CisJCX0KKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHVzZXJfYXJnLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKSkgeworCQkJZGJnKCIlcyAtIHBvcnQgJWQgRXJyb3IgaW4gYWNjZXNzX29rIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJaWYgKHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvcygmcHJpdi0+aW50ZXJuYWxfdGVybWlvcywKKwkJCQkJCSAgIChzdHJ1Y3QgdGVybWlvcyBfX3VzZXIgKilhcmcpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQorCQlzZXR0aW5ncyA9ICh1bnNpZ25lZCBjaGFyICopIGttYWxsb2MoNTAsIEdGUF9LRVJORUwpOyAgCisJCWlmICghIHNldHRpbmdzKSB7CisJCQlyZXR1cm4gLUVOT0JVRlM7CisJCX0KKwkJbWVtc2V0KHNldHRpbmdzLCAwLCA1MCk7CisKKwkJc3dpdGNoIChwcml2LT5pbnRlcm5hbF90ZXJtaW9zLmNfY2ZsYWcgJiBDQkFVRCkgeworCQljYXNlIEIxMjAwOgorCQkJdXJiX3ZhbCA9IFNVU0JDUl9TQlJfMTIwMDsKKwkJCXN0cmNhdChzZXR0aW5ncywgIjEyMDAgIik7CisJCQlicmVhazsKKwkJY2FzZSBCOTYwMDoKKwkJZGVmYXVsdDoKKwkJCXVyYl92YWwgPSBTVVNCQ1JfU0JSXzk2MDA7CisJCQlzdHJjYXQoc2V0dGluZ3MsICI5NjAwICIpOworCQkJYnJlYWs7CisJCX0KKworCQl1cmJfdmFsIHw9IChwcml2LT5pbnRlcm5hbF90ZXJtaW9zLmNfY2ZsYWcgJiBDU1RPUEIpID8gU1VTQkNSX1NQQVNCXzJTdG9wQml0cyA6IFNVU0JDUl9TUEFTQl8xU3RvcEJpdDsKKwkJc3RyY2F0KHNldHRpbmdzLCAocHJpdi0+aW50ZXJuYWxfdGVybWlvcy5jX2NmbGFnICYgQ1NUT1BCKSA/ICIyIFN0b3BCaXRzICIgOiAiMSBTdG9wQml0ICIpOworCisJCWlmIChwcml2LT5pbnRlcm5hbF90ZXJtaW9zLmNfY2ZsYWcgJiBQQVJFTkIpIHsKKwkJCWlmICAocHJpdi0+aW50ZXJuYWxfdGVybWlvcy5jX2NmbGFnICYgUEFST0REKSB7CisJCQkJdXJiX3ZhbCB8PSBTVVNCQ1JfU1BBU0JfT2RkUGFyaXR5OworCQkJCXN0cmNhdChzZXR0aW5ncywgIk9kZCBQYXJpdHkiKTsKKwkJCX0gZWxzZSB7CisJCQkJdXJiX3ZhbCB8PSBTVVNCQ1JfU1BBU0JfRXZlblBhcml0eTsKKwkJCQlzdHJjYXQoc2V0dGluZ3MsICJFdmVuIFBhcml0eSIpOworCQkJfQorCQl9IGVsc2UgeworCQkJdXJiX3ZhbCB8PSBTVVNCQ1JfU1BBU0JfTm9QYXJpdHk7CisJCQlzdHJjYXQoc2V0dGluZ3MsICJObyBQYXJpdHkiKTsKKwkJfQorCQlkYmcoIiVzIC0gcG9ydCAlZCBzZXR0aW5nIHBvcnQgdG86ICVzIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIHNldHRpbmdzICk7CisKKwkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKCBwb3J0LT5zZXJpYWwtPmRldiwgCisJCQkJCSAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwICksIAorCQkJCQkgIFNVU0JDUmVxdWVzdF9TZXRCYXVkUmF0ZVBhcml0eUFuZFN0b3BCaXRzLAorCQkJCQkgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9FTkRQT0lOVCB8IFVTQl9ESVJfT1VULAorCQkJCQkgIHVyYl92YWwsCisJCQkJCSAgMCwKKwkJCQkJICBzZXR0aW5ncywKKwkJCQkJICAwLAorCQkJCQkgIEtPQklMX1RJTUVPVVQKKwkJCSk7CisKKwkJZGJnKCIlcyAtIHBvcnQgJWQgU2VuZCBzZXRfYmF1ZHJhdGUgVVJCIHJldHVybnM6ICVpIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIHJlc3VsdCk7CisJCWtmcmVlKHNldHRpbmdzKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFRDRkxTSDogICAvLyAweDU0MEIKKwkJdHJhbnNmZXJfYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikga21hbGxvYyh0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCEgdHJhbnNmZXJfYnVmZmVyKSB7CisJCSAJcmV0dXJuIC1FTk9CVUZTOworCQl9CisKKwkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKCBwb3J0LT5zZXJpYWwtPmRldiwgCisJCSAJCQkgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCApLCAKKwkJCQkJICBTVVNCQ1JlcXVlc3RfTWlzYywKKwkJCQkJICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfRU5EUE9JTlQgfCBVU0JfRElSX09VVCwKKwkJCQkJICBTVVNCQ1JfTVNDX1Jlc2V0QWxsUXVldWVzLAorCQkJCQkgIDAsCisJCQkJCSAgTlVMTCwvL3RyYW5zZmVyX2J1ZmZlciwKKwkJCQkJICAwLAorCQkJCQkgIEtPQklMX1RJTUVPVVQKKwkJCSk7CisJCQorCQlkYmcoIiVzIC0gcG9ydCAlZCBTZW5kIHJlc2V0X2FsbF9xdWV1ZXMgKEZMVVNIKSBVUkIgcmV0dXJuczogJWkiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgcmVzdWx0KTsKKworCQlrZnJlZSh0cmFuc2Zlcl9idWZmZXIpOworCQlyZXR1cm4gKChyZXN1bHQgPCAwKSA/IC1FRkFVTFQgOiAwKTsKKworCX0KKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCisKK3N0YXRpYyBpbnQgX19pbml0IGtvYmlsX2luaXQgKHZvaWQpCit7CisJaW50IHJldHZhbDsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZrb2JpbF9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZrb2JpbF9kcml2ZXIpOworCWlmIChyZXR2YWwpIAorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisKKwlpbmZvKERSSVZFUl9WRVJTSU9OICIgIiBEUklWRVJfQVVUSE9SKTsKKwlpbmZvKERSSVZFUl9ERVNDKTsKKworCXJldHVybiAwOworZmFpbGVkX3VzYl9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmtvYmlsX2RldmljZSk7CitmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjoKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBrb2JpbF9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgma29iaWxfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZrb2JpbF9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChrb2JpbF9pbml0KTsKK21vZHVsZV9leGl0KGtvYmlsX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSggIkdQTCIgKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTFmYmI1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5oCkBAIC0wLDAgKzEsNjAgQEAKKyNkZWZpbmUgU1VTQkNSZXF1ZXN0X1NldEJhdWRSYXRlUGFyaXR5QW5kU3RvcEJpdHMgICAgICAgMQorI2RlZmluZSBTVVNCQ1JfU0JSX01BU0sJCQkJMHhGRjAwCisjZGVmaW5lIFNVU0JDUl9TQlJfMTIwMAkJCQkweDAxMDAKKyNkZWZpbmUgU1VTQkNSX1NCUl85NjAwCQkJCTB4MDIwMAorI2RlZmluZSBTVVNCQ1JfU0JSXzE5MjAwCQkJMHgwNDAwCisjZGVmaW5lIFNVU0JDUl9TQlJfMjg4MDAJCQkweDA4MDAKKyNkZWZpbmUgU1VTQkNSX1NCUl8zODQwMAkJCTB4MTAwMAorI2RlZmluZSBTVVNCQ1JfU0JSXzU3NjAwCQkJMHgyMDAwCisjZGVmaW5lIFNVU0JDUl9TQlJfMTE1MjAwCQkJMHg0MDAwCisKKyNkZWZpbmUgU1VTQkNSX1NQQVNCX01BU0sJCQkweDAwNzAKKyNkZWZpbmUgU1VTQkNSX1NQQVNCX05vUGFyaXR5CQkJMHgwMDEwCisjZGVmaW5lIFNVU0JDUl9TUEFTQl9PZGRQYXJpdHkJCQkweDAwMjAKKyNkZWZpbmUgU1VTQkNSX1NQQVNCX0V2ZW5QYXJpdHkJCQkweDAwNDAKKworI2RlZmluZSBTVVNCQ1JfU1BBU0JfU1RQTUFTSwkJCTB4MDAwMworI2RlZmluZSBTVVNCQ1JfU1BBU0JfMVN0b3BCaXQJCQkweDAwMDEKKyNkZWZpbmUgU1VTQkNSX1NQQVNCXzJTdG9wQml0cwkJCTB4MDAwMgorCisjZGVmaW5lIFNVU0JDUmVxdWVzdF9TZXRTdGF0dXNMaW5lc09yUXVldWVzCTIKKyNkZWZpbmUgU1VTQkNSX1NTTF9TRVRSVFMJCQkweDAwMDEKKyNkZWZpbmUgU1VTQkNSX1NTTF9DTFJSVFMJCQkweDAwMDIKKyNkZWZpbmUgU1VTQkNSX1NTTF9TRVREVFIJCQkweDAwMDQKKyNkZWZpbmUgU1VTQkNSX1NTTF9DTFJEVFIJCQkweDAwMTAKKworI2RlZmluZSBTVVNCQ1JfU1NMX1BVUkdFX1RYQUJPUlQJCTB4MDEwMCAgLy8gS2lsbCB0aGUgcGVuZGluZy9jdXJyZW50IHdyaXRlcyB0byB0aGUgY29tbSBwb3J0LgorI2RlZmluZSBTVVNCQ1JfU1NMX1BVUkdFX1JYQUJPUlQJCTB4MDIwMCAgLy8gS2lsbCB0aGUgcGVuZGluZy9jdXJyZW50IHJlYWRzIHRvIHRoZSBjb21tIHBvcnQuCisjZGVmaW5lIFNVU0JDUl9TU0xfUFVSR0VfVFhDTEVBUgkJMHgwNDAwICAvLyBLaWxsIHRoZSB0cmFuc21pdCBxdWV1ZSBpZiB0aGVyZS4KKyNkZWZpbmUgU1VTQkNSX1NTTF9QVVJHRV9SWENMRUFSCQkweDA4MDAgIC8vIEtpbGwgdGhlIHR5cGVhaGVhZCBidWZmZXIgaWYgdGhlcmUuCisKKyNkZWZpbmUgU1VTQkNSZXF1ZXN0X0dldFN0YXR1c0xpbmVTdGF0ZQkJNAorI2RlZmluZSBTVVNCQ1JfR1NMX1JYQ0hBUgkJCTB4MDAwMSAgLy8gQW55IENoYXJhY3RlciByZWNlaXZlZAorI2RlZmluZSBTVVNCQ1JfR1NMX1RYRU1QVFkJCQkweDAwMDQgIC8vIFRyYW5zbWl0dCBRdWV1ZSBFbXB0eQorI2RlZmluZSBTVVNCQ1JfR1NMX0NUUwkJCQkweDAwMDggIC8vIENUUyBjaGFuZ2VkIHN0YXRlCisjZGVmaW5lIFNVU0JDUl9HU0xfRFNSCQkJCTB4MDAxMCAgLy8gRFNSIGNoYW5nZWQgc3RhdGUKKyNkZWZpbmUgU1VTQkNSX0dTTF9STFNECQkJCTB4MDAyMCAgLy8gUkxTRCBjaGFuZ2VkIHN0YXRlCisjZGVmaW5lIFNVU0JDUl9HU0xfQlJFQUsJCQkweDAwNDAgIC8vIEJSRUFLIHJlY2VpdmVkCisjZGVmaW5lIFNVU0JDUl9HU0xfRVJSCQkJCTB4MDA4MCAgLy8gTGluZSBzdGF0dXMgZXJyb3Igb2NjdXJyZWQKKyNkZWZpbmUgU1VTQkNSX0dTTF9SSU5HCQkJCTB4MDEwMCAgLy8gUmluZyBzaWduYWwgZGV0ZWN0ZWQKKworI2RlZmluZSBTVVNCQ1JlcXVlc3RfTWlzYwkJCTgKKyNkZWZpbmUgU1VTQkNSX01TQ19SZXNldFJlYWRlcgkJCTB4MDAwMQkvLyB1c2UgYSBwcmVkZWZpbmVkIHJlc2V0IHNlcXVlbmNlCisjZGVmaW5lIFNVU0JDUl9NU0NfUmVzZXRBbGxRdWV1ZXMJCTB4MDAwMgkvLyB1c2UgYSBwcmVkZWZpbmVkIHNlcXVlbmNlIHRvIHJlc2V0IHRoZSBpbnRlcm5hbCBxdWV1ZXMKKworI2RlZmluZSBTVVNCQ1JlcXVlc3RfR2V0TWlzYwkJCTB4MTAKKyNkZWZpbmUgU1VTQkNSX01TQ19HZXRGV1ZlcnNpb24JCQkweDAwMDEJLyogZ2V0IHRoZSBmaXJtd2FyZSB2ZXJzaW9uIGZyb20gZGV2aWNlLAorCQkJCQkJCSAgIGNvZGVkIGxpa2UgdGhpcyAweEhITExCQlBQCisJCQkJCQkJICAgd2l0aCBISCA9IEZpcm13YXJlIFZlcnNpb24gSGlnaCBCeXRlCisJCQkJCQkJICAgTEwgPSBGaXJtd2FyZSBWZXJzaW9uIExvdyBCeXRlCisJCQkJCQkJICAgQkIgPSBCdWlsZCBOdW1iZXIKKwkJCQkJCQkgICBQUCA9IEZ1cnRoZXIgQXR0cmlidXRlcworCQkJCQkJCSovCisKKyNkZWZpbmUgU1VTQkNSX01TQ19HZXRIV1ZlcnNpb24JCQkweDAwMDIJLyogZ2V0IHRoZSBoYXJkd2FyZSB2ZXJzaW9uIGZyb20gZGV2aWNlCisJCQkJCQkJICAgY29kZWQgbGlrZSB0aGlzIDB4SEhMTFBQUlIKKwkJCQkJCQkgICB3aXRoIEhIID0gU29mdHdhcmUgVmVyc2lvbiBIaWdoIEJ5dGUKKwkJCQkJCQkgICBMTCA9IFNvZnR3YXJlIFZlcnNpb24gTG93IEJ5dGUKKwkJCQkJCQkgICBQUCA9IEZ1cnRoZXIgQXR0cmlidXRlcworCQkJCQkJCSAgIFJSID0gUmVzZXJ2ZWQgZm9yIHRoZSBoYXJkd2FyZSBJRCAKKwkJCQkJCQkqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGI2MzY5NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5jCkBAIC0wLDAgKzEsNzgxIEBACisvKgorICogTUNUIChNYWdpYyBDb250cm9sIFRlY2hub2xvZ3kgQ29ycC4pIFVTQiBSUzIzMiBDb252ZXJ0ZXIgRHJpdmVyCisgKgorICogICBDb3B5cmlnaHQgKEMpIDIwMDAgV29sZmdhbmcgR3JhbmRlZ2dlciAod29sZmdhbmdAY2VzLmNoKQorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgbGFyZ2VseSBkZXJpdmVkIGZyb20gdGhlIEJlbGtpbiBVU0IgU2VyaWFsIEFkYXB0ZXIgRHJpdmVyCisgKiAoc2VlIGJlbGtpbl9zYS5bY2hdKS4gQWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGV2aWNlIHdhcyBhY3F1aXJlZAorICogYnkgdXNpbmcgU25pZmZVU0Igb24gV2luZG93czk4LiBGb3IgdGVjaG5pY2FsIGRldGFpbHMgc2VlIG1jdF91MjMyLmguCisgKgorICogV2lsbGlhbSBHLiBHcmVhdGhvdXNlIGFuZCBHcmVnIEtyb2FoLUhhcnRtYW4gcHJvdmlkZWQgZ3JlYXQgaGVscCBvbiBob3cgdG8KKyAqIGRvIHRoZSByZXZlcnNlIGVuZ2luZWVyaW5nIGFuZCBob3cgdG8gd3JpdGUgYSBVU0Igc2VyaWFsIGRldmljZSBkcml2ZXIuCisgKgorICogVE8gQkUgRE9ORSwgVE8gQkUgQ0hFQ0tFRDoKKyAqICAgRFRSL1JUUyBzaWduYWwgaGFuZGxpbmcgbWF5IGJlIGluY29tcGxldGUgb3IgaW5jb3JyZWN0LiBJIGhhdmUgbWFpbmx5CisgKiAgIGltcGxlbWVudGVkIHdoYXQgSSBoYXZlIHNlZW4gd2l0aCBTbmlmZlVTQiBvciBmb3VuZCBpbiBiZWxraW5fc2EuYy4KKyAqICAgRm9yIGZ1cnRoZXIgVE9ET3MgY2hlY2sgYWxzbyBiZWxraW5fc2EuYy4KKyAqCisgKiBURVNUIFNUQVRVUzoKKyAqICAgQmFzaWMgdGVzdHMgaGF2ZSBiZWVuIHBlcmZvcm1lZCB3aXRoIG1pbmljb20vem1vZGVtIHRyYW5zZmVycyBhbmQKKyAqICAgbW9kZW0gZGlhbGluZyB1bmRlciBMaW51eCAyLjQuMC10ZXN0MTAgKGZvciBtZSBpdCB3b3JrcyBmaW5lKS4KKyAqCisgKiAwNC1Ob3YtMjAwMyBCaWxsIE1hcnIgPG1hcnIgYXQgZmxleCBkb3QgY29tPgorICogICAtIE1pbWljIFdpbmRvd3MgZHJpdmVyIGJ5IHNlbmRpbmcgMiBVU0IgJ2RldmljZSByZXF1ZXN0JyBtZXNzYWdlcworICogICAgIGZvbGxvd2luZyBub3JtYWwgJ2JhdWQgcmF0ZSBjaGFuZ2UnIG1lc3NhZ2UuICBUaGlzIGFsbG93cyBkYXRhIHRvIGJlCisgKiAgICAgdHJhbnNtaXR0ZWQgdG8gUlMtMjMyIGRldmljZXMgd2hpY2ggZG9uJ3QgYXNzZXJ0IHRoZSAnQ1RTJyBzaWduYWwuCisgKgorICogMTAtTm92LTIwMDEgV29sZmdhbmcgR3JhbmRlZ2dlcgorICogICAtIEZpeGVkIGFuIGVuZGlhbmVzcyBwcm9ibGVtIHdpdGggdGhlIGJhdWRyYXRlIHNlbGVjdGlvbiBmb3IgUG93ZXJQQy4KKyAqCisgKiAwNi1EZWMtMjAwMSBNYXJ0aW4gSGFtaWx0b24gPG1hcnRpbmhAZ251Lm9yZz4KKyAqCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBCZWxraW4gRjVVMTA5IERCOSBhZGFwdG9yCisgKgorICogMzAtTWF5LTIwMDEgR3JlZyBLcm9haC1IYXJ0bWFuCisgKglzd2l0Y2hlZCBmcm9tIHVzaW5nIHNwaW5sb2NrIHRvIGEgc2VtYXBob3JlLCB3aGljaCBmaXhlcyBsb3RzIG9mIHByb2JsZW1zLgorICoKKyAqIDA0LU1heS0yMDAxIFN0ZWxpYW4gUG9wCisgKiAgIC0gU2V0IHRoZSBtYXhpbXVtIGJ1bGsgb3V0cHV0IHNpemUgZm9yIFNpdGVjb20gVTIzMi1QMjUgbW9kZWwgdG8gMTYgYnl0ZXMKKyAqICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgcmVwb3J0ZWQgMzIgKHVzaW5nIDMyIGJ5dGVzIGNhdXNlcyBtYW55IGRhdGEKKyAqICAgICBsb3NzLCBXaW5kb3dzIGRyaXZlciB1c2VzIDE2IHRvbykuCisgKgorICogMDItTWF5LTIwMDEgU3RlbGlhbiBQb3AKKyAqICAgLSBGaXhlZCB0aGUgYmF1ZCBjYWxjdWxhdGlvbiBmb3IgU2l0ZWNvbSBVMjMyLVAyNSBtb2RlbAorICoKKyAqIDA4LUFwci0yMDAxIGdiCisgKiAgIC0gSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KKyAqCisgKiAwNi1KYW4tMjAwMSBDb3JuZWwgQ2lvY2lybGFuIAorICogICAtIEFkZGVkIHN1cHBvcnQgZm9yIFNpdGVjb20gVTIzMi1QMjUgbW9kZWwgKFByb2R1Y3QgSWQgMHgwMjMwKQorICogICAtIEFkZGVkIHN1cHBvcnQgZm9yIEQtTGluayBEVS1IM1NQIFVTQiBCQVkgKFByb2R1Y3QgSWQgMHgwMjAwKQorICoKKyAqIDI5LU5vdi0yMDAwIEdyZWcgS3JvYWgtSGFydG1hbgorICogICAtIEFkZGVkIGRldmljZSBpZCB0YWJsZSB0byBmaXQgd2l0aCAyLjQuMC10ZXN0MTEgc3RydWN0dXJlLgorICogICAtIHRvb2sgb3V0IERFQUxfV0lUSF9UV09fSU5UX0lOX0VORFBPSU5UUyAjZGVmaW5lIGFzIGl0J3Mgbm90IG5lZWRlZAorICogICAgIChsb3RzIG9mIHRoaW5ncyB3aWxsIGNoYW5nZSBpZi93aGVuIHRoZSB1c2Itc2VyaWFsIGNvcmUgY2hhbmdlcyB0bworICogICAgIGhhbmRsZSB0aGVzZSBpc3N1ZXMuCisgKgorICogMjctTm92LTIwMDAgV29sZmdhbmcgR3JhbmRlZ2dlcgorICogICBBIHZlcnNpb24gZm9yIGtlcm5lbCAyLjQuMC10ZXN0MTAgcmVsZWFzZWQgdG8gdGhlIExpbnV4IGNvbW11bml0eSAKKyAqICAgKHZpYSBsaW51eC11c2ItZGV2ZWwpLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKyNpbmNsdWRlICJtY3RfdTIzMi5oIgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ6Mi4wIgkJLyogTGludXggaW4ta2VybmVsIHZlcnNpb24gKi8KKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiV29sZmdhbmcgR3JhbmRlZ2dlciA8d29sZmdhbmdAY2VzLmNoPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIk1hZ2ljIENvbnRyb2wgVGVjaG5vbG9neSBVU0ItUlMyMzIgY29udmVydGVyIGRyaXZlciIKKworc3RhdGljIGludCBkZWJ1ZzsKKworLyoKKyAqIEZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqLworc3RhdGljIGludCAgbWN0X3UyMzJfc3RhcnR1cAkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgdm9pZCBtY3RfdTIzMl9zaHV0ZG93bgkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50ICBtY3RfdTIzMl9vcGVuCSAgICAgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIG1jdF91MjMyX2Nsb3NlCSAgICAgICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIG1jdF91MjMyX3JlYWRfaW50X2NhbGxiYWNrICAgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgbWN0X3UyMzJfc2V0X3Rlcm1pb3MgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJICBzdHJ1Y3QgdGVybWlvcyAqIG9sZCk7CitzdGF0aWMgaW50ICBtY3RfdTIzMl9pb2N0bAkgICAgICAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJICBzdHJ1Y3QgZmlsZSAqIGZpbGUsCisJCQkJCSAgdW5zaWduZWQgaW50IGNtZCwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgdm9pZCBtY3RfdTIzMl9icmVha19jdGwJICAgICAgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSAgaW50IGJyZWFrX3N0YXRlICk7CitzdGF0aWMgaW50ICBtY3RfdTIzMl90aW9jbWdldAkJIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgIG1jdF91MjMyX3Rpb2Ntc2V0CQkgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCSAgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBzZXQsCisJCQkJCSAgdW5zaWduZWQgaW50IGNsZWFyKTsKKy8qCisgKiBBbGwgb2YgdGhlIGRldmljZSBpbmZvIG5lZWRlZCBmb3IgdGhlIE1DVCBVU0ItUlMyMzIgY29udmVydGVyLgorICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY29tYmluZWQgW10gPSB7CisJeyBVU0JfREVWSUNFKE1DVF9VMjMyX1ZJRCwgTUNUX1UyMzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShNQ1RfVTIzMl9WSUQsIE1DVF9VMjMyX1NJVEVDT01fUElEKSB9LAorCXsgVVNCX0RFVklDRShNQ1RfVTIzMl9WSUQsIE1DVF9VMjMyX0RVX0gzU1BfUElEKSB9LAorCXsgVVNCX0RFVklDRShNQ1RfVTIzMl9CRUxLSU5fRjVVMTA5X1ZJRCwgTUNUX1UyMzJfQkVMS0lOX0Y1VTEwOV9QSUQpIH0sCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZV9jb21iaW5lZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtY3RfdTIzMl9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJIm1jdF91MjMyIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlX2NvbWJpbmVkLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIG1jdF91MjMyX2RldmljZSA9IHsKKwkub3duZXIgPQkgICAgIFRISVNfTU9EVUxFLAorCS5uYW1lID0JCSAgICAgIk1DVCBVMjMyIiwKKwkuc2hvcnRfbmFtZSA9CSAgICAgIm1jdF91MjMyIiwKKwkuaWRfdGFibGUgPQkgICAgIGlkX3RhYmxlX2NvbWJpbmVkLAorCS5udW1faW50ZXJydXB0X2luID0gIDIsCisJLm51bV9idWxrX2luID0JICAgICAwLAorCS5udW1fYnVsa19vdXQgPQkgICAgIDEsCisJLm51bV9wb3J0cyA9CSAgICAgMSwKKwkub3BlbiA9CQkgICAgIG1jdF91MjMyX29wZW4sCisJLmNsb3NlID0JICAgICBtY3RfdTIzMl9jbG9zZSwKKwkucmVhZF9pbnRfY2FsbGJhY2sgPSBtY3RfdTIzMl9yZWFkX2ludF9jYWxsYmFjaywKKwkuaW9jdGwgPQkgICAgIG1jdF91MjMyX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CSAgICAgbWN0X3UyMzJfc2V0X3Rlcm1pb3MsCisJLmJyZWFrX2N0bCA9CSAgICAgbWN0X3UyMzJfYnJlYWtfY3RsLAorCS50aW9jbWdldCA9CSAgICAgbWN0X3UyMzJfdGlvY21nZXQsCisJLnRpb2Ntc2V0ID0JICAgICBtY3RfdTIzMl90aW9jbXNldCwKKwkuYXR0YWNoID0JICAgICBtY3RfdTIzMl9zdGFydHVwLAorCS5zaHV0ZG93biA9CSAgICAgbWN0X3UyMzJfc2h1dGRvd24sCit9OworCisKK3N0cnVjdCBtY3RfdTIzMl9wcml2YXRlIHsKKwlzcGlubG9ja190IGxvY2s7CisJdW5zaWduZWQgaW50CSAgICAgY29udHJvbF9zdGF0ZTsgLyogTW9kZW0gTGluZSBTZXR0aW5nIChUSU9DTSkgKi8KKwl1bnNpZ25lZCBjaGFyICAgICAgICBsYXN0X2xjcjsgICAgICAvKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBjaGFyCSAgICAgbGFzdF9sc3I7ICAgICAgLyogTGluZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBjaGFyCSAgICAgbGFzdF9tc3I7ICAgICAgLyogTW9kZW0gU3RhdHVzIFJlZ2lzdGVyICovCit9OworCisvKgorICogSGFuZGxlIHZlbmRvciBzcGVjaWZpYyBVU0IgcmVxdWVzdHMKKyAqLworCisjZGVmaW5lIFdEUl9USU1FT1VUIDUwMDAgLyogZGVmYXVsdCB1cmIgdGltZW91dCAqLworCisvKgorICogTGF0ZXIgZGF5IDIuNi4wLXRlc3Qga2VybmVscyBoYXZlIG5ldyBiYXVkIHJhdGVzIGxpa2UgQjIzMDQwMCB3aGljaAorICogd2UgZG8gbm90IGtub3cgaG93IHRvIHN1cHBvcnQuIFdlIGlnbm9yZSB0aGVtIGZvciB0aGUgbW9tZW50LgorICogWFhYIFJhdGUtbGltaXQgdGhlIGVycm9yIG1lc3NhZ2UsIGl0J3MgdXNlciB0cmlnZ2VyYWJsZS4KKyAqLworc3RhdGljIGludCBtY3RfdTIzMl9jYWxjdWxhdGVfYmF1ZF9yYXRlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGludCB2YWx1ZSkKK3sKKwlpZiAobGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSBNQ1RfVTIzMl9TSVRFQ09NX1BJRAorCSAgfHwgbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSBNQ1RfVTIzMl9CRUxLSU5fRjVVMTA5X1BJRCkgeworCQlzd2l0Y2ggKHZhbHVlKSB7CisJCWNhc2UgICAgQjMwMDogcmV0dXJuIDB4MDE7CisJCWNhc2UgICAgQjYwMDogcmV0dXJuIDB4MDI7IC8qIHRoaXMgb25lIG5vdCB0ZXN0ZWQgKi8KKwkJY2FzZSAgIEIxMjAwOiByZXR1cm4gMHgwMzsKKwkJY2FzZSAgIEIyNDAwOiByZXR1cm4gMHgwNDsKKwkJY2FzZSAgIEI0ODAwOiByZXR1cm4gMHgwNjsKKwkJY2FzZSAgIEI5NjAwOiByZXR1cm4gMHgwODsKKwkJY2FzZSAgQjE5MjAwOiByZXR1cm4gMHgwOTsKKwkJY2FzZSAgQjM4NDAwOiByZXR1cm4gMHgwYTsKKwkJY2FzZSAgQjU3NjAwOiByZXR1cm4gMHgwYjsKKwkJY2FzZSBCMTE1MjAwOiByZXR1cm4gMHgwYzsKKwkJZGVmYXVsdDoKKwkJCWVycigiTUNUIFVTQi1SUzIzMjogdW5zdXBwb3J0ZWQgYmF1ZHJhdGUgcmVxdWVzdCAweCV4LCIKKwkJCSAgICAiIHVzaW5nIGRlZmF1bHQgb2YgQjk2MDAiLCB2YWx1ZSk7CisJCQlyZXR1cm4gMHgwODsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAodmFsdWUpIHsKKwkJY2FzZSAgICBCMzAwOiB2YWx1ZSA9ICAgICAzMDA7IGJyZWFrOworCQljYXNlICAgIEI2MDA6IHZhbHVlID0gICAgIDYwMDsgYnJlYWs7CisJCWNhc2UgICBCMTIwMDogdmFsdWUgPSAgICAxMjAwOyBicmVhazsKKwkJY2FzZSAgIEIyNDAwOiB2YWx1ZSA9ICAgIDI0MDA7IGJyZWFrOworCQljYXNlICAgQjQ4MDA6IHZhbHVlID0gICAgNDgwMDsgYnJlYWs7CisJCWNhc2UgICBCOTYwMDogdmFsdWUgPSAgICA5NjAwOyBicmVhazsKKwkJY2FzZSAgQjE5MjAwOiB2YWx1ZSA9ICAgMTkyMDA7IGJyZWFrOworCQljYXNlICBCMzg0MDA6IHZhbHVlID0gICAzODQwMDsgYnJlYWs7CisJCWNhc2UgIEI1NzYwMDogdmFsdWUgPSAgIDU3NjAwOyBicmVhazsKKwkJY2FzZSBCMTE1MjAwOiB2YWx1ZSA9ICAxMTUyMDA7IGJyZWFrOworCQlkZWZhdWx0OgorCQkJZXJyKCJNQ1QgVVNCLVJTMjMyOiB1bnN1cHBvcnRlZCBiYXVkcmF0ZSByZXF1ZXN0IDB4JXgsIgorCQkJICAgICIgdXNpbmcgZGVmYXVsdCBvZiBCOTYwMCIsIHZhbHVlKTsKKwkJCXZhbHVlID0gOTYwMDsKKwkJfQorCQlyZXR1cm4gMTE1MjAwL3ZhbHVlOworCX0KK30KKworc3RhdGljIGludCBtY3RfdTIzMl9zZXRfYmF1ZF9yYXRlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGludCB2YWx1ZSkKK3sKKwlfX2xlMzIgZGl2aXNvcjsKKyAgICAgICAgaW50IHJjOworICAgICAgICB1bnNpZ25lZCBjaGFyIHplcm9fYnl0ZSA9IDA7CisKKwlkaXZpc29yID0gY3B1X3RvX2xlMzIobWN0X3UyMzJfY2FsY3VsYXRlX2JhdWRfcmF0ZShzZXJpYWwsIHZhbHVlKSk7CisKKyAgICAgICAgcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1DVF9VMjMyX1NFVF9CQVVEX1JBVEVfUkVRVUVTVCwKKwkJCSAgICAgTUNUX1UyMzJfU0VUX1JFUVVFU1RfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgJmRpdmlzb3IsIE1DVF9VMjMyX1NFVF9CQVVEX1JBVEVfU0laRSwKKwkJCSAgICAgV0RSX1RJTUVPVVQpOworCWlmIChyYyA8IDApCisJCWVycigiU2V0IEJBVUQgUkFURSAlZCBmYWlsZWQgKGVycm9yID0gJWQpIiwgdmFsdWUsIHJjKTsKKwlkYmcoInNldF9iYXVkX3JhdGU6IHZhbHVlOiAweCV4LCBkaXZpc29yOiAweCV4IiwgdmFsdWUsIGRpdmlzb3IpOworCisJLyogTWltaWMgdGhlIE1DVC1zdXBwbGllZCBXaW5kb3dzIGRyaXZlciAodmVyc2lvbiAxLjIxUC4wMTA0KSwgd2hpY2gKKwkgICBhbHdheXMgc2VuZHMgdHdvIGV4dHJhIFVTQiAnZGV2aWNlIHJlcXVlc3QnIG1lc3NhZ2VzIGFmdGVyIHRoZQorCSAgICdiYXVkIHJhdGUgY2hhbmdlJyBtZXNzYWdlLiAgVGhlIGFjdHVhbCBmdW5jdGlvbmFsaXR5IG9mIHRoZQorCSAgIHJlcXVlc3QgY29kZXMgaW4gdGhlc2UgbWVzc2FnZXMgaXMgbm90IGZ1bGx5IHVuZGVyc3Rvb2QgYnV0IHRoZXNlCisJICAgcGFydGljdWxhciBjb2RlcyBhcmUgbmV2ZXIgc2VlbiBpbiBhbnkgb3BlcmF0aW9uIGJlc2lkZXMgYSBiYXVkCisJICAgcmF0ZSBjaGFuZ2UuICBCb3RoIG9mIHRoZXNlIG1lc3NhZ2VzIHNlbmQgYSBzaW5nbGUgYnl0ZSBvZiBkYXRhCisJICAgd2hvc2UgdmFsdWUgaXMgYWx3YXlzIHplcm8uICBUaGUgc2Vjb25kIG9mIHRoZXNlIHR3byBleHRyYSBtZXNzYWdlcworCSAgIGlzIHJlcXVpcmVkIGluIG9yZGVyIGZvciBkYXRhIHRvIGJlIHByb3Blcmx5IHdyaXR0ZW4gdG8gYW4gUlMtMjMyCisJICAgZGV2aWNlIHdoaWNoIGRvZXMgbm90IGFzc2VydCB0aGUgJ0NUUycgc2lnbmFsLiAqLworCisJcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkgICAgIE1DVF9VMjMyX1NFVF9VTktOT1dOMV9SRVFVRVNULCAKKwkJCSAgICAgTUNUX1UyMzJfU0VUX1JFUVVFU1RfVFlQRSwKKwkJCSAgICAgMCwgMCwgJnplcm9fYnl0ZSwgTUNUX1UyMzJfU0VUX1VOS05PV04xX1NJWkUsIAorCQkJICAgICBXRFJfVElNRU9VVCk7CisJaWYgKHJjIDwgMCkKKwkJZXJyKCJTZW5kaW5nIFVTQiBkZXZpY2UgcmVxdWVzdCBjb2RlICVkIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCAKKwkJICAgIE1DVF9VMjMyX1NFVF9VTktOT1dOMV9SRVFVRVNULCByYyk7CisKKwlyYyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICAgTUNUX1UyMzJfU0VUX1VOS05PV04yX1JFUVVFU1QsIAorCQkJICAgICBNQ1RfVTIzMl9TRVRfUkVRVUVTVF9UWVBFLAorCQkJICAgICAwLCAwLCAmemVyb19ieXRlLCBNQ1RfVTIzMl9TRVRfVU5LTk9XTjJfU0laRSwgCisJCQkgICAgIFdEUl9USU1FT1VUKTsKKwlpZiAocmMgPCAwKQorCQllcnIoIlNlbmRpbmcgVVNCIGRldmljZSByZXF1ZXN0IGNvZGUgJWQgZmFpbGVkIChlcnJvciA9ICVkKSIsIAorCQkgICAgTUNUX1UyMzJfU0VUX1VOS05PV04yX1JFUVVFU1QsIHJjKTsKKworICAgICAgICByZXR1cm4gcmM7Cit9IC8qIG1jdF91MjMyX3NldF9iYXVkX3JhdGUgKi8KKworc3RhdGljIGludCBtY3RfdTIzMl9zZXRfbGluZV9jdHJsKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIGNoYXIgbGNyKQoreworICAgICAgICBpbnQgcmM7CisgICAgICAgIHJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQ1RfVTIzMl9TRVRfTElORV9DVFJMX1JFUVVFU1QsCisJCQkgICAgIE1DVF9VMjMyX1NFVF9SRVFVRVNUX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsICZsY3IsIE1DVF9VMjMyX1NFVF9MSU5FX0NUUkxfU0laRSwKKwkJCSAgICAgV0RSX1RJTUVPVVQpOworCWlmIChyYyA8IDApCisJCWVycigiU2V0IExJTkUgQ1RSTCAweCV4IGZhaWxlZCAoZXJyb3IgPSAlZCkiLCBsY3IsIHJjKTsKKwlkYmcoInNldF9saW5lX2N0cmw6IDB4JXgiLCBsY3IpOworICAgICAgICByZXR1cm4gcmM7Cit9IC8qIG1jdF91MjMyX3NldF9saW5lX2N0cmwgKi8KKworc3RhdGljIGludCBtY3RfdTIzMl9zZXRfbW9kZW1fY3RybChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCSAgIHVuc2lnbmVkIGludCBjb250cm9sX3N0YXRlKQoreworICAgICAgICBpbnQgcmM7CisJdW5zaWduZWQgY2hhciBtY3IgPSBNQ1RfVTIzMl9NQ1JfTk9ORTsKKworCWlmIChjb250cm9sX3N0YXRlICYgVElPQ01fRFRSKQorCQltY3IgfD0gTUNUX1UyMzJfTUNSX0RUUjsKKwlpZiAoY29udHJvbF9zdGF0ZSAmIFRJT0NNX1JUUykKKwkJbWNyIHw9IE1DVF9VMjMyX01DUl9SVFM7CisKKyAgICAgICAgcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1DVF9VMjMyX1NFVF9NT0RFTV9DVFJMX1JFUVVFU1QsCisJCQkgICAgIE1DVF9VMjMyX1NFVF9SRVFVRVNUX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsICZtY3IsIE1DVF9VMjMyX1NFVF9NT0RFTV9DVFJMX1NJWkUsCisJCQkgICAgIFdEUl9USU1FT1VUKTsKKwlpZiAocmMgPCAwKQorCQllcnIoIlNldCBNT0RFTSBDVFJMIDB4JXggZmFpbGVkIChlcnJvciA9ICVkKSIsIG1jciwgcmMpOworCWRiZygic2V0X21vZGVtX2N0cmw6IHN0YXRlPTB4JXggPT0+IG1jcj0weCV4IiwgY29udHJvbF9zdGF0ZSwgbWNyKTsKKworICAgICAgICByZXR1cm4gcmM7Cit9IC8qIG1jdF91MjMyX3NldF9tb2RlbV9jdHJsICovCisKK3N0YXRpYyBpbnQgbWN0X3UyMzJfZ2V0X21vZGVtX3N0YXQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgY2hhciAqbXNyKQoreworICAgICAgICBpbnQgcmM7CisgICAgICAgIHJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQ1RfVTIzMl9HRVRfTU9ERU1fU1RBVF9SRVFVRVNULAorCQkJICAgICBNQ1RfVTIzMl9HRVRfUkVRVUVTVF9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBtc3IsIE1DVF9VMjMyX0dFVF9NT0RFTV9TVEFUX1NJWkUsCisJCQkgICAgIFdEUl9USU1FT1VUKTsKKwlpZiAocmMgPCAwKSB7CisJCWVycigiR2V0IE1PREVNIFNUQVR1cyBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmMpOworCQkqbXNyID0gMDsKKwl9CisJZGJnKCJnZXRfbW9kZW1fc3RhdDogMHgleCIsICptc3IpOworICAgICAgICByZXR1cm4gcmM7Cit9IC8qIG1jdF91MjMyX2dldF9tb2RlbV9zdGF0ICovCisKK3N0YXRpYyB2b2lkIG1jdF91MjMyX21zcl90b19zdGF0ZSh1bnNpZ25lZCBpbnQgKmNvbnRyb2xfc3RhdGUsIHVuc2lnbmVkIGNoYXIgbXNyKQoreworIAkvKiBUcmFuc2xhdGUgQ29udHJvbCBMaW5lIHN0YXRlcyAqLworCWlmIChtc3IgJiBNQ1RfVTIzMl9NU1JfRFNSKQorCQkqY29udHJvbF9zdGF0ZSB8PSAgVElPQ01fRFNSOworCWVsc2UKKwkJKmNvbnRyb2xfc3RhdGUgJj0gflRJT0NNX0RTUjsKKwlpZiAobXNyICYgTUNUX1UyMzJfTVNSX0NUUykKKwkJKmNvbnRyb2xfc3RhdGUgfD0gIFRJT0NNX0NUUzsKKwllbHNlCisJCSpjb250cm9sX3N0YXRlICY9IH5USU9DTV9DVFM7CisJaWYgKG1zciAmIE1DVF9VMjMyX01TUl9SSSkKKwkJKmNvbnRyb2xfc3RhdGUgfD0gIFRJT0NNX1JJOworCWVsc2UKKwkJKmNvbnRyb2xfc3RhdGUgJj0gflRJT0NNX1JJOworCWlmIChtc3IgJiBNQ1RfVTIzMl9NU1JfQ0QpCisJCSpjb250cm9sX3N0YXRlIHw9ICBUSU9DTV9DRDsKKwllbHNlCisJCSpjb250cm9sX3N0YXRlICY9IH5USU9DTV9DRDsKKyAJZGJnKCJtc3JfdG9fc3RhdGU6IG1zcj0weCV4ID09PiBzdGF0ZT0weCV4IiwgbXNyLCAqY29udHJvbF9zdGF0ZSk7Cit9IC8qIG1jdF91MjMyX21zcl90b19zdGF0ZSAqLworCisvKgorICogRHJpdmVyJ3MgdHR5IGludGVyZmFjZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgaW50IG1jdF91MjMyX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKnByaXY7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgKnJwb3J0OworCisJcHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtY3RfdTIzMl9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQocHJpdiwgMCwgc2l6ZW9mKHN0cnVjdCBtY3RfdTIzMl9wcml2YXRlKSk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0sIHByaXYpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmc2VyaWFsLT5wb3J0WzBdLT53cml0ZV93YWl0KTsKKworCS8qIFB1aCwgdGhhdCdzIGRpcnR5ICovCisJcG9ydCA9IHNlcmlhbC0+cG9ydFswXTsKKwlycG9ydCA9IHNlcmlhbC0+cG9ydFsxXTsKKwlpZiAocG9ydC0+cmVhZF91cmIpIHsKKwkJLyogTm8gdW5saW5raW5nLCBpdCB3YXNuJ3Qgc3VibWl0dGVkIHlldC4gKi8KKwkJdXNiX2ZyZWVfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwl9CisJcG9ydC0+cmVhZF91cmIgPSBycG9ydC0+aW50ZXJydXB0X2luX3VyYjsKKwlycG9ydC0+aW50ZXJydXB0X2luX3VyYiA9IE5VTEw7CisJcG9ydC0+cmVhZF91cmItPmNvbnRleHQgPSBwb3J0OworCisJcmV0dXJuICgwKTsKK30gLyogbWN0X3UyMzJfc3RhcnR1cCAqLworCisKK3N0YXRpYyB2b2lkIG1jdF91MjMyX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBtY3RfdTIzMl9wcml2YXRlICpwcml2OworCWludCBpOworCQorCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJZm9yIChpPTA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCS8qIE15IHNwZWNpYWwgaXRlbXMsIHRoZSBzdGFuZGFyZCByb3V0aW5lcyBmcmVlIG15IHVyYnMgKi8KKwkJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pOworCQlpZiAocHJpdikgeworCQkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CisJCQlrZnJlZShwcml2KTsKKwkJfQorCX0KK30gLyogbWN0X3UyMzJfc2h1dGRvd24gKi8KKworc3RhdGljIGludCAgbWN0X3UyMzJfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBpbnQgY29udHJvbF9zdGF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgbGFzdF9sY3I7CisJdW5zaWduZWQgY2hhciBsYXN0X21zcjsKKworCWRiZygiJXMgcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIENvbXBlbnNhdGUgZm9yIGEgaGFyZHdhcmUgYnVnOiBhbHRob3VnaCB0aGUgU2l0ZWNvbSBVMjMyLVAyNQorCSAqIGRldmljZSByZXBvcnRzIGEgbWF4aW11bSBvdXRwdXQgcGFja2V0IHNpemUgb2YgMzIgYnl0ZXMsCisJICogaXQgc2VlbXMgdG8gYmUgYWJsZSB0byBhY2NlcHQgb25seSAxNiBieXRlcyAoYW5kIHRoYXQncyB3aGF0CisJICogU25pZmZVU0Igc2F5cyB0b28uLi4pCisJICovCisJaWYgKGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gTUNUX1UyMzJfU0lURUNPTV9QSUQpCisJCXBvcnQtPmJ1bGtfb3V0X3NpemUgPSAxNjsKKworCS8qIERvIGEgZGVmaW5lZCByZXN0YXJ0OiB0aGUgbm9ybWFsIHNlcmlhbCBkZXZpY2Ugc2VlbXMgdG8gCisJICogYWx3YXlzIHR1cm4gb24gRFRSIGFuZCBSVFMgaGVyZSwgc28gZG8gdGhlIHNhbWUuIEknbSBub3QKKwkgKiBzdXJlIGlmIHRoaXMgaXMgcmVhbGx5IG5lY2Vzc2FyeS4gQnV0IGl0IHNob3VsZCBub3QgaGFybQorCSAqIGVpdGhlci4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkKKwkJcHJpdi0+Y29udHJvbF9zdGF0ZSA9IFRJT0NNX0RUUiB8IFRJT0NNX1JUUzsKKwllbHNlCisJCXByaXYtPmNvbnRyb2xfc3RhdGUgPSAwOworCQorCXByaXYtPmxhc3RfbGNyID0gKE1DVF9VMjMyX0RBVEFfQklUU184IHwgCisJCQkgIE1DVF9VMjMyX1BBUklUWV9OT05FIHwKKwkJCSAgTUNUX1UyMzJfU1RPUF9CSVRTXzEpOworCWNvbnRyb2xfc3RhdGUgPSBwcml2LT5jb250cm9sX3N0YXRlOworCWxhc3RfbGNyID0gcHJpdi0+bGFzdF9sY3I7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCW1jdF91MjMyX3NldF9tb2RlbV9jdHJsKHNlcmlhbCwgY29udHJvbF9zdGF0ZSk7CisJbWN0X3UyMzJfc2V0X2xpbmVfY3RybChzZXJpYWwsIGxhc3RfbGNyKTsKKworCS8qIFJlYWQgbW9kZW0gc3RhdHVzIGFuZCB1cGRhdGUgY29udHJvbCBzdGF0ZSAqLworCW1jdF91MjMyX2dldF9tb2RlbV9zdGF0KHNlcmlhbCwgJmxhc3RfbXNyKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPmxhc3RfbXNyID0gbGFzdF9tc3I7CisJbWN0X3UyMzJfbXNyX3RvX3N0YXRlKCZwcml2LT5jb250cm9sX3N0YXRlLCBwcml2LT5sYXN0X21zcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0dmFsKSB7CisJCWVycigidXNiX3N1Ym1pdF91cmIocmVhZCBidWxrKSBmYWlsZWQgcGlwZSAweCV4IGVyciAlZCIsCisJCSAgICBwb3J0LT5yZWFkX3VyYi0+cGlwZSwgcmV0dmFsKTsKKwkJZ290byBleGl0OworCX0KKworCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXR2YWwpCisJCWVycigiIHVzYl9zdWJtaXRfdXJiKHJlYWQgaW50KSBmYWlsZWQgcGlwZSAweCV4IGVyciAlZCIsCisJCSAgICBwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5waXBlLCByZXR2YWwpOworCitleGl0OgorCXJldHVybiAwOworfSAvKiBtY3RfdTIzMl9vcGVuICovCisKKworc3RhdGljIHZvaWQgbWN0X3UyMzJfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWRiZygiJXMgcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChwb3J0LT5zZXJpYWwtPmRldikgeworCQkvKiBzaHV0ZG93biBvdXIgdXJicyAqLworCQl1c2Jfa2lsbF91cmIocG9ydC0+d3JpdGVfdXJiKTsKKwkJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwkJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOworCX0KK30gLyogbWN0X3UyMzJfY2xvc2UgKi8KKworCitzdGF0aWMgdm9pZCBtY3RfdTIzMl9yZWFkX2ludF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCWlmICghc2VyaWFsKSB7CisJCWRiZygiJXMgLSBiYWQgc2VyaWFsIHBvaW50ZXIsIGV4aXRpbmciLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisgICAgICAgIGRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCisJLyoKKwkgKiBXb3JrLWEtcm91bmQ6IGhhbmRsZSB0aGUgJ3VzdWFsJyBidWxrLWluIHBpcGUgaGVyZQorCSAqLworCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiAyKSB7CisJCWludCBpOworCQl0dHkgPSBwb3J0LT50dHk7CisJCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGggOyArK2kpIHsKKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaV0sIDApOworCQkJfQorCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJfQorCQlnb3RvIGV4aXQ7CisJfQorCQorCS8qCisJICogVGhlIGludGVycnVwdC1pbiBwaXBlIHNpZ25hbHMgZXhjZXB0aW9uYWwgY29uZGl0aW9ucyAobW9kZW0gbGluZQorCSAqIHNpZ25hbCBjaGFuZ2VzIGFuZCBlcnJvcnMpLiBkYXRhWzBdIGhvbGRzIE1TUiwgZGF0YVsxXSBob2xkcyBMU1IuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT5sYXN0X21zciA9IGRhdGFbTUNUX1UyMzJfTVNSX0lOREVYXTsKKwkKKwkvKiBSZWNvcmQgQ29udHJvbCBMaW5lIHN0YXRlcyAqLworCW1jdF91MjMyX21zcl90b19zdGF0ZSgmcHJpdi0+Y29udHJvbF9zdGF0ZSwgcHJpdi0+bGFzdF9tc3IpOworCisjaWYgMAorCS8qIE5vdCB5ZXQgaGFuZGxlZC4gU2VlIGJlbGluX3NhLmMgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gKi8KKwkvKiBOb3cgdG8gcmVwb3J0IGFueSBlcnJvcnMgKi8KKwlwcml2LT5sYXN0X2xzciA9IGRhdGFbTUNUX1UyMzJfTFNSX0lOREVYXTsKKwkvKgorCSAqIGZpbGwgaW4gdGhlIGZsaXAgYnVmZmVyIGhlcmUsIGJ1dCBJIGRvIG5vdCBrbm93IHRoZSByZWxhdGlvbgorCSAqIHRvIHRoZSBjdXJyZW50L25leHQgcmVjZWl2ZSBidWZmZXIgb3IgY2hhcmFjdGVycy4gIEkgbmVlZAorCSAqIHRvIGxvb2sgaW4gdG8gdGhpcyBiZWZvcmUgY29tbWl0dGluZyBhbnkgY29kZS4KKwkgKi8KKwlpZiAocHJpdi0+bGFzdF9sc3IgJiBNQ1RfVTIzMl9MU1JfRVJSKSB7CisJCXR0eSA9IHBvcnQtPnR0eTsKKwkJLyogT3ZlcnJ1biBFcnJvciAqLworCQlpZiAocHJpdi0+bGFzdF9sc3IgJiBNQ1RfVTIzMl9MU1JfT0UpIHsKKwkJfQorCQkvKiBQYXJpdHkgRXJyb3IgKi8KKwkJaWYgKHByaXYtPmxhc3RfbHNyICYgTUNUX1UyMzJfTFNSX1BFKSB7CisJCX0KKwkJLyogRnJhbWluZyBFcnJvciAqLworCQlpZiAocHJpdi0+bGFzdF9sc3IgJiBNQ1RfVTIzMl9MU1JfRkUpIHsKKwkJfQorCQkvKiBCcmVhayBJbmRpY2F0b3IgKi8KKwkJaWYgKHByaXYtPmxhc3RfbHNyICYgTUNUX1UyMzJfTFNSX0JJKSB7CisJCX0KKwl9CisjZW5kaWYKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CitleGl0OgorCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMpCisJCWVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7Cit9IC8qIG1jdF91MjMyX3JlYWRfaW50X2NhbGxiYWNrICovCisKK3N0YXRpYyB2b2lkIG1jdF91MjMyX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCSAgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgaW50IGlmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnOworCXVuc2lnbmVkIGludCBjZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwl1bnNpZ25lZCBpbnQgb2xkX2NmbGFnID0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgY29udHJvbF9zdGF0ZSwgbmV3X3N0YXRlOworCXVuc2lnbmVkIGNoYXIgbGFzdF9sY3I7CisKKwkvKiBnZXQgYSBsb2NhbCBjb3B5IG9mIHRoZSBjdXJyZW50IHBvcnQgc2V0dGluZ3MgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWNvbnRyb2xfc3RhdGUgPSBwcml2LT5jb250cm9sX3N0YXRlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlsYXN0X2xjciA9IDA7CisKKwkvKgorCSAqIFVwZGF0ZSBiYXVkIHJhdGUuCisJICogRG8gbm90IGF0dGVtcHQgdG8gY2FjaGUgb2xkIHJhdGVzIGFuZCBza2lwIHNldHRpbmdzLAorCSAqIGRpc2Nvbm5lY3RzIHNjcmV3IHN1Y2ggdHJpY2tzIHVwIGNvbXBsZXRlbHkuCisJICogUHJlbWF0dXJlIG9wdGltaXphdGlvbiBpcyB0aGUgcm9vdCBvZiBhbGwgZXZpbC4KKwkgKi8KKworICAgICAgICAvKiByZWFzc2VydCBEVFIgYW5kIChtYXliZSkgUlRTIG9uIHRyYW5zaXRpb24gZnJvbSBCMCAqLworCWlmICgob2xkX2NmbGFnICYgQ0JBVUQpID09IEIwKSB7CisJCWRiZygiJXM6IGJhdWQgd2FzIEIwIiwgX19GVU5DVElPTl9fKTsKKwkJY29udHJvbF9zdGF0ZSB8PSBUSU9DTV9EVFI7CisJCS8qIGRvbid0IHNldCBSVFMgaWYgdXNpbmcgaGFyZHdhcmUgZmxvdyBjb250cm9sICovCisJCWlmICghKG9sZF9jZmxhZyAmIENSVFNDVFMpKSB7CisJCQljb250cm9sX3N0YXRlIHw9IFRJT0NNX1JUUzsKKwkJfQorCQltY3RfdTIzMl9zZXRfbW9kZW1fY3RybChzZXJpYWwsIGNvbnRyb2xfc3RhdGUpOworCX0KKworCW1jdF91MjMyX3NldF9iYXVkX3JhdGUoc2VyaWFsLCBjZmxhZyAmIENCQVVEKTsKKworCWlmICgoY2ZsYWcgJiBDQkFVRCkgPT0gQjAgKSB7CisJCWRiZygiJXM6IGJhdWQgaXMgQjAiLCBfX0ZVTkNUSU9OX18pOworCQkvKiBEcm9wIFJUUyBhbmQgRFRSICovCisJCWNvbnRyb2xfc3RhdGUgJj0gfihUSU9DTV9EVFIgfCBUSU9DTV9SVFMpOworICAgICAgIAkJbWN0X3UyMzJfc2V0X21vZGVtX2N0cmwoc2VyaWFsLCBjb250cm9sX3N0YXRlKTsKKwl9CisKKwkvKgorCSAqIFVwZGF0ZSBsaW5lIGNvbnRyb2wgcmVnaXN0ZXIgKExDUikKKwkgKi8KKworCS8qIHNldCB0aGUgcGFyaXR5ICovCisJaWYgKGNmbGFnICYgUEFSRU5CKQorCQlsYXN0X2xjciB8PSAoY2ZsYWcgJiBQQVJPREQpID8KKwkJCU1DVF9VMjMyX1BBUklUWV9PREQgOiBNQ1RfVTIzMl9QQVJJVFlfRVZFTjsKKwllbHNlCisJCWxhc3RfbGNyIHw9IE1DVF9VMjMyX1BBUklUWV9OT05FOworCisJLyogc2V0IHRoZSBudW1iZXIgb2YgZGF0YSBiaXRzICovCisJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7CisJY2FzZSBDUzU6CisJCWxhc3RfbGNyIHw9IE1DVF9VMjMyX0RBVEFfQklUU181OyBicmVhazsKKwljYXNlIENTNjoKKwkJbGFzdF9sY3IgfD0gTUNUX1UyMzJfREFUQV9CSVRTXzY7IGJyZWFrOworCWNhc2UgQ1M3OgorCQlsYXN0X2xjciB8PSBNQ1RfVTIzMl9EQVRBX0JJVFNfNzsgYnJlYWs7CisJY2FzZSBDUzg6CisJCWxhc3RfbGNyIHw9IE1DVF9VMjMyX0RBVEFfQklUU184OyBicmVhazsKKwlkZWZhdWx0OgorCQllcnIoIkNTSVpFIHdhcyBub3QgQ1M1LUNTOCwgdXNpbmcgZGVmYXVsdCBvZiA4Iik7CisJCWxhc3RfbGNyIHw9IE1DVF9VMjMyX0RBVEFfQklUU184OworCQlicmVhazsKKwl9CisKKwkvKiBzZXQgdGhlIG51bWJlciBvZiBzdG9wIGJpdHMgKi8KKwlsYXN0X2xjciB8PSAoY2ZsYWcgJiBDU1RPUEIpID8KKwkJTUNUX1UyMzJfU1RPUF9CSVRTXzIgOiBNQ1RfVTIzMl9TVE9QX0JJVFNfMTsKKworCW1jdF91MjMyX3NldF9saW5lX2N0cmwoc2VyaWFsLCBsYXN0X2xjcik7CisKKwkvKgorCSAqIFNldCBmbG93IGNvbnRyb2w6IHdlbGwsIEkgZG8gbm90IHJlYWxseSBub3cgaG93IHRvIGhhbmRsZSBEVFIvUlRTLgorCSAqIEp1c3QgZG8gd2hhdCB3ZSBoYXZlIHNlZW4gd2l0aCBTbmlmZlVTQiBvbiBXaW45OC4KKwkgKi8KKwkvKiBEcm9wIERUUi9SVFMgaWYgbm8gZmxvdyBjb250cm9sIG90aGVyd2lzZSBhc3NlcnQgKi8KKwluZXdfc3RhdGUgPSBjb250cm9sX3N0YXRlOworCWlmICgoaWZsYWcgJiBJWE9GRikgfHwgKGlmbGFnICYgSVhPTikgfHwgKGNmbGFnICYgQ1JUU0NUUykpCisJCW5ld19zdGF0ZSB8PSBUSU9DTV9EVFIgfCBUSU9DTV9SVFM7CisJZWxzZQorCQluZXdfc3RhdGUgJj0gfihUSU9DTV9EVFIgfCBUSU9DTV9SVFMpOworCWlmIChuZXdfc3RhdGUgIT0gY29udHJvbF9zdGF0ZSkgeworCQltY3RfdTIzMl9zZXRfbW9kZW1fY3RybChzZXJpYWwsIG5ld19zdGF0ZSk7CisJCWNvbnRyb2xfc3RhdGUgPSBuZXdfc3RhdGU7CisJfQorCisJLyogc2F2ZSBvZmYgdGhlIG1vZGlmaWVkIHBvcnQgc2V0dGluZ3MgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPmNvbnRyb2xfc3RhdGUgPSBjb250cm9sX3N0YXRlOworCXByaXYtPmxhc3RfbGNyID0gbGFzdF9sY3I7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworfSAvKiBtY3RfdTIzMl9zZXRfdGVybWlvcyAqLworCitzdGF0aWMgdm9pZCBtY3RfdTIzMl9icmVha19jdGwoIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSApCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBjaGFyIGxjcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlc3N0YXRlPSVkIiwgX19GVU5DVElPTl9fLCBicmVha19zdGF0ZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWxjciA9IHByaXYtPmxhc3RfbGNyOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChicmVha19zdGF0ZSkKKwkJbGNyIHw9IE1DVF9VMjMyX1NFVF9CUkVBSzsKKworCW1jdF91MjMyX3NldF9saW5lX2N0cmwoc2VyaWFsLCBsY3IpOworfSAvKiBtY3RfdTIzMl9icmVha19jdGwgKi8KKworCitzdGF0aWMgaW50IG1jdF91MjMyX3Rpb2NtZ2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBpbnQgY29udHJvbF9zdGF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQorCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwljb250cm9sX3N0YXRlID0gcHJpdi0+Y29udHJvbF9zdGF0ZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gY29udHJvbF9zdGF0ZTsKK30KKworc3RhdGljIGludCBtY3RfdTIzMl90aW9jbXNldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBpbnQgY29udHJvbF9zdGF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCQorCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwljb250cm9sX3N0YXRlID0gcHJpdi0+Y29udHJvbF9zdGF0ZTsKKworCWlmIChzZXQgJiBUSU9DTV9SVFMpCisJCWNvbnRyb2xfc3RhdGUgfD0gVElPQ01fUlRTOworCWlmIChzZXQgJiBUSU9DTV9EVFIpCisJCWNvbnRyb2xfc3RhdGUgfD0gVElPQ01fRFRSOworCWlmIChjbGVhciAmIFRJT0NNX1JUUykKKwkJY29udHJvbF9zdGF0ZSAmPSB+VElPQ01fUlRTOworCWlmIChjbGVhciAmIFRJT0NNX0RUUikKKwkJY29udHJvbF9zdGF0ZSAmPSB+VElPQ01fRFRSOworCisJcHJpdi0+Y29udHJvbF9zdGF0ZSA9IGNvbnRyb2xfc3RhdGU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXJldHVybiBtY3RfdTIzMl9zZXRfbW9kZW1fY3RybChzZXJpYWwsIGNvbnRyb2xfc3RhdGUpOworfQorCitzdGF0aWMgaW50IG1jdF91MjMyX2lvY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCisJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlkYmcoIiVzY21kPTB4JXgiLCBfX0ZVTkNUSU9OX18sIGNtZCk7CisKKwkvKiBCYXNlZCBvbiBjb2RlIGZyb20gYWNtLmMgYW5kIG90aGVycyAqLworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBUSU9DTUlXQUlUOgorCQkvKiB3YWl0IGZvciBhbnkgb2YgdGhlIDQgbW9kZW0gaW5wdXRzIChEQ0QsUkksRFNSLENUUykqLworCQkvKiBUT0RPICovCisJCXJldHVybiggMCApOworCisJY2FzZSBUSU9DR0lDT1VOVDoKKwkJLyogcmV0dXJuIGNvdW50IG9mIG1vZGVtbGluZSB0cmFuc2l0aW9ucyAqLworCQkvKiBUT0RPICovCisJCXJldHVybiAwOworCisJZGVmYXVsdDoKKwkJZGJnKCIlczogYXJnIG5vdCBzdXBwb3J0ZWQgLSAweCUwNHgiLCBfX0ZVTkNUSU9OX18sY21kKTsKKwkJcmV0dXJuKC1FTk9JT0NUTENNRCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30gLyogbWN0X3UyMzJfaW9jdGwgKi8KKworCitzdGF0aWMgaW50IF9faW5pdCBtY3RfdTIzMl9pbml0ICh2b2lkKQoreworCWludCByZXR2YWw7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmbWN0X3UyMzJfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmbWN0X3UyMzJfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiAwOworZmFpbGVkX3VzYl9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJm1jdF91MjMyX2RldmljZSk7CitmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjoKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtY3RfdTIzMl9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgmbWN0X3UyMzJfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZtY3RfdTIzMl9kZXZpY2UpOworfQorCisKK21vZHVsZV9pbml0IChtY3RfdTIzMl9pbml0KTsKK21vZHVsZV9leGl0KG1jdF91MjMyX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZGQwZDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuaApAQCAtMCwwICsxLDQ1MyBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciBNQ1QgKE1hZ2ljIENvbnRyb2wgVGVjaG5vbG9neSkgVVNCLVJTMjMyIENvbnZlcnRlciBEcml2ZXIKKyAqCisgKiAgIENvcHlyaWdodCAoQykgMjAwMCBXb2xmZ2FuZyBHcmFuZGVnZ2VyICh3b2xmZ2FuZ0BjZXMuY2gpCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGZvciB0aGUgZGV2aWNlIE1DVCBVU0ItUlMyMzIgQ29udmVydGVyICgyNSBwaW4sIE1vZGVsIE5vLgorICogVTIzMi1QMjUpIGZyb20gTWFnaWMgQ29udHJvbCBUZWNobm9sb2d5IENvcnAuICh0aGVyZSBpcyBhbHNvIGEgOSBwaW4KKyAqIE1vZGVsIE5vLiBVMjMyLVA5KS4gU2VlIGh0dHA6Ly93d3cubWN0LmNvbS50dy9wX3UyMzIuaHRtbCBmb3IgZnVydGhlcgorICogaW5mb3JtYXRpb24uIFRoZSBwcm9wZXJ0aWVzIG9mIHRoaXMgZGV2aWNlIGFyZSBsaXN0ZWQgYXQgdGhlIGVuZCBvZiB0aGlzCisgKiBmaWxlLiBUaGlzIGRldmljZSBpcyBhdmFpbGFibGUgZnJvbSB2YXJpb3VzIGRpc3RyaWJ1dG9ycy4gSSBrbm93IEhhbmEsCisgKiBodHRwOi8vd3d3LmhhbmEuZGUgYW5kIEQtTGluaywgaHR0cDovL3d3dy5kbGluay5jb20vcHJvZHVjdHMvdXNiL2RzYnMyNS4KKyAqCisgKiBBbGwgb2YgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkZXZpY2Ugd2FzIGFjcXVpcmVkIGJ5IHVzaW5nIFNuaWZmVVNCCisgKiBvbiBXaW5kb3dzOTguIFRoZSB0ZWNobmljYWwgZGV0YWlscyBvZiB0aGUgcmV2ZXJzZSBlbmdpbmVlcmluZyBhcmUKKyAqIHN1bW1hcml6ZWQgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1VTQl9TRVJJQUxfTUNUX1UyMzJfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9TRVJJQUxfTUNUX1UyMzJfSAorCisjZGVmaW5lIE1DVF9VMjMyX1ZJRAkgICAgICAgICAgICAgICAgMHgwNzExCS8qIFZlbmRvciBJZCAqLworI2RlZmluZSBNQ1RfVTIzMl9QSUQJICAgICAgICAgICAgICAgIDB4MDIxMAkvKiBPcmlnaW5hbCBNQ1QgUHJvZHVjdCBJZCAqLworCisvKiBVMjMyLVAyNSwgU2l0ZWNvbSAqLworI2RlZmluZSBNQ1RfVTIzMl9TSVRFQ09NX1BJRAkJMHgwMjMwCS8qIFNpdGVjb20gUHJvZHVjdCBJZCAqLworCisvKiBEVS1IM1NQIFVTQiBCQVkgaHViICovCisjZGVmaW5lIE1DVF9VMjMyX0RVX0gzU1BfUElECQkweDAyMDAJLyogRC1MaW5rIERVLUgzU1AgVVNCIEJBWSAqLworCisvKiBCZWxraW4gYmFkZ2UgdGhlIE1DVCBVMjMyLVA5IGFzIHRoZSBGNVUxMDkgKi8KKyNkZWZpbmUgTUNUX1UyMzJfQkVMS0lOX0Y1VTEwOV9WSUQJMHgwNTBkCS8qIFZlbmRvciBJZCAqLworI2RlZmluZSBNQ1RfVTIzMl9CRUxLSU5fRjVVMTA5X1BJRAkweDAxMDkJLyogUHJvZHVjdCBJZCAqLworCisvKgorICogVmVuZG9yIFJlcXVlc3QgSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUgTUNUX1UyMzJfU0VUX1JFUVVFU1RfVFlQRQkweDQwCisjZGVmaW5lIE1DVF9VMjMyX0dFVF9SRVFVRVNUX1RZUEUJMHhjMAorCisjZGVmaW5lIE1DVF9VMjMyX0dFVF9NT0RFTV9TVEFUX1JFUVVFU1QgMiAgLyogR2V0IE1vZGVtIFN0YXR1cyBSZWdpc3RlciAoTVNSKSAqLworI2RlZmluZSBNQ1RfVTIzMl9HRVRfTU9ERU1fU1RBVF9TSVpFICAgIDEKKworI2RlZmluZSBNQ1RfVTIzMl9HRVRfTElORV9DVFJMX1JFUVVFU1QgIDYgIC8qIEdldCBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKExDUikgKi8KKyNkZWZpbmUgTUNUX1UyMzJfR0VUX0xJTkVfQ1RSTF9TSVpFICAgICAxICAvKiAuLi4gbm90IHVzZWQgYnkgdGhpcyBkcml2ZXIgKi8KKworI2RlZmluZSBNQ1RfVTIzMl9TRVRfQkFVRF9SQVRFX1JFUVVFU1QJNSAgLyogU2V0IEJhdWQgUmF0ZSBEaXZpc29yICovCisjZGVmaW5lIE1DVF9VMjMyX1NFVF9CQVVEX1JBVEVfU0laRSAgICAgNAorCisjZGVmaW5lIE1DVF9VMjMyX1NFVF9MSU5FX0NUUkxfUkVRVUVTVAk3ICAvKiBTZXQgTGluZSBDb250cm9sIFJlZ2lzdGVyIChMQ1IpICovCisjZGVmaW5lIE1DVF9VMjMyX1NFVF9MSU5FX0NUUkxfU0laRSAgICAgMQorCisjZGVmaW5lIE1DVF9VMjMyX1NFVF9NT0RFTV9DVFJMX1JFUVVFU1QJMTAgLyogU2V0IE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgKE1DUikgKi8KKyNkZWZpbmUgTUNUX1UyMzJfU0VUX01PREVNX0NUUkxfU0laRSAgICAxCisKKy8qIFRoaXMgVVNCIGRldmljZSByZXF1ZXN0IGNvZGUgaXMgbm90IHdlbGwgdW5kZXJzdG9vZC4gIEl0IGlzIHRyYW5zbWl0dGVkIGJ5CisgICB0aGUgTUNULXN1cHBsaWVkIFdpbmRvd3MgZHJpdmVyIHdoZW5ldmVyIHRoZSBiYXVkIHJhdGUgY2hhbmdlcy4gCisqLworI2RlZmluZSBNQ1RfVTIzMl9TRVRfVU5LTk9XTjFfUkVRVUVTVCAgIDExICAvKiBVbmtub3duIGZ1bmN0aW9uYWxpdHkgKi8KKyNkZWZpbmUgTUNUX1UyMzJfU0VUX1VOS05PV04xX1NJWkUgICAgICAgMQorCisvKiBUaGlzIFVTQiBkZXZpY2UgcmVxdWVzdCBjb2RlIGlzIG5vdCB3ZWxsIHVuZGVyc3Rvb2QuICBJdCBpcyB0cmFuc21pdHRlZCBieQorICAgdGhlIE1DVC1zdXBwbGllZCBXaW5kb3dzIGRyaXZlciB3aGVuZXZlciB0aGUgYmF1ZCByYXRlIGNoYW5nZXMuIAorICAgCisgICBXaXRob3V0IHRoaXMgVVNCIGRldmljZSByZXF1ZXN0LCB0aGUgVVNCL1JTLTIzMiBhZGFwdGVyIHdpbGwgbm90IHdyaXRlIHRvCisgICBSUy0yMzIgZGV2aWNlcyB3aGljaCBkbyBub3QgYXNzZXJ0IHRoZSAnQ1RTJyBzaWduYWwuCisqLworI2RlZmluZSBNQ1RfVTIzMl9TRVRfVU5LTk9XTjJfUkVRVUVTVCAgIDEyICAvKiBVbmtub3duIGZ1bmN0aW9uYWxpdHkgKi8KKyNkZWZpbmUgTUNUX1UyMzJfU0VUX1VOS05PV04yX1NJWkUgICAgICAgMQorCisvKgorICogQmF1ZCByYXRlIChkaXZpc29yKQorICogQWN0dWFsbHksIHRoZXJlIGFyZSB0d28gb2YgdGhlbSwgTUNUIHdlYnNpdGUgY2FsbHMgdGhlbSAiUGhpbGlwcyBzb2x1dGlvbiIKKyAqIGFuZCAiSW50ZWwgc29sdXRpb24iLiBUaGV5IGFyZSB0aGUgcmVndWxhciBNQ1QgYW5kICJTaXRlY29tIiBmb3IgdXMuCisgKiBUaGlzIGlzIHBvaW50bGVzcyB0byBkb2N1bWVudCBpbiB0aGUgaGVhZGVyLCBzZWUgdGhlIGNvZGUgZm9yIHRoZSBiaXRzLgorICovCitzdGF0aWMgaW50IG1jdF91MjMyX2NhbGN1bGF0ZV9iYXVkX3JhdGUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgaW50IHZhbHVlKTsKKworLyoKKyAqIExpbmUgQ29udHJvbCBSZWdpc3RlciAoTENSKQorICovCisjZGVmaW5lIE1DVF9VMjMyX1NFVF9CUkVBSyAgICAgICAgICAgICAgMHg0MAorCisjZGVmaW5lIE1DVF9VMjMyX1BBUklUWV9TUEFDRQkJMHgzOAorI2RlZmluZSBNQ1RfVTIzMl9QQVJJVFlfTUFSSwkJMHgyOAorI2RlZmluZSBNQ1RfVTIzMl9QQVJJVFlfRVZFTgkJMHgxOAorI2RlZmluZSBNQ1RfVTIzMl9QQVJJVFlfT0RECQkweDA4CisjZGVmaW5lIE1DVF9VMjMyX1BBUklUWV9OT05FCQkweDAwCisKKyNkZWZpbmUgTUNUX1UyMzJfREFUQV9CSVRTXzUgICAgICAgICAgICAweDAwCisjZGVmaW5lIE1DVF9VMjMyX0RBVEFfQklUU182ICAgICAgICAgICAgMHgwMQorI2RlZmluZSBNQ1RfVTIzMl9EQVRBX0JJVFNfNyAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgTUNUX1UyMzJfREFUQV9CSVRTXzggICAgICAgICAgICAweDAzCisKKyNkZWZpbmUgTUNUX1UyMzJfU1RPUF9CSVRTXzIgICAgICAgICAgICAweDA0CisjZGVmaW5lIE1DVF9VMjMyX1NUT1BfQklUU18xICAgICAgICAgICAgMHgwMAorCisvKgorICogTW9kZW0gQ29udHJvbCBSZWdpc3RlciAoTUNSKQorICovCisjZGVmaW5lIE1DVF9VMjMyX01DUl9OT05FICAgICAgICAgICAgICAgMHg4ICAgICAvKiBEZWFjdGl2YXRlIERUUiBhbmQgUlRTICovCisjZGVmaW5lIE1DVF9VMjMyX01DUl9SVFMgICAgICAgICAgICAgICAgMHhhICAgICAvKiBBY3RpdmF0ZSBSVFMgKi8KKyNkZWZpbmUgTUNUX1UyMzJfTUNSX0RUUiAgICAgICAgICAgICAgICAweDkgICAgIC8qIEFjdGl2YXRlIERUUiAqLworCisvKgorICogTW9kZW0gU3RhdHVzIFJlZ2lzdGVyIChNU1IpCisgKi8KKyNkZWZpbmUgTUNUX1UyMzJfTVNSX0lOREVYICAgICAgICAgICAgICAweDAgICAgIC8qIGRhdGFbaW5kZXhdICovCisjZGVmaW5lIE1DVF9VMjMyX01TUl9DRCAgICAgICAgICAgICAgICAgMHg4MCAgICAvKiBDdXJyZW50IENEICovCisjZGVmaW5lIE1DVF9VMjMyX01TUl9SSSAgICAgICAgICAgICAgICAgMHg0MCAgICAvKiBDdXJyZW50IFJJICovCisjZGVmaW5lIE1DVF9VMjMyX01TUl9EU1IgICAgICAgICAgICAgICAgMHgyMCAgICAvKiBDdXJyZW50IERTUiAqLworI2RlZmluZSBNQ1RfVTIzMl9NU1JfQ1RTICAgICAgICAgICAgICAgIDB4MTAgICAgLyogQ3VycmVudCBDVFMgKi8KKyNkZWZpbmUgTUNUX1UyMzJfTVNSX0RDRCAgICAgICAgICAgICAgICAweDA4ICAgIC8qIERlbHRhIENEICovCisjZGVmaW5lIE1DVF9VMjMyX01TUl9EUkkgICAgICAgICAgICAgICAgMHgwNCAgICAvKiBEZWx0YSBSSSAqLworI2RlZmluZSBNQ1RfVTIzMl9NU1JfRERTUiAgICAgICAgICAgICAgIDB4MDIgICAgLyogRGVsdGEgRFNSICovCisjZGVmaW5lIE1DVF9VMjMyX01TUl9EQ1RTICAgICAgICAgICAgICAgMHgwMSAgICAvKiBEZWx0YSBDVFMgKi8KKworLyoKKyAqIExpbmUgU3RhdHVzIFJlZ2lzdGVyIChMU1IpCisgKi8KKyNkZWZpbmUgTUNUX1UyMzJfTFNSX0lOREVYICAgICAgICAgICAgICAxICAgICAgIC8qIGRhdGFbaW5kZXhdICovCisjZGVmaW5lIE1DVF9VMjMyX0xTUl9FUlIgICAgICAgICAgICAgICAgMHg4MCAgICAvKiBPRSB8IFBFIHwgRkUgfCBCSSAqLworI2RlZmluZSBNQ1RfVTIzMl9MU1JfVEVNVCAgICAgICAgICAgICAgIDB4NDAgICAgLyogdHJhbnNtaXQgcmVnaXN0ZXIgZW1wdHkgKi8KKyNkZWZpbmUgTUNUX1UyMzJfTFNSX1RIUkUgICAgICAgICAgICAgICAweDIwICAgIC8qIHRyYW5zbWl0IGhvbGRpbmcgcmVnaXN0ZXIgZW1wdHkgKi8KKyNkZWZpbmUgTUNUX1UyMzJfTFNSX0JJICAgICAgICAgICAgICAgICAweDEwICAgIC8qIGJyZWFrIGluZGljYXRvciAqLworI2RlZmluZSBNQ1RfVTIzMl9MU1JfRkUgICAgICAgICAgICAgICAgIDB4MDggICAgLyogZnJhbWluZyBlcnJvciAqLworI2RlZmluZSBNQ1RfVTIzMl9MU1JfT0UgICAgICAgICAgICAgICAgIDB4MDIgICAgLyogb3ZlcnJ1biBlcnJvciAqLworI2RlZmluZSBNQ1RfVTIzMl9MU1JfUEUgICAgICAgICAgICAgICAgIDB4MDQgICAgLyogcGFyaXR5IGVycm9yICovCisjZGVmaW5lIE1DVF9VMjMyX0xTUl9PRSAgICAgICAgICAgICAgICAgMHgwMiAgICAvKiBvdmVycnVuIGVycm9yICovCisjZGVmaW5lIE1DVF9VMjMyX0xTUl9EUiAgICAgICAgICAgICAgICAgMHgwMSAgICAvKiByZWNlaXZlIGRhdGEgcmVhZHkgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVGVjaG5pY2FsIFNwZWNpZmljYXRpb24gcmV2ZXJzZSBlbmdpbmVlcmVkIHdpdGggU25pZmZVU0Igb24gV2luZG93czk4CisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiAgVGhlIHRlY2huaWNhbCBkZXRhaWxzIG9mIHRoZSBkZXZpY2UgaGF2ZSBiZWVuIGFjcXVpcmVkIGJlIHVzaW5nICJTbmlmZlVTQiIKKyAqICBhbmQgdGhlIHZlbmRvci1zdXBwbGllZCBkZXZpY2UgZHJpdmVyICh2ZXJzaW9uIDIuM0EpIHVuZGVyIFdpbmRvd3M5OC4gVG8KKyAqICBpZGVudGlmeSB0aGUgVVNCIHZlbmRvci1zcGVjaWZpYyByZXF1ZXN0cyBhbmQgdG8gYXNzaWduIHRoZW0gdG8gdGVybWluYWwgCisgKiAgc2V0dGluZ3MgKGZsb3cgY29udHJvbCwgYmF1ZCByYXRlLCBldGMuKSB0aGUgcHJvZ3JhbSAiU2VyaWFsU2V0dGluZ3MiIGZyb20KKyAqICBXaWxsaWFtIEcuIEdyZWF0aG91c2UgaGFzIGJlZW4gcHJvdmVuIHRvIGJlIHZlcnkgdXNlZnVsLiBJIGFsc28gdXNlZCB0aGUKKyAqICBXaW45OCAiSHlwZXJUZXJtaW5hbCIgYW5kICJ1c2Itcm9ib3QiIG9uIExpbnV4IGZvciB0ZXN0aW5nLiBUaGUgcmVzdWx0cyBhbmQgCisgKiAgb2JzZXJ2YXRpb25zIGFyZSBzdW1tYXJpemVkIGJlbG93OgorICoKKyAqICBUaGUgVVNCIHJlcXVlc3RzIHNlZW0gdG8gYmUgZGlyZWN0bHkgbWFwcGVkIHRvIHRoZSByZWdpc3RlcnMgb2YgYSA4MjUwLAorICogIDE2NDUwIG9yIDE2NTUwIFVBUlQuIFRoZSBGcmVlQlNEIGhhbmRib29rIChhcHBlbmRpeCBGLjQgIklucHV0L091dHB1dAorICogIGRldmljZXMiKSBjb250YWlucyBhIGNvbXByZWhlbnNpdmUgZGVzY3JpcHRpb24gb2YgVUFSVHMgYW5kIGl0cyByZWdpc3RlcnMuCisgKiAgVGhlIGJpdCBkZXNjcmlwdGlvbnMgYXJlIGFjdHVhbGx5IHRha2VuIGZyb20gdGhlcmUuCisgKgorICoKKyAqIEJhdWQgcmF0ZSAoZGl2aXNvcikKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgIEJtUmVxdWVzdFR5cGU6ICAweDQwICgwMTAwIDAwMDBCKQorICogICBiUmVxdWVzdDogICAgICAgMHgwNQorICogICB3VmFsdWU6ICAgICAgICAgMHgwMDAwCisgKiAgIHdJbmRleDogICAgICAgICAweDAwMDAKKyAqICAgd0xlbmd0aDogICAgICAgIDB4MDAwNAorICogICBEYXRhOiAgICAgICAgICAgZGl2aXNvciA9IDExNTIwMCAvIGJhdWRfcmF0ZQorICoKKyAqICAgU25pZmZVU0Igb2JzZXJ2YXRpb25zIChOb3YgMjAwMyk6IENvbnRyYXJ5IHRvIHRoZSAnd0xlbmd0aCcgdmFsdWUgb2YgNAorICogICBzaG93biBhYm92ZSwgb2JzZXJ2YXRpb25zIHdpdGggYSBCZWxraW4gRjVVMTA5IGFkYXB0ZXIsIHVzaW5nIHRoZQorICogICBNQ1Qtc3VwcGxpZWQgV2luZG93czk4IGRyaXZlciAoVTJTUE9SVC5WWEQsICJGaWxlIHZlcnNpb246IDEuMjFQLjAxMDQgZm9yCisgKiAgIFdpbjk4L01lIiksIHNob3cgdGhpcyByZXF1ZXN0IGhhcyBhIGxlbmd0aCBvZiAxIGJ5dGUsIHByZXN1bWFibHkgYmVjYXVzZQorICogICBvZiB0aGUgZmFjdCB0aGF0IHRoZSBCZWxraW4gYWRhcHRlciBhbmQgdGhlICdTaXRlY29tIFUyMzItUDI1JyBhZGFwdGVyCisgKiAgIHVzZSBhIGJhdWQtcmF0ZSBjb2RlIGluc3RlYWQgb2YgYSBjb252ZW50aW9uYWwgUlMtMjMyIGJhdWQgcmF0ZSBkaXZpc29yLgorICogICBUaGUgY3VycmVudCBzb3VyY2UgY29kZSBmb3IgdGhpcyBkcml2ZXIgZG9lcyBub3QgcmVmbGVjdCB0aGlzIGZhY3QsIGJ1dAorICogICB0aGUgZHJpdmVyIHdvcmtzIGZpbmUgd2l0aCB0aGlzIGFkYXB0ZXIvZHJpdmVyIGNvbWJpbmF0aW9uIG5vbmV0aGVsZXNzLgorICoKKyAqCisgKiBMaW5lIENvbnRyb2wgUmVnaXN0ZXIgKExDUikKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqICBCbVJlcXVlc3RUeXBlOiAgMHg0MCAoMDEwMCAwMDAwQikgICAgMHhjMCAoMTEwMCAwMDAwQikKKyAqICBiUmVxdWVzdDogICAgICAgMHgwNyAgICAgICAgICAgICAgICAgMHgwNgorICogIHdWYWx1ZTogICAgICAgICAweDAwMDAKKyAqICB3SW5kZXg6ICAgICAgICAgMHgwMDAwCisgKiAgd0xlbmd0aDogICAgICAgIDB4MDAwMQorICogIERhdGE6ICAgICAgICAgICBMQ1IgKHNlZSBiZWxvdykKKyAqCisgKiAgQml0IDc6IERpdmlzb3IgTGF0Y2ggQWNjZXNzIEJpdCAoRExBQikuIFdoZW4gc2V0LCBhY2Nlc3MgdG8gdGhlIGRhdGEKKyAqICAJICAgdHJhbnNtaXQvcmVjZWl2ZSByZWdpc3RlciAoVEhSL1JCUikgYW5kIHRoZSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgKiAgCSAgIChJRVIpIGlzIGRpc2FibGVkLiBBbnkgYWNjZXNzIHRvIHRoZXNlIHBvcnRzIGlzIG5vdyByZWRpcmVjdGVkIHRvIHRoZQorICogIAkgICBEaXZpc29yIExhdGNoIFJlZ2lzdGVycy4gU2V0dGluZyB0aGlzIGJpdCwgbG9hZGluZyB0aGUgRGl2aXNvcgorICogIAkgICBSZWdpc3RlcnMsIGFuZCBjbGVhcmluZyBETEFCIHNob3VsZCBiZSBkb25lIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqICBCaXQgNjogU2V0IEJyZWFrLiBXaGVuIHNldCB0byAiMSIsIHRoZSB0cmFuc21pdHRlciBiZWdpbnMgdG8gdHJhbnNtaXQKKyAqICAJICAgY29udGludW91cyBTcGFjaW5nIHVudGlsIHRoaXMgYml0IGlzIHNldCB0byAiMCIuIFRoaXMgb3ZlcnJpZGVzIGFueQorICogIAkgICBiaXRzIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgYmVpbmcgdHJhbnNtaXR0ZWQuCisgKiAgQml0IDU6IFN0aWNrIFBhcml0eS4gV2hlbiBwYXJpdHkgaXMgZW5hYmxlZCwgc2V0dGluZyB0aGlzIGJpdCBjYXVzZXMgcGFyaXR5CisgKiAgCSAgIHRvIGFsd2F5cyBiZSAiMSIgb3IgIjAiLCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgQml0IDQuCisgKiAgQml0IDQ6IEV2ZW4gUGFyaXR5IFNlbGVjdCAoRVBTKS4gV2hlbiBwYXJpdHkgaXMgZW5hYmxlZCBhbmQgQml0IDUgaXMgIjAiLAorICogIAkgICBzZXR0aW5nIHRoaXMgYml0IGNhdXNlcyBldmVuIHBhcml0eSB0byBiZSB0cmFuc21pdHRlZCBhbmQgZXhwZWN0ZWQuCisgKiAgCSAgIE90aGVyd2lzZSwgb2RkIHBhcml0eSBpcyB1c2VkLgorICogIEJpdCAzOiBQYXJpdHkgRW5hYmxlIChQRU4pLiBXaGVuIHNldCB0byAiMSIsIGEgcGFyaXR5IGJpdCBpcyBpbnNlcnRlZAorICogIAkgICBiZXR3ZWVuIHRoZSBsYXN0IGJpdCBvZiB0aGUgZGF0YSBhbmQgdGhlIFN0b3AgQml0LiBUaGUgVUFSVCB3aWxsIGFsc28KKyAqICAJICAgZXhwZWN0IHBhcml0eSB0byBiZSBwcmVzZW50IGluIHRoZSByZWNlaXZlZCBkYXRhLgorICogIEJpdCAyOiBOdW1iZXIgb2YgU3RvcCBCaXRzIChTVEIpLiBJZiBzZXQgdG8gIjEiIGFuZCB1c2luZyA1LWJpdCBkYXRhIHdvcmRzLAorICogIAkgICAxLjUgU3RvcCBCaXRzIGFyZSB0cmFuc21pdHRlZCBhbmQgZXhwZWN0ZWQgaW4gZWFjaCBkYXRhIHdvcmQuIEZvcgorICogIAkgICA2LCA3IGFuZCA4LWJpdCBkYXRhIHdvcmRzLCAyIFN0b3AgQml0cyBhcmUgdHJhbnNtaXR0ZWQgYW5kIGV4cGVjdGVkLgorICogIAkgICBXaGVuIHRoaXMgYml0IGlzIHNldCB0byAiMCIsIG9uZSBTdG9wIEJpdCBpcyB1c2VkIG9uIGVhY2ggZGF0YSB3b3JkLgorICogIEJpdCAxOiBXb3JkIExlbmd0aCBTZWxlY3QgQml0ICMxIChXTFNCMSkKKyAqICBCaXQgMDogV29yZCBMZW5ndGggU2VsZWN0IEJpdCAjMCAoV0xTQjApCisgKiAgCSAgIFRvZ2V0aGVyIHRoZXNlIGJpdHMgc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gZWFjaCBkYXRhIHdvcmQuCisgKiAgCSAgICAgMSAwICBXb3JkIExlbmd0aAorICogIAkgICAgIDAgMCAgNSBEYXRhIEJpdHMKKyAqICAJICAgICAwIDEgIDYgRGF0YSBCaXRzCisgKiAgCSAgICAgMSAwICA3IERhdGEgQml0cworICogIAkgICAgIDEgMSAgOCBEYXRhIEJpdHMKKyAqCisgKiAgU25pZmZVU0Igb2JzZXJ2YXRpb25zOiBCaXQgNyBzZWVtcyBub3QgdG8gYmUgdXNlZC4gVGhlcmUgc2VlbSB0byBiZSB0d28gYnVncworICogIGluIHRoZSBXaW45OCBkcml2ZXI6IHRoZSBicmVhayBkb2VzIG5vdCB3b3JrIChiaXQgNiBpcyBub3QgYXNzZXJ0ZWQpIGFuZCB0aGUKKyAqICBzdGljayBwYXJpdHkgYml0IGlzIG5vdCBjbGVhcmVkIHdoZW4gc2V0IG9uY2UuIFRoZSBMQ1IgY2FuIGFsc28gYmUgcmVhZAorICogIGJhY2sgd2l0aCBVU0IgcmVxdWVzdCA2IGJ1dCB0aGlzIGhhcyBuZXZlciBiZWVuIG9ic2VydmVkIHdpdGggU25pZmZVU0IuCisgKgorICoKKyAqIE1vZGVtIENvbnRyb2wgUmVnaXN0ZXIgKE1DUikKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgQm1SZXF1ZXN0VHlwZTogIDB4NDAgICgwMTAwIDAwMDBCKQorICogIGJSZXF1ZXN0OiAgICAgICAweDBhCisgKiAgd1ZhbHVlOiAgICAgICAgIDB4MDAwMAorICogIHdJbmRleDogICAgICAgICAweDAwMDAKKyAqICB3TGVuZ3RoOiAgICAgICAgMHgwMDAxCisgKiAgRGF0YTogICAgICAgICAgIE1DUiAoQml0IDQuLjcsIHNlZSBiZWxvdykKKyAqCisgKiAgQml0IDc6IFJlc2VydmVkLCBhbHdheXMgMC4KKyAqICBCaXQgNjogUmVzZXJ2ZWQsIGFsd2F5cyAwLgorICogIEJpdCA1OiBSZXNlcnZlZCwgYWx3YXlzIDAuCisgKiAgQml0IDQ6IExvb3AtQmFjayBFbmFibGUuIFdoZW4gc2V0IHRvICIxIiwgdGhlIFVBUlQgdHJhbnNtaXR0ZXIgYW5kIHJlY2VpdmVyCisgKiAgCSAgIGFyZSBpbnRlcm5hbGx5IGNvbm5lY3RlZCB0b2dldGhlciB0byBhbGxvdyBkaWFnbm9zdGljIG9wZXJhdGlvbnMuIEluCisgKiAgCSAgIGFkZGl0aW9uLCB0aGUgVUFSVCBtb2RlbSBjb250cm9sIG91dHB1dHMgYXJlIGNvbm5lY3RlZCB0byB0aGUgVUFSVAorICogIAkgICBtb2RlbSBjb250cm9sIGlucHV0cy4gQ1RTIGlzIGNvbm5lY3RlZCB0byBSVFMsIERUUiBpcyBjb25uZWN0ZWQgdG8KKyAqICAJICAgRFNSLCBPVVQxIGlzIGNvbm5lY3RlZCB0byBSSSwgYW5kIE9VVCAyIGlzIGNvbm5lY3RlZCB0byBEQ0QuCisgKiAgQml0IDM6IE9VVCAyLiBBbiBhdXhpbGlhcnkgb3V0cHV0IHRoYXQgdGhlIGhvc3QgcHJvY2Vzc29yIG1heSBzZXQgaGlnaCBvcgorICogIAkgICBsb3cuIEluIHRoZSBJQk0gUEMgc2VyaWFsIGFkYXB0ZXIgKGFuZCBtb3N0IGNsb25lcyksIE9VVCAyIGlzIHVzZWQKKyAqICAJICAgdG8gdHJpLXN0YXRlIChkaXNhYmxlKSB0aGUgaW50ZXJydXB0IHNpZ25hbCBmcm9tIHRoZQorICogIAkgICA4MjUwLzE2NDUwLzE2NTUwIFVBUlQuCisgKiAgQml0IDI6IE9VVCAxLiBBbiBhdXhpbGlhcnkgb3V0cHV0IHRoYXQgdGhlIGhvc3QgcHJvY2Vzc29yIG1heSBzZXQgaGlnaCBvcgorICogIAkgICBsb3cuIFRoaXMgb3V0cHV0IGlzIG5vdCB1c2VkIG9uIHRoZSBJQk0gUEMgc2VyaWFsIGFkYXB0ZXIuCisgKiAgQml0IDE6IFJlcXVlc3QgdG8gU2VuZCAoUlRTKS4gV2hlbiBzZXQgdG8gIjEiLCB0aGUgb3V0cHV0IG9mIHRoZSBVQVJUIC1SVFMKKyAqICAJICAgbGluZSBpcyBMb3cgKEFjdGl2ZSkuCisgKiAgQml0IDA6IERhdGEgVGVybWluYWwgUmVhZHkgKERUUikuIFdoZW4gc2V0IHRvICIxIiwgdGhlIG91dHB1dCBvZiB0aGUgVUFSVAorICogIAkgICAtRFRSIGxpbmUgaXMgTG93IChBY3RpdmUpLgorICoKKyAqICBTbmlmZlVTQiBvYnNlcnZhdGlvbnM6IEJpdCAyIGFuZCA0IHNlZW0gbm90IHRvIGJlIHVzZWQgYnV0IGJpdCAzIGhhcyBiZWVuCisgKiAgc2VlbiBfYWx3YXlzXyBzZXQuCisgKgorICoKKyAqIE1vZGVtIFN0YXR1cyBSZWdpc3RlciAoTVNSKQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogIEJtUmVxdWVzdFR5cGU6ICAweGMwICAoMTEwMCAwMDAwQikKKyAqICBiUmVxdWVzdDogICAgICAgMHgwMgorICogIHdWYWx1ZTogICAgICAgICAweDAwMDAKKyAqICB3SW5kZXg6ICAgICAgICAgMHgwMDAwCisgKiAgd0xlbmd0aDogICAgICAgIDB4MDAwMQorICogIERhdGE6ICAgICAgICAgICBNU1IgKHNlZSBiZWxvdykKKyAqCisgKiAgQml0IDc6IERhdGEgQ2FycmllciBEZXRlY3QgKENEKS4gUmVmbGVjdHMgdGhlIHN0YXRlIG9mIHRoZSBEQ0QgbGluZSBvbiB0aGUKKyAqICAJICAgVUFSVC4KKyAqICBCaXQgNjogUmluZyBJbmRpY2F0b3IgKFJJKS4gUmVmbGVjdHMgdGhlIHN0YXRlIG9mIHRoZSBSSSBsaW5lIG9uIHRoZSBVQVJULgorICogIEJpdCA1OiBEYXRhIFNldCBSZWFkeSAoRFNSKS4gUmVmbGVjdHMgdGhlIHN0YXRlIG9mIHRoZSBEU1IgbGluZSBvbiB0aGUgVUFSVC4KKyAqICBCaXQgNDogQ2xlYXIgVG8gU2VuZCAoQ1RTKS4gUmVmbGVjdHMgdGhlIHN0YXRlIG9mIHRoZSBDVFMgbGluZSBvbiB0aGUgVUFSVC4KKyAqICBCaXQgMzogRGVsdGEgRGF0YSBDYXJyaWVyIERldGVjdCAoRERDRCkuIFNldCB0byAiMSIgaWYgdGhlIC1EQ0QgbGluZSBoYXMKKyAqICAJICAgY2hhbmdlZCBzdGF0ZSBvbmUgbW9yZSBtb3JlIHRpbWVzIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlIE1TUiB3YXMKKyAqICAJICAgcmVhZCBieSB0aGUgaG9zdC4KKyAqICBCaXQgMjogVHJhaWxpbmcgRWRnZSBSaW5nIEluZGljYXRvciAoVEVSSSkuIFNldCB0byAiMSIgaWYgdGhlIC1SSSBsaW5lIGhhcworICogIAkgICBoYWQgYSBsb3cgdG8gaGlnaCB0cmFuc2l0aW9uIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlIE1TUiB3YXMgcmVhZCBieQorICogIAkgICB0aGUgaG9zdC4KKyAqICBCaXQgMTogRGVsdGEgRGF0YSBTZXQgUmVhZHkgKEREU1IpLiBTZXQgdG8gIjEiIGlmIHRoZSAtRFNSIGxpbmUgaGFzIGNoYW5nZWQKKyAqICAJICAgc3RhdGUgb25lIG1vcmUgbW9yZSB0aW1lcyBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoZSBNU1Igd2FzIHJlYWQgYnkgdGhlCisgKiAgCSAgIGhvc3QuCisgKiAgQml0IDA6IERlbHRhIENsZWFyIFRvIFNlbmQgKERDVFMpLiBTZXQgdG8gIjEiIGlmIHRoZSAtQ1RTIGxpbmUgaGFzIGNoYW5nZWQKKyAqICAJICAgc3RhdGUgb25lIG1vcmUgdGltZXMgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgTVNSIHdhcyByZWFkIGJ5IHRoZQorICogIAkgICBob3N0LgorICoKKyAqICBTbmlmZlVTQiBvYnNlcnZhdGlvbnM6IHRoZSBNU1IgaXMgYWxzbyByZXR1cm5lZCBhcyBmaXJzdCBieXRlIG9uIHRoZQorICogIGludGVycnVwdC1pbiBlbmRwb2ludCAweDgzIHRvIHNpZ25hbCBjaGFuZ2VzIG9mIG1vZGVtIHN0YXR1cyBsaW5lcy4gVGhlIFVTQgorICogIHJlcXVlc3QgdG8gcmVhZCBNU1IgY2Fubm90IGJlIGFwcGxpZWQgZHVyaW5nIG5vcm1hbCBkZXZpY2Ugb3BlcmF0aW9uLgorICoKKyAqCisgKiBMaW5lIFN0YXR1cyBSZWdpc3RlciAoTFNSKQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgQml0IDcgICBFcnJvciBpbiBSZWNlaXZlciBGSUZPLiBPbiB0aGUgODI1MC8xNjQ1MCBVQVJULCB0aGlzIGJpdCBpcyB6ZXJvLgorICogIAkgICAgVGhpcyBiaXQgaXMgc2V0IHRvICIxIiB3aGVuIGFueSBvZiB0aGUgYnl0ZXMgaW4gdGhlIEZJRk8gaGF2ZSBvbmUgb3IKKyAqICAJICAgIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBjb25kaXRpb25zOiBQRSwgRkUsIG9yIEJJLgorICogIEJpdCA2ICAgVHJhbnNtaXR0ZXIgRW1wdHkgKFRFTVQpLiBXaGVuIHNldCB0byAiMSIsIHRoZXJlIGFyZSBubyB3b3JkcworICogIAkgICAgcmVtYWluaW5nIGluIHRoZSB0cmFuc21pdCBGSUZPIG9yIHRoZSB0cmFuc21pdCBzaGlmdCByZWdpc3Rlci4gVGhlCisgKiAgCSAgICB0cmFuc21pdHRlciBpcyBjb21wbGV0ZWx5IGlkbGUuCisgKiAgQml0IDUgICBUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyIEVtcHR5IChUSFJFKS4gV2hlbiBzZXQgdG8gIjEiLCB0aGUgRklGTworICogIAkgICAgKG9yIGhvbGRpbmcgcmVnaXN0ZXIpIG5vdyBoYXMgcm9vbSBmb3IgYXQgbGVhc3Qgb25lIGFkZGl0aW9uYWwgd29yZAorICogIAkgICAgdG8gdHJhbnNtaXQuIFRoZSB0cmFuc21pdHRlciBtYXkgc3RpbGwgYmUgdHJhbnNtaXR0aW5nIHdoZW4gdGhpcyBiaXQKKyAqICAJICAgIGlzIHNldCB0byAiMSIuCisgKiAgQml0IDQgICBCcmVhayBJbnRlcnJ1cHQgKEJJKS4gVGhlIHJlY2VpdmVyIGhhcyBkZXRlY3RlZCBhIEJyZWFrIHNpZ25hbC4KKyAqICBCaXQgMyAgIEZyYW1pbmcgRXJyb3IgKEZFKS4gQSBTdGFydCBCaXQgd2FzIGRldGVjdGVkIGJ1dCB0aGUgU3RvcCBCaXQgZGlkIG5vdAorICogIAkgICAgYXBwZWFyIGF0IHRoZSBleHBlY3RlZCB0aW1lLiBUaGUgcmVjZWl2ZWQgd29yZCBpcyBwcm9iYWJseSBnYXJibGVkLgorICogIEJpdCAyICAgUGFyaXR5IEVycm9yIChQRSkuIFRoZSBwYXJpdHkgYml0IHdhcyBpbmNvcnJlY3QgZm9yIHRoZSB3b3JkIHJlY2VpdmVkLgorICogIEJpdCAxICAgT3ZlcnJ1biBFcnJvciAoT0UpLiBBIG5ldyB3b3JkIHdhcyByZWNlaXZlZCBhbmQgdGhlcmUgd2FzIG5vIHJvb20gaW4KKyAqICAJICAgIHRoZSByZWNlaXZlIGJ1ZmZlci4gVGhlIG5ld2x5LWFycml2ZWQgd29yZCBpbiB0aGUgc2hpZnQgcmVnaXN0ZXIgaXMKKyAqICAJICAgIGRpc2NhcmRlZC4gT24gODI1MC8xNjQ1MCBVQVJUcywgdGhlIHdvcmQgaW4gdGhlIGhvbGRpbmcgcmVnaXN0ZXIgaXMKKyAqICAJICAgIGRpc2NhcmRlZCBhbmQgdGhlIG5ld2x5LSBhcnJpdmVkIHdvcmQgaXMgcHV0IGluIHRoZSBob2xkaW5nIHJlZ2lzdGVyLgorICogIEJpdCAwICAgRGF0YSBSZWFkeSAoRFIpLiBPbmUgb3IgbW9yZSB3b3JkcyBhcmUgaW4gdGhlIHJlY2VpdmUgRklGTyB0aGF0IHRoZQorICogIAkgICAgaG9zdCBtYXkgcmVhZC4gQSB3b3JkIG11c3QgYmUgY29tcGxldGVseSByZWNlaXZlZCBhbmQgbW92ZWQgZnJvbSB0aGUKKyAqICAJICAgIHNoaWZ0IHJlZ2lzdGVyIGludG8gdGhlIEZJRk8gKG9yIGhvbGRpbmcgcmVnaXN0ZXIgZm9yIDgyNTAvMTY0NTAKKyAqICAJICAgIGRlc2lnbnMpIGJlZm9yZSB0aGlzIGJpdCBpcyBzZXQuCisgKgorICogIFNuaWZmVVNCIG9ic2VydmF0aW9uczogdGhlIExTUiBpcyByZXR1cm5lZCBhcyBzZWNvbmQgYnl0ZSBvbiB0aGUgaW50ZXJydXB0LWluCisgKiAgZW5kcG9pbnQgMHg4MyB0byBzaWduYWwgZXJyb3IgY29uZGl0aW9ucy4gU3VjaCBlcnJvcnMgaGF2ZSBiZWVuIHNlZW4gd2l0aAorICogIG1pbmljb20vem1vZGVtIHRyYW5zZmVycyAoQ1JDIGVycm9ycykuCisgKgorICoKKyAqIFVua25vd24gIzEKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgIEJtUmVxdWVzdFR5cGU6ICAweDQwICgwMTAwIDAwMDBCKQorICogICBiUmVxdWVzdDogICAgICAgMHgwYgorICogICB3VmFsdWU6ICAgICAgICAgMHgwMDAwCisgKiAgIHdJbmRleDogICAgICAgICAweDAwMDAKKyAqICAgd0xlbmd0aDogICAgICAgIDB4MDAwMQorICogICBEYXRhOiAgICAgICAgICAgMHgwMAorICoKKyAqICAgU25pZmZVU0Igb2JzZXJ2YXRpb25zIChOb3YgMjAwMyk6IFdpdGggdGhlIE1DVC1zdXBwbGllZCBXaW5kb3dzOTggZHJpdmVyCisgKiAgIChVMlNQT1JULlZYRCwgIkZpbGUgdmVyc2lvbjogMS4yMVAuMDEwNCBmb3IgV2luOTgvTWUiKSwgdGhpcyByZXF1ZXN0CisgKiAgIG9jY3VycyBpbW1lZGlhdGVseSBhZnRlciBhICJCYXVkIHJhdGUgKGRpdmlzb3IpIiBtZXNzYWdlLiAgSXQgd2FzIG5vdAorICogICBvYnNlcnZlZCBhdCBhbnkgb3RoZXIgdGltZS4gIEl0IGlzIHVuY2xlYXIgd2hhdCBwdXJwb3NlIHRoaXMgbWVzc2FnZQorICogICBzZXJ2ZXMuCisgKgorICoKKyAqIFVua25vd24gIzIKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgIEJtUmVxdWVzdFR5cGU6ICAweDQwICgwMTAwIDAwMDBCKQorICogICBiUmVxdWVzdDogICAgICAgMHgwYworICogICB3VmFsdWU6ICAgICAgICAgMHgwMDAwCisgKiAgIHdJbmRleDogICAgICAgICAweDAwMDAKKyAqICAgd0xlbmd0aDogICAgICAgIDB4MDAwMQorICogICBEYXRhOiAgICAgICAgICAgMHgwMAorICoKKyAqICAgU25pZmZVU0Igb2JzZXJ2YXRpb25zIChOb3YgMjAwMyk6IFdpdGggdGhlIE1DVC1zdXBwbGllZCBXaW5kb3dzOTggZHJpdmVyCisgKiAgIChVMlNQT1JULlZYRCwgIkZpbGUgdmVyc2lvbjogMS4yMVAuMDEwNCBmb3IgV2luOTgvTWUiKSwgdGhpcyByZXF1ZXN0CisgKiAgIG9jY3VycyBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ1Vua25vd24gIzEnIG1lc3NhZ2UgKHNlZSBhYm92ZSkuICBJdCB3YXMKKyAqICAgbm90IG9ic2VydmVkIGF0IGFueSBvdGhlciB0aW1lLiAgSXQgaXMgdW5jbGVhciB3aGF0IG90aGVyIHB1cnBvc2UgKGlmCisgKiAgIGFueSkgdGhpcyBtZXNzYWdlIG1pZ2h0IHNlcnZlLCBidXQgd2l0aG91dCBpdCwgdGhlIFVTQi9SUy0yMzIgYWRhcHRlcgorICogICB3aWxsIG5vdCB3cml0ZSB0byBSUy0yMzIgZGV2aWNlcyB3aGljaCBkbyBub3QgYXNzZXJ0IHRoZSAnQ1RTJyBzaWduYWwuCisgKgorICoKKyAqIEZsb3cgY29udHJvbAorICogLS0tLS0tLS0tLS0tCisgKgorICogIFNuaWZmVVNCIG9ic2VydmF0aW9uczogbm8gZmxvdyBjb250cm9sIHNwZWNpZmljIHJlcXVlc3RzIGhhdmUgYmVlbiByZWFsaXplZAorICogIGFwYXJ0IGZyb20gRFRSL1JUUyBzZXR0aW5ncy4gQm90aCBzaWduYWxzIGFyZSBkcm9wcGVkIGZvciBubyBmbG93IGNvbnRyb2wKKyAqICBidXQgYXNzZXJ0ZWQgZm9yIGhhcmR3YXJlIG9yIHNvZnR3YXJlIGZsb3cgY29udHJvbC4KKyAqCisgKgorICogRW5kcG9pbnQgdXNhZ2UKKyAqIC0tLS0tLS0tLS0tLS0tCisgKgorICogIFNuaWZmVVNCIG9ic2VydmF0aW9uczogdGhlIGJ1bGstb3V0IGVuZHBvaW50IDB4MSBhbmQgaW50ZXJydXB0LWluIGVuZHBvaW50CisgKiAgMHg4MSBpcyB1c2VkIHRvIHRyYW5zbWl0IGFuZCByZWNlaXZlIGNoYXJhY3RlcnMuIFRoZSBzZWNvbmQgaW50ZXJydXB0LWluIAorICogIGVuZHBvaW50IDB4ODMgc2lnbmFscyBleGNlcHRpb25hbCBjb25kaXRpb25zIGxpa2UgbW9kZW0gbGluZSBjaGFuZ2VzIGFuZCAKKyAqICBlcnJvcnMuIFRoZSBmaXJzdCBieXRlIHJldHVybmVkIGlzIHRoZSBNU1IgYW5kIHRoZSBzZWNvbmQgYnl0ZSB0aGUgTFNSLgorICoKKyAqCisgKiBPdGhlciBvYnNlcnZhdGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqICBRdWV1ZWQgYnVsayB0cmFuc2ZlcnMgbGlrZSB1c2VkIGluIHZpc29yLmMgZGlkIG5vdCB3b3JrLiAKKyAqICAKKyAqCisgKiBQcm9wZXJ0aWVzIG9mIHRoZSBVU0IgZGV2aWNlIHVzZWQgKGFzIGZvdW5kIGluIC92YXIvbG9nL21lc3NhZ2VzKQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgTWFudWZhY3R1cmVyOiBNQ1QgQ29ycG9yYXRpb24uCisgKiAgUHJvZHVjdDogVVNCLTIzMiBJbnRlcmZhY3QgQ29udHJvbGxlcgorICogIFNlcmlhbE51bWJlcjogVTJTMjIwNTAKKyAqCisgKiAgICBMZW5ndGggICAgICAgICAgICAgID0gMTgKKyAqICAgIERlc2NyaXB0b3JUeXBlICAgICAgPSAwMQorICogICAgVVNCIHZlcnNpb24gICAgICAgICA9IDEuMDAKKyAqICAgIFZlbmRvcjpQcm9kdWN0ICAgICAgPSAwNzExOjAyMTAKKyAqICAgIE1heFBhY2tldFNpemUwICAgICAgPSA4CisgKiAgICBOdW1Db25maWd1cmF0aW9ucyAgID0gMQorICogICAgRGV2aWNlIHZlcnNpb24gICAgICA9IDEuMDIKKyAqICAgIERldmljZSBDbGFzczpTdWJDbGFzczpQcm90b2NvbCA9IDAwOjAwOjAwCisgKiAgICAgIFBlci1pbnRlcmZhY2UgY2xhc3NlcworICogIENvbmZpZ3VyYXRpb246CisgKiAgICBiTGVuZ3RoICAgICAgICAgICAgID0gICAgOQorICogICAgYkRlc2NyaXB0b3JUeXBlICAgICA9ICAgMDIKKyAqICAgIHdUb3RhbExlbmd0aCAgICAgICAgPSAwMDI3CisgKiAgICBiTnVtSW50ZXJmYWNlcyAgICAgID0gICAwMQorICogICAgYkNvbmZpZ3VyYXRpb25WYWx1ZSA9ICAgMDEKKyAqICAgIGlDb25maWd1cmF0aW9uICAgICAgPSAgIDAwCisgKiAgICBibUF0dHJpYnV0ZXMgICAgICAgID0gICBjMAorICogICAgTWF4UG93ZXIgICAgICAgICAgICA9ICAxMDBtQQorICoKKyAqICAgIEludGVyZmFjZTogMAorICogICAgQWx0ZXJuYXRlIFNldHRpbmc6ICAwCisgKiAgICAgIGJMZW5ndGggICAgICAgICAgICAgPSAgICA5CisgKiAgICAgIGJEZXNjcmlwdG9yVHlwZSAgICAgPSAgIDA0CisgKiAgICAgIGJJbnRlcmZhY2VOdW1iZXIgICAgPSAgIDAwCisgKiAgICAgIGJBbHRlcm5hdGVTZXR0aW5nICAgPSAgIDAwCisgKiAgICAgIGJOdW1FbmRwb2ludHMgICAgICAgPSAgIDAzCisgKiAgICAgIGJJbnRlcmZhY2UgQ2xhc3M6U3ViQ2xhc3M6UHJvdG9jb2wgPSAgIDAwOjAwOjAwCisgKiAgICAgIGlJbnRlcmZhY2UgICAgICAgICAgPSAgIDAwCisgKiAgICAgIEVuZHBvaW50OgorICogCSAgYkxlbmd0aCAgICAgICAgICAgICA9ICAgIDcKKyAqIAkgIGJEZXNjcmlwdG9yVHlwZSAgICAgPSAgIDA1CisgKiAJICBiRW5kcG9pbnRBZGRyZXNzICAgID0gICA4MSAoaW4pCisgKiAJICBibUF0dHJpYnV0ZXMgICAgICAgID0gICAwMyAoSW50ZXJydXB0KQorICogCSAgd01heFBhY2tldFNpemUgICAgICA9IDAwNDAKKyAqIAkgIGJJbnRlcnZhbCAgICAgICAgICAgPSAgIDAyCisgKiAgICAgIEVuZHBvaW50OgorICogCSAgYkxlbmd0aCAgICAgICAgICAgICA9ICAgIDcKKyAqIAkgIGJEZXNjcmlwdG9yVHlwZSAgICAgPSAgIDA1CisgKiAJICBiRW5kcG9pbnRBZGRyZXNzICAgID0gICAwMSAob3V0KQorICogCSAgYm1BdHRyaWJ1dGVzICAgICAgICA9ICAgMDIgKEJ1bGspCisgKiAJICB3TWF4UGFja2V0U2l6ZSAgICAgID0gMDA0MAorICogCSAgYkludGVydmFsICAgICAgICAgICA9ICAgMDAKKyAqICAgICAgRW5kcG9pbnQ6CisgKiAJICBiTGVuZ3RoICAgICAgICAgICAgID0gICAgNworICogCSAgYkRlc2NyaXB0b3JUeXBlICAgICA9ICAgMDUKKyAqIAkgIGJFbmRwb2ludEFkZHJlc3MgICAgPSAgIDgzIChpbikKKyAqIAkgIGJtQXR0cmlidXRlcyAgICAgICAgPSAgIDAzIChJbnRlcnJ1cHQpCisgKiAJICB3TWF4UGFja2V0U2l6ZSAgICAgID0gMDAwMgorICogCSAgYkludGVydmFsICAgICAgICAgICA9ICAgMDIKKyAqCisgKgorICogSGFyZHdhcmUgZGV0YWlscyAoYWRkZWQgYnkgTWFydGluIEhhbWlsdG9uLCAyMDAxLzEyLzA2KQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGlzIGluZm8gd2FzIGdsZWFuZWQgZnJvbSBvcGVuaW5nIGEgQmVsa2luIEY1VTEwOSBEQjkgVVNCIHNlcmlhbAorICogYWRhcHRvciwgd2hpY2ggdHVybnMgb3V0IHRvIHNpbXBseSBiZSBhIHJlLWJhZGdlZCBVMjMyLVA5LiAgV2UKKyAqIGtub3cgdGhpcyBiZWNhdXNlIHRoZXJlIGlzIGEgc3RpY2t5IGxhYmVsIG9uIHRoZSBjaXJjdWl0IGJvYXJkCisgKiB3aGljaCBzYXlzICJVMjMyLVA5IiA7LSkKKyAqIAorICogVGhlIGNpcmN1aXQgYm9hcmQgaW5zaWRlIHRoZSBhZGFwdG9yIGNvbnRhaW5zIGEgUGhpbGlwcyBQRElVU0JEMTIKKyAqIFVTQiBlbmRwb2ludCBjaGlwIGFuZCBhIFBoaWxsaXBzIFA4N0M1MlVCQUEgbWljcm9jb250cm9sbGVyIHdpdGgKKyAqIGVtYmVkZGVkIFVBUlQuICBFeGhhdXN0aXZlIGRvY3VtZW50YXRpb24gZm9yIHRoZXNlIGlzIGF2YWlsYWJsZSBhdDoKKyAqCisgKiAgIGh0dHA6Ly93d3cuc2VtaWNvbmR1Y3RvcnMucGhpbGlwcy5jb20vcGlwL3A4N2M1MnViYWEKKyAqICAgaHR0cDovL3d3dy5zZW1pY29uZHVjdG9ycy5waGlsaXBzLmNvbS9waXAvcGRpdXNiZDEyCisgKgorICogVGhhbmtzIHRvIEp1bGlhbiBIaWdoZmllbGQgZm9yIHRoZSBwb2ludGVyIHRvIHRoZSBQaGlsaXBzIGRhdGFiYXNlLgorICogCisgKi8KKworI2VuZGlmIC8qIF9fTElOVVhfVVNCX1NFUklBTF9NQ1RfVTIzMl9IICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExY2JhNGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCkBAIC0wLDAgKzEsMzYyIEBACisvKgorICogVVNCIFp5WEVMIG9tbmkubmV0IExDRCBQTFVTIGRyaXZlcgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCisgKgorICogUGxlYXNlIHJlcG9ydCBib3RoIHN1Y2Nlc3NlcyBhbmQgdHJvdWJsZXMgdG8gdGhlIGF1dGhvciBhdCBvbW5pbmV0QGtyb2FoLmNvbQorICogCisgKiAoMDUvMzAvMjAwMSkgZ2toCisgKglzd2l0Y2hlZCBmcm9tIHVzaW5nIHNwaW5sb2NrIHRvIGEgc2VtYXBob3JlLCB3aGljaCBmaXhlcyBsb3RzIG9mIHByb2JsZW1zLgorICoKKyAqICgwNC8wOC8yMDAxKSBnYgorICoJSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KKyAqCisgKiAoMTEvMDEvMjAwMCkgQWRhbSBKLiBSaWNodGVyCisgKgl1c2JfZGV2aWNlX2lkIHRhYmxlIHN1cHBvcnQKKyAqIAorICogKDEwLzA1LzIwMDApIGdraAorICoJRml4ZWQgYnVnIHdpdGggdXJiLT5kZXYgbm90IGJlaW5nIHNldCBwcm9wZXJseSwgbm93IHRoYXQgdGhlIHVzYgorICoJY29yZSBuZWVkcyBpdC4KKyAqIAorICogKDA4LzI4LzIwMDApIGdraAorICoJQWRkZWQgbG9ja3MgZm9yIFNNUCBzYWZlbmVzcy4KKyAqCUZpeGVkIE1PRF9JTkMgYW5kIE1PRF9ERUMgbG9naWMgYW5kIHRoZSBhYmlsaXR5IHRvIG9wZW4gYSBwb3J0IG1vcmUgCisgKgl0aGFuIG9uY2UuCisgKglGaXhlZCBwb3RlbnRpYWwgcmFjZSBpbiBvbW5pbmV0X3dyaXRlX2J1bGtfY2FsbGJhY2sKKyAqCisgKiAoMDcvMTkvMjAwMCkgZ2toCisgKglBZGRlZCBtb2R1bGVfaW5pdCBhbmQgbW9kdWxlX2V4aXQgZnVuY3Rpb25zIHRvIGhhbmRsZSB0aGUgZmFjdCB0aGF0IHRoaXMKKyAqCWRyaXZlciBpcyBhIGxvYWRhYmxlIG1vZHVsZSBub3cuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKworc3RhdGljIGludCBkZWJ1ZzsKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuMSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiQWxlc3NhbmRybyBadW1tbyIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBaeVhFTCBvbW5pLm5ldCBMQ0QgUExVUyBEcml2ZXIiCisKKyNkZWZpbmUgWllYRUxfVkVORE9SX0lECQkweDA1ODYKKyNkZWZpbmUgWllYRUxfT01OSU5FVF9JRAkweDEwMDAKKyNkZWZpbmUgQlRfSUdOSVRJT05QUk9fSUQJMHgyMDAwICAvKiBUaGlzIG9uZSBzZWVtcyB0byBiZSBhIHJlLWJyYW5kZWQgWnlYRUwgZGV2aWNlICovCisKKy8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgIG9tbmluZXRfb3BlbgkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIG9tbmluZXRfY2xvc2UJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBvbW5pbmV0X3JlYWRfYnVsa19jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBvbW5pbmV0X3dyaXRlX2J1bGtfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIGludCAgb21uaW5ldF93cml0ZQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK3N0YXRpYyBpbnQgIG9tbmluZXRfd3JpdGVfcm9vbQkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgb21uaW5ldF9zaHV0ZG93bgkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKFpZWEVMX1ZFTkRPUl9JRCwgWllYRUxfT01OSU5FVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoWllYRUxfVkVORE9SX0lELCBCVF9JR05JVElPTlBST19JRCkgfSwKKwl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBvbW5pbmV0X2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkib21uaW5ldCIsCisJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZSwKK307CisKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIHp5eGVsX29tbmluZXRfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIlp5WEVMIC0gb21uaS5uZXQgbGNkIHBsdXMgdXNiIiwKKwkuc2hvcnRfbmFtZSA9CQkib21uaW5ldCIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luID0JMSwKKwkubnVtX2J1bGtfaW4gPQkJMSwKKwkubnVtX2J1bGtfb3V0ID0JCTIsCisJLm51bV9wb3J0cyA9CQkxLAorCS5vcGVuID0JCQlvbW5pbmV0X29wZW4sCisJLmNsb3NlID0JCW9tbmluZXRfY2xvc2UsCisJLndyaXRlID0JCW9tbmluZXRfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJb21uaW5ldF93cml0ZV9yb29tLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQlvbW5pbmV0X3JlYWRfYnVsa19jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjayA9CW9tbmluZXRfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkuc2h1dGRvd24gPQkJb21uaW5ldF9zaHV0ZG93biwKK307CisKKworLyogVGhlIHByb3RvY29sLgorICoKKyAqIFRoZSBvbW5pLm5ldCBhbHdheXMgZXhjaGFuZ2UgNjQgYnl0ZXMgb2YgZGF0YSB3aXRoIHRoZSBob3N0LiBUaGUgZmlyc3QKKyAqIGZvdXIgYnl0ZXMgYXJlIHRoZSBjb250cm9sIGhlYWRlciwgeW91IGNhbiBzZWUgaXQgaW4gdGhlIGFib3ZlIHN0cnVjdHVyZS4KKyAqCisgKiBvaF9zZXEgaXMgYSBzZXF1ZW5jZSBudW1iZXIuIERvbid0IGtub3cgaWYvaG93IGl0J3MgdXNlZC4KKyAqIG9oX2xlbiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIGJ5dGVzIGluIHRoZSBwYWNrZXQuCisgKiBvaF94eHggQml0LW1hcHBlZCwgcmVsYXRlZCB0byBoYW5kc2hha2luZyBhbmQgc3RhdHVzIGluZm8uCisgKglJIG5vcm1hbGx5IHNldCBpdCB0byAweDAzIGluIHRyYXNtaXR0ZWQgZnJhbWVzLgorICoJNzogQWN0aXZlIHdoZW4gdGhlIFRBIGlzIGluIGEgQ09OTkVDVGVkIHN0YXRlLgorICoJNjogdW5rbm93bgorICoJNTogaGFuZHNoYWtpbmcsIHVua25vd24KKyAqCTQ6IGhhbmRzaGFraW5nLCB1bmtub3duCisgKgkzOiB1bmtub3duLCB1c3VhbGx5IDAKKyAqCTI6IHVua25vd24sIHVzdWFsbHkgMAorICoJMTogaGFuZHNoYWtpbmcsIHVua25vd24sIHVzdWFsbHkgc2V0IHRvIDEgaW4gdHJhc21pdHRlZCBmcmFtZXMKKyAqCTA6IGhhbmRzaGFraW5nLCB1bmtub3duLCB1c3VhbGx5IHNldCB0byAxIGluIHRyYXNtaXR0ZWQgZnJhbWVzCisgKiBvaF9wYWQgUHJvYmFibHkgYSBwYWQgYnl0ZS4KKyAqCisgKiBBZnRlciB0aGUgaGVhZGVyIHlvdSB3aWxsIGZpbmQgZGF0YSBieXRlcyBpZiBvaF9sZW4gd2FzIGdyZWF0ZXIgdGhhbiB6ZXJvLgorICoKKyAqLworCitzdHJ1Y3Qgb21uaW5ldF9oZWFkZXIKK3sKKwlfX3U4CW9oX3NlcTsKKwlfX3U4CW9oX2xlbjsKKwlfX3U4CW9oX3h4eDsKKwlfX3U4CW9oX3BhZDsKK307CisKK3N0cnVjdCBvbW5pbmV0X2RhdGEKK3sKKwlfX3U4CW9kX291dHNlcTsJLy8gU2VxdWVuY2UgbnVtYmVyIGZvciBidWxrX291dCBVUkJzCit9OworCitzdGF0aWMgaW50IG9tbmluZXRfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWwJKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CSp3cG9ydDsKKwlzdHJ1Y3Qgb21uaW5ldF9kYXRhCSpvZDsKKwlpbnQJCQlyZXN1bHQgPSAwOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlvZCA9IGttYWxsb2MoIHNpemVvZihzdHJ1Y3Qgb21uaW5ldF9kYXRhKSwgR0ZQX0tFUk5FTCApOworCWlmKCAhb2QgKSB7CisJCWVycigiJXMtIGttYWxsb2MoJVpkKSBmYWlsZWQuIiwgX19GVU5DVElPTl9fLCBzaXplb2Yoc3RydWN0IG9tbmluZXRfZGF0YSkpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgb2QpOworCXdwb3J0ID0gc2VyaWFsLT5wb3J0WzFdOworCXdwb3J0LT50dHkgPSBwb3J0LT50dHk7CisKKwkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLworCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwgCisJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkgICAgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJICAgICAgb21uaW5ldF9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVzdWx0KQorCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgb21uaW5ldF9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsIAkqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgCSp3cG9ydDsKKwlzdHJ1Y3Qgb21uaW5ldF9kYXRhIAkqb2Q7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXdwb3J0ID0gc2VyaWFsLT5wb3J0WzFdOworCXVzYl9raWxsX3VyYih3cG9ydC0+d3JpdGVfdXJiKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworCisJb2QgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaWYgKG9kKQorCQlrZnJlZShvZCk7Cit9CisKKworI2RlZmluZSBPTU5JTkVUX0RBVEFPRkZTRVQJMHgwNAorI2RlZmluZSBPTU5JTkVUX0hFQURFUkxFTglzaXplb2Yoc3RydWN0IG9tbmluZXRfaGVhZGVyKQorI2RlZmluZSBPTU5JTkVUX0JVTEtPVVRTSVpFIAkoNjQgLSBPTU5JTkVUX0hFQURFUkxFTikKKworc3RhdGljIHZvaWQgb21uaW5ldF9yZWFkX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAJKnBvcnQgCT0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAJCSpkYXRhIAk9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCBvbW5pbmV0X2hlYWRlciAJKmhlYWRlciA9IChzdHJ1Y3Qgb21uaW5ldF9oZWFkZXIgKikgJmRhdGFbMF07CisKKwlpbnQgaTsKKwlpbnQgcmVzdWx0OworCisvLwlkYmcoIm9tbmluZXRfcmVhZF9idWxrX2NhbGxiYWNrIik7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCWlmICgoZGVidWcpICYmIChoZWFkZXItPm9oX3h4eCAhPSAweDMwKSkgeworCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCQlwcmludGsgKEtFUk5fREVCVUcgX19GSUxFX18gIjogb21uaW5ldF9yZWFkICVkOiAiLCBoZWFkZXItPm9oX2xlbik7CisJCQlmb3IgKGkgPSAwOyBpIDwgKGhlYWRlci0+b2hfbGVuICsgT01OSU5FVF9IRUFERVJMRU4pOyBpKyspIHsKKwkJCQlwcmludGsgKCIlLjJ4ICIsIGRhdGFbaV0pOworCQkJfQorCQkJcHJpbnRrICgiXG4iKTsKKwkJfQorCX0KKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggJiYgaGVhZGVyLT5vaF9sZW4pIHsKKwkJZm9yIChpID0gMDsgaSA8IGhlYWRlci0+b2hfbGVuOyBpKyspIHsKKwkJCSB0dHlfaW5zZXJ0X2ZsaXBfY2hhcihwb3J0LT50dHksIGRhdGFbT01OSU5FVF9EQVRBT0ZGU0VUICsgaV0sIDApOworCSAgCX0KKwkgIAl0dHlfZmxpcF9idWZmZXJfcHVzaChwb3J0LT50dHkpOworCX0KKworCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCAgKi8KKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LCAKKwkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCSAgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCSAgICAgIG9tbmluZXRfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpCisJCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKworCXJldHVybjsKK30KKworc3RhdGljIGludCBvbW5pbmV0X3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAJKnNlcmlhbAk9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0IAkqd3BvcnQJPSBzZXJpYWwtPnBvcnRbMV07CisKKwlzdHJ1Y3Qgb21uaW5ldF9kYXRhIAkqb2QgCT0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCBvbW5pbmV0X2hlYWRlcgkqaGVhZGVyID0gKHN0cnVjdCBvbW5pbmV0X2hlYWRlciAqKSB3cG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwlpbnQJCQlyZXN1bHQ7CisKKy8vCWRiZygib21uaW5ldF93cml0ZSBwb3J0ICVkIiwgcG9ydC0+bnVtYmVyKTsKKworCWlmIChjb3VudCA9PSAwKSB7CisJCWRiZygiJXMgLSB3cml0ZSByZXF1ZXN0IG9mIDAgYnl0ZXMiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gKDApOworCX0KKwlpZiAod3BvcnQtPndyaXRlX3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQlkYmcoIiVzIC0gYWxyZWFkeSB3cml0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwljb3VudCA9IChjb3VudCA+IE9NTklORVRfQlVMS09VVFNJWkUpID8gT01OSU5FVF9CVUxLT1VUU0laRSA6IGNvdW50OworCisJbWVtY3B5ICh3cG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIgKyBPTU5JTkVUX0RBVEFPRkZTRVQsIGJ1ZiwgY291bnQpOworCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGNvdW50LCB3cG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCisJaGVhZGVyLT5vaF9zZXEgCT0gb2QtPm9kX291dHNlcSsrOworCWhlYWRlci0+b2hfbGVuIAk9IGNvdW50OworCWhlYWRlci0+b2hfeHh4ICA9IDB4MDM7CisJaGVhZGVyLT5vaF9wYWQgCT0gMHgwMDsKKworCS8qIHNlbmQgdGhlIGRhdGEgb3V0IHRoZSBidWxrIHBvcnQsIGFsd2F5cyA2NCBieXRlcyAqLworCXdwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSA2NDsKKworCXdwb3J0LT53cml0ZV91cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHdwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpCisJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCWVsc2UKKwkJcmVzdWx0ID0gY291bnQ7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyBpbnQgb21uaW5ldF93cml0ZV9yb29tIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsIAkqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgCSp3cG9ydCAJPSBzZXJpYWwtPnBvcnRbMV07CisKKwlpbnQgcm9vbSA9IDA7IC8vIERlZmF1bHQ6IG5vIHJvb20KKworCWlmICh3cG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKQorCQlyb29tID0gd3BvcnQtPmJ1bGtfb3V0X3NpemUgLSBPTU5JTkVUX0hFQURFUkxFTjsKKworLy8JZGJnKCJvbW5pbmV0X3dyaXRlX3Jvb20gcmV0dXJucyAlZCIsIHJvb20pOworCisJcmV0dXJuIChyb29tKTsKK30KKworc3RhdGljIHZvaWQgb21uaW5ldF93cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworLyoJc3RydWN0IG9tbmluZXRfaGVhZGVyCSpoZWFkZXIgPSAoc3RydWN0IG9tbmluZXRfaGVhZGVyICAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsgKi8KKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0IAkqcG9ydCAgID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCisvLwlkYmcoIm9tbmluZXRfd3JpdGVfYnVsa19jYWxsYmFjaywgcG9ydCAlMHhcbiIsIHBvcnQpOworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7CisKKy8vCWRiZygib21uaW5ldF93cml0ZV9idWxrX2NhbGxiYWNrLCB0dHkgJTB4XG4iLCB0dHkpOworfQorCisKK3N0YXRpYyB2b2lkIG9tbmluZXRfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworfQorCisKK3N0YXRpYyBpbnQgX19pbml0IG9tbmluZXRfaW5pdCAodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJnp5eGVsX29tbmluZXRfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmb21uaW5ldF9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKKwlpbmZvKERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyk7CisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigmenl4ZWxfb21uaW5ldF9kZXZpY2UpOworZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgb21uaW5ldF9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgmb21uaW5ldF9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJnp5eGVsX29tbmluZXRfZGV2aWNlKTsKK30KKworCittb2R1bGVfaW5pdChvbW5pbmV0X2luaXQpOworbW9kdWxlX2V4aXQob21uaW5ldF9leGl0KTsKKworTU9EVUxFX0FVVEhPUiggRFJJVkVSX0FVVEhPUiApOworTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNjhkMmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKQEAgLTAsMCArMSwxMjAwIEBACisvKgorICogUHJvbGlmaWMgUEwyMzAzIFVTQiB0byBzZXJpYWwgYWRhcHRvciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAzIElCTSBDb3JwLgorICoKKyAqIE9yaWdpbmFsIGRyaXZlciBmb3IgMi4yLnggYnkgYW5vbnltb3VzCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi91c2IvdXNiLXNlcmlhbC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhpcyBkcml2ZXIKKyAqCisgKiAyMDAyX01hcl8yNiBna2gKKyAqCWFsbG93ZWQgZHJpdmVyIHRvIHdvcmsgcHJvcGVybHkgaWYgdGhlcmUgaXMgbm8gdHR5IGFzc2lnbmVkIHRvIGEgcG9ydAorICoJKHRoaXMgaGFwcGVucyBmb3Igc2VyaWFsIGNvbnNvbGUgZGV2aWNlcy4pCisgKgorICogMjAwMV9PY3RfMDYgZ2toCisgKglBZGRlZCBSVFMgYW5kIERUUiBsaW5lIGNvbnRyb2wuICBUaGFua3MgdG8gam9lQGJuZGxnLmRlIGZvciBwYXJ0cyBvZiBpdC4KKyAqCisgKiAyMDAxX1NlcF8xOSBna2gKKyAqCUFkZGVkIGJyZWFrIHN1cHBvcnQuCisgKgorICogMjAwMV9BdWdfMzAgZ2toCisgKglmaXhlZCBvb3BzIGluIHdyaXRlX2J1bGtfY2FsbGJhY2suCisgKgorICogMjAwMV9BdWdfMjggZ2toCisgKglyZXdvcmtlZCBidWZmZXIgbG9naWMgdG8gYmUgbGlrZSBvdGhlciB1c2Itc2VyaWFsIGRyaXZlcnMuICBIb3BlZnVsbHkKKyAqCXJlbW92aW5nIHNvbWUgcmVwb3J0ZWQgcHJvYmxlbXMuCisgKgorICogMjAwMV9KdW5fMDYgZ2toCisgKglmaW5pc2hlZCBwb3J0aW5nIHRvIDIuNCBmb3JtYXQuCisgKiAKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKyNpbmNsdWRlICJwbDIzMDMuaCIKKworLyoKKyAqIFZlcnNpb24gSW5mb3JtYXRpb24KKyAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMTIiCisjZGVmaW5lIERSSVZFUl9ERVNDICJQcm9saWZpYyBQTDIzMDMgVVNCIHRvIHNlcmlhbCBhZGFwdG9yIGRyaXZlciIKKworc3RhdGljIGludCBkZWJ1ZzsKKworI2RlZmluZSBQTDIzMDNfQ0xPU0lOR19XQUlUCSgzMCpIWikKKworI2RlZmluZSBQTDIzMDNfQlVGX1NJWkUJCTEwMjQKKyNkZWZpbmUgUEwyMzAzX1RNUF9CVUZfU0laRQkxMDI0CisKK3N0YXRpYyBERUNMQVJFX01VVEVYKHBsMjMwM190bXBfYnVmX3NlbSk7CisKK3N0cnVjdCBwbDIzMDNfYnVmIHsKKwl1bnNpZ25lZCBpbnQJYnVmX3NpemU7CisJY2hhcgkJKmJ1Zl9idWY7CisJY2hhcgkJKmJ1Zl9nZXQ7CisJY2hhcgkJKmJ1Zl9wdXQ7Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKFBMMjMwM19WRU5ET1JfSUQsIFBMMjMwM19QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShQTDIzMDNfVkVORE9SX0lELCBQTDIzMDNfUFJPRFVDVF9JRF9SU0FRMikgfSwKKwl7IFVTQl9ERVZJQ0UoUEwyMzAzX1ZFTkRPUl9JRCwgUEwyMzAzX1BST0RVQ1RfSURfUlNBUTMpIH0sCisJeyBVU0JfREVWSUNFKFBMMjMwM19WRU5ET1JfSUQsIFBMMjMwM19QUk9EVUNUX0lEX1BIQVJPUykgfSwKKwl7IFVTQl9ERVZJQ0UoSU9EQVRBX1ZFTkRPUl9JRCwgSU9EQVRBX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKEFURU5fVkVORE9SX0lELCBBVEVOX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKEFURU5fVkVORE9SX0lEMiwgQVRFTl9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShFTENPTV9WRU5ET1JfSUQsIEVMQ09NX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKEVMQ09NX1ZFTkRPUl9JRCwgRUxDT01fUFJPRFVDVF9JRF9VQ1NHVCkgfSwKKwl7IFVTQl9ERVZJQ0UoSVRFR05PX1ZFTkRPUl9JRCwgSVRFR05PX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKE1BNjIwX1ZFTkRPUl9JRCwgTUE2MjBfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoUkFUT0NfVkVORE9SX0lELCBSQVRPQ19QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShUUklQUF9WRU5ET1JfSUQsIFRSSVBQX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKFJBRElPU0hBQ0tfVkVORE9SX0lELCBSQURJT1NIQUNLX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKERDVTEwX1ZFTkRPUl9JRCwgRENVMTBfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0lURUNPTV9WRU5ET1JfSUQsIFNJVEVDT01fUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoQUxDQVRFTF9WRU5ET1JfSUQsIEFMQ0FURUxfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0FNU1VOR19WRU5ET1JfSUQsIFNBTVNVTkdfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0lFTUVOU19WRU5ET1JfSUQsIFNJRU1FTlNfUFJPRFVDVF9JRF9YNjUpIH0sCisJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwbDIzMDNfZHJpdmVyID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5uYW1lID0JCSJwbDIzMDMiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCit9OworCisjZGVmaW5lIFNFVF9MSU5FX1JFUVVFU1RfVFlQRQkJMHgyMQorI2RlZmluZSBTRVRfTElORV9SRVFVRVNUCQkweDIwCisKKyNkZWZpbmUgU0VUX0NPTlRST0xfUkVRVUVTVF9UWVBFCTB4MjEKKyNkZWZpbmUgU0VUX0NPTlRST0xfUkVRVUVTVAkJMHgyMgorI2RlZmluZSBDT05UUk9MX0RUUgkJCTB4MDEKKyNkZWZpbmUgQ09OVFJPTF9SVFMJCQkweDAyCisKKyNkZWZpbmUgQlJFQUtfUkVRVUVTVF9UWVBFCQkweDIxCisjZGVmaW5lIEJSRUFLX1JFUVVFU1QJCQkweDIzCQorI2RlZmluZSBCUkVBS19PTgkJCTB4ZmZmZgorI2RlZmluZSBCUkVBS19PRkYJCQkweDAwMDAKKworI2RlZmluZSBHRVRfTElORV9SRVFVRVNUX1RZUEUJCTB4YTEKKyNkZWZpbmUgR0VUX0xJTkVfUkVRVUVTVAkJMHgyMQorCisjZGVmaW5lIFZFTkRPUl9XUklURV9SRVFVRVNUX1RZUEUJMHg0MAorI2RlZmluZSBWRU5ET1JfV1JJVEVfUkVRVUVTVAkJMHgwMQorCisjZGVmaW5lIFZFTkRPUl9SRUFEX1JFUVVFU1RfVFlQRQkweGMwCisjZGVmaW5lIFZFTkRPUl9SRUFEX1JFUVVFU1QJCTB4MDEKKworI2RlZmluZSBVQVJUX1NUQVRFCQkJMHgwOAorI2RlZmluZSBVQVJUX1NUQVRFX1RSQU5TSUVOVF9NQVNLCTB4NzQKKyNkZWZpbmUgVUFSVF9EQ0QJCQkweDAxCisjZGVmaW5lIFVBUlRfRFNSCQkJMHgwMgorI2RlZmluZSBVQVJUX0JSRUFLX0VSUk9SCQkweDA0CisjZGVmaW5lIFVBUlRfUklORwkJCTB4MDgKKyNkZWZpbmUgVUFSVF9GUkFNRV9FUlJPUgkJMHgxMAorI2RlZmluZSBVQVJUX1BBUklUWV9FUlJPUgkJMHgyMAorI2RlZmluZSBVQVJUX09WRVJSVU5fRVJST1IJCTB4NDAKKyNkZWZpbmUgVUFSVF9DVFMJCQkweDgwCisKKy8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGEgUEwyMzAzIHNlcmlhbCBjb252ZXJ0ZXIgKi8KK3N0YXRpYyBpbnQgcGwyMzAzX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIHBsMjMwM19jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIHZvaWQgcGwyMzAzX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCXN0cnVjdCB0ZXJtaW9zICpvbGQpOworc3RhdGljIGludCBwbDIzMDNfaW9jdGwgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyB2b2lkIHBsMjMwM19yZWFkX2ludF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBwbDIzMDNfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIHBsMjMwM193cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyBpbnQgcGwyMzAzX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK3N0YXRpYyB2b2lkIHBsMjMwM19zZW5kIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgcGwyMzAzX3dyaXRlX3Jvb20oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50IHBsMjMwM19jaGFyc19pbl9idWZmZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBwbDIzMDNfYnJlYWtfY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsaW50IGJyZWFrX3N0YXRlKTsKK3N0YXRpYyBpbnQgcGwyMzAzX3Rpb2NtZ2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IHBsMjMwM190aW9jbXNldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKK3N0YXRpYyBpbnQgcGwyMzAzX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQgcGwyMzAzX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBzdHJ1Y3QgcGwyMzAzX2J1ZiAqcGwyMzAzX2J1Zl9hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSk7CitzdGF0aWMgdm9pZCBwbDIzMDNfYnVmX2ZyZWUoc3RydWN0IHBsMjMwM19idWYgKnBiKTsKK3N0YXRpYyB2b2lkIHBsMjMwM19idWZfY2xlYXIoc3RydWN0IHBsMjMwM19idWYgKnBiKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGwyMzAzX2J1Zl9kYXRhX2F2YWlsKHN0cnVjdCBwbDIzMDNfYnVmICpwYik7CitzdGF0aWMgdW5zaWduZWQgaW50IHBsMjMwM19idWZfc3BhY2VfYXZhaWwoc3RydWN0IHBsMjMwM19idWYgKnBiKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGwyMzAzX2J1Zl9wdXQoc3RydWN0IHBsMjMwM19idWYgKnBiLCBjb25zdCBjaGFyICpidWYsCisJdW5zaWduZWQgaW50IGNvdW50KTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGwyMzAzX2J1Zl9nZXQoc3RydWN0IHBsMjMwM19idWYgKnBiLCBjaGFyICpidWYsCisJdW5zaWduZWQgaW50IGNvdW50KTsKKworCisvKiBBbGwgb2YgdGhlIGRldmljZSBpbmZvIG5lZWRlZCBmb3IgdGhlIFBMMjMwMyBTSU8gc2VyaWFsIGNvbnZlcnRlciAqLworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIHBsMjMwM19kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiUEwtMjMwMyIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4gPQkJMSwKKwkubnVtX2J1bGtfb3V0ID0JCTEsCisJLm51bV9wb3J0cyA9CQkxLAorCS5vcGVuID0JCQlwbDIzMDNfb3BlbiwKKwkuY2xvc2UgPQkJcGwyMzAzX2Nsb3NlLAorCS53cml0ZSA9CQlwbDIzMDNfd3JpdGUsCisJLmlvY3RsID0JCXBsMjMwM19pb2N0bCwKKwkuYnJlYWtfY3RsID0JCXBsMjMwM19icmVha19jdGwsCisJLnNldF90ZXJtaW9zID0JCXBsMjMwM19zZXRfdGVybWlvcywKKwkudGlvY21nZXQgPQkJcGwyMzAzX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9CQlwbDIzMDNfdGlvY21zZXQsCisJLnJlYWRfYnVsa19jYWxsYmFjayA9CXBsMjMwM19yZWFkX2J1bGtfY2FsbGJhY2ssCisJLnJlYWRfaW50X2NhbGxiYWNrID0JcGwyMzAzX3JlYWRfaW50X2NhbGxiYWNrLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0JcGwyMzAzX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJLndyaXRlX3Jvb20gPQkJcGwyMzAzX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlciA9CXBsMjMwM19jaGFyc19pbl9idWZmZXIsCisJLmF0dGFjaCA9CQlwbDIzMDNfc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkJcGwyMzAzX3NodXRkb3duLAorfTsKKworZW51bSBwbDIzMDNfdHlwZSB7CisJdHlwZV8wLAkJLyogZG9uJ3Qga25vdyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR5cGUgMCBhbmQgKi8KKwl0eXBlXzEsCQkvKiB0eXBlIDEsIHVudGlsIHNvbWVvbmUgZnJvbSBwcm9saWZpYyB0ZWxscyB1cy4uLiAqLworCUhYLAkJLyogSFggdmVyc2lvbiBvZiB0aGUgcGwyMzAzIGNoaXAgKi8KK307CisKK3N0cnVjdCBwbDIzMDNfcHJpdmF0ZSB7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBwbDIzMDNfYnVmICpidWY7CisJaW50IHdyaXRlX3VyYl9pbl91c2U7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZGVsdGFfbXNyX3dhaXQ7CisJdTggbGluZV9jb250cm9sOworCXU4IGxpbmVfc3RhdHVzOworCXU4IHRlcm1pb3NfaW5pdGlhbGl6ZWQ7CisJZW51bSBwbDIzMDNfdHlwZSB0eXBlOworfTsKKworCitzdGF0aWMgaW50IHBsMjMwM19zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdjsKKwllbnVtIHBsMjMwM190eXBlIHR5cGUgPSB0eXBlXzA7CisJaW50IGk7CisKKwlpZiAoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzID09IDB4MDIpCisJCXR5cGUgPSB0eXBlXzA7CisJZWxzZSBpZiAoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuYk1heFBhY2tldFNpemUwID09IDB4NDApCisJCXR5cGUgPSBIWDsKKwllbHNlIGlmIChzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5iRGV2aWNlQ2xhc3MgPT0gMHgwMCkKKwkJdHlwZSA9IHR5cGVfMTsKKwllbHNlIGlmIChzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5iRGV2aWNlQ2xhc3MgPT0gMHhGRikKKwkJdHlwZSA9IHR5cGVfMTsKKwlkYmcoImRldmljZSB0eXBlOiAlZCIsIHR5cGUpOworCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJcHJpdiA9IGttYWxsb2MgKHNpemVvZiAoc3RydWN0IHBsMjMwM19wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcHJpdikKKwkJCWdvdG8gY2xlYW51cDsKKwkJbWVtc2V0IChwcml2LCAweDAwLCBzaXplb2YgKHN0cnVjdCBwbDIzMDNfcHJpdmF0ZSkpOworCQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJCXByaXYtPmJ1ZiA9IHBsMjMwM19idWZfYWxsb2MoUEwyMzAzX0JVRl9TSVpFKTsKKwkJaWYgKHByaXYtPmJ1ZiA9PSBOVUxMKSB7CisJCQlrZnJlZShwcml2KTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisJCXByaXYtPnR5cGUgPSB0eXBlOworCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldLCBwcml2KTsKKwl9CisJcmV0dXJuIDA7CisKK2NsZWFudXA6CisJZm9yICgtLWk7IGk+PTA7IC0taSkgeworCQlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSk7CisJCXBsMjMwM19idWZfZnJlZShwcml2LT5idWYpOworCQlrZnJlZShwcml2KTsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CisJfQorCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgaW50IHNldF9jb250cm9sX2xpbmVzIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1OCB2YWx1ZSkKK3sKKwlpbnQgcmV0dmFsOworCQorCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyAoZGV2LCB1c2Jfc25kY3RybHBpcGUgKGRldiwgMCksCisJCQkJICBTRVRfQ09OVFJPTF9SRVFVRVNULCBTRVRfQ09OVFJPTF9SRVFVRVNUX1RZUEUsCisJCQkJICB2YWx1ZSwgMCwgTlVMTCwgMCwgMTAwKTsKKwlkYmcoIiVzIC0gdmFsdWUgPSAlZCwgcmV0dmFsID0gJWQiLCBfX0ZVTkNUSU9OX18sIHZhbHVlLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgcGwyMzAzX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCwgJWQgYnl0ZXMiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY291bnQpOworCisJaWYgKCFjb3VudCkKKwkJcmV0dXJuIGNvdW50OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwljb3VudCA9IHBsMjMwM19idWZfcHV0KHByaXYtPmJ1ZiwgYnVmLCBjb3VudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcGwyMzAzX3NlbmQocG9ydCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyB2b2lkIHBsMjMwM19zZW5kKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJaW50IGNvdW50LCByZXN1bHQ7CisJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAocHJpdi0+d3JpdGVfdXJiX2luX3VzZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwljb3VudCA9IHBsMjMwM19idWZfZ2V0KHByaXYtPmJ1ZiwgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCXBvcnQtPmJ1bGtfb3V0X3NpemUpOworCisJaWYgKGNvdW50ID09IDApIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJcHJpdi0+d3JpdGVfdXJiX2luX3VzZSA9IDE7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgY291bnQsIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGNvdW50OworCXBvcnQtPndyaXRlX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIgKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJcHJpdi0+d3JpdGVfdXJiX2luX3VzZSA9IDA7CisJCS8vIFRPRE86IHJlc2NoZWR1bGUgcGwyMzAzX3NlbmQKKwl9CisKKwlzY2hlZHVsZV93b3JrKCZwb3J0LT53b3JrKTsKK30KKworc3RhdGljIGludCBwbDIzMDNfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgcm9vbSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlyb29tID0gcGwyMzAzX2J1Zl9zcGFjZV9hdmFpbChwcml2LT5idWYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19GVU5DVElPTl9fLCByb29tKTsKKwlyZXR1cm4gcm9vbTsKK30KKworc3RhdGljIGludCBwbDIzMDNfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCBjaGFycyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwljaGFycyA9IHBsMjMwM19idWZfZGF0YV9hdmFpbChwcml2LT5idWYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19GVU5DVElPTl9fLCBjaGFycyk7CisJcmV0dXJuIGNoYXJzOworfQorCitzdGF0aWMgdm9pZCBwbDIzMDNfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBjZmxhZzsKKwl1bnNpZ25lZCBjaGFyICpidWY7CisJaW50IGJhdWQ7CisJaW50IGk7CisJdTggY29udHJvbDsKKworCWRiZygiJXMgLSAgcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICgoIXBvcnQtPnR0eSkgfHwgKCFwb3J0LT50dHktPnRlcm1pb3MpKSB7CisJCWRiZygiJXMgLSBubyB0dHkgc3RydWN0dXJlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmICghcHJpdi0+dGVybWlvc19pbml0aWFsaXplZCkgeworCQkqKHBvcnQtPnR0eS0+dGVybWlvcykgPSB0dHlfc3RkX3Rlcm1pb3M7CisJCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwkJcHJpdi0+dGVybWlvc19pbml0aWFsaXplZCA9IDE7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWNmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCS8qIGNoZWNrIHRoYXQgdGhleSByZWFsbHkgd2FudCB1cyB0byBjaGFuZ2Ugc29tZXRoaW5nICovCisJaWYgKG9sZF90ZXJtaW9zKSB7CisJCWlmICgoY2ZsYWcgPT0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWcpICYmCisJCSAgICAoUkVMRVZBTlRfSUZMQUcocG9ydC0+dHR5LT50ZXJtaW9zLT5jX2lmbGFnKSA9PSBSRUxFVkFOVF9JRkxBRyhvbGRfdGVybWlvcy0+Y19pZmxhZykpKSB7CisJCSAgICBkYmcoIiVzIC0gbm90aGluZyB0byBjaGFuZ2UuLi4iLCBfX0ZVTkNUSU9OX18pOworCQkgICAgcmV0dXJuOworCQl9CisJfQorCisJYnVmID0ga21hbGxvYyAoNywgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5LlxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKwltZW1zZXQgKGJ1ZiwgMHgwMCwgMHgwNyk7CisJCisJaSA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZSAoc2VyaWFsLT5kZXYsIDApLAorCQkJICAgICBHRVRfTElORV9SRVFVRVNULCBHRVRfTElORV9SRVFVRVNUX1RZUEUsCisJCQkgICAgIDAsIDAsIGJ1ZiwgNywgMTAwKTsKKwlkYmcgKCIweGExOjB4MjE6MDowICAlZCAtICV4ICV4ICV4ICV4ICV4ICV4ICV4IiwgaSwKKwkgICAgIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSwgYnVmWzRdLCBidWZbNV0sIGJ1Zls2XSk7CisKKworCWlmIChjZmxhZyAmIENTSVpFKSB7CisJCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgeworCQkJY2FzZSBDUzU6CWJ1Zls2XSA9IDU7CWJyZWFrOworCQkJY2FzZSBDUzY6CWJ1Zls2XSA9IDY7CWJyZWFrOworCQkJY2FzZSBDUzc6CWJ1Zls2XSA9IDc7CWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCWNhc2UgQ1M4OglidWZbNl0gPSA4OwlicmVhazsKKwkJfQorCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gJWQiLCBfX0ZVTkNUSU9OX18sIGJ1Zls2XSk7CisJfQorCisJYmF1ZCA9IDA7CisJc3dpdGNoIChjZmxhZyAmIENCQVVEKSB7CisJCWNhc2UgQjA6CWJhdWQgPSAwOwlicmVhazsKKwkJY2FzZSBCNzU6CWJhdWQgPSA3NTsJYnJlYWs7CisJCWNhc2UgQjE1MDoJYmF1ZCA9IDE1MDsJYnJlYWs7CisJCWNhc2UgQjMwMDoJYmF1ZCA9IDMwMDsJYnJlYWs7CisJCWNhc2UgQjYwMDoJYmF1ZCA9IDYwMDsJYnJlYWs7CisJCWNhc2UgQjEyMDA6CWJhdWQgPSAxMjAwOwlicmVhazsKKwkJY2FzZSBCMTgwMDoJYmF1ZCA9IDE4MDA7CWJyZWFrOworCQljYXNlIEIyNDAwOgliYXVkID0gMjQwMDsJYnJlYWs7CisJCWNhc2UgQjQ4MDA6CWJhdWQgPSA0ODAwOwlicmVhazsKKwkJY2FzZSBCOTYwMDoJYmF1ZCA9IDk2MDA7CWJyZWFrOworCQljYXNlIEIxOTIwMDoJYmF1ZCA9IDE5MjAwOwlicmVhazsKKwkJY2FzZSBCMzg0MDA6CWJhdWQgPSAzODQwMDsJYnJlYWs7CisJCWNhc2UgQjU3NjAwOgliYXVkID0gNTc2MDA7CWJyZWFrOworCQljYXNlIEIxMTUyMDA6CWJhdWQgPSAxMTUyMDA7CWJyZWFrOworCQljYXNlIEIyMzA0MDA6CWJhdWQgPSAyMzA0MDA7CWJyZWFrOworCQljYXNlIEI0NjA4MDA6CWJhdWQgPSA0NjA4MDA7CWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAicGwyMzAzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBiYXVkcmF0ZSByZXF1ZXN0ZWQgKGZpeCBpdClcbiIpOworCQkJYnJlYWs7CisJfQorCWRiZygiJXMgLSBiYXVkID0gJWQiLCBfX0ZVTkNUSU9OX18sIGJhdWQpOworCWlmIChiYXVkKSB7CisJCWJ1ZlswXSA9IGJhdWQgJiAweGZmOworCQlidWZbMV0gPSAoYmF1ZCA+PiA4KSAmIDB4ZmY7CisJCWJ1ZlsyXSA9IChiYXVkID4+IDE2KSAmIDB4ZmY7CisJCWJ1ZlszXSA9IChiYXVkID4+IDI0KSAmIDB4ZmY7CisJfQorCisJLyogRm9yIHJlZmVyZW5jZSBidWZbNF09MCBpcyAxIHN0b3AgYml0cyAqLworCS8qIEZvciByZWZlcmVuY2UgYnVmWzRdPTEgaXMgMS41IHN0b3AgYml0cyAqLworCS8qIEZvciByZWZlcmVuY2UgYnVmWzRdPTIgaXMgMiBzdG9wIGJpdHMgKi8KKwlpZiAoY2ZsYWcgJiBDU1RPUEIpIHsKKwkJYnVmWzRdID0gMjsKKwkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDIiLCBfX0ZVTkNUSU9OX18pOworCX0gZWxzZSB7CisJCWJ1Zls0XSA9IDA7CisJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAxIiwgX19GVU5DVElPTl9fKTsKKwl9CisKKwlpZiAoY2ZsYWcgJiBQQVJFTkIpIHsKKwkJLyogRm9yIHJlZmVyZW5jZSBidWZbNV09MCBpcyBub25lIHBhcml0eSAqLworCQkvKiBGb3IgcmVmZXJlbmNlIGJ1Zls1XT0xIGlzIG9kZCBwYXJpdHkgKi8KKwkJLyogRm9yIHJlZmVyZW5jZSBidWZbNV09MiBpcyBldmVuIHBhcml0eSAqLworCQkvKiBGb3IgcmVmZXJlbmNlIGJ1Zls1XT0zIGlzIG1hcmsgcGFyaXR5ICovCisJCS8qIEZvciByZWZlcmVuY2UgYnVmWzVdPTQgaXMgc3BhY2UgcGFyaXR5ICovCisJCWlmIChjZmxhZyAmIFBBUk9ERCkgeworCQkJYnVmWzVdID0gMTsKKwkJCWRiZygiJXMgLSBwYXJpdHkgPSBvZGQiLCBfX0ZVTkNUSU9OX18pOworCQl9IGVsc2UgeworCQkJYnVmWzVdID0gMjsKKwkJCWRiZygiJXMgLSBwYXJpdHkgPSBldmVuIiwgX19GVU5DVElPTl9fKTsKKwkJfQorCX0gZWxzZSB7CisJCWJ1Zls1XSA9IDA7CisJCWRiZygiJXMgLSBwYXJpdHkgPSBub25lIiwgX19GVU5DVElPTl9fKTsKKwl9CisKKwlpID0gdXNiX2NvbnRyb2xfbXNnIChzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlIChzZXJpYWwtPmRldiwgMCksCisJCQkgICAgIFNFVF9MSU5FX1JFUVVFU1QsIFNFVF9MSU5FX1JFUVVFU1RfVFlQRSwgCisJCQkgICAgIDAsIDAsIGJ1ZiwgNywgMTAwKTsKKwlkYmcgKCIweDIxOjB4MjA6MDowICAlZCIsIGkpOworCisJLyogY2hhbmdlIGNvbnRyb2wgbGluZXMgaWYgd2UgYXJlIHN3aXRjaGluZyB0byBvciBmcm9tIEIwICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwljb250cm9sID0gcHJpdi0+bGluZV9jb250cm9sOworCWlmICgoY2ZsYWcgJiBDQkFVRCkgPT0gQjApCisJCXByaXYtPmxpbmVfY29udHJvbCAmPSB+KENPTlRST0xfRFRSIHwgQ09OVFJPTF9SVFMpOworCWVsc2UKKwkJcHJpdi0+bGluZV9jb250cm9sIHw9IChDT05UUk9MX0RUUiB8IENPTlRST0xfUlRTKTsKKwlpZiAoY29udHJvbCAhPSBwcml2LT5saW5lX2NvbnRyb2wpIHsKKwkJY29udHJvbCA9IHByaXYtPmxpbmVfY29udHJvbDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlzZXRfY29udHJvbF9saW5lcyhzZXJpYWwtPmRldiwgY29udHJvbCk7CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCX0KKwkKKwlidWZbMF0gPSBidWZbMV0gPSBidWZbMl0gPSBidWZbM10gPSBidWZbNF0gPSBidWZbNV0gPSBidWZbNl0gPSAwOworCisJaSA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZSAoc2VyaWFsLT5kZXYsIDApLAorCQkJICAgICBHRVRfTElORV9SRVFVRVNULCBHRVRfTElORV9SRVFVRVNUX1RZUEUsCisJCQkgICAgIDAsIDAsIGJ1ZiwgNywgMTAwKTsKKwlkYmcgKCIweGExOjB4MjE6MDowICAlZCAtICV4ICV4ICV4ICV4ICV4ICV4ICV4IiwgaSwKKwkgICAgIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSwgYnVmWzRdLCBidWZbNV0sIGJ1Zls2XSk7CisKKwlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CisJCV9fdTE2IGluZGV4OworCQlpZiAocHJpdi0+dHlwZSA9PSBIWCkKKwkJCWluZGV4ID0gMHg2MTsKKwkJZWxzZQorCQkJaW5kZXggPSAweDQxOworCQlpID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCAKKwkJCQkgICAgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCQkgICAgVkVORE9SX1dSSVRFX1JFUVVFU1QsCisJCQkJICAgIFZFTkRPUl9XUklURV9SRVFVRVNUX1RZUEUsCisJCQkJICAgIDB4MCwgaW5kZXgsIE5VTEwsIDAsIDEwMCk7CisJCWRiZyAoIjB4NDA6MHgxOjB4MDoweCV4ICAlZCIsIGluZGV4LCBpKTsKKwl9CisKKwlrZnJlZSAoYnVmKTsKK30KKworc3RhdGljIGludCBwbDIzMDNfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHRlcm1pb3MgdG1wX3Rlcm1pb3M7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgY2hhciAqYnVmOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwl1c2JfY2xlYXJfaGFsdChzZXJpYWwtPmRldiwgcG9ydC0+d3JpdGVfdXJiLT5waXBlKTsKKwl1c2JfY2xlYXJfaGFsdChzZXJpYWwtPmRldiwgcG9ydC0+cmVhZF91cmItPnBpcGUpOworCisJYnVmID0ga21hbGxvYygxMCwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1Zj09TlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKyNkZWZpbmUgRklTSChhLGIsYyxkKQkJCQkJCQkJXAorCXJlc3VsdD11c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwwKSwJXAorCQkJICAgICAgIGIsIGEsIGMsIGQsIGJ1ZiwgMSwgMTAwKTsJCQlcCisJZGJnKCIweCV4OjB4JXg6MHgleDoweCV4ICAlZCAtICV4IixhLGIsYyxkLHJlc3VsdCxidWZbMF0pOworCisjZGVmaW5lIFNPVVAoYSxiLGMsZCkJCQkJCQkJCVwKKwlyZXN1bHQ9dXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsMCksCVwKKwkJCSAgICAgICBiLCBhLCBjLCBkLCBOVUxMLCAwLCAxMDApOwkJCVwKKwlkYmcoIjB4JXg6MHgleDoweCV4OjB4JXggICVkIixhLGIsYyxkLHJlc3VsdCk7CisKKwlGSVNIIChWRU5ET1JfUkVBRF9SRVFVRVNUX1RZUEUsIFZFTkRPUl9SRUFEX1JFUVVFU1QsIDB4ODQ4NCwgMCk7CisJU09VUCAoVkVORE9SX1dSSVRFX1JFUVVFU1RfVFlQRSwgVkVORE9SX1dSSVRFX1JFUVVFU1QsIDB4MDQwNCwgMCk7CisJRklTSCAoVkVORE9SX1JFQURfUkVRVUVTVF9UWVBFLCBWRU5ET1JfUkVBRF9SRVFVRVNULCAweDg0ODQsIDApOworCUZJU0ggKFZFTkRPUl9SRUFEX1JFUVVFU1RfVFlQRSwgVkVORE9SX1JFQURfUkVRVUVTVCwgMHg4MzgzLCAwKTsKKwlGSVNIIChWRU5ET1JfUkVBRF9SRVFVRVNUX1RZUEUsIFZFTkRPUl9SRUFEX1JFUVVFU1QsIDB4ODQ4NCwgMCk7CisJU09VUCAoVkVORE9SX1dSSVRFX1JFUVVFU1RfVFlQRSwgVkVORE9SX1dSSVRFX1JFUVVFU1QsIDB4MDQwNCwgMSk7CisJRklTSCAoVkVORE9SX1JFQURfUkVRVUVTVF9UWVBFLCBWRU5ET1JfUkVBRF9SRVFVRVNULCAweDg0ODQsIDApOworCUZJU0ggKFZFTkRPUl9SRUFEX1JFUVVFU1RfVFlQRSwgVkVORE9SX1JFQURfUkVRVUVTVCwgMHg4MzgzLCAwKTsKKwlTT1VQIChWRU5ET1JfV1JJVEVfUkVRVUVTVF9UWVBFLCBWRU5ET1JfV1JJVEVfUkVRVUVTVCwgMCwgMSk7CisJU09VUCAoVkVORE9SX1dSSVRFX1JFUVVFU1RfVFlQRSwgVkVORE9SX1dSSVRFX1JFUVVFU1QsIDEsIDApOworCisJaWYgKHByaXYtPnR5cGUgPT0gSFgpIHsKKwkJLyogSFggY2hpcCAqLworCQlTT1VQIChWRU5ET1JfV1JJVEVfUkVRVUVTVF9UWVBFLCBWRU5ET1JfV1JJVEVfUkVRVUVTVCwgMiwgMHg0NCk7CisJCS8qIHJlc2V0IHVwc3RyZWFtIGRhdGEgcGlwZXMgKi8KKyAgICAgICAgICAJU09VUCAoVkVORE9SX1dSSVRFX1JFUVVFU1RfVFlQRSwgVkVORE9SX1dSSVRFX1JFUVVFU1QsIDgsIDApOworICAgICAgICAJU09VUCAoVkVORE9SX1dSSVRFX1JFUVVFU1RfVFlQRSwgVkVORE9SX1dSSVRFX1JFUVVFU1QsIDksIDApOworCX0gZWxzZSB7CisJCVNPVVAgKFZFTkRPUl9XUklURV9SRVFVRVNUX1RZUEUsIFZFTkRPUl9XUklURV9SRVFVRVNULCAyLCAweDI0KTsKKwl9CisKKwlrZnJlZShidWYpOworCisJLyogU2V0dXAgdGVybWlvcyAqLworCWlmIChwb3J0LT50dHkpIHsKKwkJcGwyMzAzX3NldF90ZXJtaW9zIChwb3J0LCAmdG1wX3Rlcm1pb3MpOworCX0KKworCS8vRklYTUU6IG5lZWQgdG8gYXNzZXJ0IFJUUyBhbmQgRFRSIGlmIENSVFNDVFMgb2ZmCisKKwlkYmcoIiVzIC0gc3VibWl0dGluZyByZWFkIHVyYiIsIF9fRlVOQ1RJT05fXyk7CisJcG9ydC0+cmVhZF91cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiIChwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQlwbDIzMDNfY2xvc2UgKHBvcnQsIE5VTEwpOworCQlyZXR1cm4gLUVQUk9UTzsKKwl9CisKKwlkYmcoIiVzIC0gc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiIiwgX19GVU5DVElPTl9fKTsKKwlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiAocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIGludGVycnVwdCB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCXBsMjMwM19jbG9zZSAocG9ydCwgTlVMTCk7CisJCXJldHVybiAtRVBST1RPOworCX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBwbDIzMDNfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBjX2NmbGFnOworCWludCBicHM7CisJbG9uZyB0aW1lb3V0OworCXdhaXRfcXVldWVfdCB3YWl0OwkJCQkJCVwKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLyogd2FpdCBmb3IgZGF0YSB0byBkcmFpbiBmcm9tIHRoZSBidWZmZXIgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXRpbWVvdXQgPSBQTDIzMDNfQ0xPU0lOR19XQUlUOworCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBjdXJyZW50KTsKKwlhZGRfd2FpdF9xdWV1ZSgmcG9ydC0+dHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CisJZm9yICg7OykgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlpZiAocGwyMzAzX2J1Zl9kYXRhX2F2YWlsKHByaXYtPmJ1ZikgPT0gMAorCQl8fCB0aW1lb3V0ID09IDAgfHwgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkKKwkJfHwgIXVzYl9nZXRfaW50ZmRhdGEocG9ydC0+c2VyaWFsLT5pbnRlcmZhY2UpKQkvKiBkaXNjb25uZWN0ICovCisJCQlicmVhazsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwl9CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcG9ydC0+dHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CisJLyogY2xlYXIgb3V0IGFueSByZW1haW5pbmcgZGF0YSBpbiB0aGUgYnVmZmVyICovCisJcGwyMzAzX2J1Zl9jbGVhcihwcml2LT5idWYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIHdhaXQgZm9yIGNoYXJhY3RlcnMgdG8gZHJhaW4gZnJvbSB0aGUgZGV2aWNlICovCisJLyogKHRoaXMgaXMgbG9uZyBlbm91Z2ggZm9yIHRoZSBlbnRpcmUgMjU2IGJ5dGUgKi8KKwkvKiBwbDIzMDMgaGFyZHdhcmUgYnVmZmVyIHRvIGRyYWluIHdpdGggbm8gZmxvdyAqLworCS8qIGNvbnRyb2wgZm9yIGRhdGEgcmF0ZXMgb2YgMTIwMCBicHMgb3IgbW9yZSwgKi8KKwkvKiBmb3IgbG93ZXIgcmF0ZXMgd2Ugc2hvdWxkIHJlYWxseSBrbm93IGhvdyBtdWNoICovCisJLyogZGF0YSBpcyBpbiB0aGUgYnVmZmVyIHRvIGNvbXB1dGUgYSBkZWxheSAqLworCS8qIHRoYXQgaXMgbm90IHVubmVjZXNzYXJpbHkgbG9uZykgKi8KKwlicHMgPSB0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0LT50dHkpOworCWlmIChicHMgPiAxMjAwKQorCQl0aW1lb3V0ID0gbWF4KChIWioyNTYwKS9icHMsSFovMTApOworCWVsc2UKKwkJdGltZW91dCA9IDIqSFo7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOworCisJLyogc2h1dGRvd24gb3VyIHVyYnMgKi8KKwlkYmcoIiVzIC0gc2h1dHRpbmcgZG93biB1cmJzIiwgX19GVU5DVElPTl9fKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+d3JpdGVfdXJiKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKworCWlmIChwb3J0LT50dHkpIHsKKwkJY19jZmxhZyA9IHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKwkJaWYgKGNfY2ZsYWcgJiBIVVBDTCkgeworCQkJLyogZHJvcCBEVFIgYW5kIFJUUyAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCXByaXYtPmxpbmVfY29udHJvbCA9IDA7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkJc2V0X2NvbnRyb2xfbGluZXMgKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBwbDIzMDNfdGlvY21zZXQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCBjb250cm9sOworCisJc3Bpbl9sb2NrX2lycXNhdmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKHNldCAmIFRJT0NNX1JUUykKKwkJcHJpdi0+bGluZV9jb250cm9sIHw9IENPTlRST0xfUlRTOworCWlmIChzZXQgJiBUSU9DTV9EVFIpCisJCXByaXYtPmxpbmVfY29udHJvbCB8PSBDT05UUk9MX0RUUjsKKwlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpCisJCXByaXYtPmxpbmVfY29udHJvbCAmPSB+Q09OVFJPTF9SVFM7CisJaWYgKGNsZWFyICYgVElPQ01fRFRSKQorCQlwcml2LT5saW5lX2NvbnRyb2wgJj0gfkNPTlRST0xfRFRSOworCWNvbnRyb2wgPSBwcml2LT5saW5lX2NvbnRyb2w7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBzZXRfY29udHJvbF9saW5lcyAocG9ydC0+c2VyaWFsLT5kZXYsIGNvbnRyb2wpOworfQorCitzdGF0aWMgaW50IHBsMjMwM190aW9jbWdldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IG1jcjsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCByZXN1bHQ7CisKKwlkYmcoIiVzICglZCkiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwltY3IgPSBwcml2LT5saW5lX2NvbnRyb2w7CisJc3RhdHVzID0gcHJpdi0+bGluZV9zdGF0dXM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJlc3VsdCA9ICgobWNyICYgQ09OVFJPTF9EVFIpCQk/IFRJT0NNX0RUUiA6IDApCisJCSAgfCAoKG1jciAmIENPTlRST0xfUlRTKQk/IFRJT0NNX1JUUyA6IDApCisJCSAgfCAoKHN0YXR1cyAmIFVBUlRfQ1RTKQk/IFRJT0NNX0NUUyA6IDApCisJCSAgfCAoKHN0YXR1cyAmIFVBUlRfRFNSKQk/IFRJT0NNX0RTUiA6IDApCisJCSAgfCAoKHN0YXR1cyAmIFVBUlRfUklORykJPyBUSU9DTV9SSSAgOiAwKQorCQkgIHwgKChzdGF0dXMgJiBVQVJUX0RDRCkJPyBUSU9DTV9DRCAgOiAwKTsKKworCWRiZygiJXMgLSByZXN1bHQgPSAleCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgd2FpdF9tb2RlbV9pbmZvKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBhcmcpCit7CisJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHByZXZzdGF0dXM7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgY2hhbmdlZDsKKworCXNwaW5fbG9ja19pcnFzYXZlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByZXZzdGF0dXMgPSBwcml2LT5saW5lX3N0YXR1czsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJd2hpbGUgKDEpIHsKKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCQkvKiBzZWUgaWYgYSBzaWduYWwgZGlkIGl0ICovCisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCQorCQlzcGluX2xvY2tfaXJxc2F2ZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJc3RhdHVzID0gcHJpdi0+bGluZV9zdGF0dXM7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQorCQljaGFuZ2VkPXByZXZzdGF0dXNec3RhdHVzOworCQkKKwkJaWYgKCgoYXJnICYgVElPQ01fUk5HKSAmJiAoY2hhbmdlZCAmIFVBUlRfUklORykpIHx8CisJCSAgICAoKGFyZyAmIFRJT0NNX0RTUikgJiYgKGNoYW5nZWQgJiBVQVJUX0RTUikpIHx8CisJCSAgICAoKGFyZyAmIFRJT0NNX0NEKSAgJiYgKGNoYW5nZWQgJiBVQVJUX0RDRCkpIHx8CisJCSAgICAoKGFyZyAmIFRJT0NNX0NUUykgJiYgKGNoYW5nZWQgJiBVQVJUX0NUUykpICkgeworCQkJcmV0dXJuIDA7CisJCX0KKwkJcHJldnN0YXR1cyA9IHN0YXR1czsKKwl9CisJLyogTk9UUkVBQ0hFRCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBsMjMwM19pb2N0bCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWRiZygiJXMgKCVkKSBjbWQgPSAweCUwNHgiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY21kKTsKKworCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgVElPQ01JV0FJVDoKKwkJCWRiZygiJXMgKCVkKSBUSU9DTUlXQUlUIiwgX19GVU5DVElPTl9fLCAgcG9ydC0+bnVtYmVyKTsKKwkJCXJldHVybiB3YWl0X21vZGVtX2luZm8ocG9ydCwgYXJnKTsKKworCQlkZWZhdWx0OgorCQkJZGJnKCIlcyBub3Qgc3VwcG9ydGVkID0gMHglMDR4IiwgX19GVU5DVElPTl9fLCBjbWQpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworc3RhdGljIHZvaWQgcGwyMzAzX2JyZWFrX2N0bCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJdTE2IHN0YXRlOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChicmVha19zdGF0ZSA9PSAwKQorCQlzdGF0ZSA9IEJSRUFLX09GRjsKKwllbHNlCisJCXN0YXRlID0gQlJFQUtfT047CisJZGJnKCIlcyAtIHR1cm5pbmcgYnJlYWsgJXMiLCBfX0ZVTkNUSU9OX18sIHN0YXRlPT1CUkVBS19PRkYgPyAib2ZmIiA6ICJvbiIpOworCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlIChzZXJpYWwtPmRldiwgMCksCisJCQkJICBCUkVBS19SRVFVRVNULCBCUkVBS19SRVFVRVNUX1RZUEUsIHN0YXRlLCAKKwkJCQkgIDAsIE5VTEwsIDAsIDEwMCk7CisJaWYgKHJlc3VsdCkKKwkJZGJnKCIlcyAtIGVycm9yIHNlbmRpbmcgYnJlYWsgPSAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKK30KKworCitzdGF0aWMgdm9pZCBwbDIzMDNfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IGk7CisJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2OworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSk7CisJCWlmIChwcml2KSB7CisJCQlwbDIzMDNfYnVmX2ZyZWUocHJpdi0+YnVmKTsKKwkJCWtmcmVlKHByaXYpOworCQkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CisJCX0KKwl9CQkKK30KKworCitzdGF0aWMgdm9pZCBwbDIzMDNfcmVhZF9pbnRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHN0YXR1czsKKwl1OCB1YXJ0X3N0YXRlOworCisJZGJnKCIlcyAoJWQpIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPCBVQVJUX1NUQVRFKQorCQlnb3RvIGV4aXQ7CisKKwkvKiBTYXZlIG9mZiB0aGUgdWFydCBzdGF0dXMgZm9yIG90aGVycyB0byBsb29rIGF0ICovCisJdWFydF9zdGF0ZSA9IGRhdGFbVUFSVF9TVEFURV07CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwl1YXJ0X3N0YXRlIHw9IChwcml2LT5saW5lX3N0YXR1cyAmIFVBUlRfU1RBVEVfVFJBTlNJRU5UX01BU0spOworCXByaXYtPmxpbmVfc3RhdHVzID0gdWFydF9zdGF0ZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCQorZXhpdDoKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKQorCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWRcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHN0YXR1cyk7Cit9CisKKworc3RhdGljIHZvaWQgcGwyMzAzX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCWludCByZXN1bHQ7CisJdTggc3RhdHVzOworCWNoYXIgdHR5X2ZsYWc7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gdXJiLT5zdGF0dXMgPSAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJCWRiZygiJXMgLSBwb3J0IGlzIGNsb3NlZCwgZXhpdGluZy4iLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuOworCQl9CisJCWlmICh1cmItPnN0YXR1cyA9PSAtRVBST1RPKSB7CisJCQkvKiBQTDIzMDMgbXlzdGVyaW91c2x5IGZhaWxzIHdpdGggLUVQUk9UTyByZXNjaGVkdWxlIHRoZSByZWFkICovCisJCQlkYmcoIiVzIC0gY2F1Z2h0IC1FUFJPVE8sIHJlc3VibWl0dGluZyB0aGUgdXJiIiwgX19GVU5DVElPTl9fKTsKKwkJCXVyYi0+c3RhdHVzID0gMDsKKwkJCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCQkJaWYgKHJlc3VsdCkKKwkJCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQkJcmV0dXJuOworCQl9CisJCWRiZygiJXMgLSB1bmFibGUgdG8gaGFuZGxlIHRoZSBlcnJvciwgZXhpdGluZy4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisKKwkvKiBnZXQgdHR5X2ZsYWcgZnJvbSBzdGF0dXMgKi8KKwl0dHlfZmxhZyA9IFRUWV9OT1JNQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXN0YXR1cyA9IHByaXYtPmxpbmVfc3RhdHVzOworCXByaXYtPmxpbmVfc3RhdHVzICY9IH5VQVJUX1NUQVRFX1RSQU5TSUVOVF9NQVNLOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUgKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisKKwkvKiBicmVhayB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgcGFyaXR5LCAqLworCS8qIHdoaWNoIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBmcmFtaW5nIGVycm9ycyAqLworCWlmIChzdGF0dXMgJiBVQVJUX0JSRUFLX0VSUk9SICkKKwkJdHR5X2ZsYWcgPSBUVFlfQlJFQUs7CisJZWxzZSBpZiAoc3RhdHVzICYgVUFSVF9QQVJJVFlfRVJST1IpCisJCXR0eV9mbGFnID0gVFRZX1BBUklUWTsKKwllbHNlIGlmIChzdGF0dXMgJiBVQVJUX0ZSQU1FX0VSUk9SKQorCQl0dHlfZmxhZyA9IFRUWV9GUkFNRTsKKwlkYmcoIiVzIC0gdHR5X2ZsYWcgPSAlZCIsIF9fRlVOQ1RJT05fXywgdHR5X2ZsYWcpOworCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCS8qIG92ZXJydW4gaXMgc3BlY2lhbCwgbm90IGFzc29jaWF0ZWQgd2l0aCBhIGNoYXIgKi8KKwkJaWYgKHN0YXR1cyAmIFVBUlRfT1ZFUlJVTl9FUlJPUikKKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pOworCisJCWZvciAoaSA9IDA7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGg7ICsraSkgeworCQkJaWYgKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJCX0KKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyICh0dHksIGRhdGFbaV0sIHR0eV9mbGFnKTsKKwkJfQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaCAodHR5KTsKKwl9CisKKwkvKiBTY2hlZHVsZSB0aGUgbmV4dCByZWFkIF9pZl8gd2UgYXJlIHN0aWxsIG9wZW4gKi8KKwlpZiAocG9ydC0+b3Blbl9jb3VudCkgeworCQl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KQorCQkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwl9CisKKwlyZXR1cm47Cit9CisKKworCitzdGF0aWMgdm9pZCBwbDIzMDNfd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OworCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlwcml2LT53cml0ZV91cmJfaW5fdXNlID0gMDsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCS8qIGVycm9yIGluIHRoZSB1cmIsIHNvIHdlIGhhdmUgdG8gcmVzdWJtaXQgaXQgKi8KKwkJZGJnKCIlcyAtIE92ZXJmbG93IGluIHdyaXRlIiwgX19GVU5DVElPTl9fKTsKKwkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDE7CisJCXBvcnQtPndyaXRlX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiIChwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KQorCQkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCWVsc2UKKwkJCXJldHVybjsKKwl9CisKKwlwcml2LT53cml0ZV91cmJfaW5fdXNlID0gMDsKKworCS8qIHNlbmQgYW55IGJ1ZmZlcmVkIGRhdGEgKi8KKwlwbDIzMDNfc2VuZChwb3J0KTsKK30KKworCisvKgorICogcGwyMzAzX2J1Zl9hbGxvYworICoKKyAqIEFsbG9jYXRlIGEgY2lyY3VsYXIgYnVmZmVyIGFuZCBhbGwgYXNzb2NpYXRlZCBtZW1vcnkuCisgKi8KKworc3RhdGljIHN0cnVjdCBwbDIzMDNfYnVmICpwbDIzMDNfYnVmX2FsbG9jKHVuc2lnbmVkIGludCBzaXplKQoreworCisJc3RydWN0IHBsMjMwM19idWYgKnBiOworCisKKwlpZiAoc2l6ZSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCXBiID0gKHN0cnVjdCBwbDIzMDNfYnVmICopa21hbGxvYyhzaXplb2Yoc3RydWN0IHBsMjMwM19idWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAocGIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwYi0+YnVmX2J1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBiLT5idWZfYnVmID09IE5VTEwpIHsKKwkJa2ZyZWUocGIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwYi0+YnVmX3NpemUgPSBzaXplOworCXBiLT5idWZfZ2V0ID0gcGItPmJ1Zl9wdXQgPSBwYi0+YnVmX2J1ZjsKKworCXJldHVybiBwYjsKKworfQorCisKKy8qCisgKiBwbDIzMDNfYnVmX2ZyZWUKKyAqCisgKiBGcmVlIHRoZSBidWZmZXIgYW5kIGFsbCBhc3NvY2lhdGVkIG1lbW9yeS4KKyAqLworCitzdGF0aWMgdm9pZCBwbDIzMDNfYnVmX2ZyZWUoc3RydWN0IHBsMjMwM19idWYgKnBiKQoreworCWlmIChwYiAhPSBOVUxMKSB7CisJCWlmIChwYi0+YnVmX2J1ZiAhPSBOVUxMKQorCQkJa2ZyZWUocGItPmJ1Zl9idWYpOworCQlrZnJlZShwYik7CisJfQorfQorCisKKy8qCisgKiBwbDIzMDNfYnVmX2NsZWFyCisgKgorICogQ2xlYXIgb3V0IGFsbCBkYXRhIGluIHRoZSBjaXJjdWxhciBidWZmZXIuCisgKi8KKworc3RhdGljIHZvaWQgcGwyMzAzX2J1Zl9jbGVhcihzdHJ1Y3QgcGwyMzAzX2J1ZiAqcGIpCit7CisJaWYgKHBiICE9IE5VTEwpCisJCXBiLT5idWZfZ2V0ID0gcGItPmJ1Zl9wdXQ7CisJCS8qIGVxdWl2YWxlbnQgdG8gYSBnZXQgb2YgYWxsIGRhdGEgYXZhaWxhYmxlICovCit9CisKKworLyoKKyAqIHBsMjMwM19idWZfZGF0YV9hdmFpbAorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgYXZhaWxhYmxlIGluIHRoZSBjaXJjdWxhcgorICogYnVmZmVyLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGwyMzAzX2J1Zl9kYXRhX2F2YWlsKHN0cnVjdCBwbDIzMDNfYnVmICpwYikKK3sKKwlpZiAocGIgIT0gTlVMTCkKKwkJcmV0dXJuICgocGItPmJ1Zl9zaXplICsgcGItPmJ1Zl9wdXQgLSBwYi0+YnVmX2dldCkgJSBwYi0+YnVmX3NpemUpOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIHBsMjMwM19idWZfc3BhY2VfYXZhaWwKKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBvZiBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGNpcmN1bGFyCisgKiBidWZmZXIuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBwbDIzMDNfYnVmX3NwYWNlX2F2YWlsKHN0cnVjdCBwbDIzMDNfYnVmICpwYikKK3sKKwlpZiAocGIgIT0gTlVMTCkKKwkJcmV0dXJuICgocGItPmJ1Zl9zaXplICsgcGItPmJ1Zl9nZXQgLSBwYi0+YnVmX3B1dCAtIDEpICUgcGItPmJ1Zl9zaXplKTsKKwllbHNlCisJCXJldHVybiAwOworfQorCisKKy8qCisgKiBwbDIzMDNfYnVmX3B1dAorICoKKyAqIENvcHkgZGF0YSBkYXRhIGZyb20gYSB1c2VyIGJ1ZmZlciBhbmQgcHV0IGl0IGludG8gdGhlIGNpcmN1bGFyIGJ1ZmZlci4KKyAqIFJlc3RyaWN0IHRvIHRoZSBhbW91bnQgb2Ygc3BhY2UgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IHBsMjMwM19idWZfcHV0KHN0cnVjdCBwbDIzMDNfYnVmICpwYiwgY29uc3QgY2hhciAqYnVmLAorCXVuc2lnbmVkIGludCBjb3VudCkKK3sKKworCXVuc2lnbmVkIGludCBsZW47CisKKworCWlmIChwYiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWxlbiAgPSBwbDIzMDNfYnVmX3NwYWNlX2F2YWlsKHBiKTsKKwlpZiAoY291bnQgPiBsZW4pCisJCWNvdW50ID0gbGVuOworCisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOworCisJbGVuID0gcGItPmJ1Zl9idWYgKyBwYi0+YnVmX3NpemUgLSBwYi0+YnVmX3B1dDsKKwlpZiAoY291bnQgPiBsZW4pIHsKKwkJbWVtY3B5KHBiLT5idWZfcHV0LCBidWYsIGxlbik7CisJCW1lbWNweShwYi0+YnVmX2J1ZiwgYnVmK2xlbiwgY291bnQgLSBsZW4pOworCQlwYi0+YnVmX3B1dCA9IHBiLT5idWZfYnVmICsgY291bnQgLSBsZW47CisJfSBlbHNlIHsKKwkJbWVtY3B5KHBiLT5idWZfcHV0LCBidWYsIGNvdW50KTsKKwkJaWYgKGNvdW50IDwgbGVuKQorCQkJcGItPmJ1Zl9wdXQgKz0gY291bnQ7CisJCWVsc2UgLyogY291bnQgPT0gbGVuICovCisJCQlwYi0+YnVmX3B1dCA9IHBiLT5idWZfYnVmOworCX0KKworCXJldHVybiBjb3VudDsKKworfQorCisKKy8qCisgKiBwbDIzMDNfYnVmX2dldAorICoKKyAqIEdldCBkYXRhIGZyb20gdGhlIGNpcmN1bGFyIGJ1ZmZlciBhbmQgY29weSB0byB0aGUgZ2l2ZW4gYnVmZmVyLgorICogUmVzdHJpY3QgdG8gdGhlIGFtb3VudCBvZiBkYXRhIGF2YWlsYWJsZS4KKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBwbDIzMDNfYnVmX2dldChzdHJ1Y3QgcGwyMzAzX2J1ZiAqcGIsIGNoYXIgKmJ1ZiwKKwl1bnNpZ25lZCBpbnQgY291bnQpCit7CisKKwl1bnNpZ25lZCBpbnQgbGVuOworCisKKwlpZiAocGIgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBwbDIzMDNfYnVmX2RhdGFfYXZhaWwocGIpOworCWlmIChjb3VudCA+IGxlbikKKwkJY291bnQgPSBsZW47CisKKwlpZiAoY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBwYi0+YnVmX2J1ZiArIHBiLT5idWZfc2l6ZSAtIHBiLT5idWZfZ2V0OworCWlmIChjb3VudCA+IGxlbikgeworCQltZW1jcHkoYnVmLCBwYi0+YnVmX2dldCwgbGVuKTsKKwkJbWVtY3B5KGJ1ZitsZW4sIHBiLT5idWZfYnVmLCBjb3VudCAtIGxlbik7CisJCXBiLT5idWZfZ2V0ID0gcGItPmJ1Zl9idWYgKyBjb3VudCAtIGxlbjsKKwl9IGVsc2UgeworCQltZW1jcHkoYnVmLCBwYi0+YnVmX2dldCwgY291bnQpOworCQlpZiAoY291bnQgPCBsZW4pCisJCQlwYi0+YnVmX2dldCArPSBjb3VudDsKKwkJZWxzZSAvKiBjb3VudCA9PSBsZW4gKi8KKwkJCXBiLT5idWZfZ2V0ID0gcGItPmJ1Zl9idWY7CisJfQorCisJcmV0dXJuIGNvdW50OworCit9CisKK3N0YXRpYyBpbnQgX19pbml0IHBsMjMwM19pbml0ICh2b2lkKQoreworCWludCByZXR2YWw7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmcGwyMzAzX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnBsMjMwM19kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKKwlpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmcGwyMzAzX2RldmljZSk7CitmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjoKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwbDIzMDNfZXhpdCAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlciAoJnBsMjMwM19kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJnBsMjMwM19kZXZpY2UpOworfQorCisKK21vZHVsZV9pbml0KHBsMjMwM19pbml0KTsKK21vZHVsZV9leGl0KHBsMjMwM19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMWI0NzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIFByb2xpZmljIFBMMjMwMyBVU0IgdG8gc2VyaWFsIGFkYXB0b3IgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICovCisjZGVmaW5lIFBMMjMwM19WRU5ET1JfSUQJMHgwNjdiCisjZGVmaW5lIFBMMjMwM19QUk9EVUNUX0lECTB4MjMwMworI2RlZmluZSBQTDIzMDNfUFJPRFVDVF9JRF9SU0FRMgkJMHgwNGJiCisjZGVmaW5lIFBMMjMwM19QUk9EVUNUX0lEX1BIQVJPUwkweGFhYTAKKyNkZWZpbmUgUEwyMzAzX1BST0RVQ1RfSURfUlNBUTMJCTB4YWFhMgorCisjZGVmaW5lIEFURU5fVkVORE9SX0lECQkweDA1NTcKKyNkZWZpbmUgQVRFTl9WRU5ET1JfSUQyCQkweDA1NDcKKyNkZWZpbmUgQVRFTl9QUk9EVUNUX0lECQkweDIwMDgKKworI2RlZmluZSBJT0RBVEFfVkVORE9SX0lECTB4MDRiYgorI2RlZmluZSBJT0RBVEFfUFJPRFVDVF9JRAkweDBhMDMKKworI2RlZmluZSBFTENPTV9WRU5ET1JfSUQJCTB4MDU2ZQorI2RlZmluZSBFTENPTV9QUk9EVUNUX0lECTB4NTAwMworI2RlZmluZSBFTENPTV9QUk9EVUNUX0lEX1VDU0dUCTB4NTAwNAorCisjZGVmaW5lIElURUdOT19WRU5ET1JfSUQJMHgwZWJhCisjZGVmaW5lIElURUdOT19QUk9EVUNUX0lECTB4MTA4MAorCisjZGVmaW5lIE1BNjIwX1ZFTkRPUl9JRAkJMHgwZGY3CisjZGVmaW5lIE1BNjIwX1BST0RVQ1RfSUQJMHgwNjIwCisKKyNkZWZpbmUgUkFUT0NfVkVORE9SX0lECQkweDA1ODQKKyNkZWZpbmUgUkFUT0NfUFJPRFVDVF9JRAkweGIwMDAKKworI2RlZmluZSBUUklQUF9WRU5ET1JfSUQJCTB4MjQ3OAorI2RlZmluZSBUUklQUF9QUk9EVUNUX0lECTB4MjAwOAorCisjZGVmaW5lIFJBRElPU0hBQ0tfVkVORE9SX0lECTB4MTQ1MworI2RlZmluZSBSQURJT1NIQUNLX1BST0RVQ1RfSUQJMHg0MDI2CisKKyNkZWZpbmUgRENVMTBfVkVORE9SX0lECQkweDA3MzEKKyNkZWZpbmUgRENVMTBfUFJPRFVDVF9JRAkweDA1MjgKKworI2RlZmluZSBTSVRFQ09NX1ZFTkRPUl9JRAkweDYxODkKKyNkZWZpbmUgU0lURUNPTV9QUk9EVUNUX0lECTB4MjA2OAorCisvKiBBbGNhdGVsIE9UNTM1LzczNSBVU0IgY2FibGUgKi8KKyNkZWZpbmUgQUxDQVRFTF9WRU5ET1JfSUQJMHgxMWY3CisjZGVmaW5lIEFMQ0FURUxfUFJPRFVDVF9JRAkweDAyZGYKKworLyogU2Ftc3VuZyBJMzMwIHBob25lIGNyYWRsZSAqLworI2RlZmluZSBTQU1TVU5HX1ZFTkRPUl9JRAkweDA0ZTgKKyNkZWZpbmUgU0FNU1VOR19QUk9EVUNUX0lECTB4ODAwMQorCisjZGVmaW5lIFNJRU1FTlNfVkVORE9SX0lECTB4MTFmNQorI2RlZmluZSBTSUVNRU5TX1BST0RVQ1RfSURfWDY1CTB4MDAwMwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NhZmVfc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2FmZV9zZXJpYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTg1ZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NhZmVfc2VyaWFsLmMKQEAgLTAsMCArMSw0NTEgQEAKKy8qCisgKiBTYWZlIEVuY2Fwc3VsYXRlZCBVU0IgU2VyaWFsIERyaXZlcgorICoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAyMDAxIExpbmVvCisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwMSBIZXdsZXR0LVBhY2thcmQKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEJ5OgorICogICAgICBTdHVhcnQgTHlubmUgPHNsQGxpbmVvLmNvbT4sIFRvbSBSdXNod29ydGggPHRickBsaW5lby5jb20+CisgKi8KKworLyogCisgKiBUaGUgZW5jYXBzdWx0YWlvbiBpcyBkZXNpZ25lZCB0byBvdmVyY29tZSBkaWZmaWN1bHRpZXMgd2l0aCBzb21lIFVTQiBoYXJkd2FyZS4KKyAqCisgKiBXaGlsZSB0aGUgVVNCIHByb3RvY29sIGhhcyBhIENSQyBvdmVyIHRoZSBkYXRhIHdoaWxlIGluIHRyYW5zaXQsIGkuZS4gd2hpbGUKKyAqIGJlaW5nIGNhcnJpZWQgb3ZlciB0aGUgYnVzLCB0aGVyZSBpcyBubyBlbmQgdG8gZW5kIHByb3RlY3Rpb24uIElmIHRoZSBoYXJkd2FyZQorICogaGFzIGFueSBwcm9ibGVtcyBnZXR0aW5nIHRoZSBkYXRhIGludG8gb3Igb3V0IG9mIHRoZSBVU0IgdHJhbnNtaXQgYW5kIHJlY2VpdmUKKyAqIEZJRk8ncyB0aGVuIGRhdGEgY2FuIGJlIGxvc3QuIAorICoKKyAqIFRoaXMgcHJvdG9jb2wgYWRkcyBhIHR3byBieXRlIHRyYWlsZXIgdG8gZWFjaCBVU0IgcGFja2V0IHRvIHNwZWNpZnkgdGhlIG51bWJlcgorICogb2YgYnl0ZXMgb2YgdmFsaWQgZGF0YSBhbmQgYSAxMCBiaXQgQ1JDIHRoYXQgd2lsbCBhbGxvdyB0aGUgcmVjZWl2ZXIgdG8gdmVyaWZ5CisgKiB0aGF0IHRoZSBlbnRpcmUgVVNCIHBhY2tldCB3YXMgcmVjZWl2ZWQgd2l0aG91dCBlcnJvci4KKyAqCisgKiBCZWNhdXNlIGluIHRoaXMgY2FzZSB0aGUgc2VuZGVyIGFuZCByZWNlaXZlciBhcmUgdGhlIGNsYXNzIGFuZCBmdW5jdGlvbiBkcml2ZXJzCisgKiB0aGVyZSBpcyBub3cgZW5kIHRvIGVuZCBwcm90ZWN0aW9uLgorICoKKyAqIFRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgb3B0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gZm9yY2UgYWxsIHRyYW5zbWl0dGVkIHBhY2tldHMKKyAqIHRvIGJlIHBhZGRlZCB0byB0aGUgbWF4aW11bSBwYWNrZXQgc2l6ZS4gVGhpcyBwcm92aWRlcyBhIHdvcmsgYXJvdW5kIGZvciBzb21lCisgKiBkZXZpY2VzIHdoaWNoIGhhdmUgcHJvYmxlbXMgd2l0aCBzbWFsbCBVU0IgcGFja2V0cy4KKyAqCisgKiBBc3N1bWluZyBhIHBhY2tldHNpemUgb2YgTjoKKyAqCisgKiAgICAgIDAuLk4tMiAgZGF0YSBhbmQgb3B0aW9uYWwgcGFkZGluZworICoKKyAqICAgICAgTi0yICAgICBiaXRzIDctMiAtIG51bWJlciBvZiBieXRlcyBvZiB2YWxpZCBkYXRhCisgKiAgICAgICAgICAgICAgYml0cyAxLTAgdG9wIHR3byBiaXRzIG9mIDEwIGJpdCBDUkMKKyAqICAgICAgTi0xICAgICBib3R0b20gOCBiaXRzIG9mIDEwIGJpdCBDUkMKKyAqCisgKgorICogICAgICB8IERhdGEgTGVuZ3RoICAgICAgIHwgMTAgYml0IENSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgICArIDcgLiA2IC4gNSAuIDQgLiAzIC4gMiAuIDEgLiAwIHwgNyAuIDYgLiA1IC4gNCAuIDMgLiAyIC4gMSAuIDAgKworICoKKyAqIFRoZSAxMCBiaXQgQ1JDIGlzIGNvbXB1dGVkIGFjcm9zcyB0aGUgc2VudCBkYXRhLCBmb2xsb3dlZCBieSB0aGUgdHJhaWxlciB3aXRoCisgKiB0aGUgbGVuZ3RoIHNldCBhbmQgdGhlIENSQyBzZXQgdG8gemVyby4gVGhlIENSQyBpcyB0aGVuIE9SJ2QgaW50byB0aGUgdHJhaWxlci4KKyAqCisgKiBXaGVuIHJlY2VpdmVkIGEgMTAgYml0IENSQyBpcyBjb21wdXRlZCBvdmVyIHRoZSBlbnRpcmUgZnJhbWUgaW5jbHVkaW5nIHRoZSB0cmFpbGVyCisgKiBhbmQgc2hvdWxkIGJlIGVxdWFsIHRvIHplcm8uCisgKgorICogVHdvIG1vZHVsZSBwYXJhbWV0ZXJzIGFyZSB1c2VkIHRvIGNvbnRyb2wgdGhlIGVuY2Fwc3VsYXRpb24sIGlmIGJvdGggYXJlCisgKiB0dXJuZWQgb2YgdGhlIG1vZHVsZSB3b3JrcyBhcyBhIHNpbXBsZSBzZXJpYWwgZGV2aWNlIHdpdGggTk8KKyAqIGVuY2Fwc3VsYXRpb24uCisgKgorICogU2VlIGxpbnV4L2RyaXZlcnMvdXNiZC9zZXJpYWxfZmQgZm9yIGEgZGV2aWNlIGZ1bmN0aW9uIGRyaXZlcgorICogaW1wbGVtZW50YXRpb24gb2YgdGhpcy4KKyAqCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisKKworI2lmbmRlZiBDT05GSUdfVVNCX1NBRkVfUEFEREVECisjZGVmaW5lIENPTkZJR19VU0JfU0FGRV9QQURERUQgMAorI2VuZGlmCisKK3N0YXRpYyBpbnQgZGVidWc7CitzdGF0aWMgaW50IHNhZmUgPSAxOworc3RhdGljIGludCBwYWRkZWQgPSBDT05GSUdfVVNCX1NBRkVfUEFEREVEOworCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC4wYiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAic2xAbGluZW8uY29tLCB0YnJAbGluZW8uY29tIgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIFNhZmUgRW5jYXBzdWxhdGVkIFNlcmlhbCIKKworTU9EVUxFX0FVVEhPUiAoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04gKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1VTQkRfU0FGRV9TRVJJQUxfVkVORE9SKSAmJiAhZGVmaW5lZChDT05GSUdfVVNCRF9TQUZFX1NFUklBTF9QUk9EVUNUKQorI2Fib3J0ICJTQUZFX1NFUklBTF9WRU5ET1IgZGVmaW5lZCB3aXRob3V0IFNBRkVfU0VSSUFMX1BST0RVQ1QiCisjZW5kaWYKKworI2lmICEgZGVmaW5lZChDT05GSUdfVVNCRF9TQUZFX1NFUklBTF9WRU5ET1IpCitzdGF0aWMgX191MTYgdmVuZG9yOwkJLy8gbm8gZGVmYXVsdAorc3RhdGljIF9fdTE2IHByb2R1Y3Q7CQkvLyBubyBkZWZhdWx0Cittb2R1bGVfcGFyYW0odmVuZG9yLCB1c2hvcnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2ZW5kb3IsICJVc2VyIHNwZWNpZmllZCBVU0IgaWRWZW5kb3IgKHJlcXVpcmVkKSIpOworbW9kdWxlX3BhcmFtKHByb2R1Y3QsIHVzaG9ydCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHByb2R1Y3QsICJVc2VyIHNwZWNpZmllZCBVU0IgaWRQcm9kdWN0IChyZXF1aXJlZCkiKTsKKyNlbmRpZgorCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOworCittb2R1bGVfcGFyYW0oc2FmZSwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNhZmUsICJUdXJuIFNhZmUgRW5jYXBzdWxhdGlvbiBPbi9PZmYiKTsKKworbW9kdWxlX3BhcmFtKHBhZGRlZCwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHBhZGRlZCwgIlBhZCB0byBmdWxsIHdNYXhQYWNrZXRTaXplIE9uL09mZiIpOworCisjZGVmaW5lIENEQ19ERVZJQ0VfQ0xBU1MgICAgICAgICAgICAgICAgICAgICAgICAweDAyCisKKyNkZWZpbmUgQ0RDX0lOVEVSRkFDRV9DTEFTUyAgICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQ0RDX0lOVEVSRkFDRV9TVUJDTEFTUyAgICAgICAgICAgICAgICAgIDB4MDYKKworI2RlZmluZSBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MgICAgICAgICAgICAgICAgICAgMHhmZgorCisjZGVmaW5lIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFTkVUICAgICAgICAweDAxCisjZGVmaW5lIExJTkVPX1NBRkVORVRfQ1JDICAgICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIExJTkVPX1NBRkVORVRfQ1JDX1BBRERFRCAgICAgICAgICAgICAgICAweDAyCisKKyNkZWZpbmUgTElORU9fSU5URVJGQUNFX1NVQkNMQVNTX1NBRkVTRVJJQUwgICAgIDB4MDIKKyNkZWZpbmUgTElORU9fU0FGRVNFUklBTF9DUkMgICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTElORU9fU0FGRVNFUklBTF9DUkNfUEFEREVEICAgICAgICAgICAgIDB4MDIKKworCisjZGVmaW5lIE1ZX1VTQl9ERVZJQ0UodmVuZCxwcm9kLGRjLGljLGlzYykgXAorICAgICAgICAubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0NMQVNTIHwgXAorICAgICAgICAgICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MsIFwKKyAgICAgICAgLmlkVmVuZG9yID0gKHZlbmQpLCBcCisgICAgICAgIC5pZFByb2R1Y3QgPSAocHJvZCksXAorICAgICAgICAuYkRldmljZUNsYXNzID0gKGRjKSxcCisgICAgICAgIC5iSW50ZXJmYWNlQ2xhc3MgPSAoaWMpLCBcCisgICAgICAgIC5iSW50ZXJmYWNlU3ViQ2xhc3MgPSAoaXNjKSwKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJe01ZX1VTQl9ERVZJQ0UgKDB4NDlmLCAweGZmZmYsIENEQ19ERVZJQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX1NVQkNMQVNTX1NBRkVTRVJJQUwpfSwJLy8gSXRzeQorCXtNWV9VU0JfREVWSUNFICgweDNmMCwgMHgyMTAxLCBDRENfREVWSUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFU0VSSUFMKX0sCS8vIENhbHlwc28KKwl7TVlfVVNCX0RFVklDRSAoMHg0ZGQsIDB4ODAwMSwgQ0RDX0RFVklDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfU1VCQ0xBU1NfU0FGRVNFUklBTCl9LAkvLyBJcmlzIAorCXtNWV9VU0JfREVWSUNFICgweDRkZCwgMHg4MDAyLCBDRENfREVWSUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFU0VSSUFMKX0sCS8vIENvbGxpZSAKKwl7TVlfVVNCX0RFVklDRSAoMHg0ZGQsIDB4ODAwMywgQ0RDX0RFVklDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfU1VCQ0xBU1NfU0FGRVNFUklBTCl9LAkvLyBDb2xsaWUgCisJe01ZX1VTQl9ERVZJQ0UgKDB4NGRkLCAweDgwMDQsIENEQ19ERVZJQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX1NVQkNMQVNTX1NBRkVTRVJJQUwpfSwJLy8gQ29sbGllIAorCXtNWV9VU0JfREVWSUNFICgweDVmOSwgMHhmZmZmLCBDRENfREVWSUNFX0NMQVNTLCBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFU0VSSUFMKX0sCS8vIFNoYXJwIHRtcAorI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TQUZFX1NFUklBTF9WRU5ET1IpCisJe01ZX1VTQl9ERVZJQ0UKKwkgKENPTkZJR19VU0JfU0FGRV9TRVJJQUxfVkVORE9SLCBDT05GSUdfVVNCX1NBRkVfU0VSSUFMX1BST0RVQ1QsIENEQ19ERVZJQ0VfQ0xBU1MsCisJICBMSU5FT19JTlRFUkZBQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9TVUJDTEFTU19TQUZFU0VSSUFMKX0sCisjZW5kaWYKKwkvLyBleHRyYSBudWxsIGVudHJ5IGZvciBtb2R1bGUgCisJLy8gdmVuZG9yL3Byb2R1YyBwYXJhbWV0ZXJzCisJe01ZX1VTQl9ERVZJQ0UgKDAsIDAsIENEQ19ERVZJQ0VfQ0xBU1MsIExJTkVPX0lOVEVSRkFDRV9DTEFTUywgTElORU9fSU5URVJGQUNFX1NVQkNMQVNTX1NBRkVTRVJJQUwpfSwKKwl7fQkJCS8vIHRlcm1pbmF0aW5nIGVudHJ5IAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzYWZlX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkic2FmZV9zZXJpYWwiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCit9OworCitzdGF0aWMgX191MTYgY3JjMTBfdGFibGVbMjU2XSA9IHsKKwkweDAwMCwgMHgyMzMsIDB4MjU1LCAweDA2NiwgMHgyOTksIDB4MGFhLCAweDBjYywgMHgyZmYsIDB4MzAxLCAweDEzMiwgMHgxNTQsIDB4MzY3LCAweDE5OCwgMHgzYWIsIDB4M2NkLCAweDFmZSwKKwkweDAzMSwgMHgyMDIsIDB4MjY0LCAweDA1NywgMHgyYTgsIDB4MDliLCAweDBmZCwgMHgyY2UsIDB4MzMwLCAweDEwMywgMHgxNjUsIDB4MzU2LCAweDFhOSwgMHgzOWEsIDB4M2ZjLCAweDFjZiwKKwkweDA2MiwgMHgyNTEsIDB4MjM3LCAweDAwNCwgMHgyZmIsIDB4MGM4LCAweDBhZSwgMHgyOWQsIDB4MzYzLCAweDE1MCwgMHgxMzYsIDB4MzA1LCAweDFmYSwgMHgzYzksIDB4M2FmLCAweDE5YywKKwkweDA1MywgMHgyNjAsIDB4MjA2LCAweDAzNSwgMHgyY2EsIDB4MGY5LCAweDA5ZiwgMHgyYWMsIDB4MzUyLCAweDE2MSwgMHgxMDcsIDB4MzM0LCAweDFjYiwgMHgzZjgsIDB4MzllLCAweDFhZCwKKwkweDBjNCwgMHgyZjcsIDB4MjkxLCAweDBhMiwgMHgyNWQsIDB4MDZlLCAweDAwOCwgMHgyM2IsIDB4M2M1LCAweDFmNiwgMHgxOTAsIDB4M2EzLCAweDE1YywgMHgzNmYsIDB4MzA5LCAweDEzYSwKKwkweDBmNSwgMHgyYzYsIDB4MmEwLCAweDA5MywgMHgyNmMsIDB4MDVmLCAweDAzOSwgMHgyMGEsIDB4M2Y0LCAweDFjNywgMHgxYTEsIDB4MzkyLCAweDE2ZCwgMHgzNWUsIDB4MzM4LCAweDEwYiwKKwkweDBhNiwgMHgyOTUsIDB4MmYzLCAweDBjMCwgMHgyM2YsIDB4MDBjLCAweDA2YSwgMHgyNTksIDB4M2E3LCAweDE5NCwgMHgxZjIsIDB4M2MxLCAweDEzZSwgMHgzMGQsIDB4MzZiLCAweDE1OCwKKwkweDA5NywgMHgyYTQsIDB4MmMyLCAweDBmMSwgMHgyMGUsIDB4MDNkLCAweDA1YiwgMHgyNjgsIDB4Mzk2LCAweDFhNSwgMHgxYzMsIDB4M2YwLCAweDEwZiwgMHgzM2MsIDB4MzVhLCAweDE2OSwKKwkweDE4OCwgMHgzYmIsIDB4M2RkLCAweDFlZSwgMHgzMTEsIDB4MTIyLCAweDE0NCwgMHgzNzcsIDB4Mjg5LCAweDBiYSwgMHgwZGMsIDB4MmVmLCAweDAxMCwgMHgyMjMsIDB4MjQ1LCAweDA3NiwKKwkweDFiOSwgMHgzOGEsIDB4M2VjLCAweDFkZiwgMHgzMjAsIDB4MTEzLCAweDE3NSwgMHgzNDYsIDB4MmI4LCAweDA4YiwgMHgwZWQsIDB4MmRlLCAweDAyMSwgMHgyMTIsIDB4Mjc0LCAweDA0NywKKwkweDFlYSwgMHgzZDksIDB4M2JmLCAweDE4YywgMHgzNzMsIDB4MTQwLCAweDEyNiwgMHgzMTUsIDB4MmViLCAweDBkOCwgMHgwYmUsIDB4MjhkLCAweDA3MiwgMHgyNDEsIDB4MjI3LCAweDAxNCwKKwkweDFkYiwgMHgzZTgsIDB4MzhlLCAweDFiZCwgMHgzNDIsIDB4MTcxLCAweDExNywgMHgzMjQsIDB4MmRhLCAweDBlOSwgMHgwOGYsIDB4MmJjLCAweDA0MywgMHgyNzAsIDB4MjE2LCAweDAyNSwKKwkweDE0YywgMHgzN2YsIDB4MzE5LCAweDEyYSwgMHgzZDUsIDB4MWU2LCAweDE4MCwgMHgzYjMsIDB4MjRkLCAweDA3ZSwgMHgwMTgsIDB4MjJiLCAweDBkNCwgMHgyZTcsIDB4MjgxLCAweDBiMiwKKwkweDE3ZCwgMHgzNGUsIDB4MzI4LCAweDExYiwgMHgzZTQsIDB4MWQ3LCAweDFiMSwgMHgzODIsIDB4MjdjLCAweDA0ZiwgMHgwMjksIDB4MjFhLCAweDBlNSwgMHgyZDYsIDB4MmIwLCAweDA4MywKKwkweDEyZSwgMHgzMWQsIDB4MzdiLCAweDE0OCwgMHgzYjcsIDB4MTg0LCAweDFlMiwgMHgzZDEsIDB4MjJmLCAweDAxYywgMHgwN2EsIDB4MjQ5LCAweDBiNiwgMHgyODUsIDB4MmUzLCAweDBkMCwKKwkweDExZiwgMHgzMmMsIDB4MzRhLCAweDE3OSwgMHgzODYsIDB4MWI1LCAweDFkMywgMHgzZTAsIDB4MjFlLCAweDAyZCwgMHgwNGIsIDB4Mjc4LCAweDA4NywgMHgyYjQsIDB4MmQyLCAweDBlMSwKK307CisKKyNkZWZpbmUgQ1JDMTBfSU5JVEZDUyAgICAgMHgwMDAJLy8gSW5pdGlhbCBGQ1MgdmFsdWUKKyNkZWZpbmUgQ1JDMTBfR09PREZDUyAgICAgMHgwMDAJLy8gR29vZCBmaW5hbCBGQ1MgdmFsdWUKKyNkZWZpbmUgQ1JDMTBfRkNTKGZjcywgYykgKCAoKChmY3MpIDw8IDgpICYgMHgzZmYpIF4gY3JjMTBfdGFibGVbKChmY3MpID4+IDIpICYgMHhmZl0gXiAoYykpCisKKy8qKiAgICAgCisgKiBmY3NfY29tcHV0ZTEwIC0gbWVtY3B5IGFuZCBjYWxjdWxhdGUgMTAgYml0IENSQyBhY3Jvc3MgYnVmZmVyCisgKiBAc3A6IHBvaW50ZXIgdG8gYnVmZmVyCisgKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMKKyAqIEBmY3M6IHN0YXJ0aW5nIEZDUworICoKKyAqIFBlcmZvcm0gYSBtZW1jcHkgYW5kIGNhbGN1bGF0ZSBmY3MgdXNpbmcgcHBwIDEwYml0IENSQyBhbGdvcml0aG0uIFJldHVybgorICogbmV3IDEwIGJpdCBGQ1MuCisgKi8KK3N0YXRpYyBfX3UxNiBfX2lubGluZV9fIGZjc19jb21wdXRlMTAgKHVuc2lnbmVkIGNoYXIgKnNwLCBpbnQgbGVuLCBfX3UxNiBmY3MpCit7CisJZm9yICg7IGxlbi0tID4gMDsgZmNzID0gQ1JDMTBfRkNTIChmY3MsICpzcCsrKSk7CisJcmV0dXJuIGZjczsKK30KKworc3RhdGljIHZvaWQgc2FmZV9yZWFkX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgY2hhciBsZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJaW50IGk7CisJaW50IHJlc3VsdDsKKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcgKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCWRiZyAoInNhZmVfcmVhZF9idWxrX2NhbGxiYWNrIGxlbmd0aDogJWQiLCBwb3J0LT5yZWFkX3VyYi0+YWN0dWFsX2xlbmd0aCk7CisjaWZkZWYgRUNIT19SQ1YKKwl7CisJCWludCBpOworCQl1bnNpZ25lZCBjaGFyICpjcCA9IHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJCWZvciAoaSA9IDA7IGkgPCBwb3J0LT5yZWFkX3VyYi0+YWN0dWFsX2xlbmd0aDsgaSsrKSB7CisJCQlpZiAoKGkgJSAzMikgPT0gMCkgeworCQkJCXByaW50ayAoIlxucnVbJTAyeF0gIiwgaSk7CisJCQl9CisJCQlwcmludGsgKCIlMDJ4ICIsICpjcCsrKTsKKwkJfQorCQlwcmludGsgKCJcbiIpOworCX0KKyNlbmRpZgorCWlmIChzYWZlKSB7CisJCV9fdTE2IGZjczsKKwkJaWYgKCEoZmNzID0gZmNzX2NvbXB1dGUxMCAoZGF0YSwgbGVuZ3RoLCBDUkMxMF9JTklURkNTKSkpIHsKKworCQkJaW50IGFjdHVhbF9sZW5ndGggPSBkYXRhW2xlbmd0aCAtIDJdID4+IDI7CisKKwkJCWlmIChhY3R1YWxfbGVuZ3RoIDw9IChsZW5ndGggLSAyKSkgeworCisJCQkJaW5mbyAoIiVzIC0gYWN0dWFsOiAlZCIsIF9fRlVOQ1RJT05fXywgYWN0dWFsX2xlbmd0aCk7CisKKwkJCQlmb3IgKGkgPSAwOyBpIDwgYWN0dWFsX2xlbmd0aDsgaSsrKSB7CisJCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyIChwb3J0LT50dHksIGRhdGFbaV0sIDApOworCQkJCX0KKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCAocG9ydC0+dHR5KTsKKwkJCX0gZWxzZSB7CisJCQkJZXJyICgiJXMgLSBpbmNvbnNpc3RlbnQgbGVuZ3RocyAlZDolZCIsIF9fRlVOQ1RJT05fXywKKwkJCQkgICAgIGFjdHVhbF9sZW5ndGgsIGxlbmd0aCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQllcnIgKCIlcyAtIGJhZCBDUkMgJXgiLCBfX0ZVTkNUSU9OX18sIGZjcyk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyIChwb3J0LT50dHksIGRhdGFbaV0sIDApOworCQl9CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoIChwb3J0LT50dHkpOworCX0KKworCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCAgKi8KKwl1c2JfZmlsbF9idWxrX3VyYiAodXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKKwkJICAgICAgIHVzYl9yY3ZidWxrcGlwZSAocG9ydC0+c2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJICAgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCSAgICAgICBzYWZlX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisKKwlpZiAoKHJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpKSkgeworCQllcnIgKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCX0KK30KKworc3RhdGljIGludCBzYWZlX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCWludCByZXN1bHQ7CisJaW50IGk7CisJaW50IHBhY2tldF9sZW5ndGg7CisKKwlkYmcgKCJzYWZlX3dyaXRlIHBvcnQ6ICVwICVkIHVyYjogJXAgY291bnQ6ICVkIiwgcG9ydCwgcG9ydC0+bnVtYmVyLCBwb3J0LT53cml0ZV91cmIsCisJICAgICBjb3VudCk7CisKKwlpZiAoIXBvcnQtPndyaXRlX3VyYikgeworCQlkYmcgKCIlcyAtIHdyaXRlIHVyYiBOVUxMIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlkYmcgKCJzYWZlX3dyaXRlIHdyaXRlX3VyYjogJWQgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCIsCisJICAgICBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCisJaWYgKCFwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpIHsKKwkJZGJnICgiJXMgLSB3cml0ZSB1cmIgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCB6ZXJvIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKGNvdW50ID09IDApIHsKKwkJZGJnICgiJXMgLSB3cml0ZSByZXF1ZXN0IG9mIDAgYnl0ZXMiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gKDApOworCX0KKwlpZiAocG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCWRiZyAoIiVzIC0gYWxyZWFkeSB3cml0aW5nIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlwYWNrZXRfbGVuZ3RoID0gcG9ydC0+YnVsa19vdXRfc2l6ZTsJLy8gZ2V0IG1heCBwYWNrZXRzaXplCisKKwlpID0gcGFja2V0X2xlbmd0aCAtIChzYWZlID8gMiA6IDApOwkvLyBnZXQgYnl0ZXMgdG8gc2VuZAorCWNvdW50ID0gKGNvdW50ID4gaSkgPyBpIDogY291bnQ7CisKKworCS8vIGdldCB0aGUgZGF0YSBpbnRvIHRoZSB0cmFuc2ZlciBidWZmZXIKKwlkYXRhID0gcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJbWVtc2V0IChkYXRhLCAnMCcsIHBhY2tldF9sZW5ndGgpOworCisJbWVtY3B5IChkYXRhLCBidWYsIGNvdW50KTsKKworCWlmIChzYWZlKSB7CisJCV9fdTE2IGZjczsKKworCQkvLyBwYWQgaWYgbmVjZXNzYXJ5CisJCWlmICghcGFkZGVkKSB7CisJCQlwYWNrZXRfbGVuZ3RoID0gY291bnQgKyAyOworCQl9CisJCS8vIHNldCBjb3VudAorCQlkYXRhW3BhY2tldF9sZW5ndGggLSAyXSA9IGNvdW50IDw8IDI7CisJCWRhdGFbcGFja2V0X2xlbmd0aCAtIDFdID0gMDsKKworCQkvLyBjb21wdXRlIGZjcyBhbmQgaW5zZXJ0IGludG8gdHJhaWxlcgorCQlmY3MgPSBmY3NfY29tcHV0ZTEwIChkYXRhLCBwYWNrZXRfbGVuZ3RoLCBDUkMxMF9JTklURkNTKTsKKwkJZGF0YVtwYWNrZXRfbGVuZ3RoIC0gMl0gfD0gZmNzID4+IDg7CisJCWRhdGFbcGFja2V0X2xlbmd0aCAtIDFdIHw9IGZjcyAmIDB4ZmY7CisKKwkJLy8gc2V0IGxlbmd0aCB0byBzZW5kCisJCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHBhY2tldF9sZW5ndGg7CisJfSBlbHNlIHsKKwkJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gY291bnQ7CisJfQorCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGNvdW50LCBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcik7CisjaWZkZWYgRUNIT19UWAorCXsKKwkJaW50IGk7CisJCXVuc2lnbmVkIGNoYXIgKmNwID0gcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJCWZvciAoaSA9IDA7IGkgPCBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7IGkrKykgeworCQkJaWYgKChpICUgMzIpID09IDApIHsKKwkJCQlwcmludGsgKCJcbnN1WyUwMnhdICIsIGkpOworCQkJfQorCQkJcHJpbnRrICgiJTAyeCAiLCAqY3ArKyk7CisJCX0KKwkJcHJpbnRrICgiXG4iKTsKKwl9CisjZW5kaWYKKwlwb3J0LT53cml0ZV91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCWlmICgocmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIgKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0tFUk5FTCkpKSB7CisJCWVyciAoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJcmV0dXJuIDA7CisJfQorCWRiZyAoIiVzIHVyYjogJXAgc3VibWl0dGVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT53cml0ZV91cmIpOworCisJcmV0dXJuIChjb3VudCk7Cit9CisKK3N0YXRpYyBpbnQgc2FmZV93cml0ZV9yb29tIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCWludCByb29tID0gMDsJCS8vIERlZmF1bHQ6IG5vIHJvb20KKworCWRiZyAoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChwb3J0LT53cml0ZV91cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpCisJCXJvb20gPSBwb3J0LT5idWxrX291dF9zaXplIC0gKHNhZmUgPyAyIDogMCk7CisKKwlpZiAocm9vbSkgeworCQlkYmcgKCJzYWZlX3dyaXRlX3Jvb20gcmV0dXJucyAlZCIsIHJvb20pOworCX0KKworCXJldHVybiAocm9vbSk7Cit9CisKK3N0YXRpYyBpbnQgc2FmZV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN3aXRjaCAoc2VyaWFsLT5pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbCkgeworCWNhc2UgTElORU9fU0FGRVNFUklBTF9DUkM6CisJCWJyZWFrOworCWNhc2UgTElORU9fU0FGRVNFUklBTF9DUkNfUEFEREVEOgorCQlwYWRkZWQgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBzYWZlX2RldmljZSA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJCSJTYWZlIiwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGUsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQlOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19pbiA9CQlOVU1fRE9OVF9DQVJFLAorCS5udW1fYnVsa19vdXQgPQkJTlVNX0RPTlRfQ0FSRSwKKwkubnVtX3BvcnRzID0JCTEsCisJLndyaXRlID0JCXNhZmVfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJc2FmZV93cml0ZV9yb29tLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQlzYWZlX3JlYWRfYnVsa19jYWxsYmFjaywKKwkuYXR0YWNoID0JCXNhZmVfc3RhcnR1cCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNhZmVfaW5pdCAodm9pZCkKK3sKKwlpbnQgaSwgcmV0dmFsOworCisJaW5mbyAoRFJJVkVSX1ZFUlNJT04gIiAiIERSSVZFUl9BVVRIT1IpOworCWluZm8gKERSSVZFUl9ERVNDKTsKKwlpbmZvICgidmVuZG9yOiAleCBwcm9kdWN0OiAleCBzYWZlOiAlZCBwYWRkZWQ6ICVkXG4iLCB2ZW5kb3IsIHByb2R1Y3QsIHNhZmUsIHBhZGRlZCk7CisKKwkvLyBpZiB3ZSBoYXZlIHZlbmRvciAvIHByb2R1Y3QgcGFyYW1ldGVycyBwYXRjaCB0aGVtIGludG8gaWQgbGlzdAorCWlmICh2ZW5kb3IgfHwgcHJvZHVjdCkgeworCQlpbmZvICgidmVuZG9yOiAleCBwcm9kdWN0OiAleFxuIiwgdmVuZG9yLCBwcm9kdWN0KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZiAoaWRfdGFibGUpIC8gc2l6ZW9mIChzdHJ1Y3QgdXNiX2RldmljZV9pZCkpOyBpKyspIHsKKwkJCWlmICghaWRfdGFibGVbaV0uaWRWZW5kb3IgJiYgIWlkX3RhYmxlW2ldLmlkUHJvZHVjdCkgeworCQkJCWlkX3RhYmxlW2ldLmlkVmVuZG9yID0gdmVuZG9yOworCQkJCWlkX3RhYmxlW2ldLmlkUHJvZHVjdCA9IHByb2R1Y3Q7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZzYWZlX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnNhZmVfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisKKwlyZXR1cm4gMDsKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZzYWZlX2RldmljZSk7CitmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2FmZV9leGl0ICh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyICgmc2FmZV9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJnNhZmVfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQgKHNhZmVfaW5pdCk7Cittb2R1bGVfZXhpdCAoc2FmZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC90aV9md18zNDEwLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfZndfMzQxMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZTg4NTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfZndfMzQxMC5oCkBAIC0wLDAgKzEsODg1IEBACisvKiB2aTogdHM9OCBzdz04CisgKgorICogVEkgMzQxMCBVU0IgU2VyaWFsIERyaXZlciBGaXJtd2FyZSBIZWFkZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX1RJX0ZXXzM0MTBfSF8KKyNkZWZpbmUgX1RJX0ZXXzM0MTBfSF8KKworLyogZmlybXdhcmUgOS8xMC8wNCBGVzM0MTBfU3BlY2lhbF9TdGFydFdkb2dPblN0YXJ0UG9ydCAqLworCitzdGF0aWMgdW5zaWduZWQgY2hhciB0aV9md18zNDEwW10gPSB7CisweEMyLCAweDM1LAkvKiBmaXJtd2FyZSBpbWFnZSBsZW5ndGggZXhjbHVkaW5nIGhlYWRlciwgbGl0dGxlIGVuZGlhbiAqLworMHgwMCwgCQkvKiBwbGFjZWhvbGRlciBmb3IgY2hlY2tzdW0gKi8KKworMHgwMiwweDAwLDB4MWUsMHgwMiwweDFhLDB4ZGIsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4MDIsMHgzMiwweGNiLDB4ZmYsMHhmZiwKKzB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDAyLDB4MzMsMHg3NiwweDc1LDB4ODEsCisweGNlLDB4OTAsMHhmZCwweGU4LDB4ODUsMHg4MywweGEwLDB4MTIsMHgzNCwweGVhLDB4ZWMsMHg0ZCwweDYwLDB4NmEsMHg3OCwweGFiLAorMHg4MCwweDAzLDB4NzYsMHgwMCwweDE4LDB4YjgsMHg5YywweGZhLDB4NzgsMHg3ZiwweDgwLDB4MDMsMHg3NiwweDAwLDB4MTgsMHhiOCwKKzB4NjUsMHhmYSwweDc4LDB4MjAsMHg4MCwweDAzLDB4NzYsMHgwMCwweDE4LDB4YjgsMHgyMCwweGZhLDB4OTAsMHhmZCwweGRkLDB4YWUsCisweDgzLDB4YWYsMHg4MiwweDkwLDB4ZmIsMHhmOCwweDEyLDB4MDAsMHhhMSwweDYwLDB4MDUsMHhlNCwweGYwLDB4YTMsMHg4MCwweGY2LAorMHg5MCwweGZkLDB4ZTgsMHhhOCwweDgyLDB4OTAsMHhmZCwweGU4LDB4YTksMHg4MiwweGU4LDB4YzMsMHg5OSwweDUwLDB4MDUsMHg3NiwKKzB4MDAsMHgwOCwweDgwLDB4ZjYsMHg5MCwweDAwLDB4ZmYsMHgxMiwweDAwLDB4YWEsMHg5MCwweDAxLDB4MDMsMHgxMiwweDAwLDB4YWEsCisweDkwLDB4MDEsMHgwNywweDEyLDB4MDAsMHhhYSwweDkwLDB4MDEsMHgwYiwweDEyLDB4MDAsMHhjOCwweDkwLDB4MDEsMHgxMSwweDEyLAorMHgwMCwweGM4LDB4OTAsMHgwMSwweDE3LDB4MTIsMHgwMCwweGM4LDB4NzUsMHhkMCwweDAwLDB4MTIsMHgzMywweGM4LDB4MDIsMHgwMSwKKzB4MWQsMHhlZiwweDY1LDB4ODIsMHg3MCwweDAzLDB4ZWUsMHg2NSwweDgzLDB4MjIsMHhlNCwweDkzLDB4ZjgsMHg3NCwweDAxLDB4OTMsCisweGY5LDB4NzQsMHgwMiwweDkzLDB4ZmUsMHg3NCwweDAzLDB4OTMsMHhmNSwweDgyLDB4OGUsMHg4MywweGU4LDB4NjksMHg3MCwweDAxLAorMHgyMiwweGU0LDB4OTMsMHhmNiwweGEzLDB4MDgsMHg4MCwweGY0LDB4ZTQsMHg5MywweGZjLDB4NzQsMHgwMSwweDkzLDB4ZmQsMHg3NCwKKzB4MDIsMHg5MywweGZlLDB4NzQsMHgwMywweDkzLDB4ZmYsMHg3NCwweDA0LDB4OTMsMHhmOCwweDc0LDB4MDUsMHg5MywweGY1LDB4ODIsCisweDg4LDB4ODMsMHgxMiwweDAwLDB4YTEsMHg3MCwweDAxLDB4MjIsMHhlNCwweDkzLDB4YTMsMHhhOCwweDgzLDB4YTksMHg4MiwweDhjLAorMHg4MywweDhkLDB4ODIsMHhmMCwweGEzLDB4YWMsMHg4MywweGFkLDB4ODIsMHg4OCwweDgzLDB4ODksMHg4MiwweDgwLDB4ZTMsMHgyMSwKKzB4MjEsMHgwNCwweDkyLDB4ODAsMHg4MCwweDA0LDB4OTIsMHhhYywweGFlLDB4MDQsMHg5MiwweGZkLDB4ZTgsMHgwNCwweDk0LDB4MDQsCisweDk0LDB4ZmIsMHhmMywweDA0LDB4OTksMHgwNCwweDk0LDB4ZmIsMHhmMywweDA0LDB4ZjksMHgwNCwweGY5LDB4ODAsMHhmZSwweGQwLAorMHhmMCwweDMwLDB4ZjAsMHgwOSwweDIwLDB4ZjMsMHgwMywweGY2LDB4ODAsMHgxMCwweGY3LDB4ODAsMHgwZCwweDMwLDB4ZjEsMHgwOSwKKzB4MjAsMHhmMywweDAzLDB4ZjIsMHg4MCwweDA0LDB4ZjMsMHg4MCwweDAxLDB4ZjAsMHgyMCwweGY0LDB4MDQsMHhmYywweGQwLDB4ZTAsCisweGNjLDB4MjIsMHhjYywweGMwLDB4ZTAsMHgxMiwweDAxLDB4NWEsMHgwMiwweDAxLDB4NGIsMHhiYywweDAwLDB4MDUsMHhkMCwweGYwLAorMHhhYywweGYwLDB4MjIsMHhjMywweDEzLDB4ZGMsMHhmYywweDAyLDB4MDEsMHgyMSwweGJmLDB4MDAsMHgwOSwweGVkLDB4MjUsMHg4MiwKKzB4NzUsMHhmMCwweDAxLDB4ZjgsMHhlNiwweDIyLDB4YmYsMHgwMSwweDBmLDB4ZWQsMHgyNSwweDgyLDB4ZjUsMHg4MiwweGVlLDB4MzUsCisweDgzLDB4ZjUsMHg4MywweDc1LDB4ZjAsMHgwNCwweGUwLDB4MjIsMHhlZCwweDI1LDB4ODIsMHg3NSwweGYwLDB4MDIsMHhmOCwweGUyLAorMHgyMiwweGQwLDB4ODMsMHhkMCwweDgyLDB4ZjUsMHhmMCwweGMzLDB4ZTQsMHg5MywweGEzLDB4YzUsMHhmMCwweDk1LDB4ZjAsMHhjMCwKKzB4ZTAsMHhjMywweGQwLDB4ZjAsMHhlNCwweDkzLDB4YTMsMHg5NSwweGYwLDB4NDAsMHgxMiwweGEzLDB4YTMsMHhjMywweGU1LDB4ZjAsCisweDMzLDB4NTAsMHgwMiwweDA1LDB4ODMsMHgyNSwweDgyLDB4ZjUsMHg4MiwweDUwLDB4MDIsMHgwNSwweDgzLDB4NzQsMHgwMSwweDkzLAorMHhjMCwweGUwLDB4ZTQsMHg5MywweGMwLDB4ZTAsMHgyMiwweGQwLDB4ODMsMHhkMCwweDgyLDB4ZjUsMHhmMCwweGU0LDB4OTMsMHg3MCwKKzB4MDksMHg3NCwweDAxLDB4OTMsMHg3MCwweDA0LDB4YTMsMHhhMywweDgwLDB4MGMsMHg3NCwweDAyLDB4OTMsMHg2NSwweGYwLDB4NjAsCisweDA1LDB4YTMsMHhhMywweGEzLDB4ODAsMHhlNywweDc0LDB4MDEsMHg5MywweGMwLDB4ZTAsMHhlNCwweDkzLDB4YzAsMHhlMCwweDIyLAorMHgxMiwweDAyLDB4NWIsMHgwMiwweDAxLDB4ZjIsMHgxMiwweDAyLDB4YWYsMHgwMiwweDAxLDB4ZjIsMHgxMiwweDAyLDB4ZDMsMHgwMiwKKzB4MDEsMHhmMiwweDMwLDB4ZTAsMHgwNywweDIwLDB4ZTMsMHgwMiwweGU2LDB4MjIsMHhlNywweDIyLDB4MzAsMHhlMSwweDA3LDB4MjAsCisweGUzLDB4MDIsMHhlMiwweDIyLDB4ZTMsMHgyMiwweDMwLDB4ZTIsMHgwMiwweGUwLDB4MjIsMHhlNCwweDkzLDB4MjIsMHgxMiwweDAyLAorMHhkMywweDAyLDB4MDIsMHgxYSwweDEyLDB4MDIsMHhhZiwweDAyLDB4MDIsMHgxYSwweGFiLDB4ZjAsMHgxMiwweDAyLDB4MjQsMHhjYiwKKzB4YzUsMHhmMCwweGNiLDB4MjIsMHgzMCwweGUwLDB4MTAsMHgyMCwweGUzLDB4MDYsMHhlNiwweGY1LDB4ZjAsMHgwOCwweGU2LDB4MjIsCisweGU3LDB4ZjUsMHhmMCwweDA5LDB4ZTcsMHgxOSwweDIyLDB4MzAsMHhlMSwweDEwLDB4MjAsMHhlMywweDA2LDB4ZTIsMHhmNSwweGYwLAorMHgwOCwweGUyLDB4MjIsMHhlMywweGY1LDB4ZjAsMHgwOSwweGUzLDB4MTksMHgyMiwweDMwLDB4ZTIsMHgwNiwweGUwLDB4ZjUsMHhmMCwKKzB4YTMsMHhlMCwweDIyLDB4ZTQsMHg5MywweGY1LDB4ZjAsMHg3NCwweDAxLDB4OTMsMHgyMiwweGJiLDB4MDAsMHgwMywweDc0LDB4MDksCisweDIyLDB4YmIsMHgwMSwweDA3LDB4ODksMHg4MiwweDhhLDB4ODMsMHg3NCwweDA0LDB4MjIsMHhiYiwweDAyLDB4MDcsMHg4OSwweDgyLAorMHg4YSwweDgzLDB4NzQsMHgxMCwweDIyLDB4NzQsMHgwYSwweDIyLDB4MDIsMHgwMiwweDdiLDB4YmIsMHgwMCwweDA3LDB4ZTksMHgyNSwKKzB4ODIsMHhmOCwweDc0LDB4MDEsMHgyMiwweGJiLDB4MDEsMHgwZCwweGU5LDB4MjUsMHg4MiwweGY1LDB4ODIsMHhlYSwweDM1LDB4ODMsCisweGY1LDB4ODMsMHg3NCwweDA0LDB4MjIsMHhiYiwweDAyLDB4MGQsMHhlOSwweDI1LDB4ODIsMHhmNSwweDgyLDB4ZWEsMHgzNSwweDgzLAorMHhmNSwweDgzLDB4NzQsMHgxMCwweDIyLDB4ZTksMHgyNSwweDgyLDB4ZjgsMHg3NCwweDAyLDB4MjIsMHgwMiwweDAyLDB4YWYsMHhiZiwKKzB4MDAsMHgwNSwweGVkLDB4ZjgsMHg3NCwweDAxLDB4MjIsMHhiZiwweDAxLDB4MDcsMHg4ZCwweDgyLDB4OGUsMHg4MywweDc0LDB4MDQsCisweDIyLDB4YmYsMHgwMiwweDA3LDB4OGQsMHg4MiwweDhlLDB4ODMsMHg3NCwweDEwLDB4MjIsMHhlZCwweGY4LDB4NzQsMHgwMiwweDIyLAorMHgwMiwweDAyLDB4ZDMsMHhiZiwweDAwLDB4MDcsMHhlZCwweDI1LDB4ODIsMHhmOCwweDc0LDB4MDEsMHgyMiwweGJmLDB4MDEsMHgwZCwKKzB4ZWQsMHgyNSwweDgyLDB4ZjUsMHg4MiwweGVlLDB4MzUsMHg4MywweGY1LDB4ODMsMHg3NCwweDA0LDB4MjIsMHhiZiwweDAyLDB4MGQsCisweGVkLDB4MjUsMHg4MiwweGY1LDB4ODIsMHhlZSwweDM1LDB4ODMsMHhmNSwweDgzLDB4NzQsMHgxMCwweDIyLDB4ZWQsMHgyNSwweDgyLAorMHhmOCwweDc0LDB4MDIsMHgyMiwweDAyLDB4MDMsMHgwNywweGMwLDB4ZTAsMHgxMiwweDAyLDB4NWIsMHgwMiwweDAzLDB4MWYsMHhjMCwKKzB4ZTAsMHgxMiwweDAyLDB4YWYsMHgwMiwweDAzLDB4MWYsMHhjMCwweGUwLDB4MTIsMHgwMiwweGQzLDB4MDIsMHgwMywweDFmLDB4MzAsCisweGUwLDB4MGIsMHgyMCwweGUzLDB4MDQsMHhkMCwweGUwLDB4ZjYsMHgyMiwweGQwLDB4ZTAsMHhmNywweDIyLDB4MzAsMHhlMSwweDBiLAorMHgyMCwweGUzLDB4MDQsMHhkMCwweGUwLDB4ZjIsMHgyMiwweGQwLDB4ZTAsMHhmMywweDIyLDB4ZDAsMHhlMCwweGYwLDB4MjIsMHhjOSwKKzB4Y2QsMHhjOSwweGNhLDB4Y2UsMHhjYSwweGNiLDB4Y2YsMHhjYiwweDEyLDB4MDMsMHg1MiwweGVkLDB4ZjksMHhlZSwweGZhLDB4ZWYsCisweGZiLDB4MjIsMHhiYiwweDAwLDB4MmYsMHhiZiwweDAwLDB4MGEsMHhmYSwweGVkLDB4ZjgsMHhlNywweGY2LDB4MDgsMHgwOSwweGRhLAorMHhmYSwweDIyLDB4YmYsMHgwMSwweDEyLDB4OGQsMHg4MiwweDhlLDB4ODMsMHhmOCwweDAyLDB4MDMsMHg2ZiwweDA5LDB4YTMsMHhlNywKKzB4ZjAsMHhkOCwweGZhLDB4MjIsMHgwMiwweDAzLDB4N2EsMHhmYSwweGVkLDB4ZjgsMHhlNywweGYyLDB4MDgsMHgwOSwweGRhLDB4ZmEsCisweDIyLDB4MDIsMHgwMywweDg0LDB4YmIsMHgwMSwweDRkLDB4YmYsMHgwMCwweDE0LDB4ODksMHg4MiwweDhhLDB4ODMsMHhmOSwweGVkLAorMHhmOCwweDAyLDB4MDMsMHg5NiwweDA4LDB4YTMsMHhlMCwweGY2LDB4ZDksMHhmYSwweDIyLDB4MDIsMHgwMywweGE3LDB4YmYsMHgwMSwKKzB4MjIsMHg4ZCwweDgyLDB4OGUsMHg4MywweGZiLDB4MDgsMHhjOSwweGM1LDB4ODIsMHhjOSwweGNhLDB4YzUsMHg4MywweGNhLDB4ZTAsCisweGEzLDB4YzksMHhjNSwweDgyLDB4YzksMHhjYSwweGM1LDB4ODMsMHhjYSwweGYwLDB4YTMsMHhkYiwweGVhLDB4ZDgsMHhlOCwweDIyLAorMHgwMiwweDAzLDB4Y2EsMHg4ZCwweDgyLDB4OGUsMHg4MywweGY5LDB4ZWQsMHhmOCwweGUwLDB4ZjIsMHgwOCwweGEzLDB4ZDksMHhmYSwKKzB4MjIsMHgwMiwweDAzLDB4ZDQsMHhiYiwweDAyLDB4NGQsMHhiZiwweDAwLDB4MTIsMHg4OSwweDgyLDB4OGEsMHg4MywweGY5LDB4ZWQsCisweGY4LDB4MDIsMHgwMywweGU2LDB4MDgsMHhhMywweGU0LDB4OTMsMHhmNiwweGQ5LDB4ZjksMHgyMiwweGJmLDB4MDEsMHgyMywweDhkLAorMHg4MiwweDhlLDB4ODMsMHhmYiwweDA4LDB4YzksMHhjNSwweDgyLDB4YzksMHhjYSwweGM1LDB4ODMsMHhjYSwweGU0LDB4OTMsMHhhMywKKzB4YzksMHhjNSwweDgyLDB4YzksMHhjYSwweGM1LDB4ODMsMHhjYSwweGYwLDB4YTMsMHhkYiwweGU5LDB4ZDgsMHhlNywweDIyLDB4MDIsCisweDA0LDB4MTksMHg4OSwweDgyLDB4OGEsMHg4MywweGY5LDB4ZWQsMHhmOCwweGU0LDB4OTMsMHhmMiwweDA4LDB4YTMsMHhkOSwweGY5LAorMHgyMiwweDAyLDB4MDQsMHgyYSwweGJmLDB4MDAsMHgwZCwweGZhLDB4ZWQsMHhmOCwweGUzLDB4ZjYsMHgwOCwweDA5LDB4ZGEsMHhmYSwKKzB4MjIsMHgwMiwweDA0LDB4MzQsMHhiZiwweDAxLDB4MTIsMHg4ZCwweDgyLDB4OGUsMHg4MywweGY4LDB4MDIsMHgwNCwweDQxLDB4MDksCisweGEzLDB4ZTMsMHhmMCwweGQ4LDB4ZmEsMHgyMiwweDAyLDB4MDQsMHg0YywweGZhLDB4ZWQsMHhmOCwweGUzLDB4ZjIsMHgwOCwweDA5LAorMHhkYSwweGZhLDB4MjIsMHgwMiwweDA0LDB4NTYsMHhlNiwweGZiLDB4MDgsMHhlNiwweGZhLDB4MDgsMHhlNiwweGY5LDB4MDQsMHhmNiwKKzB4MTgsMHg3MCwweDAxLDB4MDYsMHgyMiwweGU2LDB4ZmYsMHgwOCwweGU2LDB4ZmUsMHgwOCwweGU2LDB4ZmQsMHgyMiwweGVmLDB4ZjAsCisweGEzLDB4ZWUsMHhmMCwweGEzLDB4ZWQsMHhmMCwweDIyLDB4ZWIsMHhmMCwweGEzLDB4ZWEsMHhmMCwweGEzLDB4ZTksMHhmMCwweDIyLAorMHhlMCwweGZmLDB4YTMsMHhlMCwweGZlLDB4YTMsMHhlMCwweGZkLDB4MjIsMHhlMCwweGZiLDB4YTMsMHhlMCwweGZhLDB4YTMsMHhlMCwKKzB4ZjksMHgyMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHhmOSwweDAwLDB4NjEsMHgwNSwweDY4LDB4MDAsCisweDI2LDB4MDUsMHg4ZiwweDAwLDB4MzMsMHgwYSwweDAwLDB4MDAsMHg2MSwweDBhLDB4NmMsMHgwMCwweDY2LDB4MTUsMHgxZCwweDAwLAorMHg2MSwweDBjLDB4ZjAsMHgwMCwweDYxLDB4MDksMHhhMCwweDAwLDB4NjEsMHgwOSwweGQ3LDB4MDAsMHg2MSwweDBkLDB4YjcsMHgwMCwKKzB4NjEsMHgwYiwweGU4LDB4MDAsMHg2MSwweDBhLDB4MTMsMHgwMCwweDYxLDB4MGEsMHg0OCwweDAwLDB4NjEsMHgxNywweDE1LDB4MDAsCisweDMzLDB4MTcsMHgyOCwweDAwLDB4MzQsMHgxZCwweGY2LDB4MDAsMHg0MywweDFlLDB4YTEsMHgwMCwweDQ0LDB4MjAsMHgwZSwweDAwLAorMHg0NCwweDFmLDB4ZmMsMHgwMCwweDQ3LDB4MWUsMHhjOCwweDAwLDB4NDcsMHgxZiwweDZkLDB4MDAsMHg0ZCwweDFmLDB4YmUsMHgwMCwKKzB4NGYsMHgxZSwweGVhLDB4MDAsMHg1OCwweDMyLDB4NTYsMHgwMCwweDYxLDB4N2MsMHhjYywweDdkLDB4ZmYsMHgxMiwweDFjLDB4YTcsCisweDIyLDB4OTAsMHhmZiwweGZjLDB4ZTAsMHgyMCwweGU3LDB4MmQsMHhjMiwweGFmLDB4YWUsMHg1OSwweGFmLDB4NTgsMHg3NSwweDVhLAorMHgyMCwweGU1LDB4NWEsMHgxNCwweGM1LDB4NWEsMHg2MCwweDE5LDB4ZTQsMHhmZSwweDdmLDB4MDUsMHhlZSwweDRmLDB4Y2UsMHgyNCwKKzB4ZmYsMHhjZSwweGNmLDB4MzQsMHhmZiwweGNmLDB4NjAsMHgwNywweGU0LDB4OTAsMHhmZiwweDkyLDB4ZjAsMHg4MCwweGVkLDB4ODAsCisweGUwLDB4OGUsMHg1OSwweDhmLDB4NTgsMHgyMiwweDEyLDB4MDUsMHgwMSwweDdkLDB4MDcsMHg3YywweGI3LDB4MTIsMHgzMiwweDcyLAorMHg3ZCwweDBmLDB4N2MsMHg2ZSwweDEyLDB4MzIsMHg4YywweDc4LDB4OWQsMHg3YSwweDA2LDB4ZTQsMHhmNiwweDA4LDB4ZGEsMHhmYywKKzB4N2EsMHgwNiwweDEyLDB4MDUsMHhjNCwweDdjLDB4MDMsMHgxMiwweDBlLDB4NGMsMHgxMiwweDIxLDB4NGEsMHhlNCwweGZlLDB4ZmYsCisweDdjLDB4MGYsMHgxMiwweDMxLDB4ZmIsMHhkMiwweGE4LDB4MjIsMHgxMiwweDMwLDB4ZTYsMHhlNCwweDkwLDB4ZmMsMHgzOCwweGYwLAorMHg5MCwweGZmLDB4ZjAsMHhlMCwweDMwLDB4ZTQsMHgwOCwweDc0LDB4MDEsMHg5MCwweGZjLDB4MzksMHhmMCwweDgwLDB4MDUsMHhlNCwKKzB4OTAsMHhmYywweDM5LDB4ZjAsMHg3ZCwweDBhLDB4N2MsMHgwMCwweDEyLDB4MjUsMHgyNiwweDEyLDB4MzEsMHg2OSwweDIyLDB4MTIsCisweDMwLDB4ZTYsMHg5MCwweGZjLDB4MzksMHhlMCwweDE0LDB4NzAsMHgwZSwweDkwLDB4ZmYsMHhmMCwweGUwLDB4NDQsMHgxMCwweGYwLAorMHg3YywweDAwLDB4MTIsMHgyNSwweGJmLDB4ODAsMHgxOSwweDkwLDB4ZmMsMHgzOSwweGUwLDB4NzAsMHgwZSwweDkwLDB4ZmYsMHhmMCwKKzB4ZTAsMHg1NCwweGVmLDB4ZjAsMHg3YywweDAwLDB4MTIsMHgyNSwweGJmLDB4ODAsMHgwNSwweDdjLDB4MTcsMHgxMiwweDI1LDB4YmYsCisweDEyLDB4MzEsMHg2OSwweDIyLDB4OTAsMHhmZiwweGYwLDB4ZTAsMHg1NCwweGFiLDB4ZjAsMHg5MCwweGZmLDB4ZjAsMHhlMCwweDQ0LAorMHgyMCwweGYwLDB4MjIsMHg4YywweDM3LDB4OGQsMHgzNiwweDc4LDB4ODIsMHhlZCwweGY2LDB4MDgsMHhlYywweGY2LDB4ZWQsMHhmZSwKKzB4ZWMsMHhmZCwweDdmLDB4MDEsMHg5MCwweDAwLDB4MDUsMHgxMiwweDAxLDB4ZWMsMHg3OCwweDgwLDB4ZjYsMHg3OCwweDgyLDB4ZTYsCisweGZkLDB4MDgsMHhlNiwweGZjLDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4OTAsMHgwMCwweDA0LDB4MTIsMHgwMSwweGVjLAorMHg1NCwweDBmLDB4ZmMsMHg3ZCwweDgwLDB4MTIsMHgxNywweDQ2LDB4NzgsMHg4MCwweGU2LDB4NzAsMHgwZCwweGFkLDB4M2EsMHhhZSwKKzB4MzksMHhhZiwweDM4LDB4ZTQsMHgxMiwweDAzLDB4MGYsMHg3YywweDA4LDB4MjIsMHg5MCwweGZmLDB4ZjAsMHhlMCwweDU0LDB4ZmUsCisweGYwLDB4OTAsMHhmZiwweGYwLDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHg4MCwweDFlLDB4NzgsMHg4MiwweGU2LDB4ZmQsMHgwOCwweGU2LAorMHhmYywweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweDkwLDB4MDAsMHgwOCwweDEyLDB4MDIsMHgwZSwweDI1LDB4ZTAsMHg0NCwKKzB4MDEsMHg5MCwweGZmLDB4ZjMsMHhmMCwweDAyLDB4MDYsMHhkMCwweDc4LDB4ODIsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4ZWQsCisweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsMHg5MCwweDAwLDB4MDYsMHgxMiwweDAyLDB4MGUsMHg1NCwweGZlLDB4OTAsMHhmZiwweGYzLAorMHhmMCwweDgwLDB4MmIsMHg3OCwweDgyLDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwKKzB4OTAsMHgwMCwweDA4LDB4MTIsMHgwMiwweDBlLDB4ZmEsMHhlYiwweDkwLDB4ZmYsMHhmMSwweGYwLDB4MTIsMHgwOCwweGJmLDB4NDAsCisweDBkLDB4YWQsMHgzYSwweGFlLDB4MzksMHhhZiwweDM4LDB4ZTQsMHgxMiwweDAzLDB4MGYsMHg3YywweDE4LDB4MjIsMHg3OCwweDgyLAorMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4OTAsMHgwMCwweDA4LDB4MTIsMHgwMiwKKzB4MGUsMHg5MCwweGZmLDB4ZjEsMHhmMCwweDEyLDB4MDgsMHhiZiwweDQwLDB4MGQsMHhhZCwweDNhLDB4YWUsMHgzOSwweGFmLDB4MzgsCisweGU0LDB4MTIsMHgwMywweDBmLDB4N2MsMHgxOCwweDIyLDB4NzgsMHg4MiwweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsMHhlZCwweGZlLAorMHhlYywweGZkLDB4N2YsMHgwMSwweDkwLDB4MDAsMHgwNiwweDEyLDB4MDIsMHgwZSwweDQ0LDB4MDEsMHg5MCwweGZmLDB4ZjMsMHhmMCwKKzB4NzgsMHg4MywweGU2LDB4MjQsMHgwMywweGY2LDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNiwweDc4LDB4ODAsMHhlNiwweDI0LDB4ZmUsCisweDUwLDB4MDksMHg5MCwweGZmLDB4ZjAsMHhlMCwweDU0LDB4ZmQsMHhmMCwweDgwLDB4MDcsMHg5MCwweGZmLDB4ZjAsMHhlMCwweDQ0LAorMHgwMiwweGYwLDB4ZTQsMHg5MCwweGZmLDB4ZjEsMHhmMCwweDc4LDB4ODEsMHg3NiwweDAwLDB4NzgsMHg4MCwweGU2LDB4MjQsMHhmZiwKKzB4ZmMsMHhlNCwweDM0LDB4ZmYsMHhmZCwweDc4LDB4ODEsMHhlNiwweDdmLDB4MDAsMHhmZSwweGVjLDB4ZDMsMHg5ZSwweGVmLDB4NjQsCisweDgwLDB4Y2QsMHg2NCwweDgwLDB4OWQsMHg0MCwweDJmLDB4MTIsMHgwOCwweGE0LDB4NDAsMHgwZiwweDc4LDB4ODEsMHhlNiwweGFkLAorMHgzYSwweGFlLDB4MzksMHhhZiwweDM4LDB4MTIsMHgwMywweDBmLDB4N2MsMHgxOCwweDIyLDB4OTAsMHhmZiwweGYyLDB4ZTAsMHhmYywKKzB4NzgsMHg4MiwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlYywweGYwLDB4NzgsMHg4MSwweDA2LDB4YTMsMHg3OCwweDgyLDB4YTYsCisweDgzLDB4MDgsMHhhNiwweDgyLDB4ODAsMHhiNSwweDEyLDB4MDgsMHhhNCwweDQwLDB4MGYsMHg3OCwweDgxLDB4ZTYsMHhhZCwweDNhLAorMHhhZSwweDM5LDB4YWYsMHgzOCwweDEyLDB4MDMsMHgwZiwweDdjLDB4MTgsMHgyMiwweDkwLDB4ZmYsMHhmMiwweGUwLDB4ZmMsMHg3OCwKKzB4ODIsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZWMsMHhmMCwweDc4LDB4ODAsMHhlNiwweGFkLDB4M2EsMHhhZSwweDM5LDB4YWYsCisweDM4LDB4MTIsMHgwMywweDBmLDB4N2MsMHgwMCwweDIyLDB4OGMsMHgzNywweDhkLDB4MzYsMHg3OCwweDgyLDB4ZWQsMHhmNiwweDA4LAorMHhlYywweGY2LDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4OTAsMHgwMCwweDA1LDB4MTIsMHgwMSwweGVjLDB4NzgsMHg4MSwKKzB4ZjYsMHg3OCwweDgyLDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweDkwLDB4MDAsCisweDA0LDB4MTIsMHgwMSwweGVjLDB4NTQsMHgwZiwweGZjLDB4N2QsMHg4MSwweDEyLDB4MTcsMHg0NiwweDc4LDB4ODEsMHhlNiwweDcwLAorMHgwMywweDdjLDB4MDgsMHgyMiwweDkwLDB4ZmYsMHhmMCwweGUwLDB4NTQsMHhmZSwweGYwLDB4OTAsMHhmZiwweGYwLDB4ZTAsMHg1NCwKKzB4ZmQsMHhmMCwweDgwLDB4MWIsMHg3OCwweDgyLDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsCisweDAxLDB4OTAsMHgwMCwweDA4LDB4MTIsMHgwMiwweDBlLDB4MjUsMHhlMCwweDkwLDB4ZmYsMHhmMywweGYwLDB4ODAsMHg1YiwweDc4LAorMHg4MiwweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsMHhlZCwweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsMHg5MCwweDAwLDB4MDYsMHgxMiwKKzB4MDIsMHgwZSwweDU0LDB4ZmUsMHg5MCwweGZmLDB4ZjMsMHhmMCwweDgwLDB4MjEsMHg3OCwweDgyLDB4ZTYsMHhmZCwweDA4LDB4ZTYsCisweGZjLDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4OTAsMHgwMCwweDA4LDB4MTIsMHgwMiwweDBlLDB4ZmEsMHhlYiwweDkwLAorMHhmZiwweGYxLDB4ZjAsMHgxMiwweDA4LDB4YmYsMHg0MCwweDAzLDB4N2MsMHgxOCwweDIyLDB4NzgsMHg4MiwweGU2LDB4ZmQsMHgwOCwKKzB4ZTYsMHhmYywweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweDkwLDB4MDAsMHgwOCwweDEyLDB4MDIsMHgwZSwweDkwLDB4ZmYsCisweGYxLDB4ZjAsMHgxMiwweDA4LDB4YmYsMHg0MCwweDAzLDB4N2MsMHgxOCwweDIyLDB4NzgsMHg4MywweGU2LDB4MjQsMHgwYSwweGY2LAorMHgxOCwweGU2LDB4MzQsMHgwMCwweGY2LDB4NzgsMHg4MCwweDc2LDB4MDAsMHg3OCwweDgxLDB4ZTYsMHgyNCwweGZmLDB4ZmMsMHhlNCwKKzB4MzQsMHhmZiwweGZkLDB4NzgsMHg4MCwweGU2LDB4N2YsMHgwMCwweGZlLDB4ZWMsMHhkMywweDllLDB4ZWYsMHg2NCwweDgwLDB4Y2QsCisweDY0LDB4ODAsMHg5ZCwweDQwLDB4MjEsMHg3OCwweDgyLDB4ODYsMHg4MywweDA4LDB4ODYsMHg4MiwweGUwLDB4OTAsMHhmZiwweGYxLAorMHhmMCwweDEyLDB4MDgsMHhiZiwweDQwLDB4MDMsMHg3YywweDE4LDB4MjIsMHg3OCwweDgwLDB4MDYsMHg3OCwweDgzLDB4MDYsMHhlNiwKKzB4MTgsMHg3MCwweDAxLDB4MDYsMHg4MCwweGMzLDB4OTAsMHhmZiwweGYwLDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg3OCwweDgyLDB4ODYsCisweDgzLDB4MDgsMHg4NiwweDgyLDB4ZTAsMHg5MCwweGZmLDB4ZjEsMHhmMCwweDEyLDB4MDgsMHhiZiwweDQwLDB4MDMsMHg3YywweDE4LAorMHgyMiwweDdjLDB4MDAsMHgyMiwweDkwLDB4ZmYsMHhmMCwweGUwLDB4MjAsMHhlNywweDEyLDB4OTAsMHhmZiwweGYwLDB4ZTAsMHgzMCwKKzB4ZTUsMHgwOSwweDkwLDB4ZmYsMHhmMCwweGUwLDB4NDQsMHgyMCwweGYwLDB4YzMsMHgyMiwweDgwLDB4ZTcsMHhkMywweDIyLDB4OTAsCisweGZmLDB4ZjAsMHhlMCwweDIwLDB4ZTMsMHgxMiwweDkwLDB4ZmYsMHhmMCwweGUwLDB4MzAsMHhlNSwweDA5LDB4OTAsMHhmZiwweGYwLAorMHhlMCwweDQ0LDB4MjAsMHhmMCwweGMzLDB4MjIsMHg4MCwweGU3LDB4ZDMsMHgyMiwweDhjLDB4NDIsMHg4ZCwweDQxLDB4N2MsMHgwMCwKKzB4ZWQsMHg1NCwweGYwLDB4ZmQsMHhlYywweDcwLDB4MDMsMHhlZCwweDY0LDB4MzAsMHg3MCwweDA1LDB4NzUsMHgzZSwweDAzLDB4ODAsCisweDAzLDB4NzUsMHgzZSwweDA0LDB4YWMsMHgzZSwweDEyLDB4MGYsMHg2OSwweDc1LDB4ODMsMHgwMCwweDg1LDB4ODMsMHg0MCwweGU1LAorMHg0MSwweDU0LDB4MGYsMHhmNSwweDNmLDB4ZTUsMHg0MCwweDcwLDB4MDQsMHhlNSwweDNmLDB4NjQsMHgwMywweDcwLDB4MzUsMHhlNSwKKzB4M2UsMHgyNCwweGZkLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweDAyLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywweGY1LDB4ODMsCisweGUwLDB4MzAsMHhlNiwweDA1LDB4MTIsMHgxMCwweDRiLDB4ODAsMHgxOSwweGU1LDB4M2UsMHgyNCwweDlkLDB4ZjgsMHhjNiwweDU0LAorMHhmYiwweGY2LDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHg3NCwKKzB4MGYsMHhmMCwweDgwLDB4NTksMHhlNSwweDQwLDB4NzAsMHgwNCwweGU1LDB4M2YsMHg2NCwweDA0LDB4NzAsMHg0OCwweGU1LDB4M2UsCisweDI0LDB4ZmQsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4MDIsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZjLDB4ZjUsMHg4MywweGUwLAorMHgzMCwweGU1LDB4MDcsMHhhYywweDQyLDB4YWQsMHg0MSwweDEyLDB4MWMsMHgzYywweGU1LDB4NDIsMHgzMCwweGUyLDB4MTUsMHg3OCwKKzB4YWQsMHhlNiwweDMwLDB4ZTAsMHgwZiwweDc4LDB4YWQsMHhlNiwweDMwLDB4ZTEsMHgwOSwweGU0LDB4ZmYsMHgwNCwweGZlLDB4N2MsCisweDA0LDB4MTIsMHgzMSwweGZiLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwNiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LAorMHg4MywweDc0LDB4MGYsMHhmMCwweDgwLDB4MDcsMHhlNCwweGZjLDB4N2QsMHhlZSwweDEyLDB4MWMsMHgzYywweGMyLDB4MDMsMHgyMiwKKzB4MTIsMHgzMCwweGU2LDB4MTIsMHgwZiwweDY5LDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwNiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsCisweDAwLDB4ZjUsMHg4MywweGUwLDB4OTAsMHhmYywweDM4LDB4ZjAsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwweDE4LAorMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg5MCwweGZjLDB4MzksMHhmMCwweGMyLDB4MDMsMHg3ZCwweDAyLDB4N2MsMHgwMCwKKzB4MTIsMHgyNSwweDI2LDB4MTIsMHgzMSwweDY5LDB4MjIsMHgxMiwweDMwLDB4ZTYsMHg3OCwweDk1LDB4ZWMsMHhmNiwweGVjLDB4MjQsCisweDlkLDB4ZjgsMHhlNiwweDMwLDB4ZTEsMHgwNywweDdjLDB4MTMsMHgxMiwweDI1LDB4YmYsMHg4MCwweDBmLDB4OTAsMHhmYywweDM5LAorMHhlMCwweGZkLDB4NzgsMHg5NSwweGU2LDB4ZmMsMHgxMiwweDEzLDB4YzgsMHgxMiwweDI1LDB4YmYsMHgxMiwweDMxLDB4NjksMHgyMiwKKzB4MTIsMHgzMCwweGU2LDB4NzgsMHg5NSwweGVjLDB4ZjYsMHg3ZCwweDAwLDB4MTIsMHgwZiwweDA5LDB4MTIsMHgyNSwweGJmLDB4MTIsCisweDMxLDB4NjksMHgyMiwweDEyLDB4MzAsMHhlNiwweDc4LDB4OTUsMHhlYywweGY2LDB4ZWMsMHgyNCwweDlkLDB4ZjgsMHhlNiwweDMwLAorMHhlMiwweDA3LDB4N2MsMHgxMywweDEyLDB4MjUsMHhiZiwweDgwLDB4MWIsMHg3OCwweDk1LDB4ZTYsMHgyNCwweDlkLDB4ZjgsMHhlNiwKKzB4MjAsMHhlMSwweDA3LDB4N2MsMHgxMiwweDEyLDB4MjUsMHhiZiwweDgwLDB4MGEsMHg3OCwweDk1LDB4ZTYsMHhmYywweDEyLDB4MTMsCisweGVjLDB4MTIsMHgyNSwweGJmLDB4MTIsMHgzMSwweDY5LDB4MjIsMHgxMiwweDMwLDB4ZTYsMHg3OCwweDk1LDB4ZWMsMHhmNiwweGVjLAorMHgyNCwweDlkLDB4ZjgsMHhlNiwweDIwLDB4ZTIsMHgwNywweDdjLDB4MTEsMHgxMiwweDI1LDB4YmYsMHg4MCwweDBhLDB4NzgsMHg5NSwKKzB4ZTYsMHhmYywweDEyLDB4MTQsMHhlZCwweDEyLDB4MjUsMHhiZiwweDEyLDB4MzEsMHg2OSwweDIyLDB4MTIsMHgzMCwweGU2LDB4NzgsCisweDk1LDB4ZWMsMHhmNiwweDEyLDB4MGYsMHg2OSwweDc4LDB4YTksMHhlNiwweDI0LDB4MDksMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LAorMHgwMCwweGY1LDB4ODMsMHhlMCwweDkwLDB4ZmMsMHgzZiwweGYwLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwYSwweGY1LDB4ODIsMHgxOCwKKzB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4OTAsMHhmYywweDQwLDB4ZjAsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDAzLDB4ZjUsCisweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHhmYywweDc4LDB4YTksMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLAorMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweGY1LDB4NjIsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwKKzB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHhmNSwweDYzLDB4OGMsMHg2MSwweGU0LDB4ZWMsMHgzMywweDMzLDB4NTQsCisweDAxLDB4NzgsMHg5NSwweGY2LDB4NjAsMHgwOCwweGU1LDB4NjIsMHgzMCwweGUxLDB4MDMsMHg3OCwweDk1LDB4MDYsMHg3OCwweDk1LAorMHhlNiwweDkwLDB4ZmMsMHg0MSwweGYwLDB4NzgsMHhhNywweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwKKzB4ZjUsMHg4MywweGUwLDB4ZmQsMHhhMywweGUwLDB4NTQsMHgwYywweGZjLDB4ZWQsMHg1NCwweGU2LDB4OGMsMHg2NSwweGY1LDB4NjQsCisweGU1LDB4NjEsMHgzMCwweGU1LDB4MDMsMHg0MywweDY1LDB4MDEsMHhlNSwweDYyLDB4MjAsMHhlNSwweDBlLDB4ZTUsMHg2MSwweDU0LAorMHg3ZiwweDcwLDB4MDgsMHhlNSwweDYxLDB4MjAsMHhlNywweDAzLDB4NDMsMHg2NSwweDAyLDB4ZTUsMHg2MSwweDMwLDB4ZTMsMHgwMywKKzB4NDMsMHg2NSwweDEwLDB4ZTUsMHg2MSwweDMwLDB4ZTIsMHgwMywweDQzLDB4NjUsMHgyMCwweGU1LDB4NjEsMHg1NCwweDAzLDB4NjAsCisweDAzLDB4NDMsMHg2NSwweDQwLDB4ZTUsMHg2MSwweDMwLDB4ZTEsMHgwMywweDQzLDB4NjUsMHg4MCwweGU1LDB4NjEsMHgzMCwweGU0LAorMHgwMywweDQzLDB4NjQsMHgwMSwweGU1LDB4NjEsMHgzMCwweGU2LDB4MDMsMHg0MywweDY0LDB4MDgsMHhlNSwweDYyLDB4MjAsMHhlNCwKKzB4MGUsMHhlNSwweDYxLDB4NTQsMHg3ZiwweDcwLDB4MDgsMHhlNSwweDYxLDB4MjAsMHhlNywweDAzLDB4NDMsMHg2NCwweDEwLDB4NTMsCisweDY1LDB4ZmIsMHg1MywweDY0LDB4NzksMHhhZCwweDY0LDB4ZTUsMHg2NSwweDkwLDB4ZmMsMHgzYSwweGNkLDB4ZjAsMHhhMywweGNkLAorMHhmMCwweGU1LDB4NjMsMHgzMCwweGUzLDB4MGQsMHhlNSwweDYzLDB4NTQsMHgzMCwweGM0LDB4NTQsMHgwZiwweDkwLDB4ZmMsMHgzZCwKKzB4ZjAsMHg4MCwweDA1LDB4ZTQsMHg5MCwweGZjLDB4M2QsMHhmMCwweGU1LDB4NjMsMHg1NCwweDAzLDB4OTAsMHhmYywweDNjLDB4ZjAsCisweGU1LDB4NjMsMHg1NCwweDA0LDB4YzMsMHgxMywweDkwLDB4ZmMsMHgzZSwweGYwLDB4OTAsMHhmYywweDNjLDB4ZTAsMHg3MCwweDBlLAorMHg3ZCwweDM1LDB4N2UsMHhmYywweDdmLDB4MDEsMHg3NCwweDAxLDB4OTAsMHgwMCwweDA5LDB4MTIsMHgwMSwweDQyLDB4NzgsMHhhOSwKKzB4ZTYsMHgyNCwweDA4LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4N2MsMHgwMCwweGZkLDB4NzgsCisweGE5LDB4ZTYsMHgyNCwweDA3LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4N2YsMHgwMCwweDRjLAorMHhmZSwweGVmLDB4NGQsMHg5MCwweGZjLDB4MzgsMHhmMCwweGEzLDB4Y2UsMHhmMCwweGNlLDB4YzIsMHgwMywweDdkLDB4MGEsMHg3YywKKzB4MDAsMHgxMiwweDI1LDB4MjYsMHgxMiwweDMxLDB4NjksMHgyMiwweDEyLDB4MzAsMHhlNiwweDc4LDB4OTUsMHhlYywweGY2LDB4NzgsCisweDlhLDB4NzYsMHgwMSwweDA4LDB4NzYsMHhmYywweDA4LDB4NzYsMHgzOCwweDc4LDB4OTcsMHg3NiwweDBjLDB4NzgsMHg5YSwweDEyLAorMHgwNCwweDY1LDB4MTIsMHgwMiwweDE0LDB4NzgsMHg5OCwweGNiLDB4ZjYsMHhjYiwweDA4LDB4ZjYsMHg3ZiwweDAwLDB4ZWYsMHgyNCwKKzB4ZWEsMHg0MCwweDFmLDB4ZTQsMHhlZiwweDI1LDB4ZTAsMHg5MCwweDM1LDB4MmMsMHhmZCwweDkzLDB4Y2QsMHgwNCwweDkzLDB4NzgsCisweDk5LDB4NjYsMHg3MCwweDAzLDB4ZWQsMHgxOCwweDY2LDB4NzAsMHgwNiwweDc4LDB4OTcsMHg3NiwweDAwLDB4ODAsMHgwMywweDBmLAorMHg4MCwweGRjLDB4NzgsMHg5NiwweGVmLDB4ZjYsMHg3OCwweDlhLDB4MTIsMHgwNCwweDY1LDB4OTAsMHgwMCwweDAyLDB4MTIsMHgwMiwKKzB4MGUsMHg3OCwweDk4LDB4Y2IsMHhmNiwweGNiLDB4MDgsMHhmNiwweDU0LDB4MDQsMHhjYiwweDU0LDB4ODYsMHg0YiwweDYwLDB4MDQsCisweDc4LDB4OTcsMHg3NiwweDBiLDB4NzgsMHg5OSwweGU2LDB4MzAsMHhlMywweDEzLDB4NzgsMHg5YSwweDEyLDB4MDQsMHg2NSwweDkwLAorMHgwMCwweDA1LDB4MTIsMHgwMSwweGVjLDB4MjQsMHhmYiwweDUwLDB4MDQsMHg3OCwweDk3LDB4NzYsMHgwZCwweDc4LDB4OTksMHhlNiwKKzB4NTQsMHhjMCwweDdkLDB4MDAsMHg2NCwweGMwLDB4NGQsMHg3MCwweDA0LDB4NzgsMHg5NywweDc2LDB4MGIsMHg3OCwweDlhLDB4MTIsCisweDA0LDB4NjUsMHg5MCwweDAwLDB4MDQsMHgxMiwweDAxLDB4ZWMsMHgyNCwweGZjLDB4NTAsMHgwNCwweDc4LDB4OTcsMHg3NiwweDBmLAorMHg3OCwweDlhLDB4MTIsMHgwNCwweDY1LDB4OTAsMHgwMCwweDA2LDB4MTIsMHgwMSwweGVjLDB4MjQsMHhmZCwweDUwLDB4MDQsMHg3OCwKKzB4OTcsMHg3NiwweDBlLDB4NzgsMHg5YSwweDEyLDB4MDQsMHg2NSwweDkwLDB4MDAsMHgwOSwweDEyLDB4MDEsMHhlYywweDI0LDB4ZmQsCisweDUwLDB4MDQsMHg3OCwweDk3LDB4NzYsMHgwYSwweDc4LDB4OTcsMHhlNiwweDcwLDB4MmEsMHg3OCwweDk1LDB4ZTYsMHhmYywweDEyLAorMHgwZiwweDY5LDB4NzgsMHg5YSwweDEyLDB4MDQsMHg2NSwweDc4LDB4YTcsMHhlNiwweGY5LDB4NzgsMHhhNiwweGU2LDB4ZmEsMHg3YiwKKzB4MDEsMHg3NCwweDBhLDB4NzgsMHgwMCwweDEyLDB4MDMsMHgzZiwweGMyLDB4MDMsMHg3OCwweDk1LDB4ZTYsMHhmYywweDEyLDB4MTEsCisweDA3LDB4NzgsMHg5NywweGVjLDB4ZjYsMHg3OCwweDk3LDB4ZTYsMHhmYywweDEyLDB4MjUsMHhiZiwweDEyLDB4MzEsMHg2OSwweDIyLAorMHgxMiwweDMwLDB4ZTYsMHg3OCwweDk1LDB4ZWMsMHhmNiwweDEyLDB4MGYsMHg2OSwweDc4LDB4OTUsMHhlNiwweDI0LDB4ZmQsMHg3NSwKKzB4ZjAsMHgwYSwweGE0LDB4MjQsMHgxNCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmMsMHhmNSwweDgzLDB4YWMsMHg4MiwweGFkLDB4ODMsCisweDc4LDB4YTYsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZWMsMHhmOSwweGVkLDB4ZmEsMHg3YiwweDBhLDB4NzgsMHgwMSwweDEyLAorMHgwMywweGE3LDB4YzIsMHgwMywweDc4LDB4OTUsMHhlNiwweGZjLDB4MTIsMHgxMSwweDA3LDB4MTIsMHgzMSwweDY5LDB4MjIsMHg4ZCwKKzB4MmIsMHg4YywweDJhLDB4ZWQsMHg2MCwweDQwLDB4NzUsMHgyNywweDAxLDB4NzUsMHgyOSwweDQ4LDB4NzUsMHgyOCwweGZmLDB4ZTUsCisweDJhLDB4MjQsMHhmZCwweGZjLDB4ZTQsMHgzNCwweGZmLDB4ZmQsMHhlYywweDdjLDB4MDMsMHgyNSwweGUwLDB4Y2QsMHgzMywweGNkLAorMHhkYywweGY5LDB4ZmMsMHhlNSwweDI5LDB4MmMsMHhmNSwweDI5LDB4ZTUsMHgyOCwweDNkLDB4ZjUsMHgyOCwweGFkLDB4MjksMHhhZSwKKzB4MjgsMHhhZiwweDI3LDB4NzQsMHg4MCwweDkwLDB4MDAsMHgwNiwweDEyLDB4MDMsMHgxNywweDc0LDB4ODAsMHg5MCwweDAwLDB4MDIsCisweDEyLDB4MDMsMHgxNywweDEyLDB4MGYsMHhiNywweGU1LDB4MmIsMHgxNCwweDYwLDB4M2IsMHg3NSwweDI3LDB4MDEsMHg3NSwweDI5LAorMHgwOCwweDc1LDB4MjgsMHhmZiwweGU1LDB4MmEsMHgyNCwweGZkLDB4ZmMsMHhlNCwweDM0LDB4ZmYsMHhmZCwweGVjLDB4N2MsMHgwMywKKzB4MjUsMHhlMCwweGNkLDB4MzMsMHhjZCwweGRjLDB4ZjksMHhmYywweGU1LDB4MjksMHgyYywweGY1LDB4MjksMHhlNSwweDI4LDB4M2QsCisweGY1LDB4MjgsMHhhZCwweDI5LDB4YWUsMHgyOCwweGFmLDB4MjcsMHhlNCwweDkwLDB4MDAsMHgwNiwweDEyLDB4MDMsMHgxNywweGU0LAorMHg5MCwweDAwLDB4MDIsMHgxMiwweDAzLDB4MTcsMHgyMiwweDEyLDB4MzAsMHhlNiwweDc4LDB4OTUsMHhlYywweGY2LDB4ZWMsMHgyNCwKKzB4OWQsMHhmOCwweGU2LDB4MzAsMHhlMiwweDA5LDB4NzgsMHg5NSwweGU2LDB4ZmMsMHgxMiwweDE0LDB4ZWQsMHhkMiwweDAwLDB4NzgsCisweDk1LDB4ZTYsMHhmYywweDEyLDB4MGYsMHg2OSwweDc4LDB4OTYsMHg3NiwweDAwLDB4OTAsMHhmYywweDM5LDB4ZTAsMHgzMCwweGU3LAorMHgwNCwweDc4LDB4OTYsMHg3NiwweDAxLDB4NzgsMHg5NiwweGU2LDB4ZmQsMHg3OCwweDk1LDB4ZTYsMHhmYywweDEyLDB4MGQsMHgyZiwKKzB4YzIsMHgwMywweDMwLDB4MDAsMHgwNywweDc4LDB4OTUsMHhlNiwweGZjLDB4MTIsMHgxMywweGVjLDB4N2MsMHgwMCwweDEyLDB4MjUsCisweGJmLDB4MTIsMHgzMSwweDY5LDB4MjIsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwKKzB4MDAsMHhmNSwweDgzLDB4ZTAsMHgzMCwweGUwLDB4MDIsMHg4MCwweGVkLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwYiwweGY1LDB4ODIsCisweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NTQsMHhmOCwweGYwLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwMiwweGY1LAorMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NDQsMHg4MCwweGYwLDB4MjIsMHhjMiwweDAzLDB4OGMsMHg1OCwKKzB4MTIsMHgwZiwweDY5LDB4NzgsMHhhNiwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHg3OSwweDVkLDB4N2EsMHgzNSwweDdiLDB4MGEsCisweDc4LDB4MDEsMHgxMiwweDAzLDB4ZjUsMHgxMiwweDBlLDB4MDUsMHhhYywweDU4LDB4N2QsMHgwMiwweDEyLDB4MGQsMHgyZiwweGMyLAorMHgwMywweGFjLDB4NTgsMHgxMiwweDExLDB4MDcsMHgyMiwweDhkLDB4NTMsMHg4ZSwweDUyLDB4OGYsMHg1MSwweDhjLDB4NTAsMHgxMiwKKzB4MGYsMHg2OSwweDc1LDB4NGYsMHgwMCwweDc4LDB4YTksMHhlNiwweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsCisweGY1LDB4ODMsMHhlMCwweDIwLDB4ZTQsMHgxZiwweGU1LDB4NGYsMHgyNCwweGY2LDB4NDAsMHgxOSwweDA1LDB4NGYsMHhjMiwweDAzLAorMHg3YywweDE4LDB4MTIsMHgzMiwweGE5LDB4OTAsMHhmZiwweDkzLDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHhiMiwweGIzLDB4YWMsMHg1MCwKKzB4MTIsMHgwZiwweDY5LDB4ODAsMHhkMCwweDc4LDB4YTksMHhlNiwweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsCisweGY1LDB4ODMsMHhlMCwweDIwLDB4ZTQsMHgwNSwweGMyLDB4MDMsMHg3YywweDAyLDB4MjIsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA1LAorMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg1NCwweDBmLDB4NjAsMHgxNiwweDc4LDB4YTksMHhlNiwKKzB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDU0LDB4MGYsMHhmMCwweGMyLDB4MDMsCisweDdjLDB4MDEsMHgyMiwweDc4LDB4YTgsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZTAsMHhhZCwweDUzLDB4YWUsMHg1MiwweGFmLAorMHg1MSwweDEyLDB4MDMsMHgwZiwweGMyLDB4MDMsMHg3YywweDAwLDB4MjIsMHg4ZCwweDMxLDB4OGMsMHgzMCwweDEyLDB4MTQsMHhlZCwKKzB4ZTUsMHgzMSwweDYwLDB4MGYsMHhlNSwweDMwLDB4YjQsMHgwMywweDBhLDB4N2MsMHgwMSwweDEyLDB4MjQsMHhlZSwweDdjLDB4ODEsCisweDEyLDB4MjQsMHhlZSwweGFjLDB4MzAsMHgxMiwweDBmLDB4NjksMHhlNSwweDMxLDB4NjAsMHgxYSwweDc4LDB4YWEsMHg4NiwweDgzLAorMHgwOCwweDg2LDB4ODIsMHhlMCwweDU0LDB4ZTcsMHhmMCwweGEzLDB4YTMsMHhhMywweGEzLDB4ZTAsMHg1NCwweGU3LDB4ZjAsMHhhYywKKzB4MzAsMHg3ZCwweDAyLDB4MTIsMHgwZCwweDJmLDB4NzgsMHhhNiwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHg3OSwweDY3LDB4N2EsCisweDM1LDB4N2IsMHgwYSwweDc4LDB4MDEsMHgxMiwweDAzLDB4ZjUsMHhjMiwweDAzLDB4ZTUsMHgzMCwweDI0LDB4OWQsMHhmOCwweGM2LAorMHg1NCwweGZkLDB4ZjYsMHhhYywweDMwLDB4MTIsMHgxMSwweDA3LDB4MjIsMHg4YywweDI2LDB4MzAsMHgwMywweDA1LDB4MTIsMHgzMiwKKzB4NDgsMHg4MCwweGY4LDB4N2MsMHgwYSwweDEyLDB4MzEsMHg1YiwweGQyLDB4MDMsMHhlNSwweDI2LDB4MjQsMHhmZCwweDc4LDB4YTMsCisweGY2LDB4NzAsMHgwNywweDc4LDB4YWEsMHg3NiwweGZmLDB4MDgsMHg3NiwweGUwLDB4NzgsMHhhMywweGU2LDB4NzUsMHhmMCwweDEwLAorMHhhNCwweGFkLDB4ZjAsMHhmYywweDI0LDB4YTAsMHg3OCwweGE5LDB4ZjYsMHhlZCwweDM0LDB4ZmYsMHgxOCwweGY2LDB4NzgsMHhhMywKKzB4ZTYsMHg3NSwweGYwLDB4MGEsMHhhNCwweDI0LDB4MDAsMHhmYywweGU0LDB4MzQsMHhmYywweGZkLDB4NzgsMHhhNiwweGVkLDB4ZjYsCisweDA4LDB4ZWMsMHhmNiwweDEyLDB4MzEsMHhmNCwweDIyLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LAorMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4MzAsMHhlNywweDIyLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwKKzB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NTQsMHg3ZiwweGYwLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsCisweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NDQsMHg4MCwweGYwLDB4MjIsMHg3OCwweGFhLDB4ODYsMHg4MywweDA4LAorMHg4NiwweDgyLDB4ZTAsMHg1NCwweDdmLDB4ZjAsMHhhZCwweDgzLDB4ZTUsMHg4MiwweDI0LDB4MDQsMHhmYywweGU0LDB4M2QsMHg4YywKKzB4ODIsMHhmNSwweDgzLDB4ZTAsMHg1NCwweDdmLDB4ZjAsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDBiLDB4ZjUsMHg4MiwweDE4LDB4ZTYsCisweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg1NCwweGY4LDB4ZjAsMHg3OCwweGFiLDB4ZTYsMHgyNCwweDAxLDB4ZjUsMHg4MiwweDE4LAorMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg0NCwweDAzLDB4ZjAsMHg3OCwweGFiLDB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwKKzB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg0NCwweDAzLDB4ZjAsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA1LDB4ZjUsCisweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4NzQsMHgwZiwweGYwLDB4MjIsMHg3OCwweGFhLDB4ODYsMHg4MywweDA4LAorMHg4NiwweDgyLDB4ZTAsMHg1NCwweDNmLDB4ZjAsMHhhZCwweDgzLDB4ZTUsMHg4MiwweDI0LDB4MDQsMHhmYywweGU0LDB4M2QsMHg4YywKKzB4ODIsMHhmNSwweDgzLDB4ZTAsMHg1NCwweDNmLDB4ZjAsMHg3OCwweGEzLDB4ZTYsMHgyNCwweGE0LDB4ZjgsMHhlNiwweGZjLDB4NzgsCisweGFiLDB4ZTYsMHgyNCwweDAxLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHg3OCwweGEzLAorMHhlNiwweDI0LDB4YTQsMHhmOCwweGU2LDB4ZmMsMHg3OCwweGFiLDB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwKKzB4MDAsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDc4LDB4YTksMHhlNiwweDI0LDB4MGIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsCisweGY1LDB4ODMsMHhlMCwweDU0LDB4ZmIsMHg0NCwweDAyLDB4ZjUsMHgyNiwweDc4LDB4YTcsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLAorMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDMwLDB4ZTUsMHgwMywweDQzLDB4MjYsMHgwMSwweDc4LDB4YTksMHhlNiwKKzB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDMwLDB4ZTAsMHgwMywweDEyLDB4MGYsCisweGI3LDB4ZTUsMHgyNiwweGZjLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwYiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LAorMHg4MywweGVjLDB4ZjAsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywKKzB4NzQsMHgwZiwweGYwLDB4NzgsMHhhYSwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlMCwweDQ0LDB4ODAsMHhmMCwweGEzLDB4YTMsCisweGEzLDB4YTMsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDIyLDB4OGMsMHgyYSwweDEyLDB4MGYsMHg2OSwweDc4LDB4YTcsMHhlNiwweDI0LAorMHgwOCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweGZjLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwYSwKKzB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHg3OCwweGE3LDB4ZTYsMHgyNCwweDA3LDB4ZjUsCisweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHhmYywweDc4LDB4YTksMHhlNiwweDI0LDB4MDksMHhmNSwweDgyLAorMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywweGYwLDB4NzgsMHhhNiwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlMCwKKzB4ZmQsMHhhMywweGUwLDB4ZmMsMHhlZCwweGZlLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwOCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsCisweDAwLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHhlYywweGZlLDB4NzgsMHhhOSwweGU2LDB4MjQsMHgwNywweGY1LDB4ODIsMHgxOCwweGU2LAorMHgzNCwweDAwLDB4ZjUsMHg4MywweGVlLDB4ZjAsMHg4YywweDI5LDB4OGQsMHgyOCwweGMzLDB4ZWMsMHg5NCwweDA1LDB4ZWQsMHg5NCwKKzB4MGMsMHg0MCwweDA1LDB4NzUsMHgyNywweDdjLDB4ODAsMHgzMywweGQzLDB4ZTUsMHgyOSwweDk0LDB4MDEsMHhlNSwweDI4LDB4OTQsCisweDAzLDB4NDAsMHgwNSwweDc1LDB4MjcsMHgzYywweDgwLDB4MjMsMHhkMywweGU1LDB4MjksMHg5NCwweDgxLDB4ZTUsMHgyOCwweDk0LAorMHgwMSwweDQwLDB4MDUsMHg3NSwweDI3LDB4MTgsMHg4MCwweDEzLDB4ZDMsMHhlNSwweDI5LDB4OTQsMHg2MCwweGU1LDB4MjgsMHg5NCwKKzB4MDAsMHg0MCwweDA1LDB4NzUsMHgyNywweDBjLDB4ODAsMHgwMywweDc1LDB4MjcsMHgwOCwweGFmLDB4MjcsMHhlNCwweGVmLDB4NTQsCisweDdjLDB4NDQsMHg4MywweGZmLDB4OGYsMHgyNywweGU1LDB4MjcsMHhmYywweDc4LDB4YWIsMHhlNiwweDI0LDB4MDEsMHhmNSwweDgyLAorMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywweGYwLDB4ZTUsMHgyNywweGZjLDB4NzgsMHhhYiwweGU2LDB4MjQsMHgwNSwKKzB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHhlNSwweDI3LDB4ZmMsMHg3OCwweGEzLDB4ZTYsCisweDI0LDB4YTQsMHhmOCwweGVjLDB4ZjYsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZTAsMHhmNSwweDI3LDB4NzgsMHhhNywweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwKKzB4ZjUsMHg4MywweGEzLDB4ZTAsMHgzMCwweGUzLDB4MTcsMHg1MywweDI3LDB4YzcsMHg3OCwweGE3LDB4ZTYsMHgyNCwweDA1LDB4ZjUsCisweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg5MCwweDM1LDB4NTgsMHg5MywweDQyLDB4MjcsMHg1MywweDI3LAorMHhmYiwweDc4LDB4YTcsMHhlNiwweDI0LDB4MDYsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg2MCwKKzB4MDMsMHg0MywweDI3LDB4MDQsMHg1MywweDI3LDB4ZmMsMHg3OCwweGE3LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsCisweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg0MiwweDI3LDB4NDMsMHgyNywweDgwLDB4ZTUsMHgyNywweGZjLDB4NzgsMHhhOSwweGU2LAorMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHg3OCwweGE5LDB4ZTYsMHgyNCwKKzB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHhmNSwweDI3LDB4NzgsMHhhNywweGU2LDB4MjQsCisweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGEzLDB4ZTAsMHgzMCwweGUxLDB4MDUsMHg1MywweDI3LAorMHhkZiwweDgwLDB4MDMsMHg0MywweDI3LDB4MjAsMHg3OCwweGE3LDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwKKzB4MDAsMHhmNSwweDgzLDB4ZTAsMHgzMCwweGU0LDB4MDUsMHg1MywweDI3LDB4ZWYsMHg4MCwweDAzLDB4NDMsMHgyNywweDEwLDB4NzgsCisweGE3LDB4ZTYsMHgyNCwweDA5LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4YjQsMHgwMiwweDAzLAorMHg0MywweDI3LDB4MDIsMHhlNSwweDI3LDB4ZmMsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwKKzB4MDAsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDc4LDB4YTksMHhlNiwweDI0LDB4MDMsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsCisweGY1LDB4ODMsMHhlMCwweGY1LDB4MjcsMHg3OCwweGE3LDB4ZTYsMHgyNCwweDA5LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZTAsMHg3MCwweDA1LDB4NTMsMHgyNywweDdmLDB4ODAsMHgwMywweDQzLDB4MjcsMHg4MCwweDc4LDB4YTcsMHhlNiwKKzB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhhMywweGUwLDB4MzAsMHhlMCwweDA1LDB4NDMsCisweDI3LDB4MjAsMHg4MCwweDAzLDB4NTMsMHgyNywweGRmLDB4NzgsMHhhNywweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LAorMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4MzAsMHhlMywweDA1LDB4NDMsMHgyNywweDQwLDB4ODAsMHgwMywweDUzLDB4MjcsMHhiZiwKKzB4NzgsMHhhNywweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDMwLDB4ZTAsCisweDA1LDB4NDMsMHgyNywweDEwLDB4ODAsMHgwMywweDUzLDB4MjcsMHhlZiwweDc4LDB4YTcsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLAorMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhhMywweGUwLDB4MzAsMHhlNCwweDA1LDB4NDMsMHgyNywweDA4LDB4ODAsMHgwMywKKzB4NTMsMHgyNywweGY3LDB4NzgsMHhhNywweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsCisweGEzLDB4ZTAsMHgzMCwweGU1LDB4MDUsMHg0MywweDI3LDB4MDQsMHg4MCwweDAzLDB4NTMsMHgyNywweGZiLDB4NzgsMHhhNywweGU2LAorMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGEzLDB4ZTAsMHgzMCwweGU2LDB4MDUsMHg0MywKKzB4MjcsMHgwMSwweDgwLDB4MDMsMHg1MywweDI3LDB4ZmUsMHg3OCwweGE3LDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsCisweDM0LDB4MDAsMHhmNSwweDgzLDB4YTMsMHhlMCwweDMwLDB4ZTcsMHgwNSwweDQzLDB4MjcsMHgwMiwweDgwLDB4MDMsMHg1MywweDI3LAorMHhmZCwweGU1LDB4MjcsMHhmYywweDc4LDB4YTksMHhlNiwweDI0LDB4MDMsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwKKzB4ODMsMHhlYywweGYwLDB4YzIsMHgwMywweDdjLDB4MDAsMHgyMiwweDhkLDB4MjcsMHg4YywweDI2LDB4ZWQsMHg1NCwweDAzLDB4MTQsCisweDYwLDB4MDMsMHg3YywweDEwLDB4MjIsMHhlNSwweDI3LDB4NTQsMHg3YywweDI0LDB4ZmMsMHg0MCwweDAzLDB4N2MsMHgwYiwweDIyLAorMHhlNSwweDI2LDB4MjQsMHg5ZCwweGY4LDB4YzYsMHg0NCwweDAyLDB4ZjYsMHg3YywweDAwLDB4MjIsMHg4YywweDMwLDB4MTIsMHgwZiwKKzB4NjksMHhlNSwweDMwLDB4MjQsMHg5ZCwweGY4LDB4ZTYsMHgyMCwweGUyLDB4NGYsMHhhYywweDMwLDB4N2QsMHgwMiwweDEyLDB4MGQsCisweDJmLDB4ZTUsMHgzMCwweDI0LDB4ZmUsMHg0NCwweDI4LDB4ZmMsMHg3OCwweGFhLDB4ODYsMHg4MywweDA4LDB4ODYsMHg4MiwweGVjLAorMHhmMCwweGFmLDB4ODMsMHhlNSwweDgyLDB4MjQsMHgwNCwweGZlLDB4ZTQsMHgzZiwweGZmLDB4ZWMsMHg4ZSwweDgyLDB4OGYsMHg4MywKKzB4ZjAsMHg3YywweDAzLDB4OGMsMHgyYywweGU1LDB4MmMsMHhmYywweDc4LDB4YWIsMHhlNiwweDI0LDB4MDEsMHhmNSwweDgyLDB4MTgsCisweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywweGYwLDB4ZTUsMHgyYywweGZjLDB4NzgsMHhhYiwweGU2LDB4MjQsMHgwNSwweGY1LAorMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHg3NSwweDJkLDB4MDEsMHg3NSwweDJmLDB4NDgsMHg3NSwKKzB4MmUsMHhmZiwweGU1LDB4MzAsMHgyNCwweGZkLDB4ZmMsMHhlNCwweDM0LDB4ZmYsMHhmZCwweGVjLDB4N2MsMHgwMywweDI1LDB4ZTAsCisweGNkLDB4MzMsMHhjZCwweGRjLDB4ZjksMHhmYywweGU1LDB4MmYsMHgyYywweGY1LDB4MmYsMHhlNSwweDJlLDB4M2QsMHhmNSwweDJlLAorMHg3OCwweGFiLDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NTQsMHhlNywKKzB4ZjUsMHgyYywweGFkLDB4MmYsMHhhZSwweDJlLDB4YWYsMHgyZCwweGU0LDB4OTAsMHgwMCwweDAyLDB4MTIsMHgwMywweDE3LDB4ZTQsCisweDkwLDB4MDAsMHgwNiwweDEyLDB4MDMsMHgxNywweDEyLDB4MDEsMHhlNiwweDMwLDB4ZTUsMHgwMywweDQzLDB4MmMsMHgxMCwweGU1LAorMHgyYywweGZjLDB4NzgsMHhhYiwweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywKKzB4ZjAsMHgxMiwweDEwLDB4NGIsMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA2LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsCisweDgzLDB4ZTAsMHhjMiwweDAzLDB4ZmMsMHhlNSwweDMwLDB4MjQsMHg5ZCwweGY4LDB4YzYsMHg0NCwweDA0LDB4ZjYsMHg4YywweDJjLAorMHhlNSwweDMwLDB4NTQsMHgwZiwweGM0LDB4NTQsMHhmMCwweDdlLDB4MDAsMHhmZiwweGVlLDB4ZWYsMHg0NCwweDA0LDB4N2QsMHgwMCwKKzB4ZmYsMHhlYywweDRlLDB4ZmMsMHhlZCwweDRmLDB4ZmQsMHgxMiwweDFjLDB4YTcsMHg3YywweDAwLDB4MjIsMHg4YywweDJmLDB4MTIsCisweDBmLDB4NjksMHgxMiwweDBmLDB4ZWIsMHg3OCwweGFhLDB4ODYsMHg4MywweDA4LDB4ODYsMHg4MiwweGUwLDB4NTQsMHgwOCwweGYwLAorMHhhMywweGEzLDB4YTMsMHhhMywweGUwLDB4NTQsMHgwOCwweGYwLDB4YWMsMHgyZiwweDdkLDB4MDIsMHgxMiwweDBkLDB4MmYsMHhjMiwKKzB4MDMsMHhlNSwweDJmLDB4MjQsMHg5ZCwweGY4LDB4YzYsMHg1NCwweGZiLDB4ZjYsMHg3YywweDAwLDB4MjIsMHgxMiwweDMwLDB4ZTYsCisweDc4LDB4OTYsMHhlYywweGY2LDB4ZWMsMHgyNCwweDlkLDB4ZjgsMHhlNiwweDMwLDB4ZTEsMHgwYSwweDdkLDB4MDAsMHg3YywweDEzLAorMHgxMiwweDI1LDB4MjYsMHgxMiwweDMxLDB4NjksMHg3OCwweDk2LDB4ZTYsMHgyNCwweDlkLDB4ZjgsMHhjNiwweDQ0LDB4MDEsMHhmNiwKKzB4NzgsMHg5NiwweGU2LDB4ZmMsMHgxMiwweDBmLDB4NjksMHg3OCwweDk2LDB4ZTYsMHgyNCwweGZkLDB4NzUsMHhmMCwweDBhLDB4YTQsCisweDI0LDB4MTQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZjLDB4ZjUsMHg4MywweDc4LDB4YTYsMHhlNiwweGZhLDB4MDgsMHhlNiwweGY5LAorMHg3YiwweDBhLDB4NzgsMHgwMSwweDEyLDB4MDMsMHhhNywweDc4LDB4YTYsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4NzksMHg2NywKKzB4N2EsMHgzNSwweDdiLDB4MGEsMHg3OCwweDAxLDB4MTIsMHgwMywweGY1LDB4MTIsMHgwZiwweGI3LDB4YzIsMHgwMywweDc4LDB4OTYsCisweGU2LDB4ZmMsMHgxMiwweDExLDB4MDcsMHg3OCwweDk1LDB4ZWMsMHhmNiwweGVjLDB4NjAsMHgwYSwweDdkLDB4MDAsMHg3YywweDA4LAorMHgxMiwweDI1LDB4MjYsMHgxMiwweDMxLDB4NjksMHg3OCwweDk2LDB4ZTYsMHhmYywweDEyLDB4MGYsMHg2OSwweDc4LDB4YTksMHhlNiwKKzB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDQ0LDB4MTAsMHg1NCwweGRmLDB4ZmMsCisweDc4LDB4YTksMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDc4LAorMHg5NSwweGVjLDB4ZjYsMHhjMiwweDAzLDB4N2MsMHhjOCwweDEyLDB4MzIsMHhhOSwweDc4LDB4OTYsMHhlNiwweGZjLDB4MTIsMHgwZiwKKzB4NjksMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NTQsCisweGVmLDB4ZjAsMHhjMiwweDAzLDB4N2MsMHhjOCwweDEyLDB4MzIsMHhhOSwweDc4LDB4OTYsMHhlNiwweGZjLDB4MTIsMHgwZiwweDY5LAorMHg3OCwweGE5LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NDQsMHgxMCwKKzB4ZjAsMHhjMiwweDAzLDB4N2MsMHhjOCwweDEyLDB4MzIsMHhhOSwweDc4LDB4OTYsMHhlNiwweGZjLDB4MTIsMHgwZiwweDY5LDB4NzgsCisweGE5LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NDQsMHgyMCwweGYwLAorMHhjMiwweDAzLDB4N2MsMHhmMCwweDEyLDB4MzIsMHhhOSwweDc4LDB4OTYsMHhlNiwweGZjLDB4MTIsMHgwZiwweDY5LDB4NzgsMHhhOSwKKzB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4MzAsMHhlNCwweDE1LDB4YzIsCisweDAzLDB4NzgsMHg5NiwweGU2LDB4NDQsMHgxMCwweDdmLDB4MDAsMHhmZSwweDdjLDB4MDcsMHgxMiwweDMxLDB4ZmIsMHgxMiwweDMxLAorMHg2OSwweDAyLDB4MTcsMHgxNCwweDc4LDB4YTksMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwKKzB4ODMsMHhlMCwweDU0LDB4Y2YsMHhmMCwweGMyLDB4MDMsMHg3YywweGM4LDB4MTIsMHgzMiwweGE5LDB4NzgsMHg5NiwweGU2LDB4ZmMsCisweDEyLDB4MGYsMHg2OSwweDc4LDB4YTksMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLAorMHhlMCwweDQ0LDB4MzAsMHhmMCwweGMyLDB4MDMsMHg3YywweGYwLDB4MTIsMHgzMiwweGE5LDB4NzgsMHg5NiwweGU2LDB4ZmMsMHgxMiwKKzB4MGYsMHg2OSwweDc4LDB4YTksMHhlNiwweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsCisweDMwLDB4ZTQsMHgxNCwweGMyLDB4MDMsMHg3OCwweDk2LDB4ZTYsMHg0NCwweDEwLDB4N2YsMHgwMCwweGZlLDB4N2MsMHgwNywweDEyLAorMHgzMSwweGZiLDB4MTIsMHgzMSwweDY5LDB4ODAsMHg1ZCwweDc4LDB4YTksMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwKKzB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDU0LDB4ZWYsMHhmMCwweDc4LDB4YTksMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsCisweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDU0LDB4ZGYsMHhmMCwweDc4LDB4OTYsMHhlNiwweDI0LDB4ZmQsMHg3NSwweGYwLAorMHgwYSwweGE0LDB4MjQsMHgxNCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmMsMHhmNSwweDgzLDB4YWMsMHg4MiwweGFkLDB4ODMsMHg3OCwKKzB4YTYsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZWMsMHhmOSwweGVkLDB4ZmEsMHg3YiwweDBhLDB4NzgsMHgwMSwweDEyLDB4MDMsCisweGE3LDB4YzIsMHgwMywweDc4LDB4OTYsMHhlNiwweGZjLDB4MTIsMHgxMSwweDA3LDB4N2QsMHgwMCwweDdjLDB4MGIsMHgxMiwweDI1LAorMHgyNiwweDEyLDB4MzEsMHg2OSwweDIyLDB4MTIsMHgzMCwweGU2LDB4ZTQsMHg5MCwweGZjLDB4MzksMHhmMCwweDdkLDB4MDIsMHg3YywKKzB4MDAsMHgxMiwweDI1LDB4MjYsMHgxMiwweDMxLDB4NjksMHgyMiwweDEyLDB4MzAsMHhlNiwweDdjLDB4MDAsMHgxMiwweDI1LDB4YmYsCisweDEyLDB4MzEsMHg2OSwweDIyLDB4NzQsMHgzYywweDkwLDB4ZmIsMHhlMCwweGYwLDB4NzQsMHgzZSwweDkwLDB4ZmIsMHhlMCwweGYwLAorMHhlNCwweDkwLDB4ZmMsMHgyOCwweGYwLDB4MjIsMHg4ZCwweDM1LDB4OGMsMHgzNCwweGVjLDB4YjQsMHgwMSwweDAyLDB4ODAsMHgwMywKKzB4ZDMsMHg0MCwweDAyLDB4ODAsMHgyOCwweGI0LDB4MDIsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MDgsMHhhOCwweDM1LDB4YzYsCisweDI1LDB4ZTAsMHhmNiwweDgwLDB4MTgsMHhiNCwweDA0LDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDBhLDB4YTgsMHgzNSwweGM2LAorMHgyNSwweGUwLDB4MjUsMHhlMCwweGY2LDB4ODAsMHgwNiwweGE4LDB4MzUsMHg3NiwweDAwLDB4ODAsMHgwMCwweDIyLDB4OGMsMHgzYywKKzB4OGQsMHgzYiwweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweDc1LDB4NjYsMHgwNiwweDc1LDB4NjcsMHgwMCwweDkwLDB4ZmMsCisweDI5LDB4MTIsMHgwNCwweDZlLDB4MTIsMHgwMSwweGU2LDB4YjQsMHg4MCwweDAyLDB4ODAsMHgwNiwweGQzLDB4NTAsMHgwMywweDAyLAorMHgxOCwweDQ3LDB4OTAsMHhmYywweDI5LDB4MTIsMHgwNCwweDgwLDB4OTAsMHgwMCwweDAzLDB4MTIsMHgwMSwweGVjLDB4NTQsMHhmMCwKKzB4YjQsMHgzMCwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHg1ZiwweDkwLDB4ZmMsMHgyOSwweDEyLDB4MDQsMHg4MCwweDkwLDB4MDAsCisweDA4LDB4MTIsMHgwMiwweDBlLDB4ZmEsMHhmZCwweGViLDB4ZmUsMHg3ZiwweDAxLDB4OTAsMHhmYywweDJjLDB4MTIsMHgwNCwweDZlLAorMHhlZSwweGNkLDB4OTAsMHgzNSwweDcxLDB4ZmMsMHhlNCwweDkzLDB4ZmYsMHg3NCwweDAxLDB4OTMsMHhmZSwweGY5LDB4ZWYsMHhmYSwKKzB4N2IsMHgwMSwweGVhLDB4ZmYsMHhlOSwweGZlLDB4ZWMsMHhjMywweDllLDB4ZWQsMHg5ZiwweDQwLDB4MjUsMHg5MCwweDM1LDB4NzMsCisweGU0LDB4OTMsMHhmZCwweDc0LDB4MDEsMHg5MywweGZjLDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4ZWUsMHhjZCwweGZjLAorMHg5MCwweGZjLDB4MmUsMHhlMCwweGQzLDB4OWMsMHg5MCwweGZjLDB4MmQsMHhlMCwweDlkLDB4NTAsMHgwNSwweDc1LDB4NjYsMHg4MCwKKzB4ODAsMHgzMywweDEyLDB4MTksMHg2NSwweDgwLDB4MmUsMHhiNCwweDYwLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDBiLDB4YWMsCisweDNjLDB4YWQsMHgzYiwweDEyLDB4MDcsMHg3NywweDhjLDB4NjYsMHg4MCwweDFiLDB4YjQsMHgxMCwweDAzLDB4YjMsMHg0MCwweDEwLAorMHhjMywweGI0LDB4MjAsMHgwMywweGIzLDB4NDAsMHgwOSwweGMzLDB4YjQsMHg0MCwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwMCwKKzB4NzUsMHg2NiwweDgxLDB4ODAsMHgwMCwweDgwLDB4NzUsMHhiNCwweDgxLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDZiLDB4OTAsCisweGZjLDB4MjksMHgxMiwweDA0LDB4ODAsMHg5MCwweDAwLDB4MDMsMHgxMiwweDAxLDB4ZWMsMHg1NCwweGYwLDB4YjQsMHgzMCwweDAyLAorMHg4MCwweDAzLDB4ZDMsMHg0MCwweDFkLDB4OTAsMHhmYywweDI5LDB4MTIsMHgwNCwweDgwLDB4OTAsMHgwMCwweDA4LDB4MTIsMHgwMiwKKzB4MGUsMHhmYSwweGZkLDB4ZWIsMHhmZSwweDdmLDB4MDEsMHg5MCwweGZjLDB4MmYsMHgxMiwweDA0LDB4NmUsMHgxMiwweDE4LDB4Y2YsCisweDgwLDB4MzYsMHhiNCwweDYwLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDEzLDB4NzUsMHgzYSwweDY3LDB4ZTQsMHhmNSwweDM5LAorMHhmNSwweDM4LDB4YWMsMHgzYywweGFkLDB4M2IsMHgxMiwweDA1LDB4ZDMsMHg4YywweDY2LDB4ODAsMHgxYiwweGI0LDB4MTAsMHgwMywKKzB4YjMsMHg0MCwweDEwLDB4YzMsMHhiNCwweDIwLDB4MDMsMHhiMywweDQwLDB4MDksMHhjMywweGI0LDB4NDAsMHgwMiwweDgwLDB4MDMsCisweGQzLDB4NDAsMHgwMCwweDc1LDB4NjYsMHg4MSwweDgwLDB4MDAsMHg4MCwweDAyLDB4ODAsMHgwMCwweGU1LDB4NjYsMHhmYywweDkwLAorMHhmYywweDI5LDB4MTIsMHgwNCwweDgwLDB4ZWMsMHg5MCwweDAwLDB4MDIsMHgxMiwweDAzLDB4MTcsMHhhYywweDY3LDB4MjIsMHg5MCwKKzB4ZmMsMHgyOSwweDEyLDB4MDQsMHg4MCwweDkwLDB4MDAsMHgwNCwweDEyLDB4MDEsMHhlYywweDYwLDB4MDQsMHg3NCwweDAxLDB4ODAsCisweDAxLDB4ZTQsMHhhMiwweGUwLDB4OTIsMHgwMSwweDkwLDB4ZmMsMHgyOSwweDEyLDB4MDQsMHg4MCwweGVkLDB4MjQsMHgwMywweGZkLAorMHg1MCwweDAxLDB4MGUsMHg5MCwweGZjLDB4MmMsMHgxMiwweDA0LDB4NmUsMHg5MCwweGZjLDB4MjksMHgxMiwweDA0LDB4ODAsMHg5MCwKKzB4MDAsMHgwNSwweDEyLDB4MDEsMHhlYywweGY1LDB4NjcsMHg5MCwweDAwLDB4MDQsMHgxMiwweDAxLDB4ZWMsMHg1NCwweDBmLDB4ZmMsCisweDdkLDB4NjcsMHgxMiwweDE3LDB4NDYsMHhlNSwweDY3LDB4NzAsMHgwNCwweDc1LDB4NjYsMHgwOCwweDIyLDB4NzUsMHg2NiwweDAwLAorMHg3OCwweDg0LDB4NzYsMHgwMCwweDc4LDB4ODQsMHhlNiwweGMzLDB4OTUsMHg2NywweDUwLDB4MzgsMHg5MCwweGZjLDB4MmYsMHgxMiwKKzB4MDQsMHg4MCwweDEyLDB4MDEsMHhlNiwweGZjLDB4OTAsMHhmYywweDJjLDB4MTIsMHgwNCwweDgwLDB4ZWMsMHgxMiwweDAzLDB4MGYsCisweDMwLDB4MDEsMHgwZSwweDkwLDB4ZmMsMHgzMSwweGUwLDB4MDQsMHhmMCwweDkwLDB4ZmMsMHgzMCwweDcwLDB4MDMsMHhlMCwweDA0LAorMHhmMCwweDc4LDB4ODQsMHgwNiwweDkwLDB4ZmMsMHgyZSwweGUwLDB4MDQsMHhmMCwweDkwLDB4ZmMsMHgyZCwweDcwLDB4MDMsMHhlMCwKKzB4MDQsMHhmMCwweDgwLDB4YzAsMHgyMiwweDkwLDB4ZmMsMHgyYSwweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmMsMHhlZCwweGZlLDB4ZWMsCisweGZkLDB4N2YsMHgwMSwweGVkLDB4MjQsMHgwYSwweGZkLDB4NTAsMHgwMSwweDBlLDB4OTAsMHhmYywweDMyLDB4MTIsMHgwNCwweDZlLAorMHg5MCwweGZjLDB4MjksMHgxMiwweDA0LDB4ODAsMHg5MCwweDAwLDB4MDQsMHgxMiwweDAxLDB4ZWMsMHg1NCwweDBmLDB4YjQsMHgwMSwKKzB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDE3LDB4OTAsMHhmYywweDMyLDB4MTIsMHgwNCwweDgwLDB4MGQsMHhlZCwweDcwLDB4MDEsCisweDBlLDB4OTAsMHhmYywweDJmLDB4MTIsMHgwNCwweDZlLDB4NzgsMHg4OCwweDc2LDB4MDEsMHg4MCwweDRlLDB4YjQsMHgwMiwweDAyLAorMHg4MCwweDAzLDB4ZDMsMHg0MCwweDE5LDB4OTAsMHhmYywweDMyLDB4MTIsMHgwNCwweDgwLDB4ZWQsMHgyNCwweDAyLDB4ZmQsMHg1MCwKKzB4MDEsMHgwZSwweDkwLDB4ZmMsMHgyZiwweDEyLDB4MDQsMHg2ZSwweDc4LDB4ODgsMHg3NiwweDAyLDB4ODAsMHgyZCwweGI0LDB4MDQsCisweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgxOSwweDkwLDB4ZmMsMHgzMiwweDEyLDB4MDQsMHg4MCwweGVkLDB4MjQsMHgwNCwweGZkLAorMHg1MCwweDAxLDB4MGUsMHg5MCwweGZjLDB4MmYsMHgxMiwweDA0LDB4NmUsMHg3OCwweDg4LDB4NzYsMHgwNCwweDgwLDB4MGMsMHhiNCwKKzB4MDAsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MDAsMHg3NSwweDY2LDB4MDgsMHgyMiwweDkwLDB4ZmMsMHgyOSwweDEyLDB4MDQsCisweDgwLDB4OTAsMHgwMCwweDA1LDB4MTIsMHgwMSwweGVjLDB4ZjUsMHg2NywweDc4LDB4ODUsMHg3NiwweDAwLDB4NzgsMHg4NSwweGU2LAorMHhjMywweDk1LDB4NjcsMHg0MCwweDAzLDB4MDIsMHgxYSwweGNkLDB4NzgsMHg4NiwweDc2LDB4MDAsMHg3OCwweDg2LDB4ZTYsMHhjMywKKzB4NzgsMHg4OCwweDk2LDB4NTAsMHg3NiwweDkwLDB4ZmMsMHgyYywweDEyLDB4MDQsMHg4MCwweDEyLDB4MDEsMHhlNiwweGZjLDB4OTAsCisweGZjLDB4MzIsMHgxMiwweDA0LDB4ODksMHgxMiwweDAxLDB4ZTAsMHhmNCwweDVjLDB4ZmMsMHgxMiwweDAxLDB4ZTAsMHhmOCwweDkwLAorMHhmYywweDJmLDB4MTIsMHgwNCwweDgwLDB4ZTgsMHhjMCwweGUwLDB4MTIsMHgwMSwweGU2LDB4YzgsMHhkMCwweGUwLDB4YzgsMHg1OCwKKzB4NGMsMHhmYywweDkwLDB4ZmMsMHgyYywweDEyLDB4MDQsMHg4MCwweGVjLDB4MTIsMHgwMywweDBmLDB4NzgsMHg4NywweGVjLDB4ZjYsCisweDkwLDB4ZmMsMHgzMSwweGUwLDB4MDQsMHhmMCwweDkwLDB4ZmMsMHgzMCwweDcwLDB4MDMsMHhlMCwweDA0LDB4ZjAsMHgwOSwweGU5LAorMHg3MCwweDAxLDB4MGEsMHg5MCwweGZjLDB4MzIsMHgxMiwweDA0LDB4NzcsMHg5MCwweGZjLDB4MjksMHgxMiwweDA0LDB4ODAsMHg5MCwKKzB4MDAsMHgwNCwweDEyLDB4MDEsMHhlYywweDMwLDB4ZTQsMHgwZSwweDkwLDB4ZmMsMHgyZSwweGUwLDB4MDQsMHhmMCwweDkwLDB4ZmMsCisweDJkLDB4NzAsMHgwMywweGUwLDB4MDQsMHhmMCwweDc4LDB4ODYsMHgwNiwweDgwLDB4ODEsMHg3OCwweDg4LDB4ZTYsMHhmZCwweGU0LAorMHhmZSwweGZmLDB4ZWUsMHhjZCwweGZjLDB4OTAsMHhmYywweDMxLDB4ZTAsMHgyYywweGYwLDB4OTAsMHhmYywweDMwLDB4ZTAsMHgzZCwKKzB4ZjAsMHg3OCwweDg4LDB4ZTYsMHhmZCwweGU0LDB4ZmUsMHhmZiwweGVlLDB4Y2QsMHhmYywweDkwLDB4ZmMsMHgzNCwweGUwLDB4MmMsCisweGYwLDB4OTAsMHhmYywweDMzLDB4ZTAsMHgzZCwweGYwLDB4NzgsMHg4NSwweDA2LDB4MDIsMHgxYSwweDBkLDB4NzUsMHg2NiwweDAwLAorMHgyMiwweGU1LDB4M2QsMHgwNSwweDNkLDB4MDQsMHg3MCwweDAyLDB4YjIsMHhiMCwweDIyLDB4YzAsMHhlMCwweGMwLDB4ZjAsMHhjMCwKKzB4ODIsMHhjMCwweDgzLDB4YzAsMHhkMCwweGU4LDB4YzAsMHhlMCwweGU5LDB4YzAsMHhlMCwweGVhLDB4YzAsMHhlMCwweGViLDB4YzAsCisweGUwLDB4ZWMsMHhjMCwweGUwLDB4ZWQsMHhjMCwweGUwLDB4ZWUsMHhjMCwweGUwLDB4ZWYsMHhjMCwweGUwLDB4OTAsMHhmZiwweDkyLAorMHhlMCwweDEyLDB4MDEsMHhiNywweDFiLDB4MjksMHgzMCwweDFiLDB4MjksMHgzMiwweDFiLDB4MzgsMHgzOCwweDFiLDB4NGEsMHgzYSwKKzB4MWIsMHg1YywweDNlLDB4MWIsMHg3NCwweDQ0LDB4MWIsMHg2OCwweDQ2LDB4MWIsMHg4MCwweDUwLDB4MWIsMHhjMiwweDUyLDB4MWIsCisweGExLDB4NTQsMHgxYiwweGUzLDB4NTYsMHgwMCwweDAwLDB4MWMsMHgwNCwweDkwLDB4ZmYsMHg5MiwweGUwLDB4N2YsMHgwMCwweGZlLAorMHg3YywweDAxLDB4MTIsMHgzMSwweGZiLDB4MDIsMHgxYywweDE0LDB4ZTQsMHhmZiwweDA0LDB4ZmUsMHg3YywweDAzLDB4MTIsMHgzMSwKKzB4ZmIsMHg3NCwweDIwLDB4OTAsMHhmZiwweGZlLDB4ZjAsMHgwMiwweDFjLDB4MTQsMHhlNCwweGZmLDB4MDQsMHhmZSwweDdjLDB4MDIsCisweDEyLDB4MzEsMHhmYiwweDc0LDB4NDAsMHg5MCwweGZmLDB4ZmUsMHhmMCwweDAyLDB4MWMsMHgxNCwweGU0LDB4ZmYsMHgwNCwweGZlLAorMHg3YywweDA0LDB4MTIsMHgzMSwweGZiLDB4MDIsMHgxYywweDE0LDB4ZTQsMHhmZiwweDA0LDB4ZmUsMHg3YywweDA1LDB4MTIsMHgzMSwKKzB4ZmIsMHgwMiwweDFjLDB4MTQsMHhlNCwweGZmLDB4MDQsMHhmZSwweDdjLDB4MDYsMHgxMiwweDMxLDB4ZmIsMHgwMiwweDFjLDB4MTQsCisweDkwLDB4ZmYsMHhhNSwweGUwLDB4N2QsMHgwMCwweDkwLDB4ZmIsMHhmOCwweGNkLDB4ZjAsMHhhMywweGNkLDB4ZjAsMHg5MCwweGZiLAorMHhmOSwweGUwLDB4ZmMsMHhmNSwweDgzLDB4OTAsMHhmYiwweGY4LDB4ZTAsMHg0NCwweDMzLDB4ZmQsMHgxMiwweDFjLDB4YTcsMHg4MCwKKzB4NzMsMHg5MCwweGZmLDB4YjUsMHhlMCwweDdkLDB4MDAsMHg5MCwweGZiLDB4ZmEsMHhjZCwweGYwLDB4YTMsMHhjZCwweGYwLDB4OTAsCisweGZiLDB4ZmIsMHhlMCwweGZjLDB4ZjUsMHg4MywweDkwLDB4ZmIsMHhmYSwweGUwLDB4NDQsMHg0MywweGZkLDB4MTIsMHgxYywweGE3LAorMHg4MCwweDUyLDB4OTAsMHhmZiwweGE2LDB4ZTAsMHg3ZCwweDAwLDB4OTAsMHhmYiwweGZjLDB4Y2QsMHhmMCwweGEzLDB4Y2QsMHhmMCwKKzB4OTAsMHhmYiwweGZkLDB4ZTAsMHhmYywweGY1LDB4ODMsMHg5MCwweGZiLDB4ZmMsMHhlMCwweDQ0LDB4MzQsMHhmZCwweDEyLDB4MWMsCisweGE3LDB4ODAsMHgzMSwweDkwLDB4ZmYsMHhiNiwweGUwLDB4N2QsMHgwMCwweDkwLDB4ZmIsMHhmZSwweGNkLDB4ZjAsMHhhMywweGNkLAorMHhmMCwweDkwLDB4ZmIsMHhmZiwweGUwLDB4ZmMsMHhmNSwweDgzLDB4OTAsMHhmYiwweGZlLDB4ZTAsMHg0NCwweDQ0LDB4ZmQsMHgxMiwKKzB4MWMsMHhhNywweDgwLDB4MTAsMHg5MCwweGZmLDB4OTIsMHhlMCwweDdkLDB4MDAsMHhmYywweGVkLDB4NDQsMHhhYSwweGZkLDB4MTIsCisweDFjLDB4YTcsMHg4MCwweDAwLDB4ZTQsMHg5MCwweGZmLDB4OTIsMHhmMCwweGQwLDB4ZTAsMHhmZiwweGQwLDB4ZTAsMHhmZSwweGQwLAorMHhlMCwweGZkLDB4ZDAsMHhlMCwweGZjLDB4ZDAsMHhlMCwweGZiLDB4ZDAsMHhlMCwweGZhLDB4ZDAsMHhlMCwweGY5LDB4ZDAsMHhlMCwKKzB4ZjgsMHhkMCwweGQwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLDB4ZDAsMHhlMCwweDMyLDB4MDUsMHg4MSwweDA1LDB4ODEsCisweDA1LDB4ODEsMHgwNSwweDgxLDB4YTgsMHg4MSwweDE4LDB4MTgsMHgxOCwweGVkLDB4ZjYsMHgwOCwweGVjLDB4ZjYsMHg5MCwweGZmLAorMHg1YSwweGUwLDB4MjAsMHhlNywweDAyLDB4ODAsMHhmNywweDkwLDB4ZmYsMHg1OSwweGUwLDB4N2QsMHgwMCwweGE4LDB4ODEsMHgxOCwKKzB4Y2QsMHhmNiwweGNkLDB4MDgsMHhmNiwweDdkLDB4MDMsMHhhOCwweDgxLDB4ZTYsMHgxOCwweGZjLDB4ZTYsMHhjYywweDI1LDB4ZTAsCisweGNjLDB4MzMsMHhjYywweGRkLDB4ZjksMHhjYywweGY2LDB4Y2MsMHgwOCwweGY2LDB4YTgsMHg4MSwweDE4LDB4ZTYsMHg0NCwweGY4LAorMHhmNiwweGE4LDB4ODEsMHgxOCwweDE4LDB4MTgsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4YTgsMHg4MSwweDE4LDB4ODYsMHg4MywKKzB4MDgsMHg4NiwweDgyLDB4ZWQsMHhmMCwweGEzLDB4ZWMsMHhmMCwweDc0LDB4MDIsMHg5MCwweGZmLDB4NWEsMHhmMCwweDE1LDB4ODEsCisweDE1LDB4ODEsMHgxNSwweDgxLDB4MTUsMHg4MSwweDIyLDB4ZTUsMHg4MSwweDI0LDB4MDUsMHhmNSwweDgxLDB4ZTQsMHhhOCwweDgxLAorMHgxOCwweGY2LDB4YTgsMHg4MSwweDE4LDB4MTgsMHgxOCwweDE4LDB4ZWQsMHhmNiwweDA4LDB4ZWMsMHhmNiwweDkwLDB4ZmIsMHhmNSwKKzB4ZTAsMHgyNCwweGY4LDB4NTAsMHgwMywweDAyLDB4MWQsMHhjOCwweGU0LDB4YTgsMHg4MSwweDE4LDB4MTgsMHhmNiwweGE4LDB4ODEsCisweDE4LDB4ZTYsMHhmZSwweGE4LDB4ODEsMHgxOCwweDE4LDB4MTgsMHgxOCwweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsMHg3ZiwweDAwLAorMHhlZiwweDI0LDB4ZjgsMHg0MCwweDRkLDB4ZTQsMHhlZiwweDI1LDB4ZTAsMHgyNCwweDdkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywKKzB4ZjUsMHg4MywweGUwLDB4ZmIsMHhhMywweGUwLDB4NmMsMHg3MCwweDAzLDB4ZmEsMHhlYiwweDZkLDB4NzAsMHgwOSwweDc0LDB4MDEsCisweGE4LDB4ODEsMHgxOCwweDE4LDB4ZjYsMHg4MCwweDJiLDB4ZTQsMHhlZiwweDI1LDB4ZTAsMHgyNCwweDdkLDB4ZjUsMHg4MiwweGU0LAorMHgzNCwweGZjLDB4ZjUsMHg4MywweDdhLDB4MDAsMHhlMCwweDU0LDB4ZjAsMHhjYywweGY4LDB4Y2MsMHhjZCwweGY5LDB4Y2QsMHhmYiwKKzB4NzgsMHgwMCwweGU5LDB4NTQsMHhmMCwweGY5LDB4ZWEsMHg2OCwweDcwLDB4MDIsMHhlYiwweDY5LDB4NzAsMHgwMSwweDBlLDB4MGYsCisweDgwLDB4YWUsMHhhOCwweDgxLDB4MTgsMHhlZSwweGY2LDB4YTgsMHg4MSwweDE4LDB4MTgsMHgxOCwweDE4LDB4ZWQsMHhmNiwweDA4LAorMHhlYywweGY2LDB4YTgsMHg4MSwweGVmLDB4ZjYsMHhhOCwweDgxLDB4MTgsMHgxOCwweGU2LDB4NzAsMHg3OSwweGE4LDB4ODEsMHgxOCwKKzB4ZTYsMHgyNCwweGY3LDB4NDAsMHg3MSwweGE4LDB4ODEsMHgxOCwweDE4LDB4MTgsMHgxOCwweGU2LDB4NTQsMHgwZiwweGE4LDB4ODEsCisweGY2LDB4NjQsMHgwNCwweDYwLDB4MTcsMHhhOCwweDgxLDB4ZTYsMHg2NCwweDAzLDB4NjAsMHgxMCwweGE4LDB4ODEsMHgxOCwweDE4LAorMHgxOCwweDE4LDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweDEyLDB4MWMsMHgzYywweDgwLDB4NGEsMHg3YywweDBhLDB4MTIsMHgzMSwKKzB4NWIsMHhhOCwweDgxLDB4MTgsMHgxOCwweDE4LDB4MTgsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4OTAsMHhmYiwweGY0LDB4ZTAsCisweDI1LDB4ZTAsMHgyNCwweDdkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywweGY1LDB4ODMsMHhlZCwweGYwLDB4YTMsMHhlYywweGYwLAorMHg5MCwweGZiLDB4ZjQsMHhlMCwweGZmLDB4ZTQsMHhlZiwweDA0LDB4NTQsMHgwNywweGZmLDB4OTAsMHhmYiwweGY0LDB4ZjAsMHg5MCwKKzB4ZmIsMHhmNSwweGUwLDB4MDQsMHhmMCwweDEyLDB4MzEsMHhmNCwweDkwLDB4ZmIsMHhmNiwweGUwLDB4NzAsMHgwOCwweGU0LDB4ZmUsCisweGZmLDB4N2MsMHgwZiwweDEyLDB4MzEsMHhmYiwweDgwLDB4MjcsMHg5MCwweGZiLDB4ZjcsMHhlMCwweDA0LDB4ZjAsMHg1NCwweDNmLAorMHg3MCwweDFkLDB4OTAsMHhmYiwweGY3LDB4ZTAsMHg0NCwweGZlLDB4N2QsMHgwMCwweGZjLDB4OTAsMHhmYiwweGY0LDB4ZTAsMHgyNSwKKzB4ZTAsMHgyNCwweDdkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywweGY1LDB4ODMsMHhlZCwweGYwLDB4YTMsMHhlYywweGYwLDB4ZTUsCisweDgxLDB4MjQsMHhmYiwweGY1LDB4ODEsMHgyMiwweDc4LDB4OGIsMHg3NiwweDAwLDB4NzgsMHg4YywweDc2LDB4MDAsMHg3NCwweDAxLAorMHg5MCwweGZiLDB4ZjYsMHhmMCwweDEyLDB4MzAsMHhlNiwweDkwLDB4ZmIsMHhmNSwweGUwLDB4NjAsMHg1NywweDdjLDB4MGEsMHgxMiwKKzB4MzEsMHg1YiwweDkwLDB4ZmIsMHhmMywweGUwLDB4MjUsMHhlMCwweDI0LDB4N2QsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZjLDB4ZjUsCisweDgzLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmYywweDkwLDB4ZmIsMHhmMywweGUwLDB4MjUsMHhlMCwweDI0LDB4N2QsMHhmNSwweDgyLAorMHhlNCwweDM0LDB4ZmMsMHhmNSwweDgzLDB4ZTQsMHhmMCwweGEzLDB4ZjAsMHg5MCwweGZiLDB4ZjMsMHhlMCwweGZmLDB4ZTQsMHhlZiwKKzB4MDQsMHg1NCwweDA3LDB4ZmYsMHg5MCwweGZiLDB4ZjMsMHhmMCwweDkwLDB4ZmIsMHhmNSwweGUwLDB4MTQsMHhmMCwweDc4LDB4ODksCisweGVkLDB4ZjYsMHgwOCwweGVjLDB4ZjYsMHgxMiwweDMxLDB4ZjQsMHg3OCwweDg5LDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweDEyLAorMHgwOCwweGRhLDB4ODAsMHhhMywweDEyLDB4MzIsMHg0OCwweDkwLDB4ZmYsMHg5MywweGUwLDB4NDQsMHgwMSwweGYwLDB4YjIsMHhiMywKKzB4NzgsMHg4YiwweDA2LDB4YjYsMHgwMCwweDExLDB4NzgsMHg4YiwweDc2LDB4MDAsMHg3OCwweDhjLDB4ZTYsMHhmNCwweDA0LDB4MDQsCisweGEyLDB4ZTAsMHg5MiwweGI0LDB4NzgsMHg4YywweGY2LDB4MDIsMHgxZSwweDA3LDB4ZTQsMHg5MCwweGZiLDB4ZjYsMHhmMCwweDkwLAorMHhmYiwweGY1LDB4ZTAsMHg3ZCwweDAwLDB4ZmMsMHhlZCwweDQ0LDB4Y2YsMHhmZCwweDEyLDB4MWMsMHgzYywweDEyLDB4MzEsMHg2OSwKKzB4MjIsMHgxMiwweDMwLDB4ZTYsMHhlNSwweDcwLDB4NjQsMHg0OSwweDQ1LDB4NmYsMHg2MCwweDE1LDB4OTAsMHhmZiwweDgzLDB4ZTAsCisweDU0LDB4MGYsMHg3ZCwweDAwLDB4ZDMsMHg5NSwweDcwLDB4ZWQsMHg5NSwweDZmLDB4NTAsMHgwNSwweDEyLDB4MmYsMHgyZiwweDgwLAorMHgwMywweDEyLDB4MmYsMHhmZiwweDEyLDB4MzEsMHg2OSwweDIyLDB4MTIsMHgzMCwweGU2LDB4ZTUsMHg3MCwweDY0LDB4NDksMHg0NSwKKzB4NmYsMHg2MCwweDA1LDB4MTIsMHgzMCwweDM5LDB4ODAsMHgwZSwweDkwLDB4ZmYsMHg4MCwweGUwLDB4NDQsMHgwOCwweGYwLDB4OTAsCisweGZmLDB4ODMsMHhlMCwweDU0LDB4N2YsMHhmMCwweDEyLDB4MzEsMHg2OSwweDIyLDB4MTIsMHgzMCwweGU2LDB4OGMsMHg1NCwweGVjLAorMHg1NCwweGYwLDB4YjQsMHgxMCwweDE1LDB4NzUsMHg2YSwweDM1LDB4NzUsMHg2OSwweGZjLDB4NzUsMHg2OCwweDAxLDB4ZTUsMHg2YSwKKzB4MjQsMHgwMywweGY1LDB4NmEsMHhlNSwweDY5LDB4MzQsMHgwMCwweGY1LDB4NjksMHhlNCwweGY1LDB4NTcsMHhmNSwweDU2LDB4ZTUsCisweDU2LDB4YzMsMHg5NCwweDAxLDB4NTAsMHgyNywweGU1LDB4NTQsMHg1NCwweDBmLDB4ZmMsMHhhZCwweDZhLDB4YWUsMHg2OSwweGFmLAorMHg2OCwweDEyLDB4MGUsMHg3NywweDhjLDB4NTUsMHhlYywweDYwLDB4MDIsMHg4MCwweDEyLDB4MDUsMHg2YSwweGU1LDB4NmEsMHg3MCwKKzB4MDIsMHgwNSwweDY5LDB4MDUsMHg1NywweGU1LDB4NTcsMHg3MCwweDAyLDB4MDUsMHg1NiwweDgwLDB4ZDIsMHhlNSwweDU0LDB4NTQsCisweDBmLDB4MjQsMHg5ZCwweGY4LDB4YzYsMHg1NCwweGZlLDB4ZjYsMHhlNSwweDU0LDB4NTQsMHgwZiwweDdmLDB4MDAsMHhmZSwweDdjLAorMHgxMiwweDEyLDB4MzEsMHhmYiwweGU1LDB4NTUsMHgxNCwweDcwLDB4MDksMHg3ZCwweDAwLDB4N2MsMHgwOSwweDEyLDB4MjUsMHgyNiwKKzB4ODAsMHgwNywweGFkLDB4NTcsMHg3YywweDAwLDB4MTIsMHgyNSwweDI2LDB4MTIsMHgzMSwweDY5LDB4MjIsMHgxMiwweDMwLDB4ZTYsCisweDkwLDB4ZmYsMHhmYywweGUwLDB4NDQsMHgwMiwweGYwLDB4OTAsMHhmZiwweDAwLDB4ZTAsMHgzMCwweGU3LDB4MTMsMHg5MCwweGZmLAorMHg4MywweGUwLDB4NDQsMHg4MCwweGYwLDB4NDMsMHg2ZCwweDgwLDB4OTAsMHhmZiwweGZjLDB4ZTAsMHg0NCwweDAxLDB4ZjAsMHg4MCwKKzB4MTEsMHg5MCwweGZmLDB4ODIsMHhlMCwweDQ0LDB4MDgsMHhmMCwweDUzLDB4NmQsMHg3ZiwweDkwLDB4ZmYsMHhmYywweGUwLDB4NTQsCisweGZlLDB4ZjAsMHg5MCwweGZmLDB4ODEsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDEyLDB4MjUsMHhkOSwweDkwLDB4ZmYsMHhmZSwweGUwLAorMHg0NCwweDA1LDB4ZjAsMHg5MCwweGZmLDB4ZmMsMHhlMCwweDU0LDB4ZmQsMHhmMCwweDEyLDB4MzEsMHg2OSwweDIyLDB4MTIsMHgzMCwKKzB4ZTYsMHg3YywweDAxLDB4MTIsMHgzMiwweGE5LDB4NzgsMHhhZCwweGU2LDB4NDQsMHgwMiwweGY2LDB4NzQsMHhmZSwweGZjLDB4MDQsCisweGZkLDB4MTIsMHgxYywweGE3LDB4OTAsMHhmZiwweDVhLDB4ZTAsMHgzMCwweGU3LDB4MDIsMHg4MCwweGY3LDB4ZTQsMHhmNSwweDRlLAorMHg3NSwweDRkLDB4MTAsMHhhYywweDRlLDB4YWQsMHg0ZCwweGU1LDB4NGUsMHgxNSwweDRlLDB4NzAsMHgwMiwweDE1LDB4NGQsMHhlYywKKzB4NGQsMHg2MCwweDAyLDB4ODAsMHhlZSwweDQzLDB4ODcsMHgwMSwweDEyLDB4MzEsMHg2OSwweDIyLDB4MTIsMHgzMCwweGU2LDB4N2MsCisweDAyLDB4MTIsMHgzMSwweDc1LDB4NzgsMHhhZCwweGU2LDB4NTQsMHhmZCwweGY2LDB4MTIsMHgzMSwweDY5LDB4MjIsMHgxMiwweDMwLAorMHhlNiwweDc4LDB4YWQsMHhlNiwweDMwLDB4ZTAsMHgyYywweDc4LDB4YWQsMHhlNiwweDMwLDB4ZTEsMHgyNiwweDc4LDB4YWQsMHhlNiwKKzB4ZmMsMHhmNSwweDgzLDB4MTgsMHhlNiwweDQ0LDB4ZjAsMHhmZCwweDEyLDB4MWMsMHgzYywweDkwLDB4ZmYsMHhmYywweGUwLDB4NDQsCisweDIwLDB4ZjAsMHg3YywweDAyLDB4MTIsMHgzMiwweGE5LDB4NzgsMHhhZCwweGU2LDB4NTQsMHhmZCwweGY2LDB4NzQsMHgxYSwweDkwLAorMHhmZiwweGZlLDB4ZjAsMHg3OCwweGFkLDB4ZTYsMHhmYywweGY1LDB4ODMsMHgxOCwweGU2LDB4NDQsMHhmMSwweGZkLDB4MTIsMHgxYywKKzB4M2MsMHgxMiwweDMxLDB4NjksMHgyMiwweDc1LDB4NmQsMHgwMCwweDkwLDB4ZmYsMHhmZiwweGUwLDB4NjAsMHgwMywweDQzLDB4NmQsCisweDAxLDB4NzUsMHg2ZSwweDAwLDB4ZTQsMHhmNSwweDZjLDB4ZjUsMHg2YiwweGU0LDB4ZjUsMHg2ZiwweDc1LDB4NzAsMHg0OSwweDc0LAorMHg4NCwweDkwLDB4ZmYsMHg4MiwweGYwLDB4NzQsMHg4NCwweDkwLDB4ZmYsMHg4MCwweGYwLDB4NzQsMHg4MCwweDkwLDB4ZmYsMHg1OCwKKzB4ZjAsMHg3NCwweDgwLDB4OTAsMHhmZiwweDVhLDB4ZjAsMHhhZCwweDQ2LDB4YWYsMHg0NSwweDdlLDB4MDAsMHhlZSwweDI0LDB4ZmUsCisweDUwLDB4MDMsMHgwMiwweDIxLDB4MjQsMHhlNCwweGVlLDB4NzUsMHhmMCwweDA3LDB4YTQsMHgyNCwweDdmLDB4ZjUsMHg4MiwweGU0LAorMHgzNCwweGY4LDB4ZjUsMHg4MywweGUwLDB4ZmYsMHhlNCwweGVmLDB4NTQsMHg4MCwweGZkLDB4ZTQsMHhlZiwweDU0LDB4MGYsMHgxNCwKKzB4ZmYsMHhlZCwweDYwLDB4MzgsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDQ4LDB4ZjUsMHg4MiwweGU0LDB4MzQsCisweGZmLDB4ZjUsMHg4MywweDc0LDB4OTAsMHhmMCwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NGEsMHhmNSwweDgyLAorMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4NzQsMHg4MCwweGYwLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0ZSwKKzB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHg3NCwweDgwLDB4ZjAsMHg4MCwweDM0LDB4ZTQsMHhlZiwweDc1LDB4ZjAsCisweDA4LDB4YTQsMHgyNCwweDA4LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHg3NCwweDkwLDB4ZjAsMHhlNCwweGVmLAorMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4MGEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlNCwKKzB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4MGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGU0LDB4ZjAsCisweDBlLDB4MDIsMHgyMCwweDhkLDB4OGQsMHg0NiwweDhlLDB4NDQsMHg4ZiwweDQ1LDB4NzQsMHg3ZiwweDkwLDB4ZmYsMHhmZCwweGYwLAorMHg3NCwweDkwLDB4OTAsMHhmZiwweGZjLDB4ZjAsMHgyMiwweDhjLDB4NTgsMHhlYywweDI0LDB4ZjYsMHg1MCwweDA2LDB4ZTUsMHg1OCwKKzB4MjQsMHgzNywweGZjLDB4MjIsMHhlNSwweDU4LDB4MjQsMHgzMCwweGZjLDB4MjIsMHgxMiwweDI1LDB4MjMsMHhlYywweDcwLDB4MDMsCisweDAyLDB4MjIsMHg1ZSwweDc1LDB4NWMsMHgwMywweGFlLDB4NWIsMHg3ZiwweDAwLDB4ZTUsMHg1YywweDE1LDB4NWMsMHg2NCwweDgwLAorMHgyNCwweDdmLDB4NTAsMHgzNSwweGVmLDB4MjQsMHgwMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmIsMHhmNSwweDgzLDB4ZTAsMHhmZSwKKzB4MjQsMHhmZSwweDUwLDB4MWUsMHhlZiwweDdkLDB4MDAsMHhmYywweGU0LDB4ZmIsMHg3NCwweDc0LDB4YzMsMHg5YywweGZhLDB4ZWIsCisweDlkLDB4ZmIsMHhlZSwweDdkLDB4MDAsMHhmYywweGVhLDB4YzMsMHg5YywweGVkLDB4NjQsMHg4MCwweGNiLDB4NjQsMHg4MCwweDliLAorMHg1MCwweDAyLDB4ODAsMHgwNSwweGVmLDB4MmUsMHhmZiwweDgwLDB4YzEsMHg4ZSwweDViLDB4OGYsMHg1YSwweGU1LDB4NWMsMHg2NCwKKzB4ODAsMHgyNCwweDdmLDB4NTAsMHgwMywweDAyLDB4MjIsMHg1ZSwweGU1LDB4NWEsMHgyNCwweDhlLDB4NTAsMHgwMywweDAyLDB4MjIsCisweDVlLDB4ODUsMHg1YSwweDVkLDB4NzUsMHg1YiwweDAwLDB4YWUsMHg1YSwweGFmLDB4NWIsMHg5MCwweDM1LDB4OWMsMHhlNCwweDkzLAorMHhmNSwweDVjLDB4ZTUsMHg1YywweDE1LDB4NWMsMHg2NCwweDgwLDB4MjQsMHg3ZiwweDUwLDB4MTgsMHhlZSwweDI0LDB4MDAsMHhmNSwKKzB4ODIsMHhlNCwweDM0LDB4ZmIsMHhmNSwweDgzLDB4ZTAsMHhmYywweGVmLDB4OTAsMHgzNSwweDljLDB4OTMsMHg2YywweDcwLDB4MDQsCisweDBlLDB4MGYsMHg4MCwweGRlLDB4OGUsMHg1YSwweDhmLDB4NWIsMHhlNSwweDVjLDB4NjQsMHg4MCwweDI0LDB4N2YsMHg0MCwweDZlLAorMHg3NSwweDVlLDB4MDEsMHg3NSwweDYwLDB4ZTgsMHg3NSwweDVmLDB4ZmYsMHhlNSwweDVkLDB4MjQsMHgwMiwweGY1LDB4NWEsMHg3NSwKKzB4NWMsMHgwNywweGU1LDB4NWMsMHgzMywweDQwLDB4NTcsMHhhZCwweDYwLDB4YWUsMHg1ZiwweGFmLDB4NWUsMHhlNSwweDVjLDB4ZjUsCisweDgyLDB4MzMsMHg5NSwweGUwLDB4ZjUsMHg4MywweDEyLDB4MDEsMHhlYywweGM0LDB4NTQsMHgwZiwweGZjLDB4MTIsMHgyMSwweDM3LAorMHhlNSwweDVhLDB4MjQsMHgwMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmIsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDA1LDB4NWEsMHgwNSwKKzB4NWEsMHhhZCwweDYwLDB4YWUsMHg1ZiwweGFmLDB4NWUsMHhlNSwweDVjLDB4ZjUsMHg4MiwweDMzLDB4OTUsMHhlMCwweGY1LDB4ODMsCisweDEyLDB4MDEsMHhlYywweDU0LDB4MGYsMHhmYywweDEyLDB4MjEsMHgzNywweGU1LDB4NWEsMHgyNCwweDAwLDB4ZjUsMHg4MiwweGU0LAorMHgzNCwweGZiLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHgwNSwweDVhLDB4MDUsMHg1YSwweDE1LDB4NWMsMHg4MCwweGE0LDB4NzQsMHgwMiwKKzB4OTAsMHhmOCwweDUxLDB4ZjAsMHg5MCwweGY4LDB4NmIsMHg3OSwweDc1LDB4N2EsMHgzNSwweDdiLDB4MjcsMHg3OCwweDAxLDB4MTIsCisweDAzLDB4ZjUsMHg3NSwweDZhLDB4MzUsMHg3NSwweDY5LDB4ZmMsMHg3NSwweDY4LDB4MDEsMHhlNCwweDkwLDB4ZmYsMHg4MywweGYwLAorMHg3NCwweDgwLDB4OTAsMHhmZiwweDgxLDB4ZjAsMHg3NSwweDU5LDB4MDIsMHhlNSwweDU5LDB4NzUsMHhmMCwweDA3LDB4YTQsMHgyNCwKKzB4N2YsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGY4LDB4ZjUsMHg4MywweGUwLDB4NzgsMHg4ZiwweGY2LDB4ZmMsMHg1NCwweDBmLDB4MTQsCisweGZjLDB4NzgsMHg4ZiwweGVjLDB4ZjYsMHhlNSwweDU5LDB4NzUsMHhmMCwweDA3LDB4YTQsMHgyNCwweDgxLDB4ZjUsMHg4MiwweGU0LAorMHgzNCwweGY4LDB4ZjUsMHg4MywweGUwLDB4NzgsMHg5MiwweDc2LDB4ZmQsMHgwOCwweDc2LDB4ZTgsMHhmYywweDc4LDB4OGYsMHhlNiwKKzB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDQ4LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4NzgsCisweDhmLDB4ZTYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGVjLAorMHhmMCwweDc4LDB4OTIsMHhlNiwweGZmLDB4MDgsMHhlNiwweDdlLDB4MDMsMHhjZiwweGMzLDB4MTMsMHhjZiwweDEzLDB4ZGUsMHhmOSwKKzB4ZmUsMHg3OCwweDhmLDB4ZTYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NDksMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsCisweDgzLDB4ZWUsMHhmMCwweDc4LDB4OGYsMHhlNiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0YSwweGY1LDB4ODIsMHhlNCwweDM0LAorMHhmZiwweGY1LDB4ODMsMHg3NCwweDgwLDB4ZjAsMHg3OCwweDkwLDB4ZWMsMHhmNiwweDdkLDB4MDAsMHg3OCwweDkzLDB4ZTYsMHgyYywKKzB4ZjYsMHgxOCwweGU2LDB4M2QsMHhmNiwweDc4LDB4OTIsMHhlNiwweGZkLDB4MDgsMHhlNiwweDdjLDB4MDMsMHhjZCwweGMzLDB4MTMsCisweGNkLDB4MTMsMHhkYywweGY5LDB4ZmMsMHg3OCwweDhmLDB4ZTYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NGQsMHhmNSwweDgyLAorMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDc4LDB4OGYsMHhlNiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0ZSwKKzB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4NzgsMHg5MiwweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsCisweDc4LDB4OGYsMHhlNiwweGZmLDB4N2UsMHgwMCwweGVlLDB4MjQsMHhmZSwweDUwLDB4MDMsMHgwMiwweDI0LDB4ZGQsMHhlNCwweGVlLAorMHg3NSwweGYwLDB4MDcsMHhhNCwweDI0LDB4N2YsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGY4LDB4ZjUsMHg4MywweGUwLDB4ZmYsMHhlNCwKKzB4ZWYsMHg1NCwweDgwLDB4ZmEsMHhlNCwweGVmLDB4NTQsMHgwZiwweDE0LDB4ZmYsMHhlNCwweGVlLDB4NzUsMHhmMCwweDA3LDB4YTQsCisweDI0LDB4ODEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGY4LDB4ZjUsMHg4MywweGUwLDB4NzgsMHg5MCwweGY2LDB4ZTQsMHhlZSwweDEzLAorMHgxMywweDU0LDB4ODAsMHgyNCwweGYwLDB4ZjgsMHhlNCwweDM0LDB4ZmQsMHhmOSwweGU4LDB4ZmMsMHhlOSwweGZkLDB4OGEsMHg1YSwKKzB4ZWEsMHg3MCwweDAzLDB4MDIsMHgyNCwweDRhLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0OCwweGY1LDB4ODIsCisweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4NzgsMHg5MCwweGU2LDB4ZmEsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LAorMHhhNCwweDI0LDB4NGYsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGVhLDB4ZjAsMHhlZCwweGZiLDB4ZWMsMHg3YSwKKzB4MDMsMHhjYiwweGMzLDB4MTMsMHhjYiwweDEzLDB4ZGEsMHhmOSwweGZhLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsCisweDQ5LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlYSwweGYwLDB4NzgsMHg5MCwweGU2LDB4N2IsMHgwMCwweGZhLAorMHhlYywweDJhLDB4ZmMsMHhlZCwweDNiLDB4ZmQsMHhmYiwweGVjLDB4N2EsMHgwMywweGNiLDB4YzMsMHgxMywweGNiLDB4MTMsMHhkYSwKKzB4ZjksMHhmYSwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NGQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsCisweDgzLDB4ZWEsMHhmMCwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NGEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLAorMHhmNSwweDgzLDB4NzQsMHg4MCwweGYwLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0ZSwweGY1LDB4ODIsMHhlNCwKKzB4MzQsMHhmZiwweGY1LDB4ODMsMHg3NCwweDgwLDB4ZjAsMHgwMiwweDI0LDB4ZDksMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsCisweDI0LDB4MDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg3OCwweDkwLDB4ZTYsMHhmYSwweGU0LAorMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZWEsMHhmMCwKKzB4ZWQsMHhmYiwweGVjLDB4N2EsMHgwMywweGNiLDB4YzMsMHgxMywweGNiLDB4MTMsMHhkYSwweGY5LDB4ZmEsMHhlNCwweGVmLDB4NzUsCisweGYwLDB4MDgsMHhhNCwweDI0LDB4MDksMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGVhLDB4ZjAsMHg3OCwweDkwLAorMHhlNiwweDdiLDB4MDAsMHhmYSwweGVjLDB4MmEsMHhmYywweGVkLDB4M2IsMHhmZCwweGZiLDB4ZWMsMHg3YSwweDAzLDB4Y2IsMHhjMywKKzB4MTMsMHhjYiwweDEzLDB4ZGEsMHhmOSwweGZhLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwZCwweGY1LDB4ODIsCisweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlYSwweGYwLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwYSwweGY1LAorMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwZSwKKzB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4MGUsMHgwMiwweDIzLDB4NjYsMHg4ZSwweDU5LDB4NzgsCisweDkyLDB4ZWQsMHhmNiwweDA4LDB4ZWMsMHhmNiwweDc4LDB4OGYsMHhlZiwweGY2LDB4MTIsMHgyMCwweDU1LDB4MjIsMHg4YywweDI2LAorMHhlYywweDMwLDB4ZTcsMHgxOCwweGU1LDB4MjYsMHg1NCwweDBmLDB4MTQsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NDgsMHhmNSwKKzB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZTAsMHg1NCwweGRmLDB4ZjAsMHg4MCwweDE2LDB4ZTUsMHgyNiwweDU0LDB4MGYsCisweDE0LDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDA4LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlMCwweDU0LAorMHhkZiwweGYwLDB4MjIsMHg3YywweDAwLDB4MjIsMHhlYywweDkwLDB4ZmMsMHgzNywweGYwLDB4OGMsMHgyNCwweGVkLDB4MjQsMHgwMywKKzB4ZjUsMHgyNSwweDdkLDB4MDAsMHhkMywweDk1LDB4NzIsMHhlZCwweDk1LDB4NzEsMHg0MCwweDAzLDB4ODUsMHg3MiwweDI1LDB4ZTUsCisweDI1LDB4MjQsMHhiNywweDUwLDB4MDksMHg3NSwweDI1LDB4MDMsMHg3NCwweDAyLDB4OTAsMHhmYywweDM3LDB4ZjAsMHhhYywweDI1LAorMHgxMiwweDMwLDB4MjQsMHgyMiwweGU0LDB4ZjUsMHg2YywweGY1LDB4NmIsMHgxMiwweDI1LDB4NWQsMHgyMiwweDkwLDB4ZmMsMHgzNSwKKzB4ZTAsMHg2NSwweDczLDB4NjAsMHgwZSwweDc0LDB4MDQsMHg5MCwweGZjLDB4MzcsMHhmMCwweGU0LDB4ZjUsMHg2YiwweDc1LDB4NmMsCisweDAzLDB4ODAsMHg0NiwweDdkLDB4NzMsMHhlNCwweGZlLDB4ZmYsMHg3OSwweDM1LDB4N2EsMHhmYywweDdiLDB4MDEsMHg3NCwweDA1LAorMHg3OCwweDAwLDB4MTIsMHgwMywweDNmLDB4ZTUsMHg2YywweDI0LDB4MDMsMHhmNSwweDZjLDB4ZTUsMHg2YiwweDM0LDB4MDAsMHhmNSwKKzB4NmIsMHhlNSwweDZjLDB4ZDMsMHg5NSwweDcyLDB4ZTUsMHg2YiwweDk1LDB4NzEsMHg0MCwweDA2LDB4ODUsMHg3MiwweDZjLDB4ODUsCisweDcxLDB4NmIsMHhkMywweGU1LDB4NmMsMHg5NCwweDQ4LDB4ZTUsMHg2YiwweDk0LDB4MDAsMHg0MCwweDBjLDB4NzQsMHgwMiwweDkwLAorMHhmYywweDM3LDB4ZjAsMHhlNCwweGY1LDB4NmIsMHg3NSwweDZjLDB4MDMsMHhhYywweDZjLDB4MTIsMHgzMCwweDI0LDB4MjIsMHhlYywKKzB4OTAsMHhmYywweDM3LDB4ZjAsMHhlNCwweGY1LDB4NmMsMHhmNSwweDZiLDB4OGMsMHgzMiwweGVjLDB4NjAsMHgwNSwweDEyLDB4MzAsCisweDE1LDB4ODAsMHgwNSwweDdjLDB4MDAsMHgxMiwweDMwLDB4MjQsMHgyMiwweDkwLDB4ZmYsMHg5MywweGUwLDB4NDQsMHgwMSwweGYwLAorMHhiMiwweGIzLDB4OTAsMHhmZiwweDA0LDB4ZTAsMHhmNSwweDRhLDB4OTAsMHhmZiwweDA2LDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhlZCwKKzB4N2QsMHgwMCwweGZjLDB4N2QsMHgwMCwweGZjLDB4OTAsMHhmZiwweDA2LDB4ZTAsMHhmZiwweGEzLDB4ZTAsMHg3ZSwweDAwLDB4ZmYsCisweGU0LDB4ZmUsMHhlYywweDRlLDB4ZmMsMHhlZCwweDRmLDB4ZmQsMHhjMywweGVjLDB4OTQsMHg0OCwweGVkLDB4OTQsMHgwMCwweDUwLAorMHgyMiwweDkwLDB4ZmYsMHgwNiwweGUwLDB4ZmQsMHhhMywweGUwLDB4ZWQsMHg3ZCwweDAwLDB4ZmMsMHg3ZCwweDAwLDB4ZmMsMHg5MCwKKzB4ZmYsMHgwNiwweGUwLDB4ZmYsMHhhMywweGUwLDB4N2UsMHgwMCwweGZmLDB4ZTQsMHhmZSwweGVjLDB4NGUsMHhmYywweGVkLDB4NGYsCisweGZkLDB4ODAsMHgwNCwweGU0LDB4ZmQsMHg3YywweDQ4LDB4OGMsMHg3MiwweDhkLDB4NzEsMHg5MCwweGZmLDB4MDIsMHhlMCwweGZkLAorMHhhMywweGUwLDB4ZWQsMHg3ZCwweDAwLDB4ZmMsMHg3ZCwweDAwLDB4ZmMsMHg5MCwweGZmLDB4MDIsMHhlMCwweGZmLDB4YTMsMHhlMCwKKzB4N2UsMHgwMCwweGZmLDB4ZTQsMHhmZSwweGVjLDB4NGUsMHhmNSwweDRjLDB4ZWQsMHg0ZiwweGY1LDB4NGIsMHg3NSwweDZhLDB4MzUsCisweDc1LDB4NjksMHhmYywweDc1LDB4NjgsMHgwMSwweDdkLDB4MzUsMHg3ZSwweGZjLDB4N2YsMHgwMSwweDc5LDB4NzMsMHhlNCwweGZhLAorMHhmYiwweDc0LDB4MDUsMHg3OCwweDAwLDB4MTIsMHgwMywweDNmLDB4NzUsMHg0OSwweDAwLDB4ZTUsMHg0OSwweDI0LDB4ZmUsMHg0MCwKKzB4MTksMHhhZCwweDZhLDB4YWUsMHg2OSwweGFmLDB4NjgsMHhlNCwweDEyLDB4MDMsMHgwZiwweDA1LDB4NDksMHgwZCwweGVkLDB4NzAsCisweDAxLDB4MGUsMHg4ZCwweDZhLDB4OGUsMHg2OSwweDhmLDB4NjgsMHg4MCwweGUxLDB4NzUsMHg2YSwweDM1LDB4NzUsMHg2OSwweGZjLAorMHg3NSwweDY4LDB4MDEsMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LDB4NjAsMHhiNCwweDAwLDB4MDIsMHg4MCwweDA2LDB4ZDMsMHg1MCwKKzB4MDMsMHgwMiwweDJjLDB4NmQsMHhlNSwweDRhLDB4NTQsMHgwZiwweGY1LDB4NDksMHhlNSwweDRhLDB4NTQsMHg4MCwweGEyLDB4ZTAsCisweDkyLDB4MDIsMHg5MCwweGZmLDB4MDEsMHhlMCwweDEyLDB4MDEsMHg4MSwweDAwLDB4MGIsMHgyYywweDY4LDB4MjYsMHhlNSwweDI4LAorMHgwMywweDJjLDB4NjgsMHgyOSwweDBmLDB4MmMsMHg2OCwweDI5LDB4ZjIsMHgyYSwweDI2LDB4MmIsMHg4ZCwweDJiLDB4OTAsMHgyYiwKKzB4ZDAsMHgyYywweDExLDB4MmMsMHgzZiwweGU1LDB4NmQsMHgzMCwweGU3LDB4MGUsMHhlNSwweDRjLDB4NDUsMHg0YiwweDcwLDB4MDgsCisweGU1LDB4NzIsMHg2NCwweDAyLDB4NDUsMHg3MSwweDYwLDB4MDMsMHgwMiwweDJjLDB4NmEsMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LAorMHgxZiwweGI0LDB4MDAsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MjksMHhlNSwweDRhLDB4NjAsMHgwMywweDAyLDB4MjgsMHgwMCwKKzB4YWQsMHg2YSwweGFlLDB4NjksMHhhZiwweDY4LDB4NzQsMHgwMSwweDEyLDB4MDMsMHgwZiwweDc4LDB4YWQsMHhlNiwweDMwLDB4ZTAsCisweDBiLDB4YWQsMHg2YSwweGFlLDB4NjksMHhhZiwweDY4LDB4NzQsMHgwMiwweDEyLDB4MDMsMHgwZiwweDdjLDB4MDIsMHgxMiwweDMwLAorMHgyNCwweDIyLDB4YjQsMHgwMSwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgxYiwweGU1LDB4NmQsMHgyMCwweGUxLDB4MDcsMHhlNSwKKzB4NGEsMHg2MCwweDAzLDB4MDIsMHgyOCwweDAwLDB4ZTUsMHg0YSwweDI0LDB4ZmUsMHg1MCwweDAzLDB4MDIsMHgyOCwweDAwLDB4N2MsCisweDAyLDB4MTIsMHgzMCwweDI0LDB4MjIsMHhiNCwweDAyLDB4MDIsMHg4MCwweDA2LDB4ZDMsMHg1MCwweDAzLDB4MDIsMHgyNywweGZlLAorMHhlNSwweDZkLDB4MjAsMHhlMSwweDBkLDB4ZTUsMHg0YSwweDYwLDB4MDksMHhlNSwweDRhLDB4NjQsMHg4MCwweDYwLDB4MDMsMHgwMiwKKzB4MjgsMHgwMCwweGFjLDB4NGEsMHgxMiwweDMwLDB4YWIsMHg0MCwweDAzLDB4MDIsMHgyOCwweDAwLDB4ZTUsMHg0OSwweDcwLDB4MjUsCisweDMwLDB4MDIsMHgxMSwweDkwLDB4ZmYsMHg4MCwweGUwLDB4NTQsMHgwOCwweGFkLDB4NmEsMHhhZSwweDY5LDB4YWYsMHg2OCwweDEyLAorMHgwMywweDBmLDB4ODAsMHgwZiwweDkwLDB4ZmYsMHg4MiwweGUwLDB4NTQsMHgwOCwweGFkLDB4NmEsMHhhZSwweDY5LDB4YWYsMHg2OCwKKzB4MTIsMHgwMywweDBmLDB4ODAsMHgzZCwweDE1LDB4NDksMHgzMCwweDAyLDB4MWQsMHhlNSwweDQ5LDB4NzUsMHhmMCwweDA4LDB4YTQsCisweDI0LDB4NDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGUwLDB4NTQsMHgwOCwweGFkLDB4NmEsMHhhZSwweDY5LAorMHhhZiwweDY4LDB4MTIsMHgwMywweDBmLDB4ODAsMHgxYiwweGU1LDB4NDksMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4MDgsMHhmNSwKKzB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZTAsMHg1NCwweDA4LDB4YWQsMHg2YSwweGFlLDB4NjksMHhhZiwweDY4LDB4MTIsCisweDAzLDB4MGYsMHhhZCwweDZhLDB4YWUsMHg2OSwweGFmLDB4NjgsMHgxMiwweDAxLDB4ZTYsMHg2MCwweDBiLDB4YWQsMHg2YSwweGFlLAorMHg2OSwweGFmLDB4NjgsMHg3NCwweDAxLDB4MTIsMHgwMywweDBmLDB4N2MsMHgwMiwweDEyLDB4MzAsMHgyNCwweDIyLDB4ODAsMHgwMCwKKzB4MDIsMHgyYywweDZhLDB4ZTUsMHg2ZCwweDIwLDB4ZTcsMHgwNiwweGU1LDB4NzIsMHg0NSwweDcxLDB4NjAsMHgwMywweDAyLDB4MmMsCisweDZhLDB4OTAsMHhmZiwweDAwLDB4ZTAsMHg1NCwweDFmLDB4YjQsMHgwMCwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgxYSwweGU1LAorMHg0YywweDE0LDB4NDUsMHg0YiwweDcwLDB4MDQsMHhlNSwweDRhLDB4NjAsMHgwMywweDAyLDB4MjksMHgwYywweDc4LDB4YWQsMHhlNiwKKzB4NTQsMHhmZSwweGY2LDB4N2MsMHgwMCwweDEyLDB4MzAsMHgyNCwweDIyLDB4YjQsMHgwMSwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsCisweDJhLDB4ZTUsMHg2ZCwweDIwLDB4ZTEsMHgwOCwweGU1LDB4NmQsMHgyMCwweGUwLDB4MDMsMHgwMiwweDI5LDB4MGMsMHhlNSwweDZkLAorMHgzMCwweGUwLDB4MDQsMHhlNSwweDRhLDB4NzAsMHgwYiwweGU1LDB4NmQsMHgzMCwweGUxLDB4MDksMHhlNSwweDRhLDB4MjQsMHhmZSwKKzB4NTAsMHgwMywweDAyLDB4MjksMHgwYywweDdjLDB4MDAsMHgxMiwweDMwLDB4MjQsMHgyMiwweGI0LDB4MDIsMHgwMiwweDgwLDB4MDYsCisweGQzLDB4NTAsMHgwMywweDAyLDB4MjksMHgwYSwweGU1LDB4NGMsMHg0NSwweDRiLDB4NjAsMHgwMywweDAyLDB4MjksMHgwYywweGFjLAorMHg0YSwweDEyLDB4MzAsMHhhYiwweDQwLDB4MDMsMHgwMiwweDI5LDB4MGMsMHhlNSwweDZkLDB4MjAsMHhlMSwweDA3LDB4ZTUsMHg2ZCwKKzB4MjAsMHhlMCwweDAyLDB4ODAsMHg3NywweGU1LDB4NmQsMHgzMCwweGUwLDB4MDYsMHhlNSwweDQ5LDB4NjAsMHgwMiwweDgwLDB4NmMsCisweGU1LDB4NDksMHg3MCwweDBmLDB4OTAsMHhmZiwweDgyLDB4ZTAsMHg1NCwweGY3LDB4ZjAsMHg5MCwweGZmLDB4ODAsMHhlMCwweDU0LAorMHhmNywweGYwLDB4MjIsMHhlNSwweDQ5LDB4YjQsMHgwMSwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwOSwweDdkLDB4MDEsMHg3YywKKzB4MDMsMHgxMiwweDBmLDB4MDksMHg4MCwweDExLDB4YjQsMHgwMiwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwOSwweDdkLDB4MDEsCisweDdjLDB4MDQsMHgxMiwweDBmLDB4MDksMHg4MCwweDAwLDB4MTUsMHg0OSwweDMwLDB4MDIsMHgxNSwweGU1LDB4NDksMHg3NSwweGYwLAorMHgwOCwweGE0LDB4MjQsMHg0OCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZTAsMHg1NCwweGY3LDB4ZjAsMHg4MCwKKzB4MTMsMHhlNSwweDQ5LDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDA4LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsCisweGUwLDB4NTQsMHhmNywweGYwLDB4N2MsMHgwMCwweDEyLDB4MzAsMHgyNCwweDIyLDB4ODAsMHgwMCwweDAyLDB4MmMsMHg2YSwweGU1LAorMHg2ZCwweDIwLDB4ZTcsMHgwNiwweGU1LDB4NzIsMHg0NSwweDcxLDB4NjAsMHgwMywweDAyLDB4MmMsMHg2YSwweDkwLDB4ZmYsMHgwMCwKKzB4ZTAsMHg1NCwweDFmLDB4YjQsMHgwMCwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgxYSwweGU1LDB4NGMsMHgxNCwweDQ1LDB4NGIsCisweDcwLDB4MDQsMHhlNSwweDRhLDB4NjAsMHgwMywweDAyLDB4MjksMHhlZiwweDc4LDB4YWQsMHhlNiwweDQ0LDB4MDEsMHhmNiwweDdjLAorMHgwMCwweDEyLDB4MzAsMHgyNCwweDIyLDB4YjQsMHgwMSwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgyOSwweGU1LDB4NmQsMHgyMCwKKzB4ZTEsMHgwOCwweGU1LDB4NmQsMHgyMCwweGUwLDB4MDMsMHgwMiwweDI5LDB4ZWYsMHhlNSwweDZkLDB4MzAsMHhlMCwweDA0LDB4ZTUsCisweDQ5LDB4NzAsMHgwYiwweGU1LDB4NmQsMHgzMCwweGUxLDB4MDgsMHhlNSwweDQ5LDB4MjQsMHhmZSwweDUwLDB4MDIsMHg4MCwweDdmLAorMHg3YywweDAwLDB4MTIsMHgzMCwweDI0LDB4MjIsMHhiNCwweDAyLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDZmLDB4ZTUsMHg0YywKKzB4NDUsMHg0YiwweDYwLDB4MDIsMHg4MCwweDY5LDB4YWMsMHg0YSwweDEyLDB4MzAsMHhhYiwweDQwLDB4MDIsMHg4MCwweDYwLDB4ZTUsCisweDZkLDB4MjAsMHhlMSwweDA3LDB4ZTUsMHg2ZCwweDIwLDB4ZTAsMHgwMiwweDgwLDB4NTQsMHhlNSwweDQ5LDB4NzAsMHgxNCwweDMwLAorMHgwMiwweDA5LDB4OTAsMHhmZiwweDgwLDB4ZTAsMHg0NCwweDA4LDB4ZjAsMHg4MCwweDA3LDB4OTAsMHhmZiwweDgyLDB4ZTAsMHg0NCwKKzB4MDgsMHhmMCwweDIyLDB4ZTUsMHg2ZCwweDMwLDB4ZTEsMHgzMywweDE1LDB4NDksMHgzMCwweDAyLDB4MTUsMHhlNSwweDQ5LDB4NzUsCisweGYwLDB4MDgsMHhhNCwweDI0LDB4NDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGUwLDB4NDQsMHgwOCwweGYwLAorMHg4MCwweDEzLDB4ZTUsMHg0OSwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwOCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwKKzB4ODMsMHhlMCwweDQ0LDB4MDgsMHhmMCwweDdjLDB4MDAsMHgxMiwweDMwLDB4MjQsMHgyMiwweDgwLDB4MDIsMHg4MCwweDAwLDB4MDIsCisweDJjLDB4NmEsMHhlNSwweDZkLDB4MjAsMHhlNywweDEyLDB4ZTUsMHg3MiwweDQ1LDB4NzEsMHg3MCwweDBjLDB4ZTUsMHg0YSwweDcwLAorMHgwOCwweDkwLDB4ZmYsMHgwMCwweGUwLDB4NTQsMHgxZiwweDYwLDB4MDMsMHgwMiwweDJjLDB4NmEsMHhlNSwweDRjLDB4OTAsMHhmZiwKKzB4ZmYsMHhmMCwweDkwLDB4ZmYsMHhmZiwweGUwLDB4NjAsMHgwNSwweDQzLDB4NmQsMHgwMSwweDgwLDB4MDMsMHg1MywweDZkLDB4ZmUsCisweDdjLDB4MDAsMHgxMiwweDMwLDB4MjQsMHgyMiwweGU1LDB4NmQsMHgzMCwweGU3LDB4MGUsMHhlNSwweDcyLDB4NDUsMHg3MSwweDYwLAorMHgwOCwweDkwLDB4ZmYsMHgwMCwweGUwLDB4NTQsMHgxZiwweDYwLDB4MDMsMHgwMiwweDJjLDB4NmEsMHhhZCwweDRiLDB4ZTUsMHg0YywKKzB4ZWQsMHg3ZCwweDAwLDB4ZmMsMHg3ZCwweDAwLDB4ZmMsMHhiZCwweDAwLDB4MDIsMHg4MCwweDAzLDB4MDIsMHgyYiwweDg4LDB4YjQsCisweDAxLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDMyLDB4ZTUsMHg0YSwweDcwLDB4MDUsMHhlNSwweDRjLDB4ZmMsMHg2MCwweDAzLAorMHgwMiwweDJiLDB4OGEsMHg3NSwweDZhLDB4NDAsMHg3NSwweDY5LDB4ZjgsMHg3NSwweDY4LDB4MDEsMHhkMywweGU1LDB4NzIsMHg5NCwKKzB4MTIsMHhlNSwweDcxLDB4OTQsMHgwMCwweDQwLDB4MDYsMHhlNCwweGZkLDB4N2MsMHgxMiwweDgwLDB4MDQsMHhhYywweDcyLDB4YWQsCisweDcxLDB4OGMsMHg3MCwweDhkLDB4NmYsMHgxMiwweDMwLDB4MzksMHgyMiwweGI0LDB4MDIsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLAorMHg1OSwweGU1LDB4NGEsMHg2MCwweDAzLDB4MDIsMHgyYiwweDhhLDB4ZTUsMHg0YywweGZjLDB4NzAsMHgyNywweDc1LDB4NmEsMHg1MiwKKzB4NzUsMHg2OSwweGY4LDB4NzUsMHg2OCwweDAxLDB4ZDMsMHhlNSwweDcyLDB4OTQsMHgxOSwweGU1LDB4NzEsMHg5NCwweDAwLDB4NDAsCisweDA2LDB4ZTQsMHhmZCwweDdjLDB4MTksMHg4MCwweDA0LDB4YWMsMHg3MiwweGFkLDB4NzEsMHg4YywweDcwLDB4OGQsMHg2ZiwweDEyLAorMHgzMCwweDM5LDB4ODAsMHgyNSwweDc1LDB4NmEsMHg2YiwweDc1LDB4NjksMHhmOCwweDc1LDB4NjgsMHgwMSwweGQzLDB4ZTUsMHg3MiwKKzB4OTQsMHgyNywweGU1LDB4NzEsMHg5NCwweDAwLDB4NDAsMHgwNiwweGU0LDB4ZmQsMHg3YywweDI3LDB4ODAsMHgwNCwweGFjLDB4NzIsCisweGFkLDB4NzEsMHg4YywweDcwLDB4OGQsMHg2ZiwweDEyLDB4MzAsMHgzOSwweDIyLDB4YjQsMHgwMywweDAyLDB4ODAsMHgwNiwweGQzLAorMHg1MCwweDAzLDB4MDIsMHgyYiwweDg4LDB4ZTUsMHg0YywweGY1LDB4NDksMHg3MCwweDBmLDB4OTAsMHhmZiwweDA0LDB4ZTAsMHhmZCwKKzB4YTMsMHhlMCwweDRkLDB4NjAsMHgwMywweDAyLDB4MmIsMHg4YSwweDgwLDB4MTgsMHg5MCwweGZiLDB4MDIsMHhlMCwweGZkLDB4YTMsCisweGUwLDB4ZmMsMHg5MCwweGZmLDB4MDUsMHhlMCwweDZjLDB4NzAsMHgwNywweDkwLDB4ZmYsMHgwNCwweGUwLDB4NmQsMHg2MCwweDAyLAorMHg4MCwweDY4LDB4ZTQsMHhmNSwweDcwLDB4ZjUsMHg2ZiwweDdmLDB4MDAsMHhlNSwweDQ5LDB4MTQsMHhjNSwweDQ5LDB4NjAsMHgwZiwKKzB4ZWYsMHgyNCwweDAwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYiwweGY1LDB4ODMsMHhlMCwweDJmLDB4ZmYsMHg4MCwweGVhLDB4OGYsCisweDRhLDB4ZTUsMHg0YSwweDI0LDB4MDAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZiLDB4ZjUsMHg4MywweGUwLDB4N2QsMHgwMCwweGQzLAorMHg5NSwweDcyLDB4ZWQsMHg5NSwweDcxLDB4NDAsMHgwNiwweGFjLDB4NzIsMHhhZCwweDcxLDB4ODAsMHgwZiwweGU1LDB4NGEsMHgyNCwKKzB4MDAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZiLDB4ZjUsMHg4MywweGUwLDB4N2QsMHgwMCwweGZjLDB4OGMsMHg3MCwweDhkLDB4NmYsCisweGU1LDB4NGEsMHgyNCwweDAwLDB4ZmMsMHhlNCwweDM0LDB4ZmIsMHhmZCwweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsMHg4ZCwweDZhLAorMHg4ZSwweDY5LDB4OGYsMHg2OCwweDEyLDB4MzAsMHgzOSwweDIyLDB4ODAsMHgwMCwweDAyLDB4MmMsMHg2YSwweDAyLDB4MmMsMHg2YSwKKzB4ZTUsMHg2ZCwweDMwLDB4ZTcsMHgxOSwweGU1LDB4NzIsMHgxNCwweDQ1LDB4NzEsMHg3MCwweDEyLDB4ZTUsMHg0YSwweDcwLDB4MGUsCisweGU1LDB4NGMsMHg0NSwweDRiLDB4NzAsMHgwOCwweDkwLDB4ZmYsMHgwMCwweGUwLDB4NTQsMHgxZiwweDYwLDB4MDMsMHgwMiwweDJjLAorMHg2YSwweGU1LDB4NmQsMHgyMCwweGUwLDB4MDgsMHhlNSwweDZkLDB4MjAsMHhlMSwweDAzLDB4MDIsMHgyYywweDZhLDB4NzUsMHg2YSwKKzB4NmUsMHhlNCwweGY1LDB4NjksMHhmNSwweDY4LDB4ZTQsMHhmNSwweDZmLDB4MDQsMHhmNSwweDcwLDB4MTIsMHgzMCwweDM5LDB4MjIsCisweGU1LDB4NmQsMHgyMCwweGU3LDB4MTIsMHhlNSwweDcyLDB4NDUsMHg3MSwweDcwLDB4MGMsMHhlNSwweDRhLDB4NzAsMHgwOCwweDkwLAorMHhmZiwweDAwLDB4ZTAsMHg1NCwweDFmLDB4NjAsMHgwMywweDAyLDB4MmMsMHg2YSwweGU1LDB4NmQsMHgyMCwweGUwLDB4MDcsMHhlNSwKKzB4NmQsMHgyMCwweGUxLDB4MDIsMHg4MCwweDc0LDB4ODUsMHg0YywweDZlLDB4ZTUsMHg2ZSwweDcwLDB4MDgsMHg0MywweDZkLDB4MDEsCisweDUzLDB4NmQsMHhmZCwweDgwLDB4MDYsMHg1MywweDZkLDB4ZmUsMHg0MywweDZkLDB4MDIsMHg3YywweDAwLDB4MTIsMHgzMCwweDI0LAorMHgyMiwweGU1LDB4NmQsMHgzMCwweGU3LDB4MWEsMHhlNSwweDcyLDB4MTQsMHg0NSwweDcxLDB4NzAsMHgxMywweGU1LDB4NGEsMHg3MCwKKzB4MGYsMHhlNSwweDRjLDB4NDUsMHg0YiwweDcwLDB4MDksMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LDB4MWYsMHgxNCwweDYwLDB4MDIsCisweDgwLDB4MzgsMHhlNSwweDZkLDB4MjAsMHhlMSwweDAyLDB4ODAsMHgzMSwweDdjLDB4MDEsMHgxMiwweDMwLDB4MjQsMHgyMiwweGU1LAorMHg2ZCwweDIwLDB4ZTcsMHgxNSwweGU1LDB4NzIsMHg0NSwweDcxLDB4NzAsMHgwZiwweGU1LDB4NGMsMHg0NSwweDRiLDB4NzAsMHgwOSwKKzB4OTAsMHhmZiwweDAwLDB4ZTAsMHg1NCwweDFmLDB4MTQsMHg2MCwweDAyLDB4ODAsMHgwZiwweGU1LDB4NmQsMHgyMCwweGUxLDB4MDIsCisweDgwLDB4MDgsMHg3YywweDAwLDB4MTIsMHgzMCwweDI0LDB4MjIsMHg4MCwweDAwLDB4MDIsMHgyZiwweDJiLDB4YjQsMHg0MCwweDAyLAorMHg4MCwweDA2LDB4ZDMsMHg1MCwweDAzLDB4MDIsMHgyZiwweDIxLDB4OTAsMHhmZiwweDAxLDB4ZTAsMHg5MCwweGZjLDB4MzUsMHhmMCwKKzB4ZTUsMHg0YSwweDkwLDB4ZmMsMHgzNiwweGYwLDB4ZTQsMHg5MCwweGZjLDB4MzcsMHhmMCwweGU1LDB4NmEsMHgyNCwweDAzLDB4ZjUsCisweDZhLDB4ZTUsMHg2OSwweDM0LDB4MDAsMHhmNSwweDY5LDB4YWQsMHg0YiwweGU1LDB4NGMsMHg4NSwweDZhLDB4ODIsMHg4NSwweDY5LAorMHg4MywweGNkLDB4ZjAsMHhhMywweGNkLDB4ZjAsMHg5MCwweGZmLDB4MDEsMHhlMCwweDEyLDB4MDEsMHhiNywweDJjLDB4ZDgsMHgwMSwKKzB4MmMsMHhmZSwweDAyLDB4MmQsMHgyOCwweDAzLDB4MmQsMHg1MiwweDA0LDB4MmQsMHhhMCwweDA1LDB4MmQsMHhkZCwweDA2LDB4MmUsCisweDAzLDB4MDcsMHgyZSwweDI5LDB4MDgsMHgyZSwweDU1LDB4MDksMHgyZSwweDdiLDB4MGIsMHgyZSwweGExLDB4MGMsMHgyZSwweGIwLAorMHg4MCwweDJlLDB4YjAsMHg4MSwweDAwLDB4MDAsMHgyZiwweDBlLDB4ZTUsMHg2ZCwweDIwLDB4ZTcsMHgwNiwweDdjLDB4MDUsMHgxMiwKKzB4MjUsMHhiZiwweDIyLDB4N2QsMHgyNCwweDdlLDB4MzUsMHg3ZiwweDAyLDB4NzksMHgzOCwweDdhLDB4ZmMsMHg3YiwweDAxLDB4NzQsCisweDA4LDB4NzgsMHgwMCwweDEyLDB4MDMsMHgzZiwweDdkLDB4MDgsMHg3YywweDAwLDB4MTIsMHgyNSwweDI2LDB4MjIsMHhlNSwweDZkLAorMHgyMCwweGU3LDB4MDYsMHg3YywweDA1LDB4MTIsMHgyNSwweGJmLDB4MjIsMHhlNSwweDRhLDB4YjQsMHgwMywweDAwLDB4NDAsMHgxMCwKKzB4YjQsMHgwNSwweDAwLDB4NTAsMHgwYiwweGU1LDB4NGEsMHg3ZiwweDAwLDB4ZmUsMHg3YywweDEwLDB4MTIsMHgzMSwweGZiLDB4MjIsCisweDdkLDB4MDAsMHg3YywweDA3LDB4MTIsMHgyNSwweDI2LDB4MjIsMHhlNSwweDZkLDB4MjAsMHhlNywweDA2LDB4N2MsMHgwNSwweDEyLAorMHgyNSwweGJmLDB4MjIsMHhlNSwweDRhLDB4YjQsMHgwMywweDAwLDB4NDAsMHgxMCwweGI0LDB4MDUsMHgwMCwweDUwLDB4MGIsMHhlNSwKKzB4NGEsMHg3ZiwweDAwLDB4ZmUsMHg3YywweDExLDB4MTIsMHgzMSwweGZiLDB4MjIsMHg3ZCwweDAwLDB4N2MsMHgwNywweDEyLDB4MjUsCisweDI2LDB4MjIsMHhlNSwweDZkLDB4MjAsMHhlNywweDA2LDB4N2MsMHgwNSwweDEyLDB4MjUsMHhiZiwweDIyLDB4ZTUsMHg0YSwweGI0LAorMHgwNSwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwYSwweGU0LDB4ZmYsMHgwNCwweGZlLDB4N2MsMHgwYSwweDEyLDB4MzEsMHhmYiwKKzB4MjIsMHhiNCwweDAxLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDBhLDB4ZTQsMHhmZiwweDA0LDB4ZmUsMHg3YywweDA4LDB4MTIsCisweDMxLDB4ZmIsMHgyMiwweGI0LDB4MDMsMHgwMCwweDQwLDB4MTAsMHhiNCwweDA1LDB4MDAsMHg1MCwweDBiLDB4ZTUsMHg0YSwweDdmLAorMHgwMCwweGZlLDB4N2MsMHgxMywweDEyLDB4MzEsMHhmYiwweDIyLDB4N2QsMHgwMCwweDdjLDB4MDcsMHgxMiwweDI1LDB4MjYsMHgyMiwKKzB4ZTUsMHg2ZCwweDIwLDB4ZTcsMHgzNCwweGQzLDB4ZTUsMHg3MiwweDk0LDB4NDgsMHhlNSwweDcxLDB4OTQsMHgwMCwweDUwLDB4MDYsCisweGU1LDB4NzIsMHg0NSwweDcxLDB4NzAsMHgwNiwweDdjLDB4MDIsMHgxMiwweDI1LDB4YmYsMHgyMiwweGU1LDB4NGEsMHhiNCwweDAxLAorMHgwMywweGIzLDB4NDAsMHgwYiwweGMzLDB4YjQsMHgwMywweDAwLDB4NDAsMHgwOSwweGI0LDB4MDYsMHgwMCwweDUwLDB4MDQsMHgxMiwKKzB4MzAsMHhkMSwweDIyLDB4N2MsMHgwNywweDEyLDB4MjUsMHhiZiwweDIyLDB4MTIsMHgyNSwweDVkLDB4MjIsMHhlNSwweDZkLDB4MjAsCisweGU3LDB4MWQsMHhlNSwweDRhLDB4YjQsMHgwMywweDAwLDB4NDAsMHgxMCwweGI0LDB4MDUsMHgwMCwweDUwLDB4MGIsMHhlNSwweDRhLAorMHg3ZiwweDAwLDB4ZmUsMHg3YywweDE2LDB4MTIsMHgzMSwweGZiLDB4MjIsMHg3YywweDA3LDB4MTIsMHgyNSwweGJmLDB4MjIsMHgxMiwKKzB4MjUsMHg1ZCwweDIyLDB4ZTUsMHg2ZCwweDIwLDB4ZTcsMHgxZCwweGU1LDB4NGEsMHhiNCwweDAzLDB4MDAsMHg0MCwweDEwLDB4YjQsCisweDA1LDB4MDAsMHg1MCwweDBiLDB4ZTUsMHg0YSwweDdmLDB4MDAsMHhmZSwweDdjLDB4MTksMHgxMiwweDMxLDB4ZmIsMHgyMiwweDdjLAorMHgwNywweDEyLDB4MjUsMHhiZiwweDIyLDB4MTIsMHgyNSwweDVkLDB4MjIsMHhlNSwweDZkLDB4MjAsMHhlNywweDIzLDB4NzQsMHg4MSwKKzB4OTAsMHhmZiwweDkzLDB4ZjAsMHhlNSwweDRhLDB4YjQsMHgwMywweDAwLDB4NDAsMHgxMCwweGI0LDB4MDUsMHgwMCwweDUwLDB4MGIsCisweGU1LDB4NGEsMHg3ZiwweDAwLDB4ZmUsMHg3YywweDE3LDB4MTIsMHgzMSwweGZiLDB4MjIsMHg3YywweDA3LDB4MTIsMHgyNSwweGJmLAorMHgyMiwweDEyLDB4MjUsMHg1ZCwweDIyLDB4ZTUsMHg2ZCwweDIwLDB4ZTcsMHgxZCwweGU1LDB4NGEsMHhiNCwweDAzLDB4MDAsMHg0MCwKKzB4MTAsMHhiNCwweDA1LDB4MDAsMHg1MCwweDBiLDB4ZTUsMHg0YSwweDdmLDB4MDAsMHhmZSwweDdjLDB4MTgsMHgxMiwweDMxLDB4ZmIsCisweDIyLDB4N2MsMHgwNywweDEyLDB4MjUsMHhiZiwweDIyLDB4MTIsMHgyNSwweDVkLDB4MjIsMHhlNSwweDZkLDB4MjAsMHhlNywweDFkLAorMHhlNSwweDRhLDB4YjQsMHgwMywweDAwLDB4NDAsMHgxMCwweGI0LDB4MDUsMHgwMCwweDUwLDB4MGIsMHhlNSwweDRhLDB4N2YsMHgwMCwKKzB4ZmUsMHg3YywweDE1LDB4MTIsMHgzMSwweGZiLDB4MjIsMHg3YywweDA3LDB4MTIsMHgyNSwweGJmLDB4MjIsMHgxMiwweDI1LDB4NWQsCisweDIyLDB4ZTUsMHg2ZCwweDIwLDB4ZTcsMHgwNiwweDdjLDB4MDcsMHgxMiwweDI1LDB4YmYsMHgyMiwweDEyLDB4MjUsMHg1ZCwweDIyLAorMHhlNSwweDZkLDB4MzAsMHhlNywweDIwLDB4OTAsMHhmZiwweDAwLDB4ZTAsMHg1NCwweDFmLDB4NzAsMHgxMCwweDkwLDB4ZmYsMHgwMSwKKzB4ZTAsMHhiNCwweDgwLDB4MDUsMHgxMiwweDI1LDB4NTQsMHg4MCwweDAzLDB4MTIsMHgyNSwweDVkLDB4MjIsMHg3ZCwweDAwLDB4N2MsCisweDA1LDB4MTIsMHgyNSwweDI2LDB4MjIsMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LDB4MWYsMHg2MCwweDA2LDB4N2MsMHgwNSwweDEyLAorMHgyNSwweGJmLDB4MjIsMHhkMywweGU1LDB4NzIsMHg5NCwweDQ4LDB4ZTUsMHg3MSwweDk0LDB4MDAsMHg1MCwweDBiLDB4YzMsMHhlNSwKKzB4NzIsMHg5NCwweDA3LDB4ZTUsMHg3MSwweDk0LDB4MDAsMHg1MCwweDA2LDB4N2MsMHgwMywweDEyLDB4MjUsMHhiZiwweDIyLDB4ZTUsCisweDRhLDB4YjQsMHgwNSwweDA0LDB4MTIsMHgzMCwweGQxLDB4MjIsMHg3YywweDA3LDB4MTIsMHgyNSwweGJmLDB4MjIsMHhlNSwweDZkLAorMHgzMCwweGU3LDB4MDgsMHg3ZCwweDAwLDB4N2MsMHgwNSwweDEyLDB4MjUsMHgyNiwweDIyLDB4N2MsMHgwNSwweDEyLDB4MjUsMHhiZiwKKzB4MjIsMHhiNCwweDIwLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDAwLDB4ODAsMHgwMCwweDEyLDB4MmYsMHhmZiwweDIyLDB4NzUsCisweDQzLDB4MDAsMHg5MCwweGZmLDB4ODMsMHhlMCwweDU0LDB4MGYsMHhkMywweDk1LDB4NDMsMHg0MCwweDI0LDB4ZTUsMHg0MywweDI0LAorMHhmMCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmUsMHhmNSwweDgzLDB4ZTAsMHhhZCwweDZhLDB4YWUsMHg2OSwweGFmLDB4NjgsMHgxMiwKKzB4MDMsMHgwZiwweDA1LDB4NDMsMHgwZCwweGVkLDB4NzAsMHgwMSwweDBlLDB4OGQsMHg2YSwweDhlLDB4NjksMHg4ZiwweDY4LDB4ODAsCisweGQxLDB4ZTUsMHg0MywweDdkLDB4MDAsMHhmYywweGMzLDB4ZTUsMHg3MCwweDljLDB4ZjUsMHg3MCwweGU1LDB4NmYsMHg5ZCwweGY1LAorMHg2ZiwweGU1LDB4NzAsMHg0NSwweDZmLDB4NjAsMHgwNiwweGU0LDB4OTAsMHhmZiwweDgzLDB4ZjAsMHgyMiwweDkwLDB4ZmYsMHg4MiwKKzB4ZTAsMHg0NCwweDA4LDB4ZjAsMHhlNCwweGY1LDB4NmYsMHg3NSwweDcwLDB4NDksMHg5MCwweGZjLDB4MzUsMHhlMCwweGI0LDB4MDUsCisweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHg0MCwweDkwLDB4ZmMsMHgzNiwweGUwLDB4ZjUsMHg0MywweGI0LDB4MDUsMHgwMiwweDgwLAorMHgwMywweGQzLDB4NDAsMHgwYSwweGU0LDB4ZmYsMHgwNCwweGZlLDB4N2MsMHgwYiwweDEyLDB4MzEsMHhmYiwweDIyLDB4YjQsMHgwMSwKKzB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDBhLDB4ZTQsMHhmZiwweDA0LDB4ZmUsMHg3YywweDA5LDB4MTIsMHgzMSwweGZiLDB4MjIsCisweGI0LDB4MDMsMHgwMCwweDQwLDB4MTAsMHhiNCwweDA1LDB4MDAsMHg1MCwweDBiLDB4ZTUsMHg0MywweDdmLDB4MDAsMHhmZSwweDdjLAorMHgxNCwweDEyLDB4MzEsMHhmYiwweDIyLDB4MjIsMHhiNCwweDgwLDB4MDAsMHg0MCwweDIzLDB4YjQsMHg4MiwweDAwLDB4NTAsMHgxZSwKKzB4N2MsMHgzNSwweDdkLDB4ZmMsMHgxMiwweDE3LDB4N2UsMHg3ZCwweDAwLDB4OGMsMHg2YywweDhkLDB4NmIsMHg5MCwweGZjLDB4MzcsCisweGUwLDB4NjAsMHgwNSwweDEyLDB4MmYsMHhmZiwweDgwLDB4MDUsMHg3YywweDAwLDB4MTIsMHgzMCwweDI0LDB4MjIsMHgyMiwweDkwLAorMHhmZiwweDgzLDB4ZTAsMHg1NCwweDdmLDB4ZjAsMHg5MCwweGZmLDB4ODIsMHhlMCwweDQ0LDB4MDgsMHhmMCwweDkwLDB4ZmYsMHg4MCwKKzB4ZTAsMHg0NCwweDA4LDB4ZjAsMHgyMiwweDkwLDB4ZmYsMHg4MiwweGUwLDB4NDQsMHgwOCwweGYwLDB4OTAsMHhmZiwweDgwLDB4ZTAsCisweDQ0LDB4MDgsMHhmMCwweDIyLDB4OGMsMHgyMywweDdkLDB4MDAsMHg4YywweDcwLDB4OGQsMHg2ZiwweDc1LDB4NmEsMHgzNSwweDc1LAorMHg2OSwweGZjLDB4NzUsMHg2OCwweDAxLDB4MTIsMHgzMCwweDM5LDB4MjIsMHg5MCwweGZmLDB4ODMsMHhlMCwweDU0LDB4N2YsMHhmMCwKKzB4ZTUsMHg3MCwweDY0LDB4NDksMHg0NSwweDZmLDB4NzAsMHgwMSwweDIyLDB4YzMsMHhlNSwweDcwLDB4OTQsMHgwOCwweGU1LDB4NmYsCisweDk0LDB4MDAsMHg0MCwweDE1LDB4NzUsMHgyMSwweDA4LDB4ZTUsMHgyMSwweDdkLDB4MDAsMHhmYywweGMzLDB4ZTUsMHg3MCwweDljLAorMHhmNSwweDcwLDB4ZTUsMHg2ZiwweDlkLDB4ZjUsMHg2ZiwweDgwLDB4MDksMHg4NSwweDcwLDB4MjEsMHhlNCwweGY1LDB4NmYsMHg3NSwKKzB4NzAsMHg0OSwweDc1LDB4MjIsMHgwMCwweGU1LDB4MjIsMHhjMywweDk1LDB4MjEsMHg1MCwweDI2LDB4YWQsMHg2YSwweGFlLDB4NjksCisweGFmLDB4NjgsMHgxMiwweDAxLDB4ZTYsMHhmYywweGU1LDB4MjIsMHgyNCwweGY4LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZSwweGY1LAorMHg4MywweGVjLDB4ZjAsMHgwNSwweDIyLDB4MGQsMHhlZCwweDcwLDB4MDEsMHgwZSwweDhkLDB4NmEsMHg4ZSwweDY5LDB4OGYsMHg2OCwKKzB4ODAsMHhkMywweGU1LDB4MjEsMHg1NCwweDdmLDB4OTAsMHhmZiwweDgxLDB4ZjAsMHgyMiwweDhjLDB4NDgsMHg3ZiwweDAwLDB4ZWYsCisweDI0LDB4ZmQsMHg0MCwweDE5LDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwNywweGE0LDB4MjQsMHg3ZiwweGY1LDB4ODIsMHhlNCwweDM0LAorMHhmOCwweGY1LDB4ODMsMHhlMCwweDY1LDB4NDgsMHg3MCwweDAyLDB4ZDMsMHgyMiwweDBmLDB4ODAsMHhlMiwweDhmLDB4NDcsMHhjMywKKzB4MjIsMHg4NSwweDcyLDB4NzAsMHg4NSwweDcxLDB4NmYsMHg5MCwweGZmLDB4ODIsMHhlMCwweDU0LDB4ZjcsMHhmMCwweDkwLDB4ZmYsCisweDgzLDB4ZTAsMHg1NCwweDdmLDB4ZjAsMHgyMiwweGMwLDB4MDAsMHhjMCwweDAxLDB4YzAsMHgwMiwweGMwLDB4MDYsMHhjMCwweDA3LAorMHhlNSwweDc4LDB4MjQsMHgwOCwweGY4LDB4ODYsMHgwNiwweDUzLDB4MDYsMHg3ZiwweDdjLDB4ZmYsMHgxMiwweDMxLDB4NWIsMHg3YywKKzB4MDAsMHg3ZCwweDAwLDB4ZTUsMHg3YiwweDYwLDB4NDYsMHhmZiwweDkwLDB4ZmQsMHg5NSwweGUwLDB4NTQsMHg3ZiwweDZlLDB4NzAsCisweDBmLDB4YzAsMHg4MywweGMwLDB4ODIsMHhhMywweGUwLDB4ZmQsMHhhMywweGUwLDB4ZmMsMHhhMywweDE1LDB4N2IsMHg4MCwweDA3LAorMHhhMywweGEzLDB4YTMsMHhkZiwweGU2LDB4ODAsMHgyNiwweGRmLDB4MDYsMHhkMCwweDgyLDB4ZDAsMHg4MywweDgwLDB4MWUsMHhlMCwKKzB4ZjgsMHhhMywweGUwLDB4ZjksMHhhMywweGUwLDB4ZmEsMHhkMCwweDgyLDB4ZDAsMHg4MywweGU4LDB4ZjAsMHhhMywweGU5LDB4ZjAsCisweGEzLDB4ZWEsMHhmMCwweGEzLDB4YzAsMHg4MywweGMwLDB4ODIsMHhhMywweGEzLDB4YTMsMHg4MCwweGRhLDB4MTIsMHgzMSwweGY0LAorMHhkMCwweDA3LDB4ZDAsMHgwNiwweGQwLDB4MDIsMHhkMCwweDAxLDB4ZDAsMHgwMCwweDIyLDB4ODUsMHhhOCwweDdhLDB4NzUsMHhhOCwKKzB4ODgsMHhlYywweDcwLDB4MDIsMHg3YywweDNmLDB4OGMsMHg3OSwweDIyLDB4ZTUsMHg3OCwweDI0LDB4MDgsMHhmOCwweDc2LDB4MDAsCisweDEyLDB4MzIsMHg0OCwweDgwLDB4ZmIsMHhjMCwweDAwLDB4YzAsMHgwMSwweGMwLDB4MDIsMHhjMCwweDA2LDB4YzAsMHgwNywweGFlLAorMHgwNCwweDdjLDB4ZmYsMHgxMiwweDMxLDB4NWIsMHhlNSwweDdiLDB4NjAsMHg0MiwweGZmLDB4OTAsMHhmZCwweDk1LDB4ZTAsMHg1NCwKKzB4N2YsMHg2ZSwweDcwLDB4MGIsMHhjMCwweDgzLDB4YzAsMHg4MiwweGEzLDB4YTMsMHhhMywweDE1LDB4N2IsMHg4MCwweDA3LDB4YTMsCisweGEzLDB4YTMsMHhkZiwweGVhLDB4ODAsMHgyNiwweGRmLDB4MDYsMHhkMCwweDgyLDB4ZDAsMHg4MywweDgwLDB4ZDgsMHhlMCwweGY4LAorMHhhMywweGUwLDB4ZjksMHhhMywweGUwLDB4ZmEsMHhkMCwweDgyLDB4ZDAsMHg4MywweGU4LDB4ZjAsMHhhMywweGU5LDB4ZjAsMHhhMywKKzB4ZWEsMHhmMCwweGEzLDB4YzAsMHg4MywweGMwLDB4ODIsMHhhMywweGEzLDB4YTMsMHg4MCwweGRhLDB4NzgsMHgwOCwweDA4LDB4NzksCisweDE4LDB4MDksMHg3YywweDAxLDB4ZTYsMHg1NCwweDdmLDB4NmUsMHg3MCwweDA2LDB4NzYsMHgwMCwweDc3LDB4MDAsMHg4MCwweDA2LAorMHgwOCwweDA5LDB4MGMsMHhiYywweDA4LDB4ZWUsMHgxMiwweDMxLDB4ZjQsMHhkMCwweDA3LDB4ZDAsMHgwNiwweGQwLDB4MDIsMHhkMCwKKzB4MDEsMHhkMCwweDAwLDB4MjIsMHg3NSwweDc5LDB4MDAsMHg4NSwweDdhLDB4YTgsMHgyMiwweGMwLDB4ZjAsMHhjMCwweDgyLDB4YzAsCisweDgzLDB4YzMsMHhlNSwweDdiLDB4MjQsMHhlOCwweDUwLDB4MDUsMHgxMiwweDMyLDB4NDgsMHg4MCwweGY0LDB4ZWMsMHg2MCwweDMxLAorMHg5MCwweDM1LDB4MjMsMHhlNCwweDkzLDB4YzMsMHg5YywweDQwLDB4MjgsMHhjMCwweDA0LDB4N2MsMHhmZiwweDEyLDB4MzEsMHg1YiwKKzB4ZDAsMHgwNCwweDQzLDB4MDQsMHg4MCwweGU1LDB4N2IsMHg3NSwweGYwLDB4MDMsMHhhNCwweDI0LDB4OTUsMHhmNSwweDgyLDB4ZTQsCisweDM0LDB4ZmQsMHhmNSwweDgzLDB4ZWMsMHhmMCwweGVmLDB4YTMsMHhmMCwweGVlLDB4YTMsMHhmMCwweDA1LDB4N2IsMHgxMiwweDMxLAorMHhmNCwweGQwLDB4ODMsMHhkMCwweDgyLDB4ZDAsMHhmMCwweDIyLDB4YzAsMHgwNCwweDdjLDB4MjAsMHhkMiwweDhjLDB4ZDIsMHg4ZCwKKzB4ZDUsMHgwNCwweGZkLDB4ZDAsMHgwNCwweDIyLDB4NzUsMHhhOCwweDAwLDB4NzUsMHg4OCwweDAwLDB4NzUsMHhiOCwweDAwLDB4NzUsCisweGYwLDB4MDAsMHg3NSwweGQwLDB4MDAsMHhlNCwweGY4LDB4OTAsMHgwMCwweDAwLDB4ZjYsMHgwOCwweGI4LDB4MDAsMHhmYiwweDAyLAorMHgwMCwweDAwLDB4YzMsMHhlZCwweDk0LDB4MDIsMHg1MCwweDA0LDB4N2QsMHgwMywweDdjLDB4ZTgsMHhlYywweGY0LDB4ZmMsMHhlZCwKKzB4ZjQsMHhmZCwweDBjLDB4YmMsMHgwMCwweDAxLDB4MGQsMHg4YywweDdmLDB4OGQsMHg3ZSwweDIyLDB4YzMsMHhlYywweDk0LDB4YmMsCisweGVkLDB4OTQsMHgwMiwweDUwLDB4MDQsMHg3ZCwweDA3LDB4N2MsMHhkMCwweGVjLDB4ZjQsMHhmYywweGVkLDB4ZjQsMHhmZCwweDBjLAorMHhiYywweDAwLDB4MDEsMHgwZCwweDhjLDB4N2QsMHg4ZCwweDdjLDB4MjIsMHhlYywweDcwLDB4MDEsMHgyMiwweGMwLDB4MDAsMHhlNSwKKzB4NzgsMHgyNCwweDE4LDB4ZjgsMHhhNiwweDA0LDB4ZTUsMHg3OCwweDI0LDB4MDgsMHhmOCwweGM2LDB4NTQsMHg3ZiwweGY2LDB4ZTYsCisweDMwLDB4ZTcsMHgwMywweGQwLDB4MDAsMHgyMiwweDEyLDB4MzIsMHg0OCwweDgwLDB4ZjQsMHhjMiwweDhjLDB4ODUsMHg3YywweDhjLAorMHg4NSwweDdkLDB4OGEsMHhkMiwweDhjLDB4YzAsMHhlMCwweGMwLDB4ZDAsMHhjMCwweGYwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwKKzB4MDAsMHhjMCwweDAxLDB4YzAsMHgwMiwweGMwLDB4MDMsMHhjMCwweDA0LDB4YzAsMHgwNSwweGMwLDB4MDYsMHhjMCwweDA3LDB4MTIsCisweDFhLDB4ZDEsMHhlNSwweDc4LDB4MjQsMHgwOCwweGY4LDB4ZTYsMHg2MCwweDI0LDB4ZTUsMHg3OCwweDI0LDB4MTAsMHhmOCwweGE2LAorMHg4MSwweGU1LDB4NzgsMHg3NSwweGYwLDB4MjEsMHhhNCwweDI0LDB4OGQsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZjLDB4ZjUsMHg4MywKKzB4NzgsMHhhZSwweGU1LDB4ODEsMHgwNCwweGMzLDB4OTgsMHhmOSwweGU2LDB4ZjAsMHgwOCwweGEzLDB4ZDksMHhmYSwweDc0LDB4MDgsCisweDI1LDB4NzgsMHhmOCwweDA1LDB4NzgsMHgwOCwweGU2LDB4NTQsMHg4MCwweDcwLDB4MGMsMHhlNSwweDc4LDB4YjQsMHgwNywweGYzLAorMHg3OCwweDA4LDB4NzUsMHg3OCwweDAwLDB4ODAsMHhlZiwweGU1LDB4NzgsMHgyNCwweDEwLDB4ZjgsMHg4NiwweDgxLDB4ZTUsMHg3OCwKKzB4NzUsMHhmMCwweDIxLDB4YTQsMHgyNCwweDhkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywweGY1LDB4ODMsMHg3OCwweGFlLDB4ZTUsCisweDgxLDB4MDQsMHhjMywweDk4LDB4ZjksMHhlMCwweGY2LDB4MDgsMHhhMywweGQ5LDB4ZmEsMHhkMCwweDA3LDB4ZDAsMHgwNiwweGQwLAorMHgwNSwweGQwLDB4MDQsMHhkMCwweDAzLDB4ZDAsMHgwMiwweGQwLDB4MDEsMHhkMCwweDAwLDB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwKKzB4ZjAsMHhkMCwweGQwLDB4ZDAsMHhlMCwweDMyLDB4YzAsMHhlMCwweGMwLDB4ZDAsMHhjMCwweDAwLDB4YzAsMHgwMSwweGMwLDB4MDIsCisweGMyLDB4OGUsMHg4NSwweDdlLDB4OGQsMHg4NSwweDdmLDB4OGIsMHhkMiwweDhlLDB4NzgsMHgxOSwweDc5LDB4MDksMHg3YSwweDA3LAorMHhlNywweDcwLDB4MDQsMHhhNiwweDAwLDB4ODAsMHgwYiwweGU2LDB4NjAsMHgwOCwweDE2LDB4ZTYsMHg3MCwweDA0LDB4ZTcsMHg0NCwKKzB4ODAsMHhmNywweDA4LDB4MDksMHhkYSwweGVhLDB4ZTUsMHg3OSwweDYwLDB4MTMsMHgxNCwweGY1LDB4NzksMHg3MCwweDBlLDB4ZTUsCisweDc4LDB4MjQsMHgwOCwweGY4LDB4NzYsMHgwMCwweDEyLDB4MzEsMHhmNCwweGQyLDB4OGMsMHhkMiwweDhkLDB4ZDAsMHgwMiwweGQwLAorMHgwMSwweGQwLDB4MDAsMHhkMCwweGQwLDB4ZDAsMHhlMCwweDMyLDB4NzUsMHg4MSwweGFkLDB4NzQsMHgyYSwweDkwLDB4ZmYsMHg5MywKKzB4ZjAsMHg3NSwweDdmLDB4MzAsMHg3NSwweDdlLDB4ZjgsMHg3NSwweDdkLDB4NjAsMHg3NSwweDdjLDB4ZjAsMHgxMiwweDA1LDB4MzYsCisweDEyLDB4MzQsMHg3YywweDEyLDB4MTcsMHgzNCwweDkwLDB4ZmYsMHg5MywweGUwLDB4NDQsMHgwMSwweGYwLDB4YjIsMHhiMywweDEyLAorMHgzNCwweGE2LDB4MTIsMHgzMiwweDU2LDB4ODAsMHhkYSwweDIyLDB4YzAsMHgwMCwweDdjLDB4MDEsMHhlYywweDI0LDB4MDgsMHhmOCwKKzB4ZTYsMHg2MCwweDA5LDB4MGMsMHhiYywweDA4LDB4ZjUsMHgxMiwweDMyLDB4NDgsMHg4MCwweGVlLDB4ZDAsMHgwMCwweDIyLDB4YzAsCisweGYwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweDAwLDB4YzAsMHgwNiwweGMwLDB4MDcsMHhlZCwweDI0LDB4MTAsMHhmOCwweDc2LAorMHhiYywweGVkLDB4NzUsMHhmMCwweDIxLDB4YTQsMHgyNCwweDhkLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywweGY1LDB4ODMsMHhjMCwKKzB4ODIsMHhjMCwweDgzLDB4YTMsMHhhMywweGU0LDB4NzgsMHgwZCwweGYwLDB4YTMsMHhkOCwweGZjLDB4ZWMsMHg1NCwweDdmLDB4NzUsCisweGYwLDB4MDIsMHhhNCwweDI0LDB4ZWYsMHhmNSwweDgyLDB4ZTUsMHhmMCwweDM0LDB4MzQsMHhmNSwweDgzLDB4ZTQsMHg5MywweGZlLAorMHg3NCwweDAxLDB4OTMsMHhmNSwweDgyLDB4OGUsMHg4MywweGU0LDB4OTMsMHhmZSwweDc0LDB4MDEsMHg5MywweGZmLDB4ZDAsMHg4MywKKzB4ZDAsMHg4MiwweGVmLDB4ZjAsMHhhMywweGVlLDB4ZjAsMHhlZCwweDI0LDB4MDgsMHhmOCwweGVjLDB4NDQsMHg4MCwweGY2LDB4ZDAsCisweDA3LDB4ZDAsMHgwNiwweGQwLDB4MDAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZjAsMHgyMiwweDc1LDB4NzgsMHgwMCwweDc1LAorMHg3YiwweDAwLDB4N2EsMHgwOCwweDc5LDB4MTgsMHg3OCwweDA4LDB4NzYsMHgwMCwweDc3LDB4MDAsMHgwOCwweDA5LDB4ZGEsMHhmOCwKKzB4ZTQsMHg3OCwweDA4LDB4NzQsMHg4MCwweDQ0LDB4N2YsMHhmNiwweDc0LDB4MDEsMHg0NCwweDEwLDB4ZjUsMHg4OSwweDc1LDB4YjgsCisweDA4LDB4ZDIsMHhhYiwweGQyLDB4YTksMHgyMiwweDc1LDB4ODEsMHhhZCwweGQyLDB4OGUsMHhkMiwweDhjLDB4ZDIsMHhhZiwweGU1LAorMHg3YiwweDYwLDB4MzIsMHhmZiwweDkwLDB4ZmQsMHg5NSwweGUwLDB4NTQsMHg4MCwweDYwLDB4MjQsMHg3OCwweDA4LDB4NzksMHgwOCwKKzB4ZTAsMHg1NCwweDdmLDB4ZmEsMHg3YiwweDAwLDB4ZTYsMHg1NCwweDdmLDB4YjUsMHgwMiwweDAyLDB4N2IsMHhmZiwweDA4LDB4ZDksCisweGY1LDB4ZWIsMHg3MCwweDBjLDB4ZWEsMHhmMCwweDEyLDB4MzMsMHhmOCwweGFkLDB4MDQsMHhhYywweDAyLDB4MTIsMHgzNCwweDBmLAorMHhhMywweGEzLDB4YTMsMHhkZiwweGQyLDB4MTIsMHgzMiwweDQ4LDB4ODAsMHhjNSwweDdjLDB4MDEsMHg3ZCwweDAwLDB4MjIsMHgwNCwKKzB4ZjUsMHgwNCwweGU5LDB4MDQsMHhlZCwweDA0LDB4ZTEsMHgwNCwweGRkLDB4MDQsMHhkOSwweDA0LDB4ZTUsMHgwNCwweGYxLDB4MDQsCisweDlkLDB4MDQsMHhhMSwweDA0LDB4Y2QsMHgwNCwweGQxLDB4MDQsMHg5OSwweDA0LDB4OTksMHgwNCwweDk5LDB4MDQsMHhkNSwweDA0LAorMHhiNSwweDA0LDB4YWQsMHgwNCwweGIxLDB4MDQsMHhhOSwweDA0LDB4YzEsMHgwNCwweGJkLDB4MDQsMHhiOSwweDA0LDB4YzUsMHgwNCwKKzB4YzksMHgwNCwweGE1LDB4MTksMHgwMSwweDAzLDB4MDAsMHgyMiwweDAwLDB4NDgsMHgwMiwweDAwLDB4NDgsMHgwZSwweDMwLDB4MTQsCisweDIwLDB4YzgsMHgxYSwweGQwLDB4MTgsMHgwYSwweDBjLDB4MDUsMHgwNiwweDAyLDB4MDMsMHgwMSwweDAyLDB4MDAsMHgwMSwweGNlLAorMHgwMSwweDgxLDB4MDEsMHgwMCwweDAwLDB4YzAsMHgwMCwweDgwLDB4MDAsMHg2MCwweDAwLDB4MzAsMHgwMCwweDE4LDB4MDAsMHgxMCwKKzB4MDAsMHgwOCwweDAwLDB4MDQsMHgwMCwweDAyLDB4MDAsMHgwMSwweDAwLDB4MDgsMHgxOCwweDM4LDB4MjgsMHgwYywweDA1LDB4MTAsCisweDBhLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDMsMHgwMSwweDEwLDB4MGEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLAorMHgwMCwweGZiLDB4ZTAsMHhmYiwweGYyLDB4MDksMHgwMiwweDI3LDB4MDAsMHgwMSwweDAyLDB4MDAsMHhhMCwweDMyLDB4MDksMHgwNCwKKzB4MDAsMHgwMCwweDAzLDB4ZmYsMHgwMCwweDAwLDB4MDAsMHgwNywweDA1LDB4ODEsMHgwMiwweDQwLDB4MDAsMHgwMCwweDA3LDB4MDUsCisweDAxLDB4MDIsMHg0MCwweDAwLDB4MDAsMHgwNywweDA1LDB4ODMsMHgwMywweDAyLDB4MDAsMHgwMSwweDIyLDB4MDMsMHg1NCwweDAwLAorMHg1NSwweDAwLDB4NTMsMHgwMCwweDQyLDB4MDAsMHgzMywweDAwLDB4MzQsMHgwMCwweDMxLDB4MDAsMHgzMCwweDAwLDB4MjAsMHgwMCwKKzB4MjAsMHgwMCwweDIwLDB4MDAsMHgyMCwweDAwLDB4MjAsMHgwMCwweDIwLDB4MDAsMHgyMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsCisweDAwLDB4MDAsCit9OworCisjZW5kaWYgLyogaWZuZGVmIF9USV9GV18zNDEwX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfZndfNTA1Mi5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX2Z3XzUwNTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2NmNDBhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3RpX2Z3XzUwNTIuaApAQCAtMCwwICsxLDg4NSBAQAorLyogdmk6IHRzPTggc3c9OAorICoKKyAqIFRJIDUwNTIgVVNCIFNlcmlhbCBEcml2ZXIgRmlybXdhcmUgSGVhZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFRleGFzIEluc3RydW1lbnRzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9USV9GV181MDUyX0hfCisjZGVmaW5lIF9USV9GV181MDUyX0hfCisKKy8qIGZpcm13YXJlIDkvMTgvMDQgKi8KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgdGlfZndfNTA1MltdID0geworMHhDMSwgMHgzNSwJLyogZmlybXdhcmUgaW1hZ2UgbGVuZ3RoIGV4Y2x1ZGluZyBoZWFkZXIsIGxpdHRsZSBlbmRpYW4gKi8KKzB4MDAsIAkJLyogcGxhY2Vob2xkZXIgZm9yIGNoZWNrc3VtICovCisKKzB4MDIsMHgwMCwweDFlLDB4MDIsMHgxYiwweDMyLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDAyLDB4MzIsMHg2YSwweGZmLDB4ZmYsCisweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgwMiwweDMzLDB4MTUsMHg3NSwweDgxLAorMHhjOCwweDkwLDB4ZmUsMHhmMCwweDg1LDB4ODMsMHhhMCwweDEyLDB4MzQsMHg3ZCwweGVjLDB4NGQsMHg2MCwweDZhLDB4NzgsMHhhNSwKKzB4ODAsMHgwMywweDc2LDB4MDAsMHgxOCwweGI4LDB4OTYsMHhmYSwweDc4LDB4NzksMHg4MCwweDAzLDB4NzYsMHgwMCwweDE4LDB4YjgsCisweDVmLDB4ZmEsMHg3OCwweDIwLDB4ODAsMHgwMywweDc2LDB4MDAsMHgxOCwweGI4LDB4MjAsMHhmYSwweDkwLDB4ZmUsMHhlNSwweGFlLAorMHg4MywweGFmLDB4ODIsMHg5MCwweGZkLDB4MDAsMHgxMiwweDAwLDB4YTEsMHg2MCwweDA1LDB4ZTQsMHhmMCwweGEzLDB4ODAsMHhmNiwKKzB4OTAsMHhmZSwweGYwLDB4YTgsMHg4MiwweDkwLDB4ZmUsMHhmMCwweGE5LDB4ODIsMHhlOCwweGMzLDB4OTksMHg1MCwweDA1LDB4NzYsCisweDAwLDB4MDgsMHg4MCwweGY2LDB4OTAsMHgwMCwweGZmLDB4MTIsMHgwMCwweGFhLDB4OTAsMHgwMSwweDAzLDB4MTIsMHgwMCwweGFhLAorMHg5MCwweDAxLDB4MDcsMHgxMiwweDAwLDB4YWEsMHg5MCwweDAxLDB4MGIsMHgxMiwweDAwLDB4YzgsMHg5MCwweDAxLDB4MTEsMHgxMiwKKzB4MDAsMHhjOCwweDkwLDB4MDEsMHgxNywweDEyLDB4MDAsMHhjOCwweDc1LDB4ZDAsMHgwMCwweDEyLDB4MzMsMHg2NywweDAyLDB4MDEsCisweDFkLDB4ZWYsMHg2NSwweDgyLDB4NzAsMHgwMywweGVlLDB4NjUsMHg4MywweDIyLDB4ZTQsMHg5MywweGY4LDB4NzQsMHgwMSwweDkzLAorMHhmOSwweDc0LDB4MDIsMHg5MywweGZlLDB4NzQsMHgwMywweDkzLDB4ZjUsMHg4MiwweDhlLDB4ODMsMHhlOCwweDY5LDB4NzAsMHgwMSwKKzB4MjIsMHhlNCwweDkzLDB4ZjYsMHhhMywweDA4LDB4ODAsMHhmNCwweGU0LDB4OTMsMHhmYywweDc0LDB4MDEsMHg5MywweGZkLDB4NzQsCisweDAyLDB4OTMsMHhmZSwweDc0LDB4MDMsMHg5MywweGZmLDB4NzQsMHgwNCwweDkzLDB4ZjgsMHg3NCwweDA1LDB4OTMsMHhmNSwweDgyLAorMHg4OCwweDgzLDB4MTIsMHgwMCwweGExLDB4NzAsMHgwMSwweDIyLDB4ZTQsMHg5MywweGEzLDB4YTgsMHg4MywweGE5LDB4ODIsMHg4YywKKzB4ODMsMHg4ZCwweDgyLDB4ZjAsMHhhMywweGFjLDB4ODMsMHhhZCwweDgyLDB4ODgsMHg4MywweDg5LDB4ODIsMHg4MCwweGUzLDB4MjEsCisweDIxLDB4MDQsMHg5MiwweDdhLDB4N2EsMHgwNCwweDkyLDB4YTYsMHhhOCwweDA0LDB4OTIsMHhmZSwweGYwLDB4MDQsMHg5NCwweDA0LAorMHg5NCwweGZiLDB4ZmIsMHgwNCwweDk5LDB4MDQsMHg5NCwweGZiLDB4ZmIsMHgwNCwweGY5LDB4MDQsMHhmOSwweDgwLDB4ZmUsMHhkMCwKKzB4ZjAsMHgzMCwweGYwLDB4MDksMHgyMCwweGYzLDB4MDMsMHhmNiwweDgwLDB4MTAsMHhmNywweDgwLDB4MGQsMHgzMCwweGYxLDB4MDksCisweDIwLDB4ZjMsMHgwMywweGYyLDB4ODAsMHgwNCwweGYzLDB4ODAsMHgwMSwweGYwLDB4MjAsMHhmNCwweDA0LDB4ZmMsMHhkMCwweGUwLAorMHhjYywweDIyLDB4Y2MsMHhjMCwweGUwLDB4MTIsMHgwMSwweDVhLDB4MDIsMHgwMSwweDRiLDB4YmMsMHgwMCwweDA1LDB4ZDAsMHhmMCwKKzB4YWMsMHhmMCwweDIyLDB4YzMsMHgxMywweGRjLDB4ZmMsMHgwMiwweDAxLDB4MjEsMHhiZiwweDAwLDB4MDksMHhlZCwweDI1LDB4ODIsCisweDc1LDB4ZjAsMHgwMSwweGY4LDB4ZTYsMHgyMiwweGJmLDB4MDEsMHgwZiwweGVkLDB4MjUsMHg4MiwweGY1LDB4ODIsMHhlZSwweDM1LAorMHg4MywweGY1LDB4ODMsMHg3NSwweGYwLDB4MDQsMHhlMCwweDIyLDB4ZWQsMHgyNSwweDgyLDB4NzUsMHhmMCwweDAyLDB4ZjgsMHhlMiwKKzB4MjIsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGY1LDB4ZjAsMHhjMywweGU0LDB4OTMsMHhhMywweGM1LDB4ZjAsMHg5NSwweGYwLDB4YzAsCisweGUwLDB4YzMsMHhkMCwweGYwLDB4ZTQsMHg5MywweGEzLDB4OTUsMHhmMCwweDQwLDB4MTIsMHhhMywweGEzLDB4YzMsMHhlNSwweGYwLAorMHgzMywweDUwLDB4MDIsMHgwNSwweDgzLDB4MjUsMHg4MiwweGY1LDB4ODIsMHg1MCwweDAyLDB4MDUsMHg4MywweDc0LDB4MDEsMHg5MywKKzB4YzAsMHhlMCwweGU0LDB4OTMsMHhjMCwweGUwLDB4MjIsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGY1LDB4ZjAsMHhlNCwweDkzLDB4NzAsCisweDA5LDB4NzQsMHgwMSwweDkzLDB4NzAsMHgwNCwweGEzLDB4YTMsMHg4MCwweDBjLDB4NzQsMHgwMiwweDkzLDB4NjUsMHhmMCwweDYwLAorMHgwNSwweGEzLDB4YTMsMHhhMywweDgwLDB4ZTcsMHg3NCwweDAxLDB4OTMsMHhjMCwweGUwLDB4ZTQsMHg5MywweGMwLDB4ZTAsMHgyMiwKKzB4MTIsMHgwMiwweDViLDB4MDIsMHgwMSwweGYyLDB4MTIsMHgwMiwweGFmLDB4MDIsMHgwMSwweGYyLDB4MTIsMHgwMiwweGQzLDB4MDIsCisweDAxLDB4ZjIsMHgzMCwweGUwLDB4MDcsMHgyMCwweGUzLDB4MDIsMHhlNiwweDIyLDB4ZTcsMHgyMiwweDMwLDB4ZTEsMHgwNywweDIwLAorMHhlMywweDAyLDB4ZTIsMHgyMiwweGUzLDB4MjIsMHgzMCwweGUyLDB4MDIsMHhlMCwweDIyLDB4ZTQsMHg5MywweDIyLDB4MTIsMHgwMiwKKzB4ZDMsMHgwMiwweDAyLDB4MWEsMHgxMiwweDAyLDB4YWYsMHgwMiwweDAyLDB4MWEsMHhhYiwweGYwLDB4MTIsMHgwMiwweDI0LDB4Y2IsCisweGM1LDB4ZjAsMHhjYiwweDIyLDB4MzAsMHhlMCwweDEwLDB4MjAsMHhlMywweDA2LDB4ZTYsMHhmNSwweGYwLDB4MDgsMHhlNiwweDIyLAorMHhlNywweGY1LDB4ZjAsMHgwOSwweGU3LDB4MTksMHgyMiwweDMwLDB4ZTEsMHgxMCwweDIwLDB4ZTMsMHgwNiwweGUyLDB4ZjUsMHhmMCwKKzB4MDgsMHhlMiwweDIyLDB4ZTMsMHhmNSwweGYwLDB4MDksMHhlMywweDE5LDB4MjIsMHgzMCwweGUyLDB4MDYsMHhlMCwweGY1LDB4ZjAsCisweGEzLDB4ZTAsMHgyMiwweGU0LDB4OTMsMHhmNSwweGYwLDB4NzQsMHgwMSwweDkzLDB4MjIsMHhiYiwweDAwLDB4MDMsMHg3NCwweDA5LAorMHgyMiwweGJiLDB4MDEsMHgwNywweDg5LDB4ODIsMHg4YSwweDgzLDB4NzQsMHgwNCwweDIyLDB4YmIsMHgwMiwweDA3LDB4ODksMHg4MiwKKzB4OGEsMHg4MywweDc0LDB4MTAsMHgyMiwweDc0LDB4MGEsMHgyMiwweDAyLDB4MDIsMHg3YiwweGJiLDB4MDAsMHgwNywweGU5LDB4MjUsCisweDgyLDB4ZjgsMHg3NCwweDAxLDB4MjIsMHhiYiwweDAxLDB4MGQsMHhlOSwweDI1LDB4ODIsMHhmNSwweDgyLDB4ZWEsMHgzNSwweDgzLAorMHhmNSwweDgzLDB4NzQsMHgwNCwweDIyLDB4YmIsMHgwMiwweDBkLDB4ZTksMHgyNSwweDgyLDB4ZjUsMHg4MiwweGVhLDB4MzUsMHg4MywKKzB4ZjUsMHg4MywweDc0LDB4MTAsMHgyMiwweGU5LDB4MjUsMHg4MiwweGY4LDB4NzQsMHgwMiwweDIyLDB4MDIsMHgwMiwweGFmLDB4YmYsCisweDAwLDB4MDUsMHhlZCwweGY4LDB4NzQsMHgwMSwweDIyLDB4YmYsMHgwMSwweDA3LDB4OGQsMHg4MiwweDhlLDB4ODMsMHg3NCwweDA0LAorMHgyMiwweGJmLDB4MDIsMHgwNywweDhkLDB4ODIsMHg4ZSwweDgzLDB4NzQsMHgxMCwweDIyLDB4ZWQsMHhmOCwweDc0LDB4MDIsMHgyMiwKKzB4MDIsMHgwMiwweGQzLDB4YmYsMHgwMCwweDA3LDB4ZWQsMHgyNSwweDgyLDB4ZjgsMHg3NCwweDAxLDB4MjIsMHhiZiwweDAxLDB4MGQsCisweGVkLDB4MjUsMHg4MiwweGY1LDB4ODIsMHhlZSwweDM1LDB4ODMsMHhmNSwweDgzLDB4NzQsMHgwNCwweDIyLDB4YmYsMHgwMiwweDBkLAorMHhlZCwweDI1LDB4ODIsMHhmNSwweDgyLDB4ZWUsMHgzNSwweDgzLDB4ZjUsMHg4MywweDc0LDB4MTAsMHgyMiwweGVkLDB4MjUsMHg4MiwKKzB4ZjgsMHg3NCwweDAyLDB4MjIsMHgwMiwweDAzLDB4MDcsMHhjMCwweGUwLDB4MTIsMHgwMiwweDViLDB4MDIsMHgwMywweDFmLDB4YzAsCisweGUwLDB4MTIsMHgwMiwweGFmLDB4MDIsMHgwMywweDFmLDB4YzAsMHhlMCwweDEyLDB4MDIsMHhkMywweDAyLDB4MDMsMHgxZiwweDMwLAorMHhlMCwweDBiLDB4MjAsMHhlMywweDA0LDB4ZDAsMHhlMCwweGY2LDB4MjIsMHhkMCwweGUwLDB4ZjcsMHgyMiwweDMwLDB4ZTEsMHgwYiwKKzB4MjAsMHhlMywweDA0LDB4ZDAsMHhlMCwweGYyLDB4MjIsMHhkMCwweGUwLDB4ZjMsMHgyMiwweGQwLDB4ZTAsMHhmMCwweDIyLDB4YzksCisweGNkLDB4YzksMHhjYSwweGNlLDB4Y2EsMHhjYiwweGNmLDB4Y2IsMHgxMiwweDAzLDB4NTIsMHhlZCwweGY5LDB4ZWUsMHhmYSwweGVmLAorMHhmYiwweDIyLDB4YmIsMHgwMCwweDJmLDB4YmYsMHgwMCwweDBhLDB4ZmEsMHhlZCwweGY4LDB4ZTcsMHhmNiwweDA4LDB4MDksMHhkYSwKKzB4ZmEsMHgyMiwweGJmLDB4MDEsMHgxMiwweDhkLDB4ODIsMHg4ZSwweDgzLDB4ZjgsMHgwMiwweDAzLDB4NmYsMHgwOSwweGEzLDB4ZTcsCisweGYwLDB4ZDgsMHhmYSwweDIyLDB4MDIsMHgwMywweDdhLDB4ZmEsMHhlZCwweGY4LDB4ZTcsMHhmMiwweDA4LDB4MDksMHhkYSwweGZhLAorMHgyMiwweDAyLDB4MDMsMHg4NCwweGJiLDB4MDEsMHg0ZCwweGJmLDB4MDAsMHgxNCwweDg5LDB4ODIsMHg4YSwweDgzLDB4ZjksMHhlZCwKKzB4ZjgsMHgwMiwweDAzLDB4OTYsMHgwOCwweGEzLDB4ZTAsMHhmNiwweGQ5LDB4ZmEsMHgyMiwweDAyLDB4MDMsMHhhNywweGJmLDB4MDEsCisweDIyLDB4OGQsMHg4MiwweDhlLDB4ODMsMHhmYiwweDA4LDB4YzksMHhjNSwweDgyLDB4YzksMHhjYSwweGM1LDB4ODMsMHhjYSwweGUwLAorMHhhMywweGM5LDB4YzUsMHg4MiwweGM5LDB4Y2EsMHhjNSwweDgzLDB4Y2EsMHhmMCwweGEzLDB4ZGIsMHhlYSwweGQ4LDB4ZTgsMHgyMiwKKzB4MDIsMHgwMywweGNhLDB4OGQsMHg4MiwweDhlLDB4ODMsMHhmOSwweGVkLDB4ZjgsMHhlMCwweGYyLDB4MDgsMHhhMywweGQ5LDB4ZmEsCisweDIyLDB4MDIsMHgwMywweGQ0LDB4YmIsMHgwMiwweDRkLDB4YmYsMHgwMCwweDEyLDB4ODksMHg4MiwweDhhLDB4ODMsMHhmOSwweGVkLAorMHhmOCwweDAyLDB4MDMsMHhlNiwweDA4LDB4YTMsMHhlNCwweDkzLDB4ZjYsMHhkOSwweGY5LDB4MjIsMHhiZiwweDAxLDB4MjMsMHg4ZCwKKzB4ODIsMHg4ZSwweDgzLDB4ZmIsMHgwOCwweGM5LDB4YzUsMHg4MiwweGM5LDB4Y2EsMHhjNSwweDgzLDB4Y2EsMHhlNCwweDkzLDB4YTMsCisweGM5LDB4YzUsMHg4MiwweGM5LDB4Y2EsMHhjNSwweDgzLDB4Y2EsMHhmMCwweGEzLDB4ZGIsMHhlOSwweGQ4LDB4ZTcsMHgyMiwweDAyLAorMHgwNCwweDE5LDB4ODksMHg4MiwweDhhLDB4ODMsMHhmOSwweGVkLDB4ZjgsMHhlNCwweDkzLDB4ZjIsMHgwOCwweGEzLDB4ZDksMHhmOSwKKzB4MjIsMHgwMiwweDA0LDB4MmEsMHhiZiwweDAwLDB4MGQsMHhmYSwweGVkLDB4ZjgsMHhlMywweGY2LDB4MDgsMHgwOSwweGRhLDB4ZmEsCisweDIyLDB4MDIsMHgwNCwweDM0LDB4YmYsMHgwMSwweDEyLDB4OGQsMHg4MiwweDhlLDB4ODMsMHhmOCwweDAyLDB4MDQsMHg0MSwweDA5LAorMHhhMywweGUzLDB4ZjAsMHhkOCwweGZhLDB4MjIsMHgwMiwweDA0LDB4NGMsMHhmYSwweGVkLDB4ZjgsMHhlMywweGYyLDB4MDgsMHgwOSwKKzB4ZGEsMHhmYSwweDIyLDB4MDIsMHgwNCwweDU2LDB4ZTYsMHhmYiwweDA4LDB4ZTYsMHhmYSwweDA4LDB4ZTYsMHhmOSwweDA0LDB4ZjYsCisweDE4LDB4NzAsMHgwMSwweDA2LDB4MjIsMHhlNiwweGZmLDB4MDgsMHhlNiwweGZlLDB4MDgsMHhlNiwweGZkLDB4MjIsMHhlZiwweGYwLAorMHhhMywweGVlLDB4ZjAsMHhhMywweGVkLDB4ZjAsMHgyMiwweGViLDB4ZjAsMHhhMywweGVhLDB4ZjAsMHhhMywweGU5LDB4ZjAsMHgyMiwKKzB4ZTAsMHhmZiwweGEzLDB4ZTAsMHhmZSwweGEzLDB4ZTAsMHhmZCwweDIyLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHhmYSwweGEzLDB4ZTAsCisweGY5LDB4MjIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4ZjksMHgwMCwweDViLDB4MDUsMHg3MywweDAwLAorMHgyNiwweDA1LDB4OWEsMHgwMCwweDMzLDB4MGEsMHgwYiwweDAwLDB4NWIsMHgwYSwweDc3LDB4MDAsMHg2MCwweDE1LDB4NTIsMHgwMCwKKzB4NWIsMHgwYywweGZiLDB4MDAsMHg1YiwweDA5LDB4YWIsMHgwMCwweDViLDB4MDksMHhlMiwweDAwLDB4NWIsMHgwZCwweGMyLDB4MDAsCisweDViLDB4MGIsMHhmMywweDAwLDB4NWIsMHgwYSwweDFlLDB4MDAsMHg1YiwweDBhLDB4NTMsMHgwMCwweDViLDB4MTcsMHg0YSwweDAwLAorMHgzMywweDE3LDB4NjAsMHgwMCwweDM0LDB4MWUsMHg0ZCwweDAwLDB4NDMsMHgxZSwweGYwLDB4MDAsMHg0NCwweDIwLDB4NWQsMHgwMCwKKzB4NDQsMHgyMCwweDRiLDB4MDAsMHg0NywweDFmLDB4MTcsMHgwMCwweDQ3LDB4MWYsMHhiYywweDAwLDB4NGQsMHgyMCwweDBkLDB4MDAsCisweDRmLDB4MWYsMHgzOSwweDAwLDB4NTgsMHgzMSwweGY1LDB4MDAsMHg1YiwweDdjLDB4Y2MsMHg3ZCwweGZmLDB4MTIsMHgxYywweGZlLAorMHgyMiwweDc0LDB4OTAsMHg5MCwweGZmLDB4OTEsMHhmMCwweDkwLDB4ZmYsMHhmYywweGUwLDB4MjAsMHhlNywweDJkLDB4YzIsMHhhZiwKKzB4YWUsMHg1OSwweGFmLDB4NTgsMHg3NSwweDVhLDB4MjAsMHhlNSwweDVhLDB4MTQsMHhjNSwweDVhLDB4NjAsMHgxOSwweGU0LDB4ZmUsCisweDdmLDB4MDUsMHhlZSwweDRmLDB4Y2UsMHgyNCwweGZmLDB4Y2UsMHhjZiwweDM0LDB4ZmYsMHhjZiwweDYwLDB4MDcsMHhlNCwweDkwLAorMHhmZiwweDkyLDB4ZjAsMHg4MCwweGVkLDB4ODAsMHhlMCwweDhlLDB4NTksMHg4ZiwweDU4LDB4MjIsMHgxMiwweDA1LDB4MDEsMHg3ZCwKKzB4MDcsMHg3YywweGI3LDB4MTIsMHgzMiwweDExLDB4N2QsMHgwZiwweDdjLDB4NmUsMHgxMiwweDMyLDB4MmIsMHg3OCwweDk3LDB4N2EsCisweDA2LDB4ZTQsMHhmNiwweDA4LDB4ZGEsMHhmYywweDdhLDB4MDYsMHgxMiwweDA1LDB4Y2YsMHg3YywweDAzLDB4MTIsMHgwZSwweDU3LAorMHg3YywweDA0LDB4MTIsMHgwZSwweDU3LDB4MTIsMHgyMSwweDhiLDB4ZTQsMHhmZSwweGZmLDB4N2MsMHgwZiwweDEyLDB4MzEsMHg5YSwKKzB4ZDIsMHhhOCwweDIyLDB4MTIsMHgzMCwweDg1LDB4ZTQsMHg5MCwweGZkLDB4NDAsMHhmMCwweDkwLDB4ZmYsMHhmMCwweGUwLDB4MzAsCisweGU0LDB4MDgsMHg3NCwweDAxLDB4OTAsMHhmZCwweDQxLDB4ZjAsMHg4MCwweDA1LDB4ZTQsMHg5MCwweGZkLDB4NDEsMHhmMCwweDdkLAorMHgwYSwweDdjLDB4MDAsMHgxMiwweDI0LDB4YjEsMHgxMiwweDMxLDB4MDgsMHgyMiwweDEyLDB4MzAsMHg4NSwweDkwLDB4ZmQsMHg0MSwKKzB4ZTAsMHgxNCwweDcwLDB4MGUsMHg5MCwweGZmLDB4ZjAsMHhlMCwweDQ0LDB4MTAsMHhmMCwweDdjLDB4MDAsMHgxMiwweDI1LDB4NGEsCisweDgwLDB4MTksMHg5MCwweGZkLDB4NDEsMHhlMCwweDcwLDB4MGUsMHg5MCwweGZmLDB4ZjAsMHhlMCwweDU0LDB4ZWYsMHhmMCwweDdjLAorMHgwMCwweDEyLDB4MjUsMHg0YSwweDgwLDB4MDUsMHg3YywweDE3LDB4MTIsMHgyNSwweDRhLDB4MTIsMHgzMSwweDA4LDB4MjIsMHg5MCwKKzB4ZmYsMHhmMCwweGUwLDB4NTQsMHhhYiwweGYwLDB4OTAsMHhmZiwweGYwLDB4ZTAsMHg0NCwweDIwLDB4ZjAsMHgyMiwweDhjLDB4MzcsCisweDhkLDB4MzYsMHg3OCwweDdjLDB4ZWQsMHhmNiwweDA4LDB4ZWMsMHhmNiwweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweDkwLAorMHgwMCwweDA1LDB4MTIsMHgwMSwweGVjLDB4NzgsMHg3YSwweGY2LDB4NzgsMHg3YywweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsMHhlZCwKKzB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweDkwLDB4MDAsMHgwNCwweDEyLDB4MDEsMHhlYywweDU0LDB4MGYsMHhmYywweDdkLDB4N2EsCisweDEyLDB4MTcsMHg5ZCwweDc4LDB4N2EsMHhlNiwweDcwLDB4MGQsMHhhZCwweDNhLDB4YWUsMHgzOSwweGFmLDB4MzgsMHhlNCwweDEyLAorMHgwMywweDBmLDB4N2MsMHgwOCwweDIyLDB4OTAsMHhmZiwweGYwLDB4ZTAsMHg1NCwweGZlLDB4ZjAsMHg5MCwweGZmLDB4ZjAsMHhlMCwKKzB4NTQsMHhmZCwweGYwLDB4ODAsMHgxZSwweDc4LDB4N2MsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4ZWQsMHhmZSwweGVjLDB4ZmQsCisweDdmLDB4MDEsMHg5MCwweDAwLDB4MDgsMHgxMiwweDAyLDB4MGUsMHgyNSwweGUwLDB4NDQsMHgwMSwweDkwLDB4ZmYsMHhmMywweGYwLAorMHgwMiwweDA2LDB4ZGIsMHg3OCwweDdjLDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwKKzB4OTAsMHgwMCwweDA2LDB4MTIsMHgwMiwweDBlLDB4NTQsMHhmZSwweDkwLDB4ZmYsMHhmMywweGYwLDB4ODAsMHgyYiwweDc4LDB4N2MsCisweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsMHhlZCwweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsMHg5MCwweDAwLDB4MDgsMHgxMiwweDAyLAorMHgwZSwweGZhLDB4ZWIsMHg5MCwweGZmLDB4ZjEsMHhmMCwweDEyLDB4MDgsMHhjYSwweDQwLDB4MGQsMHhhZCwweDNhLDB4YWUsMHgzOSwKKzB4YWYsMHgzOCwweGU0LDB4MTIsMHgwMywweDBmLDB4N2MsMHgxOCwweDIyLDB4NzgsMHg3YywweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsCisweGVkLDB4ZmUsMHhlYywweGZkLDB4N2YsMHgwMSwweDkwLDB4MDAsMHgwOCwweDEyLDB4MDIsMHgwZSwweDkwLDB4ZmYsMHhmMSwweGYwLAorMHgxMiwweDA4LDB4Y2EsMHg0MCwweDBkLDB4YWQsMHgzYSwweGFlLDB4MzksMHhhZiwweDM4LDB4ZTQsMHgxMiwweDAzLDB4MGYsMHg3YywKKzB4MTgsMHgyMiwweDc4LDB4N2MsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4OTAsCisweDAwLDB4MDYsMHgxMiwweDAyLDB4MGUsMHg0NCwweDAxLDB4OTAsMHhmZiwweGYzLDB4ZjAsMHg3OCwweDdkLDB4ZTYsMHgyNCwweDAzLAorMHhmNiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjYsMHg3OCwweDdhLDB4ZTYsMHgyNCwweGZlLDB4NTAsMHgwOSwweDkwLDB4ZmYsMHhmMCwKKzB4ZTAsMHg1NCwweGZkLDB4ZjAsMHg4MCwweDA3LDB4OTAsMHhmZiwweGYwLDB4ZTAsMHg0NCwweDAyLDB4ZjAsMHhlNCwweDkwLDB4ZmYsCisweGYxLDB4ZjAsMHg3OCwweDdiLDB4NzYsMHgwMCwweDc4LDB4N2EsMHhlNiwweDI0LDB4ZmYsMHhmYywweGU0LDB4MzQsMHhmZiwweGZkLAorMHg3OCwweDdiLDB4ZTYsMHg3ZiwweDAwLDB4ZmUsMHhlYywweGQzLDB4OWUsMHhlZiwweDY0LDB4ODAsMHhjZCwweDY0LDB4ODAsMHg5ZCwKKzB4NDAsMHgyZiwweDEyLDB4MDgsMHhhZiwweDQwLDB4MGYsMHg3OCwweDdiLDB4ZTYsMHhhZCwweDNhLDB4YWUsMHgzOSwweGFmLDB4MzgsCisweDEyLDB4MDMsMHgwZiwweDdjLDB4MTgsMHgyMiwweDkwLDB4ZmYsMHhmMiwweGUwLDB4ZmMsMHg3OCwweDdjLDB4ODYsMHg4MywweDA4LAorMHg4NiwweDgyLDB4ZWMsMHhmMCwweDc4LDB4N2IsMHgwNiwweGEzLDB4NzgsMHg3YywweGE2LDB4ODMsMHgwOCwweGE2LDB4ODIsMHg4MCwKKzB4YjUsMHgxMiwweDA4LDB4YWYsMHg0MCwweDBmLDB4NzgsMHg3YiwweGU2LDB4YWQsMHgzYSwweGFlLDB4MzksMHhhZiwweDM4LDB4MTIsCisweDAzLDB4MGYsMHg3YywweDE4LDB4MjIsMHg5MCwweGZmLDB4ZjIsMHhlMCwweGZjLDB4NzgsMHg3YywweDg2LDB4ODMsMHgwOCwweDg2LAorMHg4MiwweGVjLDB4ZjAsMHg3OCwweDdhLDB4ZTYsMHhhZCwweDNhLDB4YWUsMHgzOSwweGFmLDB4MzgsMHgxMiwweDAzLDB4MGYsMHg3YywKKzB4MDAsMHgyMiwweDhjLDB4MzcsMHg4ZCwweDM2LDB4NzgsMHg3YywweGVkLDB4ZjYsMHgwOCwweGVjLDB4ZjYsMHhlZCwweGZlLDB4ZWMsCisweGZkLDB4N2YsMHgwMSwweDkwLDB4MDAsMHgwNSwweDEyLDB4MDEsMHhlYywweDc4LDB4N2IsMHhmNiwweDc4LDB4N2MsMHhlNiwweGZkLAorMHgwOCwweGU2LDB4ZmMsMHhlZCwweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsMHg5MCwweDAwLDB4MDQsMHgxMiwweDAxLDB4ZWMsMHg1NCwKKzB4MGYsMHhmYywweDdkLDB4N2IsMHgxMiwweDE3LDB4OWQsMHg3OCwweDdiLDB4ZTYsMHg3MCwweDAzLDB4N2MsMHgwOCwweDIyLDB4OTAsCisweGZmLDB4ZjAsMHhlMCwweDU0LDB4ZmUsMHhmMCwweDkwLDB4ZmYsMHhmMCwweGUwLDB4NTQsMHhmZCwweGYwLDB4ODAsMHgxYiwweDc4LAorMHg3YywweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsMHhlZCwweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsMHg5MCwweDAwLDB4MDgsMHgxMiwKKzB4MDIsMHgwZSwweDI1LDB4ZTAsMHg5MCwweGZmLDB4ZjMsMHhmMCwweDgwLDB4NWIsMHg3OCwweDdjLDB4ZTYsMHhmZCwweDA4LDB4ZTYsCisweGZjLDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4OTAsMHgwMCwweDA2LDB4MTIsMHgwMiwweDBlLDB4NTQsMHhmZSwweDkwLAorMHhmZiwweGYzLDB4ZjAsMHg4MCwweDIxLDB4NzgsMHg3YywweGU2LDB4ZmQsMHgwOCwweGU2LDB4ZmMsMHhlZCwweGZlLDB4ZWMsMHhmZCwKKzB4N2YsMHgwMSwweDkwLDB4MDAsMHgwOCwweDEyLDB4MDIsMHgwZSwweGZhLDB4ZWIsMHg5MCwweGZmLDB4ZjEsMHhmMCwweDEyLDB4MDgsCisweGNhLDB4NDAsMHgwMywweDdjLDB4MTgsMHgyMiwweDc4LDB4N2MsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4ZWQsMHhmZSwweGVjLAorMHhmZCwweDdmLDB4MDEsMHg5MCwweDAwLDB4MDgsMHgxMiwweDAyLDB4MGUsMHg5MCwweGZmLDB4ZjEsMHhmMCwweDEyLDB4MDgsMHhjYSwKKzB4NDAsMHgwMywweDdjLDB4MTgsMHgyMiwweDc4LDB4N2QsMHhlNiwweDI0LDB4MGEsMHhmNiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjYsCisweDc4LDB4N2EsMHg3NiwweDAwLDB4NzgsMHg3YiwweGU2LDB4MjQsMHhmZiwweGZjLDB4ZTQsMHgzNCwweGZmLDB4ZmQsMHg3OCwweDdhLAorMHhlNiwweDdmLDB4MDAsMHhmZSwweGVjLDB4ZDMsMHg5ZSwweGVmLDB4NjQsMHg4MCwweGNkLDB4NjQsMHg4MCwweDlkLDB4NDAsMHgyMSwKKzB4NzgsMHg3YywweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlMCwweDkwLDB4ZmYsMHhmMSwweGYwLDB4MTIsMHgwOCwweGNhLDB4NDAsCisweDAzLDB4N2MsMHgxOCwweDIyLDB4NzgsMHg3YSwweDA2LDB4NzgsMHg3ZCwweDA2LDB4ZTYsMHgxOCwweDcwLDB4MDEsMHgwNiwweDgwLAorMHhjMywweDkwLDB4ZmYsMHhmMCwweGUwLDB4NDQsMHgwMSwweGYwLDB4NzgsMHg3YywweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlMCwKKzB4OTAsMHhmZiwweGYxLDB4ZjAsMHgxMiwweDA4LDB4Y2EsMHg0MCwweDAzLDB4N2MsMHgxOCwweDIyLDB4N2MsMHgwMCwweDIyLDB4OTAsCisweGZmLDB4ZjAsMHhlMCwweDIwLDB4ZTcsMHgxMiwweDkwLDB4ZmYsMHhmMCwweGUwLDB4MzAsMHhlNSwweDA5LDB4OTAsMHhmZiwweGYwLAorMHhlMCwweDQ0LDB4MjAsMHhmMCwweGMzLDB4MjIsMHg4MCwweGU3LDB4ZDMsMHgyMiwweDkwLDB4ZmYsMHhmMCwweGUwLDB4MjAsMHhlMywKKzB4MTIsMHg5MCwweGZmLDB4ZjAsMHhlMCwweDMwLDB4ZTUsMHgwOSwweDkwLDB4ZmYsMHhmMCwweGUwLDB4NDQsMHgyMCwweGYwLDB4YzMsCisweDIyLDB4ODAsMHhlNywweGQzLDB4MjIsMHg4YywweDQyLDB4OGQsMHg0MSwweDdjLDB4MDAsMHhlZCwweDU0LDB4ZjAsMHhmZCwweGVjLAorMHg3MCwweDAzLDB4ZWQsMHg2NCwweDMwLDB4NzAsMHgwNSwweDc1LDB4M2UsMHgwMywweDgwLDB4MDMsMHg3NSwweDNlLDB4MDQsMHhhYywKKzB4M2UsMHgxMiwweDBmLDB4N2MsMHg3NSwweDgzLDB4MDAsMHg4NSwweDgzLDB4NDAsMHhlNSwweDQxLDB4NTQsMHgwZiwweGY1LDB4M2YsCisweGU1LDB4NDAsMHg3MCwweDA0LDB4ZTUsMHgzZiwweDY0LDB4MDMsMHg3MCwweDM1LDB4ZTUsMHgzZSwweDI0LDB4ZmQsMHg3NSwweGYwLAorMHgwYSwweGE0LDB4MjQsMHgwYSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmQsMHhmNSwweDgzLDB4ZTAsMHgzMCwweGU2LDB4MDUsMHgxMiwKKzB4MTAsMHg2NywweDgwLDB4MTksMHhlNSwweDNlLDB4MjQsMHg5NywweGY4LDB4YzYsMHg1NCwweGZiLDB4ZjYsMHg3OCwweGEzLDB4ZTYsCisweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4NzQsMHgwZiwweGYwLDB4ODAsMHg1OSwweGU1LAorMHg0MCwweDcwLDB4MDQsMHhlNSwweDNmLDB4NjQsMHgwNCwweDcwLDB4NDgsMHhlNSwweDNlLDB4MjQsMHhmZCwweDc1LDB4ZjAsMHgwYSwKKzB4YTQsMHgyNCwweDBhLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZCwweGY1LDB4ODMsMHhlMCwweDMwLDB4ZTUsMHgwNywweGFjLDB4NDIsCisweGFkLDB4NDEsMHgxMiwweDFjLDB4OTMsMHhlNSwweDQyLDB4MzAsMHhlMiwweDE1LDB4NzgsMHhhNywweGU2LDB4MzAsMHhlMCwweDBmLAorMHg3OCwweGE3LDB4ZTYsMHgzMCwweGUxLDB4MDksMHhlNCwweGZmLDB4MDQsMHhmZSwweDdjLDB4MDQsMHgxMiwweDMxLDB4OWEsMHg3OCwKKzB4YTMsMHhlNiwweDI0LDB4MDYsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4NzQsMHgwZiwweGYwLDB4ODAsCisweDA3LDB4ZTQsMHhmYywweDdkLDB4ZWUsMHgxMiwweDFjLDB4OTMsMHhjMiwweDAzLDB4MjIsMHgxMiwweDMwLDB4ODUsMHgxMiwweDBmLAorMHg3YywweDc4LDB4YTMsMHhlNiwweDI0LDB4MDYsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHg5MCwKKzB4ZmQsMHg0MCwweGYwLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsCisweGUwLDB4OTAsMHhmZCwweDQxLDB4ZjAsMHhjMiwweDAzLDB4N2QsMHgwMiwweDdjLDB4MDAsMHgxMiwweDI0LDB4YjEsMHgxMiwweDMxLAorMHgwOCwweDIyLDB4MTIsMHgzMCwweDg1LDB4NzgsMHg4ZiwweGVjLDB4ZjYsMHhlYywweDI0LDB4OTcsMHhmOCwweGU2LDB4MzAsMHhlMSwKKzB4MDcsMHg3YywweDEzLDB4MTIsMHgyNSwweDRhLDB4ODAsMHgwZiwweDkwLDB4ZmQsMHg0MSwweGUwLDB4ZmQsMHg3OCwweDhmLDB4ZTYsCisweGZjLDB4MTIsMHgxMywweGZkLDB4MTIsMHgyNSwweDRhLDB4MTIsMHgzMSwweDA4LDB4MjIsMHgxMiwweDMwLDB4ODUsMHg3OCwweDhmLAorMHhlYywweGY2LDB4N2QsMHgwMCwweDEyLDB4MGYsMHgwYiwweDEyLDB4MjUsMHg0YSwweDEyLDB4MzEsMHgwOCwweDIyLDB4MTIsMHgzMCwKKzB4ODUsMHg3OCwweDhmLDB4ZWMsMHhmNiwweGVjLDB4MjQsMHg5NywweGY4LDB4ZTYsMHgzMCwweGUyLDB4MDcsMHg3YywweDEzLDB4MTIsCisweDI1LDB4NGEsMHg4MCwweDFiLDB4NzgsMHg4ZiwweGU2LDB4MjQsMHg5NywweGY4LDB4ZTYsMHgyMCwweGUxLDB4MDcsMHg3YywweDEyLAorMHgxMiwweDI1LDB4NGEsMHg4MCwweDBhLDB4NzgsMHg4ZiwweGU2LDB4ZmMsMHgxMiwweDE0LDB4MjEsMHgxMiwweDI1LDB4NGEsMHgxMiwKKzB4MzEsMHgwOCwweDIyLDB4MTIsMHgzMCwweDg1LDB4NzgsMHg4ZiwweGVjLDB4ZjYsMHhlYywweDI0LDB4OTcsMHhmOCwweGU2LDB4MjAsCisweGUyLDB4MDcsMHg3YywweDExLDB4MTIsMHgyNSwweDRhLDB4ODAsMHgwYSwweDc4LDB4OGYsMHhlNiwweGZjLDB4MTIsMHgxNSwweDIyLAorMHgxMiwweDI1LDB4NGEsMHgxMiwweDMxLDB4MDgsMHgyMiwweDEyLDB4MzAsMHg4NSwweDc4LDB4OGYsMHhlYywweGY2LDB4MTIsMHgwZiwKKzB4N2MsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA5LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4OTAsCisweGZkLDB4NDcsMHhmMCwweDc4LDB4YTMsMHhlNiwweDI0LDB4MGEsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLAorMHhlMCwweDkwLDB4ZmQsMHg0OCwweGYwLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwMywweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwKKzB4ZjUsMHg4MywweGUwLDB4ZmMsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsCisweDgzLDB4ZTAsMHhmNSwweDVjLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LAorMHg4MywweGUwLDB4ZjUsMHg1ZCwweDhjLDB4NWIsMHhlNCwweGVjLDB4MzMsMHgzMywweDU0LDB4MDEsMHg3OCwweDhmLDB4ZjYsMHg2MCwKKzB4MDgsMHhlNSwweDVjLDB4MzAsMHhlMSwweDAzLDB4NzgsMHg4ZiwweDA2LDB4NzgsMHg4ZiwweGU2LDB4OTAsMHhmZCwweDQ5LDB4ZjAsCisweDc4LDB4YTEsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHhmZCwweGEzLAorMHhlMCwweDU0LDB4MGMsMHhmYywweGVkLDB4NTQsMHhlNiwweDhjLDB4NWYsMHhmNSwweDVlLDB4ZTUsMHg1YiwweDMwLDB4ZTUsMHgwMywKKzB4NDMsMHg1ZiwweDAxLDB4ZTUsMHg1YywweDIwLDB4ZTUsMHgwZSwweGU1LDB4NWIsMHg1NCwweDdmLDB4NzAsMHgwOCwweGU1LDB4NWIsCisweDIwLDB4ZTcsMHgwMywweDQzLDB4NWYsMHgwMiwweGU1LDB4NWIsMHgzMCwweGUzLDB4MDMsMHg0MywweDVmLDB4MTAsMHhlNSwweDViLAorMHgzMCwweGUyLDB4MDMsMHg0MywweDVmLDB4MjAsMHhlNSwweDViLDB4NTQsMHgwMywweDYwLDB4MDMsMHg0MywweDVmLDB4NDAsMHhlNSwKKzB4NWIsMHgzMCwweGUxLDB4MDMsMHg0MywweDVmLDB4ODAsMHhlNSwweDViLDB4MzAsMHhlNCwweDAzLDB4NDMsMHg1ZSwweDAxLDB4ZTUsCisweDViLDB4MzAsMHhlNiwweDAzLDB4NDMsMHg1ZSwweDA4LDB4ZTUsMHg1YywweDIwLDB4ZTQsMHgwZSwweGU1LDB4NWIsMHg1NCwweDdmLAorMHg3MCwweDA4LDB4ZTUsMHg1YiwweDIwLDB4ZTcsMHgwMywweDQzLDB4NWUsMHgxMCwweDUzLDB4NWYsMHhmYiwweDUzLDB4NWUsMHhmOSwKKzB4YWQsMHg1ZSwweGU1LDB4NWYsMHg5MCwweGZkLDB4NDIsMHhjZCwweGYwLDB4YTMsMHhjZCwweGYwLDB4ZTUsMHg1ZCwweDMwLDB4ZTMsCisweDBkLDB4ZTUsMHg1ZCwweDU0LDB4MzAsMHhjNCwweDU0LDB4MGYsMHg5MCwweGZkLDB4NDUsMHhmMCwweDgwLDB4MDUsMHhlNCwweDkwLAorMHhmZCwweDQ1LDB4ZjAsMHhlNSwweDVkLDB4NTQsMHgwMywweDkwLDB4ZmQsMHg0NCwweGYwLDB4ZTUsMHg1ZCwweDU0LDB4MDQsMHhjMywKKzB4MTMsMHg5MCwweGZkLDB4NDYsMHhmMCwweDkwLDB4ZmQsMHg0NCwweGUwLDB4NzAsMHgwZSwweDdkLDB4M2QsMHg3ZSwweGZkLDB4N2YsCisweDAxLDB4NzQsMHgwMSwweDkwLDB4MDAsMHgwOSwweDEyLDB4MDEsMHg0MiwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDgsMHhmNSwweDgyLAorMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDdjLDB4MDAsMHhmZCwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDcsMHhmNSwKKzB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDdmLDB4MDAsMHg0YywweGZlLDB4ZWYsMHg0ZCwweDkwLDB4ZmQsCisweDQwLDB4ZjAsMHhhMywweGNlLDB4ZjAsMHhjZSwweGMyLDB4MDMsMHg3ZCwweDBhLDB4N2MsMHgwMCwweDEyLDB4MjQsMHhiMSwweDEyLAorMHgzMSwweDA4LDB4MjIsMHgxMiwweDMwLDB4ODUsMHg3OCwweDhmLDB4ZWMsMHhmNiwweDc4LDB4OTQsMHg3NiwweDAxLDB4MDgsMHg3NiwKKzB4ZmQsMHgwOCwweDc2LDB4NDAsMHg3OCwweDkxLDB4NzYsMHgwYywweDc4LDB4OTQsMHgxMiwweDA0LDB4NjUsMHgxMiwweDAyLDB4MTQsCisweDc4LDB4OTIsMHhjYiwweGY2LDB4Y2IsMHgwOCwweGY2LDB4N2YsMHgwMCwweGVmLDB4MjQsMHhlYiwweDQwLDB4MWYsMHhlNCwweGVmLAorMHgyNSwweGUwLDB4OTAsMHgzNCwweGJmLDB4ZmQsMHg5MywweGNkLDB4MDQsMHg5MywweDc4LDB4OTMsMHg2NiwweDcwLDB4MDMsMHhlZCwKKzB4MTgsMHg2NiwweDcwLDB4MDYsMHg3OCwweDkxLDB4NzYsMHgwMCwweDgwLDB4MDMsMHgwZiwweDgwLDB4ZGMsMHg3OCwweDkwLDB4ZWYsCisweGY2LDB4NzgsMHg5NCwweDEyLDB4MDQsMHg2NSwweDkwLDB4MDAsMHgwMiwweDEyLDB4MDIsMHgwZSwweDc4LDB4OTIsMHhjYiwweGY2LAorMHhjYiwweDA4LDB4ZjYsMHg1NCwweDA0LDB4Y2IsMHg1NCwweDA2LDB4NGIsMHg2MCwweDA0LDB4NzgsMHg5MSwweDc2LDB4MGIsMHg3OCwKKzB4OTMsMHhlNiwweDMwLDB4ZTMsMHgxMywweDc4LDB4OTQsMHgxMiwweDA0LDB4NjUsMHg5MCwweDAwLDB4MDUsMHgxMiwweDAxLDB4ZWMsCisweDI0LDB4ZmIsMHg1MCwweDA0LDB4NzgsMHg5MSwweDc2LDB4MGQsMHg3OCwweDkzLDB4ZTYsMHg1NCwweGMwLDB4N2QsMHgwMCwweDY0LAorMHhjMCwweDRkLDB4NzAsMHgwNCwweDc4LDB4OTEsMHg3NiwweDBiLDB4NzgsMHg5NCwweDEyLDB4MDQsMHg2NSwweDkwLDB4MDAsMHgwNCwKKzB4MTIsMHgwMSwweGVjLDB4MjQsMHhmYywweDUwLDB4MDQsMHg3OCwweDkxLDB4NzYsMHgwZiwweDc4LDB4OTQsMHgxMiwweDA0LDB4NjUsCisweDkwLDB4MDAsMHgwNiwweDEyLDB4MDEsMHhlYywweDI0LDB4ZmQsMHg1MCwweDA0LDB4NzgsMHg5MSwweDc2LDB4MGUsMHg3OCwweDk0LAorMHgxMiwweDA0LDB4NjUsMHg5MCwweDAwLDB4MDksMHgxMiwweDAxLDB4ZWMsMHgyNCwweGZkLDB4NTAsMHgwNCwweDc4LDB4OTEsMHg3NiwKKzB4MGEsMHg3OCwweDkxLDB4ZTYsMHg3MCwweDJhLDB4NzgsMHg4ZiwweGU2LDB4ZmMsMHgxMiwweDBmLDB4N2MsMHg3OCwweDk0LDB4MTIsCisweDA0LDB4NjUsMHg3OCwweGExLDB4ZTYsMHhmOSwweDc4LDB4YTAsMHhlNiwweGZhLDB4N2IsMHgwMSwweDc0LDB4MGEsMHg3OCwweDAwLAorMHgxMiwweDAzLDB4M2YsMHhjMiwweDAzLDB4NzgsMHg4ZiwweGU2LDB4ZmMsMHgxMiwweDExLDB4MjMsMHg3OCwweDkxLDB4ZWMsMHhmNiwKKzB4NzgsMHg5MSwweGU2LDB4ZmMsMHgxMiwweDI1LDB4NGEsMHgxMiwweDMxLDB4MDgsMHgyMiwweDEyLDB4MzAsMHg4NSwweDc4LDB4OGYsCisweGVjLDB4ZjYsMHgxMiwweDBmLDB4N2MsMHg3OCwweDhmLDB4ZTYsMHgyNCwweGZkLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweDFjLAorMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZkLDB4ZjUsMHg4MywweGFjLDB4ODIsMHhhZCwweDgzLDB4NzgsMHhhMCwweDg2LDB4ODMsMHgwOCwKKzB4ODYsMHg4MiwweGVjLDB4ZjksMHhlZCwweGZhLDB4N2IsMHgwYSwweDc4LDB4MDEsMHgxMiwweDAzLDB4YTcsMHhjMiwweDAzLDB4NzgsCisweDhmLDB4ZTYsMHhmYywweDEyLDB4MTEsMHgyMywweDEyLDB4MzEsMHgwOCwweDIyLDB4OGQsMHgyYiwweDhjLDB4MmEsMHhlZCwweDYwLAorMHg0MCwweDc1LDB4MjcsMHgwMSwweDc1LDB4MjksMHg0OCwweDc1LDB4MjgsMHhmZiwweGU1LDB4MmEsMHgyNCwweGZkLDB4ZmMsMHhlNCwKKzB4MzQsMHhmZiwweGZkLDB4ZWMsMHg3YywweDAzLDB4MjUsMHhlMCwweGNkLDB4MzMsMHhjZCwweGRjLDB4ZjksMHhmYywweGU1LDB4MjksCisweDJjLDB4ZjUsMHgyOSwweGU1LDB4MjgsMHgzZCwweGY1LDB4MjgsMHhhZCwweDI5LDB4YWUsMHgyOCwweGFmLDB4MjcsMHg3NCwweDgwLAorMHg5MCwweDAwLDB4MDYsMHgxMiwweDAzLDB4MTcsMHg3NCwweDgwLDB4OTAsMHgwMCwweDAyLDB4MTIsMHgwMywweDE3LDB4MTIsMHgwZiwKKzB4ZDMsMHhlNSwweDJiLDB4MTQsMHg2MCwweDNiLDB4NzUsMHgyNywweDAxLDB4NzUsMHgyOSwweDA4LDB4NzUsMHgyOCwweGZmLDB4ZTUsCisweDJhLDB4MjQsMHhmZCwweGZjLDB4ZTQsMHgzNCwweGZmLDB4ZmQsMHhlYywweDdjLDB4MDMsMHgyNSwweGUwLDB4Y2QsMHgzMywweGNkLAorMHhkYywweGY5LDB4ZmMsMHhlNSwweDI5LDB4MmMsMHhmNSwweDI5LDB4ZTUsMHgyOCwweDNkLDB4ZjUsMHgyOCwweGFkLDB4MjksMHhhZSwKKzB4MjgsMHhhZiwweDI3LDB4ZTQsMHg5MCwweDAwLDB4MDYsMHgxMiwweDAzLDB4MTcsMHhlNCwweDkwLDB4MDAsMHgwMiwweDEyLDB4MDMsCisweDE3LDB4MjIsMHgxMiwweDMwLDB4ODUsMHg3OCwweDhmLDB4ZWMsMHhmNiwweGVjLDB4MjQsMHg5NywweGY4LDB4ZTYsMHgzMCwweGUyLAorMHgwOSwweDc4LDB4OGYsMHhlNiwweGZjLDB4MTIsMHgxNSwweDIyLDB4ZDIsMHgwMCwweDc4LDB4OGYsMHhlNiwweGZjLDB4MTIsMHgwZiwKKzB4N2MsMHg3OCwweDkwLDB4NzYsMHgwMCwweDkwLDB4ZmQsMHg0MSwweGUwLDB4MzAsMHhlNywweDA0LDB4NzgsMHg5MCwweDc2LDB4MDEsCisweDc4LDB4OTAsMHhlNiwweGZkLDB4NzgsMHg4ZiwweGU2LDB4ZmMsMHgxMiwweDBkLDB4M2EsMHhjMiwweDAzLDB4MzAsMHgwMCwweDA3LAorMHg3OCwweDhmLDB4ZTYsMHhmYywweDEyLDB4MTQsMHgyMSwweDdjLDB4MDAsMHgxMiwweDI1LDB4NGEsMHgxMiwweDMxLDB4MDgsMHgyMiwKKzB4NzgsMHhhMywweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDQ0LDB4MDEsCisweGYwLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDMwLAorMHhlMCwweDAyLDB4ODAsMHhlZCwweDc4LDB4YTMsMHhlNiwweDI0LDB4MGIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwKKzB4ODMsMHhlMCwweDU0LDB4ZjgsMHhmMCwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsCisweGY1LDB4ODMsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDIyLDB4YzIsMHgwMywweDhjLDB4NTgsMHgxMiwweDBmLDB4N2MsMHg3OCwweGEwLAorMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4NzksMHhlZSwweDdhLDB4MzQsMHg3YiwweDBhLDB4NzgsMHgwMSwweDEyLDB4MDMsMHhmNSwKKzB4MTIsMHgwZSwweDEwLDB4YWMsMHg1OCwweDdkLDB4MDIsMHgxMiwweDBkLDB4M2EsMHhjMiwweDAzLDB4YWMsMHg1OCwweDEyLDB4MTEsCisweDIzLDB4MjIsMHg4ZCwweDUzLDB4OGUsMHg1MiwweDhmLDB4NTEsMHg4YywweDUwLDB4MTIsMHgwZiwweDdjLDB4NzUsMHg0ZiwweDAwLAorMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4MjAsMHhlNCwKKzB4MTYsMHhlNSwweDRmLDB4MjQsMHhmNiwweDQwLDB4MTAsMHgwNSwweDRmLDB4YzIsMHgwMywweDdjLDB4MTgsMHgxMiwweDMyLDB4NDgsCisweGFjLDB4NTAsMHgxMiwweDBmLDB4N2MsMHg4MCwweGQ5LDB4NzgsMHhhMywweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LAorMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4MjAsMHhlNCwweDA1LDB4YzIsMHgwMywweDdjLDB4MDIsMHgyMiwweDc4LDB4YTMsMHhlNiwKKzB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDU0LDB4MGYsMHg2MCwweDE2LDB4NzgsCisweGEzLDB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NTQsMHgwZiwweGYwLAorMHhjMiwweDAzLDB4N2MsMHgwMSwweDIyLDB4NzgsMHhhMiwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlMCwweGFkLDB4NTMsMHhhZSwKKzB4NTIsMHhhZiwweDUxLDB4MTIsMHgwMywweDBmLDB4YzIsMHgwMywweDdjLDB4MDAsMHgyMiwweDhkLDB4MzEsMHg4YywweDMwLDB4MTIsCisweDE1LDB4MjIsMHhlNSwweDMxLDB4NjAsMHgyMCwweGU1LDB4MzAsMHhiNCwweDAzLDB4MGMsMHg3YywweDAxLDB4MTIsMHgyNCwweDdjLAorMHg3YywweDgxLDB4MTIsMHgyNCwweDdjLDB4ODAsMHgwZiwweGU1LDB4MzAsMHhiNCwweDA0LDB4MGEsMHg3YywweDAyLDB4MTIsMHgyNCwKKzB4N2MsMHg3YywweDgyLDB4MTIsMHgyNCwweDdjLDB4YWMsMHgzMCwweDEyLDB4MGYsMHg3YywweGU1LDB4MzEsMHg2MCwweDFhLDB4NzgsCisweGE0LDB4ODYsMHg4MywweDA4LDB4ODYsMHg4MiwweGUwLDB4NTQsMHhlNywweGYwLDB4YTMsMHhhMywweGEzLDB4YTMsMHhlMCwweDU0LAorMHhlNywweGYwLDB4YWMsMHgzMCwweDdkLDB4MDIsMHgxMiwweDBkLDB4M2EsMHg3OCwweGEwLDB4ODYsMHg4MywweDA4LDB4ODYsMHg4MiwKKzB4NzksMHhmOCwweDdhLDB4MzQsMHg3YiwweDBhLDB4NzgsMHgwMSwweDEyLDB4MDMsMHhmNSwweGMyLDB4MDMsMHhlNSwweDMwLDB4MjQsCisweDk3LDB4ZjgsMHhjNiwweDU0LDB4ZmQsMHhmNiwweGFjLDB4MzAsMHgxMiwweDExLDB4MjMsMHgyMiwweDhjLDB4MjYsMHgzMCwweDAzLAorMHgwNSwweDEyLDB4MzEsMHhlNywweDgwLDB4ZjgsMHg3YywweDBhLDB4MTIsMHgzMCwweGZhLDB4ZDIsMHgwMywweGU1LDB4MjYsMHgyNCwKKzB4ZmQsMHg3OCwweDlkLDB4ZjYsMHg3MCwweDA5LDB4NzgsMHhhNCwweDc2LDB4ZmYsMHgwOCwweDc2LDB4ZTAsMHg4MCwweDA3LDB4NzgsCisweGE0LDB4NzYsMHhmZiwweDA4LDB4NzYsMHhlMiwweDc4LDB4OWQsMHhlNiwweDc1LDB4ZjAsMHgxMCwweGE0LDB4YWQsMHhmMCwweGZjLAorMHgyNCwweGEwLDB4NzgsMHhhMywweGY2LDB4ZWQsMHgzNCwweGZmLDB4MTgsMHhmNiwweDc4LDB4OWQsMHhlNiwweDc1LDB4ZjAsMHgwYSwKKzB4YTQsMHgyNCwweDA4LDB4ZmMsMHhlNCwweDM0LDB4ZmQsMHhmZCwweDc4LDB4YTAsMHhlZCwweGY2LDB4MDgsMHhlYywweGY2LDB4MTIsCisweDMxLDB4OTMsMHgyMiwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLAorMHhlMCwweDMwLDB4ZTcsMHgyMiwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwKKzB4ODMsMHhlMCwweDU0LDB4N2YsMHhmMCwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsCisweGY1LDB4ODMsMHhlMCwweDQ0LDB4ODAsMHhmMCwweDIyLDB4NzgsMHhhNCwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlMCwweDU0LAorMHg3ZiwweGYwLDB4YWQsMHg4MywweGU1LDB4ODIsMHgyNCwweDA0LDB4ZmMsMHhlNCwweDNkLDB4OGMsMHg4MiwweGY1LDB4ODMsMHhlMCwKKzB4NTQsMHg3ZiwweGYwLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwYiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsCisweGUwLDB4NTQsMHhmOCwweGYwLDB4NzgsMHhhNSwweGU2LDB4MjQsMHgwMSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LAorMHg4MywweGUwLDB4NDQsMHgwMywweGYwLDB4NzgsMHhhNSwweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwKKzB4ZjUsMHg4MywweGUwLDB4NDQsMHgwMywweGYwLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsCisweDAwLDB4ZjUsMHg4MywweDc0LDB4MGYsMHhmMCwweDIyLDB4NzgsMHhhNCwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlMCwweDU0LAorMHgzZiwweGYwLDB4YWQsMHg4MywweGU1LDB4ODIsMHgyNCwweDA0LDB4ZmMsMHhlNCwweDNkLDB4OGMsMHg4MiwweGY1LDB4ODMsMHhlMCwKKzB4NTQsMHgzZiwweGYwLDB4NzgsMHg5ZCwweGU2LDB4MjQsMHg5ZSwweGY4LDB4ZTYsMHhmYywweDc4LDB4YTUsMHhlNiwweDI0LDB4MDEsCisweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywweGYwLDB4NzgsMHg5ZCwweGU2LDB4MjQsMHg5ZSwweGY4LAorMHhlNiwweGZjLDB4NzgsMHhhNSwweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywKKzB4ZjAsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDBiLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NTQsCisweGZiLDB4NDQsMHgwMiwweGY1LDB4MjYsMHg3OCwweGExLDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZTAsMHgzMCwweGU1LDB4MDMsMHg0MywweDI2LDB4MDEsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA1LDB4ZjUsMHg4MiwKKzB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHgzMCwweGUwLDB4MDMsMHgxMiwweDBmLDB4ZDMsMHhlNSwweDI2LDB4ZmMsCisweDc4LDB4YTMsMHhlNiwweDI0LDB4MGIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDc4LAorMHhhMywweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHg3NCwweDBmLDB4ZjAsMHg3OCwKKzB4YTQsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZTAsMHg0NCwweDgwLDB4ZjAsMHhhMywweGEzLDB4YTMsMHhhMywweGUwLDB4NDQsCisweDgwLDB4ZjAsMHgyMiwweDhjLDB4MmEsMHgxMiwweDBmLDB4N2MsMHg3OCwweGExLDB4ZTYsMHgyNCwweDA4LDB4ZjUsMHg4MiwweDE4LAorMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHhmYywweDc4LDB4YTMsMHhlNiwweDI0LDB4MGEsMHhmNSwweDgyLDB4MTgsMHhlNiwKKzB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywweGYwLDB4NzgsMHhhMSwweGU2LDB4MjQsMHgwNywweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsCisweDAwLDB4ZjUsMHg4MywweGUwLDB4ZmMsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA5LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZWMsMHhmMCwweDc4LDB4YTAsMHg4NiwweDgzLDB4MDgsMHg4NiwweDgyLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmYywKKzB4ZWQsMHhmZSwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDgsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZWUsCisweGYwLDB4ZWMsMHhmZSwweDc4LDB4YTMsMHhlNiwweDI0LDB4MDcsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLAorMHhlZSwweGYwLDB4OGMsMHgyOSwweDhkLDB4MjgsMHhjMywweGVjLDB4OTQsMHgwMiwweGVkLDB4OTQsMHgwNiwweDQwLDB4MDUsMHg3NSwKKzB4MjcsMHg3YywweDgwLDB4MzMsMHhkMywweGU1LDB4MjksMHg5NCwweDgxLDB4ZTUsMHgyOCwweDk0LDB4MDEsMHg0MCwweDA1LDB4NzUsCisweDI3LDB4M2MsMHg4MCwweDIzLDB4ZDMsMHhlNSwweDI5LDB4OTQsMHhjMCwweGU1LDB4MjgsMHg5NCwweDAwLDB4NDAsMHgwNSwweDc1LAorMHgyNywweDE4LDB4ODAsMHgxMywweGQzLDB4ZTUsMHgyOSwweDk0LDB4MzAsMHhlNSwweDI4LDB4OTQsMHgwMCwweDQwLDB4MDUsMHg3NSwKKzB4MjcsMHgwYywweDgwLDB4MDMsMHg3NSwweDI3LDB4MDgsMHhhZiwweDI3LDB4ZTQsMHhlZiwweDU0LDB4N2MsMHg0NCwweDgzLDB4ZmYsCisweDhmLDB4MjcsMHhlNSwweDI3LDB4ZmMsMHg3OCwweGE1LDB4ZTYsMHgyNCwweDAxLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZWMsMHhmMCwweGU1LDB4MjcsMHhmYywweDc4LDB4YTUsMHhlNiwweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwKKzB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywweGYwLDB4ZTUsMHgyNywweGZjLDB4NzgsMHg5ZCwweGU2LDB4MjQsMHg5ZSwweGY4LDB4ZWMsCisweGY2LDB4NzgsMHhhMywweGU2LDB4MjQsMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweGY1LAorMHgyNywweDc4LDB4YTEsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4YTMsMHhlMCwKKzB4MzAsMHhlMywweDE3LDB4NTMsMHgyNywweGM3LDB4NzgsMHhhMSwweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsCisweDAwLDB4ZjUsMHg4MywweGUwLDB4OTAsMHgzNCwweGU5LDB4OTMsMHg0MiwweDI3LDB4NzgsMHhhMSwweGU2LDB4MjQsMHgwMiwweGY1LAorMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4MzAsMHhlNywweDA1LDB4NDMsMHgyNywweDQwLDB4ODAsMHgwMywKKzB4NTMsMHgyNywweGJmLDB4NTMsMHgyNywweGZiLDB4NzgsMHhhMSwweGU2LDB4MjQsMHgwNiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsCisweDAwLDB4ZjUsMHg4MywweGUwLDB4NjAsMHgwMywweDQzLDB4MjcsMHgwNCwweDUzLDB4MjcsMHhmYywweDc4LDB4YTEsMHhlNiwweDI0LAorMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDQyLDB4MjcsMHg0MywweDI3LDB4ODAsMHhlNSwKKzB4MjcsMHhmYywweDc4LDB4YTMsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZWMsCisweGYwLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweGY1LAorMHgyNywweDc4LDB4YTEsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4YTMsMHhlMCwKKzB4MzAsMHhlMSwweDA1LDB4NTMsMHgyNywweGRmLDB4ODAsMHgwMywweDQzLDB4MjcsMHgyMCwweDc4LDB4YTEsMHhlNiwweDI0LDB4MDIsCisweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDMwLDB4ZTQsMHgwNSwweDUzLDB4MjcsMHhlZiwweDgwLAorMHgwMywweDQzLDB4MjcsMHgxMCwweDc4LDB4YTEsMHhlNiwweDI0LDB4MDksMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwKKzB4ODMsMHhlMCwweGI0LDB4MDIsMHgwMywweDQzLDB4MjcsMHgwMiwweGU1LDB4MjcsMHhmYywweDc4LDB4YTMsMHhlNiwweDI0LDB4MDQsCisweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlYywweGYwLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwMywweGY1LAorMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4ZjUsMHgyNywweDc4LDB4YTEsMHhlNiwweDI0LDB4MDksMHhmNSwKKzB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweDcwLDB4MDUsMHg1MywweDI3LDB4N2YsMHg4MCwweDAzLDB4NDMsCisweDI3LDB4ODAsMHg3OCwweGExLDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGEzLAorMHhlMCwweDMwLDB4ZTAsMHgwNSwweDQzLDB4MjcsMHgyMCwweDgwLDB4MDMsMHg1MywweDI3LDB4ZGYsMHg3OCwweGExLDB4ZTYsMHgyNCwKKzB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZTAsMHgzMCwweGUzLDB4MDUsMHg0MywweDI3LDB4NDAsCisweDgwLDB4MDMsMHg1MywweDI3LDB4YmYsMHg3OCwweGExLDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLAorMHhmNSwweDgzLDB4ZTAsMHgzMCwweGUwLDB4MDUsMHg0MywweDI3LDB4MTAsMHg4MCwweDAzLDB4NTMsMHgyNywweGVmLDB4NzgsMHhhMSwKKzB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGEzLDB4ZTAsMHgzMCwweGU0LDB4MDUsCisweDQzLDB4MjcsMHgwOCwweDgwLDB4MDMsMHg1MywweDI3LDB4ZjcsMHg3OCwweGExLDB4ZTYsMHgyNCwweDAyLDB4ZjUsMHg4MiwweDE4LAorMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4YTMsMHhlMCwweDMwLDB4ZTUsMHgwNSwweDQzLDB4MjcsMHgwNCwweDgwLDB4MDMsMHg1MywKKzB4MjcsMHhmYiwweDc4LDB4YTEsMHhlNiwweDI0LDB4MDIsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4YTMsCisweGUwLDB4MzAsMHhlNiwweDA1LDB4NDMsMHgyNywweDAxLDB4ODAsMHgwMywweDUzLDB4MjcsMHhmZSwweDc4LDB4YTEsMHhlNiwweDI0LAorMHgwMiwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhhMywweGUwLDB4MzAsMHhlNywweDA1LDB4NDMsMHgyNywKKzB4MDIsMHg4MCwweDAzLDB4NTMsMHgyNywweGZkLDB4ZTUsMHgyNywweGZjLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwMywweGY1LDB4ODIsCisweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHhjMiwweDAzLDB4N2MsMHgwMCwweDIyLDB4OGQsMHgyNywweDhjLAorMHgyNiwweGVkLDB4NTQsMHgwMywweDE0LDB4NjAsMHgwMywweDdjLDB4MTAsMHgyMiwweGU1LDB4MjcsMHg1NCwweDdjLDB4MjQsMHhmYywKKzB4NDAsMHgwMywweDdjLDB4MGIsMHgyMiwweGU1LDB4MjYsMHgyNCwweDk3LDB4ZjgsMHhjNiwweDQ0LDB4MDIsMHhmNiwweDdjLDB4MDAsCisweDIyLDB4OGMsMHgzMCwweDEyLDB4MGYsMHg3YywweGU1LDB4MzAsMHgyNCwweDk3LDB4ZjgsMHhlNiwweDIwLDB4ZTIsMHg0ZiwweGFjLAorMHgzMCwweDdkLDB4MDIsMHgxMiwweDBkLDB4M2EsMHhlNSwweDMwLDB4MjQsMHhmZSwweDQ0LDB4MjgsMHhmYywweDc4LDB4YTQsMHg4NiwKKzB4ODMsMHgwOCwweDg2LDB4ODIsMHhlYywweGYwLDB4YWYsMHg4MywweGU1LDB4ODIsMHgyNCwweDA0LDB4ZmUsMHhlNCwweDNmLDB4ZmYsCisweGVjLDB4OGUsMHg4MiwweDhmLDB4ODMsMHhmMCwweDdjLDB4MDMsMHg4YywweDJjLDB4ZTUsMHgyYywweGZjLDB4NzgsMHhhNSwweGU2LAorMHgyNCwweDAxLDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGVjLDB4ZjAsMHhlNSwweDJjLDB4ZmMsMHg3OCwKKzB4YTUsMHhlNiwweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDc1LDB4MmQsCisweDAxLDB4NzUsMHgyZiwweDQ4LDB4NzUsMHgyZSwweGZmLDB4ZTUsMHgzMCwweDI0LDB4ZmQsMHhmYywweGU0LDB4MzQsMHhmZiwweGZkLAorMHhlYywweDdjLDB4MDMsMHgyNSwweGUwLDB4Y2QsMHgzMywweGNkLDB4ZGMsMHhmOSwweGZjLDB4ZTUsMHgyZiwweDJjLDB4ZjUsMHgyZiwKKzB4ZTUsMHgyZSwweDNkLDB4ZjUsMHgyZSwweDc4LDB4YTUsMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsCisweGY1LDB4ODMsMHhlMCwweDU0LDB4ZTcsMHhmNSwweDJjLDB4YWQsMHgyZiwweGFlLDB4MmUsMHhhZiwweDJkLDB4ZTQsMHg5MCwweDAwLAorMHgwMiwweDEyLDB4MDMsMHgxNywweGU0LDB4OTAsMHgwMCwweDA2LDB4MTIsMHgwMywweDE3LDB4MTIsMHgwMSwweGU2LDB4MzAsMHhlNSwKKzB4MDMsMHg0MywweDJjLDB4MTAsMHhlNSwweDJjLDB4ZmMsMHg3OCwweGE1LDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsCisweDM0LDB4MDAsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDEyLDB4MTAsMHg2NywweDc4LDB4YTMsMHhlNiwweDI0LDB4MDYsMHhmNSwweDgyLAorMHgxOCwweGU2LDB4MzQsMHgwMCwweGY1LDB4ODMsMHhlMCwweGMyLDB4MDMsMHhmYywweGU1LDB4MzAsMHgyNCwweDk3LDB4ZjgsMHhjNiwKKzB4NDQsMHgwNCwweGY2LDB4OGMsMHgyYywweGU1LDB4MzAsMHg1NCwweDBmLDB4YzQsMHg1NCwweGYwLDB4N2UsMHgwMCwweGZmLDB4ZWUsCisweGVmLDB4NDQsMHgwNCwweDdkLDB4MDAsMHhmZiwweGVjLDB4NGUsMHhmYywweGVkLDB4NGYsMHhmZCwweDEyLDB4MWMsMHhmZSwweDdjLAorMHgwMCwweDIyLDB4OGMsMHgyZiwweDEyLDB4MGYsMHg3YywweDEyLDB4MTAsMHgwNywweDc4LDB4YTQsMHg4NiwweDgzLDB4MDgsMHg4NiwKKzB4ODIsMHhlMCwweDU0LDB4MDgsMHhmMCwweGEzLDB4YTMsMHhhMywweGEzLDB4ZTAsMHg1NCwweDA4LDB4ZjAsMHhhYywweDJmLDB4N2QsCisweDAyLDB4MTIsMHgwZCwweDNhLDB4YzIsMHgwMywweGU1LDB4MmYsMHgyNCwweDk3LDB4ZjgsMHhjNiwweDU0LDB4ZmIsMHhmNiwweDdjLAorMHgwMCwweDIyLDB4MTIsMHgzMCwweDg1LDB4NzgsMHg5MCwweGVjLDB4ZjYsMHhlYywweDI0LDB4OTcsMHhmOCwweGU2LDB4MzAsMHhlMSwKKzB4MGEsMHg3ZCwweDAwLDB4N2MsMHgxMywweDEyLDB4MjQsMHhiMSwweDEyLDB4MzEsMHgwOCwweDc4LDB4OTAsMHhlNiwweDI0LDB4OTcsCisweGY4LDB4YzYsMHg0NCwweDAxLDB4ZjYsMHg3OCwweDkwLDB4ZTYsMHhmYywweDEyLDB4MGYsMHg3YywweDc4LDB4OTAsMHhlNiwweDI0LAorMHhmZCwweDc1LDB4ZjAsMHgwYSwweGE0LDB4MjQsMHgxYywweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmQsMHhmNSwweDgzLDB4NzgsMHhhMCwKKzB4ZTYsMHhmYSwweDA4LDB4ZTYsMHhmOSwweDdiLDB4MGEsMHg3OCwweDAxLDB4MTIsMHgwMywweGE3LDB4NzgsMHhhMCwweDg2LDB4ODMsCisweDA4LDB4ODYsMHg4MiwweDc5LDB4ZjgsMHg3YSwweDM0LDB4N2IsMHgwYSwweDc4LDB4MDEsMHgxMiwweDAzLDB4ZjUsMHgxMiwweDBmLAorMHhkMywweGMyLDB4MDMsMHg3OCwweDkwLDB4ZTYsMHhmYywweDEyLDB4MTEsMHgyMywweDc4LDB4OGYsMHhlYywweGY2LDB4ZWMsMHg2MCwKKzB4MGEsMHg3ZCwweDAwLDB4N2MsMHgwOCwweDEyLDB4MjQsMHhiMSwweDEyLDB4MzEsMHgwOCwweDc4LDB4OTAsMHhlNiwweGZjLDB4MTIsCisweDBmLDB4N2MsMHg3OCwweGEzLDB4ZTYsMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLAorMHg0NCwweDEwLDB4NTQsMHhkZiwweGZjLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwweGU2LDB4MzQsMHgwMCwKKzB4ZjUsMHg4MywweGVjLDB4ZjAsMHg3OCwweDhmLDB4ZWMsMHhmNiwweGMyLDB4MDMsMHg3YywweGM4LDB4MTIsMHgzMiwweDQ4LDB4NzgsCisweDkwLDB4ZTYsMHhmYywweDEyLDB4MGYsMHg3YywweDc4LDB4YTMsMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LAorMHgwMCwweGY1LDB4ODMsMHhlMCwweDU0LDB4ZWYsMHhmMCwweGMyLDB4MDMsMHg3YywweGM4LDB4MTIsMHgzMiwweDQ4LDB4NzgsMHg5MCwKKzB4ZTYsMHhmYywweDEyLDB4MGYsMHg3YywweDc4LDB4YTMsMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsCisweGY1LDB4ODMsMHhlMCwweDQ0LDB4MTAsMHhmMCwweGMyLDB4MDMsMHg3YywweGM4LDB4MTIsMHgzMiwweDQ4LDB4NzgsMHg5MCwweGU2LAorMHhmYywweDEyLDB4MGYsMHg3YywweDc4LDB4YTMsMHhlNiwweDI0LDB4MDQsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwKKzB4ODMsMHhlMCwweDQ0LDB4MjAsMHhmMCwweGMyLDB4MDMsMHg3YywweGYwLDB4MTIsMHgzMiwweDQ4LDB4NzgsMHg5MCwweGU2LDB4ZmMsCisweDEyLDB4MGYsMHg3YywweDc4LDB4YTMsMHhlNiwweDI0LDB4MDUsMHhmNSwweDgyLDB4MTgsMHhlNiwweDM0LDB4MDAsMHhmNSwweDgzLAorMHhlMCwweDMwLDB4ZTQsMHgxNSwweGMyLDB4MDMsMHg3OCwweDkwLDB4ZTYsMHg0NCwweDEwLDB4N2YsMHgwMCwweGZlLDB4N2MsMHgwNywKKzB4MTIsMHgzMSwweDlhLDB4MTIsMHgzMSwweDA4LDB4MDIsMHgxNywweDQ5LDB4NzgsMHhhMywweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsCisweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NTQsMHhjZiwweGYwLDB4YzIsMHgwMywweDdjLDB4YzgsMHgxMiwweDMyLAorMHg0OCwweDc4LDB4OTAsMHhlNiwweGZjLDB4MTIsMHgwZiwweDdjLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwNCwweGY1LDB4ODIsMHgxOCwKKzB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NDQsMHgzMCwweGYwLDB4YzIsMHgwMywweDdjLDB4ZjAsMHgxMiwweDMyLDB4NDgsCisweDc4LDB4OTAsMHhlNiwweGZjLDB4MTIsMHgwZiwweDdjLDB4NzgsMHhhMywweGU2LDB4MjQsMHgwNSwweGY1LDB4ODIsMHgxOCwweGU2LAorMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4MzAsMHhlNCwweDE0LDB4YzIsMHgwMywweDc4LDB4OTAsMHhlNiwweDQ0LDB4MTAsMHg3ZiwKKzB4MDAsMHhmZSwweDdjLDB4MDcsMHgxMiwweDMxLDB4OWEsMHgxMiwweDMxLDB4MDgsMHg4MCwweDVkLDB4NzgsMHhhMywweGU2LDB4MjQsCisweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NTQsMHhlZiwweGYwLDB4NzgsMHhhMywweGU2LAorMHgyNCwweDA0LDB4ZjUsMHg4MiwweDE4LDB4ZTYsMHgzNCwweDAwLDB4ZjUsMHg4MywweGUwLDB4NTQsMHhkZiwweGYwLDB4NzgsMHg5MCwKKzB4ZTYsMHgyNCwweGZkLDB4NzUsMHhmMCwweDBhLDB4YTQsMHgyNCwweDFjLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZCwweGY1LDB4ODMsCisweGFjLDB4ODIsMHhhZCwweDgzLDB4NzgsMHhhMCwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlYywweGY5LDB4ZWQsMHhmYSwweDdiLAorMHgwYSwweDc4LDB4MDEsMHgxMiwweDAzLDB4YTcsMHhjMiwweDAzLDB4NzgsMHg5MCwweGU2LDB4ZmMsMHgxMiwweDExLDB4MjMsMHg3ZCwKKzB4MDAsMHg3YywweDBiLDB4MTIsMHgyNCwweGIxLDB4MTIsMHgzMSwweDA4LDB4MjIsMHgxMiwweDMwLDB4ODUsMHg5MCwweGZmLDB4OTEsCisweGUwLDB4OTAsMHhmZCwweDQxLDB4ZjAsMHg3ZCwweDAyLDB4N2MsMHgwMCwweDEyLDB4MjQsMHhiMSwweDEyLDB4MzEsMHgwOCwweDIyLAorMHgxMiwweDMwLDB4ODUsMHg5MCwweGZkLDB4NDAsMHhlMCwweGY0LDB4ZmMsMHg5MCwweGZmLDB4OTEsMHhlMCwweDVjLDB4ZjUsMHgzMywKKzB4OTAsMHhmZCwweDQxLDB4ZTAsMHhmYywweDkwLDB4ZmQsMHg0MCwweGUwLDB4NWMsMHg0MiwweDMzLDB4ZTUsMHgzMywweDkwLDB4ZmYsCisweDkxLDB4ZjAsMHg3YywweDAwLDB4MTIsMHgyNSwweDRhLDB4MTIsMHgzMSwweDA4LDB4MjIsMHg3NCwweDNjLDB4OTAsMHhmYiwweGU4LAorMHhmMCwweDc0LDB4M2UsMHg5MCwweGZiLDB4ZTgsMHhmMCwweGU0LDB4OTAsMHhmZCwweDMwLDB4ZjAsMHgyMiwweDhkLDB4MzUsMHg4YywKKzB4MzQsMHhlYywweGI0LDB4MDEsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MDIsMHg4MCwweDI4LDB4YjQsMHgwMiwweDAyLDB4ODAsCisweDAzLDB4ZDMsMHg0MCwweDA4LDB4YTgsMHgzNSwweGM2LDB4MjUsMHhlMCwweGY2LDB4ODAsMHgxOCwweGI0LDB4MDQsMHgwMiwweDgwLAorMHgwMywweGQzLDB4NDAsMHgwYSwweGE4LDB4MzUsMHhjNiwweDI1LDB4ZTAsMHgyNSwweGUwLDB4ZjYsMHg4MCwweDA2LDB4YTgsMHgzNSwKKzB4NzYsMHgwMCwweDgwLDB4MDAsMHgyMiwweDhjLDB4M2MsMHg4ZCwweDNiLDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4NzUsCisweDYwLDB4MDYsMHg3NSwweDYxLDB4MDAsMHg5MCwweGZkLDB4MzEsMHgxMiwweDA0LDB4NmUsMHgxMiwweDAxLDB4ZTYsMHhiNCwweDgwLAorMHgwMiwweDgwLDB4MDYsMHhkMywweDUwLDB4MDMsMHgwMiwweDE4LDB4OWUsMHg5MCwweGZkLDB4MzEsMHgxMiwweDA0LDB4ODAsMHg5MCwKKzB4MDAsMHgwMywweDEyLDB4MDEsMHhlYywweDU0LDB4ZjAsMHhiNCwweDMwLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDVmLDB4OTAsCisweGZkLDB4MzEsMHgxMiwweDA0LDB4ODAsMHg5MCwweDAwLDB4MDgsMHgxMiwweDAyLDB4MGUsMHhmYSwweGZkLDB4ZWIsMHhmZSwweDdmLAorMHgwMSwweDkwLDB4ZmQsMHgzNCwweDEyLDB4MDQsMHg2ZSwweGVlLDB4Y2QsMHg5MCwweDM1LDB4MDIsMHhmYywweGU0LDB4OTMsMHhmZiwKKzB4NzQsMHgwMSwweDkzLDB4ZmUsMHhmOSwweGVmLDB4ZmEsMHg3YiwweDAxLDB4ZWEsMHhmZiwweGU5LDB4ZmUsMHhlYywweGMzLDB4OWUsCisweGVkLDB4OWYsMHg0MCwweDI1LDB4OTAsMHgzNSwweDA0LDB4ZTQsMHg5MywweGZkLDB4NzQsMHgwMSwweDkzLDB4ZmMsMHhlZCwweGZlLAorMHhlYywweGZkLDB4N2YsMHgwMSwweGVlLDB4Y2QsMHhmYywweDkwLDB4ZmQsMHgzNiwweGUwLDB4ZDMsMHg5YywweDkwLDB4ZmQsMHgzNSwKKzB4ZTAsMHg5ZCwweDUwLDB4MDUsMHg3NSwweDYwLDB4ODAsMHg4MCwweDMzLDB4MTIsMHgxOSwweGJjLDB4ODAsMHgyZSwweGI0LDB4NjAsCisweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwYiwweGFjLDB4M2MsMHhhZCwweDNiLDB4MTIsMHgwNywweDgyLDB4OGMsMHg2MCwweDgwLAorMHgxYiwweGI0LDB4MTAsMHgwMywweGIzLDB4NDAsMHgxMCwweGMzLDB4YjQsMHgyMCwweDAzLDB4YjMsMHg0MCwweDA5LDB4YzMsMHhiNCwKKzB4NDAsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MDAsMHg3NSwweDYwLDB4ODEsMHg4MCwweDAwLDB4ODAsMHg3NSwweGI0LDB4ODEsCisweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHg2YiwweDkwLDB4ZmQsMHgzMSwweDEyLDB4MDQsMHg4MCwweDkwLDB4MDAsMHgwMywweDEyLAorMHgwMSwweGVjLDB4NTQsMHhmMCwweGI0LDB4MzAsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MWQsMHg5MCwweGZkLDB4MzEsMHgxMiwKKzB4MDQsMHg4MCwweDkwLDB4MDAsMHgwOCwweDEyLDB4MDIsMHgwZSwweGZhLDB4ZmQsMHhlYiwweGZlLDB4N2YsMHgwMSwweDkwLDB4ZmQsCisweDM3LDB4MTIsMHgwNCwweDZlLDB4MTIsMHgxOSwweDI2LDB4ODAsMHgzNiwweGI0LDB4NjAsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLAorMHgxMywweDc1LDB4M2EsMHg2MSwweGU0LDB4ZjUsMHgzOSwweGY1LDB4MzgsMHhhYywweDNjLDB4YWQsMHgzYiwweDEyLDB4MDUsMHhkZSwKKzB4OGMsMHg2MCwweDgwLDB4MWIsMHhiNCwweDEwLDB4MDMsMHhiMywweDQwLDB4MTAsMHhjMywweGI0LDB4MjAsMHgwMywweGIzLDB4NDAsCisweDA5LDB4YzMsMHhiNCwweDQwLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDAwLDB4NzUsMHg2MCwweDgxLDB4ODAsMHgwMCwweDgwLAorMHgwMiwweDgwLDB4MDAsMHhlNSwweDYwLDB4ZmMsMHg5MCwweGZkLDB4MzEsMHgxMiwweDA0LDB4ODAsMHhlYywweDkwLDB4MDAsMHgwMiwKKzB4MTIsMHgwMywweDE3LDB4YWMsMHg2MSwweDIyLDB4OTAsMHhmZCwweDMxLDB4MTIsMHgwNCwweDgwLDB4OTAsMHgwMCwweDA0LDB4MTIsCisweDAxLDB4ZWMsMHg2MCwweDA0LDB4NzQsMHgwMSwweDgwLDB4MDEsMHhlNCwweGEyLDB4ZTAsMHg5MiwweDAxLDB4OTAsMHhmZCwweDMxLAorMHgxMiwweDA0LDB4ODAsMHhlZCwweDI0LDB4MDMsMHhmZCwweDUwLDB4MDEsMHgwZSwweDkwLDB4ZmQsMHgzNCwweDEyLDB4MDQsMHg2ZSwKKzB4OTAsMHhmZCwweDMxLDB4MTIsMHgwNCwweDgwLDB4OTAsMHgwMCwweDA1LDB4MTIsMHgwMSwweGVjLDB4ZjUsMHg2MSwweDkwLDB4MDAsCisweDA0LDB4MTIsMHgwMSwweGVjLDB4NTQsMHgwZiwweGZjLDB4N2QsMHg2MSwweDEyLDB4MTcsMHg5ZCwweGU1LDB4NjEsMHg3MCwweDA0LAorMHg3NSwweDYwLDB4MDgsMHgyMiwweDc1LDB4NjAsMHgwMCwweDc4LDB4N2UsMHg3NiwweDAwLDB4NzgsMHg3ZSwweGU2LDB4YzMsMHg5NSwKKzB4NjEsMHg1MCwweDM4LDB4OTAsMHhmZCwweDM3LDB4MTIsMHgwNCwweDgwLDB4MTIsMHgwMSwweGU2LDB4ZmMsMHg5MCwweGZkLDB4MzQsCisweDEyLDB4MDQsMHg4MCwweGVjLDB4MTIsMHgwMywweDBmLDB4MzAsMHgwMSwweDBlLDB4OTAsMHhmZCwweDM5LDB4ZTAsMHgwNCwweGYwLAorMHg5MCwweGZkLDB4MzgsMHg3MCwweDAzLDB4ZTAsMHgwNCwweGYwLDB4NzgsMHg3ZSwweDA2LDB4OTAsMHhmZCwweDM2LDB4ZTAsMHgwNCwKKzB4ZjAsMHg5MCwweGZkLDB4MzUsMHg3MCwweDAzLDB4ZTAsMHgwNCwweGYwLDB4ODAsMHhjMCwweDIyLDB4OTAsMHhmZCwweDMyLDB4ZTAsCisweGZkLDB4YTMsMHhlMCwweGZjLDB4ZWQsMHhmZSwweGVjLDB4ZmQsMHg3ZiwweDAxLDB4ZWQsMHgyNCwweDBhLDB4ZmQsMHg1MCwweDAxLAorMHgwZSwweDkwLDB4ZmQsMHgzYSwweDEyLDB4MDQsMHg2ZSwweDkwLDB4ZmQsMHgzMSwweDEyLDB4MDQsMHg4MCwweDkwLDB4MDAsMHgwNCwKKzB4MTIsMHgwMSwweGVjLDB4NTQsMHgwZiwweGI0LDB4MDEsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MTcsMHg5MCwweGZkLDB4M2EsCisweDEyLDB4MDQsMHg4MCwweDBkLDB4ZWQsMHg3MCwweDAxLDB4MGUsMHg5MCwweGZkLDB4MzcsMHgxMiwweDA0LDB4NmUsMHg3OCwweDgyLAorMHg3NiwweDAxLDB4ODAsMHg0ZSwweGI0LDB4MDIsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MTksMHg5MCwweGZkLDB4M2EsMHgxMiwKKzB4MDQsMHg4MCwweGVkLDB4MjQsMHgwMiwweGZkLDB4NTAsMHgwMSwweDBlLDB4OTAsMHhmZCwweDM3LDB4MTIsMHgwNCwweDZlLDB4NzgsCisweDgyLDB4NzYsMHgwMiwweDgwLDB4MmQsMHhiNCwweDA0LDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDE5LDB4OTAsMHhmZCwweDNhLAorMHgxMiwweDA0LDB4ODAsMHhlZCwweDI0LDB4MDQsMHhmZCwweDUwLDB4MDEsMHgwZSwweDkwLDB4ZmQsMHgzNywweDEyLDB4MDQsMHg2ZSwKKzB4NzgsMHg4MiwweDc2LDB4MDQsMHg4MCwweDBjLDB4YjQsMHgwMCwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwMCwweDc1LDB4NjAsCisweDA4LDB4MjIsMHg5MCwweGZkLDB4MzEsMHgxMiwweDA0LDB4ODAsMHg5MCwweDAwLDB4MDUsMHgxMiwweDAxLDB4ZWMsMHhmNSwweDYxLAorMHg3OCwweDdmLDB4NzYsMHgwMCwweDc4LDB4N2YsMHhlNiwweGMzLDB4OTUsMHg2MSwweDQwLDB4MDMsMHgwMiwweDFiLDB4MjQsMHg3OCwKKzB4ODAsMHg3NiwweDAwLDB4NzgsMHg4MCwweGU2LDB4YzMsMHg3OCwweDgyLDB4OTYsMHg1MCwweDc2LDB4OTAsMHhmZCwweDM0LDB4MTIsCisweDA0LDB4ODAsMHgxMiwweDAxLDB4ZTYsMHhmYywweDkwLDB4ZmQsMHgzYSwweDEyLDB4MDQsMHg4OSwweDEyLDB4MDEsMHhlMCwweGY0LAorMHg1YywweGZjLDB4MTIsMHgwMSwweGUwLDB4ZjgsMHg5MCwweGZkLDB4MzcsMHgxMiwweDA0LDB4ODAsMHhlOCwweGMwLDB4ZTAsMHgxMiwKKzB4MDEsMHhlNiwweGM4LDB4ZDAsMHhlMCwweGM4LDB4NTgsMHg0YywweGZjLDB4OTAsMHhmZCwweDM0LDB4MTIsMHgwNCwweDgwLDB4ZWMsCisweDEyLDB4MDMsMHgwZiwweDc4LDB4ODEsMHhlYywweGY2LDB4OTAsMHhmZCwweDM5LDB4ZTAsMHgwNCwweGYwLDB4OTAsMHhmZCwweDM4LAorMHg3MCwweDAzLDB4ZTAsMHgwNCwweGYwLDB4MDksMHhlOSwweDcwLDB4MDEsMHgwYSwweDkwLDB4ZmQsMHgzYSwweDEyLDB4MDQsMHg3NywKKzB4OTAsMHhmZCwweDMxLDB4MTIsMHgwNCwweDgwLDB4OTAsMHgwMCwweDA0LDB4MTIsMHgwMSwweGVjLDB4MzAsMHhlNCwweDBlLDB4OTAsCisweGZkLDB4MzYsMHhlMCwweDA0LDB4ZjAsMHg5MCwweGZkLDB4MzUsMHg3MCwweDAzLDB4ZTAsMHgwNCwweGYwLDB4NzgsMHg4MCwweDA2LAorMHg4MCwweDgxLDB4NzgsMHg4MiwweGU2LDB4ZmQsMHhlNCwweGZlLDB4ZmYsMHhlZSwweGNkLDB4ZmMsMHg5MCwweGZkLDB4MzksMHhlMCwKKzB4MmMsMHhmMCwweDkwLDB4ZmQsMHgzOCwweGUwLDB4M2QsMHhmMCwweDc4LDB4ODIsMHhlNiwweGZkLDB4ZTQsMHhmZSwweGZmLDB4ZWUsCisweGNkLDB4ZmMsMHg5MCwweGZkLDB4M2MsMHhlMCwweDJjLDB4ZjAsMHg5MCwweGZkLDB4M2IsMHhlMCwweDNkLDB4ZjAsMHg3OCwweDdmLAorMHgwNiwweDAyLDB4MWEsMHg2NCwweDc1LDB4NjAsMHgwMCwweDIyLDB4ZTUsMHgzZCwweDA1LDB4M2QsMHgwNCwweDcwLDB4MDIsMHhiMiwKKzB4YjAsMHgyMiwweGMwLDB4ZTAsMHhjMCwweGYwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweGQwLDB4ZTgsMHhjMCwweGUwLDB4ZTksCisweGMwLDB4ZTAsMHhlYSwweGMwLDB4ZTAsMHhlYiwweGMwLDB4ZTAsMHhlYywweGMwLDB4ZTAsMHhlZCwweGMwLDB4ZTAsMHhlZSwweGMwLAorMHhlMCwweGVmLDB4YzAsMHhlMCwweDkwLDB4ZmYsMHg5MiwweGUwLDB4MTIsMHgwMSwweGI3LDB4MWIsMHg4MCwweDMwLDB4MWIsMHg4MCwKKzB4MzIsMHgxYiwweDhmLDB4MzgsMHgxYiwweGExLDB4M2EsMHgxYiwweGIzLDB4M2UsMHgxYiwweGNiLDB4NDQsMHgxYiwweGJmLDB4NDYsCisweDFiLDB4ZDcsMHg1MCwweDFjLDB4MTksMHg1MiwweDFiLDB4ZjgsMHg1NCwweDFjLDB4M2EsMHg1NiwweDAwLDB4MDAsMHgxYywweDViLAorMHg5MCwweGZmLDB4OTIsMHhlMCwweDdmLDB4MDAsMHhmZSwweDdjLDB4MDEsMHgxMiwweDMxLDB4OWEsMHgwMiwweDFjLDB4NmIsMHhlNCwKKzB4ZmYsMHgwNCwweGZlLDB4N2MsMHgwMywweDEyLDB4MzEsMHg5YSwweDc0LDB4MjAsMHg5MCwweGZmLDB4ZmUsMHhmMCwweDAyLDB4MWMsCisweDZiLDB4ZTQsMHhmZiwweDA0LDB4ZmUsMHg3YywweDAyLDB4MTIsMHgzMSwweDlhLDB4NzQsMHg0MCwweDkwLDB4ZmYsMHhmZSwweGYwLAorMHgwMiwweDFjLDB4NmIsMHhlNCwweGZmLDB4MDQsMHhmZSwweDdjLDB4MDQsMHgxMiwweDMxLDB4OWEsMHgwMiwweDFjLDB4NmIsMHhlNCwKKzB4ZmYsMHgwNCwweGZlLDB4N2MsMHgwNSwweDEyLDB4MzEsMHg5YSwweDAyLDB4MWMsMHg2YiwweGU0LDB4ZmYsMHgwNCwweGZlLDB4N2MsCisweDA2LDB4MTIsMHgzMSwweDlhLDB4MDIsMHgxYywweDZiLDB4OTAsMHhmZiwweGE1LDB4ZTAsMHg3ZCwweDAwLDB4OTAsMHhmZCwweDAwLAorMHhjZCwweGYwLDB4YTMsMHhjZCwweGYwLDB4OTAsMHhmZCwweDAxLDB4ZTAsMHhmYywweGY1LDB4ODMsMHg5MCwweGZkLDB4MDAsMHhlMCwKKzB4NDQsMHgzMywweGZkLDB4MTIsMHgxYywweGZlLDB4ODAsMHg3MywweDkwLDB4ZmYsMHhiNSwweGUwLDB4N2QsMHgwMCwweDkwLDB4ZmQsCisweDAyLDB4Y2QsMHhmMCwweGEzLDB4Y2QsMHhmMCwweDkwLDB4ZmQsMHgwMywweGUwLDB4ZmMsMHhmNSwweDgzLDB4OTAsMHhmZCwweDAyLAorMHhlMCwweDQ0LDB4NDMsMHhmZCwweDEyLDB4MWMsMHhmZSwweDgwLDB4NTIsMHg5MCwweGZmLDB4YTYsMHhlMCwweDdkLDB4MDAsMHg5MCwKKzB4ZmQsMHgwNCwweGNkLDB4ZjAsMHhhMywweGNkLDB4ZjAsMHg5MCwweGZkLDB4MDUsMHhlMCwweGZjLDB4ZjUsMHg4MywweDkwLDB4ZmQsCisweDA0LDB4ZTAsMHg0NCwweDM0LDB4ZmQsMHgxMiwweDFjLDB4ZmUsMHg4MCwweDMxLDB4OTAsMHhmZiwweGI2LDB4ZTAsMHg3ZCwweDAwLAorMHg5MCwweGZkLDB4MDYsMHhjZCwweGYwLDB4YTMsMHhjZCwweGYwLDB4OTAsMHhmZCwweDA3LDB4ZTAsMHhmYywweGY1LDB4ODMsMHg5MCwKKzB4ZmQsMHgwNiwweGUwLDB4NDQsMHg0NCwweGZkLDB4MTIsMHgxYywweGZlLDB4ODAsMHgxMCwweDkwLDB4ZmYsMHg5MiwweGUwLDB4N2QsCisweDAwLDB4ZmMsMHhlZCwweDQ0LDB4YWEsMHhmZCwweDEyLDB4MWMsMHhmZSwweDgwLDB4MDAsMHhlNCwweDkwLDB4ZmYsMHg5MiwweGYwLAorMHhkMCwweGUwLDB4ZmYsMHhkMCwweGUwLDB4ZmUsMHhkMCwweGUwLDB4ZmQsMHhkMCwweGUwLDB4ZmMsMHhkMCwweGUwLDB4ZmIsMHhkMCwKKzB4ZTAsMHhmYSwweGQwLDB4ZTAsMHhmOSwweGQwLDB4ZTAsMHhmOCwweGQwLDB4ZDAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZjAsCisweGQwLDB4ZTAsMHgzMiwweDA1LDB4ODEsMHgwNSwweDgxLDB4MDUsMHg4MSwweDA1LDB4ODEsMHhhOCwweDgxLDB4MTgsMHgxOCwweDE4LAorMHhlZCwweGY2LDB4MDgsMHhlYywweGY2LDB4OTAsMHhmZiwweDZhLDB4ZTAsMHgyMCwweGU3LDB4MDIsMHg4MCwweGY3LDB4OTAsMHhmZiwKKzB4NjksMHhlMCwweDdkLDB4MDAsMHhhOCwweDgxLDB4MTgsMHhjZCwweGY2LDB4Y2QsMHgwOCwweGY2LDB4N2QsMHgwMywweGE4LDB4ODEsCisweGU2LDB4MTgsMHhmYywweGU2LDB4Y2MsMHgyNSwweGUwLDB4Y2MsMHgzMywweGNjLDB4ZGQsMHhmOSwweGNjLDB4ZjYsMHhjYywweDA4LAorMHhmNiwweGE4LDB4ODEsMHgxOCwweGU2LDB4NDQsMHhmOCwweGY2LDB4YTgsMHg4MSwweDE4LDB4MTgsMHgxOCwweGU2LDB4ZmQsMHgwOCwKKzB4ZTYsMHhmYywweGE4LDB4ODEsMHgxOCwweDg2LDB4ODMsMHgwOCwweDg2LDB4ODIsMHhlZCwweGYwLDB4YTMsMHhlYywweGYwLDB4NzQsCisweDAyLDB4OTAsMHhmZiwweDZhLDB4ZjAsMHgxNSwweDgxLDB4MTUsMHg4MSwweDE1LDB4ODEsMHgxNSwweDgxLDB4MjIsMHhlNSwweDgxLAorMHgyNCwweDA1LDB4ZjUsMHg4MSwweGU0LDB4YTgsMHg4MSwweDE4LDB4ZjYsMHhhOCwweDgxLDB4MTgsMHgxOCwweDE4LDB4MTgsMHhlZCwKKzB4ZjYsMHgwOCwweGVjLDB4ZjYsMHg5MCwweGZiLDB4ZmQsMHhlMCwweDI0LDB4ZjgsMHg1MCwweDAzLDB4MDIsMHgxZSwweDFmLDB4ZTQsCisweGE4LDB4ODEsMHgxOCwweDE4LDB4ZjYsMHhhOCwweDgxLDB4MTgsMHhlNiwweGZlLDB4YTgsMHg4MSwweDE4LDB4MTgsMHgxOCwweDE4LAorMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4N2YsMHgwMCwweGVmLDB4MjQsMHhmOCwweDQwLDB4NGQsMHhlNCwweGVmLDB4MjUsMHhlMCwKKzB4MjQsMHg4NSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmQsMHhmNSwweDgzLDB4ZTAsMHhmYiwweGEzLDB4ZTAsMHg2YywweDcwLDB4MDMsCisweGZhLDB4ZWIsMHg2ZCwweDcwLDB4MDksMHg3NCwweDAxLDB4YTgsMHg4MSwweDE4LDB4MTgsMHhmNiwweDgwLDB4MmIsMHhlNCwweGVmLAorMHgyNSwweGUwLDB4MjQsMHg4NSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmQsMHhmNSwweDgzLDB4N2EsMHgwMCwweGUwLDB4NTQsMHhmMCwKKzB4Y2MsMHhmOCwweGNjLDB4Y2QsMHhmOSwweGNkLDB4ZmIsMHg3OCwweDAwLDB4ZTksMHg1NCwweGYwLDB4ZjksMHhlYSwweDY4LDB4NzAsCisweDAyLDB4ZWIsMHg2OSwweDcwLDB4MDEsMHgwZSwweDBmLDB4ODAsMHhhZSwweGE4LDB4ODEsMHgxOCwweGVlLDB4ZjYsMHhhOCwweDgxLAorMHgxOCwweDE4LDB4MTgsMHgxOCwweGVkLDB4ZjYsMHgwOCwweGVjLDB4ZjYsMHhhOCwweDgxLDB4ZWYsMHhmNiwweGE4LDB4ODEsMHgxOCwKKzB4MTgsMHhlNiwweDcwLDB4NzksMHhhOCwweDgxLDB4MTgsMHhlNiwweDI0LDB4ZjcsMHg0MCwweDcxLDB4YTgsMHg4MSwweDE4LDB4MTgsCisweDE4LDB4MTgsMHhlNiwweDU0LDB4MGYsMHhhOCwweDgxLDB4ZjYsMHg2NCwweDA0LDB4NjAsMHgxNywweGE4LDB4ODEsMHhlNiwweDY0LAorMHgwMywweDYwLDB4MTAsMHhhOCwweDgxLDB4MTgsMHgxOCwweDE4LDB4MTgsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4MTIsMHgxYywKKzB4OTMsMHg4MCwweDRhLDB4N2MsMHgwYSwweDEyLDB4MzAsMHhmYSwweGE4LDB4ODEsMHgxOCwweDE4LDB4MTgsMHgxOCwweGU2LDB4ZmQsCisweDA4LDB4ZTYsMHhmYywweDkwLDB4ZmIsMHhmYywweGUwLDB4MjUsMHhlMCwweDI0LDB4ODUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZkLAorMHhmNSwweDgzLDB4ZWQsMHhmMCwweGEzLDB4ZWMsMHhmMCwweDkwLDB4ZmIsMHhmYywweGUwLDB4ZmYsMHhlNCwweGVmLDB4MDQsMHg1NCwKKzB4MDcsMHhmZiwweDkwLDB4ZmIsMHhmYywweGYwLDB4OTAsMHhmYiwweGZkLDB4ZTAsMHgwNCwweGYwLDB4MTIsMHgzMSwweDkzLDB4OTAsCisweGZiLDB4ZmUsMHhlMCwweDcwLDB4MDgsMHhlNCwweGZlLDB4ZmYsMHg3YywweDBmLDB4MTIsMHgzMSwweDlhLDB4ODAsMHgyNywweDkwLAorMHhmYiwweGZmLDB4ZTAsMHgwNCwweGYwLDB4NTQsMHgzZiwweDcwLDB4MWQsMHg5MCwweGZiLDB4ZmYsMHhlMCwweDQ0LDB4ZmUsMHg3ZCwKKzB4MDAsMHhmYywweDkwLDB4ZmIsMHhmYywweGUwLDB4MjUsMHhlMCwweDI0LDB4ODUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZkLDB4ZjUsCisweDgzLDB4ZWQsMHhmMCwweGEzLDB4ZWMsMHhmMCwweGU1LDB4ODEsMHgyNCwweGZiLDB4ZjUsMHg4MSwweDIyLDB4NzgsMHg4NSwweDc2LAorMHgwMCwweDc4LDB4ODYsMHg3NiwweDAwLDB4NzQsMHgwMSwweDkwLDB4ZmIsMHhmZSwweGYwLDB4MTIsMHgzMCwweDg1LDB4OTAsMHhmYiwKKzB4ZmQsMHhlMCwweDYwLDB4NTksMHg3YywweDBhLDB4MTIsMHgzMCwweGZhLDB4OTAsMHhmYiwweGZiLDB4ZTAsMHgyNSwweGUwLDB4MjQsCisweDg1LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZCwweGY1LDB4ODMsMHhlMCwweGZkLDB4YTMsMHhlMCwweGZjLDB4OTAsMHhmYiwweGZiLAorMHhlMCwweDI1LDB4ZTAsMHgyNCwweDg1LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZCwweGY1LDB4ODMsMHhlNCwweGYwLDB4YTMsMHhmMCwKKzB4OTAsMHhmYiwweGZiLDB4ZTAsMHhmZiwweGU0LDB4ZWYsMHgwNCwweDU0LDB4MDcsMHhmZiwweDkwLDB4ZmIsMHhmYiwweGYwLDB4OTAsCisweGZiLDB4ZmQsMHhlMCwweDE0LDB4ZjAsMHg3OCwweDgzLDB4ZWQsMHhmNiwweDA4LDB4ZWMsMHhmNiwweDEyLDB4MzEsMHg5MywweGIyLAorMHhiMywweDc4LDB4ODMsMHhlNiwweGZkLDB4MDgsMHhlNiwweGZjLDB4MTIsMHgwOCwweGU1LDB4ODAsMHhhMSwweDEyLDB4MzEsMHhlNywKKzB4NzgsMHg4NSwweDA2LDB4YjYsMHgwMCwweDExLDB4NzgsMHg4NSwweDc2LDB4MDAsMHg3OCwweDg2LDB4ZTYsMHhmNCwweDA0LDB4MDQsCisweGEyLDB4ZTAsMHg5MiwweGI0LDB4NzgsMHg4NiwweGY2LDB4ODAsMHg4NSwweGU0LDB4OTAsMHhmYiwweGZlLDB4ZjAsMHg5MCwweGZiLAorMHhmZCwweGUwLDB4N2QsMHgwMCwweGZjLDB4ZWQsMHg0NCwweGNmLDB4ZmQsMHgxMiwweDFjLDB4OTMsMHgxMiwweDMxLDB4MDgsMHgyMiwKKzB4MTIsMHgzMCwweDg1LDB4ZTUsMHg2YSwweDY0LDB4NDksMHg0NSwweDY5LDB4NjAsMHgxNSwweDkwLDB4ZmYsMHg4MywweGUwLDB4NTQsCisweDBmLDB4N2QsMHgwMCwweGQzLDB4OTUsMHg2YSwweGVkLDB4OTUsMHg2OSwweDUwLDB4MDUsMHgxMiwweDJlLDB4Y2UsMHg4MCwweDAzLAorMHgxMiwweDJmLDB4OWUsMHgxMiwweDMxLDB4MDgsMHgyMiwweDEyLDB4MzAsMHg4NSwweGU1LDB4NmEsMHg2NCwweDQ5LDB4NDUsMHg2OSwKKzB4NjAsMHgwNSwweDEyLDB4MmYsMHhkOCwweDgwLDB4MGUsMHg5MCwweGZmLDB4ODAsMHhlMCwweDQ0LDB4MDgsMHhmMCwweDkwLDB4ZmYsCisweDgzLDB4ZTAsMHg1NCwweDdmLDB4ZjAsMHgxMiwweDMxLDB4MDgsMHgyMiwweDEyLDB4MzAsMHg4NSwweDhjLDB4NTQsMHhlYywweDU0LAorMHhmMCwweGI0LDB4MTAsMHgxNSwweDc1LDB4NjQsMHgzZCwweDc1LDB4NjMsMHhmZCwweDc1LDB4NjIsMHgwMSwweGU1LDB4NjQsMHgyNCwKKzB4MDMsMHhmNSwweDY0LDB4ZTUsMHg2MywweDM0LDB4MDAsMHhmNSwweDYzLDB4ZTQsMHhmNSwweDU3LDB4ZjUsMHg1NiwweGU1LDB4NTYsCisweGMzLDB4OTQsMHgwMSwweDUwLDB4MjcsMHhlNSwweDU0LDB4NTQsMHgwZiwweGZjLDB4YWQsMHg2NCwweGFlLDB4NjMsMHhhZiwweDYyLAorMHgxMiwweDBlLDB4ODIsMHg4YywweDU1LDB4ZWMsMHg2MCwweDAyLDB4ODAsMHgxMiwweDA1LDB4NjQsMHhlNSwweDY0LDB4NzAsMHgwMiwKKzB4MDUsMHg2MywweDA1LDB4NTcsMHhlNSwweDU3LDB4NzAsMHgwMiwweDA1LDB4NTYsMHg4MCwweGQyLDB4ZTUsMHg1NCwweDU0LDB4MGYsCisweDI0LDB4OTcsMHhmOCwweGM2LDB4NTQsMHhmZSwweGY2LDB4ZTUsMHg1NCwweDU0LDB4MGYsMHg3ZiwweDAwLDB4ZmUsMHg3YywweDEyLAorMHgxMiwweDMxLDB4OWEsMHhlNSwweDU1LDB4MTQsMHg3MCwweDA5LDB4N2QsMHgwMCwweDdjLDB4MDksMHgxMiwweDI0LDB4YjEsMHg4MCwKKzB4MDcsMHhhZCwweDU3LDB4N2MsMHgwMCwweDEyLDB4MjQsMHhiMSwweDEyLDB4MzEsMHgwOCwweDIyLDB4MTIsMHgzMCwweDg1LDB4OTAsCisweGZmLDB4ZmMsMHhlMCwweDQ0LDB4MDIsMHhmMCwweDkwLDB4ZmYsMHgwMCwweGUwLDB4MzAsMHhlNywweDEzLDB4OTAsMHhmZiwweDgzLAorMHhlMCwweDQ0LDB4ODAsMHhmMCwweDQzLDB4NjcsMHg4MCwweDkwLDB4ZmYsMHhmYywweGUwLDB4NDQsMHgwMSwweGYwLDB4ODAsMHgxMSwKKzB4OTAsMHhmZiwweDgyLDB4ZTAsMHg0NCwweDA4LDB4ZjAsMHg1MywweDY3LDB4N2YsMHg5MCwweGZmLDB4ZmMsMHhlMCwweDU0LDB4ZmUsCisweGYwLDB4OTAsMHhmZiwweDgxLDB4ZTAsMHg0NCwweDgwLDB4ZjAsMHgxMiwweDI1LDB4NjQsMHg5MCwweGZmLDB4ZmUsMHhlMCwweDQ0LAorMHgwNSwweGYwLDB4OTAsMHhmZiwweGZjLDB4ZTAsMHg1NCwweGZkLDB4ZjAsMHgxMiwweDMxLDB4MDgsMHgyMiwweDEyLDB4MzAsMHg4NSwKKzB4N2MsMHgwMSwweDEyLDB4MzIsMHg0OCwweDc4LDB4YTcsMHhlNiwweDQ0LDB4MDIsMHhmNiwweDc0LDB4ZmUsMHhmYywweDA0LDB4ZmQsCisweDEyLDB4MWMsMHhmZSwweDkwLDB4ZmYsMHg2YSwweGUwLDB4MzAsMHhlNywweDAyLDB4ODAsMHhmNywweGU0LDB4ZjUsMHg0ZSwweDc1LAorMHg0ZCwweDEwLDB4YWMsMHg0ZSwweGFkLDB4NGQsMHhlNSwweDRlLDB4MTUsMHg0ZSwweDcwLDB4MDIsMHgxNSwweDRkLDB4ZWMsMHg0ZCwKKzB4NjAsMHgwMiwweDgwLDB4ZWUsMHg0MywweDg3LDB4MDEsMHgxMiwweDMxLDB4MDgsMHgyMiwweDEyLDB4MzAsMHg4NSwweDdjLDB4MDIsCisweDEyLDB4MzEsMHgxNCwweDc4LDB4YTcsMHhlNiwweDU0LDB4ZmQsMHhmNiwweDEyLDB4MzEsMHgwOCwweDIyLDB4MTIsMHgzMCwweDg1LAorMHg3OCwweGE3LDB4ZTYsMHgzMCwweGUwLDB4MmMsMHg3OCwweGE3LDB4ZTYsMHgzMCwweGUxLDB4MjYsMHg3OCwweGE3LDB4ZTYsMHhmYywKKzB4ZjUsMHg4MywweDE4LDB4ZTYsMHg0NCwweGYwLDB4ZmQsMHgxMiwweDFjLDB4OTMsMHg5MCwweGZmLDB4ZmMsMHhlMCwweDQ0LDB4MjAsCisweGYwLDB4N2MsMHgwMiwweDEyLDB4MzIsMHg0OCwweDc4LDB4YTcsMHhlNiwweDU0LDB4ZmQsMHhmNiwweDc0LDB4MWEsMHg5MCwweGZmLAorMHhmZSwweGYwLDB4NzgsMHhhNywweGU2LDB4ZmMsMHhmNSwweDgzLDB4MTgsMHhlNiwweDQ0LDB4ZjEsMHhmZCwweDEyLDB4MWMsMHg5MywKKzB4MTIsMHgzMSwweDA4LDB4MjIsMHg3NSwweDY3LDB4MDAsMHg3NSwweDY4LDB4MDAsMHhlNCwweGY1LDB4NjYsMHhmNSwweDY1LDB4ZTQsCisweGY1LDB4NjksMHg3NSwweDZhLDB4NDksMHg3NCwweDg0LDB4OTAsMHhmZiwweDgyLDB4ZjAsMHg3NCwweDg0LDB4OTAsMHhmZiwweDgwLAorMHhmMCwweDc0LDB4ODAsMHg5MCwweGZmLDB4NjgsMHhmMCwweDc0LDB4ODAsMHg5MCwweGZmLDB4NmEsMHhmMCwweGFkLDB4NDYsMHhhZiwKKzB4NDUsMHg3ZSwweDAwLDB4ZWUsMHgyNCwweGZjLDB4NTAsMHgwMywweDAyLDB4MjEsMHg2YSwweGU0LDB4ZWUsMHg3NSwweGYwLDB4MDcsCisweGE0LDB4MjQsMHgzZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmMsMHhmNSwweDgzLDB4ZTAsMHhmZiwweGU0LDB4ZWYsMHg1NCwweDgwLAorMHhmZCwweGU0LDB4ZWYsMHg1NCwweDBmLDB4MTQsMHhmZiwweGVkLDB4NjAsMHgzOCwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwKKzB4MjQsMHg0OCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4NzQsMHg5MCwweGYwLDB4ZTQsMHhlZiwweDc1LDB4ZjAsCisweDA4LDB4YTQsMHgyNCwweDRhLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHg3NCwweDgwLDB4ZjAsMHhlNCwweGVmLAorMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NGUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweDc0LDB4ODAsMHhmMCwKKzB4ODAsMHgzNCwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4MDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsCisweDgzLDB4NzQsMHg5MCwweGYwLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwYSwweGY1LDB4ODIsMHhlNCwweDM0LAorMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwZSwweGY1LDB4ODIsMHhlNCwKKzB4MzQsMHhmZiwweGY1LDB4ODMsMHhlNCwweGYwLDB4MGUsMHgwMiwweDIwLDB4ZDMsMHg4ZCwweDQ2LDB4OGUsMHg0NCwweDhmLDB4NDUsCisweDc0LDB4N2YsMHg5MCwweGZmLDB4ZmQsMHhmMCwweDc0LDB4OTAsMHg5MCwweGZmLDB4ZmMsMHhmMCwweDkwLDB4ZmMsMHgxOSwweGUwLAorMHgzMCwweGU2LDB4MDcsMHg5MCwweGZmLDB4ZmMsMHhlMCwweDQ0LDB4MDQsMHhmMCwweDIyLDB4OTAsMHhmYywweDBkLDB4ZTAsMHgxNCwKKzB4NzAsMHgwNCwweDkwLDB4ZmMsMHgwYywweGUwLDB4NzAsMHgzOSwweDkwLDB4ZmMsMHgwMCwweDc5LDB4MDYsMHg3YSwweDM1LDB4N2IsCisweDEyLDB4NzgsMHgwMSwweDEyLDB4MDMsMHhmNSwweDdmLDB4MDAsMHhlZiwweDMzLDB4NDAsMHgxNSwweGVmLDB4OTAsMHgzNSwweDRkLAorMHg5MywweGZjLDB4ZWYsMHgyNCwweDgwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywweGY1LDB4ODMsMHhlYywweGYwLDB4MGYsMHg4MCwKKzB4ZTcsMHg4ZiwweDU5LDB4OTAsMHhmYywweDJiLDB4NzksMHgxOCwweDdhLDB4MzUsMHg3YiwweDM1LDB4NzgsMHgwMSwweDEyLDB4MDMsCisweGY1LDB4ZTQsMHg5MCwweGZmLDB4ZmYsMHhmMCwweDc0LDB4NTEsMHg5MCwweGZmLDB4ZmEsMHhmMCwweDc0LDB4MDQsMHg5MCwweGZmLAorMHhmYiwweGYwLDB4NzQsMHg1MywweDkwLDB4ZmYsMHhmOCwweGYwLDB4NzQsMHg1MSwweDkwLDB4ZmYsMHhmOSwweGYwLDB4NzQsMHg1NSwKKzB4OTAsMHhmZiwweGY3LDB4ZjAsMHg3NCwweDkzLDB4OTAsMHhmZiwweGY2LDB4ZjAsMHg3NCwweDMyLDB4OTAsMHhmZiwweGY1LDB4ZjAsCisweDc1LDB4NjQsMHgzZCwweDc1LDB4NjMsMHhmZCwweDc1LDB4NjIsMHgwMSwweGU0LDB4OTAsMHhmZiwweDgzLDB4ZjAsMHg3NCwweDgwLAorMHg5MCwweGZmLDB4ODEsMHhmMCwweDc1LDB4NTgsMHgwNCwweGU1LDB4NTgsMHg3NSwweGYwLDB4MDcsMHhhNCwweDI0LDB4M2YsMHhmNSwKKzB4ODIsMHhlNCwweDM0LDB4ZmMsMHhmNSwweDgzLDB4ZTAsMHg3OCwweDg5LDB4ZjYsMHhmYywweDU0LDB4MGYsMHgxNCwweGZjLDB4NzgsCisweDg5LDB4ZWMsMHhmNiwweGU1LDB4NTgsMHg3NSwweGYwLDB4MDcsMHhhNCwweDI0LDB4NDEsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZjLAorMHhmNSwweDgzLDB4ZTAsMHg3OCwweDhjLDB4NzYsMHhmOCwweDA4LDB4NzYsMHgwMCwweGZjLDB4NzgsMHg4OSwweGU2LDB4NzUsMHhmMCwKKzB4MDgsMHhhNCwweDI0LDB4NDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg3OCwweDg5LDB4ZTYsCisweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0ZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZWMsMHhmMCwweDc4LAorMHg4YywweGU2LDB4ZmYsMHgwOCwweGU2LDB4N2UsMHgwMywweGNmLDB4YzMsMHgxMywweGNmLDB4MTMsMHhkZSwweGY5LDB4ZmUsMHg3OCwKKzB4ODksMHhlNiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0OSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZWUsCisweGYwLDB4NzgsMHg4OSwweGU2LDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDRhLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LAorMHg4MywweDc0LDB4ODAsMHhmMCwweDc4LDB4OGEsMHhlYywweGY2LDB4N2QsMHgwMCwweDc4LDB4OGQsMHhlNiwweDJjLDB4ZjYsMHgxOCwKKzB4ZTYsMHgzZCwweGY2LDB4NzgsMHg4YywweGU2LDB4ZmQsMHgwOCwweGU2LDB4N2MsMHgwMywweGNkLDB4YzMsMHgxMywweGNkLDB4MTMsCisweGRjLDB4ZjksMHhmYywweDc4LDB4ODksMHhlNiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0ZCwweGY1LDB4ODIsMHhlNCwweDM0LAorMHhmZiwweGY1LDB4ODMsMHhlYywweGYwLDB4NzgsMHg4OSwweGU2LDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDRlLDB4ZjUsMHg4MiwKKzB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg3OCwweDhjLDB4ZTYsMHhmZCwweDA4LDB4ZTYsMHhmYywweDc4LDB4ODksCisweGU2LDB4ZmYsMHg3ZSwweDAwLDB4ZWUsMHgyNCwweGZjLDB4NTAsMHgwMywweDAyLDB4MjQsMHg2YiwweGU0LDB4ZWUsMHg3NSwweGYwLAorMHgwNywweGE0LDB4MjQsMHgzZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmMsMHhmNSwweDgzLDB4ZTAsMHhmZiwweGU0LDB4ZWYsMHg1NCwKKzB4ODAsMHhmYSwweGU0LDB4ZWYsMHg1NCwweDBmLDB4MTQsMHhmZiwweGU0LDB4ZWUsMHg3NSwweGYwLDB4MDcsMHhhNCwweDI0LDB4NDEsCisweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmMsMHhmNSwweDgzLDB4ZTAsMHg3OCwweDhhLDB4ZjYsMHhlZSwweDc1LDB4ZjAsMHg4MCwweGE0LAorMHgyNCwweDA4LDB4ZjgsMHhlNSwweGYwLDB4MzQsMHhmOCwweGY5LDB4ZTgsMHhmYywweGU5LDB4ZmQsMHg4YSwweDU5LDB4ZWEsMHg3MCwKKzB4MDMsMHgwMiwweDIzLDB4ZDgsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDQ4LDB4ZjUsMHg4MiwweGU0LDB4MzQsCisweGZmLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHg3OCwweDhhLDB4ZTYsMHhmYSwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LAorMHg0ZiwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZWEsMHhmMCwweGVkLDB4ZmIsMHhlYywweDdhLDB4MDMsMHhjYiwKKzB4YzMsMHgxMywweGNiLDB4MTMsMHhkYSwweGY5LDB4ZmEsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDQ5LDB4ZjUsCisweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGVhLDB4ZjAsMHg3OCwweDhhLDB4ZTYsMHg3YiwweDAwLDB4ZmEsMHhlYywweDJhLAorMHhmYywweGVkLDB4M2IsMHhmZCwweGZiLDB4ZWMsMHg3YSwweDAzLDB4Y2IsMHhjMywweDEzLDB4Y2IsMHgxMywweGRhLDB4ZjksMHhmYSwKKzB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0ZCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZWEsCisweGYwLDB4ZTQsMHhlZiwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0YSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLAorMHg3NCwweDgwLDB4ZjAsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDRlLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwKKzB4ZjUsMHg4MywweDc0LDB4ODAsMHhmMCwweDAyLDB4MjQsMHg2NywweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4MDgsCisweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZTQsMHhmMCwweDc4LDB4OGEsMHhlNiwweGZhLDB4ZTQsMHhlZiwweDc1LAorMHhmMCwweDA4LDB4YTQsMHgyNCwweDBmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwweGY1LDB4ODMsMHhlYSwweGYwLDB4ZWQsMHhmYiwKKzB4ZWMsMHg3YSwweDAzLDB4Y2IsMHhjMywweDEzLDB4Y2IsMHgxMywweGRhLDB4ZjksMHhmYSwweGU0LDB4ZWYsMHg3NSwweGYwLDB4MDgsCisweGE0LDB4MjQsMHgwOSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZWEsMHhmMCwweDc4LDB4OGEsMHhlNiwweDdiLAorMHgwMCwweGZhLDB4ZWMsMHgyYSwweGZjLDB4ZWQsMHgzYiwweGZkLDB4ZmIsMHhlYywweDdhLDB4MDMsMHhjYiwweGMzLDB4MTMsMHhjYiwKKzB4MTMsMHhkYSwweGY5LDB4ZmEsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDBkLDB4ZjUsMHg4MiwweGU0LDB4MzQsCisweGZmLDB4ZjUsMHg4MywweGVhLDB4ZjAsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDBhLDB4ZjUsMHg4MiwweGU0LAorMHgzNCwweGZmLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHhlNCwweGVmLDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDBlLDB4ZjUsMHg4MiwKKzB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGU0LDB4ZjAsMHgwZSwweDAyLDB4MjIsMHhmNCwweDhlLDB4NTgsMHg3OCwweDhjLDB4ZWQsCisweGY2LDB4MDgsMHhlYywweGY2LDB4NzgsMHg4OSwweGVmLDB4ZjYsMHgxMiwweDIwLDB4YTQsMHgyMiwweDhjLDB4MjYsMHhlYywweDMwLAorMHhlNywweDE4LDB4ZTUsMHgyNiwweDU0LDB4MGYsMHgxNCwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0OCwweGY1LDB4ODIsMHhlNCwKKzB4MzQsMHhmZiwweGY1LDB4ODMsMHhlMCwweDU0LDB4ZGYsMHhmMCwweDgwLDB4MTYsMHhlNSwweDI2LDB4NTQsMHgwZiwweDE0LDB4NzUsCisweGYwLDB4MDgsMHhhNCwweDI0LDB4MDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGUwLDB4NTQsMHhkZiwweGYwLAorMHgyMiwweGVjLDB4OTAsMHhmZCwweDNmLDB4ZjAsMHg4YywweDI0LDB4ZWQsMHgyNCwweDAzLDB4ZjUsMHgyNSwweDdkLDB4MDAsMHhkMywKKzB4OTUsMHg2YywweGVkLDB4OTUsMHg2YiwweDQwLDB4MDMsMHg4NSwweDZjLDB4MjUsMHhlNSwweDI1LDB4MjQsMHhiNywweDUwLDB4MDksCisweDc1LDB4MjUsMHgwMywweDc0LDB4MDIsMHg5MCwweGZkLDB4M2YsMHhmMCwweGFjLDB4MjUsMHgxMiwweDJmLDB4YzMsMHgyMiwweGU0LAorMHhmNSwweDY2LDB4ZjUsMHg2NSwweDEyLDB4MjQsMHhlOCwweDIyLDB4OTAsMHhmZCwweDNkLDB4ZTAsMHg2NSwweDZkLDB4NjAsMHgwZSwKKzB4NzQsMHgwNCwweDkwLDB4ZmQsMHgzZiwweGYwLDB4ZTQsMHhmNSwweDY1LDB4NzUsMHg2NiwweDAzLDB4ODAsMHg0NiwweDdkLDB4NmQsCisweGU0LDB4ZmUsMHhmZiwweDc5LDB4M2QsMHg3YSwweGZkLDB4N2IsMHgwMSwweDc0LDB4MDUsMHg3OCwweDAwLDB4MTIsMHgwMywweDNmLAorMHhlNSwweDY2LDB4MjQsMHgwMywweGY1LDB4NjYsMHhlNSwweDY1LDB4MzQsMHgwMCwweGY1LDB4NjUsMHhlNSwweDY2LDB4ZDMsMHg5NSwKKzB4NmMsMHhlNSwweDY1LDB4OTUsMHg2YiwweDQwLDB4MDYsMHg4NSwweDZjLDB4NjYsMHg4NSwweDZiLDB4NjUsMHhkMywweGU1LDB4NjYsCisweDk0LDB4NDgsMHhlNSwweDY1LDB4OTQsMHgwMCwweDQwLDB4MGMsMHg3NCwweDAyLDB4OTAsMHhmZCwweDNmLDB4ZjAsMHhlNCwweGY1LAorMHg2NSwweDc1LDB4NjYsMHgwMywweGFjLDB4NjYsMHgxMiwweDJmLDB4YzMsMHgyMiwweGVjLDB4OTAsMHhmZCwweDNmLDB4ZjAsMHhlNCwKKzB4ZjUsMHg2NiwweGY1LDB4NjUsMHg4YywweDMyLDB4ZWMsMHg2MCwweDA1LDB4MTIsMHgyZiwweGI0LDB4ODAsMHgwNSwweDdjLDB4MDAsCisweDEyLDB4MmYsMHhjMywweDIyLDB4OTAsMHhmZiwweDA0LDB4ZTAsMHhmNSwweDRhLDB4OTAsMHhmZiwweDA2LDB4ZTAsMHhmZCwweGEzLAorMHhlMCwweGVkLDB4N2QsMHgwMCwweGZjLDB4N2QsMHgwMCwweGZjLDB4OTAsMHhmZiwweDA2LDB4ZTAsMHhmZiwweGEzLDB4ZTAsMHg3ZSwKKzB4MDAsMHhmZiwweGU0LDB4ZmUsMHhlYywweDRlLDB4ZmMsMHhlZCwweDRmLDB4ZmQsMHhjMywweGVjLDB4OTQsMHg0OCwweGVkLDB4OTQsCisweDAwLDB4NTAsMHgyMiwweDkwLDB4ZmYsMHgwNiwweGUwLDB4ZmQsMHhhMywweGUwLDB4ZWQsMHg3ZCwweDAwLDB4ZmMsMHg3ZCwweDAwLAorMHhmYywweDkwLDB4ZmYsMHgwNiwweGUwLDB4ZmYsMHhhMywweGUwLDB4N2UsMHgwMCwweGZmLDB4ZTQsMHhmZSwweGVjLDB4NGUsMHhmYywKKzB4ZWQsMHg0ZiwweGZkLDB4ODAsMHgwNCwweGU0LDB4ZmQsMHg3YywweDQ4LDB4OGMsMHg2YywweDhkLDB4NmIsMHg5MCwweGZmLDB4MDIsCisweGUwLDB4ZmQsMHhhMywweGUwLDB4ZWQsMHg3ZCwweDAwLDB4ZmMsMHg3ZCwweDAwLDB4ZmMsMHg5MCwweGZmLDB4MDIsMHhlMCwweGZmLAorMHhhMywweGUwLDB4N2UsMHgwMCwweGZmLDB4ZTQsMHhmZSwweGVjLDB4NGUsMHhmNSwweDRjLDB4ZWQsMHg0ZiwweGY1LDB4NGIsMHg3NSwKKzB4NjQsMHgzZCwweDc1LDB4NjMsMHhmZCwweDc1LDB4NjIsMHgwMSwweDdkLDB4M2QsMHg3ZSwweGZkLDB4N2YsMHgwMSwweDc5LDB4NmQsCisweGU0LDB4ZmEsMHhmYiwweDc0LDB4MDUsMHg3OCwweDAwLDB4MTIsMHgwMywweDNmLDB4NzUsMHg0OSwweDAwLDB4ZTUsMHg0OSwweDI0LAorMHhmZSwweDQwLDB4MTksMHhhZCwweDY0LDB4YWUsMHg2MywweGFmLDB4NjIsMHhlNCwweDEyLDB4MDMsMHgwZiwweDA1LDB4NDksMHgwZCwKKzB4ZWQsMHg3MCwweDAxLDB4MGUsMHg4ZCwweDY0LDB4OGUsMHg2MywweDhmLDB4NjIsMHg4MCwweGUxLDB4NzUsMHg2NCwweDNkLDB4NzUsCisweDYzLDB4ZmQsMHg3NSwweDYyLDB4MDEsMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LDB4NjAsMHhiNCwweDAwLDB4MDIsMHg4MCwweDA2LAorMHhkMywweDUwLDB4MDMsMHgwMiwweDJjLDB4MTIsMHhlNSwweDRhLDB4NTQsMHgwZiwweGY1LDB4NDksMHhlNSwweDRhLDB4NTQsMHg4MCwKKzB4YTIsMHhlMCwweDkyLDB4MDIsMHg5MCwweGZmLDB4MDEsMHhlMCwweDEyLDB4MDEsMHg4MSwweDAwLDB4MGIsMHgyYywweDBkLDB4MjYsCisweDY3LDB4MjcsMHg4NSwweDJjLDB4MGQsMHgyOCwweDkxLDB4MmMsMHgwZCwweDI5LDB4NzQsMHgyOSwweGE4LDB4MmIsMHgwZiwweDJiLAorMHgxMiwweDJiLDB4NTIsMHgyYiwweGI2LDB4MmIsMHhlNCwweGU1LDB4NjcsMHgzMCwweGU3LDB4MGUsMHhlNSwweDRjLDB4NDUsMHg0YiwKKzB4NzAsMHgwOCwweGU1LDB4NmMsMHg2NCwweDAyLDB4NDUsMHg2YiwweDYwLDB4MDMsMHgwMiwweDJjLDB4MGYsMHg5MCwweGZmLDB4MDAsCisweGUwLDB4NTQsMHgxZiwweGI0LDB4MDAsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MjksMHhlNSwweDRhLDB4NjAsMHgwMywweDAyLAorMHgyNywweDgyLDB4YWQsMHg2NCwweGFlLDB4NjMsMHhhZiwweDYyLDB4NzQsMHgwMSwweDEyLDB4MDMsMHgwZiwweDc4LDB4YTcsMHhlNiwKKzB4MzAsMHhlMCwweDBiLDB4YWQsMHg2NCwweGFlLDB4NjMsMHhhZiwweDYyLDB4NzQsMHgwMiwweDEyLDB4MDMsMHgwZiwweDdjLDB4MDIsCisweDEyLDB4MmYsMHhjMywweDIyLDB4YjQsMHgwMSwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgxYiwweGU1LDB4NjcsMHgyMCwweGUxLAorMHgwNywweGU1LDB4NGEsMHg2MCwweDAzLDB4MDIsMHgyNywweDgyLDB4ZTUsMHg0YSwweDI0LDB4ZmUsMHg1MCwweDAzLDB4MDIsMHgyNywKKzB4ODIsMHg3YywweDAyLDB4MTIsMHgyZiwweGMzLDB4MjIsMHhiNCwweDAyLDB4MDIsMHg4MCwweDA2LDB4ZDMsMHg1MCwweDAzLDB4MDIsCisweDI3LDB4ODAsMHhlNSwweDY3LDB4MjAsMHhlMSwweDBkLDB4ZTUsMHg0YSwweDYwLDB4MDksMHhlNSwweDRhLDB4NjQsMHg4MCwweDYwLAorMHgwMywweDAyLDB4MjcsMHg4MiwweGFjLDB4NGEsMHgxMiwweDMwLDB4NGEsMHg0MCwweDAzLDB4MDIsMHgyNywweDgyLDB4ZTUsMHg0OSwKKzB4NzAsMHgyNSwweDMwLDB4MDIsMHgxMSwweDkwLDB4ZmYsMHg4MCwweGUwLDB4NTQsMHgwOCwweGFkLDB4NjQsMHhhZSwweDYzLDB4YWYsCisweDYyLDB4MTIsMHgwMywweDBmLDB4ODAsMHgwZiwweDkwLDB4ZmYsMHg4MiwweGUwLDB4NTQsMHgwOCwweGFkLDB4NjQsMHhhZSwweDYzLAorMHhhZiwweDYyLDB4MTIsMHgwMywweDBmLDB4ODAsMHgzZCwweDE1LDB4NDksMHgzMCwweDAyLDB4MWQsMHhlNSwweDQ5LDB4NzUsMHhmMCwKKzB4MDgsMHhhNCwweDI0LDB4NDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGUwLDB4NTQsMHgwOCwweGFkLDB4NjQsCisweGFlLDB4NjMsMHhhZiwweDYyLDB4MTIsMHgwMywweDBmLDB4ODAsMHgxYiwweGU1LDB4NDksMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LAorMHgwOCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZTAsMHg1NCwweDA4LDB4YWQsMHg2NCwweGFlLDB4NjMsMHhhZiwKKzB4NjIsMHgxMiwweDAzLDB4MGYsMHhhZCwweDY0LDB4YWUsMHg2MywweGFmLDB4NjIsMHgxMiwweDAxLDB4ZTYsMHg2MCwweDBiLDB4YWQsCisweDY0LDB4YWUsMHg2MywweGFmLDB4NjIsMHg3NCwweDAxLDB4MTIsMHgwMywweDBmLDB4N2MsMHgwMiwweDEyLDB4MmYsMHhjMywweDIyLAorMHg4MCwweDAwLDB4MDIsMHgyYywweDBmLDB4ZTUsMHg2NywweDIwLDB4ZTcsMHgwNiwweGU1LDB4NmMsMHg0NSwweDZiLDB4NjAsMHgwMywKKzB4MDIsMHgyYywweDBmLDB4OTAsMHhmZiwweDAwLDB4ZTAsMHg1NCwweDFmLDB4YjQsMHgwMCwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsCisweDFhLDB4ZTUsMHg0YywweDE0LDB4NDUsMHg0YiwweDcwLDB4MDQsMHhlNSwweDRhLDB4NjAsMHgwMywweDAyLDB4MjgsMHg4ZSwweDc4LAorMHhhNywweGU2LDB4NTQsMHhmZSwweGY2LDB4N2MsMHgwMCwweDEyLDB4MmYsMHhjMywweDIyLDB4YjQsMHgwMSwweDAyLDB4ODAsMHgwMywKKzB4ZDMsMHg0MCwweDJhLDB4ZTUsMHg2NywweDIwLDB4ZTEsMHgwOCwweGU1LDB4NjcsMHgyMCwweGUwLDB4MDMsMHgwMiwweDI4LDB4OGUsCisweGU1LDB4NjcsMHgzMCwweGUwLDB4MDQsMHhlNSwweDRhLDB4NzAsMHgwYiwweGU1LDB4NjcsMHgzMCwweGUxLDB4MDksMHhlNSwweDRhLAorMHgyNCwweGZlLDB4NTAsMHgwMywweDAyLDB4MjgsMHg4ZSwweDdjLDB4MDAsMHgxMiwweDJmLDB4YzMsMHgyMiwweGI0LDB4MDIsMHgwMiwKKzB4ODAsMHgwNiwweGQzLDB4NTAsMHgwMywweDAyLDB4MjgsMHg4YywweGU1LDB4NGMsMHg0NSwweDRiLDB4NjAsMHgwMywweDAyLDB4MjgsCisweDhlLDB4YWMsMHg0YSwweDEyLDB4MzAsMHg0YSwweDQwLDB4MDMsMHgwMiwweDI4LDB4OGUsMHhlNSwweDY3LDB4MjAsMHhlMSwweDA3LAorMHhlNSwweDY3LDB4MjAsMHhlMCwweDAyLDB4ODAsMHg3NywweGU1LDB4NjcsMHgzMCwweGUwLDB4MDYsMHhlNSwweDQ5LDB4NjAsMHgwMiwKKzB4ODAsMHg2YywweGU1LDB4NDksMHg3MCwweDBmLDB4OTAsMHhmZiwweDgyLDB4ZTAsMHg1NCwweGY3LDB4ZjAsMHg5MCwweGZmLDB4ODAsCisweGUwLDB4NTQsMHhmNywweGYwLDB4MjIsMHhlNSwweDQ5LDB4YjQsMHgwMSwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwOSwweDdkLAorMHgwMSwweDdjLDB4MDMsMHgxMiwweDBmLDB4MGIsMHg4MCwweDExLDB4YjQsMHgwMiwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgwOSwKKzB4N2QsMHgwMSwweDdjLDB4MDQsMHgxMiwweDBmLDB4MGIsMHg4MCwweDAwLDB4MTUsMHg0OSwweDMwLDB4MDIsMHgxNSwweGU1LDB4NDksCisweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHg0OCwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmYsMHhmNSwweDgzLDB4ZTAsMHg1NCwweGY3LAorMHhmMCwweDgwLDB4MTMsMHhlNSwweDQ5LDB4NzUsMHhmMCwweDA4LDB4YTQsMHgyNCwweDA4LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZiwKKzB4ZjUsMHg4MywweGUwLDB4NTQsMHhmNywweGYwLDB4N2MsMHgwMCwweDEyLDB4MmYsMHhjMywweDIyLDB4ODAsMHgwMCwweDAyLDB4MmMsCisweDBmLDB4ZTUsMHg2NywweDIwLDB4ZTcsMHgwNiwweGU1LDB4NmMsMHg0NSwweDZiLDB4NjAsMHgwMywweDAyLDB4MmMsMHgwZiwweDkwLAorMHhmZiwweDAwLDB4ZTAsMHg1NCwweDFmLDB4YjQsMHgwMCwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgxYSwweGU1LDB4NGMsMHgxNCwKKzB4NDUsMHg0YiwweDcwLDB4MDQsMHhlNSwweDRhLDB4NjAsMHgwMywweDAyLDB4MjksMHg3MSwweDc4LDB4YTcsMHhlNiwweDQ0LDB4MDEsCisweGY2LDB4N2MsMHgwMCwweDEyLDB4MmYsMHhjMywweDIyLDB4YjQsMHgwMSwweDAyLDB4ODAsMHgwMywweGQzLDB4NDAsMHgyOSwweGU1LAorMHg2NywweDIwLDB4ZTEsMHgwOCwweGU1LDB4NjcsMHgyMCwweGUwLDB4MDMsMHgwMiwweDI5LDB4NzEsMHhlNSwweDY3LDB4MzAsMHhlMCwKKzB4MDQsMHhlNSwweDQ5LDB4NzAsMHgwYiwweGU1LDB4NjcsMHgzMCwweGUxLDB4MDgsMHhlNSwweDQ5LDB4MjQsMHhmZSwweDUwLDB4MDIsCisweDgwLDB4N2YsMHg3YywweDAwLDB4MTIsMHgyZiwweGMzLDB4MjIsMHhiNCwweDAyLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDZmLAorMHhlNSwweDRjLDB4NDUsMHg0YiwweDYwLDB4MDIsMHg4MCwweDY5LDB4YWMsMHg0YSwweDEyLDB4MzAsMHg0YSwweDQwLDB4MDIsMHg4MCwKKzB4NjAsMHhlNSwweDY3LDB4MjAsMHhlMSwweDA3LDB4ZTUsMHg2NywweDIwLDB4ZTAsMHgwMiwweDgwLDB4NTQsMHhlNSwweDQ5LDB4NzAsCisweDE0LDB4MzAsMHgwMiwweDA5LDB4OTAsMHhmZiwweDgwLDB4ZTAsMHg0NCwweDA4LDB4ZjAsMHg4MCwweDA3LDB4OTAsMHhmZiwweDgyLAorMHhlMCwweDQ0LDB4MDgsMHhmMCwweDIyLDB4ZTUsMHg2NywweDMwLDB4ZTEsMHgzMywweDE1LDB4NDksMHgzMCwweDAyLDB4MTUsMHhlNSwKKzB4NDksMHg3NSwweGYwLDB4MDgsMHhhNCwweDI0LDB4NDgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZmLDB4ZjUsMHg4MywweGUwLDB4NDQsCisweDA4LDB4ZjAsMHg4MCwweDEzLDB4ZTUsMHg0OSwweDc1LDB4ZjAsMHgwOCwweGE0LDB4MjQsMHgwOCwweGY1LDB4ODIsMHhlNCwweDM0LAorMHhmZiwweGY1LDB4ODMsMHhlMCwweDQ0LDB4MDgsMHhmMCwweDdjLDB4MDAsMHgxMiwweDJmLDB4YzMsMHgyMiwweDgwLDB4MDIsMHg4MCwKKzB4MDAsMHgwMiwweDJjLDB4MGYsMHhlNSwweDY3LDB4MjAsMHhlNywweDEyLDB4ZTUsMHg2YywweDQ1LDB4NmIsMHg3MCwweDBjLDB4ZTUsCisweDRhLDB4NzAsMHgwOCwweDkwLDB4ZmYsMHgwMCwweGUwLDB4NTQsMHgxZiwweDYwLDB4MDMsMHgwMiwweDJjLDB4MGYsMHhlNSwweDRjLAorMHg5MCwweGZmLDB4ZmYsMHhmMCwweDkwLDB4ZmYsMHhmZiwweGUwLDB4NjAsMHgwNSwweDQzLDB4NjcsMHgwMSwweDgwLDB4MDMsMHg1MywKKzB4NjcsMHhmZSwweDdjLDB4MDAsMHgxMiwweDJmLDB4YzMsMHgyMiwweGU1LDB4NjcsMHgzMCwweGU3LDB4MGUsMHhlNSwweDZjLDB4NDUsCisweDZiLDB4NjAsMHgwOCwweDkwLDB4ZmYsMHgwMCwweGUwLDB4NTQsMHgxZiwweDYwLDB4MDMsMHgwMiwweDJjLDB4MGYsMHhhZCwweDRiLAorMHhlNSwweDRjLDB4ZWQsMHg3ZCwweDAwLDB4ZmMsMHg3ZCwweDAwLDB4ZmMsMHhiZCwweDAwLDB4MDIsMHg4MCwweDAzLDB4MDIsMHgyYiwKKzB4MGEsMHhiNCwweDAxLDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDMyLDB4ZTUsMHg0YSwweDcwLDB4MDUsMHhlNSwweDRjLDB4ZmMsCisweDYwLDB4MDMsMHgwMiwweDJiLDB4MGMsMHg3NSwweDY0LDB4MDAsMHg3NSwweDYzLDB4ZmMsMHg3NSwweDYyLDB4MDEsMHhkMywweGU1LAorMHg2YywweDk0LDB4MTIsMHhlNSwweDZiLDB4OTQsMHgwMCwweDQwLDB4MDYsMHhlNCwweGZkLDB4N2MsMHgxMiwweDgwLDB4MDQsMHhhYywKKzB4NmMsMHhhZCwweDZiLDB4OGMsMHg2YSwweDhkLDB4NjksMHgxMiwweDJmLDB4ZDgsMHgyMiwweGI0LDB4MDIsMHgwMiwweDgwLDB4MDMsCisweGQzLDB4NDAsMHg1OSwweGU1LDB4NGEsMHg2MCwweDAzLDB4MDIsMHgyYiwweDBjLDB4ZTUsMHg0YywweGZjLDB4NzAsMHgyNywweDc1LAorMHg2NCwweDEyLDB4NzUsMHg2MywweGZjLDB4NzUsMHg2MiwweDAxLDB4ZDMsMHhlNSwweDZjLDB4OTQsMHgxOSwweGU1LDB4NmIsMHg5NCwKKzB4MDAsMHg0MCwweDA2LDB4ZTQsMHhmZCwweDdjLDB4MTksMHg4MCwweDA0LDB4YWMsMHg2YywweGFkLDB4NmIsMHg4YywweDZhLDB4OGQsCisweDY5LDB4MTIsMHgyZiwweGQ4LDB4ODAsMHgyNSwweDc1LDB4NjQsMHgyYiwweDc1LDB4NjMsMHhmYywweDc1LDB4NjIsMHgwMSwweGQzLAorMHhlNSwweDZjLDB4OTQsMHgzNSwweGU1LDB4NmIsMHg5NCwweDAwLDB4NDAsMHgwNiwweGU0LDB4ZmQsMHg3YywweDM1LDB4ODAsMHgwNCwKKzB4YWMsMHg2YywweGFkLDB4NmIsMHg4YywweDZhLDB4OGQsMHg2OSwweDEyLDB4MmYsMHhkOCwweDIyLDB4YjQsMHgwMywweDAyLDB4ODAsCisweDA2LDB4ZDMsMHg1MCwweDAzLDB4MDIsMHgyYiwweDBhLDB4ZTUsMHg0YywweGY1LDB4NDksMHg3MCwweDBmLDB4OTAsMHhmZiwweDA0LAorMHhlMCwweGZkLDB4YTMsMHhlMCwweDRkLDB4NjAsMHgwMywweDAyLDB4MmIsMHgwYywweDgwLDB4MTgsMHg5MCwweGZjLDB4ODIsMHhlMCwKKzB4ZmQsMHhhMywweGUwLDB4ZmMsMHg5MCwweGZmLDB4MDUsMHhlMCwweDZjLDB4NzAsMHgwNywweDkwLDB4ZmYsMHgwNCwweGUwLDB4NmQsCisweDYwLDB4MDIsMHg4MCwweDY4LDB4ZTQsMHhmNSwweDZhLDB4ZjUsMHg2OSwweDdmLDB4MDAsMHhlNSwweDQ5LDB4MTQsMHhjNSwweDQ5LAorMHg2MCwweDBmLDB4ZWYsMHgyNCwweDgwLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywweGY1LDB4ODMsMHhlMCwweDJmLDB4ZmYsMHg4MCwKKzB4ZWEsMHg4ZiwweDRhLDB4ZTUsMHg0YSwweDI0LDB4ODAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZjLDB4ZjUsMHg4MywweGUwLDB4N2QsCisweDAwLDB4ZDMsMHg5NSwweDZjLDB4ZWQsMHg5NSwweDZiLDB4NDAsMHgwNiwweGFjLDB4NmMsMHhhZCwweDZiLDB4ODAsMHgwZiwweGU1LAorMHg0YSwweDI0LDB4ODAsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZjLDB4ZjUsMHg4MywweGUwLDB4N2QsMHgwMCwweGZjLDB4OGMsMHg2YSwKKzB4OGQsMHg2OSwweGU1LDB4NGEsMHgyNCwweDgwLDB4ZmMsMHhlNCwweDM0LDB4ZmMsMHhmZCwweGZlLDB4ZWMsMHhmZCwweDdmLDB4MDEsCisweDhkLDB4NjQsMHg4ZSwweDYzLDB4OGYsMHg2MiwweDEyLDB4MmYsMHhkOCwweDIyLDB4ODAsMHgwMCwweDAyLDB4MmMsMHgwZiwweDAyLAorMHgyYywweDBmLDB4ZTUsMHg2NywweDMwLDB4ZTcsMHgxOSwweGU1LDB4NmMsMHgxNCwweDQ1LDB4NmIsMHg3MCwweDEyLDB4ZTUsMHg0YSwKKzB4NzAsMHgwZSwweGU1LDB4NGMsMHg0NSwweDRiLDB4NzAsMHgwOCwweDkwLDB4ZmYsMHgwMCwweGUwLDB4NTQsMHgxZiwweDYwLDB4MDMsCisweDAyLDB4MmMsMHgwZiwweGU1LDB4NjcsMHgyMCwweGUwLDB4MDgsMHhlNSwweDY3LDB4MjAsMHhlMSwweDAzLDB4MDIsMHgyYywweDBmLAorMHg3NSwweDY0LDB4NjgsMHhlNCwweGY1LDB4NjMsMHhmNSwweDYyLDB4ZTQsMHhmNSwweDY5LDB4MDQsMHhmNSwweDZhLDB4MTIsMHgyZiwKKzB4ZDgsMHgyMiwweGU1LDB4NjcsMHgyMCwweGU3LDB4MjcsMHhlNSwweDZjLDB4NDUsMHg2YiwweDcwLDB4MjEsMHhlNSwweDRhLDB4NzAsCisweDFkLDB4ZTUsMHg0YywweDY0LDB4MDIsMHg0NSwweDRiLDB4NjAsMHgwZCwweGU1LDB4NGMsMHgxNCwweDQ1LDB4NGIsMHg2MCwweDA2LAorMHhlNSwweDRjLDB4NDUsMHg0YiwweDcwLDB4MDgsMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LDB4MWYsMHg2MCwweDAzLDB4MDIsMHgyYywKKzB4MGYsMHhlNSwweDY3LDB4MjAsMHhlMCwweDA4LDB4ZTUsMHg2NywweDIwLDB4ZTEsMHgwMywweDAyLDB4MmMsMHgwZiwweDg1LDB4NGMsCisweDY4LDB4ZTUsMHg2OCwweDcwLDB4MDgsMHg0MywweDY3LDB4MDEsMHg1MywweDY3LDB4ZmQsMHg4MCwweDEzLDB4ZTUsMHg2OCwweDY0LAorMHgwMiwweDYwLDB4MDcsMHhlNSwweDY4LDB4MTQsMHg2MCwweDAyLDB4ODAsMHg2NSwweDUzLDB4NjcsMHhmZSwweDQzLDB4NjcsMHgwMiwKKzB4N2MsMHgwMCwweDEyLDB4MmYsMHhjMywweDIyLDB4ZTUsMHg2NywweDMwLDB4ZTcsMHgxYSwweGU1LDB4NmMsMHgxNCwweDQ1LDB4NmIsCisweDcwLDB4MTMsMHhlNSwweDRhLDB4NzAsMHgwZiwweGU1LDB4NGMsMHg0NSwweDRiLDB4NzAsMHgwOSwweDkwLDB4ZmYsMHgwMCwweGUwLAorMHg1NCwweDFmLDB4MTQsMHg2MCwweDAyLDB4ODAsMHgzOCwweGU1LDB4NjcsMHgyMCwweGUxLDB4MDIsMHg4MCwweDMxLDB4N2MsMHgwMSwKKzB4MTIsMHgyZiwweGMzLDB4MjIsMHhlNSwweDY3LDB4MjAsMHhlNywweDE1LDB4ZTUsMHg2YywweDQ1LDB4NmIsMHg3MCwweDBmLDB4ZTUsCisweDRjLDB4NDUsMHg0YiwweDcwLDB4MDksMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LDB4MWYsMHgxNCwweDYwLDB4MDIsMHg4MCwweDBmLAorMHhlNSwweDY3LDB4MjAsMHhlMSwweDAyLDB4ODAsMHgwOCwweDdjLDB4MDAsMHgxMiwweDJmLDB4YzMsMHgyMiwweDgwLDB4MDAsMHgwMiwKKzB4MmUsMHhjYSwweGI0LDB4NDAsMHgwMiwweDgwLDB4MDYsMHhkMywweDUwLDB4MDMsMHgwMiwweDJlLDB4YzAsMHg5MCwweGZmLDB4MDEsCisweGUwLDB4OTAsMHhmZCwweDNkLDB4ZjAsMHhlNSwweDRhLDB4OTAsMHhmZCwweDNlLDB4ZjAsMHhlNCwweDkwLDB4ZmQsMHgzZiwweGYwLAorMHhlNSwweDY0LDB4MjQsMHgwMywweGY1LDB4NjQsMHhlNSwweDYzLDB4MzQsMHgwMCwweGY1LDB4NjMsMHhhZCwweDRiLDB4ZTUsMHg0YywKKzB4ODUsMHg2NCwweDgyLDB4ODUsMHg2MywweDgzLDB4Y2QsMHhmMCwweGEzLDB4Y2QsMHhmMCwweDkwLDB4ZmYsMHgwMSwweGUwLDB4MTIsCisweDAxLDB4YjcsMHgyYywweDdkLDB4MDEsMHgyYywweGEzLDB4MDIsMHgyYywweGNkLDB4MDMsMHgyYywweGY3LDB4MDQsMHgyZCwweDQ1LAorMHgwNSwweDJkLDB4ODIsMHgwNiwweDJkLDB4YTgsMHgwNywweDJkLDB4Y2UsMHgwOCwweDJkLDB4ZjQsMHgwOSwweDJlLDB4MWEsMHgwYiwKKzB4MmUsMHg0MCwweDBjLDB4MmUsMHg0ZiwweDgwLDB4MmUsMHg0ZiwweDgxLDB4MDAsMHgwMCwweDJlLDB4YWQsMHhlNSwweDY3LDB4MjAsCisweGU3LDB4MDYsMHg3YywweDA1LDB4MTIsMHgyNSwweDRhLDB4MjIsMHg3ZCwweGI3LDB4N2UsMHgzNCwweDdmLDB4MDIsMHg3OSwweDQwLAorMHg3YSwweGZkLDB4N2IsMHgwMSwweDc0LDB4MDgsMHg3OCwweDAwLDB4MTIsMHgwMywweDNmLDB4N2QsMHgwOCwweDdjLDB4MDAsMHgxMiwKKzB4MjQsMHhiMSwweDIyLDB4ZTUsMHg2NywweDIwLDB4ZTcsMHgwNiwweDdjLDB4MDUsMHgxMiwweDI1LDB4NGEsMHgyMiwweGU1LDB4NGEsCisweGI0LDB4MDMsMHgwMCwweDQwLDB4MTAsMHhiNCwweDA1LDB4MDAsMHg1MCwweDBiLDB4ZTUsMHg0YSwweDdmLDB4MDAsMHhmZSwweDdjLAorMHgxMCwweDEyLDB4MzEsMHg5YSwweDIyLDB4N2QsMHgwMCwweDdjLDB4MDcsMHgxMiwweDI0LDB4YjEsMHgyMiwweGU1LDB4NjcsMHgyMCwKKzB4ZTcsMHgwNiwweDdjLDB4MDUsMHgxMiwweDI1LDB4NGEsMHgyMiwweGU1LDB4NGEsMHhiNCwweDAzLDB4MDAsMHg0MCwweDEwLDB4YjQsCisweDA1LDB4MDAsMHg1MCwweDBiLDB4ZTUsMHg0YSwweDdmLDB4MDAsMHhmZSwweDdjLDB4MTEsMHgxMiwweDMxLDB4OWEsMHgyMiwweDdkLAorMHgwMCwweDdjLDB4MDcsMHgxMiwweDI0LDB4YjEsMHgyMiwweGU1LDB4NjcsMHgyMCwweGU3LDB4MDYsMHg3YywweDA1LDB4MTIsMHgyNSwKKzB4NGEsMHgyMiwweGU1LDB4NGEsMHhiNCwweDA1LDB4MDIsMHg4MCwweDAzLDB4ZDMsMHg0MCwweDBhLDB4ZTQsMHhmZiwweDA0LDB4ZmUsCisweDdjLDB4MGEsMHgxMiwweDMxLDB4OWEsMHgyMiwweGI0LDB4MDEsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MGEsMHhlNCwweGZmLAorMHgwNCwweGZlLDB4N2MsMHgwOCwweDEyLDB4MzEsMHg5YSwweDIyLDB4YjQsMHgwMywweDAwLDB4NDAsMHgxMCwweGI0LDB4MDUsMHgwMCwKKzB4NTAsMHgwYiwweGU1LDB4NGEsMHg3ZiwweDAwLDB4ZmUsMHg3YywweDEzLDB4MTIsMHgzMSwweDlhLDB4MjIsMHg3ZCwweDAwLDB4N2MsCisweDA3LDB4MTIsMHgyNCwweGIxLDB4MjIsMHhlNSwweDY3LDB4MjAsMHhlNywweDM0LDB4ZDMsMHhlNSwweDZjLDB4OTQsMHg0OCwweGU1LAorMHg2YiwweDk0LDB4MDAsMHg1MCwweDA2LDB4ZTUsMHg2YywweDQ1LDB4NmIsMHg3MCwweDA2LDB4N2MsMHgwMiwweDEyLDB4MjUsMHg0YSwKKzB4MjIsMHhlNSwweDRhLDB4YjQsMHgwMSwweDAzLDB4YjMsMHg0MCwweDBiLDB4YzMsMHhiNCwweDAzLDB4MDAsMHg0MCwweDA5LDB4YjQsCisweDA2LDB4MDAsMHg1MCwweDA0LDB4MTIsMHgzMCwweDcwLDB4MjIsMHg3YywweDA3LDB4MTIsMHgyNSwweDRhLDB4MjIsMHgxMiwweDI0LAorMHhlOCwweDIyLDB4ZTUsMHg2NywweDIwLDB4ZTcsMHgxZCwweGU1LDB4NGEsMHhiNCwweDAzLDB4MDAsMHg0MCwweDEwLDB4YjQsMHgwNSwKKzB4MDAsMHg1MCwweDBiLDB4ZTUsMHg0YSwweDdmLDB4MDAsMHhmZSwweDdjLDB4MTYsMHgxMiwweDMxLDB4OWEsMHgyMiwweDdjLDB4MDcsCisweDEyLDB4MjUsMHg0YSwweDIyLDB4MTIsMHgyNCwweGU4LDB4MjIsMHhlNSwweDY3LDB4MjAsMHhlNywweDFkLDB4ZTUsMHg0YSwweGI0LAorMHgwMywweDAwLDB4NDAsMHgxMCwweGI0LDB4MDUsMHgwMCwweDUwLDB4MGIsMHhlNSwweDRhLDB4N2YsMHgwMCwweGZlLDB4N2MsMHgxOSwKKzB4MTIsMHgzMSwweDlhLDB4MjIsMHg3YywweDA3LDB4MTIsMHgyNSwweDRhLDB4MjIsMHgxMiwweDI0LDB4ZTgsMHgyMiwweGU1LDB4NjcsCisweDIwLDB4ZTcsMHgxZCwweGU1LDB4NGEsMHhiNCwweDAzLDB4MDAsMHg0MCwweDEwLDB4YjQsMHgwNSwweDAwLDB4NTAsMHgwYiwweGU1LAorMHg0YSwweDdmLDB4MDAsMHhmZSwweDdjLDB4MTcsMHgxMiwweDMxLDB4OWEsMHgyMiwweDdjLDB4MDcsMHgxMiwweDI1LDB4NGEsMHgyMiwKKzB4MTIsMHgyNCwweGU4LDB4MjIsMHhlNSwweDY3LDB4MjAsMHhlNywweDFkLDB4ZTUsMHg0YSwweGI0LDB4MDMsMHgwMCwweDQwLDB4MTAsCisweGI0LDB4MDUsMHgwMCwweDUwLDB4MGIsMHhlNSwweDRhLDB4N2YsMHgwMCwweGZlLDB4N2MsMHgxOCwweDEyLDB4MzEsMHg5YSwweDIyLAorMHg3YywweDA3LDB4MTIsMHgyNSwweDRhLDB4MjIsMHgxMiwweDI0LDB4ZTgsMHgyMiwweGU1LDB4NjcsMHgyMCwweGU3LDB4MWQsMHhlNSwKKzB4NGEsMHhiNCwweDAzLDB4MDAsMHg0MCwweDEwLDB4YjQsMHgwNSwweDAwLDB4NTAsMHgwYiwweGU1LDB4NGEsMHg3ZiwweDAwLDB4ZmUsCisweDdjLDB4MTUsMHgxMiwweDMxLDB4OWEsMHgyMiwweDdjLDB4MDcsMHgxMiwweDI1LDB4NGEsMHgyMiwweDEyLDB4MjQsMHhlOCwweDIyLAorMHhlNSwweDY3LDB4MjAsMHhlNywweDA2LDB4N2MsMHgwNywweDEyLDB4MjUsMHg0YSwweDIyLDB4MTIsMHgyNCwweGU4LDB4MjIsMHhlNSwKKzB4NjcsMHgzMCwweGU3LDB4MjAsMHg5MCwweGZmLDB4MDAsMHhlMCwweDU0LDB4MWYsMHg3MCwweDEwLDB4OTAsMHhmZiwweDAxLDB4ZTAsCisweGI0LDB4ODAsMHgwNSwweDEyLDB4MjQsMHhkZiwweDgwLDB4MDMsMHgxMiwweDI0LDB4ZTgsMHgyMiwweDdkLDB4MDAsMHg3YywweDA1LAorMHgxMiwweDI0LDB4YjEsMHgyMiwweDkwLDB4ZmYsMHgwMCwweGUwLDB4NTQsMHgxZiwweDYwLDB4MDYsMHg3YywweDA1LDB4MTIsMHgyNSwKKzB4NGEsMHgyMiwweGQzLDB4ZTUsMHg2YywweDk0LDB4NDgsMHhlNSwweDZiLDB4OTQsMHgwMCwweDUwLDB4MGIsMHhjMywweGU1LDB4NmMsCisweDk0LDB4MDcsMHhlNSwweDZiLDB4OTQsMHgwMCwweDUwLDB4MDYsMHg3YywweDAzLDB4MTIsMHgyNSwweDRhLDB4MjIsMHhlNSwweDRhLAorMHhiNCwweDA1LDB4MDQsMHgxMiwweDMwLDB4NzAsMHgyMiwweDdjLDB4MDcsMHgxMiwweDI1LDB4NGEsMHgyMiwweGU1LDB4NjcsMHgzMCwKKzB4ZTcsMHgwOCwweDdkLDB4MDAsMHg3YywweDA1LDB4MTIsMHgyNCwweGIxLDB4MjIsMHg3YywweDA1LDB4MTIsMHgyNSwweDRhLDB4MjIsCisweGI0LDB4MjAsMHgwMiwweDgwLDB4MDMsMHhkMywweDQwLDB4MDAsMHg4MCwweDAwLDB4MTIsMHgyZiwweDllLDB4MjIsMHg3NSwweDQzLAorMHgwMCwweDkwLDB4ZmYsMHg4MywweGUwLDB4NTQsMHgwZiwweGQzLDB4OTUsMHg0MywweDQwLDB4MjQsMHhlNSwweDQzLDB4MjQsMHhmMCwKKzB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZSwweGY1LDB4ODMsMHhlMCwweGFkLDB4NjQsMHhhZSwweDYzLDB4YWYsMHg2MiwweDEyLDB4MDMsCisweDBmLDB4MDUsMHg0MywweDBkLDB4ZWQsMHg3MCwweDAxLDB4MGUsMHg4ZCwweDY0LDB4OGUsMHg2MywweDhmLDB4NjIsMHg4MCwweGQxLAorMHhlNSwweDQzLDB4N2QsMHgwMCwweGZjLDB4YzMsMHhlNSwweDZhLDB4OWMsMHhmNSwweDZhLDB4ZTUsMHg2OSwweDlkLDB4ZjUsMHg2OSwKKzB4ZTUsMHg2YSwweDQ1LDB4NjksMHg2MCwweDA2LDB4ZTQsMHg5MCwweGZmLDB4ODMsMHhmMCwweDIyLDB4OTAsMHhmZiwweDgyLDB4ZTAsCisweDQ0LDB4MDgsMHhmMCwweGU0LDB4ZjUsMHg2OSwweDc1LDB4NmEsMHg0OSwweDkwLDB4ZmQsMHgzZCwweGUwLDB4YjQsMHgwNSwweDAyLAorMHg4MCwweDAzLDB4ZDMsMHg0MCwweDQwLDB4OTAsMHhmZCwweDNlLDB4ZTAsMHhmNSwweDQzLDB4YjQsMHgwNSwweDAyLDB4ODAsMHgwMywKKzB4ZDMsMHg0MCwweDBhLDB4ZTQsMHhmZiwweDA0LDB4ZmUsMHg3YywweDBiLDB4MTIsMHgzMSwweDlhLDB4MjIsMHhiNCwweDAxLDB4MDIsCisweDgwLDB4MDMsMHhkMywweDQwLDB4MGEsMHhlNCwweGZmLDB4MDQsMHhmZSwweDdjLDB4MDksMHgxMiwweDMxLDB4OWEsMHgyMiwweGI0LAorMHgwMywweDAwLDB4NDAsMHgxMCwweGI0LDB4MDUsMHgwMCwweDUwLDB4MGIsMHhlNSwweDQzLDB4N2YsMHgwMCwweGZlLDB4N2MsMHgxNCwKKzB4MTIsMHgzMSwweDlhLDB4MjIsMHgyMiwweGI0LDB4ODAsMHgwMCwweDQwLDB4MjMsMHhiNCwweDgyLDB4MDAsMHg1MCwweDFlLDB4N2MsCisweDNkLDB4N2QsMHhmZCwweDEyLDB4MTcsMHhkNSwweDdkLDB4MDAsMHg4YywweDY2LDB4OGQsMHg2NSwweDkwLDB4ZmQsMHgzZiwweGUwLAorMHg2MCwweDA1LDB4MTIsMHgyZiwweDllLDB4ODAsMHgwNSwweDdjLDB4MDAsMHgxMiwweDJmLDB4YzMsMHgyMiwweDIyLDB4OTAsMHhmZiwKKzB4ODMsMHhlMCwweDU0LDB4N2YsMHhmMCwweDkwLDB4ZmYsMHg4MiwweGUwLDB4NDQsMHgwOCwweGYwLDB4OTAsMHhmZiwweDgwLDB4ZTAsCisweDQ0LDB4MDgsMHhmMCwweDIyLDB4OTAsMHhmZiwweDgyLDB4ZTAsMHg0NCwweDA4LDB4ZjAsMHg5MCwweGZmLDB4ODAsMHhlMCwweDQ0LAorMHgwOCwweGYwLDB4MjIsMHg4YywweDIzLDB4N2QsMHgwMCwweDhjLDB4NmEsMHg4ZCwweDY5LDB4NzUsMHg2NCwweDNkLDB4NzUsMHg2MywKKzB4ZmQsMHg3NSwweDYyLDB4MDEsMHgxMiwweDJmLDB4ZDgsMHgyMiwweDkwLDB4ZmYsMHg4MywweGUwLDB4NTQsMHg3ZiwweGYwLDB4ZTUsCisweDZhLDB4NjQsMHg0OSwweDQ1LDB4NjksMHg3MCwweDAxLDB4MjIsMHhjMywweGU1LDB4NmEsMHg5NCwweDA4LDB4ZTUsMHg2OSwweDk0LAorMHgwMCwweDQwLDB4MTUsMHg3NSwweDIxLDB4MDgsMHhlNSwweDIxLDB4N2QsMHgwMCwweGZjLDB4YzMsMHhlNSwweDZhLDB4OWMsMHhmNSwKKzB4NmEsMHhlNSwweDY5LDB4OWQsMHhmNSwweDY5LDB4ODAsMHgwOSwweDg1LDB4NmEsMHgyMSwweGU0LDB4ZjUsMHg2OSwweDc1LDB4NmEsCisweDQ5LDB4NzUsMHgyMiwweDAwLDB4ZTUsMHgyMiwweGMzLDB4OTUsMHgyMSwweDUwLDB4MjYsMHhhZCwweDY0LDB4YWUsMHg2MywweGFmLAorMHg2MiwweDEyLDB4MDEsMHhlNiwweGZjLDB4ZTUsMHgyMiwweDI0LDB4ZjgsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZlLDB4ZjUsMHg4MywKKzB4ZWMsMHhmMCwweDA1LDB4MjIsMHgwZCwweGVkLDB4NzAsMHgwMSwweDBlLDB4OGQsMHg2NCwweDhlLDB4NjMsMHg4ZiwweDYyLDB4ODAsCisweGQzLDB4ZTUsMHgyMSwweDU0LDB4N2YsMHg5MCwweGZmLDB4ODEsMHhmMCwweDIyLDB4OGMsMHg0OCwweDdmLDB4MDAsMHhlZiwweDI0LAorMHhmYiwweDQwLDB4MTksMHhlNCwweGVmLDB4NzUsMHhmMCwweDA3LDB4YTQsMHgyNCwweDNmLDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmYywKKzB4ZjUsMHg4MywweGUwLDB4NjUsMHg0OCwweDcwLDB4MDIsMHhkMywweDIyLDB4MGYsMHg4MCwweGUyLDB4OGYsMHg0NywweGMzLDB4MjIsCisweDg1LDB4NmMsMHg2YSwweDg1LDB4NmIsMHg2OSwweDkwLDB4ZmYsMHg4MiwweGUwLDB4NTQsMHhmNywweGYwLDB4OTAsMHhmZiwweDgzLAorMHhlMCwweDU0LDB4N2YsMHhmMCwweDIyLDB4YzAsMHgwMCwweGMwLDB4MDEsMHhjMCwweDAyLDB4YzAsMHgwNiwweGMwLDB4MDcsMHhlNSwKKzB4NzIsMHgyNCwweDA4LDB4ZjgsMHg4NiwweDA2LDB4NTMsMHgwNiwweDdmLDB4N2MsMHhmZiwweDEyLDB4MzAsMHhmYSwweDdjLDB4MDAsCisweDdkLDB4MDAsMHhlNSwweDc1LDB4NjAsMHg0NiwweGZmLDB4OTAsMHhmZSwweDlkLDB4ZTAsMHg1NCwweDdmLDB4NmUsMHg3MCwweDBmLAorMHhjMCwweDgzLDB4YzAsMHg4MiwweGEzLDB4ZTAsMHhmZCwweGEzLDB4ZTAsMHhmYywweGEzLDB4MTUsMHg3NSwweDgwLDB4MDcsMHhhMywKKzB4YTMsMHhhMywweGRmLDB4ZTYsMHg4MCwweDI2LDB4ZGYsMHgwNiwweGQwLDB4ODIsMHhkMCwweDgzLDB4ODAsMHgxZSwweGUwLDB4ZjgsCisweGEzLDB4ZTAsMHhmOSwweGEzLDB4ZTAsMHhmYSwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZTgsMHhmMCwweGEzLDB4ZTksMHhmMCwweGEzLAorMHhlYSwweGYwLDB4YTMsMHhjMCwweDgzLDB4YzAsMHg4MiwweGEzLDB4YTMsMHhhMywweDgwLDB4ZGEsMHgxMiwweDMxLDB4OTMsMHhkMCwKKzB4MDcsMHhkMCwweDA2LDB4ZDAsMHgwMiwweGQwLDB4MDEsMHhkMCwweDAwLDB4MjIsMHg4NSwweGE4LDB4NzQsMHg3NSwweGE4LDB4ODgsCisweGVjLDB4NzAsMHgwMiwweDdjLDB4M2YsMHg4YywweDczLDB4MjIsMHhlNSwweDcyLDB4MjQsMHgwOCwweGY4LDB4NzYsMHgwMCwweDEyLAorMHgzMSwweGU3LDB4ODAsMHhmYiwweGMwLDB4MDAsMHhjMCwweDAxLDB4YzAsMHgwMiwweGMwLDB4MDYsMHhjMCwweDA3LDB4YWUsMHgwNCwKKzB4N2MsMHhmZiwweDEyLDB4MzAsMHhmYSwweGU1LDB4NzUsMHg2MCwweDQyLDB4ZmYsMHg5MCwweGZlLDB4OWQsMHhlMCwweDU0LDB4N2YsCisweDZlLDB4NzAsMHgwYiwweGMwLDB4ODMsMHhjMCwweDgyLDB4YTMsMHhhMywweGEzLDB4MTUsMHg3NSwweDgwLDB4MDcsMHhhMywweGEzLAorMHhhMywweGRmLDB4ZWEsMHg4MCwweDI2LDB4ZGYsMHgwNiwweGQwLDB4ODIsMHhkMCwweDgzLDB4ODAsMHhkOCwweGUwLDB4ZjgsMHhhMywKKzB4ZTAsMHhmOSwweGEzLDB4ZTAsMHhmYSwweGQwLDB4ODIsMHhkMCwweDgzLDB4ZTgsMHhmMCwweGEzLDB4ZTksMHhmMCwweGEzLDB4ZWEsCisweGYwLDB4YTMsMHhjMCwweDgzLDB4YzAsMHg4MiwweGEzLDB4YTMsMHhhMywweDgwLDB4ZGEsMHg3OCwweDA4LDB4MDgsMHg3OSwweDE4LAorMHgwOSwweDdjLDB4MDEsMHhlNiwweDU0LDB4N2YsMHg2ZSwweDcwLDB4MDYsMHg3NiwweDAwLDB4NzcsMHgwMCwweDgwLDB4MDYsMHgwOCwKKzB4MDksMHgwYywweGJjLDB4MDgsMHhlZSwweDEyLDB4MzEsMHg5MywweGQwLDB4MDcsMHhkMCwweDA2LDB4ZDAsMHgwMiwweGQwLDB4MDEsCisweGQwLDB4MDAsMHgyMiwweDc1LDB4NzMsMHgwMCwweDg1LDB4NzQsMHhhOCwweDIyLDB4YzAsMHhmMCwweGMwLDB4ODIsMHhjMCwweDgzLAorMHhjMywweGU1LDB4NzUsMHgyNCwweGU4LDB4NTAsMHgwNSwweDEyLDB4MzEsMHhlNywweDgwLDB4ZjQsMHhlYywweDYwLDB4MzEsMHg5MCwKKzB4MzQsMHhiNiwweGU0LDB4OTMsMHhjMywweDljLDB4NDAsMHgyOCwweGMwLDB4MDQsMHg3YywweGZmLDB4MTIsMHgzMCwweGZhLDB4ZDAsCisweDA0LDB4NDMsMHgwNCwweDgwLDB4ZTUsMHg3NSwweDc1LDB4ZjAsMHgwMywweGE0LDB4MjQsMHg5ZCwweGY1LDB4ODIsMHhlNCwweDM0LAorMHhmZSwweGY1LDB4ODMsMHhlYywweGYwLDB4ZWYsMHhhMywweGYwLDB4ZWUsMHhhMywweGYwLDB4MDUsMHg3NSwweDEyLDB4MzEsMHg5MywKKzB4ZDAsMHg4MywweGQwLDB4ODIsMHhkMCwweGYwLDB4MjIsMHhjMCwweDA0LDB4N2MsMHgyMCwweGQyLDB4OGMsMHhkMiwweDhkLDB4ZDUsCisweDA0LDB4ZmQsMHhkMCwweDA0LDB4MjIsMHg3NSwweGE4LDB4MDAsMHg3NSwweDg4LDB4MDAsMHg3NSwweGI4LDB4MDAsMHg3NSwweGYwLAorMHgwMCwweDc1LDB4ZDAsMHgwMCwweGU0LDB4ZjgsMHg5MCwweDAwLDB4MDAsMHhmNiwweDA4LDB4YjgsMHgwMCwweGZiLDB4MDIsMHgwMCwKKzB4MDAsMHhjMywweGVkLDB4OTQsMHgwMiwweDUwLDB4MDQsMHg3ZCwweDAzLDB4N2MsMHhlOCwweGVjLDB4ZjQsMHhmYywweGVkLDB4ZjQsCisweGZkLDB4MGMsMHhiYywweDAwLDB4MDEsMHgwZCwweDhjLDB4NzksMHg4ZCwweDc4LDB4MjIsMHhjMywweGVjLDB4OTQsMHhiYywweGVkLAorMHg5NCwweDAyLDB4NTAsMHgwNCwweDdkLDB4MDcsMHg3YywweGQwLDB4ZWMsMHhmNCwweGZjLDB4ZWQsMHhmNCwweGZkLDB4MGMsMHhiYywKKzB4MDAsMHgwMSwweDBkLDB4OGMsMHg3NywweDhkLDB4NzYsMHgyMiwweGVjLDB4NzAsMHgwMSwweDIyLDB4YzAsMHgwMCwweGU1LDB4NzIsCisweDI0LDB4MTgsMHhmOCwweGE2LDB4MDQsMHhlNSwweDcyLDB4MjQsMHgwOCwweGY4LDB4YzYsMHg1NCwweDdmLDB4ZjYsMHhlNiwweDMwLAorMHhlNywweDAzLDB4ZDAsMHgwMCwweDIyLDB4MTIsMHgzMSwweGU3LDB4ODAsMHhmNCwweGMyLDB4OGMsMHg4NSwweDc2LDB4OGMsMHg4NSwKKzB4NzcsMHg4YSwweGQyLDB4OGMsMHhjMCwweGUwLDB4YzAsMHhkMCwweGMwLDB4ZjAsMHhjMCwweDgyLDB4YzAsMHg4MywweGMwLDB4MDAsCisweGMwLDB4MDEsMHhjMCwweDAyLDB4YzAsMHgwMywweGMwLDB4MDQsMHhjMCwweDA1LDB4YzAsMHgwNiwweGMwLDB4MDcsMHgxMiwweDFiLAorMHgyOCwweGU1LDB4NzIsMHgyNCwweDA4LDB4ZjgsMHhlNiwweDYwLDB4MjQsMHhlNSwweDcyLDB4MjQsMHgxMCwweGY4LDB4YTYsMHg4MSwKKzB4ZTUsMHg3MiwweDc1LDB4ZjAsMHgyMSwweGE0LDB4MjQsMHg5NSwweGY1LDB4ODIsMHhlNCwweDM0LDB4ZmQsMHhmNSwweDgzLDB4NzgsCisweGE4LDB4ZTUsMHg4MSwweDA0LDB4YzMsMHg5OCwweGY5LDB4ZTYsMHhmMCwweDA4LDB4YTMsMHhkOSwweGZhLDB4NzQsMHgwOCwweDI1LAorMHg3MiwweGY4LDB4MDUsMHg3MiwweDA4LDB4ZTYsMHg1NCwweDgwLDB4NzAsMHgwYywweGU1LDB4NzIsMHhiNCwweDA3LDB4ZjMsMHg3OCwKKzB4MDgsMHg3NSwweDcyLDB4MDAsMHg4MCwweGVmLDB4ZTUsMHg3MiwweDI0LDB4MTAsMHhmOCwweDg2LDB4ODEsMHhlNSwweDcyLDB4NzUsCisweGYwLDB4MjEsMHhhNCwweDI0LDB4OTUsMHhmNSwweDgyLDB4ZTQsMHgzNCwweGZkLDB4ZjUsMHg4MywweDc4LDB4YTgsMHhlNSwweDgxLAorMHgwNCwweGMzLDB4OTgsMHhmOSwweGUwLDB4ZjYsMHgwOCwweGEzLDB4ZDksMHhmYSwweGQwLDB4MDcsMHhkMCwweDA2LDB4ZDAsMHgwNSwKKzB4ZDAsMHgwNCwweGQwLDB4MDMsMHhkMCwweDAyLDB4ZDAsMHgwMSwweGQwLDB4MDAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZjAsCisweGQwLDB4ZDAsMHhkMCwweGUwLDB4MzIsMHhjMCwweGUwLDB4YzAsMHhkMCwweGMwLDB4MDAsMHhjMCwweDAxLDB4YzAsMHgwMiwweGMyLAorMHg4ZSwweDg1LDB4NzgsMHg4ZCwweDg1LDB4NzksMHg4YiwweGQyLDB4OGUsMHg3OCwweDE5LDB4NzksMHgwOSwweDdhLDB4MDcsMHhlNywKKzB4NzAsMHgwNCwweGE2LDB4MDAsMHg4MCwweDBiLDB4ZTYsMHg2MCwweDA4LDB4MTYsMHhlNiwweDcwLDB4MDQsMHhlNywweDQ0LDB4ODAsCisweGY3LDB4MDgsMHgwOSwweGRhLDB4ZWEsMHhlNSwweDczLDB4NjAsMHgxMywweDE0LDB4ZjUsMHg3MywweDcwLDB4MGUsMHhlNSwweDcyLAorMHgyNCwweDA4LDB4ZjgsMHg3NiwweDAwLDB4MTIsMHgzMSwweDkzLDB4ZDIsMHg4YywweGQyLDB4OGQsMHhkMCwweDAyLDB4ZDAsMHgwMSwKKzB4ZDAsMHgwMCwweGQwLDB4ZDAsMHhkMCwweGUwLDB4MzIsMHg3NSwweDgxLDB4YTcsMHg3NSwweDkwLDB4MDAsMHg3NSwweDc5LDB4MzAsCisweDc1LDB4NzgsMHhmOCwweDc1LDB4NzcsMHg2MCwweDc1LDB4NzYsMHhmMCwweDEyLDB4MDUsMHgzYywweDEyLDB4MzQsMHgwZiwweDEyLAorMHgxNywweDhiLDB4MTIsMHgzNCwweDM5LDB4MTIsMHgzMSwweGY1LDB4ODAsMHhlMywweDIyLDB4YzAsMHgwMCwweDdjLDB4MDEsMHhlYywKKzB4MjQsMHgwOCwweGY4LDB4ZTYsMHg2MCwweDA5LDB4MGMsMHhiYywweDA4LDB4ZjUsMHgxMiwweDMxLDB4ZTcsMHg4MCwweGVlLDB4ZDAsCisweDAwLDB4MjIsMHhjMCwweGYwLDB4YzAsMHg4MiwweGMwLDB4ODMsMHhjMCwweDAwLDB4YzAsMHgwNiwweGMwLDB4MDcsMHhlZCwweDI0LAorMHgxMCwweGY4LDB4NzYsMHhiNiwweGVkLDB4NzUsMHhmMCwweDIxLDB4YTQsMHgyNCwweDk1LDB4ZjUsMHg4MiwweGU0LDB4MzQsMHhmZCwKKzB4ZjUsMHg4MywweGMwLDB4ODIsMHhjMCwweDgzLDB4YTMsMHhhMywweGU0LDB4NzgsMHgwZCwweGYwLDB4YTMsMHhkOCwweGZjLDB4ZWMsCisweDU0LDB4N2YsMHg3NSwweGYwLDB4MDIsMHhhNCwweDI0LDB4ODIsMHhmNSwweDgyLDB4ZTUsMHhmMCwweDM0LDB4MzQsMHhmNSwweDgzLAorMHhlNCwweDkzLDB4ZmUsMHg3NCwweDAxLDB4OTMsMHhmNSwweDgyLDB4OGUsMHg4MywweGU0LDB4OTMsMHhmZSwweDc0LDB4MDEsMHg5MywKKzB4ZmYsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGVmLDB4ZjAsMHhhMywweGVlLDB4ZjAsMHhlZCwweDI0LDB4MDgsMHhmOCwweGVjLDB4NDQsCisweDgwLDB4ZjYsMHhkMCwweDA3LDB4ZDAsMHgwNiwweGQwLDB4MDAsMHhkMCwweDgzLDB4ZDAsMHg4MiwweGQwLDB4ZjAsMHgyMiwweDc1LAorMHg3MiwweDAwLDB4NzUsMHg3NSwweDAwLDB4N2EsMHgwOCwweDc5LDB4MTgsMHg3OCwweDA4LDB4NzYsMHgwMCwweDc3LDB4MDAsMHgwOCwKKzB4MDksMHhkYSwweGY4LDB4ZTQsMHg3OCwweDA4LDB4NzQsMHg4MCwweDQ0LDB4N2YsMHhmNiwweDc0LDB4MDEsMHg0NCwweDEwLDB4ZjUsCisweDg5LDB4NzUsMHhiOCwweDA4LDB4ZDIsMHhhYiwweGQyLDB4YTksMHgyMiwweDc1LDB4ODEsMHhhNywweGQyLDB4OGUsMHhkMiwweDhjLAorMHhkMiwweGFmLDB4ZTUsMHg3NSwweDYwLDB4MzIsMHhmZiwweDkwLDB4ZmUsMHg5ZCwweGUwLDB4NTQsMHg4MCwweDYwLDB4MjQsMHg3OCwKKzB4MDgsMHg3OSwweDA4LDB4ZTAsMHg1NCwweDdmLDB4ZmEsMHg3YiwweDAwLDB4ZTYsMHg1NCwweDdmLDB4YjUsMHgwMiwweDAyLDB4N2IsCisweGZmLDB4MDgsMHhkOSwweGY1LDB4ZWIsMHg3MCwweDBjLDB4ZWEsMHhmMCwweDEyLDB4MzMsMHg4YiwweGFkLDB4MDQsMHhhYywweDAyLAorMHgxMiwweDMzLDB4YTIsMHhhMywweGEzLDB4YTMsMHhkZiwweGQyLDB4MTIsMHgzMSwweGU3LDB4ODAsMHhjNSwweDdjLDB4MDEsMHg3ZCwKKzB4MDAsMHgyMiwweDA0LDB4ZjUsMHgwNCwweGU5LDB4MDQsMHhlZCwweDA0LDB4ZTEsMHgwNCwweGRkLDB4MDQsMHhkOSwweDA0LDB4ZTUsCisweDA0LDB4ZjEsMHgwNCwweDlkLDB4MDQsMHhhMSwweDA0LDB4Y2QsMHgwNCwweGQxLDB4MDQsMHg5OSwweDA0LDB4OTksMHgwNCwweDk5LAorMHgwNCwweGQ1LDB4MDQsMHhiNSwweDA0LDB4YWQsMHgwNCwweGIxLDB4MDQsMHhhOSwweDA0LDB4YzEsMHgwNCwweGJkLDB4MDQsMHhiOSwKKzB4MDQsMHhjNSwweDA0LDB4YzksMHgwNCwweGE1LDB4MTksMHgwMSwweDAzLDB4MDAsMHgyMiwweDAwLDB4NDgsMHgwMiwweDAwLDB4MjQsCisweDBmLDB4MTgsMHgwYSwweDEwLDB4NjQsMHgwZCwweDY4LDB4MGMsMHgwNSwweDA2LDB4MDIsMHgwMywweDAxLDB4MDEsMHg4MSwweDAxLAorMHgwMCwweDAwLDB4ZTcsMHgwMCwweGMwLDB4MDAsMHg4MCwweDAwLDB4NjAsMHgwMCwweDQwLDB4MDAsMHgzMCwweDAwLDB4MTgsMHgwMCwKKzB4MGMsMHgwMCwweDA4LDB4MDAsMHgwNCwweDAwLDB4MDIsMHgwMCwweDAxLDB4MDAsMHgwOCwweDE4LDB4MzgsMHgyOCwweDA2LDB4MDIsCisweDEwLDB4MGEsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDgxLDB4MTAsMHgwYSwweDAyLDB4MDAsMHgwMCwweDAwLAorMHgwMCwweDAwLDB4ZmIsMHhlOCwweGZiLDB4ZmEsMHgxMiwweDAxLDB4MTAsMHgwMSwweGZmLDB4MDAsMHgwMCwweDA4LDB4NTEsMHgwNCwKKzB4NWYsMHg1MCwweDE2LDB4MDEsMHgwMSwweDAyLDB4MDAsMHgwMiwweDA5LDB4MDIsMHgzNSwweDAwLDB4MDEsMHgwMiwweDAwLDB4ZTAsCisweDAwLDB4MDksMHgwNCwweDAwLDB4MDAsMHgwNSwweGZmLDB4MDAsMHgwMCwweDAwLDB4MDcsMHgwNSwweDgxLDB4MDIsMHg0MCwweDAwLAorMHgwMCwweDA3LDB4MDUsMHgwMSwweDAyLDB4NDAsMHgwMCwweDAwLDB4MDcsMHgwNSwweDgyLDB4MDIsMHg0MCwweDAwLDB4MDAsMHgwNywKKzB4MDUsMHgwMiwweDAyLDB4NDAsMHgwMCwweDAwLDB4MDcsMHgwNSwweDg1LDB4MDMsMHgwMiwweDAwLDB4MDEsMHgwNCwweDAzLDB4MDksCisweDA0LDB4MjQsMHgwMywweDU0LDB4MDAsMHg2NSwweDAwLDB4NzgsMHgwMCwweDYxLDB4MDAsMHg3MywweDAwLDB4MjAsMHgwMCwweDQ5LAorMHgwMCwweDZlLDB4MDAsMHg3MywweDAwLDB4NzQsMHgwMCwweDcyLDB4MDAsMHg3NSwweDAwLDB4NmQsMHgwMCwweDY1LDB4MDAsMHg2ZSwKKzB4MDAsMHg3NCwweDAwLDB4NzMsMHgwMCwweDJhLDB4MDMsMHg1NCwweDAwLDB4NTUsMHgwMCwweDUzLDB4MDAsMHg0MiwweDAwLDB4MzUsCisweDAwLDB4MzAsMHgwMCwweDM1LDB4MDAsMHgzMiwweDAwLDB4MjAsMHgwMCwweDUzLDB4MDAsMHg2NSwweDAwLDB4NzIsMHgwMCwweDY5LAorMHgwMCwweDYxLDB4MDAsMHg2YywweDAwLDB4MjAsMHgwMCwweDUwLDB4MDAsMHg2ZiwweDAwLDB4NzIsMHgwMCwweDc0LDB4MDAsMHgyMiwKKzB4MDMsMHg1NCwweDAwLDB4NTUsMHgwMCwweDUzLDB4MDAsMHg0MiwweDAwLDB4MzUsMHgwMCwweDMwLDB4MDAsMHgzNSwweDAwLDB4MzIsCisweDAwLDB4MjAsMHgwMCwweDIwLDB4MDAsMHgyMCwweDAwLDB4MjAsMHgwMCwweDIwLDB4MDAsMHgyMCwweDAwLDB4MjAsMHgwMCwweDIwLAorMHgwMCwKK307CisKKyNlbmRpZiAvKiBpZm5kZWYgX1RJX0ZXXzUwNTJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MDU0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCkBAIC0wLDAgKzEsMTg0MiBAQAorLyogdmk6IHRzPTggc3c9OAorICoKKyAqIFRJIDM0MTAvNTA1MiBVU0IgU2VyaWFsIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSBMaW51eCBpb190aSBkcml2ZXIsIHdoaWNoIGlzCisgKiAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIEluc2lkZSBPdXQgTmV0d29ya3MKKyAqICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgR3JlZyBLcm9haC1IYXJ0bWFuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGb3IgcXVlc3Rpb25zIG9yIHByb2JsZW1zIHdpdGggdGhpcyBkcml2ZXIsIGNvbnRhY3QgVGV4YXMgSW5zdHJ1bWVudHMKKyAqIHRlY2huaWNhbCBzdXBwb3J0LCBvciBBbCBCb3JjaGVycyA8YWxib3JjaGVyc0BzdGVpbmVycG9pbnQuY29tPiwgb3IKKyAqIFBldGVyIEJlcmdlciA8cGJlcmdlckBicmltc29uLmNvbT4uCisgKiAKKyAqIFRoaXMgZHJpdmVyIG5lZWRzIHRoaXMgaG90cGx1ZyBzY3JpcHQgaW4gL2V0Yy9ob3RwbHVnL3VzYi90aV91c2JfMzQxMF81MDUyCisgKiBvciBpbiAvZXRjL2hvdHBsdWcuZC91c2IvdGlfdXNiXzM0MTBfNTA1Mi5ob3RwbHVnIHRvIHNldCB0aGUgZGV2aWNlCisgKiBjb25maWd1cmF0aW9uLgorICoKKyAqICMhL2Jpbi9iYXNoCisgKgorICogQk9PVF9DT05GSUc9MQorICogQUNUSVZFX0NPTkZJRz0yCisgKgorICogaWYgW1sgIiRBQ1RJT04iICE9ICJhZGQiIF1dCisgKiB0aGVuCisgKiAJZXhpdAorICogZmkKKyAqCisgKiBDT05GSUdfUEFUSD0vc3lzJHtERVZQQVRIJS8/Kn0vYkNvbmZpZ3VyYXRpb25WYWx1ZQorICoKKyAqIGlmIFtbIDBgY2F0ICRDT05GSUdfUEFUSGAgLW5lICRCT09UX0NPTkZJRyBdXQorICogdGhlbgorICogCWV4aXQKKyAqIGZpCisgKgorICogUFJPRFVDVD0ke1BST0RVQ1QlLz8qfQkJIyBkZWxldGUgdmVyc2lvbgorICogVkVORE9SX0lEPWBwcmludGYgIiVkIiAweCR7UFJPRFVDVCUvPyp9YAorICogUFJPRFVDVF9JRD1gcHJpbnRmICIlZCIgMHgke1BST0RVQ1QjKj8vfWAKKyAqCisgKiBQQVJBTV9QQVRIPS9zeXMvbW9kdWxlL3RpX3VzYl8zNDEwXzUwNTIvcGFyYW1ldGVycworICoKKyAqIGZ1bmN0aW9uIHNjYW4oKSB7CisgKiAJcz0kMQorICogCXNoaWZ0CisgKiAJZm9yIGkKKyAqIAlkbworICogCQlpZiBbWyAkcyAtZXEgJGkgXV0KKyAqIAkJdGhlbgorICogCQkJcmV0dXJuIDAKKyAqIAkJZmkKKyAqIAlkb25lCisgKiAJcmV0dXJuIDEKKyAqIH0KKyAqCisgKiBJRlM9JElGUywKKyAqCisgKiBpZiAoc2NhbiAkVkVORE9SX0lEIDExMDUgYGNhdCAkUEFSQU1fUEFUSC92ZW5kb3JfMzQxMGAgJiYKKyAqIHNjYW4gJFBST0RVQ1RfSUQgMTMzMjggYGNhdCAkUEFSQU1fUEFUSC9wcm9kdWN0XzM0MTBgKSB8fAorICogKHNjYW4gJFZFTkRPUl9JRCAxMTA1IGBjYXQgJFBBUkFNX1BBVEgvdmVuZG9yXzUwNTJgICYmCisgKiBzY2FuICRQUk9EVUNUX0lEIDIwNTYyIDIwODE4IDIwNTcwIDIwNTc1IGBjYXQgJFBBUkFNX1BBVEgvcHJvZHVjdF81MDUyYCkKKyAqIHRoZW4KKyAqIAllY2hvICRBQ1RJVkVfQ09ORklHID4gJENPTkZJR19QQVRICisgKiBmaQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCisjaW5jbHVkZSAidGlfdXNiXzM0MTBfNTA1Mi5oIgorI2luY2x1ZGUgInRpX2Z3XzM0MTAuaCIJCS8qIGZpcm13YXJlIGltYWdlIGZvciAzNDEwICovCisjaW5jbHVkZSAidGlfZndfNTA1Mi5oIgkJLyogZmlybXdhcmUgaW1hZ2UgZm9yIDUwNTIgKi8KKworCisvKiBEZWZpbmVzICovCisKKyNkZWZpbmUgVElfRFJJVkVSX1ZFUlNJT04JInYwLjkiCisjZGVmaW5lIFRJX0RSSVZFUl9BVVRIT1IJIkFsIEJvcmNoZXJzIDxhbGJvcmNoZXJzQHN0ZWluZXJwb2ludC5jb20+IgorI2RlZmluZSBUSV9EUklWRVJfREVTQwkJIlRJIFVTQiAzNDEwLzUwNTIgU2VyaWFsIERyaXZlciIKKworI2RlZmluZSBUSV9GSVJNV0FSRV9CVUZfU0laRQkxNjI4NAorCisjZGVmaW5lIFRJX1dSSVRFX0JVRl9TSVpFCTEwMjQKKworI2RlZmluZSBUSV9UUkFOU0ZFUl9USU1FT1VUCTIKKworI2RlZmluZSBUSV9ERUZBVUxUX0xPV19MQVRFTkNZCTAKKyNkZWZpbmUgVElfREVGQVVMVF9DTE9TSU5HX1dBSVQJNDAwMAkJLyogaW4gLjAxIHNlY3MgKi8KKworLyogc3VwcG9ydGVkIHNldHNlcmlhbCBmbGFncyAqLworI2RlZmluZSBUSV9TRVRfU0VSSUFMX0ZMQUdTCShBU1lOQ19MT1dfTEFURU5DWSkKKworLyogcmVhZCB1cmIgc3RhdGVzICovCisjZGVmaW5lIFRJX1JFQURfVVJCX1JVTk5JTkcJMAorI2RlZmluZSBUSV9SRUFEX1VSQl9TVE9QUElORwkxCisjZGVmaW5lIFRJX1JFQURfVVJCX1NUT1BQRUQJMgorCisjZGVmaW5lIFRJX0VYVFJBX1ZJRF9QSURfQ09VTlQJNQorCisKKy8qIFN0cnVjdHVyZXMgKi8KKworc3RydWN0IHRpX3BvcnQgeworCWludAkJCXRwX2lzX29wZW47CisJX191OAkJCXRwX21zcjsKKwlfX3U4CQkJdHBfbHNyOworCV9fdTgJCQl0cF9zaGFkb3dfbWNyOworCV9fdTgJCQl0cF91YXJ0X21vZGU7CS8qIDIzMiBvciA0ODUgbW9kZXMgKi8KKwl1bnNpZ25lZCBpbnQJCXRwX3VhcnRfYmFzZV9hZGRyOworCWludAkJCXRwX2ZsYWdzOworCWludAkJCXRwX2Nsb3Npbmdfd2FpdDsvKiBpbiAuMDEgc2VjcyAqLworCXN0cnVjdCBhc3luY19pY291bnQJdHBfaWNvdW50OworCXdhaXRfcXVldWVfaGVhZF90CXRwX21zcl93YWl0OwkvKiB3YWl0IGZvciBtc3IgY2hhbmdlICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJdHBfd3JpdGVfd2FpdDsKKwlzdHJ1Y3QgdGlfZGV2aWNlCSp0cF90ZGV2OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJKnRwX3BvcnQ7CisJc3BpbmxvY2tfdAkJdHBfbG9jazsKKwlpbnQJCQl0cF9yZWFkX3VyYl9zdGF0ZTsKKwlpbnQJCQl0cF93cml0ZV91cmJfaW5fdXNlOworCXN0cnVjdCBjaXJjX2J1ZgkJKnRwX3dyaXRlX2J1ZjsKK307CisKK3N0cnVjdCB0aV9kZXZpY2UgeworCXN0cnVjdCBzZW1hcGhvcmUJdGRfb3Blbl9jbG9zZV9zZW07CisJaW50CQkJdGRfb3Blbl9wb3J0X2NvdW50OworCXN0cnVjdCB1c2Jfc2VyaWFsCSp0ZF9zZXJpYWw7CisJaW50CQkJdGRfaXNfMzQxMDsKKwlpbnQJCQl0ZF91cmJfZXJyb3I7Cit9OworCisKKy8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworCitzdGF0aWMgaW50IHRpX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgdm9pZCB0aV9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgdGlfb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgdm9pZCB0aV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IHRpX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJaW50IGNvdW50KTsKK3N0YXRpYyBpbnQgdGlfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgdGlfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgdGlfdGhyb3R0bGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCB0aV91bnRocm90dGxlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCB0aV9pb2N0bChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQgdGlfc2V0X3Rlcm1pb3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwlzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworc3RhdGljIGludCB0aV90aW9jbWdldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgaW50IHRpX3Rpb2Ntc2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CitzdGF0aWMgdm9pZCB0aV9icmVhayhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpOworc3RhdGljIHZvaWQgdGlfaW50ZXJydXB0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgdGlfYnVsa19pbl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIHRpX2J1bGtfb3V0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCitzdGF0aWMgdm9pZCB0aV9yZWN2KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwl1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoKTsKK3N0YXRpYyB2b2lkIHRpX3NlbmQoc3RydWN0IHRpX3BvcnQgKnRwb3J0KTsKK3N0YXRpYyBpbnQgdGlfc2V0X21jcihzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQsIHVuc2lnbmVkIGludCBtY3IpOworc3RhdGljIGludCB0aV9nZXRfbHNyKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCk7CitzdGF0aWMgaW50IHRpX2dldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQsCisJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpyZXRfYXJnKTsKK3N0YXRpYyBpbnQgdGlfc2V0X3NlcmlhbF9pbmZvKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCwKKwlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKm5ld19hcmcpOworc3RhdGljIHZvaWQgdGlfaGFuZGxlX25ld19tc3Ioc3RydWN0IHRpX3BvcnQgKnRwb3J0LCBfX3U4IG1zcik7CisKK3N0YXRpYyB2b2lkIHRpX2RyYWluKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBpbnQgZmx1c2gpOworCitzdGF0aWMgdm9pZCB0aV9zdG9wX3JlYWQoc3RydWN0IHRpX3BvcnQgKnRwb3J0LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyBpbnQgdGlfcmVzdGFydF9yZWFkKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CisKK3N0YXRpYyBpbnQgdGlfY29tbWFuZF9vdXRfc3luYyhzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2LCBfX3U4IGNvbW1hbmQsCisJX191MTYgbW9kdWxlaWQsIF9fdTE2IHZhbHVlLCBfX3U4ICpkYXRhLCBpbnQgc2l6ZSk7CitzdGF0aWMgaW50IHRpX2NvbW1hbmRfaW5fc3luYyhzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2LCBfX3U4IGNvbW1hbmQsCisJX191MTYgbW9kdWxlaWQsIF9fdTE2IHZhbHVlLCBfX3U4ICpkYXRhLCBpbnQgc2l6ZSk7CisKK3N0YXRpYyBpbnQgdGlfd3JpdGVfYnl0ZShzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2LCB1bnNpZ25lZCBsb25nIGFkZHIsCisJX191OCBtYXNrLCBfX3U4IGJ5dGUpOworCitzdGF0aWMgaW50IHRpX2Rvd25sb2FkX2Zpcm13YXJlKHN0cnVjdCB0aV9kZXZpY2UgKnRkZXYsCisJdW5zaWduZWQgY2hhciAqZmlybXdhcmUsIHVuc2lnbmVkIGludCBmaXJtd2FyZV9zaXplKTsKKworLyogY2lyY3VsYXIgYnVmZmVyICovCitzdGF0aWMgc3RydWN0IGNpcmNfYnVmICp0aV9idWZfYWxsb2Modm9pZCk7CitzdGF0aWMgdm9pZCB0aV9idWZfZnJlZShzdHJ1Y3QgY2lyY19idWYgKmNiKTsKK3N0YXRpYyB2b2lkIHRpX2J1Zl9jbGVhcihzdHJ1Y3QgY2lyY19idWYgKmNiKTsKK3N0YXRpYyBpbnQgdGlfYnVmX2RhdGFfYXZhaWwoc3RydWN0IGNpcmNfYnVmICpjYik7CitzdGF0aWMgaW50IHRpX2J1Zl9zcGFjZV9hdmFpbChzdHJ1Y3QgY2lyY19idWYgKmNiKTsKK3N0YXRpYyBpbnQgdGlfYnVmX3B1dChzdHJ1Y3QgY2lyY19idWYgKmNiLCBjb25zdCBjaGFyICpidWYsIGludCBjb3VudCk7CitzdGF0aWMgaW50IHRpX2J1Zl9nZXQoc3RydWN0IGNpcmNfYnVmICpjYiwgY2hhciAqYnVmLCBpbnQgY291bnQpOworCisKKy8qIERhdGEgKi8KKworLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KK3N0YXRpYyBpbnQgZGVidWc7CitzdGF0aWMgaW50IGxvd19sYXRlbmN5ID0gVElfREVGQVVMVF9MT1dfTEFURU5DWTsKK3N0YXRpYyBpbnQgY2xvc2luZ193YWl0ID0gVElfREVGQVVMVF9DTE9TSU5HX1dBSVQ7CitzdGF0aWMgdXNob3J0IHZlbmRvcl8zNDEwW1RJX0VYVFJBX1ZJRF9QSURfQ09VTlRdOworc3RhdGljIGludCB2ZW5kb3JfMzQxMF9jb3VudDsKK3N0YXRpYyB1c2hvcnQgcHJvZHVjdF8zNDEwW1RJX0VYVFJBX1ZJRF9QSURfQ09VTlRdOworc3RhdGljIGludCBwcm9kdWN0XzM0MTBfY291bnQ7CitzdGF0aWMgdXNob3J0IHZlbmRvcl81MDUyW1RJX0VYVFJBX1ZJRF9QSURfQ09VTlRdOworc3RhdGljIGludCB2ZW5kb3JfNTA1Ml9jb3VudDsKK3N0YXRpYyB1c2hvcnQgcHJvZHVjdF81MDUyW1RJX0VYVFJBX1ZJRF9QSURfQ09VTlRdOworc3RhdGljIGludCBwcm9kdWN0XzUwNTJfY291bnQ7CisKKy8qIHN1cHBvcnRlZCBkZXZpY2VzICovCisvKiB0aGUgYXJyYXkgZGltZW5zaW9uIGlzIHRoZSBudW1iZXIgb2YgZGVmYXVsdCBlbnRyaWVzIHBsdXMgKi8KKy8qIFRJX0VYVFJBX1ZJRF9QSURfQ09VTlQgdXNlciBkZWZpbmVkIGVudHJpZXMgcGx1cyAxIHRlcm1pbmF0aW5nICovCisvKiBudWxsIGVudHJ5ICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdGlfaWRfdGFibGVfMzQxMFsxK1RJX0VYVFJBX1ZJRF9QSURfQ09VTlQrMV0gPSB7CisJeyBVU0JfREVWSUNFKFRJX1ZFTkRPUl9JRCwgVElfMzQxMF9QUk9EVUNUX0lEKSB9LAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHRpX2lkX3RhYmxlXzUwNTJbNCtUSV9FWFRSQV9WSURfUElEX0NPVU5UKzFdID0geworCXsgVVNCX0RFVklDRShUSV9WRU5ET1JfSUQsIFRJXzUwNTJfQk9PVF9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShUSV9WRU5ET1JfSUQsIFRJXzUxNTJfQk9PVF9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShUSV9WRU5ET1JfSUQsIFRJXzUwNTJfRUVQUk9NX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKFRJX1ZFTkRPUl9JRCwgVElfNTA1Ml9GSVJNV0FSRV9QUk9EVUNUX0lEKSB9LAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHRpX2lkX3RhYmxlX2NvbWJpbmVkW10gPSB7CisJeyBVU0JfREVWSUNFKFRJX1ZFTkRPUl9JRCwgVElfMzQxMF9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShUSV9WRU5ET1JfSUQsIFRJXzUwNTJfQk9PVF9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShUSV9WRU5ET1JfSUQsIFRJXzUxNTJfQk9PVF9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShUSV9WRU5ET1JfSUQsIFRJXzUwNTJfRUVQUk9NX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKFRJX1ZFTkRPUl9JRCwgVElfNTA1Ml9GSVJNV0FSRV9QUk9EVUNUX0lEKSB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHRpX3VzYl9kcml2ZXIgPSB7CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJCT0gInRpX3VzYl8zNDEwXzUwNTIiLAorCS5wcm9iZQkJCT0gdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdAkJPSB1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlCQk9IHRpX2lkX3RhYmxlX2NvbWJpbmVkLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIHRpXzFwb3J0X2RldmljZSA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQkJPSAiVEkgVVNCIDM0MTAgMSBwb3J0IGFkYXB0ZXIiLAorCS5pZF90YWJsZQkJPSB0aV9pZF90YWJsZV8zNDEwLAorCS5udW1faW50ZXJydXB0X2luCT0gMSwKKwkubnVtX2J1bGtfaW4JCT0gMSwKKwkubnVtX2J1bGtfb3V0CQk9IDEsCisJLm51bV9wb3J0cwkJPSAxLAorCS5hdHRhY2gJCQk9IHRpX3N0YXJ0dXAsCisJLnNodXRkb3duCQk9IHRpX3NodXRkb3duLAorCS5vcGVuCQkJPSB0aV9vcGVuLAorCS5jbG9zZQkJCT0gdGlfY2xvc2UsCisJLndyaXRlCQkJPSB0aV93cml0ZSwKKwkud3JpdGVfcm9vbQkJPSB0aV93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIJPSB0aV9jaGFyc19pbl9idWZmZXIsCisJLnRocm90dGxlCQk9IHRpX3Rocm90dGxlLAorCS51bnRocm90dGxlCQk9IHRpX3VudGhyb3R0bGUsCisJLmlvY3RsCQkJPSB0aV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MJCT0gdGlfc2V0X3Rlcm1pb3MsCisJLnRpb2NtZ2V0CQk9IHRpX3Rpb2NtZ2V0LAorCS50aW9jbXNldAkJPSB0aV90aW9jbXNldCwKKwkuYnJlYWtfY3RsCQk9IHRpX2JyZWFrLAorCS5yZWFkX2ludF9jYWxsYmFjawk9IHRpX2ludGVycnVwdF9jYWxsYmFjaywKKwkucmVhZF9idWxrX2NhbGxiYWNrCT0gdGlfYnVsa19pbl9jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjawk9IHRpX2J1bGtfb3V0X2NhbGxiYWNrLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIHRpXzJwb3J0X2RldmljZSA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQkJPSAiVEkgVVNCIDUwNTIgMiBwb3J0IGFkYXB0ZXIiLAorCS5pZF90YWJsZQkJPSB0aV9pZF90YWJsZV81MDUyLAorCS5udW1faW50ZXJydXB0X2luCT0gMSwKKwkubnVtX2J1bGtfaW4JCT0gMiwKKwkubnVtX2J1bGtfb3V0CQk9IDIsCisJLm51bV9wb3J0cwkJPSAyLAorCS5hdHRhY2gJCQk9IHRpX3N0YXJ0dXAsCisJLnNodXRkb3duCQk9IHRpX3NodXRkb3duLAorCS5vcGVuCQkJPSB0aV9vcGVuLAorCS5jbG9zZQkJCT0gdGlfY2xvc2UsCisJLndyaXRlCQkJPSB0aV93cml0ZSwKKwkud3JpdGVfcm9vbQkJPSB0aV93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIJPSB0aV9jaGFyc19pbl9idWZmZXIsCisJLnRocm90dGxlCQk9IHRpX3Rocm90dGxlLAorCS51bnRocm90dGxlCQk9IHRpX3VudGhyb3R0bGUsCisJLmlvY3RsCQkJPSB0aV9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MJCT0gdGlfc2V0X3Rlcm1pb3MsCisJLnRpb2NtZ2V0CQk9IHRpX3Rpb2NtZ2V0LAorCS50aW9jbXNldAkJPSB0aV90aW9jbXNldCwKKwkuYnJlYWtfY3RsCQk9IHRpX2JyZWFrLAorCS5yZWFkX2ludF9jYWxsYmFjawk9IHRpX2ludGVycnVwdF9jYWxsYmFjaywKKwkucmVhZF9idWxrX2NhbGxiYWNrCT0gdGlfYnVsa19pbl9jYWxsYmFjaywKKwkud3JpdGVfYnVsa19jYWxsYmFjawk9IHRpX2J1bGtfb3V0X2NhbGxiYWNrLAorfTsKKworCisvKiBNb2R1bGUgKi8KKworTU9EVUxFX0FVVEhPUihUSV9EUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihUSV9EUklWRVJfREVTQyk7CitNT0RVTEVfVkVSU0lPTihUSV9EUklWRVJfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSBkZWJ1Z2dpbmcsIDA9bm8sIDE9eWVzIik7CisKK21vZHVsZV9wYXJhbShsb3dfbGF0ZW5jeSwgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhsb3dfbGF0ZW5jeSwgIlRUWSBsb3dfbGF0ZW5jeSBmbGFnLCAwPW9mZiwgMT1vbiwgZGVmYXVsdCBpcyBvZmYiKTsKKworbW9kdWxlX3BhcmFtKGNsb3Npbmdfd2FpdCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGNsb3Npbmdfd2FpdCwgIk1heGltdW0gd2FpdCBmb3IgZGF0YSB0byBkcmFpbiBpbiBjbG9zZSwgaW4gLjAxIHNlY3MsIGRlZmF1bHQgaXMgNDAwMCIpOworCittb2R1bGVfcGFyYW1fYXJyYXkodmVuZG9yXzM0MTAsIHVzaG9ydCwgJnZlbmRvcl8zNDEwX2NvdW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0ModmVuZG9yXzM0MTAsICJWZW5kb3IgaWRzIGZvciAzNDEwIGJhc2VkIGRldmljZXMsIDEtNSBzaG9ydCBpbnRlZ2VycyIpOworbW9kdWxlX3BhcmFtX2FycmF5KHByb2R1Y3RfMzQxMCwgdXNob3J0LCAmcHJvZHVjdF8zNDEwX2NvdW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MocHJvZHVjdF8zNDEwLCAiUHJvZHVjdCBpZHMgZm9yIDM0MTAgYmFzZWQgZGV2aWNlcywgMS01IHNob3J0IGludGVnZXJzIik7Cittb2R1bGVfcGFyYW1fYXJyYXkodmVuZG9yXzUwNTIsIHVzaG9ydCwgJnZlbmRvcl81MDUyX2NvdW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0ModmVuZG9yXzUwNTIsICJWZW5kb3IgaWRzIGZvciA1MDUyIGJhc2VkIGRldmljZXMsIDEtNSBzaG9ydCBpbnRlZ2VycyIpOworbW9kdWxlX3BhcmFtX2FycmF5KHByb2R1Y3RfNTA1MiwgdXNob3J0LCAmcHJvZHVjdF81MDUyX2NvdW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MocHJvZHVjdF81MDUyLCAiUHJvZHVjdCBpZHMgZm9yIDUwNTIgYmFzZWQgZGV2aWNlcywgMS01IHNob3J0IGludGVnZXJzIik7CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB0aV9pZF90YWJsZV9jb21iaW5lZCk7CisKKworLyogRnVuY3Rpb25zICovCisKK3N0YXRpYyBpbnQgX19pbml0IHRpX2luaXQodm9pZCkKK3sKKwlpbnQgaSxqOworCWludCByZXQ7CisKKworCS8qIGluc2VydCBleHRyYSB2ZW5kb3IgYW5kIHByb2R1Y3QgaWRzICovCisJaiA9IHNpemVvZih0aV9pZF90YWJsZV8zNDEwKS9zaXplb2Yoc3RydWN0IHVzYl9kZXZpY2VfaWQpCisJCS0gVElfRVhUUkFfVklEX1BJRF9DT1VOVCAtIDE7CisJZm9yIChpPTA7IGk8bWluKHZlbmRvcl8zNDEwX2NvdW50LHByb2R1Y3RfMzQxMF9jb3VudCk7IGkrKyxqKyspIHsKKwkJdGlfaWRfdGFibGVfMzQxMFtqXS5pZFZlbmRvciA9IHZlbmRvcl8zNDEwW2ldOworCQl0aV9pZF90YWJsZV8zNDEwW2pdLmlkUHJvZHVjdCA9IHByb2R1Y3RfMzQxMFtpXTsKKwkJdGlfaWRfdGFibGVfMzQxMFtqXS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFOworCX0KKwlqID0gc2l6ZW9mKHRpX2lkX3RhYmxlXzUwNTIpL3NpemVvZihzdHJ1Y3QgdXNiX2RldmljZV9pZCkKKwkJLSBUSV9FWFRSQV9WSURfUElEX0NPVU5UIC0gMTsKKwlmb3IgKGk9MDsgaTxtaW4odmVuZG9yXzUwNTJfY291bnQscHJvZHVjdF81MDUyX2NvdW50KTsgaSsrLGorKykgeworCQl0aV9pZF90YWJsZV81MDUyW2pdLmlkVmVuZG9yID0gdmVuZG9yXzUwNTJbaV07CisJCXRpX2lkX3RhYmxlXzUwNTJbal0uaWRQcm9kdWN0ID0gcHJvZHVjdF81MDUyW2ldOworCQl0aV9pZF90YWJsZV81MDUyW2pdLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0U7CisJfQorCisJcmV0ID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmdGlfMXBvcnRfZGV2aWNlKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZF8xcG9ydDsKKwlyZXQgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZ0aV8ycG9ydF9kZXZpY2UpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkXzJwb3J0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZ0aV91c2JfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZF91c2I7CisKKwlpbmZvKFRJX0RSSVZFUl9ERVNDICIgIiBUSV9EUklWRVJfVkVSU0lPTik7CisKKwlyZXR1cm4gMDsKKworZmFpbGVkX3VzYjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnRpXzJwb3J0X2RldmljZSk7CitmYWlsZWRfMnBvcnQ6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ0aV8xcG9ydF9kZXZpY2UpOworZmFpbGVkXzFwb3J0OgorCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IHRpX2V4aXQodm9pZCkKK3sKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnRpXzFwb3J0X2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ0aV8ycG9ydF9kZXZpY2UpOworCXVzYl9kZXJlZ2lzdGVyKCZ0aV91c2JfZHJpdmVyKTsKK30KKworCittb2R1bGVfaW5pdCh0aV9pbml0KTsKK21vZHVsZV9leGl0KHRpX2V4aXQpOworCisKK3N0YXRpYyBpbnQgdGlfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCB0aV9kZXZpY2UgKnRkZXY7CisJc3RydWN0IHRpX3BvcnQgKnRwb3J0OworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBzZXJpYWwtPmRldjsKKwlpbnQgc3RhdHVzOworCWludCBpOworCisKKwlkYmcoIiVzIC0gcHJvZHVjdCAweCU0WCwgbnVtIGNvbmZpZ3VyYXRpb25zICVkLCBjb25maWd1cmF0aW9uIHZhbHVlICVkIiwKKwkgICAgX19GVU5DVElPTl9fLCBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSwKKwkgICAgZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucywKKwkgICAgZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CisKKwkvKiBjcmVhdGUgZGV2aWNlIHN0cnVjdHVyZSAqLworCXRkZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGlfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHRkZXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldCh0ZGV2LCAwLCBzaXplb2Yoc3RydWN0IHRpX2RldmljZSkpOworCXNlbWFfaW5pdCgmdGRldi0+dGRfb3Blbl9jbG9zZV9zZW0sIDEpOworCXRkZXYtPnRkX3NlcmlhbCA9IHNlcmlhbDsKKwl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgdGRldik7CisKKwkvKiBkZXRlcm1pbmUgZGV2aWNlIHR5cGUgKi8KKwlpZiAodXNiX21hdGNoX2lkKHNlcmlhbC0+aW50ZXJmYWNlLCB0aV9pZF90YWJsZV8zNDEwKSkKKwkJdGRldi0+dGRfaXNfMzQxMCA9IDE7CisJZGJnKCIlcyAtIGRldmljZSB0eXBlIGlzICVzIiwgX19GVU5DVElPTl9fLCB0ZGV2LT50ZF9pc18zNDEwID8gIjM0MTAiIDogIjUwNTIiKTsKKworCS8qIGlmIHdlIGhhdmUgb25seSAxIGNvbmZpZ3VyYXRpb24sIGRvd25sb2FkIGZpcm13YXJlICovCisJaWYgKGRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgPT0gMSkgeworCisJCWlmICh0ZGV2LT50ZF9pc18zNDEwKQorCQkJc3RhdHVzID0gdGlfZG93bmxvYWRfZmlybXdhcmUodGRldiwgdGlfZndfMzQxMCwKKwkJCQlzaXplb2YodGlfZndfMzQxMCkpOworCQllbHNlCisJCQlzdGF0dXMgPSB0aV9kb3dubG9hZF9maXJtd2FyZSh0ZGV2LCB0aV9md181MDUyLAorCQkJCXNpemVvZih0aV9md181MDUyKSk7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGZyZWVfdGRldjsKKworCQkvKiAzNDEwIG11c3QgYmUgcmVzZXQsIDUwNTIgcmVzZXRzIGl0c2VsZiAqLworCQlpZiAodGRldi0+dGRfaXNfMzQxMCkgeworCQkJbXNsZWVwX2ludGVycnVwdGlibGUoMTAwKTsKKwkJCXVzYl9yZXNldF9kZXZpY2UoZGV2KTsKKwkJfQorCisJCXN0YXR1cyA9IC1FTk9ERVY7CisJCWdvdG8gZnJlZV90ZGV2OworCX0gCisKKwkvKiB0aGUgc2Vjb25kIGNvbmZpZ3VyYXRpb24gbXVzdCBiZSBzZXQgKGluIHN5c2ZzIGJ5IGhvdHBsdWcgc2NyaXB0KSAqLworCWlmIChkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlID09IFRJX0JPT1RfQ09ORklHKSB7CisJCXN0YXR1cyA9IC1FTk9ERVY7CisJCWdvdG8gZnJlZV90ZGV2OworCX0KKworCS8qIHNldCB1cCBwb3J0IHN0cnVjdHVyZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQl0cG9ydCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0aV9wb3J0KSwgR0ZQX0tFUk5FTCk7CisJCWlmICh0cG9ydCA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGZyZWVfdHBvcnRzOworCQl9CisJCW1lbXNldCh0cG9ydCwgMCwgc2l6ZW9mKHN0cnVjdCB0aV9wb3J0KSk7CisJCXNwaW5fbG9ja19pbml0KCZ0cG9ydC0+dHBfbG9jayk7CisJCXRwb3J0LT50cF91YXJ0X2Jhc2VfYWRkciA9IChpID09IDAgPyBUSV9VQVJUMV9CQVNFX0FERFIgOiBUSV9VQVJUMl9CQVNFX0FERFIpOworCQl0cG9ydC0+dHBfZmxhZ3MgPSBsb3dfbGF0ZW5jeSA/IEFTWU5DX0xPV19MQVRFTkNZIDogMDsKKwkJdHBvcnQtPnRwX2Nsb3Npbmdfd2FpdCA9IGNsb3Npbmdfd2FpdDsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmdHBvcnQtPnRwX21zcl93YWl0KTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmdHBvcnQtPnRwX3dyaXRlX3dhaXQpOworCQl0cG9ydC0+dHBfd3JpdGVfYnVmID0gdGlfYnVmX2FsbG9jKCk7CisJCWlmICh0cG9ydC0+dHBfd3JpdGVfYnVmID09IE5VTEwpIHsKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQkJa2ZyZWUodHBvcnQpOworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCWdvdG8gZnJlZV90cG9ydHM7CisJCX0KKwkJdHBvcnQtPnRwX3BvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCXRwb3J0LT50cF90ZGV2ID0gdGRldjsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgdHBvcnQpOworCQl0cG9ydC0+dHBfdWFydF9tb2RlID0gMDsJLyogZGVmYXVsdCBpcyBSUzIzMiAqLworCX0KKwkKKwlyZXR1cm4gMDsKKworZnJlZV90cG9ydHM6CisJZm9yICgtLWk7IGk+PTA7IC0taSkgeworCQl0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pOworCQl0aV9idWZfZnJlZSh0cG9ydC0+dHBfd3JpdGVfYnVmKTsKKwkJa2ZyZWUodHBvcnQpOworCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldLCBOVUxMKTsKKwl9CitmcmVlX3RkZXY6CisJa2ZyZWUodGRldik7CisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIE5VTEwpOworCXJldHVybiBzdGF0dXM7Cit9CisKKworc3RhdGljIHZvaWQgdGlfc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCXN0cnVjdCB0aV9wb3J0ICp0cG9ydDsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJZm9yIChpPTA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCXRwb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSk7CisJCWlmICh0cG9ydCkgeworCQkJdGlfYnVmX2ZyZWUodHBvcnQtPnRwX3dyaXRlX2J1Zik7CisJCQlrZnJlZSh0cG9ydCk7CisJCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldLCBOVUxMKTsKKwkJfQorCX0KKworCWlmICh0ZGV2KQorCQlrZnJlZSh0ZGV2KTsKKwl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgTlVMTCk7Cit9CisKKworc3RhdGljIGludCB0aV9vcGVuKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBwb3J0X251bWJlcjsKKwlpbnQgc3RhdHVzOworCV9fdTE2IG9wZW5fc2V0dGluZ3MgPSAoX191OCkoVElfUElQRV9NT0RFX0NPTlRJTk9VUyB8IAorCQkJICAgICBUSV9QSVBFX1RJTUVPVVRfRU5BQkxFIHwgCisJCQkgICAgIChUSV9UUkFOU0ZFUl9USU1FT1VUIDw8IDIpKTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHRwb3J0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJdGRldiA9IHRwb3J0LT50cF90ZGV2OworCisJLyogb25seSBvbmUgb3BlbiBvbiBhbnkgcG9ydCBvbiBhIGRldmljZSBhdCBhIHRpbWUgKi8KKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZ0ZGV2LT50ZF9vcGVuX2Nsb3NlX3NlbSkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlpZiAocG9ydC0+dHR5KQorCQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gCisJCQkodHBvcnQtPnRwX2ZsYWdzICYgQVNZTkNfTE9XX0xBVEVOQ1kpID8gMSA6IDA7CisKKwlwb3J0X251bWJlciA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3I7CisKKwltZW1zZXQoJih0cG9ydC0+dHBfaWNvdW50KSwgMHgwMCwgc2l6ZW9mKHRwb3J0LT50cF9pY291bnQpKTsKKworCXRwb3J0LT50cF9tc3IgPSAwOworCXRwb3J0LT50cF9zaGFkb3dfbWNyIHw9IChUSV9NQ1JfUlRTIHwgVElfTUNSX0RUUik7CisKKwkvKiBzdGFydCBpbnRlcnJ1cHQgdXJiIHRoZSBmaXJzdCB0aW1lIGEgcG9ydCBpcyBvcGVuZWQgb24gdGhpcyBkZXZpY2UgKi8KKwlpZiAodGRldi0+dGRfb3Blbl9wb3J0X2NvdW50ID09IDApIHsKKwkJZGJnKCIlcyAtIHN0YXJ0IGludGVycnVwdCBpbiB1cmIiLCBfX0ZVTkNUSU9OX18pOworCQl1cmIgPSB0ZGV2LT50ZF9zZXJpYWwtPnBvcnRbMF0tPmludGVycnVwdF9pbl91cmI7CisJCWlmICghdXJiKSB7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIG5vIGludGVycnVwdCB1cmJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlzdGF0dXMgPSAtRUlOVkFMOworCQkJZ290byB1cF9zZW07CisJCX0KKwkJdXJiLT5jb21wbGV0ZSA9IHRpX2ludGVycnVwdF9jYWxsYmFjazsKKwkJdXJiLT5jb250ZXh0ID0gdGRldjsKKwkJdXJiLT5kZXYgPSBkZXY7CisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CisJCWlmIChzdGF0dXMpIHsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gc3VibWl0IGludGVycnVwdCB1cmIgZmFpbGVkLCAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQkJZ290byB1cF9zZW07CisJCX0KKwl9CisKKwl0aV9zZXRfdGVybWlvcyhwb3J0LCBOVUxMKTsKKworCWRiZygiJXMgLSBzZW5kaW5nIFRJX09QRU5fUE9SVCIsIF9fRlVOQ1RJT05fXyk7CisJc3RhdHVzID0gdGlfY29tbWFuZF9vdXRfc3luYyh0ZGV2LCBUSV9PUEVOX1BPUlQsCisJCShfX3U4KShUSV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLCBvcGVuX3NldHRpbmdzLCBOVUxMLCAwKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gY2Fubm90IHNlbmQgb3BlbiBjb21tYW5kLCAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQlnb3RvIHVubGlua19pbnRfdXJiOworCX0KKworCWRiZygiJXMgLSBzZW5kaW5nIFRJX1NUQVJUX1BPUlQiLCBfX0ZVTkNUSU9OX18pOworCXN0YXR1cyA9IHRpX2NvbW1hbmRfb3V0X3N5bmModGRldiwgVElfU1RBUlRfUE9SVCwKKwkJKF9fdTgpKFRJX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksIDAsIE5VTEwsIDApOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBjYW5ub3Qgc2VuZCBzdGFydCBjb21tYW5kLCAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQlnb3RvIHVubGlua19pbnRfdXJiOworCX0KKworCWRiZygiJXMgLSBzZW5kaW5nIFRJX1BVUkdFX1BPUlQiLCBfX0ZVTkNUSU9OX18pOworCXN0YXR1cyA9IHRpX2NvbW1hbmRfb3V0X3N5bmModGRldiwgVElfUFVSR0VfUE9SVCwKKwkJKF9fdTgpKFRJX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksIFRJX1BVUkdFX0lOUFVULCBOVUxMLCAwKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gY2Fubm90IGNsZWFyIGlucHV0IGJ1ZmZlcnMsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCWdvdG8gdW5saW5rX2ludF91cmI7CisJfQorCXN0YXR1cyA9IHRpX2NvbW1hbmRfb3V0X3N5bmModGRldiwgVElfUFVSR0VfUE9SVCwKKwkJKF9fdTgpKFRJX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksIFRJX1BVUkdFX09VVFBVVCwgTlVMTCwgMCk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGNhbm5vdCBjbGVhciBvdXRwdXQgYnVmZmVycywgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJZ290byB1bmxpbmtfaW50X3VyYjsKKwl9CisKKwkvKiByZXNldCB0aGUgZGF0YSB0b2dnbGUgb24gdGhlIGJ1bGsgZW5kcG9pbnRzIHRvIHdvcmsgYXJvdW5kIGJ1ZyBpbgorCSAqIGhvc3QgY29udHJvbGxlcnMgd2hlcmUgdGhpbmdzIGdldCBvdXQgb2Ygc3luYyBzb21lIHRpbWVzICovCisJdXNiX2NsZWFyX2hhbHQoZGV2LCBwb3J0LT53cml0ZV91cmItPnBpcGUpOworCXVzYl9jbGVhcl9oYWx0KGRldiwgcG9ydC0+cmVhZF91cmItPnBpcGUpOworCisJdGlfc2V0X3Rlcm1pb3MocG9ydCwgTlVMTCk7CisKKwlkYmcoIiVzIC0gc2VuZGluZyBUSV9PUEVOX1BPUlQgKDIpIiwgX19GVU5DVElPTl9fKTsKKwlzdGF0dXMgPSB0aV9jb21tYW5kX291dF9zeW5jKHRkZXYsIFRJX09QRU5fUE9SVCwKKwkJKF9fdTgpKFRJX1VBUlQxX1BPUlQgKyBwb3J0X251bWJlciksIG9wZW5fc2V0dGluZ3MsIE5VTEwsIDApOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBjYW5ub3Qgc2VuZCBvcGVuIGNvbW1hbmQgKDIpLCAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQlnb3RvIHVubGlua19pbnRfdXJiOworCX0KKworCWRiZygiJXMgLSBzZW5kaW5nIFRJX1NUQVJUX1BPUlQgKDIpIiwgX19GVU5DVElPTl9fKTsKKwlzdGF0dXMgPSB0aV9jb21tYW5kX291dF9zeW5jKHRkZXYsIFRJX1NUQVJUX1BPUlQsCisJCShfX3U4KShUSV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLCAwLCBOVUxMLCAwKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gY2Fubm90IHNlbmQgc3RhcnQgY29tbWFuZCAoMiksICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCWdvdG8gdW5saW5rX2ludF91cmI7CisJfQorCisJLyogc3RhcnQgcmVhZCB1cmIgKi8KKwlkYmcoIiVzIC0gc3RhcnQgcmVhZCB1cmIiLCBfX0ZVTkNUSU9OX18pOworCXVyYiA9IHBvcnQtPnJlYWRfdXJiOworCWlmICghdXJiKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gbm8gcmVhZCB1cmJcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCWdvdG8gdW5saW5rX2ludF91cmI7CisJfQorCXRwb3J0LT50cF9yZWFkX3VyYl9zdGF0ZSA9IFRJX1JFQURfVVJCX1JVTk5JTkc7CisJdXJiLT5jb21wbGV0ZSA9IHRpX2J1bGtfaW5fY2FsbGJhY2s7CisJdXJiLT5jb250ZXh0ID0gdHBvcnQ7CisJdXJiLT5kZXYgPSBkZXY7CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gc3VibWl0IHJlYWQgdXJiIGZhaWxlZCwgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJZ290byB1bmxpbmtfaW50X3VyYjsKKwl9CisKKwl0cG9ydC0+dHBfaXNfb3BlbiA9IDE7CisJKyt0ZGV2LT50ZF9vcGVuX3BvcnRfY291bnQ7CisKKwlnb3RvIHVwX3NlbTsKKwordW5saW5rX2ludF91cmI6CisJaWYgKHRkZXYtPnRkX29wZW5fcG9ydF9jb3VudCA9PSAwKQorCQl1c2Jfa2lsbF91cmIocG9ydC0+c2VyaWFsLT5wb3J0WzBdLT5pbnRlcnJ1cHRfaW5fdXJiKTsKK3VwX3NlbToKKwl1cCgmdGRldi0+dGRfb3Blbl9jbG9zZV9zZW0pOworCWRiZygiJXMgLSBleGl0ICVkIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKworc3RhdGljIHZvaWQgdGlfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHRpX2RldmljZSAqdGRldjsKKwlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQ7CisJaW50IHBvcnRfbnVtYmVyOworCWludCBzdGF0dXM7CisJaW50IGRvX3VwOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCQkgCisJdGRldiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKKwl0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpZiAodGRldiA9PSBOVUxMIHx8IHRwb3J0ID09IE5VTEwpCisJCXJldHVybjsKKworCXRwb3J0LT50cF9pc19vcGVuID0gMDsKKworCXRpX2RyYWluKHRwb3J0LCAodHBvcnQtPnRwX2Nsb3Npbmdfd2FpdCpIWikvMTAwLCAxKTsKKworCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJdHBvcnQtPnRwX3dyaXRlX3VyYl9pbl91c2UgPSAwOworCisJcG9ydF9udW1iZXIgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOworCisJZGJnKCIlcyAtIHNlbmRpbmcgVElfQ0xPU0VfUE9SVCIsIF9fRlVOQ1RJT05fXyk7CisJc3RhdHVzID0gdGlfY29tbWFuZF9vdXRfc3luYyh0ZGV2LCBUSV9DTE9TRV9QT1JULAorCQkgICAgIChfX3U4KShUSV9VQVJUMV9QT1JUICsgcG9ydF9udW1iZXIpLCAwLCBOVUxMLCAwKTsKKwlpZiAoc3RhdHVzKQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGNhbm5vdCBzZW5kIGNsb3NlIHBvcnQgY29tbWFuZCwgJWRcbiIgLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisKKwkvKiBpZiBkb3duIGlzIGludGVycnVwdGVkLCBjb250aW51ZSBhbnl3YXkgKi8KKwlkb191cCA9ICFkb3duX2ludGVycnVwdGlibGUoJnRkZXYtPnRkX29wZW5fY2xvc2Vfc2VtKTsKKwktLXRwb3J0LT50cF90ZGV2LT50ZF9vcGVuX3BvcnRfY291bnQ7CisJaWYgKHRwb3J0LT50cF90ZGV2LT50ZF9vcGVuX3BvcnRfY291bnQgPD0gMCkgeworCQkvKiBsYXN0IHBvcnQgaXMgY2xvc2VkLCBzaHV0IGRvd24gaW50ZXJydXB0IHVyYiAqLworCQl1c2Jfa2lsbF91cmIocG9ydC0+c2VyaWFsLT5wb3J0WzBdLT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwkJdHBvcnQtPnRwX3RkZXYtPnRkX29wZW5fcG9ydF9jb3VudCA9IDA7CisJfQorCWlmIChkb191cCkKKwkJdXAoJnRkZXYtPnRkX29wZW5fY2xvc2Vfc2VtKTsKKworCWRiZygiJXMgLSBleGl0IiwgX19GVU5DVElPTl9fKTsKK30KKworCitzdGF0aWMgaW50IHRpX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJaW50IGNvdW50KQoreworCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoY291bnQgPT0gMCkgeworCQlkYmcoIiVzIC0gd3JpdGUgcmVxdWVzdCBvZiAwIGJ5dGVzIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHRwb3J0ID09IE5VTEwgfHwgIXRwb3J0LT50cF9pc19vcGVuKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCWNvdW50ID0gdGlfYnVmX3B1dCh0cG9ydC0+dHBfd3JpdGVfYnVmLCBkYXRhLCBjb3VudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKworCXRpX3NlbmQodHBvcnQpOworCisJcmV0dXJuIGNvdW50OworfQorCisKK3N0YXRpYyBpbnQgdGlfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgcm9vbSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHRwb3J0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCQorCXNwaW5fbG9ja19pcnFzYXZlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCXJvb20gPSB0aV9idWZfc3BhY2VfYXZhaWwodHBvcnQtPnRwX3dyaXRlX2J1Zik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19GVU5DVElPTl9fLCByb29tKTsKKwlyZXR1cm4gcm9vbTsKK30KKworCitzdGF0aWMgaW50IHRpX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgY2hhcnMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICh0cG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCWNoYXJzID0gdGlfYnVmX2RhdGFfYXZhaWwodHBvcnQtPnRwX3dyaXRlX2J1Zik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19GVU5DVElPTl9fLCBjaGFycyk7CisJcmV0dXJuIGNoYXJzOworfQorCisKK3N0YXRpYyB2b2lkIHRpX3Rocm90dGxlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHRpX3BvcnQgKnRwb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICh0cG9ydCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKCF0dHkpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoSV9JWE9GRih0dHkpIHx8IENfQ1JUU0NUUyh0dHkpKQorCQl0aV9zdG9wX3JlYWQodHBvcnQsIHR0eSk7CisKK30KKworCitzdGF0aWMgdm9pZCB0aV91bnRocm90dGxlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHRpX3BvcnQgKnRwb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHRwb3J0ID09IE5VTEwpCisJCXJldHVybjsKKworCXR0eSA9IHBvcnQtPnR0eTsKKwlpZiAoIXR0eSkgeworCQlkYmcoIiVzIC0gbm8gdHR5IiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChJX0lYT0ZGKHR0eSkgfHwgQ19DUlRTQ1RTKHR0eSkpIHsKKwkJc3RhdHVzID0gdGlfcmVzdGFydF9yZWFkKHRwb3J0LCB0dHkpOworCQlpZiAoc3RhdHVzKQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBjYW5ub3QgcmVzdGFydCByZWFkLCAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCX0KK30KKworCitzdGF0aWMgaW50IHRpX2lvY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgYXN5bmNfaWNvdW50IGNub3c7CisJc3RydWN0IGFzeW5jX2ljb3VudCBjcHJldjsKKworCWRiZygiJXMgLSBwb3J0ICVkLCBjbWQgPSAweCUwNFgiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY21kKTsKKworCWlmICh0cG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgVElPQ0dTRVJJQUw6CisJCQlkYmcoIiVzIC0gKCVkKSBUSU9DR1NFUklBTCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJCXJldHVybiB0aV9nZXRfc2VyaWFsX2luZm8odHBvcnQsIChzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKilhcmcpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUSU9DU1NFUklBTDoKKwkJCWRiZygiJXMgLSAoJWQpIFRJT0NTU0VSSUFMIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQkJcmV0dXJuIHRpX3NldF9zZXJpYWxfaW5mbyh0cG9ydCwgKHN0cnVjdCBzZXJpYWxfc3RydWN0IF9fdXNlciAqKWFyZyk7CisJCQlicmVhazsKKworCQljYXNlIFRJT0NNSVdBSVQ6CisJCQlkYmcoIiVzIC0gKCVkKSBUSU9DTUlXQUlUIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQkJY3ByZXYgPSB0cG9ydC0+dHBfaWNvdW50OworCQkJd2hpbGUgKDEpIHsKKwkJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZ0cG9ydC0+dHBfbXNyX3dhaXQpOworCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJCQljbm93ID0gdHBvcnQtPnRwX2ljb3VudDsKKwkJCQlpZiAoY25vdy5ybmcgPT0gY3ByZXYucm5nICYmIGNub3cuZHNyID09IGNwcmV2LmRzciAmJgorCQkJCSAgICBjbm93LmRjZCA9PSBjcHJldi5kY2QgJiYgY25vdy5jdHMgPT0gY3ByZXYuY3RzKQorCQkJCQlyZXR1cm4gLUVJTzsgLyogbm8gY2hhbmdlID0+IGVycm9yICovCisJCQkJaWYgKCgoYXJnICYgVElPQ01fUk5HKSAmJiAoY25vdy5ybmcgIT0gY3ByZXYucm5nKSkgfHwKKwkJCQkgICAgKChhcmcgJiBUSU9DTV9EU1IpICYmIChjbm93LmRzciAhPSBjcHJldi5kc3IpKSB8fAorCQkJCSAgICAoKGFyZyAmIFRJT0NNX0NEKSAgJiYgKGNub3cuZGNkICE9IGNwcmV2LmRjZCkpIHx8CisJCQkJICAgICgoYXJnICYgVElPQ01fQ1RTKSAmJiAoY25vdy5jdHMgIT0gY3ByZXYuY3RzKSkgKSB7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCQljcHJldiA9IGNub3c7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFRJT0NHSUNPVU5UOgorCQkJZGJnKCIlcyAtICglZCkgVElPQ0dJQ09VTlQgUlg9JWQsIFRYPSVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIHRwb3J0LT50cF9pY291bnQucngsIHRwb3J0LT50cF9pY291bnQudHgpOworCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZ0cG9ydC0+dHBfaWNvdW50LCBzaXplb2YodHBvcnQtPnRwX2ljb3VudCkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworCitzdGF0aWMgdm9pZCB0aV9zZXRfdGVybWlvcyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCXN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnR0eTsKKwlzdHJ1Y3QgdGlfdWFydF9jb25maWcgKmNvbmZpZzsKKwl0Y2ZsYWdfdCBjZmxhZyxpZmxhZzsKKwlpbnQgYmF1ZDsKKwlpbnQgc3RhdHVzOworCWludCBwb3J0X251bWJlciA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3I7CisJdW5zaWduZWQgaW50IG1jcjsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCF0dHkgfHwgIXR0eS0+dGVybWlvcykgeworCQlkYmcoIiVzIC0gbm8gdHR5IG9yIHRlcm1pb3MiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJaWZsYWcgPSB0dHktPnRlcm1pb3MtPmNfaWZsYWc7CisKKwlpZiAob2xkX3Rlcm1pb3MgJiYgY2ZsYWcgPT0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWcKKwkmJiBpZmxhZyA9PSBvbGRfdGVybWlvcy0+Y19pZmxhZykgeworCQlkYmcoIiVzIC0gbm90aGluZyB0byBjaGFuZ2UiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJZGJnKCIlcyAtIGNsZmFnICUwOHgsIGlmbGFnICUwOHgiLCBfX0ZVTkNUSU9OX18sIGNmbGFnLCBpZmxhZyk7CisKKwlpZiAob2xkX3Rlcm1pb3MpCisJCWRiZygiJXMgLSBvbGQgY2xmYWcgJTA4eCwgb2xkIGlmbGFnICUwOHgiLCBfX0ZVTkNUSU9OX18sIG9sZF90ZXJtaW9zLT5jX2NmbGFnLCBvbGRfdGVybWlvcy0+Y19pZmxhZyk7CisKKwlpZiAodHBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJY29uZmlnID0ga21hbGxvYyhzaXplb2YoKmNvbmZpZyksIEdGUF9LRVJORUwpOworCWlmICghY29uZmlnKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWNvbmZpZy0+d0ZsYWdzID0gMDsKKworCS8qIHRoZXNlIGZsYWdzIG11c3QgYmUgc2V0ICovCisJY29uZmlnLT53RmxhZ3MgfD0gVElfVUFSVF9FTkFCTEVfTVNfSU5UUzsKKwljb25maWctPndGbGFncyB8PSBUSV9VQVJUX0VOQUJMRV9BVVRPX1NUQVJUX0RNQTsKKwljb25maWctPmJVYXJ0TW9kZSA9IChfX3U4KSh0cG9ydC0+dHBfdWFydF9tb2RlKTsKKworCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgeworCQljYXNlIENTNToKKwkJCSAgICBjb25maWctPmJEYXRhQml0cyA9IFRJX1VBUlRfNV9EQVRBX0JJVFM7CisJCQkgICAgYnJlYWs7CisJCWNhc2UgQ1M2OgorCQkJICAgIGNvbmZpZy0+YkRhdGFCaXRzID0gVElfVUFSVF82X0RBVEFfQklUUzsKKwkJCSAgICBicmVhazsKKwkJY2FzZSBDUzc6CisJCQkgICAgY29uZmlnLT5iRGF0YUJpdHMgPSBUSV9VQVJUXzdfREFUQV9CSVRTOworCQkJICAgIGJyZWFrOworCQlkZWZhdWx0OgorCQljYXNlIENTODoKKwkJCSAgICBjb25maWctPmJEYXRhQml0cyA9IFRJX1VBUlRfOF9EQVRBX0JJVFM7CisJCQkgICAgYnJlYWs7CisJfQorCisJaWYgKGNmbGFnICYgUEFSRU5CKSB7CisJCWlmIChjZmxhZyAmIFBBUk9ERCkgeworCQkJY29uZmlnLT53RmxhZ3MgfD0gVElfVUFSVF9FTkFCTEVfUEFSSVRZX0NIRUNLSU5HOworCQkJY29uZmlnLT5iUGFyaXR5ID0gVElfVUFSVF9PRERfUEFSSVRZOworCQl9IGVsc2UgeworCQkJY29uZmlnLT53RmxhZ3MgfD0gVElfVUFSVF9FTkFCTEVfUEFSSVRZX0NIRUNLSU5HOworCQkJY29uZmlnLT5iUGFyaXR5ID0gVElfVUFSVF9FVkVOX1BBUklUWTsKKwkJfQorCX0gZWxzZSB7CisJCWNvbmZpZy0+d0ZsYWdzICY9IH5USV9VQVJUX0VOQUJMRV9QQVJJVFlfQ0hFQ0tJTkc7CisJCWNvbmZpZy0+YlBhcml0eSA9IFRJX1VBUlRfTk9fUEFSSVRZOyAJCisJfQorCisJaWYgKGNmbGFnICYgQ1NUT1BCKQorCQljb25maWctPmJTdG9wQml0cyA9IFRJX1VBUlRfMl9TVE9QX0JJVFM7CisJZWxzZQorCQljb25maWctPmJTdG9wQml0cyA9IFRJX1VBUlRfMV9TVE9QX0JJVFM7CisKKwlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CisJCS8qIFJUUyBmbG93IGNvbnRyb2wgbXVzdCBiZSBvZmYgdG8gZHJvcCBSVFMgZm9yIGJhdWQgcmF0ZSBCMCAqLworCQlpZiAoKGNmbGFnICYgQ0JBVUQpICE9IEIwKQorCQkJY29uZmlnLT53RmxhZ3MgfD0gVElfVUFSVF9FTkFCTEVfUlRTX0lOOworCQljb25maWctPndGbGFncyB8PSBUSV9VQVJUX0VOQUJMRV9DVFNfT1VUOworCX0gZWxzZSB7CisJCXR0eS0+aHdfc3RvcHBlZCA9IDA7CisJCXRpX3Jlc3RhcnRfcmVhZCh0cG9ydCwgdHR5KTsKKwl9CisKKwlpZiAoSV9JWE9GRih0dHkpIHx8IElfSVhPTih0dHkpKSB7CisJCWNvbmZpZy0+Y1hvbiAgPSBTVEFSVF9DSEFSKHR0eSk7CisJCWNvbmZpZy0+Y1hvZmYgPSBTVE9QX0NIQVIodHR5KTsKKworCQlpZiAoSV9JWE9GRih0dHkpKQorCQkJY29uZmlnLT53RmxhZ3MgfD0gVElfVUFSVF9FTkFCTEVfWF9JTjsKKwkJZWxzZQorCQkJdGlfcmVzdGFydF9yZWFkKHRwb3J0LCB0dHkpOworCisJCWlmIChJX0lYT04odHR5KSkKKwkJCWNvbmZpZy0+d0ZsYWdzIHw9IFRJX1VBUlRfRU5BQkxFX1hfT1VUOworCX0KKworCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOworCWlmICghYmF1ZCkgYmF1ZCA9IDk2MDA7CisJaWYgKHRwb3J0LT50cF90ZGV2LT50ZF9pc18zNDEwKQorCQljb25maWctPndCYXVkUmF0ZSA9IChfX3UxNikoKDkyMzA3NyArIGJhdWQvMikgLyBiYXVkKTsKKwllbHNlCisJCWNvbmZpZy0+d0JhdWRSYXRlID0gKF9fdTE2KSgoNDYxNTM4ICsgYmF1ZC8yKSAvIGJhdWQpOworCisJZGJnKCIlcyAtIEJhdWRSYXRlPSVkLCB3QmF1ZFJhdGU9JWQsIHdGbGFncz0weCUwNFgsIGJEYXRhQml0cz0lZCwgYlBhcml0eT0lZCwgYlN0b3BCaXRzPSVkLCBjWG9uPSVkLCBjWG9mZj0lZCwgYlVhcnRNb2RlPSVkIiwKKwlfX0ZVTkNUSU9OX18sIGJhdWQsIGNvbmZpZy0+d0JhdWRSYXRlLCBjb25maWctPndGbGFncywgY29uZmlnLT5iRGF0YUJpdHMsIGNvbmZpZy0+YlBhcml0eSwgY29uZmlnLT5iU3RvcEJpdHMsIGNvbmZpZy0+Y1hvbiwgY29uZmlnLT5jWG9mZiwgY29uZmlnLT5iVWFydE1vZGUpOworCisJY3B1X3RvX2JlMTZzKCZjb25maWctPndCYXVkUmF0ZSk7CisJY3B1X3RvX2JlMTZzKCZjb25maWctPndGbGFncyk7CisKKwlzdGF0dXMgPSB0aV9jb21tYW5kX291dF9zeW5jKHRwb3J0LT50cF90ZGV2LCBUSV9TRVRfQ09ORklHLAorCQkoX191OCkoVElfVUFSVDFfUE9SVCArIHBvcnRfbnVtYmVyKSwgMCwgKF9fdTggKiljb25maWcsCisJCXNpemVvZigqY29uZmlnKSk7CisJaWYgKHN0YXR1cykKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBjYW5ub3Qgc2V0IGNvbmZpZyBvbiBwb3J0ICVkLCAlZFxuIiwgX19GVU5DVElPTl9fLCBwb3J0X251bWJlciwgc3RhdHVzKTsKKworCS8qIFNFVF9DT05GSUcgYXNzZXJ0cyBSVFMgYW5kIERUUiwgcmVzZXQgdGhlbSBjb3JyZWN0bHkgKi8KKwltY3IgPSB0cG9ydC0+dHBfc2hhZG93X21jcjsKKwkvKiBpZiBiYXVkIHJhdGUgaXMgQjAsIGNsZWFyIFJUUyBhbmQgRFRSICovCisJaWYgKChjZmxhZyAmIENCQVVEKSA9PSBCMCkKKwkJbWNyICY9IH4oVElfTUNSX0RUUiB8IFRJX01DUl9SVFMpOworCXN0YXR1cyA9IHRpX3NldF9tY3IodHBvcnQsIG1jcik7CisJaWYgKHN0YXR1cykKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBjYW5ub3Qgc2V0IG1vZGVtIGNvbnRyb2wgb24gcG9ydCAlZCwgJWRcbiIsIF9fRlVOQ1RJT05fXywgcG9ydF9udW1iZXIsIHN0YXR1cyk7CisKKwlrZnJlZShjb25maWcpOworfQorCisKK3N0YXRpYyBpbnQgdGlfdGlvY21nZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHRpX3BvcnQgKnRwb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGludCByZXN1bHQ7CisJdW5zaWduZWQgaW50IG1zcjsKKwl1bnNpZ25lZCBpbnQgbWNyOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAodHBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltc3IgPSB0cG9ydC0+dHBfbXNyOworCW1jciA9IHRwb3J0LT50cF9zaGFkb3dfbWNyOworCisJcmVzdWx0ID0gKChtY3IgJiBUSV9NQ1JfRFRSKSA/IFRJT0NNX0RUUiA6IDApCisJCXwgKChtY3IgJiBUSV9NQ1JfUlRTKSA/IFRJT0NNX1JUUyA6IDApCisJCXwgKChtY3IgJiBUSV9NQ1JfTE9PUCkgPyBUSU9DTV9MT09QIDogMCkKKwkJfCAoKG1zciAmIFRJX01TUl9DVFMpID8gVElPQ01fQ1RTIDogMCkKKwkJfCAoKG1zciAmIFRJX01TUl9DRCkgPyBUSU9DTV9DQVIgOiAwKQorCQl8ICgobXNyICYgVElfTVNSX1JJKSA/IFRJT0NNX1JJIDogMCkKKwkJfCAoKG1zciAmIFRJX01TUl9EU1IpID8gVElPQ01fRFNSIDogMCk7CisKKwlkYmcoIiVzIC0gMHglMDRYIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgaW50IHRpX3Rpb2Ntc2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgaW50IG1jcjsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHRwb3J0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJbWNyID0gdHBvcnQtPnRwX3NoYWRvd19tY3I7CisKKwlpZiAoc2V0ICYgVElPQ01fUlRTKQorCQltY3IgfD0gVElfTUNSX1JUUzsKKwlpZiAoc2V0ICYgVElPQ01fRFRSKQorCQltY3IgfD0gVElfTUNSX0RUUjsKKwlpZiAoc2V0ICYgVElPQ01fTE9PUCkKKwkJbWNyIHw9IFRJX01DUl9MT09QOworCisJaWYgKGNsZWFyICYgVElPQ01fUlRTKQorCQltY3IgJj0gflRJX01DUl9SVFM7CisJaWYgKGNsZWFyICYgVElPQ01fRFRSKQorCQltY3IgJj0gflRJX01DUl9EVFI7CisJaWYgKGNsZWFyICYgVElPQ01fTE9PUCkKKwkJbWNyICY9IH5USV9NQ1JfTE9PUDsKKworCXJldHVybiB0aV9zZXRfbWNyKHRwb3J0LCBtY3IpOworfQorCisKK3N0YXRpYyB2b2lkIHRpX2JyZWFrKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkKK3sKKwlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMgLSBzdGF0ZSA9ICVkIiwgX19GVU5DVElPTl9fLCBicmVha19zdGF0ZSk7CisKKwlpZiAodHBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJdGlfZHJhaW4odHBvcnQsICh0cG9ydC0+dHBfY2xvc2luZ193YWl0KkhaKS8xMDAsIDApOworCisJc3RhdHVzID0gdGlfd3JpdGVfYnl0ZSh0cG9ydC0+dHBfdGRldiwKKwkJdHBvcnQtPnRwX3VhcnRfYmFzZV9hZGRyICsgVElfVUFSVF9PRkZTRVRfTENSLAorCQlUSV9MQ1JfQlJFQUssIGJyZWFrX3N0YXRlID09IC0xID8gVElfTENSX0JSRUFLIDogMCk7CisKKwlpZiAoc3RhdHVzKQorCQlkYmcoIiVzIC0gZXJyb3Igc2V0dGluZyBicmVhaywgJWQiLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7Cit9CisKKworc3RhdGljIHZvaWQgdGlfaW50ZXJydXB0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHRpX2RldmljZSAqdGRldiA9IChzdHJ1Y3QgdGlfZGV2aWNlICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHRkZXYtPnRkX3NlcmlhbDsKKwlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnVyYi0+ZGV2LT5kZXY7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCBsZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJaW50IHBvcnRfbnVtYmVyOworCWludCBmdW5jdGlvbjsKKwlpbnQgc3RhdHVzOworCV9fdTggbXNyOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biwgJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJdGRldi0+dGRfdXJiX2Vycm9yID0gMTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LCAiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJdGRldi0+dGRfdXJiX2Vycm9yID0gMTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChsZW5ndGggIT0gMikgeworCQlkYmcoIiVzIC0gYmFkIHBhY2tldCBzaXplLCAlZCIsIF9fRlVOQ1RJT05fXywgbGVuZ3RoKTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChkYXRhWzBdID09IFRJX0NPREVfSEFSRFdBUkVfRVJST1IpIHsKKwkJZGV2X2VycihkZXYsICIlcyAtIGhhcmR3YXJlIGVycm9yLCAlZFxuIiwgX19GVU5DVElPTl9fLCBkYXRhWzFdKTsKKwkJZ290byBleGl0OworCX0KKworCXBvcnRfbnVtYmVyID0gVElfR0VUX1BPUlRfRlJPTV9DT0RFKGRhdGFbMF0pOworCWZ1bmN0aW9uID0gVElfR0VUX0ZVTkNfRlJPTV9DT0RFKGRhdGFbMF0pOworCisJZGJnKCIlcyAtIHBvcnRfbnVtYmVyICVkLCBmdW5jdGlvbiAlZCwgZGF0YSAweCUwMlgiLCBfX0ZVTkNUSU9OX18sIHBvcnRfbnVtYmVyLCBmdW5jdGlvbiwgZGF0YVsxXSk7CisKKwlpZiAocG9ydF9udW1iZXIgPj0gc2VyaWFsLT5udW1fcG9ydHMpIHsKKwkJZGV2X2VycihkZXYsICIlcyAtIGJhZCBwb3J0IG51bWJlciwgJWRcbiIsIF9fRlVOQ1RJT05fXywgcG9ydF9udW1iZXIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcG9ydCA9IHNlcmlhbC0+cG9ydFtwb3J0X251bWJlcl07CisKKwl0cG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpZiAoIXRwb3J0KQorCQlnb3RvIGV4aXQ7CisKKwlzd2l0Y2ggKGZ1bmN0aW9uKSB7CisJY2FzZSBUSV9DT0RFX0RBVEFfRVJST1I6CisJCWRldl9lcnIoZGV2LCAiJXMgLSBEQVRBIEVSUk9SLCBwb3J0ICVkLCBkYXRhIDB4JTAyWFxuIiwgX19GVU5DVElPTl9fLCBwb3J0X251bWJlciwgZGF0YVsxXSk7CisJCWJyZWFrOworCisJY2FzZSBUSV9DT0RFX01PREVNX1NUQVRVUzoKKwkJbXNyID0gZGF0YVsxXTsKKwkJZGJnKCIlcyAtIHBvcnQgJWQsIG1zciAweCUwMlgiLCBfX0ZVTkNUSU9OX18sIHBvcnRfbnVtYmVyLCBtc3IpOworCQl0aV9oYW5kbGVfbmV3X21zcih0cG9ydCwgbXNyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgIiVzIC0gdW5rbm93biBpbnRlcnJ1cHQgY29kZSwgMHglMDJYXG4iLCBfX0ZVTkNUSU9OX18sIGRhdGFbMV0pOworCQlicmVhazsKKwl9CisKK2V4aXQ6CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzKQorCQlkZXZfZXJyKGRldiwgIiVzIC0gcmVzdWJtaXQgaW50ZXJydXB0IHVyYiBmYWlsZWQsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7Cit9CisKKworc3RhdGljIHZvaWQgdGlfYnVsa19pbl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB0aV9wb3J0ICp0cG9ydCA9IChzdHJ1Y3QgdGlfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHBvcnQtPnRwX3BvcnQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnVyYi0+ZGV2LT5kZXY7CisJaW50IHN0YXR1cyA9IDA7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duLCAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQl0cG9ydC0+dHBfdGRldi0+dGRfdXJiX2Vycm9yID0gMTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0cG9ydC0+dHBfd3JpdGVfd2FpdCk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzLCAlZFxuIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyApOworCQl0cG9ydC0+dHBfdGRldi0+dGRfdXJiX2Vycm9yID0gMTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0cG9ydC0+dHBfd3JpdGVfd2FpdCk7CisJfQorCisJaWYgKHVyYi0+c3RhdHVzID09IC1FUElQRSkKKwkJZ290byBleGl0OworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRldl9lcnIoZGV2LCAiJXMgLSBzdG9wcGluZyByZWFkIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChwb3J0LT50dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgZGV2LCBfX0ZVTkNUSU9OX18sCisJCQl1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCQlpZiAoIXRwb3J0LT50cF9pc19vcGVuKQorCQkJZGJnKCIlcyAtIHBvcnQgY2xvc2VkLCBkcm9wcGluZyBkYXRhIiwgX19GVU5DVElPTl9fKTsKKwkJZWxzZQorCQkJdGlfcmVjdigmdXJiLT5kZXYtPmRldiwgcG9ydC0+dHR5LCB1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGgpOworCisJCXNwaW5fbG9jaygmdHBvcnQtPnRwX2xvY2spOworCQl0cG9ydC0+dHBfaWNvdW50LnJ4ICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJc3Bpbl91bmxvY2soJnRwb3J0LT50cF9sb2NrKTsKKwl9CisKK2V4aXQ6CisJLyogY29udGludWUgdG8gcmVhZCB1bmxlc3Mgc3RvcHBpbmcgKi8KKwlzcGluX2xvY2soJnRwb3J0LT50cF9sb2NrKTsKKwlpZiAodHBvcnQtPnRwX3JlYWRfdXJiX3N0YXRlID09IFRJX1JFQURfVVJCX1JVTk5JTkcpIHsKKwkJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwl9IGVsc2UgaWYgKHRwb3J0LT50cF9yZWFkX3VyYl9zdGF0ZSA9PSBUSV9SRUFEX1VSQl9TVE9QUElORykgeworCQl0cG9ydC0+dHBfcmVhZF91cmJfc3RhdGUgPSBUSV9SRUFEX1VSQl9TVE9QUEVEOworCX0KKwlzcGluX3VubG9jaygmdHBvcnQtPnRwX2xvY2spOworCWlmIChzdGF0dXMpCisJCWRldl9lcnIoZGV2LCAiJXMgLSByZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7Cit9CisKKworc3RhdGljIHZvaWQgdGlfYnVsa19vdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQgPSAoc3RydWN0IHRpX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHRwb3J0LT50cF9wb3J0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1cmItPmRldi0+ZGV2OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwl0cG9ydC0+dHBfd3JpdGVfdXJiX2luX3VzZSA9IDA7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biwgJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJdHBvcnQtPnRwX3RkZXYtPnRkX3VyYl9lcnJvciA9IDE7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHBvcnQtPnRwX3dyaXRlX3dhaXQpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cywgJWRcbiIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQl0cG9ydC0+dHBfdGRldi0+dGRfdXJiX2Vycm9yID0gMTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0cG9ydC0+dHBfd3JpdGVfd2FpdCk7CisJfQorCisJLyogc2VuZCBhbnkgYnVmZmVyZWQgZGF0YSAqLworCXRpX3NlbmQodHBvcnQpOworfQorCisKK3N0YXRpYyB2b2lkIHRpX3JlY3Yoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCXVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgpCit7CisJaW50IGNudDsKKworCWRvIHsKKwkJaWYgKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJaWYgKHR0eS0+ZmxpcC5jb3VudCA+PSBUVFlfRkxJUEJVRl9TSVpFKSB7CisJCQkJZGV2X2VycihkZXYsICIlcyAtIGRyb3BwaW5nIGRhdGEsICVkIGJ5dGVzIGxvc3RcbiIsIF9fRlVOQ1RJT05fXywgbGVuZ3RoKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwkJY250ID0gbWluKGxlbmd0aCwgVFRZX0ZMSVBCVUZfU0laRSAtIHR0eS0+ZmxpcC5jb3VudCk7CisJCW1lbWNweSh0dHktPmZsaXAuY2hhcl9idWZfcHRyLCBkYXRhLCBjbnQpOworCQltZW1zZXQodHR5LT5mbGlwLmZsYWdfYnVmX3B0ciwgMCwgY250KTsKKwkJdHR5LT5mbGlwLmNoYXJfYnVmX3B0ciArPSBjbnQ7CisJCXR0eS0+ZmxpcC5mbGFnX2J1Zl9wdHIgKz0gY250OworCQl0dHktPmZsaXAuY291bnQgKz0gY250OworCQlkYXRhICs9IGNudDsKKwkJbGVuZ3RoIC09IGNudDsKKwl9IHdoaWxlIChsZW5ndGggPiAwKTsKKworCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Cit9CisKKworc3RhdGljIHZvaWQgdGlfc2VuZChzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQpCit7CisJaW50IGNvdW50LCByZXN1bHQ7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHRwb3J0LT50cF9wb3J0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKworCWlmICh0cG9ydC0+dHBfd3JpdGVfdXJiX2luX3VzZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJY291bnQgPSB0aV9idWZfZ2V0KHRwb3J0LT50cF93cml0ZV9idWYsCisJCQkJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJcG9ydC0+YnVsa19vdXRfc2l6ZSk7CisKKwlpZiAoY291bnQgPT0gMCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJdHBvcnQtPnRwX3dyaXRlX3VyYl9pbl91c2UgPSAxOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBjb3VudCwgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCisJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+d3JpdGVfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKKwkJCSAgIHVzYl9zbmRidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKKwkJCQkJICAgIHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkgICBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgY291bnQsCisJCQkgICB0aV9idWxrX291dF9jYWxsYmFjaywgdHBvcnQpOworCisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gc3VibWl0IHdyaXRlIHVyYiBmYWlsZWQsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCXRwb3J0LT50cF93cml0ZV91cmJfaW5fdXNlID0gMDsgCisJCS8qIFRPRE86IHJlc2NoZWR1bGUgdGlfc2VuZCAqLworCX0gZWxzZSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCQl0cG9ydC0+dHBfaWNvdW50LnR4ICs9IGNvdW50OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCX0KKworCS8qIG1vcmUgcm9vbSBpbiB0aGUgYnVmZmVyIGZvciBuZXcgd3JpdGVzLCB3YWtldXAgKi8KKwlpZiAodHR5KQorCQl0dHlfd2FrZXVwKHR0eSk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0cG9ydC0+dHBfd3JpdGVfd2FpdCk7Cit9CisKKworc3RhdGljIGludCB0aV9zZXRfbWNyKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCwgdW5zaWduZWQgaW50IG1jcikKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gdGlfd3JpdGVfYnl0ZSh0cG9ydC0+dHBfdGRldiwKKwkJdHBvcnQtPnRwX3VhcnRfYmFzZV9hZGRyICsgVElfVUFSVF9PRkZTRVRfTUNSLAorCQlUSV9NQ1JfUlRTIHwgVElfTUNSX0RUUiB8IFRJX01DUl9MT09QLCBtY3IpOworCisJaWYgKCFzdGF0dXMpCisJCXRwb3J0LT50cF9zaGFkb3dfbWNyID0gbWNyOworCisJcmV0dXJuIHN0YXR1czsKK30KKworCitzdGF0aWMgaW50IHRpX2dldF9sc3Ioc3RydWN0IHRpX3BvcnQgKnRwb3J0KQoreworCWludCBzaXplLHN0YXR1czsKKwlzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2ID0gdHBvcnQtPnRwX3RkZXY7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHRwb3J0LT50cF9wb3J0OworCWludCBwb3J0X251bWJlciA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3I7CisJc3RydWN0IHRpX3BvcnRfc3RhdHVzICpkYXRhOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzaXplID0gc2l6ZW9mKHN0cnVjdCB0aV9wb3J0X3N0YXR1cyk7CisJZGF0YSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc3RhdHVzID0gdGlfY29tbWFuZF9pbl9zeW5jKHRkZXYsIFRJX0dFVF9QT1JUX1NUQVRVUywKKwkJKF9fdTgpKFRJX1VBUlQxX1BPUlQrcG9ydF9udW1iZXIpLCAwLCAoX191OCAqKWRhdGEsIHNpemUpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBnZXQgcG9ydCBzdGF0dXMgY29tbWFuZCBmYWlsZWQsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCWdvdG8gZnJlZV9kYXRhOworCX0KKworCWRiZygiJXMgLSBsc3IgMHglMDJYIiwgX19GVU5DVElPTl9fLCBkYXRhLT5iTFNSKTsKKworCXRwb3J0LT50cF9sc3IgPSBkYXRhLT5iTFNSOworCitmcmVlX2RhdGE6CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworCitzdGF0aWMgaW50IHRpX2dldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQsCisJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpyZXRfYXJnKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0cG9ydC0+dHBfcG9ydDsKKwlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCByZXRfc2VyaWFsOworCisJaWYgKCFyZXRfYXJnKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCW1lbXNldCgmcmV0X3NlcmlhbCwgMCwgc2l6ZW9mKHJldF9zZXJpYWwpKTsKKworCXJldF9zZXJpYWwudHlwZSA9IFBPUlRfMTY1NTBBOworCXJldF9zZXJpYWwubGluZSA9IHBvcnQtPnNlcmlhbC0+bWlub3I7CisJcmV0X3NlcmlhbC5wb3J0ID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKwlyZXRfc2VyaWFsLmZsYWdzID0gdHBvcnQtPnRwX2ZsYWdzOworCXJldF9zZXJpYWwueG1pdF9maWZvX3NpemUgPSBUSV9XUklURV9CVUZfU0laRTsKKwlyZXRfc2VyaWFsLmJhdWRfYmFzZSA9IHRwb3J0LT50cF90ZGV2LT50ZF9pc18zNDEwID8gOTIxNjAwIDogNDYwODAwOworCXJldF9zZXJpYWwuY2xvc2luZ193YWl0ID0gdHBvcnQtPnRwX2Nsb3Npbmdfd2FpdDsKKworCWlmIChjb3B5X3RvX3VzZXIocmV0X2FyZywgJnJldF9zZXJpYWwsIHNpemVvZigqcmV0X2FyZykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgdGlfc2V0X3NlcmlhbF9pbmZvKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCwKKwlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKm5ld19hcmcpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHRwb3J0LT50cF9wb3J0OworCXN0cnVjdCBzZXJpYWxfc3RydWN0IG5ld19zZXJpYWw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJm5ld19zZXJpYWwsIG5ld19hcmcsIHNpemVvZihuZXdfc2VyaWFsKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJdHBvcnQtPnRwX2ZsYWdzID0gbmV3X3NlcmlhbC5mbGFncyAmIFRJX1NFVF9TRVJJQUxfRkxBR1M7CisJaWYgKHBvcnQtPnR0eSkKKwkJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9CisJCQkodHBvcnQtPnRwX2ZsYWdzICYgQVNZTkNfTE9XX0xBVEVOQ1kpID8gMSA6IDA7CisJdHBvcnQtPnRwX2Nsb3Npbmdfd2FpdCA9IG5ld19zZXJpYWwuY2xvc2luZ193YWl0OworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgdGlfaGFuZGxlX25ld19tc3Ioc3RydWN0IHRpX3BvcnQgKnRwb3J0LCBfX3U4IG1zcikKK3sKKwlzdHJ1Y3QgYXN5bmNfaWNvdW50ICppY291bnQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIG1zciAweCUwMlgiLCBfX0ZVTkNUSU9OX18sIG1zcik7CisKKwlpZiAobXNyICYgVElfTVNSX0RFTFRBX01BU0spIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnRwb3J0LT50cF9sb2NrLCBmbGFncyk7CisJCWljb3VudCA9ICZ0cG9ydC0+dHBfaWNvdW50OworCQlpZiAobXNyICYgVElfTVNSX0RFTFRBX0NUUykKKwkJCWljb3VudC0+Y3RzKys7CisJCWlmIChtc3IgJiBUSV9NU1JfREVMVEFfRFNSKQorCQkJaWNvdW50LT5kc3IrKzsKKwkJaWYgKG1zciAmIFRJX01TUl9ERUxUQV9DRCkKKwkJCWljb3VudC0+ZGNkKys7CisJCWlmIChtc3IgJiBUSV9NU1JfREVMVEFfUkkpCisJCQlpY291bnQtPnJuZysrOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnRwb3J0LT50cF9tc3Jfd2FpdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwb3J0LT50cF9sb2NrLCBmbGFncyk7CisJfQorCisJdHBvcnQtPnRwX21zciA9IG1zciAmIFRJX01TUl9NQVNLOworCisJLyogaGFuZGxlIENUUyBmbG93IGNvbnRyb2wgKi8KKwl0dHkgPSB0cG9ydC0+dHBfcG9ydC0+dHR5OworCWlmICh0dHkgJiYgQ19DUlRTQ1RTKHR0eSkpIHsKKwkJaWYgKG1zciAmIFRJX01TUl9DVFMpIHsKKwkJCXR0eS0+aHdfc3RvcHBlZCA9IDA7CisJCQl0dHlfd2FrZXVwKHR0eSk7CisJCX0gZWxzZSB7CisJCQl0dHktPmh3X3N0b3BwZWQgPSAxOworCQl9CisJfQorfQorCisKK3N0YXRpYyB2b2lkIHRpX2RyYWluKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBpbnQgZmx1c2gpCit7CisJc3RydWN0IHRpX2RldmljZSAqdGRldiA9IHRwb3J0LT50cF90ZGV2OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0cG9ydC0+dHBfcG9ydDsKKwl3YWl0X3F1ZXVlX3Qgd2FpdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKworCS8qIHdhaXQgZm9yIGRhdGEgdG8gZHJhaW4gZnJvbSB0aGUgYnVmZmVyICovCisJdGRldi0+dGRfdXJiX2Vycm9yID0gMDsKKwlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7CisJYWRkX3dhaXRfcXVldWUoJnRwb3J0LT50cF93cml0ZV93YWl0LCAmd2FpdCk7CisJZm9yICg7OykgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlpZiAodGlfYnVmX2RhdGFfYXZhaWwodHBvcnQtPnRwX3dyaXRlX2J1ZikgPT0gMAorCQl8fCB0aW1lb3V0ID09IDAgfHwgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkKKwkJfHwgdGRldi0+dGRfdXJiX2Vycm9yCisJCXx8ICF1c2JfZ2V0X2ludGZkYXRhKHBvcnQtPnNlcmlhbC0+aW50ZXJmYWNlKSkgIC8qIGRpc2Nvbm5lY3QgKi8KKwkJCWJyZWFrOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnRwb3J0LT50cF9sb2NrLCBmbGFncyk7CisJfQorCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJnRwb3J0LT50cF93cml0ZV93YWl0LCAmd2FpdCk7CisKKwkvKiBmbHVzaCBhbnkgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGJ1ZmZlciAqLworCWlmIChmbHVzaCkKKwkJdGlfYnVmX2NsZWFyKHRwb3J0LT50cF93cml0ZV9idWYpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKworCS8qIHdhaXQgZm9yIGRhdGEgdG8gZHJhaW4gZnJvbSB0aGUgZGV2aWNlICovCisJLyogd2FpdCBmb3IgZW1wdHkgdHggcmVnaXN0ZXIsIHBsdXMgMjAgbXMgKi8KKwl0aW1lb3V0ICs9IGppZmZpZXM7CisJdHBvcnQtPnRwX2xzciAmPSB+VElfTFNSX1RYX0VNUFRZOworCXdoaWxlICgobG9uZykoamlmZmllcyAtIHRpbWVvdXQpIDwgMCAmJiAhc2lnbmFsX3BlbmRpbmcoY3VycmVudCkKKwkmJiAhKHRwb3J0LT50cF9sc3ImVElfTFNSX1RYX0VNUFRZKSAmJiAhdGRldi0+dGRfdXJiX2Vycm9yCisJJiYgdXNiX2dldF9pbnRmZGF0YShwb3J0LT5zZXJpYWwtPmludGVyZmFjZSkpIHsgIC8qIG5vdCBkaXNjb25uZWN0ZWQgKi8KKwkJaWYgKHRpX2dldF9sc3IodHBvcnQpKQorCQkJYnJlYWs7CisJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDIwKTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgdGlfc3RvcF9yZWFkKHN0cnVjdCB0aV9wb3J0ICp0cG9ydCwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnRwb3J0LT50cF9sb2NrLCBmbGFncyk7CisKKwlpZiAodHBvcnQtPnRwX3JlYWRfdXJiX3N0YXRlID09IFRJX1JFQURfVVJCX1JVTk5JTkcpCisJCXRwb3J0LT50cF9yZWFkX3VyYl9zdGF0ZSA9IFRJX1JFQURfVVJCX1NUT1BQSU5HOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKK30KKworCitzdGF0aWMgaW50IHRpX3Jlc3RhcnRfcmVhZChzdHJ1Y3QgdGlfcG9ydCAqdHBvcnQsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBzdGF0dXMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHBvcnQtPnRwX2xvY2ssIGZsYWdzKTsKKworCWlmICh0cG9ydC0+dHBfcmVhZF91cmJfc3RhdGUgPT0gVElfUkVBRF9VUkJfU1RPUFBFRCkgeworCQl1cmIgPSB0cG9ydC0+dHBfcG9ydC0+cmVhZF91cmI7CisJCXVyYi0+Y29tcGxldGUgPSB0aV9idWxrX2luX2NhbGxiYWNrOworCQl1cmItPmNvbnRleHQgPSB0cG9ydDsKKwkJdXJiLT5kZXYgPSB0cG9ydC0+dHBfcG9ydC0+c2VyaWFsLT5kZXY7CisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CisJfQorCXRwb3J0LT50cF9yZWFkX3VyYl9zdGF0ZSA9IFRJX1JFQURfVVJCX1JVTk5JTkc7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cG9ydC0+dHBfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworCitzdGF0aWMgaW50IHRpX2NvbW1hbmRfb3V0X3N5bmMoc3RydWN0IHRpX2RldmljZSAqdGRldiwgX191OCBjb21tYW5kLAorCV9fdTE2IG1vZHVsZWlkLCBfX3UxNiB2YWx1ZSwgX191OCAqZGF0YSwgaW50IHNpemUpCit7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyh0ZGV2LT50ZF9zZXJpYWwtPmRldiwKKwkJdXNiX3NuZGN0cmxwaXBlKHRkZXYtPnRkX3NlcmlhbC0+ZGV2LCAwKSwgY29tbWFuZCwKKwkJKFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX09VVCksCisJCXZhbHVlLCBtb2R1bGVpZCwgZGF0YSwgc2l6ZSwgMTAwMCk7CisKKwlpZiAoc3RhdHVzID09IHNpemUpCisJCXN0YXR1cyA9IDA7CisKKwlpZiAoc3RhdHVzID4gMCkKKwkJc3RhdHVzID0gLUVDT01NOworCisJcmV0dXJuIHN0YXR1czsKK30KKworCitzdGF0aWMgaW50IHRpX2NvbW1hbmRfaW5fc3luYyhzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2LCBfX3U4IGNvbW1hbmQsCisJX191MTYgbW9kdWxlaWQsIF9fdTE2IHZhbHVlLCBfX3U4ICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnKHRkZXYtPnRkX3NlcmlhbC0+ZGV2LAorCQl1c2JfcmN2Y3RybHBpcGUodGRldi0+dGRfc2VyaWFsLT5kZXYsIDApLCBjb21tYW5kLAorCQkoVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4pLAorCQl2YWx1ZSwgbW9kdWxlaWQsIGRhdGEsIHNpemUsIDEwMDApOworCisJaWYgKHN0YXR1cyA9PSBzaXplKQorCQlzdGF0dXMgPSAwOworCisJaWYgKHN0YXR1cyA+IDApCisJCXN0YXR1cyA9IC1FQ09NTTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKworc3RhdGljIGludCB0aV93cml0ZV9ieXRlKHN0cnVjdCB0aV9kZXZpY2UgKnRkZXYsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwlfX3U4IG1hc2ssIF9fdTggYnl0ZSkKK3sKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBzaXplOworCXN0cnVjdCB0aV93cml0ZV9kYXRhX2J5dGVzICpkYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ0ZGV2LT50ZF9zZXJpYWwtPmRldi0+ZGV2OworCisJZGJnKCIlcyAtIGFkZHIgMHglMDhsWCwgbWFzayAweCUwMlgsIGJ5dGUgMHglMDJYIiwgX19GVU5DVElPTl9fLCBhZGRyLCBtYXNrLCBieXRlKTsKKworCXNpemUgPSBzaXplb2Yoc3RydWN0IHRpX3dyaXRlX2RhdGFfYnl0ZXMpICsgMjsKKwlkYXRhID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKKwkJZGV2X2VycihkZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRhdGEtPmJBZGRyVHlwZSA9IFRJX1JXX0RBVEFfQUREUl9YREFUQTsKKwlkYXRhLT5iRGF0YVR5cGUgPSBUSV9SV19EQVRBX0JZVEU7CisJZGF0YS0+YkRhdGFDb3VudGVyID0gMTsKKwlkYXRhLT53QmFzZUFkZHJIaSA9IGNwdV90b19iZTE2KGFkZHI+PjE2KTsKKwlkYXRhLT53QmFzZUFkZHJMbyA9IGNwdV90b19iZTE2KGFkZHIpOworCWRhdGEtPmJEYXRhWzBdID0gbWFzazsKKwlkYXRhLT5iRGF0YVsxXSA9IGJ5dGU7CisKKwlzdGF0dXMgPSB0aV9jb21tYW5kX291dF9zeW5jKHRkZXYsIFRJX1dSSVRFX0RBVEEsIFRJX1JBTV9QT1JULCAwLAorCQkoX191OCAqKWRhdGEsIHNpemUpOworCisJaWYgKHN0YXR1cyA8IDApCisJCWRldl9lcnIoZGV2LCAiJXMgLSBmYWlsZWQsICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisKKwlrZnJlZShkYXRhKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKworc3RhdGljIGludCB0aV9kb3dubG9hZF9maXJtd2FyZShzdHJ1Y3QgdGlfZGV2aWNlICp0ZGV2LAorCXVuc2lnbmVkIGNoYXIgKmZpcm13YXJlLCB1bnNpZ25lZCBpbnQgZmlybXdhcmVfc2l6ZSkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlpbnQgYnVmZmVyX3NpemU7CisJaW50IHBvczsKKwlpbnQgbGVuOworCWludCBkb25lOworCV9fdTggY3MgPSAwOworCV9fdTggKmJ1ZmZlcjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gdGRldi0+dGRfc2VyaWFsLT5kZXY7CisJc3RydWN0IHRpX2Zpcm13YXJlX2hlYWRlciAqaGVhZGVyOworCXVuc2lnbmVkIGludCBwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKGRldiwKKwkJdGRldi0+dGRfc2VyaWFsLT5wb3J0WzBdLT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpOworCisKKwlidWZmZXJfc2l6ZSA9IFRJX0ZJUk1XQVJFX0JVRl9TSVpFICsgc2l6ZW9mKHN0cnVjdCB0aV9maXJtd2FyZV9oZWFkZXIpOworCWJ1ZmZlciA9IGttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1jcHkoYnVmZmVyLCBmaXJtd2FyZSwgZmlybXdhcmVfc2l6ZSk7CisJbWVtc2V0KGJ1ZmZlcitmaXJtd2FyZV9zaXplLCAweGZmLCBidWZmZXJfc2l6ZS1maXJtd2FyZV9zaXplKTsKKworCWZvcihwb3MgPSBzaXplb2Yoc3RydWN0IHRpX2Zpcm13YXJlX2hlYWRlcik7IHBvcyA8IGJ1ZmZlcl9zaXplOyBwb3MrKykKKwkJY3MgPSAoX191OCkoY3MgKyBidWZmZXJbcG9zXSk7CisKKwloZWFkZXIgPSAoc3RydWN0IHRpX2Zpcm13YXJlX2hlYWRlciAqKWJ1ZmZlcjsKKwloZWFkZXItPndMZW5ndGggPSBjcHVfdG9fbGUxNigoX191MTYpKGJ1ZmZlcl9zaXplIC0gc2l6ZW9mKHN0cnVjdCB0aV9maXJtd2FyZV9oZWFkZXIpKSk7CisJaGVhZGVyLT5iQ2hlY2tTdW0gPSBjczsKKworCWRiZygiJXMgLSBkb3dubG9hZGluZyBmaXJtd2FyZSIsIF9fRlVOQ1RJT05fXyk7CisJZm9yIChwb3MgPSAwOyBwb3MgPCBidWZmZXJfc2l6ZTsgcG9zICs9IGRvbmUpIHsKKwkJbGVuID0gbWluKGJ1ZmZlcl9zaXplIC0gcG9zLCBUSV9ET1dOTE9BRF9NQVhfUEFDS0VUX1NJWkUpOworCQlzdGF0dXMgPSB1c2JfYnVsa19tc2coZGV2LCBwaXBlLCBidWZmZXIrcG9zLCBsZW4sICZkb25lLCAxMDAwKTsKKwkJaWYgKHN0YXR1cykKKwkJCWJyZWFrOworCX0KKworCWtmcmVlKGJ1ZmZlcik7CisKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXMgLSBlcnJvciBkb3dubG9hZGluZyBmaXJtd2FyZSwgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlkYmcoIiVzIC0gZG93bmxvYWQgc3VjY2Vzc2Z1bCIsIF9fRlVOQ1RJT05fXyk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKiBDaXJjdWxhciBCdWZmZXIgRnVuY3Rpb25zICovCisKKy8qCisgKiB0aV9idWZfYWxsb2MKKyAqCisgKiBBbGxvY2F0ZSBhIGNpcmN1bGFyIGJ1ZmZlciBhbmQgYWxsIGFzc29jaWF0ZWQgbWVtb3J5LgorICovCisKK3N0YXRpYyBzdHJ1Y3QgY2lyY19idWYgKnRpX2J1Zl9hbGxvYyh2b2lkKQoreworCXN0cnVjdCBjaXJjX2J1ZiAqY2I7CisKKwljYiA9IChzdHJ1Y3QgY2lyY19idWYgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2lyY19idWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2IgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwljYi0+YnVmID0ga21hbGxvYyhUSV9XUklURV9CVUZfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNiLT5idWYgPT0gTlVMTCkgeworCQlrZnJlZShjYik7CisJCXJldHVybiBOVUxMOworCX0KKworCXRpX2J1Zl9jbGVhcihjYik7CisKKwlyZXR1cm4gY2I7Cit9CisKKworLyoKKyAqIHRpX2J1Zl9mcmVlCisgKgorICogRnJlZSB0aGUgYnVmZmVyIGFuZCBhbGwgYXNzb2NpYXRlZCBtZW1vcnkuCisgKi8KKworc3RhdGljIHZvaWQgdGlfYnVmX2ZyZWUoc3RydWN0IGNpcmNfYnVmICpjYikKK3sKKwlrZnJlZShjYi0+YnVmKTsKKwlrZnJlZShjYik7Cit9CisKKworLyoKKyAqIHRpX2J1Zl9jbGVhcgorICoKKyAqIENsZWFyIG91dCBhbGwgZGF0YSBpbiB0aGUgY2lyY3VsYXIgYnVmZmVyLgorICovCisKK3N0YXRpYyB2b2lkIHRpX2J1Zl9jbGVhcihzdHJ1Y3QgY2lyY19idWYgKmNiKQoreworCWNiLT5oZWFkID0gY2ItPnRhaWwgPSAwOworfQorCisKKy8qCisgKiB0aV9idWZfZGF0YV9hdmFpbAorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgYXZhaWxhYmxlIGluIHRoZSBjaXJjdWxhcgorICogYnVmZmVyLgorICovCisKK3N0YXRpYyBpbnQgdGlfYnVmX2RhdGFfYXZhaWwoc3RydWN0IGNpcmNfYnVmICpjYikKK3sKKwlyZXR1cm4gQ0lSQ19DTlQoY2ItPmhlYWQsY2ItPnRhaWwsVElfV1JJVEVfQlVGX1NJWkUpOworfQorCisKKy8qCisgKiB0aV9idWZfc3BhY2VfYXZhaWwKKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBvZiBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGNpcmN1bGFyCisgKiBidWZmZXIuCisgKi8KKworc3RhdGljIGludCB0aV9idWZfc3BhY2VfYXZhaWwoc3RydWN0IGNpcmNfYnVmICpjYikKK3sKKwlyZXR1cm4gQ0lSQ19TUEFDRShjYi0+aGVhZCxjYi0+dGFpbCxUSV9XUklURV9CVUZfU0laRSk7Cit9CisKKworLyoKKyAqIHRpX2J1Zl9wdXQKKyAqCisgKiBDb3B5IGRhdGEgZGF0YSBmcm9tIGEgdXNlciBidWZmZXIgYW5kIHB1dCBpdCBpbnRvIHRoZSBjaXJjdWxhciBidWZmZXIuCisgKiBSZXN0cmljdCB0byB0aGUgYW1vdW50IG9mIHNwYWNlIGF2YWlsYWJsZS4KKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCisgKi8KKworc3RhdGljIGludCB0aV9idWZfcHV0KHN0cnVjdCBjaXJjX2J1ZiAqY2IsIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCWludCBjLCByZXQgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJYyA9IENJUkNfU1BBQ0VfVE9fRU5EKGNiLT5oZWFkLCBjYi0+dGFpbCwgVElfV1JJVEVfQlVGX1NJWkUpOworCQlpZiAoY291bnQgPCBjKQorCQkJYyA9IGNvdW50OworCQlpZiAoYyA8PSAwKQorCQkJYnJlYWs7CisJCW1lbWNweShjYi0+YnVmICsgY2ItPmhlYWQsIGJ1ZiwgYyk7CisJCWNiLT5oZWFkID0gKGNiLT5oZWFkICsgYykgJiAoVElfV1JJVEVfQlVGX1NJWkUtMSk7CisJCWJ1ZiArPSBjOworCQljb3VudCAtPSBjOworCQlyZXQgKz0gYzsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qCisgKiB0aV9idWZfZ2V0CisgKgorICogR2V0IGRhdGEgZnJvbSB0aGUgY2lyY3VsYXIgYnVmZmVyIGFuZCBjb3B5IHRvIHRoZSBnaXZlbiBidWZmZXIuCisgKiBSZXN0cmljdCB0byB0aGUgYW1vdW50IG9mIGRhdGEgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4KKyAqLworCitzdGF0aWMgaW50IHRpX2J1Zl9nZXQoc3RydWN0IGNpcmNfYnVmICpjYiwgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJaW50IGMsIHJldCA9IDA7CisKKwl3aGlsZSAoMSkgeworCQljID0gQ0lSQ19DTlRfVE9fRU5EKGNiLT5oZWFkLCBjYi0+dGFpbCwgVElfV1JJVEVfQlVGX1NJWkUpOworCQlpZiAoY291bnQgPCBjKQorCQkJYyA9IGNvdW50OworCQlpZiAoYyA8PSAwKQorCQkJYnJlYWs7CisJCW1lbWNweShidWYsIGNiLT5idWYgKyBjYi0+dGFpbCwgYyk7CisJCWNiLT50YWlsID0gKGNiLT50YWlsICsgYykgJiAoVElfV1JJVEVfQlVGX1NJWkUtMSk7CisJCWJ1ZiArPSBjOworCQljb3VudCAtPSBjOworCQlyZXQgKz0gYzsKKwl9CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJjMWFlYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmgKQEAgLTAsMCArMSwyMjQgQEAKKy8qIHZpOiB0cz04IHN3PTgKKyAqCisgKiBUSSAzNDEwLzUwNTIgVVNCIFNlcmlhbCBEcml2ZXIgSGVhZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFRleGFzIEluc3RydW1lbnRzCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlIExpbnV4IGlvX3RpIGRyaXZlciwgd2hpY2ggaXMKKyAqICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgSW5zaWRlIE91dCBOZXR3b3JrcworICogICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBHcmVnIEtyb2FoLUhhcnRtYW4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZvciBxdWVzdGlvbnMgb3IgcHJvYmxlbXMgd2l0aCB0aGlzIGRyaXZlciwgY29udGFjdCBUZXhhcyBJbnN0cnVtZW50cworICogdGVjaG5pY2FsIHN1cHBvcnQsIG9yIEFsIEJvcmNoZXJzIDxhbGJvcmNoZXJzQHN0ZWluZXJwb2ludC5jb20+LCBvcgorICogUGV0ZXIgQmVyZ2VyIDxwYmVyZ2VyQGJyaW1zb24uY29tPi4KKyAqLworCisjaWZuZGVmIF9USV8zNDEwXzUwNTJfSF8KKyNkZWZpbmUgX1RJXzM0MTBfNTA1Ml9IXworCisvKiBDb25maWd1cmF0aW9uIGlkcyAqLworI2RlZmluZSBUSV9CT09UX0NPTkZJRwkJCTEKKyNkZWZpbmUgVElfQUNUSVZFX0NPTkZJRwkJMgorCisvKiBWZW5kb3IgYW5kIHByb2R1Y3QgaWRzICovCisjZGVmaW5lIFRJX1ZFTkRPUl9JRAkJCTB4MDQ1MQorI2RlZmluZSBUSV8zNDEwX1BST0RVQ1RfSUQJCTB4MzQxMAorI2RlZmluZSBUSV81MDUyX0JPT1RfUFJPRFVDVF9JRAkJMHg1MDUyCS8qIG5vIEVFUFJPTSwgbm8gZmlybXdhcmUgKi8KKyNkZWZpbmUgVElfNTE1Ml9CT09UX1BST0RVQ1RfSUQJCTB4NTE1MgkvKiBubyBFRVBST00sIG5vIGZpcm13YXJlICovCisjZGVmaW5lIFRJXzUwNTJfRUVQUk9NX1BST0RVQ1RfSUQJMHg1MDVBCS8qIEVFUFJPTSwgbm8gZmlybXdhcmUgKi8KKyNkZWZpbmUgVElfNTA1Ml9GSVJNV0FSRV9QUk9EVUNUX0lECTB4NTA1RgkvKiBmaXJtd2FyZSBpcyBydW5uaW5nICovCisKKy8qIENvbW1hbmRzICovCisjZGVmaW5lIFRJX0dFVF9WRVJTSU9OCQkJMHgwMQorI2RlZmluZSBUSV9HRVRfUE9SVF9TVEFUVVMJCTB4MDIKKyNkZWZpbmUgVElfR0VUX1BPUlRfREVWX0lORk8JCTB4MDMKKyNkZWZpbmUgVElfR0VUX0NPTkZJRwkJCTB4MDQKKyNkZWZpbmUgVElfU0VUX0NPTkZJRwkJCTB4MDUKKyNkZWZpbmUgVElfT1BFTl9QT1JUCQkJMHgwNgorI2RlZmluZSBUSV9DTE9TRV9QT1JUCQkJMHgwNworI2RlZmluZSBUSV9TVEFSVF9QT1JUCQkJMHgwOAorI2RlZmluZSBUSV9TVE9QX1BPUlQJCQkweDA5CisjZGVmaW5lIFRJX1RFU1RfUE9SVAkJCTB4MEEKKyNkZWZpbmUgVElfUFVSR0VfUE9SVAkJCTB4MEIKKyNkZWZpbmUgVElfUkVTRVRfRVhUX0RFVklDRQkJMHgwQworI2RlZmluZSBUSV9XUklURV9EQVRBCQkJMHg4MAorI2RlZmluZSBUSV9SRUFEX0RBVEEJCQkweDgxCisjZGVmaW5lIFRJX1JFUV9UWVBFX0NMQVNTCQkweDgyCisKKy8qIE1vZHVsZSBpZGVudGlmaWVycyAqLworI2RlZmluZSBUSV9JMkNfUE9SVAkJCTB4MDEKKyNkZWZpbmUgVElfSUVFRTEyODRfUE9SVAkJMHgwMgorI2RlZmluZSBUSV9VQVJUMV9QT1JUCQkJMHgwMworI2RlZmluZSBUSV9VQVJUMl9QT1JUCQkJMHgwNAorI2RlZmluZSBUSV9SQU1fUE9SVAkJCTB4MDUKKworLyogTW9kZW0gc3RhdHVzICovCisjZGVmaW5lIFRJX01TUl9ERUxUQV9DVFMJCTB4MDEKKyNkZWZpbmUgVElfTVNSX0RFTFRBX0RTUgkJMHgwMgorI2RlZmluZSBUSV9NU1JfREVMVEFfUkkJCQkweDA0CisjZGVmaW5lIFRJX01TUl9ERUxUQV9DRAkJCTB4MDgKKyNkZWZpbmUgVElfTVNSX0NUUwkJCTB4MTAKKyNkZWZpbmUgVElfTVNSX0RTUgkJCTB4MjAKKyNkZWZpbmUgVElfTVNSX1JJCQkJMHg0MAorI2RlZmluZSBUSV9NU1JfQ0QJCQkweDgwCisjZGVmaW5lIFRJX01TUl9ERUxUQV9NQVNLCQkweDBGCisjZGVmaW5lIFRJX01TUl9NQVNLCQkJMHhGMAorCisvKiBMaW5lIHN0YXR1cyAqLworI2RlZmluZSBUSV9MU1JfT1ZFUlJVTl9FUlJPUgkJMHgwMQorI2RlZmluZSBUSV9MU1JfUEFSSVRZX0VSUk9SCQkweDAyCisjZGVmaW5lIFRJX0xTUl9GUkFNSU5HX0VSUk9SCQkweDA0CisjZGVmaW5lIFRJX0xTUl9CUkVBSwkJCTB4MDgKKyNkZWZpbmUgVElfTFNSX0VSUk9SCQkJMHgwRgorI2RlZmluZSBUSV9MU1JfUlhfRlVMTAkJCTB4MTAKKyNkZWZpbmUgVElfTFNSX1RYX0VNUFRZCQkJMHgyMAorCisvKiBMaW5lIGNvbnRyb2wgKi8KKyNkZWZpbmUgVElfTENSX0JSRUFLCQkJMHg0MAorCisvKiBNb2RlbSBjb250cm9sICovCisjZGVmaW5lIFRJX01DUl9MT09QCQkJMHgwNAorI2RlZmluZSBUSV9NQ1JfRFRSCQkJMHgxMAorI2RlZmluZSBUSV9NQ1JfUlRTCQkJMHgyMAorCisvKiBNYXNrIHNldHRpbmdzICovCisjZGVmaW5lIFRJX1VBUlRfRU5BQkxFX1JUU19JTgkJMHgwMDAxCisjZGVmaW5lIFRJX1VBUlRfRElTQUJMRV9SVFMJCTB4MDAwMgorI2RlZmluZSBUSV9VQVJUX0VOQUJMRV9QQVJJVFlfQ0hFQ0tJTkcJMHgwMDA4CisjZGVmaW5lIFRJX1VBUlRfRU5BQkxFX0RTUl9PVVQJCTB4MDAxMAorI2RlZmluZSBUSV9VQVJUX0VOQUJMRV9DVFNfT1VUCQkweDAwMjAKKyNkZWZpbmUgVElfVUFSVF9FTkFCTEVfWF9PVVQJCTB4MDA0MAorI2RlZmluZSBUSV9VQVJUX0VOQUJMRV9YQV9PVVQJCTB4MDA4MAorI2RlZmluZSBUSV9VQVJUX0VOQUJMRV9YX0lOCQkweDAxMDAKKyNkZWZpbmUgVElfVUFSVF9FTkFCTEVfRFRSX0lOCQkweDA4MDAKKyNkZWZpbmUgVElfVUFSVF9ESVNBQkxFX0RUUgkJMHgxMDAwCisjZGVmaW5lIFRJX1VBUlRfRU5BQkxFX01TX0lOVFMJCTB4MjAwMAorI2RlZmluZSBUSV9VQVJUX0VOQUJMRV9BVVRPX1NUQVJUX0RNQQkweDQwMDAKKworLyogUGFyaXR5ICovCisjZGVmaW5lIFRJX1VBUlRfTk9fUEFSSVRZCQkweDAwCisjZGVmaW5lIFRJX1VBUlRfT0REX1BBUklUWQkJMHgwMQorI2RlZmluZSBUSV9VQVJUX0VWRU5fUEFSSVRZCQkweDAyCisjZGVmaW5lIFRJX1VBUlRfTUFSS19QQVJJVFkJCTB4MDMKKyNkZWZpbmUgVElfVUFSVF9TUEFDRV9QQVJJVFkJCTB4MDQKKworLyogU3RvcCBiaXRzICovCisjZGVmaW5lIFRJX1VBUlRfMV9TVE9QX0JJVFMJCTB4MDAKKyNkZWZpbmUgVElfVUFSVF8xXzVfU1RPUF9CSVRTCQkweDAxCisjZGVmaW5lIFRJX1VBUlRfMl9TVE9QX0JJVFMJCTB4MDIKKworLyogQml0cyBwZXIgY2hhcmFjdGVyICovCisjZGVmaW5lIFRJX1VBUlRfNV9EQVRBX0JJVFMJCTB4MDAKKyNkZWZpbmUgVElfVUFSVF82X0RBVEFfQklUUwkJMHgwMQorI2RlZmluZSBUSV9VQVJUXzdfREFUQV9CSVRTCQkweDAyCisjZGVmaW5lIFRJX1VBUlRfOF9EQVRBX0JJVFMJCTB4MDMKKworLyogMjMyLzQ4NSBtb2RlcyAqLworI2RlZmluZSBUSV9VQVJUXzIzMgkJCTB4MDAKKyNkZWZpbmUgVElfVUFSVF80ODVfUkVDRUlWRVJfRElTQUJMRUQJMHgwMQorI2RlZmluZSBUSV9VQVJUXzQ4NV9SRUNFSVZFUl9FTkFCTEVECTB4MDIKKworLyogUGlwZSB0cmFuc2ZlciBtb2RlIGFuZCB0aW1lb3V0ICovCisjZGVmaW5lIFRJX1BJUEVfTU9ERV9DT05USU5PVVMJCTB4MDEKKyNkZWZpbmUgVElfUElQRV9NT0RFX01BU0sJCTB4MDMKKyNkZWZpbmUgVElfUElQRV9USU1FT1VUX01BU0sJCTB4N0MKKyNkZWZpbmUgVElfUElQRV9USU1FT1VUX0VOQUJMRQkJMHg4MAorCisvKiBDb25maWcgc3RydWN0ICovCitzdHJ1Y3QgdGlfdWFydF9jb25maWcgeworCV9fdTE2CXdCYXVkUmF0ZTsKKwlfX3UxNgl3RmxhZ3M7CisJX191OAliRGF0YUJpdHM7CisJX191OAliUGFyaXR5OworCV9fdTgJYlN0b3BCaXRzOworCWNoYXIJY1hvbjsKKwljaGFyCWNYb2ZmOworCV9fdTgJYlVhcnRNb2RlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogR2V0IHBvcnQgc3RhdHVzICovCitzdHJ1Y3QgdGlfcG9ydF9zdGF0dXMgeworCV9fdTgJYkNtZENvZGU7CisJX191OAliTW9kdWxlSWQ7CisJX191OAliRXJyb3JDb2RlOworCV9fdTgJYk1TUjsKKwlfX3U4CWJMU1I7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBQdXJnZSBtb2RlcyAqLworI2RlZmluZSBUSV9QVVJHRV9PVVRQVVQJCQkweDAwCisjZGVmaW5lIFRJX1BVUkdFX0lOUFVUCQkJMHg4MAorCisvKiBSZWFkL1dyaXRlIGRhdGEgKi8KKyNkZWZpbmUgVElfUldfREFUQV9BRERSX1NGUgkJMHgxMAorI2RlZmluZSBUSV9SV19EQVRBX0FERFJfSURBVEEJCTB4MjAKKyNkZWZpbmUgVElfUldfREFUQV9BRERSX1hEQVRBCQkweDMwCisjZGVmaW5lIFRJX1JXX0RBVEFfQUREUl9DT0RFCQkweDQwCisjZGVmaW5lIFRJX1JXX0RBVEFfQUREUl9HUElPCQkweDUwCisjZGVmaW5lIFRJX1JXX0RBVEFfQUREUl9JMkMJCTB4NjAKKyNkZWZpbmUgVElfUldfREFUQV9BRERSX0ZMQVNICQkweDcwCisjZGVmaW5lIFRJX1JXX0RBVEFfQUREUl9EU1AJCTB4ODAKKworI2RlZmluZSBUSV9SV19EQVRBX1VOU1BFQ0lGSUVECQkweDAwCisjZGVmaW5lIFRJX1JXX0RBVEFfQllURQkJCTB4MDEKKyNkZWZpbmUgVElfUldfREFUQV9XT1JECQkJMHgwMgorI2RlZmluZSBUSV9SV19EQVRBX0RPVUJMRV9XT1JECQkweDA0CisKK3N0cnVjdCB0aV93cml0ZV9kYXRhX2J5dGVzIHsKKwlfX3U4CWJBZGRyVHlwZTsKKwlfX3U4CWJEYXRhVHlwZTsKKwlfX3U4CWJEYXRhQ291bnRlcjsKKwlfX2JlMTYJd0Jhc2VBZGRySGk7CisJX19iZTE2CXdCYXNlQWRkckxvOworCV9fdTgJYkRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgdGlfcmVhZF9kYXRhX3JlcXVlc3QgeworCV9fdTgJYkFkZHJUeXBlOworCV9fdTgJYkRhdGFUeXBlOworCV9fdTgJYkRhdGFDb3VudGVyOworCV9fYmUxNgl3QmFzZUFkZHJIaTsKKwlfX2JlMTYJd0Jhc2VBZGRyTG87Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgdGlfcmVhZF9kYXRhX2J5dGVzIHsKKwlfX3U4CWJDbWRDb2RlOworCV9fdTgJYk1vZHVsZUlkOworCV9fdTgJYkVycm9yQ29kZTsKKwlfX3U4CWJEYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogSW50ZXJydXB0IHN0cnVjdCAqLworc3RydWN0IHRpX2ludGVycnVwdCB7CisJX191OAliSUNvZGU7CisJX191OAliSUluZm87Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBJbnRlcnJ1cHQgY29kZXMgKi8KKyNkZWZpbmUgVElfR0VUX1BPUlRfRlJPTV9DT0RFKGMpCSgoKGMpID4+IDQpIC0gMykKKyNkZWZpbmUgVElfR0VUX0ZVTkNfRlJPTV9DT0RFKGMpCSgoYykgJiAweDBmKQorI2RlZmluZSBUSV9DT0RFX0hBUkRXQVJFX0VSUk9SCQkweEZGCisjZGVmaW5lIFRJX0NPREVfREFUQV9FUlJPUgkJMHgwMworI2RlZmluZSBUSV9DT0RFX01PREVNX1NUQVRVUwkJMHgwNAorCisvKiBEb3dubG9hZCBmaXJtd2FyZSBtYXggcGFja2V0IHNpemUgKi8KKyNkZWZpbmUgVElfRE9XTkxPQURfTUFYX1BBQ0tFVF9TSVpFCTY0CisKKy8qIEZpcm13YXJlIGltYWdlIGhlYWRlciAqLworc3RydWN0IHRpX2Zpcm13YXJlX2hlYWRlciB7CisJX19sZTE2CXdMZW5ndGg7CisJX191OAliQ2hlY2tTdW07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBVQVJUIGFkZHJlc3NlcyAqLworI2RlZmluZSBUSV9VQVJUMV9CQVNFX0FERFIJCTB4RkZBMAkvKiBVQVJUIDEgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFRJX1VBUlQyX0JBU0VfQUREUgkJMHhGRkIwCS8qIFVBUlQgMiBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgVElfVUFSVF9PRkZTRVRfTENSCQkweDAwMDIJLyogVUFSVCBNQ1IgcmVnaXN0ZXIgb2Zmc2V0ICovCisjZGVmaW5lIFRJX1VBUlRfT0ZGU0VUX01DUgkJMHgwMDA0CS8qIFVBUlQgTUNSIHJlZ2lzdGVyIG9mZnNldCAqLworCisjZW5kaWYgLyogX1RJXzM0MTBfNTA1Ml9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUzNmY2MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKQEAgLTAsMCArMSwxNDM1IEBACisvKgorICogVVNCIFNlcmlhbCBDb252ZXJ0ZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAwNCBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAwIFBldGVyIEJlcmdlciAocGJlcmdlckBicmltc29uLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMCBBbCBCb3JjaGVycyAoYm9yY2hlcnNAc3RlaW5lcnBvaW50LmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKgkyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgZHJpdmVyIHdhcyBvcmlnaW5hbGx5IGJhc2VkIG9uIHRoZSBBQ00gZHJpdmVyIGJ5IEFybWluIEZ1ZXJzdCAod2hpY2ggd2FzIAorICogYmFzZWQgb24gYSBkcml2ZXIgYnkgQnJhZCBLZXJ5YW4pCisgKgorICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCisgKgorICogKDEyLzEwLzIwMDIpIGdraAorICoJU3BsaXQgdGhlIHBvcnRzIG9mZiBpbnRvIHRoZWlyIG93biBzdHJ1Y3QgZGV2aWNlLCBhbmQgYWRkZWQgYQorICoJdXNiLXNlcmlhbCBidXMgZHJpdmVyLgorICoKKyAqICgxMS8xOS8yMDAyKSBna2gKKyAqCXJlbW92ZWQgYSBmZXcgI2lmZGVmcyBmb3IgdGhlIGdlbmVyaWMgY29kZSBhbmQgY2xlYW5lZCB1cCB0aGUgZmFpbHVyZQorICoJbG9naWMgaW4gaW5pdGlhbGl6YXRpb24uCisgKgorICogKDEwLzAyLzIwMDIpIGdraAorICoJbW92ZWQgdGhlIGNvbnNvbGUgY29kZSB0byBjb25zb2xlLmMgYW5kIG91dCBvZiB0aGlzIGZpbGUuCisgKgorICogKDA2LzA1LzIwMDIpIGdraAorICoJbW92ZWQgbG9jYXRpb24gb2Ygc3RhcnR1cCgpIGNhbGwgaW4gc2VyaWFsX3Byb2JlKCkgdW50aWwgYWZ0ZXIgYWxsCisgKglvZiB0aGUgcG9ydCBpbmZvcm1hdGlvbiBhbmQgZW5kcG9pbnRzIGFyZSBpbml0aWFsaXplZC4gIFRoaXMgbWFrZXMKKyAqCXRoaW5ncyBlYXNpZXIgZm9yIHNvbWUgZHJpdmVycy4KKyAqCisgKiAoMDQvMTAvMjAwMikgZ2toCisgKglhZGRlZCBzZXJpYWxfcmVhZF9wcm9jIGZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYQorICoJL3Byb2MvdHR5L2RyaXZlci91c2Itc2VyaWFsIGZpbGUuCisgKgorICogKDAzLzI3LzIwMDIpIGdraAorICoJR290IFVTQiBzZXJpYWwgY29uc29sZSBjb2RlIHdvcmtpbmcgcHJvcGVybHkgYW5kIG1lcmdlZCBpbnRvIHRoZSBtYWluCisgKgl2ZXJzaW9uIG9mIHRoZSB0cmVlLiAgVGhhbmtzIHRvIFJhbmR5IER1bmxhcCBmb3IgdGhlIGluaXRpYWwgdmVyc2lvbgorICoJb2YgdGhpcyBjb2RlLCBhbmQgZm9yIHB1c2hpbmcgbWUgdG8gZmluaXNoIGl0IHVwLgorICoJVGhlIFVTQiBzZXJpYWwgY29uc29sZSB3b3JrcyB3aXRoIGFueSB1c2Igc2VyaWFsIGRyaXZlciBkZXZpY2UuCisgKgorICogKDAzLzIxLzIwMDIpIGdraAorICoJTW92ZWQgYWxsIG1hbmlwdWxhdGlvbiBvZiBwb3J0LT5vcGVuX2NvdW50IGludG8gdGhlIGNvcmUuICBOb3cgdGhlCisgKglpbmRpdmlkdWFsIGRyaXZlcidzIG9wZW4gYW5kIGNsb3NlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIG9ubHkgd2hlbiB0aGUKKyAqCWZpcnN0IG9wZW4oKSBhbmQgbGFzdCBjbG9zZSgpIGlzIGNhbGxlZC4gIE1ha2luZyB0aGUgZHJpdmVycyBhIGJpdAorICoJc21hbGxlciBhbmQgc2ltcGxlci4KKyAqCUZpeGVkIGEgYnVnIGlmIGEgZHJpdmVyIGRpZG4ndCBoYXZlIHRoZSBvd25lciBmaWVsZCBzZXQuCisgKgorICogKDAyLzI2LzIwMDIpIGdraAorICoJTW92ZWQgYWxsIGxvY2tpbmcgaW50byB0aGUgbWFpbiBzZXJpYWxfKiBmdW5jdGlvbnMsIGluc3RlYWQgb2YgaGF2aW5nIAorICoJdGhlIGluZGl2aWR1YWwgZHJpdmVycyBoYXZlIHRvIGdyYWIgdGhlIHBvcnQgc2VtYXBob3JlLiAgVGhpcyBzaG91bGQKKyAqCXJlZHVjZSByYWNlcy4KKyAqCVJld29ya2VkIHRoZSBNT0RfSU5DIGxvZ2ljIGEgYml0IHRvIGFsd2F5cyBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCwgZXZlbgorICoJaWYgdGhlIGdlbmVyaWMgZHJpdmVyIGlzIGJlaW5nIHVzZWQuCisgKgorICogKDEwLzEwLzIwMDEpIGdraAorICoJdXNiX3NlcmlhbF9kaXNjb25uZWN0KCkgbm93IHNldHMgdGhlIHNlcmlhbC0+ZGV2IHBvaW50ZXIgaXMgdG8gTlVMTCB0bworICoJaGVscCBwcmV2ZW50IGNoaWxkIGRyaXZlcnMgZnJvbSBhY2Nlc3NpbmcgdGhlIGRldmljZSBzaW5jZSBpdCBpcyBub3cKKyAqCWdvbmUuCisgKgorICogKDA5LzEzLzIwMDEpIGdraAorICoJTW92ZWQgZ2VuZXJpYyBkcml2ZXIgaW5pdGlhbGl6ZSBhZnRlciB3ZSBoYXZlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgVVNCCisgKgljb3JlLiAgVGhhbmtzIHRvIFJhbmR5IER1bmxhcCBmb3IgcG9pbnRpbmcgdGhpcyBwcm9ibGVtIG91dC4KKyAqCisgKiAoMDcvMDMvMjAwMSkgZ2toCisgKglGaXhlZCBtb2R1bGUgcGFyYW1hdGVyIHNpemUuICBUaGFua3MgdG8gSm9obiBCcm9ja21leWVyIGZvciB0aGUgcG9pbnRlci4KKyAqCUZpeGVkIHZlbmRvciBhbmQgcHJvZHVjdCBnZXR0aW5nIGRlZmluZWQgdGhyb3VnaCB0aGUgTU9EVUxFX1BBUk0gbWFjcm8KKyAqCWlmIHRoZSBHZW5lcmljIGRyaXZlciB3YXNuJ3QgY29tcGlsZWQgaW4uCisgKglGaXhlZCBwcm9ibGVtIHdpdGggZ2VuZXJpY19zaHV0ZG93bigpIG5vdCBiZWluZyBjYWxsZWQgZm9yIGRyaXZlcnMgdGhhdAorICoJZG9uJ3QgaGF2ZSBhIHNodXRkb3duKCkgZnVuY3Rpb24uCisgKgorICogKDA2LzA2LzIwMDEpIGdraAorICoJYWRkZWQgZXZpbCBoYWNrIHRoYXQgaXMgbmVlZGVkIGZvciB0aGUgcHJvbGlmaWMgcGwyMzAzIGRldmljZSBkdWUgdG8gdGhlCisgKgljcmF6eSB3YXkgaXRzIGVuZHBvaW50cyBhcmUgc2V0IHVwLgorICoKKyAqICgwNS8zMC8yMDAxKSBna2gKKyAqCXN3aXRjaGVkIGZyb20gdXNpbmcgc3BpbmxvY2sgdG8gYSBzZW1hcGhvcmUsIHdoaWNoIGZpeGVzIGxvdHMgb2YgcHJvYmxlbXMuCisgKgorICogKDA0LzA4LzIwMDEpIGdiCisgKglJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgorICoKKyAqIDIwMDFfMDJfMDUgZ2toCisgKglGaXhlZCBidWZmZXIgb3ZlcmZsb3dzIGJ1ZyB3aXRoIHRoZSBnZW5lcmljIHNlcmlhbCBkcml2ZXIuICBUaGFua3MgdG8KKyAqCVRvZGQgU3F1aXJlcyA8c3F1aXJlc3RAY3QwLmNvbT4gZm9yIGZpeGluZyB0aGlzLgorICoKKyAqICgwMS8xMC8yMDAxKSBna2gKKyAqCUZpeGVkIGJ1ZyB3aGVyZSB0aGUgZ2VuZXJpYyBzZXJpYWwgYWRhcHRvciBncmFiYmVkIF9hbnlfIGRldmljZSB0aGF0IHdhcworICoJb2ZmZXJlZCB0byBpdC4KKyAqCisgKiAoMTIvMTIvMjAwMCkgZ2toCisgKglSZW1vdmVkIE1PRF9JTkMgYW5kIE1PRF9ERUMgZnJvbSBwb2xsIGFuZCBkaXNjb25uZWN0IGZ1bmN0aW9ucywgYW5kCisgKgltb3ZlZCB0aGVtIHRvIHRoZSBzZXJpYWxfb3BlbiBhbmQgc2VyaWFsX2Nsb3NlIGZ1bmN0aW9ucy4KKyAqCUFsc28gZml4ZWQgYnVnIHdpdGggdGhlcmUgbm90IGJlaW5nIGEgTU9EX0RFQyBmb3IgdGhlIGdlbmVyaWMgZHJpdmVyCisgKgkodGhhbmtzIHRvIEdhcnkgQnJ1YmFrZXIgZm9yIGZpbmRpbmcgdGhpcy4pCisgKgorICogKDExLzI5LzIwMDApIGdraAorICoJU21hbGwgTlVMTCBwb2ludGVyIGluaXRpYWxpemF0aW9uIGNsZWFudXAgd2hpY2ggc2F2ZXMgYSBiaXQgb2YgZGlzayBpbWFnZQorICoKKyAqICgxMS8wMS8yMDAwKSBBZGFtIEouIFJpY2h0ZXIKKyAqCWluc3RlYWQgb2YgdXNpbmcgaWRWZW5kb3IvaWRQcm9kdWN0IHBhaXJzLCB1c2Igc2VyaWFsIGRyaXZlcnMKKyAqCW5vdyBpZGVudGlmeSB0aGVpciBoYXJkd2FyZSBpbnRlcmVzdCB3aXRoIHVzYl9kZXZpY2VfaWQgdGFibGVzLAorICoJd2hpY2ggdGhleSB1c3VhbGx5IGhhdmUgYW55aG93IGZvciB1c2Ugd2l0aCBNT0RVTEVfREVWSUNFX1RBQkxFLgorICoKKyAqICgxMC8wNS8yMDAwKSBna2gKKyAqCUZpeGVkIGJ1ZyB3aXRoIHVyYi0+ZGV2IG5vdCBiZWluZyBzZXQgcHJvcGVybHksIG5vdyB0aGF0IHRoZSB1c2IKKyAqCWNvcmUgbmVlZHMgaXQuCisgKiAKKyAqICgwOS8xMS8yMDAwKSBna2gKKyAqCVJlbW92ZWQgREVCVUcgI2lmZGVmcyB3aXRoIGNhbGwgdG8gdXNiX3NlcmlhbF9kZWJ1Z19kYXRhCisgKgorICogKDA4LzI4LzIwMDApIGdraAorICoJQWRkZWQgcG9ydF9sb2NrIHRvIHBvcnQgc3RydWN0dXJlLgorICoJQWRkZWQgbG9ja3MgZm9yIFNNUCBzYWZlbmVzcyB0byBnZW5lcmljIGRyaXZlcgorICoJRml4ZWQgdGhlIGFiaWxpdHkgdG8gb3BlbiBhIGdlbmVyaWMgZGV2aWNlJ3MgcG9ydCBtb3JlIHRoYW4gb25jZS4KKyAqCisgKiAoMDcvMjMvMjAwMCkgZ2toCisgKglBZGRlZCBidWxrX291dF9lbmRwb2ludEFkZHJlc3MgdG8gcG9ydCBzdHJ1Y3R1cmUuCisgKgorICogKDA3LzE5LzIwMDApIGdraCwgcGJlcmdlciwgYW5kIGJvcmNoZXJzCisgKglNb2RpZmljYXRpb25zIHRvIGFsbG93IHVzYi1zZXJpYWwgZHJpdmVycyB0byBiZSBtb2R1bGVzLgorICoKKyAqICgwNy8wMy8yMDAwKSBna2gKKyAqCUFkZGVkIG1vcmUgZGVidWdnaW5nIHRvIHNlcmlhbF9pb2N0bCBjYWxsCisgKiAKKyAqICgwNi8yNS8yMDAwKSBna2gKKyAqCUNoYW5nZWQgZ2VuZXJpY193cml0ZV9idWxrX2NhbGxiYWNrIHRvIG5vdCBjYWxsIHdha2VfdXBfaW50ZXJydXB0aWJsZQorICoJZGlyZWN0bHksIGJ1dCB0byBoYXZlIHBvcnRfc29mdGludCBkbyBpdCBhdCBhIHNhZmVyIHRpbWUuCisgKgorICogKDA2LzIzLzIwMDApIGdraAorICoJQ2xlYW5lZCB1cCBkZWJ1Z2dpbmcgc3RhdGVtZW50cyBpbiBhIHF1ZXN0IHRvIGZpbmQgVUhDSSB0aW1lb3V0IGJ1Zy4KKyAqCisgKiAoMDUvMjIvMjAwMCkgZ2toCisgKglDaGFuZ2VkIHRoZSBtYWtlZmlsZSwgZW5hYmxpbmcgdGhlIGJpZyBDT05GSUdfVVNCX1NFUklBTF9TT01USElORyB0byBiZSAKKyAqCXJlbW92ZWQgZnJvbSB0aGUgaW5kaXZpZHVhbCBkZXZpY2Ugc291cmNlIGZpbGVzLgorICoKKyAqICgwNS8wMy8yMDAwKSBna2gKKyAqCUFkZGVkIHRoZSBEaWdpIEFjY2VsZXBvcnQgZHJpdmVyIGZyb20gQWwgQm9yY2hlcnMgYW5kIFBldGVyIEJlcmdlci4KKyAqIAorICogKDA1LzAyLzIwMDApIGdraAorICoJQ2hhbmdlZCBkZXZmcyBhbmQgdHR5IHJlZ2lzdGVyIGNvZGUgdG8gd29yayBwcm9wZXJseSBub3cuIFRoaXMgd2FzIGJhc2VkIG9uCisgKgl0aGUgQUNNIGRyaXZlciBjaGFuZ2VzIGJ5IFZvanRlY2ggUGF2bGlrLgorICoKKyAqICgwNC8yNy8yMDAwKSBSeWFuIFZhbmRlckJpamwKKyAqIAlQdXQgY2FsbHMgdG8gKl9wYXJhbm9pYV9jaGVja3MgaW50byBvbmUgZnVuY3Rpb24uCisgKiAKKyAqICgwNC8yMy8yMDAwKSBna2gKKyAqCUZpeGVkIGJ1ZyB0aGF0IFJhbmR5IER1bmxhcCBmb3VuZCBmb3IgR2VuZXJpYyBkZXZpY2VzIHdpdGggbm8gYnVsayBvdXQgcG9ydHMuCisgKglNb3ZlZCB3aGVuIHRoZSBzdGFydHVwIGNvZGUgcHJpbnRlZCBvdXQgdGhlIGRldmljZXMgdGhhdCBhcmUgc3VwcG9ydGVkLgorICoKKyAqICgwNC8xOS8yMDAwKSBna2gKKyAqCUFkZGVkIGRyaXZlciBmb3IgWnlYRUwgb21uaS5uZXQgbGNkIHBsdXMgSVNETiBUQQorICoJTWFkZSBzdGFydHVwIGluZm8gbWVzc2FnZSBzcGVjaWZ5IHdoaWNoIGRyaXZlcnMgd2VyZSBjb21waWxlZCBpbi4KKyAqCisgKiAoMDQvMDMvMjAwMCkgZ2toCisgKglDaGFuZ2VkIHRoZSBwcm9iZSBwcm9jZXNzIHRvIHJlbW92ZSB0aGUgbW9kdWxlIHVubG9hZCByYWNlcy4KKyAqCUNoYW5nZWQgd2hlcmUgdGhlIHR0eSBsYXllciBnZXRzIGluaXRpYWxpemVkIHRvIGhhdmUgZGV2ZnMgd29yayBuaWNlci4KKyAqCUFkZGVkIGluaXRpYWwgZGV2ZnMgc3VwcG9ydC4KKyAqCisgKiAoMDMvMjYvMjAwMCkgZ2toCisgKglTcGxpdCBkcml2ZXIgdXAgaW50byBkZXZpY2Ugc3BlY2lmaWMgcGllY2VzLgorICogCisgKiAoMDMvMTkvMjAwMCkgZ2toCisgKglGaXhlZCBvb3BzIHRoYXQgY291bGQgaGFwcGVuIHdoZW4gZGV2aWNlIHdhcyByZW1vdmVkIHdoaWxlIGEgcHJvZ3JhbQorICoJd2FzIHRhbGtpbmcgdG8gdGhlIGRldmljZS4KKyAqCVJlbW92ZWQgdGhlIHN0YXRpYyB1cmJzIGFuZCBub3cgYWxsIHVyYnMgYXJlIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZAorICoJZHluYW1pY2FsbHkuCisgKglSZXdvcmtlZCB0aGUgaW50ZXJuYWwgaW50ZXJmYWNlLiBOb3cgZXZlcnl0aGluZyBpcyBiYXNlZCBvbiB0aGUgCisgKgl1c2Jfc2VyaWFsX3BvcnQgc3RydWN0dXJlIGluc3RlYWQgb2YgdGhlIGxhcmdlciB1c2Jfc2VyaWFsIHN0cnVjdHVyZS4KKyAqCVRoaXMgZml4ZXMgdGhlIGJ1ZyB0aGF0IGEgbXVsdGlwb3J0IGRldmljZSBjb3VsZCBub3QgaGF2ZSBtb3JlIHRoYW4KKyAqCW9uZSBwb3J0IG9wZW4gYXQgb25lIHRpbWUuCisgKgorICogKDAzLzE3LzIwMDApIGdraAorICoJQWRkZWQgY29uZmlnIG9wdGlvbiBmb3IgZGVidWdnaW5nIG1lc3NhZ2VzLgorICoJQWRkZWQgcGF0Y2ggZm9yIGtleXNwYW4gcGRhIGZyb20gQnJpYW4gV2FybmVyLgorICoKKyAqICgwMy8wNi8yMDAwKSBna2gKKyAqCUFkZGVkIHRoZSBrZXlzcGFuIHBkYSBjb2RlIGZyb20gQnJpYW4gV2FybmVyIDx3YXJuZXJAbG90aGFyLmNvbT4KKyAqCU1vdmVkIGEgYnVuY2ggb2YgdGhlIHBvcnQgc3BlY2lmaWMgc3R1ZmYgaW50byBpdHMgb3duIHN0cnVjdHVyZS4gVGhpcworICoJaXMgaW4gYW50aWNpcGF0aW9uIG9mIHRoZSB0cnVlIG11bHRpcG9ydCBkZXZpY2VzICh0aGVyZSdzIGEgYnVnIGlmIHlvdQorICoJdHJ5IHRvIGFjY2VzcyBtb3JlIHRoYW4gb25lIHBvcnQgb2YgYW55IG11bHRpcG9ydCBkZXZpY2UgcmlnaHQgbm93KQorICoKKyAqICgwMi8yMS8yMDAwKSBna2gKKyAqCU1hZGUgaXQgc28gdGhhdCBhbnkgc2VyaWFsIGRldmljZXMgb25seSBoYXZlIHRvIHNwZWNpZnkgd2hpY2ggZnVuY3Rpb25zCisgKgl0aGV5IHdhbnQgdG8gb3ZlcmxvYWQgZnJvbSB0aGUgZ2VuZXJpYyBmdW5jdGlvbiBjYWxscyAoZ3JlYXQsIAorICoJaW5oZXJpdGFuY2UgaW4gQywgaW4gYSBkcml2ZXIsIGp1c3Qgd2hhdCBJIHdhbnRlZC4uLikKKyAqCUFkZGVkIHN1cHBvcnQgZm9yIHNldF90ZXJtaW9zIGFuZCBpb2N0bCBmdW5jdGlvbiBjYWxscy4gTm8gZHJpdmVycyB0YWtlCisgKglhZHZhbnRhZ2Ugb2YgdGhpcyB5ZXQuCisgKglSZW1vdmVkIHRoZSAjaWZkZWYgTU9EVUxFLCBub3cgdGhlcmUgaXMgbm8gbW9kdWxlIHNwZWNpZmljIGNvZGUuCisgKglDbGVhbmVkIHVwIGEgZmV3IGNvbW1lbnRzIGluIHVzYi1zZXJpYWwuaCB0aGF0IHdlcmUgd3JvbmcgKHRoYW5rcyBhZ2FpbgorICoJdG8gTWlsZXMgTG90dCkuCisgKglTbWFsbCBmaXggdG8gZ2V0X2ZyZWVfc2VyaWFsLgorICoKKyAqICgwMi8xNC8yMDAwKSBna2gKKyAqCVJlbW92ZWQgdGhlIEJlbGtpbiBhbmQgUGVyYWNvbSBmdW5jdGlvbmFsaXR5IGZyb20gdGhlIGRyaXZlciBkdWUgdG8KKyAqCXRoZSBsYWNrIG9mIHN1cHBvcnQgZnJvbSB0aGUgdmVuZG9yLCBhbmQgbWUgbm90IHdhbnRpbmcgcGVvcGxlIHRvIAorICoJYWNjaWRlbmF0bHkgYnV5IHRoZSBkZXZpY2UsIGV4cGVjdGluZyBpdCB0byB3b3JrIHdpdGggTGludXguCisgKglBZGRlZCByZWFkX2J1bGtfY2FsbGJhY2sgYW5kIHdyaXRlX2J1bGtfY2FsbGJhY2sgdG8gdGhlIHR5cGUgc3RydWN0dXJlCisgKglmb3IgdGhlIG5lZWRzIG9mIHRoZSBGVERJIGFuZCBXaGl0ZUhFQVQgZHJpdmVyLgorICoJQ2hhbmdlZCBhbGwgcmV2ZXJlbmNlcyB0byBGVERJIHRvIEZURElfU0lPIGF0IHRoZSByZXF1ZXN0IG9mIEJpbGwKKyAqCVJ5ZGVyLgorICoJQ2hhbmdlZCB0aGUgb3V0cHV0IHVyYiBzaXplIGJhY2sgdG8gdGhlIG1heCBlbmRwb2ludCBzaXplIHRvIG1ha2UKKyAqCXRoZSBmdGRpX3NpbyBkcml2ZXIgaGF2ZSBpdCBlYXNpZXIsIGFuZCBkdWUgdG8gdGhlIGZhY3QgdGhhdCBpdCBkaWRuJ3QKKyAqCXJlYWxseSBpbmNyZWFzZSB0aGUgc3BlZWQgYW55LgorICoKKyAqICgwMi8xMS8yMDAwKSBna2gKKyAqCUFkZGVkIFZJU09SX0ZVTkNUSU9OX0NPTlNPTEUgdG8gdGhlIHZpc29yIHN0YXJ0dXAgZnVuY3Rpb24uIFRoaXMgd2FzIGEKKyAqCXBhdGNoIGZyb20gTWlsZXMgTG90dCAobWlsb3NAaW5zeW5jLm5ldCkuCisgKglGaXhlZCBidWcgd2l0aCBub3QgcmVzdG9yaW5nIHRoZSBtaW5vciByYW5nZSB0aGF0IGEgZGV2aWNlIGdyYWJzLCBpZgorICoJdGhlIHN0YXJ0dXAgZnVuY3Rpb24gZmFpbHMgKHRoYW5rcyBNaWxlcyBmb3IgZmluZGluZyB0aGlzKS4KKyAqCisgKiAoMDIvMDUvMjAwMCkgZ2toCisgKglBZGRlZCBpbml0aWFsIGZyYW1ld29yayBmb3IgdGhlIEtleXNwYW4gUERBIHNlcmlhbCBjb252ZXJ0ZXIgc28gdGhhdAorICoJQnJpYW4gV2FybmVyIGhhcyBhIHBsYWNlIHRvIHB1dCBoaXMgY29kZS4KKyAqCU1hZGUgdGhlIGV6dXNiIHNwZWNpZmljIGZ1bmN0aW9ucyBnZW5lcmljIGVub3VnaCB0aGF0IGRpZmZlcmVudAorICoJZGV2aWNlcyBjYW4gdXNlIHRoZW0gKHdoaXRlaGVhdCBhbmQga2V5c3Bhbl9wZGEgYm90aCBuZWVkIHRoZW0pLgorICoJU3BsaXQgb3V0IGEgd2hvbGUgYnVuY2ggb2Ygc3RydWN0dXJlIGFuZCBvdGhlciBzdHVmZiB0byBhIHNlcGFyYXRlCisgKgl1c2Itc2VyaWFsLmggZmlsZS4KKyAqCU1hZGUgdGhlIFZpc29yIGNvbm5lY3Rpb24gbWVzc2FnZXMgYSBsaXR0bGUgbW9yZSB1bmRlcnN0YW5kYWJsZSwgbm93CisgKgl0aGF0IE1pbGVzIExvdHQgKG1pbG9zQGluc3luYy5uZXQpIGhhcyBnb3R0ZW4gdGhlIEdlbmVyaWMgY2hhbm5lbCB0bworICoJd29yay4gQWxzbyBtYWRlIHRoZW0gYWx3YXlzIHNob3cgdXAgaW4gdGhlIGxvZyBmaWxlLgorICogCisgKiAoMDEvMjUvMjAwMCkgZ2toCisgKglBZGRlZCBpbml0aWFsIGZyYW1ld29yayBmb3IgRlRESSBzZXJpYWwgY29udmVydGVyIHNvIHRoYXQgQmlsbCBSeWRlcgorICoJaGFzIGEgcGxhY2UgdG8gcHV0IGhpcyBjb2RlLgorICoJQWRkZWQgdGhlIHZlbmRvciBzcGVjaWZpYyBpbmZvIGZyb20gSGFuZHNwcmluZy4gTm93IHdlIGNhbiBwcmludCBvdXQKKyAqCWluZm9ybWF0aW9uYWwgZGVidWcgbWVzc2FnZXMgYXMgd2VsbCBhcyB1bmRlcnN0YW5kIHdoYXQgaXMgaGFwcGVuaW5nLgorICoKKyAqICgwMS8yMy8yMDAwKSBna2gKKyAqCUZpeGVkIHByb2JsZW0gb2YgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gb3BlbiBhIHBvcnQgdGhhdCBkaWRuJ3QgaGF2ZSBhCisgKglkZXZpY2UgYXNzaWduZWQgdG8gaXQuIE1hZGUgdGhlIG1pbm9yIG5vZGUgZmluZGluZyBhIGxpdHRsZSBzbWFydGVyLAorICoJbm93IGl0IGxvb2tzIHRvIGZpbmQgYSBjb250aW51b3VzIHNwYWNlIGZvciB0aGUgbmV3IGRldmljZS4KKyAqCisgKiAoMDEvMjEvMjAwMCkgZ2toCisgKglGaXhlZCBidWcgaW4gdmlzb3Jfc3RhcnR1cCB3aXRoIHBhdGNoIGZyb20gTWlsZXMgTG90dCAobWlsb3NAaW5zeW5jLm5ldCkKKyAqCUZpeGVkIGdldF9zZXJpYWxfYnlfbWlub3Igd2hpY2ggd2FzIGFsbCBtZXNzZWQgdXAgZm9yIG11bHRpIHBvcnQgCisgKglkZXZpY2VzLiBGaXhlZCBtdWx0aSBwb3J0IHByb2JsZW0gZm9yIGdlbmVyaWMgZGV2aWNlcy4gTm93IHRoZSBudW1iZXIKKyAqCW9mIHBvcnRzIGlzIGRldGVybWluZWQgYnkgdGhlIG51bWJlciBvZiBidWxrIG91dCBlbmRwb2ludHMgZm9yIHRoZQorICoJZ2VuZXJpYyBkZXZpY2UuCisgKgorICogKDAxLzE5LzIwMDApIGdraAorICoJUmVtb3ZlZCBsb3RzIG9mIGNydWZ0IHRoYXQgd2FzIGFyb3VuZCBmcm9tIHRoZSBvbGQgKHByZSB1cmIpIGRyaXZlciAKKyAqCWludGVyZmFjZS4KKyAqCU1hZGUgdGhlIHNlcmlhbF90YWJsZSBkeW5hbWljLiBUaGlzIHNob3VsZCBzYXZlIGxvdHMgb2YgbWVtb3J5IHdoZW4KKyAqCXRoZSBudW1iZXIgb2YgbWlub3Igbm9kZXMgZ29lcyB1cCB0byAyNTYuCisgKglBZGRlZCBpbml0aWFsIHN1cHBvcnQgZm9yIGRldmljZXMgdGhhdCBoYXZlIG1vcmUgdGhhbiBvbmUgcG9ydC4gCisgKglBZGRlZCBtb3JlIGRlYnVnZ2luZyBjb21tZW50cyBmb3IgdGhlIFZpc29yLCBhbmQgYWRkZWQgYSBuZWVkZWQgCisgKglzZXRfY29uZmlndXJhdGlvbiBjYWxsLgorICoKKyAqICgwMS8xNy8yMDAwKSBna2gKKyAqCUZpeGVkIHRoZSBXaGl0ZUhFQVQgZmlybXdhcmUgKG15IHByb2Nlc3NpbmcgdG9vbCBoYWQgYSBidWcpCisgKglhbmQgYWRkZWQgbmV3IGRlYnVnIGxvYWRlciBmaXJtd2FyZSBmb3IgaXQuCisgKglSZW1vdmVkIHRoZSBwdXRfY2hhciBmdW5jdGlvbiBhcyBpdCBpc24ndCByZWFsbHkgbmVlZGVkLgorICoJQWRkZWQgdmlzb3Igc3RhcnR1cCBjb21tYW5kcyBhcyBmb3VuZCBieSB0aGUgV2luOTggZHVtcC4KKyAqIAorICogKDAxLzEzLzIwMDApIGdraAorICoJRml4ZWQgdGhlIHZlbmRvciBpZCBmb3IgdGhlIGdlbmVyaWMgZHJpdmVyIHRvIHRoZSBvbmUgSSBtZWFudCBpdCB0byBiZS4KKyAqCisgKiAoMDEvMTIvMjAwMCkgZ2toCisgKglGb3JnZXQgdGhlIHZlcnNpb24gbnVtYmVyaW5nLi4udGhhdCdzIHByZXR0eSB1c2VsZXNzLi4uCisgKglNYWRlIHRoZSBkcml2ZXIgYWJsZSB0byBiZSBjb21waWxlZCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBzZWxlY3Qgd2hpY2gKKyAqCWNvbnZlcnRlciB0aGV5IHdhbnQgdG8gdXNlLiBUaGlzIGFsbG93cyBwZW9wbGUgd2hvIG9ubHkgd2FudCB0aGUgVmlzb3IKKyAqCXN1cHBvcnQgdG8gbm90IHBheSB0aGUgbWVtb3J5IHNpemUgcHJpY2Ugb2YgdGhlIFdoaXRlSEVBVC4KKyAqCUZpeGVkIGJ1ZyB3aGVyZSB0aGUgZ2VuZXJpYyBkcml2ZXIgKGlkVmVuZG9yPTAwMDAgYW5kIGlkUHJvZHVjdD0wMDAwKQorICoJZ3JhYmJlZCB0aGUgcm9vdCBodWIuIE5vdCBnb29kLgorICogCisgKiB2ZXJzaW9uIDAuNC4wICgwMS8xMC8yMDAwKSBna2gKKyAqCUFkZGVkIHdoaXRlaGVhdC5oIGNvbnRhaW5pbmcgdGhlIGZpcm13YXJlIGZvciB0aGUgQ29ubmVjdFRlY2ggV2hpdGVIRUFUCisgKglkZXZpY2UuIEFkZGVkIHN0YXJ0dXAgZnVuY3Rpb24gdG8gYWxsb3cgZmlybXdhcmUgdG8gYmUgZG93bmxvYWRlZCB0bworICoJYSBkZXZpY2UgaWYgaXQgbmVlZHMgdG8gYmUuCisgKglBZGRlZCBmaXJtd2FyZSBkb3dubG9hZCBsb2dpYyB0byB0aGUgV2hpdGVIRUFUIGRldmljZS4KKyAqCVN0YXJ0ZWQgdG8gYWRkICNkZWZpbmVzIHRvIHNwbGl0IHVwIHRoZSBkaWZmZXJlbnQgZHJpdmVycyBmb3IgcG90ZW50aWFsCisgKgljb25maWd1cmF0aW9uIG9wdGlvbi4KKyAqCQorICogdmVyc2lvbiAwLjMuMSAoMTIvMzAvOTkpIGdraAorICogICAgICBGaXhlZCBwcm9ibGVtcyB3aXRoIHVyYiBmb3IgYnVsayBvdXQuCisgKiAgICAgIEFkZGVkIGluaXRpYWwgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc2V0cyBvZiBlbmRwb2ludHMuIFRoaXMgZW5hYmxlcworICogICAgICB0aGUgSGFuZHNwcmluZyBWaXNvciB0byBiZSBhdHRhY2hlZCBzdWNjZXNzZnVsbHkuIE9ubHkgdGhlIGZpcnN0CisgKiAgICAgIGJ1bGsgaW4gLyBidWxrIG91dCBlbmRwb2ludCBwYWlyIGlzIGJlaW5nIHVzZWQgcmlnaHQgbm93LgorICoKKyAqIHZlcnNpb24gMC4zLjAgKDEyLzI3Lzk5KSBna2gKKyAqCUFkZGVkIGluaXRpYWwgc3VwcG9ydCBmb3IgdGhlIEhhbmRzcHJpbmcgVmlzb3IgYmFzZWQgb24gYSBwYXRjaCBmcm9tCisgKglNaWxlcyBMb3R0IChtaWxvc0BzbmVldHkuaW5zeW5jLm5ldCkKKyAqCUNsZWFuZWQgdXAgdGhlIGNvZGUgYSBidW5jaCBhbmQgY29udmVydGVkIG92ZXIgdG8gdXNpbmcgdXJicyBvbmx5LgorICoKKyAqIHZlcnNpb24gMC4yLjMgKDEyLzIxLzk5KSBna2gKKyAqCUFkZGVkIGluaXRpYWwgc3VwcG9ydCBmb3IgdGhlIENvbm5lY3QgVGVjaCBXaGl0ZUhFQVQgY29udmVydGVyLgorICoJSW5jcmVtZW50ZWQgdGhlIG51bWJlciBvZiBwb3J0cyBpbiBleHBlY3RhdGlvbiBvZiBnZXR0aW5nIHRoZQorICoJV2hpdGVIRUFUIHRvIHdvcmsgcHJvcGVybHkgKDQgcG9ydHMgcGVyIGNvbm5lY3Rpb24pLgorICoJQWRkZWQgbm90aWZpY2F0aW9uIG9uIGluc2VydGlvbiBhbmQgcmVtb3ZhbCBvZiB3aGF0IHBvcnQgdGhlCisgKglkZXZpY2UgaXMvd2FzIGNvbm5lY3RlZCB0byAoYW5kIHdoYXQga2luZCBvZiBkZXZpY2UgaXQgd2FzKS4KKyAqCisgKiB2ZXJzaW9uIDAuMi4yICgxMi8xNi85OSkgZ2toCisgKglDaGFuZ2VkIG1ham9yIG51bWJlciB0byB0aGUgbmV3IGFsbG9jYXRlZCBudW1iZXIuIFdlJ3JlIGxlZ2FsIG5vdyEKKyAqCisgKiB2ZXJzaW9uIDAuMi4xICgxMi8xNC85OSkgZ2toCisgKglGaXhlZCBidWcgdGhhdCBoYXBwZW5zIHdoZW4gZGV2aWNlIG5vZGUgaXMgb3BlbmVkIHdoZW4gdGhlcmUgaXNuJ3QgYQorICoJZGV2aWNlIGF0dGFjaGVkIHRvIGl0LiBUaGFua3MgdG8gbWFyZWtAd2ViZGVzaWduLm5vIGZvciBub3RpY2luZyB0aGlzLgorICoKKyAqIHZlcnNpb24gMC4yLjAgKDExLzEwLzk5KSBna2gKKyAqCVNwbGl0IHVwIGludGVybmFscyB0byBtYWtlIGl0IGVhc2llciB0byBhZGQgZGlmZmVyZW50IHR5cGVzIG9mIHNlcmlhbCAKKyAqCWNvbnZlcnRlcnMgdG8gdGhlIGNvZGUuCisgKglBZGRlZCBhICJnZW5lcmljIiBkcml2ZXIgdGhhdCBnZXRzIGl0J3MgdmVuZG9yIGFuZCBwcm9kdWN0IGlkCisgKglmcm9tIHdoZW4gdGhlIG1vZHVsZSBpcyBsb2FkZWQuIFRoYW5rcyB0byBEYXZpZCBFLiBOZWxzb24gKGRuZWxzb25AanVtcC5uZXQpCisgKglmb3IgdGhlIGlkZWEgYW5kIHNhbXBsZSBjb2RlIChmcm9tIHRoZSB1c2Igc2Nhbm5lciBkcml2ZXIuKQorICoJQ2xlYXJlZCB1cCBhbnkgbGljZW5zaW5nIHF1ZXN0aW9ucyBieSByZWxlYXNpbmcgaXQgdW5kZXIgdGhlIEdOVSBHUEwuCisgKgorICogdmVyc2lvbiAwLjEuMiAoMTAvMjUvOTkpIGdraAorICogCUZpeGVkIGJ1ZyBpbiBkZXRlY3RpbmcgZGV2aWNlLgorICoKKyAqIHZlcnNpb24gMC4xLjEgKDEwLzA1Lzk5KSBna2gKKyAqIAlDaGFuZ2VkIHRoZSBtYWpvciBudW1iZXIgdG8gbm90IGNvbmZsaWN0IHdpdGggYW55dGhpbmcgZWxzZS4KKyAqCisgKiB2ZXJzaW9uIDAuMSAoMDkvMjgvOTkpIGdraAorICogCUNhbiByZWNvZ25pemUgdGhlIHR3byBkaWZmZXJlbnQgZGV2aWNlcyBhbmQgc3RhcnQgdXAgYSByZWFkIGZyb20KKyAqCWRldmljZSB3aGVuIGFza2VkIHRvLiBXcml0ZXMgYWxzbyB3b3JrLiBObyBjb250cm9sIHNpZ25hbHMgeWV0LCB0aGlzCisgKglhbGwgaXMgdmVuZG9yIHNwZWNpZmljIGRhdGEgKGkuZS4gbm8gc3BlYyksIGFsc28gbm8gY29udHJvbCBmb3IKKyAqCWRpZmZlcmVudCBiYXVkIHJhdGVzIG9yIG90aGVyIGJpdCBzZXR0aW5ncy4KKyAqCUN1cnJlbnRseSB3ZSBhcmUgdXNpbmcgdGhlIHNhbWUgZGV2aWQgYXMgdGhlIGFjbSBkcml2ZXIuIFRoaXMgbmVlZHMKKyAqCXRvIGNoYW5nZS4KKyAqIAorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAidXNiLXNlcmlhbC5oIgorI2luY2x1ZGUgInBsMjMwMy5oIgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2Mi4wIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJHcmVnIEtyb2FoLUhhcnRtYW4sIGdyZWdAa3JvYWguY29tLCBodHRwOi8vd3d3Lmtyb2FoLmNvbS9saW51eC8iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgU2VyaWFsIERyaXZlciBjb3JlIgorCisvKiBEcml2ZXIgc3RydWN0dXJlIHdlIHJlZ2lzdGVyIHdpdGggdGhlIFVTQiBjb3JlICovCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX3NlcmlhbF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJInVzYnNlcmlhbCIsCisJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKK307CisKKy8qIFRoZXJlIGlzIG5vIE1PRFVMRV9ERVZJQ0VfVEFCTEUgZm9yIHVzYnNlcmlhbC5jLiAgSW5zdGVhZAorICAgdGhlIE1PRFVMRV9ERVZJQ0VfVEFCTEUgZGVjbGFyYXRpb25zIGluIGVhY2ggc2VyaWFsIGRyaXZlcgorICAgY2F1c2UgdGhlICJob3RwbHVnIiBwcm9ncmFtIHRvIHB1bGwgaW4gd2hhdGV2ZXIgbW9kdWxlIGlzIG5lY2Vzc2FyeQorICAgdmlhIG1vZHByb2JlLCBhbmQgbW9kcHJvYmUgd2lsbCBsb2FkIHVzYnNlcmlhbCBiZWNhdXNlIHRoZSBzZXJpYWwKKyAgIGRyaXZlcnMgZGVwZW5kIG9uIGl0LgorKi8KKworc3RhdGljIGludCBkZWJ1ZzsKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsX3RhYmxlW1NFUklBTF9UVFlfTUlOT1JTXTsJLyogaW5pdGlhbGx5IGFsbCBOVUxMICovCitzdGF0aWMgTElTVF9IRUFEKHVzYl9zZXJpYWxfZHJpdmVyX2xpc3QpOworCitzdHJ1Y3QgdXNiX3NlcmlhbCAqdXNiX3NlcmlhbF9nZXRfYnlfaW5kZXgodW5zaWduZWQgaW5kZXgpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHNlcmlhbF90YWJsZVtpbmRleF07CisKKwlpZiAoc2VyaWFsKQorCQlrcmVmX2dldCgmc2VyaWFsLT5rcmVmKTsKKwlyZXR1cm4gc2VyaWFsOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWwgKmdldF9mcmVlX3NlcmlhbCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgaW50IG51bV9wb3J0cywgdW5zaWduZWQgaW50ICptaW5vcikKK3sKKwl1bnNpZ25lZCBpbnQgaSwgajsKKwlpbnQgZ29vZF9zcG90OworCisJZGJnKCIlcyAlZCIsIF9fRlVOQ1RJT05fXywgbnVtX3BvcnRzKTsKKworCSptaW5vciA9IDA7CisJZm9yIChpID0gMDsgaSA8IFNFUklBTF9UVFlfTUlOT1JTOyArK2kpIHsKKwkJaWYgKHNlcmlhbF90YWJsZVtpXSkKKwkJCWNvbnRpbnVlOworCisJCWdvb2Rfc3BvdCA9IDE7CisJCWZvciAoaiA9IDE7IGogPD0gbnVtX3BvcnRzLTE7ICsraikKKwkJCWlmICgoaStqID49IFNFUklBTF9UVFlfTUlOT1JTKSB8fCAoc2VyaWFsX3RhYmxlW2kral0pKSB7CisJCQkJZ29vZF9zcG90ID0gMDsKKwkJCQlpICs9IGo7CisJCQkJYnJlYWs7CisJCQl9CisJCWlmIChnb29kX3Nwb3QgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCSptaW5vciA9IGk7CisJCWRiZygiJXMgLSBtaW5vciBiYXNlID0gJWQiLCBfX0ZVTkNUSU9OX18sICptaW5vcik7CisJCWZvciAoaSA9ICptaW5vcjsgKGkgPCAoKm1pbm9yICsgbnVtX3BvcnRzKSkgJiYgKGkgPCBTRVJJQUxfVFRZX01JTk9SUyk7ICsraSkKKwkJCXNlcmlhbF90YWJsZVtpXSA9IHNlcmlhbDsKKwkJcmV0dXJuIHNlcmlhbDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHJldHVybl9zZXJpYWwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgaTsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKHNlcmlhbCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQlzZXJpYWxfdGFibGVbc2VyaWFsLT5taW5vciArIGldID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfc2VyaWFsKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlpbnQgaTsKKworCXNlcmlhbCA9IHRvX3VzYl9zZXJpYWwoa3JlZik7CisKKwlkYmcgKCIlcyAtICVzIiwgX19GVU5DVElPTl9fLCBzZXJpYWwtPnR5cGUtPm5hbWUpOworCisJc2VyaWFsLT50eXBlLT5zaHV0ZG93bihzZXJpYWwpOworCisJLyogcmV0dXJuIHRoZSBtaW5vciByYW5nZSB0aGF0IHRoaXMgZGV2aWNlIGhhZCAqLworCXJldHVybl9zZXJpYWwoc2VyaWFsKTsKKworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKQorCQlzZXJpYWwtPnBvcnRbaV0tPm9wZW5fY291bnQgPSAwOworCisJLyogdGhlIHBvcnRzIGFyZSBjbGVhbmVkIHVwIGFuZCByZWxlYXNlZCBpbiBwb3J0X3JlbGVhc2UoKSAqLworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKQorCQlpZiAoc2VyaWFsLT5wb3J0W2ldLT5kZXYucGFyZW50ICE9IE5VTEwpIHsKKwkJCWRldmljZV91bnJlZ2lzdGVyKCZzZXJpYWwtPnBvcnRbaV0tPmRldik7CisJCQlzZXJpYWwtPnBvcnRbaV0gPSBOVUxMOworCQl9CisKKwkvKiBJZiB0aGlzIGlzIGEgImZha2UiIHBvcnQsIHdlIGhhdmUgdG8gY2xlYW4gaXQgdXAgaGVyZSwgYXMgaXQgd2lsbAorCSAqIG5vdCBnZXQgY2xlYW5lZCB1cCBpbiBwb3J0X3JlbGVhc2UoKSBhcyBpdCB3YXMgbmV2ZXIgcmVnaXN0ZXJlZCB3aXRoCisJICogdGhlIGRyaXZlciBjb3JlICovCisJaWYgKHNlcmlhbC0+bnVtX3BvcnRzIDwgc2VyaWFsLT5udW1fcG9ydF9wb2ludGVycykgeworCQlmb3IgKGkgPSBzZXJpYWwtPm51bV9wb3J0czsgaSA8IHNlcmlhbC0+bnVtX3BvcnRfcG9pbnRlcnM7ICsraSkgeworCQkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJCWlmICghcG9ydCkKKwkJCQljb250aW51ZTsKKwkJCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJCQl1c2JfZnJlZV91cmIocG9ydC0+cmVhZF91cmIpOworCQkJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJCQl1c2JfZnJlZV91cmIocG9ydC0+d3JpdGVfdXJiKTsKKwkJCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwkJCXVzYl9mcmVlX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwkJCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYik7CisJCQl1c2JfZnJlZV91cmIocG9ydC0+aW50ZXJydXB0X291dF91cmIpOworCQkJa2ZyZWUocG9ydC0+YnVsa19pbl9idWZmZXIpOworCQkJa2ZyZWUocG9ydC0+YnVsa19vdXRfYnVmZmVyKTsKKwkJCWtmcmVlKHBvcnQtPmludGVycnVwdF9pbl9idWZmZXIpOworCQkJa2ZyZWUocG9ydC0+aW50ZXJydXB0X291dF9idWZmZXIpOworCQl9CisJfQorCisJdXNiX3B1dF9kZXYoc2VyaWFsLT5kZXYpOworCisJLyogZnJlZSB1cCBhbnkgbWVtb3J5IHRoYXQgd2UgYWxsb2NhdGVkICovCisJa2ZyZWUgKHNlcmlhbCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRHJpdmVyIHR0eSBpbnRlcmZhY2UgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHNlcmlhbF9vcGVuIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXVuc2lnbmVkIGludCBwb3J0TnVtYmVyOworCWludCByZXR2YWw7CisJCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBnZXQgdGhlIHNlcmlhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdHR5IHBvaW50ZXIgKi8KKwlzZXJpYWwgPSB1c2Jfc2VyaWFsX2dldF9ieV9pbmRleCh0dHktPmluZGV4KTsKKwlpZiAoIXNlcmlhbCkgeworCQl0dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcG9ydE51bWJlciA9IHR0eS0+aW5kZXggLSBzZXJpYWwtPm1pbm9yOworCXBvcnQgPSBzZXJpYWwtPnBvcnRbcG9ydE51bWJlcl07CisJIAorCSsrcG9ydC0+b3Blbl9jb3VudDsKKworCWlmIChwb3J0LT5vcGVuX2NvdW50ID09IDEpIHsKKworCQkvKiBzZXQgdXAgb3VyIHBvcnQgc3RydWN0dXJlIG1ha2luZyB0aGUgdHR5IGRyaXZlcgorCQkgKiByZW1lbWJlciBvdXIgcG9ydCBvYmplY3QsIGFuZCB1cyBpdCAqLworCQl0dHktPmRyaXZlcl9kYXRhID0gcG9ydDsKKwkJcG9ydC0+dHR5ID0gdHR5OworCisJCS8qIGxvY2sgdGhpcyBtb2R1bGUgYmVmb3JlIHdlIGNhbGwgaXQKKwkJICogdGhpcyBtYXkgZmFpbCwgd2hpY2ggbWVhbnMgd2UgbXVzdCBiYWlsIG91dCwKKwkJICogc2FmZSBiZWNhdXNlIHdlIGFyZSBjYWxsZWQgd2l0aCBCS0wgaGVsZCAqLworCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHNlcmlhbC0+dHlwZS0+b3duZXIpKSB7CisJCQlyZXR2YWwgPSAtRU5PREVWOworCQkJZ290byBiYWlsb3V0X2tyZWZfcHV0OworCQl9CisKKwkJLyogb25seSBjYWxsIHRoZSBkZXZpY2Ugc3BlY2lmaWMgb3BlbiBpZiB0aGlzIAorCQkgKiBpcyB0aGUgZmlyc3QgdGltZSB0aGUgcG9ydCBpcyBvcGVuZWQgKi8KKwkJcmV0dmFsID0gc2VyaWFsLT50eXBlLT5vcGVuKHBvcnQsIGZpbHApOworCQlpZiAocmV0dmFsKQorCQkJZ290byBiYWlsb3V0X21vZHVsZV9wdXQ7CisJfQorCisJcmV0dXJuIDA7CisKK2JhaWxvdXRfbW9kdWxlX3B1dDoKKwltb2R1bGVfcHV0KHNlcmlhbC0+dHlwZS0+b3duZXIpOworYmFpbG91dF9rcmVmX3B1dDoKKwlrcmVmX3B1dCgmc2VyaWFsLT5rcmVmLCBkZXN0cm95X3NlcmlhbCk7CisJcG9ydC0+b3Blbl9jb3VudCA9IDA7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgc2VyaWFsX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdHR5LT5kcml2ZXJfZGF0YTsKKworCWlmICghcG9ydCkKKwkJcmV0dXJuOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAocG9ydC0+b3Blbl9jb3VudCA9PSAwKQorCQlyZXR1cm47CisKKwktLXBvcnQtPm9wZW5fY291bnQ7CisJaWYgKHBvcnQtPm9wZW5fY291bnQgPT0gMCkgeworCQkvKiBvbmx5IGNhbGwgdGhlIGRldmljZSBzcGVjaWZpYyBjbG9zZSBpZiB0aGlzIAorCQkgKiBwb3J0IGlzIGJlaW5nIGNsb3NlZCBieSB0aGUgbGFzdCBvd25lciAqLworCQlwb3J0LT5zZXJpYWwtPnR5cGUtPmNsb3NlKHBvcnQsIGZpbHApOworCisJCWlmIChwb3J0LT50dHkpIHsKKwkJCWlmIChwb3J0LT50dHktPmRyaXZlcl9kYXRhKQorCQkJCXBvcnQtPnR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCQkJcG9ydC0+dHR5ID0gTlVMTDsKKwkJfQorCisJCW1vZHVsZV9wdXQocG9ydC0+c2VyaWFsLT50eXBlLT5vd25lcik7CisJfQorCisJa3JlZl9wdXQoJnBvcnQtPnNlcmlhbC0+a3JlZiwgZGVzdHJveV9zZXJpYWwpOworfQorCitzdGF0aWMgaW50IHNlcmlhbF93cml0ZSAoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB0dHktPmRyaXZlcl9kYXRhOworCWludCByZXR2YWwgPSAtRUlOVkFMOworCisJZGJnKCIlcyAtIHBvcnQgJWQsICVkIGJ5dGUocykiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY291bnQpOworCisJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiAqLworCXJldHZhbCA9IHBvcnQtPnNlcmlhbC0+dHlwZS0+d3JpdGUocG9ydCwgYnVmLCBjb3VudCk7CisKK2V4aXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBzZXJpYWxfd3JpdGVfcm9vbSAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkgCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHR0eS0+ZHJpdmVyX2RhdGE7CisJaW50IHJldHZhbCA9IC1FSU5WQUw7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbiIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBwYXNzIG9uIHRvIHRoZSBkcml2ZXIgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uICovCisJcmV0dmFsID0gcG9ydC0+c2VyaWFsLT50eXBlLT53cml0ZV9yb29tKHBvcnQpOworCitleGl0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsX2NoYXJzX2luX2J1ZmZlciAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkgCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHR0eS0+ZHJpdmVyX2RhdGE7CisJaW50IHJldHZhbCA9IC1FSU5WQUw7CisKKwlkYmcoIiVzID0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbiIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBwYXNzIG9uIHRvIHRoZSBkcml2ZXIgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uICovCisJcmV0dmFsID0gcG9ydC0+c2VyaWFsLT50eXBlLT5jaGFyc19pbl9idWZmZXIocG9ydCk7CisKK2V4aXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgc2VyaWFsX3Rocm90dGxlIChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdHR5LT5kcml2ZXJfZGF0YTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCWRiZyAoIiVzIC0gcG9ydCBub3Qgb3BlbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBwYXNzIG9uIHRvIHRoZSBkcml2ZXIgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uICovCisJaWYgKHBvcnQtPnNlcmlhbC0+dHlwZS0+dGhyb3R0bGUpCisJCXBvcnQtPnNlcmlhbC0+dHlwZS0+dGhyb3R0bGUocG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcmlhbF91bnRocm90dGxlIChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdHR5LT5kcml2ZXJfZGF0YTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHBhc3Mgb24gdG8gdGhlIGRyaXZlciBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gKi8KKwlpZiAocG9ydC0+c2VyaWFsLT50eXBlLT51bnRocm90dGxlKQorCQlwb3J0LT5zZXJpYWwtPnR5cGUtPnVudGhyb3R0bGUocG9ydCk7Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsX2lvY3RsIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB0dHktPmRyaXZlcl9kYXRhOworCWludCByZXR2YWwgPSAtRU5PREVWOworCisJZGJnKCIlcyAtIHBvcnQgJWQsIGNtZCAweCUuNHgiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY21kKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlkYmcgKCIlcyAtIHBvcnQgbm90IG9wZW4iLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiBpZiBpdCBpcyBhdmFpbGFibGUgKi8KKwlpZiAocG9ydC0+c2VyaWFsLT50eXBlLT5pb2N0bCkKKwkJcmV0dmFsID0gcG9ydC0+c2VyaWFsLT50eXBlLT5pb2N0bChwb3J0LCBmaWxlLCBjbWQsIGFyZyk7CisJZWxzZQorCQlyZXR2YWwgPSAtRU5PSU9DVExDTUQ7CisKK2V4aXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgc2VyaWFsX3NldF90ZXJtaW9zIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlvcyAqIG9sZCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdHR5LT5kcml2ZXJfZGF0YTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHBhc3Mgb24gdG8gdGhlIGRyaXZlciBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaWYgaXQgaXMgYXZhaWxhYmxlICovCisJaWYgKHBvcnQtPnNlcmlhbC0+dHlwZS0+c2V0X3Rlcm1pb3MpCisJCXBvcnQtPnNlcmlhbC0+dHlwZS0+c2V0X3Rlcm1pb3MocG9ydCwgb2xkKTsKK30KKworc3RhdGljIHZvaWQgc2VyaWFsX2JyZWFrIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopIHR0eS0+ZHJpdmVyX2RhdGE7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBwYXNzIG9uIHRvIHRoZSBkcml2ZXIgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIGlmIGl0IGlzIGF2YWlsYWJsZSAqLworCWlmIChwb3J0LT5zZXJpYWwtPnR5cGUtPmJyZWFrX2N0bCkKKwkJcG9ydC0+c2VyaWFsLT50eXBlLT5icmVha19jdGwocG9ydCwgYnJlYWtfc3RhdGUpOworfQorCitzdGF0aWMgaW50IHNlcmlhbF9yZWFkX3Byb2MgKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJaW50IGxlbmd0aCA9IDA7CisJaW50IGk7CisJb2ZmX3QgYmVnaW4gPSAwOworCWNoYXIgdG1wWzQwXTsKKworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworCWxlbmd0aCArPSBzcHJpbnRmIChwYWdlLCAidXNic2VyaW5mbzoxLjAgZHJpdmVyOiVzXG4iLCBEUklWRVJfVkVSU0lPTik7CisJZm9yIChpID0gMDsgaSA8IFNFUklBTF9UVFlfTUlOT1JTICYmIGxlbmd0aCA8IFBBR0VfU0laRTsgKytpKSB7CisJCXNlcmlhbCA9IHVzYl9zZXJpYWxfZ2V0X2J5X2luZGV4KGkpOworCQlpZiAoc2VyaWFsID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlsZW5ndGggKz0gc3ByaW50ZiAocGFnZStsZW5ndGgsICIlZDoiLCBpKTsKKwkJaWYgKHNlcmlhbC0+dHlwZS0+b3duZXIpCisJCQlsZW5ndGggKz0gc3ByaW50ZiAocGFnZStsZW5ndGgsICIgbW9kdWxlOiVzIiwgbW9kdWxlX25hbWUoc2VyaWFsLT50eXBlLT5vd25lcikpOworCQlsZW5ndGggKz0gc3ByaW50ZiAocGFnZStsZW5ndGgsICIgbmFtZTpcIiVzXCIiLCBzZXJpYWwtPnR5cGUtPm5hbWUpOworCQlsZW5ndGggKz0gc3ByaW50ZiAocGFnZStsZW5ndGgsICIgdmVuZG9yOiUwNHggcHJvZHVjdDolMDR4IiwgCisJCQkJICAgbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLCAKKwkJCQkgICBsZTE2X3RvX2NwdShzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKKwkJbGVuZ3RoICs9IHNwcmludGYgKHBhZ2UrbGVuZ3RoLCAiIG51bV9wb3J0czolZCIsIHNlcmlhbC0+bnVtX3BvcnRzKTsKKwkJbGVuZ3RoICs9IHNwcmludGYgKHBhZ2UrbGVuZ3RoLCAiIHBvcnQ6JWQiLCBpIC0gc2VyaWFsLT5taW5vciArIDEpOworCisJCXVzYl9tYWtlX3BhdGgoc2VyaWFsLT5kZXYsIHRtcCwgc2l6ZW9mKHRtcCkpOworCQlsZW5ndGggKz0gc3ByaW50ZiAocGFnZStsZW5ndGgsICIgcGF0aDolcyIsIHRtcCk7CisJCQkKKwkJbGVuZ3RoICs9IHNwcmludGYgKHBhZ2UrbGVuZ3RoLCAiXG4iKTsKKwkJaWYgKChsZW5ndGggKyBiZWdpbikgPiAob2ZmICsgY291bnQpKQorCQkJZ290byBkb25lOworCQlpZiAoKGxlbmd0aCArIGJlZ2luKSA8IG9mZikgeworCQkJYmVnaW4gKz0gbGVuZ3RoOworCQkJbGVuZ3RoID0gMDsKKwkJfQorCQlrcmVmX3B1dCgmc2VyaWFsLT5rcmVmLCBkZXN0cm95X3NlcmlhbCk7CisJfQorCSplb2YgPSAxOworZG9uZToKKwlpZiAob2ZmID49IChsZW5ndGggKyBiZWdpbikpCisJCXJldHVybiAwOworCSpzdGFydCA9IHBhZ2UgKyAob2ZmLWJlZ2luKTsKKwlyZXR1cm4gKChjb3VudCA8IGJlZ2luK2xlbmd0aC1vZmYpID8gY291bnQgOiBiZWdpbitsZW5ndGgtb2ZmKTsKK30KKworc3RhdGljIGludCBzZXJpYWxfdGlvY21nZXQgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB0dHktPmRyaXZlcl9kYXRhOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJZGJnKCIlcyAtIHBvcnQgbm90IG9wZW4iLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHBvcnQtPnNlcmlhbC0+dHlwZS0+dGlvY21nZXQpCisJCXJldHVybiBwb3J0LT5zZXJpYWwtPnR5cGUtPnRpb2NtZ2V0KHBvcnQsIGZpbGUpOworCitleGl0OgorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHNlcmlhbF90aW9jbXNldCAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB0dHktPmRyaXZlcl9kYXRhOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJZGJnKCIlcyAtIHBvcnQgbm90IG9wZW4iLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHBvcnQtPnNlcmlhbC0+dHlwZS0+dGlvY21zZXQpCisJCXJldHVybiBwb3J0LT5zZXJpYWwtPnR5cGUtPnRpb2Ntc2V0KHBvcnQsIGZpbGUsIHNldCwgY2xlYXIpOworCitleGl0OgorCXJldHVybiAtRUlOVkFMOworfQorCit2b2lkIHVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KHZvaWQgKnByaXZhdGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopcHJpdmF0ZTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCisJaWYgKCFwb3J0KQorCQlyZXR1cm47CisKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKCF0dHkpCisJCXJldHVybjsKKworCXR0eV93YWtldXAodHR5KTsKK30KKworc3RhdGljIHZvaWQgcG9ydF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdG9fdXNiX3NlcmlhbF9wb3J0KGRldik7CisKKwlkYmcgKCIlcyAtICVzIiwgX19GVU5DVElPTl9fLCBkZXYtPmJ1c19pZCk7CisJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwl1c2JfZnJlZV91cmIocG9ydC0+cmVhZF91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCXVzYl9mcmVlX3VyYihwb3J0LT53cml0ZV91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwl1c2JfZnJlZV91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CisJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9vdXRfdXJiKTsKKwl1c2JfZnJlZV91cmIocG9ydC0+aW50ZXJydXB0X291dF91cmIpOworCWtmcmVlKHBvcnQtPmJ1bGtfaW5fYnVmZmVyKTsKKwlrZnJlZShwb3J0LT5idWxrX291dF9idWZmZXIpOworCWtmcmVlKHBvcnQtPmludGVycnVwdF9pbl9idWZmZXIpOworCWtmcmVlKHBvcnQtPmludGVycnVwdF9vdXRfYnVmZmVyKTsKKwlrZnJlZShwb3J0KTsKK30KKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsICogY3JlYXRlX3NlcmlhbCAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgCisJCQkJCSAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJCQkJICBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqdHlwZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCisJc2VyaWFsID0ga21hbGxvYyAoc2l6ZW9mICgqc2VyaWFsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZXJpYWwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiBOVUxMOworCX0KKwltZW1zZXQgKHNlcmlhbCwgMCwgc2l6ZW9mKCpzZXJpYWwpKTsKKwlzZXJpYWwtPmRldiA9IHVzYl9nZXRfZGV2KGRldik7CisJc2VyaWFsLT50eXBlID0gdHlwZTsKKwlzZXJpYWwtPmludGVyZmFjZSA9IGludGVyZmFjZTsKKwlrcmVmX2luaXQoJnNlcmlhbC0+a3JlZik7CisKKwlyZXR1cm4gc2VyaWFsOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKnNlYXJjaF9zZXJpYWxfZGV2aWNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqdDsKKworCS8qIExpc3QgdHJvdWdoIGtub3cgZGV2aWNlcyBhbmQgc2VlIGlmIHRoZSB1c2IgaWQgbWF0Y2hlcyAqLworCWxpc3RfZm9yX2VhY2gocCwgJnVzYl9zZXJpYWxfZHJpdmVyX2xpc3QpIHsKKwkJdCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUsIGRyaXZlcl9saXN0KTsKKwkJaWQgPSB1c2JfbWF0Y2hfaWQoaWZhY2UsIHQtPmlkX3RhYmxlKTsKKwkJaWYgKGlkICE9IE5VTEwpIHsKKwkJCWRiZygiZGVzY3JpcHRvciBtYXRjaGVzIik7CisJCQlyZXR1cm4gdDsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQorCitpbnQgdXNiX3NlcmlhbF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmludGVycnVwdF9pbl9lbmRwb2ludFtNQVhfTlVNX1BPUlRTXTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmludGVycnVwdF9vdXRfZW5kcG9pbnRbTUFYX05VTV9QT1JUU107CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpidWxrX2luX2VuZHBvaW50W01BWF9OVU1fUE9SVFNdOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqYnVsa19vdXRfZW5kcG9pbnRbTUFYX05VTV9QT1JUU107CisJc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKnR5cGUgPSBOVUxMOworCWludCByZXR2YWw7CisJaW50IG1pbm9yOworCWludCBidWZmZXJfc2l6ZTsKKwlpbnQgaTsKKwlpbnQgbnVtX2ludGVycnVwdF9pbiA9IDA7CisJaW50IG51bV9pbnRlcnJ1cHRfb3V0ID0gMDsKKwlpbnQgbnVtX2J1bGtfaW4gPSAwOworCWludCBudW1fYnVsa19vdXQgPSAwOworCWludCBudW1fcG9ydHMgPSAwOworCWludCBtYXhfZW5kcG9pbnRzOworCisJdHlwZSA9IHNlYXJjaF9zZXJpYWxfZGV2aWNlKGludGVyZmFjZSk7CisJaWYgKCF0eXBlKSB7CisJCWRiZygibm9uZSBtYXRjaGVkIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNlcmlhbCA9IGNyZWF0ZV9zZXJpYWwgKGRldiwgaW50ZXJmYWNlLCB0eXBlKTsKKwlpZiAoIXNlcmlhbCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogaWYgdGhpcyBkZXZpY2UgdHlwZSBoYXMgYSBwcm9iZSBmdW5jdGlvbiwgY2FsbCBpdCAqLworCWlmICh0eXBlLT5wcm9iZSkgeworCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQ7CisKKwkJaWYgKCF0cnlfbW9kdWxlX2dldCh0eXBlLT5vd25lcikpIHsKKwkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAibW9kdWxlIGdldCBmYWlsZWQsIGV4aXRpbmdcbiIpOworCQkJa2ZyZWUgKHNlcmlhbCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCWlkID0gdXNiX21hdGNoX2lkKGludGVyZmFjZSwgdHlwZS0+aWRfdGFibGUpOworCQlyZXR2YWwgPSB0eXBlLT5wcm9iZShzZXJpYWwsIGlkKTsKKwkJbW9kdWxlX3B1dCh0eXBlLT5vd25lcik7CisKKwkJaWYgKHJldHZhbCkgeworCQkJZGJnICgic3ViIGRyaXZlciByZWplY3RlZCBkZXZpY2UiKTsKKwkJCWtmcmVlIChzZXJpYWwpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCX0KKworCS8qIGRlc2NyaXB0b3IgbWF0Y2hlcywgbGV0J3MgZmluZCB0aGUgZW5kcG9pbnRzIG5lZWRlZCAqLworCS8qIGNoZWNrIG91dCB0aGUgZW5kcG9pbnRzICovCisJaWZhY2VfZGVzYyA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CisJZm9yIChpID0gMDsgaSA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgKytpKSB7CisJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7CisJCQorCQlpZiAoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkgJiYKKwkJICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDMpID09IDB4MDIpKSB7CisJCQkvKiB3ZSBmb3VuZCBhIGJ1bGsgaW4gZW5kcG9pbnQgKi8KKwkJCWRiZygiZm91bmQgYnVsayBpbiBvbiBlbmRwb2ludCAlZCIsIGkpOworCQkJYnVsa19pbl9lbmRwb2ludFtudW1fYnVsa19pbl0gPSBlbmRwb2ludDsKKwkJCSsrbnVtX2J1bGtfaW47CisJCX0KKworCQlpZiAoKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApID09IDB4MDApICYmCisJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAyKSkgeworCQkJLyogd2UgZm91bmQgYSBidWxrIG91dCBlbmRwb2ludCAqLworCQkJZGJnKCJmb3VuZCBidWxrIG91dCBvbiBlbmRwb2ludCAlZCIsIGkpOworCQkJYnVsa19vdXRfZW5kcG9pbnRbbnVtX2J1bGtfb3V0XSA9IGVuZHBvaW50OworCQkJKytudW1fYnVsa19vdXQ7CisJCX0KKwkJCisJCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSAmJgorCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMykpIHsKKwkJCS8qIHdlIGZvdW5kIGEgaW50ZXJydXB0IGluIGVuZHBvaW50ICovCisJCQlkYmcoImZvdW5kIGludGVycnVwdCBpbiBvbiBlbmRwb2ludCAlZCIsIGkpOworCQkJaW50ZXJydXB0X2luX2VuZHBvaW50W251bV9pbnRlcnJ1cHRfaW5dID0gZW5kcG9pbnQ7CisJCQkrK251bV9pbnRlcnJ1cHRfaW47CisJCX0KKworCQlpZiAoKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApID09IDB4MDApICYmCisJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAzKSkgeworCQkJLyogd2UgZm91bmQgYW4gaW50ZXJydXB0IG91dCBlbmRwb2ludCAqLworCQkJZGJnKCJmb3VuZCBpbnRlcnJ1cHQgb3V0IG9uIGVuZHBvaW50ICVkIiwgaSk7CisJCQlpbnRlcnJ1cHRfb3V0X2VuZHBvaW50W251bV9pbnRlcnJ1cHRfb3V0XSA9IGVuZHBvaW50OworCQkJKytudW1faW50ZXJydXB0X291dDsKKwkJfQorCX0KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfU0VSSUFMX1BMMjMwM19NT0RVTEUpCisJLyogQkVHSU4gSE9SUklCTEUgSEFDSyBGT1IgUEwyMzAzICovIAorCS8qIHRoaXMgaXMgbmVlZGVkIGR1ZSB0byB0aGUgbG9vbmV5IHdheSBpdHMgZW5kcG9pbnRzIGFyZSBzZXQgdXAgKi8KKwlpZiAoKChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFBMMjMwM19WRU5ET1JfSUQpICYmCisJICAgICAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gUEwyMzAzX1BST0RVQ1RfSUQpKSB8fAorCSAgICAoKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gQVRFTl9WRU5ET1JfSUQpICYmCisJICAgICAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gQVRFTl9QUk9EVUNUX0lEKSkpIHsKKwkJaWYgKGludGVyZmFjZSAhPSBkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlWzBdKSB7CisJCQkvKiBjaGVjayBvdXQgdGhlIGVuZHBvaW50cyBvZiB0aGUgb3RoZXIgaW50ZXJmYWNlKi8KKwkJCWlmYWNlX2Rlc2MgPSBkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlWzBdLT5jdXJfYWx0c2V0dGluZzsKKwkJCWZvciAoaSA9IDA7IGkgPCBpZmFjZV9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7ICsraSkgeworCQkJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7CisJCQkJaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApICYmCisJCQkJICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDMpID09IDB4MDMpKSB7CisJCQkJCS8qIHdlIGZvdW5kIGEgaW50ZXJydXB0IGluIGVuZHBvaW50ICovCisJCQkJCWRiZygiZm91bmQgaW50ZXJydXB0IGluIGZvciBQcm9saWZpYyBkZXZpY2Ugb24gc2VwYXJhdGUgaW50ZXJmYWNlIik7CisJCQkJCWludGVycnVwdF9pbl9lbmRwb2ludFtudW1faW50ZXJydXB0X2luXSA9IGVuZHBvaW50OworCQkJCQkrK251bV9pbnRlcnJ1cHRfaW47CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogTm93IG1ha2Ugc3VyZSB0aGUgUEwtMjMwMyBpcyBjb25maWd1cmVkIGNvcnJlY3RseS4KKwkJICogSWYgbm90LCBnaXZlIHVwIG5vdyBhbmQgaG9wZSB0aGlzIGhhY2sgd2lsbCB3b3JrCisJCSAqIHByb3Blcmx5IGR1cmluZyBhIGxhdGVyIGludm9jYXRpb24gb2YgdXNiX3NlcmlhbF9wcm9iZQorCQkgKi8KKwkJaWYgKG51bV9idWxrX2luID09IDAgfHwgbnVtX2J1bGtfb3V0ID09IDApIHsKKwkJCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlBMLTIzMDMgaGFjazogZGVzY3JpcHRvcnMgbWF0Y2hlZCBidXQgZW5kcG9pbnRzIGRpZCBub3RcbiIpOworCQkJa2ZyZWUgKHNlcmlhbCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0KKwkvKiBFTkQgSE9SUklCTEUgSEFDSyBGT1IgUEwyMzAzICovCisjZW5kaWYKKworCS8qIGZvdW5kIGFsbCB0aGF0IHdlIG5lZWQgKi8KKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICIlcyBjb252ZXJ0ZXIgZGV0ZWN0ZWRcbiIsIHR5cGUtPm5hbWUpOworCisjaWZkZWYgQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQworCWlmICh0eXBlID09ICZ1c2Jfc2VyaWFsX2dlbmVyaWNfZGV2aWNlKSB7CisJCW51bV9wb3J0cyA9IG51bV9idWxrX291dDsKKwkJaWYgKG51bV9wb3J0cyA9PSAwKSB7CisJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkdlbmVyaWMgZGV2aWNlIHdpdGggbm8gYnVsayBvdXQsIG5vdCBhbGxvd2VkLlxuIik7CisJCQlrZnJlZSAoc2VyaWFsKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorI2VuZGlmCisJaWYgKCFudW1fcG9ydHMpIHsKKwkJLyogaWYgdGhpcyBkZXZpY2UgdHlwZSBoYXMgYSBjYWxjX251bV9wb3J0cyBmdW5jdGlvbiwgY2FsbCBpdCAqLworCQlpZiAodHlwZS0+Y2FsY19udW1fcG9ydHMpIHsKKwkJCWlmICghdHJ5X21vZHVsZV9nZXQodHlwZS0+b3duZXIpKSB7CisJCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJtb2R1bGUgZ2V0IGZhaWxlZCwgZXhpdGluZ1xuIik7CisJCQkJa2ZyZWUgKHNlcmlhbCk7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCQludW1fcG9ydHMgPSB0eXBlLT5jYWxjX251bV9wb3J0cyAoc2VyaWFsKTsKKwkJCW1vZHVsZV9wdXQodHlwZS0+b3duZXIpOworCQl9CisJCWlmICghbnVtX3BvcnRzKQorCQkJbnVtX3BvcnRzID0gdHlwZS0+bnVtX3BvcnRzOworCX0KKworCWlmIChnZXRfZnJlZV9zZXJpYWwgKHNlcmlhbCwgbnVtX3BvcnRzLCAmbWlub3IpID09IE5VTEwpIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJObyBtb3JlIGZyZWUgc2VyaWFsIGRldmljZXNcbiIpOworCQlrZnJlZSAoc2VyaWFsKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc2VyaWFsLT5taW5vciA9IG1pbm9yOworCXNlcmlhbC0+bnVtX3BvcnRzID0gbnVtX3BvcnRzOworCXNlcmlhbC0+bnVtX2J1bGtfaW4gPSBudW1fYnVsa19pbjsKKwlzZXJpYWwtPm51bV9idWxrX291dCA9IG51bV9idWxrX291dDsKKwlzZXJpYWwtPm51bV9pbnRlcnJ1cHRfaW4gPSBudW1faW50ZXJydXB0X2luOworCXNlcmlhbC0+bnVtX2ludGVycnVwdF9vdXQgPSBudW1faW50ZXJydXB0X291dDsKKworCS8qIGNyZWF0ZSBvdXIgcG9ydHMsIHdlIG5lZWQgYXMgbWFueSBhcyB0aGUgbWF4IGVuZHBvaW50cyAqLworCS8qIHdlIGRvbid0IHVzZSBudW1fcG9ydHMgaGVyZSBjYXV6IHNvbWUgZGV2aWNlcyBoYXZlIG1vcmUgZW5kcG9pbnQgcGFpcnMgdGhhbiBwb3J0cyAqLworCW1heF9lbmRwb2ludHMgPSBtYXgobnVtX2J1bGtfaW4sIG51bV9idWxrX291dCk7CisJbWF4X2VuZHBvaW50cyA9IG1heChtYXhfZW5kcG9pbnRzLCBudW1faW50ZXJydXB0X2luKTsKKwltYXhfZW5kcG9pbnRzID0gbWF4KG1heF9lbmRwb2ludHMsIG51bV9pbnRlcnJ1cHRfb3V0KTsKKwltYXhfZW5kcG9pbnRzID0gbWF4KG1heF9lbmRwb2ludHMsIChpbnQpc2VyaWFsLT5udW1fcG9ydHMpOworCXNlcmlhbC0+bnVtX3BvcnRfcG9pbnRlcnMgPSBtYXhfZW5kcG9pbnRzOworCWRiZygiJXMgLSBzZXR0aW5nIHVwICVkIHBvcnQgc3RydWN0dXJlcyBmb3IgdGhpcyBkZXZpY2UiLCBfX0ZVTkNUSU9OX18sIG1heF9lbmRwb2ludHMpOworCWZvciAoaSA9IDA7IGkgPCBtYXhfZW5kcG9pbnRzOyArK2kpIHsKKwkJcG9ydCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwb3J0KQorCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJbWVtc2V0KHBvcnQsIDB4MDAsIHNpemVvZihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0KSk7CisJCXBvcnQtPm51bWJlciA9IGkgKyBzZXJpYWwtPm1pbm9yOworCQlwb3J0LT5zZXJpYWwgPSBzZXJpYWw7CisJCUlOSVRfV09SSygmcG9ydC0+d29yaywgdXNiX3NlcmlhbF9wb3J0X3NvZnRpbnQsIHBvcnQpOworCQlzZXJpYWwtPnBvcnRbaV0gPSBwb3J0OworCX0KKworCS8qIHNldCB1cCB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1bGtfaW47ICsraSkgeworCQllbmRwb2ludCA9IGJ1bGtfaW5fZW5kcG9pbnRbaV07CisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCXBvcnQtPnJlYWRfdXJiID0gdXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0tFUk5FTCk7CisJCWlmICghcG9ydC0+cmVhZF91cmIpIHsKKwkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CisJCQlnb3RvIHByb2JlX2Vycm9yOworCQl9CisJCWJ1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKwkJcG9ydC0+YnVsa19pbl9zaXplID0gYnVmZmVyX3NpemU7CisJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCXBvcnQtPmJ1bGtfaW5fYnVmZmVyID0ga21hbGxvYyAoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIXBvcnQtPmJ1bGtfaW5fYnVmZmVyKSB7CisJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkNvdWxkbid0IGFsbG9jYXRlIGJ1bGtfaW5fYnVmZmVyXG4iKTsKKwkJCWdvdG8gcHJvYmVfZXJyb3I7CisJCX0KKwkJdXNiX2ZpbGxfYnVsa191cmIgKHBvcnQtPnJlYWRfdXJiLCBkZXYsCisJCQkJICAgdXNiX3JjdmJ1bGtwaXBlIChkZXYsCisJCQkJCSAgIAkgICAgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJCSAgIHBvcnQtPmJ1bGtfaW5fYnVmZmVyLCBidWZmZXJfc2l6ZSwKKwkJCQkgICBzZXJpYWwtPnR5cGUtPnJlYWRfYnVsa19jYWxsYmFjaywKKwkJCQkgICBwb3J0KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1bGtfb3V0OyArK2kpIHsKKwkJZW5kcG9pbnQgPSBidWxrX291dF9lbmRwb2ludFtpXTsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJcG9ydC0+d3JpdGVfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwb3J0LT53cml0ZV91cmIpIHsKKwkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CisJCQlnb3RvIHByb2JlX2Vycm9yOworCQl9CisJCWJ1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKwkJcG9ydC0+YnVsa19vdXRfc2l6ZSA9IGJ1ZmZlcl9zaXplOworCQlwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJcG9ydC0+YnVsa19vdXRfYnVmZmVyID0ga21hbGxvYyAoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIXBvcnQtPmJ1bGtfb3V0X2J1ZmZlcikgeworCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSBidWxrX291dF9idWZmZXJcbiIpOworCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJfQorCQl1c2JfZmlsbF9idWxrX3VyYiAocG9ydC0+d3JpdGVfdXJiLCBkZXYsCisJCQkJICAgdXNiX3NuZGJ1bGtwaXBlIChkZXYsCisJCQkJCQkgICAgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJCSAgIHBvcnQtPmJ1bGtfb3V0X2J1ZmZlciwgYnVmZmVyX3NpemUsIAorCQkJCSAgIHNlcmlhbC0+dHlwZS0+d3JpdGVfYnVsa19jYWxsYmFjaywKKwkJCQkgICBwb3J0KTsKKwl9CisKKwlpZiAoc2VyaWFsLT50eXBlLT5yZWFkX2ludF9jYWxsYmFjaykgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2ludGVycnVwdF9pbjsgKytpKSB7CisJCQllbmRwb2ludCA9IGludGVycnVwdF9pbl9lbmRwb2ludFtpXTsKKwkJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghcG9ydC0+aW50ZXJydXB0X2luX3VyYikgeworCQkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CisJCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJCX0KKwkJCWJ1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKwkJCXBvcnQtPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3MgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJCXBvcnQtPmludGVycnVwdF9pbl9idWZmZXIgPSBrbWFsbG9jIChidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXBvcnQtPmludGVycnVwdF9pbl9idWZmZXIpIHsKKwkJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkNvdWxkbid0IGFsbG9jYXRlIGludGVycnVwdF9pbl9idWZmZXJcbiIpOworCQkJCWdvdG8gcHJvYmVfZXJyb3I7CisJCQl9CisJCQl1c2JfZmlsbF9pbnRfdXJiIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBkZXYsIAorCQkJCQkgIHVzYl9yY3ZpbnRwaXBlIChkZXYsCisJCQkJCQkJICBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkJCSAgcG9ydC0+aW50ZXJydXB0X2luX2J1ZmZlciwgYnVmZmVyX3NpemUsIAorCQkJCQkgIHNlcmlhbC0+dHlwZS0+cmVhZF9pbnRfY2FsbGJhY2ssIHBvcnQsIAorCQkJCQkgIGVuZHBvaW50LT5iSW50ZXJ2YWwpOworCQl9CisJfSBlbHNlIGlmIChudW1faW50ZXJydXB0X2luKSB7CisJCWRiZygidGhlIGRldmljZSBjbGFpbXMgdG8gc3VwcG9ydCBpbnRlcnJ1cHQgaW4gdHJhbnNmZXJzLCBidXQgcmVhZF9pbnRfY2FsbGJhY2sgaXMgbm90IGRlZmluZWQiKTsKKwl9CisJCisJaWYgKHNlcmlhbC0+dHlwZS0+d3JpdGVfaW50X2NhbGxiYWNrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBudW1faW50ZXJydXB0X291dDsgKytpKSB7CisJCQllbmRwb2ludCA9IGludGVycnVwdF9vdXRfZW5kcG9pbnRbaV07CisJCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQkJcG9ydC0+aW50ZXJydXB0X291dF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQkJaWYgKCFwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYikgeworCQkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZVxuIik7CisJCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJCX0KKwkJCWJ1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKwkJCXBvcnQtPmludGVycnVwdF9vdXRfc2l6ZSA9IGJ1ZmZlcl9zaXplOworCQkJcG9ydC0+aW50ZXJydXB0X291dF9lbmRwb2ludEFkZHJlc3MgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJCXBvcnQtPmludGVycnVwdF9vdXRfYnVmZmVyID0ga21hbGxvYyAoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCQkJaWYgKCFwb3J0LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlcikgeworCQkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgaW50ZXJydXB0X291dF9idWZmZXJcbiIpOworCQkJCWdvdG8gcHJvYmVfZXJyb3I7CisJCQl9CisJCQl1c2JfZmlsbF9pbnRfdXJiIChwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYiwgZGV2LAorCQkJCQkgIHVzYl9zbmRpbnRwaXBlIChkZXYsCisJCQkJCQkJICBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkJCSAgcG9ydC0+aW50ZXJydXB0X291dF9idWZmZXIsIGJ1ZmZlcl9zaXplLAorCQkJCQkgIHNlcmlhbC0+dHlwZS0+d3JpdGVfaW50X2NhbGxiYWNrLCBwb3J0LAorCQkJCQkgIGVuZHBvaW50LT5iSW50ZXJ2YWwpOworCQl9CisJfSBlbHNlIGlmIChudW1faW50ZXJydXB0X291dCkgeworCQlkYmcoInRoZSBkZXZpY2UgY2xhaW1zIHRvIHN1cHBvcnQgaW50ZXJydXB0IG91dCB0cmFuc2ZlcnMsIGJ1dCB3cml0ZV9pbnRfY2FsbGJhY2sgaXMgbm90IGRlZmluZWQiKTsKKwl9CisJCisJLyogaWYgdGhpcyBkZXZpY2UgdHlwZSBoYXMgYW4gYXR0YWNoIGZ1bmN0aW9uLCBjYWxsIGl0ICovCisJaWYgKHR5cGUtPmF0dGFjaCkgeworCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHR5cGUtPm93bmVyKSkgeworCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJtb2R1bGUgZ2V0IGZhaWxlZCwgZXhpdGluZ1xuIik7CisJCQlnb3RvIHByb2JlX2Vycm9yOworCQl9CisJCXJldHZhbCA9IHR5cGUtPmF0dGFjaCAoc2VyaWFsKTsKKwkJbW9kdWxlX3B1dCh0eXBlLT5vd25lcik7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJaWYgKHJldHZhbCA+IDApIHsKKwkJCS8qIHF1aWV0bHkgYWNjZXB0IHRoaXMgZGV2aWNlLCBidXQgZG9uJ3QgYmluZCB0byBhIHNlcmlhbCBwb3J0CisJCQkgKiBhcyBpdCdzIGFib3V0IHRvIGRpc2FwcGVhciAqLworCQkJZ290byBleGl0OworCQl9CisJfQorCisJLyogcmVnaXN0ZXIgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIHBvcnRzIHdpdGggdGhlIGRyaXZlciBjb3JlICovCisJZm9yIChpID0gMDsgaSA8IG51bV9wb3J0czsgKytpKSB7CisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCXBvcnQtPmRldi5wYXJlbnQgPSAmaW50ZXJmYWNlLT5kZXY7CisJCXBvcnQtPmRldi5kcml2ZXIgPSBOVUxMOworCQlwb3J0LT5kZXYuYnVzID0gJnVzYl9zZXJpYWxfYnVzX3R5cGU7CisJCXBvcnQtPmRldi5yZWxlYXNlID0gJnBvcnRfcmVsZWFzZTsKKworCQlzbnByaW50ZiAoJnBvcnQtPmRldi5idXNfaWRbMF0sIHNpemVvZihwb3J0LT5kZXYuYnVzX2lkKSwgInR0eVVTQiVkIiwgcG9ydC0+bnVtYmVyKTsKKwkJZGJnICgiJXMgLSByZWdpc3RlcmluZyAlcyIsIF9fRlVOQ1RJT05fXywgcG9ydC0+ZGV2LmJ1c19pZCk7CisJCWRldmljZV9yZWdpc3RlciAoJnBvcnQtPmRldik7CisJfQorCisJdXNiX3NlcmlhbF9jb25zb2xlX2luaXQgKGRlYnVnLCBtaW5vcik7CisKK2V4aXQ6CisJLyogc3VjY2VzcyAqLworCXVzYl9zZXRfaW50ZmRhdGEgKGludGVyZmFjZSwgc2VyaWFsKTsKKwlyZXR1cm4gMDsKKworcHJvYmVfZXJyb3I6CisJZm9yIChpID0gMDsgaSA8IG51bV9idWxrX2luOyArK2kpIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJaWYgKCFwb3J0KQorCQkJY29udGludWU7CisJCWlmIChwb3J0LT5yZWFkX3VyYikKKwkJCXVzYl9mcmVlX3VyYiAocG9ydC0+cmVhZF91cmIpOworCQlrZnJlZShwb3J0LT5idWxrX2luX2J1ZmZlcik7CisJfQorCWZvciAoaSA9IDA7IGkgPCBudW1fYnVsa19vdXQ7ICsraSkgeworCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQlpZiAoIXBvcnQpCisJCQljb250aW51ZTsKKwkJaWYgKHBvcnQtPndyaXRlX3VyYikKKwkJCXVzYl9mcmVlX3VyYiAocG9ydC0+d3JpdGVfdXJiKTsKKwkJa2ZyZWUocG9ydC0+YnVsa19vdXRfYnVmZmVyKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IG51bV9pbnRlcnJ1cHRfaW47ICsraSkgeworCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQlpZiAoIXBvcnQpCisJCQljb250aW51ZTsKKwkJaWYgKHBvcnQtPmludGVycnVwdF9pbl91cmIpCisJCQl1c2JfZnJlZV91cmIgKHBvcnQtPmludGVycnVwdF9pbl91cmIpOworCQlrZnJlZShwb3J0LT5pbnRlcnJ1cHRfaW5fYnVmZmVyKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IG51bV9pbnRlcnJ1cHRfb3V0OyArK2kpIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJaWYgKCFwb3J0KQorCQkJY29udGludWU7CisJCWlmIChwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYikKKwkJCXVzYl9mcmVlX3VyYiAocG9ydC0+aW50ZXJydXB0X291dF91cmIpOworCQlrZnJlZShwb3J0LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlcik7CisJfQorCisJLyogcmV0dXJuIHRoZSBtaW5vciByYW5nZSB0aGF0IHRoaXMgZGV2aWNlIGhhZCAqLworCXJldHVybl9zZXJpYWwgKHNlcmlhbCk7CisKKwkvKiBmcmVlIHVwIGFueSBtZW1vcnkgdGhhdCB3ZSBhbGxvY2F0ZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydF9wb2ludGVyczsgKytpKQorCQlrZnJlZShzZXJpYWwtPnBvcnRbaV0pOworCWtmcmVlIChzZXJpYWwpOworCXJldHVybiAtRUlPOworfQorCit2b2lkIHVzYl9zZXJpYWxfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCWludCBpOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRlcmZhY2UpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpbnRlcmZhY2UtPmRldjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCisJZGJnICgiJXMiLCBfX0ZVTkNUSU9OX18pOworCisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZXJmYWNlLCBOVUxMKTsKKwlpZiAoc2VyaWFsKSB7CisJCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQkJaWYgKHBvcnQgJiYgcG9ydC0+dHR5KQorCQkJCXR0eV9oYW5ndXAocG9ydC0+dHR5KTsKKwkJfQorCQkvKiBsZXQgdGhlIGxhc3QgaG9sZGVyIG9mIHRoaXMgb2JqZWN0IAorCQkgKiBjYXVzZSBpdCB0byBiZSBjbGVhbmVkIHVwICovCisJCWtyZWZfcHV0KCZzZXJpYWwtPmtyZWYsIGRlc3Ryb3lfc2VyaWFsKTsKKwl9CisJZGV2X2luZm8oZGV2LCAiZGV2aWNlIGRpc2Nvbm5lY3RlZFxuIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgc2VyaWFsX29wcyA9IHsKKwkub3BlbiA9CQkJc2VyaWFsX29wZW4sCisJLmNsb3NlID0JCXNlcmlhbF9jbG9zZSwKKwkud3JpdGUgPQkJc2VyaWFsX3dyaXRlLAorCS53cml0ZV9yb29tID0JCXNlcmlhbF93cml0ZV9yb29tLAorCS5pb2N0bCA9CQlzZXJpYWxfaW9jdGwsCisJLnNldF90ZXJtaW9zID0JCXNlcmlhbF9zZXRfdGVybWlvcywKKwkudGhyb3R0bGUgPQkJc2VyaWFsX3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCXNlcmlhbF91bnRocm90dGxlLAorCS5icmVha19jdGwgPQkJc2VyaWFsX2JyZWFrLAorCS5jaGFyc19pbl9idWZmZXIgPQlzZXJpYWxfY2hhcnNfaW5fYnVmZmVyLAorCS5yZWFkX3Byb2MgPQkJc2VyaWFsX3JlYWRfcHJvYywKKwkudGlvY21nZXQgPQkJc2VyaWFsX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9CQlzZXJpYWxfdGlvY21zZXQsCit9OworCitzdHJ1Y3QgdHR5X2RyaXZlciAqdXNiX3NlcmlhbF90dHlfZHJpdmVyOworCitzdGF0aWMgaW50IF9faW5pdCB1c2Jfc2VyaWFsX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKwlpbnQgcmVzdWx0OworCisJdXNiX3NlcmlhbF90dHlfZHJpdmVyID0gYWxsb2NfdHR5X2RyaXZlcihTRVJJQUxfVFRZX01JTk9SUyk7CisJaWYgKCF1c2Jfc2VyaWFsX3R0eV9kcml2ZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogSW5pdGlhbGl6ZSBvdXIgZ2xvYmFsIGRhdGEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgU0VSSUFMX1RUWV9NSU5PUlM7ICsraSkgeworCQlzZXJpYWxfdGFibGVbaV0gPSBOVUxMOworCX0KKworCXJlc3VsdCA9IGJ1c19yZWdpc3RlcigmdXNiX3NlcmlhbF9idXNfdHlwZSk7CisJaWYgKHJlc3VsdCkgeworCQllcnIoIiVzIC0gcmVnaXN0ZXJpbmcgYnVzIGRyaXZlciBmYWlsZWQiLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXRfYnVzOworCX0KKworCS8qIHJlZ2lzdGVyIHRoZSBnZW5lcmljIGRyaXZlciwgaWYgd2Ugc2hvdWxkICovCisJcmVzdWx0ID0gdXNiX3NlcmlhbF9nZW5lcmljX3JlZ2lzdGVyKGRlYnVnKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQllcnIoIiVzIC0gcmVnaXN0ZXJpbmcgZ2VuZXJpYyBkcml2ZXIgZmFpbGVkIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0X2dlbmVyaWM7CisJfQorCisJdXNiX3NlcmlhbF90dHlfZHJpdmVyLT5vd25lciA9IFRISVNfTU9EVUxFOworCXVzYl9zZXJpYWxfdHR5X2RyaXZlci0+ZHJpdmVyX25hbWUgPSAidXNic2VyaWFsIjsKKwl1c2Jfc2VyaWFsX3R0eV9kcml2ZXItPmRldmZzX25hbWUgPSAidXNiL3R0cy8iOworCXVzYl9zZXJpYWxfdHR5X2RyaXZlci0+bmFtZSA9IAkidHR5VVNCIjsKKwl1c2Jfc2VyaWFsX3R0eV9kcml2ZXItPm1ham9yID0gU0VSSUFMX1RUWV9NQUpPUjsKKwl1c2Jfc2VyaWFsX3R0eV9kcml2ZXItPm1pbm9yX3N0YXJ0ID0gMDsKKwl1c2Jfc2VyaWFsX3R0eV9kcml2ZXItPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOworCXVzYl9zZXJpYWxfdHR5X2RyaXZlci0+c3VidHlwZSA9IFNFUklBTF9UWVBFX05PUk1BTDsKKwl1c2Jfc2VyaWFsX3R0eV9kcml2ZXItPmZsYWdzID0gVFRZX0RSSVZFUl9SRUFMX1JBVyB8IFRUWV9EUklWRVJfTk9fREVWRlM7CisJdXNiX3NlcmlhbF90dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MgPSB0dHlfc3RkX3Rlcm1pb3M7CisJdXNiX3NlcmlhbF90dHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19jZmxhZyA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwl0dHlfc2V0X29wZXJhdGlvbnModXNiX3NlcmlhbF90dHlfZHJpdmVyLCAmc2VyaWFsX29wcyk7CisJcmVzdWx0ID0gdHR5X3JlZ2lzdGVyX2RyaXZlcih1c2Jfc2VyaWFsX3R0eV9kcml2ZXIpOworCWlmIChyZXN1bHQpIHsKKwkJZXJyKCIlcyAtIHR0eV9yZWdpc3Rlcl9kcml2ZXIgZmFpbGVkIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0X3JlZ19kcml2ZXI7CisJfQorCisJLyogcmVnaXN0ZXIgdGhlIFVTQiBkcml2ZXIgKi8KKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJnVzYl9zZXJpYWxfZHJpdmVyKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQllcnIoIiVzIC0gdXNiX3JlZ2lzdGVyIGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXhpdF90dHk7CisJfQorCisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCisJcmV0dXJuIHJlc3VsdDsKKworZXhpdF90dHk6CisJdHR5X3VucmVnaXN0ZXJfZHJpdmVyKHVzYl9zZXJpYWxfdHR5X2RyaXZlcik7CisKK2V4aXRfcmVnX2RyaXZlcjoKKwl1c2Jfc2VyaWFsX2dlbmVyaWNfZGVyZWdpc3RlcigpOworCitleGl0X2dlbmVyaWM6CisJYnVzX3VucmVnaXN0ZXIoJnVzYl9zZXJpYWxfYnVzX3R5cGUpOworCitleGl0X2J1czoKKwllcnIgKCIlcyAtIHJldHVybmluZyB3aXRoIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCXB1dF90dHlfZHJpdmVyKHVzYl9zZXJpYWxfdHR5X2RyaXZlcik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3NlcmlhbF9leGl0KHZvaWQpCit7CisJdXNiX3NlcmlhbF9jb25zb2xlX2V4aXQoKTsKKworCXVzYl9zZXJpYWxfZ2VuZXJpY19kZXJlZ2lzdGVyKCk7CisKKwl1c2JfZGVyZWdpc3RlcigmdXNiX3NlcmlhbF9kcml2ZXIpOworCXR0eV91bnJlZ2lzdGVyX2RyaXZlcih1c2Jfc2VyaWFsX3R0eV9kcml2ZXIpOworCXB1dF90dHlfZHJpdmVyKHVzYl9zZXJpYWxfdHR5X2RyaXZlcik7CisJYnVzX3VucmVnaXN0ZXIoJnVzYl9zZXJpYWxfYnVzX3R5cGUpOworfQorCisKK21vZHVsZV9pbml0KHVzYl9zZXJpYWxfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2Jfc2VyaWFsX2V4aXQpOworCisjZGVmaW5lIHNldF90b19nZW5lcmljX2lmX251bGwodHlwZSwgZnVuY3Rpb24pCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmICghdHlwZS0+ZnVuY3Rpb24pIHsJCQkJCVwKKwkJCXR5cGUtPmZ1bmN0aW9uID0gdXNiX3NlcmlhbF9nZW5lcmljXyMjZnVuY3Rpb247CVwKKwkJCWRiZygiSGFkIHRvIG92ZXJyaWRlIHRoZSAiICNmdW5jdGlvbgkJXAorCQkJCSAiIHVzYiBzZXJpYWwgb3BlcmF0aW9uIHdpdGggdGhlIGdlbmVyaWMgb25lLiIpO1wKKwkJCX0JCQkJCQlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIHZvaWQgZml4dXBfZ2VuZXJpYyhzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqZGV2aWNlKQoreworCXNldF90b19nZW5lcmljX2lmX251bGwoZGV2aWNlLCBvcGVuKTsKKwlzZXRfdG9fZ2VuZXJpY19pZl9udWxsKGRldmljZSwgd3JpdGUpOworCXNldF90b19nZW5lcmljX2lmX251bGwoZGV2aWNlLCBjbG9zZSk7CisJc2V0X3RvX2dlbmVyaWNfaWZfbnVsbChkZXZpY2UsIHdyaXRlX3Jvb20pOworCXNldF90b19nZW5lcmljX2lmX251bGwoZGV2aWNlLCBjaGFyc19pbl9idWZmZXIpOworCXNldF90b19nZW5lcmljX2lmX251bGwoZGV2aWNlLCByZWFkX2J1bGtfY2FsbGJhY2spOworCXNldF90b19nZW5lcmljX2lmX251bGwoZGV2aWNlLCB3cml0ZV9idWxrX2NhbGxiYWNrKTsKKwlzZXRfdG9fZ2VuZXJpY19pZl9udWxsKGRldmljZSwgc2h1dGRvd24pOworfQorCitpbnQgdXNiX3NlcmlhbF9yZWdpc3RlcihzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqbmV3X2RldmljZSkKK3sKKwlpbnQgcmV0dmFsOworCisJZml4dXBfZ2VuZXJpYyhuZXdfZGV2aWNlKTsKKworCS8qIEFkZCB0aGlzIGRldmljZSB0byBvdXIgbGlzdCBvZiBkZXZpY2VzICovCisJbGlzdF9hZGQoJm5ld19kZXZpY2UtPmRyaXZlcl9saXN0LCAmdXNiX3NlcmlhbF9kcml2ZXJfbGlzdCk7CisKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX2J1c19yZWdpc3RlcihuZXdfZGV2aWNlKTsKKwlpZiAocmV0dmFsKSB7CisJCWVycigicHJvYmxlbSAlZCB3aGVuIHJlZ2lzdGVyaW5nIGRyaXZlciAlcyIsIHJldHZhbCwgbmV3X2RldmljZS0+bmFtZSk7CisJCWxpc3RfZGVsKCZuZXdfZGV2aWNlLT5kcml2ZXJfbGlzdCk7CisJfQorCWVsc2UKKwkJaW5mbygiVVNCIFNlcmlhbCBzdXBwb3J0IHJlZ2lzdGVyZWQgZm9yICVzIiwgbmV3X2RldmljZS0+bmFtZSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3ZvaWQgdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlICpkZXZpY2UpCit7CisJaW5mbygiVVNCIFNlcmlhbCBkZXJlZ2lzdGVyaW5nIGRyaXZlciAlcyIsIGRldmljZS0+bmFtZSk7CisJbGlzdF9kZWwoJmRldmljZS0+ZHJpdmVyX2xpc3QpOworCXVzYl9zZXJpYWxfYnVzX2RlcmVnaXN0ZXIoZGV2aWNlKTsKK30KKworCisKKy8qIElmIHRoZSB1c2Itc2VyaWFsIGNvcmUgaXMgYnVpbHQgaW50byB0aGUgY29yZSwgdGhlIHVzYi1zZXJpYWwgZHJpdmVycworICAgbmVlZCB0aGVzZSBzeW1ib2xzIHRvIGxvYWQgcHJvcGVybHkgYXMgbW9kdWxlcy4gKi8KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfcmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9kZXJlZ2lzdGVyKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfcHJvYmUpOworRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9kaXNjb25uZWN0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KTsKKworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9WRVJTSU9OKCBEUklWRVJfVkVSU0lPTiApOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFmMGM0MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmgKQEAgLTAsMCArMSwzMzIgQEAKKy8qCisgKiBVU0IgU2VyaWFsIENvbnZlcnRlciBkcml2ZXIKKyAqCisgKglDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDA0CisgKgkgICAgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICoKKyAqICgwMy8yNi8yMDAyKSBna2gKKyAqCXJlbW92ZWQgdGhlIHBvcnQtPnR0eSBjaGVjayBmcm9tIHBvcnRfcGFyYW5vaWFfY2hlY2soKSBkdWUgdG8gc2VyaWFsCisgKgljb25zb2xlcyBub3QgaGF2aW5nIGEgdHR5IGRldmljZSBhc3NpZ25lZCB0byB0aGVtLgorICoKKyAqICgxMi8wMy8yMDAxKSBna2gKKyAqCXJlbW92ZWQgYWN0aXZlIGZyb20gdGhlIHBvcnQgc3RydWN0dXJlLgorICoJYWRkZWQgZG9jdW1lbnRhdGlvbiB0byB0aGUgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBzdHJ1Y3R1cmUKKyAqCisgKiAoMTAvMTAvMjAwMSkgZ2toCisgKglhZGRlZCB2ZW5kb3IgYW5kIHByb2R1Y3QgdG8gc2VyaWFsIHN0cnVjdHVyZS4gIE5lZWRlZCB0byBkZXRlcm1pbmUgZGV2aWNlCisgKglvd25lciB3aGVuIHRoZSBkZXZpY2UgaXMgZGlzY29ubmVjdGVkLgorICoKKyAqICgwNS8zMC8yMDAxKSBna2gKKyAqCWFkZGVkIHNlbSB0byBwb3J0IHN0cnVjdHVyZSBhbmQgcmVtb3ZlZCBwb3J0X2xvY2sKKyAqCisgKiAoMTAvMDUvMjAwMCkgZ2toCisgKglBZGRlZCBpbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzIGFuZCBidWxrX2luX2VuZHBvaW50QWRkcmVzcyB0byBoZWxwCisgKglmaXggYnVnIHdpdGggdXJiLT5kZXYgbm90IGJlaW5nIHNldCBwcm9wZXJseSwgbm93IHRoYXQgdGhlIHVzYiBjb3JlCisgKgluZWVkcyBpdC4KKyAqIAorICogKDA5LzExLzIwMDApIGdraAorICoJQWRkZWQgdXNiX3NlcmlhbF9kZWJ1Z19kYXRhIGZ1bmN0aW9uIHRvIGhlbHAgZ2V0IHJpZCBvZiAjREVCVUcgaW4gdGhlCisgKglkcml2ZXJzLgorICoKKyAqICgwOC8yOC8yMDAwKSBna2gKKyAqCUFkZGVkIHBvcnRfbG9jayB0byBwb3J0IHN0cnVjdHVyZS4KKyAqCisgKiAoMDgvMDgvMjAwMCkgZ2toCisgKglBZGRlZCBvcGVuX2NvdW50IHRvIHBvcnQgc3RydWN0dXJlLgorICoKKyAqICgwNy8yMy8yMDAwKSBna2gKKyAqCUFkZGVkIGJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyB0byBwb3J0IHN0cnVjdHVyZS4KKyAqCisgKiAoMDcvMTkvMjAwMCkgZ2toLCBwYmVyZ2VyLCBhbmQgYm9yY2hlcnMKKyAqCU1vZGlmaWNhdGlvbnMgdG8gYWxsb3cgdXNiLXNlcmlhbCBkcml2ZXJzIHRvIGJlIG1vZHVsZXMuCisgKgorICogCisgKi8KKworCisjaWZuZGVmIF9fTElOVVhfVVNCX1NFUklBTF9ICisjZGVmaW5lIF9fTElOVVhfVVNCX1NFUklBTF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisKKyNkZWZpbmUgU0VSSUFMX1RUWV9NQUpPUgkxODgJLyogTmljZSBsZWdhbCBudW1iZXIgbm93ICovCisjZGVmaW5lIFNFUklBTF9UVFlfTUlOT1JTCTI1NQkvKiBsb2FkcyBvZiBkZXZpY2VzIDopICovCisKKyNkZWZpbmUgTUFYX05VTV9QT1JUUwkJOAkvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcG9ydHMgb25lIGRldmljZSBjYW4gZ3JhYiBhdCBvbmNlICovCisKKy8qIHBhcml0eSBjaGVjayBmbGFnICovCisjZGVmaW5lIFJFTEVWQU5UX0lGTEFHKGlmbGFnKQkoaWZsYWcgJiAoSUdOQlJLfEJSS0lOVHxJR05QQVJ8UEFSTVJLfElOUENLKSkKKworLyoqCisgKiB1c2Jfc2VyaWFsX3BvcnQ6IHN0cnVjdHVyZSBmb3IgdGhlIHNwZWNpZmljIHBvcnRzIG9mIGEgZGV2aWNlLgorICogQHNlcmlhbDogcG9pbnRlciBiYWNrIHRvIHRoZSBzdHJ1Y3QgdXNiX3NlcmlhbCBvd25lciBvZiB0aGlzIHBvcnQuCisgKiBAdHR5OiBwb2ludGVyIHRvIHRoZSBjb3JyZXNwb25kaW5nIHR0eSBmb3IgdGhpcyBwb3J0LgorICogQG51bWJlcjogdGhlIG51bWJlciBvZiB0aGUgcG9ydCAodGhlIG1pbm9yIG51bWJlcikuCisgKiBAaW50ZXJydXB0X2luX2J1ZmZlcjogcG9pbnRlciB0byB0aGUgaW50ZXJydXB0IGluIGJ1ZmZlciBmb3IgdGhpcyBwb3J0LgorICogQGludGVycnVwdF9pbl91cmI6IHBvaW50ZXIgdG8gdGhlIGludGVycnVwdCBpbiBzdHJ1Y3QgdXJiIGZvciB0aGlzIHBvcnQuCisgKiBAaW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzczogZW5kcG9pbnQgYWRkcmVzcyBmb3IgdGhlIGludGVycnVwdCBpbiBwaXBlCisgKglmb3IgdGhpcyBwb3J0LgorICogQGludGVycnVwdF9vdXRfYnVmZmVyOiBwb2ludGVyIHRvIHRoZSBpbnRlcnJ1cHQgb3V0IGJ1ZmZlciBmb3IgdGhpcyBwb3J0LgorICogQGludGVycnVwdF9vdXRfc2l6ZTogdGhlIHNpemUgb2YgdGhlIGludGVycnVwdF9vdXRfYnVmZmVyLCBpbiBieXRlcy4KKyAqIEBpbnRlcnJ1cHRfb3V0X3VyYjogcG9pbnRlciB0byB0aGUgaW50ZXJydXB0IG91dCBzdHJ1Y3QgdXJiIGZvciB0aGlzIHBvcnQuCisgKiBAaW50ZXJydXB0X291dF9lbmRwb2ludEFkZHJlc3M6IGVuZHBvaW50IGFkZHJlc3MgZm9yIHRoZSBpbnRlcnJ1cHQgb3V0IHBpcGUKKyAqIAlmb3IgdGhpcyBwb3J0LgorICogQGJ1bGtfaW5fYnVmZmVyOiBwb2ludGVyIHRvIHRoZSBidWxrIGluIGJ1ZmZlciBmb3IgdGhpcyBwb3J0LgorICogQHJlYWRfdXJiOiBwb2ludGVyIHRvIHRoZSBidWxrIGluIHN0cnVjdCB1cmIgZm9yIHRoaXMgcG9ydC4KKyAqIEBidWxrX2luX2VuZHBvaW50QWRkcmVzczogZW5kcG9pbnQgYWRkcmVzcyBmb3IgdGhlIGJ1bGsgaW4gcGlwZSBmb3IgdGhpcworICoJcG9ydC4KKyAqIEBidWxrX291dF9idWZmZXI6IHBvaW50ZXIgdG8gdGhlIGJ1bGsgb3V0IGJ1ZmZlciBmb3IgdGhpcyBwb3J0LgorICogQGJ1bGtfb3V0X3NpemU6IHRoZSBzaXplIG9mIHRoZSBidWxrX291dF9idWZmZXIsIGluIGJ5dGVzLgorICogQHdyaXRlX3VyYjogcG9pbnRlciB0byB0aGUgYnVsayBvdXQgc3RydWN0IHVyYiBmb3IgdGhpcyBwb3J0LgorICogQGJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzczogZW5kcG9pbnQgYWRkcmVzcyBmb3IgdGhlIGJ1bGsgb3V0IHBpcGUgZm9yIHRoaXMKKyAqCXBvcnQuCisgKiBAd3JpdGVfd2FpdDogYSB3YWl0X3F1ZXVlX2hlYWRfdCB1c2VkIGJ5IHRoZSBwb3J0LgorICogQHdvcms6IHdvcmsgcXVldWUgZW50cnkgZm9yIHRoZSBsaW5lIGRpc2NpcGxpbmUgd2FraW5nIHVwLgorICogQG9wZW5fY291bnQ6IG51bWJlciBvZiB0aW1lcyB0aGlzIHBvcnQgaGFzIGJlZW4gb3BlbmVkLgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgYnkgdGhlIHVzYi1zZXJpYWwgY29yZSBhbmQgZHJpdmVycyBmb3IgdGhlIHNwZWNpZmljCisgKiBwb3J0cyBvZiBhIGRldmljZS4KKyAqLworc3RydWN0IHVzYl9zZXJpYWxfcG9ydCB7CisJc3RydWN0IHVzYl9zZXJpYWwgKglzZXJpYWw7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKgl0dHk7CisJdW5zaWduZWQgY2hhcgkJbnVtYmVyOworCisJdW5zaWduZWQgY2hhciAqCQlpbnRlcnJ1cHRfaW5fYnVmZmVyOworCXN0cnVjdCB1cmIgKgkJaW50ZXJydXB0X2luX3VyYjsKKwlfX3U4CQkJaW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzczsKKworCXVuc2lnbmVkIGNoYXIgKgkJaW50ZXJydXB0X291dF9idWZmZXI7CisJaW50CQkJaW50ZXJydXB0X291dF9zaXplOworCXN0cnVjdCB1cmIgKgkJaW50ZXJydXB0X291dF91cmI7CisJX191OAkJCWludGVycnVwdF9vdXRfZW5kcG9pbnRBZGRyZXNzOworCisJdW5zaWduZWQgY2hhciAqCQlidWxrX2luX2J1ZmZlcjsKKwlpbnQJCQlidWxrX2luX3NpemU7CisJc3RydWN0IHVyYiAqCQlyZWFkX3VyYjsKKwlfX3U4CQkJYnVsa19pbl9lbmRwb2ludEFkZHJlc3M7CisKKwl1bnNpZ25lZCBjaGFyICoJCWJ1bGtfb3V0X2J1ZmZlcjsKKwlpbnQJCQlidWxrX291dF9zaXplOworCXN0cnVjdCB1cmIgKgkJd3JpdGVfdXJiOworCV9fdTgJCQlidWxrX291dF9lbmRwb2ludEFkZHJlc3M7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3cml0ZV93YWl0OworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOworCWludAkJCW9wZW5fY291bnQ7CisJc3RydWN0IGRldmljZQkJZGV2OworfTsKKyNkZWZpbmUgdG9fdXNiX3NlcmlhbF9wb3J0KGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0LCBkZXYpCisKKy8qIGdldCBhbmQgc2V0IHRoZSBwb3J0IHByaXZhdGUgZGF0YSBwb2ludGVyIGhlbHBlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXJldHVybiBkZXZfZ2V0X2RydmRhdGEoJnBvcnQtPmRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHZvaWQgKmRhdGEpCit7CisJZGV2X3NldF9kcnZkYXRhKCZwb3J0LT5kZXYsIGRhdGEpOworfQorCisvKioKKyAqIHVzYl9zZXJpYWwgLSBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgdXNiLXNlcmlhbCBjb3JlIGZvciBhIGRldmljZQorICogQGRldjogcG9pbnRlciB0byB0aGUgc3RydWN0IHVzYl9kZXZpY2UgZm9yIHRoaXMgZGV2aWNlCisgKiBAdHlwZTogcG9pbnRlciB0byB0aGUgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgZm9yIHRoaXMgZGV2aWNlCisgKiBAaW50ZXJmYWNlOiBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgdXNiX2ludGVyZmFjZSBmb3IgdGhpcyBkZXZpY2UKKyAqIEBtaW5vcjogdGhlIHN0YXJ0aW5nIG1pbm9yIG51bWJlciBmb3IgdGhpcyBkZXZpY2UKKyAqIEBudW1fcG9ydHM6IHRoZSBudW1iZXIgb2YgcG9ydHMgdGhpcyBkZXZpY2UgaGFzCisgKiBAbnVtX2ludGVycnVwdF9pbjogbnVtYmVyIG9mIGludGVycnVwdCBpbiBlbmRwb2ludHMgd2UgaGF2ZQorICogQG51bV9pbnRlcnJ1cHRfb3V0OiBudW1iZXIgb2YgaW50ZXJydXB0IG91dCBlbmRwb2ludHMgd2UgaGF2ZQorICogQG51bV9idWxrX2luOiBudW1iZXIgb2YgYnVsayBpbiBlbmRwb2ludHMgd2UgaGF2ZQorICogQG51bV9idWxrX291dDogbnVtYmVyIG9mIGJ1bGsgb3V0IGVuZHBvaW50cyB3ZSBoYXZlCisgKiBAcG9ydDogYXJyYXkgb2Ygc3RydWN0IHVzYl9zZXJpYWxfcG9ydCBzdHJ1Y3R1cmVzIGZvciB0aGUgZGlmZmVyZW50IHBvcnRzLgorICogQHByaXZhdGU6IHBsYWNlIHRvIHB1dCBhbnkgZHJpdmVyIHNwZWNpZmljIGluZm9ybWF0aW9uIHRoYXQgaXMgbmVlZGVkLiAgVGhlCisgKgl1c2Itc2VyaWFsIGRyaXZlciBpcyByZXF1aXJlZCB0byBtYW5hZ2UgdGhpcyBkYXRhLCB0aGUgdXNiLXNlcmlhbCBjb3JlCisgKgl3aWxsIG5vdCB0b3VjaCB0aGlzLiAgVXNlIHVzYl9nZXRfc2VyaWFsX2RhdGEoKSBhbmQKKyAqCXVzYl9zZXRfc2VyaWFsX2RhdGEoKSB0byBhY2Nlc3MgdGhpcy4KKyAqLworc3RydWN0IHVzYl9zZXJpYWwgeworCXN0cnVjdCB1c2JfZGV2aWNlICoJCWRldjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSAqCXR5cGU7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKgkJaW50ZXJmYWNlOworCXVuc2lnbmVkIGNoYXIJCQltaW5vcjsKKwl1bnNpZ25lZCBjaGFyCQkJbnVtX3BvcnRzOworCXVuc2lnbmVkIGNoYXIJCQludW1fcG9ydF9wb2ludGVyczsKKwljaGFyCQkJCW51bV9pbnRlcnJ1cHRfaW47CisJY2hhcgkJCQludW1faW50ZXJydXB0X291dDsKKwljaGFyCQkJCW51bV9idWxrX2luOworCWNoYXIJCQkJbnVtX2J1bGtfb3V0OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKglwb3J0W01BWF9OVU1fUE9SVFNdOworCXN0cnVjdCBrcmVmCQkJa3JlZjsKKwl2b2lkICoJCQkJcHJpdmF0ZTsKK307CisjZGVmaW5lIHRvX3VzYl9zZXJpYWwoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1c2Jfc2VyaWFsLCBrcmVmKQorCisjZGVmaW5lIE5VTV9ET05UX0NBUkUJKC0xKQorCisvKiBnZXQgYW5kIHNldCB0aGUgc2VyaWFsIHByaXZhdGUgZGF0YSBwb2ludGVyIGhlbHBlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqdXNiX2dldF9zZXJpYWxfZGF0YSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlyZXR1cm4gc2VyaWFsLT5wcml2YXRlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXNiX3NldF9zZXJpYWxfZGF0YSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgdm9pZCAqZGF0YSkKK3sKKwlzZXJpYWwtPnByaXZhdGUgPSBkYXRhOworfQorCisvKioKKyAqIHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgLSBhIHN0cnVjdHVyZSB0aGF0IGRlZmluZXMgYSB1c2Igc2VyaWFsIGRldmljZQorICogQG93bmVyOiBwb2ludGVyIHRvIHRoZSBtb2R1bGUgdGhhdCBvd25zIHRoaXMgZGV2aWNlLgorICogQG5hbWU6IHBvaW50ZXIgdG8gYSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhpcyBkZXZpY2UuICBUaGlzIHN0cmluZyB1c2VkCisgKglpbiB0aGUgc3lzbG9nIG1lc3NhZ2VzIHdoZW4gYSBkZXZpY2UgaXMgaW5zZXJ0ZWQgb3IgcmVtb3ZlZC4KKyAqIEBzaG9ydF9uYW1lOiBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhpcyBkZXZpY2UgaW4KKyAqCUtPQkpfTkFNRV9MRU4gY2hhcmFjdGVycyBvciBsZXNzLiAgVGhpcyBpcyB1c2VkIGZvciB0aGUgc3lzZnMgaW50ZXJmYWNlCisgKgl0byBkZXNjcmliZSB0aGUgZHJpdmVyLgorICogQGlkX3RhYmxlOiBwb2ludGVyIHRvIGEgbGlzdCBvZiB1c2JfZGV2aWNlX2lkIHN0cnVjdHVyZXMgdGhhdCBkZWZpbmUgYWxsCisgKglvZiB0aGUgZGV2aWNlcyB0aGlzIHN0cnVjdHVyZSBjYW4gc3VwcG9ydC4KKyAqIEBudW1faW50ZXJydXB0X2luOiB0aGUgbnVtYmVyIG9mIGludGVycnVwdCBpbiBlbmRwb2ludHMgdGhpcyBkZXZpY2Ugd2lsbAorICoJaGF2ZS4KKyAqIEBudW1faW50ZXJydXB0X291dDogdGhlIG51bWJlciBvZiBpbnRlcnJ1cHQgb3V0IGVuZHBvaW50cyB0aGlzIGRldmljZSB3aWxsCisgKgloYXZlLgorICogQG51bV9idWxrX2luOiB0aGUgbnVtYmVyIG9mIGJ1bGsgaW4gZW5kcG9pbnRzIHRoaXMgZGV2aWNlIHdpbGwgaGF2ZS4KKyAqIEBudW1fYnVsa19vdXQ6IHRoZSBudW1iZXIgb2YgYnVsayBvdXQgZW5kcG9pbnRzIHRoaXMgZGV2aWNlIHdpbGwgaGF2ZS4KKyAqIEBudW1fcG9ydHM6IHRoZSBudW1iZXIgb2YgZGlmZmVyZW50IHBvcnRzIHRoaXMgZGV2aWNlIHdpbGwgaGF2ZS4KKyAqIEBjYWxjX251bV9wb3J0czogcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRvIGRldGVybWluZSBob3cgbWFueSBwb3J0cyB0aGlzCisgKglkZXZpY2UgaGFzIGR5bmFtaWNhbGx5LiAgSXQgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHByb2JlKCkKKyAqCWNhbGxiYWNrIGlzIGNhbGxlZCwgYnV0IGJlZm9yZSBhdHRhY2goKQorICogQHByb2JlOiBwb2ludGVyIHRvIHRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbi4KKyAqCVRoaXMgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgZGV2aWNlIGlzIGluc2VydGVkIGludG8gdGhlIHN5c3RlbSwKKyAqCWJ1dCBiZWZvcmUgdGhlIGRldmljZSBoYXMgYmVlbiBmdWxseSBpbml0aWFsaXplZCBieSB0aGUgdXNiX3NlcmlhbAorICoJc3Vic3lzdGVtLiAgVXNlIHRoaXMgZnVuY3Rpb24gdG8gZG93bmxvYWQgYW55IGZpcm13YXJlIHRvIHRoZSBkZXZpY2UsCisgKglvciBhbnkgb3RoZXIgZWFybHkgaW5pdGlhbGl6YXRpb24gdGhhdCBtaWdodCBiZSBuZWVkZWQuCisgKglSZXR1cm4gMCB0byBjb250aW51ZSBvbiB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gIEFueXRoaW5nIAorICoJZWxzZSB3aWxsIGFib3J0IGl0LgorICogQGF0dGFjaDogcG9pbnRlciB0byB0aGUgZHJpdmVyJ3MgYXR0YWNoIGZ1bmN0aW9uLgorICoJVGhpcyB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBzdHJ1Y3QgdXNiX3NlcmlhbCBzdHJ1Y3R1cmUgaXMgZnVsbHkgc2V0CisgKglzZXQgdXAuICBEbyBhbnkgbG9jYWwgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGRldmljZSwgb3IgYW55IHByaXZhdGUKKyAqCW1lbW9yeSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiBhdCB0aGlzIHBvaW50IGluIHRpbWUuCisgKiBAc2h1dGRvd246IHBvaW50ZXIgdG8gdGhlIGRyaXZlcidzIHNodXRkb3duIGZ1bmN0aW9uLiAgVGhpcyB3aWxsIGJlCisgKgljYWxsZWQgd2hlbiB0aGUgZGV2aWNlIGlzIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIGRlZmluZXMgYSBVU0IgU2VyaWFsIGRldmljZS4gIEl0IHByb3ZpZGVzIGFsbCBvZgorICogdGhlIGluZm9ybWF0aW9uIHRoYXQgdGhlIFVTQiBzZXJpYWwgY29yZSBjb2RlIG5lZWRzLiAgSWYgdGhlIGZ1bmN0aW9uCisgKiBwb2ludGVycyBhcmUgZGVmaW5lZCwgdGhlbiB0aGUgVVNCIHNlcmlhbCBjb3JlIGNvZGUgd2lsbCBjYWxsIHRoZW0gd2hlbgorICogdGhlIGNvcnJlc3BvbmRpbmcgdHR5IHBvcnQgZnVuY3Rpb25zIGFyZSBjYWxsZWQuICBJZiB0aGV5IGFyZSBub3QKKyAqIGNhbGxlZCwgdGhlIGdlbmVyaWMgc2VyaWFsIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgorICovCitzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSB7CisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJY2hhcgkqbmFtZTsKKwljaGFyCSpzaG9ydF9uYW1lOworCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZF90YWJsZTsKKwljaGFyCW51bV9pbnRlcnJ1cHRfaW47CisJY2hhcgludW1faW50ZXJydXB0X291dDsKKwljaGFyCW51bV9idWxrX2luOworCWNoYXIJbnVtX2J1bGtfb3V0OworCWNoYXIJbnVtX3BvcnRzOworCisJc3RydWN0IGxpc3RfaGVhZAlkcml2ZXJfbGlzdDsKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlcglkcml2ZXI7CisKKwlpbnQgKCpwcm9iZSkgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CisJaW50ICgqYXR0YWNoKSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CisJaW50ICgqY2FsY19udW1fcG9ydHMpIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKKworCXZvaWQgKCpzaHV0ZG93bikgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworCisJaW50ICgqcG9ydF9wcm9iZSkgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworCWludCAoKnBvcnRfcmVtb3ZlKSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CisKKwkvKiBzZXJpYWwgZnVuY3Rpb24gY2FsbHMgKi8KKwlpbnQgICgqb3BlbikJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOworCXZvaWQgKCpjbG9zZSkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOworCWludCAgKCp3cml0ZSkJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CisJaW50ICAoKndyaXRlX3Jvb20pCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKKwlpbnQgICgqaW9jdGwpCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CisJdm9pZCAoKnNldF90ZXJtaW9zKQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKiBvbGQpOworCXZvaWQgKCpicmVha19jdGwpCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpOworCWludCAgKCpjaGFyc19pbl9idWZmZXIpCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKKwl2b2lkICgqdGhyb3R0bGUpCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKKwl2b2lkICgqdW50aHJvdHRsZSkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworCWludCAgKCp0aW9jbWdldCkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKTsKKwlpbnQgICgqdGlvY21zZXQpCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKKworCXZvaWQgKCpyZWFkX2ludF9jYWxsYmFjaykoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisJdm9pZCAoKndyaXRlX2ludF9jYWxsYmFjaykoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisJdm9pZCAoKnJlYWRfYnVsa19jYWxsYmFjaykoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisJdm9pZCAoKndyaXRlX2J1bGtfY2FsbGJhY2spKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworfTsKKyNkZWZpbmUgdG9fdXNiX3NlcmlhbF9kcml2ZXIoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlLCBkcml2ZXIpCisKK2V4dGVybiBpbnQgIHVzYl9zZXJpYWxfcmVnaXN0ZXIoc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKm5ld19kZXZpY2UpOworZXh0ZXJuIHZvaWQgdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlICpkZXZpY2UpOworZXh0ZXJuIHZvaWQgdXNiX3NlcmlhbF9wb3J0X3NvZnRpbnQodm9pZCAqcHJpdmF0ZSk7CisKK2V4dGVybiBpbnQgdXNiX3NlcmlhbF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKTsKKworZXh0ZXJuIGludCBlenVzYl93cml0ZW1lbW9yeSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgaW50IGFkZHJlc3MsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgsIF9fdTggYlJlcXVlc3QpOworZXh0ZXJuIGludCBlenVzYl9zZXRfcmVzZXQgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIGNoYXIgcmVzZXRfYml0KTsKKworLyogVVNCIFNlcmlhbCBjb25zb2xlIGZ1bmN0aW9ucyAqLworI2lmZGVmIENPTkZJR19VU0JfU0VSSUFMX0NPTlNPTEUKK2V4dGVybiB2b2lkIHVzYl9zZXJpYWxfY29uc29sZV9pbml0IChpbnQgZGVidWcsIGludCBtaW5vcik7CitleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2NvbnNvbGVfZXhpdCAodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHVzYl9zZXJpYWxfY29uc29sZV9pbml0IChpbnQgZGVidWcsIGludCBtaW5vcikgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdXNiX3NlcmlhbF9jb25zb2xlX2V4aXQgKHZvaWQpIHsgfQorI2VuZGlmCisKKy8qIEZ1bmN0aW9ucyBuZWVkZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIHVzYnNlcmlhbCBjb3JlICovCitleHRlcm4gc3RydWN0IHVzYl9zZXJpYWwgKnVzYl9zZXJpYWxfZ2V0X2J5X2luZGV4ICh1bnNpZ25lZCBpbnQgbWlub3IpOworZXh0ZXJuIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworZXh0ZXJuIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK2V4dGVybiB2b2lkIHVzYl9zZXJpYWxfZ2VuZXJpY19jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworZXh0ZXJuIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfcm9vbSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitleHRlcm4gaW50IHVzYl9zZXJpYWxfZ2VuZXJpY19jaGFyc19pbl9idWZmZXIgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworZXh0ZXJuIHZvaWQgdXNiX3NlcmlhbF9nZW5lcmljX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfc2h1dGRvd24gKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworZXh0ZXJuIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfcmVnaXN0ZXIgKGludCBkZWJ1Zyk7CitleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfZGVyZWdpc3RlciAodm9pZCk7CisKK2V4dGVybiBpbnQgdXNiX3NlcmlhbF9idXNfcmVnaXN0ZXIgKHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlICpkZXZpY2UpOworZXh0ZXJuIHZvaWQgdXNiX3NlcmlhbF9idXNfZGVyZWdpc3RlciAoc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgKmRldmljZSk7CisKK2V4dGVybiBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSB1c2Jfc2VyaWFsX2dlbmVyaWNfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSB1c2Jfc2VyaWFsX2J1c190eXBlOworZXh0ZXJuIHN0cnVjdCB0dHlfZHJpdmVyICp1c2Jfc2VyaWFsX3R0eV9kcml2ZXI7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoaW50IGRlYnVnLAorCQkJCQkgc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgY29uc3QgY2hhciAqZnVuY3Rpb24sIGludCBzaXplLAorCQkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKwlpbnQgaTsKKworCWlmIChkZWJ1ZykgeworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgIiVzIC0gbGVuZ3RoID0gJWQsIGRhdGEgPSAiLCBmdW5jdGlvbiwgc2l6ZSk7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyArK2kpCisJCQlwcmludGsgKCIlLjJ4ICIsIGRhdGFbaV0pOworCQlwcmludGsgKCJcbiIpOworCX0KK30KKworLyogVXNlIG91ciBvd24gZGJnIG1hY3JvICovCisjdW5kZWYgZGJnCisjZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgZG8geyBpZiAoZGVidWcpIHByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQgIlxuIiAsIF9fRklMRV9fICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKKworCisKKyNlbmRpZgkvKiBpZmRlZiBfX0xJTlVYX1VTQl9TRVJJQUxfSCAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZDMxM2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYwpAQCAtMCwwICsxLDExNjEgQEAKKy8qCisgKiBVU0IgSGFuZFNwcmluZyBWaXNvciwgUGFsbSBtNTB4LCBhbmQgU29ueSBDbGllIGRyaXZlcgorICogKHN1cHBvcnRzIGFsbCBvZiB0aGUgUGFsbSBPUyBVU0IgZGV2aWNlcykKKyAqCisgKglDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDA0CisgKgkgICAgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICoKKyAqICgwNi8wMy8yMDAzKSBKdWRkIE1vbnRnb21lcnkgPGp1ZGQgYXQganBpbG90Lm9yZz4KKyAqICAgICBBZGRlZCBzdXBwb3J0IGZvciBtb2R1bGUgcGFyYW1ldGVyIG9wdGlvbnMgZm9yIHVudGVzdGVkL3Vua25vd24KKyAqICAgICBkZXZpY2VzLgorICoKKyAqICgwMy8wOS8yMDAzKSBna2gKKyAqCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBTb255IENsaWUgTlo5MFYgZGV2aWNlLiAgVGhhbmtzIHRvIE1hcnRpbiBCcmFjaHRsCisgKgk8YnJhY2h0bEByZWRncmVwLmN6PiBmb3IgdGhlIGluZm9ybWF0aW9uLgorICoKKyAqICgwMy8wNS8yMDAzKSBna2gKKyAqCVRoaW5rIFRyZW8gc3VwcG9ydCBpcyBub3cgd29ya2luZy4KKyAqCisgKiAoMDQvMDMvMjAwMikgZ2toCisgKglBZGRlZCBzdXBwb3J0IGZvciB0aGUgU29ueSBPUyA0LjEgZGV2aWNlcy4gIFRoYW5rcyB0byBIaXJveXVraSBBUkFLSQorICoJPGhpcm9Aem9iLm5lLmpwPiBmb3IgdGhlIGluZm9ybWF0aW9uLgorICoKKyAqICgwMy8yNy8yMDAyKSBna2gKKyAqCVJlbW92ZWQgYXNzdW1wdGlvbnMgdGhhdCBwb3J0LT50dHkgd2FzIGFsd2F5cyB2YWxpZCAoaXMgbm90IHRydWUKKyAqCWZvciB1c2Igc2VyaWFsIGNvbnNvbGUgZGV2aWNlcy4pCisgKgorICogKDAzLzIzLzIwMDIpIGdraAorICoJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIFBhbG0gaTcwNSBkZXZpY2UsIHRoYW5rcyB0byBUaG9tYXMgUmllbWVyCisgKgk8dG9tQG5ldG1lY2guY29tPiBmb3IgdGhlIGluZm9ybWF0aW9uLgorICoKKyAqICgwMy8yMS8yMDAyKSBna2gKKyAqCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBQYWxtIG0xMzAgZGV2aWNlLCB0aGFua3MgdG8gVWRvIEVpc2VuYmFydGgKKyAqCTx1ZG8uZWlzZW5iYXJ0aEB3ZWIuZGU+IGZvciB0aGUgaW5mb3JtYXRpb24uCisgKgorICogKDAyLzI3LzIwMDIpIGdraAorICoJUmV3b3JrZWQgdGhlIHVyYiBoYW5kbGluZyBsb2dpYy4gIFdlIGhhdmUgbm8gbW9yZSBwb29sLCBidXQgZHluYW1pY2FsbHkKKyAqCWFsbG9jYXRlIHRoZSB1cmIgYW5kIHRoZSB0cmFuc2ZlciBidWZmZXIgb24gdGhlIGZseS4gIEluIHRlc3RpbmcgdGhpcworICoJZG9lcyBub3QgaW5jdXJlIGFueSBtZWFzdXJhYmxlIG92ZXJoZWFkLiAgVGhpcyBhbHNvIHJlbGllcyBvbiB0aGUgZmFjdAorICoJdGhhdCB3ZSBoYXZlIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgZm9yIHVyYnMuCisgKgorICogKDAyLzIxLzIwMDIpIFNpbGFTCisgKiAgQWRkZWQgaW5pdGlhbCBzdXBwb3J0IGZvciB0aGUgUGFsbSBtNTE1IGRldmljZXMuCisgKgorICogKDAyLzE0LzIwMDIpIGdraAorICoJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIENsaWUgUy0zNjAgZGV2aWNlLgorICoKKyAqICgxMi8xOC8yMDAxKSBna2gKKyAqCUFkZGVkIGJldHRlciBDbGllIHN1cHBvcnQgZm9yIDMuNSBkZXZpY2VzLiAgVGhhbmtzIHRvIEdlb2ZmcmV5IExldmFuZAorICoJZm9yIHRoZSBwYXRjaC4KKyAqCisgKiAoMTEvMTEvMjAwMSkgZ2toCisgKglBZGRlZCBzdXBwb3J0IGZvciB0aGUgbTEyNSBkZXZpY2VzLCBhbmQgYWRkZWQgY2hlY2sgdG8gcHJldmVudCBvb3BzZXMKKyAqCWZvciBDbGnpIGRldmljZXMgdGhhdCBsaWUgYWJvdXQgdGhlIG51bWJlciBvZiBwb3J0cyB0aGV5IGhhdmUuCisgKgorICogKDA4LzMwLzIwMDEpIGdraAorICoJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIENsaWUgZGV2aWNlcywgYm90aCB0aGUgMy41IGFuZCA0LjAgb3MgdmVyc2lvbnMuCisgKglNYW55IHRoYW5rcyB0byBEYW5pZWwgQnVya2UsIGFuZCBCcnlhbiBQYXluZSBmb3IgaGVscGluZyB3aXRoIHRoaXMuCisgKgorICogKDA4LzIzLzIwMDEpIGdraAorICoJZml4ZWQgYSBmZXcgcG90ZW50aWFsIGJ1Z3MgcG9pbnRlZCBvdXQgYnkgT2xpdmVyIE5ldWt1bS4KKyAqCisgKiAoMDUvMzAvMjAwMSkgZ2toCisgKglzd2l0Y2hlZCBmcm9tIHVzaW5nIHNwaW5sb2NrIHRvIGEgc2VtYXBob3JlLCB3aGljaCBmaXhlcyBsb3RzIG9mIHByb2JsZW1zLgorICoKKyAqICgwNS8yOC8yMDAwKSBna2gKKyAqCUFkZGVkIGluaXRpYWwgc3VwcG9ydCBmb3IgdGhlIFBhbG0gbTUwMCBhbmQgUGFsbSBtNTA1IGRldmljZXMuCisgKgorICogKDA0LzA4LzIwMDEpIGdiCisgKglJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgorICoKKyAqICgwMS8yMS8yMDAwKSBna2gKKyAqCUFkZGVkIHdyaXRlX3Jvb20gYW5kIGNoYXJzX2luX2J1ZmZlciwgYXMgdGhleSB3ZXJlIHByZXZpb3VzbHkgdXNpbmcgdGhlCisgKglnZW5lcmljIGRyaXZlciB2ZXJzaW9ucyB3aGljaCBpcyBhbGwgd3Jvbmcgbm93IHRoYXQgd2UgYXJlIHVzaW5nIGFuIHVyYgorICoJcG9vbC4gIFRoYW5rcyB0byBXb2xmZ2FuZyBHcmFuZGVnZ2VyIGZvciBwb2ludGluZyB0aGlzIG91dCB0byBtZS4KKyAqCVJlbW92ZWQgY291bnQgYXNzaWdubWVudCBpbiB0aGUgd3JpdGUgZnVuY3Rpb24sIHdoaWNoIHdhcyBub3QgbmVlZGVkIGFueW1vcmUKKyAqCWVpdGhlci4gIFRoYW5rcyB0byBBbCBCb3JjaGVycyBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuCisgKgorICogKDEyLzEyLzIwMDApIGdraAorICoJTW92ZWQgTU9EX0RFQyB0byBlbmQgb2Ygdmlzb3JfY2xvc2UgdG8gYmUgbmljZXIsIGFzIHRoZSBmaW5hbCB3cml0ZSAKKyAqCW1lc3NhZ2UgY2FuIHNsZWVwLgorICogCisgKiAoMTEvMTIvMjAwMCkgZ2toCisgKglGaXhlZCBidWcgd2l0aCBkYXRhIGJlaW5nIGRyb3BwZWQgb24gdGhlIGZsb29yIGJ5IGZvcmNpbmcgdHR5LT5sb3dfbGF0ZW5jeQorICoJdG8gYmUgb24uICBIb3BlZnVsbHkgdGhpcyBmaXhlcyB0aGUgT0hDSSBpc3N1ZSEKKyAqCisgKiAoMTEvMDEvMjAwMCkgQWRhbSBKLiBSaWNodGVyCisgKgl1c2JfZGV2aWNlX2lkIHRhYmxlIHN1cHBvcnQKKyAqIAorICogKDEwLzA1LzIwMDApIGdraAorICoJRml4ZWQgYnVnIHdpdGggdXJiLT5kZXYgbm90IGJlaW5nIHNldCBwcm9wZXJseSwgbm93IHRoYXQgdGhlIHVzYgorICoJY29yZSBuZWVkcyBpdC4KKyAqIAorICogKDA5LzExLzIwMDApIGdraAorICoJR290IHJpZCBvZiBhbHdheXMgY2FsbGluZyBrbWFsbG9jIGZvciBldmVyeSB1cmIgd2Ugd3JvdGUgb3V0IHRvIHRoZQorICoJZGV2aWNlLgorICoJQWRkZWQgdmlzb3JfcmVhZF9jYWxsYmFjayBzbyB3ZSBjYW4ga2VlcCB0cmFjayBvZiBieXRlcyBpbiBhbmQgb3V0IGZvcgorICoJdGhvc2UgcGVvcGxlIHdobyBsaWtlIHRvIGtub3cgdGhlIHNwZWVkIG9mIHRoZWlyIGRldmljZS4KKyAqCVJlbW92ZWQgREVCVUcgI2lmZGVmcyB3aXRoIGNhbGwgdG8gdXNiX3NlcmlhbF9kZWJ1Z19kYXRhCisgKgorICogKDA5LzA2LzIwMDApIGdraAorICoJRml4ZWQgb29wcyBpbiB2aXNvcl9leGl0LiAgTmVlZCB0byB1bmNvbW1lbnQgdXNiX3VubGlua191cmIgY2FsbCBfYWZ0ZXJfCisgKgl0aGUgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMgc2V0IHVyYi0+ZGV2ID0gTlVMTCB3aGVuIHRoZSB1cmIgaXMgZmluaXNoZWQuCisgKgorICogKDA4LzI4LzIwMDApIGdraAorICoJQWRkZWQgbG9ja3MgZm9yIFNNUCBzYWZlbmVzcy4KKyAqCisgKiAoMDgvMDgvMjAwMCkgZ2toCisgKglGaXhlZCBlbmRpYW4gcHJvYmxlbSBpbiB2aXNvcl9zdGFydHVwLgorICoJRml4ZWQgTU9EX0lOQyBhbmQgTU9EX0RFQyBsb2dpYyBhbmQgdGhlIGFiaWxpdHkgdG8gb3BlbiBhIHBvcnQgbW9yZSAKKyAqCXRoYW4gb25jZS4KKyAqIAorICogKDA3LzIzLzIwMDApIGdraAorICoJQWRkZWQgcG9vbCBvZiB3cml0ZSB1cmJzIHRvIHNwZWVkIHVwIHRyYW5zZmVycyB0byB0aGUgdmlzb3IuCisgKiAKKyAqICgwNy8xOS8yMDAwKSBna2gKKyAqCUFkZGVkIG1vZHVsZV9pbml0IGFuZCBtb2R1bGVfZXhpdCBmdW5jdGlvbnMgdG8gaGFuZGxlIHRoZSBmYWN0IHRoYXQgdGhpcworICoJZHJpdmVyIGlzIGEgbG9hZGFibGUgbW9kdWxlIG5vdy4KKyAqCisgKiAoMDcvMDMvMjAwMCkgZ2toCisgKglBZGRlZCB2aXNvcl9zZXRfaW9jdGwgYW5kIHZpc29yX3NldF90ZXJtaW9zIGZ1bmN0aW9ucyAodGhleSBkb24ndCBkbyBtdWNoCisgKglvZiBhbnl0aGluZywgYnV0IGFyZSBnb29kIGZvciBkZWJ1Z2dpbmcuKQorICogCisgKiAoMDYvMjUvMjAwMCkgZ2toCisgKglGaXhlZCBidWcgaW4gdmlzb3JfdW50aHJvdHRsZSB0aGF0IHNob3VsZCBoZWxwIHdpdGggdGhlIGRpc2Nvbm5lY3QgaW4gUFBQCisgKglidWcgdGhhdCBwZW9wbGUgaGF2ZSBiZWVuIHJlcG9ydGluZy4KKyAqCisgKiAoMDYvMjMvMjAwMCkgZ2toCisgKglDbGVhbmVkIHVwIGRlYnVnZ2luZyBzdGF0ZW1lbnRzIGluIGEgcXVlc3QgdG8gZmluZCBVSENJIHRpbWVvdXQgYnVnLgorICoKKyAqICgwNC8yNy8yMDAwKSBSeWFuIFZhbmRlckJpamwKKyAqIAlGaXhlZCBtZW1vcnkgbGVhayBpbiB2aXNvcl9jbG9zZQorICoKKyAqICgwMy8yNi8yMDAwKSBna2gKKyAqCVNwbGl0IGRyaXZlciB1cCBpbnRvIGRldmljZSBzcGVjaWZpYyBwaWVjZXMuCisgKiAKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKyNpbmNsdWRlICJ2aXNvci5oIgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2Mi4xIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBIYW5kU3ByaW5nIFZpc29yIC8gUGFsbSBPUyBkcml2ZXIiCisKKy8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGEgaGFuZHNwcmluZyB2aXNvciAqLworc3RhdGljIGludCAgdmlzb3Jfb3BlbgkJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyB2b2lkIHZpc29yX2Nsb3NlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCAgdmlzb3Jfd3JpdGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CitzdGF0aWMgaW50ICB2aXNvcl93cml0ZV9yb29tCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50ICB2aXNvcl9jaGFyc19pbl9idWZmZXIJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgdmlzb3JfdGhyb3R0bGUJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgdmlzb3JfdW50aHJvdHRsZQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50ICB2aXNvcl9wcm9iZQkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgaW50ICB2aXNvcl9jYWxjX251bV9wb3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIHZpc29yX3NodXRkb3duCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgIHZpc29yX2lvY3RsCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgdm9pZCB2aXNvcl9zZXRfdGVybWlvcwkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKm9sZF90ZXJtaW9zKTsKK3N0YXRpYyB2b2lkIHZpc29yX3dyaXRlX2J1bGtfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgdmlzb3JfcmVhZF9idWxrX2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIHZpc29yX3JlYWRfaW50X2NhbGxiYWNrCShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyBpbnQgIGNsaWVfM181X3N0YXJ0dXAJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgdHJlb19hdHRhY2gJCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyBpbnQgY2xpZV81X2F0dGFjaCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgaW50IHBhbG1fb3NfM19wcm9iZSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKK3N0YXRpYyBpbnQgcGFsbV9vc180X3Byb2JlIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworCisvKiBQYXJhbWV0ZXJzIHRoYXQgbWF5IGJlIHBhc3NlZCBpbnRvIHRoZSBtb2R1bGUuICovCitzdGF0aWMgaW50IGRlYnVnOworc3RhdGljIF9fdTE2IHZlbmRvcjsKK3N0YXRpYyBfX3UxNiBwcm9kdWN0OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKEhBTkRTUFJJTkdfVkVORE9SX0lELCBIQU5EU1BSSU5HX1ZJU09SX0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzNfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoSEFORFNQUklOR19WRU5ET1JfSUQsIEhBTkRTUFJJTkdfVFJFT19JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKEhBTkRTUFJJTkdfVkVORE9SX0lELCBIQU5EU1BSSU5HX1RSRU82MDBfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NNTAwX0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoUEFMTV9WRU5ET1JfSUQsIFBBTE1fTTUwNV9JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKFBBTE1fVkVORE9SX0lELCBQQUxNX001MTVfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9JNzA1X0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoUEFMTV9WRU5ET1JfSUQsIFBBTE1fTTEwMF9JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKFBBTE1fVkVORE9SX0lELCBQQUxNX00xMjVfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NMTMwX0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoUEFMTV9WRU5ET1JfSUQsIFBBTE1fVFVOR1NURU5fVF9JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKFBBTE1fVkVORE9SX0lELCBQQUxNX1RVTkdTVEVOX1pfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9aSVJFMzFfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9aSVJFX0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoU09OWV9WRU5ET1JfSUQsIFNPTllfQ0xJRV80XzBfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9DTElFX1MzNjBfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9DTElFXzRfMV9JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKFNPTllfVkVORE9SX0lELCBTT05ZX0NMSUVfTlg2MF9JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKFNPTllfVkVORE9SX0lELCBTT05ZX0NMSUVfTlo5MFZfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9DTElFX1RKMjVfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShTQU1TVU5HX1ZFTkRPUl9JRCwgU0FNU1VOR19TQ0hfSTMzMF9JRCksIAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShTQU1TVU5HX1ZFTkRPUl9JRCwgU0FNU1VOR19TUEhfSTUwMF9JRCksIAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgVVNCX0RFVklDRShHQVJNSU5fVkVORE9SX0lELCBHQVJNSU5fSVFVRV8zNjAwX0lEKSwgCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKEFDRUVDQV9WRU5ET1JfSUQsIEFDRUVDQV9NRVoxMDAwX0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZwYWxtX29zXzRfcHJvYmUgfSwKKwl7IFVTQl9ERVZJQ0UoS1lPQ0VSQV9WRU5ET1JfSUQsIEtZT0NFUkFfNzEzNV9JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyBVU0JfREVWSUNFKEZPU1NJTF9WRU5ET1JfSUQsIEZPU1NJTF9BQkFDVVNfSUQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBhbG1fb3NfNF9wcm9iZSB9LAorCXsgfSwJCQkJCS8qIG9wdGlvbmFsIHBhcmFtZXRlciBlbnRyeSAqLworCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjbGllX2lkXzVfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKFNPTllfVkVORE9SX0lELCBTT05ZX0NMSUVfVVg1MF9JRCksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH0sCisJeyB9LAkJCQkJLyogb3B0aW9uYWwgcGFyYW1ldGVyIGVudHJ5ICovCisJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNsaWVfaWRfM181X3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9DTElFXzNfNV9JRCkgfSwKKwl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY29tYmluZWQgW10gPSB7CisJeyBVU0JfREVWSUNFKEhBTkRTUFJJTkdfVkVORE9SX0lELCBIQU5EU1BSSU5HX1ZJU09SX0lEKSB9LAorCXsgVVNCX0RFVklDRShIQU5EU1BSSU5HX1ZFTkRPUl9JRCwgSEFORFNQUklOR19UUkVPX0lEKSB9LAorCXsgVVNCX0RFVklDRShIQU5EU1BSSU5HX1ZFTkRPUl9JRCwgSEFORFNQUklOR19UUkVPNjAwX0lEKSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NNTAwX0lEKSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NNTA1X0lEKSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NNTE1X0lEKSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9JNzA1X0lEKSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NMTAwX0lEKSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NMTI1X0lEKSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9NMTMwX0lEKSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9UVU5HU1RFTl9UX0lEKSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9UVU5HU1RFTl9aX0lEKSB9LAorCXsgVVNCX0RFVklDRShQQUxNX1ZFTkRPUl9JRCwgUEFMTV9aSVJFMzFfSUQpIH0sCisJeyBVU0JfREVWSUNFKFBBTE1fVkVORE9SX0lELCBQQUxNX1pJUkVfSUQpIH0sCisJeyBVU0JfREVWSUNFKFNPTllfVkVORE9SX0lELCBTT05ZX0NMSUVfM181X0lEKSB9LAorCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9DTElFXzRfMF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU09OWV9WRU5ET1JfSUQsIFNPTllfQ0xJRV9TMzYwX0lEKSB9LAorCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9DTElFXzRfMV9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU09OWV9WRU5ET1JfSUQsIFNPTllfQ0xJRV9OWDYwX0lEKSB9LAorCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9DTElFX05aOTBWX0lEKSB9LAorCXsgVVNCX0RFVklDRShTT05ZX1ZFTkRPUl9JRCwgU09OWV9DTElFX1VYNTBfSUQpIH0sCisJeyBVU0JfREVWSUNFKFNPTllfVkVORE9SX0lELCBTT05ZX0NMSUVfVEoyNV9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoU0FNU1VOR19WRU5ET1JfSUQsIFNBTVNVTkdfU0NIX0kzMzBfSUQpIH0sCisJeyBVU0JfREVWSUNFKFNBTVNVTkdfVkVORE9SX0lELCBTQU1TVU5HX1NQSF9JNTAwX0lEKSB9LAorCXsgVVNCX0RFVklDRShHQVJNSU5fVkVORE9SX0lELCBHQVJNSU5fSVFVRV8zNjAwX0lEKSB9LAorCXsgVVNCX0RFVklDRShBQ0VFQ0FfVkVORE9SX0lELCBBQ0VFQ0FfTUVaMTAwMF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoS1lPQ0VSQV9WRU5ET1JfSUQsIEtZT0NFUkFfNzEzNV9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRk9TU0lMX1ZFTkRPUl9JRCwgRk9TU0lMX0FCQUNVU19JRCkgfSwKKwl7IH0sCQkJCQkvKiBvcHRpb25hbCBwYXJhbWV0ZXIgZW50cnkgKi8KKwl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlX2NvbWJpbmVkKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHZpc29yX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkidmlzb3IiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGVfY29tYmluZWQsCit9OworCisvKiBBbGwgb2YgdGhlIGRldmljZSBpbmZvIG5lZWRlZCBmb3IgdGhlIEhhbmRzcHJpbmcgVmlzb3IsIGFuZCBQYWxtIDQuMCBkZXZpY2VzICovCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgaGFuZHNwcmluZ19kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiSGFuZHNwcmluZyBWaXNvciAvIFBhbG0gT1MiLAorCS5zaG9ydF9uYW1lID0JCSJ2aXNvciIsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4gPQkJMiwKKwkubnVtX2J1bGtfb3V0ID0JCTIsCisJLm51bV9wb3J0cyA9CQkyLAorCS5vcGVuID0JCQl2aXNvcl9vcGVuLAorCS5jbG9zZSA9CQl2aXNvcl9jbG9zZSwKKwkudGhyb3R0bGUgPQkJdmlzb3JfdGhyb3R0bGUsCisJLnVudGhyb3R0bGUgPQkJdmlzb3JfdW50aHJvdHRsZSwKKwkuYXR0YWNoID0JCXRyZW9fYXR0YWNoLAorCS5wcm9iZSA9CQl2aXNvcl9wcm9iZSwKKwkuY2FsY19udW1fcG9ydHMgPQl2aXNvcl9jYWxjX251bV9wb3J0cywKKwkuc2h1dGRvd24gPQkJdmlzb3Jfc2h1dGRvd24sCisJLmlvY3RsID0JCXZpc29yX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQl2aXNvcl9zZXRfdGVybWlvcywKKwkud3JpdGUgPQkJdmlzb3Jfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJdmlzb3Jfd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyID0Jdmlzb3JfY2hhcnNfaW5fYnVmZmVyLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0Jdmlzb3Jfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkucmVhZF9idWxrX2NhbGxiYWNrID0Jdmlzb3JfcmVhZF9idWxrX2NhbGxiYWNrLAorCS5yZWFkX2ludF9jYWxsYmFjayA9CXZpc29yX3JlYWRfaW50X2NhbGxiYWNrLAorfTsKKworLyogQWxsIG9mIHRoZSBkZXZpY2UgaW5mbyBuZWVkZWQgZm9yIHRoZSBDbGllIFVYNTAsIFRINTUgUGFsbSA1LjAgZGV2aWNlcyAqLworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIGNsaWVfNV9kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiU29ueSBDbGllIDUuMCIsCisJLnNob3J0X25hbWUgPQkJImNsaWVfNSIsCisJLmlkX3RhYmxlID0JCWNsaWVfaWRfNV90YWJsZSwKKwkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCisJLm51bV9idWxrX2luID0JCTIsCisJLm51bV9idWxrX291dCA9CQkyLAorCS5udW1fcG9ydHMgPQkJMiwKKwkub3BlbiA9CQkJdmlzb3Jfb3BlbiwKKwkuY2xvc2UgPQkJdmlzb3JfY2xvc2UsCisJLnRocm90dGxlID0JCXZpc29yX3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCXZpc29yX3VudGhyb3R0bGUsCisJLmF0dGFjaCA9CQljbGllXzVfYXR0YWNoLAorCS5wcm9iZSA9CQl2aXNvcl9wcm9iZSwKKwkuY2FsY19udW1fcG9ydHMgPQl2aXNvcl9jYWxjX251bV9wb3J0cywKKwkuc2h1dGRvd24gPQkJdmlzb3Jfc2h1dGRvd24sCisJLmlvY3RsID0JCXZpc29yX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQl2aXNvcl9zZXRfdGVybWlvcywKKwkud3JpdGUgPQkJdmlzb3Jfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJdmlzb3Jfd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyID0Jdmlzb3JfY2hhcnNfaW5fYnVmZmVyLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0Jdmlzb3Jfd3JpdGVfYnVsa19jYWxsYmFjaywKKwkucmVhZF9idWxrX2NhbGxiYWNrID0Jdmlzb3JfcmVhZF9idWxrX2NhbGxiYWNrLAorCS5yZWFkX2ludF9jYWxsYmFjayA9CXZpc29yX3JlYWRfaW50X2NhbGxiYWNrLAorfTsKKworLyogZGV2aWNlIGluZm8gZm9yIHRoZSBTb255IENsaWUgT1MgdmVyc2lvbiAzLjUgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kZXZpY2VfdHlwZSBjbGllXzNfNV9kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiU29ueSBDbGllIDMuNSIsCisJLnNob3J0X25hbWUgPQkJImNsaWVfMy41IiwKKwkuaWRfdGFibGUgPQkJY2xpZV9pZF8zXzVfdGFibGUsCisJLm51bV9pbnRlcnJ1cHRfaW4gPQkwLAorCS5udW1fYnVsa19pbiA9CQkxLAorCS5udW1fYnVsa19vdXQgPQkJMSwKKwkubnVtX3BvcnRzID0JCTEsCisJLm9wZW4gPQkJCXZpc29yX29wZW4sCisJLmNsb3NlID0JCXZpc29yX2Nsb3NlLAorCS50aHJvdHRsZSA9CQl2aXNvcl90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQl2aXNvcl91bnRocm90dGxlLAorCS5hdHRhY2ggPQkJY2xpZV8zXzVfc3RhcnR1cCwKKwkuaW9jdGwgPQkJdmlzb3JfaW9jdGwsCisJLnNldF90ZXJtaW9zID0JCXZpc29yX3NldF90ZXJtaW9zLAorCS53cml0ZSA9CQl2aXNvcl93cml0ZSwKKwkud3JpdGVfcm9vbSA9CQl2aXNvcl93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIgPQl2aXNvcl9jaGFyc19pbl9idWZmZXIsCisJLndyaXRlX2J1bGtfY2FsbGJhY2sgPQl2aXNvcl93cml0ZV9idWxrX2NhbGxiYWNrLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQl2aXNvcl9yZWFkX2J1bGtfY2FsbGJhY2ssCit9OworCitzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSB7CisJc3BpbmxvY2tfdCBsb2NrOworCWludCBieXRlc19pbjsKKwlpbnQgYnl0ZXNfb3V0OworCWludCBvdXRzdGFuZGluZ191cmJzOworCWludCB0aHJvdHRsZWQ7Cit9OworCisvKiBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgdXJicyB0byBwcmV2ZW50IHVzZXJzcGFjZSBEb1MgZnJvbSBoYXBwZW5pbmcgKi8KKyNkZWZpbmUgVVJCX1VQUEVSX0xJTUlUCTQyCisKK3N0YXRpYyBpbnQgc3RhdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEhhbmRzcHJpbmcgVmlzb3Igc3BlY2lmaWMgZHJpdmVyIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgdmlzb3Jfb3BlbiAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXN1bHQgPSAwOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXBvcnQtPnJlYWRfdXJiKSB7CisJCS8qIHRoaXMgaXMgbmVlZGVkIGZvciBzb21lIGJyYWluIGRlYWQgU29ueSBkZXZpY2VzICovCisJCWRldl9lcnIoJnBvcnQtPmRldiwgIkRldmljZSBsaWVkIGFib3V0IG51bWJlciBvZiBwb3J0cywgcGxlYXNlIHVzZSBhIGxvd2VyIG9uZS5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPmJ5dGVzX2luID0gMDsKKwlwcml2LT5ieXRlc19vdXQgPSAwOworCXByaXYtPm91dHN0YW5kaW5nX3VyYnMgPSAwOworCXByaXYtPnRocm90dGxlZCA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBGb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMgdGhlIGRhdGEKKwkgKiB0aHJvdWdoLCBvdGhlcndpc2UgaXQgaXMgc2NoZWR1bGVkLCBhbmQgd2l0aCBoaWdoIGRhdGEgcmF0ZXMgKGxpa2UKKwkgKiB3aXRoIE9IQ0kpIGRhdGEgY2FuIGdldCBsb3N0LgorCSAqLworCWlmIChwb3J0LT50dHkpCisJCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAxOworCisJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKwl1c2JfZmlsbF9idWxrX3VyYiAocG9ydC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LAorCQkJICAgdXNiX3JjdmJ1bGtwaXBlIChzZXJpYWwtPmRldiwgCisJCQkJCSAgICBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkgICB2aXNvcl9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVzdWx0KSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19GVU5DVElPTl9fLCByZXN1bHQpOworCQlnb3RvIGV4aXQ7CisJfQorCQorCWlmIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKSB7CisJCWRiZygiJXMgLSBhZGRpbmcgaW50ZXJydXB0IGlucHV0IGZvciB0cmVvIiwgX19GVU5DVElPTl9fKTsKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXN1bHQpCisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIGludGVycnVwdCB1cmIsIGVycm9yICVkXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwl9CitleGl0OgkKKwlyZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyB2b2lkIHZpc29yX2Nsb3NlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbHApCit7CisJc3RydWN0IHZpc29yX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgY2hhciAqdHJhbnNmZXJfYnVmZmVyOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCQkgCisJLyogc2h1dGRvd24gb3VyIHVyYnMgKi8KKwl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworCWlmIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKQorCQl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7CisKKwkvKiBUcnkgdG8gc2VuZCBzaHV0ZG93biBtZXNzYWdlLCBpZiB0aGUgZGV2aWNlIGlzIGdvbmUsIHRoaXMgd2lsbCBqdXN0IGZhaWwuICovCisJdHJhbnNmZXJfYnVmZmVyID0gIGttYWxsb2MgKDB4MTIsIEdGUF9LRVJORUwpOworCWlmICh0cmFuc2Zlcl9idWZmZXIpIHsKKwkJdXNiX2NvbnRyb2xfbXNnIChwb3J0LT5zZXJpYWwtPmRldiwKKwkJCQkgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKKwkJCQkgVklTT1JfQ0xPU0VfTk9USUZJQ0FUSU9OLCAweGMyLAorCQkJCSAweDAwMDAsIDB4MDAwMCwgCisJCQkJIHRyYW5zZmVyX2J1ZmZlciwgMHgxMiwgMzAwKTsKKwkJa2ZyZWUgKHRyYW5zZmVyX2J1ZmZlcik7CisJfQorCisJaWYgKHN0YXRzKQorCQlkZXZfaW5mbygmcG9ydC0+ZGV2LCAiQnl0ZXMgSW4gPSAlZCAgQnl0ZXMgT3V0ID0gJWRcbiIsCisJCQkgcHJpdi0+Ynl0ZXNfaW4sIHByaXYtPmJ5dGVzX291dCk7Cit9CisKKworc3RhdGljIGludCB2aXNvcl93cml0ZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCit7CisJc3RydWN0IHZpc29yX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHN0YXR1czsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAocHJpdi0+b3V0c3RhbmRpbmdfdXJicyA+IFVSQl9VUFBFUl9MSU1JVCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCWRiZygiJXMgLSB3cml0ZSBsaW1pdCBoaXRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlidWZmZXIgPSBrbWFsbG9jIChjb3VudCwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CisJaWYgKCF1cmIpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAibm8gbW9yZSBmcmVlIHVyYnNcbiIpOworCQlrZnJlZSAoYnVmZmVyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtY3B5IChidWZmZXIsIGJ1ZiwgY291bnQpOworCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGNvdW50LCBidWZmZXIpOworCisJdXNiX2ZpbGxfYnVsa191cmIgKHVyYiwgc2VyaWFsLT5kZXYsCisJCQkgICB1c2Jfc25kYnVsa3BpcGUgKHNlcmlhbC0+ZGV2LAorCQkJCQkgICAgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgIGJ1ZmZlciwgY291bnQsIAorCQkJICAgdmlzb3Jfd3JpdGVfYnVsa19jYWxsYmFjaywgcG9ydCk7CisKKwkvKiBzZW5kIGl0IGRvd24gdGhlIHBpcGUgKi8KKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSB1c2Jfc3VibWl0X3VyYih3cml0ZSBidWxrKSBmYWlsZWQgd2l0aCBzdGF0dXMgPSAlZFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJY291bnQgPSBzdGF0dXM7CisJCWtmcmVlIChidWZmZXIpOworCX0gZWxzZSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCSsrcHJpdi0+b3V0c3RhbmRpbmdfdXJiczsKKwkJcHJpdi0+Ynl0ZXNfb3V0ICs9IGNvdW50OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJfQorCisJLyogd2UgYXJlIGRvbmUgd2l0aCB0aGlzIHVyYiwgc28gbGV0IHRoZSBob3N0IGRyaXZlcgorCSAqIHJlYWxseSBmcmVlIGl0IHdoZW4gaXQgaXMgZmluaXNoZWQgd2l0aCBpdCAqLworCXVzYl9mcmVlX3VyYiAodXJiKTsKKworCXJldHVybiBjb3VudDsKK30KKworCitzdGF0aWMgaW50IHZpc29yX3dyaXRlX3Jvb20gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKgorCSAqIFdlIHJlYWxseSBjYW4gdGFrZSBhbnl0aGluZyB0aGUgdXNlciB0aHJvd3MgYXQgdXMKKwkgKiBidXQgbGV0J3MgcGljayBhIG5pY2UgYmlnIG51bWJlciB0byB0ZWxsIHRoZSB0dHkKKwkgKiBsYXllciB0aGF0IHdlIGhhdmUgbG90cyBvZiBmcmVlIHNwYWNlCisJICovCisJcmV0dXJuIDIwNDg7Cit9CisKKworc3RhdGljIGludCB2aXNvcl9jaGFyc19pbl9idWZmZXIgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiAKKwkgKiBXZSBjYW4ndCByZWFsbHkgYWNjb3VudCBmb3IgaG93IG11Y2ggZGF0YSB3ZQorCSAqIGhhdmUgc2VudCBvdXQsIGJ1dCBoYXNuJ3QgbWFkZSBpdCB0aHJvdWdoIHRvIHRoZQorCSAqIGRldmljZSwgc28ganVzdCB0ZWxsIHRoZSB0dHkgbGF5ZXIgdGhhdCBldmVyeXRoaW5nCisJICogaXMgZmx1c2hlZC4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCB2aXNvcl93cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogZnJlZSB1cCB0aGUgdHJhbnNmZXIgYnVmZmVyLCBhcyB1c2JfZnJlZV91cmIoKSBkb2VzIG5vdCBkbyB0aGlzICovCisJa2ZyZWUgKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQorCWlmICh1cmItPnN0YXR1cykKKwkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwktLXByaXYtPm91dHN0YW5kaW5nX3VyYnM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7Cit9CisKKworc3RhdGljIHZvaWQgdmlzb3JfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCWludCB0aHJvdHRsZWQ7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKworCXR0eSA9IHBvcnQtPnR0eTsKKwlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoIDsgKytpKSB7CisJCQkvKiBpZiB3ZSBpbnNlcnQgbW9yZSB0aGFuIFRUWV9GTElQQlVGX1NJWkUgY2hhcmFjdGVycywgd2UgZHJvcCB0aGVtLiAqLworCQkJaWYodHR5LT5mbGlwLmNvdW50ID49IFRUWV9GTElQQlVGX1NJWkUpIHsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJfQorCQkJLyogdGhpcyBkb2Vzbid0IGFjdHVhbGx5IHB1c2ggdGhlIGRhdGEgdGhyb3VnaCB1bmxlc3MgdHR5LT5sb3dfbGF0ZW5jeSBpcyBzZXQgKi8KKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgMCk7CisJCX0KKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT5ieXRlc19pbiArPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJdGhyb3R0bGVkID0gcHJpdi0+dGhyb3R0bGVkOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCBpZiB3ZSBzaG91bGQgKi8KKwlpZiAoIXRocm90dGxlZCkgeworCQl1c2JfZmlsbF9idWxrX3VyYiAocG9ydC0+cmVhZF91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCSAgIHVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKKwkJCQkJCSAgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJCSAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCSAgIHZpc29yX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCB2aXNvcl9yZWFkX2ludF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJaW50IHJlc3VsdDsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCS8qIHN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwKKwkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkgICAgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKgorCSAqIFRoaXMgaW5mb3JtYXRpb24gaXMgc3RpbGwgdW5rbm93biB3aGF0IGl0IGNhbiBiZSB1c2VkIGZvci4KKwkgKiBJZiBhbnlvbmUgaGFzIGFuIGlkZWEsIHBsZWFzZSBsZXQgdGhlIGF1dGhvciBrbm93Li4uCisJICoKKwkgKiBSdW1vciBoYXMgaXQgdGhpcyBlbmRwb2ludCBpcyB1c2VkIHRvIG5vdGlmeSB3aGVuIGRhdGEKKwkgKiBpcyByZWFkeSB0byBiZSByZWFkIGZyb20gdGhlIGJ1bGsgb25lcy4KKwkgKi8KKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywKKwkJCSAgICAgIHVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCitleGl0OgorCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpCisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgaW50ZXJydXB0IHVyYlxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcmVzdWx0KTsKK30KKworc3RhdGljIHZvaWQgdmlzb3JfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHZpc29yX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+dGhyb3R0bGVkID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Cit9CisKKworc3RhdGljIHZvaWQgdmlzb3JfdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPnRocm90dGxlZCA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworfQorCitzdGF0aWMgaW50IHBhbG1fb3NfM19wcm9iZSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzZXJpYWwtPmRldi0+ZGV2OworCXN0cnVjdCB2aXNvcl9jb25uZWN0aW9uX2luZm8gKmNvbm5lY3Rpb25faW5mbzsKKwl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXI7CisJY2hhciAqc3RyaW5nOworCWludCByZXR2YWwgPSAwOworCWludCBpOworCWludCBudW1fcG9ydHMgPSAwOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwl0cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jIChzaXplb2YgKCpjb25uZWN0aW9uX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRyYW5zZmVyX2J1ZmZlcikgeworCQlkZXZfZXJyKGRldiwgIiVzIC0ga21hbGxvYyglWmQpIGZhaWxlZC5cbiIsIF9fRlVOQ1RJT05fXywKKwkJCXNpemVvZigqY29ubmVjdGlvbl9pbmZvKSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIHNlbmQgYSBnZXQgY29ubmVjdGlvbiBpbmZvIHJlcXVlc3QgKi8KKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LAorCQkJCSAgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCQkgIFZJU09SX0dFVF9DT05ORUNUSU9OX0lORk9STUFUSU9OLAorCQkJCSAgMHhjMiwgMHgwMDAwLCAweDAwMDAsIHRyYW5zZmVyX2J1ZmZlciwKKwkJCQkgIHNpemVvZigqY29ubmVjdGlvbl9pbmZvKSwgMzAwKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIiVzIC0gZXJyb3IgJWQgZ2V0dGluZyBjb25uZWN0aW9uIGluZm9ybWF0aW9uXG4iLAorCQkJX19GVU5DVElPTl9fLCByZXR2YWwpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHJldHZhbCA9PSBzaXplb2YoKmNvbm5lY3Rpb25faW5mbykpIHsKKwkgICAgICAgIGNvbm5lY3Rpb25faW5mbyA9IChzdHJ1Y3Qgdmlzb3JfY29ubmVjdGlvbl9pbmZvICopdHJhbnNmZXJfYnVmZmVyOworCisJCW51bV9wb3J0cyA9IGxlMTZfdG9fY3B1KGNvbm5lY3Rpb25faW5mby0+bnVtX3BvcnRzKTsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9wb3J0czsgKytpKSB7CisJCQlzd2l0Y2ggKGNvbm5lY3Rpb25faW5mby0+Y29ubmVjdGlvbnNbaV0ucG9ydF9mdW5jdGlvbl9pZCkgeworCQkJCWNhc2UgVklTT1JfRlVOQ1RJT05fR0VORVJJQzoKKwkJCQkJc3RyaW5nID0gIkdlbmVyaWMiOworCQkJCQlicmVhazsKKwkJCQljYXNlIFZJU09SX0ZVTkNUSU9OX0RFQlVHR0VSOgorCQkJCQlzdHJpbmcgPSAiRGVidWdnZXIiOworCQkJCQlicmVhazsKKwkJCQljYXNlIFZJU09SX0ZVTkNUSU9OX0hPVFNZTkM6CisJCQkJCXN0cmluZyA9ICJIb3RTeW5jIjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBWSVNPUl9GVU5DVElPTl9DT05TT0xFOgorCQkJCQlzdHJpbmcgPSAiQ29uc29sZSI7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVklTT1JfRlVOQ1RJT05fUkVNT1RFX0ZJTEVfU1lTOgorCQkJCQlzdHJpbmcgPSAiUmVtb3RlIEZpbGUgU3lzdGVtIjsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJc3RyaW5nID0gInVua25vd24iOworCQkJCQlicmVhazsKKwkJCX0KKwkJCWRldl9pbmZvKGRldiwgIiVzOiBwb3J0ICVkLCBpcyBmb3IgJXMgdXNlXG4iLAorCQkJCXNlcmlhbC0+dHlwZS0+bmFtZSwKKwkJCQljb25uZWN0aW9uX2luZm8tPmNvbm5lY3Rpb25zW2ldLnBvcnQsIHN0cmluZyk7CisJCX0KKwl9CisJLyoKKwkqIEhhbmRsZSBkZXZpY2VzIHRoYXQgcmVwb3J0IGludmFsaWQgc3R1ZmYgaGVyZS4KKwkqLworCWlmIChudW1fcG9ydHMgPT0gMCB8fCBudW1fcG9ydHMgPiAyKSB7CisJCWRldl93YXJuIChkZXYsICIlczogTm8gdmFsaWQgY29ubmVjdCBpbmZvIGF2YWlsYWJsZVxuIiwKKwkJCXNlcmlhbC0+dHlwZS0+bmFtZSk7CisJCW51bV9wb3J0cyA9IDI7CisJfQorICAKKwlkZXZfaW5mbyhkZXYsICIlczogTnVtYmVyIG9mIHBvcnRzOiAlZFxuIiwgc2VyaWFsLT50eXBlLT5uYW1lLAorCQludW1fcG9ydHMpOworCisJLyoKKwkgKiBzYXZlIG9mZiBvdXIgbnVtX3BvcnRzIGluZm8gc28gdGhhdCB3ZSBjYW4gdXNlIGl0IGluIHRoZQorCSAqIGNhbGNfbnVtX3BvcnRzIGNhbGxiYWNrCisJICovCisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsICh2b2lkICopKGxvbmcpbnVtX3BvcnRzKTsKKworCS8qIGFzayBmb3IgdGhlIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUsIGJ1dCBpZ25vcmUgdGhlIHJlc3BvbnNlIGFzIGl0IGlzIGJyb2tlbiAqLworCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsCisJCQkJICB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJCSAgVklTT1JfUkVRVUVTVF9CWVRFU19BVkFJTEFCTEUsCisJCQkJICAweGMyLCAweDAwMDAsIDB4MDAwNSwgdHJhbnNmZXJfYnVmZmVyLAorCQkJCSAgMHgwMiwgMzAwKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZGV2X2VycihkZXYsICIlcyAtIGVycm9yICVkIGdldHRpbmcgYnl0ZXMgYXZhaWxhYmxlIHJlcXVlc3RcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJcmV0dmFsID0gMDsKKworZXhpdDoKKwlrZnJlZSAodHJhbnNmZXJfYnVmZmVyKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgcGFsbV9vc180X3Byb2JlIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnNlcmlhbC0+ZGV2LT5kZXY7CisJc3RydWN0IHBhbG1fZXh0X2Nvbm5lY3Rpb25faW5mbyAqY29ubmVjdGlvbl9pbmZvOworCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgcmV0dmFsOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwl0cmFuc2Zlcl9idWZmZXIgPSAga21hbGxvYyAoc2l6ZW9mICgqY29ubmVjdGlvbl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cmFuc2Zlcl9idWZmZXIpIHsKKwkJZGV2X2VycihkZXYsICIlcyAtIGttYWxsb2MoJVpkKSBmYWlsZWQuXG4iLCBfX0ZVTkNUSU9OX18sCisJCQlzaXplb2YoKmNvbm5lY3Rpb25faW5mbykpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LAorCQkJCSAgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwgCisJCQkJICBQQUxNX0dFVF9FWFRfQ09OTkVDVElPTl9JTkZPUk1BVElPTiwKKwkJCQkgIDB4YzIsIDB4MDAwMCwgMHgwMDAwLCB0cmFuc2Zlcl9idWZmZXIsCisJCQkJICBzaXplb2YgKCpjb25uZWN0aW9uX2luZm8pLCAzMDApOworCWlmIChyZXR2YWwgPCAwKQorCQlkZXZfZXJyKGRldiwgIiVzIC0gZXJyb3IgJWQgZ2V0dGluZyBjb25uZWN0aW9uIGluZm9cbiIsCisJCQlfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJZWxzZQorCQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZzZXJpYWwtPmRldi0+ZGV2LCBfX0ZVTkNUSU9OX18sCisJCQkJICAgICAgcmV0dmFsLCB0cmFuc2Zlcl9idWZmZXIpOworCisJa2ZyZWUgKHRyYW5zZmVyX2J1ZmZlcik7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB2aXNvcl9wcm9iZSAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXR2YWwgPSAwOworCWludCAoKnN0YXJ0dXApIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlICE9IDEpIHsKKwkJZXJyKCJhY3RpdmUgY29uZmlnICMlZCAhPSAxID8/IiwKKwkJCXNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChpZC0+ZHJpdmVyX2luZm8pIHsKKwkJc3RhcnR1cCA9ICh2b2lkICopaWQtPmRyaXZlcl9pbmZvOworCQlyZXR2YWwgPSBzdGFydHVwKHNlcmlhbCwgaWQpOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgdmlzb3JfY2FsY19udW1fcG9ydHMgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IG51bV9wb3J0cyA9IChpbnQpKGxvbmcpKHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKSk7CisKKwlpZiAobnVtX3BvcnRzKQorCQl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgTlVMTCk7CisKKwlyZXR1cm4gbnVtX3BvcnRzOworfQorCitzdGF0aWMgaW50IGdlbmVyaWNfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCB2aXNvcl9wcml2YXRlICpwcml2OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJcHJpdiA9IGttYWxsb2MgKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCQlpZiAoIXByaXYpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJbWVtc2V0IChwcml2LCAweDAwLCBzaXplb2YoKnByaXYpKTsKKwkJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldLCBwcml2KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2xpZV8zXzVfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc2VyaWFsLT5kZXYtPmRldjsKKwlpbnQgcmVzdWx0OworCXU4IGRhdGE7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCS8qCisJICogTm90ZSB0aGF0IFBFRy0zMDAgc2VyaWVzIGRldmljZXMgZXhwZWN0IHRoZSBmb2xsb3dpbmcgdHdvIGNhbGxzLgorCSAqLworCisJLyogZ2V0IHRoZSBjb25maWcgbnVtYmVyICovCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChzZXJpYWwtPmRldiwgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCQkgIFVTQl9SRVFfR0VUX0NPTkZJR1VSQVRJT04sIFVTQl9ESVJfSU4sCisJCQkJICAwLCAwLCAmZGF0YSwgMSwgMzAwMCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICIlczogZ2V0IGNvbmZpZyBudW1iZXIgZmFpbGVkOiAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwlpZiAocmVzdWx0ICE9IDEpIHsKKwkJZGV2X2VycihkZXYsICIlczogZ2V0IGNvbmZpZyBudW1iZXIgYmFkIHJldHVybiBsZW5ndGg6ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIGdldCB0aGUgaW50ZXJmYWNlIG51bWJlciAqLworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkJICBVU0JfUkVRX0dFVF9JTlRFUkZBQ0UsIAorCQkJCSAgVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkJICAwLCAwLCAmZGF0YSwgMSwgMzAwMCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2X2VycihkZXYsICIlczogZ2V0IGludGVyZmFjZSBudW1iZXIgZmFpbGVkOiAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwlpZiAocmVzdWx0ICE9IDEpIHsKKwkJZGV2X2VycihkZXYsICIlczogZ2V0IGludGVyZmFjZSBudW1iZXIgYmFkIHJldHVybiBsZW5ndGg6ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiBnZW5lcmljX3N0YXJ0dXAoc2VyaWFsKTsKK30KKyAKK3N0YXRpYyBpbnQgdHJlb19hdHRhY2ggKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqc3dhcF9wb3J0OworCisJLyogT25seSBkbyB0aGlzIGVuZHBvaW50IGhhY2sgZm9yIHRoZSBIYW5kc3ByaW5nIGRldmljZXMgd2l0aAorCSAqIGludGVycnVwdCBpbiBlbmRwb2ludHMsIHdoaWNoIGZvciBub3cgYXJlIHRoZSBUcmVvIGRldmljZXMuICovCisJaWYgKCEoKGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBIQU5EU1BSSU5HX1ZFTkRPUl9JRCkgfHwKKwkgICAgICAobGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IEtZT0NFUkFfVkVORE9SX0lEKSkgfHwKKwkgICAgKHNlcmlhbC0+bnVtX2ludGVycnVwdF9pbiA9PSAwKSkKKwkJZ290byBnZW5lcmljX3N0YXJ0dXA7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCS8qCisJKiBJdCBhcHBlYXJzIHRoYXQgVHJlb3MgYW5kIEt5b2NlcmFzIHdhbnQgdG8gdXNlIHRoZSAKKwkqIDFzdCBidWxrIGluIGVuZHBvaW50IHRvIGNvbW11bmljYXRlIHdpdGggdGhlIDJuZCBidWxrIG91dCBlbmRwb2ludCwgCisJKiBzbyBsZXQncyBzd2FwIHRoZSAxc3QgYW5kIDJuZCBidWxrIGluIGFuZCBpbnRlcnJ1cHQgZW5kcG9pbnRzLiAgCisJKiBOb3RlIHRoYXQgc3dhcHBpbmcgdGhlIGJ1bGsgb3V0IGVuZHBvaW50cyB3b3VsZCBicmVhayBsb3RzIG9mIAorCSogYXBwcyB0aGF0IHdhbnQgdG8gY29tbXVuaWNhdGUgb24gdGhlIHNlY29uZCBwb3J0LgorCSovCisjZGVmaW5lIENPUFlfUE9SVChkZXN0LCBzcmMpCQkJCQkJXAorCWRlc3QtPnJlYWRfdXJiID0gc3JjLT5yZWFkX3VyYjsJCQkJCVwKKwlkZXN0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyA9IHNyYy0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3M7CVwKKwlkZXN0LT5idWxrX2luX2J1ZmZlciA9IHNyYy0+YnVsa19pbl9idWZmZXI7CQkJXAorCWRlc3QtPmludGVycnVwdF9pbl91cmIgPSBzcmMtPmludGVycnVwdF9pbl91cmI7CQkJXAorCWRlc3QtPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3MgPSBzcmMtPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3M7CVwKKwlkZXN0LT5pbnRlcnJ1cHRfaW5fYnVmZmVyID0gc3JjLT5pbnRlcnJ1cHRfaW5fYnVmZmVyOworCisJc3dhcF9wb3J0ID0ga21hbGxvYyhzaXplb2YoKnN3YXBfcG9ydCksIEdGUF9LRVJORUwpOworCWlmICghc3dhcF9wb3J0KQorCQlyZXR1cm4gLUVOT01FTTsKKwlDT1BZX1BPUlQoc3dhcF9wb3J0LCBzZXJpYWwtPnBvcnRbMF0pOworCUNPUFlfUE9SVChzZXJpYWwtPnBvcnRbMF0sIHNlcmlhbC0+cG9ydFsxXSk7CisJQ09QWV9QT1JUKHNlcmlhbC0+cG9ydFsxXSwgc3dhcF9wb3J0KTsKKwlrZnJlZShzd2FwX3BvcnQpOworCitnZW5lcmljX3N0YXJ0dXA6CisJcmV0dXJuIGdlbmVyaWNfc3RhcnR1cChzZXJpYWwpOworfQorCitzdGF0aWMgaW50IGNsaWVfNV9hdHRhY2ggKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBUSDU1IHJlZ2lzdGVycyAyIHBvcnRzLiAKKwkgICBDb21tdW5pY2F0aW9uIGluIGZyb20gdGhlIFVYNTAvVEg1NSB1c2VzIGJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzIGZyb20gcG9ydCAwIAorCSAgIENvbW11bmljYXRpb24gb3V0IHRvIHRoZSBVWDUwL1RINTUgdXNlcyBidWxrX291dF9lbmRwb2ludEFkZHJlc3MgZnJvbSBwb3J0IDEgCisJICAgCisJICAgTGV0cyBkbyBhIHF1aWNrIGFuZCBkaXJ0eSBtYXBwaW5nCisJICovCisJCisJLyogc29tZSBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoc2VyaWFsLT5udW1fcG9ydHMgPCAyKQorCQlyZXR1cm4gLTE7CisJCQorCS8qIHBvcnQgMCBub3cgdXNlcyB0aGUgbW9kaWZpZWQgZW5kcG9pbnQgQWRkcmVzcyAqLworCXNlcmlhbC0+cG9ydFswXS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzID0gc2VyaWFsLT5wb3J0WzFdLT5idWxrX291dF9lbmRwb2ludEFkZHJlc3M7CisKKwlyZXR1cm4gZ2VuZXJpY19zdGFydHVwKHNlcmlhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHZpc29yX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOworfQorCitzdGF0aWMgaW50IHZpc29yX2lvY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWRiZygiJXMgLSBwb3J0ICVkLCBjbWQgMHglLjR4IiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIsIGNtZCk7CisKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgYWxsIG5pY2UgYW5kIGdvb2QsIGJ1dCB3ZSBkb24ndCBjaGFuZ2UgYW55dGhpbmcgYmFzZWQgb24gaXQgOikgKi8KK3N0YXRpYyB2b2lkIHZpc29yX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJdW5zaWduZWQgaW50IGNmbGFnOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoKCFwb3J0LT50dHkpIHx8ICghcG9ydC0+dHR5LT50ZXJtaW9zKSkgeworCQlkYmcoIiVzIC0gbm8gdHR5IHN0cnVjdHVyZXMiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJLyogY2hlY2sgdGhhdCB0aGV5IHJlYWxseSB3YW50IHVzIHRvIGNoYW5nZSBzb21ldGhpbmcgKi8KKwlpZiAob2xkX3Rlcm1pb3MpIHsKKwkJaWYgKChjZmxhZyA9PSBvbGRfdGVybWlvcy0+Y19jZmxhZykgJiYKKwkJICAgIChSRUxFVkFOVF9JRkxBRyhwb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWcpID09IFJFTEVWQU5UX0lGTEFHKG9sZF90ZXJtaW9zLT5jX2lmbGFnKSkpIHsKKwkJCWRiZygiJXMgLSBub3RoaW5nIHRvIGNoYW5nZS4uLiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBnZXQgdGhlIGJ5dGUgc2l6ZSAqLworCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgeworCQljYXNlIENTNToJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDUiLCBfX0ZVTkNUSU9OX18pOyAgIGJyZWFrOworCQljYXNlIENTNjoJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDYiLCBfX0ZVTkNUSU9OX18pOyAgIGJyZWFrOworCQljYXNlIENTNzoJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDciLCBfX0ZVTkNUSU9OX18pOyAgIGJyZWFrOworCQlkZWZhdWx0OgorCQljYXNlIENTODoJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDgiLCBfX0ZVTkNUSU9OX18pOyAgIGJyZWFrOworCX0KKwkKKwkvKiBkZXRlcm1pbmUgdGhlIHBhcml0eSAqLworCWlmIChjZmxhZyAmIFBBUkVOQikKKwkJaWYgKGNmbGFnICYgUEFST0REKQorCQkJZGJnKCIlcyAtIHBhcml0eSA9IG9kZCIsIF9fRlVOQ1RJT05fXyk7CisJCWVsc2UKKwkJCWRiZygiJXMgLSBwYXJpdHkgPSBldmVuIiwgX19GVU5DVElPTl9fKTsKKwllbHNlCisJCWRiZygiJXMgLSBwYXJpdHkgPSBub25lIiwgX19GVU5DVElPTl9fKTsKKworCS8qIGZpZ3VyZSBvdXQgdGhlIHN0b3AgYml0cyByZXF1ZXN0ZWQgKi8KKwlpZiAoY2ZsYWcgJiBDU1RPUEIpCisJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAyIiwgX19GVU5DVElPTl9fKTsKKwllbHNlCisJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAxIiwgX19GVU5DVElPTl9fKTsKKworCQorCS8qIGZpZ3VyZSBvdXQgdGhlIGZsb3cgY29udHJvbCBzZXR0aW5ncyAqLworCWlmIChjZmxhZyAmIENSVFNDVFMpCisJCWRiZygiJXMgLSBSVFMvQ1RTIGlzIGVuYWJsZWQiLCBfX0ZVTkNUSU9OX18pOworCWVsc2UKKwkJZGJnKCIlcyAtIFJUUy9DVFMgaXMgZGlzYWJsZWQiLCBfX0ZVTkNUSU9OX18pOworCQorCS8qIGRldGVybWluZSBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKi8KKwlpZiAoSV9JWE9GRihwb3J0LT50dHkpKQorCQlkYmcoIiVzIC0gWE9OL1hPRkYgaXMgZW5hYmxlZCwgWE9OID0gJTJ4LCBYT0ZGID0gJTJ4IiwKKwkJICAgIF9fRlVOQ1RJT05fXywgU1RBUlRfQ0hBUihwb3J0LT50dHkpLCBTVE9QX0NIQVIocG9ydC0+dHR5KSk7CisJZWxzZQorCQlkYmcoIiVzIC0gWE9OL1hPRkYgaXMgZGlzYWJsZWQiLCBfX0ZVTkNUSU9OX18pOworCisJLyogZ2V0IHRoZSBiYXVkIHJhdGUgd2FudGVkICovCisJZGJnKCIlcyAtIGJhdWQgcmF0ZSA9ICVkIiwgX19GVU5DVElPTl9fLCB0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0LT50dHkpKTsKKworCXJldHVybjsKK30KKworCitzdGF0aWMgaW50IF9faW5pdCB2aXNvcl9pbml0ICh2b2lkKQoreworCWludCBpLCByZXR2YWw7CisJLyogT25seSBpZiBwYXJhbWV0ZXJzIHdlcmUgcGFzc2VkIHRvIHVzICovCisJaWYgKCh2ZW5kb3I+MCkgJiYgKHByb2R1Y3Q+MCkpIHsKKwkJc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX2Rldl90ZW1wW109CisJCQl7e1VTQl9ERVZJQ0UodmVuZG9yLCBwcm9kdWN0KSwKKwkJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGFsbV9vc180X3Byb2JlIH19OworCisJCS8qIEZpbmQgdGhlIGxhc3QgZW50cnkgaW4gaWRfdGFibGUgKi8KKwkJZm9yIChpPTA7IDsgaSsrKSB7CisJCQlpZiAoaWRfdGFibGVbaV0uaWRWZW5kb3I9PTApIHsKKwkJCQlpZF90YWJsZVtpXSA9IHVzYl9kZXZfdGVtcFswXTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQkvKiBGaW5kIHRoZSBsYXN0IGVudHJ5IGluIGlkX3RhYmxlX2NvbWJpbmVkICovCisJCWZvciAoaT0wOyA7IGkrKykgeworCQkJaWYgKGlkX3RhYmxlX2NvbWJpbmVkW2ldLmlkVmVuZG9yPT0wKSB7CisJCQkJaWRfdGFibGVfY29tYmluZWRbaV0gPSB1c2JfZGV2X3RlbXBbMF07CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaW5mbygiVW50ZXN0ZWQgVVNCIGRldmljZSBzcGVjaWZpZWQgYXQgdGltZSBvZiBtb2R1bGUgaW5zZXJ0aW9uIik7CisJCWluZm8oIldhcm5pbmc6IFRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gd29yayIpOworCQlpbmZvKCJVc2luZyBhIG5ld2VyIGtlcm5lbCBpcyBwcmVmZXJyZWQgdG8gdGhpcyBtZXRob2QiKTsKKwkJaW5mbygiQWRkaW5nIFBhbG0gT1MgcHJvdG9jb2wgNC54IHN1cHBvcnQgZm9yIHVua25vd24gZGV2aWNlOiAweCV4LzB4JXgiLAorCQkJdmVuZG9yLCBwcm9kdWN0KTsKKwl9CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmaGFuZHNwcmluZ19kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX2hhbmRzcHJpbmdfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmY2xpZV8zXzVfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF9jbGllXzNfNV9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZjbGllXzVfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF9jbGllXzVfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ2aXNvcl9kcml2ZXIpOworCWlmIChyZXR2YWwpIAorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmY2xpZV81X2RldmljZSk7CitmYWlsZWRfY2xpZV81X3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmY2xpZV8zXzVfZGV2aWNlKTsKK2ZhaWxlZF9jbGllXzNfNV9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmhhbmRzcHJpbmdfZGV2aWNlKTsKK2ZhaWxlZF9oYW5kc3ByaW5nX3JlZ2lzdGVyOgorCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIHZvaWQgX19leGl0IHZpc29yX2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIgKCZ2aXNvcl9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmhhbmRzcHJpbmdfZGV2aWNlKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZjbGllXzNfNV9kZXZpY2UpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJmNsaWVfNV9kZXZpY2UpOworfQorCisKK21vZHVsZV9pbml0KHZpc29yX2luaXQpOworbW9kdWxlX2V4aXQodmlzb3JfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKK01PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKK21vZHVsZV9wYXJhbShzdGF0cywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhzdGF0cywgIkVuYWJsZXMgc3RhdGlzdGljcyBvciBub3QiKTsKKworbW9kdWxlX3BhcmFtKHZlbmRvciwgdXNob3J0LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModmVuZG9yLCAiVXNlciBzcGVjaWZpZWQgdmVuZG9yIElEIik7Cittb2R1bGVfcGFyYW0ocHJvZHVjdCwgdXNob3J0LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocHJvZHVjdCwgIlVzZXIgc3BlY2lmaWVkIHByb2R1Y3QgSUQiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmZhMmM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmgKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBVU0IgSGFuZFNwcmluZyBWaXNvciBkcml2ZXIKKyAqCisgKglDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDAzCisgKgkgICAgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKgkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICogCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1VTQl9TRVJJQUxfVklTT1JfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9TRVJJQUxfVklTT1JfSAorCisKKyNkZWZpbmUgSEFORFNQUklOR19WRU5ET1JfSUQJCTB4MDgyZAorI2RlZmluZSBIQU5EU1BSSU5HX1ZJU09SX0lECQkweDAxMDAKKyNkZWZpbmUgSEFORFNQUklOR19UUkVPX0lECQkweDAyMDAKKyNkZWZpbmUgSEFORFNQUklOR19UUkVPNjAwX0lECQkweDAzMDAKKworI2RlZmluZSBQQUxNX1ZFTkRPUl9JRAkJCTB4MDgzMAorI2RlZmluZSBQQUxNX001MDBfSUQJCQkweDAwMDEKKyNkZWZpbmUgUEFMTV9NNTA1X0lECQkJMHgwMDAyCisjZGVmaW5lIFBBTE1fTTUxNV9JRAkJCTB4MDAwMworI2RlZmluZSBQQUxNX0k3MDVfSUQJCQkweDAwMjAKKyNkZWZpbmUgUEFMTV9NMTI1X0lECQkJMHgwMDQwCisjZGVmaW5lIFBBTE1fTTEzMF9JRAkJCTB4MDA1MAorI2RlZmluZSBQQUxNX1RVTkdTVEVOX1RfSUQJCTB4MDA2MAorI2RlZmluZSBQQUxNX1RVTkdTVEVOX1pfSUQJCTB4MDAzMQorI2RlZmluZSBQQUxNX1pJUkUzMV9JRAkJCTB4MDA2MQorI2RlZmluZSBQQUxNX1pJUkVfSUQJCQkweDAwNzAKKyNkZWZpbmUgUEFMTV9NMTAwX0lECQkJMHgwMDgwCisKKyNkZWZpbmUgU09OWV9WRU5ET1JfSUQJCQkweDA1NEMKKyNkZWZpbmUgU09OWV9DTElFXzNfNV9JRAkJMHgwMDM4CisjZGVmaW5lIFNPTllfQ0xJRV80XzBfSUQJCTB4MDA2NgorI2RlZmluZSBTT05ZX0NMSUVfUzM2MF9JRAkJMHgwMDk1CisjZGVmaW5lIFNPTllfQ0xJRV80XzFfSUQJCTB4MDA5QQorI2RlZmluZSBTT05ZX0NMSUVfTlg2MF9JRAkJMHgwMERBCisjZGVmaW5lIFNPTllfQ0xJRV9OWjkwVl9JRAkJMHgwMEU5CisjZGVmaW5lIFNPTllfQ0xJRV9VWDUwX0lECQkweDAxNDQKKyNkZWZpbmUgU09OWV9DTElFX1RKMjVfSUQJCTB4MDE2OQorCisjZGVmaW5lIFNBTVNVTkdfVkVORE9SX0lECQkweDA0RTgKKyNkZWZpbmUgU0FNU1VOR19TQ0hfSTMzMF9JRAkJMHg4MDAxCisjZGVmaW5lIFNBTVNVTkdfU1BIX0k1MDBfSUQJCTB4NjYwMQorCisjZGVmaW5lIEdBUk1JTl9WRU5ET1JfSUQJCTB4MDkxRQorI2RlZmluZSBHQVJNSU5fSVFVRV8zNjAwX0lECQkweDAwMDQKKworI2RlZmluZSBBQ0VFQ0FfVkVORE9SX0lECQkweDQ3NjYKKyNkZWZpbmUgQUNFRUNBX01FWjEwMDBfSUQJCTB4MDAwMQorCisjZGVmaW5lIEtZT0NFUkFfVkVORE9SX0lECQkweDBDODgKKyNkZWZpbmUgS1lPQ0VSQV83MTM1X0lECQkJMHgwMDIxIAorCisjZGVmaW5lIEZPU1NJTF9WRU5ET1JfSUQJCTB4MEU2NworI2RlZmluZSBGT1NTSUxfQUJBQ1VTX0lECQkweDAwMDIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEhhbmRzcHJpbmcgVmlzb3IgVmVuZG9yIHNwZWNpZmljIHJlcXVlc3QgY29kZXMgKGJSZXF1ZXN0IHZhbHVlcykKKyAqIEEgYmlnIHRoYW5rIHlvdSB0byBIYW5kc3ByaW5nIGZvciBwcm92aWRpbmcgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbi4KKyAqIElmIGFueW9uZSB3YW50cyB0aGUgb3JpZ2luYWwgZmlsZSB3aGVyZSB0aGVzZSB2YWx1ZXMgYW5kIHN0cnVjdHVyZXMgY2FtZQorICogZnJvbSwgc2VuZCBlbWFpbCB0byA8Z3JlZ0Brcm9haC5jb20+LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWSVNPUl9SRVFVRVNUX0JZVEVTX0FWQUlMQUJMRSBhc2tzIHRoZSB2aXNvciBmb3IgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0CisgKiBhcmUgYXZhaWxhYmxlIHRvIGJlIHRyYW5zZmVycmVkIHRvIHRoZSBob3N0IGZvciB0aGUgc3BlY2lmaWVkIGVuZHBvaW50LgorICogQ3VycmVudGx5IHRoaXMgaXMgbm90IHVzZWQsIGFuZCBhbHdheXMgcmV0dXJucyAweDAwMDEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBWSVNPUl9SRVFVRVNUX0JZVEVTX0FWQUlMQUJMRQkJMHgwMQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVklTT1JfQ0xPU0VfTk9USUZJQ0FUSU9OIGlzIHNldCB0byB0aGUgZGV2aWNlIHRvIG5vdGlmeSBpdCB0aGF0IHRoZSBob3N0CisgKiBpcyBub3cgY2xvc2luZyB0aGUgcGlwZS4gQW4gZW1wdHkgcGFja2V0IGlzIHNlbnQgaW4gcmVzcG9uc2UuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgVklTT1JfQ0xPU0VfTk9USUZJQ0FUSU9OCQkweDAyCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBWSVNPUl9HRVRfQ09OTkVDVElPTl9JTkZPUk1BVElPTiBpcyBzZW50IGJ5IHRoZSBob3N0IGR1cmluZyBlbnVtZXJhdGlvbiB0bworICogZ2V0IHRoZSBlbmRwb2ludHMgdXNlZCBieSB0aGUgY29ubmVjdGlvbi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBWSVNPUl9HRVRfQ09OTkVDVElPTl9JTkZPUk1BVElPTgkweDAzCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZJU09SX0dFVF9DT05ORUNUSU9OX0lORk9STUFUSU9OIHJldHVybnMgZGF0YSBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3Qgdmlzb3JfY29ubmVjdGlvbl9pbmZvIHsKKwlfX2xlMTYJbnVtX3BvcnRzOworCXN0cnVjdCB7CisJCV9fdTgJcG9ydF9mdW5jdGlvbl9pZDsKKwkJX191OAlwb3J0OworCX0gY29ubmVjdGlvbnNbMl07Cit9OworCisKKy8qIHN0cnVjdCB2aXNvcl9jb25uZWN0aW9uX2luZm8uY29ubmVjdGlvblt4XS5wb3J0IGRlZmluZXM6ICovCisjZGVmaW5lIFZJU09SX0VORFBPSU5UXzEJCTB4MDEKKyNkZWZpbmUgVklTT1JfRU5EUE9JTlRfMgkJMHgwMgorCisvKiBzdHJ1Y3Qgdmlzb3JfY29ubmVjdGlvbl9pbmZvLmNvbm5lY3Rpb25beF0ucG9ydF9mdW5jdGlvbl9pZCBkZWZpbmVzOiAqLworI2RlZmluZSBWSVNPUl9GVU5DVElPTl9HRU5FUklDCQkweDAwCisjZGVmaW5lIFZJU09SX0ZVTkNUSU9OX0RFQlVHR0VSCQkweDAxCisjZGVmaW5lIFZJU09SX0ZVTkNUSU9OX0hPVFNZTkMJCTB4MDIKKyNkZWZpbmUgVklTT1JfRlVOQ1RJT05fQ09OU09MRQkJMHgwMworI2RlZmluZSBWSVNPUl9GVU5DVElPTl9SRU1PVEVfRklMRV9TWVMJMHgwNAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQQUxNX0dFVF9TT01FX1VOS05PV05fSU5GT1JNQVRJT04gaXMgc2VudCBieSB0aGUgaG9zdCBkdXJpbmcgZW51bWVyYXRpb24gdG8KKyAqIGdldCBzb21lIGluZm9ybWF0aW9uIGZyb20gdGhlIE0gc2VyaWVzIGRldmljZXMsIHRoYXQgaXMgY3VycmVudGx5IHVua25vd24uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUEFMTV9HRVRfRVhUX0NPTk5FQ1RJT05fSU5GT1JNQVRJT04JMHgwNAorCisvKioKKyAqIHN0cnVjdCBwYWxtX2V4dF9jb25uZWN0aW9uX2luZm8gLSByZXR1cm4gZGF0YSBmcm9tIGEgUEFMTV9HRVRfRVhUX0NPTk5FQ1RJT05fSU5GT1JNQVRJT04gcmVxdWVzdAorICogQG51bV9wb3J0czogbWF4aW11bSBudW1iZXIgb2YgZnVuY3Rpb25zL2Nvbm5lY3Rpb25zIGluIHVzZQorICogQGVuZHBvaW50X251bWJlcnNfZGlmZmVyZW50OiB3aWxsIGJlIDEgaWYgaW4gYW5kIG91dCBlbmRwb2ludHMgbnVtYmVycyBhcmUKKyAqCWRpZmZlcmVudCwgb3RoZXJ3aXNlIGl0IGlzIDAuICBJZiB2YWx1ZSBpcyAxLCB0aGVuCisgKgljb25uZWN0aW9ucy5lbmRfcG9pbnRfaW5mbyBpcyBub24temVyby4gIElmIHZhbHVlIGlzIDAsIHRoZW4KKyAqCWNvbm5lY3Rpb25zLnBvcnQgY29udGFpbnMgdGhlIGVuZHBvaW50IG51bWJlciwgd2hpY2ggaXMgdGhlIHNhbWUgZm9yIGluCisgKglhbmQgb3V0LgorICogQHBvcnRfZnVuY3Rpb25faWQ6IGNvbnRhaW5zIHRoZSBjcmVhdG9yIGlkIG9mIHRoZSBhcHBsaWNhdG9uIHRoYXQgb3BlbmVkCisgKgl0aGlzIGNvbm5lY3Rpb24uCisgKiBAcG9ydDogY29udGFpbnMgdGhlIGluL291dCBlbmRwb2ludCBudW1iZXIuICBJcyAwIGlmIGluIGFuZCBvdXQgZW5kcG9pbnQKKyAqCW51bWJlcnMgYXJlIGRpZmZlcmVudC4KKyAqIEBlbmRfcG9pbnRfaW5mbzogaGlnaCBudWJiZSBpcyBpbiBlbmRwb2ludCBhbmQgbG93IG5pYmJsZSB3aWxsIGluZGljYXRlIG91dAorICoJZW5kcG9pbnQuICBJcyAwIGlmIGluIGFuZCBvdXQgZW5kcG9pbnRzIGFyZSB0aGUgc2FtZS4KKyAqCisgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMgY3VycmVudGx5IHN1cHBvcnRlZCBpcyAyCisgKi8KK3N0cnVjdCBwYWxtX2V4dF9jb25uZWN0aW9uX2luZm8geworCV9fdTggbnVtX3BvcnRzOwkJCisJX191OCBlbmRwb2ludF9udW1iZXJzX2RpZmZlcmVudDsKKwlfX2xlMTYgcmVzZXJ2ZWQxOworCXN0cnVjdCB7CisJCV9fdTMyIHBvcnRfZnVuY3Rpb25faWQ7CisJCV9fdTggcG9ydDsKKwkJX191OCBlbmRfcG9pbnRfaW5mbzsKKwkJX19sZTE2IHJlc2VydmVkOworCX0gY29ubmVjdGlvbnNbMl07Cit9OworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmM2JjMzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKQEAgLTAsMCArMSwxNTEyIEBACisvKgorICogVVNCIENvbm5lY3RUZWNoIFdoaXRlSEVBVCBkcml2ZXIKKyAqCisgKglDb3B5cmlnaHQgKEMpIDIwMDIKKyAqCSAgICBDb25uZWN0IFRlY2ggSW5jLgorICoKKyAqCUNvcHlyaWdodCAoQykgMTk5OSAtIDIwMDEKKyAqCSAgICBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogU2VlIERvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoaXMgZHJpdmVyCisgKgorICogKDEwLzA5LzIwMDIpIFN0dWFydCBNYWNEb25hbGQgKHN0dWFydG1AY29ubmVjdHRlY2guY29tKQorICoJVXBncmFkZSB0byBmdWxsIHdvcmtpbmcgZHJpdmVyCisgKgorICogKDA1LzMwLzIwMDEpIGdraAorICoJc3dpdGNoZWQgZnJvbSB1c2luZyBzcGlubG9jayB0byBhIHNlbWFwaG9yZSwgd2hpY2ggZml4ZXMgbG90cyBvZiBwcm9ibGVtcy4KKyAqCisgKiAoMDQvMDgvMjAwMSkgZ2IKKyAqCUlkZW50aWZ5IHZlcnNpb24gb24gbW9kdWxlIGxvYWQuCisgKiAKKyAqIDIwMDFfTWFyXzE5IGdraAorICoJRml4ZWQgTU9EX0lOQyBhbmQgTU9EX0RFQyBsb2dpYywgdGhlIGFiaWxpdHkgdG8gb3BlbiBhIHBvcnQgbW9yZSAKKyAqCXRoYW4gb25jZSwgYW5kIHRoZSBnb3QgdGhlIHByb3BlciB1c2JfZGV2aWNlX2lkIHRhYmxlIGVudHJpZXMgc28KKyAqCXRoZSBkcml2ZXIgd29ya3MgYWdhaW4uCisgKgorICogKDExLzAxLzIwMDApIEFkYW0gSi4gUmljaHRlcgorICoJdXNiX2RldmljZV9pZCB0YWJsZSBzdXBwb3J0CisgKiAKKyAqICgxMC8wNS8yMDAwKSBna2gKKyAqCUZpeGVkIGJ1ZyB3aXRoIHVyYi0+ZGV2IG5vdCBiZWluZyBzZXQgcHJvcGVybHksIG5vdyB0aGF0IHRoZSB1c2IKKyAqCWNvcmUgbmVlZHMgaXQuCisgKiAKKyAqICgxMC8wMy8yMDAwKSBzbWQKKyAqCWZpcm13YXJlIGlzIGltcHJvdmVkIHRvIGd1YXJkIGFnYWluc3QgY3JhcCBzZW50IHRvIGRldmljZQorICoJZmlybXdhcmUgbm93IHJlcGxpZXMgQ01EX0ZBSUxVUkUgb24gYmFkIHRoaW5ncworICoJcmVhZF9jYWxsYmFjayBmaXggeW91IHByb3ZpZGVkIGZvciBwcml2YXRlIGluZm8gc3RydWN0CisgKgljb21tYW5kX2ZpbmlzaGVkIG5vdyBpbmRpY2F0ZXMgc3VjY2VzcyBvciBmYWlsCisgKglzZXR1cF9wb3J0IHN0cnVjdCBub3cgcGFja2VkIHRvIGF2b2lkIGdjYyBwYWRkaW5nCisgKglmaXJtd2FyZSB1c2VzIDEgYmFzZWQgcG9ydCBudW1iZXJpbmcsIGRyaXZlciBub3cgaGFuZGxlcyB0aGF0CisgKgorICogKDA5LzExLzIwMDApIGdraAorICoJUmVtb3ZlZCBERUJVRyAjaWZkZWZzIHdpdGggY2FsbCB0byB1c2Jfc2VyaWFsX2RlYnVnX2RhdGEKKyAqCisgKiAoMDcvMTkvMjAwMCkgZ2toCisgKglBZGRlZCBtb2R1bGVfaW5pdCBhbmQgbW9kdWxlX2V4aXQgZnVuY3Rpb25zIHRvIGhhbmRsZSB0aGUgZmFjdCB0aGF0IHRoaXMKKyAqCWRyaXZlciBpcyBhIGxvYWRhYmxlIG1vZHVsZSBub3cuCisgKglGaXhlZCBidWcgd2l0aCBwb3J0LT5taW5vciB0aGF0IHdhcyBmb3VuZCBieSBBbCBCb3JjaGVycworICoKKyAqICgwNy8wNC8yMDAwKSBna2gKKyAqCUFkZGVkIHN1cHBvcnQgZm9yIHBvcnQgc2V0dGluZ3MuIEJhdWQgcmF0ZSBjYW4gbm93IGJlIGNoYW5nZWQuIExpbmUgc2lnbmFscworICoJYXJlIG5vdCB0cmFuc2ZlcnJlZCB0byBhbmQgZnJvbSB0aGUgdHR5IGxheWVyIHlldCwgYnV0IHRoaW5ncyBzZWVtIHRvIGJlIAorICoJd29ya2luZyB3ZWxsIG5vdy4KKyAqCisgKiAoMDUvMDQvMjAwMCkgZ2toCisgKglGaXJzdCBjdXQgYXQgb3BlbiBhbmQgY2xvc2UgY29tbWFuZHMuIERhdGEgY2FuIGZsb3cgdGhyb3VnaCB0aGUgcG9ydHMgYXQKKyAqCWRlZmF1bHQgc3BlZWRzIG5vdy4KKyAqCisgKiAoMDMvMjYvMjAwMCkgZ2toCisgKglTcGxpdCBkcml2ZXIgdXAgaW50byBkZXZpY2Ugc3BlY2lmaWMgcGllY2VzLgorICogCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3Rlcm1iaXRzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKKyNpbmNsdWRlICJ3aGl0ZWhlYXRfZncuaCIJCS8qIGZpcm13YXJlIGZvciB0aGUgQ29ubmVjdFRlY2ggV2hpdGVIRUFUIGRldmljZSAqLworI2luY2x1ZGUgIndoaXRlaGVhdC5oIgkJCS8qIFdoaXRlSEVBVCBzcGVjaWZpYyBjb21tYW5kcyAqLworCitzdGF0aWMgaW50IGRlYnVnOworCisjaWZuZGVmIENNU1BBUgorI2RlZmluZSBDTVNQQVIgMAorI2VuZGlmCisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYyLjAiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+LCBTdHVhcnQgTWFjRG9uYWxkIDxzdHVhcnRtQGNvbm5lY3R0ZWNoLmNvbT4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgQ29ubmVjdFRlY2ggV2hpdGVIRUFUIGRyaXZlciIKKworI2RlZmluZSBDT05ORUNUX1RFQ0hfVkVORE9SX0lECQkweDA3MTAKKyNkZWZpbmUgQ09OTkVDVF9URUNIX0ZBS0VfV0hJVEVfSEVBVF9JRAkweDAwMDEKKyNkZWZpbmUgQ09OTkVDVF9URUNIX1dISVRFX0hFQVRfSUQJMHg4MDAxCisKKy8qCisgICBJRCB0YWJsZXMgZm9yIHdoaXRlaGVhdCBhcmUgdW51c3VhbCwgYmVjYXVzZSB3ZSB3YW50IHRvIGRpZmZlcmVudAorICAgdGhpbmdzIGZvciBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIGRldmljZS4gIEV2ZW50dWFsbHksIHRoaXMKKyAgIHdpbGwgYmUgZG9hYmxlIGZyb20gYSBzaW5nbGUgdGFibGUuICBCdXQsIGZvciBub3csIHdlIGRlZmluZSB0d28KKyAgIHNlcGFyYXRlIElEIHRhYmxlcywgYW5kIHRoZW4gYSB0aGlyZCB0YWJsZSB0aGF0IGNvbWJpbmVzIHRoZW0KKyAgIGp1c3QgZm9yIHRoZSBwdXJwb3NlIG9mIGV4cG9ydGluZyB0aGUgYXV0b2xvYWRpbmcgaW5mb3JtYXRpb24uCisqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX3N0ZCBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoQ09OTkVDVF9URUNIX1ZFTkRPUl9JRCwgQ09OTkVDVF9URUNIX1dISVRFX0hFQVRfSUQpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9wcmVyZW51bWVyYXRpb24gW10gPSB7CisJeyBVU0JfREVWSUNFKENPTk5FQ1RfVEVDSF9WRU5ET1JfSUQsIENPTk5FQ1RfVEVDSF9GQUtFX1dISVRFX0hFQVRfSUQpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jb21iaW5lZCBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoQ09OTkVDVF9URUNIX1ZFTkRPUl9JRCwgQ09OTkVDVF9URUNIX1dISVRFX0hFQVRfSUQpIH0sCisJeyBVU0JfREVWSUNFKENPTk5FQ1RfVEVDSF9WRU5ET1JfSUQsIENPTk5FQ1RfVEVDSF9GQUtFX1dISVRFX0hFQVRfSUQpIH0sCisJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgaWRfdGFibGVfY29tYmluZWQpOworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgd2hpdGVoZWF0X2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkid2hpdGVoZWF0IiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlX2NvbWJpbmVkLAorfTsKKworLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgdGhlIENvbm5lY3QgVGVjaCBXaGl0ZUhFQVQgcHJlcmVudW1lcmF0aW9uIGRldmljZSAqLworc3RhdGljIGludCAgd2hpdGVoZWF0X2Zpcm13YXJlX2Rvd25sb2FkCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIGludCAgd2hpdGVoZWF0X2Zpcm13YXJlX2F0dGFjaAkoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CisKKy8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSBDb25uZWN0IFRlY2ggV2hpdGVIRUFUIHNlcmlhbCBjb252ZXJ0ZXIgKi8KK3N0YXRpYyBpbnQgIHdoaXRlaGVhdF9hdHRhY2gJCShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKK3N0YXRpYyB2b2lkIHdoaXRlaGVhdF9zaHV0ZG93bgkJKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgd2hpdGVoZWF0X29wZW4JCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfY2xvc2UJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50ICB3aGl0ZWhlYXRfd3JpdGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CitzdGF0aWMgaW50ICB3aGl0ZWhlYXRfd3JpdGVfcm9vbQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50ICB3aGl0ZWhlYXRfaW9jdGwJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyB2b2lkIHdoaXRlaGVhdF9zZXRfdGVybWlvcwkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IHRlcm1pb3MgKiBvbGQpOworc3RhdGljIGludCAgd2hpdGVoZWF0X3Rpb2NtZ2V0CQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpOworc3RhdGljIGludCAgd2hpdGVoZWF0X3Rpb2Ntc2V0CQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfYnJlYWtfY3RsCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlKTsKK3N0YXRpYyBpbnQgIHdoaXRlaGVhdF9jaGFyc19pbl9idWZmZXIJKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgd2hpdGVoZWF0X3Rocm90dGxlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfdW50aHJvdHRsZQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfcmVhZF9jYWxsYmFjawkoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfd3JpdGVfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZGV2aWNlX3R5cGUgd2hpdGVoZWF0X2Zha2VfZGV2aWNlID0geworCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkJIkNvbm5lY3QgVGVjaCAtIFdoaXRlSEVBVCAtIChwcmVyZW51bWVyYXRpb24pIiwKKwkuc2hvcnRfbmFtZSA9CQkid2hpdGVoZWF0bm9maXJtIiwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGVfcHJlcmVudW1lcmF0aW9uLAorCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4gPQkJTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfb3V0ID0JCU5VTV9ET05UX0NBUkUsCisJLm51bV9wb3J0cyA9CQkxLAorCS5wcm9iZSA9CQl3aGl0ZWhlYXRfZmlybXdhcmVfZG93bmxvYWQsCisJLmF0dGFjaCA9CQl3aGl0ZWhlYXRfZmlybXdhcmVfYXR0YWNoLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RldmljZV90eXBlIHdoaXRlaGVhdF9kZXZpY2UgPSB7CisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS5uYW1lID0JCQkiQ29ubmVjdCBUZWNoIC0gV2hpdGVIRUFUIiwKKwkuc2hvcnRfbmFtZSA9CQkid2hpdGVoZWF0IiwKKwkuaWRfdGFibGUgPQkJaWRfdGFibGVfc3RkLAorCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4gPQkJTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfb3V0ID0JCU5VTV9ET05UX0NBUkUsCisJLm51bV9wb3J0cyA9CQk0LAorCS5hdHRhY2ggPQkJd2hpdGVoZWF0X2F0dGFjaCwKKwkuc2h1dGRvd24gPQkJd2hpdGVoZWF0X3NodXRkb3duLAorCS5vcGVuID0JCQl3aGl0ZWhlYXRfb3BlbiwKKwkuY2xvc2UgPQkJd2hpdGVoZWF0X2Nsb3NlLAorCS53cml0ZSA9CQl3aGl0ZWhlYXRfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJd2hpdGVoZWF0X3dyaXRlX3Jvb20sCisJLmlvY3RsID0JCXdoaXRlaGVhdF9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPQkJd2hpdGVoZWF0X3NldF90ZXJtaW9zLAorCS5icmVha19jdGwgPQkJd2hpdGVoZWF0X2JyZWFrX2N0bCwKKwkudGlvY21nZXQgPQkJd2hpdGVoZWF0X3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9CQl3aGl0ZWhlYXRfdGlvY21zZXQsCisJLmNoYXJzX2luX2J1ZmZlciA9CXdoaXRlaGVhdF9jaGFyc19pbl9idWZmZXIsCisJLnRocm90dGxlID0JCXdoaXRlaGVhdF90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQl3aGl0ZWhlYXRfdW50aHJvdHRsZSwKKwkucmVhZF9idWxrX2NhbGxiYWNrID0Jd2hpdGVoZWF0X3JlYWRfY2FsbGJhY2ssCisJLndyaXRlX2J1bGtfY2FsbGJhY2sgPQl3aGl0ZWhlYXRfd3JpdGVfY2FsbGJhY2ssCit9OworCisKK3N0cnVjdCB3aGl0ZWhlYXRfY29tbWFuZF9wcml2YXRlIHsKKwlzcGlubG9ja190CQlsb2NrOworCV9fdTgJCQlwb3J0X3J1bm5pbmc7CisJX191OAkJCWNvbW1hbmRfZmluaXNoZWQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdF9jb21tYW5kOwkvKiBmb3IgaGFuZGxpbmcgc2xlZXBpbmcgd2hpbGUgd2FpdGluZyBmb3IgYSBjb21tYW5kIHRvIGZpbmlzaCAqLworCV9fdTgJCQlyZXN1bHRfYnVmZmVyWzY0XTsKK307CisKKworI2RlZmluZSBUSFJPVFRMRUQJCTB4MDEKKyNkZWZpbmUgQUNUVUFMTFlfVEhST1RUTEVECTB4MDIKKworc3RhdGljIGludCB1cmJfcG9vbF9zaXplID0gODsKKworc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCB1cmIJCSp1cmI7Cit9OworCitzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgeworCXNwaW5sb2NrX3QJCWxvY2s7CisJX191OAkJCWZsYWdzOworCV9fdTgJCQltY3I7CisJc3RydWN0IGxpc3RfaGVhZAlyeF91cmJzX2ZyZWU7CisJc3RydWN0IGxpc3RfaGVhZAlyeF91cmJzX3N1Ym1pdHRlZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJ4X3VyYl9xOworCXN0cnVjdCB3b3JrX3N0cnVjdAlyeF93b3JrOworCXN0cnVjdCBsaXN0X2hlYWQJdHhfdXJic19mcmVlOworCXN0cnVjdCBsaXN0X2hlYWQJdHhfdXJic19zdWJtaXR0ZWQ7Cit9OworCisKKy8qIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgc3RhcnRfY29tbWFuZF9wb3J0KHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIHZvaWQgc3RvcF9jb21tYW5kX3BvcnQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CitzdGF0aWMgdm9pZCBjb21tYW5kX3BvcnRfd3JpdGVfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitzdGF0aWMgdm9pZCBjb21tYW5kX3BvcnRfcmVhZF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworc3RhdGljIGludCBzdGFydF9wb3J0X3JlYWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCAqdXJiX3RvX3dyYXAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X2ZpcnN0KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOworc3RhdGljIHZvaWQgcnhfZGF0YV9zb2Z0aW50KHZvaWQgKnByaXZhdGUpOworCitzdGF0aWMgaW50IGZpcm1fc2VuZF9jb21tYW5kKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTggY29tbWFuZCwgX191OCAqZGF0YSwgX191OCBkYXRhc2l6ZSk7CitzdGF0aWMgaW50IGZpcm1fb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgZmlybV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgZmlybV9zZXR1cF9wb3J0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCBmaXJtX3NldF9ydHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgX191OCBvbm9mZik7CitzdGF0aWMgaW50IGZpcm1fc2V0X2R0cihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3U4IG9ub2ZmKTsKK3N0YXRpYyBpbnQgZmlybV9zZXRfYnJlYWsoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgX191OCBvbm9mZik7CitzdGF0aWMgaW50IGZpcm1fcHVyZ2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgX191OCByeHR4KTsKK3N0YXRpYyBpbnQgZmlybV9nZXRfZHRyX3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyBpbnQgZmlybV9yZXBvcnRfdHhfZG9uZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKKworCisjZGVmaW5lIENPTU1BTkRfUE9SVAkJNAorI2RlZmluZSBDT01NQU5EX1RJTUVPVVQJCSgyKkhaKQkvKiAyIHNlY29uZCB0aW1lb3V0IGZvciBhIGNvbW1hbmQgKi8KKyNkZWZpbmUJQ09NTUFORF9USU1FT1VUX01TCTIwMDAKKyNkZWZpbmUgQ0xPU0lOR19ERUxBWQkJKDMwICogSFopCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb25uZWN0IFRlY2gncyBXaGl0ZSBIZWF0IHByZXJlbnVtZXJhdGlvbiBkcml2ZXIgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHN0ZXBzIHRvIGRvd25sb2FkIHRoZSBmaXJtd2FyZSB0byB0aGUgV2hpdGVIRUFUIGRldmljZToKKyAtIGhvbGQgdGhlIHJlc2V0IChieSB3cml0aW5nIHRvIHRoZSByZXNldCBiaXQgb2YgdGhlIENQVUNTIHJlZ2lzdGVyKQorIC0gZG93bmxvYWQgdGhlIFZFTkRfQVguSEVYIGZpbGUgdG8gdGhlIGNoaXAgdXNpbmcgVkVORE9SX1JFUVVFU1QtQU5DSE9SX0xPQUQKKyAtIHJlbGVhc2UgdGhlIHJlc2V0IChieSB3cml0aW5nIHRvIHRoZSBDUFVDUyByZWdpc3RlcikKKyAtIGRvd25sb2FkIHRoZSBXSC5IRVggZmlsZSBmb3IgYWxsIGFkZHJlc3NlcyBncmVhdGVyIHRoYW4gMHgxYjNmIHVzaW5nCisgICBWRU5ET1JfUkVRVUVTVC1BTkNIT1JfRVhURVJOQUxfUkFNX0xPQUQKKyAtIGhvbGQgdGhlIHJlc2V0CisgLSBkb3dubG9hZCB0aGUgV0guSEVYIGZpbGUgZm9yIGFsbCBhZGRyZXNzZXMgbGVzcyB0aGFuIDB4MWI0MCB1c2luZworICAgVkVORE9SX1JFUVVFU1RfQU5DSE9SX0xPQUQKKyAtIHJlbGVhc2UgdGhlIHJlc2V0CisgLSBkZXZpY2UgcmVudW1lcmF0ZWQgaXRzZWxmIGFuZCBjb21lcyB1cCBhcyBuZXcgZGV2aWNlIGlkIHdpdGggYWxsCisgICBmaXJtd2FyZSBkb3dubG9hZCBjb21wbGV0ZWQuCisqLworc3RhdGljIGludCB3aGl0ZWhlYXRfZmlybXdhcmVfZG93bmxvYWQgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmVzcG9uc2U7CisJY29uc3Qgc3RydWN0IHdoaXRlaGVhdF9oZXhfcmVjb3JkICpyZWNvcmQ7CisJCisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisJCisJcmVzcG9uc2UgPSBlenVzYl9zZXRfcmVzZXQgKHNlcmlhbCwgMSk7CisKKwlyZWNvcmQgPSAmd2hpdGVoZWF0X2xvYWRlclswXTsKKwl3aGlsZSAocmVjb3JkLT5hZGRyZXNzICE9IDB4ZmZmZikgeworCQlyZXNwb25zZSA9IGV6dXNiX3dyaXRlbWVtb3J5IChzZXJpYWwsIHJlY29yZC0+YWRkcmVzcywgCisJCQkJKHVuc2lnbmVkIGNoYXIgKilyZWNvcmQtPmRhdGEsIHJlY29yZC0+ZGF0YV9zaXplLCAweGEwKTsKKwkJaWYgKHJlc3BvbnNlIDwgMCkgeworCQkJZXJyKCIlcyAtIGV6dXNiX3dyaXRlbWVtb3J5IGZhaWxlZCBmb3IgbG9hZGVyICglZCAlMDRYICVwICVkKSIsCisJCQkJX19GVU5DVElPTl9fLCByZXNwb25zZSwgcmVjb3JkLT5hZGRyZXNzLCByZWNvcmQtPmRhdGEsIHJlY29yZC0+ZGF0YV9zaXplKTsKKwkJCWJyZWFrOworCQl9CisJCSsrcmVjb3JkOworCX0KKworCXJlc3BvbnNlID0gZXp1c2Jfc2V0X3Jlc2V0IChzZXJpYWwsIDApOworCisJcmVjb3JkID0gJndoaXRlaGVhdF9maXJtd2FyZVswXTsKKwl3aGlsZSAocmVjb3JkLT5hZGRyZXNzIDwgMHgxYjQwKSB7CisJCSsrcmVjb3JkOworCX0KKwl3aGlsZSAocmVjb3JkLT5hZGRyZXNzICE9IDB4ZmZmZikgeworCQlyZXNwb25zZSA9IGV6dXNiX3dyaXRlbWVtb3J5IChzZXJpYWwsIHJlY29yZC0+YWRkcmVzcywgCisJCQkJKHVuc2lnbmVkIGNoYXIgKilyZWNvcmQtPmRhdGEsIHJlY29yZC0+ZGF0YV9zaXplLCAweGEzKTsKKwkJaWYgKHJlc3BvbnNlIDwgMCkgeworCQkJZXJyKCIlcyAtIGV6dXNiX3dyaXRlbWVtb3J5IGZhaWxlZCBmb3IgZmlyc3QgZmlybXdhcmUgc3RlcCAoJWQgJTA0WCAlcCAlZCkiLCAKKwkJCQlfX0ZVTkNUSU9OX18sIHJlc3BvbnNlLCByZWNvcmQtPmFkZHJlc3MsIHJlY29yZC0+ZGF0YSwgcmVjb3JkLT5kYXRhX3NpemUpOworCQkJYnJlYWs7CisJCX0KKwkJKytyZWNvcmQ7CisJfQorCQorCXJlc3BvbnNlID0gZXp1c2Jfc2V0X3Jlc2V0IChzZXJpYWwsIDEpOworCisJcmVjb3JkID0gJndoaXRlaGVhdF9maXJtd2FyZVswXTsKKwl3aGlsZSAocmVjb3JkLT5hZGRyZXNzIDwgMHgxYjQwKSB7CisJCXJlc3BvbnNlID0gZXp1c2Jfd3JpdGVtZW1vcnkgKHNlcmlhbCwgcmVjb3JkLT5hZGRyZXNzLCAKKwkJCQkodW5zaWduZWQgY2hhciAqKXJlY29yZC0+ZGF0YSwgcmVjb3JkLT5kYXRhX3NpemUsIDB4YTApOworCQlpZiAocmVzcG9uc2UgPCAwKSB7CisJCQllcnIoIiVzIC0gZXp1c2Jfd3JpdGVtZW1vcnkgZmFpbGVkIGZvciBzZWNvbmQgZmlybXdhcmUgc3RlcCAoJWQgJTA0WCAlcCAlZCkiLCAKKwkJCQlfX0ZVTkNUSU9OX18sIHJlc3BvbnNlLCByZWNvcmQtPmFkZHJlc3MsIHJlY29yZC0+ZGF0YSwgcmVjb3JkLT5kYXRhX3NpemUpOworCQkJYnJlYWs7CisJCX0KKwkJKytyZWNvcmQ7CisJfQorCisJcmVzcG9uc2UgPSBlenVzYl9zZXRfcmVzZXQgKHNlcmlhbCwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHdoaXRlaGVhdF9maXJtd2FyZV9hdHRhY2ggKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJLyogV2Ugd2FudCB0aGlzIGRldmljZSB0byBmYWlsIHRvIGhhdmUgYSBkcml2ZXIgYXNzaWduZWQgdG8gaXQgKi8KKwlyZXR1cm4gMTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvbm5lY3QgVGVjaCdzIFdoaXRlIEhlYXQgc2VyaWFsIGRyaXZlciBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgd2hpdGVoZWF0X2F0dGFjaCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpjb21tYW5kX3BvcnQ7CisJc3RydWN0IHdoaXRlaGVhdF9jb21tYW5kX3ByaXZhdGUgKmNvbW1hbmRfaW5mbzsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSAqaW5mbzsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X2h3X2luZm8gKmh3X2luZm87CisJaW50IHBpcGU7CisJaW50IHJldDsKKwlpbnQgYWxlbjsKKwlfX3U4ICpjb21tYW5kOworCV9fdTggKnJlc3VsdDsKKwlpbnQgaTsKKwlpbnQgajsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGJ1Zl9zaXplOworCXN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAgKndyYXA7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCisJY29tbWFuZF9wb3J0ID0gc2VyaWFsLT5wb3J0W0NPTU1BTkRfUE9SVF07CisKKwlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlIChzZXJpYWwtPmRldiwgY29tbWFuZF9wb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpOworCWNvbW1hbmQgPSBrbWFsbG9jKDIsIEdGUF9LRVJORUwpOworCWlmICghY29tbWFuZCkKKwkJZ290byBub19jb21tYW5kX2J1ZmZlcjsKKwljb21tYW5kWzBdID0gV0hJVEVIRUFUX0dFVF9IV19JTkZPOworCWNvbW1hbmRbMV0gPSAwOworCQorCXJlc3VsdCA9IGttYWxsb2Moc2l6ZW9mKCpod19pbmZvKSArIDEsIEdGUF9LRVJORUwpOworCWlmICghcmVzdWx0KQorCQlnb3RvIG5vX3Jlc3VsdF9idWZmZXI7CisJLyoKKwkgKiBXaGVuIHRoZSBtb2R1bGUgaXMgcmVsb2FkZWQgdGhlIGZpcm13YXJlIGlzIHN0aWxsIHRoZXJlIGFuZAorCSAqIHRoZSBlbmRwb2ludHMgYXJlIHN0aWxsIGluIHRoZSB1c2IgY29yZSB1bmNoYW5nZWQuIFRoaXMgaXMgdGhlCisgICAgICAgICAqIHVubGlua2luZyBidWcgaW4gZGlzZ3Vpc2UuIFNhbWUgZm9yIHRoZSBjYWxsIGJlbG93LgorICAgICAgICAgKi8KKwl1c2JfY2xlYXJfaGFsdChzZXJpYWwtPmRldiwgcGlwZSk7CisJcmV0ID0gdXNiX2J1bGtfbXNnIChzZXJpYWwtPmRldiwgcGlwZSwgY29tbWFuZCwgMiwgJmFsZW4sIENPTU1BTkRfVElNRU9VVF9NUyk7CisJaWYgKHJldCkgeworCQllcnIoIiVzOiBDb3VsZG4ndCBzZW5kIGNvbW1hbmQgWyVkXSIsIHNlcmlhbC0+dHlwZS0+bmFtZSwgcmV0KTsKKwkJZ290byBub19maXJtd2FyZTsKKwl9IGVsc2UgaWYgKGFsZW4gIT0gc2l6ZW9mKGNvbW1hbmQpKSB7CisJCWVycigiJXM6IFNlbmQgY29tbWFuZCBpbmNvbXBsZXRlIFslZF0iLCBzZXJpYWwtPnR5cGUtPm5hbWUsIGFsZW4pOworCQlnb3RvIG5vX2Zpcm13YXJlOworCX0KKworCXBpcGUgPSB1c2JfcmN2YnVsa3BpcGUgKHNlcmlhbC0+ZGV2LCBjb21tYW5kX3BvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKTsKKwkvKiBTZWUgdGhlIGNvbW1lbnQgb24gdGhlIHVzYl9jbGVhcl9oYWx0KCkgYWJvdmUgKi8KKwl1c2JfY2xlYXJfaGFsdChzZXJpYWwtPmRldiwgcGlwZSk7CisJcmV0ID0gdXNiX2J1bGtfbXNnIChzZXJpYWwtPmRldiwgcGlwZSwgcmVzdWx0LCBzaXplb2YoKmh3X2luZm8pICsgMSwgJmFsZW4sIENPTU1BTkRfVElNRU9VVF9NUyk7CisJaWYgKHJldCkgeworCQllcnIoIiVzOiBDb3VsZG4ndCBnZXQgcmVzdWx0cyBbJWRdIiwgc2VyaWFsLT50eXBlLT5uYW1lLCByZXQpOworCQlnb3RvIG5vX2Zpcm13YXJlOworCX0gZWxzZSBpZiAoYWxlbiAhPSBzaXplb2YocmVzdWx0KSkgeworCQllcnIoIiVzOiBHZXQgcmVzdWx0cyBpbmNvbXBsZXRlIFslZF0iLCBzZXJpYWwtPnR5cGUtPm5hbWUsIGFsZW4pOworCQlnb3RvIG5vX2Zpcm13YXJlOworCX0gZWxzZSBpZiAocmVzdWx0WzBdICE9IGNvbW1hbmRbMF0pIHsKKwkJZXJyKCIlczogQ29tbWFuZCBmYWlsZWQgWyVkXSIsIHNlcmlhbC0+dHlwZS0+bmFtZSwgcmVzdWx0WzBdKTsKKwkJZ290byBub19maXJtd2FyZTsKKwl9CisKKwlod19pbmZvID0gKHN0cnVjdCB3aGl0ZWhlYXRfaHdfaW5mbyAqKSZyZXN1bHRbMV07CisKKwlpbmZvKCIlczogRHJpdmVyICVzOiBGaXJtd2FyZSB2JWQuJTAyZCIsIHNlcmlhbC0+dHlwZS0+bmFtZSwKKwkgICAgIERSSVZFUl9WRVJTSU9OLCBod19pbmZvLT5zd19tYWpvcl9yZXYsIGh3X2luZm8tPnN3X21pbm9yX3Jldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7IGkrKykgeworCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCisJCWluZm8gPSAoc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICopa21hbGxvYyhzaXplb2Yoc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChpbmZvID09IE5VTEwpIHsKKwkJCWVycigiJXM6IE91dCBvZiBtZW1vcnkgZm9yIHBvcnQgc3RydWN0dXJlc1xuIiwgc2VyaWFsLT50eXBlLT5uYW1lKTsKKwkJCWdvdG8gbm9fcHJpdmF0ZTsKKwkJfQorCisJCXNwaW5fbG9ja19pbml0KCZpbmZvLT5sb2NrKTsKKwkJaW5mby0+ZmxhZ3MgPSAwOworCQlpbmZvLT5tY3IgPSAwOworCQlJTklUX1dPUksoJmluZm8tPnJ4X3dvcmssIHJ4X2RhdGFfc29mdGludCwgcG9ydCk7CisKKwkJSU5JVF9MSVNUX0hFQUQoJmluZm8tPnJ4X3VyYnNfZnJlZSk7CisJCUlOSVRfTElTVF9IRUFEKCZpbmZvLT5yeF91cmJzX3N1Ym1pdHRlZCk7CisJCUlOSVRfTElTVF9IRUFEKCZpbmZvLT5yeF91cmJfcSk7CisJCUlOSVRfTElTVF9IRUFEKCZpbmZvLT50eF91cmJzX2ZyZWUpOworCQlJTklUX0xJU1RfSEVBRCgmaW5mby0+dHhfdXJic19zdWJtaXR0ZWQpOworCisJCWZvciAoaiA9IDA7IGogPCB1cmJfcG9vbF9zaXplOyBqKyspIHsKKwkJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXVyYikgeworCQkJCWVycigiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZSIpOworCQkJCWdvdG8gbm9fcnhfdXJiOworCQkJfQorCQkJYnVmX3NpemUgPSBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyhidWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CisJCQkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSB1cmIgYnVmZmVyIik7CisJCQkJZ290byBub19yeF9idWY7CisJCQl9CisJCQl3cmFwID0ga21hbGxvYyhzaXplb2YoKndyYXApLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghd3JhcCkgeworCQkJCWVycigiQ291bGRuJ3QgYWxsb2NhdGUgdXJiIHdyYXBwZXIiKTsKKwkJCQlnb3RvIG5vX3J4X3dyYXA7CisJCQl9CisJCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHNlcmlhbC0+ZGV2LAorCQkJCQl1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJCQlwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLCBidWZfc2l6ZSwKKwkJCQkJd2hpdGVoZWF0X3JlYWRfY2FsbGJhY2ssIHBvcnQpOworCQkJd3JhcC0+dXJiID0gdXJiOworCQkJbGlzdF9hZGQoJndyYXAtPmxpc3QsICZpbmZvLT5yeF91cmJzX2ZyZWUpOworCisJCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQkJaWYgKCF1cmIpIHsKKwkJCQllcnIoIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKKwkJCQlnb3RvIG5vX3R4X3VyYjsKKwkJCX0KKwkJCWJ1Zl9zaXplID0gcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBrbWFsbG9jKGJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKKwkJCQllcnIoIkNvdWxkbid0IGFsbG9jYXRlIHVyYiBidWZmZXIiKTsKKwkJCQlnb3RvIG5vX3R4X2J1ZjsKKwkJCX0KKwkJCXdyYXAgPSBrbWFsbG9jKHNpemVvZigqd3JhcCksIEdGUF9LRVJORUwpOworCQkJaWYgKCF3cmFwKSB7CisJCQkJZXJyKCJDb3VsZG4ndCBhbGxvY2F0ZSB1cmIgd3JhcHBlciIpOworCQkJCWdvdG8gbm9fdHhfd3JhcDsKKwkJCX0KKwkJCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgc2VyaWFsLT5kZXYsCisJCQkJCXVzYl9zbmRidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCQkJCXBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLCBidWZfc2l6ZSwKKwkJCQkJd2hpdGVoZWF0X3dyaXRlX2NhbGxiYWNrLCBwb3J0KTsKKwkJCXdyYXAtPnVyYiA9IHVyYjsKKwkJCWxpc3RfYWRkKCZ3cmFwLT5saXN0LCAmaW5mby0+dHhfdXJic19mcmVlKTsKKwkJfQorCisJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBpbmZvKTsKKwl9CisKKwljb21tYW5kX2luZm8gPSAoc3RydWN0IHdoaXRlaGVhdF9jb21tYW5kX3ByaXZhdGUgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgd2hpdGVoZWF0X2NvbW1hbmRfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmIChjb21tYW5kX2luZm8gPT0gTlVMTCkgeworCQllcnIoIiVzOiBPdXQgb2YgbWVtb3J5IGZvciBwb3J0IHN0cnVjdHVyZXNcbiIsIHNlcmlhbC0+dHlwZS0+bmFtZSk7CisJCWdvdG8gbm9fY29tbWFuZF9wcml2YXRlOworCX0KKworCXNwaW5fbG9ja19pbml0KCZjb21tYW5kX2luZm8tPmxvY2spOworCWNvbW1hbmRfaW5mby0+cG9ydF9ydW5uaW5nID0gMDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjb21tYW5kX2luZm8tPndhaXRfY29tbWFuZCk7CisJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKGNvbW1hbmRfcG9ydCwgY29tbWFuZF9pbmZvKTsKKwljb21tYW5kX3BvcnQtPndyaXRlX3VyYi0+Y29tcGxldGUgPSBjb21tYW5kX3BvcnRfd3JpdGVfY2FsbGJhY2s7CisJY29tbWFuZF9wb3J0LT5yZWFkX3VyYi0+Y29tcGxldGUgPSBjb21tYW5kX3BvcnRfcmVhZF9jYWxsYmFjazsKKwlrZnJlZShyZXN1bHQpOworCWtmcmVlKGNvbW1hbmQpOworCisJcmV0dXJuIDA7CisKK25vX2Zpcm13YXJlOgorCS8qIEZpcm13YXJlIGxpa2VseSBub3QgcnVubmluZyAqLworCWVycigiJXM6IFVuYWJsZSB0byByZXRyaWV2ZSBmaXJtd2FyZSB2ZXJzaW9uLCB0cnkgcmVwbHVnZ2luZ1xuIiwgc2VyaWFsLT50eXBlLT5uYW1lKTsKKwllcnIoIiVzOiBJZiB0aGUgZmlybXdhcmUgaXMgbm90IHJ1bm5pbmcgKHN0YXR1cyBsZWQgbm90IGJsaW5raW5nKVxuIiwgc2VyaWFsLT50eXBlLT5uYW1lKTsKKwllcnIoIiVzOiBwbGVhc2UgY29udGFjdCBzdXBwb3J0QGNvbm5lY3R0ZWNoLmNvbVxuIiwgc2VyaWFsLT50eXBlLT5uYW1lKTsKKwlyZXR1cm4gLUVOT0RFVjsKKworbm9fY29tbWFuZF9wcml2YXRlOgorCWZvciAoaSA9IHNlcmlhbC0+bnVtX3BvcnRzIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkJZm9yIChqID0gdXJiX3Bvb2xfc2l6ZSAtIDE7IGogPj0gMDsgai0tKSB7CisJCQl0bXAgPSBsaXN0X2ZpcnN0KCZpbmZvLT50eF91cmJzX2ZyZWUpOworCQkJbGlzdF9kZWwodG1wKTsKKwkJCXdyYXAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCwgbGlzdCk7CisJCQl1cmIgPSB3cmFwLT51cmI7CisJCQlrZnJlZSh3cmFwKTsKK25vX3R4X3dyYXA6CisJCQlrZnJlZSh1cmItPnRyYW5zZmVyX2J1ZmZlcik7Citub190eF9idWY6CisJCQl1c2JfZnJlZV91cmIodXJiKTsKK25vX3R4X3VyYjoKKwkJCXRtcCA9IGxpc3RfZmlyc3QoJmluZm8tPnJ4X3VyYnNfZnJlZSk7CisJCQlsaXN0X2RlbCh0bXApOworCQkJd3JhcCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwLCBsaXN0KTsKKwkJCXVyYiA9IHdyYXAtPnVyYjsKKwkJCWtmcmVlKHdyYXApOworbm9fcnhfd3JhcDoKKwkJCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKK25vX3J4X2J1ZjoKKwkJCXVzYl9mcmVlX3VyYih1cmIpOworbm9fcnhfdXJiOgorCQkJOworCQl9CisJCWtmcmVlKGluZm8pOworbm9fcHJpdmF0ZToKKwkJOworCX0KKwlrZnJlZShyZXN1bHQpOworbm9fcmVzdWx0X2J1ZmZlcjoKKwlrZnJlZShjb21tYW5kKTsKK25vX2NvbW1hbmRfYnVmZmVyOgorCXJldHVybiAtRU5PTUVNOworfQorCisKK3N0YXRpYyB2b2lkIHdoaXRlaGVhdF9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpjb21tYW5kX3BvcnQ7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm87CisJc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCAqd3JhcDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDI7CisJaW50IGk7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCS8qIGZyZWUgdXAgb3VyIHByaXZhdGUgZGF0YSBmb3Igb3VyIGNvbW1hbmQgcG9ydCAqLworCWNvbW1hbmRfcG9ydCA9IHNlcmlhbC0+cG9ydFtDT01NQU5EX1BPUlRdOworCWtmcmVlICh1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoY29tbWFuZF9wb3J0KSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7IGkrKykgeworCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQlpbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCQlsaXN0X2Zvcl9lYWNoX3NhZmUodG1wLCB0bXAyLCAmaW5mby0+cnhfdXJic19mcmVlKSB7CisJCQlsaXN0X2RlbCh0bXApOworCQkJd3JhcCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwLCBsaXN0KTsKKwkJCXVyYiA9IHdyYXAtPnVyYjsKKwkJCWtmcmVlKHdyYXApOworCQkJa2ZyZWUodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCX0KKwkJbGlzdF9mb3JfZWFjaF9zYWZlKHRtcCwgdG1wMiwgJmluZm8tPnR4X3VyYnNfZnJlZSkgeworCQkJbGlzdF9kZWwodG1wKTsKKwkJCXdyYXAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCwgbGlzdCk7CisJCQl1cmIgPSB3cmFwLT51cmI7CisJCQlrZnJlZSh3cmFwKTsKKwkJCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwkJCXVzYl9mcmVlX3VyYih1cmIpOworCQl9CisJCWtmcmVlKGluZm8pOworCX0KKworCXJldHVybjsKK30KKworCitzdGF0aWMgaW50IHdoaXRlaGVhdF9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQJCXJldHZhbCA9IDA7CisJc3RydWN0IHRlcm1pb3MJb2xkX3Rlcm07CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXJldHZhbCA9IHN0YXJ0X2NvbW1hbmRfcG9ydChwb3J0LT5zZXJpYWwpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXhpdDsKKworCWlmIChwb3J0LT50dHkpCisJCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAxOworCisJLyogc2VuZCBhbiBvcGVuIHBvcnQgY29tbWFuZCAqLworCXJldHZhbCA9IGZpcm1fb3Blbihwb3J0KTsKKwlpZiAocmV0dmFsKSB7CisJCXN0b3BfY29tbWFuZF9wb3J0KHBvcnQtPnNlcmlhbCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXR2YWwgPSBmaXJtX3B1cmdlKHBvcnQsIFdISVRFSEVBVF9QVVJHRV9SWCB8IFdISVRFSEVBVF9QVVJHRV9UWCk7CisJaWYgKHJldHZhbCkgeworCQlmaXJtX2Nsb3NlKHBvcnQpOworCQlzdG9wX2NvbW1hbmRfcG9ydChwb3J0LT5zZXJpYWwpOworCQlnb3RvIGV4aXQ7CisJfQorCisJb2xkX3Rlcm0uY19jZmxhZyA9IH5wb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJb2xkX3Rlcm0uY19pZmxhZyA9IH5wb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWc7CisJd2hpdGVoZWF0X3NldF90ZXJtaW9zKHBvcnQsICZvbGRfdGVybSk7CisKKwkvKiBXb3JrIGFyb3VuZCBIQ0QgYnVncyAqLworCXVzYl9jbGVhcl9oYWx0KHBvcnQtPnNlcmlhbC0+ZGV2LCBwb3J0LT5yZWFkX3VyYi0+cGlwZSk7CisJdXNiX2NsZWFyX2hhbHQocG9ydC0+c2VyaWFsLT5kZXYsIHBvcnQtPndyaXRlX3VyYi0+cGlwZSk7CisKKwkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLworCXJldHZhbCA9IHN0YXJ0X3BvcnRfcmVhZChwb3J0KTsKKwlpZiAocmV0dmFsKSB7CisJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJCWZpcm1fY2xvc2UocG9ydCk7CisJCXN0b3BfY29tbWFuZF9wb3J0KHBvcnQtPnNlcmlhbCk7CisJCWdvdG8gZXhpdDsKKwl9CisKK2V4aXQ6CisJZGJnKCIlcyAtIGV4aXQsIHJldHZhbCA9ICVkIiwgX19GVU5DVElPTl9fLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIHZvaWQgd2hpdGVoZWF0X2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCAqd3JhcDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQorCS8qIGZpbHAgaXMgTlVMTCB3aGVuIGNhbGxlZCBmcm9tIHVzYl9zZXJpYWxfZGlzY29ubmVjdCAqLworCWlmIChmaWxwICYmICh0dHlfaHVuZ191cF9wKGZpbHApKSkgeworCQlyZXR1cm47CisJfQorCisJcG9ydC0+dHR5LT5jbG9zaW5nID0gMTsKKworLyoKKyAqIE5vdCBjdXJyZW50bHkgaW4gdXNlOyB0dHlfd2FpdF91bnRpbF9zZW50KCkgY2FsbHMKKyAqIHNlcmlhbF9jaGFyc19pbl9idWZmZXIoKSB3aGljaCBkZWFkbG9ja3Mgb24gdGhlIHNlY29uZCBzZW1hcGhvcmUKKyAqIGFjcXVpc2l0aW9uLiBUaGlzIHNob3VsZCBiZSBmaXhlZCBhdCBzb21lIHBvaW50LiBHcmVnJ3MgYmVlbgorICogbm90aWZpZWQuCisJaWYgKChmaWxwLT5mX2ZsYWdzICYgKE9fTkRFTEFZIHwgT19OT05CTE9DSykpID09IDApIHsKKwkJdHR5X3dhaXRfdW50aWxfc2VudChwb3J0LT50dHksIENMT1NJTkdfREVMQVkpOworCX0KKyovCisKKwlpZiAocG9ydC0+dHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcikKKwkJcG9ydC0+dHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcihwb3J0LT50dHkpOworCXR0eV9sZGlzY19mbHVzaChwb3J0LT50dHkpOworCisJZmlybV9yZXBvcnRfdHhfZG9uZShwb3J0KTsKKworCWZpcm1fY2xvc2UocG9ydCk7CisKKwkvKiBzaHV0ZG93biBvdXIgYnVsayByZWFkcyBhbmQgd3JpdGVzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUodG1wLCB0bXAyLCAmaW5mby0+cnhfdXJic19zdWJtaXR0ZWQpIHsKKwkJd3JhcCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwLCBsaXN0KTsKKwkJdXJiID0gd3JhcC0+dXJiOworCQl1c2Jfa2lsbF91cmIodXJiKTsKKwkJbGlzdF9kZWwodG1wKTsKKwkJbGlzdF9hZGQodG1wLCAmaW5mby0+cnhfdXJic19mcmVlKTsKKwl9CisJbGlzdF9mb3JfZWFjaF9zYWZlKHRtcCwgdG1wMiwgJmluZm8tPnJ4X3VyYl9xKSB7CisJCWxpc3RfZGVsKHRtcCk7CisJCWxpc3RfYWRkKHRtcCwgJmluZm8tPnJ4X3VyYnNfZnJlZSk7CisJfQorCWxpc3RfZm9yX2VhY2hfc2FmZSh0bXAsIHRtcDIsICZpbmZvLT50eF91cmJzX3N1Ym1pdHRlZCkgeworCQl3cmFwID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAsIGxpc3QpOworCQl1cmIgPSB3cmFwLT51cmI7CisJCXVzYl9raWxsX3VyYih1cmIpOworCQlsaXN0X2RlbCh0bXApOworCQlsaXN0X2FkZCh0bXAsICZpbmZvLT50eF91cmJzX2ZyZWUpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisKKwlzdG9wX2NvbW1hbmRfcG9ydChwb3J0LT5zZXJpYWwpOworCisJcG9ydC0+dHR5LT5jbG9zaW5nID0gMDsKK30KKworCitzdGF0aWMgaW50IHdoaXRlaGVhdF93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSAqaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwICp3cmFwOworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgcmVzdWx0OworCWludCBieXRlczsKKwlpbnQgc2VudCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChjb3VudCA9PSAwKSB7CisJCWRiZygiJXMgLSB3cml0ZSByZXF1ZXN0IG9mIDAgYnl0ZXMiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gKDApOworCX0KKworCXdoaWxlIChjb3VudCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCQlpZiAobGlzdF9lbXB0eSgmaW5mby0+dHhfdXJic19mcmVlKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCQkJYnJlYWs7CisJCX0KKwkJdG1wID0gbGlzdF9maXJzdCgmaW5mby0+dHhfdXJic19mcmVlKTsKKwkJbGlzdF9kZWwodG1wKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCisJCXdyYXAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCwgbGlzdCk7CisJCXVyYiA9IHdyYXAtPnVyYjsKKwkJYnl0ZXMgPSAoY291bnQgPiBwb3J0LT5idWxrX291dF9zaXplKSA/IHBvcnQtPmJ1bGtfb3V0X3NpemUgOiBjb3VudDsKKwkJbWVtY3B5ICh1cmItPnRyYW5zZmVyX2J1ZmZlciwgYnVmICsgc2VudCwgYnl0ZXMpOworCisJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBieXRlcywgdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCisJCXVyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJ5dGVzOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KSB7CisJCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJCXNlbnQgPSByZXN1bHQ7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCQkJbGlzdF9hZGQodG1wLCAmaW5mby0+dHhfdXJic19mcmVlKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJc2VudCArPSBieXRlczsKKwkJCWNvdW50IC09IGJ5dGVzOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwkJCWxpc3RfYWRkKHRtcCwgJmluZm8tPnR4X3VyYnNfc3VibWl0dGVkKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwkJfQorCX0KKworCXJldHVybiBzZW50OworfQorCisKK3N0YXRpYyBpbnQgd2hpdGVoZWF0X3dyaXRlX3Jvb20oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCWludCByb29tID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCisJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoKHRtcCwgJmluZm8tPnR4X3VyYnNfZnJlZSkKKwkJcm9vbSsrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwlyb29tICo9IHBvcnQtPmJ1bGtfb3V0X3NpemU7CisKKwlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fRlVOQ1RJT05fXywgcm9vbSk7CisJcmV0dXJuIChyb29tKTsKK30KKworCitzdGF0aWMgaW50IHdoaXRlaGVhdF90aW9jbWdldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGludCBtb2RlbV9zaWduYWxzID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJZmlybV9nZXRfZHRyX3J0cyhwb3J0KTsKKwlpZiAoaW5mby0+bWNyICYgVUFSVF9NQ1JfRFRSKQorCQltb2RlbV9zaWduYWxzIHw9IFRJT0NNX0RUUjsKKwlpZiAoaW5mby0+bWNyICYgVUFSVF9NQ1JfUlRTKQorCQltb2RlbV9zaWduYWxzIHw9IFRJT0NNX1JUUzsKKworCXJldHVybiBtb2RlbV9zaWduYWxzOworfQorCisKK3N0YXRpYyBpbnQgd2hpdGVoZWF0X3Rpb2Ntc2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoc2V0ICYgVElPQ01fUlRTKQorCQlpbmZvLT5tY3IgfD0gVUFSVF9NQ1JfUlRTOworCWlmIChzZXQgJiBUSU9DTV9EVFIpCisJCWluZm8tPm1jciB8PSBVQVJUX01DUl9EVFI7CisKKwlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpCisJCWluZm8tPm1jciAmPSB+VUFSVF9NQ1JfUlRTOworCWlmIChjbGVhciAmIFRJT0NNX0RUUikKKwkJaW5mby0+bWNyICY9IH5VQVJUX01DUl9EVFI7CisKKwlmaXJtX3NldF9kdHIocG9ydCwgaW5mby0+bWNyICYgVUFSVF9NQ1JfRFRSKTsKKwlmaXJtX3NldF9ydHMocG9ydCwgaW5mby0+bWNyICYgVUFSVF9NQ1JfUlRTKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHdoaXRlaGVhdF9pb2N0bCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBzZXJzdHJ1Y3Q7CisJdm9pZCBfX3VzZXIgKnVzZXJfYXJnID0gKHZvaWQgX191c2VyICopYXJnOworCisJZGJnKCIlcyAtIHBvcnQgJWQsIGNtZCAweCUuNHgiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlciwgY21kKTsKKworCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgVElPQ0dTRVJJQUw6CisJCQltZW1zZXQoJnNlcnN0cnVjdCwgMCwgc2l6ZW9mKHNlcnN0cnVjdCkpOworCQkJc2Vyc3RydWN0LnR5cGUgPSBQT1JUXzE2NjU0OworCQkJc2Vyc3RydWN0LmxpbmUgPSBwb3J0LT5zZXJpYWwtPm1pbm9yOworCQkJc2Vyc3RydWN0LnBvcnQgPSBwb3J0LT5udW1iZXI7CisJCQlzZXJzdHJ1Y3QuZmxhZ3MgPSBBU1lOQ19TS0lQX1RFU1QgfCBBU1lOQ19BVVRPX0lSUTsKKwkJCXNlcnN0cnVjdC54bWl0X2ZpZm9fc2l6ZSA9IHBvcnQtPmJ1bGtfb3V0X3NpemU7CisJCQlzZXJzdHJ1Y3QuY3VzdG9tX2Rpdmlzb3IgPSAwOworCQkJc2Vyc3RydWN0LmJhdWRfYmFzZSA9IDQ2MDgwMDsKKwkJCXNlcnN0cnVjdC5jbG9zZV9kZWxheSA9IENMT1NJTkdfREVMQVk7CisJCQlzZXJzdHJ1Y3QuY2xvc2luZ193YWl0ID0gQ0xPU0lOR19ERUxBWTsKKworCQkJaWYgKGNvcHlfdG9fdXNlcih1c2VyX2FyZywgJnNlcnN0cnVjdCwgc2l6ZW9mKHNlcnN0cnVjdCkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCisJCQlicmVhazsKKworCQljYXNlIFRJT0NTU0VSSUFMOgorCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZzZXJzdHJ1Y3QsIHVzZXJfYXJnLCBzaXplb2Yoc2Vyc3RydWN0KSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJCS8qCisJCQkgKiBGb3Igbm93IHRoaXMgaXMgaWdub3JlZC4gZGlwIHNldHMgdGhlIEFTWU5DX1tWXUhJIGZsYWdzCisJCQkgKiBidXQgdGhpcyBpc24ndCB1c2VkIGJ5IHVzIGF0IGFsbC4gTWF5YmUgc29tZW9uZSBzb21ld2hlcmUKKwkJCSAqIHdpbGwgbmVlZCB0aGUgY3VzdG9tX2Rpdmlzb3Igc2V0dGluZy4KKwkJCSAqLworCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworCitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfc2V0X3Rlcm1pb3MgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlkYmcoIiVzIC1wb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCghcG9ydC0+dHR5KSB8fCAoIXBvcnQtPnR0eS0+dGVybWlvcykpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSBzdHJ1Y3R1cmVzIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0OworCX0KKwkKKwkvKiBjaGVjayB0aGF0IHRoZXkgcmVhbGx5IHdhbnQgdXMgdG8gY2hhbmdlIHNvbWV0aGluZyAqLworCWlmIChvbGRfdGVybWlvcykgeworCQlpZiAoKHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyA9PSBvbGRfdGVybWlvcy0+Y19jZmxhZykgJiYKKwkJICAgIChwb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWcgPT0gb2xkX3Rlcm1pb3MtPmNfaWZsYWcpKSB7CisJCQlkYmcoIiVzIC0gbm90aGluZyB0byBjaGFuZ2UuLi4iLCBfX0ZVTkNUSU9OX18pOworCQkJZ290byBleGl0OworCQl9CisJfQorCisJZmlybV9zZXR1cF9wb3J0KHBvcnQpOworCitleGl0OgorCXJldHVybjsKK30KKworCitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfYnJlYWtfY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkgeworCWZpcm1fc2V0X2JyZWFrKHBvcnQsIGJyZWFrX3N0YXRlKTsKK30KKworCitzdGF0aWMgaW50IHdoaXRlaGVhdF9jaGFyc19pbl9idWZmZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCXN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAgKndyYXA7CisJaW50IGNoYXJzID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2godG1wLCAmaW5mby0+dHhfdXJic19zdWJtaXR0ZWQpIHsKKwkJd3JhcCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwLCBsaXN0KTsKKwkJY2hhcnMgKz0gd3JhcC0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisKKwlkYmcgKCIlcyAtIHJldHVybnMgJWQiLCBfX0ZVTkNUSU9OX18sIGNoYXJzKTsKKwlyZXR1cm4gKGNoYXJzKTsKK30KKworCitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisJaW5mby0+ZmxhZ3MgfD0gVEhST1RUTEVEOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKworCXJldHVybjsKK30KKworCitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IGFjdHVhbGx5X3Rocm90dGxlZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCWFjdHVhbGx5X3Rocm90dGxlZCA9IGluZm8tPmZsYWdzICYgQUNUVUFMTFlfVEhST1RUTEVEOworCWluZm8tPmZsYWdzICY9IH4oVEhST1RUTEVEIHwgQUNUVUFMTFlfVEhST1RUTEVEKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoYWN0dWFsbHlfdGhyb3R0bGVkKQorCQlyeF9kYXRhX3NvZnRpbnQocG9ydCk7CisKKwlyZXR1cm47Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb25uZWN0IFRlY2gncyBXaGl0ZSBIZWF0IGNhbGxiYWNrIHJvdXRpbmVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBjb21tYW5kX3BvcnRfd3JpdGVfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnICgibm9uemVybyB1cmIgc3RhdHVzOiAlZCIsIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KK30KKworCitzdGF0aWMgdm9pZCBjb21tYW5kX3BvcnRfcmVhZF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpjb21tYW5kX3BvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X2NvbW1hbmRfcHJpdmF0ZSAqY29tbWFuZF9pbmZvOworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmY29tbWFuZF9wb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKKworCWNvbW1hbmRfaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShjb21tYW5kX3BvcnQpOworCWlmICghY29tbWFuZF9pbmZvKSB7CisJCWRiZyAoIiVzIC0gY29tbWFuZF9pbmZvIGlzIE5VTEwsIGV4aXRpbmcuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29tbWFuZF9pbmZvLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoZGF0YVswXSA9PSBXSElURUhFQVRfQ01EX0NPTVBMRVRFKSB7CisJCWNvbW1hbmRfaW5mby0+Y29tbWFuZF9maW5pc2hlZCA9IFdISVRFSEVBVF9DTURfQ09NUExFVEU7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY29tbWFuZF9pbmZvLT53YWl0X2NvbW1hbmQpOworCX0gZWxzZSBpZiAoZGF0YVswXSA9PSBXSElURUhFQVRfQ01EX0ZBSUxVUkUpIHsKKwkJY29tbWFuZF9pbmZvLT5jb21tYW5kX2ZpbmlzaGVkID0gV0hJVEVIRUFUX0NNRF9GQUlMVVJFOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNvbW1hbmRfaW5mby0+d2FpdF9jb21tYW5kKTsKKwl9IGVsc2UgaWYgKGRhdGFbMF0gPT0gV0hJVEVIRUFUX0VWRU5UKSB7CisJCS8qIFRoZXNlIGFyZSB1bnNvbGljaXRlZCByZXBvcnRzIGZyb20gdGhlIGZpcm13YXJlLCBoZW5jZSBubyB3YWl0aW5nIGNvbW1hbmQgdG8gd2FrZXVwICovCisJCWRiZygiJXMgLSBldmVudCByZWNlaXZlZCIsIF9fRlVOQ1RJT05fXyk7CisJfSBlbHNlIGlmIChkYXRhWzBdID09IFdISVRFSEVBVF9HRVRfRFRSX1JUUykgeworCQltZW1jcHkoY29tbWFuZF9pbmZvLT5yZXN1bHRfYnVmZmVyLCAmZGF0YVsxXSwgdXJiLT5hY3R1YWxfbGVuZ3RoIC0gMSk7CisJCWNvbW1hbmRfaW5mby0+Y29tbWFuZF9maW5pc2hlZCA9IFdISVRFSEVBVF9DTURfQ09NUExFVEU7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY29tbWFuZF9pbmZvLT53YWl0X2NvbW1hbmQpOworCX0gZWxzZSB7CisJCWRiZygiJXMgLSBiYWQgcmVwbHkgZnJvbSBmaXJtd2FyZSIsIF9fRlVOQ1RJT05fXyk7CisJfQorCQorCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCAqLworCWNvbW1hbmRfcG9ydC0+cmVhZF91cmItPmRldiA9IGNvbW1hbmRfcG9ydC0+c2VyaWFsLT5kZXY7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIoY29tbWFuZF9wb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29tbWFuZF9pbmZvLT5sb2NrLCBmbGFncyk7CisJaWYgKHJlc3VsdCkKKwkJZGJnKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOworfQorCisKK3N0YXRpYyB2b2lkIHdoaXRlaGVhdF9yZWFkX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAgKndyYXA7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCB3aGl0ZWhlYXRfcHJpdmF0ZSAqaW5mbyA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKKwl3cmFwID0gdXJiX3RvX3dyYXAodXJiLCAmaW5mby0+cnhfdXJic19zdWJtaXR0ZWQpOworCWlmICghd3JhcCkgeworCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJCWVycigiJXMgLSBOb3QgbXkgdXJiISIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisJbGlzdF9kZWwoJndyYXAtPmxpc3QpOworCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlzcGluX2xvY2soJmluZm8tPmxvY2spOworCQlsaXN0X2FkZCgmd3JhcC0+bGlzdCwgJmluZm8tPnJ4X3VyYnNfZnJlZSk7CisJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwkJcmV0dXJuOworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCisJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZ3cmFwLT5saXN0LCAmaW5mby0+cnhfdXJiX3EpOworCWlmIChpbmZvLT5mbGFncyAmIFRIUk9UVExFRCkgeworCQlpbmZvLT5mbGFncyB8PSBBQ1RVQUxMWV9USFJPVFRMRUQ7CisJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwkJcmV0dXJuOworCX0KKwlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisKKwlzY2hlZHVsZV93b3JrKCZpbmZvLT5yeF93b3JrKTsKK30KKworCitzdGF0aWMgdm9pZCB3aGl0ZWhlYXRfd3JpdGVfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAgKndyYXA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9jaygmaW5mby0+bG9jayk7CisJd3JhcCA9IHVyYl90b193cmFwKHVyYiwgJmluZm8tPnR4X3VyYnNfc3VibWl0dGVkKTsKKwlpZiAoIXdyYXApIHsKKwkJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCQllcnIoIiVzIC0gTm90IG15IHVyYiEiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCWxpc3RfZGVsKCZ3cmFwLT5saXN0KTsKKwlsaXN0X2FkZCgmd3JhcC0+bGlzdCwgJmluZm8tPnR4X3VyYnNfZnJlZSk7CisJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJdXNiX3NlcmlhbF9wb3J0X3NvZnRpbnQoKHZvaWQgKilwb3J0KTsKKworCXNjaGVkdWxlX3dvcmsoJnBvcnQtPndvcmspOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29ubmVjdCBUZWNoJ3MgV2hpdGUgSGVhdCBmaXJtd2FyZSBpbnRlcmZhY2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZmlybV9zZW5kX2NvbW1hbmQgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTggY29tbWFuZCwgX191OCAqZGF0YSwgX191OCBkYXRhc2l6ZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpjb21tYW5kX3BvcnQ7CisJc3RydWN0IHdoaXRlaGVhdF9jb21tYW5kX3ByaXZhdGUgKmNvbW1hbmRfaW5mbzsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm87CisJX191OCAqdHJhbnNmZXJfYnVmZmVyOworCWludCByZXR2YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkYmcoIiVzIC0gY29tbWFuZCAlZCIsIF9fRlVOQ1RJT05fXywgY29tbWFuZCk7CisKKwljb21tYW5kX3BvcnQgPSBwb3J0LT5zZXJpYWwtPnBvcnRbQ09NTUFORF9QT1JUXTsKKwljb21tYW5kX2luZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoY29tbWFuZF9wb3J0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29tbWFuZF9pbmZvLT5sb2NrLCBmbGFncyk7CisJY29tbWFuZF9pbmZvLT5jb21tYW5kX2ZpbmlzaGVkID0gRkFMU0U7CisJCisJdHJhbnNmZXJfYnVmZmVyID0gKF9fdTggKiljb21tYW5kX3BvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyOworCXRyYW5zZmVyX2J1ZmZlclswXSA9IGNvbW1hbmQ7CisJbWVtY3B5ICgmdHJhbnNmZXJfYnVmZmVyWzFdLCBkYXRhLCBkYXRhc2l6ZSk7CisJY29tbWFuZF9wb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBkYXRhc2l6ZSArIDE7CisJY29tbWFuZF9wb3J0LT53cml0ZV91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiIChjb21tYW5kX3BvcnQtPndyaXRlX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldHZhbCkgeworCQlkYmcoIiVzIC0gc3VibWl0IHVyYiBmYWlsZWQiLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXQ7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbW1hbmRfaW5mby0+bG9jaywgZmxhZ3MpOworCisJLyogd2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUgKi8KKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChjb21tYW5kX2luZm8tPndhaXRfY29tbWFuZCwgCisJCShjb21tYW5kX2luZm8tPmNvbW1hbmRfZmluaXNoZWQgIT0gRkFMU0UpLCBDT01NQU5EX1RJTUVPVVQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbW1hbmRfaW5mby0+bG9jaywgZmxhZ3MpOworCisJaWYgKGNvbW1hbmRfaW5mby0+Y29tbWFuZF9maW5pc2hlZCA9PSBGQUxTRSkgeworCQlkYmcoIiVzIC0gY29tbWFuZCB0aW1lZCBvdXQuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dmFsID0gLUVUSU1FRE9VVDsKKwkJZ290byBleGl0OworCX0KKworCWlmIChjb21tYW5kX2luZm8tPmNvbW1hbmRfZmluaXNoZWQgPT0gV0hJVEVIRUFUX0NNRF9GQUlMVVJFKSB7CisJCWRiZygiJXMgLSBjb21tYW5kIGZhaWxlZC4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR2YWwgPSAtRUlPOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGNvbW1hbmRfaW5mby0+Y29tbWFuZF9maW5pc2hlZCA9PSBXSElURUhFQVRfQ01EX0NPTVBMRVRFKSB7CisJCWRiZygiJXMgLSBjb21tYW5kIGNvbXBsZXRlZC4iLCBfX0ZVTkNUSU9OX18pOworCQlzd2l0Y2ggKGNvbW1hbmQpIHsKKwkJCWNhc2UgV0hJVEVIRUFUX0dFVF9EVFJfUlRTOgorCQkJCWluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJCQkJbWVtY3B5KCZpbmZvLT5tY3IsIGNvbW1hbmRfaW5mby0+cmVzdWx0X2J1ZmZlciwgc2l6ZW9mKHN0cnVjdCB3aGl0ZWhlYXRfZHJfaW5mbykpOworCQkJCWJyZWFrOworCQl9CisJfQorCitleGl0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbW1hbmRfaW5mby0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIGludCBmaXJtX29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkgeworCXN0cnVjdCB3aGl0ZWhlYXRfc2ltcGxlIG9wZW5fY29tbWFuZDsKKworCW9wZW5fY29tbWFuZC5wb3J0ID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vciArIDE7CisJcmV0dXJuIGZpcm1fc2VuZF9jb21tYW5kKHBvcnQsIFdISVRFSEVBVF9PUEVOLCAoX191OCAqKSZvcGVuX2NvbW1hbmQsIHNpemVvZihvcGVuX2NvbW1hbmQpKTsKK30KKworCitzdGF0aWMgaW50IGZpcm1fY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkgeworCXN0cnVjdCB3aGl0ZWhlYXRfc2ltcGxlIGNsb3NlX2NvbW1hbmQ7CisKKwljbG9zZV9jb21tYW5kLnBvcnQgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yICsgMTsKKwlyZXR1cm4gZmlybV9zZW5kX2NvbW1hbmQocG9ydCwgV0hJVEVIRUFUX0NMT1NFLCAoX191OCAqKSZjbG9zZV9jb21tYW5kLCBzaXplb2YoY2xvc2VfY29tbWFuZCkpOworfQorCisKK3N0YXRpYyBpbnQgZmlybV9zZXR1cF9wb3J0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpIHsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3BvcnRfc2V0dGluZ3MgcG9ydF9zZXR0aW5nczsKKwl1bnNpZ25lZCBpbnQgY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisKKwlwb3J0X3NldHRpbmdzLnBvcnQgPSBwb3J0LT5udW1iZXIgKyAxOworCisJLyogZ2V0IHRoZSBieXRlIHNpemUgKi8KKwlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpIHsKKwkJY2FzZSBDUzU6CXBvcnRfc2V0dGluZ3MuYml0cyA9IDU7ICAgYnJlYWs7CisJCWNhc2UgQ1M2Oglwb3J0X3NldHRpbmdzLmJpdHMgPSA2OyAgIGJyZWFrOworCQljYXNlIENTNzoJcG9ydF9zZXR0aW5ncy5iaXRzID0gNzsgICBicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSBDUzg6CXBvcnRfc2V0dGluZ3MuYml0cyA9IDg7ICAgYnJlYWs7CisJfQorCWRiZygiJXMgLSBkYXRhIGJpdHMgPSAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydF9zZXR0aW5ncy5iaXRzKTsKKwkKKwkvKiBkZXRlcm1pbmUgdGhlIHBhcml0eSAqLworCWlmIChjZmxhZyAmIFBBUkVOQikKKwkJaWYgKGNmbGFnICYgQ01TUEFSKQorCQkJaWYgKGNmbGFnICYgUEFST0REKQorCQkJCXBvcnRfc2V0dGluZ3MucGFyaXR5ID0gV0hJVEVIRUFUX1BBUl9NQVJLOworCQkJZWxzZQorCQkJCXBvcnRfc2V0dGluZ3MucGFyaXR5ID0gV0hJVEVIRUFUX1BBUl9TUEFDRTsKKwkJZWxzZQorCQkJaWYgKGNmbGFnICYgUEFST0REKQorCQkJCXBvcnRfc2V0dGluZ3MucGFyaXR5ID0gV0hJVEVIRUFUX1BBUl9PREQ7CisJCQllbHNlCisJCQkJcG9ydF9zZXR0aW5ncy5wYXJpdHkgPSBXSElURUhFQVRfUEFSX0VWRU47CisJZWxzZQorCQlwb3J0X3NldHRpbmdzLnBhcml0eSA9IFdISVRFSEVBVF9QQVJfTk9ORTsKKwlkYmcoIiVzIC0gcGFyaXR5ID0gJWMiLCBfX0ZVTkNUSU9OX18sIHBvcnRfc2V0dGluZ3MucGFyaXR5KTsKKworCS8qIGZpZ3VyZSBvdXQgdGhlIHN0b3AgYml0cyByZXF1ZXN0ZWQgKi8KKwlpZiAoY2ZsYWcgJiBDU1RPUEIpCisJCXBvcnRfc2V0dGluZ3Muc3RvcCA9IDI7CisJZWxzZQorCQlwb3J0X3NldHRpbmdzLnN0b3AgPSAxOworCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydF9zZXR0aW5ncy5zdG9wKTsKKworCS8qIGZpZ3VyZSBvdXQgdGhlIGZsb3cgY29udHJvbCBzZXR0aW5ncyAqLworCWlmIChjZmxhZyAmIENSVFNDVFMpCisJCXBvcnRfc2V0dGluZ3MuaGZsb3cgPSAoV0hJVEVIRUFUX0hGTE9XX0NUUyB8IFdISVRFSEVBVF9IRkxPV19SVFMpOworCWVsc2UKKwkJcG9ydF9zZXR0aW5ncy5oZmxvdyA9IFdISVRFSEVBVF9IRkxPV19OT05FOworCWRiZygiJXMgLSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgPSAlcyAlcyAlcyAlcyIsIF9fRlVOQ1RJT05fXywKKwkgICAgKHBvcnRfc2V0dGluZ3MuaGZsb3cgJiBXSElURUhFQVRfSEZMT1dfQ1RTKSA/ICJDVFMiIDogIiIsCisJICAgIChwb3J0X3NldHRpbmdzLmhmbG93ICYgV0hJVEVIRUFUX0hGTE9XX1JUUykgPyAiUlRTIiA6ICIiLAorCSAgICAocG9ydF9zZXR0aW5ncy5oZmxvdyAmIFdISVRFSEVBVF9IRkxPV19EU1IpID8gIkRTUiIgOiAiIiwKKwkgICAgKHBvcnRfc2V0dGluZ3MuaGZsb3cgJiBXSElURUhFQVRfSEZMT1dfRFRSKSA/ICJEVFIiIDogIiIpOworCQorCS8qIGRldGVybWluZSBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKi8KKwlpZiAoSV9JWE9GRihwb3J0LT50dHkpKQorCQlwb3J0X3NldHRpbmdzLnNmbG93ID0gV0hJVEVIRUFUX1NGTE9XX1JYVFg7CisJZWxzZQorCQlwb3J0X3NldHRpbmdzLnNmbG93ID0gV0hJVEVIRUFUX1NGTE9XX05PTkU7CisJZGJnKCIlcyAtIHNvZnR3YXJlIGZsb3cgY29udHJvbCA9ICVjIiwgX19GVU5DVElPTl9fLCBwb3J0X3NldHRpbmdzLnNmbG93KTsKKwkKKwlwb3J0X3NldHRpbmdzLnhvbiA9IFNUQVJUX0NIQVIocG9ydC0+dHR5KTsKKwlwb3J0X3NldHRpbmdzLnhvZmYgPSBTVE9QX0NIQVIocG9ydC0+dHR5KTsKKwlkYmcoIiVzIC0gWE9OID0gJTJ4LCBYT0ZGID0gJTJ4IiwgX19GVU5DVElPTl9fLCBwb3J0X3NldHRpbmdzLnhvbiwgcG9ydF9zZXR0aW5ncy54b2ZmKTsKKworCS8qIGdldCB0aGUgYmF1ZCByYXRlIHdhbnRlZCAqLworCXBvcnRfc2V0dGluZ3MuYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHBvcnQtPnR0eSk7CisJZGJnKCIlcyAtIGJhdWQgcmF0ZSA9ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0X3NldHRpbmdzLmJhdWQpOworCisJLyogaGFuZGxlIGFueSBzZXR0aW5ncyB0aGF0IGFyZW4ndCBzcGVjaWZpZWQgaW4gdGhlIHR0eSBzdHJ1Y3R1cmUgKi8KKwlwb3J0X3NldHRpbmdzLmxsb29wID0gMDsKKwkKKwkvKiBub3cgc2VuZCB0aGUgbWVzc2FnZSB0byB0aGUgZGV2aWNlICovCisJcmV0dXJuIGZpcm1fc2VuZF9jb21tYW5kKHBvcnQsIFdISVRFSEVBVF9TRVRVUF9QT1JULCAoX191OCAqKSZwb3J0X3NldHRpbmdzLCBzaXplb2YocG9ydF9zZXR0aW5ncykpOworfQorCisKK3N0YXRpYyBpbnQgZmlybV9zZXRfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTggb25vZmYpIHsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3NldF9yZGIgcnRzX2NvbW1hbmQ7CisKKwlydHNfY29tbWFuZC5wb3J0ID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vciArIDE7CisJcnRzX2NvbW1hbmQuc3RhdGUgPSBvbm9mZjsKKwlyZXR1cm4gZmlybV9zZW5kX2NvbW1hbmQocG9ydCwgV0hJVEVIRUFUX1NFVF9SVFMsIChfX3U4ICopJnJ0c19jb21tYW5kLCBzaXplb2YocnRzX2NvbW1hbmQpKTsKK30KKworCitzdGF0aWMgaW50IGZpcm1fc2V0X2R0cihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3U4IG9ub2ZmKSB7CisJc3RydWN0IHdoaXRlaGVhdF9zZXRfcmRiIGR0cl9jb21tYW5kOworCisJZHRyX2NvbW1hbmQucG9ydCA9IHBvcnQtPm51bWJlciAtIHBvcnQtPnNlcmlhbC0+bWlub3IgKyAxOworCWR0cl9jb21tYW5kLnN0YXRlID0gb25vZmY7CisJcmV0dXJuIGZpcm1fc2VuZF9jb21tYW5kKHBvcnQsIFdISVRFSEVBVF9TRVRfUlRTLCAoX191OCAqKSZkdHJfY29tbWFuZCwgc2l6ZW9mKGR0cl9jb21tYW5kKSk7Cit9CisKKworc3RhdGljIGludCBmaXJtX3NldF9icmVhayhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3U4IG9ub2ZmKSB7CisJc3RydWN0IHdoaXRlaGVhdF9zZXRfcmRiIGJyZWFrX2NvbW1hbmQ7CisKKwlicmVha19jb21tYW5kLnBvcnQgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yICsgMTsKKwlicmVha19jb21tYW5kLnN0YXRlID0gb25vZmY7CisJcmV0dXJuIGZpcm1fc2VuZF9jb21tYW5kKHBvcnQsIFdISVRFSEVBVF9TRVRfUlRTLCAoX191OCAqKSZicmVha19jb21tYW5kLCBzaXplb2YoYnJlYWtfY29tbWFuZCkpOworfQorCisKK3N0YXRpYyBpbnQgZmlybV9wdXJnZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3U4IHJ4dHgpIHsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3B1cmdlIHB1cmdlX2NvbW1hbmQ7CisKKwlwdXJnZV9jb21tYW5kLnBvcnQgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yICsgMTsKKwlwdXJnZV9jb21tYW5kLndoYXQgPSByeHR4OworCXJldHVybiBmaXJtX3NlbmRfY29tbWFuZChwb3J0LCBXSElURUhFQVRfUFVSR0UsIChfX3U4ICopJnB1cmdlX2NvbW1hbmQsIHNpemVvZihwdXJnZV9jb21tYW5kKSk7Cit9CisKKworc3RhdGljIGludCBmaXJtX2dldF9kdHJfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpIHsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3NpbXBsZSBnZXRfZHJfY29tbWFuZDsKKworCWdldF9kcl9jb21tYW5kLnBvcnQgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yICsgMTsKKwlyZXR1cm4gZmlybV9zZW5kX2NvbW1hbmQocG9ydCwgV0hJVEVIRUFUX0dFVF9EVFJfUlRTLCAoX191OCAqKSZnZXRfZHJfY29tbWFuZCwgc2l6ZW9mKGdldF9kcl9jb21tYW5kKSk7Cit9CisKKworc3RhdGljIGludCBmaXJtX3JlcG9ydF90eF9kb25lKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpIHsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3NpbXBsZSBjbG9zZV9jb21tYW5kOworCisJY2xvc2VfY29tbWFuZC5wb3J0ID0gcG9ydC0+bnVtYmVyIC0gcG9ydC0+c2VyaWFsLT5taW5vciArIDE7CisJcmV0dXJuIGZpcm1fc2VuZF9jb21tYW5kKHBvcnQsIFdISVRFSEVBVF9SRVBPUlRfVFhfRE9ORSwgKF9fdTggKikmY2xvc2VfY29tbWFuZCwgc2l6ZW9mKGNsb3NlX2NvbW1hbmQpKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvbm5lY3QgVGVjaCdzIFdoaXRlIEhlYXQgdXRpbGl0eSBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgc3RhcnRfY29tbWFuZF9wb3J0KHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqY29tbWFuZF9wb3J0OworCXN0cnVjdCB3aGl0ZWhlYXRfY29tbWFuZF9wcml2YXRlICpjb21tYW5kX2luZm87CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsID0gMDsKKwkKKwljb21tYW5kX3BvcnQgPSBzZXJpYWwtPnBvcnRbQ09NTUFORF9QT1JUXTsKKwljb21tYW5kX2luZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoY29tbWFuZF9wb3J0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29tbWFuZF9pbmZvLT5sb2NrLCBmbGFncyk7CisJaWYgKCFjb21tYW5kX2luZm8tPnBvcnRfcnVubmluZykgeworCQkvKiBXb3JrIGFyb3VuZCBIQ0QgYnVncyAqLworCQl1c2JfY2xlYXJfaGFsdChzZXJpYWwtPmRldiwgY29tbWFuZF9wb3J0LT5yZWFkX3VyYi0+cGlwZSk7CisKKwkJY29tbWFuZF9wb3J0LT5yZWFkX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGNvbW1hbmRfcG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmV0dmFsKSB7CisJCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXR2YWwpOworCQkJZ290byBleGl0OworCQl9CisJfQorCWNvbW1hbmRfaW5mby0+cG9ydF9ydW5uaW5nKys7CisKK2V4aXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29tbWFuZF9pbmZvLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdm9pZCBzdG9wX2NvbW1hbmRfcG9ydChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKmNvbW1hbmRfcG9ydDsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X2NvbW1hbmRfcHJpdmF0ZSAqY29tbWFuZF9pbmZvOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21tYW5kX3BvcnQgPSBzZXJpYWwtPnBvcnRbQ09NTUFORF9QT1JUXTsKKwljb21tYW5kX2luZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoY29tbWFuZF9wb3J0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29tbWFuZF9pbmZvLT5sb2NrLCBmbGFncyk7CisJY29tbWFuZF9pbmZvLT5wb3J0X3J1bm5pbmctLTsKKwlpZiAoIWNvbW1hbmRfaW5mby0+cG9ydF9ydW5uaW5nKQorCQl1c2Jfa2lsbF91cmIoY29tbWFuZF9wb3J0LT5yZWFkX3VyYik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29tbWFuZF9pbmZvLT5sb2NrLCBmbGFncyk7Cit9CisKKworc3RhdGljIGludCBzdGFydF9wb3J0X3JlYWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCAqd3JhcDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IHJldHZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wMjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUodG1wLCB0bXAyLCAmaW5mby0+cnhfdXJic19mcmVlKSB7CisJCWxpc3RfZGVsKHRtcCk7CisJCXdyYXAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCwgbGlzdCk7CisJCXVyYiA9IHdyYXAtPnVyYjsKKwkJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwkJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJldHZhbCkgeworCQkJbGlzdF9hZGQodG1wLCAmaW5mby0+cnhfdXJic19mcmVlKTsKKwkJCWxpc3RfZm9yX2VhY2hfc2FmZSh0bXAsIHRtcDIsICZpbmZvLT5yeF91cmJzX3N1Ym1pdHRlZCkgeworCQkJCXdyYXAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCwgbGlzdCk7CisJCQkJdXJiID0gd3JhcC0+dXJiOworCQkJCXVzYl9raWxsX3VyYih1cmIpOworCQkJCWxpc3RfZGVsKHRtcCk7CisJCQkJbGlzdF9hZGQodG1wLCAmaW5mby0+cnhfdXJic19mcmVlKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWxpc3RfYWRkKHRtcCwgJmluZm8tPnJ4X3VyYnNfc3VibWl0dGVkKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwICp1cmJfdG9fd3JhcChzdHJ1Y3QgdXJiKiB1cmIsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCAqd3JhcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoKHRtcCwgaGVhZCkgeworCQl3cmFwID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAsIGxpc3QpOworCQlpZiAod3JhcC0+dXJiID09IHVyYikKKwkJCXJldHVybiB3cmFwOworCX0KKworCXJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X2ZpcnN0KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJcmV0dXJuIGhlYWQtPm5leHQ7Cit9CisKKworc3RhdGljIHZvaWQgcnhfZGF0YV9zb2Z0aW50KHZvaWQgKnByaXZhdGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopcHJpdmF0ZTsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnR0eTsKKwlzdHJ1Y3Qgd2hpdGVoZWF0X3VyYl93cmFwICp3cmFwOworCXN0cnVjdCB1cmIgKnVyYjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXAyOworCWludCByZXN1bHQ7CisJaW50IHNlbnQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwlpZiAoaW5mby0+ZmxhZ3MgJiBUSFJPVFRMRUQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJbGlzdF9mb3JfZWFjaF9zYWZlKHRtcCwgdG1wMiwgJmluZm8tPnJ4X3VyYl9xKSB7CisJCWxpc3RfZGVsKHRtcCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKworCQl3cmFwID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCB3aGl0ZWhlYXRfdXJiX3dyYXAsIGxpc3QpOworCQl1cmIgPSB3cmFwLT51cmI7CisKKwkJaWYgKHR0eSAmJiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiBUVFlfRkxJUEJVRl9TSVpFIC0gdHR5LT5mbGlwLmNvdW50KSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwkJCQlsaXN0X2FkZCh0bXAsICZpbmZvLT5yeF91cmJfcSk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQkJc2NoZWR1bGVfd29yaygmaW5mby0+cnhfd29yayk7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQltZW1jcHkodHR5LT5mbGlwLmNoYXJfYnVmX3B0ciwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQl0dHktPmZsaXAuY2hhcl9idWZfcHRyICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJCXR0eS0+ZmxpcC5jb3VudCArPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJCQlzZW50ICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJfQorCisJCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXN1bHQpIHsKKwkJCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisJCQlsaXN0X2FkZCh0bXAsICZpbmZvLT5yeF91cmJzX2ZyZWUpOworCQkJY29udGludWU7CisJCX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCQlsaXN0X2FkZCh0bXAsICZpbmZvLT5yeF91cmJzX3N1Ym1pdHRlZCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKworCWlmIChzZW50KQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29ubmVjdCBUZWNoJ3MgV2hpdGUgSGVhdCBtb2R1bGUgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IF9faW5pdCB3aGl0ZWhlYXRfaW5pdCAodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJndoaXRlaGVhdF9mYWtlX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfZmFrZV9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZ3aGl0ZWhlYXRfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF9kZXZpY2VfcmVnaXN0ZXI7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ3aGl0ZWhlYXRfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CisJaW5mbyhEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiAwOworZmFpbGVkX3VzYl9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJndoaXRlaGVhdF9kZXZpY2UpOworZmFpbGVkX2RldmljZV9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJndoaXRlaGVhdF9mYWtlX2RldmljZSk7CitmYWlsZWRfZmFrZV9yZWdpc3RlcjoKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3aGl0ZWhlYXRfZXhpdCAodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlciAoJndoaXRlaGVhdF9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJndoaXRlaGVhdF9mYWtlX2RldmljZSk7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmd2hpdGVoZWF0X2RldmljZSk7Cit9CisKKworbW9kdWxlX2luaXQod2hpdGVoZWF0X2luaXQpOworbW9kdWxlX2V4aXQod2hpdGVoZWF0X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7CitNT0RVTEVfREVTQ1JJUFRJT04oIERSSVZFUl9ERVNDICk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbSh1cmJfcG9vbF9zaXplLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh1cmJfcG9vbF9zaXplLCAiTnVtYmVyIG9mIHVyYnMgdG8gdXNlIGZvciBidWZmZXJpbmciKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzE0ZWZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5oCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICogVVNCIENvbm5lY3RUZWNoIFdoaXRlSEVBVCBkcml2ZXIKKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwMgorICogICAgICAgICAgQ29ubmVjdCBUZWNoIEluYy4JCisgKgorICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAKKyAqICAgICAgICAgIEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKgorICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGlzIGRyaXZlcgorICoKKyAqLworCisjaWZuZGVmIF9fTElOVVhfVVNCX1NFUklBTF9XSElURUhFQVRfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9TRVJJQUxfV0hJVEVIRUFUX0gKKworCisjZGVmaW5lIEZBTFNFCTAKKyNkZWZpbmUgVFJVRQkxCisKKworLyogV2hpdGVIRUFUIGNvbW1hbmRzICovCisjZGVmaW5lIFdISVRFSEVBVF9PUEVOCQkJMQkvKiBvcGVuIHRoZSBwb3J0ICovCisjZGVmaW5lIFdISVRFSEVBVF9DTE9TRQkJCTIJLyogY2xvc2UgdGhlIHBvcnQgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1NFVFVQX1BPUlQJCTMJLyogY2hhbmdlIHBvcnQgc2V0dGluZ3MgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1NFVF9SVFMJCTQJLyogdHVybiBSVFMgb24gb3Igb2ZmICovCisjZGVmaW5lIFdISVRFSEVBVF9TRVRfRFRSCQk1CS8qIHR1cm4gRFRSIG9uIG9yIG9mZiAqLworI2RlZmluZSBXSElURUhFQVRfU0VUX0JSRUFLCQk2CS8qIHR1cm4gQlJFQUsgb24gb3Igb2ZmICovCisjZGVmaW5lIFdISVRFSEVBVF9EVU1QCQkJNwkvKiBkdW1wIG1lbW9yeSAqLworI2RlZmluZSBXSElURUhFQVRfU1RBVFVTCQk4CS8qIGdldCBzdGF0dXMgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1BVUkdFCQkJOQkvKiBjbGVhciB0aGUgVUFSVCBmaWZvcyAqLworI2RlZmluZSBXSElURUhFQVRfR0VUX0RUUl9SVFMJCTEwCS8qIGdldCB0aGUgc3RhdGUgb2YgRFRSIGFuZCBSVFMgZm9yIGEgcG9ydCAqLworI2RlZmluZSBXSElURUhFQVRfR0VUX0hXX0lORk8JCTExCS8qIGdldCBFRVBST00gaW5mbyBhbmQgaGFyZHdhcmUgSUQgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1JFUE9SVF9UWF9ET05FCTEyCS8qIGdldCB0aGUgbmV4dCBUWCBkb25lICovCisjZGVmaW5lIFdISVRFSEVBVF9FVkVOVAkJCTEzCS8qIHVuc29saWNpdGVkIHN0YXR1cyBldmVudHMgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0VDSE8JCQkxNAkvKiBzZW5kIGRhdGEgdG8gdGhlIGluZGljYXRlZCBJTiBlbmRwb2ludCAqLworI2RlZmluZSBXSElURUhFQVRfRE9fVEVTVAkJMTUJLyogcGVyZm9ybSB0aGUgc3BlY2lmaWVkIHRlc3QgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0NNRF9DT01QTEVURQkJMTYJLyogcmVwbHkgZm9yIGNlcnRhaW4gY29tbWFuZHMgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0NNRF9GQUlMVVJFCQkxNwkvKiByZXBseSBmb3IgZmFpbGVkIGNvbW1hbmRzICovCisKKworLyoKKyAqIENvbW1hbmRzIHRvIHRoZSBmaXJtd2FyZQorICovCisKKworLyoKKyAqIFdISVRFSEVBVF9PUEVOCisgKiBXSElURUhFQVRfQ0xPU0UKKyAqIFdISVRFSEVBVF9TVEFUVVMKKyAqIFdISVRFSEVBVF9HRVRfRFRSX1JUUworICogV0hJVEVIRUFUX1JFUE9SVF9UWF9ET05FCisqLworc3RydWN0IHdoaXRlaGVhdF9zaW1wbGUgeworCV9fdTgJcG9ydDsJLyogcG9ydCBudW1iZXIgKDEgdG8gTikgKi8KK307CisKKworLyoKKyAqIFdISVRFSEVBVF9TRVRVUF9QT1JUCisgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1BBUl9OT05FCSduJwkvKiBubyBwYXJpdHkgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1BBUl9FVkVOCSdlJwkvKiBldmVuIHBhcml0eSAqLworI2RlZmluZSBXSElURUhFQVRfUEFSX09ERAknbycJLyogb2RkIHBhcml0eSAqLworI2RlZmluZSBXSElURUhFQVRfUEFSX1NQQUNFCScwJwkvKiBzcGFjZSAoZm9yY2UgMCkgcGFyaXR5ICovCisjZGVmaW5lIFdISVRFSEVBVF9QQVJfTUFSSwknMScJLyogbWFyayAoZm9yY2UgMSkgcGFyaXR5ICovCisKKyNkZWZpbmUgV0hJVEVIRUFUX1NGTE9XX05PTkUJJ24nCS8qIG5vIHNvZnR3YXJlIGZsb3cgY29udHJvbCAqLworI2RlZmluZSBXSElURUhFQVRfU0ZMT1dfUlgJJ3InCS8qIFhPRkYvT04gaXMgc2VudCB3aGVuIFJYIGZpbGxzL2VtcHRpZXMgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1NGTE9XX1RYCSd0JwkvKiB3aGVuIHJlY2VpdmVkIFhPRkYvT04gd2lsbCBzdG9wL3N0YXJ0IFRYICovCisjZGVmaW5lIFdISVRFSEVBVF9TRkxPV19SWFRYCSdiJwkvKiBib3RoIFNGTE9XX1JYIGFuZCBTRkxPV19UWCAqLworCisjZGVmaW5lIFdISVRFSEVBVF9IRkxPV19OT05FCQkweDAwCS8qIG5vIGhhcmR3YXJlIGZsb3cgY29udHJvbCAqLworI2RlZmluZSBXSElURUhFQVRfSEZMT1dfUlRTX1RPR0dMRQkweDAxCS8qIFJUUyBpcyBvbiBkdXJpbmcgdHJhbnNtaXQsIG9mZiBvdGhlcndpc2UgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0hGTE9XX0RUUgkJMHgwMgkvKiBEVFIgaXMgb2ZmL29uIHdoZW4gUlggZmlsbHMvZW1wdGllcyAqLworI2RlZmluZSBXSElURUhFQVRfSEZMT1dfQ1RTCQkweDA4CS8qIHdoZW4gcmVjZWl2ZWQgQ1RTIG9mZi9vbiB3aWxsIHN0b3Avc3RhcnQgVFggKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0hGTE9XX0RTUgkJMHgxMAkvKiB3aGVuIHJlY2VpdmVkIERTUiBvZmYvb24gd2lsbCBzdG9wL3N0YXJ0IFRYICovCisjZGVmaW5lIFdISVRFSEVBVF9IRkxPV19SVFMJCTB4ODAJLyogUlRTIGlzIG9mZi9vbiB3aGVuIFJYIGZpbGxzL2VtcHRpZXMgKi8KKworc3RydWN0IHdoaXRlaGVhdF9wb3J0X3NldHRpbmdzIHsKKwlfX3U4CXBvcnQ7CQkvKiBwb3J0IG51bWJlciAoMSB0byBOKSAqLworCV9fdTMyCWJhdWQ7CQkvKiBhbnkgdmFsdWUgNyAtIDQ2MDgwMCwgZmlybXdhcmUgY2FsY3VsYXRlcyBiZXN0IGZpdDsgYXJyaXZlcyBsaXR0bGUgZW5kaWFuICovCisJX191OAliaXRzOwkJLyogNSwgNiwgNywgb3IgOCAqLworCV9fdTgJc3RvcDsJCS8qIDEgb3IgMiwgZGVmYXVsdCAxICgyID0gMS41IGlmIGJpdHMgPSA1KSAqLworCV9fdTgJcGFyaXR5OwkJLyogc2VlIFdISVRFSEVBVF9QQVJfKiBhYm92ZSAqLworCV9fdTgJc2Zsb3c7CQkvKiBzZWUgV0hJVEVIRUFUX1NGTE9XXyogYWJvdmUgKi8KKwlfX3U4CXhvZmY7CQkvKiBYT0ZGIGJ5dGUgdmFsdWUgKi8KKwlfX3U4CXhvbjsJCS8qIFhPTiBieXRlIHZhbHVlICovCisJX191OAloZmxvdzsJCS8qIHNlZSBXSElURUhFQVRfSEZMT1dfKiBhYm92ZSAqLworCV9fdTgJbGxvb3A7CQkvKiAwLzEgdHVybnMgbG9jYWwgbG9vcGJhY2sgbW9kZSBvZmYvb24gKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKy8qCisgKiBXSElURUhFQVRfU0VUX1JUUworICogV0hJVEVIRUFUX1NFVF9EVFIKKyAqIFdISVRFSEVBVF9TRVRfQlJFQUsKKyAqLworI2RlZmluZSBXSElURUhFQVRfUlRTX09GRgkweDAwCisjZGVmaW5lIFdISVRFSEVBVF9SVFNfT04JMHgwMQorI2RlZmluZSBXSElURUhFQVRfRFRSX09GRgkweDAwCisjZGVmaW5lIFdISVRFSEVBVF9EVFJfT04JMHgwMQorI2RlZmluZSBXSElURUhFQVRfQlJFQUtfT0ZGCTB4MDAKKyNkZWZpbmUgV0hJVEVIRUFUX0JSRUFLX09OCTB4MDEKKworc3RydWN0IHdoaXRlaGVhdF9zZXRfcmRiIHsKKwlfX3U4CXBvcnQ7CQkvKiBwb3J0IG51bWJlciAoMSB0byBOKSAqLworCV9fdTgJc3RhdGU7CQkvKiAwLzEgdHVybnMgc2lnbmFsIG9mZi9vbiAqLworfTsKKworCisvKgorICogV0hJVEVIRUFUX0RVTVAKKyAqLworI2RlZmluZSBXSElURUhFQVRfRFVNUF9NRU1fREFUQQkJJ2QnICAvKiBkYXRhICovCisjZGVmaW5lIFdISVRFSEVBVF9EVU1QX01FTV9JREFUQQknaScgIC8qIGlkYXRhICovCisjZGVmaW5lIFdISVRFSEVBVF9EVU1QX01FTV9CREFUQQknYicgIC8qIGJkYXRhICovCisjZGVmaW5lIFdISVRFSEVBVF9EVU1QX01FTV9YREFUQQkneCcgIC8qIHhkYXRhICovCisKKy8qCisgKiBBbGxvd2FibGUgYWRkcmVzcyByYW5nZXMgKGZpcm13YXJlIGNoZWNrcyBhZGRyZXNzKToKKyAqIFR5cGUgREFUQTogIDB4MDAgLSAweGZmCisgKiBUeXBlIElEQVRBOiAweDgwIC0gMHhmZgorICogVHlwZSBCREFUQTogMHgyMCAtIDB4MmYKKyAqIFR5cGUgWERBVEE6IDB4MDAwMCAtIDB4ZmZmZgorICoKKyAqIEIvSS9EQVRBIGFsbCByZWFkIHRoZSBsb2NhbCBtZW1vcnkgc3BhY2UKKyAqIFhEQVRBIHJlYWRzIHRoZSBleHRlcm5hbCBtZW1vcnkgc3BhY2UKKyAqIEJEQVRBIHJldHVybnMgYml0cyBhcyBieXRlcworICoKKyAqIE5PVEU6IDB4ODAgLSAweGZmIChsb2NhbCBzcGFjZSkgYXJlIHRoZSBTcGVjaWFsIEZ1bmN0aW9uIFJlZ2lzdGVycworICogICAgICAgb2YgdGhlIDgwNTEsIGFuZCBzb21lIGhhdmUgb24tcmVhZCBzaWRlLWVmZmVjdHMuCisgKi8KKworc3RydWN0IHdoaXRlaGVhdF9kdW1wIHsKKwlfX3U4CW1lbV90eXBlOwkvKiBzZWUgV0hJVEVIRUFUX0RVTVBfKiBhYm92ZSAqLworCV9fdTE2CWFkZHI7CQkvKiBhZGRyZXNzLCBzZWUgcmVzdHJpY3Rpb25zIGFib3ZlICovCisJX191MTYJbGVuZ3RoOwkJLyogbnVtYmVyIG9mIGJ5dGVzIHRvIGR1bXAsIG1heCA2MyBieXRlcyAqLworfTsKKworCisvKgorICogV0hJVEVIRUFUX1BVUkdFCisgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1BVUkdFX1JYCTB4MDEJLyogcHVyZ2UgcnggZmlmb3MgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1BVUkdFX1RYCTB4MDIJLyogcHVyZ2UgdHggZmlmb3MgKi8KKworc3RydWN0IHdoaXRlaGVhdF9wdXJnZSB7CisJX191OAlwb3J0OwkJLyogcG9ydCBudW1iZXIgKDEgdG8gTikgKi8KKwlfX3U4CXdoYXQ7CQkvKiBiaXQgcGF0dGVybiBvZiB3aGF0IHRvIHB1cmdlICovCit9OworCisKKy8qCisgKiBXSElURUhFQVRfRUNITworICovCitzdHJ1Y3Qgd2hpdGVoZWF0X2VjaG8geworCV9fdTgJcG9ydDsJCS8qIHBvcnQgbnVtYmVyICgxIHRvIE4pICovCisJX191OAlsZW5ndGg7CQkvKiBsZW5ndGggb2YgbWVzc2FnZSB0byBlY2hvLCBtYXggNjEgYnl0ZXMgKi8KKwlfX3U4CWVjaG9fZGF0YVs2MV07CS8qIGRhdGEgdG8gZWNobyAqLworfTsKKworCisvKgorICogV0hJVEVIRUFUX0RPX1RFU1QKKyAqLworI2RlZmluZSBXSElURUhFQVRfVEVTVF9VQVJUX1JXCQkweDAxICAvKiByZWFkL3dyaXRlIHVhcnQgcmVnaXN0ZXJzICovCisjZGVmaW5lIFdISVRFSEVBVF9URVNUX1VBUlRfSU5UUgkweDAyICAvKiB1YXJ0IGludGVycnVwdCAqLworI2RlZmluZSBXSElURUhFQVRfVEVTVF9TRVRVUF9DT05UCTB4MDMgIC8qIHNldHVwIGZvciBQT1JUX0NPTlQvUE9SVF9ESVNDT05UICovCisjZGVmaW5lIFdISVRFSEVBVF9URVNUX1BPUlRfQ09OVAkweDA0ICAvKiBwb3J0IGNvbm5lY3QgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfUE9SVF9ESVNDT05UCTB4MDUgIC8qIHBvcnQgZGlzY29ubmVjdCAqLworI2RlZmluZSBXSElURUhFQVRfVEVTVF9VQVJUX0NMS19TVEFSVAkweDA2ICAvKiB1YXJ0IGNsb2NrIHRlc3Qgc3RhcnQgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfVUFSVF9DTEtfU1RPUAkweDA3ICAvKiB1YXJ0IGNsb2NrIHRlc3Qgc3RvcCAqLworI2RlZmluZSBXSElURUhFQVRfVEVTVF9NT0RFTV9GVAkJMHgwOCAgLyogbW9kZW0gc2lnbmFscywgcmVxdWlyZXMgYSBsb29wYmFjayBjYWJsZS9jb25uZWN0b3IgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfRVJBU0VfRUVQUk9NCTB4MDkgIC8qIGVyYXNlIGVlcHJvbSAqLworI2RlZmluZSBXSElURUhFQVRfVEVTVF9SRUFEX0VFUFJPTQkweDBhICAvKiByZWFkIGVlcHJvbSAqLworI2RlZmluZSBXSElURUhFQVRfVEVTVF9QUk9HUkFNX0VFUFJPTQkweDBiICAvKiBwcm9ncmFtIGVlcHJvbSAqLworCitzdHJ1Y3Qgd2hpdGVoZWF0X3Rlc3QgeworCV9fdTgJcG9ydDsJCS8qIHBvcnQgbnVtYmVyICgxIHRvIG4pICovCisJX191OAl0ZXN0OwkJLyogc2VlIFdISVRFSEVBVF9URVNUXyogYWJvdmUqLworCV9fdTgJaW5mb1szMl07CS8qIGFkZGl0aW9uYWwgaW5mbyAqLworfTsKKworCisvKgorICogUmVwbGllcyBmcm9tIHRoZSBmaXJtd2FyZQorICovCisKKworLyoKKyAqIFdISVRFSEVBVF9TVEFUVVMKKyAqLworI2RlZmluZSBXSElURUhFQVRfRVZFTlRfTU9ERU0JCTB4MDEJLyogbW9kZW0gZmllbGQgaXMgdmFsaWQgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0VWRU5UX0VSUk9SCQkweDAyCS8qIGVycm9yIGZpZWxkIGlzIHZhbGlkICovCisjZGVmaW5lIFdISVRFSEVBVF9FVkVOVF9GTE9XCQkweDA0CS8qIGZsb3cgZmllbGQgaXMgdmFsaWQgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0VWRU5UX0NPTk5FQ1QJCTB4MDgJLyogY29ubmVjdCBmaWVsZCBpcyB2YWxpZCAqLworCisjZGVmaW5lIFdISVRFSEVBVF9GTE9XX05PTkUJCTB4MDAJLyogbm8gZmxvdyBjb250cm9sIGFjdGl2ZSAqLworI2RlZmluZSBXSElURUhFQVRfRkxPV19IQVJEX09VVAkJMHgwMQkvKiBUWCBpcyBzdG9wcGVkIGJ5IENUUyAod2FpdGluZyBmb3IgQ1RTIHRvIGdvIG9uKSAqLworI2RlZmluZSBXSElURUhFQVRfRkxPV19IQVJEX0lOCQkweDAyCS8qIHJlbW90ZSBUWCBpcyBzdG9wcGVkIGJ5IFJUUyAqLworI2RlZmluZSBXSElURUhFQVRfRkxPV19TT0ZUX09VVAkJMHgwNAkvKiBUWCBpcyBzdG9wcGVkIGJ5IFhPRkYgcmVjZWl2ZWQgKHdhaXRpbmcgZm9yIFhPTikgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX0ZMT1dfU09GVF9JTgkJMHgwOAkvKiByZW1vdGUgVFggaXMgc3RvcHBlZCBieSBYT0ZGIHRyYW5zbWl0dGVkICovCisjZGVmaW5lIFdISVRFSEVBVF9GTE9XX1RYX0RPTkUJCTB4ODAJLyogVFggaGFzIGNvbXBsZXRlZCAqLworCitzdHJ1Y3Qgd2hpdGVoZWF0X3N0YXR1c19pbmZvIHsKKwlfX3U4CXBvcnQ7CQkvKiBwb3J0IG51bWJlciAoMSB0byBOKSAqLworCV9fdTgJZXZlbnQ7CQkvKiBpbmRpY2F0ZXMgd2hhdCB0aGUgY3VycmVudCBldmVudCBpcywgc2VlIFdISVRFSEVBVF9FVkVOVF8qIGFib3ZlICovCisJX191OAltb2RlbTsJCS8qIG1vZGVtIHNpZ25hbCBzdGF0dXMgKGNvcHkgb2YgdWFydCdzIE1TUiByZWdpc3RlcikgKi8KKwlfX3U4CWVycm9yOwkJLyogbGluZSBzdGF0dXMgKGNvcHkgb2YgdWFydCdzIExTUiByZWdpc3RlcikgKi8KKwlfX3U4CWZsb3c7CQkvKiBmbG93IGNvbnRyb2wgc3RhdGUsIHNlZSBXSElURUhFQVRfRkxPV18qIGFib3ZlICovCisJX191OAljb25uZWN0OwkvKiAwIG1lYW5zIG5vdCBjb25uZWN0ZWQsIG5vbi16ZXJvIG1lYW5zIGNvbm5lY3RlZCAqLworfTsKKworCisvKgorICogV0hJVEVIRUFUX0dFVF9EVFJfUlRTCisgKi8KK3N0cnVjdCB3aGl0ZWhlYXRfZHJfaW5mbyB7CisJX191OAltY3I7CQkvKiBjb3B5IG9mIHVhcnQncyBNQ1IgcmVnaXN0ZXIgKi8KK307CisKKworLyoKKyAqIFdISVRFSEVBVF9HRVRfSFdfSU5GTworICovCitzdHJ1Y3Qgd2hpdGVoZWF0X2h3X2luZm8geworCV9fdTgJaHdfaWQ7CQkvKiBoYXJkd2FyZSBpZCBudW1iZXIsIFdoaXRlSEVBVCA9IDAgKi8KKwlfX3U4CXN3X21ham9yX3JldjsJLyogbWFqb3IgdmVyc2lvbiBudW1iZXIgKi8KKwlfX3U4CXN3X21pbm9yX3JldjsJLyogbWlub3IgdmVyc2lvbiBudW1iZXIgKi8KKwlzdHJ1Y3Qgd2hpdGVoZWF0X2h3X2VlcHJvbV9pbmZvIHsKKwkJX191OAliMDsJCQkvKiBCMCAqLworCQlfX3U4CXZlbmRvcl9pZF9sb3c7CQkvKiB2ZW5kb3IgaWQgKGxvdyBieXRlKSAqLworCQlfX3U4CXZlbmRvcl9pZF9oaWdoOwkJLyogdmVuZG9yIGlkIChoaWdoIGJ5dGUpICovCisJCV9fdTgJcHJvZHVjdF9pZF9sb3c7CQkvKiBwcm9kdWN0IGlkIChsb3cgYnl0ZSkgKi8KKwkJX191OAlwcm9kdWN0X2lkX2hpZ2g7CS8qIHByb2R1Y3QgaWQgKGhpZ2ggYnl0ZSkgKi8KKwkJX191OAlkZXZpY2VfaWRfbG93OwkJLyogZGV2aWNlIGlkIChsb3cgYnl0ZSkgKi8KKwkJX191OAlkZXZpY2VfaWRfaGlnaDsJCS8qIGRldmljZSBpZCAoaGlnaCBieXRlKSAqLworCQlfX3U4CW5vdF91c2VkXzE7CisJCV9fdTgJc2VyaWFsX251bWJlcl8wOwkvKiBzZXJpYWwgbnVtYmVyIChsb3cgYnl0ZSkgKi8KKwkJX191OAlzZXJpYWxfbnVtYmVyXzE7CS8qIHNlcmlhbCBudW1iZXIgKi8KKwkJX191OAlzZXJpYWxfbnVtYmVyXzI7CS8qIHNlcmlhbCBudW1iZXIgKi8KKwkJX191OAlzZXJpYWxfbnVtYmVyXzM7CS8qIHNlcmlhbCBudW1iZXIgKGhpZ2ggYnl0ZSkgKi8KKwkJX191OAlub3RfdXNlZF8yOworCQlfX3U4CW5vdF91c2VkXzM7CisJCV9fdTgJY2hlY2tzdW1fbG93OwkJLyogY2hlY2tzdW0gKGxvdyBieXRlKSAqLworCQlfX3U4CWNoZWNrc3VtX2hpZ2g7CQkvKiBjaGVja3N1bSAoaGlnaCBieXRlICovCisJfSBod19lZXByb21faW5mbzsJLyogRUVQUk9NIGNvbnRlbnRzICovCit9OworCisKKy8qCisgKiBXSElURUhFQVRfRVZFTlQKKyAqLworc3RydWN0IHdoaXRlaGVhdF9ldmVudF9pbmZvIHsKKwlfX3U4CXBvcnQ7CQkvKiBwb3J0IG51bWJlciAoMSB0byBOKSAqLworCV9fdTgJZXZlbnQ7CQkvKiBzZWUgd2hpdGVoZWF0X3N0YXR1c19pbmZvLmV2ZW50ICovCisJX191OAlpbmZvOwkJLyogc2VlIHdoaXRlaGVhdF9zdGF0dXNfaW5mby5tb2RlbSwgLmVycm9yLCAuZmxvdywgLmNvbm5lY3QgKi8KK307CisKKworLyoKKyAqIFdISVRFSEVBVF9ET19URVNUCisgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfRkFJTAkweDAwICAvKiB0ZXN0IGZhaWxlZCAqLworI2RlZmluZSBXSElURUhFQVRfVEVTVF9VTktOT1dOCTB4MDEgIC8qIHVua25vd24gdGVzdCByZXF1ZXN0ZWQgKi8KKyNkZWZpbmUgV0hJVEVIRUFUX1RFU1RfUEFTUwkweGZmICAvKiB0ZXN0IHBhc3NlZCAqLworCitzdHJ1Y3Qgd2hpdGVoZWF0X3Rlc3RfaW5mbyB7CisJX191OAlwb3J0OwkJLyogcG9ydCBudW1iZXIgKDEgdG8gTikgKi8KKwlfX3U4CXRlc3Q7CQkvKiBpbmRpY2F0ZXMgd2hpY2ggdGVzdCB0aGlzIGlzIGEgcmVzcG9uc2UgZm9yLCBzZWUgV0hJVEVIRUFUX0RPX1RFU1QgYWJvdmUgKi8KKwlfX3U4CXN0YXR1czsJCS8qIHNlZSBXSElURUhFQVRfVEVTVF8qIGFib3ZlICovCisJX191OAlyZXN1bHRzWzMyXTsJLyogdGVzdC1kZXBlbmRlbnQgcmVzdWx0cyAqLworfTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXRfZncuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXRfZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTBiZGM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdF9mdy5oCkBAIC0wLDAgKzEsMTY2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICB3aGl0ZWhlYXQuaCAgLS0gIENvbm5lY3RUZWNoIFdoaXRlSEVBVCBGaXJtd2FyZS4KKyAqCisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAyICBDb25uZWN0VGVjaCBJbmMgKGh0dHA6Ly93d3cuY29ubmVjdHRlY2guY29tLykKKyAqCisgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogKDEwLzA5LzIwMDIpIFN0dWFydCBNYWNEb25hbGQKKyAqCUZpcm13YXJlIDQuMDYKKyAqCisgKiAoMDQvMDkvMjAwMCkgZ2toCisgKglVcGRhdGVkIHRoZSBmaXJtd2FyZSB3aXRoIHRoZSBsYXRlc3QgcHJvdmlkZWQgYnkgQ29ubmVjdFRlY2guCisgKgorICogKDAxLzE2LzIwMDApIGdraAorICoJRml4ZWQgbXkgaW50ZWwgaGV4IHByb2Nlc3NpbmcgdG9vbCwgc28gbm93IHRoZSBmaXJtd2FyZSBhY3R1YWxseQorICoJbWF0Y2hlcyB0aGUgb3JpZ2luYWwgZmlsZSAodGhpcyB3YXMgY2F1c2luZyBhIGZldyBwcm9ibGVtcy4uLikKKyAqCisgKiAoMDEvMTUvMjAwMCkgZ2toCisgKglBZGRlZCBkZWJ1ZyBsb2FkZXIgZmlybXdhcmUgaWYgREVCVUcgaXMgI2RlZmluZWQ6CisgKgkJUG9ydCAxIExFRCBmbGFzaGVzIHdoZW4gdGhlIHZlbmRfYXggcHJvZ3JhbSBpcyBydW5uaW5nCisgKgkJUG9ydCAyIExFRCBmbGFzaGVzIHdoZW4gYW55IFNFVFVQIGNvbW1hbmQgYXJyaXZlcworICoJCVBvcnQgMyBMRUQgZmxhc2hlcyB3aGVuIGFueSB2YWxpZCBWRU5ET1IgcmVxdWVzdCBvY2N1cnMKKyAqCQlQb3J0IDQgTEVEIGZsYXNoZXMgd2hlbiB0aGUgRVhURVJOQUwgUkFNIERPV05MT0FEIHJlcXVlc3Qgb2NjdXJzCisgKgorICogdmVyc2lvbiAxLjAgKDAxLzA5LzIwMDApIGdraAorICoJT3JpZ2luYWwgZmlybXdhcmUgZnJvbSBDb25uZWN0VGVjaCBtYXNzYWdlZCBhIGxpdHRsZSB0byBiZSBwcm9ncmFtCisgKglyZWFkYWJsZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgd2hpdGVoZWF0X0RBVEUgIjIwMDAwMTA2IgorCitzdHJ1Y3Qgd2hpdGVoZWF0X2hleF9yZWNvcmQgeworCV9fdTE2CWFkZHJlc3M7CisJX191OAlkYXRhX3NpemU7CisJX191OAlkYXRhWzE2XTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2hpdGVoZWF0X2hleF9yZWNvcmQgd2hpdGVoZWF0X2Zpcm13YXJlW10gPSB7Cit7IDB4MDAwMCwJMywJezB4MDIsIDB4OTcsIDB4ZTN9IH0sCit7IDB4MDAwMywJMywJezB4MDIsIDB4MTMsIDB4MTJ9IH0sCit7IDB4MDAwYiwJMywJezB4MDIsIDB4MGIsIDB4YjV9IH0sCit7IDB4MDAzMywJMywJezB4MDIsIDB4MDgsIDB4MWN9IH0sCit7IDB4MDA0MywJMywJezB4MDIsIDB4MGEsIDB4MDB9IH0sCit7IDB4MDA1YiwJMywJezB4MDIsIDB4ODMsIDB4M2J9IH0sCit7IDB4MDM3MCwJMTYsCXsweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDcwLCAweDAzLCAweDAyLCAweDA0LCAweDczLCAweDE0LCAweDcwLCAweDAzLCAweDAyLCAweDA0LCAweGU3LCAweDI0fSB9LAoreyAweDAzODAsCTE2LAl7MHhmZSwgMHg3MCwgMHgwMywgMHgwMiwgMHgwNSwgMHg0ZiwgMHgyNCwgMHhmYiwgMHg3MCwgMHgwMywgMHgwMiwgMHgwNCwgMHg2NCwgMHgxNCwgMHg3MCwgMHgwM30gfSwKK3sgMHgwMzkwLAkxNiwJezB4MDIsIDB4MDQsIDB4NTIsIDB4MTQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4M2EsIDB4MTQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4NDksIDB4MjR9IH0sCit7IDB4MDNhMCwJMTYsCXsweDA1LCAweDYwLCAweDAzLCAweDAyLCAweDA1LCAweDllLCAweDkwLCAweDdmLCAweGViLCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE2LCAweDE0LCAweDYwfSB9LAoreyAweDAzYjAsCTE2LAl7MHgzNiwgMHgyNCwgMHgwMiwgMHg3MCwgMHg3YiwgMHg3NCwgMHgxMiwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHg3NCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhkNX0gfSwKK3sgMHgwM2MwLAkxNiwJezB4ZjAsIDB4MDIsIDB4MDUsIDB4YTUsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGEsIDB4OTksIDB4ZWEsIDB4NDksIDB4NjAsIDB4MGR9IH0sCit7IDB4MDNkMCwJMTYsCXsweGVhLCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweGU5LCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDA1LCAweGE1LCAweDkwLCAweDdmLCAweGI0fSB9LAoreyAweDAzZTAsCTE2LAl7MHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhNSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmZiwgMHgxMiwgMHgwYSwgMHg1OCwgMHhlYX0gfSwKK3sgMHgwM2YwLAkxNiwJezB4NDksIDB4NjAsIDB4MzMsIDB4MTIsIDB4YTIsIDB4M2IsIDB4ZjUsIDB4NGUsIDB4OTAsIDB4N2YsIDB4ZWUsIDB4ZTAsIDB4ZmYsIDB4ZTUsIDB4NGUsIDB4ZDN9IH0sCit7IDB4MDQwMCwJMTYsCXsweDlmLCAweDQwLCAweDAzLCAweGUwLCAweGY1LCAweDRlLCAweGU1LCAweDRlLCAweGQzLCAweDk0LCAweDQwLCAweDQwLCAweDAzLCAweDc1LCAweDRlLCAweDQwfSB9LAoreyAweDA0MTAsCTE2LAl7MHhhZSwgMHgwMiwgMHhhZiwgMHgwMSwgMHg3YywgMHg3ZiwgMHg3ZCwgMHgwMCwgMHhhYiwgMHg0ZSwgMHgxMiwgMHg5MSwgMHgzNywgMHg5MCwgMHg3ZiwgMHhiNX0gfSwKK3sgMHgwNDIwLAkxNiwJezB4ZTUsIDB4NGUsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YTUsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YTV9IH0sCit7IDB4MDQzMCwJMTYsCXsweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDAyLCAweDA1LCAweGE1LCAweDkwLCAweDdmLCAweDAwLCAweGU1LCAweDIxLCAweGYwfSB9LAoreyAweDA0NDAsCTE2LAl7MHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhNSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmNSwgMHgyMSwgMHgwMn0gfSwKK3sgMHgwNDUwLAkxNiwJezB4MDUsIDB4YTUsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MzUsIDB4ZDIsIDB4MDIsIDB4NDMsIDB4ODgsIDB4MTAsIDB4ZDIsIDB4ZWIsIDB4ZDJ9IH0sCit7IDB4MDQ2MCwJMTYsCXsweGE4LCAweDAyLCAweDA1LCAweGE1LCAweDkwLCAweDdmLCAweDAwLCAweGU1LCAweDM1LCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwfSB9LAoreyAweDA0NzAsCTE2LAl7MHgwMiwgMHgwNSwgMHhhNSwgMHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHg3ZiwgMHg2MCwgMHgyNCwgMHgxNCwgMHg2MCwgMHgzMSwgMHgyNCwgMHgwMn0gfSwKK3sgMHgwNDgwLAkxNiwJezB4NzAsIDB4NWIsIDB4YTIsIDB4MDAsIDB4ZTQsIDB4MzMsIDB4ZmYsIDB4MjUsIDB4ZTAsIDB4ZmYsIDB4YTIsIDB4MDUsIDB4ZTQsIDB4MzMsIDB4NGYsIDB4OTB9IH0sCit7IDB4MDQ5MCwJMTYsCXsweDdmLCAweDAwLCAweGYwLCAweGU0LCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDA1LCAweGE1LCAweGU0fSB9LAoreyAweDA0YTAsCTE2LAl7MHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhNSwgMHg5MH0gfSwKK3sgMHgwNGIwLAkxNiwJezB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjV9IH0sCit7IDB4MDRjMCwJMTYsCXsweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweDAxLCAweDkwLCAweDdmLCAweDAwfSB9LAoreyAweDA0ZDAsCTE2LAl7MHhmMCwgMHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhNSwgMHg5MCwgMHg3ZiwgMHhiNH0gfSwKK3sgMHgwNGUwLAkxNiwJezB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YTUsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MWQsIDB4MjR9IH0sCit7IDB4MDRmMCwJMTYsCXsweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDA1LCAweGE1LCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0LCAweDAxLCAweDA1LCAweGMyLCAweDAwLCAweDAyfSB9LAoreyAweDA1MDAsCTE2LAl7MHgwNSwgMHhhNSwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhNSwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMH0gfSwKK3sgMHgwNTEwLAkxNiwJezB4NzAsIDB4MzQsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZmYsIDB4NTQsIDB4MDcsIDB4ZmUsIDB4ZjUsIDB4NGUsIDB4ZWYsIDB4MzAsIDB4ZTcsIDB4MDN9IH0sCit7IDB4MDUyMCwJMTYsCXsweDQzLCAweDRlLCAweDEwLCAweDkwLCAweDdmLCAweGQ3LCAweGU1LCAweDRlLCAweGYwLCAweGU1LCAweDRlLCAweDQ0LCAweDIwLCAweGYwLCAweGVmLCAweGY0fSB9LAoreyAweDA1MzAsCTE2LAl7MHg1NCwgMHg4MCwgMHhmZCwgMHhjNCwgMHg1NCwgMHgwZiwgMHgyZSwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3Zn0gfSwKK3sgMHgwNTQwLAkxNiwJezB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4ODAsIDB4NWYsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4NTYsIDB4OTB9IH0sCit7IDB4MDU1MCwJMTYsCXsweDdmLCAweGU4LCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE4LCAweDI0LCAweDAyLCAweDcwLCAweDRhLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0fSB9LAoreyAweDA1NjAsCTE2LAl7MHgwMSwgMHgwNCwgMHhkMiwgMHgwMCwgMHg4MCwgMHgzZiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgzNiwgMHg5MH0gfSwKK3sgMHgwNTcwLAkxNiwJezB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGZ9IH0sCit7IDB4MDU4MCwJMTYsCXsweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzfSB9LAoreyAweDA1OTAsCTE2LAl7MHg3NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgwNywgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwNWEwLAkxMiwJezB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjB9IH0sCit7IDB4MDVhYywJMSwJezB4MjJ9IH0sCit7IDB4MDVhZCwJMTYsCXsweDc1LCAweDRhLCAweGZmLCAweDc1LCAweDQ5LCAweGZmLCAweDc1LCAweDQ4LCAweDBmLCAweDc1LCAweDQ3LCAweDAwLCAweGQyLCAweDAzLCAweGMyLCAweDA2fSB9LAoreyAweDA1YmQsCTE2LAl7MHhjMiwgMHgwMiwgMHhjMiwgMHgwMCwgMHhjMiwgMHgwNSwgMHhjMiwgMHgwMSwgMHg5MCwgMHgwMywgMHgwMCwgMHg3NCwgMHgxOSwgMHhmMCwgMHhlNCwgMHg5MH0gfSwKK3sgMHgwNWNkLAkxNiwJezB4MDEsIDB4YmMsIDB4ZjAsIDB4YzIsIDB4MDQsIDB4OTAsIDB4MDEsIDB4YzAsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4YzIsIDB4YWYsIDB4YzIsIDB4YTgsIDB4MTJ9IH0sCit7IDB4MDVkZCwJMTYsCXsweDBjLCAweDIyLCAweGU0LCAweDkwLCAweDAyLCAweGFmLCAweGYwLCAweDkwLCAweDAxLCAweGJkLCAweGYwLCAweDkwLCAweDAxLCAweDAwLCAweGYwLCAweGEzfSB9LAoreyAweDA1ZWQsCTE2LAl7MHhmMCwgMHhhMywgMHhmMCwgMHhhMywgMHhmMCwgMHhhMywgMHhmMCwgMHhhMywgMHg3NCwgMHgxMCwgMHhmMCwgMHhhMywgMHg3NCwgMHgwMSwgMHhmMCwgMHhhM30gfSwKK3sgMHgwNWZkLAkxNiwJezB4NzQsIDB4MDgsIDB4ZjAsIDB4N2UsIDB4MDEsIDB4N2YsIDB4MDAsIDB4MTIsIDB4MTksIDB4YzEsIDB4NzUsIDB4NGMsIDB4MTIsIDB4NzUsIDB4NGQsIDB4MGF9IH0sCit7IDB4MDYwZCwJMTYsCXsweDkwLCAweDAxLCAweDBiLCAweGUwLCAweGZmLCAweDA1LCAweDRkLCAweGU1LCAweDRkLCAweGFjLCAweDRjLCAweDcwLCAweDAyLCAweDA1LCAweDRjLCAweDE0fSB9LAoreyAweDA2MWQsCTE2LAl7MHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHg5MCwgMHgwMSwgMHgwYywgMHhlMCwgMHg0NCwgMHg4MCwgMHhmZiwgMHgwNSwgMHg0ZCwgMHhlNX0gfSwKK3sgMHgwNjJkLAkxNiwJezB4NGQsIDB4YWMsIDB4NGMsIDB4NzAsIDB4MDIsIDB4MDUsIDB4NGMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4MDF9IH0sCit7IDB4MDYzZCwJMTYsCXsweDBkLCAweGUwLCAweGZmLCAweDA1LCAweDRkLCAweGU1LCAweDRkLCAweGFjLCAweDRjLCAweDcwLCAweDAyLCAweDA1LCAweDRjLCAweDE0LCAweGY1LCAweDgyfSB9LAoreyAweDA2NGQsCTE2LAl7MHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHg5MCwgMHgwMSwgMHgwZSwgMHhlMCwgMHhmZiwgMHgwNSwgMHg0ZCwgMHhlNSwgMHg0ZCwgMHhhYywgMHg0YywgMHg3MH0gfSwKK3sgMHgwNjVkLAkxNiwJezB4MDIsIDB4MDUsIDB4NGMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4MTIsIDB4MGEsIDB4ZTQsIDB4OTMsIDB4ZmZ9IH0sCit7IDB4MDY2ZCwJMTYsCXsweDc0LCAweDAxLCAweDkzLCAweDkwLCAweDAxLCAweDFjLCAweGNmLCAweGYwLCAweGEzLCAweGVmLCAweGYwLCAweDkwLCAweDAxLCAweDFjLCAweGUwLCAweGZmfSB9LAoreyAweDA2N2QsCTE2LAl7MHhhMywgMHhlMCwgMHhmZSwgMHhlZiwgMHg2ZSwgMHhmZiwgMHg5MCwgMHgwMSwgMHgxYywgMHhmMCwgMHhhMywgMHhlMCwgMHg2ZiwgMHhmZiwgMHhmMCwgMHg5MH0gfSwKK3sgMHgwNjhkLAkxNiwJezB4MDEsIDB4MWMsIDB4ZTAsIDB4NmYsIDB4ZjAsIDB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4ZTQsIDB4ZmMsIDB4ZmQsIDB4NzUsIDB4NTIsIDB4MTB9IH0sCit7IDB4MDY5ZCwJMTYsCXsweDc1LCAweDUzLCAweDAyLCAweDc1LCAweDU0LCAweDEyLCAweDc1LCAweDU1LCAweGFjLCAweDEyLCAweDk0LCAweDI2LCAweDc1LCAweDRjLCAweDEyLCAweDc1fSB9LAoreyAweDA2YWQsCTE2LAl7MHg0ZCwgMHhiMiwgMHg5MCwgMHgwMSwgMHgwZCwgMHhlMCwgMHhmZiwgMHgwNSwgMHg0ZCwgMHhlNSwgMHg0ZCwgMHhhYywgMHg0YywgMHg3MCwgMHgwMiwgMHgwNX0gfSwKK3sgMHgwNmJkLAkxNiwJezB4NGMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4MGUsIDB4ZTAsIDB4ZmYsIDB4MDUsIDB4NGQsIDB4ZTV9IH0sCit7IDB4MDZjZCwJMTYsCXsweDRkLCAweGFjLCAweDRjLCAweDcwLCAweDAyLCAweDA1LCAweDRjLCAweDE0LCAweGY1LCAweDgyLCAweDhjLCAweDgzLCAweGVmLCAweGYwLCAweDkwLCAweDdmfSB9LAoreyAweDA2ZGQsCTE2LAl7MHg5MiwgMHhlMCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHgyNCwgMHg0MSwgMHhmZiwgMHgwNSwgMHg0ZCwgMHhlNSwgMHg0ZCwgMHhhYywgMHg0YywgMHg3MH0gfSwKK3sgMHgwNmVkLAkxNiwJezB4MDIsIDB4MDUsIDB4NGMsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4NGQsIDB4ZTUsIDB4NGQsIDB4YWUsIDB4NGN9IH0sCit7IDB4MDZmZCwJMTYsCXsweDcwLCAweDAyLCAweDA1LCAweDRjLCAweDE0LCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGU0LCAweGYwLCAweDc1LCAweDgyLCAweDEwLCAweDc1LCAweDgzfSB9LAoreyAweDA3MGQsCTE2LAl7MHgwMSwgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHhmZCwgMHhhMywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmZiwgMHg5MCwgMHgwMSwgMHgxOCwgMHgxMn0gfSwKK3sgMHgwNzFkLAkxNiwJezB4YTMsIDB4ZWUsIDB4N2UsIDB4MDEsIDB4N2YsIDB4MTgsIDB4MTIsIDB4ODYsIDB4YmUsIDB4OTAsIDB4MDEsIDB4MTgsIDB4ZTAsIDB4ZmMsIDB4YTMsIDB4ZTB9IH0sCit7IDB4MDcyZCwJMTYsCXsweGZkLCAweGEzLCAweGUwLCAweGZlLCAweGEzLCAweGUwLCAweGZmLCAweDc1LCAweDUyLCAweDBhLCAweDc1LCAweDUzLCAweDA2LCAweDc1LCAweDU0LCAweDEyfSB9LAoreyAweDA3M2QsCTE2LAl7MHg3NSwgMHg1NSwgMHhiOCwgMHgxMiwgMHg5NCwgMHgyNiwgMHhkMiwgMHhlOCwgMHg0MywgMHhkOCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHhmZn0gfSwKK3sgMHgwNzRkLAkxNiwJezB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWYsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWUsIDB4ZTAsIDB4NDR9IH0sCit7IDB4MDc1ZCwJMTYsCXsweDFmLCAweGYwLCAweGQyLCAweGFmLCAweDIwLCAweDAxLCAweDJlLCAweDIwLCAweDAxLCAweDJiLCAweGEyLCAweDAzLCAweDkyLCAweDA3LCAweDEyLCAweDA5fSB9LAoreyAweDA3NmQsCTE2LAl7MHhjNSwgMHg3NSwgMHg0NiwgMHg1MCwgMHg3NSwgMHg0NSwgMHg2ZCwgMHg3NSwgMHg0NCwgMHgzMywgMHg3NSwgMHg0MywgMHgwMCwgMHgyMCwgMHgwMSwgMHhlNH0gfSwKK3sgMHgwNzdkLAkxNiwJezB4N2YsIDB4ZmYsIDB4N2UsIDB4ZmYsIDB4N2QsIDB4ZmYsIDB4N2MsIDB4ZmYsIDB4NzgsIDB4NDMsIDB4MTIsIDB4YTMsIDB4ZDcsIDB4ZWMsIDB4NGQsIDB4NGV9IH0sCit7IDB4MDc4ZCwJMTYsCXsweDRmLCAweDYwLCAweGQxLCAweDgwLCAweGU4LCAweDMwLCAweDAxLCAweDA1LCAweDEyLCAweDAzLCAweDcwLCAweGMyLCAweDAxLCAweDMwLCAweDA2LCAweDBhfSB9LAoreyAweDA3OWQsCTE2LAl7MHgxMiwgMHgwOSwgMHhmYiwgMHg1MCwgMHgwMywgMHgxMiwgMHgwYSwgMHhlOCwgMHhjMiwgMHgwNiwgMHgxMiwgMHg5NiwgMHg1ZSwgMHg5MCwgMHgwMSwgMHhiZH0gfSwKK3sgMHgwN2FkLAkxNiwJezB4ZTAsIDB4NjAsIDB4MGMsIDB4MTIsIDB4OTIsIDB4MDEsIDB4ZTQsIDB4OTAsIDB4MDEsIDB4YmQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZDMsIDB4ZjAsIDB4OTB9IH0sCit7IDB4MDdiZCwJMTYsCXsweDAyLCAweGFmLCAweGUwLCAweGI0LCAweDBmLCAweDAzLCAweDEyLCAweDk5LCAweGI5LCAweDEyLCAweGEwLCAweDk1LCAweGU0LCAweGZmLCAweDc0LCAweDAxfSB9LAoreyAweDA3Y2QsCTE2LAl7MHhhOCwgMHgwNywgMHgwOCwgMHg4MCwgMHgwMiwgMHhjMywgMHgzMywgMHhkOCwgMHhmYywgMHhmZSwgMHg5MCwgMHgwMSwgMHhiYywgMHhlMCwgMHg1ZSwgMHg2MH0gfSwKK3sgMHgwN2RkLAkxNiwJezB4MTQsIDB4NzQsIDB4MjgsIDB4MmYsIDB4ZjgsIDB4ZTYsIDB4ZDMsIDB4OTQsIDB4MGEsIDB4NDAsIDB4MDQsIDB4N2UsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2V9IH0sCit7IDB4MDdlZCwJMTYsCXsweDAwLCAweDhlLCAweDRiLCAweDgwLCAweDAzLCAweDc1LCAweDRiLCAweDAxLCAweDc0LCAweDY4LCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwfSB9LAoreyAweDA3ZmQsCTE2LAl7MHhmNSwgMHg4MywgMHhlNSwgMHg0YiwgMHhmMCwgMHgwZiwgMHhiZiwgMHgwNCwgMHhjNSwgMHhlNSwgMHgyYywgMHhkMywgMHg5NCwgMHgwYSwgMHg0MCwgMHgwNH0gfSwKK3sgMHgwODBkLAkxNCwJezB4N2YsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4OTAsIDB4MjAsIDB4NmMsIDB4ZWYsIDB4ZjAsIDB4MDIsIDB4MDcsIDB4OTJ9IH0sCit7IDB4MDgxYiwJMSwJezB4MjJ9IH0sCit7IDB4MDgxYywJNCwJezB4NTMsIDB4ZDgsIDB4ZWYsIDB4MzJ9IH0sCit7IDB4MDgyMCwJMTYsCXsweGU1LCAweDMzLCAweGMzLCAweDk0LCAweDAxLCAweDQwLCAweDBlLCAweDkwLCAweDdmLCAweDkzLCAweGUwLCAweDQ0LCAweDMwLCAweGYwLCAweDkwLCAweDdmfSB9LAoreyAweDA4MzAsCTE2LAl7MHg5NSwgMHhlMCwgMHg0NCwgMHhjMCwgMHhmMCwgMHg3ZiwgMHhmNCwgMHg3ZSwgMHgwMSwgMHgxMiwgMHgwOSwgMHhhZSwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlMH0gfSwKK3sgMHgwODQwLAkxNiwJezB4NTQsIDB4ZmUsIDB4ZjAsIDB4N2YsIDB4MGEsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDksIDB4YWUsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NDQsIDB4MDh9IH0sCit7IDB4MDg1MCwJMTYsCXsweGYwLCAweDdmLCAweDA1LCAweDdlLCAweDAwLCAweDEyLCAweDA5LCAweGFlLCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweDdmfSB9LAoreyAweDA4NjAsCTE2LAl7MHgwNSwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgwOSwgMHhhZSwgMHhlNSwgMHgzMywgMHhjMywgMHg5NCwgMHgwMSwgMHg1MCwgMHgwZSwgMHg3ZiwgMHgwMiwgMHg3ZH0gfSwKK3sgMHgwODcwLAkxNiwJezB4ZmYsIDB4MTIsIDB4ODIsIDB4ZWEsIDB4N2YsIDB4MDUsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDksIDB4YWUsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NDR9IH0sCit7IDB4MDg4MCwJMTYsCXsweDAyLCAweGYwLCAweGUwLCAweDU0LCAweDdmLCAweGYwLCAweDdmLCAweDA1LCAweDdlLCAweDAwLCAweDEyLCAweDA5LCAweGFlLCAweDkwLCAweDdmLCAweDk2fSB9LAoreyAweDA4OTAsCTE2LAl7MHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgwOSwgMHhhZSwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlMCwgMHg1NH0gfSwKK3sgMHgwOGEwLAkxNiwJezB4YmYsIDB4ZjAsIDB4N2YsIDB4MzIsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDksIDB4YWUsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjB9IH0sCit7IDB4MDhiMCwJOCwJezB4N2YsIDB4MzIsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDksIDB4YWUsIDB4MjJ9IH0sCit7IDB4MDhiOCwJMTYsCXsweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweDdmLCAweDBhLCAweDdlLCAweDAwLCAweDEyfSB9LAoreyAweDA4YzgsCTE2LAl7MHgwOSwgMHhhZSwgMHhlNSwgMHgzMywgMHhjMywgMHg5NCwgMHgwMSwgMHg1MCwgMHgwZSwgMHg3ZiwgMHgwMiwgMHhlNCwgMHhmZCwgMHgxMiwgMHg4MiwgMHhlYX0gfSwKK3sgMHgwOGQ4LAkxNiwJezB4N2YsIDB4MDUsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDksIDB4YWUsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4N2YsIDB4MDV9IH0sCit7IDB4MDhlOCwJMTYsCXsweDdlLCAweDAwLCAweDEyLCAweDA5LCAweGFlLCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweDdmLCAweDA1LCAweDdlLCAweDAwfSB9LAoreyAweDA4ZjgsCTE2LAl7MHgxMiwgMHgwOSwgMHhhZSwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlMCwgMHg1NCwgMHhmNywgMHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgwOX0gfSwKK3sgMHgwOTA4LAkxNiwJezB4YWUsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4N2YsIDB4MDUsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDksIDB4YWUsIDB4ZTV9IH0sCit7IDB4MDkxOCwJMTYsCXsweDMzLCAweGMzLCAweDk0LCAweDAxLCAweDQwLCAweDBlLCAweDkwLCAweDdmLCAweDkzLCAweGUwLCAweDU0LCAweGNmLCAweGYwLCAweDkwLCAweDdmLCAweDk1fSB9LAoreyAweDA5MjgsCTgsCXsweGUwLCAweDU0LCAweDNmLCAweGYwLCAweDEyLCAweDBiLCAweDAwLCAweDIyfSB9LAoreyAweDA5MzAsCTE2LAl7MHg5MCwgMHgwYSwgMHhmNCwgMHhlNCwgMHg5MywgMHg3MCwgMHg3NiwgMHg5MCwgMHg3ZiwgMHg5MywgMHg3NCwgMHgzMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NH0gfSwKK3sgMHgwOTQwLAkxNiwJezB4NzQsIDB4M2MsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTUsIDB4NzQsIDB4YzYsIDB4ZjAsIDB4N2YsIDB4MGEsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDksIDB4YWV9IH0sCit7IDB4MDk1MCwJMTYsCXsweGU0LCAweDkwLCAweDdmLCAweDljLCAweGYwLCAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweDA4LCAweGYwLCAweDkwLCAweDdmLCAweDljLCAweDc0LCAweGNmfSB9LAoreyAweDA5NjAsCTE2LAl7MHhmMCwgMHg3ZiwgMHgwYSwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgwOSwgMHhhZSwgMHg5MCwgMHgyMCwgMHg3MCwgMHhlMCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZn0gfSwKK3sgMHgwOTcwLAkxNiwJezB4ZjUsIDB4MzMsIDB4YzMsIDB4OTQsIDB4MDEsIDB4NTAsIDB4MDcsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTB9IH0sCit7IDB4MDk4MCwJMTYsCXsweDdmLCAweDk3LCAweGYwLCAweDkwLCAweDdmLCAweDlkLCAweDc0LCAweDAyLCAweGYwLCAweGU1LCAweDMzLCAweGMzLCAweDk0LCAweDAxLCAweDQwLCAweDBifSB9LAoreyAweDA5OTAsCTE2LAl7MHhlNCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHg3NCwgMHhjMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlMiwgMHg3NCwgMHgxMn0gfSwKK3sgMHgwOWEwLAkxNCwJezB4ZjAsIDB4MTIsIDB4MDgsIDB4MjAsIDB4NzUsIDB4ODIsIDB4ZjQsIDB4NzUsIDB4ODMsIDB4MGEsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4MjJ9IH0sCit7IDB4MDlhZSwJMTYsCXsweDhlLCAweDVkLCAweDhmLCAweDVlLCAweGU1LCAweDVlLCAweDE1LCAweDVlLCAweGFlLCAweDVkLCAweDcwLCAweDAyLCAweDE1LCAweDVkLCAweDRlLCAweDYwfSB9LAoreyAweDA5YmUsCTcsCXsweDA1LCAweDEyLCAweDA5LCAweGVhLCAweDgwLCAweGVlLCAweDIyfSB9LAoreyAweDA5YzUsCTE2LAl7MHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHgzMCwgMHgwNywgMHgwNCwgMHhlMCwgMHg0NH0gfSwKK3sgMHgwOWQ1LAkxNiwJezB4MDIsIDB4ZjAsIDB4N2YsIDB4ZDAsIDB4N2UsIDB4MDcsIDB4MTIsIDB4MDksIDB4YWUsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjB9IH0sCit7IDB4MDllNSwJNSwJezB4ZTAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4MjJ9IH0sCit7IDB4MDllYSwJMTYsCXsweDc0LCAweDAwLCAweGY1LCAweDg2LCAweDkwLCAweGZkLCAweGE1LCAweDdjLCAweDA1LCAweGEzLCAweGU1LCAweDgyLCAweDQ1LCAweDgzLCAweDcwLCAweGY5fSB9LAoreyAweDA5ZmEsCTEsCXsweDIyfSB9LAoreyAweDA5ZmIsCTUsCXsweDEyLCAweDA4LCAweGI4LCAweGQzLCAweDIyfSB9LAoreyAweDBhMDAsCTE2LAl7MHgwMiwgMHgwYywgMHg0ZSwgMHgwMCwgMHgwMiwgMHgwYywgMHg4MSwgMHgwMCwgMHgwMiwgMHgwYywgMHg2NiwgMHgwMCwgMHgwMiwgMHgwYywgMHhjMCwgMHgwMH0gfSwKK3sgMHgwYTEwLAkxNiwJezB4MDIsIDB4MGMsIDB4YWEsIDB4MDAsIDB4MDIsIDB4MGEsIDB4ZWQsIDB4MDAsIDB4MDIsIDB4MGEsIDB4ZWUsIDB4MDAsIDB4MDIsIDB4MGEsIDB4ZWYsIDB4MDB9IH0sCit7IDB4MGEyMCwJMTYsCXsweDAyLCAweDBjLCAweGRiLCAweDAwLCAweDAyLCAweDBkLCAweGNiLCAweDAwLCAweDAyLCAweDBkLCAweDE3LCAweDAwLCAweDAyLCAweDBlLCAweDJiLCAweDAwfSB9LAoreyAweDBhMzAsCTE2LAl7MHgwMiwgMHgwZCwgMHg1MywgMHgwMCwgMHgwMiwgMHgwZSwgMHg4YiwgMHgwMCwgMHgwMiwgMHgwZCwgMHg4ZiwgMHgwMCwgMHgwMiwgMHgwZSwgMHhlYiwgMHgwMH0gfSwKK3sgMHgwYTQwLAkxNiwJezB4MDIsIDB4MGEsIDB4ZjAsIDB4MDAsIDB4MDIsIDB4MGEsIDB4ZjIsIDB4MDAsIDB4MDIsIDB4MGEsIDB4ZjEsIDB4MDAsIDB4MDIsIDB4MGEsIDB4ZjMsIDB4MDB9IH0sCit7IDB4MGE1MCwJOCwJezB4MDIsIDB4MGYsIDB4NGIsIDB4MDAsIDB4MDIsIDB4MGYsIDB4NjEsIDB4MDB9IH0sCit7IDB4MGE1OCwJMiwJezB4OGYsIDB4NGZ9IH0sCit7IDB4MGE1YSwJMTYsCXsweGU0LCAweGY1LCAweDUwLCAweDc1LCAweDUxLCAweGZmLCAweDc1LCAweDUyLCAweDEyLCAweDc1LCAweDUzLCAweDZhLCAweGFiLCAweDUxLCAweGFhLCAweDUyfSB9LAoreyAweDBhNmEsCTE2LAl7MHhhOSwgMHg1MywgMHg5MCwgMHgwMCwgMHgwMSwgMHgxMiwgMHhhMiwgMHg1NCwgMHhiNCwgMHgwMywgMHgxZCwgMHhhZiwgMHg1MCwgMHgwNSwgMHg1MCwgMHhlZn0gfSwKK3sgMHgwYTdhLAkxNiwJezB4YjUsIDB4NGYsIDB4MDEsIDB4MjIsIDB4MTIsIDB4YTIsIDB4M2IsIDB4N2UsIDB4MDAsIDB4MjksIDB4ZmYsIDB4ZWUsIDB4M2EsIDB4YTksIDB4MDcsIDB4NzV9IH0sCit7IDB4MGE4YSwJMTQsCXsweDUxLCAweGZmLCAweGY1LCAweDUyLCAweDg5LCAweDUzLCAweDgwLCAweGQ0LCAweDdiLCAweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDAwfSB9LAoreyAweDBhOTgsCTEsCXsweDIyfSB9LAoreyAweDBhOTksCTE2LAl7MHhlNCwgMHhmZSwgMHg3NSwgMHg1MSwgMHhmZiwgMHg3NSwgMHg1MiwgMHgxMiwgMHg3NSwgMHg1MywgMHgxMiwgMHhhYiwgMHg1MSwgMHhhYSwgMHg1MiwgMHhhOX0gfSwKK3sgMHgwYWE5LAkxNiwJezB4NTMsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4YTIsIDB4NTQsIDB4NjQsIDB4MDIsIDB4NzAsIDB4MmQsIDB4YWQsIDB4MDYsIDB4MGUsIDB4ZWQsIDB4YjV9IH0sCit7IDB4MGFiOSwJMTYsCXsweDA3LCAweDAxLCAweDIyLCAweDkwLCAweDAwLCAweDAyLCAweDEyLCAweGEyLCAweGFkLCAweDg1LCAweGYwLCAweDRmLCAweGY1LCAweDUwLCAweDYyLCAweDRmfSB9LAoreyAweDBhYzksCTE2LAl7MHhlNSwgMHg0ZiwgMHg2MiwgMHg1MCwgMHhlNSwgMHg1MCwgMHg2MiwgMHg0ZiwgMHgyOSwgMHhmZCwgMHhlNSwgMHg0ZiwgMHgzYSwgMHhhOSwgMHgwNSwgMHg3NX0gfSwKK3sgMHgwYWQ5LAkxNCwJezB4NTEsIDB4ZmYsIDB4ZjUsIDB4NTIsIDB4ODksIDB4NTMsIDB4ODAsIDB4YzMsIDB4N2IsIDB4MDAsIDB4N2EsIDB4MDAsIDB4NzksIDB4MDB9IH0sCit7IDB4MGFlNywJMSwJezB4MjJ9IH0sCit7IDB4MGFlOCwJNSwJezB4MTIsIDB4MDgsIDB4MjAsIDB4ZDMsIDB4MjJ9IH0sCit7IDB4MGFlZCwJMSwJezB4MzJ9IH0sCit7IDB4MGFlZSwJMSwJezB4MzJ9IH0sCit7IDB4MGFlZiwJMSwJezB4MzJ9IH0sCit7IDB4MGFmMCwJMSwJezB4MzJ9IH0sCit7IDB4MGFmMSwJMSwJezB4MzJ9IH0sCit7IDB4MGFmMiwJMSwJezB4MzJ9IH0sCit7IDB4MGFmMywJMSwJezB4MzJ9IH0sCit7IDB4MGFmNCwJMywJezB4MDAsIDB4MDQsIDB4MDd9IH0sCit7IDB4MGIwMCwJOSwJezB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ODAsIDB4NzR9IH0sCit7IDB4MGI3ZCwJMTYsCXsweDQzLCAweDg3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIyfSB9LAoreyAweDBiOGQsCTE2LAl7MHg1MywgMHg4ZSwgMHhmNywgMHhlNSwgMHg4OSwgMHg1NCwgMHhmMSwgMHg0NCwgMHgwMSwgMHhmNSwgMHg4OSwgMHg3NSwgMHg4YywgMHhiMSwgMHhkMiwgMHhhOX0gfSwKK3sgMHgwYjlkLAkxNiwJezB4NzUsIDB4OTgsIDB4NDAsIDB4NzUsIDB4Y2IsIDB4ZmYsIDB4NzUsIDB4Y2EsIDB4ZjMsIDB4NzUsIDB4YzgsIDB4MzQsIDB4ZTQsIDB4ZmYsIDB4N2YsIDB4MDV9IH0sCit7IDB4MGJhZCwJNywJezB4NzgsIDB4MjgsIDB4ZTQsIDB4ZjYsIDB4MDgsIDB4ZGYsIDB4ZmN9IH0sCit7IDB4MGJiNCwJMSwJezB4MjJ9IH0sCit7IDB4MGJiNSwJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweGQwLCAweDc1LCAweGQwLCAweDAwLCAweGMwLCAweDAwLCAweGMwLCAweDA2LCAweGMwfSB9LAoreyAweDBiYzUsCTEsCXsweDA3fSB9LAoreyAweDBiYzYsCTE2LAl7MHgzMCwgMHgwNCwgMHgxNiwgMHg3NSwgMHg4YywgMHhmOCwgMHg3NSwgMHg4YSwgMHgzMCwgMHg3ZiwgMHgyZiwgMHhhZSwgMHgwNywgMHgxZiwgMHhlZSwgMHg2MH0gfSwKK3sgMHgwYmQ2LAkxNiwJezB4M2MsIDB4OTAsIDB4MjAsIDB4MDAsIDB4NzQsIDB4NTUsIDB4ZjAsIDB4ODAsIDB4ZjIsIDB4NzUsIDB4OGMsIDB4YjEsIDB4N2YsIDB4MjgsIDB4ZWYsIDB4ZDN9IH0sCit7IDB4MGJlNiwJMTYsCXsweDk0LCAweDJjLCAweDUwLCAweDA5LCAweGE4LCAweDA3LCAweGU2LCAweDYwLCAweDAxLCAweDE2LCAweDBmLCAweDgwLCAweGYxLCAweDkwLCAweDAzLCAweDAwfSB9LAoreyAweDBiZjYsCTE2LAl7MHhlMCwgMHg2MCwgMHgwMiwgMHgxNCwgMHhmMCwgMHg5MCwgMHgwMSwgMHhjMCwgMHhlMCwgMHg3MCwgMHgwMiwgMHhhMywgMHhlMCwgMHg2MCwgMHgwZSwgMHg5MH0gfSwKK3sgMHgwYzA2LAkxMywJezB4MDEsIDB4YzEsIDB4ZTAsIDB4MjQsIDB4ZmYsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4YzAsIDB4ZTAsIDB4MzQsIDB4ZmYsIDB4ZjB9IH0sCit7IDB4MGMxMywJMTUsCXsweGQwLCAweDA3LCAweGQwLCAweDA2LCAweGQwLCAweDAwLCAweGQwLCAweGQwLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBjMjIsCTE2LAl7MHhkMiwgMHgwMCwgMHg3NSwgMHg4ZSwgMHgxMCwgMHgxMiwgMHgwOSwgMHgzMCwgMHhlNSwgMHgzMywgMHhjMywgMHg5NCwgMHgwMSwgMHg0MCwgMHgwOCwgMHg5MH0gfSwKK3sgMHgwYzMyLAkxNiwJezB4N2YsIDB4OTIsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4ODAsIDB4MDUsIDB4ZTQsIDB4OTAsIDB4N2YsIDB4OTIsIDB4ZjAsIDB4MTIsIDB4ODAsIDB4MDAsIDB4MTJ9IH0sCit7IDB4MGM0MiwJMTIsCXsweDBmLCAweDdkLCAweDEyLCAweDk0LCAweGY3LCAweDEyLCAweDFiLCAweDBjLCAweDEyLCAweDBiLCAweDhkLCAweDIyfSB9LAoreyAweDBjNGUsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhkMiwgMHgwMSwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMX0gfSwKK3sgMHgwYzVlLAk4LAl7MHhmMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwYzY2LAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4OTAsIDB4N2YsIDB4YzQsIDB4ZTQsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MGM3NiwJMTEsCXsweGFiLCAweDc0LCAweDA0LCAweGYwLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBjODEsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwMiwgMHhmMCwgMHg5MH0gfSwKK3sgMHgwYzkxLAkxNiwJezB4N2YsIDB4ZDgsIDB4ZTAsIDB4NzAsIDB4MGQsIDB4OTAsIDB4N2YsIDB4ZDksIDB4ZTAsIDB4NzAsIDB4MDcsIDB4ZTUsIDB4MmMsIDB4NzAsIDB4MDMsIDB4NzV9IH0sCit7IDB4MGNhMSwJOSwJezB4MmMsIDB4MTQsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9IH0sCit7IDB4MGNhYSwJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDEwLCAweGYwLCAweGQwfSB9LAoreyAweDBjYmEsCTYsCXsweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBjYzAsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHgzMCwgMHgwMiwgMHgwMiwgMHhkMiwgMHgwNiwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwY2QwLAkxMSwJezB4YWIsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9IH0sCit7IDB4MGNkYiwJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweGQwLCAweDc1LCAweGQwLCAweDEwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmfSB9LAoreyAweDBjZWIsCTE2LAl7MHhhOSwgMHg3NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHgzNCwgMHgzMCwgMHhlMCwgMHgxMywgMHhlNSwgMHgzMiwgMHgzMCwgMHhlMCwgMHgwNywgMHg5MCwgMHgyMH0gfSwKK3sgMHgwY2ZiLAkxNiwJezB4MDQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ZTUsIDB4MmMsIDB4NzAsIDB4MDN9IH0sCit7IDB4MGQwYiwJMTIsCXsweDc1LCAweDJjLCAweDE0LCAweGQwLCAweGQwLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBkMTcsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHhkMCwgMHg3NSwgMHhkMCwgMHgxMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwZDI3LAkxNiwJezB4YTksIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZTUsIDB4MzQsIDB4MzAsIDB4ZTEsIDB4MTMsIDB4ZTUsIDB4MzIsIDB4MzAsIDB4ZTEsIDB4MDcsIDB4OTAsIDB4MjB9IH0sCit7IDB4MGQzNywJMTYsCXsweDBjLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDIwLCAweDA5LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweGU1LCAweDJjLCAweDcwLCAweDAzfSB9LAoreyAweDBkNDcsCTEyLAl7MHg3NSwgMHgyYywgMHgxNCwgMHhkMCwgMHhkMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwZDUzLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ZDAsIDB4NzUsIDB4ZDAsIDB4MTAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MGQ2MywJMTYsCXsweGE5LCAweDc0LCAweDA4LCAweGYwLCAweGU1LCAweDM0LCAweDMwLCAweGUyLCAweDEzLCAweGU1LCAweDMyLCAweDMwLCAweGUyLCAweDA3LCAweDkwLCAweDIwfSB9LAoreyAweDBkNzMsCTE2LAl7MHgxNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHgyMCwgMHgxMSwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHhlNSwgMHgyYywgMHg3MCwgMHgwM30gfSwKK3sgMHgwZDgzLAkxMiwJezB4NzUsIDB4MmMsIDB4MTQsIDB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9IH0sCit7IDB4MGQ4ZiwJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweGQwLCAweDc1LCAweGQwLCAweDEwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmfSB9LAoreyAweDBkOWYsCTE2LAl7MHhhOSwgMHg3NCwgMHgxMCwgMHhmMCwgMHhlNSwgMHgzNCwgMHgzMCwgMHhlMywgMHgxMywgMHhlNSwgMHgzMiwgMHgzMCwgMHhlMywgMHgwNywgMHg5MCwgMHgyMH0gfSwKK3sgMHgwZGFmLAkxNiwJezB4MWMsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4MTksIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ZTUsIDB4MmMsIDB4NzAsIDB4MDN9IH0sCit7IDB4MGRiZiwJMTIsCXsweDc1LCAweDJjLCAweDE0LCAweGQwLCAweGQwLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBkY2IsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhjMH0gfSwKK3sgMHgwZGRiLAkxNiwJezB4ZDAsIDB4NzUsIDB4ZDAsIDB4MTAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWEsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4MzQsIDB4MjB9IH0sCit7IDB4MGRlYiwJMTYsCXsweGUwLCAweDA2LCAweDkwLCAweDdmLCAweGM3LCAweGYwLCAweDgwLCAweDIyLCAweGU1LCAweDMxLCAweDMwLCAweGUwLCAweDBhLCAweDkwLCAweDdmLCAweGM3fSB9LAoreyAweDBkZmIsCTE2LAl7MHhlMCwgMHg5MCwgMHgwMiwgMHhmOCwgMHhmMCwgMHg4MCwgMHgxMywgMHhlNSwgMHgyMiwgMHgzMCwgMHhlMCwgMHgwNywgMHg5MCwgMHgyMCwgMHgwNCwgMHhlMH0gfSwKK3sgMHgwZTBiLAkxNiwJezB4NDQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4MmMsIDB4NzAsIDB4MDMsIDB4NzUsIDB4MmN9IH0sCit7IDB4MGUxYiwJMTYsCXsweDE0LCAweGQwLCAweGQwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBlMmIsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhjMH0gfSwKK3sgMHgwZTNiLAkxNiwJezB4ZDAsIDB4NzUsIDB4ZDAsIDB4MTAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWEsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZTUsIDB4MzQsIDB4MjB9IH0sCit7IDB4MGU0YiwJMTYsCXsweGUxLCAweDA2LCAweDkwLCAweDdmLCAweGM5LCAweGYwLCAweDgwLCAweDIyLCAweGU1LCAweDMxLCAweDMwLCAweGUxLCAweDBhLCAweDkwLCAweDdmLCAweGM5fSB9LAoreyAweDBlNWIsCTE2LAl7MHhlMCwgMHg5MCwgMHgwMiwgMHhmOSwgMHhmMCwgMHg4MCwgMHgxMywgMHhlNSwgMHgyMiwgMHgzMCwgMHhlMSwgMHgwNywgMHg5MCwgMHgyMCwgMHgwYywgMHhlMH0gfSwKK3sgMHgwZTZiLAkxNiwJezB4NDQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4MDksIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4MmMsIDB4NzAsIDB4MDMsIDB4NzUsIDB4MmN9IH0sCit7IDB4MGU3YiwJMTYsCXsweDE0LCAweGQwLCAweGQwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBlOGIsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhjMH0gfSwKK3sgMHgwZTliLAkxNiwJezB4ZDAsIDB4NzUsIDB4ZDAsIDB4MTAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWEsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4ZTUsIDB4MzQsIDB4MjB9IH0sCit7IDB4MGVhYiwJMTYsCXsweGUyLCAweDA2LCAweDkwLCAweDdmLCAweGNiLCAweGYwLCAweDgwLCAweDIyLCAweGU1LCAweDMxLCAweDMwLCAweGUyLCAweDBhLCAweDkwLCAweDdmLCAweGNifSB9LAoreyAweDBlYmIsCTE2LAl7MHhlMCwgMHg5MCwgMHgwMiwgMHhmYSwgMHhmMCwgMHg4MCwgMHgxMywgMHhlNSwgMHgyMiwgMHgzMCwgMHhlMiwgMHgwNywgMHg5MCwgMHgyMCwgMHgxNCwgMHhlMH0gfSwKK3sgMHgwZWNiLAkxNiwJezB4NDQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4MTEsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4MmMsIDB4NzAsIDB4MDMsIDB4NzUsIDB4MmN9IH0sCit7IDB4MGVkYiwJMTYsCXsweDE0LCAweGQwLCAweGQwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBlZWIsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhjMH0gfSwKK3sgMHgwZWZiLAkxNiwJezB4ZDAsIDB4NzUsIDB4ZDAsIDB4MTAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWEsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4ZTUsIDB4MzQsIDB4MjB9IH0sCit7IDB4MGYwYiwJMTYsCXsweGUzLCAweDA2LCAweDkwLCAweDdmLCAweGNkLCAweGYwLCAweDgwLCAweDIyLCAweGU1LCAweDMxLCAweDMwLCAweGUzLCAweDBhLCAweDkwLCAweDdmLCAweGNkfSB9LAoreyAweDBmMWIsCTE2LAl7MHhlMCwgMHg5MCwgMHgwMiwgMHhmYiwgMHhmMCwgMHg4MCwgMHgxMywgMHhlNSwgMHgyMiwgMHgzMCwgMHhlMywgMHgwNywgMHg5MCwgMHgyMCwgMHgxYywgMHhlMH0gfSwKK3sgMHgwZjJiLAkxNiwJezB4NDQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4MTksIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ZTUsIDB4MmMsIDB4NzAsIDB4MDMsIDB4NzUsIDB4MmN9IH0sCit7IDB4MGYzYiwJMTYsCXsweDE0LCAweGQwLCAweGQwLCAweGQwLCAweDg2LCAweGQwLCAweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBmNGIsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhOSwgMHg3NCwgMHg4MCwgMHhmMCwgMHhkMH0gfSwKK3sgMHgwZjViLAk2LAl7MHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwZjYxLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWEsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4OTB9IH0sCit7IDB4MGY3MSwJMTIsCXsweDAxLCAweGJkLCAweDc0LCAweGZmLCAweGYwLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBmN2QsCTE2LAl7MHg5MCwgMHgwMSwgMHgyMCwgMHgxMiwgMHhhMywgMHhmYSwgMHgwMCwgMHgwMCwgMHgyNSwgMHg4MCwgMHg5MCwgMHgwMSwgMHgyNCwgMHg3NCwgMHgwOCwgMHhmMH0gfSwKK3sgMHgwZjhkLAkxNiwJezB4YTMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4NmUsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MTMsIDB4ZjAsIDB4YTMsIDB4NzR9IH0sCit7IDB4MGY5ZCwJMTYsCXsweDExLCAweGYwLCAweGU0LCAweGEzLCAweGYwLCAweGEzLCAweGYwLCAweDkwLCAweDAxLCAweDFlLCAweGYwLCAweDkwLCAweDAxLCAweDFlLCAweGUwLCAweGZmfSB9LAoreyAweDBmYWQsCTE2LAl7MHgwNCwgMHhhMywgMHhmMCwgMHhlZiwgMHg3NSwgMHhmMCwgMHgwZCwgMHhhNCwgMHgyNCwgMHgwMSwgMHhmOSwgMHg3NCwgMHgwMywgMHgzNSwgMHhmMCwgMHhhOH0gfSwKK3sgMHgwZmJkLAkxNiwJezB4MDEsIDB4ZmMsIDB4N2QsIDB4MDEsIDB4N2IsIDB4MDEsIDB4N2EsIDB4MDEsIDB4NzksIDB4MWYsIDB4N2UsIDB4MDAsIDB4N2YsIDB4MGQsIDB4MTIsIDB4YTJ9IH0sCit7IDB4MGZjZCwJMTYsCXsweDEyLCAweDdlLCAweDAxLCAweDdmLCAweDFmLCAweDEyLCAweDg3LCAweGE2LCAweDkwLCAweDAxLCAweDFlLCAweGUwLCAweDA0LCAweGYwLCAweGUwLCAweGMzfSB9LAoreyAweDBmZGQsCTE2LAl7MHg5NCwgMHgwNCwgMHg0MCwgMHhjNywgMHhlNCwgMHhmNSwgMHgyNywgMHg5MCwgMHgwMSwgMHgxZSwgMHhmMCwgMHg5MCwgMHgwMSwgMHgxZSwgMHhlMCwgMHhmZn0gfSwKK3sgMHgwZmVkLAkxNiwJezB4YzMsIDB4OTQsIDB4MDQsIDB4NTAsIDB4MWEsIDB4NzQsIDB4ZjgsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDIsIDB4ZjUsIDB4ODMsIDB4ZTR9IH0sCit7IDB4MGZmZCwJMTYsCXsweGYwLCAweDc0LCAweDIzLCAweDJmLCAweGY4LCAweGU0LCAweGY2LCAweDkwLCAweDAxLCAweDFlLCAweGUwLCAweDA0LCAweGYwLCAweDgwLCAweGRjLCAweGU0fSB9LAoreyAweDEwMGQsCTE2LAl7MHhmNSwgMHgzNCwgMHhlNSwgMHhjMCwgMHg2MCwgMHgyZiwgMHg5MCwgMHgwMSwgMHgxZSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHgwMSwgMHgxZSwgMHhlMH0gfSwKK3sgMHgxMDFkLAkxNiwJezB4ZmYsIDB4ZDMsIDB4OTQsIDB4MDQsIDB4NTAsIDB4MWYsIDB4ZWYsIDB4MTQsIDB4ZmYsIDB4NzQsIDB4MDEsIDB4YTgsIDB4MDcsIDB4MDgsIDB4ODAsIDB4MDJ9IH0sCit7IDB4MTAyZCwJMTYsCXsweGMzLCAweDMzLCAweGQ4LCAweGZjLCAweDQyLCAweDM0LCAweDdlLCAweDAxLCAweDdmLCAweDFlLCAweDEyLCAweDg0LCAweDQxLCAweDkwLCAweDAxLCAweDFlfSB9LAoreyAweDEwM2QsCTE2LAl7MHhlMCwgMHgwNCwgMHhmMCwgMHg4MCwgMHhkNywgMHhlNCwgMHhmNSwgMHgzZSwgMHhmNSwgMHgyMiwgMHhmNSwgMHgzMSwgMHhmNSwgMHgzMiwgMHg5MCwgMHgwMX0gfSwKK3sgMHgxMDRkLAkxNiwJezB4MWUsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4MWUsIDB4ZTAsIDB4ZmYsIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDYsIDB4ZjUsIDB4ODIsIDB4ZTR9IH0sCit7IDB4MTA1ZCwJMTYsCXsweDM0LCAweDIwLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGYwLCAweGZlLCAweDc0LCAweGM1LCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDAxfSB9LAoreyAweDEwNmQsCTE2LAl7MHhmNSwgMHg4MywgMHhlZSwgMHhmMCwgMHg3NCwgMHgzYSwgMHgyZiwgMHhmOCwgMHhhNiwgMHgwNiwgMHg3NCwgMHgzNiwgMHgyZiwgMHhmOCwgMHhlNCwgMHhmNn0gfSwKK3sgMHgxMDdkLAkxNiwJezB4NzQsIDB4MmQsIDB4MmYsIDB4ZjgsIDB4ZTQsIDB4ZjYsIDB4NzQsIDB4ZmMsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDIsIDB4ZjUsIDB4ODN9IH0sCit7IDB4MTA4ZCwJMTYsCXsweGU0LCAweGYwLCAweDkwLCAweDAxLCAweDFlLCAweGUwLCAweDA0LCAweGYwLCAweGUwLCAweGI0LCAweDA0LCAweGI2LCAweDkwLCAweDIwLCAweDYwLCAweGUwfSB9LAoreyAweDEwOWQsCTQsCXsweDU0LCAweDBmLCAweGY1LCAweDRlfSB9LAoreyAweDEwYTEsCTE2LAl7MHg3MCwgMHgwMywgMHgwMiwgMHgxMSwgMHgyNiwgMHhlNCwgMHg5MCwgMHgwMSwgMHgxZSwgMHhmMCwgMHg5MCwgMHgwMSwgMHgxZSwgMHhlMCwgMHhmZiwgMHhjM30gfSwKK3sgMHgxMGIxLAkxNiwJezB4OTQsIDB4MDQsIDB4NTAsIDB4ZTQsIDB4NzQsIDB4MDEsIDB4YTgsIDB4MDcsIDB4MDgsIDB4ODAsIDB4MDIsIDB4YzMsIDB4MzMsIDB4ZDgsIDB4ZmMsIDB4NTV9IH0sCit7IDB4MTBjMSwJMTYsCXsweDRlLCAweDYwLCAweDVhLCAweDkwLCAweDAxLCAweDFlLCAweGUwLCAweGZlLCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAyLCAweGY1LCAweDgyfSB9LAoreyAweDEwZDEsCTE2LAl7MHhlNCwgMHgzNCwgMHgyMCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlZSwgMHg3NSwgMHhmMCwgMHgwOCwgMHhhNCwgMHgyNCwgMHgwNSwgMHhmNSwgMHg4Mn0gfSwKK3sgMHgxMGUxLAkxNiwJezB4ZTQsIDB4MzQsIDB4MjAsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZWUsIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDYsIDB4ZjUsIDB4ODIsIDB4ZTR9IH0sCit7IDB4MTBmMSwJMTYsCXsweDM0LCAweDIwLCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGFmLCAweDA2LCAweGVlLCAweDc1LCAweGYwLCAweDBkLCAweGE0LCAweDI0LCAweDAyLCAweGY1fSB9LAoreyAweDExMDEsCTE2LAl7MHg4MiwgMHhlNCwgMHgzNCwgMHgwMywgMHhmNSwgMHg4MywgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHhmZCwgMHhhMywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMH0gfSwKK3sgMHgxMTExLAkxNiwJezB4ZjUsIDB4NjYsIDB4OGUsIDB4NjUsIDB4OGQsIDB4NjQsIDB4OGMsIDB4NjMsIDB4N2QsIDB4MDYsIDB4MTIsIDB4ODMsIDB4ZGYsIDB4OTAsIDB4MDEsIDB4MWV9IH0sCit7IDB4MTEyMSwJNiwJezB4ZTAsIDB4MDQsIDB4ZjAsIDB4ODAsIDB4ODUsIDB4MjJ9IH0sCit7IDB4MTEyNywJMiwJezB4YWMsIDB4MDd9IH0sCit7IDB4MTEyOSwJMTYsCXsweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0LCAweDgwLCAweGYwLCAweGVjLCAweDI1LCAweGUwLCAweDQ0LCAweDQxLCAweDkwLCAweDdmLCAweGE2LCAweGYwfSB9LAoreyAweDExMzksCTE2LAl7MHg3YiwgMHgzYywgMHhhZiwgMHgwMywgMHgxYiwgMHhlZiwgMHg3MCwgMHgxNiwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg5MH0gfSwKK3sgMHgxMTQ5LAkxNiwJezB4N2YsIDB4YTYsIDB4ZTAsIDB4ZmQsIDB4N2QsIDB4MzIsIDB4YWYsIDB4MDUsIDB4MWQsIDB4ZWYsIDB4NjAsIDB4ZDQsIDB4ODAsIDB4ZjgsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MTE1OSwJMTYsCXsweGE1LCAweGUwLCAweGZkLCAweDMwLCAweGUwLCAweGRjLCAweDIwLCAweGUxLCAweDA5LCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDdlLCAweGZmLCAweDdmfSB9LAoreyAweDExNjksCTE2LAl7MHhmOSwgMHgyMiwgMHhlZCwgMHgzMCwgMHhlMiwgMHgwYywgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg3ZSwgMHhmZiwgMHg3Zn0gfSwKK3sgMHgxMTc5LAkxNiwJezB4ZmEsIDB4MjIsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZTAsIDB4ZmQsIDB4N2IsIDB4MWV9IH0sCit7IDB4MTE4OSwJMTYsCXsweGFmLCAweDAzLCAweDFiLCAweGVmLCAweDcwLCAweDE2LCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDkwLCAweDdmLCAweGE2fSB9LAoreyAweDExOTksCTE2LAl7MHhlMCwgMHhmZCwgMHg3ZCwgMHgzMiwgMHhhZiwgMHgwNSwgMHgxZCwgMHhlZiwgMHg2MCwgMHg4NiwgMHg4MCwgMHhmOCwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMH0gfSwKK3sgMHgxMWE5LAkxNiwJezB4ZmQsIDB4MjAsIDB4ZTAsIDB4ZGMsIDB4N2IsIDB4M2MsIDB4YWYsIDB4MDMsIDB4MWIsIDB4ZWYsIDB4NzAsIDB4MTksIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTB9IH0sCit7IDB4MTFiOSwJMTYsCXsweDQ0LCAweDQwLCAweGYwLCAweDkwLCAweDdmLCAweGE2LCAweGUwLCAweGZkLCAweDdkLCAweDMyLCAweGFmLCAweDA1LCAweDFkLCAweGVmLCAweDcwLCAweDAzfSB9LAoreyAweDExYzksCTE2LAl7MHgwMiwgMHgxMSwgMHgyOSwgMHg4MCwgMHhmNSwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHhmZCwgMHgzMCwgMHhlMCwgMHhkOSwgMHgzMCwgMHhlMiwgMHgwOX0gfSwKK3sgMHgxMWQ5LAkxNiwJezB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4N2UsIDB4ZmYsIDB4N2YsIDB4ZmEsIDB4MjIsIDB4YzIsIDB4YWYsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDR9IH0sCit7IDB4MTFlOSwJMTIsCXsweDQwLCAweGYwLCAweDkwLCAweDdmLCAweGE2LCAweGUwLCAweGZkLCAweGQyLCAweGFmLCAweGZmLCAweDdlLCAweDAwfSB9LAoreyAweDExZjUsCTEsCXsweDIyfSB9LAoreyAweDEyMDAsCTE2LAl7MHgxMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHg0MCwgMHgxMCwgMHgwNywgMHgwMSwgMHg4MCwgMHg0MiwgMHgwMCwgMHgwMSwgMHgwMn0gfSwKK3sgMHgxMjEwLAkxNiwJezB4MDMsIDB4MDEsIDB4MDksIDB4MDIsIDB4NTgsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDQsIDB4ODAsIDB4M2MsIDB4MDksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MGF9IH0sCit7IDB4MTIyMCwJMTYsCXsweGZmLCAweGZmLCAweGZmLCAweDA1LCAweDA3LCAweDA1LCAweDgxLCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDAxLCAweDAyLCAweDQwfSB9LAoreyAweDEyMzAsCTE2LAl7MHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHg4MiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwMiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMH0gfSwKK3sgMHgxMjQwLAkxNiwJezB4MDcsIDB4MDUsIDB4ODMsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDMsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDV9IH0sCit7IDB4MTI1MCwJMTYsCXsweDg0LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDA0LCAweDAyLCAweDQwLCAweDAwLCAweDAwLCAweDA3LCAweDA1LCAweDg3LCAweDAyfSB9LAoreyAweDEyNjAsCTE2LAl7MHg0MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNSwgMHgwNywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMywgMHgwOSwgMHgwNCwgMHgyNCwgMHgwM30gfSwKK3sgMHgxMjcwLAkxNiwJezB4NDMsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NjMsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MjAsIDB4MDB9IH0sCit7IDB4MTI4MCwJMTYsCXsweDU0LCAweDAwLCAweDY1LCAweDAwLCAweDYzLCAweDAwLCAweDY4LCAweDAwLCAweDIwLCAweDAwLCAweDQ5LCAweDAwLCAweDZlLCAweDAwLCAweDYzLCAweDAwfSB9LAoreyAweDEyOTAsCTE2LAl7MHgyZSwgMHgwMCwgMHgxOCwgMHgwMywgMHg1NywgMHgwMCwgMHg2OCwgMHgwMCwgMHg2OSwgMHgwMCwgMHg3NCwgMHgwMCwgMHg2NSwgMHgwMCwgMHg0OCwgMHgwMH0gfSwKK3sgMHgxMmEwLAkxNiwJezB4NDUsIDB4MDAsIDB4NDEsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MWEsIDB4MDMsIDB4NTgsIDB4MDAsIDB4NTgsIDB4MDB9IH0sCit7IDB4MTJiMCwJMTYsCXsweDJkLCAweDAwLCAweDU4LCAweDAwLCAweDU4LCAweDAwLCAweDJkLCAweDAwLCAweDU4LCAweDAwLCAweDU4LCAweDAwLCAweDU4LCAweDAwLCAweDU4LCAweDAwfSB9LAoreyAweDEyYzAsCTE2LAl7MHg1OCwgMHgwMCwgMHg1OCwgMHgwMCwgMHgyYSwgMHgwMywgMHg0MywgMHgwMCwgMHg2ZiwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2NiwgMHgwMCwgMHg2OSwgMHgwMH0gfSwKK3sgMHgxMmQwLAkxNiwJezB4NjcsIDB4MDAsIDB4NzUsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NjksIDB4MDAsIDB4NmYsIDB4MDAsIDB4NmUsIDB4MDB9IH0sCit7IDB4MTJlMCwJMTYsCXsweDIwLCAweDAwLCAweDUzLCAweDAwLCAweDc0LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDZlLCAweDAwLCAweDY3LCAweDAwLCAweDIyLCAweDAzfSB9LAoreyAweDEyZjAsCTE2LAl7MHg0OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg3NCwgMHgwMCwgMHg2NSwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2NiwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2MywgMHgwMH0gfSwKK3sgMHgxMzAwLAkxNiwJezB4NjUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjcsIDB4MDB9IH0sCit7IDB4MTMxMCwJMiwJezB4MDAsIDB4MDB9IH0sCit7IDB4MTMxMiwJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweGYwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweDg1LCAweGMwLCAweDg0LCAweGMwLCAweDg2LCAweGMwLCAweGQwfSB9LAoreyAweDEzMjIsCTE2LAl7MHg3NSwgMHg4NiwgMHgwMCwgMHg3NSwgMHhkMCwgMHgxOCwgMHg5MCwgMHgyMCwgMHg2MCwgMHhlMCwgMHg1NCwgMHgwZiwgMHhmNSwgMHhmMCwgMHg3MCwgMHgxMX0gfSwKK3sgMHgxMzMyLAkxNiwJezB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ODYsIDB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODUsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZjAsIDB4ZDAsIDB4ZTB9IH0sCit7IDB4MTM0MiwJMTYsCXsweDMyLCAweDc1LCAweDg2LCAweDAwLCAweDEwLCAweGYwLCAweDBiLCAweDEwLCAweGYxLCAweDEyLCAweDEwLCAweGYyLCAweDE5LCAweDEwLCAweGYzLCAweDIwfSB9LAoreyAweDEzNTIsCTE2LAl7MHg4MCwgMHhkNCwgMHhlNSwgMHgyOCwgMHg3MCwgMHgwMywgMHg3NSwgMHgyOCwgMHgxNCwgMHgwMiwgMHgxMywgMHg3YywgMHhlNSwgMHgyOSwgMHg3MCwgMHgwM30gfSwKK3sgMHgxMzYyLAkxNiwJezB4NzUsIDB4MjksIDB4MTQsIDB4MDIsIDB4MTUsIDB4MGQsIDB4ZTUsIDB4MmEsIDB4NzAsIDB4MDMsIDB4NzUsIDB4MmEsIDB4MTQsIDB4MDIsIDB4MTYsIDB4OWV9IH0sCit7IDB4MTM3MiwJMTYsCXsweGU1LCAweDJiLCAweDcwLCAweDAzLCAweDc1LCAweDJiLCAweDE0LCAweDAyLCAweDE4LCAweDJmLCAweDkwLCAweDIwLCAweDAyLCAweGUwLCAweDU0LCAweDNmfSB9LAoreyAweDEzODIsCTE2LAl7MHgyMCwgMHhlMiwgMHgzYSwgMHgyMCwgMHhlMSwgMHgwYiwgMHgyMCwgMHhlNCwgMHgwYiwgMHgyMCwgMHhlNSwgMHgxNCwgMHg2MCwgMHgwOSwgMHgwMiwgMHgxM30gfSwKK3sgMHgxMzkyLAkxNiwJezB4NDMsIDB4MDIsIDB4MTQsIDB4NjUsIDB4MDIsIDB4MTMsIDB4NDMsIDB4NDMsIDB4ODIsIDB4MDQsIDB4ZTAsIDB4ZjUsIDB4M2EsIDB4MDIsIDB4MTMsIDB4NDN9IH0sCit7IDB4MTNhMiwJMTYsCXsweDQzLCAweDgyLCAweDA0LCAweGUwLCAweDQzLCAweDJkLCAweDAxLCAweDAyLCAweDEzLCAweDQzLCAweDUzLCAweDgyLCAweGY4LCAweDQzLCAweDgyLCAweDA1fSB9LAoreyAweDEzYjIsCTE2LAl7MHhlMCwgMHg0MiwgMHgzNiwgMHg1MywgMHg4MiwgMHhmYiwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHgwMiwgMHgxMywgMHg0MywgMHgzMCwgMHhlMSwgMHgwMn0gfSwKK3sgMHgxM2MyLAkxNiwJezB4ODAsIDB4ZTgsIDB4ZjUsIDB4ODUsIDB4ZTUsIDB4MzIsIDB4MzAsIDB4ZTAsIDB4MGEsIDB4NTMsIDB4ODIsIDB4ZjgsIDB4NDMsIDB4ODIsIDB4MDQsIDB4ZTB9IH0sCit7IDB4MTNkMiwJMTYsCXsweDU0LCAweGZlLCAweGYwLCAweGU1LCAweDg1LCAweDIwLCAweGUzLCAweDU2LCAweDkwLCAweDIwLCAweDUwLCAweDc0LCAweDAwLCAweGYwLCAweDkwLCAweDIwfSB9LAoreyAweDEzZTIsCTE2LAl7MHg1OCwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlMiwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlMywgMHgwNSwgMHg4Nn0gfSwKK3sgMHgxM2YyLAkxNiwJezB4OTAsIDB4N2UsIDB4ODAsIDB4MDUsIDB4ODYsIDB4ZTUsIDB4ODUsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4ODQsIDB4ZjAsIDB4MDUsIDB4ODYsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MTQwMiwJMTYsCXsweGU1LCAweGU1LCAweDNmLCAweGZkLCAweDAzLCAweDAzLCAweDAzLCAweGZlLCAweGYwLCAweGYwLCAweGYwLCAweGYwLCAweGYwLCAweGYwLCAweGYwLCAweGYwfSB9LAoreyAweDE0MTIsCTE2LAl7MHhkZSwgMHhmNiwgMHg5MCwgMHg3ZiwgMHhlMiwgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHgyMCwgMHg1OCwgMHg3NCwgMHgwMCwgMHhmMCwgMHg5MH0gfSwKK3sgMHgxNDIyLAkxNiwJezB4N2YsIDB4YjcsIDB4ZWQsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NDMsIDB4N2YsIDB4NDB9IH0sCit7IDB4MTQzMiwJMTYsCXsweDkwLCAweDdlLCAweDgwLCAweDA1LCAweDg2LCAweDkwLCAweDIwLCAweDAwLCAweGU1LCAweDg0LCAweGZlLCAweDI0LCAweDA1LCAweGZkLCAweDhkLCAweDg0fSB9LAoreyAweDE0NDIsCTE2LAl7MHhlMCwgMHg4ZSwgMHg4NCwgMHgzMCwgMHhlMCwgMHgwOSwgMHhlMCwgMHgwNSwgMHg4NiwgMHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHhkZiwgMHhlZiwgMHgwNX0gfSwKK3sgMHgxNDUyLAkxNiwJezB4ODYsIDB4YzMsIDB4NzQsIDB4NDAsIDB4OWYsIDB4OTAsIDB4N2YsIDB4YjcsIDB4ZjAsIDB4MDUsIDB4ODYsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjB9IH0sCit7IDB4MTQ2MiwJMTYsCXsweDAyLCAweDEzLCAweDQzLCAweDUzLCAweDJkLCAweGZhLCAweGU1LCAweDIzLCAweDYwLCAweDA4LCAweDc1LCAweDIzLCAweDAwLCAweGQyLCAweGU3LCAweGZlfSB9LAoreyAweDE0NzIsCTE2LAl7MHg4MCwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhjNywgMHhlMCwgMHhmZSwgMHg3MCwgMHgwMywgMHgwMiwgMHgxNCwgMHhmZiwgMHg5MCwgMHgyMCwgMHg1MCwgMHg3NH0gfSwKK3sgMHgxNDgyLAkxNiwJezB4MDAsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4NTgsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZTIsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4OTB9IH0sCit7IDB4MTQ5MiwJMTYsCXsweDdmLCAweGUzLCAweDA1LCAweDg2LCAweDkwLCAweDdlLCAweDQwLCAweDA1LCAweDg2LCAweGU1LCAweDg1LCAweGYwLCAweGEzLCAweGU1LCAweDg0LCAweGYwfSB9LAoreyAweDE0YTIsCTE2LAl7MHgwNSwgMHg4NiwgMHg5MCwgMHg3ZiwgMHhlNSwgMHhlZSwgMHgzMCwgMHhlNywgMHgwOCwgMHgwNSwgMHg4NiwgMHhlMCwgMHgyNCwgMHgzOCwgMHhmMCwgMHgwNX0gfSwKK3sgMHgxNGIyLAkxNiwJezB4ODYsIDB4ZWUsIDB4NTQsIDB4N2YsIDB4ZmUsIDB4NTQsIDB4MDcsIDB4ZmIsIDB4ZWUsIDB4NTQsIDB4NzgsIDB4NjAsIDB4MzAsIDB4MDMsIDB4MDMsIDB4MDN9IH0sCit7IDB4MTRjMiwJMTYsCXsweDMwLCAweGUzLCAweDA0LCAweDc0LCAweDA3LCAweDdiLCAweDA4LCAweGZkLCAweGZjLCAweGUwLCAweGUwLCAweGUwLCAweGUwLCAweGUwLCAweGUwLCAweGUwfSB9LAoreyAweDE0ZDIsCTE2LAl7MHhlMCwgMHhkZCwgMHhmNiwgMHhlYiwgMHhmZSwgMHg2MCwgMHgxOSwgMHhlYywgMHg2NCwgMHgwNywgMHg3MCwgMHgxMSwgMHg4YiwgMHgyMywgMHg5MCwgMHg3Zn0gfSwKK3sgMHgxNGUyLAkxNiwJezB4ZTIsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4NTgsIDB4NzQsIDB4MDAsIDB4ZjAsIDB4ODAsIDB4MWIsIDB4ZTAsIDB4ZGUsIDB4ZmR9IH0sCit7IDB4MTRmMiwJMTYsCXsweDkwLCAweDdmLCAweGUyLCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweDkwLCAweDIwLCAweDU4LCAweDc0LCAweDAwLCAweGYwLCAweDkwLCAweDIwLCAweDAxfSB9LAoreyAweDE1MDIsCTE2LAl7MHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjNywgMHhmMCwgMHgwMiwgMHgxMywgMHg0MywgMHg5MCwgMHgyMCwgMHgwYSwgMHhlMCwgMHg1NH0gfSwKK3sgMHgxNTEyLAkxNiwJezB4M2YsIDB4MjAsIDB4ZTIsIDB4M2EsIDB4MjAsIDB4ZTEsIDB4MGIsIDB4MjAsIDB4ZTQsIDB4MGIsIDB4MjAsIDB4ZTUsIDB4MTQsIDB4NjAsIDB4MDksIDB4MDJ9IH0sCit7IDB4MTUyMiwJMTYsCXsweDEzLCAweDQzLCAweDAyLCAweDE1LCAweGY2LCAweDAyLCAweDEzLCAweDQzLCAweDQzLCAweDgyLCAweDA0LCAweGUwLCAweGY1LCAweDNiLCAweDAyLCAweDEzfSB9LAoreyAweDE1MzIsCTE2LAl7MHg0MywgMHg0MywgMHg4MiwgMHgwNCwgMHhlMCwgMHg0MywgMHgyZSwgMHgwMSwgMHgwMiwgMHgxMywgMHg0MywgMHg1MywgMHg4MiwgMHhmOCwgMHg0MywgMHg4Mn0gfSwKK3sgMHgxNTQyLAkxNiwJezB4MDUsIDB4ZTAsIDB4NDIsIDB4MzcsIDB4NTMsIDB4ODIsIDB4ZmIsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NDMsIDB4MzAsIDB4ZTF9IH0sCit7IDB4MTU1MiwJMTYsCXsweDAyLCAweDgwLCAweGU4LCAweGY1LCAweDg1LCAweGU1LCAweDMyLCAweDMwLCAweGUxLCAweDBhLCAweDUzLCAweDgyLCAweGY4LCAweDQzLCAweDgyLCAweDA0fSB9LAoreyAweDE1NjIsCTE2LAl7MHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHhlNSwgMHg4NSwgMHgyMCwgMHhlMywgMHg1NiwgMHg5MCwgMHgyMCwgMHg1MCwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MH0gfSwKK3sgMHgxNTcyLAkxNiwJezB4MjAsIDB4NTgsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZTIsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZTMsIDB4MDV9IH0sCit7IDB4MTU4MiwJMTYsCXsweDg2LCAweDkwLCAweDdlLCAweDAwLCAweDA1LCAweDg2LCAweGU1LCAweDg1LCAweGYwLCAweGEzLCAweGU1LCAweDg0LCAweGYwLCAweDA1LCAweDg2LCAweDkwfSB9LAoreyAweDE1OTIsCTE2LAl7MHg3ZiwgMHhlNSwgMHhlNSwgMHg0MCwgMHhmZCwgMHgwMywgMHgwMywgMHgwMywgMHhmZSwgMHhmMCwgMHhmMCwgMHhmMCwgMHhmMCwgMHhmMCwgMHhmMCwgMHhmMH0gfSwKK3sgMHgxNWEyLAkxNiwJezB4ZjAsIDB4ZGUsIDB4ZjYsIDB4OTAsIDB4N2YsIDB4ZTIsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4NTgsIDB4NzQsIDB4MDAsIDB4ZjB9IH0sCit7IDB4MTViMiwJMTYsCXsweDkwLCAweDdmLCAweGI5LCAweGVkLCAweGYwLCAweDkwLCAweDIwLCAweDA5LCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweDAyLCAweDEzLCAweDQzLCAweDdmfSB9LAoreyAweDE1YzIsCTE2LAl7MHg0MCwgMHg5MCwgMHg3ZSwgMHgwMCwgMHgwNSwgMHg4NiwgMHg5MCwgMHgyMCwgMHgwOCwgMHhlNSwgMHg4NCwgMHhmZSwgMHgyNCwgMHgwNSwgMHhmZCwgMHg4ZH0gfSwKK3sgMHgxNWQyLAkxNiwJezB4ODQsIDB4ZTAsIDB4OGUsIDB4ODQsIDB4MzAsIDB4ZTAsIDB4MDksIDB4ZTAsIDB4MDUsIDB4ODYsIDB4ZjAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4ZGYsIDB4ZWZ9IH0sCit7IDB4MTVlMiwJMTYsCXsweDA1LCAweDg2LCAweGMzLCAweDc0LCAweDQwLCAweDlmLCAweDkwLCAweDdmLCAweGI5LCAweGYwLCAweDA1LCAweDg2LCAweGEzLCAweGUwLCAweDU0LCAweGZlfSB9LAoreyAweDE1ZjIsCTE2LAl7MHhmMCwgMHgwMiwgMHgxMywgMHg0MywgMHg1MywgMHgyZSwgMHhmYSwgMHhlNSwgMHgyNCwgMHg2MCwgMHgwOCwgMHg3NSwgMHgyNCwgMHgwMCwgMHhkMiwgMHhlN30gfSwKK3sgMHgxNjAyLAkxNiwJezB4ZmUsIDB4ODAsIDB4MGEsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZTAsIDB4ZmUsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTYsIDB4OTAsIDB4OTAsIDB4MjAsIDB4NTB9IH0sCit7IDB4MTYxMiwJMTYsCXsweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDIwLCAweDU4LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGUyLCAweGUwLCAweDQ0LCAweDQwLCAweGYwfSB9LAoreyAweDE2MjIsCTE2LAl7MHg5MCwgMHg3ZiwgMHhlMywgMHgwNSwgMHg4NiwgMHg5MCwgMHg3ZCwgMHhjMCwgMHgwNSwgMHg4NiwgMHhlNSwgMHg4NSwgMHhmMCwgMHhhMywgMHhlNSwgMHg4NH0gfSwKK3sgMHgxNjMyLAkxNiwJezB4ZjAsIDB4MDUsIDB4ODYsIDB4OTAsIDB4N2YsIDB4ZTUsIDB4ZWUsIDB4MzAsIDB4ZTcsIDB4MDgsIDB4MDUsIDB4ODYsIDB4ZTAsIDB4MjQsIDB4MzgsIDB4ZjB9IH0sCit7IDB4MTY0MiwJMTYsCXsweDA1LCAweDg2LCAweGVlLCAweDU0LCAweDdmLCAweGZlLCAweDU0LCAweDA3LCAweGZiLCAweGVlLCAweDU0LCAweDc4LCAweDYwLCAweDMwLCAweDAzLCAweDAzfSB9LAoreyAweDE2NTIsCTE2LAl7MHgwMywgMHgzMCwgMHhlMywgMHgwNCwgMHg3NCwgMHgwNywgMHg3YiwgMHgwOCwgMHhmZCwgMHhmYywgMHhlMCwgMHhlMCwgMHhlMCwgMHhlMCwgMHhlMCwgMHhlMH0gfSwKK3sgMHgxNjYyLAkxNiwJezB4ZTAsIDB4ZTAsIDB4ZGQsIDB4ZjYsIDB4ZWIsIDB4ZmUsIDB4NjAsIDB4MTksIDB4ZWMsIDB4NjQsIDB4MDcsIDB4NzAsIDB4MTEsIDB4OGIsIDB4MjQsIDB4OTB9IH0sCit7IDB4MTY3MiwJMTYsCXsweDdmLCAweGUyLCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweDkwLCAweDIwLCAweDU4LCAweDc0LCAweDAwLCAweGYwLCAweDgwLCAweDFiLCAweGUwLCAweGRlfSB9LAoreyAweDE2ODIsCTE0LAl7MHhmZCwgMHg5MCwgMHg3ZiwgMHhlMiwgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHgyMCwgMHg1OCwgMHg3NCwgMHgwMCwgMHhmMH0gfSwKK3sgMHgxNjkwLAkxNiwJezB4OTAsIDB4MjAsIDB4MDksIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NDMsIDB4OTAsIDB4MjB9IH0sCit7IDB4MTZhMCwJMTYsCXsweDEyLCAweGUwLCAweDU0LCAweDNmLCAweDIwLCAweGUyLCAweDNhLCAweDIwLCAweGUxLCAweDBiLCAweDIwLCAweGU0LCAweDBiLCAweDIwLCAweGU1LCAweDE0fSB9LAoreyAweDE2YjAsCTE2LAl7MHg2MCwgMHgwOSwgMHgwMiwgMHgxMywgMHg0MywgMHgwMiwgMHgxNywgMHg4NywgMHgwMiwgMHgxMywgMHg0MywgMHg0MywgMHg4MiwgMHgwNCwgMHhlMCwgMHhmNX0gfSwKK3sgMHgxNmMwLAkxNiwJezB4M2MsIDB4MDIsIDB4MTMsIDB4NDMsIDB4NDMsIDB4ODIsIDB4MDQsIDB4ZTAsIDB4NDMsIDB4MmYsIDB4MDEsIDB4MDIsIDB4MTMsIDB4NDMsIDB4NTMsIDB4ODJ9IH0sCit7IDB4MTZkMCwJMTYsCXsweGY4LCAweDQzLCAweDgyLCAweDA1LCAweGUwLCAweDQyLCAweDM4LCAweDUzLCAweDgyLCAweGZiLCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweDAyLCAweDEzfSB9LAoreyAweDE2ZTAsCTE2LAl7MHg0MywgMHgzMCwgMHhlMSwgMHgwMiwgMHg4MCwgMHhlOCwgMHhmNSwgMHg4NSwgMHhlNSwgMHgzMiwgMHgzMCwgMHhlMiwgMHgwYSwgMHg1MywgMHg4MiwgMHhmOH0gfSwKK3sgMHgxNmYwLAkxNiwJezB4NDMsIDB4ODIsIDB4MDQsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4ZTUsIDB4ODUsIDB4MjAsIDB4ZTMsIDB4NTYsIDB4OTAsIDB4MjAsIDB4NTAsIDB4NzR9IH0sCit7IDB4MTcwMCwJMTYsCXsweDAyLCAweGYwLCAweDkwLCAweDIwLCAweDU4LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGUyLCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDkwfSB9LAoreyAweDE3MTAsCTE2LAl7MHg3ZiwgMHhlMywgMHgwNSwgMHg4NiwgMHg5MCwgMHg3ZCwgMHg4MCwgMHgwNSwgMHg4NiwgMHhlNSwgMHg4NSwgMHhmMCwgMHhhMywgMHhlNSwgMHg4NCwgMHhmMH0gfSwKK3sgMHgxNzIwLAkxNiwJezB4MDUsIDB4ODYsIDB4OTAsIDB4N2YsIDB4ZTUsIDB4ZTUsIDB4NDEsIDB4ZmQsIDB4MDMsIDB4MDMsIDB4MDMsIDB4ZmUsIDB4ZjAsIDB4ZjAsIDB4ZjAsIDB4ZjB9IH0sCit7IDB4MTczMCwJMTYsCXsweGYwLCAweGYwLCAweGYwLCAweGYwLCAweGRlLCAweGY2LCAweDkwLCAweDdmLCAweGUyLCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweDkwLCAweDIwLCAweDU4fSB9LAoreyAweDE3NDAsCTE2LAl7MHg3NCwgMHgwMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiYiwgMHhlZCwgMHhmMCwgMHg5MCwgMHgyMCwgMHgxMSwgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHgwMn0gfSwKK3sgMHgxNzUwLAkxNiwJezB4MTMsIDB4NDMsIDB4N2YsIDB4NDAsIDB4OTAsIDB4N2QsIDB4ODAsIDB4MDUsIDB4ODYsIDB4OTAsIDB4MjAsIDB4MTAsIDB4ZTUsIDB4ODQsIDB4ZmUsIDB4MjR9IH0sCit7IDB4MTc2MCwJMTYsCXsweDA1LCAweGZkLCAweDhkLCAweDg0LCAweGUwLCAweDhlLCAweDg0LCAweDMwLCAweGUwLCAweDA5LCAweGUwLCAweDA1LCAweDg2LCAweGYwLCAweGEzLCAweDA1fSB9LAoreyAweDE3NzAsCTE2LAl7MHg4NiwgMHhkZiwgMHhlZiwgMHgwNSwgMHg4NiwgMHhjMywgMHg3NCwgMHg0MCwgMHg5ZiwgMHg5MCwgMHg3ZiwgMHhiYiwgMHhmMCwgMHgwNSwgMHg4NiwgMHhhM30gfSwKK3sgMHgxNzgwLAkxNiwJezB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NDMsIDB4NTMsIDB4MmYsIDB4ZmEsIDB4ZTUsIDB4MjUsIDB4NjAsIDB4MDgsIDB4NzUsIDB4MjV9IH0sCit7IDB4MTc5MCwJMTYsCXsweDAwLCAweGQyLCAweGU3LCAweGZlLCAweDgwLCAweDBhLCAweDkwLCAweDdmLCAweGNiLCAweGUwLCAweGZlLCAweDcwLCAweDAzLCAweDAyLCAweDE4LCAweDIxfSB9LAoreyAweDE3YTAsCTE2LAl7MHg5MCwgMHgyMCwgMHg1MCwgMHg3NCwgMHgwMiwgMHhmMCwgMHg5MCwgMHgyMCwgMHg1OCwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlMiwgMHhlMH0gfSwKK3sgMHgxN2IwLAkxNiwJezB4NDQsIDB4NDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZTMsIDB4MDUsIDB4ODYsIDB4OTAsIDB4N2QsIDB4NDAsIDB4MDUsIDB4ODYsIDB4ZTUsIDB4ODUsIDB4ZjB9IH0sCit7IDB4MTdjMCwJMTYsCXsweGEzLCAweGU1LCAweDg0LCAweGYwLCAweDA1LCAweDg2LCAweDkwLCAweDdmLCAweGU1LCAweGVlLCAweDMwLCAweGU3LCAweDA4LCAweDA1LCAweDg2LCAweGUwfSB9LAoreyAweDE3ZDAsCTE2LAl7MHgyNCwgMHgzOCwgMHhmMCwgMHgwNSwgMHg4NiwgMHhlZSwgMHg1NCwgMHg3ZiwgMHhmZSwgMHg1NCwgMHgwNywgMHhmYiwgMHhlZSwgMHg1NCwgMHg3OCwgMHg2MH0gfSwKK3sgMHgxN2UwLAkxNiwJezB4MzAsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MzAsIDB4ZTMsIDB4MDQsIDB4NzQsIDB4MDcsIDB4N2IsIDB4MDgsIDB4ZmQsIDB4ZmMsIDB4ZTAsIDB4ZTAsIDB4ZTB9IH0sCit7IDB4MTdmMCwJMTYsCXsweGUwLCAweGUwLCAweGUwLCAweGUwLCAweGUwLCAweGRkLCAweGY2LCAweGViLCAweGZlLCAweDYwLCAweDE5LCAweGVjLCAweDY0LCAweDA3LCAweDcwLCAweDExfSB9LAoreyAweDE4MDAsCTE2LAl7MHg4YiwgMHgyNSwgMHg5MCwgMHg3ZiwgMHhlMiwgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHgyMCwgMHg1OCwgMHg3NCwgMHgwMCwgMHhmMCwgMHg4MH0gfSwKK3sgMHgxODEwLAkxNiwJezB4MWIsIDB4ZTAsIDB4ZGUsIDB4ZmQsIDB4OTAsIDB4N2YsIDB4ZTIsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4NTgsIDB4NzQsIDB4MDB9IH0sCit7IDB4MTgyMCwJMTYsCXsweGYwLCAweDkwLCAweDIwLCAweDExLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDkwLCAweDdmLCAweGNiLCAweGYwLCAweDAyLCAweDEzLCAweDQzLCAweDkwfSB9LAoreyAweDE4MzAsCTE2LAl7MHgyMCwgMHgxYSwgMHhlMCwgMHg1NCwgMHgzZiwgMHgyMCwgMHhlMiwgMHgzYSwgMHgyMCwgMHhlMSwgMHgwYiwgMHgyMCwgMHhlNCwgMHgwYiwgMHgyMCwgMHhlNX0gfSwKK3sgMHgxODQwLAkxNiwJezB4MTQsIDB4NjAsIDB4MDksIDB4MDIsIDB4MTMsIDB4NDMsIDB4MDIsIDB4MTksIDB4MTgsIDB4MDIsIDB4MTMsIDB4NDMsIDB4NDMsIDB4ODIsIDB4MDQsIDB4ZTB9IH0sCit7IDB4MTg1MCwJMTYsCXsweGY1LCAweDNkLCAweDAyLCAweDEzLCAweDQzLCAweDQzLCAweDgyLCAweDA0LCAweGUwLCAweDQzLCAweDMwLCAweDAxLCAweDAyLCAweDEzLCAweDQzLCAweDUzfSB9LAoreyAweDE4NjAsCTE2LAl7MHg4MiwgMHhmOCwgMHg0MywgMHg4MiwgMHgwNSwgMHhlMCwgMHg0MiwgMHgzOSwgMHg1MywgMHg4MiwgMHhmYiwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHgwMn0gfSwKK3sgMHgxODcwLAkxNiwJezB4MTMsIDB4NDMsIDB4MzAsIDB4ZTEsIDB4MDIsIDB4ODAsIDB4ZTgsIDB4ZjUsIDB4ODUsIDB4ZTUsIDB4MzIsIDB4MzAsIDB4ZTMsIDB4MGEsIDB4NTMsIDB4ODJ9IH0sCit7IDB4MTg4MCwJMTYsCXsweGY4LCAweDQzLCAweDgyLCAweDA0LCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweGU1LCAweDg1LCAweDIwLCAweGUzLCAweDU2LCAweDkwLCAweDIwLCAweDUwfSB9LAoreyAweDE4OTAsCTE2LAl7MHg3NCwgMHgwMywgMHhmMCwgMHg5MCwgMHgyMCwgMHg1OCwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlMiwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMH0gfSwKK3sgMHgxOGEwLAkxNiwJezB4OTAsIDB4N2YsIDB4ZTMsIDB4MDUsIDB4ODYsIDB4OTAsIDB4N2QsIDB4MDAsIDB4MDUsIDB4ODYsIDB4ZTUsIDB4ODUsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4ODR9IH0sCit7IDB4MThiMCwJMTYsCXsweGYwLCAweDA1LCAweDg2LCAweDkwLCAweDdmLCAweGU1LCAweGU1LCAweDQyLCAweGZkLCAweDAzLCAweDAzLCAweDAzLCAweGZlLCAweGYwLCAweGYwLCAweGYwfSB9LAoreyAweDE4YzAsCTE2LAl7MHhmMCwgMHhmMCwgMHhmMCwgMHhmMCwgMHhmMCwgMHhkZSwgMHhmNiwgMHg5MCwgMHg3ZiwgMHhlMiwgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwgMHg5MCwgMHgyMH0gfSwKK3sgMHgxOGQwLAkxNiwJezB4NTgsIDB4NzQsIDB4MDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YmQsIDB4ZWQsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4MTksIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjB9IH0sCit7IDB4MThlMCwJMTYsCXsweDAyLCAweDEzLCAweDQzLCAweDdmLCAweDQwLCAweDkwLCAweDdkLCAweDAwLCAweDA1LCAweDg2LCAweDkwLCAweDIwLCAweDE4LCAweGU1LCAweDg0LCAweGZlfSB9LAoreyAweDE4ZjAsCTE2LAl7MHgyNCwgMHgwNSwgMHhmZCwgMHg4ZCwgMHg4NCwgMHhlMCwgMHg4ZSwgMHg4NCwgMHgzMCwgMHhlMCwgMHgwOSwgMHhlMCwgMHgwNSwgMHg4NiwgMHhmMCwgMHhhM30gfSwKK3sgMHgxOTAwLAkxNiwJezB4MDUsIDB4ODYsIDB4ZGYsIDB4ZWYsIDB4MDUsIDB4ODYsIDB4YzMsIDB4NzQsIDB4NDAsIDB4OWYsIDB4OTAsIDB4N2YsIDB4YmQsIDB4ZjAsIDB4MDUsIDB4ODZ9IH0sCit7IDB4MTkxMCwJMTYsCXsweGEzLCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweDAyLCAweDEzLCAweDQzLCAweDUzLCAweDMwLCAweGZhLCAweGU1LCAweDI2LCAweDYwLCAweDA4LCAweDc1fSB9LAoreyAweDE5MjAsCTE2LAl7MHgyNiwgMHgwMCwgMHhkMiwgMHhlNywgMHhmZSwgMHg4MCwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhjZCwgMHhlMCwgMHhmZSwgMHg3MCwgMHgwMywgMHgwMiwgMHgxOX0gfSwKK3sgMHgxOTMwLAkxNiwJezB4YjIsIDB4OTAsIDB4MjAsIDB4NTAsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4NTgsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZTJ9IH0sCit7IDB4MTk0MCwJMTYsCXsweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDkwLCAweDdmLCAweGUzLCAweDA1LCAweDg2LCAweDkwLCAweDdjLCAweGMwLCAweDA1LCAweDg2LCAweGU1LCAweDg1fSB9LAoreyAweDE5NTAsCTE2LAl7MHhmMCwgMHhhMywgMHhlNSwgMHg4NCwgMHhmMCwgMHgwNSwgMHg4NiwgMHg5MCwgMHg3ZiwgMHhlNSwgMHhlZSwgMHgzMCwgMHhlNywgMHgwOCwgMHgwNSwgMHg4Nn0gfSwKK3sgMHgxOTYwLAkxNiwJezB4ZTAsIDB4MjQsIDB4MzgsIDB4ZjAsIDB4MDUsIDB4ODYsIDB4ZWUsIDB4NTQsIDB4N2YsIDB4ZmUsIDB4NTQsIDB4MDcsIDB4ZmIsIDB4ZWUsIDB4NTQsIDB4Nzh9IH0sCit7IDB4MTk3MCwJMTYsCXsweDYwLCAweDMwLCAweDAzLCAweDAzLCAweDAzLCAweDMwLCAweGUzLCAweDA0LCAweDc0LCAweDA3LCAweDdiLCAweDA4LCAweGZkLCAweGZjLCAweGUwLCAweGUwfSB9LAoreyAweDE5ODAsCTE2LAl7MHhlMCwgMHhlMCwgMHhlMCwgMHhlMCwgMHhlMCwgMHhlMCwgMHhkZCwgMHhmNiwgMHhlYiwgMHhmZSwgMHg2MCwgMHgxOSwgMHhlYywgMHg2NCwgMHgwNywgMHg3MH0gfSwKK3sgMHgxOTkwLAkxNiwJezB4MTEsIDB4OGIsIDB4MjYsIDB4OTAsIDB4N2YsIDB4ZTIsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4OTAsIDB4MjAsIDB4NTgsIDB4NzQsIDB4MDAsIDB4ZjB9IH0sCit7IDB4MTlhMCwJMTYsCXsweDgwLCAweDFiLCAweGUwLCAweGRlLCAweGZkLCAweDkwLCAweDdmLCAweGUyLCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweDkwLCAweDIwLCAweDU4LCAweDc0fSB9LAoreyAweDE5YjAsCTE2LAl7MHgwMCwgMHhmMCwgMHg5MCwgMHgyMCwgMHgxOSwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjZCwgMHhmMCwgMHgwMiwgMHgxMywgMHg0M30gfSwKK3sgMHgxOWMwLAkxLAl7MHgzMn0gfSwKK3sgMHgxOWMxLAk0LAl7MHhhZCwgMHgwNywgMHhhYywgMHgwNn0gfSwKK3sgMHgxOWM1LAkxNiwJezB4NzksIDB4MDYsIDB4ZWQsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4M2MsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmEsIDB4YTMsIDB4ZTAsIDB4ZmJ9IH0sCit7IDB4MTlkNSwJMTYsCXsweDRhLCAweDcwLCAweDAzLCAweDAyLCAweDFiLCAweDA5LCAweGU5LCAweGI0LCAweDA3LCAweDAwLCAweDQwLCAweDAzLCAweDAyLCAweDFhLCAweGRiLCAweDkwfSB9LAoreyAweDE5ZTUsCTE2LAl7MHgxOSwgMHhlYiwgMHhmOCwgMHgyOCwgMHgyOCwgMHg3MywgMHgwMiwgMHgxYSwgMHhiOSwgMHgwMiwgMHgxYSwgMHg3MSwgMHgwMiwgMHgxYSwgMHg1YSwgMHgwMn0gfSwKK3sgMHgxOWY1LAkxNiwJezB4MWEsIDB4NDAsIDB4MDIsIDB4MWEsIDB4MmYsIDB4MDIsIDB4MWEsIDB4MWEsIDB4MDIsIDB4MWEsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDR9IH0sCit7IDB4MWEwNSwJMTYsCXsweDgwLCAweGYwLCAweDhkLCAweDgyLCAweDhjLCAweDgzLCAweGEzLCAweGUwLCAweGZmLCAweDI1LCAweGUwLCAweDQ0LCAweGEwLCAweDkwLCAweDdmLCAweGE2fSB9LAoreyAweDFhMTUsCTE2LAl7MHhmMCwgMHgxOSwgMHgwMiwgMHgxYSwgMHhkYiwgMHgxOSwgMHg4ZCwgMHg4MiwgMHg4YywgMHg4MywgMHhlMCwgMHhjMywgMHg5NCwgMHgyMCwgMHg0MCwgMHgwYX0gfSwKK3sgMHgxYTI1LAkxNiwJezB4YTMsIDB4YTMsIDB4ZTAsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZjAsIDB4MDIsIDB4MWEsIDB4ZGIsIDB4OGQsIDB4ODIsIDB4OGMsIDB4ODMsIDB4YTMsIDB4YTN9IH0sCit7IDB4MWEzNSwJMTYsCXsweGUwLCAweGEzLCAweGUwLCAweDkwLCAweDdmLCAweGE2LCAweGYwLCAweDE5LCAweDAyLCAweDFhLCAweGRiLCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0fSB9LAoreyAweDFhNDUsCTE2LAl7MHg4MCwgMHhmMCwgMHg4ZCwgMHg4MiwgMHg4YywgMHg4MywgMHhhMywgMHhlMCwgMHhmZiwgMHgyNSwgMHhlMCwgMHg0NCwgMHhhMSwgMHg5MCwgMHg3ZiwgMHhhNn0gfSwKK3sgMHgxYTU1LAkxNiwJezB4ZjAsIDB4MTksIDB4MDIsIDB4MWEsIDB4ZGIsIDB4ZWIsIDB4NjQsIDB4MDEsIDB4NGEsIDB4NzAsIDB4MDgsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDR9IH0sCit7IDB4MWE2NSwJMTYsCXsweDIwLCAweGYwLCAweDE5LCAweDkwLCAweDdmLCAweGE2LCAweGUwLCAweGY1LCAweDU5LCAweDE5LCAweDgwLCAweDZhLCAweGVkLCAweDI0LCAweDA0LCAweGY1fSB9LAoreyAweDFhNzUsCTE2LAl7MHg4MiwgMHhlNCwgMHgzYywgMHhmNSwgMHg4MywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHg2NCwgMHgwMiwgMHg0ZSwgMHg3MCwgMHgwOCwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgxYTg1LAkxNiwJezB4YTUsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4MTksIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZTAsIDB4ZmYsIDB4ZWQsIDB4MjQsIDB4MDYsIDB4ZjUsIDB4ODJ9IH0sCit7IDB4MWE5NSwJMTYsCXsweGU0LCAweDNjLCAweGY1LCAweDgzLCAweGU0LCAweDc1LCAweGYwLCAweDAxLCAweDEyLCAweGEyLCAweDk3LCAweDg1LCAweGYwLCAweDgyLCAweGY1LCAweDgzfSB9LAoreyAweDFhYTUsCTE2LAl7MHhlZiwgMHhmMCwgMHhlZCwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzYywgMHhmNSwgMHg4MywgMHg3NCwgMHhmZiwgMHhmNSwgMHhmMCwgMHgxMn0gfSwKK3sgMHgxYWI1LAkxNiwJezB4YTIsIDB4ODEsIDB4ODAsIDB4MjIsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZTAsIDB4ZmZ9IH0sCit7IDB4MWFjNSwJMTYsCXsweGVkLCAweDI0LCAweDA2LCAweGY1LCAweDgyLCAweGU0LCAweDNjLCAweGY1LCAweDgzLCAweGUwLCAweGZhLCAweGEzLCAweGUwLCAweGY1LCAweDgyLCAweDhhfSB9LAoreyAweDFhZDUsCTE2LAl7MHg4MywgMHhlZiwgMHhmMCwgMHg3ZiwgMHgwOCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHhmNSwgMHg1OSwgMHgzMCwgMHhlMCwgMHhmNywgMHgzMH0gfSwKK3sgMHgxYWU1LAkxNiwJezB4ZTIsIDB4MDcsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4N2YsIDB4MDYsIDB4MjIsIDB4ZTksIDB4ZDMsIDB4OTQsIDB4MDIsIDB4NTAsIDB4MDMsIDB4MDJ9IH0sCit7IDB4MWFmNSwJMTYsCXsweDE5LCAweGM3LCAweGU1LCAweDU5LCAweDMwLCAweGUxLCAweDAzLCAweDAyLCAweDE5LCAweGM3LCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0LCAweDQwfSB9LAoreyAweDFiMDUsCTYsCXsweGYwLCAweDdmLCAweDA3LCAweDIyLCAweDdmLCAweDA4fSB9LAoreyAweDFiMGIsCTEsCXsweDIyfSB9LAoreyAweDFiMGMsCTE2LAl7MHhlNSwgMHgzMywgMHhjMywgMHg5NCwgMHgwMSwgMHg1MCwgMHgxYywgMHg3ZiwgMHgwNSwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgwOSwgMHhhZSwgMHg3ZiwgMHgwMn0gfSwKK3sgMHgxYjFjLAkxNiwJezB4N2QsIDB4ZmYsIDB4MTIsIDB4ODIsIDB4ZWEsIDB4N2YsIDB4MDUsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MDksIDB4YWUsIDB4N2YsIDB4MDMsIDB4N2QsIDB4ZmZ9IH0sCit7IDB4MWIyYywJNCwJezB4MTIsIDB4ODIsIDB4ZWEsIDB4MjJ9IH0sCit7IDB4ODAwMCwJMTYsCXsweDdiLCAweGZmLCAweDdhLCAweDEyLCAweDc5LCAweDFiLCAweDkwLCAweDAwLCAweDA0LCAweDEyLCAweGEyLCAweDU0LCAweGZkLCAweDhiLCAweDUwLCAweDc1fSB9LAoreyAweDgwMTAsCTE2LAl7MHg1MSwgMHgxMiwgMHg3NSwgMHg1MiwgMHgyNCwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhlMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlMCwgMHhmMCwgMHhmNSwgMHg0ZX0gfSwKK3sgMHg4MDIwLAkxNiwJezB4ZjUsIDB4NGYsIDB4OTAsIDB4MDIsIDB4YWUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZGUsIDB4ZjAsIDB4OTAsIDB4N2Z9IH0sCit7IDB4ODAzMCwJMTYsCXsweGE5LCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGFhLCAweGYwLCAweGU0LCAweGZjLCAweGVjLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1fSB9LAoreyAweDgwNDAsCTE2LAl7MHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHgwYywgMHhiYywgMHgxMCwgMHhlZSwgMHhlNCwgMHg5MCwgMHg3ZiwgMHhkZH0gfSwKK3sgMHg4MDUwLAkxNiwJezB4ZjAsIDB4YWYsIDB4MDUsIDB4MWQsIDB4ZWYsIDB4NzAsIDB4MDMsIDB4MDIsIDB4ODEsIDB4YzYsIDB4YWIsIDB4NTAsIDB4YWEsIDB4NTEsIDB4YTksIDB4NTJ9IH0sCit7IDB4ODA2MCwJMTYsCXsweDkwLCAweDAwLCAweDAxLCAweDEyLCAweGEyLCAweDU0LCAweDY0LCAweDA1LCAweDYwLCAweDAzLCAweDAyLCAweDgxLCAweGI1LCAweDkwLCAweDAwLCAweDAzfSB9LAoreyAweDgwNzAsCTE2LAl7MHgxMiwgMHhhMiwgMHg1NCwgMHg2NCwgMHgwMSwgMHg2MCwgMHgwMywgMHgwMiwgMHg4MSwgMHgzYywgMHg5MCwgMHgwMCwgMHgwMiwgMHgxMiwgMHhhMiwgMHg1NH0gfSwKK3sgMHg4MDgwLAkxNiwJezB4ZmYsIDB4NTQsIDB4N2YsIDB4ZmMsIDB4ZDMsIDB4OTQsIDB4MDcsIDB4NTAsIDB4MDMsIDB4MDIsIDB4ODEsIDB4MTYsIDB4ZWMsIDB4YzMsIDB4OTQsIDB4MTB9IH0sCit7IDB4ODA5MCwJMTYsCXsweDQwLCAweDAzLCAweDAyLCAweDgxLCAweDE2LCAweGVmLCAweDMwLCAweGU3LCAweDQyLCAweGU1LCAweDRmLCAweGFlLCAweDRlLCAweDc4LCAweDAyLCAweGNlfSB9LAoreyAweDgwYTAsCTE2LAl7MHhjMywgMHgxMywgMHhjZSwgMHgxMywgMHhkOCwgMHhmOSwgMHhmZiwgMHg3NCwgMHhmMCwgMHgyYywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNX0gfSwKK3sgMHg4MGIwLAkxNiwJezB4ODMsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZTAsIDB4ZTAsIDB4ZmYsIDB4ZWMsIDB4MjQsIDB4ZjgsIDB4ZmUsIDB4NzQsIDB4MDEsIDB4YTgsIDB4MDZ9IH0sCit7IDB4ODBjMCwJMTYsCXsweDA4LCAweDgwLCAweDAyLCAweGMzLCAweDMzLCAweGQ4LCAweGZjLCAweDRmLCAweDkwLCAweDdmLCAweGUwLCAweGYwLCAweDkwLCAweDAyLCAweGFlLCAweGUwfSB9LAoreyAweDgwZDAsCTE2LAl7MHgwNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhkZCwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg4MCwgMHgzZSwgMHhlNSwgMHg0ZiwgMHhhZSwgMHg0ZSwgMHg3OH0gfSwKK3sgMHg4MGUwLAkxNiwJezB4MDIsIDB4Y2UsIDB4YzMsIDB4MTMsIDB4Y2UsIDB4MTMsIDB4ZDgsIDB4ZjksIDB4ZmYsIDB4NzQsIDB4ZTgsIDB4MmMsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzR9IH0sCit7IDB4ODBmMCwJMTYsCXsweDdmLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDkwLCAweDdmLCAweGUxLCAweGUwLCAweGZmLCAweGVjLCAweDI0LCAweGY4LCAweGZlLCAweDc0LCAweDAxfSB9LAoreyAweDgxMDAsCTE2LAl7MHhhOCwgMHgwNiwgMHgwOCwgMHg4MCwgMHgwMiwgMHhjMywgMHgzMywgMHhkOCwgMHhmYywgMHg0ZiwgMHg5MCwgMHg3ZiwgMHhlMSwgMHhmMCwgMHg5MCwgMHgwMn0gfSwKK3sgMHg4MTEwLAkxNiwJezB4YWUsIDB4ZTAsIDB4MDQsIDB4ZjAsIDB4ODAsIDB4MDMsIDB4N2YsIDB4ZmYsIDB4MjIsIDB4OTAsIDB4MDAsIDB4MDQsIDB4MTIsIDB4YTIsIDB4NTQsIDB4MjV9IH0sCit7IDB4ODEyMCwJMTYsCXsweDRmLCAweGY1LCAweDRmLCAweGU0LCAweDM1LCAweDRlLCAweGY1LCAweDRlLCAweDkwLCAweDAwLCAweDA1LCAweDEyLCAweGEyLCAweDU0LCAweGZlLCAweGU0fSB9LAoreyAweDgxMzAsCTE2LAl7MHgyNSwgMHg0ZiwgMHhmNSwgMHg0ZiwgMHhlZSwgMHgzNSwgMHg0ZSwgMHhmNSwgMHg0ZSwgMHgwMiwgMHg4MSwgMHhiOCwgMHhhYiwgMHg1MCwgMHhhYSwgMHg1MX0gfSwKK3sgMHg4MTQwLAkxNiwJezB4YTksIDB4NTIsIDB4OTAsIDB4MDAsIDB4MDMsIDB4MTIsIDB4YTIsIDB4NTQsIDB4ZmYsIDB4NjQsIDB4MDIsIDB4NjAsIDB4MDUsIDB4ZWYsIDB4NjQsIDB4MDN9IH0sCit7IDB4ODE1MCwJMTYsCXsweDcwLCAweDYwLCAweDkwLCAweDAwLCAweDAyLCAweDEyLCAweGEyLCAweDU0LCAweGZmLCAweDU0LCAweDdmLCAweGZjLCAweGQzLCAweDk0LCAweDA3LCAweDUwfSB9LAoreyAweDgxNjAsCTE2LAl7MHg0ZSwgMHhlZiwgMHgzMCwgMHhlNywgMHgxZSwgMHg5MCwgMHg3ZiwgMHhkZSwgMHhlMCwgMHhmZiwgMHg3NCwgMHgwMSwgMHhhOCwgMHgwNCwgMHgwOCwgMHg4MH0gfSwKK3sgMHg4MTcwLAkxNiwJezB4MDIsIDB4YzMsIDB4MzMsIDB4ZDgsIDB4ZmMsIDB4ZmUsIDB4NGYsIDB4OTAsIDB4N2YsIDB4ZGUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YWMsIDB4ZTAsIDB4NGV9IH0sCit7IDB4ODE4MCwJMTYsCXsweGYwLCAweDgwLCAweDM1LCAweDkwLCAweDdmLCAweGRmLCAweGUwLCAweGZmLCAweDc0LCAweDAxLCAweGE4LCAweDA0LCAweDA4LCAweDgwLCAweDAyLCAweGMzfSB9LAoreyAweDgxOTAsCTE2LAl7MHgzMywgMHhkOCwgMHhmYywgMHhmZSwgMHg0ZiwgMHg5MCwgMHg3ZiwgMHhkZiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZCwgMHhlMCwgMHg0ZSwgMHhmMCwgMHhlY30gfSwKK3sgMHg4MWEwLAkxNiwJezB4MjUsIDB4ZTAsIDB4MjQsIDB4YzUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZWMsIDB4ZjAsIDB4ODAsIDB4MDksIDB4N2Z9IH0sCit7IDB4ODFiMCwJMTYsCXsweGZmLCAweDIyLCAweDdmLCAweGZmLCAweDIyLCAweDdmLCAweGZmLCAweDIyLCAweDc0LCAweDA3LCAweDI1LCAweDUyLCAweGY1LCAweDUyLCAweGU0LCAweDM1fSB9LAoreyAweDgxYzAsCTE2LAl7MHg1MSwgMHhmNSwgMHg1MSwgMHgwMiwgMHg4MCwgMHg1MSwgMHgyMCwgMHgwMywgMHgwZCwgMHg5MCwgMHgwMiwgMHhhZSwgMHhlMCwgMHg2MCwgMHgwNywgMHg5MH0gfSwKK3sgMHg4MWQwLAk4LAl7MHg3ZiwgMHhhZSwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg4MWQ4LAkxLAl7MHgyMn0gfSwKK3sgMHg4MWQ5LAk0LAl7MHg4ZSwgMHg1OSwgMHg4ZiwgMHg1YX0gfSwKK3sgMHg4MWRkLAkxNiwJezB4NzUsIDB4NWIsIDB4MDMsIDB4ZTUsIDB4NWEsIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTksIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmV9IH0sCit7IDB4ODFlZCwJMTYsCXsweGEzLCAweGUwLCAweDRlLCAweDcwLCAweDAzLCAweDAyLCAweDgyLCAweGU3LCAweGU1LCAweDViLCAweDYwLCAweDRlLCAweDE0LCAweDYwLCAweDM4LCAweDE0fSB9LAoreyAweDgxZmQsCTE2LAl7MHg2MCwgMHgyMCwgMHgxNCwgMHg2MCwgMHgwMywgMHgwMiwgMHg4MiwgMHg4YiwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg4NX0gfSwKK3sgMHg4MjBkLAkxNiwJezB4NWEsIDB4ODIsIDB4ODUsIDB4NTksIDB4ODMsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4MjUsIDB4ZTAsIDB4NDQsIDB4YTAsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZjB9IH0sCit7IDB4ODIxZCwJMTYsCXsweDgwLCAweDZjLCAweDg1LCAweDVhLCAweDgyLCAweDg1LCAweDU5LCAweDgzLCAweGUwLCAweGMzLCAweDk0LCAweDIwLCAweDQwLCAweDA5LCAweGEzLCAweGEzfSB9LAoreyAweDgyMmQsCTE2LAl7MHhlMCwgMHg5MCwgMHg3ZiwgMHhhNiwgMHhmMCwgMHg4MCwgMHg1NywgMHgxNSwgMHg1YiwgMHg4NSwgMHg1YSwgMHg4MiwgMHg4NSwgMHg1OSwgMHg4MywgMHhhM30gfSwKK3sgMHg4MjNkLAkxNiwJezB4YTMsIDB4ZTAsIDB4YTMsIDB4ZTAsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZjAsIDB4ODAsIDB4NDQsIDB4ZTUsIDB4NWEsIDB4MjQsIDB4MDYsIDB4ZjUsIDB4ODJ9IH0sCit7IDB4ODI0ZCwJMTYsCXsweGU0LCAweDM1LCAweDU5LCAweGY1LCAweDgzLCAweGU0LCAweDc1LCAweGYwLCAweDAxLCAweDEyLCAweGEyLCAweDk3LCAweDg1LCAweGYwLCAweDgyLCAweGY1fSB9LAoreyAweDgyNWQsCTE2LAl7MHg4MywgMHhlMCwgMHg5MCwgMHg3ZiwgMHhhNiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHhlNSwgMHg1YSwgMHgyNH0gfSwKK3sgMHg4MjZkLAkxNiwJezB4MDQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTksIDB4ZjUsIDB4ODMsIDB4NzQsIDB4ZmYsIDB4ZjUsIDB4ZjAsIDB4MTIsIDB4YTIsIDB4ODEsIDB4ODV9IH0sCit7IDB4ODI3ZCwJMTYsCXsweDVhLCAweDgyLCAweDg1LCAweDU5LCAweDgzLCAweGEzLCAweGEzLCAweGU0LCAweDc1LCAweGYwLCAweDAxLCAweDEyLCAweGEyLCAweDgxLCAweDkwLCAweDdmfSB9LAoreyAweDgyOGQsCTE2LAl7MHhhNSwgMHhlMCwgMHhmNSwgMHg1YywgMHgzMCwgMHhlMCwgMHhmNywgMHgzMCwgMHhlMiwgMHgwNywgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg3ZiwgMHgwNn0gfSwKK3sgMHg4MjlkLAkxNiwJezB4MjIsIDB4ZTUsIDB4NWMsIDB4MjAsIDB4ZTEsIDB4MGEsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4N2YsIDB4MDcsIDB4MjJ9IH0sCit7IDB4ODJhZCwJMTYsCXsweGU1LCAweDViLCAweDcwLCAweDMxLCAweDdmLCAweDAxLCAweDdlLCAweDAwLCAweDEyLCAweDA5LCAweGFlLCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0fSB9LAoreyAweDgyYmQsCTE2LAl7MHg4MCwgMHhmMCwgMHg4NSwgMHg1YSwgMHg4MiwgMHg4NSwgMHg1OSwgMHg4MywgMHhhMywgMHhlMCwgMHhmZiwgMHgyNSwgMHhlMCwgMHg0NCwgMHhhMCwgMHg5MH0gfSwKK3sgMHg4MmNkLAkxNiwJezB4N2YsIDB4YTYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4ZjUsIDB4NWMsIDB4MzAsIDB4ZTAsIDB4ZjcsIDB4MzAsIDB4ZTEsIDB4ZDUsIDB4NzV9IH0sCit7IDB4ODJkZCwJMTIsCXsweDViLCAweDAzLCAweDAyLCAweDgxLCAweGUwLCAweDE1LCAweDViLCAweDAyLCAweDgxLCAweGUwLCAweDdmLCAweDA4fSB9LAoreyAweDgyZTksCTEsCXsweDIyfSB9LAoreyAweDgyZWEsCTIsCXsweGFlLCAweDA3fSB9LAoreyAweDgyZWMsCTE2LAl7MHg3YywgMHgwMiwgMHhlYywgMHgxNCwgMHg2MCwgMHgxNSwgMHgxNCwgMHg3MCwgMHgxZSwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMH0gfSwKK3sgMHg4MmZjLAkxNiwJezB4ZWUsIDB4MjUsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZjAsIDB4ODAsIDB4MGMsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZWQsIDB4ZjB9IH0sCit7IDB4ODMwYywJMTYsCXsweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweGZiLCAweDMwLCAweGUwLCAweGY4LCAweGJjfSB9LAoreyAweDgzMWMsCTE2LAl7MHgwMiwgMHgwYSwgMHgyMCwgMHhlMSwgMHgwNywgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg3ZiwgMHgwNywgMHgyMiwgMHhlYiwgMHgzMCwgMHhlMiwgMHgwYX0gfSwKK3sgMHg4MzJjLAkxNCwJezB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4N2YsIDB4MDYsIDB4MjIsIDB4ZGMsIDB4YjYsIDB4N2YsIDB4MDh9IH0sCit7IDB4ODMzYSwJMSwJezB4MjJ9IH0sCit7IDB4ODMzYiwJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMyLCAweGE5LCAweDkwLCAweDAzLCAweDAwLCAweDc0LCAweDE5LCAweGYwLCAweGQyLCAweGE5fSB9LAoreyAweDgzNGIsCTE1LAl7MHg1MywgMHg5MSwgMHg3ZiwgMHg5MCwgMHgwMSwgMHhjNCwgMHhlNCwgMHhmMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHg4MzVhLAkxNiwJezB4ZWYsIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MjAsIDB4YWIsIDB4ODIsIDB4ZmEsIDB4ZjV9IH0sCit7IDB4ODM2YSwJMTYsCXsweDgzLCAweGEzLCAweGU0LCAweGYwLCAweDhiLCAweDgyLCAweDhhLCAweDgzLCAweGEzLCAweGEzLCAweGEzLCAweGUwLCAweGY1LCAweDYxLCAweDc0LCAweGJmfSB9LAoreyAweDgzN2EsCTE2LAl7MHhmMCwgMHg4YiwgMHg4MiwgMHg4YSwgMHg4MywgMHhhMywgMHhhMywgMHhlMCwgMHg0NCwgMHgxMCwgMHhmMCwgMHg4YiwgMHg4MiwgMHg4YSwgMHg4MywgMHhhM30gfSwKK3sgMHg4MzhhLAkxNiwJezB4YTMsIDB4YTMsIDB4ZTQsIDB4ZjAsIDB4OGIsIDB4ODIsIDB4OGEsIDB4ODMsIDB4YTMsIDB4ZjAsIDB4ZjksIDB4ZWQsIDB4NjAsIDB4MWQsIDB4NzQsIDB4MDF9IH0sCit7IDB4ODM5YSwJMTYsCXsweDdlLCAweDAwLCAweGE4LCAweDA3LCAweDA4LCAweDgwLCAweDA1LCAweGMzLCAweDMzLCAweGNlLCAweDMzLCAweGNlLCAweGQ4LCAweGY5LCAweGZmLCAweGU0fSB9LAoreyAweDgzYWEsCTE2LAl7MHhlZiwgMHg1NSwgMHgzMSwgMHg2MCwgMHgwNCwgMHg3OSwgMHgwOSwgMHg4MCwgMHgwMiwgMHg3OSwgMHgwZCwgMHg4YiwgMHg4MiwgMHg4YSwgMHg4MywgMHhhM30gfSwKK3sgMHg4M2JhLAkxNiwJezB4YTMsIDB4YTMsIDB4NzQsIDB4YmYsIDB4ZjAsIDB4OGIsIDB4ODIsIDB4OGEsIDB4ODMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4ZWYsIDB4ZjAsIDB4OGJ9IH0sCit7IDB4ODNjYSwJMTYsCXsweDgyLCAweDhhLCAweDgzLCAweGEzLCAweGEzLCAweGEzLCAweGU1LCAweDYxLCAweGYwLCAweGFlLCAweDAyLCAweGFmLCAweDAzLCAweDhmLCAweDgyLCAweDhlfSB9LAoreyAweDgzZGEsCTQsCXsweDgzLCAweGEzLCAweGU5LCAweGYwfSB9LAoreyAweDgzZGUsCTEsCXsweDIyfSB9LAoreyAweDgzZGYsCTQsCXsweDhmLCAweDYxLCAweDhkLCAweDYyfSB9LAoreyAweDgzZTMsCTE2LAl7MHhlNCwgMHhmNSwgMHg2NywgMHg3NCwgMHgzZiwgMHgyZiwgMHhmOCwgMHg3NiwgMHgwOCwgMHg3ZiwgMHg4MCwgMHg3ZSwgMHgyNSwgMHg3ZCwgMHgwMCwgMHg3Y30gfSwKK3sgMHg4M2YzLAkxNiwJezB4MDAsIDB4YWIsIDB4NjYsIDB4YWEsIDB4NjUsIDB4YTksIDB4NjQsIDB4YTgsIDB4NjMsIDB4ZDMsIDB4MTIsIDB4YTMsIDB4YjMsIDB4NDAsIDB4MjYsIDB4N2Z9IH0sCit7IDB4ODQwMywJMTYsCXsweDAwLCAweDdlLCAweDk2LCAweDdkLCAweDAwLCAweDdjLCAweDAwLCAweGE4LCAweDYzLCAweGQzLCAweDEyLCAweGEzLCAweGIzLCAweDUwLCAweDBjLCAweDc1fSB9LAoreyAweDg0MTMsCTE2LAl7MHg2NywgMHg0MCwgMHg3NCwgMHgzZiwgMHgyNSwgMHg2MSwgMHhmOCwgMHg3NiwgMHgxMCwgMHg4MCwgMHgwYSwgMHg3NSwgMHg2NywgMHg4MCwgMHg3NCwgMHgzZn0gfSwKK3sgMHg4NDIzLAkxNiwJezB4MjUsIDB4NjEsIDB4ZjgsIDB4NzYsIDB4MzgsIDB4ZTUsIDB4NjcsIDB4NDUsIDB4NjIsIDB4NDQsIDB4MDEsIDB4ZmYsIDB4ZTUsIDB4NjEsIDB4NzUsIDB4ZjB9IH0sCit7IDB4ODQzMywJMTMsCXsweDA4LCAweGE0LCAweDI0LCAweDAyLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwLCAweGY1LCAweDgzLCAweGVmLCAweGYwfSB9LAoreyAweDg0NDAsCTEsCXsweDIyfSB9LAoreyAweDg0NDEsCTE2LAl7MHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHgxNCwgMHhmNSwgMHg1NywgMHhjMywgMHg5NCwgMHgwNCwgMHg0MCwgMHgwMywgMHg3ZiwgMHhmZiwgMHgyMn0gfSwKK3sgMHg4NDUxLAkxNiwJezB4ZTUsIDB4NTcsIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MjAsIDB4YWYsIDB4ODIsIDB4ZjV9IH0sCit7IDB4ODQ2MSwJMTYsCXsweDU4LCAweDhmLCAweDU5LCAweGU1LCAweDU3LCAweDI1LCAweGUwLCAweDI0LCAweGM2LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzfSB9LAoreyAweDg0NzEsCTE2LAl7MHhlMCwgMHgyMCwgMHhlMSwgMHgwZiwgMHhlNSwgMHg1NywgMHgyNSwgMHhlMCwgMHgyNCwgMHhjNywgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNX0gfSwKK3sgMHg4NDgxLAkxNiwJezB4ODMsIDB4ZTQsIDB4ZjAsIDB4NzQsIDB4MjMsIDB4MjUsIDB4NTcsIDB4ZjgsIDB4ZTQsIDB4ZjYsIDB4ZTUsIDB4NTksIDB4MjQsIDB4MDQsIDB4ZjUsIDB4ODJ9IH0sCit7IDB4ODQ5MSwJMTYsCXsweGU0LCAweDM1LCAweDU4LCAweGY1LCAweDgzLCAweGUwLCAweDQ0LCAweDAzLCAweGYwLCAweGU1LCAweDU3LCAweDc1LCAweGYwLCAweDBkLCAweGE0LCAweDI0fSB9LAoreyAweDg0YTEsCTE2LAl7MHgwMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwMywgMHhmNSwgMHg4MywgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHhmZCwgMHhhMywgMHhlMCwgMHhmZX0gfSwKK3sgMHg4NGIxLAkxNiwJezB4YTMsIDB4ZTAsIDB4ZjUsIDB4NjYsIDB4OGUsIDB4NjUsIDB4OGQsIDB4NjQsIDB4OGMsIDB4NjMsIDB4N2QsIDB4MDYsIDB4YWYsIDB4NTcsIDB4MTIsIDB4ODN9IH0sCit7IDB4ODRjMSwJMTYsCXsweGRmLCAweGFmLCAweDU3LCAweDdkLCAweDAxLCAweDEyLCAweDgzLCAweDVhLCAweDg1LCAweDU5LCAweDgyLCAweDg1LCAweDU4LCAweDgzLCAweGEzLCAweGEzfSB9LAoreyAweDg0ZDEsCTE2LAl7MHhlMCwgMHgyMCwgMHhlMCwgMHg0MywgMHhlMCwgMHhmZiwgMHhlNSwgMHg1OSwgMHgyNCwgMHgwNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1OCwgMHhmNX0gfSwKK3sgMHg4NGUxLAkxNiwJezB4ODMsIDB4ZTAsIDB4ZTUsIDB4NTksIDB4MjQsIDB4MDYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTgsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4ZTV9IH0sCit7IDB4ODRmMSwJMTYsCXsweDU3LCAweDc1LCAweGYwLCAweDBkLCAweGE0LCAweDI0LCAweDAyLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDAzLCAweGY1LCAweDgzLCAweGUwLCAweGZjfSB9LAoreyAweDg1MDEsCTE2LAl7MHhhMywgMHhlMCwgMHhmZCwgMHhhMywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmNSwgMHg2NiwgMHg4ZSwgMHg2NSwgMHg4ZCwgMHg2NCwgMHg4YywgMHg2M30gfSwKK3sgMHg4NTExLAkxNiwJezB4N2QsIDB4MDYsIDB4YWYsIDB4NTcsIDB4MTIsIDB4ODMsIDB4ZGYsIDB4NzQsIDB4ZjgsIDB4MjUsIDB4NTcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDJ9IH0sCit7IDB4ODUyMSwJMTYsCXsweGY1LCAweDgzLCAweGU0LCAweGYwLCAweGU1LCAweDU3LCAweDI1LCAweGUwLCAweGZmLCAweGMzLCAweDc0LCAweDBjLCAweDlmLCAweDc1LCAweGYwLCAweDQwfSB9LAoreyAweDg1MzEsCTE2LAl7MHhhNCwgMHgyNCwgMHg0MCwgMHhmNSwgMHg4MiwgMHhlNSwgMHhmMCwgMHgzNCwgMHg3YiwgMHhhZiwgMHg4MiwgMHhmZSwgMHhlNSwgMHg1NywgMHgyNSwgMHhlMH0gfSwKK3sgMHg4NTQxLAkxNiwJezB4MjQsIDB4ZWYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDIsIDB4ZjUsIDB4ODMsIDB4ZWUsIDB4ZjAsIDB4YTMsIDB4ZWYsIDB4ZjAsIDB4YWYsIDB4NTd9IH0sCit7IDB4ODU1MSwJMTUsCXsweDc0LCAweDAxLCAweGE4LCAweDA3LCAweDA4LCAweDgwLCAweDAyLCAweGMzLCAweDMzLCAweGQ4LCAweGZjLCAweDQyLCAweDM0LCAweDdmLCAweDAwfSB9LAoreyAweDg1NjAsCTEsCXsweDIyfSB9LAoreyAweDg1NjEsCTE2LAl7MHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHgxNCwgMHhmNSwgMHg1NywgMHhjMywgMHg5NCwgMHgwNCwgMHg0MCwgMHgwMywgMHg3ZiwgMHhmZiwgMHgyMn0gfSwKK3sgMHg4NTcxLAkxNiwJezB4YWYsIDB4NTcsIDB4ZTQsIDB4ZmQsIDB4MTIsIDB4ODMsIDB4NWEsIDB4NzQsIDB4ZjgsIDB4MjUsIDB4NTcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDJ9IH0sCit7IDB4ODU4MSwJMTYsCXsweGY1LCAweDgzLCAweGU0LCAweGYwLCAweGU1LCAweDU3LCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAwLCAweGY1LCAweDgyLCAweGU0LCAweDM0fSB9LAoreyAweDg1OTEsCTE2LAl7MHgyMCwgMHhhZiwgMHg4MiwgMHhmNSwgMHg1OSwgMHg4ZiwgMHg1YSwgMHhmNSwgMHg4MywgMHhlNSwgMHg4MiwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNH0gfSwKK3sgMHg4NWExLAkxNiwJezB4MzUsIDB4ODMsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmMsIDB4ZjAsIDB4ZTUsIDB4NTcsIDB4NzUsIDB4ZjAsIDB4MGQsIDB4YTQsIDB4MjQsIDB4MGN9IH0sCit7IDB4ODViMSwJMTYsCXsweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDAzLCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweGU1LCAweDU3LCAweDc1LCAweGYwLCAweDBkLCAweGE0LCAweDI0fSB9LAoreyAweDg1YzEsCTE2LAl7MHgwMiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwMywgMHhmNSwgMHg4MywgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHhmZCwgMHhhMywgMHhlMCwgMHhmZX0gfSwKK3sgMHg4NWQxLAkxNiwJezB4YTMsIDB4ZTAsIDB4ZjUsIDB4NjYsIDB4OGUsIDB4NjUsIDB4OGQsIDB4NjQsIDB4OGMsIDB4NjMsIDB4N2QsIDB4MDYsIDB4YWYsIDB4NTcsIDB4MTIsIDB4ODN9IH0sCit7IDB4ODVlMSwJMTYsCXsweGRmLCAweGU1LCAweDVhLCAweDI0LCAweDA1LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDU5LCAweGY1LCAweDgzLCAweGUwLCAweDMwLCAweGUwLCAweDA5fSB9LAoreyAweDg1ZjEsCTE2LAl7MHg4NSwgMHg1YSwgMHg4MiwgMHg4NSwgMHg1OSwgMHg4MywgMHhlMCwgMHhmNSwgMHg1OCwgMHhhZiwgMHg1NywgMHg3NCwgMHgwMSwgMHhhOCwgMHgwNywgMHgwOH0gfSwKK3sgMHg4NjAxLAkxNiwJezB4ODAsIDB4MDIsIDB4YzMsIDB4MzMsIDB4ZDgsIDB4ZmMsIDB4ZjQsIDB4NTIsIDB4MzQsIDB4ZTUsIDB4NTcsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YzYsIDB4ZjV9IH0sCit7IDB4ODYxMSwJMTYsCXsweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGUwLCAweDIwLCAweGUxLCAweDBmLCAweGU1LCAweDU3LCAweDI1LCAweGUwLCAweDI0LCAweGM3fSB9LAoreyAweDg2MjEsCTExLAl7MHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg4NjJjLAkxLAl7MHgyMn0gfSwKK3sgMHg4NjJkLAk0LAl7MHg4ZSwgMHg1NywgMHg4ZiwgMHg1OH0gfSwKK3sgMHg4NjMxLAkxNiwJezB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4ZjUsIDB4NTksIDB4YzMsIDB4OTQsIDB4MDQsIDB4NDAsIDB4MDMsIDB4N2YsIDB4ZmYsIDB4MjJ9IH0sCit7IDB4ODY0MSwJMTYsCXsweGU1LCAweDU5LCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAxLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwLCAweGY1LCAweDgzLCAweGUwfSB9LAoreyAweDg2NTEsCTE2LAl7MHg1NCwgMHgwMywgMHg3MCwgMHg2NiwgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhhMywgMHhlMCwgMHgzMCwgMHhlMCwgMHgyOCwgMHhlNX0gfSwKK3sgMHg4NjYxLAkxNiwJezB4NTksIDB4NzUsIDB4ZjAsIDB4MGQsIDB4YTQsIDB4MjQsIDB4MDIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDMsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmN9IH0sCit7IDB4ODY3MSwJMTYsCXsweGEzLCAweGUwLCAweGZkLCAweGEzLCAweGUwLCAweGZlLCAweGEzLCAweGUwLCAweGY1LCAweDY2LCAweDhlLCAweDY1LCAweDhkLCAweDY0LCAweDhjLCAweDYzfSB9LAoreyAweDg2ODEsCTE2LAl7MHg3ZCwgMHgwMiwgMHhhZiwgMHg1OSwgMHgxMiwgMHg4MywgMHhkZiwgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhhMywgMHhlMCwgMHgzMH0gfSwKK3sgMHg4NjkxLAkxNiwJezB4ZTEsIDB4MjgsIDB4ZTUsIDB4NTksIDB4NzUsIDB4ZjAsIDB4MGQsIDB4YTQsIDB4MjQsIDB4MDIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDMsIDB4ZjV9IH0sCit7IDB4ODZhMSwJMTYsCXsweDgzLCAweGUwLCAweGZjLCAweGEzLCAweGUwLCAweGZkLCAweGEzLCAweGUwLCAweGZlLCAweGEzLCAweGUwLCAweGY1LCAweDY2LCAweDhlLCAweDY1LCAweDhkfSB9LAoreyAweDg2YjEsCTEyLAl7MHg2NCwgMHg4YywgMHg2MywgMHg3ZCwgMHgwNCwgMHhhZiwgMHg1OSwgMHgxMiwgMHg4MywgMHhkZiwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg4NmJkLAkxLAl7MHgyMn0gfSwKK3sgMHg4NmJlLAkxNiwJezB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4ZTAsIDB4ZmQsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4ZmMsIDB4ZWR9IH0sCit7IDB4ODZjZSwJMTYsCXsweDZjLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGYwLCAweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGEzLCAweGEzLCAweGEzLCAweGMwLCAweDgzLCAweGMwfSB9LAoreyAweDg2ZGUsCTE2LAl7MHg4MiwgMHhlMCwgMHhmZCwgMHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHhmYywgMHhlZCwgMHg2YywgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhmMH0gfSwKK3sgMHg4NmVlLAkxNiwJezB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4ZmQsIDB4ZWMsIDB4NmQsIDB4ZDB9IH0sCit7IDB4ODZmZSwJMTYsCXsweDgyLCAweGQwLCAweDgzLCAweGYwLCAweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGEzLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGUwLCAweGZkLCAweDhmfSB9LAoreyAweDg3MGUsCTE2LAl7MHg4MiwgMHg4ZSwgMHg4MywgMHhhMywgMHhhMywgMHhlMCwgMHhmYywgMHhlZCwgMHg2YywgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhmMCwgMHg4ZiwgMHg4Mn0gfSwKK3sgMHg4NzFlLAkxNiwJezB4OGUsIDB4ODMsIDB4YTMsIDB4YTMsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4ZTAsIDB4ZmQsIDB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4YTMsIDB4ZTB9IH0sCit7IDB4ODcyZSwJMTYsCXsweGZjLCAweGVkLCAweDZjLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGYwLCAweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGEzLCAweGMwLCAweDgzLCAweGMwfSB9LAoreyAweDg3M2UsCTE2LAl7MHg4MiwgMHhlMCwgMHhmZCwgMHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhhMywgMHhhMywgMHhlMCwgMHhmZiwgMHhlZCwgMHg2ZiwgMHhkMCwgMHg4MiwgMHhkMH0gfSwKK3sgMHg4NzRlLAkzLAl7MHg4MywgMHhmMCwgMHgyMn0gfSwKK3sgMHg4NzUxLAk0LAl7MHhhZCwgMHgwNywgMHhhYywgMHgwNn0gfSwKK3sgMHg4NzU1LAkxNiwJezB4NzksIDB4MGQsIDB4OGQsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4ZmUsIDB4YzMsIDB4OTQsIDB4MDQsIDB4NDAsIDB4MDMsIDB4N2YsIDB4ZmZ9IH0sCit7IDB4ODc2NSwJMTYsCXsweDIyLCAweDhjLCAweDU3LCAweDhkLCAweDU4LCAweGVlLCAweDc1LCAweGYwLCAweDBkLCAweGE0LCAweDI0LCAweDAxLCAweGY1LCAweDgyLCAweGU0LCAweDM0fSB9LAoreyAweDg3NzUsCTE2LAl7MHgwMywgMHhhZiwgMHg4MiwgMHhmZSwgMHhhZCwgMHgwMSwgMHgxOSwgMHhlZCwgMHg2MCwgMHgyNCwgMHgwZiwgMHhlZiwgMHhhYywgMHgwNiwgMHg3MCwgMHgwMX0gfSwKK3sgMHg4Nzg1LAkxNiwJezB4MGUsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZTAsIDB4ZmQsIDB4MDUsIDB4NTgsIDB4ZTUsIDB4NTgsIDB4YWEsIDB4NTcsIDB4NzAsIDB4MDJ9IH0sCit7IDB4ODc5NSwJMTYsCXsweDA1LCAweDU3LCAweDE0LCAweGY1LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweDZkLCAweDYwLCAweGQ5LCAweDdmLCAweDAxLCAweDIyLCAweDdmLCAweDAwfSB9LAoreyAweDg3YTUsCTEsCXsweDIyfSB9LAoreyAweDg3YTYsCTQsCXsweDhlLCAweDU3LCAweDhmLCAweDU4fSB9LAoreyAweDg3YWEsCTE2LAl7MHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHgxNCwgMHhmNSwgMHg1ZSwgMHhjMywgMHg5NCwgMHgwNCwgMHg0MCwgMHgwMywgMHg3ZiwgMHhmZiwgMHgyMn0gfSwKK3sgMHg4N2JhLAkxNiwJezB4ZTUsIDB4NWUsIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MjAsIDB4YWYsIDB4ODIsIDB4ZjV9IH0sCit7IDB4ODdjYSwJMTYsCXsweDVmLCAweDhmLCAweDYwLCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGEzLCAweGUwLCAweGZjLCAweGEzLCAweGUwLCAweGZkLCAweGEzfSB9LAoreyAweDg3ZGEsCTE2LAl7MHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmZiwgMHg3YiwgMHgwOCwgMHg3YSwgMHgwMCwgMHg3OSwgMHgwMCwgMHg3OCwgMHgwMCwgMHhkMywgMHgxMiwgMHhhM30gfSwKK3sgMHg4N2VhLAkxNiwJezB4YjMsIDB4NDAsIDB4MTAsIDB4ODUsIDB4NTgsIDB4ODIsIDB4ODUsIDB4NTcsIDB4ODMsIDB4YTMsIDB4MTIsIDB4YTMsIDB4ZmEsIDB4MDAsIDB4MDAsIDB4MDB9IH0sCit7IDB4ODdmYSwJMTYsCXsweDA4LCAweDgwLCAweDJlLCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGEzLCAweGUwLCAweGZjLCAweGEzLCAweGUwLCAweGZkLCAweGEzfSB9LAoreyAweDg4MGEsCTE2LAl7MHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmZiwgMHg3YiwgMHgwMCwgMHg3YSwgMHgwOCwgMHg3OSwgMHgwNywgMHg3OCwgMHgwMCwgMHhjMywgMHgxMiwgMHhhM30gfSwKK3sgMHg4ODFhLAkxNiwJezB4YjMsIDB4NTAsIDB4MGUsIDB4ODUsIDB4NTgsIDB4ODIsIDB4ODUsIDB4NTcsIDB4ODMsIDB4YTMsIDB4MTIsIDB4YTMsIDB4ZmEsIDB4MDAsIDB4MDcsIDB4MDh9IH0sCit7IDB4ODgyYSwJMTYsCXsweDAwLCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGEzLCAweGUwLCAweGY4LCAweGEzLCAweGUwLCAweGY5LCAweGEzLCAweGUwLCAweGZhfSB9LAoreyAweDg4M2EsCTE2LAl7MHhhMywgMHhlMCwgMHhmYiwgMHg3ZiwgMHgwMCwgMHg3ZSwgMHg1MCwgMHg3ZCwgMHg0NiwgMHg3YywgMHgwMCwgMHgxMiwgMHhhMywgMHgyMSwgMHg4ZiwgMHg1Y30gfSwKK3sgMHg4ODRhLAkxNiwJezB4OGUsIDB4NWIsIDB4OGQsIDB4NWEsIDB4OGMsIDB4NTksIDB4N2IsIDB4MGEsIDB4N2EsIDB4MDAsIDB4NzksIDB4MDAsIDB4NzgsIDB4MDAsIDB4MTIsIDB4YTN9IH0sCit7IDB4ODg1YSwJMTYsCXsweDIxLCAweGFmLCAweDAzLCAweDhmLCAweDVkLCAweGFmLCAweDVjLCAweGFlLCAweDViLCAweGFkLCAweDVhLCAweGFjLCAweDU5LCAweDdiLCAweDBhLCAweDdhfSB9LAoreyAweDg4NmEsCTE2LAl7MHgwMCwgMHg3OSwgMHgwMCwgMHg3OCwgMHgwMCwgMHgxMiwgMHhhMywgMHgyMSwgMHg4ZiwgMHg1YywgMHg4ZSwgMHg1YiwgMHg4ZCwgMHg1YSwgMHg4YywgMHg1OX0gfSwKK3sgMHg4ODdhLAkxNiwJezB4ZTUsIDB4NWQsIDB4YzMsIDB4OTQsIDB4MDUsIDB4NDAsIDB4MTUsIDB4ZTUsIDB4NWMsIDB4MjQsIDB4MDEsIDB4ZjUsIDB4NWMsIDB4ZTQsIDB4MzUsIDB4NWJ9IH0sCit7IDB4ODg4YSwJMTYsCXsweGY1LCAweDViLCAweGU0LCAweDM1LCAweDVhLCAweGY1LCAweDVhLCAweGU0LCAweDM1LCAweDU5LCAweGY1LCAweDU5LCAweDg1LCAweDYwLCAweDgyLCAweDg1fSB9LAoreyAweDg4OWEsCTE2LAl7MHg1ZiwgMHg4MywgMHhhMywgMHhlNCwgMHhmMCwgMHg4NSwgMHg2MCwgMHg4MiwgMHg4NSwgMHg1ZiwgMHg4MywgMHhhMywgMHhhMywgMHhhMywgMHhlMCwgMHg0NH0gfSwKK3sgMHg4OGFhLAkxNiwJezB4ODAsIDB4ZjAsIDB4ODUsIDB4NjAsIDB4ODIsIDB4ODUsIDB4NWYsIDB4ODMsIDB4ZTUsIDB4NWMsIDB4ZjAsIDB4YWYsIDB4NWMsIDB4YWUsIDB4NWIsIDB4YWR9IH0sCit7IDB4ODhiYSwJMTYsCXsweDVhLCAweGFjLCAweDU5LCAweDc4LCAweDA4LCAweDEyLCAweGEzLCAweGM0LCAweDg1LCAweDYwLCAweDgyLCAweDg1LCAweDVmLCAweDgzLCAweGEzLCAweGVmfSB9LAoreyAweDg4Y2EsCTE2LAl7MHhmMCwgMHg4NSwgMHg2MCwgMHg4MiwgMHg4NSwgMHg1ZiwgMHg4MywgMHhhMywgMHhhMywgMHhhMywgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHhlNCwgMHhmNX0gfSwKK3sgMHg4OGRhLAkxNiwJezB4NWQsIDB4ZTUsIDB4NTgsIDB4MjQsIDB4MGIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTcsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4MzAsIDB4ZTB9IH0sCit7IDB4ODhlYSwJMTYsCXsweDIzLCAweDU0LCAweDAxLCAweGYwLCAweGU1LCAweDYwLCAweDI0LCAweDA0LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDVmLCAweGY1LCAweDgzLCAweGUwfSB9LAoreyAweDg4ZmEsCTE2LAl7MHg1NCwgMHhmZCwgMHhmMCwgMHhhZiwgMHg1ZSwgMHg3NCwgMHgwMSwgMHhhOCwgMHgwNywgMHgwOCwgMHg4MCwgMHgwMiwgMHhjMywgMHgzMywgMHhkOCwgMHhmY30gfSwKK3sgMHg4OTBhLAkxNiwJezB4NDIsIDB4MjIsIDB4ODAsIDB4MzYsIDB4NzQsIDB4MDEsIDB4N2UsIDB4MDAsIDB4YTgsIDB4NWUsIDB4MDgsIDB4ODAsIDB4MDUsIDB4YzMsIDB4MzMsIDB4Y2V9IH0sCit7IDB4ODkxYSwJMTYsCXsweDMzLCAweGNlLCAweGQ4LCAweGY5LCAweGZmLCAweGU0LCAweGVmLCAweDU1LCAweDIyLCAweDYwLCAweDFmLCAweGU1LCAweDYwLCAweDI0LCAweDA0LCAweGY1fSB9LAoreyAweDg5MmEsCTE2LAl7MHg4MiwgMHhlNCwgMHgzNSwgMHg1ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHhhZiwgMHg1ZSwgMHg3NCwgMHgwMSwgMHhhOCwgMHgwN30gfSwKK3sgMHg4OTNhLAkxNiwJezB4MDgsIDB4ODAsIDB4MDIsIDB4YzMsIDB4MzMsIDB4ZDgsIDB4ZmMsIDB4ZjQsIDB4NTIsIDB4MjIsIDB4ZTUsIDB4NTgsIDB4MjQsIDB4MDgsIDB4ZjUsIDB4ODJ9IH0sCit7IDB4ODk0YSwJMTYsCXsweGU0LCAweDM1LCAweDU3LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGI0LCAweDYyLCAweDA1LCAweDQzLCAweDVkLCAweDBhLCAweDgwLCAweDFhLCAweGVmfSB9LAoreyAweDg5NWEsCTE2LAl7MHhiNCwgMHg3MiwgMHgwNSwgMHg0MywgMHg1ZCwgMHgwOCwgMHg4MCwgMHgxMSwgMHhlZiwgMHhiNCwgMHg3NCwgMHgwNSwgMHg0MywgMHg1ZCwgMHgwMiwgMHg4MH0gfSwKK3sgMHg4OTZhLAkxNiwJezB4MDgsIDB4ZWYsIDB4NjQsIDB4NmUsIDB4NjAsIDB4MDMsIDB4N2YsIDB4ZmYsIDB4MjIsIDB4ZTUsIDB4NTgsIDB4MjQsIDB4MGIsIDB4ZjUsIDB4ODIsIDB4ZTR9IH0sCit7IDB4ODk3YSwJMTYsCXsweDM1LCAweDU3LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweDMwLCAweGUzLCAweDAzLCAweDQzLCAweDVkLCAweDgwLCAweGVmLCAweDMwLCAweGU3LCAweDEyfSB9LAoreyAweDg5OGEsCTE2LAl7MHg0MywgMHg1ZCwgMHg0MCwgMHhlNSwgMHg2MCwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NH0gfSwKK3sgMHg4OTlhLAkxNiwJezB4MDIsIDB4ZjAsIDB4ZTUsIDB4NTgsIDB4MjQsIDB4MGIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTcsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MzAsIDB4ZTF9IH0sCit7IDB4ODlhYSwJMTYsCXsweDIwLCAweGFmLCAweDVlLCAweDc0LCAweDAxLCAweGE4LCAweDA3LCAweDA4LCAweDgwLCAweDAyLCAweGMzLCAweDMzLCAweGQ4LCAweGZjLCAweDQyLCAweDMyfSB9LAoreyAweDg5YmEsCTE2LAl7MHhlNSwgMHg2MCwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MH0gfSwKK3sgMHg4OWNhLAkxNiwJezB4MTAsIDB4YWYsIDB4NWUsIDB4NzQsIDB4MDEsIDB4YTgsIDB4MDcsIDB4MDgsIDB4ODAsIDB4MDIsIDB4YzMsIDB4MzMsIDB4ZDgsIDB4ZmMsIDB4ZjQsIDB4NTJ9IH0sCit7IDB4ODlkYSwJMTYsCXsweDMyLCAweGU1LCAweDU4LCAweDI0LCAweDBiLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDU3LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweDMwLCAweGU0fSB9LAoreyAweDg5ZWEsCTE2LAl7MHgxMSwgMHhhZSwgMHg1ZSwgMHg3NCwgMHgwMSwgMHhhOCwgMHgwNiwgMHgwOCwgMHg4MCwgMHgwMiwgMHhjMywgMHgzMywgMHhkOCwgMHhmYywgMHg0MiwgMHgzMX0gfSwKK3sgMHg4OWZhLAkxNiwJezB4ODAsIDB4MTAsIDB4YWUsIDB4NWUsIDB4NzQsIDB4MDEsIDB4YTgsIDB4MDYsIDB4MDgsIDB4ODAsIDB4MDIsIDB4YzMsIDB4MzMsIDB4ZDgsIDB4ZmMsIDB4ZjR9IH0sCit7IDB4OGEwYSwJMTYsCXsweDUyLCAweDMxLCAweGVmLCAweDIwLCAweGUxLCAweDAzLCAweDMwLCAweGU0LCAweDAzLCAweGU0LCAweGY1LCAweDVkLCAweDg1LCAweDYwLCAweDgyLCAweDg1fSB9LAoreyAweDhhMWEsCTE2LAl7MHg1ZiwgMHg4MywgMHhhMywgMHhhMywgMHhhMywgMHg3NCwgMHhiZiwgMHhmMCwgMHg4NSwgMHg2MCwgMHg4MiwgMHg4NSwgMHg1ZiwgMHg4MywgMHhhMywgMHhhM30gfSwKK3sgMHg4YTJhLAkxNiwJezB4ZTQsIDB4ZjAsIDB4ZTUsIDB4NWQsIDB4ZjAsIDB4ZTUsIDB4NTgsIDB4MjQsIDB4MGEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTcsIDB4ZjUsIDB4ODN9IH0sCit7IDB4OGEzYSwJMTYsCXsweGUwLCAweGZmLCAweGU1LCAweDYwLCAweDI0LCAweDA0LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDVmLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweGU1fSB9LAoreyAweDhhNGEsCTE2LAl7MHg1OCwgMHgyNCwgMHgwYSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1NywgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHg2MCwgMHgyNCwgMHgwNX0gfSwKK3sgMHg4YTVhLAkxNiwJezB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NWYsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4ZTUsIDB4NTgsIDB4MjQsIDB4MDksIDB4ZjUsIDB4ODIsIDB4ZTR9IH0sCit7IDB4OGE2YSwJMTYsCXsweDM1LCAweDU3LCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGU1LCAweDYwLCAweDI0LCAweDA2LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDVmLCAweGY1fSB9LAoreyAweDhhN2EsCTE2LAl7MHg4MywgMHhlZiwgMHhmMCwgMHhlNSwgMHg1OCwgMHgyNCwgMHgwOSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1NywgMHhmNSwgMHg4MywgMHhlMCwgMHhmZn0gfSwKK3sgMHg4YThhLAkxNiwJezB4ZTUsIDB4NjAsIDB4MjQsIDB4MDcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NWYsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4ODUsIDB4NjAsIDB4ODJ9IH0sCit7IDB4OGE5YSwJMTYsCXsweDg1LCAweDVmLCAweDgzLCAweGEzLCAweGEzLCAweGEzLCAweGU0LCAweGYwLCAweDg1LCAweDYwLCAweDgyLCAweDg1LCAweDVmLCAweDgzLCAweGEzLCAweGEzfSB9LAoreyAweDhhYWEsCTE2LAl7MHhmMCwgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhhMywgMHhlMCwgMHhmYywgMHhhMywgMHhlMCwgMHhmZCwgMHhhMywgMHhlMCwgMHhmZX0gfSwKK3sgMHg4YWJhLAkxNiwJezB4YTMsIDB4ZTAsIDB4ZjUsIDB4NjYsIDB4OGUsIDB4NjUsIDB4OGQsIDB4NjQsIDB4OGMsIDB4NjMsIDB4N2QsIDB4MDYsIDB4YWYsIDB4NWUsIDB4MTIsIDB4ODN9IH0sCit7IDB4OGFjYSwJMTYsCXsweGRmLCAweDc1LCAweDVkLCAweDA4LCAweGU1LCAweDU4LCAweDI0LCAweDBjLCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDU3LCAweGY1LCAweDgzLCAweGUwfSB9LAoreyAweDhhZGEsCTE2LAl7MHg2MCwgMHgwMywgMHg0MywgMHg1ZCwgMHgxMCwgMHhlNSwgMHg2MCwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1ZiwgMHhmNSwgMHg4M30gfSwKK3sgMHg4YWVhLAkxNiwJezB4ZTAsIDB4NTQsIDB4MDMsIDB4NDUsIDB4NWQsIDB4ZjAsIDB4ZTUsIDB4NTgsIDB4MjQsIDB4MDUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4NTcsIDB4ZjV9IH0sCit7IDB4OGFmYSwJMTYsCXsweDgzLCAweGUwLCAweGZlLCAweGMzLCAweDk0LCAweDA1LCAweDQwLCAweDA2LCAweGVlLCAweGQzLCAweDk0LCAweDA4LCAweDQwLCAweDAzLCAweDdmLCAweGZmfSB9LAoreyAweDhiMGEsCTE2LAl7MHgyMiwgMHhlNSwgMHg1OCwgMHgyNCwgMHgwNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1NywgMHhmNSwgMHg4MywgMHhlMCwgMHhmZCwgMHhjMywgMHg5NH0gfSwKK3sgMHg4YjFhLAkxNiwJezB4MDEsIDB4NDAsIDB4MDYsIDB4ZWQsIDB4ZDMsIDB4OTQsIDB4MDIsIDB4NDAsIDB4MDMsIDB4N2YsIDB4ZmYsIDB4MjIsIDB4ZWQsIDB4MTQsIDB4ZmYsIDB4MjV9IH0sCit7IDB4OGIyYSwJMTYsCXsweGUwLCAweDI1LCAweGUwLCAweGZmLCAweGVlLCAweDI0LCAweGZiLCAweDRmLCAweGY1LCAweDVkLCAweGU1LCAweDU4LCAweDI0LCAweDA3LCAweGY1LCAweDgyfSB9LAoreyAweDhiM2EsCTE2LAl7MHhlNCwgMHgzNSwgMHg1NywgMHhmNSwgMHg4MywgMHhlMCwgMHgyNCwgMHhkMCwgMHg2MCwgMHgxOCwgMHgxNCwgMHg2MCwgMHgxYSwgMHgyNCwgMHhjMywgMHg2MH0gfSwKK3sgMHg4YjRhLAkxNiwJezB4MWUsIDB4MTQsIDB4NjAsIDB4MDksIDB4MjQsIDB4MGEsIDB4NzAsIDB4MTQsIDB4NDMsIDB4NWQsIDB4MTgsIDB4ODAsIDB4MTIsIDB4NDMsIDB4NWQsIDB4MDh9IH0sCit7IDB4OGI1YSwJMTYsCXsweDgwLCAweDBkLCAweDQzLCAweDVkLCAweDM4LCAweDgwLCAweDA4LCAweDQzLCAweDVkLCAweDI4LCAweDgwLCAweDAzLCAweDdmLCAweGZmLCAweDIyLCAweDg1fSB9LAoreyAweDhiNmEsCTE2LAl7MHg2MCwgMHg4MiwgMHg4NSwgMHg1ZiwgMHg4MywgMHhhMywgMHhhMywgMHhhMywgMHhlNSwgMHg1ZCwgMHhmMCwgMHg3NCwgMHgwMSwgMHg3ZSwgMHgwMCwgMHhhOH0gfSwKK3sgMHg4YjdhLAkxNiwJezB4NWUsIDB4MDgsIDB4ODAsIDB4MDUsIDB4YzMsIDB4MzMsIDB4Y2UsIDB4MzMsIDB4Y2UsIDB4ZDgsIDB4ZjksIDB4ZmYsIDB4ZTQsIDB4ZWYsIDB4NTUsIDB4MzR9IH0sCit7IDB4OGI4YSwJMTYsCXsweDYwLCAweDA3LCAweGFmLCAweDVlLCAweDdkLCAweDAxLCAweDEyLCAweDgzLCAweDVhLCAweGFhLCAweDU3LCAweGE5LCAweDU4LCAweDdiLCAweDAxLCAweGMwfSB9LAoreyAweDhiOWEsCTE2LAl7MHgwMywgMHhjMCwgMHgwMSwgMHhlNSwgMHg1ZSwgMHg3NSwgMHhmMCwgMHgwZCwgMHhhNCwgMHgyNCwgMHgwMSwgMHhmOSwgMHg3NCwgMHgwMywgMHgzNSwgMHhmMH0gfSwKK3sgMHg4YmFhLAkxNiwJezB4YTgsIDB4MDEsIDB4ZmMsIDB4YWQsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4ZDAsIDB4MDMsIDB4N2UsIDB4MDAsIDB4N2YsIDB4MGQsIDB4MTIsIDB4YTIsIDB4MTJ9IH0sCit7IDB4OGJiYSwJMiwJezB4N2YsIDB4MDB9IH0sCit7IDB4OGJiYywJMSwJezB4MjJ9IH0sCit7IDB4OGJiZCwJMTYsCXsweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGUwLCAweDE0LCAweGZlLCAweGMzLCAweDk0LCAweDA0LCAweDQwLCAweDAzLCAweDdmLCAweGZmLCAweDIyLCAweGVlfSB9LAoreyAweDhiY2QsCTE2LAl7MHg3NSwgMHhmMCwgMHgwOCwgMHhhNCwgMHgyNCwgMHgwMCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgyMCwgMHhhZCwgMHg4MiwgMHhmYywgMHg5MCwgMHgwMX0gfSwKK3sgMHg4YmRkLAkxNiwJezB4MmMsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4ZWUsIDB4MDQsIDB4YTMsIDB4ZjAsIDB4ZTQsIDB4YTMsIDB4ZjAsIDB4OGQsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZTV9IH0sCit7IDB4OGJlZCwJMTYsCXsweDgyLCAweDI0LCAweDA2LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDgzLCAweGY1LCAweDgzLCAweGUwLCAweDkwLCAweDAxLCAweDJmLCAweGYwLCAweDhkfSB9LAoreyAweDhiZmQsCTE2LAl7MHg4MiwgMHg4YywgMHg4MywgMHhlNSwgMHg4MiwgMHgyNCwgMHgwNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg4MywgMHhmNSwgMHg4MywgMHhlMCwgMHg1NH0gfSwKK3sgMHg4YzBkLAkxNiwJezB4MWUsIDB4OTAsIDB4MDEsIDB4MzAsIDB4ZjAsIDB4NzQsIDB4MmQsIDB4MmUsIDB4ZjgsIDB4ZTYsIDB4YTMsIDB4ZjAsIDB4YWYsIDB4MDYsIDB4NzQsIDB4MDF9IH0sCit7IDB4OGMxZCwJMTYsCXsweGE4LCAweDA3LCAweDA4LCAweDgwLCAweDAyLCAweGMzLCAweDMzLCAweGQ4LCAweGZjLCAweGY1LCAweDU3LCAweGU1LCAweDMzLCAweGMzLCAweDk0LCAweDAxfSB9LAoreyAweDhjMmQsCTE2LAl7MHg0MCwgMHgwZCwgMHg5MCwgMHgyMCwgMHg3OCwgMHhlMCwgMHg1NCwgMHgwZiwgMHg3NSwgMHg1OCwgMHgwMCwgMHhmNSwgMHg1OSwgMHg4MCwgMHgwOSwgMHg3Zn0gfSwKK3sgMHg4YzNkLAkxNiwJezB4MDIsIDB4MTIsIDB4MTEsIDB4MjcsIDB4OGUsIDB4NTgsIDB4OGYsIDB4NTksIDB4YzMsIDB4ZTUsIDB4NTgsIDB4NjQsIDB4ODAsIDB4OTQsIDB4ODAsIDB4NDB9IH0sCit7IDB4OGM0ZCwJMTYsCXsweGRhLCAweGU1LCAweDU3LCAweDU1LCAweDU5LCAweDkwLCAweDAxLCAweDMyLCAweGYwLCAweDdlLCAweDAxLCAweDdmLCAweDJjLCAweDdkLCAweDA3LCAweDEyfSB9LAoreyAweDhjNWQsCTQsCXsweDkxLCAweDZhLCAweDdmLCAweDAwfSB9LAoreyAweDhjNjEsCTEsCXsweDIyfSB9LAoreyAweDhjNjIsCTE2LAl7MHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHgxNCwgMHhmZSwgMHhjMywgMHg5NCwgMHgwNCwgMHg0MCwgMHgwMywgMHg3ZiwgMHhmZiwgMHgyMiwgMHhlZX0gfSwKK3sgMHg4YzcyLAkxNiwJezB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MjAsIDB4YWYsIDB4ODIsIDB4ZmUsIDB4OTAsIDB4MDF9IH0sCit7IDB4OGM4MiwJMTYsCXsweDMzLCAweDc0LCAweDBhLCAweGYwLCAweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGU1LCAweDgyLCAweDI0LCAweDA0LCAweGY1LCAweDgyLCAweGU0LCAweDM1fSB9LAoreyAweDhjOTIsCTE2LAl7MHg4MywgMHhmNSwgMHg4MywgMHhlMCwgMHg5MCwgMHgwMSwgMHgzNCwgMHhmMCwgMHg3ZSwgMHgwMSwgMHg3ZiwgMHgzMywgMHg3ZCwgMHgwMiwgMHgxMiwgMHg5MX0gfSwKK3sgMHg4Y2EyLAkzLAl7MHg2YSwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg4Y2E1LAkxLAl7MHgyMn0gfSwKK3sgMHg4Y2E2LAk0LAl7MHg4ZSwgMHg1NywgMHg4ZiwgMHg1OH0gfSwKK3sgMHg4Y2FhLAkxNiwJezB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4ZmUsIDB4YzMsIDB4OTQsIDB4MDQsIDB4NDAsIDB4MDMsIDB4N2YsIDB4ZmYsIDB4MjIsIDB4ZWV9IH0sCit7IDB4OGNiYSwJMTYsCXsweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAwLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwLCAweGFkLCAweDgyLCAweGZjLCAweDg1LCAweDU4fSB9LAoreyAweDhjY2EsCTE2LAl7MHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhhMywgMHhlMCwgMHg2MCwgMHgwZiwgMHhlZCwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzYywgMHhmNX0gfSwKK3sgMHg4Y2RhLAkxNiwJezB4ODMsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4ODAsIDB4NDMsIDB4ZWUsIDB4NzUsIDB4ZjAsIDB4MGQsIDB4YTQsIDB4MjQsIDB4MGMsIDB4ZjUsIDB4ODJ9IH0sCit7IDB4OGNlYSwJMTYsCXsweGU0LCAweDM0LCAweDAzLCAweGY1LCAweDgzLCAweGUwLCAweDMwLCAweGUwLCAweDIwLCAweGVlLCAweDI1LCAweGUwLCAweDI0LCAweGM2LCAweGY1LCAweDgyfSB9LAoreyAweDhjZmEsCTE2LAl7MHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHgzMCwgMHhlMSwgMHhmMCwgMHg3ZiwgMHg2MCwgMHhlZCwgMHgyNCwgMHgwNSwgMHhmNSwgMHg4Mn0gfSwKK3sgMHg4ZDBhLAkxNiwJezB4ZTQsIDB4M2MsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NWYsIDB4YjUsIDB4MDcsIDB4ZjIsIDB4YWUsIDB4MDQsIDB4YWYsIDB4MDUsIDB4ZWYsIDB4MjQsIDB4MDR9IH0sCit7IDB4OGQxYSwJMTIsCXsweGY1LCAweDgyLCAweGU0LCAweDNlLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweDdmLCAweDAwfSB9LAoreyAweDhkMjYsCTEsCXsweDIyfSB9LAoreyAweDhkMjcsCTQsCXsweGFkLCAweDA3LCAweGFjLCAweDA2fSB9LAoreyAweDhkMmIsCTE2LAl7MHg4ZCwgMHg4MiwgMHg4YywgMHg4MywgMHhlMCwgMHgxNCwgMHhmZSwgMHhjMywgMHg5NCwgMHgwNCwgMHg0MCwgMHgwMywgMHg3ZiwgMHhmZiwgMHgyMiwgMHhlZX0gfSwKK3sgMHg4ZDNiLAkxNiwJezB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MjAsIDB4YWYsIDB4ODIsIDB4ZmUsIDB4OGQsIDB4ODJ9IH0sCit7IDB4OGQ0YiwJMTYsCXsweDhjLCAweDgzLCAweGEzLCAweGUwLCAweDYwLCAweDBmLCAweGVmLCAweDI0LCAweDA0LCAweGY1LCAweDgyLCAweGU0LCAweDNlLCAweGY1LCAweDgzLCAweGUwfSB9LAoreyAweDhkNWIsCTE2LAl7MHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHgwZCwgMHhlZiwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzZSwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NH0gfSwKK3sgMHg4ZDZiLAk0LAl7MHhmZSwgMHhmMCwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg4ZDZmLAkxLAl7MHgyMn0gfSwKK3sgMHg4ZDcwLAk0LAl7MHhhZCwgMHgwNywgMHhhYywgMHgwNn0gfSwKK3sgMHg4ZDc0LAkxNiwJezB4OGQsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZTAsIDB4MTQsIDB4ZmUsIDB4YzMsIDB4OTQsIDB4MDQsIDB4NDAsIDB4MDMsIDB4N2YsIDB4ZmYsIDB4MjIsIDB4ZWV9IH0sCit7IDB4OGQ4NCwJMTYsCXsweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAwLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwLCAweGFmLCAweDgyLCAweGZlLCAweDhkLCAweDgyfSB9LAoreyAweDhkOTQsCTE2LAl7MHg4YywgMHg4MywgMHhhMywgMHhlMCwgMHg2MCwgMHgwZCwgMHg4ZiwgMHg4MiwgMHg4ZSwgMHg4MywgMHhhMywgMHhhMywgMHhhMywgMHhlMCwgMHg0NCwgMHg0MH0gfSwKK3sgMHg4ZGE0LAkxNiwJezB4ZjAsIDB4ODAsIDB4MGIsIDB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4N2YsIDB4MDB9IH0sCit7IDB4OGRiNCwJMSwJezB4MjJ9IH0sCit7IDB4OGRiNSwJMTYsCXsweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGUwLCAweDE0LCAweGZlLCAweGMzLCAweDk0LCAweDA0LCAweDQwLCAweDAzLCAweDdmLCAweGZmLCAweDIyLCAweGFmfSB9LAoreyAweDhkYzUsCTE2LAl7MHgwNiwgMHg3NCwgMHgwMSwgMHhhOCwgMHgwNywgMHgwOCwgMHg4MCwgMHgwMiwgMHhjMywgMHgzMywgMHhkOCwgMHhmYywgMHg0MiwgMHgzZSwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg4ZGQ1LAkxLAl7MHgyMn0gfSwKK3sgMHg4ZGQ2LAk0LAl7MHg4ZSwgMHg1NywgMHg4ZiwgMHg1OH0gfSwKK3sgMHg4ZGRhLAkxNiwJezB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4YTMsIDB4ZTAsIDB4ZjUsIDB4NWMsIDB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4NTksIDB4ZDN9IH0sCit7IDB4OGRlYSwJMTYsCXsweDk0LCAweDA0LCAweDQwLCAweDAzLCAweDdmLCAweGZmLCAweDIyLCAweGU1LCAweDU5LCAweDI0LCAweGZlLCAweDYwLCAweDE2LCAweDE0LCAweDYwLCAweDFmfSB9LAoreyAweDhkZmEsCTE2LAl7MHgxNCwgMHg2MCwgMHgyOCwgMHgyNCwgMHgwMywgMHg3MCwgMHgyZSwgMHg3ZSwgMHg3ZSwgMHg3ZiwgMHg4MCwgMHg3NSwgMHg1YSwgMHg3ZSwgMHg3NSwgMHg1Yn0gfSwKK3sgMHg4ZTBhLAkxNiwJezB4ODAsIDB4ODAsIDB4MjIsIDB4N2UsIDB4N2UsIDB4N2YsIDB4MDAsIDB4NzUsIDB4NWEsIDB4N2UsIDB4NzUsIDB4NWIsIDB4MDAsIDB4ODAsIDB4MTYsIDB4N2V9IH0sCit7IDB4OGUxYSwJMTYsCXsweDdkLCAweDdmLCAweDgwLCAweDc1LCAweDVhLCAweDdkLCAweDc1LCAweDViLCAweDgwLCAweDgwLCAweDBhLCAweDdlLCAweDdkLCAweDdmLCAweDAwLCAweDc1fSB9LAoreyAweDhlMmEsCTE2LAl7MHg1YSwgMHg3ZCwgMHg3NSwgMHg1YiwgMHgwMCwgMHhlNSwgMHg1YywgMHg3MCwgMHgxYiwgMHg4NSwgMHg1YiwgMHg4MiwgMHg4NSwgMHg1YSwgMHg4MywgMHg3NH0gfSwKK3sgMHg4ZTNhLAkxNiwJezB4ZmYsIDB4ZjAsIDB4ZTUsIDB4NTksIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4NzR9IH0sCit7IDB4OGU0YSwJMTYsCXsweDAxLCAweGYwLCAweDgwLCAweDQ4LCAweGU1LCAweDU4LCAweDI0LCAweDAyLCAweGZmLCAweGU0LCAweDM1LCAweDU3LCAweGZlLCAweGU1LCAweDVjLCAweDYwfSB9LAoreyAweDhlNWEsCTE2LAl7MHgyMywgMHgwZiwgMHhlZiwgMHhhYywgMHgwNiwgMHg3MCwgMHgwMSwgMHgwZSwgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlMCwgMHhmZCwgMHgwNX0gfSwKK3sgMHg4ZTZhLAkxNiwJezB4NWIsIDB4ZTUsIDB4NWIsIDB4YWEsIDB4NWEsIDB4NzAsIDB4MDIsIDB4MDUsIDB4NWEsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZWQsIDB4ZjB9IH0sCit7IDB4OGU3YSwJMTYsCXsweDE1LCAweDVjLCAweDgwLCAweGQ5LCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGEzLCAweGUwLCAweGZmLCAweGU1LCAweDU5LCAweDI1fSB9LAoreyAweDhlOGEsCTE0LAl7MHhlMCwgMHgyNCwgMHhiNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg4ZTk4LAkxLAl7MHgyMn0gfSwKK3sgMHg4ZTk5LAkxNiwJezB4ZWYsIDB4MjQsIDB4MDUsIDB4ZjUsIDB4NTgsIDB4ZTQsIDB4M2UsIDB4ZjUsIDB4NTcsIDB4OTAsIDB4MDEsIDB4MzUsIDB4NzQsIDB4MDcsIDB4ZjAsIDB4OTB9IH0sCit7IDB4OGVhOSwJMTYsCXsweDAxLCAweDdhLCAweDc0LCAweDAxLCAweGYwLCAweGEzLCAweDc0LCAweDM2LCAweGYwLCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGEzfSB9LAoreyAweDhlYjksCTE2LAl7MHhhMywgMHhhMywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHg4ZSwgMHg1OSwgMHhmNSwgMHg1YSwgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4M30gfSwKK3sgMHg4ZWM5LAkxNiwJezB4ZTAsIDB4MjQsIDB4OWUsIDB4NjAsIDB4NjEsIDB4MjQsIDB4ZjksIDB4NjAsIDB4MGUsIDB4MjQsIDB4ZjEsIDB4NzAsIDB4MDMsIDB4MDIsIDB4OGYsIDB4N2F9IH0sCit7IDB4OGVkOSwJMTYsCXsweDI0LCAweDE0LCAweDYwLCAweDAzLCAweDAyLCAweDhmLCAweGM4LCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGEzLCAweGUwLCAweGZlfSB9LAoreyAweDhlZTksCTE2LAl7MHhhMywgMHhlMCwgMHhmZiwgMHhjMywgMHhlNCwgMHg5ZiwgMHhmNSwgMHg1YywgMHg3NCwgMHgwMSwgMHg5ZSwgMHhmNSwgMHg1YiwgMHhkMywgMHhlNSwgMHg1Y30gfSwKK3sgMHg4ZWY5LAkxNiwJezB4OTQsIDB4M2YsIDB4ZTUsIDB4NWIsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDYsIDB4NzUsIDB4NWIsIDB4MDAsIDB4NzUsIDB4NWMsIDB4M2YsIDB4ZDMsIDB4ZTV9IH0sCit7IDB4OGYwOSwJMTYsCXsweDVhLCAweDk1LCAweDVjLCAweGU1LCAweDU5LCAweDk1LCAweDViLCAweDUwLCAweDAzLCAweDAyLCAweDhmLCAweGNiLCAweGFlLCAweDViLCAweGFmLCAweDVjfSB9LAoreyAweDhmMTksCTE2LAl7MHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhhMywgMHhhMywgMHhhMywgMHhlZSwgMHhmMCwgMHhmZSwgMHhhMywgMHhlZiwgMHhmMCwgMHg4ZX0gfSwKK3sgMHg4ZjI5LAkxNiwJezB4NTksIDB4ZjUsIDB4NWEsIDB4MDIsIDB4OGYsIDB4Y2IsIDB4ODUsIDB4NTgsIDB4ODIsIDB4ODUsIDB4NTcsIDB4ODMsIDB4YTMsIDB4ZTAsIDB4ZmUsIDB4YTN9IH0sCit7IDB4OGYzOSwJMTYsCXsweGUwLCAweGZmLCAweGMzLCAweDc0LCAweDMwLCAweDlmLCAweGY1LCAweDVjLCAweGU0LCAweDllLCAweGY1LCAweDViLCAweGQzLCAweGU1LCAweDVjLCAweDk0fSB9LAoreyAweDhmNDksCTE2LAl7MHgxMCwgMHhlNSwgMHg1YiwgMHg5NCwgMHgwMCwgMHg0MCwgMHgwNiwgMHg3NSwgMHg1YiwgMHgwMCwgMHg3NSwgMHg1YywgMHgxMCwgMHhkMywgMHhlNSwgMHg1YX0gfSwKK3sgMHg4ZjU5LAkxNiwJezB4OTUsIDB4NWMsIDB4ZTUsIDB4NTksIDB4OTUsIDB4NWIsIDB4NDAsIDB4NmEsIDB4YWUsIDB4NWIsIDB4YWYsIDB4NWMsIDB4ODUsIDB4NTgsIDB4ODIsIDB4ODV9IH0sCit7IDB4OGY2OSwJMTYsCXsweDU3LCAweDgzLCAweGEzLCAweGEzLCAweGEzLCAweGVlLCAweGYwLCAweGZlLCAweGEzLCAweGVmLCAweGYwLCAweDhlLCAweDU5LCAweGY1LCAweDVhLCAweDgwfSB9LAoreyAweDhmNzksCTE2LAl7MHg1MSwgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhhMywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmZiwgMHhjMywgMHhlNCwgMHg5Zn0gfSwKK3sgMHg4Zjg5LAkxNiwJezB4ZjUsIDB4NWMsIDB4ZTQsIDB4OWUsIDB4ZjUsIDB4NWIsIDB4NDUsIDB4NWMsIDB4NjAsIDB4MGIsIDB4ZDMsIDB4ZTUsIDB4NWMsIDB4OTQsIDB4M2YsIDB4ZTV9IH0sCit7IDB4OGY5OSwJMTYsCXsweDViLCAweDk0LCAweDAwLCAweDQwLCAweDA2LCAweDc1LCAweDViLCAweDAwLCAweDc1LCAweDVjLCAweDNmLCAweGQzLCAweGU1LCAweDVhLCAweDk1LCAweDVjfSB9LAoreyAweDhmYTksCTE2LAl7MHhlNSwgMHg1OSwgMHg5NSwgMHg1YiwgMHg0MCwgMHgxYywgMHhhZSwgMHg1YiwgMHhhZiwgMHg1YywgMHg4NSwgMHg1OCwgMHg4MiwgMHg4NSwgMHg1NywgMHg4M30gfSwKK3sgMHg4ZmI5LAkxNiwJezB4YTMsIDB4YTMsIDB4YTMsIDB4ZWUsIDB4ZjAsIDB4ZmUsIDB4YTMsIDB4ZWYsIDB4ZjAsIDB4OGUsIDB4NTksIDB4ZjUsIDB4NWEsIDB4ODAsIDB4MDMsIDB4N2Z9IH0sCit7IDB4OGZjOSwJMTYsCXsweDAxLCAweDIyLCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGUwLCAweDI0LCAweDllLCAweDcwLCAweDAzLCAweDAyLCAweDkwLCAweDhifSB9LAoreyAweDhmZDksCTE2LAl7MHgyNCwgMHhmOSwgMHg2MCwgMHg1OCwgMHgyNCwgMHhmMSwgMHg3MCwgMHgwMywgMHgwMiwgMHg5MCwgMHhkYiwgMHgyNCwgMHgxNCwgMHg2MCwgMHgwMywgMHgwMn0gfSwKK3sgMHg4ZmU5LAkxNiwJezB4OTEsIDB4MWYsIDB4ODUsIDB4NTgsIDB4ODIsIDB4ODUsIDB4NTcsIDB4ODMsIDB4YTMsIDB4ZTAsIDB4ZmUsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4ZDMsIDB4OTR9IH0sCit7IDB4OGZmOSwJMTYsCXsweGZmLCAweGVlLCAweDk0LCAweDAwLCAweDQwLCAweDAzLCAweDAyLCAweDkxLCAweDFmLCAweDkwLCAweDAxLCAweDc1LCAweGVmLCAweGYwLCAweGU1LCAweDVhfSB9LAoreyAweDkwMDksCTE2LAl7MHgxNSwgMHg1YSwgMHhhZSwgMHg1OSwgMHg3MCwgMHgwMiwgMHgxNSwgMHg1OSwgMHg0ZSwgMHg3MCwgMHgwMywgMHgwMiwgMHg5MSwgMHgxZiwgMHg5MCwgMHgwMX0gfSwKK3sgMHg5MDE5LAkxNiwJezB4NzUsIDB4ZTAsIDB4ZmYsIDB4MDQsIDB4ZjAsIDB4YTgsIDB4MDcsIDB4ZTYsIDB4ZmYsIDB4OTAsIDB4MDEsIDB4N2EsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDF9IH0sCit7IDB4OTAyOSwJMTYsCXsweDEyLCAweGEyLCAweDk3LCAweDg1LCAweGYwLCAweDgyLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDgwLCAweGQyLCAweDg1LCAweDU4LCAweDgyLCAweDg1fSB9LAoreyAweDkwMzksCTE2LAl7MHg1NywgMHg4MywgMHhhMywgMHhlMCwgMHhmZSwgMHhhMywgMHhlMCwgMHhmZiwgMHhjMywgMHg5NCwgMHg4MCwgMHhlZSwgMHg5NCwgMHgwMCwgMHg1MCwgMHgwM30gfSwKK3sgMHg5MDQ5LAkxNiwJezB4MDIsIDB4OTEsIDB4MWYsIDB4ZDMsIDB4ZWYsIDB4OTQsIDB4ZmYsIDB4ZWUsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MDIsIDB4OTEsIDB4MWYsIDB4OTB9IH0sCit7IDB4OTA1OSwJMTYsCXsweDAxLCAweDc2LCAweGVmLCAweGYwLCAweGU1LCAweDVhLCAweDE1LCAweDVhLCAweGFlLCAweDU5LCAweDcwLCAweDAyLCAweDE1LCAweDU5LCAweDRlLCAweDcwfSB9LAoreyAweDkwNjksCTE2LAl7MHgwMywgMHgwMiwgMHg5MSwgMHgxZiwgMHg5MCwgMHgwMSwgMHg3NiwgMHhlMCwgMHhmZiwgMHgwNCwgMHhmMCwgMHhhOCwgMHgwNywgMHhlNiwgMHhmZiwgMHg5MH0gfSwKK3sgMHg5MDc5LAkxNiwJezB4MDEsIDB4N2EsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDEsIDB4MTIsIDB4YTIsIDB4OTcsIDB4ODUsIDB4ZjAsIDB4ODIsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjB9IH0sCit7IDB4OTA4OSwJMTYsCXsweDgwLCAweGQyLCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGEzLCAweGUwLCAweGZlLCAweGEzLCAweGUwLCAweGZmLCAweGMzLCAweDk0fSB9LAoreyAweDkwOTksCTE2LAl7MHgyMCwgMHhlZSwgMHg5NCwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMiwgMHg5MSwgMHgxZiwgMHhkMywgMHhlZiwgMHg5NCwgMHgyZiwgMHhlZSwgMHg5NCwgMHgwMH0gfSwKK3sgMHg5MGE5LAkxNiwJezB4NTAsIDB4NzQsIDB4OTAsIDB4MDEsIDB4NzcsIDB4ZWYsIDB4ZjAsIDB4ZTUsIDB4NWEsIDB4MTUsIDB4NWEsIDB4YWUsIDB4NTksIDB4NzAsIDB4MDIsIDB4MTV9IH0sCit7IDB4OTBiOSwJMTYsCXsweDU5LCAweDRlLCAweDYwLCAweDYyLCAweDkwLCAweDAxLCAweDc3LCAweGUwLCAweGZmLCAweDA0LCAweGYwLCAweGE4LCAweDA3LCAweGU2LCAweGZmLCAweDkwfSB9LAoreyAweDkwYzksCTE2LAl7MHgwMSwgMHg3YSwgMHhlNCwgMHg3NSwgMHhmMCwgMHgwMSwgMHgxMiwgMHhhMiwgMHg5NywgMHg4NSwgMHhmMCwgMHg4MiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMH0gfSwKK3sgMHg5MGQ5LAkxNiwJezB4ODAsIDB4ZDUsIDB4ODUsIDB4NTgsIDB4ODIsIDB4ODUsIDB4NTcsIDB4ODMsIDB4YTMsIDB4ZTAsIDB4ZmYsIDB4YTMsIDB4ZTAsIDB4OTAsIDB4MDEsIDB4Nzh9IH0sCit7IDB4OTBlOSwJMTYsCXsweGNmLCAweGYwLCAweGEzLCAweGVmLCAweGYwLCAweGU1LCAweDVhLCAweDE1LCAweDVhLCAweGFlLCAweDU5LCAweDcwLCAweDAyLCAweDE1LCAweDU5LCAweDRlfSB9LAoreyAweDkwZjksCTE2LAl7MHg2MCwgMHgyNCwgMHg5MCwgMHgwMSwgMHg3OCwgMHhlNCwgMHg3NSwgMHhmMCwgMHgwMSwgMHgxMiwgMHhhMiwgMHg5NywgMHg4NSwgMHhmMCwgMHg4MiwgMHhmNX0gfSwKK3sgMHg5MTA5LAkxNiwJezB4ODMsIDB4ZTAsIDB4ZmYsIDB4OTAsIDB4MDEsIDB4N2EsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDEsIDB4MTIsIDB4YTIsIDB4OTcsIDB4ODUsIDB4ZjAsIDB4ODJ9IH0sCit7IDB4OTExOSwJMTYsCXsweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDgwLCAweGNmLCAweDdlLCAweDAxLCAweDdmLCAweDM1LCAweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzfSB9LAoreyAweDkxMjksCTEzLAl7MHhhMywgMHhhMywgMHhhMywgMHhlMCwgMHhhMywgMHhlMCwgMHgwNCwgMHhmZCwgMHgxMiwgMHg5MSwgMHg2YSwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg5MTM2LAkxLAl7MHgyMn0gfSwKK3sgMHg5MTM3LAkxNiwJezB4OGUsIDB4NjIsIDB4OGYsIDB4NjMsIDB4OGMsIDB4NjQsIDB4OGQsIDB4NjUsIDB4YWYsIDB4MDMsIDB4MWIsIDB4ZWYsIDB4NjAsIDB4MjQsIDB4MDUsIDB4NjN9IH0sCit7IDB4OTE0NywJMTYsCXsweGU1LCAweDYzLCAweGFlLCAweDYyLCAweDcwLCAweDAyLCAweDA1LCAweDYyLCAweDE0LCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGUwLCAweGZmLCAweDA1fSB9LAoreyAweDkxNTcsCTE2LAl7MHg2NSwgMHhlNSwgMHg2NSwgMHhhYywgMHg2NCwgMHg3MCwgMHgwMiwgMHgwNSwgMHg2NCwgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMH0gfSwKK3sgMHg5MTY3LAkzLAl7MHg4MCwgMHhkNiwgMHgyMn0gfSwKK3sgMHg5MTZhLAk2LAl7MHg4ZCwgMHg1ZCwgMHhhYiwgMHgwNywgMHhhYSwgMHgwNn0gfSwKK3sgMHg5MTcwLAkxNiwJezB4NzUsIDB4NjEsIDB4NDAsIDB4NzUsIDB4NjAsIDB4MGQsIDB4NzUsIDB4NWYsIDB4MDMsIDB4NzUsIDB4NWUsIDB4MDAsIDB4OTAsIDB4N2YsIDB4YzIsIDB4ZTB9IH0sCit7IDB4OTE4MCwJMTYsCXsweDIwLCAweGUxLCAweGY5LCAweGFmLCAweDYxLCAweGFlLCAweDYwLCAweGFkLCAweDVmLCAweGFjLCAweDVlLCAweGVjLCAweDRkLCAweDRlLCAweDRmLCAweDcwfSB9LAoreyAweDkxOTAsCTE2LAl7MHgwOCwgMHg5MCwgMHg3ZiwgMHhjMiwgMHg3NCwgMHgwMiwgMHhmMCwgMHg4MCwgMHhkNywgMHg5MCwgMHg3ZiwgMHhjMiwgMHhlMCwgMHgyMCwgMHhlMSwgMHgxNn0gfSwKK3sgMHg5MWEwLAkxNiwJezB4YWYsIDB4MDMsIDB4YWUsIDB4MDIsIDB4N2MsIDB4N2IsIDB4N2QsIDB4ODAsIDB4YWIsIDB4NWQsIDB4MTIsIDB4OTEsIDB4MzcsIDB4OTAsIDB4N2YsIDB4YzN9IH0sCit7IDB4OTFiMCwJOCwJezB4ZTUsIDB4NWQsIDB4ZjAsIDB4N2YsIDB4MDEsIDB4MjIsIDB4N2YsIDB4MDB9IH0sCit7IDB4OTFiOCwJMSwJezB4MjJ9IH0sCit7IDB4OTFiOSwJMTYsCXsweDkwLCAweDAxLCAweDg0LCAweDc0LCAweDBiLCAweGYwLCAweGEzLCAweGU1LCAweDMzLCAweGYwLCAweDkwLCAweDBhLCAweGY1LCAweGU0LCAweDkzLCAweDkwfSB9LAoreyAweDkxYzksCTE2LAl7MHgwMSwgMHg4NiwgMHhmMCwgMHg5MCwgMHgwYSwgMHhmNiwgMHhlNCwgMHg5MywgMHg5MCwgMHgwMSwgMHg4NywgMHhmMCwgMHhlNCwgMHg5MCwgMHgwMSwgMHg3Y30gfSwKK3sgMHg5MWQ5LAkxNiwJezB4ZjAsIDB4YTMsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MTAsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MDF9IH0sCit7IDB4OTFlOSwJMTYsCXsweGYwLCAweGEzLCAweDc0LCAweDg4LCAweGYwLCAweDdlLCAweDAxLCAweDdmLCAweDdjLCAweDEyLCAweDE5LCAweGMxLCAweDdlLCAweDAxLCAweDdmLCAweDg0fSB9LAoreyAweDkxZjksCTcsCXsweDdkLCAweDE0LCAweDEyLCAweDkxLCAweDZhLCAweDdmLCAweDAwfSB9LAoreyAweDkyMDAsCTEsCXsweDIyfSB9LAoreyAweDkyMDEsCTE2LAl7MHg3ZSwgMHg3YiwgMHg3ZiwgMHg0MCwgMHg3NSwgMHg0ZSwgMHg3YiwgMHg3NSwgMHg0ZiwgMHg0MCwgMHg5MCwgMHg3ZiwgMHhkMywgMHhlMCwgMHhmZiwgMHg4NX0gfSwKK3sgMHg5MjExLAkxNiwJezB4NGUsIDB4NTEsIDB4ODUsIDB4NGYsIDB4NTIsIDB4ZTUsIDB4NTIsIDB4MjQsIDB4MDEsIDB4ZjUsIDB4NTYsIDB4ZTQsIDB4MzUsIDB4NTEsIDB4ZjUsIDB4NTV9IH0sCit7IDB4OTIyMSwJMTYsCXsweGU0LCAweGY1LCAweDUwLCAweDg1LCAweDUyLCAweDgyLCAweDg1LCAweDUxLCAweDgzLCAweGUwLCAweGZlLCAweDE0LCAweGI0LCAweDBjLCAweDAwLCAweDUwfSB9LAoreyAweDkyMzEsCTE2LAl7MHg1YiwgMHg5MCwgMHg5MiwgMHgzOSwgMHhmOCwgMHgyOCwgMHgyOCwgMHg3MywgMHgwMiwgMHg5MiwgMHg1ZCwgMHgwMiwgMHg5MiwgMHg1ZCwgMHgwMiwgMHg5Mn0gfSwKK3sgMHg5MjQxLAkxNiwJezB4NjcsIDB4MDIsIDB4OTIsIDB4NzEsIDB4MDIsIDB4OTIsIDB4NzEsIDB4MDIsIDB4OTIsIDB4NzEsIDB4MDIsIDB4OTIsIDB4ODUsIDB4MDIsIDB4OTIsIDB4NWR9IH0sCit7IDB4OTI1MSwJMTYsCXsweDAyLCAweDkyLCAweDdiLCAweDAyLCAweDkyLCAweDVkLCAweDAyLCAweDkyLCAweDhkLCAweDAyLCAweDkyLCAweDVkLCAweGVmLCAweDY0LCAweDAyLCAweDYwfSB9LAoreyAweDkyNjEsCTE2LAl7MHgyYiwgMHg3NSwgMHg1MCwgMHhmZiwgMHg4MCwgMHgyNiwgMHhlZiwgMHg2NCwgMHgwZSwgMHg2MCwgMHgyMSwgMHg3NSwgMHg1MCwgMHhmZiwgMHg4MCwgMHgxY30gfSwKK3sgMHg5MjcxLAkxNiwJezB4ZWYsIDB4NjQsIDB4MDMsIDB4NjAsIDB4MTcsIDB4NzUsIDB4NTAsIDB4ZmYsIDB4ODAsIDB4MTIsIDB4ZWYsIDB4NjQsIDB4MDMsIDB4NjAsIDB4MGQsIDB4NzV9IH0sCit7IDB4OTI4MSwJMTYsCXsweDUwLCAweGZmLCAweDgwLCAweDA4LCAweGVmLCAweDY0LCAweDA2LCAweDYwLCAweDAzLCAweDc1LCAweDUwLCAweGZmLCAweGU1LCAweDUwLCAweDYwLCAweDE1fSB9LAoreyAweDkyOTEsCTE2LAl7MHg5MCwgMHgwMSwgMHg5OCwgMHg3NCwgMHgxMSwgMHhmMCwgMHhhMywgMHhlZSwgMHhmMCwgMHg3ZSwgMHgwMSwgMHg3ZiwgMHg5OCwgMHg3ZCwgMHgwMiwgMHgxMn0gfSwKK3sgMHg5MmExLAkxNiwJezB4OTEsIDB4NmEsIDB4YWYsIDB4NTAsIDB4MjIsIDB4ZTQsIDB4ZjUsIDB4NTAsIDB4ODUsIDB4NTIsIDB4ODIsIDB4ODUsIDB4NTEsIDB4ODMsIDB4ZTAsIDB4MTR9IH0sCit7IDB4OTJiMSwJMTYsCXsweGI0LCAweDBmLCAweDAwLCAweDQwLCAweDAzLCAweDAyLCAweDkzLCAweGNmLCAweDkwLCAweDkyLCAweGMwLCAweGY4LCAweDI4LCAweDI4LCAweDczLCAweDAyfSB9LAoreyAweDkyYzEsCTE2LAl7MHg5MiwgMHhlZCwgMHgwMiwgMHg5MiwgMHhmOSwgMHgwMiwgMHg5MywgMHgwNSwgMHgwMiwgMHg5MywgMHg1MywgMHgwMiwgMHg5MywgMHg1ZSwgMHgwMiwgMHg5M30gfSwKK3sgMHg5MmQxLAkxNiwJezB4NjksIDB4MDIsIDB4OTMsIDB4NzQsIDB4MDIsIDB4OTMsIDB4N2YsIDB4MDIsIDB4OTMsIDB4OGEsIDB4MDIsIDB4OTMsIDB4OTUsIDB4MDIsIDB4OTMsIDB4YTB9IH0sCit7IDB4OTJlMSwJMTYsCXsweDAyLCAweDkzLCAweGE3LCAweDAyLCAweDkzLCAweGNmLCAweDAyLCAweDkzLCAweGIyLCAweDAyLCAweDkzLCAweGJkLCAweGFmLCAweDU2LCAweGFlLCAweDU1fSB9LAoreyAweDkyZjEsCTE2LAl7MHgxMiwgMHg4NCwgMHg0MSwgMHg4ZiwgMHg1MCwgMHgwMiwgMHg5MywgMHhkMiwgMHhhZiwgMHg1NiwgMHhhZSwgMHg1NSwgMHgxMiwgMHg4NSwgMHg2MSwgMHg4Zn0gfSwKK3sgMHg5MzAxLAkxNiwJezB4NTAsIDB4MDIsIDB4OTMsIDB4ZDIsIDB4ODUsIDB4NTUsIDB4NTMsIDB4ODUsIDB4NTYsIDB4NTQsIDB4ZTUsIDB4NTQsIDB4MjQsIDB4MDEsIDB4ZmYsIDB4ZTR9IH0sCit7IDB4OTMxMSwJMTYsCXsweDM1LCAweDUzLCAweGZlLCAweDEyLCAweDg2LCAweGJlLCAweGFmLCAweDU0LCAweGFlLCAweDUzLCAweDEyLCAweDg3LCAweDUxLCAweDhmLCAweDUwLCAweGVmfSB9LAoreyAweDkzMjEsCTE2LAl7MHg2NCwgMHgwMSwgMHg2MCwgMHgwMywgMHgwMiwgMHg5MywgMHhkMiwgMHhhZiwgMHg1NCwgMHhhZSwgMHg1MywgMHgxMiwgMHg4NywgMHhhNiwgMHg4ZiwgMHg1MH0gfSwKK3sgMHg5MzMxLAkxNiwJezB4ZTUsIDB4NTAsIDB4NzAsIDB4MDMsIDB4MDIsIDB4OTMsIDB4ZDIsIDB4ODUsIDB4NTQsIDB4ODIsIDB4ODUsIDB4NTMsIDB4ODMsIDB4ZTAsIDB4NzUsIDB4ZjB9IH0sCit7IDB4OTM0MSwJMTYsCXsweDBkLCAweGE0LCAweDI0LCAweGY0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDAyLCAweGFmLCAweDgyLCAweGZlLCAweDEyLCAweDg3LCAweGE2LCAweDAyfSB9LAoreyAweDkzNTEsCTE2LAl7MHg5MywgMHhkMiwgMHhhZiwgMHg1NiwgMHhhZSwgMHg1NSwgMHgxMiwgMHg4YywgMHhhNiwgMHg4ZiwgMHg1MCwgMHg4MCwgMHg3NCwgMHhhZiwgMHg1NiwgMHhhZX0gfSwKK3sgMHg5MzYxLAkxNiwJezB4NTUsIDB4MTIsIDB4OGQsIDB4MjcsIDB4OGYsIDB4NTAsIDB4ODAsIDB4NjksIDB4YWYsIDB4NTYsIDB4YWUsIDB4NTUsIDB4MTIsIDB4OGQsIDB4NzAsIDB4OGZ9IH0sCit7IDB4OTM3MSwJMTYsCXsweDUwLCAweDgwLCAweDVlLCAweGFmLCAweDRmLCAweGFlLCAweDRlLCAweDEyLCAweDhlLCAweDk5LCAweDhmLCAweDUwLCAweDgwLCAweDUzLCAweGFmLCAweDU2fSB9LAoreyAweDkzODEsCTE2LAl7MHhhZSwgMHg1NSwgMHgxMiwgMHg4YiwgMHhiZCwgMHg4ZiwgMHg1MCwgMHg4MCwgMHg0OCwgMHhhZiwgMHg1NiwgMHhhZSwgMHg1NSwgMHgxMiwgMHg4NiwgMHgyZH0gfSwKK3sgMHg5MzkxLAkxNiwJezB4OGYsIDB4NTAsIDB4ODAsIDB4M2QsIDB4YWYsIDB4NTYsIDB4YWUsIDB4NTUsIDB4MTIsIDB4OGMsIDB4NjIsIDB4OGYsIDB4NTAsIDB4ODAsIDB4MzIsIDB4MTJ9IH0sCit7IDB4OTNhMSwJMTYsCXsweDkxLCAweGI5LCAweDhmLCAweDUwLCAweDgwLCAweDJiLCAweGFmLCAweDU2LCAweGFlLCAweDU1LCAweDEyLCAweDhkLCAweGI1LCAweDhmLCAweDUwLCAweDgwfSB9LAoreyAweDkzYjEsCTE2LAl7MHgyMCwgMHhhZiwgMHg1NiwgMHhhZSwgMHg1NSwgMHgxMiwgMHg4ZCwgMHhkNiwgMHg4ZiwgMHg1MCwgMHg4MCwgMHgxNSwgMHhhZiwgMHg0ZiwgMHhhZSwgMHg0ZX0gfSwKK3sgMHg5M2MxLAkxNiwJezB4N2MsIDB4MDIsIDB4N2QsIDB4YWYsIDB4N2IsIDB4NDAsIDB4MTIsIDB4OTEsIDB4MzcsIDB4ZTQsIDB4ZjUsIDB4NTAsIDB4ODAsIDB4MDMsIDB4NzUsIDB4NTB9IH0sCit7IDB4OTNkMSwJMTYsCXsweGZmLCAweGU1LCAweDUwLCAweDYwLCAweDFkLCAweDkwLCAweDAxLCAweDk4LCAweDc0LCAweDExLCAweGYwLCAweDg1LCAweDUyLCAweDgyLCAweDg1LCAweDUxfSB9LAoreyAweDkzZTEsCTE2LAl7MHg4MywgMHhlMCwgMHg5MCwgMHgwMSwgMHg5OSwgMHhmMCwgMHg3ZSwgMHgwMSwgMHg3ZiwgMHg5OCwgMHg3ZCwgMHgwMiwgMHgxMiwgMHg5MSwgMHg2YSwgMHhhZn0gfSwKK3sgMHg5M2YxLAkxNiwJezB4NTAsIDB4MjIsIDB4ODUsIDB4NTIsIDB4ODIsIDB4ODUsIDB4NTEsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4MTQsIDB4MjQsIDB4ZmEsIDB4NTAsIDB4MDQsIDB4MjR9IH0sCit7IDB4OTQwMSwJMTYsCXsweGZlLCAweDcwLCAweDFmLCAweDkwLCAweDAxLCAweDk4LCAweDc0LCAweDEwLCAweGYwLCAweGEzLCAweGVmLCAweGYwLCAweDg1LCAweDU2LCAweDgyLCAweDg1fSB9LAoreyAweDk0MTEsCTE2LAl7MHg1NSwgMHg4MywgMHhlMCwgMHg5MCwgMHgwMSwgMHg5YSwgMHhmMCwgMHg3ZSwgMHgwMSwgMHg3ZiwgMHg5OCwgMHg3ZCwgMHgwMywgMHgxMiwgMHg5MSwgMHg2YX0gfSwKK3sgMHg5NDIxLAk0LAl7MHg4ZiwgMHg1MCwgMHhhZiwgMHg1MH0gfSwKK3sgMHg5NDI1LAkxLAl7MHgyMn0gfSwKK3sgMHg5NDI2LAk4LAl7MHg4ZiwgMHg1MSwgMHg4ZSwgMHg1MCwgMHg4ZCwgMHg0ZiwgMHg4YywgMHg0ZX0gfSwKK3sgMHg5NDJlLAkxNiwJezB4NzUsIDB4NTgsIDB4MDEsIDB4NzUsIDB4NTksIDB4OWMsIDB4ZTQsIDB4ZjUsIDB4NTcsIDB4YWYsIDB4NTMsIDB4MTUsIDB4NTMsIDB4ZWYsIDB4NzAsIDB4MDN9IH0sCit7IDB4OTQzZSwJMTYsCXsweDAyLCAweDk0LCAweGM0LCAweGFmLCAweDUyLCAweGU0LCAweGZjLCAweGZkLCAweGZlLCAweGY4LCAweGY5LCAweGZhLCAweGFiLCAweDA3LCAweGFmLCAweDUxfSB9LAoreyAweDk0NGUsCTE2LAl7MHhhZSwgMHg1MCwgMHhhZCwgMHg0ZiwgMHhhYywgMHg0ZSwgMHgxMiwgMHhhMywgMHgyMSwgMHhhZiwgMHgwMywgMHg4ZiwgMHg1NiwgMHhhZiwgMHg1MSwgMHhhZX0gfSwKK3sgMHg5NDVlLAkxNiwJezB4NTAsIDB4YWQsIDB4NGYsIDB4YWMsIDB4NGUsIDB4YzAsIDB4MDQsIDB4YzAsIDB4MDUsIDB4YzAsIDB4MDYsIDB4YzAsIDB4MDcsIDB4YWYsIDB4NTIsIDB4ZTR9IH0sCit7IDB4OTQ2ZSwJMTYsCXsweGZjLCAweGZkLCAweGZlLCAweGY4LCAweGY5LCAweGZhLCAweGFiLCAweDA3LCAweGQwLCAweDA3LCAweGQwLCAweDA2LCAweGQwLCAweDA1LCAweGQwLCAweDA0fSB9LAoreyAweDk0N2UsCTE2LAl7MHgxMiwgMHhhMywgMHgyMSwgMHg4ZiwgMHg1MSwgMHg4ZSwgMHg1MCwgMHg4ZCwgMHg0ZiwgMHg4YywgMHg0ZSwgMHhlNSwgMHg1NiwgMHgyNCwgMHgzMCwgMHhmNX0gfSwKK3sgMHg5NDhlLAkxNiwJezB4NTYsIDB4ZDMsIDB4OTQsIDB4MzksIDB4NDAsIDB4MDYsIDB4NzQsIDB4MDcsIDB4MjUsIDB4NTYsIDB4ZjUsIDB4NTYsIDB4MDUsIDB4NTksIDB4ZTUsIDB4NTl9IH0sCit7IDB4OTQ5ZSwJMTYsCXsweGFlLCAweDU4LCAweDcwLCAweDAyLCAweDA1LCAweDU4LCAweDE0LCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGU0LCAweGYwLCAweDA1LCAweDU5LCAweGU1fSB9LAoreyAweDk0YWUsCTE2LAl7MHg1OSwgMHhhZSwgMHg1OCwgMHg3MCwgMHgwMiwgMHgwNSwgMHg1OCwgMHgxNCwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlNSwgMHg1NiwgMHhmMCwgMHgwNX0gfSwKK3sgMHg5NGJlLAkxNiwJezB4NTcsIDB4MDUsIDB4NTcsIDB4MDIsIDB4OTQsIDB4MzcsIDB4ZTUsIDB4NTksIDB4MTUsIDB4NTksIDB4NzAsIDB4MDIsIDB4MTUsIDB4NTgsIDB4YWYsIDB4NTd9IH0sCit7IDB4OTRjZSwJMTYsCXsweDE1LCAweDU3LCAweGVmLCAweDYwLCAweDIzLCAweGU1LCAweDU5LCAweDE1LCAweDU5LCAweGFlLCAweDU4LCAweDcwLCAweDAyLCAweDE1LCAweDU4LCAweGY1fSB9LAoreyAweDk0ZGUsCTE2LAl7MHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHhmZiwgMHgwNSwgMHg1NSwgMHhlNSwgMHg1NSwgMHhhYywgMHg1NCwgMHg3MCwgMHgwMiwgMHgwNSwgMHg1NCwgMHgxNH0gfSwKK3sgMHg5NGVlLAk4LAl7MHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHg4MCwgMHhkNn0gfSwKK3sgMHg5NGY2LAkxLAl7MHgyMn0gfSwKK3sgMHg5NGY3LAkxNiwJezB4ZTQsIDB4OTAsIDB4MDEsIDB4YzksIDB4ZjAsIDB4N2UsIDB4MDEsIDB4N2YsIDB4Y2EsIDB4OTAsIDB4MDEsIDB4YmUsIDB4ZWUsIDB4ZjAsIDB4YTMsIDB4ZWZ9IH0sCit7IDB4OTUwNywJMTAsCXsweGYwLCAweDkwLCAweDAxLCAweGMyLCAweGVlLCAweGYwLCAweGEzLCAweGVmLCAweGYwLCAweDIyfSB9LAoreyAweDk1MTEsCTE2LAl7MHhhYSwgMHgwNywgMHhhOSwgMHgwNSwgMHg5MCwgMHgwMSwgMHhjOSwgMHhlMCwgMHhjMywgMHg5NCwgMHg0MCwgMHg1MCwgMHg2MSwgMHhhYywgMHgwMiwgMHg3NH0gfSwKK3sgMHg5NTIxLAkxNiwJezB4MDEsIDB4N2UsIDB4MDAsIDB4YTgsIDB4MDQsIDB4MDgsIDB4ODAsIDB4MDUsIDB4YzMsIDB4MzMsIDB4Y2UsIDB4MzMsIDB4Y2UsIDB4ZDgsIDB4ZjksIDB4ZmZ9IH0sCit7IDB4OTUzMSwJMTYsCXsweGU0LCAweGVmLCAweDU1LCAweDM0LCAweDYwLCAweDQ1LCAweGVhLCAweDA0LCAweGZmLCAweDkwLCAweDAxLCAweGMyLCAweGUwLCAweGZjLCAweGEzLCAweGUwfSB9LAoreyAweDk1NDEsCTE2LAl7MHhmZCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHhhMywgMHhlOSwgMHhmMCwgMHg4ZCwgMHg4MiwgMHg4YywgMHg4MywgMHhhMywgMHhhM30gfSwKK3sgMHg5NTUxLAkxNiwJezB4ZWIsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4YzIsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDMsIDB4MTIsIDB4YTIsIDB4ODEsIDB4ZmMsIDB4ZDMsIDB4ZTUsIDB4ZjB9IH0sCit7IDB4OTU2MSwJMTYsCXsweDk0LCAweDg3LCAweGVjLCAweDk0LCAweDAyLCAweDQwLCAweDBhLCAweDkwLCAweDAxLCAweGMyLCAweDc0LCAweDAxLCAweGYwLCAweGEzLCAweDc0LCAweGNhfSB9LAoreyAweDk1NzEsCTE2LAl7MHhmMCwgMHhjMiwgMHhhZiwgMHg5MCwgMHgwMSwgMHhjOSwgMHhlMCwgMHgwNCwgMHhmMCwgMHhkMiwgMHhhZiwgMHg3ZiwgMHgwMSwgMHgyMiwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg5NTgxLAkxLAl7MHgyMn0gfSwKK3sgMHg5NTgyLAkxNiwJezB4OTAsIDB4MDEsIDB4YzksIDB4ZTAsIDB4ZDMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NTUsIDB4OTAsIDB4MDEsIDB4YmUsIDB4ZTAsIDB4ZmMsIDB4YTMsIDB4ZTB9IH0sCit7IDB4OTU5MiwJMTYsCXsweGFhLCAweDA0LCAweGY5LCAweDdiLCAweDAxLCAweGMwLCAweDAzLCAweGMwLCAweDAyLCAweGMwLCAweDAxLCAweGFhLCAweDA2LCAweGE5LCAweDA3LCAweGE4fSB9LAoreyAweDk1YTIsCTE2LAl7MHgwMSwgMHhhYywgMHgwMiwgMHhhZCwgMHgwMywgMHhkMCwgMHgwMSwgMHhkMCwgMHgwMiwgMHhkMCwgMHgwMywgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwMywgMHgxMn0gfSwKK3sgMHg5NWIyLAkxNiwJezB4YTIsIDB4MTIsIDB4OTAsIDB4MDEsIDB4YmUsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDMsIDB4MTIsIDB4YTIsIDB4ODEsIDB4ZmMsIDB4ZDMsIDB4ZTUsIDB4ZjB9IH0sCit7IDB4OTVjMiwJMTYsCXsweDk0LCAweDg3LCAweGVjLCAweDk0LCAweDAyLCAweDQwLCAweDBhLCAweDkwLCAweDAxLCAweGJlLCAweDc0LCAweDAxLCAweGYwLCAweGEzLCAweDc0LCAweGNhfSB9LAoreyAweDk1ZDIsCTE2LAl7MHhmMCwgMHhjMiwgMHhhZiwgMHg5MCwgMHgwMSwgMHhjOSwgMHhlMCwgMHgxNCwgMHhmMCwgMHhkMiwgMHhhZiwgMHg3ZiwgMHgwMSwgMHgyMiwgMHg3ZiwgMHgwMH0gfSwKK3sgMHg5NWUyLAkxLAl7MHgyMn0gfSwKK3sgMHg5NWUzLAkxNiwJezB4OTAsIDB4N2YsIDB4YzIsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4NzMsIDB4N2UsIDB4N2IsIDB4N2YsIDB4ODAsIDB4NzUsIDB4NTMsIDB4N2IsIDB4NzUsIDB4NTR9IH0sCit7IDB4OTVmMywJMTYsCXsweDgwLCAweGU1LCAweDU0LCAweDI0LCAweDAxLCAweGZmLCAweGU0LCAweDM1LCAweDUzLCAweGE5LCAweDA3LCAweDdiLCAweDAxLCAweDhiLCAweDU1LCAweGY1fSB9LAoreyAweDk2MDMsCTE2LAl7MHg1NiwgMHg4OSwgMHg1NywgMHhmZSwgMHgxMiwgMHg5NSwgMHg4MiwgMHhlZiwgMHg2MCwgMHg1MCwgMHhhYiwgMHg1NSwgMHhhYSwgMHg1NiwgMHhhOSwgMHg1N30gfSwKK3sgMHg5NjEzLAkxNiwJezB4MTIsIDB4YTIsIDB4M2IsIDB4MTQsIDB4ZmYsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4YTIsIDB4NTQsIDB4YjQsIDB4MDIsIDB4MTYsIDB4YzIsIDB4YWZ9IH0sCit7IDB4OTYyMywJMTYsCXsweGVmLCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAxLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwLCAweGY1LCAweDgzLCAweGUwLCAweDQ0fSB9LAoreyAweDk2MzMsCTE2LAl7MHgwNCwgMHhmMCwgMHhkMiwgMHhhZiwgMHg3NCwgMHgwMSwgMHg3ZSwgMHgwMCwgMHhhOCwgMHgwNywgMHgwOCwgMHg4MCwgMHgwNSwgMHhjMywgMHgzMywgMHhjZX0gfSwKK3sgMHg5NjQzLAkxNiwJezB4MzMsIDB4Y2UsIDB4ZDgsIDB4ZjksIDB4ZmYsIDB4ZTQsIDB4ZWYsIDB4NTUsIDB4MzQsIDB4NjAsIDB4MGYsIDB4ODUsIDB4NTQsIDB4ODIsIDB4ODUsIDB4NTN9IH0sCit7IDB4OTY1MywJMTAsCXsweDgzLCAweDc0LCAweDBkLCAweGYwLCAweDkwLCAweDdmLCAweGMzLCAweDc0LCAweDA0LCAweGYwfSB9LAoreyAweDk2NWQsCTEsCXsweDIyfSB9LAoreyAweDk2NWUsCTE2LAl7MHgxMiwgMHg5NSwgMHhlMywgMHhlNCwgMHhmNSwgMHg0ZSwgMHg3NCwgMHgzYSwgMHgyNSwgMHg0ZSwgMHhmOCwgMHhlNiwgMHg1NCwgMHhmMCwgMHhmNSwgMHg0Zn0gfSwKK3sgMHg5NjZlLAkxNiwJezB4NzQsIDB4YzUsIDB4MjUsIDB4NGUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDEsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjUsIDB4NGYsIDB4ZmYsIDB4YzR9IH0sCit7IDB4OTY3ZSwJMTYsCXsweDU0LCAweDBmLCAweGY1LCAweDUwLCAweDYwLCAweDIyLCAweDc0LCAweGM1LCAweDI1LCAweDRlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDAxLCAweGY1fSB9LAoreyAweDk2OGUsCTE2LAl7MHg4MywgMHhlNSwgMHg0ZiwgMHhmMCwgMHhhZiwgMHg0ZSwgMHg3ZCwgMHgwMSwgMHhlNSwgMHg0ZiwgMHg0NSwgMHg1MCwgMHhmYiwgMHgxMiwgMHg5NSwgMHgxMX0gfSwKK3sgMHg5NjllLAkxNiwJezB4ZWYsIDB4NzAsIDB4MDUsIDB4MTIsIDB4OTUsIDB4ZTMsIDB4ODAsIDB4ZWMsIDB4MDUsIDB4NGUsIDB4ZTUsIDB4NGUsIDB4YzMsIDB4OTQsIDB4MDQsIDB4NDB9IH0sCit7IDB4OTZhZSwJMTYsCXsweGI1LCAweDEyLCAweDk1LCAweGUzLCAweGU1LCAweDNlLCAweDYwLCAweDQ4LCAweGU0LCAweGY1LCAweDRlLCAweGFmLCAweDRlLCAweDc0LCAweDAxLCAweGE4fSB9LAoreyAweDk2YmUsCTE2LAl7MHgwNywgMHgwOCwgMHg4MCwgMHgwMiwgMHhjMywgMHgzMywgMHhkOCwgMHhmYywgMHhmNSwgMHg0ZiwgMHg1NSwgMHgzZSwgMHg2MCwgMHgyOSwgMHhlNSwgMHg0ZX0gfSwKK3sgMHg5NmNlLAkxNiwJezB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MjAsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4MzAsIDB4ZTZ9IH0sCit7IDB4OTZkZSwJMTYsCXsweDE2LCAweGFmLCAweDRlLCAweDdkLCAweDA0LCAweDdiLCAweDgwLCAweDEyLCAweDk1LCAweDExLCAweGVmLCAweDcwLCAweDA1LCAweDEyLCAweDk1LCAweGUzfSB9LAoreyAweDk2ZWUsCTE2LAl7MHg4MCwgMHhlZiwgMHhlNSwgMHg0ZiwgMHhmNCwgMHg1MiwgMHgzZSwgMHgwNSwgMHg0ZSwgMHhlNSwgMHg0ZSwgMHhjMywgMHg5NCwgMHgwNCwgMHg0MCwgMHhiYn0gfSwKK3sgMHg5NmZlLAkxNiwJezB4OTAsIDB4MDMsIDB4MDAsIDB4ZTAsIDB4NjAsIDB4MDMsIDB4MDIsIDB4OTcsIDB4ZGYsIDB4NzQsIDB4MTksIDB4ZjAsIDB4ZTUsIDB4MzMsIDB4YzMsIDB4OTR9IH0sCit7IDB4OTcwZSwJMTYsCXsweDAxLCAweDQwLCAweDBkLCAweDkwLCAweDIwLCAweDc4LCAweGUwLCAweDU0LCAweDBmLCAweDc1LCAweDUxLCAweDAwLCAweGY1LCAweDUyLCAweDgwLCAweDA5fSB9LAoreyAweDk3MWUsCTE2LAl7MHg3ZiwgMHgwMiwgMHgxMiwgMHgxMSwgMHgyNywgMHg4ZSwgMHg1MSwgMHg4ZiwgMHg1MiwgMHhjMywgMHhlNSwgMHg1MSwgMHg2NCwgMHg4MCwgMHg5NCwgMHg4MH0gfSwKK3sgMHg5NzJlLAkxNiwJezB4NDAsIDB4ZGEsIDB4OTAsIDB4MDEsIDB4YmMsIDB4ZTAsIDB4NjUsIDB4NTIsIDB4ZjAsIDB4NjAsIDB4MzcsIDB4ZTQsIDB4ZjUsIDB4NGUsIDB4YWYsIDB4NGV9IH0sCit7IDB4OTczZSwJMTYsCXsweDc0LCAweDAxLCAweGE4LCAweDA3LCAweDA4LCAweDgwLCAweDAyLCAweGMzLCAweDMzLCAweGQ4LCAweGZjLCAweGY1LCAweDRmLCAweDkwLCAweDAxLCAweGJjfSB9LAoreyAweDk3NGUsCTE2LAl7MHhlMCwgMHg1NSwgMHg0ZiwgMHg2MCwgMHgxNCwgMHhhZiwgMHg0ZSwgMHg3ZCwgMHgwOCwgMHhlNSwgMHg0ZiwgMHg1NSwgMHg1MiwgMHhmYiwgMHgxMiwgMHg5NX0gfSwKK3sgMHg5NzVlLAkxNiwJezB4MTEsIDB4ZWYsIDB4NzAsIDB4MDUsIDB4MTIsIDB4OTUsIDB4ZTMsIDB4ODAsIDB4ZWMsIDB4MDUsIDB4NGUsIDB4ZTUsIDB4NGUsIDB4YzMsIDB4OTQsIDB4MDR9IH0sCit7IDB4OTc2ZSwJMTYsCXsweDQwLCAweGNjLCAweDkwLCAweDAxLCAweGJjLCAweGU1LCAweDUyLCAweGYwLCAweGU0LCAweGY1LCAweDRlLCAweGMyLCAweGFmLCAweDc0LCAweDM2LCAweDI1fSB9LAoreyAweDk3N2UsCTE2LAl7MHg0ZSwgMHhmOCwgMHhlNiwgMHhmNSwgMHg0ZiwgMHhlNCwgMHhmNiwgMHhkMiwgMHhhZiwgMHg1MywgMHg0ZiwgMHgxZSwgMHhlNSwgMHg0ZiwgMHg2MCwgMHgxMX0gfSwKK3sgMHg5NzhlLAkxNiwJezB4YWYsIDB4NGUsIDB4N2QsIDB4MDIsIDB4YWIsIDB4NGYsIDB4MTIsIDB4OTUsIDB4MTEsIDB4ZWYsIDB4NzAsIDB4MDUsIDB4MTIsIDB4OTUsIDB4ZTMsIDB4ODB9IH0sCit7IDB4OTc5ZSwJMTYsCXsweGVmLCAweDc0LCAweDJkLCAweDI1LCAweDRlLCAweGY4LCAweGU2LCAweGY1LCAweDRmLCAweDc0LCAweGZjLCAweDI1LCAweDRlLCAweGY1LCAweDgyLCAweGU0fSB9LAoreyAweDk3YWUsCTE2LAl7MHgzNCwgMHgwMiwgMHhmNSwgMHg4MywgMHhlMCwgMHg2NSwgMHg0ZiwgMHg2MCwgMHgxMSwgMHhhZiwgMHg0ZSwgMHg3ZCwgMHgwNCwgMHhhYiwgMHg0ZiwgMHgxMn0gfSwKK3sgMHg5N2JlLAkxNiwJezB4OTUsIDB4MTEsIDB4ZWYsIDB4NzAsIDB4MDUsIDB4MTIsIDB4OTUsIDB4ZTMsIDB4ODAsIDB4ZWYsIDB4NzQsIDB4ZmMsIDB4MjUsIDB4NGUsIDB4ZjUsIDB4ODJ9IH0sCit7IDB4OTdjZSwJMTYsCXsweGU0LCAweDM0LCAweDAyLCAweGY1LCAweDgzLCAweGU1LCAweDRmLCAweGYwLCAweDA1LCAweDRlLCAweGU1LCAweDRlLCAweGMzLCAweDk0LCAweDA0LCAweDQwfSB9LAoreyAweDk3ZGUsCTQsCXsweDlhLCAweDEyLCAweDk1LCAweGUzfSB9LAoreyAweDk3ZTIsCTEsCXsweDIyfSB9LAoreyAweDk3ZTMsCTEyLAl7MHg3OCwgMHg3ZiwgMHhlNCwgMHhmNiwgMHhkOCwgMHhmZCwgMHg3NSwgMHg4MSwgMHg2NywgMHgwMiwgMHg5OCwgMHgyYX0gfSwKK3sgMHg5N2VmLAkxNiwJezB4MDIsIDB4MDUsIDB4YWQsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4NDAsIDB4MDMsIDB4ZjYsIDB4ODAsIDB4MDEsIDB4ZjJ9IH0sCit7IDB4OTdmZiwJMTYsCXsweDA4LCAweGRmLCAweGY0LCAweDgwLCAweDI5LCAweGU0LCAweDkzLCAweGEzLCAweGY4LCAweDU0LCAweDA3LCAweDI0LCAweDBjLCAweGM4LCAweGMzLCAweDMzfSB9LAoreyAweDk4MGYsCTE2LAl7MHhjNCwgMHg1NCwgMHgwZiwgMHg0NCwgMHgyMCwgMHhjOCwgMHg4MywgMHg0MCwgMHgwNCwgMHhmNCwgMHg1NiwgMHg4MCwgMHgwMSwgMHg0NiwgMHhmNiwgMHhkZn0gfSwKK3sgMHg5ODFmLAkxNiwJezB4ZTQsIDB4ODAsIDB4MGIsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4OTAsIDB4OTgsIDB4NmYsIDB4ZTQsIDB4N2V9IH0sCit7IDB4OTgyZiwJMTYsCXsweDAxLCAweDkzLCAweDYwLCAweGJjLCAweGEzLCAweGZmLCAweDU0LCAweDNmLCAweDMwLCAweGU1LCAweDA5LCAweDU0LCAweDFmLCAweGZlLCAweGU0LCAweDkzfSB9LAoreyAweDk4M2YsCTE2LAl7MHhhMywgMHg2MCwgMHgwMSwgMHgwZSwgMHhjZiwgMHg1NCwgMHhjMCwgMHgyNSwgMHhlMCwgMHg2MCwgMHhhOCwgMHg0MCwgMHhiOCwgMHhlNCwgMHg5MywgMHhhM30gfSwKK3sgMHg5ODRmLAkxNiwJezB4ZmEsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2F9IH0sCit7IDB4OTg1ZiwJMTYsCXsweGYwLCAweGEzLCAweGM4LCAweGM1LCAweDgyLCAweGM4LCAweGNhLCAweGM1LCAweDgzLCAweGNhLCAweGRmLCAweGU5LCAweGRlLCAweGU3LCAweDgwLCAweGJlfSB9LAoreyAweDk4NmYsCTE2LAl7MHg2MCwgMHgyNCwgMHgwMiwgMHg4YSwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHg4MSwgMHg4MiwgMHg4NCwgMHg4OH0gfSwKK3sgMHg5ODdmLAkxNiwJezB4OTAsIDB4YTAsIDB4YzAsIDB4YzEsIDB4YzIsIDB4YzQsIDB4YzgsIDB4ZDAsIDB4ZTAsIDB4ZTEsIDB4ZTIsIDB4ZTQsIDB4ZTgsIDB4ZjAsIDB4ZjEsIDB4ZjJ9IH0sCit7IDB4OTg4ZiwJOCwJezB4ZjQsIDB4ZjgsIDB4ZjksIDB4ZmEsIDB4ZmMsIDB4ZmQsIDB4ZmUsIDB4ZmZ9IH0sCit7IDB4OTg5NywJMSwJezB4MDB9IH0sCit7IDB4OTg5OCwJOCwJezB4OGIsIDB4NTksIDB4OGEsIDB4NWEsIDB4ODksIDB4NWIsIDB4OGQsIDB4NWN9IH0sCit7IDB4OThhMCwJMTYsCXsweGU0LCAweGY1LCAweDVkLCAweGY1LCAweDVlLCAweGFmLCAweDVjLCAweDE1LCAweDVjLCAweGVmLCAweDYwLCAweDM2LCAweGFiLCAweDU5LCAweDA1LCAweDVifSB9LAoreyAweDk4YjAsCTE2LAl7MHhlNSwgMHg1YiwgMHhhYSwgMHg1YSwgMHg3MCwgMHgwMiwgMHgwNSwgMHg1YSwgMHgxNCwgMHhmOSwgMHgxMiwgMHhhMiwgMHgzYiwgMHhmZiwgMHhlNSwgMHg1ZH0gfSwKK3sgMHg5OGMwLAkxNiwJezB4ZTUsIDB4NWUsIDB4NmYsIDB4MjUsIDB4ZTAsIDB4ZmYsIDB4ZTQsIDB4MzMsIDB4ZmUsIDB4NzQsIDB4OTUsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZWUsIDB4MzR9IH0sCit7IDB4OThkMCwJMTYsCXsweDllLCAweGY1LCAweDgzLCAweGU1LCAweDVkLCAweGZmLCAweGU0LCAweDkzLCAweGY1LCAweDVkLCAweDc0LCAweDAxLCAweDkzLCAweDZmLCAweGY1LCAweDVlfSB9LAoreyAweDk4ZTAsCTYsCXsweDgwLCAweGMzLCAweGFlLCAweDVkLCAweGFmLCAweDVlfSB9LAoreyAweDk4ZTYsCTEsCXsweDIyfSB9LAoreyAweDk4ZTcsCTExLAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHhkMCwgMHg3NSwgMHhkMCwgMHgxOH0gfSwKK3sgMHg5OGYyLAkxNiwJezB4OTAsIDB4MjAsIDB4NjAsIDB4ZTAsIDB4NTQsIDB4MGYsIDB4ZmUsIDB4MzAsIDB4ZTAsIDB4MDUsIDB4OTAsIDB4MjAsIDB4MDIsIDB4ZTAsIDB4ZmYsIDB4ZWV9IH0sCit7IDB4OTkwMiwJMTYsCXsweDMwLCAweGUxLCAweDA1LCAweDkwLCAweDIwLCAweDBhLCAweGUwLCAweGZmLCAweGVlLCAweDMwLCAweGUyLCAweDA1LCAweDkwLCAweDIwLCAweDEyLCAweGUwfSB9LAoreyAweDk5MTIsCTE2LAl7MHhmZiwgMHhlZSwgMHgzMCwgMHhlMywgMHgwNSwgMHg5MCwgMHgyMCwgMHgxYSwgMHhlMCwgMHhmZiwgMHg5MCwgMHgwMSwgMHhjNCwgMHhlMCwgMHhiNSwgMHgxZX0gfSwKK3sgMHg5OTIyLAkxMCwJezB4MDQsIDB4ZTQsIDB4ZjAsIDB4ODAsIDB4MDUsIDB4OTAsIDB4MDEsIDB4YzQsIDB4ZWUsIDB4ZjB9IH0sCit7IDB4OTkyYywJOSwJezB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9IH0sCit7IDB4OTkzNSwJMiwJezB4YTksIDB4MDN9IH0sCit7IDB4OTkzNywJMTYsCXsweGVmLCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAwLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwLCAweGFiLCAweDgyLCAweGZhLCAweGU1fSB9LAoreyAweDk5NDcsCTE2LAl7MHg1YywgMHg0NSwgMHg1ZCwgMHhmNSwgMHg1ZSwgMHhlOSwgMHg2MCwgMHgxNCwgMHg4YSwgMHg4MywgMHhlNSwgMHg4MiwgMHgyNCwgMHgwNCwgMHhmNSwgMHg4Mn0gfSwKK3sgMHg5OTU3LAkxNiwJezB4ZTQsIDB4MzUsIDB4ODMsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NGQsIDB4ZjAsIDB4ZTQsIDB4ZmUsIDB4ODAsIDB4MTMsIDB4ZWIsIDB4MjQsIDB4MDQsIDB4ZjV9IH0sCit7IDB4OTk2NywJMTYsCXsweDgyLCAweGU0LCAweDNhLCAweGY1LCAweDgzLCAweGUwLCAweGZmLCAweGVkLCAweGY0LCAweGZjLCAweGVmLCAweDVjLCAweGYwLCAweGFlLCAweDVlLCAweGVifSB9LAoreyAweDk5NzcsCTE2LAl7MHgyNCwgMHgwNiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NSwgMHg1ZSwgMHhmYywgMHhiNSwgMHgwNiwgMHgwMywgMHhhZn0gfSwKK3sgMHg5OTg3LAkxNiwJezB4MDUsIDB4MjIsIDB4ZTUsIDB4NWMsIDB4NWMsIDB4ZmUsIDB4ZTUsIDB4NWQsIDB4NWMsIDB4ZmQsIDB4ZTksIDB4NjAsIDB4MTYsIDB4ZWUsIDB4NzAsIDB4MDR9IH0sCit7IDB4OTk5NywJMTYsCXsweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweGFlLCAweDA3LCAweGVkLCAweDcwLCAweDA0LCAweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmfSB9LAoreyAweDk5YTcsCTE2LAl7MHgwMCwgMHhhZCwgMHgwNywgMHhlZSwgMHg2MCwgMHgwMywgMHhhZiwgMHg1YywgMHgyMiwgMHhlZCwgMHg2MCwgMHgwMywgMHhhZiwgMHg1ZCwgMHgyMiwgMHg3Zn0gfSwKK3sgMHg5OWI3LAkxLAl7MHgwMH0gfSwKK3sgMHg5OWI4LAkxLAl7MHgyMn0gfSwKK3sgMHg5OWI5LAkxNiwJezB4NzUsIDB4NTUsIDB4MDIsIDB4NzUsIDB4NTYsIDB4YjAsIDB4OTAsIDB4MDMsIDB4MzUsIDB4NzQsIDB4MGYsIDB4ZjAsIDB4ODUsIDB4NTYsIDB4ODIsIDB4ODV9IH0sCit7IDB4OTljOSwJMTYsCXsweDU1LCAweDgzLCAweGEzLCAweGUwLCAweGZmLCAweDkwLCAweDAzLCAweDM3LCAweGYwLCAweDg1LCAweDU2LCAweDgyLCAweDg1LCAweDU1LCAweDgzLCAweGUwfSB9LAoreyAweDk5ZDksCTE2LAl7MHg5MCwgMHgwMywgMHgzNiwgMHhmMCwgMHg5MCwgMHgwMywgMHgzOCwgMHg3NCwgMHhmZiwgMHhmMCwgMHg3NSwgMHg1NywgMHgwMywgMHg3NSwgMHg1OCwgMHgzOX0gfSwKK3sgMHg5OWU5LAkxNiwJezB4ZWYsIDB4MTQsIDB4YjQsIDB4MGIsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MDIsIDB4OWUsIDB4NWQsIDB4OTAsIDB4OTksIDB4ZmEsIDB4ZjgsIDB4MjgsIDB4Mjh9IH0sCit7IDB4OTlmOSwJMTYsCXsweDczLCAweDAyLCAweDlhLCAweDFiLCAweDAyLCAweDlhLCAweGJhLCAweDAyLCAweDliLCAweGJmLCAweDAyLCAweDliLCAweGRlLCAweDAyLCAweDliLCAweGRlfSB9LAoreyAweDlhMDksCTE2LAl7MHgwMiwgMHg5YywgMHg5NCwgMHgwMiwgMHg5YywgMHhjZiwgMHgwMiwgMHg5YywgMHhmNCwgMHgwMiwgMHg5ZCwgMHhiMiwgMHgwMiwgMHg5ZCwgMHhlMiwgMHgwMn0gfSwKK3sgMHg5YTE5LAkxNiwJezB4OWUsIDB4MGUsIDB4ZTQsIDB4ZjUsIDB4NGUsIDB4ZTUsIDB4NGUsIDB4NzUsIDB4ZjAsIDB4MDgsIDB4YTQsIDB4MjQsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4ZTR9IH0sCit7IDB4OWEyOSwJMTYsCXsweDM0LCAweDIwLCAweGFmLCAweDgyLCAweGY1LCAweDUzLCAweDhmLCAweDU0LCAweGU0LCAweGZmLCAweGU0LCAweGZlLCAweGVmLCAweDYwLCAweDEwLCAweDc0fSB9LAoreyAweDlhMzksCTE2LAl7MHg4YSwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwMiwgMHhmNSwgMHg4MywgMHhlMCwgMHhmNCwgMHhmNSwgMHg0ZiwgMHg4MCwgMHgwZCwgMHg3NH0gfSwKK3sgMHg5YTQ5LAkxNiwJezB4OGEsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDIsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4NGYsIDB4ZTUsIDB4NTQsIDB4MjQsIDB4MDd9IH0sCit7IDB4OWE1OSwJMTYsCXsweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDUzLCAweGY1LCAweDgzLCAweGU1LCAweDRmLCAweGYwLCAweGUwLCAweGY1LCAweDUwLCAweDY1LCAweDRmLCAweDYwfSB9LAoreyAweDlhNjksCTE2LAl7MHgzOCwgMHhlNCwgMHg5MCwgMHgwMywgMHgzOCwgMHhmMCwgMHhlNSwgMHg0ZSwgMHgwNCwgMHhmZCwgMHgwNSwgMHg1OCwgMHhlNSwgMHg1OCwgMHhhYSwgMHg1N30gfSwKK3sgMHg5YTc5LAkxNiwJezB4NzAsIDB4MDIsIDB4MDUsIDB4NTcsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGEsIDB4ODMsIDB4ZWQsIDB4ZjAsIDB4MDUsIDB4NTgsIDB4ZTUsIDB4NTgsIDB4YWN9IH0sCit7IDB4OWE4OSwJMTYsCXsweDU3LCAweDcwLCAweDAyLCAweDA1LCAweDU3LCAweDE0LCAweGY1LCAweDgyLCAweDhjLCAweDgzLCAweGU1LCAweDRmLCAweGYwLCAweDg1LCAweDU4LCAweDgyfSB9LAoreyAweDlhOTksCTE2LAl7MHg4NSwgMHg1NywgMHg4MywgMHhlNSwgMHg1MCwgMHhmMCwgMHgwMiwgMHg5ZSwgMHg2MywgMHgwZSwgMHhiZSwgMHgyNCwgMHg4ZiwgMHgwZiwgMHhlZiwgMHg2NH0gfSwKK3sgMHg5YWE5LAkxNiwJezB4MDIsIDB4NzAsIDB4ODcsIDB4MDUsIDB4NGUsIDB4ZTUsIDB4NGUsIDB4NjQsIDB4MDQsIDB4NjAsIDB4MDMsIDB4MDIsIDB4OWEsIDB4MWUsIDB4MDIsIDB4OWV9IH0sCit7IDB4OWFiOSwJMTYsCXsweDYzLCAweGU0LCAweGY1LCAweDRlLCAweGFmLCAweDRlLCAweGU0LCAweGZkLCAweDEyLCAweDgzLCAweDVhLCAweDA1LCAweDRlLCAweGU1LCAweDRlLCAweGQzfSB9LAoreyAweDlhYzksCTE2LAl7MHg5NCwgMHgwMywgMHg0MCwgMHhmMCwgMHg5MCwgMHgwMCwgMHgwNCwgMHg3NCwgMHg5OCwgMHhmMCwgMHhhMywgMHg3NCwgMHhlNywgMHhmMCwgMHhlNCwgMHhmNX0gfSwKK3sgMHg5YWQ5LAkxNiwJezB4NTAsIDB4N2UsIDB4MjAsIDB4N2YsIDB4MDAsIDB4NzUsIDB4NTMsIDB4MjAsIDB4NzUsIDB4NTQsIDB4MDAsIDB4ZjUsIDB4NGUsIDB4YWYsIDB4NGUsIDB4NzR9IH0sCit7IDB4OWFlOSwJMTYsCXsweDAxLCAweGE4LCAweDA3LCAweDA4LCAweDgwLCAweDAyLCAweGMzLCAweDMzLCAweGQ4LCAweGZjLCAweGY1LCAweDRmLCAweDkwLCAweDAxLCAweGM0LCAweGYwfSB9LAoreyAweDlhZjksCTE2LAl7MHg5MCwgMHgwMSwgMHhjMCwgMHhlNCwgMHhmMCwgMHhhMywgMHg3NCwgMHgwYSwgMHhmMCwgMHg4NSwgMHg1NCwgMHg4MiwgMHg4NSwgMHg1MywgMHg4MywgMHhhM30gfSwKK3sgMHg5YjA5LAkxNiwJezB4NzQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4YzQsIDB4ZTAsIDB4YjUsIDB4NGYsIDB4MzQsIDB4OTAsIDB4MDEsIDB4YzAsIDB4ZTAsIDB4NzAsIDB4MDJ9IH0sCit7IDB4OWIxOSwJMTYsCXsweGEzLCAweGUwLCAweDcwLCAweGVmLCAweDkwLCAweDAzLCAweDM4LCAweGYwLCAweGU1LCAweDRlLCAweDA0LCAweGZmLCAweDA1LCAweDU4LCAweGU1LCAweDU4fSB9LAoreyAweDliMjksCTE2LAl7MHhhYywgMHg1NywgMHg3MCwgMHgwMiwgMHgwNSwgMHg1NywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZiwgMHhmMCwgMHg4NSwgMHg1OCwgMHg4Mn0gfSwKK3sgMHg5YjM5LAkxNiwJezB4ODUsIDB4NTcsIDB4ODMsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4MDEsIDB4YzQsIDB4ZjAsIDB4NzUsIDB4NTAsIDB4ZmYsIDB4OTAsIDB4MDF9IH0sCit7IDB4OWI0OSwJMTYsCXsweGM0LCAweGUwLCAweGZmLCAweDYwLCAweDM3LCAweGU0LCAweDkwLCAweDAzLCAweDM4LCAweGYwLCAweGU1LCAweDRlLCAweDA0LCAweGZlLCAweDA1LCAweDU4fSB9LAoreyAweDliNTksCTE2LAl7MHhlNSwgMHg1OCwgMHhhYywgMHg1NywgMHg3MCwgMHgwMiwgMHgwNSwgMHg1NywgMHgxNCwgMHhmNSwgMHg4MiwgMHg4YywgMHg4MywgMHhlZSwgMHhmMCwgMHgwNX0gfSwKK3sgMHg5YjY5LAkxNiwJezB4NTgsIDB4ZTUsIDB4NTgsIDB4YWMsIDB4NTcsIDB4NzAsIDB4MDIsIDB4MDUsIDB4NTcsIDB4MTQsIDB4ZjUsIDB4ODIsIDB4OGMsIDB4ODMsIDB4ZWYsIDB4ZjB9IH0sCit7IDB4OWI3OSwJMTYsCXsweDg1LCAweDU4LCAweDgyLCAweDg1LCAweDU3LCAweDgzLCAweGU1LCAweDRmLCAweGYwLCAweDc1LCAweDUwLCAweGZmLCAweGU1LCAweDUwLCAweDcwLCAweDE2fSB9LAoreyAweDliODksCTE2LAl7MHg3NCwgMHgwOCwgMHgyNSwgMHg1NCwgMHhmNSwgMHg1NCwgMHhlNCwgMHgzNSwgMHg1MywgMHhmNSwgMHg1MywgMHgwNSwgMHg0ZSwgMHhlNSwgMHg0ZSwgMHg2NH0gfSwKK3sgMHg5Yjk5LAkxNiwJezB4MDQsIDB4NjAsIDB4MDMsIDB4MDIsIDB4OWEsIDB4ZTYsIDB4ZTQsIDB4ZjUsIDB4NGUsIDB4YWYsIDB4NGUsIDB4N2QsIDB4MDEsIDB4MTIsIDB4ODMsIDB4NWF9IH0sCit7IDB4OWJhOSwJMTYsCXsweDA1LCAweDRlLCAweGU1LCAweDRlLCAweGQzLCAweDk0LCAweDAzLCAweDQwLCAweGYwLCAweDkwLCAweDAwLCAweDA0LCAweDc0LCAweDEzLCAweGYwLCAweGEzfSB9LAoreyAweDliYjksCTE2LAl7MHg3NCwgMHgxMiwgMHhmMCwgMHgwMiwgMHg5ZSwgMHg2MywgMHg4NSwgMHg1NiwgMHg4MiwgMHg4NSwgMHg1NSwgMHg4MywgMHhlMCwgMHgxNCwgMHhmZiwgMHg3NH0gfSwKK3sgMHg5YmM5LAkxNiwJezB4MDEsIDB4YTgsIDB4MDcsIDB4MDgsIDB4ODAsIDB4MDIsIDB4YzMsIDB4MzMsIDB4ZDgsIDB4ZmMsIDB4OTAsIDB4MDIsIDB4ZjcsIDB4ZjAsIDB4OTAsIDB4MDF9IH0sCit7IDB4OWJkOSwJMTYsCXsweGM0LCAweGYwLCAweDAyLCAweDllLCAweDYzLCAweDkwLCAweDAxLCAweGMwLCAweDc0LCAweDAzLCAweGYwLCAweGEzLCAweDc0LCAweGU4LCAweGYwLCAweGU0fSB9LAoreyAweDliZTksCTE2LAl7MHhmNSwgMHg1MCwgMHg5MCwgMHgwMiwgMHhmNywgMHhlMCwgMHhmZiwgMHg5MCwgMHgwMSwgMHhjNCwgMHhlMCwgMHhiNSwgMHgwNywgMHgxOSwgMHg5MCwgMHgwMX0gfSwKK3sgMHg5YmY5LAkxNiwJezB4YzAsIDB4ZTAsIDB4NzAsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4NzAsIDB4ZWEsIDB4OTAsIDB4MDMsIDB4MzgsIDB4ZjAsIDB4ODUsIDB4NTgsIDB4ODIsIDB4ODV9IH0sCit7IDB4OWMwOSwJMTYsCXsweDU3LCAweDgzLCAweDc0LCAweGZmLCAweGYwLCAweGY1LCAweDUwLCAweGU1LCAweDUwLCAweDYwLCAweDAzLCAweDAyLCAweDllLCAweDYzLCAweDkwLCAweDAxfSB9LAoreyAweDljMTksCTE2LAl7MHhjMCwgMHhmMCwgMHhhMywgMHg3NCwgMHg5NiwgMHhmMCwgMHg5MCwgMHgwMSwgMHhjMCwgMHhlMCwgMHg3MCwgMHgwMiwgMHhhMywgMHhlMCwgMHg3MCwgMHhmNn0gfSwKK3sgMHg5YzI5LAkxNiwJezB4ZTUsIDB4MzMsIDB4YzMsIDB4OTQsIDB4MDEsIDB4NDAsIDB4MGQsIDB4OTAsIDB4MjAsIDB4NzgsIDB4ZTAsIDB4NTQsIDB4MGYsIDB4NzUsIDB4NTEsIDB4MDB9IH0sCit7IDB4OWMzOSwJMTYsCXsweGY1LCAweDUyLCAweDgwLCAweDA5LCAweDdmLCAweDAyLCAweDEyLCAweDExLCAweDI3LCAweDhlLCAweDUxLCAweDhmLCAweDUyLCAweGMzLCAweGU1LCAweDUxfSB9LAoreyAweDljNDksCTE2LAl7MHg2NCwgMHg4MCwgMHg5NCwgMHg4MCwgMHg0MCwgMHhkYSwgMHhlNSwgMHg1MiwgMHg1NCwgMHgwZiwgMHhmNSwgMHg1MCwgMHg5MCwgMHgwMiwgMHhmNywgMHhlMH0gfSwKK3sgMHg5YzU5LAkxNiwJezB4NTUsIDB4NTAsIDB4NzAsIDB4MDQsIDB4N2YsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4OGYsIDB4NGYsIDB4ODUsIDB4NTYsIDB4ODIsIDB4ODV9IH0sCit7IDB4OWM2OSwJMTYsCXsweDU1LCAweDgzLCAweGEzLCAweGUwLCAweGI0LCAweDA1LCAweDBjLCAweGU1LCAweDRmLCAweDcwLCAweDA0LCAweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmfSB9LAoreyAweDljNzksCTE2LAl7MHgwMCwgMHg4ZiwgMHg0ZiwgMHhlNSwgMHg0ZiwgMHg3MCwgMHgwMywgMHgwMiwgMHg5ZSwgMHg2MywgMHhlNCwgMHg5MCwgMHgwMywgMHgzOCwgMHhmMCwgMHg4NX0gfSwKK3sgMHg5Yzg5LAkxNiwJezB4NTgsIDB4ODIsIDB4ODUsIDB4NTcsIDB4ODMsIDB4ZTUsIDB4NTAsIDB4ZjAsIDB4MDIsIDB4OWUsIDB4NjMsIDB4ZTQsIDB4ZmYsIDB4ZmQsIDB4MTIsIDB4ODN9IH0sCit7IDB4OWM5OSwJMTYsCXsweDVhLCAweDdlLCAweDIwLCAweDdmLCAweDAwLCAweDc1LCAweDUzLCAweDIwLCAweDc1LCAweDU0LCAweDAwLCAweDg1LCAweDU0LCAweDgyLCAweDg1LCAweDUzfSB9LAoreyAweDljYTksCTE2LAl7MHg4MywgMHhhMywgMHhhMywgMHhhMywgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg4NSwgMHg1NCwgMHg4MiwgMHg4NSwgMHg1MywgMHg4MywgMHg3NCwgMHgwMX0gfSwKK3sgMHg5Y2I5LAkxNiwJezB4ZjAsIDB4YTMsIDB4ZTQsIDB4ZjAsIDB4ODUsIDB4NTQsIDB4ODIsIDB4ODUsIDB4NTMsIDB4ODMsIDB4YTMsIDB4YTMsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4N2Z9IH0sCit7IDB4OWNjOSwJMTYsCXsweGYwLCAweGQyLCAweDA0LCAweDAyLCAweDllLCAweDYzLCAweGMyLCAweDA0LCAweDdlLCAweDIwLCAweDdmLCAweDAwLCAweDc1LCAweDUzLCAweDIwLCAweDc1fSB9LAoreyAweDljZDksCTE2LAl7MHg1NCwgMHgwMCwgMHhlNSwgMHg1NCwgMHgyNCwgMHgwNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg1MywgMHhmNSwgMHg4MywgMHhlMCwgMHgzMCwgMHhlNn0gfSwKK3sgMHg5Y2U5LAkxNiwJezB4ZjEsIDB4ZTQsIDB4ZmYsIDB4N2QsIDB4MDEsIDB4MTIsIDB4ODMsIDB4NWEsIDB4MDIsIDB4OWUsIDB4NjMsIDB4ZTQsIDB4ZjUsIDB4NTAsIDB4ZjUsIDB4NGV9IH0sCit7IDB4OWNmOSwJMTYsCXsweGFmLCAweDRlLCAweGU0LCAweGZkLCAweDEyLCAweDgzLCAweDVhLCAweGU1LCAweDRlLCAweDc1LCAweGYwLCAweDA4LCAweGE0LCAweDI0LCAweDAwLCAweGY1fSB9LAoreyAweDlkMDksCTE2LAl7MHg4MiwgMHhlNCwgMHgzNCwgMHgyMCwgMHhhZiwgMHg4MiwgMHhmNSwgMHg1MywgMHg4ZiwgMHg1NCwgMHhmNSwgMHg4MywgMHhlNSwgMHg4MiwgMHgyNCwgMHgwNH0gfSwKK3sgMHg5ZDE5LAkxNiwJezB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzUsIDB4ODMsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NTQsIDB4ZmMsIDB4ZjAsIDB4YWYsIDB4NGUsIDB4N2QsIDB4MDEsIDB4N2J9IH0sCit7IDB4OWQyOSwJMTYsCXsweDAxLCAweDc1LCAweDVjLCAweDgwLCAweDc1LCAweDVkLCAweDQwLCAweDEyLCAweDk5LCAweDM1LCAweDhmLCAweDUwLCAweGU1LCAweDUwLCAweDcwLCAweDExfSB9LAoreyAweDlkMzksCTE2LAl7MHhhZiwgMHg0ZSwgMHg3ZCwgMHgwMiwgMHg3YiwgMHgwMSwgMHg3NSwgMHg1YywgMHgxMCwgMHg3NSwgMHg1ZCwgMHgyMCwgMHgxMiwgMHg5OSwgMHgzNSwgMHg4Zn0gfSwKK3sgMHg5ZDQ5LAkxNiwJezB4NTAsIDB4ZTUsIDB4NTAsIDB4NzAsIDB4MTAsIDB4YWYsIDB4NGUsIDB4N2QsIDB4MDEsIDB4ZmIsIDB4NzUsIDB4NWMsIDB4ODAsIDB4NzUsIDB4NWQsIDB4NDB9IH0sCit7IDB4OWQ1OSwJMTYsCXsweDEyLCAweDk5LCAweDM1LCAweDhmLCAweDUwLCAweGU1LCAweDUwLCAweDcwLCAweDEwLCAweGFmLCAweDRlLCAweDdkLCAweDAyLCAweGZiLCAweDc1LCAweDVjfSB9LAoreyAweDlkNjksCTE2LAl7MHgxMCwgMHg3NSwgMHg1ZCwgMHgyMCwgMHgxMiwgMHg5OSwgMHgzNSwgMHg4ZiwgMHg1MCwgMHhhZiwgMHg0ZSwgMHg3ZCwgMHgwMSwgMHgxMiwgMHg4MywgMHg1YX0gfSwKK3sgMHg5ZDc5LAkxNiwJezB4ZTUsIDB4NTAsIDB4NjAsIDB4MjYsIDB4ZTQsIDB4OTAsIDB4MDMsIDB4MzgsIDB4ZjAsIDB4ZTUsIDB4NGUsIDB4MDQsIDB4ZmYsIDB4MDUsIDB4NTgsIDB4ZTV9IH0sCit7IDB4OWQ4OSwJMTYsCXsweDU4LCAweGFjLCAweDU3LCAweDcwLCAweDAyLCAweDA1LCAweDU3LCAweDE0LCAweGY1LCAweDgyLCAweDhjLCAweDgzLCAweGVmLCAweGYwLCAweDg1LCAweDU4fSB9LAoreyAweDlkOTksCTE2LAl7MHg4MiwgMHg4NSwgMHg1NywgMHg4MywgMHhlNSwgMHg1MCwgMHhmMCwgMHgwMiwgMHg5ZSwgMHg2MywgMHgwNSwgMHg0ZSwgMHhlNSwgMHg0ZSwgMHhkMywgMHg5NH0gfSwKK3sgMHg5ZGE5LAkxNiwJezB4MDMsIDB4NTAsIDB4MDMsIDB4MDIsIDB4OWMsIDB4ZjksIDB4MDIsIDB4OWUsIDB4NjMsIDB4ZTQsIDB4OTAsIDB4MDMsIDB4NTksIDB4ZjAsIDB4YTMsIDB4ZjB9IH0sCit7IDB4OWRiOSwJMTYsCXsweGEzLCAweGYwLCAweGEzLCAweGYwLCAweGEzLCAweGYwLCAweGEzLCAweDc0LCAweDEwLCAweGYwLCAweGEzLCAweDc0LCAweDllLCAweGYwLCAweGEzLCAweDc0fSB9LAoreyAweDlkYzksCTE2LAl7MHg4NSwgMHhmMCwgMHg3ZSwgMHgwMywgMHg3ZiwgMHg1OSwgMHgxMiwgMHg4MSwgMHhkOSwgMHhlZiwgMHg2NCwgMHgwOCwgMHg3MCwgMHgwMywgMHgwMiwgMHg5ZX0gfSwKK3sgMHg5ZGQ5LAkxNiwJezB4NjMsIDB4ZTQsIDB4OTAsIDB4MDMsIDB4MzgsIDB4ZjAsIDB4MDIsIDB4OWUsIDB4NjMsIDB4ZTQsIDB4OTAsIDB4MDMsIDB4NTksIDB4ZjAsIDB4YTMsIDB4ZjB9IH0sCit7IDB4OWRlOSwJMTYsCXsweGEzLCAweGYwLCAweGEzLCAweGYwLCAweGEzLCAweGYwLCAweGEzLCAweDc0LCAweDEwLCAweGYwLCAweGEzLCAweGU1LCAweDU3LCAweGYwLCAweGEzLCAweGU1fSB9LAoreyAweDlkZjksCTE2LAl7MHg1OCwgMHhmMCwgMHg3ZSwgMHgwMywgMHg3ZiwgMHg1OSwgMHgxMiwgMHgxOSwgMHhjMSwgMHhlZiwgMHg2NCwgMHgwOCwgMHg2MCwgMHg1YywgMHhlNCwgMHg5MH0gfSwKK3sgMHg5ZTA5LAkxNiwJezB4MDMsIDB4MzgsIDB4ZjAsIDB4ODAsIDB4NTUsIDB4ZTUsIDB4NTYsIDB4MjQsIDB4MDIsIDB4ZmYsIDB4ZTQsIDB4MzUsIDB4NTUsIDB4ZmEsIDB4YTksIDB4MDd9IH0sCit7IDB4OWUxOSwJMTYsCXsweDdiLCAweDAxLCAweDdkLCAweDEwLCAweDEyLCAweDk4LCAweDk4LCAweGVmLCAweDRlLCAweDcwLCAweDMyLCAweDkwLCAweDAzLCAweDU5LCAweGYwLCAweGEzfSB9LAoreyAweDllMjksCTE2LAl7MHhmMCwgMHhhMywgMHhmMCwgMHhhMywgMHhmMCwgMHhhMywgMHhmMCwgMHhhMywgMHg3NCwgMHgxMCwgMHhmMCwgMHhlNSwgMHg1NiwgMHgyNCwgMHgwMiwgMHg5MH0gfSwKK3sgMHg5ZTM5LAkxNiwJezB4MDMsIDB4NjAsIDB4ZjAsIDB4ZTQsIDB4MzUsIDB4NTUsIDB4OTAsIDB4MDMsIDB4NWYsIDB4ZjAsIDB4N2UsIDB4MDMsIDB4N2YsIDB4NTksIDB4MTIsIDB4ODF9IH0sCit7IDB4OWU0OSwJMTYsCXsweGQ5LCAweGVmLCAweDY0LCAweDA4LCAweDYwLCAweDE0LCAweGU0LCAweDkwLCAweDAzLCAweDM4LCAweGYwLCAweDgwLCAweDBkLCAweGU0LCAweDkwLCAweDAzfSB9LAoreyAweDllNTksCTE2LAl7MHgzOCwgMHhmMCwgMHg4MCwgMHgwNiwgMHg5MCwgMHgwMywgMHgzOCwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHgwMSwgMHhjMCwgMHhlNCwgMHhmMCwgMHhhM30gfSwKK3sgMHg5ZTY5LAkxNiwJezB4NzQsIDB4MGEsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4YzAsIDB4ZTAsIDB4NzAsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4NzAsIDB4ZjYsIDB4N2UsIDB4MDMsIDB4N2Z9IH0sCit7IDB4OWU3OSwJMTEsCXsweDM1LCAweDdkLCAweDI0LCAweDEyLCAweDkxLCAweDZhLCAweGU0LCAweDkwLCAweDAyLCAweGFmLCAweGYwfSB9LAoreyAweDllODQsCTEsCXsweDIyfSB9LAoreyAweDllODUsCTE2LAl7MHhmZiwgMHhmZSwgMHhmYywgMHhmOCwgMHhmMCwgMHhlMCwgMHhjMCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgwMywgMHgwNywgMHgwZiwgMHgxZiwgMHgzZiwgMHg3Zn0gfSwKK3sgMHg5ZTk1LAkxNiwJezB4MDAsIDB4MDAsIDB4YzAsIDB4YzEsIDB4YzEsIDB4ODEsIDB4MDEsIDB4NDAsIDB4YzMsIDB4MDEsIDB4MDMsIDB4YzAsIDB4MDIsIDB4ODAsIDB4YzIsIDB4NDF9IH0sCit7IDB4OWVhNSwJMTYsCXsweGM2LCAweDAxLCAweDA2LCAweGMwLCAweDA3LCAweDgwLCAweGM3LCAweDQxLCAweDA1LCAweDAwLCAweGM1LCAweGMxLCAweGM0LCAweDgxLCAweDA0LCAweDQwfSB9LAoreyAweDllYjUsCTE2LAl7MHhjYywgMHgwMSwgMHgwYywgMHhjMCwgMHgwZCwgMHg4MCwgMHhjZCwgMHg0MSwgMHgwZiwgMHgwMCwgMHhjZiwgMHhjMSwgMHhjZSwgMHg4MSwgMHgwZSwgMHg0MH0gfSwKK3sgMHg5ZWM1LAkxNiwJezB4MGEsIDB4MDAsIDB4Y2EsIDB4YzEsIDB4Y2IsIDB4ODEsIDB4MGIsIDB4NDAsIDB4YzksIDB4MDEsIDB4MDksIDB4YzAsIDB4MDgsIDB4ODAsIDB4YzgsIDB4NDF9IH0sCit7IDB4OWVkNSwJMTYsCXsweGQ4LCAweDAxLCAweDE4LCAweGMwLCAweDE5LCAweDgwLCAweGQ5LCAweDQxLCAweDFiLCAweDAwLCAweGRiLCAweGMxLCAweGRhLCAweDgxLCAweDFhLCAweDQwfSB9LAoreyAweDllZTUsCTE2LAl7MHgxZSwgMHgwMCwgMHhkZSwgMHhjMSwgMHhkZiwgMHg4MSwgMHgxZiwgMHg0MCwgMHhkZCwgMHgwMSwgMHgxZCwgMHhjMCwgMHgxYywgMHg4MCwgMHhkYywgMHg0MX0gfSwKK3sgMHg5ZWY1LAkxNiwJezB4MTQsIDB4MDAsIDB4ZDQsIDB4YzEsIDB4ZDUsIDB4ODEsIDB4MTUsIDB4NDAsIDB4ZDcsIDB4MDEsIDB4MTcsIDB4YzAsIDB4MTYsIDB4ODAsIDB4ZDYsIDB4NDF9IH0sCit7IDB4OWYwNSwJMTYsCXsweGQyLCAweDAxLCAweDEyLCAweGMwLCAweDEzLCAweDgwLCAweGQzLCAweDQxLCAweDExLCAweDAwLCAweGQxLCAweGMxLCAweGQwLCAweDgxLCAweDEwLCAweDQwfSB9LAoreyAweDlmMTUsCTE2LAl7MHhmMCwgMHgwMSwgMHgzMCwgMHhjMCwgMHgzMSwgMHg4MCwgMHhmMSwgMHg0MSwgMHgzMywgMHgwMCwgMHhmMywgMHhjMSwgMHhmMiwgMHg4MSwgMHgzMiwgMHg0MH0gfSwKK3sgMHg5ZjI1LAkxNiwJezB4MzYsIDB4MDAsIDB4ZjYsIDB4YzEsIDB4ZjcsIDB4ODEsIDB4MzcsIDB4NDAsIDB4ZjUsIDB4MDEsIDB4MzUsIDB4YzAsIDB4MzQsIDB4ODAsIDB4ZjQsIDB4NDF9IH0sCit7IDB4OWYzNSwJMTYsCXsweDNjLCAweDAwLCAweGZjLCAweGMxLCAweGZkLCAweDgxLCAweDNkLCAweDQwLCAweGZmLCAweDAxLCAweDNmLCAweGMwLCAweDNlLCAweDgwLCAweGZlLCAweDQxfSB9LAoreyAweDlmNDUsCTE2LAl7MHhmYSwgMHgwMSwgMHgzYSwgMHhjMCwgMHgzYiwgMHg4MCwgMHhmYiwgMHg0MSwgMHgzOSwgMHgwMCwgMHhmOSwgMHhjMSwgMHhmOCwgMHg4MSwgMHgzOCwgMHg0MH0gfSwKK3sgMHg5ZjU1LAkxNiwJezB4MjgsIDB4MDAsIDB4ZTgsIDB4YzEsIDB4ZTksIDB4ODEsIDB4MjksIDB4NDAsIDB4ZWIsIDB4MDEsIDB4MmIsIDB4YzAsIDB4MmEsIDB4ODAsIDB4ZWEsIDB4NDF9IH0sCit7IDB4OWY2NSwJMTYsCXsweGVlLCAweDAxLCAweDJlLCAweGMwLCAweDJmLCAweDgwLCAweGVmLCAweDQxLCAweDJkLCAweDAwLCAweGVkLCAweGMxLCAweGVjLCAweDgxLCAweDJjLCAweDQwfSB9LAoreyAweDlmNzUsCTE2LAl7MHhlNCwgMHgwMSwgMHgyNCwgMHhjMCwgMHgyNSwgMHg4MCwgMHhlNSwgMHg0MSwgMHgyNywgMHgwMCwgMHhlNywgMHhjMSwgMHhlNiwgMHg4MSwgMHgyNiwgMHg0MH0gfSwKK3sgMHg5Zjg1LAkxNiwJezB4MjIsIDB4MDAsIDB4ZTIsIDB4YzEsIDB4ZTMsIDB4ODEsIDB4MjMsIDB4NDAsIDB4ZTEsIDB4MDEsIDB4MjEsIDB4YzAsIDB4MjAsIDB4ODAsIDB4ZTAsIDB4NDF9IH0sCit7IDB4OWY5NSwJMTYsCXsweGEwLCAweDAxLCAweDYwLCAweGMwLCAweDYxLCAweDgwLCAweGExLCAweDQxLCAweDYzLCAweDAwLCAweGEzLCAweGMxLCAweGEyLCAweDgxLCAweDYyLCAweDQwfSB9LAoreyAweDlmYTUsCTE2LAl7MHg2NiwgMHgwMCwgMHhhNiwgMHhjMSwgMHhhNywgMHg4MSwgMHg2NywgMHg0MCwgMHhhNSwgMHgwMSwgMHg2NSwgMHhjMCwgMHg2NCwgMHg4MCwgMHhhNCwgMHg0MX0gfSwKK3sgMHg5ZmI1LAkxNiwJezB4NmMsIDB4MDAsIDB4YWMsIDB4YzEsIDB4YWQsIDB4ODEsIDB4NmQsIDB4NDAsIDB4YWYsIDB4MDEsIDB4NmYsIDB4YzAsIDB4NmUsIDB4ODAsIDB4YWUsIDB4NDF9IH0sCit7IDB4OWZjNSwJMTYsCXsweGFhLCAweDAxLCAweDZhLCAweGMwLCAweDZiLCAweDgwLCAweGFiLCAweDQxLCAweDY5LCAweDAwLCAweGE5LCAweGMxLCAweGE4LCAweDgxLCAweDY4LCAweDQwfSB9LAoreyAweDlmZDUsCTE2LAl7MHg3OCwgMHgwMCwgMHhiOCwgMHhjMSwgMHhiOSwgMHg4MSwgMHg3OSwgMHg0MCwgMHhiYiwgMHgwMSwgMHg3YiwgMHhjMCwgMHg3YSwgMHg4MCwgMHhiYSwgMHg0MX0gfSwKK3sgMHg5ZmU1LAkxNiwJezB4YmUsIDB4MDEsIDB4N2UsIDB4YzAsIDB4N2YsIDB4ODAsIDB4YmYsIDB4NDEsIDB4N2QsIDB4MDAsIDB4YmQsIDB4YzEsIDB4YmMsIDB4ODEsIDB4N2MsIDB4NDB9IH0sCit7IDB4OWZmNSwJMTYsCXsweGI0LCAweDAxLCAweDc0LCAweGMwLCAweDc1LCAweDgwLCAweGI1LCAweDQxLCAweDc3LCAweDAwLCAweGI3LCAweGMxLCAweGI2LCAweDgxLCAweDc2LCAweDQwfSB9LAoreyAweGEwMDUsCTE2LAl7MHg3MiwgMHgwMCwgMHhiMiwgMHhjMSwgMHhiMywgMHg4MSwgMHg3MywgMHg0MCwgMHhiMSwgMHgwMSwgMHg3MSwgMHhjMCwgMHg3MCwgMHg4MCwgMHhiMCwgMHg0MX0gfSwKK3sgMHhhMDE1LAkxNiwJezB4NTAsIDB4MDAsIDB4OTAsIDB4YzEsIDB4OTEsIDB4ODEsIDB4NTEsIDB4NDAsIDB4OTMsIDB4MDEsIDB4NTMsIDB4YzAsIDB4NTIsIDB4ODAsIDB4OTIsIDB4NDF9IH0sCit7IDB4YTAyNSwJMTYsCXsweDk2LCAweDAxLCAweDU2LCAweGMwLCAweDU3LCAweDgwLCAweDk3LCAweDQxLCAweDU1LCAweDAwLCAweDk1LCAweGMxLCAweDk0LCAweDgxLCAweDU0LCAweDQwfSB9LAoreyAweGEwMzUsCTE2LAl7MHg5YywgMHgwMSwgMHg1YywgMHhjMCwgMHg1ZCwgMHg4MCwgMHg5ZCwgMHg0MSwgMHg1ZiwgMHgwMCwgMHg5ZiwgMHhjMSwgMHg5ZSwgMHg4MSwgMHg1ZSwgMHg0MH0gfSwKK3sgMHhhMDQ1LAkxNiwJezB4NWEsIDB4MDAsIDB4OWEsIDB4YzEsIDB4OWIsIDB4ODEsIDB4NWIsIDB4NDAsIDB4OTksIDB4MDEsIDB4NTksIDB4YzAsIDB4NTgsIDB4ODAsIDB4OTgsIDB4NDF9IH0sCit7IDB4YTA1NSwJMTYsCXsweDg4LCAweDAxLCAweDQ4LCAweGMwLCAweDQ5LCAweDgwLCAweDg5LCAweDQxLCAweDRiLCAweDAwLCAweDhiLCAweGMxLCAweDhhLCAweDgxLCAweDRhLCAweDQwfSB9LAoreyAweGEwNjUsCTE2LAl7MHg0ZSwgMHgwMCwgMHg4ZSwgMHhjMSwgMHg4ZiwgMHg4MSwgMHg0ZiwgMHg0MCwgMHg4ZCwgMHgwMSwgMHg0ZCwgMHhjMCwgMHg0YywgMHg4MCwgMHg4YywgMHg0MX0gfSwKK3sgMHhhMDc1LAkxNiwJezB4NDQsIDB4MDAsIDB4ODQsIDB4YzEsIDB4ODUsIDB4ODEsIDB4NDUsIDB4NDAsIDB4ODcsIDB4MDEsIDB4NDcsIDB4YzAsIDB4NDYsIDB4ODAsIDB4ODYsIDB4NDF9IH0sCit7IDB4YTA4NSwJMTYsCXsweDgyLCAweDAxLCAweDQyLCAweGMwLCAweDQzLCAweDgwLCAweDgzLCAweDQxLCAweDQxLCAweDAwLCAweDgxLCAweGMxLCAweDgwLCAweDgxLCAweDQwLCAweDQwfSB9LAoreyAweGEwOTUsCTE2LAl7MHhlNCwgMHhmZiwgMHg3NCwgMHhmOCwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwMiwgMHhmNSwgMHg4MywgMHhlMCwgMHg3MCwgMHgwMywgMHgwMn0gfSwKK3sgMHhhMGE1LAkxNiwJezB4YTEsIDB4MzgsIDB4NzQsIDB4M2EsIDB4MmYsIDB4ZjgsIDB4ZTYsIDB4MjAsIDB4ZTUsIDB4MDMsIDB4MDIsIDB4YTEsIDB4MzgsIDB4ZWYsIDB4NzUsIDB4ZjB9IH0sCit7IDB4YTBiNSwJMTYsCXsweDA4LCAweGE0LCAweDI0LCAweDAwLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDIwLCAweGFkLCAweDgyLCAweGZjLCAweGY1LCAweDgzLCAweGU1LCAweDgyfSB9LAoreyAweGEwYzUsCTE2LAl7MHgyNCwgMHgwNSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNSwgMHg4MywgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHg2MCwgMHg2NCwgMHg2MCwgMHg3MCwgMHg2M30gfSwKK3sgMHhhMGQ1LAkxNiwJezB4ZWYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4ZWYsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MDIsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4NzUsIDB4ZjAsIDB4MDF9IH0sCit7IDB4YTBlNSwJMTYsCXsweDEyLCAweGEyLCAweDk3LCAweDg1LCAweGYwLCAweDgyLCAweGY1LCAweDgzLCAweGUwLCAweDhkLCAweDgyLCAweDhjLCAweDgzLCAweGYwLCAweDc0LCAweGY4fSB9LAoreyAweGEwZjUsCTE2LAl7MHgyZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwMiwgMHhmNSwgMHg4MywgMHhlMCwgMHgxNCwgMHhmMCwgMHg3MCwgMHgzNiwgMHhlZiwgMHgyNSwgMHhlMH0gfSwKK3sgMHhhMTA1LAkxNiwJezB4MjQsIDB4YzcsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4ZWYsIDB4MjUsIDB4ZTAsIDB4ZmUsIDB4YzN9IH0sCit7IDB4YTExNSwJMTYsCXsweDc0LCAweDBjLCAweDllLCAweDc1LCAweGYwLCAweDQwLCAweGE0LCAweDI0LCAweDQwLCAweGY1LCAweDgyLCAweGU1LCAweGYwLCAweDM0LCAweDdiLCAweGFkfSB9LAoreyAweGExMjUsCTE2LAl7MHg4MiwgMHhmYywgMHhlZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhlZiwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwMiwgMHhmNSwgMHg4MywgMHhlYywgMHhmMH0gfSwKK3sgMHhhMTM1LAkxMiwJezB4YTMsIDB4ZWQsIDB4ZjAsIDB4MGYsIDB4ZWYsIDB4NjQsIDB4MDQsIDB4NjAsIDB4MDMsIDB4MDIsIDB4YTAsIDB4OTd9IH0sCit7IDB4YTE0MSwJMSwJezB4MjJ9IH0sCit7IDB4YTE0MiwJMTYsCXsweGU3LCAweDA5LCAweGY2LCAweDA4LCAweGRmLCAweGZhLCAweDgwLCAweDQ2LCAweGU3LCAweDA5LCAweGYyLCAweDA4LCAweGRmLCAweGZhLCAweDgwLCAweDNlfSB9LAoreyAweGExNTIsCTE2LAl7MHg4OCwgMHg4MiwgMHg4YywgMHg4MywgMHhlNywgMHgwOSwgMHhmMCwgMHhhMywgMHhkZiwgMHhmYSwgMHg4MCwgMHgzMiwgMHhlMywgMHgwOSwgMHhmNiwgMHgwOH0gfSwKK3sgMHhhMTYyLAkxNiwJezB4ZGYsIDB4ZmEsIDB4ODAsIDB4NzgsIDB4ZTMsIDB4MDksIDB4ZjIsIDB4MDgsIDB4ZGYsIDB4ZmEsIDB4ODAsIDB4NzAsIDB4ODgsIDB4ODIsIDB4OGMsIDB4ODN9IH0sCit7IDB4YTE3MiwJMTYsCXsweGUzLCAweDA5LCAweGYwLCAweGEzLCAweGRmLCAweGZhLCAweDgwLCAweDY0LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweGEzLCAweGY2LCAweDA4fSB9LAoreyAweGExODIsCTE2LAl7MHhkZiwgMHhmYSwgMHg4MCwgMHg1OCwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlMCwgMHhhMywgMHhmMiwgMHgwOCwgMHhkZiwgMHhmYSwgMHg4MCwgMHg0Y30gfSwKK3sgMHhhMTkyLAkxNiwJezB4ODAsIDB4ZDIsIDB4ODAsIDB4ZmEsIDB4ODAsIDB4YzYsIDB4ODAsIDB4ZDQsIDB4ODAsIDB4NjksIDB4ODAsIDB4ZjIsIDB4ODAsIDB4MzMsIDB4ODAsIDB4MTB9IH0sCit7IDB4YTFhMiwJMTYsCXsweDgwLCAweGE2LCAweDgwLCAweGVhLCAweDgwLCAweDlhLCAweDgwLCAweGE4LCAweDgwLCAweGRhLCAweDgwLCAweGUyLCAweDgwLCAweGNhLCAweDgwLCAweDMzfSB9LAoreyAweGExYjIsCTE2LAl7MHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlYywgMHhmYSwgMHhlNCwgMHg5MywgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYywgMHhjNSwgMHg4M30gfSwKK3sgMHhhMWMyLAkxNiwJezB4Y2MsIDB4ZjAsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2MsIDB4YzUsIDB4ODMsIDB4Y2MsIDB4ZGYsIDB4ZTksIDB4ZGUsIDB4ZTcsIDB4ODB9IH0sCit7IDB4YTFkMiwJMTYsCXsweDBkLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweGEzLCAweGY2LCAweDA4LCAweGRmLCAweGY5LCAweGVjLCAweGZhLCAweGE5LCAweGYwfSB9LAoreyAweGExZTIsCTE2LAl7MHhlZCwgMHhmYiwgMHgyMiwgMHg4OSwgMHg4MiwgMHg4YSwgMHg4MywgMHhlYywgMHhmYSwgMHhlMCwgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjY30gfSwKK3sgMHhhMWYyLAkxNiwJezB4YzUsIDB4ODMsIDB4Y2MsIDB4ZjAsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2MsIDB4YzUsIDB4ODMsIDB4Y2MsIDB4ZGYsIDB4ZWEsIDB4ZGV9IH0sCit7IDB4YTIwMiwJMTYsCXsweGU4LCAweDgwLCAweGRiLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweGEzLCAweGYyLCAweDA4LCAweGRmLCAweGY5LCAweDgwLCAweGNjfSB9LAoreyAweGEyMTIsCTE2LAl7MHg4OCwgMHhmMCwgMHhlZCwgMHgyNCwgMHgwMiwgMHhiNCwgMHgwNCwgMHgwMCwgMHg1MCwgMHhjMiwgMHhmNSwgMHg4MiwgMHhlYiwgMHgyNCwgMHgwMiwgMHhiNH0gfSwKK3sgMHhhMjIyLAkxNiwJezB4MDQsIDB4MDAsIDB4NTAsIDB4YjgsIDB4MjMsIDB4MjMsIDB4NDUsIDB4ODIsIDB4ZjUsIDB4ODIsIDB4ZWYsIDB4NGUsIDB4NjAsIDB4YWUsIDB4ZWYsIDB4NjB9IH0sCit7IDB4YTIzMiwJOSwJezB4MDEsIDB4MGUsIDB4ZTUsIDB4ODIsIDB4MjMsIDB4OTAsIDB4YTEsIDB4OTIsIDB4NzN9IH0sCit7IDB4YTIzYiwJMTYsCXsweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDAyLCAweGU3LCAweDIyLCAweGJiLCAweGZlLCAweDAyfSB9LAoreyAweGEyNGIsCTksCXsweGUzLCAweDIyLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweDIyfSB9LAoreyAweGEyNTQsCTE2LAl7MHhiYiwgMHgwMSwgMHgwYywgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MH0gfSwKK3sgMHhhMjY0LAkxNiwJezB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4MjJ9IH0sCit7IDB4YTI3NCwJMTMsCXsweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweDIyfSB9LAoreyAweGEyODEsCTE2LAl7MHhjNSwgMHhmMCwgMHhmOCwgMHhhMywgMHhlMCwgMHgyOCwgMHhmMCwgMHhjNSwgMHhmMCwgMHhmOCwgMHhlNSwgMHg4MiwgMHgxNSwgMHg4MiwgMHg3MCwgMHgwMn0gfSwKK3sgMHhhMjkxLAk2LAl7MHgxNSwgMHg4MywgMHhlMCwgMHgzOCwgMHhmMCwgMHgyMn0gfSwKK3sgMHhhMjk3LAkxNiwJezB4YTMsIDB4ZjgsIDB4ZTAsIDB4YzUsIDB4ZjAsIDB4MjUsIDB4ZjAsIDB4ZjAsIDB4ZTUsIDB4ODIsIDB4MTUsIDB4ODIsIDB4NzAsIDB4MDIsIDB4MTUsIDB4ODN9IH0sCit7IDB4YTJhNywJNiwJezB4ZTAsIDB4YzgsIDB4MzgsIDB4ZjAsIDB4ZTgsIDB4MjJ9IH0sCit7IDB4YTJhZCwJMTYsCXsweGJiLCAweDAxLCAweDEwLCAweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweGYwfSB9LAoreyAweGEyYmQsCTE2LAl7MHhhMywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwOSwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgMHg4NiwgMHhmMCwgMHgwOCwgMHhlNiwgMHgyMiwgMHhiYiwgMHhmZX0gfSwKK3sgMHhhMmNkLAkxNiwJezB4MGEsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4ZjUsIDB4ZjAsIDB4MDgsIDB4ZTIsIDB4MjIsIDB4ZTUsIDB4ODMsIDB4MmEsIDB4ZjUsIDB4ODN9IH0sCit7IDB4YTJkZCwJOCwJezB4ZTksIDB4OTMsIDB4ZjUsIDB4ZjAsIDB4YTMsIDB4ZTksIDB4OTMsIDB4MjJ9IH0sCit7IDB4YTJlNSwJMTYsCXsweDc1LCAweGYwLCAweDA4LCAweDc1LCAweDgyLCAweDAwLCAweGVmLCAweDJmLCAweGZmLCAweGVlLCAweDMzLCAweGZlLCAweGNkLCAweDMzLCAweGNkLCAweGNjfSB9LAoreyAweGEyZjUsCTE2LAl7MHgzMywgMHhjYywgMHhjNSwgMHg4MiwgMHgzMywgMHhjNSwgMHg4MiwgMHg5YiwgMHhlZCwgMHg5YSwgMHhlYywgMHg5OSwgMHhlNSwgMHg4MiwgMHg5OCwgMHg0MH0gfSwKK3sgMHhhMzA1LAkxNiwJezB4MGMsIDB4ZjUsIDB4ODIsIDB4ZWUsIDB4OWIsIDB4ZmUsIDB4ZWQsIDB4OWEsIDB4ZmQsIDB4ZWMsIDB4OTksIDB4ZmMsIDB4MGYsIDB4ZDUsIDB4ZjAsIDB4ZDZ9IH0sCit7IDB4YTMxNSwJMTYsCXsweGU0LCAweGNlLCAweGZiLCAweGU0LCAweGNkLCAweGZhLCAweGU0LCAweGNjLCAweGY5LCAweGE4LCAweDgyLCAweDIyLCAweGI4LCAweDAwLCAweGMxLCAweGI5fSB9LAoreyAweGEzMjUsCTE2LAl7MHgwMCwgMHg1OSwgMHhiYSwgMHgwMCwgMHgyZCwgMHhlYywgMHg4YiwgMHhmMCwgMHg4NCwgMHhjZiwgMHhjZSwgMHhjZCwgMHhmYywgMHhlNSwgMHhmMCwgMHhjYn0gfSwKK3sgMHhhMzM1LAkxNiwJezB4ZjksIDB4NzgsIDB4MTgsIDB4ZWYsIDB4MmYsIDB4ZmYsIDB4ZWUsIDB4MzMsIDB4ZmUsIDB4ZWQsIDB4MzMsIDB4ZmQsIDB4ZWMsIDB4MzMsIDB4ZmMsIDB4ZWJ9IH0sCit7IDB4YTM0NSwJMTYsCXsweDMzLCAweGZiLCAweDEwLCAweGQ3LCAweDAzLCAweDk5LCAweDQwLCAweDA0LCAweGViLCAweDk5LCAweGZiLCAweDBmLCAweGQ4LCAweGU1LCAweGU0LCAweGY5fSB9LAoreyAweGEzNTUsCTE2LAl7MHhmYSwgMHgyMiwgMHg3OCwgMHgxOCwgMHhlZiwgMHgyZiwgMHhmZiwgMHhlZSwgMHgzMywgMHhmZSwgMHhlZCwgMHgzMywgMHhmZCwgMHhlYywgMHgzMywgMHhmY30gfSwKK3sgMHhhMzY1LAkxNiwJezB4YzksIDB4MzMsIDB4YzksIDB4MTAsIDB4ZDcsIDB4MDUsIDB4OWIsIDB4ZTksIDB4OWEsIDB4NDAsIDB4MDcsIDB4ZWMsIDB4OWIsIDB4ZmMsIDB4ZTksIDB4OWF9IH0sCit7IDB4YTM3NSwJMTYsCXsweGY5LCAweDBmLCAweGQ4LCAweGUwLCAweGU0LCAweGM5LCAweGZhLCAweGU0LCAweGNjLCAweGZiLCAweDIyLCAweDc1LCAweGYwLCAweDEwLCAweGVmLCAweDJmfSB9LAoreyAweGEzODUsCTE2LAl7MHhmZiwgMHhlZSwgMHgzMywgMHhmZSwgMHhlZCwgMHgzMywgMHhmZCwgMHhjYywgMHgzMywgMHhjYywgMHhjOCwgMHgzMywgMHhjOCwgMHgxMCwgMHhkNywgMHgwN30gfSwKK3sgMHhhMzk1LAkxNiwJezB4OWIsIDB4ZWMsIDB4OWEsIDB4ZTgsIDB4OTksIDB4NDAsIDB4MGEsIDB4ZWQsIDB4OWIsIDB4ZmQsIDB4ZWMsIDB4OWEsIDB4ZmMsIDB4ZTgsIDB4OTksIDB4Zjh9IH0sCit7IDB4YTNhNSwJMTQsCXsweDBmLCAweGQ1LCAweGYwLCAweGRhLCAweGU0LCAweGNkLCAweGZiLCAweGU0LCAweGNjLCAweGZhLCAweGU0LCAweGM4LCAweGY5LCAweDIyfSB9LAoreyAweGEzYjMsCTE2LAl7MHhlYiwgMHg5ZiwgMHhmNSwgMHhmMCwgMHhlYSwgMHg5ZSwgMHg0MiwgMHhmMCwgMHhlOSwgMHg5ZCwgMHg0MiwgMHhmMCwgMHhlOCwgMHg5YywgMHg0NSwgMHhmMH0gfSwKK3sgMHhhM2MzLAkxLAl7MHgyMn0gfSwKK3sgMHhhM2M0LAkxNiwJezB4ZTgsIDB4NjAsIDB4MGYsIDB4ZWMsIDB4YzMsIDB4MTMsIDB4ZmMsIDB4ZWQsIDB4MTMsIDB4ZmQsIDB4ZWUsIDB4MTMsIDB4ZmUsIDB4ZWYsIDB4MTMsIDB4ZmZ9IH0sCit7IDB4YTNkNCwJMywJezB4ZDgsIDB4ZjEsIDB4MjJ9IH0sCit7IDB4YTNkNywJMTYsCXsweDA4LCAweDA4LCAweDA4LCAweGU2LCAweGNmLCAweDJmLCAweGY2LCAweDE4LCAweGU2LCAweGNlLCAweDNlLCAweGY2LCAweDE4LCAweGU2LCAweGNkLCAweDNkfSB9LAoreyAweGEzZTcsCTcsCXsweGY2LCAweDE4LCAweGU2LCAweGNjLCAweDNjLCAweGY2LCAweDIyfSB9LAoreyAweGEzZWUsCTEyLAl7MHhlYywgMHhmMCwgMHhhMywgMHhlZCwgMHhmMCwgMHhhMywgMHhlZSwgMHhmMCwgMHhhMywgMHhlZiwgMHhmMCwgMHgyMn0gfSwKK3sgMHhhM2ZhLAkxNiwJezB4YTgsIDB4ODIsIDB4ODUsIDB4ODMsIDB4ZjAsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIDB4MTIsIDB4YTQsIDB4MTEsIDB4MTIsIDB4YTQsIDB4MTEsIDB4MTJ9IH0sCit7IDB4YTQwYSwJMTYsCXsweGE0LCAweDExLCAweDEyLCAweGE0LCAweDExLCAweGU0LCAweDczLCAweGU0LCAweDkzLCAweGEzLCAweGM1LCAweDgzLCAweGM1LCAweGYwLCAweGM1LCAweDgzfSB9LAoreyAweGE0MWEsCTE2LAl7MHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhmMCwgMHhhMywgMHhjNSwgMHg4MywgMHhjNSwgMHhmMCwgMHhjNSwgMHg4MywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOH0gfSwKK3sgMHhhNDJhLAkxLAl7MHgyMn0gfSwKK3sgMHhmZmZmLAkwLAl7MHgwMH0gfQorfTsKKworI2lmZGVmIERFQlVHCitzdGF0aWMgY29uc3Qgc3RydWN0IHdoaXRlaGVhdF9oZXhfcmVjb3JkIHdoaXRlaGVhdF9sb2FkZXJbXSA9IHsKK3sgMHgwMDAwLAkzLAl7MHgwMiwgMHgwOSwgMHg4ZH0gfSwKK3sgMHgwMDMzLAkzLAl7MHgwMiwgMHgwZSwgMHg3MH0gfSwKK3sgMHgwMDQzLAkzLAl7MHgwMiwgMHgwYiwgMHgwMH0gfSwKK3sgMHgwMDRiLAkzLAl7MHgwMiwgMHgwNSwgMHhiM30gfSwKK3sgMHgwMTAwLAkxNiwJezB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NTQsIDB4MTAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4NDQsIDB4NTAsIDB4ZjUsIDB4MGYsIDB4MTMsIDB4ZTR9IH0sCit7IDB4MDExMCwJMTYsCXsweDMzLCAweGY1LCAweDExLCAweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDI0LCAweDVlLCAweGI0LCAweDA3LCAweDAwLCAweDQwLCAweDAzLCAweDAyLCAweDAzfSB9LAoreyAweDAxMjAsCTE2LAl7MHg3YywgMHg5MCwgMHgwMSwgMHgyOCwgMHhmOCwgMHgyOCwgMHgyOCwgMHg3MywgMHgwMiwgMHgwMSwgMHhiYywgMHgwMiwgMHgwMSwgMHhiYywgMHgwMiwgMHgwMX0gfSwKK3sgMHgwMTMwLAkxNiwJezB4OTEsIDB4MDIsIDB4MDEsIDB4M2QsIDB4MDIsIDB4MDEsIDB4NTMsIDB4MDIsIDB4MDEsIDB4NmYsIDB4MDIsIDB4MDEsIDB4OWEsIDB4OTAsIDB4N2YsIDB4MDB9IH0sCit7IDB4MDE0MCwJMTYsCXsweGU1LCAweDExLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwfSB9LAoreyAweDAxNTAsCTE2LAl7MHgwMiwgMHgwMywgMHg3YywgMHg5MCwgMHg3ZiwgMHg5MiwgMHhlMCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHg5MH0gfSwKK3sgMHgwMTYwLAkxNiwJezB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDMsIDB4N2MsIDB4MTJ9IH0sCit7IDB4MDE3MCwJMTYsCXsweDBhLCAweDg5LCAweDUwLCAweDA3LCAweGU0LCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweDgwLCAweDA2LCAweDkwLCAweDdmLCAweDAwLCAweDc0LCAweDBmfSB9LAoreyAweDAxODAsCTE2LAl7MHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwM30gfSwKK3sgMHgwMTkwLAkxNiwJezB4N2MsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MGYsIDB4MDIsIDB4MDMsIDB4N2MsIDB4OTAsIDB4N2YsIDB4MDAsIDB4NzQsIDB4MDcsIDB4ZjB9IH0sCit7IDB4MDFhMCwJMTYsCXsweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDdmLCAweGU4LCAweDdlfSB9LAoreyAweDAxYjAsCTE2LAl7MHgwMywgMHgxMiwgMHgwZCwgMHhkNSwgMHhkMiwgMHgwNiwgMHgxMiwgMHgwZCwgMHgwZCwgMHgwMiwgMHgwMywgMHg3YywgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMH0gfSwKK3sgMHgwMWMwLAkxNiwJezB4NzUsIDB4MjksIDB4MDAsIDB4ZjUsIDB4MmEsIDB4YTMsIDB4ZTAsIDB4ZmUsIDB4ZTQsIDB4ZWUsIDB4NDIsIDB4MjksIDB4OTAsIDB4N2YsIDB4ZWUsIDB4ZTB9IH0sCit7IDB4MDFkMCwJMTYsCXsweDc1LCAweDJiLCAweDAwLCAweGY1LCAweDJjLCAweGEzLCAweGUwLCAweGZlLCAweGU0LCAweGVlLCAweDQyLCAweDJiLCAweDkwLCAweDdmLCAweGU4LCAweGUwfSB9LAoreyAweDAxZTAsCTE2LAl7MHg2NCwgMHhjMCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwMiwgMHhjOSwgMHhlNSwgMHgyYywgMHg0NSwgMHgyYiwgMHg3MCwgMHgwMywgMHgwMiwgMHgwMywgMHg3Y30gfSwKK3sgMHgwMWYwLAkxNiwJezB4YzMsIDB4ZTUsIDB4MmMsIDB4OTQsIDB4NDAsIDB4ZTUsIDB4MmIsIDB4OTQsIDB4MDAsIDB4NTAsIDB4MDgsIDB4ODUsIDB4MmIsIDB4MmQsIDB4ODUsIDB4MmN9IH0sCit7IDB4MDIwMCwJMTYsCXsweDJlLCAweDgwLCAweDA2LCAweDc1LCAweDJkLCAweDAwLCAweDc1LCAweDJlLCAweDQwLCAweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDY0LCAweGEzLCAweDcwfSB9LAoreyAweDAyMTAsCTE2LAl7MHgzNCwgMHhmNSwgMHgzMSwgMHhmNSwgMHgzMiwgMHhjMywgMHhlNSwgMHgzMiwgMHg5NSwgMHgyZSwgMHhlNSwgMHgzMSwgMHg5NSwgMHgyZCwgMHg1MCwgMHg1Y30gfSwKK3sgMHgwMjIwLAkxNiwJezB4ZTUsIDB4MmEsIDB4MjUsIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MzEsIDB4MzUsIDB4MjksIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4NzQsIDB4MDB9IH0sCit7IDB4MDIzMCwJMTYsCXsweDI1LCAweDMyLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDMyLCAweGU1LCAweDMyLCAweDcwfSB9LAoreyAweDAyNDAsCTE2LAl7MHgwMiwgMHgwNSwgMHgzMSwgMHg4MCwgMHhkMCwgMHhlNCwgMHhmNSwgMHgzMSwgMHhmNSwgMHgzMiwgMHhjMywgMHhlNSwgMHgzMiwgMHg5NSwgMHgyZSwgMHhlNX0gfSwKK3sgMHgwMjUwLAkxNiwJezB4MzEsIDB4OTUsIDB4MmQsIDB4NTAsIDB4MTgsIDB4NzQsIDB4MDAsIDB4MjUsIDB4MzIsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODN9IH0sCit7IDB4MDI2MCwJMTYsCXsweDc0LCAweGNkLCAweGYwLCAweDA1LCAweDMyLCAweGU1LCAweDMyLCAweDcwLCAweDAyLCAweDA1LCAweDMxLCAweDgwLCAweGRkLCAweGFmLCAweDJhLCAweGFlfSB9LAoreyAweDAyNzAsCTE2LAl7MHgyOSwgMHhhZCwgMHgyZSwgMHg3YSwgMHg3ZiwgMHg3OSwgMHgwMCwgMHg3YiwgMHgwMCwgMHgxMiwgMHgwYiwgMHhmNCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHhlNX0gfSwKK3sgMHgwMjgwLAkxNiwJezB4MmUsIDB4ZjAsIDB4ZTUsIDB4MmUsIDB4MjUsIDB4MmEsIDB4ZjUsIDB4MmEsIDB4ZTUsIDB4MmQsIDB4MzUsIDB4MjksIDB4ZjUsIDB4MjksIDB4YzMsIDB4ZTV9IH0sCit7IDB4MDI5MCwJMTYsCXsweDJjLCAweDk1LCAweDJlLCAweGY1LCAweDJjLCAweGU1LCAweDJiLCAweDk1LCAweDJkLCAweGY1LCAweDJiLCAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweGZmfSB9LAoreyAweDAyYTAsCTE2LAl7MHhjNCwgMHg1NCwgMHgwZiwgMHg3NSwgMHgyZiwgMHgwMCwgMHhmNSwgMHgzMCwgMHhkMywgMHg5NCwgMHgwMCwgMHhlNSwgMHgyZiwgMHg5NCwgMHgwMCwgMHg1MH0gfSwKK3sgMHgwMmIwLAkxNiwJezB4MGMsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MDEsIDB4ZTcsIDB4ODAsIDB4ZjQsIDB4OTAsIDB4N2YsIDB4YjR9IH0sCit7IDB4MDJjMCwJMTYsCXsweGUwLCAweDIwLCAweGUyLCAweDAzLCAweDAyLCAweDAxLCAweGU3LCAweDgwLCAweGY0LCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDY0LCAweDQwLCAweDYwfSB9LAoreyAweDAyZDAsCTE2LAl7MHgwMywgMHgwMiwgMHgwMywgMHg3YywgMHhlNSwgMHgyYywgMHg0NSwgMHgyYiwgMHg3MCwgMHgwMywgMHgwMiwgMHgwMywgMHg3YywgMHhlNCwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwMmUwLAkxNiwJezB4YzUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTIsIDB4ZTAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4NzUsIDB4MmYsIDB4MDAsIDB4ZjUsIDB4MzAsIDB4ZDN9IH0sCit7IDB4MDJmMCwJMTYsCXsweDk0LCAweDAwLCAweGU1LCAweDJmLCAweDk0LCAweDAwLCAweDUwLCAweDA5LCAweDkwLCAweDdmLCAweGM0LCAweGUwLCAweDMwLCAweGUxLCAweDA5LCAweDgwfSB9LAoreyAweDAzMDAsCTE2LAl7MHhmNywgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHgyMCwgMHhlMywgMHhmOSwgMHg5MCwgMHg3ZiwgMHhjNSwgMHhlMCwgMHg3NSwgMHgyZCwgMHgwMCwgMHhmNX0gfSwKK3sgMHgwMzEwLAkxNiwJezB4MmUsIDB4OTAsIDB4N2YsIDB4ZTksIDB4ZTAsIDB4NjQsIDB4YTMsIDB4NzAsIDB4MzgsIDB4OTAsIDB4MjAsIDB4NmIsIDB4ZjAsIDB4ZjUsIDB4MzEsIDB4ZjV9IH0sCit7IDB4MDMyMCwJMTYsCXsweDMyLCAweGMzLCAweGU1LCAweDMyLCAweDk1LCAweDJlLCAweGU1LCAweDMxLCAweDk1LCAweDJkLCAweDUwLCAweDM0LCAweDc0LCAweGMwLCAweDI1LCAweDMyfSB9LAoreyAweDAzMzAsCTE2LAl7MHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZSwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgyYSwgMHgyNSwgMHgzMiwgMHhmNSwgMHg4MiwgMHhlNX0gfSwKK3sgMHgwMzQwLAkxNiwJezB4MzEsIDB4MzUsIDB4MjksIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4MDUsIDB4MzIsIDB4ZTUsIDB4MzIsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MzEsIDB4ODB9IH0sCit7IDB4MDM1MCwJMTYsCXsweGQwLCAweGFmLCAweDJhLCAweGFlLCAweDI5LCAweGFkLCAweDJlLCAweDdhLCAweDdlLCAweDc5LCAweGMwLCAweDdiLCAweGMwLCAweDEyLCAweDBjLCAweDgwfSB9LAoreyAweDAzNjAsCTE2LAl7MHhlNSwgMHgyZSwgMHgyNSwgMHgyYSwgMHhmNSwgMHgyYSwgMHhlNSwgMHgyZCwgMHgzNSwgMHgyOSwgMHhmNSwgMHgyOSwgMHhjMywgMHhlNSwgMHgyYywgMHg5NX0gfSwKK3sgMHgwMzcwLAkxMywJezB4MmUsIDB4ZjUsIDB4MmMsIDB4ZTUsIDB4MmIsIDB4OTUsIDB4MmQsIDB4ZjUsIDB4MmIsIDB4MDIsIDB4MDIsIDB4ZDQsIDB4YzN9IH0sCit7IDB4MDM3ZCwJMSwJezB4MjJ9IH0sCit7IDB4MDM3ZSwJMTYsCXsweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDcwLCAweDAzLCAweDAyLCAweDA0LCAweDU2LCAweDE0LCAweDcwLCAweDAzLCAweDAyLCAweDA0LCAweGQyLCAweDI0fSB9LAoreyAweDAzOGUsCTE2LAl7MHhmZSwgMHg3MCwgMHgwMywgMHgwMiwgMHgwNSwgMHg0NiwgMHgyNCwgMHhmYiwgMHg3MCwgMHgwMywgMHgwMiwgMHgwNCwgMHg1MCwgMHgxNCwgMHg3MCwgMHgwM30gfSwKK3sgMHgwMzllLAkxNiwJezB4MDIsIDB4MDQsIDB4NGEsIDB4MTQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4M2UsIDB4MTQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4NDQsIDB4MjR9IH0sCit7IDB4MDNhZSwJMTYsCXsweDA1LCAweDYwLCAweDAzLCAweDAyLCAweDA1LCAweDlhLCAweDEyLCAweDBlLCAweDdiLCAweDQwLCAweDAzLCAweDAyLCAweDA1LCAweGFiLCAweDkwLCAweDdmfSB9LAoreyAweDAzYmUsCTE2LAl7MHhlYiwgMHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxNiwgMHgxNCwgMHg2MCwgMHg0MCwgMHgyNCwgMHgwMiwgMHg3MCwgMHg2OSwgMHg3NCwgMHgxMSwgMHg5MH0gfSwKK3sgMHgwM2NlLAkxNiwJezB4N2YsIDB4ZDQsIDB4ZjAsIDB4NzQsIDB4MDAsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YWIsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTB9IH0sCit7IDB4MDNkZSwJMTYsCXsweGZmLCAweDEyLCAweDBiLCAweDU4LCAweDhiLCAweDI2LCAweDhhLCAweDI3LCAweDg5LCAweDI4LCAweGVhLCAweDQ5LCAweDYwLCAweDExLCAweGFlLCAweDAyfSB9LAoreyAweDAzZWUsCTE2LAl7MHhlZSwgMHg5MCwgMHg3ZiwgMHhkNCwgMHhmMCwgMHhhZiwgMHgwMSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhYiwgMHg5MH0gfSwKK3sgMHgwM2ZlLAkxNiwJezB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YWIsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZmYsIDB4MTIsIDB4MGN9IH0sCit7IDB4MDQwZSwJMTYsCXsweDNmLCAweDhiLCAweDI2LCAweDhhLCAweDI3LCAweDg5LCAweDI4LCAweGVhLCAweDQ5LCAweDYwLCAweDExLCAweGFlLCAweDAyLCAweGVlLCAweDkwLCAweDdmfSB9LAoreyAweDA0MWUsCTE2LAl7MHhkNCwgMHhmMCwgMHhhZiwgMHgwMSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhYiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMH0gfSwKK3sgMHgwNDJlLAkxNiwJezB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YWIsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YWJ9IH0sCit7IDB4MDQzZSwJMTYsCXsweDEyLCAweDBlLCAweDUyLCAweDAyLCAweDA1LCAweGFiLCAweDEyLCAweDBlLCAweDYwLCAweDAyLCAweDA1LCAweGFiLCAweDEyLCAweDBhLCAweGY3LCAweDAyfSB9LAoreyAweDA0NGUsCTE2LAl7MHgwNSwgMHhhYiwgMHgxMiwgMHgwOCwgMHhmMSwgMHgwMiwgMHgwNSwgMHhhYiwgMHgxMiwgMHgwZSwgMHg3ZCwgMHg0MCwgMHgwMywgMHgwMiwgMHgwNSwgMHhhYn0gfSwKK3sgMHgwNDVlLAkxNiwJezB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4MjQsIDB4N2YsIDB4NjAsIDB4MjQsIDB4MTQsIDB4NjAsIDB4MzEsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NWIsIDB4YTJ9IH0sCit7IDB4MDQ2ZSwJMTYsCXsweDAwLCAweGU0LCAweDMzLCAweGZmLCAweDI1LCAweGUwLCAweGZmLCAweGEyLCAweDAyLCAweGU0LCAweDMzLCAweDRmLCAweDkwLCAweDdmLCAweDAwLCAweGYwfSB9LAoreyAweDA0N2UsCTE2LAl7MHhlNCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhYiwgMHhlNCwgMHg5MCwgMHg3ZiwgMHgwMH0gfSwKK3sgMHgwNDhlLAkxNiwJezB4ZjAsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YWIsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTB9IH0sCit7IDB4MDQ5ZSwJMTYsCXsweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0fSB9LAoreyAweDA0YWUsCTE2LAl7MHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHhlMCwgMHg1NCwgMHhmZCwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHhlNCwgMHhhM30gfSwKK3sgMHgwNGJlLAkxNiwJezB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDUsIDB4YWIsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDF9IH0sCit7IDB4MDRjZSwJMTYsCXsweGYwLCAweDAyLCAweDA1LCAweGFiLCAweDEyLCAweDBlLCAweDdmLCAweDQwLCAweDAzLCAweDAyLCAweDA1LCAweGFiLCAweDkwLCAweDdmLCAweGU4LCAweGUwfSB9LAoreyAweDA0ZGUsCTE2LAl7MHgyNCwgMHhmZSwgMHg2MCwgMHgxZCwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgwNSwgMHhhYiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNH0gfSwKK3sgMHgwNGVlLAkxNiwJezB4MDEsIDB4MDUsIDB4YzIsIDB4MDAsIDB4MDIsIDB4MDUsIDB4YWIsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MDIsIDB4MDV9IH0sCit7IDB4MDRmZSwJMTYsCXsweGFiLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweDcwLCAweDM4LCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0fSB9LAoreyAweDA1MGUsCTE2LAl7MHg1NCwgMHgwZiwgMHhmZiwgMHhlMCwgMHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3Zn0gfSwKK3sgMHgwNTFlLAkxNiwJezB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4MTMsIDB4MTMsIDB4MTMsIDB4NTQsIDB4MWZ9IH0sCit7IDB4MDUyZSwJMTYsCXsweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDkwLCAweDdmLCAweGQ3LCAweGYwLCAweGUwLCAweDQ0LCAweDIwLCAweGYwLCAweDgwLCAweDZlLCAweDkwfSB9LAoreyAweDA1M2UsCTE2LAl7MHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHg2NSwgMHgxMiwgMHgwZSwgMHg4MSwgMHg1MCwgMHg2MCwgMHg5MCwgMHg3ZiwgMHhlOH0gfSwKK3sgMHgwNTRlLAkxNiwJezB4ZTAsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MTgsIDB4MjQsIDB4MDIsIDB4NzAsIDB4NTQsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MDR9IH0sCit7IDB4MDU1ZSwJMTYsCXsweGQyLCAweDAwLCAweDgwLCAweDQ5LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDQwLCAweDkwLCAweDdmLCAweGVhfSB9LAoreyAweDA1NmUsCTE2LAl7MHhlMCwgMHg3MCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHhmNCwgMHg1NCwgMHg4MCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmZiwgMHhlMH0gfSwKK3sgMHgwNTdlLAkxNiwJezB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjQsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4MDF9IH0sCit7IDB4MDU4ZSwJMTYsCXsweGYwLCAweDgwLCAweDFhLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDExLCAweGU0LCAweDkwLCAweDIwLCAweDZhfSB9LAoreyAweDA1OWUsCTE2LAl7MHhmMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwNywgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNH0gfSwKK3sgMHgwNWFlLAk0LAl7MHhlMCwgMHg0NCwgMHgwMiwgMHhmMH0gfSwKK3sgMHgwNWIyLAkxLAl7MHgyMn0gfSwKK3sgMHgwNWIzLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODYsIDB4NzUsIDB4ODYsIDB4MDAsIDB4YzB9IH0sCit7IDB4MDVjMywJMTYsCXsweGQwLCAweGMwLCAweDAwLCAweGMwLCAweDAxLCAweGMwLCAweDAyLCAweGMwLCAweDAzLCAweGMwLCAweDA2LCAweGMwLCAweDA3LCAweDkwLCAweDdmLCAweGE1fSB9LAoreyAweDA1ZDMsCTE2LAl7MHhlMCwgMHgzMCwgMHhlMiwgMHgwNiwgMHg3NSwgMHgwZCwgMHgwNiwgMHgwMiwgMHgwNiwgMHg3ZiwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHgyMCwgMHhlMX0gfSwKK3sgMHgwNWUzLAkxNiwJezB4MGMsIDB4ZTUsIDB4MGQsIDB4NjQsIDB4MDIsIDB4NjAsIDB4MDYsIDB4NzUsIDB4MGQsIDB4MDcsIDB4MDIsIDB4MDYsIDB4N2YsIDB4YWYsIDB4MGQsIDB4ZWZ9IH0sCit7IDB4MDVmMywJMTYsCXsweDI0LCAweGZlLCAweDYwLCAweDQ4LCAweDE0LCAweDYwLCAweDJjLCAweDI0LCAweGZlLCAweDYwLCAweDc3LCAweDI0LCAweDA0LCAweDYwLCAweDAzLCAweDAyfSB9LAoreyAweDA2MDMsCTE2LAl7MHgwNiwgMHg3ZiwgMHhhYiwgMHgwOSwgMHhhYSwgMHgwYSwgMHhhOSwgMHgwYiwgMHhhZiwgMHgwYywgMHgwNSwgMHgwYywgMHg4ZiwgMHg4MiwgMHg3NSwgMHg4M30gfSwKK3sgMHgwNjEzLAkxNiwJezB4MDAsIDB4MTIsIDB4MDcsIDB4ODUsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZjAsIDB4ZTUsIDB4MGMsIDB4NjUsIDB4MDgsIDB4NzAsIDB4NWUsIDB4NzUsIDB4MGR9IH0sCit7IDB4MDYyMywJMTYsCXsweDA1LCAweDgwLCAweDU5LCAweDkwLCAweDdmLCAweGE2LCAweGUwLCAweGFiLCAweDA5LCAweGFhLCAweDBhLCAweGE5LCAweDBiLCAweGFlLCAweDBjLCAweDhlfSB9LAoreyAweDA2MzMsCTE2LAl7MHg4MiwgMHg3NSwgMHg4MywgMHgwMCwgMHgxMiwgMHgwNywgMHhiMiwgMHg3NSwgMHgwZCwgMHgwMiwgMHg4MCwgMHg0MCwgMHhlNSwgMHgwOCwgMHgyNCwgMHhmZX0gfSwKK3sgMHgwNjQzLAkxNiwJezB4YjUsIDB4MGMsIDB4MDcsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4ZTUsIDB4MDgsIDB4MTQsIDB4YjUsIDB4MGMsIDB4MGF9IH0sCit7IDB4MDY1MywJMTYsCXsweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweGU0LCAweGY1LCAweDBkLCAweDkwLCAweDdmLCAweGE2LCAweGUwLCAweGFiLCAweDA5fSB9LAoreyAweDA2NjMsCTE2LAl7MHhhYSwgMHgwYSwgMHhhOSwgMHgwYiwgMHhhZSwgMHgwYywgMHg4ZSwgMHg4MiwgMHg3NSwgMHg4MywgMHgwMCwgMHgxMiwgMHgwNywgMHhiMiwgMHgwNSwgMHgwY30gfSwKK3sgMHgwNjczLAkxNiwJezB4ODAsIDB4MGEsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MGQsIDB4NTMsIDB4OTEsIDB4ZGYsIDB4ZDB9IH0sCit7IDB4MDY4MywJMTYsCXsweDA3LCAweGQwLCAweDA2LCAweGQwLCAweDAzLCAweGQwLCAweDAyLCAweGQwLCAweDAxLCAweGQwLCAweDAwLCAweGQwLCAweGQwLCAweGQwLCAweDg2LCAweGQwfSB9LAoreyAweDA2OTMsCTEwLAl7MHg4NCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwNjlkLAkxNiwJezB4YzIsIDB4MDQsIDB4ZDIsIDB4MDUsIDB4ZTQsIDB4ZjUsIDB4MjUsIDB4YzIsIDB4MDMsIDB4YzIsIDB4MDAsIDB4YzIsIDB4MDIsIDB4YzIsIDB4MDEsIDB4MTJ9IH0sCit7IDB4MDZhZCwJMTYsCXsweDBlLCAweDc0LCAweGQyLCAweGU4LCAweDQzLCAweGQ4LCAweDIwLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweGZmLCAweGYwLCAweDkwLCAweDdmLCAweGE5fSB9LAoreyAweDA2YmQsCTE2LAl7MHhmMCwgMHg5MCwgMHg3ZiwgMHhhYSwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhlMCwgMHg0NCwgMHhjMCwgMHhmMCwgMHg5MH0gfSwKK3sgMHgwNmNkLAkxNiwJezB4N2YsIDB4OTMsIDB4NzQsIDB4MzAsIDB4ZjAsIDB4MTIsIDB4MGEsIDB4MTksIDB4NzUsIDB4MjQsIDB4NDgsIDB4NzUsIDB4MjMsIDB4OTIsIDB4NzUsIDB4MjJ9IH0sCit7IDB4MDZkZCwJMTYsCXsweDAwLCAweDc1LCAweDIxLCAweDAwLCAweGU0LCAweGZmLCAweGZlLCAweDdlLCAweDA1LCAweDkwLCAweDIwLCAweDY4LCAweDc0LCAweDAxLCAweGYwLCAweGEzfSB9LAoreyAweDA2ZWQsCTE2LAl7MHhkZSwgMHhmYywgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwNSwgMHg5MCwgMHg3ZiwgMHhhZiwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZX0gfSwKK3sgMHgwNmZkLAkxNiwJezB4ZTAsIDB4NDQsIDB4MGQsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4MTIsIDB4MGUsIDB4NjgsIDB4MzAsIDB4MDEsIDB4MGEsIDB4ZTQsIDB4OTAsIDB4MjAsIDB4Njl9IH0sCit7IDB4MDcwZCwJMTYsCXsweGYwLCAweDEyLCAweDAzLCAweDdlLCAweGMyLCAweDAxLCAweDMwLCAweDA0LCAweDFhLCAweDEyLCAweDBlLCAweDc3LCAweDUwLCAweDEzLCAweDEyLCAweDA5fSB9LAoreyAweDA3MWQsCTE2LAl7MHgwMCwgMHgzMCwgMHgwMCwgMHgwNywgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHgzMCwgMHhlNywgMHhmMywgMHgxMiwgMHgwZCwgMHg4YiwgMHgxMiwgMHgwZX0gfSwKK3sgMHgwNzJkLAkxNiwJezB4NzksIDB4YzIsIDB4MDMsIDB4N2YsIDB4ZmYsIDB4N2UsIDB4ZmYsIDB4N2QsIDB4ZmYsIDB4N2MsIDB4ZmYsIDB4NzgsIDB4MjEsIDB4MTIsIDB4MDgsIDB4MWR9IH0sCit7IDB4MDczZCwJMTYsCXsweDdiLCAweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDAwLCAweDc4LCAweDAwLCAweGMzLCAweDEyLCAweDA4LCAweDBjLCAweDcwLCAweDFiLCAweDc1LCAweDI0fSB9LAoreyAweDA3NGQsCTE2LAl7MHg0OCwgMHg3NSwgMHgyMywgMHg5MiwgMHhmNSwgMHgyMiwgMHhmNSwgMHgyMSwgMHg2MywgMHgyNSwgMHhmZiwgMHg5MCwgMHgyMCwgMHg2OCwgMHhlNSwgMHgyNX0gfSwKK3sgMHgwNzVkLAkxNCwJezB4ZjAsIDB4YTMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4MTIsIDB4MDgsIDB4ZmYsIDB4ODAsIDB4OWJ9IH0sCit7IDB4MDc2YiwJMSwJezB4MjJ9IH0sCit7IDB4MDc2YywJMTYsCXsweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDAyLCAweGU3LCAweDIyLCAweGJiLCAweGZlLCAweDAyfSB9LAoreyAweDA3N2MsCTksCXsweGUzLCAweDIyLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweDIyfSB9LAoreyAweDA3ODUsCTE2LAl7MHhiYiwgMHgwMSwgMHgwYywgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MH0gfSwKK3sgMHgwNzk1LAkxNiwJezB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4MjJ9IH0sCit7IDB4MDdhNSwJMTMsCXsweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweDIyfSB9LAoreyAweDA3YjIsCTE2LAl7MHhmOCwgMHhiYiwgMHgwMSwgMHgwZCwgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlOCwgMHhmMH0gfSwKK3sgMHgwN2MyLAkxNiwJezB4MjIsIDB4NTAsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4YzgsIDB4ZjYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDUsIDB4ZTksIDB4MjUsIDB4ODIsIDB4Yzh9IH0sCit7IDB4MDdkMiwJMiwJezB4ZjIsIDB4MjJ9IH0sCit7IDB4MDdkNCwJMTYsCXsweGJiLCAweDAxLCAweDEwLCAweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweGYwfSB9LAoreyAweDA3ZTQsCTE2LAl7MHhhMywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwOSwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgMHg4NiwgMHhmMCwgMHgwOCwgMHhlNiwgMHgyMiwgMHhiYiwgMHhmZX0gfSwKK3sgMHgwN2Y0LAkxNiwJezB4MGEsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4ZjUsIDB4ZjAsIDB4MDgsIDB4ZTIsIDB4MjIsIDB4ZTUsIDB4ODMsIDB4MmEsIDB4ZjUsIDB4ODN9IH0sCit7IDB4MDgwNCwJOCwJezB4ZTksIDB4OTMsIDB4ZjUsIDB4ZjAsIDB4YTMsIDB4ZTksIDB4OTMsIDB4MjJ9IH0sCit7IDB4MDgwYywJMTYsCXsweGViLCAweDlmLCAweGY1LCAweGYwLCAweGVhLCAweDllLCAweDQyLCAweGYwLCAweGU5LCAweDlkLCAweDQyLCAweGYwLCAweGU4LCAweDljLCAweDQ1LCAweGYwfSB9LAoreyAweDA4MWMsCTEsCXsweDIyfSB9LAoreyAweDA4MWQsCTE2LAl7MHgwOCwgMHgwOCwgMHgwOCwgMHhlNiwgMHgyZiwgMHhmZiwgMHhmNiwgMHgxOCwgMHhlNiwgMHgzZSwgMHhmZSwgMHhmNiwgMHgxOCwgMHhlNiwgMHgzZCwgMHhmZH0gfSwKK3sgMHgwODJkLAk3LAl7MHhmNiwgMHgxOCwgMHhlNiwgMHgzYywgMHhmYywgMHhmNiwgMHgyMn0gfSwKK3sgMHgwODM0LAk0LAl7MHg4YywgMHgzNCwgMHg4ZCwgMHgzNX0gfSwKK3sgMHgwODM4LAkxNiwJezB4OTAsIDB4N2YsIDB4OTUsIDB4ZTAsIDB4NDQsIDB4YzAsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MzYsIDB4ZjUsIDB4MzcsIDB4YzMsIDB4ZTUsIDB4MzcsIDB4OTV9IH0sCit7IDB4MDg0OCwJMTYsCXsweDM1LCAweGU1LCAweDM2LCAweDk1LCAweDM0LCAweDUwLCAweDY5LCAweGVmLCAweDI1LCAweDM3LCAweGY1LCAweDgyLCAweGU1LCAweDM2LCAweDNlLCAweGY1fSB9LAoreyAweDA4NTgsCTE2LAl7MHg4MywgMHg3NCwgMHhmZiwgMHhmMCwgMHhmNCwgMHg2MCwgMHgwMiwgMHhjMywgMHgyMiwgMHhlZiwgMHgyNSwgMHgzNywgMHhmNSwgMHg4MiwgMHhlNSwgMHgzNn0gfSwKK3sgMHgwODY4LAkxNiwJezB4M2UsIDB4ZjUsIDB4ODMsIDB4ZTQsIDB4ZjAsIDB4NjAsIDB4MDIsIDB4YzMsIDB4MjIsIDB4ZWYsIDB4MjUsIDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MzZ9IH0sCit7IDB4MDg3OCwJMTYsCXsweDNlLCAweGY1LCAweDgzLCAweDc0LCAweGFhLCAweGYwLCAweDY0LCAweGFhLCAweDYwLCAweDAyLCAweGMzLCAweDIyLCAweGVmLCAweDI1LCAweDM3LCAweGY1fSB9LAoreyAweDA4ODgsCTE2LAl7MHg4MiwgMHhlNSwgMHgzNiwgMHgzZSwgMHhmNSwgMHg4MywgMHg3NCwgMHg1NSwgMHhmMCwgMHg2NCwgMHg1NSwgMHg2MCwgMHgwMiwgMHhjMywgMHgyMiwgMHhhZH0gfSwKK3sgMHgwODk4LAkxNiwJezB4MzcsIDB4ZTUsIDB4MzcsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MzYsIDB4M2UsIDB4ZjUsIDB4ODMsIDB4ZWQsIDB4ZjAsIDB4ZmMsIDB4YWMsIDB4MDV9IH0sCit7IDB4MDhhOCwJMTYsCXsweGVkLCAweDZjLCAweDYwLCAweDAyLCAweGMzLCAweDIyLCAweDA1LCAweDM3LCAweGU1LCAweDM3LCAweDcwLCAweDAyLCAweDA1LCAweDM2LCAweDgwLCAweDhjfSB9LAoreyAweDA4YjgsCTE2LAl7MHhlNCwgMHhmNSwgMHgzNiwgMHhmNSwgMHgzNywgMHhjMywgMHhlNSwgMHgzNywgMHg5NSwgMHgzNSwgMHhlNSwgMHgzNiwgMHg5NSwgMHgzNCwgMHg1MCwgMHgyN30gfSwKK3sgMHgwOGM4LAkxNiwJezB4ZWYsIDB4MjUsIDB4MzcsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MzYsIDB4M2UsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4NjUsIDB4MzcsIDB4NjAsIDB4MDIsIDB4YzN9IH0sCit7IDB4MDhkOCwJMTYsCXsweDIyLCAweGVmLCAweDI1LCAweDM3LCAweGY1LCAweDgyLCAweGU1LCAweDM2LCAweDNlLCAweGY1LCAweDgzLCAweGU0LCAweGYwLCAweDA1LCAweDM3LCAweGU1fSB9LAoreyAweDA4ZTgsCTgsCXsweDM3LCAweDcwLCAweDAyLCAweDA1LCAweDM2LCAweDgwLCAweGNlLCAweGQzfSB9LAoreyAweDA4ZjAsCTEsCXsweDIyfSB9LAoreyAweDA4ZjEsCTE0LAl7MHg5MCwgMHg3ZiwgMHgwMCwgMHhlNSwgMHgxMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMywgMHgyMn0gfSwKK3sgMHgwOGZmLAkxLAl7MHgyMn0gfSwKK3sgMHgwOTAwLAk5LAl7MHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg4MCwgMHg3NH0gfSwKK3sgMHgwOTdkLAkxNiwJezB4NDMsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjJ9IH0sCit7IDB4MDk4ZCwJMTIsCXsweDc4LCAweDdmLCAweGU0LCAweGY2LCAweGQ4LCAweGZkLCAweDc1LCAweDgxLCAweDNhLCAweDAyLCAweDA5LCAweGQ0fSB9LAoreyAweDA5OTksCTE2LAl7MHgwMiwgMHgwNiwgMHg5ZCwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHg0MCwgMHgwMywgMHhmNiwgMHg4MCwgMHgwMSwgMHhmMn0gfSwKK3sgMHgwOWE5LAkxNiwJezB4MDgsIDB4ZGYsIDB4ZjQsIDB4ODAsIDB4MjksIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4NTQsIDB4MDcsIDB4MjQsIDB4MGMsIDB4YzgsIDB4YzMsIDB4MzN9IH0sCit7IDB4MDliOSwJMTYsCXsweGM0LCAweDU0LCAweDBmLCAweDQ0LCAweDIwLCAweGM4LCAweDgzLCAweDQwLCAweDA0LCAweGY0LCAweDU2LCAweDgwLCAweDAxLCAweDQ2LCAweGY2LCAweGRmfSB9LAoreyAweDA5YzksCTE2LAl7MHhlNCwgMHg4MCwgMHgwYiwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHg5MCwgMHgwZSwgMHgyZCwgMHhlNCwgMHg3ZX0gfSwKK3sgMHgwOWQ5LAkxNiwJezB4MDEsIDB4OTMsIDB4NjAsIDB4YmMsIDB4YTMsIDB4ZmYsIDB4NTQsIDB4M2YsIDB4MzAsIDB4ZTUsIDB4MDksIDB4NTQsIDB4MWYsIDB4ZmUsIDB4ZTQsIDB4OTN9IH0sCit7IDB4MDllOSwJMTYsCXsweGEzLCAweDYwLCAweDAxLCAweDBlLCAweGNmLCAweDU0LCAweGMwLCAweDI1LCAweGUwLCAweDYwLCAweGE4LCAweDQwLCAweGI4LCAweGU0LCAweDkzLCAweGEzfSB9LAoreyAweDA5ZjksCTE2LAl7MHhmYSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYX0gfSwKK3sgMHgwYTA5LAkxNiwJezB4ZjAsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2EsIDB4ZGYsIDB4ZTksIDB4ZGUsIDB4ZTcsIDB4ODAsIDB4YmV9IH0sCit7IDB4MGExOSwJMTYsCXsweGU0LCAweDkwLCAweDdmLCAweDljLCAweGYwLCAweDdmLCAweDBhLCAweGZlLCAweDEyLCAweDBkLCAweGQ1LCAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweDg5fSB9LAoreyAweDBhMjksCTE2LAl7MHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHhjZiwgMHhmMCwgMHg3ZiwgMHhmNCwgMHg3ZSwgMHgwMSwgMHgxMiwgMHgwZCwgMHhkNSwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwYTM5LAkxNiwJezB4OTYsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4N2YsIDB4MGEsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MGQsIDB4ZDUsIDB4N2YsIDB4MDUsIDB4N2UsIDB4MDB9IH0sCit7IDB4MGE0OSwJMTYsCXsweDEyLCAweDBkLCAweGQ1LCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGUwLCAweDU0LCAweDdmLCAweGYwLCAweDdmLCAweDA1fSB9LAoreyAweDBhNTksCTE2LAl7MHg3ZSwgMHgwMCwgMHgxMiwgMHgwZCwgMHhkNSwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZSwgMHgwMH0gfSwKK3sgMHgwYTY5LAkxNiwJezB4MTIsIDB4MGQsIDB4ZDUsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4N2YsIDB4MzIsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MGR9IH0sCit7IDB4MGE3OSwJMTYsCXsweGQ1LCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDdmLCAweDMyLCAweDdlLCAweDAwLCAweDEyLCAweDBkLCAweGQ1LCAweDIyfSB9LAoreyAweDBhODksCTE2LAl7MHg3NSwgMHgzMywgMHgwMSwgMHhlNSwgMHgzMywgMHg2MCwgMHgxYiwgMHg3ZiwgMHgwMSwgMHgxMiwgMHgwZSwgMHgxOCwgMHg3ZiwgMHgwMCwgMHg3ZSwgMHgwZX0gfSwKK3sgMHgwYTk5LAkxNiwJezB4N2QsIDB4MDAsIDB4N2MsIDB4MDEsIDB4MTIsIDB4MDgsIDB4MzQsIDB4ZTQsIDB4MzMsIDB4ZjUsIDB4MzMsIDB4NzAsIDB4MDUsIDB4N2YsIDB4MGYsIDB4MTJ9IH0sCit7IDB4MGFhOSwJMTYsCXsweDBlLCAweDE4LCAweGU1LCAweDMzLCAweDYwLCAweDFiLCAweDdmLCAweDAyLCAweDEyLCAweDBlLCAweDE4LCAweDdmLCAweDAwLCAweDdlLCAweDgwLCAweDdkfSB9LAoreyAweDBhYjksCTE2LAl7MHgwMCwgMHg3YywgMHg4MCwgMHgxMiwgMHgwOCwgMHgzNCwgMHhlNCwgMHgzMywgMHhmNSwgMHgzMywgMHg3MCwgMHgwNSwgMHg3ZiwgMHgwZiwgMHgxMiwgMHgwZX0gfSwKK3sgMHgwYWM5LAkxNiwJezB4MTgsIDB4ZTUsIDB4MzMsIDB4NjAsIDB4MWIsIDB4N2YsIDB4MDMsIDB4MTIsIDB4MGUsIDB4MTgsIDB4N2YsIDB4MDAsIDB4N2UsIDB4MjAsIDB4N2QsIDB4NDB9IH0sCit7IDB4MGFkOSwJMTYsCXsweDdjLCAweDViLCAweDEyLCAweDA4LCAweDM0LCAweGU0LCAweDMzLCAweGY1LCAweDMzLCAweDcwLCAweDA1LCAweDdmLCAweDBmLCAweDEyLCAweDBlLCAweDE4fSB9LAoreyAweDBhZTksCTEzLAl7MHhlNSwgMHgzMywgMHg2MCwgMHgwNSwgMHhlNCwgMHhmZiwgMHgxMiwgMHgwZSwgMHgxOCwgMHhlNSwgMHgzMywgMHgyNCwgMHhmZn0gfSwKK3sgMHgwYWY2LAkxLAl7MHgyMn0gfSwKK3sgMHgwYWY3LAk4LAl7MHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmNSwgMHgxMCwgMHhkMywgMHgyMn0gfSwKK3sgMHgwYWZmLAkxLAl7MHgzMn0gfSwKK3sgMHgwYjAwLAkxNiwJezB4MDIsIDB4MGQsIDB4YTUsIDB4MDAsIDB4MDIsIDB4MGQsIDB4ZWMsIDB4MDAsIDB4MDIsIDB4MGQsIDB4NzAsIDB4MDAsIDB4MDIsIDB4MGQsIDB4YmQsIDB4MDB9IH0sCit7IDB4MGIxMCwJMTYsCXsweDAyLCAweDBlLCAweDAyLCAweDAwLCAweDAyLCAweDBhLCAweGZmLCAweDAwLCAweDAyLCAweDBlLCAweDgzLCAweDAwLCAweDAyLCAweDBlLCAweDg0LCAweDAwfSB9LAoreyAweDBiMjAsCTE2LAl7MHgwMiwgMHgwZSwgMHg4NSwgMHgwMCwgMHgwMiwgMHgwZSwgMHg4NiwgMHgwMCwgMHgwMiwgMHgwZSwgMHg4NywgMHgwMCwgMHgwMiwgMHgwZSwgMHg4OCwgMHgwMH0gfSwKK3sgMHgwYjMwLAkxNiwJezB4MDIsIDB4MGUsIDB4ODksIDB4MDAsIDB4MDIsIDB4MGUsIDB4OGEsIDB4MDAsIDB4MDIsIDB4MGUsIDB4OGIsIDB4MDAsIDB4MDIsIDB4MGUsIDB4OGMsIDB4MDB9IH0sCit7IDB4MGI0MCwJMTYsCXsweDAyLCAweDBlLCAweDhkLCAweDAwLCAweDAyLCAweDBlLCAweDhlLCAweDAwLCAweDAyLCAweDBlLCAweDhmLCAweDAwLCAweDAyLCAweDBlLCAweDkwLCAweDAwfSB9LAoreyAweDBiNTAsCTgsCXsweDAyLCAweDBlLCAweDkxLCAweDAwLCAweDAyLCAweDBlLCAweDkyLCAweDAwfSB9LAoreyAweDBiNTgsCTE2LAl7MHhlNCwgMHhmZSwgMHg3NSwgMHgyYiwgMHhmZiwgMHg3NSwgMHgyYywgMHgxMSwgMHg3NSwgMHgyZCwgMHgxMiwgMHhhYiwgMHgyYiwgMHhhYSwgMHgyYywgMHhhOX0gfSwKK3sgMHgwYjY4LAkxNiwJezB4MmQsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4MDcsIDB4ODUsIDB4NjQsIDB4MDIsIDB4NzAsIDB4MmQsIDB4YWQsIDB4MDYsIDB4MGUsIDB4ZWQsIDB4YjV9IH0sCit7IDB4MGI3OCwJMTYsCXsweDA3LCAweDAxLCAweDIyLCAweDkwLCAweDAwLCAweDAyLCAweDEyLCAweDA3LCAweGQ0LCAweDg1LCAweGYwLCAweDI5LCAweGY1LCAweDJhLCAweDYyLCAweDI5fSB9LAoreyAweDBiODgsCTE2LAl7MHhlNSwgMHgyOSwgMHg2MiwgMHgyYSwgMHhlNSwgMHgyYSwgMHg2MiwgMHgyOSwgMHgyOSwgMHhmZCwgMHhlNSwgMHgyOSwgMHgzYSwgMHhhOSwgMHgwNSwgMHg3NX0gfSwKK3sgMHgwYjk4LAkxNCwJezB4MmIsIDB4ZmYsIDB4ZjUsIDB4MmMsIDB4ODksIDB4MmQsIDB4ODAsIDB4YzMsIDB4N2IsIDB4MDAsIDB4N2EsIDB4MDAsIDB4NzksIDB4MDB9IH0sCit7IDB4MGJhNiwJMSwJezB4MjJ9IH0sCit7IDB4MGJhNywJNiwJezB4YWIsIDB4MDcsIDB4YWEsIDB4MDYsIDB4YWMsIDB4MDV9IH0sCit7IDB4MGJhZCwJMTYsCXsweGU0LCAweGZkLCAweGU1LCAweDExLCAweDYwLCAweDExLCAweGVhLCAweGZmLCAweGFlLCAweDA1LCAweDBkLCAweGVlLCAweDI0LCAweDEwLCAweGY1LCAweDgyfSB9LAoreyAweDBiYmQsCTE2LAl7MHhlNCwgMHgzNCwgMHgwZiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHhlYiwgMHhhZSwgMHgwNSwgMHgwZCwgMHg3NCwgMHgxMCwgMHgyZSwgMHhmNSwgMHg4Mn0gfSwKK3sgMHgwYmNkLAkxNiwJezB4ZTQsIDB4MzQsIDB4MGYsIDB4ZjUsIDB4ODMsIDB4ZWIsIDB4ZjAsIDB4YWYsIDB4MDUsIDB4MGQsIDB4NzQsIDB4MTAsIDB4MmYsIDB4ZjUsIDB4ODIsIDB4ZTR9IH0sCit7IDB4MGJkZCwJMTYsCXsweDM0LCAweDBmLCAweGY1LCAweDgzLCAweGVjLCAweGYwLCAweGFmLCAweDBmLCAweDdhLCAweDBmLCAweDdiLCAweDEwLCAweDEyLCAweDBkLCAweDUxLCAweDdmfSB9LAoreyAweDBiZWQsCTYsCXsweDBhLCAweDdlLCAweDAwLCAweDEyLCAweDBkLCAweGQ1fSB9LAoreyAweDBiZjMsCTEsCXsweDIyfSB9LAoreyAweDBiZjQsCTEwLAl7MHg4ZSwgMHgzMywgMHg4ZiwgMHgzNCwgMHg4ZCwgMHgzNSwgMHg4YSwgMHgzNiwgMHg4YiwgMHgzN30gfSwKK3sgMHgwYmZlLAkxNiwJezB4ZTQsIDB4ZmQsIDB4ZjUsIDB4MzgsIDB4ZTUsIDB4MTEsIDB4NjAsIDB4MTIsIDB4ZTUsIDB4MzMsIDB4ZmYsIDB4YWUsIDB4MDUsIDB4MGQsIDB4ZWUsIDB4MjR9IH0sCit7IDB4MGMwZSwJMTYsCXsweDEzLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDBmLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweGU1LCAweDM0LCAweGFlLCAweDA1LCAweDBkLCAweDc0fSB9LAoreyAweDBjMWUsCTE2LAl7MHgxMywgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwZiwgMHhmNSwgMHg4MywgMHhlNSwgMHgzNCwgMHhmMCwgMHhhZiwgMHgwZiwgMHg3YSwgMHgwZn0gfSwKK3sgMHgwYzJlLAkxNiwJezB4N2IsIDB4MTMsIDB4MTIsIDB4MGQsIDB4NTEsIDB4YWYsIDB4MGYsIDB4YWQsIDB4MzUsIDB4YWIsIDB4MzcsIDB4YWEsIDB4MzYsIDB4MTIsIDB4MGQsIDB4MzJ9IH0sCit7IDB4MGMzZSwJMSwJezB4MjJ9IH0sCit7IDB4MGMzZiwJMiwJezB4OGYsIDB4Mjl9IH0sCit7IDB4MGM0MSwJMTYsCXsweGU0LCAweGY1LCAweDJhLCAweDc1LCAweDJiLCAweGZmLCAweDc1LCAweDJjLCAweDExLCAweDc1LCAweDJkLCAweDMyLCAweGFiLCAweDJiLCAweGFhLCAweDJjfSB9LAoreyAweDBjNTEsCTE2LAl7MHhhOSwgMHgyZCwgMHg5MCwgMHgwMCwgMHgwMSwgMHgxMiwgMHgwNywgMHg4NSwgMHhiNCwgMHgwMywgMHgxZCwgMHhhZiwgMHgyYSwgMHgwNSwgMHgyYSwgMHhlZn0gfSwKK3sgMHgwYzYxLAkxNiwJezB4YjUsIDB4MjksIDB4MDEsIDB4MjIsIDB4MTIsIDB4MDcsIDB4NmMsIDB4N2UsIDB4MDAsIDB4MjksIDB4ZmYsIDB4ZWUsIDB4M2EsIDB4YTksIDB4MDcsIDB4NzV9IH0sCit7IDB4MGM3MSwJMTQsCXsweDJiLCAweGZmLCAweGY1LCAweDJjLCAweDg5LCAweDJkLCAweDgwLCAweGQ0LCAweDdiLCAweDAwLCAweDdhLCAweDAwLCAweDc5LCAweDAwfSB9LAoreyAweDBjN2YsCTEsCXsweDIyfSB9LAoreyAweDBjODAsCTEwLAl7MHg4ZSwgMHgzMywgMHg4ZiwgMHgzNCwgMHg4ZCwgMHgzNSwgMHg4YSwgMHgzNiwgMHg4YiwgMHgzN30gfSwKK3sgMHgwYzhhLAkxNiwJezB4ZTQsIDB4ZjUsIDB4MzgsIDB4ZTUsIDB4MzgsIDB4YzMsIDB4OTUsIDB4MzUsIDB4NTAsIDB4MjAsIDB4MDUsIDB4MzQsIDB4ZTUsIDB4MzQsIDB4YWUsIDB4MzN9IH0sCit7IDB4MGM5YSwJMTYsCXsweDcwLCAweDAyLCAweDA1LCAweDMzLCAweDE0LCAweGZmLCAweGU1LCAweDM3LCAweDI1LCAweDM4LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDM2LCAweGY1fSB9LAoreyAweDBjYWEsCTEwLAl7MHg4MywgMHhlMCwgMHhmZCwgMHgxMiwgMHgwYiwgMHhhNywgMHgwNSwgMHgzOCwgMHg4MCwgMHhkOX0gfSwKK3sgMHgwY2I0LAkxLAl7MHgyMn0gfSwKK3sgMHgwY2I1LAkxNiwJezB4YTksIDB4MDcsIDB4ZTUsIDB4MGQsIDB4NzAsIDB4MjUsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ZTksIDB4MjUsIDB4ZTB9IH0sCit7IDB4MGNjNSwJMTYsCXsweDQ0LCAweDAxLCAweDkwLCAweDdmLCAweGE2LCAweGYwLCAweDhkLCAweDA4LCAweGFmLCAweDAzLCAweGE5LCAweDA3LCAweDc1LCAweDA5LCAweDAxLCAweDhhfSB9LAoreyAweDBjZDUsCTEzLAl7MHgwYSwgMHg4OSwgMHgwYiwgMHhlNCwgMHhmNSwgMHgwYywgMHg3NSwgMHgwZCwgMHgwMywgMHhkMywgMHgyMiwgMHhjMywgMHgyMn0gfSwKK3sgMHgwY2UyLAkxNiwJezB4YTksIDB4MDcsIDB4ZTUsIDB4MGQsIDB4NzAsIDB4MjMsIDB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4ODAsIDB4ZjAsIDB4ZTksIDB4MjUsIDB4ZTB9IH0sCit7IDB4MGNmMiwJMTYsCXsweDkwLCAweDdmLCAweGE2LCAweGYwLCAweDhkLCAweDA4LCAweGFmLCAweDAzLCAweGE5LCAweDA3LCAweDc1LCAweDA5LCAweDAxLCAweDhhLCAweDBhLCAweDg5fSB9LAoreyAweDBkMDIsCTExLAl7MHgwYiwgMHhlNCwgMHhmNSwgMHgwYywgMHg3NSwgMHgwZCwgMHgwMSwgMHhkMywgMHgyMiwgMHhjMywgMHgyMn0gfSwKK3sgMHgwZDBkLAkxNiwJezB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4MzAsIDB4MDYsIDB4MDQsIDB4ZTAsIDB4NDR9IH0sCit7IDB4MGQxZCwJMTYsCXsweDAyLCAweGYwLCAweDdmLCAweGQwLCAweDdlLCAweDA3LCAweDEyLCAweDBkLCAweGQ1LCAweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDU0LCAweGY3LCAweGYwfSB9LAoreyAweDBkMmQsCTUsCXsweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweDIyfSB9LAoreyAweDBkMzIsCTE2LAl7MHgxMiwgMHgwYywgMHhiNSwgMHhlNSwgMHgwZCwgMHgyNCwgMHhmYSwgMHg2MCwgMHgxMCwgMHgxNCwgMHg2MCwgMHgwNywgMHgyNCwgMHgwNywgMHg3MCwgMHhmM30gfSwKK3sgMHgwZDQyLAkxNSwJezB4N2YsIDB4MDgsIDB4MjIsIDB4ZTQsIDB4ZjUsIDB4MGQsIDB4N2YsIDB4MDcsIDB4MjIsIDB4ZTQsIDB4ZjUsIDB4MGQsIDB4N2YsIDB4MDYsIDB4MjJ9IH0sCit7IDB4MGQ1MSwJMTYsCXsweDEyLCAweDBjLCAweGUyLCAweGU1LCAweDBkLCAweDI0LCAweGZhLCAweDYwLCAweDEwLCAweDE0LCAweDYwLCAweDA3LCAweDI0LCAweDA3LCAweDcwLCAweGYzfSB9LAoreyAweDBkNjEsCTE1LAl7MHg3ZiwgMHgwOCwgMHgyMiwgMHhlNCwgMHhmNSwgMHgwZCwgMHg3ZiwgMHgwNywgMHgyMiwgMHhlNCwgMHhmNSwgMHgwZCwgMHg3ZiwgMHgwNiwgMHgyMn0gfSwKK3sgMHgwZDcwLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4OTAsIDB4N2YsIDB4YzQsIDB4ZTQsIDB4ZjAsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MGQ4MCwJMTEsCXsweGFiLCAweDc0LCAweDA0LCAweGYwLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBkOGIsCTE2LAl7MHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHgzMCwgMHhlNywgMHgxMiwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg3ZiwgMHgxNCwgMHg3ZSwgMHgwMCwgMHgxMn0gfSwKK3sgMHgwZDliLAkxMCwJezB4MGQsIDB4ZDUsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4MjJ9IH0sCit7IDB4MGRhNSwJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGQyLCAweDAxLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDAxfSB9LAoreyAweDBkYjUsCTgsCXsweGYwLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBkYmQsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhkMiwgMHgwMywgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgwOH0gfSwKK3sgMHgwZGNkLAk4LAl7MHhmMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwZGQ1LAkxNiwJezB4OGUsIDB4MzksIDB4OGYsIDB4M2EsIDB4ZTUsIDB4M2EsIDB4MTUsIDB4M2EsIDB4YWUsIDB4MzksIDB4NzAsIDB4MDIsIDB4MTUsIDB4MzksIDB4NGUsIDB4NjB9IH0sCit7IDB4MGRlNSwJNywJezB4MDUsIDB4MTIsIDB4MGUsIDB4NDEsIDB4ODAsIDB4ZWUsIDB4MjJ9IH0sCit7IDB4MGRlYywJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDAyLCAweGYwLCAweGQwfSB9LAoreyAweDBkZmMsCTYsCXsweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBlMDIsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NCwgMHgxMCwgMHhmMCwgMHhkMH0gfSwKK3sgMHgwZTEyLAk2LAl7MHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhlMCwgMHgzMn0gfSwKK3sgMHgwZTE4LAkxNiwJezB4YWUsIDB4MDcsIDB4N2YsIDB4MjEsIDB4N2QsIDB4MDEsIDB4NzQsIDB4MDAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MGYsIDB4YWIsIDB4ODJ9IH0sCit7IDB4MGUyOCwJNSwJezB4ZmEsIDB4MTIsIDB4MGQsIDB4NTEsIDB4MjJ9IH0sCit7IDB4MGUyZCwJMTYsCXsweDUwLCAweDBmLCAweDAwLCAweGMwLCAweGY5LCAweGE0LCAweGIwLCAweDk5LCAweDkyLCAweDgyLCAweGY4LCAweDgwLCAweDk4LCAweDg4LCAweDgzLCAweGM2fSB9LAoreyAweDBlM2QsCTMsCXsweGExLCAweDg2LCAweDhlfSB9LAoreyAweDBlNDAsCTEsCXsweDAwfSB9LAoreyAweDBlNDEsCTE2LAl7MHg3NCwgMHgwMCwgMHhmNSwgMHg4NiwgMHg5MCwgMHhmZCwgMHhhNSwgMHg3YywgMHgwNSwgMHhhMywgMHhlNSwgMHg4MiwgMHg0NSwgMHg4MywgMHg3MCwgMHhmOX0gfSwKK3sgMHgwZTUxLAkxLAl7MHgyMn0gfSwKK3sgMHgwZTUyLAkxNCwJezB4OTAsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4MGUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU2MCwJOCwJezB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MGUsIDB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU2OCwJOCwJezB4ZTQsIDB4ZjUsIDB4MGQsIDB4ZDIsIDB4ZTksIDB4ZDIsIDB4YWYsIDB4MjJ9IH0sCit7IDB4MGU3MCwJNCwJezB4NTMsIDB4ZDgsIDB4ZWYsIDB4MzJ9IH0sCit7IDB4MGU3NCwJMywJezB4ZDIsIDB4MDAsIDB4MjJ9IH0sCit7IDB4MGU3NywJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU3OSwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU3YiwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU3ZCwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU3ZiwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU4MSwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU4MywJMSwJezB4MzJ9IH0sCit7IDB4MGU4NCwJMSwJezB4MzJ9IH0sCit7IDB4MGU4NSwJMSwJezB4MzJ9IH0sCit7IDB4MGU4NiwJMSwJezB4MzJ9IH0sCit7IDB4MGU4NywJMSwJezB4MzJ9IH0sCit7IDB4MGU4OCwJMSwJezB4MzJ9IH0sCit7IDB4MGU4OSwJMSwJezB4MzJ9IH0sCit7IDB4MGU4YSwJMSwJezB4MzJ9IH0sCit7IDB4MGU4YiwJMSwJezB4MzJ9IH0sCit7IDB4MGU4YywJMSwJezB4MzJ9IH0sCit7IDB4MGU4ZCwJMSwJezB4MzJ9IH0sCit7IDB4MGU4ZSwJMSwJezB4MzJ9IH0sCit7IDB4MGU4ZiwJMSwJezB4MzJ9IH0sCit7IDB4MGU5MCwJMSwJezB4MzJ9IH0sCit7IDB4MGU5MSwJMSwJezB4MzJ9IH0sCit7IDB4MGU5MiwJMSwJezB4MzJ9IH0sCit7IDB4MTEwMCwJMTYsCXsweDEyLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDA1LCAweDEwLCAweDI3LCAweDAxLCAweDAwLCAweDAxLCAweDAyfSB9LAoreyAweDExMTAsCTE2LAl7MHgwMCwgMHgwMSwgMHgwOSwgMHgwMiwgMHgyMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMywgMHhhMCwgMHgwMCwgMHgwOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMn0gfSwKK3sgMHgxMTIwLAkxNiwJezB4ZmYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDIsIDB4MDIsIDB4NDB9IH0sCit7IDB4MTEzMCwJMTYsCXsweDAwLCAweDAwLCAweDA0LCAweDAzLCAweDA5LCAweDA0LCAweDI2LCAweDAzLCAweDQxLCAweDAwLCAweDZlLCAweDAwLCAweDYzLCAweDAwLCAweDY4LCAweDAwfSB9LAoreyAweDExNDAsCTE2LAl7MHg2ZiwgMHgwMCwgMHg3MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMCwgMHg2OSwgMHgwMCwgMHg3MCwgMHgwMCwgMHg3MywgMHgwMH0gfSwKK3sgMHgxMTUwLAkxNiwJezB4MmMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjMsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MjgsIDB4MDMsIDB4NDYsIDB4MDB9IH0sCit7IDB4MTE2MCwJMTYsCXsweDY5LCAweDAwLCAweDcyLCAweDAwLCAweDZkLCAweDAwLCAweDc3LCAweDAwLCAweDYxLCAweDAwLCAweDcyLCAweDAwLCAweDY1LCAweDAwLCAweDIwLCAweDAwfSB9LAoreyAweDExNzAsCTE2LAl7MHg0NiwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2ZCwgMHgwMCwgMHg2NSwgMHgwMCwgMHg1NywgMHgwMCwgMHg2ZiwgMHgwMCwgMHg3MiwgMHgwMH0gfSwKK3sgMHgxMTgwLAkxNiwJezB4NmIsIDB4MDAsIDB4NzMsIDB4MDAsIDB4MmEsIDB4MDMsIDB4NDMsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjYsIDB4MDAsIDB4NjksIDB4MDB9IH0sCit7IDB4MTE5MCwJMTYsCXsweDY3LCAweDAwLCAweDc1LCAweDAwLCAweDcyLCAweDAwLCAweDYxLCAweDAwLCAweDc0LCAweDAwLCAweDY5LCAweDAwLCAweDZmLCAweDAwLCAweDZlLCAweDAwfSB9LAoreyAweDExYTAsCTE2LAl7MHgyMCwgMHgwMCwgMHg1MywgMHgwMCwgMHg3NCwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2NywgMHgwMCwgMHgyMiwgMHgwM30gfSwKK3sgMHgxMWIwLAkxNiwJezB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjYsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NjMsIDB4MDB9IH0sCit7IDB4MTFjMCwJMTYsCXsweDY1LCAweDAwLCAweDIwLCAweDAwLCAweDUzLCAweDAwLCAweDc0LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDZlLCAweDAwLCAweDY3LCAweDAwfSB9LAoreyAweDExZDAsCTIsCXsweDAwLCAweDAwfSB9LAoreyAweGZmZmYsCTAsCXsweDAwfSB9Cit9OworCisjZWxzZQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHdoaXRlaGVhdF9oZXhfcmVjb3JkIHdoaXRlaGVhdF9sb2FkZXJbXSA9IHsKK3sgMHgwMDAwLAkzLAl7MHgwMiwgMHgwOSwgMHg4ZH0gfSwKK3sgMHgwMDMzLAkzLAl7MHgwMiwgMHgwOCwgMHhmYn0gfSwKK3sgMHgwMDQzLAkzLAl7MHgwMiwgMHgwYiwgMHgwMH0gfSwKK3sgMHgwMDRiLAkzLAl7MHgwMiwgMHgwNSwgMHhhYX0gfSwKK3sgMHgwMTAwLAkxNiwJezB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NTQsIDB4MTAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4NDQsIDB4NTAsIDB4ZjUsIDB4MGYsIDB4MTMsIDB4ZTR9IH0sCit7IDB4MDExMCwJMTYsCXsweDMzLCAweGY1LCAweDExLCAweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDI0LCAweDVlLCAweGI0LCAweDA3LCAweDAwLCAweDQwLCAweDAzLCAweDAyLCAweDAzfSB9LAoreyAweDAxMjAsCTE2LAl7MHg3OCwgMHg5MCwgMHgwMSwgMHgyOCwgMHhmOCwgMHgyOCwgMHgyOCwgMHg3MywgMHgwMiwgMHgwMSwgMHhiYywgMHgwMiwgMHgwMSwgMHhiYywgMHgwMiwgMHgwMX0gfSwKK3sgMHgwMTMwLAkxNiwJezB4OTEsIDB4MDIsIDB4MDEsIDB4M2QsIDB4MDIsIDB4MDEsIDB4NTMsIDB4MDIsIDB4MDEsIDB4NmYsIDB4MDIsIDB4MDEsIDB4OWEsIDB4OTAsIDB4N2YsIDB4MDB9IH0sCit7IDB4MDE0MCwJMTYsCXsweGU1LCAweDExLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwfSB9LAoreyAweDAxNTAsCTE2LAl7MHgwMiwgMHgwMywgMHg3OCwgMHg5MCwgMHg3ZiwgMHg5MiwgMHhlMCwgMHhmZiwgMHhjNCwgMHg1NCwgMHgwZiwgMHg5MCwgMHg3ZiwgMHgwMCwgMHhmMCwgMHg5MH0gfSwKK3sgMHgwMTYwLAkxNiwJezB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4MDIsIDB4MDMsIDB4NzgsIDB4MTJ9IH0sCit7IDB4MDE3MCwJMTYsCXsweDBhLCAweDg5LCAweDUwLCAweDA3LCAweGU0LCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweDgwLCAweDA2LCAweDkwLCAweDdmLCAweDAwLCAweDc0LCAweDBmfSB9LAoreyAweDAxODAsCTE2LAl7MHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwM30gfSwKK3sgMHgwMTkwLAkxNiwJezB4NzgsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MGYsIDB4MDIsIDB4MDMsIDB4NzgsIDB4OTAsIDB4N2YsIDB4MDAsIDB4NzQsIDB4MDcsIDB4ZjB9IH0sCit7IDB4MDFhMCwJMTYsCXsweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDdmLCAweGU4LCAweDdlfSB9LAoreyAweDAxYjAsCTE2LAl7MHgwMywgMHgxMiwgMHgwZCwgMHg5NCwgMHhkMiwgMHgwNiwgMHgxMiwgMHgwYywgMHhjYywgMHgwMiwgMHgwMywgMHg3OCwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMH0gfSwKK3sgMHgwMWMwLAkxNiwJezB4NzUsIDB4MjgsIDB4MDAsIDB4ZjUsIDB4MjksIDB4YTMsIDB4ZTAsIDB4ZmUsIDB4ZTQsIDB4ZWUsIDB4NDIsIDB4MjgsIDB4OTAsIDB4N2YsIDB4ZWUsIDB4ZTB9IH0sCit7IDB4MDFkMCwJMTYsCXsweDc1LCAweDJhLCAweDAwLCAweGY1LCAweDJiLCAweGEzLCAweGUwLCAweGZlLCAweGU0LCAweGVlLCAweDQyLCAweDJhLCAweDkwLCAweDdmLCAweGU4LCAweGUwfSB9LAoreyAweDAxZTAsCTE2LAl7MHg2NCwgMHhjMCwgMHg2MCwgMHgwMywgMHgwMiwgMHgwMiwgMHhjOSwgMHhlNSwgMHgyYiwgMHg0NSwgMHgyYSwgMHg3MCwgMHgwMywgMHgwMiwgMHgwMywgMHg3OH0gfSwKK3sgMHgwMWYwLAkxNiwJezB4YzMsIDB4ZTUsIDB4MmIsIDB4OTQsIDB4NDAsIDB4ZTUsIDB4MmEsIDB4OTQsIDB4MDAsIDB4NTAsIDB4MDgsIDB4ODUsIDB4MmEsIDB4MmMsIDB4ODUsIDB4MmJ9IH0sCit7IDB4MDIwMCwJMTYsCXsweDJkLCAweDgwLCAweDA2LCAweDc1LCAweDJjLCAweDAwLCAweDc1LCAweDJkLCAweDQwLCAweDkwLCAweDdmLCAweGU5LCAweGUwLCAweDY0LCAweGEzLCAweDcwfSB9LAoreyAweDAyMTAsCTE2LAl7MHgzNCwgMHhmNSwgMHgzMCwgMHhmNSwgMHgzMSwgMHhjMywgMHhlNSwgMHgzMSwgMHg5NSwgMHgyZCwgMHhlNSwgMHgzMCwgMHg5NSwgMHgyYywgMHg1MCwgMHg1Y30gfSwKK3sgMHgwMjIwLAkxNiwJezB4ZTUsIDB4MjksIDB4MjUsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MzAsIDB4MzUsIDB4MjgsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmYsIDB4NzQsIDB4MDB9IH0sCit7IDB4MDIzMCwJMTYsCXsweDI1LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDA1LCAweDMxLCAweGU1LCAweDMxLCAweDcwfSB9LAoreyAweDAyNDAsCTE2LAl7MHgwMiwgMHgwNSwgMHgzMCwgMHg4MCwgMHhkMCwgMHhlNCwgMHhmNSwgMHgzMCwgMHhmNSwgMHgzMSwgMHhjMywgMHhlNSwgMHgzMSwgMHg5NSwgMHgyZCwgMHhlNX0gfSwKK3sgMHgwMjUwLAkxNiwJezB4MzAsIDB4OTUsIDB4MmMsIDB4NTAsIDB4MTgsIDB4NzQsIDB4MDAsIDB4MjUsIDB4MzEsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4N2YsIDB4ZjUsIDB4ODN9IH0sCit7IDB4MDI2MCwJMTYsCXsweDc0LCAweGNkLCAweGYwLCAweDA1LCAweDMxLCAweGU1LCAweDMxLCAweDcwLCAweDAyLCAweDA1LCAweDMwLCAweDgwLCAweGRkLCAweGFmLCAweDI5LCAweGFlfSB9LAoreyAweDAyNzAsCTE2LAl7MHgyOCwgMHhhZCwgMHgyZCwgMHg3YSwgMHg3ZiwgMHg3OSwgMHgwMCwgMHg3YiwgMHgwMCwgMHgxMiwgMHgwYiwgMHhmNCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHhlNX0gfSwKK3sgMHgwMjgwLAkxNiwJezB4MmQsIDB4ZjAsIDB4ZTUsIDB4MmQsIDB4MjUsIDB4MjksIDB4ZjUsIDB4MjksIDB4ZTUsIDB4MmMsIDB4MzUsIDB4MjgsIDB4ZjUsIDB4MjgsIDB4YzMsIDB4ZTV9IH0sCit7IDB4MDI5MCwJMTYsCXsweDJiLCAweDk1LCAweDJkLCAweGY1LCAweDJiLCAweGU1LCAweDJhLCAweDk1LCAweDJjLCAweGY1LCAweDJhLCAweDkwLCAweDdmLCAweDkyLCAweGUwLCAweGZmfSB9LAoreyAweDAyYTAsCTE2LAl7MHhjNCwgMHg1NCwgMHgwZiwgMHg3NSwgMHgyZSwgMHgwMCwgMHhmNSwgMHgyZiwgMHhkMywgMHg5NCwgMHgwMCwgMHhlNSwgMHgyZSwgMHg5NCwgMHgwMCwgMHg1MH0gfSwKK3sgMHgwMmIwLAkxNiwJezB4MGMsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MDMsIDB4MDIsIDB4MDEsIDB4ZTcsIDB4ODAsIDB4ZjQsIDB4OTAsIDB4N2YsIDB4YjR9IH0sCit7IDB4MDJjMCwJMTYsCXsweGUwLCAweDIwLCAweGUyLCAweDAzLCAweDAyLCAweDAxLCAweGU3LCAweDgwLCAweGY0LCAweDkwLCAweDdmLCAweGU4LCAweGUwLCAweDY0LCAweDQwLCAweDYwfSB9LAoreyAweDAyZDAsCTE2LAl7MHgwMywgMHgwMiwgMHgwMywgMHg3OCwgMHhlNSwgMHgyYiwgMHg0NSwgMHgyYSwgMHg3MCwgMHgwMywgMHgwMiwgMHgwMywgMHg3OCwgMHhlNCwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwMmUwLAkxNiwJezB4YzUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4OTIsIDB4ZTAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4NzUsIDB4MmUsIDB4MDAsIDB4ZjUsIDB4MmYsIDB4ZDN9IH0sCit7IDB4MDJmMCwJMTYsCXsweDk0LCAweDAwLCAweGU1LCAweDJlLCAweDk0LCAweDAwLCAweDUwLCAweDA5LCAweDkwLCAweDdmLCAweGM0LCAweGUwLCAweDMwLCAweGUxLCAweDA5LCAweDgwfSB9LAoreyAweDAzMDAsCTE2LAl7MHhmNywgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHgyMCwgMHhlMywgMHhmOSwgMHg5MCwgMHg3ZiwgMHhjNSwgMHhlMCwgMHg3NSwgMHgyYywgMHgwMCwgMHhmNX0gfSwKK3sgMHgwMzEwLAkxNiwJezB4MmQsIDB4OTAsIDB4N2YsIDB4ZTksIDB4ZTAsIDB4NjQsIDB4YTMsIDB4NzAsIDB4MzQsIDB4ZjUsIDB4MzAsIDB4ZjUsIDB4MzEsIDB4YzMsIDB4ZTUsIDB4MzF9IH0sCit7IDB4MDMyMCwJMTYsCXsweDk1LCAweDJkLCAweGU1LCAweDMwLCAweDk1LCAweDJjLCAweDUwLCAweDM0LCAweDc0LCAweGMwLCAweDI1LCAweDMxLCAweGY1LCAweDgyLCAweGU0LCAweDM0fSB9LAoreyAweDAzMzAsCTEsCXsweDdlfSB9LAoreyAweDAzMzEsCTE2LAl7MHhmNSwgMHg4MywgMHhlMCwgMHhmZiwgMHhlNSwgMHgyOSwgMHgyNSwgMHgzMSwgMHhmNSwgMHg4MiwgMHhlNSwgMHgzMCwgMHgzNSwgMHgyOCwgMHhmNSwgMHg4M30gfSwKK3sgMHgwMzQxLAkxNiwJezB4ZWYsIDB4ZjAsIDB4MDUsIDB4MzEsIDB4ZTUsIDB4MzEsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MzAsIDB4ODAsIDB4ZDAsIDB4YWYsIDB4MjksIDB4YWUsIDB4Mjh9IH0sCit7IDB4MDM1MSwJMTYsCXsweGFkLCAweDJkLCAweDdhLCAweDdlLCAweDc5LCAweGMwLCAweDdiLCAweGMwLCAweDEyLCAweDBjLCAweDNmLCAweGU1LCAweDJkLCAweDI1LCAweDI5LCAweGY1fSB9LAoreyAweDAzNjEsCTE2LAl7MHgyOSwgMHhlNSwgMHgyYywgMHgzNSwgMHgyOCwgMHhmNSwgMHgyOCwgMHhjMywgMHhlNSwgMHgyYiwgMHg5NSwgMHgyZCwgMHhmNSwgMHgyYiwgMHhlNSwgMHgyYX0gfSwKK3sgMHgwMzcxLAk5LAl7MHg5NSwgMHgyYywgMHhmNSwgMHgyYSwgMHgwMiwgMHgwMiwgMHhkNCwgMHhjMywgMHgyMn0gfSwKK3sgMHgwMzdhLAkxNiwJezB4OTAsIDB4N2YsIDB4ZTksIDB4ZTAsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4NTIsIDB4MTQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4Y2UsIDB4MjR9IH0sCit7IDB4MDM4YSwJMTYsCXsweGZlLCAweDcwLCAweDAzLCAweDAyLCAweDA1LCAweDQyLCAweDI0LCAweGZiLCAweDcwLCAweDAzLCAweDAyLCAweDA0LCAweDRjLCAweDE0LCAweDcwLCAweDAzfSB9LAoreyAweDAzOWEsCTE2LAl7MHgwMiwgMHgwNCwgMHg0NiwgMHgxNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgwNCwgMHgzYSwgMHgxNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgwNCwgMHg0MCwgMHgyNH0gfSwKK3sgMHgwM2FhLAkxNiwJezB4MDUsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MDUsIDB4OTYsIDB4MTIsIDB4MGUsIDB4NDQsIDB4NDAsIDB4MDMsIDB4MDIsIDB4MDUsIDB4YTIsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MDNiYSwJMTYsCXsweGViLCAweGUwLCAweDI0LCAweGZlLCAweDYwLCAweDE2LCAweDE0LCAweDYwLCAweDQwLCAweDI0LCAweDAyLCAweDcwLCAweDY5LCAweDc0LCAweDExLCAweDkwfSB9LAoreyAweDAzY2EsCTE2LAl7MHg3ZiwgMHhkNCwgMHhmMCwgMHg3NCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHhkNSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhMiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMH0gfSwKK3sgMHgwM2RhLAkxNiwJezB4ZmYsIDB4MTIsIDB4MGIsIDB4NTgsIDB4OGIsIDB4MjUsIDB4OGEsIDB4MjYsIDB4ODksIDB4MjcsIDB4ZWEsIDB4NDksIDB4NjAsIDB4MTEsIDB4YWUsIDB4MDJ9IH0sCit7IDB4MDNlYSwJMTYsCXsweGVlLCAweDkwLCAweDdmLCAweGQ0LCAweGYwLCAweGFmLCAweDAxLCAweGVmLCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDA1LCAweGEyLCAweDkwfSB9LAoreyAweDAzZmEsCTE2LAl7MHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhMiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmZiwgMHgxMiwgMHgwOH0gfSwKK3sgMHgwNDBhLAkxNiwJezB4YmEsIDB4OGIsIDB4MjUsIDB4OGEsIDB4MjYsIDB4ODksIDB4MjcsIDB4ZWEsIDB4NDksIDB4NjAsIDB4MTEsIDB4YWUsIDB4MDIsIDB4ZWUsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MDQxYSwJMTYsCXsweGQ0LCAweGYwLCAweGFmLCAweDAxLCAweGVmLCAweDkwLCAweDdmLCAweGQ1LCAweGYwLCAweDAyLCAweDA1LCAweGEyLCAweDkwLCAweDdmLCAweGI0LCAweGUwfSB9LAoreyAweDA0MmEsCTE2LAl7MHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhMiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhMn0gfSwKK3sgMHgwNDNhLAkxNiwJezB4MTIsIDB4MGUsIDB4MWYsIDB4MDIsIDB4MDUsIDB4YTIsIDB4MTIsIDB4MGUsIDB4MmQsIDB4MDIsIDB4MDUsIDB4YTIsIDB4MTIsIDB4MGEsIDB4ZjcsIDB4MDJ9IH0sCit7IDB4MDQ0YSwJMTYsCXsweDA1LCAweGEyLCAweDEyLCAweDBlLCAweDExLCAweDAyLCAweDA1LCAweGEyLCAweDEyLCAweDBlLCAweDQ2LCAweDQwLCAweDAzLCAweDAyLCAweDA1LCAweGEyfSB9LAoreyAweDA0NWEsCTE2LAl7MHg5MCwgMHg3ZiwgMHhlOCwgMHhlMCwgMHgyNCwgMHg3ZiwgMHg2MCwgMHgyNCwgMHgxNCwgMHg2MCwgMHgzMSwgMHgyNCwgMHgwMiwgMHg3MCwgMHg1YiwgMHhhMn0gfSwKK3sgMHgwNDZhLAkxNiwJezB4MDAsIDB4ZTQsIDB4MzMsIDB4ZmYsIDB4MjUsIDB4ZTAsIDB4ZmYsIDB4YTIsIDB4MDIsIDB4ZTQsIDB4MzMsIDB4NGYsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZjB9IH0sCit7IDB4MDQ3YSwJMTYsCXsweGU0LCAweGEzLCAweGYwLCAweDkwLCAweDdmLCAweGI1LCAweDc0LCAweDAyLCAweGYwLCAweDAyLCAweDA1LCAweGEyLCAweGU0LCAweDkwLCAweDdmLCAweDAwfSB9LAoreyAweDA0OGEsCTE2LAl7MHhmMCwgMHhhMywgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhMiwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMH0gfSwKK3sgMHgwNDlhLAkxNiwJezB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4YjR9IH0sCit7IDB4MDRhYSwJMTYsCXsweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmLCAweGY1LCAweDgzLCAweGUwLCAweDU0LCAweGZkLCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweGU0LCAweGEzfSB9LAoreyAweDA0YmEsCTE2LAl7MHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMiwgMHhmMCwgMHgwMiwgMHgwNSwgMHhhMiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMX0gfSwKK3sgMHgwNGNhLAkxNiwJezB4ZjAsIDB4MDIsIDB4MDUsIDB4YTIsIDB4MTIsIDB4MGUsIDB4NDgsIDB4NDAsIDB4MDMsIDB4MDIsIDB4MDUsIDB4YTIsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTB9IH0sCit7IDB4MDRkYSwJMTYsCXsweDI0LCAweGZlLCAweDYwLCAweDFkLCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDA1LCAweGEyLCAweDkwLCAweDdmLCAweGVhLCAweGUwLCAweGI0fSB9LAoreyAweDA0ZWEsCTE2LAl7MHgwMSwgMHgwNSwgMHhjMiwgMHgwMCwgMHgwMiwgMHgwNSwgMHhhMiwgMHg5MCwgMHg3ZiwgMHhiNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgwNX0gfSwKK3sgMHgwNGZhLAkxNiwJezB4YTIsIDB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4NzAsIDB4MzgsIDB4OTAsIDB4N2YsIDB4ZWMsIDB4ZTAsIDB4ZjQsIDB4NTQsIDB4ODAsIDB4ZmYsIDB4YzR9IH0sCit7IDB4MDUwYSwJMTYsCXsweDU0LCAweDBmLCAweGZmLCAweGUwLCAweDU0LCAweDA3LCAweDJmLCAweDI1LCAweGUwLCAweDI0LCAweGI0LCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDdmfSB9LAoreyAweDA1MWEsCTE2LAl7MHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhlYywgMHhlMCwgMHg1NCwgMHg4MCwgMHhmZiwgMHgxMywgMHgxMywgMHgxMywgMHg1NCwgMHgxZn0gfSwKK3sgMHgwNTJhLAkxNiwJezB4ZmYsIDB4ZTAsIDB4NTQsIDB4MDcsIDB4MmYsIDB4OTAsIDB4N2YsIDB4ZDcsIDB4ZjAsIDB4ZTAsIDB4NDQsIDB4MjAsIDB4ZjAsIDB4ODAsIDB4NjksIDB4OTB9IH0sCit7IDB4MDUzYSwJMTYsCXsweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDYwLCAweDEyLCAweDBlLCAweDRhLCAweDUwLCAweDViLCAweDkwLCAweDdmLCAweGU4fSB9LAoreyAweDA1NGEsCTE2LAl7MHhlMCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgxOCwgMHgyNCwgMHgwMiwgMHg3MCwgMHg0ZiwgMHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhiNCwgMHgwMSwgMHgwNH0gfSwKK3sgMHgwNTVhLAkxNiwJezB4ZDIsIDB4MDAsIDB4ODAsIDB4NDQsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4M2IsIDB4OTAsIDB4N2YsIDB4ZWF9IH0sCit7IDB4MDU2YSwJMTYsCXsweGUwLCAweDcwLCAweDIwLCAweDkwLCAweDdmLCAweGVjLCAweGUwLCAweGY0LCAweDU0LCAweDgwLCAweGZmLCAweGM0LCAweDU0LCAweDBmLCAweGZmLCAweGUwfSB9LAoreyAweDA1N2EsCTE2LAl7MHg1NCwgMHgwNywgMHgyZiwgMHgyNSwgMHhlMCwgMHgyNCwgMHhiNCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3ZiwgMHhmNSwgMHg4MywgMHg3NCwgMHgwMX0gfSwKK3sgMHgwNThhLAkxNiwJezB4ZjAsIDB4ODAsIDB4MTUsIDB4OTAsIDB4N2YsIDB4YjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ODAsIDB4MGMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NTB9IH0sCit7IDB4MDU5YSwJMTYsCXsweDA3LCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDdmLCAweGI0LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDIyfSB9LAoreyAweDA1YWEsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHg4NSwgMHhjMCwgMHg4NCwgMHhjMCwgMHg4NiwgMHg3NSwgMHg4NiwgMHgwMCwgMHhjMH0gfSwKK3sgMHgwNWJhLAkxNiwJezB4ZDAsIDB4YzAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4YzAsIDB4MDIsIDB4YzAsIDB4MDMsIDB4YzAsIDB4MDYsIDB4YzAsIDB4MDcsIDB4OTAsIDB4N2YsIDB4YTV9IH0sCit7IDB4MDVjYSwJMTYsCXsweGUwLCAweDMwLCAweGUyLCAweDA2LCAweDc1LCAweDBkLCAweDA2LCAweDAyLCAweDA2LCAweDc2LCAweDkwLCAweDdmLCAweGE1LCAweGUwLCAweDIwLCAweGUxfSB9LAoreyAweDA1ZGEsCTE2LAl7MHgwYywgMHhlNSwgMHgwZCwgMHg2NCwgMHgwMiwgMHg2MCwgMHgwNiwgMHg3NSwgMHgwZCwgMHgwNywgMHgwMiwgMHgwNiwgMHg3NiwgMHhhZiwgMHgwZCwgMHhlZn0gfSwKK3sgMHgwNWVhLAkxNiwJezB4MjQsIDB4ZmUsIDB4NjAsIDB4NDgsIDB4MTQsIDB4NjAsIDB4MmMsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4NzcsIDB4MjQsIDB4MDQsIDB4NjAsIDB4MDMsIDB4MDJ9IH0sCit7IDB4MDVmYSwJMTYsCXsweDA2LCAweDc2LCAweGFiLCAweDA5LCAweGFhLCAweDBhLCAweGE5LCAweDBiLCAweGFmLCAweDBjLCAweDA1LCAweDBjLCAweDhmLCAweDgyLCAweDc1LCAweDgzfSB9LAoreyAweDA2MGEsCTE2LAl7MHgwMCwgMHgxMiwgMHgwOCwgMHgyMiwgMHg5MCwgMHg3ZiwgMHhhNiwgMHhmMCwgMHhlNSwgMHgwYywgMHg2NSwgMHgwOCwgMHg3MCwgMHg1ZSwgMHg3NSwgMHgwZH0gfSwKK3sgMHgwNjFhLAkxNiwJezB4MDUsIDB4ODAsIDB4NTksIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZTAsIDB4YWIsIDB4MDksIDB4YWEsIDB4MGEsIDB4YTksIDB4MGIsIDB4YWUsIDB4MGMsIDB4OGV9IH0sCit7IDB4MDYyYSwJMTYsCXsweDgyLCAweDc1LCAweDgzLCAweDAwLCAweDEyLCAweDA4LCAweDRmLCAweDc1LCAweDBkLCAweDAyLCAweDgwLCAweDQwLCAweGU1LCAweDA4LCAweDI0LCAweGZlfSB9LAoreyAweDA2M2EsCTE2LAl7MHhiNSwgMHgwYywgMHgwNywgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHgyMCwgMHhmMCwgMHhlNSwgMHgwOCwgMHgxNCwgMHhiNSwgMHgwYywgMHgwYX0gfSwKK3sgMHgwNjRhLAkxNiwJezB4OTAsIDB4N2YsIDB4YTUsIDB4ZTAsIDB4NDQsIDB4NDAsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4MGQsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZTAsIDB4YWIsIDB4MDl9IH0sCit7IDB4MDY1YSwJMTYsCXsweGFhLCAweDBhLCAweGE5LCAweDBiLCAweGFlLCAweDBjLCAweDhlLCAweDgyLCAweDc1LCAweDgzLCAweDAwLCAweDEyLCAweDA4LCAweDRmLCAweDA1LCAweDBjfSB9LAoreyAweDA2NmEsCTE2LAl7MHg4MCwgMHgwYSwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHhlNCwgMHhmNSwgMHgwZCwgMHg1MywgMHg5MSwgMHhkZiwgMHhkMH0gfSwKK3sgMHgwNjdhLAkxNiwJezB4MDcsIDB4ZDAsIDB4MDYsIDB4ZDAsIDB4MDMsIDB4ZDAsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ODYsIDB4ZDB9IH0sCit7IDB4MDY4YSwJMTAsCXsweDg0LCAweGQwLCAweDg1LCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDA2OTQsCTE2LAl7MHg4YywgMHgzMywgMHg4ZCwgMHgzNCwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhlMCwgMHg0NCwgMHhjMCwgMHhmMCwgMHhlNCwgMHhmNSwgMHgzNSwgMHhmNSwgMHgzNn0gfSwKK3sgMHgwNmE0LAkxNiwJezB4YzMsIDB4ZTUsIDB4MzYsIDB4OTUsIDB4MzQsIDB4ZTUsIDB4MzUsIDB4OTUsIDB4MzMsIDB4NTAsIDB4NjksIDB4ZWYsIDB4MjUsIDB4MzYsIDB4ZjUsIDB4ODJ9IH0sCit7IDB4MDZiNCwJMTYsCXsweGU1LCAweDM1LCAweDNlLCAweGY1LCAweDgzLCAweDc0LCAweGZmLCAweGYwLCAweGY0LCAweDYwLCAweDAyLCAweGMzLCAweDIyLCAweGVmLCAweDI1LCAweDM2fSB9LAoreyAweDA2YzQsCTE2LAl7MHhmNSwgMHg4MiwgMHhlNSwgMHgzNSwgMHgzZSwgMHhmNSwgMHg4MywgMHhlNCwgMHhmMCwgMHg2MCwgMHgwMiwgMHhjMywgMHgyMiwgMHhlZiwgMHgyNSwgMHgzNn0gfSwKK3sgMHgwNmQ0LAkxNiwJezB4ZjUsIDB4ODIsIDB4ZTUsIDB4MzUsIDB4M2UsIDB4ZjUsIDB4ODMsIDB4NzQsIDB4YWEsIDB4ZjAsIDB4NjQsIDB4YWEsIDB4NjAsIDB4MDIsIDB4YzMsIDB4MjJ9IH0sCit7IDB4MDZlNCwJMTYsCXsweGVmLCAweDI1LCAweDM2LCAweGY1LCAweDgyLCAweGU1LCAweDM1LCAweDNlLCAweGY1LCAweDgzLCAweDc0LCAweDU1LCAweGYwLCAweDY0LCAweDU1LCAweDYwfSB9LAoreyAweDA2ZjQsCTE2LAl7MHgwMiwgMHhjMywgMHgyMiwgMHhhZCwgMHgzNiwgMHhlNSwgMHgzNiwgMHgyZiwgMHhmNSwgMHg4MiwgMHhlNSwgMHgzNSwgMHgzZSwgMHhmNSwgMHg4MywgMHhlZH0gfSwKK3sgMHgwNzA0LAkxNiwJezB4ZjAsIDB4ZmMsIDB4YWMsIDB4MDUsIDB4ZWQsIDB4NmMsIDB4NjAsIDB4MDIsIDB4YzMsIDB4MjIsIDB4MDUsIDB4MzYsIDB4ZTUsIDB4MzYsIDB4NzAsIDB4MDJ9IH0sCit7IDB4MDcxNCwJMTYsCXsweDA1LCAweDM1LCAweDgwLCAweDhjLCAweGU0LCAweGY1LCAweDM1LCAweGY1LCAweDM2LCAweGMzLCAweGU1LCAweDM2LCAweDk1LCAweDM0LCAweGU1LCAweDM1fSB9LAoreyAweDA3MjQsCTE2LAl7MHg5NSwgMHgzMywgMHg1MCwgMHgyNywgMHhlZiwgMHgyNSwgMHgzNiwgMHhmNSwgMHg4MiwgMHhlNSwgMHgzNSwgMHgzZSwgMHhmNSwgMHg4MywgMHhlMCwgMHg2NX0gfSwKK3sgMHgwNzM0LAkxNiwJezB4MzYsIDB4NjAsIDB4MDIsIDB4YzMsIDB4MjIsIDB4ZWYsIDB4MjUsIDB4MzYsIDB4ZjUsIDB4ODIsIDB4ZTUsIDB4MzUsIDB4M2UsIDB4ZjUsIDB4ODMsIDB4ZTR9IH0sCit7IDB4MDc0NCwJMTMsCXsweGYwLCAweDA1LCAweDM2LCAweGU1LCAweDM2LCAweDcwLCAweDAyLCAweDA1LCAweDM1LCAweDgwLCAweGNlLCAweGQzLCAweDIyfSB9LAoreyAweDA3NTEsCTE2LAl7MHhjMiwgMHgwNCwgMHhkMiwgMHgwNSwgMHhjMiwgMHgwMywgMHhjMiwgMHgwMCwgMHhjMiwgMHgwMiwgMHhjMiwgMHgwMSwgMHgxMiwgMHgwZSwgMHgzZCwgMHhkMn0gfSwKK3sgMHgwNzYxLAkxNiwJezB4ZTgsIDB4NDMsIDB4ZDgsIDB4MjAsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YTksIDB4ZjAsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MDc3MSwJMTYsCXsweGFhLCAweGYwLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweDk1LCAweGUwLCAweDQ0LCAweGMwLCAweGYwLCAweDkwLCAweDdmLCAweDkzLCAweDc0fSB9LAoreyAweDA3ODEsCTE2LAl7MHgzMCwgMHhmMCwgMHgxMiwgMHgwYSwgMHgxOSwgMHg5MCwgMHg3ZiwgMHhhZiwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZSwgMHhlMH0gfSwKK3sgMHgwNzkxLAkxNiwJezB4NDQsIDB4MGQsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4MTIsIDB4MGUsIDB4MzUsIDB4MjAsIDB4MDEsIDB4NDIsIDB4NzUsIDB4MjQsIDB4MDAsIDB4NzUsIDB4MjN9IH0sCit7IDB4MDdhMSwJMTYsCXsweDAwLCAweDc1LCAweDIyLCAweDAwLCAweDc1LCAweDIxLCAweDAwLCAweDdmLCAweDQ4LCAweDdlLCAweDkyLCAweDdkLCAweDAwLCAweDdjLCAweDAwLCAweGFifSB9LAoreyAweDA3YjEsCTE2LAl7MHgyNCwgMHhhYSwgMHgyMywgMHhhOSwgMHgyMiwgMHhhOCwgMHgyMSwgMHhjMywgMHgxMiwgMHgwOCwgMHhhOSwgMHg1MCwgMHhkYiwgMHgyMCwgMHgwMSwgMHhkOH0gfSwKK3sgMHgwN2MxLAkxNiwJezB4N2EsIDB4MDAsIDB4NzksIDB4MDAsIDB4NzgsIDB4MDAsIDB4ZTUsIDB4MjQsIDB4MjQsIDB4MDEsIDB4ZjUsIDB4MjQsIDB4ZWEsIDB4MzUsIDB4MjMsIDB4ZjV9IH0sCit7IDB4MDdkMSwJMTYsCXsweDIzLCAweGU5LCAweDM1LCAweDIyLCAweGY1LCAweDIyLCAweGU4LCAweDM1LCAweDIxLCAweGY1LCAweDIxLCAweDgwLCAweGNhLCAweDMwLCAweDAxLCAweDA1fSB9LAoreyAweDA3ZTEsCTE2LAl7MHgxMiwgMHgwMywgMHg3YSwgMHhjMiwgMHgwMSwgMHgzMCwgMHgwNCwgMHgxYSwgMHgxMiwgMHgwZSwgMHg0MCwgMHg1MCwgMHgxMywgMHgxMiwgMHgwOSwgMHgwMH0gfSwKK3sgMHgwN2YxLAkxNiwJezB4MzAsIDB4MDAsIDB4MDcsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4MzAsIDB4ZTcsIDB4ZjMsIDB4MTIsIDB4MGQsIDB4NGEsIDB4MTIsIDB4MGUsIDB4NDJ9IH0sCit7IDB4MDgwMSwJOCwJezB4YzIsIDB4MDMsIDB4MTIsIDB4MDgsIDB4ZmYsIDB4ODAsIDB4ZDYsIDB4MjJ9IH0sCit7IDB4MDgwOSwJMTYsCXsweGJiLCAweDAxLCAweDA2LCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGUwLCAweDIyLCAweDUwLCAweDAyLCAweGU3LCAweDIyLCAweGJiLCAweGZlLCAweDAyfSB9LAoreyAweDA4MTksCTksCXsweGUzLCAweDIyLCAweDg5LCAweDgyLCAweDhhLCAweDgzLCAweGU0LCAweDkzLCAweDIyfSB9LAoreyAweDA4MjIsCTE2LAl7MHhiYiwgMHgwMSwgMHgwYywgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlMCwgMHgyMiwgMHg1MH0gfSwKK3sgMHgwODMyLAkxNiwJezB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4MjJ9IH0sCit7IDB4MDg0MiwJMTMsCXsweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGU0LCAweDkzLCAweDIyfSB9LAoreyAweDA4NGYsCTE2LAl7MHhmOCwgMHhiYiwgMHgwMSwgMHgwZCwgMHhlNSwgMHg4MiwgMHgyOSwgMHhmNSwgMHg4MiwgMHhlNSwgMHg4MywgMHgzYSwgMHhmNSwgMHg4MywgMHhlOCwgMHhmMH0gfSwKK3sgMHgwODVmLAkxNiwJezB4MjIsIDB4NTAsIDB4MDYsIDB4ZTksIDB4MjUsIDB4ODIsIDB4YzgsIDB4ZjYsIDB4MjIsIDB4YmIsIDB4ZmUsIDB4MDUsIDB4ZTksIDB4MjUsIDB4ODIsIDB4Yzh9IH0sCit7IDB4MDg2ZiwJMiwJezB4ZjIsIDB4MjJ9IH0sCit7IDB4MDg3MSwJMTYsCXsweGJiLCAweDAxLCAweDEwLCAweGU1LCAweDgyLCAweDI5LCAweGY1LCAweDgyLCAweGU1LCAweDgzLCAweDNhLCAweGY1LCAweDgzLCAweGUwLCAweGY1LCAweGYwfSB9LAoreyAweDA4ODEsCTE2LAl7MHhhMywgMHhlMCwgMHgyMiwgMHg1MCwgMHgwOSwgMHhlOSwgMHgyNSwgMHg4MiwgMHhmOCwgMHg4NiwgMHhmMCwgMHgwOCwgMHhlNiwgMHgyMiwgMHhiYiwgMHhmZX0gfSwKK3sgMHgwODkxLAkxNiwJezB4MGEsIDB4ZTksIDB4MjUsIDB4ODIsIDB4ZjgsIDB4ZTIsIDB4ZjUsIDB4ZjAsIDB4MDgsIDB4ZTIsIDB4MjIsIDB4ZTUsIDB4ODMsIDB4MmEsIDB4ZjUsIDB4ODN9IH0sCit7IDB4MDhhMSwJOCwJezB4ZTksIDB4OTMsIDB4ZjUsIDB4ZjAsIDB4YTMsIDB4ZTksIDB4OTMsIDB4MjJ9IH0sCit7IDB4MDhhOSwJMTYsCXsweGViLCAweDlmLCAweGY1LCAweGYwLCAweGVhLCAweDllLCAweDQyLCAweGYwLCAweGU5LCAweDlkLCAweDQyLCAweGYwLCAweGU4LCAweDljLCAweDQ1LCAweGYwfSB9LAoreyAweDA4YjksCTEsCXsweDIyfSB9LAoreyAweDA4YmEsCTIsCXsweDhmLCAweDI4fSB9LAoreyAweDA4YmMsCTE2LAl7MHhlNCwgMHhmNSwgMHgyOSwgMHg3NSwgMHgyYSwgMHhmZiwgMHg3NSwgMHgyYiwgMHgxMSwgMHg3NSwgMHgyYywgMHgzMiwgMHhhYiwgMHgyYSwgMHhhYSwgMHgyYn0gfSwKK3sgMHgwOGNjLAkxNiwJezB4YTksIDB4MmMsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4MDgsIDB4MjIsIDB4YjQsIDB4MDMsIDB4MWQsIDB4YWYsIDB4MjksIDB4MDUsIDB4MjksIDB4ZWZ9IH0sCit7IDB4MDhkYywJMTYsCXsweGI1LCAweDI4LCAweDAxLCAweDIyLCAweDEyLCAweDA4LCAweDA5LCAweDdlLCAweDAwLCAweDI5LCAweGZmLCAweGVlLCAweDNhLCAweGE5LCAweDA3LCAweDc1fSB9LAoreyAweDA4ZWMsCTE0LAl7MHgyYSwgMHhmZiwgMHhmNSwgMHgyYiwgMHg4OSwgMHgyYywgMHg4MCwgMHhkNCwgMHg3YiwgMHgwMCwgMHg3YSwgMHgwMCwgMHg3OSwgMHgwMH0gfSwKK3sgMHgwOGZhLAkxLAl7MHgyMn0gfSwKK3sgMHgwOGZiLAk0LAl7MHg1MywgMHhkOCwgMHhlZiwgMHgzMn0gfSwKK3sgMHgwOGZmLAkxLAl7MHgyMn0gfSwKK3sgMHgwOTAwLAk5LAl7MHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHg4MCwgMHg3NH0gfSwKK3sgMHgwOTdkLAkxNiwJezB4NDMsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjJ9IH0sCit7IDB4MDk4ZCwJMTIsCXsweDc4LCAweDdmLCAweGU0LCAweGY2LCAweGQ4LCAweGZkLCAweDc1LCAweDgxLCAweDM5LCAweDAyLCAweDA5LCAweGQ0fSB9LAoreyAweDA5OTksCTE2LAl7MHgwMiwgMHgwNywgMHg1MSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHg0MCwgMHgwMywgMHhmNiwgMHg4MCwgMHgwMSwgMHhmMn0gfSwKK3sgMHgwOWE5LAkxNiwJezB4MDgsIDB4ZGYsIDB4ZjQsIDB4ODAsIDB4MjksIDB4ZTQsIDB4OTMsIDB4YTMsIDB4ZjgsIDB4NTQsIDB4MDcsIDB4MjQsIDB4MGMsIDB4YzgsIDB4YzMsIDB4MzN9IH0sCit7IDB4MDliOSwJMTYsCXsweGM0LCAweDU0LCAweDBmLCAweDQ0LCAweDIwLCAweGM4LCAweDgzLCAweDQwLCAweDA0LCAweGY0LCAweDU2LCAweDgwLCAweDAxLCAweDQ2LCAweGY2LCAweGRmfSB9LAoreyAweDA5YzksCTE2LAl7MHhlNCwgMHg4MCwgMHgwYiwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHg5MCwgMHgwZCwgMHhlYywgMHhlNCwgMHg3ZX0gfSwKK3sgMHgwOWQ5LAkxNiwJezB4MDEsIDB4OTMsIDB4NjAsIDB4YmMsIDB4YTMsIDB4ZmYsIDB4NTQsIDB4M2YsIDB4MzAsIDB4ZTUsIDB4MDksIDB4NTQsIDB4MWYsIDB4ZmUsIDB4ZTQsIDB4OTN9IH0sCit7IDB4MDllOSwJMTYsCXsweGEzLCAweDYwLCAweDAxLCAweDBlLCAweGNmLCAweDU0LCAweGMwLCAweDI1LCAweGUwLCAweDYwLCAweGE4LCAweDQwLCAweGI4LCAweGU0LCAweDkzLCAweGEzfSB9LAoreyAweDA5ZjksCTE2LAl7MHhmYSwgMHhlNCwgMHg5MywgMHhhMywgMHhmOCwgMHhlNCwgMHg5MywgMHhhMywgMHhjOCwgMHhjNSwgMHg4MiwgMHhjOCwgMHhjYSwgMHhjNSwgMHg4MywgMHhjYX0gfSwKK3sgMHgwYTA5LAkxNiwJezB4ZjAsIDB4YTMsIDB4YzgsIDB4YzUsIDB4ODIsIDB4YzgsIDB4Y2EsIDB4YzUsIDB4ODMsIDB4Y2EsIDB4ZGYsIDB4ZTksIDB4ZGUsIDB4ZTcsIDB4ODAsIDB4YmV9IH0sCit7IDB4MGExOSwJMTYsCXsweGU0LCAweDkwLCAweDdmLCAweDljLCAweGYwLCAweDdmLCAweDBhLCAweGZlLCAweDEyLCAweDBkLCAweDk0LCAweDkwLCAweDdmLCAweDk2LCAweDc0LCAweDg5fSB9LAoreyAweDBhMjksCTE2LAl7MHhmMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHg3NCwgMHhjZiwgMHhmMCwgMHg3ZiwgMHhmNCwgMHg3ZSwgMHgwMSwgMHgxMiwgMHgwZCwgMHg5NCwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwYTM5LAkxNiwJezB4OTYsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4N2YsIDB4MGEsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MGQsIDB4OTQsIDB4N2YsIDB4MDUsIDB4N2UsIDB4MDB9IH0sCit7IDB4MGE0OSwJMTYsCXsweDEyLCAweDBkLCAweDk0LCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGUwLCAweDU0LCAweDdmLCAweGYwLCAweDdmLCAweDA1fSB9LAoreyAweDBhNTksCTE2LAl7MHg3ZSwgMHgwMCwgMHgxMiwgMHgwZCwgMHg5NCwgMHg5MCwgMHg3ZiwgMHg5NiwgMHhlMCwgMHg0NCwgMHg0MCwgMHhmMCwgMHg3ZiwgMHgwNSwgMHg3ZSwgMHgwMH0gfSwKK3sgMHgwYTY5LAkxNiwJezB4MTIsIDB4MGQsIDB4OTQsIDB4OTAsIDB4N2YsIDB4OTYsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4N2YsIDB4MzIsIDB4N2UsIDB4MDAsIDB4MTIsIDB4MGR9IH0sCit7IDB4MGE3OSwJMTYsCXsweDk0LCAweDkwLCAweDdmLCAweDk2LCAweGUwLCAweDQ0LCAweDQwLCAweGYwLCAweDdmLCAweDMyLCAweDdlLCAweDAwLCAweDEyLCAweDBkLCAweDk0LCAweDIyfSB9LAoreyAweDBhODksCTE2LAl7MHg3NSwgMHgzMiwgMHgwMSwgMHhlNSwgMHgzMiwgMHg2MCwgMHgxYiwgMHg3ZiwgMHgwMSwgMHgxMiwgMHgwZCwgMHhkNywgMHg3ZiwgMHgwMCwgMHg3ZSwgMHgwZX0gfSwKK3sgMHgwYTk5LAkxNiwJezB4N2QsIDB4MDAsIDB4N2MsIDB4MDEsIDB4MTIsIDB4MDYsIDB4OTQsIDB4ZTQsIDB4MzMsIDB4ZjUsIDB4MzIsIDB4NzAsIDB4MDUsIDB4N2YsIDB4MGYsIDB4MTJ9IH0sCit7IDB4MGFhOSwJMTYsCXsweDBkLCAweGQ3LCAweGU1LCAweDMyLCAweDYwLCAweDFiLCAweDdmLCAweDAyLCAweDEyLCAweDBkLCAweGQ3LCAweDdmLCAweDAwLCAweDdlLCAweDgwLCAweDdkfSB9LAoreyAweDBhYjksCTE2LAl7MHgwMCwgMHg3YywgMHg4MCwgMHgxMiwgMHgwNiwgMHg5NCwgMHhlNCwgMHgzMywgMHhmNSwgMHgzMiwgMHg3MCwgMHgwNSwgMHg3ZiwgMHgwZiwgMHgxMiwgMHgwZH0gfSwKK3sgMHgwYWM5LAkxNiwJezB4ZDcsIDB4ZTUsIDB4MzIsIDB4NjAsIDB4MWIsIDB4N2YsIDB4MDMsIDB4MTIsIDB4MGQsIDB4ZDcsIDB4N2YsIDB4MDAsIDB4N2UsIDB4MjAsIDB4N2QsIDB4NDB9IH0sCit7IDB4MGFkOSwJMTYsCXsweDdjLCAweDViLCAweDEyLCAweDA2LCAweDk0LCAweGU0LCAweDMzLCAweGY1LCAweDMyLCAweDcwLCAweDA1LCAweDdmLCAweDBmLCAweDEyLCAweDBkLCAweGQ3fSB9LAoreyAweDBhZTksCTE0LAl7MHhlNSwgMHgzMiwgMHg2MCwgMHgwNSwgMHhlNCwgMHhmZiwgMHgxMiwgMHgwZCwgMHhkNywgMHhlNSwgMHgzMiwgMHgyNCwgMHhmZiwgMHgyMn0gfSwKK3sgMHgwYWY3LAk4LAl7MHg5MCwgMHg3ZiwgMHhlYSwgMHhlMCwgMHhmNSwgMHgxMCwgMHhkMywgMHgyMn0gfSwKK3sgMHgwYWZmLAkxLAl7MHgzMn0gfSwKK3sgMHgwYjAwLAkxNiwJezB4MDIsIDB4MGQsIDB4NjQsIDB4MDAsIDB4MDIsIDB4MGQsIDB4YWIsIDB4MDAsIDB4MDIsIDB4MGQsIDB4MmYsIDB4MDAsIDB4MDIsIDB4MGQsIDB4N2MsIDB4MDB9IH0sCit7IDB4MGIxMCwJMTYsCXsweDAyLCAweDBkLCAweGMxLCAweDAwLCAweDAyLCAweDBhLCAweGZmLCAweDAwLCAweDAyLCAweDBlLCAweDRjLCAweDAwLCAweDAyLCAweDBlLCAweDRkLCAweDAwfSB9LAoreyAweDBiMjAsCTE2LAl7MHgwMiwgMHgwZSwgMHg0ZSwgMHgwMCwgMHgwMiwgMHgwZSwgMHg0ZiwgMHgwMCwgMHgwMiwgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMiwgMHgwZSwgMHg1MSwgMHgwMH0gfSwKK3sgMHgwYjMwLAkxNiwJezB4MDIsIDB4MGUsIDB4NTIsIDB4MDAsIDB4MDIsIDB4MGUsIDB4NTMsIDB4MDAsIDB4MDIsIDB4MGUsIDB4NTQsIDB4MDAsIDB4MDIsIDB4MGUsIDB4NTUsIDB4MDB9IH0sCit7IDB4MGI0MCwJMTYsCXsweDAyLCAweDBlLCAweDU2LCAweDAwLCAweDAyLCAweDBlLCAweDU3LCAweDAwLCAweDAyLCAweDBlLCAweDU4LCAweDAwLCAweDAyLCAweDBlLCAweDU5LCAweDAwfSB9LAoreyAweDBiNTAsCTgsCXsweDAyLCAweDBlLCAweDVhLCAweDAwLCAweDAyLCAweDBlLCAweDViLCAweDAwfSB9LAoreyAweDBiNTgsCTE2LAl7MHhlNCwgMHhmZSwgMHg3NSwgMHgyYSwgMHhmZiwgMHg3NSwgMHgyYiwgMHgxMSwgMHg3NSwgMHgyYywgMHgxMiwgMHhhYiwgMHgyYSwgMHhhYSwgMHgyYiwgMHhhOX0gfSwKK3sgMHgwYjY4LAkxNiwJezB4MmMsIDB4OTAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4MDgsIDB4MjIsIDB4NjQsIDB4MDIsIDB4NzAsIDB4MmQsIDB4YWQsIDB4MDYsIDB4MGUsIDB4ZWQsIDB4YjV9IH0sCit7IDB4MGI3OCwJMTYsCXsweDA3LCAweDAxLCAweDIyLCAweDkwLCAweDAwLCAweDAyLCAweDEyLCAweDA4LCAweDcxLCAweDg1LCAweGYwLCAweDI4LCAweGY1LCAweDI5LCAweDYyLCAweDI4fSB9LAoreyAweDBiODgsCTE2LAl7MHhlNSwgMHgyOCwgMHg2MiwgMHgyOSwgMHhlNSwgMHgyOSwgMHg2MiwgMHgyOCwgMHgyOSwgMHhmZCwgMHhlNSwgMHgyOCwgMHgzYSwgMHhhOSwgMHgwNSwgMHg3NX0gfSwKK3sgMHgwYjk4LAkxNCwJezB4MmEsIDB4ZmYsIDB4ZjUsIDB4MmIsIDB4ODksIDB4MmMsIDB4ODAsIDB4YzMsIDB4N2IsIDB4MDAsIDB4N2EsIDB4MDAsIDB4NzksIDB4MDB9IH0sCit7IDB4MGJhNiwJMSwJezB4MjJ9IH0sCit7IDB4MGJhNywJMTYsCXsweGFiLCAweDA3LCAweGFhLCAweDA2LCAweGFjLCAweDA1LCAweGU0LCAweGZkLCAweGU1LCAweDExLCAweDYwLCAweDExLCAweGVhLCAweGZmLCAweGFlLCAweDA1fSB9LAoreyAweDBiYjcsCTE2LAl7MHgwZCwgMHhlZSwgMHgyNCwgMHgxMCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwZiwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHhlYiwgMHhhZSwgMHgwNX0gfSwKK3sgMHgwYmM3LAkxNiwJezB4MGQsIDB4NzQsIDB4MTAsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4MGYsIDB4ZjUsIDB4ODMsIDB4ZWIsIDB4ZjAsIDB4YWYsIDB4MDUsIDB4MGR9IH0sCit7IDB4MGJkNywJMTYsCXsweDc0LCAweDEwLCAweDJmLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDBmLCAweGY1LCAweDgzLCAweGVjLCAweGYwLCAweGFmLCAweDBmLCAweDdhLCAweDBmfSB9LAoreyAweDBiZTcsCTEzLAl7MHg3YiwgMHgxMCwgMHgxMiwgMHgwZCwgMHgxMCwgMHg3ZiwgMHgwYSwgMHg3ZSwgMHgwMCwgMHgxMiwgMHgwZCwgMHg5NCwgMHgyMn0gfSwKK3sgMHgwYmY0LAkxNiwJezB4OGUsIDB4MzIsIDB4OGYsIDB4MzMsIDB4OGQsIDB4MzQsIDB4OGEsIDB4MzUsIDB4OGIsIDB4MzYsIDB4ZTQsIDB4ZmQsIDB4ZjUsIDB4MzcsIDB4ZTUsIDB4MTF9IH0sCit7IDB4MGMwNCwJMTYsCXsweDYwLCAweDEyLCAweGU1LCAweDMyLCAweGZmLCAweGFlLCAweDA1LCAweDBkLCAweGVlLCAweDI0LCAweDEzLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDBmfSB9LAoreyAweDBjMTQsCTE2LAl7MHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHhlNSwgMHgzMywgMHhhZSwgMHgwNSwgMHgwZCwgMHg3NCwgMHgxMywgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNH0gfSwKK3sgMHgwYzI0LAkxNiwJezB4MGYsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4MzMsIDB4ZjAsIDB4YWYsIDB4MGYsIDB4N2EsIDB4MGYsIDB4N2IsIDB4MTMsIDB4MTIsIDB4MGQsIDB4MTAsIDB4YWZ9IH0sCit7IDB4MGMzNCwJMTEsCXsweDBmLCAweGFkLCAweDM0LCAweGFiLCAweDM2LCAweGFhLCAweDM1LCAweDEyLCAweDBjLCAweGYxLCAweDIyfSB9LAoreyAweDBjM2YsCTE2LAl7MHg4ZSwgMHgzMiwgMHg4ZiwgMHgzMywgMHg4ZCwgMHgzNCwgMHg4YSwgMHgzNSwgMHg4YiwgMHgzNiwgMHhlNCwgMHhmNSwgMHgzNywgMHhlNSwgMHgzNywgMHhjM30gfSwKK3sgMHgwYzRmLAkxNiwJezB4OTUsIDB4MzQsIDB4NTAsIDB4MjAsIDB4MDUsIDB4MzMsIDB4ZTUsIDB4MzMsIDB4YWUsIDB4MzIsIDB4NzAsIDB4MDIsIDB4MDUsIDB4MzIsIDB4MTQsIDB4ZmZ9IH0sCit7IDB4MGM1ZiwJMTYsCXsweGU1LCAweDM2LCAweDI1LCAweDM3LCAweGY1LCAweDgyLCAweGU0LCAweDM1LCAweDM1LCAweGY1LCAweDgzLCAweGUwLCAweGZkLCAweDEyLCAweDBiLCAweGE3fSB9LAoreyAweDBjNmYsCTUsCXsweDA1LCAweDM3LCAweDgwLCAweGQ5LCAweDIyfSB9LAoreyAweDBjNzQsCTE2LAl7MHhhOSwgMHgwNywgMHhlNSwgMHgwZCwgMHg3MCwgMHgyNSwgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHhlOSwgMHgyNSwgMHhlMH0gfSwKK3sgMHgwYzg0LAkxNiwJezB4NDQsIDB4MDEsIDB4OTAsIDB4N2YsIDB4YTYsIDB4ZjAsIDB4OGQsIDB4MDgsIDB4YWYsIDB4MDMsIDB4YTksIDB4MDcsIDB4NzUsIDB4MDksIDB4MDEsIDB4OGF9IH0sCit7IDB4MGM5NCwJMTMsCXsweDBhLCAweDg5LCAweDBiLCAweGU0LCAweGY1LCAweDBjLCAweDc1LCAweDBkLCAweDAzLCAweGQzLCAweDIyLCAweGMzLCAweDIyfSB9LAoreyAweDBjYTEsCTE2LAl7MHhhOSwgMHgwNywgMHhlNSwgMHgwZCwgMHg3MCwgMHgyMywgMHg5MCwgMHg3ZiwgMHhhNSwgMHhlMCwgMHg0NCwgMHg4MCwgMHhmMCwgMHhlOSwgMHgyNSwgMHhlMH0gfSwKK3sgMHgwY2IxLAkxNiwJezB4OTAsIDB4N2YsIDB4YTYsIDB4ZjAsIDB4OGQsIDB4MDgsIDB4YWYsIDB4MDMsIDB4YTksIDB4MDcsIDB4NzUsIDB4MDksIDB4MDEsIDB4OGEsIDB4MGEsIDB4ODl9IH0sCit7IDB4MGNjMSwJMTEsCXsweDBiLCAweGU0LCAweGY1LCAweDBjLCAweDc1LCAweDBkLCAweDAxLCAweGQzLCAweDIyLCAweGMzLCAweDIyfSB9LAoreyAweDBjY2MsCTE2LAl7MHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHhlMCwgMHg0NCwgMHgwOCwgMHhmMCwgMHgzMCwgMHgwNiwgMHgwNCwgMHhlMCwgMHg0NH0gfSwKK3sgMHgwY2RjLAkxNiwJezB4MDIsIDB4ZjAsIDB4N2YsIDB4ZDAsIDB4N2UsIDB4MDcsIDB4MTIsIDB4MGQsIDB4OTQsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4ZTAsIDB4NTQsIDB4ZjcsIDB4ZjB9IH0sCit7IDB4MGNlYywJNSwJezB4ZTAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4MjJ9IH0sCit7IDB4MGNmMSwJMTYsCXsweDEyLCAweDBjLCAweDc0LCAweGU1LCAweDBkLCAweDI0LCAweGZhLCAweDYwLCAweDEwLCAweDE0LCAweDYwLCAweDA3LCAweDI0LCAweDA3LCAweDcwLCAweGYzfSB9LAoreyAweDBkMDEsCTE1LAl7MHg3ZiwgMHgwOCwgMHgyMiwgMHhlNCwgMHhmNSwgMHgwZCwgMHg3ZiwgMHgwNywgMHgyMiwgMHhlNCwgMHhmNSwgMHgwZCwgMHg3ZiwgMHgwNiwgMHgyMn0gfSwKK3sgMHgwZDEwLAkxNiwJezB4MTIsIDB4MGMsIDB4YTEsIDB4ZTUsIDB4MGQsIDB4MjQsIDB4ZmEsIDB4NjAsIDB4MTAsIDB4MTQsIDB4NjAsIDB4MDcsIDB4MjQsIDB4MDcsIDB4NzAsIDB4ZjN9IH0sCit7IDB4MGQyMCwJMTUsCXsweDdmLCAweDA4LCAweDIyLCAweGU0LCAweGY1LCAweDBkLCAweDdmLCAweDA3LCAweDIyLCAweGU0LCAweGY1LCAweDBkLCAweDdmLCAweDA2LCAweDIyfSB9LAoreyAweDBkMmYsCTE2LAl7MHhjMCwgMHhlMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHg5MCwgMHg3ZiwgMHhjNCwgMHhlNCwgMHhmMCwgMHg1MywgMHg5MSwgMHhlZiwgMHg5MCwgMHg3Zn0gfSwKK3sgMHgwZDNmLAkxMSwJezB4YWIsIDB4NzQsIDB4MDQsIDB4ZjAsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9IH0sCit7IDB4MGQ0YSwJMTYsCXsweDkwLCAweDdmLCAweGQ2LCAweGUwLCAweDMwLCAweGU3LCAweDEyLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDdmLCAweDE0LCAweDdlLCAweDAwLCAweDEyfSB9LAoreyAweDBkNWEsCTEwLAl7MHgwZCwgMHg5NCwgMHg5MCwgMHg3ZiwgMHhkNiwgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHgyMn0gfSwKK3sgMHgwZDY0LAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4ZDIsIDB4MDEsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDF9IH0sCit7IDB4MGQ3NCwJOCwJezB4ZjAsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9IH0sCit7IDB4MGQ3YywJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGQyLCAweDAzLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDA4fSB9LAoreyAweDBkOGMsCTgsCXsweGYwLCAweGQwLCAweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBkOTQsCTE2LAl7MHg4ZSwgMHgzOCwgMHg4ZiwgMHgzOSwgMHhlNSwgMHgzOSwgMHgxNSwgMHgzOSwgMHhhZSwgMHgzOCwgMHg3MCwgMHgwMiwgMHgxNSwgMHgzOCwgMHg0ZSwgMHg2MH0gfSwKK3sgMHgwZGE0LAk3LAl7MHgwNSwgMHgxMiwgMHgwZSwgMHgwMCwgMHg4MCwgMHhlZSwgMHgyMn0gfSwKK3sgMHgwZGFiLAkxNiwJezB4YzAsIDB4ZTAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4NTMsIDB4OTEsIDB4ZWYsIDB4OTAsIDB4N2YsIDB4YWIsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4ZDB9IH0sCit7IDB4MGRiYiwJNiwJezB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZTAsIDB4MzJ9IH0sCit7IDB4MGRjMSwJMTYsCXsweGMwLCAweGUwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweDUzLCAweDkxLCAweGVmLCAweDkwLCAweDdmLCAweGFiLCAweDc0LCAweDEwLCAweGYwLCAweGQwfSB9LAoreyAweDBkZDEsCTYsCXsweDgyLCAweGQwLCAweDgzLCAweGQwLCAweGUwLCAweDMyfSB9LAoreyAweDBkZDcsCTE2LAl7MHhhZSwgMHgwNywgMHg3ZiwgMHgyMSwgMHg3ZCwgMHgwMSwgMHg3NCwgMHgwMCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgwZiwgMHhhYiwgMHg4Mn0gfSwKK3sgMHgwZGU3LAk1LAl7MHhmYSwgMHgxMiwgMHgwZCwgMHgxMCwgMHgyMn0gfSwKK3sgMHgwZGVjLAkxNiwJezB4NTAsIDB4MGYsIDB4MDAsIDB4YzAsIDB4ZjksIDB4YTQsIDB4YjAsIDB4OTksIDB4OTIsIDB4ODIsIDB4ZjgsIDB4ODAsIDB4OTgsIDB4ODgsIDB4ODMsIDB4YzZ9IH0sCit7IDB4MGRmYywJMywJezB4YTEsIDB4ODYsIDB4OGV9IH0sCit7IDB4MGRmZiwJMSwJezB4MDB9IH0sCit7IDB4MGUwMCwJMTYsCXsweDc0LCAweDAwLCAweGY1LCAweDg2LCAweDkwLCAweGZkLCAweGE1LCAweDdjLCAweDA1LCAweGEzLCAweGU1LCAweDgyLCAweDQ1LCAweDgzLCAweDcwLCAweGY5fSB9LAoreyAweDBlMTAsCTEsCXsweDIyfSB9LAoreyAweDBlMTEsCTE0LAl7MHg5MCwgMHg3ZiwgMHgwMCwgMHhlNSwgMHgxMCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhiNSwgMHg3NCwgMHgwMSwgMHhmMCwgMHhkMywgMHgyMn0gfSwKK3sgMHgwZTFmLAkxNCwJezB4OTAsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4MGUsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4ZDMsIDB4MjJ9IH0sCit7IDB4MGUyZCwJOCwJezB4OTAsIDB4N2YsIDB4ZWEsIDB4ZTAsIDB4ZjUsIDB4MGUsIDB4ZDMsIDB4MjJ9IH0sCit7IDB4MGUzNSwJOCwJezB4ZTQsIDB4ZjUsIDB4MGQsIDB4ZDIsIDB4ZTksIDB4ZDIsIDB4YWYsIDB4MjJ9IH0sCit7IDB4MGUzZCwJMywJezB4ZDIsIDB4MDAsIDB4MjJ9IH0sCit7IDB4MGU0MCwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU0MiwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU0NCwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU0NiwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU0OCwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU0YSwJMiwJezB4ZDMsIDB4MjJ9IH0sCit7IDB4MGU0YywJMSwJezB4MzJ9IH0sCit7IDB4MGU0ZCwJMSwJezB4MzJ9IH0sCit7IDB4MGU0ZSwJMSwJezB4MzJ9IH0sCit7IDB4MGU0ZiwJMSwJezB4MzJ9IH0sCit7IDB4MGU1MCwJMSwJezB4MzJ9IH0sCit7IDB4MGU1MSwJMSwJezB4MzJ9IH0sCit7IDB4MGU1MiwJMSwJezB4MzJ9IH0sCit7IDB4MGU1MywJMSwJezB4MzJ9IH0sCit7IDB4MGU1NCwJMSwJezB4MzJ9IH0sCit7IDB4MGU1NSwJMSwJezB4MzJ9IH0sCit7IDB4MGU1NiwJMSwJezB4MzJ9IH0sCit7IDB4MGU1NywJMSwJezB4MzJ9IH0sCit7IDB4MGU1OCwJMSwJezB4MzJ9IH0sCit7IDB4MGU1OSwJMSwJezB4MzJ9IH0sCit7IDB4MGU1YSwJMSwJezB4MzJ9IH0sCit7IDB4MGU1YiwJMSwJezB4MzJ9IH0sCit7IDB4MTEwMCwJMTYsCXsweDEyLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDA1LCAweDEwLCAweDI3LCAweDAxLCAweDAwLCAweDAxLCAweDAyfSB9LAoreyAweDExMTAsCTE2LAl7MHgwMCwgMHgwMSwgMHgwOSwgMHgwMiwgMHgyMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMywgMHhhMCwgMHgwMCwgMHgwOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMn0gfSwKK3sgMHgxMTIwLAkxNiwJezB4ZmYsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDcsIDB4MDUsIDB4ODIsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDUsIDB4MDIsIDB4MDIsIDB4NDB9IH0sCit7IDB4MTEzMCwJMTYsCXsweDAwLCAweDAwLCAweDA0LCAweDAzLCAweDA5LCAweDA0LCAweDI2LCAweDAzLCAweDQxLCAweDAwLCAweDZlLCAweDAwLCAweDYzLCAweDAwLCAweDY4LCAweDAwfSB9LAoreyAweDExNDAsCTE2LAl7MHg2ZiwgMHgwMCwgMHg3MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMCwgMHg2OSwgMHgwMCwgMHg3MCwgMHgwMCwgMHg3MywgMHgwMH0gfSwKK3sgMHgxMTUwLAkxNiwJezB4MmMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjMsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MjgsIDB4MDMsIDB4NDYsIDB4MDB9IH0sCit7IDB4MTE2MCwJMTYsCXsweDY5LCAweDAwLCAweDcyLCAweDAwLCAweDZkLCAweDAwLCAweDc3LCAweDAwLCAweDYxLCAweDAwLCAweDcyLCAweDAwLCAweDY1LCAweDAwLCAweDIwLCAweDAwfSB9LAoreyAweDExNzAsCTE2LAl7MHg0NiwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2MSwgMHgwMCwgMHg2ZCwgMHgwMCwgMHg2NSwgMHgwMCwgMHg1NywgMHgwMCwgMHg2ZiwgMHgwMCwgMHg3MiwgMHgwMH0gfSwKK3sgMHgxMTgwLAkxNiwJezB4NmIsIDB4MDAsIDB4NzMsIDB4MDAsIDB4MmEsIDB4MDMsIDB4NDMsIDB4MDAsIDB4NmYsIDB4MDAsIDB4NmUsIDB4MDAsIDB4NjYsIDB4MDAsIDB4NjksIDB4MDB9IH0sCit7IDB4MTE5MCwJMTYsCXsweDY3LCAweDAwLCAweDc1LCAweDAwLCAweDcyLCAweDAwLCAweDYxLCAweDAwLCAweDc0LCAweDAwLCAweDY5LCAweDAwLCAweDZmLCAweDAwLCAweDZlLCAweDAwfSB9LAoreyAweDExYTAsCTE2LAl7MHgyMCwgMHgwMCwgMHg1MywgMHgwMCwgMHg3NCwgMHgwMCwgMHg3MiwgMHgwMCwgMHg2OSwgMHgwMCwgMHg2ZSwgMHgwMCwgMHg2NywgMHgwMCwgMHgyMiwgMHgwM30gfSwKK3sgMHgxMWIwLAkxNiwJezB4NDksIDB4MDAsIDB4NmUsIDB4MDAsIDB4NzQsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NzIsIDB4MDAsIDB4NjYsIDB4MDAsIDB4NjEsIDB4MDAsIDB4NjMsIDB4MDB9IH0sCit7IDB4MTFjMCwJMTYsCXsweDY1LCAweDAwLCAweDIwLCAweDAwLCAweDUzLCAweDAwLCAweDc0LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDZlLCAweDAwLCAweDY3LCAweDAwfSB9LAoreyAweDExZDAsCTIsCXsweDAwLCAweDAwfSB9LAoreyAweGZmZmYsCTAsCXsweDAwfSB9Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwveGlyY29tX3Bncy5TIGIvZHJpdmVycy91c2Ivc2VyaWFsL3hpcmNvbV9wZ3MuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWQ5OWRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3hpcmNvbV9wZ3MuUwpAQCAtMCwwICsxLDExOTIgQEAKKy8qICAkSWQ6IGxvb3Aucyx2IDEuMjMgMjAwMC8wMy8yMCAwOTo0OTowNiB3YXJuZXIgRXhwICQKKyAqIAorICogIEZpcm13YXJlIGZvciB0aGUgS2V5c3BhbiBQREEgU2VyaWFsIEFkYXB0ZXIsIGEgVVNCIHNlcmlhbCBwb3J0IGJhc2VkIG9uCisgKiAgdGhlIEV6VVNCIG1pY3JvY29udHJvbGxlci4KKyAqIAorICogIChDKSBDb3B5cmlnaHQgMjAwMCBCcmlhbiBXYXJuZXIgPHdhcm5lckBsb3RoYXIuY29tPgorICogCisgKiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIAlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIAorICogICJLZXlzcGFuIFBEQSBTZXJpYWwgQWRhcHRlciIgaXMgcHJvYmFibHkgYSBjb3B5cmlnaHQgb2YgS2V5c3BhbiwgdGhlCisgKiAgY29tcGFueS4KKyAqIAorICogIFRoaXMgc2VyaWFsIGFkYXB0ZXIgaXMgYmFzaWNhbGx5IGFuIEV6VVNCIGNoaXAgYW5kIGFuIFJTLTIzMiBsaW5lIGRyaXZlcgorICogIGluIGEgbGl0dGxlIHdpZGdldCB0aGF0IGhhcyBhIERCLTkgb24gb25lIGVuZCBhbmQgYSBVU0IgcGx1ZyBvbiB0aGUgb3RoZXIuCisgKiAgSXQgdXNlcyB0aGUgRXpVU0IncyBpbnRlcm5hbCBVQVJUMCAodXNpbmcgdGhlIHBpbnMgZnJvbSBQb3J0IEMpIGFuZCB0aW1lcjIKKyAqICBhcyBhIGJhdWQtcmF0ZSBnZW5lcmF0b3IuIFRoZSB3aXJpbmcgaXM6CisgKiAgIFBDMC9SeEQwIDwtIHJ4ZCAoREI5IHBpbiAyKSAgICAgICAgIFBDNCA8LSBkc3IgcGluIDYKKyAqICAgUEMxL1R4RDAgLT4gdHhkIHBpbiAzICAgICAgICAgICAgICAgUEM1IDwtIHJpICBwaW4gOQorICogICBQQzIgICAgICAtPiBydHMgcGluIDcgICAgICAgICAgICAgICBQQzYgPC0gZGNkIHBpbiAxCisgKiAgIFBDMyAgICAgIDwtIGN0cyBwaW4gOCAgICAgICAgICAgICAgIFBDNyAtPiBkdHIgcGluIDQKKyAqICAgUEIxIC0+IGxpbmUgZHJpdmVyIHN0YW5kYnkKKyAqCisgKiAgVGhlIEV6VVNCIHJlZ2lzdGVyIGNvbnN0YW50cyBiZWxvdyBjb21lIGZyb20gdGhlaXIgZXhjZWxsZW50IGRvY3VtZW50YXRpb24KKyAqICBhbmQgc2FtcGxlIGNvZGUgKHdoaWNoIHVzZWQgdG8gYmUgYXZhaWxhYmxlIGF0IHd3dy5hbmNob3JjaGlwcy5jb20sIGJ1dAorICogIHRoYXQgaGFzIG5vdyBiZWVuIGFic29yYmVkIGludG8gQ3lwcmVzcycgc2l0ZSBhbmQgdGhlIENELVJPTSBjb250ZW50cworICogIGRvbid0IGFwcGVhciB0byBiZSBhdmFpbGFibGUgb25saW5lIGFueW1vcmUpLiBJZiB3ZSBnZXQgbXVsdGlwbGUKKyAqICBFelVTQi1iYXNlZCBkcml2ZXJzIGludG8gdGhlIGtlcm5lbCwgaXQgbWlnaHQgYmUgdXNlZnVsIHRvIHB1bGwgdGhlbSBvdXQKKyAqICBpbnRvIGEgc2VwYXJhdGUgLmggZmlsZS4KKyAqIAorICogVEhFT1JZIE9GIE9QRVJBVElPTjoKKyAqCisgKiAgIFRoZXJlIGFyZSB0d28gMjU2LWJ5dGUgcmluZyBidWZmZXJzLCBvbmUgZm9yIHR4LCBvbmUgZm9yIHJ4LgorICoKKyAqICAgRVAyb3V0IGlzIHB1cmUgdHggZGF0YS4gV2hlbiBpdCBhcHBlYXJzLCB0aGUgZGF0YSBpcyBjb3BpZWQgaW50byB0aGUgdHgKKyAqICAgcmluZyBhbmQgc2VyaWFsIHRyYW5zbWlzc2lvbiBpcyBzdGFydGVkIGlmIGl0IHdhc24ndCBhbHJlYWR5IHJ1bm5pbmcuIFRoZQorICogICAidHggYnVmZmVyIGVtcHR5IiBpbnRlcnJ1cHQgbWF5IGtpY2sgb2ZmIGFub3RoZXIgY2hhcmFjdGVyIGlmIHRoZSByaW5nCisgKiAgIHN0aWxsIGhhcyBkYXRhLiBJZiB0aGUgaG9zdCBpcyB0eC1ibG9ja2VkIGJlY2F1c2UgdGhlIHJpbmcgZmlsbGVkIHVwLAorICogICBpdCB3aWxsIHJlcXVlc3QgYSAidHggdW50aHJvdHRsZSIgaW50ZXJydXB0LiBJZiBzZW5kaW5nIGEgc2VyaWFsIGNoYXJhY3RlcgorICogICBlbXB0aWVzIHRoZSByaW5nIGJlbG93IHRoZSBkZXNpcmVkIHRocmVzaG9sZCwgd2Ugc2V0IGEgYml0IHRoYXQgd2lsbCBzZW5kCisgKiAgIHVwIHRoZSB0eCB1bnRocm90dGxlIG1lc3NhZ2UgYXMgc29vbiBhcyB0aGUgcnggYnVmZmVyIGJlY29tZXMgZnJlZS4KKyAqCisgKiAgIEVQMmluIChpbnRlcnJ1cHQpIGlzIHVzZWQgdG8gc2VuZCBib3RoIHJ4IGNoYXJzIGFuZCByeCBzdGF0dXMgbWVzc2FnZXMKKyAqICAgKG9ubHkgInR4IHVudGhyb3R0bGUiIGF0IHRoaXMgdGltZSkgYmFjayB1cCB0byB0aGUgaG9zdC4gVGhlIGZpcnN0IGJ5dGUKKyAqICAgb2YgdGhlIHJ4IG1lc3NhZ2UgaW5kaWNhdGVzIGRhdGEgKDApIG9yIHN0YXR1cyBtc2cgKDEpLiBTdGF0dXMgbWVzc2FnZXMKKyAqICAgYXJlIHNlbnQgYmVmb3JlIGFueSBkYXRhLgorICoKKyAqICAgSW5jb21pbmcgc2VyaWFsIGNoYXJhY3RlcnMgYXJlIHB1dCBpbnRvIHRoZSByeCByaW5nIGJ5IHRoZSBzZXJpYWwKKyAqICAgaW50ZXJydXB0LCBhbmQgdGhlIEVQMmluIGJ1ZmZlciBzZW50IGlmIGl0IHdhc24ndCBhbHJlYWR5IGluIHRyYW5zaXQuCisgKiAgIFdoZW4gdGhlIEVQMmluIGJ1ZmZlciByZXR1cm5zLCB0aGUgaW50ZXJydXB0IHByb21wdHMgdXMgdG8gc2VuZCBtb3JlCisgKiAgIHJ4IGNoYXJzIChvciBzdGF0dXMgbWVzc2FnZXMpIGlmIHRoZXkgYXJlIHBlbmRpbmcuCisgKgorICogICBEZXZpY2UgY29udHJvbCBoYXBwZW5zIHRocm91Z2ggInZlbmRvciBzcGVjaWZpYyIgY29udHJvbCBtZXNzYWdlcyBvbiBFUDAuCisgKiAgIEFsbCBtZXNzYWdlcyBhcmUgZGVzdGluZWQgZm9yIHRoZSAiSW50ZXJmYWNlIiAod2l0aCB0aGUgaW5kZXggYWx3YXlzIDAsCisgKiAgIHNvIHRoYXQgaWYgdGhlaXIgdHdvLXBvcnQgZGV2aWNlIG1pZ2h0IHNvbWVkYXkgdXNlIHNpbWlsYXIgZmlybXdhcmUsIHdlCisgKiAgIGNhbiB1c2UgaW5kZXg9MSB0byByZWZlciB0byB0aGUgc2Vjb25kIHBvcnQpLiBUaGUgbWVzc2FnZXMgZGVmaW5lZCBhcmU6CisgKgorICogICAgYlJlcXVlc3QgPSAwIDogc2V0IGJhdWQvYml0cy9wYXJpdHkKKyAqICAgICAgICAgICAgICAgMSA6IHVudXNlZAorICogICAgICAgICAgICAgICAyIDogcmVzZXJ2ZWQgZm9yIHNldHRpbmcgSFcgZmxvdyBjb250cm9sIChDVFNSVFMpCisgKiAgICAgICAgICAgICAgIDMgOiBnZXQvc2V0ICJtb2RlbSBpbmZvIiAocGluIHN0YXRlczogRFRSLCBSVFMsIERDRCwgUkksIGV0YykKKyAqICAgICAgICAgICAgICAgNCA6IHNldCBicmVhayAob24vb2ZmKQorICogICAgICAgICAgICAgICA1IDogcmVzZXJ2ZWQgZm9yIHJlcXVlc3RpbmcgaW50ZXJydXB0cyBvbiBwaW4gc3RhdGUgY2hhbmdlCisgKiAgICAgICAgICAgICAgIDYgOiBxdWVyeSBidWZmZXIgcm9vbSBvciBjaGFycyBpbiB0eCBidWZmZXIKKyAqICAgICAgICAgICAgICAgNyA6IHJlcXVlc3QgdHggdW50aHJvdHRsZSBpbnRlcnJ1cHQKKyAqCisgKiAgVGhlIGhvc3Qtc2lkZSBkcml2ZXIgaXMgc2V0IHRvIHJlY29nbml6ZSB0aGUgZGV2aWNlIElEIHZhbHVlcyBzdGFzaGVkIGluCisgKiAgc2VyaWFsIEVFUFJPTSAoMHgwNmNkLCAweDAxMDMpLCBwcm9ncmFtIHRoaXMgZmlybXdhcmUgaW50byBwbGFjZSwgdGhlbgorICogIHN0YXJ0IGl0IHJ1bm5pbmcuIFRoaXMgZmlybXdhcmUgd2lsbCB1c2UgRXpVU0IncyAicmVudW1lcmF0aW9uIiB0cmljayBieQorICogIHNpbXVsYXRpbmcgYSBidXMgZGlzY29ubmVjdCwgdGhlbiByZWNvbm5lY3Qgd2l0aCBhIGRpZmZlcmVudCBkZXZpY2UgSUQKKyAqICAoZW5jb2RlZCBpbiB0aGUgZGVzY19kZXZpY2UgZGVzY3JpcHRvciBiZWxvdykuIFRoZSBob3N0IGRyaXZlciB0aGVuCisgKiAgcmVjb2duaXplcyB0aGUgbmV3IGRldmljZSBJRCBhbmQgZ2x1ZXMgaXQgdG8gdGhlIHJlYWwgc2VyaWFsIGRyaXZlciBjb2RlLgorICoKKyAqIFVTRUZVTCBET0NTOgorICogIEV6VVNCIFRlY2huaWNhbCBSZWZlcmVuY2UgTWFudWFsOiA8aHR0cDovL3d3dy5hbmNob3JjaGlwcy5jb20+CisgKiAgODA1MSBtYW51YWxzOiBldmVyeXdoZXJlLCBidXQgdHJ5IHd3dy5kYWxzZW1pLmNvbSBiZWNhdXNlIHRoZSBFelVTQiBpcworICogICBiYXNpY2FsbHkgdGhlIERhbGxhcyBlbmhhbmNlZCA4MDUxIGNvZGUuIFJlbWVtYmVyIHRoYXQgdGhlIEV6VVNCIElPIHBvcnRzCisgKiAgIHVzZSB0b3RhbGx5IGRpZmZlcmVudCByZWdpc3RlcnMhCisgKiAgVVNCIDEuMSBzcGVjOiB3d3cudXNiLm9yZworICoKKyAqIEhPVyBUTyBCVUlMRDoKKyAqICBnY2MgLXggYXNzZW1ibGVyLXdpdGgtY3BwIC1QIC1FIC1vIGtleXNwYW5fcGRhLmFzbSBrZXlzcGFuX3BkYS5zCisgKiAgYXMzMSAtbCBrZXlzcGFuX3BkYS5hc20KKyAqICBtdiBrZXlzcGFuX3BkYS5vYmoga2V5c3Bhbl9wZGEuaGV4CisgKiAgcGVybCBlenVzYl9jb252ZXJ0LnBsIGtleXNwYW5fcGRhIDwga2V5c3Bhbl9wZGEuaGV4ID4ga2V5c3Bhbl9wZGFfZncuaAorICogR2V0IGFzMzEgZnJvbSA8aHR0cDovL3d3dy5wanJjLmNvbS90ZWNoLzgwNTEvaW5kZXguaHRtbD4sIGFuZCBoYWNrIG9uIGl0CisgKiBhIGJpdCB0byBtYWtlIGl0IGJ1aWxkLgorICoKKyAqIFRIQU5LUzoKKyAqICBHcmVnIEtyb2FoLUhhcnRtYW4sIGZvciBjb29yZGluYXRpbmcgdGhlIHdob2xlIHVzYi1zZXJpYWwgdGhpbmcuCisgKiAgQW5jaG9yQ2hpcHMsIGZvciBtYWtpbmcgc3VjaCBhbiBpbmNyZWRpYmx5IHVzZWZ1bCBsaXR0bGUgbWljcm9jb250cm9sbGVyLgorICogIEtleVNwYW4sIGZvciBtYWtpbmcgYSBoYW5keSwgY2hlYXAgKCQ0MCkgd2lkZ2V0IHRoYXQgd2FzIHNvIGVhc3kgdG8gdGFrZQorICogICAgICAgICAgIGFwYXJ0IGFuZCB0cmFjZSB3aXRoIGFuIG9obW1ldGVyLgorICoKKyAqIFRPRE86CisgKiAgbG90cy4gZ3JlcCBmb3IgVE9ETy4gSW50ZXJydXB0IHNhZmV0eSBuZWVkcyBzdHJlc3MtdGVzdGluZy4gQmV0dGVyIGZsb3cKKyAqICBjb250cm9sLiBJbnRlcnJ1cHRpbmcgaG9zdCB1cG9uIGNoYW5nZSBpbiBEQ0QsIGV0YywgY291bnRpbmcgdHJhbnNpdGlvbnMuCisgKiAgTmVlZCB0byBmaW5kIGEgc2FmZSBkZXZpY2UgaWQgdG8gdXNlICh0aGUgb25lIHVzZWQgYnkgdGhlIEtleXNwYW4gZmlybXdhcmUKKyAqICB1bmRlciBXaW5kb3dzIHdvdWxkIGJlIGlkZWFsLi4gY2FuIGFueW9uZSBmaWd1cmUgb3V0IHdoYXQgaXQgaXM/KS4gUGFyaXR5LgorICogIE1vcmUgYmF1ZCByYXRlcy4gT2gsIGFuZCB0aGUgc3RyaW5nLWRlc2NyaXB0b3ItbGVuZ3RoIHNpbGljb24gYnVnCisgKiAgd29ya2Fyb3VuZCBzaG91bGQgYmUgaW1wbGVtZW50ZWQsIGJ1dCBJJ20gbGF6eSwgYW5kIHRoZSBjb25zZXF1ZW5jZSBpcworICogIHRoYXQgdGhlIGRldmljZSBuYW1lIHN0cmluZ3MgdGhhdCBzaG93IHVwIGluIHlvdXIga2VybmVsIGxvZyB3aWxsIGhhdmUKKyAqICBsb3RzIG9mIHRyYWlsaW5nIGJpbmFyeSBnYXJiYWdlIGluIHRoZW0gKGFwcGVhcnMgYXMgPz8/PykuIERldmljZSBzdHJpbmdzCisgKiAgc2hvdWxkIGJlIG1hZGUgbW9yZSBhY2N1cmF0ZS4KKyAqCisgKiBRdWVzdGlvbnMsIGJ1Z3MsIHBhdGNoZXMgdG8gQnJpYW4uCisgKgorICogIC1CcmlhbiBXYXJuZXIgPHdhcm5lckBsb3RoYXIuY29tPgorICoKKyAqLworCQorI2RlZmluZSBISUdIKHgpICgoKHgpICYgMHhmZjAwKSAvIDI1NikKKyNkZWZpbmUgTE9XKHgpICgoeCkgJiAweGZmKQorCisjZGVmaW5lIGRwbDEgMHg4NAorI2RlZmluZSBkcGgxIDB4ODUKKyNkZWZpbmUgZHBzIDB4ODYKKworOzs7IG91ciBiaXQgYXNzaWdubWVudHMKKyNkZWZpbmUgVFhfUlVOTklORyAwCisjZGVmaW5lIERPX1RYX1VOVEhST1RUTEUgMQorCQorCTs7IHN0YWNrIGZyb20gMHg2MCB0byAweDdmOiBzaG91bGQgcmVhbGx5IHNldCBTUCB0byAweDYwLTEsIG5vdCAweDYwCisjZGVmaW5lIFNUQUNLICMweDYwLTEKKworI2RlZmluZSBFWElGIDB4OTEKKyNkZWZpbmUgRUlFIDB4ZTgKKwkuZmxhZyBFVVNCLCBFSUUuMAorCS5mbGFnIEVTMCwgSUUuNAorCisjZGVmaW5lIEVQMENTICMweDdmYjQKKyNkZWZpbmUgRVAwU1RBTExiaXQgIzB4MDEKKyNkZWZpbmUgSU4wQlVGICMweDdmMDAKKyNkZWZpbmUgSU4wQkMgIzB4N2ZiNQorI2RlZmluZSBPVVQwQlVGICMweDdlYzAKKyNkZWZpbmUgT1VUMEJDICMweDdmYzUJCQorI2RlZmluZSBJTjJCVUYgIzB4N2UwMAorI2RlZmluZSBJTjJCQyAjMHg3ZmI5CisjZGVmaW5lIElOMkNTICMweDdmYjgKKyNkZWZpbmUgT1VUMkJDICMweDdmYzkKKyNkZWZpbmUgT1VUMkNTICMweDdmYzgKKyNkZWZpbmUgT1VUMkJVRiAjMHg3ZGMwCisjZGVmaW5lIElONEJVRiAjMHg3ZDAwCisjZGVmaW5lIElONEJDICMweDdmYmQKKyNkZWZpbmUgSU40Q1MgIzB4N2ZiYworI2RlZmluZSBPRUIgIzB4N2Y5ZAorI2RlZmluZSBPVVRCICMweDdmOTcKKyNkZWZpbmUgT0VDICMweDdmOWUKKyNkZWZpbmUgT1VUQyAjMHg3Zjk4CisjZGVmaW5lIFBJTlNDICMweDdmOWIKKyNkZWZpbmUgUE9SVEJDRkcgIzB4N2Y5NAorI2RlZmluZSBQT1JUQ0NGRyAjMHg3Zjk1CisjZGVmaW5lIE9FQQkjMHg3ZjljCisjZGVmaW5lIElOMDdJUlEgIzB4N2ZhOQorI2RlZmluZSBPVVQwN0lSUSAjMHg3ZmFhCisjZGVmaW5lIElOMDdJRU4gIzB4N2ZhYworI2RlZmluZSBPVVQwN0lFTiAjMHg3ZmFkCisjZGVmaW5lIFVTQklSUSAjMHg3ZmFiCisjZGVmaW5lIFVTQklFTiAjMHg3ZmFlCisjZGVmaW5lIFVTQkJBViAjMHg3ZmFmCisjZGVmaW5lIFVTQkNTICMweDdmZDYKKyNkZWZpbmUgU1VEUFRSSCAjMHg3ZmQ0CisjZGVmaW5lIFNVRFBUUkwgIzB4N2ZkNQorI2RlZmluZSBTRVRVUERBVCAjMHg3ZmU4CisJCQorCTs7IHVzYiBpbnRlcnJ1cHQgOiBlbmFibGUgaXMgRUlFLjAgKDB4ZTgpLCBmbGFnIGlzIEVYSUYuNCAoMHg5MSkKKworCS5vcmcgMAorCWxqbXAgc3RhcnQKKwk7OyBpbnRlcnJ1cHQgdmVjdG9ycworCS5vcmcgMjNICisJbGptcCBzZXJpYWxfaW50CisJLmJ5dGUgMAorCQorCS5vcmcgNDNICisJbGptcCBVU0JfSnVtcF9UYWJsZQorCS5ieXRlIDAJCQk7IGZpbGxlZCBpbiBieSB0aGUgVVNCIGNvcmUKKworOzs7IGxvY2FsIHZhcmlhYmxlcy4gVGhlc2UgYXJlIG5vdCBpbml0aWFsaXplZCBwcm9wZXJseTogZG8gaXQgYnkgaGFuZC4KKwkub3JnIDMwSAorcnhfcmluZ19pbjoJLmJ5dGUgMAorcnhfcmluZ19vdXQ6CS5ieXRlIDAKK3R4X3JpbmdfaW46CS5ieXRlIDAKK3R4X3Jpbmdfb3V0OgkuYnl0ZSAwCit0eF91bnRocm90dGxlX3RocmVzaG9sZDoJLmJ5dGUgMAorCQkKKwkub3JnIDB4MTAwSAkJOyB3YW50cyB0byBiZSBvbiBhIHBhZ2UgYm91bmRhcnkKK1VTQl9KdW1wX1RhYmxlOgorCWxqbXAJSVNSX1N1ZGF2CTsgU2V0dXAgRGF0YSBBdmFpbGFibGUKKwkuYnl0ZSAwCisJbGptcAkwCQk7IFN0YXJ0IG9mIEZyYW1lCisJLmJ5dGUgMAorCWxqbXAJMAkJOyBTZXR1cCBEYXRhIExvYWRpbmcKKwkuYnl0ZSAwCisJbGptcAkwCQk7IEdsb2JhbCBTdXNwZW5kCisJLmJ5dGUgCTAKKwlsam1wCTAJCTsgVVNCIFJlc2V0ICAJCisJLmJ5dGUJMAorCWxqbXAJMAkJOyBSZXNlcnZlZAorCS5ieXRlCTAKKwlsam1wCTAJCTsgRW5kIFBvaW50IDAgSW4KKwkuYnl0ZQkwCisJbGptcAkwCQk7IEVuZCBQb2ludCAwIE91dAorCS5ieXRlCTAKKwlsam1wCTAJCTsgRW5kIFBvaW50IDEgSW4KKwkuYnl0ZQkwCisJbGptcAkwCQk7IEVuZCBQb2ludCAxIE91dAorCS5ieXRlCTAKKwlsam1wCUlTUl9FcDJpbgorCS5ieXRlCTAKKwlsam1wCUlTUl9FcDJvdXQKKwkuYnl0ZQkwCisKKworCS5vcmcgMHgyMDAKKwkJCitzdGFydDoJbW92IFNQLFNUQUNLLTEgOyBzZXQgc3RhY2sKKwk7OyBjbGVhciBsb2NhbCB2YXJpYWJsZXMKKwljbHIgYQorCW1vdiB0eF9yaW5nX2luLCBhCisJbW92IHR4X3Jpbmdfb3V0LCBhCisJbW92IHJ4X3JpbmdfaW4sIGEKKwltb3YgcnhfcmluZ19vdXQsIGEKKwltb3YgdHhfdW50aHJvdHRsZV90aHJlc2hvbGQsIGEKKwljbHIgVFhfUlVOTklORworCWNsciBET19UWF9VTlRIUk9UVExFCisJCisJOzsgY2xlYXIgZmlmbyB3aXRoICJmZSIKKwltb3YgcjEsIDAKKwltb3YgYSwgIzB4ZmUKKwltb3YgZHB0ciwgI3R4X3JpbmcKK2NsZWFyX3R4X3JpbmdfbG9vcDoKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwlkam56IHIxLCBjbGVhcl90eF9yaW5nX2xvb3AKKworCW1vdiBhLCAjMHhmZAorCW1vdiBkcHRyLCAjcnhfcmluZworY2xlYXJfcnhfcmluZ19sb29wOgorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCWRqbnogcjEsIGNsZWFyX3J4X3JpbmdfbG9vcAorCis7OzsgdHVybiBvbiB0aGUgUlMtMjMyIGRyaXZlciBjaGlwIChicmluZyB0aGUgU1RBTkRCWSBwaW4gbG93KQorOzs7IG9uIFhpcmNvbSB0aGUgU1RBTkRCWSBpcyB3aXJlZCB0byBQQjYgYW5kIFBDNCAKKwltb3YgZHB0ciwgUE9SVEJDRkcKKyAgICAgICAgbW92IGEsICMweEJmCisgICAgICAgIG1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgUE9SVENDRkcKKyAgICAgICAgbW92IGEsICMweGVmCisgICAgICAgIG1vdnggQGRwdHIsIGEKKwkKKwk7OyBzZXQgT0VDLjQKKyAgICAgICAgbW92IGEsICMweDEwCisgICAgICAgIG1vdiBkcHRyLE9FQworICAgICAgICBtb3Z4IEBkcHRyLGEKKworICAgICAgICA7OyBjbGVhciBQQzQKKyAgICAgICAgbW92IGEsICMweDAwCisgICAgICAgIG1vdiBkcHRyLE9VVEMKKyAgICAgICAgbW92eCBAZHB0cixhCisKKwk7OyBzZXQgT0VCLjYKKwltb3YgYSwgIzB4NDAKKwltb3YgZHB0cixPRUIKKwltb3Z4IEBkcHRyLGEKKworCTs7IGNsZWFyIFBCNgorCW1vdiBhLCAjMHgwMAorCW1vdiBkcHRyLE9VVEIKKwltb3Z4IEBkcHRyLGEKKworCTs7IHNldCBPRUMuWzE3XQorCW1vdiBhLCAjMHg4MgorCW1vdiBkcHRyLE9FQworCW1vdnggQGRwdHIsYQorCisKKwk7OyBzZXQgUE9SVENDRkcuWzAxXSB0byByb3V0ZSBUeEQwLFJ4RDAgdG8gc2VyaWFsIHBvcnQKKwltb3YgZHB0ciwgUE9SVENDRkcKKwltb3YgYSwgIzB4MDMKKwltb3Z4IEBkcHRyLCBhCisJCisJOzsgc2V0IHVwIGludGVycnVwdHMsIGF1dG92ZWN0b3JpbmcKKwk7OyBzZXQgQktQVAorCW1vdiBkcHRyLCBVU0JCQVYKKwltb3Z4IGEsQGRwdHIKKwlzZXRiIGFjYy4wCQk7IEFWRU4gYml0IHRvIDAKKwltb3Z4IEBkcHRyLCBhCisKKwltb3YgYSwjMHgwMQkJOyBlbmFibGUgU1VEQVY6CXNldHVwIGRhdGEgYXZhaWxhYmxlIChmb3IgZXAwKQorCW1vdiBkcHRyLCBVU0JJUlEKKwltb3Z4IEBkcHRyLCBhCQk7IGNsZWFyIFNVREFWSQorCW1vdiBkcHRyLCBVU0JJRU4KKwltb3Z4IEBkcHRyLCBhCisJCisJbW92IGRwdHIsIElOMDdJRU4KKwltb3YgYSwjMHgwNAkJOyBlbmFibGUgSU4yIGludAorCW1vdnggQGRwdHIsIGEKKwkKKwltb3YgZHB0ciwgT1VUMDdJRU4KKwltb3YgYSwjMHgwNAkJOyBlbmFibGUgT1VUMiBpbnQKKwltb3Z4IEBkcHRyLCBhCisJbW92IGRwdHIsIE9VVDJCQworCW1vdnggQGRwdHIsIGEJCTsgYXJtIE9VVDIKKworOzsJbW92IGEsICMweDg0CQk7IHR1cm4gb24gUlRTLCBEVFIKKzs7CW1vdiBkcHRyLE9VVEMKKzs7CW1vdnggQGRwdHIsIGEKKworCW1vdiBhLCAjMHg3ICAgICAgICAgICAgIDsgdHVybiBvbiAgRFRSCisgICAgICAgIG1vdiBkcHRyLFVTQkJBVgorICAgICAgICBtb3Z4IEBkcHRyLCBhCisKKwltb3YgYSwgIzB4MjAgICAgICAgICAgICAgOyB0dXJuIG9uIHRoZSBSRUQgbGVkIAorICAgICAgICBtb3YgZHB0cixPRUEKKyAgICAgICAgbW92eCBAZHB0ciwgYQorCisJbW92IGEsICMweDgwICAgICAgICAgICAgOyB0dXJuIG9uICBSVFMKKyAgICAgICAgbW92IGRwdHIsT1VUQworICAgICAgICBtb3Z4IEBkcHRyLCBhCisKKwk7OyBzZXR1cCB0aGUgc2VyaWFsIHBvcnQuIDk2MDAgOE4xLgorCW1vdiBhLCMweDUzCQk7IG1vZGUgMSwgZW5hYmxlIHJ4LCBjbGVhciBpbnQKKwltb3YgU0NPTiwgYQorCTs7ICB1c2luZyB0aW1lcjIsIGluIDE2LWJpdCBiYXVkLXJhdGUtZ2VuZXJhdG9yIG1vZGUKKwk7OyAgICh4dGFsIDEyTUh6LCBpbnRlcm5hbCBmb3NjIDI0TUh6KQorCTs7ICBSQ0FQMkgsUkNBUDJMID0gNjU1MzYgLSBmb3NjLygzMipiYXVkKQorCTs7ICA1NzYwMDogMHhGRkYyLkYsIHNheSAweEZGRjMKKwk7OyAgIDk2MDA6IDB4RkZCMS5FLCBzYXkgMHhGRkIyCisJOzsgICAgMzAwOiAweEY2M0MKKyNkZWZpbmUgQkFVRCA5NjAwCisjZGVmaW5lIEJBVURfVElNRU9VVChyYXRlKSAoNjU1MzYgLSAoMjQgKiAxMDAwICogMTAwMCkgLyAoMzIgKiByYXRlKSkKKyNkZWZpbmUgQkFVRF9ISUdIKHJhdGUpIEhJR0goQkFVRF9USU1FT1VUKHJhdGUpKQorI2RlZmluZSBCQVVEX0xPVyhyYXRlKSBMT1coQkFVRF9USU1FT1VUKHJhdGUpKQorCQkKKwltb3YgVDJDT04sICMwMzBoCTsgcmNsaz0xLHRjbGs9MSxjcD0wLHRyMj0wKGVuYWJsZSBsYXRlcikKKwltb3YgcjMsICM1CisJYWNhbGwgc2V0X2JhdWQKKwlzZXRiIFRSMgorCW1vdiBTQ09OLCAjMDUwaAorCQorI2lmIDAKKwltb3YgcjEsICMweDQwCisJbW92IGEsICMweDQxCitzZW5kOgkKKwltb3YgU0JVRiwgYQorCWluYyBhCisJYW5sIGEsICMweDNGCisJb3JsIGEsICMweDQwCis7CXhybCBhLCAjMHgwMgord2FpdDE6CQorCWpuYiBUSSwgd2FpdDEKKwljbHIgVEkKKwlkam56IHIxLCBzZW5kCis7ZG9uZToJc2ptcCBkb25lCisKKyNlbmRpZgorCQorCXNldGIgRVVTQgorCXNldGIgRUEKKwlzZXRiIEVTMAorCTthY2FsbCBkdW1wX3N0YXQKKworCTs7IGhleSwgd2hhdCBzYXkgd2UgUkVOVU1FUkFURSEgKFRSTSBwLjYyKQorCW1vdiBhLCAjMAorCW1vdiBkcHMsIGEKKwltb3YgZHB0ciwgVVNCQ1MKKwltb3YgYSwgIzB4MDIJCTsgRElTQ09OPTAsIERJU0NPRT0wLCBSRU5VTT0xCisJbW92eCBAZHB0ciwgYQorCTs7IG5vdyBwcmVzZW5jZSBwaW4gaXMgZmxvYXRpbmcsIHNpbXVsYXRpbmcgZGlzY29ubmVjdC4gd2FpdCAwLjVzCisJbW92IHIxLCAjNDYKK3JlbnVtX3dhaXQxOgorCW1vdiByMiwgIzAKK3JlbnVtX3dhaXQyOgorCW1vdiByMywgIzAKK3JlbnVtX3dhaXQzOgorCWRqbnogcjMsIHJlbnVtX3dhaXQzCisJZGpueiByMiwgcmVudW1fd2FpdDIKKwlkam56IHIxLCByZW51bV93YWl0MQk7IHdhaXQgYWJvdXQgbiooMjU2XjIpIDZNSHogY2xvY2tzCisJbW92IGEsICMweDA2CQk7IERJU0NPTj0wLCBESVNDT0U9MSwgUkVOVU09MQorCW1vdnggQGRwdHIsIGEKKwk7OyB3ZSBhcmUgYmFjayBvbmxpbmUuIHRoZSBob3N0IGRldmljZSB3aWxsIG5vdyByZS1xdWVyeSB1cworCQorCQorbWFpbjoJc2ptcCBtYWluCisKKwkKKworSVNSX1N1ZGF2OgorCXB1c2ggZHBzCisJcHVzaCBkcGwKKwlwdXNoIGRwaAorCXB1c2ggZHBsMQorCXB1c2ggZHBoMQorCXB1c2ggYWNjCisJbW92IGEsRVhJRgorCWNsciBhY2MuNAorCW1vdiBFWElGLGEJCTsgY2xlYXIgSU5UMiBmaXJzdAorCW1vdiBkcHRyLCBVU0JJUlEJOyBjbGVhciBVU0IgaW50CisJbW92IGEsIzAxaAorCW1vdnggQGRwdHIsYQorCisJOzsgZ2V0IHJlcXVlc3QgdHlwZQorCW1vdiBkcHRyLCBTRVRVUERBVAorCW1vdnggYSwgQGRwdHIKKwltb3YgcjEsIGEJCTsgcjEgPSBibVJlcXVlc3RUeXBlCisJaW5jIGRwdHIKKwltb3Z4IGEsIEBkcHRyCisJbW92IHIyLCBhCQk7IHIyID0gYlJlcXVlc3QKKwlpbmMgZHB0cgorCW1vdnggYSwgQGRwdHIKKwltb3YgcjMsIGEJCTsgcjMgPSB3VmFsdWVMCisJaW5jIGRwdHIKKwltb3Z4IGEsIEBkcHRyCisJbW92IHI0LCBhCQk7IHI0ID0gd1ZhbHVlSAorCisJOzsgbWFpbiBzd2l0Y2ggb24gYm1SZXF1ZXN0LnR5cGU6IHN0YW5kYXJkIG9yIHZlbmRvcgorCW1vdiBhLCByMQorCWFubCBhLCAjMHg2MAorCWNqbmUgYSwgIzB4MDAsIHNldHVwX2JtcmVxX3R5cGVfbm90X3N0YW5kYXJkCisJOzsgc3RhbmRhcmQgcmVxdWVzdDogbm93IG1haW4gc3dpdGNoIGlzIG9uIGJSZXF1ZXN0CisJbGptcCBzZXR1cF9ibXJlcV9pc19zdGFuZGFyZAorCQorc2V0dXBfYm1yZXFfdHlwZV9ub3Rfc3RhbmRhcmQ6CQorCTs7IGEgc3RpbGwgaGFzIGJtcmVxJjB4NjAKKwljam5lIGEsICMweDQwLCBzZXR1cF9ibXJlcV90eXBlX25vdF92ZW5kb3IKKwk7OyBBbmNob3IgcmVzZXJ2ZXMgYlJlcXVlc3QgMHhhMC0weGFmLCB3ZSB1c2Ugc21hbGwgb25lcworCTs7IHN3aXRjaCBvbiBiUmVxdWVzdC4gYm1SZXF1ZXN0IHdpbGwgYWx3YXlzIGJlIDB4NDEgb3IgMHhjMQorCWNqbmUgcjIsICMweDAwLCBzZXR1cF9jdHJsX25vdF8wMAorCTs7IDAwIGlzIHNldCBiYXVkLCB3VmFsdWVbMF0gaGFzIGJhdWQgcmF0ZSBpbmRleAorCWxjYWxsIHNldF9iYXVkCQk7IGluZGV4IGluIHIzLCBjYXJyeSBzZXQgaWYgZXJyb3IKKwlqYyBzZXR1cF9ibXJlcV90eXBlX25vdF9zdGFuZGFyZF9fZG9fc3RhbGwKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9ibXJlcV90eXBlX25vdF9zdGFuZGFyZF9fZG9fc3RhbGw6CisJbGptcCBzZXR1cF9zdGFsbAorc2V0dXBfY3RybF9ub3RfMDA6CisJY2puZSByMiwgIzB4MDEsIHNldHVwX2N0cmxfbm90XzAxCisJOzsgMDEgaXMgcmVzZXJ2ZWQgZm9yIHNldCBiaXRzIChwYXJpdHkpLiBUT0RPCisJbGptcCBzZXR1cF9zdGFsbAorc2V0dXBfY3RybF9ub3RfMDE6CisJY2puZSByMiwgIzB4MDIsIHNldHVwX2N0cmxfbm90XzAyCisJOzsgMDIgaXMgc2V0IEhXIGZsb3cgY29udHJvbC4gVE9ETworCWxqbXAgc2V0dXBfc3RhbGwKK3NldHVwX2N0cmxfbm90XzAyOgorCWNqbmUgcjIsICMweDAzLCBzZXR1cF9jdHJsX25vdF8wMworCTs7IDAzIGlzIGNvbnRyb2wgcGlucyAoUlRTLCBEVFIpLgorCWxqbXAgY29udHJvbF9waW5zCTsgd2lsbCBqdW1wIHRvIHNldHVwX2RvbmVfYWNrLAorCQkJCTsgIG9yIHNldHVwX3JldHVybl9vbmVfYnl0ZQorc2V0dXBfY3RybF9ub3RfMDM6CisJY2puZSByMiwgIzB4MDQsIHNldHVwX2N0cmxfbm90XzA0CisJOzsgMDQgaXMgc2VuZCBicmVhayAocmVhbGx5ICJ0dXJuIGJyZWFrIG9uL29mZiIpLiBUT0RPCisJY2puZSByMywgIzB4MDAsIHNldHVwX2N0cmxfZG9fYnJlYWtfb24KKwk7OyBkbyBicmVhayBvZmY6IHJlc3RvcmUgUE9SVENDRkcuMSB0byByZWNvbm5lY3QgVHhEMCB0byBzZXJpYWwgcG9ydAorCW1vdiBkcHRyLCBQT1JUQ0NGRworCW1vdnggYSwgQGRwdHIKKwlvcmwgYSwgIzB4MDIKKwltb3Z4IEBkcHRyLCBhCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfY3RybF9kb19icmVha19vbjoKKwk7OyBkbyBicmVhayBvbjogY2xlYXIgUE9SVENDRkcuMCwgc2V0IFR4RCBoaWdoKD8pIChiMSBsb3cpCisJbW92IGRwdHIsIE9VVEMKKwltb3Z4IGEsIEBkcHRyCisJYW5sIGEsICMweGZkCQk7IH4weDAyCisJbW92eCBAZHB0ciwgYQorCW1vdiBkcHRyLCBQT1JUQ0NGRworCW1vdnggYSwgQGRwdHIKKwlhbmwgYSwgIzB4ZmQJCTsgfjB4MDIKKwltb3Z4IEBkcHRyLCBhCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfY3RybF9ub3RfMDQ6CisJY2puZSByMiwgIzB4MDUsIHNldHVwX2N0cmxfbm90XzA1CisJOzsgMDUgaXMgc2V0IGRlc2lyZWQgaW50ZXJydXB0IGJpdG1hcC4gVE9ETworCWxqbXAgc2V0dXBfc3RhbGwKK3NldHVwX2N0cmxfbm90XzA1OgorCWNqbmUgcjIsICMweDA2LCBzZXR1cF9jdHJsX25vdF8wNgorCTs7IDA2IGlzIHF1ZXJ5IHJvb20KKwljam5lIHIzLCAjMHgwMCwgc2V0dXBfY3RybF8wNl9ub3RfMDAKKwk7OyAwNiwgd1ZhbHVlWzBdPTAgaXMgcXVlcnkgd3JpdGVfcm9vbQorCW1vdiBhLCB0eF9yaW5nX291dAorCXNldGIgYworCXN1YmIgYSwgdHhfcmluZ19pbgk7IG91dC0xLWluID0gMjU1IC0gKGluLW91dCkKKwlsam1wIHNldHVwX3JldHVybl9vbmVfYnl0ZQorc2V0dXBfY3RybF8wNl9ub3RfMDA6CisJY2puZSByMywgIzB4MDEsIHNldHVwX2N0cmxfMDZfbm90XzAxCisJOzsgMDYsIHdWYWx1ZVswXT0xIGlzIHF1ZXJ5IGNoYXJzX2luX2J1ZmZlcgorCW1vdiBhLCB0eF9yaW5nX2luCisJY2xyIGMKKwlzdWJiIGEsIHR4X3Jpbmdfb3V0CTsgaW4tb3V0CisJbGptcCBzZXR1cF9yZXR1cm5fb25lX2J5dGUKK3NldHVwX2N0cmxfMDZfbm90XzAxOgkKKwlsam1wIHNldHVwX3N0YWxsCitzZXR1cF9jdHJsX25vdF8wNjoKKwljam5lIHIyLCAjMHgwNywgc2V0dXBfY3RybF9ub3RfMDcKKwk7OyAwNyBpcyByZXF1ZXN0IHR4IHVudGhyb3R0bGUgaW50ZXJydXB0CisJbW92IHR4X3VudGhyb3R0bGVfdGhyZXNob2xkLCByMzsgd1ZhbHVlWzBdIGlzIHRocmVzaG9sZCB2YWx1ZQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX2N0cmxfbm90XzA3OgorCWxqbXAgc2V0dXBfc3RhbGwKKwkKK3NldHVwX2JtcmVxX3R5cGVfbm90X3ZlbmRvcjoKKwlsam1wIHNldHVwX3N0YWxsCisKKworc2V0dXBfYm1yZXFfaXNfc3RhbmRhcmQ6CQorCWNqbmUgcjIsICMweDAwLCBzZXR1cF9icmVxX25vdF8wMAorCTs7IDAwOglHZXRfU3RhdHVzIChzdWItc3dpdGNoIG9uIGJtUmVxdWVzdFR5cGU6IGRldmljZSwgZXAsIGludCkKKwljam5lIHIxLCAjMHg4MCwgc2V0dXBfR2V0X1N0YXR1c19ub3RfZGV2aWNlCisJOzsgR2V0X1N0YXR1cyhkZXZpY2UpCisJOzsgIGFyZSB3ZSBzZWxmLXBvd2VyZWQ/IG5vLiBjYW4gd2UgZG8gcmVtb3RlIHdha2V1cD8gbm8KKwk7OyAgIHNvIHJldHVybiB0d28gemVybyBieXRlcy4gVGhpcyBpcyByZXVzYWJsZQorc2V0dXBfcmV0dXJuX3R3b196ZXJvX2J5dGVzOgorCW1vdiBkcHRyLCBJTjBCVUYKKwljbHIgYQorCW1vdnggQGRwdHIsIGEKKwlpbmMgZHB0cgorCW1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgSU4wQkMKKwltb3YgYSwgIzIKKwltb3Z4IEBkcHRyLCBhCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfR2V0X1N0YXR1c19ub3RfZGV2aWNlOgorCWNqbmUgcjEsICMweDgyLCBzZXR1cF9HZXRfU3RhdHVzX25vdF9lbmRwb2ludAorCTs7IEdldF9TdGF0dXMoZW5kcG9pbnQpCisJOzsgIG11c3QgZ2V0IHN0YWxsIGJpdCBmb3IgZXBbd0luZGV4TF0sIHJldHVybiB0d28gYnl0ZXMsIGJpdCBpbiBsc2IgMAorCTs7IGZvciBub3c6IGNoZWF0LiBUT0RPCisJc2ptcCBzZXR1cF9yZXR1cm5fdHdvX3plcm9fYnl0ZXMKK3NldHVwX0dldF9TdGF0dXNfbm90X2VuZHBvaW50OgorCWNqbmUgcjEsICMweDgxLCBzZXR1cF9HZXRfU3RhdHVzX25vdF9pbnRlcmZhY2UKKwk7OyBHZXRfU3RhdHVzKGludGVyZmFjZSk6IHJldHVybiB0d28gemVyb3MKKwlzam1wIHNldHVwX3JldHVybl90d29femVyb19ieXRlcworc2V0dXBfR2V0X1N0YXR1c19ub3RfaW50ZXJmYWNlOgkKKwlsam1wIHNldHVwX3N0YWxsCisJCitzZXR1cF9icmVxX25vdF8wMDoKKwljam5lIHIyLCAjMHgwMSwgc2V0dXBfYnJlcV9ub3RfMDEKKwk7OyAwMToJQ2xlYXJfRmVhdHVyZSAoc3ViLXN3aXRjaCBvbiB3VmFsdWVMOiBzdGFsbCwgcmVtb3RlIHdha2V1cCkKKwljam5lIHIzLCAjMHgwMCwgc2V0dXBfQ2xlYXJfRmVhdHVyZV9ub3Rfc3RhbGwKKwk7OyBDbGVhcl9GZWF0dXJlKHN0YWxsKS4gc2hvdWxkIGNsZWFyIGEgc3RhbGwgYml0LiBUT0RPCisJbGptcCBzZXR1cF9zdGFsbAorc2V0dXBfQ2xlYXJfRmVhdHVyZV9ub3Rfc3RhbGw6CisJY2puZSByMywgIzB4MDEsIHNldHVwX0NsZWFyX0ZlYXR1cmVfbm90X3J3YWtlCisJOzsgQ2xlYXJfRmVhdHVyZShyZW1vdGUgd2FrZXVwKS4gaWdub3JlZC4KKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9DbGVhcl9GZWF0dXJlX25vdF9yd2FrZToKKwlsam1wIHNldHVwX3N0YWxsCisJCitzZXR1cF9icmVxX25vdF8wMToKKwljam5lIHIyLCAjMHgwMywgc2V0dXBfYnJlcV9ub3RfMDMKKwk7OyAwMzoJU2V0X0ZlYXR1cmUgKHN1Yi1zd2l0Y2ggb24gd1ZhbHVlTDogc3RhbGwsIHJlbW90ZSB3YWtldXApCisJY2puZSByMywgIzB4MDAsIHNldHVwX1NldF9GZWF0dXJlX25vdF9zdGFsbAorCTs7IFNldF9GZWF0dXJlKHN0YWxsKS4gU2hvdWxkIHNldCBhIHN0YWxsIGJpdC4gVE9ETworCWxqbXAgc2V0dXBfc3RhbGwKK3NldHVwX1NldF9GZWF0dXJlX25vdF9zdGFsbDoKKwljam5lIHIzLCAjMHgwMSwgc2V0dXBfU2V0X0ZlYXR1cmVfbm90X3J3YWtlCisJOzsgU2V0X0ZlYXR1cmUocmVtb3RlIHdha2V1cCkuIGlnbm9yZWQuCisJbGptcCBzZXR1cF9kb25lX2Fjaworc2V0dXBfU2V0X0ZlYXR1cmVfbm90X3J3YWtlOgorCWxqbXAgc2V0dXBfc3RhbGwKKwkKK3NldHVwX2JyZXFfbm90XzAzOgkKKwljam5lIHIyLCAjMHgwNiwgc2V0dXBfYnJlcV9ub3RfMDYKKwk7OyAwNjoJR2V0X0Rlc2NyaXB0b3IgKHMtc3dpdGNoIG9uIHdWYWx1ZUg6IGRldiwgY29uZmlnW25dLCBzdHJpbmdbbl0pCisJY2puZSByNCwgIzB4MDEsIHNldHVwX0dldF9EZXNjcmlwdG9yX25vdF9kZXZpY2UKKwk7OyBHZXRfRGVzY3JpcHRvcihkZXZpY2UpCisJbW92IGRwdHIsIFNVRFBUUkgKKwltb3YgYSwgI0hJR0goZGVzY19kZXZpY2UpCisJbW92eCBAZHB0ciwgYQorCW1vdiBkcHRyLCBTVURQVFJMCisJbW92IGEsICNMT1coZGVzY19kZXZpY2UpCisJbW92eCBAZHB0ciwgYQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX0dldF9EZXNjcmlwdG9yX25vdF9kZXZpY2U6CisJY2puZSByNCwgIzB4MDIsIHNldHVwX0dldF9EZXNjcmlwdG9yX25vdF9jb25maWcKKwk7OyBHZXRfRGVzY3JpcHRvcihjb25maWdbbl0pCisJY2puZSByMywgIzB4MDAsIHNldHVwX3N0YWxsOyBvbmx5IGhhbmRsZSBuPT0wCisJOzsgR2V0X0Rlc2NyaXB0b3IoY29uZmlnWzBdKQorCW1vdiBkcHRyLCBTVURQVFJICisJbW92IGEsICNISUdIKGRlc2NfY29uZmlnMSkKKwltb3Z4IEBkcHRyLCBhCisJbW92IGRwdHIsIFNVRFBUUkwKKwltb3YgYSwgI0xPVyhkZXNjX2NvbmZpZzEpCisJbW92eCBAZHB0ciwgYQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX0dldF9EZXNjcmlwdG9yX25vdF9jb25maWc6CisJY2puZSByNCwgIzB4MDMsIHNldHVwX0dldF9EZXNjcmlwdG9yX25vdF9zdHJpbmcKKwk7OyBHZXRfRGVzY3JpcHRvcihzdHJpbmdbd1ZhbHVlTF0pCisJOzsgIGlmICh3VmFsdWVMID49IG1heHN0cmluZ3MpIHN0YWxsCisJbW92IGEsICMoKGRlc2Nfc3RyaW5nc19lbmQtZGVzY19zdHJpbmdzKS8yKQorCWNsciBjCisJc3ViYiBhLHIzCQk7IGE9NCwgcjMgPSAwLi4zIC4gaWYgYTw9MCB0aGVuIHN0YWxsCisJamMgIHNldHVwX3N0YWxsCisJanogIHNldHVwX3N0YWxsCisJbW92IGEsIHIzCisJYWRkIGEsIHIzCQk7IGEgPSAyKndWYWx1ZUwKKwltb3YgZHB0ciwgI2Rlc2Nfc3RyaW5ncworCWFkZCBhLCBkcGwKKwltb3YgZHBsLCBhCisJbW92IGEsICMwCisJYWRkYyBhLCBkcGgKKwltb3YgZHBoLCBhCQk7IGRwaCA9IGRlc2Nfc3RyaW5nc1thXS4gYmlnIGVuZGlhbiEgKGhhbmR5KQorCTs7IGl0IGxvb2tzIGxpa2UgbXkgYWRhcHRlciB1c2VzIGEgcmV2aXNpb24gb2YgdGhlIEVaVVNCIHRoYXQKKwk7OyBjb250YWlucyAicmV2IEQgZXJyYXRhIG51bWJlciA4IiwgYXMgaGludGVkIGluIHRoZSBFelVTQiBleGFtcGxlCisJOzsgY29kZS4gSSBjYW5ub3QgZmluZCBhbiBhY3R1YWwgZXJyYXRhIGRlc2NyaXB0aW9uIG9uIHRoZSBDeXByZXNzCisJOzsgd2ViIHNpdGUsIGJ1dCBmcm9tIHRoZSBleGFtcGxlIGNvZGUgaXQgbG9va3MgbGlrZSB0aGlzIGJ1ZyBjYXVzZXMKKwk7OyB0aGUgbGVuZ3RoIG9mIHN0cmluZyBkZXNjcmlwdG9ycyB0byBiZSByZWFkIGluY29ycmVjdGx5LCBwb3NzaWJseQorCTs7IHNlbmRpbmcgYmFjayBtb3JlIGNoYXJhY3RlcnMgdGhhbiB0aGUgZGVzY3JpcHRvciBoYXMuIFRoZSB3b3JrYXJvdW5kCisJOzsgaXMgdG8gbWFudWFsbHkgc2VuZCBvdXQgYWxsIG9mIHRoZSBkYXRhLiBUaGUgY29uc2VxdWVuY2Ugb2Ygbm90CisJOzsgdXNpbmcgdGhlIHdvcmthcm91bmQgaXMgdGhhdCB0aGUgc3RyaW5ncyBnYXRoZXJlZCBieSB0aGUga2VybmVsCisJOzsgZHJpdmVyIGFyZSB0b28gbG9uZyBhbmQgYXJlIGZpbGxlZCB3aXRoIHRyYWlsaW5nIGdhcmJhZ2UgKGluY2x1ZGluZworCTs7IGxlZnRvdmVyIHN0cmluZ3MpLiBXcml0aW5nIHRoaXMgb3V0IGJ5IGhhbmQgaXMgYSBudWlzYW5jZSwgc28gZm9yCisJOzsgbm93IEkgd2lsbCBqdXN0IGxpdmUgd2l0aCB0aGUgYnVnLgorCW1vdnggYSwgQGRwdHIKKwltb3YgcjEsIGEKKwlpbmMgZHB0cgorCW1vdnggYSwgQGRwdHIKKwltb3YgcjIsIGEKKwltb3YgZHB0ciwgU1VEUFRSSAorCW1vdiBhLCByMQorCW1vdnggQGRwdHIsIGEKKwltb3YgZHB0ciwgU1VEUFRSTAorCW1vdiBhLCByMgorCW1vdnggQGRwdHIsIGEKKwk7OyBkb25lCisJbGptcCBzZXR1cF9kb25lX2FjaworCQorc2V0dXBfR2V0X0Rlc2NyaXB0b3Jfbm90X3N0cmluZzoKKwlsam1wIHNldHVwX3N0YWxsCisJCitzZXR1cF9icmVxX25vdF8wNjoKKwljam5lIHIyLCAjMHgwOCwgc2V0dXBfYnJlcV9ub3RfMDgKKwk7OyBHZXRfQ29uZmlndXJhdGlvbi4gYWx3YXlzIDEuIHJldHVybiBvbmUgYnl0ZS4KKwk7OyB0aGlzIGlzIHJldXNhYmxlCisJbW92IGEsICMxCitzZXR1cF9yZXR1cm5fb25lX2J5dGU6CQorCW1vdiBkcHRyLCBJTjBCVUYKKwltb3Z4IEBkcHRyLCBhCisJbW92IGEsICMxCisJbW92IGRwdHIsIElOMEJDCisJbW92eCBAZHB0ciwgYQorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK3NldHVwX2JyZXFfbm90XzA4OgorCWNqbmUgcjIsICMweDA5LCBzZXR1cF9icmVxX25vdF8wOQorCTs7IDA5OiBTZXRfQ29uZmlndXJhdGlvbi4gaWdub3JlZC4KKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9icmVxX25vdF8wOToKKwljam5lIHIyLCAjMHgwYSwgc2V0dXBfYnJlcV9ub3RfMGEKKwk7OyAwYTogR2V0X0ludGVyZmFjZS4gZ2V0IHRoZSBjdXJyZW50IGFsdHNldHRpbmcgZm9yIGludFt3SW5kZXhMXQorCTs7ICBzaW5jZSB3ZSBvbmx5IGhhdmUgb25lIGludGVyZmFjZSwgaWdub3JlIHdJbmRleEwsIHJldHVybiBhIDAKKwltb3YgYSwgIzAKKwlsam1wIHNldHVwX3JldHVybl9vbmVfYnl0ZQorc2V0dXBfYnJlcV9ub3RfMGE6CisJY2puZSByMiwgIzB4MGIsIHNldHVwX2JyZXFfbm90XzBiCisJOzsgMGI6IFNldF9JbnRlcmZhY2UuIHNldCBhbHRzZXR0aW5nIGZvciBpbnRlcmZhY2Vbd0luZGV4TF0uIGlnbm9yZWQKKwlsam1wIHNldHVwX2RvbmVfYWNrCitzZXR1cF9icmVxX25vdF8wYjoKKwlsam1wIHNldHVwX3N0YWxsCisKKwkJCitzZXR1cF9kb25lX2FjazoJCisJOzsgbm93IGNsZWFyIEhTTkFLCisJbW92IGRwdHIsIEVQMENTCisJbW92IGEsICMweDAyCisJbW92eCBAZHB0ciwgYQorCXNqbXAgc2V0dXBfZG9uZQorc2V0dXBfc3RhbGw6CQorCTs7IHVuaGFuZGxlZC4gU1RBTEwKKwk7RVAwQ1MgfD0gYm1FUFNUQUxMCisJbW92IGRwdHIsIEVQMENTCisJbW92eCBhLCBAZHB0cgorCW9ybCBhLCBFUDBTVEFMTGJpdAorCW1vdnggQGRwdHIsIGEKKwlzam1wIHNldHVwX2RvbmUKKwkKK3NldHVwX2RvbmU6CQorCXBvcCBhY2MKKwlwb3AgZHBoMQorCXBvcCBkcGwxCisJcG9wIGRwaAorCXBvcCBkcGwKKwlwb3AgZHBzCisJcmV0aQorCis7OzsgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkKK3NldF9iYXVkOgkJCTsgYmF1ZCBpbmRleCBpbiByMworCTs7IHZlcmlmeSBhIDwgMTAKKwltb3YgYSwgcjMKKwlqYiBBQ0MuNywgc2V0X2JhdWRfX2JhZGJhdWQKKwljbHIgYworCXN1YmIgYSwgIzEwCisJam5jIHNldF9iYXVkX19iYWRiYXVkCisJbW92IGEsIHIzCisJcmwgYQkJCTsgYSA9IGluZGV4KjIKKwlhZGQgYSwgI0xPVyhiYXVkX3RhYmxlKQorCW1vdiBkcGwsIGEKKwltb3YgYSwgI0hJR0goYmF1ZF90YWJsZSkKKwlhZGRjIGEsICMwCisJbW92IGRwaCwgYQorCTs7IFRPRE86IHNodXQgZG93biB4bWl0L3JlY2VpdmUKKwk7OyBUT0RPOiB3YWl0IGZvciBjdXJyZW50IHhtaXQgY2hhciB0byBsZWF2ZQorCTs7IFRPRE86IHNodXQgZG93biB0aW1lciB0byBhdm9pZCBwYXJ0aWFsLWNoYXIgZ2xpdGNoCisJbW92eCBhLEBkcHRyCQk7IEJBVURfSElHSAorCW1vdiBSQ0FQMkgsIGEKKwltb3YgVEgyLCBhCisJaW5jIGRwdHIKKwltb3Z4IGEsQGRwdHIJCTsgQkFVRF9MT1cKKwltb3YgUkNBUDJMLCBhCisJbW92IFRMMiwgYQorCTs7IFRPRE86IHJlc3RhcnQgeG1pdC9yZWNlaXZlCisJOzsgVE9ETzogcmVlbmFibGUgaW50ZXJydXB0cywgcmVzdW1lIHR4IGlmIHBlbmRpbmcKKwljbHIgYwkJCTsgYz0wOiBzdWNjZXNzCisJcmV0CitzZXRfYmF1ZF9fYmFkYmF1ZDoKKwlzZXRiIGMJCQk7IGM9MTogZmFpbHVyZQorCXJldAorCQorOzs7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Citjb250cm9sX3BpbnM6CisJY2puZSByMSwgIzB4NDEsIGNvbnRyb2xfcGluc19pbgorY29udHJvbF9waW5zX291dDoKKwkJO1RPRE8gQktQVCBpcyBEVFIKKwltb3YgYSwgcjMgOyB3VmFsdWVbMF0gaG9sZHMgbmV3IGJpdHM6CWI3IGlzIG5ldyBSVFMKKwl4cmwgYSwgIzB4ZmYJCTsgMSBtZWFucyBhY3RpdmUsIDBWLCArMTJWID8KKwlhbmwgYSwgIzB4ODAKKwltb3YgcjMsIGEKKwltb3YgZHB0ciwgT1VUQworCW1vdnggYSwgQGRwdHIJCTsgb25seSBjaGFuZ2UgYml0IDcgCisJYW5sIGEsICMweDdGCQk7IH4weDg0CisJb3JsIGEsIHIzCisJbW92eCBAZHB0ciwgYQkJOyBvdGhlciBwaW5zIGFyZSBpbnB1dHMsIGJpdHMgaWdub3JlZAorCWxqbXAgc2V0dXBfZG9uZV9hY2sKK2NvbnRyb2xfcGluc19pbjoKKwltb3YgZHB0ciwgUElOU0MKKwltb3Z4IGEsIEBkcHRyCisJeHJsIGEsICMweGZmCisJbGptcCBzZXR1cF9yZXR1cm5fb25lX2J5dGUKKworOzs7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkKK0lTUl9FcDJpbjoKKwlwdXNoIGRwcworCXB1c2ggZHBsCisJcHVzaCBkcGgKKwlwdXNoIGRwbDEKKwlwdXNoIGRwaDEKKwlwdXNoIGFjYworCW1vdiBhLEVYSUYKKwljbHIgYWNjLjQKKwltb3YgRVhJRixhCQk7IGNsZWFyIElOVDIgZmlyc3QKKwltb3YgZHB0ciwgSU4wN0lSUQk7IGNsZWFyIFVTQiBpbnQKKwltb3YgYSwjMDRoCisJbW92eCBAZHB0cixhCisKKwltb3YgYSwgIzB4MjAgICAgICAgICAgICAgOyBUdXJuIG9mZiB0aGUgZ3JlZW4gTEVECisgICAgICAgIG1vdiBkcHRyLE9FQQorICAgICAgICBtb3Z4IEBkcHRyLCBhCisKKworCTs7IGRvIHN0dWZmCisJbGNhbGwgc3RhcnRfaW4KKworCW1vdiBhLCAjMHgyMCAgICAgICAgICAgICA7IFR1cm4gb2ZmIHRoZSBncmVlbiBMRUQKKyAgICAgICAgbW92IGRwdHIsT0VBCisgICAgICAgIG1vdnggQGRwdHIsIGEKKworCisJCisJcG9wIGFjYworCXBvcCBkcGgxCisJcG9wIGRwbDEKKwlwb3AgZHBoCisJcG9wIGRwbAorCXBvcCBkcHMKKwlyZXRpCisKK0lTUl9FcDJvdXQ6CisJcHVzaCBkcHMKKwlwdXNoIGRwbAorCXB1c2ggZHBoCisJcHVzaCBkcGwxCisJcHVzaCBkcGgxCisJcHVzaCBhY2MKKworICAgICAgICBtb3YgYSwgIzB4MTAgICAgICAgICAgICAgOyBUdXJuIHRoZSBncmVlbiBMRUQKKyAgICAgICAgbW92IGRwdHIsT0VBCisgICAgICAgIG1vdnggQGRwdHIsIGEKKworCisKKwltb3YgYSxFWElGCisJY2xyIGFjYy40CisJbW92IEVYSUYsYQkJOyBjbGVhciBJTlQyIGZpcnN0CisJbW92IGRwdHIsIE9VVDA3SVJRCTsgY2xlYXIgVVNCIGludAorCW1vdiBhLCMwNGgKKwltb3Z4IEBkcHRyLGEKKworCTs7IGRvIHN0dWZmCisKKwk7OyBjb3B5IGRhdGEgaW50byBidWZmZXIuIGZvciBub3csIGFzc3VtZSB3ZSB3aWxsIGhhdmUgZW5vdWdoIHNwYWNlCisJbW92IGRwdHIsIE9VVDJCQwk7IGdldCBieXRlIGNvdW50CisJbW92eCBhLEBkcHRyCisJbW92IHIxLCBhCisJY2xyIGEKKwltb3YgZHBzLCBhCisJbW92IGRwdHIsIE9VVDJCVUYJOyBsb2FkIERQVFIwIHdpdGggc291cmNlCisJbW92IGRwaDEsICNISUdIKHR4X3JpbmcpCTsgbG9hZCBEUFRSMSB3aXRoIHRhcmdldAorCW1vdiBkcGwxLCB0eF9yaW5nX2luCitPVVRfbG9vcDoKKwltb3Z4IGEsQGRwdHIJCTsgcmVhZAorCWluYyBkcHMJCQk7IHN3aXRjaCB0byBEUFRSMTogdGFyZ2V0CisJaW5jIGRwbDEJCTsgdGFyZ2V0ID0gdHhfcmluZ19pbisxCisJbW92eCBAZHB0cixhCQk7IHN0b3JlCisJbW92IGEsZHBsMQorCWNqbmUgYSwgdHhfcmluZ19vdXQsIE9VVF9ub19vdmVyZmxvdworCXNqbXAgT1VUX292ZXJmbG93CitPVVRfbm9fb3ZlcmZsb3c6CQorCWluYyB0eF9yaW5nX2luCQk7IHR4X3JpbmdfaW4rKworCWluYyBkcHMJCQk7IHN3aXRjaCB0byBEUFRSMDogc291cmNlCisJaW5jIGRwdHIKKwlkam56IHIxLCBPVVRfbG9vcAorCXNqbXAgT1VUX2RvbmUKK09VVF9vdmVyZmxvdzoKKwk7OyBzaWduYWwgb3ZlcmZsb3cKKwk7OyBmYWxsIHRocm91Z2gKK09VVF9kb25lOgkKKwk7OyBhY2sKKwltb3YgZHB0cixPVVQyQkMKKwltb3Z4IEBkcHRyLGEKKworCTs7IHN0YXJ0IHR4CisJYWNhbGwgbWF5YmVfc3RhcnRfdHgKKwk7YWNhbGwgZHVtcF9zdGF0CisKKyAgICAgICAgbW92IGEsICMweDIwICAgICAgICAgICAgIDsgVHVybiBvZmYgdGhlIGdyZWVuIExFRAorICAgICAgICBtb3YgZHB0cixPRUEKKyAgICAgICAgbW92eCBAZHB0ciwgYQorCQorCXBvcCBhY2MKKwlwb3AgZHBoMQorCXBvcCBkcGwxCisJcG9wIGRwaAorCXBvcCBkcGwKKwlwb3AgZHBzCisJcmV0aQorCitkdW1wX3N0YXQ6CisJOzsgZmlsbCBpbiBFUDRpbiB3aXRoIGEgZGVidWdnaW5nIG1lc3NhZ2U6CisJOzsgICB0eF9yaW5nX2luLCB0eF9yaW5nX291dCwgcnhfcmluZ19pbiwgcnhfcmluZ19vdXQKKwk7OyAgIHR4X2FjdGl2ZQorCTs7ICAgdHhfcmluZ1swLi4xNV0KKwk7OyAgIDB4ZmMKKwk7OyAgIHJ4X3JpbmdbMC4uMTVdCisJY2xyIGEKKwltb3YgZHBzLCBhCisJCisJbW92IGRwdHIsIElONENTCisJbW92eCBhLCBAZHB0cgorCWpiIGFjYy4xLCBkdW1wX3N0YXRfX2RvbmU7IGJ1c3k6IGNhbm5vdCBkdW1wLCBvbGQgb25lIHN0aWxsIHBlbmRpbmcKKwltb3YgZHB0ciwgSU40QlVGCisJCisJbW92IGEsIHR4X3JpbmdfaW4KKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwltb3YgYSwgdHhfcmluZ19vdXQKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKworCW1vdiBhLCByeF9yaW5nX2luCisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJbW92IGEsIHJ4X3Jpbmdfb3V0CisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJCisJY2xyIGEKKwlqbmIgVFhfUlVOTklORywgZHVtcF9zdGF0X19ub190eF9ydW5uaW5nCisJaW5jIGEKK2R1bXBfc3RhdF9fbm9fdHhfcnVubmluZzoKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwk7OyB0eF9yaW5nWzAuLjE1XQorCWluYyBkcHMKKwltb3YgZHB0ciwgI3R4X3JpbmcJOyBEUFRSMTogc291cmNlCisJbW92IHIxLCAjMTYKK2R1bXBfc3RhdF9fdHhfcmluZ19sb29wOgorCW1vdnggYSwgQGRwdHIKKwlpbmMgZHB0cgorCWluYyBkcHMKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwlpbmMgZHBzCisJZGpueiByMSwgZHVtcF9zdGF0X190eF9yaW5nX2xvb3AKKwlpbmMgZHBzCisJCisJbW92IGEsICMweGZjCisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJCisJOzsgcnhfcmluZ1swLi4xNV0KKwlpbmMgZHBzCisJbW92IGRwdHIsICNyeF9yaW5nCTsgRFBUUjE6IHNvdXJjZQorCW1vdiByMSwgIzE2CitkdW1wX3N0YXRfX3J4X3JpbmdfbG9vcDoKKwltb3Z4IGEsIEBkcHRyCisJaW5jIGRwdHIKKwlpbmMgZHBzCisJbW92eCBAZHB0ciwgYQorCWluYyBkcHRyCisJaW5jIGRwcworCWRqbnogcjEsIGR1bXBfc3RhdF9fcnhfcmluZ19sb29wCisJCisJOzsgbm93IHNlbmQgaXQKKwljbHIgYQorCW1vdiBkcHMsIGEKKwltb3YgZHB0ciwgSU40QkMKKwltb3YgYSwgIzM4CisJbW92eCBAZHB0ciwgYQorZHVtcF9zdGF0X19kb25lOgkKKwlyZXQKKwkJCis7OzsgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCittYXliZV9zdGFydF90eDoKKwk7OyBtYWtlIHN1cmUgdGhlIHR4IHByb2Nlc3MgaXMgcnVubmluZy4KKwlqYiBUWF9SVU5OSU5HLCBzdGFydF90eF9kb25lCitzdGFydF90eDoKKwk7OyBpcyB0aGVyZSB3b3JrIHRvIGJlIGRvbmU/CisJbW92IGEsIHR4X3JpbmdfaW4KKwljam5lIGEsdHhfcmluZ19vdXQsIHN0YXJ0X3R4X193b3JrCisJcmV0CQkJOyBubyB3b3JrCitzdGFydF90eF9fd29yazoJCisJOzsgdHggd2FzIG5vdCBydW5uaW5nLiBzZW5kIHRoZSBmaXJzdCBjaGFyYWN0ZXIsIHNldHVwIHRoZSBUSSBpbnQKKwlpbmMgdHhfcmluZ19vdXQJCTsgWysrdHhfcmluZ19vdXRdCisJbW92IGRwaCwgI0hJR0godHhfcmluZykKKwltb3YgZHBsLCB0eF9yaW5nX291dAorCW1vdnggYSwgQGRwdHIKKwltb3Ygc2J1ZiwgYQorCXNldGIgVFhfUlVOTklORworc3RhcnRfdHhfZG9uZToKKwk7OyBjYW4gd2UgdW50aHJvdHRsZSB0aGUgaG9zdCB0eCBwcm9jZXNzPworCTs7ICBzdGVwIDE6IGRvIHdlIGNhcmU/CisJbW92IGEsICMwCisJY2puZSBhLCB0eF91bnRocm90dGxlX3RocmVzaG9sZCwgc3RhcnRfdHhfX21heWJlX3VudGhyb3R0bGVfdHgKKwk7OyBub3BlCitzdGFydF90eF9yZWFsbHlfZG9uZToKKwlyZXQKK3N0YXJ0X3R4X19tYXliZV91bnRocm90dGxlX3R4OgorCTs7ICBzdGVwIDI6IGlzIHRoZXJlIG5vdyByb29tPworCW1vdiBhLCB0eF9yaW5nX291dAorCXNldGIgYworCXN1YmIgYSwgdHhfcmluZ19pbgorCTs7IGEgaXMgbm93IHdyaXRlX3Jvb20uIElmIHRocmVzaCA+PSBhLCB3ZSBjYW4gdW50aHJvdHRsZQorCWNsciBjCisJc3ViYiBhLCB0eF91bnRocm90dGxlX3RocmVzaG9sZAorCWpjIHN0YXJ0X3R4X3JlYWxseV9kb25lCTsgbm9wZQorCTs7IHllcywgd2UgY2FuIHVudGhyb3R0bGUuIHJlbW92ZSB0aGUgdGhyZXNob2xkIGFuZCBtYXJrIGEgcmVxdWVzdAorCW1vdiB0eF91bnRocm90dGxlX3RocmVzaG9sZCwgIzAKKwlzZXRiIERPX1RYX1VOVEhST1RUTEUKKwk7OyBwcm9kIHJ4LCB3aGljaCB3aWxsIGFjdHVhbGx5IHNlbmQgdGhlIG1lc3NhZ2Ugd2hlbiBpbjIgYmVjb21lcyBmcmVlCisJbGptcCBzdGFydF9pbgorCQorCitzZXJpYWxfaW50OgorCXB1c2ggZHBzCisJcHVzaCBkcGwKKwlwdXNoIGRwaAorCXB1c2ggZHBsMQorCXB1c2ggZHBoMQorCXB1c2ggYWNjCisJam5iIFRJLCBzZXJpYWxfaW50X19ub3RfdHgKKwk7OyB0eCBmaW5pc2hlZC4gc2VuZCBhbm90aGVyIGNoYXJhY3RlciBpZiB3ZSBoYXZlIG9uZQorCWNsciBUSQkJCTsgY2xlYXIgaW50CisJY2xyIFRYX1JVTk5JTkcKKwlsY2FsbCBzdGFydF90eAorc2VyaWFsX2ludF9fbm90X3R4OgorCWpuYiBSSSwgc2VyaWFsX2ludF9fbm90X3J4CisJbGNhbGwgZ2V0X3J4X2NoYXIKKwljbHIgUkkJCQk7IGNsZWFyIGludAorc2VyaWFsX2ludF9fbm90X3J4OgkKKwk7OyByZXR1cm4KKwlwb3AgYWNjCisJcG9wIGRwaDEKKwlwb3AgZHBsMQorCXBvcCBkcGgKKwlwb3AgZHBsCisJcG9wIGRwcworCXJldGkKKworZ2V0X3J4X2NoYXI6CisJbW92IGRwaCwgI0hJR0gocnhfcmluZykKKwltb3YgZHBsLCByeF9yaW5nX2luCisJaW5jIGRwbAkJCTsgdGFyZ2V0ID0gcnhfcmluZ19pbisxCisJbW92IGEsIHNidWYKKwltb3Z4IEBkcHRyLCBhCisJOzsgY2hlY2sgZm9yIG92ZXJmbG93IGJlZm9yZSBpbmNyZW1lbnRpbmcgcnhfcmluZ19pbgorCW1vdiBhLCBkcGwKKwljam5lIGEsIHJ4X3Jpbmdfb3V0LCBnZXRfcnhfY2hhcl9fbm9fb3ZlcmZsb3cKKwk7OyBzaWduYWwgb3ZlcmZsb3cKKwlyZXQKK2dldF9yeF9jaGFyX19ub19vdmVyZmxvdzoJCisJaW5jIHJ4X3JpbmdfaW4KKwk7OyBraWNrIG9mZiBVU0IgSU5waXBlCisJYWNhbGwgc3RhcnRfaW4KKwlyZXQKKworc3RhcnRfaW46CisJOzsgY2hlY2sgaWYgdGhlIGlucGlwZSBpcyBhbHJlYWR5IHJ1bm5pbmcuCisJbW92ICBhLCMweDEwCisJbW92IGRwdHIsIE9FQQorCW1vdnggQGRwdHIsYQorCisJbW92IGRwdHIsIElOMkNTCisJbW92eCBhLCBAZHB0cgorCWpiIGFjYy4xLCBzdGFydF9pbl9fZG9uZTsgaW50IHdpbGwgaGFuZGxlIGl0CisJamIgRE9fVFhfVU5USFJPVFRMRSwgc3RhcnRfaW5fX2RvX3R4X3VudGhyb3R0bGUKKwk7OyBzZWUgaWYgdGhlcmUgaXMgYW55IHdvcmsgdG8gZG8uIGEgc2VyaWFsIGludGVycnVwdCBtaWdodCBvY2N1cgorCTs7IGR1cmluZyB0aGlzIHNlcXVlbmNlPworCW1vdiBhLCByeF9yaW5nX2luCisJY2puZSBhLCByeF9yaW5nX291dCwgc3RhcnRfaW5fX2hhdmVfd29yaworCXJldAkJCTsgbm9wZQorc3RhcnRfaW5fX2hhdmVfd29yazoJCisJOzsgbm93IGNvcHkgYXMgbXVjaCBkYXRhIGFzIHBvc3NpYmxlIGludG8gdGhlIHBpcGUuIDYzIGJ5dGVzIG1heC4KKwljbHIgYQorCW1vdiBkcHMsIGEKKwltb3YgZHBoLCAjSElHSChyeF9yaW5nKQk7IGxvYWQgRFBUUjAgd2l0aCBzb3VyY2UKKwlpbmMgZHBzCisJbW92IGRwdHIsIElOMkJVRgk7IGxvYWQgRFBUUjEgd2l0aCB0YXJnZXQKKwltb3Z4IEBkcHRyLCBhCQk7IGluWzBdIHNpZ25hbHMgdGhhdCByZXN0IG9mIElOIGlzIHJ4IGRhdGEKKwlpbmMgZHB0cgorCWluYyBkcHMKKwk7OyBsb29wIHVudGlsIHdlIHJ1biBvdXQgb2YgZGF0YSwgb3Igd2UgaGF2ZSBjb3BpZWQgNjQgYnl0ZXMKKwltb3YgcjEsICMxCQk7IElOYnVmIHNpemUgY291bnRlcgorc3RhcnRfaW5fX2xvb3A6CisJbW92IGEsIHJ4X3JpbmdfaW4KKwljam5lIGEsIHJ4X3Jpbmdfb3V0LCBzdGFydF9pbmxvY2FsX2lycV9lbmFibGVsbF9jb3B5aW5nCisJc2ptcCBzdGFydF9pbl9fa2ljaworc3RhcnRfaW5sb2NhbF9pcnFfZW5hYmxlbGxfY29weWluZzoKKwlpbmMgcnhfcmluZ19vdXQKKwltb3YgZHBsLCByeF9yaW5nX291dAorCW1vdnggYSwgQGRwdHIKKwlpbmMgZHBzCisJbW92eCBAZHB0ciwgYQkJOyB3cml0ZSBpbnRvIElOIGJ1ZmZlcgorCWluYyBkcHRyCisJaW5jIGRwcworCWluYyByMQorCWNqbmUgcjEsICM2NCwgc3RhcnRfaW5fX2xvb3A7IGxvb3AKK3N0YXJ0X2luX19raWNrOgorCTs7IGVpdGhlciB3ZSByYW4gb3V0IG9mIGRhdGEsIG9yIHdlIGNvcGllZCA2NCBieXRlcy4gcjEgaGFzIGJ5dGUgY291bnQKKwk7OyBraWNrIG9mZiBJTgorCW1vdiBhLCAjMHgxMCAgICAgICAgICAgICA7IFR1cm4gdGhlIGdyZWVuIExFRAorICAgICAgICBtb3YgZHB0cixPRUEKKyAgICAgICAgbW92eCBAZHB0ciwgYQorCW1vdiBkcHRyLCBJTjJCQworCW1vdiBhLCByMQorCWp6IHN0YXJ0X2luX19kb25lCisJbW92eCBAZHB0ciwgYQorCTs7IGRvbmUKK3N0YXJ0X2luX19kb25lOgorCTthY2FsbCBkdW1wX3N0YXQKKwlyZXQKK3N0YXJ0X2luX19kb190eF91bnRocm90dGxlOgorCTs7IHNwZWNpYWwgc2VxdWVuY2U6IHNlbmQgYSB0eCB1bnRocm90dGxlIG1lc3NhZ2UKKwljbHIgRE9fVFhfVU5USFJPVFRMRQorCWNsciBhCisJbW92IGRwcywgYQorCW1vdiBkcHRyLCBJTjJCVUYKKwltb3YgYSwgIzEKKwltb3Z4IEBkcHRyLCBhCisJaW5jIGRwdHIKKwltb3YgYSwgIzIKKwltb3Z4IEBkcHRyLCBhCisJbW92IGRwdHIsIElOMkJDCisJbW92eCBAZHB0ciwgYQorCXJldAorCQorcHV0Y2hhcjoKKwljbHIgVEkKKwltb3YgU0JVRiwgYQorcHV0Y2hhcl93YWl0OgorCWpuYiBUSSwgcHV0Y2hhcl93YWl0CisJY2xyIFRJCisJcmV0CisKKwkKK2JhdWRfdGFibGU6CQkJOyBiYXVkX2hpZ2gsIHRoZW4gYmF1ZF9sb3cKKwk7OyBiYXVkWzBdOiAxMTAKKwkuYnl0ZSBCQVVEX0hJR0goMTEwKQorCS5ieXRlIEJBVURfTE9XKDExMCkKKwk7OyBiYXVkWzFdOiAzMDAKKwkuYnl0ZSBCQVVEX0hJR0goMzAwKQorCS5ieXRlIEJBVURfTE9XKDMwMCkKKwk7OyBiYXVkWzJdOiAxMjAwCisJLmJ5dGUgQkFVRF9ISUdIKDEyMDApCisJLmJ5dGUgQkFVRF9MT1coMTIwMCkKKwk7OyBiYXVkWzNdOiAyNDAwCisJLmJ5dGUgQkFVRF9ISUdIKDI0MDApCisJLmJ5dGUgQkFVRF9MT1coMjQwMCkKKwk7OyBiYXVkWzRdOiA0ODAwCisJLmJ5dGUgQkFVRF9ISUdIKDQ4MDApCisJLmJ5dGUgQkFVRF9MT1coNDgwMCkKKwk7OyBiYXVkWzVdOiA5NjAwCisJLmJ5dGUgQkFVRF9ISUdIKDk2MDApCisJLmJ5dGUgQkFVRF9MT1coOTYwMCkKKwk7OyBiYXVkWzZdOiAxOTIwMAorCS5ieXRlIEJBVURfSElHSCgxOTIwMCkKKwkuYnl0ZSBCQVVEX0xPVygxOTIwMCkKKwk7OyBiYXVkWzddOiAzODQwMAorCS5ieXRlIEJBVURfSElHSCgzODQwMCkKKwkuYnl0ZSBCQVVEX0xPVygzODQwMCkKKwk7OyBiYXVkWzhdOiA1NzYwMAorCS5ieXRlIEJBVURfSElHSCg1NzYwMCkKKwkuYnl0ZSBCQVVEX0xPVyg1NzYwMCkKKwk7OyBiYXVkWzldOiAxMTUyMDAKKwkuYnl0ZSBCQVVEX0hJR0goMTE1MjAwKQorCS5ieXRlIEJBVURfTE9XKDExNTIwMCkKKworZGVzY19kZXZpY2U6CisJLmJ5dGUgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHg0MAorCS5ieXRlIDB4Y2QsIDB4MDYsIDB4MDQsIDB4MDEsIDB4ODksIDB4YWIsIDEsIDIsIDMsIDB4MDEKKzs7OyBUaGUgInJlYWwiIGRldmljZSBpZCwgd2hpY2ggbXVzdCBtYXRjaCB0aGUgaG9zdCBkcml2ZXIsIGlzIHRoYXQKKzs7OyAiMHhjZCAweDA2IDB4MDQgMHgwMSIgc2VxdWVuY2UsIHdoaWNoIGlzIDB4MDZjZCwgMHgwMTA0CisJCitkZXNjX2NvbmZpZzE6CisJLmJ5dGUgMHgwOSwgMHgwMiwgMHgyMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMgorCS5ieXRlIDB4MDksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAKKwkuYnl0ZSAweDA3LCAweDA1LCAweDgyLCAweDAzLCAweDQwLCAweDAwLCAweDAxCisJLmJ5dGUgMHgwNywgMHgwNSwgMHgwMiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMAorCitkZXNjX3N0cmluZ3M6CisJLndvcmQgc3RyaW5nX2xhbmdpZHMsIHN0cmluZ19tZmcsIHN0cmluZ19wcm9kdWN0LCBzdHJpbmdfc2VyaWFsCitkZXNjX3N0cmluZ3NfZW5kOgorCitzdHJpbmdfbGFuZ2lkczoJLmJ5dGUgc3RyaW5nX2xhbmdpZHNfZW5kLXN0cmluZ19sYW5naWRzCisJLmJ5dGUgMworCS53b3JkIDAKK3N0cmluZ19sYW5naWRzX2VuZDoKKworCTs7IHNpZ2guIFRoZXNlIHN0cmluZ3MgYXJlIFVuaWNvZGUsIG1lYW5pbmcgVVRGMTY/IDIgYnl0ZXMgZWFjaC4gTm93CisJOzsgKnRoYXQqIGlzIGEgcGFpbiBpbiB0aGUgYXNzIHRvIGVuY29kZS4gQW5kIHRoZXkgYXJlIGxpdHRsZS1lbmRpYW4KKwk7OyB0b28uIFVzZSB0aGlzIHBlcmwgc25pcHBldCB0byBnZXQgdGhlIGJ5dGVjb2RlczoKKwkvKiB3aGlsZSAoPD4pIHsKKwkgICAgQGMgPSBzcGxpdCgvLyk7CisJICAgIGZvcmVhY2ggJGMgKEBjKSB7CisJICAgICBwcmludGYoIjB4JTAyeCwgMHgwMCwgIiwgb3JkKCRjKSk7CisJICAgIH0KKwkgICB9CisJKi8KKworc3RyaW5nX21mZzoJLmJ5dGUgc3RyaW5nX21mZ19lbmQtc3RyaW5nX21mZworCS5ieXRlIDMKKzsJLmJ5dGUgIkFDTUUgdXNiIHdpZGdldHMiCisJLmJ5dGUgMHg0MSwgMHgwMCwgMHg0MywgMHgwMCwgMHg0ZCwgMHgwMCwgMHg0NSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg3NSwgMHgwMCwgMHg3MywgMHgwMCwgMHg2MiwgMHgwMCwgMHgyMCwgMHgwMCwgMHg3NywgMHgwMCwgMHg2OSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2NywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3NCwgMHgwMCwgMHg3MywgMHgwMAorc3RyaW5nX21mZ19lbmQ6CisJCitzdHJpbmdfcHJvZHVjdDoJLmJ5dGUgc3RyaW5nX3Byb2R1Y3RfZW5kLXN0cmluZ19wcm9kdWN0CisJLmJ5dGUgMworOwkuYnl0ZSAiQUNNRSBVU0Igc2VyaWFsIHdpZGdldCIKKwkuYnl0ZSAweDQxLCAweDAwLCAweDQzLCAweDAwLCAweDRkLCAweDAwLCAweDQ1LCAweDAwLCAweDIwLCAweDAwLCAweDU1LCAweDAwLCAweDUzLCAweDAwLCAweDQyLCAweDAwLCAweDIwLCAweDAwLCAweDczLCAweDAwLCAweDY1LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDYxLCAweDAwLCAweDZjLCAweDAwLCAweDIwLCAweDAwLCAweDc3LCAweDAwLCAweDY5LCAweDAwLCAweDY0LCAweDAwLCAweDY3LCAweDAwLCAweDY1LCAweDAwLCAweDc0LCAweDAwCitzdHJpbmdfcHJvZHVjdF9lbmQ6CisJCitzdHJpbmdfc2VyaWFsOgkuYnl0ZSBzdHJpbmdfc2VyaWFsX2VuZC1zdHJpbmdfc2VyaWFsCisJLmJ5dGUgMworOwkuYnl0ZSAiNDciCisJLmJ5dGUgMHgzNCwgMHgwMCwgMHgzNywgMHgwMAorc3RyaW5nX3NlcmlhbF9lbmQ6CisJCQorOzs7IHJpbmcgYnVmZmVyIG1lbW9yeQorCTs7IHR4X3JpbmdfaW4rMSBpcyB3aGVyZSB0aGUgbmV4dCBpbnB1dCBieXRlIHdpbGwgZ28KKwk7OyBbdHhfcmluZ19vdXRdIGhhcyBiZWVuIHNlbnQKKwk7OyBpZiB0eF9yaW5nX2luID09IHR4X3Jpbmdfb3V0LCB0aGVyZXMgbm8gd29yayB0byBkbworCTs7IHRoZXJlIGFyZSAodHhfcmluZ19pbiAtIHR4X3Jpbmdfb3V0KSBjaGFycyB0byBiZSB3cml0dGVuCisJOzsgZG9udCBsZXQgX2luIGxhcCBfb3V0CisJOzsgICBjYW5ub3QgaW5jIGlmIHR4X3JpbmdfaW4rMSA9PSB0eF9yaW5nX291dAorCTs7ICB3cml0ZSBbdHhfcmluZ19pbisxXSB0aGVuIHR4X3JpbmdfaW4rKworCTs7ICAgaWYgKHR4X3JpbmdfaW4rMSA9PSB0eF9yaW5nX291dCksIG92ZXJmbG93CisJOzsgICBlbHNlIHR4X3JpbmdfaW4rKworCTs7ICByZWFkL3NlbmQgW3R4X3Jpbmdfb3V0KzFdLCB0aGVuIHR4X3Jpbmdfb3V0KysKKworCTs7IHJ4X3JpbmdfaW4gd29ya3MgdGhlIHNhbWUgd2F5CisJCisJLm9yZyAweDEwMDAKK3R4X3Jpbmc6CisJLnNraXAgMHgxMDAJCTsgMjU2IGJ5dGVzCityeF9yaW5nOgorCS5za2lwIDB4MTAwCQk7IDI1NiBieXRlcworCQorCQorCS5FTkQKKwkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC94aXJjb21fcGdzX2Z3LmggYi9kcml2ZXJzL3VzYi9zZXJpYWwveGlyY29tX3Bnc19mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZjc0YTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwveGlyY29tX3Bnc19mdy5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogVVNCIFhpcmNvbSBQR1MgRmlybXdhcmUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgQnJpYW4gV2FybmVyICAgICAgICA8d2FybmVyQGxvdGhhci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgQ3Jpc3RpYW4gTS4gQ3JhY2l1bmVzY3UJPGNyaXN0aUBkbnQucm8+CisgKgorICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEdlbmVyYXRlZCBmcm9tIHhpcmNvbV9wZ3MuUyBieSBlenVzYl9jb252ZXJ0X3gucGwKKyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGV6dXNiX2hleF9yZWNvcmQgeGlyY29tX3Bnc19maXJtd2FyZVtdID0geworeyAweDAwMDAsCTMsCXsweDAyLCAweDAyLCAweDAwfSB9LAoreyAweDAwMjMsCTQsCXsweDAyLCAweDA1LCAweDliLCAweDAwfSB9LAoreyAweDAwMzAsCTUsCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSB9LAoreyAweDAwNDMsCTQsCXsweDAyLCAweDAxLCAweDAwLCAweDAwfSB9LAoreyAweDAxMDAsCTE2LAl7MHgwMiwgMHgwMiwgMHhiYSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMH0gfSwKK3sgMHgwMTEwLAkxNiwJezB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDB9IH0sCit7IDB4MDEyMCwJMTYsCXsweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDA0LCAweDg1LCAweDAwLCAweDAyLCAweDA0LCAweGI5LCAweDAwfSB9LAoreyAweDAyMDAsCTE2LAl7MHg3NSwgMHg4MSwgMHg1ZSwgMHhlNCwgMHhmNSwgMHgzMiwgMHhmNSwgMHgzMywgMHhmNSwgMHgzMCwgMHhmNSwgMHgzMSwgMHhmNSwgMHgzNCwgMHhjMiwgMHgwMH0gfSwKK3sgMHgwMjEwLAkxNiwJezB4YzIsIDB4MDEsIDB4YTksIDB4MDAsIDB4NzQsIDB4ZmUsIDB4OTAsIDB4MTAsIDB4MDAsIDB4ZjAsIDB4YTMsIDB4ZDksIDB4ZmMsIDB4NzQsIDB4ZmQsIDB4OTB9IH0sCit7IDB4MDIyMCwJMTYsCXsweDExLCAweDAwLCAweGYwLCAweGEzLCAweGQ5LCAweGZjLCAweDkwLCAweDdmLCAweDk0LCAweDc0LCAweGJmLCAweGYwLCAweDkwLCAweDdmLCAweDk1LCAweDc0fSB9LAoreyAweDAyMzAsCTE2LAl7MHhlZiwgMHhmMCwgMHg3NCwgMHgxMCwgMHg5MCwgMHg3ZiwgMHg5ZSwgMHhmMCwgMHg3NCwgMHgwMCwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhmMCwgMHg3NCwgMHg0MH0gfSwKK3sgMHgwMjQwLAkxNiwJezB4OTAsIDB4N2YsIDB4OWQsIDB4ZjAsIDB4NzQsIDB4MDAsIDB4OTAsIDB4N2YsIDB4OTcsIDB4ZjAsIDB4NzQsIDB4ODIsIDB4OTAsIDB4N2YsIDB4OWUsIDB4ZjB9IH0sCit7IDB4MDI1MCwJMTYsCXsweDkwLCAweDdmLCAweDk1LCAweDc0LCAweDAzLCAweGYwLCAweDkwLCAweDdmLCAweGFmLCAweGUwLCAweGQyLCAweGUwLCAweGYwLCAweDc0LCAweDAxLCAweDkwfSB9LAoreyAweDAyNjAsCTE2LAl7MHg3ZiwgMHhhYiwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZSwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhYywgMHg3NCwgMHgwNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhhZH0gfSwKK3sgMHgwMjcwLAkxNiwJezB4NzQsIDB4MDQsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YzksIDB4ZjAsIDB4NzQsIDB4MDcsIDB4OTAsIDB4N2YsIDB4YWYsIDB4ZjAsIDB4NzQsIDB4MjAsIDB4OTB9IH0sCit7IDB4MDI4MCwJMTYsCXsweDdmLCAweDljLCAweGYwLCAweDc0LCAweDgwLCAweDkwLCAweDdmLCAweDk4LCAweGYwLCAweDc0LCAweDUzLCAweGY1LCAweDk4LCAweDc1LCAweGM4LCAweDMwfSB9LAoreyAweDAyOTAsCTE2LAl7MHg3YiwgMHgwNSwgMHg5MSwgMHg0NCwgMHhkMiwgMHhjYSwgMHg3NSwgMHg5OCwgMHg1MCwgMHhkMiwgMHhlOCwgMHhkMiwgMHhhZiwgMHhkMiwgMHhhYywgMHg3NH0gfSwKK3sgMHgwMmEwLAkxNiwJezB4MDAsIDB4ZjUsIDB4ODYsIDB4OTAsIDB4N2YsIDB4ZDYsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4NzksIDB4MmUsIDB4N2EsIDB4MDAsIDB4N2IsIDB4MDAsIDB4ZGJ9IH0sCit7IDB4MDJiMCwJMTYsCXsweGZlLCAweGRhLCAweGZhLCAweGQ5LCAweGY2LCAweDc0LCAweDA2LCAweGYwLCAweDgwLCAweGZlLCAweGMwLCAweDg2LCAweGMwLCAweDgyLCAweGMwLCAweDgzfSB9LAoreyAweDAyYzAsCTE2LAl7MHhjMCwgMHg4NCwgMHhjMCwgMHg4NSwgMHhjMCwgMHhlMCwgMHhlNSwgMHg5MSwgMHhjMiwgMHhlNCwgMHhmNSwgMHg5MSwgMHg5MCwgMHg3ZiwgMHhhYiwgMHg3NH0gfSwKK3sgMHgwMmQwLAkxNiwJezB4MDEsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZTgsIDB4ZTAsIDB4ZjksIDB4YTMsIDB4ZTAsIDB4ZmEsIDB4YTMsIDB4ZTAsIDB4ZmIsIDB4YTMsIDB4ZTAsIDB4ZmN9IH0sCit7IDB4MDJlMCwJMTYsCXsweGU5LCAweDU0LCAweDYwLCAweGI0LCAweDAwLCAweDAzLCAweDAyLCAweDAzLCAweDVkLCAweGI0LCAweDQwLCAweDZlLCAweGJhLCAweDAwLCAweDBiLCAweDEyfSB9LAoreyAweDAyZjAsCTE2LAl7MHgwNCwgMHg0NCwgMHg0MCwgMHgwMywgMHgwMiwgMHgwNCwgMHgyNiwgMHgwMiwgMHgwNCwgMHgyZSwgMHhiYSwgMHgwMSwgMHgwMywgMHgwMiwgMHgwNCwgMHgyZX0gfSwKK3sgMHgwMzAwLAkxNiwJezB4YmEsIDB4MDIsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MmUsIDB4YmEsIDB4MDMsIDB4MDMsIDB4MDIsIDB4MDQsIDB4NjgsIDB4YmEsIDB4MDQsIDB4MWUsIDB4YmJ9IH0sCit7IDB4MDMxMCwJMTYsCXsweDAwLCAweDBhLCAweDkwLCAweDdmLCAweDk1LCAweGUwLCAweDQ0LCAweDAyLCAweGYwLCAweDAyLCAweDA0LCAweDI2LCAweDkwLCAweDdmLCAweDk4LCAweGUwfSB9LAoreyAweDAzMjAsCTE2LAl7MHg1NCwgMHhmZCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHg5NSwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHgwMiwgMHgwNCwgMHgyNiwgMHhiYSwgMHgwNSwgMHgwM30gfSwKK3sgMHgwMzMwLAkxNiwJezB4MDIsIDB4MDQsIDB4MmUsIDB4YmEsIDB4MDYsIDB4MTksIDB4YmIsIDB4MDAsIDB4MDgsIDB4ZTUsIDB4MzMsIDB4ZDMsIDB4OTUsIDB4MzIsIDB4MDIsIDB4MDR9IH0sCit7IDB4MDM0MCwJMTYsCXsweDAyLCAweGJiLCAweDAxLCAweDA4LCAweGU1LCAweDMyLCAweGMzLCAweDk1LCAweDMzLCAweDAyLCAweDA0LCAweDAyLCAweDAyLCAweDA0LCAweDJlLCAweGJhfSB9LAoreyAweDAzNTAsCTE2LAl7MHgwNywgMHgwNSwgMHg4YiwgMHgzNCwgMHgwMiwgMHgwNCwgMHgyNiwgMHgwMiwgMHgwNCwgMHgyZSwgMHgwMiwgMHgwNCwgMHgyZSwgMHhiYSwgMHgwMCwgMHgyMH0gfSwKK3sgMHgwMzYwLAkxNiwJezB4YjksIDB4ODAsIDB4MTAsIDB4OTAsIDB4N2YsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4YTMsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjUsIDB4NzQsIDB4MDIsIDB4ZjB9IH0sCit7IDB4MDM3MCwJMTYsCXsweDAyLCAweDA0LCAweDI2LCAweGI5LCAweDgyLCAweDAyLCAweDgwLCAweGViLCAweGI5LCAweDgxLCAweDAyLCAweDgwLCAweGU2LCAweDAyLCAweDA0LCAweDJlfSB9LAoreyAweDAzODAsCTE2LAl7MHhiYSwgMHgwMSwgMHgwZiwgMHhiYiwgMHgwMCwgMHgwMywgMHgwMiwgMHgwNCwgMHgyZSwgMHhiYiwgMHgwMSwgMHgwMywgMHgwMiwgMHgwNCwgMHgyNiwgMHgwMn0gfSwKK3sgMHgwMzkwLAkxNiwJezB4MDQsIDB4MmUsIDB4YmEsIDB4MDMsIDB4MGYsIDB4YmIsIDB4MDAsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MmUsIDB4YmIsIDB4MDEsIDB4MDMsIDB4MDIsIDB4MDR9IH0sCit7IDB4MDNhMCwJMTYsCXsweDI2LCAweDAyLCAweDA0LCAweDJlLCAweGJhLCAweDA2LCAweDU2LCAweGJjLCAweDAxLCAweDBmLCAweDkwLCAweDdmLCAweGQ0LCAweDc0LCAweDA2LCAweGYwfSB9LAoreyAweDAzYjAsCTE2LAl7MHg5MCwgMHg3ZiwgMHhkNSwgMHg3NCwgMHg1YSwgMHhmMCwgMHgwMiwgMHgwNCwgMHgyNiwgMHhiYywgMHgwMiwgMHgxMiwgMHhiYiwgMHgwMCwgMHg2ZiwgMHg5MH0gfSwKK3sgMHgwM2MwLAkxNiwJezB4N2YsIDB4ZDQsIDB4NzQsIDB4MDYsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4NzQsIDB4NmMsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MjYsIDB4YmMsIDB4MDN9IH0sCit7IDB4MDNkMCwJMTYsCXsweDI5LCAweDc0LCAweDA0LCAweGMzLCAweDliLCAweDQwLCAweDU3LCAweDYwLCAweDU1LCAweGViLCAweDJiLCAweDkwLCAweDA2LCAweDhjLCAweDI1LCAweDgyfSB9LAoreyAweDAzZTAsCTE2LAl7MHhmNSwgMHg4MiwgMHg3NCwgMHgwMCwgMHgzNSwgMHg4MywgMHhmNSwgMHg4MywgMHhlMCwgMHhmOSwgMHhhMywgMHhlMCwgMHhmYSwgMHg5MCwgMHg3ZiwgMHhkNH0gfSwKK3sgMHgwM2YwLAkxNiwJezB4ZTksIDB4ZjAsIDB4OTAsIDB4N2YsIDB4ZDUsIDB4ZWEsIDB4ZjAsIDB4MDIsIDB4MDQsIDB4MjYsIDB4MDIsIDB4MDQsIDB4MmUsIDB4YmEsIDB4MDgsIDB4MGZ9IH0sCit7IDB4MDQwMCwJMTYsCXsweDc0LCAweDAxLCAweDkwLCAweDdmLCAweDAwLCAweGYwLCAweDc0LCAweDAxLCAweDkwLCAweDdmLCAweGI1LCAweGYwLCAweDAyLCAweDA0LCAweDI2LCAweGJhfSB9LAoreyAweDA0MTAsCTE2LAl7MHgwOSwgMHgwMywgMHgwMiwgMHgwNCwgMHgyNiwgMHhiYSwgMHgwYSwgMHgwNSwgMHg3NCwgMHgwMCwgMHgwMiwgMHgwNCwgMHgwMiwgMHhiYSwgMHgwYiwgMHgwM30gfSwKK3sgMHgwNDIwLAkxNiwJezB4MDIsIDB4MDQsIDB4MjYsIDB4MDIsIDB4MDQsIDB4MmUsIDB4OTAsIDB4N2YsIDB4YjQsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4ODAsIDB4MDksIDB4OTAsIDB4N2Z9IH0sCit7IDB4MDQzMCwJMTYsCXsweGI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDgwLCAweDAwLCAweGQwLCAweGUwLCAweGQwLCAweDg1LCAweGQwLCAweDg0LCAweGQwLCAweDgzLCAweGQwfSB9LAoreyAweDA0NDAsCTE2LAl7MHg4MiwgMHhkMCwgMHg4NiwgMHgzMiwgMHhlYiwgMHgyMCwgMHhlNywgMHgxZSwgMHhjMywgMHg5NCwgMHgwYSwgMHg1MCwgMHgxOSwgMHhlYiwgMHgyMywgMHgyNH0gfSwKK3sgMHgwNDUwLAkxNiwJezB4NDYsIDB4ZjUsIDB4ODIsIDB4NzQsIDB4MDYsIDB4MzQsIDB4MDAsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4Y2IsIDB4ZjUsIDB4Y2QsIDB4YTMsIDB4ZTB9IH0sCit7IDB4MDQ2MCwJMTYsCXsweGY1LCAweGNhLCAweGY1LCAweGNjLCAweGMzLCAweDIyLCAweGQzLCAweDIyLCAweGI5LCAweDQxLCAweDExLCAweGViLCAweDY0LCAweGZmLCAweDU0LCAweDgwfSB9LAoreyAweDA0NzAsCTE2LAl7MHhmYiwgMHg5MCwgMHg3ZiwgMHg5OCwgMHhlMCwgMHg1NCwgMHg3ZiwgMHg0YiwgMHhmMCwgMHgwMiwgMHgwNCwgMHgyNiwgMHg5MCwgMHg3ZiwgMHg5YiwgMHhlMH0gfSwKK3sgMHgwNDgwLAkxNiwJezB4NjQsIDB4ZmYsIDB4MDIsIDB4MDQsIDB4MDIsIDB4YzAsIDB4ODYsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODUsIDB4YzB9IH0sCit7IDB4MDQ5MCwJMTYsCXsweGUwLCAweGU1LCAweDkxLCAweGMyLCAweGU0LCAweGY1LCAweDkxLCAweDkwLCAweDdmLCAweGE5LCAweDc0LCAweDA0LCAweGYwLCAweDc0LCAweDIwLCAweDkwfSB9LAoreyAweDA0YTAsCTE2LAl7MHg3ZiwgMHg5YywgMHhmMCwgMHgxMiwgMHgwNSwgMHhkYywgMHg3NCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHhmMCwgMHhkMCwgMHhlMCwgMHhkMCwgMHg4NX0gfSwKK3sgMHgwNGIwLAkxNiwJezB4ZDAsIDB4ODQsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODYsIDB4MzIsIDB4YzAsIDB4ODYsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ODMsIDB4YzB9IH0sCit7IDB4MDRjMCwJMTYsCXsweDg0LCAweGMwLCAweDg1LCAweGMwLCAweGUwLCAweDc0LCAweDEwLCAweDkwLCAweDdmLCAweDljLCAweGYwLCAweGU1LCAweDkxLCAweGMyLCAweGU0LCAweGY1fSB9LAoreyAweDA0ZDAsCTE2LAl7MHg5MSwgMHg5MCwgMHg3ZiwgMHhhYSwgMHg3NCwgMHgwNCwgMHhmMCwgMHg5MCwgMHg3ZiwgMHhjOSwgMHhlMCwgMHhmOSwgMHhlNCwgMHhmNSwgMHg4NiwgMHg5MH0gfSwKK3sgMHgwNGUwLAkxNiwJezB4N2QsIDB4YzAsIDB4NzUsIDB4ODUsIDB4MTAsIDB4ODUsIDB4MzIsIDB4ODQsIDB4ZTAsIDB4MDUsIDB4ODYsIDB4MDUsIDB4ODQsIDB4ZjAsIDB4ZTUsIDB4ODR9IH0sCit7IDB4MDRmMCwJMTYsCXsweGI1LCAweDMzLCAweDAyLCAweDgwLCAweDA5LCAweDA1LCAweDMyLCAweDA1LCAweDg2LCAweGEzLCAweGQ5LCAweGVjLCAweDgwLCAweDAwLCAweDkwLCAweDdmfSB9LAoreyAweDA1MDAsCTE2LAl7MHhjOSwgMHhmMCwgMHhiMSwgMHg2ZCwgMHg3NCwgMHgyMCwgMHg5MCwgMHg3ZiwgMHg5YywgMHhmMCwgMHhkMCwgMHhlMCwgMHhkMCwgMHg4NSwgMHhkMCwgMHg4NH0gfSwKK3sgMHgwNTEwLAkxNiwJezB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODYsIDB4MzIsIDB4ZTQsIDB4ZjUsIDB4ODYsIDB4OTAsIDB4N2YsIDB4YmMsIDB4ZTAsIDB4MjAsIDB4ZTF9IH0sCit7IDB4MDUyMCwJMTYsCXsweDRiLCAweDkwLCAweDdkLCAweDAwLCAweGU1LCAweDMyLCAweGYwLCAweGEzLCAweGU1LCAweDMzLCAweGYwLCAweGEzLCAweGU1LCAweDMwLCAweGYwLCAweGEzfSB9LAoreyAweDA1MzAsCTE2LAl7MHhlNSwgMHgzMSwgMHhmMCwgMHhhMywgMHhlNCwgMHgzMCwgMHgwMCwgMHgwMSwgMHgwNCwgMHhmMCwgMHhhMywgMHgwNSwgMHg4NiwgMHg5MCwgMHgxMCwgMHgwMH0gfSwKK3sgMHgwNTQwLAkxNiwJezB4NzksIDB4MTAsIDB4ZTAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4ZjAsIDB4YTMsIDB4MDUsIDB4ODYsIDB4ZDksIDB4ZjYsIDB4MDUsIDB4ODYsIDB4NzQsIDB4ZmN9IH0sCit7IDB4MDU1MCwJMTYsCXsweGYwLCAweGEzLCAweDA1LCAweDg2LCAweDkwLCAweDExLCAweDAwLCAweDc5LCAweDEwLCAweGUwLCAweGEzLCAweDA1LCAweDg2LCAweGYwLCAweGEzLCAweDA1fSB9LAoreyAweDA1NjAsCTE2LAl7MHg4NiwgMHhkOSwgMHhmNiwgMHhlNCwgMHhmNSwgMHg4NiwgMHg5MCwgMHg3ZiwgMHhiZCwgMHg3NCwgMHgyNiwgMHhmMCwgMHgyMiwgMHgyMCwgMHgwMCwgMHgxM30gfSwKK3sgMHgwNTcwLAkxNiwJezB4ZTUsIDB4MzIsIDB4YjUsIDB4MzMsIDB4MDEsIDB4MjIsIDB4MDUsIDB4MzMsIDB4NzUsIDB4ODMsIDB4MTAsIDB4ODUsIDB4MzMsIDB4ODIsIDB4ZTAsIDB4ZjV9IH0sCit7IDB4MDU4MCwJMTYsCXsweDk5LCAweGQyLCAweDAwLCAweDc0LCAweDAwLCAweGI1LCAweDM0LCAweDAxLCAweDIyLCAweGU1LCAweDMzLCAweGQzLCAweDk1LCAweDMyLCAweGMzLCAweDk1fSB9LAoreyAweDA1OTAsCTE2LAl7MHgzNCwgMHg0MCwgMHhmNSwgMHg3NSwgMHgzNCwgMHgwMCwgMHhkMiwgMHgwMSwgMHgwMiwgMHgwNSwgMHhkYywgMHhjMCwgMHg4NiwgMHhjMCwgMHg4MiwgMHhjMH0gfSwKK3sgMHgwNWEwLAkxNiwJezB4ODMsIDB4YzAsIDB4ODQsIDB4YzAsIDB4ODUsIDB4YzAsIDB4ZTAsIDB4MzAsIDB4OTksIDB4MDcsIDB4YzIsIDB4OTksIDB4YzIsIDB4MDAsIDB4MTIsIDB4MDV9IH0sCit7IDB4MDViMCwJMTYsCXsweDcwLCAweDMwLCAweDk4LCAweDA1LCAweDEyLCAweDA1LCAweGM2LCAweGMyLCAweDk4LCAweGQwLCAweGUwLCAweGQwLCAweDg1LCAweGQwLCAweDg0LCAweGQwfSB9LAoreyAweDA1YzAsCTE2LAl7MHg4MywgMHhkMCwgMHg4MiwgMHhkMCwgMHg4NiwgMHgzMiwgMHg3NSwgMHg4MywgMHgxMSwgMHg4NSwgMHgzMCwgMHg4MiwgMHgwNSwgMHg4MiwgMHhlNSwgMHg5OX0gfSwKK3sgMHgwNWQwLAkxNiwJezB4ZjAsIDB4ZTUsIDB4ODIsIDB4YjUsIDB4MzEsIDB4MDEsIDB4MjIsIDB4MDUsIDB4MzAsIDB4YjEsIDB4ZGMsIDB4MjIsIDB4NzQsIDB4MTAsIDB4OTAsIDB4N2Z9IH0sCit7IDB4MDVlMCwJMTYsCXsweDljLCAweGYwLCAweDkwLCAweDdmLCAweGI4LCAweGUwLCAweDIwLCAweGUxLCAweDNlLCAweDIwLCAweDAxLCAweDNjLCAweGU1LCAweDMwLCAweGI1LCAweDMxfSB9LAoreyAweDA1ZjAsCTE2LAl7MHgwMSwgMHgyMiwgMHhlNCwgMHhmNSwgMHg4NiwgMHg3NSwgMHg4MywgMHgxMSwgMHgwNSwgMHg4NiwgMHg5MCwgMHg3ZSwgMHgwMCwgMHhmMCwgMHhhMywgMHgwNX0gfSwKK3sgMHgwNjAwLAkxNiwJezB4ODYsIDB4NzksIDB4MDEsIDB4ZTUsIDB4MzAsIDB4YjUsIDB4MzEsIDB4MDIsIDB4ODAsIDB4MTAsIDB4MDUsIDB4MzEsIDB4ODUsIDB4MzEsIDB4ODIsIDB4ZTB9IH0sCit7IDB4MDYxMCwJMTYsCXsweDA1LCAweDg2LCAweGYwLCAweGEzLCAweDA1LCAweDg2LCAweDA5LCAweGI5LCAweDQwLCAweGU5LCAweDc0LCAweDEwLCAweDkwLCAweDdmLCAweDljLCAweGYwfSB9LAoreyAweDA2MjAsCTE2LAl7MHg5MCwgMHg3ZiwgMHhiOSwgMHhlOSwgMHg2MCwgMHgwMSwgMHhmMCwgMHgyMiwgMHhjMiwgMHgwMSwgMHhlNCwgMHhmNSwgMHg4NiwgMHg5MCwgMHg3ZSwgMHgwMH0gfSwKK3sgMHgwNjMwLAkxNiwJezB4NzQsIDB4MDEsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4N2YsIDB4YjksIDB4ZjAsIDB4MjIsIDB4YzIsIDB4OTksIDB4ZjUsIDB4OTl9IH0sCit7IDB4MDY0MCwJMTYsCXsweDMwLCAweDk5LCAweGZkLCAweGMyLCAweDk5LCAweDIyLCAweGU1LCAweDVlLCAweGY2LCAweDNjLCAweGZkLCAweDhmLCAweGZlLCAweGM4LCAweGZmLCAweDY0fSB9LAoreyAweDA2NTAsCTE2LAl7MHhmZiwgMHhiMiwgMHhmZiwgMHhkOSwgMHhmZiwgMHhlZCwgMHhmZiwgMHhmMywgMHhmZiwgMHhmYSwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHhmZiwgMHhmZn0gfSwKK3sgMHgwNjYwLAkxNiwJezB4ZmYsIDB4NDAsIDB4Y2QsIDB4MDYsIDB4MDQsIDB4MDEsIDB4ODksIDB4YWIsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDEsIDB4MDksIDB4MDIsIDB4MjAsIDB4MDB9IH0sCit7IDB4MDY3MCwJMTYsCXsweDAxLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDA5LCAweDA0LCAweDAwLCAweDAwLCAweDAyLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDA3LCAweDA1fSB9LAoreyAweDA2ODAsCTE2LAl7MHg4MiwgMHgwMywgMHg0MCwgMHgwMCwgMHgwMSwgMHgwNywgMHgwNSwgMHgwMiwgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg5NCwgMHgwNiwgMHg5OH0gfSwKK3sgMHgwNjkwLAkxNiwJezB4MDYsIDB4YmEsIDB4MDYsIDB4ZTgsIDB4MDQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDMsIDB4NDEsIDB4MDAsIDB4NDMsIDB4MDAsIDB4NGQsIDB4MDB9IH0sCit7IDB4MDZhMCwJMTYsCXsweDQ1LCAweDAwLCAweDIwLCAweDAwLCAweDc1LCAweDAwLCAweDczLCAweDAwLCAweDYyLCAweDAwLCAweDIwLCAweDAwLCAweDc3LCAweDAwLCAweDY5LCAweDAwfSB9LAoreyAweDA2YjAsCTE2LAl7MHg2NCwgMHgwMCwgMHg2NywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3NCwgMHgwMCwgMHg3MywgMHgwMCwgMHgyZSwgMHgwMywgMHg0MSwgMHgwMCwgMHg0MywgMHgwMH0gfSwKK3sgMHgwNmMwLAkxNiwJezB4NGQsIDB4MDAsIDB4NDUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NTUsIDB4MDAsIDB4NTMsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NzMsIDB4MDB9IH0sCit7IDB4MDZkMCwJMTYsCXsweDY1LCAweDAwLCAweDcyLCAweDAwLCAweDY5LCAweDAwLCAweDYxLCAweDAwLCAweDZjLCAweDAwLCAweDIwLCAweDAwLCAweDc3LCAweDAwLCAweDY5LCAweDAwfSB9LAoreyAweDA2ZTAsCTE0LAl7MHg2NCwgMHgwMCwgMHg2NywgMHgwMCwgMHg2NSwgMHgwMCwgMHg3NCwgMHgwMCwgMHgwNiwgMHgwMywgMHgzNCwgMHgwMCwgMHgzNywgMHgwMH0gfSwKK3sgMHhmZmZmLAkwLAl7MHgwMH0gfQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWYxYzA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnCkBAIC0wLDAgKzEsMTEzIEBACisjCisjIFVTQiBTdG9yYWdlIGRyaXZlciBjb25maWd1cmF0aW9uCisjCisKK2NvbW1lbnQgIk5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKwlkZXBlbmRzIG9uIFVTQgorCitjb25maWcgVVNCX1NUT1JBR0UKKwl0cmlzdGF0ZSAiVVNCIE1hc3MgU3RvcmFnZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCCisJc2VsZWN0IFNDU0kKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgVVNCIG1hc3Mgc3RvcmFnZSBkZXZpY2VzIHRvIHlvdXIKKwkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFRoaXMgaXMgdGhlIGRyaXZlciB5b3UgbmVlZCBmb3IgVVNCCisJICBmbG9wcHkgZHJpdmVzLCBVU0IgaGFyZCBkaXNrcywgVVNCIHRhcGUgZHJpdmVzLCBVU0IgQ0QtUk9NcywKKwkgIFVTQiBmbGFzaCBkZXZpY2VzLCBhbmQgbWVtb3J5IHN0aWNrcywgYWxvbmcgd2l0aAorCSAgc2ltaWxhciBkZXZpY2VzLiBUaGlzIGRyaXZlciBtYXkgYWxzbyBiZSB1c2VkIGZvciBzb21lIGNhbWVyYXMKKwkgIGFuZCBjYXJkIHJlYWRlcnMuCisKKwkgIFRoaXMgb3B0aW9uICdzZWxlY3RzJyAodHVybnMgb24sIGVuYWJsZXMpICdTQ1NJJywgYnV0IHlvdQorCSAgcHJvYmFibHkgYWxzbyBuZWVkICdTQ1NJIGRldmljZSBzdXBwb3J0OiBTQ1NJIGRpc2sgc3VwcG9ydCcKKwkgIChCTEtfREVWX1NEKSBmb3IgbW9zdCBVU0Igc3RvcmFnZSBkZXZpY2VzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2Itc3RvcmFnZS4KKworY29uZmlnIFVTQl9TVE9SQUdFX0RFQlVHCisJYm9vbCAiVVNCIE1hc3MgU3RvcmFnZSB2ZXJib3NlIGRlYnVnIgorCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKKwloZWxwCisJICBTYXkgWSBoZXJlIGluIG9yZGVyIHRvIGhhdmUgdGhlIFVTQiBNYXNzIFN0b3JhZ2UgY29kZSBnZW5lcmF0ZQorCSAgdmVyYm9zZSBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisKK2NvbmZpZyBVU0JfU1RPUkFHRV9EQVRBRkFCCisJYm9vbCAiRGF0YWZhYiBDb21wYWN0IEZsYXNoIFJlYWRlciBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU3VwcG9ydCBmb3IgY2VydGFpbiBEYXRhZmFiIENvbXBhY3RGbGFzaCByZWFkZXJzLgorCSAgRGF0YWZhYiBoYXMgYSB3ZWIgcGFnZSBhdCA8aHR0cDovL3d3dy5kYXRhZmFidXNhLmNvbS8+LgorCitjb25maWcgVVNCX1NUT1JBR0VfRlJFRUNPTQorCWJvb2wgIkZyZWVjb20gVVNCL0FUQVBJIEJyaWRnZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKKwloZWxwCisJICBTdXBwb3J0IGZvciB0aGUgRnJlZWNvbSBVU0IgdG8gSURFL0FUQVBJIGFkYXB0b3IuCisJICBGcmVlY29tIGhhcyBhIHdlYiBwYWdlIGF0IDxodHRwOi8vd3d3LmZyZWVjb20uZGUvPi4KKworY29uZmlnIFVTQl9TVE9SQUdFX0lTRDIwMAorCWJvb2wgIklTRC0yMDAgVVNCL0FUQSBCcmlkZ2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFICYmIEJMS19ERVZfSURFCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgVVNCIE1hc3MgU3RvcmUgZGV2aWNlcyBiYXNlZAorCSAgb24gdGhlIEluLVN5c3RlbXMgRGVzaWduIElTRC0yMDAgVVNCL0FUQSBicmlkZ2UuCisKKwkgIFNvbWUgb2YgdGhlIHByb2R1Y3RzIHRoYXQgdXNlIHRoaXMgY2hpcCBhcmU6CisKKwkgIC0gQXJjaG9zIEp1a2Vib3ggNjAwMAorCSAgLSBJU0QgU21hcnRDYWJsZSBmb3IgU3RvcmFnZQorCSAgLSBUYWl3YW4gU2t5bWFzdGVyIENENTMwVS9ERUwtMDI0MSBJREUgYnJpZGdlCisJICAtIFNvbnkgQ1JYMTBVIENELVIvUlcgZHJpdmUKKwkgIC0gQ3lRJ3ZlIENRODA2MEEgQ0RSVyBkcml2ZQorCSAgLSBQbGFuZXggZVh0cmVtZSBEcml2ZSBSWC0yNUhVIFVTQi1JREUgY2FibGUgKG5vdCBtb2RlbCBSWC0yNVUpCisKK2NvbmZpZyBVU0JfU1RPUkFHRV9EUENNCisJYm9vbCAiTWljcm90ZWNoL1ppTyEgQ29tcGFjdEZsYXNoL1NtYXJ0TWVkaWEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBNaWNyb3RlY2gvWmlPISBDb21wYWN0Rmxhc2ggcmVhZGVyLgorCSAgVGhlcmUgaXMgYSB3ZWIgcGFnZSBhdCA8aHR0cDovL3d3dy56aW9jb3JwLmNvbS9wcm9kdWN0cy8+LgorCitjb25maWcgVVNCX1NUT1JBR0VfVVNCQVQKKwlib29sICJVU0JBVC9VU0JBVDAyLWJhc2VkIHN0b3JhZ2Ugc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCBzdG9yYWdlIGRldmljZXMKKwkgIGJhc2VkIG9uIHRoZSBTQ00vU2h1dHRsZSBVU0JBVC9VU0JBVDAyIHByb2Nlc3NvcnMuCisKKwkgIERldmljZXMgcmVwb3J0ZWQgdG8gd29yayB3aXRoIHRoaXMgZHJpdmVyIGluY2x1ZGU6CisJICAtIENvbXBhY3RGbGFzaCByZWFkZXIgaW5jbHVkZWQgd2l0aCBLb2RhayBEQzM4MDAgY2FtZXJhCisJICAtIERhbmUtRWxlYyBabWF0ZSBDb21wYWN0Rmxhc2ggcmVhZGVyCisJICAtIERlbGtpbiBFZmlsbSByZWFkZXIyCisJICAtIEhQIDgyMDBlLzgyMTBlLzgyMzBlIENELVdyaXRlciBQbHVzIGRyaXZlcworCSAgLSBJLUpBTSBKUy01MFUKKwkgIC0gSmVzc29wcyBDb21wYWN0Rmxhc2ggSkVTRENGUlUgQkxBQ0sKKwkgIC0gS2luZ3N0b24gVGVjaG5vbG9neSBQQ1JFQUQtVVNCL0NGCisJICAtIE1heGVsbCBVQTQgQ29tcGFjdEZsYXNoIHJlYWRlcgorCSAgLSBNZW1vcmV4IFVDRi0xMDAKKwkgIC0gTWljcm90ZWNoIFppTyEgSUNTLTQ1IENGMgorCSAgLSBSQ0EgTFlSQSBNUDMgcG9ydGFibGUKKwkgIC0gU2FuZGlzayBJbWFnZU1hdGUgU0REUi0wNWIKKworY29uZmlnIFVTQl9TVE9SQUdFX1NERFIwOQorCWJvb2wgIlNhbkRpc2sgU0REUi0wOSAoYW5kIG90aGVyIFNtYXJ0TWVkaWEpIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRSAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIFNhbmRpc2sgU0REUi0wOQorCSAgU21hcnRNZWRpYSByZWFkZXIgaW4gdGhlIFVTQiBNYXNzIFN0b3JhZ2UgZHJpdmVyLgorCSAgQWxzbyB3b3JrcyBmb3IgdGhlIE1pY3JvdGVjaCBaaW8hIFNtYXJ0TWVkaWEgcmVhZGVyLgorCitjb25maWcgVVNCX1NUT1JBR0VfU0REUjU1CisJYm9vbCAiU2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgU2FuZGlzayBTRERSLTU1CisJICBTbWFydE1lZGlhIHJlYWRlciBpbiB0aGUgVVNCIE1hc3MgU3RvcmFnZSBkcml2ZXIuCisKK2NvbmZpZyBVU0JfU1RPUkFHRV9KVU1QU0hPVAorCWJvb2wgIkxleGFyIEp1bXBzaG90IENvbXBhY3QgRmxhc2ggUmVhZGVyIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBMZXhhciBKdW1wc2hvdAorCSAgVVNCIENvbXBhY3RGbGFzaCByZWFkZXIuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NjUyY2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlCkBAIC0wLDAgKzEsMjMgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBVU0IgTWFzcyBTdG9yYWdlIGRldmljZSBkcml2ZXJzLgorIworIyAxNSBBdWcgMjAwMCwgQ2hyaXN0b3BoIEhlbGx3aWcgPGhjaEBpbmZyYWRlYWQub3JnPgorIyBSZXdyaXR0ZW4gdG8gdXNlIGxpc3RzIGluc3RlYWQgb2YgaWYtc3RhdGVtZW50cy4KKyMKKworRVhUUkFfQ0ZMQUdTCTo9IC1JZHJpdmVycy9zY3NpCisKK29iai0kKENPTkZJR19VU0JfU1RPUkFHRSkJKz0gdXNiLXN0b3JhZ2UubworCit1c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcpCSs9IGRlYnVnLm8KK3VzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCkJKz0gc2h1dHRsZV91c2JhdC5vCit1c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5KQkrPSBzZGRyMDkubwordXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSkJKz0gc2RkcjU1Lm8KK3VzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NKQkrPSBmcmVlY29tLm8KK3VzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9EUENNKQkrPSBkcGNtLm8KK3VzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDApCSs9IGlzZDIwMC5vCit1c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQikJKz0gZGF0YWZhYi5vCit1c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QpCSs9IGp1bXBzaG90Lm8KKwordXNiLXN0b3JhZ2Utb2JqcyA6PQlzY3NpZ2x1ZS5vIHByb3RvY29sLm8gdHJhbnNwb3J0Lm8gdXNiLm8gXAorCQkJaW5pdGlhbGl6ZXJzLm8gJCh1c2Itc3RvcmFnZS1vYmoteSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRlM2U2YzdlYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5jCkBAIC0wLDAgKzEsNjY5IEBACisvKiBEcml2ZXIgZm9yIERhdGFmYWIgVVNCIENvbXBhY3QgRmxhc2ggcmVhZGVyCisgKgorICogJElkOiBkYXRhZmFiLmMsdiAxLjcgMjAwMi8wMi8yNSAwMDo0MDoxMyBtZGhhcm0gRXhwICQKKyAqCisgKiBkYXRhZmFiIGRyaXZlciB2MC4xOgorICoKKyAqIEZpcnN0IHJlbGVhc2UKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDIwMDAgSmltbWllIE1heWZpZWxkIChtYXlmaWVsZCtkYXRhZmFiQHNhY2toZWFkcy5vcmcpCisgKgorICogICBNYW55IHRoYW5rcyB0byBSb2JlcnQgQmFydWNoIGZvciB0aGUgU2FuRGlzayBTbWFydE1lZGlhIHJlYWRlciBkcml2ZXIKKyAqICAgd2hpY2ggSSB1c2VkIGFzIGEgdGVtcGxhdGUgZm9yIHRoaXMgZHJpdmVyLgorICoKKyAqICAgU29tZSBidWdmaXhlcyBhbmQgc2NhdHRlci1nYXRoZXIgY29kZSBieSBHcmVnb3J5IFAuIFNtaXRoIAorICogICAoZ3JlZy11c2JAZWxlY3RyaWNyYWluLmNvbSkKKyAqCisgKiAgIEZpeCBmb3IgbWVkaWEgY2hhbmdlIGJ5IEpvZXJnIFNjaG5laWRlciAoanNAam9lcmdzY2huZWlkZXIuY29tKQorICoKKyAqIE90aGVyIGNvbnRyaWJ1dG9yczoKKyAqICAgKGMpIDIwMDIgQWxhbiBTdGVybiA8c3Rlcm5Acm93bGFuZC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyoKKyAqIFRoaXMgZHJpdmVyIGF0dGVtcHRzIHRvIHN1cHBvcnQgVVNCIENvbXBhY3RGbGFzaCByZWFkZXIvd3JpdGVyIGRldmljZXMKKyAqIGJhc2VkIG9uIERhdGFmYWIgVVNCLXRvLUFUQSBjaGlwcy4gIEl0IHdhcyBzcGVjaWZpY2FsbHkgZGV2ZWxvcGVkIGZvciB0aGUgCisgKiBEYXRhZmFiIE1EQ0ZFLUIgVVNCIENvbXBhY3RGbGFzaCByZWFkZXIgYnV0IGhhcyBzaW5jZSBiZWVuIGZvdW5kIHRvIHdvcmsgCisgKiB3aXRoIGEgdmFyaWV0eSBvZiBEYXRhZmFiLWJhc2VkIGRldmljZXMgZnJvbSBhIG51bWJlciBvZiBtYW51ZmFjdHVyZXJzLgorICogSSd2ZSByZWNlaXZlZCBhIHJlcG9ydCBvZiB0aGlzIGRyaXZlciB3b3JraW5nIHdpdGggYSBEYXRhZmFiLWJhc2VkCisgKiBTbWFydE1lZGlhIGRldmljZSB0aG91Z2ggcGxlYXNlIGJlIGF3YXJlIHRoYXQgSSdtIHBlcnNvbmFsbHkgdW5hYmxlIHRvCisgKiB0ZXN0IFNtYXJ0TWVkaWEgc3VwcG9ydC4KKyAqCisgKiBUaGlzIGRyaXZlciBzdXBwb3J0cyByZWFkaW5nIGFuZCB3cml0aW5nLiAgSWYgeW91J3JlIHRydWx5IHBhcmFub2lkLAorICogaG93ZXZlciwgeW91IGNhbiBmb3JjZSB0aGUgZHJpdmVyIGludG8gYSB3cml0ZS1wcm90ZWN0ZWQgc3RhdGUgYnkgc2V0dGluZworICogdGhlIFdQIGVuYWJsZSBiaXRzIGluIGRhdGFmYWJfaGFuZGxlX21vZGVfc2Vuc2UoKS4gIFNlZSB0aGUgY29tbWVudHMKKyAqIGluIHRoYXQgcm91dGluZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisKKyNpbmNsdWRlICJ1c2IuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAiZGF0YWZhYi5oIgorCitzdGF0aWMgaW50IGRhdGFmYWJfZGV0ZXJtaW5lX2x1bihzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJIHN0cnVjdCBkYXRhZmFiX2luZm8gKmluZm8pOworCisKK3N0YXRpYyBpbmxpbmUgaW50CitkYXRhZmFiX2J1bGtfcmVhZChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pIHsKKwlpZiAobGVuID09IDApCisJCXJldHVybiBVU0JfU1RPUl9YRkVSX0dPT0Q7CisKKwlVU19ERUJVR1AoImRhdGFmYWJfYnVsa19yZWFkOiAgbGVuID0gJWRcbiIsIGxlbik7CisJcmV0dXJuIHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+cmVjdl9idWxrX3BpcGUsCisJCQlkYXRhLCBsZW4sIE5VTEwpOworfQorCisKK3N0YXRpYyBpbmxpbmUgaW50CitkYXRhZmFiX2J1bGtfd3JpdGUoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKSB7CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9HT09EOworCisJVVNfREVCVUdQKCJkYXRhZmFiX2J1bGtfd3JpdGU6ICBsZW4gPSAlZFxuIiwgbGVuKTsKKwlyZXR1cm4gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5zZW5kX2J1bGtfcGlwZSwKKwkJCWRhdGEsIGxlbiwgTlVMTCk7Cit9CisKKworc3RhdGljIGludCBkYXRhZmFiX3JlYWRfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkgICAgIHN0cnVjdCBkYXRhZmFiX2luZm8gKmluZm8sCisJCQkgICAgIHUzMiBzZWN0b3IsCisJCQkgICAgIHUzMiBzZWN0b3JzKQoreworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgIHRoaXN0aW1lOworCXVuc2lnbmVkIGludCB0b3RhbGxlbiwgYWxsb2NsZW47CisJaW50IGxlbiwgcmVzdWx0OworCXVuc2lnbmVkIGludCBzZ19pZHggPSAwLCBzZ19vZmZzZXQgPSAwOworCisJLy8gd2UncmUgd29ya2luZyBpbiBMQkEgbW9kZS4gIGFjY29yZGluZyB0byB0aGUgQVRBIHNwZWMsIAorCS8vIHdlIGNhbiBzdXBwb3J0IHVwIHRvIDI4LWJpdCBhZGRyZXNzaW5nLiAgSSBkb24ndCBrbm93IGlmIERhdGFmYWIKKwkvLyBzdXBwb3J0cyBiZXlvbmQgMjQtYml0IGFkZHJlc3NpbmcuICBJdCdzIGtpbmQgb2YgaGFyZCB0byB0ZXN0IAorCS8vIHNpbmNlIGl0IHJlcXVpcmVzID4gOEdCIENGIGNhcmQuCisJLy8KKwlpZiAoc2VjdG9ycyA+IDB4MEZGRkZGRkYpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlpZiAoaW5mby0+bHVuID09IC0xKSB7CisJCXJlc3VsdCA9IGRhdGFmYWJfZGV0ZXJtaW5lX2x1bih1cywgaW5mbyk7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXRvdGFsbGVuID0gc2VjdG9ycyAqIGluZm8tPnNzaXplOworCisJLy8gU2luY2Ugd2UgZG9uJ3QgcmVhZCBtb3JlIHRoYW4gNjQgS0IgYXQgYSB0aW1lLCB3ZSBoYXZlIHRvIGNyZWF0ZQorCS8vIGEgYm91bmNlIGJ1ZmZlciBhbmQgbW92ZSB0aGUgZGF0YSBhIHBpZWNlIGF0IGEgdGltZSBiZXR3ZWVuIHRoZQorCS8vIGJvdW5jZSBidWZmZXIgYW5kIHRoZSBhY3R1YWwgdHJhbnNmZXIgYnVmZmVyLgorCisJYWxsb2NsZW4gPSBtaW4odG90YWxsZW4sIDY1NTM2dSk7CisJYnVmZmVyID0ga21hbGxvYyhhbGxvY2xlbiwgR0ZQX05PSU8pOworCWlmIChidWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCWRvIHsKKwkJLy8gbG9vcCwgbmV2ZXIgYWxsb2NhdGUgb3IgdHJhbnNmZXIgbW9yZSB0aGFuIDY0ayBhdCBvbmNlCisJCS8vIChtaW4oMTI4aywgMjU1KmluZm8tPnNzaXplKSBpcyB0aGUgcmVhbCBsaW1pdCkKKworCQlsZW4gPSBtaW4odG90YWxsZW4sIGFsbG9jbGVuKTsKKwkJdGhpc3RpbWUgPSAobGVuIC8gaW5mby0+c3NpemUpICYgMHhmZjsKKworCQljb21tYW5kWzBdID0gMDsKKwkJY29tbWFuZFsxXSA9IHRoaXN0aW1lOworCQljb21tYW5kWzJdID0gc2VjdG9yICYgMHhGRjsKKwkJY29tbWFuZFszXSA9IChzZWN0b3IgPj4gOCkgJiAweEZGOworCQljb21tYW5kWzRdID0gKHNlY3RvciA+PiAxNikgJiAweEZGOworCisJCWNvbW1hbmRbNV0gPSAweEUwICsgKGluZm8tPmx1biA8PCA0KTsKKwkJY29tbWFuZFs1XSB8PSAoc2VjdG9yID4+IDI0KSAmIDB4MEY7CisJCWNvbW1hbmRbNl0gPSAweDIwOworCQljb21tYW5kWzddID0gMHgwMTsKKworCQkvLyBzZW5kIHRoZSByZWFkIGNvbW1hbmQKKwkJcmVzdWx0ID0gZGF0YWZhYl9idWxrX3dyaXRlKHVzLCBjb21tYW5kLCA4KTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlnb3RvIGxlYXZlOworCisJCS8vIHJlYWQgdGhlIHJlc3VsdAorCQlyZXN1bHQgPSBkYXRhZmFiX2J1bGtfcmVhZCh1cywgYnVmZmVyLCBsZW4pOworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCWdvdG8gbGVhdmU7CisKKwkJLy8gU3RvcmUgdGhlIGRhdGEgaW4gdGhlIHRyYW5zZmVyIGJ1ZmZlcgorCQl1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYoYnVmZmVyLCBsZW4sIHVzLT5zcmIsCisJCQkJICZzZ19pZHgsICZzZ19vZmZzZXQsIFRPX1hGRVJfQlVGKTsKKworCQlzZWN0b3IgKz0gdGhpc3RpbWU7CisJCXRvdGFsbGVuIC09IGxlbjsKKwl9IHdoaWxlICh0b3RhbGxlbiA+IDApOworCisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisKKyBsZWF2ZToKKwlrZnJlZShidWZmZXIpOworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7Cit9CisKKworc3RhdGljIGludCBkYXRhZmFiX3dyaXRlX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJICAgICAgc3RydWN0IGRhdGFmYWJfaW5mbyAqaW5mbywKKwkJCSAgICAgIHUzMiBzZWN0b3IsCisJCQkgICAgICB1MzIgc2VjdG9ycykKK3sKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCXVuc2lnbmVkIGNoYXIgKnJlcGx5ID0gdXMtPmlvYnVmOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyIHRoaXN0aW1lOworCXVuc2lnbmVkIGludCB0b3RhbGxlbiwgYWxsb2NsZW47CisJaW50IGxlbiwgcmVzdWx0OworCXVuc2lnbmVkIGludCBzZ19pZHggPSAwLCBzZ19vZmZzZXQgPSAwOworCisJLy8gd2UncmUgd29ya2luZyBpbiBMQkEgbW9kZS4gIGFjY29yZGluZyB0byB0aGUgQVRBIHNwZWMsIAorCS8vIHdlIGNhbiBzdXBwb3J0IHVwIHRvIDI4LWJpdCBhZGRyZXNzaW5nLiAgSSBkb24ndCBrbm93IGlmIERhdGFmYWIKKwkvLyBzdXBwb3J0cyBiZXlvbmQgMjQtYml0IGFkZHJlc3NpbmcuICBJdCdzIGtpbmQgb2YgaGFyZCB0byB0ZXN0IAorCS8vIHNpbmNlIGl0IHJlcXVpcmVzID4gOEdCIENGIGNhcmQuCisJLy8KKwlpZiAoc2VjdG9ycyA+IDB4MEZGRkZGRkYpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlpZiAoaW5mby0+bHVuID09IC0xKSB7CisJCXJlc3VsdCA9IGRhdGFmYWJfZGV0ZXJtaW5lX2x1bih1cywgaW5mbyk7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXRvdGFsbGVuID0gc2VjdG9ycyAqIGluZm8tPnNzaXplOworCisJLy8gU2luY2Ugd2UgZG9uJ3Qgd3JpdGUgbW9yZSB0aGFuIDY0IEtCIGF0IGEgdGltZSwgd2UgaGF2ZSB0byBjcmVhdGUKKwkvLyBhIGJvdW5jZSBidWZmZXIgYW5kIG1vdmUgdGhlIGRhdGEgYSBwaWVjZSBhdCBhIHRpbWUgYmV0d2VlbiB0aGUKKwkvLyBib3VuY2UgYnVmZmVyIGFuZCB0aGUgYWN0dWFsIHRyYW5zZmVyIGJ1ZmZlci4KKworCWFsbG9jbGVuID0gbWluKHRvdGFsbGVuLCA2NTUzNnUpOworCWJ1ZmZlciA9IGttYWxsb2MoYWxsb2NsZW4sIEdGUF9OT0lPKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlkbyB7CisJCS8vIGxvb3AsIG5ldmVyIGFsbG9jYXRlIG9yIHRyYW5zZmVyIG1vcmUgdGhhbiA2NGsgYXQgb25jZQorCQkvLyAobWluKDEyOGssIDI1NSppbmZvLT5zc2l6ZSkgaXMgdGhlIHJlYWwgbGltaXQpCisKKwkJbGVuID0gbWluKHRvdGFsbGVuLCBhbGxvY2xlbik7CisJCXRoaXN0aW1lID0gKGxlbiAvIGluZm8tPnNzaXplKSAmIDB4ZmY7CisKKwkJLy8gR2V0IHRoZSBkYXRhIGZyb20gdGhlIHRyYW5zZmVyIGJ1ZmZlcgorCQl1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYoYnVmZmVyLCBsZW4sIHVzLT5zcmIsCisJCQkJJnNnX2lkeCwgJnNnX29mZnNldCwgRlJPTV9YRkVSX0JVRik7CisKKwkJY29tbWFuZFswXSA9IDA7CisJCWNvbW1hbmRbMV0gPSB0aGlzdGltZTsKKwkJY29tbWFuZFsyXSA9IHNlY3RvciAmIDB4RkY7CisJCWNvbW1hbmRbM10gPSAoc2VjdG9yID4+IDgpICYgMHhGRjsKKwkJY29tbWFuZFs0XSA9IChzZWN0b3IgPj4gMTYpICYgMHhGRjsKKworCQljb21tYW5kWzVdID0gMHhFMCArIChpbmZvLT5sdW4gPDwgNCk7CisJCWNvbW1hbmRbNV0gfD0gKHNlY3RvciA+PiAyNCkgJiAweDBGOworCQljb21tYW5kWzZdID0gMHgzMDsKKwkJY29tbWFuZFs3XSA9IDB4MDI7CisKKwkJLy8gc2VuZCB0aGUgY29tbWFuZAorCQlyZXN1bHQgPSBkYXRhZmFiX2J1bGtfd3JpdGUodXMsIGNvbW1hbmQsIDgpOworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCWdvdG8gbGVhdmU7CisKKwkJLy8gc2VuZCB0aGUgZGF0YQorCQlyZXN1bHQgPSBkYXRhZmFiX2J1bGtfd3JpdGUodXMsIGJ1ZmZlciwgbGVuKTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlnb3RvIGxlYXZlOworCisJCS8vIHJlYWQgdGhlIHJlc3VsdAorCQlyZXN1bHQgPSBkYXRhZmFiX2J1bGtfcmVhZCh1cywgcmVwbHksIDIpOworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCWdvdG8gbGVhdmU7CisKKwkJaWYgKHJlcGx5WzBdICE9IDB4NTAgJiYgcmVwbHlbMV0gIT0gMCkgeworCQkJVVNfREVCVUdQKCJkYXRhZmFiX3dyaXRlX2RhdGE6ICBHYWghICIKKwkJCQkgICJ3cml0ZSByZXR1cm4gY29kZTogJTAyeCAlMDJ4XG4iLAorCQkJCSAgcmVwbHlbMF0sIHJlcGx5WzFdKTsKKwkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJCWdvdG8gbGVhdmU7CisJCX0KKworCQlzZWN0b3IgKz0gdGhpc3RpbWU7CisJCXRvdGFsbGVuIC09IGxlbjsKKwl9IHdoaWxlICh0b3RhbGxlbiA+IDApOworCisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisKKyBsZWF2ZToKKwlrZnJlZShidWZmZXIpOworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7Cit9CisKKworc3RhdGljIGludCBkYXRhZmFiX2RldGVybWluZV9sdW4oc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJCSBzdHJ1Y3QgZGF0YWZhYl9pbmZvICppbmZvKQoreworCS8vIER1YWwtc2xvdCByZWFkZXJzIGNhbiBiZSB0aG91Z2h0IG9mIGFzIGR1YWwtTFVOIGRldmljZXMuCisJLy8gV2UgbmVlZCB0byBkZXRlcm1pbmUgd2hpY2ggY2FyZCBzbG90IGlzIGJlaW5nIHVzZWQuCisJLy8gV2UnbGwgc2VuZCBhbiBJREVOVElGWSBERVZJQ0UgY29tbWFuZCBhbmQgc2VlIHdoaWNoIExVTiByZXNwb25kcy4uLgorCS8vCisJLy8gVGhlcmUgbWlnaHQgYmUgYSBiZXR0ZXIgd2F5IG9mIGRvaW5nIHRoaXM/CisKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBzY29tbWFuZFs4XSA9IHsgMCwgMSwgMCwgMCwgMCwgMHhhMCwgMHhlYywgMSB9OworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgY2hhciAqYnVmOworCWludCBjb3VudCA9IDAsIHJjOworCisJaWYgKCF1cyB8fCAhaW5mbykKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCW1lbWNweShjb21tYW5kLCBzY29tbWFuZCwgOCk7CisJYnVmID0ga21hbGxvYyg1MTIsIEdGUF9OT0lPKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCVVTX0RFQlVHUCgiZGF0YWZhYl9kZXRlcm1pbmVfbHVuOiAgbG9jYXRpbmcuLi5cbiIpOworCisJLy8gd2UnbGwgdHJ5IDMgdGltZXMgYmVmb3JlIGdpdmluZyB1cC4uLgorCS8vCisJd2hpbGUgKGNvdW50KysgPCAzKSB7CisJCWNvbW1hbmRbNV0gPSAweGEwOworCisJCXJjID0gZGF0YWZhYl9idWxrX3dyaXRlKHVzLCBjb21tYW5kLCA4KTsKKwkJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQkJcmMgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCQlnb3RvIGxlYXZlOworCQl9CisKKwkJcmMgPSBkYXRhZmFiX2J1bGtfcmVhZCh1cywgYnVmLCA1MTIpOworCQlpZiAocmMgPT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCQlpbmZvLT5sdW4gPSAwOworCQkJcmMgPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwkJCWdvdG8gbGVhdmU7CisJCX0KKworCQljb21tYW5kWzVdID0gMHhiMDsKKworCQlyYyA9IGRhdGFmYWJfYnVsa193cml0ZSh1cywgY29tbWFuZCwgOCk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJCXJjID0gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQkJZ290byBsZWF2ZTsKKwkJfQorCisJCXJjID0gZGF0YWZhYl9idWxrX3JlYWQodXMsIGJ1ZiwgNTEyKTsKKwkJaWYgKHJjID09IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQkJaW5mby0+bHVuID0gMTsKKwkJCXJjID0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJCQlnb3RvIGxlYXZlOworCQl9CisKKwkJbXNsZWVwKDIwKTsKKwl9CisKKwlyYyA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworIGxlYXZlOgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGRhdGFmYWJfaWRfZGV2aWNlKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCSAgICAgc3RydWN0IGRhdGFmYWJfaW5mbyAqaW5mbykKK3sKKwkvLyB0aGlzIGlzIGEgdmFyaWF0aW9uIG9mIHRoZSBBVEEgIklERU5USUZZIERFVklDRSIgY29tbWFuZC4uLmFjY29yZGluZworCS8vIHRvIHRoZSBBVEEgc3BlYywgJ1NlY3RvciBDb3VudCcgaXNuJ3QgdXNlZCBidXQgdGhlIFdpbmRvd3MgZHJpdmVyCisJLy8gc2V0cyB0aGlzIGJpdCBzbyB3ZSBkbyB0b28uLi4KKwkvLworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHNjb21tYW5kWzhdID0geyAwLCAxLCAwLCAwLCAwLCAweGEwLCAweGVjLCAxIH07CisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBjaGFyICpyZXBseTsKKwlpbnQgcmM7CisKKwlpZiAoIXVzIHx8ICFpbmZvKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJaWYgKGluZm8tPmx1biA9PSAtMSkgeworCQlyYyA9IGRhdGFmYWJfZGV0ZXJtaW5lX2x1bih1cywgaW5mbyk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCXJldHVybiByYzsKKwl9CisKKwltZW1jcHkoY29tbWFuZCwgc2NvbW1hbmQsIDgpOworCXJlcGx5ID0ga21hbGxvYyg1MTIsIEdGUF9OT0lPKTsKKwlpZiAoIXJlcGx5KQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJY29tbWFuZFs1XSArPSAoaW5mby0+bHVuIDw8IDQpOworCisJcmMgPSBkYXRhZmFiX2J1bGtfd3JpdGUodXMsIGNvbW1hbmQsIDgpOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJcmMgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCWdvdG8gbGVhdmU7CisJfQorCisJLy8gd2UnbGwgZ28gYWhlYWQgYW5kIGV4dHJhY3QgdGhlIG1lZGlhIGNhcGFjaXR5IHdoaWxlIHdlJ3JlIGhlcmUuLi4KKwkvLworCXJjID0gZGF0YWZhYl9idWxrX3JlYWQodXMsIHJlcGx5LCA1MTIpOworCWlmIChyYyA9PSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJLy8gY2FwYWNpdHkgaXMgYXQgd29yZCBvZmZzZXQgNTctNTgKKwkJLy8KKwkJaW5mby0+c2VjdG9ycyA9ICgodTMyKShyZXBseVsxMTddKSA8PCAyNCkgfCAKKwkJCQkoKHUzMikocmVwbHlbMTE2XSkgPDwgMTYpIHwKKwkJCQkoKHUzMikocmVwbHlbMTE1XSkgPDwgIDgpIHwgCisJCQkJKCh1MzIpKHJlcGx5WzExNF0pICAgICAgKTsKKwkJcmMgPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwlyYyA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworIGxlYXZlOgorCWtmcmVlKHJlcGx5KTsKKwlyZXR1cm4gcmM7Cit9CisKKworc3RhdGljIGludCBkYXRhZmFiX2hhbmRsZV9tb2RlX3NlbnNlKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCQkgICAgIHN0cnVjdCBzY3NpX2NtbmQgKiBzcmIsIAorCQkJCSAgICAgaW50IHNlbnNlXzYpCit7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgcndfZXJyX3BhZ2VbMTJdID0geworCQkweDEsIDB4QSwgMHgyMSwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMAorCX07CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgY2FjaGVfcGFnZVsxMl0gPSB7CisJCTB4OCwgMHhBLCAweDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKKwl9OworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHJiYWNfcGFnZVsxMl0gPSB7CisJCTB4MUIsIDB4QSwgMCwgMHg4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAorCX07CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgdGltZXJfcGFnZVs4XSA9IHsKKwkJMHgxQywgMHg2LCAwLCAwLCAwLCAwCisJfTsKKwl1bnNpZ25lZCBjaGFyIHBjLCBwYWdlX2NvZGU7CisJdW5zaWduZWQgaW50IGkgPSAwOworCXN0cnVjdCBkYXRhZmFiX2luZm8gKmluZm8gPSAoc3RydWN0IGRhdGFmYWJfaW5mbyAqKSAodXMtPmV4dHJhKTsKKwl1bnNpZ25lZCBjaGFyICpwdHIgPSB1cy0+aW9idWY7CisKKwkvLyBtb3N0IG9mIHRoaXMgc3R1ZmYgaXMganVzdCBhIGhhY2sgdG8gZ2V0IHRoaW5ncyB3b3JraW5nLiAgdGhlCisJLy8gZGF0YWZhYiByZWFkZXIgZG9lc24ndCBwcmVzZW50IGEgU0NTSSBpbnRlcmZhY2Ugc28gd2UKKwkvLyBmdWRnZSB0aGUgU0NTSSBjb21tYW5kcy4uLgorCS8vCisKKwlwYyA9IHNyYi0+Y21uZFsyXSA+PiA2OworCXBhZ2VfY29kZSA9IHNyYi0+Y21uZFsyXSAmIDB4M0Y7CisKKwlzd2l0Y2ggKHBjKSB7CisJICAgY2FzZSAweDA6CisJCVVTX0RFQlVHUCgiZGF0YWZhYl9oYW5kbGVfbW9kZV9zZW5zZTogIEN1cnJlbnQgdmFsdWVzXG4iKTsKKwkJYnJlYWs7CisJICAgY2FzZSAweDE6CisJCVVTX0RFQlVHUCgiZGF0YWZhYl9oYW5kbGVfbW9kZV9zZW5zZTogIENoYW5nZWFibGUgdmFsdWVzXG4iKTsKKwkJYnJlYWs7CisJICAgY2FzZSAweDI6CisJCVVTX0RFQlVHUCgiZGF0YWZhYl9oYW5kbGVfbW9kZV9zZW5zZTogIERlZmF1bHQgdmFsdWVzXG4iKTsKKwkJYnJlYWs7CisJICAgY2FzZSAweDM6CisJCVVTX0RFQlVHUCgiZGF0YWZhYl9oYW5kbGVfbW9kZV9zZW5zZTogIFNhdmVzIHZhbHVlc1xuIik7CisJCWJyZWFrOworCX0KKworCW1lbXNldChwdHIsIDAsIDgpOworCWlmIChzZW5zZV82KSB7CisJCXB0clsyXSA9IDB4MDA7CQkvLyBXUCBlbmFibGU6IDB4ODAKKwkJaSA9IDQ7CisJfSBlbHNlIHsKKwkJcHRyWzNdID0gMHgwMDsJCS8vIFdQIGVuYWJsZTogMHg4MAorCQlpID0gODsKKwl9CisKKwlzd2l0Y2ggKHBhZ2VfY29kZSkgeworCSAgIGRlZmF1bHQ6CisJCS8vIHZlbmRvci1zcGVjaWZpYyBtb2RlCisJCWluZm8tPnNlbnNlX2tleSA9IDB4MDU7CisJCWluZm8tPnNlbnNlX2FzYyA9IDB4MjQ7CisJCWluZm8tPnNlbnNlX2FzY3EgPSAweDAwOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKworCSAgIGNhc2UgMHgxOgorCQltZW1jcHkocHRyICsgaSwgcndfZXJyX3BhZ2UsIHNpemVvZihyd19lcnJfcGFnZSkpOworCQlpICs9IHNpemVvZihyd19lcnJfcGFnZSk7CisJCWJyZWFrOworCisJICAgY2FzZSAweDg6CisJCW1lbWNweShwdHIgKyBpLCBjYWNoZV9wYWdlLCBzaXplb2YoY2FjaGVfcGFnZSkpOworCQlpICs9IHNpemVvZihjYWNoZV9wYWdlKTsKKwkJYnJlYWs7CisKKwkgICBjYXNlIDB4MUI6CisJCW1lbWNweShwdHIgKyBpLCByYmFjX3BhZ2UsIHNpemVvZihyYmFjX3BhZ2UpKTsKKwkJaSArPSBzaXplb2YocmJhY19wYWdlKTsKKwkJYnJlYWs7CisKKwkgICBjYXNlIDB4MUM6CisJCW1lbWNweShwdHIgKyBpLCB0aW1lcl9wYWdlLCBzaXplb2YodGltZXJfcGFnZSkpOworCQlpICs9IHNpemVvZih0aW1lcl9wYWdlKTsKKwkJYnJlYWs7CisKKwkgICBjYXNlIDB4M0Y6CQkvLyByZXRyaWV2ZSBhbGwgcGFnZXMKKwkJbWVtY3B5KHB0ciArIGksIHRpbWVyX3BhZ2UsIHNpemVvZih0aW1lcl9wYWdlKSk7CisJCWkgKz0gc2l6ZW9mKHRpbWVyX3BhZ2UpOworCQltZW1jcHkocHRyICsgaSwgcmJhY19wYWdlLCBzaXplb2YocmJhY19wYWdlKSk7CisJCWkgKz0gc2l6ZW9mKHJiYWNfcGFnZSk7CisJCW1lbWNweShwdHIgKyBpLCBjYWNoZV9wYWdlLCBzaXplb2YoY2FjaGVfcGFnZSkpOworCQlpICs9IHNpemVvZihjYWNoZV9wYWdlKTsKKwkJbWVtY3B5KHB0ciArIGksIHJ3X2Vycl9wYWdlLCBzaXplb2YocndfZXJyX3BhZ2UpKTsKKwkJaSArPSBzaXplb2YocndfZXJyX3BhZ2UpOworCQlicmVhazsKKwl9CisKKwlpZiAoc2Vuc2VfNikKKwkJcHRyWzBdID0gaSAtIDE7CisJZWxzZQorCQkoKF9fYmUxNiAqKSBwdHIpWzBdID0gY3B1X3RvX2JlMTYoaSAtIDIpOworCXVzYl9zdG9yX3NldF94ZmVyX2J1ZihwdHIsIGksIHNyYik7CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKK3N0YXRpYyB2b2lkIGRhdGFmYWJfaW5mb19kZXN0cnVjdG9yKHZvaWQgKmV4dHJhKQoreworCS8vIHRoaXMgcm91dGluZSBpcyBhIHBsYWNlaG9sZGVyLi4uCisJLy8gY3VycmVudGx5LCB3ZSBkb24ndCBhbGxvY2F0ZSBhbnkgZXh0cmEgbWVtb3J5IHNvIHdlJ3JlIG9rYXkKK30KKworCisvLyBUcmFuc3BvcnQgZm9yIHRoZSBEYXRhZmFiIE1EQ0ZFLUIKKy8vCitpbnQgZGF0YWZhYl90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqIHNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQoreworCXN0cnVjdCBkYXRhZmFiX2luZm8gKmluZm87CisJaW50IHJjOworCXVuc2lnbmVkIGxvbmcgYmxvY2ssIGJsb2NrczsKKwl1bnNpZ25lZCBjaGFyICpwdHIgPSB1cy0+aW9idWY7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5xdWlyeV9yZXBseVs4XSA9IHsKKwkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgxRiwgMHgwMCwgMHgwMCwgMHgwMAorCX07CisKKwlpZiAoIXVzLT5leHRyYSkgeworCQl1cy0+ZXh0cmEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGF0YWZhYl9pbmZvKSwgR0ZQX05PSU8pOworCQlpZiAoIXVzLT5leHRyYSkgeworCQkJVVNfREVCVUdQKCJkYXRhZmFiX3RyYW5zcG9ydDogIEdhaCEgIgorCQkJCSAgIkNhbid0IGFsbG9jYXRlIHN0b3JhZ2UgZm9yIERhdGFmYWIgaW5mbyBzdHJ1Y3QhXG4iKTsKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCX0KKwkJbWVtc2V0KHVzLT5leHRyYSwgMCwgc2l6ZW9mKHN0cnVjdCBkYXRhZmFiX2luZm8pKTsKKwkJdXMtPmV4dHJhX2Rlc3RydWN0b3IgPSBkYXRhZmFiX2luZm9fZGVzdHJ1Y3RvcjsKKyAgCQkoKHN0cnVjdCBkYXRhZmFiX2luZm8gKil1cy0+ZXh0cmEpLT5sdW4gPSAtMTsKKwl9CisKKwlpbmZvID0gKHN0cnVjdCBkYXRhZmFiX2luZm8gKikgKHVzLT5leHRyYSk7CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IElOUVVJUlkpIHsKKwkJVVNfREVCVUdQKCJkYXRhZmFiX3RyYW5zcG9ydDogIElOUVVJUlkuICBSZXR1cm5pbmcgYm9ndXMgcmVzcG9uc2UiKTsKKwkJbWVtY3B5KHB0ciwgaW5xdWlyeV9yZXBseSwgc2l6ZW9mKGlucXVpcnlfcmVwbHkpKTsKKwkJZmlsbF9pbnF1aXJ5X3Jlc3BvbnNlKHVzLCBwdHIsIDM2KTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVBRF9DQVBBQ0lUWSkgeworCQlpbmZvLT5zc2l6ZSA9IDB4MjAwOyAgLy8gaGFyZCBjb2RlZCA1MTIgYnl0ZSBzZWN0b3JzIGFzIHBlciBBVEEgc3BlYworCQlyYyA9IGRhdGFmYWJfaWRfZGV2aWNlKHVzLCBpbmZvKTsKKwkJaWYgKHJjICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQkJcmV0dXJuIHJjOworCisJCVVTX0RFQlVHUCgiZGF0YWZhYl90cmFuc3BvcnQ6ICBSRUFEX0NBUEFDSVRZOiAgJWxkIHNlY3RvcnMsICVsZCBieXRlcyBwZXIgc2VjdG9yXG4iLAorCQkJICBpbmZvLT5zZWN0b3JzLCBpbmZvLT5zc2l6ZSk7CisKKwkJLy8gYnVpbGQgdGhlIHJlcGx5CisJCS8vIHdlIG5lZWQgdGhlIGxhc3Qgc2VjdG9yLCBub3QgdGhlIG51bWJlciBvZiBzZWN0b3JzCisJCSgoX19iZTMyICopIHB0cilbMF0gPSBjcHVfdG9fYmUzMihpbmZvLT5zZWN0b3JzIC0gMSk7CisJCSgoX19iZTMyICopIHB0cilbMV0gPSBjcHVfdG9fYmUzMihpbmZvLT5zc2l6ZSk7CisJCXVzYl9zdG9yX3NldF94ZmVyX2J1ZihwdHIsIDgsIHNyYik7CisKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gTU9ERV9TRUxFQ1RfMTApIHsKKwkJVVNfREVCVUdQKCJkYXRhZmFiX3RyYW5zcG9ydDogIEdhaCEgTU9ERV9TRUxFQ1RfMTAuXG4iKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwkvLyBkb24ndCBib3RoZXIgaW1wbGVtZW50aW5nIFJFQURfNiBvciBXUklURV82LgorCS8vCisJaWYgKHNyYi0+Y21uZFswXSA9PSBSRUFEXzEwKSB7CisJCWJsb2NrID0gKCh1MzIpKHNyYi0+Y21uZFsyXSkgPDwgMjQpIHwgKCh1MzIpKHNyYi0+Y21uZFszXSkgPDwgMTYpIHwKKwkJCSgodTMyKShzcmItPmNtbmRbNF0pIDw8ICA4KSB8ICgodTMyKShzcmItPmNtbmRbNV0pKTsKKworCQlibG9ja3MgPSAoKHUzMikoc3JiLT5jbW5kWzddKSA8PCA4KSB8ICgodTMyKShzcmItPmNtbmRbOF0pKTsKKworCQlVU19ERUJVR1AoImRhdGFmYWJfdHJhbnNwb3J0OiAgUkVBRF8xMDogcmVhZCBibG9jayAweCUwNGx4ICBjb3VudCAlbGRcbiIsIGJsb2NrLCBibG9ja3MpOworCQlyZXR1cm4gZGF0YWZhYl9yZWFkX2RhdGEodXMsIGluZm8sIGJsb2NrLCBibG9ja3MpOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVBRF8xMikgeworCQkvLyB3ZSdsbCBwcm9iYWJseSBuZXZlciBzZWUgYSBSRUFEXzEyIGJ1dCB3ZSdsbCBkbyBpdCBhbnl3YXkuLi4KKwkJLy8KKwkJYmxvY2sgPSAoKHUzMikoc3JiLT5jbW5kWzJdKSA8PCAyNCkgfCAoKHUzMikoc3JiLT5jbW5kWzNdKSA8PCAxNikgfAorCQkJKCh1MzIpKHNyYi0+Y21uZFs0XSkgPDwgIDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs1XSkpOworCisJCWJsb2NrcyA9ICgodTMyKShzcmItPmNtbmRbNl0pIDw8IDI0KSB8ICgodTMyKShzcmItPmNtbmRbN10pIDw8IDE2KSB8CisJCQkgKCh1MzIpKHNyYi0+Y21uZFs4XSkgPDwgIDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs5XSkpOworCisJCVVTX0RFQlVHUCgiZGF0YWZhYl90cmFuc3BvcnQ6ICBSRUFEXzEyOiByZWFkIGJsb2NrIDB4JTA0bHggIGNvdW50ICVsZFxuIiwgYmxvY2ssIGJsb2Nrcyk7CisJCXJldHVybiBkYXRhZmFiX3JlYWRfZGF0YSh1cywgaW5mbywgYmxvY2ssIGJsb2Nrcyk7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBXUklURV8xMCkgeworCQlibG9jayA9ICgodTMyKShzcmItPmNtbmRbMl0pIDw8IDI0KSB8ICgodTMyKShzcmItPmNtbmRbM10pIDw8IDE2KSB8CisJCQkoKHUzMikoc3JiLT5jbW5kWzRdKSA8PCAgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzVdKSk7CisKKwkJYmxvY2tzID0gKCh1MzIpKHNyYi0+Y21uZFs3XSkgPDwgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzhdKSk7CisKKwkJVVNfREVCVUdQKCJkYXRhZmFiX3RyYW5zcG9ydDogIFdSSVRFXzEwOiB3cml0ZSBibG9jayAweCUwNGx4ICBjb3VudCAlbGRcbiIsIGJsb2NrLCBibG9ja3MpOworCQlyZXR1cm4gZGF0YWZhYl93cml0ZV9kYXRhKHVzLCBpbmZvLCBibG9jaywgYmxvY2tzKTsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFdSSVRFXzEyKSB7CisJCS8vIHdlJ2xsIHByb2JhYmx5IG5ldmVyIHNlZSBhIFdSSVRFXzEyIGJ1dCB3ZSdsbCBkbyBpdCBhbnl3YXkuLi4KKwkJLy8KKwkJYmxvY2sgPSAoKHUzMikoc3JiLT5jbW5kWzJdKSA8PCAyNCkgfCAoKHUzMikoc3JiLT5jbW5kWzNdKSA8PCAxNikgfAorCQkJKCh1MzIpKHNyYi0+Y21uZFs0XSkgPDwgIDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs1XSkpOworCisJCWJsb2NrcyA9ICgodTMyKShzcmItPmNtbmRbNl0pIDw8IDI0KSB8ICgodTMyKShzcmItPmNtbmRbN10pIDw8IDE2KSB8CisJCQkgKCh1MzIpKHNyYi0+Y21uZFs4XSkgPDwgIDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs5XSkpOworCisJCVVTX0RFQlVHUCgiZGF0YWZhYl90cmFuc3BvcnQ6ICBXUklURV8xMjogd3JpdGUgYmxvY2sgMHglMDRseCAgY291bnQgJWxkXG4iLCBibG9jaywgYmxvY2tzKTsKKwkJcmV0dXJuIGRhdGFmYWJfd3JpdGVfZGF0YSh1cywgaW5mbywgYmxvY2ssIGJsb2Nrcyk7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBURVNUX1VOSVRfUkVBRFkpIHsKKwkJVVNfREVCVUdQKCJkYXRhZmFiX3RyYW5zcG9ydDogIFRFU1RfVU5JVF9SRUFEWS5cbiIpOworCQlyZXR1cm4gZGF0YWZhYl9pZF9kZXZpY2UodXMsIGluZm8pOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSkgeworCQlVU19ERUJVR1AoImRhdGFmYWJfdHJhbnNwb3J0OiAgUkVRVUVTVF9TRU5TRS4gIFJldHVybmluZyBmYWtlZCByZXNwb25zZVxuIik7CisKKwkJLy8gdGhpcyByZXNwb25zZSBpcyBwcmV0dHkgYm9ndXMgcmlnaHQgbm93LiAgZXZlbnR1YWxseSBpZiBuZWNlc3NhcnkKKwkJLy8gd2UgY2FuIHNldCB0aGUgY29ycmVjdCBzZW5zZSBkYXRhLiAgc28gZmFyIHRob3VnaCBpdCBoYXNuJ3QgYmVlbgorCQkvLyBuZWNlc3NhcnkKKwkJLy8KKwkJbWVtc2V0KHB0ciwgMCwgMTgpOworCQlwdHJbMF0gPSAweEYwOworCQlwdHJbMl0gPSBpbmZvLT5zZW5zZV9rZXk7CisJCXB0cls3XSA9IDExOworCQlwdHJbMTJdID0gaW5mby0+c2Vuc2VfYXNjOworCQlwdHJbMTNdID0gaW5mby0+c2Vuc2VfYXNjcTsKKwkJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHB0ciwgMTgsIHNyYik7CisKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gTU9ERV9TRU5TRSkgeworCQlVU19ERUJVR1AoImRhdGFmYWJfdHJhbnNwb3J0OiAgTU9ERV9TRU5TRV82IGRldGVjdGVkXG4iKTsKKwkJcmV0dXJuIGRhdGFmYWJfaGFuZGxlX21vZGVfc2Vuc2UodXMsIHNyYiwgMSk7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBNT0RFX1NFTlNFXzEwKSB7CisJCVVTX0RFQlVHUCgiZGF0YWZhYl90cmFuc3BvcnQ6ICBNT0RFX1NFTlNFXzEwIGRldGVjdGVkXG4iKTsKKwkJcmV0dXJuIGRhdGFmYWJfaGFuZGxlX21vZGVfc2Vuc2UodXMsIHNyYiwgMCk7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBBTExPV19NRURJVU1fUkVNT1ZBTCkgeworCQkvLyBzdXJlLiAgd2hhdGV2ZXIuICBub3QgbGlrZSB3ZSBjYW4gc3RvcCB0aGUgdXNlciBmcm9tCisJCS8vIHBvcHBpbmcgdGhlIG1lZGlhIG91dCBvZiB0aGUgZGV2aWNlIChubyBsb2NraW5nIGRvb3JzLCBldGMpCisJCS8vCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFNUQVJUX1NUT1ApIHsKKwkJLyogdGhpcyBpcyB1c2VkIGJ5IHNkLmMnY2hlY2tfc2NzaWRpc2tfbWVkaWFfY2hhbmdlIHRvIGRldGVjdAorCQkgICBtZWRpYSBjaGFuZ2UgKi8KKwkJVVNfREVCVUdQKCJkYXRhZmFiX3RyYW5zcG9ydDogIFNUQVJUX1NUT1AuXG4iKTsKKwkJLyogdGhlIGZpcnN0IGRhdGFmYWJfaWRfZGV2aWNlIGFmdGVyIGEgbWVkaWEgY2hhbmdlIHJldHVybnMKKwkJICAgYW4gZXJyb3IgKGRldGVybWluZWQgZXhwZXJpbWVudGFsbHkpICovCisJCXJjID0gZGF0YWZhYl9pZF9kZXZpY2UodXMsIGluZm8pOworCQlpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJCWluZm8tPnNlbnNlX2tleSA9IE5PX1NFTlNFOworCQkJc3JiLT5yZXN1bHQgPSBTVUNDRVNTOworCQl9IGVsc2UgeworCQkJaW5mby0+c2Vuc2Vfa2V5ID0gVU5JVF9BVFRFTlRJT047CisJCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKKwkJfQorCQlyZXR1cm4gcmM7CisJfQorCisJVVNfREVCVUdQKCJkYXRhZmFiX3RyYW5zcG9ydDogIEdhaCEgVW5rbm93biBjb21tYW5kOiAlZCAoMHgleClcbiIsCisJCSAgc3JiLT5jbW5kWzBdLCBzcmItPmNtbmRbMF0pOworCWluZm8tPnNlbnNlX2tleSA9IDB4MDU7CisJaW5mby0+c2Vuc2VfYXNjID0gMHgyMDsKKwlpbmZvLT5zZW5zZV9hc2NxID0gMHgwMDsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJlM2YyNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGF0YWZhYi5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIERyaXZlciBmb3IgRGF0YWZhYiBNRENGRS1CIFVTQiBDb21wYWN0IEZsYXNoIHJlYWRlcgorICogSGVhZGVyIEZpbGUKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDIwMDAgSmltbWllIE1heWZpZWxkIChtYXlmaWVsZCtkYXRhZmFiQHNhY2toZWFkcy5vcmcpCisgKgorICogU2VlIGRhdGFmYWIuYyBmb3IgbW9yZSBleHBsYW5hdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX1VTQl9EQVRBRkFCX01EQ0ZFX0JfSAorI2RlZmluZSBfVVNCX0RBVEFGQUJfTURDRkVfQl9ICisKK2V4dGVybiBpbnQgZGF0YWZhYl90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCitzdHJ1Y3QgZGF0YWZhYl9pbmZvIHsKKwl1bnNpZ25lZCBsb25nICAgc2VjdG9yczsJLy8gdG90YWwgc2VjdG9yIGNvdW50CisJdW5zaWduZWQgbG9uZyAgIHNzaXplOwkJLy8gc2VjdG9yIHNpemUgaW4gYnl0ZXMKKwlzaWduZWQgY2hhcglsdW47CQkvLyB1c2VkIGZvciBkdWFsLXNsb3QgcmVhZGVycworCQorCS8vIHRoZSBmb2xsb3dpbmcgYXJlbid0IHVzZWQgeWV0CisJdW5zaWduZWQgY2hhciAgIHNlbnNlX2tleTsKKwl1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjOwkvLyBhZGRpdGlvbmFsIHNlbnNlIGNvZGUKKwl1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjcTsJLy8gYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllcgorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RlYnVnLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc2NDgzNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGVidWcuYwpAQCAtMCwwICsxLDE3NyBAQAorLyogRHJpdmVyIGZvciBVU0IgTWFzcyBTdG9yYWdlIGNvbXBsaWFudCBkZXZpY2VzCisgKiBEZWJ1Z2dpbmcgRnVuY3Rpb25zIFNvdXJjZSBDb2RlIEZpbGUKKyAqCisgKiAkSWQ6IGRlYnVnLmMsdiAxLjkgMjAwMi8wNC8yMiAwMzozOTo0MyBtZGhhcm0gRXhwICQKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDE5OTktMjAwMiBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKKyAqCisgKiBEZXZlbG9wZWQgd2l0aCB0aGUgYXNzaXN0YW5jZSBvZjoKKyAqICAgKGMpIDIwMDIgQWxhbiBTdGVybiA8c3Rlcm5Acm93bGFuZC5vcmc+CisgKgorICogSW5pdGlhbCB3b3JrIGJ5OgorICogICAoYykgMTk5OSBNaWNoYWVsIEdlZSAobWljaGFlbEBsaW51eHNwZWNpZmljLmNvbSkKKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgJ1VTQiBNYXNzIFN0b3JhZ2UgQ2xhc3MnIGRvY3VtZW50LiBUaGlzCisgKiBkZXNjcmliZXMgaW4gZGV0YWlsIHRoZSBwcm90b2NvbCB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggc3VjaAorICogZGV2aWNlcy4gIENsZWFybHksIHRoZSBkZXNpZ25lcnMgaGFkIFNDU0kgYW5kIEFUQVBJIGNvbW1hbmRzIGluCisgKiBtaW5kIHdoZW4gdGhleSBjcmVhdGVkIHRoaXMgZG9jdW1lbnQuICBUaGUgY29tbWFuZHMgYXJlIGFsbCB2ZXJ5CisgKiBzaW1pbGFyIHRvIGNvbW1hbmRzIGluIHRoZSBTQ1NJLUlJIGFuZCBBVEFQSSBzcGVjaWZpY2F0aW9ucy4KKyAqCisgKiBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGluIGEgbnVtYmVyIG9mIGNhc2VzIHRoaXMgY2xhc3MKKyAqIGV4aGliaXRzIGNsYXNzLXNwZWNpZmljIGV4ZW1wdGlvbnMgZnJvbSB0aGUgVVNCIHNwZWNpZmljYXRpb24uCisgKiBOb3RhYmx5IHRoZSB1c2FnZSBvZiBOQUssIFNUQUxMIGFuZCBBQ0sgZGlmZmVycyBmcm9tIHRoZSBub3JtLCBpbgorICogdGhhdCB0aGV5IGFyZSB1c2VkIHRvIGNvbW11bmljYXRlIHdhaXQsIGZhaWxlZCBhbmQgT0sgb24gY29tbWFuZHMuCisgKgorICogQWxzbywgZm9yIGNlcnRhaW4gZGV2aWNlcywgdGhlIGludGVycnVwdCBlbmRwb2ludCBpcyB1c2VkIHRvIGNvbnZleQorICogc3RhdHVzIG9mIGEgY29tbWFuZC4KKyAqCisgKiBQbGVhc2Ugc2VlIGh0dHA6Ly93d3cub25lLWV5ZWQtYWxpZW4ubmV0L35tZGhhcm0vbGludXgtdXNiIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJzY3NpLmgiCisKKwordm9pZCB1c2Jfc3Rvcl9zaG93X2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc3JiKQoreworCWNoYXIgKndoYXQgPSBOVUxMOworCWludCBpOworCisJc3dpdGNoIChzcmItPmNtbmRbMF0pIHsKKwljYXNlIFRFU1RfVU5JVF9SRUFEWTogd2hhdCA9ICJURVNUX1VOSVRfUkVBRFkiOyBicmVhazsKKwljYXNlIFJFWkVST19VTklUOiB3aGF0ID0gIlJFWkVST19VTklUIjsgYnJlYWs7CisJY2FzZSBSRVFVRVNUX1NFTlNFOiB3aGF0ID0gIlJFUVVFU1RfU0VOU0UiOyBicmVhazsKKwljYXNlIEZPUk1BVF9VTklUOiB3aGF0ID0gIkZPUk1BVF9VTklUIjsgYnJlYWs7CisJY2FzZSBSRUFEX0JMT0NLX0xJTUlUUzogd2hhdCA9ICJSRUFEX0JMT0NLX0xJTUlUUyI7IGJyZWFrOworCWNhc2UgUkVBU1NJR05fQkxPQ0tTOiB3aGF0ID0gIlJFQVNTSUdOX0JMT0NLUyI7IGJyZWFrOworCWNhc2UgUkVBRF82OiB3aGF0ID0gIlJFQURfNiI7IGJyZWFrOworCWNhc2UgV1JJVEVfNjogd2hhdCA9ICJXUklURV82IjsgYnJlYWs7CisJY2FzZSBTRUVLXzY6IHdoYXQgPSAiU0VFS182IjsgYnJlYWs7CisJY2FzZSBSRUFEX1JFVkVSU0U6IHdoYXQgPSAiUkVBRF9SRVZFUlNFIjsgYnJlYWs7CisJY2FzZSBXUklURV9GSUxFTUFSS1M6IHdoYXQgPSAiV1JJVEVfRklMRU1BUktTIjsgYnJlYWs7CisJY2FzZSBTUEFDRTogd2hhdCA9ICJTUEFDRSI7IGJyZWFrOworCWNhc2UgSU5RVUlSWTogd2hhdCA9ICJJTlFVSVJZIjsgYnJlYWs7CisJY2FzZSBSRUNPVkVSX0JVRkZFUkVEX0RBVEE6IHdoYXQgPSAiUkVDT1ZFUl9CVUZGRVJFRF9EQVRBIjsgYnJlYWs7CisJY2FzZSBNT0RFX1NFTEVDVDogd2hhdCA9ICJNT0RFX1NFTEVDVCI7IGJyZWFrOworCWNhc2UgUkVTRVJWRTogd2hhdCA9ICJSRVNFUlZFIjsgYnJlYWs7CisJY2FzZSBSRUxFQVNFOiB3aGF0ID0gIlJFTEVBU0UiOyBicmVhazsKKwljYXNlIENPUFk6IHdoYXQgPSAiQ09QWSI7IGJyZWFrOworCWNhc2UgRVJBU0U6IHdoYXQgPSAiRVJBU0UiOyBicmVhazsKKwljYXNlIE1PREVfU0VOU0U6IHdoYXQgPSAiTU9ERV9TRU5TRSI7IGJyZWFrOworCWNhc2UgU1RBUlRfU1RPUDogd2hhdCA9ICJTVEFSVF9TVE9QIjsgYnJlYWs7CisJY2FzZSBSRUNFSVZFX0RJQUdOT1NUSUM6IHdoYXQgPSAiUkVDRUlWRV9ESUFHTk9TVElDIjsgYnJlYWs7CisJY2FzZSBTRU5EX0RJQUdOT1NUSUM6IHdoYXQgPSAiU0VORF9ESUFHTk9TVElDIjsgYnJlYWs7CisJY2FzZSBBTExPV19NRURJVU1fUkVNT1ZBTDogd2hhdCA9ICJBTExPV19NRURJVU1fUkVNT1ZBTCI7IGJyZWFrOworCWNhc2UgU0VUX1dJTkRPVzogd2hhdCA9ICJTRVRfV0lORE9XIjsgYnJlYWs7CisJY2FzZSBSRUFEX0NBUEFDSVRZOiB3aGF0ID0gIlJFQURfQ0FQQUNJVFkiOyBicmVhazsKKwljYXNlIFJFQURfMTA6IHdoYXQgPSAiUkVBRF8xMCI7IGJyZWFrOworCWNhc2UgV1JJVEVfMTA6IHdoYXQgPSAiV1JJVEVfMTAiOyBicmVhazsKKwljYXNlIFNFRUtfMTA6IHdoYXQgPSAiU0VFS18xMCI7IGJyZWFrOworCWNhc2UgV1JJVEVfVkVSSUZZOiB3aGF0ID0gIldSSVRFX1ZFUklGWSI7IGJyZWFrOworCWNhc2UgVkVSSUZZOiB3aGF0ID0gIlZFUklGWSI7IGJyZWFrOworCWNhc2UgU0VBUkNIX0hJR0g6IHdoYXQgPSAiU0VBUkNIX0hJR0giOyBicmVhazsKKwljYXNlIFNFQVJDSF9FUVVBTDogd2hhdCA9ICJTRUFSQ0hfRVFVQUwiOyBicmVhazsKKwljYXNlIFNFQVJDSF9MT1c6IHdoYXQgPSAiU0VBUkNIX0xPVyI7IGJyZWFrOworCWNhc2UgU0VUX0xJTUlUUzogd2hhdCA9ICJTRVRfTElNSVRTIjsgYnJlYWs7CisJY2FzZSBSRUFEX1BPU0lUSU9OOiB3aGF0ID0gIlJFQURfUE9TSVRJT04iOyBicmVhazsKKwljYXNlIFNZTkNIUk9OSVpFX0NBQ0hFOiB3aGF0ID0gIlNZTkNIUk9OSVpFX0NBQ0hFIjsgYnJlYWs7CisJY2FzZSBMT0NLX1VOTE9DS19DQUNIRTogd2hhdCA9ICJMT0NLX1VOTE9DS19DQUNIRSI7IGJyZWFrOworCWNhc2UgUkVBRF9ERUZFQ1RfREFUQTogd2hhdCA9ICJSRUFEX0RFRkVDVF9EQVRBIjsgYnJlYWs7CisJY2FzZSBNRURJVU1fU0NBTjogd2hhdCA9ICJNRURJVU1fU0NBTiI7IGJyZWFrOworCWNhc2UgQ09NUEFSRTogd2hhdCA9ICJDT01QQVJFIjsgYnJlYWs7CisJY2FzZSBDT1BZX1ZFUklGWTogd2hhdCA9ICJDT1BZX1ZFUklGWSI7IGJyZWFrOworCWNhc2UgV1JJVEVfQlVGRkVSOiB3aGF0ID0gIldSSVRFX0JVRkZFUiI7IGJyZWFrOworCWNhc2UgUkVBRF9CVUZGRVI6IHdoYXQgPSAiUkVBRF9CVUZGRVIiOyBicmVhazsKKwljYXNlIFVQREFURV9CTE9DSzogd2hhdCA9ICJVUERBVEVfQkxPQ0siOyBicmVhazsKKwljYXNlIFJFQURfTE9ORzogd2hhdCA9ICJSRUFEX0xPTkciOyBicmVhazsKKwljYXNlIFdSSVRFX0xPTkc6IHdoYXQgPSAiV1JJVEVfTE9ORyI7IGJyZWFrOworCWNhc2UgQ0hBTkdFX0RFRklOSVRJT046IHdoYXQgPSAiQ0hBTkdFX0RFRklOSVRJT04iOyBicmVhazsKKwljYXNlIFdSSVRFX1NBTUU6IHdoYXQgPSAiV1JJVEVfU0FNRSI7IGJyZWFrOworCWNhc2UgR1BDTURfUkVBRF9TVUJDSEFOTkVMOiB3aGF0ID0gIlJFQUQgU1VCQ0hBTk5FTCI7IGJyZWFrOworCWNhc2UgUkVBRF9UT0M6IHdoYXQgPSAiUkVBRF9UT0MiOyBicmVhazsKKwljYXNlIEdQQ01EX1JFQURfSEVBREVSOiB3aGF0ID0gIlJFQUQgSEVBREVSIjsgYnJlYWs7CisJY2FzZSBHUENNRF9QTEFZX0FVRElPXzEwOiB3aGF0ID0gIlBMQVkgQVVESU8gKDEwKSI7IGJyZWFrOworCWNhc2UgR1BDTURfUExBWV9BVURJT19NU0Y6IHdoYXQgPSAiUExBWSBBVURJTyBNU0YiOyBicmVhazsKKwljYXNlIEdQQ01EX0dFVF9FVkVOVF9TVEFUVVNfTk9USUZJQ0FUSU9OOgorCQl3aGF0ID0gIkdFVCBFVkVOVC9TVEFUVVMgTk9USUZJQ0FUSU9OIjsgYnJlYWs7CisJY2FzZSBHUENNRF9QQVVTRV9SRVNVTUU6IHdoYXQgPSAiUEFVU0UvUkVTVU1FIjsgYnJlYWs7CisJY2FzZSBMT0dfU0VMRUNUOiB3aGF0ID0gIkxPR19TRUxFQ1QiOyBicmVhazsKKwljYXNlIExPR19TRU5TRTogd2hhdCA9ICJMT0dfU0VOU0UiOyBicmVhazsKKwljYXNlIEdQQ01EX1NUT1BfUExBWV9TQ0FOOiB3aGF0ID0gIlNUT1AgUExBWS9TQ0FOIjsgYnJlYWs7CisJY2FzZSBHUENNRF9SRUFEX0RJU0NfSU5GTzogd2hhdCA9ICJSRUFEIERJU0MgSU5GT1JNQVRJT04iOyBicmVhazsKKwljYXNlIEdQQ01EX1JFQURfVFJBQ0tfUlpPTkVfSU5GTzoKKwkJd2hhdCA9ICJSRUFEIFRSQUNLIElORk9STUFUSU9OIjsgYnJlYWs7CisJY2FzZSBHUENNRF9SRVNFUlZFX1JaT05FX1RSQUNLOiB3aGF0ID0gIlJFU0VSVkUgVFJBQ0siOyBicmVhazsKKwljYXNlIEdQQ01EX1NFTkRfT1BDOiB3aGF0ID0gIlNFTkQgT1BDIjsgYnJlYWs7CisJY2FzZSBNT0RFX1NFTEVDVF8xMDogd2hhdCA9ICJNT0RFX1NFTEVDVF8xMCI7IGJyZWFrOworCWNhc2UgR1BDTURfUkVQQUlSX1JaT05FX1RSQUNLOiB3aGF0ID0gIlJFUEFJUiBUUkFDSyI7IGJyZWFrOworCWNhc2UgMHg1OTogd2hhdCA9ICJSRUFEIE1BU1RFUiBDVUUiOyBicmVhazsKKwljYXNlIE1PREVfU0VOU0VfMTA6IHdoYXQgPSAiTU9ERV9TRU5TRV8xMCI7IGJyZWFrOworCWNhc2UgR1BDTURfQ0xPU0VfVFJBQ0s6IHdoYXQgPSAiQ0xPU0UgVFJBQ0svU0VTU0lPTiI7IGJyZWFrOworCWNhc2UgMHg1Qzogd2hhdCA9ICJSRUFEIEJVRkZFUiBDQVBBQ0lUWSI7IGJyZWFrOworCWNhc2UgMHg1RDogd2hhdCA9ICJTRU5EIENVRSBTSEVFVCI7IGJyZWFrOworCWNhc2UgR1BDTURfQkxBTks6IHdoYXQgPSAiQkxBTksiOyBicmVhazsKKwljYXNlIE1PVkVfTUVESVVNOiB3aGF0ID0gIk1PVkVfTUVESVVNIG9yIFBMQVkgQVVESU8gKDEyKSI7IGJyZWFrOworCWNhc2UgUkVBRF8xMjogd2hhdCA9ICJSRUFEXzEyIjsgYnJlYWs7CisJY2FzZSBXUklURV8xMjogd2hhdCA9ICJXUklURV8xMiI7IGJyZWFrOworCWNhc2UgV1JJVEVfVkVSSUZZXzEyOiB3aGF0ID0gIldSSVRFX1ZFUklGWV8xMiI7IGJyZWFrOworCWNhc2UgU0VBUkNIX0hJR0hfMTI6IHdoYXQgPSAiU0VBUkNIX0hJR0hfMTIiOyBicmVhazsKKwljYXNlIFNFQVJDSF9FUVVBTF8xMjogd2hhdCA9ICJTRUFSQ0hfRVFVQUxfMTIiOyBicmVhazsKKwljYXNlIFNFQVJDSF9MT1dfMTI6IHdoYXQgPSAiU0VBUkNIX0xPV18xMiI7IGJyZWFrOworCWNhc2UgU0VORF9WT0xVTUVfVEFHOiB3aGF0ID0gIlNFTkRfVk9MVU1FX1RBRyI7IGJyZWFrOworCWNhc2UgUkVBRF9FTEVNRU5UX1NUQVRVUzogd2hhdCA9ICJSRUFEX0VMRU1FTlRfU1RBVFVTIjsgYnJlYWs7CisJY2FzZSBHUENNRF9SRUFEX0NEX01TRjogd2hhdCA9ICJSRUFEIENEIE1TRiI7IGJyZWFrOworCWNhc2UgR1BDTURfU0NBTjogd2hhdCA9ICJTQ0FOIjsgYnJlYWs7CisJY2FzZSBHUENNRF9TRVRfU1BFRUQ6IHdoYXQgPSAiU0VUIENEIFNQRUVEIjsgYnJlYWs7CisJY2FzZSBHUENNRF9NRUNIQU5JU01fU1RBVFVTOiB3aGF0ID0gIk1FQ0hBTklTTSBTVEFUVVMiOyBicmVhazsKKwljYXNlIEdQQ01EX1JFQURfQ0Q6IHdoYXQgPSAiUkVBRCBDRCI7IGJyZWFrOworCWNhc2UgMHhFMTogd2hhdCA9ICJXUklURSBDT05USU5VRSI7IGJyZWFrOworCWNhc2UgV1JJVEVfTE9OR18yOiB3aGF0ID0gIldSSVRFX0xPTkdfMiI7IGJyZWFrOworCWRlZmF1bHQ6IHdoYXQgPSAiKHVua25vd24gY29tbWFuZCkiOyBicmVhazsKKwl9CisJVVNfREVCVUdQKCJDb21tYW5kICVzICglZCBieXRlcylcbiIsIHdoYXQsIHNyYi0+Y21kX2xlbik7CisJVVNfREVCVUdQKCIiKTsKKwlmb3IgKGkgPSAwOyBpIDwgc3JiLT5jbWRfbGVuICYmIGkgPCAxNjsgaSsrKQorCQlVU19ERUJVR1BYKCIgJTAyeCIsIHNyYi0+Y21uZFtpXSk7CisJVVNfREVCVUdQWCgiXG4iKTsKK30KKwordm9pZCB1c2Jfc3Rvcl9zaG93X3NlbnNlKAorCQl1bnNpZ25lZCBjaGFyIGtleSwKKwkJdW5zaWduZWQgY2hhciBhc2MsCisJCXVuc2lnbmVkIGNoYXIgYXNjcSkgeworCisJY29uc3QgY2hhciAqd2hhdCwgKmtleXN0cjsKKworCWtleXN0ciA9IHNjc2lfc2Vuc2Vfa2V5X3N0cmluZyhrZXkpOworCXdoYXQgPSBzY3NpX2V4dGRfc2Vuc2VfZm9ybWF0KGFzYywgYXNjcSk7CisKKwlpZiAoa2V5c3RyID09IE5VTEwpCisJCWtleXN0ciA9ICIoVW5rbm93biBLZXkpIjsKKwlpZiAod2hhdCA9PSBOVUxMKQorCQl3aGF0ID0gIih1bmtub3duIEFTQy9BU0NRKSI7CisKKwlVU19ERUJVR1AoIiVzOiAiLCBrZXlzdHIpOworCVVTX0RFQlVHUFgod2hhdCwgYXNjcSk7CisJVVNfREVCVUdQWCgiXG4iKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGVidWcuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDIwOTZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kZWJ1Zy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qIERyaXZlciBmb3IgVVNCIE1hc3MgU3RvcmFnZSBjb21wbGlhbnQgZGV2aWNlcworICogRGVidWdnaW5nIEZ1bmN0aW9ucyBIZWFkZXIgRmlsZQorICoKKyAqICRJZDogZGVidWcuaCx2IDEuNiAyMDAxLzAxLzEyIDIzOjUxOjA0IG1kaGFybSBFeHAgJAorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgorICogICAoYykgMTk5OS0yMDAyIE1hdHRoZXcgRGhhcm0gKG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0KQorICoKKyAqIEluaXRpYWwgd29yayBieToKKyAqICAgKGMpIDE5OTkgTWljaGFlbCBHZWUgKG1pY2hhZWxAbGludXhzcGVjaWZpYy5jb20pCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlICdVU0IgTWFzcyBTdG9yYWdlIENsYXNzJyBkb2N1bWVudC4gVGhpcworICogZGVzY3JpYmVzIGluIGRldGFpbCB0aGUgcHJvdG9jb2wgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHN1Y2gKKyAqIGRldmljZXMuICBDbGVhcmx5LCB0aGUgZGVzaWduZXJzIGhhZCBTQ1NJIGFuZCBBVEFQSSBjb21tYW5kcyBpbgorICogbWluZCB3aGVuIHRoZXkgY3JlYXRlZCB0aGlzIGRvY3VtZW50LiAgVGhlIGNvbW1hbmRzIGFyZSBhbGwgdmVyeQorICogc2ltaWxhciB0byBjb21tYW5kcyBpbiB0aGUgU0NTSS1JSSBhbmQgQVRBUEkgc3BlY2lmaWNhdGlvbnMuCisgKgorICogSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBpbiBhIG51bWJlciBvZiBjYXNlcyB0aGlzIGNsYXNzCisgKiBleGhpYml0cyBjbGFzcy1zcGVjaWZpYyBleGVtcHRpb25zIGZyb20gdGhlIFVTQiBzcGVjaWZpY2F0aW9uLgorICogTm90YWJseSB0aGUgdXNhZ2Ugb2YgTkFLLCBTVEFMTCBhbmQgQUNLIGRpZmZlcnMgZnJvbSB0aGUgbm9ybSwgaW4KKyAqIHRoYXQgdGhleSBhcmUgdXNlZCB0byBjb21tdW5pY2F0ZSB3YWl0LCBmYWlsZWQgYW5kIE9LIG9uIGNvbW1hbmRzLgorICoKKyAqIEFsc28sIGZvciBjZXJ0YWluIGRldmljZXMsIHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQgaXMgdXNlZCB0byBjb252ZXkKKyAqIHN0YXR1cyBvZiBhIGNvbW1hbmQuCisgKgorICogUGxlYXNlIHNlZSBodHRwOi8vd3d3Lm9uZS1leWVkLWFsaWVuLm5ldC9+bWRoYXJtL2xpbnV4LXVzYiBmb3IgbW9yZQorICogaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBkcml2ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfREVCVUdfSF8KKyNkZWZpbmUgX0RFQlVHX0hfCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2RlZmluZSBVU0JfU1RPUkFHRSAidXNiLXN0b3JhZ2U6ICIKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRwordm9pZCB1c2Jfc3Rvcl9zaG93X2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc3JiKTsKK3ZvaWQgdXNiX3N0b3Jfc2hvd19zZW5zZSggdW5zaWduZWQgY2hhciBrZXksCisJCXVuc2lnbmVkIGNoYXIgYXNjLCB1bnNpZ25lZCBjaGFyIGFzY3EgKTsKKyNkZWZpbmUgVVNfREVCVUdQKHguLi4pIHByaW50ayggS0VSTl9ERUJVRyBVU0JfU1RPUkFHRSB4ICkKKyNkZWZpbmUgVVNfREVCVUdQWCh4Li4uKSBwcmludGsoIHggKQorI2RlZmluZSBVU19ERUJVRyh4KSB4IAorI2Vsc2UKKyNkZWZpbmUgVVNfREVCVUdQKHguLi4pCisjZGVmaW5lIFVTX0RFQlVHUFgoeC4uLikKKyNkZWZpbmUgVVNfREVCVUcoeCkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZHBjbS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kcGNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJiNjllNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZHBjbS5jCkBAIC0wLDAgKzEsODkgQEAKKy8qIERyaXZlciBmb3IgTWljcm90ZWNoIERQQ00tVVNCIENvbXBhY3RGbGFzaC9TbWFydE1lZGlhIHJlYWRlcgorICoKKyAqICRJZDogZHBjbS5jLHYgMS40IDIwMDEvMDYvMTEgMDI6NTQ6MjUgbWRoYXJtIEV4cCAkCisgKgorICogRFBDTSBkcml2ZXIgdjAuMToKKyAqCisgKiBGaXJzdCByZWxlYXNlCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAyMDAwIEJyaWFuIFdlYmIgKHdlYmJiQGVhcnRobGluay5uZXQpCisgKgorICogVGhpcyBkZXZpY2UgY29udGFpbnMgYm90aCBhIENvbXBhY3RGbGFzaCBjYXJkIHJlYWRlciwgd2hpY2gKKyAqIHVzZXMgdGhlIENvbnRyb2wvQnVsayB3L28gSW50ZXJydXB0IHByb3RvY29sIGFuZAorICogYSBTbWFydE1lZGlhIGNhcmQgcmVhZGVyIHRoYXQgdXNlcyB0aGUgc2FtZSBwcm90b2NvbAorICogYXMgdGhlIFNERFIwOS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisKKyNpbmNsdWRlICJ1c2IuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAiZHBjbS5oIgorI2luY2x1ZGUgInNkZHIwOS5oIgorCisvKgorICogVHJhbnNwb3J0IGZvciB0aGUgTWljcm90ZWNoIERQQ00tVVNCCisgKgorICovCitpbnQgZHBjbV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisgIGludCByZXQ7CisKKyAgaWYoc3JiID09IE5VTEwpCisgICAgcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworICBVU19ERUJVR1AoImRwY21fdHJhbnNwb3J0OiBMVU49JWRcbiIsIHNyYi0+ZGV2aWNlLT5sdW4pOworCisgIHN3aXRjaChzcmItPmRldmljZS0+bHVuKSB7CisgIGNhc2UgMDoKKworICAgIC8qCisgICAgICogTFVOIDAgY29ycmVzcG9uZHMgdG8gdGhlIENvbXBhY3RGbGFzaCBjYXJkIHJlYWRlci4KKyAgICAgKi8KKyAgICByZXQgPSB1c2Jfc3Rvcl9DQl90cmFuc3BvcnQoc3JiLCB1cyk7CisgICAgYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5CisgIGNhc2UgMToKKworICAgIC8qCisgICAgICogTFVOIDEgY29ycmVzcG9uZHMgdG8gdGhlIFNtYXJ0TWVkaWEgY2FyZCByZWFkZXIuCisgICAgICovCisKKyAgICAvKgorICAgICAqIFNldCB0aGUgTFVOIHRvIDAgKGp1c3QgaW4gY2FzZSkuCisgICAgICovCisgICAgc3JiLT5kZXZpY2UtPmx1biA9IDA7IHVzLT5zcmItPmRldmljZS0+bHVuID0gMDsKKyAgICByZXQgPSBzZGRyMDlfdHJhbnNwb3J0KHNyYiwgdXMpOworICAgIHNyYi0+ZGV2aWNlLT5sdW4gPSAxOyB1cy0+c3JiLT5kZXZpY2UtPmx1biA9IDE7CisgICAgYnJlYWs7CisKKyNlbmRpZgorCisgIGRlZmF1bHQ6CisgICAgVVNfREVCVUdQKCJkcGNtX3RyYW5zcG9ydDogSW52YWxpZCBMVU4gJWRcbiIsIHNyYi0+ZGV2aWNlLT5sdW4pOworICAgIHJldCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKyAgICBicmVhazsKKyAgfQorICByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9kcGNtLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RwY20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWI0NjRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9kcGNtLmgKQEAgLTAsMCArMSwzNCBAQAorLyogRHJpdmVyIGZvciBNaWNyb3RlY2ggRFBDTS1VU0IgQ29tcGFjdEZsYXNoL1NtYXJ0TWVkaWEgcmVhZGVyCisgKgorICogJElkOiBkcGNtLmgsdiAxLjIgMjAwMC8wOC8yNSAwMDoxMzo1MSBtZGhhcm0gRXhwICQKKyAqCisgKiBEUENNIGRyaXZlciB2MC4xOgorICoKKyAqIEZpcnN0IHJlbGVhc2UKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDIwMDAgQnJpYW4gV2ViYiAod2ViYmJAZWFydGhsaW5rLm5ldCkKKyAqCisgKiBTZWUgZHBjbS5jIGZvciBtb3JlIGV4cGxhbmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfTUlDUk9URUNIX0RQQ01fVVNCX0gKKyNkZWZpbmUgX01JQ1JPVEVDSF9EUENNX1VTQl9ICisKK2V4dGVybiBpbnQgZHBjbV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBlOTYwNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5jCkBAIC0wLDAgKzEsNDg4IEBACisvKiBEcml2ZXIgZm9yIEZyZWVjb20gVVNCL0lERSBhZGFwdG9yCisgKgorICogJElkOiBmcmVlY29tLmMsdiAxLjIyIDIwMDIvMDQvMjIgMDM6Mzk6NDMgbWRoYXJtIEV4cCAkCisgKgorICogRnJlZWNvbSB2MC4xOgorICoKKyAqIEZpcnN0IHJlbGVhc2UKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKEMpIDIwMDAgRGF2aWQgQnJvd24gPHVzYi1zdG9yYWdlQGRhdmlkYi5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogVGhpcyBkcml2ZXIgd2FzIGRldmVsb3BlZCB3aXRoIGluZm9ybWF0aW9uIHByb3ZpZGVkIGluIEZSRUVDT00ncyBVU0IKKyAqIFByb2dyYW1tZXJzIFJlZmVyZW5jZSBHdWlkZS4gIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIGNvbnRhY3QgRnJlZWNvbQorICogKGh0dHA6Ly93d3cuZnJlZWNvbS5kZS8pCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorCisjaW5jbHVkZSAidXNiLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgImZyZWVjb20uaCIKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRworc3RhdGljIHZvaWQgcGR1bXAgKHZvaWQgKiwgaW50KTsKKyNlbmRpZgorCisvKiBCaXRzIG9mIEhEX1NUQVRVUyAqLworI2RlZmluZSBFUlJfU1RBVAkJMHgwMQorI2RlZmluZSBEUlFfU1RBVAkJMHgwOAorCisvKiBBbGwgb2YgdGhlIG91dGdvaW5nIHBhY2tldHMgYXJlIDY0IGJ5dGVzIGxvbmcuICovCitzdHJ1Y3QgZnJlZWNvbV9jYl93cmFwIHsKKwl1OCAgICBUeXBlOwkJLyogQ29tbWFuZCB0eXBlLiAqLworCXU4ICAgIFRpbWVvdXQ7CQkvKiBUaW1lb3V0IGluIHNlY29uZHMuICovCisJdTggICAgQXRhcGlbMTJdOwkvKiBBbiBBVEFQSSBwYWNrZXQuICovCisJdTggICAgRmlsbGVyWzUwXTsJLyogUGFkZGluZyBEYXRhLiAqLworfTsKKworc3RydWN0IGZyZWVjb21feGZlcl93cmFwIHsKKwl1OCAgICBUeXBlOwkJLyogQ29tbWFuZCB0eXBlLiAqLworCXU4ICAgIFRpbWVvdXQ7CQkvKiBUaW1lb3V0IGluIHNlY29uZHMuICovCisJX19sZTMyICAgQ291bnQ7CQkvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIuICovCisJdTggICAgUGFkWzU4XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgZnJlZWNvbV9pZGVfb3V0IHsKKwl1OCAgICBUeXBlOwkJLyogVHlwZSArIElERSByZWdpc3Rlci4gKi8KKwl1OCAgICBQYWQ7CisJX19sZTE2ICAgVmFsdWU7CQkvKiBWYWx1ZSB0byB3cml0ZS4gKi8KKwl1OCAgICBQYWQyWzYwXTsKK307CisKK3N0cnVjdCBmcmVlY29tX2lkZV9pbiB7CisJdTggICAgVHlwZTsJCS8qIFR5cGUgfCBJREUgcmVnaXN0ZXIuICovCisJdTggICAgUGFkWzYzXTsKK307CisKK3N0cnVjdCBmcmVlY29tX3N0YXR1cyB7CisJdTggICAgU3RhdHVzOworCXU4ICAgIFJlYXNvbjsKKwlfX2xlMTYgICBDb3VudDsKKwl1OCAgICBQYWRbNjBdOworfTsKKworLyogRnJlZWNvbSBzdHVmZnMgdGhlIGludGVycnVwdCBzdGF0dXMgaW4gdGhlIElOREVYX1NUQVQgYml0IG9mIHRoZSBpZGUKKyAqIHJlZ2lzdGVyLiAqLworI2RlZmluZSBGQ01fSU5UX1NUQVRVUwkJMHgwMiAvKiBJTkRFWF9TVEFUICovCisjZGVmaW5lIEZDTV9TVEFUVVNfQlVTWQkJMHg4MAorCisvKiBUaGVzZSBhcmUgdGhlIHBhY2tldCB0eXBlcy4gIFRoZSBsb3cgYml0IGluZGljYXRlcyB0aGF0IHRoaXMgY29tbWFuZAorICogc2hvdWxkIHdhaXQgZm9yIGFuIGludGVycnVwdC4gKi8KKyNkZWZpbmUgRkNNX1BBQ0tFVF9BVEFQSQkweDIxCisjZGVmaW5lIEZDTV9QQUNLRVRfU1RBVFVTCTB4MjAKKworLyogUmVjZWl2ZSBkYXRhIGZyb20gdGhlIElERSBpbnRlcmZhY2UuICBUaGUgQVRBUEkgcGFja2V0IGhhcyBhbHJlYWR5CisgKiB3YWl0ZWQsIHNvIHRoZSBkYXRhIHNob3VsZCBiZSBpbW1lZGlhdGVseSBhdmFpbGFibGUuICovCisjZGVmaW5lIEZDTV9QQUNLRVRfSU5QVVQJMHg4MQorCisvKiBTZW5kIGRhdGEgdG8gdGhlIElERSBpbnRlcmZhY2UuICovCisjZGVmaW5lIEZDTV9QQUNLRVRfT1VUUFVUCTB4MDEKKworLyogV3JpdGUgYSB2YWx1ZSB0byBhbiBpZGUgcmVnaXN0ZXIuICBPciB0aGUgaWRlIHJlZ2lzdGVyIHRvIHdyaXRlIGFmdGVyCisgKiBtdW5naW5nIHRoZSBhZGRyZXNzIGEgYml0LiAqLworI2RlZmluZSBGQ01fUEFDS0VUX0lERV9XUklURQkweDQwCisjZGVmaW5lIEZDTV9QQUNLRVRfSURFX1JFQUQJMHhDMAorCisvKiBBbGwgcGFja2V0cyAoZXhjZXB0IGZvciBzdGF0dXMpIGFyZSA2NCBieXRlcyBsb25nLiAqLworI2RlZmluZSBGQ01fUEFDS0VUX0xFTkdUSAkJNjQKKyNkZWZpbmUgRkNNX1NUQVRVU19QQUNLRVRfTEVOR1RICTQKKworc3RhdGljIGludAorZnJlZWNvbV9yZWFkZGF0YSAoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCXVuc2lnbmVkIGludCBpcGlwZSwgdW5zaWduZWQgaW50IG9waXBlLCBpbnQgY291bnQpCit7CisJc3RydWN0IGZyZWVjb21feGZlcl93cmFwICpmeGZyID0KKwkJKHN0cnVjdCBmcmVlY29tX3hmZXJfd3JhcCAqKSB1cy0+aW9idWY7CisJaW50IHJlc3VsdDsKKworCWZ4ZnItPlR5cGUgPSBGQ01fUEFDS0VUX0lOUFVUIHwgMHgwMDsKKwlmeGZyLT5UaW1lb3V0ID0gMDsgICAgLyogU2hvcnQgdGltZW91dCBmb3IgZGVidWdnaW5nLiAqLworCWZ4ZnItPkNvdW50ID0gY3B1X3RvX2xlMzIgKGNvdW50KTsKKwltZW1zZXQgKGZ4ZnItPlBhZCwgMCwgc2l6ZW9mIChmeGZyLT5QYWQpKTsKKworCVVTX0RFQlVHUCgiUmVhZCBkYXRhIEZyZWVjb20hIChjPSVkKVxuIiwgY291bnQpOworCisJLyogSXNzdWUgdGhlIHRyYW5zZmVyIGNvbW1hbmQuICovCisJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYgKHVzLCBvcGlwZSwgZnhmciwKKwkJCUZDTV9QQUNLRVRfTEVOR1RILCBOVUxMKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQlVU19ERUJVR1AgKCJGcmVlY29tIHJlYWRkYXRhIHRyYW5zcG9ydCBlcnJvclxuIik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJLyogTm93IHRyYW5zZmVyIGFsbCBvZiBvdXIgYmxvY2tzLiAqLworCVVTX0RFQlVHUCgiU3RhcnQgb2YgcmVhZFxuIik7CisJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9zZyh1cywgaXBpcGUsIHNyYi0+cmVxdWVzdF9idWZmZXIsCisJCQljb3VudCwgc3JiLT51c2Vfc2csICZzcmItPnJlc2lkKTsKKwlVU19ERUJVR1AoImZyZWVjb21fcmVhZGRhdGEgZG9uZSFcbiIpOworCisJaWYgKHJlc3VsdCA+IFVTQl9TVE9SX1hGRVJfU0hPUlQpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCitzdGF0aWMgaW50CitmcmVlY29tX3dyaXRlZGF0YSAoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCWludCB1bnNpZ25lZCBpcGlwZSwgdW5zaWduZWQgaW50IG9waXBlLCBpbnQgY291bnQpCit7CisJc3RydWN0IGZyZWVjb21feGZlcl93cmFwICpmeGZyID0KKwkJKHN0cnVjdCBmcmVlY29tX3hmZXJfd3JhcCAqKSB1cy0+aW9idWY7CisJaW50IHJlc3VsdDsKKworCWZ4ZnItPlR5cGUgPSBGQ01fUEFDS0VUX09VVFBVVCB8IDB4MDA7CisJZnhmci0+VGltZW91dCA9IDA7ICAgIC8qIFNob3J0IHRpbWVvdXQgZm9yIGRlYnVnZ2luZy4gKi8KKwlmeGZyLT5Db3VudCA9IGNwdV90b19sZTMyIChjb3VudCk7CisJbWVtc2V0IChmeGZyLT5QYWQsIDAsIHNpemVvZiAoZnhmci0+UGFkKSk7CisKKwlVU19ERUJVR1AoIldyaXRlIGRhdGEgRnJlZWNvbSEgKGM9JWQpXG4iLCBjb3VudCk7CisKKwkvKiBJc3N1ZSB0aGUgdHJhbnNmZXIgY29tbWFuZC4gKi8KKwlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1ZiAodXMsIG9waXBlLCBmeGZyLAorCQkJRkNNX1BBQ0tFVF9MRU5HVEgsIE5VTEwpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCVVTX0RFQlVHUCAoIkZyZWVjb20gd3JpdGVkYXRhIHRyYW5zcG9ydCBlcnJvclxuIik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJLyogTm93IHRyYW5zZmVyIGFsbCBvZiBvdXIgYmxvY2tzLiAqLworCVVTX0RFQlVHUCgiU3RhcnQgb2Ygd3JpdGVcbiIpOworCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2codXMsIG9waXBlLCBzcmItPnJlcXVlc3RfYnVmZmVyLAorCQkJY291bnQsIHNyYi0+dXNlX3NnLCAmc3JiLT5yZXNpZCk7CisKKwlVU19ERUJVR1AoImZyZWVjb21fd3JpdGVkYXRhIGRvbmUhXG4iKTsKKwlpZiAocmVzdWx0ID4gVVNCX1NUT1JfWEZFUl9TSE9SVCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qCisgKiBUcmFuc3BvcnQgZm9yIHRoZSBGcmVlY29tIFVTQi9JREUgYWRhcHRvci4KKyAqCisgKi8KK2ludCBmcmVlY29tX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlzdHJ1Y3QgZnJlZWNvbV9jYl93cmFwICpmY2I7CisJc3RydWN0IGZyZWVjb21fc3RhdHVzICAqZnN0OworCXVuc2lnbmVkIGludCBpcGlwZSwgb3BpcGU7CQkvKiBXZSBuZWVkIGJvdGggcGlwZXMuICovCisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgcGFydGlhbDsKKwlpbnQgbGVuZ3RoOworCisJZmNiID0gKHN0cnVjdCBmcmVlY29tX2NiX3dyYXAgKikgdXMtPmlvYnVmOworCWZzdCA9IChzdHJ1Y3QgZnJlZWNvbV9zdGF0dXMgKikgdXMtPmlvYnVmOworCisJVVNfREVCVUdQKCJGcmVlY29tIFRSQU5TUE9SVCBTVEFSVEVEXG4iKTsKKworCS8qIEdldCBoYW5kbGVzIGZvciBib3RoIHRyYW5zcG9ydHMuICovCisJb3BpcGUgPSB1cy0+c2VuZF9idWxrX3BpcGU7CisJaXBpcGUgPSB1cy0+cmVjdl9idWxrX3BpcGU7CisKKwkvKiBUaGUgQVRBUEkgQ29tbWFuZCBhbHdheXMgZ29lcyBvdXQgZmlyc3QuICovCisJZmNiLT5UeXBlID0gRkNNX1BBQ0tFVF9BVEFQSSB8IDB4MDA7CisJZmNiLT5UaW1lb3V0ID0gMDsKKwltZW1jcHkgKGZjYi0+QXRhcGksIHNyYi0+Y21uZCwgMTIpOworCW1lbXNldCAoZmNiLT5GaWxsZXIsIDAsIHNpemVvZiAoZmNiLT5GaWxsZXIpKTsKKworCVVTX0RFQlVHKHBkdW1wIChzcmItPmNtbmQsIDEyKSk7CisKKwkvKiBTZW5kIGl0IG91dC4gKi8KKwlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1ZiAodXMsIG9waXBlLCBmY2IsCisJCQlGQ01fUEFDS0VUX0xFTkdUSCwgTlVMTCk7CisKKwkvKiBUaGUgRnJlZWNvbSBkZXZpY2Ugd2lsbCBvbmx5IGZhaWwgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHdyb25nIGluCisJICogVVNCIGxhbmQuICBJdCByZXR1cm5zIHRoZSBzdGF0dXMgaW4gaXRzIG93biByZWdpc3RlcnMsIHdoaWNoCisJICogY29tZSBiYWNrIGluIHRoZSBidWxrIHBpcGUuICovCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJVVNfREVCVUdQICgiZnJlZWNvbSB0cmFuc3BvcnQgZXJyb3JcbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCS8qIFRoZXJlIGFyZSB0aW1lcyB3ZSBjYW4gb3B0aW1pemUgb3V0IHRoaXMgc3RhdHVzIHJlYWQsIGJ1dCBpdAorCSAqIGRvZXNuJ3QgaHVydCB1cyB0byBhbHdheXMgZG8gaXQgbm93LiAqLworCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmICh1cywgaXBpcGUsIGZzdCwKKwkJCUZDTV9TVEFUVVNfUEFDS0VUX0xFTkdUSCwgJnBhcnRpYWwpOworCVVTX0RFQlVHUCgiZm9vIFN0YXR1cyByZXN1bHQgJWQgJXVcbiIsIHJlc3VsdCwgcGFydGlhbCk7CisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlVU19ERUJVRyhwZHVtcCAoKHZvaWQgKikgZnN0LCBwYXJ0aWFsKSk7CisKKwkvKiBUaGUgZmlybXdhcmUgd2lsbCB0aW1lLW91dCBjb21tYW5kcyBhZnRlciAyMCBzZWNvbmRzLiBTb21lIGNvbW1hbmRzCisJICogY2FuIGxlZ2l0aW1hdGVseSB0YWtlIGxvbmdlciB0aGFuIHRoaXMsIHNvIHdlIHVzZSBhIGRpZmZlcmVudAorCSAqIGNvbW1hbmQgdGhhdCBvbmx5IHdhaXRzIGZvciB0aGUgaW50ZXJydXB0IGFuZCB0aGVuIHNlbmRzIHN0YXR1cywKKwkgKiB3aXRob3V0IGhhdmluZyB0byBzZW5kIGEgbmV3IEFUQVBJIGNvbW1hbmQgdG8gdGhlIGRldmljZS4gCisJICoKKwkgKiBOT1RFOiBUaGVyZSBpcyBzb21lIGluZGljYXRpb24gdGhhdCBhIGRhdGEgdHJhbnNmZXIgYWZ0ZXIgYSB0aW1lb3V0CisJICogbWF5IG5vdCB3b3JrLCBidXQgdGhhdCBpcyBhIGNvbmRpdGlvbiB0aGF0IHNob3VsZCBuZXZlciBoYXBwZW4uCisJICovCisJd2hpbGUgKGZzdC0+U3RhdHVzICYgRkNNX1NUQVRVU19CVVNZKSB7CisJCVVTX0RFQlVHUCgiMjAgc2Vjb25kIFVTQi9BVEFQSSBicmlkZ2UgVElNRU9VVCBvY2N1cnJlZCFcbiIpOworCQlVU19ERUJVR1AoImZzdC0+U3RhdHVzIGlzICV4XG4iLCBmc3QtPlN0YXR1cyk7CisKKwkJLyogR2V0IHRoZSBzdGF0dXMgYWdhaW4gKi8KKwkJZmNiLT5UeXBlID0gRkNNX1BBQ0tFVF9TVEFUVVM7CisJCWZjYi0+VGltZW91dCA9IDA7CisJCW1lbXNldCAoZmNiLT5BdGFwaSwgMCwgc2l6ZW9mKGZjYi0+QXRhcGkpKTsKKwkJbWVtc2V0IChmY2ItPkZpbGxlciwgMCwgc2l6ZW9mIChmY2ItPkZpbGxlcikpOworCisJCS8qIFNlbmQgaXQgb3V0LiAqLworCQlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1ZiAodXMsIG9waXBlLCBmY2IsCisJCQkJRkNNX1BBQ0tFVF9MRU5HVEgsIE5VTEwpOworCisJCS8qIFRoZSBGcmVlY29tIGRldmljZSB3aWxsIG9ubHkgZmFpbCBpZiB0aGVyZSBpcyBzb21ldGhpbmcKKwkJICogd3JvbmcgaW4gVVNCIGxhbmQuICBJdCByZXR1cm5zIHRoZSBzdGF0dXMgaW4gaXRzIG93bgorCQkgKiByZWdpc3RlcnMsIHdoaWNoIGNvbWUgYmFjayBpbiB0aGUgYnVsayBwaXBlLgorCQkgKi8KKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJCVVTX0RFQlVHUCAoImZyZWVjb20gdHJhbnNwb3J0IGVycm9yXG4iKTsKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCX0KKworCQkvKiBnZXQgdGhlIGRhdGEgKi8KKwkJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYgKHVzLCBpcGlwZSwgZnN0LAorCQkJCUZDTV9TVEFUVVNfUEFDS0VUX0xFTkdUSCwgJnBhcnRpYWwpOworCisJCVVTX0RFQlVHUCgiYmFyIFN0YXR1cyByZXN1bHQgJWQgJXVcbiIsIHJlc3VsdCwgcGFydGlhbCk7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCQlVU19ERUJVRyhwZHVtcCAoKHZvaWQgKikgZnN0LCBwYXJ0aWFsKSk7CisJfQorCisJaWYgKHBhcnRpYWwgIT0gNCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwlpZiAoKGZzdC0+U3RhdHVzICYgMSkgIT0gMCkgeworCQlVU19ERUJVR1AoIm9wZXJhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwl9CisKKwkvKiBUaGUgZGV2aWNlIG1pZ2h0IG5vdCBoYXZlIGFzIG11Y2ggZGF0YSBhdmFpbGFibGUgYXMgd2UKKwkgKiByZXF1ZXN0ZWQuICBJZiB5b3UgYXNrIGZvciBtb3JlIHRoYW4gdGhlIGRldmljZSBoYXMsIHRoaXMgcmVhZHMKKwkgKiBhbmQgc3VjaCB3aWxsIGhhbmcuICovCisJVVNfREVCVUdQKCJEZXZpY2UgaW5kaWNhdGVzIHRoYXQgaXQgaGFzICVkIGJ5dGVzIGF2YWlsYWJsZVxuIiwKKwkJCWxlMTZfdG9fY3B1IChmc3QtPkNvdW50KSk7CisJVVNfREVCVUdQKCJTQ1NJIHJlcXVlc3RlZCAlZFxuIiwgc3JiLT5yZXF1ZXN0X2J1ZmZsZW4pOworCisJLyogRmluZCB0aGUgbGVuZ3RoIHdlIGRlc2lyZSB0byByZWFkLiAqLworCXN3aXRjaCAoc3JiLT5jbW5kWzBdKSB7CisJCWNhc2UgSU5RVUlSWToKKwkJY2FzZSBSRVFVRVNUX1NFTlNFOgkJLyogMTYgb3IgMTggYnl0ZXM/IHNwZWMgc2F5cyAxOCwgbG90cyBvZiBkZXZpY2VzIG9ubHkgaGF2ZSAxNiAqLworCQljYXNlIE1PREVfU0VOU0U6CisJCWNhc2UgTU9ERV9TRU5TRV8xMDoKKwkJCWxlbmd0aCA9IGxlMTZfdG9fY3B1KGZzdC0+Q291bnQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisgCQkJbGVuZ3RoID0gc3JiLT5yZXF1ZXN0X2J1ZmZsZW47CisJfQorCisJLyogdmVyaWZ5IHRoYXQgdGhpcyBhbW91bnQgaXMgbGVnYWwgKi8KKwlpZiAobGVuZ3RoID4gc3JiLT5yZXF1ZXN0X2J1ZmZsZW4pIHsKKwkJbGVuZ3RoID0gc3JiLT5yZXF1ZXN0X2J1ZmZsZW47CisJCVVTX0RFQlVHUCgiVHJ1bmNhdGluZyByZXF1ZXN0IHRvIG1hdGNoIGJ1ZmZlciBsZW5ndGg6ICVkXG4iLCBsZW5ndGgpOworCX0KKworCS8qIFdoYXQgd2UgZG8gbm93IGRlcGVuZHMgb24gd2hhdCBkaXJlY3Rpb24gdGhlIGRhdGEgaXMgc3VwcG9zZWQgdG8KKwkgKiBtb3ZlIGluLiAqLworCisJc3dpdGNoICh1cy0+c3JiLT5zY19kYXRhX2RpcmVjdGlvbikgeworCWNhc2UgRE1BX0ZST01fREVWSUNFOgorCQkvKiBjYXRjaCBib2d1cyAicmVhZCAwIGxlbmd0aCIgY2FzZSAqLworCQlpZiAoIWxlbmd0aCkKKwkJCWJyZWFrOworCQkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgc3RhdHVzIGluZGljYXRlcyB0aGF0IHRoZSBkZXZpY2UKKwkJICogd2FudHMgZGF0YSBhcyB3ZWxsLiAqLworCQlpZiAoKGZzdC0+U3RhdHVzICYgRFJRX1NUQVQpID09IDAgfHwgKGZzdC0+UmVhc29uICYgMykgIT0gMikgeworCQkJVVNfREVCVUdQKCJTQ1NJIHdhbnRzIGRhdGEsIGRyaXZlIGRvZXNuJ3QgaGF2ZSBhbnlcbiIpOworCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCX0KKwkJcmVzdWx0ID0gZnJlZWNvbV9yZWFkZGF0YSAoc3JiLCB1cywgaXBpcGUsIG9waXBlLCBsZW5ndGgpOworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQkJcmV0dXJuIHJlc3VsdDsKKworCQlVU19ERUJVR1AoIkZDTTogV2FpdGluZyBmb3Igc3RhdHVzXG4iKTsKKwkJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYgKHVzLCBpcGlwZSwgZnN0LAorCQkJCUZDTV9QQUNLRVRfTEVOR1RILCAmcGFydGlhbCk7CisJCVVTX0RFQlVHKHBkdW1wICgodm9pZCAqKSBmc3QsIHBhcnRpYWwpKTsKKworCQlpZiAocGFydGlhbCAhPSA0IHx8IHJlc3VsdCA+IFVTQl9TVE9SX1hGRVJfU0hPUlQpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQlpZiAoKGZzdC0+U3RhdHVzICYgRVJSX1NUQVQpICE9IDApIHsKKwkJCVVTX0RFQlVHUCgib3BlcmF0aW9uIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkJfQorCQlpZiAoKGZzdC0+UmVhc29uICYgMykgIT0gMykgeworCQkJVVNfREVCVUdQKCJEcml2ZSBzZWVtcyBzdGlsbCBodW5ncnlcbiIpOworCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCX0KKwkJVVNfREVCVUdQKCJUcmFuc2ZlciBoYXBweVxuIik7CisJCWJyZWFrOworCisJY2FzZSBETUFfVE9fREVWSUNFOgorCQkvKiBjYXRjaCBib2d1cyAid3JpdGUgMCBsZW5ndGgiIGNhc2UgKi8KKwkJaWYgKCFsZW5ndGgpCisJCQlicmVhazsKKwkJLyogTWFrZSBzdXJlIHRoZSBzdGF0dXMgaW5kaWNhdGVzIHRoYXQgdGhlIGRldmljZSB3YW50cyB0bworCQkgKiBzZW5kIHVzIGRhdGEuICovCisJCS8qICEhSU1QTEVNRU5UISEgKi8KKwkJcmVzdWx0ID0gZnJlZWNvbV93cml0ZWRhdGEgKHNyYiwgdXMsIGlwaXBlLCBvcGlwZSwgbGVuZ3RoKTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCXJldHVybiByZXN1bHQ7CisKKwkJVVNfREVCVUdQKCJGQ006IFdhaXRpbmcgZm9yIHN0YXR1c1xuIik7CisJCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmICh1cywgaXBpcGUsIGZzdCwKKwkJCQlGQ01fUEFDS0VUX0xFTkdUSCwgJnBhcnRpYWwpOworCisJCWlmIChwYXJ0aWFsICE9IDQgfHwgcmVzdWx0ID4gVVNCX1NUT1JfWEZFUl9TSE9SVCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCWlmICgoZnN0LT5TdGF0dXMgJiBFUlJfU1RBVCkgIT0gMCkgeworCQkJVVNfREVCVUdQKCJvcGVyYXRpb24gZmFpbGVkXG4iKTsKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQl9CisJCWlmICgoZnN0LT5SZWFzb24gJiAzKSAhPSAzKSB7CisJCQlVU19ERUJVR1AoIkRyaXZlIHNlZW1zIHN0aWxsIGh1bmdyeVxuIik7CisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkJfQorCisJCVVTX0RFQlVHUCgiVHJhbnNmZXIgaGFwcHlcbiIpOworCQlicmVhazsKKworCisJY2FzZSBETUFfTk9ORToKKwkJLyogRWFzeSwgZG8gbm90aGluZy4gKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBzaG91bGQgbmV2ZXIgaGl0IGhlcmUgLS0gZmlsdGVyZWQgaW4gdXNiLmMgKi8KKwkJVVNfREVCVUdQICgiZnJlZWNvbSB1bmltcGxlbWVudGVkIGRpcmVjdGlvbjogJWRcbiIsCisJCQkJdXMtPnNyYi0+c2NfZGF0YV9kaXJlY3Rpb24pOworCQkvLyBSZXR1cm4gZmFpbCwgU0NTSSBzZWVtcyB0byBoYW5kbGUgdGhpcyBiZXR0ZXIuCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKK2ludAorZnJlZWNvbV9pbml0IChzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJaW50IHJlc3VsdDsKKwljaGFyICpidWZmZXIgPSB1cy0+aW9idWY7CisKKwkvKiBUaGUgRE1BLW1hcHBlZCBJL08gYnVmZmVyIGlzIDY0IGJ5dGVzIGxvbmcsIGp1c3QgcmlnaHQgZm9yCisJICogYWxsIG91ciBwYWNrZXRzLiAgTm8gbmVlZCB0byBhbGxvY2F0ZSBhbnkgZXh0cmEgYnVmZmVyIHNwYWNlLgorCSAqLworCisJcmVzdWx0ID0gdXNiX3N0b3JfY29udHJvbF9tc2codXMsIHVzLT5yZWN2X2N0cmxfcGlwZSwKKwkJCTB4NGMsIDB4YzAsIDB4NDM0NiwgMHgwLCBidWZmZXIsIDB4MjAsIDMqSFopOworCWJ1ZmZlclszMl0gPSAnXDAnOworCVVTX0RFQlVHUCgiU3RyaW5nIHJldHVybmVkIGZyb20gRkMgaW5pdCBpczogJXNcbiIsIGJ1ZmZlcik7CisKKwkvKiBTcGVjaWFsIHRoYW5rcyB0byB0aGUgcGVvcGxlIGF0IEZyZWVjb20gZm9yIHByb3ZpZGluZyBtZSB3aXRoCisJICogdGhpcyAibWFnaWMgc2VxdWVuY2UiLCB3aGljaCB0aGV5IHVzZSBpbiB0aGVpciBXaW5kb3dzIGFuZCBNYWNPUworCSAqIGRyaXZlcnMgdG8gbWFrZSBzdXJlIHRoYXQgYWxsIHRoZSBhdHRhY2hlZCBwZXJoaXBlcmFscyBhcmUKKwkgKiBwcm9wZXJseSByZXNldC4KKwkgKi8KKworCS8qIHNlbmQgcmVzZXQgKi8KKwlyZXN1bHQgPSB1c2Jfc3Rvcl9jb250cm9sX21zZyh1cywgdXMtPnNlbmRfY3RybF9waXBlLAorCQkJMHg0ZCwgMHg0MCwgMHgyNGQ4LCAweDAsIE5VTEwsIDB4MCwgMypIWik7CisJVVNfREVCVUdQKCJyZXN1bHQgZnJvbSBhY3RpdmF0ZSByZXNldCBpcyAlZFxuIiwgcmVzdWx0KTsKKworCS8qIHdhaXQgMjUwbXMgKi8KKwltZGVsYXkoMjUwKTsKKworCS8qIGNsZWFyIHJlc2V0ICovCisJcmVzdWx0ID0gdXNiX3N0b3JfY29udHJvbF9tc2codXMsIHVzLT5zZW5kX2N0cmxfcGlwZSwKKwkJCTB4NGQsIDB4NDAsIDB4MjRmOCwgMHgwLCBOVUxMLCAweDAsIDMqSFopOworCVVTX0RFQlVHUCgicmVzdWx0IGZyb20gY2xlYXIgcmVzZXQgaXMgJWRcbiIsIHJlc3VsdCk7CisKKwkvKiB3YWl0IDMgc2Vjb25kcyAqLworCW1kZWxheSgzICogMTAwMCk7CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKK2ludCB1c2Jfc3Rvcl9mcmVlY29tX3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlwcmludGsgKEtFUk5fQ1JJVCAiZnJlZWNvbSByZXNldCBjYWxsZWRcbiIpOworCisJLyogV2UgZG9uJ3QgcmVhbGx5IGhhdmUgdGhpcyBmZWF0dXJlLiAqLworCXJldHVybiBGQUlMRUQ7Cit9CisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcKK3N0YXRpYyB2b2lkIHBkdW1wICh2b2lkICppYnVmZmVyLCBpbnQgbGVuZ3RoKQoreworCXN0YXRpYyBjaGFyIGxpbmVbODBdOworCWludCBvZmZzZXQgPSAwOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIGlidWZmZXI7CisJaW50IGksIGo7CisJaW50IGZyb20sIGJhc2U7CisKKwlvZmZzZXQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworCQlpZiAoKGkgJiAxNSkgPT0gMCkgeworCQkJaWYgKGkgPiAwKSB7CisJCQkJb2Zmc2V0ICs9IHNwcmludGYgKGxpbmUrb2Zmc2V0LCAiIC0gIik7CisJCQkJZm9yIChqID0gaSAtIDE2OyBqIDwgaTsgaisrKSB7CisJCQkJCWlmIChidWZmZXJbal0gPj0gMzIgJiYgYnVmZmVyW2pdIDw9IDEyNikKKwkJCQkJCWxpbmVbb2Zmc2V0KytdID0gYnVmZmVyW2pdOworCQkJCQllbHNlCisJCQkJCQlsaW5lW29mZnNldCsrXSA9ICcuJzsKKwkJCQl9CisJCQkJbGluZVtvZmZzZXRdID0gMDsKKwkJCQlVU19ERUJVR1AoIiVzXG4iLCBsaW5lKTsKKwkJCQlvZmZzZXQgPSAwOworCQkJfQorCQkJb2Zmc2V0ICs9IHNwcmludGYgKGxpbmUrb2Zmc2V0LCAiJTA4eDoiLCBpKTsKKwkJfQorCQllbHNlIGlmICgoaSAmIDcpID09IDApIHsKKwkJCW9mZnNldCArPSBzcHJpbnRmIChsaW5lK29mZnNldCwgIiAtIik7CisJCX0KKwkJb2Zmc2V0ICs9IHNwcmludGYgKGxpbmUrb2Zmc2V0LCAiICUwMngiLCBidWZmZXJbaV0gJiAweGZmKTsKKwl9CisKKwkvKiBBZGQgdGhlIGxhc3QgImNodW5rIiBvZiBkYXRhLiAqLworCWZyb20gPSAobGVuZ3RoIC0gMSkgJSAxNjsKKwliYXNlID0gKChsZW5ndGggLSAxKSAvIDE2KSAqIDE2OworCisJZm9yIChpID0gZnJvbSArIDE7IGkgPCAxNjsgaSsrKQorCQlvZmZzZXQgKz0gc3ByaW50ZiAobGluZStvZmZzZXQsICIgICAiKTsKKwlpZiAoZnJvbSA8IDgpCisJCW9mZnNldCArPSBzcHJpbnRmIChsaW5lK29mZnNldCwgIiAgIik7CisJb2Zmc2V0ICs9IHNwcmludGYgKGxpbmUrb2Zmc2V0LCAiIC0gIik7CisKKwlmb3IgKGkgPSAwOyBpIDw9IGZyb207IGkrKykgeworCQlpZiAoYnVmZmVyW2Jhc2UraV0gPj0gMzIgJiYgYnVmZmVyW2Jhc2UraV0gPD0gMTI2KQorCQkJbGluZVtvZmZzZXQrK10gPSBidWZmZXJbYmFzZStpXTsKKwkJZWxzZQorCQkJbGluZVtvZmZzZXQrK10gPSAnLic7CisJfQorCWxpbmVbb2Zmc2V0XSA9IDA7CisJVVNfREVCVUdQKCIlc1xuIiwgbGluZSk7CisJb2Zmc2V0ID0gMDsKK30KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMDEyZDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uaApAQCAtMCwwICsxLDM2IEBACisvKiBEcml2ZXIgZm9yIEZyZWVjb20gVVNCL0lERSBhZGFwdG9yCisgKgorICogJElkOiBmcmVlY29tLmgsdiAxLjQgMjAwMC8wOC8yOSAxNDo0OToxNSBkbGJyb3duIEV4cCAkCisgKgorICogRnJlZWNvbSB2MC4xOgorICoKKyAqIEZpcnN0IHJlbGVhc2UKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDIwMDAgRGF2aWQgQnJvd24gPHVzYi1zdG9yYWdlQGRhdmlkYi5vcmc+CisgKgorICogU2VlIGZyZWVjb20uYyBmb3IgbW9yZSBleHBsYW5hdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX0ZSRUVDT01fVVNCX0gKKyNkZWZpbmUgX0ZSRUVDT01fVVNCX0gKKworZXh0ZXJuIGludCBmcmVlY29tX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7CitleHRlcm4gaW50IHVzYl9zdG9yX2ZyZWVjb21fcmVzZXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKK2V4dGVybiBpbnQgZnJlZWNvbV9pbml0IChzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaW5pdGlhbGl6ZXJzLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMDZmOTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5jCkBAIC0wLDAgKzEsOTMgQEAKKy8qIFNwZWNpYWwgSW5pdGlhbGl6ZXJzIGZvciBjZXJ0YWluIFVTQiBNYXNzIFN0b3JhZ2UgZGV2aWNlcworICoKKyAqICRJZDogaW5pdGlhbGl6ZXJzLmMsdiAxLjIgMjAwMC8wOS8wNiAyMjozNTo1NyBtZGhhcm0gRXhwICQKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDE5OTksIDIwMDAgTWF0dGhldyBEaGFybSAobWRoYXJtLXVzYkBvbmUtZXllZC1hbGllbi5uZXQpCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlICdVU0IgTWFzcyBTdG9yYWdlIENsYXNzJyBkb2N1bWVudC4gVGhpcworICogZGVzY3JpYmVzIGluIGRldGFpbCB0aGUgcHJvdG9jb2wgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHN1Y2gKKyAqIGRldmljZXMuICBDbGVhcmx5LCB0aGUgZGVzaWduZXJzIGhhZCBTQ1NJIGFuZCBBVEFQSSBjb21tYW5kcyBpbgorICogbWluZCB3aGVuIHRoZXkgY3JlYXRlZCB0aGlzIGRvY3VtZW50LiAgVGhlIGNvbW1hbmRzIGFyZSBhbGwgdmVyeQorICogc2ltaWxhciB0byBjb21tYW5kcyBpbiB0aGUgU0NTSS1JSSBhbmQgQVRBUEkgc3BlY2lmaWNhdGlvbnMuCisgKgorICogSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBpbiBhIG51bWJlciBvZiBjYXNlcyB0aGlzIGNsYXNzCisgKiBleGhpYml0cyBjbGFzcy1zcGVjaWZpYyBleGVtcHRpb25zIGZyb20gdGhlIFVTQiBzcGVjaWZpY2F0aW9uLgorICogTm90YWJseSB0aGUgdXNhZ2Ugb2YgTkFLLCBTVEFMTCBhbmQgQUNLIGRpZmZlcnMgZnJvbSB0aGUgbm9ybSwgaW4KKyAqIHRoYXQgdGhleSBhcmUgdXNlZCB0byBjb21tdW5pY2F0ZSB3YWl0LCBmYWlsZWQgYW5kIE9LIG9uIGNvbW1hbmRzLgorICoKKyAqIEFsc28sIGZvciBjZXJ0YWluIGRldmljZXMsIHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQgaXMgdXNlZCB0byBjb252ZXkKKyAqIHN0YXR1cyBvZiBhIGNvbW1hbmQuCisgKgorICogUGxlYXNlIHNlZSBodHRwOi8vd3d3Lm9uZS1leWVkLWFsaWVuLm5ldC9+bWRoYXJtL2xpbnV4LXVzYiBmb3IgbW9yZQorICogaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBkcml2ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKworI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgImluaXRpYWxpemVycy5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisKKy8qIFRoaXMgcGxhY2VzIHRoZSBTaHV0dGxlL1NDTSBVU0I8LT5TQ1NJIGJyaWRnZSBkZXZpY2VzIGluIG11bHRpLXRhcmdldAorICogbW9kZSAqLworaW50IHVzYl9zdG9yX2V1c2NzaV9pbml0KHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlpbnQgcmVzdWx0OworCisJVVNfREVCVUdQKCJBdHRlbXB0aW5nIHRvIGluaXQgZVVTQ1NJIGJyaWRnZS4uLlxuIik7CisJdXMtPmlvYnVmWzBdID0gMHgxOworCXJlc3VsdCA9IHVzYl9zdG9yX2NvbnRyb2xfbXNnKHVzLCB1cy0+c2VuZF9jdHJsX3BpcGUsCisJCQkweDBDLCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfVkVORE9SLAorCQkJMHgwMSwgMHgwLCB1cy0+aW9idWYsIDB4MSwgNSpIWik7CisJVVNfREVCVUdQKCItLSByZXN1bHQgaXMgJWRcbiIsIHJlc3VsdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyByZXF1aXJlZCB0byBhY3RpdmF0ZSBhbGwgZm91ciBzbG90cyBvbiB0aGUgVUNSLTYxUzJCCisgKiBmbGFzaCByZWFkZXIgKi8KK2ludCB1c2Jfc3Rvcl91Y3I2MXMyYl9pbml0KHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlzdHJ1Y3QgYnVsa19jYl93cmFwICpiY2IgPSAoc3RydWN0IGJ1bGtfY2Jfd3JhcCopIHVzLT5pb2J1ZjsKKwlzdHJ1Y3QgYnVsa19jc193cmFwICpiY3MgPSAoc3RydWN0IGJ1bGtfY3Nfd3JhcCopIHVzLT5pb2J1ZjsKKwlpbnQgcmVzLCBwYXJ0aWFsOworCXN0YXRpYyBjaGFyIGluaXRfc3RyaW5nW10gPSAiXHhlY1x4MGFceDA2XHgwMCRQQ0NISVBTIjsKKworCVVTX0RFQlVHUCgiU2VuZGluZyBVQ1ItNjFTMkIgaW5pdGlhbGl6YXRpb24gcGFja2V0Li4uXG4iKTsKKworCWJjYi0+U2lnbmF0dXJlID0gY3B1X3RvX2xlMzIoVVNfQlVMS19DQl9TSUdOKTsKKwliY2ItPlRhZyA9IDA7CisJYmNiLT5EYXRhVHJhbnNmZXJMZW5ndGggPSBjcHVfdG9fbGUzMigwKTsKKwliY2ItPkZsYWdzID0gYmNiLT5MdW4gPSAwOworCWJjYi0+TGVuZ3RoID0gc2l6ZW9mKGluaXRfc3RyaW5nKSAtIDE7CisJbWVtc2V0KGJjYi0+Q0RCLCAwLCBzaXplb2YoYmNiLT5DREIpKTsKKwltZW1jcHkoYmNiLT5DREIsIGluaXRfc3RyaW5nLCBzaXplb2YoaW5pdF9zdHJpbmcpIC0gMSk7CisKKwlyZXMgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnNlbmRfYnVsa19waXBlLCBiY2IsCisJCQlVU19CVUxLX0NCX1dSQVBfTEVOLCAmcGFydGlhbCk7CisJaWYocmVzKQorCQlyZXR1cm4gcmVzOworCisJVVNfREVCVUdQKCJHZXR0aW5nIHN0YXR1cyBwYWNrZXQuLi5cbiIpOworCXJlcyA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+cmVjdl9idWxrX3BpcGUsIGJjcywKKwkJCVVTX0JVTEtfQ1NfV1JBUF9MRU4sICZwYXJ0aWFsKTsKKworCXJldHVybiAocmVzID8gLTEgOiAwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaW5pdGlhbGl6ZXJzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNzIzODYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qIEhlYWRlciBmaWxlIGZvciBTcGVjaWFsIEluaXRpYWxpemVycyBmb3IgY2VydGFpbiBVU0IgTWFzcyBTdG9yYWdlIGRldmljZXMKKyAqCisgKiAkSWQ6IGluaXRpYWxpemVycy5oLHYgMS4xIDIwMDAvMDgvMjkgMjM6MDc6MDIgbWRoYXJtIEV4cCAkCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAxOTk5LCAyMDAwIE1hdHRoZXcgRGhhcm0gKG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0KQorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSAnVVNCIE1hc3MgU3RvcmFnZSBDbGFzcycgZG9jdW1lbnQuIFRoaXMKKyAqIGRlc2NyaWJlcyBpbiBkZXRhaWwgdGhlIHByb3RvY29sIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBzdWNoCisgKiBkZXZpY2VzLiAgQ2xlYXJseSwgdGhlIGRlc2lnbmVycyBoYWQgU0NTSSBhbmQgQVRBUEkgY29tbWFuZHMgaW4KKyAqIG1pbmQgd2hlbiB0aGV5IGNyZWF0ZWQgdGhpcyBkb2N1bWVudC4gIFRoZSBjb21tYW5kcyBhcmUgYWxsIHZlcnkKKyAqIHNpbWlsYXIgdG8gY29tbWFuZHMgaW4gdGhlIFNDU0ktSUkgYW5kIEFUQVBJIHNwZWNpZmljYXRpb25zLgorICoKKyAqIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgaW4gYSBudW1iZXIgb2YgY2FzZXMgdGhpcyBjbGFzcworICogZXhoaWJpdHMgY2xhc3Mtc3BlY2lmaWMgZXhlbXB0aW9ucyBmcm9tIHRoZSBVU0Igc3BlY2lmaWNhdGlvbi4KKyAqIE5vdGFibHkgdGhlIHVzYWdlIG9mIE5BSywgU1RBTEwgYW5kIEFDSyBkaWZmZXJzIGZyb20gdGhlIG5vcm0sIGluCisgKiB0aGF0IHRoZXkgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2FpdCwgZmFpbGVkIGFuZCBPSyBvbiBjb21tYW5kcy4KKyAqCisgKiBBbHNvLCBmb3IgY2VydGFpbiBkZXZpY2VzLCB0aGUgaW50ZXJydXB0IGVuZHBvaW50IGlzIHVzZWQgdG8gY29udmV5CisgKiBzdGF0dXMgb2YgYSBjb21tYW5kLgorICoKKyAqIFBsZWFzZSBzZWUgaHR0cDovL3d3dy5vbmUtZXllZC1hbGllbi5uZXQvfm1kaGFybS9saW51eC11c2IgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlICJ1c2IuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKworLyogVGhpcyBwbGFjZXMgdGhlIFNodXR0bGUvU0NNIFVTQjwtPlNDU0kgYnJpZGdlIGRldmljZXMgaW4gbXVsdGktdGFyZ2V0CisgKiBtb2RlICovCitpbnQgdXNiX3N0b3JfZXVzY3NpX2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKK2ludCBzZGRyMDlfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOworI2VuZGlmCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgdG8gYWN0aXZhdGUgYWxsIGZvdXIgc2xvdHMgb24gdGhlIFVDUi02MVMyQgorICogZmxhc2ggcmVhZGVyICovCitpbnQgdXNiX3N0b3JfdWNyNjFzMmJfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNiMzI4YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKQEAgLTAsMCArMSwxNDQyIEBACisvKiBUcmFuc3BvcnQgJiBQcm90b2NvbCBEcml2ZXIgZm9yIEluLVN5c3RlbSBEZXNpZ24sIEluYy4gSVNEMjAwIEFTSUMKKyAqCisgKiAkSWQ6IGlzZDIwMC5jLHYgMS4xNiAyMDAyLzA0LzIyIDAzOjM5OjQzIG1kaGFybSBFeHAgJAorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlOgorICogICAoQykgMjAwMS0yMDAyIEJq9nJuIFN0ZW5iZXJnIChiam9ybkBoYXh4LnNlKQorICoKKyAqIERldmVsb3BlZCB3aXRoIHRoZSBhc3Npc3RhbmNlIG9mOgorICogICAoQykgMjAwMiBBbGFuIFN0ZXJuIDxzdGVybkByb3dsYW5kLm9yZz4KKyAqCisgKiBJbml0aWFsIHdvcms6CisgKiAgIChDKSAyMDAwIEluLVN5c3RlbSBEZXNpZ24sIEluYy4gKHN1cHBvcnRAaW4tc3lzdGVtLmNvbSkKKyAqCisgKiBUaGUgSVNEMjAwIEFTSUMgZG9lcyBub3QgbmF0aXZlbHkgc3VwcG9ydCBBVEEgZGV2aWNlcy4gIFRoZSBjaGlwCisgKiBkb2VzIGltcGxlbWVudCBhbiBpbnRlcmZhY2UsIHRoZSBBVEEgQ29tbWFuZCBCbG9jayAoQVRBQ0IpIHdoaWNoIHByb3ZpZGVzCisgKiBhIG1lYW5zIG9mIHBhc3NpbmcgQVRBIGNvbW1hbmRzIGFuZCBBVEEgcmVnaXN0ZXIgYWNjZXNzZXMgdG8gYSBkZXZpY2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICogSGlzdG9yeToKKyAqCisgKiAgMjAwMi0xMC0xOTogUmVtb3ZlZCB0aGUgc3BlY2lhbGl6ZWQgdHJhbnNmZXIgcm91dGluZXMuCisgKgkJKEFsYW4gU3Rlcm4gPHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHU+KQorICogIDIwMDEtMDItMjQ6IFJlbW92ZWQgbG90cyBvZiBkdXBsaWNhdGUgY29kZSBhbmQgc2ltcGxpZmllZCB0aGUgc3RydWN0dXJlLgorICoJICAgICAgKGJqb3JuQGhheHguc2UpCisgKiAgMjAwMi0wMS0xNjogRml4ZWQgZW5kaWFubmVzcyBidWcgc28gaXQgd29ya3Mgb24gdGhlIHBwYyBhcmNoLgorICoJICAgICAgKEx1YyBTYWlsbGFyZCA8bHVjQHNhaWxsYXJkLm9yZz4pCisgKiAgMjAwMi0wMS0xNzogQWxsIGJpdGZpZWxkcyByZW1vdmVkLgorICoJICAgICAgKGJqb3JuQGhheHguc2UpCisgKi8KKworCisvKiBJbmNsdWRlIGZpbGVzICovCisKKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorCisjaW5jbHVkZSAidXNiLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgInNjc2lnbHVlLmgiCisjaW5jbHVkZSAiaXNkMjAwLmgiCisKKworLyogVGltZW91dCBkZWZpbmVzIChpbiBTZWNvbmRzKSAqLworCisjZGVmaW5lIElTRDIwMF9FTlVNX0JTWV9USU1FT1VUCQkzNQorI2RlZmluZSBJU0QyMDBfRU5VTV9ERVRFQ1RfVElNRU9VVCAgICAgIDMwCisjZGVmaW5lIElTRDIwMF9ERUZBVUxUX1RJTUVPVVQJCTMwCisKKy8qIGRldmljZSBmbGFncyAqLworI2RlZmluZSBERl9BVEFfREVWSUNFCQkweDAwMDEKKyNkZWZpbmUgREZfTUVESUFfU1RBVFVTX0VOQUJMRUQJMHgwMDAyCisjZGVmaW5lIERGX1JFTU9WQUJMRV9NRURJQQkweDAwMDQKKworLyogY2FwYWJpbGl0eSBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0FQQUJJTElUWV9ETUEJCTB4MDEKKyNkZWZpbmUgQ0FQQUJJTElUWV9MQkEJCTB4MDIKKworLyogY29tbWFuZF9zZXRYIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBDT01NQU5EU0VUX1JFTU9WQUJMRQkweDAyCisjZGVmaW5lIENPTU1BTkRTRVRfTUVESUFfU1RBVFVTIDB4MTAKKworLyogQVRBIFZlbmRvciBTcGVjaWZpYyBkZWZpbmVzICovCisjZGVmaW5lIEFUQV9BRERSRVNTX0RFVkhFQURfU1REICAgICAgMHhhMAorI2RlZmluZSBBVEFfQUREUkVTU19ERVZIRUFEX0xCQV9NT0RFIDB4NDAgICAgCisjZGVmaW5lIEFUQV9BRERSRVNTX0RFVkhFQURfU0xBVkUgICAgMHgxMAorCisvKiBBY3Rpb24gU2VsZWN0IGJpdHMgKi8KKyNkZWZpbmUgQUNUSU9OX1NFTEVDVF8wCSAgICAgMHgwMQorI2RlZmluZSBBQ1RJT05fU0VMRUNUXzEJICAgICAweDAyCisjZGVmaW5lIEFDVElPTl9TRUxFQ1RfMgkgICAgIDB4MDQKKyNkZWZpbmUgQUNUSU9OX1NFTEVDVF8zCSAgICAgMHgwOAorI2RlZmluZSBBQ1RJT05fU0VMRUNUXzQJICAgICAweDEwCisjZGVmaW5lIEFDVElPTl9TRUxFQ1RfNQkgICAgIDB4MjAKKyNkZWZpbmUgQUNUSU9OX1NFTEVDVF82CSAgICAgMHg0MAorI2RlZmluZSBBQ1RJT05fU0VMRUNUXzcJICAgICAweDgwCisKKy8qIFJlZ2lzdGVyIFNlbGVjdCBiaXRzICovCisjZGVmaW5lIFJFR19BTFRFUk5BVEVfU1RBVFVTCTB4MDEKKyNkZWZpbmUgUkVHX0RFVklDRV9DT05UUk9MCTB4MDEKKyNkZWZpbmUgUkVHX0VSUk9SCQkweDAyCisjZGVmaW5lIFJFR19GRUFUVVJFUwkJMHgwMgorI2RlZmluZSBSRUdfU0VDVE9SX0NPVU5UCTB4MDQKKyNkZWZpbmUgUkVHX1NFQ1RPUl9OVU1CRVIJMHgwOAorI2RlZmluZSBSRUdfQ1lMSU5ERVJfTE9XCTB4MTAKKyNkZWZpbmUgUkVHX0NZTElOREVSX0hJR0gJMHgyMAorI2RlZmluZSBSRUdfREVWSUNFX0hFQUQJCTB4NDAKKyNkZWZpbmUgUkVHX1NUQVRVUwkJMHg4MAorI2RlZmluZSBSRUdfQ09NTUFORAkJMHg4MAorCisvKiBBVEEgZXJyb3IgZGVmaW5pdGlvbnMgbm90IGluIDxsaW51eC9oZHJlZy5oPiAqLworI2RlZmluZSBBVEFfRVJST1JfTUVESUFfQ0hBTkdFCQkweDIwCisKKy8qIEFUQSBjb21tYW5kIGRlZmluaXRpb25zIG5vdCBpbiA8bGludXgvaGRyZWcuaD4gKi8KKyNkZWZpbmUgQVRBX0NPTU1BTkRfR0VUX01FRElBX1NUQVRVUwkweERBCisjZGVmaW5lIEFUQV9DT01NQU5EX01FRElBX0VKRUNUCQkweEVECisKKy8qIEFUQSBkcml2ZSBjb250cm9sIGRlZmluaXRpb25zICovCisjZGVmaW5lIEFUQV9EQ19ESVNBQkxFX0lOVEVSUlVQVFMJMHgwMgorI2RlZmluZSBBVEFfRENfUkVTRVRfQ09OVFJPTExFUgkJMHgwNAorI2RlZmluZSBBVEFfRENfUkVFTkFCTEVfQ09OVFJPTExFUgkweDAwCisKKy8qCisgKiAgR2VuZXJhbCBwdXJwb3NlIHJldHVybiBjb2RlcworICovIAorCisjZGVmaW5lIElTRDIwMF9FUlJPUgkJLTEKKyNkZWZpbmUgSVNEMjAwX0dPT0QJCSAwCisKKy8qCisgKiBUcmFuc3BvcnQgcmV0dXJuIGNvZGVzCisgKi8KKworI2RlZmluZSBJU0QyMDBfVFJBTlNQT1JUX0dPT0QgICAgICAgMCAgIC8qIFRyYW5zcG9ydCBnb29kLCBjb21tYW5kIGdvb2QgICAgICovCisjZGVmaW5lIElTRDIwMF9UUkFOU1BPUlRfRkFJTEVEICAgICAxICAgLyogVHJhbnNwb3J0IGdvb2QsIGNvbW1hbmQgZmFpbGVkICAgKi8KKyNkZWZpbmUgSVNEMjAwX1RSQU5TUE9SVF9FUlJPUiAgICAgIDIgICAvKiBUcmFuc3BvcnQgYmFkIChpLmUuIGRldmljZSBkZWFkKSAqLworCisvKiBkcml2ZXIgYWN0aW9uIGNvZGVzICovCisjZGVmaW5lCUFDVElPTl9SRUFEX1NUQVRVUwkwCisjZGVmaW5lCUFDVElPTl9SRVNFVAkJMQorI2RlZmluZQlBQ1RJT05fUkVFTkFCTEUJCTIKKyNkZWZpbmUJQUNUSU9OX1NPRlRfUkVTRVQJMworI2RlZmluZQlBQ1RJT05fRU5VTQkJNAorI2RlZmluZQlBQ1RJT05fSURFTlRJRlkJCTUKKworCisvKgorICogYXRhX2NkYiBzdHJ1Y3QKKyAqLworCisKK3VuaW9uIGF0YV9jZGIgeworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgU2lnbmF0dXJlQnl0ZTA7CisJCXVuc2lnbmVkIGNoYXIgU2lnbmF0dXJlQnl0ZTE7CisJCXVuc2lnbmVkIGNoYXIgQWN0aW9uU2VsZWN0OworCQl1bnNpZ25lZCBjaGFyIFJlZ2lzdGVyU2VsZWN0OworCQl1bnNpZ25lZCBjaGFyIFRyYW5zZmVyQmxvY2tTaXplOworCQl1bnNpZ25lZCBjaGFyIFdyaXRlRGF0YTNGNjsKKwkJdW5zaWduZWQgY2hhciBXcml0ZURhdGExRjE7CisJCXVuc2lnbmVkIGNoYXIgV3JpdGVEYXRhMUYyOworCQl1bnNpZ25lZCBjaGFyIFdyaXRlRGF0YTFGMzsKKwkJdW5zaWduZWQgY2hhciBXcml0ZURhdGExRjQ7CisJCXVuc2lnbmVkIGNoYXIgV3JpdGVEYXRhMUY1OworCQl1bnNpZ25lZCBjaGFyIFdyaXRlRGF0YTFGNjsKKwkJdW5zaWduZWQgY2hhciBXcml0ZURhdGExRjc7CisJCXVuc2lnbmVkIGNoYXIgUmVzZXJ2ZWRbM107CisJfSBnZW5lcmljOworCisJc3RydWN0IHsKKwkJdW5zaWduZWQgY2hhciBTaWduYXR1cmVCeXRlMDsKKwkJdW5zaWduZWQgY2hhciBTaWduYXR1cmVCeXRlMTsKKwkJdW5zaWduZWQgY2hhciBBY3Rpb25TZWxlY3Q7CisJCXVuc2lnbmVkIGNoYXIgUmVnaXN0ZXJTZWxlY3Q7CisJCXVuc2lnbmVkIGNoYXIgVHJhbnNmZXJCbG9ja1NpemU7CisJCXVuc2lnbmVkIGNoYXIgQWx0ZXJuYXRlU3RhdHVzQnl0ZTsKKwkJdW5zaWduZWQgY2hhciBFcnJvckJ5dGU7CisJCXVuc2lnbmVkIGNoYXIgU2VjdG9yQ291bnRCeXRlOworCQl1bnNpZ25lZCBjaGFyIFNlY3Rvck51bWJlckJ5dGU7CisJCXVuc2lnbmVkIGNoYXIgQ3lsaW5kZXJMb3dCeXRlOworCQl1bnNpZ25lZCBjaGFyIEN5bGluZGVySGlnaEJ5dGU7CisJCXVuc2lnbmVkIGNoYXIgRGV2aWNlSGVhZEJ5dGU7CisJCXVuc2lnbmVkIGNoYXIgU3RhdHVzQnl0ZTsKKwkJdW5zaWduZWQgY2hhciBSZXNlcnZlZFszXTsKKwl9IHJlYWQ7CisKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBjaGFyIFNpZ25hdHVyZUJ5dGUwOworCQl1bnNpZ25lZCBjaGFyIFNpZ25hdHVyZUJ5dGUxOworCQl1bnNpZ25lZCBjaGFyIEFjdGlvblNlbGVjdDsKKwkJdW5zaWduZWQgY2hhciBSZWdpc3RlclNlbGVjdDsKKwkJdW5zaWduZWQgY2hhciBUcmFuc2ZlckJsb2NrU2l6ZTsKKwkJdW5zaWduZWQgY2hhciBEZXZpY2VDb250cm9sQnl0ZTsKKwkJdW5zaWduZWQgY2hhciBGZWF0dXJlc0J5dGU7CisJCXVuc2lnbmVkIGNoYXIgU2VjdG9yQ291bnRCeXRlOworCQl1bnNpZ25lZCBjaGFyIFNlY3Rvck51bWJlckJ5dGU7CisJCXVuc2lnbmVkIGNoYXIgQ3lsaW5kZXJMb3dCeXRlOworCQl1bnNpZ25lZCBjaGFyIEN5bGluZGVySGlnaEJ5dGU7CisJCXVuc2lnbmVkIGNoYXIgRGV2aWNlSGVhZEJ5dGU7CisJCXVuc2lnbmVkIGNoYXIgQ29tbWFuZEJ5dGU7CisJCXVuc2lnbmVkIGNoYXIgUmVzZXJ2ZWRbM107CisJfSB3cml0ZTsKK307CisKKworLyoKKyAqIElucXVpcnkgZGF0YSBzdHJ1Y3R1cmUuIFRoaXMgaXMgdGhlIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgdGFyZ2V0CisgKiBhZnRlciBpdCByZWNlaXZlcyBhbiBpbnF1aXJ5LgorICoKKyAqIFRoaXMgc3RydWN0dXJlIG1heSBiZSBleHRlbmRlZCBieSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNwZWNpZmllZAorICogaW4gdGhlIGZpZWxkIEFkZGl0aW9uYWxMZW5ndGguIFRoZSBkZWZpbmVkIHNpemUgY29uc3RhbnQgb25seQorICogaW5jbHVkZXMgZmllbGRzIHRocm91Z2ggUHJvZHVjdFJldmlzaW9uTGV2ZWwuCisgKi8KKworLyoKKyAqIERldmljZVR5cGUgZmllbGQKKyAqLworI2RlZmluZSBESVJFQ1RfQUNDRVNTX0RFVklDRQkgICAgMHgwMCAgICAvKiBkaXNrcyAqLworI2RlZmluZSBERVZJQ0VfUkVNT1ZBQkxFCQkweDgwCisKK3N0cnVjdCBpbnF1aXJ5X2RhdGEgeworICAgCXVuc2lnbmVkIGNoYXIgRGV2aWNlVHlwZTsKKwl1bnNpZ25lZCBjaGFyIERldmljZVR5cGVNb2RpZmllcjsKKwl1bnNpZ25lZCBjaGFyIFZlcnNpb25zOworCXVuc2lnbmVkIGNoYXIgRm9ybWF0OyAKKwl1bnNpZ25lZCBjaGFyIEFkZGl0aW9uYWxMZW5ndGg7CisJdW5zaWduZWQgY2hhciBSZXNlcnZlZFsyXTsKKwl1bnNpZ25lZCBjaGFyIENhcGFiaWxpdHk7CisJdW5zaWduZWQgY2hhciBWZW5kb3JJZFs4XTsKKwl1bnNpZ25lZCBjaGFyIFByb2R1Y3RJZFsxNl07CisJdW5zaWduZWQgY2hhciBQcm9kdWN0UmV2aXNpb25MZXZlbFs0XTsKKwl1bnNpZ25lZCBjaGFyIFZlbmRvclNwZWNpZmljWzIwXTsKKwl1bnNpZ25lZCBjaGFyIFJlc2VydmVkM1s0MF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKKyAqIElOUVVJUlkgZGF0YSBidWZmZXIgc2l6ZQorICovCisKKyNkZWZpbmUgSU5RVUlSWURBVEFCVUZGRVJTSVpFIDM2CisKKworLyoKKyAqIElTRDIwMCBDT05GSUcgZGF0YSBzdHJ1Y3QKKyAqLworCisjZGVmaW5lIEFUQUNGR19USU1JTkcJICAweDBmCisjZGVmaW5lIEFUQUNGR19BVEFQSV9SRVNFVCAgICAgMHgxMAorI2RlZmluZSBBVEFDRkdfTUFTVEVSCSAgMHgyMAorI2RlZmluZSBBVEFDRkdfQkxPQ0tTSVpFICAgICAgIDB4YTAKKworI2RlZmluZSBBVEFDRkdFX0xBU1RfTFVOICAgICAgIDB4MDcKKyNkZWZpbmUgQVRBQ0ZHRV9ERVNDX09WRVJSSURFICAweDA4CisjZGVmaW5lIEFUQUNGR0VfU1RBVEVfU1VTUEVORCAgMHgxMAorI2RlZmluZSBBVEFDRkdFX1NLSVBfQk9PVCAgICAgIDB4MjAKKyNkZWZpbmUgQVRBQ0ZHRV9DT05GX0RFU0MyICAgICAweDQwCisjZGVmaW5lIEFUQUNGR0VfSU5JVF9TVEFUVVMgICAgMHg4MAorCisjZGVmaW5lIENGR19DQVBBQklMSVRZX1NSU1QgICAgMHgwMQorCitzdHJ1Y3QgaXNkMjAwX2NvbmZpZyB7CisJdW5zaWduZWQgY2hhciBFdmVudE5vdGlmaWNhdGlvbjsKKwl1bnNpZ25lZCBjaGFyIEV4dGVybmFsQ2xvY2s7CisJdW5zaWduZWQgY2hhciBBVEFJbml0VGltZW91dDsKKwl1bnNpZ25lZCBjaGFyIEFUQUNvbmZpZzsKKwl1bnNpZ25lZCBjaGFyIEFUQU1ham9yQ29tbWFuZDsKKwl1bnNpZ25lZCBjaGFyIEFUQU1pbm9yQ29tbWFuZDsKKwl1bnNpZ25lZCBjaGFyIEFUQUV4dHJhQ29uZmlnOworCXVuc2lnbmVkIGNoYXIgQ2FwYWJpbGl0eTsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworLyoKKyAqIElTRDIwMCBkcml2ZXIgaW5mb3JtYXRpb24gc3RydWN0CisgKi8KKworc3RydWN0IGlzZDIwMF9pbmZvIHsKKwlzdHJ1Y3QgaW5xdWlyeV9kYXRhIElucXVpcnlEYXRhOworCXN0cnVjdCBoZF9kcml2ZWlkICppZDsKKwlzdHJ1Y3QgaXNkMjAwX2NvbmZpZyBDb25maWdEYXRhOworCXVuc2lnbmVkIGNoYXIgKlJlZ3NCdWY7CisJdW5zaWduZWQgY2hhciBBVEFSZWdzWzhdOworCXVuc2lnbmVkIGNoYXIgRGV2aWNlSGVhZDsKKwl1bnNpZ25lZCBjaGFyIERldmljZUZsYWdzOworCisJLyogbWF4aW11bSBudW1iZXIgb2YgTFVOcyBzdXBwb3J0ZWQgKi8KKwl1bnNpZ25lZCBjaGFyIE1heExVTnM7CisJc3RydWN0IHNjc2lfY21uZCBzcmI7Cit9OworCisKKy8qCisgKiBSZWFkIENhcGFjaXR5IERhdGEgLSByZXR1cm5lZCBpbiBCaWcgRW5kaWFuIGZvcm1hdAorICovCisKK3N0cnVjdCByZWFkX2NhcGFjaXR5X2RhdGEgeworCV9fYmUzMiBMb2dpY2FsQmxvY2tBZGRyZXNzOworCV9fYmUzMiBCeXRlc1BlckJsb2NrOworfTsKKworLyoKKyAqIFJlYWQgQmxvY2sgTGltaXRzIERhdGEgLSByZXR1cm5lZCBpbiBCaWcgRW5kaWFuIGZvcm1hdAorICogVGhpcyBzdHJ1Y3R1cmUgcmV0dXJucyB0aGUgbWF4aW11bSBhbmQgbWluaW11bSBibG9jaworICogc2l6ZSBmb3IgYSBUQVBFIGRldmljZS4KKyAqLworCitzdHJ1Y3QgcmVhZF9ibG9ja19saW1pdHMgeworCXVuc2lnbmVkIGNoYXIgUmVzZXJ2ZWQ7CisJdW5zaWduZWQgY2hhciBCbG9ja01heGltdW1TaXplWzNdOworCXVuc2lnbmVkIGNoYXIgQmxvY2tNaW5pbXVtU2l6ZVsyXTsKK307CisKKworLyoKKyAqIFNlbnNlIERhdGEgRm9ybWF0CisgKi8KKworI2RlZmluZSBTRU5TRV9FUlJDT0RFCSAgIDB4N2YKKyNkZWZpbmUgU0VOU0VfRVJSQ09ERV9WQUxJRCAgICAgMHg4MAorI2RlZmluZSBTRU5TRV9GTEFHX1NFTlNFX0tFWSAgICAweDBmCisjZGVmaW5lIFNFTlNFX0ZMQUdfQkFEX0xFTkdUSCAgIDB4MjAKKyNkZWZpbmUgU0VOU0VfRkxBR19FTkRfT0ZfTUVESUEgMHg0MAorI2RlZmluZSBTRU5TRV9GTEFHX0ZJTEVfTUFSSyAgICAweDgwCitzdHJ1Y3Qgc2Vuc2VfZGF0YSB7CisJdW5zaWduZWQgY2hhciBFcnJvckNvZGU7CisJdW5zaWduZWQgY2hhciBTZWdtZW50TnVtYmVyOworCXVuc2lnbmVkIGNoYXIgRmxhZ3M7CisJdW5zaWduZWQgY2hhciBJbmZvcm1hdGlvbls0XTsKKwl1bnNpZ25lZCBjaGFyIEFkZGl0aW9uYWxTZW5zZUxlbmd0aDsKKwl1bnNpZ25lZCBjaGFyIENvbW1hbmRTcGVjaWZpY0luZm9ybWF0aW9uWzRdOworCXVuc2lnbmVkIGNoYXIgQWRkaXRpb25hbFNlbnNlQ29kZTsKKwl1bnNpZ25lZCBjaGFyIEFkZGl0aW9uYWxTZW5zZUNvZGVRdWFsaWZpZXI7CisJdW5zaWduZWQgY2hhciBGaWVsZFJlcGxhY2VhYmxlVW5pdENvZGU7CisJdW5zaWduZWQgY2hhciBTZW5zZUtleVNwZWNpZmljWzNdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBEZWZhdWx0IHJlcXVlc3Qgc2Vuc2UgYnVmZmVyIHNpemUKKyAqLworCisjZGVmaW5lIFNFTlNFX0JVRkZFUl9TSVpFIDE4CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSGVscGVyIHJvdXRpbmVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXNkMjAwX2J1aWxkX3NlbnNlCisgKgkJCQkJCQkJCSAKKyAqICBCdWlsZHMgYW4gYXJ0aWZpY2lhbCBzZW5zZSBidWZmZXIgdG8gcmVwb3J0IHRoZSByZXN1bHRzIG9mIGEgCisgKiAgZmFpbGVkIGNvbW1hbmQuCisgKgkJCQkJCQkJICAgICAgIAorICogUkVUVVJOUzoKKyAqICAgIHZvaWQKKyAqLworc3RhdGljIHZvaWQgaXNkMjAwX2J1aWxkX3NlbnNlKHN0cnVjdCB1c19kYXRhICp1cywgc3RydWN0IHNjc2lfY21uZCAqc3JiKQoreworCXN0cnVjdCBpc2QyMDBfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgaXNkMjAwX2luZm8gKil1cy0+ZXh0cmE7CisJc3RydWN0IHNlbnNlX2RhdGEgKmJ1ZiA9IChzdHJ1Y3Qgc2Vuc2VfZGF0YSAqKSAmc3JiLT5zZW5zZV9idWZmZXJbMF07CisJdW5zaWduZWQgY2hhciBlcnJvciA9IGluZm8tPkFUQVJlZ3NbSURFX0VSUk9SX09GRlNFVF07CisKKwlpZihlcnJvciAmIEFUQV9FUlJPUl9NRURJQV9DSEFOR0UpIHsKKwkJYnVmLT5FcnJvckNvZGUgPSAweDcwIHwgU0VOU0VfRVJSQ09ERV9WQUxJRDsKKwkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VMZW5ndGggPSAweGI7CisJCWJ1Zi0+RmxhZ3MgPSBVTklUX0FUVEVOVElPTjsKKwkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlID0gMDsKKwkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlUXVhbGlmaWVyID0gMDsKKwl9IGVsc2UgaWYoZXJyb3IgJiBNQ1JfRVJSKSB7CisJCWJ1Zi0+RXJyb3JDb2RlID0gMHg3MCB8IFNFTlNFX0VSUkNPREVfVkFMSUQ7CisJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlTGVuZ3RoID0gMHhiOworCQlidWYtPkZsYWdzID0gIFVOSVRfQVRURU5USU9OOworCQlidWYtPkFkZGl0aW9uYWxTZW5zZUNvZGUgPSAwOworCQlidWYtPkFkZGl0aW9uYWxTZW5zZUNvZGVRdWFsaWZpZXIgPSAwOworCX0gZWxzZSBpZihlcnJvciAmIFRSSzBfRVJSKSB7CisJCWJ1Zi0+RXJyb3JDb2RlID0gMHg3MCB8IFNFTlNFX0VSUkNPREVfVkFMSUQ7CisJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlTGVuZ3RoID0gMHhiOworCQlidWYtPkZsYWdzID0gIE5PVF9SRUFEWTsKKwkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlID0gMDsKKwkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlUXVhbGlmaWVyID0gMDsKKwl9IGVsc2UgaWYoZXJyb3IgJiBFQ0NfRVJSKSB7CisJCWJ1Zi0+RXJyb3JDb2RlID0gMHg3MCB8IFNFTlNFX0VSUkNPREVfVkFMSUQ7CisJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlTGVuZ3RoID0gMHhiOworCQlidWYtPkZsYWdzID0gIERBVEFfUFJPVEVDVDsKKwkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlID0gMDsKKwkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlUXVhbGlmaWVyID0gMDsKKwl9IGVsc2UgeworCQlidWYtPkVycm9yQ29kZSA9IDA7CisJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlTGVuZ3RoID0gMDsKKwkJYnVmLT5GbGFncyA9ICAwOworCQlidWYtPkFkZGl0aW9uYWxTZW5zZUNvZGUgPSAwOworCQlidWYtPkFkZGl0aW9uYWxTZW5zZUNvZGVRdWFsaWZpZXIgPSAwOworCX0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRyYW5zcG9ydCByb3V0aW5lcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIGlzZDIwMF9hY3Rpb24KKyAqCisgKiBSb3V0aW5lIGZvciBzZW5kaW5nIGNvbW1hbmRzIHRvIHRoZSBpc2QyMDAKKyAqCisgKiBSRVRVUk5TOgorICogICAgSVNEIHN0YXR1cyBjb2RlCisgKi8KK3N0YXRpYyBpbnQgaXNkMjAwX2FjdGlvbiggc3RydWN0IHVzX2RhdGEgKnVzLCBpbnQgYWN0aW9uLCAKKwkJCSAgdm9pZCogcG9pbnRlciwgaW50IHZhbHVlICkKK3sKKwl1bmlvbiBhdGFfY2RiIGF0YTsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2Ugc3JiX2RldjsKKwlzdHJ1Y3QgaXNkMjAwX2luZm8gKmluZm8gPSAoc3RydWN0IGlzZDIwMF9pbmZvICopdXMtPmV4dHJhOworCXN0cnVjdCBzY3NpX2NtbmQgKnNyYiA9ICZpbmZvLT5zcmI7CisJaW50IHN0YXR1czsKKworCW1lbXNldCgmYXRhLCAwLCBzaXplb2YoYXRhKSk7CisJbWVtc2V0KCZzcmJfZGV2LCAwLCBzaXplb2Yoc3JiX2RldikpOworCXNyYi0+ZGV2aWNlID0gJnNyYl9kZXY7CisJKytzcmItPnNlcmlhbF9udW1iZXI7CisKKwlhdGEuZ2VuZXJpYy5TaWduYXR1cmVCeXRlMCA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWFqb3JDb21tYW5kOworCWF0YS5nZW5lcmljLlNpZ25hdHVyZUJ5dGUxID0gaW5mby0+Q29uZmlnRGF0YS5BVEFNaW5vckNvbW1hbmQ7CisJYXRhLmdlbmVyaWMuVHJhbnNmZXJCbG9ja1NpemUgPSAxOworCisJc3dpdGNoICggYWN0aW9uICkgeworCWNhc2UgQUNUSU9OX1JFQURfU1RBVFVTOgorCQlVU19ERUJVR1AoIiAgIGlzZDIwMF9hY3Rpb24oUkVBRF9TVEFUVVMpXG4iKTsKKwkJYXRhLmdlbmVyaWMuQWN0aW9uU2VsZWN0ID0gQUNUSU9OX1NFTEVDVF8wfEFDVElPTl9TRUxFQ1RfMjsKKwkJYXRhLmdlbmVyaWMuUmVnaXN0ZXJTZWxlY3QgPQorCQkgIFJFR19DWUxJTkRFUl9MT1cgfCBSRUdfQ1lMSU5ERVJfSElHSCB8CisJCSAgUkVHX1NUQVRVUyB8IFJFR19FUlJPUjsKKwkJc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKKwkJc3JiLT5yZXF1ZXN0X2J1ZmZlciA9IHBvaW50ZXI7CisJCXNyYi0+cmVxdWVzdF9idWZmbGVuID0gdmFsdWU7CisJCWJyZWFrOworCisJY2FzZSBBQ1RJT05fRU5VTToKKwkJVVNfREVCVUdQKCIgICBpc2QyMDBfYWN0aW9uKEVOVU0sMHglMDJ4KVxuIix2YWx1ZSk7CisJCWF0YS5nZW5lcmljLkFjdGlvblNlbGVjdCA9IEFDVElPTl9TRUxFQ1RfMXxBQ1RJT05fU0VMRUNUXzJ8CisJCQkJCSAgIEFDVElPTl9TRUxFQ1RfM3xBQ1RJT05fU0VMRUNUXzR8CisJCQkJCSAgIEFDVElPTl9TRUxFQ1RfNTsKKwkJYXRhLmdlbmVyaWMuUmVnaXN0ZXJTZWxlY3QgPSBSRUdfREVWSUNFX0hFQUQ7CisJCWF0YS53cml0ZS5EZXZpY2VIZWFkQnl0ZSA9IHZhbHVlOworCQlzcmItPnNjX2RhdGFfZGlyZWN0aW9uID0gRE1BX05PTkU7CisJCWJyZWFrOworCisJY2FzZSBBQ1RJT05fUkVTRVQ6CisJCVVTX0RFQlVHUCgiICAgaXNkMjAwX2FjdGlvbihSRVNFVClcbiIpOworCQlhdGEuZ2VuZXJpYy5BY3Rpb25TZWxlY3QgPSBBQ1RJT05fU0VMRUNUXzF8QUNUSU9OX1NFTEVDVF8yfAorCQkJCQkgICBBQ1RJT05fU0VMRUNUXzN8QUNUSU9OX1NFTEVDVF80OworCQlhdGEuZ2VuZXJpYy5SZWdpc3RlclNlbGVjdCA9IFJFR19ERVZJQ0VfQ09OVFJPTDsKKwkJYXRhLndyaXRlLkRldmljZUNvbnRyb2xCeXRlID0gQVRBX0RDX1JFU0VUX0NPTlRST0xMRVI7CisJCXNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPSBETUFfTk9ORTsKKwkJYnJlYWs7CisKKwljYXNlIEFDVElPTl9SRUVOQUJMRToKKwkJVVNfREVCVUdQKCIgICBpc2QyMDBfYWN0aW9uKFJFRU5BQkxFKVxuIik7CisJCWF0YS5nZW5lcmljLkFjdGlvblNlbGVjdCA9IEFDVElPTl9TRUxFQ1RfMXxBQ1RJT05fU0VMRUNUXzJ8CisJCQkJCSAgIEFDVElPTl9TRUxFQ1RfM3xBQ1RJT05fU0VMRUNUXzQ7CisJCWF0YS5nZW5lcmljLlJlZ2lzdGVyU2VsZWN0ID0gUkVHX0RFVklDRV9DT05UUk9MOworCQlhdGEud3JpdGUuRGV2aWNlQ29udHJvbEJ5dGUgPSBBVEFfRENfUkVFTkFCTEVfQ09OVFJPTExFUjsKKwkJc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9IERNQV9OT05FOworCQlicmVhazsKKworCWNhc2UgQUNUSU9OX1NPRlRfUkVTRVQ6CisJCVVTX0RFQlVHUCgiICAgaXNkMjAwX2FjdGlvbihTT0ZUX1JFU0VUKVxuIik7CisJCWF0YS5nZW5lcmljLkFjdGlvblNlbGVjdCA9IEFDVElPTl9TRUxFQ1RfMXxBQ1RJT05fU0VMRUNUXzU7CisJCWF0YS5nZW5lcmljLlJlZ2lzdGVyU2VsZWN0ID0gUkVHX0RFVklDRV9IRUFEIHwgUkVHX0NPTU1BTkQ7CisJCWF0YS53cml0ZS5EZXZpY2VIZWFkQnl0ZSA9IGluZm8tPkRldmljZUhlYWQ7CisJCWF0YS53cml0ZS5Db21tYW5kQnl0ZSA9IFdJTl9TUlNUOworCQlzcmItPnNjX2RhdGFfZGlyZWN0aW9uID0gRE1BX05PTkU7CisJCWJyZWFrOworCisJY2FzZSBBQ1RJT05fSURFTlRJRlk6CisJCVVTX0RFQlVHUCgiICAgaXNkMjAwX2FjdGlvbihJREVOVElGWSlcbiIpOworCQlhdGEuZ2VuZXJpYy5SZWdpc3RlclNlbGVjdCA9IFJFR19DT01NQU5EOworCQlhdGEud3JpdGUuQ29tbWFuZEJ5dGUgPSBXSU5fSURFTlRJRlk7CisJCXNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPSBETUFfRlJPTV9ERVZJQ0U7CisJCXNyYi0+cmVxdWVzdF9idWZmZXIgPSAodm9pZCAqKSBpbmZvLT5pZDsKKwkJc3JiLT5yZXF1ZXN0X2J1ZmZsZW4gPSBzaXplb2Yoc3RydWN0IGhkX2RyaXZlaWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCVVTX0RFQlVHUCgiRXJyb3I6IFVuZGVmaW5lZCBhY3Rpb24gJWRcbiIsYWN0aW9uKTsKKwkJYnJlYWs7CisJfQorCisJbWVtY3B5KHNyYi0+Y21uZCwgJmF0YSwgc2l6ZW9mKGF0YS5nZW5lcmljKSk7CisJc3JiLT5jbWRfbGVuID0gc2l6ZW9mKGF0YS5nZW5lcmljKTsKKwlzdGF0dXMgPSB1c2Jfc3Rvcl9CdWxrX3RyYW5zcG9ydChzcmIsIHVzKTsKKwlpZiAoc3RhdHVzID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlzdGF0dXMgPSBJU0QyMDBfR09PRDsKKwllbHNlIHsKKwkJVVNfREVCVUdQKCIgICBpc2QyMDBfYWN0aW9uKDB4JTAyeCkgZXJyb3I6ICVkXG4iLGFjdGlvbixzdGF0dXMpOworCQlzdGF0dXMgPSBJU0QyMDBfRVJST1I7CisJCS8qIG5lZWQgdG8gcmVzZXQgZGV2aWNlIGhlcmUgKi8KKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlzZDIwMF9yZWFkX3JlZ3MKKyAqCQkJCQkJCQkJIAorICogUmVhZCBBVEEgUmVnaXN0ZXJzCisgKgorICogUkVUVVJOUzoKKyAqICAgIElTRCBzdGF0dXMgY29kZQorICovCitzdGF0aWMgaW50IGlzZDIwMF9yZWFkX3JlZ3MoIHN0cnVjdCB1c19kYXRhICp1cyApCit7CisJc3RydWN0IGlzZDIwMF9pbmZvICppbmZvID0gKHN0cnVjdCBpc2QyMDBfaW5mbyAqKXVzLT5leHRyYTsKKwlpbnQgcmV0U3RhdHVzID0gSVNEMjAwX0dPT0Q7CisJaW50IHRyYW5zZmVyU3RhdHVzOworCisJVVNfREVCVUdQKCJFbnRlcmluZyBpc2QyMDBfSXNzdWVBVEFSZWFkUmVnc1xuIik7CisKKwl0cmFuc2ZlclN0YXR1cyA9IGlzZDIwMF9hY3Rpb24oIHVzLCBBQ1RJT05fUkVBRF9TVEFUVVMsCisJCQkJICAgIGluZm8tPlJlZ3NCdWYsIHNpemVvZihpbmZvLT5BVEFSZWdzKSApOworCWlmICh0cmFuc2ZlclN0YXR1cyAhPSBJU0QyMDBfVFJBTlNQT1JUX0dPT0QpIHsKKwkJVVNfREVCVUdQKCIgICBFcnJvciByZWFkaW5nIEFUQSByZWdpc3RlcnNcbiIpOworCQlyZXRTdGF0dXMgPSBJU0QyMDBfRVJST1I7CisJfSBlbHNlIHsKKwkJbWVtY3B5KGluZm8tPkFUQVJlZ3MsIGluZm8tPlJlZ3NCdWYsIHNpemVvZihpbmZvLT5BVEFSZWdzKSk7CisJCVVTX0RFQlVHUCgiICAgR290IEFUQSBSZWdpc3RlcltJREVfRVJST1JfT0ZGU0VUXSA9IDB4JXhcbiIsIAorCQkJICBpbmZvLT5BVEFSZWdzW0lERV9FUlJPUl9PRkZTRVRdKTsKKwl9CisKKwlyZXR1cm4gcmV0U3RhdHVzOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW52b2tlIHRoZSB0cmFuc3BvcnQgYW5kIGJhc2ljIGVycm9yLWhhbmRsaW5nL3JlY292ZXJ5IG1ldGhvZHMKKyAqCisgKiBUaGlzIGlzIHVzZWQgYnkgdGhlIHByb3RvY29sIGxheWVycyB0byBhY3R1YWxseSBzZW5kIHRoZSBtZXNzYWdlIHRvCisgKiB0aGUgZGV2aWNlIGFuZCByZWNlaXZlIHRoZSByZXNwb25zZS4KKyAqLworc3RhdGljIHZvaWQgaXNkMjAwX2ludm9rZV90cmFuc3BvcnQoIHN0cnVjdCB1c19kYXRhICp1cywgCisJCQkgICAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIAorCQkJICAgICAgdW5pb24gYXRhX2NkYiAqYXRhQ2RiICkKK3sKKwlpbnQgbmVlZF9hdXRvX3NlbnNlID0gMDsKKwlpbnQgdHJhbnNmZXJTdGF0dXM7CisJaW50IHJlc3VsdDsKKworCS8qIHNlbmQgdGhlIGNvbW1hbmQgdG8gdGhlIHRyYW5zcG9ydCBsYXllciAqLworCW1lbWNweShzcmItPmNtbmQsIGF0YUNkYiwgc2l6ZW9mKGF0YUNkYi0+Z2VuZXJpYykpOworCXNyYi0+Y21kX2xlbiA9IHNpemVvZihhdGFDZGItPmdlbmVyaWMpOworCXRyYW5zZmVyU3RhdHVzID0gdXNiX3N0b3JfQnVsa190cmFuc3BvcnQoc3JiLCB1cyk7CisKKwkvKiBpZiB0aGUgY29tbWFuZCBnZXRzIGFib3J0ZWQgYnkgdGhlIGhpZ2hlciBsYXllcnMsIHdlIG5lZWQgdG8KKwkgKiBzaG9ydC1jaXJjdWl0IGFsbCBvdGhlciBwcm9jZXNzaW5nCisJICovCisJaWYgKHRlc3RfYml0KFVTX0ZMSURYX1RJTUVEX09VVCwgJnVzLT5mbGFncykpIHsKKwkJVVNfREVCVUdQKCItLSBjb21tYW5kIHdhcyBhYm9ydGVkXG4iKTsKKwkJZ290byBIYW5kbGVfQWJvcnQ7CisJfQorCisJc3dpdGNoICh0cmFuc2ZlclN0YXR1cykgeworCisJY2FzZSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDoKKwkJLyogSW5kaWNhdGUgYSBnb29kIHJlc3VsdCAqLworCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7CisJCWJyZWFrOworCisJY2FzZSBVU0JfU1RPUl9UUkFOU1BPUlRfTk9fU0VOU0U6CisJCVVTX0RFQlVHUCgiLS0gdHJhbnNwb3J0IGluZGljYXRlcyBwcm90b2NvbCBmYWlsdXJlXG4iKTsKKwkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CisJCXJldHVybjsKKworCWNhc2UgVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDoKKwkJVVNfREVCVUdQKCItLSB0cmFuc3BvcnQgaW5kaWNhdGVzIGNvbW1hbmQgZmFpbHVyZVxuIik7CisJCW5lZWRfYXV0b19zZW5zZSA9IDE7CisJCWJyZWFrOworCisJY2FzZSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I6CisJCVVTX0RFQlVHUCgiLS0gdHJhbnNwb3J0IGluZGljYXRlcyB0cmFuc3BvcnQgZXJyb3JcbiIpOworCQlzcmItPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJLyogTmVlZCByZXNldCBoZXJlICovCisJCXJldHVybjsKKyAgICAKKwlkZWZhdWx0OgorCQlVU19ERUJVR1AoIi0tIHRyYW5zcG9ydCBpbmRpY2F0ZXMgdW5rbm93biBlcnJvclxuIik7ICAgCisJCXNyYi0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCQkvKiBOZWVkIHJlc2V0IGhlcmUgKi8KKwkJcmV0dXJuOworCX0KKworCWlmICgoc3JiLT5yZXNpZCA+IDApICYmCisJICAgICEoKHNyYi0+Y21uZFswXSA9PSBSRVFVRVNUX1NFTlNFKSB8fAorCSAgICAgIChzcmItPmNtbmRbMF0gPT0gSU5RVUlSWSkgfHwKKwkgICAgICAoc3JiLT5jbW5kWzBdID09IE1PREVfU0VOU0UpIHx8CisJICAgICAgKHNyYi0+Y21uZFswXSA9PSBMT0dfU0VOU0UpIHx8CisJICAgICAgKHNyYi0+Y21uZFswXSA9PSBNT0RFX1NFTlNFXzEwKSkpIHsKKwkJVVNfREVCVUdQKCItLSB1bmV4cGVjdGVkbHkgc2hvcnQgdHJhbnNmZXJcbiIpOworCQluZWVkX2F1dG9fc2Vuc2UgPSAxOworCX0KKworCWlmIChuZWVkX2F1dG9fc2Vuc2UpIHsKKwkJcmVzdWx0ID0gaXNkMjAwX3JlYWRfcmVncyh1cyk7CisJCWlmICh0ZXN0X2JpdChVU19GTElEWF9USU1FRF9PVVQsICZ1cy0+ZmxhZ3MpKSB7CisJCQlVU19ERUJVR1AoIi0tIGF1dG8tc2Vuc2UgYWJvcnRlZFxuIik7CisJCQlnb3RvIEhhbmRsZV9BYm9ydDsKKwkJfQorCQlpZiAocmVzdWx0ID09IElTRDIwMF9HT09EKSB7CisJCQlpc2QyMDBfYnVpbGRfc2Vuc2UodXMsIHNyYik7CisJCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKKworCQkJLyogSWYgdGhpbmdzIGFyZSByZWFsbHkgb2theSwgdGhlbiBsZXQncyBzaG93IHRoYXQgKi8KKwkJCWlmICgoc3JiLT5zZW5zZV9idWZmZXJbMl0gJiAweGYpID09IDB4MCkKKwkJCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7CisJCX0gZWxzZSB7CisJCQlzcmItPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJCS8qIE5lZWQgcmVzZXQgaGVyZSAqLworCQl9CisJfQorCisJLyogUmVnYXJkbGVzcyBvZiBhdXRvLXNlbnNlLCBpZiB3ZSBfa25vd18gd2UgaGF2ZSBhbiBlcnJvcgorCSAqIGNvbmRpdGlvbiwgc2hvdyB0aGF0IGluIHRoZSByZXN1bHQgY29kZQorCSAqLworCWlmICh0cmFuc2ZlclN0YXR1cyA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEKQorCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKKwlyZXR1cm47CisKKwkvKiBhYm9ydCBwcm9jZXNzaW5nOiB0aGUgYnVsay1vbmx5IHRyYW5zcG9ydCByZXF1aXJlcyBhIHJlc2V0CisJICogZm9sbG93aW5nIGFuIGFib3J0ICovCisJSGFuZGxlX0Fib3J0OgorCXNyYi0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OworCisJLyogcGVybWl0IHRoZSByZXNldCB0cmFuc2ZlciB0byB0YWtlIHBsYWNlICovCisJY2xlYXJfYml0KFVTX0ZMSURYX0FCT1JUSU5HLCAmdXMtPmZsYWdzKTsKKwkvKiBOZWVkIHJlc2V0IGhlcmUgKi8KK30KKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRworc3RhdGljIHZvaWQgaXNkMjAwX2xvZ19jb25maWcoIHN0cnVjdCBpc2QyMDBfaW5mbyogaW5mbyApCit7CisJVVNfREVCVUdQKCIgICAgICBFdmVudCBOb3RpZmljYXRpb246IDB4JXhcbiIsIAorCQkgIGluZm8tPkNvbmZpZ0RhdGEuRXZlbnROb3RpZmljYXRpb24pOworCVVTX0RFQlVHUCgiICAgICAgRXh0ZXJuYWwgQ2xvY2s6IDB4JXhcbiIsIAorCQkgIGluZm8tPkNvbmZpZ0RhdGEuRXh0ZXJuYWxDbG9jayk7CisJVVNfREVCVUdQKCIgICAgICBBVEEgSW5pdCBUaW1lb3V0OiAweCV4XG4iLCAKKwkJICBpbmZvLT5Db25maWdEYXRhLkFUQUluaXRUaW1lb3V0KTsKKwlVU19ERUJVR1AoIiAgICAgIEFUQVBJIENvbW1hbmQgQmxvY2sgU2l6ZTogMHgleFxuIiwgCisJCSAgKGluZm8tPkNvbmZpZ0RhdGEuQVRBQ29uZmlnICYgQVRBQ0ZHX0JMT0NLU0laRSkgPj4gNik7CisJVVNfREVCVUdQKCIgICAgICBNYXN0ZXIvU2xhdmUgU2VsZWN0aW9uOiAweCV4XG4iLCAKKwkJICBpbmZvLT5Db25maWdEYXRhLkFUQUNvbmZpZyAmIEFUQUNGR19NQVNURVIpOworCVVTX0RFQlVHUCgiICAgICAgQVRBUEkgUmVzZXQ6IDB4JXhcbiIsCisJCSAgaW5mby0+Q29uZmlnRGF0YS5BVEFDb25maWcgJiBBVEFDRkdfQVRBUElfUkVTRVQpOworCVVTX0RFQlVHUCgiICAgICAgQVRBIFRpbWluZzogMHgleFxuIiwKKwkJICBpbmZvLT5Db25maWdEYXRhLkFUQUNvbmZpZyAmIEFUQUNGR19USU1JTkcpOworCVVTX0RFQlVHUCgiICAgICAgQVRBIE1ham9yIENvbW1hbmQ6IDB4JXhcbiIsIAorCQkgIGluZm8tPkNvbmZpZ0RhdGEuQVRBTWFqb3JDb21tYW5kKTsKKwlVU19ERUJVR1AoIiAgICAgIEFUQSBNaW5vciBDb21tYW5kOiAweCV4XG4iLCAKKwkJICBpbmZvLT5Db25maWdEYXRhLkFUQU1pbm9yQ29tbWFuZCk7CisJVVNfREVCVUdQKCIgICAgICBJbml0IFN0YXR1czogMHgleFxuIiwgCisJCSAgaW5mby0+Q29uZmlnRGF0YS5BVEFFeHRyYUNvbmZpZyAmIEFUQUNGR0VfSU5JVF9TVEFUVVMpOworCVVTX0RFQlVHUCgiICAgICAgQ29uZmlnIERlc2NyaXB0b3IgMjogMHgleFxuIiwgCisJCSAgaW5mby0+Q29uZmlnRGF0YS5BVEFFeHRyYUNvbmZpZyAmIEFUQUNGR0VfQ09ORl9ERVNDMik7CisJVVNfREVCVUdQKCIgICAgICBTa2lwIERldmljZSBCb290OiAweCV4XG4iLAorCQkgIGluZm8tPkNvbmZpZ0RhdGEuQVRBRXh0cmFDb25maWcgJiBBVEFDRkdFX1NLSVBfQk9PVCk7CisJVVNfREVCVUdQKCIgICAgICBBVEEgMyBTdGF0ZSBTdXBzZW5kOiAweCV4XG4iLAorCQkgIGluZm8tPkNvbmZpZ0RhdGEuQVRBRXh0cmFDb25maWcgJiBBVEFDRkdFX1NUQVRFX1NVU1BFTkQpOworCVVTX0RFQlVHUCgiICAgICAgRGVzY3JpcHRvciBPdmVycmlkZTogMHgleFxuIiwgCisJCSAgaW5mby0+Q29uZmlnRGF0YS5BVEFFeHRyYUNvbmZpZyAmIEFUQUNGR0VfREVTQ19PVkVSUklERSk7CisJVVNfREVCVUdQKCIgICAgICBMYXN0IExVTiBJZGVudGlmaWVyOiAweCV4XG4iLAorCQkgIGluZm8tPkNvbmZpZ0RhdGEuQVRBRXh0cmFDb25maWcgJiBBVEFDRkdFX0xBU1RfTFVOKTsKKwlVU19ERUJVR1AoIiAgICAgIFNSU1QgRW5hYmxlOiAweCV4XG4iLCAKKwkJICBpbmZvLT5Db25maWdEYXRhLkFUQUV4dHJhQ29uZmlnICYgQ0ZHX0NBUEFCSUxJVFlfU1JTVCk7Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpc2QyMDBfd3JpdGVfY29uZmlnCisgKgkJCQkJCQkJCSAKKyAqIFdyaXRlIHRoZSBJU0QyMDAgQ29uZmlndXJhdGlvbiBkYXRhCisgKgorICogUkVUVVJOUzoKKyAqICAgIElTRCBzdGF0dXMgY29kZQorICovCitzdGF0aWMgaW50IGlzZDIwMF93cml0ZV9jb25maWcoIHN0cnVjdCB1c19kYXRhICp1cyApIAoreworCXN0cnVjdCBpc2QyMDBfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgaXNkMjAwX2luZm8gKil1cy0+ZXh0cmE7CisJaW50IHJldFN0YXR1cyA9IElTRDIwMF9HT09EOworCWludCByZXN1bHQ7CisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcKKwlVU19ERUJVR1AoIkVudGVyaW5nIGlzZDIwMF93cml0ZV9jb25maWdcbiIpOworCVVTX0RFQlVHUCgiICAgV3JpdGluZyB0aGUgZm9sbG93aW5nIElTRDIwMCBDb25maWcgRGF0YTpcbiIpOworCWlzZDIwMF9sb2dfY29uZmlnKGluZm8pOworI2VuZGlmCisKKwkvKiBsZXQncyBzZW5kIHRoZSBjb21tYW5kIHZpYSB0aGUgY29udHJvbCBwaXBlICovCisJcmVzdWx0ID0gdXNiX3N0b3JfY3RybF90cmFuc2ZlcigKKwkJdXMsIAorCQl1cy0+c2VuZF9jdHJsX3BpcGUsCisJCTB4MDEsIAorCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9PVVQsCisJCTB4MDAwMCwgCisJCTB4MDAwMiwgCisJCSh2b2lkICopICZpbmZvLT5Db25maWdEYXRhLCAKKwkJc2l6ZW9mKGluZm8tPkNvbmZpZ0RhdGEpKTsKKworCWlmIChyZXN1bHQgPj0gMCkgeworCQlVU19ERUJVR1AoIiAgIElTRDIwMCBDb25maWcgRGF0YSB3YXMgd3JpdHRlbiBzdWNjZXNzZnVsbHlcbiIpOworCX0gZWxzZSB7CisJCVVTX0RFQlVHUCgiICAgUmVxdWVzdCB0byB3cml0ZSBJU0QyMDAgQ29uZmlnIERhdGEgZmFpbGVkIVxuIik7CisJCXJldFN0YXR1cyA9IElTRDIwMF9FUlJPUjsKKwl9CisKKwlVU19ERUJVR1AoIkxlYXZpbmcgaXNkMjAwX3dyaXRlX2NvbmZpZyAlMDhYXG4iLCByZXRTdGF0dXMpOworCXJldHVybiByZXRTdGF0dXM7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpc2QyMDBfcmVhZF9jb25maWcKKyAqCQkJCQkJCQkJIAorICogUmVhZHMgdGhlIElTRDIwMCBDb25maWd1cmF0aW9uIGRhdGEKKyAqCisgKiBSRVRVUk5TOgorICogICAgSVNEIHN0YXR1cyBjb2RlCisgKi8KK3N0YXRpYyBpbnQgaXNkMjAwX3JlYWRfY29uZmlnKCBzdHJ1Y3QgdXNfZGF0YSAqdXMgKSAKK3sKKwlzdHJ1Y3QgaXNkMjAwX2luZm8gKmluZm8gPSAoc3RydWN0IGlzZDIwMF9pbmZvICopdXMtPmV4dHJhOworCWludCByZXRTdGF0dXMgPSBJU0QyMDBfR09PRDsKKwlpbnQgcmVzdWx0OworCisJVVNfREVCVUdQKCJFbnRlcmluZyBpc2QyMDBfcmVhZF9jb25maWdcbiIpOworCisJLyogcmVhZCB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmcm9tIElTRDIwMC4gIFVzZSB0aGlzIHRvICovCisJLyogZGV0ZXJtaW5lIHdoYXQgdGhlIHNwZWNpYWwgQVRBIENEQiBieXRlcyBhcmUuCQkqLworCisJcmVzdWx0ID0gdXNiX3N0b3JfY3RybF90cmFuc2ZlcigKKwkJdXMsIAorCQl1cy0+cmVjdl9jdHJsX3BpcGUsCisJCTB4MDIsIAorCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKKwkJMHgwMDAwLCAKKwkJMHgwMDAyLCAKKwkJKHZvaWQgKikgJmluZm8tPkNvbmZpZ0RhdGEsIAorCQlzaXplb2YoaW5mby0+Q29uZmlnRGF0YSkpOworCisKKwlpZiAocmVzdWx0ID49IDApIHsKKwkJVVNfREVCVUdQKCIgICBSZXRyaWV2ZWQgdGhlIGZvbGxvd2luZyBJU0QyMDAgQ29uZmlnIERhdGE6XG4iKTsKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcKKwkJaXNkMjAwX2xvZ19jb25maWcoaW5mbyk7CisjZW5kaWYKKwl9IGVsc2UgeworCQlVU19ERUJVR1AoIiAgIFJlcXVlc3QgdG8gZ2V0IElTRDIwMCBDb25maWcgRGF0YSBmYWlsZWQhXG4iKTsKKwkJcmV0U3RhdHVzID0gSVNEMjAwX0VSUk9SOworCX0KKworCVVTX0RFQlVHUCgiTGVhdmluZyBpc2QyMDBfcmVhZF9jb25maWcgJTA4WFxuIiwgcmV0U3RhdHVzKTsKKwlyZXR1cm4gcmV0U3RhdHVzOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXNkMjAwX2F0YXBpX3NvZnRfcmVzZXQKKyAqCQkJCQkJCQkJIAorICogUGVyZm9ybSBhbiBBdGFwaSBTb2Z0IFJlc2V0IG9uIHRoZSBkZXZpY2UKKyAqCisgKiBSRVRVUk5TOgorICogICAgTlQgc3RhdHVzIGNvZGUKKyAqLworc3RhdGljIGludCBpc2QyMDBfYXRhcGlfc29mdF9yZXNldCggc3RydWN0IHVzX2RhdGEgKnVzICkgCit7CisJaW50IHJldFN0YXR1cyA9IElTRDIwMF9HT09EOworCWludCB0cmFuc2ZlclN0YXR1czsKKworCVVTX0RFQlVHUCgiRW50ZXJpbmcgaXNkMjAwX2F0YXBpX3NvZnRfcmVzZXRcbiIpOworCisJdHJhbnNmZXJTdGF0dXMgPSBpc2QyMDBfYWN0aW9uKCB1cywgQUNUSU9OX1NPRlRfUkVTRVQsIE5VTEwsIDAgKTsKKwlpZiAodHJhbnNmZXJTdGF0dXMgIT0gSVNEMjAwX1RSQU5TUE9SVF9HT09EKSB7CisJCVVTX0RFQlVHUCgiICAgRXJyb3IgaXNzdWluZyBBdGFwaSBTb2Z0IFJlc2V0XG4iKTsKKwkJcmV0U3RhdHVzID0gSVNEMjAwX0VSUk9SOworCX0KKworCVVTX0RFQlVHUCgiTGVhdmluZyBpc2QyMDBfYXRhcGlfc29mdF9yZXNldCAlMDhYXG4iLCByZXRTdGF0dXMpOworCXJldHVybiByZXRTdGF0dXM7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpc2QyMDBfc3JzdAorICoJCQkJCQkJCQkgCisgKiBQZXJmb3JtIGFuIFNSU1Qgb24gdGhlIGRldmljZQorICoKKyAqIFJFVFVSTlM6CisgKiAgICBJU0Qgc3RhdHVzIGNvZGUKKyAqLworc3RhdGljIGludCBpc2QyMDBfc3JzdCggc3RydWN0IHVzX2RhdGEgKnVzICkgCit7CisJaW50IHJldFN0YXR1cyA9IElTRDIwMF9HT09EOworCWludCB0cmFuc2ZlclN0YXR1czsKKworCVVTX0RFQlVHUCgiRW50ZXJpbmcgaXNkMjAwX1NSU1RcbiIpOworCisJdHJhbnNmZXJTdGF0dXMgPSBpc2QyMDBfYWN0aW9uKCB1cywgQUNUSU9OX1JFU0VULCBOVUxMLCAwICk7CisKKwkvKiBjaGVjayB0byBzZWUgaWYgdGhpcyByZXF1ZXN0IGZhaWxlZCAqLworCWlmICh0cmFuc2ZlclN0YXR1cyAhPSBJU0QyMDBfVFJBTlNQT1JUX0dPT0QpIHsKKwkJVVNfREVCVUdQKCIgICBFcnJvciBpc3N1aW5nIFNSU1RcbiIpOworCQlyZXRTdGF0dXMgPSBJU0QyMDBfRVJST1I7CisJfSBlbHNlIHsKKwkJLyogZGVsYXkgMTBtcyB0byBnaXZlIHRoZSBkcml2ZSBhIGNoYW5jZSB0byBzZWUgaXQgKi8KKwkJbXNsZWVwKDEwKTsKKworCQl0cmFuc2ZlclN0YXR1cyA9IGlzZDIwMF9hY3Rpb24oIHVzLCBBQ1RJT05fUkVFTkFCTEUsIE5VTEwsIDAgKTsKKwkJaWYgKHRyYW5zZmVyU3RhdHVzICE9IElTRDIwMF9UUkFOU1BPUlRfR09PRCkgeworCQkJVVNfREVCVUdQKCIgICBFcnJvciB0YWtpbmcgZHJpdmUgb3V0IG9mIHJlc2V0XG4iKTsKKwkJCXJldFN0YXR1cyA9IElTRDIwMF9FUlJPUjsKKwkJfSBlbHNlIHsKKwkJCS8qIGRlbGF5IDUwbXMgdG8gZ2l2ZSB0aGUgZHJpdmUgYSBjaGFuY2UgdG8gcmVjb3ZlciBhZnRlciBTUlNUICovCisJCQltc2xlZXAoNTApOworCQl9CisJfQorCisJVVNfREVCVUdQKCJMZWF2aW5nIGlzZDIwMF9zcnN0ICUwOFhcbiIsIHJldFN0YXR1cyk7CisJcmV0dXJuIHJldFN0YXR1czsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlzZDIwMF90cnlfZW51bQorICoJCQkJCQkJCQkgCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGlzZDIwMF9tYW51YWxfZW51bSgpLiBEb2VzIEVOVU0gYW5kIFJFQURfU1RBVFVTCisgKiBhbmQgdHJpZXMgdG8gYW5hbHl6ZSB0aGUgc3RhdHVzIHJlZ2lzdGVycworICoKKyAqIFJFVFVSTlM6CisgKiAgICBJU0Qgc3RhdHVzIGNvZGUKKyAqLworc3RhdGljIGludCBpc2QyMDBfdHJ5X2VudW0oc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBjaGFyIG1hc3Rlcl9zbGF2ZSwKKwkJCSAgIGludCBkZXRlY3QgKQoreworCWludCBzdGF0dXMgPSBJU0QyMDBfR09PRDsKKwl1bnNpZ25lZCBsb25nIGVuZFRpbWU7CisJc3RydWN0IGlzZDIwMF9pbmZvICppbmZvID0gKHN0cnVjdCBpc2QyMDBfaW5mbyAqKXVzLT5leHRyYTsKKwl1bnNpZ25lZCBjaGFyICpyZWdzID0gaW5mby0+UmVnc0J1ZjsKKwlpbnQgcmVjaGVja0FzTWFzdGVyID0gMDsKKworCWlmICggZGV0ZWN0ICkKKwkJZW5kVGltZSA9IGppZmZpZXMgKyBJU0QyMDBfRU5VTV9ERVRFQ1RfVElNRU9VVCAqIEhaOworCWVsc2UKKwkJZW5kVGltZSA9IGppZmZpZXMgKyBJU0QyMDBfRU5VTV9CU1lfVElNRU9VVCAqIEhaOworCisJLyogbG9vcCB1bnRpbCB3ZSBkZXRlY3QgIUJTWSBvciB0aW1lb3V0ICovCisJd2hpbGUoMSkgeworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRworCQljaGFyKiBtc3RyID0gbWFzdGVyX3NsYXZlID09IEFUQV9BRERSRVNTX0RFVkhFQURfU1REID8KKwkJCSJNYXN0ZXIiIDogIlNsYXZlIjsKKyNlbmRpZgorCisJCXN0YXR1cyA9IGlzZDIwMF9hY3Rpb24oIHVzLCBBQ1RJT05fRU5VTSwgTlVMTCwgbWFzdGVyX3NsYXZlICk7CisJCWlmICggc3RhdHVzICE9IElTRDIwMF9HT09EICkKKwkJCWJyZWFrOworCisJCXN0YXR1cyA9IGlzZDIwMF9hY3Rpb24oIHVzLCBBQ1RJT05fUkVBRF9TVEFUVVMsIAorCQkJCQlyZWdzLCA4ICk7CisJCWlmICggc3RhdHVzICE9IElTRDIwMF9HT09EICkKKwkJCWJyZWFrOworCisJCWlmICghZGV0ZWN0KSB7CisJCQlpZiAocmVnc1tJREVfU1RBVFVTX09GRlNFVF0gJiBCVVNZX1NUQVQgKSB7CisJCQkJVVNfREVCVUdQKCIgICAlcyBzdGF0dXMgaXMgc3RpbGwgQlNZLCB0cnkgYWdhaW4uLi5cbiIsbXN0cik7CisJCQl9IGVsc2UgeworCQkJCVVTX0RFQlVHUCgiICAgJXMgc3RhdHVzICFCU1ksIGNvbnRpbnVlIHdpdGggbmV4dCBvcGVyYXRpb25cbiIsbXN0cik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJLyogY2hlY2sgZm9yIEJVU1lfU1RBVCBhbmQgKi8KKwkJLyogV1JFUlJfU1RBVCAod29ya2Fyb3VuZCBBVEEgWmlwIGRyaXZlKSBhbmQgKi8gCisJCS8qIEVSUl9TVEFUICh3b3JrYXJvdW5kIGZvciBBcmNob3MgQ0QtUk9NKSAqLworCQllbHNlIGlmIChyZWdzW0lERV9TVEFUVVNfT0ZGU0VUXSAmIAorCQkJIChCVVNZX1NUQVQgfCBXUkVSUl9TVEFUIHwgRVJSX1NUQVQgKSkgeworCQkJVVNfREVCVUdQKCIgICBTdGF0dXMgaW5kaWNhdGVzIGl0IGlzIG5vdCByZWFkeSwgdHJ5IGFnYWluLi4uXG4iKTsKKwkJfQorCQkvKiBjaGVjayBmb3IgRFJEWSwgQVRBIGRldmljZXMgc2V0IERSRFkgYWZ0ZXIgU1JTVCAqLworCQllbHNlIGlmIChyZWdzW0lERV9TVEFUVVNfT0ZGU0VUXSAmIFJFQURZX1NUQVQpIHsKKwkJCVVTX0RFQlVHUCgiICAgSWRlbnRpZmllZCBBVEEgZGV2aWNlXG4iKTsKKwkJCWluZm8tPkRldmljZUZsYWdzIHw9IERGX0FUQV9ERVZJQ0U7CisJCQlpbmZvLT5EZXZpY2VIZWFkID0gbWFzdGVyX3NsYXZlOworCQkJYnJlYWs7CisJCX0gCisJCS8qIGNoZWNrIEN5bGluZGVyIEhpZ2gvTG93IHRvCisJCSAgIGRldGVybWluZSBpZiBpdCBpcyBhbiBBVEFQSSBkZXZpY2UKKwkJKi8KKwkJZWxzZSBpZiAoKHJlZ3NbSURFX0hDWUxfT0ZGU0VUXSA9PSAweEVCKSAmJgorCQkJIChyZWdzW0lERV9MQ1lMX09GRlNFVF0gPT0gMHgxNCkpIHsKKwkJCS8qIEl0IHNlZW1zIHRoYXQgdGhlIFJJQ09IIAorCQkJICAgTVA2MjAwQSBDRC9SVyBkcml2ZSB3aWxsIAorCQkJICAgcmVwb3J0IGl0c2VsZiBva2F5IGFzIGEKKwkJCSAgIHNsYXZlIHdoZW4gaXQgaXMgcmVhbGx5IGEKKwkJCSAgIG1hc3Rlci4gU28gdGhpcyBjaGVjayBhZ2FpbgorCQkJICAgYXMgYSBtYXN0ZXIgZGV2aWNlIGp1c3QgdG8KKwkJCSAgIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IHJlcG9ydAorCQkJICAgaXRzZWxmIG9rYXkgYXMgYSBtYXN0ZXIgYWxzbworCQkJKi8KKwkJCWlmICgobWFzdGVyX3NsYXZlICYgQVRBX0FERFJFU1NfREVWSEVBRF9TTEFWRSkgJiYKKwkJCSAgICAhcmVjaGVja0FzTWFzdGVyKSB7CisJCQkJVVNfREVCVUdQKCIgICBJZGVudGlmaWVkIEFUQVBJIGRldmljZSBhcyBzbGF2ZS4gIFJlY2hlY2tpbmcgYWdhaW4gYXMgbWFzdGVyXG4iKTsKKwkJCQlyZWNoZWNrQXNNYXN0ZXIgPSAxOworCQkJCW1hc3Rlcl9zbGF2ZSA9IEFUQV9BRERSRVNTX0RFVkhFQURfU1REOworCQkJfSBlbHNlIHsKKwkJCQlVU19ERUJVR1AoIiAgIElkZW50aWZpZWQgQVRBUEkgZGV2aWNlXG4iKTsKKwkJCQlpbmZvLT5EZXZpY2VIZWFkID0gbWFzdGVyX3NsYXZlOworCQkJICAgICAgCisJCQkJc3RhdHVzID0gaXNkMjAwX2F0YXBpX3NvZnRfcmVzZXQodXMpOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworIAkJCVVTX0RFQlVHUCgiICAgTm90IEFUQSwgbm90IEFUQVBJLiBXZWlyZC5cbiIpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBjaGVjayBmb3IgdGltZW91dCBvbiB0aGlzIHJlcXVlc3QgKi8KKwkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgZW5kVGltZSkpIHsKKwkJCWlmICghZGV0ZWN0KQorCQkJCVVTX0RFQlVHUCgiICAgQlNZIGNoZWNrIHRpbWVvdXQsIGp1c3QgY29udGludWUgd2l0aCBuZXh0IG9wZXJhdGlvbi4uLlxuIik7CisJCQllbHNlCisJCQkJVVNfREVCVUdQKCIgICBEZXZpY2UgZGV0ZWN0IHRpbWVvdXQhXG4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpc2QyMDBfbWFudWFsX2VudW0KKyAqCQkJCQkJCQkJIAorICogRGV0ZXJtaW5lcyBpZiB0aGUgZHJpdmUgYXR0YWNoZWQgaXMgYW4gQVRBIG9yIEFUQVBJIGFuZCBpZiBpdCBpcyBhCisgKiBtYXN0ZXIgb3Igc2xhdmUuCisgKgorICogUkVUVVJOUzoKKyAqICAgIElTRCBzdGF0dXMgY29kZQorICovCitzdGF0aWMgaW50IGlzZDIwMF9tYW51YWxfZW51bShzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJc3RydWN0IGlzZDIwMF9pbmZvICppbmZvID0gKHN0cnVjdCBpc2QyMDBfaW5mbyAqKXVzLT5leHRyYTsKKwlpbnQgcmV0U3RhdHVzID0gSVNEMjAwX0dPT0Q7CisKKwlVU19ERUJVR1AoIkVudGVyaW5nIGlzZDIwMF9tYW51YWxfZW51bVxuIik7CisKKwlyZXRTdGF0dXMgPSBpc2QyMDBfcmVhZF9jb25maWcodXMpOworCWlmIChyZXRTdGF0dXMgPT0gSVNEMjAwX0dPT0QpIHsKKwkJaW50IGlzc2xhdmU7CisJCS8qIG1hc3RlciBvciBzbGF2ZT8gKi8KKwkJcmV0U3RhdHVzID0gaXNkMjAwX3RyeV9lbnVtKCB1cywgQVRBX0FERFJFU1NfREVWSEVBRF9TVEQsIDApOworCQlpZiAocmV0U3RhdHVzID09IElTRDIwMF9HT09EKQorCQkJcmV0U3RhdHVzID0gaXNkMjAwX3RyeV9lbnVtKCB1cywgQVRBX0FERFJFU1NfREVWSEVBRF9TTEFWRSwgMCk7CisKKwkJaWYgKHJldFN0YXR1cyA9PSBJU0QyMDBfR09PRCkgeworCQkJcmV0U3RhdHVzID0gaXNkMjAwX3Nyc3QodXMpOworCQkJaWYgKHJldFN0YXR1cyA9PSBJU0QyMDBfR09PRCkKKwkJCQkvKiBhdGEgb3IgYXRhcGk/ICovCisJCQkJcmV0U3RhdHVzID0gaXNkMjAwX3RyeV9lbnVtKCB1cywgQVRBX0FERFJFU1NfREVWSEVBRF9TVEQsIDEpOworCQl9CisKKwkJaXNzbGF2ZSA9IChpbmZvLT5EZXZpY2VIZWFkICYgQVRBX0FERFJFU1NfREVWSEVBRF9TTEFWRSkgPyAxIDogMDsKKwkJaWYgKCEoaW5mby0+Q29uZmlnRGF0YS5BVEFDb25maWcgJiBBVEFDRkdfTUFTVEVSKSkgeworCQkJVVNfREVCVUdQKCIgICBTZXR0aW5nIE1hc3Rlci9TbGF2ZSBzZWxlY3Rpb24gdG8gJWRcbiIsIGlzc2xhdmUpOworCQkJaW5mby0+Q29uZmlnRGF0YS5BVEFDb25maWcgJj0gMHgzZjsKKwkJCWluZm8tPkNvbmZpZ0RhdGEuQVRBQ29uZmlnIHw9IChpc3NsYXZlPDw2KTsKKwkJCXJldFN0YXR1cyA9IGlzZDIwMF93cml0ZV9jb25maWcodXMpOworCQl9CisJfQorCisJVVNfREVCVUdQKCJMZWF2aW5nIGlzZDIwMF9tYW51YWxfZW51bSAlMDhYXG4iLCByZXRTdGF0dXMpOworCXJldHVybihyZXRTdGF0dXMpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXNkMjAwX2dldF9pbnF1aXJ5X2RhdGEKKyAqCisgKiBHZXQgaW5xdWlyeSBkYXRhCisgKgorICogUkVUVVJOUzoKKyAqICAgIElTRCBzdGF0dXMgY29kZQorICovCitzdGF0aWMgaW50IGlzZDIwMF9nZXRfaW5xdWlyeV9kYXRhKCBzdHJ1Y3QgdXNfZGF0YSAqdXMgKQoreworCXN0cnVjdCBpc2QyMDBfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgaXNkMjAwX2luZm8gKil1cy0+ZXh0cmE7CisJaW50IHJldFN0YXR1cyA9IElTRDIwMF9HT09EOworCXN0cnVjdCBoZF9kcml2ZWlkICppZCA9IGluZm8tPmlkOworCisJVVNfREVCVUdQKCJFbnRlcmluZyBpc2QyMDBfZ2V0X2lucXVpcnlfZGF0YVxuIik7CisKKwkvKiBzZXQgZGVmYXVsdCB0byBNYXN0ZXIgKi8KKwlpbmZvLT5EZXZpY2VIZWFkID0gQVRBX0FERFJFU1NfREVWSEVBRF9TVEQ7CisKKwkvKiBhdHRlbXB0IHRvIG1hbnVhbGx5IGVudW1lcmF0ZSB0aGlzIGRldmljZSAqLworCXJldFN0YXR1cyA9IGlzZDIwMF9tYW51YWxfZW51bSh1cyk7CisJaWYgKHJldFN0YXR1cyA9PSBJU0QyMDBfR09PRCkgeworCQlpbnQgdHJhbnNmZXJTdGF0dXM7CisKKwkJLyogY2hlY2sgZm9yIGFuIEFUQSBkZXZpY2UgKi8KKwkJaWYgKGluZm8tPkRldmljZUZsYWdzICYgREZfQVRBX0RFVklDRSkgeworCQkJLyogdGhpcyBtdXN0IGJlIGFuIEFUQSBkZXZpY2UgKi8KKwkJCS8qIHBlcmZvcm0gYW4gQVRBIENvbW1hbmQgSWRlbnRpZnkgKi8KKwkJCXRyYW5zZmVyU3RhdHVzID0gaXNkMjAwX2FjdGlvbiggdXMsIEFDVElPTl9JREVOVElGWSwKKwkJCQkJCQlpZCwgCisJCQkJCQkJc2l6ZW9mKHN0cnVjdCBoZF9kcml2ZWlkKSApOworCQkJaWYgKHRyYW5zZmVyU3RhdHVzICE9IElTRDIwMF9UUkFOU1BPUlRfR09PRCkgeworCQkJCS8qIEVycm9yIGlzc3VpbmcgQVRBIENvbW1hbmQgSWRlbnRpZnkgKi8KKwkJCQlVU19ERUJVR1AoIiAgIEVycm9yIGlzc3VpbmcgQVRBIENvbW1hbmQgSWRlbnRpZnlcbiIpOworCQkJCXJldFN0YXR1cyA9IElTRDIwMF9FUlJPUjsKKwkJCX0gZWxzZSB7CisJCQkJLyogQVRBIENvbW1hbmQgSWRlbnRpZnkgc3VjY2Vzc2Z1bCAqLworCQkJCWludCBpOworCQkJCV9fYmUxNiAqc3JjOworCQkJCV9fdTE2ICpkZXN0OworCQkJCWlkZV9maXhfZHJpdmVpZChpZCk7CisKKwkJCQlVU19ERUJVR1AoIiAgIElkZW50aWZ5IERhdGEgU3RydWN0dXJlOlxuIik7CisJCQkJVVNfREVCVUdQKCIgICAgICBjb25maWcgPSAweCV4XG4iLCBpZC0+Y29uZmlnKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGN5bHMgPSAweCV4XG4iLCBpZC0+Y3lscyk7CisJCQkJVVNfREVCVUdQKCIgICAgICBoZWFkcyA9IDB4JXhcbiIsIGlkLT5oZWFkcyk7CisJCQkJVVNfREVCVUdQKCIgICAgICB0cmFja19ieXRlcyA9IDB4JXhcbiIsIGlkLT50cmFja19ieXRlcyk7CisJCQkJVVNfREVCVUdQKCIgICAgICBzZWN0b3JfYnl0ZXMgPSAweCV4XG4iLCBpZC0+c2VjdG9yX2J5dGVzKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIHNlY3RvcnMgPSAweCV4XG4iLCBpZC0+c2VjdG9ycyk7CisJCQkJVVNfREVCVUdQKCIgICAgICBzZXJpYWxfbm9bMF0gPSAweCV4XG4iLCBpZC0+c2VyaWFsX25vWzBdKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGJ1Zl90eXBlID0gMHgleFxuIiwgaWQtPmJ1Zl90eXBlKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGJ1Zl9zaXplID0gMHgleFxuIiwgaWQtPmJ1Zl9zaXplKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGVjY19ieXRlcyA9IDB4JXhcbiIsIGlkLT5lY2NfYnl0ZXMpOworCQkJCVVTX0RFQlVHUCgiICAgICAgZndfcmV2WzBdID0gMHgleFxuIiwgaWQtPmZ3X3JldlswXSk7CisJCQkJVVNfREVCVUdQKCIgICAgICBtb2RlbFswXSA9IDB4JXhcbiIsIGlkLT5tb2RlbFswXSk7CisJCQkJVVNfREVCVUdQKCIgICAgICBtYXhfbXVsdHNlY3QgPSAweCV4XG4iLCBpZC0+bWF4X211bHRzZWN0KTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGR3b3JkX2lvID0gMHgleFxuIiwgaWQtPmR3b3JkX2lvKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGNhcGFiaWxpdHkgPSAweCV4XG4iLCBpZC0+Y2FwYWJpbGl0eSk7CisJCQkJVVNfREVCVUdQKCIgICAgICB0UElPID0gMHgleFxuIiwgaWQtPnRQSU8pOworCQkJCVVTX0RFQlVHUCgiICAgICAgdERNQSA9IDB4JXhcbiIsIGlkLT50RE1BKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGZpZWxkX3ZhbGlkID0gMHgleFxuIiwgaWQtPmZpZWxkX3ZhbGlkKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGN1cl9jeWxzID0gMHgleFxuIiwgaWQtPmN1cl9jeWxzKTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGN1cl9oZWFkcyA9IDB4JXhcbiIsIGlkLT5jdXJfaGVhZHMpOworCQkJCVVTX0RFQlVHUCgiICAgICAgY3VyX3NlY3RvcnMgPSAweCV4XG4iLCBpZC0+Y3VyX3NlY3RvcnMpOworCQkJCVVTX0RFQlVHUCgiICAgICAgY3VyX2NhcGFjaXR5ID0gMHgleFxuIiwgKGlkLT5jdXJfY2FwYWNpdHkxIDw8IDE2KSArIGlkLT5jdXJfY2FwYWNpdHkwICk7CisJCQkJVVNfREVCVUdQKCIgICAgICBtdWx0c2VjdCA9IDB4JXhcbiIsIGlkLT5tdWx0c2VjdCk7CisJCQkJVVNfREVCVUdQKCIgICAgICBsYmFfY2FwYWNpdHkgPSAweCV4XG4iLCBpZC0+bGJhX2NhcGFjaXR5KTsKKwkJCQlVU19ERUJVR1AoIiAgICAgIGNvbW1hbmRfc2V0XzEgPSAweCV4XG4iLCBpZC0+Y29tbWFuZF9zZXRfMSk7CisJCQkJVVNfREVCVUdQKCIgICAgICBjb21tYW5kX3NldF8yID0gMHgleFxuIiwgaWQtPmNvbW1hbmRfc2V0XzIpOworCisJCQkJbWVtc2V0KCZpbmZvLT5JbnF1aXJ5RGF0YSwgMCwgc2l6ZW9mKGluZm8tPklucXVpcnlEYXRhKSk7CisKKwkJCQkvKiBTdGFuZGFyZCBJREUgaW50ZXJmYWNlIG9ubHkgc3VwcG9ydHMgZGlza3MgKi8KKwkJCQlpbmZvLT5JbnF1aXJ5RGF0YS5EZXZpY2VUeXBlID0gRElSRUNUX0FDQ0VTU19ERVZJQ0U7CisKKwkJCQkvKiBUaGUgbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgMzYgKDUgKyAzMSkgKi8KKwkJCQlpbmZvLT5JbnF1aXJ5RGF0YS5BZGRpdGlvbmFsTGVuZ3RoID0gMHgxRjsKKworCQkJCWlmIChpZC0+Y29tbWFuZF9zZXRfMSAmIENPTU1BTkRTRVRfTUVESUFfU1RBVFVTKSB7CisJCQkJCS8qIHNldCB0aGUgcmVtb3ZhYmxlIGJpdCAqLworCQkJCQlpbmZvLT5JbnF1aXJ5RGF0YS5EZXZpY2VUeXBlTW9kaWZpZXIgPSBERVZJQ0VfUkVNT1ZBQkxFOworCQkJCQlpbmZvLT5EZXZpY2VGbGFncyB8PSBERl9SRU1PVkFCTEVfTUVESUE7CisJCQkJfQorCisJCQkJLyogRmlsbCBpbiB2ZW5kb3IgaWRlbnRpZmljYXRpb24gZmllbGRzICovCisJCQkJc3JjID0gKF9fYmUxNiopaWQtPm1vZGVsOworCQkJCWRlc3QgPSAoX191MTYqKWluZm8tPklucXVpcnlEYXRhLlZlbmRvcklkOworCQkJCWZvciAoaT0wO2k8NDtpKyspCisJCQkJCWRlc3RbaV0gPSBiZTE2X3RvX2NwdShzcmNbaV0pOworCisJCQkJc3JjID0gKF9fYmUxNiopKGlkLT5tb2RlbCs4KTsKKwkJCQlkZXN0ID0gKF9fdTE2KilpbmZvLT5JbnF1aXJ5RGF0YS5Qcm9kdWN0SWQ7CisJCQkJZm9yIChpPTA7aTw4O2krKykKKwkJCQkJZGVzdFtpXSA9IGJlMTZfdG9fY3B1KHNyY1tpXSk7CisKKwkJCQlzcmMgPSAoX19iZTE2KilpZC0+ZndfcmV2OworCQkJCWRlc3QgPSAoX191MTYqKWluZm8tPklucXVpcnlEYXRhLlByb2R1Y3RSZXZpc2lvbkxldmVsOworCQkJCWZvciAoaT0wO2k8MjtpKyspCisJCQkJCWRlc3RbaV0gPSBiZTE2X3RvX2NwdShzcmNbaV0pOworCisJCQkJLyogZGV0ZXJtaW5lIGlmIGl0IHN1cHBvcnRzIE1lZGlhIFN0YXR1cyBOb3RpZmljYXRpb24gKi8KKwkJCQlpZiAoaWQtPmNvbW1hbmRfc2V0XzIgJiBDT01NQU5EU0VUX01FRElBX1NUQVRVUykgeworCQkJCQlVU19ERUJVR1AoIiAgIERldmljZSBzdXBwb3J0cyBNZWRpYSBTdGF0dXMgTm90aWZpY2F0aW9uXG4iKTsKKworCQkJCQkvKiBJbmRpY2F0ZSB0aGF0IGl0IGlzIGVuYWJsZWQsIGV2ZW4gdGhvdWdoIGl0IGlzIG5vdAorCQkJCQkgKiBUaGlzIGFsbG93cyB0aGUgbG9jay91bmxvY2sgb2YgdGhlIG1lZGlhIHRvIHdvcmsKKwkJCQkJICogY29ycmVjdGx5LgorCQkJCQkgKi8KKwkJCQkJaW5mby0+RGV2aWNlRmxhZ3MgfD0gREZfTUVESUFfU1RBVFVTX0VOQUJMRUQ7CisJCQkJfQorCQkJCWVsc2UKKwkJCQkJaW5mby0+RGV2aWNlRmxhZ3MgJj0gfkRGX01FRElBX1NUQVRVU19FTkFCTEVEOworCisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiAKKwkJCSAqIHRoaXMgbXVzdCBiZSBhbiBBVEFQSSBkZXZpY2UgCisJCQkgKiB1c2UgYW4gQVRBUEkgcHJvdG9jb2wgKFRyYW5zcGFyZW50IFNDU0kpCisJCQkgKi8KKwkJCXVzLT5wcm90b2NvbF9uYW1lID0gIlRyYW5zcGFyZW50IFNDU0kiOworCQkJdXMtPnByb3RvX2hhbmRsZXIgPSB1c2Jfc3Rvcl90cmFuc3BhcmVudF9zY3NpX2NvbW1hbmQ7CisKKwkJCVVTX0RFQlVHUCgiUHJvdG9jb2wgY2hhbmdlZCB0bzogJXNcbiIsIHVzLT5wcm90b2NvbF9uYW1lKTsKKwkgICAgCisJCQkvKiBGcmVlIGRyaXZlciBzdHJ1Y3R1cmUgKi8JICAgIAorCQkJdXMtPmV4dHJhX2Rlc3RydWN0b3IoaW5mbyk7CisJCQl1cy0+ZXh0cmEgPSBOVUxMOworCQkJdXMtPmV4dHJhX2Rlc3RydWN0b3IgPSBOVUxMOworCQl9CisJfQorCisJVVNfREVCVUdQKCJMZWF2aW5nIGlzZDIwMF9nZXRfaW5xdWlyeV9kYXRhICUwOFhcbiIsIHJldFN0YXR1cyk7CisKKwlyZXR1cm4ocmV0U3RhdHVzKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlzZDIwMF9zY3NpX3RvX2F0YQorICoJCQkJCQkJCQkgCisgKiBUcmFuc2xhdGUgU0NTSSBjb21tYW5kcyB0byBBVEEgY29tbWFuZHMuCisgKgorICogUkVUVVJOUzoKKyAqICAgIDEgaWYgdGhlIGNvbW1hbmQgbmVlZHMgdG8gYmUgc2VudCB0byB0aGUgdHJhbnNwb3J0IGxheWVyCisgKiAgICAwIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IGlzZDIwMF9zY3NpX3RvX2F0YShzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cywKKwkJCSAgICAgIHVuaW9uIGF0YV9jZGIgKiBhdGFDZGIpCit7CisJc3RydWN0IGlzZDIwMF9pbmZvICppbmZvID0gKHN0cnVjdCBpc2QyMDBfaW5mbyAqKXVzLT5leHRyYTsKKwlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQgPSBpbmZvLT5pZDsKKwlpbnQgc2VuZFRvVHJhbnNwb3J0ID0gMTsKKwl1bnNpZ25lZCBjaGFyIHNlY3RudW0sIGhlYWQ7CisJdW5zaWduZWQgc2hvcnQgY3lsaW5kZXI7CisJdW5zaWduZWQgbG9uZyBsYmE7CisJdW5zaWduZWQgbG9uZyBibG9ja0NvdW50OworCXVuc2lnbmVkIGNoYXIgc2Vuc2VEYXRhWzhdID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CisKKwltZW1zZXQoYXRhQ2RiLCAwLCBzaXplb2YodW5pb24gYXRhX2NkYikpOworCisJLyogU0NTSSBDb21tYW5kICovCisJc3dpdGNoIChzcmItPmNtbmRbMF0pIHsKKwljYXNlIElOUVVJUlk6CisJCVVTX0RFQlVHUCgiICAgQVRBIE9VVCAtIElOUVVJUllcbiIpOworCisJCS8qIGNvcHkgSW5xdWlyeURhdGEgKi8KKwkJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKCh1bnNpZ25lZCBjaGFyICopICZpbmZvLT5JbnF1aXJ5RGF0YSwKKwkJCQlzaXplb2YoaW5mby0+SW5xdWlyeURhdGEpLCBzcmIpOworCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7CisJCXNlbmRUb1RyYW5zcG9ydCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBNT0RFX1NFTlNFOgorCQlVU19ERUJVR1AoIiAgIEFUQSBPVVQgLSBTQ1NJT1BfTU9ERV9TRU5TRVxuIik7CisKKwkJLyogSW5pdGlhbGl6ZSB0aGUgcmV0dXJuIGJ1ZmZlciAqLworCQl1c2Jfc3Rvcl9zZXRfeGZlcl9idWYoc2Vuc2VEYXRhLCBzaXplb2Yoc2Vuc2VEYXRhKSwgc3JiKTsKKworCQlpZiAoaW5mby0+RGV2aWNlRmxhZ3MgJiBERl9NRURJQV9TVEFUVVNfRU5BQkxFRCkKKwkJeworCQkJYXRhQ2RiLT5nZW5lcmljLlNpZ25hdHVyZUJ5dGUwID0gaW5mby0+Q29uZmlnRGF0YS5BVEFNYWpvckNvbW1hbmQ7CisJCQlhdGFDZGItPmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTEgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1pbm9yQ29tbWFuZDsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5UcmFuc2ZlckJsb2NrU2l6ZSA9IDE7CisJCQlhdGFDZGItPmdlbmVyaWMuUmVnaXN0ZXJTZWxlY3QgPSBSRUdfQ09NTUFORDsKKwkJCWF0YUNkYi0+d3JpdGUuQ29tbWFuZEJ5dGUgPSBBVEFfQ09NTUFORF9HRVRfTUVESUFfU1RBVFVTOworCQkJc3JiLT5yZXF1ZXN0X2J1ZmZsZW4gPSAwOworCQl9IGVsc2UgeworCQkJVVNfREVCVUdQKCIgICBNZWRpYSBTdGF0dXMgbm90IHN1cHBvcnRlZCwganVzdCByZXBvcnQgb2theVxuIik7CisJCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7CisJCQlzZW5kVG9UcmFuc3BvcnQgPSAwOworCQl9CisJCWJyZWFrOworCisJY2FzZSBURVNUX1VOSVRfUkVBRFk6CisJCVVTX0RFQlVHUCgiICAgQVRBIE9VVCAtIFNDU0lPUF9URVNUX1VOSVRfUkVBRFlcbiIpOworCisJCWlmIChpbmZvLT5EZXZpY2VGbGFncyAmIERGX01FRElBX1NUQVRVU19FTkFCTEVEKQorCQl7CisJCQlhdGFDZGItPmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTAgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1ham9yQ29tbWFuZDsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5TaWduYXR1cmVCeXRlMSA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWlub3JDb21tYW5kOworCQkJYXRhQ2RiLT5nZW5lcmljLlRyYW5zZmVyQmxvY2tTaXplID0gMTsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5SZWdpc3RlclNlbGVjdCA9IFJFR19DT01NQU5EOworCQkJYXRhQ2RiLT53cml0ZS5Db21tYW5kQnl0ZSA9IEFUQV9DT01NQU5EX0dFVF9NRURJQV9TVEFUVVM7CisJCQlzcmItPnJlcXVlc3RfYnVmZmxlbiA9IDA7CisJCX0gZWxzZSB7CisJCQlVU19ERUJVR1AoIiAgIE1lZGlhIFN0YXR1cyBub3Qgc3VwcG9ydGVkLCBqdXN0IHJlcG9ydCBva2F5XG4iKTsKKwkJCXNyYi0+cmVzdWx0ID0gU0FNX1NUQVRfR09PRDsKKwkJCXNlbmRUb1RyYW5zcG9ydCA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJFQURfQ0FQQUNJVFk6CisJeworCQl1bnNpZ25lZCBsb25nIGNhcGFjaXR5OworCQlzdHJ1Y3QgcmVhZF9jYXBhY2l0eV9kYXRhIHJlYWRDYXBhY2l0eURhdGE7CisKKwkJVVNfREVCVUdQKCIgICBBVEEgT1VUIC0gU0NTSU9QX1JFQURfQ0FQQUNJVFlcbiIpOworCisJCWlmIChpZC0+Y2FwYWJpbGl0eSAmIENBUEFCSUxJVFlfTEJBICkgeworCQkJY2FwYWNpdHkgPSBpZC0+bGJhX2NhcGFjaXR5IC0gMTsKKwkJfSBlbHNlIHsKKwkJCWNhcGFjaXR5ID0gKGlkLT5oZWFkcyAqCisJCQkJICAgIGlkLT5jeWxzICoKKwkJCQkgICAgaWQtPnNlY3RvcnMpIC0gMTsKKwkJfQorCQlyZWFkQ2FwYWNpdHlEYXRhLkxvZ2ljYWxCbG9ja0FkZHJlc3MgPSBjcHVfdG9fYmUzMihjYXBhY2l0eSk7CisJCXJlYWRDYXBhY2l0eURhdGEuQnl0ZXNQZXJCbG9jayA9IGNwdV90b19iZTMyKDB4MjAwKTsKKworCQl1c2Jfc3Rvcl9zZXRfeGZlcl9idWYoKHVuc2lnbmVkIGNoYXIgKikgJnJlYWRDYXBhY2l0eURhdGEsCisJCQkJc2l6ZW9mKHJlYWRDYXBhY2l0eURhdGEpLCBzcmIpOworCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7CisJCXNlbmRUb1RyYW5zcG9ydCA9IDA7CisJfQorCWJyZWFrOworCisJY2FzZSBSRUFEXzEwOgorCQlVU19ERUJVR1AoIiAgIEFUQSBPVVQgLSBTQ1NJT1BfUkVBRFxuIik7CisKKwkJbGJhID0gYmUzMl90b19jcHUoKihfX2JlMzIgKikmc3JiLT5jbW5kWzJdKTsKKwkJYmxvY2tDb3VudCA9ICh1bnNpZ25lZCBsb25nKXNyYi0+Y21uZFs3XTw8OCB8ICh1bnNpZ25lZCBsb25nKXNyYi0+Y21uZFs4XTsKKworCQlpZiAoaWQtPmNhcGFiaWxpdHkgJiBDQVBBQklMSVRZX0xCQSkgeworCQkJc2VjdG51bSA9ICh1bnNpZ25lZCBjaGFyKShsYmEpOworCQkJY3lsaW5kZXIgPSAodW5zaWduZWQgc2hvcnQpKGxiYT4+OCk7CisJCQloZWFkID0gQVRBX0FERFJFU1NfREVWSEVBRF9MQkFfTU9ERSB8ICh1bnNpZ25lZCBjaGFyKShsYmE+PjI0ICYgMHgwRik7CisJCX0gZWxzZSB7CisJCQlzZWN0bnVtID0gKHVuc2lnbmVkIGNoYXIpKChsYmEgJSBpZC0+c2VjdG9ycykgKyAxKTsKKwkJCWN5bGluZGVyID0gKHVuc2lnbmVkIHNob3J0KShsYmEgLyAoaWQtPnNlY3RvcnMgKgorCQkJCQkJCSAgIGlkLT5oZWFkcykpOworCQkJaGVhZCA9ICh1bnNpZ25lZCBjaGFyKSgobGJhIC8gaWQtPnNlY3RvcnMpICUKKwkJCQkJICAgICAgIGlkLT5oZWFkcyk7CisJCX0KKwkJYXRhQ2RiLT5nZW5lcmljLlNpZ25hdHVyZUJ5dGUwID0gaW5mby0+Q29uZmlnRGF0YS5BVEFNYWpvckNvbW1hbmQ7CisJCWF0YUNkYi0+Z2VuZXJpYy5TaWduYXR1cmVCeXRlMSA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWlub3JDb21tYW5kOworCQlhdGFDZGItPmdlbmVyaWMuVHJhbnNmZXJCbG9ja1NpemUgPSAxOworCQlhdGFDZGItPmdlbmVyaWMuUmVnaXN0ZXJTZWxlY3QgPQorCQkgIFJFR19TRUNUT1JfQ09VTlQgfCBSRUdfU0VDVE9SX05VTUJFUiB8CisJCSAgUkVHX0NZTElOREVSX0xPVyB8IFJFR19DWUxJTkRFUl9ISUdIIHwKKwkJICBSRUdfREVWSUNFX0hFQUQgIHwgUkVHX0NPTU1BTkQ7CisJCWF0YUNkYi0+d3JpdGUuU2VjdG9yQ291bnRCeXRlID0gKHVuc2lnbmVkIGNoYXIpYmxvY2tDb3VudDsKKwkJYXRhQ2RiLT53cml0ZS5TZWN0b3JOdW1iZXJCeXRlID0gc2VjdG51bTsKKwkJYXRhQ2RiLT53cml0ZS5DeWxpbmRlckhpZ2hCeXRlID0gKHVuc2lnbmVkIGNoYXIpKGN5bGluZGVyPj44KTsKKwkJYXRhQ2RiLT53cml0ZS5DeWxpbmRlckxvd0J5dGUgPSAodW5zaWduZWQgY2hhciljeWxpbmRlcjsKKwkJYXRhQ2RiLT53cml0ZS5EZXZpY2VIZWFkQnl0ZSA9IChoZWFkIHwgQVRBX0FERFJFU1NfREVWSEVBRF9TVEQpOworCQlhdGFDZGItPndyaXRlLkNvbW1hbmRCeXRlID0gV0lOX1JFQUQ7CisJCWJyZWFrOworCisJY2FzZSBXUklURV8xMDoKKwkJVVNfREVCVUdQKCIgICBBVEEgT1VUIC0gU0NTSU9QX1dSSVRFXG4iKTsKKworCQlsYmEgPSBiZTMyX3RvX2NwdSgqKF9fYmUzMiAqKSZzcmItPmNtbmRbMl0pOworCQlibG9ja0NvdW50ID0gKHVuc2lnbmVkIGxvbmcpc3JiLT5jbW5kWzddPDw4IHwgKHVuc2lnbmVkIGxvbmcpc3JiLT5jbW5kWzhdOworCisJCWlmIChpZC0+Y2FwYWJpbGl0eSAmIENBUEFCSUxJVFlfTEJBKSB7CisJCQlzZWN0bnVtID0gKHVuc2lnbmVkIGNoYXIpKGxiYSk7CisJCQljeWxpbmRlciA9ICh1bnNpZ25lZCBzaG9ydCkobGJhPj44KTsKKwkJCWhlYWQgPSBBVEFfQUREUkVTU19ERVZIRUFEX0xCQV9NT0RFIHwgKHVuc2lnbmVkIGNoYXIpKGxiYT4+MjQgJiAweDBGKTsKKwkJfSBlbHNlIHsKKwkJCXNlY3RudW0gPSAodW5zaWduZWQgY2hhcikoKGxiYSAlIGlkLT5zZWN0b3JzKSArIDEpOworCQkJY3lsaW5kZXIgPSAodW5zaWduZWQgc2hvcnQpKGxiYSAvIChpZC0+c2VjdG9ycyAqIGlkLT5oZWFkcykpOworCQkJaGVhZCA9ICh1bnNpZ25lZCBjaGFyKSgobGJhIC8gaWQtPnNlY3RvcnMpICUgaWQtPmhlYWRzKTsKKwkJfQorCQlhdGFDZGItPmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTAgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1ham9yQ29tbWFuZDsKKwkJYXRhQ2RiLT5nZW5lcmljLlNpZ25hdHVyZUJ5dGUxID0gaW5mby0+Q29uZmlnRGF0YS5BVEFNaW5vckNvbW1hbmQ7CisJCWF0YUNkYi0+Z2VuZXJpYy5UcmFuc2ZlckJsb2NrU2l6ZSA9IDE7CisJCWF0YUNkYi0+Z2VuZXJpYy5SZWdpc3RlclNlbGVjdCA9CisJCSAgUkVHX1NFQ1RPUl9DT1VOVCB8IFJFR19TRUNUT1JfTlVNQkVSIHwKKwkJICBSRUdfQ1lMSU5ERVJfTE9XIHwgUkVHX0NZTElOREVSX0hJR0ggfAorCQkgIFJFR19ERVZJQ0VfSEVBRCAgfCBSRUdfQ09NTUFORDsKKwkJYXRhQ2RiLT53cml0ZS5TZWN0b3JDb3VudEJ5dGUgPSAodW5zaWduZWQgY2hhcilibG9ja0NvdW50OworCQlhdGFDZGItPndyaXRlLlNlY3Rvck51bWJlckJ5dGUgPSBzZWN0bnVtOworCQlhdGFDZGItPndyaXRlLkN5bGluZGVySGlnaEJ5dGUgPSAodW5zaWduZWQgY2hhcikoY3lsaW5kZXI+PjgpOworCQlhdGFDZGItPndyaXRlLkN5bGluZGVyTG93Qnl0ZSA9ICh1bnNpZ25lZCBjaGFyKWN5bGluZGVyOworCQlhdGFDZGItPndyaXRlLkRldmljZUhlYWRCeXRlID0gKGhlYWQgfCBBVEFfQUREUkVTU19ERVZIRUFEX1NURCk7CisJCWF0YUNkYi0+d3JpdGUuQ29tbWFuZEJ5dGUgPSBXSU5fV1JJVEU7CisJCWJyZWFrOworCisJY2FzZSBBTExPV19NRURJVU1fUkVNT1ZBTDoKKwkJVVNfREVCVUdQKCIgICBBVEEgT1VUIC0gU0NTSU9QX01FRElVTV9SRU1PVkFMXG4iKTsKKworCQlpZiAoaW5mby0+RGV2aWNlRmxhZ3MgJiBERl9SRU1PVkFCTEVfTUVESUEpIHsKKwkJCVVTX0RFQlVHUCgiICAgc3JiLT5jbW5kWzRdID0gMHglWFxuIiwgc3JiLT5jbW5kWzRdKTsKKwkgICAgCisJCQlhdGFDZGItPmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTAgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1ham9yQ29tbWFuZDsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5TaWduYXR1cmVCeXRlMSA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWlub3JDb21tYW5kOworCQkJYXRhQ2RiLT5nZW5lcmljLlRyYW5zZmVyQmxvY2tTaXplID0gMTsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5SZWdpc3RlclNlbGVjdCA9IFJFR19DT01NQU5EOworCQkJYXRhQ2RiLT53cml0ZS5Db21tYW5kQnl0ZSA9IChzcmItPmNtbmRbNF0gJiAweDEpID8KKwkJCQlXSU5fRE9PUkxPQ0sgOiBXSU5fRE9PUlVOTE9DSzsKKwkJCXNyYi0+cmVxdWVzdF9idWZmbGVuID0gMDsKKwkJfSBlbHNlIHsKKwkJCVVTX0RFQlVHUCgiICAgTm90IHJlbW92ZWFibGUgbWVkaWEsIGp1c3QgcmVwb3J0IG9rYXlcbiIpOworCQkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOworCQkJc2VuZFRvVHJhbnNwb3J0ID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgU1RBUlRfU1RPUDogICAgCisJCVVTX0RFQlVHUCgiICAgQVRBIE9VVCAtIFNDU0lPUF9TVEFSVF9TVE9QX1VOSVRcbiIpOworCQlVU19ERUJVR1AoIiAgIHNyYi0+Y21uZFs0XSA9IDB4JVhcbiIsIHNyYi0+Y21uZFs0XSk7CisKKwkJaWYgKChzcmItPmNtbmRbNF0gJiAweDMpID09IDB4MikgeworCQkJVVNfREVCVUdQKCIgICBNZWRpYSBFamVjdFxuIik7CisJCQlhdGFDZGItPmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTAgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1ham9yQ29tbWFuZDsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5TaWduYXR1cmVCeXRlMSA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWlub3JDb21tYW5kOworCQkJYXRhQ2RiLT5nZW5lcmljLlRyYW5zZmVyQmxvY2tTaXplID0gMDsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5SZWdpc3RlclNlbGVjdCA9IFJFR19DT01NQU5EOworCQkJYXRhQ2RiLT53cml0ZS5Db21tYW5kQnl0ZSA9IEFUQV9DT01NQU5EX01FRElBX0VKRUNUOworCQl9IGVsc2UgaWYgKChzcmItPmNtbmRbNF0gJiAweDMpID09IDB4MSkgeworCQkJVVNfREVCVUdQKCIgICBHZXQgTWVkaWEgU3RhdHVzXG4iKTsKKwkJCWF0YUNkYi0+Z2VuZXJpYy5TaWduYXR1cmVCeXRlMCA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWFqb3JDb21tYW5kOworCQkJYXRhQ2RiLT5nZW5lcmljLlNpZ25hdHVyZUJ5dGUxID0gaW5mby0+Q29uZmlnRGF0YS5BVEFNaW5vckNvbW1hbmQ7CisJCQlhdGFDZGItPmdlbmVyaWMuVHJhbnNmZXJCbG9ja1NpemUgPSAxOworCQkJYXRhQ2RiLT5nZW5lcmljLlJlZ2lzdGVyU2VsZWN0ID0gUkVHX0NPTU1BTkQ7CisJCQlhdGFDZGItPndyaXRlLkNvbW1hbmRCeXRlID0gQVRBX0NPTU1BTkRfR0VUX01FRElBX1NUQVRVUzsKKwkJCXNyYi0+cmVxdWVzdF9idWZmbGVuID0gMDsKKwkJfSBlbHNlIHsKKwkJCVVTX0RFQlVHUCgiICAgTm90aGluZyB0byBkbywganVzdCByZXBvcnQgb2theVxuIik7CisJCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7CisJCQlzZW5kVG9UcmFuc3BvcnQgPSAwOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJVVNfREVCVUdQKCJVbnN1cHBvcnRlZCBTQ1NJIGNvbW1hbmQgLSAweCVYXG4iLCBzcmItPmNtbmRbMF0pOworCQlzcmItPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJc2VuZFRvVHJhbnNwb3J0ID0gMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuKHNlbmRUb1RyYW5zcG9ydCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpc2QyMDBfZnJlZV9pbmZvCisgKgorICogRnJlZXMgdGhlIGRyaXZlciBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyB2b2lkIGlzZDIwMF9mcmVlX2luZm9fcHRycyh2b2lkICppbmZvXykKK3sKKwlzdHJ1Y3QgaXNkMjAwX2luZm8gKmluZm8gPSAoc3RydWN0IGlzZDIwMF9pbmZvICopIGluZm9fOworCisJaWYgKGluZm8pIHsKKwkJa2ZyZWUoaW5mby0+aWQpOworCQlrZnJlZShpbmZvLT5SZWdzQnVmKTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXNkMjAwX2luaXRfaW5mbworICoJCQkJCQkJCQkgCisgKiBBbGxvY2F0ZXMgKGlmIG5lY2Vzc2FyeSkgYW5kIGluaXRpYWxpemVzIHRoZSBkcml2ZXIgc3RydWN0dXJlLgorICoKKyAqIFJFVFVSTlM6CisgKiAgICBJU0Qgc3RhdHVzIGNvZGUKKyAqLworc3RhdGljIGludCBpc2QyMDBfaW5pdF9pbmZvKHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlpbnQgcmV0U3RhdHVzID0gSVNEMjAwX0dPT0Q7CisJc3RydWN0IGlzZDIwMF9pbmZvICppbmZvOworCisJaW5mbyA9IChzdHJ1Y3QgaXNkMjAwX2luZm8gKikKKwkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpc2QyMDBfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghaW5mbykKKwkJcmV0U3RhdHVzID0gSVNEMjAwX0VSUk9SOworCWVsc2UgeworCQltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpc2QyMDBfaW5mbykpOworCQlpbmZvLT5pZCA9IChzdHJ1Y3QgaGRfZHJpdmVpZCAqKQorCQkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoZF9kcml2ZWlkKSwgR0ZQX0tFUk5FTCk7CisJCWluZm8tPlJlZ3NCdWYgPSAodW5zaWduZWQgY2hhciAqKQorCQkJCWttYWxsb2Moc2l6ZW9mKGluZm8tPkFUQVJlZ3MpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFpbmZvLT5pZCB8fCAhaW5mby0+UmVnc0J1ZikgeworCQkJaXNkMjAwX2ZyZWVfaW5mb19wdHJzKGluZm8pOworCQkJa2ZyZWUoaW5mbyk7CisJCQlyZXRTdGF0dXMgPSBJU0QyMDBfRVJST1I7CisJCX0gZWxzZQorCQkJbWVtc2V0KGluZm8tPmlkLCAwLCBzaXplb2Yoc3RydWN0IGhkX2RyaXZlaWQpKTsKKwl9CisKKwlpZiAocmV0U3RhdHVzID09IElTRDIwMF9HT09EKSB7CisJCXVzLT5leHRyYSA9IGluZm87CisJCXVzLT5leHRyYV9kZXN0cnVjdG9yID0gaXNkMjAwX2ZyZWVfaW5mb19wdHJzOworCX0gZWxzZQorCQlVU19ERUJVR1AoIkVSUk9SIC0ga21hbGxvYyBmYWlsdXJlXG4iKTsKKworCXJldHVybihyZXRTdGF0dXMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEluaXRpYWxpemF0aW9uIGZvciB0aGUgSVNEMjAwIAorICovCisKK2ludCBpc2QyMDBfSW5pdGlhbGl6YXRpb24oc3RydWN0IHVzX2RhdGEgKnVzKQoreworCVVTX0RFQlVHUCgiSVNEMjAwIEluaXRpYWxpemF0aW9uLi4uXG4iKTsKKworCS8qIEluaXRpYWxpemUgSVNEMjAwIGluZm8gc3RydWN0ICovCisKKwlpZiAoaXNkMjAwX2luaXRfaW5mbyh1cykgPT0gSVNEMjAwX0VSUk9SKSB7CisJCVVTX0RFQlVHUCgiRVJST1IgSW5pdGlhbGl6aW5nIElTRDIwMCBJbmZvIHN0cnVjdFxuIik7CisJfSBlbHNlIHsKKwkJLyogR2V0IGRldmljZSBzcGVjaWZpYyBkYXRhICovCisKKwkJaWYgKGlzZDIwMF9nZXRfaW5xdWlyeV9kYXRhKHVzKSAhPSBJU0QyMDBfR09PRCkKKwkJCVVTX0RFQlVHUCgiSVNEMjAwIEluaXRpYWxpemF0aW9uIEZhaWx1cmVcbiIpOworCQllbHNlCisJCQlVU19ERUJVR1AoIklTRDIwMCBJbml0aWFsaXphdGlvbiBjb21wbGV0ZVxuIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm90b2NvbCBhbmQgVHJhbnNwb3J0IGZvciB0aGUgSVNEMjAwIEFTSUMKKyAqCisgKiBUaGlzIHByb3RvY29sIGFuZCB0cmFuc3BvcnQgYXJlIGZvciBBVEEgZGV2aWNlcyBjb25uZWN0ZWQgdG8gYW4gSVNEMjAwCisgKiBBU0lDLiAgQW4gQVRBUEkgZGV2aWNlIHRoYXQgaXMgY29uZWN0ZWQgYXMgYSBzbGF2ZSBkZXZpY2Ugd2lsbCBiZQorICogZGV0ZWN0ZWQgaW4gdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBhbmQgdGhlIHByb3RvY29sIHdpbGwKKyAqIGJlIGNoYW5nZWQgdG8gYW4gQVRBUEkgcHJvdG9jb2wgKFRyYW5zcGFyZW50IFNDU0kpLgorICoKKyAqLworCit2b2lkIGlzZDIwMF9hdGFfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlpbnQgc2VuZFRvVHJhbnNwb3J0ID0gMTsKKwl1bmlvbiBhdGFfY2RiIGF0YUNkYjsKKworCS8qIE1ha2Ugc3VyZSBkcml2ZXIgd2FzIGluaXRpYWxpemVkICovCisKKwlpZiAodXMtPmV4dHJhID09IE5VTEwpCisJCVVTX0RFQlVHUCgiRVJST1IgRHJpdmVyIG5vdCBpbml0aWFsaXplZFxuIik7CisKKwkvKiBDb252ZXJ0IGNvbW1hbmQgKi8KKwlzcmItPnJlc2lkID0gMDsKKwlzZW5kVG9UcmFuc3BvcnQgPSBpc2QyMDBfc2NzaV90b19hdGEoc3JiLCB1cywgJmF0YUNkYik7CisKKwkvKiBzZW5kIHRoZSBjb21tYW5kIHRvIHRoZSB0cmFuc3BvcnQgbGF5ZXIgKi8KKwlpZiAoc2VuZFRvVHJhbnNwb3J0KQorCQlpc2QyMDBfaW52b2tlX3RyYW5zcG9ydCh1cywgc3JiLCAmYXRhQ2RiKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMzVmNGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qIEhlYWRlciBGaWxlIGZvciBJbi1TeXN0ZW0gRGVzaWduLCBJbmMuIElTRDIwMCBBU0lDCisgKgorICogRmlyc3QgcmVsZWFzZQorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgorICogICAoYykgMjAwMCBJbi1TeXN0ZW0gRGVzaWduLCBJbmMuIChzdXBwb3J0QGluLXN5c3RlbS5jb20pCisgKgorICogU2VlIGlzZDIwMC5jIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX1VTQl9JU0QyMDBfSAorI2RlZmluZSBfVVNCX0lTRDIwMF9ICisKK2V4dGVybiB2b2lkIGlzZDIwMF9hdGFfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7CitleHRlcm4gaW50IGlzZDIwMF9Jbml0aWFsaXphdGlvbihzdHJ1Y3QgdXNfZGF0YSAqdXMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmY5ZDUxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9qdW1wc2hvdC5jCkBAIC0wLDAgKzEsNTk2IEBACisvKiBEcml2ZXIgZm9yIExleGFyICJKdW1wc2hvdCIgQ29tcGFjdCBGbGFzaCByZWFkZXIKKyAqCisgKiAkSWQ6IGp1bXBzaG90LmMsdiAxLjcgMjAwMi8wMi8yNSAwMDo0MDoxMyBtZGhhcm0gRXhwICQKKyAqCisgKiBqdW1wc2hvdCBkcml2ZXIgdjAuMToKKyAqCisgKiBGaXJzdCByZWxlYXNlCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAyMDAwIEppbW1pZSBNYXlmaWVsZCAobWF5ZmllbGQrdXNiQHNhY2toZWFkcy5vcmcpCisgKgorICogICBNYW55IHRoYW5rcyB0byBSb2JlcnQgQmFydWNoIGZvciB0aGUgU2FuRGlzayBTbWFydE1lZGlhIHJlYWRlciBkcml2ZXIKKyAqICAgd2hpY2ggSSB1c2VkIGFzIGEgdGVtcGxhdGUgZm9yIHRoaXMgZHJpdmVyLgorICoKKyAqICAgU29tZSBidWdmaXhlcyBhbmQgc2NhdHRlci1nYXRoZXIgY29kZSBieSBHcmVnb3J5IFAuIFNtaXRoIAorICogICAoZ3JlZy11c2JAZWxlY3RyaWNyYWluLmNvbSkKKyAqCisgKiAgIEZpeCBmb3IgbWVkaWEgY2hhbmdlIGJ5IEpvZXJnIFNjaG5laWRlciAoanNAam9lcmdzY2huZWlkZXIuY29tKQorICoKKyAqIERldmVsb3BlZCB3aXRoIHRoZSBhc3Npc3RhbmNlIG9mOgorICoKKyAqICAgKEMpIDIwMDIgQWxhbiBTdGVybiA8c3Rlcm5Acm93bGFuZC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKyAKKyAvKgorICAqIFRoaXMgZHJpdmVyIGF0dGVtcHRzIHRvIHN1cHBvcnQgdGhlIExleGFyIEp1bXBzaG90IFVTQiBDb21wYWN0Rmxhc2ggCisgICogcmVhZGVyLiAgTGlrZSBtYW55IG90aGVyIFVTQiBDb21wYWN0Rmxhc2ggcmVhZGVycywgdGhlIEp1bXBzaG90IGNvbnRhaW5zCisgICogYSBVU0ItdG8tQVRBIGNoaXAuIAorICAqCisgICogVGhpcyBkcml2ZXIgc3VwcG9ydHMgcmVhZGluZyBhbmQgd3JpdGluZy4gIElmIHlvdSdyZSB0cnVseSBwYXJhbm9pZCwKKyAgKiBob3dldmVyLCB5b3UgY2FuIGZvcmNlIHRoZSBkcml2ZXIgaW50byBhIHdyaXRlLXByb3RlY3RlZCBzdGF0ZSBieSBzZXR0aW5nCisgICogdGhlIFdQIGVuYWJsZSBiaXRzIGluIGp1bXBzaG90X2hhbmRsZV9tb2RlX3NlbnNlLiAgU2VlIHRoZSBjb21tZW50cworICAqIGluIHRoYXQgcm91dGluZS4KKyAgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorCisjaW5jbHVkZSAidXNiLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgImp1bXBzaG90LmgiCisKKworc3RhdGljIGlubGluZSBpbnQganVtcHNob3RfYnVsa19yZWFkKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCQkgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIAorCQkJCSAgICAgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpZiAobGVuID09IDApCisJCXJldHVybiBVU0JfU1RPUl9YRkVSX0dPT0Q7CisKKwlVU19ERUJVR1AoImp1bXBzaG90X2J1bGtfcmVhZDogIGxlbiA9ICVkXG4iLCBsZW4pOworCXJldHVybiB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnJlY3ZfYnVsa19waXBlLAorCQkJZGF0YSwgbGVuLCBOVUxMKTsKK30KKworCitzdGF0aWMgaW5saW5lIGludCBqdW1wc2hvdF9idWxrX3dyaXRlKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCQkgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCAKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIFVTQl9TVE9SX1hGRVJfR09PRDsKKworCVVTX0RFQlVHUCgianVtcHNob3RfYnVsa193cml0ZTogIGxlbiA9ICVkXG4iLCBsZW4pOworCXJldHVybiB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnNlbmRfYnVsa19waXBlLAorCQkJZGF0YSwgbGVuLCBOVUxMKTsKK30KKworCitzdGF0aWMgaW50IGp1bXBzaG90X2dldF9zdGF0dXMoc3RydWN0IHVzX2RhdGEgICp1cykKK3sKKwlpbnQgcmM7CisKKwlpZiAoIXVzKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJLy8gc2VuZCB0aGUgc2V0dXAKKwlyYyA9IHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIodXMsIHVzLT5yZWN2X2N0cmxfcGlwZSwKKwkJCQkgICAwLCAweEEwLCAwLCA3LCB1cy0+aW9idWYsIDEpOworCisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCWlmICh1cy0+aW9idWZbMF0gIT0gMHg1MCkgeworCQlVU19ERUJVR1AoImp1bXBzaG90X2dldF9zdGF0dXM6ICAweCUyeFxuIiwKKwkJCSAgdXMtPmlvYnVmWzBdKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKK3N0YXRpYyBpbnQganVtcHNob3RfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCSAgICAgIHN0cnVjdCBqdW1wc2hvdF9pbmZvICppbmZvLAorCQkJICAgICAgdTMyIHNlY3RvciwKKwkJCSAgICAgIHUzMiBzZWN0b3JzKQoreworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgIHRoaXN0aW1lOworCXVuc2lnbmVkIGludCB0b3RhbGxlbiwgYWxsb2NsZW47CisJaW50IGxlbiwgcmVzdWx0OworCXVuc2lnbmVkIGludCBzZ19pZHggPSAwLCBzZ19vZmZzZXQgPSAwOworCisJLy8gd2UncmUgd29ya2luZyBpbiBMQkEgbW9kZS4gIGFjY29yZGluZyB0byB0aGUgQVRBIHNwZWMsIAorCS8vIHdlIGNhbiBzdXBwb3J0IHVwIHRvIDI4LWJpdCBhZGRyZXNzaW5nLiAgSSBkb24ndCBrbm93IGlmIEp1bXBzaG90CisJLy8gc3VwcG9ydHMgYmV5b25kIDI0LWJpdCBhZGRyZXNzaW5nLiAgSXQncyBraW5kIG9mIGhhcmQgdG8gdGVzdCAKKwkvLyBzaW5jZSBpdCByZXF1aXJlcyA+IDhHQiBDRiBjYXJkLgorCisJaWYgKHNlY3RvciA+IDB4MEZGRkZGRkYpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwl0b3RhbGxlbiA9IHNlY3RvcnMgKiBpbmZvLT5zc2l6ZTsKKworCS8vIFNpbmNlIHdlIGRvbid0IHJlYWQgbW9yZSB0aGFuIDY0IEtCIGF0IGEgdGltZSwgd2UgaGF2ZSB0byBjcmVhdGUKKwkvLyBhIGJvdW5jZSBidWZmZXIgYW5kIG1vdmUgdGhlIGRhdGEgYSBwaWVjZSBhdCBhIHRpbWUgYmV0d2VlbiB0aGUKKwkvLyBib3VuY2UgYnVmZmVyIGFuZCB0aGUgYWN0dWFsIHRyYW5zZmVyIGJ1ZmZlci4KKworCWFsbG9jbGVuID0gbWluKHRvdGFsbGVuLCA2NTUzNnUpOworCWJ1ZmZlciA9IGttYWxsb2MoYWxsb2NsZW4sIEdGUF9OT0lPKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlkbyB7CisJCS8vIGxvb3AsIG5ldmVyIGFsbG9jYXRlIG9yIHRyYW5zZmVyIG1vcmUgdGhhbiA2NGsgYXQgb25jZQorCQkvLyAobWluKDEyOGssIDI1NSppbmZvLT5zc2l6ZSkgaXMgdGhlIHJlYWwgbGltaXQpCisJCWxlbiA9IG1pbih0b3RhbGxlbiwgYWxsb2NsZW4pOworCQl0aGlzdGltZSA9IChsZW4gLyBpbmZvLT5zc2l6ZSkgJiAweGZmOworCisJCWNvbW1hbmRbMF0gPSAwOworCQljb21tYW5kWzFdID0gdGhpc3RpbWU7CisJCWNvbW1hbmRbMl0gPSBzZWN0b3IgJiAweEZGOworCQljb21tYW5kWzNdID0gKHNlY3RvciA+PiAgOCkgJiAweEZGOworCQljb21tYW5kWzRdID0gKHNlY3RvciA+PiAxNikgJiAweEZGOworCisJCWNvbW1hbmRbNV0gPSAweEUwIHwgKChzZWN0b3IgPj4gMjQpICYgMHgwRik7CisJCWNvbW1hbmRbNl0gPSAweDIwOworCisJCS8vIHNlbmQgdGhlIHNldHVwICsgY29tbWFuZAorCQlyZXN1bHQgPSB1c2Jfc3Rvcl9jdHJsX3RyYW5zZmVyKHVzLCB1cy0+c2VuZF9jdHJsX3BpcGUsCisJCQkJCSAgICAgICAwLCAweDIwLCAwLCAxLCBjb21tYW5kLCA3KTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlnb3RvIGxlYXZlOworCisJCS8vIHJlYWQgdGhlIHJlc3VsdAorCQlyZXN1bHQgPSBqdW1wc2hvdF9idWxrX3JlYWQodXMsIGJ1ZmZlciwgbGVuKTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlnb3RvIGxlYXZlOworCisJCVVTX0RFQlVHUCgianVtcHNob3RfcmVhZF9kYXRhOiAgJWQgYnl0ZXNcbiIsIGxlbik7CisKKwkJLy8gU3RvcmUgdGhlIGRhdGEgaW4gdGhlIHRyYW5zZmVyIGJ1ZmZlcgorCQl1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYoYnVmZmVyLCBsZW4sIHVzLT5zcmIsCisJCQkJICZzZ19pZHgsICZzZ19vZmZzZXQsIFRPX1hGRVJfQlVGKTsKKworCQlzZWN0b3IgKz0gdGhpc3RpbWU7CisJCXRvdGFsbGVuIC09IGxlbjsKKwl9IHdoaWxlICh0b3RhbGxlbiA+IDApOworCisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisKKyBsZWF2ZToKKwlrZnJlZShidWZmZXIpOworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7Cit9CisKKworc3RhdGljIGludCBqdW1wc2hvdF93cml0ZV9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCSAgICAgICBzdHJ1Y3QganVtcHNob3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICB1MzIgc2VjdG9yLAorCQkJICAgICAgIHUzMiBzZWN0b3JzKQoreworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgIHRoaXN0aW1lOworCXVuc2lnbmVkIGludCB0b3RhbGxlbiwgYWxsb2NsZW47CisJaW50IGxlbiwgcmVzdWx0LCB3YWl0Y291bnQ7CisJdW5zaWduZWQgaW50IHNnX2lkeCA9IDAsIHNnX29mZnNldCA9IDA7CisKKwkvLyB3ZSdyZSB3b3JraW5nIGluIExCQSBtb2RlLiAgYWNjb3JkaW5nIHRvIHRoZSBBVEEgc3BlYywgCisJLy8gd2UgY2FuIHN1cHBvcnQgdXAgdG8gMjgtYml0IGFkZHJlc3NpbmcuICBJIGRvbid0IGtub3cgaWYgSnVtcHNob3QKKwkvLyBzdXBwb3J0cyBiZXlvbmQgMjQtYml0IGFkZHJlc3NpbmcuICBJdCdzIGtpbmQgb2YgaGFyZCB0byB0ZXN0IAorCS8vIHNpbmNlIGl0IHJlcXVpcmVzID4gOEdCIENGIGNhcmQuCisJLy8KKwlpZiAoc2VjdG9yID4gMHgwRkZGRkZGRikKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCXRvdGFsbGVuID0gc2VjdG9ycyAqIGluZm8tPnNzaXplOworCisJLy8gU2luY2Ugd2UgZG9uJ3Qgd3JpdGUgbW9yZSB0aGFuIDY0IEtCIGF0IGEgdGltZSwgd2UgaGF2ZSB0byBjcmVhdGUKKwkvLyBhIGJvdW5jZSBidWZmZXIgYW5kIG1vdmUgdGhlIGRhdGEgYSBwaWVjZSBhdCBhIHRpbWUgYmV0d2VlbiB0aGUKKwkvLyBib3VuY2UgYnVmZmVyIGFuZCB0aGUgYWN0dWFsIHRyYW5zZmVyIGJ1ZmZlci4KKworCWFsbG9jbGVuID0gbWluKHRvdGFsbGVuLCA2NTUzNnUpOworCWJ1ZmZlciA9IGttYWxsb2MoYWxsb2NsZW4sIEdGUF9OT0lPKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlkbyB7CisJCS8vIGxvb3AsIG5ldmVyIGFsbG9jYXRlIG9yIHRyYW5zZmVyIG1vcmUgdGhhbiA2NGsgYXQgb25jZQorCQkvLyAobWluKDEyOGssIDI1NSppbmZvLT5zc2l6ZSkgaXMgdGhlIHJlYWwgbGltaXQpCisKKwkJbGVuID0gbWluKHRvdGFsbGVuLCBhbGxvY2xlbik7CisJCXRoaXN0aW1lID0gKGxlbiAvIGluZm8tPnNzaXplKSAmIDB4ZmY7CisKKwkJLy8gR2V0IHRoZSBkYXRhIGZyb20gdGhlIHRyYW5zZmVyIGJ1ZmZlcgorCQl1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYoYnVmZmVyLCBsZW4sIHVzLT5zcmIsCisJCQkJJnNnX2lkeCwgJnNnX29mZnNldCwgRlJPTV9YRkVSX0JVRik7CisKKwkJY29tbWFuZFswXSA9IDA7CisJCWNvbW1hbmRbMV0gPSB0aGlzdGltZTsKKwkJY29tbWFuZFsyXSA9IHNlY3RvciAmIDB4RkY7CisJCWNvbW1hbmRbM10gPSAoc2VjdG9yID4+ICA4KSAmIDB4RkY7CisJCWNvbW1hbmRbNF0gPSAoc2VjdG9yID4+IDE2KSAmIDB4RkY7CisKKwkJY29tbWFuZFs1XSA9IDB4RTAgfCAoKHNlY3RvciA+PiAyNCkgJiAweDBGKTsKKwkJY29tbWFuZFs2XSA9IDB4MzA7CisKKwkJLy8gc2VuZCB0aGUgc2V0dXAgKyBjb21tYW5kCisJCXJlc3VsdCA9IHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIodXMsIHVzLT5zZW5kX2N0cmxfcGlwZSwKKwkJCTAsIDB4MjAsIDAsIDEsIGNvbW1hbmQsIDcpOworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCWdvdG8gbGVhdmU7CisKKwkJLy8gc2VuZCB0aGUgZGF0YQorCQlyZXN1bHQgPSBqdW1wc2hvdF9idWxrX3dyaXRlKHVzLCBidWZmZXIsIGxlbik7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJZ290byBsZWF2ZTsKKworCQkvLyByZWFkIHRoZSByZXN1bHQuICBhcHBhcmVudGx5IHRoZSBidWxrIHdyaXRlIGNhbiBjb21wbGV0ZQorCQkvLyBiZWZvcmUgdGhlIGp1bXBzaG90IGRyaXZlIGlzIGZpbmlzaGVkIHdyaXRpbmcuICBzbyB3ZSBsb29wCisJCS8vIGhlcmUgdW50aWwgd2UgZ2V0IGEgZ29vZCByZXR1cm4gY29kZQorCQl3YWl0Y291bnQgPSAwOworCQlkbyB7CisJCQlyZXN1bHQgPSBqdW1wc2hvdF9nZXRfc3RhdHVzKHVzKTsKKwkJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJCQkvLyBJIGhhdmUgbm90IGV4cGVyaW1lbnRlZCB0byBmaW5kIHRoZSBzbWFsbGVzdCB2YWx1ZS4KKwkJCQkvLworCQkJCW1zbGVlcCg1MCk7IAorCQkJfQorCQl9IHdoaWxlICgocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSAmJiAod2FpdGNvdW50IDwgMTApKTsKKworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQkJVVNfREVCVUdQKCJqdW1wc2hvdF93cml0ZV9kYXRhOiAgR2FoISAgV2FpdGNvdW50ID0gMTAuICBCYWQgd3JpdGUhP1xuIik7CisKKwkJc2VjdG9yICs9IHRoaXN0aW1lOworCQl0b3RhbGxlbiAtPSBsZW47CisJfSB3aGlsZSAodG90YWxsZW4gPiAwKTsKKworCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJlc3VsdDsKKworIGxlYXZlOgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKK30KKworc3RhdGljIGludCBqdW1wc2hvdF9pZF9kZXZpY2Uoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJICAgICAgc3RydWN0IGp1bXBzaG90X2luZm8gKmluZm8pCit7CisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBjaGFyICpyZXBseTsKKwlpbnQgCSByYzsKKworCWlmICghdXMgfHwgIWluZm8pCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwljb21tYW5kWzBdID0gMHhFMDsKKwljb21tYW5kWzFdID0gMHhFQzsKKwlyZXBseSA9IGttYWxsb2MoNTEyLCBHRlBfTk9JTyk7CisJaWYgKCFyZXBseSkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCS8vIHNlbmQgdGhlIHNldHVwCisJcmMgPSB1c2Jfc3Rvcl9jdHJsX3RyYW5zZmVyKHVzLCB1cy0+c2VuZF9jdHJsX3BpcGUsCisJCQkJICAgMCwgMHgyMCwgMCwgNiwgY29tbWFuZCwgMik7CisKKwlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCVVTX0RFQlVHUCgianVtcHNob3RfaWRfZGV2aWNlOiAgR2FoISAiCisJCQkgICJzZW5kX2NvbnRyb2wgZm9yIHJlYWRfY2FwYWNpdHkgZmFpbGVkXG4iKTsKKwkJcmMgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCWdvdG8gbGVhdmU7CisJfQorCisJLy8gcmVhZCB0aGUgcmVwbHkKKwlyYyA9IGp1bXBzaG90X2J1bGtfcmVhZCh1cywgcmVwbHksIDUxMik7CisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQlyYyA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwlpbmZvLT5zZWN0b3JzID0gKCh1MzIpKHJlcGx5WzExN10pIDw8IDI0KSB8CisJCQkoKHUzMikocmVwbHlbMTE2XSkgPDwgMTYpIHwKKwkJCSgodTMyKShyZXBseVsxMTVdKSA8PCAgOCkgfAorCQkJKCh1MzIpKHJlcGx5WzExNF0pICAgICAgKTsKKworCXJjID0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisKKyBsZWF2ZToKKwlrZnJlZShyZXBseSk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGp1bXBzaG90X2hhbmRsZV9tb2RlX3NlbnNlKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCQkgICAgICBzdHJ1Y3Qgc2NzaV9jbW5kICogc3JiLCAKKwkJCQkgICAgICBpbnQgc2Vuc2VfNikKK3sKKwlzdGF0aWMgdW5zaWduZWQgY2hhciByd19lcnJfcGFnZVsxMl0gPSB7CisJCTB4MSwgMHhBLCAweDIxLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwCisJfTsKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBjYWNoZV9wYWdlWzEyXSA9IHsKKwkJMHg4LCAweEEsIDB4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAorCX07CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgcmJhY19wYWdlWzEyXSA9IHsKKwkJMHgxQiwgMHhBLCAwLCAweDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCisJfTsKKwlzdGF0aWMgdW5zaWduZWQgY2hhciB0aW1lcl9wYWdlWzhdID0geworCQkweDFDLCAweDYsIDAsIDAsIDAsIDAKKwl9OworCXVuc2lnbmVkIGNoYXIgcGMsIHBhZ2VfY29kZTsKKwl1bnNpZ25lZCBpbnQgaSA9IDA7CisJc3RydWN0IGp1bXBzaG90X2luZm8gKmluZm8gPSAoc3RydWN0IGp1bXBzaG90X2luZm8gKikgKHVzLT5leHRyYSk7CisJdW5zaWduZWQgY2hhciAqcHRyID0gdXMtPmlvYnVmOworCisJcGMgPSBzcmItPmNtbmRbMl0gPj4gNjsKKwlwYWdlX2NvZGUgPSBzcmItPmNtbmRbMl0gJiAweDNGOworCisJc3dpdGNoIChwYykgeworCSAgIGNhc2UgMHgwOgorCQlVU19ERUJVR1AoImp1bXBzaG90X2hhbmRsZV9tb2RlX3NlbnNlOiAgQ3VycmVudCB2YWx1ZXNcbiIpOworCQlicmVhazsKKwkgICBjYXNlIDB4MToKKwkJVVNfREVCVUdQKCJqdW1wc2hvdF9oYW5kbGVfbW9kZV9zZW5zZTogIENoYW5nZWFibGUgdmFsdWVzXG4iKTsKKwkJYnJlYWs7CisJICAgY2FzZSAweDI6CisJCVVTX0RFQlVHUCgianVtcHNob3RfaGFuZGxlX21vZGVfc2Vuc2U6ICBEZWZhdWx0IHZhbHVlc1xuIik7CisJCWJyZWFrOworCSAgIGNhc2UgMHgzOgorCQlVU19ERUJVR1AoImp1bXBzaG90X2hhbmRsZV9tb2RlX3NlbnNlOiAgU2F2ZXMgdmFsdWVzXG4iKTsKKwkJYnJlYWs7CisJfQorCisJbWVtc2V0KHB0ciwgMCwgOCk7CisJaWYgKHNlbnNlXzYpIHsKKwkJcHRyWzJdID0gMHgwMDsJCS8vIFdQIGVuYWJsZTogMHg4MAorCQlpID0gNDsKKwl9IGVsc2UgeworCQlwdHJbM10gPSAweDAwOwkJLy8gV1AgZW5hYmxlOiAweDgwCisJCWkgPSA4OworCX0KKworCXN3aXRjaCAocGFnZV9jb2RlKSB7CisJICAgY2FzZSAweDA6CisJCS8vIHZlbmRvci1zcGVjaWZpYyBtb2RlCisJCWluZm8tPnNlbnNlX2tleSA9IDB4MDU7CisJCWluZm8tPnNlbnNlX2FzYyA9IDB4MjQ7CisJCWluZm8tPnNlbnNlX2FzY3EgPSAweDAwOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKworCSAgIGNhc2UgMHgxOgorCQltZW1jcHkocHRyICsgaSwgcndfZXJyX3BhZ2UsIHNpemVvZihyd19lcnJfcGFnZSkpOworCQlpICs9IHNpemVvZihyd19lcnJfcGFnZSk7CisJCWJyZWFrOworCisJICAgY2FzZSAweDg6CisJCW1lbWNweShwdHIgKyBpLCBjYWNoZV9wYWdlLCBzaXplb2YoY2FjaGVfcGFnZSkpOworCQlpICs9IHNpemVvZihjYWNoZV9wYWdlKTsKKwkJYnJlYWs7CisKKwkgICBjYXNlIDB4MUI6CisJCW1lbWNweShwdHIgKyBpLCByYmFjX3BhZ2UsIHNpemVvZihyYmFjX3BhZ2UpKTsKKwkJaSArPSBzaXplb2YocmJhY19wYWdlKTsKKwkJYnJlYWs7CisKKwkgICBjYXNlIDB4MUM6CisJCW1lbWNweShwdHIgKyBpLCB0aW1lcl9wYWdlLCBzaXplb2YodGltZXJfcGFnZSkpOworCQlpICs9IHNpemVvZih0aW1lcl9wYWdlKTsKKwkJYnJlYWs7CisKKwkgICBjYXNlIDB4M0Y6CisJCW1lbWNweShwdHIgKyBpLCB0aW1lcl9wYWdlLCBzaXplb2YodGltZXJfcGFnZSkpOworCQlpICs9IHNpemVvZih0aW1lcl9wYWdlKTsKKwkJbWVtY3B5KHB0ciArIGksIHJiYWNfcGFnZSwgc2l6ZW9mKHJiYWNfcGFnZSkpOworCQlpICs9IHNpemVvZihyYmFjX3BhZ2UpOworCQltZW1jcHkocHRyICsgaSwgY2FjaGVfcGFnZSwgc2l6ZW9mKGNhY2hlX3BhZ2UpKTsKKwkJaSArPSBzaXplb2YoY2FjaGVfcGFnZSk7CisJCW1lbWNweShwdHIgKyBpLCByd19lcnJfcGFnZSwgc2l6ZW9mKHJ3X2Vycl9wYWdlKSk7CisJCWkgKz0gc2l6ZW9mKHJ3X2Vycl9wYWdlKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHNlbnNlXzYpCisJCXB0clswXSA9IGkgLSAxOworCWVsc2UKKwkJKChfX2JlMTYgKikgcHRyKVswXSA9IGNwdV90b19iZTE2KGkgLSAyKTsKKwl1c2Jfc3Rvcl9zZXRfeGZlcl9idWYocHRyLCBpLCBzcmIpOworCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCisKK3N0YXRpYyB2b2lkIGp1bXBzaG90X2luZm9fZGVzdHJ1Y3Rvcih2b2lkICpleHRyYSkKK3sKKwkvLyB0aGlzIHJvdXRpbmUgaXMgYSBwbGFjZWhvbGRlci4uLgorCS8vIGN1cnJlbnRseSwgd2UgZG9uJ3QgYWxsb2NhdGUgYW55IGV4dHJhIGJsb2NrcyBzbyB3ZSdyZSBva2F5Cit9CisKKworCisvLyBUcmFuc3BvcnQgZm9yIHRoZSBMZXhhciAnSnVtcHNob3QnCisvLworaW50IGp1bXBzaG90X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICogc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJc3RydWN0IGp1bXBzaG90X2luZm8gKmluZm87CisJaW50IHJjOworCXVuc2lnbmVkIGxvbmcgYmxvY2ssIGJsb2NrczsKKwl1bnNpZ25lZCBjaGFyICpwdHIgPSB1cy0+aW9idWY7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5xdWlyeV9yZXNwb25zZVs4XSA9IHsKKwkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMSwgMHgxRiwgMHgwMCwgMHgwMCwgMHgwMAorCX07CisKKwlpZiAoIXVzLT5leHRyYSkgeworCQl1cy0+ZXh0cmEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QganVtcHNob3RfaW5mbyksIEdGUF9OT0lPKTsKKwkJaWYgKCF1cy0+ZXh0cmEpIHsKKwkJCVVTX0RFQlVHUCgianVtcHNob3RfdHJhbnNwb3J0OiAgR2FoISBDYW4ndCBhbGxvY2F0ZSBzdG9yYWdlIGZvciBqdW1wc2hvdCBpbmZvIHN0cnVjdCFcbiIpOworCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJfQorCQltZW1zZXQodXMtPmV4dHJhLCAwLCBzaXplb2Yoc3RydWN0IGp1bXBzaG90X2luZm8pKTsKKwkJdXMtPmV4dHJhX2Rlc3RydWN0b3IgPSBqdW1wc2hvdF9pbmZvX2Rlc3RydWN0b3I7CisJfQorCisJaW5mbyA9IChzdHJ1Y3QganVtcHNob3RfaW5mbyAqKSAodXMtPmV4dHJhKTsKKworCWlmIChzcmItPmNtbmRbMF0gPT0gSU5RVUlSWSkgeworCQlVU19ERUJVR1AoImp1bXBzaG90X3RyYW5zcG9ydDogIElOUVVJUlkuICBSZXR1cm5pbmcgYm9ndXMgcmVzcG9uc2UuXG4iKTsKKwkJbWVtY3B5KHB0ciwgaW5xdWlyeV9yZXNwb25zZSwgc2l6ZW9mKGlucXVpcnlfcmVzcG9uc2UpKTsKKwkJZmlsbF9pbnF1aXJ5X3Jlc3BvbnNlKHVzLCBwdHIsIDM2KTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVBRF9DQVBBQ0lUWSkgeworCQlpbmZvLT5zc2l6ZSA9IDB4MjAwOyAgLy8gaGFyZCBjb2RlZCA1MTIgYnl0ZSBzZWN0b3JzIGFzIHBlciBBVEEgc3BlYworCisJCXJjID0ganVtcHNob3RfZ2V0X3N0YXR1cyh1cyk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCXJldHVybiByYzsKKworCQlyYyA9IGp1bXBzaG90X2lkX2RldmljZSh1cywgaW5mbyk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCXJldHVybiByYzsKKworCQlVU19ERUJVR1AoImp1bXBzaG90X3RyYW5zcG9ydDogIFJFQURfQ0FQQUNJVFk6ICAlbGQgc2VjdG9ycywgJWxkIGJ5dGVzIHBlciBzZWN0b3JcbiIsCisJCQkgIGluZm8tPnNlY3RvcnMsIGluZm8tPnNzaXplKTsKKworCQkvLyBidWlsZCB0aGUgcmVwbHkKKwkJLy8KKwkJKChfX2JlMzIgKikgcHRyKVswXSA9IGNwdV90b19iZTMyKGluZm8tPnNlY3RvcnMgLSAxKTsKKwkJKChfX2JlMzIgKikgcHRyKVsxXSA9IGNwdV90b19iZTMyKGluZm8tPnNzaXplKTsKKwkJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHB0ciwgOCwgc3JiKTsKKworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBNT0RFX1NFTEVDVF8xMCkgeworCQlVU19ERUJVR1AoImp1bXBzaG90X3RyYW5zcG9ydDogIEdhaCEgTU9ERV9TRUxFQ1RfMTAuXG4iKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFQURfMTApIHsKKwkJYmxvY2sgPSAoKHUzMikoc3JiLT5jbW5kWzJdKSA8PCAyNCkgfCAoKHUzMikoc3JiLT5jbW5kWzNdKSA8PCAxNikgfAorCQkJKCh1MzIpKHNyYi0+Y21uZFs0XSkgPDwgIDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs1XSkpOworCisJCWJsb2NrcyA9ICgodTMyKShzcmItPmNtbmRbN10pIDw8IDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs4XSkpOworCisJCVVTX0RFQlVHUCgianVtcHNob3RfdHJhbnNwb3J0OiAgUkVBRF8xMDogcmVhZCBibG9jayAweCUwNGx4ICBjb3VudCAlbGRcbiIsIGJsb2NrLCBibG9ja3MpOworCQlyZXR1cm4ganVtcHNob3RfcmVhZF9kYXRhKHVzLCBpbmZvLCBibG9jaywgYmxvY2tzKTsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFQURfMTIpIHsKKwkJLy8gSSBkb24ndCB0aGluayB3ZSdsbCBldmVyIHNlZSBhIFJFQURfMTIgYnV0IHN1cHBvcnQgaXQgYW55d2F5Li4uCisJCS8vCisJCWJsb2NrID0gKCh1MzIpKHNyYi0+Y21uZFsyXSkgPDwgMjQpIHwgKCh1MzIpKHNyYi0+Y21uZFszXSkgPDwgMTYpIHwKKwkJCSgodTMyKShzcmItPmNtbmRbNF0pIDw8ICA4KSB8ICgodTMyKShzcmItPmNtbmRbNV0pKTsKKworCQlibG9ja3MgPSAoKHUzMikoc3JiLT5jbW5kWzZdKSA8PCAyNCkgfCAoKHUzMikoc3JiLT5jbW5kWzddKSA8PCAxNikgfAorCQkJICgodTMyKShzcmItPmNtbmRbOF0pIDw8ICA4KSB8ICgodTMyKShzcmItPmNtbmRbOV0pKTsKKworCQlVU19ERUJVR1AoImp1bXBzaG90X3RyYW5zcG9ydDogIFJFQURfMTI6IHJlYWQgYmxvY2sgMHglMDRseCAgY291bnQgJWxkXG4iLCBibG9jaywgYmxvY2tzKTsKKwkJcmV0dXJuIGp1bXBzaG90X3JlYWRfZGF0YSh1cywgaW5mbywgYmxvY2ssIGJsb2Nrcyk7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBXUklURV8xMCkgeworCQlibG9jayA9ICgodTMyKShzcmItPmNtbmRbMl0pIDw8IDI0KSB8ICgodTMyKShzcmItPmNtbmRbM10pIDw8IDE2KSB8CisJCQkoKHUzMikoc3JiLT5jbW5kWzRdKSA8PCAgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzVdKSk7CisKKwkJYmxvY2tzID0gKCh1MzIpKHNyYi0+Y21uZFs3XSkgPDwgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzhdKSk7CisKKwkJVVNfREVCVUdQKCJqdW1wc2hvdF90cmFuc3BvcnQ6ICBXUklURV8xMDogd3JpdGUgYmxvY2sgMHglMDRseCAgY291bnQgJWxkXG4iLCBibG9jaywgYmxvY2tzKTsKKwkJcmV0dXJuIGp1bXBzaG90X3dyaXRlX2RhdGEodXMsIGluZm8sIGJsb2NrLCBibG9ja3MpOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gV1JJVEVfMTIpIHsKKwkJLy8gSSBkb24ndCB0aGluayB3ZSdsbCBldmVyIHNlZSBhIFdSSVRFXzEyIGJ1dCBzdXBwb3J0IGl0IGFueXdheS4uLgorCQkvLworCQlibG9jayA9ICgodTMyKShzcmItPmNtbmRbMl0pIDw8IDI0KSB8ICgodTMyKShzcmItPmNtbmRbM10pIDw8IDE2KSB8CisJCQkoKHUzMikoc3JiLT5jbW5kWzRdKSA8PCAgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzVdKSk7CisKKwkJYmxvY2tzID0gKCh1MzIpKHNyYi0+Y21uZFs2XSkgPDwgMjQpIHwgKCh1MzIpKHNyYi0+Y21uZFs3XSkgPDwgMTYpIHwKKwkJCSAoKHUzMikoc3JiLT5jbW5kWzhdKSA8PCAgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzldKSk7CisKKwkJVVNfREVCVUdQKCJqdW1wc2hvdF90cmFuc3BvcnQ6ICBXUklURV8xMjogd3JpdGUgYmxvY2sgMHglMDRseCAgY291bnQgJWxkXG4iLCBibG9jaywgYmxvY2tzKTsKKwkJcmV0dXJuIGp1bXBzaG90X3dyaXRlX2RhdGEodXMsIGluZm8sIGJsb2NrLCBibG9ja3MpOworCX0KKworCisJaWYgKHNyYi0+Y21uZFswXSA9PSBURVNUX1VOSVRfUkVBRFkpIHsKKwkJVVNfREVCVUdQKCJqdW1wc2hvdF90cmFuc3BvcnQ6ICBURVNUX1VOSVRfUkVBRFkuXG4iKTsKKwkJcmV0dXJuIGp1bXBzaG90X2dldF9zdGF0dXModXMpOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSkgeworCQlVU19ERUJVR1AoImp1bXBzaG90X3RyYW5zcG9ydDogIFJFUVVFU1RfU0VOU0UuXG4iKTsKKworCQltZW1zZXQocHRyLCAwLCAxOCk7CisJCXB0clswXSA9IDB4RjA7CisJCXB0clsyXSA9IGluZm8tPnNlbnNlX2tleTsKKwkJcHRyWzddID0gMTE7CisJCXB0clsxMl0gPSBpbmZvLT5zZW5zZV9hc2M7CisJCXB0clsxM10gPSBpbmZvLT5zZW5zZV9hc2NxOworCQl1c2Jfc3Rvcl9zZXRfeGZlcl9idWYocHRyLCAxOCwgc3JiKTsKKworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBNT0RFX1NFTlNFKSB7CisJCVVTX0RFQlVHUCgianVtcHNob3RfdHJhbnNwb3J0OiAgTU9ERV9TRU5TRV82IGRldGVjdGVkXG4iKTsKKwkJcmV0dXJuIGp1bXBzaG90X2hhbmRsZV9tb2RlX3NlbnNlKHVzLCBzcmIsIDEpOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gTU9ERV9TRU5TRV8xMCkgeworCQlVU19ERUJVR1AoImp1bXBzaG90X3RyYW5zcG9ydDogIE1PREVfU0VOU0VfMTAgZGV0ZWN0ZWRcbiIpOworCQlyZXR1cm4ganVtcHNob3RfaGFuZGxlX21vZGVfc2Vuc2UodXMsIHNyYiwgMCk7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBBTExPV19NRURJVU1fUkVNT1ZBTCkgeworCQkvLyBzdXJlLiAgd2hhdGV2ZXIuICBub3QgbGlrZSB3ZSBjYW4gc3RvcCB0aGUgdXNlciBmcm9tIHBvcHBpbmcKKwkJLy8gdGhlIG1lZGlhIG91dCBvZiB0aGUgZGV2aWNlIChubyBsb2NraW5nIGRvb3JzLCBldGMpCisJCS8vCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFNUQVJUX1NUT1ApIHsKKwkJLyogdGhpcyBpcyB1c2VkIGJ5IHNkLmMnY2hlY2tfc2NzaWRpc2tfbWVkaWFfY2hhbmdlIHRvIGRldGVjdAorCQkgICBtZWRpYSBjaGFuZ2UgKi8KKwkJVVNfREVCVUdQKCJqdW1wc2hvdF90cmFuc3BvcnQ6ICBTVEFSVF9TVE9QLlxuIik7CisJCS8qIHRoZSBmaXJzdCBqdW1wc2hvdF9pZF9kZXZpY2UgYWZ0ZXIgYSBtZWRpYSBjaGFuZ2UgcmV0dXJucworCQkgICBhbiBlcnJvciAoZGV0ZXJtaW5lZCBleHBlcmltZW50YWxseSkgKi8KKwkJcmMgPSBqdW1wc2hvdF9pZF9kZXZpY2UodXMsIGluZm8pOworCQlpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJCWluZm8tPnNlbnNlX2tleSA9IE5PX1NFTlNFOworCQkJc3JiLT5yZXN1bHQgPSBTVUNDRVNTOworCQl9IGVsc2UgeworCQkJaW5mby0+c2Vuc2Vfa2V5ID0gVU5JVF9BVFRFTlRJT047CisJCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKKwkJfQorCQlyZXR1cm4gcmM7CisJfQorCisJVVNfREVCVUdQKCJqdW1wc2hvdF90cmFuc3BvcnQ6ICBHYWghIFVua25vd24gY29tbWFuZDogJWQgKDB4JXgpXG4iLAorCQkgIHNyYi0+Y21uZFswXSwgc3JiLT5jbW5kWzBdKTsKKwlpbmZvLT5zZW5zZV9rZXkgPSAweDA1OworCWluZm8tPnNlbnNlX2FzYyA9IDB4MjA7CisJaW5mby0+c2Vuc2VfYXNjcSA9IDB4MDA7CisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2p1bXBzaG90LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTliYWM5ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvanVtcHNob3QuaApAQCAtMCwwICsxLDM5IEBACisvKiBEcml2ZXIgZm9yIExleGFyICJKdW1wc2hvdCIgVVNCIENvbXBhY3QgRmxhc2ggcmVhZGVyCisgKiBIZWFkZXIgRmlsZQorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgorICogICAoYykgMjAwMCBKaW1taWUgTWF5ZmllbGQgKG1heWZpZWxkK3VzYkBzYWNraGVhZHMub3JnKQorICoKKyAqIFNlZSBqdW1wc2hvdC5jIGZvciBtb3JlIGV4cGxhbmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfVVNCX0pVTVBTSE9UX0gKKyNkZWZpbmUgX1VTQl9KVU1QU0hPVF9ICisKK2V4dGVybiBpbnQganVtcHNob3RfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKKworc3RydWN0IGp1bXBzaG90X2luZm8geworICAgdW5zaWduZWQgbG9uZyAgIHNlY3RvcnM7ICAgICAvLyB0b3RhbCBzZWN0b3IgY291bnQKKyAgIHVuc2lnbmVkIGxvbmcgICBzc2l6ZTsgICAgICAgLy8gc2VjdG9yIHNpemUgaW4gYnl0ZXMKKyAKKyAgIC8vIHRoZSBmb2xsb3dpbmcgYXJlbid0IHVzZWQgeWV0CisgICB1bnNpZ25lZCBjaGFyICAgc2Vuc2Vfa2V5OworICAgdW5zaWduZWQgbG9uZyAgIHNlbnNlX2FzYzsgICAvLyBhZGRpdGlvbmFsIHNlbnNlIGNvZGUKKyAgIHVuc2lnbmVkIGxvbmcgICBzZW5zZV9hc2NxOyAgLy8gYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllcgorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFkMzA0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvcHJvdG9jb2wuYwpAQCAtMCwwICsxLDI1NCBAQAorLyogRHJpdmVyIGZvciBVU0IgTWFzcyBTdG9yYWdlIGNvbXBsaWFudCBkZXZpY2VzCisgKgorICogJElkOiBwcm90b2NvbC5jLHYgMS4xNCAyMDAyLzA0LzIyIDAzOjM5OjQzIG1kaGFybSBFeHAgJAorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgorICogICAoYykgMTk5OS0yMDAyIE1hdHRoZXcgRGhhcm0gKG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0KQorICoKKyAqIERldmVsb3BlZCB3aXRoIHRoZSBhc3Npc3RhbmNlIG9mOgorICogICAoYykgMjAwMCBEYXZpZCBMLiBCcm93biwgSnIuICh1c2Itc3RvcmFnZUBkYXZpZGIub3JnKQorICogICAoYykgMjAwMiBBbGFuIFN0ZXJuIChzdGVybkByb3dsYW5kLm9yZykKKyAqCisgKiBJbml0aWFsIHdvcmsgYnk6CisgKiAgIChjKSAxOTk5IE1pY2hhZWwgR2VlIChtaWNoYWVsQGxpbnV4c3BlY2lmaWMuY29tKQorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSAnVVNCIE1hc3MgU3RvcmFnZSBDbGFzcycgZG9jdW1lbnQuIFRoaXMKKyAqIGRlc2NyaWJlcyBpbiBkZXRhaWwgdGhlIHByb3RvY29sIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBzdWNoCisgKiBkZXZpY2VzLiAgQ2xlYXJseSwgdGhlIGRlc2lnbmVycyBoYWQgU0NTSSBhbmQgQVRBUEkgY29tbWFuZHMgaW4KKyAqIG1pbmQgd2hlbiB0aGV5IGNyZWF0ZWQgdGhpcyBkb2N1bWVudC4gIFRoZSBjb21tYW5kcyBhcmUgYWxsIHZlcnkKKyAqIHNpbWlsYXIgdG8gY29tbWFuZHMgaW4gdGhlIFNDU0ktSUkgYW5kIEFUQVBJIHNwZWNpZmljYXRpb25zLgorICoKKyAqIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgaW4gYSBudW1iZXIgb2YgY2FzZXMgdGhpcyBjbGFzcworICogZXhoaWJpdHMgY2xhc3Mtc3BlY2lmaWMgZXhlbXB0aW9ucyBmcm9tIHRoZSBVU0Igc3BlY2lmaWNhdGlvbi4KKyAqIE5vdGFibHkgdGhlIHVzYWdlIG9mIE5BSywgU1RBTEwgYW5kIEFDSyBkaWZmZXJzIGZyb20gdGhlIG5vcm0sIGluCisgKiB0aGF0IHRoZXkgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2FpdCwgZmFpbGVkIGFuZCBPSyBvbiBjb21tYW5kcy4KKyAqCisgKiBBbHNvLCBmb3IgY2VydGFpbiBkZXZpY2VzLCB0aGUgaW50ZXJydXB0IGVuZHBvaW50IGlzIHVzZWQgdG8gY29udmV5CisgKiBzdGF0dXMgb2YgYSBjb21tYW5kLgorICoKKyAqIFBsZWFzZSBzZWUgaHR0cDovL3d3dy5vbmUtZXllZC1hbGllbi5uZXQvfm1kaGFybS9saW51eC11c2IgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKworI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgInByb3RvY29sLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJzY3NpZ2x1ZS5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb3RvY29sIHJvdXRpbmVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgdXNiX3N0b3JfcWljMTU3X2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJLyogUGFkIHRoZSBBVEFQSSBjb21tYW5kIHdpdGggemVyb3MgCisJICoKKwkgKiBOT1RFOiBUaGlzIG9ubHkgd29ya3MgYmVjYXVzZSBhIHNjc2lfY21uZCBzdHJ1Y3QgZmllbGQgY29udGFpbnMKKwkgKiBhIHVuc2lnbmVkIGNoYXIgY21uZFsxNl0sIHNvIHdlIGtub3cgd2UgaGF2ZSBzdG9yYWdlIGF2YWlsYWJsZQorCSAqLworCWZvciAoOyBzcmItPmNtZF9sZW48MTI7IHNyYi0+Y21kX2xlbisrKQorCQlzcmItPmNtbmRbc3JiLT5jbWRfbGVuXSA9IDA7CisKKwkvKiBzZXQgY29tbWFuZCBsZW5ndGggdG8gMTIgYnl0ZXMgKi8KKwlzcmItPmNtZF9sZW4gPSAxMjsKKworCS8qIHNlbmQgdGhlIGNvbW1hbmQgdG8gdGhlIHRyYW5zcG9ydCBsYXllciAqLworCXVzYl9zdG9yX2ludm9rZV90cmFuc3BvcnQoc3JiLCB1cyk7Cit9CisKK3ZvaWQgdXNiX3N0b3JfQVRBUElfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwkvKiBQYWQgdGhlIEFUQVBJIGNvbW1hbmQgd2l0aCB6ZXJvcyAKKwkgKgorCSAqIE5PVEU6IFRoaXMgb25seSB3b3JrcyBiZWNhdXNlIGEgc2NzaV9jbW5kIHN0cnVjdCBmaWVsZCBjb250YWlucworCSAqIGEgdW5zaWduZWQgY2hhciBjbW5kWzE2XSwgc28gd2Uga25vdyB3ZSBoYXZlIHN0b3JhZ2UgYXZhaWxhYmxlCisJICovCisKKwkvKiBQYWQgdGhlIEFUQVBJIGNvbW1hbmQgd2l0aCB6ZXJvcyAqLworCWZvciAoOyBzcmItPmNtZF9sZW48MTI7IHNyYi0+Y21kX2xlbisrKQorCQlzcmItPmNtbmRbc3JiLT5jbWRfbGVuXSA9IDA7CisKKwkvKiBzZXQgY29tbWFuZCBsZW5ndGggdG8gMTIgYnl0ZXMgKi8KKwlzcmItPmNtZF9sZW4gPSAxMjsKKworCS8qIHNlbmQgdGhlIGNvbW1hbmQgdG8gdGhlIHRyYW5zcG9ydCBsYXllciAqLworCXVzYl9zdG9yX2ludm9rZV90cmFuc3BvcnQoc3JiLCB1cyk7Cit9CisKKwordm9pZCB1c2Jfc3Rvcl91ZmlfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwkvKiBmaXggc29tZSBjb21tYW5kcyAtLSB0aGlzIGlzIGEgZm9ybSBvZiBtb2RlIHRyYW5zbGF0aW9uCisJICogVUZJIGRldmljZXMgb25seSBhY2NlcHQgMTIgYnl0ZSBsb25nIGNvbW1hbmRzIAorCSAqCisJICogTk9URTogVGhpcyBvbmx5IHdvcmtzIGJlY2F1c2UgYSBzY3NpX2NtbmQgc3RydWN0IGZpZWxkIGNvbnRhaW5zCisJICogYSB1bnNpZ25lZCBjaGFyIGNtbmRbMTZdLCBzbyB3ZSBrbm93IHdlIGhhdmUgc3RvcmFnZSBhdmFpbGFibGUKKwkgKi8KKworCS8qIFBhZCB0aGUgQVRBUEkgY29tbWFuZCB3aXRoIHplcm9zICovCisJZm9yICg7IHNyYi0+Y21kX2xlbjwxMjsgc3JiLT5jbWRfbGVuKyspCisJCXNyYi0+Y21uZFtzcmItPmNtZF9sZW5dID0gMDsKKworCS8qIHNldCBjb21tYW5kIGxlbmd0aCB0byAxMiBieXRlcyAodGhpcyBhZmZlY3RzIHRoZSB0cmFuc3BvcnQgbGF5ZXIpICovCisJc3JiLT5jbWRfbGVuID0gMTI7CisKKwkvKiBYWFggV2Ugc2hvdWxkIGJlIGNvbnN0YW50bHkgcmUtZXZhbHVhdGluZyB0aGUgbmVlZCBmb3IgdGhlc2UgKi8KKworCS8qIGRldGVybWluZSB0aGUgY29ycmVjdCBkYXRhIGxlbmd0aCBmb3IgdGhlc2UgY29tbWFuZHMgKi8KKwlzd2l0Y2ggKHNyYi0+Y21uZFswXSkgeworCisJCS8qIGZvciBJTlFVSVJZLCBVRkkgZGV2aWNlcyBvbmx5IGV2ZXIgcmV0dXJuIDM2IGJ5dGVzICovCisJY2FzZSBJTlFVSVJZOgorCQlzcmItPmNtbmRbNF0gPSAzNjsKKwkJYnJlYWs7CisKKwkJLyogYWdhaW4sIGZvciBNT0RFX1NFTlNFXzEwLCB3ZSBnZXQgdGhlIG1pbmltdW0gKDgpICovCisJY2FzZSBNT0RFX1NFTlNFXzEwOgorCQlzcmItPmNtbmRbN10gPSAwOworCQlzcmItPmNtbmRbOF0gPSA4OworCQlicmVhazsKKworCQkvKiBmb3IgUkVRVUVTVF9TRU5TRSwgVUZJIGRldmljZXMgb25seSBldmVyIHJldHVybiAxOCBieXRlcyAqLworCWNhc2UgUkVRVUVTVF9TRU5TRToKKwkJc3JiLT5jbW5kWzRdID0gMTg7CisJCWJyZWFrOworCX0gLyogZW5kIHN3aXRjaCBvbiBjbW5kWzBdICovCisKKwkvKiBzZW5kIHRoZSBjb21tYW5kIHRvIHRoZSB0cmFuc3BvcnQgbGF5ZXIgKi8KKwl1c2Jfc3Rvcl9pbnZva2VfdHJhbnNwb3J0KHNyYiwgdXMpOworfQorCit2b2lkIHVzYl9zdG9yX3RyYW5zcGFyZW50X3Njc2lfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsCisJCQkJICAgICAgIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwkvKiBzZW5kIHRoZSBjb21tYW5kIHRvIHRoZSB0cmFuc3BvcnQgbGF5ZXIgKi8KKwl1c2Jfc3Rvcl9pbnZva2VfdHJhbnNwb3J0KHNyYiwgdXMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNjYXR0ZXItZ2F0aGVyIHRyYW5zZmVyIGJ1ZmZlciBhY2Nlc3Mgcm91dGluZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQ29weSBhIGJ1ZmZlciBvZiBsZW5ndGggYnVmbGVuIHRvL2Zyb20gdGhlIHNyYidzIHRyYW5zZmVyIGJ1ZmZlci4KKyAqIChOb3RlOiBmb3Igc2NhdHRlci1nYXRoZXIgdHJhbnNmZXJzIChzcmItPnVzZV9zZyA+IDApLCBzcmItPnJlcXVlc3RfYnVmZmVyCisgKiBwb2ludHMgdG8gYSBsaXN0IG9mIHMtZyBlbnRyaWVzIGFuZCB3ZSBpZ25vcmUgc3JiLT5yZXF1ZXN0X2J1ZmZsZW4uCisgKiBGb3Igbm9uLXNjYXR0ZXItZ2F0aGVyIHRyYW5zZmVycywgc3JiLT5yZXF1ZXN0X2J1ZmZlciBwb2ludHMgdG8gdGhlCisgKiB0cmFuc2ZlciBidWZmZXIgaXRzZWxmIGFuZCBzcmItPnJlcXVlc3RfYnVmZmxlbiBpcyB0aGUgYnVmZmVyJ3MgbGVuZ3RoLikKKyAqIFVwZGF0ZSB0aGUgKmluZGV4IGFuZCAqb2Zmc2V0IHZhcmlhYmxlcyBzbyB0aGF0IHRoZSBuZXh0IGNvcHkgd2lsbAorICogcGljayB1cCBmcm9tIHdoZXJlIHRoaXMgb25lIGxlZnQgb2ZmLiAqLworCit1bnNpZ25lZCBpbnQgdXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKwl1bnNpZ25lZCBpbnQgYnVmbGVuLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHVuc2lnbmVkIGludCAqaW5kZXgsCisJdW5zaWduZWQgaW50ICpvZmZzZXQsIGVudW0geGZlcl9idWZfZGlyIGRpcikKK3sKKwl1bnNpZ25lZCBpbnQgY250OworCisJLyogSWYgbm90IHVzaW5nIHNjYXR0ZXItZ2F0aGVyLCBqdXN0IHRyYW5zZmVyIHRoZSBkYXRhIGRpcmVjdGx5LgorCSAqIE1ha2UgY2VydGFpbiBpdCB3aWxsIGZpdCBpbiB0aGUgYXZhaWxhYmxlIGJ1ZmZlciBzcGFjZS4gKi8KKwlpZiAoc3JiLT51c2Vfc2cgPT0gMCkgeworCQlpZiAoKm9mZnNldCA+PSBzcmItPnJlcXVlc3RfYnVmZmxlbikKKwkJCXJldHVybiAwOworCQljbnQgPSBtaW4oYnVmbGVuLCBzcmItPnJlcXVlc3RfYnVmZmxlbiAtICpvZmZzZXQpOworCQlpZiAoZGlyID09IFRPX1hGRVJfQlVGKQorCQkJbWVtY3B5KCh1bnNpZ25lZCBjaGFyICopIHNyYi0+cmVxdWVzdF9idWZmZXIgKyAqb2Zmc2V0LAorCQkJCQlidWZmZXIsIGNudCk7CisJCWVsc2UKKwkJCW1lbWNweShidWZmZXIsICh1bnNpZ25lZCBjaGFyICopIHNyYi0+cmVxdWVzdF9idWZmZXIgKworCQkJCQkqb2Zmc2V0LCBjbnQpOworCQkqb2Zmc2V0ICs9IGNudDsKKworCS8qIFVzaW5nIHNjYXR0ZXItZ2F0aGVyLiAgV2UgaGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBsaXN0IG9uZSBlbnRyeQorCSAqIGF0IGEgdGltZS4gIEVhY2ggcy1nIGVudHJ5IGNvbnRhaW5zIHNvbWUgbnVtYmVyIG9mIHBhZ2VzLCBhbmQKKwkgKiBlYWNoIHBhZ2UgaGFzIHRvIGJlIGttYXAoKSdlZCBzZXBhcmF0ZWx5LiAgSWYgdGhlIHBhZ2UgaXMgYWxyZWFkeQorCSAqIGluIGtlcm5lbC1hZGRyZXNzYWJsZSBtZW1vcnkgdGhlbiBrbWFwKCkgd2lsbCByZXR1cm4gaXRzIGFkZHJlc3MuCisJICogSWYgdGhlIHBhZ2UgaXMgbm90IGRpcmVjdGx5IGFjY2Vzc2libGUgLS0gc3VjaCBhcyBhIHVzZXIgYnVmZmVyCisJICogbG9jYXRlZCBpbiBoaWdoIG1lbW9yeSAtLSB0aGVuIGttYXAoKSB3aWxsIG1hcCBpdCB0byBhIHRlbXBvcmFyeQorCSAqIHBvc2l0aW9uIGluIHRoZSBrZXJuZWwncyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuICovCisJfSBlbHNlIHsKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9CisJCQkJKHN0cnVjdCBzY2F0dGVybGlzdCAqKSBzcmItPnJlcXVlc3RfYnVmZmVyCisJCQkJKyAqaW5kZXg7CisKKwkJLyogVGhpcyBsb29wIGhhbmRsZXMgYSBzaW5nbGUgcy1nIGxpc3QgZW50cnksIHdoaWNoIG1heQorCQkgKiBpbmNsdWRlIG11bHRpcGxlIHBhZ2VzLiAgRmluZCB0aGUgaW5pdGlhbCBwYWdlIHN0cnVjdHVyZQorCQkgKiBhbmQgdGhlIHN0YXJ0aW5nIG9mZnNldCB3aXRoaW4gdGhlIHBhZ2UsIGFuZCB1cGRhdGUKKwkJICogdGhlICpvZmZzZXQgYW5kICppbmRleCB2YWx1ZXMgZm9yIHRoZSBuZXh0IGxvb3AuICovCisJCWNudCA9IDA7CisJCXdoaWxlIChjbnQgPCBidWZsZW4gJiYgKmluZGV4IDwgc3JiLT51c2Vfc2cpIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gc2ctPnBhZ2UgKworCQkJCQkoKHNnLT5vZmZzZXQgKyAqb2Zmc2V0KSA+PiBQQUdFX1NISUZUKTsKKwkJCXVuc2lnbmVkIGludCBwb2ZmID0KKwkJCQkJKHNnLT5vZmZzZXQgKyAqb2Zmc2V0KSAmIChQQUdFX1NJWkUtMSk7CisJCQl1bnNpZ25lZCBpbnQgc2dsZW4gPSBzZy0+bGVuZ3RoIC0gKm9mZnNldDsKKworCQkJaWYgKHNnbGVuID4gYnVmbGVuIC0gY250KSB7CisKKwkJCQkvKiBUcmFuc2ZlciBlbmRzIHdpdGhpbiB0aGlzIHMtZyBlbnRyeSAqLworCQkJCXNnbGVuID0gYnVmbGVuIC0gY250OworCQkJCSpvZmZzZXQgKz0gc2dsZW47CisJCQl9IGVsc2UgeworCisJCQkJLyogVHJhbnNmZXIgY29udGludWVzIHRvIG5leHQgcy1nIGVudHJ5ICovCisJCQkJKm9mZnNldCA9IDA7CisJCQkJKysqaW5kZXg7CisJCQkJKytzZzsKKwkJCX0KKworCQkJLyogVHJhbnNmZXIgdGhlIGRhdGEgZm9yIGFsbCB0aGUgcGFnZXMgaW4gdGhpcworCQkJICogcy1nIGVudHJ5LiAgRm9yIGVhY2ggcGFnZTogY2FsbCBrbWFwKCksIGRvIHRoZQorCQkJICogdHJhbnNmZXIsIGFuZCBjYWxsIGt1bm1hcCgpIGltbWVkaWF0ZWx5IGFmdGVyLiAqLworCQkJd2hpbGUgKHNnbGVuID4gMCkgeworCQkJCXVuc2lnbmVkIGludCBwbGVuID0gbWluKHNnbGVuLCAodW5zaWduZWQgaW50KQorCQkJCQkJUEFHRV9TSVpFIC0gcG9mZik7CisJCQkJdW5zaWduZWQgY2hhciAqcHRyID0ga21hcChwYWdlKTsKKworCQkJCWlmIChkaXIgPT0gVE9fWEZFUl9CVUYpCisJCQkJCW1lbWNweShwdHIgKyBwb2ZmLCBidWZmZXIgKyBjbnQsIHBsZW4pOworCQkJCWVsc2UKKwkJCQkJbWVtY3B5KGJ1ZmZlciArIGNudCwgcHRyICsgcG9mZiwgcGxlbik7CisJCQkJa3VubWFwKHBhZ2UpOworCisJCQkJLyogU3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBwYWdlICovCisJCQkJcG9mZiA9IDA7CisJCQkJKytwYWdlOworCQkJCWNudCArPSBwbGVuOworCQkJCXNnbGVuIC09IHBsZW47CisJCQl9CisJCX0KKwl9CisKKwkvKiBSZXR1cm4gdGhlIGFtb3VudCBhY3R1YWxseSB0cmFuc2ZlcnJlZCAqLworCXJldHVybiBjbnQ7Cit9CisKKy8qIFN0b3JlIHRoZSBjb250ZW50cyBvZiBidWZmZXIgaW50byBzcmIncyB0cmFuc2ZlciBidWZmZXIgYW5kIHNldCB0aGUKKyAqIFNDU0kgcmVzaWR1ZS4gKi8KK3ZvaWQgdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKwl1bnNpZ25lZCBpbnQgYnVmbGVuLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIpCit7CisJdW5zaWduZWQgaW50IGluZGV4ID0gMCwgb2Zmc2V0ID0gMDsKKworCXVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1ZihidWZmZXIsIGJ1Zmxlbiwgc3JiLCAmaW5kZXgsICZvZmZzZXQsCisJCQlUT19YRkVSX0JVRik7CisJaWYgKGJ1ZmxlbiA8IHNyYi0+cmVxdWVzdF9idWZmbGVuKQorCQlzcmItPnJlc2lkID0gc3JiLT5yZXF1ZXN0X2J1ZmZsZW4gLSBidWZsZW47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Byb3RvY29sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJiZmYwMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvcHJvdG9jb2wuaApAQCAtMCwwICsxLDc0IEBACisvKiBEcml2ZXIgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgY29tcGxpYW50IGRldmljZXMKKyAqIFByb3RvY29sIEZ1bmN0aW9ucyBIZWFkZXIgRmlsZQorICoKKyAqICRJZDogcHJvdG9jb2wuaCx2IDEuNCAyMDAxLzAyLzEzIDA3OjEwOjAzIG1kaGFybSBFeHAgJAorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgorICogICAoYykgMTk5OSwgMjAwMCBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgJ1VTQiBNYXNzIFN0b3JhZ2UgQ2xhc3MnIGRvY3VtZW50LiBUaGlzCisgKiBkZXNjcmliZXMgaW4gZGV0YWlsIHRoZSBwcm90b2NvbCB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggc3VjaAorICogZGV2aWNlcy4gIENsZWFybHksIHRoZSBkZXNpZ25lcnMgaGFkIFNDU0kgYW5kIEFUQVBJIGNvbW1hbmRzIGluCisgKiBtaW5kIHdoZW4gdGhleSBjcmVhdGVkIHRoaXMgZG9jdW1lbnQuICBUaGUgY29tbWFuZHMgYXJlIGFsbCB2ZXJ5CisgKiBzaW1pbGFyIHRvIGNvbW1hbmRzIGluIHRoZSBTQ1NJLUlJIGFuZCBBVEFQSSBzcGVjaWZpY2F0aW9ucy4KKyAqCisgKiBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGluIGEgbnVtYmVyIG9mIGNhc2VzIHRoaXMgY2xhc3MKKyAqIGV4aGliaXRzIGNsYXNzLXNwZWNpZmljIGV4ZW1wdGlvbnMgZnJvbSB0aGUgVVNCIHNwZWNpZmljYXRpb24uCisgKiBOb3RhYmx5IHRoZSB1c2FnZSBvZiBOQUssIFNUQUxMIGFuZCBBQ0sgZGlmZmVycyBmcm9tIHRoZSBub3JtLCBpbgorICogdGhhdCB0aGV5IGFyZSB1c2VkIHRvIGNvbW11bmljYXRlIHdhaXQsIGZhaWxlZCBhbmQgT0sgb24gY29tbWFuZHMuCisgKgorICogQWxzbywgZm9yIGNlcnRhaW4gZGV2aWNlcywgdGhlIGludGVycnVwdCBlbmRwb2ludCBpcyB1c2VkIHRvIGNvbnZleQorICogc3RhdHVzIG9mIGEgY29tbWFuZC4KKyAqCisgKiBQbGVhc2Ugc2VlIGh0dHA6Ly93d3cub25lLWV5ZWQtYWxpZW4ubmV0L35tZGhhcm0vbGludXgtdXNiIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9QUk9UT0NPTF9IXworI2RlZmluZSBfUFJPVE9DT0xfSF8KKworLyogU3ViIENsYXNzZXMgKi8KKworI2RlZmluZSBVU19TQ19SQkMJMHgwMQkJLyogVHlwaWNhbGx5LCBmbGFzaCBkZXZpY2VzICovCisjZGVmaW5lIFVTX1NDXzgwMjAJMHgwMgkJLyogQ0QtUk9NICovCisjZGVmaW5lIFVTX1NDX1FJQwkweDAzCQkvKiBRSUMtMTU3IFRhcGVzICovCisjZGVmaW5lIFVTX1NDX1VGSQkweDA0CQkvKiBGbG9wcHkgKi8KKyNkZWZpbmUgVVNfU0NfODA3MAkweDA1CQkvKiBSZW1vdmFibGUgbWVkaWEgKi8KKyNkZWZpbmUgVVNfU0NfU0NTSQkweDA2CQkvKiBUcmFuc3BhcmVudCAqLworI2RlZmluZSBVU19TQ19JU0QyMDAgICAgMHgwNwkJLyogSVNEMjAwIEFUQSAqLworI2RlZmluZSBVU19TQ19NSU4JVVNfU0NfUkJDCisjZGVmaW5lIFVTX1NDX01BWAlVU19TQ19JU0QyMDAKKworI2RlZmluZSBVU19TQ19ERVZJQ0UJMHhmZgkJLyogVXNlIGRldmljZSdzIHZhbHVlICovCisKKy8qIFByb3RvY29sIGhhbmRsaW5nIHJvdXRpbmVzICovCitleHRlcm4gdm9pZCB1c2Jfc3Rvcl9BVEFQSV9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQqLCBzdHJ1Y3QgdXNfZGF0YSopOworZXh0ZXJuIHZvaWQgdXNiX3N0b3JfcWljMTU3X2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCosIHN0cnVjdCB1c19kYXRhKik7CitleHRlcm4gdm9pZCB1c2Jfc3Rvcl91ZmlfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kKiwgc3RydWN0IHVzX2RhdGEqKTsKK2V4dGVybiB2b2lkIHVzYl9zdG9yX3RyYW5zcGFyZW50X3Njc2lfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kKiwKKwkJc3RydWN0IHVzX2RhdGEqKTsKKworLyogc3RydWN0IHNjc2lfY21uZCB0cmFuc2ZlciBidWZmZXIgYWNjZXNzIHV0aWxpdGllcyAqLworZW51bSB4ZmVyX2J1Zl9kaXIJe1RPX1hGRVJfQlVGLCBGUk9NX1hGRVJfQlVGfTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCB1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYodW5zaWduZWQgY2hhciAqYnVmZmVyLAorCXVuc2lnbmVkIGludCBidWZsZW4sIHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgdW5zaWduZWQgaW50ICppbmRleCwKKwl1bnNpZ25lZCBpbnQgKm9mZnNldCwgZW51bSB4ZmVyX2J1Zl9kaXIgZGlyKTsKKworZXh0ZXJuIHZvaWQgdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKwl1bnNpZ25lZCBpbnQgYnVmbGVuLCBzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJlNDhhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYwpAQCAtMCwwICsxLDUwMCBAQAorLyogRHJpdmVyIGZvciBVU0IgTWFzcyBTdG9yYWdlIGNvbXBsaWFudCBkZXZpY2VzCisgKiBTQ1NJIGxheWVyIGdsdWUgY29kZQorICoKKyAqICRJZDogc2NzaWdsdWUuYyx2IDEuMjYgMjAwMi8wNC8yMiAwMzozOTo0MyBtZGhhcm0gRXhwICQKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDE5OTktMjAwMiBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKKyAqCisgKiBEZXZlbG9wZWQgd2l0aCB0aGUgYXNzaXN0YW5jZSBvZjoKKyAqICAgKGMpIDIwMDAgRGF2aWQgTC4gQnJvd24sIEpyLiAodXNiLXN0b3JhZ2VAZGF2aWRiLm9yZykKKyAqICAgKGMpIDIwMDAgU3RlcGhlbiBKLiBHb3dkeSAoU0dvd2R5QGxibC5nb3YpCisgKgorICogSW5pdGlhbCB3b3JrIGJ5OgorICogICAoYykgMTk5OSBNaWNoYWVsIEdlZSAobWljaGFlbEBsaW51eHNwZWNpZmljLmNvbSkKKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgJ1VTQiBNYXNzIFN0b3JhZ2UgQ2xhc3MnIGRvY3VtZW50LiBUaGlzCisgKiBkZXNjcmliZXMgaW4gZGV0YWlsIHRoZSBwcm90b2NvbCB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggc3VjaAorICogZGV2aWNlcy4gIENsZWFybHksIHRoZSBkZXNpZ25lcnMgaGFkIFNDU0kgYW5kIEFUQVBJIGNvbW1hbmRzIGluCisgKiBtaW5kIHdoZW4gdGhleSBjcmVhdGVkIHRoaXMgZG9jdW1lbnQuICBUaGUgY29tbWFuZHMgYXJlIGFsbCB2ZXJ5CisgKiBzaW1pbGFyIHRvIGNvbW1hbmRzIGluIHRoZSBTQ1NJLUlJIGFuZCBBVEFQSSBzcGVjaWZpY2F0aW9ucy4KKyAqCisgKiBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGluIGEgbnVtYmVyIG9mIGNhc2VzIHRoaXMgY2xhc3MKKyAqIGV4aGliaXRzIGNsYXNzLXNwZWNpZmljIGV4ZW1wdGlvbnMgZnJvbSB0aGUgVVNCIHNwZWNpZmljYXRpb24uCisgKiBOb3RhYmx5IHRoZSB1c2FnZSBvZiBOQUssIFNUQUxMIGFuZCBBQ0sgZGlmZmVycyBmcm9tIHRoZSBub3JtLCBpbgorICogdGhhdCB0aGV5IGFyZSB1c2VkIHRvIGNvbW11bmljYXRlIHdhaXQsIGZhaWxlZCBhbmQgT0sgb24gY29tbWFuZHMuCisgKgorICogQWxzbywgZm9yIGNlcnRhaW4gZGV2aWNlcywgdGhlIGludGVycnVwdCBlbmRwb2ludCBpcyB1c2VkIHRvIGNvbnZleQorICogc3RhdHVzIG9mIGEgY29tbWFuZC4KKyAqCisgKiBQbGVhc2Ugc2VlIGh0dHA6Ly93d3cub25lLWV5ZWQtYWxpZW4ubmV0L35tZGhhcm0vbGludXgtdXNiIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aW5mby5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZWguaD4KKworI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgInNjc2lnbHVlLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEhvc3QgZnVuY3Rpb25zIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgY29uc3QgY2hhciogaG9zdF9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCit7CisJcmV0dXJuICJTQ1NJIGVtdWxhdGlvbiBmb3IgVVNCIE1hc3MgU3RvcmFnZSBkZXZpY2VzIjsKK30KKworc3RhdGljIGludCBzbGF2ZV9hbGxvYyAoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCS8qCisJICogU2V0IHRoZSBJTlFVSVJZIHRyYW5zZmVyIGxlbmd0aCB0byAzNi4gIFdlIGRvbid0IHVzZSBhbnkgb2YKKwkgKiB0aGUgZXh0cmEgZGF0YSBhbmQgbWFueSBkZXZpY2VzIGNob2tlIGlmIGFza2VkIGZvciBtb3JlIG9yCisJICogbGVzcyB0aGFuIDM2IGJ5dGVzLgorCSAqLworCXNkZXYtPmlucXVpcnlfbGVuID0gMzY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSBob3N0X3RvX3VzKHNkZXYtPmhvc3QpOworCisJLyogU2NhdHRlci1nYXRoZXIgYnVmZmVycyAoYWxsIGJ1dCB0aGUgbGFzdCkgbXVzdCBoYXZlIGEgbGVuZ3RoCisJICogZGl2aXNpYmxlIGJ5IHRoZSBidWxrIG1heHBhY2tldCBzaXplLiAgT3RoZXJ3aXNlIGEgZGF0YSBwYWNrZXQKKwkgKiB3b3VsZCBlbmQgdXAgYmVpbmcgc2hvcnQsIGNhdXNpbmcgYSBwcmVtYXR1cmUgZW5kIHRvIHRoZSBkYXRhCisJICogdHJhbnNmZXIuICBTaW5jZSBoaWdoLXNwZWVkIGJ1bGsgcGlwZXMgaGF2ZSBhIG1heHBhY2tldCBzaXplCisJICogb2YgNTEyLCB3ZSdsbCB1c2UgdGhhdCBhcyB0aGUgc2NzaSBkZXZpY2UgcXVldWUncyBETUEgYWxpZ25tZW50CisJICogbWFzay4gIEd1YXJhbnRlZWluZyBwcm9wZXIgYWxpZ25tZW50IG9mIHRoZSBmaXJzdCBidWZmZXIgd2lsbAorCSAqIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0IGJlY2F1c2UsIGV4Y2VwdCBhdCB0aGUgYmVnaW5uaW5nIGFuZAorCSAqIHRoZSBlbmQsIHNjYXR0ZXItZ2F0aGVyIGJ1ZmZlcnMgZm9sbG93IHBhZ2UgYm91bmRhcmllcy4gKi8KKwlibGtfcXVldWVfZG1hX2FsaWdubWVudChzZGV2LT5yZXF1ZXN0X3F1ZXVlLCAoNTEyIC0gMSkpOworCisJLyogU2V0IHRoZSBTQ1NJIGxldmVsIHRvIGF0IGxlYXN0IDIuICBXZSdsbCBsZWF2ZSBpdCBhdCAzIGlmIHRoYXQncworCSAqIHdoYXQgaXMgb3JpZ2luYWxseSByZXBvcnRlZC4gIFdlIG5lZWQgdGhpcyB0byBhdm9pZCBjb25mdXNpbmcKKwkgKiB0aGUgU0NTSSBsYXllciB3aXRoIGRldmljZXMgdGhhdCByZXBvcnQgMCBvciAxLCBidXQgbmVlZCAxMC1ieXRlCisJICogY29tbWFuZHMgKGFsYSBBVEFQSSBkZXZpY2VzIGJlaGluZCBjZXJ0YWluIGJyaWRnZXMsIG9yIGRldmljZXMKKwkgKiB3aGljaCBzaW1wbHkgaGF2ZSBicm9rZW4gSU5RVUlSWSBkYXRhKS4KKwkgKgorCSAqIE5PVEU6IFRoaXMgbWVhbnMgL2Rldi9zZyBwcm9ncmFtcyAoYWxhIGNkcmVjb3JkKSB3aWxsIGdldCB0aGUKKwkgKiBhY3R1YWwgaW5mb3JtYXRpb24uICBUaGlzIHNlZW1zIHRvIGJlIHRoZSBwcmVmZXJlbmNlIGZvcgorCSAqIHByb2dyYW1zIGxpa2UgdGhhdC4KKwkgKgorCSAqIE5PVEU6IFRoaXMgYWxzbyBtZWFucyB0aGF0IC9wcm9jL3Njc2kvc2NzaSBhbmQgc3lzZnMgbWF5IHJlcG9ydAorCSAqIHRoZSBhY3R1YWwgdmFsdWUgb3IgdGhlIG1vZGlmaWVkIG9uZSwgZGVwZW5kaW5nIG9uIHdoZXJlIHRoZQorCSAqIGRhdGEgY29tZXMgZnJvbS4KKwkgKi8KKwlpZiAoc2Rldi0+c2NzaV9sZXZlbCA8IFNDU0lfMikKKwkJc2Rldi0+c2NzaV9sZXZlbCA9IFNDU0lfMjsKKworCS8qIEFjY29yZGluZyB0byB0aGUgdGVjaG5pY2FsIHN1cHBvcnQgcGVvcGxlIGF0IEdlbmVzeXMgTG9naWMsCisJICogZGV2aWNlcyB1c2luZyB0aGVpciBjaGlwcyBoYXZlIHByb2JsZW1zIHRyYW5zZmVycmluZyBtb3JlIHRoYW4KKwkgKiAzMiBLQiBhdCBhIHRpbWUuICBJbiBwcmFjdGljZSBwZW9wbGUgaGF2ZSBmb3VuZCB0aGF0IDY0IEtCCisJICogd29ya3Mgb2theSBhbmQgdGhhdCdzIHdoYXQgV2luZG93cyBkb2VzLiAgQnV0IHdlJ2xsIGJlCisJICogY29uc2VydmF0aXZlOyBwZW9wbGUgY2FuIGFsd2F5cyB1c2UgdGhlIHN5c2ZzIGludGVyZmFjZSB0bworCSAqIGluY3JlYXNlIG1heF9zZWN0b3JzLiAqLworCWlmIChsZTE2X3RvX2NwdSh1cy0+cHVzYl9kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpID09IFVTQl9WRU5ET1JfSURfR0VORVNZUyAmJgorCQkJc2Rldi0+cmVxdWVzdF9xdWV1ZS0+bWF4X3NlY3RvcnMgPiA2NCkKKwkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUsIDY0KTsKKworCS8qIFdlIGNhbid0IHB1dCB0aGVzZSBzZXR0aW5ncyBpbiBzbGF2ZV9hbGxvYygpIGJlY2F1c2UgdGhhdCBnZXRzCisJICogY2FsbGVkIGJlZm9yZSB0aGUgZGV2aWNlIHR5cGUgaXMga25vd24uICBDb25zZXF1ZW50bHkgdGhlc2UKKwkgKiBzZXR0aW5ncyBjYW4ndCBiZSBvdmVycmlkZGVuIHZpYSB0aGUgc2NzaSBkZXZpbmZvIG1lY2hhbmlzbS4gKi8KKwlpZiAoc2Rldi0+dHlwZSA9PSBUWVBFX0RJU0spIHsKKworCQkvKiBEaXNrLXR5cGUgZGV2aWNlcyB1c2UgTU9ERSBTRU5TRSg2KSBpZiB0aGUgcHJvdG9jb2wKKwkJICogKFN1YkNsYXNzKSBpcyBUcmFuc3BhcmVudCBTQ1NJLCBvdGhlcndpc2UgdGhleSB1c2UKKwkJICogTU9ERSBTRU5TRSgxMCkuICovCisJCWlmICh1cy0+c3ViY2xhc3MgIT0gVVNfU0NfU0NTSSkKKwkJCXNkZXYtPnVzZV8xMF9mb3JfbXMgPSAxOworCisJCS8qIE1hbnkgZGlza3Mgb25seSBhY2NlcHQgTU9ERSBTRU5TRSB0cmFuc2ZlciBsZW5ndGhzIG9mCisJCSAqIDE5MiBieXRlcyAodGhhdCdzIHdoYXQgV2luZG93cyB1c2VzKS4gKi8KKwkJc2Rldi0+dXNlXzE5Ml9ieXRlc19mb3JfM2YgPSAxOworCisJCS8qIFNvbWUgZGV2aWNlcyBkb24ndCBsaWtlIE1PREUgU0VOU0Ugd2l0aCBwYWdlPTB4M2YsCisJCSAqIHdoaWNoIGlzIHRoZSBjb21tYW5kIHVzZWQgZm9yIGNoZWNraW5nIGlmIGEgZGV2aWNlCisJCSAqIGlzIHdyaXRlLXByb3RlY3RlZC4gIE5vdyB0aGF0IHdlIHRlbGwgdGhlIHNkIGRyaXZlcgorCQkgKiB0byBkbyBhIDE5Mi1ieXRlIHRyYW5zZmVyIHdpdGggdGhpcyBjb21tYW5kIHRoZQorCQkgKiBtYWpvcml0eSBvZiBkZXZpY2VzIHdvcmsgZmluZSwgYnV0IGEgZmV3IHN0aWxsIGNhbid0CisJCSAqIGhhbmRsZSBpdC4gIFRoZSBzZCBkcml2ZXIgd2lsbCBzaW1wbHkgYXNzdW1lIHRob3NlCisJCSAqIGRldmljZXMgYXJlIHdyaXRlLWVuYWJsZWQuICovCisJCWlmICh1cy0+ZmxhZ3MgJiBVU19GTF9OT19XUF9ERVRFQ1QpCisJCQlzZGV2LT5za2lwX21zX3BhZ2VfM2YgPSAxOworCisJCS8qIEEgbnVtYmVyIG9mIGRldmljZXMgaGF2ZSBwcm9ibGVtcyB3aXRoIE1PREUgU0VOU0UgZm9yCisJCSAqIHBhZ2UgeDA4LCBzbyB3ZSB3aWxsIHNraXAgaXQuICovCisJCXNkZXYtPnNraXBfbXNfcGFnZV84ID0gMTsKKworCQkvKiBTb21lIGRpc2tzIHJldHVybiB0aGUgdG90YWwgbnVtYmVyIG9mIGJsb2NrcyBpbiByZXNwb25zZQorCQkgKiB0byBSRUFEIENBUEFDSVRZIHJhdGhlciB0aGFuIHRoZSBoaWdoZXN0IGJsb2NrIG51bWJlci4KKwkJICogSWYgdGhpcyBkZXZpY2UgbWFrZXMgdGhhdCBtaXN0YWtlLCB0ZWxsIHRoZSBzZCBkcml2ZXIuICovCisJCWlmICh1cy0+ZmxhZ3MgJiBVU19GTF9GSVhfQ0FQQUNJVFkpCisJCQlzZGV2LT5maXhfY2FwYWNpdHkgPSAxOworCX0gZWxzZSB7CisKKwkJLyogTm9uLWRpc2stdHlwZSBkZXZpY2VzIGRvbid0IG5lZWQgdG8gYmxhY2tsaXN0IGFueSBwYWdlcworCQkgKiBvciB0byBmb3JjZSAxOTItYnl0ZSB0cmFuc2ZlciBsZW5ndGhzIGZvciBNT0RFIFNFTlNFLgorCQkgKiBCdXQgdGhleSBkbyBuZWVkIHRvIHVzZSBNT0RFIFNFTlNFKDEwKS4gKi8KKwkJc2Rldi0+dXNlXzEwX2Zvcl9tcyA9IDE7CisJfQorCisJLyogU29tZSBkZXZpY2VzIGNob2tlIHdoZW4gdGhleSByZWNlaXZlIGEgUFJFVkVOVC1BTExPVyBNRURJVU0KKwkgKiBSRU1PVkFMIGNvbW1hbmQsIHNvIHN1cHByZXNzIHRob3NlIGNvbW1hbmRzLiAqLworCWlmICh1cy0+ZmxhZ3MgJiBVU19GTF9OT1RfTE9DS0FCTEUpCisJCXNkZXYtPmxvY2thYmxlID0gMDsKKworCS8qIHRoaXMgaXMgdG8gc2F0aXNmeSB0aGUgY29tcGlsZXIsIHRobyBJIGRvbid0IHRoaW5rIHRoZSAKKwkgKiByZXR1cm4gY29kZSBpcyBldmVyIGNoZWNrZWQgYW55d2hlcmUuICovCisJcmV0dXJuIDA7Cit9CisKKy8qIHF1ZXVlIGEgY29tbWFuZCAqLworLyogVGhpcyBpcyBhbHdheXMgY2FsbGVkIHdpdGggc2NzaV9sb2NrKGhvc3QpIGhlbGQgKi8KK3N0YXRpYyBpbnQgcXVldWVjb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwKKwkJCXZvaWQgKCpkb25lKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQoreworCXN0cnVjdCB1c19kYXRhICp1cyA9IGhvc3RfdG9fdXMoc3JiLT5kZXZpY2UtPmhvc3QpOworCisJVVNfREVCVUdQKCIlcyBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBjaGVjayBmb3Igc3RhdGUtdHJhbnNpdGlvbiBlcnJvcnMgKi8KKwlpZiAodXMtPnNyYiAhPSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiBVU0JfU1RPUkFHRSAiRXJyb3IgaW4gJXM6IHVzLT5zcmIgPSAlcFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgdXMtPnNyYik7CisJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOworCX0KKworCS8qIGZhaWwgdGhlIGNvbW1hbmQgaWYgd2UgYXJlIGRpc2Nvbm5lY3RpbmcgKi8KKwlpZiAodGVzdF9iaXQoVVNfRkxJRFhfRElTQ09OTkVDVElORywgJnVzLT5mbGFncykpIHsKKwkJVVNfREVCVUdQKCJGYWlsIGNvbW1hbmQgZHVyaW5nIGRpc2Nvbm5lY3RcbiIpOworCQlzcmItPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQlkb25lKHNyYik7CisJCXJldHVybiAwOworCX0KKworCS8qIGVucXVldWUgdGhlIGNvbW1hbmQgYW5kIHdha2UgdXAgdGhlIGNvbnRyb2wgdGhyZWFkICovCisJc3JiLT5zY3NpX2RvbmUgPSBkb25lOworCXVzLT5zcmIgPSBzcmI7CisJdXAoJih1cy0+c2VtYSkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRXJyb3IgaGFuZGxpbmcgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIENvbW1hbmQgdGltZW91dCBhbmQgYWJvcnQgKi8KKy8qIFRoaXMgaXMgYWx3YXlzIGNhbGxlZCB3aXRoIHNjc2lfbG9jayhob3N0KSBoZWxkICovCitzdGF0aWMgaW50IGNvbW1hbmRfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiKQoreworCXN0cnVjdCB1c19kYXRhICp1cyA9IGhvc3RfdG9fdXMoc3JiLT5kZXZpY2UtPmhvc3QpOworCisJVVNfREVCVUdQKCIlcyBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBJcyB0aGlzIGNvbW1hbmQgc3RpbGwgYWN0aXZlPyAqLworCWlmICh1cy0+c3JiICE9IHNyYikgeworCQlVU19ERUJVR1AgKCItLSBub3RoaW5nIHRvIGFib3J0XG4iKTsKKwkJcmV0dXJuIEZBSUxFRDsKKwl9CisKKwkvKiBTZXQgdGhlIFRJTUVEX09VVCBiaXQuICBBbHNvIHNldCB0aGUgQUJPUlRJTkcgYml0LCBidXQgb25seSBpZgorCSAqIGEgZGV2aWNlIHJlc2V0IGlzbid0IGFscmVhZHkgaW4gcHJvZ3Jlc3MgKHRvIGF2b2lkIGludGVyZmVyaW5nCisJICogd2l0aCB0aGUgcmVzZXQpLiAgVG8gcHJldmVudCByYWNlcyB3aXRoIGF1dG8tcmVzZXQsIHdlIG11c3QKKwkgKiBzdG9wIGFueSBvbmdvaW5nIFVTQiB0cmFuc2ZlcnMgd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgaG9zdAorCSAqIGxvY2suICovCisJc2V0X2JpdChVU19GTElEWF9USU1FRF9PVVQsICZ1cy0+ZmxhZ3MpOworCWlmICghdGVzdF9iaXQoVVNfRkxJRFhfUkVTRVRUSU5HLCAmdXMtPmZsYWdzKSkgeworCQlzZXRfYml0KFVTX0ZMSURYX0FCT1JUSU5HLCAmdXMtPmZsYWdzKTsKKwkJdXNiX3N0b3Jfc3RvcF90cmFuc3BvcnQodXMpOworCX0KKwlzY3NpX3VubG9jayh1c190b19ob3N0KHVzKSk7CisKKwkvKiBXYWl0IGZvciB0aGUgYWJvcnRlZCBjb21tYW5kIHRvIGZpbmlzaCAqLworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnVzLT5ub3RpZnkpOworCisJLyogUmVhY3F1aXJlIHRoZSBsb2NrIGFuZCBhbGxvdyBVU0IgdHJhbnNmZXJzIHRvIHJlc3VtZSAqLworCXNjc2lfbG9jayh1c190b19ob3N0KHVzKSk7CisJY2xlYXJfYml0KFVTX0ZMSURYX0FCT1JUSU5HLCAmdXMtPmZsYWdzKTsKKwljbGVhcl9iaXQoVVNfRkxJRFhfVElNRURfT1VULCAmdXMtPmZsYWdzKTsKKwlyZXR1cm4gU1VDQ0VTUzsKK30KKworLyogVGhpcyBpbnZva2VzIHRoZSB0cmFuc3BvcnQgcmVzZXQgbWVjaGFuaXNtIHRvIHJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUKKyAqIGRldmljZSAqLworLyogVGhpcyBpcyBhbHdheXMgY2FsbGVkIHdpdGggc2NzaV9sb2NrKGhvc3QpIGhlbGQgKi8KK3N0YXRpYyBpbnQgZGV2aWNlX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYikKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSBob3N0X3RvX3VzKHNyYi0+ZGV2aWNlLT5ob3N0KTsKKwlpbnQgcmVzdWx0OworCisJVVNfREVCVUdQKCIlcyBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlzY3NpX3VubG9jayh1c190b19ob3N0KHVzKSk7CisKKwkvKiBsb2NrIHRoZSBkZXZpY2UgcG9pbnRlcnMgYW5kIGRvIHRoZSByZXNldCAqLworCWRvd24oJih1cy0+ZGV2X3NlbWFwaG9yZSkpOworCWlmICh0ZXN0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmZsYWdzKSkgeworCQlyZXN1bHQgPSBGQUlMRUQ7CisJCVVTX0RFQlVHUCgiTm8gcmVzZXQgZHVyaW5nIGRpc2Nvbm5lY3RcbiIpOworCX0gZWxzZQorCQlyZXN1bHQgPSB1cy0+dHJhbnNwb3J0X3Jlc2V0KHVzKTsKKwl1cCgmKHVzLT5kZXZfc2VtYXBob3JlKSk7CisKKwkvKiBsb2NrIHRoZSBob3N0IGZvciB0aGUgcmV0dXJuICovCisJc2NzaV9sb2NrKHVzX3RvX2hvc3QodXMpKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiBUaGlzIHJlc2V0cyB0aGUgZGV2aWNlJ3MgVVNCIHBvcnQuICovCisvKiBJdCByZWZ1c2VzIHRvIHdvcmsgaWYgdGhlcmUncyBtb3JlIHRoYW4gb25lIGludGVyZmFjZSBpbgorICogdGhlIGRldmljZSwgc28gdGhhdCBvdGhlciB1c2VycyBhcmUgbm90IGFmZmVjdGVkLiAqLworLyogVGhpcyBpcyBhbHdheXMgY2FsbGVkIHdpdGggc2NzaV9sb2NrKGhvc3QpIGhlbGQgKi8KK3N0YXRpYyBpbnQgYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYikKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSBob3N0X3RvX3VzKHNyYi0+ZGV2aWNlLT5ob3N0KTsKKwlpbnQgcmVzdWx0LCByYzsKKworCVVTX0RFQlVHUCgiJXMgY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCisJc2NzaV91bmxvY2sodXNfdG9faG9zdCh1cykpOworCisJLyogVGhlIFVTQiBzdWJzeXN0ZW0gZG9lc24ndCBoYW5kbGUgc3luY2hyb25pc2F0aW9uIGJldHdlZW4KKwkgKiBhIGRldmljZSdzIHNldmVyYWwgZHJpdmVycy4gVGhlcmVmb3JlIHdlIHJlc2V0IG9ubHkgZGV2aWNlcworCSAqIHdpdGgganVzdCBvbmUgaW50ZXJmYWNlLCB3aGljaCB3ZSBvZiBjb3Vyc2Ugb3duLiAqLworCisJZG93bigmKHVzLT5kZXZfc2VtYXBob3JlKSk7CisJaWYgKHRlc3RfYml0KFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcsICZ1cy0+ZmxhZ3MpKSB7CisJCXJlc3VsdCA9IC1FSU87CisJCVVTX0RFQlVHUCgiTm8gcmVzZXQgZHVyaW5nIGRpc2Nvbm5lY3RcbiIpOworCX0gZWxzZSBpZiAodXMtPnB1c2JfZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXMgIT0gMSkgeworCQlyZXN1bHQgPSAtRUJVU1k7CisJCVVTX0RFQlVHUCgiUmVmdXNpbmcgdG8gcmVzZXQgYSBtdWx0aS1pbnRlcmZhY2UgZGV2aWNlXG4iKTsKKwl9IGVsc2UgeworCQlyYyA9IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQodXMtPnB1c2JfZGV2LCB1cy0+cHVzYl9pbnRmKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJVVNfREVCVUdQKCJ1bmFibGUgdG8gbG9jayBkZXZpY2UgZm9yIHJlc2V0OiAlZFxuIiwgcmMpOworCQkJcmVzdWx0ID0gcmM7CisJCX0gZWxzZSB7CisJCQlyZXN1bHQgPSB1c2JfcmVzZXRfZGV2aWNlKHVzLT5wdXNiX2Rldik7CisJCQlpZiAocmMpCisJCQkJdXNiX3VubG9ja19kZXZpY2UodXMtPnB1c2JfZGV2KTsKKwkJCVVTX0RFQlVHUCgidXNiX3Jlc2V0X2RldmljZSByZXR1cm5zICVkXG4iLCByZXN1bHQpOworCQl9CisJfQorCXVwKCYodXMtPmRldl9zZW1hcGhvcmUpKTsKKworCS8qIGxvY2sgdGhlIGhvc3QgZm9yIHRoZSByZXR1cm4gKi8KKwlzY3NpX2xvY2sodXNfdG9faG9zdCh1cykpOworCXJldHVybiByZXN1bHQgPCAwID8gRkFJTEVEIDogU1VDQ0VTUzsKK30KKworLyogUmVwb3J0IGEgZHJpdmVyLWluaXRpYXRlZCBkZXZpY2UgcmVzZXQgdG8gdGhlIFNDU0kgbGF5ZXIuCisgKiBDYWxsaW5nIHRoaXMgZm9yIGEgU0NTSS1pbml0aWF0ZWQgcmVzZXQgaXMgdW5uZWNlc3NhcnkgYnV0IGhhcm1sZXNzLgorICogVGhlIGNhbGxlciBtdXN0IG93biB0aGUgU0NTSSBob3N0IGxvY2suICovCit2b2lkIHVzYl9zdG9yX3JlcG9ydF9kZXZpY2VfcmVzZXQoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCWludCBpOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSB1c190b19ob3N0KHVzKTsKKworCXNjc2lfcmVwb3J0X2RldmljZV9yZXNldChob3N0LCAwLCAwKTsKKwlpZiAodXMtPmZsYWdzICYgVVNfRkxfU0NNX01VTFRfVEFSRykgeworCQlmb3IgKGkgPSAxOyBpIDwgaG9zdC0+bWF4X2lkOyArK2kpCisJCQlzY3NpX3JlcG9ydF9kZXZpY2VfcmVzZXQoaG9zdCwgMCwgaSk7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIC9wcm9jL3Njc2kvIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiB3ZSB1c2UgdGhpcyBtYWNybyB0byBoZWxwIHVzIHdyaXRlIGludG8gdGhlIGJ1ZmZlciAqLworI3VuZGVmIFNQUklOVEYKKyNkZWZpbmUgU1BSSU5URihhcmdzLi4uKSBcCisJZG8geyBpZiAocG9zIDwgYnVmZmVyK2xlbmd0aCkgcG9zICs9IHNwcmludGYocG9zLCAjIyBhcmdzKTsgfSB3aGlsZSAoMCkKKworc3RhdGljIGludCBwcm9jX2luZm8gKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QsIGNoYXIgKmJ1ZmZlciwKKwkJY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBsZW5ndGgsIGludCBpbm91dCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSBob3N0X3RvX3VzKGhvc3QpOworCWNoYXIgKnBvcyA9IGJ1ZmZlcjsKKwljb25zdCBjaGFyICpzdHJpbmc7CisKKwkvKiBpZiBzb21lb25lIGlzIHNlbmRpbmcgdXMgZGF0YSwganVzdCB0aHJvdyBpdCBhd2F5ICovCisJaWYgKGlub3V0KQorCQlyZXR1cm4gbGVuZ3RoOworCisJLyogcHJpbnQgdGhlIGNvbnRyb2xsZXIgbmFtZSAqLworCVNQUklOVEYoIiAgIEhvc3Qgc2NzaSVkOiB1c2Itc3RvcmFnZVxuIiwgaG9zdC0+aG9zdF9ubyk7CisKKwkvKiBwcmludCBwcm9kdWN0LCB2ZW5kb3IsIGFuZCBzZXJpYWwgbnVtYmVyIHN0cmluZ3MgKi8KKwlpZiAodXMtPnB1c2JfZGV2LT5tYW51ZmFjdHVyZXIpCisJCXN0cmluZyA9IHVzLT5wdXNiX2Rldi0+bWFudWZhY3R1cmVyOworCWVsc2UgaWYgKHVzLT51bnVzdWFsX2Rldi0+dmVuZG9yTmFtZSkKKwkJc3RyaW5nID0gdXMtPnVudXN1YWxfZGV2LT52ZW5kb3JOYW1lOworCWVsc2UKKwkJc3RyaW5nID0gIlVua25vd24iOworCVNQUklOVEYoIiAgICAgICBWZW5kb3I6ICVzXG4iLCBzdHJpbmcpOworCWlmICh1cy0+cHVzYl9kZXYtPnByb2R1Y3QpCisJCXN0cmluZyA9IHVzLT5wdXNiX2Rldi0+cHJvZHVjdDsKKwllbHNlIGlmICh1cy0+dW51c3VhbF9kZXYtPnByb2R1Y3ROYW1lKQorCQlzdHJpbmcgPSB1cy0+dW51c3VhbF9kZXYtPnByb2R1Y3ROYW1lOworCWVsc2UKKwkJc3RyaW5nID0gIlVua25vd24iOworCVNQUklOVEYoIiAgICAgIFByb2R1Y3Q6ICVzXG4iLCBzdHJpbmcpOworCWlmICh1cy0+cHVzYl9kZXYtPnNlcmlhbCkKKwkJc3RyaW5nID0gdXMtPnB1c2JfZGV2LT5zZXJpYWw7CisJZWxzZQorCQlzdHJpbmcgPSAiTm9uZSI7CisJU1BSSU5URigiU2VyaWFsIE51bWJlcjogJXNcbiIsIHN0cmluZyk7CisKKwkvKiBzaG93IHRoZSBwcm90b2NvbCBhbmQgdHJhbnNwb3J0ICovCisJU1BSSU5URigiICAgICBQcm90b2NvbDogJXNcbiIsIHVzLT5wcm90b2NvbF9uYW1lKTsKKwlTUFJJTlRGKCIgICAgVHJhbnNwb3J0OiAlc1xuIiwgdXMtPnRyYW5zcG9ydF9uYW1lKTsKKworCS8qIHNob3cgdGhlIGRldmljZSBmbGFncyAqLworCWlmIChwb3MgPCBidWZmZXIgKyBsZW5ndGgpIHsKKwkJcG9zICs9IHNwcmludGYocG9zLCAiICAgICAgIFF1aXJrczoiKTsKKworI2RlZmluZSBVU19GTEFHKG5hbWUsIHZhbHVlKSBcCisJaWYgKHVzLT5mbGFncyAmIHZhbHVlKSBwb3MgKz0gc3ByaW50Zihwb3MsICIgIiAjbmFtZSk7CitVU19ET19BTExfRkxBR1MKKyN1bmRlZiBVU19GTEFHCisKKwkJKihwb3MrKykgPSAnXG4nOworCX0KKworCS8qCisJICogQ2FsY3VsYXRlIHN0YXJ0IG9mIG5leHQgYnVmZmVyLCBhbmQgcmV0dXJuIHZhbHVlLgorCSAqLworCSpzdGFydCA9IGJ1ZmZlciArIG9mZnNldDsKKworCWlmICgocG9zIC0gYnVmZmVyKSA8IG9mZnNldCkKKwkJcmV0dXJuICgwKTsKKwllbHNlIGlmICgocG9zIC0gYnVmZmVyIC0gb2Zmc2V0KSA8IGxlbmd0aCkKKwkJcmV0dXJuIChwb3MgLSBidWZmZXIgLSBvZmZzZXQpOworCWVsc2UKKwkJcmV0dXJuIChsZW5ndGgpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN5c2ZzIGludGVyZmFjZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBPdXRwdXQgcm91dGluZSBmb3IgdGhlIHN5c2ZzIG1heF9zZWN0b3JzIGZpbGUgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfbWF4X3NlY3RvcnMoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5tYXhfc2VjdG9ycyk7Cit9CisKKy8qIElucHV0IHJvdXRpbmUgZm9yIHRoZSBzeXNmcyBtYXhfc2VjdG9ycyBmaWxlICovCitzdGF0aWMgc3NpemVfdCBzdG9yZV9tYXhfc2VjdG9ycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisJdW5zaWduZWQgc2hvcnQgbXM7CisKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVodSIsICZtcykgPiAwICYmIG1zIDw9IFNDU0lfREVGQVVMVF9NQVhfU0VDVE9SUykgeworCQlibGtfcXVldWVfbWF4X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgbXMpOworCQlyZXR1cm4gc3RybGVuKGJ1Zik7CisJfQorCXJldHVybiAtRUlOVkFMOwkKK30KKworc3RhdGljIERFVklDRV9BVFRSKG1heF9zZWN0b3JzLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19tYXhfc2VjdG9ycywKKwkJc3RvcmVfbWF4X3NlY3RvcnMpOworCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKnN5c2ZzX2RldmljZV9hdHRyX2xpc3RbXSA9IHsKKwkJJmRldl9hdHRyX21heF9zZWN0b3JzLAorCQlOVUxMLAorCQl9OworCisvKgorICogdGhpcyBkZWZpbmVzIG91ciBob3N0IHRlbXBsYXRlLCB3aXRoIHdoaWNoIHdlJ2xsIGFsbG9jYXRlIGhvc3RzCisgKi8KKworc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSB1c2Jfc3Rvcl9ob3N0X3RlbXBsYXRlID0geworCS8qIGJhc2ljIHVzZXJsYW5kIGludGVyZmFjZSBzdHVmZiAqLworCS5uYW1lID0JCQkJInVzYi1zdG9yYWdlIiwKKwkucHJvY19uYW1lID0JCQkidXNiLXN0b3JhZ2UiLAorCS5wcm9jX2luZm8gPQkJCXByb2NfaW5mbywKKwkuaW5mbyA9CQkJCWhvc3RfaW5mbywKKworCS8qIGNvbW1hbmQgaW50ZXJmYWNlIC0tIHF1ZXVlZCBvbmx5ICovCisJLnF1ZXVlY29tbWFuZCA9CQkJcXVldWVjb21tYW5kLAorCisJLyogZXJyb3IgYW5kIGFib3J0IGhhbmRsZXJzICovCisJLmVoX2Fib3J0X2hhbmRsZXIgPQkJY29tbWFuZF9hYm9ydCwKKwkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPQlkZXZpY2VfcmVzZXQsCisJLmVoX2J1c19yZXNldF9oYW5kbGVyID0JCWJ1c19yZXNldCwKKworCS8qIHF1ZXVlIGNvbW1hbmRzIG9ubHksIG9ubHkgb25lIGNvbW1hbmQgcGVyIExVTiAqLworCS5jYW5fcXVldWUgPQkJCTEsCisJLmNtZF9wZXJfbHVuID0JCQkxLAorCisJLyogdW5rbm93biBpbml0aWF0b3IgaWQgKi8KKwkudGhpc19pZCA9CQkJLTEsCisKKwkuc2xhdmVfYWxsb2MgPQkJCXNsYXZlX2FsbG9jLAorCS5zbGF2ZV9jb25maWd1cmUgPQkJc2xhdmVfY29uZmlndXJlLAorCisJLyogbG90cyBvZiBzZyBzZWdtZW50cyBjYW4gYmUgaGFuZGxlZCAqLworCS5zZ190YWJsZXNpemUgPQkJCVNHX0FMTCwKKworCS8qIGxpbWl0IHRoZSB0b3RhbCBzaXplIG9mIGEgdHJhbnNmZXIgdG8gMTIwIEtCICovCisJLm1heF9zZWN0b3JzID0gICAgICAgICAgICAgICAgICAyNDAsCisKKwkvKiBtZXJnZSBjb21tYW5kcy4uLiB0aGlzIHNlZW1zIHRvIGhlbHAgcGVyZm9ybWFuY2UsIGJ1dAorCSAqIHBlcmlvZGljYWxseSBzb21lb25lIHNob3VsZCB0ZXN0IHRvIHNlZSB3aGljaCBzZXR0aW5nIGlzIG1vcmUKKwkgKiBvcHRpbWFsLgorCSAqLworCS51c2VfY2x1c3RlcmluZyA9CQkxLAorCisJLyogZW11bGF0ZWQgSEJBICovCisJLmVtdWxhdGVkID0JCQkxLAorCisJLyogd2UgZG8gb3VyIG93biBkZWxheSBhZnRlciBhIGRldmljZSBvciBidXMgcmVzZXQgKi8KKwkuc2tpcF9zZXR0bGVfZGVsYXkgPQkJMSwKKworCS8qIHN5c2ZzIGRldmljZSBhdHRyaWJ1dGVzICovCisJLnNkZXZfYXR0cnMgPQkJCXN5c2ZzX2RldmljZV9hdHRyX2xpc3QsCisKKwkvKiBtb2R1bGUgbWFuYWdlbWVudCAqLworCS5tb2R1bGUgPQkJCVRISVNfTU9EVUxFCit9OworCisvKiBUbyBSZXBvcnQgIklsbGVnYWwgUmVxdWVzdDogSW52YWxpZCBGaWVsZCBpbiBDREIgKi8KK3Vuc2lnbmVkIGNoYXIgdXNiX3N0b3Jfc2Vuc2VfaW52YWxpZENEQlsxOF0gPSB7CisJWzBdCT0gMHg3MCwJCQkgICAgLyogY3VycmVudCBlcnJvciAqLworCVsyXQk9IElMTEVHQUxfUkVRVUVTVCwJICAgIC8qIElsbGVnYWwgUmVxdWVzdCA9IDB4MDUgKi8KKwlbN10JPSAweDBhLAkJCSAgICAvKiBhZGRpdGlvbmFsIGxlbmd0aCAqLworCVsxMl0JPSAweDI0CQkJICAgIC8qIEludmFsaWQgRmllbGQgaW4gQ0RCICovCit9OworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBhNDlhZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuaApAQCAtMCwwICsxLDQ5IEBACisvKiBEcml2ZXIgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgY29tcGxpYW50IGRldmljZXMKKyAqIFNDU0kgQ29ubmVjdGluZyBHbHVlIEhlYWRlciBGaWxlCisgKgorICogJElkOiBzY3NpZ2x1ZS5oLHYgMS40IDIwMDAvMDgvMjUgMDA6MTM6NTEgbWRoYXJtIEV4cCAkCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAxOTk5LCAyMDAwIE1hdHRoZXcgRGhhcm0gKG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0KQorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSAnVVNCIE1hc3MgU3RvcmFnZSBDbGFzcycgZG9jdW1lbnQuIFRoaXMKKyAqIGRlc2NyaWJlcyBpbiBkZXRhaWwgdGhlIHByb3RvY29sIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBzdWNoCisgKiBkZXZpY2VzLiAgQ2xlYXJseSwgdGhlIGRlc2lnbmVycyBoYWQgU0NTSSBhbmQgQVRBUEkgY29tbWFuZHMgaW4KKyAqIG1pbmQgd2hlbiB0aGV5IGNyZWF0ZWQgdGhpcyBkb2N1bWVudC4gIFRoZSBjb21tYW5kcyBhcmUgYWxsIHZlcnkKKyAqIHNpbWlsYXIgdG8gY29tbWFuZHMgaW4gdGhlIFNDU0ktSUkgYW5kIEFUQVBJIHNwZWNpZmljYXRpb25zLgorICoKKyAqIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgaW4gYSBudW1iZXIgb2YgY2FzZXMgdGhpcyBjbGFzcworICogZXhoaWJpdHMgY2xhc3Mtc3BlY2lmaWMgZXhlbXB0aW9ucyBmcm9tIHRoZSBVU0Igc3BlY2lmaWNhdGlvbi4KKyAqIE5vdGFibHkgdGhlIHVzYWdlIG9mIE5BSywgU1RBTEwgYW5kIEFDSyBkaWZmZXJzIGZyb20gdGhlIG5vcm0sIGluCisgKiB0aGF0IHRoZXkgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2FpdCwgZmFpbGVkIGFuZCBPSyBvbiBjb21tYW5kcy4KKyAqCisgKiBBbHNvLCBmb3IgY2VydGFpbiBkZXZpY2VzLCB0aGUgaW50ZXJydXB0IGVuZHBvaW50IGlzIHVzZWQgdG8gY29udmV5CisgKiBzdGF0dXMgb2YgYSBjb21tYW5kLgorICoKKyAqIFBsZWFzZSBzZWUgaHR0cDovL3d3dy5vbmUtZXllZC1hbGllbi5uZXQvfm1kaGFybS9saW51eC11c2IgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX1NDU0lHTFVFX0hfCisjZGVmaW5lIF9TQ1NJR0xVRV9IXworCitleHRlcm4gdm9pZCB1c2Jfc3Rvcl9yZXBvcnRfZGV2aWNlX3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cyk7CisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHVzYl9zdG9yX3NlbnNlX2ludmFsaWRDREJbMThdOworZXh0ZXJuIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgdXNiX3N0b3JfaG9zdF90ZW1wbGF0ZTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWEyZjVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuYwpAQCAtMCwwICsxLDE2MDggQEAKKy8qIERyaXZlciBmb3IgU2FuRGlzayBTRERSLTA5IFNtYXJ0TWVkaWEgcmVhZGVyCisgKgorICogJElkOiBzZGRyMDkuYyx2IDEuMjQgMjAwMi8wNC8yMiAwMzozOTo0MyBtZGhhcm0gRXhwICQKKyAqICAgKGMpIDIwMDAsIDIwMDEgUm9iZXJ0IEJhcnVjaCAoYXV0b3BoaWxlQHN0YXJiYW5kLm5ldCkKKyAqICAgKGMpIDIwMDIgQW5kcmllcyBCcm91d2VyIChhZWJAY3dpLm5sKQorICogRGV2ZWxvcGVkIHdpdGggdGhlIGFzc2lzdGFuY2Ugb2Y6CisgKiAgIChjKSAyMDAyIEFsYW4gU3Rlcm4gPHN0ZXJuQHJvd2xhbmQub3JnPgorICoKKyAqIFRoZSBTYW5EaXNrIFNERFItMDkgU21hcnRNZWRpYSByZWFkZXIgdXNlcyB0aGUgU2h1dHRsZSBFVVNCLTAxIGNoaXAuCisgKiBUaGlzIGNoaXAgaXMgYSBwcm9ncmFtbWFibGUgVVNCIGNvbnRyb2xsZXIuIEluIHRoZSBTRERSLTA5LCBpdCBoYXMKKyAqIGJlZW4gcHJvZ3JhbW1lZCB0byBvYmV5IGEgY2VydGFpbiBsaW1pdGVkIHNldCBvZiBTQ1NJIGNvbW1hbmRzLgorICogVGhpcyBkcml2ZXIgdHJhbnNsYXRlcyB0aGUgInJlYWwiIFNDU0kgY29tbWFuZHMgdG8gdGhlIFNERFItMDkgU0NTSQorICogY29tbWFuZHMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyoKKyAqIEtub3duIHZlbmRvciBjb21tYW5kczogMTIgYnl0ZXMsIGZpcnN0IGJ5dGUgaXMgb3Bjb2RlCisgKgorICogRTc6IHJlYWQgc2NhdHRlciBnYXRoZXIKKyAqIEU4OiByZWFkCisgKiBFOTogd3JpdGUKKyAqIEVBOiBlcmFzZQorICogRUI6IHJlc2V0CisgKiBFQzogcmVhZCBzdGF0dXMKKyAqIEVEOiByZWFkIElECisgKiBFRTogd3JpdGUgQ0lTICg/KQorICogRUY6IGNvbXB1dGUgY2hlY2tzdW0gKD8pCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorCisjaW5jbHVkZSAidXNiLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgInNkZHIwOS5oIgorCisKKyNkZWZpbmUgc2hvcnRfcGFjayhsc2IsbXNiKSAoICgodTE2KShsc2IpKSB8ICggKCh1MTYpKG1zYikpPDw4ICkgKQorI2RlZmluZSBMU0Jfb2YocykgKChzKSYweEZGKQorI2RlZmluZSBNU0Jfb2YocykgKChzKT4+OCkKKworLyogI2RlZmluZSBVU19ERUJVR1AgcHJpbnRrICovCisKKy8qCisgKiBGaXJzdCBzb21lIHN0dWZmIHRoYXQgZG9lcyBub3QgYmVsb25nIGhlcmU6CisgKiBkYXRhIG9uIFNtYXJ0TWVkaWEgYW5kIG90aGVyIGNhcmRzLCBjb21wbGV0ZWx5CisgKiB1bnJlbGF0ZWQgdG8gdGhpcyBkcml2ZXIuCisgKiBTaW1pbGFyIHN0dWZmIG9jY3VycyBpbiA8bGludXgvbXRkL25hbmRfaWRzLmg+LgorICovCisKK3N0cnVjdCBuYW5kX2ZsYXNoX2RldiB7CisJaW50IG1vZGVsX2lkOworCWludCBjaGlwc2hpZnQ7CQkvKiAxPDxjcyBieXRlcyB0b3RhbCBjYXBhY2l0eSAqLworCWNoYXIgcGFnZXNoaWZ0OwkJLyogMTw8cHMgYnl0ZXMgaW4gYSBwYWdlICovCisJY2hhciBibG9ja3NoaWZ0OwkvKiAxPDxicyBwYWdlcyBpbiBhbiBlcmFzZSBibG9jayAqLworCWNoYXIgem9uZXNoaWZ0OwkJLyogMTw8enMgYmxvY2tzIGluIGEgem9uZSAqLworCQkJCS8qICMgb2YgbG9naWNhbCBibG9ja3MgaXMgMTI1LzEyOCBvZiB0aGlzICovCisJY2hhciBwYWdlYWRybGVuOwkvKiBsZW5ndGggb2YgYW4gYWRkcmVzcyBpbiBieXRlcyAtIDEgKi8KK307CisKKy8qCisgKiBOQU5EIEZsYXNoIE1hbnVmYWN0dXJlciBJRCBDb2RlcworICovCisjZGVmaW5lIE5BTkRfTUZSX0FNRAkJMHgwMQorI2RlZmluZSBOQU5EX01GUl9OQVRTRU1JCTB4OGYKKyNkZWZpbmUgTkFORF9NRlJfVE9TSElCQQkweDk4CisjZGVmaW5lIE5BTkRfTUZSX1NBTVNVTkcJMHhlYworCitzdGF0aWMgaW5saW5lIGNoYXIgKm5hbmRfZmxhc2hfbWFudWZhY3R1cmVyKGludCBtYW51Zl9pZCkgeworCXN3aXRjaChtYW51Zl9pZCkgeworCWNhc2UgTkFORF9NRlJfQU1EOgorCQlyZXR1cm4gIkFNRCI7CisJY2FzZSBOQU5EX01GUl9OQVRTRU1JOgorCQlyZXR1cm4gIk5BVFNFTUkiOworCWNhc2UgTkFORF9NRlJfVE9TSElCQToKKwkJcmV0dXJuICJUb3NoaWJhIjsKKwljYXNlIE5BTkRfTUZSX1NBTVNVTkc6CisJCXJldHVybiAiU2Ftc3VuZyI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJ1bmtub3duIjsKKwl9Cit9CisKKy8qCisgKiBJdCBsb29rcyBsaWtlIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGF0dGFjaCBtYW51ZmFjdHVyZXIgdG8gdGhlCisgKiByZW1haW5pbmcgZGF0YTogU1NGREMgcHJlc2NyaWJlcyBtYW51ZmFjdHVyZXItaW5kZXBlbmRlbnQgaWQgY29kZXMuCisgKgorICogMjU2IE1CIE5BTkQgZmxhc2ggaGFzIGEgNS1ieXRlIElEIHdpdGggMm5kIGJ5dGUgMHhhYSwgMHhiYSwgMHhjYSBvciAweGRhLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9mbGFzaF9kZXYgbmFuZF9mbGFzaF9pZHNbXSA9IHsKKwkvKiBOQU5EIGZsYXNoICovCisJeyAweDZlLCAyMCwgOCwgNCwgOCwgMn0sCS8qIDEgTUIgKi8KKwl7IDB4ZTgsIDIwLCA4LCA0LCA4LCAyfSwJLyogMSBNQiAqLworCXsgMHhlYywgMjAsIDgsIDQsIDgsIDJ9LAkvKiAxIE1CICovCisJeyAweDY0LCAyMSwgOCwgNCwgOSwgMn0sIAkvKiAyIE1CICovCisJeyAweGVhLCAyMSwgOCwgNCwgOSwgMn0sCS8qIDIgTUIgKi8KKwl7IDB4NmIsIDIyLCA5LCA0LCA5LCAyfSwJLyogNCBNQiAqLworCXsgMHhlMywgMjIsIDksIDQsIDksIDJ9LAkvKiA0IE1CICovCisJeyAweGU1LCAyMiwgOSwgNCwgOSwgMn0sCS8qIDQgTUIgKi8KKwl7IDB4ZTYsIDIzLCA5LCA0LCAxMCwgMn0sCS8qIDggTUIgKi8KKwl7IDB4NzMsIDI0LCA5LCA1LCAxMCwgMn0sCS8qIDE2IE1CICovCisJeyAweDc1LCAyNSwgOSwgNSwgMTAsIDJ9LAkvKiAzMiBNQiAqLworCXsgMHg3NiwgMjYsIDksIDUsIDEwLCAzfSwJLyogNjQgTUIgKi8KKwl7IDB4NzksIDI3LCA5LCA1LCAxMCwgM30sCS8qIDEyOCBNQiAqLworCisJLyogTUFTSyBST00gKi8KKwl7IDB4NWQsIDIxLCA5LCA0LCA4LCAyfSwJLyogMiBNQiAqLworCXsgMHhkNSwgMjIsIDksIDQsIDksIDJ9LAkvKiA0IE1CICovCisJeyAweGQ2LCAyMywgOSwgNCwgMTAsIDJ9LAkvKiA4IE1CICovCisJeyAweDU3LCAyNCwgOSwgNCwgMTEsIDJ9LAkvKiAxNiBNQiAqLworCXsgMHg1OCwgMjUsIDksIDQsIDEyLCAyfSwJLyogMzIgTUIgKi8KKwl7IDAsfQorfTsKKworI2RlZmluZSBTSVpFKGEpCShzaXplb2YoYSkvc2l6ZW9mKChhKVswXSkpCisKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9mbGFzaF9kZXYgKgorbmFuZF9maW5kX2lkKHVuc2lnbmVkIGNoYXIgaWQpIHsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBTSVpFKG5hbmRfZmxhc2hfaWRzKTsgaSsrKQorCQlpZiAobmFuZF9mbGFzaF9pZHNbaV0ubW9kZWxfaWQgPT0gaWQpCisJCQlyZXR1cm4gJihuYW5kX2ZsYXNoX2lkc1tpXSk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBFQ0MgY29tcHV0YXRpb24uCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHBhcml0eVsyNTZdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgZWNjMlsyNTZdOworCitzdGF0aWMgdm9pZCBuYW5kX2luaXRfZWNjKHZvaWQpIHsKKwlpbnQgaSwgaiwgYTsKKworCXBhcml0eVswXSA9IDA7CisJZm9yIChpID0gMTsgaSA8IDI1NjsgaSsrKQorCQlwYXJpdHlbaV0gPSAocGFyaXR5W2kmKGktMSldIF4gMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJYSA9IDA7CisJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKKwkJCWlmIChpICYgKDE8PGopKSB7CisJCQkJaWYgKChqICYgMSkgPT0gMCkKKwkJCQkJYSBePSAweDA0OworCQkJCWlmICgoaiAmIDIpID09IDApCisJCQkJCWEgXj0gMHgxMDsKKwkJCQlpZiAoKGogJiA0KSA9PSAwKQorCQkJCQlhIF49IDB4NDA7CisJCQl9CisJCX0KKwkJZWNjMltpXSA9IH4oYSBeIChhPDwxKSBeIChwYXJpdHlbaV0gPyAweGE4IDogMCkpOworCX0KK30KKworLyogY29tcHV0ZSAzLWJ5dGUgZWNjIG9uIDI1NiBieXRlcyAqLworc3RhdGljIHZvaWQgbmFuZF9jb21wdXRlX2VjYyh1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBjaGFyICplY2MpIHsKKwlpbnQgaSwgaiwgYTsKKwl1bnNpZ25lZCBjaGFyIHBhciwgYml0LCBiaXRzWzhdOworCisJcGFyID0gMDsKKwlmb3IgKGogPSAwOyBqIDwgODsgaisrKQorCQliaXRzW2pdID0gMDsKKworCS8qIGNvbGxlY3QgMTYgY2hlY2tzdW0gYml0cyAqLworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlwYXIgXj0gZGF0YVtpXTsKKwkJYml0ID0gcGFyaXR5W2RhdGFbaV1dOworCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKQorCQkJaWYgKChpICYgKDE8PGopKSA9PSAwKQorCQkJCWJpdHNbal0gXj0gYml0OworCX0KKworCS8qIHB1dCA0KzQrNCA9IDEyIGJpdHMgaW4gdGhlIGVjYyAqLworCWEgPSAoYml0c1szXSA8PCA2KSArIChiaXRzWzJdIDw8IDQpICsgKGJpdHNbMV0gPDwgMikgKyBiaXRzWzBdOworCWVjY1swXSA9IH4oYSBeIChhPDwxKSBeIChwYXJpdHlbcGFyXSA/IDB4YWEgOiAwKSk7CisKKwlhID0gKGJpdHNbN10gPDwgNikgKyAoYml0c1s2XSA8PCA0KSArIChiaXRzWzVdIDw8IDIpICsgYml0c1s0XTsKKwllY2NbMV0gPSB+KGEgXiAoYTw8MSkgXiAocGFyaXR5W3Bhcl0gPyAweGFhIDogMCkpOworCisJZWNjWzJdID0gZWNjMltwYXJdOworfQorCitzdGF0aWMgaW50IG5hbmRfY29tcGFyZV9lY2ModW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgY2hhciAqZWNjKSB7CisJcmV0dXJuIChkYXRhWzBdID09IGVjY1swXSAmJiBkYXRhWzFdID09IGVjY1sxXSAmJiBkYXRhWzJdID09IGVjY1syXSk7Cit9CisKK3N0YXRpYyB2b2lkIG5hbmRfc3RvcmVfZWNjKHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKmVjYykgeworCW1lbWNweShkYXRhLCBlY2MsIDMpOworfQorCisvKgorICogVGhlIGFjdHVhbCBkcml2ZXIgc3RhcnRzIGhlcmUuCisgKi8KKworLyoKKyAqIE9uIG15IDE2TUIgY2FyZCwgY29udHJvbCBibG9ja3MgaGF2ZSBzaXplIDY0ICgxNiByZWFsIGNvbnRyb2wgYnl0ZXMsCisgKiBhbmQgNDgganVuayBieXRlcykuIEluIHJlYWxpdHkgb2YgY291cnNlIHRoZSBjYXJkIHVzZXMgMTYgY29udHJvbCBieXRlcywKKyAqIHNvIHRoZSByZWFkZXIgbWFrZXMgdXAgdGhlIHJlbWFpbmluZyA0OC4gRG9uJ3Qga25vdyB3aGV0aGVyIHRoZXNlIG51bWJlcnMKKyAqIGRlcGVuZCBvbiB0aGUgY2FyZC4gRm9yIG5vdyBhIGNvbnN0YW50LgorICovCisjZGVmaW5lIENPTlRST0xfU0hJRlQgNgorCisvKgorICogT24gbXkgQ29tYm8gQ0YvU00gcmVhZGVyLCB0aGUgU00gcmVhZGVyIGhhcyBMVU4gMS4KKyAqIChhbmQgdGhpbmdzIGZhaWwgd2l0aCBMVU4gMCkuCisgKiBJdCBzZWVtcyBMVU4gaXMgaXJyZWxldmFudCBmb3Igb3RoZXJzLgorICovCisjZGVmaW5lIExVTgkxCisjZGVmaW5lCUxVTkJJVFMJKExVTiA8PCA1KQorCisvKgorICogTEJBIGFuZCBQQkEgYXJlIHVuc2lnbmVkIGludHMuIFNwZWNpYWwgdmFsdWVzLgorICovCisjZGVmaW5lIFVOREVGICAgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgU1BBUkUgICAgMHhmZmZmZmZmZQorI2RlZmluZSBVTlVTQUJMRSAweGZmZmZmZmZkCisKK3N0YXRpYyBpbnQgZXJhc2VfYmFkX2xiYV9lbnRyaWVzID0gMDsKKworLyogc2VuZCB2ZW5kb3IgaW50ZXJmYWNlIGNvbW1hbmQgKDB4NDEpICovCisvKiBjYWxsZWQgZm9yIHJlcXVlc3RzIDAsIDEsIDggKi8KK3N0YXRpYyBpbnQKK3NkZHIwOV9zZW5kX2NvbW1hbmQoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkgICAgdW5zaWduZWQgY2hhciByZXF1ZXN0LAorCQkgICAgdW5zaWduZWQgY2hhciBkaXJlY3Rpb24sCisJCSAgICB1bnNpZ25lZCBjaGFyICp4ZmVyX2RhdGEsCisJCSAgICB1bnNpZ25lZCBpbnQgeGZlcl9sZW4pIHsKKwl1bnNpZ25lZCBpbnQgcGlwZTsKKwl1bnNpZ25lZCBjaGFyIHJlcXVlc3R0eXBlID0gKDB4NDEgfCBkaXJlY3Rpb24pOworCWludCByYzsKKworCS8vIEdldCB0aGUgcmVjZWl2ZSBvciBzZW5kIGNvbnRyb2wgcGlwZSBudW1iZXIKKworCWlmIChkaXJlY3Rpb24gPT0gVVNCX0RJUl9JTikKKwkJcGlwZSA9IHVzLT5yZWN2X2N0cmxfcGlwZTsKKwllbHNlCisJCXBpcGUgPSB1cy0+c2VuZF9jdHJsX3BpcGU7CisKKwlyYyA9IHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIodXMsIHBpcGUsIHJlcXVlc3QsIHJlcXVlc3R0eXBlLAorCQkJCSAgIDAsIDAsIHhmZXJfZGF0YSwgeGZlcl9sZW4pOworCXJldHVybiAocmMgPT0gVVNCX1NUT1JfWEZFUl9HT09EID8gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QgOgorCQkJVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SKTsKK30KKworc3RhdGljIGludAorc2RkcjA5X3NlbmRfc2NzaV9jb21tYW5kKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCSB1bnNpZ25lZCBjaGFyICpjb21tYW5kLAorCQkJIHVuc2lnbmVkIGludCBjb21tYW5kX2xlbikgeworCXJldHVybiBzZGRyMDlfc2VuZF9jb21tYW5kKHVzLCAwLCBVU0JfRElSX09VVCwgY29tbWFuZCwgY29tbWFuZF9sZW4pOworfQorCisjaWYgMAorLyoKKyAqIFRlc3QgVW5pdCBSZWFkeSBDb21tYW5kOiAxMiBieXRlcy4KKyAqIGJ5dGUgMDogb3Bjb2RlOiAwMAorICovCitzdGF0aWMgaW50CitzZGRyMDlfdGVzdF91bml0X3JlYWR5KHN0cnVjdCB1c19kYXRhICp1cykgeworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJaW50IHJlc3VsdDsKKworCW1lbXNldChjb21tYW5kLCAwLCA2KTsKKwljb21tYW5kWzFdID0gTFVOQklUUzsKKworCXJlc3VsdCA9IHNkZHIwOV9zZW5kX3Njc2lfY29tbWFuZCh1cywgY29tbWFuZCwgNik7CisKKwlVU19ERUJVR1AoInNkZHIwOV90ZXN0X3VuaXRfcmVhZHkgcmV0dXJucyAlZFxuIiwgcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworLyoKKyAqIFJlcXVlc3QgU2Vuc2UgQ29tbWFuZDogMTIgYnl0ZXMuCisgKiBieXRlIDA6IG9wY29kZTogMDMKKyAqIGJ5dGUgNDogZGF0YSBsZW5ndGgKKyAqLworc3RhdGljIGludAorc2RkcjA5X3JlcXVlc3Rfc2Vuc2Uoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBjaGFyICpzZW5zZWJ1ZiwgaW50IGJ1ZmxlbikgeworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJaW50IHJlc3VsdDsKKworCW1lbXNldChjb21tYW5kLCAwLCAxMik7CisJY29tbWFuZFswXSA9IDB4MDM7CisJY29tbWFuZFsxXSA9IExVTkJJVFM7CisJY29tbWFuZFs0XSA9IGJ1ZmxlbjsKKworCXJlc3VsdCA9IHNkZHIwOV9zZW5kX3Njc2lfY29tbWFuZCh1cywgY29tbWFuZCwgMTIpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJVVNfREVCVUdQKCJyZXF1ZXN0IHNlbnNlIGZhaWxlZFxuIik7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSwKKwkJCXNlbnNlYnVmLCBidWZsZW4sIE5VTEwpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCVVTX0RFQlVHUCgicmVxdWVzdCBzZW5zZSBidWxrIGluIGZhaWxlZFxuIik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfSBlbHNlIHsKKwkJVVNfREVCVUdQKCJyZXF1ZXN0IHNlbnNlIHdvcmtlZFxuIik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9Cit9CisKKy8qCisgKiBSZWFkIENvbW1hbmQ6IDEyIGJ5dGVzLgorICogYnl0ZSAwOiBvcGNvZGU6IEU4CisgKiBieXRlIDE6IGxhc3QgdHdvIGJpdHM6IDAwOiByZWFkIGRhdGEsIDAxOiByZWFkIGJsb2Nrd2lzZSBjb250cm9sLAorICoJCQkxMDogcmVhZCBib3RoLCAxMTogcmVhZCBwYWdld2lzZSBjb250cm9sLgorICoJIEl0IHR1cm5zIG91dCB3ZSBuZWVkIHZhbHVlcyAyMCwgMjEsIDIyLCAyMyBoZXJlIChMVU4gMSkuCisgKiBieXRlcyAyLTU6IGFkZHJlc3MgKGludGVycHJldGF0aW9uIGRlcGVuZHMgb24gYnl0ZSAxLCBzZWUgYmVsb3cpCisgKiBieXRlcyAxMC0xMTogY291bnQgKGlkZW0pCisgKgorICogQSBwYWdlIGhhcyA1MTIgZGF0YSBieXRlcyBhbmQgNjQgY29udHJvbCBieXRlcyAoMTYgY29udHJvbCBhbmQgNDgganVuaykuCisgKiBBIHJlYWQgZGF0YSBjb21tYW5kIGdldHMgZGF0YSBpbiA1MTItYnl0ZSBwYWdlcy4KKyAqIEEgcmVhZCBjb250cm9sIGNvbW1hbmQgZ2V0cyBjb250cm9sIGluIDY0LWJ5dGUgY2h1bmtzLgorICogQSByZWFkIGJvdGggY29tbWFuZCBnZXRzIGRhdGErY29udHJvbCBpbiA1NzYtYnl0ZSBjaHVua3MuCisgKgorICogQmxvY2tzIGFyZSBncm91cHMgb2YgMzIgcGFnZXMsIGFuZCByZWFkIGJsb2Nrd2lzZSBjb250cm9sIGp1bXBzIHRvIHRoZQorICogbmV4dCBibG9jaywgd2hpbGUgcmVhZCBwYWdld2lzZSBjb250cm9sIGp1bXBzIHRvIHRoZSBuZXh0IHBhZ2UgYWZ0ZXIKKyAqIHJlYWRpbmcgYSBncm91cCBvZiA2NCBjb250cm9sIGJ5dGVzLgorICogW0hlcmUgNTEyID0gMTw8cGFnZXNoaWZ0LCAzMiA9IDE8PGJsb2Nrc2hpZnQsIDY0IGlzIGNvbnN0YW50P10KKyAqCisgKiAoMSBNQiBhbmQgMiBNQiBjYXJkcyBhcmUgYSBiaXQgZGlmZmVyZW50LCBidXQgSSBoYXZlIG9ubHkgYSAxNiBNQiBjYXJkLikKKyAqLworCitzdGF0aWMgaW50CitzZGRyMDlfcmVhZFgoc3RydWN0IHVzX2RhdGEgKnVzLCBpbnQgeCwgdW5zaWduZWQgbG9uZyBmcm9tYWRkcmVzcywKKwkgICAgIGludCBucl9vZl9wYWdlcywgaW50IGJ1bGtsZW4sIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkgICAgIGludCB1c2Vfc2cpIHsKKworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJaW50IHJlc3VsdDsKKworCWNvbW1hbmRbMF0gPSAweEU4OworCWNvbW1hbmRbMV0gPSBMVU5CSVRTIHwgeDsKKwljb21tYW5kWzJdID0gTVNCX29mKGZyb21hZGRyZXNzPj4xNik7CisJY29tbWFuZFszXSA9IExTQl9vZihmcm9tYWRkcmVzcz4+MTYpOyAKKwljb21tYW5kWzRdID0gTVNCX29mKGZyb21hZGRyZXNzICYgMHhGRkZGKTsKKwljb21tYW5kWzVdID0gTFNCX29mKGZyb21hZGRyZXNzICYgMHhGRkZGKTsgCisJY29tbWFuZFs2XSA9IDA7CisJY29tbWFuZFs3XSA9IDA7CisJY29tbWFuZFs4XSA9IDA7CisJY29tbWFuZFs5XSA9IDA7CisJY29tbWFuZFsxMF0gPSBNU0Jfb2YobnJfb2ZfcGFnZXMpOworCWNvbW1hbmRbMTFdID0gTFNCX29mKG5yX29mX3BhZ2VzKTsKKworCXJlc3VsdCA9IHNkZHIwOV9zZW5kX3Njc2lfY29tbWFuZCh1cywgY29tbWFuZCwgMTIpOworCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCQlVU19ERUJVR1AoIlJlc3VsdCBmb3Igc2VuZF9jb250cm9sIGluIHNkZHIwOV9yZWFkMiVkICVkXG4iLAorCQkJICB4LCByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2codXMsIHVzLT5yZWN2X2J1bGtfcGlwZSwKKwkJCQkgICAgICAgYnVmLCBidWxrbGVuLCB1c2Vfc2csIE5VTEwpOworCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJVVNfREVCVUdQKCJSZXN1bHQgZm9yIGJ1bGtfdHJhbnNmZXIgaW4gc2RkcjA5X3JlYWQyJWQgJWRcbiIsCisJCQkgIHgsIHJlc3VsdCk7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKK30KKworLyoKKyAqIFJlYWQgRGF0YQorICoKKyAqIGZyb21hZGRyZXNzIGNvdW50cyBkYXRhIHNob3J0czoKKyAqIGluY3JlYXNpbmcgaXQgYnkgMjU2IHNoaWZ0cyB0aGUgYnl0ZXN0cmVhbSBieSA1MTIgYnl0ZXM7CisgKiB0aGUgbGFzdCA4IGJpdHMgYXJlIGlnbm9yZWQuCisgKgorICogbnJfb2ZfcGFnZXMgY291bnRzIHBhZ2VzIG9mIHNpemUgKDEgPDwgcGFnZXNoaWZ0KS4KKyAqLworc3RhdGljIGludAorc2RkcjA5X3JlYWQyMChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgZnJvbWFkZHJlc3MsCisJICAgICAgaW50IG5yX29mX3BhZ2VzLCBpbnQgcGFnZXNoaWZ0LCB1bnNpZ25lZCBjaGFyICpidWYsIGludCB1c2Vfc2cpIHsKKwlpbnQgYnVsa2xlbiA9IG5yX29mX3BhZ2VzIDw8IHBhZ2VzaGlmdDsKKworCS8qIFRoZSBsYXN0IDggYml0cyBvZiBmcm9tYWRkcmVzcyBhcmUgaWdub3JlZC4gKi8KKwlyZXR1cm4gc2RkcjA5X3JlYWRYKHVzLCAwLCBmcm9tYWRkcmVzcywgbnJfb2ZfcGFnZXMsIGJ1bGtsZW4sCisJCQkgICAgYnVmLCB1c2Vfc2cpOworfQorCisvKgorICogUmVhZCBCbG9ja3dpc2UgQ29udHJvbAorICoKKyAqIGZyb21hZGRyZXNzIGdpdmVzIHRoZSBzdGFydGluZyBwb3NpdGlvbiAoYXMgaW4gcmVhZCBkYXRhOworICogdGhlIGxhc3QgOCBiaXRzIGFyZSBpZ25vcmVkKTsgaW5jcmVhc2luZyBpdCBieSAzMioyNTYgc2hpZnRzCisgKiB0aGUgb3V0cHV0IHN0cmVhbSBieSA2NCBieXRlcy4KKyAqCisgKiBjb3VudCBjb3VudHMgY29udHJvbCBncm91cHMgb2Ygc2l6ZSAoMSA8PCBjb250cm9sc2hpZnQpLgorICogRm9yIG1lLCBjb250cm9sc2hpZnQgPSA2LiBJcyB0aGlzIGNvbnN0YW50PworICoKKyAqIEFmdGVyIGdldHRpbmcgb25lIGNvbnRyb2wgZ3JvdXAsIGp1bXAgdG8gdGhlIG5leHQgYmxvY2sKKyAqIChmcm9tYWRkcmVzcyArPSA4MTkyKS4KKyAqLworc3RhdGljIGludAorc2RkcjA5X3JlYWQyMShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgZnJvbWFkZHJlc3MsCisJICAgICAgaW50IGNvdW50LCBpbnQgY29udHJvbHNoaWZ0LCB1bnNpZ25lZCBjaGFyICpidWYsIGludCB1c2Vfc2cpIHsKKworCWludCBidWxrbGVuID0gKGNvdW50IDw8IGNvbnRyb2xzaGlmdCk7CisJcmV0dXJuIHNkZHIwOV9yZWFkWCh1cywgMSwgZnJvbWFkZHJlc3MsIGNvdW50LCBidWxrbGVuLAorCQkJICAgIGJ1ZiwgdXNlX3NnKTsKK30KKworLyoKKyAqIFJlYWQgYm90aCBEYXRhIGFuZCBDb250cm9sCisgKgorICogZnJvbWFkZHJlc3MgY291bnRzIGRhdGEgc2hvcnRzLCBpZ25vcmluZyBjb250cm9sOgorICogaW5jcmVhc2luZyBpdCBieSAyNTYgc2hpZnRzIHRoZSBieXRlc3RyZWFtIGJ5IDU3NiA9IDUxMis2NCBieXRlczsKKyAqIHRoZSBsYXN0IDggYml0cyBhcmUgaWdub3JlZC4KKyAqCisgKiBucl9vZl9wYWdlcyBjb3VudHMgcGFnZXMgb2Ygc2l6ZSAoMSA8PCBwYWdlc2hpZnQpICsgKDEgPDwgY29udHJvbHNoaWZ0KS4KKyAqLworc3RhdGljIGludAorc2RkcjA5X3JlYWQyMihzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgZnJvbWFkZHJlc3MsCisJICAgICAgaW50IG5yX29mX3BhZ2VzLCBpbnQgcGFnZXNoaWZ0LCB1bnNpZ25lZCBjaGFyICpidWYsIGludCB1c2Vfc2cpIHsKKworCWludCBidWxrbGVuID0gKG5yX29mX3BhZ2VzIDw8IHBhZ2VzaGlmdCkgKyAobnJfb2ZfcGFnZXMgPDwgQ09OVFJPTF9TSElGVCk7CisJVVNfREVCVUdQKCJzZGRyMDlfcmVhZDIyOiByZWFkaW5nICVkIHBhZ2VzLCAlZCBieXRlc1xuIiwKKwkJICBucl9vZl9wYWdlcywgYnVsa2xlbik7CisJcmV0dXJuIHNkZHIwOV9yZWFkWCh1cywgMiwgZnJvbWFkZHJlc3MsIG5yX29mX3BhZ2VzLCBidWxrbGVuLAorCQkJICAgIGJ1ZiwgdXNlX3NnKTsKK30KKworI2lmIDAKKy8qCisgKiBSZWFkIFBhZ2V3aXNlIENvbnRyb2wKKyAqCisgKiBmcm9tYWRkcmVzcyBnaXZlcyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gKGFzIGluIHJlYWQgZGF0YTsKKyAqIHRoZSBsYXN0IDggYml0cyBhcmUgaWdub3JlZCk7IGluY3JlYXNpbmcgaXQgYnkgMjU2IHNoaWZ0cworICogdGhlIG91dHB1dCBzdHJlYW0gYnkgNjQgYnl0ZXMuCisgKgorICogY291bnQgY291bnRzIGNvbnRyb2wgZ3JvdXBzIG9mIHNpemUgKDEgPDwgY29udHJvbHNoaWZ0KS4KKyAqIEZvciBtZSwgY29udHJvbHNoaWZ0ID0gNi4gSXMgdGhpcyBjb25zdGFudD8KKyAqCisgKiBBZnRlciBnZXR0aW5nIG9uZSBjb250cm9sIGdyb3VwLCBqdW1wIHRvIHRoZSBuZXh0IHBhZ2UKKyAqIChmcm9tYWRkcmVzcyArPSAyNTYpLgorICovCitzdGF0aWMgaW50CitzZGRyMDlfcmVhZDIzKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBmcm9tYWRkcmVzcywKKwkgICAgICBpbnQgY291bnQsIGludCBjb250cm9sc2hpZnQsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IHVzZV9zZykgeworCisJaW50IGJ1bGtsZW4gPSAoY291bnQgPDwgY29udHJvbHNoaWZ0KTsKKwlyZXR1cm4gc2RkcjA5X3JlYWRYKHVzLCAzLCBmcm9tYWRkcmVzcywgY291bnQsIGJ1bGtsZW4sCisJCQkgICAgYnVmLCB1c2Vfc2cpOworfQorI2VuZGlmCisKKy8qCisgKiBFcmFzZSBDb21tYW5kOiAxMiBieXRlcy4KKyAqIGJ5dGUgMDogb3Bjb2RlOiBFQQorICogYnl0ZXMgNi05OiBlcmFzZSBhZGRyZXNzIChiaWctZW5kaWFuLCBjb3VudGluZyBzaG9ydHMsIHNlY3RvciBhbGlnbmVkKS4KKyAqIAorICogQWx3YXlzIHByZWNpc2VseSBvbmUgYmxvY2sgaXMgZXJhc2VkOyBieXRlcyAyLTUgYW5kIDEwLTExIGFyZSBpZ25vcmVkLgorICogVGhlIGJ5dGUgYWRkcmVzcyBiZWluZyBlcmFzZWQgaXMgMipFYWRkcmVzcy4KKyAqIFRoZSBDSVMgY2Fubm90IGJlIGVyYXNlZC4KKyAqLworc3RhdGljIGludAorc2RkcjA5X2VyYXNlKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBFYWRkcmVzcykgeworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJaW50IHJlc3VsdDsKKworCVVTX0RFQlVHUCgic2RkcjA5X2VyYXNlOiBlcmFzZSBhZGRyZXNzICVsdVxuIiwgRWFkZHJlc3MpOworCisJbWVtc2V0KGNvbW1hbmQsIDAsIDEyKTsKKwljb21tYW5kWzBdID0gMHhFQTsKKwljb21tYW5kWzFdID0gTFVOQklUUzsKKwljb21tYW5kWzZdID0gTVNCX29mKEVhZGRyZXNzPj4xNik7CisJY29tbWFuZFs3XSA9IExTQl9vZihFYWRkcmVzcz4+MTYpOworCWNvbW1hbmRbOF0gPSBNU0Jfb2YoRWFkZHJlc3MgJiAweEZGRkYpOworCWNvbW1hbmRbOV0gPSBMU0Jfb2YoRWFkZHJlc3MgJiAweEZGRkYpOworCisJcmVzdWx0ID0gc2RkcjA5X3NlbmRfc2NzaV9jb21tYW5kKHVzLCBjb21tYW5kLCAxMik7CisKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlVU19ERUJVR1AoIlJlc3VsdCBmb3Igc2VuZF9jb250cm9sIGluIHNkZHIwOV9lcmFzZSAlZFxuIiwKKwkJCSAgcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBXcml0ZSBDSVMgQ29tbWFuZDogMTIgYnl0ZXMuCisgKiBieXRlIDA6IG9wY29kZTogRUUKKyAqIGJ5dGVzIDItNTogd3JpdGUgYWRkcmVzcyBpbiBzaG9ydHMKKyAqIGJ5dGVzIDEwLTExOiBzZWN0b3IgY291bnQKKyAqCisgKiBUaGlzIHdyaXRlcyBhdCB0aGUgaW5kaWNhdGVkIGFkZHJlc3MuIERvbid0IGtub3cgaG93IGl0IGRpZmZlcnMKKyAqIGZyb20gRTkuIE1heWJlIGl0IGRvZXMgbm90IGVyYXNlPyBIb3dldmVyLCBpdCB3aWxsIGFsc28gd3JpdGUgdG8KKyAqIHRoZSBDSVMuCisgKgorICogV2hlbiB0d28gc3VjaCBjb21tYW5kcyBvbiB0aGUgc2FtZSBwYWdlIGZvbGxvdyBlYWNoIG90aGVyIGRpcmVjdGx5LAorICogdGhlIHNlY29uZCBvbmUgaXMgbm90IGRvbmUuCisgKi8KKworLyoKKyAqIFdyaXRlIENvbW1hbmQ6IDEyIGJ5dGVzLgorICogYnl0ZSAwOiBvcGNvZGU6IEU5CisgKiBieXRlcyAyLTU6IHdyaXRlIGFkZHJlc3MgKGJpZy1lbmRpYW4sIGNvdW50aW5nIHNob3J0cywgc2VjdG9yIGFsaWduZWQpLgorICogYnl0ZXMgNi05OiBlcmFzZSBhZGRyZXNzIChiaWctZW5kaWFuLCBjb3VudGluZyBzaG9ydHMsIHNlY3RvciBhbGlnbmVkKS4KKyAqIGJ5dGVzIDEwLTExOiBzZWN0b3IgY291bnQgKGJpZy1lbmRpYW4sIGluIDUxMi1ieXRlIHNlY3RvcnMpLgorICoKKyAqIElmIHdyaXRlIGFkZHJlc3MgZXF1YWxzIGVyYXNlIGFkZHJlc3MsIHRoZSBlcmFzZSBpcyBkb25lIGZpcnN0LAorICogb3RoZXJ3aXNlIHRoZSB3cml0ZSBpcyBkb25lIGZpcnN0LiBXaGVuIGVyYXNlIGFkZHJlc3MgZXF1YWxzIHplcm8KKyAqIG5vIGVyYXNlIGlzIGRvbmU/CisgKi8KK3N0YXRpYyBpbnQKK3NkZHIwOV93cml0ZVgoc3RydWN0IHVzX2RhdGEgKnVzLAorCSAgICAgIHVuc2lnbmVkIGxvbmcgV2FkZHJlc3MsIHVuc2lnbmVkIGxvbmcgRWFkZHJlc3MsCisJICAgICAgaW50IG5yX29mX3BhZ2VzLCBpbnQgYnVsa2xlbiwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgdXNlX3NnKSB7CisKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCWludCByZXN1bHQ7CisKKwljb21tYW5kWzBdID0gMHhFOTsKKwljb21tYW5kWzFdID0gTFVOQklUUzsKKworCWNvbW1hbmRbMl0gPSBNU0Jfb2YoV2FkZHJlc3M+PjE2KTsKKwljb21tYW5kWzNdID0gTFNCX29mKFdhZGRyZXNzPj4xNik7CisJY29tbWFuZFs0XSA9IE1TQl9vZihXYWRkcmVzcyAmIDB4RkZGRik7CisJY29tbWFuZFs1XSA9IExTQl9vZihXYWRkcmVzcyAmIDB4RkZGRik7CisKKwljb21tYW5kWzZdID0gTVNCX29mKEVhZGRyZXNzPj4xNik7CisJY29tbWFuZFs3XSA9IExTQl9vZihFYWRkcmVzcz4+MTYpOworCWNvbW1hbmRbOF0gPSBNU0Jfb2YoRWFkZHJlc3MgJiAweEZGRkYpOworCWNvbW1hbmRbOV0gPSBMU0Jfb2YoRWFkZHJlc3MgJiAweEZGRkYpOworCisJY29tbWFuZFsxMF0gPSBNU0Jfb2YobnJfb2ZfcGFnZXMpOworCWNvbW1hbmRbMTFdID0gTFNCX29mKG5yX29mX3BhZ2VzKTsKKworCXJlc3VsdCA9IHNkZHIwOV9zZW5kX3Njc2lfY29tbWFuZCh1cywgY29tbWFuZCwgMTIpOworCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCQlVU19ERUJVR1AoIlJlc3VsdCBmb3Igc2VuZF9jb250cm9sIGluIHNkZHIwOV93cml0ZVggJWRcbiIsCisJCQkgIHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9zZyh1cywgdXMtPnNlbmRfYnVsa19waXBlLAorCQkJCSAgICAgICBidWYsIGJ1bGtsZW4sIHVzZV9zZywgTlVMTCk7CisKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQlVU19ERUJVR1AoIlJlc3VsdCBmb3IgYnVsa190cmFuc2ZlciBpbiBzZGRyMDlfd3JpdGVYICVkXG4iLAorCQkJICByZXN1bHQpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qIGVyYXNlIGFkZHJlc3MsIHdyaXRlIHNhbWUgYWRkcmVzcyAqLworc3RhdGljIGludAorc2RkcjA5X3dyaXRlX2lucGxhY2Uoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCSAgICAgaW50IG5yX29mX3BhZ2VzLCBpbnQgcGFnZXNoaWZ0LCB1bnNpZ25lZCBjaGFyICpidWYsCisJCSAgICAgaW50IHVzZV9zZykgeworCWludCBidWxrbGVuID0gKG5yX29mX3BhZ2VzIDw8IHBhZ2VzaGlmdCkgKyAobnJfb2ZfcGFnZXMgPDwgQ09OVFJPTF9TSElGVCk7CisJcmV0dXJuIHNkZHIwOV93cml0ZVgodXMsIGFkZHJlc3MsIGFkZHJlc3MsIG5yX29mX3BhZ2VzLCBidWxrbGVuLAorCQkJICAgICBidWYsIHVzZV9zZyk7Cit9CisKKyNpZiAwCisvKgorICogUmVhZCBTY2F0dGVyIEdhdGhlciBDb21tYW5kOiAzKzRuIGJ5dGVzLgorICogYnl0ZSAwOiBvcGNvZGUgRTcKKyAqIGJ5dGUgMjogbgorICogYnl0ZXMgNGktMSw0aSw0aSsxOiBwYWdlIGFkZHJlc3MKKyAqIGJ5dGUgNGkrMjogcGFnZSBjb3VudAorICogKGk9MS4ubikKKyAqCisgKiBUaGlzIHJlYWRzIHNldmVyYWwgcGFnZXMgZnJvbSB0aGUgY2FyZCB0byBhIHNpbmdsZSBtZW1vcnkgYnVmZmVyLgorICogVGhlIGxhc3QgdHdvIGJpdHMgb2YgYnl0ZSAxIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgRTguCisgKi8KK3N0YXRpYyBpbnQKK3NkZHIwOV9yZWFkX3NnX3Rlc3Rfb25seShzdHJ1Y3QgdXNfZGF0YSAqdXMpIHsKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCWludCByZXN1bHQsIGJ1bGtsZW4sIG5zZywgY3Q7CisJdW5zaWduZWQgY2hhciAqYnVmOworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKworCW5zZyA9IGJ1bGtsZW4gPSAwOworCWNvbW1hbmRbMF0gPSAweEU3OworCWNvbW1hbmRbMV0gPSBMVU5CSVRTOworCWNvbW1hbmRbMl0gPSAwOworCWFkZHJlc3MgPSAwNDAwMDA7IGN0ID0gMTsKKwluc2crKzsKKwlidWxrbGVuICs9IChjdCA8PCA5KTsKKwljb21tYW5kWzQqbnNnKzJdID0gY3Q7CisJY29tbWFuZFs0Km5zZysxXSA9ICgoYWRkcmVzcyA+PiA5KSAmIDB4RkYpOworCWNvbW1hbmRbNCpuc2crMF0gPSAoKGFkZHJlc3MgPj4gMTcpICYgMHhGRik7CisJY29tbWFuZFs0Km5zZy0xXSA9ICgoYWRkcmVzcyA+PiAyNSkgJiAweEZGKTsKKworCWFkZHJlc3MgPSAwMzQwMDAwOyBjdCA9IDE7CisJbnNnKys7CisJYnVsa2xlbiArPSAoY3QgPDwgOSk7CisJY29tbWFuZFs0Km5zZysyXSA9IGN0OworCWNvbW1hbmRbNCpuc2crMV0gPSAoKGFkZHJlc3MgPj4gOSkgJiAweEZGKTsKKwljb21tYW5kWzQqbnNnKzBdID0gKChhZGRyZXNzID4+IDE3KSAmIDB4RkYpOworCWNvbW1hbmRbNCpuc2ctMV0gPSAoKGFkZHJlc3MgPj4gMjUpICYgMHhGRik7CisKKwlhZGRyZXNzID0gMDEwMDAwMDA7IGN0ID0gMjsKKwluc2crKzsKKwlidWxrbGVuICs9IChjdCA8PCA5KTsKKwljb21tYW5kWzQqbnNnKzJdID0gY3Q7CisJY29tbWFuZFs0Km5zZysxXSA9ICgoYWRkcmVzcyA+PiA5KSAmIDB4RkYpOworCWNvbW1hbmRbNCpuc2crMF0gPSAoKGFkZHJlc3MgPj4gMTcpICYgMHhGRik7CisJY29tbWFuZFs0Km5zZy0xXSA9ICgoYWRkcmVzcyA+PiAyNSkgJiAweEZGKTsKKworCWNvbW1hbmRbMl0gPSBuc2c7CisKKwlyZXN1bHQgPSBzZGRyMDlfc2VuZF9zY3NpX2NvbW1hbmQodXMsIGNvbW1hbmQsIDQqbnNnKzMpOworCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCQlVU19ERUJVR1AoIlJlc3VsdCBmb3Igc2VuZF9jb250cm9sIGluIHNkZHIwOV9yZWFkX3NnICVkXG4iLAorCQkJICByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopIGttYWxsb2MoYnVsa2xlbiwgR0ZQX05PSU8pOworCWlmICghYnVmKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSwKKwkJCQkgICAgICAgYnVmLCBidWxrbGVuLCBOVUxMKTsKKwlrZnJlZShidWYpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCVVTX0RFQlVHUCgiUmVzdWx0IGZvciBidWxrX3RyYW5zZmVyIGluIHNkZHIwOV9yZWFkX3NnICVkXG4iLAorCQkJICByZXN1bHQpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKK30KKyNlbmRpZgorCisvKgorICogUmVhZCBTdGF0dXMgQ29tbWFuZDogMTIgYnl0ZXMuCisgKiBieXRlIDA6IG9wY29kZTogRUMKKyAqCisgKiBSZXR1cm5zIDY0IGJ5dGVzLCBhbGwgemVybyBleGNlcHQgZm9yIHRoZSBmaXJzdC4KKyAqIGJpdCAwOiAxOiBFcnJvcgorICogYml0IDU6IDE6IFN1c3BlbmRlZAorICogYml0IDY6IDE6IFJlYWR5CisgKiBiaXQgNzogMTogTm90IHdyaXRlLXByb3RlY3RlZAorICovCisKK3N0YXRpYyBpbnQKK3NkZHIwOV9yZWFkX3N0YXR1cyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGNoYXIgKnN0YXR1cykgeworCisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXMtPmlvYnVmOworCWludCByZXN1bHQ7CisKKwlVU19ERUJVR1AoIlJlYWRpbmcgc3RhdHVzLi4uXG4iKTsKKworCW1lbXNldChjb21tYW5kLCAwLCAxMik7CisJY29tbWFuZFswXSA9IDB4RUM7CisJY29tbWFuZFsxXSA9IExVTkJJVFM7CisKKwlyZXN1bHQgPSBzZGRyMDlfc2VuZF9zY3NpX2NvbW1hbmQodXMsIGNvbW1hbmQsIDEyKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlyZXR1cm4gcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSwKKwkJCQkgICAgICAgZGF0YSwgNjQsIE5VTEwpOworCSpzdGF0dXMgPSBkYXRhWzBdOworCXJldHVybiAocmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfR09PRCA/CisJCQlVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCA6IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUik7Cit9CisKK3N0YXRpYyBpbnQKK3NkZHIwOV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkgdW5zaWduZWQgaW50IHNlY3RvcnMpIHsKKworCXN0cnVjdCBzZGRyMDlfY2FyZF9pbmZvICppbmZvID0gKHN0cnVjdCBzZGRyMDlfY2FyZF9pbmZvICopIHVzLT5leHRyYTsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdW5zaWduZWQgaW50IGxiYSwgbWF4bGJhLCBwYmE7CisJdW5zaWduZWQgaW50IHBhZ2UsIHBhZ2VzOworCXVuc2lnbmVkIGludCBsZW4sIGluZGV4LCBvZmZzZXQ7CisJaW50IHJlc3VsdDsKKworCS8vIFNpbmNlIHdlIG9ubHkgcmVhZCBpbiBvbmUgYmxvY2sgYXQgYSB0aW1lLCB3ZSBoYXZlIHRvIGNyZWF0ZQorCS8vIGEgYm91bmNlIGJ1ZmZlciBhbmQgbW92ZSB0aGUgZGF0YSBhIHBpZWNlIGF0IGEgdGltZSBiZXR3ZWVuIHRoZQorCS8vIGJvdW5jZSBidWZmZXIgYW5kIHRoZSBhY3R1YWwgdHJhbnNmZXIgYnVmZmVyLgorCisJbGVuID0gbWluKHNlY3RvcnMsICh1bnNpZ25lZCBpbnQpIGluZm8tPmJsb2Nrc2l6ZSkgKiBpbmZvLT5wYWdlc2l6ZTsKKwlidWZmZXIgPSBrbWFsbG9jKGxlbiwgR0ZQX05PSU8pOworCWlmIChidWZmZXIgPT0gTlVMTCkgeworCQlwcmludGsoInNkZHIwOV9yZWFkX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCS8vIEZpZ3VyZSBvdXQgdGhlIGluaXRpYWwgTEJBIGFuZCBwYWdlCisJbGJhID0gYWRkcmVzcyA+PiBpbmZvLT5ibG9ja3NoaWZ0OworCXBhZ2UgPSAoYWRkcmVzcyAmIGluZm8tPmJsb2NrbWFzayk7CisJbWF4bGJhID0gaW5mby0+Y2FwYWNpdHkgPj4gKGluZm8tPnBhZ2VzaGlmdCArIGluZm8tPmJsb2Nrc2hpZnQpOworCisJLy8gVGhpcyBjb3VsZCBiZSBtYWRlIG11Y2ggbW9yZSBlZmZpY2llbnQgYnkgY2hlY2tpbmcgZm9yCisJLy8gY29udGlndW91cyBMQkEncy4gQW5vdGhlciBleGVyY2lzZSBsZWZ0IHRvIHRoZSBzdHVkZW50LgorCisJcmVzdWx0ID0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJaW5kZXggPSBvZmZzZXQgPSAwOworCisJd2hpbGUgKHNlY3RvcnMgPiAwKSB7CisKKwkJLyogRmluZCBudW1iZXIgb2YgcGFnZXMgd2UgY2FuIHJlYWQgaW4gdGhpcyBibG9jayAqLworCQlwYWdlcyA9IG1pbihzZWN0b3JzLCBpbmZvLT5ibG9ja3NpemUgLSBwYWdlKTsKKwkJbGVuID0gcGFnZXMgPDwgaW5mby0+cGFnZXNoaWZ0OworCisJCS8qIE5vdCBvdmVyZmxvd2luZyBjYXBhY2l0eT8gKi8KKwkJaWYgKGxiYSA+PSBtYXhsYmEpIHsKKwkJCVVTX0RFQlVHUCgiRXJyb3I6IFJlcXVlc3RlZCBsYmEgJXUgZXhjZWVkcyAiCisJCQkJICAibWF4aW11bSAldVxuIiwgbGJhLCBtYXhsYmEpOworCQkJcmVzdWx0ID0gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBGaW5kIHdoZXJlIHRoaXMgbGJhIGxpdmVzIG9uIGRpc2sgKi8KKwkJcGJhID0gaW5mby0+bGJhX3RvX3BiYVtsYmFdOworCisJCWlmIChwYmEgPT0gVU5ERUYpIHsJLyogdGhpcyBsYmEgd2FzIG5ldmVyIHdyaXR0ZW4gKi8KKworCQkJVVNfREVCVUdQKCJSZWFkICVkIHplcm8gcGFnZXMgKExCQSAlZCkgcGFnZSAlZFxuIiwKKwkJCQkgIHBhZ2VzLCBsYmEsIHBhZ2UpOworCisJCQkvKiBUaGlzIGlzIG5vdCByZWFsbHkgYW4gZXJyb3IuIEl0IGp1c3QgbWVhbnMKKwkJCSAgIHRoYXQgdGhlIGJsb2NrIGhhcyBuZXZlciBiZWVuIHdyaXR0ZW4uCisJCQkgICBJbnN0ZWFkIG9mIHJldHVybmluZyBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1IKKwkJCSAgIGl0IGlzIGJldHRlciB0byByZXR1cm4gYWxsIHplcm8gZGF0YS4gKi8KKworCQkJbWVtc2V0KGJ1ZmZlciwgMCwgbGVuKTsKKworCQl9IGVsc2UgeworCQkJVVNfREVCVUdQKCJSZWFkICVkIHBhZ2VzLCBmcm9tIFBCQSAlZCIKKwkJCQkgICIgKExCQSAlZCkgcGFnZSAlZFxuIiwKKwkJCQkgIHBhZ2VzLCBwYmEsIGxiYSwgcGFnZSk7CisKKwkJCWFkZHJlc3MgPSAoKHBiYSA8PCBpbmZvLT5ibG9ja3NoaWZ0KSArIHBhZ2UpIDw8IAorCQkJCWluZm8tPnBhZ2VzaGlmdDsKKworCQkJcmVzdWx0ID0gc2RkcjA5X3JlYWQyMCh1cywgYWRkcmVzcz4+MSwKKwkJCQkJcGFnZXMsIGluZm8tPnBhZ2VzaGlmdCwgYnVmZmVyLCAwKTsKKwkJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQkJYnJlYWs7CisJCX0KKworCQkvLyBTdG9yZSB0aGUgZGF0YSBpbiB0aGUgdHJhbnNmZXIgYnVmZmVyCisJCXVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1ZihidWZmZXIsIGxlbiwgdXMtPnNyYiwKKwkJCQkmaW5kZXgsICZvZmZzZXQsIFRPX1hGRVJfQlVGKTsKKworCQlwYWdlID0gMDsKKwkJbGJhKys7CisJCXNlY3RvcnMgLT0gcGFnZXM7CisJfQorCisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitzZGRyMDlfZmluZF91bnVzZWRfcGJhKHN0cnVjdCBzZGRyMDlfY2FyZF9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgbGJhKSB7CisJc3RhdGljIHVuc2lnbmVkIGludCBsYXN0cGJhID0gMTsKKwlpbnQgem9uZXN0YXJ0LCBlbmQsIGk7CisKKwl6b25lc3RhcnQgPSAobGJhLzEwMDApIDw8IDEwOworCWVuZCA9IGluZm8tPmNhcGFjaXR5ID4+IChpbmZvLT5ibG9ja3NoaWZ0ICsgaW5mby0+cGFnZXNoaWZ0KTsKKwllbmQgLT0gem9uZXN0YXJ0OworCWlmIChlbmQgPiAxMDI0KQorCQllbmQgPSAxMDI0OworCisJZm9yIChpID0gbGFzdHBiYSsxOyBpIDwgZW5kOyBpKyspIHsKKwkJaWYgKGluZm8tPnBiYV90b19sYmFbem9uZXN0YXJ0K2ldID09IFVOREVGKSB7CisJCQlsYXN0cGJhID0gaTsKKwkJCXJldHVybiB6b25lc3RhcnQraTsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDw9IGxhc3RwYmE7IGkrKykgeworCQlpZiAoaW5mby0+cGJhX3RvX2xiYVt6b25lc3RhcnQraV0gPT0gVU5ERUYpIHsKKwkJCWxhc3RwYmEgPSBpOworCQkJcmV0dXJuIHpvbmVzdGFydCtpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzZGRyMDlfd3JpdGVfbGJhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IGxiYSwKKwkJIHVuc2lnbmVkIGludCBwYWdlLCB1bnNpZ25lZCBpbnQgcGFnZXMsCisJCSB1bnNpZ25lZCBjaGFyICpwdHIsIHVuc2lnbmVkIGNoYXIgKmJsb2NrYnVmZmVyKSB7CisKKwlzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqKSB1cy0+ZXh0cmE7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzOworCXVuc2lnbmVkIGludCBwYmEsIGxiYXA7CisJdW5zaWduZWQgaW50IHBhZ2VsZW47CisJdW5zaWduZWQgY2hhciAqYnB0ciwgKmNwdHIsICp4cHRyOworCXVuc2lnbmVkIGNoYXIgZWNjWzNdOworCWludCBpLCByZXN1bHQsIGlzbmV3OworCisJbGJhcCA9ICgobGJhICUgMTAwMCkgPDwgMSkgfCAweDEwMDA7CisJaWYgKHBhcml0eVtNU0Jfb2YobGJhcCkgXiBMU0Jfb2YobGJhcCldKQorCQlsYmFwIF49IDE7CisJcGJhID0gaW5mby0+bGJhX3RvX3BiYVtsYmFdOworCWlzbmV3ID0gMDsKKworCWlmIChwYmEgPT0gVU5ERUYpIHsKKwkJcGJhID0gc2RkcjA5X2ZpbmRfdW51c2VkX3BiYShpbmZvLCBsYmEpOworCQlpZiAoIXBiYSkgeworCQkJcHJpbnRrKCJzZGRyMDlfd3JpdGVfbGJhOiBPdXQgb2YgdW51c2VkIGJsb2Nrc1xuIik7CisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQl9CisJCWluZm8tPnBiYV90b19sYmFbcGJhXSA9IGxiYTsKKwkJaW5mby0+bGJhX3RvX3BiYVtsYmFdID0gcGJhOworCQlpc25ldyA9IDE7CisJfQorCisJaWYgKHBiYSA9PSAxKSB7CisJCS8qIE1heWJlIGl0IGlzIGltcG9zc2libGUgdG8gd3JpdGUgdG8gUEJBIDEuCisJCSAgIEZha2Ugc3VjY2VzcywgYnV0IGRvbid0IGRvIGFueXRoaW5nLiAqLworCQlwcmludGsoInNkZHIwOTogYXZvaWQgd3JpdGluZyB0byBwYmEgMVxuIik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlwYWdlbGVuID0gKDEgPDwgaW5mby0+cGFnZXNoaWZ0KSArICgxIDw8IENPTlRST0xfU0hJRlQpOworCisJLyogcmVhZCBvbGQgY29udGVudHMgKi8KKwlhZGRyZXNzID0gKHBiYSA8PCAoaW5mby0+cGFnZXNoaWZ0ICsgaW5mby0+YmxvY2tzaGlmdCkpOworCXJlc3VsdCA9IHNkZHIwOV9yZWFkMjIodXMsIGFkZHJlc3M+PjEsIGluZm8tPmJsb2Nrc2l6ZSwKKwkJCSAgICAgICBpbmZvLT5wYWdlc2hpZnQsIGJsb2NrYnVmZmVyLCAwKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlyZXR1cm4gcmVzdWx0OworCisJLyogY2hlY2sgb2xkIGNvbnRlbnRzIGFuZCBmaWxsIGxiYSAqLworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5ibG9ja3NpemU7IGkrKykgeworCQlicHRyID0gYmxvY2tidWZmZXIgKyBpKnBhZ2VsZW47CisJCWNwdHIgPSBicHRyICsgaW5mby0+cGFnZXNpemU7CisJCW5hbmRfY29tcHV0ZV9lY2MoYnB0ciwgZWNjKTsKKwkJaWYgKCFuYW5kX2NvbXBhcmVfZWNjKGNwdHIrMTMsIGVjYykpIHsKKwkJCVVTX0RFQlVHUCgiV2FybmluZzogYmFkIGVjYyBpbiBwYWdlICVkLSBvZiBwYmEgJWRcbiIsCisJCQkJICBpLCBwYmEpOworCQkJbmFuZF9zdG9yZV9lY2MoY3B0cisxMywgZWNjKTsKKwkJfQorCQluYW5kX2NvbXB1dGVfZWNjKGJwdHIrKGluZm8tPnBhZ2VzaXplIC8gMiksIGVjYyk7CisJCWlmICghbmFuZF9jb21wYXJlX2VjYyhjcHRyKzgsIGVjYykpIHsKKwkJCVVTX0RFQlVHUCgiV2FybmluZzogYmFkIGVjYyBpbiBwYWdlICVkKyBvZiBwYmEgJWRcbiIsCisJCQkJICBpLCBwYmEpOworCQkJbmFuZF9zdG9yZV9lY2MoY3B0cis4LCBlY2MpOworCQl9CisJCWNwdHJbNl0gPSBjcHRyWzExXSA9IE1TQl9vZihsYmFwKTsKKwkJY3B0cls3XSA9IGNwdHJbMTJdID0gTFNCX29mKGxiYXApOworCX0KKworCS8qIGNvcHkgaW4gbmV3IHN0dWZmIGFuZCBjb21wdXRlIEVDQyAqLworCXhwdHIgPSBwdHI7CisJZm9yIChpID0gcGFnZTsgaSA8IHBhZ2UrcGFnZXM7IGkrKykgeworCQlicHRyID0gYmxvY2tidWZmZXIgKyBpKnBhZ2VsZW47CisJCWNwdHIgPSBicHRyICsgaW5mby0+cGFnZXNpemU7CisJCW1lbWNweShicHRyLCB4cHRyLCBpbmZvLT5wYWdlc2l6ZSk7CisJCXhwdHIgKz0gaW5mby0+cGFnZXNpemU7CisJCW5hbmRfY29tcHV0ZV9lY2MoYnB0ciwgZWNjKTsKKwkJbmFuZF9zdG9yZV9lY2MoY3B0cisxMywgZWNjKTsKKwkJbmFuZF9jb21wdXRlX2VjYyhicHRyKyhpbmZvLT5wYWdlc2l6ZSAvIDIpLCBlY2MpOworCQluYW5kX3N0b3JlX2VjYyhjcHRyKzgsIGVjYyk7CisJfQorCisJVVNfREVCVUdQKCJSZXdyaXRlIFBCQSAlZCAoTEJBICVkKVxuIiwgcGJhLCBsYmEpOworCisJcmVzdWx0ID0gc2RkcjA5X3dyaXRlX2lucGxhY2UodXMsIGFkZHJlc3M+PjEsIGluZm8tPmJsb2Nrc2l6ZSwKKwkJCQkgICAgICBpbmZvLT5wYWdlc2hpZnQsIGJsb2NrYnVmZmVyLCAwKTsKKworCVVTX0RFQlVHUCgic2RkcjA5X3dyaXRlX2lucGxhY2UgcmV0dXJucyAlZFxuIiwgcmVzdWx0KTsKKworI2lmIDAKKwl7CisJCXVuc2lnbmVkIGNoYXIgc3RhdHVzID0gMDsKKwkJaW50IHJlc3VsdDIgPSBzZGRyMDlfcmVhZF9zdGF0dXModXMsICZzdGF0dXMpOworCQlpZiAocmVzdWx0MiAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCVVTX0RFQlVHUCgic2RkcjA5X3dyaXRlX2lucGxhY2U6IGNhbm5vdCByZWFkIHN0YXR1c1xuIik7CisJCWVsc2UgaWYgKHN0YXR1cyAhPSAweGMwKQorCQkJVVNfREVCVUdQKCJzZGRyMDlfd3JpdGVfaW5wbGFjZTogc3RhdHVzIGFmdGVyIHdyaXRlOiAweCV4XG4iLAorCQkJCSAgc3RhdHVzKTsKKwl9CisjZW5kaWYKKworI2lmIDAKKwl7CisJCWludCByZXN1bHQyID0gc2RkcjA5X3Rlc3RfdW5pdF9yZWFkeSh1cyk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50CitzZGRyMDlfd3JpdGVfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCSAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkgIHVuc2lnbmVkIGludCBzZWN0b3JzKSB7CisKKwlzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqKSB1cy0+ZXh0cmE7CisJdW5zaWduZWQgaW50IGxiYSwgcGFnZSwgcGFnZXM7CisJdW5zaWduZWQgaW50IHBhZ2VsZW4sIGJsb2NrbGVuOworCXVuc2lnbmVkIGNoYXIgKmJsb2NrYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBpbnQgbGVuLCBpbmRleCwgb2Zmc2V0OworCWludCByZXN1bHQ7CisKKwkvLyBibG9ja2J1ZmZlciBpcyB1c2VkIGZvciByZWFkaW5nIGluIHRoZSBvbGQgZGF0YSwgb3ZlcndyaXRpbmcKKwkvLyB3aXRoIHRoZSBuZXcgZGF0YSwgYW5kIHBlcmZvcm1pbmcgRUNDIGNhbGN1bGF0aW9ucworCisJLyogVE9ETzogaW5zdGVhZCBvZiBkb2luZyBrbWFsbG9jL2tmcmVlIGZvciBlYWNoIHdyaXRlLAorCSAgIGFkZCBhIGJ1ZmZlcnBvaW50ZXIgdG8gdGhlIGluZm8gc3RydWN0dXJlICovCisKKwlwYWdlbGVuID0gKDEgPDwgaW5mby0+cGFnZXNoaWZ0KSArICgxIDw8IENPTlRST0xfU0hJRlQpOworCWJsb2NrbGVuID0gKHBhZ2VsZW4gPDwgaW5mby0+YmxvY2tzaGlmdCk7CisJYmxvY2tidWZmZXIgPSBrbWFsbG9jKGJsb2NrbGVuLCBHRlBfTk9JTyk7CisJaWYgKCFibG9ja2J1ZmZlcikgeworCQlwcmludGsoInNkZHIwOV93cml0ZV9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwkvLyBTaW5jZSB3ZSBkb24ndCB3cml0ZSB0aGUgdXNlciBkYXRhIGRpcmVjdGx5IHRvIHRoZSBkZXZpY2UsCisJLy8gd2UgaGF2ZSB0byBjcmVhdGUgYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2UKKwkvLyBhdCBhIHRpbWUgYmV0d2VlbiB0aGUgYm91bmNlIGJ1ZmZlciBhbmQgdGhlIGFjdHVhbCB0cmFuc2ZlciBidWZmZXIuCisKKwlsZW4gPSBtaW4oc2VjdG9ycywgKHVuc2lnbmVkIGludCkgaW5mby0+YmxvY2tzaXplKSAqIGluZm8tPnBhZ2VzaXplOworCWJ1ZmZlciA9IGttYWxsb2MobGVuLCBHRlBfTk9JTyk7CisJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CisJCXByaW50aygic2RkcjA5X3dyaXRlX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOworCQlrZnJlZShibG9ja2J1ZmZlcik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJLy8gRmlndXJlIG91dCB0aGUgaW5pdGlhbCBMQkEgYW5kIHBhZ2UKKwlsYmEgPSBhZGRyZXNzID4+IGluZm8tPmJsb2Nrc2hpZnQ7CisJcGFnZSA9IChhZGRyZXNzICYgaW5mby0+YmxvY2ttYXNrKTsKKworCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCWluZGV4ID0gb2Zmc2V0ID0gMDsKKworCXdoaWxlIChzZWN0b3JzID4gMCkgeworCisJCS8vIFdyaXRlIGFzIG1hbnkgc2VjdG9ycyBhcyBwb3NzaWJsZSBpbiB0aGlzIGJsb2NrCisKKwkJcGFnZXMgPSBtaW4oc2VjdG9ycywgaW5mby0+YmxvY2tzaXplIC0gcGFnZSk7CisJCWxlbiA9IChwYWdlcyA8PCBpbmZvLT5wYWdlc2hpZnQpOworCisJCS8vIEdldCB0aGUgZGF0YSBmcm9tIHRoZSB0cmFuc2ZlciBidWZmZXIKKwkJdXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKGJ1ZmZlciwgbGVuLCB1cy0+c3JiLAorCQkJCSZpbmRleCwgJm9mZnNldCwgRlJPTV9YRkVSX0JVRik7CisKKwkJcmVzdWx0ID0gc2RkcjA5X3dyaXRlX2xiYSh1cywgbGJhLCBwYWdlLCBwYWdlcywKKwkJCQlidWZmZXIsIGJsb2NrYnVmZmVyKTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCWJyZWFrOworCisJCXBhZ2UgPSAwOworCQlsYmErKzsKKwkJc2VjdG9ycyAtPSBwYWdlczsKKwl9CisKKwlrZnJlZShidWZmZXIpOworCWtmcmVlKGJsb2NrYnVmZmVyKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQKK3NkZHIwOV9yZWFkX2NvbnRyb2woc3RydWN0IHVzX2RhdGEgKnVzLAorCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCXVuc2lnbmVkIGludCBibG9ja3MsCisJCXVuc2lnbmVkIGNoYXIgKmNvbnRlbnQsCisJCWludCB1c2Vfc2cpIHsKKworCVVTX0RFQlVHUCgiUmVhZCBjb250cm9sIGFkZHJlc3MgJWx1LCBibG9ja3MgJWRcbiIsCisJCWFkZHJlc3MsIGJsb2Nrcyk7CisKKwlyZXR1cm4gc2RkcjA5X3JlYWQyMSh1cywgYWRkcmVzcywgYmxvY2tzLAorCQkJICAgICBDT05UUk9MX1NISUZULCBjb250ZW50LCB1c2Vfc2cpOworfQorCisvKgorICogUmVhZCBEZXZpY2UgSUQgQ29tbWFuZDogMTIgYnl0ZXMuCisgKiBieXRlIDA6IG9wY29kZTogRUQKKyAqCisgKiBSZXR1cm5zIDIgYnl0ZXM6IE1hbnVmYWN0dXJlciBJRCBhbmQgRGV2aWNlIElELgorICogT24gbW9yZSByZWNlbnQgY2FyZHMgMyBieXRlczogdGhlIHRoaXJkIGJ5dGUgaXMgYW4gb3B0aW9uIGNvZGUgQTUKKyAqIHNpZ25pZnlpbmcgdGhhdCB0aGUgc2VjcmV0IGNvbW1hbmQgdG8gcmVhZCBhbiAxMjgtYml0IElEIGlzIGF2YWlsYWJsZS4KKyAqIE9uIHN0aWxsIG1vcmUgcmVjZW50IGNhcmRzIDQgYnl0ZXM6IHRoZSBmb3VydGggYnl0ZSBDMCBtZWFucyB0aGF0CisgKiBhIHNlY29uZCByZWFkIElEIGNtZCBpcyBhdmFpbGFibGUuCisgKi8KK3N0YXRpYyBpbnQKK3NkZHIwOV9yZWFkX2RldmljZUlEKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgY2hhciAqZGV2aWNlSUQpIHsKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCXVuc2lnbmVkIGNoYXIgKmNvbnRlbnQgPSB1cy0+aW9idWY7CisJaW50IHJlc3VsdCwgaTsKKworCW1lbXNldChjb21tYW5kLCAwLCAxMik7CisJY29tbWFuZFswXSA9IDB4RUQ7CisJY29tbWFuZFsxXSA9IExVTkJJVFM7CisKKwlyZXN1bHQgPSBzZGRyMDlfc2VuZF9zY3NpX2NvbW1hbmQodXMsIGNvbW1hbmQsIDEyKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlyZXR1cm4gcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSwKKwkJCWNvbnRlbnQsIDY0LCBOVUxMKTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWRldmljZUlEW2ldID0gY29udGVudFtpXTsKKworCXJldHVybiAocmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfR09PRCA/CisJCQlVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCA6IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUik7Cit9CisKK3N0YXRpYyBpbnQKK3NkZHIwOV9nZXRfd3Aoc3RydWN0IHVzX2RhdGEgKnVzLCBzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqaW5mbykgeworCWludCByZXN1bHQ7CisJdW5zaWduZWQgY2hhciBzdGF0dXM7CisKKwlyZXN1bHQgPSBzZGRyMDlfcmVhZF9zdGF0dXModXMsICZzdGF0dXMpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJVVNfREVCVUdQKCJzZGRyMDlfZ2V0X3dwOiByZWFkX3N0YXR1cyBmYWlsc1xuIik7CisJCXJldHVybiByZXN1bHQ7CisJfQorCVVTX0RFQlVHUCgic2RkcjA5X2dldF93cDogc3RhdHVzIDB4JTAyWCIsIHN0YXR1cyk7CisJaWYgKChzdGF0dXMgJiAweDgwKSA9PSAwKSB7CisJCWluZm8tPmZsYWdzIHw9IFNERFIwOV9XUDsJLyogd3JpdGUgcHJvdGVjdGVkICovCisJCVVTX0RFQlVHUCgiIFdQIik7CisJfQorCWlmIChzdGF0dXMgJiAweDQwKQorCQlVU19ERUJVR1AoIiBSZWFkeSIpOworCWlmIChzdGF0dXMgJiBMVU5CSVRTKQorCQlVU19ERUJVR1AoIiBTdXNwZW5kZWQiKTsKKwlpZiAoc3RhdHVzICYgMHgxKQorCQlVU19ERUJVR1AoIiBFcnJvciIpOworCVVTX0RFQlVHUCgiXG4iKTsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKyNpZiAwCisvKgorICogUmVzZXQgQ29tbWFuZDogMTIgYnl0ZXMuCisgKiBieXRlIDA6IG9wY29kZTogRUIKKyAqLworc3RhdGljIGludAorc2RkcjA5X3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykgeworCisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKworCW1lbXNldChjb21tYW5kLCAwLCAxMik7CisJY29tbWFuZFswXSA9IDB4RUI7CisJY29tbWFuZFsxXSA9IExVTkJJVFM7CisKKwlyZXR1cm4gc2RkcjA5X3NlbmRfc2NzaV9jb21tYW5kKHVzLCBjb21tYW5kLCAxMik7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBuYW5kX2ZsYXNoX2RldiAqCitzZGRyMDlfZ2V0X2NhcmRpbmZvKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgY2hhciBmbGFncykgeworCXN0cnVjdCBuYW5kX2ZsYXNoX2RldiAqY2FyZGluZm87CisJdW5zaWduZWQgY2hhciBkZXZpY2VJRFs0XTsKKwljaGFyIGJsdXJidHh0WzI1Nl07CisJaW50IHJlc3VsdDsKKworCVVTX0RFQlVHUCgiUmVhZGluZyBjYXBhY2l0eS4uLlxuIik7CisKKwlyZXN1bHQgPSBzZGRyMDlfcmVhZF9kZXZpY2VJRCh1cywgZGV2aWNlSUQpOworCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCQlVU19ERUJVR1AoIlJlc3VsdCBvZiByZWFkX2RldmljZUlEIGlzICVkXG4iLCByZXN1bHQpOworCQlwcmludGsoInNkZHIwOTogY291bGQgbm90IHJlYWQgY2FyZCBpbmZvXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJc3ByaW50ZihibHVyYnR4dCwgInNkZHIwOTogRm91bmQgRmxhc2ggY2FyZCwgSUQgPSAlMDJYICUwMlggJTAyWCAlMDJYIiwKKwkJZGV2aWNlSURbMF0sIGRldmljZUlEWzFdLCBkZXZpY2VJRFsyXSwgZGV2aWNlSURbM10pOworCisJLyogQnl0ZSAwIGlzIHRoZSBtYW51ZmFjdHVyZXIgKi8KKwlzcHJpbnRmKGJsdXJidHh0ICsgc3RybGVuKGJsdXJidHh0KSwKKwkJIjogTWFudWYuICVzIiwKKwkJbmFuZF9mbGFzaF9tYW51ZmFjdHVyZXIoZGV2aWNlSURbMF0pKTsKKworCS8qIEJ5dGUgMSBpcyB0aGUgZGV2aWNlIHR5cGUgKi8KKwljYXJkaW5mbyA9IG5hbmRfZmluZF9pZChkZXZpY2VJRFsxXSk7CisJaWYgKGNhcmRpbmZvKSB7CisJCS8qIE1CIG9yIE1pQj8gSXQgaXMgbmVpdGhlci4gQSAxNiBNQiBjYXJkIGhhcworCQkgICAxNzMwMTUwNCByYXcgYnl0ZXMsIG9mIHdoaWNoIDE2Mzg0MDAwIGFyZQorCQkgICB1c2FibGUgZm9yIHVzZXIgZGF0YS4gKi8KKwkJc3ByaW50ZihibHVyYnR4dCArIHN0cmxlbihibHVyYnR4dCksCisJCQkiLCAlZCBNQiIsIDE8PChjYXJkaW5mby0+Y2hpcHNoaWZ0IC0gMjApKTsKKwl9IGVsc2UgeworCQlzcHJpbnRmKGJsdXJidHh0ICsgc3RybGVuKGJsdXJidHh0KSwKKwkJCSIsIHR5cGUgdW5yZWNvZ25pemVkIik7CisJfQorCisJLyogQnl0ZSAyIGlzIGNvZGUgdG8gc2lnbmFsIGF2YWlsYWJpbGl0eSBvZiAxMjgtYml0IElEICovCisJaWYgKGRldmljZUlEWzJdID09IDB4YTUpIHsKKwkJc3ByaW50ZihibHVyYnR4dCArIHN0cmxlbihibHVyYnR4dCksCisJCQkiLCAxMjgtYml0IElEIik7CisJfQorCisJLyogQnl0ZSAzIGFubm91bmNlcyB0aGUgYXZhaWxhYmlsaXR5IG9mIGFub3RoZXIgcmVhZCBJRCBjb21tYW5kICovCisJaWYgKGRldmljZUlEWzNdID09IDB4YzApIHsKKwkJc3ByaW50ZihibHVyYnR4dCArIHN0cmxlbihibHVyYnR4dCksCisJCQkiLCBleHRyYSBjbWQiKTsKKwl9CisKKwlpZiAoZmxhZ3MgJiBTRERSMDlfV1ApCisJCXNwcmludGYoYmx1cmJ0eHQgKyBzdHJsZW4oYmx1cmJ0eHQpLAorCQkJIiwgV1AiKTsKKworCXByaW50aygiJXNcbiIsIGJsdXJidHh0KTsKKworCXJldHVybiBjYXJkaW5mbzsKK30KKworc3RhdGljIGludAorc2RkcjA5X3JlYWRfbWFwKHN0cnVjdCB1c19kYXRhICp1cykgeworCisJc3RydWN0IHNkZHIwOV9jYXJkX2luZm8gKmluZm8gPSAoc3RydWN0IHNkZHIwOV9jYXJkX2luZm8gKikgdXMtPmV4dHJhOworCWludCBudW1ibG9ja3MsIGFsbG9jX2xlbiwgYWxsb2NfYmxvY2tzOworCWludCBpLCBqLCByZXN1bHQ7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyLCAqYnVmZmVyX2VuZCwgKnB0cjsKKwl1bnNpZ25lZCBpbnQgbGJhLCBsYmFjdDsKKworCWlmICghaW5mby0+Y2FwYWNpdHkpCisJCXJldHVybiAtMTsKKworCS8vIHNpemUgb2YgYSBibG9jayBpcyAxIDw8IChibG9ja3NoaWZ0ICsgcGFnZXNoaWZ0KSBieXRlcworCS8vIGRpdmlkZSBpbnRvIHRoZSB0b3RhbCBjYXBhY2l0eSB0byBnZXQgdGhlIG51bWJlciBvZiBibG9ja3MKKworCW51bWJsb2NrcyA9IGluZm8tPmNhcGFjaXR5ID4+IChpbmZvLT5ibG9ja3NoaWZ0ICsgaW5mby0+cGFnZXNoaWZ0KTsKKworCS8vIHJlYWQgNjQgYnl0ZXMgZm9yIGV2ZXJ5IGJsb2NrIChhY3R1YWxseSAxIDw8IENPTlRST0xfU0hJRlQpCisJLy8gYnV0IG9ubHkgdXNlIGEgNjQgS0IgYnVmZmVyCisJLy8gYnVmZmVyIHNpemUgdXNlZCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgKDEgPDwgQ09OVFJPTF9TSElGVCkKKyNkZWZpbmUgU0REUjA5X1JFQURfTUFQX0JVRlNaIDY1NTM2CisKKwlhbGxvY19ibG9ja3MgPSBtaW4obnVtYmxvY2tzLCBTRERSMDlfUkVBRF9NQVBfQlVGU1ogPj4gQ09OVFJPTF9TSElGVCk7CisJYWxsb2NfbGVuID0gKGFsbG9jX2Jsb2NrcyA8PCBDT05UUk9MX1NISUZUKTsKKwlidWZmZXIgPSBrbWFsbG9jKGFsbG9jX2xlbiwgR0ZQX05PSU8pOworCWlmIChidWZmZXIgPT0gTlVMTCkgeworCQlwcmludGsoInNkZHIwOV9yZWFkX21hcDogb3V0IG9mIG1lbW9yeVxuIik7CisJCXJlc3VsdCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCWJ1ZmZlcl9lbmQgPSBidWZmZXIgKyBhbGxvY19sZW47CisKKyN1bmRlZiBTRERSMDlfUkVBRF9NQVBfQlVGU1oKKworCWtmcmVlKGluZm8tPmxiYV90b19wYmEpOworCWtmcmVlKGluZm8tPnBiYV90b19sYmEpOworCWluZm8tPmxiYV90b19wYmEgPSBrbWFsbG9jKG51bWJsb2NrcypzaXplb2YoaW50KSwgR0ZQX05PSU8pOworCWluZm8tPnBiYV90b19sYmEgPSBrbWFsbG9jKG51bWJsb2NrcypzaXplb2YoaW50KSwgR0ZQX05PSU8pOworCisJaWYgKGluZm8tPmxiYV90b19wYmEgPT0gTlVMTCB8fCBpbmZvLT5wYmFfdG9fbGJhID09IE5VTEwpIHsKKwkJcHJpbnRrKCJzZGRyMDlfcmVhZF9tYXA6IG91dCBvZiBtZW1vcnlcbiIpOworCQlyZXN1bHQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1ibG9ja3M7IGkrKykKKwkJaW5mby0+bGJhX3RvX3BiYVtpXSA9IGluZm8tPnBiYV90b19sYmFbaV0gPSBVTkRFRjsKKworCS8qCisJICogRGVmaW5lIGxiYS1wYmEgdHJhbnNsYXRpb24gdGFibGUKKwkgKi8KKworCXB0ciA9IGJ1ZmZlcl9lbmQ7CisJZm9yIChpID0gMDsgaSA8IG51bWJsb2NrczsgaSsrKSB7CisJCXB0ciArPSAoMSA8PCBDT05UUk9MX1NISUZUKTsKKwkJaWYgKHB0ciA+PSBidWZmZXJfZW5kKSB7CisJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisKKwkJCWFkZHJlc3MgPSBpIDw8IChpbmZvLT5wYWdlc2hpZnQgKyBpbmZvLT5ibG9ja3NoaWZ0KTsKKwkJCXJlc3VsdCA9IHNkZHIwOV9yZWFkX2NvbnRyb2woCisJCQkJdXMsIGFkZHJlc3M+PjEsCisJCQkJbWluKGFsbG9jX2Jsb2NrcywgbnVtYmxvY2tzIC0gaSksCisJCQkJYnVmZmVyLCAwKTsKKwkJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJCQlyZXN1bHQgPSAtMTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCQlwdHIgPSBidWZmZXI7CisJCX0KKworCQlpZiAoaSA9PSAwIHx8IGkgPT0gMSkgeworCQkJaW5mby0+cGJhX3RvX2xiYVtpXSA9IFVOVVNBQkxFOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBzcGVjaWFsIFBCQXMgaGF2ZSBjb250cm9sIGZpZWxkIDBeMTYgKi8KKwkJZm9yIChqID0gMDsgaiA8IDE2OyBqKyspCisJCQlpZiAocHRyW2pdICE9IDApCisJCQkJZ290byBub256OworCQlpbmZvLT5wYmFfdG9fbGJhW2ldID0gVU5VU0FCTEU7CisJCXByaW50aygic2RkcjA5OiBQQkEgJWQgaGFzIG5vIGxvZ2ljYWwgbWFwcGluZ1xuIiwgaSk7CisJCWNvbnRpbnVlOworCisJbm9uejoKKwkJLyogdW53cml0dGVuIFBCQXMgaGF2ZSBjb250cm9sIGZpZWxkIEZGXjE2ICovCisJCWZvciAoaiA9IDA7IGogPCAxNjsgaisrKQorCQkJaWYgKHB0cltqXSAhPSAweGZmKQorCQkJCWdvdG8gbm9uZmY7CisJCWNvbnRpbnVlOworCisJbm9uZmY6CisJCS8qIG5vcm1hbCBQQkFzIHN0YXJ0IHdpdGggc2l4IEZGcyAqLworCQlpZiAoaiA8IDYpIHsKKwkJCXByaW50aygic2RkcjA5OiBQQkEgJWQgaGFzIG5vIGxvZ2ljYWwgbWFwcGluZzogIgorCQkJICAgICAgICJyZXNlcnZlZCBhcmVhID0gJTAyWCUwMlglMDJYJTAyWCAiCisJCQkgICAgICAgImRhdGEgc3RhdHVzICUwMlggYmxvY2sgc3RhdHVzICUwMlhcbiIsCisJCQkgICAgICAgaSwgcHRyWzBdLCBwdHJbMV0sIHB0clsyXSwgcHRyWzNdLAorCQkJICAgICAgIHB0cls0XSwgcHRyWzVdKTsKKwkJCWluZm8tPnBiYV90b19sYmFbaV0gPSBVTlVTQUJMRTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKChwdHJbNl0gPj4gNCkgIT0gMHgwMSkgeworCQkJcHJpbnRrKCJzZGRyMDk6IFBCQSAlZCBoYXMgaW52YWxpZCBhZGRyZXNzIGZpZWxkICIKKwkJCSAgICAgICAiJTAyWCUwMlgvJTAyWCUwMlhcbiIsCisJCQkgICAgICAgaSwgcHRyWzZdLCBwdHJbN10sIHB0clsxMV0sIHB0clsxMl0pOworCQkJaW5mby0+cGJhX3RvX2xiYVtpXSA9IFVOVVNBQkxFOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBjaGVjayBldmVuIHBhcml0eSAqLworCQlpZiAocGFyaXR5W3B0cls2XSBeIHB0cls3XV0pIHsKKwkJCXByaW50aygic2RkcjA5OiBCYWQgcGFyaXR5IGluIExCQSBmb3IgYmxvY2sgJWQiCisJCQkgICAgICAgIiAoJTAyWCAlMDJYKVxuIiwgaSwgcHRyWzZdLCBwdHJbN10pOworCQkJaW5mby0+cGJhX3RvX2xiYVtpXSA9IFVOVVNBQkxFOworCQkJY29udGludWU7CisJCX0KKworCQlsYmEgPSBzaG9ydF9wYWNrKHB0cls3XSwgcHRyWzZdKTsKKwkJbGJhID0gKGxiYSAmIDB4MDdGRikgPj4gMTsKKworCQkvKgorCQkgKiBFdmVyeSAxMDI0IHBoeXNpY2FsIGJsb2NrcyAoInpvbmUiKSwgdGhlIExCQSBudW1iZXJzCisJCSAqIGdvIGJhY2sgdG8gemVybywgYnV0IGFyZSB3aXRoaW4gYSBoaWdoZXIgYmxvY2sgb2YgTEJBJ3MuCisJCSAqIEFsc28sIHRoZXJlIGlzIGEgbWF4aW11bSBvZiAxMDAwIExCQSdzIHBlciB6b25lLgorCQkgKiBJbiBvdGhlciB3b3JkcywgaW4gUEJBIDEwMjQtMjA0NyB5b3Ugd2lsbCBmaW5kIExCQSAwLTk5OQorCQkgKiB3aGljaCBhcmUgcmVhbGx5IExCQSAxMDAwLTE5OTkuIFRoaXMgYWxsb3dzIGZvciAyNCBiYWQKKwkJICogb3Igc3BlY2lhbCBwaHlzaWNhbCBibG9ja3MgcGVyIHpvbmUuCisJCSAqLworCisJCWlmIChsYmEgPj0gMTAwMCkgeworCQkJcHJpbnRrKCJzZGRyMDk6IEJhZCBsb3cgTEJBICVkIGZvciBibG9jayAlZFxuIiwKKwkJCSAgICAgICBsYmEsIGkpOworCQkJZ290byBwb3NzaWJseV9lcmFzZTsKKwkJfQorCisJCWxiYSArPSAxMDAwKihpLzB4NDAwKTsKKworCQlpZiAoaW5mby0+bGJhX3RvX3BiYVtsYmFdICE9IFVOREVGKSB7CisJCQlwcmludGsoInNkZHIwOTogTEJBICVkIHNlZW4gZm9yIFBCQSAlZCBhbmQgJWRcbiIsCisJCQkgICAgICAgbGJhLCBpbmZvLT5sYmFfdG9fcGJhW2xiYV0sIGkpOworCQkJZ290byBwb3NzaWJseV9lcmFzZTsKKwkJfQorCisJCWluZm8tPnBiYV90b19sYmFbaV0gPSBsYmE7CisJCWluZm8tPmxiYV90b19wYmFbbGJhXSA9IGk7CisJCWNvbnRpbnVlOworCisJcG9zc2libHlfZXJhc2U6CisJCWlmIChlcmFzZV9iYWRfbGJhX2VudHJpZXMpIHsKKwkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKworCQkJYWRkcmVzcyA9IChpIDw8IChpbmZvLT5wYWdlc2hpZnQgKyBpbmZvLT5ibG9ja3NoaWZ0KSk7CisJCQlzZGRyMDlfZXJhc2UodXMsIGFkZHJlc3M+PjEpOworCQkJaW5mby0+cGJhX3RvX2xiYVtpXSA9IFVOREVGOworCQl9IGVsc2UKKwkJCWluZm8tPnBiYV90b19sYmFbaV0gPSBVTlVTQUJMRTsKKwl9CisKKwkvKgorCSAqIEFwcHJveGltYXRlIGNhcGFjaXR5LiBUaGlzIGlzIG5vdCBlbnRpcmVseSBjb3JyZWN0IHlldCwKKwkgKiBzaW5jZSBhIHpvbmUgd2l0aCBsZXNzIHRoYW4gMTAwMCB1c2FibGUgcGFnZXMgbGVhZHMgdG8KKwkgKiBtaXNzaW5nIExCQXMuIEVzcGVjaWFsbHkgaWYgaXQgaXMgdGhlIGxhc3Qgem9uZSwgc29tZQorCSAqIExCQXMgY2FuIGJlIHBhc3QgY2FwYWNpdHkuCisJICovCisJbGJhY3QgPSAwOworCWZvciAoaSA9IDA7IGkgPCBudW1ibG9ja3M7IGkgKz0gMTAyNCkgeworCQlpbnQgY3QgPSAwOworCisJCWZvciAoaiA9IDA7IGogPCAxMDI0ICYmIGkraiA8IG51bWJsb2NrczsgaisrKSB7CisJCQlpZiAoaW5mby0+cGJhX3RvX2xiYVtpK2pdICE9IFVOVVNBQkxFKSB7CisJCQkJaWYgKGN0ID49IDEwMDApCisJCQkJCWluZm8tPnBiYV90b19sYmFbaStqXSA9IFNQQVJFOworCQkJCWVsc2UKKwkJCQkJY3QrKzsKKwkJCX0KKwkJfQorCQlsYmFjdCArPSBjdDsKKwl9CisJaW5mby0+bGJhY3QgPSBsYmFjdDsKKwlVU19ERUJVR1AoIkZvdW5kICVkIExCQSdzXG4iLCBsYmFjdCk7CisJcmVzdWx0ID0gMDsKKworIGRvbmU6CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCWtmcmVlKGluZm8tPmxiYV90b19wYmEpOworCQlrZnJlZShpbmZvLT5wYmFfdG9fbGJhKTsKKwkJaW5mby0+bGJhX3RvX3BiYSA9IE5VTEw7CisJCWluZm8tPnBiYV90b19sYmEgPSBOVUxMOworCX0KKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitzZGRyMDlfY2FyZF9pbmZvX2Rlc3RydWN0b3Iodm9pZCAqZXh0cmEpIHsKKwlzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqKWV4dHJhOworCisJaWYgKCFpbmZvKQorCQlyZXR1cm47CisKKwlrZnJlZShpbmZvLT5sYmFfdG9fcGJhKTsKKwlrZnJlZShpbmZvLT5wYmFfdG9fbGJhKTsKK30KKworc3RhdGljIHZvaWQKK3NkZHIwOV9pbml0X2NhcmRfaW5mbyhzdHJ1Y3QgdXNfZGF0YSAqdXMpIHsKKwlpZiAoIXVzLT5leHRyYSkgeworCQl1cy0+ZXh0cmEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyksIEdGUF9OT0lPKTsKKwkJaWYgKHVzLT5leHRyYSkgeworCQkJbWVtc2V0KHVzLT5leHRyYSwgMCwgc2l6ZW9mKHN0cnVjdCBzZGRyMDlfY2FyZF9pbmZvKSk7CisJCQl1cy0+ZXh0cmFfZGVzdHJ1Y3RvciA9IHNkZHIwOV9jYXJkX2luZm9fZGVzdHJ1Y3RvcjsKKwkJfQorCX0KK30KKworLyoKKyAqIFRoaXMgaXMgbmVlZGVkIGF0IGEgdmVyeSBlYXJseSBzdGFnZS4gSWYgdGhpcyBpcyBub3QgbGlzdGVkIGluIHRoZQorICogdW51c3VhbCBkZXZpY2VzIGxpc3QgYnV0IGNhbGxlZCBmcm9tIGhlcmUgdGhlbiBMVU4gMCBvZiB0aGUgY29tYm8gcmVhZGVyCisgKiBpcyBub3QgcmVjb2duaXplZC4gQnV0IEkgZG8gbm90IGtub3cgd2hhdCBwcmVjaXNlbHkgdGhlc2UgY2FsbHMgZG8uCisgKi8KK2ludAorc2RkcjA5X2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKSB7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXMtPmlvYnVmOworCisJcmVzdWx0ID0gc2RkcjA5X3NlbmRfY29tbWFuZCh1cywgMHgwMSwgVVNCX0RJUl9JTiwgZGF0YSwgMik7CisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCQlVU19ERUJVR1AoInNkZHIwOV9pbml0OiBzZW5kX2NvbW1hbmQgZmFpbHNcbiIpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCVVTX0RFQlVHUCgiU0REUjA5aW5pdDogJTAyWCAlMDJYXG4iLCBkYXRhWzBdLCBkYXRhWzFdKTsKKwkvLyBnZXQgMDcgMDIKKworCXJlc3VsdCA9IHNkZHIwOV9zZW5kX2NvbW1hbmQodXMsIDB4MDgsIFVTQl9ESVJfSU4sIGRhdGEsIDIpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJVVNfREVCVUdQKCJzZGRyMDlfaW5pdDogMm5kIHNlbmRfY29tbWFuZCBmYWlsc1xuIik7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJVVNfREVCVUdQKCJTRERSMDlpbml0OiAlMDJYICUwMlhcbiIsIGRhdGFbMF0sIGRhdGFbMV0pOworCS8vIGdldCAwNyAwMAorCisJcmVzdWx0ID0gc2RkcjA5X3JlcXVlc3Rfc2Vuc2UodXMsIGRhdGEsIDE4KTsKKwlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EICYmIGRhdGFbMl0gIT0gMCkgeworCQlpbnQgajsKKwkJZm9yIChqPTA7IGo8MTg7IGorKykKKwkJCXByaW50aygiICUwMlgiLCBkYXRhW2pdKTsKKwkJcHJpbnRrKCJcbiIpOworCQkvLyBnZXQgNzAgMDAgMDAgMDAgMDAgMDAgMDAgKiAwMCAwMCAwMCAwMCAwMCAwMAorCQkvLyA3MDogY3VycmVudCBjb21tYW5kCisJCS8vIHNlbnNlIGtleSAwLCBzZW5zZSBjb2RlIDAsIGV4dGQgc2Vuc2UgY29kZSAwCisJCS8vIGFkZGl0aW9uYWwgdHJhbnNmZXIgbGVuZ3RoICogPSBzaXplb2YoZGF0YSkgLSA3CisJCS8vIE9yOiA3MCAwMCAwNiAwMCAwMCAwMCAwMCAwYiAwMCAwMCAwMCAwMCAyOCAwMCAwMCAwMCAwMCAwMAorCQkvLyBzZW5zZSBrZXkgMDYsIHNlbnNlIGNvZGUgMjg6IHVuaXQgYXR0ZW50aW9uLAorCQkvLyBub3QgcmVhZHkgdG8gcmVhZHkgdHJhbnNpdGlvbgorCX0KKworCS8vIHRlc3QgdW5pdCByZWFkeQorCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOwkJLyogbm90IHJlc3VsdCAqLworfQorCisvKgorICogVHJhbnNwb3J0IGZvciB0aGUgU2FuZGlzayBTRERSLTA5CisgKi8KK2ludCBzZGRyMDlfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQoreworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHNlbnNla2V5ID0gMCwgc2Vuc2Vjb2RlID0gMDsKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBoYXZlZmFrZXNlbnNlID0gMDsKKwlpbnQgcmVzdWx0LCBpOworCXVuc2lnbmVkIGNoYXIgKnB0ciA9IHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBsb25nIGNhcGFjaXR5OworCXVuc2lnbmVkIGludCBwYWdlLCBwYWdlczsKKworCXN0cnVjdCBzZGRyMDlfY2FyZF9pbmZvICppbmZvOworCisJc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5xdWlyeV9yZXNwb25zZVs4XSA9IHsKKwkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMiwgMHgxRiwgMHgwMCwgMHgwMCwgMHgwMAorCX07CisKKwkvKiBub3RlOiBubyBibG9jayBkZXNjcmlwdG9yIHN1cHBvcnQgKi8KKwlzdGF0aWMgdW5zaWduZWQgY2hhciBtb2RlX3BhZ2VfMDFbMTldID0geworCQkweDAwLCAweDBGLCAweDAwLCAweDAsIDB4MCwgMHgwLCAweDAwLAorCQkweDAxLCAweDBBLAorCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCisJfTsKKworCWluZm8gPSAoc3RydWN0IHNkZHIwOV9jYXJkX2luZm8gKil1cy0+ZXh0cmE7CisJaWYgKCFpbmZvKSB7CisJCW5hbmRfaW5pdF9lY2MoKTsKKwkJc2RkcjA5X2luaXRfY2FyZF9pbmZvKHVzKTsKKwkJaW5mbyA9IChzdHJ1Y3Qgc2RkcjA5X2NhcmRfaW5mbyAqKXVzLT5leHRyYTsKKwkJaWYgKCFpbmZvKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UgJiYgaGF2ZWZha2VzZW5zZSkgeworCQkvKiBmb3IgYSBmYWtlZCBjb21tYW5kLCB3ZSBoYXZlIHRvIGZvbGxvdyB3aXRoIGEgZmFrZWQgc2Vuc2UgKi8KKwkJbWVtc2V0KHB0ciwgMCwgMTgpOworCQlwdHJbMF0gPSAweDcwOworCQlwdHJbMl0gPSBzZW5zZWtleTsKKwkJcHRyWzddID0gMTE7CisJCXB0clsxMl0gPSBzZW5zZWNvZGU7CisJCXVzYl9zdG9yX3NldF94ZmVyX2J1ZihwdHIsIDE4LCBzcmIpOworCQlzZW5zZWtleSA9IHNlbnNlY29kZSA9IGhhdmVmYWtlc2Vuc2UgPSAwOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJfQorCisJaGF2ZWZha2VzZW5zZSA9IDE7CisKKwkvKiBEdW1teSB1cCBhIHJlc3BvbnNlIGZvciBJTlFVSVJZIHNpbmNlIFNERFIwOSBkb2Vzbid0CisJICAgcmVzcG9uZCB0byBJTlFVSVJZIGNvbW1hbmRzICovCisKKwlpZiAoc3JiLT5jbW5kWzBdID09IElOUVVJUlkpIHsKKwkJbWVtY3B5KHB0ciwgaW5xdWlyeV9yZXNwb25zZSwgOCk7CisJCWZpbGxfaW5xdWlyeV9yZXNwb25zZSh1cywgcHRyLCAzNik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFQURfQ0FQQUNJVFkpIHsKKwkJc3RydWN0IG5hbmRfZmxhc2hfZGV2ICpjYXJkaW5mbzsKKworCQlzZGRyMDlfZ2V0X3dwKHVzLCBpbmZvKTsJLyogcmVhZCBXUCBiaXQgKi8KKworCQljYXJkaW5mbyA9IHNkZHIwOV9nZXRfY2FyZGluZm8odXMsIGluZm8tPmZsYWdzKTsKKwkJaWYgKCFjYXJkaW5mbykgeworCQkJLyogcHJvYmFibHkgbm8gbWVkaWEgKi8KKwkJaW5pdF9lcnJvcjoKKwkJCXNlbnNla2V5ID0gMHgwMjsJLyogbm90IHJlYWR5ICovCisJCQlzZW5zZWNvZGUgPSAweDNhOwkvKiBtZWRpdW0gbm90IHByZXNlbnQgKi8KKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQl9CisKKwkJaW5mby0+Y2FwYWNpdHkgPSAoMSA8PCBjYXJkaW5mby0+Y2hpcHNoaWZ0KTsKKwkJaW5mby0+cGFnZXNoaWZ0ID0gY2FyZGluZm8tPnBhZ2VzaGlmdDsKKwkJaW5mby0+cGFnZXNpemUgPSAoMSA8PCBpbmZvLT5wYWdlc2hpZnQpOworCQlpbmZvLT5ibG9ja3NoaWZ0ID0gY2FyZGluZm8tPmJsb2Nrc2hpZnQ7CisJCWluZm8tPmJsb2Nrc2l6ZSA9ICgxIDw8IGluZm8tPmJsb2Nrc2hpZnQpOworCQlpbmZvLT5ibG9ja21hc2sgPSBpbmZvLT5ibG9ja3NpemUgLSAxOworCisJCS8vIG1hcCBpbml0aWFsaXphdGlvbiwgbXVzdCBmb2xsb3cgZ2V0X2NhcmRpbmZvKCkKKwkJaWYgKHNkZHIwOV9yZWFkX21hcCh1cykpIHsKKwkJCS8qIHByb2JhYmx5IG91dCBvZiBtZW1vcnkgKi8KKwkJCWdvdG8gaW5pdF9lcnJvcjsKKwkJfQorCisJCS8vIFJlcG9ydCBjYXBhY2l0eQorCisJCWNhcGFjaXR5ID0gKGluZm8tPmxiYWN0IDw8IGluZm8tPmJsb2Nrc2hpZnQpIC0gMTsKKworCQkoKF9fYmUzMiAqKSBwdHIpWzBdID0gY3B1X3RvX2JlMzIoY2FwYWNpdHkpOworCisJCS8vIFJlcG9ydCBwYWdlIHNpemUKKworCQkoKF9fYmUzMiAqKSBwdHIpWzFdID0gY3B1X3RvX2JlMzIoaW5mby0+cGFnZXNpemUpOworCQl1c2Jfc3Rvcl9zZXRfeGZlcl9idWYocHRyLCA4LCBzcmIpOworCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IE1PREVfU0VOU0VfMTApIHsKKwkJaW50IG1vZGVwYWdlID0gKHNyYi0+Y21uZFsyXSAmIDB4M0YpOworCisJCS8qIFRoZXkgYXNrIGZvciB0aGUgUmVhZC9Xcml0ZSBlcnJvciByZWNvdmVyeSBwYWdlLAorCQkgICBvciBmb3IgYWxsIHBhZ2VzLiAqLworCQkvKiAlJSBXZSBzaG91bGQgY2hlY2sgREJEICUlICovCisJCWlmIChtb2RlcGFnZSA9PSAweDAxIHx8IG1vZGVwYWdlID09IDB4M0YpIHsKKwkJCVVTX0RFQlVHUCgiU0REUjA5OiBEdW1teSB1cCByZXF1ZXN0IGZvciAiCisJCQkJICAibW9kZSBwYWdlIDB4JXhcbiIsIG1vZGVwYWdlKTsKKworCQkJbWVtY3B5KHB0ciwgbW9kZV9wYWdlXzAxLCBzaXplb2YobW9kZV9wYWdlXzAxKSk7CisJCQkoKF9fYmUxNiopcHRyKVswXSA9IGNwdV90b19iZTE2KHNpemVvZihtb2RlX3BhZ2VfMDEpIC0gMik7CisJCQlwdHJbM10gPSAoaW5mby0+ZmxhZ3MgJiBTRERSMDlfV1ApID8gMHg4MCA6IDA7CisJCQl1c2Jfc3Rvcl9zZXRfeGZlcl9idWYocHRyLCBzaXplb2YobW9kZV9wYWdlXzAxKSwgc3JiKTsKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwkJfQorCisJCXNlbnNla2V5ID0gMHgwNTsJLyogaWxsZWdhbCByZXF1ZXN0ICovCisJCXNlbnNlY29kZSA9IDB4MjQ7CS8qIGludmFsaWQgZmllbGQgaW4gQ0RCICovCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gQUxMT1dfTUVESVVNX1JFTU9WQUwpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKworCWhhdmVmYWtlc2Vuc2UgPSAwOworCisJaWYgKHNyYi0+Y21uZFswXSA9PSBSRUFEXzEwKSB7CisKKwkJcGFnZSA9IHNob3J0X3BhY2soc3JiLT5jbW5kWzNdLCBzcmItPmNtbmRbMl0pOworCQlwYWdlIDw8PSAxNjsKKwkJcGFnZSB8PSBzaG9ydF9wYWNrKHNyYi0+Y21uZFs1XSwgc3JiLT5jbW5kWzRdKTsKKwkJcGFnZXMgPSBzaG9ydF9wYWNrKHNyYi0+Y21uZFs4XSwgc3JiLT5jbW5kWzddKTsKKworCQlVU19ERUJVR1AoIlJFQURfMTA6IHJlYWQgcGFnZSAlZCBwYWdlY3QgJWRcbiIsCisJCQkgIHBhZ2UsIHBhZ2VzKTsKKworCQlyZXR1cm4gc2RkcjA5X3JlYWRfZGF0YSh1cywgcGFnZSwgcGFnZXMpOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gV1JJVEVfMTApIHsKKworCQlwYWdlID0gc2hvcnRfcGFjayhzcmItPmNtbmRbM10sIHNyYi0+Y21uZFsyXSk7CisJCXBhZ2UgPDw9IDE2OworCQlwYWdlIHw9IHNob3J0X3BhY2soc3JiLT5jbW5kWzVdLCBzcmItPmNtbmRbNF0pOworCQlwYWdlcyA9IHNob3J0X3BhY2soc3JiLT5jbW5kWzhdLCBzcmItPmNtbmRbN10pOworCisJCVVTX0RFQlVHUCgiV1JJVEVfMTA6IHdyaXRlIHBhZ2UgJWQgcGFnZWN0ICVkXG4iLAorCQkJICBwYWdlLCBwYWdlcyk7CisKKwkJcmV0dXJuIHNkZHIwOV93cml0ZV9kYXRhKHVzLCBwYWdlLCBwYWdlcyk7CisJfQorCisJLyogY2F0Y2gtYWxsIGZvciBhbGwgb3RoZXIgY29tbWFuZHMsIGV4Y2VwdAorCSAqIHBhc3MgVEVTVF9VTklUX1JFQURZIGFuZCBSRVFVRVNUX1NFTlNFIHRocm91Z2gKKwkgKi8KKwlpZiAoc3JiLT5jbW5kWzBdICE9IFRFU1RfVU5JVF9SRUFEWSAmJgorCSAgICBzcmItPmNtbmRbMF0gIT0gUkVRVUVTVF9TRU5TRSkgeworCQlzZW5zZWtleSA9IDB4MDU7CS8qIGlsbGVnYWwgcmVxdWVzdCAqLworCQlzZW5zZWNvZGUgPSAweDIwOwkvKiBpbnZhbGlkIGNvbW1hbmQgKi8KKwkJaGF2ZWZha2VzZW5zZSA9IDE7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCX0KKworCWZvciAoOyBzcmItPmNtZF9sZW48MTI7IHNyYi0+Y21kX2xlbisrKQorCQlzcmItPmNtbmRbc3JiLT5jbWRfbGVuXSA9IDA7CisKKwlzcmItPmNtbmRbMV0gPSBMVU5CSVRTOworCisJcHRyWzBdID0gMDsKKwlmb3IgKGk9MDsgaTwxMjsgaSsrKQorCQlzcHJpbnRmKHB0citzdHJsZW4ocHRyKSwgIiUwMlggIiwgc3JiLT5jbW5kW2ldKTsKKworCVVTX0RFQlVHUCgiU0REUjA5OiBTZW5kIGNvbnRyb2wgZm9yIGNvbW1hbmQgJXNcbiIsIHB0cik7CisKKwlyZXN1bHQgPSBzZGRyMDlfc2VuZF9zY3NpX2NvbW1hbmQodXMsIHNyYi0+Y21uZCwgMTIpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJVVNfREVCVUdQKCJzZGRyMDlfdHJhbnNwb3J0OiBzZGRyMDlfc2VuZF9zY3NpX2NvbW1hbmQgIgorCQkJICAicmV0dXJucyAlZFxuIiwgcmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlpZiAoc3JiLT5yZXF1ZXN0X2J1ZmZsZW4gPT0gMCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCisJaWYgKHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSB8fAorCSAgICBzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkgeworCQl1bnNpZ25lZCBpbnQgcGlwZSA9IChzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCisJCQkJPyB1cy0+c2VuZF9idWxrX3BpcGUgOiB1cy0+cmVjdl9idWxrX3BpcGU7CisKKwkJVVNfREVCVUdQKCJTRERSMDk6ICVzICVkIGJ5dGVzXG4iLAorCQkJICAoc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKSA/CisJCQkgICJzZW5kaW5nIiA6ICJyZWNlaXZpbmciLAorCQkJICBzcmItPnJlcXVlc3RfYnVmZmxlbik7CisKKwkJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9zZyh1cywgcGlwZSwKKwkJCQkJc3JiLT5yZXF1ZXN0X2J1ZmZlciwKKwkJCQkJc3JiLT5yZXF1ZXN0X2J1ZmZsZW4sCisJCQkJCXNyYi0+dXNlX3NnLCAmc3JiLT5yZXNpZCk7CisKKwkJcmV0dXJuIChyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9HT09EID8KKwkJCVVTQl9TVE9SX1RSQU5TUE9SVF9HT09EIDogVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SKTsKKwl9IAorCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHIwOS5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWQ3OGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyMDkuaApAQCAtMCwwICsxLDQ4IEBACisvKiBEcml2ZXIgZm9yIFNhbkRpc2sgU0REUi0wOSBTbWFydE1lZGlhIHJlYWRlcgorICogSGVhZGVyIEZpbGUKKyAqCisgKiAkSWQ6IHNkZHIwOS5oLHYgMS41IDIwMDAvMDgvMjUgMDA6MTM6NTEgbWRoYXJtIEV4cCAkCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAyMDAwIFJvYmVydCBCYXJ1Y2ggKGF1dG9waGlsZUBkb2wubmV0KQorICogICAoYykgMjAwMiBBbmRyaWVzIEJyb3V3ZXIgKGFlYkBjd2kubmwpCisgKgorICogU2VlIHNkZHIwOS5jIGZvciBtb3JlIGV4cGxhbmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfVVNCX1NIVVRUTEVfRVVTQl9TRERSMDlfSAorI2RlZmluZSBfVVNCX1NIVVRUTEVfRVVTQl9TRERSMDlfSAorCisvKiBTYW5kaXNrIFNERFItMDkgc3R1ZmYgKi8KKworZXh0ZXJuIGludCBzZGRyMDlfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKKworc3RydWN0IHNkZHIwOV9jYXJkX2luZm8geworCXVuc2lnbmVkIGxvbmcJY2FwYWNpdHk7CS8qIFNpemUgb2YgY2FyZCBpbiBieXRlcyAqLworCWludAkJcGFnZXNpemU7CS8qIFNpemUgb2YgcGFnZSBpbiBieXRlcyAqLworCWludAkJcGFnZXNoaWZ0OwkvKiBsb2cyIG9mIHBhZ2VzaXplICovCisJaW50CQlibG9ja3NpemU7CS8qIFNpemUgb2YgYmxvY2sgaW4gcGFnZXMgKi8KKwlpbnQJCWJsb2Nrc2hpZnQ7CS8qIGxvZzIgb2YgYmxvY2tzaXplICovCisJaW50CQlibG9ja21hc2s7CS8qIDJeYmxvY2tzaGlmdCAtIDEgKi8KKwlpbnQJCSpsYmFfdG9fcGJhOwkvKiBsb2dpY2FsIHRvIHBoeXNpY2FsIG1hcCAqLworCWludAkJKnBiYV90b19sYmE7CS8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgbWFwICovCisJaW50CQlsYmFjdDsJCS8qIG51bWJlciBvZiBhdmFpbGFibGUgcGFnZXMgKi8KKwlpbnQJCWZsYWdzOworI2RlZmluZQlTRERSMDlfV1AJMQkJLyogd3JpdGUgcHJvdGVjdGVkICovCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2RkcjU1LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOWNhMTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5jCkBAIC0wLDAgKzEsOTM4IEBACisvKiBEcml2ZXIgZm9yIFNhbkRpc2sgU0REUi01NSBTbWFydE1lZGlhIHJlYWRlcgorICoKKyAqICRJZDokCisgKgorICogU0REUjU1IGRyaXZlciB2MC4xOgorICoKKyAqIEZpcnN0IHJlbGVhc2UKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDIwMDIgU2ltb24gTXVudG9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisKKyNpbmNsdWRlICJ1c2IuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAic2RkcjU1LmgiCisKKworI2RlZmluZSBzaG9ydF9wYWNrKGxzYixtc2IpICggKCh1MTYpKGxzYikpIHwgKCAoKHUxNikobXNiKSk8PDggKSApCisjZGVmaW5lIExTQl9vZihzKSAoKHMpJjB4RkYpCisjZGVmaW5lIE1TQl9vZihzKSAoKHMpPj44KQorI2RlZmluZSBQQUdFU0laRSAgNTEyCisKKyNkZWZpbmUgc2V0X3NlbnNlX2luZm8oc2ssIGFzYywgYXNjcSkJXAorICAgIGRvIHsJCQkJXAorCWluZm8tPnNlbnNlX2RhdGFbMl0gPSBzazsJXAorCWluZm8tPnNlbnNlX2RhdGFbMTJdID0gYXNjOwlcCisJaW5mby0+c2Vuc2VfZGF0YVsxM10gPSBhc2NxOwlcCisJfSB3aGlsZSAoMCkKKworCitzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbyB7CisJdW5zaWduZWQgbG9uZwljYXBhY2l0eTsJLyogU2l6ZSBvZiBjYXJkIGluIGJ5dGVzICovCisJaW50CQltYXhfbG9nX2Jsa3M7CS8qIG1heGltdW0gbnVtYmVyIG9mIGxvZ2ljYWwgYmxvY2tzICovCisJaW50CQlwYWdlc2hpZnQ7CS8qIGxvZzIgb2YgcGFnZXNpemUgKi8KKwlpbnQJCXNtYWxscGFnZXNoaWZ0OwkvKiAxIGlmIHBhZ2VzaXplID09IDI1NiAqLworCWludAkJYmxvY2tzaXplOwkvKiBTaXplIG9mIGJsb2NrIGluIHBhZ2VzICovCisJaW50CQlibG9ja3NoaWZ0OwkvKiBsb2cyIG9mIGJsb2Nrc2l6ZSAqLworCWludAkJYmxvY2ttYXNrOwkvKiAyXmJsb2Nrc2hpZnQgLSAxICovCisJaW50CQlyZWFkX29ubHk7CS8qIG5vbiB6ZXJvIGlmIGNhcmQgaXMgd3JpdGUgcHJvdGVjdGVkICovCisJaW50CQlmb3JjZV9yZWFkX29ubHk7CS8qIG5vbiB6ZXJvIGlmIHdlIGZpbmQgYSBtYXAgZXJyb3IqLworCWludAkJKmxiYV90b19wYmE7CS8qIGxvZ2ljYWwgdG8gcGh5c2ljYWwgbWFwICovCisJaW50CQkqcGJhX3RvX2xiYTsJLyogcGh5c2ljYWwgdG8gbG9naWNhbCBtYXAgKi8KKwlpbnQJCWZhdGFsX2Vycm9yOwkvKiBzZXQgaWYgd2UgZGV0ZWN0IHNvbWV0aGluZyBuYXN0eSAqLworCXVuc2lnbmVkIGxvbmcgCWxhc3RfYWNjZXNzOwkvKiBudW1iZXIgb2YgamlmZmllcyBzaW5jZSB3ZSBsYXN0IHRhbGtlZCB0byBkZXZpY2UgKi8KKwl1bnNpZ25lZCBjaGFyICAgc2Vuc2VfZGF0YVsxOF07Cit9OworCisKKyNkZWZpbmUgTk9UX0FMTE9DQVRFRAkJMHhmZmZmZmZmZgorI2RlZmluZSBCQURfQkxPQ0sJCTB4ZmZmZgorI2RlZmluZSBDSVNfQkxPQ0sJCTB4NDAwCisjZGVmaW5lIFVOVVNFRF9CTE9DSwkJMHgzZmYKKworc3RhdGljIGludAorc2RkcjU1X2J1bGtfdHJhbnNwb3J0KHN0cnVjdCB1c19kYXRhICp1cywgaW50IGRpcmVjdGlvbiwKKwkJICAgICAgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikgeworCXN0cnVjdCBzZGRyNTVfY2FyZF9pbmZvICppbmZvID0gKHN0cnVjdCBzZGRyNTVfY2FyZF9pbmZvICopdXMtPmV4dHJhOworCXVuc2lnbmVkIGludCBwaXBlID0gKGRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpID8KKwkJCXVzLT5yZWN2X2J1bGtfcGlwZSA6IHVzLT5zZW5kX2J1bGtfcGlwZTsKKworCWlmICghbGVuKQorCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9HT09EOworCWluZm8tPmxhc3RfYWNjZXNzID0gamlmZmllczsKKwlyZXR1cm4gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHBpcGUsIGRhdGEsIGxlbiwgTlVMTCk7Cit9CisKKy8qIGNoZWNrIGlmIGNhcmQgaW5zZXJ0ZWQsIGlmIHRoZXJlIGlzLCB1cGRhdGUgcmVhZF9vbmx5IHN0YXR1cworICogcmV0dXJuIG5vbiB6ZXJvIGlmIG5vIGNhcmQKKyAqLworCitzdGF0aWMgaW50IHNkZHI1NV9zdGF0dXMoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBjaGFyICpzdGF0dXMgPSB1cy0+aW9idWY7CisJc3RydWN0IHNkZHI1NV9jYXJkX2luZm8gKmluZm8gPSAoc3RydWN0IHNkZHI1NV9jYXJkX2luZm8gKil1cy0+ZXh0cmE7CisKKwkvKiBzZW5kIGNvbW1hbmQgKi8KKwltZW1zZXQoY29tbWFuZCwgMCwgOCk7CisJY29tbWFuZFs1XSA9IDB4QjA7CisJY29tbWFuZFs3XSA9IDB4ODA7CisJcmVzdWx0ID0gc2RkcjU1X2J1bGtfdHJhbnNwb3J0KHVzLAorCQlETUFfVE9fREVWSUNFLCBjb21tYW5kLCA4KTsKKworCVVTX0RFQlVHUCgiUmVzdWx0IGZvciBzZW5kX2NvbW1hbmQgaW4gc3RhdHVzICVkXG4iLAorCQlyZXN1bHQpOworCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJc2V0X3NlbnNlX2luZm8gKDQsIDAsIDApOwkvKiBoYXJkd2FyZSBlcnJvciAqLworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCXJlc3VsdCA9IHNkZHI1NV9idWxrX3RyYW5zcG9ydCh1cywKKwkJRE1BX0ZST01fREVWSUNFLCBzdGF0dXMsCTQpOworCisJLyogZXhwZWN0IHRvIGdldCBzaG9ydCB0cmFuc2ZlciBpZiBubyBjYXJkIGZpdHRlZCAqLworCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9TSE9SVCB8fCByZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9TVEFMTEVEKSB7CisJCS8qIGhhZCBhIHNob3J0IHRyYW5zZmVyLCBubyBjYXJkIGluc2VydGVkLCBmcmVlIG1hcCBtZW1vcnkgKi8KKwkJaWYgKGluZm8tPmxiYV90b19wYmEpCisJCQlrZnJlZShpbmZvLT5sYmFfdG9fcGJhKTsKKwkJaWYgKGluZm8tPnBiYV90b19sYmEpCisJCQlrZnJlZShpbmZvLT5wYmFfdG9fbGJhKTsKKwkJaW5mby0+bGJhX3RvX3BiYSA9IE5VTEw7CisJCWluZm8tPnBiYV90b19sYmEgPSBOVUxMOworCisJCWluZm8tPmZhdGFsX2Vycm9yID0gMDsKKwkJaW5mby0+Zm9yY2VfcmVhZF9vbmx5ID0gMDsKKworCQlzZXRfc2Vuc2VfaW5mbyAoMiwgMHgzYSwgMCk7CS8qIG5vdCByZWFkeSwgbWVkaXVtIG5vdCBwcmVzZW50ICovCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCX0KKworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCXNldF9zZW5zZV9pbmZvICg0LCAwLCAwKTsJLyogaGFyZHdhcmUgZXJyb3IgKi8KKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJfQorCQorCS8qIGNoZWNrIHdyaXRlIHByb3RlY3Qgc3RhdHVzICovCisJaW5mby0+cmVhZF9vbmx5ID0gKHN0YXR1c1swXSAmIDB4MjApOworCisJLyogbm93IHJlYWQgc3RhdHVzICovCisJcmVzdWx0ID0gc2RkcjU1X2J1bGtfdHJhbnNwb3J0KHVzLAorCQlETUFfRlJPTV9ERVZJQ0UsIHN0YXR1cywJMik7CisKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQlzZXRfc2Vuc2VfaW5mbyAoNCwgMCwgMCk7CS8qIGhhcmR3YXJlIGVycm9yICovCisJfQorCisJcmV0dXJuIChyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9HT09EID8KKwkJCVVTQl9TVE9SX1RSQU5TUE9SVF9HT09EIDogVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRCk7Cit9CisKKworc3RhdGljIGludCBzZGRyNTVfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywKKwkJdW5zaWduZWQgaW50IGxiYSwKKwkJdW5zaWduZWQgaW50IHBhZ2UsCisJCXVuc2lnbmVkIHNob3J0IHNlY3RvcnMpIHsKKworCWludCByZXN1bHQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCXVuc2lnbmVkIGNoYXIgKnN0YXR1cyA9IHVzLT5pb2J1ZjsKKwlzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbyAqKXVzLT5leHRyYTsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisKKwl1bnNpZ25lZCBpbnQgcGJhOworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKworCXVuc2lnbmVkIHNob3J0IHBhZ2VzOworCXVuc2lnbmVkIGludCBsZW4sIGluZGV4LCBvZmZzZXQ7CisKKwkvLyBTaW5jZSB3ZSBvbmx5IHJlYWQgaW4gb25lIGJsb2NrIGF0IGEgdGltZSwgd2UgaGF2ZSB0byBjcmVhdGUKKwkvLyBhIGJvdW5jZSBidWZmZXIgYW5kIG1vdmUgdGhlIGRhdGEgYSBwaWVjZSBhdCBhIHRpbWUgYmV0d2VlbiB0aGUKKwkvLyBib3VuY2UgYnVmZmVyIGFuZCB0aGUgYWN0dWFsIHRyYW5zZmVyIGJ1ZmZlci4KKworCWxlbiA9IG1pbigodW5zaWduZWQgaW50KSBzZWN0b3JzLCAodW5zaWduZWQgaW50KSBpbmZvLT5ibG9ja3NpemUgPj4KKwkJCWluZm8tPnNtYWxscGFnZXNoaWZ0KSAqIFBBR0VTSVpFOworCWJ1ZmZlciA9IGttYWxsb2MobGVuLCBHRlBfTk9JTyk7CisJaWYgKGJ1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOyAvKiBvdXQgb2YgbWVtb3J5ICovCisJaW5kZXggPSBvZmZzZXQgPSAwOworCisJd2hpbGUgKHNlY3RvcnM+MCkgeworCisJCS8qIGhhdmUgd2UgZ290IHRvIGVuZD8gKi8KKwkJaWYgKGxiYSA+PSBpbmZvLT5tYXhfbG9nX2Jsa3MpCisJCQlicmVhazsKKworCQlwYmEgPSBpbmZvLT5sYmFfdG9fcGJhW2xiYV07CisKKwkJLy8gUmVhZCBhcyBtYW55IHNlY3RvcnMgYXMgcG9zc2libGUgaW4gdGhpcyBibG9jaworCisJCXBhZ2VzID0gbWluKCh1bnNpZ25lZCBpbnQpIHNlY3RvcnMgPDwgaW5mby0+c21hbGxwYWdlc2hpZnQsCisJCQkJaW5mby0+YmxvY2tzaXplIC0gcGFnZSk7CisJCWxlbiA9IHBhZ2VzIDw8IGluZm8tPnBhZ2VzaGlmdDsKKworCQlVU19ERUJVR1AoIlJlYWQgJTAyWCBwYWdlcywgZnJvbSBQQkEgJTA0WCIKKwkJCSIgKExCQSAlMDRYKSBwYWdlICUwMlhcbiIsCisJCQlwYWdlcywgcGJhLCBsYmEsIHBhZ2UpOworCisJCWlmIChwYmEgPT0gTk9UX0FMTE9DQVRFRCkgeworCQkJLyogbm8gcGJhIGZvciB0aGlzIGxiYSwgZmlsbCB3aXRoIHplcm9lcyAqLworCQkJbWVtc2V0IChidWZmZXIsIDAsIGxlbik7CisJCX0gZWxzZSB7CisKKwkJCWFkZHJlc3MgPSAocGJhIDw8IGluZm8tPmJsb2Nrc2hpZnQpICsgcGFnZTsKKworCQkJY29tbWFuZFswXSA9IDA7CisJCQljb21tYW5kWzFdID0gTFNCX29mKGFkZHJlc3M+PjE2KTsKKwkJCWNvbW1hbmRbMl0gPSBMU0Jfb2YoYWRkcmVzcz4+OCk7CisJCQljb21tYW5kWzNdID0gTFNCX29mKGFkZHJlc3MpOworCisJCQljb21tYW5kWzRdID0gMDsKKwkJCWNvbW1hbmRbNV0gPSAweEIwOworCQkJY29tbWFuZFs2XSA9IExTQl9vZihwYWdlcyA8PCAoMSAtIGluZm8tPnNtYWxscGFnZXNoaWZ0KSk7CisJCQljb21tYW5kWzddID0gMHg4NTsKKworCQkJLyogc2VuZCBjb21tYW5kICovCisJCQlyZXN1bHQgPSBzZGRyNTVfYnVsa190cmFuc3BvcnQodXMsCisJCQkJRE1BX1RPX0RFVklDRSwgY29tbWFuZCwgOCk7CisKKwkJCVVTX0RFQlVHUCgiUmVzdWx0IGZvciBzZW5kX2NvbW1hbmQgaW4gcmVhZF9kYXRhICVkXG4iLAorCQkJCXJlc3VsdCk7CisKKwkJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCQkJcmVzdWx0ID0gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQkJCWdvdG8gbGVhdmU7CisJCQl9CisKKwkJCS8qIHJlYWQgZGF0YSAqLworCQkJcmVzdWx0ID0gc2RkcjU1X2J1bGtfdHJhbnNwb3J0KHVzLAorCQkJCURNQV9GUk9NX0RFVklDRSwgYnVmZmVyLCBsZW4pOworCisJCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJCQlnb3RvIGxlYXZlOworCQkJfQorCisJCQkvKiBub3cgcmVhZCBzdGF0dXMgKi8KKwkJCXJlc3VsdCA9IHNkZHI1NV9idWxrX3RyYW5zcG9ydCh1cywKKwkJCQlETUFfRlJPTV9ERVZJQ0UsIHN0YXR1cywgMik7CisKKwkJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCQkJcmVzdWx0ID0gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQkJCWdvdG8gbGVhdmU7CisJCQl9CisKKwkJCS8qIGNoZWNrIHN0YXR1cyBmb3IgZXJyb3IgKi8KKwkJCWlmIChzdGF0dXNbMF0gPT0gMHhmZiAmJiBzdGF0dXNbMV0gPT0gMHg0KSB7CisJCQkJc2V0X3NlbnNlX2luZm8gKDMsIDB4MTEsIDApOworCQkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCQkJZ290byBsZWF2ZTsKKwkJCX0KKwkJfQorCisJCS8vIFN0b3JlIHRoZSBkYXRhIGluIHRoZSB0cmFuc2ZlciBidWZmZXIKKwkJdXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKGJ1ZmZlciwgbGVuLCB1cy0+c3JiLAorCQkJCSZpbmRleCwgJm9mZnNldCwgVE9fWEZFUl9CVUYpOworCisJCXBhZ2UgPSAwOworCQlsYmErKzsKKwkJc2VjdG9ycyAtPSBwYWdlcyA+PiBpbmZvLT5zbWFsbHBhZ2VzaGlmdDsKKwl9CisKKwlyZXN1bHQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKworbGVhdmU6CisJa2ZyZWUoYnVmZmVyKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgc2RkcjU1X3dyaXRlX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLAorCQl1bnNpZ25lZCBpbnQgbGJhLAorCQl1bnNpZ25lZCBpbnQgcGFnZSwKKwkJdW5zaWduZWQgc2hvcnQgc2VjdG9ycykgeworCisJaW50IHJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgY2hhciAqc3RhdHVzID0gdXMtPmlvYnVmOworCXN0cnVjdCBzZGRyNTVfY2FyZF9pbmZvICppbmZvID0gKHN0cnVjdCBzZGRyNTVfY2FyZF9pbmZvICopdXMtPmV4dHJhOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKworCXVuc2lnbmVkIGludCBwYmE7CisJdW5zaWduZWQgaW50IG5ld19wYmE7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzOworCisJdW5zaWduZWQgc2hvcnQgcGFnZXM7CisJaW50IGk7CisJdW5zaWduZWQgaW50IGxlbiwgaW5kZXgsIG9mZnNldDsKKworCS8qIGNoZWNrIGlmIHdlIGFyZSBhbGxvd2VkIHRvIHdyaXRlICovCisJaWYgKGluZm8tPnJlYWRfb25seSB8fCBpbmZvLT5mb3JjZV9yZWFkX29ubHkpIHsKKwkJc2V0X3NlbnNlX2luZm8gKDcsIDB4MjcsIDApOwkvKiByZWFkIG9ubHkgKi8KKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJfQorCisJLy8gU2luY2Ugd2Ugb25seSB3cml0ZSBvbmUgYmxvY2sgYXQgYSB0aW1lLCB3ZSBoYXZlIHRvIGNyZWF0ZQorCS8vIGEgYm91bmNlIGJ1ZmZlciBhbmQgbW92ZSB0aGUgZGF0YSBhIHBpZWNlIGF0IGEgdGltZSBiZXR3ZWVuIHRoZQorCS8vIGJvdW5jZSBidWZmZXIgYW5kIHRoZSBhY3R1YWwgdHJhbnNmZXIgYnVmZmVyLgorCisJbGVuID0gbWluKCh1bnNpZ25lZCBpbnQpIHNlY3RvcnMsICh1bnNpZ25lZCBpbnQpIGluZm8tPmJsb2Nrc2l6ZSA+PgorCQkJaW5mby0+c21hbGxwYWdlc2hpZnQpICogUEFHRVNJWkU7CisJYnVmZmVyID0ga21hbGxvYyhsZW4sIEdGUF9OT0lPKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJaW5kZXggPSBvZmZzZXQgPSAwOworCisJd2hpbGUgKHNlY3RvcnMgPiAwKSB7CisKKwkJLyogaGF2ZSB3ZSBnb3QgdG8gZW5kPyAqLworCQlpZiAobGJhID49IGluZm8tPm1heF9sb2dfYmxrcykKKwkJCWJyZWFrOworCisJCXBiYSA9IGluZm8tPmxiYV90b19wYmFbbGJhXTsKKworCQkvLyBXcml0ZSBhcyBtYW55IHNlY3RvcnMgYXMgcG9zc2libGUgaW4gdGhpcyBibG9jaworCisJCXBhZ2VzID0gbWluKCh1bnNpZ25lZCBpbnQpIHNlY3RvcnMgPDwgaW5mby0+c21hbGxwYWdlc2hpZnQsCisJCQkJaW5mby0+YmxvY2tzaXplIC0gcGFnZSk7CisJCWxlbiA9IHBhZ2VzIDw8IGluZm8tPnBhZ2VzaGlmdDsKKworCQkvLyBHZXQgdGhlIGRhdGEgZnJvbSB0aGUgdHJhbnNmZXIgYnVmZmVyCisJCXVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1ZihidWZmZXIsIGxlbiwgdXMtPnNyYiwKKwkJCQkmaW5kZXgsICZvZmZzZXQsIEZST01fWEZFUl9CVUYpOworCisJCVVTX0RFQlVHUCgiV3JpdGUgJTAyWCBwYWdlcywgdG8gUEJBICUwNFgiCisJCQkiIChMQkEgJTA0WCkgcGFnZSAlMDJYXG4iLAorCQkJcGFnZXMsIHBiYSwgbGJhLCBwYWdlKTsKKwkJCQorCQljb21tYW5kWzRdID0gMDsKKworCQlpZiAocGJhID09IE5PVF9BTExPQ0FURUQpIHsKKwkJCS8qIG5vIHBiYSBhbGxvY2F0ZWQgZm9yIHRoaXMgbGJhLCBmaW5kIGEgZnJlZSBwYmEgdG8gdXNlICovCisKKwkJCWludCBtYXhfcGJhID0gKGluZm8tPm1heF9sb2dfYmxrcyAvIDI1MCApICogMjU2OworCQkJaW50IGZvdW5kX2NvdW50ID0gMDsKKwkJCWludCBmb3VuZF9wYmEgPSAtMTsKKworCQkJLyogc2V0IHBiYSB0byBmaXJzdCBibG9jayBpbiB6b25lIGxiYSBpcyBpbiAqLworCQkJcGJhID0gKGxiYSAvIDEwMDApICogMTAyNDsKKworCQkJVVNfREVCVUdQKCJObyBQQkEgZm9yIExCQSAlMDRYXG4iLGxiYSk7CisKKwkJCWlmIChtYXhfcGJhID4gMTAyNCkKKwkJCQltYXhfcGJhID0gMTAyNDsKKworCQkJLyoKKwkJCSAqIFNjYW4gdGhyb3VnaCB0aGUgbWFwIGxvb2tpbmcgZm9yIGFuIHVudXNlZCBibG9jaworCQkJICogbGVhdmUgMTYgdW51c2VkIGJsb2NrcyBhdCBzdGFydCAob3IgYXMgbWFueSBhcworCQkJICogcG9zc2libGUpIHNpbmNlIHRoZSBzZGRyNTUgc2VlbXMgdG8gcmV1c2UgYSB1c2VkCisJCQkgKiBibG9jayB3aGVuIGl0IHNob3VsZG4ndCBpZiB3ZSBkb24ndCBsZWF2ZSBzcGFjZS4KKwkJCSAqLworCQkJZm9yIChpID0gMDsgaSA8IG1heF9wYmE7IGkrKywgcGJhKyspIHsKKwkJCQlpZiAoaW5mby0+cGJhX3RvX2xiYVtwYmFdID09IFVOVVNFRF9CTE9DSykgeworCQkJCQlmb3VuZF9wYmEgPSBwYmE7CisJCQkJCWlmIChmb3VuZF9jb3VudCsrID4gMTYpCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCXBiYSA9IGZvdW5kX3BiYTsKKworCQkJaWYgKHBiYSA9PSAtMSkgeworCQkJCS8qIG9oIGRlYXIgKi8KKwkJCQlVU19ERUJVR1AoIkNvdWxkbid0IGZpbmQgdW5hbGxvY2F0ZWQgYmxvY2tcbiIpOworCisJCQkJc2V0X3NlbnNlX2luZm8gKDMsIDB4MzEsIDApOwkvKiBtZWRpdW0gZXJyb3IgKi8KKwkJCQlyZXN1bHQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQkJCWdvdG8gbGVhdmU7CisJCQl9CisKKwkJCVVTX0RFQlVHUCgiQWxsb2NhdGluZyBQQkEgJTA0WCBmb3IgTEJBICUwNFhcbiIsIHBiYSwgbGJhKTsKKworCQkJLyogc2V0IHdyaXRpbmcgdG8gdW5hbGxvY2F0ZWQgYmxvY2sgZmxhZyAqLworCQkJY29tbWFuZFs0XSA9IDB4NDA7CisJCX0KKworCQlhZGRyZXNzID0gKHBiYSA8PCBpbmZvLT5ibG9ja3NoaWZ0KSArIHBhZ2U7CisKKwkJY29tbWFuZFsxXSA9IExTQl9vZihhZGRyZXNzPj4xNik7CisJCWNvbW1hbmRbMl0gPSBMU0Jfb2YoYWRkcmVzcz4+OCk7IAorCQljb21tYW5kWzNdID0gTFNCX29mKGFkZHJlc3MpOworCisJCS8qIHNldCB0aGUgbGJhIGludG8gdGhlIGNvbW1hbmQsIG1vZHVsbyAxMDAwICovCisJCWNvbW1hbmRbMF0gPSBMU0Jfb2YobGJhICUgMTAwMCk7CisJCWNvbW1hbmRbNl0gPSBNU0Jfb2YobGJhICUgMTAwMCk7CisKKwkJY29tbWFuZFs0XSB8PSBMU0Jfb2YocGFnZXMgPj4gaW5mby0+c21hbGxwYWdlc2hpZnQpOworCQljb21tYW5kWzVdID0gMHhCMDsKKwkJY29tbWFuZFs3XSA9IDB4ODY7CisKKwkJLyogc2VuZCBjb21tYW5kICovCisJCXJlc3VsdCA9IHNkZHI1NV9idWxrX3RyYW5zcG9ydCh1cywKKwkJCURNQV9UT19ERVZJQ0UsIGNvbW1hbmQsIDgpOworCisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCQlVU19ERUJVR1AoIlJlc3VsdCBmb3Igc2VuZF9jb21tYW5kIGluIHdyaXRlX2RhdGEgJWRcbiIsCisJCQlyZXN1bHQpOworCisJCQkvKiBzZXRfc2Vuc2VfaW5mbyBpcyBzdXBlcmZsdW91cyBoZXJlPyAqLworCQkJc2V0X3NlbnNlX2luZm8gKDMsIDB4MywgMCk7LyogcGVyaXBoZXJhbCB3cml0ZSBlcnJvciAqLworCQkJcmVzdWx0ID0gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkJCWdvdG8gbGVhdmU7CisJCX0KKworCQkvKiBzZW5kIHRoZSBkYXRhICovCisJCXJlc3VsdCA9IHNkZHI1NV9idWxrX3RyYW5zcG9ydCh1cywKKwkJCURNQV9UT19ERVZJQ0UsIGJ1ZmZlciwgbGVuKTsKKworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQkJVVNfREVCVUdQKCJSZXN1bHQgZm9yIHNlbmRfZGF0YSBpbiB3cml0ZV9kYXRhICVkXG4iLAorCQkJCSAgcmVzdWx0KTsKKworCQkJLyogc2V0X3NlbnNlX2luZm8gaXMgc3VwZXJmbHVvdXMgaGVyZT8gKi8KKwkJCXNldF9zZW5zZV9pbmZvICgzLCAweDMsIDApOy8qIHBlcmlwaGVyYWwgd3JpdGUgZXJyb3IgKi8KKwkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCQlnb3RvIGxlYXZlOworCQl9CisKKwkJLyogbm93IHJlYWQgc3RhdHVzICovCisJCXJlc3VsdCA9IHNkZHI1NV9idWxrX3RyYW5zcG9ydCh1cywgRE1BX0ZST01fREVWSUNFLCBzdGF0dXMsIDYpOworCisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCQlVU19ERUJVR1AoIlJlc3VsdCBmb3IgZ2V0X3N0YXR1cyBpbiB3cml0ZV9kYXRhICVkXG4iLAorCQkJCSAgcmVzdWx0KTsKKworCQkJLyogc2V0X3NlbnNlX2luZm8gaXMgc3VwZXJmbHVvdXMgaGVyZT8gKi8KKwkJCXNldF9zZW5zZV9pbmZvICgzLCAweDMsIDApOy8qIHBlcmlwaGVyYWwgd3JpdGUgZXJyb3IgKi8KKwkJCXJlc3VsdCA9IFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCQlnb3RvIGxlYXZlOworCQl9CisKKwkJbmV3X3BiYSA9IChzdGF0dXNbM10gKyAoc3RhdHVzWzRdIDw8IDgpICsgKHN0YXR1c1s1XSA8PCAxNikpCisJCQkJCQkgID4+IGluZm8tPmJsb2Nrc2hpZnQ7CisKKwkJLyogY2hlY2sgc3RhdHVzIGZvciBlcnJvciAqLworCQlpZiAoc3RhdHVzWzBdID09IDB4ZmYgJiYgc3RhdHVzWzFdID09IDB4NCkgeworCQkJaW5mby0+cGJhX3RvX2xiYVtuZXdfcGJhXSA9IEJBRF9CTE9DSzsKKworCQkJc2V0X3NlbnNlX2luZm8gKDMsIDB4MGMsIDApOworCQkJcmVzdWx0ID0gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkJCWdvdG8gbGVhdmU7CisJCX0KKworCQlVU19ERUJVR1AoIlVwZGF0aW5nIG1hcHMgZm9yIExCQSAlMDRYOiBvbGQgUEJBICUwNFgsIG5ldyBQQkEgJTA0WFxuIiwKKwkJCWxiYSwgcGJhLCBuZXdfcGJhKTsKKworCQkvKiB1cGRhdGUgdGhlIGxiYTwtPnBiYSBtYXBzLCBub3RlIG5ld19wYmEgbWlnaHQgYmUgdGhlIHNhbWUgYXMgcGJhICovCisJCWluZm8tPmxiYV90b19wYmFbbGJhXSA9IG5ld19wYmE7CisJCWluZm8tPnBiYV90b19sYmFbcGJhXSA9IFVOVVNFRF9CTE9DSzsKKworCQkvKiBjaGVjayB0aGF0IG5ld19wYmEgd2Fzbid0IGFscmVhZHkgYmVpbmcgdXNlZCAqLworCQlpZiAoaW5mby0+cGJhX3RvX2xiYVtuZXdfcGJhXSAhPSBVTlVTRURfQkxPQ0spIHsKKwkJCXByaW50ayhLRVJOX0VSUiAic2RkcjU1IGVycm9yOiBuZXcgUEJBICUwNFggYWxyZWFkeSBpbiB1c2UgZm9yIExCQSAlMDRYXG4iLAorCQkJCW5ld19wYmEsIGluZm8tPnBiYV90b19sYmFbbmV3X3BiYV0pOworCQkJaW5mby0+ZmF0YWxfZXJyb3IgPSAxOworCQkJc2V0X3NlbnNlX2luZm8gKDMsIDB4MzEsIDApOworCQkJcmVzdWx0ID0gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkJCWdvdG8gbGVhdmU7CisJCX0KKworCQkvKiB1cGRhdGUgdGhlIHBiYTwtPmxiYSBtYXBzIGZvciBuZXdfcGJhICovCisJCWluZm8tPnBiYV90b19sYmFbbmV3X3BiYV0gPSBsYmEgJSAxMDAwOworCisJCXBhZ2UgPSAwOworCQlsYmErKzsKKwkJc2VjdG9ycyAtPSBwYWdlcyA+PiBpbmZvLT5zbWFsbHBhZ2VzaGlmdDsKKwl9CisJcmVzdWx0ID0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisKKyBsZWF2ZToKKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgc2RkcjU1X3JlYWRfZGV2aWNlSUQoc3RydWN0IHVzX2RhdGEgKnVzLAorCQl1bnNpZ25lZCBjaGFyICptYW51ZmFjdHVyZXJJRCwKKwkJdW5zaWduZWQgY2hhciAqZGV2aWNlSUQpIHsKKworCWludCByZXN1bHQ7CisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBjaGFyICpjb250ZW50ID0gdXMtPmlvYnVmOworCisJbWVtc2V0KGNvbW1hbmQsIDAsIDgpOworCWNvbW1hbmRbNV0gPSAweEIwOworCWNvbW1hbmRbN10gPSAweDg0OworCXJlc3VsdCA9IHNkZHI1NV9idWxrX3RyYW5zcG9ydCh1cywgRE1BX1RPX0RFVklDRSwgY29tbWFuZCwgOCk7CisKKwlVU19ERUJVR1AoIlJlc3VsdCBvZiBzZW5kX2NvbnRyb2wgZm9yIGRldmljZSBJRCBpcyAlZFxuIiwKKwkJcmVzdWx0KTsKKworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJcmVzdWx0ID0gc2RkcjU1X2J1bGtfdHJhbnNwb3J0KHVzLAorCQlETUFfRlJPTV9ERVZJQ0UsIGNvbnRlbnQsIDQpOworCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkqbWFudWZhY3R1cmVySUQgPSBjb250ZW50WzBdOworCSpkZXZpY2VJRCA9IGNvbnRlbnRbMV07CisKKwlpZiAoY29udGVudFswXSAhPSAweGZmKQl7CisgICAgCQlyZXN1bHQgPSBzZGRyNTVfYnVsa190cmFuc3BvcnQodXMsCisJCQlETUFfRlJPTV9ERVZJQ0UsIGNvbnRlbnQsIDIpOworCX0KKworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKK30KKworCitpbnQgc2RkcjU1X3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykgeworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNkZHI1NV9nZXRfY2FwYWNpdHkoc3RydWN0IHVzX2RhdGEgKnVzKSB7CisKKwl1bnNpZ25lZCBjaGFyIG1hbnVmYWN0dXJlcklEOworCXVuc2lnbmVkIGNoYXIgZGV2aWNlSUQ7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbyAqKXVzLT5leHRyYTsKKworCVVTX0RFQlVHUCgiUmVhZGluZyBjYXBhY2l0eS4uLlxuIik7CisKKwlyZXN1bHQgPSBzZGRyNTVfcmVhZF9kZXZpY2VJRCh1cywKKwkJJm1hbnVmYWN0dXJlcklELAorCQkmZGV2aWNlSUQpOworCisJVVNfREVCVUdQKCJSZXN1bHQgb2YgcmVhZF9kZXZpY2VJRCBpcyAlZFxuIiwKKwkJcmVzdWx0KTsKKworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gMDsKKworCVVTX0RFQlVHUCgiRGV2aWNlIElEID0gJTAyWFxuIiwgZGV2aWNlSUQpOworCVVTX0RFQlVHUCgiTWFudWYgIElEID0gJTAyWFxuIiwgbWFudWZhY3R1cmVySUQpOworCisJaW5mby0+cGFnZXNoaWZ0ID0gOTsKKwlpbmZvLT5zbWFsbHBhZ2VzaGlmdCA9IDA7CisJaW5mby0+YmxvY2tzaXplID0gMTY7CisJaW5mby0+YmxvY2tzaGlmdCA9IDQ7CisJaW5mby0+YmxvY2ttYXNrID0gMTU7CisKKwlzd2l0Y2ggKGRldmljZUlEKSB7CisKKwljYXNlIDB4NmU6IC8vIDFNQgorCWNhc2UgMHhlODoKKwljYXNlIDB4ZWM6CisJCWluZm8tPnBhZ2VzaGlmdCA9IDg7CisJCWluZm8tPnNtYWxscGFnZXNoaWZ0ID0gMTsKKwkJcmV0dXJuIDB4MDAxMDAwMDA7CisKKwljYXNlIDB4ZWE6IC8vIDJNQgorCWNhc2UgMHg2NDoKKwkJaW5mby0+cGFnZXNoaWZ0ID0gODsKKwkJaW5mby0+c21hbGxwYWdlc2hpZnQgPSAxOworCWNhc2UgMHg1ZDogLy8gNWQgaXMgYSBST00gY2FyZCB3aXRoIHBhZ2VzaXplIDUxMi4KKwkJcmV0dXJuIDB4MDAyMDAwMDA7CisKKwljYXNlIDB4ZTM6IC8vIDRNQgorCWNhc2UgMHhlNToKKwljYXNlIDB4NmI6CisJY2FzZSAweGQ1OgorCQlyZXR1cm4gMHgwMDQwMDAwMDsKKworCWNhc2UgMHhlNjogLy8gOE1CCisJY2FzZSAweGQ2OgorCQlyZXR1cm4gMHgwMDgwMDAwMDsKKworCWNhc2UgMHg3MzogLy8gMTZNQgorCQlpbmZvLT5ibG9ja3NpemUgPSAzMjsKKwkJaW5mby0+YmxvY2tzaGlmdCA9IDU7CisJCWluZm8tPmJsb2NrbWFzayA9IDMxOworCQlyZXR1cm4gMHgwMTAwMDAwMDsKKworCWNhc2UgMHg3NTogLy8gMzJNQgorCQlpbmZvLT5ibG9ja3NpemUgPSAzMjsKKwkJaW5mby0+YmxvY2tzaGlmdCA9IDU7CisJCWluZm8tPmJsb2NrbWFzayA9IDMxOworCQlyZXR1cm4gMHgwMjAwMDAwMDsKKworCWNhc2UgMHg3NjogLy8gNjRNQgorCQlpbmZvLT5ibG9ja3NpemUgPSAzMjsKKwkJaW5mby0+YmxvY2tzaGlmdCA9IDU7CisJCWluZm8tPmJsb2NrbWFzayA9IDMxOworCQlyZXR1cm4gMHgwNDAwMDAwMDsKKworCWNhc2UgMHg3OTogLy8gMTI4TUIKKwkJaW5mby0+YmxvY2tzaXplID0gMzI7CisJCWluZm8tPmJsb2Nrc2hpZnQgPSA1OworCQlpbmZvLT5ibG9ja21hc2sgPSAzMTsKKwkJcmV0dXJuIDB4MDgwMDAwMDA7CisKKwlkZWZhdWx0OiAvLyB1bmtub3duCisJCXJldHVybiAwOworCisJfQorfQorCitzdGF0aWMgaW50IHNkZHI1NV9yZWFkX21hcChzdHJ1Y3QgdXNfZGF0YSAqdXMpIHsKKworCXN0cnVjdCBzZGRyNTVfY2FyZF9pbmZvICppbmZvID0gKHN0cnVjdCBzZGRyNTVfY2FyZF9pbmZvICopKHVzLT5leHRyYSk7CisJaW50IG51bWJsb2NrczsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKwlpbnQgaTsKKwl1bnNpZ25lZCBzaG9ydCBsYmE7CisJdW5zaWduZWQgc2hvcnQgbWF4X2xiYTsKKwlpbnQgcmVzdWx0OworCisJaWYgKCFpbmZvLT5jYXBhY2l0eSkKKwkJcmV0dXJuIC0xOworCisJbnVtYmxvY2tzID0gaW5mby0+Y2FwYWNpdHkgPj4gKGluZm8tPmJsb2Nrc2hpZnQgKyBpbmZvLT5wYWdlc2hpZnQpOworCQorCWJ1ZmZlciA9IGttYWxsb2MoIG51bWJsb2NrcyAqIDIsIEdGUF9OT0lPICk7CisJCisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtMTsKKworCW1lbXNldChjb21tYW5kLCAwLCA4KTsKKwljb21tYW5kWzVdID0gMHhCMDsKKwljb21tYW5kWzZdID0gbnVtYmxvY2tzICogMiAvIDI1NjsKKwljb21tYW5kWzddID0gMHg4QTsKKworCXJlc3VsdCA9IHNkZHI1NV9idWxrX3RyYW5zcG9ydCh1cywgRE1BX1RPX0RFVklDRSwgY29tbWFuZCwgOCk7CisKKwlpZiAoIHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJa2ZyZWUgKGJ1ZmZlcik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXN1bHQgPSBzZGRyNTVfYnVsa190cmFuc3BvcnQodXMsIERNQV9GUk9NX0RFVklDRSwgYnVmZmVyLCBudW1ibG9ja3MgKiAyKTsKKworCWlmICggcmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQlrZnJlZSAoYnVmZmVyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJlc3VsdCA9IHNkZHI1NV9idWxrX3RyYW5zcG9ydCh1cywgRE1BX0ZST01fREVWSUNFLCBjb21tYW5kLCAyKTsKKworCWlmICggcmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQlrZnJlZSAoYnVmZmVyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChpbmZvLT5sYmFfdG9fcGJhKQorCQlrZnJlZShpbmZvLT5sYmFfdG9fcGJhKTsKKwlpZiAoaW5mby0+cGJhX3RvX2xiYSkKKwkJa2ZyZWUoaW5mby0+cGJhX3RvX2xiYSk7CisJaW5mby0+bGJhX3RvX3BiYSA9IGttYWxsb2MobnVtYmxvY2tzKnNpemVvZihpbnQpLCBHRlBfTk9JTyk7CisJaW5mby0+cGJhX3RvX2xiYSA9IGttYWxsb2MobnVtYmxvY2tzKnNpemVvZihpbnQpLCBHRlBfTk9JTyk7CisKKwlpZiAoaW5mby0+bGJhX3RvX3BiYSA9PSBOVUxMIHx8IGluZm8tPnBiYV90b19sYmEgPT0gTlVMTCkgeworCQlpZiAoaW5mby0+bGJhX3RvX3BiYSAhPSBOVUxMKQorCQkJa2ZyZWUoaW5mby0+bGJhX3RvX3BiYSk7CisJCWlmIChpbmZvLT5wYmFfdG9fbGJhICE9IE5VTEwpCisJCQlrZnJlZShpbmZvLT5wYmFfdG9fbGJhKTsKKwkJaW5mby0+bGJhX3RvX3BiYSA9IE5VTEw7CisJCWluZm8tPnBiYV90b19sYmEgPSBOVUxMOworCQlrZnJlZShidWZmZXIpOworCQlyZXR1cm4gLTE7CisJfQorCisJbWVtc2V0KGluZm8tPmxiYV90b19wYmEsIDB4ZmYsIG51bWJsb2NrcypzaXplb2YoaW50KSk7CisJbWVtc2V0KGluZm8tPnBiYV90b19sYmEsIDB4ZmYsIG51bWJsb2NrcypzaXplb2YoaW50KSk7CisKKwkvKiBzZXQgbWF4aW11bSBsYmEgKi8KKwltYXhfbGJhID0gaW5mby0+bWF4X2xvZ19ibGtzOworCWlmIChtYXhfbGJhID4gMTAwMCkKKwkJbWF4X2xiYSA9IDEwMDA7CisKKwkvLyBFYWNoIGJsb2NrIGlzIDY0IGJ5dGVzIG9mIGNvbnRyb2wgZGF0YSwgc28gYmxvY2sgaSBpcyBsb2NhdGVkIGluCisJLy8gc2NhdHRlcmxpc3QgYmxvY2sgaSo2NC8xMjhrID0gaSooMl42KSooMl4tMTcpID0gaSooMl4tMTEpCisKKwlmb3IgKGk9MDsgaTxudW1ibG9ja3M7IGkrKykgeworCQlpbnQgem9uZSA9IGkgLyAxMDI0OworCisJCWxiYSA9IHNob3J0X3BhY2soYnVmZmVyW2kgKiAyXSwgYnVmZmVyW2kgKiAyICsgMV0pOworCisJCQkvKiBFdmVyeSAxMDI0IHBoeXNpY2FsIGJsb2NrcyAoInpvbmUiKSwgdGhlIExCQSBudW1iZXJzCisJCQkgKiBnbyBiYWNrIHRvIHplcm8sIGJ1dCBhcmUgd2l0aGluIGEgaGlnaGVyCisJCQkgKiBibG9jayBvZiBMQkEncy4gQWxzbywgdGhlcmUgaXMgYSBtYXhpbXVtIG9mCisJCQkgKiAxMDAwIExCQSdzIHBlciB6b25lLiBJbiBvdGhlciB3b3JkcywgaW4gUEJBCisJCQkgKiAxMDI0LTIwNDcgeW91IHdpbGwgZmluZCBMQkEgMC05OTkgd2hpY2ggYXJlCisJCQkgKiByZWFsbHkgTEJBIDEwMDAtMTk5OS4gWWVzLCB0aGlzIHdhc3RlcyAyNAorCQkJICogcGh5c2ljYWwgYmxvY2tzIHBlciB6b25lLiBHbyBmaWd1cmUuIAorCQkJICogVGhlc2UgZGV2aWNlcyBjYW4gaGF2ZSBibG9ja3MgZ28gYmFkLCBzbyB0aGVyZQorCQkJICogYXJlIDI0IHNwYXJlIGJsb2NrcyB0byB1c2Ugd2hlbiBibG9ja3MgZG8gZ28gYmFkLgorCQkJICovCisKKwkJCS8qIFNERFI1NSByZXR1cm5zIDB4ZmZmZiBmb3IgYSBiYWQgYmxvY2ssIGFuZCAweDQwMCBmb3IgdGhlIAorCQkJICogQ0lTIGJsb2NrLiAoSXMgdGhpcyB0cnVlIGZvciBjYXJkcyA4TUIgb3IgbGVzcz8/KQorCQkJICogUmVjb3JkIHRoZXNlIGluIHRoZSBwaHlzaWNhbCB0byBsb2dpY2FsIG1hcAorCQkJICovIAorCisJCWluZm8tPnBiYV90b19sYmFbaV0gPSBsYmE7CisKKwkJaWYgKGxiYSA+PSBtYXhfbGJhKSB7CisJCQljb250aW51ZTsKKwkJfQorCQkKKwkJaWYgKGluZm8tPmxiYV90b19wYmFbbGJhICsgem9uZSAqIDEwMDBdICE9IE5PVF9BTExPQ0FURUQgJiYKKwkJICAgICFpbmZvLT5mb3JjZV9yZWFkX29ubHkpIHsKKwkJCXByaW50aygic2RkcjU1OiBtYXAgaW5jb25zaXN0ZW5jeSBhdCBMQkEgJTA0WFxuIiwgbGJhICsgem9uZSAqIDEwMDApOworCQkJaW5mby0+Zm9yY2VfcmVhZF9vbmx5ID0gMTsKKwkJfQorCisJCWlmIChsYmE8MHgxMCB8fCAobGJhPj0weDNFMCAmJiBsYmE8MHgzRUYpKQorCQkJVVNfREVCVUdQKCJMQkEgJTA0WCA8LT4gUEJBICUwNFhcbiIsIGxiYSwgaSk7CisKKwkJaW5mby0+bGJhX3RvX3BiYVtsYmEgKyB6b25lICogMTAwMF0gPSBpOworCX0KKworCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgc2RkcjU1X2NhcmRfaW5mb19kZXN0cnVjdG9yKHZvaWQgKmV4dHJhKSB7CisJc3RydWN0IHNkZHI1NV9jYXJkX2luZm8gKmluZm8gPSAoc3RydWN0IHNkZHI1NV9jYXJkX2luZm8gKilleHRyYTsKKworCWlmICghZXh0cmEpCisJCXJldHVybjsKKworCWlmIChpbmZvLT5sYmFfdG9fcGJhKQorCQlrZnJlZShpbmZvLT5sYmFfdG9fcGJhKTsKKwlpZiAoaW5mby0+cGJhX3RvX2xiYSkKKwkJa2ZyZWUoaW5mby0+cGJhX3RvX2xiYSk7Cit9CisKKworLyoKKyAqIFRyYW5zcG9ydCBmb3IgdGhlIFNhbmRpc2sgU0REUi01NQorICovCitpbnQgc2RkcjU1X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlpbnQgcmVzdWx0OworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlucXVpcnlfcmVzcG9uc2VbOF0gPSB7CisJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDIsIDB4MUYsIDB4MDAsIDB4MDAsIDB4MDAKKwl9OworIAkvLyB3cml0ZS1wcm90ZWN0ZWQgZm9yIG5vdywgbm8gYmxvY2sgZGVzY3JpcHRvciBzdXBwb3J0CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgbW9kZV9wYWdlXzAxWzIwXSA9IHsKKwkJMHgwLCAweDEyLCAweDAwLCAweDgwLCAweDAsIDB4MCwgMHgwLCAweDAsCisJCTB4MDEsIDB4MEEsCisJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKKwl9OworCXVuc2lnbmVkIGNoYXIgKnB0ciA9IHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBsb25nIGNhcGFjaXR5OworCXVuc2lnbmVkIGludCBsYmE7CisJdW5zaWduZWQgaW50IHBiYTsKKwl1bnNpZ25lZCBpbnQgcGFnZTsKKwl1bnNpZ25lZCBzaG9ydCBwYWdlczsKKwlzdHJ1Y3Qgc2RkcjU1X2NhcmRfaW5mbyAqaW5mbzsKKworCWlmICghdXMtPmV4dHJhKSB7CisJCXVzLT5leHRyYSA9IGttYWxsb2MoCisJCQlzaXplb2Yoc3RydWN0IHNkZHI1NV9jYXJkX2luZm8pLCBHRlBfTk9JTyk7CisJCWlmICghdXMtPmV4dHJhKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJbWVtc2V0KHVzLT5leHRyYSwgMCwgc2l6ZW9mKHN0cnVjdCBzZGRyNTVfY2FyZF9pbmZvKSk7CisJCXVzLT5leHRyYV9kZXN0cnVjdG9yID0gc2RkcjU1X2NhcmRfaW5mb19kZXN0cnVjdG9yOworCX0KKworCWluZm8gPSAoc3RydWN0IHNkZHI1NV9jYXJkX2luZm8gKikodXMtPmV4dHJhKTsKKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSkgeworCQlVU19ERUJVR1AoIlNERFI1NTogcmVxdWVzdCBzZW5zZSAlMDJ4LyUwMngvJTAyeFxuIiwgaW5mby0+c2Vuc2VfZGF0YVsyXSwgaW5mby0+c2Vuc2VfZGF0YVsxMl0sIGluZm8tPnNlbnNlX2RhdGFbMTNdKTsKKworCQltZW1jcHkgKHB0ciwgaW5mby0+c2Vuc2VfZGF0YSwgc2l6ZW9mIGluZm8tPnNlbnNlX2RhdGEpOworCQlwdHJbMF0gPSAweDcwOworCQlwdHJbN10gPSAxMTsKKwkJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmIChwdHIsIHNpemVvZiBpbmZvLT5zZW5zZV9kYXRhLCBzcmIpOworCQltZW1zZXQgKGluZm8tPnNlbnNlX2RhdGEsIDAsIHNpemVvZiBpbmZvLT5zZW5zZV9kYXRhKTsKKworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJfQorCisJbWVtc2V0IChpbmZvLT5zZW5zZV9kYXRhLCAwLCBzaXplb2YgaW5mby0+c2Vuc2VfZGF0YSk7CisKKwkvKiBEdW1teSB1cCBhIHJlc3BvbnNlIGZvciBJTlFVSVJZIHNpbmNlIFNERFI1NSBkb2Vzbid0CisJICAgcmVzcG9uZCB0byBJTlFVSVJZIGNvbW1hbmRzICovCisKKwlpZiAoc3JiLT5jbW5kWzBdID09IElOUVVJUlkpIHsKKwkJbWVtY3B5KHB0ciwgaW5xdWlyeV9yZXNwb25zZSwgOCk7CisJCWZpbGxfaW5xdWlyeV9yZXNwb25zZSh1cywgcHRyLCAzNik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwkvKiBvbmx5IGNoZWNrIGNhcmQgc3RhdHVzIGlmIHRoZSBtYXAgaXNuJ3QgYWxsb2NhdGVkLCBpZSBubyBjYXJkIHNlZW4geWV0CisJICogb3IgaWYgaXQncyBiZWVuIG92ZXIgaGFsZiBhIHNlY29uZCBzaW5jZSB3ZSBsYXN0IGFjY2Vzc2VkIGl0CisJICovCisJaWYgKGluZm8tPmxiYV90b19wYmEgPT0gTlVMTCB8fCB0aW1lX2FmdGVyKGppZmZpZXMsIGluZm8tPmxhc3RfYWNjZXNzICsgSFovMikpIHsKKworCQkvKiBjaGVjayB0byBzZWUgaWYgYSBjYXJkIGlzIGZpdHRlZCAqLworCQlyZXN1bHQgPSBzZGRyNTVfc3RhdHVzICh1cyk7CisJCWlmIChyZXN1bHQpIHsKKwkJCXJlc3VsdCA9IHNkZHI1NV9zdGF0dXMgKHVzKTsKKwkJCWlmICghcmVzdWx0KSB7CisJCQlzZXRfc2Vuc2VfaW5mbyAoNiwgMHgyOCwgMCk7CS8qIG5ldyBtZWRpYSwgc2V0IHVuaXQgYXR0ZW50aW9uLCBub3QgcmVhZHkgdG8gcmVhZHkgKi8KKwkJCX0KKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQl9CisJfQorCisJLyogaWYgd2UgZGV0ZWN0ZWQgYSBwcm9ibGVtIHdpdGggdGhlIG1hcCB3aGVuIHdyaXRpbmcsCisJICAgZG9uJ3QgYWxsb3cgYW55IG1vcmUgYWNjZXNzICovCisJaWYgKGluZm8tPmZhdGFsX2Vycm9yKSB7CisKKwkJc2V0X3NlbnNlX2luZm8gKDMsIDB4MzEsIDApOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFQURfQ0FQQUNJVFkpIHsKKworCQljYXBhY2l0eSA9IHNkZHI1NV9nZXRfY2FwYWNpdHkodXMpOworCisJCWlmICghY2FwYWNpdHkpIHsKKwkJCXNldF9zZW5zZV9pbmZvICgzLCAweDMwLCAwKTsgLyogaW5jb21wYXRpYmxlIG1lZGl1bSAqLworCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCX0KKworCQlpbmZvLT5jYXBhY2l0eSA9IGNhcGFjaXR5OworCisJCS8qIGZpZ3VyZSBvdXQgdGhlIG1heGltdW0gbG9naWNhbCBibG9jayBudW1iZXIsIGFsbG93aW5nIGZvcgorCQkgKiB0aGUgZmFjdCB0aGF0IG9ubHkgMjUwIG91dCBvZiBldmVyeSAyNTYgYXJlIHVzZWQgKi8KKwkJaW5mby0+bWF4X2xvZ19ibGtzID0gKChpbmZvLT5jYXBhY2l0eSA+PiAoaW5mby0+cGFnZXNoaWZ0ICsgaW5mby0+YmxvY2tzaGlmdCkpIC8gMjU2KSAqIDI1MDsKKworCQkvKiBMYXN0IHBhZ2UgaW4gdGhlIGNhcmQsIGFkanVzdCBhcyB3ZSBvbmx5IHVzZSAyNTAgb3V0IG9mCisJCSAqIGV2ZXJ5IDI1NiBwYWdlcyAqLworCQljYXBhY2l0eSA9IChjYXBhY2l0eSAvIDI1NikgKiAyNTA7CisKKwkJY2FwYWNpdHkgLz0gUEFHRVNJWkU7CisJCWNhcGFjaXR5LS07CisKKwkJKChfX2JlMzIgKikgcHRyKVswXSA9IGNwdV90b19iZTMyKGNhcGFjaXR5KTsKKwkJKChfX2JlMzIgKikgcHRyKVsxXSA9IGNwdV90b19iZTMyKFBBR0VTSVpFKTsKKwkJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHB0ciwgOCwgc3JiKTsKKworCQlzZGRyNTVfcmVhZF9tYXAodXMpOworCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IE1PREVfU0VOU0VfMTApIHsKKworCQltZW1jcHkocHRyLCBtb2RlX3BhZ2VfMDEsIHNpemVvZiBtb2RlX3BhZ2VfMDEpOworCQlwdHJbM10gPSAoaW5mby0+cmVhZF9vbmx5IHx8IGluZm8tPmZvcmNlX3JlYWRfb25seSkgPyAweDgwIDogMDsKKwkJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKHB0ciwgc2l6ZW9mKG1vZGVfcGFnZV8wMSksIHNyYik7CisKKwkJaWYgKCAoc3JiLT5jbW5kWzJdICYgMHgzRikgPT0gMHgwMSApIHsKKwkJCVVTX0RFQlVHUCgKKwkJCSAgIlNERFI1NTogRHVtbXkgdXAgcmVxdWVzdCBmb3IgbW9kZSBwYWdlIDFcbiIpOworCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCisJCX0gZWxzZSBpZiAoIChzcmItPmNtbmRbMl0gJiAweDNGKSA9PSAweDNGICkgeworCQkJVVNfREVCVUdQKAorCQkJICAiU0REUjU1OiBEdW1teSB1cCByZXF1ZXN0IGZvciBhbGwgbW9kZSBwYWdlc1xuIik7CisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJCX0KKworCQlzZXRfc2Vuc2VfaW5mbyAoNSwgMHgyNCwgMCk7CS8qIGludmFsaWQgZmllbGQgaW4gY29tbWFuZCAqLworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IEFMTE9XX01FRElVTV9SRU1PVkFMKSB7CisKKwkJVVNfREVCVUdQKAorCQkgICJTRERSNTU6ICVzIG1lZGl1bSByZW1vdmFsLiBOb3QgdGhhdCBJIGNhbiBkbyIKKwkJICAiIGFueXRoaW5nIGFib3V0IGl0Li4uXG4iLAorCQkgIChzcmItPmNtbmRbNF0mMHgwMykgPyAiUHJldmVudCIgOiAiQWxsb3ciKTsKKworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IFJFQURfMTAgfHwgc3JiLT5jbW5kWzBdID09IFdSSVRFXzEwKSB7CisKKwkJcGFnZSA9IHNob3J0X3BhY2soc3JiLT5jbW5kWzNdLCBzcmItPmNtbmRbMl0pOworCQlwYWdlIDw8PSAxNjsKKwkJcGFnZSB8PSBzaG9ydF9wYWNrKHNyYi0+Y21uZFs1XSwgc3JiLT5jbW5kWzRdKTsKKwkJcGFnZXMgPSBzaG9ydF9wYWNrKHNyYi0+Y21uZFs4XSwgc3JiLT5jbW5kWzddKTsKKworCQlwYWdlIDw8PSBpbmZvLT5zbWFsbHBhZ2VzaGlmdDsKKworCQkvLyBjb252ZXJ0IHBhZ2UgdG8gYmxvY2sgYW5kIHBhZ2Utd2l0aGluLWJsb2NrCisKKwkJbGJhID0gcGFnZSA+PiBpbmZvLT5ibG9ja3NoaWZ0OworCQlwYWdlID0gcGFnZSAmIGluZm8tPmJsb2NrbWFzazsKKworCQkvLyBsb2NhdGUgcGh5c2ljYWwgYmxvY2sgY29ycmVzcG9uZGluZyB0byBsb2dpY2FsIGJsb2NrCisKKwkJaWYgKGxiYSA+PSBpbmZvLT5tYXhfbG9nX2Jsa3MpIHsKKworCQkJVVNfREVCVUdQKCJFcnJvcjogUmVxdWVzdGVkIExCQSAlMDRYIGV4Y2VlZHMgbWF4aW11bSAiCisJCQkgICJibG9jayAlMDRYXG4iLCBsYmEsIGluZm8tPm1heF9sb2dfYmxrcy0xKTsKKworCQkJc2V0X3NlbnNlX2luZm8gKDUsIDB4MjQsIDApOwkvKiBpbnZhbGlkIGZpZWxkIGluIGNvbW1hbmQgKi8KKworCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCX0KKworCQlwYmEgPSBpbmZvLT5sYmFfdG9fcGJhW2xiYV07CisKKwkJaWYgKHNyYi0+Y21uZFswXSA9PSBXUklURV8xMCkgeworCQkJVVNfREVCVUdQKCJXUklURV8xMDogd3JpdGUgYmxvY2sgJTA0WCAoTEJBICUwNFgpIHBhZ2UgJTAxWCIKKwkJCQkiIHBhZ2VzICVkXG4iLAorCQkJCXBiYSwgbGJhLCBwYWdlLCBwYWdlcyk7CisKKwkJCXJldHVybiBzZGRyNTVfd3JpdGVfZGF0YSh1cywgbGJhLCBwYWdlLCBwYWdlcyk7CisJCX0gZWxzZSB7CisJCQlVU19ERUJVR1AoIlJFQURfMTA6IHJlYWQgYmxvY2sgJTA0WCAoTEJBICUwNFgpIHBhZ2UgJTAxWCIKKwkJCQkiIHBhZ2VzICVkXG4iLAorCQkJCXBiYSwgbGJhLCBwYWdlLCBwYWdlcyk7CisKKwkJCXJldHVybiBzZGRyNTVfcmVhZF9kYXRhKHVzLCBsYmEsIHBhZ2UsIHBhZ2VzKTsKKwkJfQorCX0KKworCisJaWYgKHNyYi0+Y21uZFswXSA9PSBURVNUX1VOSVRfUkVBRFkpIHsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gU1RBUlRfU1RPUCkgeworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisJfQorCisJc2V0X3NlbnNlX2luZm8gKDUsIDB4MjAsIDApOwkvKiBpbGxlZ2FsIGNvbW1hbmQgKi8KKworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOyAvLyBGSVhNRTogc2Vuc2UgYnVmZmVyPworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NkZHI1NS5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmJkMzJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9zZGRyNTUuaApAQCAtMCwwICsxLDM0IEBACisvKiBEcml2ZXIgZm9yIFNhbkRpc2sgU0REUi01NSBTbWFydE1lZGlhIHJlYWRlcgorICogSGVhZGVyIEZpbGUKKyAqCisgKiAkSWQ6JAorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgorICogICAoYykgMjAwMiBTaW1vbiBNdW50b24KKyAqCisgKiBTZWUgc2RkcjU1LmMgZm9yIG1vcmUgZXhwbGFuYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9VU0JfU0hVVFRMRV9FVVNCX1NERFI1NV9ICisjZGVmaW5lIF9VU0JfU0hVVFRMRV9FVVNCX1NERFI1NV9ICisKKy8qIFNhbmRpc2sgU0REUi01NSBzdHVmZiAqLworCitleHRlcm4gaW50IHNkZHI1NV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOworZXh0ZXJuIGludCBzZGRyNTVfcmVzZXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZmYwM2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuYwpAQCAtMCwwICsxLDE3MTIgQEAKKy8qIERyaXZlciBmb3IgU0NNIE1pY3Jvc3lzdGVtcyBVU0ItQVRBUEkgY2FibGUKKyAqCisgKiAkSWQ6IHNodXR0bGVfdXNiYXQuYyx2IDEuMTcgMjAwMi8wNC8yMiAwMzozOTo0MyBtZGhhcm0gRXhwICQKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDIwMDAsIDIwMDEgUm9iZXJ0IEJhcnVjaCAoYXV0b3BoaWxlQHN0YXJiYW5kLm5ldCkKKyAqICAgKGMpIDIwMDQsIDIwMDUgRGFuaWVsIERyYWtlIDxkc2RAZ2VudG9vLm9yZz4KKyAqCisgKiBEZXZlbG9wZWQgd2l0aCB0aGUgYXNzaXN0YW5jZSBvZjoKKyAqICAgKGMpIDIwMDIgQWxhbiBTdGVybiA8c3Rlcm5Acm93bGFuZC5vcmc+CisgKgorICogRmxhc2ggc3VwcG9ydCBiYXNlZCBvbiBlYXJsaWVyIHdvcmsgYnk6CisgKiAgIChjKSAyMDAyIFRob21hcyBLcmVpbGluZyA8dXNiZGV2QHNtMDQuZGU+CisgKgorICogTWFueSBvcmlnaW5hbGx5IEFUQVBJIGRldmljZXMgd2VyZSBzbGlnaHRseSBtb2RpZmllZCB0byBtZWV0IHRoZSBVU0IKKyAqIG1hcmtldCBieSB1c2luZyBzb21lIGtpbmQgb2YgdHJhbnNsYXRpb24gZnJvbSBBVEFQSSB0byBVU0Igb24gdGhlIGhvc3QsCisgKiBhbmQgdGhlIHBlcmlwaGVyYWwgd291bGQgdHJhbnNsYXRlIGZyb20gVVNCIGJhY2sgdG8gQVRBUEkuCisgKgorICogU0NNIE1pY3Jvc3lzdGVtcyAod3d3LnNjbW1pY3JvLmNvbSkgbWFrZXMgYSBkZXZpY2UsIHNvbGQgdG8gT0VNJ3Mgb25seSwgCisgKiB3aGljaCBkb2VzIHRoZSBVU0ItdG8tQVRBUEkgY29udmVyc2lvbi4gIEJ5IG9idGFpbmluZyB0aGUgZGF0YSBzaGVldCBvbgorICogdGhlaXIgZGV2aWNlIHVuZGVyIG5vbmRpc2Nsb3N1cmUgYWdyZWVtZW50LCBJIGhhdmUgYmVlbiBhYmxlIHRvIHdyaXRlCisgKiB0aGlzIGRyaXZlciBmb3IgTGludXguCisgKgorICogVGhlIGNoaXAgdXNlZCBpbiB0aGUgZGV2aWNlIGNhbiBhbHNvIGJlIHVzZWQgZm9yIEVQUCBhbmQgSVNBIHRyYW5zbGF0aW9uCisgKiBhcyB3ZWxsLiBUaGlzIGRyaXZlciBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gd29yayB3aXRoIHRoZSBBVEFQSQorICogdHJhbnNsYXRpb24uCisgKgorICogU2VlIHRoZSBLY29uZmlnIGhlbHAgdGV4dCBmb3IgYSBsaXN0IG9mIGRldmljZXMga25vd24gdG8gYmUgc3VwcG9ydGVkIGJ5CisgKiB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgorCisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKworI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInByb3RvY29sLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICJzaHV0dGxlX3VzYmF0LmgiCisKKyNkZWZpbmUgc2hvcnRfcGFjayhMU0IsTVNCKSAoICgodTE2KShMU0IpKSB8ICggKCh1MTYpKE1TQikpPDw4ICkgKQorI2RlZmluZSBMU0Jfb2YocykgKChzKSYweEZGKQorI2RlZmluZSBNU0Jfb2YocykgKChzKT4+OCkKKworc3RhdGljIGludCB0cmFuc2ZlcnJlZCA9IDA7CisKK3N0YXRpYyBpbnQgdXNiYXRfZmxhc2hfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKiBzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7CitzdGF0aWMgaW50IHVzYmF0X2hwODIwMGVfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKTsKKworLyoKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHByb2R1Y2UgYW4gQVRBUEkgcmVhZC93cml0ZSBzZWN0b3JzIGNvbW1hbmQKKyAqIFVzZSBjbWQ9MHgyMCBmb3IgcmVhZCwgY21kPTB4MzAgZm9yIHdyaXRlCisgKi8KK3N0YXRpYyB2b2lkIHVzYmF0X3BhY2tfYXRhcGlfc2VjdG9yX2NtZCh1bnNpZ25lZCBjaGFyICpidWYsCisJCQkJCXVuc2lnbmVkIGNoYXIgdGhpc3RpbWUsCisJCQkJCXUzMiBzZWN0b3IsIHVuc2lnbmVkIGNoYXIgY21kKQoreworCWJ1ZlswXSA9IDA7CisJYnVmWzFdID0gdGhpc3RpbWU7CisJYnVmWzJdID0gc2VjdG9yICYgMHhGRjsKKwlidWZbM10gPSAoc2VjdG9yID4+ICA4KSAmIDB4RkY7CisJYnVmWzRdID0gKHNlY3RvciA+PiAxNikgJiAweEZGOworCWJ1Zls1XSA9IDB4RTAgfCAoKHNlY3RvciA+PiAyNCkgJiAweDBGKTsKKwlidWZbNl0gPSBjbWQ7Cit9CisKKy8qCisgKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBnZXQgdGhlIGRldmljZSB0eXBlIChmbGFzaCBvciBocDgyMDApCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfZ2V0X2RldmljZV90eXBlKHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlyZXR1cm4gKChzdHJ1Y3QgdXNiYXRfaW5mbyopdXMtPmV4dHJhKS0+ZGV2aWNldHlwZTsKK30KKworLyoKKyAqIFJlYWQgYSByZWdpc3RlciBmcm9tIHRoZSBkZXZpY2UKKyAqLworc3RhdGljIGludCB1c2JhdF9yZWFkKHN0cnVjdCB1c19kYXRhICp1cywKKwkJICAgICAgdW5zaWduZWQgY2hhciBhY2Nlc3MsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgcmVnLAorCQkgICAgICB1bnNpZ25lZCBjaGFyICpjb250ZW50KQoreworCXJldHVybiB1c2Jfc3Rvcl9jdHJsX3RyYW5zZmVyKHVzLAorCQl1cy0+cmVjdl9jdHJsX3BpcGUsCisJCWFjY2VzcyB8IFVTQkFUX0NNRF9SRUFEX1JFRywKKwkJMHhDMCwKKwkJKHUxNilyZWcsCisJCTAsCisJCWNvbnRlbnQsCisJCTEpOworfQorCisvKgorICogV3JpdGUgdG8gYSByZWdpc3RlciBvbiB0aGUgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfd3JpdGUoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkgICAgICAgdW5zaWduZWQgY2hhciBhY2Nlc3MsCisJCSAgICAgICB1bnNpZ25lZCBjaGFyIHJlZywKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgY29udGVudCkKK3sKKwlyZXR1cm4gdXNiX3N0b3JfY3RybF90cmFuc2Zlcih1cywKKwkJdXMtPnNlbmRfY3RybF9waXBlLAorCQlhY2Nlc3MgfCBVU0JBVF9DTURfV1JJVEVfUkVHLAorCQkweDQwLAorCQlzaG9ydF9wYWNrKHJlZywgY29udGVudCksCisJCTAsCisJCU5VTEwsCisJCTApOworfQorCisvKgorICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gcGVyZm9ybSBhIGJ1bGsgcmVhZAorICovCitzdGF0aWMgaW50IHVzYmF0X2J1bGtfcmVhZChzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJCQkJIHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJCQkJCQkJIHVuc2lnbmVkIGludCBsZW4pCit7CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9HT09EOworCisJVVNfREVCVUdQKCJ1c2JhdF9idWxrX3JlYWQ6IGxlbiA9ICVkXG4iLCBsZW4pOworCXJldHVybiB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnJlY3ZfYnVsa19waXBlLCBkYXRhLCBsZW4sIE5VTEwpOworfQorCisvKgorICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gcGVyZm9ybSBhIGJ1bGsgd3JpdGUKKyAqLworc3RhdGljIGludCB1c2JhdF9idWxrX3dyaXRlKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCQkJCQl1bnNpZ25lZCBjaGFyICpkYXRhLAorCQkJCQkJCXVuc2lnbmVkIGludCBsZW4pCit7CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9HT09EOworCisJVVNfREVCVUdQKCJ1c2JhdF9idWxrX3dyaXRlOiAgbGVuID0gJWRcbiIsIGxlbik7CisJcmV0dXJuIHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+c2VuZF9idWxrX3BpcGUsIGRhdGEsIGxlbiwgTlVMTCk7Cit9CisKKy8qCisgKiBTb21lIFVTQkFULXNwZWNpZmljIGNvbW1hbmRzIGNhbiBvbmx5IGJlIGV4ZWN1dGVkIG92ZXIgYSBjb21tYW5kIHRyYW5zcG9ydAorICogVGhpcyB0cmFuc3BvcnQgYWxsb3dzIG9uZSAobGVuPTgpIG9yIHR3byAobGVuPTE2KSB2ZW5kb3Itc3BlY2lmaWMgY29tbWFuZHMKKyAqIHRvIGJlIGV4ZWN1dGVkLgorICovCitzdGF0aWMgaW50IHVzYmF0X2V4ZWN1dGVfY29tbWFuZChzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJCQkJCSB1bnNpZ25lZCBjaGFyICpjb21tYW5kcywKKwkJCQkJCQkJIHVuc2lnbmVkIGludCBsZW4pCit7CisJcmV0dXJuIHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIodXMsIHVzLT5zZW5kX2N0cmxfcGlwZSwKKwkJCQkJCQkJICBVU0JBVF9DTURfRVhFQ19DTUQsIDB4NDAsIDAsIDAsCisJCQkJCQkJCSAgY29tbWFuZHMsIGxlbik7Cit9CisKKy8qCisgKiBSZWFkIHRoZSBzdGF0dXMgcmVnaXN0ZXIKKyAqLworc3RhdGljIGludCB1c2JhdF9nZXRfc3RhdHVzKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgY2hhciAqc3RhdHVzKQoreworCWludCByYzsKKwlyYyA9IHVzYmF0X3JlYWQodXMsIFVTQkFUX0FUQSwgVVNCQVRfQVRBX1NUQVRVUywgc3RhdHVzKTsKKworCVVTX0RFQlVHUCgidXNiYXRfZ2V0X3N0YXR1czogMHglMDJYXG4iLCAodW5zaWduZWQgc2hvcnQpICgqc3RhdHVzKSk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogQ2hlY2sgdGhlIGRldmljZSBzdGF0dXMKKyAqLworc3RhdGljIGludCB1c2JhdF9jaGVja19zdGF0dXMoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCXVuc2lnbmVkIGNoYXIgKnJlcGx5ID0gdXMtPmlvYnVmOworCWludCByYzsKKworCWlmICghdXMpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlyYyA9IHVzYmF0X2dldF9zdGF0dXModXMsIHJlcGx5KTsKKwlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKworCWlmICgqcmVwbHkgJiAweDAxICYmICpyZXBseSAhPSAweDUxKSAvLyBlcnJvci9jaGVjayBjb25kaXRpb24gKDB4NTEgaXMgb2spCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCisJaWYgKCpyZXBseSAmIDB4MjApIC8vIGRldmljZSBmYXVsdAorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKK30KKworLyoKKyAqIFN0b3JlcyBjcml0aWNhbCBpbmZvcm1hdGlvbiBpbiBpbnRlcm5hbCByZWdpc3RlcnMgaW4gcHJlcGFydGlvbiBmb3IgdGhlIGV4ZWN1dGlvbgorICogb2YgYSBjb25kaXRpb25hbCB1c2JhdF9yZWFkX2Jsb2NrcyBvciB1c2JhdF93cml0ZV9ibG9ja3MgY2FsbC4KKyAqLworc3RhdGljIGludCB1c2JhdF9zZXRfc2h1dHRsZV9mZWF0dXJlcyhzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJICAgICAgdW5zaWduZWQgY2hhciBleHRlcm5hbF90cmlnZ2VyLAorCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgZXBwX2NvbnRyb2wsCisJCQkJICAgICAgdW5zaWduZWQgY2hhciBtYXNrX2J5dGUsCisJCQkJICAgICAgdW5zaWduZWQgY2hhciB0ZXN0X3BhdHRlcm4sCisJCQkJICAgICAgdW5zaWduZWQgY2hhciBzdWJjb3VudEgsCisJCQkJICAgICAgdW5zaWduZWQgY2hhciBzdWJjb3VudEwpCit7CisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKworCWNvbW1hbmRbMF0gPSAweDQwOworCWNvbW1hbmRbMV0gPSBVU0JBVF9DTURfU0VUX0ZFQVQ7CisKKwkvLyBUaGUgb25seSBiaXQgcmVsZXZhbnQgdG8gQVRBIGFjY2VzcyBpcyBiaXQgNgorCS8vIHdoaWNoIGRlZmluZXMgOCBiaXQgZGF0YSBhY2Nlc3MgKHNldCkgb3IgMTYgYml0ICh1bnNldCkKKwljb21tYW5kWzJdID0gZXBwX2NvbnRyb2w7CisKKwkvLyBJZiBGQ1EgaXMgc2V0IGluIHRoZSBxdWFsaWZpZXIgKGRlZmluZWQgaW4gUi9XIGNtZCksIHRoZW4gYml0cyBVMCwgVTEsCisJLy8gRVQxIGFuZCBFVDIgZGVmaW5lIGFuIGV4dGVybmFsIGV2ZW50IHRvIGJlIGNoZWNrZWQgZm9yIG9uIGV2ZW50IG9mIGEKKwkvLyBfcmVhZF9ibG9ja3Mgb3IgX3dyaXRlX2Jsb2NrcyBvcGVyYXRpb24uIFRoZSByZWFkL3dyaXRlIHdpbGwgbm90IHRha2UKKwkvLyBwbGFjZSB1bmxlc3MgdGhlIGRlZmluZWQgdHJpZ2dlciBzaWduYWwgaXMgYWN0aXZlLgorCWNvbW1hbmRbM10gPSBleHRlcm5hbF90cmlnZ2VyOworCisJLy8gVGhlIHJlc3VsdGFudCBieXRlIG9mIHRoZSBtYXNrIG9wZXJhdGlvbiAoc2VlIG1hc2tfYnl0ZSkgaXMgY29tcGFyZWQgZm9yCisJLy8gZXF1aXZhbGVuY2Ugd2l0aCB0aGlzIHRlc3QgcGF0dGVybi4gSWYgZXF1YWwsIHRoZSByZWFkL3dyaXRlIHdpbGwgdGFrZQorCS8vIHBsYWNlLgorCWNvbW1hbmRbNF0gPSB0ZXN0X3BhdHRlcm47CisKKwkvLyBUaGlzIHZhbHVlIGlzIGxvZ2ljYWxseSBBTkRlZCB3aXRoIHRoZSBzdGF0dXMgcmVnaXN0ZXIgZmllbGQgc3BlY2lmaWVkCisJLy8gaW4gdGhlIHJlYWQvd3JpdGUgY29tbWFuZC4KKwljb21tYW5kWzVdID0gbWFza19ieXRlOworCisJLy8gSWYgQUxRIGlzIHNldCBpbiB0aGUgcXVhbGlmaWVyLCB0aGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZQorCS8vIHJlZ2lzdGVycyB3aGVyZSB0aGUgYnl0ZSBjb3VudCBzaG91bGQgYmUgcmVhZCBmb3IgdHJhbnNmZXJyaW5nIHRoZSBkYXRhLgorCS8vIElmIEFMUSBpcyBub3Qgc2V0LCB0aGVuIHRoaXMgZmllbGQgY29udGFpbnMgdGhlIG51bWJlciBvZiBieXRlcyB0byBiZQorCS8vIHRyYW5zZmVycmVkLgorCWNvbW1hbmRbNl0gPSBzdWJjb3VudEw7CisJY29tbWFuZFs3XSA9IHN1YmNvdW50SDsKKworCXJldHVybiB1c2JhdF9leGVjdXRlX2NvbW1hbmQodXMsIGNvbW1hbmQsIDgpOworfQorCisvKgorICogQmxvY2ssIHdhaXRpbmcgZm9yIGFuIEFUQSBkZXZpY2UgdG8gYmVjb21lIG5vdCBidXN5IG9yIHRvIHJlcG9ydAorICogYW4gZXJyb3IgY29uZGl0aW9uLgorICovCitzdGF0aWMgaW50IHVzYmF0X3dhaXRfbm90X2J1c3koc3RydWN0IHVzX2RhdGEgKnVzLCBpbnQgbWludXRlcykKK3sKKwlpbnQgaTsKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgKnN0YXR1cyA9IHVzLT5pb2J1ZjsKKworCS8qIFN5bmNocm9uaXppbmcgY2FjaGUgb24gYSBDRFIgY291bGQgdGFrZSBhIGhlY2sgb2YgYSBsb25nIHRpbWUsCisJICogYnV0IHByb2JhYmx5IG5vdCBtb3JlIHRoYW4gMTAgbWludXRlcyBvciBzby4gT24gdGhlIG90aGVyIGhhbmQsCisJICogZG9pbmcgYSBmdWxsIGJsYW5rIG9uIGEgQ0RSVyBhdCBzcGVlZCAxIHdpbGwgdGFrZSBhYm91dCA3NQorCSAqIG1pbnV0ZXMhCisJICovCisKKwlmb3IgKGk9MDsgaTwxMjAwK21pbnV0ZXMqNjA7IGkrKykgeworCisgCQlyZXN1bHQgPSB1c2JhdF9nZXRfc3RhdHVzKHVzLCBzdGF0dXMpOworCisJCWlmIChyZXN1bHQhPVVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCWlmICgqc3RhdHVzICYgMHgwMSkgeyAvLyBjaGVjayBjb25kaXRpb24KKwkJCXJlc3VsdCA9IHVzYmF0X3JlYWQodXMsIFVTQkFUX0FUQSwgMHgxMCwgc3RhdHVzKTsKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQl9CisJCWlmICgqc3RhdHVzICYgMHgyMCkgLy8gZGV2aWNlIGZhdWx0CisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKworCQlpZiAoKCpzdGF0dXMgJiAweDgwKT09MHgwMCkgeyAvLyBub3QgYnVzeQorCQkJVVNfREVCVUdQKCJXYWl0ZWQgbm90IGJ1c3kgZm9yICVkIHN0ZXBzXG4iLCBpKTsKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwkJfQorCisJCWlmIChpPDUwMCkKKwkJCW1zbGVlcCgxMCk7IC8vIDUgc2Vjb25kcworCQllbHNlIGlmIChpPDcwMCkKKwkJCW1zbGVlcCg1MCk7IC8vIDEwIHNlY29uZHMKKwkJZWxzZSBpZiAoaTwxMjAwKQorCQkJbXNsZWVwKDEwMCk7IC8vIDUwIHNlY29uZHMKKwkJZWxzZQorCQkJbXNsZWVwKDEwMDApOyAvLyBYIG1pbnV0ZXMKKwl9CisKKwlVU19ERUJVR1AoIldhaXRlZCBub3QgYnVzeSBmb3IgJWQgbWludXRlcywgdGltaW5nIG91dC5cbiIsCisJCW1pbnV0ZXMpOworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworfQorCisvKgorICogUmVhZCBibG9jayBkYXRhIGZyb20gdGhlIGRhdGEgcmVnaXN0ZXIKKyAqLworc3RhdGljIGludCB1c2JhdF9yZWFkX2Jsb2NrKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCSAgICB1bnNpZ25lZCBjaGFyICpjb250ZW50LAorCQkJICAgIHVuc2lnbmVkIHNob3J0IGxlbikKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisKKwlpZiAoIWxlbikKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCisJY29tbWFuZFswXSA9IDB4QzA7CisJY29tbWFuZFsxXSA9IFVTQkFUX0FUQSB8IFVTQkFUX0NNRF9SRUFEX0JMT0NLOworCWNvbW1hbmRbMl0gPSBVU0JBVF9BVEFfREFUQTsKKwljb21tYW5kWzNdID0gMDsKKwljb21tYW5kWzRdID0gMDsKKwljb21tYW5kWzVdID0gMDsKKwljb21tYW5kWzZdID0gTFNCX29mKGxlbik7CisJY29tbWFuZFs3XSA9IE1TQl9vZihsZW4pOworCisJcmVzdWx0ID0gdXNiYXRfZXhlY3V0ZV9jb21tYW5kKHVzLCBjb21tYW5kLCA4KTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCXJlc3VsdCA9IHVzYmF0X2J1bGtfcmVhZCh1cywgY29udGVudCwgbGVuKTsKKwlyZXR1cm4gKHJlc3VsdCA9PSBVU0JfU1RPUl9YRkVSX0dPT0QgPworCQkJVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QgOiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1IpOworfQorCisvKgorICogV3JpdGUgYmxvY2sgZGF0YSB2aWEgdGhlIGRhdGEgcmVnaXN0ZXIKKyAqLworc3RhdGljIGludCB1c2JhdF93cml0ZV9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgYWNjZXNzLAorCQkJICAgICB1bnNpZ25lZCBjaGFyICpjb250ZW50LAorCQkJICAgICB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCQkgICAgIGludCBtaW51dGVzKQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKworCWlmICghbGVuKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisKKwljb21tYW5kWzBdID0gMHg0MDsKKwljb21tYW5kWzFdID0gYWNjZXNzIHwgVVNCQVRfQ01EX1dSSVRFX0JMT0NLOworCWNvbW1hbmRbMl0gPSBVU0JBVF9BVEFfREFUQTsKKwljb21tYW5kWzNdID0gMDsKKwljb21tYW5kWzRdID0gMDsKKwljb21tYW5kWzVdID0gMDsKKwljb21tYW5kWzZdID0gTFNCX29mKGxlbik7CisJY29tbWFuZFs3XSA9IE1TQl9vZihsZW4pOworCisJcmVzdWx0ID0gdXNiYXRfZXhlY3V0ZV9jb21tYW5kKHVzLCBjb21tYW5kLCA4KTsKKworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJcmVzdWx0ID0gdXNiYXRfYnVsa193cml0ZSh1cywgY29udGVudCwgbGVuKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCXJldHVybiB1c2JhdF93YWl0X25vdF9idXN5KHVzLCBtaW51dGVzKTsKK30KKworLyoKKyAqIFByb2Nlc3MgcmVhZCBhbmQgd3JpdGUgcmVxdWVzdHMKKyAqLworc3RhdGljIGludCB1c2JhdF9ocDgyMDBlX3J3X2Jsb2NrX3Rlc3Qoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGFjY2VzcywKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqcmVnaXN0ZXJzLAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhX291dCwKKwkJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgbnVtX3JlZ2lzdGVycywKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciBkYXRhX3JlZywKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciBzdGF0dXNfcmVnLAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyIHRpbWVvdXQsCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgcXVhbGlmaWVyLAorCQkJCSAgICAgICBpbnQgZGlyZWN0aW9uLAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpjb250ZW50LAorCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCQkJICAgICAgIGludCB1c2Vfc2csCisJCQkJICAgICAgIGludCBtaW51dGVzKQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgaW50IHBpcGUgPSAoZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkgPworCQkJdXMtPnJlY3ZfYnVsa19waXBlIDogdXMtPnNlbmRfYnVsa19waXBlOworCisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKwlpbnQgaSwgajsKKwlpbnQgY21kbGVuOworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgY2hhciAqc3RhdHVzID0gdXMtPmlvYnVmOworCisJQlVHX09OKG51bV9yZWdpc3RlcnMgPiBVU19JT0JVRl9TSVpFLzIpOworCisJZm9yIChpPTA7IGk8MjA7IGkrKykgeworCisJCS8qCisJCSAqIFRoZSBmaXJzdCB0aW1lIHdlIHNlbmQgdGhlIGZ1bGwgY29tbWFuZCwgd2hpY2ggY29uc2lzdHMKKwkJICogb2YgZG93bmxvYWRpbmcgdGhlIFNDU0kgY29tbWFuZCBmb2xsb3dlZCBieSBkb3dubG9hZGluZworCQkgKiB0aGUgZGF0YSB2aWEgYSB3cml0ZS1hbmQtdGVzdC4gIEFueSBvdGhlciB0aW1lIHdlIG9ubHkKKwkJICogc2VuZCB0aGUgY29tbWFuZCB0byBkb3dubG9hZCB0aGUgZGF0YSAtLSB0aGUgU0NTSSBjb21tYW5kCisJCSAqIGlzIHN0aWxsICdhY3RpdmUnIGluIHNvbWUgc2Vuc2UgaW4gdGhlIGRldmljZS4KKwkJICogCisJCSAqIFdlJ3JlIG9ubHkgZ29pbmcgdG8gdHJ5IHNlbmRpbmcgdGhlIGRhdGEgMTAgdGltZXMuIEFmdGVyCisJCSAqIHRoYXQsIHdlIGp1c3QgcmV0dXJuIGEgZmFpbHVyZS4KKwkJICovCisKKwkJaWYgKGk9PTApIHsKKwkJCWNtZGxlbiA9IDE2OworCQkJLy8gV3JpdGUgdG8gbXVsdGlwbGUgcmVnaXN0ZXJzCisJCQkvLyBOb3QgcmVhbGx5IHN1cmUgdGhlIDB4MDcsIDB4MTcsIDB4ZmMsIDB4ZTcgaXMgbmVjZXNzYXJ5IGhlcmUsCisJCQkvLyBidXQgdGhhdCdzIHdoYXQgY2FtZSBvdXQgb2YgdGhlIHRyYWNlIGV2ZXJ5IHNpbmdsZSB0aW1lLgorCQkJY29tbWFuZFswXSA9IDB4NDA7CisJCQljb21tYW5kWzFdID0gYWNjZXNzIHwgVVNCQVRfQ01EX1dSSVRFX1JFR1M7CisJCQljb21tYW5kWzJdID0gMHgwNzsKKwkJCWNvbW1hbmRbM10gPSAweDE3OworCQkJY29tbWFuZFs0XSA9IDB4RkM7CisJCQljb21tYW5kWzVdID0gMHhFNzsKKwkJCWNvbW1hbmRbNl0gPSBMU0Jfb2YobnVtX3JlZ2lzdGVycyoyKTsKKwkJCWNvbW1hbmRbN10gPSBNU0Jfb2YobnVtX3JlZ2lzdGVycyoyKTsKKwkJfSBlbHNlCisJCQljbWRsZW4gPSA4OworCisJCS8vIENvbmRpdGlvbmFsbHkgcmVhZCBvciB3cml0ZSBibG9ja3MKKwkJY29tbWFuZFtjbWRsZW4tOF0gPSAoZGlyZWN0aW9uPT1ETUFfVE9fREVWSUNFID8gMHg0MCA6IDB4QzApOworCQljb21tYW5kW2NtZGxlbi03XSA9IGFjY2VzcyB8CisJCQkJKGRpcmVjdGlvbj09RE1BX1RPX0RFVklDRSA/CisJCQkJIFVTQkFUX0NNRF9DT05EX1dSSVRFX0JMT0NLIDogVVNCQVRfQ01EX0NPTkRfUkVBRF9CTE9DSyk7CisJCWNvbW1hbmRbY21kbGVuLTZdID0gZGF0YV9yZWc7CisJCWNvbW1hbmRbY21kbGVuLTVdID0gc3RhdHVzX3JlZzsKKwkJY29tbWFuZFtjbWRsZW4tNF0gPSB0aW1lb3V0OworCQljb21tYW5kW2NtZGxlbi0zXSA9IHF1YWxpZmllcjsKKwkJY29tbWFuZFtjbWRsZW4tMl0gPSBMU0Jfb2YobGVuKTsKKwkJY29tbWFuZFtjbWRsZW4tMV0gPSBNU0Jfb2YobGVuKTsKKworCQlyZXN1bHQgPSB1c2JhdF9leGVjdXRlX2NvbW1hbmQodXMsIGNvbW1hbmQsIGNtZGxlbik7CisKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJCWlmIChpPT0wKSB7CisKKwkJCWZvciAoaj0wOyBqPG51bV9yZWdpc3RlcnM7IGorKykgeworCQkJCWRhdGFbajw8MV0gPSByZWdpc3RlcnNbal07CisJCQkJZGF0YVsxKyhqPDwxKV0gPSBkYXRhX291dFtqXTsKKwkJCX0KKworCQkJcmVzdWx0ID0gdXNiYXRfYnVsa193cml0ZSh1cywgZGF0YSwgbnVtX3JlZ2lzdGVycyoyKTsKKwkJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkJfQorCisKKwkJLy9VU19ERUJVR1AoIlRyYW5zZmVyICVzICVkIGJ5dGVzLCBzZyBidWZmZXJzICVkXG4iLAorCQkvLwlkaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSA/ICJvdXQiIDogImluIiwKKwkJLy8JbGVuLCB1c2Vfc2cpOworCisJCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2codXMsCisJCQlwaXBlLCBjb250ZW50LCBsZW4sIHVzZV9zZywgTlVMTCk7CisKKwkJLyoKKwkJICogSWYgd2UgZ2V0IGEgc3RhbGwgb24gdGhlIGJ1bGsgZG93bmxvYWQsIHdlJ2xsIHJldHJ5CisJCSAqIHRoZSBidWxrIGRvd25sb2FkIC0tIGJ1dCBub3QgdGhlIFNDU0kgY29tbWFuZCBiZWNhdXNlCisJCSAqIGluIHNvbWUgc2Vuc2UgdGhlIFNDU0kgY29tbWFuZCBpcyBzdGlsbCAnYWN0aXZlJyBhbmQKKwkJICogd2FpdGluZyBmb3IgdGhlIGRhdGEuIERvbid0IGFzayBtZSB3aHkgdGhpcyBzaG91bGQgYmU7CisJCSAqIEknbSBvbmx5IGZvbGxvd2luZyB3aGF0IHRoZSBXaW5kb3plIGRyaXZlciBkaWQuCisJCSAqCisJCSAqIE5vdGUgdGhhdCBhIHN0YWxsIGZvciB0aGUgdGVzdC1hbmQtcmVhZC93cml0ZSBjb21tYW5kIG1lYW5zCisJCSAqIHRoYXQgdGhlIHRlc3QgZmFpbGVkLiBJbiB0aGlzIGNhc2Ugd2UncmUgdGVzdGluZyB0byBtYWtlCisJCSAqIHN1cmUgdGhhdCB0aGUgZGV2aWNlIGlzIGVycm9yLWZyZWUKKwkJICogKGkuZS4gYml0IDAgLS0gQ0hLIC0tIG9mIHN0YXR1cyBpcyAwKS4gVGhlIG1vc3QgbGlrZWx5CisJCSAqIGh5cG90aGVzaXMgaXMgdGhhdCB0aGUgVVNCQVQgY2hpcCBzb21laG93IGtub3dzIHdoYXQKKwkJICogdGhlIGRldmljZSB3aWxsIGFjY2VwdCwgYnV0IGRvZXNuJ3QgZ2l2ZSB0aGUgZGV2aWNlIGFueQorCQkgKiBkYXRhIHVudGlsIGFsbCBkYXRhIGlzIHJlY2VpdmVkLiBUaHVzLCB0aGUgZGV2aWNlIHdvdWxkCisJCSAqIHN0aWxsIGJlIHdhaXRpbmcgZm9yIHRoZSBmaXJzdCBieXRlIG9mIGRhdGEgaWYgYSBzdGFsbAorCQkgKiBvY2N1cnMsIGV2ZW4gaWYgdGhlIHN0YWxsIGltcGxpZXMgdGhhdCBzb21lIGRhdGEgd2FzCisJCSAqIHRyYW5zZmVycmVkLgorCQkgKi8KKworCQlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfU0hPUlQgfHwKKwkJCQlyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9TVEFMTEVEKSB7CisKKwkJCS8qCisJCQkgKiBJZiB3ZSdyZSByZWFkaW5nIGFuZCB3ZSBzdGFsbGVkLCB0aGVuIGNsZWFyCisJCQkgKiB0aGUgYnVsayBvdXRwdXQgcGlwZSBvbmx5IHRoZSBmaXJzdCB0aW1lLgorCQkJICovCisKKwkJCWlmIChkaXJlY3Rpb249PURNQV9GUk9NX0RFVklDRSAmJiBpPT0wKSB7CisJCQkJaWYgKHVzYl9zdG9yX2NsZWFyX2hhbHQodXMsCisJCQkJCQl1cy0+c2VuZF9idWxrX3BpcGUpIDwgMCkKKwkJCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFJlYWQgc3RhdHVzOiBpcyB0aGUgZGV2aWNlIGFuZ3J5LCBvciBqdXN0IGJ1c3k/CisJCQkgKi8KKworIAkJCXJlc3VsdCA9IHVzYmF0X3JlYWQodXMsIFVTQkFUX0FUQSwgCisJCQkJZGlyZWN0aW9uPT1ETUFfVE9fREVWSUNFID8KKwkJCQkJVVNCQVRfQVRBX1NUQVRVUyA6IFVTQkFUX0FUQV9BTFRTVEFUVVMsCisJCQkJc3RhdHVzKTsKKworCQkJaWYgKHJlc3VsdCE9VVNCX1NUT1JfWEZFUl9HT09EKQorCQkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCQlpZiAoKnN0YXR1cyAmIDB4MDEpIC8vIGNoZWNrIGNvbmRpdGlvbgorCQkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCQkJaWYgKCpzdGF0dXMgJiAweDIwKSAvLyBkZXZpY2UgZmF1bHQKKwkJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKworCQkJVVNfREVCVUdQKCJSZWRvaW5nICVzXG4iLAorCQkJICBkaXJlY3Rpb249PURNQV9UT19ERVZJQ0UgPyAid3JpdGUiIDogInJlYWQiKTsKKworCQl9IGVsc2UgaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQllbHNlCisJCQlyZXR1cm4gdXNiYXRfd2FpdF9ub3RfYnVzeSh1cywgbWludXRlcyk7CisKKwl9CisKKwlVU19ERUJVR1AoIkJ1bW1lciEgJXMgYnVsayBkYXRhIDIwIHRpbWVzIGZhaWxlZC5cbiIsCisJCWRpcmVjdGlvbj09RE1BX1RPX0RFVklDRSA/ICJXcml0aW5nIiA6ICJSZWFkaW5nIik7CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKK30KKworLyoKKyAqIFdyaXRlIHRvIG11bHRpcGxlIHJlZ2lzdGVyczoKKyAqIEFsbG93cyB1cyB0byB3cml0ZSBzcGVjaWZpYyBkYXRhIHRvIGFueSByZWdpc3RlcnMuIFRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4KKyAqIGdldHMgcGFja2VkIGluIHRoaXMgc2VxdWVuY2U6IHJlZzAsIGRhdGEwLCByZWcxLCBkYXRhMSwgLi4uLCByZWdOLCBkYXRhTgorICogd2hpY2ggZ2V0cyBzZW50IHRocm91Z2ggYnVsayBvdXQuCisgKiBOb3QgZGVzaWduZWQgZm9yIGxhcmdlIHRyYW5zZmVycyBvZiBkYXRhIQorICovCitzdGF0aWMgaW50IHVzYmF0X211bHRpcGxlX3dyaXRlKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCQl1bnNpZ25lZCBjaGFyICpyZWdpc3RlcnMsCisJCQkJdW5zaWduZWQgY2hhciAqZGF0YV9vdXQsCisJCQkJdW5zaWduZWQgc2hvcnQgbnVtX3JlZ2lzdGVycykKK3sKKwlpbnQgaSwgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cy0+aW9idWY7CisJdW5zaWduZWQgY2hhciAqY29tbWFuZCA9IHVzLT5pb2J1ZjsKKworCUJVR19PTihudW1fcmVnaXN0ZXJzID4gVVNfSU9CVUZfU0laRS8yKTsKKworCS8vIFdyaXRlIHRvIG11bHRpcGxlIHJlZ2lzdGVycywgQVRBIGFjY2VzcworCWNvbW1hbmRbMF0gPSAweDQwOworCWNvbW1hbmRbMV0gPSBVU0JBVF9BVEEgfCBVU0JBVF9DTURfV1JJVEVfUkVHUzsKKworCS8vIE5vIHJlbGV2YW5jZQorCWNvbW1hbmRbMl0gPSAwOworCWNvbW1hbmRbM10gPSAwOworCWNvbW1hbmRbNF0gPSAwOworCWNvbW1hbmRbNV0gPSAwOworCisJLy8gTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkIChpbmNsLiBhZGRyZXNzZXMgYW5kIGRhdGEpCisJY29tbWFuZFs2XSA9IExTQl9vZihudW1fcmVnaXN0ZXJzKjIpOworCWNvbW1hbmRbN10gPSBNU0Jfb2YobnVtX3JlZ2lzdGVycyoyKTsKKworCS8vIFRoZSBzZXR1cCBjb21tYW5kCisJcmVzdWx0ID0gdXNiYXRfZXhlY3V0ZV9jb21tYW5kKHVzLCBjb21tYW5kLCA4KTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCS8vIENyZWF0ZSB0aGUgcmVnL2RhdGEsIHJlZy9kYXRhIHNlcXVlbmNlCisJZm9yIChpPTA7IGk8bnVtX3JlZ2lzdGVyczsgaSsrKSB7CisJCWRhdGFbaTw8MV0gPSByZWdpc3RlcnNbaV07CisJCWRhdGFbMSsoaTw8MSldID0gZGF0YV9vdXRbaV07CisJfQorCisJLy8gU2VuZCB0aGUgZGF0YQorCXJlc3VsdCA9IHVzYmF0X2J1bGtfd3JpdGUodXMsIGRhdGEsIG51bV9yZWdpc3RlcnMqMik7CisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlpZiAodXNiYXRfZ2V0X2RldmljZV90eXBlKHVzKSA9PSBVU0JBVF9ERVZfSFA4MjAwKQorCQlyZXR1cm4gdXNiYXRfd2FpdF9ub3RfYnVzeSh1cywgMCk7CisJZWxzZQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qCisgKiBDb25kaXRpb25hbGx5IHJlYWQgYmxvY2tzIGZyb20gZGV2aWNlOgorICogQWxsb3dzIHVzIHRvIHJlYWQgYmxvY2tzIGZyb20gYSBzcGVjaWZpYyBkYXRhIHJlZ2lzdGVyLCBiYXNlZCB1cG9uIHRoZQorICogY29uZGl0aW9uIHRoYXQgYSBzdGF0dXMgcmVnaXN0ZXIgY2FuIGJlIHN1Y2Nlc3NmdWxseSBtYXNrZWQgd2l0aCBhIHN0YXR1cworICogcXVhbGlmaWVyLiBJZiB0aGlzIGNvbmRpdGlvbiBpcyBub3QgaW5pdGlhbGx5IG1ldCwgdGhlIHJlYWQgd2lsbCB3YWl0CisgKiB1cCB1bnRpbCBhIG1heGltdW0gYW1vdW50IG9mIHRpbWUgaGFzIGVsYXBzZWQsIGFzIHNwZWNpZmllZCBieSB0aW1lb3V0LgorICogVGhlIHJlYWQgd2lsbCBzdGFydCB3aGVuIHRoZSBjb25kaXRpb24gaXMgbWV0LCBvdGhlcndpc2UgdGhlIGNvbW1hbmQgYWJvcnRzLgorICoKKyAqIFRoZSBxdWFsaWZpZXIgZGVmaW5lZCBoZXJlIGlzIG5vdCB0aGUgdmFsdWUgdGhhdCBpcyBtYXNrZWQsIGl0IGRlZmluZXMKKyAqIGNvbmRpdGlvbnMgZm9yIHRoZSB3cml0ZSB0byB0YWtlIHBsYWNlLiBUaGUgYWN0dWFsIG1hc2tlZCBxdWFsaWZpZXIgKGFuZAorICogb3RoZXIgcmVsYXRlZCBkZXRhaWxzKSBhcmUgZGVmaW5lZCBiZWZvcmVoYW5kIHdpdGggX3NldF9zaHV0dGxlX2ZlYXR1cmVzKCkuCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfcmVhZF9ibG9ja3Moc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJCQkJCSB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCQkJCQkJIGludCBsZW4pCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kID0gdXMtPmlvYnVmOworCisJY29tbWFuZFswXSA9IDB4QzA7CisJY29tbWFuZFsxXSA9IFVTQkFUX0FUQSB8IFVTQkFUX0NNRF9DT05EX1JFQURfQkxPQ0s7CisJY29tbWFuZFsyXSA9IFVTQkFUX0FUQV9EQVRBOworCWNvbW1hbmRbM10gPSBVU0JBVF9BVEFfU1RBVFVTOworCWNvbW1hbmRbNF0gPSAweEZEOyAvLyBUaW1lb3V0IChtcyk7CisJY29tbWFuZFs1XSA9IFVTQkFUX1FVQUxfRkNROworCWNvbW1hbmRbNl0gPSBMU0Jfb2YobGVuKTsKKwljb21tYW5kWzddID0gTVNCX29mKGxlbik7CisKKwkvLyBNdWx0aXBsZSBibG9jayByZWFkIHNldHVwIGNvbW1hbmQKKwlyZXN1bHQgPSB1c2JhdF9leGVjdXRlX2NvbW1hbmQodXMsIGNvbW1hbmQsIDgpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkKKwkvLyBSZWFkIHRoZSBibG9ja3Mgd2UganVzdCBhc2tlZCBmb3IKKwlyZXN1bHQgPSB1c2JhdF9idWxrX3JlYWQodXMsIGJ1ZmZlciwgbGVuKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qCisgKiBDb25kaXRpb25hbGx5IHdyaXRlIGJsb2NrcyB0byBkZXZpY2U6CisgKiBBbGxvd3MgdXMgdG8gd3JpdGUgYmxvY2tzIHRvIGEgc3BlY2lmaWMgZGF0YSByZWdpc3RlciwgYmFzZWQgdXBvbiB0aGUKKyAqIGNvbmRpdGlvbiB0aGF0IGEgc3RhdHVzIHJlZ2lzdGVyIGNhbiBiZSBzdWNjZXNzZnVsbHkgbWFza2VkIHdpdGggYSBzdGF0dXMKKyAqIHF1YWxpZmllci4gSWYgdGhpcyBjb25kaXRpb24gaXMgbm90IGluaXRpYWxseSBtZXQsIHRoZSB3cml0ZSB3aWxsIHdhaXQKKyAqIHVwIHVudGlsIGEgbWF4aW11bSBhbW91bnQgb2YgdGltZSBoYXMgZWxhcHNlZCwgYXMgc3BlY2lmaWVkIGJ5IHRpbWVvdXQuCisgKiBUaGUgcmVhZCB3aWxsIHN0YXJ0IHdoZW4gdGhlIGNvbmRpdGlvbiBpcyBtZXQsIG90aGVyd2lzZSB0aGUgY29tbWFuZCBhYm9ydHMuCisgKgorICogVGhlIHF1YWxpZmllciBkZWZpbmVkIGhlcmUgaXMgbm90IHRoZSB2YWx1ZSB0aGF0IGlzIG1hc2tlZCwgaXQgZGVmaW5lcworICogY29uZGl0aW9ucyBmb3IgdGhlIHdyaXRlIHRvIHRha2UgcGxhY2UuIFRoZSBhY3R1YWwgbWFza2VkIHF1YWxpZmllciAoYW5kCisgKiBvdGhlciByZWxhdGVkIGRldGFpbHMpIGFyZSBkZWZpbmVkIGJlZm9yZWhhbmQgd2l0aCBfc2V0X3NodXR0bGVfZmVhdHVyZXMoKS4KKyAqLworc3RhdGljIGludCB1c2JhdF93cml0ZV9ibG9ja3Moc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJCQkJCSAgdW5zaWduZWQgY2hhciAqYnVmZmVyLAorCQkJCQkJCSAgaW50IGxlbikKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmQgPSB1cy0+aW9idWY7CisKKwljb21tYW5kWzBdID0gMHg0MDsKKwljb21tYW5kWzFdID0gVVNCQVRfQVRBIHwgVVNCQVRfQ01EX0NPTkRfV1JJVEVfQkxPQ0s7CisJY29tbWFuZFsyXSA9IFVTQkFUX0FUQV9EQVRBOworCWNvbW1hbmRbM10gPSBVU0JBVF9BVEFfU1RBVFVTOworCWNvbW1hbmRbNF0gPSAweEZEOyAvLyBUaW1lb3V0IChtcykKKwljb21tYW5kWzVdID0gVVNCQVRfUVVBTF9GQ1E7CisJY29tbWFuZFs2XSA9IExTQl9vZihsZW4pOworCWNvbW1hbmRbN10gPSBNU0Jfb2YobGVuKTsKKworCS8vIE11bHRpcGxlIGJsb2NrIHdyaXRlIHNldHVwIGNvbW1hbmQKKwlyZXN1bHQgPSB1c2JhdF9leGVjdXRlX2NvbW1hbmQodXMsIGNvbW1hbmQsIDgpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkKKwkvLyBXcml0ZSB0aGUgZGF0YQorCXJlc3VsdCA9IHVzYmF0X2J1bGtfd3JpdGUodXMsIGJ1ZmZlciwgbGVuKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qCisgKiBSZWFkIHRoZSBVc2VyIElPIHJlZ2lzdGVyCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfcmVhZF91c2VyX2lvKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgY2hhciAqZGF0YV9mbGFncykKK3sKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfY3RybF90cmFuc2Zlcih1cywKKwkJdXMtPnJlY3ZfY3RybF9waXBlLAorCQlVU0JBVF9DTURfVUlPLAorCQkweEMwLAorCQkwLAorCQkwLAorCQlkYXRhX2ZsYWdzLAorCQlVU0JBVF9VSU9fUkVBRCk7CisKKwlVU19ERUJVR1AoInVzYmF0X3JlYWRfdXNlcl9pbzogVUlPIHJlZ2lzdGVyIHJlYWRzICUwMlhcbiIsICh1bnNpZ25lZCBzaG9ydCkgKCpkYXRhX2ZsYWdzKSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogV3JpdGUgdG8gdGhlIFVzZXIgSU8gcmVnaXN0ZXIKKyAqLworc3RhdGljIGludCB1c2JhdF93cml0ZV91c2VyX2lvKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGVuYWJsZV9mbGFncywKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGFfZmxhZ3MpCit7CisJcmV0dXJuIHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIodXMsCisJCXVzLT5zZW5kX2N0cmxfcGlwZSwKKwkJVVNCQVRfQ01EX1VJTywKKwkJMHg0MCwKKwkJc2hvcnRfcGFjayhlbmFibGVfZmxhZ3MsIGRhdGFfZmxhZ3MpLAorCQkwLAorCQlOVUxMLAorCQlVU0JBVF9VSU9fV1JJVEUpOworfQorCisvKgorICogUmVzZXQgdGhlIGRldmljZQorICogT2Z0ZW4gbmVlZGVkIG9uIG1lZGlhIGNoYW5nZS4KKyAqLworc3RhdGljIGludCB1c2JhdF9kZXZpY2VfcmVzZXQoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCWludCByYzsKKworCS8vIFJlc2V0IHBlcmlwaGVyYWwsIGVuYWJsZSBwZXJpcGhlcmFsIGNvbnRyb2wgc2lnbmFscworCS8vIChicmluZyByZXNldCBzaWduYWwgdXApCisJcmMgPSB1c2JhdF93cml0ZV91c2VyX2lvKHVzLAorCQkJCQkJCSBVU0JBVF9VSU9fRFJWUlNUIHwgVVNCQVRfVUlPX09FMSB8IFVTQkFUX1VJT19PRTAsCisJCQkJCQkJIFVTQkFUX1VJT19FUEFEIHwgVVNCQVRfVUlPXzEpOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCQkKKwkvLyBFbmFibGUgcGVyaXBoZXJhbCBjb250cm9sIHNpZ25hbHMKKwkvLyAoYnJpbmcgcmVzZXQgc2lnbmFsIGRvd24pCisJcmMgPSB1c2JhdF93cml0ZV91c2VyX2lvKHVzLAorCQkJCQkJCSBVU0JBVF9VSU9fT0UxICB8IFVTQkFUX1VJT19PRTAsCisJCQkJCQkJIFVTQkFUX1VJT19FUEFEIHwgVVNCQVRfVUlPXzEpOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qCisgKiBFbmFibGUgY2FyZCBkZXRlY3QKKyAqLworc3RhdGljIGludCB1c2JhdF9kZXZpY2VfZW5hYmxlX2NkdChzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJaW50IHJjOworCisJLy8gRW5hYmxlIHBlcmlwaGVyYWwgY29udHJvbCBzaWduYWxzIGFuZCBjYXJkIGRldGVjdAorCXJjID0gdXNiYXRfd3JpdGVfdXNlcl9pbyh1cywKKwkJCQkJCQkgVVNCQVRfVUlPX0FDS0QgfCBVU0JBVF9VSU9fT0UxICB8IFVTQkFUX1VJT19PRTAsCisJCQkJCQkJIFVTQkFUX1VJT19FUEFEIHwgVVNCQVRfVUlPXzEpOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgaWYgbWVkaWEgaXMgcHJlc2VudC4KKyAqLworc3RhdGljIGludCB1c2JhdF9mbGFzaF9jaGVja19tZWRpYV9wcmVzZW50KHVuc2lnbmVkIGNoYXIgKnVpbykKK3sKKwlpZiAoKnVpbyAmIFVTQkFUX1VJT19VSTApIHsKKwkJVVNfREVCVUdQKCJ1c2JhdF9mbGFzaF9jaGVja19tZWRpYV9wcmVzZW50OiBubyBtZWRpYSBkZXRlY3RlZFxuIik7CisJCXJldHVybiBVU0JBVF9GTEFTSF9NRURJQV9OT05FOworCX0KKworCXJldHVybiBVU0JBVF9GTEFTSF9NRURJQV9DRjsKK30KKworLyoKKyAqIERldGVybWluZSBpZiBtZWRpYSBoYXMgY2hhbmdlZCBzaW5jZSBsYXN0IG9wZXJhdGlvbgorICovCitzdGF0aWMgaW50IHVzYmF0X2ZsYXNoX2NoZWNrX21lZGlhX2NoYW5nZWQodW5zaWduZWQgY2hhciAqdWlvKQoreworCWlmICgqdWlvICYgVVNCQVRfVUlPXzApIHsKKwkJVVNfREVCVUdQKCJ1c2JhdF9mbGFzaF9jaGVja19tZWRpYV9jaGFuZ2VkOiBtZWRpYSBjaGFuZ2UgZGV0ZWN0ZWRcbiIpOworCQlyZXR1cm4gVVNCQVRfRkxBU0hfTUVESUFfQ0hBTkdFRDsKKwl9CisKKwlyZXR1cm4gVVNCQVRfRkxBU0hfTUVESUFfU0FNRTsKK30KKworLyoKKyAqIENoZWNrIGZvciBtZWRpYSBjaGFuZ2UgLyBubyBtZWRpYSBhbmQgaGFuZGxlIHRoZSBzaXR1YXRpb24gYXBwcm9wcmlhdGVseQorICovCitzdGF0aWMgaW50IHVzYmF0X2ZsYXNoX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCQkgICBzdHJ1Y3QgdXNiYXRfaW5mbyAqaW5mbykKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgY2hhciAqdWlvID0gdXMtPmlvYnVmOworCisJcmMgPSB1c2JhdF9yZWFkX3VzZXJfaW8odXMsIHVpbyk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCS8vIENoZWNrIGZvciBtZWRpYSBleGlzdGFuY2UKKwlyYyA9IHVzYmF0X2ZsYXNoX2NoZWNrX21lZGlhX3ByZXNlbnQodWlvKTsKKwlpZiAocmMgPT0gVVNCQVRfRkxBU0hfTUVESUFfTk9ORSkgeworCQlpbmZvLT5zZW5zZV9rZXkgPSAweDAyOworCQlpbmZvLT5zZW5zZV9hc2MgPSAweDNBOworCQlpbmZvLT5zZW5zZV9hc2NxID0gMHgwMDsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJfQorCisJLy8gQ2hlY2sgZm9yIG1lZGlhIGNoYW5nZQorCXJjID0gdXNiYXRfZmxhc2hfY2hlY2tfbWVkaWFfY2hhbmdlZCh1aW8pOworCWlmIChyYyA9PSBVU0JBVF9GTEFTSF9NRURJQV9DSEFOR0VEKSB7CisKKwkJLy8gUmVzZXQgYW5kIHJlLWVuYWJsZSBjYXJkIGRldGVjdAorCQlyYyA9IHVzYmF0X2RldmljZV9yZXNldCh1cyk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCXJldHVybiByYzsKKwkJcmMgPSB1c2JhdF9kZXZpY2VfZW5hYmxlX2NkdCh1cyk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCXJldHVybiByYzsKKworCQltc2xlZXAoNTApOworCisJCXJjID0gdXNiYXRfcmVhZF91c2VyX2lvKHVzLCB1aW8pOworCQlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJCisJCWluZm8tPnNlbnNlX2tleSA9IFVOSVRfQVRURU5USU9OOworCQlpbmZvLT5zZW5zZV9hc2MgPSAweDI4OworCQlpbmZvLT5zZW5zZV9hc2NxID0gMHgwMDsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJfQorCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworfQorCisvKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgd2UgYXJlIGNvbnRyb2xsaW5nIGEgZmxhc2gtYmFzZWQgcmVhZGVyL3dyaXRlciwKKyAqIG9yIGEgSFA4MjAwLWJhc2VkIENEIGRyaXZlLgorICogU2V0cyB0cmFuc3BvcnQgZnVuY3Rpb25zIGFzIGFwcHJvcHJpYXRlLgorICovCitzdGF0aWMgaW50IHVzYmF0X2lkZW50aWZ5X2RldmljZShzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJIHN0cnVjdCB1c2JhdF9pbmZvICppbmZvKQoreworCWludCByYzsKKwl1bnNpZ25lZCBjaGFyIHN0YXR1czsKKworCWlmICghdXMgfHwgIWluZm8pCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlyYyA9IHVzYmF0X2RldmljZV9yZXNldCh1cyk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlyZXR1cm4gcmM7CisKKwkvKgorCSAqIEJ5IGV4YW1pbmluZyB0aGUgZGV2aWNlIHNpZ25hdHVyZSBhZnRlciBhIHJlc2V0LCB3ZSBjYW4gaWRlbnRpZnkKKwkgKiB3aGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIEFUQVBJIHBhY2tldCBpbnRlcmZhY2UuCisJICogVGhlIGZsYXNoLWRldmljZXMgZG8gbm90IHN1cHBvcnQgdGhpcywgd2hlcmVhcyB0aGUgSFAgQ0RSVydzIG9idmlvdXNseQorCSAqIGRvLgorCSAqCisJICogVGhpcyBtZXRob2QgaXMgbm90IGlkZWFsLCBidXQgd29ya3MgYmVjYXVzZSBubyBvdGhlciBkZXZpY2VzIGhhdmUgYmVlbgorCSAqIHByb2R1Y2VkIGJhc2VkIG9uIHRoZSBVU0JBVC9VU0JBVDAyLgorCSAqCisJICogU2VjdGlvbiA5LjEgb2YgdGhlIEFUQVBJLTQgc3BlYyBzdGF0ZXMgKGFtb25nc3Qgb3RoZXIgdGhpbmdzKSB0aGF0CisJICogYWZ0ZXIgYSBkZXZpY2UgcmVzZXQsIGEgQ3lsaW5kZXIgbG93IG9mIDB4MTQgaW5kaWNhdGVzIHRoYXQgdGhlIGRldmljZQorCSAqIGRvZXMgc3VwcG9ydCBwYWNrZXQgY29tbWFuZHMuCisJICovCisJcmMgPSB1c2JhdF9yZWFkKHVzLCBVU0JBVF9BVEEsIFVTQkFUX0FUQV9MQkFfTUUsICZzdGF0dXMpOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlVU19ERUJVR1AoInVzYmF0X2lkZW50aWZ5X2RldmljZTogQ3lsaW5kZXIgbG93IGlzICUwMlhcbiIsIHN0YXR1cyk7CisKKwlpZiAoc3RhdHVzID09IDB4MTQpIHsKKwkJLy8gRGV2aWNlIGlzIEhQIDgyMDAKKwkJVVNfREVCVUdQKCJ1c2JhdF9pZGVudGlmeV9kZXZpY2U6IERldGVjdGVkIEhQODIwMCBDRFJXXG4iKTsKKwkJaW5mby0+ZGV2aWNldHlwZSA9IFVTQkFUX0RFVl9IUDgyMDA7CisJfSBlbHNlIHsKKwkJLy8gRGV2aWNlIGlzIGEgQ29tcGFjdEZsYXNoIHJlYWRlci93cml0ZXIKKwkJVVNfREVCVUdQKCJ1c2JhdF9pZGVudGlmeV9kZXZpY2U6IERldGVjdGVkIEZsYXNoIHJlYWRlci93cml0ZXJcbiIpOworCQlpbmZvLT5kZXZpY2V0eXBlID0gVVNCQVRfREVWX0ZMQVNIOworCX0KKworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKK30KKworLyoKKyAqIFNldCB0aGUgdHJhbnNwb3J0IGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSBkZXZpY2UgdHlwZQorICovCitzdGF0aWMgaW50IHVzYmF0X3NldF90cmFuc3BvcnQoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJICAgICAgIHN0cnVjdCB1c2JhdF9pbmZvICppbmZvKQoreworCWludCByYzsKKworCWlmICghaW5mby0+ZGV2aWNldHlwZSkgeworCQlyYyA9IHVzYmF0X2lkZW50aWZ5X2RldmljZSh1cywgaW5mbyk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCQkJVVNfREVCVUdQKCJ1c2JhdF9zZXRfdHJhbnNwb3J0OiBDb3VsZCBub3QgaWRlbnRpZnkgZGV2aWNlXG4iKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJaWYgKHVzYmF0X2dldF9kZXZpY2VfdHlwZSh1cykgPT0gVVNCQVRfREVWX0hQODIwMCkKKwkJdXMtPnRyYW5zcG9ydCA9IHVzYmF0X2hwODIwMGVfdHJhbnNwb3J0OworCWVsc2UgaWYgKHVzYmF0X2dldF9kZXZpY2VfdHlwZSh1cykgPT0gVVNCQVRfREVWX0ZMQVNIKQorCQl1cy0+dHJhbnNwb3J0ID0gdXNiYXRfZmxhc2hfdHJhbnNwb3J0OworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWFkIHRoZSBtZWRpYSBjYXBhY2l0eQorICovCitzdGF0aWMgaW50IHVzYmF0X2ZsYXNoX2dldF9zZWN0b3JfY291bnQoc3RydWN0IHVzX2RhdGEgKnVzLAorCQkJCQlzdHJ1Y3QgdXNiYXRfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBjaGFyIHJlZ2lzdGVyc1szXSA9IHsKKwkJVVNCQVRfQVRBX1NFQ0NOVCwKKwkJVVNCQVRfQVRBX0RFVklDRSwKKwkJVVNCQVRfQVRBX0NNRCwKKwl9OworCXVuc2lnbmVkIGNoYXIgIGNvbW1hbmRbM10gPSB7IDB4MDEsIDB4QTAsIDB4RUMgfTsKKwl1bnNpZ25lZCBjaGFyICpyZXBseTsKKwl1bnNpZ25lZCBjaGFyIHN0YXR1czsKKwlpbnQgcmM7CisKKwlpZiAoIXVzIHx8ICFpbmZvKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJcmVwbHkgPSBrbWFsbG9jKDUxMiwgR0ZQX05PSU8pOworCWlmICghcmVwbHkpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkvLyBBVEFQSSBjb21tYW5kIDogSURFTlRJRlkgREVWSUNFCisJcmMgPSB1c2JhdF9tdWx0aXBsZV93cml0ZSh1cywgcmVnaXN0ZXJzLCBjb21tYW5kLCAzKTsKKwlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCVVTX0RFQlVHUCgidXNiYXRfZmxhc2hfZ2V0X3NlY3Rvcl9jb3VudDogR2FoISBpZGVudGlmeV9kZXZpY2UgZmFpbGVkXG4iKTsKKwkJcmMgPSBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCWdvdG8gbGVhdmU7CisJfQorCisJLy8gUmVhZCBkZXZpY2Ugc3RhdHVzCisJaWYgKHVzYmF0X2dldF9zdGF0dXModXMsICZzdGF0dXMpICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgeworCQlyYyA9IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwltc2xlZXAoMTAwKTsKKworCS8vIFJlYWQgdGhlIGRldmljZSBpZGVudGlmaWNhdGlvbiBkYXRhCisJcmMgPSB1c2JhdF9yZWFkX2Jsb2NrKHVzLCByZXBseSwgNTEyKTsKKwlpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCWdvdG8gbGVhdmU7CisKKwlpbmZvLT5zZWN0b3JzID0gKCh1MzIpKHJlcGx5WzExN10pIDw8IDI0KSB8CisJCSgodTMyKShyZXBseVsxMTZdKSA8PCAxNikgfAorCQkoKHUzMikocmVwbHlbMTE1XSkgPDwgIDgpIHwKKwkJKCh1MzIpKHJlcGx5WzExNF0pICAgICAgKTsKKworCXJjID0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisKKyBsZWF2ZToKKwlrZnJlZShyZXBseSk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogUmVhZCBkYXRhIGZyb20gZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfZmxhc2hfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywKKwkJCQkJCQkJIHN0cnVjdCB1c2JhdF9pbmZvICppbmZvLAorCQkJCQkJCQkgdTMyIHNlY3RvciwKKwkJCQkJCQkJIHUzMiBzZWN0b3JzKQoreworCXVuc2lnbmVkIGNoYXIgcmVnaXN0ZXJzWzddID0geworCQlVU0JBVF9BVEFfRkVBVFVSRVMsCisJCVVTQkFUX0FUQV9TRUNDTlQsCisJCVVTQkFUX0FUQV9TRUNOVU0sCisJCVVTQkFUX0FUQV9MQkFfTUUsCisJCVVTQkFUX0FUQV9MQkFfSEksCisJCVVTQkFUX0FUQV9ERVZJQ0UsCisJCVVTQkFUX0FUQV9TVEFUVVMsCisJfTsKKwl1bnNpZ25lZCBjaGFyIGNvbW1hbmRbN107CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgIHRoaXN0aW1lOworCXVuc2lnbmVkIGludCB0b3RhbGxlbiwgYWxsb2NsZW47CisJaW50IGxlbiwgcmVzdWx0OworCXVuc2lnbmVkIGludCBzZ19pZHggPSAwLCBzZ19vZmZzZXQgPSAwOworCisJcmVzdWx0ID0gdXNiYXRfZmxhc2hfY2hlY2tfbWVkaWEodXMsIGluZm8pOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCXJldHVybiByZXN1bHQ7CisKKwkvLyB3ZSdyZSB3b3JraW5nIGluIExCQSBtb2RlLiAgYWNjb3JkaW5nIHRvIHRoZSBBVEEgc3BlYywKKwkvLyB3ZSBjYW4gc3VwcG9ydCB1cCB0byAyOC1iaXQgYWRkcmVzc2luZy4gIEkgZG9uJ3Qga25vdyBpZiBKdW1wc2hvdAorCS8vIHN1cHBvcnRzIGJleW9uZCAyNC1iaXQgYWRkcmVzc2luZy4gIEl0J3Mga2luZCBvZiBoYXJkIHRvIHRlc3QKKwkvLyBzaW5jZSBpdCByZXF1aXJlcyA+IDhHQiBDRiBjYXJkLgorCisJaWYgKHNlY3RvciA+IDB4MEZGRkZGRkYpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwl0b3RhbGxlbiA9IHNlY3RvcnMgKiBpbmZvLT5zc2l6ZTsKKworCS8vIFNpbmNlIHdlIGRvbid0IHJlYWQgbW9yZSB0aGFuIDY0IEtCIGF0IGEgdGltZSwgd2UgaGF2ZSB0byBjcmVhdGUKKwkvLyBhIGJvdW5jZSBidWZmZXIgYW5kIG1vdmUgdGhlIGRhdGEgYSBwaWVjZSBhdCBhIHRpbWUgYmV0d2VlbiB0aGUKKwkvLyBib3VuY2UgYnVmZmVyIGFuZCB0aGUgYWN0dWFsIHRyYW5zZmVyIGJ1ZmZlci4KKworCWFsbG9jbGVuID0gbWluKHRvdGFsbGVuLCA2NTUzNnUpOworCWJ1ZmZlciA9IGttYWxsb2MoYWxsb2NsZW4sIEdGUF9OT0lPKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlkbyB7CisJCS8vIGxvb3AsIG5ldmVyIGFsbG9jYXRlIG9yIHRyYW5zZmVyIG1vcmUgdGhhbiA2NGsgYXQgb25jZQorCQkvLyAobWluKDEyOGssIDI1NSppbmZvLT5zc2l6ZSkgaXMgdGhlIHJlYWwgbGltaXQpCisJCWxlbiA9IG1pbih0b3RhbGxlbiwgYWxsb2NsZW4pOworCQl0aGlzdGltZSA9IChsZW4gLyBpbmZvLT5zc2l6ZSkgJiAweGZmOworIAorCQkvLyBBVEFQSSBjb21tYW5kIDB4MjAgKFJFQUQgU0VDVE9SUykKKwkJdXNiYXRfcGFja19hdGFwaV9zZWN0b3JfY21kKGNvbW1hbmQsIHRoaXN0aW1lLCBzZWN0b3IsIDB4MjApOworCisJCS8vIFdyaXRlL2V4ZWN1dGUgQVRBUEkgcmVhZCBjb21tYW5kCisJCXJlc3VsdCA9IHVzYmF0X211bHRpcGxlX3dyaXRlKHVzLCByZWdpc3RlcnMsIGNvbW1hbmQsIDcpOworCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQkJZ290byBsZWF2ZTsKKworCQkvLyBSZWFkIHRoZSBkYXRhIHdlIGp1c3QgcmVxdWVzdGVkCisJCXJlc3VsdCA9IHVzYmF0X3JlYWRfYmxvY2tzKHVzLCBidWZmZXIsIGxlbik7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQlnb3RvIGxlYXZlOworICAJIAorCQlVU19ERUJVR1AoInVzYmF0X2ZsYXNoX3JlYWRfZGF0YTogICVkIGJ5dGVzXG4iLCBsZW4pOworCQorCQkvLyBTdG9yZSB0aGUgZGF0YSBpbiB0aGUgdHJhbnNmZXIgYnVmZmVyCisJCXVzYl9zdG9yX2FjY2Vzc194ZmVyX2J1ZihidWZmZXIsIGxlbiwgdXMtPnNyYiwKKwkJCQkJICZzZ19pZHgsICZzZ19vZmZzZXQsIFRPX1hGRVJfQlVGKTsKKworCQlzZWN0b3IgKz0gdGhpc3RpbWU7CisJCXRvdGFsbGVuIC09IGxlbjsKKwl9IHdoaWxlICh0b3RhbGxlbiA+IDApOworCisJa2ZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CisKK2xlYXZlOgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKK30KKworLyoKKyAqIFdyaXRlIGRhdGEgdG8gZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgdXNiYXRfZmxhc2hfd3JpdGVfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJCQkJCSAgc3RydWN0IHVzYmF0X2luZm8gKmluZm8sCisJCQkJCQkJCSAgdTMyIHNlY3RvciwKKwkJCQkJCQkJICB1MzIgc2VjdG9ycykKK3sKKwl1bnNpZ25lZCBjaGFyIHJlZ2lzdGVyc1s3XSA9IHsKKwkJVVNCQVRfQVRBX0ZFQVRVUkVTLAorCQlVU0JBVF9BVEFfU0VDQ05ULAorCQlVU0JBVF9BVEFfU0VDTlVNLAorCQlVU0JBVF9BVEFfTEJBX01FLAorCQlVU0JBVF9BVEFfTEJBX0hJLAorCQlVU0JBVF9BVEFfREVWSUNFLAorCQlVU0JBVF9BVEFfU1RBVFVTLAorCX07CisJdW5zaWduZWQgY2hhciBjb21tYW5kWzddOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBjaGFyICB0aGlzdGltZTsKKwl1bnNpZ25lZCBpbnQgdG90YWxsZW4sIGFsbG9jbGVuOworCWludCBsZW4sIHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgc2dfaWR4ID0gMCwgc2dfb2Zmc2V0ID0gMDsKKworCXJlc3VsdCA9IHVzYmF0X2ZsYXNoX2NoZWNrX21lZGlhKHVzLCBpbmZvKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlyZXR1cm4gcmVzdWx0OworCisJLy8gd2UncmUgd29ya2luZyBpbiBMQkEgbW9kZS4gIGFjY29yZGluZyB0byB0aGUgQVRBIHNwZWMsCisJLy8gd2UgY2FuIHN1cHBvcnQgdXAgdG8gMjgtYml0IGFkZHJlc3NpbmcuICBJIGRvbid0IGtub3cgaWYgSnVtcHNob3QKKwkvLyBzdXBwb3J0cyBiZXlvbmQgMjQtYml0IGFkZHJlc3NpbmcuICBJdCdzIGtpbmQgb2YgaGFyZCB0byB0ZXN0CisJLy8gc2luY2UgaXQgcmVxdWlyZXMgPiA4R0IgQ0YgY2FyZC4KKworCWlmIChzZWN0b3IgPiAweDBGRkZGRkZGKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJdG90YWxsZW4gPSBzZWN0b3JzICogaW5mby0+c3NpemU7CisKKwkvLyBTaW5jZSB3ZSBkb24ndCB3cml0ZSBtb3JlIHRoYW4gNjQgS0IgYXQgYSB0aW1lLCB3ZSBoYXZlIHRvIGNyZWF0ZQorCS8vIGEgYm91bmNlIGJ1ZmZlciBhbmQgbW92ZSB0aGUgZGF0YSBhIHBpZWNlIGF0IGEgdGltZSBiZXR3ZWVuIHRoZQorCS8vIGJvdW5jZSBidWZmZXIgYW5kIHRoZSBhY3R1YWwgdHJhbnNmZXIgYnVmZmVyLgorCisJYWxsb2NsZW4gPSBtaW4odG90YWxsZW4sIDY1NTM2dSk7CisJYnVmZmVyID0ga21hbGxvYyhhbGxvY2xlbiwgR0ZQX05PSU8pOworCWlmIChidWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCWRvIHsKKwkJLy8gbG9vcCwgbmV2ZXIgYWxsb2NhdGUgb3IgdHJhbnNmZXIgbW9yZSB0aGFuIDY0ayBhdCBvbmNlCisJCS8vIChtaW4oMTI4aywgMjU1KmluZm8tPnNzaXplKSBpcyB0aGUgcmVhbCBsaW1pdCkKKwkJbGVuID0gbWluKHRvdGFsbGVuLCBhbGxvY2xlbik7CisJCXRoaXN0aW1lID0gKGxlbiAvIGluZm8tPnNzaXplKSAmIDB4ZmY7CisKKwkJLy8gR2V0IHRoZSBkYXRhIGZyb20gdGhlIHRyYW5zZmVyIGJ1ZmZlcgorCQl1c2Jfc3Rvcl9hY2Nlc3NfeGZlcl9idWYoYnVmZmVyLCBsZW4sIHVzLT5zcmIsCisJCQkJCSAmc2dfaWR4LCAmc2dfb2Zmc2V0LCBGUk9NX1hGRVJfQlVGKTsKKworCQkvLyBBVEFQSSBjb21tYW5kIDB4MzAgKFdSSVRFIFNFQ1RPUlMpCisJCXVzYmF0X3BhY2tfYXRhcGlfc2VjdG9yX2NtZChjb21tYW5kLCB0aGlzdGltZSwgc2VjdG9yLCAweDMwKTsJCQorCisJCS8vIFdyaXRlL2V4ZWN1dGUgQVRBUEkgd3JpdGUgY29tbWFuZAorCQlyZXN1bHQgPSB1c2JhdF9tdWx0aXBsZV93cml0ZSh1cywgcmVnaXN0ZXJzLCBjb21tYW5kLCA3KTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCWdvdG8gbGVhdmU7CisKKwkJLy8gV3JpdGUgdGhlIGRhdGEKKwkJcmVzdWx0ID0gdXNiYXRfd3JpdGVfYmxvY2tzKHVzLCBidWZmZXIsIGxlbik7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCQlnb3RvIGxlYXZlOworCisJCXNlY3RvciArPSB0aGlzdGltZTsKKwkJdG90YWxsZW4gLT0gbGVuOworCX0gd2hpbGUgKHRvdGFsbGVuID4gMCk7CisKKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXN1bHQ7CisKK2xlYXZlOgorCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKK30KKworLyoKKyAqIFNxdWVlemUgYSBwb3RlbnRpYWxseSBodWdlICg+IDY1NTM1IGJ5dGUpIHJlYWQxMCBjb21tYW5kIGludG8KKyAqIGEgbGl0dGxlICggPD0gNjU1MzUgYnl0ZSkgQVRBUEkgcGlwZQorICovCitzdGF0aWMgaW50IHVzYmF0X2hwODIwMGVfaGFuZGxlX3JlYWQxMChzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKnJlZ2lzdGVycywKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJCQkgICAgICAgc3RydWN0IHNjc2lfY21uZCAqc3JiKQoreworCWludCByZXN1bHQgPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdW5zaWduZWQgaW50IGxlbjsKKwl1bnNpZ25lZCBpbnQgc2VjdG9yOworCXVuc2lnbmVkIGludCBzZ19zZWdtZW50ID0gMDsKKwl1bnNpZ25lZCBpbnQgc2dfb2Zmc2V0ID0gMDsKKworCVVTX0RFQlVHUCgiaGFuZGxlX3JlYWQxMDogdHJhbnNmZXJzaXplICVkXG4iLAorCQlzcmItPnRyYW5zZmVyc2l6ZSk7CisKKwlpZiAoc3JiLT5yZXF1ZXN0X2J1ZmZsZW4gPCAweDEwMDAwKSB7CisKKwkJcmVzdWx0ID0gdXNiYXRfaHA4MjAwZV9yd19ibG9ja190ZXN0KHVzLCBVU0JBVF9BVEEsIAorCQkJcmVnaXN0ZXJzLCBkYXRhLCAxOSwKKwkJCVVTQkFUX0FUQV9EQVRBLCBVU0JBVF9BVEFfU1RBVFVTLCAweEZELAorCQkJKFVTQkFUX1FVQUxfRkNRIHwgVVNCQVRfUVVBTF9BTFEpLAorCQkJRE1BX0ZST01fREVWSUNFLAorCQkJc3JiLT5yZXF1ZXN0X2J1ZmZlciwgCisJCQlzcmItPnJlcXVlc3RfYnVmZmxlbiwgc3JiLT51c2Vfc2csIDEpOworCisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoKKwkgKiBTaW5jZSB3ZSdyZSByZXF1ZXN0aW5nIG1vcmUgZGF0YSB0aGFuIHdlIGNhbiBoYW5kbGUgaW4KKwkgKiBhIHNpbmdsZSByZWFkIGNvbW1hbmQgKG1heCBpcyA2NGstMSksIHdlIHdpbGwgcGVyZm9ybQorCSAqIG11bHRpcGxlIHJlYWRzLCBidXQgZWFjaCByZWFkIG11c3QgYmUgaW4gbXVsdGlwbGVzIG9mCisJICogYSBzZWN0b3IuICBMdWNraWx5IHRoZSBzZWN0b3Igc2l6ZSBpcyBpbiBzcmItPnRyYW5zZmVyc2l6ZQorCSAqIChzZWUgbGludXgvZHJpdmVycy9zY3NpL3NyLmMpLgorCSAqLworCisJaWYgKGRhdGFbNyswXSA9PSBHUENNRF9SRUFEX0NEKSB7CisJCWxlbiA9IHNob3J0X3BhY2soZGF0YVs3KzldLCBkYXRhWzcrOF0pOworCQlsZW4gPDw9IDE2OworCQlsZW4gfD0gZGF0YVs3KzddOworCQlVU19ERUJVR1AoImhhbmRsZV9yZWFkMTA6IEdQQ01EX1JFQURfQ0Q6IGxlbiAlZFxuIiwgbGVuKTsKKwkJc3JiLT50cmFuc2ZlcnNpemUgPSBzcmItPnJlcXVlc3RfYnVmZmxlbi9sZW47CisJfQorCisJaWYgKCFzcmItPnRyYW5zZmVyc2l6ZSkgIHsKKwkJc3JiLT50cmFuc2ZlcnNpemUgPSAyMDQ4OyAvKiBBIGd1ZXNzICovCisJCVVTX0RFQlVHUCgiaGFuZGxlX3JlYWQxMDogdHJhbnNmZXJzaXplIDAsIGZvcmNpbmcgJWRcbiIsCisJCQlzcmItPnRyYW5zZmVyc2l6ZSk7CisJfQorCisJLy8gU2luY2Ugd2Ugb25seSByZWFkIGluIG9uZSBibG9jayBhdCBhIHRpbWUsIHdlIGhhdmUgdG8gY3JlYXRlCisJLy8gYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2UgYXQgYSB0aW1lIGJldHdlZW4gdGhlCisJLy8gYm91bmNlIGJ1ZmZlciBhbmQgdGhlIGFjdHVhbCB0cmFuc2ZlciBidWZmZXIuCisKKwlsZW4gPSAoNjU1MzUvc3JiLT50cmFuc2ZlcnNpemUpICogc3JiLT50cmFuc2ZlcnNpemU7CisJVVNfREVCVUdQKCJNYXggcmVhZCBpcyAlZCBieXRlc1xuIiwgbGVuKTsKKwlsZW4gPSBtaW4obGVuLCBzcmItPnJlcXVlc3RfYnVmZmxlbik7CisJYnVmZmVyID0ga21hbGxvYyhsZW4sIEdGUF9OT0lPKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpIC8vIGJsb29keSBoZWxsIQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwlzZWN0b3IgPSBzaG9ydF9wYWNrKGRhdGFbNyszXSwgZGF0YVs3KzJdKTsKKwlzZWN0b3IgPDw9IDE2OworCXNlY3RvciB8PSBzaG9ydF9wYWNrKGRhdGFbNys1XSwgZGF0YVs3KzRdKTsKKwl0cmFuc2ZlcnJlZCA9IDA7CisKKwlzZ19zZWdtZW50ID0gMDsgLy8gZm9yIGtlZXBpbmcgdHJhY2sgb2Ygd2hlcmUgd2UgYXJlIGluCisJc2dfb2Zmc2V0ID0gMDsgIC8vIHRoZSBzY2F0dGVyL2dhdGhlciBsaXN0CisKKwl3aGlsZSAodHJhbnNmZXJyZWQgIT0gc3JiLT5yZXF1ZXN0X2J1ZmZsZW4pIHsKKworCQlpZiAobGVuID4gc3JiLT5yZXF1ZXN0X2J1ZmZsZW4gLSB0cmFuc2ZlcnJlZCkKKwkJCWxlbiA9IHNyYi0+cmVxdWVzdF9idWZmbGVuIC0gdHJhbnNmZXJyZWQ7CisKKwkJZGF0YVszXSA9IGxlbiYweEZGOyAJICAvLyAoY3lsTCkgPSBleHBlY3RlZCBsZW5ndGggKEwpCisJCWRhdGFbNF0gPSAobGVuPj44KSYweEZGOyAgLy8gKGN5bEgpID0gZXhwZWN0ZWQgbGVuZ3RoIChIKQorCisJCS8vIEZpeCB1cCB0aGUgU0NTSSBjb21tYW5kIHNlY3RvciBhbmQgbnVtIHNlY3RvcnMKKworCQlkYXRhWzcrMl0gPSBNU0Jfb2Yoc2VjdG9yPj4xNik7IC8vIFNDU0kgY29tbWFuZCBzZWN0b3IKKwkJZGF0YVs3KzNdID0gTFNCX29mKHNlY3Rvcj4+MTYpOworCQlkYXRhWzcrNF0gPSBNU0Jfb2Yoc2VjdG9yJjB4RkZGRik7CisJCWRhdGFbNys1XSA9IExTQl9vZihzZWN0b3ImMHhGRkZGKTsKKwkJaWYgKGRhdGFbNyswXSA9PSBHUENNRF9SRUFEX0NEKQorCQkJZGF0YVs3KzZdID0gMDsKKwkJZGF0YVs3KzddID0gTVNCX29mKGxlbiAvIHNyYi0+dHJhbnNmZXJzaXplKTsgLy8gU0NTSSBjb21tYW5kCisJCWRhdGFbNys4XSA9IExTQl9vZihsZW4gLyBzcmItPnRyYW5zZmVyc2l6ZSk7IC8vIG51bSBzZWN0b3JzCisKKwkJcmVzdWx0ID0gdXNiYXRfaHA4MjAwZV9yd19ibG9ja190ZXN0KHVzLCBVU0JBVF9BVEEsIAorCQkJcmVnaXN0ZXJzLCBkYXRhLCAxOSwKKwkJCVVTQkFUX0FUQV9EQVRBLCBVU0JBVF9BVEFfU1RBVFVTLCAweEZELCAKKwkJCShVU0JBVF9RVUFMX0ZDUSB8IFVTQkFUX1FVQUxfQUxRKSwKKwkJCURNQV9GUk9NX0RFVklDRSwKKwkJCWJ1ZmZlciwKKwkJCWxlbiwgMCwgMSk7CisKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCWJyZWFrOworCisJCS8vIFN0b3JlIHRoZSBkYXRhIGluIHRoZSB0cmFuc2ZlciBidWZmZXIKKwkJdXNiX3N0b3JfYWNjZXNzX3hmZXJfYnVmKGJ1ZmZlciwgbGVuLCBzcmIsCisJCQkJICZzZ19zZWdtZW50LCAmc2dfb2Zmc2V0LCBUT19YRkVSX0JVRik7CisKKwkJLy8gVXBkYXRlIHRoZSBhbW91bnQgdHJhbnNmZXJyZWQgYW5kIHRoZSBzZWN0b3IgbnVtYmVyCisKKwkJdHJhbnNmZXJyZWQgKz0gbGVuOworCQlzZWN0b3IgKz0gbGVuIC8gc3JiLT50cmFuc2ZlcnNpemU7CisKKwl9IC8vIHdoaWxlIHRyYW5zZmVycmVkICE9IHNyYi0+cmVxdWVzdF9idWZmbGVuCisKKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgdXNiYXRfc2VsZWN0X2FuZF90ZXN0X3JlZ2lzdGVycyhzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJaW50IHNlbGVjdG9yOworCXVuc2lnbmVkIGNoYXIgKnN0YXR1cyA9IHVzLT5pb2J1ZjsKKwl1bnNpZ25lZCBjaGFyIG1heF9zZWxlY3RvciA9IDB4QjA7CisJaWYgKHVzYmF0X2dldF9kZXZpY2VfdHlwZSh1cykgPT0gVVNCQVRfREVWX0ZMQVNIKQorCQltYXhfc2VsZWN0b3IgPSAweEEwOworCisJLy8gdHJ5IGRldmljZSA9IG1hc3RlciwgdGhlbiBkZXZpY2UgPSBzbGF2ZS4KKworCWZvciAoc2VsZWN0b3IgPSAweEEwOyBzZWxlY3RvciA8PSBtYXhfc2VsZWN0b3I7IHNlbGVjdG9yICs9IDB4MTApIHsKKworCQlpZiAodXNiYXRfZ2V0X2RldmljZV90eXBlKHVzKSA9PSBVU0JBVF9ERVZfSFA4MjAwICYmCisJCQl1c2JhdF93cml0ZSh1cywgVVNCQVRfQVRBLCBVU0JBVF9BVEFfREVWSUNFLCBzZWxlY3RvcikgIT0gCisJCQkJVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCQlpZiAodXNiYXRfcmVhZCh1cywgVVNCQVRfQVRBLCBVU0JBVF9BVEFfU1RBVFVTLCBzdGF0dXMpICE9IAorCQkJCVVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkJaWYgKHVzYmF0X3JlYWQodXMsIFVTQkFUX0FUQSwgVVNCQVRfQVRBX0RFVklDRSwgc3RhdHVzKSAhPSAKKwkJCQlVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJCWlmICh1c2JhdF9yZWFkKHVzLCBVU0JBVF9BVEEsIFVTQkFUX0FUQV9MQkFfTUUsIHN0YXR1cykgIT0gCisJCQkJVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCQlpZiAodXNiYXRfcmVhZCh1cywgVVNCQVRfQVRBLCBVU0JBVF9BVEFfTEJBX0hJLCBzdGF0dXMpICE9IAorCQkJCVVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkJaWYgKHVzYmF0X3dyaXRlKHVzLCBVU0JBVF9BVEEsIFVTQkFUX0FUQV9MQkFfTUUsIDB4NTUpICE9IAorCQkJCVVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkJaWYgKHVzYmF0X3dyaXRlKHVzLCBVU0JBVF9BVEEsIFVTQkFUX0FUQV9MQkFfSEksIDB4QUEpICE9IAorCQkJCVVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkJaWYgKHVzYmF0X3JlYWQodXMsIFVTQkFUX0FUQSwgVVNCQVRfQVRBX0xCQV9NRSwgc3RhdHVzKSAhPSAKKwkJCQlVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJCWlmICh1c2JhdF9yZWFkKHVzLCBVU0JBVF9BVEEsIFVTQkFUX0FUQV9MQkFfTUUsIHN0YXR1cykgIT0gCisJCQkJVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBVU0JBVCBwcm9jZXNzb3IgYW5kIHRoZSBzdG9yYWdlIGRldmljZQorICovCitpbnQgaW5pdF91c2JhdChzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJaW50IHJjOworCXN0cnVjdCB1c2JhdF9pbmZvICppbmZvOworCXVuc2lnbmVkIGNoYXIgc3ViY291bnRIID0gVVNCQVRfQVRBX0xCQV9ISTsKKwl1bnNpZ25lZCBjaGFyIHN1YmNvdW50TCA9IFVTQkFUX0FUQV9MQkFfTUU7CisJdW5zaWduZWQgY2hhciAqc3RhdHVzID0gdXMtPmlvYnVmOworCisJdXMtPmV4dHJhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYmF0X2luZm8pLCBHRlBfTk9JTyk7CisJaWYgKCF1cy0+ZXh0cmEpIHsKKwkJVVNfREVCVUdQKCJpbml0X3VzYmF0OiBHYWghIENhbid0IGFsbG9jYXRlIHN0b3JhZ2UgZm9yIHVzYmF0IGluZm8gc3RydWN0IVxuIik7CisJCXJldHVybiAxOworCX0KKwltZW1zZXQodXMtPmV4dHJhLCAwLCBzaXplb2Yoc3RydWN0IHVzYmF0X2luZm8pKTsKKwlpbmZvID0gKHN0cnVjdCB1c2JhdF9pbmZvICopICh1cy0+ZXh0cmEpOworCisJLy8gRW5hYmxlIHBlcmlwaGVyYWwgY29udHJvbCBzaWduYWxzCisJcmMgPSB1c2JhdF93cml0ZV91c2VyX2lvKHVzLAorCQkJCSBVU0JBVF9VSU9fT0UxIHwgVVNCQVRfVUlPX09FMCwKKwkJCQkgVVNCQVRfVUlPX0VQQUQgfCBVU0JBVF9VSU9fMSk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCVVTX0RFQlVHUCgiSU5JVCAxXG4iKTsKKworCW1zbGVlcCgyMDAwKTsKKworCXJjID0gdXNiYXRfcmVhZF91c2VyX2lvKHVzLCBzdGF0dXMpOworCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJcmV0dXJuIHJjOworCisJVVNfREVCVUdQKCJJTklUIDJcbiIpOworCisJcmMgPSB1c2JhdF9yZWFkX3VzZXJfaW8odXMsIHN0YXR1cyk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCXJjID0gdXNiYXRfcmVhZF91c2VyX2lvKHVzLCBzdGF0dXMpOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlVU19ERUJVR1AoIklOSVQgM1xuIik7CisKKwkvLyBBdCB0aGlzIHBvaW50LCB3ZSBuZWVkIHRvIGRldGVjdCB3aGljaCBkZXZpY2Ugd2UgYXJlIHVzaW5nCisJaWYgKHVzYmF0X3NldF90cmFuc3BvcnQodXMsIGluZm8pKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJVVNfREVCVUdQKCJJTklUIDRcbiIpOworCisJaWYgKHVzYmF0X2dldF9kZXZpY2VfdHlwZSh1cykgPT0gVVNCQVRfREVWX0hQODIwMCkgeworCQltc2xlZXAoMjUwKTsKKworCQkvLyBXcml0ZSAweDgwIHRvIElTQSBwb3J0IDB4M0YKKwkJcmMgPSB1c2JhdF93cml0ZSh1cywgVVNCQVRfSVNBLCAweDNGLCAweDgwKTsKKwkJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkJVVNfREVCVUdQKCJJTklUIDVcbiIpOworCisJCS8vIFJlYWQgSVNBIHBvcnQgMHgyNworCQlyYyA9IHVzYmF0X3JlYWQodXMsIFVTQkFUX0lTQSwgMHgyNywgc3RhdHVzKTsKKwkJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkJVVNfREVCVUdQKCJJTklUIDZcbiIpOworCisJCXJjID0gdXNiYXRfcmVhZF91c2VyX2lvKHVzLCBzdGF0dXMpOworCQlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCQlVU19ERUJVR1AoIklOSVQgN1xuIik7CisJfQorCisJcmMgPSB1c2JhdF9zZWxlY3RfYW5kX3Rlc3RfcmVnaXN0ZXJzKHVzKTsKKwlpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCisJCXJldHVybiByYzsKKworCVVTX0RFQlVHUCgiSU5JVCA4XG4iKTsKKworCXJjID0gdXNiYXRfcmVhZF91c2VyX2lvKHVzLCBzdGF0dXMpOworCWlmIChyYyAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwlVU19ERUJVR1AoIklOSVQgOVxuIik7CisKKwkvLyBFbmFibGUgcGVyaXBoZXJhbCBjb250cm9sIHNpZ25hbHMgYW5kIGNhcmQgZGV0ZWN0CisJcmMgPSB1c2JhdF9kZXZpY2VfZW5hYmxlX2NkdCh1cyk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlyZXR1cm4gcmM7CisKKwlVU19ERUJVR1AoIklOSVQgMTBcbiIpOworCisJcmMgPSB1c2JhdF9yZWFkX3VzZXJfaW8odXMsIHN0YXR1cyk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCVVTX0RFQlVHUCgiSU5JVCAxMVxuIik7CisKKwltc2xlZXAoMTQwMCk7CisKKwlyYyA9IHVzYmF0X3JlYWRfdXNlcl9pbyh1cywgc3RhdHVzKTsKKwlpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJVVNfREVCVUdQKCJJTklUIDEyXG4iKTsKKworCXJjID0gdXNiYXRfc2VsZWN0X2FuZF90ZXN0X3JlZ2lzdGVycyh1cyk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQlyZXR1cm4gcmM7CisKKwlVU19ERUJVR1AoIklOSVQgMTNcbiIpOworCisJaWYgKHVzYmF0X2dldF9kZXZpY2VfdHlwZSh1cykgPT0gVVNCQVRfREVWX0ZMQVNIKSB7IAorCQlzdWJjb3VudEggPSAweDAyOworCQlzdWJjb3VudEwgPSAweDAwOworCX0KKwlyYyA9IHVzYmF0X3NldF9zaHV0dGxlX2ZlYXR1cmVzKHVzLCAoVVNCQVRfRkVBVF9FVEVOIHwgVVNCQVRfRkVBVF9FVDIgfCBVU0JBVF9GRUFUX0VUMSksCisJCQkJCQkJCQkweDAwLCAweDg4LCAweDA4LCBzdWJjb3VudEgsIHN1YmNvdW50TCk7CisJaWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCVVTX0RFQlVHUCgiSU5JVCAxNFxuIik7CisKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qCisgKiBUcmFuc3BvcnQgZm9yIHRoZSBIUCA4MjAwZQorICovCitzdGF0aWMgaW50IHVzYmF0X2hwODIwMGVfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQoreworCWludCByZXN1bHQ7CisJdW5zaWduZWQgY2hhciAqc3RhdHVzID0gdXMtPmlvYnVmOworCXVuc2lnbmVkIGNoYXIgcmVnaXN0ZXJzWzMyXTsKKwl1bnNpZ25lZCBjaGFyIGRhdGFbMzJdOworCXVuc2lnbmVkIGludCBsZW47CisJaW50IGk7CisJY2hhciBzdHJpbmdbNjRdOworCisJbGVuID0gc3JiLT5yZXF1ZXN0X2J1ZmZsZW47CisKKwkvKiBTZW5kIEEwIChBVEEgUEFDS0VUIENPTU1BTkQpLgorCSAgIE5vdGU6IEkgZ3Vlc3Mgd2UncmUgbmV2ZXIgZ29pbmcgdG8gZ2V0IGFueSBvZiB0aGUgQVRBCisJICAgY29tbWFuZHMuLi4ganVzdCBBVEEgUGFja2V0IENvbW1hbmRzLgorIAkgKi8KKworCXJlZ2lzdGVyc1swXSA9IFVTQkFUX0FUQV9GRUFUVVJFUzsKKwlyZWdpc3RlcnNbMV0gPSBVU0JBVF9BVEFfU0VDQ05UOworCXJlZ2lzdGVyc1syXSA9IFVTQkFUX0FUQV9TRUNOVU07CisJcmVnaXN0ZXJzWzNdID0gVVNCQVRfQVRBX0xCQV9NRTsKKwlyZWdpc3RlcnNbNF0gPSBVU0JBVF9BVEFfTEJBX0hJOworCXJlZ2lzdGVyc1s1XSA9IFVTQkFUX0FUQV9ERVZJQ0U7CisJcmVnaXN0ZXJzWzZdID0gVVNCQVRfQVRBX0NNRDsKKwlkYXRhWzBdID0gMHgwMDsKKwlkYXRhWzFdID0gMHgwMDsKKwlkYXRhWzJdID0gMHgwMDsKKwlkYXRhWzNdID0gbGVuJjB4RkY7IAkJLy8gKGN5bEwpID0gZXhwZWN0ZWQgbGVuZ3RoIChMKQorCWRhdGFbNF0gPSAobGVuPj44KSYweEZGOyAJLy8gKGN5bEgpID0gZXhwZWN0ZWQgbGVuZ3RoIChIKQorCWRhdGFbNV0gPSAweEIwOyAJCS8vIChkZXZpY2Ugc2VsKSA9IHNsYXZlCisJZGF0YVs2XSA9IDB4QTA7IAkJLy8gKGNvbW1hbmQpID0gQVRBIFBBQ0tFVCBDT01NQU5ECisKKwlmb3IgKGk9NzsgaTwxOTsgaSsrKSB7CisJCXJlZ2lzdGVyc1tpXSA9IDB4MTA7CisJCWRhdGFbaV0gPSAoaS03ID49IHNyYi0+Y21kX2xlbikgPyAwIDogc3JiLT5jbW5kW2ktN107CisJfQorCisJcmVzdWx0ID0gdXNiYXRfZ2V0X3N0YXR1cyh1cywgc3RhdHVzKTsKKwlVU19ERUJVR1AoIlN0YXR1cyA9ICUwMlhcbiIsICpzdGF0dXMpOworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCWlmIChzcmItPmNtbmRbMF0gPT0gVEVTVF9VTklUX1JFQURZKQorCQl0cmFuc2ZlcnJlZCA9IDA7CisKKwlpZiAoc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKSB7CisKKwkJcmVzdWx0ID0gdXNiYXRfaHA4MjAwZV9yd19ibG9ja190ZXN0KHVzLCBVU0JBVF9BVEEsIAorCQkJcmVnaXN0ZXJzLCBkYXRhLCAxOSwKKwkJCVVTQkFUX0FUQV9EQVRBLCBVU0JBVF9BVEFfU1RBVFVTLCAweEZELAorCQkJKFVTQkFUX1FVQUxfRkNRIHwgVVNCQVRfUVVBTF9BTFEpLAorCQkJRE1BX1RPX0RFVklDRSwKKwkJCXNyYi0+cmVxdWVzdF9idWZmZXIsIAorCQkJbGVuLCBzcmItPnVzZV9zZywgMTApOworCisJCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJCXRyYW5zZmVycmVkICs9IGxlbjsKKwkJCVVTX0RFQlVHUCgiV3JvdGUgJTA4WCBieXRlc1xuIiwgdHJhbnNmZXJyZWQpOworCQl9CisKKwkJcmV0dXJuIHJlc3VsdDsKKworCX0gZWxzZSBpZiAoc3JiLT5jbW5kWzBdID09IFJFQURfMTAgfHwKKwkJICAgc3JiLT5jbW5kWzBdID09IEdQQ01EX1JFQURfQ0QpIHsKKworCQlyZXR1cm4gdXNiYXRfaHA4MjAwZV9oYW5kbGVfcmVhZDEwKHVzLCByZWdpc3RlcnMsIGRhdGEsIHNyYik7CisKKwl9CisKKwlpZiAobGVuID4gMHhGRkZGKSB7CisJCVVTX0RFQlVHUCgiRXJyb3I6IGxlbiA9ICUwOFguLi4gd2hhdCBkbyBJIGRvIG5vdz9cbiIsCisJCQlsZW4pOworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCWlmICggKHJlc3VsdCA9IHVzYmF0X211bHRpcGxlX3dyaXRlKHVzLCAKKwkJCXJlZ2lzdGVycywgZGF0YSwgNykpICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLy8gV3JpdGUgdGhlIDEyLWJ5dGUgY29tbWFuZCBoZWFkZXIuCisKKwkvLyBJZiB0aGUgY29tbWFuZCBpcyBCTEFOSyB0aGVuIHNldCB0aGUgdGltZXIgZm9yIDc1IG1pbnV0ZXMuCisJLy8gT3RoZXJ3aXNlIHNldCBpdCBmb3IgMTAgbWludXRlcy4KKworCS8vIE5PVEU6IFRIRSA4MjAwIERPQ1VNRU5UQVRJT04gU1RBVEVTIFRIQVQgQkxBTktJTkcgQSBDRFJXCisJLy8gQVQgU1BFRUQgNCBJUyBVTlJFTElBQkxFISEhCisKKwlpZiAoIChyZXN1bHQgPSB1c2JhdF93cml0ZV9ibG9jayh1cywgCisJCQlVU0JBVF9BVEEsIHNyYi0+Y21uZCwgMTIsCisJCQlzcmItPmNtbmRbMF09PUdQQ01EX0JMQU5LID8gNzUgOiAxMCkpICE9CisJCQkJVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvLyBJZiB0aGVyZSBpcyByZXNwb25zZSBkYXRhIHRvIGJlIHJlYWQgaW4gCisJLy8gdGhlbiBkbyBpdCBoZXJlLgorCisJaWYgKGxlbiAhPSAwICYmIChzcmItPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkpIHsKKworCQkvLyBIb3cgbWFueSBieXRlcyB0byByZWFkIGluPyBDaGVjayBjeWxMIHJlZ2lzdGVyCisKKwkJaWYgKHVzYmF0X3JlYWQodXMsIFVTQkFUX0FUQSwgVVNCQVRfQVRBX0xCQV9NRSwgc3RhdHVzKSAhPSAKKwkJICAgIAlVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJCX0KKworCQlpZiAobGVuID4gMHhGRikgeyAvLyBuZWVkIHRvIHJlYWQgY3lsSCBhbHNvCisJCQlsZW4gPSAqc3RhdHVzOworCQkJaWYgKHVzYmF0X3JlYWQodXMsIFVTQkFUX0FUQSwgVVNCQVRfQVRBX0xCQV9ISSwgc3RhdHVzKSAhPQorCQkJCSAgICBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCQkJfQorCQkJbGVuICs9ICgodW5zaWduZWQgaW50KSAqc3RhdHVzKTw8ODsKKwkJfQorCQllbHNlCisJCQlsZW4gPSAqc3RhdHVzOworCisKKwkJcmVzdWx0ID0gdXNiYXRfcmVhZF9ibG9jayh1cywgc3JiLT5yZXF1ZXN0X2J1ZmZlciwgbGVuKTsKKworCQkvKiBEZWJ1Zy1wcmludCB0aGUgZmlyc3QgMzIgYnl0ZXMgb2YgdGhlIHRyYW5zZmVyICovCisKKwkJaWYgKCFzcmItPnVzZV9zZykgeworCQkJc3RyaW5nWzBdID0gMDsKKwkJCWZvciAoaT0wOyBpPGxlbiAmJiBpPDMyOyBpKyspIHsKKwkJCQlzcHJpbnRmKHN0cmluZytzdHJsZW4oc3RyaW5nKSwgIiUwMlggIiwKKwkJCQkgICgodW5zaWduZWQgY2hhciAqKXNyYi0+cmVxdWVzdF9idWZmZXIpW2ldKTsKKwkJCQlpZiAoKGklMTYpPT0xNSkgeworCQkJCQlVU19ERUJVR1AoIiVzXG4iLCBzdHJpbmcpOworCQkJCQlzdHJpbmdbMF0gPSAwOworCQkJCX0KKwkJCX0KKwkJCWlmIChzdHJpbmdbMF0hPTApCisJCQkJVVNfREVCVUdQKCIlc1xuIiwgc3RyaW5nKTsKKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBUcmFuc3BvcnQgZm9yIFVTQkFUMDItYmFzZWQgQ29tcGFjdEZsYXNoIGFuZCBzaW1pbGFyIHN0b3JhZ2UgZGV2aWNlcworICovCitzdGF0aWMgaW50IHVzYmF0X2ZsYXNoX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICogc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJaW50IHJjOworCXN0cnVjdCB1c2JhdF9pbmZvICppbmZvID0gKHN0cnVjdCB1c2JhdF9pbmZvICopICh1cy0+ZXh0cmEpOworCXVuc2lnbmVkIGxvbmcgYmxvY2ssIGJsb2NrczsKKwl1bnNpZ25lZCBjaGFyICpwdHIgPSB1cy0+aW9idWY7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5xdWlyeV9yZXNwb25zZVszNl0gPSB7CisJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MUYsIDB4MDAsIDB4MDAsIDB4MDAKKwl9OworCisJaWYgKHNyYi0+Y21uZFswXSA9PSBJTlFVSVJZKSB7CisJCVVTX0RFQlVHUCgidXNiYXRfZmxhc2hfdHJhbnNwb3J0OiBJTlFVSVJZLiBSZXR1cm5pbmcgYm9ndXMgcmVzcG9uc2UuXG4iKTsKKwkJbWVtY3B5KHB0ciwgaW5xdWlyeV9yZXNwb25zZSwgc2l6ZW9mKGlucXVpcnlfcmVzcG9uc2UpKTsKKwkJZmlsbF9pbnF1aXJ5X3Jlc3BvbnNlKHVzLCBwdHIsIDM2KTsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVBRF9DQVBBQ0lUWSkgeworCQlyYyA9IHVzYmF0X2ZsYXNoX2NoZWNrX21lZGlhKHVzLCBpbmZvKTsKKwkJaWYgKHJjICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQkJcmV0dXJuIHJjOworCisJCXJjID0gdXNiYXRfZmxhc2hfZ2V0X3NlY3Rvcl9jb3VudCh1cywgaW5mbyk7CisJCWlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKKwkJCXJldHVybiByYzsKKworCQlpbmZvLT5zc2l6ZSA9IDB4MjAwOyAgLy8gaGFyZCBjb2RlZCA1MTIgYnl0ZSBzZWN0b3JzIGFzIHBlciBBVEEgc3BlYworCQlVU19ERUJVR1AoInVzYmF0X2ZsYXNoX3RyYW5zcG9ydDogUkVBRF9DQVBBQ0lUWTogJWxkIHNlY3RvcnMsICVsZCBieXRlcyBwZXIgc2VjdG9yXG4iLAorCQkJICBpbmZvLT5zZWN0b3JzLCBpbmZvLT5zc2l6ZSk7CisKKwkJLy8gYnVpbGQgdGhlIHJlcGx5CisJCS8vIG5vdGU6IG11c3QgcmV0dXJuIHRoZSBzZWN0b3IgbnVtYmVyIG9mIHRoZSBsYXN0IHNlY3RvciwKKwkJLy8gKm5vdCogdGhlIHRvdGFsIG51bWJlciBvZiBzZWN0b3JzCisJCSgoX19iZTMyICopIHB0cilbMF0gPSBjcHVfdG9fYmUzMihpbmZvLT5zZWN0b3JzIC0gMSk7CisJCSgoX19iZTMyICopIHB0cilbMV0gPSBjcHVfdG9fYmUzMihpbmZvLT5zc2l6ZSk7CisJCXVzYl9zdG9yX3NldF94ZmVyX2J1ZihwdHIsIDgsIHNyYik7CisKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gTU9ERV9TRUxFQ1RfMTApIHsKKwkJVVNfREVCVUdQKCJ1c2JhdF9mbGFzaF90cmFuc3BvcnQ6ICBHYWghIE1PREVfU0VMRUNUXzEwLlxuIik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBSRUFEXzEwKSB7CisJCWJsb2NrID0gKCh1MzIpKHNyYi0+Y21uZFsyXSkgPDwgMjQpIHwgKCh1MzIpKHNyYi0+Y21uZFszXSkgPDwgMTYpIHwKKwkJCQkoKHUzMikoc3JiLT5jbW5kWzRdKSA8PCAgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzVdKSk7CisKKwkJYmxvY2tzID0gKCh1MzIpKHNyYi0+Y21uZFs3XSkgPDwgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzhdKSk7CisKKwkJVVNfREVCVUdQKCJ1c2JhdF9mbGFzaF90cmFuc3BvcnQ6ICBSRUFEXzEwOiByZWFkIGJsb2NrIDB4JTA0bHggIGNvdW50ICVsZFxuIiwgYmxvY2ssIGJsb2Nrcyk7CisJCXJldHVybiB1c2JhdF9mbGFzaF9yZWFkX2RhdGEodXMsIGluZm8sIGJsb2NrLCBibG9ja3MpOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVBRF8xMikgeworCQkvLyBJIGRvbid0IHRoaW5rIHdlJ2xsIGV2ZXIgc2VlIGEgUkVBRF8xMiBidXQgc3VwcG9ydCBpdCBhbnl3YXkuLi4KKwkJYmxvY2sgPSAoKHUzMikoc3JiLT5jbW5kWzJdKSA8PCAyNCkgfCAoKHUzMikoc3JiLT5jbW5kWzNdKSA8PCAxNikgfAorCQkgICAgICAgICgodTMyKShzcmItPmNtbmRbNF0pIDw8ICA4KSB8ICgodTMyKShzcmItPmNtbmRbNV0pKTsKKworCQlibG9ja3MgPSAoKHUzMikoc3JiLT5jbW5kWzZdKSA8PCAyNCkgfCAoKHUzMikoc3JiLT5jbW5kWzddKSA8PCAxNikgfAorCQkgICAgICAgICAoKHUzMikoc3JiLT5jbW5kWzhdKSA8PCAgOCkgfCAoKHUzMikoc3JiLT5jbW5kWzldKSk7CisKKwkJVVNfREVCVUdQKCJ1c2JhdF9mbGFzaF90cmFuc3BvcnQ6IFJFQURfMTI6IHJlYWQgYmxvY2sgMHglMDRseCAgY291bnQgJWxkXG4iLCBibG9jaywgYmxvY2tzKTsKKwkJcmV0dXJuIHVzYmF0X2ZsYXNoX3JlYWRfZGF0YSh1cywgaW5mbywgYmxvY2ssIGJsb2Nrcyk7CisJfQorCisJaWYgKHNyYi0+Y21uZFswXSA9PSBXUklURV8xMCkgeworCQlibG9jayA9ICgodTMyKShzcmItPmNtbmRbMl0pIDw8IDI0KSB8ICgodTMyKShzcmItPmNtbmRbM10pIDw8IDE2KSB8CisJCSAgICAgICAgKCh1MzIpKHNyYi0+Y21uZFs0XSkgPDwgIDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs1XSkpOworCisJCWJsb2NrcyA9ICgodTMyKShzcmItPmNtbmRbN10pIDw8IDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs4XSkpOworCisJCVVTX0RFQlVHUCgidXNiYXRfZmxhc2hfdHJhbnNwb3J0OiBXUklURV8xMDogd3JpdGUgYmxvY2sgMHglMDRseCAgY291bnQgJWxkXG4iLCBibG9jaywgYmxvY2tzKTsKKwkJcmV0dXJuIHVzYmF0X2ZsYXNoX3dyaXRlX2RhdGEodXMsIGluZm8sIGJsb2NrLCBibG9ja3MpOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gV1JJVEVfMTIpIHsKKwkJLy8gSSBkb24ndCB0aGluayB3ZSdsbCBldmVyIHNlZSBhIFdSSVRFXzEyIGJ1dCBzdXBwb3J0IGl0IGFueXdheS4uLgorCQlibG9jayA9ICgodTMyKShzcmItPmNtbmRbMl0pIDw8IDI0KSB8ICgodTMyKShzcmItPmNtbmRbM10pIDw8IDE2KSB8CisJCSAgICAgICAgKCh1MzIpKHNyYi0+Y21uZFs0XSkgPDwgIDgpIHwgKCh1MzIpKHNyYi0+Y21uZFs1XSkpOworCisJCWJsb2NrcyA9ICgodTMyKShzcmItPmNtbmRbNl0pIDw8IDI0KSB8ICgodTMyKShzcmItPmNtbmRbN10pIDw8IDE2KSB8CisJCSAgICAgICAgICgodTMyKShzcmItPmNtbmRbOF0pIDw8ICA4KSB8ICgodTMyKShzcmItPmNtbmRbOV0pKTsKKworCQlVU19ERUJVR1AoInVzYmF0X2ZsYXNoX3RyYW5zcG9ydDogV1JJVEVfMTI6IHdyaXRlIGJsb2NrIDB4JTA0bHggIGNvdW50ICVsZFxuIiwgYmxvY2ssIGJsb2Nrcyk7CisJCXJldHVybiB1c2JhdF9mbGFzaF93cml0ZV9kYXRhKHVzLCBpbmZvLCBibG9jaywgYmxvY2tzKTsKKwl9CisKKworCWlmIChzcmItPmNtbmRbMF0gPT0gVEVTVF9VTklUX1JFQURZKSB7CisJCVVTX0RFQlVHUCgidXNiYXRfZmxhc2hfdHJhbnNwb3J0OiBURVNUX1VOSVRfUkVBRFkuXG4iKTsKKworCQlyYyA9IHVzYmF0X2ZsYXNoX2NoZWNrX21lZGlhKHVzLCBpbmZvKTsKKwkJaWYgKHJjICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQorCQkJcmV0dXJuIHJjOworCisJCXJldHVybiB1c2JhdF9jaGVja19zdGF0dXModXMpOworCX0KKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVRVUVTVF9TRU5TRSkgeworCQlVU19ERUJVR1AoInVzYmF0X2ZsYXNoX3RyYW5zcG9ydDogUkVRVUVTVF9TRU5TRS5cbiIpOworCisJCW1lbXNldChwdHIsIDAsIDE4KTsKKwkJcHRyWzBdID0gMHhGMDsKKwkJcHRyWzJdID0gaW5mby0+c2Vuc2Vfa2V5OworCQlwdHJbN10gPSAxMTsKKwkJcHRyWzEyXSA9IGluZm8tPnNlbnNlX2FzYzsKKwkJcHRyWzEzXSA9IGluZm8tPnNlbnNlX2FzY3E7CisJCXVzYl9zdG9yX3NldF94ZmVyX2J1ZihwdHIsIDE4LCBzcmIpOworCisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwlpZiAoc3JiLT5jbW5kWzBdID09IEFMTE9XX01FRElVTV9SRU1PVkFMKSB7CisJCS8vIHN1cmUuICB3aGF0ZXZlci4gIG5vdCBsaWtlIHdlIGNhbiBzdG9wIHRoZSB1c2VyIGZyb20gcG9wcGluZworCQkvLyB0aGUgbWVkaWEgb3V0IG9mIHRoZSBkZXZpY2UgKG5vIGxvY2tpbmcgZG9vcnMsIGV0YykKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCX0KKworCVVTX0RFQlVHUCgidXNiYXRfZmxhc2hfdHJhbnNwb3J0OiBHYWghIFVua25vd24gY29tbWFuZDogJWQgKDB4JXgpXG4iLAorCQkJICBzcmItPmNtbmRbMF0sIHNyYi0+Y21uZFswXSk7CisJaW5mby0+c2Vuc2Vfa2V5ID0gMHgwNTsKKwlpbmZvLT5zZW5zZV9hc2MgPSAweDIwOworCWluZm8tPnNlbnNlX2FzY3EgPSAweDAwOworCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworfQorCisvKgorICogRGVmYXVsdCB0cmFuc3BvcnQgZnVuY3Rpb24uIEF0dGVtcHRzIHRvIGRldGVjdCB3aGljaCB0cmFuc3BvcnQgZnVuY3Rpb24KKyAqIHNob3VsZCBiZSBjYWxsZWQsIG1ha2VzIGl0IHRoZSBuZXcgZGVmYXVsdCwgYW5kIGNhbGxzIGl0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5ldmVyIGJlIGNhbGxlZC4gT3VyIHVzYmF0X2luaXQoKSBmdW5jdGlvbiBkZXRlY3RzIHRoZQorICogZGV2aWNlIHR5cGUgYW5kIGNoYW5nZXMgdGhlIHVzLT50cmFuc3BvcnQgcHRyIHRvIHRoZSB0cmFuc3BvcnQgZnVuY3Rpb24KKyAqIHJlbGV2YW50IHRvIHRoZSBkZXZpY2UuCisgKiBIb3dldmVyLCB3ZSdsbCBzdXBwb3J0IHRoaXMgaW1wb3NzaWJsZSg/KSBjYXNlIGFueXdheS4KKyAqLworaW50IHVzYmF0X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlzdHJ1Y3QgdXNiYXRfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgdXNiYXRfaW5mbyopICh1cy0+ZXh0cmEpOworCisJaWYgKHVzYmF0X3NldF90cmFuc3BvcnQodXMsIGluZm8pKQorCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCisJcmV0dXJuIHVzLT50cmFuc3BvcnQoc3JiLCB1cyk7CQorfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2h1dHRsZV91c2JhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViOGU4NjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuaApAQCAtMCwwICsxLDEyMyBAQAorLyogRHJpdmVyIGZvciBTQ00gTWljcm9zeXN0ZW1zIFVTQi1BVEFQSSBjYWJsZQorICogSGVhZGVyIEZpbGUKKyAqCisgKiAkSWQ6IHNodXR0bGVfdXNiYXQuaCx2IDEuNSAyMDAwLzA5LzE3IDE0OjQ0OjUyIGdyb292eWphdmEgRXhwICQKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDIwMDAgUm9iZXJ0IEJhcnVjaCAoYXV0b3BoaWxlQGRvbC5uZXQpCisgKiAgIChjKSAyMDA0LCAyMDA1IERhbmllbCBEcmFrZSA8ZHNkQGdlbnRvby5vcmc+CisgKgorICogU2VlIHNodXR0bGVfdXNiYXQuYyBmb3IgbW9yZSBleHBsYW5hdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX1VTQl9TSFVUVExFX1VTQkFUX0gKKyNkZWZpbmUgX1VTQl9TSFVUVExFX1VTQkFUX0gKKworLyogU3VwcG9ydGVkIGRldmljZSB0eXBlcyAqLworI2RlZmluZSBVU0JBVF9ERVZfSFA4MjAwCTB4MDEKKyNkZWZpbmUgVVNCQVRfREVWX0ZMQVNICQkweDAyCisKKyNkZWZpbmUgVVNCQVRfRVBQX1BPUlQJCTB4MTAKKyNkZWZpbmUgVVNCQVRfRVBQX1JFR0lTVEVSCTB4MzAKKyNkZWZpbmUgVVNCQVRfQVRBCQkweDQwCisjZGVmaW5lIFVTQkFUX0lTQQkJMHg1MAorCisvKiBDb21tYW5kcyAobmVlZCB0byBiZSBsb2dpY2FsbHkgT1InZCB3aXRoIGFuIGFjY2VzcyB0eXBlICovCisjZGVmaW5lIFVTQkFUX0NNRF9SRUFEX1JFRwkJMHgwMAorI2RlZmluZSBVU0JBVF9DTURfV1JJVEVfUkVHCQkweDAxCisjZGVmaW5lIFVTQkFUX0NNRF9SRUFEX0JMT0NLCTB4MDIKKyNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX0JMT0NLCTB4MDMKKyNkZWZpbmUgVVNCQVRfQ01EX0NPTkRfUkVBRF9CTE9DSwkweDA0CisjZGVmaW5lIFVTQkFUX0NNRF9DT05EX1dSSVRFX0JMT0NLCTB4MDUKKyNkZWZpbmUgVVNCQVRfQ01EX1dSSVRFX1JFR1MJMHgwNworCisvKiBDb21tYW5kcyAodGhlc2UgZG9uJ3QgbmVlZCBhbiBhY2Nlc3MgdHlwZSkgKi8KKyNkZWZpbmUgVVNCQVRfQ01EX0VYRUNfQ01ECTB4ODAKKyNkZWZpbmUgVVNCQVRfQ01EX1NFVF9GRUFUCTB4ODEKKyNkZWZpbmUgVVNCQVRfQ01EX1VJTwkJMHg4MgorCisvKiBNZXRob2RzIG9mIGFjY2Vzc2luZyBVSU8gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVNCQVRfVUlPX1JFQUQJMQorI2RlZmluZSBVU0JBVF9VSU9fV1JJVEUJMAorCisvKiBRdWFsaWZpZXIgYml0cyAqLworI2RlZmluZSBVU0JBVF9RVUFMX0ZDUQkweDIwIC8vIGZ1bGwgY29tcGFyZQorI2RlZmluZSBVU0JBVF9RVUFMX0FMUQkweDEwIC8vIGF1dG8gbG9hZCBzdWJjb3VudAorCisvKiBVU0JBVCBGbGFzaCBNZWRpYSBzdGF0dXMgdHlwZXMgKi8KKyNkZWZpbmUgVVNCQVRfRkxBU0hfTUVESUFfTk9ORQkwCisjZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX0NGCTEKKworLyogVVNCQVQgRmxhc2ggTWVkaWEgY2hhbmdlIHR5cGVzICovCisjZGVmaW5lIFVTQkFUX0ZMQVNIX01FRElBX1NBTUUJMAorI2RlZmluZSBVU0JBVF9GTEFTSF9NRURJQV9DSEFOR0VECTEKKworLyogVVNCQVQgQVRBIHJlZ2lzdGVycyAqLworI2RlZmluZSBVU0JBVF9BVEFfREFUQSAgICAgIDB4MTAgIC8vIHJlYWQvd3JpdGUgZGF0YSAoUi9XKQorI2RlZmluZSBVU0JBVF9BVEFfRkVBVFVSRVMgIDB4MTEgIC8vIHNldCBmZWF0dXJlcyAoVykKKyNkZWZpbmUgVVNCQVRfQVRBX0VSUk9SICAgICAweDExICAvLyBlcnJvciAoUikKKyNkZWZpbmUgVVNCQVRfQVRBX1NFQ0NOVCAgICAweDEyICAvLyBzZWN0b3IgY291bnQgKFIvVykKKyNkZWZpbmUgVVNCQVRfQVRBX1NFQ05VTSAgICAweDEzICAvLyBzZWN0b3IgbnVtYmVyIChSL1cpCisjZGVmaW5lIFVTQkFUX0FUQV9MQkFfTUUgICAgMHgxNCAgLy8gY3lsaW5kZXIgbG93IChSL1cpCisjZGVmaW5lIFVTQkFUX0FUQV9MQkFfSEkgICAgMHgxNSAgLy8gY3lsaW5kZXIgaGlnaCAoUi9XKQorI2RlZmluZSBVU0JBVF9BVEFfREVWSUNFICAgIDB4MTYgIC8vIGhlYWQvZGV2aWNlIHNlbGVjdGlvbiAoUi9XKQorI2RlZmluZSBVU0JBVF9BVEFfU1RBVFVTICAgIDB4MTcgIC8vIGRldmljZSBzdGF0dXMgKFIpCisjZGVmaW5lIFVTQkFUX0FUQV9DTUQgICAgICAgMHgxNyAgLy8gZGV2aWNlIGNvbW1hbmQgKFcpCisjZGVmaW5lIFVTQkFUX0FUQV9BTFRTVEFUVVMgMHgwRSAgLy8gc3RhdHVzIChubyBjbGVhciBJUlEpIChSKQorCisvKiBVU0JBVCBVc2VyIEkvTyBEYXRhIHJlZ2lzdGVycyAqLworI2RlZmluZSBVU0JBVF9VSU9fRVBBRAkJMHg4MCAvLyBFbmFibGUgUGVyaXBoZXJhbCBDb250cm9sIFNpZ25hbHMKKyNkZWZpbmUgVVNCQVRfVUlPX0NEVAkJMHg0MCAvLyBDYXJkIERldGVjdCAoUmVhZCBPbmx5KQorCQkJCSAgICAgLy8gQ0RUID0gQUNLRCAmICFVSTEgJiAhVUkwCisjZGVmaW5lIFVTQkFUX1VJT18xCQkweDIwIC8vIEkvTyAxCisjZGVmaW5lIFVTQkFUX1VJT18wCQkweDEwIC8vIEkvTyAwCisjZGVmaW5lIFVTQkFUX1VJT19FUFBfQVRBCTB4MDggLy8gMT1FUFAgbW9kZSwgMD1BVEEgbW9kZQorI2RlZmluZSBVU0JBVF9VSU9fVUkxCQkweDA0IC8vIElucHV0IDEKKyNkZWZpbmUgVVNCQVRfVUlPX1VJMAkJMHgwMiAvLyBJbnB1dCAwCisjZGVmaW5lIFVTQkFUX1VJT19JTlRSX0FDSwkweDAxIC8vIEludGVycnVwdCAoQVRBICYgSVNBKS9BY2tub3dsZWRnZSAoRVBQKQorCisvKiBVU0JBVCBVc2VyIEkvTyBFbmFibGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFVTQkFUX1VJT19EUlZSU1QJMHg4MCAvLyBSZXNldCBQZXJpcGhlcmFsCisjZGVmaW5lIFVTQkFUX1VJT19BQ0tECQkweDQwIC8vIEVuYWJsZSBDYXJkIERldGVjdAorI2RlZmluZSBVU0JBVF9VSU9fT0UxCQkweDIwIC8vIEkvTyAxIHNldD1vdXRwdXQvY2xyPWlucHV0CisJCQkJICAgICAvLyBJZiBBQ0tEPTEsIHNldCBPRTEgdG8gMSBhbHNvLgorI2RlZmluZSBVU0JBVF9VSU9fT0UwCQkweDEwIC8vIEkvTyAwIHNldD1vdXRwdXQvY2xyPWlucHV0CisjZGVmaW5lIFVTQkFUX1VJT19BRFBSU1QJMHgwMSAvLyBSZXNldCBTQ00gY2hpcAorCisvKiBVU0JBVCBGZWF0dXJlcyAqLworI2RlZmluZSBVU0JBVF9GRUFUX0VURU4JMHg4MCAvLyBFeHRlcm5hbCB0cmlnZ2VyIGVuYWJsZQorI2RlZmluZSBVU0JBVF9GRUFUX1UxCTB4MDgKKyNkZWZpbmUgVVNCQVRfRkVBVF9VMAkweDA0CisjZGVmaW5lIFVTQkFUX0ZFQVRfRVQxCTB4MDIKKyNkZWZpbmUgVVNCQVRfRkVBVF9FVDIJMHgwMQorCitleHRlcm4gaW50IHVzYmF0X3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7CitleHRlcm4gaW50IGluaXRfdXNiYXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKKworc3RydWN0IHVzYmF0X2luZm8geworCWludCBkZXZpY2V0eXBlOworCisJLyogVXNlZCBmb3IgRmxhc2ggcmVhZGVycyBvbmx5ICovCisJdW5zaWduZWQgbG9uZyBzZWN0b3JzOyAgICAgLy8gdG90YWwgc2VjdG9yIGNvdW50CisJdW5zaWduZWQgbG9uZyBzc2l6ZTsgICAgICAgLy8gc2VjdG9yIHNpemUgaW4gYnl0ZXMKKworCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OworCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjOyAgIC8vIGFkZGl0aW9uYWwgc2Vuc2UgY29kZQorCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjcTsgIC8vIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJjM2QyZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKQEAgLTAsMCArMSwxMjE1IEBACisvKiBEcml2ZXIgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgY29tcGxpYW50IGRldmljZXMKKyAqCisgKiAkSWQ6IHRyYW5zcG9ydC5jLHYgMS40NyAyMDAyLzA0LzIyIDAzOjM5OjQzIG1kaGFybSBFeHAgJAorICoKKyAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIGJ5OgorICogICAoYykgMTk5OS0yMDAyIE1hdHRoZXcgRGhhcm0gKG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0KQorICoKKyAqIERldmVsb3BlZCB3aXRoIHRoZSBhc3Npc3RhbmNlIG9mOgorICogICAoYykgMjAwMCBEYXZpZCBMLiBCcm93biwgSnIuICh1c2Itc3RvcmFnZUBkYXZpZGIub3JnKQorICogICAoYykgMjAwMCBTdGVwaGVuIEouIEdvd2R5IChTR293ZHlAbGJsLmdvdikKKyAqICAgKGMpIDIwMDIgQWxhbiBTdGVybiA8c3Rlcm5Acm93bGFuZC5vcmc+CisgKgorICogSW5pdGlhbCB3b3JrIGJ5OgorICogICAoYykgMTk5OSBNaWNoYWVsIEdlZSAobWljaGFlbEBsaW51eHNwZWNpZmljLmNvbSkKKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgJ1VTQiBNYXNzIFN0b3JhZ2UgQ2xhc3MnIGRvY3VtZW50LiBUaGlzCisgKiBkZXNjcmliZXMgaW4gZGV0YWlsIHRoZSBwcm90b2NvbCB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggc3VjaAorICogZGV2aWNlcy4gIENsZWFybHksIHRoZSBkZXNpZ25lcnMgaGFkIFNDU0kgYW5kIEFUQVBJIGNvbW1hbmRzIGluCisgKiBtaW5kIHdoZW4gdGhleSBjcmVhdGVkIHRoaXMgZG9jdW1lbnQuICBUaGUgY29tbWFuZHMgYXJlIGFsbCB2ZXJ5CisgKiBzaW1pbGFyIHRvIGNvbW1hbmRzIGluIHRoZSBTQ1NJLUlJIGFuZCBBVEFQSSBzcGVjaWZpY2F0aW9ucy4KKyAqCisgKiBJdCBpcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGluIGEgbnVtYmVyIG9mIGNhc2VzIHRoaXMgY2xhc3MKKyAqIGV4aGliaXRzIGNsYXNzLXNwZWNpZmljIGV4ZW1wdGlvbnMgZnJvbSB0aGUgVVNCIHNwZWNpZmljYXRpb24uCisgKiBOb3RhYmx5IHRoZSB1c2FnZSBvZiBOQUssIFNUQUxMIGFuZCBBQ0sgZGlmZmVycyBmcm9tIHRoZSBub3JtLCBpbgorICogdGhhdCB0aGV5IGFyZSB1c2VkIHRvIGNvbW11bmljYXRlIHdhaXQsIGZhaWxlZCBhbmQgT0sgb24gY29tbWFuZHMuCisgKgorICogQWxzbywgZm9yIGNlcnRhaW4gZGV2aWNlcywgdGhlIGludGVycnVwdCBlbmRwb2ludCBpcyB1c2VkIHRvIGNvbnZleQorICogc3RhdHVzIG9mIGEgY29tbWFuZC4KKyAqCisgKiBQbGVhc2Ugc2VlIGh0dHA6Ly93d3cub25lLWV5ZWQtYWxpZW4ubmV0L35tZGhhcm0vbGludXgtdXNiIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGRyaXZlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorCisjaW5jbHVkZSAidXNiLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAicHJvdG9jb2wuaCIKKyNpbmNsdWRlICJzY3NpZ2x1ZS5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEYXRhIHRyYW5zZmVyIHJvdXRpbmVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUaGlzIGlzIHN1YnRsZSwgc28gcGF5IGF0dGVudGlvbjoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogV2UncmUgdmVyeSBjb25jZXJuZWQgYWJvdXQgcmFjZXMgd2l0aCBhIGNvbW1hbmQgYWJvcnQuICBIYW5naW5nIHRoaXMgY29kZQorICogaXMgYSBzdXJlIGZpcmUgd2F5IHRvIGhhbmcgdGhlIGtlcm5lbC4gIChOb3RlIHRoYXQgdGhpcyBkaXNjdXNzaW9uIGFwcGxpZXMKKyAqIG9ubHkgdG8gdHJhbnNhY3Rpb25zIHJlc3VsdGluZyBmcm9tIGEgc2NzaSBxdWV1ZWQtY29tbWFuZCwgc2luY2Ugb25seQorICogdGhlc2UgdHJhbnNhY3Rpb25zIGFyZSBzdWJqZWN0IHRvIGEgc2NzaSBhYm9ydC4gIE90aGVyIHRyYW5zYWN0aW9ucywgc3VjaAorICogYXMgdGhvc2Ugb2NjdXJyaW5nIGR1cmluZyBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24sIG11c3QgYmUgaGFuZGxlZAorICogYnkgYSBzZXBhcmF0ZSBjb2RlIHBhdGguKQorICoKKyAqIFRoZSBhYm9ydCBmdW5jdGlvbiAodXNiX3N0b3JhZ2VfY29tbWFuZF9hYm9ydCgpIGluIHNjc2lnbHVlLmMpIGZpcnN0CisgKiBzZXRzIHRoZSBtYWNoaW5lIHN0YXRlIGFuZCB0aGUgQUJPUlRJTkcgYml0IGluIHVzLT5mbGFncyB0byBwcmV2ZW50CisgKiBuZXcgVVJCcyBmcm9tIGJlaW5nIHN1Ym1pdHRlZC4gIEl0IHRoZW4gY2FsbHMgdXNiX3N0b3Jfc3RvcF90cmFuc3BvcnQoKQorICogYmVsb3csIHdoaWNoIGF0b21pY2FsbHkgdGVzdHMtYW5kLWNsZWFycyB0aGUgVVJCX0FDVElWRSBiaXQgaW4gdXMtPmZsYWdzCisgKiB0byBzZWUgaWYgdGhlIGN1cnJlbnRfdXJiIG5lZWRzIHRvIGJlIHN0b3BwZWQuICBMaWtld2lzZSwgdGhlIFNHX0FDVElWRQorICogYml0IGlzIHRlc3RlZCB0byBzZWUgaWYgdGhlIGN1cnJlbnRfc2cgc2NhdHRlci1nYXRoZXIgcmVxdWVzdCBuZWVkcyB0byBiZQorICogc3RvcHBlZC4gIFRoZSB0aW1lb3V0IGNhbGxiYWNrIHJvdXRpbmUgZG9lcyBtdWNoIHRoZSBzYW1lIHRoaW5nLgorICoKKyAqIFdoZW4gYSBkaXNjb25uZWN0IG9jY3VycywgdGhlIERJU0NPTk5FQ1RJTkcgYml0IGluIHVzLT5mbGFncyBpcyBzZXQgdG8KKyAqIHByZXZlbnQgbmV3IFVSQnMgZnJvbSBiZWluZyBzdWJtaXR0ZWQsIGFuZCB1c2Jfc3Rvcl9zdG9wX3RyYW5zcG9ydCgpIGlzCisgKiBjYWxsZWQgdG8gc3RvcCBhbnkgb25nb2luZyByZXF1ZXN0cy4KKyAqCisgKiBUaGUgc3VibWl0IGZ1bmN0aW9uIGZpcnN0IHZlcmlmaWVzIHRoYXQgdGhlIHN1Ym1pdHRpbmcgaXMgYWxsb3dlZAorICogKG5laXRoZXIgQUJPUlRJTkcgbm9yIERJU0NPTk5FQ1RJTkcgYml0cyBhcmUgc2V0KSBhbmQgdGhhdCB0aGUgc3VibWl0CisgKiBjb21wbGV0ZXMgd2l0aG91dCBlcnJvcnMsIGFuZCBvbmx5IHRoZW4gc2V0cyB0aGUgVVJCX0FDVElWRSBiaXQuICBUaGlzCisgKiBwcmV2ZW50cyB0aGUgc3RvcF90cmFuc3BvcnQoKSBmdW5jdGlvbiBmcm9tIHRyeWluZyB0byBjYW5jZWwgdGhlIFVSQgorICogd2hpbGUgdGhlIHN1Ym1pdCBjYWxsIGlzIHVuZGVyd2F5LiAgTmV4dCwgdGhlIHN1Ym1pdCBmdW5jdGlvbiBtdXN0IHRlc3QKKyAqIHRoZSBmbGFncyB0byBzZWUgaWYgYW4gYWJvcnQgb3IgZGlzY29ubmVjdCBvY2N1cnJlZCBkdXJpbmcgdGhlIHN1Ym1pc3Npb24KKyAqIG9yIGJlZm9yZSB0aGUgVVJCX0FDVElWRSBiaXQgd2FzIHNldC4gIElmIHNvLCBpdCdzIGVzc2VudGlhbCB0byBjYW5jZWwKKyAqIHRoZSBVUkIgaWYgaXQgaGFzbid0IGJlZW4gY2FuY2VsbGVkIGFscmVhZHkgKGkuZS4sIGlmIHRoZSBVUkJfQUNUSVZFIGJpdAorICogaXMgc3RpbGwgc2V0KS4gIEVpdGhlciB3YXksIHRoZSBmdW5jdGlvbiBtdXN0IHRoZW4gd2FpdCBmb3IgdGhlIFVSQiB0bworICogZmluaXNoLiAgTm90ZSB0aGF0IGJlY2F1c2UgdGhlIFVSQl9BU1lOQ19VTkxJTksgZmxhZyBpcyBzZXQsIHRoZSBVUkIgY2FuCisgKiBzdGlsbCBiZSBpbiBwcm9ncmVzcyBldmVuIGFmdGVyIGEgY2FsbCB0byB1c2JfdW5saW5rX3VyYigpIHJldHVybnMuCisgKgorICogVGhlIGlkZWEgaXMgdGhhdCAoMSkgb25jZSB0aGUgQUJPUlRJTkcgb3IgRElTQ09OTkVDVElORyBiaXQgaXMgc2V0LAorICogZWl0aGVyIHRoZSBzdG9wX3RyYW5zcG9ydCgpIGZ1bmN0aW9uIG9yIHRoZSBzdWJtaXR0aW5nIGZ1bmN0aW9uCisgKiBpcyBndWFyYW50ZWVkIHRvIGNhbGwgdXNiX3VubGlua191cmIoKSBmb3IgYW4gYWN0aXZlIFVSQiwKKyAqIGFuZCAoMikgdGVzdF9hbmRfY2xlYXJfYml0KCkgcHJldmVudHMgdXNiX3VubGlua191cmIoKSBmcm9tIGJlaW5nCisgKiBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb3IgZnJvbSBiZWluZyBjYWxsZWQgZHVyaW5nIHVzYl9zdWJtaXRfdXJiKCkuCisgKi8KKworLyogVGhpcyBpcyB0aGUgY29tcGxldGlvbiBoYW5kbGVyIHdoaWNoIHdpbGwgd2FrZSB1cyB1cCB3aGVuIGFuIFVSQgorICogY29tcGxldGVzLgorICovCitzdGF0aWMgdm9pZCB1c2Jfc3Rvcl9ibG9ja2luZ19jb21wbGV0aW9uKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGNvbXBsZXRpb24gKnVyYl9kb25lX3B0ciA9IChzdHJ1Y3QgY29tcGxldGlvbiAqKXVyYi0+Y29udGV4dDsKKworCWNvbXBsZXRlKHVyYl9kb25lX3B0cik7Cit9CisgCisvKiBUaGlzIGlzIHRoZSB0aW1lb3V0IGhhbmRsZXIgd2hpY2ggd2lsbCBjYW5jZWwgYW4gVVJCIHdoZW4gaXRzIHRpbWVvdXQKKyAqIGV4cGlyZXMuCisgKi8KK3N0YXRpYyB2b2lkIHRpbWVvdXRfaGFuZGxlcih1bnNpZ25lZCBsb25nIHVzXykKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSAoc3RydWN0IHVzX2RhdGEgKikgdXNfOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChVU19GTElEWF9VUkJfQUNUSVZFLCAmdXMtPmZsYWdzKSkgeworCQlVU19ERUJVR1AoIlRpbWVvdXQgLS0gY2FuY2VsbGluZyBVUkJcbiIpOworCQl1c2JfdW5saW5rX3VyYih1cy0+Y3VycmVudF91cmIpOworCX0KK30KKworLyogVGhpcyBpcyB0aGUgY29tbW9uIHBhcnQgb2YgdGhlIFVSQiBtZXNzYWdlIHN1Ym1pc3Npb24gY29kZQorICoKKyAqIEFsbCBVUkJzIGZyb20gdGhlIHVzYi1zdG9yYWdlIGRyaXZlciBpbnZvbHZlZCBpbiBoYW5kbGluZyBhIHF1ZXVlZCBzY3NpCisgKiBjb21tYW5kIF9tdXN0XyBwYXNzIHRocm91Z2ggdGhpcyBmdW5jdGlvbiAob3Igc29tZXRoaW5nIGxpa2UgaXQpIGZvciB0aGUKKyAqIGFib3J0IG1lY2hhbmlzbXMgdG8gd29yayBwcm9wZXJseS4KKyAqLworc3RhdGljIGludCB1c2Jfc3Rvcl9tc2dfY29tbW9uKHN0cnVjdCB1c19kYXRhICp1cywgaW50IHRpbWVvdXQpCit7CisJc3RydWN0IGNvbXBsZXRpb24gdXJiX2RvbmU7CisJc3RydWN0IHRpbWVyX2xpc3QgdG9fdGltZXI7CisJaW50IHN0YXR1czsKKworCS8qIGRvbid0IHN1Ym1pdCBVUkJzIGR1cmluZyBhYm9ydC9kaXNjb25uZWN0IHByb2Nlc3NpbmcgKi8KKwlpZiAodXMtPmZsYWdzICYgQUJPUlRJTkdfT1JfRElTQ09OTkVDVElORykKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBzZXQgdXAgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgd2FrZXVwIHN5c3RlbSAqLworCWluaXRfY29tcGxldGlvbigmdXJiX2RvbmUpOworCisJLyogZmlsbCB0aGUgY29tbW9uIGZpZWxkcyBpbiB0aGUgVVJCICovCisJdXMtPmN1cnJlbnRfdXJiLT5jb250ZXh0ID0gJnVyYl9kb25lOworCXVzLT5jdXJyZW50X3VyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJdXMtPmN1cnJlbnRfdXJiLT5lcnJvcl9jb3VudCA9IDA7CisJdXMtPmN1cnJlbnRfdXJiLT5zdGF0dXMgPSAwOworCisJLyogd2UgYXNzdW1lIHRoYXQgaWYgdHJhbnNmZXJfYnVmZmVyIGlzbid0IHVzLT5pb2J1ZiB0aGVuIGl0CisJICogaGFzbid0IGJlZW4gbWFwcGVkIGZvciBETUEuICBZZXMsIHRoaXMgaXMgY2x1bmt5LCBidXQgaXQncworCSAqIGVhc2llciB0aGFuIGFsd2F5cyBoYXZpbmcgdGhlIGNhbGxlciB0ZWxsIHVzIHdoZXRoZXIgdGhlCisJICogdHJhbnNmZXIgYnVmZmVyIGhhcyBhbHJlYWR5IGJlZW4gbWFwcGVkLiAqLworCXVzLT5jdXJyZW50X3VyYi0+dHJhbnNmZXJfZmxhZ3MgPQorCQkJVVJCX0FTWU5DX1VOTElOSyB8IFVSQl9OT19TRVRVUF9ETUFfTUFQOworCWlmICh1cy0+Y3VycmVudF91cmItPnRyYW5zZmVyX2J1ZmZlciA9PSB1cy0+aW9idWYpCisJCXVzLT5jdXJyZW50X3VyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisJdXMtPmN1cnJlbnRfdXJiLT50cmFuc2Zlcl9kbWEgPSB1cy0+aW9idWZfZG1hOworCXVzLT5jdXJyZW50X3VyYi0+c2V0dXBfZG1hID0gdXMtPmNyX2RtYTsKKworCS8qIHN1Ym1pdCB0aGUgVVJCICovCisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXMtPmN1cnJlbnRfdXJiLCBHRlBfTk9JTyk7CisJaWYgKHN0YXR1cykgeworCQkvKiBzb21ldGhpbmcgd2VudCB3cm9uZyAqLworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCS8qIHNpbmNlIHRoZSBVUkIgaGFzIGJlZW4gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseSwgaXQncyBub3cgb2theQorCSAqIHRvIGNhbmNlbCBpdCAqLworCXNldF9iaXQoVVNfRkxJRFhfVVJCX0FDVElWRSwgJnVzLT5mbGFncyk7CisKKwkvKiBkaWQgYW4gYWJvcnQvZGlzY29ubmVjdCBvY2N1ciBkdXJpbmcgdGhlIHN1Ym1pc3Npb24/ICovCisJaWYgKHVzLT5mbGFncyAmIEFCT1JUSU5HX09SX0RJU0NPTk5FQ1RJTkcpIHsKKworCQkvKiBjYW5jZWwgdGhlIFVSQiwgaWYgaXQgaGFzbid0IGJlZW4gY2FuY2VsbGVkIGFscmVhZHkgKi8KKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChVU19GTElEWF9VUkJfQUNUSVZFLCAmdXMtPmZsYWdzKSkgeworCQkJVVNfREVCVUdQKCItLSBjYW5jZWxsaW5nIFVSQlxuIik7CisJCQl1c2JfdW5saW5rX3VyYih1cy0+Y3VycmVudF91cmIpOworCQl9CisJfQorIAorCS8qIHN1Ym1pdCB0aGUgdGltZW91dCB0aW1lciwgaWYgYSB0aW1lb3V0IHdhcyByZXF1ZXN0ZWQgKi8KKwlpZiAodGltZW91dCA+IDApIHsKKwkJaW5pdF90aW1lcigmdG9fdGltZXIpOworCQl0b190aW1lci5leHBpcmVzID0gamlmZmllcyArIHRpbWVvdXQ7CisJCXRvX3RpbWVyLmZ1bmN0aW9uID0gdGltZW91dF9oYW5kbGVyOworCQl0b190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHVzOworCQlhZGRfdGltZXIoJnRvX3RpbWVyKTsKKwl9CisKKwkvKiB3YWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgVVJCICovCisJd2FpdF9mb3JfY29tcGxldGlvbigmdXJiX2RvbmUpOworCWNsZWFyX2JpdChVU19GTElEWF9VUkJfQUNUSVZFLCAmdXMtPmZsYWdzKTsKKyAKKwkvKiBjbGVhbiB1cCB0aGUgdGltZW91dCB0aW1lciAqLworCWlmICh0aW1lb3V0ID4gMCkKKwkJZGVsX3RpbWVyX3N5bmMoJnRvX3RpbWVyKTsKKworCS8qIHJldHVybiB0aGUgVVJCIHN0YXR1cyAqLworCXJldHVybiB1cy0+Y3VycmVudF91cmItPnN0YXR1czsKK30KKworLyoKKyAqIFRyYW5zZmVyIG9uZSBjb250cm9sIG1lc3NhZ2UsIHdpdGggdGltZW91dHMsIGFuZCBhbGxvd2luZyBlYXJseQorICogdGVybWluYXRpb24uICBSZXR1cm4gY29kZXMgYXJlIHVzdWFsIC1FeHh4LCAqbm90KiBVU0JfU1RPUl9YRkVSX3h4eC4KKyAqLworaW50IHVzYl9zdG9yX2NvbnRyb2xfbXNnKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHBpcGUsCisJCSB1OCByZXF1ZXN0LCB1OCByZXF1ZXN0dHlwZSwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIAorCQkgdm9pZCAqZGF0YSwgdTE2IHNpemUsIGludCB0aW1lb3V0KQoreworCWludCBzdGF0dXM7CisKKwlVU19ERUJVR1AoIiVzOiBycT0lMDJ4IHJxdHlwZT0lMDJ4IHZhbHVlPSUwNHggaW5kZXg9JTAyeCBsZW49JXVcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHJlcXVlc3QsIHJlcXVlc3R0eXBlLAorCQkJdmFsdWUsIGluZGV4LCBzaXplKTsKKworCS8qIGZpbGwgaW4gdGhlIGRldnJlcXVlc3Qgc3RydWN0dXJlICovCisJdXMtPmNyLT5iUmVxdWVzdFR5cGUgPSByZXF1ZXN0dHlwZTsKKwl1cy0+Y3ItPmJSZXF1ZXN0ID0gcmVxdWVzdDsKKwl1cy0+Y3ItPndWYWx1ZSA9IGNwdV90b19sZTE2KHZhbHVlKTsKKwl1cy0+Y3ItPndJbmRleCA9IGNwdV90b19sZTE2KGluZGV4KTsKKwl1cy0+Y3ItPndMZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTsKKworCS8qIGZpbGwgYW5kIHN1Ym1pdCB0aGUgVVJCICovCisJdXNiX2ZpbGxfY29udHJvbF91cmIodXMtPmN1cnJlbnRfdXJiLCB1cy0+cHVzYl9kZXYsIHBpcGUsIAorCQkJICh1bnNpZ25lZCBjaGFyKikgdXMtPmNyLCBkYXRhLCBzaXplLCAKKwkJCSB1c2Jfc3Rvcl9ibG9ja2luZ19jb21wbGV0aW9uLCBOVUxMKTsKKwlzdGF0dXMgPSB1c2Jfc3Rvcl9tc2dfY29tbW9uKHVzLCB0aW1lb3V0KTsKKworCS8qIHJldHVybiB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUgZGF0YSB0cmFuc2ZlcnJlZCBpZiBubyBlcnJvciAqLworCWlmIChzdGF0dXMgPT0gMCkKKwkJc3RhdHVzID0gdXMtPmN1cnJlbnRfdXJiLT5hY3R1YWxfbGVuZ3RoOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFRoaXMgaXMgYSB2ZXJzaW9uIG9mIHVzYl9jbGVhcl9oYWx0KCkgdGhhdCBhbGxvd3MgZWFybHkgdGVybWluYXRpb24gYW5kCisgKiBkb2Vzbid0IHJlYWQgdGhlIHN0YXR1cyBmcm9tIHRoZSBkZXZpY2UgLS0gdGhpcyBpcyBiZWNhdXNlIHNvbWUgZGV2aWNlcworICogY3Jhc2ggdGhlaXIgaW50ZXJuYWwgZmlybXdhcmUgd2hlbiB0aGUgc3RhdHVzIGlzIHJlcXVlc3RlZCBhZnRlciBhIGhhbHQuCisgKgorICogQSBkZWZpbml0aXZlIGxpc3Qgb2YgdGhlc2UgJ2JhZCcgZGV2aWNlcyBpcyB0b28gZGlmZmljdWx0IHRvIG1haW50YWluIG9yCisgKiBtYWtlIGNvbXBsZXRlIGVub3VnaCB0byBiZSB1c2VmdWwuICBUaGlzIHByb2JsZW0gd2FzIGZpcnN0IG9ic2VydmVkIG9uIHRoZQorICogSGFnaXdhcmEgRmxhc2hHYXRlIERVQUwgdW5pdC4gIEhvd2V2ZXIsIGJ1cyB0cmFjZXMgcmV2ZWFsIHRoYXQgbmVpdGhlcgorICogTWFjT1Mgbm9yIFdpbmRvd3MgY2hlY2tzIHRoZSBzdGF0dXMgYWZ0ZXIgY2xlYXJpbmcgYSBoYWx0LgorICoKKyAqIFNpbmNlIG1hbnkgdmVuZG9ycyBpbiB0aGlzIHNwYWNlIGxpbWl0IHRoZWlyIHRlc3RpbmcgdG8gaW50ZXJvcGVyYWJpbGl0eQorICogd2l0aCB0aGVzZSB0d28gT1Nlcywgc3BlY2lmaWNhdGlvbiB2aW9sYXRpb25zIGxpa2UgdGhpcyBvbmUgYXJlIGNvbW1vbi4KKyAqLworaW50IHVzYl9zdG9yX2NsZWFyX2hhbHQoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlpbnQgcmVzdWx0OworCWludCBlbmRwID0gdXNiX3BpcGVlbmRwb2ludChwaXBlKTsKKworCWlmICh1c2JfcGlwZWluIChwaXBlKSkKKwkJZW5kcCB8PSBVU0JfRElSX0lOOworCisJcmVzdWx0ID0gdXNiX3N0b3JfY29udHJvbF9tc2codXMsIHVzLT5zZW5kX2N0cmxfcGlwZSwKKwkJVVNCX1JFUV9DTEVBUl9GRUFUVVJFLCBVU0JfUkVDSVBfRU5EUE9JTlQsCisJCVVTQl9FTkRQT0lOVF9IQUxULCBlbmRwLAorCQlOVUxMLCAwLCAzKkhaKTsKKworCS8qIHJlc2V0IHRoZSBlbmRwb2ludCB0b2dnbGUgKi8KKwl1c2Jfc2V0dG9nZ2xlKHVzLT5wdXNiX2RldiwgdXNiX3BpcGVlbmRwb2ludChwaXBlKSwKKwkJdXNiX3BpcGVvdXQocGlwZSksIDApOworCisJVVNfREVCVUdQKCIlczogcmVzdWx0ID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qCisgKiBJbnRlcnByZXQgdGhlIHJlc3VsdHMgb2YgYSBVUkIgdHJhbnNmZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByaW50cyBhcHByb3ByaWF0ZSBkZWJ1Z2dpbmcgbWVzc2FnZXMsIGNsZWFycyBoYWx0cyBvbgorICogbm9uLWNvbnRyb2wgZW5kcG9pbnRzLCBhbmQgdHJhbnNsYXRlcyB0aGUgc3RhdHVzIHRvIHRoZSBjb3JyZXNwb25kaW5nCisgKiBVU0JfU1RPUl9YRkVSX3h4eCByZXR1cm4gY29kZS4KKyAqLworc3RhdGljIGludCBpbnRlcnByZXRfdXJiX3Jlc3VsdChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCBwaXBlLAorCQl1bnNpZ25lZCBpbnQgbGVuZ3RoLCBpbnQgcmVzdWx0LCB1bnNpZ25lZCBpbnQgcGFydGlhbCkKK3sKKwlVU19ERUJVR1AoIlN0YXR1cyBjb2RlICVkOyB0cmFuc2ZlcnJlZCAldS8ldVxuIiwKKwkJCXJlc3VsdCwgcGFydGlhbCwgbGVuZ3RoKTsKKwlzd2l0Y2ggKHJlc3VsdCkgeworCisJLyogbm8gZXJyb3IgY29kZTsgZGlkIHdlIHNlbmQgYWxsIHRoZSBkYXRhPyAqLworCWNhc2UgMDoKKwkJaWYgKHBhcnRpYWwgIT0gbGVuZ3RoKSB7CisJCQlVU19ERUJVR1AoIi0tIHNob3J0IHRyYW5zZmVyXG4iKTsKKwkJCXJldHVybiBVU0JfU1RPUl9YRkVSX1NIT1JUOworCQl9CisKKwkJVVNfREVCVUdQKCItLSB0cmFuc2ZlciBjb21wbGV0ZVxuIik7CisJCXJldHVybiBVU0JfU1RPUl9YRkVSX0dPT0Q7CisKKwkvKiBzdGFsbGVkICovCisJY2FzZSAtRVBJUEU6CisJCS8qIGZvciBjb250cm9sIGVuZHBvaW50cywgKHVzZWQgYnkgQ0JbSV0pIGEgc3RhbGwgaW5kaWNhdGVzCisJCSAqIGEgZmFpbGVkIGNvbW1hbmQgKi8KKwkJaWYgKHVzYl9waXBlY29udHJvbChwaXBlKSkgeworCQkJVVNfREVCVUdQKCItLSBzdGFsbCBvbiBjb250cm9sIHBpcGVcbiIpOworCQkJcmV0dXJuIFVTQl9TVE9SX1hGRVJfU1RBTExFRDsKKwkJfQorCisJCS8qIGZvciBvdGhlciBzb3J0cyBvZiBlbmRwb2ludCwgY2xlYXIgdGhlIHN0YWxsICovCisJCVVTX0RFQlVHUCgiY2xlYXJpbmcgZW5kcG9pbnQgaGFsdCBmb3IgcGlwZSAweCV4XG4iLCBwaXBlKTsKKwkJaWYgKHVzYl9zdG9yX2NsZWFyX2hhbHQodXMsIHBpcGUpIDwgMCkKKwkJCXJldHVybiBVU0JfU1RPUl9YRkVSX0VSUk9SOworCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9TVEFMTEVEOworCisJLyogdGltZW91dCBvciBleGNlc3NpdmVseSBsb25nIE5BSyAqLworCWNhc2UgLUVUSU1FRE9VVDoKKwkJVVNfREVCVUdQKCItLSB0aW1lb3V0IG9yIE5BS1xuIik7CisJCXJldHVybiBVU0JfU1RPUl9YRkVSX0VSUk9SOworCisJLyogYmFiYmxlIC0gdGhlIGRldmljZSB0cmllZCB0byBzZW5kIG1vcmUgdGhhbiB3ZSB3YW50ZWQgdG8gcmVhZCAqLworCWNhc2UgLUVPVkVSRkxPVzoKKwkJVVNfREVCVUdQKCItLSBiYWJibGVcbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9MT05HOworCisJLyogdGhlIHRyYW5zZmVyIHdhcyBjYW5jZWxsZWQgYnkgYWJvcnQsIGRpc2Nvbm5lY3QsIG9yIHRpbWVvdXQgKi8KKwljYXNlIC1FQ09OTlJFU0VUOgorCQlVU19ERUJVR1AoIi0tIHRyYW5zZmVyIGNhbmNlbGxlZFxuIik7CisJCXJldHVybiBVU0JfU1RPUl9YRkVSX0VSUk9SOworCisJLyogc2hvcnQgc2NhdHRlci1nYXRoZXIgcmVhZCB0cmFuc2ZlciAqLworCWNhc2UgLUVSRU1PVEVJTzoKKwkJVVNfREVCVUdQKCItLSBzaG9ydCByZWFkIHRyYW5zZmVyXG4iKTsKKwkJcmV0dXJuIFVTQl9TVE9SX1hGRVJfU0hPUlQ7CisKKwkvKiBhYm9ydCBvciBkaXNjb25uZWN0IGluIHByb2dyZXNzICovCisJY2FzZSAtRUlPOgorCQlVU19ERUJVR1AoIi0tIGFib3J0IG9yIGRpc2Nvbm5lY3QgaW4gcHJvZ3Jlc3NcbiIpOworCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9FUlJPUjsKKworCS8qIHRoZSBjYXRjaC1hbGwgZXJyb3IgY2FzZSAqLworCWRlZmF1bHQ6CisJCVVTX0RFQlVHUCgiLS0gdW5rbm93biBlcnJvclxuIik7CisJCXJldHVybiBVU0JfU1RPUl9YRkVSX0VSUk9SOworCX0KK30KKworLyoKKyAqIFRyYW5zZmVyIG9uZSBjb250cm9sIG1lc3NhZ2UsIHdpdGhvdXQgdGltZW91dHMsIGJ1dCBhbGxvd2luZyBlYXJseQorICogdGVybWluYXRpb24uICBSZXR1cm4gY29kZXMgYXJlIFVTQl9TVE9SX1hGRVJfeHh4LgorICovCitpbnQgdXNiX3N0b3JfY3RybF90cmFuc2ZlcihzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCBwaXBlLAorCQl1OCByZXF1ZXN0LCB1OCByZXF1ZXN0dHlwZSwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsCisJCXZvaWQgKmRhdGEsIHUxNiBzaXplKQoreworCWludCByZXN1bHQ7CisKKwlVU19ERUJVR1AoIiVzOiBycT0lMDJ4IHJxdHlwZT0lMDJ4IHZhbHVlPSUwNHggaW5kZXg9JTAyeCBsZW49JXVcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHJlcXVlc3QsIHJlcXVlc3R0eXBlLAorCQkJdmFsdWUsIGluZGV4LCBzaXplKTsKKworCS8qIGZpbGwgaW4gdGhlIGRldnJlcXVlc3Qgc3RydWN0dXJlICovCisJdXMtPmNyLT5iUmVxdWVzdFR5cGUgPSByZXF1ZXN0dHlwZTsKKwl1cy0+Y3ItPmJSZXF1ZXN0ID0gcmVxdWVzdDsKKwl1cy0+Y3ItPndWYWx1ZSA9IGNwdV90b19sZTE2KHZhbHVlKTsKKwl1cy0+Y3ItPndJbmRleCA9IGNwdV90b19sZTE2KGluZGV4KTsKKwl1cy0+Y3ItPndMZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTsKKworCS8qIGZpbGwgYW5kIHN1Ym1pdCB0aGUgVVJCICovCisJdXNiX2ZpbGxfY29udHJvbF91cmIodXMtPmN1cnJlbnRfdXJiLCB1cy0+cHVzYl9kZXYsIHBpcGUsIAorCQkJICh1bnNpZ25lZCBjaGFyKikgdXMtPmNyLCBkYXRhLCBzaXplLCAKKwkJCSB1c2Jfc3Rvcl9ibG9ja2luZ19jb21wbGV0aW9uLCBOVUxMKTsKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9tc2dfY29tbW9uKHVzLCAwKTsKKworCXJldHVybiBpbnRlcnByZXRfdXJiX3Jlc3VsdCh1cywgcGlwZSwgc2l6ZSwgcmVzdWx0LAorCQkJdXMtPmN1cnJlbnRfdXJiLT5hY3R1YWxfbGVuZ3RoKTsKK30KKworLyoKKyAqIFJlY2VpdmUgb25lIGludGVycnVwdCBidWZmZXIsIHdpdGhvdXQgdGltZW91dHMsIGJ1dCBhbGxvd2luZyBlYXJseQorICogdGVybWluYXRpb24uICBSZXR1cm4gY29kZXMgYXJlIFVTQl9TVE9SX1hGRVJfeHh4LgorICoKKyAqIFRoaXMgcm91dGluZSBhbHdheXMgdXNlcyB1cy0+cmVjdl9pbnRyX3BpcGUgYXMgdGhlIHBpcGUgYW5kCisgKiB1cy0+ZXBfYkludGVydmFsIGFzIHRoZSBpbnRlcnJ1cHQgaW50ZXJ2YWwuCisgKi8KK3N0YXRpYyBpbnQgdXNiX3N0b3JfaW50cl90cmFuc2ZlcihzdHJ1Y3QgdXNfZGF0YSAqdXMsIHZvaWQgKmJ1ZiwKKwkJCQkgIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgcGlwZSA9IHVzLT5yZWN2X2ludHJfcGlwZTsKKwl1bnNpZ25lZCBpbnQgbWF4cDsKKworCVVTX0RFQlVHUCgiJXM6IHhmZXIgJXUgYnl0ZXNcbiIsIF9fRlVOQ1RJT05fXywgbGVuZ3RoKTsKKworCS8qIGNhbGN1bGF0ZSB0aGUgbWF4IHBhY2tldCBzaXplICovCisJbWF4cCA9IHVzYl9tYXhwYWNrZXQodXMtPnB1c2JfZGV2LCBwaXBlLCB1c2JfcGlwZW91dChwaXBlKSk7CisJaWYgKG1heHAgPiBsZW5ndGgpCisJCW1heHAgPSBsZW5ndGg7CisKKwkvKiBmaWxsIGFuZCBzdWJtaXQgdGhlIFVSQiAqLworCXVzYl9maWxsX2ludF91cmIodXMtPmN1cnJlbnRfdXJiLCB1cy0+cHVzYl9kZXYsIHBpcGUsIGJ1ZiwKKwkJCW1heHAsIHVzYl9zdG9yX2Jsb2NraW5nX2NvbXBsZXRpb24sIE5VTEwsCisJCQl1cy0+ZXBfYkludGVydmFsKTsKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9tc2dfY29tbW9uKHVzLCAwKTsKKworCXJldHVybiBpbnRlcnByZXRfdXJiX3Jlc3VsdCh1cywgcGlwZSwgbGVuZ3RoLCByZXN1bHQsCisJCQl1cy0+Y3VycmVudF91cmItPmFjdHVhbF9sZW5ndGgpOworfQorCisvKgorICogVHJhbnNmZXIgb25lIGJ1ZmZlciB2aWEgYnVsayBwaXBlLCB3aXRob3V0IHRpbWVvdXRzLCBidXQgYWxsb3dpbmcgZWFybHkKKyAqIHRlcm1pbmF0aW9uLiAgUmV0dXJuIGNvZGVzIGFyZSBVU0JfU1RPUl9YRkVSX3h4eC4gIElmIHRoZSBidWxrIHBpcGUKKyAqIHN0YWxscyBkdXJpbmcgdGhlIHRyYW5zZmVyLCB0aGUgaGFsdCBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQuCisgKi8KK2ludCB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1ZihzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCBwaXBlLAorCXZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbmd0aCwgdW5zaWduZWQgaW50ICphY3RfbGVuKQoreworCWludCByZXN1bHQ7CisKKwlVU19ERUJVR1AoIiVzOiB4ZmVyICV1IGJ5dGVzXG4iLCBfX0ZVTkNUSU9OX18sIGxlbmd0aCk7CisKKwkvKiBmaWxsIGFuZCBzdWJtaXQgdGhlIFVSQiAqLworCXVzYl9maWxsX2J1bGtfdXJiKHVzLT5jdXJyZW50X3VyYiwgdXMtPnB1c2JfZGV2LCBwaXBlLCBidWYsIGxlbmd0aCwKKwkJICAgICAgdXNiX3N0b3JfYmxvY2tpbmdfY29tcGxldGlvbiwgTlVMTCk7CisJcmVzdWx0ID0gdXNiX3N0b3JfbXNnX2NvbW1vbih1cywgMCk7CisKKwkvKiBzdG9yZSB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUgZGF0YSB0cmFuc2ZlcnJlZCAqLworCWlmIChhY3RfbGVuKQorCQkqYWN0X2xlbiA9IHVzLT5jdXJyZW50X3VyYi0+YWN0dWFsX2xlbmd0aDsKKwlyZXR1cm4gaW50ZXJwcmV0X3VyYl9yZXN1bHQodXMsIHBpcGUsIGxlbmd0aCwgcmVzdWx0LCAKKwkJCXVzLT5jdXJyZW50X3VyYi0+YWN0dWFsX2xlbmd0aCk7Cit9CisKKy8qCisgKiBUcmFuc2ZlciBhIHNjYXR0ZXItZ2F0aGVyIGxpc3QgdmlhIGJ1bGsgdHJhbnNmZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYmFzaWNhbGx5IHRoZSBzYW1lIHRoaW5nIGFzIHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKCkKKyAqIGFib3ZlLCBidXQgaXQgdXNlcyB0aGUgdXNiY29yZSBzY2F0dGVyLWdhdGhlciBsaWJyYXJ5LgorICovCitzdGF0aWMgaW50IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2dsaXN0KHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHBpcGUsCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBudW1fc2csIHVuc2lnbmVkIGludCBsZW5ndGgsCisJCXVuc2lnbmVkIGludCAqYWN0X2xlbikKK3sKKwlpbnQgcmVzdWx0OworCisJLyogZG9uJ3Qgc3VibWl0IHMtZyByZXF1ZXN0cyBkdXJpbmcgYWJvcnQvZGlzY29ubmVjdCBwcm9jZXNzaW5nICovCisJaWYgKHVzLT5mbGFncyAmIEFCT1JUSU5HX09SX0RJU0NPTk5FQ1RJTkcpCisJCXJldHVybiBVU0JfU1RPUl9YRkVSX0VSUk9SOworCisJLyogaW5pdGlhbGl6ZSB0aGUgc2NhdHRlci1nYXRoZXIgcmVxdWVzdCBibG9jayAqLworCVVTX0RFQlVHUCgiJXM6IHhmZXIgJXUgYnl0ZXMsICVkIGVudHJpZXNcbiIsIF9fRlVOQ1RJT05fXywKKwkJCWxlbmd0aCwgbnVtX3NnKTsKKwlyZXN1bHQgPSB1c2Jfc2dfaW5pdCgmdXMtPmN1cnJlbnRfc2csIHVzLT5wdXNiX2RldiwgcGlwZSwgMCwKKwkJCXNnLCBudW1fc2csIGxlbmd0aCwgU0xBQl9OT0lPKTsKKwlpZiAocmVzdWx0KSB7CisJCVVTX0RFQlVHUCgidXNiX3NnX2luaXQgcmV0dXJuZWQgJWRcbiIsIHJlc3VsdCk7CisJCXJldHVybiBVU0JfU1RPUl9YRkVSX0VSUk9SOworCX0KKworCS8qIHNpbmNlIHRoZSBibG9jayBoYXMgYmVlbiBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHksIGl0J3Mgbm93CisJICogb2theSB0byBjYW5jZWwgaXQgKi8KKwlzZXRfYml0KFVTX0ZMSURYX1NHX0FDVElWRSwgJnVzLT5mbGFncyk7CisKKwkvKiBkaWQgYW4gYWJvcnQvZGlzY29ubmVjdCBvY2N1ciBkdXJpbmcgdGhlIHN1Ym1pc3Npb24/ICovCisJaWYgKHVzLT5mbGFncyAmIEFCT1JUSU5HX09SX0RJU0NPTk5FQ1RJTkcpIHsKKworCQkvKiBjYW5jZWwgdGhlIHJlcXVlc3QsIGlmIGl0IGhhc24ndCBiZWVuIGNhbmNlbGxlZCBhbHJlYWR5ICovCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVVNfRkxJRFhfU0dfQUNUSVZFLCAmdXMtPmZsYWdzKSkgeworCQkJVVNfREVCVUdQKCItLSBjYW5jZWxsaW5nIHNnIHJlcXVlc3RcbiIpOworCQkJdXNiX3NnX2NhbmNlbCgmdXMtPmN1cnJlbnRfc2cpOworCQl9CisJfQorCisJLyogd2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIHRyYW5zZmVyICovCisJdXNiX3NnX3dhaXQoJnVzLT5jdXJyZW50X3NnKTsKKwljbGVhcl9iaXQoVVNfRkxJRFhfU0dfQUNUSVZFLCAmdXMtPmZsYWdzKTsKKworCXJlc3VsdCA9IHVzLT5jdXJyZW50X3NnLnN0YXR1czsKKwlpZiAoYWN0X2xlbikKKwkJKmFjdF9sZW4gPSB1cy0+Y3VycmVudF9zZy5ieXRlczsKKwlyZXR1cm4gaW50ZXJwcmV0X3VyYl9yZXN1bHQodXMsIHBpcGUsIGxlbmd0aCwgcmVzdWx0LAorCQkJdXMtPmN1cnJlbnRfc2cuYnl0ZXMpOworfQorCisvKgorICogVHJhbnNmZXIgYW4gZW50aXJlIFNDU0kgY29tbWFuZCdzIHdvcnRoIG9mIGRhdGEgcGF5bG9hZCBvdmVyIHRoZSBidWxrCisgKiBwaXBlLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIHVzZXMgdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYoKSBhbmQKKyAqIHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2dsaXN0KCkgdG8gYWNoaWV2ZSBpdHMgZ29hbHMgLS0KKyAqIHRoaXMgZnVuY3Rpb24gc2ltcGx5IGRldGVybWluZXMgd2hldGhlciB3ZSdyZSBnb2luZyB0byB1c2UKKyAqIHNjYXR0ZXItZ2F0aGVyIG9yIG5vdCwgYW5kIGFjdHMgYXBwcm9wcmlhdGVseS4KKyAqLworaW50IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2coc3RydWN0IHVzX2RhdGEqIHVzLCB1bnNpZ25lZCBpbnQgcGlwZSwKKwkJdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuZ3RoX2xlZnQsIGludCB1c2Vfc2csIGludCAqcmVzaWR1YWwpCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgcGFydGlhbDsKKworCS8qIGFyZSB3ZSBzY2F0dGVyLWdhdGhlcmluZz8gKi8KKwlpZiAodXNlX3NnKSB7CisJCS8qIHVzZSB0aGUgdXNiIGNvcmUgc2NhdHRlci1nYXRoZXIgcHJpbWl0aXZlcyAqLworCQlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX3NnbGlzdCh1cywgcGlwZSwKKwkJCQkoc3RydWN0IHNjYXR0ZXJsaXN0ICopIGJ1ZiwgdXNlX3NnLAorCQkJCWxlbmd0aF9sZWZ0LCAmcGFydGlhbCk7CisJCWxlbmd0aF9sZWZ0IC09IHBhcnRpYWw7CisJfSBlbHNlIHsKKwkJLyogbm8gc2NhdHRlci1nYXRoZXIsIGp1c3QgbWFrZSB0aGUgcmVxdWVzdCAqLworCQlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgcGlwZSwgYnVmLCAKKwkJCQlsZW5ndGhfbGVmdCwgJnBhcnRpYWwpOworCQlsZW5ndGhfbGVmdCAtPSBwYXJ0aWFsOworCX0KKworCS8qIHN0b3JlIHRoZSByZXNpZHVhbCBhbmQgcmV0dXJuIHRoZSBlcnJvciBjb2RlICovCisJaWYgKHJlc2lkdWFsKQorCQkqcmVzaWR1YWwgPSBsZW5ndGhfbGVmdDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRyYW5zcG9ydCByb3V0aW5lcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBJbnZva2UgdGhlIHRyYW5zcG9ydCBhbmQgYmFzaWMgZXJyb3ItaGFuZGxpbmcvcmVjb3ZlcnkgbWV0aG9kcworICoKKyAqIFRoaXMgaXMgdXNlZCBieSB0aGUgcHJvdG9jb2wgbGF5ZXJzIHRvIGFjdHVhbGx5IHNlbmQgdGhlIG1lc3NhZ2UgdG8KKyAqIHRoZSBkZXZpY2UgYW5kIHJlY2VpdmUgdGhlIHJlc3BvbnNlLgorICovCit2b2lkIHVzYl9zdG9yX2ludm9rZV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJaW50IG5lZWRfYXV0b19zZW5zZTsKKwlpbnQgcmVzdWx0OworCisJLyogc2VuZCB0aGUgY29tbWFuZCB0byB0aGUgdHJhbnNwb3J0IGxheWVyICovCisJc3JiLT5yZXNpZCA9IDA7CisJcmVzdWx0ID0gdXMtPnRyYW5zcG9ydChzcmIsIHVzKTsKKworCS8qIGlmIHRoZSBjb21tYW5kIGdldHMgYWJvcnRlZCBieSB0aGUgaGlnaGVyIGxheWVycywgd2UgbmVlZCB0bworCSAqIHNob3J0LWNpcmN1aXQgYWxsIG90aGVyIHByb2Nlc3NpbmcKKwkgKi8KKwlpZiAodGVzdF9iaXQoVVNfRkxJRFhfVElNRURfT1VULCAmdXMtPmZsYWdzKSkgeworCQlVU19ERUJVR1AoIi0tIGNvbW1hbmQgd2FzIGFib3J0ZWRcbiIpOworCQlnb3RvIEhhbmRsZV9BYm9ydDsKKwl9CisKKwkvKiBpZiB0aGVyZSBpcyBhIHRyYW5zcG9ydCBlcnJvciwgcmVzZXQgYW5kIGRvbid0IGF1dG8tc2Vuc2UgKi8KKwlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUikgeworCQlVU19ERUJVR1AoIi0tIHRyYW5zcG9ydCBpbmRpY2F0ZXMgZXJyb3IsIHJlc2V0dGluZ1xuIik7CisJCXVzLT50cmFuc3BvcnRfcmVzZXQodXMpOworCQlzcmItPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJcmV0dXJuOworCX0KKworCS8qIGlmIHRoZSB0cmFuc3BvcnQgcHJvdmlkZWQgaXRzIG93biBzZW5zZSBkYXRhLCBkb24ndCBhdXRvLXNlbnNlICovCisJaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfTk9fU0VOU0UpIHsKKwkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CisJCXJldHVybjsKKwl9CisKKwlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7CisKKwkvKiBEZXRlcm1pbmUgaWYgd2UgbmVlZCB0byBhdXRvLXNlbnNlCisJICoKKwkgKiBJIG5vcm1hbGx5IGRvbid0IHVzZSBhIGZsYWcgbGlrZSB0aGlzLCBidXQgaXQncyBhbG1vc3QgaW1wb3NzaWJsZQorCSAqIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIGhlcmUgaWYgSSBkb24ndC4KKwkgKi8KKwluZWVkX2F1dG9fc2Vuc2UgPSAwOworCisJLyoKKwkgKiBJZiB3ZSdyZSBydW5uaW5nIHRoZSBDQiB0cmFuc3BvcnQsIHdoaWNoIGlzIGluY2FwYWJsZQorCSAqIG9mIGRldGVybWluaW5nIHN0YXR1cyBvbiBpdHMgb3duLCB3ZSB3aWxsIGF1dG8tc2Vuc2UKKwkgKiB1bmxlc3MgdGhlIG9wZXJhdGlvbiBpbnZvbHZlZCBhIGRhdGEtaW4gdHJhbnNmZXIuICBEZXZpY2VzCisJICogY2FuIHNpZ25hbCBtb3N0IGRhdGEtaW4gZXJyb3JzIGJ5IHN0YWxsaW5nIHRoZSBidWxrLWluIHBpcGUuCisJICovCisJaWYgKCh1cy0+cHJvdG9jb2wgPT0gVVNfUFJfQ0IgfHwgdXMtPnByb3RvY29sID09IFVTX1BSX0RQQ01fVVNCKSAmJgorCQkJc3JiLT5zY19kYXRhX2RpcmVjdGlvbiAhPSBETUFfRlJPTV9ERVZJQ0UpIHsKKwkJVVNfREVCVUdQKCItLSBDQiB0cmFuc3BvcnQgZGV2aWNlIHJlcXVpcmluZyBhdXRvLXNlbnNlXG4iKTsKKwkJbmVlZF9hdXRvX3NlbnNlID0gMTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGhhdmUgYSBmYWlsdXJlLCB3ZSdyZSBnb2luZyB0byBkbyBhIFJFUVVFU1RfU0VOU0UgCisJICogYXV0b21hdGljYWxseS4gIE5vdGUgdGhhdCB3ZSBkaWZmZXJlbnRpYXRlIGJldHdlZW4gYSBjb21tYW5kCisJICogImZhaWx1cmUiIGFuZCBhbiAiZXJyb3IiIGluIHRoZSB0cmFuc3BvcnQgbWVjaGFuaXNtLgorCSAqLworCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRCkgeworCQlVU19ERUJVR1AoIi0tIHRyYW5zcG9ydCBpbmRpY2F0ZXMgY29tbWFuZCBmYWlsdXJlXG4iKTsKKwkJbmVlZF9hdXRvX3NlbnNlID0gMTsKKwl9CisKKwkvKgorCSAqIEEgc2hvcnQgdHJhbnNmZXIgb24gYSBjb21tYW5kIHdoZXJlIHdlIGRvbid0IGV4cGVjdCBpdAorCSAqIGlzIHVudXN1YWwsIGJ1dCBpdCBkb2Vzbid0IG1lYW4gd2UgbmVlZCB0byBhdXRvLXNlbnNlLgorCSAqLworCWlmICgoc3JiLT5yZXNpZCA+IDApICYmCisJICAgICEoKHNyYi0+Y21uZFswXSA9PSBSRVFVRVNUX1NFTlNFKSB8fAorCSAgICAgIChzcmItPmNtbmRbMF0gPT0gSU5RVUlSWSkgfHwKKwkgICAgICAoc3JiLT5jbW5kWzBdID09IE1PREVfU0VOU0UpIHx8CisJICAgICAgKHNyYi0+Y21uZFswXSA9PSBMT0dfU0VOU0UpIHx8CisJICAgICAgKHNyYi0+Y21uZFswXSA9PSBNT0RFX1NFTlNFXzEwKSkpIHsKKwkJVVNfREVCVUdQKCItLSB1bmV4cGVjdGVkbHkgc2hvcnQgdHJhbnNmZXJcbiIpOworCX0KKworCS8qIE5vdywgaWYgd2UgbmVlZCB0byBkbyB0aGUgYXV0by1zZW5zZSwgbGV0J3MgZG8gaXQgKi8KKwlpZiAobmVlZF9hdXRvX3NlbnNlKSB7CisJCWludCB0ZW1wX3Jlc3VsdDsKKwkJdm9pZCogb2xkX3JlcXVlc3RfYnVmZmVyOworCQl1bnNpZ25lZCBzaG9ydCBvbGRfc2c7CisJCXVuc2lnbmVkIG9sZF9yZXF1ZXN0X2J1ZmZsZW47CisJCXVuc2lnbmVkIGNoYXIgb2xkX3NjX2RhdGFfZGlyZWN0aW9uOworCQl1bnNpZ25lZCBjaGFyIG9sZF9jbWRfbGVuOworCQl1bnNpZ25lZCBjaGFyIG9sZF9jbW5kW01BWF9DT01NQU5EX1NJWkVdOworCQl1bnNpZ25lZCBsb25nIG9sZF9zZXJpYWxfbnVtYmVyOworCQlpbnQgb2xkX3Jlc2lkOworCisJCVVTX0RFQlVHUCgiSXNzdWluZyBhdXRvLVJFUVVFU1RfU0VOU0VcbiIpOworCisJCS8qIHNhdmUgdGhlIG9sZCBjb21tYW5kICovCisJCW1lbWNweShvbGRfY21uZCwgc3JiLT5jbW5kLCBNQVhfQ09NTUFORF9TSVpFKTsKKwkJb2xkX2NtZF9sZW4gPSBzcmItPmNtZF9sZW47CisKKwkJLyogc2V0IHRoZSBjb21tYW5kIGFuZCB0aGUgTFVOICovCisJCW1lbXNldChzcmItPmNtbmQsIDAsIE1BWF9DT01NQU5EX1NJWkUpOworCQlzcmItPmNtbmRbMF0gPSBSRVFVRVNUX1NFTlNFOworCQlzcmItPmNtbmRbMV0gPSBvbGRfY21uZFsxXSAmIDB4RTA7CisJCXNyYi0+Y21uZFs0XSA9IDE4OworCisJCS8qIEZJWE1FOiB3ZSBtdXN0IGRvIHRoZSBwcm90b2NvbCB0cmFuc2xhdGlvbiBoZXJlICovCisJCWlmICh1cy0+c3ViY2xhc3MgPT0gVVNfU0NfUkJDIHx8IHVzLT5zdWJjbGFzcyA9PSBVU19TQ19TQ1NJKQorCQkJc3JiLT5jbWRfbGVuID0gNjsKKwkJZWxzZQorCQkJc3JiLT5jbWRfbGVuID0gMTI7CisKKwkJLyogc2V0IHRoZSB0cmFuc2ZlciBkaXJlY3Rpb24gKi8KKwkJb2xkX3NjX2RhdGFfZGlyZWN0aW9uID0gc3JiLT5zY19kYXRhX2RpcmVjdGlvbjsKKwkJc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKKworCQkvKiB1c2UgdGhlIG5ldyBidWZmZXIgd2UgaGF2ZSAqLworCQlvbGRfcmVxdWVzdF9idWZmZXIgPSBzcmItPnJlcXVlc3RfYnVmZmVyOworCQlzcmItPnJlcXVlc3RfYnVmZmVyID0gc3JiLT5zZW5zZV9idWZmZXI7CisKKwkJLyogc2V0IHRoZSBidWZmZXIgbGVuZ3RoIGZvciB0cmFuc2ZlciAqLworCQlvbGRfcmVxdWVzdF9idWZmbGVuID0gc3JiLT5yZXF1ZXN0X2J1ZmZsZW47CisJCXNyYi0+cmVxdWVzdF9idWZmbGVuID0gMTg7CisKKwkJLyogc2V0IHVwIGZvciBubyBzY2F0dGVyLWdhdGhlciB1c2UgKi8KKwkJb2xkX3NnID0gc3JiLT51c2Vfc2c7CisJCXNyYi0+dXNlX3NnID0gMDsKKworCQkvKiBjaGFuZ2UgdGhlIHNlcmlhbCBudW1iZXIgLS0gdG9nZ2xlIHRoZSBoaWdoIGJpdCovCisJCW9sZF9zZXJpYWxfbnVtYmVyID0gc3JiLT5zZXJpYWxfbnVtYmVyOworCQlzcmItPnNlcmlhbF9udW1iZXIgXj0gMHg4MDAwMDAwMDsKKworCQkvKiBpc3N1ZSB0aGUgYXV0by1zZW5zZSBjb21tYW5kICovCisJCW9sZF9yZXNpZCA9IHNyYi0+cmVzaWQ7CisJCXNyYi0+cmVzaWQgPSAwOworCQl0ZW1wX3Jlc3VsdCA9IHVzLT50cmFuc3BvcnQodXMtPnNyYiwgdXMpOworCisJCS8qIGxldCdzIGNsZWFuIHVwIHJpZ2h0IGF3YXkgKi8KKwkJc3JiLT5yZXNpZCA9IG9sZF9yZXNpZDsKKwkJc3JiLT5yZXF1ZXN0X2J1ZmZlciA9IG9sZF9yZXF1ZXN0X2J1ZmZlcjsKKwkJc3JiLT5yZXF1ZXN0X2J1ZmZsZW4gPSBvbGRfcmVxdWVzdF9idWZmbGVuOworCQlzcmItPnVzZV9zZyA9IG9sZF9zZzsKKwkJc3JiLT5zZXJpYWxfbnVtYmVyID0gb2xkX3NlcmlhbF9udW1iZXI7CisJCXNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPSBvbGRfc2NfZGF0YV9kaXJlY3Rpb247CisJCXNyYi0+Y21kX2xlbiA9IG9sZF9jbWRfbGVuOworCQltZW1jcHkoc3JiLT5jbW5kLCBvbGRfY21uZCwgTUFYX0NPTU1BTkRfU0laRSk7CisKKwkJaWYgKHRlc3RfYml0KFVTX0ZMSURYX1RJTUVEX09VVCwgJnVzLT5mbGFncykpIHsKKwkJCVVTX0RFQlVHUCgiLS0gYXV0by1zZW5zZSBhYm9ydGVkXG4iKTsKKwkJCWdvdG8gSGFuZGxlX0Fib3J0OworCQl9CisJCWlmICh0ZW1wX3Jlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkgeworCQkJVVNfREVCVUdQKCItLSBhdXRvLXNlbnNlIGZhaWx1cmVcbiIpOworCisJCQkvKiB3ZSBza2lwIHRoZSByZXNldCBpZiB0aGlzIGhhcHBlbnMgdG8gYmUgYQorCQkJICogbXVsdGktdGFyZ2V0IGRldmljZSwgc2luY2UgZmFpbHVyZSBvZiBhbgorCQkJICogYXV0by1zZW5zZSBpcyBwZXJmZWN0bHkgdmFsaWQKKwkJCSAqLworCQkJaWYgKCEodXMtPmZsYWdzICYgVVNfRkxfU0NNX01VTFRfVEFSRykpCisJCQkJdXMtPnRyYW5zcG9ydF9yZXNldCh1cyk7CisJCQlzcmItPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJCXJldHVybjsKKwkJfQorCisJCVVTX0RFQlVHUCgiLS0gUmVzdWx0IGZyb20gYXV0by1zZW5zZSBpcyAlZFxuIiwgdGVtcF9yZXN1bHQpOworCQlVU19ERUJVR1AoIi0tIGNvZGU6IDB4JXgsIGtleTogMHgleCwgQVNDOiAweCV4LCBBU0NROiAweCV4XG4iLAorCQkJICBzcmItPnNlbnNlX2J1ZmZlclswXSwKKwkJCSAgc3JiLT5zZW5zZV9idWZmZXJbMl0gJiAweGYsCisJCQkgIHNyYi0+c2Vuc2VfYnVmZmVyWzEyXSwgCisJCQkgIHNyYi0+c2Vuc2VfYnVmZmVyWzEzXSk7CisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHCisJCXVzYl9zdG9yX3Nob3dfc2Vuc2UoCisJCQkgIHNyYi0+c2Vuc2VfYnVmZmVyWzJdICYgMHhmLAorCQkJICBzcmItPnNlbnNlX2J1ZmZlclsxMl0sIAorCQkJICBzcmItPnNlbnNlX2J1ZmZlclsxM10pOworI2VuZGlmCisKKwkJLyogc2V0IHRoZSByZXN1bHQgc28gdGhlIGhpZ2hlciBsYXllcnMgZXhwZWN0IHRoaXMgZGF0YSAqLworCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKKworCQkvKiBJZiB0aGluZ3MgYXJlIHJlYWxseSBva2F5LCB0aGVuIGxldCdzIHNob3cgdGhhdC4gIFplcm8KKwkJICogb3V0IHRoZSBzZW5zZSBidWZmZXIgc28gdGhlIGhpZ2hlciBsYXllcnMgd29uJ3QgcmVhbGl6ZQorCQkgKiB3ZSBkaWQgYW4gdW5zb2xpY2l0ZWQgYXV0by1zZW5zZS4gKi8KKwkJaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCAmJgorCQkJLyogRmlsZW1hcmsgMCwgaWdub3JlIEVPTSwgSUxJIDAsIG5vIHNlbnNlICovCisJCQkJKHNyYi0+c2Vuc2VfYnVmZmVyWzJdICYgMHhhZikgPT0gMCAmJgorCQkJLyogTm8gQVNDIG9yIEFTQ1EgKi8KKwkJCQlzcmItPnNlbnNlX2J1ZmZlclsxMl0gPT0gMCAmJgorCQkJCXNyYi0+c2Vuc2VfYnVmZmVyWzEzXSA9PSAwKSB7CisJCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7CisJCQlzcmItPnNlbnNlX2J1ZmZlclswXSA9IDB4MDsKKwkJfQorCX0KKworCS8qIERpZCB3ZSB0cmFuc2ZlciBsZXNzIHRoYW4gdGhlIG1pbmltdW0gYW1vdW50IHJlcXVpcmVkPyAqLworCWlmIChzcmItPnJlc3VsdCA9PSBTQU1fU1RBVF9HT09EICYmCisJCQlzcmItPnJlcXVlc3RfYnVmZmxlbiAtIHNyYi0+cmVzaWQgPCBzcmItPnVuZGVyZmxvdykKKwkJc3JiLT5yZXN1bHQgPSAoRElEX0VSUk9SIDw8IDE2KSB8IChTVUdHRVNUX1JFVFJZIDw8IDI0KTsKKworCXJldHVybjsKKworCS8qIGFib3J0IHByb2Nlc3Npbmc6IHRoZSBidWxrLW9ubHkgdHJhbnNwb3J0IHJlcXVpcmVzIGEgcmVzZXQKKwkgKiBmb2xsb3dpbmcgYW4gYWJvcnQgKi8KKyAgSGFuZGxlX0Fib3J0OgorCXNyYi0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OworCWlmICh1cy0+cHJvdG9jb2wgPT0gVVNfUFJfQlVMSykKKwkJdXMtPnRyYW5zcG9ydF9yZXNldCh1cyk7Cit9CisKKy8qIFN0b3AgdGhlIGN1cnJlbnQgVVJCIHRyYW5zZmVyICovCit2b2lkIHVzYl9zdG9yX3N0b3BfdHJhbnNwb3J0KHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlVU19ERUJVR1AoIiVzIGNhbGxlZFxuIiwgX19GVU5DVElPTl9fKTsKKworCS8qIElmIHRoZSBzdGF0ZSBtYWNoaW5lIGlzIGJsb2NrZWQgd2FpdGluZyBmb3IgYW4gVVJCLAorCSAqIGxldCdzIHdha2UgaXQgdXAuICBUaGUgdGVzdF9hbmRfY2xlYXJfYml0KCkgY2FsbAorCSAqIGd1YXJhbnRlZXMgdGhhdCBpZiBhIFVSQiBoYXMganVzdCBiZWVuIHN1Ym1pdHRlZCwKKwkgKiBpdCB3b24ndCBiZSBjYW5jZWxsZWQgbW9yZSB0aGFuIG9uY2UuICovCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChVU19GTElEWF9VUkJfQUNUSVZFLCAmdXMtPmZsYWdzKSkgeworCQlVU19ERUJVR1AoIi0tIGNhbmNlbGxpbmcgVVJCXG4iKTsKKwkJdXNiX3VubGlua191cmIodXMtPmN1cnJlbnRfdXJiKTsKKwl9CisKKwkvKiBJZiB3ZSBhcmUgd2FpdGluZyBmb3IgYSBzY2F0dGVyLWdhdGhlciBvcGVyYXRpb24sIGNhbmNlbCBpdC4gKi8KKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFVTX0ZMSURYX1NHX0FDVElWRSwgJnVzLT5mbGFncykpIHsKKwkJVVNfREVCVUdQKCItLSBjYW5jZWxsaW5nIHNnIHJlcXVlc3RcbiIpOworCQl1c2Jfc2dfY2FuY2VsKCZ1cy0+Y3VycmVudF9zZyk7CisJfQorfQorCisvKgorICogQ29udHJvbC9CdWxrL0ludGVycnVwdCB0cmFuc3BvcnQKKyAqLworCitpbnQgdXNiX3N0b3JfQ0JJX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwl1bnNpZ25lZCBpbnQgdHJhbnNmZXJfbGVuZ3RoID0gc3JiLT5yZXF1ZXN0X2J1ZmZsZW47CisJdW5zaWduZWQgaW50IHBpcGUgPSAwOworCWludCByZXN1bHQ7CisKKwkvKiBDT01NQU5EIFNUQUdFICovCisJLyogbGV0J3Mgc2VuZCB0aGUgY29tbWFuZCB2aWEgdGhlIGNvbnRyb2wgcGlwZSAqLworCXJlc3VsdCA9IHVzYl9zdG9yX2N0cmxfdHJhbnNmZXIodXMsIHVzLT5zZW5kX2N0cmxfcGlwZSwKKwkJCQkgICAgICBVU19DQklfQURTQywgCisJCQkJICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLCAwLCAKKwkJCQkgICAgICB1cy0+aWZudW0sIHNyYi0+Y21uZCwgc3JiLT5jbWRfbGVuKTsKKworCS8qIGNoZWNrIHRoZSByZXR1cm4gY29kZSBmb3IgdGhlIGNvbW1hbmQgKi8KKwlVU19ERUJVR1AoIkNhbGwgdG8gdXNiX3N0b3JfY3RybF90cmFuc2ZlcigpIHJldHVybmVkICVkXG4iLCByZXN1bHQpOworCisJLyogaWYgd2Ugc3RhbGxlZCB0aGUgY29tbWFuZCwgaXQgbWVhbnMgY29tbWFuZCBmYWlsZWQgKi8KKwlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfU1RBTExFRCkgeworCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwl9CisKKwkvKiBVaCBvaC4uLiBzZXJpb3VzIHByb2JsZW0gaGVyZSAqLworCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJLyogREFUQSBTVEFHRSAqLworCS8qIHRyYW5zZmVyIHRoZSBkYXRhIHBheWxvYWQgZm9yIHRoaXMgY29tbWFuZCwgaWYgb25lIGV4aXN0cyovCisJaWYgKHRyYW5zZmVyX2xlbmd0aCkgeworCQlwaXBlID0gc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UgPyAKKwkJCQl1cy0+cmVjdl9idWxrX3BpcGUgOiB1cy0+c2VuZF9idWxrX3BpcGU7CisJCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2codXMsIHBpcGUsCisJCQkJCXNyYi0+cmVxdWVzdF9idWZmZXIsIHRyYW5zZmVyX2xlbmd0aCwKKwkJCQkJc3JiLT51c2Vfc2csICZzcmItPnJlc2lkKTsKKwkJVVNfREVCVUdQKCJDQkkgZGF0YSBzdGFnZSByZXN1bHQgaXMgMHgleFxuIiwgcmVzdWx0KTsKKworCQkvKiBpZiB3ZSBzdGFsbGVkIHRoZSBkYXRhIHRyYW5zZmVyIGl0IG1lYW5zIGNvbW1hbmQgZmFpbGVkICovCisJCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9TVEFMTEVEKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7CisJCWlmIChyZXN1bHQgPiBVU0JfU1RPUl9YRkVSX1NUQUxMRUQpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCS8qIFNUQVRVUyBTVEFHRSAqLworCXJlc3VsdCA9IHVzYl9zdG9yX2ludHJfdHJhbnNmZXIodXMsIHVzLT5pb2J1ZiwgMik7CisJVVNfREVCVUdQKCJHb3QgaW50ZXJydXB0IGRhdGEgKDB4JXgsIDB4JXgpXG4iLCAKKwkJCXVzLT5pb2J1ZlswXSwgdXMtPmlvYnVmWzFdKTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCS8qIFVGSSBnaXZlcyB1cyBBU0MgYW5kIEFTQ1EsIGxpa2UgYSByZXF1ZXN0IHNlbnNlCisJICoKKwkgKiBSRVFVRVNUX1NFTlNFIGFuZCBJTlFVSVJZIGRvbid0IGFmZmVjdCB0aGUgc2Vuc2UgZGF0YSBvbiBVRkkKKwkgKiBkZXZpY2VzLCBzbyB3ZSBpZ25vcmUgdGhlIGluZm9ybWF0aW9uIGZvciB0aG9zZSBjb21tYW5kcy4gIE5vdGUKKwkgKiB0aGF0IHRoaXMgbWVhbnMgd2UgY291bGQgYmUgaWdub3JpbmcgYSByZWFsIGVycm9yIG9uIHRoZXNlCisJICogY29tbWFuZHMsIGJ1dCB0aGF0IGNhbid0IGJlIGhlbHBlZC4KKwkgKi8KKwlpZiAodXMtPnN1YmNsYXNzID09IFVTX1NDX1VGSSkgeworCQlpZiAoc3JiLT5jbW5kWzBdID09IFJFUVVFU1RfU0VOU0UgfHwKKwkJICAgIHNyYi0+Y21uZFswXSA9PSBJTlFVSVJZKQorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCQlpZiAodXMtPmlvYnVmWzBdKQorCQkJZ290byBGYWlsZWQ7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKwl9CisKKwkvKiBJZiBub3QgVUZJLCB3ZSBpbnRlcnByZXQgdGhlIGRhdGEgYXMgYSByZXN1bHQgY29kZSAKKwkgKiBUaGUgZmlyc3QgYnl0ZSBzaG91bGQgYWx3YXlzIGJlIGEgMHgwLgorCSAqCisJICogU29tZSBib2d1cyBkZXZpY2VzIGRvbid0IGZvbGxvdyB0aGF0IHJ1bGUuICBUaGV5IHN0dWZmIHRoZSBBU0MKKwkgKiBpbnRvIHRoZSBmaXJzdCBieXRlIC0tIHNvIGlmIGl0J3Mgbm9uLXplcm8sIGNhbGwgaXQgYSBmYWlsdXJlLgorCSAqLworCWlmICh1cy0+aW9idWZbMF0pIHsKKwkJVVNfREVCVUdQKCJDQkkgSVJRIGRhdGEgc2hvd2VkIHJlc2VydmVkIGJUeXBlIDB4JXhcbiIsCisJCQkJdXMtPmlvYnVmWzBdKTsKKwkJZ290byBGYWlsZWQ7CisKKwl9CisKKwkvKiBUaGUgc2Vjb25kIGJ5dGUgJiAweDBGIHNob3VsZCBiZSAweDAgZm9yIGdvb2QsIG90aGVyd2lzZSBlcnJvciAqLworCXN3aXRjaCAodXMtPmlvYnVmWzFdICYgMHgwRikgeworCQljYXNlIDB4MDA6IAorCQkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOworCQljYXNlIDB4MDE6IAorCQkJZ290byBGYWlsZWQ7CisJfQorCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkvKiB0aGUgQ0JJIHNwZWMgcmVxdWlyZXMgdGhhdCB0aGUgYnVsayBwaXBlIG11c3QgYmUgY2xlYXJlZAorCSAqIGZvbGxvd2luZyBhbnkgZGF0YS1pbi9vdXQgY29tbWFuZCBmYWlsdXJlIChzZWN0aW9uIDIuNC4zLjEuMykKKwkgKi8KKyAgRmFpbGVkOgorCWlmIChwaXBlKQorCQl1c2Jfc3Rvcl9jbGVhcl9oYWx0KHVzLCBwaXBlKTsKKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKK30KKworLyoKKyAqIENvbnRyb2wvQnVsayB0cmFuc3BvcnQKKyAqLworaW50IHVzYl9zdG9yX0NCX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwl1bnNpZ25lZCBpbnQgdHJhbnNmZXJfbGVuZ3RoID0gc3JiLT5yZXF1ZXN0X2J1ZmZsZW47CisJaW50IHJlc3VsdDsKKworCS8qIENPTU1BTkQgU1RBR0UgKi8KKwkvKiBsZXQncyBzZW5kIHRoZSBjb21tYW5kIHZpYSB0aGUgY29udHJvbCBwaXBlICovCisJcmVzdWx0ID0gdXNiX3N0b3JfY3RybF90cmFuc2Zlcih1cywgdXMtPnNlbmRfY3RybF9waXBlLAorCQkJCSAgICAgIFVTX0NCSV9BRFNDLCAKKwkJCQkgICAgICBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsIDAsIAorCQkJCSAgICAgIHVzLT5pZm51bSwgc3JiLT5jbW5kLCBzcmItPmNtZF9sZW4pOworCisJLyogY2hlY2sgdGhlIHJldHVybiBjb2RlIGZvciB0aGUgY29tbWFuZCAqLworCVVTX0RFQlVHUCgiQ2FsbCB0byB1c2Jfc3Rvcl9jdHJsX3RyYW5zZmVyKCkgcmV0dXJuZWQgJWRcbiIsIHJlc3VsdCk7CisKKwkvKiBpZiB3ZSBzdGFsbGVkIHRoZSBjb21tYW5kLCBpdCBtZWFucyBjb21tYW5kIGZhaWxlZCAqLworCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9TVEFMTEVEKSB7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCX0KKworCS8qIFVoIG9oLi4uIHNlcmlvdXMgcHJvYmxlbSBoZXJlICovCisJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHsKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKwl9CisKKwkvKiBEQVRBIFNUQUdFICovCisJLyogdHJhbnNmZXIgdGhlIGRhdGEgcGF5bG9hZCBmb3IgdGhpcyBjb21tYW5kLCBpZiBvbmUgZXhpc3RzKi8KKwlpZiAodHJhbnNmZXJfbGVuZ3RoKSB7CisJCXVuc2lnbmVkIGludCBwaXBlID0gc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UgPyAKKwkJCQl1cy0+cmVjdl9idWxrX3BpcGUgOiB1cy0+c2VuZF9idWxrX3BpcGU7CisJCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2codXMsIHBpcGUsCisJCQkJCXNyYi0+cmVxdWVzdF9idWZmZXIsIHRyYW5zZmVyX2xlbmd0aCwKKwkJCQkJc3JiLT51c2Vfc2csICZzcmItPnJlc2lkKTsKKwkJVVNfREVCVUdQKCJDQiBkYXRhIHN0YWdlIHJlc3VsdCBpcyAweCV4XG4iLCByZXN1bHQpOworCisJCS8qIGlmIHdlIHN0YWxsZWQgdGhlIGRhdGEgdHJhbnNmZXIgaXQgbWVhbnMgY29tbWFuZCBmYWlsZWQgKi8KKwkJaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9YRkVSX1NUQUxMRUQpCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKKwkJaWYgKHJlc3VsdCA+IFVTQl9TVE9SX1hGRVJfU1RBTExFRCkKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJLyogU1RBVFVTIFNUQUdFICovCisJLyogTk9URTogQ0IgZG9lcyBub3QgaGF2ZSBhIHN0YXR1cyBzdGFnZS4gIFNpbGx5LCBJIGtub3cuICBTbworCSAqIHdlIGhhdmUgdG8gY2F0Y2ggdGhpcyBhdCBhIGhpZ2hlciBsZXZlbC4KKwkgKi8KKwlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7Cit9CisKKy8qCisgKiBCdWxrIG9ubHkgdHJhbnNwb3J0CisgKi8KKworLyogRGV0ZXJtaW5lIHdoYXQgdGhlIG1heGltdW0gTFVOIHN1cHBvcnRlZCBpcyAqLworaW50IHVzYl9zdG9yX0J1bGtfbWF4X2x1bihzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJaW50IHJlc3VsdDsKKworCS8qIGlzc3VlIHRoZSBjb21tYW5kICovCisJcmVzdWx0ID0gdXNiX3N0b3JfY29udHJvbF9tc2codXMsIHVzLT5yZWN2X2N0cmxfcGlwZSwKKwkJCQkgVVNfQlVMS19HRVRfTUFYX0xVTiwgCisJCQkJIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IAorCQkJCSBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJCSAwLCB1cy0+aWZudW0sIHVzLT5pb2J1ZiwgMSwgSFopOworCisJVVNfREVCVUdQKCJHZXRNYXhMVU4gY29tbWFuZCByZXN1bHQgaXMgJWQsIGRhdGEgaXMgJWRcbiIsIAorCQkgIHJlc3VsdCwgdXMtPmlvYnVmWzBdKTsKKworCS8qIGlmIHdlIGhhdmUgYSBzdWNjZXNzZnVsIHJlcXVlc3QsIHJldHVybiB0aGUgcmVzdWx0ICovCisJaWYgKHJlc3VsdCA+IDApCisJCXJldHVybiB1cy0+aW9idWZbMF07CisKKwkvKiAKKwkgKiBTb21lIGRldmljZXMgKGkuZS4gSW9tZWdhIFppcDEwMCkgbmVlZCB0aGlzIC0tIGFwcGFyZW50bHkKKwkgKiB0aGUgYnVsayBwaXBlcyBnZXQgU1RBTExlZCB3aGVuIHRoZSBHZXRNYXhMVU4gcmVxdWVzdCBpcworCSAqIHByb2Nlc3NlZC4gICBUaGlzIGlzLCBpbiB0aGVvcnksIGhhcm1sZXNzIHRvIGFsbCBvdGhlciBkZXZpY2VzCisJICogKHJlZ2FyZGxlc3Mgb2YgaWYgdGhleSBzdGFsbCBvciBub3QpLgorCSAqLworCWlmIChyZXN1bHQgPT0gLUVQSVBFKSB7CisJCXVzYl9zdG9yX2NsZWFyX2hhbHQodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSk7CisJCXVzYl9zdG9yX2NsZWFyX2hhbHQodXMsIHVzLT5zZW5kX2J1bGtfcGlwZSk7CisJfQorCisJLyoKKwkgKiBTb21lIGRldmljZXMgZG9uJ3QgbGlrZSBHZXRNYXhMVU4uICBUaGV5IG1heSBTVEFMTCB0aGUgY29udHJvbAorCSAqIHBpcGUsIHRoZXkgbWF5IHJldHVybiBhIHplcm8tbGVuZ3RoIHJlc3VsdCwgdGhleSBtYXkgZG8gbm90aGluZyBhdAorCSAqIGFsbCBhbmQgdGltZW91dCwgb3IgdGhleSBtYXkgZmFpbCBpbiBldmVuIG1vcmUgYml6YXJyZWx5IGNyZWF0aXZlCisJICogd2F5cy4gIEluIHRoZXNlIGNhc2VzIHRoZSBiZXN0IGFwcHJvYWNoIGlzIHRvIHVzZSB0aGUgZGVmYXVsdAorCSAqIHZhbHVlOiBvbmx5IG9uZSBMVU4uCisJICovCisJcmV0dXJuIDA7Cit9CisKK2ludCB1c2Jfc3Rvcl9CdWxrX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlzdHJ1Y3QgYnVsa19jYl93cmFwICpiY2IgPSAoc3RydWN0IGJ1bGtfY2Jfd3JhcCAqKSB1cy0+aW9idWY7CisJc3RydWN0IGJ1bGtfY3Nfd3JhcCAqYmNzID0gKHN0cnVjdCBidWxrX2NzX3dyYXAgKikgdXMtPmlvYnVmOworCXVuc2lnbmVkIGludCB0cmFuc2Zlcl9sZW5ndGggPSBzcmItPnJlcXVlc3RfYnVmZmxlbjsKKwl1bnNpZ25lZCBpbnQgcmVzaWR1ZTsKKwlpbnQgcmVzdWx0OworCWludCBmYWtlX3NlbnNlID0gMDsKKwl1bnNpZ25lZCBpbnQgY3N3bGVuOworCXVuc2lnbmVkIGludCBjYndsZW4gPSBVU19CVUxLX0NCX1dSQVBfTEVOOworCisJLyogVGFrZSBjYXJlIG9mIEJVTEszMiBkZXZpY2VzOyBzZXQgZXh0cmEgYnl0ZSB0byAwICovCisJaWYgKCB1bmxpa2VseSh1cy0+ZmxhZ3MgJiBVU19GTF9CVUxLMzIpKSB7CisJCWNid2xlbiA9IDMyOworCQl1cy0+aW9idWZbMzFdID0gMDsKKwl9CisKKwkvKiBzZXQgdXAgdGhlIGNvbW1hbmQgd3JhcHBlciAqLworCWJjYi0+U2lnbmF0dXJlID0gY3B1X3RvX2xlMzIoVVNfQlVMS19DQl9TSUdOKTsKKwliY2ItPkRhdGFUcmFuc2Zlckxlbmd0aCA9IGNwdV90b19sZTMyKHRyYW5zZmVyX2xlbmd0aCk7CisJYmNiLT5GbGFncyA9IHNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFID8gMSA8PCA3IDogMDsKKwliY2ItPlRhZyA9IHNyYi0+c2VyaWFsX251bWJlcjsKKwliY2ItPkx1biA9IHNyYi0+ZGV2aWNlLT5sdW47CisJaWYgKHVzLT5mbGFncyAmIFVTX0ZMX1NDTV9NVUxUX1RBUkcpCisJCWJjYi0+THVuIHw9IHNyYi0+ZGV2aWNlLT5pZCA8PCA0OworCWJjYi0+TGVuZ3RoID0gc3JiLT5jbWRfbGVuOworCisJLyogY29weSB0aGUgY29tbWFuZCBwYXlsb2FkICovCisJbWVtc2V0KGJjYi0+Q0RCLCAwLCBzaXplb2YoYmNiLT5DREIpKTsKKwltZW1jcHkoYmNiLT5DREIsIHNyYi0+Y21uZCwgYmNiLT5MZW5ndGgpOworCisJLyogc2VuZCBpdCB0byBvdXQgZW5kcG9pbnQgKi8KKwlVU19ERUJVR1AoIkJ1bGsgQ29tbWFuZCBTIDB4JXggVCAweCV4IEwgJWQgRiAlZCBUcmcgJWQgTFVOICVkIENMICVkXG4iLAorCQkJbGUzMl90b19jcHUoYmNiLT5TaWduYXR1cmUpLCBiY2ItPlRhZywKKwkJCWxlMzJfdG9fY3B1KGJjYi0+RGF0YVRyYW5zZmVyTGVuZ3RoKSwgYmNiLT5GbGFncywKKwkJCShiY2ItPkx1biA+PiA0KSwgKGJjYi0+THVuICYgMHgwRiksIAorCQkJYmNiLT5MZW5ndGgpOworCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+c2VuZF9idWxrX3BpcGUsCisJCQkJYmNiLCBjYndsZW4sIE5VTEwpOworCVVTX0RFQlVHUCgiQnVsayBjb21tYW5kIHRyYW5zZmVyIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCS8qIERBVEEgU1RBR0UgKi8KKwkvKiBzZW5kL3JlY2VpdmUgZGF0YSBwYXlsb2FkLCBpZiB0aGVyZSBpcyBhbnkgKi8KKworCS8qIFNvbWUgVVNCLUlERSBjb252ZXJ0ZXIgY2hpcHMgbmVlZCBhIDEwMHVzIGRlbGF5IGJldHdlZW4gdGhlCisJICogY29tbWFuZCBwaGFzZSBhbmQgdGhlIGRhdGEgcGhhc2UuICBTb21lIGRldmljZXMgbmVlZCBhIGxpdHRsZQorCSAqIG1vcmUgdGhhbiB0aGF0LCBwcm9iYWJseSBiZWNhdXNlIG9mIGNsb2NrIHJhdGUgaW5hY2N1cmFjaWVzLiAqLworCWlmICh1bmxpa2VseSh1cy0+ZmxhZ3MgJiBVU19GTF9HT19TTE9XKSkKKwkJdWRlbGF5KDExMCk7CisKKwlpZiAodHJhbnNmZXJfbGVuZ3RoKSB7CisJCXVuc2lnbmVkIGludCBwaXBlID0gc3JiLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UgPyAKKwkJCQl1cy0+cmVjdl9idWxrX3BpcGUgOiB1cy0+c2VuZF9idWxrX3BpcGU7CisJCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfc2codXMsIHBpcGUsCisJCQkJCXNyYi0+cmVxdWVzdF9idWZmZXIsIHRyYW5zZmVyX2xlbmd0aCwKKwkJCQkJc3JiLT51c2Vfc2csICZzcmItPnJlc2lkKTsKKwkJVVNfREVCVUdQKCJCdWxrIGRhdGEgdHJhbnNmZXIgcmVzdWx0IDB4JXhcbiIsIHJlc3VsdCk7CisJCWlmIChyZXN1bHQgPT0gVVNCX1NUT1JfWEZFUl9FUlJPUikKKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisKKwkJLyogSWYgdGhlIGRldmljZSB0cmllZCB0byBzZW5kIGJhY2sgbW9yZSBkYXRhIHRoYW4gdGhlCisJCSAqIGFtb3VudCByZXF1ZXN0ZWQsIHRoZSBzcGVjIHJlcXVpcmVzIHVzIHRvIHRyYW5zZmVyCisJCSAqIHRoZSBDU1cgYW55d2F5LiAgU2luY2UgdGhlcmUncyBubyBwb2ludCByZXRyeWluZyB0aGUKKwkJICogdGhlIGNvbW1hbmQsIHdlJ2xsIHJldHVybiBmYWtlIHNlbnNlIGRhdGEgaW5kaWNhdGluZworCQkgKiBJbGxlZ2FsIFJlcXVlc3QsIEludmFsaWQgRmllbGQgaW4gQ0RCLgorCQkgKi8KKwkJaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9YRkVSX0xPTkcpCisJCQlmYWtlX3NlbnNlID0gMTsKKwl9CisKKwkvKiBTZWUgZmxvdyBjaGFydCBvbiBwZyAxNSBvZiB0aGUgQnVsayBPbmx5IFRyYW5zcG9ydCBzcGVjIGZvcgorCSAqIGFuIGV4cGxhbmF0aW9uIG9mIGhvdyB0aGlzIGNvZGUgd29ya3MuCisJICovCisKKwkvKiBnZXQgQ1NXIGZvciBkZXZpY2Ugc3RhdHVzICovCisJVVNfREVCVUdQKCJBdHRlbXB0aW5nIHRvIGdldCBDU1cuLi5cbiIpOworCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+cmVjdl9idWxrX3BpcGUsCisJCQkJYmNzLCBVU19CVUxLX0NTX1dSQVBfTEVOLCAmY3N3bGVuKTsKKworCS8qIFNvbWUgYnJva2VuIGRldmljZXMgYWRkIHVubmVjZXNzYXJ5IHplcm8tbGVuZ3RoIHBhY2tldHMgdG8gdGhlCisJICogZW5kIG9mIHRoZWlyIGRhdGEgdHJhbnNmZXJzLiAgU3VjaCBwYWNrZXRzIHNob3cgdXAgYXMgMC1sZW5ndGgKKwkgKiBDU1dzLiAgSWYgd2UgZW5jb3VudGVyIHN1Y2ggYSB0aGluZywgdHJ5IHRvIHJlYWQgdGhlIENTVyBhZ2Fpbi4KKwkgKi8KKwlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfU0hPUlQgJiYgY3N3bGVuID09IDApIHsKKwkJVVNfREVCVUdQKCJSZWNlaXZlZCAwLWxlbmd0aCBDU1c7IHJldHJ5aW5nLi4uXG4iKTsKKwkJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSwKKwkJCQliY3MsIFVTX0JVTEtfQ1NfV1JBUF9MRU4sICZjc3dsZW4pOworCX0KKworCS8qIGRpZCB0aGUgYXR0ZW1wdCB0byByZWFkIHRoZSBDU1cgZmFpbD8gKi8KKwlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1hGRVJfU1RBTExFRCkgeworCisJCS8qIGdldCB0aGUgc3RhdHVzIGFnYWluICovCisJCVVTX0RFQlVHUCgiQXR0ZW1wdGluZyB0byBnZXQgQ1NXICgybmQgdHJ5KS4uLlxuIik7CisJCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+cmVjdl9idWxrX3BpcGUsCisJCQkJYmNzLCBVU19CVUxLX0NTX1dSQVBfTEVOLCBOVUxMKTsKKwl9CisKKwkvKiBpZiB3ZSBzdGlsbCBoYXZlIGEgZmFpbHVyZSBhdCB0aGlzIHBvaW50LCB3ZSdyZSBpbiB0cm91YmxlICovCisJVVNfREVCVUdQKCJCdWxrIHN0YXR1cyByZXN1bHQgPSAlZFxuIiwgcmVzdWx0KTsKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKKwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKKworCS8qIGNoZWNrIGJ1bGsgc3RhdHVzICovCisJcmVzaWR1ZSA9IGxlMzJfdG9fY3B1KGJjcy0+UmVzaWR1ZSk7CisJVVNfREVCVUdQKCJCdWxrIFN0YXR1cyBTIDB4JXggVCAweCV4IFIgJXUgU3RhdCAweCV4XG4iLAorCQkJbGUzMl90b19jcHUoYmNzLT5TaWduYXR1cmUpLCBiY3MtPlRhZywgCisJCQlyZXNpZHVlLCBiY3MtPlN0YXR1cyk7CisJaWYgKGJjcy0+VGFnICE9IHNyYi0+c2VyaWFsX251bWJlciB8fCBiY3MtPlN0YXR1cyA+IFVTX0JVTEtfU1RBVF9QSEFTRSkgeworCQlVU19ERUJVR1AoIkJ1bGsgbG9naWNhbCBlcnJvclxuIik7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJLyogU29tZSBicm9rZW4gZGV2aWNlcyByZXBvcnQgb2RkIHNpZ25hdHVyZXMsIHNvIHdlIGRvIG5vdCBjaGVjayB0aGVtCisJICogZm9yIHZhbGlkaXR5IGFnYWluc3QgdGhlIHNwZWMuIFdlIHN0b3JlIHRoZSBmaXJzdCBvbmUgd2Ugc2VlLAorCSAqIGFuZCBjaGVjayBzdWJzZXF1ZW50IHRyYW5zZmVycyBmb3IgdmFsaWRpdHkgYWdhaW5zdCB0aGlzIHNpZ25hdHVyZS4KKwkgKi8KKwlpZiAoIXVzLT5iY3Nfc2lnbmF0dXJlKSB7CisJCXVzLT5iY3Nfc2lnbmF0dXJlID0gYmNzLT5TaWduYXR1cmU7CisJCWlmICh1cy0+YmNzX3NpZ25hdHVyZSAhPSBjcHVfdG9fbGUzMihVU19CVUxLX0NTX1NJR04pKQorCQkJVVNfREVCVUdQKCJMZWFybnQgQkNTIHNpZ25hdHVyZSAweCUwOFhcbiIsCisJCQkJCWxlMzJfdG9fY3B1KHVzLT5iY3Nfc2lnbmF0dXJlKSk7CisJfSBlbHNlIGlmIChiY3MtPlNpZ25hdHVyZSAhPSB1cy0+YmNzX3NpZ25hdHVyZSkgeworCQlVU19ERUJVR1AoIlNpZ25hdHVyZSBtaXNtYXRjaDogZ290ICUwOFgsIGV4cGVjdGluZyAlMDhYXG4iLAorCQkJICBsZTMyX3RvX2NwdShiY3MtPlNpZ25hdHVyZSksCisJCQkgIGxlMzJfdG9fY3B1KHVzLT5iY3Nfc2lnbmF0dXJlKSk7CisJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CisJfQorCisJLyogdHJ5IHRvIGNvbXB1dGUgdGhlIGFjdHVhbCByZXNpZHVlLCBiYXNlZCBvbiBob3cgbXVjaCBkYXRhCisJICogd2FzIHJlYWxseSB0cmFuc2ZlcnJlZCBhbmQgd2hhdCB0aGUgZGV2aWNlIHRlbGxzIHVzICovCisJaWYgKHJlc2lkdWUpIHsKKwkJaWYgKCEodXMtPmZsYWdzICYgVVNfRkxfSUdOT1JFX1JFU0lEVUUpKSB7CisJCQlyZXNpZHVlID0gbWluKHJlc2lkdWUsIHRyYW5zZmVyX2xlbmd0aCk7CisJCQlzcmItPnJlc2lkID0gbWF4KHNyYi0+cmVzaWQsIChpbnQpIHJlc2lkdWUpOworCQl9CisJfQorCisJLyogYmFzZWQgb24gdGhlIHN0YXR1cyBjb2RlLCB3ZSByZXBvcnQgZ29vZCBvciBiYWQgKi8KKwlzd2l0Y2ggKGJjcy0+U3RhdHVzKSB7CisJCWNhc2UgVVNfQlVMS19TVEFUX09LOgorCQkJLyogZGV2aWNlIGJhYmJsZWQgLS0gcmV0dXJuIGZha2Ugc2Vuc2UgZGF0YSAqLworCQkJaWYgKGZha2Vfc2Vuc2UpIHsKKwkJCQltZW1jcHkoc3JiLT5zZW5zZV9idWZmZXIsIAorCQkJCSAgICAgICB1c2Jfc3Rvcl9zZW5zZV9pbnZhbGlkQ0RCLCAKKwkJCQkgICAgICAgc2l6ZW9mKHVzYl9zdG9yX3NlbnNlX2ludmFsaWRDREIpKTsKKwkJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX05PX1NFTlNFOworCQkJfQorCisJCQkvKiBjb21tYW5kIGdvb2QgLS0gbm90ZSB0aGF0IGRhdGEgY291bGQgYmUgc2hvcnQgKi8KKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKKworCQljYXNlIFVTX0JVTEtfU1RBVF9GQUlMOgorCQkJLyogY29tbWFuZCBmYWlsZWQgKi8KKwkJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOworCisJCWNhc2UgVVNfQlVMS19TVEFUX1BIQVNFOgorCQkJLyogcGhhc2UgZXJyb3IgLS0gbm90ZSB0aGF0IGEgdHJhbnNwb3J0IHJlc2V0IHdpbGwgYmUKKwkJCSAqIGludm9rZWQgYnkgdGhlIGludm9rZV90cmFuc3BvcnQoKSBmdW5jdGlvbgorCQkJICovCisJCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOworCX0KKworCS8qIHdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgYnV0IGlmIHdlIGRvLCB3ZSdyZSBpbiB0cm91YmxlICovCisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSZXNldCByb3V0aW5lcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGlzIHRoZSBjb21tb24gcGFydCBvZiB0aGUgZGV2aWNlIHJlc2V0IGNvZGUuCisgKgorICogSXQncyBoYW5keSB0aGF0IGV2ZXJ5IHRyYW5zcG9ydCBtZWNoYW5pc20gdXNlcyB0aGUgY29udHJvbCBlbmRwb2ludCBmb3IKKyAqIHJlc2V0cy4KKyAqCisgKiBCYXNpY2FsbHksIHdlIHNlbmQgYSByZXNldCB3aXRoIGEgMjAtc2Vjb25kIHRpbWVvdXQsIHNvIHdlIGRvbid0IGdldAorICogamFtbWVkIGF0dGVtcHRpbmcgdG8gZG8gdGhlIHJlc2V0LgorICovCitzdGF0aWMgaW50IHVzYl9zdG9yX3Jlc2V0X2NvbW1vbihzdHJ1Y3QgdXNfZGF0YSAqdXMsCisJCXU4IHJlcXVlc3QsIHU4IHJlcXVlc3R0eXBlLAorCQl1MTYgdmFsdWUsIHUxNiBpbmRleCwgdm9pZCAqZGF0YSwgdTE2IHNpemUpCit7CisJaW50IHJlc3VsdDsKKwlpbnQgcmVzdWx0MjsKKwlpbnQgcmMgPSBGQUlMRUQ7CisKKwkvKiBMZXQgdGhlIFNDU0kgbGF5ZXIga25vdyB3ZSBhcmUgZG9pbmcgYSByZXNldCwgc2V0IHRoZQorCSAqIFJFU0VUVElORyBiaXQsIGFuZCBjbGVhciB0aGUgQUJPUlRJTkcgYml0IHNvIHRoYXQgdGhlIHJlc2V0CisJICogbWF5IHByb2NlZWQuCisJICovCisJc2NzaV9sb2NrKHVzX3RvX2hvc3QodXMpKTsKKwl1c2Jfc3Rvcl9yZXBvcnRfZGV2aWNlX3Jlc2V0KHVzKTsKKwlzZXRfYml0KFVTX0ZMSURYX1JFU0VUVElORywgJnVzLT5mbGFncyk7CisJY2xlYXJfYml0KFVTX0ZMSURYX0FCT1JUSU5HLCAmdXMtPmZsYWdzKTsKKwlzY3NpX3VubG9jayh1c190b19ob3N0KHVzKSk7CisKKwkvKiBBIDIwLXNlY29uZCB0aW1lb3V0IG1heSBzZWVtIHJhdGhlciBsb25nLCBidXQgYSBMYUNpZQorCSAqIFN0dWRpb0RyaXZlIFVTQjIgZGV2aWNlIHRha2VzIDE2KyBzZWNvbmRzIHRvIGdldCBnb2luZworCSAqIGZvbGxvd2luZyBhIHBvd2VydXAgb3IgVVNCIGF0dGFjaCBldmVudC4KKwkgKi8KKwlyZXN1bHQgPSB1c2Jfc3Rvcl9jb250cm9sX21zZyh1cywgdXMtPnNlbmRfY3RybF9waXBlLAorCQkJcmVxdWVzdCwgcmVxdWVzdHR5cGUsIHZhbHVlLCBpbmRleCwgZGF0YSwgc2l6ZSwKKwkJCTIwKkhaKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlVU19ERUJVR1AoIlNvZnQgcmVzZXQgZmFpbGVkOiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBEb25lOworCX0KKworIAkvKiBHaXZlIHRoZSBkZXZpY2Ugc29tZSB0aW1lIHRvIHJlY292ZXIgZnJvbSB0aGUgcmVzZXQsCisgCSAqIGJ1dCBkb24ndCBkZWxheSBkaXNjb25uZWN0IHByb2Nlc3NpbmcuICovCisgCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHVzLT5kZWxheV93YWl0LAorIAkJCXRlc3RfYml0KFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcsICZ1cy0+ZmxhZ3MpLAorIAkJCUhaKjYpOworCWlmICh0ZXN0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmZsYWdzKSkgeworCQlVU19ERUJVR1AoIlJlc2V0IGludGVycnVwdGVkIGJ5IGRpc2Nvbm5lY3RcbiIpOworCQlnb3RvIERvbmU7CisJfQorCisJVVNfREVCVUdQKCJTb2Z0IHJlc2V0OiBjbGVhcmluZyBidWxrLWluIGVuZHBvaW50IGhhbHRcbiIpOworCXJlc3VsdCA9IHVzYl9zdG9yX2NsZWFyX2hhbHQodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSk7CisKKwlVU19ERUJVR1AoIlNvZnQgcmVzZXQ6IGNsZWFyaW5nIGJ1bGstb3V0IGVuZHBvaW50IGhhbHRcbiIpOworCXJlc3VsdDIgPSB1c2Jfc3Rvcl9jbGVhcl9oYWx0KHVzLCB1cy0+c2VuZF9idWxrX3BpcGUpOworCisJLyogcmV0dXJuIGEgcmVzdWx0IGNvZGUgYmFzZWQgb24gdGhlIHJlc3VsdCBvZiB0aGUgY29udHJvbCBtZXNzYWdlICovCisJaWYgKHJlc3VsdCA8IDAgfHwgcmVzdWx0MiA8IDApIHsKKwkJVVNfREVCVUdQKCJTb2Z0IHJlc2V0IGZhaWxlZFxuIik7CisJCWdvdG8gRG9uZTsKKwl9CisJVVNfREVCVUdQKCJTb2Z0IHJlc2V0IGRvbmVcbiIpOworCXJjID0gU1VDQ0VTUzsKKworICBEb25lOgorCWNsZWFyX2JpdChVU19GTElEWF9SRVNFVFRJTkcsICZ1cy0+ZmxhZ3MpOworCXJldHVybiByYzsKK30KKworLyogVGhpcyBpc3N1ZXMgYSBDQltJXSBSZXNldCB0byB0aGUgZGV2aWNlIGluIHF1ZXN0aW9uCisgKi8KKyNkZWZpbmUgQ0JfUkVTRVRfQ01EX1NJWkUJMTIKKworaW50IHVzYl9zdG9yX0NCX3Jlc2V0KHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlVU19ERUJVR1AoIiVzIGNhbGxlZFxuIiwgX19GVU5DVElPTl9fKTsKKworCW1lbXNldCh1cy0+aW9idWYsIDB4RkYsIENCX1JFU0VUX0NNRF9TSVpFKTsKKwl1cy0+aW9idWZbMF0gPSBTRU5EX0RJQUdOT1NUSUM7CisJdXMtPmlvYnVmWzFdID0gNDsKKwlyZXR1cm4gdXNiX3N0b3JfcmVzZXRfY29tbW9uKHVzLCBVU19DQklfQURTQywgCisJCQkJIFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCQkgMCwgdXMtPmlmbnVtLCB1cy0+aW9idWYsIENCX1JFU0VUX0NNRF9TSVpFKTsKK30KKworLyogVGhpcyBpc3N1ZXMgYSBCdWxrLW9ubHkgUmVzZXQgdG8gdGhlIGRldmljZSBpbiBxdWVzdGlvbiwgaW5jbHVkaW5nCisgKiBjbGVhcmluZyB0aGUgc3Vic2VxdWVudCBlbmRwb2ludCBoYWx0cyB0aGF0IG1heSBvY2N1ci4KKyAqLworaW50IHVzYl9zdG9yX0J1bGtfcmVzZXQoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCVVTX0RFQlVHUCgiJXMgY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCisJcmV0dXJuIHVzYl9zdG9yX3Jlc2V0X2NvbW1vbih1cywgVVNfQlVMS19SRVNFVF9SRVFVRVNULCAKKwkJCQkgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJCSAwLCB1cy0+aWZudW0sIE5VTEwsIDApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI1ZjhkOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmgKQEAgLTAsMCArMSwxNzQgQEAKKy8qIERyaXZlciBmb3IgVVNCIE1hc3MgU3RvcmFnZSBjb21wbGlhbnQgZGV2aWNlcworICogVHJhbnNwb3J0IEZ1bmN0aW9ucyBIZWFkZXIgRmlsZQorICoKKyAqICRJZDogdHJhbnNwb3J0LmgsdiAxLjE4IDIwMDIvMDQvMjEgMDI6NTc6NTkgbWRoYXJtIEV4cCAkCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAxOTk5LCAyMDAwIE1hdHRoZXcgRGhhcm0gKG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0KQorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSAnVVNCIE1hc3MgU3RvcmFnZSBDbGFzcycgZG9jdW1lbnQuIFRoaXMKKyAqIGRlc2NyaWJlcyBpbiBkZXRhaWwgdGhlIHByb3RvY29sIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBzdWNoCisgKiBkZXZpY2VzLiAgQ2xlYXJseSwgdGhlIGRlc2lnbmVycyBoYWQgU0NTSSBhbmQgQVRBUEkgY29tbWFuZHMgaW4KKyAqIG1pbmQgd2hlbiB0aGV5IGNyZWF0ZWQgdGhpcyBkb2N1bWVudC4gIFRoZSBjb21tYW5kcyBhcmUgYWxsIHZlcnkKKyAqIHNpbWlsYXIgdG8gY29tbWFuZHMgaW4gdGhlIFNDU0ktSUkgYW5kIEFUQVBJIHNwZWNpZmljYXRpb25zLgorICoKKyAqIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgaW4gYSBudW1iZXIgb2YgY2FzZXMgdGhpcyBjbGFzcworICogZXhoaWJpdHMgY2xhc3Mtc3BlY2lmaWMgZXhlbXB0aW9ucyBmcm9tIHRoZSBVU0Igc3BlY2lmaWNhdGlvbi4KKyAqIE5vdGFibHkgdGhlIHVzYWdlIG9mIE5BSywgU1RBTEwgYW5kIEFDSyBkaWZmZXJzIGZyb20gdGhlIG5vcm0sIGluCisgKiB0aGF0IHRoZXkgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2FpdCwgZmFpbGVkIGFuZCBPSyBvbiBjb21tYW5kcy4KKyAqCisgKiBBbHNvLCBmb3IgY2VydGFpbiBkZXZpY2VzLCB0aGUgaW50ZXJydXB0IGVuZHBvaW50IGlzIHVzZWQgdG8gY29udmV5CisgKiBzdGF0dXMgb2YgYSBjb21tYW5kLgorICoKKyAqIFBsZWFzZSBzZWUgaHR0cDovL3d3dy5vbmUtZXllZC1hbGllbi5uZXQvfm1kaGFybS9saW51eC11c2IgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX1RSQU5TUE9SVF9IXworI2RlZmluZSBfVFJBTlNQT1JUX0hfCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKworLyogUHJvdG9jb2xzICovCisKKyNkZWZpbmUgVVNfUFJfQ0JJCTB4MDAJCS8qIENvbnRyb2wvQnVsay9JbnRlcnJ1cHQgKi8KKyNkZWZpbmUgVVNfUFJfQ0IJMHgwMQkJLyogQ29udHJvbC9CdWxrIHcvbyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgVVNfUFJfQlVMSwkweDUwCQkvKiBidWxrIG9ubHkgKi8KKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKKyNkZWZpbmUgVVNfUFJfU0NNX0FUQVBJCTB4ODAJCS8qIFNDTS1BVEFQSSBicmlkZ2UgKi8KKyNlbmRpZgorI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKKyNkZWZpbmUgVVNfUFJfRVVTQl9TRERSMDkJMHg4MQkvKiBTQ00tU0NTSSBicmlkZ2UgZm9yIFNERFItMDkgKi8KKyNlbmRpZgorI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKKyNkZWZpbmUgVVNfUFJfU0REUjU1CTB4ODIJCS8qIFNERFItNTUgKG1hZGUgdXApICovCisjZW5kaWYKKyNkZWZpbmUgVVNfUFJfRFBDTV9VU0IgIDB4ZjAJCS8qIENvbWJpbmF0aW9uIENCL1NERFIwOSAqLworCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00KKyNkZWZpbmUgVVNfUFJfRlJFRUNPTSAgIDB4ZjEJCS8qIEZyZWVjb20gKi8KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKKyNkZWZpbmUgVVNfUFJfREFUQUZBQiAgIDB4ZjIJCS8qIERhdGFmYWIgY2hpcHNldHMgKi8KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UCisjZGVmaW5lIFVTX1BSX0pVTVBTSE9UICAweGYzCQkvKiBMZXhhciBKdW1wc2hvdCAqLworI2VuZGlmCisKKyNkZWZpbmUgVVNfUFJfREVWSUNFCTB4ZmYJCS8qIFVzZSBkZXZpY2UncyB2YWx1ZSAqLworCisvKgorICogQnVsayBvbmx5IGRhdGEgc3RydWN0dXJlcworICovCisKKy8qIGNvbW1hbmQgYmxvY2sgd3JhcHBlciAqLworc3RydWN0IGJ1bGtfY2Jfd3JhcCB7CisJX19sZTMyCVNpZ25hdHVyZTsJCS8qIGNvbnRhaW5zICdVU0JDJyAqLworCV9fdTMyCVRhZzsJCQkvKiB1bmlxdWUgcGVyIGNvbW1hbmQgaWQgKi8KKwlfX2xlMzIJRGF0YVRyYW5zZmVyTGVuZ3RoOwkvKiBzaXplIG9mIGRhdGEgKi8KKwlfX3U4CUZsYWdzOwkJCS8qIGRpcmVjdGlvbiBpbiBiaXQgMCAqLworCV9fdTgJTHVuOwkJCS8qIExVTiBub3JtYWxseSAwICovCisJX191OAlMZW5ndGg7CQkJLyogb2Ygb2YgdGhlIENEQiAqLworCV9fdTgJQ0RCWzE2XTsJCS8qIG1heCBjb21tYW5kICovCit9OworCisjZGVmaW5lIFVTX0JVTEtfQ0JfV1JBUF9MRU4JMzEKKyNkZWZpbmUgVVNfQlVMS19DQl9TSUdOCQkweDQzNDI1MzU1CS8qc3BlbGxzIG91dCBVU0JDICovCisjZGVmaW5lIFVTX0JVTEtfRkxBR19JTgkJMQorI2RlZmluZSBVU19CVUxLX0ZMQUdfT1VUCTAKKworLyogY29tbWFuZCBzdGF0dXMgd3JhcHBlciAqLworc3RydWN0IGJ1bGtfY3Nfd3JhcCB7CisJX19sZTMyCVNpZ25hdHVyZTsJCS8qIHNob3VsZCA9ICdVU0JTJyAqLworCV9fdTMyCVRhZzsJCQkvKiBzYW1lIGFzIG9yaWdpbmFsIGNvbW1hbmQgKi8KKwlfX2xlMzIJUmVzaWR1ZTsJCS8qIGFtb3VudCBub3QgdHJhbnNmZXJyZWQgKi8KKwlfX3U4CVN0YXR1czsJCQkvKiBzZWUgYmVsb3cgKi8KKwlfX3U4CUZpbGxlclsxOF07Cit9OworCisjZGVmaW5lIFVTX0JVTEtfQ1NfV1JBUF9MRU4JMTMKKyNkZWZpbmUgVVNfQlVMS19DU19TSUdOCQkweDUzNDI1MzU1CS8qIHNwZWxscyBvdXQgJ1VTQlMnICovCisjZGVmaW5lIFVTX0JVTEtfU1RBVF9PSwkJMAorI2RlZmluZSBVU19CVUxLX1NUQVRfRkFJTAkxCisjZGVmaW5lIFVTX0JVTEtfU1RBVF9QSEFTRQkyCisKKy8qIGJ1bGstb25seSBjbGFzcyBzcGVjaWZpYyByZXF1ZXN0cyAqLworI2RlZmluZSBVU19CVUxLX1JFU0VUX1JFUVVFU1QJMHhmZgorI2RlZmluZSBVU19CVUxLX0dFVF9NQVhfTFVOCTB4ZmUKKworLyoKKyAqIHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfeHh4KCkgcmV0dXJuIGNvZGVzLCBpbiBvcmRlciBvZiBzZXZlcml0eQorICovCisKKyNkZWZpbmUgVVNCX1NUT1JfWEZFUl9HT09ECTAJLyogZ29vZCB0cmFuc2ZlciAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVVNCX1NUT1JfWEZFUl9TSE9SVAkxCS8qIHRyYW5zZmVycmVkIGxlc3MgdGhhbiBleHBlY3RlZCAqLworI2RlZmluZSBVU0JfU1RPUl9YRkVSX1NUQUxMRUQJMgkvKiBlbmRwb2ludCBzdGFsbGVkICAgICAgICAgICAgICAqLworI2RlZmluZSBVU0JfU1RPUl9YRkVSX0xPTkcJMwkvKiBkZXZpY2UgdHJpZWQgdG8gc2VuZCB0b28gbXVjaCAqLworI2RlZmluZSBVU0JfU1RPUl9YRkVSX0VSUk9SCTQJLyogdHJhbnNmZXIgZGllZCBpbiB0aGUgbWlkZGxlICAgKi8KKworLyoKKyAqIFRyYW5zcG9ydCByZXR1cm4gY29kZXMKKyAqLworCisjZGVmaW5lIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09ECSAgIDAgICAvKiBUcmFuc3BvcnQgZ29vZCwgY29tbWFuZCBnb29kCSAgICovCisjZGVmaW5lIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQgIDEgICAvKiBUcmFuc3BvcnQgZ29vZCwgY29tbWFuZCBmYWlsZWQgICAqLworI2RlZmluZSBVU0JfU1RPUl9UUkFOU1BPUlRfTk9fU0VOU0UgMiAgLyogQ29tbWFuZCBmYWlsZWQsIG5vIGF1dG8tc2Vuc2UgICAgKi8KKyNkZWZpbmUgVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SICAgMyAgIC8qIFRyYW5zcG9ydCBiYWQgKGkuZS4gZGV2aWNlIGRlYWQpICovCisKKy8qCisgKiBXZSB1c2VkIHRvIGhhdmUgVVNCX1NUT1JfWEZFUl9BQk9SVEVEIGFuZCBVU0JfU1RPUl9UUkFOU1BPUlRfQUJPUlRFRAorICogcmV0dXJuIGNvZGVzLiAgQnV0IG5vdyB0aGUgdHJhbnNwb3J0IGFuZCBsb3ctbGV2ZWwgdHJhbnNmZXIgcm91dGluZXMKKyAqIHRyZWF0IGFuIGFib3J0IGFzIGp1c3QgYW5vdGhlciBlcnJvciAoLUVOT0VOVCBmb3IgYSBjYW5jZWxsZWQgVVJCKS4KKyAqIEl0IGlzIHVwIHRvIHRoZSBpbnZva2VfdHJhbnNwb3J0KCkgZnVuY3Rpb24gdG8gdGVzdCBmb3IgYWJvcnRzIGFuZAorICogZGlzdGluZ3Vpc2ggdGhlbSBmcm9tIGdlbnVpbmUgY29tbXVuaWNhdGlvbiBlcnJvcnMuCisgKi8KKworLyoKKyAqIENCSSBhY2NlcHQgZGV2aWNlIHNwZWNpZmljIGNvbW1hbmQKKyAqLworCisjZGVmaW5lIFVTX0NCSV9BRFNDCQkwCisKK2V4dGVybiBpbnQgdXNiX3N0b3JfQ0JJX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCB1c19kYXRhKik7CisKK2V4dGVybiBpbnQgdXNiX3N0b3JfQ0JfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHVzX2RhdGEqKTsKK2V4dGVybiBpbnQgdXNiX3N0b3JfQ0JfcmVzZXQoc3RydWN0IHVzX2RhdGEqKTsKKworZXh0ZXJuIGludCB1c2Jfc3Rvcl9CdWxrX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCB1c19kYXRhKik7CitleHRlcm4gaW50IHVzYl9zdG9yX0J1bGtfbWF4X2x1bihzdHJ1Y3QgdXNfZGF0YSopOworZXh0ZXJuIGludCB1c2Jfc3Rvcl9CdWxrX3Jlc2V0KHN0cnVjdCB1c19kYXRhKik7CisKK2V4dGVybiB2b2lkIHVzYl9zdG9yX2ludm9rZV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3QgdXNfZGF0YSopOworZXh0ZXJuIHZvaWQgdXNiX3N0b3Jfc3RvcF90cmFuc3BvcnQoc3RydWN0IHVzX2RhdGEqKTsKKworZXh0ZXJuIGludCB1c2Jfc3Rvcl9jb250cm9sX21zZyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCBwaXBlLAorCQl1OCByZXF1ZXN0LCB1OCByZXF1ZXN0dHlwZSwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsCisJCXZvaWQgKmRhdGEsIHUxNiBzaXplLCBpbnQgdGltZW91dCk7CitleHRlcm4gaW50IHVzYl9zdG9yX2NsZWFyX2hhbHQoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgcGlwZSk7CisKK2V4dGVybiBpbnQgdXNiX3N0b3JfY3RybF90cmFuc2ZlcihzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCBwaXBlLAorCQl1OCByZXF1ZXN0LCB1OCByZXF1ZXN0dHlwZSwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsCisJCXZvaWQgKmRhdGEsIHUxNiBzaXplKTsKK2V4dGVybiBpbnQgdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgcGlwZSwKKwkJdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgKmFjdF9sZW4pOworZXh0ZXJuIGludCB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX3NnKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHBpcGUsCisJCXZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbmd0aCwgaW50IHVzZV9zZywgaW50ICpyZXNpZHVhbCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUzZjc3NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKQEAgLTAsMCArMSw5ODYgQEAKKy8qIERyaXZlciBmb3IgVVNCIE1hc3MgU3RvcmFnZSBjb21wbGlhbnQgZGV2aWNlcworICogVW51bnN1YWwgRGV2aWNlcyBGaWxlCisgKgorICogJElkOiB1bnVzdWFsX2RldnMuaCx2IDEuMzIgMjAwMi8wMi8yNSAwMjo0MToyNCBtZGhhcm0gRXhwICQKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDIwMDAtMjAwMiBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKKyAqCisgKiBJbml0aWFsIHdvcmsgYnk6CisgKiAgIChjKSAyMDAwIEFkYW0gSi4gUmljaHRlciAoYWRhbUB5Z2dkcmFzaWwuY29tKSwgWWdnZHJhc2lsIENvbXB1dGluZywgSW5jLgorICoKKyAqIFBsZWFzZSBzZWUgaHR0cDovL3d3dy5vbmUtZXllZC1hbGllbi5uZXQvfm1kaGFybS9saW51eC11c2IgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIElNUE9SVEFOVCBOT1RFOiBUaGlzIGZpbGUgbXVzdCBiZSBpbmNsdWRlZCBpbiBhbm90aGVyIGZpbGUgd2hpY2ggZG9lcworICogdGhlIGZvbGxvd2luZyB0aGluZyBmb3IgaXQgdG8gd29yazoKKyAqIFRoZSBtYWNybyBVTlVTVUFMX0RFVigpIG11c3QgYmUgZGVmaW5lZCBiZWZvcmUgdGhpcyBmaWxlIGlzIGluY2x1ZGVkCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogSWYgeW91IGVkaXQgdGhpcyBmaWxlLCBwbGVhc2UgdHJ5IHRvIGtlZXAgaXQgc29ydGVkIGZpcnN0IGJ5IFZlbmRvcklELAorICogdGhlbiBieSBQcm9kdWN0SUQuCisgKgorICogSWYgeW91IHdhbnQgdG8gYWRkIGFuIGVudHJ5IGZvciB0aGlzIGZpbGUsIGJlIHN1cmUgdG8gaW5jbHVkZSB0aGUKKyAqIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKKyAqCS0gYSBwYXRjaCB0aGF0IGFkZHMgdGhlIGVudHJ5IGZvciB5b3VyIGRldmljZSwgaW5jbHVkaW5nIHlvdXIKKyAqCSAgZW1haWwgYWRkcmVzcyByaWdodCBhYm92ZSB0aGUgZW50cnkgKHBsdXMgbWF5YmUgYSBicmllZgorICoJICBleHBsYW5hdGlvbiBvZiB0aGUgcmVhc29uIGZvciB0aGUgZW50cnkpLAorICoJLSBhIGNvcHkgb2YgL3Byb2MvYnVzL3VzYi9kZXZpY2VzIHdpdGggeW91ciBkZXZpY2UgcGx1Z2dlZCBpbgorICoJICBydW5uaW5nIHdpdGggdGhpcyBwYXRjaC4KKyAqIFNlbmQgeW91ciBzdWJtaXNzaW9uIHRvIGVpdGhlciBQaGlsIERpYm93aXR6IDxwaGlsQGlwb20uY29tPiBvcgorICogQWxhbiBTdGVybiA8c3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdT4sIGFuZCBkb24ndCBmb3JnZXQgdG8gQ0M6IHRoZQorICogVVNCIGRldmVsb3BtZW50IGxpc3QgPGxpbnV4LXVzYi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+LgorICovCisKK1VOVVNVQUxfREVWKCAgMHgwM2VlLCAweDY5MDEsIDB4MDAwMCwgMHgwMTAwLAorCQkiTWl0c3VtaSIsCisJCSJVU0IgRkREIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKKworVU5VU1VBTF9ERVYoICAweDAzZjAsIDB4MDEwNywgMHgwMjAwLCAweDAyMDAsIAorCQkiSFAiLAorCQkiQ0QtV3JpdGVyKyIsCisJCVVTX1NDXzgwNzAsIFVTX1BSX0NCLCBOVUxMLCAwKSwgCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKK1VOVVNVQUxfREVWKCAgMHgwM2YwLCAweDAyMDcsIDB4MDAwMSwgMHgwMDAxLCAKKwkJIkhQIiwKKwkJIkNELVdyaXRlcisgODIwMGUiLAorCQlVU19TQ184MDcwLCBVU19QUl9TQ01fQVRBUEksIGluaXRfdXNiYXQsIDApLCAKKworVU5VU1VBTF9ERVYoICAweDAzZjAsIDB4MDMwNywgMHgwMDAxLCAweDAwMDEsIAorCQkiSFAiLAorCQkiQ0QtV3JpdGVyKyBDRC00ZSIsCisJCVVTX1NDXzgwNzAsIFVTX1BSX1NDTV9BVEFQSSwgaW5pdF91c2JhdCwgMCksIAorI2VuZGlmCisKKy8qIERlZHVjZWQgYnkgSm9uYXRoYW4gV29pdGhlIDxqd29pdGhlQHBoeXNpY3MuYWRlbGFpZGUuZWR1LmF1PgorICogRW50cnkgbmVlZGVkIGZvciBmbGFnczogVVNfRkxfRklYX0lOUVVJUlkgYmVjYXVzZSBpbml0aWFsIGlucXVpcnkgbWVzc2FnZQorICogYWx3YXlzIGZhaWxzIGFuZCBjb25mdXNlcyBkcml2ZS4KKyAqLworVU5VU1VBTF9ERVYoICAweDA0MTEsIDB4MDAxYywgMHgwMTEzLCAweDAxMTMsCisJCSJCdWZmYWxvIiwKKwkJIkRVQi1QNDBHIEhERCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfSU5RVUlSWSApLAorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00KK1VOVVNVQUxfREVWKCAgMHgwNDM2LCAweDAwMDUsIDB4MDEwMCwgMHgwMTAwLAorCQkiTWljcm90ZWNoIiwKKwkJIkNhbWVyYU1hdGUgKERQQ01fVVNCKSIsCisgCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgTlVMTCwgMCApLAorI2VuZGlmCisKKy8qIFBhdGNoIHN1Ym1pdHRlZCBieSBQaGlsaXBwIEZyaWVkcmljaCA8cGhpbGlwcEB2b2lkLmF0PiAqLworVU5VU1VBTF9ERVYoICAweDA0ODIsIDB4MDEwMCwgMHgwMTAwLCAweDAxMDAsCisJCSJLeW9jZXJhIiwKKwkJIkZpbmVjYW0gUzN4IiwKKwkJVVNfU0NfODA3MCwgVVNfUFJfQ0IsIE5VTEwsIFVTX0ZMX0ZJWF9JTlFVSVJZKSwKKworLyogUGF0Y2ggc3VibWl0dGVkIGJ5IFBoaWxpcHAgRnJpZWRyaWNoIDxwaGlsaXBwQHZvaWQuYXQ+ICovCitVTlVTVUFMX0RFViggIDB4MDQ4MiwgMHgwMTAxLCAweDAxMDAsIDB4MDEwMCwKKwkJIkt5b2NlcmEiLAorCQkiRmluZWNhbSBTNCIsCisJCVVTX1NDXzgwNzAsIFVTX1BSX0NCLCBOVUxMLCBVU19GTF9GSVhfSU5RVUlSWSksCisKKy8qIFBhdGNoIHN1Ym1pdHRlZCBieSBTdGVwaGFuZSBHYWxsZXMgPHN0ZXBoYW5lLmdhbGxlc0BmcmVlLmZyPiAqLworVU5VU1VBTF9ERVYoICAweDA0ODIsIDB4MDEwMywgMHgwMTAwLCAweDAxMDAsCisJCSJLeW9jZXJhIiwKKwkJIkZpbmVjYW0gUzUiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwgVVNfRkxfRklYX0lOUVVJUlkpLAorCisvKiBQYXRjaCBmb3IgS3lvY2VyYSBGaW5lY2FtIEwzCisgKiBTdWJtaXR0ZWQgYnkgTWljaGFlbCBLcmF1dGggPG1pY2hhZWwua3JhdXRoQHdlYi5kZT4KKyAqIGFuZCBBbGVzc2FuZHJvIEZyYWNjaGV0dGkgPGFsLmZyYWNjaGV0dGlAdGluLml0PgorICovCitVTlVTVUFMX0RFViggIDB4MDQ4MiwgMHgwMTA1LCAweDAxMDAsIDB4MDEwMCwKKwkJIkt5b2NlcmEiLAorCQkiRmluZWNhbSBMMyIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0JVTEssIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZKSwKKworLyogUmVwb3J0ZWQgYnkgUGF1bCBTdGV3YXJ0IDxzdGV3YXJ0QHdldGxvZ2ljLm5ldD4KKyAqIFRoaXMgZW50cnkgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGRldmljZSByZXBvcnRzIFN1Yj1mZiAqLworVU5VU1VBTF9ERVYoICAweDA0YTQsIDB4MDAwNCwgMHgwMDAxLCAweDAwMDEsCisJCSJIaXRhY2hpIiwKKwkJIkRWRC1DQU0gRFotTVYxMDBBIENhbWNvcmRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0NCLCBOVUxMLCBVU19GTF9TSU5HTEVfTFVOKSwKKworLyogUmVwb3J0ZWQgYnkgQW5kcmVhcyBCb2NraG9sZCA8YW5kcmVhc0Bib2NraW9ubGluZS5kZT4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNGIwLCAweDA0MDUsIDB4MDEwMCwgMHgwMTAwLAorCQkiTklLT04iLAorCQkiTklLT04gRFNDIEQ3MCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfQ0FQQUNJVFkpLAorCisvKiBCRU5RIERDNTMzMAorICogUmVwb3J0ZWQgYnkgTWFudWVsIEZvbWJ1ZW5hIDxtZm9tYnVlbmFAeWEuY29tPiBhbmQKKyAqIEZyYW5rIENvcGVsYW5kIDxmamNAdGhpbmd5LmFwYW5hLm9yZy5hdT4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNGE1LCAweDMwMTAsIDB4MDEwMCwgMHgwMTAwLAorCQkiVGVrb20gVGVjaG5vbG9naWVzLCBJbmMiLAorCQkiMzAwX0NBTUVSQSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfUkVTSURVRSApLAorCisvKiBSZXBvcnRlZCBieSBTaW1vbiBMZXZpdHQgPHNpbW9uQHdoYXR0Zi5jb20+CisgKiBUaGlzIGVudHJ5IG5lZWRzIFN1YiBhbmQgUHJvdG8gZmllbGRzICovCitVTlVTVUFMX0RFViggIDB4MDRiOCwgMHgwNjAxLCAweDAxMDAsIDB4MDEwMCwKKwkJIkVwc29uIiwKKwkJIjg3NURDIFN0b3JhZ2UiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9DQiwgTlVMTCwgVVNfRkxfRklYX0lOUVVJUlkpLAorCisvKiBSZXBvcnRlZCBieSBLaGFsaWQgQXppeiA8a2hhbGlkQGdvbmVoaWtpbmcub3JnPgorICogVGhpcyBlbnRyeSBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgZGV2aWNlIHJlcG9ydHMgU3ViPWZmICovCitVTlVTVUFMX0RFViggIDB4MDRiOCwgMHgwNjAyLCAweDAxMTAsIDB4MDExMCwKKwkJIkVwc29uIiwKKwkJIjc4NUVQWCBTdG9yYWdlIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfQlVMSywgTlVMTCwgVVNfRkxfU0lOR0xFX0xVTiksCisKKy8qIE5vdCBzdXJlIHdobyByZXBvcnRlZCB0aGlzIG9yaWdpbmFsbHkgYnV0CisgKiBQYXZlbCBNYWNoZWsgPHBhdmVsQHVjdy5jej4gcmVwb3J0ZWQgdGhhdCB0aGUgZXh0cmEgVVNfRkxfU0lOR0xFX0xVTgorICogZmxhZyBiZSBhZGRlZCAqLworVU5VU1VBTF9ERVYoICAweDA0Y2IsIDB4MDEwMCwgMHgwMDAwLCAweDIyMTAsCisJCSJGdWppZmlsbSIsCisJCSJGaW5lUGl4IDE0MDBab29tIiwKKwkJVVNfU0NfVUZJLCBVU19QUl9ERVZJQ0UsIE5VTEwsIFVTX0ZMX0ZJWF9JTlFVSVJZIHwgVVNfRkxfU0lOR0xFX0xVTiksCisKKy8qIFJlcG9ydGVkIGJ5IFBldGVyIFfkY2h0bGVyIDxwd2FlY2h0bGVyQGxvZXdlLWtvbXAuZGU+CisgKiBUaGUgZGV2aWNlIG5lZWRzIHRoZSBmbGFncyBvbmx5LgorICovCitVTlVTVUFMX0RFViggIDB4MDRjZSwgMHgwMDAyLCAweDAwNzQsIDB4MDA3NCwKKwkJIlNjYW5Mb2dpYyIsCisJCSJTTDExUi1JREUiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfRklYX0lOUVVJUlkpLAorCisvKiBSZXBvcnRlZCBieSBLcmlzdG9uIEZpbmNoZXIgPGtyaXN0b25AYWlybWFpbC5uZXQ+CisgKiBQYXRjaCBzdWJtaXR0ZWQgYnkgU2VhbiBNaWxsaWNoYW1wIDxzZWFuQGJydWVub3Iub3JnPgorICogVGhpcyBpcyB0byBzdXBwb3J0IHRoZSBQYW5hc29uaWMgUGFsbUNhbSBQVi1TRDQwOTAKKyAqIFRoaXMgZW50cnkgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGRldmljZSByZXBvcnRzIFN1Yj1mZiAKKyAqLworVU5VU1VBTF9ERVYoICAweDA0ZGEsIDB4MDkwMSwgMHgwMTAwLCAweDAyMDAsCisJCSJQYW5hc29uaWMiLAorCQkiTFMtMTIwIENhbWVyYSIsCisJCVVTX1NDX1VGSSwgVVNfUFJfREVWSUNFLCBOVUxMLCAwKSwKKworLyogRnJvbSBZdWtpaGlybyBOYWthaSwgdmlhIHphaXRjZXZAeWFob28uY29tLgorICogVGhpcyBpcyBuZWVkZWQgZm9yIENCIGluc3RlYWQgb2YgQ0JJICovCitVTlVTVUFMX0RFViggIDB4MDRkYSwgMHgwZDA1LCAweDAwMDAsIDB4MDAwMCwKKwkJIlNoYXJwIENFLUNXMDUiLAorCQkiQ0QtUi9SVyBEcml2ZSIsCisJCVVTX1NDXzgwNzAsIFVTX1BSX0NCLCBOVUxMLCAwKSwKKworLyogUmVwb3J0ZWQgYnkgQWRyaWFhbiBQZW5uaW5nIDxhLnBlbm5pbmdAbHVvbi5uZXQ+ICovCitVTlVTVUFMX0RFViggIDB4MDRkYSwgMHgyMzcyLCAweDAwMDAsIDB4OTk5OSwKKwkJIlBhbmFzb25pYyIsCisJCSJETUMtTEN4IENhbWVyYSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfQ0FQQUNJVFkgfCBVU19GTF9OT1RfTE9DS0FCTEUgKSwKKworLyogTW9zdCBvZiB0aGUgZm9sbG93aW5nIGVudHJpZXMgd2VyZSBkZXZlbG9wZWQgd2l0aCB0aGUgaGVscCBvZgorICogU2h1dHRsZS9TQ00gZGlyZWN0bHkuCisgKi8KK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDEsIDB4MDIwMCwgMHgwMjAwLCAKKwkJIk1hdHNoaXRhIiwKKwkJIkxTLTEyMCIsCisJCVVTX1NDXzgwMjAsIFVTX1BSX0NCLCBOVUxMLCAwKSwKKworVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwMiwgMHgwMTAwLCAweDAxMDAsIAorCQkiU2h1dHRsZSIsCisJCSJlVVNDU0kgQnJpZGdlIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIHVzYl9zdG9yX2V1c2NzaV9pbml0LCAKKwkJVVNfRkxfU0NNX01VTFRfVEFSRyApLCAKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMDMsIDB4MDAwMCwgMHg5OTk5LCAKKwkJIlNhbmRpc2siLAorCQkiSW1hZ2VNYXRlIFNERFIwOSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOICksCisKKy8qIFRoaXMgZW50cnkgaXMgZnJvbSBBbmRyaWVzLkJyb3V3ZXJAY3dpLm5sICovCitVTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMDA1LCAweDAxMDAsIDB4MDIwOCwKKwkJIlNDTSBNaWNyb3N5c3RlbXMiLAorCQkiZVVTQiBTbWFydE1lZGlhIC8gQ29tcGFjdEZsYXNoIEFkYXB0ZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgc2RkcjA5X2luaXQsIAorCQkwKSwgCisjZW5kaWYKKworLyogUmVwb3J0ZWQgYnkgTWFya3VzIERlbWxlaXRuZXIgPG1zZGVtbGVpQGNsLnVuaS1oZWlkZWxiZXJnLmRlPiAqLworVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwNiwgMHgwMTAwLCAweDAxMDAsIAorCQkiU0NNIE1pY3Jvc3lzdGVtcyBJbmMuIiwKKwkJImVVU0IgTU1DIEFkYXB0ZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9DQiwgTlVMTCwgCisJCVVTX0ZMX1NJTkdMRV9MVU4pLCAKKworLyogUmVwb3J0ZWQgYnkgRGFuaWVsIE5vdXJpIDxkcHVua3RucHVua3RAd2ViLmRlPiAqLworVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwNiwgMHgwMjA1LCAweDAyMDUsIAorCQkiU2h1dHRsZSIsCisJCSJlVVNCIE1NQyBBZGFwdGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREVWSUNFLCBOVUxMLCAKKwkJVVNfRkxfU0lOR0xFX0xVTiksIAorCitVTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMDA3LCAweDAxMDAsIDB4MDIwMCwgCisJCSJTb255IiwKKwkJIkhpZmQiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9DQiwgTlVMTCwgCisJCVVTX0ZMX1NJTkdMRV9MVU4pLCAKKworVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwOSwgMHgwMjAwLCAweDAyMDAsIAorCQkiU2h1dHRsZSIsCisJCSJlVVNCIEFUQS9BVEFQSSBBZGFwdGVyIiwKKwkJVVNfU0NfODAyMCwgVVNfUFJfQ0IsIE5VTEwsIDApLAorCitVTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMDBhLCAweDAyMDAsIDB4MDIwMCwgCisJCSJTaHV0dGxlIiwKKwkJImVVU0IgQ29tcGFjdEZsYXNoIEFkYXB0ZXIiLAorCQlVU19TQ184MDIwLCBVU19QUl9DQiwgTlVMTCwgMCksCisKK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDAwMEIsIDB4MDEwMCwgMHgwMTAwLCAKKwkJIlNodXR0bGUiLAorCQkiZVVTQ1NJIEJyaWRnZSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0JVTEssIHVzYl9zdG9yX2V1c2NzaV9pbml0LCAKKwkJVVNfRkxfU0NNX01VTFRfVEFSRyApLCAKKworVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwQywgMHgwMTAwLCAweDAxMDAsIAorCQkiU2h1dHRsZSIsCisJCSJlVVNDU0kgQnJpZGdlIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfQlVMSywgdXNiX3N0b3JfZXVzY3NpX2luaXQsIAorCQlVU19GTF9TQ01fTVVMVF9UQVJHICksIAorCitVTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMTAxLCAweDAyMDAsIDB4MDIwMCwgCisJCSJTaHV0dGxlIiwKKwkJIkNELVJXIERldmljZSIsCisJCVVTX1NDXzgwMjAsIFVTX1BSX0NCLCBOVUxMLCAwKSwKKworLyogRW50cnkgYW5kIHN1cHBvcnRpbmcgcGF0Y2ggYnkgVGhlb2RvcmUgS2lsZ29yZSA8a2lsZ290YUBhdWJ1cm4uZWR1Pi4KKyAqIERldmljZSB1c2VzIHN0YW5kYXJkcy12aW9sYXRpbmcgMzItYnl0ZSBCdWxrIENvbW1hbmQgQmxvY2sgV3JhcHBlcnMgYW5kCisgKiByZXBvcnRzIGl0c2VsZiBhcyAiUHJvcHJpZXRhcnkgU0NTSSBCdWxrLiIgQ2YuIGRldmljZSBlbnRyeSAweDA4NGQ6MHgwMDExLgorICovCisKK1VOVVNVQUxfREVWKCAgMHgwNGZjLCAweDgwYzIsIDB4MDEwMCwgMHgwMTAwLAorCQkiS29iaWFuIE1lcmN1cnkiLAorCQkiQmlub2NhbSBEQ0ItMTMyIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0JVTEszMiksCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKK1VOVVNVQUxfREVWKCAgMHgwNGU2LCAweDEwMTAsIDB4MDAwMCwgMHg5OTk5LAorCQkiU0NNIiwKKwkJIlNDTSBVU0JBVC0wMiIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX1NDTV9BVEFQSSwgaW5pdF91c2JhdCwKKwkJVVNfRkxfU0lOR0xFX0xVTiksCisjZW5kaWYKKworLyogUmVwb3J0ZWQgYnkgQm9iIFNhc3MgPHJsc0B2ZWN0b3JkYi5jb20+IC0tIG9ubHkgcmV2IDEuMzMgdGVzdGVkICovCitVTlVTVUFMX0RFViggIDB4MDUwZCwgMHgwMTE1LCAweDAxMzMsIDB4MDEzMywKKwkJIkJlbGtpbiIsCisJCSJVU0IgU0NTSSBBZGFwdG9yIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfQlVMSywgdXNiX3N0b3JfZXVzY3NpX2luaXQsCisJCVVTX0ZMX1NDTV9NVUxUX1RBUkcgKSwKKworLyogSW9tZWdhIENsaWshIERyaXZlIAorICogUmVwb3J0ZWQgYnkgRGF2aWQgQ2hhdGVuYXkgPGRjaGF0ZW5heUBob3RtYWlsLmNvbT4KKyAqIFRoZSByZWFzb24gdGhpcyBpcyBuZWVkZWQgaXMgbm90IGZ1bGx5IGtub3duLgorICovCitVTlVTVUFMX0RFViggIDB4MDUyNSwgMHhhMTQwLCAweDAxMDAsIDB4MDEwMCwKKwkJIklvbWVnYSIsCisJCSJVU0IgQ2xpayEgNDAiLAorCQlVU19TQ184MDcwLCBVU19QUl9CVUxLLCBOVUxMLAorCQlVU19GTF9GSVhfSU5RVUlSWSApLAorCisvKiBZYWt1bW8gTWVnYSBJbWFnZSAzNworICogU3VibWl0dGVkIGJ5IFN0ZXBoYW4gRnVocm1hbm4gPGF0b21lbmVyZ2llQHQtb25saW5lLmRlPiAqLworVU5VU1VBTF9ERVYoICAweDA1MmIsIDB4MTgwMSwgMHgwMTAwLCAweDAxMDAsCisJCSJUZWtvbSBUZWNobm9sb2dpZXMsIEluYyIsCisJCSIzMDBfQ0FNRVJBIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCisKKy8qIEFub3RoZXIgWWFrdW1vIGNhbWVyYS4KKyAqIFJlcG9ydGVkIGJ5IE1pY2hlbGUgQWx6ZXR0YSA8bWljaGVsZS5hbHpldHRhQGFsaWNlcG9zdGEuaXQ+ICovCitVTlVTVUFMX0RFViggIDB4MDUyYiwgMHgxODA0LCAweDAxMDAsIDB4MDEwMCwKKwkJIlRla29tIFRlY2hub2xvZ2llcywgSW5jIiwKKwkJIjMwMF9DQU1FUkEiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgKSwKKworLyogUmVwb3J0ZWQgYnkgSWFjb3BvIFNwYWxsZXR0aSA8YXZ2aXNpQHNwYWxsZXR0aS5pdD4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNTJiLCAweDE4MDcsIDB4MDEwMCwgMHgwMTAwLAorCQkiVGVrb20gVGVjaG5vbG9naWVzLCBJbmMiLAorCQkiMzAwX0NBTUVSQSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfUkVTSURVRSApLAorCisvKiBZYWt1bW8gTWVnYSBJbWFnZSA0NworICogUmVwb3J0ZWQgYnkgQmpvZXJuIFBhZXR6ZWwgPGtvbHJhYmlAa29scmFiaS5kZT4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNTJiLCAweDE5MDUsIDB4MDEwMCwgMHgwMTAwLAorCQkiVGVrb20gVGVjaG5vbG9naWVzLCBJbmMiLAorCQkiNDAwX0NBTUVSQSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfUkVTSURVRSApLAorCisvKiBSZXBvcnRlZCBieSBQYXVsIE9ydHlsIDxvcnR5bHBAM21pYXN0by5uZXQ+CisgKiBOb3RlIHRoYXQgaXQncyBzaW1pbGFyIHRvIHRoZSBkZXZpY2UgYWJvdmUsIG9ubHkgZGlmZmVyZW50IHByb2RJRCAqLworVU5VU1VBTF9ERVYoICAweDA1MmIsIDB4MTkxMSwgMHgwMTAwLCAweDAxMDAsCisJCSJUZWtvbSBUZWNobm9sb2dpZXMsIEluYyIsCisJCSI0MDBfQ0FNRVJBIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCisKK1VOVVNVQUxfREVWKCAgMHgwNTRjLCAweDAwMTAsIDB4MDEwNiwgMHgwNDUwLCAKKwkJIlNvbnkiLAorCQkiRFNDLVMzMC9TNzAvUzc1LzUwNVYvRjUwNS9GNzA3L0Y3MTcvUDgiLCAKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOIHwgVVNfRkxfTk9UX0xPQ0tBQkxFIHwgVVNfRkxfTk9fV1BfREVURUNUICksCisKKy8qIFRoaXMgZW50cnkgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGRldmljZSByZXBvcnRzIFN1Yj1mZiAqLworVU5VU1VBTF9ERVYoICAweDA1NGMsIDB4MDAxMCwgMHgwNTAwLCAweDA1MDAsIAorICAgICAgICAgICAgICAgIlNvbnkiLAorICAgICAgICAgICAgICAgIkRTQy1UMSIsIAorICAgICAgICAgICAgICAgVVNfU0NfODA3MCwgVVNfUFJfREVWSUNFLCBOVUxMLAorICAgICAgICAgICAgICAgVVNfRkxfU0lOR0xFX0xVTiApLAorCisKKy8qIFJlcG9ydGVkIGJ5IHdpbUBnZWVrcy5ubCAqLworVU5VU1VBTF9ERVYoICAweDA1NGMsIDB4MDAyNSwgMHgwMTAwLCAweDAxMDAsIAorCQkiU29ueSIsCisJCSJNZW1vcnlzdGljayBOVy1NUzciLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiApLAorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMAorVU5VU1VBTF9ERVYoICAweDA1NGMsIDB4MDAyYiwgMHgwMTAwLCAweDAxMTAsCisJCSJTb255IiwKKwkJIlBvcnRhYmxlIFVTQiBIYXJkZHJpdmUgVjIiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCApLAorI2VuZGlmCisKKy8qIFN1Ym1pdHRlZCBieSBPbGFmIEhlcmluZywgPG9saEBzdXNlLmRlPiBTdVNFIEJ1Z3ppbGxhICM0OTA0OSAqLworVU5VU1VBTF9ERVYoICAweDA1NGMsIDB4MDAyYywgMHgwNTAxLCAweDA1MDEsCisJCSJTb255IiwKKwkJIlVTQiBGbG9wcHkgRHJpdmUiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiApLAorCitVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDJkLCAweDAxMDAsIDB4MDEwMCwgCisJCSJTb255IiwKKwkJIk1lbW9yeXN0aWNrIE1TQUMtVVMxIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKKworLyogU3VibWl0dGVkIGJ5IEtsYXVzIE11ZWxsZXIgPGsubXVlbGxlckBpbnRlcnNob3AuZGU+ICovCitVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDJlLCAweDAxMDYsIDB4MDMxMCwgCisJCSJTb255IiwKKwkJIkhhbmR5Y2FtIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOICksCisKKy8qIFN1Ym1pdHRlZCBieSBSYWplc2ggS3VtYmxlIE5heWFrIDxuYXlha0BvYnMtbmljZS5mcj4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNTRjLCAweDAwMmUsIDB4MDUwMCwgMHgwNTAwLCAKKwkJIlNvbnkiLAorCQkiSGFuZHljYW0gSEMtODUiLAorCQlVU19TQ19VRkksIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiApLAorCitVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDMyLCAweDAwMDAsIDB4OTk5OSwKKwkJIlNvbnkiLAorCQkiTWVtb3J5c3RpY2sgTVNDLVUwMU4iLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiApLAorCisvKiBTdWJtaXR0ZWQgYnkgTWljaGFsIE1sb3RlayA8bWxvdGVrQGZvb2Jhci5wbD4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNTRjLCAweDAwNTgsIDB4MDAwMCwgMHg5OTk5LAorCQkiU29ueSIsCisJCSJQRUcgTjc2MGMgTWVtb3J5c3RpY2siLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfRklYX0lOUVVJUlkgKSwKKwkJCitVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDY5LCAweDAwMDAsIDB4OTk5OSwKKwkJIlNvbnkiLAorCQkiTWVtb3J5c3RpY2sgTVNDLVUwMyIsCisJCVVTX1NDX1VGSSwgVVNfUFJfQ0IsIE5VTEwsCisJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKKworLyogU3VibWl0dGVkIGJ5IE5hdGhhbiBCYWJiIDxuYXRoYW5AbGV4aS5jb20+ICovCitVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDZkLCAweDAwMDAsIDB4OTk5OSwKKwkJIlNvbnkiLAorCQkiUEVHIE1hc3MgU3RvcmFnZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfSU5RVUlSWSApLAorCisvKiBTdWJtaXR0ZWQgYnkgTWlrZSBBbGJvcm4gPG1hbGJvcm5AZGVhbmRyYS5ob21laXAubmV0PiAqLworVU5VU1VBTF9ERVYoICAweDA1NGMsIDB4MDE2YSwgMHgwMDAwLCAweDk5OTksCisJCSJTb255IiwKKwkJIlBFRyBNYXNzIFN0b3JhZ2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfRklYX0lOUVVJUlkgKSwKKwkJCisvKiBTdWJtaXR0ZWQgYnkgRnJhbmsgRW5nZWwgPGZyYW5raWVAY3NlLnVuc3cuZWR1LmF1PiAqLworVU5VU1VBTF9ERVYoICAweDA1NGMsIDB4MDA5OSwgMHgwMDAwLCAweDk5OTksCisgICAgICAgICAgICAgICAgIlNvbnkiLAorICAgICAgICAgICAgICAgICJQRUcgTWFzcyBTdG9yYWdlIiwKKyAgICAgICAgICAgICAgICBVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKyAgICAgICAgICAgICAgICBVU19GTF9GSVhfSU5RVUlSWSApLAorCisJCQorVU5VU1VBTF9ERVYoICAweDA1N2IsIDB4MDAwMCwgMHgwMDAwLCAweDAyOTksIAorCQkiWS1FIERhdGEiLAorCQkiRmxhc2hidXN0ZXItVSIsCisJCVVTX1NDX0RFVklDRSwgIFVTX1BSX0NCLCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOKSwKKworVU5VU1VBTF9ERVYoICAweDA1N2IsIDB4MDAwMCwgMHgwMzAwLCAweDk5OTksIAorCQkiWS1FIERhdGEiLAorCQkiRmxhc2hidXN0ZXItVSIsCisJCVVTX1NDX0RFVklDRSwgIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiksCisKKy8qIFJlcG9ydGVkIGJ5IEpvaGFubiBDYXJkb24gPGpvaGFubi5jYXJkb25AZnJlZS5mcj4KKyAqIFRoaXMgZW50cnkgaXMgbmVlZGVkIG9ubHkgYmVjYXVzZSB0aGUgZGV2aWNlIHJlcG9ydHMKKyAqIGJJbnRlcmZhY2VDbGFzcyA9IDB4ZmYgKHZlbmRvci1zcGVjaWZpYykKKyAqLworVU5VU1VBTF9ERVYoICAweDA1N2IsIDB4MDAyMiwgMHgwMDAwLCAweDk5OTksIAorCQkiWS1FIERhdGEiLAorCQkiU2lsaWNvbiBNZWRpYSBSL1ciLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwgMCksCisKKy8qIEZhYnJpemlvIEZlbGxpbmkgPGZlbGxvQGxpYmVyby5pdD4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNTk1LCAweDQzNDMsIDB4MDAwMCwgMHgyMjEwLAorCQkiRnVqaWZpbG0iLAorCQkiRGlnaXRhbCBDYW1lcmEgRVgtMjAgRFNDIiwKKwkJVVNfU0NfODA3MCwgVVNfUFJfREVWSUNFLCBOVUxMLCAwICksCisKKy8qIFRoZSBlbnRyeSB3YXMgaGVyZSBiZWZvcmUgSSB0b29rIG92ZXIsIGFuZCBoYWQgVVNfU0NfUkJDLiBJdCB0dXJucworICogb3V0IHRoYXQgaXNuJ3QgbmVlZGVkLiBBZGRpdGlvbmFsbHksIFRvcnN0ZW4gRXJpa3Nzb24KKyAqIDxUb3JzdGVuLkVyaWtzc29uQGJlcmdpYW5za2Euc2U+IGlzIGFibGUgdG8gdXNlIGhpcyBkZXZpY2UgZmluZQorICogd2l0aG91dCB0aGlzIGVudHJ5IGF0IGFsbCAtIGJ1dCBJIGRvbid0IHN1c3BlY3QgdGhhdCB3aWxsIGJlIHRydWUKKyAqIGZvciBhbGwgdXNlcnMgKHRoZSBwcm90b2NvbCBpcyBsaWtlbHkgbmVlZGVkKSwgc28gaXMgc3RheWluZyBhdAorICogdGhpcyB0aW1lLiAtIFBoaWwgRGlib3dpdHogPHBoaWxAaXBvbS5jb20+CisgKi8KK1VOVVNVQUxfREVWKCAgMHgwNTlmLCAweGE2MDEsIDB4MDIwMCwgMHgwMjAwLCAKKwkJIkxhQ2llIiwKKwkJIlVTQiBIYXJkIERpc2siLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0NCLCBOVUxMLCAwICksCisKKy8qIFN1Ym1pdHRlZCBieSBKb2VsIEJvdXJxdWFyZCA8bnVtbG9ja0BmcmVlc3VyZi5jaD4KKyAqIFNvbWUgdmVyc2lvbnMgb2YgdGhpcyBkZXZpY2UgbmVlZCB0aGUgU3ViQ2xhc3MgYW5kIFByb3RvY29sIG92ZXJyaWRlcworICogd2hpbGUgb3RoZXJzIGRvbid0LgorICovCitVTlVTVUFMX0RFViggIDB4MDVhYiwgMHgwMDYwLCAweDExMDQsIDB4MTExMCwKKwkJIkluLVN5c3RlbSIsCisJCSJQeXJvR2F0ZSBFeHRlcm5hbCBDRC1ST00gRW5jbG9zdXJlIChGQ0QtNTIzKSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0JVTEssIE5VTEwsCisJCVVTX0ZMX05FRURfT1ZFUlJJREUgKSwKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAKK1VOVVNVQUxfREVWKCAgMHgwNWFiLCAweDAwMzEsIDB4MDEwMCwgMHgwMTEwLAorCQkiSW4tU3lzdGVtIiwKKwkJIlVTQi9JREUgQnJpZGdlIChBVEEvQVRBUEkpIiwKKwkJVVNfU0NfSVNEMjAwLCBVU19QUl9CVUxLLCBpc2QyMDBfSW5pdGlhbGl6YXRpb24sCisJCTAgKSwKKworVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDMwMSwgMHgwMTAwLCAweDAxMTAsCisJCSJJbi1TeXN0ZW0iLAorCQkiUG9ydGFibGUgVVNCIEhhcmRkcml2ZSBWMiIsCisJCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAorCQkwICksCisKK1VOVVNVQUxfREVWKCAgMHgwNWFiLCAweDAzNTEsIDB4MDEwMCwgMHgwMTEwLAorCQkiSW4tU3lzdGVtIiwKKwkJIlBvcnRhYmxlIFVTQiBIYXJkZHJpdmUgVjIiLAorCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKKwkJMCApLAorCitVTlVTVUFMX0RFViggIDB4MDVhYiwgMHg1NzAxLCAweDAxMDAsIDB4MDExMCwKKwkJIkluLVN5c3RlbSIsCisJCSJVU0IgU3RvcmFnZSBBZGFwdGVyIFYyIiwKKwkJVVNfU0NfSVNEMjAwLCBVU19QUl9CVUxLLCBpc2QyMDBfSW5pdGlhbGl6YXRpb24sCisJCTAgKSwKKyNlbmRpZgorCisvKiBSZXBvcnRlZCBieSBBdmkgS2l2aXR5IDxhdmlAYXJnby5jby5pbD4gKi8KK1VOVVNVQUxfREVWKCAweDA1YWMsIDB4MTIwMywgMHgwMDAxLCAweDAwMDEsCisJCSJBcHBsZSIsCisJCSJpUG9kIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAorCitVTlVTVUFMX0RFViggMHgwNWFjLCAweDEyMDUsIDB4MDAwMSwgMHgwMDAxLAorCQkiQXBwbGUiLAorCQkiaVBvZCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfQ0FQQUNJVFkgKSwKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVAorVU5VU1VBTF9ERVYoICAweDA1ZGMsIDB4MDAwMSwgMHgwMDAwLCAweDAwMDEsCisJCSJMZXhhciIsCisJCSJKdW1wc2hvdCBVU0IgQ0YgUmVhZGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfSlVNUFNIT1QsIE5VTEwsCisJCVVTX0ZMX05FRURfT1ZFUlJJREUgKSwKKyNlbmRpZgorCisvKiBSZXBvcnRlZCBieSBCbGFrZSBNYXRoZW55IDxibWF0aGVueUBwdXJkdWUuZWR1PiAqLworVU5VU1VBTF9ERVYoICAweDA1ZGMsIDB4YjAwMiwgMHgwMDAwLCAweDAxMTMsCisJCSJMZXhhciIsCisJCSJVU0IgQ0YgUmVhZGVyIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZICksCisKKy8qIFRoZSBmb2xsb3dpbmcgdHdvIGVudHJpZXMgYXJlIGZvciBhIEdlbmVzeXMgVVNCIHRvIElERQorICogY29udmVydGVyIGNoaXAsIGJ1dCBpdCBjaGFuZ2VzIGl0cyBQcm9kdWN0SWQgZGVwZW5kaW5nCisgKiBvbiB3aGV0aGVyIG9yIG5vdCBhIGRpc2sgb3IgYW4gb3B0aWNhbCBkZXZpY2UgaXMgZW5jbG9zZWQKKyAqIFRoZXkgd2VyZSBvcmlnaW5hbGx5IHJlcG9ydGVkIGJ5IEFsZXhhbmRlciBPbHR1CisgKiA8YWxleGFuZGVyQGFsbC0yLmNvbT4gYW5kIFBldGVyIE1hcmtzIDxwZXRlci5tYXJrc0B0dXJuZXIuY29tPgorICogcmVzcGVjdGl2ZWx5LgorICovCitVTlVTVUFMX0RFViggIDB4MDVlMywgMHgwNzAxLCAweDAwMDAsIDB4ZmZmZiwKKwkJIkdlbmVzeXMgTG9naWMiLAorCQkiVVNCIHRvIElERSBPcHRpY2FsIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0dPX1NMT1cgKSwKKworVU5VU1VBTF9ERVYoICAweDA1ZTMsIDB4MDcwMiwgMHgwMDAwLCAweGZmZmYsCisJCSJHZW5lc3lzIExvZ2ljIiwKKwkJIlVTQiB0byBJREUgRGlzayIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9HT19TTE9XICksCisKKy8qIFJlcG9ydGVkIGJ5IEhhbm5vIEJvZWNrIDxoYW5ub0BnbXguZGU+CisgKiBUYWtlbiBmcm9tIHRoZSBMeWNvcmlzIEtlcm5lbCAqLworVU5VU1VBTF9ERVYoICAweDA2MzYsIDB4MDAwMywgMHgwMDAwLCAweDk5OTksCisJCSJWaXZpdGFyIiwKKwkJIlZpdmljYW0gMzVYeCIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0JVTEssIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZICksCisKK1VOVVNVQUxfREVWKCAgMHgwNjQ0LCAweDAwMDAsIDB4MDEwMCwgMHgwMTAwLCAKKwkJIlRFQUMiLAorCQkiRmxvcHB5IERyaXZlIiwKKwkJVVNfU0NfVUZJLCBVU19QUl9DQiwgTlVMTCwgMCApLCAKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKK1VOVVNVQUxfREVWKCAgMHgwNjZiLCAweDAxMDUsIDB4MDEwMCwgMHgwMTAwLCAKKwkJIk9seW1wdXMiLAorCQkiQ2FtZWRpYSBNQVVTQi0yIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfRVVTQl9TRERSMDksIE5VTEwsCisJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKKyNlbmRpZgorCisvKiBSZXBvcnRlZCBieSBEYXJzZW4gTHUgPGRhcnNlbkBtaWNyby5lZS5udGh1LmVkdS50dz4gKi8KK1VOVVNVQUxfREVWKCAweDA2NmYsIDB4ODAwMCwgMHgwMDAxLCAweDAwMDEsCisJCSJTaWdtYVRlbCIsCisJCSJVU0JNU0MgQXVkaW8gUGxheWVyIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAorCisvKiBSZXBvcnRlZCBieSBSaWNoYXJkIC09W109LSA8bWljcm9fZmx5ZXJAaG90bWFpbC5jb20+ICovCitVTlVTVUFMX0RFViggMHgwNjdiLCAweDI1MDcsIDB4MDEwMCwgMHgwMTAwLAorCQkiUHJvbGlmaWMgVGVjaG5vbG9neSBJbmMuIiwKKwkJIk1hc3MgU3RvcmFnZSBEZXZpY2UiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfRklYX0NBUEFDSVRZIHwgVVNfRkxfR09fU0xPVyApLAorCisvKiBSZXBvcnRlZCBieSBBbGV4IEJ1dGNoZXIgPGFsZXguYnV0Y2hlckBhc3N1cnN5cy5jby51az4gKi8KK1VOVVNVQUxfREVWKCAweDA2N2IsIDB4MzUwNywgMHgwMDAxLCAweDAwMDEsCisJCSJQcm9saWZpYyBUZWNobm9sb2d5IEluYy4iLAorCQkiQVRBUEktNiBCcmlkZ2UgQ29udHJvbGxlciIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfQ0FQQUNJVFkgfCBVU19GTF9HT19TTE9XICksCisKKy8qIFN1Ym1pdHRlZCBieSBCZW5ueSBTam9zdHJhbmQgPGJlbm55QGhvc3Rtb2JpbGl0eS5jb20+ICovCitVTlVTVUFMX0RFViggMHgwNjg2LCAweDQwMTEsIDB4MDAwMSwgMHgwMDAxLAorCQkiTWlub2x0YSIsCisJCSJEaW1hZ2UgRjMwMCIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0JVTEssIE5VTEwsIDAgKSwKKworLyogUmVwb3J0ZWQgYnkgTWlndWVsIEEuIEZvc2FzIDxhbW4zczFhQG9uby5jb20+ICovCitVTlVTVUFMX0RFViggIDB4MDY4NiwgMHg0MDE3LCAweDAwMDEsIDB4MDAwMSwKKyAgICAgICAgICAgICAgICAiTWlub2x0YSIsCisgICAgICAgICAgICAgICAgIkRJTUFHRSBFMjIzIiwKKyAgICAgICAgICAgICAgICBVU19TQ19TQ1NJLCBVU19QUl9ERVZJQ0UsIE5VTEwsIDAgKSwKKworVU5VU1VBTF9ERVYoICAweDA2OTMsIDB4MDAwMiwgMHgwMTAwLCAweDAxMDAsIAorCQkiSGFnaXdhcmEiLAorCQkiRmxhc2hHYXRlIFNtYXJ0TWVkaWEiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9CVUxLLCBOVUxMLCAwICksCisKK1VOVVNVQUxfREVWKCAgMHgwNjkzLCAweDAwMDUsIDB4MDEwMCwgMHgwMTAwLAorCQkiSGFnaXdhcmEiLAorCQkiRmxhc2hnYXRlIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfQlVMSywgTlVMTCwgMCApLCAKKworVU5VU1VBTF9ERVYoICAweDA3ODEsIDB4MDAwMSwgMHgwMjAwLCAweDAyMDAsIAorCQkiU2FuZGlzayIsCisJCSJJbWFnZU1hdGUgU0REUi0wNWEiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9DQiwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiApLAorCitVTlVTVUFMX0RFViggIDB4MDc4MSwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwKKwkJIlNhbmRpc2siLAorCQkiSW1hZ2VNYXRlIFNERFItMTIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9DQiwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiApLAorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQorVU5VU1VBTF9ERVYoICAweDA3ODEsIDB4MDIwMCwgMHgwMDAwLCAweDk5OTksIAorCQkiU2FuZGlzayIsCisJCSJJbWFnZU1hdGUgU0REUi0wOSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOICksCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NCitVTlVTVUFMX0RFViggIDB4MDdhYiwgMHhmYzAxLCAweDAwMDAsIDB4OTk5OSwKKwkJIkZyZWVjb20iLAorCQkiVVNCLUlERSIsCisJCVVTX1NDX1FJQywgVVNfUFJfRlJFRUNPTSwgZnJlZWNvbV9pbml0LCAwKSwKKyNlbmRpZgorCisvKiBSZXBvcnRlZCBieSBFZXJvIFZvbG90aW5lbiA8ZWVyb0BwaW5nLXZpaW5pLm9yZz4gKi8KK1VOVVNVQUxfREVWKCAgMHgwN2FiLCAweGZjY2QsIDB4MDQwNiwgMHgwNDA2LAorCQkiRnJlZWNvbSBUZWNobm9sb2dpZXMiLAorCQkiRkhELUNsYXNzaWMiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfRklYX0NBUEFDSVRZKSwKKworVU5VU1VBTF9ERVYoICAweDA3YWYsIDB4MDAwNCwgMHgwMTAwLCAweDAxMzMsIAorCQkiTWljcm90ZWNoIiwKKwkJIlVTQi1TQ1NJLURCMjUiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9CVUxLLCB1c2Jfc3Rvcl9ldXNjc2lfaW5pdCwKKwkJVVNfRkxfU0NNX01VTFRfVEFSRyApLCAKKworVU5VU1VBTF9ERVYoICAweDA3YWYsIDB4MDAwNSwgMHgwMTAwLCAweDAxMDAsIAorCQkiTWljcm90ZWNoIiwKKwkJIlVTQi1TQ1NJLUhENTAiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9CVUxLLCB1c2Jfc3Rvcl9ldXNjc2lfaW5pdCwKKwkJVVNfRkxfU0NNX01VTFRfVEFSRyApLCAKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EUENNCitVTlVTVUFMX0RFViggIDB4MDdhZiwgMHgwMDA2LCAweDAxMDAsIDB4MDEwMCwKKwkJIk1pY3JvdGVjaCIsCisJCSJDYW1lcmFNYXRlIChEUENNX1VTQikiLAorIAkJVVNfU0NfU0NTSSwgVVNfUFJfRFBDTV9VU0IsIE5VTEwsIDAgKSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKK1VOVVNVQUxfREVWKCAgMHgwN2M0LCAweGEwMDAsIDB4MDAwMCwgMHgwMDE1LAorCQkiRGF0YWZhYiIsCisJCSJNRENGRS1CIFVTQiBDRiBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwICksCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIERhdGFmYWItYmFzZWQgZGV2aWNlcyBtYXkgb3IgbWF5IG5vdCB3b3JrCisgKiB1c2luZyB0aGUgY3VycmVudCBkcml2ZXIuLi50aGUgMHhmZmZmIGlzIGFyYml0cmFyeSBzaW5jZSBJCisgKiBkb24ndCBrbm93IHdoYXQgZGV2aWNlIHZlcnNpb25zIGV4aXN0IGZvciB0aGVzZSBndXlzLgorICoKKyAqIFRoZSAweGEwMDMgYW5kIDB4YTAwNCBkZXZpY2VzIGluIHBhcnRpY3VsYXIgSSdtIGN1cmlvdXMgYWJvdXQuCisgKiBJJ20gdG9sZCB0aGV5IGV4aXN0IGJ1dCBzbyBmYXIgbm9ib2R5IGhhcyBjb21lIGZvcndhcmQgdG8gc2F5IHRoYXQKKyAqIHRoZXkgd29yayB3aXRoIHRoaXMgZHJpdmVyLiAgR2l2ZW4gdGhlIHN1Y2Nlc3Mgd2UndmUgaGFkIGdldHRpbmcKKyAqIG90aGVyIERhdGFmYWItYmFzZWQgY2FyZHMgb3BlcmF0aW9uYWwgd2l0aCB0aGlzIGRyaXZlciwgSSd2ZSBkZWNpZGVkCisgKiB0byBsZWF2ZSB0aGVzZSB0d28gZGV2aWNlcyBpbiB0aGUgbGlzdC4KKyAqLworVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDAxLCAweDAwMDAsIDB4ZmZmZiwKKwkJIlNJSUcvRGF0YWZhYiIsCisJCSJTSUlHL0RhdGFmYWIgTWVtb3J5IFN0aWNrK0NGIFJlYWRlci9Xcml0ZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwICksCisKKy8qIFJlcG9ydGVkIGJ5IEpvc2VmIFJlaXNpbmdlciA8am9zZWYucmVpc2luZ2VyQG5ldGNvbG9nbmUuZGU+ICovCitVTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDIsIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYi9Vbmtub3duIiwKKwkJIk1EMi9NRDMgRGlzayBlbmNsb3N1cmUiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOICksCisKK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwMywgMHgwMDAwLCAweGZmZmYsCisJCSJEYXRhZmFiL1Vua25vd24iLAorCQkiRGF0YWZhYi1iYXNlZCBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwICksCisKK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNCwgMHgwMDAwLCAweGZmZmYsCisJCSJEYXRhZmFiL1Vua25vd24iLAorCQkiRGF0YWZhYi1iYXNlZCBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwICksCisKK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNSwgMHgwMDAwLCAweGZmZmYsCisJCSJQTlkvRGF0YWZhYiIsCisJCSJQTlkvRGF0YWZhYiBDRitTTSBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwICksCisKK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNiwgMHgwMDAwLCAweGZmZmYsCisJCSJTaW1wbGUgVGVjaC9EYXRhZmFiIiwKKwkJIlNpbXBsZSBUZWNoL0RhdGFmYWIgQ0YrU00gUmVhZGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCApLAorI2VuZGlmCisJCQorI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKKy8qIENvbnRyaWJ1dGVkIGJ5IFBldGVyIFdhZWNodGxlciAqLworVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMTAzLCAweDAwMDAsIDB4OTk5OSwKKwkJIkRhdGFmYWIiLAorCQkiTURTTS1CIHJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwKKwkJVVNfRkxfRklYX0lOUVVJUlkgKSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKKy8qIFN1Ym1pdHRlZCBieSBPbGFmIEhlcmluZyA8b2xoQHN1c2UuZGU+ICovCitVTlVTVUFMX0RFViggIDB4MDdjNCwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKKwkJIkRhdGFmYWIgU3lzdGVtcywgSW5jLiIsCisJCSJVU0IgdG8gQ0YgKyBTTSBDb21ibyAoTEMxKSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTAgKSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKKy8qIFNNIHBhcnQgLSBhZWIgPEFuZHJpZXMuQnJvdXdlckBjd2kubmw+ICovCitVTlVTVUFMX0RFViggIDB4MDdjNCwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKKwkJIkRhdGFmYWIgU3lzdGVtcywgSW5jLiIsCisJCSJVU0IgdG8gQ0YgKyBTTSBDb21ibyAoTEMxKSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwKKwkJVVNfRkxfU0lOR0xFX0xVTiApLAorI2VuZGlmCisKKy8qIERhdGFmYWIgS0VDRi1VU0IgLyBTYWdhdGVrIERDUy1DRiAvIFNpbXBsZXRlY2ggRmxhc2hsaW5rIFVDRi0xMDAKKyAqIE9ubHkgcmV2aXNpb24gMS4xMyB0ZXN0ZWQgKHNhbWUgZm9yIGFsbCBvZiB0aGUgYWJvdmUgZGV2aWNlcywKKyAqIGJhc2VkIG9uIHRoZSBEYXRhZmFiIERGLVVHLTA3IGNoaXApLiAgTmVlZGVkIGZvciBVU19GTF9GSVhfSU5RVUlSWS4KKyAqIFN1Ym1pdHRlZCBieSBNYXJlayBNaWNoYWxraWV3aWN6IDxtYXJla21AYW1lbGVrLmdkYS5wbD4uCisgKiBTZWUgYWxzbyBodHRwOi8vbWFydGluLndpbGNrLmJlaS50LW9ubGluZS5kZS8ja2VjZiAuCisgKi8KK1VOVVNVQUxfREVWKCAgMHgwN2M0LCAweGE0MDAsIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYiIsCisJCSJLRUNGLVVTQiIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfSU5RVUlSWSApLAorCisvKiBDYXNpbyBRViAyeDAwLzN4MDAvNDAwMC84MDAwIGRpZ2l0YWwgc3RpbGwgY2FtZXJhcyBhcmUgbm90IGNvbmZvcm1hbnQKKyAqIHRvIHRoZSBVU0Igc3RvcmFnZSBzcGVjaWZpY2F0aW9uIGluIHR3byB3YXlzOgorICogLSBUaGV5IHRlbGwgdXMgdGhleSBhcmUgdXNpbmcgdHJhbnNwb3J0IHByb3RvY29sIENCSS4gSW4gcmVhbGl0eSB0aGV5CisgKiAgIGFyZSB1c2luZyB0cmFuc3BvcnQgcHJvdG9jb2wgQ0IuCisgKiAtIFRoZXkgZG9uJ3QgbGlrZSB0aGUgSU5RVUlSWSBjb21tYW5kLiBTbyB3ZSBtdXN0IGhhbmRsZSB0aGlzIGNvbW1hbmQKKyAqICAgb2YgdGhlIFNDU0kgbGF5ZXIgb3Vyc2VsdmVzLgorICogLSBTb21lIGNhbWVyYXMgd2l0aCBpZFByb2R1Y3Q9MHgxMDAxIGFuZCBiY2REZXZpY2U9MHgxMDAwIGhhdmUKKyAqICAgYkludGVyZmFjZVByb3RvY29sPTB4MDAgKFVTX1BSX0NCSSkgd2hpbGUgb3RoZXJzIGhhdmUgMHgwMSAoVVNfUFJfQ0IpLgorICogICBTbyBkb24ndCByZW1vdmUgdGhlIFVTX1BSX0NCIG92ZXJyaWRlIQorICogLSBDYW1lcmFzIHdpdGggYmNkRGV2aWNlPTB4OTAwOSByZXF1aXJlIHRoZSBVU19TQ184MDcwIG92ZXJyaWRlLgorICovCitVTlVTVUFMX0RFViggMHgwN2NmLCAweDEwMDEsIDB4MTAwMCwgMHg5OTk5LAorCQkiQ2FzaW8iLAorCQkiUVYgRGlnaXRhbENhbWVyYSIsCisJCVVTX1NDXzgwNzAsIFVTX1BSX0NCLCBOVUxMLAorCQlVU19GTF9ORUVEX09WRVJSSURFIHwgVVNfRkxfRklYX0lOUVVJUlkgKSwKKworLyogU3VibWl0dGVkIGJ5IEhhcnRtdXQgV2FobCA8aHdhaGxAaHdhaGwuZGU+Ki8KK1VOVVNVQUxfREVWKCAweDA4MzksIDB4MDAwYSwgMHgwMDAxLCAweDAwMDEsCisJCSJTYW1zdW5nIiwKKwkJIkRpZ2ltYXggNDEwIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZKSwKKworLyogRW50cnkgYW5kIHN1cHBvcnRpbmcgcGF0Y2ggYnkgVGhlb2RvcmUgS2lsZ29yZSA8a2lsZ290YUBhdWJ1cm4uZWR1Pi4KKyAqIEZsYWcgd2lsbCBzdXBwb3J0IEJ1bGsgZGV2aWNlcyB3aGljaCB1c2UgYSBzdGFuZGFyZHMtdmlvbGF0aW5nIDMyLWJ5dGUKKyAqIENvbW1hbmQgQmxvY2sgV3JhcHBlci4gSGVyZSwgdGhlICJEQzJNRUdBIiBjYW1lcmFzIChzZXZlcmFsIGJyYW5kcykgd2l0aAorICogR3JhbmR0ZWNoIEdUODkyeCBjaGlwLCB3aGljaCByZXF1ZXN0ICJQcm9wcmlldGFyeSBTQ1NJIEJ1bGsiIHN1cHBvcnQuCisgKi8KKworVU5VU1VBTF9ERVYoICAweDA4NGQsIDB4MDAxMSwgMHgwMTEwLCAweDAxMTAsCisJCSJHcmFuZHRlY2giLAorCQkiREMyTUVHQSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9CVUxLMzIpLAorCisKKy8qIEVudHJ5IG5lZWRlZCBmb3IgZmxhZ3MuIE1vcmVvdmVyLCBhbGwgZGV2aWNlcyB3aXRoIHRoaXMgSUQgdXNlCisgKiBidWxrLW9ubHkgdHJhbnNwb3J0LCBidXQgX3NvbWVfIGZhbHNlbHkgcmVwb3J0IENvbnRyb2wvQnVsayBpbnN0ZWFkLgorICogT25lIGV4YW1wbGUgaXMgIlRydW1waW9uIERpZ2l0YWwgUmVzZWFyY2ggTVlNUDMiLgorICogU3VibWl0dGVkIGJ5IEJqb2VybiBCcmlsbCA8YnJpbGwoYXQpZnMubWF0aC51bmktZnJhbmtmdXJ0LmRlPgorICovCitVTlVTVUFMX0RFViggIDB4MDkwYSwgMHgxMDAxLCAweDAxMDAsIDB4MDEwMCwKKwkJIlRydW1waW9uIiwKKwkJInQzMzUyMCBVU0IgRmxhc2ggQ2FyZCBDb250cm9sbGVyIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9CVUxLLCBOVUxMLAorCQlVU19GTF9ORUVEX09WRVJSSURFICksCisKKy8qIFRydW1waW9uIE1pY3JvZWxlY3Ryb25pY3MgTVAzIHBsYXllciAoZmVsaXBlX2FsZmFyb0BsaW51eG1haWwub3JnKSAqLworVU5VU1VBTF9ERVYoIDB4MDkwYSwgMHgxMjAwLCAweDAwMDAsIDB4OTk5OSwKKwkJIlRydW1waW9uIiwKKwkJIk1QMyBwbGF5ZXIiLAorCQlVU19TQ19SQkMsIFVTX1BSX0JVTEssIE5VTEwsCisJCTAgKSwKKworLyogYWViICovCitVTlVTVUFMX0RFViggMHgwOTBjLCAweDExMzIsIDB4MDAwMCwgMHhmZmZmLAorCQkiRmVpeWEiLAorCQkiNS1pbi0xIENhcmQgUmVhZGVyIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAorCisvKiBUaGlzIFBlbnRheCBzdGlsbCBjYW1lcmEgaXMgbm90IGNvbmZvcm1hbnQKKyAqIHRvIHRoZSBVU0Igc3RvcmFnZSBzcGVjaWZpY2F0aW9uOiAtCisgKiAtIEl0IGRvZXMgbm90IGxpa2UgdGhlIElOUVVJUlkgY29tbWFuZC4gU28gd2UgbXVzdCBoYW5kbGUgdGhpcyBjb21tYW5kCisgKiAgIG9mIHRoZSBTQ1NJIGxheWVyIG91cnNlbHZlcy4KKyAqIFRlc3RlZCBvbiBSZXYuIDEwLjAwICgweDEwMDApCisgKiBTdWJtaXR0ZWQgYnkgSmFtZXMgQ291cnRpZXItRHV0dG9uIDxKYW1lc0BzdXBlcmJ1Zy5kZW1vbi5jby51az4KKyAqLworVU5VU1VBTF9ERVYoIDB4MGExNywgMHgwMDA0LCAweDEwMDAsIDB4MTAwMCwKKyAgICAgICAgICAgICAgICAiUGVudGF4IiwKKyAgICAgICAgICAgICAgICAiT3B0aW8gMi8zLzQwMCIsCisgICAgICAgICAgICAgICAgVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisgICAgICAgICAgICAgICAgVVNfRkxfRklYX0lOUVVJUlkgKSwKKworCisvKiBTdWJtaXR0ZWQgYnkgUGVyIFdpbmt2aXN0IDxwZXIud2lua3Zpc3RAdWsuY29tPiAqLworVU5VU1VBTF9ERVYoIDB4MGExNywgMHgwMDYsIDB4MDAwMCwgMHhmZmZmLAorICAgICAgICAgICAgICAgICJQZW50YXgiLAorICAgICAgICAgICAgICAgICJPcHRpbyBTL1M0IiwKKyAgICAgICAgICAgICAgICBVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKyAgICAgICAgICAgICAgICBVU19GTF9GSVhfSU5RVUlSWSApLAorCQkKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwCitVTlVTVUFMX0RFViggIDB4MGJmNiwgMHhhMDAxLCAweDAxMDAsIDB4MDExMCwKKwkJIkFUSSIsCisJCSJVU0IgQ2FibGUgMjA1IiwKKwkJVVNfU0NfSVNEMjAwLCBVU19QUl9CVUxLLCBpc2QyMDBfSW5pdGlhbGl6YXRpb24sCisJCTAgKSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKK1VOVVNVQUxfREVWKCAweDBjMGIsIDB4YTEwOSwgMHgwMDAwLCAweGZmZmYsCisJICAgICAgICJBY29tZGF0YSIsCisJICAgICAgICJDRiIsCisJICAgICAgIFVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJICAgICAgIFVTX0ZMX1NJTkdMRV9MVU4gKSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKK1VOVVNVQUxfREVWKCAweDBjMGIsIDB4YTEwOSwgMHgwMDAwLCAweGZmZmYsCisJICAgICAgICJBY29tZGF0YSIsCisJICAgICAgICJTTSIsCisJICAgICAgIFVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwKKwkgICAgICAgVVNfRkxfU0lOR0xFX0xVTiApLAorI2VuZGlmCisKKy8qIFN1Ym1pdHRlZCBieSBKb3JpcyBTdHJ1eXZlIDxqb3Jpc0BzdHJ1eXZlLmJlPiAqLworVU5VU1VBTF9ERVYoIDB4MGQ5NiwgMHg0MTBhLCAweDAwMDEsIDB4ZmZmZiwKKwkJIk1lZGlvbiIsCisJCSJNRCA3NDI1IiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZKSwKKworLyoKKyAqIEVudHJ5IGZvciBKZW5vcHRpayBKRCA1MjAwejMKKyAqCisgKiBlbWFpbDogY2FyLmJ1c3NlQGdteC5kZQorICovCitVTlVTVUFMX0RFViggIDB4MGQ5NiwgMHg1MjAwLCAweDAwMDEsIDB4MDIwMCwKKwkJIkplbm9wdGlrIiwKKwkJIkpEIDUyMDAgejMiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwgVVNfRkxfRklYX0lOUVVJUlkpLAorCisvKiBSZXBvcnRlZCBieSBMdWJvbWlyIEJsYWhhIDx0cml0b2xAdHJpbG9naWMuY3o+CisgKiBJIF9SRUFMTFlfIGRvbid0IGtub3cgd2hhdCAzcmQsIDR0aCBudW1iZXIgYW5kIGFsbCBkZWZpbmVzIG1lYW4sIGJ1dCB0aGlzCisgKiB3b3JrcyBmb3IgbWUuIENhbiBhbnlib2R5IGNvcnJlY3QgdGhlc2UgdmFsdWVzPyAoSSBhYmxlIHRvIHRlc3QgY29ycmVjdGVkCisgKiB2ZXJzaW9uLikKKyAqLworVU5VU1VBTF9ERVYoIDB4MGRkOCwgMHgxMDYwLCAweDAwMDAsIDB4ZmZmZiwKKwkJIk5ldGFjIiwKKwkJIlVTQi1DRi1DYXJkIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9JTlFVSVJZICksCisKKy8qIFBhdGNoIGJ5IFN0ZXBoYW4gV2FsdGVyIDxzdGVwaGFuLndhbHRlckBlcGZsLmNoPgorICogSSBkb24ndCBrbm93IHdoeSwgYnV0IGl0IHdvcmtzLi4uICovCitVTlVTVUFMX0RFViggMHgwZGRhLCAweDAwMDEsIDB4MDAxMiwgMHgwMDEyLAorCQkiV0lOV0FSRCIsCisJCSJNdXNpYyBEaXNrIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCisKKy8qIFJlcG9ydGVkIGJ5IElhbiBNY0Nvbm5lbGwgPGlhbiBhdCBlbWl0LmRlbW9uLmNvLnVrPiAqLworVU5VU1VBTF9ERVYoICAweDBkZGEsIDB4MDMwMSwgMHgwMDEyLCAweDAwMTIsCisJCSJQTlBfTVAzIiwKKwkJIlBOUF9NUDMgUExBWUVSIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCisKKy8qIFN1Ym1pdHRlZCBieSBBbnRvaW5lIE1haXJlc3NlIDxhbnRvaW5lLm1haXJlc3NlQGZyZWUuZnI+ICovCitVTlVTVUFMX0RFViggMHgwZWQxLCAweDY2NjAsIDB4MDEwMCwgMHgwMzAwLAorCQkiVVNCIiwKKwkJIlNvbGlkIHN0YXRlIGRpc2siLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfRklYX0lOUVVJUlkgKSwKKworLyogU3VibWl0dGVkIGJ5IERhbmllbCBEcmFrZSA8ZHNkQGdlbnRvby5vcmc+CisgKiBSZXBvcnRlZCBieSBkYXl1bCBvbiB0aGUgR2VudG9vIEZvcnVtcyAqLworVU5VU1VBTF9ERVYoICAweDBlYTAsIDB4MjE2OCwgMHgwMTEwLCAweDAxMTAsCisJCSJPdXJzIFRlY2hub2xvZ3kiLAorCQkiRmxhc2ggRGlzayIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfUkVTSURVRSApLAorCisvKiBSZXBvcnRlZCBieSBSYXN0aXNsYXYgU3RhbmlrIDxyc19rZXJuZWxAeWFob28uY29tPiAqLworVU5VU1VBTF9ERVYoICAweDBlYTAsIDB4NjgyOCwgMHgwMTEwLCAweDAxMTAsCisJCSJVU0IiLAorCQkiRmxhc2ggRGlzayIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfUkVTSURVRSApLAorCisvKiBSZXBvcnRlZCBieSBNaWNoYWVsIFN0YXR0bWFubiA8bWljaGFlbEBzdGF0dG1hbm4uY29tPiAqLworVU5VU1VBTF9ERVYoICAweDBmY2UsIDB4ZDAwOCwgMHgwMDAwLCAweDAwMDAsCisJCSJTb255IEVyaWNzc29uIiwKKwkJIlY4MDAtVm9kYWZvbmUgODAyIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX05PX1dQX0RFVEVDVCApLAorCisvKiBSZXBvcnRlZCBieSBLZXZpbiBDZXJuZWtlZSA8a3BjLXVzYmRldkBnZWxhdG8udWl1Yy5lZHU+CisgKiBUZXN0ZWQgb24gaGFyZHdhcmUgdmVyc2lvbiAxLjEwLgorICogRW50cnkgaXMgbmVlZGVkIG9ubHkgZm9yIHRoZSBpbml0aWFsaXplciBmdW5jdGlvbiBvdmVycmlkZS4KKyAqLworVU5VU1VBTF9ERVYoICAweDEwMTksIDB4MGM1NSwgMHgwMDAwLCAweDk5OTksCisJCSJEZXNrbm90ZSIsCisJCSJVQ1ItNjFTMkIiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfdWNyNjFzMmJfaW5pdCwKKwkJMCApLAorCisvKiBSZXBvcnRlZCBieSBLb3RybGEgVml0ZXpzbGF2IDxrb3RybGFAY2ViLmN6PiAqLworVU5VU1VBTF9ERVYoICAweDEzNzAsIDB4NjgyOCwgMHgwMTEwLCAweDAxMTAsCisJCSJTV0lTU0JJVCIsCisJCSJCbGFjayBTaWx2ZXIiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgKSwKKworLyogUmVwb3J0ZWQgYnkgUmFkb3ZhbiBHYXJhYmlrIDxnYXJhYmlrQGthc3Npb3BlaWEuanVscy5zYXZiYS5zaz4gKi8KK1VOVVNVQUxfREVWKCAgMHgyNzM1LCAweDEwMGIsIDB4MDAwMCwgMHg5OTk5LAorCQkiTVBJTyIsCisJCSJIUzIwMCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9HT19TTE9XICksCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1CitVTlVTVUFMX0RFViggIDB4NTVhYSwgMHhhMTAzLCAweDAwMDAsIDB4OTk5OSwgCisJCSJTYW5kaXNrIiwKKwkJIkltYWdlTWF0ZSBTRERSNTUiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsCisJCVVTX0ZMX1NJTkdMRV9MVU4pLAorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWMxY2E2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwpAQCAtMCwwICsxLDEwNTEgQEAKKy8qIERyaXZlciBmb3IgVVNCIE1hc3MgU3RvcmFnZSBjb21wbGlhbnQgZGV2aWNlcworICoKKyAqICRJZDogdXNiLmMsdiAxLjc1IDIwMDIvMDQvMjIgMDM6Mzk6NDMgbWRoYXJtIEV4cCAkCisgKgorICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6CisgKiAgIChjKSAxOTk5LTIwMDMgTWF0dGhldyBEaGFybSAobWRoYXJtLXVzYkBvbmUtZXllZC1hbGllbi5uZXQpCisgKgorICogRGV2ZWxvcGVkIHdpdGggdGhlIGFzc2lzdGFuY2Ugb2Y6CisgKiAgIChjKSAyMDAwIERhdmlkIEwuIEJyb3duLCBKci4gKHVzYi1zdG9yYWdlQGRhdmlkYi5vcmcpCisgKiAgIChjKSAyMDAzIEFsYW4gU3Rlcm4gKHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHUpCisgKgorICogSW5pdGlhbCB3b3JrIGJ5OgorICogICAoYykgMTk5OSBNaWNoYWVsIEdlZSAobWljaGFlbEBsaW51eHNwZWNpZmljLmNvbSkKKyAqCisgKiB1c2JfZGV2aWNlX2lkIHN1cHBvcnQgYnkgQWRhbSBKLiBSaWNodGVyIChhZGFtQHlnZ2RyYXNpbC5jb20pOgorICogICAoYykgMjAwMCBZZ2dkcmFzaWwgQ29tcHV0aW5nLCBJbmMuCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlICdVU0IgTWFzcyBTdG9yYWdlIENsYXNzJyBkb2N1bWVudC4gVGhpcworICogZGVzY3JpYmVzIGluIGRldGFpbCB0aGUgcHJvdG9jb2wgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHN1Y2gKKyAqIGRldmljZXMuICBDbGVhcmx5LCB0aGUgZGVzaWduZXJzIGhhZCBTQ1NJIGFuZCBBVEFQSSBjb21tYW5kcyBpbgorICogbWluZCB3aGVuIHRoZXkgY3JlYXRlZCB0aGlzIGRvY3VtZW50LiAgVGhlIGNvbW1hbmRzIGFyZSBhbGwgdmVyeQorICogc2ltaWxhciB0byBjb21tYW5kcyBpbiB0aGUgU0NTSS1JSSBhbmQgQVRBUEkgc3BlY2lmaWNhdGlvbnMuCisgKgorICogSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBpbiBhIG51bWJlciBvZiBjYXNlcyB0aGlzIGNsYXNzCisgKiBleGhpYml0cyBjbGFzcy1zcGVjaWZpYyBleGVtcHRpb25zIGZyb20gdGhlIFVTQiBzcGVjaWZpY2F0aW9uLgorICogTm90YWJseSB0aGUgdXNhZ2Ugb2YgTkFLLCBTVEFMTCBhbmQgQUNLIGRpZmZlcnMgZnJvbSB0aGUgbm9ybSwgaW4KKyAqIHRoYXQgdGhleSBhcmUgdXNlZCB0byBjb21tdW5pY2F0ZSB3YWl0LCBmYWlsZWQgYW5kIE9LIG9uIGNvbW1hbmRzLgorICoKKyAqIEFsc28sIGZvciBjZXJ0YWluIGRldmljZXMsIHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQgaXMgdXNlZCB0byBjb252ZXkKKyAqIHN0YXR1cyBvZiBhIGNvbW1hbmQuCisgKgorICogUGxlYXNlIHNlZSBodHRwOi8vd3d3Lm9uZS1leWVkLWFsaWVuLm5ldC9+bWRoYXJtL2xpbnV4LXVzYiBmb3IgbW9yZQorICogaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBkcml2ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorCisjaW5jbHVkZSAidXNiLmgiCisjaW5jbHVkZSAic2NzaWdsdWUuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJwcm90b2NvbC5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAiaW5pdGlhbGl6ZXJzLmgiCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKKyNpbmNsdWRlICJzaHV0dGxlX3VzYmF0LmgiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5CisjaW5jbHVkZSAic2RkcjA5LmgiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1CisjaW5jbHVkZSAic2RkcjU1LmgiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTQorI2luY2x1ZGUgImRwY20uaCIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NCisjaW5jbHVkZSAiZnJlZWNvbS5oIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMAorI2luY2x1ZGUgImlzZDIwMC5oIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKKyNpbmNsdWRlICJkYXRhZmFiLmgiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QKKyNpbmNsdWRlICJqdW1wc2hvdC5oIgorI2VuZGlmCisKKworLyogU29tZSBpbmZvcm1hdGlvbmFsIGRhdGEgKi8KK01PRFVMRV9BVVRIT1IoIk1hdHRoZXcgRGhhcm0gPG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJVU0IgTWFzcyBTdG9yYWdlIGRyaXZlciBmb3IgTGludXgiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBkZWxheV91c2UgPSA1OworbW9kdWxlX3BhcmFtKGRlbGF5X3VzZSwgdWludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWxheV91c2UsICJzZWNvbmRzIHRvIGRlbGF5IGJlZm9yZSB1c2luZyBhIG5ldyBkZXZpY2UiKTsKKworCisvKiBUaGVzZSBhcmUgdXNlZCB0byBtYWtlIHN1cmUgdGhlIG1vZHVsZSBkb2Vzbid0IHVubG9hZCBiZWZvcmUgYWxsIHRoZQorICogdGhyZWFkcyBoYXZlIGV4aXRlZC4KKyAqLworc3RhdGljIGF0b21pY190IHRvdGFsX3RocmVhZHMgPSBBVE9NSUNfSU5JVCgwKTsKK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04odGhyZWFkc19nb25lKTsKKworCitzdGF0aWMgaW50IHN0b3JhZ2VfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CisKK3N0YXRpYyB2b2lkIHN0b3JhZ2VfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpOworCisvKiBUaGUgZW50cmllcyBpbiB0aGlzIHRhYmxlLCBleGNlcHQgZm9yIGZpbmFsIG9uZXMgaGVyZQorICogKFVTQl9NQVNTX1NUT1JBR0VfQ0xBU1MgYW5kIHRoZSBlbXB0eSBlbnRyeSksIGNvcnJlc3BvbmQsCisgKiBsaW5lIGZvciBsaW5lIHdpdGggdGhlIGVudHJpZXMgb2YgdXNfdW5zdWF1bF9kZXZfbGlzdFtdLgorICovCisKKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbixiY2REZXZpY2VNYXgpIH0KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHN0b3JhZ2VfdXNiX2lkcyBbXSA9IHsKKworIwlpbmNsdWRlICJ1bnVzdWFsX2RldnMuaCIKKyN1bmRlZiBVTlVTVUFMX0RFVgorCS8qIENvbnRyb2wvQnVsayB0cmFuc3BvcnQgZm9yIGFsbCBTdWJDbGFzcyB2YWx1ZXMgKi8KKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ19SQkMsIFVTX1BSX0NCKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDXzgwMjAsIFVTX1BSX0NCKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDX1FJQywgVVNfUFJfQ0IpIH0sCisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfVUZJLCBVU19QUl9DQikgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ184MDcwLCBVU19QUl9DQikgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ19TQ1NJLCBVU19QUl9DQikgfSwKKworCS8qIENvbnRyb2wvQnVsay9JbnRlcnJ1cHQgdHJhbnNwb3J0IGZvciBhbGwgU3ViQ2xhc3MgdmFsdWVzICovCisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfUkJDLCBVU19QUl9DQkkpIH0sCisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfODAyMCwgVVNfUFJfQ0JJKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDX1FJQywgVVNfUFJfQ0JJKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDX1VGSSwgVVNfUFJfQ0JJKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDXzgwNzAsIFVTX1BSX0NCSSkgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ19TQ1NJLCBVU19QUl9DQkkpIH0sCisKKwkvKiBCdWxrLW9ubHkgdHJhbnNwb3J0IGZvciBhbGwgU3ViQ2xhc3MgdmFsdWVzICovCisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfUkJDLCBVU19QUl9CVUxLKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDXzgwMjAsIFVTX1BSX0JVTEspIH0sCisJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgVVNfU0NfUUlDLCBVU19QUl9CVUxLKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDX1VGSSwgVVNfUFJfQlVMSykgfSwKKwl7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCBVU19TQ184MDcwLCBVU19QUl9CVUxLKSB9LAorCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19NQVNTX1NUT1JBR0UsIFVTX1NDX1NDU0ksIFVTX1BSX0JVTEspIH0sCisKKwkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBzdG9yYWdlX3VzYl9pZHMpOworCisvKiBUaGlzIGlzIHRoZSBsaXN0IG9mIGRldmljZXMgd2UgcmVjb2duaXplLCBhbG9uZyB3aXRoIHRoZWlyIGZsYWcgZGF0YSAqLworCisvKiBUaGUgdmVuZG9yIG5hbWUgc2hvdWxkIGJlIGtlcHQgYXQgZWlnaHQgY2hhcmFjdGVycyBvciBsZXNzLCBhbmQKKyAqIHRoZSBwcm9kdWN0IG5hbWUgc2hvdWxkIGJlIGtlcHQgYXQgMTYgY2hhcmFjdGVycyBvciBsZXNzLiBJZiBhIGRldmljZQorICogaGFzIHRoZSBVU19GTF9GSVhfSU5RVUlSWSBmbGFnLCB0aGVuIHRoZSB2ZW5kb3IgYW5kIHByb2R1Y3QgbmFtZXMKKyAqIG5vcm1hbGx5IGdlbmVyYXRlZCBieSBhIGRldmljZSB0aG9ydWdoIHRoZSBJTlFVSVJZIHJlc3BvbnNlIHdpbGwgYmUKKyAqIHRha2VuIGZyb20gdGhpcyBsaXN0LCBhbmQgdGhpcyBpcyB0aGUgcmVhc29uIGZvciB0aGUgYWJvdmUgc2l6ZQorICogcmVzdHJpY3Rpb24uIEhvd2V2ZXIsIGlmIHRoZSBmbGFnIGlzIG5vdCBwcmVzZW50LCB0aGVuIHlvdQorICogYXJlIGZyZWUgdG8gdXNlIGFzIG1hbnkgY2hhcmFjdGVycyBhcyB5b3UgbGlrZS4KKyAqLworCisjdW5kZWYgVU5VU1VBTF9ERVYKKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRWZW5kb3IsIGlkUHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvcl9uYW1lLCBwcm9kdWN0X25hbWUsIHVzZV9wcm90b2NvbCwgdXNlX3RyYW5zcG9ydCwgXAorCQkgICAgaW5pdF9mdW5jdGlvbiwgRmxhZ3MpIFwKK3sgXAorCS52ZW5kb3JOYW1lID0gdmVuZG9yX25hbWUsCVwKKwkucHJvZHVjdE5hbWUgPSBwcm9kdWN0X25hbWUsCVwKKwkudXNlUHJvdG9jb2wgPSB1c2VfcHJvdG9jb2wsCVwKKwkudXNlVHJhbnNwb3J0ID0gdXNlX3RyYW5zcG9ydCwJXAorCS5pbml0RnVuY3Rpb24gPSBpbml0X2Z1bmN0aW9uLAlcCisJLmZsYWdzID0gRmxhZ3MsIFwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiB1c191bnVzdWFsX2Rldl9saXN0W10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfZGV2cy5oIiAKKyMJdW5kZWYgVU5VU1VBTF9ERVYKKwkvKiBDb250cm9sL0J1bGsgdHJhbnNwb3J0IGZvciBhbGwgU3ViQ2xhc3MgdmFsdWVzICovCisJeyAudXNlUHJvdG9jb2wgPSBVU19TQ19SQkMsCisJICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQ0J9LAorCXsgLnVzZVByb3RvY29sID0gVVNfU0NfODAyMCwKKwkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9DQn0sCisJeyAudXNlUHJvdG9jb2wgPSBVU19TQ19RSUMsCisJICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQ0J9LAorCXsgLnVzZVByb3RvY29sID0gVVNfU0NfVUZJLAorCSAgLnVzZVRyYW5zcG9ydCA9IFVTX1BSX0NCfSwKKwl7IC51c2VQcm90b2NvbCA9IFVTX1NDXzgwNzAsCisJICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQ0J9LAorCXsgLnVzZVByb3RvY29sID0gVVNfU0NfU0NTSSwKKwkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9DQn0sCisKKwkvKiBDb250cm9sL0J1bGsvSW50ZXJydXB0IHRyYW5zcG9ydCBmb3IgYWxsIFN1YkNsYXNzIHZhbHVlcyAqLworCXsgLnVzZVByb3RvY29sID0gVVNfU0NfUkJDLAorCSAgLnVzZVRyYW5zcG9ydCA9IFVTX1BSX0NCSX0sCisJeyAudXNlUHJvdG9jb2wgPSBVU19TQ184MDIwLAorCSAgLnVzZVRyYW5zcG9ydCA9IFVTX1BSX0NCSX0sCisJeyAudXNlUHJvdG9jb2wgPSBVU19TQ19RSUMsCisJICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQ0JJfSwKKwl7IC51c2VQcm90b2NvbCA9IFVTX1NDX1VGSSwKKwkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9DQkl9LAorCXsgLnVzZVByb3RvY29sID0gVVNfU0NfODA3MCwKKwkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9DQkl9LAorCXsgLnVzZVByb3RvY29sID0gVVNfU0NfU0NTSSwKKwkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9DQkl9LAorCisJLyogQnVsay1vbmx5IHRyYW5zcG9ydCBmb3IgYWxsIFN1YkNsYXNzIHZhbHVlcyAqLworCXsgLnVzZVByb3RvY29sID0gVVNfU0NfUkJDLAorCSAgLnVzZVRyYW5zcG9ydCA9IFVTX1BSX0JVTEt9LAorCXsgLnVzZVByb3RvY29sID0gVVNfU0NfODAyMCwKKwkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9CVUxLfSwKKwl7IC51c2VQcm90b2NvbCA9IFVTX1NDX1FJQywKKwkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9CVUxLfSwKKwl7IC51c2VQcm90b2NvbCA9IFVTX1NDX1VGSSwKKwkgIC51c2VUcmFuc3BvcnQgPSBVU19QUl9CVUxLfSwKKwl7IC51c2VQcm90b2NvbCA9IFVTX1NDXzgwNzAsCisJICAudXNlVHJhbnNwb3J0ID0gVVNfUFJfQlVMS30sCisJeyAudXNlUHJvdG9jb2wgPSBVU19TQ19TQ1NJLAorCSAgLnVzZVRyYW5zcG9ydCA9IFVTX1BSX0JVTEt9LAorCisJLyogVGVybWluYXRpbmcgZW50cnkgKi8KKwl7IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9zdG9yYWdlX2RyaXZlciA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkubmFtZSA9CQkidXNiLXN0b3JhZ2UiLAorCS5wcm9iZSA9CXN0b3JhZ2VfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQlzdG9yYWdlX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0Jc3RvcmFnZV91c2JfaWRzLAorfTsKKworLyoKKyAqIGZpbGxfaW5xdWlyeV9yZXNwb25zZSB0YWtlcyBhbiB1bnNpZ25lZCBjaGFyIGFycmF5ICh3aGljaCBtdXN0CisgKiBiZSBhdCBsZWFzdCAzNiBjaGFyYWN0ZXJzKSBhbmQgcG9wdWxhdGVzIHRoZSB2ZW5kb3IgbmFtZSwKKyAqIHByb2R1Y3QgbmFtZSwgYW5kIHJldmlzaW9uIGZpZWxkcy4gVGhlbiB0aGUgYXJyYXkgaXMgY29waWVkCisgKiBpbnRvIHRoZSBTQ1NJIGNvbW1hbmQncyByZXNwb25zZSBidWZmZXIgKG9kZGx5IGVub3VnaAorICogY2FsbGVkIHJlcXVlc3RfYnVmZmVyKS4gZGF0YV9sZW4gY29udGFpbnMgdGhlIGxlbmd0aCBvZiB0aGUKKyAqIGRhdGEgYXJyYXksIHdoaWNoIGFnYWluIG11c3QgYmUgYXQgbGVhc3QgMzYuCisgKi8KKwordm9pZCBmaWxsX2lucXVpcnlfcmVzcG9uc2Uoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBjaGFyICpkYXRhLAorCQl1bnNpZ25lZCBpbnQgZGF0YV9sZW4pCit7CisJaWYgKGRhdGFfbGVuPDM2KSAvLyBZb3UgbG9zZS4KKwkJcmV0dXJuOworCisJaWYoZGF0YVswXSYweDIwKSB7IC8qIFVTQiBkZXZpY2UgY3VycmVudGx5IG5vdCBjb25uZWN0ZWQuIFJldHVybgorCQkJICAgICAgcGVyaXBoZXJhbCBxdWFsaWZpZXIgMDAxYiAoIi4uLmhvd2V2ZXIsIHRoZQorCQkJICAgICAgcGh5c2ljYWwgZGV2aWNlIGlzIG5vdCBjdXJyZW50bHkgY29ubmVjdGVkCisJCQkgICAgICB0byB0aGlzIGxvZ2ljYWwgdW5pdCIpIGFuZCBsZWF2ZSB2ZW5kb3IgYW5kCisJCQkgICAgICBwcm9kdWN0IGlkZW50aWZpY2F0aW9uIGVtcHR5LiAoIklmIHRoZSB0YXJnZXQKKwkJCSAgICAgIGRvZXMgc3RvcmUgc29tZSBvZiB0aGUgSU5RVUlSWSBkYXRhIG9uIHRoZQorCQkJICAgICAgZGV2aWNlLCBpdCBtYXkgcmV0dXJuIHplcm9zIG9yIEFTQ0lJIHNwYWNlcyAKKwkJCSAgICAgICgyMGgpIGluIHRob3NlIGZpZWxkcyB1bnRpbCB0aGUgZGF0YSBpcworCQkJICAgICAgYXZhaWxhYmxlIGZyb20gdGhlIGRldmljZS4iKS4gKi8KKwkJbWVtc2V0KGRhdGErOCwwLDI4KTsKKwl9IGVsc2UgeworCQl1MTYgYmNkRGV2aWNlID0gbGUxNl90b19jcHUodXMtPnB1c2JfZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisJCW1lbWNweShkYXRhKzgsIHVzLT51bnVzdWFsX2Rldi0+dmVuZG9yTmFtZSwgCisJCQlzdHJsZW4odXMtPnVudXN1YWxfZGV2LT52ZW5kb3JOYW1lKSA+IDggPyA4IDoKKwkJCXN0cmxlbih1cy0+dW51c3VhbF9kZXYtPnZlbmRvck5hbWUpKTsKKwkJbWVtY3B5KGRhdGErMTYsIHVzLT51bnVzdWFsX2Rldi0+cHJvZHVjdE5hbWUsIAorCQkJc3RybGVuKHVzLT51bnVzdWFsX2Rldi0+cHJvZHVjdE5hbWUpID4gMTYgPyAxNiA6CisJCQlzdHJsZW4odXMtPnVudXN1YWxfZGV2LT5wcm9kdWN0TmFtZSkpOworCQlkYXRhWzMyXSA9IDB4MzAgKyAoKGJjZERldmljZT4+MTIpICYgMHgwRik7CisJCWRhdGFbMzNdID0gMHgzMCArICgoYmNkRGV2aWNlPj44KSAmIDB4MEYpOworCQlkYXRhWzM0XSA9IDB4MzAgKyAoKGJjZERldmljZT4+NCkgJiAweDBGKTsKKwkJZGF0YVszNV0gPSAweDMwICsgKChiY2REZXZpY2UpICYgMHgwRik7CisJfQorCisJdXNiX3N0b3Jfc2V0X3hmZXJfYnVmKGRhdGEsIGRhdGFfbGVuLCB1cy0+c3JiKTsKK30KKworc3RhdGljIGludCB1c2Jfc3Rvcl9jb250cm9sX3RocmVhZCh2b2lkICogX191cykKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSAoc3RydWN0IHVzX2RhdGEgKilfX3VzOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSB1c190b19ob3N0KHVzKTsKKworCWxvY2tfa2VybmVsKCk7CisKKwkvKgorCSAqIFRoaXMgdGhyZWFkIGRvZXNuJ3QgbmVlZCBhbnkgdXNlci1sZXZlbCBhY2Nlc3MsCisJICogc28gZ2V0IHJpZCBvZiBhbGwgb3VyIHJlc291cmNlcy4KKwkgKi8KKwlkYWVtb25pemUoInVzYi1zdG9yYWdlIik7CisJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7CisJdW5sb2NrX2tlcm5lbCgpOworCisJLyogYWNxdWlyZSBhIHJlZmVyZW5jZSB0byB0aGUgaG9zdCwgc28gaXQgd29uJ3QgYmUgZGVhbGxvY2F0ZWQKKwkgKiB1bnRpbCB3ZSdyZSByZWFkeSB0byBleGl0ICovCisJc2NzaV9ob3N0X2dldChob3N0KTsKKworCS8qIHNpZ25hbCB0aGF0IHdlJ3ZlIHN0YXJ0ZWQgdGhlIHRocmVhZCAqLworCWNvbXBsZXRlKCYodXMtPm5vdGlmeSkpOworCisJZm9yKDs7KSB7CisJCVVTX0RFQlVHUCgiKioqIHRocmVhZCBzbGVlcGluZy5cbiIpOworCQlpZihkb3duX2ludGVycnVwdGlibGUoJnVzLT5zZW1hKSkKKwkJCWJyZWFrOworCQkJCisJCVVTX0RFQlVHUCgiKioqIHRocmVhZCBhd2FrZW5lZC5cbiIpOworCisJCS8qIGxvY2sgdGhlIGRldmljZSBwb2ludGVycyAqLworCQlkb3duKCYodXMtPmRldl9zZW1hcGhvcmUpKTsKKworCQkvKiBpZiB0aGUgZGV2aWNlIGhhcyBkaXNjb25uZWN0ZWQsIHdlIGFyZSBmcmVlIHRvIGV4aXQgKi8KKwkJaWYgKHRlc3RfYml0KFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcsICZ1cy0+ZmxhZ3MpKSB7CisJCQlVU19ERUJVR1AoIi0tIGV4aXRpbmdcbiIpOworCQkJdXAoJih1cy0+ZGV2X3NlbWFwaG9yZSkpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBsb2NrIGFjY2VzcyB0byB0aGUgc3RhdGUgKi8KKwkJc2NzaV9sb2NrKGhvc3QpOworCisJCS8qIGhhcyB0aGUgY29tbWFuZCB0aW1lZCBvdXQgKmFscmVhZHkqID8gKi8KKwkJaWYgKHRlc3RfYml0KFVTX0ZMSURYX1RJTUVEX09VVCwgJnVzLT5mbGFncykpIHsKKwkJCXVzLT5zcmItPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKKwkJCWdvdG8gU2tpcEZvckFib3J0OworCQl9CisKKwkJc2NzaV91bmxvY2soaG9zdCk7CisKKwkJLyogcmVqZWN0IHRoZSBjb21tYW5kIGlmIHRoZSBkaXJlY3Rpb24gaW5kaWNhdG9yIAorCQkgKiBpcyBVTktOT1dOCisJCSAqLworCQlpZiAodXMtPnNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX0JJRElSRUNUSU9OQUwpIHsKKwkJCVVTX0RFQlVHUCgiVU5LTk9XTiBkYXRhIGRpcmVjdGlvblxuIik7CisJCQl1cy0+c3JiLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CisJCX0KKworCQkvKiByZWplY3QgaWYgdGFyZ2V0ICE9IDAgb3IgaWYgTFVOIGlzIGhpZ2hlciB0aGFuCisJCSAqIHRoZSBtYXhpbXVtIGtub3duIExVTgorCQkgKi8KKwkJZWxzZSBpZiAodXMtPnNyYi0+ZGV2aWNlLT5pZCAmJiAKKwkJCQkhKHVzLT5mbGFncyAmIFVTX0ZMX1NDTV9NVUxUX1RBUkcpKSB7CisJCQlVU19ERUJVR1AoIkJhZCB0YXJnZXQgbnVtYmVyICglZDolZClcbiIsCisJCQkJICB1cy0+c3JiLT5kZXZpY2UtPmlkLCB1cy0+c3JiLT5kZXZpY2UtPmx1bik7CisJCQl1cy0+c3JiLT5yZXN1bHQgPSBESURfQkFEX1RBUkdFVCA8PCAxNjsKKwkJfQorCisJCWVsc2UgaWYgKHVzLT5zcmItPmRldmljZS0+bHVuID4gdXMtPm1heF9sdW4pIHsKKwkJCVVTX0RFQlVHUCgiQmFkIExVTiAoJWQ6JWQpXG4iLAorCQkJCSAgdXMtPnNyYi0+ZGV2aWNlLT5pZCwgdXMtPnNyYi0+ZGV2aWNlLT5sdW4pOworCQkJdXMtPnNyYi0+cmVzdWx0ID0gRElEX0JBRF9UQVJHRVQgPDwgMTY7CisJCX0KKworCQkvKiBIYW5kbGUgdGhvc2UgZGV2aWNlcyB3aGljaCBuZWVkIHVzIHRvIGZha2UgCisJCSAqIHRoZWlyIGlucXVpcnkgZGF0YSAqLworCQllbHNlIGlmICgodXMtPnNyYi0+Y21uZFswXSA9PSBJTlFVSVJZKSAmJgorCQkJICAgICh1cy0+ZmxhZ3MgJiBVU19GTF9GSVhfSU5RVUlSWSkpIHsKKwkJCXVuc2lnbmVkIGNoYXIgZGF0YV9wdHJbMzZdID0geworCQkJICAgIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDIsCisJCQkgICAgMHgxRiwgMHgwMCwgMHgwMCwgMHgwMH07CisKKwkJCVVTX0RFQlVHUCgiRmFraW5nIElOUVVJUlkgY29tbWFuZFxuIik7CisJCQlmaWxsX2lucXVpcnlfcmVzcG9uc2UodXMsIGRhdGFfcHRyLCAzNik7CisJCQl1cy0+c3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOworCQl9CisKKwkJLyogd2UndmUgZ290IGEgY29tbWFuZCwgbGV0J3MgZG8gaXQhICovCisJCWVsc2UgeworCQkJVVNfREVCVUcodXNiX3N0b3Jfc2hvd19jb21tYW5kKHVzLT5zcmIpKTsKKwkJCXVzLT5wcm90b19oYW5kbGVyKHVzLT5zcmIsIHVzKTsKKwkJfQorCisJCS8qIGxvY2sgYWNjZXNzIHRvIHRoZSBzdGF0ZSAqLworCQlzY3NpX2xvY2soaG9zdCk7CisKKwkJLyogaW5kaWNhdGUgdGhhdCB0aGUgY29tbWFuZCBpcyBkb25lICovCisJCWlmICh1cy0+c3JiLT5yZXN1bHQgIT0gRElEX0FCT1JUIDw8IDE2KSB7CisJCQlVU19ERUJVR1AoInNjc2kgY21kIGRvbmUsIHJlc3VsdD0weCV4XG4iLCAKKwkJCQkgICB1cy0+c3JiLT5yZXN1bHQpOworCQkJdXMtPnNyYi0+c2NzaV9kb25lKHVzLT5zcmIpOworCQl9IGVsc2UgeworU2tpcEZvckFib3J0OgorCQkJVVNfREVCVUdQKCJzY3NpIGNvbW1hbmQgYWJvcnRlZFxuIik7CisJCX0KKworCQkvKiBJZiBhbiBhYm9ydCByZXF1ZXN0IHdhcyByZWNlaXZlZCB3ZSBuZWVkIHRvIHNpZ25hbCB0aGF0CisJCSAqIHRoZSBhYm9ydCBoYXMgZmluaXNoZWQuICBUaGUgcHJvcGVyIHRlc3QgZm9yIHRoaXMgaXMKKwkJICogdGhlIFRJTUVEX09VVCBmbGFnLCBub3Qgc3JiLT5yZXN1bHQgPT0gRElEX0FCT1JULCBiZWNhdXNlCisJCSAqIGEgdGltZW91dC9hYm9ydCByZXF1ZXN0IG1pZ2h0IGJlIHJlY2VpdmVkIGFmdGVyIGFsbCB0aGUKKwkJICogVVNCIHByb2Nlc3Npbmcgd2FzIGNvbXBsZXRlLiAqLworCQlpZiAodGVzdF9iaXQoVVNfRkxJRFhfVElNRURfT1VULCAmdXMtPmZsYWdzKSkKKwkJCWNvbXBsZXRlKCYodXMtPm5vdGlmeSkpOworCisJCS8qIGZpbmlzaGVkIHdvcmtpbmcgb24gdGhpcyBjb21tYW5kICovCisJCXVzLT5zcmIgPSBOVUxMOworCQlzY3NpX3VubG9jayhob3N0KTsKKworCQkvKiB1bmxvY2sgdGhlIGRldmljZSBwb2ludGVycyAqLworCQl1cCgmKHVzLT5kZXZfc2VtYXBob3JlKSk7CisJfSAvKiBmb3IgKDs7KSAqLworCisJc2NzaV9ob3N0X3B1dChob3N0KTsKKworCS8qIG5vdGlmeSB0aGUgZXhpdCByb3V0aW5lIHRoYXQgd2UncmUgYWN0dWFsbHkgZXhpdGluZyBub3cgCisJICoKKwkgKiBjb21wbGV0ZSgpL3dhaXRfZm9yX2NvbXBsZXRpb24oKSBpcyBzaW1pbGFyIHRvIHVwKCkvZG93bigpLAorCSAqIGV4Y2VwdCB0aGF0IGNvbXBsZXRlKCkgaXMgc2FmZSBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgc3RydWN0dXJlCisJICogaXMgZ2V0dGluZyBkZWxldGVkIGluIGEgcGFyYWxsZWwgbW9kZSBvZiBleGVjdXRpb24gKGkuZS4ganVzdAorCSAqIGFmdGVyIHRoZSBkb3duKCkgLS0gdGhhdCdzIG5lY2Vzc2FyeSBmb3IgdGhlIHRocmVhZC1zaHV0ZG93bgorCSAqIGNhc2UuCisJICoKKwkgKiBjb21wbGV0ZV9hbmRfZXhpdCgpIGdvZXMgZXZlbiBmdXJ0aGVyIHRoYW4gdGhpcyAtLSBpdCBpcyBzYWZlIGluCisJICogdGhlIGNhc2UgdGhhdCB0aGUgdGhyZWFkIG9mIHRoZSBjYWxsZXIgaXMgZ29pbmcgYXdheSAobm90IGp1c3QKKwkgKiB0aGUgc3RydWN0dXJlKSAtLSB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIG1vZHVsZS1yZW1vdmUgY2FzZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBpbiBwcmVlbXB0aW9uIGtlcm5lbHMsIHdoaWNoIHRyYW5zZmVyIHRoZSBmbG93CisJICogb2YgZXhlY3V0aW9uIGltbWVkaWF0ZWx5IHVwb24gYSBjb21wbGV0ZSgpLgorCSAqLworCWNvbXBsZXRlX2FuZF9leGl0KCZ0aHJlYWRzX2dvbmUsIDApOworfQkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZXZpY2UgcHJvYmluZyBhbmQgZGlzY29ubmVjdGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBBc3NvY2lhdGUgb3VyIHByaXZhdGUgZGF0YSB3aXRoIHRoZSBVU0IgZGV2aWNlICovCitzdGF0aWMgaW50IGFzc29jaWF0ZV9kZXYoc3RydWN0IHVzX2RhdGEgKnVzLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlVU19ERUJVR1AoIi0tICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLyogRmlsbCBpbiB0aGUgZGV2aWNlLXJlbGF0ZWQgZmllbGRzICovCisJdXMtPnB1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwl1cy0+cHVzYl9pbnRmID0gaW50ZjsKKwl1cy0+aWZudW0gPSBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOworCVVTX0RFQlVHUCgiVmVuZG9yOiAweCUwNHgsIFByb2R1Y3Q6IDB4JTA0eCwgUmV2aXNpb246IDB4JTA0eFxuIiwKKwkJCWxlMTZfdG9fY3B1KHVzLT5wdXNiX2Rldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCQlsZTE2X3RvX2NwdSh1cy0+cHVzYl9kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSwKKwkJCWxlMTZfdG9fY3B1KHVzLT5wdXNiX2Rldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpKTsKKwlVU19ERUJVR1AoIkludGVyZmFjZSBTdWJjbGFzczogMHglMDJ4LCBQcm90b2NvbDogMHglMDJ4XG4iLAorCQkJaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzLAorCQkJaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZVByb3RvY29sKTsKKworCS8qIFN0b3JlIG91ciBwcml2YXRlIGRhdGEgaW4gdGhlIGludGVyZmFjZSAqLworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgdXMpOworCisJLyogQWxsb2NhdGUgdGhlIGRldmljZS1yZWxhdGVkIERNQS1tYXBwZWQgYnVmZmVycyAqLworCXVzLT5jciA9IHVzYl9idWZmZXJfYWxsb2ModXMtPnB1c2JfZGV2LCBzaXplb2YoKnVzLT5jciksCisJCQlHRlBfS0VSTkVMLCAmdXMtPmNyX2RtYSk7CisJaWYgKCF1cy0+Y3IpIHsKKwkJVVNfREVCVUdQKCJ1c2JfY3RybHJlcXVlc3QgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl1cy0+aW9idWYgPSB1c2JfYnVmZmVyX2FsbG9jKHVzLT5wdXNiX2RldiwgVVNfSU9CVUZfU0laRSwKKwkJCUdGUF9LRVJORUwsICZ1cy0+aW9idWZfZG1hKTsKKwlpZiAoIXVzLT5pb2J1ZikgeworCQlVU19ERUJVR1AoIkkvTyBidWZmZXIgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIEdldCB0aGUgdW51c3VhbF9kZXZzIGVudHJpZXMgYW5kIHRoZSBzdHJpbmcgZGVzY3JpcHRvcnMgKi8KK3N0YXRpYyB2b2lkIGdldF9kZXZpY2VfaW5mbyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIGludCBpZF9pbmRleCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gdXMtPnB1c2JfZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmlkZXNjID0KKwkJJnVzLT5wdXNiX2ludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjOworCXN0cnVjdCB1c191bnVzdWFsX2RldiAqdW51c3VhbF9kZXYgPSAmdXNfdW51c3VhbF9kZXZfbGlzdFtpZF9pbmRleF07CisJc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkID0gJnN0b3JhZ2VfdXNiX2lkc1tpZF9pbmRleF07CisKKwkvKiBTdG9yZSB0aGUgZW50cmllcyAqLworCXVzLT51bnVzdWFsX2RldiA9IHVudXN1YWxfZGV2OworCXVzLT5zdWJjbGFzcyA9ICh1bnVzdWFsX2Rldi0+dXNlUHJvdG9jb2wgPT0gVVNfU0NfREVWSUNFKSA/CisJCQlpZGVzYy0+YkludGVyZmFjZVN1YkNsYXNzIDoKKwkJCXVudXN1YWxfZGV2LT51c2VQcm90b2NvbDsKKwl1cy0+cHJvdG9jb2wgPSAodW51c3VhbF9kZXYtPnVzZVRyYW5zcG9ydCA9PSBVU19QUl9ERVZJQ0UpID8KKwkJCWlkZXNjLT5iSW50ZXJmYWNlUHJvdG9jb2wgOgorCQkJdW51c3VhbF9kZXYtPnVzZVRyYW5zcG9ydDsKKwl1cy0+ZmxhZ3MgPSB1bnVzdWFsX2Rldi0+ZmxhZ3M7CisKKwkvKgorCSAqIFRoaXMgZmxhZyBpcyBvbmx5IG5lZWRlZCB3aGVuIHdlJ3JlIGluIGhpZ2gtc3BlZWQsIHNvIGxldCdzCisJICogZGlzYWJsZSBpdCBpZiB3ZSdyZSBpbiBmdWxsLXNwZWVkCisJICovCisJaWYgKGRldi0+c3BlZWQgIT0gVVNCX1NQRUVEX0hJR0gpCisJCXVzLT5mbGFncyAmPSB+VVNfRkxfR09fU0xPVzsKKworCS8qIExvZyBhIG1lc3NhZ2UgaWYgYSBub24tZ2VuZXJpYyB1bnVzdWFsX2RldiBlbnRyeSBjb250YWlucyBhbgorCSAqIHVubmVjZXNzYXJ5IHN1YmNsYXNzIG9yIHByb3RvY29sIG92ZXJyaWRlLiAgVGhpcyBtYXkgc3RpbXVsYXRlCisJICogcmVwb3J0cyBmcm9tIHVzZXJzIHRoYXQgd2lsbCBoZWxwIHVzIHJlbW92ZSB1bm5lZWRlZCBlbnRyaWVzCisJICogZnJvbSB0aGUgdW51c3VhbF9kZXZzLmggdGFibGUuCisJICovCisJaWYgKGlkLT5pZFZlbmRvciB8fCBpZC0+aWRQcm9kdWN0KSB7CisJCXN0YXRpYyBjaGFyICptc2dzWzNdID0geworCQkJImFuIHVubmVlZGVkIFN1YkNsYXNzIGVudHJ5IiwKKwkJCSJhbiB1bm5lZWRlZCBQcm90b2NvbCBlbnRyeSIsCisJCQkidW5uZWVkZWQgU3ViQ2xhc3MgYW5kIFByb3RvY29sIGVudHJpZXMifTsKKwkJc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvciAqZGRlc2MgPSAmZGV2LT5kZXNjcmlwdG9yOworCQlpbnQgbXNnID0gLTE7CisKKwkJaWYgKHVudXN1YWxfZGV2LT51c2VQcm90b2NvbCAhPSBVU19TQ19ERVZJQ0UgJiYKKwkJCXVzLT5zdWJjbGFzcyA9PSBpZGVzYy0+YkludGVyZmFjZVN1YkNsYXNzKQorCQkJbXNnICs9IDE7CisJCWlmICh1bnVzdWFsX2Rldi0+dXNlVHJhbnNwb3J0ICE9IFVTX1BSX0RFVklDRSAmJgorCQkJdXMtPnByb3RvY29sID09IGlkZXNjLT5iSW50ZXJmYWNlUHJvdG9jb2wpCisJCQltc2cgKz0gMjsKKwkJaWYgKG1zZyA+PSAwICYmICEodW51c3VhbF9kZXYtPmZsYWdzICYgVVNfRkxfTkVFRF9PVkVSUklERSkpCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgVVNCX1NUT1JBR0UgIlRoaXMgZGV2aWNlICIKKwkJCQkiKCUwNHgsJTA0eCwlMDR4IFMgJTAyeCBQICUwMngpIgorCQkJCSIgaGFzICVzIGluIHVudXN1YWxfZGV2cy5oXG4iCisJCQkJIiAgIFBsZWFzZSBzZW5kIGEgY29weSBvZiB0aGlzIG1lc3NhZ2UgdG8gIgorCQkJCSI8bGludXgtdXNiLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD5cbiIsCisJCQkJbGUxNl90b19jcHUoZGRlc2MtPmlkVmVuZG9yKSwKKwkJCQlsZTE2X3RvX2NwdShkZGVzYy0+aWRQcm9kdWN0KSwKKwkJCQlsZTE2X3RvX2NwdShkZGVzYy0+YmNkRGV2aWNlKSwKKwkJCQlpZGVzYy0+YkludGVyZmFjZVN1YkNsYXNzLAorCQkJCWlkZXNjLT5iSW50ZXJmYWNlUHJvdG9jb2wsCisJCQkJbXNnc1ttc2ddKTsKKwl9Cit9CisKKy8qIEdldCB0aGUgdHJhbnNwb3J0IHNldHRpbmdzICovCitzdGF0aWMgaW50IGdldF90cmFuc3BvcnQoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCXN3aXRjaCAodXMtPnByb3RvY29sKSB7CisJY2FzZSBVU19QUl9DQjoKKwkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIkNvbnRyb2wvQnVsayI7CisJCXVzLT50cmFuc3BvcnQgPSB1c2Jfc3Rvcl9DQl90cmFuc3BvcnQ7CisJCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9DQl9yZXNldDsKKwkJdXMtPm1heF9sdW4gPSA3OworCQlicmVhazsKKworCWNhc2UgVVNfUFJfQ0JJOgorCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiQ29udHJvbC9CdWxrL0ludGVycnVwdCI7CisJCXVzLT50cmFuc3BvcnQgPSB1c2Jfc3Rvcl9DQklfdHJhbnNwb3J0OworCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7CisJCXVzLT5tYXhfbHVuID0gNzsKKwkJYnJlYWs7CisKKwljYXNlIFVTX1BSX0JVTEs6CisJCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJCdWxrIjsKKwkJdXMtPnRyYW5zcG9ydCA9IHVzYl9zdG9yX0J1bGtfdHJhbnNwb3J0OworCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKKwkJYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKKwljYXNlIFVTX1BSX1NDTV9BVEFQSToKKwkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIlNDTS9BVEFQSSI7CisJCXVzLT50cmFuc3BvcnQgPSB1c2JhdF90cmFuc3BvcnQ7CisJCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9DQl9yZXNldDsKKwkJdXMtPm1heF9sdW4gPSAxOworCQlicmVhazsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQorCWNhc2UgVVNfUFJfRVVTQl9TRERSMDk6CisJCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJFVVNCL1NERFIwOSI7CisJCXVzLT50cmFuc3BvcnQgPSBzZGRyMDlfdHJhbnNwb3J0OworCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7CisJCXVzLT5tYXhfbHVuID0gMDsKKwkJYnJlYWs7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKKwljYXNlIFVTX1BSX1NERFI1NToKKwkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIlNERFI1NSI7CisJCXVzLT50cmFuc3BvcnQgPSBzZGRyNTVfdHJhbnNwb3J0OworCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gc2RkcjU1X3Jlc2V0OworCQl1cy0+bWF4X2x1biA9IDA7CisJCWJyZWFrOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTQorCWNhc2UgVVNfUFJfRFBDTV9VU0I6CisJCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJDb250cm9sL0J1bGstRVVTQi9TRERSMDkiOworCQl1cy0+dHJhbnNwb3J0ID0gZHBjbV90cmFuc3BvcnQ7CisJCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9DQl9yZXNldDsKKwkJdXMtPm1heF9sdW4gPSAxOworCQlicmVhazsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00KKwljYXNlIFVTX1BSX0ZSRUVDT006CisJCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJGcmVlY29tIjsKKwkJdXMtPnRyYW5zcG9ydCA9IGZyZWVjb21fdHJhbnNwb3J0OworCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfZnJlZWNvbV9yZXNldDsKKwkJdXMtPm1heF9sdW4gPSAwOworCQlicmVhazsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKKwljYXNlIFVTX1BSX0RBVEFGQUI6CisJCXVzLT50cmFuc3BvcnRfbmFtZSAgPSAiRGF0YWZhYiBCdWxrLU9ubHkiOworCQl1cy0+dHJhbnNwb3J0ID0gZGF0YWZhYl90cmFuc3BvcnQ7CisJCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0OworCQl1cy0+bWF4X2x1biA9IDE7CisJCWJyZWFrOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QKKwljYXNlIFVTX1BSX0pVTVBTSE9UOgorCQl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkxleGFyIEp1bXBzaG90IENvbnRyb2wvQnVsayI7CisJCXVzLT50cmFuc3BvcnQgPSBqdW1wc2hvdF90cmFuc3BvcnQ7CisJCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0OworCQl1cy0+bWF4X2x1biA9IDE7CisJCWJyZWFrOworI2VuZGlmCisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTzsKKwl9CisJVVNfREVCVUdQKCJUcmFuc3BvcnQ6ICVzXG4iLCB1cy0+dHJhbnNwb3J0X25hbWUpOworCisJLyogZml4IGZvciBzaW5nbGUtbHVuIGRldmljZXMgKi8KKwlpZiAodXMtPmZsYWdzICYgVVNfRkxfU0lOR0xFX0xVTikKKwkJdXMtPm1heF9sdW4gPSAwOworCXJldHVybiAwOworfQorCisvKiBHZXQgdGhlIHByb3RvY29sIHNldHRpbmdzICovCitzdGF0aWMgaW50IGdldF9wcm90b2NvbChzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJc3dpdGNoICh1cy0+c3ViY2xhc3MpIHsKKwljYXNlIFVTX1NDX1JCQzoKKwkJdXMtPnByb3RvY29sX25hbWUgPSAiUmVkdWNlZCBCbG9jayBDb21tYW5kcyAoUkJDKSI7CisJCXVzLT5wcm90b19oYW5kbGVyID0gdXNiX3N0b3JfdHJhbnNwYXJlbnRfc2NzaV9jb21tYW5kOworCQlicmVhazsKKworCWNhc2UgVVNfU0NfODAyMDoKKwkJdXMtPnByb3RvY29sX25hbWUgPSAiODAyMGkiOworCQl1cy0+cHJvdG9faGFuZGxlciA9IHVzYl9zdG9yX0FUQVBJX2NvbW1hbmQ7CisJCXVzLT5tYXhfbHVuID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFVTX1NDX1FJQzoKKwkJdXMtPnByb3RvY29sX25hbWUgPSAiUUlDLTE1NyI7CisJCXVzLT5wcm90b19oYW5kbGVyID0gdXNiX3N0b3JfcWljMTU3X2NvbW1hbmQ7CisJCXVzLT5tYXhfbHVuID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFVTX1NDXzgwNzA6CisJCXVzLT5wcm90b2NvbF9uYW1lID0gIjgwNzBpIjsKKwkJdXMtPnByb3RvX2hhbmRsZXIgPSB1c2Jfc3Rvcl9BVEFQSV9jb21tYW5kOworCQl1cy0+bWF4X2x1biA9IDA7CisJCWJyZWFrOworCisJY2FzZSBVU19TQ19TQ1NJOgorCQl1cy0+cHJvdG9jb2xfbmFtZSA9ICJUcmFuc3BhcmVudCBTQ1NJIjsKKwkJdXMtPnByb3RvX2hhbmRsZXIgPSB1c2Jfc3Rvcl90cmFuc3BhcmVudF9zY3NpX2NvbW1hbmQ7CisJCWJyZWFrOworCisJY2FzZSBVU19TQ19VRkk6CisJCXVzLT5wcm90b2NvbF9uYW1lID0gIlVuaWZvcm0gRmxvcHB5IEludGVyZmFjZSAoVUZJKSI7CisJCXVzLT5wcm90b19oYW5kbGVyID0gdXNiX3N0b3JfdWZpX2NvbW1hbmQ7CisJCWJyZWFrOworCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMAorCWNhc2UgVVNfU0NfSVNEMjAwOgorCQl1cy0+cHJvdG9jb2xfbmFtZSA9ICJJU0QyMDAgQVRBL0FUQVBJIjsKKwkJdXMtPnByb3RvX2hhbmRsZXIgPSBpc2QyMDBfYXRhX2NvbW1hbmQ7CisJCWJyZWFrOworI2VuZGlmCisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTzsKKwl9CisJVVNfREVCVUdQKCJQcm90b2NvbDogJXNcbiIsIHVzLT5wcm90b2NvbF9uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworLyogR2V0IHRoZSBwaXBlIHNldHRpbmdzICovCitzdGF0aWMgaW50IGdldF9waXBlcyhzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0c2V0dGluZyA9CisJCXVzLT5wdXNiX2ludGYtPmN1cl9hbHRzZXR0aW5nOworCWludCBpOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXA7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcF9pbiA9IE5VTEw7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcF9vdXQgPSBOVUxMOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBfaW50ID0gTlVMTDsKKworCS8qCisJICogRmluZCB0aGUgZW5kcG9pbnRzIHdlIG5lZWQuCisJICogV2UgYXJlIGV4cGVjdGluZyBhIG1pbmltdW0gb2YgMiBlbmRwb2ludHMgLSBpbiBhbmQgb3V0IChidWxrKS4KKwkgKiBBbiBvcHRpb25hbCBpbnRlcnJ1cHQgaXMgT0sgKG5lY2Vzc2FyeSBmb3IgQ0JJIHByb3RvY29sKS4KKwkgKiBXZSB3aWxsIGlnbm9yZSBhbnkgb3RoZXJzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBhbHRzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHM7IGkrKykgeworCQllcCA9ICZhbHRzZXR0aW5nLT5lbmRwb2ludFtpXS5kZXNjOworCisJCS8qIElzIGl0IGEgQlVMSyBlbmRwb2ludD8gKi8KKwkJaWYgKChlcC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJCQkJPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykgeworCQkJLyogQlVMSyBpbiBvciBvdXQ/ICovCisJCQlpZiAoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQorCQkJCWVwX2luID0gZXA7CisJCQllbHNlCisJCQkJZXBfb3V0ID0gZXA7CisJCX0KKworCQkvKiBJcyBpdCBhbiBpbnRlcnJ1cHQgZW5kcG9pbnQ/ICovCisJCWVsc2UgaWYgKChlcC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJCQkJPT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSB7CisJCQllcF9pbnQgPSBlcDsKKwkJfQorCX0KKworCWlmICghZXBfaW4gfHwgIWVwX291dCB8fCAodXMtPnByb3RvY29sID09IFVTX1BSX0NCSSAmJiAhZXBfaW50KSkgeworCQlVU19ERUJVR1AoIkVuZHBvaW50IHNhbml0eSBjaGVjayBmYWlsZWQhIFJlamVjdGluZyBkZXYuXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogQ2FsY3VsYXRlIGFuZCBzdG9yZSB0aGUgcGlwZSB2YWx1ZXMgKi8KKwl1cy0+c2VuZF9jdHJsX3BpcGUgPSB1c2Jfc25kY3RybHBpcGUodXMtPnB1c2JfZGV2LCAwKTsKKwl1cy0+cmVjdl9jdHJsX3BpcGUgPSB1c2JfcmN2Y3RybHBpcGUodXMtPnB1c2JfZGV2LCAwKTsKKwl1cy0+c2VuZF9idWxrX3BpcGUgPSB1c2Jfc25kYnVsa3BpcGUodXMtPnB1c2JfZGV2LAorCQllcF9vdXQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCXVzLT5yZWN2X2J1bGtfcGlwZSA9IHVzYl9yY3ZidWxrcGlwZSh1cy0+cHVzYl9kZXYsIAorCQllcF9pbi0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJaWYgKGVwX2ludCkgeworCQl1cy0+cmVjdl9pbnRyX3BpcGUgPSB1c2JfcmN2aW50cGlwZSh1cy0+cHVzYl9kZXYsCisJCQllcF9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQl1cy0+ZXBfYkludGVydmFsID0gZXBfaW50LT5iSW50ZXJ2YWw7CisJfQorCXJldHVybiAwOworfQorCisvKiBJbml0aWFsaXplIGFsbCB0aGUgZHluYW1pYyByZXNvdXJjZXMgd2UgbmVlZCAqLworc3RhdGljIGludCB1c2Jfc3Rvcl9hY3F1aXJlX3Jlc291cmNlcyhzdHJ1Y3QgdXNfZGF0YSAqdXMpCit7CisJaW50IHA7CisKKwl1cy0+Y3VycmVudF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghdXMtPmN1cnJlbnRfdXJiKSB7CisJCVVTX0RFQlVHUCgiVVJCIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogTG9jayB0aGUgZGV2aWNlIHdoaWxlIHdlIGNhcnJ5IG91dCB0aGUgbmV4dCB0d28gb3BlcmF0aW9ucyAqLworCWRvd24oJnVzLT5kZXZfc2VtYXBob3JlKTsKKworCS8qIEZvciBidWxrLW9ubHkgZGV2aWNlcywgZGV0ZXJtaW5lIHRoZSBtYXggTFVOIHZhbHVlICovCisJaWYgKHVzLT5wcm90b2NvbCA9PSBVU19QUl9CVUxLKSB7CisJCXAgPSB1c2Jfc3Rvcl9CdWxrX21heF9sdW4odXMpOworCQlpZiAocCA8IDApIHsKKwkJCXVwKCZ1cy0+ZGV2X3NlbWFwaG9yZSk7CisJCQlyZXR1cm4gcDsKKwkJfQorCQl1cy0+bWF4X2x1biA9IHA7CisJfQorCisJLyogSnVzdCBiZWZvcmUgd2Ugc3RhcnQgb3VyIGNvbnRyb2wgdGhyZWFkLCBpbml0aWFsaXplCisJICogdGhlIGRldmljZSBpZiBpdCBuZWVkcyBpbml0aWFsaXphdGlvbiAqLworCWlmICh1cy0+dW51c3VhbF9kZXYtPmluaXRGdW5jdGlvbikKKwkJdXMtPnVudXN1YWxfZGV2LT5pbml0RnVuY3Rpb24odXMpOworCisJdXAoJnVzLT5kZXZfc2VtYXBob3JlKTsKKworCS8qIFN0YXJ0IHVwIG91ciBjb250cm9sIHRocmVhZCAqLworCXAgPSBrZXJuZWxfdGhyZWFkKHVzYl9zdG9yX2NvbnRyb2xfdGhyZWFkLCB1cywgQ0xPTkVfVk0pOworCWlmIChwIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIFVTQl9TVE9SQUdFIAorCQkgICAgICAgIlVuYWJsZSB0byBzdGFydCBjb250cm9sIHRocmVhZFxuIik7CisJCXJldHVybiBwOworCX0KKwl1cy0+cGlkID0gcDsKKwlhdG9taWNfaW5jKCZ0b3RhbF90aHJlYWRzKTsKKworCS8qIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gc3RhcnQgKi8KKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCYodXMtPm5vdGlmeSkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFJlbGVhc2UgYWxsIG91ciBkeW5hbWljIHJlc291cmNlcyAqLworc3RhdGljIHZvaWQgdXNiX3N0b3JfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCVVTX0RFQlVHUCgiLS0gJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBUZWxsIHRoZSBjb250cm9sIHRocmVhZCB0byBleGl0LiAgVGhlIFNDU0kgaG9zdCBtdXN0CisJICogYWxyZWFkeSBoYXZlIGJlZW4gcmVtb3ZlZCBzbyBpdCB3b24ndCB0cnkgdG8gcXVldWUKKwkgKiBhbnkgbW9yZSBjb21tYW5kcy4KKwkgKi8KKwlVU19ERUJVR1AoIi0tIHNlbmRpbmcgZXhpdCBjb21tYW5kIHRvIHRocmVhZFxuIik7CisJdXAoJnVzLT5zZW1hKTsKKworCS8qIENhbGwgdGhlIGRlc3RydWN0b3Igcm91dGluZSwgaWYgaXQgZXhpc3RzICovCisJaWYgKHVzLT5leHRyYV9kZXN0cnVjdG9yKSB7CisJCVVTX0RFQlVHUCgiLS0gY2FsbGluZyBleHRyYV9kZXN0cnVjdG9yKClcbiIpOworCQl1cy0+ZXh0cmFfZGVzdHJ1Y3Rvcih1cy0+ZXh0cmEpOworCX0KKworCS8qIEZyZWUgdGhlIGV4dHJhIGRhdGEgYW5kIHRoZSBVUkIgKi8KKwlrZnJlZSh1cy0+ZXh0cmEpOworCXVzYl9mcmVlX3VyYih1cy0+Y3VycmVudF91cmIpOworfQorCisvKiBEaXNzb2NpYXRlIGZyb20gdGhlIFVTQiBkZXZpY2UgKi8KK3N0YXRpYyB2b2lkIGRpc3NvY2lhdGVfZGV2KHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlVU19ERUJVR1AoIi0tICVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLyogRnJlZSB0aGUgZGV2aWNlLXJlbGF0ZWQgRE1BLW1hcHBlZCBidWZmZXJzICovCisJaWYgKHVzLT5jcikKKwkJdXNiX2J1ZmZlcl9mcmVlKHVzLT5wdXNiX2Rldiwgc2l6ZW9mKCp1cy0+Y3IpLCB1cy0+Y3IsCisJCQkJdXMtPmNyX2RtYSk7CisJaWYgKHVzLT5pb2J1ZikKKwkJdXNiX2J1ZmZlcl9mcmVlKHVzLT5wdXNiX2RldiwgVVNfSU9CVUZfU0laRSwgdXMtPmlvYnVmLAorCQkJCXVzLT5pb2J1Zl9kbWEpOworCisJLyogUmVtb3ZlIG91ciBwcml2YXRlIGRhdGEgZnJvbSB0aGUgaW50ZXJmYWNlICovCisJdXNiX3NldF9pbnRmZGF0YSh1cy0+cHVzYl9pbnRmLCBOVUxMKTsKK30KKworLyogVGhyZWFkIHRvIGNhcnJ5IG91dCBkZWxheWVkIFNDU0ktZGV2aWNlIHNjYW5uaW5nICovCitzdGF0aWMgaW50IHVzYl9zdG9yX3NjYW5fdGhyZWFkKHZvaWQgKiBfX3VzKQoreworCXN0cnVjdCB1c19kYXRhICp1cyA9IChzdHJ1Y3QgdXNfZGF0YSAqKV9fdXM7CisKKwkvKgorCSAqIFRoaXMgdGhyZWFkIGRvZXNuJ3QgbmVlZCBhbnkgdXNlci1sZXZlbCBhY2Nlc3MsCisJICogc28gZ2V0IHJpZCBvZiBhbGwgb3VyIHJlc291cmNlcy4KKwkgKi8KKwlsb2NrX2tlcm5lbCgpOworCWRhZW1vbml6ZSgidXNiLXN0b3Itc2NhbiIpOworCXVubG9ja19rZXJuZWwoKTsKKworCS8qIEFjcXVpcmUgYSByZWZlcmVuY2UgdG8gdGhlIGhvc3QsIHNvIGl0IHdvbid0IGJlIGRlYWxsb2NhdGVkCisJICogdW50aWwgd2UncmUgcmVhZHkgdG8gZXhpdCAqLworCXNjc2lfaG9zdF9nZXQodXNfdG9faG9zdCh1cykpOworCisJLyogU2lnbmFsIHRoYXQgd2UndmUgc3RhcnRlZCB0aGUgdGhyZWFkICovCisJY29tcGxldGUoJih1cy0+bm90aWZ5KSk7CisKKwlwcmludGsoS0VSTl9ERUJVRworCQkidXNiLXN0b3JhZ2U6IGRldmljZSBmb3VuZCBhdCAlZFxuIiwgdXMtPnB1c2JfZGV2LT5kZXZudW0pOworCisJLyogV2FpdCBmb3IgdGhlIHRpbWVvdXQgdG8gZXhwaXJlIG9yIGZvciBhIGRpc2Nvbm5lY3QgKi8KKwlpZiAoZGVsYXlfdXNlID4gMCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAidXNiLXN0b3JhZ2U6IHdhaXRpbmcgZm9yIGRldmljZSAiCisJCQkJInRvIHNldHRsZSBiZWZvcmUgc2Nhbm5pbmdcbiIpOworcmV0cnk6CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHVzLT5kZWxheV93YWl0LAorCQkJCXRlc3RfYml0KFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcsICZ1cy0+ZmxhZ3MpLAorCQkJCWRlbGF5X3VzZSAqIEhaKTsKKwkJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfRlJFRVpFKSB7CisJCQlyZWZyaWdlcmF0b3IoUEZfRlJFRVpFKTsKKwkJCWdvdG8gcmV0cnk7CisJCX0KKwl9CisKKwkvKiBJZiB0aGUgZGV2aWNlIGlzIHN0aWxsIGNvbm5lY3RlZCwgcGVyZm9ybSB0aGUgc2Nhbm5pbmcgKi8KKwlpZiAoIXRlc3RfYml0KFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcsICZ1cy0+ZmxhZ3MpKSB7CisJCXNjc2lfc2Nhbl9ob3N0KHVzX3RvX2hvc3QodXMpKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInVzYi1zdG9yYWdlOiBkZXZpY2Ugc2NhbiBjb21wbGV0ZVxuIik7CisKKwkJLyogU2hvdWxkIHdlIHVuYmluZCBpZiBubyBkZXZpY2VzIHdlcmUgZGV0ZWN0ZWQ/ICovCisJfQorCisJc2NzaV9ob3N0X3B1dCh1c190b19ob3N0KHVzKSk7CisJY29tcGxldGVfYW5kX2V4aXQoJnRocmVhZHNfZ29uZSwgMCk7Cit9CisKKworLyogUHJvYmUgdG8gc2VlIGlmIHdlIGNhbiBkcml2ZSBhIG5ld2x5LWNvbm5lY3RlZCBVU0IgZGV2aWNlICovCitzdGF0aWMgaW50IHN0b3JhZ2VfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWNvbnN0IGludCBpZF9pbmRleCA9IGlkIC0gc3RvcmFnZV91c2JfaWRzOyAKKwlpbnQgcmVzdWx0OworCisJVVNfREVCVUdQKCJVU0IgTWFzcyBTdG9yYWdlIGRldmljZSBkZXRlY3RlZFxuIik7CisKKwkvKgorCSAqIEFzayB0aGUgU0NTSSBsYXllciB0byBhbGxvY2F0ZSBhIGhvc3Qgc3RydWN0dXJlLCB3aXRoIGV4dHJhCisJICogc3BhY2UgYXQgdGhlIGVuZCBmb3Igb3VyIHByaXZhdGUgdXNfZGF0YSBzdHJ1Y3R1cmUuCisJICovCisJaG9zdCA9IHNjc2lfaG9zdF9hbGxvYygmdXNiX3N0b3JfaG9zdF90ZW1wbGF0ZSwgc2l6ZW9mKCp1cykpOworCWlmICghaG9zdCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIFVTQl9TVE9SQUdFCisJCQkiVW5hYmxlIHRvIGFsbG9jYXRlIHRoZSBzY3NpIGhvc3RcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl1cyA9IGhvc3RfdG9fdXMoaG9zdCk7CisJbWVtc2V0KHVzLCAwLCBzaXplb2Yoc3RydWN0IHVzX2RhdGEpKTsKKwlpbml0X01VVEVYKCYodXMtPmRldl9zZW1hcGhvcmUpKTsKKwlpbml0X01VVEVYX0xPQ0tFRCgmKHVzLT5zZW1hKSk7CisJaW5pdF9jb21wbGV0aW9uKCYodXMtPm5vdGlmeSkpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnVzLT5kZWxheV93YWl0KTsKKworCS8qIEFzc29jaWF0ZSB0aGUgdXNfZGF0YSBzdHJ1Y3R1cmUgd2l0aCB0aGUgVVNCIGRldmljZSAqLworCXJlc3VsdCA9IGFzc29jaWF0ZV9kZXYodXMsIGludGYpOworCWlmIChyZXN1bHQpCisJCWdvdG8gQmFkRGV2aWNlOworCisJLyoKKwkgKiBHZXQgdGhlIHVudXN1YWxfZGV2cyBlbnRyaWVzIGFuZCB0aGUgZGVzY3JpcHRvcnMKKwkgKgorCSAqIGlkX2luZGV4IGlzIGNhbGN1bGF0ZWQgaW4gdGhlIGRlY2xhcmF0aW9uIHRvIGJlIHRoZSBpbmRleCBudW1iZXIKKwkgKiBvZiB0aGUgbWF0Y2ggZnJvbSB0aGUgdXNiX2RldmljZV9pZCB0YWJsZSwgc28gd2UgY2FuIGZpbmQgdGhlCisJICogY29ycmVzcG9uZGluZyBlbnRyeSBpbiB0aGUgcHJpdmF0ZSB0YWJsZS4KKwkgKi8KKwlnZXRfZGV2aWNlX2luZm8odXMsIGlkX2luZGV4KTsKKworI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKKwlpZiAodXMtPnByb3RvY29sID09IFVTX1BSX0VVU0JfU0REUjA5IHx8CisJCQl1cy0+cHJvdG9jb2wgPT0gVVNfUFJfRFBDTV9VU0IpIHsKKwkJLyogc2V0IHRoZSBjb25maWd1cmF0aW9uIC0tIFNUQUxMIGlzIGFuIGFjY2VwdGFibGUgcmVzcG9uc2UgaGVyZSAqLworCQlpZiAodXMtPnB1c2JfZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSAxKSB7CisJCQlVU19ERUJVR1AoImFjdGl2ZSBjb25maWcgIyVkICE9IDEgPz9cbiIsIHVzLT5wdXNiX2RldgorCQkJCS0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUpOworCQkJZ290byBCYWREZXZpY2U7CisJCX0KKwkJcmVzdWx0ID0gdXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24odXMtPnB1c2JfZGV2KTsKKworCQlVU19ERUJVR1AoIlJlc3VsdCBvZiB1c2JfcmVzZXRfY29uZmlndXJhdGlvbiBpcyAlZFxuIiwgcmVzdWx0KTsKKwkJaWYgKHJlc3VsdCA9PSAtRVBJUEUpIHsKKwkJCVVTX0RFQlVHUCgiLS0gc3RhbGwgb24gY29udHJvbCBpbnRlcmZhY2VcbiIpOworCQl9IGVsc2UgaWYgKHJlc3VsdCAhPSAwKSB7CisJCQkvKiBpdCdzIG5vdCBhIHN0YWxsLCBidXQgYW5vdGhlciBlcnJvciAtLSB0aW1lIHRvIGJhaWwgKi8KKwkJCVVTX0RFQlVHUCgiLS0gVW5rbm93biBlcnJvci4gIFJlamVjdGluZyBkZXZpY2VcbiIpOworCQkJZ290byBCYWREZXZpY2U7CisJCX0KKwl9CisjZW5kaWYKKworCS8qIEdldCB0aGUgdHJhbnNwb3J0LCBwcm90b2NvbCwgYW5kIHBpcGUgc2V0dGluZ3MgKi8KKwlyZXN1bHQgPSBnZXRfdHJhbnNwb3J0KHVzKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIEJhZERldmljZTsKKwlyZXN1bHQgPSBnZXRfcHJvdG9jb2wodXMpOworCWlmIChyZXN1bHQpCisJCWdvdG8gQmFkRGV2aWNlOworCXJlc3VsdCA9IGdldF9waXBlcyh1cyk7CisJaWYgKHJlc3VsdCkKKwkJZ290byBCYWREZXZpY2U7CisKKwkvKiBBY3F1aXJlIGFsbCB0aGUgb3RoZXIgcmVzb3VyY2VzIGFuZCBhZGQgdGhlIGhvc3QgKi8KKwlyZXN1bHQgPSB1c2Jfc3Rvcl9hY3F1aXJlX3Jlc291cmNlcyh1cyk7CisJaWYgKHJlc3VsdCkKKwkJZ290byBCYWREZXZpY2U7CisJcmVzdWx0ID0gc2NzaV9hZGRfaG9zdChob3N0LCAmaW50Zi0+ZGV2KTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgVVNCX1NUT1JBR0UKKwkJCSJVbmFibGUgdG8gYWRkIHRoZSBzY3NpIGhvc3RcbiIpOworCQlnb3RvIEJhZERldmljZTsKKwl9CisKKwkvKiBTdGFydCB1cCB0aGUgdGhyZWFkIGZvciBkZWxheWVkIFNDU0ktZGV2aWNlIHNjYW5uaW5nICovCisJcmVzdWx0ID0ga2VybmVsX3RocmVhZCh1c2Jfc3Rvcl9zY2FuX3RocmVhZCwgdXMsIENMT05FX1ZNKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIFVTQl9TVE9SQUdFIAorCQkgICAgICAgIlVuYWJsZSB0byBzdGFydCB0aGUgZGV2aWNlLXNjYW5uaW5nIHRocmVhZFxuIik7CisJCXNjc2lfcmVtb3ZlX2hvc3QoaG9zdCk7CisJCWdvdG8gQmFkRGV2aWNlOworCX0KKwlhdG9taWNfaW5jKCZ0b3RhbF90aHJlYWRzKTsKKworCS8qIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gc3RhcnQgKi8KKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCYodXMtPm5vdGlmeSkpOworCisJcmV0dXJuIDA7CisKKwkvKiBXZSBjb21lIGhlcmUgaWYgdGhlcmUgYXJlIGFueSBwcm9ibGVtcyAqLworQmFkRGV2aWNlOgorCVVTX0RFQlVHUCgic3RvcmFnZV9wcm9iZSgpIGZhaWxlZFxuIik7CisJc2V0X2JpdChVU19GTElEWF9ESVNDT05ORUNUSU5HLCAmdXMtPmZsYWdzKTsKKwl1c2Jfc3Rvcl9yZWxlYXNlX3Jlc291cmNlcyh1cyk7CisJZGlzc29jaWF0ZV9kZXYodXMpOworCXNjc2lfaG9zdF9wdXQoaG9zdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogSGFuZGxlIGEgZGlzY29ubmVjdCBldmVudCBmcm9tIHRoZSBVU0IgY29yZSAqLworc3RhdGljIHZvaWQgc3RvcmFnZV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlVU19ERUJVR1AoInN0b3JhZ2VfZGlzY29ubmVjdCgpIGNhbGxlZFxuIik7CisKKwkvKiBQcmV2ZW50IG5ldyBVU0IgdHJhbnNmZXJzLCBzdG9wIHRoZSBjdXJyZW50IGNvbW1hbmQsIGFuZAorCSAqIGludGVycnVwdCBhIFNDU0ktc2NhbiBvciBkZXZpY2UtcmVzZXQgZGVsYXkgKi8KKwlzZXRfYml0KFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcsICZ1cy0+ZmxhZ3MpOworCXVzYl9zdG9yX3N0b3BfdHJhbnNwb3J0KHVzKTsKKwl3YWtlX3VwKCZ1cy0+ZGVsYXlfd2FpdCk7CisKKwkvKiBJdCBkb2Vzbid0IG1hdHRlciBpZiB0aGUgU0NTSS1zY2FubmluZyB0aHJlYWQgaXMgc3RpbGwgcnVubmluZy4KKwkgKiBUaGUgdGhyZWFkIHdpbGwgZXhpdCB3aGVuIGl0IHNlZXMgdGhlIERJU0NPTk5FQ1RJTkcgZmxhZy4gKi8KKworCS8qIFdhaXQgZm9yIHRoZSBjdXJyZW50IGNvbW1hbmQgdG8gZmluaXNoLCB0aGVuIHJlbW92ZSB0aGUgaG9zdCAqLworCWRvd24oJnVzLT5kZXZfc2VtYXBob3JlKTsKKwl1cCgmdXMtPmRldl9zZW1hcGhvcmUpOworCXNjc2lfcmVtb3ZlX2hvc3QodXNfdG9faG9zdCh1cykpOworCisJLyogV2FpdCBmb3IgZXZlcnl0aGluZyB0byBiZWNvbWUgaWRsZSBhbmQgcmVsZWFzZSBhbGwgb3VyIHJlc291cmNlcyAqLworCXVzYl9zdG9yX3JlbGVhc2VfcmVzb3VyY2VzKHVzKTsKKwlkaXNzb2NpYXRlX2Rldih1cyk7CisKKwkvKiBEcm9wIG91ciByZWZlcmVuY2UgdG8gdGhlIGhvc3Q7IHRoZSBTQ1NJIGNvcmUgd2lsbCBmcmVlIGl0CisJICogKGFuZCAidXMiIGFsb25nIHdpdGggaXQpIHdoZW4gdGhlIHJlZmNvdW50IGJlY29tZXMgMC4gKi8KKwlzY3NpX2hvc3RfcHV0KHVzX3RvX2hvc3QodXMpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9zdG9yX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXByaW50ayhLRVJOX0lORk8gIkluaXRpYWxpemluZyBVU0IgTWFzcyBTdG9yYWdlIGRyaXZlci4uLlxuIik7CisKKwkvKiByZWdpc3RlciB0aGUgZHJpdmVyLCByZXR1cm4gdXNiX3JlZ2lzdGVyIHJldHVybiBjb2RlIGlmIGVycm9yICovCisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ1c2Jfc3RvcmFnZV9kcml2ZXIpOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVVNCIE1hc3MgU3RvcmFnZSBzdXBwb3J0IHJlZ2lzdGVyZWQuXG4iKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2Jfc3Rvcl9leGl0KHZvaWQpCit7CisJVVNfREVCVUdQKCJ1c2Jfc3Rvcl9leGl0KCkgY2FsbGVkXG4iKTsKKworCS8qIERlcmVnaXN0ZXIgdGhlIGRyaXZlcgorCSAqIFRoaXMgd2lsbCBjYXVzZSBkaXNjb25uZWN0KCkgdG8gYmUgY2FsbGVkIGZvciBlYWNoCisJICogYXR0YWNoZWQgdW5pdAorCSAqLworCVVTX0RFQlVHUCgiLS0gY2FsbGluZyB1c2JfZGVyZWdpc3RlcigpXG4iKTsKKwl1c2JfZGVyZWdpc3RlcigmdXNiX3N0b3JhZ2VfZHJpdmVyKSA7CisKKwkvKiBEb24ndCByZXR1cm4gdW50aWwgYWxsIG9mIG91ciBjb250cm9sIGFuZCBzY2FubmluZyB0aHJlYWRzCisJICogaGF2ZSBleGl0ZWQuICBTaW5jZSBlYWNoIHRocmVhZCBzaWduYWxzIHRocmVhZHNfZ29uZSBhcyBpdHMKKwkgKiBsYXN0IGFjdCwgd2UgaGF2ZSB0byBjYWxsIHdhaXRfZm9yX2NvbXBsZXRpb24gdGhlIHJpZ2h0IG51bWJlcgorCSAqIG9mIHRpbWVzLgorCSAqLworCXdoaWxlIChhdG9taWNfcmVhZCgmdG90YWxfdGhyZWFkcykgPiAwKSB7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnRocmVhZHNfZ29uZSk7CisJCWF0b21pY19kZWMoJnRvdGFsX3RocmVhZHMpOworCX0KK30KKworbW9kdWxlX2luaXQodXNiX3N0b3JfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2Jfc3Rvcl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNWI3YWE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaApAQCAtMCwwICsxLDIwNCBAQAorLyogRHJpdmVyIGZvciBVU0IgTWFzcyBTdG9yYWdlIGNvbXBsaWFudCBkZXZpY2VzCisgKiBNYWluIEhlYWRlciBGaWxlCisgKgorICogJElkOiB1c2IuaCx2IDEuMjEgMjAwMi8wNC8yMSAwMjo1Nzo1OSBtZGhhcm0gRXhwICQKKyAqCisgKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKKyAqICAgKGMpIDE5OTktMjAwMiBNYXR0aGV3IERoYXJtIChtZGhhcm0tdXNiQG9uZS1leWVkLWFsaWVuLm5ldCkKKyAqCisgKiBJbml0aWFsIHdvcmsgYnk6CisgKiAgIChjKSAxOTk5IE1pY2hhZWwgR2VlIChtaWNoYWVsQGxpbnV4c3BlY2lmaWMuY29tKQorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSAnVVNCIE1hc3MgU3RvcmFnZSBDbGFzcycgZG9jdW1lbnQuIFRoaXMKKyAqIGRlc2NyaWJlcyBpbiBkZXRhaWwgdGhlIHByb3RvY29sIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBzdWNoCisgKiBkZXZpY2VzLiAgQ2xlYXJseSwgdGhlIGRlc2lnbmVycyBoYWQgU0NTSSBhbmQgQVRBUEkgY29tbWFuZHMgaW4KKyAqIG1pbmQgd2hlbiB0aGV5IGNyZWF0ZWQgdGhpcyBkb2N1bWVudC4gIFRoZSBjb21tYW5kcyBhcmUgYWxsIHZlcnkKKyAqIHNpbWlsYXIgdG8gY29tbWFuZHMgaW4gdGhlIFNDU0ktSUkgYW5kIEFUQVBJIHNwZWNpZmljYXRpb25zLgorICoKKyAqIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgaW4gYSBudW1iZXIgb2YgY2FzZXMgdGhpcyBjbGFzcworICogZXhoaWJpdHMgY2xhc3Mtc3BlY2lmaWMgZXhlbXB0aW9ucyBmcm9tIHRoZSBVU0Igc3BlY2lmaWNhdGlvbi4KKyAqIE5vdGFibHkgdGhlIHVzYWdlIG9mIE5BSywgU1RBTEwgYW5kIEFDSyBkaWZmZXJzIGZyb20gdGhlIG5vcm0sIGluCisgKiB0aGF0IHRoZXkgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2FpdCwgZmFpbGVkIGFuZCBPSyBvbiBjb21tYW5kcy4KKyAqCisgKiBBbHNvLCBmb3IgY2VydGFpbiBkZXZpY2VzLCB0aGUgaW50ZXJydXB0IGVuZHBvaW50IGlzIHVzZWQgdG8gY29udmV5CisgKiBzdGF0dXMgb2YgYSBjb21tYW5kLgorICoKKyAqIFBsZWFzZSBzZWUgaHR0cDovL3d3dy5vbmUtZXllZC1hbGllbi5uZXQvfm1kaGFybS9saW51eC11c2IgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX1VTQl9IXworI2RlZmluZSBfVVNCX0hfCisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorCitzdHJ1Y3QgdXNfZGF0YTsKK3N0cnVjdCBzY3NpX2NtbmQ7CisKKy8qCisgKiBVbnVzdWFsIGRldmljZSBsaXN0IGRlZmluaXRpb25zIAorICovCisKK3N0cnVjdCB1c191bnVzdWFsX2RldiB7CisJY29uc3QgY2hhciogdmVuZG9yTmFtZTsKKwljb25zdCBjaGFyKiBwcm9kdWN0TmFtZTsKKwlfX3U4ICB1c2VQcm90b2NvbDsKKwlfX3U4ICB1c2VUcmFuc3BvcnQ7CisJaW50ICgqaW5pdEZ1bmN0aW9uKShzdHJ1Y3QgdXNfZGF0YSAqKTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7Cit9OworCisvKgorICogU3RhdGljIGZsYWcgZGVmaW5pdGlvbnMuICBXZSB1c2UgdGhpcyByb3VuZGFib3V0IHRlY2huaXF1ZSBzbyB0aGF0IHRoZQorICogcHJvY19pbmZvKCkgcm91dGluZSBjYW4gYXV0b21hdGljYWxseSBkaXNwbGF5IGEgbWVzc2FnZSBmb3IgZWFjaCBmbGFnLgorICovCisjZGVmaW5lIFVTX0RPX0FMTF9GTEFHUwkJCQkJCVwKKwlVU19GTEFHKFNJTkdMRV9MVU4sCTB4MDAwMDAwMDEpCQkJXAorCQkvKiBhbGxvdyBhY2Nlc3MgdG8gb25seSBMVU4gMCAqLwkJXAorCVVTX0ZMQUcoTkVFRF9PVkVSUklERSwJMHgwMDAwMDAwMikJCQlcCisJCS8qIHVudXN1YWxfZGV2cyBlbnRyeSBpcyBuZWNlc3NhcnkgKi8JCVwKKwlVU19GTEFHKFNDTV9NVUxUX1RBUkcsCTB4MDAwMDAwMDQpCQkJXAorCQkvKiBzdXBwb3J0cyBtdWx0aXBsZSB0YXJnZXRzICovCQkJXAorCVVTX0ZMQUcoRklYX0lOUVVJUlksCTB4MDAwMDAwMDgpCQkJXAorCQkvKiBJTlFVSVJZIHJlc3BvbnNlIG5lZWRzIGZha2luZyAqLwkJXAorCVVTX0ZMQUcoRklYX0NBUEFDSVRZLAkweDAwMDAwMDEwKQkJCVwKKwkJLyogUkVBRCBDQVBBQ0lUWSByZXNwb25zZSB0b28gYmlnICovCQlcCisJVVNfRkxBRyhJR05PUkVfUkVTSURVRSwJMHgwMDAwMDAyMCkJCQlcCisJCS8qIHJlcG9ydGVkIHJlc2lkdWUgaXMgd3JvbmcgKi8JCQlcCisJVVNfRkxBRyhCVUxLMzIsCQkweDAwMDAwMDQwKQkJCVwKKwkJLyogVXNlcyAzMi1ieXRlIENCVyBsZW5ndGggKi8JCQlcCisJVVNfRkxBRyhOT1RfTE9DS0FCTEUsCTB4MDAwMDAwODApCQkJXAorCQkvKiBQUkVWRU5UL0FMTE9XIG5vdCBzdXBwb3J0ZWQgKi8JCVwKKwlVU19GTEFHKEdPX1NMT1csCTB4MDAwMDAxMDApCQkJXAorCQkvKiBOZWVkIGRlbGF5IGFmdGVyIENvbW1hbmQgcGhhc2UgKi8JCVwKKwlVU19GTEFHKE5PX1dQX0RFVEVDVCwJMHgwMDAwMDIwMCkJCQlcCisJCS8qIERvbid0IGNoZWNrIGZvciB3cml0ZS1wcm90ZWN0ICovCQlcCisKKyNkZWZpbmUgVVNfRkxBRyhuYW1lLCB2YWx1ZSkJVVNfRkxfIyNuYW1lID0gdmFsdWUgLAorZW51bSB7IFVTX0RPX0FMTF9GTEFHUyB9OworI3VuZGVmIFVTX0ZMQUcKKworLyogRHluYW1pYyBmbGFnIGRlZmluaXRpb25zOiB1c2VkIGluIHNldF9iaXQoKSBldGMuICovCisjZGVmaW5lIFVTX0ZMSURYX1VSQl9BQ1RJVkUJMTggIC8qIDB4MDAwNDAwMDAgIGN1cnJlbnRfdXJiIGlzIGluIHVzZSAgKi8KKyNkZWZpbmUgVVNfRkxJRFhfU0dfQUNUSVZFCTE5ICAvKiAweDAwMDgwMDAwICBjdXJyZW50X3NnIGlzIGluIHVzZSAgICovCisjZGVmaW5lIFVTX0ZMSURYX0FCT1JUSU5HCTIwICAvKiAweDAwMTAwMDAwICBhYm9ydCBpcyBpbiBwcm9ncmVzcyAgICovCisjZGVmaW5lIFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcJMjEgIC8qIDB4MDAyMDAwMDAgIGRpc2Nvbm5lY3QgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgQUJPUlRJTkdfT1JfRElTQ09OTkVDVElORwkoKDFVTCA8PCBVU19GTElEWF9BQk9SVElORykgfCBcCisJCQkJCSAoMVVMIDw8IFVTX0ZMSURYX0RJU0NPTk5FQ1RJTkcpKQorI2RlZmluZSBVU19GTElEWF9SRVNFVFRJTkcJMjIgIC8qIDB4MDA0MDAwMDAgIGRldmljZSByZXNldCBpbiBwcm9ncmVzcyAqLworI2RlZmluZSBVU19GTElEWF9USU1FRF9PVVQJMjMgIC8qIDB4MDA4MDAwMDAgIFNDU0kgbWlkbGF5ZXIgdGltZWQgb3V0ICAqLworCisKKyNkZWZpbmUgVVNCX1NUT1JfU1RSSU5HX0xFTiAzMgorCisvKgorICogV2UgcHJvdmlkZSBhIERNQS1tYXBwZWQgSS9PIGJ1ZmZlciBmb3IgdXNlIHdpdGggc21hbGwgVVNCIHRyYW5zZmVycy4KKyAqIEl0IHR1cm5zIG91dCB0aGF0IENCW0ldIG5lZWRzIGEgMTItYnl0ZSBidWZmZXIgYW5kIEJ1bGstb25seSBuZWVkcyBhCisgKiAzMS1ieXRlIGJ1ZmZlci4gIEJ1dCBGcmVlY29tIG5lZWRzIGEgNjQtYnl0ZSBidWZmZXIsIHNvIHRoYXQncyB0aGUKKyAqIHNpemUgd2UnbGwgYWxsb2NhdGUuCisgKi8KKworI2RlZmluZSBVU19JT0JVRl9TSVpFCQk2NAkvKiBTaXplIG9mIHRoZSBETUEtbWFwcGVkIEkvTyBidWZmZXIgKi8KKwordHlwZWRlZiBpbnQgKCp0cmFuc19jbW5kKShzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCB1c19kYXRhKik7Cit0eXBlZGVmIGludCAoKnRyYW5zX3Jlc2V0KShzdHJ1Y3QgdXNfZGF0YSopOwordHlwZWRlZiB2b2lkICgqcHJvdG9fY21uZCkoc3RydWN0IHNjc2lfY21uZCosIHN0cnVjdCB1c19kYXRhKik7Cit0eXBlZGVmIHZvaWQgKCpleHRyYV9kYXRhX2Rlc3RydWN0b3IpKHZvaWQgKik7CSAvKiBleHRyYSBkYXRhIGRlc3RydWN0b3IgICAqLworCisvKiB3ZSBhbGxvY2F0ZSBvbmUgb2YgdGhlc2UgZm9yIGV2ZXJ5IGRldmljZSB0aGF0IHdlIHJlbWVtYmVyICovCitzdHJ1Y3QgdXNfZGF0YSB7CisJLyogVGhlIGRldmljZSB3ZSdyZSB3b3JraW5nIHdpdGgKKwkgKiBJdCdzIGltcG9ydGFudCB0byBub3RlOgorCSAqICAgIChvKSB5b3UgbXVzdCBob2xkIGRldl9zZW1hcGhvcmUgdG8gY2hhbmdlIHB1c2JfZGV2CisJICovCisJc3RydWN0IHNlbWFwaG9yZQlkZXZfc2VtYXBob3JlOwkgLyogcHJvdGVjdCBwdXNiX2RldiAqLworCXN0cnVjdCB1c2JfZGV2aWNlCSpwdXNiX2RldjsJIC8qIHRoaXMgdXNiX2RldmljZSAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSpwdXNiX2ludGY7CSAvKiB0aGlzIGludGVyZmFjZSAqLworCXN0cnVjdCB1c191bnVzdWFsX2RldiAgICp1bnVzdWFsX2RldjsJIC8qIGRldmljZS1maWx0ZXIgZW50cnkgICAgICovCisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkgLyogZnJvbSBmaWx0ZXIgaW5pdGlhbGx5ICovCisJdW5zaWduZWQgaW50CQlzZW5kX2J1bGtfcGlwZTsJIC8qIGNhY2hlZCBwaXBlIHZhbHVlcyAqLworCXVuc2lnbmVkIGludAkJcmVjdl9idWxrX3BpcGU7CisJdW5zaWduZWQgaW50CQlzZW5kX2N0cmxfcGlwZTsKKwl1bnNpZ25lZCBpbnQJCXJlY3ZfY3RybF9waXBlOworCXVuc2lnbmVkIGludAkJcmVjdl9pbnRyX3BpcGU7CisKKwkvKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGV2aWNlICovCisJY2hhcgkJCSp0cmFuc3BvcnRfbmFtZTsKKwljaGFyCQkJKnByb3RvY29sX25hbWU7CisJX19sZTMyCQkJYmNzX3NpZ25hdHVyZTsKKwl1OAkJCXN1YmNsYXNzOworCXU4CQkJcHJvdG9jb2w7CisJdTgJCQltYXhfbHVuOworCisJdTgJCQlpZm51bTsJCSAvKiBpbnRlcmZhY2UgbnVtYmVyICAgKi8KKwl1OAkJCWVwX2JJbnRlcnZhbDsJIC8qIGludGVycnVwdCBpbnRlcnZhbCAqLyAKKworCS8qIGZ1bmN0aW9uIHBvaW50ZXJzIGZvciB0aGlzIGRldmljZSAqLworCXRyYW5zX2NtbmQJCXRyYW5zcG9ydDsJIC8qIHRyYW5zcG9ydCBmdW5jdGlvbgkgICAqLworCXRyYW5zX3Jlc2V0CQl0cmFuc3BvcnRfcmVzZXQ7IC8qIHRyYW5zcG9ydCBkZXZpY2UgcmVzZXQgKi8KKwlwcm90b19jbW5kCQlwcm90b19oYW5kbGVyOwkgLyogcHJvdG9jb2wgaGFuZGxlcgkgICAqLworCisJLyogU0NTSSBpbnRlcmZhY2VzICovCisJc3RydWN0IHNjc2lfY21uZAkqc3JiOwkJIC8qIGN1cnJlbnQgc3JiCQkqLworCisJLyogdGhyZWFkIGluZm9ybWF0aW9uICovCisJaW50CQkJcGlkOwkJIC8qIGNvbnRyb2wgdGhyZWFkCSAqLworCisJLyogY29udHJvbCBhbmQgYnVsayBjb21tdW5pY2F0aW9ucyBkYXRhICovCisJc3RydWN0IHVyYgkJKmN1cnJlbnRfdXJiOwkgLyogVVNCIHJlcXVlc3RzCSAqLworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QJKmNyOwkJIC8qIGNvbnRyb2wgcmVxdWVzdHMJICovCisJc3RydWN0IHVzYl9zZ19yZXF1ZXN0CWN1cnJlbnRfc2c7CSAvKiBzY2F0dGVyLWdhdGhlciByZXEuICAqLworCXVuc2lnbmVkIGNoYXIJCSppb2J1ZjsJCSAvKiBJL08gYnVmZmVyCQkgKi8KKwlkbWFfYWRkcl90CQljcl9kbWE7CQkgLyogYnVmZmVyIERNQSBhZGRyZXNzZXMgKi8KKwlkbWFfYWRkcl90CQlpb2J1Zl9kbWE7CisKKwkvKiBtdXR1YWwgZXhjbHVzaW9uIGFuZCBzeW5jaHJvbml6YXRpb24gc3RydWN0dXJlcyAqLworCXN0cnVjdCBzZW1hcGhvcmUJc2VtYTsJCSAvKiB0byBzbGVlcCB0aHJlYWQgb24JICAgICovCisJc3RydWN0IGNvbXBsZXRpb24Jbm90aWZ5OwkJIC8qIHRocmVhZCBiZWdpbi9lbmQJICAgICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJZGVsYXlfd2FpdDsJIC8qIHdhaXQgZHVyaW5nIHNjYW4sIHJlc2V0ICovCisKKwkvKiBzdWJkcml2ZXIgaW5mb3JtYXRpb24gKi8KKwl2b2lkCQkJKmV4dHJhOwkJIC8qIEFueSBleHRyYSBkYXRhICAgICAgICAgICovCisJZXh0cmFfZGF0YV9kZXN0cnVjdG9yCWV4dHJhX2Rlc3RydWN0b3I7LyogZXh0cmEgZGF0YSBkZXN0cnVjdG9yICAgKi8KK307CisKKy8qIENvbnZlcnQgYmV0d2VlbiB1c19kYXRhIGFuZCB0aGUgY29ycmVzcG9uZGluZyBTY3NpX0hvc3QgKi8KK3N0YXRpYyBzdHJ1Y3QgU2NzaV9Ib3N0IGlubGluZSAqdXNfdG9faG9zdChzdHJ1Y3QgdXNfZGF0YSAqdXMpIHsKKwlyZXR1cm4gY29udGFpbmVyX29mKCh2b2lkICopIHVzLCBzdHJ1Y3QgU2NzaV9Ib3N0LCBob3N0ZGF0YSk7Cit9CitzdGF0aWMgc3RydWN0IHVzX2RhdGEgaW5saW5lICpob3N0X3RvX3VzKHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpIHsKKwlyZXR1cm4gKHN0cnVjdCB1c19kYXRhICopIGhvc3QtPmhvc3RkYXRhOworfQorCisvKiBGdW5jdGlvbiB0byBmaWxsIGFuIGlucXVpcnkgcmVzcG9uc2UuIFNlZSB1c2IuYyBmb3IgZGV0YWlscyAqLworZXh0ZXJuIHZvaWQgZmlsbF9pbnF1aXJ5X3Jlc3BvbnNlKHN0cnVjdCB1c19kYXRhICp1cywKKwl1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW4pOworCisvKiBUaGUgc2NzaV9sb2NrKCkgYW5kIHNjc2lfdW5sb2NrKCkgbWFjcm9zIHByb3RlY3QgdGhlIHNtX3N0YXRlIGFuZCB0aGUKKyAqIHNpbmdsZSBxdWV1ZSBlbGVtZW50IHNyYiBmb3Igd3JpdGUgYWNjZXNzICovCisjZGVmaW5lIHNjc2lfdW5sb2NrKGhvc3QpCXNwaW5fdW5sb2NrX2lycShob3N0LT5ob3N0X2xvY2spCisjZGVmaW5lIHNjc2lfbG9jayhob3N0KQkJc3Bpbl9sb2NrX2lycShob3N0LT5ob3N0X2xvY2spCisKKworLyogVmVuZG9yIElEIGxpc3QgZm9yIGRldmljZXMgdGhhdCByZXF1aXJlIHNwZWNpYWwgaGFuZGxpbmcgKi8KKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9HRU5FU1lTCQkweDA1ZTMJLyogR2VuZXN5cyBMb2dpYyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jIGIvZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA1MWE2NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCkBAIC0wLDAgKzEsMzYwIEBACisvKgorICogVVNCIFNrZWxldG9uIGRyaXZlciAtIDIuMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDA0IEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlIDIuNi4zIHZlcnNpb24gb2YgZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMgCisgKiBidXQgaGFzIGJlZW4gcmV3cml0dGVuIHRvIGJlIGVhc3kgdG8gcmVhZCBhbmQgdXNlLCBhcyBubyBsb2NrcyBhcmUgbm93CisgKiBuZWVkZWQgYW55bW9yZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworCisvKiBEZWZpbmUgdGhlc2UgdmFsdWVzIHRvIG1hdGNoIHlvdXIgZGV2aWNlcyAqLworI2RlZmluZSBVU0JfU0tFTF9WRU5ET1JfSUQJMHhmZmYwCisjZGVmaW5lIFVTQl9TS0VMX1BST0RVQ1RfSUQJMHhmZmYwCisKKy8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBza2VsX3RhYmxlIFtdID0geworCXsgVVNCX0RFVklDRShVU0JfU0tFTF9WRU5ET1JfSUQsIFVTQl9TS0VMX1BST0RVQ1RfSUQpIH0sCisJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgc2tlbF90YWJsZSk7CisKKworLyogR2V0IGEgbWlub3IgcmFuZ2UgZm9yIHlvdXIgZGV2aWNlcyBmcm9tIHRoZSB1c2IgbWFpbnRhaW5lciAqLworI2RlZmluZSBVU0JfU0tFTF9NSU5PUl9CQVNFCTE5MgorCisvKiBTdHJ1Y3R1cmUgdG8gaG9sZCBhbGwgb2Ygb3VyIGRldmljZSBzcGVjaWZpYyBzdHVmZiAqLworc3RydWN0IHVzYl9za2VsIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqCXVkZXY7CQkJLyogdGhlIHVzYiBkZXZpY2UgZm9yIHRoaXMgZGV2aWNlICovCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKglpbnRlcmZhY2U7CQkvKiB0aGUgaW50ZXJmYWNlIGZvciB0aGlzIGRldmljZSAqLworCXVuc2lnbmVkIGNoYXIgKgkJYnVsa19pbl9idWZmZXI7CQkvKiB0aGUgYnVmZmVyIHRvIHJlY2VpdmUgZGF0YSAqLworCXNpemVfdAkJCWJ1bGtfaW5fc2l6ZTsJCS8qIHRoZSBzaXplIG9mIHRoZSByZWNlaXZlIGJ1ZmZlciAqLworCV9fdTgJCQlidWxrX2luX2VuZHBvaW50QWRkcjsJLyogdGhlIGFkZHJlc3Mgb2YgdGhlIGJ1bGsgaW4gZW5kcG9pbnQgKi8KKwlfX3U4CQkJYnVsa19vdXRfZW5kcG9pbnRBZGRyOwkvKiB0aGUgYWRkcmVzcyBvZiB0aGUgYnVsayBvdXQgZW5kcG9pbnQgKi8KKwlzdHJ1Y3Qga3JlZgkJa3JlZjsKK307CisjZGVmaW5lIHRvX3NrZWxfZGV2KGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgdXNiX3NrZWwsIGtyZWYpCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBza2VsX2RyaXZlcjsKKworc3RhdGljIHZvaWQgc2tlbF9kZWxldGUoc3RydWN0IGtyZWYgKmtyZWYpCit7CQorCXN0cnVjdCB1c2Jfc2tlbCAqZGV2ID0gdG9fc2tlbF9kZXYoa3JlZik7CisKKwl1c2JfcHV0X2RldihkZXYtPnVkZXYpOworCWtmcmVlIChkZXYtPmJ1bGtfaW5fYnVmZmVyKTsKKwlrZnJlZSAoZGV2KTsKK30KKworc3RhdGljIGludCBza2VsX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzYl9za2VsICpkZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlpbnQgc3VibWlub3I7CisJaW50IHJldHZhbCA9IDA7CisKKwlzdWJtaW5vciA9IGltaW5vcihpbm9kZSk7CisKKwlpbnRlcmZhY2UgPSB1c2JfZmluZF9pbnRlcmZhY2UoJnNrZWxfZHJpdmVyLCBzdWJtaW5vcik7CisJaWYgKCFpbnRlcmZhY2UpIHsKKwkJZXJyICgiJXMgLSBlcnJvciwgY2FuJ3QgZmluZCBkZXZpY2UgZm9yIG1pbm9yICVkIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIHN1Ym1pbm9yKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKworCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlpZiAoIWRldikgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogaW5jcmVtZW50IG91ciB1c2FnZSBjb3VudCBmb3IgdGhlIGRldmljZSAqLworCWtyZWZfZ2V0KCZkZXYtPmtyZWYpOworCisJLyogc2F2ZSBvdXIgb2JqZWN0IGluIHRoZSBmaWxlJ3MgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBkZXY7CisKK2V4aXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBza2VsX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHVzYl9za2VsICpkZXY7CisKKwlkZXYgPSAoc3RydWN0IHVzYl9za2VsICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBkZWNyZW1lbnQgdGhlIGNvdW50IG9uIG91ciBkZXZpY2UgKi8KKwlrcmVmX3B1dCgmZGV2LT5rcmVmLCBza2VsX2RlbGV0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNrZWxfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdXNiX3NrZWwgKmRldjsKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgYnl0ZXNfcmVhZDsKKworCWRldiA9IChzdHJ1Y3QgdXNiX3NrZWwgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJCisJLyogZG8gYSBibG9ja2luZyBidWxrIHJlYWQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgZGV2aWNlICovCisJcmV0dmFsID0gdXNiX2J1bGtfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShkZXYtPnVkZXYsIGRldi0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAorCQkJICAgICAgZGV2LT5idWxrX2luX2J1ZmZlciwKKwkJCSAgICAgIG1pbihkZXYtPmJ1bGtfaW5fc2l6ZSwgY291bnQpLAorCQkJICAgICAgJmJ5dGVzX3JlYWQsIDEwMDAwKTsKKworCS8qIGlmIHRoZSByZWFkIHdhcyBzdWNjZXNzZnVsLCBjb3B5IHRoZSBkYXRhIHRvIHVzZXJzcGFjZSAqLworCWlmICghcmV0dmFsKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCBkZXYtPmJ1bGtfaW5fYnVmZmVyLCBieXRlc19yZWFkKSkKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCWVsc2UKKwkJCXJldHZhbCA9IGJ5dGVzX3JlYWQ7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgc2tlbF93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9za2VsICpkZXY7CisKKwlkZXYgPSAoc3RydWN0IHVzYl9za2VsICopdXJiLT5jb250ZXh0OworCisJLyogc3luYy9hc3luYyB1bmxpbmsgZmF1bHRzIGFyZW4ndCBlcnJvcnMgKi8KKwlpZiAodXJiLT5zdGF0dXMgJiYgCisJICAgICEodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fCAKKwkgICAgICB1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCB8fAorCSAgICAgIHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwl9CisKKwkvKiBmcmVlIHVwIG91ciBhbGxvY2F0ZWQgYnVmZmVyICovCisJdXNiX2J1ZmZlcl9mcmVlKHVyYi0+ZGV2LCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIAorCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+dHJhbnNmZXJfZG1hKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2tlbF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqdXNlcl9idWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB1c2Jfc2tlbCAqZGV2OworCWludCByZXR2YWwgPSAwOworCXN0cnVjdCB1cmIgKnVyYiA9IE5VTEw7CisJY2hhciAqYnVmID0gTlVMTDsKKworCWRldiA9IChzdHJ1Y3QgdXNiX3NrZWwgKilmaWxlLT5wcml2YXRlX2RhdGE7CisKKwkvKiB2ZXJpZnkgdGhhdCB3ZSBhY3R1YWxseSBoYXZlIHNvbWUgZGF0YSB0byB3cml0ZSAqLworCWlmIChjb3VudCA9PSAwKQorCQlnb3RvIGV4aXQ7CisKKwkvKiBjcmVhdGUgYSB1cmIsIGFuZCBhIGJ1ZmZlciBmb3IgaXQsIGFuZCBjb3B5IHRoZSBkYXRhIHRvIHRoZSB1cmIgKi8KKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCWlmICghdXJiKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYtPnVkZXYsIGNvdW50LCBHRlBfS0VSTkVMLCAmdXJiLT50cmFuc2Zlcl9kbWEpOworCWlmICghYnVmKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWZmZXIsIGNvdW50KSkgeworCQlyZXR2YWwgPSAtRUZBVUxUOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIGluaXRpYWxpemUgdGhlIHVyYiBwcm9wZXJseSAqLworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZGV2LT51ZGV2LAorCQkJICB1c2Jfc25kYnVsa3BpcGUoZGV2LT51ZGV2LCBkZXYtPmJ1bGtfb3V0X2VuZHBvaW50QWRkciksCisJCQkgIGJ1ZiwgY291bnQsIHNrZWxfd3JpdGVfYnVsa19jYWxsYmFjaywgZGV2KTsKKwl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCisJLyogc2VuZCB0aGUgZGF0YSBvdXQgdGhlIGJ1bGsgcG9ydCAqLworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldHZhbCkgeworCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiByZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gdGhpcyB1cmIsIHRoZSBVU0IgY29yZSB3aWxsIGV2ZW50dWFsbHkgZnJlZSBpdCBlbnRpcmVseSAqLworCXVzYl9mcmVlX3VyYih1cmIpOworCitleGl0OgorCXJldHVybiBjb3VudDsKKworZXJyb3I6CisJdXNiX2J1ZmZlcl9mcmVlKGRldi0+dWRldiwgY291bnQsIGJ1ZiwgdXJiLT50cmFuc2Zlcl9kbWEpOworCXVzYl9mcmVlX3VyYih1cmIpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNrZWxfZm9wcyA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkucmVhZCA9CQlza2VsX3JlYWQsCisJLndyaXRlID0Jc2tlbF93cml0ZSwKKwkub3BlbiA9CQlza2VsX29wZW4sCisJLnJlbGVhc2UgPQlza2VsX3JlbGVhc2UsCit9OworCisvKiAKKyAqIHVzYiBjbGFzcyBkcml2ZXIgaW5mbyBpbiBvcmRlciB0byBnZXQgYSBtaW5vciBudW1iZXIgZnJvbSB0aGUgdXNiIGNvcmUsCisgKiBhbmQgdG8gaGF2ZSB0aGUgZGV2aWNlIHJlZ2lzdGVyZWQgd2l0aCBkZXZmcyBhbmQgdGhlIGRyaXZlciBjb3JlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciBza2VsX2NsYXNzID0geworCS5uYW1lID0JCSJ1c2Ivc2tlbCVkIiwKKwkuZm9wcyA9CQkmc2tlbF9mb3BzLAorCS5tb2RlID0JCVNfSUZDSFIgfCBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQIHwgU19JUk9USCwKKwkubWlub3JfYmFzZSA9CVVTQl9TS0VMX01JTk9SX0JBU0UsCit9OworCitzdGF0aWMgaW50IHNrZWxfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2Jfc2tlbCAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc2l6ZV90IGJ1ZmZlcl9zaXplOworCWludCBpOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbml0aWFsaXplIGl0ICovCisJZGV2ID0ga21hbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWlmIChkZXYgPT0gTlVMTCkgeworCQllcnIoIk91dCBvZiBtZW1vcnkiKTsKKwkJZ290byBlcnJvcjsKKwl9CisJbWVtc2V0KGRldiwgMHgwMCwgc2l6ZW9mKCpkZXYpKTsKKwlrcmVmX2luaXQoJmRldi0+a3JlZik7CisKKwlkZXYtPnVkZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSkpOworCWRldi0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworCisJLyogc2V0IHVwIHRoZSBlbmRwb2ludCBpbmZvcm1hdGlvbiAqLworCS8qIHVzZSBvbmx5IHRoZSBmaXJzdCBidWxrLWluIGFuZCBidWxrLW91dCBlbmRwb2ludHMgKi8KKwlpZmFjZV9kZXNjID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKKwlmb3IgKGkgPSAwOyBpIDwgaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyArK2kpIHsKKwkJZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYzsKKworCQlpZiAoIWRldi0+YnVsa19pbl9lbmRwb2ludEFkZHIgJiYKKwkJICAgIChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pICYmCisJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKKwkJCQkJPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykpIHsKKwkJCS8qIHdlIGZvdW5kIGEgYnVsayBpbiBlbmRwb2ludCAqLworCQkJYnVmZmVyX3NpemUgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOworCQkJZGV2LT5idWxrX2luX3NpemUgPSBidWZmZXJfc2l6ZTsKKwkJCWRldi0+YnVsa19pbl9lbmRwb2ludEFkZHIgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJCWRldi0+YnVsa19pbl9idWZmZXIgPSBrbWFsbG9jKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghZGV2LT5idWxrX2luX2J1ZmZlcikgeworCQkJCWVycigiQ291bGQgbm90IGFsbG9jYXRlIGJ1bGtfaW5fYnVmZmVyIik7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJfQorCisJCWlmICghZGV2LT5idWxrX291dF9lbmRwb2ludEFkZHIgJiYKKwkJICAgICEoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX09VVCkgJiYKKwkJICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQorCQkJCQk9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSkgeworCQkJLyogd2UgZm91bmQgYSBidWxrIG91dCBlbmRwb2ludCAqLworCQkJZGV2LT5idWxrX291dF9lbmRwb2ludEFkZHIgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJfQorCX0KKwlpZiAoIShkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyICYmIGRldi0+YnVsa19vdXRfZW5kcG9pbnRBZGRyKSkgeworCQllcnIoIkNvdWxkIG5vdCBmaW5kIGJvdGggYnVsay1pbiBhbmQgYnVsay1vdXQgZW5kcG9pbnRzIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogc2F2ZSBvdXIgZGF0YSBwb2ludGVyIGluIHRoaXMgaW50ZXJmYWNlIGRldmljZSAqLworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXYpOworCisJLyogd2UgY2FuIHJlZ2lzdGVyIHRoZSBkZXZpY2Ugbm93LCBhcyBpdCBpcyByZWFkeSAqLworCXJldHZhbCA9IHVzYl9yZWdpc3Rlcl9kZXYoaW50ZXJmYWNlLCAmc2tlbF9jbGFzcyk7CisJaWYgKHJldHZhbCkgeworCQkvKiBzb21ldGhpbmcgcHJldmVudGVkIHVzIGZyb20gcmVnaXN0ZXJpbmcgdGhpcyBkcml2ZXIgKi8KKwkJZXJyKCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuIik7CisJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBsZXQgdGhlIHVzZXIga25vdyB3aGF0IG5vZGUgdGhpcyBkZXZpY2UgaXMgbm93IGF0dGFjaGVkIHRvICovCisJaW5mbygiVVNCIFNrZWxldG9uIGRldmljZSBub3cgYXR0YWNoZWQgdG8gVVNCU2tlbC0lZCIsIGludGVyZmFjZS0+bWlub3IpOworCXJldHVybiAwOworCitlcnJvcjoKKwlpZiAoZGV2KQorCQlrcmVmX3B1dCgmZGV2LT5rcmVmLCBza2VsX2RlbGV0ZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgc2tlbF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9za2VsICpkZXY7CisJaW50IG1pbm9yID0gaW50ZXJmYWNlLT5taW5vcjsKKworCS8qIHByZXZlbnQgc2tlbF9vcGVuKCkgZnJvbSByYWNpbmcgc2tlbF9kaXNjb25uZWN0KCkgKi8KKwlsb2NrX2tlcm5lbCgpOworCisJZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKworCS8qIGdpdmUgYmFjayBvdXIgbWlub3IgKi8KKwl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZXJmYWNlLCAmc2tlbF9jbGFzcyk7CisKKwl1bmxvY2tfa2VybmVsKCk7CisKKwkvKiBkZWNyZW1lbnQgb3VyIHVzYWdlIGNvdW50ICovCisJa3JlZl9wdXQoJmRldi0+a3JlZiwgc2tlbF9kZWxldGUpOworCisJaW5mbygiVVNCIFNrZWxldG9uICMlZCBub3cgZGlzY29ubmVjdGVkIiwgbWlub3IpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2tlbF9kcml2ZXIgPSB7CisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLm5hbWUgPQkJInNrZWxldG9uIiwKKwkucHJvYmUgPQlza2VsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0Jc2tlbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CXNrZWxfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1c2Jfc2tlbF9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworCS8qIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJnNrZWxfZHJpdmVyKTsKKwlpZiAocmVzdWx0KQorCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3NrZWxfZXhpdCh2b2lkKQoreworCS8qIGRlcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXVzYl9kZXJlZ2lzdGVyKCZza2VsX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0ICh1c2Jfc2tlbF9pbml0KTsKK21vZHVsZV9leGl0ICh1c2Jfc2tlbF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo=